pax_global_header00006660000000000000000000000064121161034520014505gustar00rootroot0000000000000052 comment=9bb5cba4f472b82e92aef1dd89f492ed421e3f2a genometools-1.5.1/000077500000000000000000000000001211610345200140445ustar00rootroot00000000000000genometools-1.5.1/.gitignore000066400000000000000000000015651211610345200160430ustar00rootroot00000000000000*.al1 *.bac *.bak *.bck *.bdx *.bsi *.bsr *.bwt *.core *.csv *.db *.des *.diff *.err *.esq *.fsp *.gcov *.kys *.lcp *.llv *.mbd *.mct *.md5 *.mem *.mer *.ois *.orig *.pbt *.polya *.polya.info *.prj *.pyc *.sds *.ssp *.sti1 *.suf *.swp *.tags* *.tis *~ .ccache .clang_complete .gdb_history .ycm_extra_conf.py /*.log /bin /dist /doc/devguide/*.aux /doc/devguide/*.log /doc/devguide/*.out /doc/devguide/*.toc /doc/manuals/*.aux /doc/manuals/*.bbl /doc/manuals/*.blg /doc/manuals/*.log /doc/manuals/*.out /doc/manuals/*.toc /doc/manuals/auto /lib /obj /testsuite/stest_stest_tests /testsuite/stest_testsuite LocalMakefile* TAGS cscope.* debug gthlicense.aux gthlicense.log gthlicense.pdf gthtestsuite massif.* nohup.out out src/external/hmmer* src/external/hmmer-2.3.2/squid/squid.h src/external/hmmer-2.3.2/squid/squidconf.h src/external/hmmer-2.3.2/src/config.h tags testdata/genomediff genometools-1.5.1/CHANGELOG000066400000000000000000000301361211610345200152610ustar00rootroot00000000000000changes in version 1.5.1 (2013-03-07) - bugfixes and cleanups - code generator script extended to create interface/implementation code - reference counting in GtAlphabet is now thread-safe - GtCodon, GtCodonIterator* now part of the API - GtFile, GtFileUtils APIs extended - GtDiscDistri now part of the API - GtMD5Encoder, GtMD5Fingerprint now part of the API - GtSeqIterator* now part of the API - multithreading interface now part of the API - GtTool, GtToolbox now part of the API - GtTransTable now part of the API - GtORFIterator now part of the API - GtFeatureStream moved to extended/, independent of Cairo presence - GtFeatureIndex and implementations moved to extended/, independent of Cairo presence changes in version 1.5.0 (2013-02-05) - bugfixes and cleanups - development tool `gt sain' added to run an induced suffix array sorting algorithm - the -typecheck option in the `gt gff3` and `gt gff3validator` tools now also validates parent (part-of) relationships, see -help output for details - new option -encseq besides -seqfile(s) and -regionmapping to select a encseq index as a sequence source - GtBioseq backend switched to GtEncseq - GtSeqCol is now an interface, GtEncseqCol added - GtRankedList added - GtSNPAnnotatorStream and `gt snpper' tool added - node sorting code is now aware of MD5 hash presence - compatibility with old Pango versions inproved - Lua updated to 5.1.5 - zlib updated to 1.2.7 changes in version 1.4.2 (2012-10-02) - bugfixes and cleanups - GFF3 parser now correctly handles GVF input - GtMD5Encoder added - GtRDB relational database wrapper added - database-backed feature index implementation added (SQLite, MySQL) - scripting bindings now support GtMetaNode and GtEOFNode - AnnotationSketch now uses Pango instead of the Cairo toy API for font rendering - `gt convertseq` tool has new options -contract{protein,dna}wc - `gt select` tool can use custom filters defined in Lua - `gt hop` tool added - LTRharvest is more space-efficient using streaming of indexes - LTR filtering, clustering and classification code added, used e.g. in the LTRsift software (http://www.zbh.uni-hamburg.de/LTRsift) - match iterators for BLAST and LAST added - CDS features with multiple parents are split in tidy-mode (if possible) - changed format for MD5 sequence IDs: It now uses md5:063b1024d68e26716b7f38caf958316f:1877523 instead of md5:063b1024d68e26716b7f38caf958316f. That is, the ``original'' sequence ID is kept after the MD5 hash. - `gt genomediff` tool has changed options and improved performance. - added tools for compression of short reads (with quality, fastq) either direct: tool `gt compreads compress` or using a reference genome: tool `gt compreads refcompress`. - improved running time and space requirements in suffix-prefix match computation - `gt chain2dim` has new option -global all, allowing for computing all best chains rather than a single best chain - add linear time functions to check the suffix array and the lcptable - added radixsort as new method when sorting buckets of suffixes changes in version 1.4.1 (2012-04-12) - the GFF3 parser now handles children which are defined before their parents - many small improvements to the GFF3 parser changes in version 1.4.0 (2012-04-02) - bugfixes and cleanups - the tool `gt mutate` has been renamed to `gt seqmutate`. The same functionality is still available with `gt mutate` in order not to break existing scripts. - `gt extractfeat` has new options -seqid and -target - `gt suffixerator` has new options -lcpdist, -genomediff - `gt readjoiner' toolbox added for sequence assembly - `gt encseq encode' has new option -lossless - `gt gff3 -tidy' recognizes and fixes more GFF3 errors - test suite is now multithreaded - added GtSamAlignment, GtSamfileIterator for SAM/BAM access - added GtHuffman*, GtGolomb*, GtEliasGamma* for integer encoding - added GtBit{In,Out}Stream - further optimizations in GtEncseq - ensure compatibility with GCC >=4.6 (as in Ubuntu oneiric) - BSD-licensed implementation is now used in GtRBTree - added GtRMQ class for efficient range minimum queries changes in version 1.3.9 (2011-07-02) - various bugfixes and cleanups - fix option -translate in `gt extractfeat` tool - mirroring and seqnum/filenum support added for gtruby/gtpython changes in version 1.3.8 (2011-06-16) - bugfixes and cleanups - GtEncseq completed, Lua bindings added - `gt encseq` toolbox added for encoded sequence handling - `gt suffixerator` and `gt packedindex mkindex` have new option -memlimit - `gt bed_to_gff3` has new options -o, -gzip, -bzip2 and -force - `gt gtf_to_gff3` has new options -o, -gzip, -bzip2 and -force - `gt splicesiteinfo` has new options -o, -gzip, -bzip2 and -force - `gt eval` has new options -o, -gzip, -bzip2 and -force - `gt gff3` has new option -show - `gt gff3_to_gtf` has new options -o, -gzip, -bzip2 and -force - file suffix of fingerprint tables has been changed from ".gt_bsf" to ".md5" - file suffix of bioseq index files has been changed from ".gt_bsi" to ".bsi" - file suffix of bioseq raw files has been changed from ".gt_bsr" to ".bsr" - the tool `gt filter` has been renamed to `gt select`. The same functionality is still available with `gt filter` in order not to break existing scripts - `gt id_to_md5` has new option -subtargetids changes in version 1.3.7 (2011-01-28) - bugfixes and cleanup - `gt suffixerator` now creates ssp/des/sds tables by default changes in version 1.3.6 (2011-01-07) - `gt stat` has new options -addintrons and -cdslengthdistri - the tool `gt bioseq` has been renamed to `gt seq` - `gt seq` has new options -o, -gzip, -bzip2 and -force - `gt stat` has new options -o, -gzip, -bzip2 and -force - `gt extractfeat` has new option -width - `gt splitfasta` has new option -width - `gt sequniq` has new option -width - `gt fingerprint` has new options -width, -o, -gzip, -bzip2 and -force - `gt mutate` has new options -width, -o, -gzip, -bzip2 and -force - `gt shredder` has new options -width, -o, -gzip, -bzip2 and -force - `gt seqfilter` has new options -width, -o, -gzip, -bzip2 and -force - `gt seqfilter` has new option -maxseqnum - new tool `gt seqtransform` added - `gt cds`, `gt extractfeat` and `gt splicesiteinfo` have new option -usedesc - new tools `gt md5_to_id` and `gt id_to_md5` added - `gt gff3` has new option -addids - `gt stat` has new option -source - `gt filter` has new option -source changes in version 1.3.5 (2010-07-12) - `gt gff3 -tidy` cleans up multi-features with different parents - `gt stat` shows number of multi-features - `gt gff3 -sort` joins sequence regions with the same ID - `gt cds` has new options -minorflen, -startcodon, and -finalstopcodon changes in version 1.3.4 (2009-11-19) - majority: bug fixes, cleanups - new tool `gt ltrdigest` added - new tool `gt convertseq` added - new tool `gt repfind` added - track order can be specified in AnnotationSketch - new gcc compatibility fixes - CustomStream and CustomVisitor base classes allow implementation of new functionality in {Ruby, Python} changes in version 1.3.3 (2009-07-10) - new tool `gt interfeat` added - new tool `gt mergefeat` added - new tool `gt dupfeat` added - `gt gff3 -tidy` cleans up features with duplicate attributes - new tool `gt ltrdigest` added changes in version 1.3.2 (2009-04-29) - bug fixes and cleanup changes in version 1.3.1 (2009-04-24) - `gt extractfeat` has new options -o, -gzip, and -bzip2 - `gt splitfasta` has new option -numfiles - new tool `gt sketch_page` added - `gt sketch` has new option -flattenfiles - bug fixes changes in version 1.3.0 (2008-12-03) - `gt bed_to_gff3` has new options -featuretype, -thicktype, and -blocktype - `gt sketch` has new option -input - many extensions and some changes to the C API. E.g., AnnotationSketch now allows one to define track selector functions and custom tracks. changes in version 1.2.2 (2008-11-04) - new tool `gt tallymer` added - new tool `gt congruence` added - the GenomeTools Python bindings (see gtpython/README) have been added - new tool `gt bed_to_gff3` added changes in version 1.2.1 (2008-11-03) - bug fixes changes in version 1.2.0 (2008-10-04) - `gt shredder` has new option -sample - `gt filter` has new options -targetbest and -maxgenescore - `gt gff3` has new option -typecheck - the GFF3 parser can handle embedded FASTA sequences - `gt gff3` has new option -width to format embedded FASTA sequences - new tool `gt gff3validator` has been added - `gt view` has been renamed to `gt sketch` - `gt gff3` has new option -tidy changes in version 1.1.2 (2008-07-04) - new tool `gt fingerprint` has been added - new tool `gt shredder` has been added - `gt stat` shows number of CDSs and protein-coding genes - `gt filter` has new options -hascds, -contain, and -targetstrand - `gt splitfasta` has new options -splitdesc and -force changes in version 1.1.1 (2008-04-11) - bug fixes changes in version 1.1.0 (2008-03-20) - `gt filter` has new optios -strand, -overlap, and -minaveragessp - new tool `gt mgth` has been added - new tool `gt seqfilter` has been added - new tool `gt sequniq` has been added changes in version 1.0.9 (2008-02-04): - `gt extractseq` has new options -frompos and -topos - bug fixes changes in version 1.0.8 (2007-12-13): - the GenomeTools Ruby bindings (see gtruby/README) have been added changes in version 1.0.7 (2007-11-27): - `gt view` has new option -addintrons - `gt stat` has new option -exonnumberdistri - `gt bioseq` has new option -seqlengthdistri changes in version 1.0.6 (2007-10-19): - new `gt extractseq` tool changes in version 1.0.5 (2007-10-17): - bug fixes changes in version 1.0.4 (2007-10-15): - `gt gff2` has new option -checkids (was the default behavior before) - new tool `gt chseqids` added which replaces the option -chseqids of the `gt gff3` tool - new `gt ltrharvest` tool - new `gt splicesiteinfo` tool - new `gt uniq` tool changes in version 1.0.3 (2007-09-12): - `gt view` can process multiple GFF3 files - the interactive mode has been improved (multiple line input, command line editing, similar to the Lua interpreter) - `gt gff3` has new option -offset - `gt gff3` has new option -offsetfile - `gt gff3` has new option -chseqids - all tools which process GFF3 files can read compressed GFF3 files, if the ending is correct (i.e., '.gz' for gzip compressed files and '.bz2' for bzip2 compressed files) changes in version 1.0.2 (2007-08-29): - `gt suffixerator` tool added - `gt mkfmindex` tool added - `gt uniquesub` tool added - bug fixes - new option -i added to `gt` changes in version 1.0.1 (2007-07-17): - undefined sequence-regions are added automatically - new feature types added - bug fixes changes in version 1.0.0: - `gt view` tool added (optional: compile with `make libgtview=yes`) - `gt eval` has new options -ltr and -ltrdelta which allow to evaluate LTR retrotransposon predictions instead of gene predictions - (from here on release numbers are synced with GenomeThreader) changes in version 0.7.5: - `gt splitfasta` runs faster and can process compressed files changes in version 0.7.4: - `gt gtf2gff3` has been renamed to `gt gtf_to_gff3` - new tool `gt gff3_to_gtf` has been added changes in version 0.7.3: - new exercise `gt exercise linearalign` added changes in version 0.7.2: - `gt splitfasta` tool added changes in version 0.7.1: - compilation output shortened - new functions added to libgtcore changes in version 0.7.0: - `gt eval` shows much more details - `gt cds` has new options -seqfile and -regionmapping (interface change) - `gt bioseq` can now read from stdin, too - `gt bioseq` has new option -gc-content - new tool `gt mutate` added - libgt has been split up into libgtcore and libgtext changes in version 0.6.9: - `gt stat` has new options -exonlengthdistri and -intronlengthdistri - `gt gff3` has new option -addintrons - a singular environment object and a memory allocator have been introduced changes in version 0.6.8: - Lua has been imported into the source tree - `gt extractfeat` has a new option -regionmapping - `gt bioseq` can be used with more then one sequence file - `gt filter` has a new option -seqid - `gt filter` has a new option -maxgenenum - the error() function has been removed - the GFF3 parser handles additional attributes genometools-1.5.1/CONTRIBUTORS000066400000000000000000000013701211610345200157250ustar00rootroot00000000000000The following contributors helped to develop GenomeTools. Please drop a note to gremme@zbh.uni-hamburg.de if I left someone out or missed something. - Stefan Bienert (patches) - Joachim Bonnet (Huffman/Golomb/Elias coding, GtBit{In,Out}Stream) - David Ellinghaus (parts of ltr/ subdirectory, ltrharvest tool) - Johannes Fischer (range minimum query code) - Giorgio Gonnella (codegen, simreads tool, readjoiner tools, patches) - Thomas Jahns (BitPackArray and BitPackString class, block-compressed FM-index) - Malte Mader (AnnotationSketch, sketch tool) - Brent Pedersen (python bindings, patches) - Christin Schaerfer (AnnotationSketch, sketch tool) - David Schmitz-Huebsch (mgth/ subdirectory, mgth tool) - Dirk Willrodt (genomediff tool, SAM/BAM, patches) genometools-1.5.1/INSTALL000066400000000000000000000110311211610345200150710ustar00rootroot00000000000000Building GenomeTools -------------------- Invoke GNU make, e.g.: $ make [argument ...] to build GenomeTools. You need at least version 3.80 of GNU make, you can check which version you have by invoking $ make --version On *BSD GNU make is often called ``gmake''. Possible arguments: - 64bit=yes to compile a 64-bit version (not available on all platforms) - opt=no to disable optimization - assert=no to disable assertions - amalgamation=yes to compile as an amalgamation - curses=no to disable the interactive Lua shell, dropping ncurses deps - cairo=no to disable AnnotationSketch, dropping Cairo/Pango deps - errorcheck=no to disable the handling of compiler warnings as errors - universal=yes to build a universal binary - with-hmmer=yes to add HMMER support to the LTRdigest tool Example call to build GenomeTools without assertions on a system where GNU make is called ``gmake'': $ gmake assert=no Please remember to always run `make cleanup` before rebuilding with changed make parameters! Building GenomeTools without the curses library: ------------------------------------------------ On systems without an installed curses library invoke make as above with the argument curses=no. Building GenomeTools without the sketch tool: --------------------------------------------- The AnnotationSketch engine requires the Cairo and Pango headers and libraries to be installed in order to build GenomeTools. Please consult your operating system's package manager for more information on how to install these. For example, on Debian the packages ``libcairo2-dev'' and ``libpango1.0-dev'' must be installed. If Cairo and/or Pango headers are not installed on the system, and AnnotationSketch support is not required, GenomeTools can be built without graphics support by invoking make as above with the argument cairo=no. Building GenomeTools with HMMER: -------------------------------- To enable protein domain search functionality in the ltrdigest tool please also append the with-hmmer=yes option to the make call. This option will make sure that a HMMER source package is downloaded and compiled along with the gt binary. Note that the wget executable must be available in the current PATH to do so (alternatively, you can download HMMER manually from ftp://selab.janelia.org/pub/software/hmmer/CURRENT/ and untar it in the src/external/ subdirectory). $ make with-hmmer=yes Building GenomeTools as a Universal Binary (on Mac OS X < v10.6): ----------------------------------------------------------------- Invoke make as above with the argument universal=yes. Note that on later Mac OS X systems (those with an Intel CPU) the universal=yes option is not required. Also, do not use it on Mac OS X 10.6 (Snow Leopard) or later as PowerPC support has since been discontinued. Thus trying to build a universal binary may lead to problems. Building GenomeTools on Windows (using Cygwin): ----------------------------------------------- Building GenomeTools with gcc on Windows occasionally results a warning regarding the '-fPIC' parameter. This can be ignored without problems. To ignore this warning, please append the errorcheck=no option to your make call. All other options given in this file can still be used. Testing GenomeTools (optional) ------------------------------ Call $ make test to make sure your GenomeTools build went fine. This step requires an installed Ruby 1.8 interpreter (see http://www.ruby-lang.org/en/ for informations on Ruby). Please note that all make options given during the compilation must be given in the `make test' invocation again. For example, if you compiled GenomeTools with the '64bit=yes cairo=no' options, the correct installation command would be: # make 64bit=yes cairo=no test Installing GenomeTools ---------------------- To install the ``gt'' binary and the ``libgenometools'' library (plus header files) on your system invoke $ make install Per default the files are installed under /usr/local. You can change this with the prefix argument. For example, to install under /usr, invoke # make prefix=/usr install Please note that all make options given during the compilation must be given in the `make install' invocation again. For example, if you compiled GenomeTools with the '64bit=yes cairo=no' options, the correct installation command would be: # make prefix=/usr 64bit=yes cairo=no install Omitting these options is likely to lead to problems during installation. Final note ----------- Please look at http://genometools.org for updates and report bugs if you encounter any. Enjoy! genometools-1.5.1/LICENSE000066400000000000000000000276401211610345200150620ustar00rootroot00000000000000All code of GenomeTools except src/core/msort.[ch], src/core/yarandom.[ch], and src/external/* is released under the following ICS license. It is functionally equivalent to a two-term BSD copyright with language removed that is made unnecessary by the Berne convention. See http://openbsd.org/policy.html for more information on copyrights. Copyright (c) 2003-2013 G. Gremme, S. Steinbiss, S. Kurtz, and CONTRIBUTORS Copyright (c) 2003-2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -------------------------------------------------------------------------------- The module src/core/yarandom.[ch] is covered by the following license: Copyright (c) 1997, 1998, 2003 by Jamie Zawinski Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. No representations are made about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -------------------------------------------------------------------------------- The source in src/external/bzip2-1.0.5/* is covered by the following license: This program, "bzip2", the associated library "libbzip2", and all documentation, are copyright (C) 1996-2007 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. -------------------------------------------------------------------------------- The source in src/external/expat-2.0.1/* is covered by the following license: Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- The source in src/external/libtecla-1.6.1/* is covered by the following license: Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. -------------------------------------------------------------------------------- The source in src/external/lua-5.1.4/*, src/external/cgilua-5.1.3/*, src/external/luafilesystem-1.5.0/*, src/external/lpeg-0.10.2/*, and src/external/md5-1.1.2/src/* (except des56.[ch]) is covered by the following license: Copyright (C) 1994-2008 Lua.org, PUC-Rio. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- The source src/external/md5-1.1.2/src/des56.[ch] is covered by the following license: Copyright (C) 1988 Stuart Levy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- The source in src/external/zlib-1.2.7/* is covered by the following license: Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu -------------------------------------------------------------------------------- The source in src/core/msort.[ch] is covered by the following license: Copyright (c) 1992, 1993 The Regents of the University of California. All rights reserved. This code is derived from software contributed to Berkeley by Peter McIlroy. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. genometools-1.5.1/Makefile000066400000000000000000001131671211610345200155150ustar00rootroot00000000000000# # Copyright (c) 2006-2013 Gordon Gremme # Copyright (c) 2008-2013 Sascha Steinbiss # Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # INCLUDEOPT:=-I$(CURDIR)/src -I$(CURDIR)/obj \ -I$(CURDIR)/src/external/zlib-1.2.7 \ -I$(CURDIR)/src/external/md5-1.1.2/src \ -I$(CURDIR)/src/external/lua-5.1.5/src \ -I$(CURDIR)/src/external/luafilesystem-1.5.0/src \ -I$(CURDIR)/src/external/lpeg-0.10.2 \ -I$(CURDIR)/src/external/expat-2.0.1/lib \ -I$(CURDIR)/src/external/bzip2-1.0.6 \ -I$(CURDIR)/src/external/libtecla-1.6.1 \ -I$(CURDIR)/src/external/samtools-0.1.18 \ -I$(CURDIR)/src/external/sqlite-3.7.10 ifeq ($(shell pkg-config --version > /dev/null 2> /dev/null; echo $$?),0) HAS_PKGCONFIG:=yes else HAS_PKGCONFIG:=no endif ifneq ($(cairo),no) ifeq ($(HAS_PKGCONFIG),yes) INCLUDEOPT+=$(shell pkg-config --cflags-only-I pango) \ $(shell pkg-config --cflags-only-I cairo) \ $(shell pkg-config --cflags-only-I pangocairo) \ $(shell pkg-config --cflags-only-I glib-2.0) endif endif # these variables are exported by the configuration script ifndef CC CC:=gcc endif ifndef CXX CXX:=g++ endif EXP_CFLAGS:=$(CFLAGS) EXP_LDFLAGS:=$(LDFLAGS) EXP_CXXFLAGS:=$(CXXFLAGS) EXP_CPPFLAGS:=$(CPPFLAGS) EXP_LDLIBS:=$(LIBS) -lm # ...while those starting with GT_ are for internal purposes only GT_CFLAGS:=-g -Wall -Wunused-parameter -pipe -fPIC -Wpointer-arith # expat needs -DHAVE_MEMMOVE # lua needs -DLUA_USE_POSIX # tecla needs -DHAVE_CURSES_H -DHAVE_TERM_H -DUSE_TERMINFO # zlib needs -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN EXT_FLAGS:= -DHAVE_MEMMOVE -DLUA_USE_POSIX -DLUA_DL_DLOPEN \ -DHAVE_CURSES_H -DHAVE_TERM_H -DUSE_TERMINFO \ -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN EXP_CPPFLAGS+=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(EXT_FLAGS) GT_CPPFLAGS:=$(INCLUDEOPT) GT_CXXFLAGS:=-g -pipe GT_LDFLAGS:=-Llib STEST_FLAGS:= EXP_LDFLAGS+=$(foreach dir, \ $(shell test -d /usr/local/lib && echo /usr/local/lib ; \ test -d /usr/X11R6/lib && echo /usr/X11R6/lib ; \ test -d /opt/local/lib && echo /opt/local/lib),-L$(dir)) BUILDSTAMP:=$(shell date +'"%Y-%m-%d %H:%M:%S"') # try to set RANLIB automatically SYSTEM:=$(shell uname -s) MACHINE:=$(shell uname -m) ifeq ($(SYSTEM),Darwin) RANLIB:=ranlib NO_STATIC_LINKING:=defined SHARED:=-dynamiclib -undefined dynamic_lookup SHARED_OBJ_NAME_EXT:=.dylib ifeq ($(universal),yes) MACHINE:="Universal_Binary" GT_CFLAGS+=-arch i386 -arch ppc -arch_errors_fatal GT_LDFLAGS+=-arch i386 -arch ppc -arch_errors_fatal endif ifeq ($(ppc),yes) MACHINE:="Power_Macintosh" GT_CFLAGS+=-arch ppc -arch_errors_fatal GT_LDFLAGS+=-arch ppc -arch_errors_fatal endif else SHARED_OBJ_NAME_EXT:=.so SHARED:=-shared endif # compiled executables GTMAIN_SRC:=src/gt.c src/gtr.c src/gtt.c src/interactive.c GTMAIN_OBJ:=$(GTMAIN_SRC:%.c=obj/%.o) GTMAIN_DEP:=$(GTMAIN_SRC:%.c=obj/%.d) EXAMPLES_SRC:=src/example.c EXAMPLES_DEP:=$(EXAMPLES_SRC:%.c=obj/%.d) SKPROTO_SRC:=src/skproto.c src/tools/gt_skproto.c SKPROTO_OBJ:=$(SKPROTO_SRC:%.c=obj/%.o) SKPROTO_DEP:=$(SKPROTO_SRC:%.c=obj/%.d) TOOLS_SRC:=$(wildcard src/tools/*.c) TOOLS_OBJ:=$(TOOLS_SRC:%.c=obj/%.o) TOOLS_DEP:=$(TOOLS_SRC:%.c=obj/%.d) EXPAT_DIR:=src/external/expat-2.0.1/lib LIBEXPAT_SRC:=$(EXPAT_DIR)/xmlparse.c $(EXPAT_DIR)/xmlrole.c \ $(EXPAT_DIR)/xmltok.c LIBEXPAT_OBJ:=$(LIBEXPAT_SRC:%.c=obj/%.o) LIBEXPAT_DEP:=$(LIBEXPAT_SRC:%.c=obj/%.d) LIBLUA_SRC=src/lualib.c\ src/external/md5-1.1.2/src/md5.c\ src/external/md5-1.1.2/src/md5lib.c\ src/external/md5-1.1.2/src/des56.c\ src/external/md5-1.1.2/src/ldes56.c\ src/external/luafilesystem-1.5.0/src/lfs.c\ src/external/lpeg-0.10.2/lpeg.c LIBLUA_OBJ:=$(LIBLUA_SRC:%.c=obj/%.o) LIBLUA_DEP:=$(LIBLUA_SRC:%.c=obj/%.d) LUAMAIN_SRC:=src/external/lua-5.1.5/etc/all.c LUAMAIN_OBJ:=$(LUAMAIN_SRC:%.c=obj/%.o) LUAMAIN_DEP:=$(LUAMAIN_SRC:%.c=obj/%.d) TECLA_DIR:=src/external/libtecla-1.6.1 LIBTECLA_SRC:=$(TECLA_DIR)/chrqueue.c $(TECLA_DIR)/cplfile.c \ $(TECLA_DIR)/cplmatch.c $(TECLA_DIR)/direader.c \ $(TECLA_DIR)/errmsg.c $(TECLA_DIR)/expand.c \ $(TECLA_DIR)/freelist.c $(TECLA_DIR)/getline.c \ $(TECLA_DIR)/hash.c $(TECLA_DIR)/history.c \ $(TECLA_DIR)/homedir.c $(TECLA_DIR)/ioutil.c \ $(TECLA_DIR)/keytab.c $(TECLA_DIR)/pathutil.c \ $(TECLA_DIR)/pcache.c $(TECLA_DIR)/stringrp.c \ $(TECLA_DIR)/strngmem.c $(TECLA_DIR)/version.c LIBTECLA_OBJ:=$(LIBTECLA_SRC:%.c=obj/%.o) LIBTECLA_DEP:=$(LIBTECLA_SRC:%.c=obj/%.d) BZ2_DIR:=src/external/bzip2-1.0.6 LIBBZ2_SRC:=$(BZ2_DIR)/blocksort.c $(BZ2_DIR)/huffman.c $(BZ2_DIR)/crctable.c \ $(BZ2_DIR)/randtable.c $(BZ2_DIR)/compress.c \ $(BZ2_DIR)/decompress.c $(BZ2_DIR)/bzlib.c LIBBZ2_OBJ:=$(LIBBZ2_SRC:%.c=obj/%.o) LIBBZ2_DEP:=$(LIBBZ2_SRC:%.c=obj/%.d) SQLITE3_DIR:=src/external/sqlite-3.7.10 SQLITE3_SRC:=$(SQLITE3_DIR)/sqlite3.c SQLITE3_OBJ:=$(SQLITE3_SRC:%.c=obj/%.o) SQLITE3_DEP:=$(SQLITE3_SRC:%.c=obj/%.d) HMMER_BASE:=src/external/hmmer-3.0 HMMER_DIR:=$(HMMER_BASE)/src HMMER_SRC:=$(HMMER_DIR)/emit.c $(HMMER_DIR)/build.c \ $(HMMER_DIR)/errors.c $(HMMER_DIR)/evalues.c \ $(HMMER_DIR)/eweight.c \ $(HMMER_DIR)/generic_decoding.c $(HMMER_DIR)/modelconfig.c \ $(HMMER_DIR)/generic_fwdback.c $(HMMER_DIR)/modelstats.c \ $(HMMER_DIR)/generic_msv.c $(HMMER_DIR)/mpisupport.c \ $(HMMER_DIR)/generic_null2.c $(HMMER_DIR)/p7_alidisplay.c \ $(HMMER_DIR)/generic_optacc.c $(HMMER_DIR)/p7_bg.c \ $(HMMER_DIR)/generic_stotrace.c $(HMMER_DIR)/p7_builder.c \ $(HMMER_DIR)/generic_viterbi.c $(HMMER_DIR)/p7_domaindef.c \ $(HMMER_DIR)/generic_vtrace.c $(HMMER_DIR)/p7_gmx.c \ $(HMMER_DIR)/h2_io.c $(HMMER_DIR)/p7_hmm.c \ $(HMMER_DIR)/heatmap.c $(HMMER_DIR)/p7_hmmfile.c \ $(HMMER_DIR)/p7_pipeline.c $(HMMER_DIR)/p7_prior.c \ $(HMMER_DIR)/p7_profile.c $(HMMER_DIR)/p7_spensemble.c \ $(HMMER_DIR)/hmmer.c $(HMMER_DIR)/p7_tophits.c \ $(HMMER_DIR)/p7_trace.c $(HMMER_DIR)/phmmer.c \ $(HMMER_DIR)/seqmodel.c $(HMMER_DIR)/tracealign.c \ $(HMMER_DIR)/logsum.c $(HMMER_DIR)/impl/decoding.c \ $(HMMER_DIR)/impl/optacc.c \ $(HMMER_DIR)/impl/fwdback.c $(HMMER_DIR)/impl/p7_omx.c \ $(HMMER_DIR)/impl/io.c $(HMMER_DIR)/impl/p7_oprofile.c \ $(HMMER_DIR)/impl/mpi.c $(HMMER_DIR)/impl/stotrace.c \ $(HMMER_DIR)/impl/msvfilter.c $(HMMER_DIR)/impl/vitfilter.c \ $(HMMER_DIR)/impl/null2.c HMMER_OBJ:=$(HMMER_SRC:%.c=%.o) EASEL_DIR:=$(HMMER_BASE)/easel EASEL_SRC:=$(EASEL_DIR)/easel.c $(EASEL_DIR)/esl_randomseq.c \ $(EASEL_DIR)/esl_alphabet.c $(EASEL_DIR)/esl_ratematrix.c \ $(EASEL_DIR)/esl_cluster.c $(EASEL_DIR)/esl_regexp.c \ $(EASEL_DIR)/esl_dirichlet.c $(EASEL_DIR)/esl_rootfinder.c \ $(EASEL_DIR)/esl_distance.c $(EASEL_DIR)/esl_scorematrix.c \ $(EASEL_DIR)/esl_dmatrix.c $(EASEL_DIR)/esl_sq.c \ $(EASEL_DIR)/esl_exponential.c $(EASEL_DIR)/esl_sqio_ascii.c \ $(EASEL_DIR)/esl_fileparser.c $(EASEL_DIR)/esl_sqio.c \ $(EASEL_DIR)/esl_gamma.c $(EASEL_DIR)/esl_sqio_ncbi.c \ $(EASEL_DIR)/esl_getopts.c $(EASEL_DIR)/esl_sse.c \ $(EASEL_DIR)/esl_gev.c $(EASEL_DIR)/esl_ssi.c \ $(EASEL_DIR)/esl_gumbel.c $(EASEL_DIR)/esl_stack.c \ $(EASEL_DIR)/esl_histogram.c $(EASEL_DIR)/esl_stats.c \ $(EASEL_DIR)/esl_hmm.c $(EASEL_DIR)/esl_stopwatch.c \ $(EASEL_DIR)/esl_hyperexp.c $(EASEL_DIR)/esl_stretchexp.c \ $(EASEL_DIR)/esl_keyhash.c \ $(EASEL_DIR)/esl_minimizer.c $(EASEL_DIR)/esl_threads.c \ $(EASEL_DIR)/esl_mixgev.c $(EASEL_DIR)/esl_tree.c \ $(EASEL_DIR)/esl_mpi.c $(EASEL_DIR)/esl_vectorops.c \ $(EASEL_DIR)/esl_msa.c $(EASEL_DIR)/esl_vmx.c \ $(EASEL_DIR)/esl_msacluster.c $(EASEL_DIR)/esl_weibull.c \ $(EASEL_DIR)/esl_msashuffle.c $(EASEL_DIR)/esl_workqueue.c \ $(EASEL_DIR)/esl_msaweight.c $(EASEL_DIR)/esl_wuss.c \ $(EASEL_DIR)/esl_normal.c $(EASEL_DIR)/esl_paml.c \ $(EASEL_DIR)/esl_random.c EASEL_OBJ:=$(EASEL_SRC:%.c=%.o) ZLIB_DIR:=src/external/zlib-1.2.7 ZLIB_SRC:=$(ZLIB_DIR)/adler32.c $(ZLIB_DIR)/compress.c $(ZLIB_DIR)/crc32.c \ $(ZLIB_DIR)/gzclose.c $(ZLIB_DIR)/gzlib.c $(ZLIB_DIR)/gzread.c \ $(ZLIB_DIR)/gzwrite.c $(ZLIB_DIR)/uncompr.c $(ZLIB_DIR)/deflate.c \ $(ZLIB_DIR)/trees.c $(ZLIB_DIR)/zutil.c $(ZLIB_DIR)/inflate.c \ $(ZLIB_DIR)/infback.c $(ZLIB_DIR)/inftrees.c $(ZLIB_DIR)/inffast.c ZLIB_OBJ:=$(ZLIB_SRC:%.c=obj/%.o) ZLIB_DEP:=$(ZLIB_SRC:%.c=obj/%.d) SAMTOOLS_DIR:=src/external/samtools-0.1.18 SAMTOOLS_SRC:=$(SAMTOOLS_DIR)/bgzf.c \ $(SAMTOOLS_DIR)/kstring.c \ $(SAMTOOLS_DIR)/bam_aux.c \ $(SAMTOOLS_DIR)/bam.c \ $(SAMTOOLS_DIR)/bam_import.c \ $(SAMTOOLS_DIR)/sam.c \ $(SAMTOOLS_DIR)/bam_index.c \ $(SAMTOOLS_DIR)/bam_pileup.c \ $(SAMTOOLS_DIR)/bam_lpileup.c \ $(SAMTOOLS_DIR)/bam_md.c \ $(SAMTOOLS_DIR)/razf.c \ $(SAMTOOLS_DIR)/faidx.c \ $(SAMTOOLS_DIR)/bedidx.c \ $(SAMTOOLS_DIR)/knetfile.c \ $(SAMTOOLS_DIR)/bam_sort.c \ $(SAMTOOLS_DIR)/sam_header.c \ $(SAMTOOLS_DIR)/bam_reheader.c \ $(SAMTOOLS_DIR)/kprobaln.c \ $(SAMTOOLS_DIR)/bam_cat.c SAMTOOLS_OBJ:=$(SAMTOOLS_SRC:%.c=obj/%.o) SAMTOOLS_DEP:=$(SAMTOOLS_SRC:%.c=obj/%.d) # add necessary shared lib dependencies then not building them ourselves ifeq ($(useshared),yes) DEPLIBS:=-lbz2 -lz -lexpat -llua5.1-lpeg -llua5.1 -llua5.1-md5 \ -llua5.1-filesystem -llua5.1-des56 -lbam else DEPLIBS:= endif EXP_LDLIBS += $(DEPLIBS) GTSHAREDLIB_LIBDEP += $(DEPLIBS) SERVER=satta@genometools.org WWWBASEDIR=/var/www/servers # process arguments ifeq ($(assert),no) EXP_CPPFLAGS += -DNDEBUG endif ifeq ($(cov),yes) export CCACHE_DISABLE # ccache cannot handle coverage objects GT_CFLAGS += -fprofile-arcs -ftest-coverage GT_LDFLAGS += -fprofile-arcs -ftest-coverage STEST_FLAGS += -gcov opt=no # hacks to link shared libs with cov=yes ifeq ($(SYSTEM),Linux) GT_LDFLAGS += -fprofile-arcs -ftest-coverage endif ifeq ($(MACHINE),amd64) GT_LDFLAGS += -fPIC endif endif ifneq ($(opt),no) ifeq ($(findstring clang,$(CC)),clang) ifeq ($(lto),yes) # clang/LLVM supports link-time optimization with -O4 # Note that on Linux this usually requires additional configuration of # LLVM! Consult http://llvm.org/docs/GoldPlugin.html if problems arise. GT_CFLAGS += -O4 GT_CXXFLAGS += -O4 else GT_CFLAGS += -O3 GT_CXXFLAGS += -O3 endif else GT_CFLAGS += -O3 GT_CXXFLAGS += -O3 endif endif ifeq ($(prof),yes) GT_CFLAGS += -pg GT_LDFLAGS += -pg endif ifeq ($(curl),yes) EXP_CPPFLAGS += -DCURLDEF GT_CPPFLAGS += -I/usr/include/curl -I/usr/local/include/curl EXP_LDLIBS += -lcurl endif ifneq ($(curses),no) EXP_CPPFLAGS += -DCURSES ifeq ($(findstring CYGWIN,$(SYSTEM)),CYGWIN) EXP_CPPFLAGS += $(shell pkg-config --cflags-only-I ncurses) endif EXP_LDLIBS += -lncurses GTLIBS := lib/libtecla.a endif ifdef testthreads STEST_FLAGS += -threads $(testthreads) endif ifdef gttestdata STEST_FLAGS += -gttestdata $(gttestdata) endif ifeq ($(memcheck),yes) STEST_FLAGS += -memcheck endif # system specific stuff (concerning 64bit compilation) ifeq ($(SYSTEM),Darwin) ifeq ($(64bit),yes) m64=yes else m32=yes endif endif ifeq ($(SYSTEM),Darwin) EXT_FLAGS += -DLUA_DL_DYLD else EXT_FLAGS += -DLUA_DL_DLOPEN ifneq ($(SYSTEM),FreeBSD) LUA_LDLIB:=-ldl EXP_LDLIBS += -ldl endif endif ifeq ($(64bit),yes) ifneq ($(MACHINE),x86_64) m64=yes endif BIT=64bit SPLINTD:=-D_LP64 else ifeq ($(MACHINE),x86_64) m32=yes endif BIT=32bit endif ifeq ($(m32),yes) GT_CFLAGS += -m32 HMMER_CFLAGS += -m32 GT_LDFLAGS += -m32 SQLITE_CFLAGS += -m32 endif ifeq ($(m64),yes) ifneq ($(MACHINE),ia64) ifneq ($(MACHINE),alpha) GT_CFLAGS += -m64 HMMER_CFLAGS += -m64 GT_LDFLAGS += -m64 SQLITE_CFLAGS += -m64 endif endif endif ifeq ($(findstring clang,$(CC)),clang) # do not complain about unnecessary options GT_CFLAGS += -Qunused-arguments -Wno-parentheses GT_CPPFLAGS += -Qunused-arguments -Wno-parentheses endif ifneq ($(sharedlib),no) SHARED_LIBGENOMETOOLS := lib/libgenometools$(SHARED_OBJ_NAME_EXT) endif LIBGENOMETOOLS_DIRS:= src/core \ src/extended \ src/gtlua \ src/match \ src/gth \ src/mgth \ src/ltr ifeq ($(with-hmmer),yes) LIBGENOMETOOLS_DIRS := src/external/hmmer-3.0 $(LIBGENOMETOOLS_DIRS) EXP_CPPFLAGS += -DHAVE_HMMER GT_CPPFLAGS += -I$(CURDIR)/$(HMMER_DIR) -I$(CURDIR)/$(EASEL_DIR) STEST_FLAGS += -hmmer HMMERADDTARGET = hmmerlibs endif ifneq ($(cairo),no) ifeq ($(SYSTEM),Darwin) EXP_LDFLAGS:= endif ifeq ($(HAS_PKGCONFIG),yes) GTSHAREDLIB_LIBDEP:= $(GTSHAREDLIB_LIBDEP) \ $(shell pkg-config --libs pango) \ $(shell pkg-config --libs cairo) \ $(shell pkg-config --libs pangocairo) EXP_LDLIBS:=$(EXP_LDLIBS) \ $(shell pkg-config --libs pango) \ $(shell pkg-config --libs cairo) \ $(shell pkg-config --libs pangocairo) endif ANNOTATIONSKETCH_EXAMPLES := bin/examples/sketch_constructed \ bin/examples/sketch_parsed_with_ctrack \ bin/examples/sketch_parsed_with_ordering \ bin/examples/sketch_parsed ANNOTATIONSKETCH_MANUAL := doc/manuals/annotationsketch.pdf LIBGENOMETOOLS_DIRS:=$(LIBGENOMETOOLS_DIRS) src/annotationsketch SKETCH_EXTRA_BINARIES := bin/examples/sketch_parsed \ bin/examples/sketch_constructed else EXP_CPPFLAGS += -DWITHOUT_CAIRO STEST_FLAGS += -nocairo CAIRO_FILTER_OUT:=src/gtlua/annotationsketch_lua.c \ src/gtlua/canvas_lua.c \ src/gtlua/diagram_lua.c \ src/gtlua/image_info_lua.c \ src/gtlua/layout_lua.c endif ifeq ($(threads),yes) EXP_CPPFLAGS += -DGT_THREADS_ENABLED EXP_LDLIBS += -lpthread GTSHAREDLIB_LIBDEP += -lpthread endif ifneq ($(with-sqlite),no) ifeq ($(useshared),yes) EXP_LDLIBS += -lsqlite3 GTSHAREDLIB_LIBDEP += -lsqlite3 else LIBGENOMETOOLS_DIRS := $(SQLITE3_DIR) $(LIBGENOMETOOLS_DIRS) GT_CPPFLAGS += -I$(CURDIR)/$(SQLITE3_DIR) OVERRIDELIBS += lib/libsqlite.a endif EXP_CPPFLAGS += -DHAVE_SQLITE -DSQLITE_THREADSAFE=1 EXP_LDLIBS += -lpthread ifneq ($(SYSTEM),FreeBSD) EXP_LDLIBS += -ldl endif STEST_FLAGS += -sqlite else SQLITE_FILTER_OUT:=src/extended/rdb_sqlite.c endif ifeq ($(with-mysql),yes) GTSHAREDLIB_LIBDEP:= $(GTSHAREDLIB_LIBDEP) -lmysqlclient EXP_CPPFLAGS += -DHAVE_MYSQL EXP_LDLIBS += -lmysqlclient else MYSQL_FILTER_OUT:=src/extended/rdb_mysql.c endif # the GenomeTools library LIBGENOMETOOLS_PRESRC:=$(filter-out src/ltr/pdom.c,\ $(foreach DIR,$(LIBGENOMETOOLS_DIRS),$(wildcard $(DIR)/*.c))) # remove AnnotationSketch-only bindings LIBGENOMETOOLS_PRESRC:=$(filter-out $(CAIRO_FILTER_OUT),\ $(LIBGENOMETOOLS_PRESRC)) # remove MySQL-only files LIBGENOMETOOLS_PRESRC:=$(filter-out $(MYSQL_FILTER_OUT),\ $(LIBGENOMETOOLS_PRESRC)) # remove SQLite-only files LIBGENOMETOOLS_PRESRC:=$(filter-out $(SQLITE_FILTER_OUT),\ $(LIBGENOMETOOLS_PRESRC)) ifeq ($(amalgamation),yes) LIBGENOMETOOLS_SRC:=obj/amalgamation.c else LIBGENOMETOOLS_SRC:=$(LIBGENOMETOOLS_PRESRC) endif LIBGENOMETOOLS_OBJ:=$(LIBGENOMETOOLS_SRC:%.c=obj/%.o) LIBGENOMETOOLS_DEP:=$(LIBGENOMETOOLS_SRC:%.c=obj/%.d) ifneq ($(useshared),yes) LIBGENOMETOOLS_OBJ += $(LIBLUA_OBJ) \ $(LIBEXPAT_OBJ) \ $(SAMTOOLS_OBJ) \ $(LIBBZ2_OBJ) \ $(ZLIB_OBJ) LIBGENOMETOOLS_DEP += $(LIBLUA_DEP) \ $(LIBEXPAT_DEP) \ $(SAMTOOLS_DEP) \ $(LIBBZ2_DEP) \ $(ZLIB_DEP) endif ifneq ($(with-sqlite),no) ifneq ($(useshared),yes) LIBGENOMETOOLS_OBJ := $(LIBGENOMETOOLS_OBJ) lib/libsqlite.a endif endif ifeq ($(with-hmmer),yes) LIBGENOMETOOLS_SRC += src/ltr/pdom.c LIBGENOMETOOLS_OBJ += $(HMMER_OBJ) $(EASEL_OBJ) obj/src/ltr/pdom.o endif GT_CFLAGS_NO_WERROR:=$(GT_CFLAGS) -w ifneq ($(errorcheck),no) GT_CFLAGS += -Werror endif # set prefix for install target prefix ?= /usr/local ifdef DESTDIR prefix:=$(DESTDIR)$(prefix) endif # allow to set patch program patch ?= patch ifneq ($(useshared),yes) ADDITIONAL_BINARIES:=bin/lua else ADDITIONAL_BINARIES:= endif all: lib/libgenometools.a $(SHARED_LIBGENOMETOOLS) \ bin/skproto bin/gt bin/examples/custom_stream \ bin/examples/gff3sort bin/examples/gff3validator bin/examples/noop \ $(ANNOTATIONSKETCH_EXAMPLES) \ $(ADDITIONAL_BINARIES) lib/libexpat.a: $(LIBEXPAT_OBJ) @echo "[link $(@F)]" @test -d $(@D) || mkdir -p $(@D) @ar ru $@ $(LIBEXPAT_OBJ) ifdef RANLIB @$(RANLIB) $@ endif lib/libsqlite.a: $(SQLITE3_OBJ) @echo "[link $(@F)]" @test -d $(@D) || mkdir -p $(@D) @ar ru $@ $(SQLITE3_OBJ) ifdef RANLIB @$(RANLIB) $@ endif lib/libbz2.a: $(LIBBZ2_OBJ) @echo "[link $(@F)]" @test -d $(@D) || mkdir -p $(@D) @ar ru $@ $(LIBBZ2_OBJ) ifdef RANLIB @$(RANLIB) $@ endif $(HMMER_OBJ) $(EASEL_OBJ): hmmerlibs # HMMER libs must be built with -fPIC to support shared libs on AMD64 hmmerlibs: hmmer_get @echo "[build HMMER3]" @(cd $(HMMER_BASE) && CFLAGS=-O3\ -fPIC\ $(HMMER_CFLAGS) \ ./configure -q --enable-threads > /dev/null) @$(MAKE) -s -C $(HMMER_BASE) > /dev/null lib/libz.a: $(ZLIB_OBJ) @echo "[link $(@F)]" @test -d $(@D) || mkdir -p $(@D) @ar ru $@ $(ZLIB_OBJ) ifdef RANLIB @$(RANLIB) $@ endif lib/libgenometools.a: obj/gt_config.h $(LIBGENOMETOOLS_OBJ) @echo "[link $(@F)]" @test -d $(@D) || mkdir -p $(@D) @ar r $@ $(LIBGENOMETOOLS_OBJ) ifdef RANLIB @$(RANLIB) $@ endif ifneq ($(useshared),yes) ADDITIONAL_ZLIBS:=lib/libbz2.a lib/libz.a ADDITIONAL_SO_DEPS:=$(ADDITIONAL_ZLIBS) \ lib/libexpat.a endif lib/libgenometools$(SHARED_OBJ_NAME_EXT): obj/gt_config.h \ $(LIBGENOMETOOLS_OBJ) \ $(ADDITIONAL_SO_DEPS) \ $(ADDITIONAL_ZLIBS) @echo "[link $(@F)]" @test -d $(@D) || mkdir -p $(@D) @$(CC) $(EXP_LDFLAGS) $(GT_LDFLAGS) $(ADDITIONAL_SO_DEPS) $(SHARED) $(LIBGENOMETOOLS_OBJ) \ -o $@ $(GTSHAREDLIB_LIBDEP) lib/libtecla.a: $(LIBTECLA_OBJ) @echo "[link $(@F)]" @test -d $(@D) || mkdir -p $(@D) @ar ru $@ $(LIBTECLA_OBJ) ifdef RANLIB @$(RANLIB) $@ endif define PROGRAM_template $(1): $(2) @echo "[link $$(@F)]" @test -d $$(@D) || mkdir -p $$(@D) @$$(CC) $$(EXP_LDFLAGS) $$(GT_LDFLAGS) $$(filter-out $$(OVERRIDELIBS),$$^) \ $$(filter-out $$(patsubst lib%.a,-l%,$$(notdir $$(OVERRIDELIBS))),\ $$(EXP_LDLIBS)) $$(OVERRIDELIBS) -o $$@ endef $(eval $(call PROGRAM_template, bin/skproto, $(SKPROTO_OBJ) \ lib/libgenometools.a \ $(ADDITIONAL_ZLIBS))) $(eval $(call PROGRAM_template, bin/gt, $(GTMAIN_OBJ) $(TOOLS_OBJ) \ lib/libgenometools.a \ $(GTLIBS) \ $(ADDITIONAL_ZLIBS))) $(eval $(call PROGRAM_template, bin/examples/custom_stream, \ obj/src/examples/custom_stream.o \ lib/libgenometools.a\ $(ADDITIONAL_ZLIBS))) $(eval $(call PROGRAM_template, bin/examples/gff3sort, \ obj/src/examples/gff3sort.o \ lib/libgenometools.a \ $(ADDITIONAL_ZLIBS))) $(eval $(call PROGRAM_template, bin/examples/gff3validator, \ obj/src/examples/gff3validator.o \ lib/libgenometools.a \ $(ADDITIONAL_ZLIBS))) $(eval $(call PROGRAM_template, bin/examples/noop, \ obj/src/examples/noop.o \ lib/libgenometools.a \ $(ADDITIONAL_ZLIBS))) $(eval $(call PROGRAM_template, bin/examples/sketch_constructed, \ obj/src/examples/sketch_constructed.o \ lib/libgenometools.a \ $(ADDITIONAL_ZLIBS))) $(eval $(call PROGRAM_template, bin/examples/sketch_parsed, \ obj/src/examples/sketch_parsed.o \ lib/libgenometools.a \ $(ADDITIONAL_ZLIBS))) $(eval $(call PROGRAM_template, bin/examples/sketch_parsed_with_ctrack, \ obj/src/examples/sketch_parsed_with_ctrack.o \ lib/libgenometools.a \ $(ADDITIONAL_ZLIBS))) $(eval $(call PROGRAM_template, bin/examples/sketch_parsed_with_ordering, \ obj/src/examples/sketch_parsed_with_ordering.o \ lib/libgenometools.a \ $(ADDITIONAL_ZLIBS))) bin/lua: $(LUAMAIN_OBJ) @echo "[link $(@F)]" @test -d $(@D) || mkdir -p $(@D) @$(CC) $(EXP_LDFLAGS) $(GT_LDFLAGS) $^ -lm $(LUA_LDLIB) -o $@ obj/gt_config.h: VERSION @echo '[create $@]' @test -d $(@D) || mkdir -p $(@D) @(echo '#ifndef GT_CONFIG_H' ;\ echo '#define GT_CONFIG_H' ;\ echo '#define GT_BUILT $(BUILDSTAMP)' ;\ echo '#define GT_CC "'`$(CC) --version | head -n 1`\" ;\ echo '#define GT_CFLAGS "$(EXP_CFLAGS) $(GT_CFLAGS)"' ;\ echo '$(EXP_CPPFLAGS) $(GT_CPPFLAGS)' | \ sed -e 's/\([^\]\)"/\1\\"/g' -e 's/^"/\\"/g' -e 's/$$/"/' \ -e 's/^/#define GT_CPPFLAGS "/'; \ echo '#define GT_VERSION "'`cat VERSION`\" ) > $@ @cat VERSION | \ sed 's/\([0-9]*\)\.[0-9]*\.[0-9]*/#define GT_MAJOR_VERSION \1/' >> $@ @cat VERSION | \ sed 's/[0-9]*\.\([0-9]*\)\.[0-9]*/#define GT_MINOR_VERSION \1/' >> $@ @cat VERSION | \ sed 's/[0-9]*\.[0-9]*\.\([0-9]*\)/#define GT_MICRO_VERSION \1/' >> $@ @echo '#endif' >> $@ obj/amalgamation.c: $(LIBGENOMETOOLS_PRESRC) @echo '[create $@]' @test -d $(@D) || mkdir -p $(@D) @scripts/create_amalgamation $(LIBGENOMETOOLS_PRESRC) > $@ bitpackstringop_Dependencies=src/core/bitpackstringop.template \ src/core/bitpackstringvectorreadop.gen \ src/core/bitpackstringvectorwriteop.gen \ scripts/template2c.pl src/core/bitpackstringop8.c: $(bitpackstringop_Dependencies) @echo '[rebuild $@]' @scripts/template2c.pl 8 $< src/core/checkbitpackstring8.c: \ src/core/checkbitpackstring.template scripts/template2c.pl @echo '[rebuild $@]' @scripts/template2c.pl 8 $< src/core/bitpackstringop16.c: $(bitpackstringop_Dependencies) @echo '[rebuild $@]' @scripts/template2c.pl 16 $< src/core/checkbitpackstring16.c: \ src/core/checkbitpackstring.template scripts/template2c.pl @echo '[rebuild $@]' @scripts/template2c.pl 16 $< src/core/bitpackstringop32.c: $(bitpackstringop_Dependencies) @echo '[rebuild $@]' @scripts/template2c.pl 32 $< src/core/checkbitpackstring32.c: \ src/core/checkbitpackstring.template scripts/template2c.pl @echo '[rebuild $@]' @scripts/template2c.pl 32 $< src/core/bitpackstringop64.c: $(bitpackstringop_Dependencies) @echo '[rebuild $@]' @scripts/template2c.pl 64 $< src/core/checkbitpackstring64.c: \ src/core/checkbitpackstring.template scripts/template2c.pl @echo '[rebuild $@]' @scripts/template2c.pl 64 $< src/core/checkbitpackstring-int.c: \ src/core/checkbitpackstring.template scripts/template2c.pl @echo '[rebuild $@]' @scripts/template2c.pl '-int' $< # If HMMER3 SIMD support is enabled, pdom.o must be compiled with additional # compiler flags. Get these from the HMMER3 Makefile so we don't # have to repeat what autoconf did. obj/src/ltr/pdom.o: src/ltr/pdom.c $(HMMERADDTARGET) @echo "[compile $(@F)]" @test -d $(@D) || mkdir -p $(@D) @$(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) $(EXP_CFLAGS) \ $(filter-out -fomit-frame-pointer, \ ${shell grep -s "CFLAGS " $(HMMER_BASE)/Makefile | cut -f 2- -d "=" }) \ ${shell grep -s "SIMDFLAGS " $(HMMER_BASE)/Makefile | cut -f 2- -d "=" } \ $(GT_CFLAGS) $(3) @$(CC) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \ $(filter-out -fomit-frame-pointer, \ ${shell grep -s "CFLAGS " $(HMMER_BASE)/Makefile | cut -f 2- -d "=" }) \ ${shell grep -s "SIMDFLAGS " $(HMMER_BASE)/Makefile | cut -f 2- -d "=" } \ $(3) -MM -MP -MT $@ # SQLite needs special attention obj/$(SQLITE3_DIR)/%.o: $(SQLITE3_DIR)/%.c @echo "[compile $(@F)]" @test -d $(@D) || mkdir -p $(@D) @$(CC) -c $< -o $@ -DHAVE_MALLOC_USABLE_SIZE $(EXP_CPPFLAGS) \ $(GT_CPPFLAGS) $(EXP_CFLAGS) $(SQLITE_CFLAGS) -DSQLITE_ENABLE_UNLOCK_NOTIFY $(3) -fPIC @$(CC) -c $< -o $(@:.o=.d) -DHAVE_MALLOC_USABLE_SIZE $(EXP_CPPFLAGS) \ $(GT_CPPFLAGS) $(3) -MM -MP -MT $@ -fPIC define COMPILE_template $(1): $(2) @echo "[compile $$(@F)]" @test -d $$(@D) || mkdir -p $$(@D) @$$(CC) -c $$< -o $$@ $$(EXP_CPPFLAGS) $$(GT_CPPFLAGS) $$(EXP_CFLAGS) \ $$(GT_CFLAGS) $(3) @$$(CC) -c $$< -o $$(@:.o=.d) $$(EXP_CPPFLAGS) $$(GT_CPPFLAGS) \ $(3) -MM -MP -MT $$@ endef obj/$(SAMTOOLS_DIR)/%.o: $(SAMTOOLS_DIR)/%.c @echo "[compile $(notdir $@)]" @test -d $(@D) || mkdir -p $(@D) @$(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \ $(EXP_CFLAGS) $(GT_CFLAGS_NO_WERROR) @$(CC) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) $(GT_CPPFLAGS) -MM -MP \ -MT $@ $(eval $(call COMPILE_template, obj/%.o, %.c)) obj/%.o: %.cxx @echo "[compile $@]" @test -d $(@D) || mkdir -p $(@D) @$(CXX) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \ $(EXP_CXXFLAGS) $(GT_CXXFLAGS) @$(CXX) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) $(GT_CPPFLAGS) -MM -MP \ -MT $@ obj/%.o: %.cpp @echo "[compile $@]" @test -d $(@D) || mkdir -p $(@D) @$(CXX) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \ $(EXP_CXXFLAGS) $(GT_CXXFLAGS) @$(CXX) -c $< -o $(@:.o=.d) $(EXP_CPPFLAGS) $(GT_CPPFLAGS) -MM -MP \ -MT $@ obj/src/core/versionfunc.o: obj/gt_config.h # read dependencies -include $(GTMAIN_DEP) \ $(EXAMPLES_DEP) \ $(SKPROTO_DEP) \ $(TOOLS_DEP) \ $(LUAMAIN_DEP) \ $(LIBTECLA_DEP) \ $(LIBBZ2_DEP) \ $(HMMER_DEP) \ $(ZLIB_DEP) \ $(SAMTOOLS_DEP) \ $(LIBGENOMETOOLS_DEP) \ obj/src/examples/custom_stream.d \ obj/src/examples/gff3sort.d \ obj/src/examples/gff3validator.d \ obj/src/examples/noop.d \ obj/src/examples/sketch_constructed.d \ obj/src/examples/sketch_parsed.d .PRECIOUS: $(HMMER_DIR)/%.c .SUFFIXES: .PHONY: dist srcdist release gt install docs manuals installwww push \ splint test clean cleanup hmmer_get VERSION:="`cat $(CURDIR)/VERSION`" SYSTEMNAME:="$(SYSTEM)_$(MACHINE)" GTDISTBASENAME:="gt-$(VERSION)-$(SYSTEMNAME)-${BIT}" DISTDIR:="$(CURDIR)/dist/$(SYSTEMNAME)" SCRIPTSDIR:="$(CURDIR)/scripts" GTDISTDIR:="$(DISTDIR)/$(GTDISTBASENAME)" dist: all manuals @echo "[build distribution]" @rm -rf $(GTDISTDIR) @rm -rf $(DISTDIR)/$(GTDISTBASENAME).tar.gz @mkdir -p $(GTDISTDIR)/bin $(GTDISTDIR)/doc @cp $(CURDIR)/doc/dist_readme.txt $(GTDISTDIR)/README @cp $(CURDIR)/LICENSE $(GTDISTDIR) @cp $(CURDIR)/CONTRIBUTORS $(GTDISTDIR) @cp $(CURDIR)/CHANGELOG $(GTDISTDIR) @cp $(CURDIR)/bin/gt $(GTDISTDIR)/bin @strip $(GTDISTDIR)/bin/gt @cp $(CURDIR)/doc/manuals/*.pdf $(GTDISTDIR)/doc @cp -r $(CURDIR)/gtdata $(GTDISTDIR) @cp -r $(CURDIR)/gtpython $(GTDISTDIR) @cp -r $(CURDIR)/gtruby $(GTDISTDIR) @$(MAKE) prefix=$(GTDISTDIR) install @cd $(DISTDIR) && $(SCRIPTSDIR)/tar_root.sh $(GTDISTBASENAME) @cd $(DISTDIR) && gzip -f -9 $(GTDISTBASENAME).tar @echo "$(DISTDIR)/$(GTDISTBASENAME).tar.gz" srcdist: git archive --format=tar --prefix=genometools-`cat VERSION`/ HEAD | \ gzip -9 > genometools-`cat VERSION`.tar.gz release: git tag "v`cat VERSION`" git archive --format=tar --prefix="genometools-`cat VERSION`"/ HEAD | \ gzip -9 > genometools-`cat VERSION`.tar.gz scp "genometools-`cat VERSION`.tar.gz" $(SERVER):$(WWWBASEDIR)/genometools.org/htdocs/pub git push --tags origin master git push --tags github master docs: bin/gt $(SKETCH_EXTRA_BINARIES) bin/gt gtscripts/gtdoc.lua -html $(CURDIR) \ > www/genometools.org/htdocs/libgenometools.html bin/gt gtscripts/gtdoc.lua -lua -html $(CURDIR) \ > www/genometools.org/htdocs/docs.html ifdef SKETCH_EXTRA_BINARIES bin/examples/sketch_parsed gtdata/sketch/default.style \ www/genometools.org/htdocs/images/parsed.png \ testdata/eden.gff3 bin/examples/sketch_parsed \ www/genometools.org/htdocs/annotationsketch/callbacks.style \ www/genometools.org/htdocs/images/callbacks.png \ www/genometools.org/htdocs/annotationsketch/callback_examples_with_score.gff3 bin/examples/sketch_constructed gtdata/sketch/default.style \ www/genometools.org/htdocs/images/constructed.png endif sed -nf scripts/incl.sed \ www/genometools.org/htdocs/examples_tmpl.html | \ sed 'N;N;s/\n//' > /tmp/tmp.sed.$$$$ && \ sed -f /tmp/tmp.sed.$$$$ \ www/genometools.org/htdocs/examples_tmpl.html > \ www/genometools.org/htdocs/examples.html; rm -f /tmp/tmp.sed.$$$$ bin/gt gtscripts/gtdoc.lua -tex $(CURDIR) \ > doc/manuals/api_reference.tex bin/gt gtscripts/gtdoc.lua -lua -tex $(CURDIR) \ > doc/manuals/gtscript_reference.tex $(MAKE) -C $(CURDIR)/doc/devguide doc/manuals/annotationsketch.pdf: docs $(MAKE) -C $(CURDIR)/doc/manuals annotationsketch manuals: $(ANNOTATIONSKETCH_MANUAL) $(MAKE) -C $(CURDIR)/doc/manuals installwww: # install genometools.org website rsync -rv www/genometools.org/ $(SERVER):$(WWWBASEDIR)/genometools.org push: git push origin master git push github master gt: bin/gt install: all test -d $(prefix)/bin || mkdir -p $(prefix)/bin cp bin/gt $(prefix)/bin cp -r gtdata $(prefix)/bin test -d $(prefix)/include/genometools/core \ || mkdir -p $(prefix)/include/genometools/core cp src/core/*_api.h $(prefix)/include/genometools/core test -d $(prefix)/include/genometools/extended \ || mkdir -p $(prefix)/include/genometools/extended cp src/extended/*_api.h $(prefix)/include/genometools/extended test -d $(prefix)/include/genometools/annotationsketch \ || mkdir -p $(prefix)/include/genometools/annotationsketch cp src/annotationsketch/*_api.h \ $(prefix)/include/genometools/annotationsketch test -d $(prefix)/include/genometools/ltr \ || mkdir -p $(prefix)/include/genometools/ltr cp src/ltr/*_api.h $(prefix)/include/genometools/ltr cp obj/gt_config.h $(prefix)/include/genometools cp src/genometools.h $(prefix)/include/genometools test -d $(prefix)/lib || mkdir -p $(prefix)/lib cp lib/libgenometools.a $(prefix)/lib ifdef RANLIB $(RANLIB) $(prefix)/lib/libgenometools.a endif cp lib/libgenometools$(SHARED_OBJ_NAME_EXT) $(prefix)/lib @echo '[build config script $(@F)]' sed -e 's!@CC@!$(CC)!' -e 's!@CFLAGS@!$(EXP_CFLAGS)!' \ -e 's!@CPPFLAGS@!$(subst ",\\",-I"$(prefix)/include" $(EXP_CPPFLAGS))!' \ -e 's!@CXX@!$(CXX)!' -e 's!@CXXFLAGS@!$(EXP_CXXFLAGS)!' \ -e 's!@LDFLAGS@!-L$(prefix)/lib $(EXP_LDFLAGS)!' \ -e 's!@LIBS@!$(EXP_LDLIBS)!' -e "s!@VERSION@!`cat VERSION`!" \ -e 's!@BUILDSTAMP@!$(BUILDSTAMP)!' \ -e 's!@SYSTEM@!$(SYSTEM)!' $(prefix)/bin/genometools-config chmod 755 $(prefix)/bin/genometools-config cflags: @echo ${GT_CFLAGS} splint: obj/gt_config.h splint -f $(CURDIR)/testdata/Splintoptions $(INCLUDEOPT) \ $(CURDIR)/src/*.c \ $(CURDIR)/src/core/*.c \ $(CURDIR)/src/extended/*.c \ $(CURDIR)/src/tools/*.c EISFILES=${shell ls ${CURDIR}/src/match/*.c | grep eis-} SKTOOLS=${shell grep -l Kurtz src/tools/*.c} SKCORE=${shell grep -l 'Stefan Kurtz' src/core/*.c} DWCORE=${shell grep -l Willrodt src/core/*.c} DWTOOLS=${shell grep -l Willrodt src/tools/*.c} GGTOOLS=${shell grep -l Gonnella src/tools/*.c} SKEXT=${shell grep -l 'Stefan Kurtz' src/extended/*.c} DWEXT=${shell grep -l Willrodt src/extended/*.c} GGEXT=${shell grep -l Gonnella src/extended/*.c} ALLSPLINT=${addprefix obj/,${notdir ${subst .c,.splint,\ ${filter-out ${EISFILES},${wildcard ${CURDIR}/src/match/*.c}}\ ${wildcard ${CURDIR}/src/ltr/*.c}\ ${SKTOOLS} ${SKCORE} ${SKEXT} \ ${DWTOOLS} ${DWCORE} ${DWEXT} \ ${GGTOOLS} ${GGEXT} }}} spgt:${ALLSPLINT} scgt: src_check src/core/* src_check src/match/* src_check src/ltr/* src_check src/extended/* src_check src/tools/* splintclean: find obj -name '*.splint' | xargs rm -f obj/%.splint: ${CURDIR}/src/match/%.c @echo "splint $<" @splint $(SPLINTD) $(EXP_CFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/SKsplintoptions $< @touch $@ obj/%.splint: ${CURDIR}/src/tools/%.c @echo "splint $<" @splint $(SPLINTD) $(EXP_CFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/SKsplintoptions $< @touch $@ obj/%.splint: ${CURDIR}/src/ltr/%.c @echo "splint $<" @splint $(SPLINTD) $(EXP_CFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/SKsplintoptions $< @touch $@ obj/%.splint: ${CURDIR}/src/core/%.c @echo "splint $<" @splint $(SPLINTD) $(EXP_CFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/SKsplintoptions $< @touch $@ obj/%.splint: ${CURDIR}/src/extended/%.c @echo "splint $<" @splint $(SPLINTD) $(EXP_CFLAGS) $(INCLUDEOPT) -f $(CURDIR)/testdata/SKsplintoptions $< @touch $@ DWHEADER=${filter-out %impl.h, ${shell find ${CURDIR} -name '*.h' | \ xargs grep -l Willrodt}} ALLHEADER=${addprefix obj/,${notdir ${subst .h,.check,\ ${DWHEADER}}}} headercheck:${ALLHEADER} headerclean: find obj -name '*.check' | xargs rm -f obj/%.check: ${CURDIR}/src/match/%.h @echo "check include $<" @src_check_header.rb $< @touch $@ obj/%.check: ${CURDIR}/src/tools/%.h @echo "check include $<" @src_check_header.rb $< @touch $@ obj/%.check: ${CURDIR}/src/ltr/%.h @echo "check include $<" @src_check_header.rb $< @touch $@ obj/%.check: ${CURDIR}/src/core/%.h @echo "check include $<" @src_check_header.rb $< @touch $@ obj/%.check: ${CURDIR}/src/extended/%.h @echo "check include $<" @src_check_header.rb $< @touch $@ obj/%.prepro: ${CURDIR}/src/match/%.c @echo "[generate $@]" $(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \ $(EXP_CFLAGS) $(GT_CFLAGS) -E -g3 indent $@ obj/%.prepro: ${CURDIR}/src/tools/%.c @echo "[generate $@]" $(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \ $(EXP_CFLAGS) $(GT_CFLAGS) -E -g3 indent $@ obj/%.prepro: ${CURDIR}/src/core/%.c @echo "[generate $@]" $(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \ $(EXP_CFLAGS) $(GT_CFLAGS) -E -g3 indent $@ obj/%.prepro: ${CURDIR}/src/extended/%.c @echo "[generate $@]" $(CC) -c $< -o $@ $(EXP_CPPFLAGS) $(GT_CPPFLAGS) \ $(EXP_CFLAGS) $(GT_CFLAGS) -E -g3 indent $@ RUBY:=ruby test: all GT_MEM_BOOKKEEPING=on bin/gt -test cd testsuite && env -i GT_MEM_BOOKKEEPING=on MAKE=$(MAKE) PATH=$(PATH) \ CCACHE_DISABLE=yes HOME=$(HOME) \ $(RUBY) -I. testsuite.rb \ -testdata $(CURDIR)/testdata -bin $(CURDIR)/bin -cur $(CURDIR) \ -gtruby $(CURDIR)/gtruby $(STEST_FLAGS) clean: rm -rf obj rm -rf testsuite/stest_testsuite testsuite/stest_stest_tests $(MAKE) -s -C $(CURDIR)/doc/devguide clean $(MAKE) -s -C $(CURDIR)/doc/manuals cleanup test -d "$(HMMER_BASE)" && $(MAKE) -s -C $(HMMER_BASE) clean || true cleangenerated: rm -f doc/manuals/api_reference.tex \ doc/manuals/gtscript_reference.tex find doc . -name "*.toc" -delete rm -f www/genometools.org/htdocs/images/callbacks.png \ www/genometools.org/htdocs/images/parsed.png \ www/genometools.org/htdocs/images/constructed.png \ doc/manuals/annotationsketch.pdf rm -f www/genometools.org/htdocs/docs.html \ www/genometools.org/htdocs/examples.html \ www/genometools.org/htdocs/libgenometools.html gtkviewer: @echo "[compile $(notdir $@)]" @$(CC) -o bin/examples/gtkviewer $(GT_CPPFLAGS) $(GT_LDFLAGS) \ src/examples/gtkviewer.c -lcairo `pkg-config --cflags --libs gtk+-2.0` \ -lgenometools cleanup: clean cleangenerated rm -rf lib bin rm -rf gtpython/build hmmer_get: @echo "[check for HMMER3]" @test ! -f "src/external/hmmer-3.0.tar.gz" && \ cd src/external && \ echo "[retrieve HMMER3]" && \ wget -q ftp://selab.janelia.org/pub/software/hmmer3/3.0/hmmer-3.0.tar.gz || true @test ! -d "$(HMMER_BASE)" && \ cd src/external && \ echo "[decompress HMMER3]" && \ tar -xzf hmmer-3.0.tar.gz || true genometools-1.5.1/README000066400000000000000000000033541211610345200147310ustar00rootroot00000000000000This directory contains the source code for GenomeTools (gt). Copyright (c) 2003-2013 G. Gremme, S. Steinbiss, S. Kurtz, and CONTRIBUTORS Copyright (c) 2003-2013 Center for Bioinformatics, University of Hamburg See LICENSE file or http://genometools.org/license.html for license details. The GenomeTools genome analysis system is a collection of bioinformatics tools (in the realm of genome informatics) combined into a single binary named ``gt''. It is based on a C library named ``libgenometools''. doc/ some documentation gtdata/ data needed by gt (during runtime) gtruby/ contains GenomeTools Ruby bindings (-> gtruby/README) gtpython/ contains GenomeTools Python bindings (-> gtpython/README) gtscripts/ some GenomeTools scripts (can be executed with gt) scripts/ scripts used for development src/ the C source code for gt itself and the runtime src/annotationsketch/ the C source code for AnnotationSketch src/core/ the C source code for the ``core'' part src/examples/ the C source code for some examples src/extended/ the C source code for the ``extended'' part src/external/ all C source code from external sources src/gtlua/ the C source code for the ``gtlua'' bindings src/ltr/ the C source code for the ``ltr'' part src/match/ the C source code for the ``match'' part src/mgth/ the C source code for the ``mgth'' part src/tools/ the C source code for all tools testdata/ the test data necessary for the test suite testsuite/ the test suite www/ the web site See INSTALL file for installation guidelines. genometools-1.5.1/VERSION000066400000000000000000000000061211610345200151100ustar00rootroot000000000000001.5.1 genometools-1.5.1/doc/000077500000000000000000000000001211610345200146115ustar00rootroot00000000000000genometools-1.5.1/doc/devguide/000077500000000000000000000000001211610345200164055ustar00rootroot00000000000000genometools-1.5.1/doc/devguide/.gitignore000066400000000000000000000000151211610345200203710ustar00rootroot00000000000000devguide.pdf genometools-1.5.1/doc/devguide/Makefile000077500000000000000000000006061211610345200200520ustar00rootroot00000000000000latexfile = devguide TEX = pdflatex $(latexfile).pdf : $(latexfile).tex while ($(TEX) --shell-escape $(latexfile) ; \ grep -q "Rerun to get cross" $(latexfile).log ) do true ; \ done pdf : $(latexfile).pdf $(latexfile).ps : $(latexfile).dvi dvips -o $(latexfile).ps $(latexfile).dvi ps : $(latexfile).ps clean: rm -f $(latexfile).pdf *.aux *.ps *.dvi *.log *.out *.toc *.bak genometools-1.5.1/doc/devguide/devguide.tex000066400000000000000000002330571211610345200207350ustar00rootroot00000000000000\documentclass[11pt,final]{article} \usepackage{a4wide} \usepackage{graphicx} % figures \usepackage{listings} % source code \usepackage{hyperref} % navigation \usepackage{booktabs} \usepackage[small]{caption} \usepackage{color} \usepackage{xspace} \usepackage{mathptmx} \setcounter{tocdepth}{1} \parindent0mm % this looks better in short paragraphs \definecolor{lightgray}{rgb}{.95,.95,.95} \definecolor{middlegray}{rgb}{.55,.55,.55} \lstset{ basicstyle=\footnotesize\ttfamily, keywordstyle=\bfseries\ttfamily, commentstyle=\color{middlegray}\ttfamily, tabsize=2, numbers=none, numberstyle=\tiny, numberblanklines=false, stepnumber=1, numbersep=10pt, language=C, xleftmargin=0pt, backgroundcolor=\color{lightgray} } \newcommand{\classname}[1]{\emph{#1}} \newcommand{\keyword}[1]{\lstinline{#1}} \newcommand{\Gt}[0]{\emph{GenomeTools}\xspace} \title{The \Gt Developer's Guide} \author{Sascha Steinbiss, Gordon Gremme and Stefan Kurtz\thanks{please send comments to: \texttt{steinbiss@zbh.uni-hamburg.de}}} \begin{document} \maketitle \tableofcontents \section{Introduction} This document describes design properties and coding guidelines for the \Gt genome analysis system. The goal of the \Gt environment is to provide a well understandable, comprehensive and most importantly reusable set of classes and modules to aid in the development of C-based bioinformatics applications. The expected gain in productivity is only possible to achieve if all components of the \Gt behave in a similar way -- or so to say -- in a way which is least surprising to the user (which is, in this case, a programmer). Thus we ask all developers contributing code to the \Gt to adhere to a common set of rules which make it easier for others to reuse the products of everyone's hard work. \section{Object-oriented design} \subsection{Classes} The central component type in \Gt is the \emph{class}. Structuring the C code into classes and modules gives us a unified design approach which simplifies thinking about design issues and avoids the code base becoming monolithic, a problem often encountered in C programs. \subsubsection{Simple classes} For most classes, a simple class suffices. A simple class is a class which does not inherit from other classes and from which no other classes inherit. Using mostly simple classes avoids the problems of large class hierarchies, namely the interdependence of classes which inherit from one another. The major advantage of simple classes over simple C structs is information hiding. \subsubsection{Implementing simple classes} \label {simpleclasses} We describe now how to implement a simple class using the string class \keyword{str.[ch]} of \Gt as an example. The interface to a class is always given in the \keyword{.h} header file (\keyword{str.h} in our example). To achieve information hiding the header file cannot contain implementation details of the class. The implementation can always be found in the corresponding \keyword{.c} file (\keyword{str.c} in our example). Therefore, we start with the following C construct to define our \keyword{GtStr} class in \keyword{str.h}: \begin{lstlisting} typedef struct GtStr GtStr; \end{lstlisting} This seldomly used feature of C introduces a new data type named \classname{GtStr} which is a synonym for the \keyword{struct GtStr} data type, which needs not to be known at this point. In the scope of the header file, the new data type \keyword{GtStr} cannot be used, since its size is unknown to the compiler at this point. Nevertheless, pointers of type \keyword{GtStr} can still be defined, because in C all pointers have the same size, regardless of their type. Using this fact, we can declare a constructor function: \begin{lstlisting} GtStr* gt_str_new(void); \end{lstlisting} which returns a new string object, and a destructor function \begin{lstlisting} void gt_str_delete(GtStr*); \end{lstlisting} which destroys a given string object. This gives us the basic structure of the string class header file: A new data type (which represents the class and its objects), a constructor function, and a destructor function. \begin{lstlisting} #ifndef STR_H #define STR_H /* the string class, string objects are strings which grow on demand */ typedef struct GtStr GtStr; GtStr* gt_str_new(void); void gt_str_delete(GtStr*); #endif \end{lstlisting} Now we look at the implementation side of the story, which can be found in the \keyword{str.c} file. At first, we include the \keyword{str.h} header file to make sure that the newly defined data type is known: \begin{lstlisting} #include "str.h" \end{lstlisting} Then we define \keyword{struct GtStr} which contains the actual data of a string object (the \emph{member variables} in object orientation lingo). \begin{lstlisting} struct GtStr { char *cstr; /* the actual string (always '\0' terminated) */ unsigned long length; /* currently used length (without trailing '\0') */ size_t allocated; /* currently allocated memory */ }; \end{lstlisting} Finally, we code the constructor \begin{lstlisting} GtStr* gt_str_new(void) { GtStr *s = gt_malloc(sizeof (GtStr)); /* create new string object */ s->cstr = gt_calloc(1, sizeof (char)); /* init the string with '\0' */ s->length = 0; /* set the initial length */ s->allocated = 1; /* set the initially allocated space */ return s; /* return the new string object */ } \end{lstlisting} and the destructor \begin{lstlisting} void gt_str_delete(GtStr *s) { if (!s) return; /* return without action if 's' is NULL */ gt_free(s->cstr); /* free the stored the C string */ gt_free(s); /* free the actual string object */ } \end{lstlisting} Our string class implementation so far looks like this \begin{lstlisting} #include "core/ma.h" #include "core/str.h" struct GtStr { char *cstr; /* the actual string (always '\0' terminated) */ unsigned long length; /* currently used length (without trailing '\0') */ size_t allocated; /* currently allocated memory */ }; GtStr* gt_str_new(void) { GtStr *s = gt_malloc(sizeof (GtStr)); /* create new string object */ s->cstr = gt_calloc(1, sizeof (char)); /* init the string with '\0' */ s->length = 0; /* set the initial length */ s->allocated = 1; /* set the initially allocated space */ return s; /* return the new string object */ } void gt_str_delete(GtStr *s) { if (!s) return; /* return without action if 's' is NULL */ gt_free(s->cstr); /* free the stored the C string */ gt_free(s); /* free the actual string object */ } \end{lstlisting} Since this string objects are pretty much useless so far, we define a couple more (object) methods in the header file \keyword{str.h} and the respective implementations in \keyword{str.c}. Because C does not allow the traditional \keyword{object.methodname()} syntax often used in object-oriented programming, we use the convention to pass the object always as the first argument to the function (\keyword{methodname(object, ...)}). To make it clear that a function is a method of a particular class \emph{classname}, we prefix the method name with \keyword{gt__}. That is, we get \keyword{gt__methodname(object, ...)} as the generic form of method names in C. The constructor is always called \keyword{gt__new()} and the destructor \keyword{gt__delete()}. See \keyword{str.c} for examples. \subsubsection{Class scaffold code generation} The boilerplate code needed to create the structure of a new class (header and C source) can be generated automatically to avoid typical copy-and-paste errors. In the \keyword{scripts/} subdirectory of the \Gt directory tree, there is a helper script to create header files and a C source file with an implementation scaffold for a given class name. Run \keyword{scripts/codegen help} to get more information about its usage. \subsection{Interfaces} Interfaces allow several classes with possibly different implementations to share a common set of methods that can be called independently of the actual implementing class. Each implementing class must adhere to the interface method signature (that is, the return type and the number and types of parameters) but is otherwise free to implement the method as liked. In addition to the common interface functions, a class can also have its own specific functions. To call an interface function, the object can simply be cast to the interface type, and to call an implementation-specific function, we cast it to the implementing type. The following section describes the technique used to implement interfaces in C such that objects can be cast from the interface type to the specific type without problems. Let's imagine we want an interface called \keyword{GtExample} which has a method \keyword{gt_example_run(GtExample*)}. This corresponds to the following header file \keyword{example.h} (source files are also available in the \Gt source distribution): \begin{lstlisting} #ifndef EXAMPLE_H #define EXAMPLE_H typedef struct GtExample GtExample; int gt_example_run(GtExample*); void gt_example_delete(GtExample*); #endif \end{lstlisting} Note that there is no \keyword{gt_example_new()} constructor function, as the constructors will be specific to the implementing classes. Otherwise, this header is not much different to the header files for a simple class. To make the methods implementable by more than one class, we need a \emph{class object} describing the interface-to-implementation mappings, that is, the specific functions to be called in the implementing class. This class definition is given in a \keyword{example_rep.h} header file, where ``rep'' stands for ``representation'': \begin{lstlisting} #ifndef EXAMPLE_REP_H #define EXAMPLE_REP_H #include #include "core/example.h" typedef struct GtExampleClass GtExampleClass; struct GtExampleClass { size_t size; int (*run)(GtExample*); void (*delete)(GtExample*); }; struct GtExample { const GtExampleClass *c_class; }; GtExample* gt_example_create(const GtExampleClass*); void* gt_example_cast(const GtExampleClass*, GtExample*); #endif \end{lstlisting} The \keyword{GtExampleClass} stores a function pointer to the specific function implementing the \keyword{gt_example_run()} interface method. We also define a \keyword{delete} function which is called when the implementing class needs to do additional cleanup when an object of it is deleted. Given a \keyword{GtExampleClass} filled with appropriate function pointers which match the signatures, the \keyword{gt_example_create()} function then creates an object which can be cast to both the interface type \keyword{GtExample*} as well as the implementing type. To accomplish this, the size of the implementing class is needed. The reason behind this will be explained below. Note that this header file is meant to be private, that is, it should only be included by code files which need to know about the interface-to-implementation mappings. It is then straightforward to write the \keyword{example.c} which both \begin{itemize} \item returns an object of the interface type, allocating memory to hold both a pointer to a \keyword{GtExampleClass} object (needed for calling methods in the interface context), and \item implements the interface methods by wrapping the implementation-specific function pointers given in the \keyword{GtExampleClass} object: \end{itemize} \begin{lstlisting} #include "example_rep.h" /* we need access to the class struct */ #include "core/ma.h" /* we need to allocate memory */ GtExample* gt_example_create(const GtExampleClass *ec) { GtExample *e = gt_calloc(1, ec->size); /* allocate memory */ e->c_class = ec; /* assign interface */ return e; } int gt_example_run(GtExample *e) { gt_assert(e && e->c_class && e->c_class->run); return e->c_class->run(e); /* call implementation-specific function */ } void gt_example_delete(GtExample *e) { if (!e) return; gt_assert(e && e->c_class); if (e->c_class->delete != NULL) { e->c_class->delete(e); /* delete implementation-specific members */ } gt_free(e); /* delete interface */ } \end{lstlisting} Now, let us have a look at how the implementing classes are written. Let's imagine we want class \keyword{GtExampleA} to implement the \keyword{GtExample} interface. Of course, we need a class header file \keyword{example_a.h} containing a constructor and destructor, just as described in section~\ref{simpleclasses}: \begin{lstlisting} #ifndef EXAMPLE_A_H #define EXAMPLE_A_H typedef struct GtExampleA GtExampleA; GtExample* gt_example_a_new(); #endif \end{lstlisting} An implementation of the \keyword{GtExampleA} class in the \keyword{example_a.c} source file then contains the code for the specific methods and their assignment to the interface mapping. First, we need to include the headers to be able to register our implementation-specific functions in the mapping struct: \begin{lstlisting} #include "example_a.h" #include "example_rep.h" \end{lstlisting} Then, we define our \keyword{GtExampleA} class as usual, but leave enough space for an instance of the interface class at the beginning of our definition: \begin{lstlisting} struct GtExampleA { GtExample parent_instance; unsigned long my_property; }; \end{lstlisting} By placing an instance of the interface at the beginning of our implementation, we allow the same pointer (to the beginning of the data structure) to be cast to \begin{enumerate} \item a pointer to a \keyword{GtExample} interface implementation, so it can be used safely with the \keyword{gt_example_*()} interface methods, restricting access to the interface members only, and \item a pointer to the \keyword{GtExampleA} data structure, which can safely be used with the \keyword{gt_example_a_*()} methods, ignoring the interface part and allowing access to the implementation member variables only. \end{enumerate} Figure~\ref{fig:interfacememlayout} illustrates this concept. \begin{figure} \begin{center} \includegraphics[width=.7\textwidth]{mlayout} \end{center} \caption{Memory layout used in the \keyword{GtExampleA} object starting at the memory location \keyword{e} implementing the \keyword{GtExample} interface.} \label{fig:interfacememlayout} \end{figure} In the rest of \keyword{example_a.c}, we then code our implementation of the \keyword{run} interface method: \begin{lstlisting} static int gt_example_a_run(GtExample *e) /* hidden from outside */ { GtExampleA *ea = (GtExampleA*) e; /* downcast to specific type */ printf("%lu", ea->my_property); /* run functionality */ return 0; } \end{lstlisting} Note that we cast our generic \keyword{GtExample*} pointer into a more specific \keyword{GtExampleA*} pointer. We can do this because we can now be sure that this function has been called on an object of the \keyword{GtExampleA} class. We can be sure because we have registered this method as an implementation of the \keyword{run} interface method by assigning it to the function pointer variable in the \keyword{GtExampleClass} structure: \begin{lstlisting} /* map static local method to interface */ const GtExampleClass* gt_example_a_class(void) { static const GtExampleClass ec = { sizeof (GtExampleA), gt_example_a_run, NULL }; return &ec; } \end{lstlisting} Note that we assign NULL to the \keyword{delete} function slot, because we do not allocate any memory inside the implementing class we need to free later. Have a look at the \keyword{example_b.*} files in the \Gt source distribution for an alternative implementation which allocates additional memory. We can then use the \keyword{GtExampleClass} returned by this function to write the \keyword{GtExampleA} constructor, which uses \keyword{gt_example_create()} to allocate the needed space, initializes the private members and returns the object: \begin{lstlisting} GtExample* gt_example_a_new(void) { GtExample *e = gt_example_create(gt_example_a_class()); GtExampleA *ea = (GtExampleA*) e; /* downcast to specific type */ ea->my_property = 3; /* access private implementation member */ return e; } \end{lstlisting} Now consider another implementation, \keyword{GtExampleB} which also implements this interface by creating a \keyword{GtExampleClass} with different implementation- specific function pointers (see the \keyword{example_b.*} files in the distribution). Combining these implementation with the interface headers now allows us to do the following: \begin{lstlisting} #include "example.h" /* include the interface header */ #include "example_a.h" /* include the implementation header */ #include "example_b.h" /* include another implementation header */ int main(int argc, char *argv[]) { GtExample *my_e = gt_example_a_new(); /* create GtExampleA object, but with interface type */ gt_example_run(my_e); /* call an interface method */ gt_example_delete(my_e); GtExample *my_e = gt_example_b_new(); /* create GtExampleB object, but with interface type */ gt_example_run(my_e); /* call an interface method */ gt_example_delete(my_e); return 0; } \end{lstlisting} That is, we can access two implementations via a common set of interface methods. \subsection{Modules} Modules bundle related functions which do not belong to a class. Examples: \begin{itemize} \item \keyword{dynalloc.h}, the low level module for dynamic allocation, e.g.\ used to implement arrays in \keyword{array.c} and the above-mentioned strings \item \keyword{sig.h}, bundles signal related functions (high level) \item \keyword{xansi.h}, contains wrappers for the standard ANSI C library \item \keyword{xposix.h}, contains wrappers for POSIX functions we use \end{itemize} When designing new code, it is not very often the case that one has to introduce new modules. Usually defining a new class is the better approach. \subsection{Unit tests} Classes and modules should contain a \keyword{gt__unit_test} function which performs a unit test of the class/module and returns 0 in case of success and -1 in case of failure. More information about how to write unit tests can be found in section~\ref{unittests}. \subsection{Tools} A \emph{tool} is the most high-level type of component \Gt has to offer. Tools are command line interface (CLI) applications linked into the single \keyword{gt} binary. They make use of helper classes like the \keyword{GtOptionParser} to make development of command line tools easier. Having a common interface for option parsing and error reporting ensures a consistent user experience across all \Gt tools, as they behave the same way when invoked from the command line. There are two possible code paths for defining and implementing a tool; only the newer approach will be described here. Simply put, a tool is just another object which needs to implement a special interface, providing callbacks for the \Gt runtime to call at predefined times during the tool's invocation. An example for a simple tool can be found in the \keyword{tools} subdirectory in the \keyword{gt_template.[ch]} files. First, a tool needs to define a structure to store its arguments. That is, every command line parameter needs to be represented by a member in the struct to store its value. For example, for a tool taking a boolean and a string parameter, we would need the following: \begin{lstlisting} typedef struct { bool bool_option; GtStr *str_option; } ExampleToolArguments; \end{lstlisting} The tool also requires an initializer function which prepares the argument structure for value assignment. For example, the \keyword{GtStr} in above example must be instantiated: \begin{lstlisting} static void* gt_example_tool_arguments_new(void) { ExampleToolArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->str_option = gt_str_new(); return arguments; } \end{lstlisting} as well as a destructor function which deletes the argument objects, if necessary, and then frees the memory used for the argument struct: \begin{lstlisting} static void gt_example_tool_arguments_delete(void *tool_arguments) { ExampleToolArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->str_option); gt_free(arguments); } \end{lstlisting} The argument structure is filled by an \emph{option parser}. An option parser is an object which gets passed an argument list, identifying parameter names and values and assigning them to the correct variables. It also handles the creation of a convenient help output by documenting the purpose of each option and its valid value range. See the interface documentation in \keyword{src/core/option.h} for a list of possible option types. A tool must contain a function returning an option parser object: \begin{lstlisting} static GtOptionParser* gt_example_tool_option_parser_new(void *tool_arguments) { ExampleToolArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* initialize with one-liner */ op = gt_option_parser_new("[option ...] [file]", "This is an example tool for demonstration " "purposes."); /* -bool */ option = gt_option_new_bool("bool", "this is the boolean option", &arguments->bool_option, false); /* default value */ gt_option_parser_add_option(op, option); /* -string */ option = gt_option_new_string("string", "pass any string here", arguments->str_option, NULL); /* default value */ gt_option_parser_add_option(op, option); return op; } \end{lstlisting} The option parser already performs initial validation of the parameters. For example, it makes sure that a numeric parameter is not given a string value, that unsigned values are always positive or that probabilities stay between 0 and 1. In an error case, tool invocation is stopped and the appropriate error message is printed to \keyword{stderr}. For more sophisticated error checking, for example involving several parameters and their values at once, is is possible to write an argument checking function, which can set an error message in a \keyword{GtError} object (see~\ref{errors}) and return a non-zero return value if an error was found: \begin{lstlisting} static int gt_example_tool_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GT_UNUSED GtError *err) { ExampleToolArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); /* we assume that the string parameter must not be empty */ if (gt_str_length(arguments->str_option) == 0) { gt_error_set(err, "parameter 'string' must not be empty!"); had_err = -1; } return had_err; } \end{lstlisting} In most cases, however, this function is not necessary and needs not be implemented. The most important function which must be implemented in a tools is the runner. The runner calls the code that actually performs the tool's function and is the equivalent to the \keyword{main} function in a traditional C program. Its signature is very similar to a typical C \keyword{main} function as well, being passed the number of arguments \keyword{argc} and an array of argument strings \keyword{argv}.: \begin{lstlisting} static int gt_example_tool_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) \end{lstlisting} In addition, it receives the number of arguments (\keyword{parsed_args}) which were already parsed by the option parser, thus specifying an offset in the argument array from which the rest of the arguments begin. That is, if the parameter string was \begin{lstlisting} -bool true -string foo bar baz \end{lstlisting} then \keyword{parsed_args} would be 4, as the \keyword{-bool} and \keyword{-string} options and their values have already been parsed, leaving \keyword{argv[parsed_args] = 'bar'} and \keyword{argv[parsed_args+1] = 'baz'} to be handled by the runner. The rest of the runner function could look like this: \begin{lstlisting} static int gt_example_tool_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { ExampleToolArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); if (arguments->bool_option) printf("the bool option was set\n"); printf("the string was '%s', gt_str_get(arguments->bool_option)); return had_err; } \end{lstlisting} Finally, the functions described above are registered in the new tool object by using \keyword{gt_tool_new()} to create a new \keyword{GtTool} instance passing pointers to all the static callback functions. \begin{lstlisting} GtTool* gt_example_tool(void) { return gt_tool_new(gt_example_tool_arguments_new, gt_example_tool_arguments_delete, gt_example_tool_option_parser_new, gt_example_tool_arguments_check, gt_example_tool_runner); } \end{lstlisting} Let's assume that we have saved the implementation above in \keyword{tools/gt_example_tool.c}. We then make the \keyword{gt_example_tool()} function public by adding a \keyword{tools/gt_example_tool.c} header: \begin{lstlisting} #ifndef GT_EXAMPLE_TOOL_H #define GT_EXAMPLE_TOOL_H #include "core/tool_api.h" /* the example tool */ GtTool* gt_example_tool(void); #endif \end{lstlisting} This function can then be added to the \Gt toolbox by adding the following lines to \keyword{gtt.c}: \begin{lstlisting} ... #include "tools/gt_example_tool.h" ... GtToolbox* gtt_tools(void) { ... gt_toolbox_add_tool(tools, "example", gt_example_tool()); ... } \end{lstlisting} After compilation, we can then run our tool by calling \begin{lstlisting}[language=sh] $ gt example -bool true -string foo bar baz \end{lstlisting}%$ \section{Directory structure} All of these directories are given as subdirectories of the root directory of the \Gt source distribution. \begin{itemize} \item[\texttt{bin/}] This subdirectory contains the \Gt binary executable \texttt{gt} as dynamic and static variants as well as the example executables built from \texttt{src/examples}. This directory is only populated after a make run. Running \texttt{make cleanup} will remove its contents. \item[\texttt{doc/}] This subdirectory contains documentation such as this developer's guide, license information, format specifications, and the user manuals for the software tools included with the \Gt . \item[\texttt{gtdata/}] This subdirectory contains data needed for the \Gt to run which are not compiled into the \Gt binary itself, such as \begin{itemize} \item texts for the tool on-line help (in \texttt{gtdata/doc}), \item Lua code for documentation generation (in \texttt{gtdata/modules}), \item ontology definition files (in \texttt{gtdata/obo\_files}), \item \emph{AnnotationSketch} default (e.g.\ a default style file, in \texttt{gtdata/sketch}), and \item alphabet definition files for character mappings (in \texttt{gtdata/trans}). \end{itemize} \item[\texttt{gtpython/}] This subdirectory contains the Python bindings to selected parts of the \Gt library, as well as the Python test suite. See the \texttt{README} file in this directory for installation instructions. \item[\texttt{gtruby/}] This subdirectory contains the Ruby bindings to selected parts of the \Gt library. See the \texttt{README} file in this directory for installation instructions. \item[\texttt{gtscripts/}] This subdirectory contains a number of Lua scripts written using the \Gt Lua bindings; most prominently the \texttt{gtdoc.lua} script to generate the documentation. These scripts can be run using the \texttt{gt} executable, which is a Lua interpreter as well, by giving the script name instead of a tool name. \item[\texttt{lib/}] This subdirectory contains the \Gt static and dynamic libraries when built. \item[\texttt{obj/}] This subdirectory contains object files as they are created during \Gt compilation. \item[\texttt{scripts/}] This subdirectory contains useful scripts for \Gt developers. \item[\texttt{src/}] This subdirectory contains the main \Gt source tree. In particular, there is a number of subdirectories: \begin{itemize} \item the \texttt{src/annotationsketch} subdir contains \emph{AnnotationSketch} code for genome annotation drawing, \item the \texttt{src/core} subdir contains general code, i.e.\ basic data structures, memory management, file access, encoded sequences, sequence parsers, tool runtime, option parser, multithreading, etc., \item the \texttt{src/examples} subdir contains simple example applications built on \Gt (streams, or a GUI app), \item the \texttt{src/extended} subdir contain code for annotation handling and parsing, stream processing, alignment, chaining, etc., \item the \texttt{src/external} subdir contains third-party source code which is distributed with the \Gt source and built alongside the \Gt , \item the \texttt{src/gth} subdir with \emph{GenomeThreader} code, \item the \texttt{src/gtlua} subdir with Lua bindings for some of the \Gt classes and modules, \item the \texttt{src/ltr} subdir with LTR retrotransposon prediction and annotation code, \item the \texttt{src/match} subdir with code for index structure construction and access, short read mapping, matching algorithms etc., \item the \texttt{src/mgth} subdir contains \emph{MetaGenomeThreader} code, \item the \texttt{src/patches} subdirectory with platform-specific patches, and \item the \texttt{tools} subdir with code for all the tools included with \Gt . \end{itemize} \item[\texttt{testdata/}] This subdirectory contains test data used in the testsuite. Please refrain from storing large files ($>1$MB) in this directory, but use the \keyword{gttestdata} repo instead (see~\ref{gttestdata}). Special subdirectories: \begin{itemize} \item The \texttt{testdata/gtscripts} subdir contains test scripts used in the Lua test cases, \item the \texttt{testdata/gtruby} subdir contains test scripts used in the Ruby test cases, and \item the \texttt{testdata/gtpython} subdir contains test scripts used in the Python test cases. \end{itemize} \item[\texttt{testsuite/}] This subdirectory contains the test suite definitions as Ruby files as well as the test engine and temporary data created using test runs. After starting a test suite run, the \keyword{testsuite/stest_testsuite} subdirectory then contains a directory named \keyword{test} for each test, where \keyword{} is the test number. See~\ref{testdefinitions} for more details. \item[\texttt{www/}] This subdirectory contains the content of the \Gt website. \end{itemize} \section{Public APIs} In \Gt , we distinguish between \emph{public} and \emph{non-public} application programming interfaces (APIs). The API describes the classes and modules belonging to the \Gt and their methods and functions, in particular their signatures; that is, their name, return value, and number and types of their parameters. The public API is a subset of the \Gt library which is intended to be used by developers which do not belong to the \Gt core development team, and is fairly high-level at this point. To ensure compatibility with future versions of the \Gt library, the public API is supposed to be subject to as little change as possible. That is, interface changes should be made very sparsely, and interface design should `look forward' to make such changes unneccessary. For example, interface functions which could fail in theory should receive error handling facilities in their signature (such as a return code and a \keyword{GtError} object), even if their current (and maybe only) implementation cannot fail. This leaves room for implementations that \emph{may} fail without having to break the API when the new implementation finds its way into the \Gt . All public API functions for a given class must be declared in a prototype header file named \keyword{_api.h}. This header file must only include other public API headers. All of the public API header files are packaged to be distributed with the \Gt tarball and are installed into the given include path. That is, the functions defined in them are later accessible by including \keyword{genometools.h} only. It is important to note that all functions in the public header files must be properly documented (see section~\ref{documentation}). \section{Coding style} \subsection{General rules} \begin{itemize} \item No line in the source code must be longer than 80 characters. This allows proper formatting of the code. \item There must be not more than one consecutive empty line in the source code. \item Trailing spaces are disallowed. \item There must not be a comma at the beginning of a line. \item Unless it is at the end of a line, a comma should be followed by a space. Example: \begin{lstlisting} cmpfunc(gt_array_get(a, idx), gt_array_get(b, idx)); \end{lstlisting} instead of \begin{lstlisting} cmpfunc(gt_array_get(a,idx),gt_array_get(b,idx)); \end{lstlisting} \item The symbols `\keyword{=}', `\keyword{==}' und `\keyword{!=}' should be enclosed by spaces. That is, write \begin{lstlisting} i = 0; \end{lstlisting} instead of \begin{lstlisting} i=0; \end{lstlisting} \item There must be a space between the keywords \keyword{for}, \keyword{if}, \keyword{sizeof}, \keyword{switch}, \keyword{while} and \keyword{do} and the following parenthesis. \item The opening braces (\keyword{\{}) after the keywords \keyword{if}, \keyword{else}, \keyword{for}, \keyword{do}, and \keyword{while} should be on the same line as the keyword. \item The curly braces following an \keyword{if} or \keyword{else} expression should be omitted if the expression and the (single) following statement both fit on a single line. \item The keyword \keyword{else} should be placed on a separate line. \item Semantic blocks (statements inside loops, function definitions, etc.) must be indented by exactly two spaces w.r.t.\ the enclosing block. This explicitly means \emph{no tabs}, configure your editor! Here is an example: \begin{lstlisting} bool gt_array_equal(const GtArray *a, const GtArray *b, GtCompare cmpfunc) { unsigned long idx, size_a, size_b; int cmp; gt_assert(gt_array_elem_size(a) == gt_array_elem_size(b)); size_a = gt_array_size(a); size_b = gt_array_size(b); if (size_a < size_b) return false; if (size_a > size_b) return false; for (idx = 0; idx < size_a; idx++) { cmp = cmpfunc(gt_array_get(a, idx), gt_array_get(b, idx)); if (cmp != 0) return false; } return true; } \end{lstlisting} \item Use the \keyword{scripts/src_check} and \keyword{scripts/src_clean} scripts regularly to check your source code for style violations. \item Use the \keyword{scripts/pre-commit} git hook to automatically run a \keyword{src_check} before each commit. The commit will be canceled if errors are found.\\ To enable the git hook, copy the file \keyword{scripts/pre-commit} into the \keyword{.git/hooks} subdirectory of your \Gt repository. \item Static variables inside functions are not allowed. An exception are class structs, which must be static. \item All functions except those which should be callable publicly should be declared as \keyword{static}. All non-static functions must be documented in a header file. Think twice before making a function public. Its interface should be clean enough to be understood by someone who does not know implementation details! \item If a \Gt module or class exists for your particular need, use it instead of using more low-level means (e.g.\ try to use \keyword{GtFile} and friends for file access instead of \keyword{fopen()}/\keyword{fclose()}/\dots\ directly). Consult the documentation and the header files! \end{itemize} \subsection{Global variables} \begin{itemize} \item Generally, global variables are not allowed. \item There are exceptions in very rare cases, in which must be made sure that the content in question is initialized, synchronized for multithreaded use and properly cleaned up. Do not add global variables without talking to one of the core developers! \end{itemize} \subsection{Types} \begin{itemize} \item Use unsigned types whereever possible. We need to process large amount of data and we may need every bit to process it. \item Use \keyword{unsigned long} for sequence positions/lengths/offsets/\dots . The \keyword{unsigned long} type equals the word size on all common systems (i.e., it is 32-bit wide on 32-bit systems and 64-bit wide on 64-bit systems) which makes it ideal for most use cases. \item Use \keyword{GtStr} and \keyword{GtArray} instead of manipulating byte arrays directly if possible, especially when returning strings or item collections from a function. \end{itemize} \subsection{Naming rules} \begin{itemize} \item Class names must begin with \keyword{Gt}, e.g. \keyword{GtArray}, \keyword{GtNodeStream}. \item Class names may use camel case\footnote{\url{http://en.wikipedia.org/wiki/CamelCase}} if multiple words are required, e.g.\ \keyword{GtNodeStream}. \item Source and header files for a class must start with the class name in lowercase, without the \keyword{Gt} prefix. If camel case is used in the class name, use underscores in the respective file name, e.g.\ \keyword{GtNodeStream} $\to$ \keyword{node_stream.[ch]}. \item Variable names and function names must be all lower-case. \item Variable names and function names should use underscores to separate words (e.g. use the function name \keyword{get_first_five_chars} instead of \keyword{getfirstfivechars}). \item The names of public (i.e.\ non-static) functions must be prefixed by the string `\keyword{gt_}' to avoid namespace clashes when linking the \Gt library with third-party code. \item Class or module names must follow the `\keyword{gt_}' part in the function name. \item In method signatures, the object on which the method is called must always be the first argument of the method. That is, method \keyword{method} in class \keyword{GtClass} must be defined as: \begin{lstlisting} gt_class_method(GtClass*, ); \end{lstlisting} \end{itemize} \subsection{Copyright lines} \label{copyright} \begin{itemize} \item Every header and C source file must begin with a comment containing author and license information: \begin{lstlisting} /* Copyright (c) 2007-2010 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ \end{lstlisting} \item Each developer with substantial contributions (for example, by implementing new features, refactoring, or fixing bugs which require large rewrites) should give his/her name and email address, updating the given year ranges in the process. \item The "Center for Bioinformatics" copyright line is only required for developers employed by it, because only in this case the University gains any copyright. \end{itemize} \subsection{Header files} \begin{itemize} \item Use conditional inclusion to avoid including the same header file multiple times. Between the copyright header and the beginning of the declarations, put the following: \begin{lstlisting} #ifndef FILENAME_H #define FILENAME_H \end{lstlisting} and put an \begin{lstlisting} #endif \end{lstlisting} at the end of the header file. This causes the preprocessor to include the section between the \keyword{#ifndef} and \keyword{#endif} only once. \item The identifier to be \keyword{#define}d must be the filename of the header file in uppercase with all non-alphanumeric characters replaced by underscores. \end{itemize} \subsection{Comments and documentation} \label{documentation} \begin{itemize} \item Comments are written in plain C style (\keyword{/* ... */}). C++-style comments (\keyword{// ...}) are disallowed. \item The public API files (header files ending in \keyword{*_api.h}) are examined for automatic generation of API documentation. The following annotations are supported: \begin{itemize} \item Each type (e.g.\ class) should be directly preceded by a comment describing the purpose of the class. Example: \begin{lstlisting} /* objects are generic arrays for elements of a certain size which grow on demand. */ typedef struct GtArray GtArray; \end{lstlisting} \item Each function (method) should be directly preceded by a comment describing the purpose of the function, its preconditions, return value, and parameters. Example: \begin{lstlisting} /* Add element to . The size of must equal the given element size when the was created and is determined automatically with the operator. */ #define gt_array_add(array, elem) \ gt_array_add_elem(array, &(elem), sizeof (elem)) /* Add element with size to . must equal the given element size when the was created. Usually, this method is not used directly and the macro is used instead. */ void gt_array_add_elem(GtArray *array, void *elem, size_t size_of_elem); \end{lstlisting} \item Code keywords (parameters, class names, references to other functions) can be marked by putting them between angled brackets (\keyword{<}\dots\keyword{>}). Also, keywords can be marked as strong (bold) by putting them between three underscores (\keyword{___}\dots\keyword{___}) or emphasized (italic) by using two underscores (\keyword{__}\dots\keyword{__}). \end{itemize} \item The comment line should briefly describe \begin{itemize} \item what the method does (e.g.\ ``Calculates and returns X\dots'', ``Delivers the next element in order\dots'', ``Adds element X\dots''), \item what \emph{all} parameters are supposed to be (ideally given in the context of what the method does), \item what the return value is, \item potential side-effects, and \item if the function receives or returns a pointer, whether ownership is taken or retained for the accepted or returned memory (i.e.\ ``takes ownership of parameter X'' or ``X must be deleted by the caller''). \end{itemize} \item Do not group multiple functions beneath one comment line, even if they are largely similar and differ only in minor details. If required, repeat the comment above each function to ensure that both get an entry in the generated documentation. \item Stars (\keyword{*}) are \emph{not} to be continued on every line of the comment, as many editors like to do by default. Doing so anyway will lead to interspersed star symbols in the generated output. \item Please refrain from using other markup formats such as Doxygen or Javadoc style. It may look alright in the plain text, but will most certainly come out weird in the generated LaTeX or HTML documents. \item Use the \keyword{docs} target in the \Gt Makefile to build the API documentation, which is then found in \keyword{www/genometools.org/htdocs} subdirectory (libgenometools.html). \end{itemize} \subsection{Function pointers} \begin{itemize} \item Function pointer declarations used in public headers (e.g.\ to be used as method arguments) should always be \keyword{typedef}'ed to an identifier prefixed with \keyword{Gt}. An example: \begin{lstlisting} typedef int (*GtCompareWithData)(const void*, const void*, void *data); \end{lstlisting} The function pointer type can then be used in a sort function this way: \begin{lstlisting} void gt_qsort_r(void *a, size_t n, size_t es, void *data, GtCompareWithData cmp); \end{lstlisting} instead of: \begin{lstlisting} void gt_qsort_r(void *a, size_t n, size_t es, void *data, int (*cmp)(const void*, const void*, void *data)); \end{lstlisting} which makes the headers much harder to read. \item If callback functions need additional data to work, provide an additional \keyword{void*} pointer to pass external data to the callback function (as, for example, done with the \keyword{data} parameter in the function \keyword{gt_qsort_r()} above). Do not use global variables for that purpose! \end{itemize} \subsection{\texttt{\#define}s} \begin{itemize} \item Identifiers introduced by a \keyword{\#define} statement should be completely written in upper case letters. This also holds for the arguments of macros. \item Identifiers introduced by public \keyword{\#define}s should be prefixed with \keyword{GT_}. \item In public headers, \keyword{\#define} statements should only set constants. Macros defining code parts should only be used -- very sparingly -- locally within a class or module implementation. \end{itemize} \subsection{Information hiding} In \Gt, we try to adhere to object-oriented design guidelines. An integral part of these is the enforcement of \emph{information hiding} or \emph{encapsulation}, that is, making access to an object's internal state only possible through accessor functions. From this, it follows directly that the use of `open' structs, that is, C structures defined in public headers, is strongly discouraged! Structures (and structure member accesses) should only be implemented within a C file. This applies to both structures used to implement classes as well as structures used as auxiliary data structures. A notable exception are structs implementing classes which only act as containers, i.e.\ in which the only methods manipulating the members would be setter and getter methods (see \keyword{core/range_api.h}). However, even those structures should provide accessor, constructor and destructor methods so they can safely be created, accessed and deleted from scripting language bindings lacking support for proper C structure access. \section{Error handling} We distinguish between \emph{programming errors} and \emph{run-time errors}. Programming errors occur when the developer uses resources in an inherently erroneous way, e.g.\ passing a null pointer where a valid pointer is expected, passing incorrect length values to string comparison functions, or accessing uninitialised memory. This often happens because of incomplete documentation, or by running into ``corner cases'' which were overlooked. If undetected, they can lead to nasty bugs that are hard to track down. Other special cases are expected to come up sooner or later. For example, a user may specify a file name for input or output which is not readable or writable, or which does not exist. Typically, it is not intended to terminate program execution at that point, but to react in a graceful way (e.g.\ by creating a new file, reporting a proper error message, or asking for a different file name). These are run-time errors. \subsection{Programming errors} \begin{itemize} \item Use \keyword{gt_assert()} to check invariants in your program, that is, any conditions that you hold to be true for the following code to work properly. For example, in a function getting a pointer as a parameter which is to be dereferenced later, you should assert that the pointer is not \keyword{NULL} prior to dereferencing. Similarly, in a function that is supposed to never return a negative number, one should use \keyword{gt_assert()} to check this condition directly before the \keyword{return} statement. \item If the expression given to \keyword{gt_assert()} as a parameter evaluates to \keyword{false} (that is, 0, \keyword{false}, or \keyword{NULL}), the program will abort. \item Assertions can be disabled at compile time by passing the \keyword{assert=no} switch to the \keyword{make} call. If variables or parameters are only used in an assertion, disabling assertions may trigger this error message: \begin{lstlisting} error: unused parameter 'x' \end{lstlisting} or \begin{lstlisting} error: unused variable 'y' \end{lstlisting} Include \keyword{core/unused_api.h} and prefix the declaration of the offending identifier with \keyword{GT_UNUSED} to inform the compiler that this variable is intentionally unused. \end{itemize} \subsection{Run-time errors} \label{errors} \begin{itemize} \item Functions that are allowed to fail at run-time must return a negative error code or \texttt{NULL}. The code for successful execution should be 0 or a pointer different from \texttt{NULL}. Positive return values may be used as results. Such functions should also receive a \keyword{GtError} object as their last parameter, in order to store and propagate error messages. If a function may return an error code or \texttt{NULL}, \emph{always} check for this and handle the case accordingly. \item Use the \keyword{GtError} class (see \keyword{core/error_api.h}) for storing error messages and error status: \begin{lstlisting} char* get_first_five_chars(const char *str, GtError *err) { char *ret; if (strlen(str) < 5) { gt_error_set(err, "string '%s' is shorter than 5 characters", str); return NULL; } ret = gt_calloc(6, sizeof (char)); strncpy(ret, str, 5); return ret; } \end{lstlisting} \item Use a variable called \keyword{had_err} which is initialized to 0 and then assigned an error status such that an error is set when \keyword{had_err}$\neq 0$: \begin{lstlisting} int had_err = 0; const char *prefix; GtError *err = gt_error_new(); if ((prefix = get_first_five_chars("foo", err))) { /* go on with next step */ } else had_err = -1; if (!had_err) { ... } \end{lstlisting} \keyword{-1} should be used to store an error in the \keyword{had_err} variable. It is very idiomatic to write \keyword{if (had_err)...} or \keyword{if (!had_err)...}. \item Catch run-time errors and create error messages as close to their source as possible. \item The error object should always be the last parameter and should be named \keyword{err}. \end{itemize} \section{Memory management} \subsection{Allocation/deallocation} \begin{itemize} \item Space allocation is only allowed using the \keyword{gt_malloc()}, \keyword{gt_calloc()}, \keyword{gt_realloc()} functions in \keyword{core/ma_api.h}. Use \keyword{gt_free()} to deallocate memory. These methods are analog to \keyword{malloc(3)}, \keyword{calloc(3)} and \keyword{realloc(3)} from the C standard library, except that they never return \keyword{NULL} upon failure. \item The \keyword{gt_ma_get_space_peak()}, \keyword{gt_ma_show_space_peak()} and \keyword{gt_ma_check_space_leak()} functions in \keyword{core/ma_api.h} can be used to evaluate memory usage and check for memory leaks. \end{itemize} \subsection{Reference counting} Sometimes it is desired to have an object referenced by more than one other object, avoiding to \keyword{gt_free()} the object's memory until the last reference to the object has been dropped. In \Gt, \emph{reference counting} is used to implement this behaviour. That is, each object keeps the number of objects still keeping a reference on it in a local member variable. This is done by each referencing object calling the object's \keyword{ref()} method to announce that they now keep a reference, thus increasing the reference count. When the object reference is no longer needed, the usual \keyword{delete()} method is used. The \keyword{delete()} method checks and decreases the reference count and defers free'ing the object's memory until the object is not referenced by any other object any more. This makes reference counting a simple form of garbage collection. To add reference counting to a class, perform the following steps: \begin{itemize} \item Add an \keyword{unsigned int} counter variable called \keyword{reference_count} to the private member variables of the class; this variable must be initialized to 0 in the constructor. \item Consider a class \emph{GtFoo} to which we want to add reference counting capabilities. Then add a method \keyword{gt__ref()}, in this case \keyword{gt_foo_ref()} to the interface of the class: \begin{lstlisting} GtFoo* gt_foo_ref(GtFoo *f) { gt_assert(f); f->reference_count++; return f; } \end{lstlisting} \item In the destructor, check the reference count and only free the memory when necessary: \begin{lstlisting} void gt_foo_delete(GtFoo *f) { if (!f) return; if (f->reference_count) { f->reference_count--; return; } gt_free(f); } \end{lstlisting} \end{itemize} With reference counted classes, always use the \keyword{ref()} method when storing a reference to an object. That is, instead of writing \begin{lstlisting} void gt_bar_set_foo(GtBar *b, GtFoo *f) { b->value = f; } \end{lstlisting} use \begin{lstlisting} void gt_bar_set_foo(GtBar *b, GtFoo *f) { b->value = gt_foo_ref(f); } \end{lstlisting} Always remember to call \keyword{gt_foo_delete()} when the reference is no longer needed! For example, in the assignment above, a good place to do this is the destructor of the \keyword{GtBar} class. \subsection{Library initialization/finalization} Within the \Gt code, there are a number of global or static data which must be properly initialized before using any \Gt functionality, and space for which must be properly freed when done using the \Gt . This is usually done by the runtime by calling initializers when a tool is run using the \keyword{gt} binary. Now consider that \Gt can also be used as a library, called \keyword{libgenometools}. That means, it is possible to link an external code with the static or shared object file and call functions from there, without going through the tool runtime. It is now crucial that the necessary initializations have taken place before using functions, and that the required cleanup is done at the end. There are two functions in the \keyword{core/init.[ch]} module in \Gt used to accomplish this: \begin{itemize} \item \keyword{gt_lib_init()}, which initializes all static data and should be called before any other \Gt function, and \item \keyword{gt_lib_clean()}, which frees all static data. It returns 0 if no memory map, file pointer, or memory has been leaked and a value other than 0 otherwise. \end{itemize} It is also possible to make the cleanup happen automatically when the program using the library exits. This is done by calling \keyword{gt_lib_reg_atexit_func()} which registers an exit handler with the OS which will call \keyword{gt_lib_clean()} automatically. \section{Threads} The \Gt contain functions allowing developers to write their programs in a multi-threaded way, by wrapping the POSIX threads library \keyword{libpthread}. See \keyword{core/thread\_api.h} for more information. Any function with this signature: \begin{lstlisting} void* (*GtThreadFunc)(void *data); \end{lstlisting} can be enabled to be run concurrently by simply calling \begin{lstlisting} void *mythread(void *data) { ... } gt_multithread(mythread, NULL, err); \end{lstlisting} Some more useful information: \begin{itemize} \item For synchronization during parallel execution of multiple threads, \Gt provides classes for mutexes and read-write-locks. See \keyword{core/thread\_api.h} for a description of the interface of the \keyword{GtMutex} and \keyword{GtRWLock} classes. \item If code must be conditionally compiled depending on thread support, use \keyword{#ifdef} and friends with the \keyword{GT_THREADS_ENABLED} flag, which is set by the compiler via a \keyword{-D} option when threading support is enabled. \item Threading support is enabled at compile time by passing \keyword{threads=yes} to the \keyword{make} call. If threading support is not enabled, all \keyword{gt_multithread()} functions will run the thread function sequentially. \item If threading support is enabled, the number of concurrent jobs can be given using the \keyword{-j} parameter to the \keyword{gt} binary. That is, to have all multithreaded parts in the tool to be run use three threads at once, call the tool with \begin{lstlisting} $ gt -j 3 ... \end{lstlisting}%$ \end{itemize} \section{Testing and Debugging} \subsection{Testing on the code level -- the unit tests} \label{unittests} Unit test check whether classes and their methods behave correctly when used in a correct manner. The corresponding functions must be defined in the class implementation file (so they get access to the private member variables of the tested class) and adhere to the following interface: \begin{lstlisting} int (*UnitTestFunc)(GtError *err); \end{lstlisting} They must return 0 if the test was successful and -1 if the test has failed. The \keyword{gt_ensure} helper macro makes writing unit tests easier. To use it, \keyword{#include} the file \keyword{core/ensure.h}. Then write your unit test: \begin{lstlisting} int gt_class_unit_test(GtError *err) /* must be called 'err'! */ { int had_err = 0; gt_error_check(err); /* will abort if error was already set */ gt_ensure(had_err, 1 + 1 == 2); /* will succeed */ gt_ensure(had_err, 1 + 1 == 3); /* will fail */ return had_err; } \end{lstlisting} Similarly to \keyword{gt_assert()}, if the expression given to \keyword{gt_ensure()} as a second parameter evaluates to false, the test will fail with an error message, giving the location at which the first condition failed. Because \keyword{gt_ensure()} is implemented as a macro relying on certain naming conventions, it is mandatory that the \keyword{GtError} object passed to the test function is called \keyword{err}. The unit tests are added to the test suite in the function \keyword{gtt_unit_tests()} in \keyword{gtt.c} and loaded into the \Gt runtime in the function \keyword{gtr_register_components()} in \keyword{gtr.c}. That is, if your unit test function is \keyword{gt_class_unit_test()}, then you should \keyword{#include} the header \keyword{class.h} (which contains the function prototype) in \keyword{gtt.c} and add the following line in \keyword{gtt_unit_tests()}: \begin{lstlisting} gt_hashmap_add(unit_tests, "example class", gt_class_unit_test); \end{lstlisting} The tests registered in this hash table can be executed on the command line with: \begin{lstlisting}[language=sh] $ gt -test \end{lstlisting}%$ It is also possible to run a single test from the test suite by using the \keyword{-only} option: \begin{lstlisting}[language=sh] $ gt -test -only 'example class' \end{lstlisting}%$ \subsection{Testing on the tool level -- the test suite} While the unit tests check the correctness of the classes and modules on the code level, the Ruby-based test suite is used to run tests on the tools themselves. That means that they run tools with example data or invalid parameters and check whether they behave correctly by looking at error levels, error messages, and comparing output with reference data. Test data and reference data are stored in the \keyword{testdata/} directory of the \Gt source tree. Note that this directory is for smaller test data only. Large files, such as whole chromosome annotations go into another repository (see~\ref{gttestdata}). \subsubsection{Test definitions} \label{testdefinitions} Tests are defined in the \keyword{gt__include.rb} files in the \keyword{testsuite/} directory. They contain test definitions written in a Ruby-based domain specific language. Here is an example of a simple test: \begin{lstlisting}[language=Ruby] Name "gt cds test (description range)" Keywords "gt_cds usedesc" Test do run_test "#{$bin}gt cds -usedesc -seqfile " + "#{$testdata}gt_cds_test_descrange.fas " + "#{$testdata}gt_cds_test_descrange.in" run "diff #{$last_stdout} #{$testdata}/gt_cds_test_descrange.out" end \end{lstlisting}%$ This test runs the \keyword{gt cds} command with example data and compares its output on stdout with a reference file. Every test case must have a \keyword{name} and can have a set of \emph{keywords} associated with it, allowing for selective running of a subset of tests from all testsuites. Keywords are separated by spaces. The actual test code is given in the \keyword{Test} environment. Within this environment, one may use the following constructs to define test conditions: \begin{itemize} \item \keyword{run_test(runstring, options)}, where \begin{itemize} \item \keyword{runstring} is the tool commandline to run, and \item \keyword{options} are a hash specifying test constraints. The key \keyword{:retval} specifies the expected error code for this run (0 is the default). The option \keyword{:maxtime} specifies the maximal time in seconds that the started program may run before it is killed, resulting in a failed test (60 is the default). This allows one to detect infinite loops without stopping the testing progress. \end{itemize} This command runs the command specified in \keyword{runstring}, and causes the test to fail if the returned error code does not equal the expected one. \item \keyword{grep(file, pattern)} which searches for \keyword{pattern} in the file \keyword{file}, failing the test if there is no match. The pattern can be given as a regular expression. \item \keyword{run_ruby(rubyscript, options)} and \keyword{run_python(pythonscript, options)} can be used to run tests on external Ruby and Python scripts. \item Any Ruby code, such as custom functions, can be run inside the \keyword{Test} environment. To fail a test case manually, use the \keyword{failtest(msg)} command, where \keyword{msg} is the error message to fail with. \end{itemize} Inside test suite definitions, some useful paths are predefined to be conveniently used in test runs (like \keyword{$bin} and \keyword{$testdata} in the example above): \begin{itemize} \item \keyword{$testdata}, the path to the \keyword{testdata/} directory, \item \keyword{$gttestdata}, the path to the location of the \keyword{gttestdata} repository (see~\ref{gttestdata}), \item \keyword{$bin}, the path to the \Gt \keyword{bin/} directory, \item \keyword{$cur}, the path to the current test case directory (each test is run in a separate directory), \item \keyword{$transdir}, the path to the \keyword{gtdata/trans} directory, \item \keyword{$obodir}, the path to the \keyword{gtdata/obo_files} directory, \item \keyword{$gtruby}, the path to the \keyword{gtruby/} directory, \item \keyword{$gtpython}, the path to the \keyword{gtpython/} directory, \end{itemize} It is also possible to get the standard output and standard error contents of the last command run by referring to the files specified by \keyword{$last_stdout} and \keyword{$last_stderr}. Furthermore, each test commandline (let's say the $i$-th one in the test) creates a set of \keyword{run_}$i$ (contains the actual command which was run), \keyword{stdout_}$i$ (contains the standard output) an \keyword{stderr_}$i$ (contains the standard error output) files in the test directory (which is \keyword{testsuite/stest_testsuite/test}$n$\keyword{/}, where $n$ is the test number (printed in front of each test name). \subsubsection{The \keyword{gttestdata} repository} \label{gttestdata} Large test or reference data must not be placed into the \Gt \keyword{testdata/} directory because they would increase the size of the \Gt distribution too much. For such data there is a separate repository, which is available via Git: \begin{lstlisting}[language=sh] $ git clone git://genometools.org/gttestdata.git \end{lstlisting}%$ The location of the \keyword{gttestdata} repository must be given when running the testsuite (see below). If it is not given, make sure that test which depend on large test data are disabled (e.g. by placing them in an `\keyword{if $gttestdata}' clause).%$ \subsubsection{Running the testsuite} A comprehensive \Gt test run, containing both the unit tests and the tool tests, can be initiated by issuing \keyword{make test} in the \Gt directory. The following \keyword{make} switches influence the test runs: \begin{itemize} \item \keyword{memcheck=yes} enables memory access checking via \emph{valgrind}, \item \keyword{testthreads=} enables multithreaded testing with \keyword{} threads in parallel to speed up test runs, \item \keyword{gttestdata=} tells the test suite to look for large test data in \keyword{}. This must be where a copy of the \keyword{gttestdata} repository is installed. \end{itemize} The tool tests can also be run using the \keyword{testsuite/testsuite.rb} script. Use the \keyword{-keywords } parameter to only run these tests tagged with the given keywords. OR and AND operators can be used to specify the tests in a more detailed way. The \keyword{-select } parameter can be used to run only the one test with number \keyword{n}, and the \keyword{-threads } will run the testsuite with \keyword{n} threads in parallel. \subsection{Header inclusion dependencies} Often function prototypes in the \Gt header files use types declared in another header files. By mistake, it is possible to forget \keyword{#include}'ing the header files where the type is defined in the header using it. Note that this problem may never surface if the forgotten header is included in every C source file which includes the header file with the missing include statement. To address this, the script \keyword{scripts/src_check_header.rb} tries to include each header file given as a command line argument by itself in a C file and compile it. If dependencies are missing, the check will abort and output the compiler error message so the problem can be fixed. \subsection{Debug symbols} Compilation with debug symbols is enabled by default. To make sure that line numbers are correct when using a debugger, e.g. \keyword{gdb}, use the \keyword{opt=no} option in the \keyword{make} call to disable compile-time optimization. The \keyword{opt} option is enabled by default. \subsection{Profiling} To enable the generation of profiling output in the compiled binaries, use the \keyword{prof=yes} option in the \keyword{make} call. The \keyword{prof} option is disabled by default. Enabling this option makes the \Gt binary create a \keyword{gmon.out} file during each run, which can then be used for analysis using \emph{gprof}\footnote{See \url{http://sourceware.org/binutils/docs/gprof/index.html} for further information.}. \subsection{Logging} Use the \keyword{gt_log_*()} functions in \keyword{core/log_api.h} to log debug messages to the screen or files. Output of debugging information defined using these functions can then be enabled or disabled via the \keyword{-debug} option of the \keyword{gt} binary. That is, to run tool \keyword{mytool} with debug output enabled, run \begin{lstlisting} $ gt -debug mytool \end{lstlisting}%$ \section{Additional \keyword{make} parameters} \subsection{Additional targets} Simply running \emph{make} builds both the \keyword{gt} executable and the \Gt shared library. However, there are also other targets (besides the ones mentioned in the respective sections above) which can be built using the \Gt Makefile: \begin{itemize} \item \keyword{docs}, which builds API documentation as web pages in \keyword{www} and as \LaTeX\ source in \keyword{doc/}, \item \keyword{manuals}, which, in addition to the files created by \keyword{docs}, also creates manuals for some published tools in \Gt (see \keyword{doc/manuals}), \item \keyword{install}, which installs the compiled \Gt binaries, libraries and headers into the directory specified by the \keyword{prefix=} option, \item \keyword{dist}, which creates a tarball with a binary \Gt distribution, which will then reside in the \keyword{dist/} subdirectory of the \Gt root, \item \keyword{srcdist}, which creates a tarball with a source \Gt distribution, which will then reside in the working directory, \item \keyword{spgt}, which checks selected files in the \keyword{core/} and \keyword{match/} subdirectories using the splint static checker\footnote{\url{http://www.splint.org}}, using the rule set \keyword{testdata/SKsplintoptions}, \item \keyword{clean}, which removes all files created during the build and test processes, except the \keyword{lib} and \keyword{bin} directories, and \item \keyword{cleanup}, which even removes these. \end{itemize} \subsection{Additional options} There are additional \keyword{make} options which are also mentioned in the README file and which influence how the \Gt binaries are built: \begin{itemize} \item Use \keyword{amalgamation=yes} to compile \Gt as an \emph{amalgamation}. That means, all \Gt C source files are concatenated into a big source file, which is then compiled. This approach allows the compiler to perform more extensive optimizations during the compilation and may result in better performance. It is encouraged to check regularly whether compiling \Gt as an amalgamation still works, as name clashes in static functions can sometimes occur which compile fine when in separate files, but lead to errors in the amalgamation. This option is disabled by default. \item Use \keyword{errorcheck=no} to make the compilation process not stop when a warning is encountered. This option should only be used if necessary (e.g.\ when building \Gt on Windows). This option is enabled by default. \item Use \keyword{cairo=no} to disable Cairo support in the \emph{AnnotationSketch} component of \Gt . This is useful on systems on which there is no Cairo library present, and \emph{AnnotationSketch} is not needed. This option is enabled by default. \item The option \keyword{sharedlib=no} disables building of a \Gt shared library. This option is enabled by default. \item The option \keyword{static=yes} tries to link all dependencies of \Gt statically. This option is disabled by default. \item Use \keyword{curses=no} to disable ncurses support. Useful when there is no ncurses library on the target system. This option is enabled by default. \end{itemize} \section{Contributing code} For \Gt development, we use the distributed versioning system Git\footnote{For a good introduction to the use of the Git software itself, see the Git web site (\url{http://git-scm.com}) or read the following guide: Travis Swicegood. \emph{Pragmatic Version Control Using Git}. Pragmatic Bookshelf, ISBN 1934356158. We \emph{strongly} encourage future \Gt developers to familiarize themselves with Git before developing with the intent of submission!} to track changes and exchange new code. Thus a Git repository is necessary to both: \begin{itemize} \item obtain the latest development version of the \Gt , and \item contribute to the \Gt by submitting new code to the maintainers. \end{itemize} Be aware that, in this guide, we will not explain Git basic concepts, or how individual Git commands work in detail. Instead, we will shortly state what strategy is most effective when working in \Gt development. \subsection{Getting started} To get started with \Gt development, we recommend the following: \begin{enumerate} \item Install the Git version control system. \item Read the Git documentation. \item Clone the \Gt Git repository with: \begin{lstlisting}[language=sh] $ git clone git://genometools.org/genometools.git \end{lstlisting}%$ \item Start hacking on your own feature branch: \begin{lstlisting}[language=sh] $ cd genometools $ git checkout -b my_feature_branch_name \end{lstlisting} \item Have fun! \end{enumerate} \subsection{Basic Git configuration} Please set your username and email address correctly. If unconfigured, they are often based on the hostname of the workstation where a commit is done. This may not be -- and almost never is -- correct in typical development environments (i.e.\ \keyword{user@workstation.zbh.uni-hamburg.de} instead of \keyword{user@maildomain.org}). Use the \keyword{git config} commands while in your \Gt Git repository to set them to a correct value: \begin{lstlisting} $ git config user.name "Hans Mustermann" $ git config user.email "mustermann@maildomain.org" \end{lstlisting} \subsection{Tips for successful source management} \begin{itemize} \item Develop each major feature or try out bigger changes in a separate branch (the so-called \emph{feature branch}) dedicated only to that aspect. That makes it easier to combine or discard branches later on, without having to meddle with individual commits too much if something goes wrong. Creating, merging and deleting branches is cheap in Git! \item Always leave your \emph{master} branch untouched so code pulled from upstream (e.g.\ the official \Gt repository) does not get merged by accident. \item Branch off new feature branches from the \emph{master} branch only. That makes it easy to chain branches later via \keyword{git rebase} in any order. \item Try to keep commits atomic. Every commit should either add a single feature or fix a single bug. That makes two things easier: \begin{enumerate} \item Locating the exact commit which introduces a bug, e.g.\ using \keyword{git bisect}. If there are too many changes in one commit, bugs become more tedious to track down. \item Reverting single commits if new features introduce bugs. \end{enumerate} If you made several incomplete commits and want to reorder or combine them into one afterwards, use interactive rebasing via \keyword{git rebase -i}\footnote{See \url{http://book.git-scm.com/4_interactive_rebasing.html} for an explanation.}. \item Needless to say, every commit should compile cleanly. Again, bisecting can become very tedious if the code has to be fixed at each stop to get it to even compile. \item Try to avoid merges with upstream as much as possible to keep the history linear. Instead of merging, rebase your feature branches regularly against an updated \emph{master}: \begin{lstlisting}[language=sh] $ git branch * mybranch master $ git checkout master $ git pull origin <...> $ git checkout mybranch $ git rebase master <...> \end{lstlisting}%$ \item In the first line of the commit message, give a short description of the change contained in the commit. Please use active, present tense, e.g.\ ``add feature X'' or ``allow X to do Y''. Commit messages for commits that touch scripting language bindings should be prefixed with the language in question, e.g.\ ``gtpython: add bindings for GtFoo class''. \item For bugfixes for bugs also listed in the \Gt Lighthouse bug tracking web app\footnote{\url{http://genometools.lighthouseapp.com}}, commit messages can be used to update the ticket status. See the Lighthouse documentation\footnote{\url{http://help.lighthouseapp.com/faqs/ticket-workflow/ticket-keyword-updates}} for details. \end{itemize} \subsection{Submission of contributions} This section describes how to get your contributions noticed, reviewed and integrated into the main \Gt codebase. \subsubsection{Source code submission} To get your source code to be considered for inclusion into the \Gt official source tree, first you need a Git repository in a publicly accessible location. That may be a free public account on github (\url{http://www.github.com}, Gitorious (\url{http://gitorious.org}), etc., or a directory on a filesystem accessible by one of the core developers. Typically the \Gt maintainers pull from a branch provided in this location and specified by you. This is called a \emph{pull request}. Please specify the exact location to the repository as well as the branch name. A pull request can be sent to \centerline{\texttt{steinbiss@zbh.uni-hamburg.de}} or \centerline{\texttt{gremme@gmail.com}.} \textbf{Important:} Always rebase your feature branch against the current official \Gt master before requesting a pull (see above). Also, please check whether your code compiles cleanly, even with the \keyword{amalgamation=yes} and \keyword{assert=no} parameters enabled which may influence compilation success. Small changes can also be submitted as patches which must be applicable using \keyword{git apply}. You will then be credited in the commit message. Such patches can be created conveniently -- ready to be sent via mail -- via git only using \keyword{git format-patch} or \keyword{git diff}. \subsubsection{Test data submission} For submissions to the \keyword{gttestdata} repository, the same rules apply as for source code. Please provide a repository from which to pull a branch which has been rebased against the current \keyword{gttestdata} master before. Before adding any more test data to the repository, please make sure that the new data is absolutely necessary. That is, existing large sequence should be reused, for example when testing a sequence parser or the like. \subsubsection{Licensing} Note that the \Gt are free software, i.e.\ an open-source project. All code distributed with the \Gt is published under the ICS license, which can be viewed at \url{http://genometools.org/license.html}. Submission of code for inclusion into the \Gt implies your permission to publish your code under this license. We will not accept contributions lacking proper copyright information at the top of each source file (see~\ref{copyright})! \end{document} genometools-1.5.1/doc/devguide/mlayout.pdf000066400000000000000000001107041211610345200205750ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 4 0 R /Filter /FlateDecode >> stream xM4 =#MOKhH 07evf?uW Uo8sqCa?l?[޿AZ ?6j,{!m BuȯKZby{y >L0-$S @EHGuH%TjV}QAU0B5c,qW˗*UA~?OwH#"OG$p:zL03sK:e8ui:fNkX' 7@p(C'i9Jɽ+9 EգU9Ldp}a 9%8P#! 킲"W]I.mY PԐ%@Xu` KdS\ig }x M)O~= /BhPfmH@˲ tt/uhP@aePCԨ`l tg+IcAyel j6P(F3 Pk h{*#be"UcJ{$"DT)UЎkR4҅kh' ?余k,2匠H98<&9ZYZɦTL{2H U+G\J#+60OrIO-)MnA؟$L8E@=/0.Zb 2>ǫ'Od)}%M}5:^ϩWofyyCN#]v٩ X_~>,rJA5}'֙4^yXٚp9*0zO+Ūf6 6APImc\ Wc92$)UB {Z0afItS+Ud;5$sUq:`U sΥLԲ5=%~pXYV"]g+q68^/$6p'NN .뼯llDFY3͎hI1dF=xW7FtD~eK"F4db6R&9y`F4"d't10I2#<;de!Ldel3֦rW@ 2bdCA;^pm!$-!g2z@FiN旅7һSz):TgDIUǛNN򩧇hh.${ tu~C y4.V a_ ͑>WHcTa{vE .^](nznaK0 endstream endobj 4 0 obj 1868 endobj 2 0 obj << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /Font << /f-0-0 5 0 R /f-1-0 6 0 R /f-2-0 7 0 R >> >> endobj 8 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 474.201385 174.975983 ] /Contents 3 0 R /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> endobj 9 0 obj << /Length 10 0 R /Filter /FlateDecode /Length1 11108 >> stream xzy|S虙+]IdYvWҕE^%y߮a1$6C @ I 0YKS I-@,m6/mӦI,CI'4%)m;}x̙9mv+Cװu7G෬Z1՗o]O5+W{"Vo|FăkشF-Xt+=_ѿe&`B&}Z/\qc@j0nyh>H)-lpxN9EY?3baBɆhƺ4,V Ӓ7n?ZsTRNmTS[QкJؤdZtu&a8?jᝂ,?q[]^wyfX@VfqBT&|,vgU3=I2m& @.e⪅xꕋޅmKr3h5Õ^g;oo}.1WsYjAgp} ϭk$P!d}#Dc4Wَb(b8]<=iCfmYK- 7u2}^GI8 σ77Cܹ<.DZǔh3+nwمB;2C|(!S&v6>fړ^2z.w34`/2}qi rRnyH$K&[NmWh-c̥  |PNZ@aeRih -W }}}Y֖v@2^-VWUUSDžg\K_<}+\LhYesVnWGy߻ y-m(SsT'J.zO\lW-W牒gCCϔV^{ 0MfNf$O-պٶ&dfɴX/6輼7ƫ_(j)xn+&š,`(' URsf:J`MA(h>K'|{3ޙqϝw`]sJ,%Zzd> X2!vК$A.#JY;l<\:5d#)i]!7@@PEiaG8UxqYb?y e:y:/L\N.',g?e}krP{U^cihإ j:Avvhiя lѦU08)-vޘjg}7])zB_Vvٌ@K6y{}*8w[`jW7x8J)*Njsqv3NZnpSC?lv-{Rg Y֫/,n'_Cb>]sK *P96 =ɩ&rS=~]E>;(Ovs?^Af14qWflk,'F QH{ũt}z2ҷ!99a[+iLDΨZ [IVmRTA9u\:Luw&.y*Cs|5*+z>SҚ9uTw;yT`:u+a? :ɖh)nrk_kƹR}WL.\d[zwsŠ9[#kKmX:w>^pq͕{ݴME.Y\WWIÂyk/-jjxKxoÞU=< 2hzɚڡ5h}P˪Tmeu jDlG'iQuUISy4CDTUUIADi`z"r|ԏ(werk0CX; arѧ ҍi9M@YR Pի2y;Gt*ЪNɊbvUԟ21z 'pq㒅ui9wviʠ^k0j~ap@Y1l`s뒻8Tg{R\W㓢Siu-k>Vpk\,iYg̶O-ׅ3_թwzh )~[Kb%RraLZ['0ϰ-Ю4o6ou?UpD\ᑢ9pC< #`ElxQnsmbYr ,L>6).DݞpА2+-G(J^Ua@*yIï̏(^Gn%Vw%k."oK7bn;fHҺ;+sbRq}vPSLc%SxF}Jgmo+iE]0jn~>+٨TMLEItuz^34<^Oy<bk32|u6Fm|I!yGfRg&fW8_׸P^-SWHPL-;TFq+zhY7yM >NsXap:Nü6]lړ o6;N]kWMw>![m+%Cj卅ڊ#U8pCa–zYdSZSAe<lAz|%ߎ0 ?|\ɩYie fM8Bn' n6\a. A V $TE _fx/po~ jּ Up #\~) 7wIf;4Mp1\AH #B=r 40t\J2&? h!U4"E!n~#)%;FG^.eo'k24QL^<+~Bɢ&?HST~;uSYGZ<$Pw_>LP %`|~ <(WP~ CL8J3L_i<,&*\IyMH%aVMh5m3l:.+zO?УU;b(6%ȑl'{=~eS|&s~NB\HS|ZYه%mvvH;8C#2w'tArypLz5 h W:"Ml ߆WCt&?'uv|ۜG^ 4Vj iO1Sth|'1%rg'J~nַ}:ȝ MUjF4򍰕NGECPDn什-u)osKO`d܁ēG1~UfMkvg+סoϦYC[SQ] [ayM$IM u5ՕX8RTXŀ'ys=nӁD5˒i63 zp(ng,%K\Xlo/QpiXaӌi*|J )WRJ}m/fKs{~[KL.}nºߏ|m5YkK̸z@Vn80]PR Æ f`-GQ+V7LAgM%bk[%*;HP[Ĝ=m8A/%@Ȍ$0]]&e|*ⱁ[X4b\!_ܓ`Y\5f[:ڜt``/=44c \V2܈}(C۔k} 8M\3v)=y[#ntDm=?{[ss``QsSRX,қK3=Jώ3=g/Q}- ˴س%^;. ,mtپZ"{zЩ05qYb1&iUM^uj HX^8()PFaSLE۞qᆹ0휿p`p^ t;3DߌIy2g`X߶DѽČ[{kH]IVyCw̆u.z>&$WƑLުFW!,y .]vZs:nP x+Pi,QEv"KҬE-JEQ/ (pfWԬL1CynόZC{ThL3R*ՍQ8a#䓒-s*E-p< Ō~RNIPIXW>::z=iBU j3 jBs!c$)(4C(>*ޡ$&T/xdx OK@4 F)G>RSA@a<g"h2CQ/c- Ҙ| apH]̇#GgDXV*3TR?cV\HcN ˣ@8V럒 a\\/RmW`B-6k>:D_7 [[Tw0&2f%LRI'PK܇C ʰlƼNņPgD-òY5+Z,>a#tS"  ]za 8Y:%^KE|HZVGrMwM7Mk޸i~7MqSVD=JINj9G-%tgzgg3}%>Sb"MLШjUJ2y0+/I|0B挄FZ\T y:̃)@v ߂H.Bp$O2gM Q'GBA*T|xDP-z|/"@L]p)v_>RqВE.55TPE<5L\VaLJFǒ:2"+#p =8"W &e\G]8Ia777CI P V'y*G$ܕ{ ݈Hqa=NBJ$=U`1 S/ +g 3+V 3ƒ7&NBmp\յJEuxQwR( ‚/'#R)_ʯ;y>UgљuFAiu@?"ʭUrrJɩu M^y\JdN=-QLDM3g{Igbl9t.%ĀFFN?͉ ;I`~Oʈ=JTwnͣޛofkSVX:U[3r&I&JEv&fvmGu 9Bfmmv2,*uHJ}]l;)dUKdF dٯ)tÃB[ 4zTiiJs44u9J "IEP!`8P~-W~KwHwoEۥH眞aLVv&U5%=0ހ q47;#R֧5&cV=G9@+Fl6Mu(]JYyQNu9",؜v^^֖(Z@lgۥ76y7mV>L4b=SpikoOGfeϷӬwƈ:.ٜJ?M6"϶+Y"Y+G^zĜH|^q2JϰQrvd endstream endobj 10 0 obj 8231 endobj 11 0 obj << /Length 12 0 R /Filter /FlateDecode >> stream x]j >$M6e{ɡh0:IFŘC޾YPA7|3k{+{ 0j<.vaI 7Jc0o^f׵~ug42ֶpϽ*fNE]mC(IZ0&feh?Ba§> endobj 14 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /TimesNewRomanItalic /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor 13 0 R /W [0 [ 777 722 277 610 443 500 722 500 277 443 ]] >> endobj 5 0 obj << /Type /Font /Subtype /Type0 /BaseFont /TimesNewRomanItalic /Encoding /Identity-H /DescendantFonts [ 14 0 R] /ToUnicode 11 0 R >> endobj 15 0 obj << /Length 16 0 R /Filter /FlateDecode /Length1 17556 >> stream x{ |Ź[+ٺ,YZiuZmٖ#ulr c"!@c;&B(Ғ(vBbxВ^)ZRhkZG;Cb47{TCb;"EQ":EjL-^g떒a+̺[􌳶YL-k`ҏ2s5^qs;ran1~ڔx73G)X:Vb[ kZcKw9 !gݿp8>'' ,N++)5R\5h$)0! X!+EFQ2@_!S)8br%o}qԍq?r8%ZUupXNmrhH8YSW[W[]ewMe9x&w=`=Mueq3n~sFm wWm}ujF8\ij̆ /v2g&WgXI 7:us(MT!xee1.a1] C';mΈۜ"Ӥ}3 v f*!Ilm17~ $$6gI1˜e`aG,@,,8Sdw?~Y7|ZF݂Gt,jt0^JRR:F~M$VxSh̀@ #l-;JKn}͸u${LP3'-v=qi G ,P)Lc5%N|OpQyPY⯂=P&~S{5U1d5T&-5a\9RÇB&%ShWln/qQ\\[uUt-G&?6OEW{TC*cp!*۽on谙ճpR g*9k55 9?x7n\օACn*Pf^^˖5rb>MT4ӷyѶakia0,ׅ~S^gs',DLs7Ć% lt9HMMR7: 5ɚdȺ^nhw:[(D+c*+KU=Tww$qㄐKPa22#jCau!Yvj Hȥ/WJNcf|{bel).-zu1z|Bc4*k,7ĤʺθιXJ5[k\/Z`uIEưfU+(QOA8㔯&xwLe,tc^\'i5ݔT!:RLe]v촦v;?vC4.ANЈiSzILx5^Ӽ&w*5eBUԐ @10XCm%O;{LsID,BEZIt-%*Ƙي՗gBh0Tס @ B΅`^ ڀc|)^xJA1$CQ!`yfWQ_|!I/Z4`0'A''6nI&xlk*Ns3<2WPW_[OxF!? ԧ$d). kgݦFj*m=T"Ȝ{W|{eCaRgz U0[pei;o喥ҥ1߬ΩQ(<ӮD&5vт_r (d_`teݵq#’Fyc±@][ EXΙļ1tLǼvcrS;2LyIdabMnE5HYLH'P  < sfWV8.HpR1:[#uf_)`oaB2px!A Ņd!sή1|s _y>N`T-?ʨl gBǪN uǠT< _mݨb*]0б 5̞\sD{mrQmjFcUVy"f\'1Kֶa֥ :Dҁz˔\}|2 V'lk{| lj>k-'&T6+BIJFHԗI]2y4r7&TmUEVH?=}˫(犼 TϝC+}f~mʑj\u({!\5ݴh̫V(A&jģ6sԇV{C!lWaVuU8MSl:/tZ~Уv;9ugP4f`LjqMm+Gv!pGˆ[bCHunv,9f؀; 8c5 8È};Ӈ@zz' }LKfTccY,gy`(QS$ʽy۾ wYdQ!*&͊vePù$sOʮxR>:Y]2.-F5*7v\kq,w^S$`F Zw{]!qgw!_wLFDMFhzp־"|N0X0I3\Mh}b*Ovv+xBnLs\1jN  '" !+Umt֔6`3kbv,wr0RcV@\kW;d75;e^;c?_X8a ՜0F4Y ydcn1&X+L hL96љha3M6;wp[_7 ph(98boISVYu?iPyG.qP~Q`02()#:QFSSΗ._KZ)J5r}9*WIXAB~5 5kv-Y䑃s.4'V.xsշ= o<WnWTDr7 Ê[Qy?o3E",t$E5*x$'K<ț';TMEbAѬSP/A#ݮh51_ &2F*F!#)&9czJaH/ g8!^ /ity^}lAInڮn5vw"q3%x-- , Rߍ-烚ZɏWfZU=NoM~xU*??< YG 2IpTWG 5새GVu v 'OXc" yɗ"E3kH HLp#9#S82.Ñ rqG")vdO˓OB絰A'.tO QywDkr Hإf_TV~]m*$_,Ԇ4$*= W\A 炜&AUU5*oҊm ;6Um/z"Ճrn>O=l\E Q_c`uH.9H K,Y Yр ] zxSJp }>a Ij\:)qR&>s8?mGA)%gxez.7vmusk2VZQ`5s*>;qFasg?kNDj[ cN[ Hd+< ¨V=>۾0´v2; 7X\^:懅,Rȋ)t̫?y1Fd~^CXQZx5W-ťc\âbưl7q9L1*VͰ Sk74&Wyg4^IU AQW9 H'ӍTwEE -G=(Rβxu#Lzqk[j(ӱ&C;yچf.],:52yΆz.S<1 & $h*|nz{ *ם5e6ok4,tJJkLiqG<E"~븭 sx #sROqf<[!}Öa rDů ?r}9t o]f# d"|3#g_g~B@@P8?06c!PL(RꭩJFg톽b(Q E(TtG(p6(sA%} '&AШ7NLxh `?*9xDNӎ)(q gI w|nebעkݫ+OM{ö>U?ys6g}l9eODž?X.LO[ oaw1'Ca4DÀX iJ76p !g`^㰑$kdQ4J ȎO#}N3WKbL?A ]R%'tNr9J>/aAż[էtPV_ .߸sRpAiMk5d|zo??7@u2:۪}]5 OViZ}*է]GNEuLuo`5oÒ  ׂ~# x}_~?aBomLt'R#%{A`Ѡ{гto?.k<b>>ݣA5n&'ګ{oݒ|}!pGKecH8"_"RD+]/iej F=kJB%Bm. qɛVoOgcL5㌹ $Gp&0R"B"c UahEKpIL33Ur6Ðsꁉ(G':R͝Q_h4iaO b΃Tլyh'^Y4D $D9?=>(υOO-G.>Zq~fapѰ{س/𰼿E6JSї=G&.XbJ6JaE"|[DuK*RBm z&D_S*rGrJ8 }Y}0sN19ňFH;8X08-*eREV#k MT_`tőaJxi6H)s\RˉhjUlW"^ i :7@cNYQmE~0^~p Hڐ;@N9{>D5=Ds[ 3Q zf490w ԏEm=l~ZA(6twҡf]</B吟K8#Fqh-GEs!>,п6._U) {v(w_6-D۸эpwNbzf̫̯X&r6.eױwo?gf?|\+{{w5~ BJ.JiB~>)›Brr1,fndc~]1~137&`6e`|\s!{rCeld O~;@5x#jçϑĞ!4H.03r=ك:st=r~$wWc菌L>C5~Ar-ICq'MًC?<Vq2~+FTw)Ll#K x%~n ޹B_ xD@6%BN0S/Rͽ>{I&o?ՉBUyQym 5$h o@Xs{a'Ѕm?W*Қ{VLп{ZMt?%j0cEׂ_0q6@3ߜ ~3|<伃 X`M|]{5]#ϭ@ТӠFR.ր}sѻB؉ waF3Н{r+EءU`EϢeQԕhn6 4*T·uh}Fм/gy4μ"=!UO_SWWUV&%h$ {E.^X`sNxeFVyvFʆ3Y6,ϝ[JJ !46Y)6.o@[K%RRKR,e"KcxUEj~VFp\"eqFj޺~5浺:CVC=3!ֆi0lҚu-tY&Ժr 8-n4ͫUY$ʚjԬ図:t=] #M3&Uaf,aø-Yǭg_sks/׺V- 풲r]]Gfgf-`,3w€]]S~ukVJlZy~hCh()*RNΠVihq6宕-hm.Er]^S8*Zzd_άT4v}tF<`ZtʰzGC|0ܕ]q}Vۜ.\HO<唕>$~hr%Fl<-) "4Égdibʽuޮj(S*(d̗%=xWdhZ3x۲YobzmmvNu(3m/+/Mp6<ˆ`zQ|l\5cq|+zN *4*Kbfn>7AERM)A*Z2ꧮ_|| {ABP S¢g@ ށBPNCyڡn6QL1ZC@}t17B`#M 2C$BWp09\eE[#ɀ-P*`i7BI1Qq?5;!%'rG[[12DcUjH%08> ՚Ff͚3%Ut{y9 Tk4ZVu܆w( @¼; Wy¼ :=H|s9>jTMCz 9mdB{ RC!A i9F,Z<ha_l=ߦmCf;J  $};g!8t-17>`V #Q0ٺєRnU\VGii۵jQR׎1ĬF_  @ @ ˬ gD7ib f؊l}B k>deJQ|=i\jZEۡ6Ba|L9ȴ3= G zX@ՏO,?Οx.* ?e+{zFK s>hɬB  0 ]b聭>AI8 39(ڙjYϢYNj.C۟55{{s40JF(dV' U7"@@zb>6z/p6p +Ʀ*%j{B=ўFychctA]nGrc1x-CO|QAv# ^^g :y$^Q@#:s,dP#GT@}ϢvzH}u_9ZO.g`Gۛ@߇:;ҳQtp>n9r e4,k< arI(JME#6`O#j[M4?o|]Ȑ( #~PMxd57)OS5RMJ7[~cx6B5rWӰ3.|&#~ hzMSc3ҾZ'<R΍MI?F^ğaմOGg}M6|cii7<BC>x'Q?1 (4RSߚ#U0#m07PBY>0 č7K|MBۮds:wp\ (Bg"Q:oDVYd IQH&lV'oDkFۡX?/ЅOy1^-F~~n׈=1t7@ˉ1&g-$ڃ2QO<=" V3} ҇|Cc4 | r/1ȭk2=[;$N?gV^Oʵk[kz5^)E[w]mYlWt>9vX/`7imQy&A0&p-ΦZ ^/8oH(0Li:bW*'S5Z<^<[tSHc 8}_~. c*-yڄ61LLM 0͛q)Y 'rGx[M-_o-Af endstream endobj 16 0 obj 12941 endobj 17 0 obj << /Length 18 0 R /Filter /FlateDecode >> stream x]Mn0b"Ctâ?*b,CܾJZ{38/?$^> endobj 20 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /TimesNewRoman /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor 19 0 R /W [0 [ 777 722 277 610 500 443 777 500 277 443 722 563 277 500 333 333 443 250 500 389 563 500 ]] >> endobj 6 0 obj << /Type /Font /Subtype /Type0 /BaseFont /TimesNewRoman /Encoding /Identity-H /DescendantFonts [ 20 0 R] /ToUnicode 17 0 R >> endobj 21 0 obj << /Length 22 0 R /Filter /FlateDecode /Length1 13376 >> stream xz xU𹷪t%]Ig ݤ+d"KDB `e$:h@]y\@:Pq  uotV7K+{=uֹ瞥a8.Zp%{t.Z: 뗬tޏnPMtK|exZx%@"p5~ KWŜˌwacO^޷h!X_h\bʓ{7a.Il*phRkRĸ*58ЫUxWa xӮvG/NƧ/OF㐈TUR܁S ~ €|Ax[Zwnvj:Τekz>?&OnIn-mO-\ۜʼƹ7 wz(_} K`mȧ+6;vXݝ"7^5udD{ H$FBHU%t$v$gv)>{OSW ݫNgMujîQ!jD"Z×zclBw1}_}zpG7TcX,B\; Q Onw 3y.jB9G5@Hwn-fͺ{f14y%'׹ :bHW Mp.E%=H\G-)oYw1:rPoOVuw/G3ooYcj^WՐ.`vCH(Ìg[j$HFF'ปߝt ۡumh◶5d'Z 6Sդ9& k sm5\ 7ƞ hq8R%MzՕaޜcY< Sn7,')rEif7 }~m;D)%fOB+&Ş E}'ItD= `#H7Q Z@f-W*[Ms l&GbDd]gixxC>fK@4*ąx:4 K֊vg%WMqv܆ӿ.Xh8-;@C5Cj7Ds"̓aB ;C3?RZ(RW\Nv)*X+cXW[ɏdLm6fX{;[.xWi& o{hیWn:ȝOr<4M~/lhŋr6wɗ=zUTTkƗcq9ީ`̅uRIS<3=<=hl&nF]J2:s=w;\%"w=6@x?Ec=y3) JL|FH~DvGf3Uiђ=t5v2G~O|y*g;8ԗ#޿z9zIF<:Rhx.w ̱*6`9sҠ)n2嘌48MHrAp94 }{=>#1zkȩk6O`'!חGbT>Sz`,CEq8ǕPk/O`sLLDY҈uDc]wttmpln2 ގ 6_/\M܎+>.2Yj:y'*w2~ 5,t1]/._fZnYl[:D,0h"`gQ| F%. DJAIۊQa9>VR'%;2D%^!nb}O]>[]{O0H|Ϝ|_᧷5]kw~NnfL4:u:VZ޶q_)n'ӥbc@UTUis4TSu:۶2<('{GOb,P”hDqmV:V7Иch~v?x9ƂG%~B̰m_Kz8:d[<V)nw@D-AZ!$iw=8'#Ϫu| Ñ|u=4nܪ}H1W:6P(و0@x"R9/EIAFK xIyy6Fڀj=GNLRc,I8ؒmtSEbɃf=UxK/H|gv x1O[N1ZY֏ JeY~hڢJ65_ѳ7ov_ߨq0{WQO_?7}L Mw 﫫i-D5We7{x\y/{wqKvLNw;I?чO_п?W͹1Gr^65]ZK\!9<ц`9,fb<yPc(z }Lju2 ܕsU)2ߞPۅ1\٨LQ&Nק7}dN6\&Fƞt%2%֬8Ip'2Lb'vzk&lw&؉~XGwAONY 9Q5 ԅyN(QE9^Wf֖U*ZWW^X%B -F"yeY.ŽD "X9|+f.:2]M[JWCPFRIrf*XrVOi?.(VtPgC׊7sgYwtgxxjc{Iij2YMoDkuZȔJ\?>Bu進 r_0̹x3ݱ@/} sztwRkeX>/"yQxFj_h1k 8&%,‚X[SM`NHumj vQ13DŽX0歊UcXXK.VI--D8\X^^RզH`˖j!*(:F8әGU}*UB"'n)2UM[ח^}:l/`[LtxD,_L=}Jʃ$=q '1 na?B*L.*rKk sL-ng%wYÌ~²3ś fl),B),Hx?#hBgRn3OtVY@$'MEt5YkSKߚ ˵$C-|3b!Ql5#{|MѪYQԚ-Me&lDH~pp#1!5#e,?Li a\AH){6*kEum8i \B|$V|FK4NS&G!W2 FL*#IC,AZ8\y!<7O0Ks1wKBRO^Moj\U:MӖ;[Ԏjc'49̌Ztx V T{j 9 LDv( +3ִWTV%\|'ZZDB폔媉dvuyEӌ/(pM9AS U:y*FX?2yө&&'*htkLb+qJ;OvGgef~G|hJ{ՏG@,*v{F^e(( D]R* ѫ| Q!ξ]`dw6_?5.H@i0f9MJB~`)(UF͡|W3Ќka(˛{ņOD jʗ4+iUeZ' e$mm>+j[<Ҿen^%D7\,WʤDXPW6CNurjruh>}XAgOZW]msjg.34" 93Vl:dCYk% s̑CS!"@ Vf-zkJ!'7g]9穾ֳ-3xL)81ɗXZxnkg"c^f˰MA**? cUшC`q,tE)7II5׼۟}PS97ݷȑz7_4+JϤlXcZv7a?رfrCTwaO8;Yiu;XBn"H"`_oDh? ߅nUo̩ⴡMOuXGu^xyVjSP 4MoC{yKX7Sz櫳FId}2z;D&?0wnC(4jZ! 9Zd1ȲY 5+Ԫv?*j@ :Ѓ`0cj>G|Hf,|63e>7+ ,V,ԏB8+vy5-x $|,rH'N9fE7X4R9YiKxP\= 78w)!z(Yf=8c.Gx,x[-+忑!~G($#$CWy|?j$7\%fCkp[xt t|3װIރzҿ`SB9уyrmpL#q;G3}\ܳ`-`<᨞΢h`65=ђZ2HFу:P[QN8o;8_Q(M_ȭ.0N$_R#q/_zy>heŸ3 p>_ )% .RtF$_߇0hw sqW¯3 og?%u$a2\H*vo(u5tܛ\iGz8MZsZpa%+;>%8jL&)4'-n27=} +wɵT-ψOW-Gk ]8qܙ]h=Gk&~RI#sH'!KIYcd7Gהj@=E"z=QzB[]RWW@K)ש[F_L[ӗ7OM"x+q]p)7­?%P/8[ {*|."KZJ.C'0y ϓCu.|C t M?.ᶚᚸ|M>rswU:DujUjA}QG ޠMr)}AߥqKwGǧqӹ鴅ƀ}h+٪"QfZ#Vy:H{,@'ޤn+DއuL&=4C3i½{Vq;،*-wJ*ʽ~pkd!өBAz6)#-;`9G~Ҁ 2Udj.wA!zM>]xޡ8D_k2>^$27BȇĆO6ӊ޿O)ڽ|T~t0DR IRiB<6a\]mMuUeEyYi0R?/'c"sLF^ըU6Q.=荨Ď 4zCWg܀ 7aoy6,ԅ'^փ[L+aW#o[ppVgXL&|ᮅCvy.)+,嘳 3cJKgg4K؊A$0SC`pQᯋ]KpG%u-=xg'UB88GY 515?NFɒf"S\cү++]+ TLG._ERb'903BohWG3ђw+Y#3 N[I?g;. w`lc֘^fXtr>mQQ?#:$_jŨ/Iih ۓB ҋxSJݥeۏYq1k~X;zp}gpaJ ;"+zNhJ޻l؅//SMj^`i }j.|T^m:LY|(|D~!?o¥!lB8oe7IYv$.v>>@ ՜%SF;A,7a *k#g2I$UZIR*0>[cpgH)$+'zQIúDswV"D8{2Io#0^E^ENKwWv@۹ XtAކ,0 u' b?p)t*7I#ߍHpJ<"}F'qí_cXsߊkh56m#p$Zjk;$C 8N+Wׄ#Pvb+G8>)qx4\qJ a:B )Jq]b]RX3`G݀9b Ԭ =+alG9&[0 a:v"h! 4A4:Ѻw ܼ 5zWpŨbx%㒋UOM#F8^(De ZAFЈ q2*B90nrWlr!&l|:mc!ŘCqpqBi0ՙS_2<> -[Po0 WH"+qNb *+W/AΏ [ڈ (]PWv =N+-Zo|0(xP`o:1|:.ojooJ^5}5mDMQS]T5GM, ~ VpHyd tϒ@ԢœuOOSZ$gzeH1TJ3H8&ACRfF4j5e"M& hZVhZVUky-Ղ֞KQj峡gW|6T"%Z S i:hDžIG" &0"z Dv@ǬhGJ#L6D;urkY)"3 >=BJoŗ]]!rK8& k'POxsQ$/yODžլ!uuX6=t#]{m&ZA{@dD t+`$#Wc&mCxZf"3ḁce.Ud.pqQsdLOʜMB\*pb䆵KɁ`p"&ӻh) dK584O^ņ[શYCWI[HS [vMZXcn>?1B6Y {֤?1 Ob=k4IybhZ؅BwQ 'vMt +kk}{y +#V&6T\̆𔱡VfD^hvH@%<mZ?W_q?_5ʿsCj7h6*-ޘ wsx`fgZkpf?_c tkoȚM?A"3f=C endstream endobj 22 0 obj 9285 endobj 23 0 obj << /Length 24 0 R /Filter /FlateDecode >> stream x]n E|,EGN$RnCuxJ"Bvi_Zg#daTF0x ǫu(A[WY ҋ,y8Ό!L g=$ {uW|_:ݽ]\4 h4ݫor@ȼmumW5{-Q E@mh:O/*Fd"DaڱV0퉪Ӂ3ӑ5Tv91μ‰I+k4kf2DEΚbgc=r=8]5%dl>^zz endstream endobj 24 0 obj 302 endobj 25 0 obj << /Type /FontDescriptor /FontName /CourierNew /Flags 4 /FontBBox [ -21 -679 637 1020 ] /ItalicAngle 0 /Ascent 832 /Descent -300 /CapHeight 1020 /StemV 80 /StemH 80 /FontFile2 21 0 R >> endobj 26 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /CourierNew /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor 25 0 R /W [0 [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]] >> endobj 7 0 obj << /Type /Font /Subtype /Type0 /BaseFont /CourierNew /Encoding /Identity-H /DescendantFonts [ 26 0 R] /ToUnicode 23 0 R >> endobj 1 0 obj << /Type /Pages /Kids [ 8 0 R ] /Count 1 >> endobj 27 0 obj << /Creator (cairo 1.8.10 (http://cairographics.org)) /Producer (cairo 1.8.10 (http://cairographics.org)) >> endobj 28 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 29 0000000000 65535 f 0000036403 00000 n 0000001982 00000 n 0000000015 00000 n 0000001959 00000 n 0000011571 00000 n 0000025762 00000 n 0000036250 00000 n 0000002129 00000 n 0000002343 00000 n 0000010669 00000 n 0000010693 00000 n 0000011037 00000 n 0000011060 00000 n 0000011302 00000 n 0000011733 00000 n 0000024770 00000 n 0000024795 00000 n 0000025191 00000 n 0000025214 00000 n 0000025451 00000 n 0000025918 00000 n 0000035299 00000 n 0000035323 00000 n 0000035703 00000 n 0000035726 00000 n 0000035958 00000 n 0000036468 00000 n 0000036596 00000 n trailer << /Size 29 /Root 28 0 R /Info 27 0 R >> startxref 36649 %%EOF genometools-1.5.1/doc/devguide/mlayout.svg000066400000000000000000000327561211610345200206350ustar00rootroot00000000000000 image/svg+xml GtExample GtExampleA <interface members> <implementation members> e/ea sizeof(GtExample) genometools-1.5.1/doc/dist_readme.txt000066400000000000000000000022751211610345200176400ustar00rootroot00000000000000This directory contains the binary distribution of GenomeTools (gt). Copyright (c) 2003-2013 G. Gremme, S. Steinbiss, S. Kurtz, and CONTRIBUTORS Copyright (c) 2003-2013 Center for Bioinformatics, University of Hamburg See LICENSE file or http://genometools.org/license.html for license details. The GenomeTools genome analysis system is a collection of bioinformatics tools (in the realm of genome informatics) combined into a single binary named ``gt''. It is based on a C library named ``libgenometools''. bin/ contains the binary file doc/ contains some PDF manuals include/ contains the genometools.h Header (in the genometools/ subdirectory) gtdata/ data needed by gt (during runtime) gtruby/ contains GenomeTools Ruby bindings (-> gtruby/README) gtpython/ contains GenomeTools Python bindings (-> gtpython/README) lib/ contains the libgenometools (as static and shared library) The GenomeTools source code can be downloaded from http://genometools.org For the ``gt'' binary an additional statically linked binary with the same name is contained in the directory bin/static/ (except for Mac OS X). Please try it, if the dynamically linked binary does not work on your system. genometools-1.5.1/doc/lgpl.txt000066400000000000000000000635041211610345200163200ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! genometools-1.5.1/doc/license.template000066400000000000000000000022561211610345200177750ustar00rootroot00000000000000Below is an example license to be used for new code in GenomeTools, modeled after the ISC license. It is important to specify the year of the copyright. Additional years should be added with a dash, if possible (i.e., if the corresponding years are continuous), e.g., Copyright (c) 2003-2007 or with a comma, if not possible (i.e., if the corresponding years are not continuous), e.g., Copyright (c) 2003, 2007 /* Copyright (c) CCYY YOUR NAME HERE Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ genometools-1.5.1/doc/manuals/000077500000000000000000000000001211610345200162515ustar00rootroot00000000000000genometools-1.5.1/doc/manuals/.gitignore000066400000000000000000000002031211610345200202340ustar00rootroot00000000000000comment.cut *.pdf api_reference.tex gtscript_reference.tex U89959.fna read1.fna read2.fna tallymer-tmp.tex Q1.gz tagerator-tmp.tex genometools-1.5.1/doc/manuals/.ispell_american000066400000000000000000000022421211610345200214010ustar00rootroot00000000000000Arabidopsis BAC Bioinformatics FMindex Hamburg Kurtz Stefan acagttttttttttttacttta agttttttttttttactttat al bdx bsize cagttttttttttttactttat chromomsomes ctgacagtttttttttttta db dir dna ensembl esa fasta fmi fna genome gistaff gt gttttttttttttactttata gz gzipped indexname kurtz lh locfreq ls min mitrochondrial mkindex mup org packedindex pck prj queryfile querypos rev rw sapiens thaliana uniquesub AboutMatstat AboutUniquesub Mus actgtatctcaaaatataaa chr gcttgaagatcatgatccag ggaataaacatgtcattgag gggaataaacatgtcattgag matstat ms musculus subjectpos taattctatttttctttctt aagcttgctgctgca cdiff gcttgctg gcttgctgctgca maxocc nospecials pdiff sprank tagerator nowildcards BMC Genomics KUR NER Narechania STE TODO Tallymer Vmatch fp genomes genometools http idxname lcp maxmersize mbd mct mers mersize mersizes minmersize minocc nonunique nonuniquemulti occratio pl prefixlength preprocess qpos qseqnum queryfiles suf suffixerator tallymer tis tyr abspos dblength dbsequence dbstartpos edist nop ssp taglength tagnum tagseq tagstartpos tagsuffixseq withwildcards Choudhuri Embl Genbank genomic Giegerich hamburg IUB len Ohlebusch relpos repfind repidx REPuter seqnum Stoye Swissprot zbh genometools-1.5.1/doc/manuals/.ispell_british000066400000000000000000000016121211610345200212660ustar00rootroot00000000000000Abouelhoda AKO al allout analyzed args ataat Bioinformatics Boeke ca Center cerevisiae chr chrAll dbcluster del deletionscore des dna EKW Ellinghaus exdrop expr FASTA fsa gaaat genometools GenomeTools genomic gff GFF ggaat ggttc Gremme gt gtaat gttat gz gzip htbp http indexname insertionscore kim Kurtz lcp lLTR longoutput LTR ltrharvest LTRharvest LTRs matchscore maxdistltr maxlenltr maxLTRdistance maxLTRlength maxtsd maxTSDlength mindistltr minlenltr minLTRdistance minLTRlength minseedlength mintsd minTSDlength mis mismatchscore mkvtree motifmis motifmismatchesallowed novo nr nt Ohlebusch org outinner outputfile pl pred resultfile retrotransposon retrotransposons rLTR seedlength sequenceontology shtml sim similaritythreshold singlets stdout suf suffixerator Suffixerator tg tgca tis TSD TSDmaxlen TSDminlen TSDs Vanguri verbosemode vmatch Vmatch Voytas Willhoeft www xdrop Xdrop xdropbelowscore genometools-1.5.1/doc/manuals/Makefile000066400000000000000000000044221211610345200177130ustar00rootroot00000000000000ALL=readjoiner.pdf\ hop.pdf\ ltrharvest.pdf\ ltrdigest.pdf\ uniquesub.pdf\ matstat.pdf\ mgth.pdf\ packedindex.pdf\ repfind.pdf\ tallymer.pdf\ tagerator.pdf\ genomediff.pdf TALLYMERTMP=tallymer-tmp TAGERATORTMP=tagerator-tmp TESTDATA=../../testdata all:${ALL} annotationsketch: annotationsketch.pdf %.pdf:%.tex %-pdf.bbl -test -e $*-pdf.aux && mv $*-pdf.aux $*.aux -test -e $*-pdf.bbl && mv $*-pdf.bbl $*.bbl pdflatex $< pdflatex $< mv $*.aux $*-pdf.aux -test -e $*.bbl && mv $*.bbl $*-pdf.bbl .PRECIOUS: %-pdf.bbl %-dvi.bbl %-dvi.aux %-pdf.aux %-pdf.bbl: gtmanuals.bib %-pdf.aux -test -e $*-pdf.aux && mv $*-pdf.aux $*.aux -bibtex $* test -e $@ || touch $@ -diff $@ $*.bbl || mv $*.bbl $@ && rm -f $*.bbl mv $*.aux $*-pdf.aux %-pdf.aux: %.tex -test -e $@ && mv $@ $*.aux pdflatex $< && rm $*.pdf mv $*.aux $@ read1.fna:${TESTDATA}/at1MB head -n 6999 $< > $@ read2.fna:${TESTDATA}/at1MB echo ">" > $@ tail -n 6945 $< >> $@ U89959.fna:${TESTDATA}/U89959_genomic.fas cp $< $@ ${TALLYMERTMP}.tex:tallymer.tex read1.fna read2.fna U89959.fna ./findemptyoutfiles.sh ./execcommand.pl $< > $@ tallymer.pdf:${TALLYMERTMP}.tex pdflatex ${TALLYMERTMP} pdflatex ${TALLYMERTMP} mv ${TALLYMERTMP}.pdf $@ tallymer.dvi:${TALLYMERTMP}.tex latex ${TALLYMERTMP} latex ${TALLYMERTMP} mv ${TALLYMERTMP}.dvi $@ ${TAGERATORTMP}.tex:tagerator.tex pck-human.prj Q1.gz ./findemptyoutfiles.sh ./execcommand.pl $< > $@ pck-human.prj:${TESTDATA}/at1MB ../../bin/gt packedindex mkindex -dna -dir rev -parts 12 -bsize 10 \ -sprank -locfreq 32 -tis -ssp -indexname pck-human\ -db ${TESTDATA}/at1MB Q1.gz:${TESTDATA}/Q1.gz cp $< $@ tagerator.pdf:${TAGERATORTMP}.tex pdflatex ${TAGERATORTMP} pdflatex ${TAGERATORTMP} mv ${TAGERATORTMP}.pdf $@ tagerator.dvi:${TAGERATORTMP}.tex latex ${TAGERATORTMP} latex ${TAGERATORTMP} mv ${TAGERATORTMP}.dvi $@ #%.pdf:%.tex #pdflatex $< #pdflatex $< #%.dvi:%.tex #latex $< #latex $< clean: ${RM} *.aux *.log *.bbl *.blg *.dvi *.mer *.mct *.mbd comment.cut ${RM} *.out *.toc ${RM} U89959.fna read[12].fna ${RM} reads.al1 reads.esq reads.lcp reads.llv reads.prj reads.suf ${RM} ${TALLYMERTMP}.tex ${RM} ${TAGERATORTMP}.tex Q1.gz pck-human.* cleanup:clean ${RM} ${ALL} genometools-1.5.1/doc/manuals/annotationsketch.tex000066400000000000000000000760101211610345200223530ustar00rootroot00000000000000\documentclass[a4paper]{scrreprt} \usepackage{xcolor} % we use grey text here \usepackage{graphicx} % figures \usepackage{listings} % source code \usepackage{hyperref} % navigation \usepackage{mathptmx} \usepackage{verbatim} \usepackage{bold-extra} % bold keywords in listings \usepackage[small]{caption} % better-looking captions \parindent0mm % this looks better in short paragraphs \hyphenation{An-no-ta-tion-Sketch} % some colors \definecolor{arggrey}{gray}{.6} \definecolor{middlegray}{gray}{.5} \newcommand{\AnnotationSketch}{\emph{AnnotationSketch}\ } % listings style \lstset{ basicstyle=\scriptsize\ttfamily, keywordstyle=\bfseries\ttfamily, commentstyle=\color{middlegray}\ttfamily, showstringspaces=false, flexiblecolumns=false, tabsize=2, numbers=left, numberstyle=\tiny, numberblanklines=false, stepnumber=1, numbersep=10pt, xleftmargin=15pt } % this is a basic language definition for the listings package \lstdefinelanguage{Lua} { morecomment = [l]{--}, morecomment = [s]{--[*[}{]*]--}, morestring=[b]", morestring=[b]', sensitive = true, morekeywords = {and, break, do, else, elseif, end, for, function, if, local, nil, not, or, repeat, return, then, until, while} morekeywords=[2]{}, } \title{The \emph{AnnotationSketch} genome annotation drawing library} \subject{Supplementary Information} \author{Sascha Steinbiss, Gordon Gremme, Christin Sch\"arfer, Malte Mader\\ and Stefan Kurtz} \begin{document} \maketitle \tableofcontents \chapter{AnnotationSketch} \emph{AnnotationSketch} is a versatile and efficient C-based drawing library for GFF3-compatible genomic annotations. It is included in the \emph{GenomeTools} distribution. In addition to the native C interface, bindings to the Lua, Python and Ruby programming languages are provided. \section{Overview} \emph{AnnotationSketch} consists of several classes, which take part in three visualization \emph{phases} (see Fig. \ref{dataflow}). \begin{figure}[ht] \centering{\includegraphics[width=.7\textwidth]{../../www/genometools.org/htdocs/images/dataflow.pdf}} \caption{Schematic of the data flow through the classes involved in image creation.} \label{dataflow} \end{figure} \subsection{Phase 1: Feature selection} The GFF3 input data are parsed into a directed acyclic graph (\emph{annotation graph}, see Fig. \ref{gfftree} for an example) whose nodes correspond to single features (i.e. lines from the GFF3 file). Consequently, edges in the graph represent the \emph{part-of} relationships between groups of genomic features according to the Sequence Ontology hierarchy. Note that GFF3 input files \emph{must} be valid according to the GFF3 specification to ensure that they can be read for \AnnotationSketch drawing or any other kind of manipulation using \emph{GenomeTools}. A validating GFF3 parser is available in \emph{GenomeTools} (and can be run using \texttt{gt gff3validator}). \begin{figure}[ht] \centering{\includegraphics[width=.9\textwidth]{../../www/genometools.org/htdocs/images/gfftree.pdf}} \caption{Example sequence region containing two genes in an annotation graph depicting the \emph{part-of} relationships between their components.} \label{gfftree} \end{figure} Each top-level node (which is a node without a parent) is then registered into a persistent \emph{FeatureIndex} object. The \emph{FeatureIndex} holds a collection of the top-level nodes of all features in each sequence region in an interval tree data structure that can be efficiently queried for features in a genomic region of interest. All child nodes of the top-level node are then available by the use of traversal functions. Alternatively, annotation graphs can be built by the user by creating each node explicitly and then connecting the nodes in a way such that the relationships are reflected in the graph structure (see examples section for example annotation graph building code). \subsection{Phase 2: Layout} The next step consists of processing the features (given via a \emph{FeatureIndex} or a simple array of top level nodes) into a \emph{Diagram} object which represents a single view of the annotations of a genomic region. First, semantic units are formed from the annotation subgraphs. This is done by building \emph{blocks} from connected features by grouping and overlaying them according to several user-defined collapsing options (see ``Collapsing''). By default, a separate \emph{track} is then created for each Sequence Ontology feature type. Alternatively, if more granularity in track assignment is desired, \emph{track selector} functions can be used to create tracks and assign blocks to them based on arbitrary feature characteristics. This is simply done by creating a unique identifier string per track. The \emph{Diagram} object can also be used to hold one or more \emph{custom tracks}, which allow users to develop their own graphical representations as plugins. The \emph{Diagram} is then prepared for image output by calculating a compact \emph{Layout} in which the \emph{Block} objects in a track are distributed into \emph{Line} objects, each containing non-overlapping blocks (see Fig. \ref{diagram}). The overall layout calculated this way tries to keep lines as compact as possible, minimising the amount of vertical space used. How new \emph{Lines} are created depends on the chosen implementation of the \emph{LineBreaker} interface, by default a \emph{Block} is pushed into a new \emph{Line} when either the \emph{Block} or its caption overlaps with another one. \begin{figure}[ht] \centering{\includegraphics[width=\textwidth]{../../www/genometools.org/htdocs/images/diagram.pdf}} \caption{The components of the \emph{Layout} class reflect sections of the resulting image.} \label{diagram} \end{figure} \subsection{Phase 3: Rendering} In the final phase, the \emph{Layout} object is used as a blueprint to create an image of a given type and size, considering user-defined options. The rendering process is invoked by calling the \texttt{sketch()} method of a \emph{Layout} object. All rendering logic is implemented in classes implementing the \emph{Canvas} interface, whose methods are called during traversal of the \emph{Layout} members. It encapsulates the state of a drawing and works independently of the chosen rendering back-end. Instead, rendering backend-dependent subclasses of \emph{Canvas} are closely tied to a specific implementation of the \emph{Graphics} interface, which provides methods to draw a number of primitives to a drawing surface abstraction. It wraps around the respective low-level graphics engine and allows for its easy extension or replacement. Currently, there is a \emph{Graphics} implementation for the Cairo 2D graphics library (\emph{GraphicsCairo}) and two \emph{Canvas} subclasses providing access to the image file formats supported by Cairo (\emph{CanvasCairoFile}) and to arbitrary Cairo contexts (\emph{CanvasCairoContext}, which directly accesses a \texttt{cairo\_t}). This class can be used, for example, to directly draw \emph{AnnotationSketch} output in any graphical environment which is supported by Cairo (\url{http://www.cairographics.org/manual/cairo-surfaces.html}). \subsection{Collapsing} By default, \emph{Lines} are grouped by the Sequence Ontology type associated with the top-level elements of their \emph{Blocks}, resulting in one track per type. To obtain a shorter yet concise output, tracks for parent types in the feature graph can be enabled to contain all the features of their child types. The features with the given type are then drawn on top of their parent features (e.g. all \emph{exon} and \emph{intron} features are placed into their parent \emph{mRNA} or \emph{gene} track). This process is called \emph{collapsing}. Collapsing can be enabled by setting the \texttt{collapse\_to\_parent} option for the respective child type to \texttt{true}, e.g. the following options: \begin{lstlisting}[language=Lua, showstringspaces=false,numbers=none,frame=single] config = { exon = { ..., collapse_to_parent = true, ..., }, intron = { ..., collapse_to_parent = true, ..., }, CDS = { ..., collapse_to_parent = true, ..., }, } \end{lstlisting} would lead to all features of the \emph{exon}, \emph{intron} and \emph{CDS} types collapsing into the \emph{mRNA} track (see Fig. \ref{collapsetypes} and \ref{cnn_large}). \begin{figure} \centering{\includegraphics[width=.3\textwidth]{../../www/genometools.org/htdocs/images/collapse_types.pdf}} \caption{Schematic of the relationships between the \emph{gene}, \emph{mRNA}, \emph{exon}, \emph{intron} and \emph{CDS} types and the colors of their representations in a diagram. The arrows illustrate how the relationships influence the collapsing process if collapsing is enabled for the \emph{exon}, \emph{intron} and \emph{CDS} types. In this example, they will be drawn on top of their parent \emph{mRNA} features.} \label{collapsetypes} \end{figure} \begin{figure} \centering{\includegraphics[width=\textwidth]{../../www/genometools.org/htdocs/images/cnn_large}} \caption{Example image of the \emph{cnn} and \emph{cbs} genes from \emph{Drosophila melanogaster} (Ensembl release 51, positions 9326816--9341000 on chromosome arm 2R) as drawn by \emph{AnnotationSketch}. At the bottom, the calculated GC content of the respective sequence is drawn via a custom track attached to the diagram. (a) shows a collapsed view in which all \emph{exon}, \emph{intron} and \emph{CDS} types are collapsed into their parent type's track. In contrast, (b) shows the \emph{cbs} gene with all collapsing options set to \texttt{false}, resulting in each type being drawn in its own track.} \label{cnn_large} \end{figure} \subsection{Styles} The Lua scripting language is used to provide user-defined settings. Settings can be imported from a script that is executed when loaded, thus eliminating the need for another parser. The Lua configuration data are made accessible to C via the \emph{Style} class. Configurable options include assignment of display styles to each feature type, spacer and margin sizes, and collapsing parameters. \par Instead of giving direct values, callback Lua functions can be used in some options to generate feature-dependent configuration settings at run-time. During layout and/or rendering, the \emph{GenomeNode} object for the feature to be rendered is passed to the callback function which can then be evaluated and the appropriate type can be returned. \par For example, setting the following options in the style file (or via the Lua bindings): \begin{lstlisting}[language=Lua, showstringspaces=false,numbers=left,frame=single] config = { ..., mRNA = { block_caption = function(gn) rng = gn:get_range() return string.format("%s/%s (%dbp, %d exons)", gn:get_attribute("Parent"), gn:get_attribute("ID"), rng:get_end() - rng:get_start() + 1, #(gn:get_exons())) end, ... }, exon = { -- Color definitions fill = function(gn) if gn:get_score() then aval = gn:get_score()*1.0 else aval = 0.0 end return {red=1.0, green=0.0, blue=0.0, alpha=aval} end, ... }, ... } \end{lstlisting} will result in a changed rendering (see Fig. \ref{callbacks}). The \texttt{block\_caption} function (line 4) overrides the default block naming scheme, allowing to set custom captions to each block depending on feature properties. Color definitions such as the \texttt{fill} setting (line 17) for a feature's fill color can also be individually styled using callbacks. In this case, the color intensity is shaded by the \emph{exon} feature's score value (e.g. given in a GFF file). \begin{figure} \centering{\includegraphics[width=.7\textwidth]{../../www/genometools.org/htdocs/images/callbacks}} \caption{Example rendering using callback functions to enable custom block captions and score-dependent shading of exon features.} \label{callbacks} \end{figure} \section{The \texttt{gt sketch} tool} The \emph{GenomeTools} \texttt{gt} executable provides a new tool which uses the \emph{AnnotationSketch} library to create a drawing in PNG, PDF, PostScript or SVG format from GFF3 annotations. The annotations can be given by supplying one or more file names as command line arguments: \small \medskip \begin{verbatim} $ gt sketch output.png annotation.gff3 $ \end{verbatim} \normalsize \medskip or by receiving GFF3 data via the standard input, here prepared by the \texttt{gt gff3} tool (here called with the \texttt{-addintrons} option to automatically add intron features between exons): \small \medskip \begin{verbatim} $ gt gff3 -addintrons annotation.gff3 | gt sketch output.png $ \end{verbatim} \normalsize \medskip The region to create a diagram for can be specified in detail by using the \texttt{-seqid}, \texttt{-start} and \texttt{-end} parameters. For example, if the \emph{D. melanogaster} gene annotation is given in the \texttt{dmel\_annotation.gff3} file, use \small \medskip \begin{verbatim} $ gt sketch -format pdf -seqid 2R -start 9326816 -end 9332879 output.pdf \ dmel_annotation.gff3 $ \end{verbatim} \normalsize \medskip to plot a graphical representation of the \emph{cnn} and \emph{cbs} gene region from the \emph{FlyBase} default view in PDF format. The \texttt{-force} option can be used to force overwriting of an already existing output file. The \texttt{-pipe} option additionally allows passing the GFF3 input through the sketch tool via the standard output, allowing the intermediate visualisation of results in a longer pipeline of connected GFF3 tools. More command line options are available; their documentation can be viewed using the \texttt{-help} option. If an input file is not plotted due to parsing errors, \emph{GenomeTools} includes a strict GFF3 validator tool to check whether the input file is in valid GFF3 format. Simply run a command like the following: \small \medskip \begin{verbatim} $ gt gff3validator input_file.gff3 input is valid GFF3 $ \end{verbatim} \normalsize \medskip This validator also allows one to check the SO types occurring in a GFF3 file against a given OBO ontology file. This checking can be enabled by specifying the file as an argument to the \texttt{-typecheck} option. If the PDF, SVG and/or PostScript output format options are not available in the \texttt{gt} binary, the most likely cause is that PDF, SVG and/or PostScript support is disabled in your local \emph{Cairo} headers and thus also not available in your local \emph{Cairo} library. This issue is not directly related to \emph{AnnotationSketch} and can be resolved by recompiling the \emph{Cairo} library with the proper backend support enabled. \section{Dynamic track assignment} A special kind of function, called \emph{track selector function}, can be used to customise the \AnnotationSketch output by using arbitrary features of a block to assign blocks to tracks (and implicitly creating new tracks this way). \subsection{Default: Top level type decides track membership} By default, for each \emph{Block} in a \emph{Diagram}, its source filename and/or the type attribute of its top level element decides into which track the block is finally inserted during the layout phase. So by default, an annotation graph parsed from the GFF3 input file `example.gff3' with \emph{gene}, \emph{mRNA} and \emph{exon} type nodes will be rendered into two separate tracks (\emph{exon}$\to$\emph{mRNA} collapsing enabled, see Fig.~\ref{tsexample1}): \begin{itemize} \item \texttt{example.gff3|gene}, and \item \texttt{example.gff3|mRNA}. \end{itemize} We will call the second part (after the ``\texttt{|}'') of these track titles \emph{track identifier strings} in the rest of this document. \begin{figure}[ht] \centering{\includegraphics[width=.7\textwidth]{../../www/genometools.org/htdocs/images/example_nocollapse_noselect.png}} \caption{Default AnnotationSketch output for a simple GFF3 file with simple \emph{exon}$\to$\emph{mRNA} collapsing.} \label{tsexample1} \end{figure} While automatically determining tracks from the types actually present in the input annotations is convenient in many use cases, one could imagine cases in which more control about block handling may be desired. This leads to the question: How can one extract blocks with specific characteristics and assign them to a special track? The answer is simple: By overriding the default track identifier string, new tracks can be created and named on the fly as soon as a block satisfying user-defined rules is encountered. \subsection{Track selector functions} These rules take the form of \emph{track selector functions}. Basically, a track selector function is a function which takes a block reference as an argument, and returns an appropriate track identifier string. For example, in Python the default track selector function would look like this: \begin{lstlisting}[language=Python, showstringspaces=false,numbers=none,frame=single] def default_track_selector(block): return block.get_type() \end{lstlisting} This function simply returns a string representation of the type of a block's top level element, creating the tracks just like depicted in Fig. \ref{tsexample1}. For a very simple example, let's assume that we want to create separate tracks for all mRNAs on the plus strand and for all mRNAs on the minus strand. The idea now is to change the strand identifier for blocks of the \emph{mRNA} type to include the strand as additional information, thus creating different track identifiers for plus and minus strand features. In Python, this track selector function would construct a new string which contains both the type and the strand: \begin{lstlisting}[language=Python, showstringspaces=false,numbers=none,frame=single] def strand_track_selector(block): if block.get_type() == "mRNA": return "%s (%s strand)" % (block.get_type(), block.get_strand()) else: return block.get_type() \end{lstlisting} Using this track selector function would produce the desired result of separate tracks for the \emph{mRNA} features for each strand (see Fig. \ref{tsexample2}). \begin{figure}[ht] \centering{\includegraphics[width=.7\textwidth]{../../www/genometools.org/htdocs/images/example_strandselect.png}} \caption{AnnotationSketch output with \texttt{strand\_track\_se\-lector()} track selector function. This image now shows separate tracks for plus and minus strand features.} \label{tsexample2} \end{figure} A track selector function can be set for a \emph{Diagram} object using the \texttt{diagram.set\_track\_se\-lec\-tor\_func()} method. In C, its argument is a pointer to a function of the signature \medskip \begin{verbatim} void (*GtTrackSelectorFunc)(GtBlock*, GtStr*, void*) \end{verbatim} \medskip where arbitrary data can be passed via the third \texttt{void*} argument. The Python \texttt{set\_track\_se\-lec\-tor\_func()} method directly accepts a Python function as an argument, while the Ruby version takes a Proc object: \begin{lstlisting}[language=Ruby, showstringspaces=false,numbers=none,frame=single] ... strand_track_selector = Proc.new { |block, data| "#{block.get_type} (#{block.get_strand} strand)" } ... diagram.set_track_selector_func(strand_track_selector) ... \end{lstlisting} Note that in Python and Ruby, it is also possible to reference data declared outside of the track selector function. For example, this can be used to filter blocks by pulling blocks whose description matches a pattern into a separate track: \begin{lstlisting}[language=Python, showstringspaces=false,numbers=none,frame=single] ... interesting_genes = ["First test gene", "another gene"] def filter_track_selector(block): if block.get_caption() in interesting_genes: return "interesting genes" else: return block.get_type() ... diagram.set_track_selector_func(filter_track_selector) ... \end{lstlisting} This code results in the image shown in Fig.~\ref{tsexample3} : \begin{figure}[ht] \centering{\includegraphics[width=.7\textwidth]{../../www/genometools.org/htdocs/images/example_filterselect.png}} \caption{\AnnotationSketch output with \texttt{filter\_track\_selector()} track selector function. This image now shows a separate track for features with a specific caption.} \label{tsexample3} \end{figure} \section{Custom tracks} There are kinds of data which may be interesting to see together with annotation renderings, but that can not be expressed -- or only in a complicated way -- in GFF3 format. It may even be too difficult or counterintuitive to properly represent this data as typical \AnnotationSketch box graphics. For example, this may be sequence data, numerical sequence analysis results, or other kinds of data which does not fit into the simple ‘genomic feature’ scheme. For an example, see Fig. \ref{ctexample1}. \begin{figure}[ht] \centering{\includegraphics[width=.7\textwidth]{../../www/genometools.org/htdocs/images/example_ct.png}} \caption{Example \AnnotationSketch output with a custom track at the bottom, displaying the GC content over a window size of 200 bp.} \label{ctexample1} \end{figure} With \emph{custom tracks}, \AnnotationSketch provides a mechanism to use the internal drawing functionality to create user-defined output which can be tailored to fit this kind of data. A custom track looks just like a normal \AnnotationSketch track, but is completely in control of the developer. While native \AnnotationSketch primitives such as boxes can of course be used, the author of a custom track is not restricted to the layout algorithm and can draw anything anywhere (as long as it is provided by the \emph{Graphics} class), taking arbitrary external data into account. \subsection{Anatomy of a custom track class} Simply put, custom tracks are classes which are derived from a \emph{CustomTrack} base class and must implement a set of mandatory methods: \begin{itemize} \item \texttt{get\_height()}: Returns the amount of vertical space (in pixels or points) the custom track will occupy in the final image. Must return a numeric value. \item \texttt{get\_title()}: Returns a title for the custom track which is displayed at the top of the track. Note that, unlike a track identifier string e.g. produced by a track selector function, the string returned by this function is not prepended by a file name. \item \texttt{render(graphics, ypos, range, style, error)}: Performs the actual rendering operations. As parameters, this function receives \begin{itemize} \item a \emph{Graphics} object to draw on, \item the vertical offset \emph{ypos} of the drawing area assigned to the custom track, \item the \emph{Range} of the sequence positions for which annotations are currently displayed, \item a \emph{Style} object which can be used to obtain style information specific to this custom track, and \item an \emph{Error} object which can be used to return an error message if the custom track needs to signal a problem. \end{itemize} \end{itemize} The \texttt{render()} method must return 0 if drawing was successful, or a negative value if an error occurred. Optionally, a \texttt{free()} method can be implemented if the subclass needs to clean up any private space allocated by itself. These methods are then called by the rendering code in AnnotationSketch when a Diagram containing a custom track is laid out and rendered. No other constraints apply on such a class besides that these methods are implemented (in the scripting language bindings, the parent classes' constructor must be called once). \subsection{Writing an example custom track} Let's suppose we are not satisfied with the display of single base features, such as transposable element insertion sites or SNPs. Instead of a single line denoting the feature location, we would like to have a small triangle pointing at the location. Suppose we also do not have this data in an annotation graph, so we cannot use the built-in rendering functions. It is straightforward to write a small custom track class which does this for us. This tutorial uses Python code for simplicity, but the general approach is common to all supported languages. First, we need to define a class inheriting from CustomTrack, call the parent constructor to register the functions and set instance variables for the triangle sidelength and a dictionary containing the feature positions and a description: \begin{lstlisting}[language=Python, showstringspaces=false,numbers=left,frame=single] class CustomTrackInsertions(CustomTrack): def __init__(self, sidelength, data): super(CustomTrackInsertions, self).__init__() self.sidelength = sidelength self.data = data \end{lstlisting} We define the height to be 20 pixels: \begin{lstlisting}[language=Python, firstnumber=6, showstringspaces=false,numbers=left,frame=single] def get_height(self): return 20 \end{lstlisting} As a track title, we set ``Insertion site'': \begin{lstlisting}[language=Python, firstnumber=8, showstringspaces=false,numbers=left,frame=single] def get_title(self): return "Insertion site" \end{lstlisting} The rendering code then calculates the triangle coordinates and draws the respective lines: \begin{lstlisting}[language=Python, firstnumber=10, showstringspaces=false,numbers=left,frame=single] def render(self, graphics, ypos, rng, style, error): height = (self.sidelength*math.sqrt(3))/2 margins = graphics.get_xmargins() red = Color(1, 0, 0, 0.7) for pos, desc in self.data.iteritems(): drawpos = margins + (float(pos)-rng.start)/(rng.end-rng.start+1) \ * (graphics.get_image_width()-2*margins) graphics.draw_line(drawpos-self.sidelength/2, ypos + height, \ drawpos, ypos, \ red, 1) graphics.draw_line(drawpos, ypos, \ drawpos+self.sidelength/2, ypos + height, \ red, 1) graphics.draw_line(drawpos-self.sidelength/2, ypos + height, \ drawpos+self.sidelength/2, ypos + height, \ red, 1) graphics.draw_text_centered(drawpos, ypos + height + 13, str(desc)) return 0 \end{lstlisting} For a Python custom track, that's it! No more code is necessary for this very simple custom track. We can now instantiate this class and attach the instance to a \emph{Diagram} object: \begin{lstlisting}[language=Python, showstringspaces=false,numbers=none,frame=single] ... diagram = Diagram(feature_index, seqid, range, style) ... ctt = CustomTrackInsertions(15, {2000:"foo", 4400:"bar", 8000:"baz"}) diagram.add_custom_track(ctt) ... \end{lstlisting} Running layout and drawing functions on this diagram then produces the desired image (see Fig.~\ref{ctexample2} \begin{figure}[ht] \centering{\includegraphics[width=.7\textwidth]{../../www/genometools.org/htdocs/images/example_ct2.png}} \caption{The example insertion site custom track (at the bottom), displaying three sample data points.} \label{ctexample2} \end{figure} \section{Examples} This section will show how to use the \emph{AnnotationSketch} library in custom applications. As \emph{AnnotationSketch} is distributed as a part of \emph{GenomeTools}, its code is compiled into the \texttt{lib\-ge\-nome\-tools.so} shared library. Please refer to the INSTALL file inside the \emph{GenomeTools} distribution for installation instructions. For a general idea about how to use the library, a simple implementation of the GFF3 validator is included in the source package (see \texttt{src/examples/gff3validator.c}) as an example showing how to create \emph{GenomeTools}-based programs. In the same directory, there is also an appropriate \texttt{Makefile} to build and link this application against the installed shared library \texttt{libgenometools.so}. \subsection{Using \emph{AnnotationSketch} to draw annotations from a file} The following code examples (in C and Lua) illustrate how to produce an image from a given GFF3 file using \emph{AnnotationSketch}. The result is shown in Fig. \ref{parsed_img}. In essence, these code examples implement something like a simple version of the \texttt{gt sketch} tool from \emph{GenomeTools} without most command-line options. The C-based examples mentioned below are compiled along with the \emph{GenomeTools} library itself and available in the \texttt{bin/examples} directory. \begin{figure} \centering{\includegraphics[width=.7\textwidth]{../../www/genometools.org/htdocs/images/parsed}} \caption{Example rendering of a GFF3 file with default style.} \label{parsed_img} \end{figure} \subsubsection{C code} (See \texttt{src/examples/sketch\_parsed.c} in the source distribution.) \lstinputlisting[language=C, breaklines=true, numbers=left, frame=single,]{../../src/examples/sketch_parsed.c} \subsubsection{Lua code} (See \texttt{gtscripts/sketch\_parsed.lua} in the source distribution. This example can be run by the command line \texttt{gt gtscripts/sketch\_parsed.lua }) \lstinputlisting[language=Lua, breaklines=true, numbers=left, frame=single,]{../../gtscripts/sketch_parsed.lua} \subsubsection{Ruby code} (See \texttt{gtruby/sketch\_parsed.rb} in the source distribution.) \lstinputlisting[language=Ruby, breaklines=true, numbers=left, frame=single,]{../../gtruby/sketch_parsed.rb} \subsubsection{Python code} (See \texttt{gtpython/sketch\_parsed.py} in the source distribution.) \lstinputlisting[language=Python, breaklines=true, numbers=left, frame=single,]{../../gtpython/sketch_parsed.py} \subsection{Using \emph{AnnotationSketch} to draw user-generated annotations} The following C code example illustrates how to produce an image from annotation graphs created by user code. The result is shown in Fig. \ref{constructed_img}. \begin{figure} \centering{\includegraphics[width=.7\textwidth]{../../www/genometools.org/htdocs/images/constructed}} \caption{Example rendering of user-generated annotations with default style.} \label{constructed_img} \end{figure} \subsubsection{C code} (See \texttt{src/examples/sketch\_constructed.c} in the source distribution.) \lstinputlisting[language=C, breaklines=true, numbers=left, frame=single,]{../../src/examples/sketch_constructed.c} \subsubsection{Lua code} (See \texttt{gtscripts/sketch\_constructed.lua} in the source distribution. This example can be run by the command line \texttt{gt gtscripts/sketch\_constructed.lua }) \lstinputlisting[language=Lua, breaklines=true, numbers=left, frame=single,]{../../gtscripts/sketch_constructed.lua} \subsubsection{Ruby code} (See \texttt{gtruby/sketch\_constructed.rb} in the source distribution.) \lstinputlisting[language=Ruby, breaklines=true, numbers=left, frame=single,]{../../gtruby/sketch_constructed.rb} \subsubsection{Python code} (See \texttt{gtpython/sketch\_constructed.py} in the source distribution.) \lstinputlisting[language=Python, breaklines=true, numbers=left, frame=single,]{../../gtpython/sketch_constructed.py} \input{api_reference} %\input{gtscript_reference} \end{document} genometools-1.5.1/doc/manuals/execcommand.pl000077500000000000000000000043551211610345200211030ustar00rootroot00000000000000#!/usr/bin/env perl use strict; use warnings; unless(@ARGV) { print STDERR "Usage: $0 \n"; exit 1; } if((scalar @ARGV) eq 0) { print STDERR "$0: missing argument\n"; exit 1; } my($inputfile) = $ARGV[0]; unless ( -e $inputfile) { print STDERR "$0: file \"$inputfile\" does not exist\n"; exit 1; } unless ( open(INPUTFILEHANDLE, $inputfile) ) { print STDERR "Cannot open file \"$inputfile\""; exit 1; } while (my $in = ) { if($in =~ m/^\\EXECUTE\{([^\}]*)\}/) { runtheprogram($1); } else { print $in; } } sub determinemaxfilewidth { my ($filename) = @_; my $maxwidth = 0; my $width; unless(open(FILEHANDLE,$filename)) { print STDERR "Cannot open file \"$filename\"\n"; exit 1; } while(my $line = ) { $width = length $line; if($maxwidth < $width) { $maxwidth = $width; } } close(FILEHANDLE); return $maxwidth; } sub runtheprogram { my($argcommand) = @_; my(@argv) = split(' ',$argcommand); my $program = $argv[0]; my $outfileprefix = $argcommand; $outfileprefix =~ s/ \|.*//; # delete possible pipe at end $outfileprefix =~ s/\s+/-/g; # delete white spaces $outfileprefix =~ s/\*//g; # delete white spaces $outfileprefix =~ s/\'.*\'//g; # ' ' expressions my $outfilename = "output/${outfileprefix}" . ".out"; if(-f ${outfilename}) { print STDERR "# file ${outfilename} already exists\n"; } else { my $fh; my @skippipe = split(/\|/,$argcommand); unless(open($fh, ">" . $outfilename)) { print STDERR "Cannot open file $outfilename\n"; exit 1; } print $fh "\$ $skippipe[0]\n"; close($fh); push(@argv,'>>'); push(@argv,$outfilename); my $argstring = "../../bin/" . join(' ',@argv); print STDERR "run $argstring\n"; my($retcode) = system($argstring); $retcode = $? >> 8; if($retcode ne 0) { print STDERR "failure: $argstring\n"; unlink($outfilename); exit 1; } } my $maxwidth = determinemaxfilewidth($outfilename); my $env; if($maxwidth < 78) { $env = "footnotesize"; } else { $env = "scriptsize"; } print "\\begin{$env}"; print "\\verbatiminput{$outfilename}"; print "\\end{$env}\n"; } genometools-1.5.1/doc/manuals/findemptyoutfiles.sh000077500000000000000000000003161211610345200223620ustar00rootroot00000000000000#!/bin/sh for filename in `find output/ -name '*.out'` do filesize=`cat ${filename} | wc -l` if test $filesize -eq 1 then echo "Warning: ${filename} only contains one line" exit 1 fi done genometools-1.5.1/doc/manuals/genomediff.tex000066400000000000000000000304031211610345200210760ustar00rootroot00000000000000\documentclass[12pt,titlepage]{article} \usepackage[a4paper,top=30mm,bottom=30mm,left=20mm,right=20mm]{geometry} \usepackage[utf8]{inputenc} \usepackage{xspace} \usepackage{listings} \usepackage{optionman} \usepackage{url} \usepackage{booktabs} \usepackage{xcolor} %\usepackage[binary-units]{siunitx} %\usepackage{TheSansUHH} \newcommand{\Gdiff}{\textit{genomediff}\xspace} \newcommand{\Suff}{\textit{suffixerator}\xspace} \newcommand{\Mki}{\textit{packedindex}\xspace} \newcommand{\Encseq}{\textit{encseq}\xspace} \newcommand{\RGdiff}{\texttt{run\_genomediff.rb}\xspace} \newcommand{\GenomeTools}{\textit{GenomeTools}\xspace} \newcommand{\Gt}{\texttt{gt}\xspace} \newcommand{\Kr}{\ensuremath{K_r}\xspace} \newcommand{\Gtsuffixerator}{\texttt{gt suffixerator}\xspace} \newcommand{\Gtpackedindex}{\texttt{gt packedindex mkindex}\xspace} \newcommand{\ESA}{ESA\xspace} \newcommand{\FastA}{FASTA\xspace} \newcommand{\File}[1]{\texttt{\small #1}} \newcommand{\ShuS}{\textit{shustrings}\xspace} \lstset{language=bash, basicstyle=\ttfamily } \definecolor{darkgreen}{rgb}{0.3,0.5,0.3} \definecolor{darkblue}{rgb}{0.3,0.3,0.5} \definecolor{darkred}{rgb}{0.5,0.3,0.3} \lstdefinelanguage{LUA}{% sensitive=true,% columns=fixed,% keywordstyle=[1]{\color{darkblue}\bfseries},% keywordstyle=[2]{\color{darkgreen}\bfseries},% morekeywords=[1]{local,if,then,else,end,while,do, coroutine,yield},% Official LUA keywords morekeywords=[2]{units},% Your private keywords otherkeywords={.,=,~,*,>,:},% morestring=[b]",% stringstyle={\color{darkred}\itshape},% breaklines=true,% linewidth=\textwidth,% comment=[l]{--}% } \title{\Gdiff user manual} \author{\begin{tabular}{c} \textit{Dirk Willrodt}\\[1cm] Research Group for Genome Informatics\\ Center for Bioinformatics\\ University of Hamburg\\ Bundesstrasse 43\\ 20146 Hamburg\\ Germany\\[1cm] \url{willrodt@zbh.uni-hamburg.de}\\ \end{tabular}} \begin{document} %\tsuhhfamily \maketitle \section*{This Manual} Some text is highlighted by different fonts according to the following rules. \begin{itemize} \item \texttt{Typewriter font} is used for the names of software tools. \item \File{Small typewriter font} is used for file names. \item \begin{footnotesize}\texttt{Footnote sized typewriter font} \end{footnotesize} with a leading \begin{footnotesize}\texttt{'-'}\end{footnotesize} is used for program options. \item \Showoptionarg{small italic font} is used for the argument(s) of an option. \end{itemize} \section{Introduction} This document describes \Gdiff, a software tool for measuring evolutionary distances between sets of closely related genomes. These distances are Jukes-Cantor corrected divergence between the pairs of genomes, that is, the number of mutations per base between them. This distance is called \Kr and is based on so called \ShuS \cite{HAU:DOM:WIE:2008,HAU:PFA:DOM:WIE:2009,HAU:REE:PFA:2011}. The calculation of all pairwise distances is alignment free, but the resulting distances have the same biological meaning as if calculated with a multiple sequence alignment. This software is only able to process closely related distances, because \Kr is only reliable for distances $<0.5$. \Gdiff is written in C and it is based on the \GenomeTools library~\cite{genometools}. It is called as part of the single binary named \Gt. The source code can be compiled on 32-bit and 64-bit platforms without making any changes to the sources. \section{Building \Gdiff} \label{Building} As \Gdiff is part of the \GenomeTools software suite, a source distribution of \GenomeTools must be obtained, e.g.\@ via the \GenomeTools home page (\url{http://genometools.org}), and decompressed into a source directory: \begin{lstlisting} $ tar -xzvf genometools-X.X.X.tar.gz $ cd genometools-X.X.X \end{lstlisting} Where \lstinline!X.X.X! denotes the desired gt version. Then, it suffices to call \lstinline!make! to compile the source using the provided makefile. It is recommended to use the 64bit-version of the \GenomeTools executable if your system supports this. Pass the option \lstinline!64bit=yes! to enable 64 bit support. The option \lstinline!amalgamation=yes! allows the compiler to use better optimization. \begin{lstlisting} $ make 64bit=yes amalgamation=yes \end{lstlisting} After successful compilation, the \GenomeTools executable containing \Gdiff is available in the \File{bin} subfolder of the root directory of the uncompressed source. It can then be installed for system-wide use as follows (do this as root): \begin{lstlisting} $ make 64bit=yes amalgamation=yes install \end{lstlisting} Make sure to use the same options as for the compilation step when using the install target! If a \texttt{prefix=} option is appended to this line, a custom directory can be specified as the installation target directory, e.g.\@ \begin{lstlisting} $ make 64bit=yes amalgamation=yes install prefix=/home/user/gt \end{lstlisting} will install the \Gt binary in the \File{/home/user/gt/bin} directory. Please also consult the \File{README} and \File{INSTALL} files in the root directory of the uncompressed source tree for more information and troubleshooting advice. \section{Usage} \subsection{\Gdiff command line options} Since \Gdiff is part of \GenomeTools, it is invoked as follows: \texttt{gt genomediff [{\footnotesize options}] ({\small INDEX} | {\footnotesize -indexname} \textit{\footnotesize NAME} {\small SEQFILE SEQFILE [\ldots])}} where \File{INDEX} is the path without file extension of an encoded sequence containing the genomes to be compared and \Showoptionarg{NAME} is a name for an encoded sequence to be built from the given \texttt{\small SEQFILES}. A short description of all possible options is given in Table \ref{tab:gdopts}. \begin{table}[hbpt] \centering \caption{\Gdiff{} command line options} \begin{footnotesize} \label{tab:gdopts} \begin{tabular}{lp{0.6\textwidth}}\hline \Showoptiongroup{Input options} \Showoption{indextype} \Showoptionarg{type} & Specify type of index, one of: \Showoptionarg{esa\textbar{}pck\textbar{}encseq}. Where encseq is an encoded sequence and an enhanced suffix array will be constructed only in memory. default: \Showoptionarg{encseq}\\ \Showoption{unitfile} \Showoptionarg{filename} & Specifies genomic units, see below for description. default: undefined\\ \Showoptiongroup{Output options} \Showoption{indexname} \Showoptionarg{name} & Basename of encseq to construct. default: undefined\\ \Showoptiongroup{ESA options} \Showoption{mirrored} & Virtually append the reverse complement of each sequence default: \Showoptionarg{no}\\ \Showoption{pl} \Showoptionarg{n} & Specify prefix length for bucket sort recommendation: use without argument; then a reasonable prefix length is automatically determined. default: \Showoptionarg{0}\\ \Showoption{dc} \Showoptionarg{n} & Specify difference cover value. default: \Showoptionarg{0}\\ \Showoption{memlimit} \Showoptionarg{n} & Specify maximal amount of memory to be used during index construction (in bytes, the keywords 'MB' and 'GB' are allowed). default: undefined\\ \Showoptiongroup{Miscellaneous options} \Showoption{v} & Be verbose. default: \Showoptionarg{no}\\ \Showoption{help} & Display help for basic options and exit.\\ \Showoption{help+} & Display help for all options and exit.\\ \Showoption{version} & Display version information and exit.\\\hline \end{tabular} \end{footnotesize} \end{table} \begin{lstlisting}[% float=hbpt,% showlines=true,% frame=tb,% caption={Example unitfile: {\small The section '\texttt{units}' is mandatory, '\texttt{genome1/2}' are examples of names, filenames are paths as given on the command line or during index construction.} },% label={code:lua}, language=LUA] units = { genome1 = { "file1.fas", "file2.fas" }, genome2 = { "path/file3.fas", "file4.fas" } } \end{lstlisting} \subsection{Input files} The tool \Gdiff can handle three types of prepared indices. The first is an encoded sequence, which can be prepared by \Encseq. Given an encoded sequence, \Gdiff will build an enhanced suffix array in memory and calculate \Kr using that index. Second is an enhanced suffix array prepared by the tool \Suff (see \texttt{gt suffixerator -help}) and third a compressed FM-index build by the tool \Mki (see \texttt{gt packedindex mkindex -help}. The usage of FM-indices is not recommended, because calculation of \Kr takes significantly longer. Another way is to give the names of sequence files directly. Option \Showoption{-indexname} is mandatory in this case. The given name will be used to store an encoded sequence on disk. File format can be any sequence format supported by \GenomeTools. Either way, each given sequence file will be regarded as one genomic unit, regardless of the number of sequences inside that file. To give the genomic units other names than the filenames or to combine files to single genomic units one can give a unitfile with option \Showoption{-unitfile}. The format of an example unitfile is shown in Listing \ref{code:lua}. \subsection{Output} The output on the standard output stream consists of a line with the number of genomes or units that were compared. It is followed by a quadratic matrix of pairwise distances where each line consists of a file- or unitname and tabulator separated distance values. Depending on the options of the \Gt call there can be additional output where each line is prefixed by '\texttt{\# }' and additional output prefixed by'\texttt{debug: }' on the standard error stream. \section{Example} This section describes two example scenarios, the first being the comparison of multiple genomes organised in separate multiple \FastA-files and the second being the comparison of two genomes consisting of multiple files each. \subsection{Compare genomes in separate files} Consider three files \File{genome1.fas}, \File{genome2.fas} and \File{genome3.fas} each of which could contain multiple \FastA entries. Our machine has 2\,GiB RAM. Assuming the index construction would need 5\,GiB, we need to split it in at least three parts of equal size or restrict maximal memory requirements. The simplest way to calculate the distance matrix for these three genomes would be to call: \begin{lstlisting} gt genomediff -indexname 3genomes \ -memlimit 1500MB \ genome1.fas genome2.fas genome3.fas \end{lstlisting} \Showoption{-memlimit} should be reasonable less than available main memory. This will output the distance matrix on the terminal and store an encoded sequence with basename \File{3genomes} in the current directory. In order to save the results to a file use terminal redirection: \lstinline!gt genomediff ... > outfile!. The file \File{outfile} might look like this: \begin{verbatim} 3 genome1.fas 0.000000 0.115125 0.267473 genome2.fas 0.115125 0.000000 0.293082 genome3.fas 0.267473 0.293082 0.000000 \end{verbatim} This tabulator separated table can be used for example with \textit{Phylip} or \textit{R} to calculate a phylogenetic tree. Another way to calculate the same distances if an enhanced suffix array of the given files with name \File{3genomes\_idx} already exists on disk would be like this: \begin{lstlisting} gt genomediff -indextype esa 3genomes_idx > outfile \end{lstlisting} To reuse an existing encoded sequence just give the basename of it: \begin{lstlisting} gt genomediff 3genomes > outfile \end{lstlisting} \subsection{Compare two genomes in multiple files} Assume we have two genomes that consist of multiple chromosomes in separate files. For example, genome1 consists of \File{g1\_chr1.fas} and \File{g1\_chr2.fas} while the two files for genome2 are named accordingly. The unitfile could be organized like this: \begin{lstlisting}[language=lua] units = { genome1 = { "g1_chr1.fas", "g1_chr2.fas" }, genome2 = { "g2_chr1.fas", "g2_chr2.fas" } } \end{lstlisting} The name of the unitfile in our example will be \File{units}. Now we could call \Gdiff like this: \begin{lstlisting} gt genomediff -indexname 2genomes \ -unitfile units \ g1_chr1.fas g1_chr2.fas g2_chr1.fas g2.chr2.fas > output \end{lstlisting} File \File{output} could look like this: \begin{verbatim} 2 genome1 0.000000 0.115125 genome2 0.115125 0.000000 \end{verbatim} \section*{Bibliography} \bibliographystyle{unsrt} \bibliography{gtmanuals} \end{document} % vim:spell spelllang=en_gb genometools-1.5.1/doc/manuals/genomediff.tex.latexmain000066400000000000000000000004011211610345200230520ustar00rootroot00000000000000let g:Tex_ProjectSourceFiles = '' let g:Tex_Com_Gdiff = "\\Gdiff<++>" let g:Tex_Com_Encseq = "\\Encseq<++>" let g:Tex_Com_Suff = "\\Suff<++>" let g:Tex_Com_Mki = "\\Mki<++>" let g:Tex_Com_Gt = "\\Gt<++>" let g:Tex_Com_Kr = "\\Kr<++>" " vim:tw=0:syntax=vim genometools-1.5.1/doc/manuals/gtmanuals.bib000066400000000000000000000147201211610345200207260ustar00rootroot00000000000000% This file was created with JabRef 2.6. % Encoding: ISO8859_1 @MISC{oai:CiteSeerPSU:481302, author = {Paolo Ferragina and Giovanni Manzini}, title = {Opportunistic Data Structures with Applications}, month = sep # {~03}, year = {2000}, abstract = {In this paper we address the issue of compressing and indexing data. We devise a data structure whose space occupancy is a function of the entropy of the underlying data set. We call the data structure opportunistic since its space occupancy is decreased when the input is compressible and this space reduction is achieved at no significant slowdown in the query performance. More precisely, its space occupancy is optimal in an information-content sense because a text T [1, u] is stored using O(H k (T )) + o(1) bits per input symbol in the worst case, where H k (T ) is the kth order empirical entropy of T (the bound holds for any fixed k). Given an arbitrary string P [1; p], the opportunistic data structure allows one to search for the occ occurrences of P in T in O(p + occ log u) time (for any fixed > 0). If data are uncompressible we achieve the best space bound currently known [12]; on compressible data our solution improves the succinct suffix array of [12] and the classical suffix tree and suffix array data structures either in space or in query time or both.}, annote = {Paolo Ferragina (Universita di Pisa); Giovanni Manzini (Universita del Piemonte Orientale);}, bdsk-url-1 = {http://citeseer.ist.psu.edu/481302.html;%20%20%20%20http://butirro.di.unipi.it/FM-index/FM-pages/../../Latex/focs00.ps}, bibsource = {OAI-PMH server at cs1.ist.psu.edu}, citeseer-references = {oai:CiteSeerPSU:227724; oai:CiteSeerPSU:371352; oai:CiteSeerPSU:76182; oai:CiteSeerPSU:104285; oai:CiteSeerPSU:226353; oai:CiteSeerPSU:370410; oai:CiteSeerPSU:460358; oai:CiteSeerPSU:16136; oai:CiteSeerPSU:506611; oai:CiteSeerPSU:1331; oai:CiteSeerPSU:688013; oai:CiteSeerPSU:456171; oai:CiteSeerPSU:161058; oai:CiteSeerPSU:174195}, date-added = {2008-02-20 11:27:59 +0100}, date-modified = {2008-02-20 11:27:59 +0100}, language = {english}, oai = {oai:CiteSeerPSU:481302}, rights = {unrestricted}, url = {http://citeseer.ist.psu.edu/481302.html; http://butirro.di.unipi.it/FM-index/FM-pages/../../Latex/focs00.ps} } @ARTICLE{journals/talg/FerraginaMMN07, author = {Paolo Ferragina and Giovanni Manzini and Veli M{\"a}kinen and Gonzalo Navarro}, title = {Compressed representations of sequences and full-text indexes}, journal = {ACM Transactions on Algorithms}, year = {2007}, volume = {3}, number = {2}, bdsk-url-1 = {http://doi.acm.org/10.1145/1240233.1240243}, bibdate = {2007-10-23}, bibsource = {DBLP, http://dblp.uni-trier.de/db/journals/talg/talg3.html#FerraginaMMN07}, date-added = {2008-02-20 11:28:58 +0100}, date-modified = {2008-02-20 11:28:58 +0100}, url = {http://doi.acm.org/10.1145/1240233.1240243} } @MISC{genometools, author = {Gordon Gremme}, title = {The \textsc{GenomeTools} genome analysis system}, date-added = {2008-02-19 16:32:19 +0100}, date-modified = {2008-02-19 16:45:15 +0100}, note = {\url{http://genometools.org}}, url = {http://genometools.org} } @INPROCEEDINGS{HAU:DOM:WIE:2008, author = {Haubold, Bernhard and Domazet-Loso, Mirjana and Wiehe, Thomas}, title = {An Alignment-Free Distance Measure for Closely Related Genomes}, booktitle = {RECOMB-CG ’08: Proceedings of the international workshop on Comparative Genomics}, year = {2008}, pages = {87-99}, address = {Berlin, Heidelberg}, publisher = {Springer-Verlag}, doi = {http://dx.doi.org/10.1007/978-3-540-87989-3_7}, file = {:/home/willrodt/Documents/Paper/HauDomWie2008.pdf:PDF}, isbn = {978-3-540-87988-6}, location = {Paris, France}, owner = {willrodt}, timestamp = {2011.05.10} } @ARTICLE{HAU:PFA:DOM:WIE:2009, author = {Haubold, B. and Pfaffelhuber, P. and Domazet-Loso, M. and Wiehe, T.}, title = {Estimating Mutation Distances from Unaligned Genomes}, journal = {J. Comput. Biol.}, year = {2009}, volume = {16}, pages = {1487-1500}, month = {"Oct"}, file = {:/home/willrodt/Documents/Paper/HauPfaDomWie2009.pdf:PDF}, owner = {willrodt}, timestamp = {2011.05.10} } @ARTICLE{HAU:REE:PFA:2011, author = {Haubold, Bernhard and Reed, Floyd A. and Pfaffelhuber, Peter}, title = {Alignment-free estimation of nucleotide diversity}, journal = {Bioinformatics}, year = {2011}, volume = {27}, pages = {449-455}, number = {4}, abstract = {Motivation: Sequencing capacity is currently growing more rapidly than CPU speed, leading to an analysis bottleneck in many genome projects. Alignment-free sequence analysis methods tend to be more efficient than their alignment-based counterparts. They may, therefore, be important in the long run for keeping sequence analysis abreast with sequencing.Results: We derive and implement an alignment-free estimator of the number of pairwise mismatches, . Our implementation of , pim, is based on an enhanced suffix array and inherits the superior time and memory efficiency of this data structure. Simulations demonstrate that is accurate if mutations are distributed randomly along the chromosome. While real data often deviates from this ideal, remains useful for identifying regions of low genetic diversity using a sliding window approach. We demonstrate this by applying it to the complete genomes of 37 strains of Drosophila melanogaster, and to the genomes of two closely related Drosophila species, D.simulans and D.sechellia. In both cases, we detect the diversity minimum and discuss its biological implications.Availability: pim is written in standard C and its sources can be downloaded from http://guanine.evolbio.mpg.de/pim/.Contact: haubold@evolbio.mpg.deSupplementary information: Supplementary data are available at Bioinformatics online.}, doi = {10.1093/bioinformatics/btq689}, eprint = {http://bioinformatics.oxfordjournals.org/content/27/4/449.full.pdf+html}, file = {supplement:/home/willrodt/Documents/Paper/HauReePfa2011_supp.pdf:PDF;:/home/willrodt/Desktop/Paper/HauReePfa2011.pdf:PDF}, owner = {willrodt}, timestamp = {2012.01.26}, url = {http://bioinformatics.oxfordjournals.org/content/27/4/449.abstract} } @MISC{gttestdata, title = {\textsc{GenomeTools} test data set}, note = {\url{git://genometools.org/gttestdata.git}}, bdsk-url-1 = {http://www.genometools.org/askgordon}, date-added = {2008-02-19 01:42:22 +0100}, date-modified = {2008-02-19 17:04:35 +0100}, url = {git://genometools.org/gttestdata.git} } genometools-1.5.1/doc/manuals/hop.tex000066400000000000000000000250231211610345200175630ustar00rootroot00000000000000\documentclass[12pt,titlepage]{article} \usepackage[a4paper,top=30mm,bottom=30mm,left=20mm,right=20mm]{geometry} \usepackage{url} \usepackage{alltt} \usepackage{xspace} \usepackage{times} \usepackage{listings} \usepackage{bbm} \usepackage{verbatim} %\usepackage[dvips]{hyperref} \usepackage{optionman} \newcommand{\GenomeTools}{\textit{GenomeTools}\xspace} \newcommand{\Hop}{{HOP}\xspace} \newcommand{\Gtcmd}{\texttt{gt}\xspace} \newcommand{\Hopcmd}{\texttt{gt hop}\xspace} \newcommand{\minlen}{\ell} \title{\Huge{\Hop 1.0:\\ User manual.}\\[3mm] \Large{Reference-based homopolymer error correction.}} \author{\begin{tabular}{c} \textit{Giorgio Gonnella}\\ \textit{Stefan Kurtz}\\ \textit{Michael Beckstette}\\[2cm] Center for Bioinformatics\\ University of Hamburg\\ Bundesstrasse 43\\ 20146 Hamburg (Germany)\\[1cm] \url{gonnella@zbh.uni-hamburg.de}\\ \url{beckstette@zbh.uni-hamburg.de}\\ \url{kurtz@zbh.uni-hamburg.de}\\[1cm] \end{tabular}} \begin{document} \maketitle \section{Introduction} \label{Introduction} \Hop \cite{HOP} is a tool for the correction of homopolymer errors using a reference sequence. Homopolymer errors are particularly frequent in Roche 454 and IonTorrent sequencing data sets. \section{Installation} \Hop is provided as 64-bit binary distributions for Linux and Mac and as source code. The software is available from \url{http://zbh.uni-hamburg.de/hop} and will be included in future releases of \GenomeTools. \subsection{Binary distributions} In the binary distributions, the \texttt{bin} directory contains the \GenomeTools binary (\texttt{bin/gt}). The whole \GenomeTools is compiled into this single binary, including \Hop. On some systems (not MacOS) a statically-linked binary is also available under \texttt{bin/static/gt}. See also the \texttt{README} file. If desired, it may be possible to install the \GenomeTools binary system-wide by following the instructions contained in \texttt{INSTALL} file. \subsection{Source code distribution} The source code for \Hop is written in \texttt{C} and it is based on the \GenomeTools framework \cite{genometools}: as such, it is designed to be compilable on any POSIX-compliant operative systems. The compilation can be done using the \texttt{Makefile} provided with \GenomeTools. From the main directory of the sources, the following will compile \GenomeTools, including \Hop, as a 64bit binary: \begin{footnotesize} \begin{verbatim} > make 64bit=yes amalgamation=yes cairo=no curses=no \end{verbatim} \end{footnotesize} In principle it is possible to compile \Hop as a 32-bit binary, by leaving the \texttt{64bit=yes} flag out, however this is discouraged, if a 64-bit system is available. Furthermore, on some systems or using some particular compilers, it may be necessary to use the \texttt{errorcheck=no} option, if errors deriving from compiler warnings arise during the compilation. \subsection{Checking the installation of \Hop} After downloading \Hop or compiling it from the source code, you will have a single binary named \Gtcmd, comprising \Hop and other tools. \Hop can be executed, entering \texttt{gt hop} from the command line. Thus if everything went fine, and the \GenomeTools binary is in the command line path, the following will output an help text on the available options and command line syntax: \begin{footnotesize} \begin{verbatim} > gt hop -help \end{verbatim} \end{footnotesize} \subsection{External programs necessary for the \Hop pipeline} Besides \Hop you will need a read mapping tool. For our evaluation, we used \textit{bwa} (\url{http://bio-bwa.sourceforge.net/}), either using the aln/samse/sampe pipeline (for shorter reads, such as the IonTorrent reads) or the bwasw tool (for longer reads such as the 454 reads). More information can be obtained in the BWA manual page (\url{http://bio-bwa.sourceforge.net/bwa.shtml}). The output of the mapping tool must be, or must be converted into, in SAM/BAM format. Before feeding it into \Hop, the output must be sorted by reference coordinates. For this purpose, one can use the \textit{samtools} (\url{http://samtools.sourceforge.net/}) \texttt{sort} tool. For more information, see also the samtools manual page (\url{http://samtools.sourceforge.net/samtools.shtml}). \section{Preliminary steps} \subsection{1. Preparing the mapping using BWA and Samtools} \Hop corrects homopolymer errors based on a mapping of the reads to a reference sequence. This must be in SAM/BAM format and sorted by coordinate on the reference. It is usually quite easy to prepare the mapping as required. Say the reads to be corrected are \texttt{f\_reads.fastq} and \texttt{r\_reads.fastq}. Furthermore, the reference for the correction is in a Fasta file \texttt{refseq.fas}. Then, in the following example, the \texttt{bwa} tool will be used for the mapping in paired end mode and the results will be sorted using the \texttt{samtools} (as a side note, some of the commands could be combined using piping for an increased efficiency). \begin{footnotesize} \begin{verbatim} > bwa index refseq.fas > bwa aln -t 4 -o 3 -q 15 -f f_reads.sai refseq.fas f_reads.fastq > bwa aln -t 4 -o 3 -q 15 -f r_reads.sai refseq.fas r_reads.fastq > bwa sampe refseq.fas -f map.sam f_reads.sai r_reads.sai f_reads.fastq r_reads.fastq > samtools view -b -o map.bam -S map.sam > samtools sort map.sam sorted \end{verbatim} \end{footnotesize} The results of this pipeline will be in the \texttt{sorted.bam} BAM file, which will be used as an input mapping file for \Hop. \subsection{2. Preparing the reference sequence} The reference sequence is provided to \Hop in GtEncseq format. Converting a sequence in standard sequence formats such as Fasta into GtEncseq is very easy. The following will convert the sequence in \texttt{refseq.fas} into a GtEncseq (see also \texttt{gt encseq encode -help} for more information): \begin{footnotesize} \begin{verbatim} > gt encseq encode refseq.fas \end{verbatim} \end{footnotesize} If the reference comprises multiple sequences (e.g. contigs, or multiple chromosomes), it is important that the order of the sequences used for the encode step must be the same which is specified in the header of the SAM/BAM input file. This is usually not a problem, expecially if all reference sequences are contained in a single MultiFasta file, which is both used for the mapping tool and the generation of the GtEncseq. \section{Running \Hop} \Hop requires the following input: \begin{itemize} \item the mapping of the reads to the reference (sorted SAM/BAM file) \item the reference sequence (GtEncseq format) \item the uncorrected reads \end{itemize} The user shall choose one of the following correction modes:\\ \texttt{-aggressive}, \texttt{-moderate}, \texttt{-conservative} or \texttt{-expert}. The aggressive, moderate and conservative modes are three presets of different correction thresholds parameters. The aggressive mode will tend to correct more, but will be less precise. The conservative mode is the most precise, although more errors will remain. The expert mode allows to setup the parameters manually. For more information run \texttt{gt hop -help}. The following is an example of correction the reads in \texttt{f\_reads.fastq} and \texttt{r\_reads.fastq} using \Hop and a reference sequence contained in \texttt{refseq.fas}. The \texttt{-moderate} option will be used. \begin{footnotesize} \begin{verbatim} > gt hop -moderate -ref refseq.fas \ -map sorted.bam -reads f_reads.fastq r_reads.fastq \end{verbatim} \end{footnotesize} The output will be in this case in the two files \texttt{hop\_f\_reads.fastq} and \texttt{hop\_r\_reads.fastq}. The prefix added by \Hop (in this case \texttt{hop}, which is the default) can be changed using the \texttt{-outprefix} option. \section{Restricting corrections to coding sequences} If desired, it is possible to restrict corrections to coding sequences only. The idea is that coding sequences tend to be more conserved, thus homopolymer length differences of the reads to the reference are more likely to be errors in corrections. In other words, this will help increasing the precision of the correction (reduce false positives), but of course the overall sensitivity will be reduced, as only errors in coding sequences will be corrected. Currently, restricting to coding sequences is only available if a single reference sequence is used (that is no collection of sequences, such as contigs or multiple chromosomes). We plan to eliminate this limitation in future versions of \Hop. The annotation must be provided in \texttt{GFF} format, version 3. This is a standard annotation format. Furthermore, the annotation must be sorted by coordinate, which can be obtained using the \texttt{gt gff3} tool, using the \texttt{-sort} option. In the following example, the \texttt{refseq.gff} annotation will be used to restrict correction to coding sequences: \begin{footnotesize} \begin{verbatim} > gt gff3 -sort -o sorted.gff refseq.gff > gt hop -moderate -ref refseq.fas -ann sorted.gff \ -map sorted.bam -reads f_reads.fastq r_reads.fastq \end{verbatim} \end{footnotesize} The default behaviour when the \texttt{-ann} option is used, is to limit correction to homopolymers inside the \texttt{CDS} features. However, another feature type can be specified, e.g. \texttt{exon}, using the \texttt{-ft} option of \Hop. \subsection{Troubleshooting} In some cases, the GFF file may be slightly not conforming to the standard or suffer under some problems which disrupts parsing. In these cases, standard POSIX utilities can be sometimes be useful, to obtain a subset of the GFF file, which can be used for \Hop. In the following example, using \texttt{awk} and \texttt{sort}, a sorted subset of the \texttt{refseq.gff} annotation is prepared, and saved as \texttt{cdsonly.gff} which only contains the \texttt{CDS} features: \begin{footnotesize} \begin{verbatim} > echo '##gff-version 3' > cdsonly.gff > awk '$3 == "CDS"' refseq.gff | sort -k4 -n >> cdsonly.gff \end{verbatim} \end{footnotesize} \section{Help from the command line} Using \texttt{gt hop -help} will output more information regarding each command line option. Some command line options are used in \texttt{-expert} mode only. To output help also regarding these options use \texttt{gt hop -help+}. \begin{thebibliography}{1} \bibitem{genometools} Gremme, G. (2011). \newblock The \textsc{GenomeTools} genome analysis system. \url{http://genometools.org}. \bibitem{HOP} Gonnella G and Kurtz S and Beckstette M (2012). \newblock {HOP: a reference-based homopolymer error corrector.} \newblock {\em Submitted\/} \end{thebibliography} \end{document} genometools-1.5.1/doc/manuals/ltrdigest.tex000066400000000000000000000646401211610345200210060ustar00rootroot00000000000000\documentclass[12pt,titlepage]{article} \usepackage[a4paper,top=30mm,bottom=30mm,left=20mm,right=20mm]{geometry} \usepackage[utf8]{inputenc} \usepackage{url} \usepackage{alltt} \usepackage{xspace} \usepackage{times} \usepackage{listings} \usepackage{bbm} \usepackage{verbatim} \usepackage{optionman} \newcommand{\LTRdigest}{\textit{LTRdigest}\xspace} \newcommand{\GenomeTools}{\textit{GenomeTools}\xspace} \newcommand{\Suffixerator}{\textit{Suffixerator}\xspace} \newcommand{\GtLTRdigest}{\texttt{gt ltrdigest}\xspace} \newcommand{\Gt}{\texttt{gt}\xspace} \newcommand{\Gtsuffixerator}{\texttt{gt suffixerator}\xspace} \title{\LTRdigest User's Manual} \author{\begin{tabular}{c} \textit{Sascha Steinbiss}\\ \textit{Ute Willhoeft}\\ \textit{Gordon Gremme}\\ \textit{Stefan Kurtz}\\[1cm] Research Group for Genome Informatics\\ Center for Bioinformatics\\ University of Hamburg\\ Bundesstrasse 43\\ 20146 Hamburg\\ Germany\\[1cm] \url{steinbiss@zbh.uni-hamburg.de}\\[1cm] \begin{tabular}{p{0.8\textwidth}} In any documentation or publication about research using \LTRdigest please cite the following paper:\\[5mm] S.~Steinbiss, U.~Willhoeft, G.~Gremme and S.~Kurtz. Fine-grained annotation and classification of \emph{de novo} predicted LTR retrotransposons. \emph{Nucleic Acids Research} 2009, 37(21):7002--7013\\[1mm] \url{http://nar.oxfordjournals.org/cgi/content/full/37/21/7002} \end{tabular} \end{tabular}} \begin{document} \maketitle \section{Introduction} \label{Introduction} This document describes \LTRdigest , a software tool for identification and annotation of characteristic sequence features of LTR retrotransposons in predicted candidates, like those reported by\emph{LTRharvest}~\cite{EKW07}. In particular, \LTRdigest can be used to find \begin{itemize} \item protein domains, \item polypurine tracts (PPT) and \item primer binding sites (PBS) \end{itemize} inside a sequence region predicted to be a LTR retrotransposon. For this identification, \LTRdigest utilises a number of algorithms to create an annotation based on user-supplied constraints. For example, length and position values for possible features can be extensively parameterised, as can be algorithmic parameters like alignment scores and cut-off values. \LTRdigest computes the boundaries and attributes of the features that fit the user-supplied model and outputs them in GFF3 format~\cite{gff3} (in addition to the existing LTR retrotransposon annotation), as well as the corresponding sequences in multiple FASTA format. In addition, a tab-separated summary file is created that can conveniently and quickly browsed for results. \LTRdigest is written in C and it is based on the \GenomeTools library~\cite{genometools}. It is called as part of the single binary named \Gt. The source code can be compiled on 32-bit and 64-bit platforms without making any changes to the sources. It incorporates HMMER~\cite{hmmer}, a popular and widely used profile hidden Markov model package that is used for identification of protein domains, for example using pHMMs taken from the Pfam~\cite{pfam} database. The protein domain search is implemented to be run in a multi-threaded fashion, thus making use of modern multi-core computer systems. \section{Building \emph{LTRdigest}} \label{Building} As \LTRdigest is part of the \GenomeTools software suite, a source distribution of \GenomeTools must be obtained, e.g.\@ via the \GenomeTools home page (\url{http://genometools.org}), and decompressed into a source directory: \begin{verbatim} $ tar -xzvf genometools-X.X.X.tar.gz $ cd genometools-X.X.X \end{verbatim} Then, it suffices to call \texttt{make} to compile the source. To enable protein domain search functionality, please also append the \texttt{with-hmmer=yes} option to the \texttt{make} call. This option will make sure that a HMMER source package is downloaded and compiled along with the \Gt binary. Note that the \texttt{wget} executable must be available in the current PATH to do so (alternatively, you can download HMMER 2.3.2 manually from \texttt{ftp://selab.janelia.org/pub/software/hmmer/CURRENT/} and untar it in the \texttt{src/external/} subdirectory). \begin{verbatim} $ make with-hmmer=yes \end{verbatim}%$ If the \texttt{with-hmmer} option is not specified or set to \texttt{no}, protein domain finding functionality will be missing from the \LTRdigest program. If the build process reports an error due to an unavailable Cairo library, also append the \texttt{cairo=no} option to build the \Gt binary without Cairo support. This has no influence on the function of \LTRdigest . To enable multithreading support (that is, to speed up protein domain search by searching for multiple pHMMs at once), please also specify the \texttt{threads=yes} option to the \texttt{make} call: \begin{verbatim} $ make with-hmmer=yes threads=yes \end{verbatim}%$ After successful compilation, the \GenomeTools executable containing \LTRdigest can then be installed for system-wide use as follows: \begin{verbatim} $ make install \end{verbatim}%$ If a \texttt{prefix=} option is appended to this line, a custom directory can be specified as the installation target directory, e.g.\@ \begin{verbatim} $ make install prefix=/home/user/gt \end{verbatim}%$ %$ will install the \Gt binary in the \texttt{/home/user/gt/bin} directory. Please also consult the \texttt{README} and \texttt{INSTALL} files in the root directory of the uncompressed source tree for more information and troubleshooting advice. \section{Usage} \label{Usage} Some text is highlighted by different fonts according to the following rules. \begin{itemize} \item \texttt{Typewriter font} is used for the names of software tools. \item \texttt{\small{Small typewriter font}} is used for file names. \item \begin{footnotesize}\texttt{Footnote sized typewriter font} \end{footnotesize} with a leading \begin{footnotesize}\texttt{'-'}\end{footnotesize} is used for program options. \item \Showoptionarg{small italic font} is used for the argument(s) of an option. \end{itemize} \subsection{\LTRdigest command line options} Since \LTRdigest is part of \Gt, \LTRdigest is called as follows. \GtLTRdigest $[$\emph{options}$]$ \Showoptionarg{GFF3\_file} \Showoptionarg{indexname} where \emph{GFF3\_file} denotes the GFF3 input file and \emph{indexname} the name of an encoded sequence as created by the \Gtsuffixerator tool. An overview of all possible options with a short one-line description of each option is given in Table \ref{overviewOpt}. They can also be displayed when invoking \LTRdigest with the option \Showoption{help} or \Showoption{help+}. All options can be specified only once. To run the protein domain search in a parallel fashion, use the \Showoption{j} parameter to \texttt{gt} to specify the number of concurrent threads to use: \texttt{gt} \Showoption{j} 3 \texttt{ltrdigest} $[$\emph{options}$]$ \Showoptionarg{GFF3\_file} \Showoptionarg{indexname} \begin{table}[htbp] \caption{Overview of the \LTRdigest options sorted by categories.} \begin{footnotesize} \[ \renewcommand{\arraystretch}{0.89} \begin{tabular}{ll}\hline \Showoptiongroup{Input options} \emph{GFF3\_file}& specify the path to the GFF3 input file \\ \emph{indexname}& specify the path to the input sequences \\ \Showoptiongroup{Output options} \Showoption{outfileprefix}& specify prefix for sequence and tabular output files \\ \Showoption{o}& specify file to output result GFF3 into \\ \Showoption{gzip}& gzip-compress GFF3 output file specified by \Showoption{o} \\ \Showoption{bzip2}& bzip2-compress GFF3 output file specified by \Showoption{o} \\ \Showoption{force}& force output file to be overwritten \\ \Showoption{aaout}& output amino acid sequences for protein domain hits \\ \Showoption{aliout}& output HMMER amino acid alignments \\ \Showoption{seqnamelen}& set maximal length of sequence names in output FASTA headers\\ & (e.g.\@ for clustalw or similar tools) \\ \Showoptiongroup{PPT options} \Showoption{pptlen}& specify a range of acceptable PPT lengths \\ \Showoption{uboxlen}& specify a range of acceptable U-box lengths \\ \Showoption{pptradius}& specify region around 3' LTR beginning to search for PPT \\ \Showoption{pptrprob}& purine emission probability inside PPT \\ \Showoption{pptyprob}& pyrimidine emission probability inside PPT \\ \Showoption{pptaprob}& background A emission probability outside PPT \\ \Showoption{pptcprob}& background C emission probability outside PPT \\ \Showoption{pptgprob}& background G emission probability outside PPT \\ \Showoption{ppttprob}& background T emission probability outside PPT \\ \Showoption{pptuprob}& U/T emission probability inside U-box \\ \Showoptiongroup{PBS options} \Showoption{trnas}& tRNA library in multiple FASTA format \\ \Showoption{pbsalilen}& specify a range of acceptable PBS lengths \\ \Showoption{pbsoffset}& specify a range of acceptable PBS start distances from 3' end of 5' LTR \\ \Showoption{pbstrnaoffset}& specify a range of acceptable tRNA/PBS alignment offsets from tRNA 3' end \\ \Showoption{pbsmaxedist}& specify the maximal allowed unit edit distance in tRNA/PBS alignment \\ \Showoption{pbsradius}& specify region around 5' LTR end to search for PBS \\ \Showoptiongroup{Protein domain search options} \Showoption{hmms}& specify a list of pHMMs for domain search in HMMER2 format \\ \Showoption{pdomevalcutoff}& specify an E-value cutoff for pHMM search \\ \Showoption{maxgaplen}& maximum allowed chaining gap size between fragments (in amino acids) \\ \Showoptiongroup{Alignment options} \Showoption{pbsmatchscore}& specify matchscore for PBS/tRNA Smith-Waterman alignment \\ \Showoption{pbsmismatchscore}& specify mismatchscore for PBS/tRNA Smith-Waterman alignment \\ \Showoption{pbsinsertionscore}& specify insertionscore for PBS/tRNA Smith-Waterman alignment \\ \Showoption{pbsdeletionscore}& specify deletionscore for PBS/tRNA Smith-Waterman alignment \\ \Showoptiongroup{Miscellaneous options} \Showoption{v}& verbose mode \\ \Showoption{help}& show basic options \\ \Showoption{help+}& show basic and extended options \\ \hline \end{tabular} \] \end{footnotesize} \label{overviewOpt} \end{table} \newpage %%%% \subsection{Input parameters} \emph{GFF3\_file}\\ specifies the path to the GFF3 input file. It has to include at least position annotation for the LTR retrotransposon itself (\texttt{LTR\_retrotransposon} type) and the predicted LTRs (\texttt{long\_terminal\_repeat} type) because this information is needed to locate the favored positions of the features in question. The GFF3 file must also be sorted by position, which can be done using \GenomeTools :\\ \texttt{gt gff3} \Showoption{sort} \Showoptionarg{unsorted\_gff3\_file} \texttt{\symbol{62}} \Showoptionarg{sorted\_gff3\_file}\\ \emph{indexname}\\ specifies the index name of an encoded sequence file containing the sequences the GFF3 coordinates refer to. For each sequence in the encoded sequence file given as the second parameter, there must exist a sequence region in the GFF3 file named `\texttt{seq}\textit{i}' where $i$ is the (zero-based) index number of the corresponding sequence in the encoded sequence. For instance, all GFF3 feature coordinates for features on the first sequence in the index file must be on sequence region \texttt{seq0}, and so on. An encoded sequence can be created from a FASTA, GenBank or EMBL format file using the \Gtsuffixerator command:\\ \Gtsuffixerator \Showoption{tis} \Showoption{des} \Showoption{dna} \Showoption{ssp} \Showoption{db} \Showoptionarg{sequencefile} \Showoption{indexname} \Showoptionarg{indexname} %%%% \subsection{Output options} Results are reported in GFF3 format on stdout and can easily be written to a file using the notation \texttt{\symbol{62}} \Showoptionarg{GFF3\_resultfile} as in the following example: \GtLTRdigest $[$\emph{options}$]$ \Showoptionarg{GFF3\_file} \Showoptionarg{indexname} \texttt{\symbol{62}} \Showoptionarg{GFF3\_resultfile} \begin{Justshowoptions} \Option{outfileprefix}{\Showoptionarg{prefix}}{ If this option is given, a number of files containing further information will be created during the \LTRdigest\ run: \begin{itemize} \item \texttt{$<$prefix$>$\_tabout.csv} contains a tab-separated summary of the results that can, for example, be opened in a spreadsheet software or processed by a script. Each column is described in the file's header line and each row describes exactly one LTR retrotransposon candidate. \item \texttt{$<$prefix$>$\_conditions.csv} contains information about the parameters used in the current run for documentation purposes. \item \texttt{$<$prefix$>$\_pbs.fas} contains the PBS sequences identified in the current run in multiple FASTA format. \item \texttt{$<$prefix$>$\_ppt.fas} contains the PPT sequences identified in the current run in multiple FASTA format. \item The files \texttt{$<$prefix$>$\_5ltr.fas} and \texttt{$<$prefix$>$\_3ltr.fas} contain the 5' and 3' LTR sequences identified in the current run in multiple FASTA format. Please note: If the direction of the retrotransposon could be predicted, the files will contain the corresponding 3' and 5' LTR sequences. If no direction could be predicted, forward direction with regard to the original sequence will be assumed, i.e. the 'left' LTR will be considered the 5' LTR. \item Additionally, one \texttt{$<$prefix$>$\_pdom\_$<$domainname$>$.fas} file will be created per protein domain model given. This file contains the FASTA DNA sequences of the HMM matches to the LTR retrotransposon candidates. \end{itemize} In FASTA output files, each FASTA header contains position and sequence region information to match the hit to the corresponding LTR retrotransposon. } \Option{aaout}{\Showoptionarg{yes/no}}{ If this option is set to \Showoptionarg{yes}, one \texttt{$<$prefix$>$\_pdom\_$<$domainname$>$\_aa.fas} file will be created per protein domain model given. This file contains the (concatenated) FASTA amino acid sequences of the HMM matches to the LTR retrotransposon candidates. } \Option{aliout}{\Showoptionarg{yes/no}}{ If this option is set to \Showoptionarg{yes}, one \texttt{$<$prefix$>$\_pdom\_$<$domainname$>$.ali} file will be created per protein domain model given. This file contains alignment information for all matches to of the given protein domain model to the translations of all candidate. } \end{Justshowoptions} %%%% \subsection{PPT options} \begin{Justshowoptions} \Option{pptlen}{\Showoptionarg{$L_{min}$} \Showoptionarg{$L_{max}$}}{ Specify the minimum and maximum allowed lengths for PPT predictions. If a purine-rich region shorter than \Showoptionarg{$L_{min}$} or longer than \Showoptionarg{$L_{max}$} is found, it will be skipped. \\ \Showoptionarg{$L_{min}$} and \Showoptionarg{$L_{min}$} have to be positive integers. If this option is not selected, then \Showoptionarg{$L_{min}$} is set to $8$, \Showoptionarg{$L_{max}$} to 30. } \Option{uboxlen}{\Showoptionarg{$L_{min}$} \Showoptionarg{$L_{max}$}}{ Specify the minimum and maximum allowed lengths for U-box predictions. If a T-rich region preceding a PPT shorter than \Showoptionarg{$L_{min}$} or longer than \Showoptionarg{$L_{max}$} is found, it will be skipped.\\ \Showoptionarg{$L_{min}$} and \Showoptionarg{$L_{min}$} have to be positive integers. If this option is not selected, then \Showoptionarg{$L_{min}$} is set to $3$, \Showoptionarg{$L_{max}$} to 30. } \Option{pptradius}{\Showoptionarg{$r$}}{ Specify the area around the 3' LTR beginning ($l_{s}$) to be searched for PPTs, in other words, define the search interval $[l_{s}-r, l_{s}+r]$.\\ \Showoptionarg{$r$} has to be a positive integer. If this option is not selected, then \Showoptionarg{$r$} is set to 30. } \Option{pptrprob}{\Showoptionarg{$p_R$}}{ Specify the emission probability of a purine base (\texttt{A}/\texttt{G}) inside a PPT. This value must be a valid probability value ($0\leq p_R \leq 1$). If this option is not set, then \Showoptionarg{$p_R$} is set to 0.97. } \Option{pptyprob}{\Showoptionarg{$p_Y$}}{ Specify the emission probability of a pyrimidine base (\texttt{T}/\texttt{C}) inside a PPT. This value must be a valid probability value ($0\leq p_Y \leq 1$). If this option is not set, then \Showoptionarg{$p_Y$} is set to 0.03. } \Option{pptaprob}{\Showoptionarg{$p_A$}}{ Specify the background emission probability of an \texttt{A} base outside of PPT and U-box regions. This value must be a valid probability value ($0\leq p_A \leq 1$). If this option is not set, then \Showoptionarg{$p_A$} is set to 0.25. } \Option{pptcprob}{\Showoptionarg{$p_C$}}{ Specify the background emission probability of a \texttt{C} base outside of PPT and U-box regions. This value must be a valid probability value ($0\leq p_C \leq 1$). If this option is not set, then \Showoptionarg{$p_C$} is set to 0.25. } \Option{pptgprob}{\Showoptionarg{$p_G$}}{ Specify the background emission probability of a \texttt{G} base outside of PPT and U-box regions. This value must be a valid probability value ($0\leq p_G \leq 1$). If this option is not set, then \Showoptionarg{$p_G$} is set to 0.25. } \Option{ppttprob}{\Showoptionarg{$p_T$}}{ Specify the background emission probability of a \texttt{T} base outside of PPT and U-box regions. This value must be a valid probability value ($0\leq p_T \leq 1$). If this option is not set, then \Showoptionarg{$p_T$} is set to 0.25. } \end{Justshowoptions} Note that $\sum_{x \in \left\{A,C,G,T\right\}} p_x = 1$ must hold if the \Showoption{ppt\{a,c,g,t\}prob} options are used. \begin{Justshowoptions} \Option{pptuprob}{\Showoptionarg{$p_U$}}{ Specify the emission probability of a thymine base (\texttt{T}) inside a U-box. This value must be a valid probability value ($0 d$ will be skipped. Set this to 0 to accept exact matches only. It is also possible to fine-tune the results by adjusting the match/mismatch/indelscores used in the Smith-Waterman alignment (see below).\\ \Showoptionarg{$d$} has to be a positive integer. If this option is not selected, then \Showoptionarg{$d$} is set to 1. } \Option{pbsradius}{\Showoptionarg{$r$}}{ Specify the area around the 5' LTR end ($l_{e}$) to be searched for a PBS, in other words, define the search interval $[l_{e}-r, l_{e}+r]$.\\ \Showoptionarg{$r$} has to be a positive integer. If this option is not selected, then \Showoptionarg{$r$} is set to 30. } \Option{pbsmatchscore}{\Showoptionarg{$score_m$}}{ Specify the match score used in the PBS/tRNA Smith-Waterman alignment. Lower this value to discourage matches, increase this value to prefer matches.\\ \Showoptionarg{$score_m$} has to be an integer. If this option is not selected, then \Showoptionarg{$score_m$} is set to 5. } \Option{pbsmismatchscore}{\Showoptionarg{$score_{mm}$}}{ Specify the mismatch score used in the PBS/tRNA Smith-Waterman alignment. Lower this value to discourage mismatches, increase this value to prefer mismatches.\\ \Showoptionarg{$score_{mm}$} has to be an integer. If this option is not selected, then \Showoptionarg{$score_{mm}$} is set to -10. } \Option{pbsdeletionscore}{\Showoptionarg{$score_d$}}{ Specify the deletion score used in the PBS/tRNA Smith-Waterman alignment. Lower this value to discourage deletions, increase this value to prefer deletions.\\ \Showoptionarg{$score_d$} has to be an integer. If this option is not selected, then \Showoptionarg{$score_d$} is set to -20. } \Option{pbsinsertionscore}{\Showoptionarg{$score_i$}}{ Specify the insertion score used in the PBS/tRNA Smith-Waterman alignment. Lower this value to discourage insertions, increase this value to prefer insertions.\\ \Showoptionarg{$score_i$} has to be an integer. If this option is not selected, then \Showoptionarg{$score_i$} is set to -20. } \end{Justshowoptions} \subsection{Protein domain search options} \begin{Justshowoptions} \Option{hmms}{\Showoptionarg{$hmmfile_1, hmmfile_2, \dots, hmmfile_n$}}{ Specify a list of pHMM files in HMMER2 format. The pHMMs must be defined for the amino acid alphabet and follow the Plan7 specification. For example, pHMMs defining protein domains taken from the Pfam database can be used here. Every file must exist and be readable, otherwise an error is reported. If this option is not given, protein domain searching is skipped altogether. Please note that shell globbing can be used here to specify large numbers of files, e.g.\@ by using wildcards.} \Option{pdomevalcutoff}{\Showoptionarg{$c$}}{ Specify the E-value cutoff for HMMER searches. All hits that fail to meet this maximal e-value requirement are discarded.\\ \Showoptionarg{$c$} has to be a probability ($0 \leq c \leq 1$). If this option is not selected, then \Showoptionarg{$c$} is set to $10^{-6}$. } \end{Justshowoptions} \section{Example} This section describes an example session with \LTRdigest . For simplicity, we assume that a \emph{LTRharvest} run on a genome has already been performed and produced a \texttt{ltrs.gff3} file containing the basic GFF3 annotation describing LTR positions. The enhanced suffix array (ESA) index, any sequence output or the tabular standard output from \emph{LTRharvest} will not be needed. Instead, we require an encoded sequence representation of the original input sequence, in this example called \texttt{genome.fas}. This can be created using the \GenomeTools \Gtsuffixerator tool as follows: \texttt{gt suffixerator -tis -des -dna -ssp -db genome.fas -indexname genome.fas} This step creates additional files with the suffixes \texttt{.al1}, \texttt{.des}, \texttt{.esq}, \texttt{.prj} and \texttt{.ssp} in the sequence file directory. We will also assume that the HMM files to be used are called \texttt{HMM1.hmm}, \texttt{HMM2.hmm} and \texttt{HMM3.hmm}, we will be using a tRNA library called \texttt{tRNA.fas}, and we are running \LTRdigest on a dual-core system. We also want to restrict the PBS offset from the LTR end to a maximum of 3 nucleotides, while we want the PPT length to be at least 10 nucleotides. Finally, we want all output such as sequences written to files beginning with ``mygenome-ltrs''. First, sort the GFF3 output by position: \\[0.5cm] \texttt{gt gff3 -sort ltrs.gff3 $>$ ltrs\_sorted.gff3} \\[0.5cm] Then, the \LTRdigest run can be started with the following command line using the parameters above: \\[0.5cm] \texttt{gt -j 2 ltrdigest -pptlen 10 30 -pbsoffset 0 3 -trnas tRNA.fas \\-hmms HMM*.hmm -outfileprefix mygenome-ltrs ltrs\_sorted.gff3 genome.fas $>$ ltrs\_after\_ltrdigest.gff3} No screen output (except possible error messages) is produced since the GFF3 output on stdout is redirected to a file. Additionally, the files \texttt{mygenome\--ltrs\_conditions.csv}, \texttt{mygenome\--ltrs\_3ltr.fas}, \texttt{mygenome\--ltrs\_5ltr.fas}, \texttt{mygenome\--ltrs\_ppt.fas}, \texttt{mygenome\--ltrs\_pbs.fas}, \texttt{mygenome-\-ltrs\_tabout.csv} and one FASTA file for each of the HMM models will be created and updated during the computation. As the files are buffered, it may take a while before first output to these files can be observed. The calculation may be restarted with the same or changed parameters afterwards, overwriting the output files in the process. If it is desired to keep sequences etc. from each run, keep in mind to assign specific \texttt{-outfileprefix} values to each run. \bibliographystyle{unsrt} \begin{thebibliography}{1} \bibitem{EKW07} D.~Ellinghaus, S.~Kurtz, and U.~Willhoeft. \newblock \emph{LTRharvest}, an efficient and flexible software for de novo detection of \normalsize{LTR} retrotransposons. \newblock {\em BMC Bioinformatics} 9:18, 2008. \bibitem{gff3} L.~Stein. \newblock Generic Feature Format Version 3. \url{http://www.sequenceontology.org/gff3.shtml}. \bibitem{genometools} G.~Gremme. \newblock GenomeTools. \url{http://genometools.org}. \bibitem{pfam} R.D.~Finn, J.~Mistry, B.~Schuster-Boeckler, S.~Griffiths-Jones, V.~Hollich, T.~Lassmann,S.~Moxon, M.~Marshall, A.~Khanna, R.~Durbin, S.R.~Eddy, E.L.L.~Sonnhammer and A.~Bateman. \newblock Pfam: clans, web tools and services. \newblock {\em Nucleic Acids Research} (Database Issue), 34:D247-D251, 2006. \bibitem{hmmer} S.R.~Eddy. \newblock HMMER: Biosequence analysis using profile hidden Markov models. \url{http://hmmer.janelia.org}. \end{thebibliography} \end{document} genometools-1.5.1/doc/manuals/ltrharvest.tex000066400000000000000000000754011211610345200212000ustar00rootroot00000000000000\documentclass[12pt,titlepage]{article} \usepackage[a4paper,top=30mm,bottom=30mm,left=20mm,right=20mm]{geometry} \usepackage{url} \usepackage{alltt} \usepackage{xspace} \usepackage{times} \usepackage{listings} \usepackage{bbm} \usepackage{verbatim} %\usepackage[dvips]{hyperref} \usepackage{optionman} \newcommand{\LTRharvest}{\textit{LTRharvest}\xspace} \newcommand{\GenomeTools}{\textit{GenomeTools}\xspace} \newcommand{\Suffixerator}{\textit{Suffixerator}\xspace} \newcommand{\Gtltrharvest}{\texttt{gt ltrharvest}\xspace} \newcommand{\Gt}{\texttt{gt}\xspace} \newcommand{\Gtsuffixerator}{\texttt{gt suffixerator}\xspace} \title{\LTRharvest\\ a manual} \author{\begin{tabular}{c} \textit{David Ellinghaus}\\ \textit{Stefan Kurtz}\\ \textit{Ute Willhoeft}\\[1cm] Research Group for Genomeinformatics\\ Center for Bioinformatics\\ University of Hamburg\\ Bundesstrasse 43\\ 20146 Hamburg\\ Germany\\[1cm] \url{willhoeft@zbh.uni-hamburg.de}\\[1cm] \begin{tabular}{p{0.8\textwidth}} In any documentation or publication about research using \LTRharvest please cite the following paper:\\[5mm] D.~Ellinghaus, S.~Kurtz, and U.~Willhoeft. \LTRharvest, an efficient and flexible software for de novo detection of LTR retrotransposons, BMC Bioinformatics 2008, 9:18\\[1mm] \url{http://www.biomedcentral.com/1471-2105/9/18} \end{tabular} \end{tabular}} \begin{document} \maketitle \section{Introduction} \label{Introduction} This document describes \LTRharvest \cite{LTRharvesturl}, a software tool for \textit{de novo} predictions of LTR retrotransposons in genomic sequences~\cite{EKW07}. \LTRharvest computes boundary positions of potential LTR retrotransposons on a persistent index structure of the genomic target sequence, the \textit{enhanced suffix array} \cite{AKO04}. Usually the genomic target sequence is a complete chromosomal DNA sequence in FASTA format. Nevertheless, every DNA sequence in (multiple) FASTA format can be passed to the software. For the prediction, \LTRharvest implements several filters. These are consecutively applied on the sequence data to reject candidates, which are not conform with sequence, length or distance features of LTR retrotransposons. Since these features are mostly species-specific, every filter can be switched on or switched off and is free for parameterisation of a certain LTR retrotransposon model. \LTRharvest is written in \texttt{C} and it is based on the \GenomeTools library \cite{genometools}. \LTRharvest is called as part of the single binary named \Gt. %The source code is single threaded and can be compiled on 32-bit and 64-bit %platforms without making any changes to the sources. \LTRharvest runs on an enhanced suffix array index, which is stored on files. This index needs to be constructed by the program \texttt{suffixerator}, which is also part of the \GenomeTools binary \Gt. \section{Usage} \label{Usage} Some text is highlighted by different fonts according to the following rules. \begin{itemize} \item \texttt{Typewriter font} is used for the names of software tools. \item \texttt{\small{Small typewriter font}} is used for file names. \item \begin{footnotesize}\texttt{Footnote sized typewriter font} \end{footnotesize} with a leading \begin{footnotesize}\texttt{'-'}\end{footnotesize} is used for program options. \item \Showoptionarg{small italic font} is used for the argument(s) of an option. \end{itemize} \subsection{The options of \LTRharvest} \label{Overview} Since \LTRharvest is part of \Gt, \LTRharvest is called as follows. \Gtltrharvest \Showoption{index} \Showoptionarg{indexname} $[$\emph{options}$]$ where \Showoptionarg{indexname} denotes the enhanced suffix array index of the target sequence(s) constructed by the program \Suffixerator. An overview of all possible options with a short one-line description of each option is given in Table \ref{overviewOpt}. All options can be specified only once. \begin{table}[htbp] \caption{Overview of the \LTRharvest options sorted by categories.} \begin{footnotesize} \[ \renewcommand{\arraystretch}{0.89} \begin{tabular}{ll}\hline \Showoptiongroup{Input options} \Showoption{index}& specify the name of the enhanced suffix array index \\ \Showoption{range}& specify the range in the input sequences to be searched for LTR retrotransposon candidates \\ \Showoptiongroup{Output options} \Showoption{out}& specify outputfilename for predictions in multiple FASTA format \\ \Showoption{gff3}& specify outputfilename for predictions in GFF3 format \\ \Showoption{outinner}& specify outputfilename for multiple FASTA file of the inner regions of predictions \\ \Showoptiongroup{Filter options} \Showoption{seed}& specify minimum seed length for exact maximal repeats \\ \Showoption{minlenltr}& specify minimum length for each LTR \\ \Showoption{maxlenltr}& specify maximum length for each LTR \\ \Showoption{mindistltr}& specify minimum distance of LTR startpositions \\ \Showoption{maxdistltr}& specify maximum distance of LTR startpositions \\ \Showoption{similar}& specify similaritythreshold in range [1..100\%] \\ \Showoption{mintsd}& specify minimum length for each TSD \\ \Showoption{maxtsd}& specify maximum length for each TSD (requires \Showoption{mintsd}) \\ \Showoption{motif}& specify palindromic motif consisting of 2 nucleotides startmotif + 2 nucleotides endmotif, \\ \Showoption{motifmis}& specify maximum number of mismatches in motif (requires \Showoption{motif}) \\ \Showoption{vic}& specify the number of nucleotides (to the left and to the right) \\ & that will be searched for TSDs and/or motifs around 5' and 3' boundary \\ \Showoption{overlaps}& specify no$|$best$|$all \\ \Showoptiongroup{Alignment options} \Showoption{xdrop}& specify xdrop value for seed extension \\ \Showoption{mat}& specify matchscore for seed extension \\ \Showoption{mis}& specify mismatchscore for seed extension \\ \Showoption{ins}& specify insertionscore for seed extension \\ \Showoption{del}& specify deletionscore for seed extension \\ \Showoptiongroup{Miscellaneous options} \Showoption{v}& verbose mode \\ \Showoption{longoutput}& additional motif/TSD output (requires \Showoption{mintsd} or \Showoption{motif}) \\ \Showoption{help}& show all options \\ \hline \end{tabular} %\input{ltrprogoptions} \] \end{footnotesize} \label{overviewOpt} \end{table} %%%% \subsection{Input options} \begin{Justshowoptions} \Option{index}{\Showoptionarg{indexname}}{ Specify the name of the enhanced suffix array index. The index must comprise the tables $\tt{suf}$, $\tt{lcp}$, $\tt{des}$ and $\tt{tis}$. An example of how the enhanced suffix array index is constructed with the program \Suffixerator can be found in section~\ref{Examples}. } \end{Justshowoptions} The option \Showoption{index} is mandatory. \begin{Justshowoptions} \Option{range}{\Showoptionarg{$x$ $y$}}{ Specify the range in the input sequence(s) to be searched for LTR retrotransposon candidates. That is, if $x=1000$ and $y=10000$ then candidates are only reported if they start after position 1000 and end before position 10000 in their respective sequence coordinates. If $x=y=0$ (default), then the whole sequences are searched. } \end{Justshowoptions} %%%% \subsection{Output options} Results are reported in tabular fashion on stdout and can easily be written to a file using the notation \texttt{\symbol{62}} \Showoptionarg{resultfile} as in the following: \Gtltrharvest \Showoption{index} \Showoptionarg{indexname} $[$\emph{options}$]$ \texttt{\symbol{62}} \Showoptionarg{resultfile} In addition, the following options write extra information to files \begin{Justshowoptions} \Option{out}{\Showoptionarg{outputfile}}{ Specify the name of a file where the predictions will be written to. Each prediction will be represented by an individual FASTA entry. } \Option{outinner}{\Showoptionarg{outputfile}}{ Specify the name of a file where the inner regions (the prediction sequences without the flanking LTR sequences) will be written to. Each prediction will be represented by an individual FASTA entry. } \Option{gff3}{\Showoptionarg{outputfile}}{ Specify the name of a file where the predictions will be written to. Each prediction will be represented by an individual GFF3~\cite{gff3} entry. } \end{Justshowoptions} %%%% \subsection{Filter options} The filter options provide the opportunity to exclude predictions with unwanted sequence, length or distance features. If a particular option is not set by the user, a default value for this options will be set, except for the options \Showoption{mintsd}, \Showoption{maxtsd} and \Showoption{motif}. Thus, if none of the filter options is set by the user, a prediction of LTR retrotransposons will be conducted without searching for target site duplications (TSD) or a particular LTR start-end motif. \begin{Justshowoptions} \Option{seed}{\Showoptionarg{$L_{ex}$}}{ Specify the minimum length for the exact maximal repeats. Only those repeats with the specified minimum length are analyzed in the process of finding candidate pairs. Exact maximal repeats of length below that threshold are not taken further into account. \Showoptionarg{$L_{ex}$} has to be a positive integer. If this option is not selected by the user, then \Showoptionarg{$L_{ex}$} is set to $30$ by default. } \Option{minlenltr}{\Showoptionarg{$L_{min}$}}{ Specify the minimum length of each LTR. \Showoptionarg{$L_{min}$} has to be specified as a positive integer. If this option is not selected by the user, then \Showoptionarg{$L_{min}$} is set to $100$ by default. } \Option{maxlenltr}{\Showoptionarg{$L_{max}$}}{ Specify the maximum length of each LTR. \Showoptionarg{$L_{max}$} has to be specified as a positive integer. If this option is not selected by the user, then \Showoptionarg{$L_{max}$} is set to $1000$ by default. } \Option{mindistltr}{\Showoptionarg{$D_{min}$}}{ Specify the minimum distance of LTR starting positions. \Showoptionarg{$D_{min}$} has to be specified as a positive integer. If this option is not selected by the user, then \Showoptionarg{$D_{min}$} is set to $1000$ by default. } \Option{maxdistltr}{\Showoptionarg{$D_{max}$}}{ Specify the maximum distance of LTR starting positions. \Showoptionarg{$D_{max}$} has to be specified as a positive integer. If this option is not selected by the user, then \Showoptionarg{$D_{max}$} is set to $15000$ by default. } \Option{similar}{\Showoptionarg{similaritythreshold}}{ Specify the minimum similarity value between the two LTRs. The argument \Showoptionarg{similaritythreshold} has to be chosen from the range [0,100] and means a percentage. If this option is not selected by the user, the default value is set to 85\%. } \Option{mintsd}{\Showoptionarg{TSDminlen}}{ If this option is selected, a search for target site duplications (TSDs) will be conducted with a minimum TSD length of \Showoptionarg{TSDminlen}. If this option is not selected by the user, a search for TSDs with minimum TSD length 4 will be conducted. If this option is set but no maximum TSD length is specified by the option \Showoption{maxtsd}, then the maximum TSD length is set to $20$ by default. } \Option{maxtsd}{\Showoptionarg{TSDmaxlen}}{ This option requires the option \Showoption{mintsd}. If this option is selected, a search for target site duplications (TSDs) will be conducted with a maximum TSD length of \Showoptionarg{TSDmaxlen}. } \Option{motif}{\Showoptionarg{expr}}{ Specify 2 nucleotides for the starting motif and 2 nucleotides for the ending motif at the beginning and the ending of each LTR, respectively. Only palindromic motif sequences - where the motif sequence is equal to its complementary sequence read backwards - %- of %nucleotides a(adenine), c(cytosine), g(guanine), t(thymine) are allowed, e.g. \Showoptionarg{tgca}. Type the nucleotides without any space separating them. If this option is not selected by the user, then candidate pairs will not be checked, if they contain a motif. If this options is set but no allowed number of mismatches is specified by the option \Showoption{motifmis}, then a search for the exact motif will be conducted. } \Option{motifmis}{\Showoptionarg{n}}{ This option requires the option \Showoption{motif}. Specify the allowed number of mismatches by the argument \Showoptionarg{n}. If this option is not set, then a search for the exact motif will be conducted. The non-negative integer \Showoptionarg{n} has to be chosen from the range $[0,3]$. } \Option{vic}{\Showoptionarg{l}}{ Specify the number of nucleotide positions \Showoptionarg{l} to the left and to the right (the vicinity), that will be searched for TSDs and/or one motif around the 5' and 3' predicted boundary of a LTR retrotransposon. This option has only an effect, if option \Showoption{mintsd} and/or option \Showoption{motif} is switched on. If this option is not selected by the user, the default value of $l$ is 60. } \Option{overlaps} {\Showoptionarg{no}$|$\Showoptionarg{best}$|$\Showoptionarg{all}}{ Specify the output with regard to nested and/or overlapping LTR retrotransposon predictions. If the argument \Showoptionarg{no} is selected, then neither nested nor overlapping predictions will be reported in the output. If the argument \Showoptionarg{best} is selected, then, in the case of two or more nested or overlapping predictions, solely the LTR retrotransposon prediction with the highest similarity between its LTRs will be reported. If the argument \Showoptionarg{all} is selected, then all LTR retrotransposon predictions will be reported whether there are nested and/or overlapping predictions or not. If this option is not selected by the user, the option with argument \Showoptionarg{best} is set by default. } \end{Justshowoptions} %%%% \subsection{Alignment options} An $X$-drop extension process permits the search for degenerated LTRs. The alignment options provide the opportunity to control this extension of the maximal repeat seeds. If a particular alignment option is not set by the user, a default value for this options will be set. \begin{Justshowoptions} \Option{xdrop}{\Showoptionarg{X}}{ Specify the xdrop value \Showoptionarg{X} for extending a seed repeat in both directions allowing for matches, mismatches, insertions, and deletions. The argument \Showoptionarg{X} must be a positive integer or $0$. The $X$-drop extension process stops as soon as the extension involving matches, mismatches, insertions, and deletions has a score smaller than $T-X$ where T denotes the largest score seen so far. If this option is not selected by the user, then \Showoptionarg{X} is set to $5$ by default. } \Option{mat}{\Showoptionarg{score}}{ Specify the positive match score for the $X$-drop extension process. If the option is not selected by the user, the default value is $2$. } \Option{mis}{\Showoptionarg{score}}{ Specify the negative mismatch score for the $X$-drop extension process. If this option is not selected by the user, the default value is $-2$. } \Option{ins}{\Showoptionarg{score}}{ Specify the negative insertion score for the $X$-drop extension process. If this option is not selected by the user, the default value is $-3$. } \Option{del}{\Showoptionarg{score}}{ Specify the negative deletion score for the $X$-drop extension process. If this option is not selected by the user, the default value is $-3$. } \end{Justshowoptions} %%%% \subsection{Miscellaneous options} \begin{Justshowoptions} \Option{v}{}{ This option enables the verbose mode. This means, that some more information about the processing will be printed to \texttt{stdout} during the run. This includes a long list of switched on or switched off options. } \Option{longoutput}{}{ This option additionally prints information about the detected TSD and/or the motif to \texttt{stdout}, if a search for TSD and/or for the motif has been selected by the user. This option requires the option \Showoption{mintsd} and/or \Showoption{motif}. } \Option{help}{}{ \LTRharvest will show a summary of all options on \texttt{stdout} and terminate with exit code $0$. } \end{Justshowoptions} %%%%%%%%%%%% \section{Examples} \label{Examples} In this section, example applications of \LTRharvest are presented. In Subsection~\ref{different-options}, examples for using different options of \LTRharvest are given. Subsection~\ref{Example-genome} then gives an example for the prediction of LTR retrotransposons on the entire \textit{S. cerevisiae} genome. In Subsection~\ref{ExampleCluster}, an example for a clustering process of the \LTRharvest output is shown. Please note that this step is not part of \LTRharvest and is carried out by %with a subsequent %clustering process of the predicted sequences using \textit{Vmatch}~\cite{vmatch}. %(which is not part of the \GenomeTools binary \Gt). \subsection{Using different options of \LTRharvest} \label{different-options} As target sequence file we use some FASTA file \texttt{\small{chr02.19970727.fsa.gz}} containing the \textit{S. cerevisiae} genome sequence, chromosome 2. Note that the file is a compressed file in gzip format (because of the ending \texttt{.gz}). This format can be handled by the program \Suffixerator. First, we create the enhanced suffix array. We invoke \Gtsuffixerator with options \Showoption{tis}, \Showoption{suf}, \Showoption{lcp}, \Showoption{des}, \Showoption{ssp} and \Showoption{sds} since \LTRharvest needs the corresponding tables. Furthermore, we specify \Showoption{dna}, as we process DNA-sequences. \begin{footnotesize} \begin{verbatim} $ gt suffixerator -db chr02.19970727.fsa.gz -indexname chr02.19970727.fsa -tis -suf -lcp -des -ssp -sds -dna # dna=yes # indexname="chr02.19970727.fsa" . . . # TIME overall 1.37 \end{verbatim} \end{footnotesize} Now we can use the index for \LTRharvest. The first example call will just use the default parameters for the filter and alignment options without searching for TSD or an LTR start-end motif. \begin{footnotesize} \begin{verbatim} $ gt ltrharvest -index chr02.19970727.fsa # args=-index chr02.19970727.fsa # predictions are reported in the following way # s(ret) e(ret) l(ret) s(lLTR) e(lLTR) l(lLTR) s(rLTR) e(rLTR) l(rLTR) sim(LTRs) seq-nr # where: # s = starting position # e = ending position # l = length # ret = LTR-retrotransposon # lLTR = left LTR # rLTR = right LTR # sim = similarity # seq-nr = sequence number 259532 265448 5917 259532 259863 332 265117 265448 332 99.40 0 427672 430021 2350 427672 428170 499 429522 430021 500 91.60 0 29632 35597 5966 29632 29969 338 35259 35597 339 98.82 0 220989 226919 5931 220989 221339 351 226574 226919 346 97.15 0 \end{verbatim} \end{footnotesize} Each comment line starts with the comment symbol \#. Each non-comment line denotes a LTR retrotransposon prediction with starting and ending positions of the whole LTR retrotransposon, the left LTR instance and the right LTR instance, respectively. Furthermore, for each of these elements, the corresponding element length is reported as well as a percentage similarity of the two LTRs. The last integer of each line denotes the number of the input sequence, the LTR retrotransposon prediction occurs in. The input sequence numbers are counted from 0. Invoking \LTRharvest with the optional argument \Showoption{v} gives more information about enabled and disabled options as well as additional information about the enhanced suffix array index and time/space consumption. Moreover, specifying options \Showoption{out} and \Showoption{outinner} the run results in two multiple FASTA files. \begin{footnotesize} \begin{verbatim} $ gt ltrharvest -index chr02.19970727.fsa -v -out pred-chr02.fsa -outinner pred-inner-chr02.fsa # args=-index chr02.19970727.fsa -v -out pred-chr02.fsa -outinner pred-inner-chr02.fsa # user defined options and values: # verbosemode: On # indexname: chr02.19970727.fsa # outputfile: pred-chr02.fsa # outputfile inner region: pred-inner-chr02.fsa # xdropbelowscore: 5 # similaritythreshold: 85.00 # minseedlength: 30 # matchscore: 2 # mismatchscore: -2 # insertionscore: -3 # deletionscore: -3 # minLTRlength: 100 # maxLTRlength: 1000 # minLTRdistance: 1000 # maxLTRdistance: 15000 # overlaps: best # minTSDlength: 0 # maxTSDlength: 20 # palindromic motif: # motifmismatchesallowed: 4 # vicinity: 60 nt # predictions are reported in the following way # s(ret) e(ret) l(ret) s(lLTR) e(lLTR) l(lLTR) s(rLTR) e(rLTR) l(rLTR) sim(LTRs) seq-nr # where: # s = starting position # e = ending position # l = length # ret = LTR-retrotransposon # lLTR = left LTR # rLTR = right LTR # sim = similarity # seq-nr = sequence number 259532 265448 5917 259532 259863 332 265117 265448 332 99.40 0 427672 430021 2350 427672 428170 499 429522 430021 500 91.60 0 29632 35597 5966 29632 29969 338 35259 35597 339 98.82 0 220989 226919 5931 220989 221339 351 226574 226919 346 97.15 0 \end{verbatim} \end{footnotesize} Searching additionally for TSD and a LTR start-end motif we use the options \Showoption{mintsd}, \Showoption{maxtsd}, \Showoption{motif} and \Showoption{motifmis}. \begin{footnotesize} \begin{verbatim} $ gt ltrharvest -index chr02.19970727.fsa -mintsd 5 -maxtsd 20 -motif tgca -motifmis 0 # args=-index chr02.19970727.fsa -mintsd 5 -maxtsd 20 -motif tgca -motifmis 0 # predictions are reported in the following way # s(ret) e(ret) l(ret) s(lLTR) e(lLTR) l(lLTR) s(rLTR) e(rLTR) l(rLTR) sim(LTRs) seq-nr # where: # s = starting position # e = ending position # l = length # ret = LTR-retrotransposon # lLTR = left LTR # rLTR = right LTR # sim = similarity # seq-nr = sequence number 259532 265448 5917 259532 259863 332 265117 265448 332 99.40 0 29632 35590 5959 29632 29963 332 35259 35590 332 99.70 0 220996 226911 5916 220996 221329 334 226575 226911 337 97.33 0 \end{verbatim} \end{footnotesize} Finally, if we are interested in the sequence and the length of the TSD as well as the sequence of the motif, we select the option \Showoption{longoutput}. This also is an example for specifying all filter and alignment options by the user. \begin{footnotesize} \begin{verbatim} $ gt ltrharvest -index chr02.19970727.fsa -seed 30 -xdrop 5 -mat 2 -mis -2 -ins -3 -del -3 -minlenltr 100 -maxlenltr 1000 -mindistltr 1000 -maxdistltr 15000 -similar 90.0 -overlaps all -mintsd 5 -maxtsd 20 -motif tgca -motifmis 0 -vic 60 -longoutput # args=-index chr02.19970727.fsa -seed 30 -xdrop 5 -mat 2 -mis -2 -ins -3 -del -3 -minlenltr 100 -maxlenltr 1000 -mindistltr 1000 -maxdistltr 15000 -similar 90.0 -overlaps all -mintsd 5 -maxtsd 20 -motif tgca -motifmis 0 -vic 60 -longoutput # predictions are reported in the following way # s(ret) e(ret) l(ret) s(lLTR) e(lLTR) l(lLTR) TSD l(TSD) m(lLTR) s(rLTR) e(rLTR) l(rLTR) TSD l(TSD) m(rLTR) sim(LTRs) seq-nr # where: # s = starting position # e = ending position # l = length # m = motif # ret = LTR-retrotransposon # lLTR = left LTR # rLTR = right LTR # TSD = target site duplication # sim = similarity # seq-nr = sequence number 259532 265448 5917 259532 259863 332 gtaat 5 tg..ca 265117 265448 332 gtaat 5 tg..ca 99.40 0 29632 35590 5959 29632 29963 332 ataat 5 tg..ca 35259 35590 332 ataat 5 tg..ca 99.70 0 220996 226911 5916 220996 221329 334 ggaat 5 tg..ca 226575 226911 337 ggaat 5 tg..ca 97.33 0 \end{verbatim} \end{footnotesize} \subsection{Predictions on the entire \textit{S.cerevisiae} genome} \label{Example-genome} As target sequences file we use some multiple FASTA file \texttt{\small{chrAll.19971001.fsa.gz}}, which contains all 16 chromosomal sequences of the release before Oct. 1st, 1997, probably used by Kim et al. in their comprehensive survey of retrotransposons~\cite{kim:1998}. First, we create the enhanced suffix array. We invoke \Gtsuffixerator with options \Showoption{tis}, \Showoption{suf}, \Showoption{lcp}, \Showoption{des}, since \LTRharvest needs the corresponding tables. Furthermore, we specify option \Showoption{dna}, as we are processing DNA sequences. \begin{footnotesize} \begin{verbatim} $ gt suffixerator -db chrAll.19971001.fsa.gz -indexname chrAll.19971001.fsa -tis -suf -lcp -des -sds -dna # dna=yes # indexname="chrAll.19971001.fsa" . . . # TIME overall 108.35 \end{verbatim} \end{footnotesize} Now we can use the index with \LTRharvest. In addition to the filter and alignment options, we choose option \Showoption{out} for printing the predicted LTR retrotransposon sequences to a file. \begin{footnotesize} \begin{verbatim} $ gt ltrharvest -index chrAll.19971001.fsa -seed 100 -minlenltr 100 -maxlenltr 1000 -mindistltr 1000 -maxdistltr 15000 -xdrop 5 -mat 2 -mis -2 -ins -3 -del -3 -similar 90.0 -overlaps best -mintsd 5 -maxtsd 20 -motif tgca -motifmis 0 -vic 60 -longoutput -out pred-chrAll.fsa # args=-index chrAll.19971001.fsa -seed 100 -minlenltr 100 -maxlenltr 1000 -mindistltr 1000 -maxdistltr 15000 -xdrop 5 -mat 2 -mis -2 -ins -3 -del -3 -similar 90.0 -overlaps best -mintsd 5 -maxtsd 20 -motif tgca -motifmis 0 -vic 60 -longoutput -out pred-chrAll.fsa # predictions are reported in the following way # s(ret) e(ret) l(ret) s(lLTR) e(lLTR) l(lLTR) TSD l(TSD) m(lLTR) s(rLTR) e(rLTR) l(rLTR) TSD l(TSD) m(rLTR) sim(LTRs) seq-nr # where: # s = starting position # e = ending position # l = length # m = motif # ret = LTR-retrotransposon # lLTR = left LTR # rLTR = right LTR # TSD = target site duplication # sim = similarity # seq-nr = sequence number 160239 166163 5925 160239 160575 337 ggttc 5 tg..ca 165827 166163 337 ggttc 5 tg..ca 100.00 0 29632 35590 5959 29632 29963 332 ataat 5 tg..ca 35259 35590 332 ataat 5 tg..ca 99.70 1 . . . 844407 850335 5929 844407 844744 338 gaaat 5 tg..ca 849998 850335 338 gaaat 5 tg..ca 100.00 15 56452 62375 5924 56452 56788 337 gttat 5 tg..ca 62039 62375 337 gttat 5 tg..ca 100.00 15 \end{verbatim} \end{footnotesize} \subsection{Sequence clustering of \LTRharvest output (optional)} \label{ExampleCluster} In addition to the prediction process done by \LTRharvest, a cluster analysis on the predicted sequences is recommended. Here, we choose the single linkage cluster analysis program from the \textit{Vmatch} software tool~\cite{vmatch} (which is not part of the \GenomeTools binary \Gt) in order to show how this task can be accomplished. An index needs to be constructed from the predicted sequences by the program \texttt{mkvtree} which is part of \textit{Vmatch}. \begin{footnotesize} \begin{verbatim} $ mkvtree -db pred-chrAll.fsa -dna -pl -allout -v reading file "pred-chrAll.fsa" ... . . . overall space peak: main=2.61 MB (10.01 bytes/symbol), secondary=0.53 MB \end{verbatim} \end{footnotesize} Now we can use \texttt{vmatch} (which is part of \textit{Vmatch}) to perform a clustering of the predicted sequences. A reasonable parameter set is given in Tab.~\ref{parameters-cluster-default}, page~\pageref{parameters-cluster-default}. See the \emph{Vmatch manual}~\cite{vmatch} for an explanation of the options. The following command computes clusters of all (database) sequences in \texttt{\small{pred-chrAll.fsa}}. Each cluster has a unique cluster number, followed by the sequence number contained in the cluster. \begin{footnotesize} \begin{verbatim} $ vmatch -dbcluster 95 7 Cluster-pred-chrAll -p -d -seedlength 50 -l 1101 -exdrop 9 pred-chrAll.fsa # args=-dbcluster 95 7 Cluster-pred-chrAll -p -d -seedlength 50 -l 1101 -exdrop 9 pred-chrAll.fsa # 3 clusters # 45 elements out of 46 (97.83%) are in clusters # 1 elements out of 46 (2.17%) are singlets # 1 cluster of size 2 # 1 cluster of size 3 # 1 cluster of size 40 0: 32 41 42 36 39 13 40 43 37 30 44 38 18 21 17 34 35 31 12 20 33 23 26 27 6 28 3 29 25 1 24 9 19 2 7 22 4 10 5 0 1: 8 15 11 2: 14 45 \end{verbatim} \end{footnotesize} %\bibliographystyle{plain} %\bibliography{references} \begin{thebibliography}{1} \bibitem{LTRharvesturl} \url{http://www.zbh.uni-hamburg.de/ltrharvest} \bibitem{gff3} \textsc{GFF3}, tab delimited file format for genome annotation. \url{http://www.sequenceontology.org/gff3.shtml}. \bibitem{AKO04} M.I. Abouelhoda, S.~Kurtz, and E.~Ohlebusch. \newblock Replacing suffix trees with enhanced suffix arrays. \newblock {\em Journal of Discrete Algorithms}, 2:53--86, 2004. \bibitem{EKW07} D.~Ellinghaus, S.~Kurtz, and U.~Willhoeft. \newblock \LTRharvest, an efficient and flexible software for de novo detection of \normalsize{LTR} retrotransposons. \newblock {\em BMC Bioinformatics}, 9:18, 2008. \bibitem{genometools} G.~Gremme. \newblock The \textsc{GenomeTools} genome analysis system. \url{http://genometools.org}. \bibitem{kim:1998} J.M. Kim, S.~Vanguri, J.D. Boeke, A.~Gabriel, and D.F. Voytas. \newblock Transposable elements and genome organisation: a comprehensive survey of retrotransposons revealed by the complete \textit{Saccharomyces cerevisiae} genome sequence. \newblock {\em Genome Research}, 8(5):464--478, 1998. \bibitem{vmatch} S.~Kurtz. \newblock The \textsc{Vmatch} large scale sequence analysis software. \url{http://www.vmatch.de}. \end{thebibliography} \begin{table} \caption{A default parameter set for \textit{Vmatch}'s single linkage clustering program.} \vspace{0.25cm} \begin{tabular}[h!]{lcl}\hline Parameter name & Value & Comment\\\hline dbcluster & 95 ($\lfloor(\frac{D_{min}}{D_{max}} \times 100)\rfloor + 1$) & Match covers at least 95\% of the smaller sequence and\\ & & (\textit{formula value})\% of the larger sequence\\ d & & Compute direct matches\\ p & & Compute palindromic matches\\ seedlength & 50 & Minimal length of the exact repeats\\ l & $D_{min} + L_{min}$ & Minimal length of matches\\ exdrop & 9 & Xdrop score when extending a seed in both directions\\\hline \end{tabular} \label{parameters-cluster-default} \end{table} \end{document} genometools-1.5.1/doc/manuals/matstat.tex000066400000000000000000000000461211610345200204500ustar00rootroot00000000000000\def\BuildMatstat{} \input{uniquesub} genometools-1.5.1/doc/manuals/mgth.tex000066400000000000000000000433601211610345200177400ustar00rootroot00000000000000\documentclass[12pt,titlepage]{article} \usepackage[a4paper,top=30mm,bottom=30mm,left=20mm,right=20mm]{geometry} \usepackage{url} \usepackage{alltt} \usepackage{xspace} \usepackage{times} \usepackage{listings} \usepackage{bbm} \usepackage{verbatim} \usepackage{optionman} \usepackage{graphicx} \usepackage{color} \input{dvipsnam.def} \newcommand{\MetagenomeThreader}{\textit{MetagenomeThreader}\xspace} \newcommand{\GenomeTools}{\textit{GenomeTools}\xspace} \newcommand{\nucleotide}{\textit{nucleotide}\xspace} \newcommand{\XMLFile}{\texttt{\small{BLAST-Filename}}\xspace} \newcommand{\MGFile}{\texttt{\small{Metagenome-Filename}}\xspace} \newcommand{\HitFile}{\texttt{\small{Hit-Sequence-Filename}}\xspace} \newcommand{\Gtmgth}{\texttt{gt mgth}\xspace} \newcommand{\Gt}{\texttt{gt}\xspace} \newcommand{\Attention}{\textbf{ATTENTION:}\xspace} \setlength{\tabcolsep}{2pt} \title{\MetagenomeThreader\\ a manual} \author{\begin{tabular}{c} \textit{David Schmitz-H\"{u}bsch}\\ \textit{Stefan Kurtz}\\[1cm] Research Group for Genomeinformatics\\ Center for Bioinformatics\\ University of Hamburg\\ Bundesstrasse 43\\ 20146 Hamburg\\ Germany\\[1cm] \end{tabular}} \begin{document} \maketitle \section{Introduction} \label{Introduction} This document describes the \MetagenomeThreader, a software tool for the prediction of genes in sequences of metagenome projects. The \MetagenomeThreader is based on the algorithem from Krause et al \cite{krause}. For the prediction of PCSs (Predicted Coding Sequences) the metagenome sequences are blasted against a nucleotide database and the resultig BLAST-hits are used to process a combined score for every position in a DNA-sequence. The combined score reflects the potential that a specific DNA-sequence position is a coding one. The \MetagenomeThreader is written in \texttt{C} and is based on the \GenomeTools library \cite{genometools}. \\ The \MetagenomeThreader is called as part of the single binary named \Gt. %The source code is single threaded and can be compiled on 32-bit and 64-bit %platforms without making any changes to the sources. \section{Usage} \label{Usage} \subsection{The meaning of used type of fonts} \label{Fonts} Some text is highlighted by different fonts according to the following rules. \begin{itemize} \item \texttt{Typewriter font} is used for the names of software tools. \item \texttt{\small{Small typewriter font}} is used for file names. \item \begin{footnotesize}\texttt{Footnote sized typewriter font} \end{footnotesize} with a leading \begin{footnotesize}\texttt{'-'}\end{footnotesize} is used for program options. \item \Showoptionarg{small italic font} is used for the argument(s) of an option. \end{itemize} \subsection{The functionality of the \MetagenomeThreader} \label{Functional} The \MetagenomeThreader needs 3 data sets, the metagenome sequences are also required. The BLAST-hits will then be generated through a BLAST of the metagenome-sequences against a nucleotide database such as nt from NCBI. \Attention Generating the BLAST-hits is not part of the \MetagenomeThreader and has to be done preliminary. The resulting BLAST-hits have to be saved in XML-format. If the BLAST-hits are generated, the hit-sequences can be achieved through the \MetagenomeThreader. In order to generate the hit-sequence file, the \MetagenomeThreader requires a local copy of the appropriate nucleotide database, such as nt from NCBI, which will be scanned during the \MetagenomeThreader processing. You can download a nucleotide database from \\ {\url{ftp://ftp.ncbi.nih.gov/blast/db/FASTA}} for example. \subsection{The Installation of the \MetagenomeThreader} \label{Install} The \MetagenomeThreader will be installed and is ready for use after the installation of the \GenomeTools (see \cite{genometools} for installation instructions). There are two different installation options for the \GenomeTools in relation to the \MetagenomeThreader. The standard installation installs the \\ \MetagenomeThreader without the cURL-module. If you prefer to install the \MetagenomeThreader including the cURL-module, you have to include the the command \texttt{make curl="yes"} during the \GenomeTools installation process. A connection to the internet is required to use the curl module. With the curl-module, the MetagenomeThreader will run an online query for missing hit-sequences, otherwise they will be ignored during the processing of the PCS's. \subsection{The Options of the \MetagenomeThreader} \label{Overview} Since \MetagenomeThreader is part of \Gt, the \MetagenomeThreader is called as following: \Gtmgth $[$\emph{options}$]$ \XMLFile \MGFile \HitFile \XMLFile denotes the XML formatted BLAST-hit file, \MGFile the FASTA formatted metagenome-sequences file and the \HitFile the FASTA formatted hit-sequences file. The \XMLFile has to be created with a BLAST-Program. Because of the dimension of the resulting files in metagenome projects, an online BLAST is neither advisable nor practicable. The hit-sequence file may be empty at the time of the first program call. All three files have to be provided at every program call and can also be zipped files (\texttt{\small{.gz}}). An overview of all possible options with a short descripton of each option is available in table \ref{overviewOpt}. All options can only be specified once. \begin{table}[htbp] \caption{Overview of the \MetagenomeThreader Options.} \begin{footnotesize} \[ \renewcommand{\arraystretch}{0.89} \begin{tabular}{p{2cm}p{14cm}}\hline \\ \Showoption{s}& specify score for a synonymic base exchange \\ \Showoption{n}& specify score for a nonsynonymic base exchange \\ \Showoption{b}& specify score for a blast-hit end within a query-sequence \\ \Showoption{q}& specify score for a stop-codon within a query-sequence \\ \Showoption{h}& specify score for a stop-codon within a hit-sequence \\ \Showoption{l}& specify score leaving a gene on forward/reverse strand or enter a gene on forward/reverse strand \\ \Showoption{p}& specify maximum span between coding-regions in the same reading frame resume as one prediction \\ \Showoption{f}& specify maximum span between coding-regions in different reading frames resume as coding-regions in the optimal reading-frame \\ \Showoption{o}& specify the database name for the fcgi-database used in the cURL-module \\ \Showoption{k}& specify the database name used for the hit-sequence extraction \\ \Showoption{t}& specify yes$|$no if a hit-sequence file exists \\ \Showoption{r}& specify 1$|$2$|$3 for the format of the output-file \\ \Showoption{a}& specify minimum length of the amino acid sequences in the result \\ \Showoption{d}& specify minimum percent-value for the different kinds in the hit-statistic output \\ \Showoption{e}& specify 1$|$2$|$3 for the use of alternative start-codons \\ \Showoption{m}& specify yes$|$no if the processing has to be based on homology - experimental \\ \Showoption{g}& specify yes$|$no for the \GenomeTools test modus - output without the creating date \\ \Showoption{x}& specify yes$|$no to extend PCSs to max length \\ \Showoption{version}& display version information and exit \\ \Showoption{help}& show all options \\ \hline \end{tabular} %\input{ltrprogoptions} \] \end{footnotesize} \label{overviewOpt} \end{table} %%%% \subsection{\MetagenomeThreader Options} \begin{Justshowoptions} \Option{s}{\Showoptionarg{score}}{ Specify the score for synonymic base exchanges. \Showoptionarg{score} has to be specified as a double. If this option is not selected by the user, then \Showoptionarg{score} is set to $1.00$ by default (recommended: positive score). } \Option{n}{\Showoptionarg{score}}{ Specify the score for nonsynonymic base exchanges. \Showoptionarg{score} has to be specified as a double. If this option is not selected by the user, then \Showoptionarg{score} is set to $-1.00$ by default (recommended: negative score). } \Option{b}{\Showoptionarg{score}}{ Specify the score for a blast-hit end within a query-sequence. \Showoptionarg{score} has to be specified as a double. If this option is not selected by the user, then \Showoptionarg{score} is set to $-10.00$ by default (recommended: negative score). } \Option{q}{\Showoptionarg{score}}{ Specify the score for a stop-codon in the query-sequence. \Showoptionarg{score} has to be specified as a negative double. If this option is not selected by the user, then \Showoptionarg{score} is set to $-2.00$ by default (recommended: negative score). } \Option{h}{\Showoptionarg{score}}{ Specify the score for a stop-codon in the hit-sequence. \Showoptionarg{score} has to be specified as a negative double. If this option is not selected by the user, then \Showoptionarg{score} is set to $-5.00$ by default (recommended: negative score). } \Option{l}{\Showoptionarg{score}}{ Specify the score for leaving a gene on forward/reverse strand or enter a gene on forward/reverse strand. The argument \Showoptionarg{score} has to be specified as a negative double. If this option is not selected by the user, the default value is set to $-2$ (recommended: negative score). } \Option{p}{\Showoptionarg{$S_{max}$}}{ Specify the maximum span between two coding-regions in the same reading frame in which they resume as one coding-region. The argument \Showoptionarg{$S_{max}$} has to be specified as a positive double. If this option is not selected by the user, \Showoptionarg{$S_{max}$} is set to $400.00$ by default. } \Option{f}{\Showoptionarg{$S_{max}$}}{ Specify the maximum span between coding-regions in different reading frames in which they resume as coding-regions in the optimal reading-frame. The argument \Showoptionarg{$S_{max}$} has to be specified as a positive double. If this option is not selected by the user, \Showoptionarg{$S_{max}$} is set to $200.00$ by default. } \Option{c}{\Showoptionarg{$DB_{name}$}}{ Specify the name of the database used in the cURL-Module. The argument \Showoptionarg{$DB_{name}$} has to be chosen as a valid database which you can find under \\ \mbox{\url{http://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi?}}. If this option is not selected by the user, \Showoptionarg{$DB_{name}$} is set to \nucleotide by default. } \Option{o}{\Showoptionarg{output filename}}{ Specify the name of the resulting output-file where the predictions will be written to. Each prediction will be represented by an individual block (see chapter \ref{Examples}). If this option is not selected by the user, \Showoptionarg{output filename} is set to $output$ by default. } \Option{k}{\Showoptionarg{$DB_{Hit-Seq}$}}{ Specify the path to the hit-sequence database. The argument \Showoptionarg{$DB_{Hit-Seq}$} has to be chosen as a valid path to a valid database which you can find under \\ \mbox{\url{ftp://ftp.ncbi.nih.gov/blast/db/FASTA/}} for example. If this option is not selected by the user, \Showoptionarg{$DB_{Hit-Seq}$} is set to $nt.gz$ by default. } \Option{t}{\Showoptionarg{yes}$|$\Showoptionarg{no}}{ Specify if a hit-sequence file was already created (\Showoptionarg{yes}) or not created until now (\Showoptionarg{no}). If this option is not selected by the user, \Showoption{t} is set to \Showoptionarg{no} by default. \Attention If there is already a hit-sequence file and you do not use \Showoption{t} \Showoptionarg{yes} the existing hit-sequence file will be deleted. } \Option{r}{\Showoptionarg{1}$|$\Showoptionarg{2}$|$\Showoptionarg{3}}{ Specify the format for the output-file. You can choose between .txt (1), .html (2) und .xml (3) format. If this option is not selected by the user, the default value of $r$ is $1$. } \Option{a}{\Showoptionarg{$AA_{min}$}}{ Specify the minimum number of amino-acids in the amino-acid sequences in the output. Shorter amino-acid sequences will not appear in the output. The argument \Showoptionarg{$AA_{min}$} has to be chosen as a value higher or equal than 15. If this option is not selected by the user, the default value of $a$ is $15$. } \Option{d}{\Showoptionarg{$Stat_{min}$}}{ Specify the minimum percentage which the species must have to appear in the output-file in the statistic section. The argument \Showoptionarg{similaritythreshold} has to be chosen from the range [0.0,1.0] and means a percentage. If this option is not selected by the user, the default value of $d$ is $0.0$. } \Option{e}{\Showoptionarg{1}$|$\Showoptionarg{2}$|$\Showoptionarg{3}}{ Specify the format for the different start-codon modes. You can choose between (1): AUG, (2): AUG, CUG, GUG and (3): AUG, CUG, GUG, UUG. \Showoption{e} makes only sense if \Showoption{x} is set to \Showoptionarg{true}. If this option is not selected by the user, the default value of $e$ is $1$. } \Option{m}{\Showoptionarg{yes}$|$\Showoptionarg{no}}{ Specify the processing mode. If \Showoption{m} is set to \Showoptionarg{yes}, the specified scores are used if there are equal amino acids, otherwise they are used if the amino acids are different. The \Showoption{m} has only experimental status. Results are not checked. If this option is not selected by the user, the default value of $m$ is \Showoptionarg{no}. } \Option{g}{\Showoptionarg{yes}$|$\Showoptionarg{no}}{ Specify if the testmode should be used to make the results comparable in the \GenomeTools test suite. This option is not relevant for normal use of the \MetagenomeThreader. If this option is not selected by the user, the default value of $g$ is \Showoptionarg{no}. } \Option{x}{\Showoptionarg{yes}$|$\Showoptionarg{no}}{ Specify if the extended mode should be switched on. If \Showoption{x} is set to \Showoptionarg{yes} the processed PCSs will be extended to its max length in both directions. If this option is not selected by the user, the default value of $x$ is $no$. } \Option{help}{}{ \MetagenomeThreader will show a summary of all options on \texttt{stdout} and terminate with exit code $0$. } \Option{version}{}{ Shows the version of \GenomeTools. } \end{Justshowoptions} %%%%%%%%%%%% \section{Example of a Result from the \MetagenomeThreader} \label{Examples} \subsection{Header of the \MetagenomeThreader Result} \label{example-results} \renewcommand{\arraystretch}{1.15} \begin{tabular}{|p{4.5 cm}p{2,2 cm}|} \hline MetagenomeThreader& \\ Result 29.11.2007& \\ & \\ Parameter settings& \\ Synonymic Value:& 1.0000 \\ Non-Synonymic Value: &-1.0000 \\ Blast-Hit-End Value: &-10.0000 \\ Query Stop-Codon Value: &-2.0000 \\ Hit Stop-Codon Value: &-5.0000 \\ Frameshift-Span: &200.0000 \\ Prediction-Span: &400.0000 \\ Leavegene-Value: &-2.0000 \\ cURL-DB: &nucleotide \\ Output-Filename: &Metagenome \\ Output-Fileformat: &2 \\ (1/2/3)& \\ Hitfile: &1 \\ (yes=1/no=0)& \\ Min-Protein-Length &50 \\ (\textgreater=15)& \\ Min-Result-Percentage: &0.0000 \\ Extended-Modus &1 \\ (yes=1/no=0)& \\ Homology-Modus &0 \\ (yes=1/no=0)& \\ Codon-Modus &1 \\ (1/2/3)& \\ \hline \end{tabular} \begin{tabular}{l} Content: \\ - date of program execution \\ - used program parameters \end{tabular} \subsection{Sequence-Section of the \MetagenomeThreader result} \label{example-sequence} \begin{tabular}{|p{16.5 cm}p{0.5 cm}|} \hline Query-DNA-Entry Section&A \\ & \\ Query-DNA-Def: read\_11$\vert$beg$\vert$21$\vert$length$\vert$987$\vert$forward$\vert$NC\_000961$\vert$read\_12$\vert$chimeric$\vert$false$\vert$gi & \\ Query-DNA-Sequence& \\ \small{tataaaatagccaaatctgagcctaaaagcccttggatatccatgatttagaacgaaccatcccctcttattcaggagaagttttctgaactcttcaacatcctcga...}& \\ \hline \end{tabular} \begin{tabular}{|p{16.5 cm}p{0.5 cm}|} \hline Coding-DNA-Entry-Section&B \\ & \\ Coding-DNA& \\ \small{tataaaatagccaaatctgagcctaaaagcccttggatatccatgatttagaacgaaccatcccctcttattcaggagaagttttctgaactcttcaacatcctcga...}& \\ Protein-Sequence& \\ \small{MLLREVTREERKNFYTNEWKVKDIPDFIVKTLELREFGFDHSGEGPSDRKNQYTDIRDLEDYIRATA...}& \\ Hit-Information Section& \\ gi-nr: gi18892016 gi-def: \small{Pyrococcus furiosus DSM 3638, section 12 of 173... from: 6558 to: 7299}& \\ gi-nr: gi9453868 gi-def: \small{Pyrococcus furiosus priA gene for DNA primase... from: 1 to: 642}& \\ gi-nr: gi3342818 gi-def: \small{Thermophilic archaeon Bonch-Osmolovskaya primase... from: 21 to: 341}& \\ \hline \end{tabular} \begin{tabular}{p{1cm}p{15,7cm}} Content: \\ \mbox{- A:} &Output of the metagenome sequence and the metagenome sequence definition \\ \mbox{- B:} &for every PCS \\ & \begin{tabular}{p{0,1cm}p{14.9cm}} \mbox{-}& PCS DNA-sequence \\ \mbox{-}& PCS amino acid sequence \\ \mbox{-}& for the PCS processing used hit-definition \end{tabular} \end{tabular} \subsection{Statistic-Section of the \MetagenomeThreader result} \begin{tabular}{|r p{12.5 cm}|} \hline 0.7764& Salmonella enterica subsp. enterica serovar Choleraesuis str. SC-B67 \\ 0.7764& Salmonella typhimurium LT2, section 22 of 220 of the complete genome \\ 14.2553& Vibrio cholerae O395 chromosome 2, complete genome \\ 7.1809& Pyrococcus furiosus DSM 3638, section 12 of 173 of the complete genome \\ 0.2029& Escheria coli K12 MG1655, complete genome \\ \hline \end{tabular} \begin{tabular}{p{0,1cm}p{14cm}} Content: \\ - &percentage of hit-sequence length vs. length of all hit-sequences used for the PCS prediction \\ - &BLAST-hit definitions \end{tabular} In the HTML-format the GI-number of the BLAST-hits is a hyperlink to the linked NCBI entry. \Attention It is recommended that the hit-sequence file is stored at two different locations because if an existing hit-sequence file is used and the \MetagenomeThreader is called without \Showoption{t} \Showoptionarg{yes}, the hit-sequence file will be overwritten and a new scan of the nucleotide database and / or an online query of the hit-sequences has to be performed. %\bibliographystyle{plain} %\bibliography{references} \begin{thebibliography}{1} \bibitem{krause} L.~Krause \textit{et al}. \newblock Finding novel genes in bacterial communities isolated from the environment. \textit{Bioinformatics}, 22:e281-e289, 2006. \bibitem{genometools} G.~Gremme. \newblock The \textsc{GenomeTools} genome analysis system. \url{http://genometools.org}. \end{thebibliography} \end{document} genometools-1.5.1/doc/manuals/optionman.sty000066400000000000000000000030001211610345200210070ustar00rootroot00000000000000\usepackage{xspace} \newcommand{\Showoption}[1]{\mbox{\footnotesize \texttt{-#1}}} \newcommand{\Showoptiongroup}[1]{\hline\multicolumn{2}{c}{#1}\\[.2cm]} \newcommand{\Showoptionarg}[1]{\mbox{\footnotesize \textit{#1}}\index{#1@\textit{#1}}} \newcommand{\Showoptionalarg}[1]{\lbrack\Showoptionarg{#1}\rbrack} \newcommand{\Showoptionkey}[1]{\mbox{\footnotesize \texttt{#1}}} \newcommand{\Showrecentchange}[2]{\paragraph{#1; #2:}} \newcommand{\Option}[3]{% \item[\Showoption{#1}~#2]\mbox{}% \index{Option!\texttt{-#1}}% \\% #3} \newcommand{\Showformattype}[1]{\textsc{#1}\xspace} \newcommand{\Fasta}{\Showformattype{Fasta}} \newcommand{\Fastastart}[0]{\texttt{\symbol{62}}\xspace} \newenvironment{Showprogramwithoptions}[2]{ The program is called as follows: \par \noindent#1 [\emph{options}] \emph{indexname} \par #2 \par And here is a description of the options: \par \begin{list}{}{} }{\end{list}} \newenvironment{Showprogramwithoptionswithoutindex}[2]{ The program is called as follows: \par \noindent#1 \emph{options} \par #2 \par And here is a description of the options: \par \begin{list}{}{} }{\end{list}} \newenvironment{Justshowoptions}[0]{ \begin{list}{}{} }{\end{list}} \newcommand{\Helpoption}[0]{ \Option{help}{}{ Show a summary of all options and terminate with \index{exit code} exit code 0. } } \newenvironment{Output}{% \begin{scriptsize} \begin{alltt}}{% \end{alltt} \end{scriptsize}% \addvspace{-\medskipamount} } \parindent0pt \parskip5pt genometools-1.5.1/doc/manuals/output/000077500000000000000000000000001211610345200176115ustar00rootroot00000000000000gt-suffixerator--dna--pl--tis--suf--lcp--v--parts-4--db-read1.fna-read2.fna--indexname-reads.out000066400000000000000000000021371211610345200402340ustar00rootroot00000000000000genometools-1.5.1/doc/manuals/output$ gt suffixerator -dna -pl -tis -suf -lcp -v -parts 4 -db read1.fna read2.fna -indexname reads # dna=yes # indexname="reads" # prefixlength=automatic # storespecialcodes=false # parts=4 # inputfile[0]=read1.fna # inputfile[1]=read2.fna # indexname=reads # outtistab=true,outsuftab=true,outlcptab=true,outbwttab=false,outbcktab=false,outdestab=false # sizeof (Seqpos)=32 # specialranges of length 1: 17180 # specialranges of length 2: 764 # specialranges of length 3: 53 # specialranges of length 4: 9 # specialranges of length 5: 4 # init character encoding (uchar,241249 bytes,2.50 bits/symbol) # deliverchar=delivercharViauchartablesSpecialrange # specialcharacters=18923 # specialranges=18010 # realspecialranges=18010 # occurrences(a)=200061 # occurrences(c)=155192 # occurrences(g)=167557 # occurrences(t)=230643 # automatically determined prefixlength = 8 # sizeof (leftborder)=262148 # sizeof (countspecialcodes)=65536 # sizeof (distpfxidx)=21868 # widthofpart[0]=188406 # widthofpart[1]=188330 # widthofpart[2]=188355 # widthofpart[3]=188362 # space peak in megabytes: 1.42 # mmap space peak in megabytes: 0.00 genometools-1.5.1/doc/manuals/output/gt-tagerator--q-Q1.gz--maxocc-10--pck-pck-human.out000066400000000000000000000010071211610345200304250ustar00rootroot00000000000000$ gt tagerator -q Q1.gz -maxocc 10 -pck pck-human # computing matching statistics # indexname(pck)=pck-human # queryfile=Q1.gz # for each match show: tagnum tagseq dblength dbstartpos strand taglength # 0 15 aagcttgctgctgca 10 + 88693 9 + 88694 213545 8 + 25583 88695 213546 281700 325202 451235 747565 12 + 470064 11 + 470065 10 + 158315 363967 470066 501203 576660 729958 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 12 - 271321 11 - 271322 10 - 271323 9 - 217234 271324 762404 8 - 146318 216480 217235 271325 294145 762405 genometools-1.5.1/doc/manuals/output/gt-tagerator--q-Q1.gz--pck-pck-human--e-1--maxocc-5.out000066400000000000000000000010031211610345200310020ustar00rootroot00000000000000$ gt tagerator -q Q1.gz -pck pck-human -e 1 -maxocc 5 # computing prefix matches with up to 1 differences and at most 5 occurrences in the subject sequences # indexname(pck)=pck-human # queryfile=Q1.gz # for each match show: tagnum tagseq dblength dbstartpos strand taglength # 0 15 aagcttgctgctgca 8 1264 122 + 8 8 549 197 + 8 8 734 280 + 8 9 699 24 + 8 9 1060 311 + 8 9 1594 18 + 9 9 1475 90 + 9 9 1022 445 + 9 9 718 87 + 9 9 913 382 + 9 9 835 315 + 9 9 855 408 + 9 8 1534 258 + 7 8 1264 121 + 7 8 1476 281 + 7 genometools-1.5.1/doc/manuals/output/gt-tagerator--q-Q1.gz--pck-pck-human--e-2.out000066400000000000000000000010421211610345200273170ustar00rootroot00000000000000$ gt tagerator -q Q1.gz -pck pck-human -e 2 # computing complete matches with up to 2 differences # indexname(pck)=pck-human # queryfile=Q1.gz # for each match show: tagnum tagseq dblength dbstartpos strand # 0 aagcttgctgctgca 14 904 114 + 13 1439 224 + 13 1250 191 + 13 413 155 + 13 468 294 + 15 1158 74 + 14 227 311 + 13 1439 111 + 15 496 288 + 15 356 327 + 15 1690 336 + 13 1439 223 + 13 1250 190 + 14 1178 82 + 14 204 59 + 14 273 46 + 14 1156 136 + 14 803 343 + 15 1439 222 + 15 1250 189 + 15 803 342 + 16 1474 165 - # 1 atttgggactgtatctca gt-tallymer-mkindex--mersize-19--minocc-4--indexname-tyr-reads--counts--pl--esa-reads.out000066400000000000000000000004761211610345200375620ustar00rootroot00000000000000genometools-1.5.1/doc/manuals/output$ gt tallymer mkindex -scan -mersize 19 -minocc 4 -indexname tyr-reads -counts -pl -esa reads # construct mer buckets for prefixlength 4 # numofcodes = 256 # indexfilename = tyr-reads # alphasize = 4 # mersize = 19 # numofmers = 3166 # merbytes = 5 # space peak in megabytes: 0.06 # mmap space peak in megabytes: 3.93 genometools-1.5.1/doc/manuals/output/gt-tallymer-mkindex--mersize-19--minocc-40--esa-reads.out000066400000000000000000000010631211610345200317030ustar00rootroot00000000000000$ gt tallymer mkindex -scan -mersize 19 -minocc 40 -esa reads 1 444720 2 30886 3 3909 4 1397 5 640 6 335 7 111 8 172 9 39 10 16 11 9 12 82 13 27 14 53 15 27 16 11 17 12 18 17 19 21 20 36 21 27 22 13 23 2 24 5 25 12 26 11 27 6 28 13 29 4 31 1 32 5 33 1 34 9 35 10 36 9 37 8 38 4 39 11 40 8 ttcgacaacacccgtcaag tcggattcgacaacacccg tcgacaacacccgtcaagt tcatcggattcgacaacac cggattcgacaacacccgt cgacaacacccgtcaagtc catcggattcgacaacacc atcggattcgacaacaccc 41 2 gacaacacccgtcaagtcc acaacacccgtcaagtcca # space peak in megabytes: 0.06 # mmap space peak in megabytes: 3.93 gt-tallymer-occratio--output-unique-nonunique--mersizes-10-13-17--esa-reads.out000066400000000000000000000004741211610345200360070ustar00rootroot00000000000000genometools-1.5.1/doc/manuals/output$ gt tallymer occratio -scan -output unique nonunique -mersizes 10 13 17 -esa reads # distribution of unique mers 10 223755 13 465859 17 455449 # distribution of non unique mers (counting each non unique mer only once) 10 135526 13 49611 17 39769 # space peak in megabytes: 0.06 # mmap space peak in megabytes: 3.93 gt-tallymer-occratio--output-unique-nonunique--minmersize-10--maxmersize-20--esa-reads.out000066400000000000000000000007371211610345200403420ustar00rootroot00000000000000genometools-1.5.1/doc/manuals/output$ gt tallymer occratio -scan -output unique nonunique -minmersize 10 -maxmersize 20 -esa reads # distribution of unique mers 10 223755 11 373775 12 444083 13 465859 14 468735 15 465646 16 460791 17 455449 18 450049 19 444720 20 439532 # distribution of non unique mers (counting each non unique mer only once) 10 135526 11 92162 12 62347 13 49611 14 44618 15 42301 16 40867 17 39769 18 38815 19 37961 20 37166 # space peak in megabytes: 0.06 # mmap space peak in megabytes: 3.93 gt-tallymer-occratio--output-unique-relative--minmersize-10--maxmersize-20--esa-reads.out000066400000000000000000000005611211610345200401270ustar00rootroot00000000000000genometools-1.5.1/doc/manuals/output$ gt tallymer occratio -scan -output unique relative -minmersize 10 -maxmersize 20 -esa reads # distribution of unique mers 10 223755 0.623 11 373775 0.802 12 444083 0.877 13 465859 0.904 14 468735 0.913 15 465646 0.917 16 460791 0.919 17 455449 0.920 18 450049 0.921 19 444720 0.921 20 439532 0.922 # space peak in megabytes: 0.06 # mmap space peak in megabytes: 3.93 gt-tallymer-search--output-qseqnum-qpos-counts-sequence--tyr-tyr-reads--q-U89959.fna.out000066400000000000000000000015571211610345200377110ustar00rootroot00000000000000genometools-1.5.1/doc/manuals/output$ gt tallymer search -output qseqnum qpos counts sequence -tyr tyr-reads -q U89959.fna 0 +5966 4 tcttcttcttcttcttctt 0 +17269 14 atatatatatatatatata 0 +17270 12 tatatatatatatatatat 0 +17271 14 atatatatatatatatata 0 +17272 12 tatatatatatatatatat 0 +71281 6 tcatcatcatcatcatcat 0 +71282 4 catcatcatcatcatcatc 0 +71283 6 atcatcatcatcatcatca 0 +71284 6 tcatcatcatcatcatcat 0 +71285 4 catcatcatcatcatcatc 0 +71286 6 atcatcatcatcatcatca 0 +71287 6 tcatcatcatcatcatcat 0 +77815 14 atatatatatatatatata 0 +77816 12 tatatatatatatatatat 0 +77817 14 atatatatatatatatata 0 +77818 12 tatatatatatatatatat 0 +77819 14 atatatatatatatatata 0 +77820 12 tatatatatatatatatat 0 +77821 14 atatatatatatatatata 0 +77822 12 tatatatatatatatatat 0 +77823 14 atatatatatatatatata 0 +77824 12 tatatatatatatatatat 0 +77825 14 atatatatatatatatata 0 +77826 12 tatatatatatatatatat 0 +77827 14 atatatatatatatatata genometools-1.5.1/doc/manuals/packedindex.tex000066400000000000000000000376731211610345200212720ustar00rootroot00000000000000\documentclass[12pt,titlepage]{article} \usepackage[a4paper,top=30mm,bottom=30mm,left=20mm,right=20mm]{geometry} \usepackage{url} \usepackage{alltt} \usepackage{xspace} \usepackage{times} \usepackage{listings} \usepackage{bbm} \usepackage{verbatim} \usepackage{comment} \usepackage{optionman} \newcommand{\packedindex}{\textit{packedindex}\xspace} \newcommand{\GenomeTools}{\textit{GenomeTools}\xspace} \newcommand{\Suffixerator}{\textit{Suffixerator}\xspace} \newcommand{\Gt}{\texttt{gt}\xspace} \newcommand{\Gtsuffixerator}{\texttt{gt suffixerator}\xspace} \newcommand{\Gtpackedindex}{\texttt{gt packedindex}\xspace} \newcommand{\species}[1]{{\fontshape{it}\selectfont #1}}% \title{\packedindex manual} \author{\begin{tabular}{c} \textit{Thomas Jahns}\\ \textit{Stefan Kurtz}\\[1cm] Research Group for Genomeinformatics\\ Center for Bioinformatics\\ University of Hamburg\\ Bundesstrasse 43\\ 20146 Hamburg\\ Germany\\[1cm] \url{kurtz@zbh.uni-hamburg.de}\\[1cm] \begin{tabular}{p{0.8\textwidth}} % In any documentation or publication about research using \LTRharvest % please cite the following paper:\\[5mm] % D.~Ellinghaus, S.~Kurtz, and U.~Willhoeft. % \LTRharvest, an efficient and flexible software for de novo % detection of LTR retrotransposons. % BMC Bioinformatics 2008, 9:18 \end{tabular} \end{tabular}} \begin{document} \maketitle \section{Introduction} \label{Introduction} The \packedindex tools of the \GenomeTools package facilitate the creation of sequence index files which implement the FM index\cite{oai:CiteSeerPSU:481302} concept for biological sequences with some more recent features incorporated\cite{journals/talg/FerraginaMMN07}. The \packedindex routines and tools are written in \texttt{C} and are part of the \GenomeTools library \cite{genometools}. \packedindex methods are called as part of the single binary named \Gt. The \packedindex tools depend on routines of the \Suffixerator program to prepare the data stored in the index. Many command-line options are therefore the same. \section{Command line tools} \label{Usage} Some text is highlighted by different fonts according to the following rules. \newcommand{\toolname}[1]{\texttt{\bfseries #1}} \newcommand{\toolarg}[1]{\texttt{\itshape #1}} \newcommand{\tooloption}[1]{\texttt{-#1}} \newcommand{\tooloptionarg}[1]{\texttt{#1}} \begin{itemize} \item \toolname{toolname} is used for the names of software tools. \item \toolarg{filename} is used for file names. \item \tooloption{option} is used for program options. \item \tooloptionarg{argument} is used for the argument(s) of an option. \end{itemize} \subsection{The \packedindex tools} \label{Overview} The creation and integrity checks of the \packedindex tools are available as a sub-tool of \Gt. Each of those is called by giving \toolname{packedindex} as the first argument of the \toolname{gt} command-line. %\Gtltrharvest \Showoption{index} \Showoptionarg{indexname} $[$\emph{options}$]$% % %where \Showoptionarg{indexname} denotes the enhanced suffix array index of %the target sequence(s) constructed by the program \Suffixerator. %An overview of all possible options with a short one-line description of %each option is given in Table \ref{overviewOpt}. %All options can be specified only once. \subsubsection{Options common to all tools} \label{sec:packedindex:commonoptions} \begin{Justshowoptions} % \Option{v}{}{ % This option enables the verbose mode. This means, that some more information % about the processing will be printed to \texttt{stdout} during the run. % This includes a long list of switched on or switched off options. % } \Option{help}{}{ Prints a summary of available options to standard output and terminates with exit code $0$. } \Option{v}{}{ Turns on verbose progress information. } \Option{version}{}{ Displays \toolname{genometools} version information. } \end{Justshowoptions} \subsubsection{The creation of packedindex files} \label{sec:packedindex:mkindex} The command to build a \packedindex is \begin{quote} \ttfamily% \toolname{gt} \toolname{packedindex} \toolname{mkindex} [{\rmfamily Options}] \tooloption{db} \toolarg{sequenceinput...} \end{quote} The following options are specific to the \packedindex \toolname{mkindex} tool: \begin{table}[htbp] \caption{Overview of the \packedindex \toolname{mkindex} options.} \begin{footnotesize} \[ \renewcommand{\arraystretch}{0.89} \begin{tabular}{ll}\hline \Showoption{bsize}& specify the number of symbols joined in a block \\ \Showoption{blbuck}& specify number of blocks to join in a bucket \\ \Showoption{locfreq}& specify interval at which locate marks will be inserted \\ \Showoption{locbitmap}& force/deny use of the bitmap tagging method \\ \Showoption{sprank}& build source rank table so that regeneration of original sequence is possible without the usual gaps \\ \Showoption{sprankilog}& define log of interval used for the intermediate table \\ \hline \end{tabular} %\input{ltrprogoptions} \] \end{footnotesize} \label{tab:packedindex:mkindex:options} \end{table} Except for the output options \Showoption{suf}, \Showoption{lcp}, and \Showoption{bwt}, all other options are the same as used for the \toolname{suffixerator} tool. %%%% \begin{Justshowoptions} \Option{bsize}{\Showoptionarg{u}}{ Group \Showoptionarg{u} symbols in one block. While bigger blocks can speed up index access, the block size should be chosen so that \begin{displaymath} \alpha^u u\lceil\log_2 \alpha\rceil \end{displaymath} does not exceed the relevant cache size (typically of the 2nd level chache) of the system. The default of a block size of 8 results in a lookup-table size of 128kiB for the DNA alphabet. Systems with larger 2nd level cache like 4MiB on the Intel Core2 Duo might show improved performance when choosing block size 10. } \Option{blbuck}{\Showoptionarg{k}}{ Group this many blocks so that every atomic query of the index will on average require $\frac{k}{2}$ lookups of the block table (see option \Showoption{bsize}). While smaller blocks decrease query times, the corresponding increase in memory usage of the index will eventually defeat this effect. } \Option{locfreq}{\Showoptionarg{f}}{ Put location marks at interval \Showoptionarg{f} into the index. For a sequence of length $n$, $\frac{n}{f}\lceil\log_2n\rceil$ bits of storage will be required. Locate queries (i.e. finding the position of matches) will require $\frac{f}{2}$ operations. Again having an index that does not fit main memory will eventually defeat the speed gains of lower intervals. } \Option{locbitmap}{\Showoptionarg{yes} or \Showoptionarg{no}}{ Force/disable the use of a bitmap for locate marks. Finding marked positions will be faster if a bitmap is used but will require $n$ bits for a sequence of length $n$. If no locate bitmap is used, extra space usage will be $\frac{n}{f}\lceil\log_2uk\rceil$. By default the optimal value in terms of space usage will be chosen. } \Option{sprank}{\Showoptionarg{yes} or \Showoptionarg{no}}{ Normally special characters (N/X, separators and terminator) are encoding so that the reverse mapping required for context regeneration cannot pass over such symbols. If this option is given, an in-memory structure will be built to facilitate queries which allow to store necessary extra information in the index so that full context (the entire original sequence actually) can be regenerated. } \Option{sprankilog}{\Showoptionarg{$s$}}{ Set logarithm of interval used for the intermediate table (see \Showoption{sprank} option). Index creation might be faster if a lower value than the default $s = \log_2\log_2n$ is used and sufficient memory is available. Since every increment by 1 doubles the memory usage of the table (which is not stored itself in the index) during index construction two high values might actually slow index construction. } \Option{ctxilog}{\Showoptionarg{$c$}}{ Set logarithm of interval to use for the creation of a reverse lookup table. Said table will be stored alongside the index in a file with the same name prefix but suffix \toolarg{.$c$cxm} so that multiple reverse lookup accelerator tables can be stored for one index. So it's possible to load the one fitting available memory best later. The reverse lookup table is restricted to indices computed with the \Showoption{sprank} option. In those cases the index can replace the encoded sequence (stored in \toolarg{prefix.esq}) completely. The reverse suffix indices will be sampled at interval length $2^c$ } \end{Justshowoptions} %%%% \subsubsection{Building reverse lookup tables after index creation} \label{sec:packedindex:mkctxmap} The \toolname{mkctxmap} sub-tool facilitates late building of a reverse lookup table, it can use the \toolarg{prefix.suf} table as well as the locate information inside the packedindex structure (i.e. of any packedindex not constructed with \tooloption{locfreq} set to 0). The \toolname{mkctxmap} sub-tool only accepts the \tooloption{-ctxilog}, \tooloption{-v}, \tooloption{-version}, and \tooloption{-help} options already described for the \toolname{packedindex mkindex} tool. Given a previously computed suffix array or packedindex project \toolarg{chr01}, one can build an additional reverse lookup-table with interval 32 like this: \begin{footnotesize} \begin{verbatim} $ gt packedindex mkctxmap -ctxilog 5 chr01 \end{verbatim} \end{footnotesize} \subsubsection{Deriving packedindex files from a suffix array} \label{sec:packedindex:trsuftab} The \toolname{trsuftab} sub-tool will translate an index by reading suffix array and encoded sequence files. Thus the options specific to the packedindex properties are the same as previously shown~\ref{sec:packedindex:mkindex} but the suffixerator options are not available. Instead the latter are implicit in the properties of the suffix array and encoded sequence indices used as input for this tool. Thus to produce a packedindex with default options where a suffix array has already been created in chr01.\{prj$|$suf$|$esq\} use: \begin{footnotesize} \begin{verbatim} $ gt packedindex trsuftab chr01 \end{verbatim} \end{footnotesize} \subsubsection{packedindex integrity check tool} \label{sec:packedindex:chkintegrity} The integrity check tool is intended to verify that an index correctly represents the encoded BWT sequence. Therefore the .bwt file for the index project in question must have been generated as a prerequisite for this check. To check a \packedindex index file BWT sequence representation issue \begin{quote} \ttfamily% \toolname{gt} \toolname{packedindex} \toolname{chkintegrity} [{\rmfamily Options}] \toolarg{indexname} \end{quote} where \toolarg{indexname} refers to the name given previously on index creation (or automatically derived from the sequence input file set). The .bwt table file must have previously been generated with the \toolname{suffixerator} tool. See section~\ref{sec:packedindex:examples} for an example. \begin{table}[htbp] \caption{Overview of the \packedindex \toolname{chkintegrity} options.} \begin{footnotesize} \[ \renewcommand{\arraystretch}{0.89} \begin{tabular}{ll}\hline \Showoption{skip}& specify the number of symbols to skip before starting the comparison \\ \Showoption{ticks}& print a dot after this many symbols processed correctly \\ \Showoption{ext-rank-check}& do additional checks of rank query results \\ \hline \end{tabular} %\input{ltrprogoptions} \] \end{footnotesize} \label{tab:packedindex:chkintegrity:options} \end{table} \begin{Justshowoptions} \Option{skip}{\Showoptionarg{k}}{ Start the comparison \Showoptionarg{k} has to be a positive integer. If this option is not selected by the user, then \Showoptionarg{$L_{ex}$} is set to $30$ by default. } \Option{ticks}{\Showoptionarg{$k$}}{ As a form of progress meter, print a dot after $k$ symbols of the packedindex and the reference file (\toolarg{indexname.bwt}) compared equal and rank information was computed correctly. } \Option{ext-rank-check}{\Showoptionarg{yes$\|$no}}{ If yes, enables additional checks of the rank results, i.e. for all positions rank queries will be computed for all symbols of the alphabet and not only for the symbol for which the rank value changed in the reference. } \end{Justshowoptions} \subsubsection{Check \packedindex search accuracy tool} This check verifies that a packedindex correctly represents both the original sequence and correctly delivers the exact same search results as the suffix array. To check a \packedindex index file issue \begin{quote} \ttfamily% \toolname{gt} \toolname{packedindex} \toolname{chksearch} [{\rmfamily Options}] \toolarg{indexname} \end{quote} where \toolarg{indexname} refers to the name given previously on index creation (or automatically derived from the sequence input file set). The encoded sequence (\toolarg{.esq}) and suffix array table (\toolarg{.suf}) must have been previously generated with the \toolname{suffixerator} tool. \begin{table}[htbp] \caption{Overview of the \packedindex \toolname{chksearch} options.} \begin{footnotesize} \[ \renewcommand{\arraystretch}{0.89} \begin{tabular}{ll}\hline \Showoption{minpatlen}& shortest pattern length \\ \Showoption{maxpatlen}& longest pattern length \\ \Showoption{ticks}& print a dot after this many symbols processed correctly \\ \Showoption{nsamples}& generate this many patterns to search for \\ \Showoption{chksfxarray}& do additional checks of stored suffix array data \\ \hline \end{tabular} %\input{ltrprogoptions} \] \end{footnotesize} \label{tab:packedindex:chksearch:options} \end{table} \begin{Justshowoptions} \Option{minpatlen}{\Showoptionarg{$l$}}{ Perform searches for patterns that are at least of length $l$. } \Option{maxpatlen}{\Showoptionarg{$m$}}{ Perform searches for patterns that are at most of length $l$. } \Option{nsamples}{\Showoptionarg{$k$}}{ Generate $k$ patterns to search for, defaults to 1000. } \Option{chksfxarray}{\Showoptionarg{yes$\|$no}}{ Verify integrity of stored suffix array positions and test the regenerated context functionality if the index was constructed in a reversible fashion (option \Showoption{sprank} on index construction). In the latter case the test will take considerable time. } \Option{ticks}{\Showoptionarg{$k$}}{ Print a dot after this many searches completed correctly. If \Showoption{chksfxarray} is set, also prints a dot for every $k$ suffix array values compared. } \end{Justshowoptions} \section{Examples} \label{sec:packedindex:examples} \subsection{Create an index for sequence data from the \toolarg{gttestdata} repository\cite{gttestdata}} \label{sec:packedindex:examples:yeast} Amongst the more voluminous sequence data sets there is the \species{Saccharomyces cerevisiae} genome in the \toolarg{ltrharvest/s\_cer} sub-directory. This example will show how to build an index for chromosome 1 (file \toolarg{chr01.19960731.fsa.gz}). First compute the \packedindex index file (this assumes \toolarg{chr01.19960731.fsa.gz} has been copied/linked to the current directory and the gt binary is in the PATH): \begin{footnotesize} \begin{verbatim} $ gt packedindex mkindex -db chr01.19960731.fsa.gz -indexname chr01 -tis -des # TIME determining sequence length and number of special symbols 0.04 # TIME computing sequence encoding 0.04 [...] # TIME overall 0.71 $ \end{verbatim} \end{footnotesize} Then build the reference files that the index subsumes: \begin{footnotesize} \begin{verbatim} $ gt suffixerator -db chr01.19960731.fsa.gz -indexname chr01 -bwt -suf -des # TIME determining sequence length and number of special symbols 0.04 # TIME computing sequence encoding 0.04 [...] # TIME overall 0.31 $ \end{verbatim} \end{footnotesize} This index can then be verified or used in one of the tools supporting it. For integrity check use: \begin{footnotesize} \begin{verbatim} $ gt packedindex chkintegrity chr01 # Using index over sequence 230210 symbols long. [...] .. $ gt packedindex chksearch chr01 Using pre-computed sequence index. [...] Finished 1000 of 1000 matchings successfully. $ \end{verbatim} \end{footnotesize} \bibliographystyle{unsrt} \bibliography{gtmanuals} \end{document} genometools-1.5.1/doc/manuals/readjoiner.tex000066400000000000000000000437561211610345200211340ustar00rootroot00000000000000\documentclass[12pt,titlepage]{article} \usepackage[a4paper,top=30mm,bottom=30mm,left=20mm,right=20mm]{geometry} \usepackage{url} \usepackage{alltt} \usepackage{xspace} \usepackage{times} \usepackage{listings} \usepackage{bbm} \usepackage{verbatim} %\usepackage[dvips]{hyperref} \usepackage{optionman} \newcommand{\GenomeTools}{\textit{GenomeTools}\xspace} \newcommand{\Readjoiner}{\textit{Readjoiner}\xspace} \newcommand{\Rdjprefilter}{\textit{Readjoiner Prefilter}\xspace} \newcommand{\Rdjoverlap}{\textit{Readjoiner Overlap}\xspace} \newcommand{\Rdjassembly}{\textit{Readjoiner Assembly}\xspace} \newcommand{\Gtconvertseq}{\textit{Convertseq}\xspace} \newcommand{\Gtreadreads}{\textit{Readreads}\xspace} \newcommand{\Gtsuffixerator}{\textit{Suffixerator}\xspace} \newcommand{\Gtcmd}{\texttt{gt}\xspace} \newcommand{\Readjoinercmd}{\texttt{gt readjoiner}\xspace} \newcommand{\Rdjprefiltercmd}{\texttt{gt readjoiner prefilter}\xspace} \newcommand{\Rdjoverlapcmd}{\texttt{gt readjoiner overlap}\xspace} \newcommand{\Rdjassemblycmd}{\texttt{gt readjoiner assembly}\xspace} \newcommand{\Gtconvertseqcmd}{\texttt{gt convertseq}\xspace} \newcommand{\Gtreadreadscmd}{\texttt{gt dev readreads}\xspace} \newcommand{\Gtsuffixeratorcmd}{\texttt{gt suffixerator}\xspace} \newcommand{\minlen}{\ell} \title{\Huge{\Readjoiner 1.2:\\ User manual.}\\[3mm] \Large{A fast and memory efficient \\string graph-based sequence assembler.}} \author{\begin{tabular}{c} \textit{Giorgio Gonnella}\\ \textit{Stefan Kurtz}\\[2cm] Research Group for Genome Informatics\\ Center for Bioinformatics\\ University of Hamburg\\ Bundesstrasse 43\\ 20146 Hamburg (Germany)\\[1cm] \url{gonnella@zbh.uni-hamburg.de}\\ \url{kurtz@zbh.uni-hamburg.de}\\[1cm] \end{tabular}} \begin{document} \maketitle \section{Introduction} \label{Introduction} \Readjoiner is a software pipeline for the \textit{de novo} assembly of sequencing readsets, based on the assembly string graph framework \cite{MYE:2005}. \Readjoiner is written in \texttt{C} and it is based on the \GenomeTools library \cite{genometools}. It has no external library dependencies and may be compiled on any POSIX-compliant operative system. \Readjoiner is implemented as a collection of tools, all compiled in the single \GenomeTools binary named \Gtcmd. The \Readjoiner assembly pipeline consists in the following phases:\\[3mm] \begin{tabular}{lll} Phase & Tool & Description \\ \textit{Prefiltering} & \Rdjprefiltercmd & encode reads, remove contained and ambiguous\\ \textit{Overlap} & \Rdjoverlapcmd & determine all pairs suffix-prefix matches (SPMs) \\ \textit{Assembly} & \Rdjassemblycmd & build the string graph, output the contigs \\ \end{tabular} \Readjoiner can be installed either from a binary distribution or from the source code. In both cases, you will have the binary file \texttt{gt}. The rest of the manual assumes this binary is in the command line path. The \Readjoiner tools are run using the following syntax: \texttt{gt readjoiner }, where \texttt{} is either prefilter, overlap or assembly. The arguments are different, depending on the tool, however some options are common: \begin{itemize} \item \Showoption{help} will show an useful help message on the command line, with a summary of the most important options. \item \Showoption{help+} will show an expanded help message, in which further less common options are also listed. \item \Showoption{v} increases the verbosity. \item \Showoption{q} suppresses all output messages. \end{itemize} \subsection{Installation from the source code} For installation from the source code, please read the instruction in the \texttt{INSTALL} file (in the main directory of the sources). In most cases a 64-bit version is necessary, so make sure you use the \texttt{64bit=yes} make flag. External dependencies such as cairo and curses are not necessary for \Readjoiner, thus if you plan to use only \Readjoiner you may safely choose to use the \texttt{cairo=no curses=no} make flags. If you use the \texttt{amalgamation=yes} make flag, you will probably notice a significative speed-up, thus this option is reccomended. Further improvements in the runtime can be achieved by using \texttt{assert=no}: this skips all runtime assertions; if you encounter any problem by running \Readjoiner then you should (re-)compile using assertions before reporting a bug, as assertions are an useful source of information for the developer. Using the option \texttt{threads=yes} you can enable multithreading support. Currently the overlap phase can be run in parallel mode, thus this option is reccomended if \Readjoiner is run on a multi-core or multi-processor machine. \section{Error correction} Most sequencing technologies generate reads which contain technology-specific errors. For example, 454 and IonTorrent reads will contain mainly indels in homopolymeric regions, while Illumina reads will contain mainly substitution errors. An error correction prior to genome assembly is an essential step, and it is very important for Readjoiner, that the input reads have been already processed using an error correction tool. A number of stand-alone error correction tools exists: an example of a tool with a good performance on subsitution errors in Quake (Kelley et al., 2010). For homopolymer errors if a reference sequence is available, have a look to our error corrector HOP, also a part of GenomeTools. For susbtitution errors there is also an experimental support in Readjoiner of k-mer based error correction. If you want to try it, run \texttt{gt dev seqcorrect -help} for more information. %\newpage \section{Prefiltering} Readjoiner prefiltering step has the following functions: \begin{itemize} \item Remove ambiguity-containing reads \item Remove redundant information (duplicate and suffix/prefix reads) \item Encode the readset in GtEncseq format \end{itemize} \subsection{Describing the read set} The input to \Rdjprefilter consists of sequencing reads, in FastQ or Fasta format. The input is specified using the \Showoption{db} option, which takes multiple arguments, each argument describes a sequencing library. For single-end libraries, the corresponding argument of \Showoption{db} is simply the filename. Paired-end libraries are accepted in two variants: \textit{two-files} libraries, where a file contains the forward reads and a second file the reverse reads in the same order, and \textit{interleaved} libraries, consisting of a single file, where the first, third, fifth, etc sequences are the forward reads, the second, fourth, sixth, etc sequences are the reverse reads. For two-files libraries, the argument of \Showoption{db} is in the format \verb|::[,]| where \verb// are filenames, \verb|| is the average insert size and \verb|| is the standard deviation of insert sizes (which can be omitted if unknown). For interleaved libraries the library is specified as \verb|:[,]|. Some examples:\\[3mm] \begin{tabular}{p{0.5\textwidth}p{0.45\textwidth}} Argument of \Showoption{db} & Meaning:\\ \hline \Showoptionarg{se.fas} & single-end library (\texttt{se.fas})\\ \hline \Showoptionarg{pe.fastq:200} & interleaved paired-end library with average insert size of 200, standard deviation unknown\\ \hline \Showoptionarg{pe\_f.fastq:pe\_r.fastq:10000} & a paired-end library in two files, with average insert size of about 10kb, standard deviation unknown\\ \hline \Showoptionarg{se.fastq pe.fastq:180,20} & a single-end library plus an interleaved paired-end library with average insert size of 180, standard deviation 20\\ \hline \Showoptionarg{short.fastq:100 long\_f.fastq:long\_r.fastq:10000,1200 se.fastq} & an interleaved paired-end library with insert size 100 plus a two-files paired-end library with insert size 10000, standard deviation 1200, and a single-end library\\ \hline \end{tabular} %\newpage \subsection{Setting the read set name} The argument of the option \Showoption{readset} is the read set name. This will be used as basename for the output and intermediate files and must specified in subsequent calls to the \texttt{overlap} and \texttt{assembly} tools. \subsection{Contained reads} Duplicate reads and suffix/prefix reads (i.e. reads which are suffixes or prefixes of other reads) are contained reads, thus redundant sequence information, which is not represented in the string graph \cite{MYE:2005}. Furthermore, our overlap algorithm assumes that the read set is suffix-prefix-free, thus these reads are recognized and eliminated in the prefiltering phase. Reads are hereby considered from both strands, thus for example a reads which is equal to the reverse complement of another read is also removed. Internally contained reads (reads equal to an internal substring of other reads / reverse complement) are not identified here, but during the \Rdjoverlap step. In a paired-end library, if a read is contained, its mate pair is discarded too, to keep the library balanced. \subsection{Quality scores} Readjoiner supports the input formats FastQ and Fasta. The FastQ format is assumed to use the standard \textit{phred33} scores. As an alternative, \textit{phred64} scores are also supported; in this case the option \Showoption{phred64} must be specified. The only limitation is that it is not possible to mix libraries with \textit{phred33} scores and libraries with \textit{phred64} scores. The quality scores can be used for quality-based trimming. In order to activate this feature, the \Showoption{maxlow} option must be specified, with an argument $n$, which is the maximal number of low-quality bases acceptable in a read. If a read has more than $n$ low-quality bases, it is discarded. The definition of low-quality bases is any base whose associated quality score is at most $l$, where $l$ is an user-defined parameter, by default 3, which can be set using the \Showoption{lowqual} option. \subsection{Ambiguous base calls} Any read containing ambiguities is discarded as low-quality. If you want to keep reads containing ambuigities, you will have to split them at the ambiguity positions or permutate the ambiguities to a random non-ambiguous code using an external program or script. In a paired-end library, if a read is discarded, its mate pair is discarded too, so that the library is still balanced. %\newpage \section{The overlap phase} To construct the string graph, the suffix-prefix matches (SPM) among all pairs of reads must be calculated. Due to the small size of the DNA alphabet (4), small random matches from reads originating from different regions of the original DNA molecule are common. Thus, to avoid spurious matches a minimal match length pameter $\minlen$ is used. Transitive edges are not present in the final string graph \cite{MYE:2005}. \Rdjoverlap matching algorithm allows one to recognize which SPM would correspond to transitive edges in the graph. Thus the graph can be constructed only including the irreducible edges, requiring less memory. The \Rdjoverlap tool computes the list of suffix-prefix matches among all pairs of reads using a suffix sorting and scanning approach. Non-relevant suffixes are excluded, such as those shorter than $\minlen$ or without an initial $k$-mer matching a read or reverse complement of read. An index of the SPM-relevant suffixes is constructed during this phase. The index construction is partitioned in order to limit the space peak. \Readjoiner uses heuristics to automatically calculates a value for this parameter, which is usually a good choice.. However, a memory limit or number of parts can be given as a parameter to control this time vs.\ space tradeoff. If the binary has been compiled with multithreading support, you can specify the number of threads as follows: \texttt{gt -j readjoiner overlap }. \subsection{Running the \Rdjoverlap tool} The input to the \Readjoiner overlap tool is a prefix- and suffix-free readset in \GenomeTools encoded sequence format, usually the output of \Rdjprefilter. The following options shall be used: \begin{Justshowoptions} \Option{readset}{\Showoptionarg{readset}}{ Specify the readset name. The argument should be the same used for the prefilter tool.} \Option{l}{\Showoptionarg{minlen}}{ Specify the minimal SPM length parameter.} \end{Justshowoptions} The minimal SPM length parameter is an essential parameter of the procedure. A too large value will make the pipeline faster, but potentially miss some important matches. A too small value will make the pipeline too slow, and add too many spurious overlaps. We found that the ideal value is in the range $\approx 55-65$ for 100 bp reads. The assembly phase can be repeated using different values of the minimal SPM length, without repeating the overlap phase, as long as these values are larger than the value used in the overlap phase. Therefore, one can choose a little smaller value, e.g. $\approx 50$ during the overlap phase and then test the assembly phase using several values equal or larger than that. The output of the overlap phase consists in one or more \texttt{.spm} files, containing a binary encoded list of the non-redundant irreducible suffix-prefix matches in the readset. It is possible to manually examine the results, by converting this list a text format, using the following command: \texttt{gt readjoiner spmtest -readset -test showlist}. \section{The assembly phase} The \Rdjassembly tool constructs a string graph. Each non-contained read in the sequencing readset is represented by a pair of vertices modeling its two extremities (Begin and End vertices). Irreducible SPMs are represented by directed edges. Sequencing errors present in the reads lead to characteristic paths in the graph. The error-correction algorithms described in \cite{Edena} are implemented and can be applied to recognize dead ends and p-bubbles and remove them (option \Showoption{errors}). Finally the graph is traversed and sequences corresponding to unbranched paths are output. \subsection{Running the the \Rdjassembly tool} The input consists in SPM lists in \Readjoiner format which are the output of \Rdjoverlap. The following options shall be used: \begin{Justshowoptions} \Option{readset}{\Showoptionarg{readset}}{ Specify the readset name, This must be the same used in the overlap phase.} \Option{l}{\Showoptionarg{minlen}}{ (optional) Specify the minimal SPM length parameter. The value should be at least as high as the one used for \Rdjoverlap. If an higher value is used, shorter overlaps are not loaded in the string graph.} \Option{errors}{}{ Clean short dead ends and remove p-bubbles. This is reccomended} \Option{spmfiles}{\Showoptionarg{n}}{ If the overlap phase was run using muliple threads, this option is mandatory and should be set to the same number of threads used by the \Option{j} in the overlap phase. } \end{Justshowoptions} \section{Examples} Consider a dataset containing paired-end reads with an insert size of 1000bp (st.dev. 120bp) in the files \texttt{p\_f.fastq} and \texttt{p\_r.fastq} and single-end reads in the file \texttt{se.fastq}. This example assumes the reads have been previously error-corrected, otherwise the results will be probably very poor. The first step will be run by \Rdjprefilter. \begin{footnotesize} \begin{verbatim} > gt readjoiner prefilter -readset myreadset \ -db p_f.fastq:p_r.fastq:1000,120 se.fastq \end{verbatim} \end{footnotesize} The result is output in \GenomeTools encoded sequence format and consist in a \texttt{readset.esq} file. The encoded sequence can now be used as input for \Rdjoverlap. We will use a minimal SPM lenght of 50 for this example and suppose \Readjoiner has been compiled with multi-threading support and 8 cores are available. \begin{footnotesize} \begin{verbatim} > gt -j 8 readjoiner overlap -readset readset -l 50 \end{verbatim} \end{footnotesize} The output will be a set of files \texttt{readset..spm}, with N in the range 0 to 7, containing lists of irreducible non-redundant SPMs in \Readjoiner binary format. Note that the \Showoption{j} option is specified in a different position (between \texttt{gt} and \texttt{readjoiner}) than the other options. The next step consists in running the assembly phase using the \Rdjassembly tool. \begin{footnotesize} \begin{verbatim} > gt readjoiner assembly -spmfiles 8 -readset readset -l 60 \end{verbatim} \end{footnotesize} The \Showoption{spmfiles} option is only necessary if the overlap phase was run using multiple threads: we used the same value for \Showoption{spmfiles} which was used for the \Showoption{j} option in the overlap phase. We used an higher mimimal length value that the one used in the overlap phase. If the results are not satisfying, you can repeat the assembly phase using a smaller value, such as \Showoption{l} \Showoptionarg{50} or \Showoption{l} \Showoptionarg{55} (the minimum that can be used is the value used in the overlap phase) and a larger value, such as \Showoption{l} \Showoptionarg{65} or \Showoption{l} \Showoptionarg{70}. The results are contigs, which are saved in FASTA format in \texttt{readset.contigs.fas}. Basic statistics of the assembly results, such as the N50 value and the total length, are displayed in the standard output. \begin{thebibliography}{1} \bibitem{MYE:2005} Myers, EW. (2005). \newblock {{T}he fragment assembly string graph}. \newblock {\em Bioinformatics\/}, {21 Suppl 2}, 79--85. \bibitem{genometools} Gremme, G. (2011). \newblock The \textsc{GenomeTools} genome analysis system. \url{http://genometools.org}. \bibitem{AKO04} Abouelhoda MI, Kurtz S, and Ohlebusch E. \newblock Replacing suffix trees with enhanced suffix arrays. \newblock {\em Journal of Discrete Algorithms}, 2:53--86, 2004. \bibitem{Edena} Hernandez D, François P, Farinelli L, Osterås M, and Schrenzel J. (2008). \newblock De novo bacterial genome sequencing: millions of very short reads assembled on a desktop computer. \newblock {\em Genome Res\/}, {18}(5), 802--809. \bibitem{Readjoiner} Gonnella G and Kurtz S (2012). \newblock {Readjoiner. A fast and memory efficient string graph-based sequence assembler.} \newblock {\em BMC Bioinformatics}, {13}:82. \end{thebibliography} \end{document} genometools-1.5.1/doc/manuals/repfind.tex000066400000000000000000000163541211610345200204330ustar00rootroot00000000000000\documentclass[12pt]{article} \usepackage[a4paper]{geometry} \usepackage{url} \usepackage{alltt} \usepackage{xspace} \usepackage{times} \usepackage{bbm} \usepackage{verbatim} \usepackage{ifthen} \usepackage{optionman} \newcommand{\Showrep}[2]{\begin{array}{@{}c@{}}#1\\ {#2} \end{array}} \newcommand{\Function}[3]{#1:#2\to#3} \newcommand{\Size}[1]{|#1|} \newcommand{\Iff}{if and only if\xspace} \newcommand{\Repfind}[0]{\texttt{\small repfind}\xspace} \newcommand{\Suffixerator}[0]{\texttt{\small suffixerator}\xspace} \newcommand{\Nats}{\textrm{I}\!\textrm{N}} \newcommand{\Substring}[3]{#1[#2..#3]} \newcommand{\Subchar}[2]{#1[#2]} \title{\texttt{repfind}: a program for finding exact maximal repeats\\ a manual} \author{\begin{tabular}{c} \textit{Stefan Kurtz}\\ Center for Bioinformatics,\\ University of Hamburg \end{tabular}} \begin{document} \maketitle This manual describes the options of the program \Repfind. It also gives some examples on how to use it. We postpone the definition of the basic notions to the appendix. \Repfind computes all maximal repeats in the input sequence represented by the given index, and echoes them to standard output. If an error occurs, then the program exits with exit code 1 or 2 (depending on the kind of error). Otherwise, the exit code is 0. The index is constructed by the \Suffixerator-program, which is, like \Repfind, part of the Genometools [1], an open source software for biological sequence analysis. The \Suffixerator-program can process files in Fasta, Embl, Genbank or Swissprot format. There can be more than one sequence in any indexed file. There are no special options necessary to tell the \Suffixerator-program the sequence format. It automatically detects the appropriate format. We recommend to use either the option \Showoption{dna} or \Showoption{protein}, depending on the kind of input sequences to be processed. However, if both of these options are missing \Suffixerator is in most cases able to automatically identify the kind of sequence. The input for DNA sequences may, besides the base symbols \(A\), \(C\), \(G\), or \(T\), contain IUB special characters \(R,Y,M,K,W,S,B,D,H,V,N\). None of the exact matches reported by \Repfind contains such a character as it does not match any character not even itself (at a different position). \Repfind implements a subset of the options of the repfind-program from the REPuter software suite. While \Repfind (as part of the GenomeTools) is open source, the REPuter software is closed source. \section{The Options} The program \Repfind is called as follows: \par \noindent\texttt{gt} \Repfind [\textit{options}] \Showoption{ii} \Showoptionarg{indexname} [\textit{options}] The options for \Repfind are as follows: \begin{Justshowoptions} \Option{l}{$\ell$}{ Specifies the length parameter $\ell$. This must be a positive integer smaller than the length of the input sequence. Only repeats of length at least \(\ell\) are reported. If this option is not used, then \(\ell=20\).} \Option{f}{}{Compute maximal forward repeats} \Option{r}{}{Compute maximal reversed repeats} \Option{scan}{}{scan the index rather than mapping it to main memory (as done in the default case). This option only has an effect for computing forward repeats.} \Option{ii}{$\Showoptionarg{indexname}$}{Use the index $\Showoptionarg{indexname}$. This is a mandatory option.} \Option{v}{}{Be verbose} \Option{help}{}{display help message and exit} \end{Justshowoptions} \subsection*{Important Remark} The user of the program should carefully choose the length parameter \(\ell\). The number of maximal repeats exponentially decreases with increasing \(\ell\). \section{Output Format}\label{Output} \Repfind reports maximal repeats \((\ell,i,j\) to the standard output. Each line of the output in the format \begin{verbatim} len seqnum1 relpos1 symbol len seqnum2 relpos2 \end{verbatim} where \begin{itemize} \item \texttt{S} is either the symbols \texttt{F} or \texttt{R}. \texttt{F} stands for forward repeats and \texttt{R} stands for reverse repeats. \item \texttt{len} is the length of maximal repeat, which is identical for the first and the second instance of the repeat. Thus the length is reported twice. \item \texttt{seqnum1} is the sequence number in which the first repeat instance occurs at position \texttt{relpos1}. \texttt{seqnum2} is the sequence number in which the second repeat instance occurs at position \texttt{relpos2}. The positions are counted beginning with 0. \end{itemize} Suppose the input sequence \(S=gagctcgagcgctgct\) is contained in the file \texttt{Repfind-example.fna}. Then \begin{footnotesize} \begin{verbatim} gt suffixerator -db repfinf-sample.seq -indexname repidx -dna -suf -tis -lcp -ssp -pl \end{verbatim} \end{footnotesize} creates the index named \texttt{repidx} required for \Repfind. This is called as follows: \begin{verbatim} gt repfind -f -r -l 4 -ii repidx \end{verbatim} gives the following output: \begin{verbatim} 4 0 0 F 4 0 6 4 1 14 R 4 0 12 4 1 11 R 4 0 9 10 1 0 R 10 0 0 5 0 5 R 5 2 7 9 0 0 R 9 2 2 \end{verbatim} So, for example there is a maximal repeat of length 4 on the forward strand. Both instances of the repeat are in sequence 0. The first instance begins are position 0 and the second at position 6. \section{Remarks} The programs has been extensively tested, and we are not aware of any bugs. If the user detects a bug or would like to suggest other options or features of the program, then please \texttt{kurtz@zbh.uni-hamburg.de} should be contacted. \section*{References} \begin{enumerate} \item[1] The GenomeTools genome analysis system \url{http://genometools.org}. \item[2] Kurtz, S., Choudhuri, J. V., Ohlebusch, E., Schleiermacher, C., Stoye, J., Giegerich, R. (2001). REPuter: The manifold applications of repeat analysis on a genomic scale. Nucleic Acids Res., 29:4633–4642. \end{enumerate} \appendix \section{Basic Notions}\label{Basic} We consider a string \(S\) of length \(n\). We index the characters of \(S\) from \(0\) to \(n-1\), i.e.\ \(S=\Substring{S}{0}{n-1}\). By \(S^{-1}\) we denote the reverse of \(S\), i.e.\ the string \(u\) of length \(n\) such that \(\Subchar{u}{i}=\Subchar{S}{n-1-i}\) for any \(i\in[0,n-1]\). We define two different kinds of repeats: \begin{itemize} \item \((l,i,j)\) is a \emph{forward or direct repeat} \Iff\ \(i0\) means a positive number of differences. If this option is not used, then the program runs in \textit{ms}-mode, i.e.\ it computes the matching statistics for each short sequence tag. } \Option{nod}{}{ Do not compute direct matches, i.e.\ matches on the forward strand. If this option is not used, then matches are computed on the forward strand.} \Option{nop}{}{ Do not compute palindromic matches, i.e.\ matches on the reverse complemented strand. If this option is not used, then matches are computed on the reverse complemented strand.} \Option{maxocc}{$\Showoptionarg{t}$}{ Specify the maximum number of occurrences of exact prefix matches (in case of the matching statistics) or approximate prefix matches. } \Option{withwildcards}{}{ Output matches containing wildcard characters (e.g. N). This option cannot be used in any of the following cases: \begin{itemize} \item with option \Showoption{pck}, \item in the \textit{ms}-mode, \item for all modes with \(k=0\). \end{itemize} } \Option{best}{}{ For each tag, only show matches for the smallest possible distance. That is, if a tag has exact matches in the input index, then only exact matches are shown. If there are no exact matches, but matches with distance 1, then only these are shown. If there are no matches matches with distance 1 (and hence no exact matches), but with distance 2, then only these are shown etc. } \Option{output}{$\Showoptionarg{key}_{1}\ldots\Showoptionarg{key}_{q}$}{ Use combination of the following keywords to specify output according to the following table: \begin{center} \begin{tabular}{l|l} keyword & shows the following\\\hline tagnum & show ordinal number of tag\\ tagseq & show tag sequence\\ dblength & show length of match in database\\ dbstartpos& show start position of match in database\\ abspos & show absolute value of dbstartpos\\ dbsequence& show sequence of match\\ strand & show strand\\ edist & show edit distance\\ tagstartpos& show start position of match in tag (only for \Showoption{maxocc})\\ taglength & show length of match in tag (only for option \Showoption{maxocc})\\ tagsuffixseq& show suffix tag involved in match (only for option \Showoption{maxocc}) \end{tabular} \end{center} This option only has an effect when used in the cdiff-mode. If in cdiff mode this option is not used, then the output is such as if keywords \texttt{tagnum}, \texttt{tagseq}, \texttt{dblength}, \texttt{dbstartpos}, \texttt{strand} were used. } \Helpoption \end{Justshowoptions} The following conditions must be satisfied: \begin{enumerate} \item Option \Showoption{q} is mandatory. \item Either option \Showoption{pck} or \Showoption{esa} must be used. Both cannot be combined. \item If option \Showoption{e} is not used, then option \Showoption{maxocc} is required. \end{enumerate} \section{Examples} Suppose that in some directory, say \texttt{homo-sapiens}, we have 24 gzipped \Fasta files containing all 24 human chromomsomes. These may have been downloaded from \url{ftp://ftp.ensembl.org/pub/current_fasta/homo_sapiens_47_36i/dna}. In the first step, we construct the packed index for the entire human genome: \begin{Output} gt packedindex mkindex -dna -dir rev -parts 12 -bsize 10 -sprank -locfreq 32 -tis -ssp -indexname pck-human -db homo-sapiens/*.gz \end{Output} The program runs for little more than two hours and delivers an index \texttt{human-all} consisting of three files: \begin{Output} ls -lh human-all.* -rw-r----- 1 kurtz gistaff 37 2008-07-13 17:00 pck-human.al1 -rw-r----- 1 kurtz gistaff 2.6G 2008-07-13 19:22 pck-human.bdx -rw-r----- 1 kurtz gistaff 3.3K 2008-07-13 19:22 pck-human.prj \end{Output} Suppose that the compressed file \texttt{Q1.gz} contains short sequence tags in multiple \Fasta format. In a first call we run \Program in \textit{ms}-mode: \EXECUTE{gt tagerator -q Q1.gz -maxocc 10 -pck pck-human | head -n 25} The first line shortly reports the kind of computation performed. The second and third line give the name of the index containing the subject sequences. It is reported whether it is a packed index or an enhanced suffix array. Then, for each tag its length, say \(m\), and the tag \(p\) itself is shown, followed by a block of \(m\) lines each containing one integers. For all \(i\in[1,m]\), the first column in the \(i\)th line is the matching statistics length, say \(l\). This means that \(\Substring{p}{i}{i+l-1}\) is the maximum length prefix of \(\Substring{p}{i}{m}\) that occurs as a substring in the index. The second column gives the strand of the match: a \texttt{+} stands for the forward strand and a \texttt{-} for the reverse strand. If the number of occurrences of \(\Substring{p}{i}{i+l-1}\) is smaller than the maximum occurrence parameter (\(10\) in the above case), then all matching statistics positions are reported in ascending order. If it is larger than the maximum occurrence parameter, no positions are shown. So, for example, the sequence \texttt{gcttgctg} of length 8 starting at tag position 3 is the longest prefix of \texttt{gcttgctgctgca} that occurs as a substring in the index. It occurs at the positions 25583, 88695, 213546, etc. Note that the matching statistics lines for the forward strand are followed by the matching statistics block on the reverse strand. Note however, that the matching statistics positions are always reported with respect to the forward strand. In a second call, we run \Program in \textit{cdiff}-mode: \EXECUTE{gt tagerator -q Q1.gz -pck pck-human -e 2 | head -n 28} The first line shortly reports the kind of computation performed. The second and third line are as in the previous example. Then, for each tag its length and the tag itself is shown, followed by a block of lines each containing three integers and one of the symbols \texttt{+} or \texttt{-}, denoting the strand of the match. Each such triple of integers reports the length of an approximate match, the subject sequence in which the match occurs, and the relative position of the match in this sequence. For each start position only the shortest length is reported. If there are no approximate matches, then no such line appears. Note that the match always refers to the complete pattern. Our third example concerns the \textit{pdiff}-mode: \EXECUTE{gt tagerator -q Q1.gz -pck pck-human -e 1 -maxocc 5 | head -n 20} The output is similar as in the previous example, except that each match is reported by four integers with a sign between the first three and the last number. The first number reports the length of the approximate match, the second reports the subject sequence number in which the match occur, the third its relative position in the subject sequence. The last number reports the length of the prefix of the tag involved in the approximate match. Note that in some cases, the two length values are different. \end{document} genometools-1.5.1/doc/manuals/tallymer.tex000066400000000000000000000446141211610345200206350ustar00rootroot00000000000000\documentclass[12pt]{article} \usepackage[a4paper,top=20mm,bottom=20mm,left=20mm,right=20mm]{geometry} \usepackage{url} \usepackage{alltt} \usepackage{xspace} \usepackage{times} \usepackage{listings} \usepackage{bbm} \usepackage{verbatim} %\usepackage{prognames} \usepackage{optionman} \newcommand{\Filenamesuffix}[1]{\texttt{\small #1}\index{#1@\texttt{#1}}} \newcommand{\Programname}[1]{\texttt{\small #1}} \newcommand{\Tallymer}[0]{\Programname{tallymer}\xspace} \newcommand{\TYmkindex}[0]{\Programname{mkindex}\xspace} \newcommand{\TYsearch}[0]{\Programname{search}\xspace} \newcommand{\TYoccratio}[0]{\Programname{occratio}\xspace} \newcommand{\SFX}[0]{\Programname{suffixerator}\xspace} \newcommand{\SFXidx}[0]{\textit{suffixerator}-index\xspace} \newcommand{\Tyridx}[0]{\textit{tallymer}-index\xspace} \newcommand{\GT}[0]{\Programname{gt}\xspace} \newcommand{\Kmin}[0]{k_{\min}} \newcommand{\Kmax}[0]{k_{\max}} \newcommand{\Kstep}[0]{k_{step}} \newcommand{\Minmaxocctext}[2]{ Specify the #1\xspace occurrence number for which to output the $k$-mer sequences. That is, a $k$-mer is output, if it occurs #2\xspace $c$ times in the union of all sequences from the \SFXidx. When combined with option \Showoption{indexname}, this option specifies an occurrence constraint on the $k$-mers stored in the generated \Tyridx. That is, a $k$-mer is put into the \Tyridx, if it occurs #2\xspace $c$ times in the union of all sequences from the \SFXidx. } \newcommand{\Typrogintro}[1]{ \par \noindent\GT \Programname{tallymer} #1\xspace [\textit{options}] \Showoption{esa} \SFXidx [\textit{options}] \par The \SFXidx is an enhanced suffix array computed by the program \SFX, which is also part of the genometools-package. Currently, there is no \SFX-manual available, but in Section~\ref{Examples} we show how to call \SFX appropriately in the context of \Tallymer. The following options are available in #1:} \newcommand{\Esaoption}[0]{ \Option{esa}{\Showoptionarg{\SFXidx}}{ Specify the name of an \SFXidx computed by the \SFX-program using the output options \Showoption{suf}, \Showoption{lcp}, and \Showoption{tis}. This option is mandatory. }} \newcommand{\Scanoption}[0]{ \Option{scan}{}{ Sequentially read the \SFXidx. In the default case, the \SFXidx is mapped into main memory. This means that \SFXidx must not be larger than the available address space. So for a 32-bit machine, the index cannot be larger than 4~GB. When using this option, the \textsf{lcp}-table and the \textsf{suf}-table of the \SFXidx are sequentially scanned, so that only a small part of these tables reside in memory. This, of course, reduces the memory requirement of the program. Note that the sequence is still mapped completely into main memory as it is accessed in random order. This option is higly recommended for large data sizes. If you ever get an error like \texttt{gt tallymer occratio: error: fopen(): cannot open file 'reads.prj': No such file or directory} } then you should add this option. } \newcommand{\Standardoptions}[0]{ \Option{v}{~~~}{% Be verbose, that is, give reports about the different steps as well as the resource requirements of the computation. } \Option{version}{}{ Show the version of the program and exit. } \Option{help}{}{ display help and exit. } } \title{The tallymer software for counting, indexing, and searching $k$-mers\\ a manual} \author{Stefan Kurtz} \author{\begin{tabular}{c} \textit{Stefan Kurtz}\\ Center for Bioinformatics,\\ University of Hamburg \end{tabular}} \begin{document} \maketitle This manual describes the \textit{Tallymer}-software, a collection of programs for counting, indexing, and searching $k$-mers. For an introduction of the notions, concepts, and methods underlying the software, we refer the reader to \cite{KUR:NER:STE:WAR:2008}. \textit{Tallymer} is part of the genometools software (\url{http://genometools.org}). It is implemented as part of the \textit{gt}-binary and called as a subprogram. So to run \Tallymer, one has to call the \textit{gt}-binary with subprogram \texttt{tallymer}. \Tallymer itself has three subprograms \TYmkindex, \TYoccratio, and \TYsearch. These are described below. \section{\TYmkindex} The program \TYmkindex is used for counting and indexing \(k\)-mers for a fixed value of \(k\). It is called as follows: \par \Typrogintro{\TYmkindex} \begin{Justshowoptions} \Esaoption \Option{mersize}{$k$}{ Specify the size $k$ of the mers. That is, the program generates all substrings of length $k$ of the given input sequences, given as a \SFXidx If this option is missing, then the default value for $k$ is 20. } \Option{minocc}{$c$}{ \Minmaxocctext{minimum}{at least} } \Option{maxocc}{$c$}{ \Minmaxocctext{maximum}{at most} } \Option{pl}{$\Showoptionalarg{prefixlength}$}{ Specify the prefix length to construct a bucket boundary table for the generated \Tyridx. This additional table speeds up the search in the \Tyridx. This option only works for an alphabet of size 4, i.e.\ for the DNA alphabet. The argument \Showoptionarg{prefixlength} is optional. Hence it is denoted in square brackets. If the argument is omitted, then the value for \Showoptionarg{prefixlength} is automatically determined. More precisely, it is \(\left\lfloor\log_{4}\frac{n}{4}\right\rfloor\), where \(n\) is the total number of $k$-mers in the \Tyridx. } \Option{indexname}{\Showoptionarg{idxname}}{ Store the $k$-mers specified according to the options \Showoption{minocc} and \Showoption{maxocc} in the file named \Showoptionarg{idxname}\Filenamesuffix{.mer}. If option \Showoption{pl} is used, then additionally the bucket boundary table is stored in a file named \Showoptionarg{idxname}\Filenamesuffix{.mbd}. Using the option \Showoption{counts} (see below), an additional file \Showoptionarg{idxname}\Filenamesuffix{.mct} is generated. These file together make up the \Tyridx. } \Option{counts}{}{ Specify that \Showoptionarg{idxname}\Filenamesuffix{.mct} is generated storing the counts of the $k$-mers represented by the \Tyridx. This option can only be used together with option \Showoption{indexname} which also specifies prefix of the produced output file. This option is required if the program \TYsearch needs to report the $k$-mer-counts. } \Scanoption \Standardoptions \end{Justshowoptions} The following conditions must be satisfied: \begin{enumerate} \item Option \Showoption{pl} requires to also use option \Showoption{indexname}. \item Option \Showoption{counts} requires to also use option \Showoption{indexname}. \item Option \Showoption{indexname} requires to also use one of the options options \Showoption{minocc} and \Showoption{maxocc}. \end{enumerate} Note that the program ignores all $k$-mers not entirely consisting of wildcard characters (i.e. not \texttt{a}, \texttt{c}, \texttt{c}, and \texttt{g} in case of the DNA alphabet). \section{\TYoccratio} The program \TYoccratio is used to compute the occurrence ratios for a set of sequences represented by a \SFXidx It is called as follows: \par \Typrogintro{\TYoccratio} \begin{Justshowoptions} \Esaoption \Option{minmersize}{$\Kmin$}{ Specify the minimum size of the mers which are counted. That is, the program counts the number of unique and nonunique mers of length at least $\Kmin$. This option is mandatory if option \Showoption{mersizes} is not used.} \Option{maxmersize}{$\Kmax$}{ Specify the maximum size of the mers which are counted. That is, the program counts the number of unique and nonunique mers of length at most $\Kmax$. This option is mandatory if option \Showoption{mersizes} is not used.} \Option{step}{$\Kstep$}{ Specify the step size according to which the mer counts are output. That is, for all $k\in[\Kmin,\Kmin+\Kstep,\Kmin+2\Kstep,\ldots,\Kmax]$ the $k$-mer counts are output. If this option is not used, then $\Kstep$ is 1.} \Option{mersizes}{$k_{1}~k_{2}\ldots k_{q}$}{ Specify mer sizes $1\leq k_{1} GFF2 - GMOD

GFF2

From GMOD

Jump to: navigation, search

GFF2 is a supported format in GMOD, but it is now deprecated and if you have a choice you should use GFF3. Unfortunately, data is sometimes only available in GFF2 format. GFF2 has a number of shortcomings compared to GFF3. GFF2 can only represent 2 level feature hierarchies, while GFF3 can support arbitrary levels. GFF2 also does not require that column 3, the feature type, be part of the sequence ontology. It can be any string. This often led to quality control and data exchange problems.


Contents

GFF2 is Deprecated!

The GFF file format stands for "Gene Finding Format" and was invented at the Sanger Centre. It is easy to use, but it suffers from two main limitations (see the box).

Why GFF2 is harmful to your health

One of GFF2's problems is that it is only able to represent one level of nesting of features. This is mainly a problem when dealing with genes that have multiple alternatively-spliced transcripts. GFF2 is unable to deal with the three-level hierarchy of gene → transcript → exon. Most people get around this by declaring a series of transcripts and giving them similar names to indicate that they come from the same gene. The second limitation is that while GFF2 allows you to create two-level hierarchies, such as transcript → exon, it doesn't have any concept of the direction of the hierarchy. So it doesn't know whether the exon is a subfeature of the transcript, or vice-versa. This means you have to use "aggregators" to sort out the relationships. This is a major pain in the neck. For this reason, GFF2 format has been deprecated in favor of GFF3 format databases.

See GFF3 for more on the current version of GFF.

The GFF2 File Format

The GFF format is a flat tab-delimited file, each line of which corresponds to an annotation, or feature. Each line has nine columns and looks like this:

Chr1  curated  CDS 365647  365963  .  +  1  Transcript "R119.7"

The 9 columns are as follows:

reference sequence
This is the ID of the sequence that is used to establish the coordinate system of the annotation. In the example above, the reference sequence is "Chr1".
source
The source of the annotation. This field describes how the annotation was derived. In the example above, the source is "curated" to indicate that the feature is the result of human curation. The names and versions of software programs are often used for the source field, as in "tRNAScan-SE/1.2".
method
The annotation method, also known as type. This field describes the type of the annotation, such as "CDS". Together the method and source describe the annotation type.
start position
The start of the annotation relative to the reference sequence.
stop position
The stop of the annotation relative to the reference sequence. Start is always less than or equal to stop.
score
For annotations that are associated with a numeric score (for example, a sequence similarity), this field describes the score. The score units are completely unspecified, but for sequence similarities, it is typically percent identity. Annotations that do not have a score can use "."
strand
For those annotations which are strand-specific, this field is the strand on which the annotation resides. It is "+" for the forward strand, "-" for the reverse strand, or "." for annotations that are not stranded.
phase
For annotations that are linked to proteins, this field describes the phase of the annotation on the codons. It is a number from 0 to 2, or "." for features that have no phase.
group
GFF provides a simple way of generating annotation hierarchies ("is composed of" relationships) by providing a group field. The group field contains the class and ID of an annotation which is the logical parent of the current one. In the example given above, the group is the Transcript named "R119.7".

The group field is also used to store information about the target of sequence similarity hits, and miscellaneous notes. See the next section for a description of how to describe similarity targets.

The sequences used to establish the coordinate system for annotations can correspond to sequenced clones, clone fragments, contigs or super-contigs.

In addition to a group ID, the GFF format allows annotations to have a group class. This makes sure that all groups are unique even if they happen to share the same name. For example, you can have a GenBank accession named AP001234 and a clone named AP001234 and distinguish between them by giving the first one a class of Accession and the second a class of Clone.

You should use double-quotes around the group name or class if it contains white space.

Creating a GFF2 table

The first 8 fields of the GFF2 format are easy to understand. The group field is a challenge. It is used in several distinct ways:

  • to group together a single sequence feature that spans a discontinuous range, such as a gapped alignment.
  • to name a feature, allowing it to be retrieved by name.
  • to add one or more notes to the annotation.
  • to add an alternative name

Using the Group field for simple features

For a simple feature that spans a single continuous range, choose a name and class for the object and give it a line in the GFF2 file that refers to its start and stop positions.

Chr3   giemsa heterochromatin  4500000 6000000 . . .   Band 3q12.1

Using the Group field to group features that belong together

For a group of features that belong together, such as the exons in a transcript, choose a name and class for the object. Give each segment a separate line in the GFF2 file but use the same name for each line. For example:

IV     curated exon    5506900 5506996 . + .   Transcript B0273.1
IV     curated exon    5506026 5506382 . + .   Transcript B0273.1
IV     curated exon    5506558 5506660 . + .   Transcript B0273.1
IV     curated exon    5506738 5506852 . + .   Transcript B0273.1

These four lines refer to a biological object of class "Transcript" and name B0273.1. Each of its parts uses the method "exon", source "curated". Once loaded, the user will be able to search the genome for this object by asking the browser to retrieve "Transcript:B0273.1". The browser can also be configured to allow the Transcript: prefix to be omitted.

You can extend the idiom for objects that have heterogeneous parts, such as a transcript that has 5' and 3' UTRs

IV     curated  mRNA   5506800 5508917 . + .   Transcript B0273.1; Note "Zn-Finger"
IV     curated  5'UTR  5506800 5508999 . + .   Transcript B0273.1
IV     curated  exon   5506900 5506996 . + .   Transcript B0273.1
IV     curated  exon   5506026 5506382 . + .   Transcript B0273.1
IV     curated  exon   5506558 5506660 . + .   Transcript B0273.1
IV     curated  exon   5506738 5506852 . + .   Transcript B0273.1
IV     curated  3'UTR  5506852 5508917 . + .   Transcript B0273.1

In this example, there is a single feature with method "mRNA" that spans the entire range. It is grouped with subparts of type 5'UTR, 3'UTR and exon. They are all grouped together into a Transcript named B0273.1. Furthermore the mRNA feature has a note attached to it.

NOTE: The subparts of a feature are in absolute (chromosomal or contig) coordinates. It is not currently possible to define a feature in absolute coordinates and then to load its subparts using coordinates that are relative to the start of the feature.

Some annotations do not need to be individually named. For example, it is probably not useful to assign a unique name to each ALU repeat in a vertebrate genome. For these, just leave the Group field empty.

Using the Group field to add a note

The group field can be used to add one or more notes to an annotation. To do this, place a semicolon after the group name and add a Note field:

Chr3 giemsa heterochromatin 4500000 6000000 . . . Band 3q12.1 ; Note "Marfan's syndrome"

You can add multiple Notes. Just separate them by semicolons:

 Band 3q12.1 ; Note "Marfan's syndrome" ; Note "dystrophic dysplasia"

The Note should come AFTER the group type and name.

Using the Group field to add an alternative name

If you want the feature to be quickly searchable by an alternative name, you can add one or more Alias tags. A feature can have multiple aliases, and multiple features can share the same alias:

Chr3 giemsa heterochromatin 4500000 6000000 . . . Band 3q12.1 ; Alias MFX

Searches for aliases will be both faster and more reliable than searches for keywords in notes, since the latter relies on whole-text search methods that vary somewhat from DBMS to DBMS.

Identifying the reference sequence

Each reference sequence in the GFF table must itself have an entry. This is necessary so that the length of the reference sequence is known.

For example, if "Chr1" is used as a reference sequence, then the GFF file should have an entry for it similar to this one:

Chr1 assembly chromosome 1 14972282 . + . Sequence Chr1

This indicates that the reference sequence named "Chr1" has length 14972282 bp, method "chromosome" and source "assembly". In addition, as indicated by the group field, Chr1 has class "Sequence" and name "Chr1".

It is suggested that you use "Sequence" as the class name for all reference sequences, since this is the default class used by the Bio::DB::GFF module when no more specific class is requested. If you use a different class name, then be sure to indicate that fact with the "reference class" option (see below).


Sequence alignments

There are several cases in which an annotation indicates the relationship between two sequences. One common one is a similarity hit, where the annotation indicates an alignment. A second common case is a map assembly, in which the annotation indicates that a portion of a larger sequence is built up from one or more smaller ones.

Both cases are indicated by using the Target tag in the group field. For example, a typical similarity hit will look like this:

Chr1 BLASTX similarity 76953 77108 132 + 0 Target Protein:SW:ABL_DROME 493 544

Here, the group field contains the Target tag, followed by an identifier for the biological object. The GFF format uses the notation Class:Name for the biological object, and even though this is stylistically inconsistent, that's the way it's done. The object identifier is followed by two integers indicating the start and stop of the alignment on the target sequence.

Unlike the main start and stop columns, it is possible for the target start to be greater than the target end. The previous example indicates that the the section of Chr1 from 76,953 to 77,108 aligns to the protein SW:ABL_DROME starting at position 493 and extending to position 544.

A similar notation is used for sequence assembly information as shown in this example:

Chr1        assembly Link   10922906 11177731 . . . Target Sequence:LINK_H06O01 1 254826
LINK_H06O01 assembly Cosmid 32386    64122    . . . Target Sequence:F49B2       6 31742

This indicates that the region between bases 10922906 and 11177731 of Chr1 are composed of LINK_H06O01 from bp 1 to bp 254826. The region of LINK_H0601 between 32386 and 64122 is, in turn, composed of the bases 5 to 31742 of cosmid F49B2.


Dense quantitative data

If you have dense quantitative data, such as tiling array data, microarray expression data, ChIP-chip or ChIP-seq chromatin immunoprecipitation data, then you will probably want to create "Wiggle" format binary files, which represent the quantitative data in a compact format in external files. Use the wiggle2gff3.pl script, included in this distribution, to format and load this data. Run wiggle2gff3.pl -h for instructions.

Loading the GFF file into the database

Use the BioPerl script utilities bp_bulk_load_gff.pl, bp_load_gff.pl or (if you are brave) bp_fast_load_gff.pl to load the GFF file into the database. For example, if your database is a MySQL database on the local host named "dicty", you can load it into an empty database using bp_bulk_load_gff.pl like this:

 bp_bulk_load_gff.pl -c -d dicty my_data.gff

To update existing databases, use either bp_load_gff.pl or bp_fast_load_gff.pl. The latter is somewhat experimental, so use with care.

Aggregators

It is not necessary to use aggregators with the Chado, BioSQL, or Bio::DB::SeqFeature::Store GBrowse Adaptors, or any other adaptor that is based on GFF3.

The Bio::DB::GFF adaptor (and only Bio::DB::GFF!) has a feature known as "aggregators". These are small software packages that recognize certain common feature types and convert them into complex biological objects. These aggregators make it possible to develop intelligent graphical representations of annotations, such as a gene that draws confirmed exons differently from predicted ones.

An aggregator typically creates a new composite feature with a different method than any of its components. For example, the standard "alignment" aggregator takes multiple alignments of method "similarity", groups them by their name, and returns a single feature of method "alignment".

The various aggregators are described in detail in the Bio::DB::GFF perldoc page. It is easy to write new aggregators, and also possible to define aggregators on the fly in the GBrowse configuration file. It is suggested that you use the sample GFF2 files from the yeast, drosophila and C. elegans projects to see what methods to use to achieve the desired results.

In addition to the standard aggregators that are distributed with BioPerl, GBrowse distributes several experimental and/or special-purpose aggregators:

match_gap
This aggregator is used for GFF3 style gapped alignments, in which there is a single feature of method 'match' with a 'Gap' attribute. This aggregator was contributed by Dmitri Bichko.
orf
This aggregator aggregates raw "ORF" features into "coding" features. It is basically identical to the "coding" aggregator, except that it looks for features of type "ORF" rather than "cds".
reftranscript
This aggregator was written to make the compound feature, "reftranscript" for use with GBrowse editing software developed outside of the GMOD development group. It can be used to aggregate "reftranscripts" from "refexons", loaded as second copy features. These features, in contrast to "transcripts", are usually implemented as features which cannot be edited and serve as starting point references for annotations added using GBrowse for feature visualization. Adding features to the compound feature, "reftranscript", can be done by adding to the "part_names" call (i.e. "refCDS").
waba_alignment
This aggregator handles the type of alignments produced by Jim Kent's WABA program, and was written to be compatible with the C. elegans GFF2 files. It aggregates the following feature types into an aggregate type of "waba_alignment":
  • nucleotide_match:waba_weak
  • nucleotide_match:waba_strong
  • nucleotide_match:waba_coding
wormbase_gene
This aggregator was written to be compatible with the C. elegans GFF2 files distributed by the Sanger Institute. It aggregates raw "CDS", "5'UTR", "3'UTR", "polyA" and "TSS" features into "transcript" features. For compatibility with the idiosyncrasies of the Sanger GFF2 format, it expects that the full range of the transcript is contained in a main feature of type "Sequence".
It is strongly recommended that for mirroring C. elegans annotations, you use the "processed_transcript" aggregator in conjunction with the GFF3 files found at:
ftp://ftp.wormbase.org/pub/wormbase/genomes/elegans/genome_feature_tables/GFF3

Converting GFF2 to GFF3

Converting a file from GFF2 to GFF3 format is problematic for several reasons. However, there are several GFF2 to GFF3 converters available on the web, but each makes specific assumptions about the GFF2 data that limit its applicability. GMOD does not endorse (or disparage) any particular converter. If you have GFF2 data from an external source, and they don't also provide it in GFF3 format, then you may be stuck with GFF2.

Some areas that need to be addressed by any GFF2 to GFF3 converter:

Column 3: Feature Type

If the GFF2 file does not use Sequence Ontology terms in column 3 then some sort of translation will need to be done on the types in the GFF2 to convert them to be SO terms.

Column 9: Group / Attributes

Column 9 has a slightly different format and is much more tightly defined in GFF3 than GFF2. Both require attention. GFF2 does not have any reserved attribute names, uses C style encoding/escaping of special characters, and has many other small differences.

Another big problem is that GFF2 supports only one level of feature nesting. While you can certainly reproduce this minimal nesting in GFF3, it would be better to also convert your feature representations to be multi-level at the time you migrate the data to GFF3. This is non-trivial.

Retrieved from "http://gmod.org/wiki/GFF2"
genometools-1.5.1/doc/notes/GO.format.obo-1_2.shtml000066400000000000000000001764751211610345200217670ustar00rootroot00000000000000 The OBO Flat File Format Specification, version 1.2 genometools-1.5.1/doc/notes/GTF22.html000066400000000000000000000425351211610345200174240ustar00rootroot00000000000000 GTF2.2: A Gene Annotation Format

GTF2.2: A Gene Annotation Format

(Revised Ensembl GTF)

Contents

Introduction

GTF stands for Gene transfer format. It borrows from
GFF, but has additional structure that warrants a separate definition and format name.

Structure is as GFF, so the fields are:
<seqname> <source> <feature> <start> <end> <score> <strand> <frame> [attributes] [comments]

Here is a simple example with 3 translated exons. Order of rows is not important.

381 Twinscan  CDS          380   401   .   +   0  gene_id "001"; transcript_id "001.1";
381 Twinscan  CDS          501   650   .   +   2  gene_id "001"; transcript_id "001.1";
381 Twinscan  CDS          700   707   .   +   2  gene_id "001"; transcript_id "001.1";
381 Twinscan  start_codon  380   382   .   +   0  gene_id "001"; transcript_id "001.1";
381 Twinscan  stop_codon   708   710   .   +   0  gene_id "001"; transcript_id "001.1";
The whitespace in this example is provided only for readability. In GTF, fields must be separated by a single TAB and no white space.

Top

GTF Field Definitions

<seqname>
The name of the sequence. Commonly, this is the chromosome ID or contig ID. Note that the coordinates used must be unique within each sequence name in all GTFs for an annotation set.

<source>
The source column should be a unique label indicating where the annotations came from --- typically the name of either a prediction program or a public database.

<feature>
The following feature types are required: "CDS", "start_codon", "stop_codon". The features "5UTR", "3UTR", "inter", "inter_CNS", "intron_CNS" and "exon" are optional. All other features will be ignored. The types must have the correct capitalization shown here.

CDS represents the coding sequence starting with the first translated codon and proceeding to the last translated codon. Unlike Genbank annotation, the stop codon is not included in the CDS for the terminal exon. The optional feature "5UTR" represents regions from the transcription start site or beginning of the known 5' UTR to the base before the start codon of the transcript. If this region is interrupted by introns then each exon or partial exon is annotated as a separate 5UTR feature. Similarly, "3UTR" represents regions after the stop codon and before the polyadenylation site or end of the known 3' untranslated region. Note that the UTR features can only be used to annotate portions of mRNA genes, not non-coding RNA genes.

The feature "exon" more generically describes any transcribed exon. Therefore, exon boundaries will be the transcription start site, splice donor, splice acceptor and poly-adenylation site. The start or stop codon will not necessarily lie on an exon boundary.

The "start_codon" feature is up to 3bp long in total and is included in the coordinates for the "CDS" features. The "stop_codon" feature similarly is up to 3bp long and is excluded from the coordinates for the "3UTR" features, if used.

The "start_codon" and "stop_codon" features are not required to be atomic; they may be interrupted by valid splice sites. A split start or stop codon appears as two distinct features. All "start_codon" and "stop_codon" features must have a 0,1,2 in the <frame> field indicating which part of the codon is represented by this feature. Contiguous start and stop codons will always have frame 0.

The "inter" feature describes an intergenic region, one which is by almost all accounts not transcribed. The "inter_CNS" feature describes an intergenic conserved noncoding sequence region. All of these should have an empty transcript_id attribute, since they are not transcribed and do not belong to any transcript. The "intron_CNS" feature describes a conserved noncoding sequence region within an intron of a transcript, and should have a transcript_id associated with it.

<start> <end>
Integer start and end coordinates of the feature relative to the beginning of the sequence named in <seqname>.  <start> must be less than or equal to <end>. Sequence numbering starts at 1. Values of <start> and <end> that extend outside the reference sequence are technically acceptable, but they are discouraged.

<score>
The score field indicates a degree of confidence in the feature's existence and coordinates. The value of this field has no global scale but may have relative significance when the <source> field indicates the prediction program used to create this annotation. It may be a floating point number or integer, and not necessary and may be replaced with a dot.

<frame>
0 indicates that the feature begins with a whole codon at the 5' most base. 1 means that there is one extra base (the third base of a codon) before the first whole codon and 2 means that there are two extra bases (the second and third bases of the codon) before the first codon. Note that for reverse strand features, the 5' most base is the <end> coordinate.

Here are the details excised from the GFF spec. Important: Note comment on reverse strand.

'0' indicates that the specified region is in frame, i.e. that its first base corresponds to the first base of a codon. '1' indicates that there is one extra base, i.e. that the second base of the region corresponds to the first base of a codon, and '2' means that the third base of the region is the first base of a codon. If the strand is '-', then the first base of the region is value of <end>, because the corresponding coding region will run from <end> to <start> on the reverse strand.

Frame is calculated as (3 - ((length-frame) mod 3)) mod 3.

  • (length-frame) is the length of the previous feature starting at the first whole codon (and thus the frame subtracted out).
  • (length-frame) mod 3 is the number of bases on the 3' end beyond the last whole codon of the previous feature.
  • 3-((length-frame) mod 3) is the number of bases left in the codon after removing those that are represented at the 3' end of the feature.
  • (3-((length-frame) mod 3)) mod 3 changes a 3 to a 0, since three bases makes a whole codon, and 1 and 2 are left unchanged.
[attributes]
All nine features have the same two mandatory attributes at the end of the record:
  • gene_id value;     A globally unique identifier for the genomic locus of the transcript. If empty, no gene is associated with this feature.
  • transcript_id value;     A globally unique identifier for the predicted transcript. If empty, no transcript is associated with this feature.
These attributes are designed for handling multiple transcripts from the same genomic region. Any other attributes or comments must appear after these two and will be ignored.

Attributes must end in a semicolon which must then be separated from the start of any subsequent attribute by exactly one space character (NOT a tab character).

Textual attributes should be surrounded by doublequotes.

These attributes are required even for non-mRNA transcribed regions such as "inter" and "inter_CNS" features.

[comments]
Comments begin with a hash ('#') and continue to the end of the line. Nothing beyond a hash will be parsed. These may occur anywhere in the file, including at the end of a feature line.

Top

Examples

Here is an example of a gene on the negative strand including UTR regions. Larger coordinates are 5' of smaller coordinates. Thus, the start codon is 3 bp with largest coordinates among all those bp that fall within the CDS regions. Note that the stop codon lies between the 3UTR and the CDS

140    Twinscan    inter         5141     8522     .    -    .    gene_id ""; transcript_id "";
140    Twinscan    inter_CNS     8523     9711     .    -    .    gene_id ""; transcript_id "";
140    Twinscan    inter         9712     13182    .    -    .    gene_id ""; transcript_id "";
140    Twinscan    3UTR          65149    65487    .    -    .    gene_id "140.000"; transcript_id "140.000.1";
140    Twinscan    3UTR          66823    66992    .    -    .    gene_id "140.000"; transcript_id "140.000.1";
140    Twinscan    stop_codon    66993    66995    .    -    0    gene_id "140.000"; transcript_id "140.000.1";
140    Twinscan    CDS           66996    66999    .    -    1    gene_id "140.000"; transcript_id "140.000.1";
140    Twinscan    intron_CNS    70103    70151    .    -    .    gene_id "140.000"; transcript_id "140.000.1";
140    Twinscan    CDS           70207    70294    .    -    2    gene_id "140.000"; transcript_id "140.000.1";
140    Twinscan    CDS           71696    71807    .    -    0    gene_id "140.000"; transcript_id "140.000.1";
140    Twinscan    start_codon   71805    71806    .    -    0    gene_id "140.000"; transcript_id "140.000.1";
140    Twinscan    start_codon   73222    73222    .    -    2    gene_id "140.000"; transcript_id "140.000.1";
140    Twinscan    CDS           73222    73222    .    -    0    gene_id "140.000"; transcript_id "140.000.1";
140    Twinscan    5UTR          73223    73504    .    -    .    gene_id "140.000"; transcript_id "140.000.1";

Note the frames of the coding exons. For example:

  1. The first CDS (from 71807 to 71696) always has frame zero.
  2. Frame of the 1st CDS =0, length =112.  (3-((length - frame) mod 3)) mod 3  = 2, the frame of the 2nd CDS.
  3. Frame of the 2nd CDS=2, length=88. (3-((length - frame) mod 3)) mod 3  = 1, the frame of the terminal CDS.
  4. Alternatively, the frame of terminal CDS can be calculated without the rest of the gene. Length of the terminal CDS=4. length mod 3 =1, the frame of the terminal CDS.

Note the split start codon. The second start codon region has a frame of 2, since it is the second base, and has an accompanying CDS feature, since CDS always includes the start codon.

Here is an example in which the "exon" feature is used. It is a 5 exon gene with 3 translated exons.

381 Twinscan  exon         150   200   .   +   .  gene_id "381.000"; transcript_id "381.000.1";
381 Twinscan  exon         300   401   .   +   .  gene_id "381.000"; transcript_id "381.000.1";
381 Twinscan  CDS          380   401   .   +   0  gene_id "381.000"; transcript_id "381.000.1";
381 Twinscan  exon         501   650   .   +   .  gene_id "381.000"; transcript_id "381.000.1";
381 Twinscan  CDS          501   650   .   +   2  gene_id "381.000"; transcript_id "381.000.1";
381 Twinscan  exon         700   800   .   +   .  gene_id "381.000"; transcript_id "381.000.1";
381 Twinscan  CDS          700   707   .   +   2  gene_id "381.000"; transcript_id "381.000.1";
381 Twinscan  exon         900  1000   .   +   .  gene_id "381.000"; transcript_id "381.000.1";
381 Twinscan  start_codon  380   382   .   +   0  gene_id "381.000"; transcript_id "381.000.1";
381 Twinscan  stop_codon   708   710   .   +   0  gene_id "381.000"; transcript_id "381.000.1";

Top

Scripts and Resources

Several Perl scripts have been written for checking, parsing, correcting, and comparing GTF-formatted annotations. Most of the important ones are included the Eval package, which comes equipped with a GTF parsing Perl package GTF.pm.

The Eval documentation contains a complete code-level documentation of GTF.pm, suitable for able Perl programmers to create and parse GTF files.

The script validate_gtf.pl included in the Eval package is particularly useful for checking that your GTF annotation is consistent and well-formed. This can also be done over the web: Here are some more useful links:

Top


 
 
  genometools-1.5.1/doc/notes/TODO_libgtmatch.txt000066400000000000000000000027261211610345200214540ustar00rootroot00000000000000ma_get_space_peak() und das Makro env_ma_get_space_peak() die den space peak in Bytes zur"uckliefern. mrege genericfilenames into fbsadv, and finally replace genericfilename by genfilename (if not too slow). -------------------- store the special code information on a file and perform prefixlength many iterations to insert the suffixes: PRIO-low show space of different parts relative to all parts: PRIO-high add type Sequencelength: allows for small and large sequences in 32 bit mode. unsigned long in 64-bit mode: PRIO low use flexible fixed bits type to store integers: PRIO low use test sequence of length n where n % 4 \in [0,1,2,3] do not force -pl to be a mandatory argument, if left out, then it determined automatically. instead of determining the parts, the user should define a maximum amount of memory to be used. Then the number of parts are chosen such that this boundary is not exceeded. add advancement display, see Gordon's lib: 0% 1% ... 100% Sometimes I cannot set a default value when specifying the option, because the default value is determined after all other options are known and maybe some file is input replacing timer by some method which does not produce overflows. use encseq->totallength instead of the parameter totallength in bentleysedgewick output the ranges in sorted order w.r.t. the length add function to count the number of wildcards in a range. remove exits in library. add splintgoal for libgtmatch add prepro goal for libgtmatch genometools-1.5.1/doc/notes/css/000077500000000000000000000000001211610345200165315ustar00rootroot00000000000000genometools-1.5.1/doc/notes/css/so_style.css000066400000000000000000000176131211610345200211140ustar00rootroot00000000000000body { background: #eef3f9 url('../img/page_bg.gif') top left fixed; font-family: Verdana, Arial, Helvetica, Sans-Serif; font-size: 75%; /* text-align: center; */ margin: 15px 0 15px 0; } /* ------------------ typography ------------------ */ p, ul, ol { font-size: 1em; line-height: 1.5em; color: #3F322A; padding:0px; margin: 0 0 10px 0; } h1 { font-size: 2em; line-height: 1.3em; color: #420F0B; margin: 0 0 10px 0; padding: 0; } #header_left h1 { font-size: 2.3em; line-height: 1.4em; letter-spacing: -1px; color: #420F0B; margin: 0 0 0 0; padding: 0; } h2 { font-size: 1.75em; line-height: 1.3em; color: #420F0B; margin: 0 0 0px 0; padding: 0; } #header_left h2 { font-size: 1em; line-height: 1em; color: #5E9856; margin: 0 0 10px 0; padding: 0 0 0 3px; letter-spacing: 1px; } h3 { font-size: 1.5em; line-height: 1.3em; color: #420F0B; margin: 0 0 6px 0; padding: 0; } h4 { font-size: 1.25em; line-height: 1.1em; color: #5A703A; margin: 0 0 6px 0; padding: 0; } h5 { font-size: 1em; line-height: 1.3em; color: #420F0B; margin: 0 0 10px 0; padding: 0; } .code { font-size: 1.3em; margin: 20px; white-space: pre; font-family: monospace; } .autolist_name { font-weight: normal; } .autolist_synonym { font-style: italic; } .autolist_id { text-decoration: underline; } /* ------------------- tables ----------------- */ table { width: 90%; padding: 0px; border: 1px solid; margin: auto; margin-top: 10px; margin-bottom: 10px; } th { border: 1px solid; background-color: #CDCDCD; vertical-align: middle; padding: 3px; font-weight: bold; } td { border: 1px solid; vertical-align: middle; padding: 3px; } /* ------------------- hyperlinks ----------------- */ a, a:visited, a:active { background-color: transparent; color: #971903; text-decoration: none; } a:hover { background-color: transparent; color: #971903; text-decoration: underline; } #header_left A:link, #header_left A:visited, #header_left A:active { color: #EAEA9A; text-decoration: none; } #header_left A:hover { background-color: transparent; color: #FAF4E8; text-decoration: none; } #footer A:link, #footer A:visited, #footer A:active { background: transparent; color: #E6C581; text-decoration: none; padding-left: 5px; padding-right: 5px; } #footer A:hover { background: transparent; color: #E6C581; text-decoration: underline; } /* --------------- Ordered/Unordered Lists -------------- */ #main_content ul, #left_column ul, #right_column ul { margin-left: 6px; padding-left: 0px; list-style-type:none; margin-bottom: 15px; } #main_content li, #left_column li, #right_column li { padding-left: 10px; background: transparent url('../img/arrow.gif') 0 0.47em no-repeat; margin-bottom: .5em; } #main_content ol, #left_column ol, #right_column ol { margin-left: 0px; padding-left: 0px; } #main_content ol li, #left_column ol li, #right_column ol li { margin-left: 23px; padding-left: 0px; background: none; list-style-type: decimal; list-style-position: outside; } /* ----------------- horizontal menu bar ------------------ */ #navcontainer { text-align: center; } ul#navlist { margin: 12px 2px 12px 2px; padding: 0; font-family: arial; font-size: 1.4em; line-height: .8em; font-weight: bold; } #navlist li { display: inline; list-style-type: none; margin: 0; padding: 0; line-height: 1em; } #navlist a { padding:4px 8px 0px 8px; margin: 0; } #navlist a:link, #navlist a:visited { color: #fff; background-color: transparent; text-decoration: none; } #navlist a:hover { color: #fff; text-decoration: none; border-bottom:1px dotted white; } /* --------------------- page layout --------------------- */ #page_wrapper { background: #FFFFFF; /* can be percentage or fixed width. 745px wide is ideal for 800x600 screens */ /* width: 80%; */ width: 900px; border: 10px solid #FFFFFF; margin: 0 auto; } #header { height: 138px; background: #669ACC url('../img/header_bg.jpg') top left no-repeat; } #header_left { float: left; width: 300px; padding: 30px 20px 0px 20px; text-align: left; } #menu_bar { text-align: left; padding: 4px; margin:0; background: #3B6710 url('../img/menu_bg.jpg') top left repeat-x; } #breadcrumb { background: inherit; padding: 0; margin: 0px; text-align: left; border-bottom: 1px solid #DDD4C2; } #breadcrumb p { padding: 15px 10px 15px 10px; margin: 0; } #content_wrapper{ float: left; width: 100%; background: inherit; } #right_column { float: right; width: 23%; margin: 0px; border-left: 1px solid #DDD4C2; text-align: left; } #main_content{ overflow: auto; float: left; margin: 0; width: 75%; text-align: left; } .item { border: dotted 1px #DDD4C2; width: 95%; padding: 10px; margin: 10px; background: #eef3f9; } #export_bar{ margin: 0; padding: 0; width: 100%; text-align: left; } #footer { background-color: #4c7821; text-align: center; padding:0px; margin:0; border-top: 1px solid black; border-bottom: 1px solid black; } .logo { height: 50px; } #footer p { background-color: transparent; color: #C1BC9D; margin: 0px; padding: 20px 0 20px 0; } .footer_left { margin: 10px 0 10px 0; padding: 0px; display: inline; width: 25%; float: left; } .footer_center { margin: 0px 0 0px 0; padding: 0px; display: inline; width: 50%; float: left; } .footer_right { margin: 10px 0 10px 0; padding: 0px; display: inline; width: 25%; float: right; } .column_padding { /* margin to provide padding inside each side column */ overflow:auto; margin: 15px; } .main_padding { /* margin to provide padding inside main content area */ margin: 15px 15px 15px 10px; } /* ------------------------ other ------------------------- */ #img_frame { overflow: auto; width: 90%; border: 1px solid; background: inherit; padding: 0px; margin: auto; margin-top: 10px; margin-bottom: 10px; } /* img { padding: 10px; margin: 5px auto 5px; display: block; } */ .inline img { padding: 0; margin: 0; /* dislplay: inline; */ } blockquote { background-image: url(../img/quote.gif); background-repeat: no-repeat; background-position: 0px 0px; padding: 1px 0 1px 30px; margin: 0 30px 0 10px; } blockquote p { margin: 0 0 1em 0; padding: 0px; font-size: 1.1em; line-height: 1.4em; font-weight: bold; color: #6C5D53; } .note { width: 90%; margin: 5px auto 5px; padding: 5px 5px 5px 5px; border: 1px solid; font-size: 1em; background: silver; } .pub_citation { margin:10px; color: #6C5D53; } .pub_title { font-size: 1em; font-weight: bold; } .pub_author { font-style: oblique; } .pub_journal { } .float_right { float:right; margin: 5px 0 5px 10px; } .spacer { clear: both; } div.h_scroll { padding:5px; width:100%; overflow:auto; }genometools-1.5.1/doc/notes/deprecated.txt000066400000000000000000000263141211610345200206100ustar00rootroot00000000000000 /for sfx-blindtrie.c */ static void checkcurrentblindtrie(Blindtrie *blindtrie) { unsigned long suffixtable[6], idx, numofsuffixes, maxcommon; int retval; numofsuffixes = enumeratetrieleaves (blindtrie,&suffixtable[0], NULL, NULL); for (idx=1UL; idx < numofsuffixes; idx++) { maxcommon = 0; retval = gt_encseq_comparetwostringsgeneric( blindtrie->encseq, GT_ISDIRREVERSE(blindtrie->readmode) ? false : true, GT_ISDIRCOMPLEMENT(blindtrie->readmode) ? true : false, &maxcommon, suffixtable[idx-1], suffixtable[idx], 0); if (retval >= 0) { fprintf(stderr,"retval = %d, maxcommon = %u for idx = %lu\n", retval,maxcommon,idx); exit(GT_EXIT_PROGRAMMING_ERROR); } } } /* The following generalizes the previous in that the comparison of the sequences starts at offset . */ int gt_encseq_comparetwostringsgeneric(const GtEncseq *encseq, bool fwd, bool complement, unsigned long *maxcommon, unsigned long pos1, unsigned long pos2, unsigned long depth, unsigned long maxdepth) { unsigned long totallength = gt_encseq_total_length(encseq); int retval; bool leftspecial, rightspecial; if (fwd) { unsigned long endpos1, endpos2; if (maxdepth == 0) { endpos1 = endpos2 = totallength; } else { gt_assert(maxdepth >= depth); endpos1 = MIN(pos1 + maxdepth,totallength); endpos2 = MIN(pos2 + maxdepth,totallength); } if (pos1 + depth < endpos1 && pos2 + depth < endpos2) { retval = gt_encseq_comparetwostrings(encseq, fwd, complement, maxcommon, pos1+depth, pos2+depth, maxdepth == 0 ? 0 : (maxdepth - depth)); } else { retval = gt_encseq_comparewithonespecial( &leftspecial, &rightspecial, encseq, fwd, complement, pos1, pos2, depth, maxdepth); } } else { if (maxdepth > 0) { gt_assert(false); } if (pos1 >= depth && pos2 >= depth) { retval = gt_encseq_comparetwostrings(encseq, fwd, complement, maxcommon, pos1-depth, pos2-depth, maxdepth == 0 ? 0 : (maxdepth - depth)); } else { retval = gt_encseq_comparewithonespecial( &leftspecial, &rightspecial, encseq, fwd, complement, pos1, pos2, depth, maxdepth); } } *maxcommon += depth; return retval; } #undef FASTCOMPAREDEBUG #ifdef FASTCOMPAREDEBUG static void verifycomparestringresults(const GtEncseq *encseq, GtCommonunits *commonunits, bool fwd, bool complement, unsigned long pos1, unsigned long pos2, unsigned long depth, unsigned long maxdepth, int retval) { unsigned long lcp2 = 0; int retval2; retval2 = gt_encseq_comparetwostringsgeneric(encseq, fwd, complement, &lcp2, pos1, pos2, depth, maxdepth); if (retval != retval2) { fprintf(stderr,"line %d: retval = %d != %d = retval2\n",__LINE__, retval,retval2); fprintf(stderr,"pos1 = %lu, pos2 = %lu, depth = %lu, maxdepth = %lu " "lcp = %lu, lcp2 = %lu\n", pos1, pos2, depth, maxdepth, commonunits->finaldepth, lcp2); exit(GT_EXIT_PROGRAMMING_ERROR); } if (commonunits->finaldepth != lcp2) { fprintf(stderr,"line %d: pos1 = %lu, pos2 = %lu, depth = %lu, maxdepth=%lu " "lcp = %lu != %lu = lcp2\n", __LINE__, pos1, pos2, depth, maxdepth, commonunits->finaldepth, lcp2); exit(GT_EXIT_PROGRAMMING_ERROR); } } #endif #undef CHECKSUFFIXRANGE #ifdef CHECKSUFFIXRANGE static void checksuffixrange(const Bentsedgresources *bsr, unsigned long subbucketleft, unsigned long width, unsigned long depth, int line) { unsigned long idx, newdepth = depth, pos1, pos2; #ifdef SKDEBUG printf("checksuffixrange "); showsuffixrange(bsr, subbucketleft, width, depth); #endif for (idx=0; idxfwd) { pos1 = gt_suffixsortspace_get(bsr->sssp,subbucketleft,idx); pos2 = gt_suffixsortspace_get(bsr->sssp,subbucketleft,idx+1); } else { pos1 = GT_REVERSEPOS(gt_encseq_total_length(bsr->encseq), gt_suffixsortspace_get(bsr->sssp,subbucketleft, idx)); pos2 = GT_REVERSEPOS(gt_encseq_total_length(bsr->encseq), gt_suffixsortspace_get(bsr->sssp,subbucketleft, idx+1)); } (void) gt_encseq_comparetwostrings(bsr->encseq, bsr->fwd, bsr->complement, &newdepth, pos1, pos2, depth); if (depth > newdepth) { fprintf(stderr,"line %d: " "depth=%lu > %lu=newdepth\n", line, depth, newdepth); fprintf(stderr,"suffix %lu vs %lu\n", gt_suffixsortspace_get(bsr->sssp,subbucketleft,idx), gt_suffixsortspace_get(bsr->sssp,subbucketleft,idx+1)); fprintf(stderr,"in range of length %lu\n",width); exit(GT_EXIT_PROGRAMMING_ERROR); } } } #endif #ifdef FASTCOMPAREDEBUG verifycomparestringresults(encseq, commonunits, fwd, complement, fwd ? pos1 : GT_REVERSEPOS(encseq->totallength,pos1), fwd ? pos2 : GT_REVERSEPOS(encseq->totallength,pos2), depth, maxdepth, retval); #endif #ifdef FASTCOMPAREDEBUG verifycomparestringresults(encseq, commonunits, fwd, complement, fwd ? pos1 : GT_REVERSEPOS(encseq->totallength,pos1), fwd ? pos2 : GT_REVERSEPOS(encseq->totallength,pos2), depth, 0, retval); #endif static inline void writeLCPVal(const GtEncseq *encseq, GtReadmode readmode, unsigned long *dest, unsigned long a, unsigned long b) { #ifndef NDEBUG int cmp = #endif gt_encseq_comparetwosuffixes(encseq, readmode, dest, false, false, 0, a, b, NULL, NULL); #ifndef NDEBUG if (cmp > 0) { fprintf(stderr, ": cmp %lu %lu = %d", a, b, cmp); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif } #ifdef WITHbruteforcelcpvalue static void showSuffixwithcode(FILE *fp,const Suffixwithcode *suffix) { char buffer[18+1]; gt_fromkmercode2string(buffer, suffix->code, 4, 8, "acgt"); fprintf(fp,"(startpos=%lu,code=%u,prefixindex=%u,\"%s\")", suffix->startpos, (unsigned int) suffix->code, suffix->prefixindex, buffer); } static unsigned long bruteforcelcpvalue(const GtEncseq *encseq, GtReadmode readmode, const Suffixwithcode *previoussuffix, const Suffixwithcode *currentsuffix, unsigned int minchanged, GtEncseqReader *esr1, GtEncseqReader *esr2) { unsigned long lcpvalue; unsigned int lcpvalue2; int cmp; cmp = gt_encseq_comparetwosuffixes(encseq, readmode, &lcpvalue, false, false, 0, previoussuffix->startpos, currentsuffix->startpos, esr1, esr2); if (cmp > 0) { fprintf(stderr,"cmp %lu %lu = %d, lcpval=%lu\n", previoussuffix->startpos, currentsuffix->startpos, cmp, lcpvalue); exit(GT_EXIT_PROGRAMMING_ERROR); } if (previoussuffix->code == currentsuffix->code) { gt_assert(lcpvalue == MIN(previoussuffix->prefixindex, currentsuffix->prefixindex)); } else { gt_assert(previoussuffix->code < currentsuffix->code); lcpvalue2 = MIN(minchanged,MIN(previoussuffix->prefixindex, currentsuffix->prefixindex)); if (lcpvalue != lcpvalue2) { fprintf(stderr,"lcpvalue = %lu != %u = lcpvalue2\n",lcpvalue,lcpvalue2); fprintf(stderr,"previoussuffix="); showSuffixwithcode(stderr,previoussuffix); fprintf(stderr,"\ncurrentsuffix="); showSuffixwithcode(stderr,currentsuffix); fprintf(stderr,"\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } } return lcpvalue; } #endif genometools-1.5.1/doc/notes/gff3.shtml000066400000000000000000001663631211610345200176560ustar00rootroot00000000000000 The Sequence Ontology - Resources - GFF3

News

GENERIC FEATURE FORMAT VERSION 3


SUMMARY

Author: Lincoln Stein Date: 15 December 2010 Version: 1.20 Although there are many richer ways of representing genomic features via XML, the stubborn persistence of a variety of ad-hoc tab-delimited flat file formats declares the bioinformatics community's need for a simple format that can be modified with a text editor and processed with shell tools like grep. The GFF format, although widely used, has fragmented into multiple incompatible dialects. When asked why they have modified the published Sanger specification, bioinformaticists frequently answer that the format was insufficient for their needs, and they needed to extend it. The proposed GFF3 format addresses the most common extensions to GFF, while preserving backward compatibility with previous formats. The new format: 1) adds a mechanism for representing more than one level of hierarchical grouping of features and subfeatures. 2) separates the ideas of group membership and feature name/id 3) constrains the feature type field to be taken from a controlled vocabulary. 4) allows a single feature, such as an exon, to belong to more than one group at a time. 5) provides an explicit convention for pairwise alignments 6) provides an explicit convention for features that occupy disjunct regions

Online Validator

An online GFF3 validator is available at http://modencode.oicr.on.ca/cgi-bin/validate_gff3_online It is limited to files of 3,000,000 lines or less. If you wish to validate larger files, please use the command-line version which can be downloaded from the same site.

DESCRIPTION OF THE FORMAT

The format consists of 9 columns, separated by tabs (NOT spaces). The following characters must be escaped using URL escaping conventions (%XX hex codes): tab newline carriage return control characters The following characters have reserved meanings and must be escaped when used in other contexts: ; (semicolon) = (equals) % (percent) & (ampersand) , (comma) Unescaped quotation marks, backslashes and other ad-hoc escaping conventions that have been added to the GFF format are explicitly forbidden Note that unescaped spaces are allowed within fields, meaning that parsers must split on tabs, not spaces. Undefined fields are replaced with the "." character, as described in the original GFF spec. Column 1: "seqid" The ID of the landmark used to establish the coordinate system for the current feature. IDs may contain any characters, but must escape any characters not in the set [a-zA-Z0-9.:^*$@!+_?-|]. In particular, IDs may not contain unescaped whitespace and must not begin with an unescaped ">". Column 2: "source" The source is a free text qualifier intended to describe the algorithm or operating procedure that generated this feature. Typically this is the name of a piece of software, such as "Genescan" or a database name, such as "Genbank." In effect, the source is used to extend the feature ontology by adding a qualifier to the type creating a new composite type that is a subclass of the type in the type column. Column 3: "type" The type of the feature (previously called the "method"). This is constrained to be either: (a)a term from the "lite" version of the Sequence Ontology - SOFA, a term from the full Sequence Ontology - it must be an is_a child of sequence_feature (SO:0000110) or (c) a SOFA or SO accession number. The latter alternative is distinguished using the syntax SO:000000. Columns 4 & 5: "start" and "end" The start and end of the feature, in 1-based integer coordinates, relative to the landmark given in column 1. Start is always less than or equal to end. For features that cross the origin of a circular feature (e.g. most bacterial genomes, plasmids, and some viral genomes), the requirement for start to be less than or equal to end is satisfied by making end = the position of the end + the length of the landmark feature. For zero-length features, such as insertion sites, start equals end and the implied site is to the right of the indicated base in the direction of the landmark. Column 6: "score" The score of the feature, a floating point number. As in earlier versions of the format, the semantics of the score are ill-defined. It is strongly recommended that E-values be used for sequence similarity features, and that P-values be used for ab initio gene prediction features. Column 7: "strand" The strand of the feature. + for positive strand (relative to the landmark), - for minus strand, and . for features that are not stranded. In addition, ? can be used for features whose strandedness is relevant, but unknown. Column 8: "phase" For features of type "CDS", the phase indicates where the feature begins with reference to the reading frame. The phase is one of the integers 0, 1, or 2, indicating the number of bases that should be removed from the beginning of this feature to reach the first base of the next codon. In other words, a phase of "0" indicates that the next codon begins at the first base of the region described by the current line, a phase of "1" indicates that the next codon begins at the second base of this region, and a phase of "2" indicates that the codon begins at the third base of this region. This is NOT to be confused with the frame, which is simply start modulo 3. For forward strand features, phase is counted from the start field. For reverse strand features, phase is counted from the end field. The phase is REQUIRED for all CDS features. Column 9: "attributes" A list of feature attributes in the format tag=value. Multiple tag=value pairs are separated by semicolons. URL escaping rules are used for tags or values containing the following characters: ",=;". Spaces are allowed in this field, but tabs must be replaced with the %09 URL escape. These tags have predefined meanings: ID Indicates the ID of the feature. IDs for each feature must be unique within the scope of the GFF file. In the case of discontinuous features (i.e. a single feature that exists over multiple genomic locations) the same ID may appear on multiple lines. All lines that share an ID collectively represent a single feature. Name Display name for the feature. This is the name to be displayed to the user. Unlike IDs, there is no requirement that the Name be unique within the file. Alias A secondary name for the feature. It is suggested that this tag be used whenever a secondary identifier for the feature is needed, such as locus names and accession numbers. Unlike ID, there is no requirement that Alias be unique within the file. Parent Indicates the parent of the feature. A parent ID can be used to group exons into transcripts, transcripts into genes, an so forth. A feature may have multiple parents. Parent can *only* be used to indicate a partof relationship. Target Indicates the target of a nucleotide-to-nucleotide or protein-to-nucleotide alignment. The format of the value is "target_id start end [strand]", where strand is optional and may be "+" or "-". If the target_id contains spaces, they must be escaped as hex escape %20. Gap The alignment of the feature to the target if the two are not collinear (e.g. contain gaps). The alignment format is taken from the CIGAR format described in the Exonerate documentation. (http://cvsweb.sanger.ac.uk/cgi-bin/cvsweb.cgi/exonerate ?cvsroot=Ensembl). See "THE GAP ATTRIBUTE" for a description of this format. Derives_from Used to disambiguate the relationship between one feature and another when the relationship is a temporal one rather than a purely structural "part of" one. This is needed for polycistronic genes. See "PATHOLOGICAL CASES" for further discussion. Note A free text note. Dbxref A database cross reference. See the section "Ontology Associations and Db Cross References" for details on the format. Ontology_term A cross reference to an ontology term. See the section "Ontology Associations and Db Cross References" for details. Is_circular A flag to indicate whether a feature is circular. Multiple attributes of the same type are indicated by separating the values with the comma "," character, as in: Parent=AF2312,AB2812,abc-3 In addition to Parent, the Alias, Note, DBxref and Ontology_term attributes can have multiple values. Note that attribute names are case sensitive. "Parent" is not the same as "parent". All attributes that begin with an uppercase letter are reserved for later use. Attributes that begin with a lowercase letter can be used freely by applications.

THE CANONICAL GENE

Figure1

FIGURE 1


This section describes the representation of a protein-coding gene in GFF3. To illustrate how a canonical gene is represented, consider Figure 1 (figure1.png). This indicates a gene named EDEN extending from position 1000 to position 9000. It encodes three alternatively-spliced transcripts named EDEN.1, EDEN.2 and EDEN.3, the last of which has two alternative translational start sites leading to the generation of two protein coding sequences. There is also an identified transcriptional factor binding site located 50 bp upstream from the transcriptional start site of EDEN.1 and EDEN2. Here is how this gene should be described using GFF3: 0 ##gff-version 3 1 ##sequence-region ctg123 1 1497228 2 ctg123 . gene 1000 9000 . + . ID=gene00001;Name=EDEN 3 ctg123 . TF_binding_site 1000 1012 . + . ID=tfbs00001;Parent=gene00001 4 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001;Name=EDEN.1 5 ctg123 . mRNA 1050 9000 . + . ID=mRNA00002;Parent=gene00001;Name=EDEN.2 6 ctg123 . mRNA 1300 9000 . + . ID=mRNA00003;Parent=gene00001;Name=EDEN.3 7 ctg123 . exon 1300 1500 . + . ID=exon00001;Parent=mRNA00003 8 ctg123 . exon 1050 1500 . + . ID=exon00002;Parent=mRNA00001,mRNA00002 9 ctg123 . exon 3000 3902 . + . ID=exon00003;Parent=mRNA00001,mRNA00003 10 ctg123 . exon 5000 5500 . + . ID=exon00004;Parent=mRNA00001,mRNA00002,mRNA00003 11 ctg123 . exon 7000 9000 . + . ID=exon00005;Parent=mRNA00001,mRNA00002,mRNA00003 12 ctg123 . CDS 1201 1500 . + 0 ID=cds00001;Parent=mRNA00001;Name=edenprotein.1 13 ctg123 . CDS 3000 3902 . + 0 ID=cds00001;Parent=mRNA00001;Name=edenprotein.1 14 ctg123 . CDS 5000 5500 . + 0 ID=cds00001;Parent=mRNA00001;Name=edenprotein.1 15 ctg123 . CDS 7000 7600 . + 0 ID=cds00001;Parent=mRNA00001;Name=edenprotein.1 16 ctg123 . CDS 1201 1500 . + 0 ID=cds00002;Parent=mRNA00002;Name=edenprotein.2 17 ctg123 . CDS 5000 5500 . + 0 ID=cds00002;Parent=mRNA00002;Name=edenprotein.2 18 ctg123 . CDS 7000 7600 . + 0 ID=cds00002;Parent=mRNA00002;Name=edenprotein.2 19 ctg123 . CDS 3301 3902 . + 0 ID=cds00003;Parent=mRNA00003;Name=edenprotein.3 20 ctg123 . CDS 5000 5500 . + 1 ID=cds00003;Parent=mRNA00003;Name=edenprotein.3 21 ctg123 . CDS 7000 7600 . + 1 ID=cds00003;Parent=mRNA00003;Name=edenprotein.3 22 ctg123 . CDS 3391 3902 . + 0 ID=cds00004;Parent=mRNA00003;Name=edenprotein.4 23 ctg123 . CDS 5000 5500 . + 1 ID=cds00004;Parent=mRNA00003;Name=edenprotein.4 24 ctg123 . CDS 7000 7600 . + 1 ID=cds00004;Parent=mRNA00003;Name=edenprotein.4 Lines beginning with ## are pragmas that provide meta-information about the document. Blank lines and lines beginning with a single # are ignored. Line 0 gives the GFF version using the ##gff-version pragma. Line 1 indicates the boundaries of the region being annotated (a 1,497,228 bp region named "ctg123") using the ##sequence-region pragma. Line 2 defines the boundaries of the gene. Column 9 of this line assigns the gene an ID of gene00001, and a human-readable name of EDEN. Because the gene is not part of a larger feature, it has no Parent. Line 3 annotates the transcriptional factor binding site. Since it is logically part of the gene, its Parent attribute is gene00001. Lines 4-6 define this gene's three spliced transcripts, one line for the full extent of each of the mRNAs. These features are necessary to act as parents for the four CDSs which derive from them, as well as the structural parents of the five exons in the alternative splicing set. Lines 7-11 identify the five exons. The Parent attributes indicate which mRNAs the exons belong to. Notice that several of the exons share the same parents, using the comma symbol to indicate multiple parentage. Lines 12-24 denote this gene's four CDSs. Each CDS belongs to one of the mRNAs. cds00003 and cds00004, which correspond to alternative start codons, belong to the same mRNA. Note that several of the features, including the gene, its mRNAs and the CDSs, all have Name attributes. This attributes assigns those features a public name, but is not mandatory. The ID attributes are only mandatory for those features that have children (the gene and mRNAs), or for those that span multiple lines. The IDs do not have meaning outside the file in which they reside. Hence, a slightly simplified version of this file would look like this: ##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001;Name=EDEN ctg123 . TF_binding_site 1000 1012 . + . Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00002;Parent=gene00001 ctg123 . mRNA 1300 9000 . + . ID=mRNA00003;Parent=gene00001 ctg123 . exon 1300 1500 . + . Parent=mRNA00003 ctg123 . exon 1050 1500 . + . Parent=mRNA00001,mRNA00002 ctg123 . exon 3000 3902 . + . Parent=mRNA00001,mRNA00003 ctg123 . exon 5000 5500 . + . Parent=mRNA00001,mRNA00002,mRNA00003 ctg123 . exon 7000 9000 . + . Parent=mRNA00001,mRNA00002,mRNA00003 ctg123 . CDS 1201 1500 . + 0 ID=cds00001;Parent=mRNA00001 ctg123 . CDS 3000 3902 . + 0 ID=cds00001;Parent=mRNA00001 ctg123 . CDS 5000 5500 . + 0 ID=cds00001;Parent=mRNA00001 ctg123 . CDS 7000 7600 . + 0 ID=cds00001;Parent=mRNA00001 ctg123 . CDS 1201 1500 . + 0 ID=cds00002;Parent=mRNA00002 ctg123 . CDS 5000 5500 . + 0 ID=cds00002;Parent=mRNA00002 ctg123 . CDS 7000 7600 . + 0 ID=cds00002;Parent=mRNA00002 ctg123 . CDS 3301 3902 . + 0 ID=cds00003;Parent=mRNA00003 ctg123 . CDS 5000 5500 . + 1 ID=cds00003;Parent=mRNA00003 ctg123 . CDS 7000 7600 . + 1 ID=cds00003;Parent=mRNA00003 ctg123 . CDS 3391 3902 . + 0 ID=cds00004;Parent=mRNA00003 ctg123 . CDS 5000 5500 . + 1 ID=cds00004;Parent=mRNA00003 ctg123 . CDS 7000 7600 . + 1 ID=cds00004;Parent=mRNA00003 NOTE 1 - SO or SOFA IDs: If using the SO (or SOFA) IDs rather than the short names1 ("mRNA" etc), use the following mappings: gene SO:0000704 mRNA SO:0000234 exon SO:0000147 cds SO:0000316 Other mRNA parts that you might wish to use are intron SO:0000188 (redundant with exon) polyA_sequence SO:0000610 (part of the three_prime_UTR) polyA_site SO:0000553 (part of the gene) five_prime_UTR SO:0000204 three_prime_UTR SO:0000205 NOTE 2 - "Orphan" exons CDSs, and other features. Ab initio gene prediction programs call hypothetical exons and CDS's that are attached to the genomic sequence and not necessarily to a known transcript. To handle these features, you may either (1) create a placeholder mRNA and use it as the parent for the exon and CDS subfeatures; or (2) attach the exons and CDSs directly to the gene. This is allowed by SO because of the transitive nature of the part_of relationship. NOTE 3 - UTRs, splice sites and translational start and stop sites. These are implied by the combination of exon and CDS and do not need to be explicitly annotated as part of the canonical gene. In the case of annotating predicted splice or translational start/stop sites independently of a particular gene, it is suggested that they be attached directly to the genomic sequence and not to a gene or a subpart of a gene. NOTE 4 - CDS features MUST have have a defined phase field. Otherwise it is not possible to infer the correct polypeptides corresponding to partially annotated genes. NOTE 5 - The START and STOP codons are included in the CDS. That is, if the locations of the start and stop codons are known, the first three base pairs of the CDS should correspond to the start codon and the last three correspond the stop codon.

CIRCULAR GENOMES

For a circular genome, the landmark feature should include Is_circular=true in column 9. In the example below, from bacteriophage f1, gene II extends across the origin from positions 6477-831. The feature end is given as length of the landmark feature, J02448, plus the distance from the origin to the end of gene II (6407 + 831 = 7238). ##gff-version 3 # organism Enterobacteria phage f1 # Note Bacteriophage f1, complete genome. J02448 GenBank region 1 6407 . + . ID=J02448;Name=J02448;Is_circular=true; J02448 GenBank CDS 6006 7238 . + 0 ID=geneII;Name=II;Note=protein II;

REPRESENTING SPLICED NON-CODING TRANSCRIPTS

For spliced non-coding transcripts, such as those produced by some processed snRNAs and viruses, use a parent feature of "noncoding_transcript" and a child of "exon."

PARENT (PART-OF) RELATIONSHIPS

The reserved Parent attribute can be used to establish a part-of relationship between two features. A feature that has the Parent attribute set is interpreted as asserting that it is a part of the specified Parent feature. Features must respect the Sequence Ontology Part-Of relationships. A Parent relationship between two features that is not one of the Part-Of relationships listed in SO should trigger a parse exception Similarly, a set of Parent relationships that would cause a cycle should also trigger an exception. The GFF3 format does not enforce a rule in which features must be wholly contained within the location of their parents, since some elements of the Sequence Ontology (e.g. enhancers in genes) allow for distant cis relationships.

THE GAP ATTRIBUTE

Protein and nucleotide alignment features typically consist of two sequences, the reference sequence and the "target", and are not always colinear. For example, consider the following alignment between an EST ("EST23") and a segment of the genome ("Chr3"): Chr3 (reference) 1 CAAGACCTAAACTGGAT-TCCAAT 23 EST23 (target) 1 CAAGACCT---CTGGATATCCAAT 21 Previous versions of the GFF format would represent this alignment as three colinear segments, but this made it difficult to reconstruct the gapped alignment. GFF3 recommends representing gapped alignments explicitly with the "Gap" attribute. The Gap attribute's format consists of a series of (operation,length) pairs separated by space characters, for example "M8 D3 M6". Each operation is a single-letter code: Code Operation ---- --------- M match I insert a gap into the reference sequence D insert a gap into the target (delete from reference) F frameshift forward in the reference sequence R frameshift reverse in the reference sequence In the alignment between EST23 and Chr3 shown above, Chr3 is the reference sequence referred to in the first column of the GFF3 file, and EST23 is the sequence referred to by the Target attribute. This gives a Gap string of "M8 D3 M6 I1 M6". The full GFF match line will read: Chr3 . Match 1 23 . . . ID=Match1;Target=EST23 1 21;Gap=M8 D3 M6 I1 M6 For protein to nucleotide matches, the M, I and D operations apply to amino acid residues in the target and nucleotide base pairs in the reference in a 1:3 residue. That is, "M2" means to match two amino residues in the target to six base pairs in the reference. Hence this alignment: 100 atgaaggag---gttattgcgaatgtcggcggt 1 M..K..E..V..V..I..-..N..V..G..G.. Corresponds to this GFF3 Line: ctg123 . nucleotide_to_protein 100 129 . + . ID=match008;Target=p101 1 10;Gap=M3 I1 M2 D1 M4 In addition, the Gap attribute provides <F>orward and <R>everse frameshift operators to allow for frameshifts in the alignment. These are in nucleotide coordinates: a forward frameshift skips forward the indicated number of base pairs, while a reverse frameshift moves backwards. Examples: 100 atgaaggag---gttattgaatgtcggcggt Gap=M3 I1 M2 F1 M4 1 M..K..E..V..V..I... N..V..G..G 100 atgaaggag---gttataatgtcggcggt Gap=M3 I1 M2 R1 M4 1 M..K..E..V..V..I. N..V..G..G

ALIGNMENTS

In the SO, an alignment between the reference sequence and another sequence is called a "match". In addition to the generic "match" type, there are the subclasses "cDNA_match," "EST_match," "translated_nucleotide_match," "nucleotide_to_protein_match," and "nucleotide_motif." Matches typically contain gaps; matches broken up by large gaps are usually called "HSPs" (high-scoring segment pair), and previous incarnations of GFF have handled gapped alignments by breaking up the alignment into a series of ungapped HSPs. The SO does not have an HSP type. Instead, gapped matches are represented as a single feature that occupies a discontinuous location on the reference sequence. Figure 2 shows the same gene as before, but with a new track added showing an alignment of a sequenced cDNA to the genome. For the purposes of illustration, we have shown the regions of alignment to be exact across the three exons of the second spliced transcript (EDEN.2).
Figure2

FIGURE 2

The recommended way to represent this alignment is with a single feature of type "cDNA_match" and a Gap attribute that indicates that the alignment is in three segments: ctg123 . cDNA_match 1050 9000 6.2e-45 + . ID=match00001;Target=cdna0123 12 2964;Gap=M451 D3499 M501 D1499 M2001 Parsed out, the Target attribute indicates that the sequence named "cdna0123" between bases 12 and 2964 (in cdna coordinates) aligns to bases 1050 to 9000 of ctg123. The Gap attribute is easier to read when spaces are inserted: M451 match 451 bases D3499 skip 3499 bases in the reference ctg123 sequence M501 match the next 501 bases D1499 skip 1499 bases in the reference ctg123 M2001 match the next 2001 bases Note that the matched region is 2953 bases, which corresponds exactly to the matching subsequence [12,2964] of the target. Extra bases in the cDNA which would cause gaps in the reference sequence would be indicated using the CIGAR "I" notation. Another important item to note is that the ID corresponds to the Match and not to the target sequence. This avoids the confusion that has occurred in previous incarnations of GFF which made it impossible to distinguish between a particular alignment of a target sequence to the genome and all alignments of a target sequence to the genome. A limitation of the Gap representation is that the entire alignment shares the same score (column 6). To give each component of the match a separate score, it can be broken across multiple lines as shown here: ctg123 . cDNA_match 1050 1500 5.8e-42 + . ID=match00001;Target=cdna0123 12 462 ctg123 . cDNA_match 5000 5500 8.1e-43 + . ID=match00001;Target=cdna0123 463 963 ctg123 . cDNA_match 7000 9000 1.4e-40 + . ID=match00001;Target=cdna0123 964 2964 Notice that the ID is the same across each of the three lines, indicating that these lines all refer to a single feature, the Match. Each aligning segment, however has a distinct score and Target region. The two types of representations can be mixed, allowing large aligned segments to have their own GFF line and score, while small gaps within them are represented using a Gap attribute. Matches can align to either the + or the - strand of the reference sequence. This should be denoted in the seventh column of the GFF line and *not* by changing the order of the start and end positions in the Target attribute. To illustrate this, Figure 3 adds an EST pair to the annotation. The two ESTs, mjm1123.5 and mum1123.3 correspond to 5' and 3' EST reads from the same cDNA clone. The following GFF3 lines describe them: ctg123 . EST_match 1200 3200 2.2e-30 + . ID=match00002;Target=mjm1123.5 5 506;Gap=M301 D1499 M201 ctg123 . EST_match 7000 9000 7.4e-32 - . ID=match00003;Target=mjm1123.3 1 502;Gap=M101 D1499 M401 Please note that the subsequence indicated by the Target always uses the coordinate system of the EST, regardless of the direction of the alignment. For the 3' EST, the seventh column contains a "-" to indicate that the match is to the reverse complement of ctg123. The Gap attribute does not change as a consequence of this reverse complementation, and is read from left to right in the usual manner. An application may wish to group the EST pair into a single feature. This can be accomplished by creating an implied cDNA_match that extends from the left end of the first EST to the right end of the last EST, and indicating that this cDNA match is the Parent of the two ESTs. The parts of the match use the SO "match_part" term. A match_part can be used as a subpart of any type of match. ctg123 . cDNA_match 1200 9000 . . . ID=cDNA00001 ctg123 . match_part 1200 3200 2.2e-30 + . ID=match00002;Parent=cDNA00001;Target=mjm1123.5 5 506;Gap=M301 D1499 M201 ctg123 . match_part 7000 9000 7.4e-32 - . ID=match00003;Parent=cDNA00001;Target=mjm1123.3 1 502;Gap=M101 D1499 M401
Figure3

FIGURE 3


TRANSCRIPT-RELATIVE ALIGNMENTS

The representation of strandedness in nucleotide-to-nucleotide and protein-to-nucleotide alignments is a common source of confusion in GFF files. This section will attempt to explain it. * Case #1: alignment to a + strand transcript Consider a pair of EST matches to the genome: ============================= genome -------------------> transcript ------> <---- EST_A (5') EST_B (3') EST_A is a 5' EST and its sequence (as represented in a FASTA file, for example) is in the same strand as the genomic sequence. It is represented as: ctg123 . EST_match 1000 1500 . + . ID=match001;Target=EST_A 1 500 + The strand field in column #7 is "+" indicating that the match is to the forward strand of the genome. The optional strand field in the Target attribute is also +, indicating that the alignment is to the plus strand of the implied underlying transcript. Let us now consider EST_B , which is a 3' EST. Its sequence as represented in the FASTA file aligns to the reverse complement of the genomic sequence. It is represented as: ctg123 . EST_match 2000 2500 . + . ID=match002;Target=EST_B 1 500 - The strand field in column #7 is "+" indicating that the match is to a transcript feature on the forward of the genome. The strand field in the Target attribute is -, indicating that the EST sequence should be reverse complemented in order to align to the underlying transcript. * Case #2: alignment to a - strand transcript Here is the opposite case: ============================= genome <-------------------- transcript ------> <---- EST_D (3') EST_C (5') In this case, the 5' EST_C aligns to the reverse complement of the forward strand of the genome, while the 3' EST_D aligns to the forward strand directly. These are represented as follows: ctg123 . EST_match 2000 2500 . - . ID=match001;Target=EST_C 1 500 + ctg123 . EST_match 1000 1500 . - . ID=match001;Target=EST_D 1 500 - The first line indicates that the transcript is on the - strand of the genome, and that EST_C aligns to the transcripts forward strand. The second line uses - in the 7th column to indicate that the transcript is on the minus strand, and - in the Target field to indicate that EST_D aligns to the minus strand of the transcript. =================================================================== Confused? Just remember that for purposes of display, the source and target strands will be multipled together. A +/+ or -/- alignment indicates that the reference sequence and the target sequence can be aligned directly. A +/- or -/+ alignment indicates that the target must be reverse complemented in order to align to the plus strand of the reference sequence. =================================================================== A similar rule applies to TBLASTX alignments, which rely on matching the six-frame translation of the source to the six-frame translation of the target. Consider the case of two genomes that align together in the forward direction, whose alignment is supported by translations of genes A and B, one of which is on the plus strand, and the other on the minus strand: =============================> genome X ------> <---- gene A gene B =============================> genome Y These two alignments will be represented as: X TBLASTX translated_nucleotide_match 1000 1500 . + . ID=matchA;Target=Y 500 1000 + X TBLASTX translated_nucleotide_match 2000 2500 . - . ID=matchB;Target=Y 1500 2000 - Note that the first alignment is +/+ and the second is -/-. Both indicate that the sequences of genomes X and Y can be aligned directly. Now we look at the case of two genomes that align in the antiparallel direction: =============================> genome X ------> <---- gene A gene B <============================= genome Y These two alignments will be represented as: X TBLASTX translated_nucleotide_match 1000 1500 . + . ID=matchA;Target=Y 500 1000 - X TBLASTX translated_nucleotide_match 2000 2500 . - . ID=matchB;Target=Y 1500 2000 + The first match indicates that a plus strand feature of genome X aligns to a minus strand feature of genome Y. The second match indicates that a minus strand feature of genome X aligns to a plus strand feature of genome Y. In both cases, the result is to align the plus strand of genome X to the minus strand of genome Y.

ONTOLOGY ASSOCIATIONS AND DB CROSS REFERENCES

Two reserved attributes, Ontology_term and Dbxref, can be used to establish links between a GFF3 feature and a data record contained in another database. Ontology_term is reserved for associations to ontologies, such as the Gene Ontology. Dbxref is used for all other cross references. While there is no firm boundary line between these two concepts, curators tend to treat ontology associations differently and hence ontology terms have been given their own reserved attribute label. The value of both Ontology_term and Dbxref is the ID of the cross referenced object in the form "DBTAG:ID". The DBTAG indicates which database the referenced object can be found in, and ID indicates the identifier of the object within that database. IDs can contain unescaped colons but DBTAGs cannot, so parsing code should split on the first colon encountered in the attribute value. The format of each type of ID varies from database to database. An authoritative list of databases, their DBTAGs, and the URL transformation rules that can be used to fetch the objects given their IDs can be found at this location: ftp://ftp.geneontology.org/pub/go/doc/GO.xrf_abbs Further details can be found here: ftp://ftp.geneontology.org/pub/go/doc/GO.xrf_abbs_spec Here are some common examples: * a dbxref to an EMBL sequence accession number: Dbxref="EMBL:AA816246" * a dbxref to an NCBI gi number: Dbxref="NCBI_gi:10727410" * a Ontology_term referring to a GO association Ontology_term="GO:0046703"

OTHER SYNTAX

Comments are preceded by the # symbol. Meta-data and directives are preceded by ##. The following directives are recognized: ##gff-version 3 The GFF version, always 3 in this spec. This directive must be present, and must be the topmost line of the file. ##sequence-region seqid start end The sequence segment referred to by this file, in the format "seqid start end". This element is optional, but strongly encouraged because it allows parsers to perform bounds checking on features. There may be multiple ##sequence-region directives, each corresponding to one of the reference sequences referred to in the body of the file. ##feature-ontology URI This directive indicates that the GFF3 file uses the ontology of feature types located at the indicated URI or URL. Multiple URIs may be added, in which case they are merged (or raise an exception if they cannot be merged). The URIs for the released sequence ontologies are: Release 1: 5/12/2004 http://song.cvs.sourceforge.net/*checkout*/song/ontology/sofa.obo?revision=1.6 Release 2: 5/16/2005 http://song.cvs.sourceforge.net/*checkout*/song/ontology/sofa.obo?revision=1.12i Release 2.4.3 06/01/2010 SO: http://song.cvs.sourceforge.net/viewvc/*checkout*/song/ontology/so.obo?revision=1.263 SOFA: http://song.cvs.sourceforge.net/viewvc/*checkout*/song/ontology/sofa.obo?revision=1.217 Releases occur every two months for SO and SOFA. The repository for SO releases is here: http://sourceforge.net/projects/song/files/Sequence%20Ontology/ The repository for SOFA releases is here: http://sourceforge.net/projects/song/files/SO_Feature_Annotation/ This directive may occur several times per file. If no feature ontology is specified, then the most recent release of the Sequence Ontology is assumed. If multiple directives are given and a feature type is matched by multiple ontologies, the matching ontology included by the directive highest in the file wins the reference. The Sequence Ontology itself is always referenced last. The content referenced by URI must be in OBO or DAG-Edit format. ##attribute-ontology URI This directive indicates that the GFF3 uses the ontology of attribute names located at the indicated URI or URL. This directive may appear multiple times to load multiple URIs, in which case they are merged (or raise an exception if merging is not possible). Currently no formal attribute ontologies exist, so this attribute is for future extension. ##source-ontology URI This directive indicates that the GFF3 uses the ontology of source names located at the indicated URI or URL. This directive may appear multiple times to load multiple URIs, in which case they are merged (or raise an exception if merging is not possible). Currently no formal source ontologies exist, so this attribute is for future extension. ##species NCBI_Taxonomy_URI This directive indicates the species that the annotations apply to. The preferred format is a NCBI URL that points to the relevant species page in either of the following formats: http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=6239 http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?name=Caenorhabditis+elegans ##genome-build source buildName The genome assembly build name used for the coordinates given in the file. Please specify the source of the assembly as well as its name. Examples (the parentheses are comments). ##genome-build NCBI B36 (human) ##genome-build WormBase ws110 (worm) ##genome-build FlyBase r4.1 (drosophila) ### This directive (three # signs in a row) indicates that all forward references to feature IDs that have been seen to this point have been resolved. After seeing this directive, a program that is processing the file serially can close off any open objects that it has created and return them, thereby allowing iterative access to the file. Otherwise, software cannot know that a feature has been fully populated by its subfeatures until the end of the file has been reached. It is recommended that complex features, such as the canonical gene, be terminated with the ### notation. ##FASTA This notation indicates that the annotation portion of the file is at an end and that the remainder of the file contains one or more sequences (nucleotide or protein) in FASTA format. This allows features and sequences to be bundled together. Example: ##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001;Name=EDEN ctg123 . TF_binding_site 1000 1012 . + . ID=tfbs00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001;Name=EDEN.1 ctg123 . five_prime_UTR 1050 1200 . + . Parent=mRNA00001 ctg123 . CDS 1201 1500 . + 0 ID=cds00001;Parent=mRNA00001 ctg123 . CDS 3000 3902 . + 0 ID=cds00001;Parent=mRNA00001 ctg123 . CDS 5000 5500 . + 0 ID=cds00001;Parent=mRNA00001 ctg123 . CDS 7000 7600 . + 0 ID=cds00001;Parent=mRNA00001 ctg123 . three_prime_UTR 7601 9000 . + . Parent=mRNA00001 ctg123 . cDNA_match 1050 1500 5.8e-42 + . ID=match00001;Target=cdna0123+12+462 ctg123 . cDNA_match 5000 5500 8.1e-43 + . ID=match00001;Target=cdna0123+463+963 ctg123 . cDNA_match 7000 9000 1.4e-40 + . ID=match00001;Target=cdna0123+964+2964 ##FASTA >ctg123 cttctgggcgtacccgattctcggagaacttgccgcaccattccgccttg tgttcattgctgcctgcatgttcattgtctacctcggctacgtgtggcta tctttcctcggtgccctcgtgcacggagtcgagaaaccaaagaacaaaaa aagaaattaaaatatttattttgctgtggtttttgatgtgtgttttttat aatgatttttgatgtgaccaattgtacttttcctttaaatgaaatgtaat cttaaatgtatttccgacgaattcgaggcctgaaaagtgtgacgccattc gtatttgatttgggtttactatcgaataatgagaattttcaggcttaggc ttaggcttaggcttaggcttaggcttaggcttaggcttaggcttaggctt aggcttaggcttaggcttaggcttaggcttaggcttaggcttaggcttag aatctagctagctatccgaaattcgaggcctgaaaagtgtgacgccattc ... >cnda0123 ttcaagtgctcagtcaatgtgattcacagtatgtcaccaaatattttggc agctttctcaagggatcaaaattatggatcattatggaatacctcggtgg aggctcagcgctcgatttaactaaaagtggaaagctggacgaaagtcata tcgctgtgattcttcgcgaaattttgaaaggtctcgagtatctgcatagt gaaagaaaaatccacagagatattaaaggagccaacgttttgttggaccg tcaaacagcggctgtaaaaatttgtgattatggttaaagg For backward-compatibility with the GFF version output by the Artemis tool, a GFF line that begins with the character > creates an implied ##FASTA directive.

PATHOLOGICAL CASES

The following section discusses how to represent "pathological" cases that arise in prokaryotic and eukaryotic genetics. Most of these have to do with organisms' endlessly creative ways of processing transcripts. a) Single exon genes This is the case in which a single unspliced transcript encodes a single CDS. ----->XXXXXXX*------> The preferred representation is to create a gene, a transcript, an exon and a CDS: ChrX . gene XXXX YYYY . + . ID=gene01;name=resA ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01 ChrX . exon XXXX YYYY . + . Parent=tran01 ChrX . CDS XXXX YYYY . + . Parent=tran01 Some groups will find this redundant. A valid alternative is to omit the exon feature: ChrX . gene XXXX YYYY . + . ID=gene01;name=resA ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01 ChrX . CDS XXXX YYYY . + . Parent=tran01 It is not recommended to parent the CDS directly onto the gene, because this will make it impossible to determine the UTRs (since the gene may validly include untranscribed regulatory regions). Also note that mixing the two styles, as in the case of an organism with both spliced and unspliced transcripts, is liable to lead to the confusion of people working with the GFF3 file. b) Polycistronic transcripts This is the case in which a single (possibly spliced) transcript encodes multiple open reading frames that generate independent protein products. ----->XXXXXXX*-->BBBBBB*--->ZZZZ*-->AAAAAA*----- Since the single transcript corresponds to multiple genes that can be identified by genetic analysis, the recommended solution here is to create four "gene" objects and make them the parent for a single transcript. The transcript will contain a single exon (in the unspliced case) and four separate CDSs: ChrX . gene XXXX YYYY . + . ID=gene01;name=resA ChrX . gene XXXX YYYY . + . ID=gene02;name=resB ChrX . gene XXXX YYYY . + . ID=gene03;name=resX ChrX . gene XXXX YYYY . + . ID=gene04;name=resZ ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01,gene02,gene03,gene04 ChrX . exon XXXX YYYY . + . ID=exon00001;Parent=tran01 ChrX . CDS XXXX YYYY . + . Parent=tran01;Derives_from=gene01 ChrX . CDS XXXX YYYY . + . Parent=tran01;Derives_from=gene02 ChrX . CDS XXXX YYYY . + . Parent=tran01;Derives_from=gene03 ChrX . CDS XXXX YYYY . + . Parent=tran01;Derives_from=gene04 To disambiguate the relationship between which genes encode which CDSs, you may use the Derives_from relationship. c) Gene containing an intein An intein occurs when a portion of the protein is spliced out and the two polypeptide fragments are rejoined to become a functional protein. The portion that is spliced out is called the "intein," and it may itself have intrinsic molecular activity: ----->XXXXXXyyyyyyyyyyXXXXXXX*------- (yyyyyy is the intein) The preferred representation is to create one gene, one transcript, one exon, and one CDS. The CDS produces a pre-polypeptide using the "Derives_from" tag, and this polypeptide in turn gives rise to two mature_polypeptides, one each for the intein and the flanking protein: ChrX . gene XXXX YYYY . + . ID=gene01;name=resA ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01 ChrX . exon XXXX YYYY . + . Parent=tran01 ChrX . CDS XXXX YYYY . + . ID=cds01;Parent=tran01 ChrX . polypeptide XXXX YYYY . + . ID=poly01;Derives_from=cds01 ChrX . mature_polypeptide XXXX YYYY . + . ID=poly02;Parent=poly01 ChrX . mature_polypeptide XXXX YYYY . + . ID=poly02;Parent=poly01 ChrX . intein XXXX YYYY . + . ID=poly03;Parent=poly01 Because the flanking mature_polypeptide has discontinuous coordinates on the genome, it appears twice with the same ID. If the intein is immediately degraded, you may not wish to annotate it explicitly, and its line would be deleted from the example. However, if it has molecular activity, it may correspond to a gene, in which case: ChrX . gene XXXX YYYY . + . ID=gene01;name=resA ChrX . gene XXXX YYYY . + . ID=gene02;name=inteinA ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01,gene02 ChrX . exon XXXX YYYY . + . Parent=tran01 ChrX . CDS XXXX YYYY . + . ID=cds01;Parent=tran01 ChrX . polypeptide XXXX YYYY . + . ID=poly01;Derives_from=cds01 ChrX . mature_polypeptide XXXX YYYY . + . ID=poly02;Parent=poly01;Derives_from=gene01 ChrX . mature_polypeptide XXXX YYYY . + . ID=poly02;Parent=poly01;Derives_from=gene01 ChrX . intein XXXX YYYY . + . ID=poly03;Parent=poly01;Derives_from=gene02 The term "polypeptide" is part of SO. The terms "mature_polypeptide" and "intein" are slated to be added in a pending release. d) Trans-spliced transcript This occurs when two genes contribute to a processed transcript via a trans-splicing reaction: spliced leader =======>----->XXXXXXX*------> The simplest way to represent this is to show the mRNA as being split across two discontinuous genomic locations: ChrX . gene XXXX YYYY . + . ID=gene01;name=my_gene ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01 ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01 ChrX . exon XXXX YYYY . + . Parent=tran01 ChrX . CDS XXXX YYYY . + . ID=cds01;Parent=tran01 However, this does not indicate which part of the transcript comes from the spliced leader. A preferred representation explicitly adds features for the spliced leader gene, the primary_transcript and the spliced_leader_RNA: ChrX . gene XXXX YYYY . + . ID=gene01;name=my_gene ChrX . gene XXXX YYYY . + . ID=gene02;name=leader_gene ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01,gene02 ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01,gene02 ChrX . primary_transcript XXXX YYYY . + . ID=pt01;Parent=tran01;Derives_from=gene01 ChrX . spliced_leader_RNA XXXX YYYY . + . ID=sl01;Parent=tran01;Derives_from=gene02 ChrX . exon XXXX YYYY . + . Parent=tran01 ChrX . CDS XXXX YYYY . + . ID=cds01;Parent=tran01 As shown here, the mRNA derives from two genes ("my_gene" and the leader gene) and occupies disjunct coordinates on the genome. The primary_transcript, which encodes the body of the mRNA, is part of (has as its Parent) this mRNA. The same relationship applies to the spliced leader RNA. The Derives_from relationship is used to indicate which genes produced the primary transcript and spliced leader respectively. The exon and CDS features follow in the normal fashion. e) Programmed frameshift This event occurs when the ribosome performs a programmed frameshift during translation in order to skip over an in-frame stop codon. The frameshift may occur forward or backward. -------------------------> mRNA ========== ============* CDS The representation of this is to make the CDS discontinuous: ChrX . gene XXXX YYYY . + . ID=gene01;name=my_gene ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01;Ontology_term=SO:1000069 ChrX . exon XXXX YYYY . + . Parent=tran01 ChrX . CDS XXXX YYYY 0 + . ID=cds01;Parent=tran01 ChrX . CDS YYYY-1 ZZZZ 1 + . ID=cds01;Parent=tran01 You will also need to adjust the phase field properly so that the CDS translates. It is suggested that the mRNA be tagged with the appropriate SO transcript attributes such as "minus_1_translational_frameshift" (SO:1000069). This will allow all such programmed frameshift mRNAs to be recovered with a query. The accession for "plus_1_translational_frameshift" is SO:1001263. f) An operon A classic operon occurs when the genes in a polycistronic transcript are co-regulated by cis-regulatory element(s): regulatory element * ================================================> operon ----->XXXXXXX*-->BBBBBB*--->ZZZZ*-->AAAAAA*----- It can be indicated in GFF3 in this way: ChrX . operon XXXX YYYY . + . ID=operon01;name=my_operon ChrX . promoter XXXX YYYY . + . Parent=operon01 ChrX . gene XXXX YYYY . + . ID=gene01;Parent=operon01;name=resA ChrX . gene XXXX YYYY . + . ID=gene02;Parent=operon01;name=resB ChrX . gene XXXX YYYY . + . ID=gene03;Parent=operon01;name=resX ChrX . gene XXXX YYYY . + . ID=gene04;Parent=operon01;name=resZ ChrX . mRNA XXXX YYYY . + . ID=tran01;Parent=gene01,gene02,gene03,gene04 ChrX . exon XXXX YYYY . + . ID=exon00001;Parent=tran01 ChrX . CDS XXXX YYYY . + . Parent=tran01;Derives_from=gene01 ChrX . CDS XXXX YYYY . + . Parent=tran01;Derives_from=gene02 ChrX . CDS XXXX YYYY . + . Parent=tran01;Derives_from=gene03 ChrX . CDS XXXX YYYY . + . Parent=tran01;Derives_from=gene04 The regulatory element ("promoter" in this example) is part of the operon via the Parent tag. The four genes are part of the operon, and the resulting mRNA is multiply-parented by the four genes, as in the earlier example. At the time of this writing, promoters and other cis-regulatory elements cannot be part_of an operon, but this restriction is being reconsidered.

Change Log: 1.20 Wed Dec 15 12:35:10 MST 2010 -Added language to the description of the ID attribute to clarify that discontinuous features can exist on multiple lines and share the same ID. 1.19 Tue Jul 6 12:51:26 MDT 2010 -Fixed coordinate errors in the EST_match and match_part examples in the 'Alignments' section. -Constrained multiple attribute values to the Parent, Alias, Note, DBxref and Ontology_term attributes. 1.18 June 24 2010 -Added the sections regarding circular genomes to the spec. 1.17 Wed June 2 2010 -Changed the spec to include Sequence Ontology (SO) sequence_feature terms in column 3 as well as SOFA terms. (SOFA is a subset of SO). 1.16 Tue May 25 10:06:38 MDT 2010 -Fixed more incorrect CDS phases throughout. -Changed (three|five)_prime_utr to (three|five)_prime_UTR throughout. -Changed (3'|5')-UTR to (three|five)_prime_UTR throughout. -Added ID attributes to CDS features (required for multiline features) in the FASTA pragma example. 1.15 Mon Aug 31 12:59:26 EDT 2009 -Fixed incorrect CDS phases in the canonical gene example. 1.14 Mon Aug 25 10:24:02 EDT 2008 -Add meta-directives for species and build number. 1.13 Wed May 23 10:31:01 EDT 2007 -Insist that CDS include the start and end codon. 1.12 Thu Apr 5 17:32:32 EDT 2007 -Use "match_part" as the subpart of cDNA_match in the paired EST example. -Phase is required for all CDS features. 1.11 Fri Dec 1 16:33:39 EST 2006 -Clarified definition of phase relative to reverse strand features 1.10 14 September 2006 -Reformatted for new SO web site. 1.09 Wed Sep 6 17:55:32 EDT 2006 -Information about the GFF3 validator. 1.08 Tue Jul 18 15:12:11 EDT 2006 -Added URLs for SO releases. 1.07 Wed May 24 21:59:02 EDT 2006 -Fixed description of phase (temporarily lost due to CVS glitches) 1.06 Wed May 24 11:44:22 EDT 2006 -Relaxed escaping rules. -Fixed typos found by Gordon Gremme. 1.05 Tue May 23 10:46:25 EDT 2006 -Fixed all IDs in the examples to make them internally consistent. Previously, some examples did not validate because of inconsistent numbers of zeroes in the identifiers (mRNA00001 vs mRNA0001).
genometools-1.5.1/gtdata/000077500000000000000000000000001211610345200153105ustar00rootroot00000000000000genometools-1.5.1/gtdata/doc/000077500000000000000000000000001211610345200160555ustar00rootroot00000000000000genometools-1.5.1/gtdata/doc/cds.lua000066400000000000000000000001411211610345200173250ustar00rootroot00000000000000if not gtdata_doc_dir then gtdata_doc_dir = "./" end dofile(gtdata_doc_dir.."regionmapping.lua") genometools-1.5.1/gtdata/doc/chseqids.lua000066400000000000000000000006061211610345200203650ustar00rootroot00000000000000print ([[ File format for mapping_file: The supplied mapping file defines a mapping table named ``chseqids''. It maps the sequence-regions given in the GFF3_file to other names. It can be defined as follows: chseqids = { chr1 = "seq1", chr2 = "seq2" } When this example is used, all sequence ids ``chr1'' will be changed to ``seq1'' and all sequence ids ``chr2'' to ``seq2''.]]) genometools-1.5.1/gtdata/doc/csa.lua000066400000000000000000000020701211610345200173250ustar00rootroot00000000000000print ([[ Example: -------- Let's assume we have a GFF3 file 'csa_example_spliced_alignments.gff3' containing the following four overlapping spliced alignments (represented as genes with exons as children): ]]) print(io.open(gtdata_doc_dir.."csa_example_spliced_alignments.gff3"):read("*a")) print([[ To compute the consensus spliced alignments we call: $ gt csa csa_example_spliced_alignments.gff3 Which returns: ]]) print(io.open(gtdata_doc_dir.."csa_example_consensus_spliced_alignments.gff3"):read("*a")) print([[ As one can see, they have been combined into a consensus spliced alignment (represented as genes with mRNAs as children which in turn have exons as children) with two alternative splice forms. The first and the third spliced alignment have been combined into the first alternative splice form (mRNA1) and the the second and the fourth spliced alignment into the second alternative splice form (mRNA2). As one can see, the second exon from the first alternative splice form ist shorter than the corresponding exon from the second alternative splice form.]]) genometools-1.5.1/gtdata/doc/csa_example_consensus_spliced_alignments.gff3000066400000000000000000000006711211610345200271350ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 290 seq gt csa gene 1 290 . + . ID=gene1 seq gt csa mRNA 1 290 . + . ID=mRNA1;Parent=gene1 seq gt csa exon 1 90 . + . Parent=mRNA1 seq gt csa exon 110 190 . + . Parent=mRNA1 seq gt csa exon 201 290 . + . Parent=mRNA1 seq gt csa mRNA 1 290 . + . ID=mRNA2;Parent=gene1 seq gt csa exon 1 90 . + . Parent=mRNA2 seq gt csa exon 101 190 . + . Parent=mRNA2 seq gt csa exon 201 290 . + . Parent=mRNA2 ### genometools-1.5.1/gtdata/doc/csa_example_spliced_alignments.gff3000066400000000000000000000011351211610345200250310ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 290 seq . gene 1 209 . + . ID=gene1 seq . exon 1 90 . + . Parent=gene1 seq . exon 110 190 . + . Parent=gene1 seq . exon 201 209 . + . Parent=gene1 ### seq . gene 1 290 . + . ID=gene2 seq . exon 1 90 . + . Parent=gene2 seq . exon 101 190 . + . Parent=gene2 seq . exon 201 290 . + . Parent=gene2 ### seq . gene 10 290 . + . ID=gene3 seq . exon 10 90 . + . Parent=gene3 seq . exon 110 190 . + . Parent=gene3 seq . exon 201 290 . + . Parent=gene3 ### seq . gene 181 290 . + . ID=gene4 seq . exon 181 190 . + . Parent=gene4 seq . exon 201 290 . + . Parent=gene4 ### genometools-1.5.1/gtdata/doc/eval.lua000066400000000000000000000010141211610345200175030ustar00rootroot00000000000000print ([[ The program shows sensitivity and specificity values for certain feature types (e.g., gene, mRNA, and exon). For some feature types the number of missing and wrong features of that type is also shown. Thereby, ``missing'' means the number of features of that type from the ``reference'' without overlap to a feature of that type from the ``prediction''. Vice versa, ``wrong'' denotes the number of features of that type from the ``prediction'' without overlap to a feature of that type from the ``reference''.]]) genometools-1.5.1/gtdata/doc/extractfeat.lua000066400000000000000000000001411211610345200210660ustar00rootroot00000000000000if not gtdata_doc_dir then gtdata_doc_dir = "./" end dofile(gtdata_doc_dir.."regionmapping.lua") genometools-1.5.1/gtdata/doc/extractseq.lua000066400000000000000000000052671211610345200207550ustar00rootroot00000000000000print ([[ The option -keys allows one to extract substrings or sequences from the given sequence file or from a fasta index. The substrings to be extracted are specified in a key file given as argument to this option. The key file must contain lines of the form k or k i j where k is a string (the key) and the optional i and j are positive integers such that i<=j. k is the key and the optional numbers i and j specify the first position of the substring and the last position of the substring to be extracted. The positions are counted from 1. If k is identical to the string between the first first and second occurrence of the symbol | in a fasta header, then the fasta header and the corresponding sequence is output. For example in the fasta header >tr|A0AQI4|A0AQI4_9ARCH Putative ammonia monooxygenase (Fragment) OS=uncultured archaeon GN=amoA PE=4 SV=1 the fasta key is A0AQI4. If i and j are both specified, then the corresponding substring is shown in fasta format. In the latter case the header of the fasta formatted sequence in the output begins with >k i j followed by the original original fasta header. If the sequence input are fasta files, then the following holds: - duplicated lines in the input file lead to only one sequence in the output - the sequences are output according to the order in the original sequence files - the formatting of the output can be controlled by the options -width, -o, -gzip, and -bzip2 If the sequence input comes from a fasta index (see below), the following holds: - option -width is required - option -o, -gzip and -bzip2 do not work - the sequences are output in the order the corresponding keys appear in the key file If the end of the argument list only contains one filename, say fastaindex, then it is checked if there is a file fastaindex.kys. This makes up part of the fasta index, which is contructed by calling the suffixerator tool as follows: gt suffixerator -protein -ssp -tis -des -sds -kys -indexname fastaindex -db inputfile1 [inputfile2 ..] This reads the protein sequence files given to the option -db and creates several files: - a file fastaindex.esq representing the sequence. - a file fastaindex.ssp specifying the sequence separator positions. - a file fastaindex.des showing the fasta headers line by line. - a file fastaindex.sds giving the sequence header delimiter positions. - a file fastaindex.kys containing the keys in the fasta files. For the suffixerator command to work, the keys of the form |key| in the fasta header must satisfy the following constraints: - they all have to be of the same length, not longer than 128, and not shorter than 1 - they have to appear in lexicographic order]]) genometools-1.5.1/gtdata/doc/fingerprint.lua000066400000000000000000000021641211610345200211120ustar00rootroot00000000000000print ([[ If neither option -check nor option -duplicates is used, the fingerprints for all sequences are shown on stdout. Examples: --------- Compute (unified) list of fingerprints: $ gt fingerprint U89959_ests.fas | sort | uniq > U89959_ests.checklist_uniq Compare fingerprints: $ gt fingerprint -check U89959_ests.checklist_uniq U89959_ests.fas 950b7715ab6cc030a8c810a0dba2dd33 only in sequence_file(s) Make sure a sequence file contains no duplicates (not the case here): $ gt fingerprint -duplicates U89959_ests.fas 950b7715ab6cc030a8c810a0dba2dd33 2 gt fingerprint: error: duplicates found: 1 out of 200 (0.500%) Extract sequence with given fingerprint: $ gt fingerprint -extract 6d3b4b9db4531cda588528f2c69c0a57 U89959_ests.fas >SQ;8720010 TTTTTTTTTTTTTTTTTCCTGACAAAACCCCAAGACTCAATTTAATCAATCCTCAAATTTACATGATACCAACGTAATGGGAGCTTAAAAATA Return values: -------------- 0 everything went fine (-check: the comparison was successful; -duplicates: no duplicates found) 1 an error occured (-check: the comparison was not successful; -duplicates: duplicates found)]]) genometools-1.5.1/gtdata/doc/genomediff.lua000066400000000000000000000014461211610345200206700ustar00rootroot00000000000000print ([[ The genomediff tool only accepts DNA input. When used with sequence files or encseq, an enhanced suffix array will be built in memory. The ESA will not be created completely, but construction will use -memlimit as a threshold and build it partwise, calculating the Shu-length for each part. File format for option -unitfile (lua): units = { genome1 = { "path/file1.fa", "file2.fa" }, genome2 = { "file3.fa", "path/file4.fa" } } Give the path to the files as they were given to the encseq tool! You can use gt encseq info INDEXNAME to get a list of files in an encoded sequence. Comment lines start with '--' and will be ignored. See GTDIR/testdata/genomediff/unitfile1.lua for an example. Options -pl -dc -memlimit are options to influence esa construction. ]]) -- vim: tw=78 genometools-1.5.1/gtdata/doc/gff3.lua000066400000000000000000000007771211610345200174200ustar00rootroot00000000000000print ([[ File format for option -offsetfile: The file supplied to option -offsetfile defines a mapping table named ``offsets''. It maps the sequence-regions given in the GFF3_file to offsets. It can be defined as follows: offsets = { chr1 = 1000, chr2 = 500 } When this example is used, all features with seqid ``chr1'' will be offset by 1000 and all features with seqid ``chr2'' by 500. If -offsetfile is used, offsets for all sequence-regions contained in the given GFF3 files must be defined.]]) genometools-1.5.1/gtdata/doc/gt.lua000066400000000000000000000007361211610345200172000ustar00rootroot00000000000000print ([[ Set the environment variable GT_MEM_BOOKKEEPING=on to enable memory bookkeeping (e.g., like this: env GT_MEM_BOOKKEEPING=on gt). Set the environment variable GT_ENV_OPTIONS=-spacepeak to show a spacepeak after program run. Set the environment variable GT_ENV_OPTIONS=-showtime to show processing times for some program parts if implemented. Combinations are possible. Running the `gt' binary with GT_ENV_OPTIONS=-help shows all possible ``environment options'')]]) genometools-1.5.1/gtdata/doc/hop.lua000066400000000000000000000027411211610345200173520ustar00rootroot00000000000000print ([[ Correction mode: One of the options -aggressive, -moderate, -conservative or -expert must be selected. The -aggressive, -moderate and -conservative modes are presets of the criteria by which it is decided if an observed discrepancy in homopolymer length between reference and a read shall be corrected or not. A description of the single criteria is provided by using the -help+ option. The presets are equivalent to the following settings: -aggressive -moderate -conservative -hmin 3 3 3 -read-hmin 1 1 2 -altmax 1.00 0.99 0.80 -refmin 0.00 0.00 0.10 -mapqmin 0 10 21 -covmin 1 1 1 -clenmax unlimited unlimited unlimited -allow-multiple yes yes no The aggressive mode tries to maximize the sensitivity, the conservative mode to minimize the false positives. An even more conservative set of corrections can be achieved using the -ann option (see -help+). The -expert mode allows to manually set each parameter; the default values are the same as in the -conservative mode. (Finally, for evaluation purposes only, the -state-of-truth mode can be used: this mode assumes that the target sequence of the sequencing has been specified as reference sequence and outputs an ideal list of corrections.)]]) genometools-1.5.1/gtdata/doc/id_to_md5.lua000066400000000000000000000001411211610345200204170ustar00rootroot00000000000000if not gtdata_doc_dir then gtdata_doc_dir = "./" end dofile(gtdata_doc_dir.."regionmapping.lua") genometools-1.5.1/gtdata/doc/luafilter.lua000066400000000000000000000012351211610345200205500ustar00rootroot00000000000000if not gtdata_doc_dir then gtdata_doc_dir = "./" end print ([[ File format for option -rule_files: The files supplied to option -rule_files define a function for filtering by user given criteria (see example below): ]]) print(io.open(gtdata_doc_dir.."luafilter_function.lua"):read("*a")) print([[The above function iterates over all children of 'gn' and checks whether there is a node of type 'exon'. If there is such a node the function returns 'false', indicating that the parent node 'gn' will not be sorted out.]]) print([[ NOTE:]]) print([[The function must be named 'filter' and must return 'false', indicating that the node survived the filtering process.]]) genometools-1.5.1/gtdata/doc/luafilter_function.lua000066400000000000000000000004001211610345200224460ustar00rootroot00000000000000function filter(gn) target = "exon" gfi = gt.feature_node_iterator_new(gn) curnode = gfi:next() while not(curnode == nil) do if (curnode:get_type() == target) then return false end curnode = gfi:next() end return true end genometools-1.5.1/gtdata/doc/magicmatch.lua000066400000000000000000000005631211610345200206610ustar00rootroot00000000000000print ([[ This tools implements parts of the functionality of MagicMatch which is described in the following paper M. Smith, V. Kunin, L. Goldovsky, A.J. Enright, and C.A. Ouzounis. MagicMatch -- cross-referencing sequence identifiers across databases. Bioinformatics, 21(16):3429-3430, 2005. It is mainly used for testing the underlying MD5 fingerprint machinery.]]) genometools-1.5.1/gtdata/doc/mutate.lua000066400000000000000000000012031211610345200200530ustar00rootroot00000000000000print ([[ For each position in the given sequences it is randomly determined with probability (mutation rate / 100) if the given position is mutated. If so, in 80% of the cases a substitution is performed, in 10% an insertion, and in 10% a deletion, respectively. For substitution and insertion events, the nucleotide is generated randomly without regard to the original nucleotide. That is, resubstitutions are possible. This procedure equals the one described on page 1867 of the following paper T.D. Wu and C.K. Watanabe. GMAP: a genomic mapping and alignment program for mRNA and EST sequences. Bioinformatics, 21(9):1859-1875, 2005.]]) genometools-1.5.1/gtdata/doc/readjoiner.lua000066400000000000000000000003421211610345200207010ustar00rootroot00000000000000print ([[ Please consult Readjoiner manual for more information. Tools: prefilter prepare the readset for Readjoiner overlap calculate suffix-prefix matches assembly construct string graph and output contigs]]) genometools-1.5.1/gtdata/doc/regionmapping.lua000066400000000000000000000014551211610345200214240ustar00rootroot00000000000000if not gtdata_doc_dir then gtdata_doc_dir = "./" end print ([[ File format for option -regionmapping: The file supplied to option -regionmapping defines a ``mapping''. A mapping maps the sequence-regions given in the GFF3_file to a sequence file containing the corresponding sequence. Mappings can be defined in one of the following two forms: ]]) print(io.open(gtdata_doc_dir.."regionmapping_table.lua"):read("*a")) print([[ or ]]) print(io.open(gtdata_doc_dir.."regionmapping_function.lua"):read("*a")) print([[ The first form defines a Lua (http://www.lua.org/) table named ``mapping'' which maps each sequence region to the corresponding sequence file. The second one defines a Lua function ``mapping'', which has to return the sequence file name when it is called with the sequence_region as argument.]]) genometools-1.5.1/gtdata/doc/regionmapping_function.lua000066400000000000000000000001241211610345200233210ustar00rootroot00000000000000function mapping(sequence_region) return "hs_ref_"..sequence_region..".fa.gz" end genometools-1.5.1/gtdata/doc/regionmapping_table.lua000066400000000000000000000001131211610345200225610ustar00rootroot00000000000000mapping = { chr1 = "hs_ref_chr1.fa.gz", chr2 = "hs_ref_chr2.fa.gz" } genometools-1.5.1/gtdata/doc/select.lua000066400000000000000000000001351211610345200200360ustar00rootroot00000000000000if not gtdata_doc_dir then gtdata_doc_dir = "./" end dofile(gtdata_doc_dir.."luafilter.lua") genometools-1.5.1/gtdata/doc/seqmutate.lua000066400000000000000000000012031211610345200205640ustar00rootroot00000000000000print ([[ For each position in the given sequences it is randomly determined with probability (mutation rate / 100) if the given position is mutated. If so, in 80% of the cases a substitution is performed, in 10% an insertion, and in 10% a deletion, respectively. For substitution and insertion events, the nucleotide is generated randomly without regard to the original nucleotide. That is, resubstitutions are possible. This procedure equals the one described on page 1867 of the following paper T.D. Wu and C.K. Watanabe. GMAP: a genomic mapping and alignment program for mRNA and EST sequences. Bioinformatics, 21(9):1859-1875, 2005.]]) genometools-1.5.1/gtdata/doc/shredder.lua000066400000000000000000000015271211610345200203650ustar00rootroot00000000000000print ([[ Each sequence given in sequence_file is shreddered into consecutive pieces of random length (between -minlength and -maxlength) until it is consumed. By this means the last shreddered fragment of a given sequence can be shorter than the argument to option -minlength. To get rid of such fragments use `gt seqfilter` (see example below). Examples: --------- Shredder a given BAC $ gt shredder U89959_genomic.fas > fragments.fas Shredder an EST collection into pieces between 50 and 100 bp and get rid of all (terminal) fragments shorter than 50 bp $ gt shredder -minlength 50 -maxlength 100 U89959_ests.fas \ | gt seqfilter -minlength 50 - > fragments.fas # 130 out of 1260 sequences have been removed (10.317%) Shredder an EST collection and show only random 10% of the resulting fragments $ gt shredder -sample 0.1 U89959_ests.fas]]) genometools-1.5.1/gtdata/doc/snpper.lua000066400000000000000000000001411211610345200200630ustar00rootroot00000000000000if not gtdata_doc_dir then gtdata_doc_dir = "./" end dofile(gtdata_doc_dir.."regionmapping.lua") genometools-1.5.1/gtdata/doc/splicesiteinfo.lua000066400000000000000000000001411211610345200215740ustar00rootroot00000000000000if not gtdata_doc_dir then gtdata_doc_dir = "./" end dofile(gtdata_doc_dir.."regionmapping.lua") genometools-1.5.1/gtdata/doc/uniq.lua000066400000000000000000000014711211610345200175370ustar00rootroot00000000000000print ([[ A depth-first traversal of a feature node graph starts at the top-level feature node (or pseudo-node) and explores as far along each branch as possible before backtracking. Let's assume that the feature nodes are stored in a list in the order of their traversal (called the ``feature node list''). Two feature node graphs are considered to be repeated if their feature node list (from the depth-first traversal) have the same length and each feature node pair (from both lists at the same position) is ``similar''. Two feature nodes are ``similar'', if they have the same sequence ID, feature type, range, strand, and phase. For such a repeated feature node graph the one with the higher score (of the top-level feature) is kept. If only one of the feature node graphs has a defined score, this one is kept.]]) genometools-1.5.1/gtdata/modules/000077500000000000000000000000001211610345200167605ustar00rootroot00000000000000genometools-1.5.1/gtdata/modules/external/000077500000000000000000000000001211610345200206025ustar00rootroot00000000000000genometools-1.5.1/gtdata/modules/external/cgilua/000077500000000000000000000000001211610345200220465ustar00rootroot00000000000000genometools-1.5.1/gtdata/modules/external/cgilua/authentication.lua000066400000000000000000000163361211610345200256010ustar00rootroot00000000000000-- CGILua authentication Module -- Author: Leonardo Godinho -- -- Offers a basic API for authentication assuming the presence of -- cgilua.POST.user, cgilua.POST.pass, cgilua.QUERY.logout, cgilua.QUERY[tokenName] -- -- The API consists in the functions -- check(username, passwd) - Checks if the pair username/passwd is authenticated by the configured method -- checkURL() - returns the URL for the checking script -- configure(options, methods) - configures the authentication framework (see /examples/authentication_conf.lua) -- logoutURL() - returns the URL for the logout page -- refURL() - returns the original URL being checked for authentication -- username() - returns the authenticated user if existent -- -- The authenticated user can be persisted by using a cookie or an ID in the URL -- -- $Id: authentication.lua,v 1.2 2007/12/05 19:41:13 carregal Exp $ local mime=require"mime" -- from LuaSocket local md5=require"md5" require"cgilua.cookies" local cgilua = cgilua local string = string local math = math local error = error module"cgilua.authentication" local authenticatedUser local configuration local _check -- check function provided by the configuration -- Callback functions to manipulate Tokens in the URL -- if not defined, CGILua standard URLs are assumed -- Returns the current token function getToken() return cgilua.QUERY[configuration.tokenName] end -- Sets the current token function setToken(token) cgilua.QUERY[configuration.tokenName] = token end -- Returns the current URL function currentURL() local script_name = cgilua.servervariable"SCRIPT_NAME" local path_info = cgilua.servervariable"PATH_INFO" or "" local query_string = cgilua.servervariable"QUERY_STRING" or "" if query_string ~= "" then query_string = "?"..query_string end return cgilua.mkabsoluteurl(script_name..path_info..query_string) end -- URL Base64 encoder and decoder functions -- (http://en.wikipedia.org/wiki/Base64) -- -- '=' is replaced by '' -- '+' and '/' are respectively replaced by '*' and '-' function encodeURLbase64(str) local b64str = mime.b64(str) local urlb64str = string.gsub(b64str,"=","") urlb64str = string.gsub(urlb64str,"+","*") urlb64str = string.gsub(urlb64str,"/","-") urlb64str = string.gsub(urlb64str," ","_") return urlb64str end function decodeURLbase64(urlb64str) local b64str = string.gsub(urlb64str,"*","+") b64str = string.gsub(b64str,"-","/") b64str = string.gsub(b64str,"_"," ") local b64strPadLen = math.fmod(4 - math.fmod(string.len(b64str), 4), 4) b64str = b64str..string.rep("=", b64strPadLen) local str = mime.unb64(b64str) return str end -- Returns the authenticated username or nil if no user is authenticated function username() if authenticatedUser == nil then local authenticatedUserData local token if configuration.tokenPersistence == "url" then token = getToken() elseif configuration.tokenPersistence == "cookie" then token = cgilua.cookies.get(configuration.tokenName) end if token then authenticatedUserData = md5.decrypt(decodeURLbase64(token), configuration.criptKey) -- check if IP in crypted data match with client IP local authenticatedUserIP = authenticatedUserData and string.gsub(authenticatedUserData, ",.*$","") or nil if authenticatedUserIP ~= cgilua.servervariable("REMOTE_ADDR") then return nil end authenticatedUser=authenticatedUserData and string.gsub(authenticatedUserData, "^.*,", "") or nil end end return authenticatedUser end -- encrypt the user IP and username for the user hash token local function cryptUserData() if authenticatedUser then local userData = cgilua.servervariable("REMOTE_ADDR") ..",".. authenticatedUser local cryptedUserData = encodeURLbase64(md5.crypt(userData, configuration.criptKey)) return cryptedUserData end end -- defines the logged user name and sets the user hash token local function setUser(username) authenticatedUser = username if username then local cryptedUserData = cryptUserData() if configuration.tokenPersistence == "url" then setToken(cryptedUserData) cgilua.cookies.delete(configuration.tokenName) -- removes an eventual previous cookie token elseif configuration.tokenPersistence == "cookie" then cgilua.cookies.set(configuration.tokenName, cryptedUserData) setToken() -- remove an eventual previous token from the URLs end end end -- User logout, clear everything function logout() setUser() cgilua.cookies.delete(configuration.tokenName) setToken() cgilua.QUERY.logout = nil end -- Checks if a user name/password is authenticated by the configured method -- if the user is authenticaded then login the user else logout the user -- returns true if the user has been succesfully authenticated or false plus -- an error message when the authentication fails function check(name, pass) name = name or cgilua.POST.user pass = pass or cgilua.POST.pass if name then -- Tries to authenticate the user using the configured method local retauth,errauth = _check(name, pass) if retauth then setUser(name) return true else logout() return false, errauth end else local authuser = username() if authuser then if cgilua.QUERY.logout ~= nil then logout() return false end end return authuser end end -- Returns a authentication URL with ref URL as a parameter, -- accepts an optional value for the logout action function checkURL(ref, tologout) local token if configuration.tokenPersistence == "url" then token = getToken() elseif configuration.tokenPersistence == "cookie" then token = cgilua.cookies.get(configuration.tokenName) end -- As HTTP header referer information can violate privacy, -- some browsers allow the user to disable the sending of referer information. -- Some proxy and firewall software will also filter out referer information, -- to avoid leaking the location of non-public websites. -- So we send the current URL as an URL parameter to the login URL. setToken() local args = {ref = ref or currentURL(), logout = tologout} if string.find(configuration.checkURL, "^https?:") then local params = "?"..urlcode.encodetable(args) return configuration.checkURL..params end return cgilua.mkabsoluteurl(cgilua.mkurlpath(configuration.checkURL, args)) end -- Returns the logout URL, based on the login URL function logoutURL() return checkURL(nil, 1) end -- Returns the referenced URL, the one supposed to be offered only for authenticated users function refURL() local url local baseURL = cgilua.QUERY.ref or configuration.checkURL if string.find(baseURL, "\?") then url = string.gsub(baseURL, "\?", "?"..configuration.tokenName.."="..cryptUserData().."&") else url = baseURL.."?"..configuration.tokenName.."="..cryptUserData() end return url end -- Sets the current configuration function configure(options, methods) configuration = options local method = methods[options.method] or {} if method.check then _check = method.check end if method.username then username = method.username end endgenometools-1.5.1/gtdata/modules/external/cgilua/cgilua.lua000066400000000000000000000514401211610345200240210ustar00rootroot00000000000000---------------------------------------------------------------------------- -- CGILua library. -- -- @release $Id: cgilua.lua,v 1.81 2008/05/19 18:13:36 carregal Exp $ ---------------------------------------------------------------------------- local _G, SAPI = _G, SAPI local urlcode = require"cgilua.urlcode" local lp = require"cgilua.lp" local lfs = require"lfs" local debug = require"debug" local assert, error, ipairs, select, tostring, type, unpack, xpcall = assert, error, ipairs, select, tostring, type, unpack, xpcall local pairs = pairs local gsub, format, strfind, strlower, strsub, match = string.gsub, string.format, string.find, string.lower, string.sub, string.match local setmetatable = setmetatable local _open = io.open local tinsert, tremove, concat = table.insert, table.remove, table.concat local foreachi = table.foreachi local date = os.date local os_tmpname = os.tmpname local getenv = os.getenv local remove = os.remove local seeall = package.seeall local setfenv = setfenv lp.setoutfunc ("cgilua.put") lp.setcompatmode (true) module ("cgilua") _COPYRIGHT = "Copyright (C) 2003 Kepler Project" _DESCRIPTION = "CGILua is a tool for creating dynamic Web pages and manipulating input data from forms" _VERSION = "CGILua 5.1.2" -- -- Internal state variables. local _default_errorhandler = debug.traceback local _errorhandler = _default_errorhandler local _default_erroroutput = function (msg) if type(msg) ~= "string" and type(msg) ~= "number" then msg = format ("bad argument #1 to 'error' (string expected, got %s)", type(msg)) end -- Logging error SAPI.Response.errorlog (msg) SAPI.Response.errorlog (" ") SAPI.Response.errorlog (SAPI.Request.servervariable"REMOTE_ADDR") SAPI.Response.errorlog (" ") SAPI.Response.errorlog (date()) SAPI.Response.errorlog ("\n") -- Building user message msg = gsub (gsub (msg, "\n", "
\n"), "\t", "  ") SAPI.Response.contenttype ("text/html") SAPI.Response.write ("CGILua Error" .. msg .. "") end local _erroroutput = _default_erroroutput local _default_maxfilesize = 512 * 1024 local _maxfilesize = _default_maxfilesize local _default_maxinput = 1024 * 1024 local _maxinput = _default_maxinput script_path = false -- -- Header functions ---------------------------------------------------------------------------- -- Sends a header. -- @param header String with the header. -- @param value String with the corresponding value. ---------------------------------------------------------------------------- function header(...) return SAPI.Response.header(...) end ---------------------------------------------------------------------------- -- Sends a Content-type header. -- @param type String with the type of the header. -- @param subtype String with the subtype of the header. ---------------------------------------------------------------------------- function contentheader (type, subtype) SAPI.Response.contenttype (type..'/'..subtype) end ---------------------------------------------------------------------------- -- Sends the HTTP header "text/html". ---------------------------------------------------------------------------- function htmlheader() SAPI.Response.contenttype ("text/html") end local htmlheader = htmlheader ---------------------------------------------------------------------------- -- Sends an HTTP header redirecting the browser to another URL -- @param url String with the URL. -- @param args Table with the arguments (optional). ---------------------------------------------------------------------------- function redirect (url, args) if strfind(url,"^https?:") then local params="" if args then params = "?"..urlcode.encodetable(args) end return SAPI.Response.redirect(url..params) else return SAPI.Response.redirect(mkabsoluteurl(mkurlpath(url,args))) end end ---------------------------------------------------------------------------- -- Returns a server variable -- @param name String with the name of the server variable. -- @return String with the value of the server variable. ---------------------------------------------------------------------------- function servervariable(...) return SAPI.Request.servervariable(...) end ---------------------------------------------------------------------------- -- Primitive error output function -- @param msg String (or number) with the message. -- @param level String with the error level (optional). ---------------------------------------------------------------------------- function errorlog (msg, level) local t = type(msg) if t == "string" or t == "number" then SAPI.Response.errorlog (msg, level) else error ("bad argument #1 to `cgilua.errorlog' (string expected, got "..t..")", 2) end end ---------------------------------------------------------------------------- -- Converts all its arguments to strings before sending them to the server. ---------------------------------------------------------------------------- function print (...) local args = { ... } for i = 1, select("#",...) do args[i] = tostring(args[i]) end SAPI.Response.write (concat(args,"\t")) SAPI.Response.write ("\n") end ---------------------------------------------------------------------------- -- Function 'put' sends its arguments (basically strings of HTML text) -- to the server -- Its basic implementation is to use Lua function 'write', which writes -- each of its arguments (strings or numbers) to file _OUTPUT (a file -- handle initialized with the file descriptor for stdout) -- @param s String (or number) with output. ---------------------------------------------------------------------------- function put (...) return SAPI.Response.write(...) end -- Returns the current errorhandler function _geterrorhandler(msg) return _errorhandler(msg) end -- -- Executes a function using the CGILua error handler. -- @param f Function to be called. -- function pcall (f) local results = {xpcall (f, _geterrorhandler)} local ok = results[1] tremove(results, 1) if ok then if #results == 0 then results = { true } end return unpack(results) else _erroroutput (unpack(results)) end end local function buildscriptenv() local env = { print = _M.print, write = _M.put } setmetatable(env, { __index = _G, __newindex = _G }) return env end ---------------------------------------------------------------------------- -- Execute a script -- If an error is found, Lua's error handler is called and this function -- does not return -- @param filename String with the name of the file to be processed. -- @return The result of the execution of the file. ---------------------------------------------------------------------------- function doscript (filename) local f, err = _G.loadfile(filename) if not f then error (format ("Cannot execute `%s'. Exiting.\n%s", filename, err)) else local env = buildscriptenv() setfenv(f, env) return pcall(f) end end ---------------------------------------------------------------------------- -- Execute the file if there is no "file error". -- If an error is found, and it is not a "file error", Lua 'error' -- is called and this function does not return -- @param filename String with the name of the file to be processed. -- @return The result of the execution of the file or nil (in case the -- file does not exists or if it cannot be opened). -- @return It could return an error message if the file cannot be opened. ---------------------------------------------------------------------------- function doif (filename) if not filename then return end -- no file local f, err = _open(filename) if not f then return nil, err end -- no file (or unreadable file) f:close() return doscript (filename) end --------------------------------------------------------------------------- -- Set the maximum "total" input size allowed (in bytes) -- @param nbytes Number of the maximum size (in bytes) of the whole POST data. --------------------------------------------------------------------------- function setmaxinput(nbytes) _maxinput = nbytes end --------------------------------------------------------------------------- -- Set the maximum size for an "uploaded" file (in bytes) -- Might be less or equal than _maxinput. -- @param nbytes Number of the maximum size (in bytes) of a file. --------------------------------------------------------------------------- function setmaxfilesize(nbytes) _maxfilesize = nbytes end -- Default path for temporary files tmp_path = _G.CGILUA_TMP or getenv("TEMP") or getenv ("TMP") or "/tmp" -- Default function for temporary names -- @returns a temporay name using os.tmpname tmpname = function() local tempname = os_tmpname() -- Lua os.tmpname returns a full path in Unix, but not in Windows -- so we strip the eventual prefix tempname = gsub(tempname, "(/tmp/)", "") return tempname end local _tmpfiles = {} --------------------------------------------------------------------------- -- Returns a temporary file in a directory using a name generator -- @param dir Base directory for the temporary file -- @param namefunction Name generator function --------------------------------------------------------------------------- function tmpfile(dir, namefunction) dir = dir or tmp_path namefunction = namefunction or tmpname local tempname = namefunction() local filename = dir.."/"..tempname local file, err = _open(filename, "wb+") if file then tinsert(_tmpfiles, {name = filename, file = file}) end return file, err end ---------------------------------------------------------------------------- -- Preprocess the content of a mixed HTML file and output a complete -- HTML document ( a 'Content-type' header is inserted before the -- preprocessed HTML ) -- @param filename String with the name of the file to be processed. -- @param env Optional environment ---------------------------------------------------------------------------- function handlelp (filename, env) env = env or buildscriptenv() htmlheader () lp.include (filename, env) end ---------------------------------------------------------------------------- -- Builds a handler that sends a header and the contents of the given file. -- Sends the contents of the file to the output without processing it. -- @param type String with the type of the header. -- @param subtype String with the subtype of the header. -- @return Function (which receives a filename as argument) that produces -- the header and copies the content of the given file. ---------------------------------------------------------------------------- function buildplainhandler (type, subtype) return function (filename) local fh, err = _open (filename, "rb") local contents = "" if fh then contents = fh:read("*a") fh:close() else error(err) end header("Content-Lenght", #contents) contentheader (type, subtype) put (contents) end end ---------------------------------------------------------------------------- -- Builds a handler that sends a header and the processed file. -- Processes the file as a Lua Page. -- @param type String with the type of the header. -- @param subtype String with the subtype of the header. -- @return Function (which receives a filename as argument) that produces -- the header and processes the given file. ---------------------------------------------------------------------------- function buildprocesshandler (type, subtype) return function (filename) local env = buildscriptenv() contentheader (type, subtype) lp.include (filename, env) end end ---------------------------------------------------------------------------- -- Builds the default handler table from cgilua.mime ---------------------------------------------------------------------------- local function buildhandlers() local mime = _G.require "cgilua.mime" for ext, mediatype in pairs(mime) do local t, st = match(mediatype, "([^/]*)/([^/]*)") addscripthandler(ext, buildplainhandler(t, st)) end end ---------------------------------------------------------------------------- -- Create an URL path to be used as a link to a CGILua script -- @param script String with the name of the script. -- @param args Table with arguments to script (optional). -- @return String in URL format. ---------------------------------------------------------------------------- function mkurlpath (script, args) -- URL-encode the parameters to be passed do the script local params = "" if args then params = "?"..urlcode.encodetable(args) end if strsub(script,1,1) == "/" then return urlpath .. script .. params else return urlpath .. script_vdir .. script .. params end end ---------------------------------------------------------------------------- -- Create an absolute URL containing the given URL path -- @param path String with the path. -- @param protocol String with the name of the protocol (default = "http"). -- @return String in URL format. ---------------------------------------------------------------------------- function mkabsoluteurl (path, protocol) protocol = protocol or "http" if path:sub(1,1) ~= '/' then path = '/'..path end return format("%s://%s:%s%s", protocol, servervariable"SERVER_NAME", servervariable"SERVER_PORT", path) end ---------------------------------------------------------------------------- -- Extract the "directory" and "file" parts of a path -- @param path String with a path. -- @return String with the directory part. -- @return String with the file part. ---------------------------------------------------------------------------- function splitonlast (path, sep) local dir,file = match(path,"^(.-)([^:/\\]*)$") return dir,file end splitpath = splitonlast -- compatibility with previous versions ---------------------------------------------------------------------------- -- Extracts the first and remaining parts of a path -- @param path separator (defaults to "/") -- @return String with the extracted part. -- @return String with the remaining path. ---------------------------------------------------------------------------- function splitonfirst(path, sep) local first, rest = match(path, "^/([^:/\\]*)(.*)") return first, rest end -- -- Define variables and build the cgilua.POST, cgilua.GET tables. -- local function getparams () requestmethod = servervariable"REQUEST_METHOD" -- Fill in the POST table. POST = {} if requestmethod == "POST" then post.parsedata { read = SAPI.Request.getpostdata, discardinput = ap and ap.discard_request_body, content_type = servervariable"CONTENT_TYPE", content_length = servervariable"CONTENT_LENGTH", maxinput = _maxinput, maxfilesize = _maxfilesize, args = POST, } end -- Fill in the QUERY table. QUERY = {} urlcode.parsequery (servervariable"QUERY_STRING", QUERY) end -- -- Stores all script handlers and the file extensions used to identify -- them. Loads the default local _script_handlers = {} -- -- Default handler. -- Sends the contents of the file to the output without processing it. -- This relies in the browser being able to discover the content type -- which is not reliable. -- @param filename String with the name of the file. -- local function default_handler (filename) local fh, err = _open (filename, "rb") local contents if fh then contents = fh:read("*a") fh:close() else error(err) end header("Content-Lenght", #contents) put ("\n") put (contents) end ---------------------------------------------------------------------------- -- Add a script handler. -- @param file_extension String with the lower-case extension of the script. -- @param func Function to handle this kind of scripts. ---------------------------------------------------------------------------- function addscripthandler (file_extension, func) assert (type(file_extension) == "string", "File extension must be a string") if strfind (file_extension, '%.', 1) then file_extension = strsub (file_extension, 2) end file_extension = strlower(file_extension) assert (type(func) == "function", "Handler must be a function") _script_handlers[file_extension] = func end --------------------------------------------------------------------------- -- Obtains the handler corresponding to the given script path. -- @param path String with a script path. -- @return Function that handles it or nil. ---------------------------------------------------------------------------- function getscripthandler (path) local i,f, ext = strfind (path, "%.([^.]+)$") return _script_handlers[strlower(ext or '')] end --------------------------------------------------------------------------- -- Execute the given path with the corresponding handler. -- @param path String with a script path. -- @return The returned values from the script. --------------------------------------------------------------------------- function handle (path) local h = getscripthandler (path) or default_handler return h (path) end --------------------------------------------------------------------------- -- Sets "errorhandler" function -- This function is called by Lua when an error occurs. -- It receives the error message generated by Lua and it is resposible -- for the final message which should be returned. -- @param Function. --------------------------------------------------------------------------- function seterrorhandler (f) local tf = type(f) if tf == "function" then _errorhandler = f else error (format ("Invalid type: expected `function', got `%s'", tf)) end end --------------------------------------------------------------------------- -- Defines the "erroroutput" function -- This function is called to generate the error output. -- @param Function. --------------------------------------------------------------------------- function seterroroutput (f) local tf = type(f) if tf == "function" then _erroroutput = f else error (format ("Invalid type: expected `function', got `%s'", tf)) end end -- -- Stores all close functions in order they are set. local _close_functions = { } --------------------------------------------------------------------------- -- Adds a function to be executed after the script. -- @param f Function to be registered. --------------------------------------------------------------------------- function addclosefunction (f) local tf = type(f) if tf == "function" then tinsert (_close_functions, f) else error (format ("Invalid type: expected `function', got `%s'", tf)) end end -- -- Close function. -- local function close() for i = #_close_functions, 1, -1 do _close_functions[i]() end end -- -- Stores all open functions in order they are set. local _open_functions = { } --------------------------------------------------------------------------- -- Adds a function to be executed before the script. -- @param f Function to be registered. --------------------------------------------------------------------------- function addopenfunction (f) local tf = type(f) if tf == "function" then tinsert (_open_functions, f) else error (format ("Invalid type: expected `function', got `%s'", tf)) end end -- -- Open function. -- Call all defined open-functions in the order they were created. -- local function open() for i = #_open_functions, 1, -1 do _open_functions[i]() end end -- -- Resets CGILua's state. -- local function reset () script_path = false _maxfilesize = _default_maxfilesize _maxinput = _default_maxinput -- Error Handling _errorhandler = _default_errorhandler _erroroutput = _default_erroroutput -- Handlers _script_handlers = {} _open_functions = {} _close_functions = {} -- clean temporary files foreachi(_tmpfiles, function (i, v) v.file:close() local _, err = remove(v.name) if err then error(err) end end) end --------------------------------------------------------------------------- -- Request processing. --------------------------------------------------------------------------- function main () SAPI = _G.SAPI buildhandlers() -- Default handler values addscripthandler ("lua", doscript) addscripthandler ("lp", handlelp) -- Looks for an optional loader module pcall (function () _G.require"cgilua.loader" end) -- post.lua needs to be loaded after cgilua.lua is compiled pcall (function () _G.require"cgilua.post" end) if loader then loader.init() end -- Build QUERY/POST tables if not pcall (getparams) then return nil end local result -- Executes the optional loader module if loader then loader.run() end -- Changing curent directory to the script's "physical" dir local curr_dir = lfs.currentdir () pcall (function () lfs.chdir (script_pdir) end) -- Opening functions pcall (open) -- Executes the script result, err = pcall (function () return handle (script_file) end) -- Closing functions pcall (close) -- Changing to original directory pcall (function () lfs.chdir (curr_dir) end) -- Cleanup reset () if result then -- script executed ok! return result end end genometools-1.5.1/gtdata/modules/external/cgilua/cookies.lua000066400000000000000000000062201211610345200242050ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Cookies Library -- -- @release $Id: cookies.lua,v 1.8 2008/04/24 13:42:04 mascarenhas Exp $ ---------------------------------------------------------------------------- require"cgilua.urlcode" local error = error local format, gsub, strfind = string.format, string.gsub, string.find local date = os.date local escape, unescape = cgilua.urlcode.escape, cgilua.urlcode.unescape local function header(...) return SAPI.Response.header(...) end local function write(...) return SAPI.Response.write(...) end local function servervariable(...) return SAPI.Request.servervariable(...) end module ("cgilua.cookies") local function optional (what, name) if name ~= nil and name ~= "" then return format("; %s=%s", what, name) else return "" end end local function build (name, value, options) if not name or not value then error("cookie needs a name and a value") end local cookie = name .. "=" .. escape(value) options = options or {} if options.expires then local t = date("!%A, %d-%b-%Y %H:%M:%S GMT", options.expires) cookie = cookie .. optional("expires", t) end cookie = cookie .. optional("path", options.path) cookie = cookie .. optional("domain", options.domain) cookie = cookie .. optional("secure", options.secure) return cookie end ---------------------------------------------------------------------------- -- Sets a value to a cookie, with the given options. -- Generates a header "Set-Cookie", thus it can only be used in Lua Scripts. -- @param name String with the name of the cookie. -- @param value String with the value of the cookie. -- @param options Table with the options (optional). function set (name, value, options) header("Set-Cookie", build(name, value, options)) end ---------------------------------------------------------------------------- -- Sets a value to a cookie, with the given options. -- Generates an HTML META tag, thus it can be used in Lua Pages. -- @param name String with the name of the cookie. -- @param value String with the value of the cookie. -- @param options Table with the options (optional). function sethtml (name, value, options) write(format('', build(name, value, options))) end ---------------------------------------------------------------------------- -- Gets the value of a cookie. -- @param name String with the name of the cookie. -- @return String with the value associated with the cookie. function get (name) local cookies = servervariable"HTTP_COOKIE" or "" cookies = ";" .. cookies .. ";" cookies = gsub(cookies, "%s*;%s*", ";") -- remove extra spaces local pattern = ";" .. name .. "=(.-);" local _, __, value = strfind(cookies, pattern) return value and unescape(value) end ---------------------------------------------------------------------------- -- Deletes a cookie, by setting its value to "xxx". -- @param name String with the name of the cookie. -- @param options Table with the options (optional). function delete (name, options) options = options or {} options.expires = 1 set(name, "xxx", options) end genometools-1.5.1/gtdata/modules/external/cgilua/dispatcher.lua000066400000000000000000000041501211610345200246770ustar00rootroot00000000000000-- CGILua dispatcher module -- @release $Id: dispatcher.lua,v 1.8 2007/12/07 18:49:49 carregal Exp $ module(..., package.seeall) -- Checks if an URL matches a route pattern local function route_match(url, pattern) local params = {} local captures = string.gsub(pattern, "(/$[%w_-]+)", "/([^/]*)") local url_parts = {string.match(url, captures)} local i = 1 for name in string.gmatch(pattern, "/$([%w_-]+)") do params[name] = url_parts[i] i = i + 1 end return next(params) and params end local route_URLs = {} -- Maps the correct function for an URL local function route_map(url) for i, v in ipairs(route_URLs) do local pattern, f, name = unpack(v) local params = route_match(url, pattern) if params then return f, params end end end -- Returns an URL for a named route -- @param map_name Name associated with the map in the routed URL table. -- @param params Table of named parameters used in the URL map -- @param queryargs Optional table of named parameters used for the QUERY part of the URL function route_url(map_name, params, queryargs) local queryparams = "" if queryargs then queryparams = "?"..cgilua.urlcode.encodetable(queryargs) end for i, v in ipairs(route_URLs) do local pattern, f, name = unpack(v) if name == map_name then local url = string.gsub(pattern, "$([%w_-]+)", params) url = cgilua.urlpath.."/"..cgilua.app_name..url..queryparams return url end end end -- Defines the routing using a table of URLs maps or a single map -- a map defines a URL mask using $name to extract parameters, -- a function to be called with the extracted parameters and -- a name for the map when used with route_url -- @param table of maps or a single map function route(URLs) URLs = URLs or {} if type(URLs[1]) == "string" then -- accepts a single map as the only entry in a map table URLs = {URLs} end route_URLs = URLs f, args = route_map(cgilua.script_vpath) if f then return f(args) else error("Missing page parameters") end endgenometools-1.5.1/gtdata/modules/external/cgilua/loader.lua000066400000000000000000000066741211610345200240340ustar00rootroot00000000000000-- CGILua loader -- -- Assumes two global variables pointing to directories: -- CGILUA_CONF - CGILua configuration directory -- CGILUA_TMP - CGILua temporary files directory -- -- # $Id: loader.lua,v 1.7 2008/03/28 22:01:18 ignacio Exp $ require "lfs" module("cgilua.loader", package.seeall) function init() -- Loads the user configuration cgilua.doif (CGILUA_CONF.."/config.lua") end function run() local servervariable = cgilua.servervariable cgilua.script_vpath = cgilua.script_vpath or servervariable"PATH_INFO" if cgilua.script_vpath == nil or cgilua.script_vpath == "" then cgilua.script_vpath = "/" end local document_root = cgilua.pdir or servervariable"DOCUMENT_ROOT" if not cgilua.script_path then if CGILUA_ISDIRECT then -- the launcher is associated with scripts (Xavante, mod_lua or isapi usually) if servervariable"PATH_TRANSLATED" ~= "" then cgilua.script_path = servervariable"PATH_TRANSLATED" else cgilua.script_path = servervariable"SCRIPT_FILENAME" end else -- the launcher executable is present in the URL (CGI or FastCGI only) if document_root == nil or document_root == "" then -- tries to obtain documents_root from the server local path_info = cgilua.script_vpath if path_info == nil or path_info == "" or path_info == "/" then document_root = cgilua.pdir or servervariable"PATH_TRANSLATED" else if string.find(servervariable("SERVER_SOFTWARE"), "IIS") then path_info = string.gsub(path_info, "/", "\\") end document_root = cgilua.pdir or string.gsub(servervariable"PATH_TRANSLATED", path_info, "") end end if cgilua.use_executable_name then -- looks for a Lua script with the same name as the executable local _, name = cgilua.splitpath(servervariable"SCRIPT_NAME") name = string.gsub(name, "%.[^%.]-$","") if name and lfs.attributes(document_root.."/"..name..".lua") then cgilua.script_path = document_root.."/"..name..".lua" end else -- uses /index.lua then /index.lp as the default script if cgilua.script_vpath == "/" then if lfs.attributes(document_root.."/index.lua") then cgilua.script_vpath = "/index.lua" elseif lfs.attributes(document_root.."/index.lp") then cgilua.script_vpath = "/index.lp" else error("Kepler is correctly configured, but you didn't provide a script!") end end -- checks if PATH_INFO refers to a valid file and ajusts the settings accordingly local filepath, path_info = string.match (cgilua.script_vpath, "^([^%.]-%.[^/]+)(.*)") if filepath and lfs.attributes(document_root..filepath) then -- if one is found use it cgilua.script_path = document_root..filepath cgilua.script_vpath = path_info cgilua.urlpath = cgilua.urlpath or servervariable"SCRIPT_NAME"..filepath else -- otherwise go with the current PATH_INFO cgilua.script_path = document_root..cgilua.script_vpath end end end end -- define other cgilua vars so mkurlpath can work correctly if cgilua.script_vpath then cgilua.script_vdir = cgilua.splitpath (cgilua.script_vpath) cgilua.urlpath = cgilua.urlpath or servervariable"SCRIPT_NAME" else cgilua.script_vdir = cgilua.splitpath (servervariable"SCRIPT_NAME") cgilua.urlpath = cgilua.urlpath or "" end cgilua.script_pdir, cgilua.script_file = cgilua.splitpath (cgilua.script_path) end genometools-1.5.1/gtdata/modules/external/cgilua/lp.lua000066400000000000000000000105231211610345200231650ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Lua Pages Template Preprocessor. -- -- @release $Id: lp.lua,v 1.13 2008/01/19 19:30:35 mascarenhas Exp $ ---------------------------------------------------------------------------- local assert, error, getfenv, loadstring, setfenv = assert, error, getfenv, loadstring, setfenv local find, format, gsub, strsub = string.find, string.format, string.gsub, string.sub local concat, tinsert = table.concat, table.insert local open = io.open module (...) ---------------------------------------------------------------------------- -- function to do output local outfunc = "io.write" -- accepts the old expression field: `$| |$' local compatmode = true -- -- Builds a piece of Lua code which outputs the (part of the) given string. -- @param s String. -- @param i Number with the initial position in the string. -- @param f Number with the final position in the string (default == -1). -- @return String with the correspondent Lua code which outputs the part of the string. -- local function out (s, i, f) s = strsub(s, i, f or -1) if s == "" then return s end -- we could use `%q' here, but this way we have better control s = gsub(s, "([\\\n\'])", "\\%1") -- substitute '\r' by '\'+'r' and let `loadstring' reconstruct it s = gsub(s, "\r", "\\r") return format(" %s('%s'); ", outfunc, s) end ---------------------------------------------------------------------------- -- Translate the template to Lua code. -- @param s String to translate. -- @return String with translated code. ---------------------------------------------------------------------------- function translate (s) s = gsub(s, "^#![^\n]+\n", "") if compatmode then s = gsub(s, "$|(.-)|%$", "") s = gsub(s, "", "") end s = gsub(s, "<%%(.-)%%>", "") local res = {} local start = 1 -- start of untranslated part in `s' while true do local ip, fp, target, exp, code = find(s, "<%?(%w*)[ \t]*(=?)(.-)%?>", start) if not ip then break end tinsert(res, out(s, start, ip-1)) if target ~= "" and target ~= "lua" then -- not for Lua; pass whole instruction to the output tinsert(res, out(s, ip, fp)) else if exp == "=" then -- expression? tinsert(res, format(" %s(%s);", outfunc, code)) else -- command tinsert(res, format(" %s ", code)) end end start = fp + 1 end tinsert(res, out(s, start)) return concat(res) end ---------------------------------------------------------------------------- -- Defines the name of the output function. -- @param f String with the name of the function which produces output. function setoutfunc (f) outfunc = f end ---------------------------------------------------------------------------- -- Turns on or off the compatibility with old CGILua 3.X behavior. -- @param c Boolean indicating if the compatibility mode should be used. function setcompatmode (c) compatmode = c end ---------------------------------------------------------------------------- -- Internal compilation cache. local cache = {} ---------------------------------------------------------------------------- -- Translates a template into a Lua function. -- Does NOT execute the resulting function. -- Uses a cache of templates. -- @param string String with the template to be translated. -- @param chunkname String with the name of the chunk, for debugging purposes. -- @return Function with the resulting translation. function compile (string, chunkname) local f, err = cache[string] if f then return f end f, err = loadstring (translate (string), chunkname) if not f then error (err, 3) end cache[string] = f return f end ---------------------------------------------------------------------------- -- Translates and executes a template in a given file. -- The translation creates a Lua function which will be executed in an -- optionally given environment. -- @param filename String with the name of the file containing the template. -- @param env Table with the environment to run the resulting function. function include (filename, env) -- read the whole contents of the file local fh = assert (open (filename)) local src = fh:read("*a") fh:close() -- translates the file into a function local prog = compile (src, '@'..filename) local _env if env then _env = getfenv (prog) setfenv (prog, env) end prog () end genometools-1.5.1/gtdata/modules/external/cgilua/mime.lua000066400000000000000000000124551211610345200235070ustar00rootroot00000000000000----------------------------------------------------------------------------- -- Xavante MIME types -- -- Authors: Javier Guerra and Andre Carregal -- Copyright (c) 2004-2007 Kepler Project -- -- $Id: mime.lua,v 1.1 2007/09/25 23:17:56 carregal Exp $ ----------------------------------------------------------------------------- -- Extracted from Apache's mime.types -- This file controls what Internet media types are sent to the client for -- given file extension(s). Sending the correct media type to the client -- is important so they know how to handle the content of the file. -- Extra types can either be added here or by using an AddType directive -- in your config files. For more information about Internet media types, -- please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type -- registry is at . return { ez = "application/andrew-inset", atom = "application/atom+xml", hqx = "application/mac-binhex40", cpt = "application/mac-compactpro", mathml = "application/mathml+xml", doc = "application/msword", bin = "application/octet-stream", dms = "application/octet-stream", lha = "application/octet-stream", lzh = "application/octet-stream", exe = "application/octet-stream", class = "application/octet-stream", so = "application/octet-stream", dll = "application/octet-stream", dmg = "application/octet-stream", oda = "application/oda", ogg = "application/ogg", pdf = "application/pdf", ai = "application/postscript", eps = "application/postscript", ps = "application/postscript", rdf = "application/rdf+xml", smi = "application/smil", smil = "application/smil", gram = "application/srgs", grxml = "application/srgs+xml", mif = "application/vnd.mif", xul = "application/vnd.mozilla.xul+xml", xls = "application/vnd.ms-excel", ppt = "application/vnd.ms-powerpoint", rm = "application/vnd.rn-realmedia", wbxml = "application/vnd.wap.wbxml", wmlc = "application/vnd.wap.wmlc", wmlsc = "application/vnd.wap.wmlscriptc", vxml = "application/voicexml+xml", bcpio = "application/x-bcpio", vcd = "application/x-cdlink", pgn = "application/x-chess-pgn", cpio = "application/x-cpio", csh = "application/x-csh", dcr = "application/x-director", dir = "application/x-director", dxr = "application/x-director", dvi = "application/x-dvi", spl = "application/x-futuresplash", gtar = "application/x-gtar", hdf = "application/x-hdf", xhtml = "application/xhtml+xml", xht = "application/xhtml+xml", js = "application/x-javascript", skp = "application/x-koan", skd = "application/x-koan", skt = "application/x-koan", skm = "application/x-koan", latex = "application/x-latex", xml = "application/xml", xsl = "application/xml", dtd = "application/xml-dtd", nc = "application/x-netcdf", cdf = "application/x-netcdf", sh = "application/x-sh", shar = "application/x-shar", swf = "application/x-shockwave-flash", xslt = "application/xslt+xml", sit = "application/x-stuffit", sv4cpio = "application/x-sv4cpio", sv4crc = "application/x-sv4crc", tar = "application/x-tar", tcl = "application/x-tcl", tex = "application/x-tex", texinfo = "application/x-texinfo", texi = "application/x-texinfo", t = "application/x-troff", tr = "application/x-troff", roff = "application/x-troff", man = "application/x-troff-man", me = "application/x-troff-me", ms = "application/x-troff-ms", ustar = "application/x-ustar", src = "application/x-wais-source", zip = "application/zip", au = "audio/basic", snd = "audio/basic", mid = "audio/midi", midi = "audio/midi", kar = "audio/midi", mpga = "audio/mpeg", mp2 = "audio/mpeg", mp3 = "audio/mpeg", aif = "audio/x-aiff", aiff = "audio/x-aiff", aifc = "audio/x-aiff", m3u = "audio/x-mpegurl", ram = "audio/x-pn-realaudio", ra = "audio/x-pn-realaudio", wav = "audio/x-wav", pdb = "chemical/x-pdb", xyz = "chemical/x-xyz", bmp = "image/bmp", cgm = "image/cgm", gif = "image/gif", ief = "image/ief", jpeg = "image/jpeg", jpg = "image/jpeg", jpe = "image/jpeg", png = "image/png", svg = "image/svg+xml", svgz = "image/svg+xml", tiff = "image/tiff", tif = "image/tiff", djvu = "image/vnd.djvu", djv = "image/vnd.djvu", wbmp = "image/vnd.wap.wbmp", ras = "image/x-cmu-raster", ico = "image/x-icon", pnm = "image/x-portable-anymap", pbm = "image/x-portable-bitmap", pgm = "image/x-portable-graymap", ppm = "image/x-portable-pixmap", rgb = "image/x-rgb", xbm = "image/x-xbitmap", xpm = "image/x-xpixmap", xwd = "image/x-xwindowdump", igs = "model/iges", iges = "model/iges", msh = "model/mesh", mesh = "model/mesh", silo = "model/mesh", wrl = "model/vrml", vrml = "model/vrml", ics = "text/calendar", ifb = "text/calendar", css = "text/css", html = "text/html", htm = "text/html", asc = "text/plain", txt = "text/plain", rtx = "text/richtext", rtf = "text/rtf", sgml = "text/sgml", sgm = "text/sgml", tsv = "text/tab-separated-values", wml = "text/vnd.wap.wml", wmls = "text/vnd.wap.wmlscript", etx = "text/x-setext", mpeg = "video/mpeg", mpg = "video/mpeg", mpe = "video/mpeg", qt = "video/quicktime", mov = "video/quicktime", mxu = "video/vnd.mpegurl", avi = "video/x-msvideo", movie = "video/x-sgi-movie", ice = "x-conference/x-cooltalk", } genometools-1.5.1/gtdata/modules/external/cgilua/post.lua000066400000000000000000000225651211610345200235500ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Process POST data. -- This library depends on some functions that read POST data and other -- HTTP information. A beginning is: -- require"post" -- local params = {} -- post.parsedata { -- read = ap.get_client_block or io.input, -- discardinput = ap.discard_request_body, -- content_type = ap.get_header"content-type" or os.getenv"CONTENT_TYPE", -- content_length = ap.get_header"content-length" or os.getenv"CONTENT_LENGTH", -- maxinput = 1024 * 1024, -- maxfilesize = 512 * 1024, -- args = params, -- } -- -- @release $Id: post.lua,v 1.17 2008/04/03 21:55:28 mascarenhas Exp $ ---------------------------------------------------------------------------- require"cgilua.readuntil" require"cgilua.urlcode" local assert, error, pairs, tonumber, tostring, type = assert, error, pairs, tonumber, tostring, type local getn, tinsert = table.getn, table.insert local format, gsub, strfind, strlower, strlen = string.format, string.gsub, string.find, string.lower, string.len local min = math.min local iterate = cgilua.readuntil.iterate local urlcode = cgilua.urlcode local tmpfile = cgilua.tmpfile -- environment for processing multipart/form-data input local boundary = nil -- boundary string that separates each 'part' of input local maxfilesize = nil -- maximum size for file upload local maxinput = nil -- maximum size of total POST data local inputfile = nil -- temporary file for inputting form-data local bytesleft = nil -- number of bytes yet to be read local content_type = nil -- request's content-type -- local functions local discardinput = nil -- discard all remaining input local readuntil = nil -- read until delimiter local read = nil -- basic read function module ("cgilua.post") -- -- Extract the boundary string from CONTENT_TYPE metavariable -- local function getboundary () local _,_,boundary = strfind (content_type, "boundary%=(.-)$") return "--"..boundary end -- -- Create a table containing the headers of a multipart/form-data field -- local function breakheaders (hdrdata) local headers = {} gsub (hdrdata, '([^%c%s:]+):%s+([^\n]+)', function(type,val) type = strlower(type) headers[type] = val end) return headers end -- -- Read the headers of the next multipart/form-data field -- -- This function returns a table containing the headers values. Each header -- value is indexed by the corresponding header "type". -- If end of input is reached (no more fields to process) it returns nil. -- local function readfieldheaders () local EOH = "\r\n\r\n" -- local hdrdata = "" local out = function (str) hdrdata = hdrdata..str end if readuntil (EOH, out) then -- parse headers return breakheaders (hdrdata) else -- no header found return nil end end -- -- Extract a field name (and possible filename) from its disposition header -- local function getfieldnames (headers) local disposition_hdr = headers["content-disposition"] local attrs = {} if disposition_hdr then gsub(disposition_hdr, ';%s*([^%s=]+)="(.-)"', function(attr, val) attrs[attr] = val end) else error("Error processing multipart/form-data.".. "\nMissing content-disposition header") end return attrs.name, attrs.filename end -- -- Read the contents of a 'regular' field to a string -- local function readfieldcontents () local value = "" local boundaryline = "\r\n"..boundary local out = function (str) value = value..str end if readuntil (boundaryline, out) then return value else error("Error processing multipart/form-data.\nUnexpected end of input\n") end end -- -- Read the contents of a 'file' field to a temporary file (file upload) -- local function fileupload (filename) -- create a temporary file for uploading the file field local file, err = tmpfile() if file == nil then discardinput(bytesleft) error("Cannot create a temporary file.\n"..err) end local bytesread = 0 local boundaryline = "\r\n"..boundary local out = function (str) local sl = strlen (str) if bytesread + sl > maxfilesize then discardinput (bytesleft) error (format ("Maximum file size (%d kbytes) exceeded while uploading `%s'", maxfilesize / 1024, filename)) end file:write (str) bytesread = bytesread + sl end if readuntil (boundaryline, out) then file:seek ("set", 0) return file, bytesread else error (format ("Error processing multipart/form-data.\nUnexpected end of input while uploading %s", filename)) end end -- -- Compose a file field 'value' -- local function filevalue (filehandle, filename, filesize, headers) -- the temporary file handle local value = { file = filehandle, filename = filename, filesize = filesize } -- copy additional header values for hdr, hdrval in pairs(headers) do if hdr ~= "content-disposition" then value[hdr] = hdrval end end return value end -- -- Process multipart/form-data -- -- This function receives the total size of the incoming multipart/form-data, -- the maximum size for a file upload, and a reference to a table where the -- form fields should be stored. -- -- For every field in the incoming form-data a (name=value) pair is -- inserted into the given table. [[name]] is the field name extracted -- from the content-disposition header. -- -- If a field is of type 'file' (i.e., a 'filename' attribute was found -- in its content-disposition header) a temporary file is created -- and the field contents are written to it. In this case, -- [[value]] has a table that contains the temporary file handle -- (key 'file') and the file name (key 'filename'). Optional headers -- included in the field description are also inserted into this table, -- as (header_type=value) pairs. -- -- If the field is not of type 'file', [[value]] contains the field -- contents. -- local function Main (inputsize, args) -- create a temporary file for processing input data local inputf,err = tmpfile() if inputf == nil then discardinput(inputsize) error("Cannot create a temporary file.\n"..err) end -- set the environment for processing the multipart/form-data inputfile = inputf bytesleft = inputsize maxfilesize = maxfilesize or inputsize boundary = getboundary() while true do -- read the next field header(s) local headers = readfieldheaders() if not headers then break end -- end of input -- get the name attributes for the form field (name and filename) local name, filename = getfieldnames(headers) -- get the field contents local value if filename then local filehandle, filesize = fileupload(filename) value = filevalue(filehandle, filename, filesize, headers) else value = readfieldcontents() end -- insert the form field into table [[args]] urlcode.insertfield(args, name, value) end end -- -- Initialize the library by setting the dependent functions: -- content_type = value of "Content-type" header -- content_length = value of "Content-length" header -- read = function that can read POST data -- discardinput (optional) = function that discard POST data -- maxinput (optional) = limit of POST data (in bytes) -- maxfilesize (optional) = limit of uploaded file(s) (in bytes) -- local function init (defs) assert (defs.read) read = defs.read readuntil = iterate (function () if bytesleft then if bytesleft <= 0 then return nil end local n = min (bytesleft, 2^13) -- 2^13 == 8192 local bytes = read (n) bytesleft = bytesleft - #bytes return bytes end end) if defs.discard_function then discardinput = defs.discardinput else discardinput = function (inputsize) readuntil ('\0', function()end) end end content_type = defs.content_type if defs.maxinput then maxinput = defs.maxinput end if defs.maxfilesize then maxfilesize = defs.maxfilesize end end ---------------------------------------------------------------------------- -- Parse the POST REQUEST incoming data according to its "content type" -- as defined by the metavariable CONTENT_TYPE (RFC CGI) -- -- An error is issued if the "total" size of the incoming data -- (defined by the metavariable CONTENT_LENGTH) exceeds the -- maximum input size allowed ---------------------------------------------------------------------------- function parsedata (defs) assert (type(defs.args) == "table", "field `args' must be a table") init (defs) -- get the "total" size of the incoming data local inputsize = tonumber(defs.content_length) or 0 if inputsize > maxinput then -- some Web Servers (like IIS) require that all the incoming data is read bytesleft = inputsize discardinput(inputsize) error(format("Total size of incoming data (%d KB) exceeds configured maximum (%d KB)", inputsize /1024, maxinput / 1024)) end -- process the incoming data according to its content type local contenttype = content_type if not contenttype then error("Undefined Media Type") end if strfind(contenttype, "x-www-form-urlencoded", 1, true) then urlcode.parsequery (read (inputsize), defs.args) elseif strfind(contenttype, "multipart/form-data", 1, true) then Main (inputsize, defs.args) elseif strfind (contenttype, "application/xml", 1, true) or strfind (contenttype, "text/xml", 1, true) or strfind (contenttype, "text/plain", 1, true) then tinsert (defs.args, read (inputsize)) else error("Unsupported Media Type: "..contenttype) end end genometools-1.5.1/gtdata/modules/external/cgilua/readuntil.lua000066400000000000000000000027231211610345200245440ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Reads an input until a given character. -- -- @release $Id: readuntil.lua,v 1.5 2007/04/16 14:01:32 tomas Exp $ ---------------------------------------------------------------------------- local strsub, strfind, strlen = string.sub, string.find, string.len module ("cgilua.readuntil") ---------------------------------------------------------------------------- -- Creates a function which reads an input until a given character. -- @param inp Function which reads the input. -- @return Function which receives a delimiter character and an output -- function. ---------------------------------------------------------------------------- function iterate (inp) local current = "" return function (del, out) local dellen = strlen(del) local i, e while true do i, e = strfind(current, del, 1, 1) if i then break end local new = inp() if not new then break end do -- handle borders local endcurrent = strsub(current, -dellen+1) local border = endcurrent .. strsub(new, 1, dellen-1) if strlen(current) < dellen or strlen(new) < dellen or strfind(border, del, 1, 1) then -- move last part of `current' to new block current = strsub(current, 1, -dellen) new = endcurrent .. new end end out(current) current = new end out(strsub(current, 1, (i or 0) - 1)) current = strsub(current, (e or strlen(current)) + 1) return (i ~= nil) end end genometools-1.5.1/gtdata/modules/external/cgilua/serialize.lua000066400000000000000000000057171211610345200245520ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Serialize tables. -- It works only for tables without cycles and without functions or -- userdata inside it. -- @release $Id: serialize.lua,v 1.7 2007/04/16 14:01:32 tomas Exp $ ---------------------------------------------------------------------------- local ipairs, pairs, type = ipairs, pairs, type local format = string.format local sort, tinsert = table.sort, table.insert -- local value = nil ---------------------------------------------------------------------------- -- Serializes a table. -- @param tab Table representing the session. -- @param outf Function used to generate the output. -- @param ind String with indentation pattern (default = ""). -- @param pre String with indentation prefix (default = ""). ---------------------------------------------------------------------------- local function tabledump (tab, outf, ind, pre) local sep_n, sep, _n = ",\n", ", ", "\n" if (not ind) or (ind == "") then ind = ""; sep_n = ", "; _n = "" end if not pre then pre = "" end outf ("{") local p = pre..ind -- prepare list of keys local keys = { boolean = {}, number = {}, string = {} } local total = 0 for key in pairs (tab) do total = total + 1 local t = type(key) if t == "string" then tinsert (keys.string, key) else keys[t][key] = true end end local many = total > 5 if not many then sep_n = sep; _n = " " end outf (_n) -- serialize entries with numeric keys if many then local _f,_s,_v = ipairs(tab) if _f(_s,_v) then outf (p) end end local num = keys.number local ok = false -- entries with automatic index for key, val in ipairs (tab) do value (val, outf, ind, p) outf (sep) num[key] = nil ok = true end if ok and many then outf (_n) end -- entries with explicit index for key in pairs (num) do if many then outf (p) end outf ("[") outf (key) outf ("] = ") value (tab[key], outf, ind, p) outf (sep_n) end -- serialize entries with boolean keys local tr = keys.boolean[true] if tr then outf (format ("%s[true] = ", many and p or '')) value (tab[true], outf, ind, p) outf (sep_n) end local fa = keys.boolean[false] if fa then outf (format ("%s[false] = ", many and p or '')) value (tab[false], outf, ind, p) outf (sep_n) end -- serialize entries with string keys sort (keys.string) for _, key in ipairs (keys.string) do outf (format ("%s[%q] = ", many and p or '', key)) value (tab[key], outf, ind, p) outf (sep_n) end if many then outf (pre) end outf ("}") end -- -- Serializes a value. -- value = function (v, outf, ind, pre) local t = type (v) if t == "string" then outf (format ("%q", v)) elseif t == "number" then outf (tostring(v)) elseif t == "boolean" then outf (tostring(v)) elseif t == "table" then tabledump (v, outf, ind, pre) else outf (format ("%q", tostring(v))) end end ---------------------------------------------------------------------------- cgilua.serialize = tabledump return tabledump genometools-1.5.1/gtdata/modules/external/cgilua/session.lua000066400000000000000000000162451211610345200242440ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Session library. -- -- @release $Id: session.lua,v 1.29 2007/11/21 16:33:20 carregal Exp $ ---------------------------------------------------------------------------- local lfs = require"lfs" local serialize = require"cgilua.serialize" local assert, error, ipairs, _G, loadfile, next, tostring, type = assert, error, ipairs, _G, loadfile, next, tostring, type local format, gsub, strfind, strsub = string.format, string.gsub, string.find, string.sub local tinsert = table.insert local _open = io.open local remove, time = os.remove, os.time local mod, rand, randseed = math.mod, math.random, math.randomseed local attributes, dir, mkdir = lfs.attributes, lfs.dir, lfs.mkdir module ("cgilua.session") local INVALID_SESSION_ID = "Invalid session identification" ---------------------------------------------------------------------------- -- Internal state variables. local root_dir = nil local timeout = 10 * 60 -- 10 minutes -- -- Checks identifier's format. -- local function check_id (id) return id and (strfind (id, "^%d+$") ~= nil) end -- -- Produces a file name based on a session. -- @param id Session identification. -- @return String with the session file name. -- local function filename (id) return format ("%s/%s.lua", root_dir, id) end ---------------------------------------------------------------------------- -- Deletes a session. -- @param id Session identification. ---------------------------------------------------------------------------- function delete (id) if not check_id (id) then return nil, INVALID_SESSION_ID end remove (filename (id)) end -- -- Searches for a file in the root_dir -- local function find (file) local fh = _open (root_dir.."/"..file) if fh then fh:close () return true else return false end end -- -- Creates a new identifier. -- @return New identifier. -- local function new_id () return rand (999999999) end ---------------------------------------------------------------------------- -- Creates a new session identifier. -- @return Session identification. ---------------------------------------------------------------------------- function new () local id = new_id () if find (id..".lua") then repeat id = new_id (id) until not find (id..".lua") randseed (mod (id, 999999999)) end return id end ---------------------------------------------------------------------------- -- Changes the session identificator generator. -- @param func Function. ---------------------------------------------------------------------------- function setidgenerator (func) if type (func) == "function" then new_id = func end end ---------------------------------------------------------------------------- -- Loads data from a session. -- @param id Session identification. -- @return Table with session data or nil in case of error. -- @return In case of error, also returns the error message. ---------------------------------------------------------------------------- function load (id) if not check_id (id) then return nil, INVALID_SESSION_ID end local f, err = loadfile (filename (id)) if not f then return nil, err else return f() end end ---------------------------------------------------------------------------- -- Saves data to a session. -- @param id Session identification. -- @param data Table with session data to be saved. ---------------------------------------------------------------------------- function save (id, data) if not check_id (id) then return nil, INVALID_SESSION_ID end local fh = assert (_open (filename (id), "w+")) fh:write "return " serialize (data, function (s) fh:write(s) end) fh:close() end ---------------------------------------------------------------------------- -- Removes expired sessions. ---------------------------------------------------------------------------- function cleanup () local rem = {} local now = time () for file in dir (root_dir) do local attr = attributes(root_dir.."/"..file) if attr and attr.mode == 'file' then if attr.modification + timeout < now then tinsert (rem, file) end end end for _, file in ipairs (rem) do remove (root_dir.."/"..file) end end ---------------------------------------------------------------------------- -- Changes the session timeout. -- @param t Number of seconds to maintain a session. ---------------------------------------------------------------------------- function setsessiontimeout (t) if type (t) == "number" then timeout = t end end ---------------------------------------------------------------------------- -- Changes the session directory. -- @param path String with the new session directory. ---------------------------------------------------------------------------- function setsessiondir (path) path = gsub (path, "[/\\]$", "") -- Make sure the given path is a directory if not attributes (path, "mode") then assert (mkdir (path)) end -- Make sure it can create a new file in the given directory local test_file = path.."/".._G.cgilua.tmpname() local fh, err = _open (test_file, "w") if not fh then error ("Could not open a file in session directory: ".. tostring(err), 2) end fh:close () remove (test_file) root_dir = path end ---------------------------------------------------------------------------- local ID_NAME = "cgilua session identification" local id = nil ---------------------------------------------------------------------------- -- Destroys the session. ---------------------------------------------------------------------------- function destroy () data = {} -- removes data from session table to avoid recreation by `close' delete (id) end ---------------------------------------------------------------------------- -- Open user session. -- This function should be called before the script is executed. ---------------------------------------------------------------------------- function open () -- Redefine cgilua.mkurlpath to manage the session identification local mkurlpath = _G.cgilua.mkurlpath function _G.cgilua.mkurlpath (script, data) if not data then data = {} end data[ID_NAME] = id return mkurlpath (script, data) end cleanup() id = _G.cgilua.QUERY[ID_NAME] or new() if id then _G.cgilua.QUERY[ID_NAME] = nil _G.cgilua.session.data = load (id) or {} end end ---------------------------------------------------------------------------- -- Close user session. -- This function should be called after the script is executed. ---------------------------------------------------------------------------- function close () if next (_G.cgilua.session.data) then save (id, _G.cgilua.session.data) id = nil end end local already_enabled = false ---------------------------------------------------------------------------- -- Enables the use of sessions. -- This function must be called by every script that needs sessions. -- It just calls the `open' function and register the `close' function -- to be called at the end of the execution. ---------------------------------------------------------------------------- function _G.cgilua.enablesession () if already_enabled then -- avoid misuse when a script calls another one return else already_enabled = true end open () _G.cgilua.addclosefunction (close) end genometools-1.5.1/gtdata/modules/external/cgilua/urlcode.lua000066400000000000000000000066251211610345200242170ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Utility functions for encoding/decoding of URLs. -- -- @release $Id: urlcode.lua,v 1.10 2008/01/21 16:11:32 carregal Exp $ ---------------------------------------------------------------------------- local ipairs, next, pairs, tonumber, type = ipairs, next, pairs, tonumber, type local string = string local table = table module ("cgilua.urlcode") ---------------------------------------------------------------------------- -- Decode an URL-encoded string (see RFC 2396) ---------------------------------------------------------------------------- function unescape (str) str = string.gsub (str, "+", " ") str = string.gsub (str, "%%(%x%x)", function(h) return string.char(tonumber(h,16)) end) str = string.gsub (str, "\r\n", "\n") return str end ---------------------------------------------------------------------------- -- URL-encode a string (see RFC 2396) ---------------------------------------------------------------------------- function escape (str) str = string.gsub (str, "\n", "\r\n") str = string.gsub (str, "([^0-9a-zA-Z ])", -- locale independent function (c) return string.format ("%%%02X", string.byte(c)) end) str = string.gsub (str, " ", "+") return str end ---------------------------------------------------------------------------- -- Insert a (name=value) pair into table [[args]] -- @param args Table to receive the result. -- @param name Key for the table. -- @param value Value for the key. -- Multi-valued names will be represented as tables with numerical indexes -- (in the order they came). ---------------------------------------------------------------------------- function insertfield (args, name, value) if not args[name] then args[name] = value else local t = type (args[name]) if t == "string" then args[name] = { args[name], value, } elseif t == "table" then table.insert (args[name], value) else error ("CGILua fatal error (invalid args table)!") end end end ---------------------------------------------------------------------------- -- Parse url-encoded request data -- (the query part of the script URL or url-encoded post data) -- -- Each decoded (name=value) pair is inserted into table [[args]] -- @param query String to be parsed. -- @param args Table where to store the pairs. ---------------------------------------------------------------------------- function parsequery (query, args) if type(query) == "string" then local insertfield, unescape = insertfield, unescape string.gsub (query, "([^&=]+)=([^&=]*)&?", function (key, val) insertfield (args, unescape(key), unescape(val)) end) end end ---------------------------------------------------------------------------- -- URL-encode the elements of a table creating a string to be used in a -- URL for passing data/parameters to another script -- @param args Table where to extract the pairs (name=value). -- @return String with the resulting encoding. ---------------------------------------------------------------------------- function encodetable (args) if args == nil or next(args) == nil then -- no args or empty args? return "" end local strp = "" for key, vals in pairs(args) do if type(vals) ~= "table" then vals = {vals} end for i,val in ipairs(vals) do strp = strp.."&"..escape(key).."="..escape(val) end end -- remove first & return string.sub(strp,2) end genometools-1.5.1/gtdata/modules/external/md5.lua000066400000000000000000000016141211610345200217740ustar00rootroot00000000000000---------------------------------------------------------------------------- -- $Id: md5.lua,v 1.4 2006/08/21 19:24:21 carregal Exp $ ---------------------------------------------------------------------------- local core = require"md5.core" local string = require"string" local pairs = _G.pairs local assert = _G.assert local md5 = _G.md5 module ("md5") -- export md5.core to md5 for k, v in pairs(core) do if k ~= "_M" and k ~= "_NAME" and k~= "_PACKAGE" then assert(not md5[k]) -- symbol is undefined md5[k] = v -- export symbol end end ---------------------------------------------------------------------------- -- @param k String with original message. -- @return String with the md5 hash value converted to hexadecimal digits function sumhexa (k) k = core.sum(k) return (string.gsub(k, ".", function (c) return string.format("%02x", string.byte(c)) end)) end genometools-1.5.1/gtdata/modules/external/re.lua000066400000000000000000000122711211610345200217160ustar00rootroot00000000000000-- $Id: re.lua,v 1.32 2008/10/09 20:25:06 roberto Exp $ local m = require"lpeg" local _G = _G local tonumber, type, print, error = tonumber, type, print, error local mt = getmetatable(m.P(0)) module "re" local any = m.P(1) -- Pre-defined names Predef = { nl = m.P"\n" } local I = m.P(function (s,i) print(i, s:sub(1, i-1)); return i end) local function getdef (id, Defs) local c = Defs and Defs[id] if not c then error("undefined name: " .. id) end return c end local function patt_error (s, i) local msg = (#s < i + 20) and s:sub(i) or s:sub(i,i+20) .. "..." msg = ("pattern error near '%s'"):format(msg) error(msg, 2) end local function mult (p, n) local np = m.P(true) while n >= 1 do if n%2 >= 1 then np = np * p end p = p * p n = n/2 end return np end local function equalcap (s, i, c) if type(c) ~= "string" then return nil end local e = #c + i if s:sub(i, e - 1) == c then return e else return nil end end local S = (m.S(" \t\n") + "--" * (any - m.S"\n")^0)^0 local name = m.R("AZ", "az") * m.R("AZ", "az", "09")^0 local exp_follow = m.P"/" + ")" + "}" + ":}" + "~}" + name + -1 name = m.C(name) -- identifiers only have meaning in a given environment local Identifier = name * m.Carg(1) local num = m.C(m.R"09"^1) * S / tonumber local String = "'" * m.C((any - "'")^0) * "'" + '"' * m.C((any - '"')^0) * '"' local Cat = "%" * Identifier / function (c,Defs) local cat = Defs and Defs[c] or Predef[c] if not cat then error ("name '" .. c .. "' undefined") end return cat end local Range = m.Cs(any * (m.P"-"/"") * (any - "]")) / m.R local item = Cat + Range + m.C(any) local Class = "[" * (m.C(m.P"^"^-1)) -- optional complement symbol * m.Cf(item * (item - "]")^0, mt.__add) / function (c, p) return c == "^" and any - p or p end * "]" local function adddef (t, k, Defs, exp) if t[k] then error("'"..k.."' already defined as a rule") else t[k] = exp end return t end local function firstdef (n, Defs, r) return adddef({n}, n, Defs, r) end local exp = m.P{ "Exp", Exp = S * ( m.V"Grammar" + m.Cf(m.V"Seq" * ("/" * S * m.V"Seq")^0, mt.__add) ); Seq = m.Cf(m.Cc(m.P"") * m.V"Prefix"^0 , mt.__mul) * (#exp_follow + patt_error); Prefix = "&" * S * m.V"Prefix" / mt.__len + "!" * S * m.V"Prefix" / mt.__unm + m.V"Suffix"; Suffix = m.Cf(m.V"Primary" * S * ( ( m.P"+" * m.Cc(1, mt.__pow) + m.P"*" * m.Cc(0, mt.__pow) + m.P"?" * m.Cc(-1, mt.__pow) + "^" * ( m.Cg(num * m.Cc(mult)) + m.Cg(m.C(m.S"+-" * m.R"09"^1) * m.Cc(mt.__pow)) ) + "->" * S * ( m.Cg(String * m.Cc(mt.__div)) + m.P"{}" * m.Cc(nil, m.Ct) + m.Cg(Identifier / getdef * m.Cc(mt.__div)) ) + "=>" * S * m.Cg(Identifier / getdef * m.Cc(m.Cmt)) ) * S )^0, function (a,b,f) return f(a,b) end ); Primary = "(" * m.V"Exp" * ")" + String / m.P + Class + Cat + "{:" * (name * ":" + m.Cc(nil)) * m.V"Exp" * ":}" / function (n, p) return m.Cg(p, n) end + "=" * name / function (n) return m.Cmt(m.Cb(n), equalcap) end + m.P"{}" / m.Cp + "{~" * m.V"Exp" * "~}" / m.Cs + "{" * m.V"Exp" * "}" / m.C + m.P"." * m.Cc(any) + "<" * name * ">" / m.V; Definition = Identifier * S * '<-' * m.V"Exp"; Grammar = m.Cf(m.V"Definition" / firstdef * m.Cg(m.V"Definition")^0, adddef) / m.P } local pattern = S * exp / m.P * (-any + patt_error) function compile (p, defs) if m.type(p) == "pattern" then return p end -- already compiled local cp = pattern:match(p, 1, defs) if not cp then error("incorrect pattern", 3) end return cp end local mem local fmem local gmem local mt = {__mode = "v"} function match (s, p, i) local cp = mem[p] if not cp then cp = compile(p) mem[p] = cp end return cp:match(s, i or 1) end function find (s, p, i) local cp = fmem[p] if not cp then cp = compile(p) cp = m.P{ m.Cp() * cp + 1 * m.V(1) } fmem[p] = cp end return cp:match(s, i or 1) end function gsub (s, p, rep) gmem[p] = gmem[p] or {} local cp = gmem[p][rep] if not cp then cp = compile(p) cp = m.Cs((cp / rep + 1)^0) gmem[p][rep] = cp end return cp:match(s) end function updatelocale () m.locale(Predef) Predef.a = Predef.alpha Predef.c = Predef.cntrl Predef.d = Predef.digit Predef.g = Predef.graph Predef.l = Predef.lower Predef.p = Predef.punct Predef.s = Predef.space Predef.u = Predef.upper Predef.w = Predef.alnum Predef.x = Predef.xdigit Predef.A = any - Predef.a Predef.C = any - Predef.c Predef.D = any - Predef.d Predef.G = any - Predef.g Predef.L = any - Predef.l Predef.P = any - Predef.p Predef.S = any - Predef.s Predef.U = any - Predef.u Predef.W = any - Predef.w Predef.X = any - Predef.x mem = {} -- restart memoization fmem = {} gmem = {} _G.setmetatable(mem, mt) _G.setmetatable(fmem, mt) _G.setmetatable(gmem, mt) end updatelocale() genometools-1.5.1/gtdata/modules/fileutils.lua000066400000000000000000000046501211610345200214700ustar00rootroot00000000000000--[[ Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) require 'lfs' -- returns true if file with exists, false otherwise function file_exists(filename) assert(filename) if lfs.attributes(filename, "mode") then return true else return false end end local function has_mode(filename, mode) assert(filename and mode) local attr, err = lfs.attributes(filename, "mode") assert(attr, err) if attr == mode then return true else return false end end -- returns true if file with is a directory, false otherwise function is_dir(filename) assert(filename) return has_mode(filename, "directory") end -- returns true if file with is a regular file, false otherwise function is_regular_file(filename) assert(filename) return has_mode(filename, "file") end local function is_regular_file_with_ending(filename, ending) assert(filename and ending) local pattern = "%" .. ending .. "$" if string.find(filename, pattern) and is_regular_file(filename) then return true else return false end end -- returns true if file with is a header file, false otherwise function is_header(filename) assert(filename) return is_regular_file_with_ending(filename, ".h") end -- returns true if file with is an API header file, false otherwise function is_api_header(filename) assert(filename) return is_regular_file_with_ending(filename, "_api.h") end -- returns true if file with is a Lua file, false otherwise function is_lua_file(filename) assert(filename) return is_regular_file_with_ending(filename, ".lua") end genometools-1.5.1/gtdata/modules/gtdoclib.lua000066400000000000000000000023731211610345200212570ustar00rootroot00000000000000--[[ Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) require 'gtmodulehelper' -- all gtdoc modules which should be loaded local gtdocmodules = { "fileutils", "gtdoclib.docbase", "gtdoclib.docparser", "gtdoclib.docvisitorhtml", "gtdoclib.docvisitorlatex", "gtdoclib.docvisitortxt" } gtmodulehelper.load_modules(gtdocmodules); genometools-1.5.1/gtdata/modules/gtdoclib/000077500000000000000000000000001211610345200205475ustar00rootroot00000000000000genometools-1.5.1/gtdata/modules/gtdoclib/class.lp000066400000000000000000000000741211610345200222120ustar00rootroot00000000000000

Class <%=classname%>

genometools-1.5.1/gtdata/modules/gtdoclib/class_comments.lp000066400000000000000000000001211211610345200241100ustar00rootroot00000000000000<% for _, comment in ipairs(comments) do %>

<%= comment %>

<% end %>
genometools-1.5.1/gtdata/modules/gtdoclib/class_comments_latex.lp000066400000000000000000000001371211610345200253140ustar00rootroot00000000000000<% for _, comment in ipairs(comments) do %> <%= comment %> <% end %> \subsubsection*{Methods} genometools-1.5.1/gtdata/modules/gtdoclib/class_latex.lp000066400000000000000000000000661211610345200234100ustar00rootroot00000000000000\section{Class <%=classname%>} \label{<%=classname%>} genometools-1.5.1/gtdata/modules/gtdoclib/classes.lp000066400000000000000000000001661211610345200225440ustar00rootroot00000000000000

Classes

    <%for _, class in ipairs(classes) do%>
  • <%=class%> <%end%>
genometools-1.5.1/gtdata/modules/gtdoclib/classes_latex.lp000066400000000000000000000002551211610345200237400ustar00rootroot00000000000000\section*{Table of Classes} \begin{itemize} <%for _, class in ipairs(classes) do%> \item Class \texttt{<%=class%>}\dotfill page \pageref{<%=class%>} <%end%> \end{itemize} genometools-1.5.1/gtdata/modules/gtdoclib/docbase.lua000066400000000000000000000164641211610345200226650ustar00rootroot00000000000000--[[ Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) require 'stringext' local w = require 'warning' DocBase = {} function DocBase:new() o = {} o.classes = {} o.classcomments = {} o.modules = {} o.moduledefs = {} o.solefuncs = {} setmetatable(o, self) self.__index = self return o end function DocBase:add_class(classname, comments, be_verbose) assert(classname) if be_verbose then print("class added: " .. classname) end self.classes[classname] = self.classes[classname] or {} self.classcomments[classname] = comments end function DocBase:add_module(modulename, be_verbose) assert(modulename) if be_verbose then print("module added: " .. modulename) end self.modules[modulename] = self.modules[modulename] or {} end function DocBase:add_method(funcret, funcname, funcargs, comment, be_verbose) assert(funcname and comment) local desc = {} -- remove ``GenomeTools_'' prefix which is used to extend exported C classes desc.rval = funcret desc.name = string.gsub(funcname, "^GenomeTools_", "") desc.args = funcargs desc.comment = comment if be_verbose then print("method added: " .. desc.name) end if self.last_module then self.modules[self.last_module][#self.modules[self.last_module] + 1] = desc return end local classname, match funcname = string.lower(string.gsub(desc.name, "_", "")) for class_to_search in pairs(self.classes) do local class_to_match = "^" .. string.lower(string.gsub(class_to_search, "_", "")) if be_verbose then print("match class: " .. class_to_match .. funcname) end match = string.match(funcname, class_to_match) if match then if not classname or string.len(match) > string.len(classname) then classname = class_to_search end end end if be_verbose and classname then print("classname found: " .. classname) end -- if this is a valid classname, try to store method in class if classname and self.classes[classname] then self.classes[classname][#self.classes[classname] + 1] = desc else self.solefuncs[#self.solefuncs + 1] = desc end end local function method_keyword(ast, be_verbose) for i, keyword in ipairs(ast) do if be_verbose then print("Try: " .. keyword) end if keyword == "function" then if be_verbose then print("Return: " .. i) end return i end end return 0 end function DocBase:process_ast(ast, be_verbose) assert(ast) for _, v in ipairs(ast) do if type(v) == "table" then self:process_ast(v, be_verbose) else local keyword = ast[1] if be_verbose then print("keyword: " .. keyword) end if keyword == "class" then o.last_module = nil local comments if #ast > 2 then comments = {} for i = 2, #ast - 1 do if be_verbose then print("add class comment: " .. ast[i]) end comments[#comments + 1] = ast[i] end end self["add_" .. ast[1]](self, ast[#ast], comments, be_verbose) break elseif keyword == "module" then self.last_module = ast[2] self["add_" .. ast[1]](self, ast[2], be_verbose) elseif keyword == "funcdef" then if be_verbose then print("funcdef keyword found") end if self.last_module then desc = {} desc.name = ast[3] desc.comment = ast[2] self.moduledefs[self.last_module] = self.moduledefs[self.last_module] or {} self.moduledefs[self.last_module][#self.moduledefs[self.last_module] + 1] = desc end break elseif keyword == "comment" then local funcpos = method_keyword(ast, be_verbose) local complete_comment = "" if funcpos > 0 then assert(funcpos > 2) assert(#ast == funcpos + 2 or #ast == funcpos + 3) if be_verbose then print("function found!") end if ast[2] == "undefined" then w.warning("undefined comment") else complete_comment = table.concat(ast, "", 2, funcpos-1) complete_comment = string.strip(complete_comment) end self:add_method(ast[funcpos+1], ast[funcpos+2], ast[funcpos+3], complete_comment, be_verbose) break elseif be_verbose then print("no function found!") end end end end end function DocBase:accept(visitor) assert(visitor) local method_names = {} -- visit all classes local sorted_classes = {} for classname in pairs(self.classes) do if #self.classes[classname] > 0 then sorted_classes[#sorted_classes + 1] = classname end end table.sort(sorted_classes) if visitor.visit_classes then visitor:visit_classes(sorted_classes) end -- visit all modules local sorted_modules = {} for modulename in pairs(self.modules) do if #self.modules[modulename] > 0 or #self.moduledefs[modulename] > 0 then sorted_modules[#sorted_modules + 1] = modulename end end table.sort(sorted_modules) if visitor.visit_modules then visitor:visit_modules(sorted_modules) end -- visit sole functions for _, funcdesc in ipairs(self.solefuncs) do if visitor.visit_sole_function then visitor:visit_sole_function(funcdesc) else visitor:visit_method(funcdesc) end method_names[#method_names + 1] = funcdesc.name end -- visit each class for _, classname in ipairs(sorted_classes) do visitor:visit_class(classname, self.classcomments[classname]) -- visit methods for class for _, method in ipairs(self.classes[classname]) do visitor:visit_method(method) method_names[#method_names + 1] = method.name end end -- visit each module if visitor.visit_module then for _, modulename in ipairs(sorted_modules) do visitor:visit_module(modulename) -- visit funcdefs for module if self.moduledefs[modulename] then for _, funcdef in ipairs(self.moduledefs[modulename]) do visitor:visit_funcdef(funcdef) end end -- visit functions for module for _, method in ipairs(self.modules[modulename]) do visitor:visit_method(method) method_names[#method_names + 1] = method.name end end end -- visit all method names (for index construction) if visitor.visit_index then table.sort(method_names) visitor:visit_index(method_names) end end genometools-1.5.1/gtdata/modules/gtdoclib/docparser.lua000066400000000000000000000173111211610345200232370ustar00rootroot00000000000000--[[ Copyright (c) 2008, 2011 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) require 'lpeg' require 'fileutils' DocParser = {} -- Common Lexical Elements local Any = lpeg.P(1) local Newline = lpeg.S("\n") local Whitespace = lpeg.S(" \t\n") local OptionalSpace = Whitespace^0 local Space = Whitespace^1 local Semicolon = lpeg.S(";") local DefineSeparator = lpeg.S("\\") -- Lexical Elements of Lua local LuaLongCommentStart = lpeg.P("--[[") local LuaLongCommentEnd = lpeg.P("]]") local LuaLongComment = lpeg.Cc("long comment") * lpeg.C(LuaLongCommentStart * (Any - LuaLongCommentEnd)^0 * LuaLongCommentEnd) local LuaShortCommentStart = lpeg.P("--") local LuaShortCommentEnd = Newline local LuaShortCommentLine = OptionalSpace * LuaShortCommentStart * lpeg.C((Any - LuaShortCommentEnd)^0) * LuaShortCommentEnd local LuaShortComment = lpeg.Cc("comment") * LuaShortCommentLine^1 local LuaOptionalComment = LuaShortComment + lpeg.Cc("comment") * lpeg.Cc("undefined") local LuaCommentStart = LuaLongCommentStart + LuaShortCommentStart local LuaEnd = lpeg.P("end") local LuaLocalFunction = lpeg.P("local") * OptionalSpace * lpeg.P("function") * OptionalSpace * lpeg.P(Any - lpeg.P("("))^1 * lpeg.P("(") * (Any - lpeg.P(")"))^0 * lpeg.P(")") local LuaGlobalFunction = -lpeg.P("local") * OptionalSpace * lpeg.C(lpeg.P("function")) * OptionalSpace * lpeg.Cc("") * lpeg.C(lpeg.P(Any - lpeg.P("("))^1) * lpeg.P("(") * lpeg.C((Any - lpeg.P(")"))^0) * lpeg.P(")") local ExportLuaMethod = lpeg.Ct(LuaOptionalComment * LuaGlobalFunction) local CodeStop = LuaCommentStart + LuaLocalFunction + LuaGlobalFunction local LuaCode = lpeg.Cc("code") * lpeg.C((Any - CodeStop)^1) -- Lexical Elements of (Lua) C local Character = lpeg.R("AZ", "az") + lpeg.R("09") + lpeg.P("_") + lpeg.P("*") local CCommentStart = lpeg.P("/*") local CCommentEnd = lpeg.P("*/") local ExportLuaCComment = CCommentStart * lpeg.P(" exports the ") * lpeg.Ct(lpeg.Cc("class") * lpeg.C(Character^1)) * (Any - lpeg.P("to Lua:"))^1 * lpeg.P("to Lua:") * ExportLuaMethod^0 * (Any - CCommentEnd)^0 * CCommentEnd local CComment = CCommentStart * (Any - CCommentEnd)^0 * CCommentEnd local CCode = (Any - CCommentStart)^1 -- Lexical Elements of (pure) C local Ifndef = lpeg.P("#ifndef") * Whitespace * Character^1 * Newline local Define = lpeg.P("#define") * Whitespace * Character^1 * Newline local Endif = lpeg.P("#endif") * Newline^0 local Include = lpeg.P("#include") * (Any - Newline)^1 * Newline local ClassTypedef = lpeg.Ct(lpeg.Cc("class") * (CCommentStart * lpeg.C((Any - CCommentEnd)^0) * CCommentEnd)^0 * Newline^0 * ((lpeg.P("typedef") * Space * (lpeg.P("struct") + lpeg.P("enum")) * Space * Character^1 * Space * lpeg.C(Character^1)) + (lpeg.P("typedef") * Space * lpeg.P("char*") * Space * lpeg.C(lpeg.P("GtTagValueMap")))) * OptionalSpace * Semicolon) local FunctionTypedef = lpeg.Ct(lpeg.Cc("funcdef") * (CCommentStart * lpeg.C((Any - CCommentEnd)^0) * CCommentEnd) * Newline^0 * lpeg.P("typedef") * Space * lpeg.C((Any - Semicolon)^1) * Semicolon) local TypedefStruct = lpeg.P("typedef struct") * (Any - Semicolon)^1 * Semicolon local OptionalWord = (Character^1 * Space)^-1 local Function = lpeg.Cc("function") * lpeg.C(Character^1 * Space * OptionalWord) * lpeg.C(lpeg.P(Any - lpeg.P("("))^1) * lpeg.P("(") * lpeg.C((Any - lpeg.P(")"))^1) * lpeg.P(")") * (Any - Semicolon)^0 * Semicolon local ExportedComment = lpeg.Cc("comment") * CCommentStart * lpeg.C((Any - CCommentEnd)^0) * CCommentEnd local ExportedDefine = lpeg.Cc("function") * lpeg.C("#define") * Space * lpeg.C(lpeg.P(Any - lpeg.P("("))^1) * lpeg.P("(") * lpeg.C((Any - lpeg.P(")"))^1) * lpeg.P(")") * OptionalSpace * DefineSeparator local ExportedPlainDefine = lpeg.Cc("function") * lpeg.C("#define") * Space * lpeg.C(lpeg.P(Any - (DefineSeparator + Space))^1) * OptionalSpace * DefineSeparator local ExportCMethod = lpeg.Ct(ExportedComment * Newline^0 * Function) local ExportCDefine = lpeg.Ct(ExportedComment * Newline^0 * (ExportedDefine+ ExportedPlainDefine)) local ModuleDef = lpeg.Ct(lpeg.Cc("module") * CCommentStart * Space * lpeg.C(Character^1) * Space * lpeg.P("module") * Space * CCommentEnd) -- Lua Grammar local Elem, Start = lpeg.V"Elem", lpeg.V"Start" local LuaGrammar = lpeg.P{ Start, Start = lpeg.Ct(Elem^0); Elem = ExportLuaMethod + LuaLongComment + LuaShortComment + Space + LuaLocalFunction + LuaCode; } LuaGrammar = LuaGrammar * -1 -- Lua C Grammar local LuaCGrammar = lpeg.P{ Start, Start = lpeg.Ct(Elem^0); Elem = lpeg.Ct(ExportLuaCComment) + CComment + Space + CCode; } LuaCGrammar = LuaCGrammar * -1 -- CGrammar local CGrammar = lpeg.P{ Start, -- Start = lpeg.Ct(CComment * Newline^0 * Ifndef * Define * Elem^0 * Endif); Start = lpeg.Ct(CComment * Newline^0 * Ifndef * Define * Elem^0); Elem = ClassTypedef + ModuleDef + ExportCDefine + ExportCMethod + Space + Include + lpeg.C(TypedefStruct) + FunctionTypedef + CCode + CComment; } CGrammar = CGrammar * -1 function DocParser:new() o = {} o.lua_c_pattern = LuaCGrammar o.lua_pattern = LuaGrammar o.c_pattern = CGrammar setmetatable(o, self) self.__index = self return o end function DocParser:parse(filename, be_verbose, is_lua) assert(filename) assert(is_header(filename) or is_lua_file(filename)) if be_verbose then print("parsing " .. filename) end local file, err = io.open(filename, "r") assert(file, err) local filecontent = file:read("*a") if is_header(filename) then if is_lua then return lpeg.match(self.lua_c_pattern, filecontent) else return lpeg.match(self.c_pattern, filecontent) end else assert(is_lua_file(filename)) return lpeg.match(self.lua_pattern, filecontent) end end genometools-1.5.1/gtdata/modules/gtdoclib/docvisitorhtml.lua000066400000000000000000000066701211610345200243350ustar00rootroot00000000000000--[[ Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) lp = require 'cgilua/lp' DocVisitorHTML = {} local template_dir function DocVisitorHTML:new(template_path, header) assert(template_path and header) template_dir = template_path o = {} setmetatable(o, self) self.__index = self o.header = header return o end local function include(template, env) assert(template) local template_path = template_dir .. template env = env or {} env.io = io env.os = os env.ipairs = ipairs return lp.include(template_path, env) end local function codify(str) assert(str) local res = string.gsub(str, "<<(.-)>>", "@@%1@@") res = string.gsub(res, "<(.-)>", "%1") res = string.gsub(res, "@@(.-)@@", "<%1>") res = string.gsub(res, " ([%a_][%a%d_%.]-%(%))", " %1") res = string.gsub(res, "___(.-)___", "%1") return string.gsub(res, "__(.-)__", "%1") end local function paragraphify(str) assert(str) return string.gsub(str, "\n\n", "

") end function DocVisitorHTML:show_header() include(self.header) end function DocVisitorHTML:visit_classes(classes) assert(classes) include("classes.lp", { classes = classes }) end function DocVisitorHTML:visit_modules(modules) assert(modules) include("modules.lp", { modules = modules }) end function DocVisitorHTML:visit_class(classname, comments) assert(classname) include("class.lp", { classname = classname }) if comments then for i, _ in ipairs(comments) do comments[i] = paragraphify(codify(comments[i])) end include("class_comments.lp", { comments = comments }) end end function DocVisitorHTML:visit_module(modulename) assert(modulename) include("module.lp", { modulename = modulename }) end local sole_function_visited = false function DocVisitorHTML:visit_sole_function(desc) if not sole_function_visited then include("sole_function.lp") sole_function_visited = true end self:visit_method(desc) end function DocVisitorHTML:visit_method(desc) assert(desc) local name local prototype = desc.name if desc.rval then name = desc.rval .. " " .. desc.name else name = desc.rval end include("method.lp", { name = name, args = desc.args, comment = codify(desc.comment), prototype = prototype }) end function DocVisitorHTML:visit_funcdef(desc) assert(desc) include("funcdef.lp", { name = desc.name, comment = codify(desc.comment) }) end function DocVisitorHTML:visit_index(names) assert(names) include("index.lp", { names = names }) end function DocVisitorHTML:show_footer() include("footer.lp") end genometools-1.5.1/gtdata/modules/gtdoclib/docvisitorlatex.lua000066400000000000000000000077001211610345200245010ustar00rootroot00000000000000--[[ Copyright (c) 2008 Sascha Steinbiss Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) lp = require 'cgilua/lp' DocVisitorLaTeX = {} local template_dir function DocVisitorLaTeX:new(template_path, header) assert(template_path and header) template_dir = template_path o = {} setmetatable(o, self) self.__index = self o.header = header return o end local function include(template, env) assert(template) local template_path = template_dir .. template env = env or {} env.io = io env.os = os env.ipairs = ipairs return lp.include(template_path, env) end local function trim(s) return (string.gsub(s, "^%s*(.-)%s*$", "%1")) end local function codify(str) if (str == nil) then str = "" end str = trim(str) local res = string.gsub(str, "\\", "$\\backslash$") res = string.gsub(res, "<<([^ ]-)>>", "@@%1@@") res = string.gsub(res, "<([^ ]-)>", "\\texttt{%1}") res = string.gsub(res, "@@([^ ]-)@@", "\\texttt{<%1>}") res = string.gsub(res, "\->", "$\\to$") res = string.gsub(res, ">", "$>$") res = string.gsub(res, "<", "$<$") res = string.gsub(res, " ([%a_][%a%d_%.]-%(%))", "\\texttt{%1}") res = string.gsub(res, "___(.-)___", " \\textbf{%1}") res = string.gsub(res, "__(.-)__", "\\emph{%1}") res = string.gsub(res, "_", "\\_") res = string.gsub(res, "#", "\\#") return res end local function paragraphify(str) assert(str) return string.gsub(str, "\n\n", "\\\\") end function DocVisitorLaTeX:show_header() include(self.header) end function DocVisitorLaTeX:visit_classes(classes) assert(classes) include("classes_latex.lp", { classes = classes }) end function DocVisitorLaTeX:visit_modules(modules) assert(modules) if (#modules == 0) then return end include("modules_latex.lp", { modules = modules }) end function DocVisitorLaTeX:visit_class(classname, comments) assert(classname) include("class_latex.lp", { classname = codify(classname) }) if comments then for i, _ in ipairs(comments) do comments[i] = paragraphify(codify(comments[i])) end include("class_comments_latex.lp", { comments = comments }) end end function DocVisitorLaTeX:visit_module(modulename) assert(modulename) include("module_latex.lp", { modulename = modulename }) end local sole_function_visited = false function DocVisitorLaTeX:visit_sole_function(desc) if not sole_function_visited then include("sole_function_latex.lp") sole_function_visited = true end self:visit_method(desc) end function DocVisitorLaTeX:visit_method(desc) assert(desc) local name local prototype = desc.name if desc.rval then name = desc.rval .. " " .. desc.name else name = desc.rval end include("method_latex.lp", { name = codify(name), args = codify(desc.args), comment = paragraphify(codify(desc.comment)), prototype = codify(prototype) }) end function DocVisitorLaTeX:visit_funcdef(desc) assert(desc) include("funcdef_latex.lp", { name = codify(desc.name), comment = paragraphify(codify(desc.comment)) }) end function DocVisitorLaTeX:visit_index(names) end function DocVisitorLaTeX:show_footer() include("footer_latex.lp") end genometools-1.5.1/gtdata/modules/gtdoclib/docvisitortxt.lua000066400000000000000000000037441211610345200242070ustar00rootroot00000000000000--[[ Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) DocVisitorTxt = {} function DocVisitorTxt:new() o = {} setmetatable(o, self) self.__index = self return o end function DocVisitorTxt:visit_modules(modules) print("modules:") for _, mod in ipairs(modules) do print(mod) end end function DocVisitorTxt:visit_class(classname, comments) assert(classname) io.write(string.format("class: %s\n", classname)) if comments then print("comments: " .. table.concat(comments)) end end function DocVisitorTxt:visit_module(modulename) assert(modulename) io.write(string.format("module: %s\n", modulename)) end function DocVisitorTxt:visit_method(desc) assert(desc) if desc.args then io.write(string.format("method:\n%s\n%s(%s)\n", desc.comment, desc.name, desc.args)) else io.write(string.format("method:\n%s\n%s\n", desc.comment, desc.name)) end end function DocVisitorTxt:visit_funcdef(desc) assert(desc) io.write(string.format("fundef:\n%s\n%s\n", desc.comment, desc.name)) end function DocVisitorTxt:visit_index(names) assert(names) print("index:") for _, name in ipairs(names) do print(name) end end genometools-1.5.1/gtdata/modules/gtdoclib/footer.lp000066400000000000000000000013771211610345200224120ustar00rootroot00000000000000

genometools-1.5.1/gtdata/modules/gtdoclib/footer_latex.lp000066400000000000000000000000011211610345200235660ustar00rootroot00000000000000 genometools-1.5.1/gtdata/modules/gtdoclib/funcdef.lp000066400000000000000000000000621211610345200225140ustar00rootroot00000000000000<%=name%>

<%=comment%>


genometools-1.5.1/gtdata/modules/gtdoclib/funcdef_latex.lp000066400000000000000000000002001211610345200237030ustar00rootroot00000000000000\begin{minipage}{\textwidth} \vspace{3mm} \texttt{<%=name%>}\\[-.4cm] \hangindent3em \hangafter=0 <%=comment%> \end{minipage} genometools-1.5.1/gtdata/modules/gtdoclib/gtscript_header.lp000066400000000000000000000053251211610345200242600ustar00rootroot00000000000000 gtscript documentation

gtscript documentation

This document describes the gtscript API. gtscript is basically Lua (an embeddable scripting language) plus parts of the GenomeTools C libraries exported to Lua. Because the GenomeTools binary gt contains an embedded Lua interpreter, gtscript files can be executed with the gt binary. The parts of the GenomeTools C libraries exported to Lua (the gtscript API) are described here, for a documentation of Lua itself and its APIs, please refer to the Lua reference manual.

See the index for an alphabetical list of all available interfaces.

Notes

  • You have to add require 'gtlua' to your script in order to load the parts of the gtscript API which are implemented in gtscript itself.
  • By default, all functions of the gtscript API are contained in the gt table. That is, you have to prepend all functions calls with ``gt.''. For example, write gt.show() to call the show() function documented below. You can use gt.export() or gt.re() to export the gt table to the global environment, which makes the prepending unnecessary (but clutters your global environment).
  • If a function is documented as ``returns an array'', this means that the function returns a table where only consecutive integer keys from 1 on are used and which can be traversed with the ipairs() function.
genometools-1.5.1/gtdata/modules/gtdoclib/gtscript_header_latex.lp000066400000000000000000000030131211610345200254450ustar00rootroot00000000000000\chapter{gtscript Reference} This chapter describes the \texttt{gtscript} API. \texttt{gtscript} is basically Lua (an embeddable scripting language) plus parts of the \emph{GenomeTools} C libraries exported to Lua. Because the \emph{GenomeTools} binary \texttt{gt} contains an embedded Lua interpreter, \texttt{gtscript} files can be executed with the \texttt{gt} binary. The parts of the \emph{GenomeTools} C libraries exported to Lua (the gtscript API) are described here, for a documentation of Lua itself and its APIs, please refer to the Lua reference manual. See the index for an alphabetical list of all available interfaces. \section*{Notes} \begin{itemize} \item You have to add \texttt{require 'gtlua'} to your script in order to load the parts of the \texttt{gtscript} API which are implemented in \texttt{gtscript} itself. \item By default, all functions of the \texttt{gtscript} API are contained in the \texttt{gt} table. That is, you have to prepend all functions calls with ``\texttt{gt}.''. For example, write \texttt{gt.show()} to call the \texttt{show()} function documented below. You can use \texttt{gt.export()} or \texttt{gt.re()} to export the \texttt{gt} table to the global environment, which makes the prepending unnecessary (but clutters your global environment). \item If a function is documented as ``returns an array'', this means that the function returns a table where only consecutive integer keys from 1 on are used and which can be traversed with the \texttt{ipairs()} function. \end{itemize} genometools-1.5.1/gtdata/modules/gtdoclib/index.lp000066400000000000000000000002101211610345200222040ustar00rootroot00000000000000

Index

<%for _, name in ipairs(names) do%> <%= name%>
<%end%> genometools-1.5.1/gtdata/modules/gtdoclib/libgenometools_header.lp000066400000000000000000000024101211610345200254330ustar00rootroot00000000000000 GenomeTools C API

GenomeTools C API

This document describes the GenomeTools C API (that is, all public interfaces which are part of libgenometools).

See the index for an alphabetical list of all available interfaces.

genometools-1.5.1/gtdata/modules/gtdoclib/libgenometools_header_latex.lp000066400000000000000000000000301211610345200266240ustar00rootroot00000000000000\chapter{API Reference} genometools-1.5.1/gtdata/modules/gtdoclib/method.lp000066400000000000000000000002531211610345200223640ustar00rootroot00000000000000 <%=func%>

<%=comment%>


genometools-1.5.1/gtdata/modules/gtdoclib/method_latex.lp000066400000000000000000000002761211610345200235660ustar00rootroot00000000000000\begin{minipage}{\textwidth} \vspace{3mm} \texttt{<%=name%><%if args ~= "" then %>(\textcolor{arggrey}{<%=args%>})<%end%>}\\[-.4cm] \hangindent3em \hangafter=0 <%=comment%> \end{minipage} genometools-1.5.1/gtdata/modules/gtdoclib/module.lp000066400000000000000000000000771211610345200223750ustar00rootroot00000000000000

Module <%=modulename%>

genometools-1.5.1/gtdata/modules/gtdoclib/module_latex.lp000066400000000000000000000000711211610345200235640ustar00rootroot00000000000000\section{Module <%=modulename%>} \label{<%=modulename%>} genometools-1.5.1/gtdata/modules/gtdoclib/modules.lp000066400000000000000000000001711211610345200225530ustar00rootroot00000000000000

Modules

    <%for _, module in ipairs(modules) do%>
  • <%=module%> <%end%>
genometools-1.5.1/gtdata/modules/gtdoclib/modules_latex.lp000066400000000000000000000002611211610345200237500ustar00rootroot00000000000000\section*{Table of Modules} \begin{itemize} <%for _, module in ipairs(modules) do%> \item Module \texttt{<%=module%>}\dotfill page \pageref{<%=module%>} <%end%> \end{itemize} genometools-1.5.1/gtdata/modules/gtdoclib/sole_function.lp000066400000000000000000000000301211610345200237440ustar00rootroot00000000000000

Sole functions

genometools-1.5.1/gtdata/modules/gtdoclib/sole_function_latex.lp000066400000000000000000000000311211610345200251420ustar00rootroot00000000000000\section{Sole functions} genometools-1.5.1/gtdata/modules/gtlua.lua000066400000000000000000000043161211610345200206030ustar00rootroot00000000000000--[[ Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] local modname = ... module(modname, package.seeall) require 'gt' -- all GenomeTools modules which should be loaded local gtmodules = { "fileutils", "gtlua.feature_index", "gtlua.genome_features", "gtlua.genome_node", "gtlua.helper", "gtlua.range" } -- everything that will be exported to the gt table local gtexport = {} local function load_module(mod) assert(mod) local t = require(mod) for k, v in pairs(t) do if k ~= "_M" and k ~= "_NAME" and k~= "_PACKAGE" then assert(not gtexport[k]) -- symbol is undefined gtexport[k] = v -- record symbol for export end end end local function load_modules(modules) assert(modules) -- load all modules for _, mod in ipairs(modules) do load_module(mod) end -- export all symbols for k, v in pairs(gtexport) do assert(not gt[k]) -- symbol is undefined gt[k] = v -- export symbol end end -- Reload module. function reload() -- remove all exported symbols from gt table for k in pairs(gtexport) do gt[k] = nil end -- mark all packages as unloaded for _, mod in ipairs(gtmodules) do package.loaded[mod] = nil end package.loaded[modname] = nil -- reload require(modname) end -- register reload() function in gt table gt.reload = reload load_modules(gtmodules) genometools-1.5.1/gtdata/modules/gtlua/000077500000000000000000000000001211610345200200745ustar00rootroot00000000000000genometools-1.5.1/gtdata/modules/gtlua/feature_index.lua000066400000000000000000000103071211610345200234220ustar00rootroot00000000000000--[[ Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) require "gtlua.genome_features" -- XXX: remove if statement if libannotationsketch is always compiled in if GenomeTools_feature_index then -- Computes the coverage for the sequence ID . The optional -- parameter denotes the maximal distance two features can be apart without -- creating a new Range. Returns an array of Ranges denoting parts the of -- covered by features. function GenomeTools_feature_index:get_coverage(seqid, maxdist) assert(seqid) local maxdist = maxdist or 0 local features = self:get_features_for_seqid(seqid) local starpos, endpos local minstartpos = nil local maxendpos = nil local ranges = {} local coverage = {} -- collect all feature ranges for i, feature in ipairs(features) do ranges[#ranges+1] = feature:get_range() end -- sort feature ranges ranges = gt.ranges_sort(ranges) -- compute and store coverage for i, range in ipairs(ranges) do startpos, endpos = range:get_start(), range:get_end() if i == 1 then minstartpos = startpos maxendpos = endpos else -- assert(startpos >= minstartpos) if (startpos > maxendpos + maxdist) then -- new region started coverage[#coverage+1] = gt.range_new(minstartpos, maxendpos) minstartpos = startpos maxendpos = endpos else -- continue old region maxendpos = (endpos > maxendpos) and endpos or maxendpos end end end -- add last region coverage[#coverage+1] = gt.range_new(minstartpos, maxendpos) return coverage end -- Returns an array of Ranges denoting parts of which are covered by -- at least one marked feature. Internally, get_coverage() is called and the -- is passed along. function GenomeTools_feature_index:get_marked_regions(seqid, maxdist) assert(seqid, "missing seqid argument") local coverage = self:get_coverage(seqid, maxdist) local marked = {} for _,range in ipairs(coverage) do local features = feature_index:get_features_for_range(seqid, range) if gt.features_contain_marked(features) then marked[#marked+1] = range end end return marked end -- Render to PNG file for in with optional . -- If no is given os.tmpname() is called to create one. -- Returns name of written PNG file. function GenomeTools_feature_index:render_to_png(seqid, range, png_file, width) assert(seqid and range) png_file = png_file or os.tmpname() if not width then width = 1600 end local diagram = gt.diagram_new(self, seqid, range) local render = gt.render_new() render:to_png(diagram, png_file, width) return png_file end -- Show all sequence IDs. function GenomeTools_feature_index:show_seqids() for _,seqid in ipairs(feature_index:get_seqids()) do print(seqid) end end -- Returns all features from . function GenomeTools_feature_index:get_all_features() local seqids = self:get_seqids() local all_features = {} for _, seqid in ipairs(seqids) do local seqid_features = self:get_features_for_seqid(seqid) for _, feature in ipairs(seqid_features) do all_features[#all_features + 1] = feature end end return all_features end end genometools-1.5.1/gtdata/modules/gtlua/genome_features.lua000066400000000000000000000077761211610345200237700ustar00rootroot00000000000000--[[ Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) -- Returns true if the given array of contains a marked feature, -- false otherwise. function features_contain_marked(features) assert(features) for _, feature in ipairs(features) do if feature:contains_marked() then return true end end return false end -- Print the given array of to stdout. function features_show(features) assert(features) local gff3_visitor = gt.gff3_visitor_new() for _, features in ipairs(features) do features:show(gff3_visitor) end end -- Return all marked (an array) as an array or nil if -- contains no marked features. function features_get_marked(features) assert(features) local marked_features = nil if features_contain_marked(features) then marked_features = {} for _, feature in ipairs(features) do if feature:contains_marked() then local gni = gt.genome_node_iterator_new(feature) local node = gni:next() while node do if node:is_marked() then marked_features[#marked_features + 1] = node end node = gni:next() end end end end return marked_features end -- Print all marked (an array) to stdout. function features_show_marked(features) assert(features) if features_contain_marked(features) then for _, feature in ipairs(features) do feature:show_marked() end end end local function create_gene_from_mRNA(mRNA) assert(mRNA) assert(mRNA:get_type() == "mRNA") local gene = gt.genome_feature_new(mRNA:get_seqid(), "gene", mRNA:get_range(), mRNA:get_strand()) gene:set_source(mRNA:get_source()) local gni = gt.genome_node_iterator_new_direct(mRNA) local old_child = gni:next() while (old_child) do local new_child = gt.genome_feature_new(old_child:get_seqid(), old_child:get_type(), old_child:get_range(), old_child:get_strand()) new_child:set_source(old_child:get_source()) gene:is_part_of_genome_node(new_child) old_child = gni:next() end return gene end -- Return an array of genome features which contains a separate gene feature for -- each mRNA in . function features_mRNAs2genes(in_features) assert(in_features) local out_features = {} for _, in_feature in ipairs(in_features) do if in_feature:get_type() == "gene" then local gni = gt.genome_node_iterator_new_direct(in_feature) local child = gni:next() while (child) do if child:get_type() == "mRNA" then out_features[#out_features + 1] = create_gene_from_mRNA(child) end child = gni:next() end end end return out_features end -- Return an array with the sequences of the given features. function features_extract_sequences(features, type, join, region_mapping) local sequences = {} for _, feature in ipairs(features) do local sequence = feature:extract_sequence(type, join, region_mapping) if type then sequences[#sequences + 1] = sequence end end return sequences end genometools-1.5.1/gtdata/modules/gtlua/genome_node.lua000066400000000000000000000026551211610345200230660ustar00rootroot00000000000000--[[ Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) -- Show genome node on stdout (using the optional ). function GenomeTools_genome_node:show(gff3_visitor) local gff3_visitor = gff3_visitor or gt.gff3_visitor_new() self:accept(gff3_visitor) end -- Show marked parts of genome node on stdout. function GenomeTools_genome_node:show_marked() if self:contains_marked() then local gni = gt.genome_node_iterator_new(self) local gn = gni:next() while gn do if gn:is_marked() then gn:output_leading() print("") end gn = gni:next() end end end genometools-1.5.1/gtdata/modules/gtlua/helper.lua000066400000000000000000000035741211610345200220670ustar00rootroot00000000000000--[[ Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) -- Export the content of table to the global environment. function export() for k,v in pairs(gt) do _G[k] = v end end -- Call external 'display' program for file . function display(filename) assert(filename and gt.file_exists(filename)) if os.execute("display " .. filename) ~= 0 then io.stdout:write("\nexit (type 'y' to confirm)? ") if io.stdin:read() == "y" then print("bye") os.exit(0) end end end -- Show all keys and values of table . function show_table(tbl) assert(tbl) for k,v in pairs(tbl) do print(string.format("k=%s, v=%s", k, type(v))) end end -- Show content of the table. function show(all) local a = {} for k in pairs(gt) do a[#a+1] = k end table.sort(a) for i,v in pairs(a) do if all then print(string.format("%s (%s)", v, type(gt[v]))) else print(v) end end end -- Reload the module and export its content to the global environment. function re() gt.reload() gt.export() end genometools-1.5.1/gtdata/modules/gtlua/range.lua000066400000000000000000000020021211610345200216650ustar00rootroot00000000000000--[[ Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) -- Show range on stdout. function GenomeTools_range:show() print(string.format("%u, %u", self:get_start(), self:get_end())) end genometools-1.5.1/gtdata/modules/gtmodulehelper.lua000066400000000000000000000021651211610345200225070ustar00rootroot00000000000000--[[ Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) function load_modules(modules) assert(modules) for _, mod in ipairs(modules) do local t = require(mod) for k, v in pairs(t) do if k ~= "_M" and k ~= "_NAME" and k~= "_PACKAGE" then _G[k] = v end end end end genometools-1.5.1/gtdata/modules/stringext.lua000066400000000000000000000020651211610345200215150ustar00rootroot00000000000000--[[ Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] require 'string' -- Removes all leading and trailing spaces from and returns the result. function string.strip(str) local res = string.gsub(str, "^%s+", "") res = string.gsub(res, "%s+$", "") return res end genometools-1.5.1/gtdata/modules/warning.lua000066400000000000000000000017611211610345200211350ustar00rootroot00000000000000--[[ Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] module(..., package.seeall) function warning(warnmsg, ...) assert(warnmsg) io.stderr:write(string.format("warning: " .. warnmsg .. "\n", ...)) end genometools-1.5.1/gtdata/obo_files/000077500000000000000000000000001211610345200172515ustar00rootroot00000000000000genometools-1.5.1/gtdata/obo_files/so-xp.obo000066400000000000000000026746721211610345200210500ustar00rootroot00000000000000format-version: 1.2 date: 14:11:2012 16:46 saved-by: kareneilbeck auto-generated-by: OBO-Edit 2.1.1-beta7 subsetdef: biosapiens "biosapiens protein feature ontology" subsetdef: DBVAR "database of genomic structural variation" subsetdef: SOFA "SO feature annotation" synonymtypedef: aa1 "amino acid 1 letter code" synonymtypedef: aa3 "amino acid 3 letter code" synonymtypedef: AAMOD "amino acid modification" synonymtypedef: BS "biosapiens" synonymtypedef: dbsnp "dbsnp variant terms" synonymtypedef: dbvar "DBVAR" synonymtypedef: ebi_variants "ensembl variant terms" synonymtypedef: RNAMOD "RNA modification" EXACT default-namespace: sequence remark: autogenerated-by: DAG-Edit version 1.417\nsaved-by: eilbeck\ndate: Tue May 11 15:18:44 PDT 2004\nversion: $Revision: 1.45 $ ontology: so-xp.obo [Term] id: SO:0000000 name: Sequence_Ontology subset: SOFA is_obsolete: true [Term] id: SO:0000001 name: region def: "A sequence_feature with an extent greater than zero. A nucleotide region is composed of bases and a polypeptide region is composed of amino acids." [SO:ke] subset: SOFA synonym: "sequence" EXACT [] is_a: SO:0000110 ! sequence_feature disjoint_from: SO:0000699 ! junction [Term] id: SO:0000002 name: sequence_secondary_structure def: "A folded sequence." [SO:ke] synonym: "sequence secondary structure" EXACT [] is_a: SO:0001411 ! biological_region [Term] id: SO:0000003 name: G_quartet def: "G-quartets are unusual nucleic acid structures consisting of a planar arrangement where each guanine is hydrogen bonded by hoogsteen pairing to another guanine in the quartet." [http://www.ncbi.nlm.nih.gov/pubmed/7919797?dopt=Abstract] synonym: "G quartet" EXACT [] synonym: "G tetrad" EXACT [] synonym: "G-quadruplex" EXACT [] synonym: "G-quartet" EXACT [] synonym: "G-tetrad" EXACT [] synonym: "G_quadruplex" EXACT [] synonym: "guanine tetrad" EXACT [] xref: http://en.wikipedia.org/wiki/G-quadruplex "wiki" is_a: SO:0000002 ! sequence_secondary_structure [Term] id: SO:0000004 name: interior_coding_exon subset: SOFA synonym: "interior coding exon" EXACT [] is_a: SO:0000195 ! coding_exon [Term] id: SO:0000005 name: satellite_DNA def: "The many tandem repeats (identical or related) of a short basic repeating unit; many have a base composition or other property different from the genome average that allows them to be separated from the bulk (main band) genomic DNA." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "satellite DNA" EXACT [] xref: http://en.wikipedia.org/wiki/Satellite_DNA "wiki" is_a: SO:0000705 ! tandem_repeat [Term] id: SO:0000006 name: PCR_product def: "A region amplified by a PCR reaction." [SO:ke] comment: This term is mapped to MGED. This term is now located in OBI, with the following ID OBI_0000406. subset: SOFA synonym: "amplicon" RELATED [] synonym: "PCR product" EXACT [] xref: http://en.wikipedia.org/wiki/RAPD "wiki" is_a: SO:0000695 ! reagent [Term] id: SO:0000007 name: read_pair def: "One of a pair of sequencing reads in which the two members of the pair are related by originating at either end of a clone insert." [SO:ls] subset: SOFA synonym: "mate pair" EXACT [] synonym: "read-pair" EXACT [] is_a: SO:0000150 ! read relationship: part_of SO:0000149 ! contig relationship: part_of SO:0001790 ! paired_end_fragment [Term] id: SO:0000008 name: gene_sensu_your_favorite_organism is_obsolete: true [Term] id: SO:0000009 name: gene_class is_obsolete: true [Term] id: SO:0000010 name: protein_coding synonym: "protein-coding" EXACT [] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0000011 name: non_protein_coding synonym: "non protein-coding" EXACT [] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0000012 name: scRNA_primary_transcript def: "The primary transcript of any one of several small cytoplasmic RNA molecules present in the cytoplasm and sometimes nucleus of a eukaryote." [http://www.ebi.ac.uk/embl/WebFeat/align/scRNA_s.html] synonym: "scRNA primary transcript" EXACT [] synonym: "scRNA transcript" EXACT [] synonym: "small cytoplasmic RNA" RELATED [] synonym: "small cytoplasmic RNA transcript" EXACT [] synonym: "small_cytoplasmic_RNA" RELATED [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000013 name: scRNA def: "A small non coding RNA sequence, present in the cytoplasm." [SO:ke] subset: SOFA synonym: "small cytoplasmic RNA" EXACT [] is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000012 ! scRNA_primary_transcript [Term] id: SO:0000014 name: INR_motif def: "A sequence element characteristic of some RNA polymerase II promoters required for the correct positioning of the polymerase for the start of transcription. Overlaps the TSS. The mammalian consensus sequence is YYAN(T|A)YY; the Drosophila consensus sequence is TCA(G|T)t(T|C). In each the A is at position +1 with respect to the TSS. Functionally similar to the TATA box element." [PMID:12651739, PMID:16858867] comment: Binds TAF1, TAF2. synonym: "DMp2" RELATED [] synonym: "initiator" EXACT [] synonym: "initiator motif" EXACT [] synonym: "INR motif" EXACT [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0001669 ! RNApol_II_core_promoter [Term] id: SO:0000015 name: DPE_motif def: "A sequence element characteristic of some RNA polymerase II promoters; Positioned from +28 to +32 with respect to the TSS (+1). Experimental results suggest that the DPE acts in conjunction with the INR_motif to provide a binding site for TFIID in the absence of a TATA box to mediate transcription of TATA-less promoters. Consensus sequence (A|G)G(A|T)(C|T)(G|A|C)." [PMID:12651739:12537576, PMID:16858867] comment: Binds TAF6, TAF9. synonym: "CRWMGCGWKCGCTTS" NARROW [] synonym: "downstream core promoter element" EXACT [] synonym: "DPE motif" EXACT [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0001669 ! RNApol_II_core_promoter [Term] id: SO:0000016 name: BREu_motif def: "A sequence element characteristic of some RNA polymerase II promoters, located immediately upstream of some TATA box elements at -37 to -32 with respect to the TSS (+1). Consensus sequence is (G|C)(G|C)(G|A)CGCC. Binds TFIIB." [PMID:12651739, PMID:16858867] comment: Binds TFIIB. synonym: "B-recognition element" EXACT [] synonym: "BRE motif" EXACT [] synonym: "BREu" RELATED [] synonym: "BREu motif" EXACT [] synonym: "TFIIB recognition element" RELATED [] synonym: "transcription factor B-recognition element" EXACT [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0001669 ! RNApol_II_core_promoter [Term] id: SO:0000017 name: PSE_motif def: "A sequence element characteristic of the promoters of snRNA genes transcribed by RNA polymerase II or by RNA polymerase III. Located between -45 and -60 relative to the TSS. The human PSE_motif consensus sequence is TCACCNTNA(C|G)TNAAAAG(T|G)." [PMID:12651739] synonym: "proximal sequence element" EXACT [] synonym: "PSE motif" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000167 ! promoter [Term] id: SO:0000018 name: linkage_group def: "A group of loci that can be grouped in a linear order representing the different degrees of linkage among the genes concerned." [ISBN:038752046] synonym: "linkage group" EXACT [] xref: http://en.wikipedia.org/wiki/Linkage_group "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000020 name: RNA_internal_loop def: "A region of double stranded RNA where the bases do not conform to WC base pairing. The loop is closed on both sides by canonical base pairing. If the interruption to base pairing occurs on one strand only, it is known as a bulge." [SO:ke] synonym: "RNA internal loop" EXACT [] is_a: SO:0000715 ! RNA_motif [Term] id: SO:0000021 name: asymmetric_RNA_internal_loop def: "An internal RNA loop where one of the strands includes more bases than the corresponding region on the other strand." [SO:ke] synonym: "asymmetric RNA internal loop" EXACT [] is_a: SO:0000020 ! RNA_internal_loop [Term] id: SO:0000022 name: A_minor_RNA_motif def: "A region forming a motif, composed of adenines, where the minor groove edges are inserted into the minor groove of another helix." [SO:ke] synonym: "A minor RNA motif" EXACT [] is_a: SO:0000715 ! RNA_motif [Term] id: SO:0000023 name: K_turn_RNA_motif def: "The kink turn (K-turn) is an RNA structural motif that creates a sharp (~120 degree) bend between two continuous helices." [SO:ke] synonym: "K turn RNA motif" EXACT [] synonym: "K-turn" EXACT [] synonym: "kink turn" EXACT [] synonym: "kink-turn motif" EXACT [] xref: http://en.wikipedia.org/wiki/K-turn "wiki" is_a: SO:0000021 ! asymmetric_RNA_internal_loop [Term] id: SO:0000024 name: sarcin_like_RNA_motif def: "A loop in ribosomal RNA containing the sites of attack for ricin and sarcin." [http://www.ncbi.nlm.nih.gov/pubmed/7897662] synonym: "sarcin like RNA motif" EXACT [] synonym: "sarcin/ricin domain" EXACT [] synonym: "sarcin/ricin loop" EXACT [] synonym: "sarcin/ricin RNA domain" EXACT [] is_a: SO:0000021 ! asymmetric_RNA_internal_loop [Term] id: SO:0000025 name: symmetric_RNA_internal_loop def: "An internal RNA loop where the extent of the loop on both stands is the same size." [SO:ke] synonym: "A-minor RNA motif" EXACT [] is_a: SO:0000020 ! RNA_internal_loop [Term] id: SO:0000026 name: RNA_junction_loop synonym: "RNA junction loop" EXACT [] is_a: SO:0000715 ! RNA_motif [Term] id: SO:0000027 name: RNA_hook_turn synonym: "hook turn" RELATED [] synonym: "hook-turn motif" EXACT [] synonym: "RNA hook turn" EXACT [] is_a: SO:0000026 ! RNA_junction_loop [Term] id: SO:0000028 name: base_pair synonym: "base pair" EXACT [] xref: http://en.wikipedia.org/wiki/Base_pair "wiki" is_a: SO:0000002 ! sequence_secondary_structure [Term] id: SO:0000029 name: WC_base_pair def: "The canonical base pair, where two bases interact via WC edges, with glycosidic bonds oriented cis relative to the axis of orientation." [PMID:12177293] synonym: "canonical base pair" EXACT [] synonym: "Watson Crick base pair" EXACT [] synonym: "Watson-Crick base pair" RELATED [] synonym: "Watson-Crick pair" EXACT [] synonym: "WC base pair" EXACT [] is_a: SO:0000028 ! base_pair [Term] id: SO:0000030 name: sugar_edge_base_pair def: "A type of non-canonical base-pairing." [PMID:12177293] synonym: "sugar edge base pair" EXACT [] is_a: SO:0000028 ! base_pair [Term] id: SO:0000031 name: aptamer def: "DNA or RNA molecules that have been selected from random pools based on their ability to bind other molecules." [http://aptamer.icmb.utexas.edu] xref: http://en.wikipedia.org/wiki/Aptamer "wiki" is_a: SO:0000696 ! oligo [Term] id: SO:0000032 name: DNA_aptamer def: "DNA molecules that have been selected from random pools based on their ability to bind other molecules." [http:aptamer.icmb.utexas.edu] synonym: "DNA aptamer" EXACT [] is_a: SO:0000031 ! aptamer [Term] id: SO:0000033 name: RNA_aptamer def: "RNA molecules that have been selected from random pools based on their ability to bind other molecules." [http://aptamer.icmb.utexas.edu] synonym: "RNA aptamer" EXACT [] is_a: SO:0000031 ! aptamer [Term] id: SO:0000034 name: morpholino_oligo def: "Morpholino oligos are synthesized from four different Morpholino subunits, each of which contains one of the four genetic bases (A, C, G, T) linked to a 6-membered morpholine ring. Eighteen to 25 subunits of these four subunit types are joined in a specific order by non-ionic phosphorodiamidate intersubunit linkages to give a Morpholino." [http://www.gene-tools.com/] synonym: "morphant" BROAD [] synonym: "morpholino" EXACT [] synonym: "morpholino oligo" EXACT [] is_a: SO:0001247 ! synthetic_oligo intersection_of: SO:0001247 ! synthetic_oligo intersection_of: has_quality SO:0001183 ! morpholino_backbone relationship: has_quality SO:0001183 ! morpholino_backbone [Term] id: SO:0000035 name: riboswitch def: "A riboswitch is a part of an mRNA that can act as a direct sensor of small molecules to control their own expression. A riboswitch is a cis element in the 5' end of an mRNA, that acts as a direct sensor of metabolites." [PMID:2820954] synonym: "riboswitch RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Riboswitch "wiki" is_a: SO:0000836 ! mRNA_region relationship: part_of SO:0000234 ! mRNA [Term] id: SO:0000036 name: matrix_attachment_site def: "A DNA region that is required for the binding of chromatin to the nuclear matrix." [SO:ma] synonym: "MAR" EXACT [] synonym: "matrix association region" EXACT [] synonym: "matrix attachment region" EXACT [] synonym: "matrix attachment site" EXACT [] synonym: "nuclear matrix association region" EXACT [] synonym: "nuclear matrix attachment site" EXACT [] synonym: "S/MAR" EXACT [] synonym: "S/MAR element" RELATED [] synonym: "scaffold attachment site" EXACT [] synonym: "scaffold matrix attachment region" EXACT [] synonym: "SMAR" EXACT [] xref: http://en.wikipedia.org/wiki/Matrix_attachment_site "wiki" is_a: SO:0000626 ! chromosomal_regulatory_element [Term] id: SO:0000037 name: locus_control_region def: "A DNA region that includes DNAse hypersensitive sites located 5' to a gene that confers the high-level, position-independent, and copy number-dependent expression to that gene." [SO:ma] synonym: "LCR" EXACT [] synonym: "locus control element" RELATED [] synonym: "locus control region" EXACT [] xref: http://en.wikipedia.org/wiki/Locus_control_region "wiki" is_a: SO:0000727 ! CRM [Term] id: SO:0000038 name: match_set def: "A collection of match parts." [SO:ke] subset: SOFA is_obsolete: true [Term] id: SO:0000039 name: match_part def: "A part of a match, for example an hsp from blast is a match_part." [SO:ke] subset: SOFA synonym: "match part" EXACT [] is_a: SO:0001410 ! experimental_feature relationship: part_of SO:0000343 ! match [Term] id: SO:0000040 name: genomic_clone def: "A clone of a DNA region of a genome." [SO:ma] synonym: "genomic clone" EXACT [] is_a: SO:0000151 ! clone intersection_of: SO:0000151 ! clone intersection_of: has_quality SO:0000991 ! genomic_DNA relationship: has_quality SO:0000991 ! genomic_DNA [Term] id: SO:0000041 name: sequence_operation def: "An operation that can be applied to a sequence, that results in a change." [SO:ke] synonym: "sequence operation" EXACT [] is_obsolete: true [Term] id: SO:0000042 name: pseudogene_attribute def: "An attribute of a pseudogene (SO:0000336)." [SO:ma] synonym: "pseudogene attribute" EXACT [] is_obsolete: true [Term] id: SO:0000043 name: processed_pseudogene def: "A pseudogene where by an mRNA was retrotransposed. The mRNA sequence is transcribed back into the genome, lacking introns and promoters, but often including a polyA tail." [SO:xp] comment: Please not the synonym R psi M uses the spelled out form of the greek letter. synonym: "processed pseudogene" EXACT [] synonym: "pseudogene by reverse transcription" RELATED [] synonym: "R psi G" RELATED [] synonym: "retropseudogene" EXACT [] is_a: SO:0000336 ! pseudogene [Term] id: SO:0000044 name: pseudogene_by_unequal_crossing_over def: "A pseudogene caused by unequal crossing over at recombination." [SO:ke] synonym: "pseudogene by unequal crossing over" EXACT [] is_a: SO:0001760 ! non_processed_pseudogene [Term] id: SO:0000045 name: delete def: "To remove a subsection of sequence." [SO:ke] is_obsolete: true [Term] id: SO:0000046 name: insert def: "To insert a subsection of sequence." [SO:ke] is_obsolete: true [Term] id: SO:0000047 name: invert def: "To invert a subsection of sequence." [SO:ke] is_obsolete: true [Term] id: SO:0000048 name: substitute def: "To substitute a subsection of sequence for another." [SO:ke] is_obsolete: true [Term] id: SO:0000049 name: translocate def: "To translocate a subsection of sequence." [SO:ke] is_obsolete: true [Term] id: SO:0000050 name: gene_part def: "A part of a gene, that has no other route in the ontology back to region. This concept is necessary for logical inference as these parts must have the properties of region. It also allows us to associate all the parts of genes with a gene." [SO:ke] subset: SOFA is_obsolete: true [Term] id: SO:0000051 name: probe def: "A DNA sequence used experimentally to detect the presence or absence of a complementary nucleic acid." [SO:ma] xref: http://en.wikipedia.org/wiki/Hybridization_probe "wiki" is_a: SO:0000696 ! oligo [Term] id: SO:0000052 name: assortment_derived_deficiency synonym: "assortment-derived_deficiency" RELATED [] is_obsolete: true [Term] id: SO:0000053 name: sequence_variant_affecting_regulatory_region def: "A sequence_variant_effect which changes the regulatory region of a gene." [SO:ke] comment: OBSOLETE: This term was deleted as it conflated more than one term. The alteration is separate from the effect. synonym: "mutation affecting regulatory region" RELATED [] synonym: "sequence variant affecting regulatory region" EXACT [] is_obsolete: true replaced_by: SO:0001556 [Term] id: SO:0000054 name: aneuploid def: "A kind of chromosome variation where the chromosome complement is not an exact multiple of the haploid number." [SO:ke] xref: http://en.wikipedia.org/wiki/Aneuploid "wiki" is_a: SO:1000182 ! chromosome_number_variation [Term] id: SO:0000055 name: hyperploid def: "A kind of chromosome variation where the chromosome complement is not an exact multiple of the haploid number as extra chromosomes are present." [SO:ke] xref: http://en.wikipedia.org/wiki/Hyperploid "wiki" is_a: SO:0000054 ! aneuploid [Term] id: SO:0000056 name: hypoploid def: "A kind of chromosome variation where the chromosome complement is not an exact multiple of the haploid number as some chromosomes are missing." [SO:ke] xref: http://en.wikipedia.org/wiki/Hypoploid "wiki" is_a: SO:0000054 ! aneuploid [Term] id: SO:0000057 name: operator def: "A regulatory element of an operon to which activators or repressors bind thereby effecting translation of genes in that operon." [SO:ma] subset: SOFA synonym: "operator segment" EXACT [] xref: http://en.wikipedia.org/wiki/Operator_(biology)#Operator "wiki" is_a: SO:0000752 ! gene_group_regulatory_region [Term] id: SO:0000058 name: assortment_derived_aneuploid synonym: "assortment-derived_aneuploid" RELATED [] is_obsolete: true [Term] id: SO:0000059 name: nuclease_binding_site def: "A binding site that, of a nucleotide molecule, that interacts selectively and non-covalently with polypeptide residues of a nuclease." [SO:cb] subset: SOFA synonym: "nuclease binding site" EXACT [] is_a: SO:0001654 ! nucleotide_to_protein_binding_site [Term] id: SO:0000060 name: compound_chromosome_arm comment: FLAG - this term is should probably be a part of rather than an is_a. synonym: "compound chromosome arm" EXACT [] is_a: SO:1000042 ! compound_chromosome [Term] id: SO:0000061 name: restriction_enzyme_binding_site def: "A binding site that, in the nucleotide molecule, interacts selectively and non-covalently with polypeptide residues of a restriction enzyme." [SO:cb] comment: A region of a molecule that binds to a restriction enzyme. synonym: "restriction endonuclease binding site" EXACT [] synonym: "restriction enzyme binding site" EXACT [] is_a: SO:0000059 ! nuclease_binding_site [Term] id: SO:0000062 name: deficient_intrachromosomal_transposition def: "An intrachromosomal transposition whereby a translocation in which one of the four broken ends loses a segment before re-joining." [FB:reference_manual] synonym: "deficient intrachromosomal transposition" EXACT [] is_a: SO:1000029 ! chromosomal_deletion is_a: SO:1000041 ! intrachromosomal_transposition intersection_of: SO:1000041 ! intrachromosomal_transposition intersection_of: has_part SO:0000159 ! deletion relationship: has_part SO:0000159 ! deletion [Term] id: SO:0000063 name: deficient_interchromosomal_transposition def: "An interchromosomal transposition whereby a translocation in which one of the four broken ends loses a segment before re-joining." [SO:ke] synonym: "deficient interchromosomal transposition" EXACT [] is_a: SO:1000155 ! interchromosomal_transposition [Term] id: SO:0000064 name: gene_by_transcript_attribute comment: This classes of attributes was added by MA to allow the broad description of genes based on qualities of the transcript(s). A product of SO meeting 2004. is_obsolete: true [Term] id: SO:0000065 name: free_chromosome_arm def: "A chromosome structure variation whereby an arm exists as an individual chromosome element." [SO:ke] synonym: "free chromosome arm" EXACT [] is_a: SO:1000183 ! chromosome_structure_variation [Term] id: SO:0000066 name: gene_by_polyadenylation_attribute is_obsolete: true [Term] id: SO:0000067 name: gene_to_gene_feature synonym: "gene to gene feature" EXACT [] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0000068 name: overlapping def: "An attribute describing a gene that has a sequence that overlaps the sequence of another gene." [SO:ke] is_a: SO:0000067 ! gene_to_gene_feature [Term] id: SO:0000069 name: inside_intron def: "An attribute to describe a gene when it is located within the intron of another gene." [SO:ke] synonym: "inside intron" EXACT [] is_a: SO:0000068 ! overlapping [Term] id: SO:0000070 name: inside_intron_antiparallel def: "An attribute to describe a gene when it is located within the intron of another gene and on the opposite strand." [SO:ke] synonym: "inside intron antiparallel" EXACT [] is_a: SO:0000069 ! inside_intron [Term] id: SO:0000071 name: inside_intron_parallel def: "An attribute to describe a gene when it is located within the intron of another gene and on the same strand." [SO:ke] synonym: "inside intron parallel" EXACT [] is_a: SO:0000069 ! inside_intron [Term] id: SO:0000072 name: end_overlapping_gene is_obsolete: true [Term] id: SO:0000073 name: five_prime_three_prime_overlap def: "An attribute to describe a gene when the five prime region overlaps with another gene's 3' region." [SO:ke] synonym: "five prime-three prime overlap" EXACT [] is_a: SO:0000068 ! overlapping [Term] id: SO:0000074 name: five_prime_five_prime_overlap def: "An attribute to describe a gene when the five prime region overlaps with another gene's five prime region." [SO:ke] synonym: "five prime-five prime overlap" EXACT [] is_a: SO:0000068 ! overlapping [Term] id: SO:0000075 name: three_prime_three_prime_overlap def: "An attribute to describe a gene when the 3' region overlaps with another gene's 3' region." [SO:ke] synonym: "three prime-three prime overlap" EXACT [] is_a: SO:0000068 ! overlapping [Term] id: SO:0000076 name: three_prime_five_prime_overlap def: "An attribute to describe a gene when the 3' region overlaps with another gene's 5' region." [SO:ke] synonym: "5' 3' overlap" EXACT [] synonym: "three prime five prime overlap" EXACT [] is_a: SO:0000068 ! overlapping [Term] id: SO:0000077 name: antisense def: "A region sequence that is complementary to a sequence of messenger RNA." [SO:ke] xref: http://en.wikipedia.org/wiki/Antisense "wiki" is_a: SO:0000068 ! overlapping [Term] id: SO:0000078 name: polycistronic_transcript def: "A transcript that is polycistronic." [SO:xp] synonym: "polycistronic transcript" EXACT [] is_a: SO:0000673 ! transcript intersection_of: SO:0000673 ! transcript intersection_of: has_quality SO:0000880 ! polycistronic relationship: has_quality SO:0000880 ! polycistronic [Term] id: SO:0000079 name: dicistronic_transcript def: "A transcript that is dicistronic." [SO:ke] synonym: "dicistronic transcript" EXACT [] is_a: SO:0000078 ! polycistronic_transcript intersection_of: SO:0000673 ! transcript intersection_of: has_quality SO:0000879 ! dicistronic relationship: has_quality SO:0000879 ! dicistronic [Term] id: SO:0000080 name: operon_member synonym: "operon member" EXACT [] is_a: SO:0000081 ! gene_array_member [Term] id: SO:0000081 name: gene_array_member synonym: "gene array member" EXACT [] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0000082 name: processed_transcript_attribute is_obsolete: true [Term] id: SO:0000083 name: macronuclear_sequence synonym: "macronuclear sequence" EXACT [] is_a: SO:0000736 ! organelle_sequence [Term] id: SO:0000084 name: micronuclear_sequence synonym: "micronuclear sequence" EXACT [] is_a: SO:0000736 ! organelle_sequence [Term] id: SO:0000085 name: gene_by_genome_location is_obsolete: true [Term] id: SO:0000086 name: gene_by_organelle_of_genome is_obsolete: true [Term] id: SO:0000087 name: nuclear_gene def: "A gene from nuclear sequence." [SO:xp] synonym: "nuclear gene" EXACT [] xref: http://en.wikipedia.org/wiki/Nuclear_gene "wiki" is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_origin SO:0000738 ! nuclear_sequence relationship: has_origin SO:0000738 ! nuclear_sequence [Term] id: SO:0000088 name: mt_gene def: "A gene located in mitochondrial sequence." [SO:xp] synonym: "mitochondrial gene" EXACT [] synonym: "mt gene" EXACT [] xref: http://en.wikipedia.org/wiki/Mitochondrial_gene "wiki" is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_origin SO:0000737 ! mitochondrial_sequence relationship: has_origin SO:0000737 ! mitochondrial_sequence [Term] id: SO:0000089 name: kinetoplast_gene def: "A gene located in kinetoplast sequence." [SO:xp] synonym: "kinetoplast gene" EXACT [] is_a: SO:0000088 ! mt_gene intersection_of: SO:0000088 ! mt_gene intersection_of: has_origin SO:0000741 ! kinetoplast relationship: has_origin SO:0000741 ! kinetoplast [Term] id: SO:0000090 name: plastid_gene def: "A gene from plastid sequence." [SO:xp] synonym: "plastid gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_origin SO:0000740 ! plastid_sequence relationship: has_origin SO:0000740 ! plastid_sequence [Term] id: SO:0000091 name: apicoplast_gene def: "A gene from apicoplast sequence." [SO:xp] synonym: "apicoplast gene" EXACT [] is_a: SO:0000090 ! plastid_gene intersection_of: SO:0000090 ! plastid_gene intersection_of: has_origin SO:0000743 ! apicoplast_sequence relationship: has_origin SO:0000743 ! apicoplast_sequence [Term] id: SO:0000092 name: ct_gene def: "A gene from chloroplast sequence." [SO:xp] synonym: "chloroplast gene" EXACT [] synonym: "ct gene" EXACT [] is_a: SO:0000090 ! plastid_gene intersection_of: SO:0000090 ! plastid_gene intersection_of: has_origin SO:0000745 ! chloroplast_sequence relationship: has_origin SO:0000745 ! chloroplast_sequence [Term] id: SO:0000093 name: chromoplast_gene def: "A gene from chromoplast_sequence." [SO:xp] synonym: "chromoplast gene" EXACT [] is_a: SO:0000090 ! plastid_gene intersection_of: SO:0000090 ! plastid_gene intersection_of: has_origin SO:0000744 ! chromoplast_sequence relationship: has_origin SO:0000744 ! chromoplast_sequence [Term] id: SO:0000094 name: cyanelle_gene def: "A gene from cyanelle sequence." [SO:xp] synonym: "cyanelle gene" EXACT [] is_a: SO:0000090 ! plastid_gene intersection_of: SO:0000090 ! plastid_gene intersection_of: has_origin SO:0000746 ! cyanelle_sequence relationship: has_origin SO:0000746 ! cyanelle_sequence [Term] id: SO:0000095 name: leucoplast_gene def: "A plastid gene from leucoplast sequence." [SO:xp] synonym: "leucoplast gene" EXACT [] is_a: SO:0000090 ! plastid_gene intersection_of: SO:0000090 ! plastid_gene intersection_of: has_origin SO:0000747 ! leucoplast_sequence relationship: has_origin SO:0000747 ! leucoplast_sequence [Term] id: SO:0000096 name: proplastid_gene def: "A gene from proplastid sequence." [SO:ke] synonym: "proplastid gene" EXACT [] is_a: SO:0000090 ! plastid_gene intersection_of: SO:0000090 ! plastid_gene intersection_of: has_origin SO:0000748 ! proplastid_sequence relationship: has_origin SO:0000748 ! proplastid_sequence [Term] id: SO:0000097 name: nucleomorph_gene def: "A gene from nucleomorph sequence." [SO:xp] synonym: "nucleomorph gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_origin SO:0000739 ! nucleomorphic_sequence relationship: has_origin SO:0000739 ! nucleomorphic_sequence [Term] id: SO:0000098 name: plasmid_gene def: "A gene from plasmid sequence." [SO:xp] synonym: "plasmid gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_origin SO:0000749 ! plasmid_location relationship: has_origin SO:0000749 ! plasmid_location [Term] id: SO:0000099 name: proviral_gene def: "A gene from proviral sequence." [SO:xp] synonym: "proviral gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_origin SO:0000751 ! proviral_location relationship: has_origin SO:0000751 ! proviral_location [Term] id: SO:0000100 name: endogenous_retroviral_gene def: "A proviral gene with origin endogenous retrovirus." [SO:xp] synonym: "endogenous retroviral gene" EXACT [] is_a: SO:0000099 ! proviral_gene intersection_of: SO:0000099 ! proviral_gene intersection_of: has_origin SO:0000903 ! endogenous_retroviral_sequence relationship: has_origin SO:0000903 ! endogenous_retroviral_sequence [Term] id: SO:0000101 name: transposable_element def: "A transposon or insertion sequence. An element that can insert in a variety of DNA sequences." [http://www.sci.sdsu.edu/~smaloy/Glossary/T.html] subset: SOFA synonym: "transposable element" EXACT [] synonym: "transposon" EXACT [] xref: http://en.wikipedia.org/wiki/Transposable_element "wiki" is_a: SO:0001039 ! integrated_mobile_genetic_element [Term] id: SO:0000102 name: expressed_sequence_match def: "A match to an EST or cDNA sequence." [SO:ke] subset: SOFA synonym: "expressed sequence match" EXACT [] is_a: SO:0000347 ! nucleotide_match [Term] id: SO:0000103 name: clone_insert_end def: "The end of the clone insert." [SO:ke] subset: SOFA synonym: "clone insert end" EXACT [] is_a: SO:0000699 ! junction relationship: part_of SO:0000753 ! clone_insert [Term] id: SO:0000104 name: polypeptide alt_id: SO:0000358 def: "A sequence of amino acids linked by peptide bonds which may lack appreciable tertiary structure and may not be liable to irreversible denaturation." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. The term 'protein' was merged with 'polypeptide'. Although 'protein' was a sequence_attribute and therefore meant to describe the quality rather than an actual feature, it was being used erroneously. It is replaced by 'peptidyl' as the polymer attribute. subset: SOFA synonym: "protein" EXACT [] xref: http://en.wikipedia.org/wiki/Polypeptide "wiki" is_a: SO:0001411 ! biological_region relationship: derives_from SO:0000316 ! CDS [Term] id: SO:0000105 name: chromosome_arm def: "A region of the chromosome between the centromere and the telomere. Human chromosomes have two arms, the p arm (short) and the q arm (long) which are separated from each other by the centromere." [http://www.medterms.com/script/main/art.asp?articlekey=5152] synonym: "chromosome arm" EXACT [] is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000106 name: non_capped_primary_transcript is_obsolete: true [Term] id: SO:0000107 name: sequencing_primer synonym: "sequencing primer" EXACT [] is_a: SO:0000112 ! primer [Term] id: SO:0000108 name: mRNA_with_frameshift def: "An mRNA with a frameshift." [SO:xp] synonym: "frameshifted mRNA" EXACT [] synonym: "mRNA with frameshift" EXACT [] is_a: SO:0000234 ! mRNA intersection_of: SO:0000234 ! mRNA intersection_of: has_quality SO:0000865 ! frameshift relationship: has_quality SO:0000865 ! frameshift [Term] id: SO:0000109 name: sequence_variant_obs def: "A sequence_variant is a non exact copy of a sequence_feature or genome exhibiting one or more sequence_alteration." [SO:ke] subset: SOFA synonym: "mutation" RELATED [] is_obsolete: true [Term] id: SO:0000110 name: sequence_feature def: "An extent of biological sequence." [SO:ke] subset: SOFA synonym: "located sequence feature" RELATED [] synonym: "located_sequence_feature" EXACT [] synonym: "sequence feature" EXACT [] disjoint_from: SO:0000240 ! chromosome_variation disjoint_from: SO:0000400 ! sequence_attribute [Term] id: SO:0000111 name: transposable_element_gene def: "A gene encoded within a transposable element. For example gag, int, env and pol are the transposable element genes of the TY element in yeast." [SO:ke] synonym: "transposable element gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: part_of SO:0000101 ! transposable_element relationship: part_of SO:0000101 ! transposable_element [Term] id: SO:0000112 name: primer def: "An oligo to which new deoxyribonucleotides can be added by DNA polymerase." [SO:ke] subset: SOFA synonym: "DNA primer" EXACT [] synonym: "primer oligonucleotide" EXACT [] synonym: "primer polynucleotide" EXACT [] synonym: "primer sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Primer_(molecular_biology) "wiki" is_a: SO:0000441 ! ss_oligo [Term] id: SO:0000113 name: proviral_region def: "A viral sequence which has integrated into a host genome." [SO:ke] subset: SOFA synonym: "proviral region" EXACT [] synonym: "proviral sequence" RELATED [] is_a: SO:0001039 ! integrated_mobile_genetic_element [Term] id: SO:0000114 name: methylated_cytosine def: "A methylated deoxy-cytosine." [SO:ke] subset: SOFA synonym: "methylated C" EXACT [] synonym: "methylated cytosine" EXACT [] synonym: "methylated cytosine base" EXACT [] synonym: "methylated cytosine residue" EXACT [] synonym: "methylated_C" EXACT [] is_a: SO:0000306 ! methylated_DNA_base_feature [Term] id: SO:0000115 name: transcript_feature is_obsolete: true [Term] id: SO:0000116 name: edited def: "An attribute describing a sequence that is modified by editing." [SO:ke] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000117 name: transcript_with_readthrough_stop_codon is_obsolete: true [Term] id: SO:0000118 name: transcript_with_translational_frameshift def: "A transcript with a translational frameshift." [SO:xp] synonym: "transcript with translational frameshift" EXACT [] is_a: SO:0000673 ! transcript intersection_of: SO:0000673 ! transcript intersection_of: has_quality SO:0000887 ! translationally_frameshifted relationship: has_quality SO:0000887 ! translationally_frameshifted [Term] id: SO:0000119 name: regulated def: "An attribute to describe a sequence that is regulated." [SO:ke] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0000120 name: protein_coding_primary_transcript def: "A primary transcript that, at least in part, encodes one or more proteins." [SO:ke] comment: May contain introns. subset: SOFA synonym: "pre mRNA" RELATED [] synonym: "protein coding primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript [Term] id: SO:0000121 name: forward_primer def: "A single stranded oligo used for polymerase chain reaction." [http://mged.sourceforge.net/ontologies/MGEDontology.php] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "DNA forward primer" EXACT [] synonym: "forward DNA primer" EXACT [] synonym: "forward primer" EXACT [] synonym: "forward primer oligo" EXACT [] synonym: "forward primer oligonucleotide" EXACT [] synonym: "forward primer polynucleotide" EXACT [] synonym: "forward primer sequence" EXACT [] is_a: SO:0000112 ! primer intersection_of: SO:0000112 ! primer intersection_of: has_quality SO:0001030 ! forward relationship: has_quality SO:0001030 ! forward [Term] id: SO:0000122 name: RNA_sequence_secondary_structure def: "A folded RNA sequence." [SO:ke] synonym: "RNA sequence secondary structure" EXACT [] is_a: SO:0000002 ! sequence_secondary_structure [Term] id: SO:0000123 name: transcriptionally_regulated def: "An attribute describing a gene that is regulated at transcription." [SO:ma] comment: By:. synonym: "transcriptionally regulated" EXACT [] is_a: SO:0000119 ! regulated [Term] id: SO:0000124 name: transcriptionally_constitutive def: "Expressed in relatively constant amounts without regard to cellular environmental conditions such as the concentration of a particular substrate." [SO:ke] synonym: "transcriptionally constitutive" EXACT [] is_a: SO:0000123 ! transcriptionally_regulated [Term] id: SO:0000125 name: transcriptionally_induced def: "An inducer molecule is required for transcription to occur." [SO:ke] synonym: "transcriptionally induced" EXACT [] is_a: SO:0000123 ! transcriptionally_regulated [Term] id: SO:0000126 name: transcriptionally_repressed def: "A repressor molecule is required for transcription to stop." [SO:ke] synonym: "transcriptionally repressed" EXACT [] is_a: SO:0000123 ! transcriptionally_regulated [Term] id: SO:0000127 name: silenced_gene def: "A gene that is silenced." [SO:xp] synonym: "silenced gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000893 ! silenced relationship: has_quality SO:0000893 ! silenced [Term] id: SO:0000128 name: gene_silenced_by_DNA_modification def: "A gene that is silenced by DNA modification." [SO:xp] synonym: "gene silenced by DNA modification" EXACT [] is_a: SO:0000127 ! silenced_gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000894 ! silenced_by_DNA_modification relationship: has_quality SO:0000894 ! silenced_by_DNA_modification [Term] id: SO:0000129 name: gene_silenced_by_DNA_methylation def: "A gene that is silenced by DNA methylation." [SO:xp] synonym: "gene silenced by DNA methylation" EXACT [] synonym: "methylation-silenced gene" EXACT [] is_a: SO:0000128 ! gene_silenced_by_DNA_modification intersection_of: SO:0000128 ! gene_silenced_by_DNA_modification intersection_of: has_quality SO:0000895 ! silenced_by_DNA_methylation relationship: has_quality SO:0000895 ! silenced_by_DNA_methylation [Term] id: SO:0000130 name: post_translationally_regulated def: "An attribute describing a gene that is regulated after it has been translated." [SO:ke] synonym: "post translationally regulated" EXACT [] synonym: "post-translationally regulated" EXACT [] is_a: SO:0000119 ! regulated [Term] id: SO:0000131 name: translationally_regulated def: "An attribute describing a gene that is regulated as it is translated." [SO:ke] synonym: "translationally regulated" EXACT [] is_a: SO:0000119 ! regulated [Term] id: SO:0000132 name: reverse_primer def: "A single stranded oligo used for polymerase chain reaction." [http://mged.sourceforge.net/ontologies/MGEDontology.php] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "DNA reverse primer" EXACT [] synonym: "reverse DNA primer" EXACT [] synonym: "reverse primer" EXACT [] synonym: "reverse primer oligo" EXACT [] synonym: "reverse primer oligonucleotide" EXACT [] synonym: "reverse primer sequence" EXACT [] is_a: SO:0000112 ! primer intersection_of: SO:0000112 ! primer intersection_of: has_quality SO:0001031 ! reverse relationship: has_quality SO:0001031 ! reverse [Term] id: SO:0000133 name: epigenetically_modified def: "This attribute describes a gene where heritable changes other than those in the DNA sequence occur. These changes include: modification to the DNA (such as DNA methylation, the covalent modification of cytosine), and post-translational modification of histones." [SO:ke] synonym: "epigenetically modified" EXACT [] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0000134 name: genomically_imprinted def: "Imprinted genes are epigenetically modified genes that are expressed monoallelically according to their parent of origin." [SO:ke] synonym: "genomically imprinted" EXACT [] synonym: "imprinted" BROAD [] xref: http:http://en.wikipedia.org/wiki/Genomic_imprinting "wiki" is_a: SO:0000119 ! regulated is_a: SO:0000133 ! epigenetically_modified [Term] id: SO:0000135 name: maternally_imprinted def: "The maternal copy of the gene is modified, rendering it transcriptionally silent." [SO:ke] synonym: "maternally imprinted" EXACT [] is_a: SO:0000134 ! genomically_imprinted [Term] id: SO:0000136 name: paternally_imprinted def: "The paternal copy of the gene is modified, rendering it transcriptionally silent." [SO:ke] synonym: "paternally imprinted" EXACT [] is_a: SO:0000134 ! genomically_imprinted [Term] id: SO:0000137 name: allelically_excluded def: "Allelic exclusion is a process occurring in diploid organisms, where a gene is inactivated and not expressed in that cell." [SO:ke] comment: Examples are x-inactivation and immunoglobulin formation. synonym: "allelically excluded" EXACT [] is_a: SO:0000133 ! epigenetically_modified [Term] id: SO:0000138 name: gene_rearranged_at_DNA_level def: "An epigenetically modified gene, rearranged at the DNA level." [SO:xp] synonym: "gene rearranged at DNA level" EXACT [] is_a: SO:0000898 ! epigenetically_modified_gene intersection_of: SO:0000898 ! epigenetically_modified_gene intersection_of: has_quality SO:0000904 ! rearranged_at_DNA_level relationship: has_quality SO:0000904 ! rearranged_at_DNA_level [Term] id: SO:0000139 name: ribosome_entry_site def: "Region in mRNA where ribosome assembles." [SO:ke] subset: SOFA synonym: "ribosome entry site" EXACT [] is_a: SO:0000836 ! mRNA_region relationship: part_of SO:0000204 ! five_prime_UTR [Term] id: SO:0000140 name: attenuator def: "A sequence segment located within the five prime end of an mRNA that causes premature termination of translation." [SO:as] subset: SOFA synonym: "attenuator sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Attenuator "wiki" is_a: SO:0001680 ! translation_regulatory_region relationship: part_of SO:0000234 ! mRNA [Term] id: SO:0000141 name: terminator def: "The sequence of DNA located either at the end of the transcript that causes RNA polymerase to terminate transcription." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "terminator sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Terminator_(genetics) "wiki" is_a: SO:0001679 ! transcription_regulatory_region relationship: part_of SO:0000673 ! transcript [Term] id: SO:0000142 name: DNA_sequence_secondary_structure def: "A folded DNA sequence." [SO:ke] synonym: "DNA sequence secondary structure" EXACT [] is_a: SO:0000002 ! sequence_secondary_structure [Term] id: SO:0000143 name: assembly_component def: "A region of known length which may be used to manufacture a longer region." [SO:ke] subset: SOFA synonym: "assembly component" EXACT [] is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000144 name: primary_transcript_attribute is_obsolete: true [Term] id: SO:0000145 name: recoded_codon def: "A codon that has been redefined at translation. The redefinition may be as a result of translational bypass, translational frameshifting or stop codon readthrough." [SO:xp] synonym: "recoded codon" EXACT [] is_a: SO:0000360 ! codon [Term] id: SO:0000146 name: capped def: "An attribute describing when a sequence, usually an mRNA is capped by the addition of a modified guanine nucleotide at the 5' end." [SO:ke] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000147 name: exon def: "A region of the transcript sequence within a gene which is not removed from the primary RNA transcript by RNA splicing." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA xref: http://en.wikipedia.org/wiki/Exon "wiki" is_a: SO:0000833 ! transcript_region [Term] id: SO:0000148 name: supercontig def: "One or more contigs that have been ordered and oriented using end-read information. Contains gaps that are filled with N's." [SO:ls] subset: SOFA synonym: "scaffold" RELATED [] is_a: SO:0001876 ! partial_genomic_sequence_assembly relationship: part_of SO:0000719 ! ultracontig [Term] id: SO:0000149 name: contig def: "A contiguous sequence derived from sequence assembly. Has no gaps, but may contain N's from unavailable bases." [SO:ls] subset: SOFA xref: http://en.wikipedia.org/wiki/Contig "wiki" is_a: SO:0000143 ! assembly_component is_a: SO:0000353 ! sequence_assembly relationship: part_of SO:0000148 ! supercontig [Term] id: SO:0000150 name: read def: "A sequence obtained from a single sequencing experiment. Typically a read is produced when a base calling program interprets information from a chromatogram trace file produced from a sequencing machine." [SO:rd] subset: SOFA is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000149 ! contig [Term] id: SO:0000151 name: clone def: "A piece of DNA that has been inserted in a vector so that it can be propagated in a host bacterium or some other organism." [SO:ke] subset: SOFA xref: http:http://en.wikipedia.org/wiki/Clone_(genetics) "wiki" is_a: SO:0000695 ! reagent [Term] id: SO:0000152 name: YAC def: "Yeast Artificial Chromosome, a vector constructed from the telomeric, centromeric, and replication origin sequences needed for replication in yeast cells." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "yeast artificial chromosome" EXACT [] is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000153 name: BAC def: "Bacterial Artificial Chromosome, a cloning vector that can be propagated as mini-chromosomes in a bacterial host." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "bacterial artificial chromosome" EXACT [] is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000154 name: PAC def: "The P1-derived artificial chromosome are DNA constructs that are derived from the DNA of P1 bacteriophage. They can carry large amounts (about 100-300 kilobases) of other sequences for a variety of bioengineering purposes. It is one type of vector used to clone DNA fragments (100- to 300-kb insert size; average, 150 kb) in Escherichia coli cells." [http://en.wikipedia.org/wiki/P1-derived_artificial_chromosome] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. Drosophila melanogaster PACs carry an average insert size of 80 kb. The library represents a 6-fold coverage of the genome. synonym: "P1" EXACT [] synonym: "P1 artificial chromosome" EXACT [] xref: http://en.wikipedia.org/wiki/P1-derived_artificial_chromosome "wiki" is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000155 name: plasmid def: "A self replicating, using the hosts cellular machinery, often circular nucleic acid molecule that is distinct from a chromosome in the organism." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "plasmid sequence" EXACT [] is_a: SO:0001235 ! replicon [Term] id: SO:0000156 name: cosmid def: "A cloning vector that is a hybrid of lambda phages and a plasmid that can be propagated as a plasmid or packaged as a phage,since they retain the lambda cos sites." [SO:ma] comment: Paper: vans GA et al. High efficiency vectors for cosmid microcloning and genomic analysis. Gene 1989; 79(1):9-20. This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "cosmid vector" EXACT [] xref: http://en.wikipedia.org/wiki/Cosmid "wiki" is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000157 name: phagemid def: "A plasmid which carries within its sequence a bacteriophage replication origin. When the host bacterium is infected with \"helper\" phage, a phagemid is replicated along with the phage DNA and packaged into phage capsids." [SO:ma] synonym: "phagemid vector" RELATED [] xref: http://en.wikipedia.org/wiki/Phagemid "wiki" is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000158 name: fosmid def: "A cloning vector that utilizes the E. coli F factor." [SO:ma] comment: Birren BW et al. A human chromosome 22 fosmid resource: mapping and analysis of 96 clones. Genomics 1996. synonym: "fosmid vector" RELATED [] xref: http://en.wikipedia.org/wiki/Fosmid "wiki" is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000159 name: deletion alt_id: SO:1000033 def: "The point at which one or more contiguous nucleotides were excised." [SO:ke] subset: SOFA synonym: "deleted_sequence" EXACT [] synonym: "nucleotide deletion" EXACT [] synonym: "nucleotide_deletion" EXACT [] xref: http://en.wikipedia.org/wiki/Nucleotide_deletion "wiki" xref: loinc:LA6692-3 "Deletion" is_a: SO:0001059 ! sequence_alteration is_a: SO:0001411 ! biological_region [Term] id: SO:0000160 name: lambda_clone def: "A linear clone derived from lambda bacteriophage. The genes involved in the lysogenic pathway are removed from the from the viral DNA. Up to 25 kb of foreign DNA can then be inserted into the lambda genome." [ISBN:0-1767-2380-8] is_obsolete: true [Term] id: SO:0000161 name: methylated_adenine def: "A modified base in which adenine has been methylated." [SO:ke] subset: SOFA synonym: "methylated A" EXACT [] synonym: "methylated adenine" EXACT [] synonym: "methylated adenine base" EXACT [] synonym: "methylated adenine residue" EXACT [] synonym: "methylated_A" EXACT [] is_a: SO:0000306 ! methylated_DNA_base_feature [Term] id: SO:0000162 name: splice_site def: "Consensus region of primary transcript bordering junction of splicing. A region that overlaps exactly 2 base and adjacent_to splice_junction." [SO:cjm, SO:ke] comment: With spliceosomal introns, the splice sites bind the spliceosomal machinery. subset: SOFA synonym: "splice site" EXACT [] xref: http://en.wikipedia.org/wiki/Splice_site "wiki" is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000163 name: five_prime_cis_splice_site def: "Intronic 2 bp region bordering the exon, at the 5' edge of the intron. A splice_site that is downstream_adjacent_to exon and starts intron." [http://www.ucl.ac.uk/~ucbhjow/b241/glossary.html, SO:cjm, SO:ke] subset: SOFA synonym: "5' splice site" EXACT [] synonym: "donor" RELATED [] synonym: "donor splice site" EXACT [] synonym: "five prime splice site" EXACT [] synonym: "splice donor site" EXACT [] is_a: SO:0001419 ! cis_splice_site [Term] id: SO:0000164 name: three_prime_cis_splice_site def: "Intronic 2 bp region bordering the exon, at the 3' edge of the intron. A splice_site that is upstream_adjacent_to exon and finishes intron." [http://www.ucl.ac.uk/~ucbhjow/b241/glossary.html, SO:cjm, SO:ke] subset: SOFA synonym: "3' splice site" RELATED [] synonym: "acceptor" RELATED [] synonym: "acceptor splice site" EXACT [] synonym: "splice acceptor site" EXACT [] synonym: "three prime splice site" EXACT [] is_a: SO:0001419 ! cis_splice_site [Term] id: SO:0000165 name: enhancer def: "A cis-acting sequence that increases the utilization of (some) eukaryotic promoters, and can function in either orientation and in any location (upstream or downstream) relative to the promoter." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: An enhancer may participate in an enhanceosome GO:0034206. A protein-DNA complex formed by the association of a distinct set of general and specific transcription factors with a region of enhancer DNA. The cooperative assembly of an enhanceosome confers specificity of transcriptional regulation. This comment is a place holder should we start to make cross products with GO. subset: SOFA xref: http://en.wikipedia.org/wiki/Enhancer_(genetics) "wiki" is_a: SO:0000727 ! CRM [Term] id: SO:0000166 name: enhancer_bound_by_factor def: "An enhancer bound by a factor." [SO:xp] synonym: "enhancer bound by factor" EXACT [] is_a: SO:0000165 ! enhancer intersection_of: SO:0000165 ! enhancer intersection_of: has_quality SO:0000277 ! bound_by_factor relationship: has_quality SO:0000277 ! bound_by_factor [Term] id: SO:0000167 name: promoter def: "A regulatory_region composed of the TSS(s) and binding sites for TF_complexes of the basal transcription machinery." [SO:regcreative] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. The region on a DNA molecule involved in RNA polymerase binding to initiate transcription. subset: SOFA synonym: "promoter sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Promoter "wiki" is_a: SO:0001055 ! transcriptional_cis_regulatory_region [Term] id: SO:0000168 name: restriction_enzyme_cut_site def: "A specific nucleotide sequence of DNA at or near which a particular restriction enzyme cuts the DNA." [SO:ma] is_obsolete: true [Term] id: SO:0000169 name: RNApol_I_promoter def: "A DNA sequence in eukaryotic DNA to which RNA polymerase I binds, to begin transcription." [SO:ke] synonym: "pol I promoter" EXACT [] synonym: "polymerase I promoter" EXACT [] synonym: "RNA polymerase A promoter" EXACT [] synonym: "RNApol I promoter" EXACT [] is_a: SO:0001203 ! RNA_polymerase_promoter [Term] id: SO:0000170 name: RNApol_II_promoter def: "A DNA sequence in eukaryotic DNA to which RNA polymerase II binds, to begin transcription." [SO:ke] synonym: "pol II promoter" RELATED [] synonym: "polymerase II promoter" EXACT [] synonym: "RNA polymerase B promoter" EXACT [] synonym: "RNApol II promoter" EXACT [] is_a: SO:0001203 ! RNA_polymerase_promoter [Term] id: SO:0000171 name: RNApol_III_promoter def: "A DNA sequence in eukaryotic DNA to which RNA polymerase III binds, to begin transcription." [SO:ke] synonym: "pol III promoter" EXACT [] synonym: "polymerase III promoter" EXACT [] synonym: "RNA polymerase C promoter" EXACT [] synonym: "RNApol III promoter" EXACT [] is_a: SO:0001203 ! RNA_polymerase_promoter [Term] id: SO:0000172 name: CAAT_signal def: "Part of a conserved sequence located about 75-bp upstream of the start point of eukaryotic transcription units which may be involved in RNA polymerase binding; consensus=GG(C|T)CAATCT." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "CAAT box" EXACT [] synonym: "CAAT signal" EXACT [] synonym: "CAAT-box" EXACT [] xref: http://en.wikipedia.org/wiki/CAAT_box "wiki" is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0000173 name: GC_rich_promoter_region def: "A conserved GC-rich region located upstream of the start point of eukaryotic transcription units which may occur in multiple copies or in either orientation; consensus=GGGCGG." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "GC rich promoter region" EXACT [] synonym: "GC-rich region" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0000174 name: TATA_box def: "A conserved AT-rich septamer found about 25-bp before the start point of many eukaryotic RNA polymerase II transcript units; may be involved in positioning the enzyme for correct initiation; consensus=TATA(A|T)A(A|T)." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html, PMID:16858867] comment: Binds TBP. synonym: "Goldstein-Hogness box" EXACT [] synonym: "TATA box" EXACT [] xref: http://en.wikipedia.org/wiki/TATA_box "wiki" is_a: SO:0001660 ! core_promoter_element [Term] id: SO:0000175 name: minus_10_signal def: "A conserved region about 10-bp upstream of the start point of bacterial transcription units which may be involved in binding RNA polymerase; consensus=TAtAaT. This region is associated with sigma factor 70." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "-10 signal" EXACT [] synonym: "minus 10 signal" EXACT [] synonym: "Pribnow box" EXACT [] synonym: "Pribnow Schaller box" EXACT [] synonym: "Pribnow-Schaller box" EXACT [] xref: http://en.wikipedia.org/wiki/Pribnow_box "wiki" is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001671 ! bacterial_RNApol_promoter_sigma_70 relationship: part_of SO:0001913 ! bacterial_RNApol_promoter_sigma_ecf [Term] id: SO:0000176 name: minus_35_signal def: "A conserved hexamer about 35-bp upstream of the start point of bacterial transcription units; consensus=TTGACa or TGTTGACA. This region is associated with sigma factor 70." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "-35 signal" EXACT [] synonym: "minus 35 signal" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001671 ! bacterial_RNApol_promoter_sigma_70 relationship: part_of SO:0001913 ! bacterial_RNApol_promoter_sigma_ecf [Term] id: SO:0000177 name: cross_genome_match def: "A nucleotide match against a sequence from another organism." [SO:ma] subset: SOFA synonym: "cross genome match" EXACT [] is_a: SO:0000347 ! nucleotide_match [Term] id: SO:0000178 name: operon def: "A group of contiguous genes transcribed as a single (polycistronic) mRNA from a single regulatory region." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA xref: http://en.wikipedia.org/wiki/Operon "wiki" is_a: SO:0005855 ! gene_group [Term] id: SO:0000179 name: clone_insert_start def: "The start of the clone insert." [SO:ke] subset: SOFA synonym: "clone insert start" EXACT [] is_a: SO:0000699 ! junction relationship: part_of SO:0000753 ! clone_insert [Term] id: SO:0000180 name: retrotransposon def: "A transposable element that is incorporated into a chromosome by a mechanism that requires reverse transcriptase." [http://www.dddmag.com/Glossary.aspx#r] synonym: "class I" RELATED [] synonym: "class I transposon" EXACT [] synonym: "retrotransposon element" EXACT [] xref: http://en.wikipedia.org/wiki/Retrotransposon "wiki" is_a: SO:0000101 ! transposable_element [Term] id: SO:0000181 name: translated_nucleotide_match def: "A match against a translated sequence." [SO:ke] subset: SOFA synonym: "translated nucleotide match" EXACT [] is_a: SO:0000347 ! nucleotide_match [Term] id: SO:0000182 name: DNA_transposon def: "A transposon where the mechanism of transposition is via a DNA intermediate." [SO:ke] synonym: "class II" RELATED [] synonym: "class II transposon" EXACT [] synonym: "DNA transposon" EXACT [] is_a: SO:0000101 ! transposable_element [Term] id: SO:0000183 name: non_transcribed_region def: "A region of the gene which is not transcribed." [SO:ke] subset: SOFA synonym: "non transcribed region" EXACT [] synonym: "non-transcribed sequence" EXACT [] synonym: "nontranscribed region" EXACT [] synonym: "nontranscribed sequence" EXACT [] is_a: SO:0000842 ! gene_component_region [Term] id: SO:0000184 name: U2_intron def: "A major type of spliceosomal intron spliced by the U2 spliceosome, that includes U1, U2, U4/U6 and U5 snRNAs." [PMID:9428511] comment: May have either GT-AG or AT-AG 5' and 3' boundaries. synonym: "U2 intron" EXACT [] is_a: SO:0000662 ! spliceosomal_intron [Term] id: SO:0000185 name: primary_transcript def: "A transcript that in its initial state requires modification to be functional." [SO:ma] subset: SOFA synonym: "precursor RNA" EXACT [] synonym: "primary transcript" EXACT [] xref: http://en.wikipedia.org/wiki/Primary_transcript "wiki" is_a: SO:0000673 ! transcript [Term] id: SO:0000186 name: LTR_retrotransposon def: "A retrotransposon flanked by long terminal repeat sequences." [SO:ke] synonym: "long terminal repeat retrotransposon" EXACT [] synonym: "LTR retrotransposon" EXACT [] is_a: SO:0000180 ! retrotransposon [Term] id: SO:0000187 name: repeat_family def: "A group of characterized repeat sequences." [SO:ke] subset: SOFA is_obsolete: true [Term] id: SO:0000188 name: intron def: "A region of a primary transcript that is transcribed, but removed from within the transcript by splicing together the sequences (exons) on either side of it." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA xref: http://en.wikipedia.org/wiki/Intron "wiki" is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000189 name: non_LTR_retrotransposon def: "A retrotransposon without long terminal repeat sequences." [SO:ke] synonym: "non LTR retrotransposon" EXACT [] is_a: SO:0000180 ! retrotransposon [Term] id: SO:0000190 name: five_prime_intron synonym: "5' intron" EXACT [] synonym: "5' intron sequence" EXACT [] synonym: "five prime intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000191 name: interior_intron synonym: "interior intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000192 name: three_prime_intron synonym: "3' intron" EXACT [] synonym: "3' intron sequence" RELATED [] synonym: "three prime intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000193 name: RFLP_fragment def: "A DNA fragment used as a reagent to detect the polymorphic genomic loci by hybridizing against the genomic DNA digested with a given restriction enzyme." [GOC:pj] subset: SOFA synonym: "restriction fragment length polymorphism" EXACT [] synonym: "RFLP" EXACT [] synonym: "RFLP fragment" EXACT [] xref: http://en.wikipedia.org/wiki/Restriction_fragment_length_polymorphism "wiki" is_a: SO:0000412 ! restriction_fragment [Term] id: SO:0000194 name: LINE_element def: "A dispersed repeat family with many copies, each from 1 to 6 kb long. New elements are generated by retroposition of a transcribed copy. Typically the LINE contains 2 ORF's one of which is reverse transcriptase, and 3'and 5' direct repeats." [http://www.ucl.ac.uk/~ucbhjow/b241/glossary.html] synonym: "LINE" EXACT [] synonym: "LINE element" EXACT [] synonym: "Long interspersed element" EXACT [] synonym: "Long interspersed nuclear element" EXACT [] is_a: SO:0000189 ! non_LTR_retrotransposon [Term] id: SO:0000195 name: coding_exon def: "An exon whereby at least one base is part of a codon (here, 'codon' is inclusive of the stop_codon)." [SO:ke] subset: SOFA synonym: "coding exon" EXACT [] is_a: SO:0000147 ! exon [Term] id: SO:0000196 name: five_prime_coding_exon_coding_region def: "The sequence of the five_prime_coding_exon that codes for protein." [SO:cjm] subset: SOFA synonym: "five prime exon coding region" EXACT [] is_a: SO:0001215 ! coding_region_of_exon relationship: part_of SO:0000200 ! five_prime_coding_exon [Term] id: SO:0000197 name: three_prime_coding_exon_coding_region def: "The sequence of the three_prime_coding_exon that codes for protein." [SO:cjm] subset: SOFA synonym: "three prime exon coding region" EXACT [] is_a: SO:0001215 ! coding_region_of_exon relationship: part_of SO:0000202 ! three_prime_coding_exon [Term] id: SO:0000198 name: noncoding_exon def: "An exon that does not contain any codons." [SO:ke] subset: SOFA synonym: "noncoding exon" EXACT [] is_a: SO:0000147 ! exon [Term] id: SO:0000199 name: translocation def: "A region of nucleotide sequence that has translocated to a new position." [SO:ke] subset: DBVAR synonym: "transchr" RELATED [http://www.ncbi.nlm.nih.gov/dbvar/] synonym: "translocated sequence" EXACT [] is_a: SO:0001059 ! sequence_alteration [Term] id: SO:0000200 name: five_prime_coding_exon def: "The 5' most coding exon." [SO:ke] subset: SOFA synonym: "5' coding exon" EXACT [] synonym: "five prime coding exon" EXACT [] is_a: SO:0000195 ! coding_exon [Term] id: SO:0000201 name: interior_exon def: "An exon that is bounded by 5' and 3' splice sites." [PMID:10373547] synonym: "interior exon" EXACT [] is_a: SO:0000147 ! exon [Term] id: SO:0000202 name: three_prime_coding_exon def: "The coding exon that is most 3-prime on a given transcript." [SO:ma] synonym: "3' coding exon" RELATED [] synonym: "three prime coding exon" EXACT [] is_a: SO:0000195 ! coding_exon [Term] id: SO:0000203 name: UTR def: "Messenger RNA sequences that are untranslated and lie five prime or three prime to sequences which are translated." [SO:ke] subset: SOFA synonym: "untranslated region" EXACT [] is_a: SO:0000836 ! mRNA_region [Term] id: SO:0000204 name: five_prime_UTR def: "A region at the 5' end of a mature transcript (preceding the initiation codon) that is not translated into a protein." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "5' UTR" EXACT [] synonym: "five prime UTR" EXACT [] synonym: "five_prime_untranslated_region" EXACT [] xref: http://en.wikipedia.org/wiki/5'_UTR "wiki" is_a: SO:0000203 ! UTR [Term] id: SO:0000205 name: three_prime_UTR def: "A region at the 3' end of a mature transcript (following the stop codon) that is not translated into a protein." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "three prime untranslated region" EXACT [] synonym: "three prime UTR" EXACT [] xref: http://en.wikipedia.org/wiki/Three_prime_untranslated_region "wiki" is_a: SO:0000203 ! UTR [Term] id: SO:0000206 name: SINE_element def: "A repetitive element, a few hundred base pairs long, that is dispersed throughout the genome. A common human SINE is the Alu element." [SO:ke] synonym: "Short interspersed element" EXACT [] synonym: "Short interspersed nuclear element" EXACT [] synonym: "SINE element" EXACT [] xref: http://en.wikipedia.org/wiki/Short_interspersed_nuclear_element "wiki" is_a: SO:0000189 ! non_LTR_retrotransposon [Term] id: SO:0000207 name: simple_sequence_length_variation synonym: "simple sequence length polymorphism" RELATED [] synonym: "simple sequence length variation" EXACT [] synonym: "SSLP" RELATED [] is_a: SO:0000248 ! sequence_length_variation [Term] id: SO:0000208 name: terminal_inverted_repeat_element def: "A DNA transposable element defined as having termini with perfect, or nearly perfect short inverted repeats, generally 10 - 40 nucleotides long." [http://www.genetics.org/cgi/reprint/156/4/1983.pdf] synonym: "terminal inverted repeat element" EXACT [] synonym: "TIR element" EXACT [] is_a: SO:0000182 ! DNA_transposon [Term] id: SO:0000209 name: rRNA_primary_transcript def: "A primary transcript encoding a ribosomal RNA." [SO:ke] subset: SOFA synonym: "ribosomal RNA primary transcript" EXACT [] synonym: "rRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000210 name: tRNA_primary_transcript def: "A primary transcript encoding a transfer RNA (SO:0000253)." [SO:ke] synonym: "tRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000211 name: alanine_tRNA_primary_transcript def: "A primary transcript encoding alanyl tRNA." [SO:ke] synonym: "alanine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000212 name: arginine_tRNA_primary_transcript def: "A primary transcript encoding arginyl tRNA (SO:0000255)." [SO:ke] synonym: "arginine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000213 name: asparagine_tRNA_primary_transcript def: "A primary transcript encoding asparaginyl tRNA (SO:0000256)." [SO:ke] synonym: "asparagine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000214 name: aspartic_acid_tRNA_primary_transcript def: "A primary transcript encoding aspartyl tRNA (SO:0000257)." [SO:ke] synonym: "aspartic acid tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000215 name: cysteine_tRNA_primary_transcript def: "A primary transcript encoding cysteinyl tRNA (SO:0000258)." [SO:ke] synonym: "cysteine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000216 name: glutamic_acid_tRNA_primary_transcript def: "A primary transcript encoding glutaminyl tRNA (SO:0000260)." [SO:ke] synonym: "glutamic acid tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000217 name: glutamine_tRNA_primary_transcript def: "A primary transcript encoding glutamyl tRNA (SO:0000260)." [SO:ke] synonym: "glutamine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000218 name: glycine_tRNA_primary_transcript def: "A primary transcript encoding glycyl tRNA (SO:0000263)." [SO:ke] synonym: "glycine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000219 name: histidine_tRNA_primary_transcript def: "A primary transcript encoding histidyl tRNA (SO:0000262)." [SO:ke] synonym: "histidine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000220 name: isoleucine_tRNA_primary_transcript def: "A primary transcript encoding isoleucyl tRNA (SO:0000263)." [SO:ke] synonym: "isoleucine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000221 name: leucine_tRNA_primary_transcript def: "A primary transcript encoding leucyl tRNA (SO:0000264)." [SO:ke] synonym: "leucine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000222 name: lysine_tRNA_primary_transcript def: "A primary transcript encoding lysyl tRNA (SO:0000265)." [SO:ke] synonym: "lysine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000223 name: methionine_tRNA_primary_transcript def: "A primary transcript encoding methionyl tRNA (SO:0000266)." [SO:ke] synonym: "methionine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000224 name: phenylalanine_tRNA_primary_transcript def: "A primary transcript encoding phenylalanyl tRNA (SO:0000267)." [SO:ke] synonym: "phenylalanine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000225 name: proline_tRNA_primary_transcript def: "A primary transcript encoding prolyl tRNA (SO:0000268)." [SO:ke] synonym: "proline tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000226 name: serine_tRNA_primary_transcript def: "A primary transcript encoding seryl tRNA (SO:000269)." [SO:ke] synonym: "serine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000227 name: threonine_tRNA_primary_transcript def: "A primary transcript encoding threonyl tRNA (SO:000270)." [SO:ke] synonym: "threonine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000228 name: tryptophan_tRNA_primary_transcript def: "A primary transcript encoding tryptophanyl tRNA (SO:000271)." [SO:ke] synonym: "tryptophan tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000229 name: tyrosine_tRNA_primary_transcript def: "A primary transcript encoding tyrosyl tRNA (SO:000272)." [SO:ke] synonym: "tyrosine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000230 name: valine_tRNA_primary_transcript def: "A primary transcript encoding valyl tRNA (SO:000273)." [SO:ke] synonym: "valine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000231 name: snRNA_primary_transcript def: "A primary transcript encoding a small nuclear RNA (SO:0000274)." [SO:ke] synonym: "snRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000232 name: snoRNA_primary_transcript def: "A primary transcript encoding a small nucleolar mRNA (SO:0000275)." [SO:ke] synonym: "snoRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000233 name: mature_transcript def: "A transcript which has undergone the necessary modifications, if any, for its function. In eukaryotes this includes, for example, processing of introns, cleavage, base modification, and modifications to the 5' and/or the 3' ends, other than addition of bases. In bacteria functional mRNAs are usually not modified." [SO:ke] comment: A processed transcript cannot contain introns. subset: SOFA synonym: "mature transcript" EXACT [] xref: http://en.wikipedia.org/wiki/Mature_transcript "wiki" is_a: SO:0000673 ! transcript relationship: derives_from SO:0000185 ! primary_transcript [Term] id: SO:0000234 name: mRNA def: "Messenger RNA is the intermediate molecule between DNA and protein. It includes UTR and coding sequences. It does not contain introns." [SO:ma] comment: An mRNA does not contain introns as it is a processed_transcript. The equivalent kind of primary_transcript is protein_coding_primary_transcript (SO:0000120) which may contain introns. This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "messenger RNA" EXACT [] xref: http://en.wikipedia.org/wiki/MRNA "wiki" is_a: SO:0000233 ! mature_transcript [Term] id: SO:0000235 name: TF_binding_site def: "A region of a nucleotide molecule that binds a Transcription Factor or Transcription Factor complex [GO:0005667]." [SO:ke] subset: SOFA synonym: "TF binding site" EXACT [] synonym: "transcription factor binding site" EXACT [] is_a: SO:0001654 ! nucleotide_to_protein_binding_site is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0000236 name: ORF def: "The in-frame interval between the stop codons of a reading frame which when read as sequential triplets, has the potential of encoding a sequential string of amino acids. TER(NNN)nTER." [SGD:rb, SO:ma] comment: The definition was modified by Rama. ORF is defined by the sequence, whereas the CDS is defined according to whether a polypeptide is made. This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "open reading frame" EXACT [] is_a: SO:0000717 ! reading_frame [Term] id: SO:0000237 name: transcript_attribute synonym: "transcript attribute" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000238 name: foldback_element def: "A transposable element with extensive secondary structure, characterized by large modular imperfect long inverted repeats." [http://www.genetics.org/cgi/reprint/156/4/1983.pdf] synonym: "foldback element" EXACT [] synonym: "long inverted repeat element" RELATED [] synonym: "LVR element" RELATED [] is_a: SO:0000182 ! DNA_transposon [Term] id: SO:0000239 name: flanking_region def: "The sequences extending on either side of a specific region." [SO:ke] subset: SOFA synonym: "flanking region" EXACT [] is_a: SO:0001412 ! topologically_defined_region [Term] id: SO:0000240 name: chromosome_variation synonym: "chromosome variation" EXACT [] is_a: SO:0001507 ! variant_collection disjoint_from: SO:0000400 ! sequence_attribute relationship: part_of SO:0001524 ! chromosomally_aberrant_genome [Term] id: SO:0000241 name: internal_UTR def: "A UTR bordered by the terminal and initial codons of two CDSs in a polycistronic transcript. Every UTR is either 5', 3' or internal." [SO:cjm] synonym: "internal UTR" EXACT [] is_a: SO:0000203 ! UTR [Term] id: SO:0000242 name: untranslated_region_polycistronic_mRNA def: "The untranslated sequence separating the 'cistrons' of multicistronic mRNA." [SO:ke] synonym: "untranslated region polycistronic mRNA" EXACT [] is_a: SO:0000203 ! UTR [Term] id: SO:0000243 name: internal_ribosome_entry_site def: "Sequence element that recruits a ribosomal subunit to internal mRNA for translation initiation." [SO:ke] synonym: "internal ribosomal entry sequence" EXACT [] synonym: "internal ribosomal entry site" EXACT [] synonym: "internal ribosome entry sequence" RELATED [] synonym: "internal ribosome entry site" EXACT [] synonym: "IRES" EXACT [] xref: http://en.wikipedia.org/wiki/Internal_ribosome_entry_site "wiki" is_a: SO:0000139 ! ribosome_entry_site [Term] id: SO:0000244 name: four_cutter_restriction_site synonym: "4-cutter_restriction_site" RELATED [] synonym: "four-cutter_restriction_sit" RELATED [] is_obsolete: true [Term] id: SO:0000245 name: mRNA_by_polyadenylation_status is_obsolete: true [Term] id: SO:0000246 name: polyadenylated def: "A attribute describing the addition of a poly A tail to the 3' end of a mRNA molecule." [SO:ke] is_a: SO:0000863 ! mRNA_attribute [Term] id: SO:0000247 name: mRNA_not_polyadenylated is_obsolete: true [Term] id: SO:0000248 name: sequence_length_variation synonym: "sequence length variation" EXACT [] is_a: SO:1000002 ! substitution [Term] id: SO:0000249 name: six_cutter_restriction_site synonym: "6-cutter_restriction_site" RELATED [] synonym: "six-cutter_restriction_site" RELATED [] is_obsolete: true [Term] id: SO:0000250 name: modified_RNA_base_feature def: "A post_transcriptionally modified base." [SO:ke] synonym: "modified RNA base feature" EXACT [] is_a: SO:0001236 ! base [Term] id: SO:0000251 name: eight_cutter_restriction_site synonym: "8-cutter_restriction_site" RELATED [] synonym: "eight-cutter_restriction_site" RELATED [] is_obsolete: true [Term] id: SO:0000252 name: rRNA def: "RNA that comprises part of a ribosome, and that can provide both structural scaffolding and catalytic activity." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html, ISBN:0198506732] subset: SOFA synonym: "ribosomal ribonucleic acid" EXACT [] synonym: "ribosomal RNA" EXACT [] xref: http://en.wikipedia.org/wiki/RRNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000209 ! rRNA_primary_transcript [Term] id: SO:0000253 name: tRNA def: "Transfer RNA (tRNA) molecules are approximately 80 nucleotides in length. Their secondary structure includes four short double-helical elements and three loops (D, anti-codon, and T loops). Further hydrogen bonds mediate the characteristic L-shaped molecular structure. Transfer RNAs have two regions of fundamental functional importance: the anti-codon, which is responsible for specific mRNA codon recognition, and the 3' end, to which the tRNA's corresponding amino acid is attached (by aminoacyl-tRNA synthetases). Transfer RNAs cope with the degeneracy of the genetic code in two manners: having more than one tRNA (with a specific anti-codon) for a particular amino acid; and 'wobble' base-pairing, i.e. permitting non-standard base-pairing at the 3rd anti-codon position." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00005, ISBN:0198506732] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "transfer ribonucleic acid" RELATED [] synonym: "transfer RNA" RELATED [] xref: http://en.wikipedia.org/wiki/TRNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000254 name: alanyl_tRNA def: "A tRNA sequence that has an alanine anticodon, and a 3' alanine binding region." [SO:ke] synonym: "alanyl tRNA" EXACT [] synonym: "alanyl-transfer ribonucleic acid" EXACT [] synonym: "alanyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000211 ! alanine_tRNA_primary_transcript [Term] id: SO:0000255 name: rRNA_small_subunit_primary_transcript def: "A primary transcript encoding a small ribosomal subunit RNA." [SO:ke] synonym: "rRNA small subunit primary transcript" EXACT [] is_a: SO:0000209 ! rRNA_primary_transcript [Term] id: SO:0000256 name: asparaginyl_tRNA def: "A tRNA sequence that has an asparagine anticodon, and a 3' asparagine binding region." [SO:ke] synonym: "asparaginyl tRNA" EXACT [] synonym: "asparaginyl-transfer ribonucleic acid" EXACT [] synonym: "asparaginyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000213 ! asparagine_tRNA_primary_transcript [Term] id: SO:0000257 name: aspartyl_tRNA def: "A tRNA sequence that has an aspartic acid anticodon, and a 3' aspartic acid binding region." [SO:ke] synonym: "aspartyl tRNA" EXACT [] synonym: "aspartyl-transfer ribonucleic acid" EXACT [] synonym: "aspartyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000214 ! aspartic_acid_tRNA_primary_transcript [Term] id: SO:0000258 name: cysteinyl_tRNA def: "A tRNA sequence that has a cysteine anticodon, and a 3' cysteine binding region." [SO:ke] synonym: "cysteinyl tRNA" EXACT [] synonym: "cysteinyl-transfer ribonucleic acid" EXACT [] synonym: "cysteinyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000215 ! cysteine_tRNA_primary_transcript [Term] id: SO:0000259 name: glutaminyl_tRNA def: "A tRNA sequence that has a glutamine anticodon, and a 3' glutamine binding region." [SO:ke] synonym: "glutaminyl tRNA" EXACT [] synonym: "glutaminyl-transfer ribonucleic acid" EXACT [] synonym: "glutaminyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000216 ! glutamic_acid_tRNA_primary_transcript [Term] id: SO:0000260 name: glutamyl_tRNA def: "A tRNA sequence that has a glutamic acid anticodon, and a 3' glutamic acid binding region." [SO:ke] synonym: "glutamyl tRNA" EXACT [] synonym: "glutamyl-transfer ribonucleic acid" EXACT [] synonym: "glutamyl-transfer RNA" RELATED [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000217 ! glutamine_tRNA_primary_transcript [Term] id: SO:0000261 name: glycyl_tRNA def: "A tRNA sequence that has a glycine anticodon, and a 3' glycine binding region." [SO:ke] synonym: "glycyl tRNA" EXACT [] synonym: "glycyl-transfer ribonucleic acid" RELATED [] synonym: "glycyl-transfer RNA" RELATED [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000218 ! glycine_tRNA_primary_transcript [Term] id: SO:0000262 name: histidyl_tRNA def: "A tRNA sequence that has a histidine anticodon, and a 3' histidine binding region." [SO:ke] synonym: "histidyl tRNA" EXACT [] synonym: "histidyl-transfer ribonucleic acid" EXACT [] synonym: "histidyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000219 ! histidine_tRNA_primary_transcript [Term] id: SO:0000263 name: isoleucyl_tRNA def: "A tRNA sequence that has an isoleucine anticodon, and a 3' isoleucine binding region." [SO:ke] synonym: "isoleucyl tRNA" EXACT [] synonym: "isoleucyl-transfer ribonucleic acid" EXACT [] synonym: "isoleucyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000220 ! isoleucine_tRNA_primary_transcript [Term] id: SO:0000264 name: leucyl_tRNA def: "A tRNA sequence that has a leucine anticodon, and a 3' leucine binding region." [SO:ke] synonym: "leucyl tRNA" EXACT [] synonym: "leucyl-transfer ribonucleic acid" EXACT [] synonym: "leucyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000221 ! leucine_tRNA_primary_transcript [Term] id: SO:0000265 name: lysyl_tRNA def: "A tRNA sequence that has a lysine anticodon, and a 3' lysine binding region." [SO:ke] synonym: "lysyl tRNA" EXACT [] synonym: "lysyl-transfer ribonucleic acid" EXACT [] synonym: "lysyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000222 ! lysine_tRNA_primary_transcript [Term] id: SO:0000266 name: methionyl_tRNA def: "A tRNA sequence that has a methionine anticodon, and a 3' methionine binding region." [SO:ke] synonym: "methionyl tRNA" EXACT [] synonym: "methionyl-transfer ribonucleic acid" EXACT [] synonym: "methionyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000223 ! methionine_tRNA_primary_transcript [Term] id: SO:0000267 name: phenylalanyl_tRNA def: "A tRNA sequence that has a phenylalanine anticodon, and a 3' phenylalanine binding region." [SO:ke] synonym: "phenylalanyl tRNA" EXACT [] synonym: "phenylalanyl-transfer ribonucleic acid" EXACT [] synonym: "phenylalanyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000224 ! phenylalanine_tRNA_primary_transcript [Term] id: SO:0000268 name: prolyl_tRNA def: "A tRNA sequence that has a proline anticodon, and a 3' proline binding region." [SO:ke] synonym: "prolyl tRNA" EXACT [] synonym: "prolyl-transfer ribonucleic acid" EXACT [] synonym: "prolyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000225 ! proline_tRNA_primary_transcript [Term] id: SO:0000269 name: seryl_tRNA def: "A tRNA sequence that has a serine anticodon, and a 3' serine binding region." [SO:ke] synonym: "seryl tRNA" EXACT [] synonym: "seryl-transfer ribonucleic acid" RELATED [] synonym: "seryl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000226 ! serine_tRNA_primary_transcript [Term] id: SO:0000270 name: threonyl_tRNA def: "A tRNA sequence that has a threonine anticodon, and a 3' threonine binding region." [SO:ke] synonym: "threonyl tRNA" EXACT [] synonym: "threonyl-transfer ribonucleic acid" EXACT [] synonym: "threonyl-transfer RNA" RELATED [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000227 ! threonine_tRNA_primary_transcript [Term] id: SO:0000271 name: tryptophanyl_tRNA def: "A tRNA sequence that has a tryptophan anticodon, and a 3' tryptophan binding region." [SO:ke] synonym: "tryptophanyl tRNA" EXACT [] synonym: "tryptophanyl-transfer ribonucleic acid" EXACT [] synonym: "tryptophanyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000228 ! tryptophan_tRNA_primary_transcript [Term] id: SO:0000272 name: tyrosyl_tRNA def: "A tRNA sequence that has a tyrosine anticodon, and a 3' tyrosine binding region." [SO:ke] synonym: "tyrosyl tRNA" EXACT [] synonym: "tyrosyl-transfer ribonucleic acid" EXACT [] synonym: "tyrosyl-transfer RNA" RELATED [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000229 ! tyrosine_tRNA_primary_transcript [Term] id: SO:0000273 name: valyl_tRNA def: "A tRNA sequence that has a valine anticodon, and a 3' valine binding region." [SO:ke] synonym: "valyl tRNA" EXACT [] synonym: "valyl-transfer ribonucleic acid" EXACT [] synonym: "valyl-transfer RNA" RELATED [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000230 ! valine_tRNA_primary_transcript [Term] id: SO:0000274 name: snRNA def: "A small nuclear RNA molecule involved in pre-mRNA splicing and processing." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html, PMID:11733745, WB:ems] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "small nuclear RNA" EXACT [] xref: http://en.wikipedia.org/wiki/SnRNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000231 ! snRNA_primary_transcript [Term] id: SO:0000275 name: snoRNA def: "A snoRNA (small nucleolar RNA) is any one of a class of small RNAs that are associated with the eukaryotic nucleus as components of small nucleolar ribonucleoproteins. They participate in the processing or modifications of many RNAs, mostly ribosomal RNAs (rRNAs) though snoRNAs are also known to target other classes of RNA, including spliceosomal RNAs, tRNAs, and mRNAs via a stretch of sequence that is complementary to a sequence in the targeted RNA." [GOC:kgc] subset: SOFA synonym: "small nucleolar RNA" EXACT [] xref: http://en.wikipedia.org/wiki/SnoRNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000232 ! snoRNA_primary_transcript [Term] id: SO:0000276 name: miRNA def: "Small, ~22-nt, RNA molecule that is the endogenous transcript of a miRNA gene. Micro RNAs are produced from precursor molecules (SO:0000647) that can form local hairpin structures, which ordinarily are processed (via the Dicer pathway) such that a single miRNA molecule accumulates from one arm of a hairpin precursor molecule. Micro RNAs may trigger the cleavage of their target molecules or act as translational repressors." [PMID:12592000] subset: SOFA synonym: "micro RNA" EXACT [] synonym: "microRNA" EXACT [] xref: http://en.wikipedia.org/wiki/MiRNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA relationship: derives_from SO:0000647 ! miRNA_primary_transcript [Term] id: SO:0000277 name: bound_by_factor def: "An attribute describing a sequence that is bound by another molecule." [SO:ke] comment: Formerly called transcript_by_bound_factor. synonym: "bound by factor" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000278 name: transcript_bound_by_nucleic_acid def: "A transcript that is bound by a nucleic acid." [SO:xp] comment: Formerly called transcript_by_bound_nucleic_acid. synonym: "transcript bound by nucleic acid" EXACT [] is_a: SO:0000673 ! transcript intersection_of: SO:0000673 ! transcript intersection_of: has_quality SO:0000876 ! bound_by_nucleic_acid relationship: has_quality SO:0000876 ! bound_by_nucleic_acid [Term] id: SO:0000279 name: transcript_bound_by_protein def: "A transcript that is bound by a protein." [SO:xp] comment: Formerly called transcript_by_bound_protein. synonym: "transcript bound by protein" EXACT [] is_a: SO:0000673 ! transcript intersection_of: SO:0000673 ! transcript intersection_of: has_quality SO:0000875 ! bound_by_protein relationship: has_quality SO:0000875 ! bound_by_protein [Term] id: SO:0000280 name: engineered_gene def: "A gene that is engineered." [SO:xp] synonym: "engineered gene" EXACT [] is_a: SO:0000704 ! gene is_a: SO:0000804 ! engineered_region intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000281 name: engineered_foreign_gene def: "A gene that is engineered and foreign." [SO:xp] synonym: "engineered foreign gene" EXACT [] is_a: SO:0000280 ! engineered_gene is_a: SO:0000285 ! foreign_gene is_a: SO:0000805 ! engineered_foreign_region intersection_of: SO:0000280 ! engineered_gene intersection_of: has_quality SO:0000783 ! engineered intersection_of: has_quality SO:0000784 ! foreign relationship: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000282 name: mRNA_with_minus_1_frameshift def: "An mRNA with a minus 1 frameshift." [SO:xp] synonym: "mRNA with minus 1 frameshift" EXACT [] is_a: SO:0000108 ! mRNA_with_frameshift intersection_of: SO:0000108 ! mRNA_with_frameshift intersection_of: has_quality SO:0000866 ! minus_1_frameshift relationship: has_quality SO:0000866 ! minus_1_frameshift [Term] id: SO:0000283 name: engineered_foreign_transposable_element_gene def: "A transposable_element that is engineered and foreign." [SO:xp] synonym: "engineered foreign transposable element gene" EXACT [] is_a: SO:0000111 ! transposable_element_gene is_a: SO:0000281 ! engineered_foreign_gene intersection_of: SO:0000111 ! transposable_element_gene intersection_of: has_quality SO:0000783 ! engineered intersection_of: has_quality SO:0000784 ! foreign relationship: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000284 name: type_I_enzyme_restriction_site def: "The recognition site is bipartite and interrupted." [http://www.promega.com] is_obsolete: true [Term] id: SO:0000285 name: foreign_gene def: "A gene that is foreign." [SO:xp] synonym: "foreign gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000784 ! foreign relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000286 name: long_terminal_repeat def: "A sequence directly repeated at both ends of a defined sequence, of the sort typically found in retroviruses." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "direct terminal repeat" RELATED [] synonym: "long terminal repeat" EXACT [] synonym: "LTR" EXACT [] xref: http://en.wikipedia.org/wiki/Long_terminal_repeat "wiki" is_a: SO:0000657 ! repeat_region relationship: part_of SO:0000186 ! LTR_retrotransposon [Term] id: SO:0000287 name: fusion_gene def: "A gene that is a fusion." [SO:xp] synonym: "fusion gene" EXACT [] xref: http://en.wikipedia.org/wiki/Fusion_gene "wiki" is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000806 ! fusion relationship: has_quality SO:0000806 ! fusion [Term] id: SO:0000288 name: engineered_fusion_gene def: "A fusion gene that is engineered." [SO:xp] synonym: "engineered fusion gene" EXACT [] is_a: SO:0000280 ! engineered_gene is_a: SO:0000287 ! fusion_gene intersection_of: SO:0000287 ! fusion_gene intersection_of: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000289 name: microsatellite def: "A repeat_region containing repeat_units (2 to 4 bp) that is repeated multiple times in tandem." [http://www.informatics.jax.org/silver/glossary.shtml] subset: SOFA synonym: "microsatellite locus" EXACT [] synonym: "microsatellite marker" EXACT [] synonym: "VNTR" EXACT [] xref: http://en.wikipedia.org/wiki/Microsatellite "wiki" is_a: SO:0000005 ! satellite_DNA [Term] id: SO:0000290 name: dinucleotide_repeat_microsatellite_feature synonym: "dinucleotide repeat microsatellite" EXACT [] synonym: "dinucleotide repeat microsatellite feature" EXACT [] synonym: "dinucleotide repeat microsatellite locus" EXACT [] synonym: "dinucleotide repeat microsatellite marker" EXACT [] is_a: SO:0000289 ! microsatellite [Term] id: SO:0000291 name: trinucleotide_repeat_microsatellite_feature synonym: "dinucleotide repeat microsatellite marker" RELATED [] synonym: "rinucleotide repeat microsatellite" EXACT [] synonym: "trinucleotide repeat microsatellite feature" EXACT [] synonym: "trinucleotide repeat microsatellite locus" EXACT [] is_a: SO:0000289 ! microsatellite [Term] id: SO:0000292 name: repetitive_element is_obsolete: true [Term] id: SO:0000293 name: engineered_foreign_repetitive_element def: "A repetitive element that is engineered and foreign." [SO:xp] synonym: "engineered foreign repetitive element" EXACT [] is_a: SO:0000657 ! repeat_region is_a: SO:0000805 ! engineered_foreign_region intersection_of: SO:0000657 ! repeat_region intersection_of: has_quality SO:0000783 ! engineered intersection_of: has_quality SO:0000784 ! foreign relationship: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000294 name: inverted_repeat def: "The sequence is complementarily repeated on the opposite strand. It is a palindrome, and it may, or may not be hyphenated. Examples: GCTGATCAGC, or GCTGA-----TCAGC." [SO:ke] subset: SOFA synonym: "inverted repeat" EXACT [] synonym: "inverted repeat sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Inverted_repeat "wiki" is_a: SO:0000657 ! repeat_region [Term] id: SO:0000295 name: U12_intron def: "A type of spliceosomal intron spliced by the U12 spliceosome, that includes U11, U12, U4atac/U6atac and U5 snRNAs." [PMID:9428511] comment: May have either GT-AC or AT-AC 5' and 3' boundaries. synonym: "U12 intron" EXACT [] synonym: "U12-dependent intron" EXACT [] is_a: SO:0000662 ! spliceosomal_intron [Term] id: SO:0000296 name: origin_of_replication def: "The origin of replication; starting site for duplication of a nucleic acid molecule to give two identical copies." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "ori" EXACT [] synonym: "origin of replication" EXACT [] xref: http://en.wikipedia.org/wiki/Origin_of_replication "wiki" is_a: SO:0001411 ! biological_region relationship: part_of SO:0001235 ! replicon [Term] id: SO:0000297 name: D_loop def: "Displacement loop; a region within mitochondrial DNA in which a short stretch of RNA is paired with one strand of DNA, displacing the original partner DNA strand in this region; also used to describe the displacement of a region of one strand of duplex DNA by a single stranded invader in the reaction catalyzed by RecA protein." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "D-loop" EXACT [] synonym: "displacement loop" RELATED [] xref: http://en.wikipedia.org/wiki/D_loop "wiki" is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000298 name: recombination_feature synonym: "recombination feature" EXACT [] is_a: SO:0001411 ! biological_region [Term] id: SO:0000299 name: specific_recombination_site synonym: "specific recombination site" EXACT [] is_a: SO:0000669 ! sequence_rearrangement_feature [Term] id: SO:0000300 name: recombination_feature_of_rearranged_gene synonym: "recombination feature of rearranged gene" EXACT [] is_a: SO:0000299 ! specific_recombination_site [Term] id: SO:0000301 name: vertebrate_immune_system_gene_recombination_feature synonym: "vertebrate immune system gene recombination feature" EXACT [] is_a: SO:0000300 ! recombination_feature_of_rearranged_gene [Term] id: SO:0000302 name: J_gene_recombination_feature def: "Recombination signal including J-heptamer, J-spacer and J-nonamer in 5' of J-region of a J-gene or J-sequence." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J gene recombination feature" EXACT [] synonym: "J-RS" EXACT [] is_a: SO:0000939 ! vertebrate_immune_system_gene_recombination_signal_feature [Term] id: SO:0000303 name: clip def: "Part of the primary transcript that is clipped off during processing." [SO:ke] subset: SOFA is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000304 name: type_II_enzyme_restriction_site def: "The recognition site is either palindromic, partially palindromic or an interrupted palindrome. Cleavage occurs within the recognition site." [http://www.promega.com] is_obsolete: true [Term] id: SO:0000305 name: modified_DNA_base def: "A modified nucleotide, i.e. a nucleotide other than A, T, C. G." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: Modified base:. subset: SOFA synonym: "modified base site" EXACT [] is_a: SO:0001236 ! base is_a: SO:0001720 ! epigenetically_modified_region [Term] id: SO:0000306 name: methylated_DNA_base_feature def: "A nucleotide modified by methylation." [SO:ke] subset: SOFA synonym: "methylated base feature" EXACT [] is_a: SO:0000305 ! modified_DNA_base [Term] id: SO:0000307 name: CpG_island def: "Regions of a few hundred to a few thousand bases in vertebrate genomes that are relatively GC and CpG rich; they are typically unmethylated and often found near the 5' ends of genes." [SO:rd] subset: SOFA synonym: "CG island" EXACT [] synonym: "CpG island" EXACT [] xref: http://en.wikipedia.org/wiki/CpG_island "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000308 name: sequence_feature_locating_method is_obsolete: true [Term] id: SO:0000309 name: computed_feature is_obsolete: true [Term] id: SO:0000310 name: predicted_ab_initio_computation is_obsolete: true [Term] id: SO:0000311 name: computed_feature_by_similarity def: "." [SO:ma] comment: similar to: is_obsolete: true [Term] id: SO:0000312 name: experimentally_determined def: "Attribute to describe a feature that has been experimentally verified." [SO:ke] synonym: "experimentally determined" EXACT [] is_a: SO:0000789 ! validated [Term] id: SO:0000313 name: stem_loop alt_id: SO:0000019 def: "A double-helical region of nucleic acid formed by base-pairing between adjacent (inverted) complementary sequences." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "RNA_hairpin_loop" EXACT [] synonym: "stem loop" EXACT [] synonym: "stem-loop" EXACT [] xref: http://en.wikipedia.org/wiki/Stem_loop "wiki" is_a: SO:0000122 ! RNA_sequence_secondary_structure [Term] id: SO:0000314 name: direct_repeat def: "A repeat where the same sequence is repeated in the same direction. Example: GCTGA-----GCTGA." [SO:ke] subset: SOFA synonym: "direct repeat" EXACT [] xref: http://en.wikipedia.org/wiki/Direct_repeat "wiki" is_a: SO:0000657 ! repeat_region [Term] id: SO:0000315 name: TSS def: "The first base where RNA polymerase begins to synthesize the RNA transcript." [SO:ke] subset: SOFA synonym: "transcription start site" EXACT [] is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000316 name: CDS def: "A contiguous sequence which begins with, and includes, a start codon and ends with, and includes, a stop codon." [SO:ma] subset: SOFA synonym: "coding sequence" EXACT [] is_a: SO:0000836 ! mRNA_region [Term] id: SO:0000317 name: cDNA_clone def: "Complementary DNA; A piece of DNA copied from an mRNA and spliced into a vector for propagation in a suitable host." [http://seqcore.brcf.med.umich.edu/doc/educ/dnapr/mbglossary/mbgloss.html] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "cDNA clone" EXACT [] is_a: SO:0000151 ! clone intersection_of: SO:0000151 ! clone intersection_of: has_quality SO:0000756 ! cDNA relationship: has_quality SO:0000756 ! cDNA [Term] id: SO:0000318 name: start_codon def: "First codon to be translated by a ribosome." [SO:ke] subset: SOFA synonym: "initiation codon" EXACT [] synonym: "start codon" EXACT [] xref: http://en.wikipedia.org/wiki/Start_codon "wiki" is_a: SO:0000360 ! codon [Term] id: SO:0000319 name: stop_codon def: "In mRNA, a set of three nucleotides that indicates the end of information for protein synthesis." [SO:ke] subset: SOFA synonym: "stop codon" EXACT [] xref: http://en.wikipedia.org/wiki/Stop_codon "wiki" is_a: SO:0000360 ! codon [Term] id: SO:0000320 name: intronic_splice_enhancer def: "Sequences within the intron that modulate splice site selection for some introns." [SO:ke] synonym: "intronic splice enhancer" EXACT [] is_a: SO:0000344 ! splice_enhancer is_a: SO:0000841 ! spliceosomal_intron_region [Term] id: SO:0000321 name: mRNA_with_plus_1_frameshift def: "An mRNA with a plus 1 frameshift." [SO:ke] synonym: "mRNA with plus 1 frameshift" EXACT [] is_a: SO:0000108 ! mRNA_with_frameshift intersection_of: SO:0000108 ! mRNA_with_frameshift intersection_of: has_quality SO:0000868 ! plus_1_frameshift relationship: has_quality SO:0000868 ! plus_1_frameshift [Term] id: SO:0000322 name: nuclease_hypersensitive_site synonym: "nuclease hypersensitive site" EXACT [] is_a: SO:0000684 ! nuclease_sensitive_site [Term] id: SO:0000323 name: coding_start def: "The first base to be translated into protein." [SO:ke] synonym: "coding start" EXACT [] synonym: "translation initiation site" EXACT [] synonym: "translation start" RELATED [] is_a: SO:0000851 ! CDS_region [Term] id: SO:0000324 name: tag def: "A nucleotide sequence that may be used to identify a larger sequence." [SO:ke] subset: SOFA is_a: SO:0000696 ! oligo [Term] id: SO:0000325 name: rRNA_large_subunit_primary_transcript def: "A primary transcript encoding a large ribosomal subunit RNA." [SO:ke] subset: SOFA synonym: "35S rRNA primary transcript" EXACT [] synonym: "rRNA large subunit primary transcript" EXACT [] is_a: SO:0000209 ! rRNA_primary_transcript [Term] id: SO:0000326 name: SAGE_tag def: "A short diagnostic sequence tag, serial analysis of gene expression (SAGE), that allows the quantitative and simultaneous analysis of a large number of transcripts." [http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=7570003&dopt=Abstract] subset: SOFA synonym: "SAGE tag" EXACT [] is_a: SO:0000324 ! tag [Term] id: SO:0000327 name: coding_end def: "The last base to be translated into protein. It does not include the stop codon." [SO:ke] synonym: "coding end" EXACT [] synonym: "translation termination site" EXACT [] synonym: "translation_end" EXACT [] is_a: SO:0000851 ! CDS_region [Term] id: SO:0000328 name: microarray_oligo synonym: "microarray oligo" EXACT [] synonym: "microarray oligonucleotide" EXACT [] is_a: SO:0000051 ! probe [Term] id: SO:0000329 name: mRNA_with_plus_2_frameshift def: "An mRNA with a plus 2 frameshift." [SO:xp] synonym: "mRNA with plus 2 frameshift" EXACT [] is_a: SO:0000108 ! mRNA_with_frameshift intersection_of: SO:0000108 ! mRNA_with_frameshift intersection_of: has_quality SO:0000869 ! plus_2_framshift relationship: has_quality SO:0000869 ! plus_2_framshift [Term] id: SO:0000330 name: conserved_region def: "Region of sequence similarity by descent from a common ancestor." [SO:ke] subset: SOFA synonym: "conserved region" EXACT [] xref: http://en.wikipedia.org/wiki/Conserved_region "wiki" is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000331 name: STS def: "Short (typically a few hundred base pairs) DNA sequence that has a single occurrence in a genome and whose location and base sequence are known." [http://www.biospace.com] subset: SOFA synonym: "sequence tag site" EXACT [] is_a: SO:0000324 ! tag [Term] id: SO:0000332 name: coding_conserved_region def: "Coding region of sequence similarity by descent from a common ancestor." [SO:ke] subset: SOFA synonym: "coding conserved region" EXACT [] is_a: SO:0000330 ! conserved_region [Term] id: SO:0000333 name: exon_junction def: "The boundary between two exons in a processed transcript." [SO:ke] subset: SOFA synonym: "exon junction" EXACT [] is_a: SO:0000699 ! junction relationship: part_of SO:0000233 ! mature_transcript [Term] id: SO:0000334 name: nc_conserved_region def: "Non-coding region of sequence similarity by descent from a common ancestor." [SO:ke] subset: SOFA synonym: "nc conserved region" EXACT [] synonym: "noncoding conserved region" EXACT [] is_a: SO:0000330 ! conserved_region [Term] id: SO:0000335 name: mRNA_with_minus_2_frameshift def: "A mRNA with a minus 2 frameshift." [SO:ke] synonym: "mRNA with minus 2 frameshift" EXACT [] is_a: SO:0000108 ! mRNA_with_frameshift intersection_of: SO:0000108 ! mRNA_with_frameshift intersection_of: has_quality SO:0000867 ! minus_2_frameshift relationship: has_quality SO:0000867 ! minus_2_frameshift [Term] id: SO:0000336 name: pseudogene def: "A sequence that closely resembles a known functional gene, at another locus within a genome, that is non-functional as a consequence of (usually several) mutations that prevent either its transcription or translation (or both). In general, pseudogenes result from either reverse transcription of a transcript of their \"normal\" paralog (SO:0000043) (in which case the pseudogene typically lacks introns and includes a poly(A) tail) or from recombination (SO:0000044) (in which case the pseudogene is typically a tandem duplication of its \"normal\" paralog)." [http://www.ucl.ac.uk/~ucbhjow/b241/glossary.html] subset: SOFA xref: http://en.wikipedia.org/wiki/Pseudogene "wiki" is_a: SO:0001411 ! biological_region relationship: non_functional_homolog_of SO:0000704 ! gene [Term] id: SO:0000337 name: RNAi_reagent def: "A double stranded RNA duplex, at least 20bp long, used experimentally to inhibit gene function by RNA interference." [SO:rd] subset: SOFA synonym: "RNAi reagent" EXACT [] is_a: SO:0000442 ! ds_oligo [Term] id: SO:0000338 name: MITE def: "A highly repetitive and short (100-500 base pair) transposable element with terminal inverted repeats (TIR) and target site duplication (TSD). MITEs do not encode proteins." [http://www.pnas.org/cgi/content/full/97/18/10083] synonym: "miniature inverted repeat transposable element" EXACT [] is_a: SO:0000208 ! terminal_inverted_repeat_element [Term] id: SO:0000339 name: recombination_hotspot def: "A region in a genome which promotes recombination." [SO:rd] synonym: "recombination hotspot" EXACT [] xref: http://en.wikipedia.org/wiki/Recombination_hotspot "wiki" is_a: SO:0000298 ! recombination_feature [Term] id: SO:0000340 name: chromosome def: "Structural unit composed of a nucleic acid molecule which controls its own replication through the interaction of specific proteins at one or more origins of replication." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA xref: http://en.wikipedia.org/wiki/Chromosome "wiki" is_a: SO:0001235 ! replicon [Term] id: SO:0000341 name: chromosome_band def: "A cytologically distinguishable feature of a chromosome, often made visible by staining, and usually alternating light and dark." [SO:ma] subset: SOFA synonym: "chromosome band" EXACT [] synonym: "cytoband" EXACT [] synonym: "cytological band" EXACT [] xref: http://en.wikipedia.org/wiki/Cytological_band "wiki" is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000342 name: site_specific_recombination_target_region synonym: "site specific recombination target region" EXACT [] is_a: SO:0000299 ! specific_recombination_site [Term] id: SO:0000343 name: match def: "A region of sequence, aligned to another sequence with some statistical significance, using an algorithm such as BLAST or SIM4." [SO:ke] subset: SOFA is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000344 name: splice_enhancer def: "Region of a transcript that regulates splicing." [SO:ke] subset: SOFA synonym: "splice enhancer" EXACT [] is_a: SO:0001056 ! splicing_regulatory_region [Term] id: SO:0000345 name: EST def: "A tag produced from a single sequencing read from a cDNA clone or PCR product; typically a few hundred base pairs long." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "expressed sequence tag" EXACT [] is_a: SO:0000324 ! tag relationship: derives_from SO:0000234 ! mRNA [Term] id: SO:0000346 name: loxP_site synonym: "Cre-recombination target region" RELATED [] synonym: "loxP site" EXACT [] is_a: SO:0000947 ! resolution_site [Term] id: SO:0000347 name: nucleotide_match def: "A match against a nucleotide sequence." [SO:ke] subset: SOFA synonym: "nucleotide match" EXACT [] is_a: SO:0000343 ! match [Term] id: SO:0000348 name: nucleic_acid def: "An attribute describing a sequence consisting of nucleobases bound to repeating units. The forms found in nature are deoxyribonucleic acid (DNA), where the repeating units are 2-deoxy-D-ribose rings connected to a phosphate backbone, and ribonucleic acid (RNA), where the repeating units are D-ribose rings connected to a phosphate backbone." [CHEBI:33696, RSC:cb] synonym: "nucleic acid" EXACT [] xref: http://en.wikipedia.org/wiki/Nucleic_acid "wiki" is_a: SO:0000443 ! polymer_attribute [Term] id: SO:0000349 name: protein_match def: "A match against a protein sequence." [SO:ke] subset: SOFA synonym: "protein match" EXACT [] is_a: SO:0000343 ! match [Term] id: SO:0000350 name: FRT_site def: "An inversion site found on the Saccharomyces cerevisiae 2 micron plasmid." [SO:ma] synonym: "FLP recombination target region" EXACT [] synonym: "FRT site" EXACT [] is_a: SO:0000948 ! inversion_site [Term] id: SO:0000351 name: synthetic_sequence def: "An attribute to decide a sequence of nucleotides, nucleotide analogs, or amino acids that has been designed by an experimenter and which may, or may not, correspond with any natural sequence." [SO:ma] synonym: "synthetic sequence" EXACT [] is_a: SO:0000443 ! polymer_attribute [Term] id: SO:0000352 name: DNA def: "An attribute describing a sequence consisting of nucleobases bound to a repeating unit made of a 2-deoxy-D-ribose ring connected to a phosphate backbone." [RSC:cb] is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0000353 name: sequence_assembly def: "A sequence of nucleotides that has been algorithmically derived from an alignment of two or more different sequences." [SO:ma] subset: SOFA synonym: "sequence assembly" EXACT [] xref: http://en.wikipedia.org/wiki/Sequence_assembly "wiki" is_a: SO:0001248 ! assembly [Term] id: SO:0000354 name: group_1_intron_homing_endonuclease_target_region def: "A region of intronic nucleotide sequence targeted by a nuclease enzyme." [SO:ke] synonym: "group 1 intron homing endonuclease target region" EXACT [] is_a: SO:0000684 ! nuclease_sensitive_site [Term] id: SO:0000355 name: haplotype_block def: "A region of the genome which is co-inherited as the result of the lack of historic recombination within it." [SO:ma] synonym: "haplotype block" EXACT [] is_a: SO:0000298 ! recombination_feature [Term] id: SO:0000356 name: RNA def: "An attribute describing a sequence consisting of nucleobases bound to a repeating unit made of a D-ribose ring connected to a phosphate backbone." [RSC:cb] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0000357 name: flanked def: "An attribute describing a region that is bounded either side by a particular kind of region." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000359 name: floxed def: "An attribute describing sequence that is flanked by Lox-P sites." [SO:ke] xref: http://en.wikipedia.org/wiki/Floxed "wiki" is_a: SO:0000357 ! flanked [Term] id: SO:0000360 name: codon def: "A set of (usually) three nucleotide bases in a DNA or RNA sequence, which together code for a unique amino acid or the termination of translation and are contained within the CDS." [http://www.everythingbio.com/glos/definition.php?word=codon, SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Codon "wiki" is_a: SO:0000851 ! CDS_region [Term] id: SO:0000361 name: FRT_flanked def: "An attribute to describe sequence that is flanked by the FLP recombinase recognition site, FRT." [SO:ke] synonym: "FRT flanked" EXACT [] is_a: SO:0000357 ! flanked [Term] id: SO:0000362 name: invalidated_by_chimeric_cDNA def: "A cDNA clone constructed from more than one mRNA. Usually an experimental artifact." [SO:ma] synonym: "invalidated by chimeric cDNA" EXACT [] is_a: SO:0000790 ! invalidated [Term] id: SO:0000363 name: floxed_gene def: "A transgene that is floxed." [SO:xp] synonym: "floxed gene" EXACT [] is_a: SO:0000902 ! transgene intersection_of: SO:0000902 ! transgene intersection_of: has_quality SO:0000359 ! floxed relationship: has_quality SO:0000359 ! floxed [Term] id: SO:0000364 name: transposable_element_flanking_region def: "The region of sequence surrounding a transposable element." [SO:ke] synonym: "transposable element flanking region" EXACT [] is_a: SO:0000239 ! flanking_region [Term] id: SO:0000365 name: integron def: "A region encoding an integrase which acts at a site adjacent to it (attI_site) to insert DNA which must include but is not limited to an attC_site." [SO:as] xref: http://en.wikipedia.org/wiki/Integron "wiki" is_a: SO:0001039 ! integrated_mobile_genetic_element [Term] id: SO:0000366 name: insertion_site def: "The junction where an insertion occurred." [SO:ke] subset: SOFA synonym: "insertion site" EXACT [] is_a: SO:0000699 ! junction [Term] id: SO:0000367 name: attI_site def: "A region within an integron, adjacent to an integrase, at which site specific recombination involving an attC_site takes place." [SO:as] synonym: "attI site" EXACT [] is_a: SO:0000946 ! integration_excision_site relationship: part_of SO:0000365 ! integron [Term] id: SO:0000368 name: transposable_element_insertion_site def: "The junction in a genome where a transposable_element has inserted." [SO:ke] subset: SOFA synonym: "transposable element insertion site" EXACT [] is_a: SO:0000366 ! insertion_site [Term] id: SO:0000369 name: integrase_coding_region is_obsolete: true [Term] id: SO:0000370 name: small_regulatory_ncRNA def: "A non-coding RNA, usually with a specific secondary structure, that acts to regulate gene expression." [SO:ma] subset: SOFA synonym: "small regulatory ncRNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000371 name: conjugative_transposon def: "A transposon that encodes function required for conjugation." [http://www.sci.sdsu.edu/~smaloy/Glossary/C.html] synonym: "conjugative transposon" EXACT [] is_a: SO:0000182 ! DNA_transposon [Term] id: SO:0000372 name: enzymatic_RNA def: "An RNA sequence that has catalytic activity with or without an associated ribonucleoprotein." [RSC:cb] comment: This was moved to be a child of transcript (SO:0000673) because some enzymatic RNA regions are part of primary transcripts and some are part of processed transcripts. subset: SOFA synonym: "enzymatic RNA" EXACT [] is_a: SO:0000673 ! transcript intersection_of: SO:0000673 ! transcript intersection_of: has_quality SO:0001185 ! enzymatic relationship: has_quality SO:0001185 ! enzymatic [Term] id: SO:0000373 name: recombinationally_inverted_gene def: "A recombinationally rearranged gene by inversion." [SO:xp] synonym: "recombinationally inverted gene" EXACT [] is_a: SO:0000456 ! recombinationally_rearranged_gene intersection_of: SO:0000456 ! recombinationally_rearranged_gene intersection_of: has_quality SO:1000036 ! inversion relationship: has_quality SO:1000036 ! inversion [Term] id: SO:0000374 name: ribozyme def: "An RNA with catalytic activity." [SO:ma] subset: SOFA xref: http://en.wikipedia.org/wiki/Ribozyme "wiki" is_a: SO:0000372 ! enzymatic_RNA intersection_of: SO:0000372 ! enzymatic_RNA intersection_of: has_quality SO:0001186 ! ribozymic relationship: has_quality SO:0001186 ! ribozymic [Term] id: SO:0000375 name: rRNA_5_8S def: "5_8S ribosomal RNA (5. 8S rRNA) is a component of the large subunit of the eukaryotic ribosome. It is transcribed by RNA polymerase I as part of the 45S precursor that also contains 18S and 28S rRNA. Functionally, it is thought that 5.8S rRNA may be involved in ribosome translocation. It is also known to form covalent linkage to the p53 tumour suppressor protein. 5_8S rRNA is also found in archaea." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00002] subset: SOFA synonym: "5.8S LSU rRNA" EXACT [] synonym: "5.8S ribosomal RNA" EXACT [] synonym: "5.8S rRNA" EXACT [] synonym: "rRNA 5 8S" EXACT [] xref: http://en.wikipedia.org/wiki/5.8S_ribosomal_RNA "wiki" is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0000376 name: RNA_6S def: "A small (184-nt in E. coli) RNA that forms a hairpin type structure. 6S RNA associates with RNA polymerase in a highly specific manner. 6S RNA represses expression from a sigma70-dependent promoter during stationary phase." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00013] synonym: "6S RNA" EXACT [] synonym: "RNA 6S" EXACT [] xref: http://en.wikipedia.org/wiki/6S_RNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000377 name: CsrB_RsmB_RNA def: "An enterobacterial RNA that binds the CsrA protein. The CsrB RNAs contain a conserved motif CAGGXXG that is found in up to 18 copies and has been suggested to bind CsrA. The Csr regulatory system has a strong negative regulatory effect on glycogen biosynthesis, glyconeogenesis and glycogen catabolism and a positive regulatory effect on glycolysis. In other bacteria such as Erwinia caratovara the RsmA protein has been shown to regulate the production of virulence determinants, such extracellular enzymes. RsmA binds to RsmB regulatory RNA which is also a member of this family." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00018] synonym: "CsrB RsmB RNA" EXACT [] synonym: "CsrB-RsmB RNA" EXACT [] is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000378 name: DsrA_RNA def: "DsrA RNA regulates both transcription, by overcoming transcriptional silencing by the nucleoid-associated H-NS protein, and translation, by promoting efficient translation of the stress sigma factor, RpoS. These two activities of DsrA can be separated by mutation: the first of three stem-loops of the 85 nucleotide RNA is necessary for RpoS translation but not for anti-H-NS action, while the second stem-loop is essential for antisilencing and less critical for RpoS translation. The third stem-loop, which behaves as a transcription terminator, can be substituted by the trp transcription terminator without loss of either DsrA function. The sequence of the first stem-loop of DsrA is complementary with the upstream leader portion of RpoS messenger RNA, suggesting that pairing of DsrA with the RpoS message might be important for translational regulation." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00014] synonym: "DsrA RNA" EXACT [] xref: http://en.wikipedia.org/wiki/DsrA_RNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000379 name: GcvB_RNA def: "A small untranslated RNA involved in expression of the dipeptide and oligopeptide transport systems in Escherichia coli." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00022] synonym: "GcvB RNA" EXACT [] xref: http://en.wikipedia.org/wiki/GcvB_RNA "wiki" is_a: SO:0000378 ! DsrA_RNA [Term] id: SO:0000380 name: hammerhead_ribozyme def: "A small catalytic RNA motif that catalyzes self-cleavage reaction. Its name comes from its secondary structure which resembles a carpenter's hammer. The hammerhead ribozyme is involved in the replication of some viroid and some satellite RNAs." [PMID:2436805] subset: SOFA synonym: "hammerhead ribozyme" EXACT [] xref: http://en.wikipedia.org/wiki/Hammerhead_ribozyme "wiki" is_a: SO:0000715 ! RNA_motif intersection_of: SO:0000715 ! RNA_motif intersection_of: has_quality SO:0001186 ! ribozymic relationship: has_quality SO:0001186 ! ribozymic [Term] id: SO:0000381 name: group_IIA_intron synonym: "group IIA intron" EXACT [] is_a: SO:0000603 ! group_II_intron [Term] id: SO:0000382 name: group_IIB_intron synonym: "group IIB intron" EXACT [] is_a: SO:0000603 ! group_II_intron [Term] id: SO:0000383 name: MicF_RNA def: "A non-translated 93 nt antisense RNA that binds its target ompF mRNA and regulates ompF expression by inhibiting translation and inducing degradation of the message." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00033] synonym: "MicF RNA" EXACT [] xref: http://en.wikipedia.org/wiki/MicF_RNA "wiki" is_a: SO:0000644 ! antisense_RNA [Term] id: SO:0000384 name: OxyS_RNA def: "A small untranslated RNA which is induced in response to oxidative stress in Escherichia coli. Acts as a global regulator to activate or repress the expression of as many as 40 genes, including the fhlA-encoded transcriptional activator and the rpoS-encoded sigma(s) subunit of RNA polymerase. OxyS is bound by the Hfq protein, that increases the OxyS RNA interaction with its target messages." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00035] synonym: "OxyS RNA" EXACT [] xref: http://en.wikipedia.org/wiki/OxyS_RNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000385 name: RNase_MRP_RNA def: "The RNA molecule essential for the catalytic activity of RNase MRP, an enzymatically active ribonucleoprotein with two distinct roles in eukaryotes. In mitochondria it plays a direct role in the initiation of mitochondrial DNA replication. In the nucleus it is involved in precursor rRNA processing, where it cleaves the internal transcribed spacer 1 between 18S and 5.8S rRNAs." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00030] subset: SOFA synonym: "RNase MRP RNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000386 name: RNase_P_RNA def: "The RNA component of Ribonuclease P (RNase P), a ubiquitous endoribonuclease, found in archaea, bacteria and eukarya as well as chloroplasts and mitochondria. Its best characterized activity is the generation of mature 5 prime ends of tRNAs by cleaving the 5 prime leader elements of precursor-tRNAs. Cellular RNase Ps are ribonucleoproteins. RNA from bacterial RNase Ps retains its catalytic activity in the absence of the protein subunit, i.e. it is a ribozyme. Isolated eukaryotic and archaeal RNase P RNA has not been shown to retain its catalytic function, but is still essential for the catalytic activity of the holoenzyme. Although the archaeal and eukaryotic holoenzymes have a much greater protein content than the bacterial ones, the RNA cores from all the three lineages are homologous. Helices corresponding to P1, P2, P3, P4, and P10/11 are common to all cellular RNase P RNAs. Yet, there is considerable sequence variation, particularly among the eukaryotic RNAs." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00010] subset: SOFA synonym: "RNase P RNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000387 name: RprA_RNA def: "Translational regulation of the stationary phase sigma factor RpoS is mediated by the formation of a double-stranded RNA stem-loop structure in the upstream region of the rpoS messenger RNA, occluding the translation initiation site. Clones carrying rprA (RpoS regulator RNA) increased the translation of RpoS. The rprA gene encodes a 106 nucleotide regulatory RNA. As with DsrA Rfam:RF00014, RprA is predicted to form three stem-loops. Thus, at least two small RNAs, DsrA and RprA, participate in the positive regulation of RpoS translation. Unlike DsrA, RprA does not have an extensive region of complementarity to the RpoS leader, leaving its mechanism of action unclear. RprA is non-essential." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00034] synonym: "RprA RNA" EXACT [] xref: http://en.wikipedia.org/wiki/RprA_RNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000388 name: RRE_RNA def: "The Rev response element (RRE) is encoded within the HIV-env gene. Rev is an essential regulatory protein of HIV that binds an internal loop of the RRE leading, encouraging further Rev-RRE binding. This RNP complex is critical for mRNA export and hence for expression of the HIV structural proteins." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00036] synonym: "RRE RNA" EXACT [] is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000389 name: spot_42_RNA def: "A 109-nucleotide RNA of E. coli that seems to have a regulatory role on the galactose operon. Changes in Spot 42 levels are implicated in affecting DNA polymerase I levels." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00021] synonym: "spot-42 RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Spot_42_RNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000390 name: telomerase_RNA def: "The RNA component of telomerase, a reverse transcriptase that synthesizes telomeric DNA." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00025] subset: SOFA synonym: "telomerase RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Telomerase_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000391 name: U1_snRNA def: "U1 is a small nuclear RNA (snRNA) component of the spliceosome (involved in pre-mRNA splicing). Its 5' end forms complementary base pairs with the 5' splice junction, thus defining the 5' donor site of an intron. There are significant differences in sequence and secondary structure between metazoan and yeast U1 snRNAs, the latter being much longer (568 nucleotides as compared to 164 nucleotides in human). Nevertheless, secondary structure predictions suggest that all U1 snRNAs share a 'common core' consisting of helices I, II, the proximal region of III, and IV." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00003] subset: SOFA synonym: "small nuclear RNA U1" EXACT [RSC:cb] synonym: "snRNA U1" EXACT [RSC:cb] synonym: "U1 small nuclear RNA" EXACT [RSC:cb] synonym: "U1 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U1_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000392 name: U2_snRNA def: "U2 is a small nuclear RNA (snRNA) component of the spliceosome (involved in pre-mRNA splicing). Complementary binding between U2 snRNA (in an area lying towards the 5' end but 3' to hairpin I) and the branchpoint sequence (BPS) of the intron results in the bulging out of an unpaired adenine, on the BPS, which initiates a nucleophilic attack at the intronic 5' splice site, thus starting the first of two transesterification reactions that mediate splicing." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00004] subset: SOFA synonym: "small nuclear RNA U2" EXACT [RSC:CB] synonym: "snRNA U2" EXACT [RSC:CB] synonym: "U2 small nuclear RNA" EXACT [RSC:CB] synonym: "U2 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U2_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000393 name: U4_snRNA def: "U4 small nuclear RNA (U4 snRNA) is a component of the major U2-dependent spliceosome. It forms a duplex with U6, and with each splicing round, it is displaced from U6 (and the spliceosome) in an ATP-dependent manner, allowing U6 to refold and create the active site for splicing catalysis. A recycling process involving protein Prp24 re-anneals U4 and U6." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00015] subset: SOFA synonym: "small nuclear RNA U4" EXACT [RSC:cb] synonym: "snRNA U4" EXACT [RSC:cb] synonym: "U4 small nuclear RNA" EXACT [RSC:cb] synonym: "U4 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U4_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000394 name: U4atac_snRNA def: "An snRNA required for the splicing of the minor U12-dependent class of eukaryotic nuclear introns. It forms a base paired complex with U6atac_snRNA (SO:0000397)." [PMID:=12409455] subset: SOFA synonym: "small nuclear RNA U4atac" EXACT [RSC:cb] synonym: "snRNA U4atac" EXACT [RSC:cb] synonym: "U4atac small nuclear RNA" EXACT [RSC:cb] synonym: "U4atac snRNA" EXACT [] is_a: SO:0000274 ! snRNA [Term] id: SO:0000395 name: U5_snRNA def: "U5 RNA is a component of both types of known spliceosome. The precise function of this molecule is unknown, though it is known that the 5' loop is required for splice site selection and p220 binding, and that both the 3' stem-loop and the Sm site are important for Sm protein binding and cap methylation." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00020] subset: SOFA synonym: "small nuclear RNA U5" EXACT [RSC:cb] synonym: "snRNA U5" EXACT [RSC:cb] synonym: "U5 small nuclear RNA" EXACT [RSC:cb] synonym: "U5 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U5_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000396 name: U6_snRNA def: "U6 snRNA is a component of the spliceosome which is involved in splicing pre-mRNA. The putative secondary structure consensus base pairing is confined to a short 5' stem loop, but U6 snRNA is thought to form extensive base-pair interactions with U4 snRNA." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00015] subset: SOFA synonym: "small nuclear RNA U6" EXACT [RSC:cb] synonym: "snRNA U6" EXACT [RSC:cb] synonym: "U6 small nuclear RNA" EXACT [RSC:cb] synonym: "U6 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U6_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000397 name: U6atac_snRNA def: "U6atac_snRNA is an snRNA required for the splicing of the minor U12-dependent class of eukaryotic nuclear introns. It forms a base paired complex with U4atac_snRNA (SO:0000394)." [http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=retrieve&db=pubmed&list_uids=12409455&dopt=Abstract] subset: SOFA synonym: "snRNA U6atac" EXACT [RSC:cb] synonym: "U6atac small nuclear RNA" EXACT [RSC:cb] synonym: "U6atac snRNA" EXACT [RSC:cb] is_a: SO:0000274 ! snRNA [Term] id: SO:0000398 name: U11_snRNA def: "U11 snRNA plays a role in splicing of the minor U12-dependent class of eukaryotic nuclear introns, similar to U1 snRNA in the major class spliceosome it base pairs to the conserved 5' splice site sequence." [PMID:9622129] subset: SOFA synonym: "small nuclear RNA U11" EXACT [RSC:cb] synonym: "snRNA U11" EXACT [RSC:cb] synonym: "U11 small nuclear RNA" EXACT [RSC:cb] synonym: "U11 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U11_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000399 name: U12_snRNA def: "The U12 small nuclear (snRNA), together with U4atac/U6atac, U5, and U11 snRNAs and associated proteins, forms a spliceosome that cleaves a divergent class of low-abundance pre-mRNA introns." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00007] subset: SOFA synonym: "small nuclear RNA U12" EXACT [RSC:cb] synonym: "snRNA U12" EXACT [RSC:cb] synonym: "U12 small nuclear RNA" EXACT [RSC:cb] synonym: "U12 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U12_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000400 name: sequence_attribute def: "An attribute describes a quality of sequence." [SO:ke] synonym: "sequence attribute" EXACT [] [Term] id: SO:0000401 name: gene_attribute synonym: "gene attribute" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000402 name: enhancer_attribute is_obsolete: true [Term] id: SO:0000403 name: U14_snoRNA alt_id: SO:0005839 def: "U14 small nucleolar RNA (U14 snoRNA) is required for early cleavages of eukaryotic precursor rRNAs. In yeasts, this molecule possess a stem-loop region (known as the Y-domain) which is essential for function. A similar structure, but with a different consensus sequence, is found in plants, but is absent in vertebrates." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00016, PMID:2551119] comment: An evolutionarily conserved eukaryotic low molecular weight RNA capable of intermolecular hybridization with both homologous and heterologous 18S rRNA. subset: SOFA synonym: "small nucleolar RNA U14" EXACT [] synonym: "snoRNA U14" EXACT [] synonym: "U14 small nucleolar RNA" EXACT [] synonym: "U14 snoRNA" EXACT [] is_a: SO:0000593 ! C_D_box_snoRNA relationship: derives_from SO:0005837 ! U14_snoRNA_primary_transcript [Term] id: SO:0000404 name: vault_RNA def: "A family of RNAs are found as part of the enigmatic vault ribonucleoprotein complex. The complex consists of a major vault protein (MVP), two minor vault proteins (VPARP and TEP1), and several small untranslated RNA molecules. It has been suggested that the vault complex is involved in drug resistance." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00006] subset: SOFA synonym: "vault RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Vault_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000405 name: Y_RNA def: "Y RNAs are components of the Ro ribonucleoprotein particle (Ro RNP), in association with Ro60 and La proteins. The Y RNAs and Ro60 and La proteins are well conserved, but the function of the Ro RNP is not known. In humans the RNA component can be one of four small RNAs: hY1, hY3, hY4 and hY5. These small RNAs are predicted to fold into a conserved secondary structure containing three stem structures. The largest of the four, hY1, contains an additional hairpin." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00019] subset: SOFA synonym: "Y RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Y_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000406 name: twintron def: "An intron within an intron. Twintrons are group II or III introns, into which another group II or III intron has been transposed." [PMID:1899376, PMID:7823908] xref: http://en.wikipedia.org/wiki/Twintron "wiki" is_a: SO:0000188 ! intron [Term] id: SO:0000407 name: rRNA_18S def: "A large polynucleotide in eukaryotes, which functions as the small subunit of the ribosome." [SO:ke] subset: SOFA synonym: "18S ribosomal RNA" EXACT [] synonym: "18S rRNA" EXACT [] synonym: "rRNA 18S" EXACT [] xref: http://en.wikipedia.org/wiki/18S_ribosomal_RNA "wiki" is_a: SO:0000650 ! small_subunit_rRNA [Term] id: SO:0000408 name: site def: "The interbase position where something (eg an aberration) occurred." [SO:ke] is_obsolete: true [Term] id: SO:0000409 name: binding_site alt_id: BS:00033 def: "A biological_region of sequence that, in the molecule, interacts selectively and non-covalently with other molecules. A region on the surface of a molecule that may interact with another molecule. When applied to polypeptides: Amino acids involved in binding or interactions. It can also apply to an amino acid bond which is represented by the positions of the two flanking amino acids." [EBIBS:GAR, SO:ke] comment: See GO:0005488 : binding. subset: biosapiens subset: SOFA synonym: "binding_or_interaction_site" EXACT [] synonym: "site" RELATED [] xref: http://en.wikipedia.org/wiki/Binding_site "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000410 name: protein_binding_site def: "A binding site that, in the molecule, interacts selectively and non-covalently with polypeptide molecules." [SO:ke] comment: See GO:0042277 : peptide binding. subset: SOFA synonym: "protein binding site" EXACT [] is_a: SO:0000409 ! binding_site [Term] id: SO:0000411 name: rescue_region def: "A region that rescues." [SO:xp] synonym: "rescue fragment" EXACT [] synonym: "rescue region" EXACT [] synonym: "rescue segment" RELATED [] is_a: SO:0000695 ! reagent intersection_of: SO:0000695 ! reagent intersection_of: has_quality SO:0000814 ! rescue relationship: has_quality SO:0000814 ! rescue [Term] id: SO:0000412 name: restriction_fragment def: "A region of polynucleotide sequence produced by digestion with a restriction endonuclease." [SO:ke] subset: SOFA synonym: "restriction fragment" EXACT [] xref: http://en.wikipedia.org/wiki/Restriction_fragment "wiki" is_a: SO:0000143 ! assembly_component [Term] id: SO:0000413 name: sequence_difference def: "A region where the sequence differs from that of a specified sequence." [SO:ke] subset: SOFA synonym: "sequence difference" EXACT [] is_a: SO:0000700 ! remark [Term] id: SO:0000414 name: invalidated_by_genomic_contamination def: "An attribute to describe a feature that is invalidated due to genomic contamination." [SO:ke] synonym: "invalidated by genomic contamination" EXACT [] is_a: SO:0000790 ! invalidated [Term] id: SO:0000415 name: invalidated_by_genomic_polyA_primed_cDNA def: "An attribute to describe a feature that is invalidated due to polyA priming." [SO:ke] synonym: "invalidated by genomic polyA primed cDNA" EXACT [] is_a: SO:0000790 ! invalidated [Term] id: SO:0000416 name: invalidated_by_partial_processing def: "An attribute to describe a feature that is invalidated due to partial processing." [SO:ke] synonym: "invalidated by partial processing" EXACT [] is_a: SO:0000790 ! invalidated [Term] id: SO:0000417 name: polypeptide_domain alt_id: BS:00012 alt_id: BS:00134 alt_id: SO:0001069 def: "A structurally or functionally defined protein region. In proteins with multiple domains, the combination of the domains determines the function of the protein. A region which has been shown to recur throughout evolution." [EBIBS:GAR] comment: Range. Old definition from before biosapiens: A region of a single polypeptide chain that folds into an independent unit and exhibits biological activity. A polypeptide chain may have multiple domains. subset: biosapiens synonym: "ca_bind" RELATED BS [uniprot:feature_type] synonym: "DNA_bind" RELATED BS [uniprot:feature_type] synonym: "domain" BROAD BS [uniprot:feature_type] synonym: "np_bind" RELATED BS [uniprot:feature_type] synonym: "polypeptide domain" EXACT [] synonym: "polypeptide_structural_domain" EXACT BS [] synonym: "structural domain" BROAD BS [] synonym: "zn_fing" RELATED BS [uniprot:feature_type] is_a: SO:0001070 ! polypeptide_structural_region is_a: SO:0100021 ! polypeptide_conserved_region [Term] id: SO:0000418 name: signal_peptide alt_id: BS:00159 def: "The signal_peptide is a short region of the peptide located at the N-terminus that directs the protein to be secreted or part of membrane components." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: Old def before biosapiens:The sequence for an N-terminal domain of a secreted protein; this domain is involved in attaching nascent polypeptide to the membrane leader sequence. subset: biosapiens subset: SOFA synonym: "signal" RELATED [uniprot:feature_type] synonym: "signal peptide" EXACT [] synonym: "signal peptide coding sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Signal_peptide "wiki" is_a: SO:0001527 ! peptide_localization_signal relationship: part_of SO:0001062 ! propeptide [Term] id: SO:0000419 name: mature_protein_region alt_id: BS:00149 def: "The polypeptide sequence that remains when the cleaved peptide regions have been cleaved from the immature peptide." [EBIBS:GAR, http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html, SO:cb] comment: This term mature peptide, merged with the biosapiens term mature protein region and took that to be the new name. Old def: The coding sequence for the mature or final peptide or protein product following post-translational modification. subset: biosapiens subset: SOFA synonym: "chain" RELATED [uniprot:feature_type] synonym: "mature peptide" RELATED [] synonym: "mature protein region" EXACT [] is_a: SO:0000839 ! polypeptide_region relationship: part_of SO:0001063 ! immature_peptide_region [Term] id: SO:0000420 name: five_prime_terminal_inverted_repeat synonym: "5' TIR" EXACT [] synonym: "five prime terminal inverted repeat" EXACT [] is_a: SO:0000481 ! terminal_inverted_repeat [Term] id: SO:0000421 name: three_prime_terminal_inverted_repeat synonym: "3' TIR" EXACT [] synonym: "three prime terminal inverted repeat" EXACT [] is_a: SO:0000481 ! terminal_inverted_repeat [Term] id: SO:0000422 name: U5_LTR_region synonym: "U5 long terminal repeat region" EXACT [] synonym: "U5 LTR region" EXACT [] is_a: SO:0000848 ! LTR_component [Term] id: SO:0000423 name: R_LTR_region synonym: "R long terminal repeat region" EXACT [] synonym: "R LTR region" EXACT [] is_a: SO:0000848 ! LTR_component [Term] id: SO:0000424 name: U3_LTR_region synonym: "U3 long terminal repeat region" EXACT [] synonym: "U3 LTR region" EXACT [] is_a: SO:0000848 ! LTR_component [Term] id: SO:0000425 name: five_prime_LTR synonym: "5' long terminal repeat" EXACT [] synonym: "5' LTR" EXACT [] synonym: "five prime LTR" EXACT [] is_a: SO:0000286 ! long_terminal_repeat [Term] id: SO:0000426 name: three_prime_LTR synonym: "3' long terminal repeat" EXACT [] synonym: "3' LTR" EXACT [] synonym: "three prime LTR" EXACT [] is_a: SO:0000286 ! long_terminal_repeat [Term] id: SO:0000427 name: R_five_prime_LTR_region synonym: "R 5' long term repeat region" EXACT [] synonym: "R five prime LTR region" EXACT [] is_a: SO:0000423 ! R_LTR_region is_a: SO:0000850 ! five_prime_LTR_component [Term] id: SO:0000428 name: U5_five_prime_LTR_region synonym: "U5 5' long terminal repeat region" EXACT [] synonym: "U5 five prime LTR region" EXACT [] is_a: SO:0000422 ! U5_LTR_region is_a: SO:0000850 ! five_prime_LTR_component [Term] id: SO:0000429 name: U3_five_prime_LTR_region synonym: "U3 5' long term repeat region" EXACT [] synonym: "U3 five prime LTR region" EXACT [] is_a: SO:0000424 ! U3_LTR_region is_a: SO:0000850 ! five_prime_LTR_component [Term] id: SO:0000430 name: R_three_prime_LTR_region synonym: "R 3' long terminal repeat region" EXACT [] synonym: "R three prime LTR region" EXACT [] is_a: SO:0000849 ! three_prime_LTR_component [Term] id: SO:0000431 name: U3_three_prime_LTR_region synonym: "U3 3' long terminal repeat region" EXACT [] synonym: "U3 three prime LTR region" EXACT [] is_a: SO:0000849 ! three_prime_LTR_component [Term] id: SO:0000432 name: U5_three_prime_LTR_region synonym: "U5 3' long terminal repeat region" EXACT [] synonym: "U5 three prime LTR region" EXACT [] is_a: SO:0000849 ! three_prime_LTR_component [Term] id: SO:0000433 name: non_LTR_retrotransposon_polymeric_tract def: "A polymeric tract, such as poly(dA), within a non_LTR_retrotransposon." [SO:ke] synonym: "non LTR retrotransposon polymeric tract" EXACT [] is_a: SO:0000657 ! repeat_region is_a: SO:0000840 ! repeat_component relationship: part_of SO:0000189 ! non_LTR_retrotransposon [Term] id: SO:0000434 name: target_site_duplication def: "A sequence of the target DNA that is duplicated when a transposable element or phage inserts; usually found at each end the insertion." [http://www.koko.gov.my/CocoaBioTech/Glossaryt.html] synonym: "target site duplication" EXACT [] is_a: SO:0000314 ! direct_repeat intersection_of: SO:0000314 ! direct_repeat intersection_of: derives_from SO:0000101 ! transposable_element relationship: derives_from SO:0000101 ! transposable_element [Term] id: SO:0000435 name: RR_tract def: "A polypurine tract within an LTR_retrotransposon." [SO:ke] synonym: "LTR retrotransposon poly purine tract" RELATED [] synonym: "RR tract" EXACT [] is_a: SO:0000330 ! conserved_region relationship: part_of SO:0000186 ! LTR_retrotransposon [Term] id: SO:0000436 name: ARS def: "A sequence that can autonomously replicate, as a plasmid, when transformed into a bacterial host." [SO:ma] subset: SOFA synonym: "autonomously replicating sequence" EXACT [] is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000437 name: assortment_derived_duplication is_obsolete: true [Term] id: SO:0000438 name: gene_not_polyadenylated is_obsolete: true [Term] id: SO:0000439 name: inverted_ring_chromosome synonym: "inverted ring chromosome" EXACT [] is_a: SO:1000030 ! chromosomal_inversion is_a: SO:1000045 ! ring_chromosome [Term] id: SO:0000440 name: vector_replicon def: "A replicon that has been modified to act as a vector for foreign sequence." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "vector" EXACT [] synonym: "vector replicon" EXACT [] xref: http://en.wikipedia.org/wiki/Vector_(molecular_biology) "wiki" is_a: SO:0001235 ! replicon relationship: part_of SO:0000151 ! clone [Term] id: SO:0000441 name: ss_oligo def: "A single stranded oligonucleotide." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "single strand oligo" EXACT [] synonym: "single strand oligonucleotide" EXACT [] synonym: "single stranded oligonucleotide" EXACT [] synonym: "ss oligo" EXACT [] synonym: "ss oligonucleotide" EXACT [] is_a: SO:0000696 ! oligo [Term] id: SO:0000442 name: ds_oligo def: "A double stranded oligonucleotide." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "double stranded oligonucleotide" EXACT [] synonym: "ds oligo" EXACT [] synonym: "ds-oligonucleotide" EXACT [] is_a: SO:0000696 ! oligo [Term] id: SO:0000443 name: polymer_attribute def: "An attribute to describe the kind of biological sequence." [SO:ke] synonym: "polymer attribute" EXACT [] is_a: SO:0000400 ! sequence_attribute [Term] id: SO:0000444 name: three_prime_noncoding_exon def: "Non-coding exon in the 3' UTR." [SO:ke] synonym: "three prime noncoding exon" EXACT [] is_a: SO:0000198 ! noncoding_exon [Term] id: SO:0000445 name: five_prime_noncoding_exon def: "Non-coding exon in the 5' UTR." [SO:ke] synonym: "5' nc exon" EXACT [] synonym: "5' non coding exon" EXACT [] synonym: "five prime noncoding exon" EXACT [] is_a: SO:0000198 ! noncoding_exon [Term] id: SO:0000446 name: UTR_intron def: "Intron located in the untranslated region." [SO:ke] synonym: "UTR intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000447 name: five_prime_UTR_intron def: "An intron located in the 5' UTR." [SO:ke] synonym: "five prime UTR intron" EXACT [] is_a: SO:0000446 ! UTR_intron [Term] id: SO:0000448 name: three_prime_UTR_intron def: "An intron located in the 3' UTR." [SO:ke] synonym: "three prime UTR intron" EXACT [] is_a: SO:0000446 ! UTR_intron [Term] id: SO:0000449 name: random_sequence def: "A sequence of nucleotides or amino acids which, by design, has a \"random\" order of components, given a predetermined input frequency of these components." [SO:ma] synonym: "random sequence" EXACT [] is_a: SO:0000351 ! synthetic_sequence [Term] id: SO:0000450 name: interband def: "A light region between two darkly staining bands in a polytene chromosome." [SO:ma] synonym: "chromosome interband" RELATED [] is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000451 name: gene_with_polyadenylated_mRNA def: "A gene that encodes a polyadenylated mRNA." [SO:xp] synonym: "gene with polyadenylated mRNA" EXACT [] is_a: SO:0001217 ! protein_coding_gene intersection_of: SO:0001217 ! protein_coding_gene intersection_of: transcribed_to SO:0000871 ! polyadenylated_mRNA relationship: transcribed_to SO:0000871 ! polyadenylated_mRNA [Term] id: SO:0000452 name: transgene_attribute is_obsolete: true [Term] id: SO:0000453 name: chromosomal_transposition def: "A chromosome structure variant whereby a region of a chromosome has been transferred to another position. Among interchromosomal rearrangements, the term transposition is reserved for that class in which the telomeres of the chromosomes involved are coupled (that is to say, form the two ends of a single DNA molecule) as in wild-type." [FB:reference_manual, SO:ke] synonym: "chromosomal transposition" EXACT [] synonym: "transposition" NARROW [] is_a: SO:1000183 ! chromosome_structure_variation [Term] id: SO:0000454 name: rasiRNA def: "A 17-28-nt, small interfering RNA derived from transcripts of repetitive elements." [http://www.developmentalcell.com/content/article/abstract?uid=PIIS1534580703002284] subset: SOFA synonym: "repeat associated small interfering RNA" EXACT [] xref: http://en.wikipedia.org/wiki/RasiRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000455 name: gene_with_mRNA_with_frameshift def: "A gene that encodes an mRNA with a frameshift." [SO:xp] synonym: "gene with mRNA with frameshift" EXACT [] is_a: SO:0001217 ! protein_coding_gene intersection_of: SO:0001217 ! protein_coding_gene intersection_of: has_quality SO:0000865 ! frameshift relationship: has_quality SO:0000865 ! frameshift [Term] id: SO:0000456 name: recombinationally_rearranged_gene def: "A gene that is recombinationally rearranged." [SO:ke] synonym: "recombinationally rearranged gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000940 ! recombinationally_rearranged relationship: has_quality SO:0000940 ! recombinationally_rearranged [Term] id: SO:0000457 name: interchromosomal_duplication def: "A chromosome duplication involving an insertion from another chromosome." [SO:ke] synonym: "interchromosomal duplication" EXACT [] is_a: SO:1000037 ! chromosomal_duplication [Term] id: SO:0000458 name: D_gene_segment def: "Germline genomic DNA including D-region with 5' UTR and 3' UTR, also designated as D-segment." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D gene" EXACT [] synonym: "D-GENE" EXACT [] is_a: SO:0000460 ! vertebrate_immunoglobulin_T_cell_receptor_segment [Term] id: SO:0000459 name: gene_with_trans_spliced_transcript def: "A gene with a transcript that is trans-spliced." [SO:xp] synonym: "gene with trans spliced transcript" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: transcribed_to SO:0000479 ! trans_spliced_transcript relationship: transcribed_to SO:0000479 ! trans_spliced_transcript [Term] id: SO:0000460 name: vertebrate_immunoglobulin_T_cell_receptor_segment comment: I am using the term segment instead of gene here to avoid confusion with the region 'gene'. synonym: "vertebrate immunoglobulin T cell receptor segment" EXACT [] synonym: "vertebrate_immunoglobulin/T-cell receptor gene" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000461 name: inversion_derived_bipartite_deficiency def: "A chromosomal deletion whereby a chromosome generated by recombination between two inversions; has a deficiency at each end of the inversion." [FB:km] synonym: "inversion derived bipartite deficiency" EXACT [] is_a: SO:1000029 ! chromosomal_deletion [Term] id: SO:0000462 name: pseudogenic_region def: "A non-functional descendent of a functional entity." [SO:cjm] subset: SOFA synonym: "pseudogenic region" EXACT [] is_a: SO:0001411 ! biological_region [Term] id: SO:0000463 name: encodes_alternately_spliced_transcripts def: "A gene that encodes more than one transcript." [SO:ke] synonym: "encodes alternately spliced transcripts" EXACT [] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0000464 name: decayed_exon def: "A non-functional descendant of an exon." [SO:ke] subset: SOFA synonym: "decayed exon" EXACT [] is_a: SO:0000462 ! pseudogenic_region relationship: non_functional_homolog_of SO:0000147 ! exon [Term] id: SO:0000465 name: inversion_derived_deficiency_plus_duplication def: "A chromosome deletion whereby a chromosome is generated by recombination between two inversions; there is a deficiency at one end of the inversion and a duplication at the other end of the inversion." [FB:km] synonym: "inversion derived deficiency plus duplication" EXACT [] is_a: SO:1000029 ! chromosomal_deletion is_a: SO:1000038 ! intrachromosomal_duplication [Term] id: SO:0000466 name: V_gene_segment def: "Germline genomic DNA including L-part1, V-intron and V-exon, with the 5' UTR and 3' UTR." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V gene" EXACT [] synonym: "V-GENE" EXACT [] synonym: "variable_gene" EXACT [] is_a: SO:0000460 ! vertebrate_immunoglobulin_T_cell_receptor_segment [Term] id: SO:0000467 name: post_translationally_regulated_by_protein_stability def: "An attribute describing a gene sequence where the resulting protein is regulated by the stability of the resulting protein." [SO:ke] synonym: "post translationally regulated by protein stability" EXACT [] synonym: "post-translationally regulated by protein stability" EXACT [] is_a: SO:0000130 ! post_translationally_regulated [Term] id: SO:0000468 name: golden_path_fragment def: "One of the pieces of sequence that make up a golden path." [SO:rd] subset: SOFA synonym: "golden path fragment" EXACT [] is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000688 ! golden_path [Term] id: SO:0000469 name: post_translationally_regulated_by_protein_modification def: "An attribute describing a gene sequence where the resulting protein is modified to regulate it." [SO:ke] synonym: "post translationally regulated by protein modification" EXACT [] synonym: "post-translationally regulated by protein modification" EXACT [] is_a: SO:0000130 ! post_translationally_regulated [Term] id: SO:0000470 name: J_gene_segment def: "Germline genomic DNA of an immunoglobulin/T-cell receptor gene including J-region with 5' UTR (SO:0000204) and 3' UTR (SO:0000205), also designated as J-segment." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J gene" EXACT [] synonym: "J-GENE" EXACT [] is_a: SO:0000460 ! vertebrate_immunoglobulin_T_cell_receptor_segment [Term] id: SO:0000471 name: autoregulated def: "The gene product is involved in its own transcriptional regulation." [SO:ke] is_a: SO:0000123 ! transcriptionally_regulated [Term] id: SO:0000472 name: tiling_path def: "A set of regions which overlap with minimal polymorphism to form a linear sequence." [SO:cjm] subset: SOFA synonym: "tiling path" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0000473 name: negatively_autoregulated def: "The gene product is involved in its own transcriptional regulation where it decreases transcription." [SO:ke] synonym: "negatively autoregulated" EXACT [] is_a: SO:0000126 ! transcriptionally_repressed is_a: SO:0000471 ! autoregulated [Term] id: SO:0000474 name: tiling_path_fragment def: "A piece of sequence that makes up a tiling_path (SO:0000472)." [SO:ke] subset: SOFA synonym: "tiling path fragment" EXACT [] is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000472 ! tiling_path [Term] id: SO:0000475 name: positively_autoregulated def: "The gene product is involved in its own transcriptional regulation, where it increases transcription." [SO:ke] synonym: "positively autoregulated" EXACT [] is_a: SO:0000125 ! transcriptionally_induced is_a: SO:0000471 ! autoregulated [Term] id: SO:0000476 name: contig_read def: "A DNA sequencer read which is part of a contig." [SO:ke] synonym: "contig read" EXACT [] is_a: SO:0000150 ! read [Term] id: SO:0000477 name: polycistronic_gene def: "A gene that is polycistronic." [SO:ke] is_obsolete: true [Term] id: SO:0000478 name: C_gene_segment def: "Genomic DNA of immunoglobulin/T-cell receptor gene including C-region (and introns if present) with 5' UTR (SO:0000204) and 3' UTR (SO:0000205)." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "C gene" EXACT [] synonym: "C_GENE" EXACT [] synonym: "constant gene" EXACT [] is_a: SO:0000460 ! vertebrate_immunoglobulin_T_cell_receptor_segment [Term] id: SO:0000479 name: trans_spliced_transcript def: "A transcript that is trans-spliced." [SO:xp] synonym: "trans spliced transcript" EXACT [] synonym: "trans-spliced transcript" EXACT [] is_a: SO:0000673 ! transcript intersection_of: SO:0000673 ! transcript intersection_of: has_quality SO:0000870 ! trans_spliced relationship: has_quality SO:0000870 ! trans_spliced [Term] id: SO:0000480 name: tiling_path_clone def: "A clone which is part of a tiling path. A tiling path is a set of sequencing substrates, typically clones, which have been selected in order to efficiently cover a region of the genome in preparation for sequencing and assembly." [SO:ke] synonym: "tiling path clone" EXACT [] is_a: SO:0000151 ! clone is_a: SO:0000474 ! tiling_path_fragment [Term] id: SO:0000481 name: terminal_inverted_repeat def: "An inverted repeat (SO:0000294) occurring at the termini of a DNA transposon." [SO:ke] synonym: "terminal inverted repeat" EXACT [] synonym: "TIR" EXACT [] is_a: SO:0000294 ! inverted_repeat relationship: part_of SO:0000208 ! terminal_inverted_repeat_element [Term] id: SO:0000482 name: vertebrate_immunoglobulin_T_cell_receptor_gene_cluster synonym: "vertebrate immunoglobulin T cell receptor gene cluster" EXACT [] synonym: "vertebrate_immunoglobulin/T-cell receptor gene cluster" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000483 name: nc_primary_transcript def: "A primary transcript that is never translated into a protein." [SO:ke] subset: SOFA synonym: "nc primary transcript" EXACT [] synonym: "noncoding primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript [Term] id: SO:0000484 name: three_prime_coding_exon_noncoding_region def: "The sequence of the 3' exon that is not coding." [SO:ke] subset: SOFA synonym: "three prime coding exon noncoding region" EXACT [] synonym: "three_prime_exon_noncoding_region" EXACT [] is_a: SO:0001214 ! noncoding_region_of_exon relationship: part_of SO:0000202 ! three_prime_coding_exon [Term] id: SO:0000485 name: DJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one DJ-gene, and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(DJ)-J-CLUSTER" EXACT [] synonym: "DJ J cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000486 name: five_prime_coding_exon_noncoding_region def: "The sequence of the 5' exon preceding the start codon." [SO:ke] subset: SOFA synonym: "five prime coding exon noncoding region" EXACT [] synonym: "five_prime_exon_noncoding_region" EXACT [] is_a: SO:0001214 ! noncoding_region_of_exon relationship: part_of SO:0000200 ! five_prime_coding_exon [Term] id: SO:0000487 name: VDJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VDJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VDJ)-J-C-CLUSTER" EXACT [] synonym: "VDJ J C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000488 name: VDJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VDJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VDJ)-J-CLUSTER" EXACT [] synonym: "VDJ J cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000489 name: VJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VJ)-C-CLUSTER" RELATED [] synonym: "VJ C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000490 name: VJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VJ)-J-C-CLUSTER" EXACT [] synonym: "VJ J C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000491 name: VJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VJ)-J-CLUSTER" EXACT [] synonym: "VJ J cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000492 name: D_gene_recombination_feature synonym: "D gene recombination feature" EXACT [] is_a: SO:0000939 ! vertebrate_immune_system_gene_recombination_signal_feature [Term] id: SO:0000493 name: three_prime_D_heptamer def: "7 nucleotide recombination site like CACAGTG, part of a 3' D-recombination signal sequence of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "3'D-HEPTAMER" EXACT [] synonym: "three prime D heptamer" EXACT [] is_a: SO:0000561 ! heptamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000570 ! three_prime_D_recombination_signal_sequence [Term] id: SO:0000494 name: three_prime_D_nonamer def: "A 9 nucleotide recombination site (e.g. ACAAAAACC), part of a 3' D-recombination signal sequence of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "3'D-NOMAMER" EXACT [] synonym: "three prime D nonamer" EXACT [] is_a: SO:0000562 ! nonamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000570 ! three_prime_D_recombination_signal_sequence [Term] id: SO:0000495 name: three_prime_D_spacer def: "A 12 or 23 nucleotide spacer between the 3'D-HEPTAMER and 3'D-NONAMER of a 3'D-RS." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "3'D-SPACER" EXACT [] synonym: "three prime D spacer" EXACT [] is_a: SO:0000563 ! vertebrate_immune_system_gene_recombination_spacer relationship: part_of SO:0000570 ! three_prime_D_recombination_signal_sequence [Term] id: SO:0000496 name: five_prime_D_heptamer def: "7 nucleotide recombination site (e.g. CACTGTG), part of a 5' D-recombination signal sequence (SO:0000556) of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "5'D-HEPTAMER" EXACT [] synonym: "five prime D heptamer" EXACT [] is_a: SO:0000561 ! heptamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000556 ! five_prime_D_recombination_signal_sequence [Term] id: SO:0000497 name: five_prime_D_nonamer def: "9 nucleotide recombination site (e.g. GGTTTTTGT), part of a five_prime_D-recombination signal sequence (SO:0000556) of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "5'D-NONAMER" EXACT [] synonym: "five prime D nonamer" EXACT [] is_a: SO:0000562 ! nonamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000556 ! five_prime_D_recombination_signal_sequence [Term] id: SO:0000498 name: five_prime_D_spacer def: "12 or 23 nucleotide spacer between the 5' D-heptamer (SO:0000496) and 5' D-nonamer (SO:0000497) of a 5' D-recombination signal sequence (SO:0000556) of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "5'-SPACER" EXACT [] synonym: "five prime D spacer" EXACT [] synonym: "five prime D-spacer" EXACT [] is_a: SO:0000563 ! vertebrate_immune_system_gene_recombination_spacer relationship: part_of SO:0000556 ! five_prime_D_recombination_signal_sequence [Term] id: SO:0000499 name: virtual_sequence def: "A continuous piece of sequence similar to the 'virtual contig' concept of the Ensembl database." [SO:ke] subset: SOFA synonym: "virtual sequence" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0000500 name: Hoogsteen_base_pair def: "A type of non-canonical base-pairing. This is less energetically favourable than watson crick base pairing. Hoogsteen GC base pairs only have two hydrogen bonds." [PMID:12177293] synonym: "Hoogsteen base pair" EXACT [] xref: http://en.wikipedia.org/wiki/Hoogsteen_base_pair "wiki" is_a: SO:0000028 ! base_pair [Term] id: SO:0000501 name: reverse_Hoogsteen_base_pair def: "A type of non-canonical base-pairing." [SO:ke] synonym: "reverse Hoogsteen base pair" EXACT [] is_a: SO:0000028 ! base_pair [Term] id: SO:0000502 name: transcribed_region def: "A region of sequence that is transcribed. This region may cover the transcript of a gene, it may emcompas the sequence covered by all of the transcripts of a alternately spliced gene, or it may cover the region transcribed by a polycistronic transcript. A gene may have 1 or more transcribed regions and a transcribed_region may belong to one or more genes." [SO:ke] comment: This concept cam about as a direct result of the SO meeting August 2004.nThe exact nature of the relationship between transcribed_region and gene is still up for discussion. We are going with 'associated_with' for the time being. subset: SOFA is_obsolete: true [Term] id: SO:0000503 name: alternately_spliced_gene_encodeing_one_transcript is_obsolete: true [Term] id: SO:0000504 name: D_DJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one D-gene, one DJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D DJ C cluster" EXACT [] synonym: "D-(DJ)-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000505 name: D_DJ_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one D-gene and one DJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D DJ cluster" EXACT [] synonym: "D-(DJ)-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000506 name: D_DJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one D-gene, one DJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D DJ J C cluster" EXACT [] synonym: "D-(DJ)-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000507 name: pseudogenic_exon def: "A non functional descendant of an exon, part of a pseudogene." [SO:ke] comment: This is the analog of the exon of a functional gene. The term was requested by Rama - SGD to allow the annotation of the parts of a pseudogene. Non-functional is defined as either its transcription or translation (or both) are prevented due to one or more mutations. synonym: "pseudogenic exon" EXACT [] is_a: SO:0000462 ! pseudogenic_region relationship: non_functional_homolog_of SO:0000147 ! exon relationship: part_of SO:0000516 ! pseudogenic_transcript [Term] id: SO:0000508 name: D_DJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one D-gene, one DJ-gene, and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D DJ J cluster" EXACT [] synonym: "D-(DJ)-J-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000509 name: D_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one D-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D J C cluster" EXACT [] synonym: "D-J-C-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment [Term] id: SO:0000510 name: VD_gene_segment def: "Genomic DNA of immunoglobulin/T-cell receptor gene in partially rearranged genomic DNA including L-part1, V-intron and V-D-exon, with the 5' UTR (SO:0000204) and 3' UTR (SO:0000205)." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V_D_GENE" EXACT [] synonym: "VD gene" EXACT [] is_a: SO:0000936 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_segment [Term] id: SO:0000511 name: J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J C cluster" EXACT [] synonym: "J-C-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment [Term] id: SO:0000512 name: inversion_derived_deficiency_plus_aneuploid def: "A chromosomal deletion whereby a chromosome generated by recombination between two inversions; has a deficiency at one end and presumed to have a deficiency or duplication at the other end of the inversion." [FB:km] synonym: "inversion derived deficiency plus aneuploid" EXACT [] is_a: SO:1000029 ! chromosomal_deletion [Term] id: SO:0000513 name: J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including more than one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J cluster" EXACT [] synonym: "J-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment [Term] id: SO:0000514 name: J_nonamer def: "9 nucleotide recombination site (e.g. GGTTTTTGT), part of a J-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J nonamer" EXACT [] synonym: "J-NONAMER" EXACT [] is_a: SO:0000562 ! nonamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000302 ! J_gene_recombination_feature [Term] id: SO:0000515 name: J_heptamer def: "7 nucleotide recombination site (e.g. CACAGTG), part of a J-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J heptamer" EXACT [] synonym: "J-HEPTAMER" EXACT [] is_a: SO:0000561 ! heptamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000302 ! J_gene_recombination_feature [Term] id: SO:0000516 name: pseudogenic_transcript def: "A non functional descendant of a transcript, part of a pseudogene." [SO:ke] comment: This is the analog of the transcript of a functional gene. The term was requested by Rama - SGD to allow the annotation of the parts of a pseudogene. Non-functional is defined as either its transcription or translation (or both) are prevented due to one or more mutations. synonym: "pseudogenic transcript" EXACT [] is_a: SO:0000462 ! pseudogenic_region relationship: non_functional_homolog_of SO:0000673 ! transcript relationship: part_of SO:0000336 ! pseudogene [Term] id: SO:0000517 name: J_spacer def: "12 or 23 nucleotide spacer between the J-nonamer and the J-heptamer of a J-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J spacer" EXACT [] synonym: "J-SPACER" EXACT [] is_a: SO:0000563 ! vertebrate_immune_system_gene_recombination_spacer relationship: part_of SO:0000302 ! J_gene_recombination_feature [Term] id: SO:0000518 name: V_DJ_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene and one DJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V DJ cluster" EXACT [] synonym: "V-(DJ)-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000519 name: V_DJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one DJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V DJ J cluster" EXACT [] synonym: "V-(DJ)-J-CLUSTER" RELATED [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000520 name: V_VDJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VDJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VDJ C cluster" EXACT [] synonym: "V-(VDJ)-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000521 name: V_VDJ_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene and one VDJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VDJ cluster" EXACT [] synonym: "V-(VDJ)-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000522 name: V_VDJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VDJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VDJ J cluster" EXACT [] synonym: "V-(VDJ)-J-CLUSTER" RELATED [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000523 name: V_VJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VJ C cluster" EXACT [] synonym: "V-(VJ)-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000524 name: V_VJ_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene and one VJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VJ cluster" EXACT [] synonym: "V-(VJ)-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000525 name: V_VJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VJ J cluster" EXACT [] synonym: "V-(VJ)-J-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000526 name: V_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including more than one V-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V cluster" EXACT [] synonym: "V-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment [Term] id: SO:0000527 name: V_D_DJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one D-gene, one DJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D DJ C cluster" EXACT [] synonym: "V-D-(DJ)-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000528 name: V_D_DJ_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one D-gene, one DJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D DJ cluster" EXACT [] synonym: "V-D-(DJ)-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000529 name: V_D_DJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one D-gene, one DJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D DJ J C cluster" EXACT [] synonym: "V-D-(DJ)-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000530 name: V_D_DJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one D-gene, one DJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D DJ J cluster" EXACT [] synonym: "V-D-(DJ)-J-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000531 name: V_D_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one V-gene, one D-gene and one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D J C cluster" EXACT [] synonym: "V-D-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment [Term] id: SO:0000532 name: V_D_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one V-gene, one D-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D J cluster" EXACT [] synonym: "V-D-J-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment [Term] id: SO:0000533 name: V_heptamer def: "7 nucleotide recombination site (e.g. CACAGTG), part of V-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V heptamer" EXACT [] synonym: "V-HEPTAMER" EXACT [] is_a: SO:0000561 ! heptamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000538 ! V_gene_recombination_feature [Term] id: SO:0000534 name: V_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one V-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V J cluster" EXACT [] synonym: "V-J-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment [Term] id: SO:0000535 name: V_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one V-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V J C cluster" EXACT [] synonym: "V-J-C-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment [Term] id: SO:0000536 name: V_nonamer def: "9 nucleotide recombination site (e.g. ACAAAAACC), part of V-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V nonamer" EXACT [] synonym: "V-NONAMER" EXACT [] is_a: SO:0000562 ! nonamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000538 ! V_gene_recombination_feature [Term] id: SO:0000537 name: V_spacer def: "12 or 23 nucleotide spacer between the V-heptamer and the V-nonamer of a V-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V spacer" EXACT [] synonym: "V-SPACER" EXACT [] is_a: SO:0000563 ! vertebrate_immune_system_gene_recombination_spacer relationship: part_of SO:0000538 ! V_gene_recombination_feature [Term] id: SO:0000538 name: V_gene_recombination_feature def: "Recombination signal including V-heptamer, V-spacer and V-nonamer in 3' of V-region of a V-gene or V-sequence of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V gene recombination feature" EXACT [] synonym: "V-RS" EXACT [] is_a: SO:0000939 ! vertebrate_immune_system_gene_recombination_signal_feature [Term] id: SO:0000539 name: DJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one DJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(DJ)-C-CLUSTER" EXACT [] synonym: "DJ C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000540 name: DJ_J_C_cluster def: "Genomic DNA in rearranged configuration including at least one D-J-GENE, one J-GENE and one C-GENE." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(DJ)-J-C-CLUSTER" EXACT [] synonym: "DJ J C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000541 name: VDJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VDJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VDJ)-C-CLUSTER" EXACT [] synonym: "VDJ C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000542 name: V_DJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one DJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V DJ C cluster" EXACT [] synonym: "V-(DJ)-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000543 name: alternately_spliced_gene_encoding_greater_than_one_transcript is_obsolete: true [Term] id: SO:0000544 name: helitron def: "A rolling circle transposon. Autonomous helitrons encode a 5'-to-3' DNA helicase and nuclease/ligase similar to those encoded by known rolling-circle replicons." [http://www.pnas.org/cgi/content/full/100/11/6569] synonym: "ISCR" RELATED [] xref: http://en.wikipedia.org/wiki/Helitron "wiki" is_a: SO:0000182 ! DNA_transposon [Term] id: SO:0000545 name: recoding_pseudoknot def: "The pseudoknots involved in recoding are unique in that, as they play their role as a structure, they are immediately unfolded and their now linear sequence serves as a template for decoding." [http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=33937] synonym: "recoding pseudoknot" EXACT [] is_a: SO:0000591 ! pseudoknot relationship: part_of SO:1001268 ! recoding_stimulatory_region [Term] id: SO:0000546 name: designed_sequence synonym: "designed sequence" EXACT [] is_a: SO:0000351 ! synthetic_sequence [Term] id: SO:0000547 name: inversion_derived_bipartite_duplication def: "A chromosome generated by recombination between two inversions; there is a duplication at each end of the inversion." [FB:km] synonym: "inversion derived bipartite duplication" EXACT [] is_a: SO:1000038 ! intrachromosomal_duplication [Term] id: SO:0000548 name: gene_with_edited_transcript def: "A gene that encodes a transcript that is edited." [SO:xp] synonym: "gene with edited transcript" EXACT [] is_a: SO:0001217 ! protein_coding_gene intersection_of: SO:0001217 ! protein_coding_gene intersection_of: transcribed_to SO:0000873 ! edited_transcript relationship: transcribed_to SO:0000873 ! edited_transcript [Term] id: SO:0000549 name: inversion_derived_duplication_plus_aneuploid def: "A chromosome generated by recombination between two inversions; has a duplication at one end and presumed to have a deficiency or duplication at the other end of the inversion." [FB:km] synonym: "inversion derived duplication plus aneuploid" EXACT [] is_a: SO:1000038 ! intrachromosomal_duplication [Term] id: SO:0000550 name: aneuploid_chromosome def: "A chromosome structural variation whereby either a chromosome exists in addition to the normal chromosome complement or is lacking." [SO:ke] comment: Examples are Nullo-4, Haplo-4 and triplo-4 in Drosophila. synonym: "aneuploid chromosome" EXACT [] is_a: SO:1000183 ! chromosome_structure_variation [Term] id: SO:0000551 name: polyA_signal_sequence def: "The recognition sequence necessary for endonuclease cleavage of an RNA transcript that is followed by polyadenylation; consensus=AATAAA." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "poly(A) signal" EXACT [] synonym: "polyA signal sequence" EXACT [] synonym: "polyadenylation termination signal" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0000552 name: Shine_Dalgarno_sequence def: "A region in the 5' UTR that pairs with the 16S rRNA during formation of the preinitiation complex." [SO:jh] comment: Not found in Eukaryotic sequence. synonym: "five prime ribosome binding site" EXACT [] synonym: "RBS" RELATED [] synonym: "Shine Dalgarno sequence" EXACT [] synonym: "Shine-Dalgarno sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Shine-Dalgarno_sequence "wiki" is_a: SO:0000139 ! ribosome_entry_site [Term] id: SO:0000553 name: polyA_site alt_id: SO:0001430 def: "The site on an RNA transcript to which will be added adenine residues by post-transcriptional polyadenylation. The boundary between the UTR and the polyA sequence." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "polyA cleavage site" EXACT [] synonym: "polyA junction" EXACT [] synonym: "polyA site" EXACT [] synonym: "polyA_junction" EXACT [] synonym: "polyadenylation site" RELATED [] is_a: SO:0000699 ! junction relationship: part_of SO:0000205 ! three_prime_UTR relationship: part_of SO:0000233 ! mature_transcript [Term] id: SO:0000554 name: assortment_derived_deficiency_plus_duplication is_obsolete: true [Term] id: SO:0000555 name: five_prime_clip def: "5' most region of a precursor transcript that is clipped off during processing." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "5' clip" RELATED [] synonym: "five prime clip" EXACT [] is_a: SO:0000303 ! clip [Term] id: SO:0000556 name: five_prime_D_recombination_signal_sequence def: "Recombination signal of an immunoglobulin/T-cell receptor gene, including the 5' D-nonamer (SO:0000497), 5' D-spacer (SO:0000498), and 5' D-heptamer (SO:0000396) in 5' of the D-region of a D-gene, or in 5' of the D-region of DJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "5'RS" EXACT [] synonym: "five prime D recombination signal sequence" EXACT [] synonym: "five prime D-recombination signal sequence" EXACT [] is_a: SO:0000492 ! D_gene_recombination_feature [Term] id: SO:0000557 name: three_prime_clip def: "3'-most region of a precursor transcript that is clipped off during processing." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "3'-clip" EXACT [] synonym: "three prime clip" EXACT [] is_a: SO:0000303 ! clip [Term] id: SO:0000558 name: C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene including more than one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "C cluster" EXACT [] synonym: "C-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000478 ! C_gene_segment [Term] id: SO:0000559 name: D_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including more than one D-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D cluster" EXACT [] synonym: "D-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment [Term] id: SO:0000560 name: D_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one D-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D J cluster" EXACT [] synonym: "D-J-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000470 ! J_gene_segment [Term] id: SO:0000561 name: heptamer_of_recombination_feature_of_vertebrate_immune_system_gene def: "Seven nucleotide recombination site (e.g. CACAGTG), part of V-gene, D-gene or J-gene recombination feature of an immunoglobulin or T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "HEPTAMER" RELATED [] synonym: "heptamer of recombination feature of vertebrate immune system gene" EXACT [] is_a: SO:0000939 ! vertebrate_immune_system_gene_recombination_signal_feature [Term] id: SO:0000562 name: nonamer_of_recombination_feature_of_vertebrate_immune_system_gene synonym: "nonamer of recombination feature of vertebrate immune system gene" EXACT [] is_a: SO:0000939 ! vertebrate_immune_system_gene_recombination_signal_feature [Term] id: SO:0000563 name: vertebrate_immune_system_gene_recombination_spacer synonym: "vertebrate immune system gene recombination spacer" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000564 name: V_DJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one DJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V DJ J C cluster" EXACT [] synonym: "V-(DJ)-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000565 name: V_VDJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VDJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VDJ J C cluster" EXACT [] synonym: "V-(VDJ)-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000566 name: V_VJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VJ J C cluster" EXACT [] synonym: "V-(VJ)-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000567 name: inversion_derived_aneuploid_chromosome def: "A chromosome may be generated by recombination between two inversions; presumed to have a deficiency or duplication at each end of the inversion." [FB:km] synonym: "inversion derived aneuploid chromosome" EXACT [] is_a: SO:0000550 ! aneuploid_chromosome [Term] id: SO:0000568 name: bidirectional_promoter synonym: "bidirectional promoter" EXACT [] is_a: SO:0000167 ! promoter [Term] id: SO:0000569 name: retrotransposed alt_id: SO:0100042 def: "An attribute of a feature that occurred as the product of a reverse transcriptase mediated event." [SO:ke] comment: GO:0003964 RNA-directed DNA polymerase activity. xref: http://en.wikipedia.org/wiki/Retrotransposed "wiki" is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000570 name: three_prime_D_recombination_signal_sequence def: "Recombination signal of an immunoglobulin/T-cell receptor gene, including the 3' D-heptamer (SO:0000493), 3' D-spacer, and 3' D-nonamer (SO:0000494) in 3' of the D-region of a D-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "3'D-RS" EXACT [] synonym: "three prime D recombination signal sequence" EXACT [] synonym: "three_prime_D-recombination_signal_sequence" EXACT [] is_a: SO:0000492 ! D_gene_recombination_feature [Term] id: SO:0000571 name: miRNA_encoding synonym: "miRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000572 name: DJ_gene_segment def: "Genomic DNA of immunoglobulin/T-cell receptor gene in partially rearranged genomic DNA including D-J-region with 5' UTR and 3' UTR, also designated as D-J-segment." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D-J-GENE" EXACT [] synonym: "DJ gene" EXACT [] is_a: SO:0000936 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_segment [Term] id: SO:0000573 name: rRNA_encoding synonym: "rRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000574 name: VDJ_gene_segment def: "Rearranged genomic DNA of immunoglobulin/T-cell receptor gene including L-part1, V-intron and V-D-J-exon, with the 5'UTR (SO:0000204) and 3'UTR (SO:0000205)." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V-D-J-GENE" EXACT [] synonym: "VDJ gene" EXACT [] is_a: SO:0000936 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_segment [Term] id: SO:0000575 name: scRNA_encoding synonym: "scRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000576 name: VJ_gene_segment def: "Rearranged genomic DNA of immunoglobulin/T-cell receptor gene including L-part1, V-intron and V-J-exon, with the 5'UTR (SO:0000204) and 3'UTR (SO:0000205)." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V-J-GENE" EXACT [] synonym: "VJ gene" EXACT [] is_a: SO:0000936 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_segment [Term] id: SO:0000577 name: centromere def: "A region of chromosome where the spindle fibers attach during mitosis and meiosis." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Centromere "wiki" is_a: SO:0000628 ! chromosomal_structural_element [Term] id: SO:0000578 name: snoRNA_encoding synonym: "snoRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000579 name: edited_transcript_feature def: "A locatable feature on a transcript that is edited." [SO:ma] synonym: "edited transcript feature" EXACT [] is_a: SO:0000833 ! transcript_region [Term] id: SO:0000580 name: methylation_guide_snoRNA_primary_transcript def: "A primary transcript encoding a methylation guide small nucleolar RNA." [SO:ke] synonym: "methylation guide snoRNA primary transcript" EXACT [] is_a: SO:0000232 ! snoRNA_primary_transcript [Term] id: SO:0000581 name: cap def: "A structure consisting of a 7-methylguanosine in 5'-5' triphosphate linkage with the first nucleotide of an mRNA. It is added post-transcriptionally, and is not encoded in the DNA." [http://seqcore.brcf.med.umich.edu/doc/educ/dnapr/mbglossary/mbgloss.html] subset: SOFA xref: http://en.wikipedia.org/wiki/5%27_cap "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000582 name: rRNA_cleavage_snoRNA_primary_transcript def: "A primary transcript encoding an rRNA cleavage snoRNA." [SO:ke] synonym: "rRNA cleavage snoRNA primary transcript" EXACT [] is_a: SO:0000232 ! snoRNA_primary_transcript [Term] id: SO:0000583 name: pre_edited_region def: "The region of a transcript that will be edited." [http://dna.kdna.ucla.edu/rna/index.aspx] synonym: "pre edited region" EXACT [] synonym: "pre-edited region" EXACT [] is_a: SO:0000579 ! edited_transcript_feature [Term] id: SO:0000584 name: tmRNA def: "A tmRNA liberates a mRNA from a stalled ribosome. To accomplish this part of the tmRNA is used as a reading frame that ends in a translation stop signal. The broken mRNA is replaced in the ribosome by the tmRNA and translation of the tmRNA leads to addition of a proteolysis tag to the incomplete protein enabling recognition by a protease. Recently a number of permuted tmRNAs genes have been found encoded in two parts. TmRNAs have been identified in eubacteria and some chloroplasts but are absent from archeal and Eukaryote nuclear genomes." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00023] synonym: "10Sa RNA" RELATED [] synonym: "ssrA" RELATED [] xref: http://en.wikipedia.org/wiki/TmRNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000585 name: C_D_box_snoRNA_encoding synonym: "C/D box snoRNA encoding" EXACT [] is_a: SO:0000578 ! snoRNA_encoding [Term] id: SO:0000586 name: tmRNA_primary_transcript def: "A primary transcript encoding a tmRNA (SO:0000584)." [SO:ke] synonym: "10Sa RNA primary transcript" RELATED [] synonym: "ssrA RNA primary transcript" RELATED [] synonym: "tmRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000587 name: group_I_intron def: "Group I catalytic introns are large self-splicing ribozymes. They catalyze their own excision from mRNA, tRNA and rRNA precursors in a wide range of organisms. The core secondary structure consists of 9 paired regions (P1-P9). These fold to essentially two domains, the P4-P6 domain (formed from the stacking of P5, P4, P6 and P6a helices) and the P3-P9 domain (formed from the P8, P3, P7 and P9 helices). Group I catalytic introns often have long ORFs inserted in loop regions." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00028] comment: GO:0000372. subset: SOFA synonym: "group I intron" EXACT [] xref: http://en.wikipedia.org/wiki/Group_I_intron "wiki" is_a: SO:0000588 ! autocatalytically_spliced_intron [Term] id: SO:0000588 name: autocatalytically_spliced_intron def: "A self spliced intron." [SO:ke] subset: SOFA synonym: "autocatalytically spliced intron" EXACT [] is_a: SO:0000188 ! intron intersection_of: SO:0000188 ! intron intersection_of: has_quality SO:0001186 ! ribozymic relationship: has_quality SO:0001186 ! ribozymic [Term] id: SO:0000589 name: SRP_RNA_primary_transcript def: "A primary transcript encoding a signal recognition particle RNA." [SO:ke] synonym: "SRP RNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000590 name: SRP_RNA def: "The signal recognition particle (SRP) is a universally conserved ribonucleoprotein. It is involved in the co-translational targeting of proteins to membranes. The eukaryotic SRP consists of a 300-nucleotide 7S RNA and six proteins: SRPs 72, 68, 54, 19, 14, and 9. Archaeal SRP consists of a 7S RNA and homologues of the eukaryotic SRP19 and SRP54 proteins. In most eubacteria, the SRP consists of a 4.5S RNA and the Ffh protein (a homologue of the eukaryotic SRP54 protein). Eukaryotic and archaeal 7S RNAs have very similar secondary structures, with eight helical elements. These fold into the Alu and S domains, separated by a long linker region. Eubacterial SRP is generally a simpler structure, with the M domain of Ffh bound to a region of the 4.5S RNA that corresponds to helix 8 of the eukaryotic and archaeal SRP S domain. Some Gram-positive bacteria (e.g. Bacillus subtilis), however, have a larger SRP RNA that also has an Alu domain. The Alu domain is thought to mediate the peptide chain elongation retardation function of the SRP. The universally conserved helix which interacts with the SRP54/Ffh M domain mediates signal sequence recognition. In eukaryotes and archaea, the SRP19-helix 6 complex is thought to be involved in SRP assembly and stabilizes helix 8 for SRP54 binding." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00017] subset: SOFA synonym: "7S RNA" RELATED [] synonym: "signal recognition particle RNA" RELATED [] synonym: "SRP RNA" EXACT [] is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000589 ! SRP_RNA_primary_transcript [Term] id: SO:0000591 name: pseudoknot def: "A tertiary structure in RNA where nucleotides in a loop form base pairs with a region of RNA downstream of the loop." [RSC:cb] xref: http://en.wikipedia.org/wiki/Pseudoknot "wiki" is_a: SO:0000002 ! sequence_secondary_structure [Term] id: SO:0000592 name: H_pseudoknot def: "A pseudoknot which contains two stems and at least two loops." [http://www.ncbi.nlm.nih.gov:80/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=10334330&dopt=Abstract] synonym: "classical pseudoknot" EXACT [] synonym: "H pseudoknot" EXACT [] synonym: "H-pseudoknot" EXACT [] synonym: "H-type pseudoknot" EXACT [] synonym: "hairpin-type pseudoknot" EXACT [] is_a: SO:0000591 ! pseudoknot [Term] id: SO:0000593 name: C_D_box_snoRNA def: "Most box C/D snoRNAs also contain long (>10 nt) sequences complementary to rRNA. Boxes C and D, as well as boxes C' and D', are usually located in close proximity, and form a structure known as the box C/D motif. This motif is important for snoRNA stability, processing, nucleolar targeting and function. A small number of box C/D snoRNAs are involved in rRNA processing; most, however, are known or predicted to serve as guide RNAs in ribose methylation of rRNA. Targeting involves direct base pairing of the snoRNA at the rRNA site to be modified and selection of a rRNA nucleotide a fixed distance from box D or D'." [http://www.bio.umass.edu/biochem/rna-sequence/Yeast_snoRNA_Database/snoRNA_DataBase.html] subset: SOFA synonym: "box C/D snoRNA" EXACT [] synonym: "C D box snoRNA" EXACT [] synonym: "C/D box snoRNA" EXACT [] is_a: SO:0000275 ! snoRNA relationship: derives_from SO:0000595 ! C_D_box_snoRNA_primary_transcript [Term] id: SO:0000594 name: H_ACA_box_snoRNA def: "Members of the box H/ACA family contain an ACA triplet, exactly 3 nt upstream from the 3' end and an H-box in a hinge region that links two structurally similar functional domains of the molecule. Both boxes are important for snoRNA biosynthesis and function. A few box H/ACA snoRNAs are involved in rRNA processing; most others are known or predicted to participate in selection of uridine nucleosides in rRNA to be converted to pseudouridines. Site selection is mediated by direct base pairing of the snoRNA with rRNA through one or both targeting domains." [http://www.bio.umass.edu/biochem/rna-sequence/Yeast_snoRNA_Database/snoRNA_DataBase.html] synonym: "box H/ACA snoRNA" EXACT [] synonym: "H ACA box snoRNA" EXACT [] synonym: "H/ACA box snoRNA" EXACT [] is_a: SO:0000275 ! snoRNA relationship: derives_from SO:0000596 ! H_ACA_box_snoRNA_primary_transcript [Term] id: SO:0000595 name: C_D_box_snoRNA_primary_transcript def: "A primary transcript encoding a small nucleolar RNA of the box C/D family." [SO:ke] synonym: "C/D box snoRNA primary transcript" EXACT [] is_a: SO:0000232 ! snoRNA_primary_transcript [Term] id: SO:0000596 name: H_ACA_box_snoRNA_primary_transcript def: "A primary transcript encoding a small nucleolar RNA of the box H/ACA family." [SO:ke] synonym: "H ACA box snoRNA primary transcript" EXACT [] is_a: SO:0000232 ! snoRNA_primary_transcript [Term] id: SO:0000597 name: transcript_edited_by_U_insertion/deletion def: "The insertion and deletion of uridine (U) residues, usually within coding regions of mRNA transcripts of cryptogenes in the mitochondrial genome of kinetoplastid protozoa." [http://www.rna.ucla.edu/index.html] is_obsolete: true [Term] id: SO:0000598 name: edited_by_C_insertion_and_dinucleotide_insertion synonym: "transcript_edited_by_C-insertion_and_dinucleotide_insertion" RELATED [] is_obsolete: true [Term] id: SO:0000599 name: edited_by_C_to_U_substitution is_obsolete: true [Term] id: SO:0000600 name: edited_by_A_to_I_substitution is_obsolete: true [Term] id: SO:0000601 name: edited_by_G_addition is_obsolete: true [Term] id: SO:0000602 name: guide_RNA def: "A short 3'-uridylated RNA that can form a duplex (except for its post-transcriptionally added oligo_U tail (SO:0000609)) with a stretch of mature edited mRNA." [http://www.rna.ucla.edu/index.html] subset: SOFA synonym: "gRNA" EXACT [] synonym: "guide RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Guide_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000603 name: group_II_intron def: "Group II introns are found in rRNA, tRNA and mRNA of organelles in fungi, plants and protists, and also in mRNA in bacteria. They are large self-splicing ribozymes and have 6 structural domains (usually designated dI to dVI). A subset of group II introns also encode essential splicing proteins in intronic ORFs. The length of these introns can therefore be up to 3kb. Splicing occurs in almost identical fashion to nuclear pre-mRNA splicing with two transesterification steps. The 2' hydroxyl of a bulged adenosine in domain VI attacks the 5' splice site, followed by nucleophilic attack on the 3' splice site by the 3' OH of the upstream exon. Protein machinery is required for splicing in vivo, and long range intron-intron and intron-exon interactions are important for splice site positioning. Group II introns are further sub-classified into groups IIA and IIB which differ in splice site consensus, distance of bulged A from 3' splice site, some tertiary interactions, and intronic ORF phylogeny." [http://www.sanger.ac.uk/Software/Rfam/browse/index.shtml] comment: GO:0000373. subset: SOFA synonym: "group II intron" EXACT [] xref: http://en.wikipedia.org/wiki/Group_II_intron "wiki" is_a: SO:0000588 ! autocatalytically_spliced_intron [Term] id: SO:0000604 name: editing_block def: "Edited mRNA sequence mediated by a single guide RNA (SO:0000602)." [http://dna.kdna.ucla.edu/rna/index.aspx] synonym: "editing block" EXACT [] is_a: SO:0000579 ! edited_transcript_feature [Term] id: SO:0000605 name: intergenic_region def: "A region containing or overlapping no genes that is bounded on either side by a gene, or bounded by a gene and the end of the chromosome." [SO:cjm] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "intergenic region" EXACT [] xref: http://en.wikipedia.org/wiki/Intergenic_region "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000606 name: editing_domain def: "Edited mRNA sequence mediated by two or more overlapping guide RNAs (SO:0000602)." [http://dna.kdna.ucla.edu/rna/index.aspx] synonym: "editing domain" EXACT [] is_a: SO:0000579 ! edited_transcript_feature [Term] id: SO:0000607 name: unedited_region def: "The region of an edited transcript that will not be edited." [http://dna.kdna.ucla.edu/rna/index.aspx] synonym: "unedited region" EXACT [] is_a: SO:0000579 ! edited_transcript_feature [Term] id: SO:0000608 name: H_ACA_box_snoRNA_encoding synonym: "H ACA box snoRNA encoding" EXACT [] is_a: SO:0000578 ! snoRNA_encoding [Term] id: SO:0000609 name: oligo_U_tail def: "The string of non-encoded U's at the 3' end of a guide RNA (SO:0000602)." [http://www.rna.ucla.edu/] synonym: "oligo U tail" EXACT [] is_a: SO:0001411 ! biological_region relationship: adjacent_to SO:0000602 ! guide_RNA [Term] id: SO:0000610 name: polyA_sequence def: "Sequence of about 100 nucleotides of A added to the 3' end of most eukaryotic mRNAs." [SO:ke] subset: SOFA synonym: "polyA sequence" EXACT [] is_a: SO:0001411 ! biological_region relationship: adjacent_to SO:0000234 ! mRNA [Term] id: SO:0000611 name: branch_site def: "A pyrimidine rich sequence near the 3' end of an intron to which the 5'end becomes covalently bound during nuclear splicing. The resulting structure resembles a lariat." [SO:ke] subset: SOFA synonym: "branch point" EXACT [] synonym: "branch site" EXACT [] synonym: "branch_point" EXACT [] is_a: SO:0000841 ! spliceosomal_intron_region [Term] id: SO:0000612 name: polypyrimidine_tract def: "The polypyrimidine tract is one of the cis-acting sequence elements directing intron removal in pre-mRNA splicing." [http://nar.oupjournals.org/cgi/content/full/25/4/888] subset: SOFA synonym: "polypyrimidine tract" EXACT [] xref: http://en.wikipedia.org/wiki/Polypyrimidine_tract "wiki" is_a: SO:0000841 ! spliceosomal_intron_region [Term] id: SO:0000613 name: bacterial_RNApol_promoter def: "A DNA sequence to which bacterial RNA polymerase binds, to begin transcription." [SO:ke] synonym: "bacterial RNApol promoter" EXACT [] is_a: SO:0000752 ! gene_group_regulatory_region is_a: SO:0001203 ! RNA_polymerase_promoter [Term] id: SO:0000614 name: bacterial_terminator def: "A terminator signal for bacterial transcription." [SO:ke] synonym: "bacterial terminator" EXACT [] is_a: SO:0000141 ! terminator is_a: SO:0000752 ! gene_group_regulatory_region [Term] id: SO:0000615 name: terminator_of_type_2_RNApol_III_promoter def: "A terminator signal for RNA polymerase III transcription." [SO:ke] synonym: "terminator of type 2 RNApol III promoter" EXACT [] is_a: SO:0000951 ! eukaryotic_terminator [Term] id: SO:0000616 name: transcription_end_site def: "The base where transcription ends." [SO:ke] subset: SOFA synonym: "transcription end site" EXACT [] is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000617 name: RNApol_III_promoter_type_1 synonym: "RNApol III promoter type 1" EXACT [] is_a: SO:0000171 ! RNApol_III_promoter [Term] id: SO:0000618 name: RNApol_III_promoter_type_2 synonym: "RNApol III promoter type 2" EXACT [] synonym: "tRNA promoter" RELATED [] is_a: SO:0000171 ! RNApol_III_promoter [Term] id: SO:0000619 name: A_box def: "A variably distant linear promoter region recognized by TFIIIC, with consensus sequence TGGCnnAGTGG." [SO:ke] comment: Binds TFIIIC. synonym: "A-box" EXACT [] xref: http://en.wikipedia.org/wiki/A-box "wiki" is_a: SO:0001660 ! core_promoter_element [Term] id: SO:0000620 name: B_box def: "A variably distant linear promoter region recognized by TFIIIC, with consensus sequence AGGTTCCAnnCC." [SO:ke] comment: Binds TFIIIC. synonym: "B-box" EXACT [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0000618 ! RNApol_III_promoter_type_2 [Term] id: SO:0000621 name: RNApol_III_promoter_type_3 synonym: "RNApol III promoter type 3" EXACT [] is_a: SO:0000171 ! RNApol_III_promoter [Term] id: SO:0000622 name: C_box def: "An RNA polymerase III type 1 promoter with consensus sequence CAnnCCn." [SO:ke] synonym: "C-box" EXACT [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0000617 ! RNApol_III_promoter_type_1 [Term] id: SO:0000623 name: snRNA_encoding synonym: "snRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000624 name: telomere def: "A specific structure at the end of a linear chromosome, required for the integrity and maintenance of the end." [SO:ma] subset: SOFA synonym: "telomeric DNA" EXACT [] synonym: "telomeric sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Telomere "wiki" is_a: SO:0000628 ! chromosomal_structural_element [Term] id: SO:0000625 name: silencer def: "A regulatory region which upon binding of transcription factors, suppress the transcription of the gene or genes they control." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Silencer_(DNA) "wiki" is_a: SO:0000727 ! CRM [Term] id: SO:0000626 name: chromosomal_regulatory_element synonym: "chromosomal regulatory element" EXACT [] is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000627 name: insulator def: "A transcriptional cis regulatory region that when located between a CM and a gene's promoter prevents the CRM from modulating that genes expression." [SO:regcreative] subset: SOFA synonym: "insulator element" EXACT [] xref: http://en.wikipedia.org/wiki/Insulator_(genetics) "wiki" is_a: SO:0001055 ! transcriptional_cis_regulatory_region [Term] id: SO:0000628 name: chromosomal_structural_element subset: SOFA synonym: "chromosomal structural element" EXACT [] is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000629 name: five_prime_open_reading_frame synonym: "five prime open reading frame" EXACT [] is_a: SO:0000836 ! mRNA_region relationship: part_of SO:0000204 ! five_prime_UTR [Term] id: SO:0000630 name: upstream_AUG_codon def: "A start codon upstream of the ORF." [SO:ke] synonym: "upstream AUG codon" EXACT [] is_a: SO:0000837 ! UTR_region relationship: part_of SO:0000203 ! UTR [Term] id: SO:0000631 name: polycistronic_primary_transcript def: "A primary transcript encoding for more than one gene product." [SO:ke] synonym: "polycistronic primary transcript" EXACT [] is_a: SO:0000078 ! polycistronic_transcript is_a: SO:0000185 ! primary_transcript intersection_of: SO:0000185 ! primary_transcript intersection_of: has_quality SO:0000880 ! polycistronic relationship: has_quality SO:0000880 ! polycistronic [Term] id: SO:0000632 name: monocistronic_primary_transcript def: "A primary transcript encoding for one gene product." [SO:ke] synonym: "monocistronic primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript is_a: SO:0000665 ! monocistronic_transcript intersection_of: SO:0000185 ! primary_transcript intersection_of: has_quality SO:0000878 ! monocistronic relationship: has_quality SO:0000878 ! monocistronic [Term] id: SO:0000633 name: monocistronic_mRNA def: "An mRNA with either a single protein product, or for which the regions encoding all its protein products overlap." [SO:rd] synonym: "monocistronic mRNA" EXACT [] synonym: "monocistronic processed transcript" EXACT [] xref: http://en.wikipedia.org/wiki/Monocistronic_mRNA "wiki" is_a: SO:0000234 ! mRNA is_a: SO:0000665 ! monocistronic_transcript intersection_of: SO:0000234 ! mRNA intersection_of: has_quality SO:0000878 ! monocistronic relationship: has_quality SO:0000878 ! monocistronic [Term] id: SO:0000634 name: polycistronic_mRNA def: "An mRNA that encodes multiple proteins from at least two non-overlapping regions." [SO:rd] synonym: "polycistronic mRNA" EXACT [] synonym: "polycistronic processed transcript" RELATED [] xref: http://en.wikipedia.org/wiki/Polycistronic_mRNA "wiki" is_a: SO:0000078 ! polycistronic_transcript is_a: SO:0000234 ! mRNA intersection_of: SO:0000234 ! mRNA intersection_of: has_quality SO:0000880 ! polycistronic relationship: has_quality SO:0000880 ! polycistronic [Term] id: SO:0000635 name: mini_exon_donor_RNA def: "A primary transcript that donates the spliced leader to other mRNA." [SO:ke] synonym: "mini exon donor RNA" EXACT [] synonym: "mini-exon donor RNA" EXACT [] is_a: SO:0000185 ! primary_transcript [Term] id: SO:0000636 name: spliced_leader_RNA synonym: "mini-exon" RELATED [] synonym: "spliced leader RNA" EXACT [] is_a: SO:0000835 ! primary_transcript_region relationship: part_of SO:0000635 ! mini_exon_donor_RNA [Term] id: SO:0000637 name: engineered_plasmid def: "A plasmid that is engineered." [SO:xp] synonym: "engineered plasmid" EXACT [] synonym: "engineered plasmid gene" RELATED [] is_a: SO:0000155 ! plasmid is_a: SO:0000804 ! engineered_region intersection_of: SO:0000155 ! plasmid intersection_of: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000638 name: transcribed_spacer_region def: "Part of an rRNA transcription unit that is transcribed but discarded during maturation, not giving rise to any part of rRNA." [http://oregonstate.edu/instruction/bb492/general/glossary.html] synonym: "transcribed spacer region" EXACT [] is_a: SO:0000838 ! rRNA_primary_transcript_region [Term] id: SO:0000639 name: internal_transcribed_spacer_region def: "Non-coding regions of DNA sequence that separate genes coding for the 28S, 5.8S, and 18S ribosomal RNAs." [SO:ke] synonym: "internal transcribed spacer region" EXACT [] is_a: SO:0000638 ! transcribed_spacer_region [Term] id: SO:0000640 name: external_transcribed_spacer_region def: "Non-coding regions of DNA that precede the sequence that codes for the ribosomal RNA." [SO:ke] synonym: "external transcribed spacer region" EXACT [] is_a: SO:0000638 ! transcribed_spacer_region [Term] id: SO:0000641 name: tetranucleotide_repeat_microsatellite_feature synonym: "tetranucleotide repeat microsatellite feature" EXACT [] is_a: SO:0000289 ! microsatellite [Term] id: SO:0000642 name: SRP_RNA_encoding synonym: "SRP RNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000643 name: minisatellite def: "A repeat region containing tandemly repeated sequences having a unit length of 10 to 40 bp." [http://www.informatics.jax.org/silver/glossary.shtml] subset: SOFA xref: http://en.wikipedia.org/wiki/Minisatellite "wiki" is_a: SO:0000005 ! satellite_DNA [Term] id: SO:0000644 name: antisense_RNA def: "Antisense RNA is RNA that is transcribed from the coding, rather than the template, strand of DNA. It is therefore complementary to mRNA." [SO:ke] subset: SOFA synonym: "antisense RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Antisense_RNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000645 ! antisense_primary_transcript [Term] id: SO:0000645 name: antisense_primary_transcript def: "The reverse complement of the primary transcript." [SO:ke] subset: SOFA synonym: "antisense primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript [Term] id: SO:0000646 name: siRNA def: "A small RNA molecule that is the product of a longer exogenous or endogenous dsRNA, which is either a bimolecular duplex or very long hairpin, processed (via the Dicer pathway) such that numerous siRNAs accumulate from both strands of the dsRNA. SRNAs trigger the cleavage of their target molecules." [PMID:12592000] subset: SOFA synonym: "small interfering RNA" EXACT [] xref: http://en.wikipedia.org/wiki/SiRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000647 name: miRNA_primary_transcript def: "A primary transcript encoding a micro RNA." [SO:ke] synonym: "micro RNA primary transcript" EXACT [] synonym: "miRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000648 name: stRNA_primary_transcript def: "A primary transcript encoding a small temporal mRNA (SO:0000649)." [SO:ke] synonym: "small temporal RNA primary transcript" EXACT [] synonym: "stRNA primary transcript" EXACT [] is_a: SO:0000647 ! miRNA_primary_transcript [Term] id: SO:0000649 name: stRNA def: "Non-coding RNAs of about 21 nucleotides in length that regulate temporal development; first discovered in C. elegans." [PMID:11081512] subset: SOFA synonym: "small temporal RNA" EXACT [] xref: http://en.wikipedia.org/wiki/StRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000650 name: small_subunit_rRNA def: "Ribosomal RNA transcript that structures the small subunit of the ribosome." [SO:ke] subset: SOFA synonym: "small subunit rRNA" EXACT [] synonym: "SSU RNA" EXACT [RSC:cb] synonym: "SSU rRNA" EXACT [RSC:cb] is_a: SO:0000252 ! rRNA relationship: derives_from SO:0000255 ! rRNA_small_subunit_primary_transcript [Term] id: SO:0000651 name: large_subunit_rRNA def: "Ribosomal RNA transcript that structures the large subunit of the ribosome." [SO:ke] subset: SOFA synonym: "large subunit rRNA" EXACT [] synonym: "LSU RNA" EXACT [RSC:cb] synonym: "LSU rRNA" EXACT [RSC:cb] is_a: SO:0000252 ! rRNA relationship: derives_from SO:0000325 ! rRNA_large_subunit_primary_transcript [Term] id: SO:0000652 name: rRNA_5S def: "5S ribosomal RNA (5S rRNA) is a component of the large ribosomal subunit in both prokaryotes and eukaryotes. In eukaryotes, it is synthesised by RNA polymerase III (the other eukaryotic rRNAs are cleaved from a 45S precursor synthesised by RNA polymerase I). In Xenopus oocytes, it has been shown that fingers 4-7 of the nine-zinc finger transcription factor TFIIIA can bind to the central region of 5S RNA. Thus, in addition to positively regulating 5S rRNA transcription, TFIIIA also stabilizes 5S rRNA until it is required for transcription." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00001] subset: SOFA synonym: "5S LSU rRNA" EXACT [] synonym: "5S ribosomal RNA" EXACT [] synonym: "5S rRNA" EXACT [] synonym: "rRNA 5S" EXACT [] xref: http://en.wikipedia.org/wiki/5S_ribosomal_RNA "wiki" is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0000653 name: rRNA_28S def: "A component of the large ribosomal subunit." [SO:ke] subset: SOFA synonym: "28S LSU rRNA" EXACT [] synonym: "28S ribosomal RNA" EXACT [] synonym: "28S rRNA" EXACT [] synonym: "rRNA 28S" EXACT [] xref: http://en.wikipedia.org/wiki/28S_ribosomal_RNA "wiki" is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0000654 name: maxicircle_gene def: "A mitochondrial gene located in a maxicircle." [SO:xp] synonym: "maxi-circle gene" EXACT [] synonym: "maxicircle gene" EXACT [] is_a: SO:0000089 ! kinetoplast_gene intersection_of: SO:0000089 ! kinetoplast_gene intersection_of: part_of SO:0000742 ! maxicircle relationship: part_of SO:0000742 ! maxicircle [Term] id: SO:0000655 name: ncRNA def: "An RNA transcript that does not encode for a protein rather the RNA molecule is the gene product." [SO:ke] comment: A ncRNA is a processed_transcript, so it may not contain parts such as transcribed_spacer_regions that are removed in the act of processing. For the corresponding primary_transcripts, please see term SO:0000483 nc_primary_transcript. subset: SOFA synonym: "noncoding RNA" EXACT [] xref: http://en.wikipedia.org/wiki/NcRNA "wiki" is_a: SO:0000233 ! mature_transcript [Term] id: SO:0000656 name: stRNA_encoding synonym: "stRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000657 name: repeat_region def: "A region of sequence containing one or more repeat units." [SO:ke] subset: SOFA synonym: "repeat region" EXACT [] is_a: SO:0001411 ! biological_region relationship: has_part SO:0000726 ! repeat_unit [Term] id: SO:0000658 name: dispersed_repeat def: "A repeat that is located at dispersed sites in the genome." [SO:ke] subset: SOFA synonym: "dispersed repeat" EXACT [] synonym: "interspersed repeat" EXACT [] xref: http://en.wikipedia.org/wiki/Interspersed_repeat "wiki" is_a: SO:0000657 ! repeat_region [Term] id: SO:0000659 name: tmRNA_encoding synonym: "tmRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000660 name: DNA_invertase_target_sequence is_obsolete: true [Term] id: SO:0000661 name: intron_attribute is_obsolete: true [Term] id: SO:0000662 name: spliceosomal_intron def: "An intron which is spliced by the spliceosome." [SO:ke] comment: GO:0000398. subset: SOFA synonym: "spliceosomal intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000663 name: tRNA_encoding synonym: "tRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000664 name: introgressed_chromosome_region synonym: "introgressed chromosome region" EXACT [] is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000665 name: monocistronic_transcript def: "A transcript that is monocistronic." [SO:xp] synonym: "monocistronic transcript" EXACT [] is_a: SO:0000673 ! transcript intersection_of: SO:0000673 ! transcript intersection_of: has_quality SO:0000878 ! monocistronic relationship: has_quality SO:0000878 ! monocistronic [Term] id: SO:0000666 name: mobile_intron def: "An intron (mitochondrial, chloroplast, nuclear or prokaryotic) that encodes a double strand sequence specific endonuclease allowing for mobility." [SO:ke] synonym: "mobile intron" EXACT [] is_a: SO:0000188 ! intron is_a: SO:0001037 ! mobile_genetic_element intersection_of: SO:0000188 ! intron intersection_of: has_quality SO:0001234 ! mobile relationship: has_quality SO:0001234 ! mobile [Term] id: SO:0000667 name: insertion alt_id: SO:1000034 def: "The sequence of one or more nucleotides added between two adjacent nucleotides in the sequence." [SO:ke] subset: DBVAR subset: SOFA synonym: "insertion" EXACT dbvar [http://www.ncbi.nlm.nih.gov/dbvar/] synonym: "nucleotide insertion" EXACT [] synonym: "nucleotide_insertion" EXACT [] xref: loinc:LA6687-3 "Insertion" is_a: SO:0001059 ! sequence_alteration is_a: SO:0001411 ! biological_region [Term] id: SO:0000668 name: EST_match def: "A match against an EST sequence." [SO:ke] subset: SOFA synonym: "EST match" EXACT [] is_a: SO:0000102 ! expressed_sequence_match [Term] id: SO:0000669 name: sequence_rearrangement_feature synonym: "sequence rearrangement feature" EXACT [] is_a: SO:0000298 ! recombination_feature [Term] id: SO:0000670 name: chromosome_breakage_sequence def: "A sequence within the micronuclear DNA of ciliates at which chromosome breakage and telomere addition occurs during nuclear differentiation." [SO:ma] synonym: "chromosome breakage sequence" EXACT [] is_a: SO:0000669 ! sequence_rearrangement_feature [Term] id: SO:0000671 name: internal_eliminated_sequence def: "A sequence eliminated from the genome of ciliates during nuclear differentiation." [SO:ma] synonym: "internal eliminated sequence" EXACT [] is_a: SO:0000669 ! sequence_rearrangement_feature [Term] id: SO:0000672 name: macronucleus_destined_segment def: "A sequence that is conserved, although rearranged relative to the micronucleus, in the macronucleus of a ciliate genome." [SO:ma] synonym: "macronucleus destined segment" EXACT [] is_a: SO:0000669 ! sequence_rearrangement_feature [Term] id: SO:0000673 name: transcript def: "An RNA synthesized on a DNA or RNA template by an RNA polymerase." [SO:ma] subset: SOFA xref: http://en.wikipedia.org/wiki/RNA "wiki" is_a: SO:0000831 ! gene_member_region [Term] id: SO:0000674 name: non_canonical_splice_site def: "A splice site where the donor and acceptor sites differ from the canonical form." [SO:ke] synonym: "non canonical splice site" EXACT [] synonym: "non-canonical splice site" EXACT [] is_obsolete: true consider: SO:0000678 consider: SO:0000679 [Term] id: SO:0000675 name: canonical_splice_site def: "The major class of splice site with dinucleotides GT and AG for donor and acceptor sites, respectively." [SO:ke] synonym: "canonical splice site" EXACT [] is_obsolete: true consider: SO:0000676 consider: SO:0000677 [Term] id: SO:0000676 name: canonical_three_prime_splice_site def: "The canonical 3' splice site has the sequence \"AG\"." [SO:ke] synonym: "canonical 3' splice site" EXACT [] synonym: "canonical three prime splice site" EXACT [] is_a: SO:0000164 ! three_prime_cis_splice_site [Term] id: SO:0000677 name: canonical_five_prime_splice_site def: "The canonical 5' splice site has the sequence \"GT\"." [SO:ke] synonym: "canonical 5' splice site" EXACT [] synonym: "canonical five prime splice site" EXACT [] is_a: SO:0000163 ! five_prime_cis_splice_site [Term] id: SO:0000678 name: non_canonical_three_prime_splice_site def: "A 3' splice site that does not have the sequence \"AG\"." [SO:ke] synonym: "non canonical 3' splice site" RELATED [] synonym: "non canonical three prime splice site" EXACT [] synonym: "non-canonical three prime splice site" EXACT [] is_a: SO:0000164 ! three_prime_cis_splice_site [Term] id: SO:0000679 name: non_canonical_five_prime_splice_site def: "A 5' splice site which does not have the sequence \"GT\"." [SO:ke] synonym: "non canonical 5' splice site" EXACT [] synonym: "non canonical five prime splice site" EXACT [] synonym: "non-canonical five prime splice site" EXACT [] is_a: SO:0000163 ! five_prime_cis_splice_site [Term] id: SO:0000680 name: non_canonical_start_codon def: "A start codon that is not the usual AUG sequence." [SO:ke] synonym: "non ATG start codon" EXACT [] synonym: "non canonical start codon" EXACT [] synonym: "non-canonical start codon" EXACT [] is_a: SO:0000318 ! start_codon [Term] id: SO:0000681 name: aberrant_processed_transcript def: "A transcript that has been processed \"incorrectly\", for example by the failure of splicing of one or more exons." [SO:ke] synonym: "aberrant processed transcript" EXACT [] is_a: SO:0000673 ! transcript [Term] id: SO:0000682 name: splicing_feature is_obsolete: true [Term] id: SO:0000683 name: exonic_splice_enhancer def: "Exonic splicing enhancers (ESEs) facilitate exon definition by assisting in the recruitment of splicing factors to the adjacent intron." [http://www.ncbi.nlm.nih.gov:80/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=12403462&dopt=Abstract] synonym: "exonic splice enhancer" EXACT [] is_a: SO:0000344 ! splice_enhancer [Term] id: SO:0000684 name: nuclease_sensitive_site def: "A region of nucleotide sequence targeted by a nuclease enzyme." [SO:ma] subset: SOFA synonym: "nuclease sensitive site" EXACT [] is_a: SO:0000059 ! nuclease_binding_site [Term] id: SO:0000685 name: DNAseI_hypersensitive_site synonym: "DHS" EXACT [] synonym: "DNAseI hypersensitive site" EXACT [] is_a: SO:0000322 ! nuclease_hypersensitive_site [Term] id: SO:0000686 name: translocation_element def: "A chromosomal translocation whereby the chromosomes carrying non-homologous centromeres may be recovered independently. These chromosomes are described as translocation elements. This occurs for some translocations, particularly but not exclusively, reciprocal translocations." [SO:ma] synonym: "translocation element" EXACT [] is_a: SO:1000044 ! chromosomal_translocation [Term] id: SO:0000687 name: deletion_junction def: "The space between two bases in a sequence which marks the position where a deletion has occurred." [SO:ke] subset: SOFA synonym: "deletion junction" EXACT [] is_a: SO:0000699 ! junction [Term] id: SO:0000688 name: golden_path def: "A set of subregions selected from sequence contigs which when concatenated form a nonredundant linear sequence." [SO:ls] subset: SOFA synonym: "golden path" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0000689 name: cDNA_match def: "A match against cDNA sequence." [SO:ke] subset: SOFA synonym: "cDNA match" EXACT [] is_a: SO:0000102 ! expressed_sequence_match [Term] id: SO:0000690 name: gene_with_polycistronic_transcript def: "A gene that encodes a polycistronic transcript." [SO:xp] synonym: "gene with polycistronic transcript" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: transcribed_to SO:0000078 ! polycistronic_transcript relationship: transcribed_to SO:0000078 ! polycistronic_transcript [Term] id: SO:0000691 name: cleaved_initiator_methionine alt_id: BS:00067 def: "The initiator methionine that has been cleaved from a mature polypeptide sequence." [EBIBS:GAR] subset: biosapiens synonym: "cleaved initiator methionine" EXACT [] synonym: "init_met" RELATED [uniprot:feature_type] synonym: "initiator methionine" RELATED [] is_a: SO:0100011 ! cleaved_peptide_region [Term] id: SO:0000692 name: gene_with_dicistronic_transcript def: "A gene that encodes a dicistronic transcript." [SO:xp] synonym: "gene with dicistronic transcript" EXACT [] is_a: SO:0000690 ! gene_with_polycistronic_transcript intersection_of: SO:0000690 ! gene_with_polycistronic_transcript intersection_of: transcribed_to SO:0000079 ! dicistronic_transcript relationship: transcribed_to SO:0000079 ! dicistronic_transcript [Term] id: SO:0000693 name: gene_with_recoded_mRNA def: "A gene that encodes an mRNA that is recoded." [SO:xp] synonym: "gene with recoded mRNA" EXACT [] is_a: SO:0001217 ! protein_coding_gene intersection_of: SO:0001217 ! protein_coding_gene intersection_of: has_quality SO:0000881 ! recoded relationship: has_quality SO:0000881 ! recoded [Term] id: SO:0000694 name: SNP def: "SNPs are single base pair positions in genomic DNA at which different sequence alternatives exist in normal individuals in some population(s), wherein the least frequent variant has an abundance of 1% or greater." [SO:cb] subset: SOFA synonym: "single nucleotide polymorphism" EXACT [] is_a: SO:0001483 ! SNV [Term] id: SO:0000695 name: reagent def: "A sequence used in experiment." [SO:ke] comment: Requested by Lynn Crosby, jan 2006. subset: SOFA is_a: SO:0001409 ! biomaterial_region [Term] id: SO:0000696 name: oligo def: "A short oligonucleotide sequence, of length on the order of 10's of bases; either single or double stranded." [SO:ma] subset: SOFA synonym: "oligonucleotide" EXACT [] xref: http://en.wikipedia.org/wiki/Oligonucleotide "wiki" is_a: SO:0000695 ! reagent [Term] id: SO:0000697 name: gene_with_stop_codon_read_through def: "A gene that encodes a transcript with stop codon readthrough." [SO:xp] synonym: "gene with stop codon read through" EXACT [] is_a: SO:0000693 ! gene_with_recoded_mRNA intersection_of: SO:0000693 ! gene_with_recoded_mRNA intersection_of: has_part SO:0000883 ! stop_codon_read_through relationship: has_part SO:0000883 ! stop_codon_read_through [Term] id: SO:0000698 name: gene_with_stop_codon_redefined_as_pyrrolysine def: "A gene encoding an mRNA that has the stop codon redefined as pyrrolysine." [SO:xp] synonym: "gene with stop codon redefined as pyrrolysine" EXACT [] is_a: SO:0000697 ! gene_with_stop_codon_read_through intersection_of: SO:0000693 ! gene_with_recoded_mRNA intersection_of: has_part SO:0000884 ! stop_codon_redefined_as_pyrrolysine relationship: has_part SO:0000884 ! stop_codon_redefined_as_pyrrolysine [Term] id: SO:0000699 name: junction def: "A sequence_feature with an extent of zero." [SO:ke] comment: A junction is a boundary between regions. A boundary has an extent of zero. subset: SOFA synonym: "boundary" EXACT [] synonym: "breakpoint" EXACT [] is_a: SO:0000110 ! sequence_feature [Term] id: SO:0000700 name: remark def: "A comment about the sequence." [SO:ke] subset: SOFA is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000701 name: possible_base_call_error def: "A region of sequence where the validity of the base calling is questionable." [SO:ke] subset: SOFA synonym: "possible base call error" EXACT [] is_a: SO:0000413 ! sequence_difference [Term] id: SO:0000702 name: possible_assembly_error def: "A region of sequence where there may have been an error in the assembly." [SO:ke] subset: SOFA synonym: "possible assembly error" EXACT [] is_a: SO:0000413 ! sequence_difference [Term] id: SO:0000703 name: experimental_result_region def: "A region of sequence implicated in an experimental result." [SO:ke] subset: SOFA synonym: "experimental result region" EXACT [] is_a: SO:0000700 ! remark [Term] id: SO:0000704 name: gene def: "A region (or regions) that includes all of the sequence elements necessary to encode a functional transcript. A gene may include regulatory regions, transcribed regions and/or other functional sequence regions." [SO:immuno_workshop] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. A gene may be considered as a unit of inheritance. subset: SOFA xref: http://en.wikipedia.org/wiki/Gene "wiki" is_a: SO:0001411 ! biological_region relationship: member_of SO:0005855 ! gene_group [Term] id: SO:0000705 name: tandem_repeat def: "Two or more adjcent copies of a region (of length greater than 1)." [SO:ke] subset: SOFA synonym: "tandem repeat" EXACT [] xref: http://en.wikipedia.org/wiki/Tandem_repeat "wiki" xref: http://www.sci.sdsu.edu/~smaloy/Glossary/T.html is_a: SO:0000657 ! repeat_region [Term] id: SO:0000706 name: trans_splice_acceptor_site def: "The 3' splice site of the acceptor primary transcript." [SO:ke] comment: This region contains a polypyridine tract and AG dinucleotide in some organisms and is UUUCAG in C. elegans. subset: SOFA synonym: "3' trans splice site" RELATED [] synonym: "trans splice acceptor site" EXACT [] is_a: SO:0001420 ! trans_splice_site [Term] id: SO:0000707 name: trans_splice_donor_site def: "The 5' five prime splice site region of the donor RNA." [SO:ke] comment: SL RNA contains a donor site. synonym: "5 prime trans splice site" RELATED [] synonym: "trans splice donor site" EXACT [] synonym: "trans-splice donor site" EXACT [] is_a: SO:0001420 ! trans_splice_site [Term] id: SO:0000708 name: SL1_acceptor_site def: "A trans_splicing_acceptor_site which appends the 22nt SL1 RNA leader sequence to the 5' end of most mRNAs." [SO:nlw] synonym: "SL1 acceptor site" EXACT [] is_a: SO:0000706 ! trans_splice_acceptor_site [Term] id: SO:0000709 name: SL2_acceptor_site def: "A trans_splicing_acceptor_site which appends the 22nt SL2 RNA leader sequence to the 5' end of mRNAs. SL2 acceptor sites occur in genes in internal segments of polycistronic transcripts." [SO:nlw] synonym: "SL2 acceptor site" EXACT [] is_a: SO:0000706 ! trans_splice_acceptor_site [Term] id: SO:0000710 name: gene_with_stop_codon_redefined_as_selenocysteine def: "A gene encoding an mRNA that has the stop codon redefined as selenocysteine." [SO:xp] synonym: "gene with stop codon redefined as selenocysteine" EXACT [] is_a: SO:0000697 ! gene_with_stop_codon_read_through intersection_of: SO:0000697 ! gene_with_stop_codon_read_through intersection_of: has_part SO:0000885 ! stop_codon_redefined_as_selenocysteine relationship: has_part SO:0000885 ! stop_codon_redefined_as_selenocysteine [Term] id: SO:0000711 name: gene_with_mRNA_recoded_by_translational_bypass def: "A gene with mRNA recoded by translational bypass." [SO:xp] synonym: "gene with mRNA recoded by translational bypass" EXACT [] is_a: SO:0000693 ! gene_with_recoded_mRNA intersection_of: SO:0001217 ! protein_coding_gene intersection_of: has_quality SO:0000886 ! recoded_by_translational_bypass relationship: has_quality SO:0000886 ! recoded_by_translational_bypass [Term] id: SO:0000712 name: gene_with_transcript_with_translational_frameshift def: "A gene encoding a transcript that has a translational frameshift." [SO:xp] synonym: "gene with transcript with translational frameshift" EXACT [] is_a: SO:0000693 ! gene_with_recoded_mRNA intersection_of: SO:0000693 ! gene_with_recoded_mRNA intersection_of: has_quality SO:0000887 ! translationally_frameshifted relationship: has_quality SO:0000887 ! translationally_frameshifted [Term] id: SO:0000713 name: DNA_motif def: "A motif that is active in the DNA form of the sequence." [SO:ke] synonym: "DNA motif" EXACT [] xref: http://en.wikipedia.org/wiki/DNA_motif "wiki" is_a: SO:0000714 ! nucleotide_motif [Term] id: SO:0000714 name: nucleotide_motif def: "A region of nucleotide sequence corresponding to a known motif." [SO:ke] subset: SOFA synonym: "nucleotide motif" EXACT [] is_a: SO:0001683 ! sequence_motif [Term] id: SO:0000715 name: RNA_motif def: "A motif that is active in RNA sequence." [SO:ke] subset: SOFA synonym: "RNA motif" EXACT [] is_a: SO:0000714 ! nucleotide_motif [Term] id: SO:0000716 name: dicistronic_mRNA def: "An mRNA that has the quality dicistronic." [SO:ke] synonym: "dicistronic mRNA" EXACT [] synonym: "dicistronic processed transcript" RELATED [] is_a: SO:0000079 ! dicistronic_transcript is_a: SO:0000634 ! polycistronic_mRNA intersection_of: SO:0000234 ! mRNA intersection_of: has_quality SO:0000879 ! dicistronic relationship: has_quality SO:0000879 ! dicistronic [Term] id: SO:0000717 name: reading_frame def: "A nucleic acid sequence that when read as sequential triplets, has the potential of encoding a sequential string of amino acids. It need not contain the start or stop codon." [SGD:rb] comment: This term was added after a request by SGD. August 2004. Modified after SO meeting in Cambridge to not include start or stop. subset: SOFA synonym: "reading frame" EXACT [] xref: http://en.wikipedia.org/wiki/Reading_frame "wiki" is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000718 name: blocked_reading_frame def: "A reading_frame that is interrupted by one or more stop codons; usually identified through intergenomic sequence comparisons." [SGD:rb] comment: Term requested by Rama from SGD. synonym: "blocked reading frame" EXACT [] is_a: SO:0000717 ! reading_frame [Term] id: SO:0000719 name: ultracontig def: "An ordered and oriented set of scaffolds based on somewhat weaker sets of inferential evidence such as one set of mate pair reads together with supporting evidence from ESTs or location of markers from SNP or microsatellite maps, or cytogenetic localization of contained markers." [FB:WG] subset: SOFA synonym: "superscaffold" RELATED [] is_a: SO:0001876 ! partial_genomic_sequence_assembly [Term] id: SO:0000720 name: foreign_transposable_element def: "A transposable element that is foreign." [SO:ke] comment: requested by Michael on 19 Nov 2004. synonym: "foreign transposable element" EXACT [] is_a: SO:0000101 ! transposable_element intersection_of: SO:0000101 ! transposable_element intersection_of: has_quality SO:0000784 ! foreign relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000721 name: gene_with_dicistronic_primary_transcript def: "A gene that encodes a dicistronic primary transcript." [SO:xp] comment: Requested by Michael, 19 nov 2004. synonym: "gene with dicistronic primary transcript" EXACT [] is_a: SO:0000692 ! gene_with_dicistronic_transcript intersection_of: SO:0000692 ! gene_with_dicistronic_transcript intersection_of: transcribed_to SO:1001197 ! dicistronic_primary_transcript relationship: transcribed_to SO:1001197 ! dicistronic_primary_transcript [Term] id: SO:0000722 name: gene_with_dicistronic_mRNA def: "A gene that encodes a polycistronic mRNA." [SO:xp] comment: Requested by MA nov 19 2004. synonym: "gene with dicistronic mRNA" EXACT [] synonym: "gene with dicistronic processed transcript" EXACT [] is_a: SO:0000692 ! gene_with_dicistronic_transcript intersection_of: SO:0000692 ! gene_with_dicistronic_transcript intersection_of: transcribed_to SO:0000716 ! dicistronic_mRNA relationship: transcribed_to SO:0000716 ! dicistronic_mRNA [Term] id: SO:0000723 name: iDNA def: "Genomic sequence removed from the genome, as a normal event, by a process of recombination." [SO:ma] synonym: "intervening DNA" EXACT [] xref: http://en.wikipedia.org/wiki/IDNA "wiki" is_a: SO:0000298 ! recombination_feature [Term] id: SO:0000724 name: oriT def: "A region of a DNA molecule where transfer is initiated during the process of conjugation or mobilization." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "origin of transfer" EXACT [] xref: http://en.wikipedia.org/wiki/Origin_of_transfer "wiki" is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000725 name: transit_peptide alt_id: BS:00055 def: "The transit_peptide is a short region at the N-terminus of the peptide that directs the protein to an organelle (chloroplast, mitochondrion, microbody or cyanelle)." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: Added to bring SO inline with the embl ddbj genbank feature table. Old definition before biosapiens: The coding sequence for an N-terminal domain of a nuclear-encoded organellar protein. This domain is involved in post translational import of the protein into the organelle. subset: biosapiens subset: SOFA synonym: "signal" RELATED [] synonym: "transit" RELATED [uniprot:feature_type] synonym: "transit peptide" EXACT [] is_a: SO:0001527 ! peptide_localization_signal [Term] id: SO:0000726 name: repeat_unit def: "The simplest repeated component of a repeat region. A single repeat." [SO:ke] comment: Added to comply with the feature table. A single repeat. synonym: "repeat unit" EXACT [] xref: http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html is_a: SO:0001411 ! biological_region [Term] id: SO:0000727 name: CRM def: "A regulatory_region where more than 1 TF_binding_site together are regulatorily active." [SO:SG] comment: Requested by Stepen Grossmann Dec 2004. subset: SOFA synonym: "cis regulatory module" EXACT [] synonym: "TF module" EXACT [] is_a: SO:0001055 ! transcriptional_cis_regulatory_region intersection_of: SO:0001055 ! transcriptional_cis_regulatory_region intersection_of: has_part SO:0000235 ! TF_binding_site relationship: has_part SO:0000235 ! TF_binding_site [Term] id: SO:0000728 name: intein def: "A region of a peptide that is able to excise itself and rejoin the remaining portions with a peptide bond." [SO:ke] comment: Intein-mediated protein splicing occurs after mRNA has been translated into a protein. synonym: "protein intron" RELATED [] xref: http://en.wikipedia.org/wiki/Intein "wiki" is_a: SO:0100011 ! cleaved_peptide_region [Term] id: SO:0000729 name: intein_containing def: "An attribute of protein-coding genes where the initial protein product contains an intein." [SO:ke] synonym: "intein containing" EXACT [] is_a: SO:0000010 ! protein_coding [Term] id: SO:0000730 name: gap def: "A gap in the sequence of known length. The unknown bases are filled in with N's." [SO:ke] subset: SOFA is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000353 ! sequence_assembly [Term] id: SO:0000731 name: fragmentary def: "An attribute to describe a feature that is incomplete." [SO:ke] comment: Term added because of request by MO people. synonym: "fragment" EXACT [] is_a: SO:0000905 ! status [Term] id: SO:0000732 name: predicted def: "An attribute describing an unverified region." [SO:ke] xref: http://en.wikipedia.org/wiki/Predicted "wiki" is_a: SO:0000905 ! status [Term] id: SO:0000733 name: feature_attribute def: "An attribute describing a located_sequence_feature." [SO:ke] synonym: "feature attribute" EXACT [] is_a: SO:0000400 ! sequence_attribute [Term] id: SO:0000734 name: exemplar_mRNA def: "An exemplar is a representative cDNA sequence for each gene. The exemplar approach is a method that usually involves some initial clustering into gene groups and the subsequent selection of a representative from each gene group." [http://mged.sourceforge.net/ontologies/MGEDontology.php] comment: Added for the MO people. synonym: "exemplar mRNA" EXACT [] is_a: SO:0000234 ! mRNA intersection_of: SO:0000234 ! mRNA intersection_of: has_quality SO:0000864 ! exemplar relationship: has_quality SO:0000864 ! exemplar [Term] id: SO:0000735 name: sequence_location synonym: "sequence location" EXACT [] is_a: SO:0000400 ! sequence_attribute [Term] id: SO:0000736 name: organelle_sequence synonym: "organelle sequence" EXACT [] is_a: SO:0000735 ! sequence_location [Term] id: SO:0000737 name: mitochondrial_sequence comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "mitochondrial sequence" EXACT [] is_a: SO:0000736 ! organelle_sequence [Term] id: SO:0000738 name: nuclear_sequence synonym: "nuclear sequence" EXACT [] is_a: SO:0000736 ! organelle_sequence [Term] id: SO:0000739 name: nucleomorphic_sequence synonym: "nucleomorphic sequence" EXACT [] is_a: SO:0000736 ! organelle_sequence [Term] id: SO:0000740 name: plastid_sequence synonym: "plastid sequence" EXACT [] is_a: SO:0000736 ! organelle_sequence [Term] id: SO:0000741 name: kinetoplast alt_id: SO:0000826 def: "A kinetoplast is an interlocked network of thousands of minicircles and tens of maxi circles, located near the base of the flagellum of some protozoan species." [PMID:8395055] synonym: "kinetoplast_chromosome" EXACT [] xref: http://en.wikipedia.org/wiki/Kinetoplast "wiki" is_a: SO:0001026 ! genome intersection_of: SO:0001260 ! sequence_collection intersection_of: has_part SO:0000742 ! maxicircle intersection_of: has_part SO:0000980 ! minicircle relationship: has_part SO:0000742 ! maxicircle relationship: has_part SO:0000980 ! minicircle [Term] id: SO:0000742 name: maxicircle alt_id: SO:0000827 def: "A maxicircle is a replicon, part of a kinetoplast, that contains open reading frames and replicates via a rolling circle method." [PMID:8395055] synonym: "maxicircle_chromosome" EXACT [] is_a: SO:0001235 ! replicon [Term] id: SO:0000743 name: apicoplast_sequence synonym: "apicoplast sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000744 name: chromoplast_sequence synonym: "chromoplast sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000745 name: chloroplast_sequence synonym: "chloroplast sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000746 name: cyanelle_sequence synonym: "cyanelle sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000747 name: leucoplast_sequence synonym: "leucoplast sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000748 name: proplastid_sequence synonym: "proplastid sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000749 name: plasmid_location synonym: "plasmid location" EXACT [] is_a: SO:0000735 ! sequence_location [Term] id: SO:0000750 name: amplification_origin def: "An origin_of_replication that is used for the amplification of a chromosomal nucleic acid sequence." [SO:ma] synonym: "amplification origin" EXACT [] is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000751 name: proviral_location synonym: "proviral location" EXACT [] is_a: SO:0000735 ! sequence_location [Term] id: SO:0000752 name: gene_group_regulatory_region subset: SOFA synonym: "gene group regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region relationship: member_of SO:0005855 ! gene_group [Term] id: SO:0000753 name: clone_insert def: "The region of sequence that has been inserted and is being propagated by the clone." [SO:ke] subset: SOFA synonym: "clone insert" EXACT [] is_a: SO:0000695 ! reagent relationship: part_of SO:0000151 ! clone [Term] id: SO:0000754 name: lambda_vector def: "The lambda bacteriophage is the vector for the linear lambda clone. The genes involved in the lysogenic pathway are removed from the from the viral DNA. Up to 25 kb of foreign DNA can then be inserted into the lambda genome." [ISBN:0-1767-2380-8] synonym: "lambda vector" EXACT [] is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000755 name: plasmid_vector synonym: "plasmid vector" EXACT [] xref: http://en.wikipedia.org/wiki/Plasmid_vector#Vectors "wiki" is_a: SO:0000440 ! vector_replicon intersection_of: SO:0001235 ! replicon intersection_of: derives_from SO:0000155 ! plasmid relationship: derives_from SO:0000155 ! plasmid [Term] id: SO:0000756 name: cDNA def: "DNA synthesized by reverse transcriptase using RNA as a template." [SO:ma] synonym: "complementary DNA" EXACT [] xref: http://en.wikipedia.org/wiki/CDNA "wiki" is_a: SO:0000352 ! DNA [Term] id: SO:0000757 name: single_stranded_cDNA synonym: "single strand cDNA" EXACT [] synonym: "single stranded cDNA" EXACT [] synonym: "single-strand cDNA" RELATED [] is_a: SO:0000756 ! cDNA [Term] id: SO:0000758 name: double_stranded_cDNA synonym: "double strand cDNA" RELATED [] synonym: "double stranded cDNA" EXACT [] synonym: "double-strand cDNA" RELATED [] is_a: SO:0000756 ! cDNA [Term] id: SO:0000759 name: plasmid_clone is_obsolete: true [Term] id: SO:0000760 name: YAC_clone is_obsolete: true [Term] id: SO:0000761 name: phagemid_clone is_obsolete: true [Term] id: SO:0000762 name: PAC_clone synonym: "P1_clone" RELATED [] is_obsolete: true [Term] id: SO:0000763 name: fosmid_clone is_obsolete: true [Term] id: SO:0000764 name: BAC_clone is_obsolete: true [Term] id: SO:0000765 name: cosmid_clone is_obsolete: true [Term] id: SO:0000766 name: pyrrolysyl_tRNA def: "A tRNA sequence that has a pyrrolysine anticodon, and a 3' pyrrolysine binding region." [SO:ke] synonym: "pyrrolysyl tRNA" EXACT [] synonym: "pyrrolysyl-transfer ribonucleic acid" EXACT [] synonym: "pyrrolysyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0001178 ! pyrrolysine_tRNA_primary_transcript [Term] id: SO:0000767 name: clone_insert_start is_obsolete: true [Term] id: SO:0000768 name: episome def: "A plasmid that may integrate with a chromosome." [SO:ma] is_a: SO:0000155 ! plasmid [Term] id: SO:0000769 name: tmRNA_coding_piece def: "The region of a two-piece tmRNA that bears the reading frame encoding the proteolysis tag. The tmRNA gene undergoes circular permutation in some groups of bacteria. Processing of the transcripts from such a gene leaves the mature tmRNA in two pieces, base-paired together." [doi:10.1093/nar/gkh795, Indiana:kw, issn:1362-4962] comment: Added in response to comment from Kelly Williams from Indiana. Nov 2005. synonym: "tmRNA coding piece" EXACT [] is_a: SO:0000847 ! tmRNA_region [Term] id: SO:0000770 name: tmRNA_acceptor_piece def: "The acceptor region of a two-piece tmRNA that when mature is charged at its 3' end with alanine. The tmRNA gene undergoes circular permutation in some groups of bacteria; processing of the transcripts from such a gene leaves the mature tmRNA in two pieces, base-paired together." [doi:10.1093/nar/gkh795, Indiana:kw] comment: Added in response to Kelly Williams from Indiana. Date: Nov 2005. synonym: "tmRNA acceptor piece" EXACT [] is_a: SO:0000847 ! tmRNA_region [Term] id: SO:0000771 name: QTL def: "A quantitative trait locus (QTL) is a polymorphic locus which contains alleles that differentially affect the expression of a continuously distributed phenotypic trait. Usually it is a marker described by statistical association to quantitative variation in the particular phenotypic trait that is thought to be controlled by the cumulative action of alleles at multiple loci." [http://rgd.mcw.edu/tu/qtls/] comment: Added in respose to request by Simon Twigger November 14th 2005. synonym: "quantitative trait locus" EXACT [] is_a: SO:0001411 ! biological_region [Term] id: SO:0000772 name: genomic_island def: "A genomic island is an integrated mobile genetic element, characterized by size (over 10 Kb). It that has features that suggest a foreign origin. These can include nucleotide distribution (oligonucleotides signature, CG content etc.) that differs from the bulk of the chromosome and/or genes suggesting DNA mobility." [Phigo:at, SO:ke] comment: Genomic islands are transmissible elements characterized by large size (>10kb). synonym: "genomic island" EXACT [] xref: http://en.wikipedia.org/wiki/Genomic_island "wiki" is_a: SO:0001039 ! integrated_mobile_genetic_element [Term] id: SO:0000773 name: pathogenic_island def: "Mobile genetic elements that contribute to rapid changes in virulence potential. They are present on the genomes of pathogenic strains but absent from the genomes of non pathogenic members of the same or related species." [SO:ke] comment: Nature Reviews Microbiology 2, 414-424 (2004); doi:10.1038 micro 884 GENOMIC ISLANDS IN PATHOGENIC AND ENVIRONMENTAL MICROORGANISMS Ulrich Dobrindt, Bianca Hochhut, Ute Hentschel & Jorg Hacker. synonym: "pathogenic island" EXACT [] is_a: SO:0000772 ! genomic_island [Term] id: SO:0000774 name: metabolic_island def: "A transmissible element containing genes involved in metabolism, analogous to the pathogenicity islands of gram negative bacteria." [SO:ke] comment: Genes for phenolic compound degradation in Pseudomonas putida are found on metabolic islands. synonym: "metabolic island" EXACT [] is_a: SO:0000772 ! genomic_island [Term] id: SO:0000775 name: adaptive_island def: "An adaptive island is a genomic island that provides an adaptive advantage to the host." [SO:ke] comment: The iron-uptake ability of many pathogens are conveyed by adaptive islands. Nature Reviews Microbiology 2, 414-424 (2004); doi:10.1038 micro 884 GENOMIC ISLANDS IN PATHOGENIC AND ENVIRONMENTAL MICROORGANISMS Ulrich Dobrindt, Bianca Hochhut, Ute Hentschel & Jorg Hacker. synonym: "adaptive island" EXACT [] is_a: SO:0000772 ! genomic_island [Term] id: SO:0000776 name: symbiosis_island def: "A transmissible element containing genes involved in symbiosis, analogous to the pathogenicity islands of gram negative bacteria." [SO:ke] comment: Nitrogen fixation in Rhizobiaceae species is encoded by symbiosis islands. Evolution of rhizobia by acquisition of a 500-kb symbiosis island that integrates into a phe-tRNA gene. John T. Sullivan and Clive W. Ronso PNAS 1998 Apr 28 95 (9) 5145-5149. synonym: "symbiosis island" EXACT [] is_a: SO:0000772 ! genomic_island [Term] id: SO:0000777 name: pseudogenic_rRNA def: "A non functional descendent of an rRNA." [SO:ke] comment: Added Jan 2006 to allow the annotation of the pseudogenic rRNA by flybase. Non-functional is defined as its transcription is prevented due to one or more mutatations. subset: SOFA synonym: "pseudogenic rRNA" EXACT [] is_a: SO:0000462 ! pseudogenic_region [Term] id: SO:0000778 name: pseudogenic_tRNA def: "A non functional descendent of a tRNA." [SO:ke] comment: Added Jan 2006 to allow the annotation of the pseudogenic tRNA by flybase. Non-functional is defined as its transcription is prevented due to one or more mutatations. subset: SOFA synonym: "pseudogenic tRNA" EXACT [] is_a: SO:0000462 ! pseudogenic_region [Term] id: SO:0000779 name: engineered_episome def: "An episome that is engineered." [SO:xp] comment: Requested by Lynn Crosby Jan 2006. synonym: "engineered episome" EXACT [] is_a: SO:0000637 ! engineered_plasmid is_a: SO:0000768 ! episome intersection_of: SO:0000768 ! episome intersection_of: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000780 name: transposable_element_attribute comment: Added by KE Jan 2006 to capture the kinds of attributes of TEs is_obsolete: true [Term] id: SO:0000781 name: transgenic def: "Attribute describing sequence that has been integrated with foreign sequence." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000782 name: natural def: "An attribute describing a feature that occurs in nature." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000783 name: engineered def: "An attribute to describe a region that was modified in vitro." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000784 name: foreign def: "An attribute to describe a region from another species." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000785 name: cloned_region comment: Added in response to Lynn Crosby. A clone insert may be composed of many cloned regions. synonym: "cloned region" EXACT [] synonym: "cloned segment" EXACT [] is_a: SO:0000695 ! reagent relationship: part_of SO:0000753 ! clone_insert [Term] id: SO:0000786 name: reagent_attribute comment: Added jan 2006 by KE. synonym: "reagent attribute" EXACT [] is_obsolete: true [Term] id: SO:0000787 name: clone_attribute is_obsolete: true [Term] id: SO:0000788 name: cloned is_obsolete: true [Term] id: SO:0000789 name: validated def: "An attribute to describe a feature that has been proven." [SO:ke] is_a: SO:0000905 ! status [Term] id: SO:0000790 name: invalidated def: "An attribute describing a feature that is invalidated." [SO:ke] is_a: SO:0000905 ! status [Term] id: SO:0000791 name: cloned_genomic is_obsolete: true [Term] id: SO:0000792 name: cloned_cDNA is_obsolete: true [Term] id: SO:0000793 name: engineered_DNA is_obsolete: true [Term] id: SO:0000794 name: engineered_rescue_region def: "A rescue region that is engineered." [SO:xp] synonym: "engineered rescue fragment" EXACT [] synonym: "engineered rescue region" EXACT [] synonym: "engineered rescue segment" EXACT [] is_a: SO:0000411 ! rescue_region is_a: SO:0000804 ! engineered_region intersection_of: SO:0000411 ! rescue_region intersection_of: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000795 name: rescue_mini_gene def: "A mini_gene that rescues." [SO:xp] synonym: "rescue mini gene" EXACT [] synonym: "rescue mini-gene" EXACT [] is_a: SO:0000815 ! mini_gene intersection_of: SO:0000815 ! mini_gene intersection_of: has_quality SO:0000814 ! rescue relationship: has_quality SO:0000814 ! rescue [Term] id: SO:0000796 name: transgenic_transposable_element def: "TE that has been modified in vitro, including insertion of DNA derived from a source other than the originating TE." [FB:mc] comment: Modified as requested by Lynn - FB. May 2007. synonym: "transgenic transposable element" EXACT [] is_a: SO:0000101 ! transposable_element intersection_of: SO:0000101 ! transposable_element intersection_of: derives_from SO:0000151 ! clone intersection_of: has_quality SO:0000781 ! transgenic relationship: derives_from SO:0000151 ! clone relationship: has_quality SO:0000781 ! transgenic [Term] id: SO:0000797 name: natural_transposable_element def: "TE that exists (or existed) in nature." [FB:mc] synonym: "natural transposable element" EXACT [] is_a: SO:0000101 ! transposable_element is_a: SO:0001038 ! extrachromosomal_mobile_genetic_element intersection_of: SO:0000101 ! transposable_element intersection_of: has_quality SO:0000782 ! natural relationship: has_quality SO:0000782 ! natural [Term] id: SO:0000798 name: engineered_transposable_element def: "TE that has been modified by manipulations in vitro." [FB:mc] synonym: "engineered transposable element" EXACT [] is_a: SO:0000101 ! transposable_element is_a: SO:0000804 ! engineered_region intersection_of: SO:0000101 ! transposable_element intersection_of: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000799 name: engineered_foreign_transposable_element def: "A transposable_element that is engineered and foreign." [FB:mc] synonym: "engineered foreign transposable element" EXACT [] is_a: SO:0000720 ! foreign_transposable_element is_a: SO:0000798 ! engineered_transposable_element is_a: SO:0000805 ! engineered_foreign_region intersection_of: SO:0000101 ! transposable_element intersection_of: has_quality SO:0000783 ! engineered intersection_of: has_quality SO:0000784 ! foreign relationship: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000800 name: assortment_derived_duplication def: "A multi-chromosome duplication aberration generated by reassortment of other aberration components." [FB:gm] synonym: "assortment derived duplication" EXACT [] is_a: SO:0001504 ! assortment_derived_variation [Term] id: SO:0000801 name: assortment_derived_deficiency_plus_duplication def: "A multi-chromosome aberration generated by reassortment of other aberration components; presumed to have a deficiency and a duplication." [FB:gm] synonym: "assortment derived deficiency plus duplication" EXACT [] is_a: SO:0001504 ! assortment_derived_variation [Term] id: SO:0000802 name: assortment_derived_deficiency def: "A multi-chromosome deficiency aberration generated by reassortment of other aberration components." [FB:gm] synonym: "assortment-derived deficiency" EXACT [] is_a: SO:0001504 ! assortment_derived_variation [Term] id: SO:0000803 name: assortment_derived_aneuploid def: "A multi-chromosome aberration generated by reassortment of other aberration components; presumed to have a deficiency or a duplication." [FB:gm] synonym: "assortment derived aneuploid" EXACT [] is_a: SO:0001504 ! assortment_derived_variation [Term] id: SO:0000804 name: engineered_region def: "A region that is engineered." [SO:xp] synonym: "construct" EXACT [] synonym: "engineered region" EXACT [] synonym: "engineered sequence" EXACT [] is_a: SO:0001409 ! biomaterial_region intersection_of: SO:0000001 ! region intersection_of: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000805 name: engineered_foreign_region def: "A region that is engineered and foreign." [SO:xp] synonym: "engineered foreign region" EXACT [] is_a: SO:0000804 ! engineered_region intersection_of: SO:0000001 ! region intersection_of: has_quality SO:0000783 ! engineered intersection_of: has_quality SO:0000784 ! foreign relationship: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000806 name: fusion is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000807 name: engineered_tag def: "A tag that is engineered." [SO:xp] synonym: "engineered tag" EXACT [] is_a: SO:0000324 ! tag is_a: SO:0000804 ! engineered_region intersection_of: SO:0000324 ! tag intersection_of: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000808 name: validated_cDNA_clone def: "A cDNA clone that has been validated." [SO:xp] synonym: "validated cDNA clone" EXACT [] is_a: SO:0000317 ! cDNA_clone intersection_of: SO:0000317 ! cDNA_clone intersection_of: has_quality SO:0000789 ! validated relationship: has_quality SO:0000789 ! validated [Term] id: SO:0000809 name: invalidated_cDNA_clone def: "A cDNA clone that is invalid." [SO:xp] synonym: "invalidated cDNA clone" EXACT [] is_a: SO:0000317 ! cDNA_clone intersection_of: SO:0000317 ! cDNA_clone intersection_of: has_quality SO:0000790 ! invalidated relationship: has_quality SO:0000790 ! invalidated [Term] id: SO:0000810 name: chimeric_cDNA_clone def: "A cDNA clone invalidated because it is chimeric." [SO:xp] synonym: "chimeric cDNA clone" EXACT [] is_a: SO:0000809 ! invalidated_cDNA_clone intersection_of: SO:0000809 ! invalidated_cDNA_clone intersection_of: has_quality SO:0000362 ! invalidated_by_chimeric_cDNA relationship: has_quality SO:0000362 ! invalidated_by_chimeric_cDNA [Term] id: SO:0000811 name: genomically_contaminated_cDNA_clone def: "A cDNA clone invalidated by genomic contamination." [SO:xp] synonym: "genomically contaminated cDNA clone" EXACT [] is_a: SO:0000809 ! invalidated_cDNA_clone intersection_of: SO:0000809 ! invalidated_cDNA_clone intersection_of: has_quality SO:0000414 ! invalidated_by_genomic_contamination relationship: has_quality SO:0000414 ! invalidated_by_genomic_contamination [Term] id: SO:0000812 name: polyA_primed_cDNA_clone def: "A cDNA clone invalidated by polyA priming." [SO:xp] synonym: "polyA primed cDNA clone" EXACT [] is_a: SO:0000809 ! invalidated_cDNA_clone intersection_of: SO:0000809 ! invalidated_cDNA_clone intersection_of: has_quality SO:0000415 ! invalidated_by_genomic_polyA_primed_cDNA relationship: has_quality SO:0000415 ! invalidated_by_genomic_polyA_primed_cDNA [Term] id: SO:0000813 name: partially_processed_cDNA_clone def: "A cDNA invalidated clone by partial processing." [SO:xp] synonym: "partially processed cDNA clone" EXACT [] is_a: SO:0000809 ! invalidated_cDNA_clone intersection_of: SO:0000809 ! invalidated_cDNA_clone intersection_of: has_quality SO:0000416 ! invalidated_by_partial_processing relationship: has_quality SO:0000416 ! invalidated_by_partial_processing [Term] id: SO:0000814 name: rescue def: "An attribute describing a region's ability, when introduced to a mutant organism, to re-establish (rescue) a phenotype." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000815 name: mini_gene def: "By definition, minigenes are short open-reading frames (ORF), usually encoding approximately 9 to 20 amino acids, which are expressed in vivo (as distinct from being synthesized as peptide or protein ex vivo and subsequently injected). The in vivo synthesis confers a distinct advantage: the expressed sequences can enter both antigen presentation pathways, MHC I (inducing CD8+ T- cells, which are usually cytotoxic T-lymphocytes (CTL)) and MHC II (inducing CD4+ T-cells, usually 'T-helpers' (Th)); and can encounter B-cells, inducing antibody responses. Three main vector approaches have been used to deliver minigenes: viral vectors, bacterial vectors and plasmid DNA." [PMID:15992143] synonym: "mini gene" EXACT [] is_a: SO:0000236 ! ORF [Term] id: SO:0000816 name: rescue_gene def: "A gene that rescues." [SO:xp] synonym: "rescue gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000814 ! rescue relationship: has_quality SO:0000814 ! rescue [Term] id: SO:0000817 name: wild_type def: "An attribute describing sequence with the genotype found in nature and/or standard laboratory stock." [SO:ke] synonym: "wild type" EXACT [] xref: http://en.wikipedia.org/wiki/Wild_type "wiki" xref: loinc:LA9658-1 "wild type" is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000818 name: wild_type_rescue_gene def: "A gene that rescues." [SO:xp] synonym: "wild type rescue gene" EXACT [] is_a: SO:0000816 ! rescue_gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000817 ! wild_type relationship: has_quality SO:0000817 ! wild_type [Term] id: SO:0000819 name: mitochondrial_chromosome def: "A chromosome originating in a mitochondria." [SO:xp] synonym: "mitochondrial chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_origin SO:0000737 ! mitochondrial_sequence relationship: has_origin SO:0000737 ! mitochondrial_sequence [Term] id: SO:0000820 name: chloroplast_chromosome def: "A chromosome originating in a chloroplast." [SO:xp] synonym: "chloroplast chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_origin SO:0000745 ! chloroplast_sequence relationship: has_origin SO:0000745 ! chloroplast_sequence [Term] id: SO:0000821 name: chromoplast_chromosome def: "A chromosome originating in a chromoplast." [SO:xp] synonym: "chromoplast chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_origin SO:0000744 ! chromoplast_sequence relationship: has_origin SO:0000744 ! chromoplast_sequence [Term] id: SO:0000822 name: cyanelle_chromosome def: "A chromosome originating in a cyanelle." [SO:xp] synonym: "cyanelle chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_origin SO:0000746 ! cyanelle_sequence relationship: has_origin SO:0000746 ! cyanelle_sequence [Term] id: SO:0000823 name: leucoplast_chromosome def: "A chromosome with origin in a leucoplast." [SO:xp] synonym: "leucoplast chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_origin SO:0000747 ! leucoplast_sequence relationship: has_origin SO:0000747 ! leucoplast_sequence [Term] id: SO:0000824 name: macronuclear_chromosome def: "A chromosome originating in a macronucleus." [SO:xp] synonym: "macronuclear chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_origin SO:0000083 ! macronuclear_sequence relationship: has_origin SO:0000083 ! macronuclear_sequence [Term] id: SO:0000825 name: micronuclear_chromosome def: "A chromosome originating in a micronucleus." [SO:xp] synonym: "micronuclear chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_origin SO:0000084 ! micronuclear_sequence relationship: has_origin SO:0000084 ! micronuclear_sequence [Term] id: SO:0000828 name: nuclear_chromosome def: "A chromosome originating in a nucleus." [SO:xp] synonym: "nuclear chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_origin SO:0000738 ! nuclear_sequence relationship: has_origin SO:0000738 ! nuclear_sequence [Term] id: SO:0000829 name: nucleomorphic_chromosome def: "A chromosome originating in a nucleomorph." [SO:xp] synonym: "nucleomorphic chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_origin SO:0000739 ! nucleomorphic_sequence relationship: has_origin SO:0000739 ! nucleomorphic_sequence [Term] id: SO:0000830 name: chromosome_part def: "A region of a chromosome." [SO:ke] comment: This is a manufactured term, that serves the purpose of allow the parts of a chromosome to have an is_a path to the root. subset: SOFA synonym: "chromosome part" EXACT [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000340 ! chromosome [Term] id: SO:0000831 name: gene_member_region def: "A region of a gene." [SO:ke] comment: A manufactured term used to allow the parts of a gene to have an is_a path to the root. subset: SOFA synonym: "gene member region" EXACT [] is_a: SO:0001411 ! biological_region relationship: member_of SO:0000704 ! gene [Term] id: SO:0000832 name: promoter_region def: "A region of sequence which is part of a promoter." [SO:ke] comment: This is a manufactured term to allow the parts of promoter to have an is_a path back to the root. is_obsolete: true [Term] id: SO:0000833 name: transcript_region def: "A region of a transcript." [SO:ke] comment: This term was added to provide a grouping term for the region parts of transcript, thus giving them an is_a path back to the root. subset: SOFA synonym: "transcript region" EXACT [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000673 ! transcript [Term] id: SO:0000834 name: mature_transcript_region def: "A region of a mature transcript." [SO:ke] comment: A manufactured term to collect together the parts of a mature transcript and give them an is_a path to the root. subset: SOFA synonym: "mature transcript region" EXACT [] is_a: SO:0000833 ! transcript_region [Term] id: SO:0000835 name: primary_transcript_region def: "A part of a primary transcript." [SO:ke] comment: This term was added to provide a grouping term for the region parts of primary_transcript, thus giving them an is_a path back to the root. subset: SOFA synonym: "primary transcript region" EXACT [] is_a: SO:0000833 ! transcript_region relationship: part_of SO:0000185 ! primary_transcript [Term] id: SO:0000836 name: mRNA_region def: "A region of an mRNA." [SO:cb] comment: This term was added to provide a grouping term for the region parts of mRNA, thus giving them an is_a path back to the root. subset: SOFA synonym: "mRNA region" EXACT [] is_a: SO:0000834 ! mature_transcript_region relationship: part_of SO:0000234 ! mRNA [Term] id: SO:0000837 name: UTR_region def: "A region of UTR." [SO:ke] comment: A region of UTR. This term is a grouping term to allow the parts of UTR to have an is_a path to the root. subset: SOFA synonym: "UTR region" EXACT [] is_a: SO:0000836 ! mRNA_region [Term] id: SO:0000838 name: rRNA_primary_transcript_region def: "A region of an rRNA primary transcript." [SO:ke] comment: To allow transcribed_spacer_region to have a path to the root. synonym: "rRNA primary transcript region" EXACT [] is_a: SO:0000835 ! primary_transcript_region relationship: part_of SO:0000209 ! rRNA_primary_transcript [Term] id: SO:0000839 name: polypeptide_region alt_id: BS:00124 alt_id: BS:00331 def: "Biological sequence region that can be assigned to a specific subsequence of a polypeptide." [SO:GAR, SO:ke] comment: Added to allow the polypeptide regions to have is_a paths back to the root. subset: biosapiens subset: SOFA synonym: "positional" RELATED [] synonym: "positional polypeptide feature" RELATED [] synonym: "region" NARROW [uniprot:feature_type] synonym: "region or site annotation" RELATED [] synonym: "site" NARROW [uniprot:feature_type] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000104 ! polypeptide [Term] id: SO:0000840 name: repeat_component def: "A region of a repeated sequence." [SO:ke] comment: A manufactured to group the parts of repeats, to give them an is_a path back to the root. synonym: "repeat component" EXACT [] is_a: SO:0001412 ! topologically_defined_region [Term] id: SO:0000841 name: spliceosomal_intron_region def: "A region within an intron." [SO:ke] comment: A terms added to allow the parts of introns to have is_a paths to the root. subset: SOFA synonym: "spliceosomal intron region" EXACT [] is_a: SO:0000835 ! primary_transcript_region relationship: part_of SO:0000662 ! spliceosomal_intron [Term] id: SO:0000842 name: gene_component_region subset: SOFA synonym: "gene component region" EXACT [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000704 ! gene [Term] id: SO:0000843 name: bacterial_RNApol_promoter_region def: "A region which is part of a bacterial RNA polymerase promoter." [SO:ke] comment: This is a manufactured term to allow the parts of bacterial_RNApol_promoter to have an is_a path back to the root. is_obsolete: true [Term] id: SO:0000844 name: RNApol_II_promoter_region def: "A region of sequence which is a promoter for RNA polymerase II." [SO:ke] comment: This is a manufactured term to allow the parts of RNApol_II_promoter to have an is_a path back to the root. is_obsolete: true [Term] id: SO:0000845 name: RNApol_III_promoter_type_1_region def: "A region of sequence which is a promoter for RNA polymerase III type 1." [SO:ke] comment: This is a manufactured term to allow the parts of RNApol_III_promoter_type_1 to have an is_a path back to the root. is_obsolete: true [Term] id: SO:0000846 name: RNApol_III_promoter_type_2_region def: "A region of sequence which is a promoter for RNA polymerase III type 2." [SO:ke] comment: This is a manufactured term to allow the parts of RNApol_III_promoter_type_2 to have an is_a path back to the root. is_obsolete: true [Term] id: SO:0000847 name: tmRNA_region def: "A region of a tmRNA." [SO:cb] comment: This term was added to provide a grouping term for the region parts of tmRNA, thus giving them an is_a path back to the root. synonym: "tmRNA region" EXACT [] is_a: SO:0000834 ! mature_transcript_region relationship: part_of SO:0000584 ! tmRNA [Term] id: SO:0000848 name: LTR_component synonym: "long term repeat component" EXACT [] synonym: "LTR component" EXACT [] is_a: SO:0000840 ! repeat_component relationship: part_of SO:0000286 ! long_terminal_repeat [Term] id: SO:0000849 name: three_prime_LTR_component synonym: "3' long terminal repeat component" EXACT [] synonym: "three prime LTR component" EXACT [] is_a: SO:0000848 ! LTR_component relationship: part_of SO:0000426 ! three_prime_LTR [Term] id: SO:0000850 name: five_prime_LTR_component synonym: "5' long term repeat component" EXACT [] synonym: "five prime LTR component" EXACT [] is_a: SO:0000848 ! LTR_component relationship: part_of SO:0000425 ! five_prime_LTR [Term] id: SO:0000851 name: CDS_region def: "A region of a CDS." [SO:cb] subset: SOFA synonym: "CDS region" EXACT [] is_a: SO:0000836 ! mRNA_region relationship: part_of SO:0000316 ! CDS [Term] id: SO:0000852 name: exon_region def: "A region of an exon." [RSC:cb] subset: SOFA synonym: "exon region" EXACT [] is_a: SO:0000833 ! transcript_region relationship: part_of SO:0000147 ! exon [Term] id: SO:0000853 name: homologous_region def: "A region that is homologous to another region." [SO:ke] synonym: "homolog" EXACT [] synonym: "homologous region" EXACT [] synonym: "homologue" EXACT [] xref: http://en.wikipedia.org/wiki/Homology_(biology) "wiki" is_a: SO:0000330 ! conserved_region intersection_of: SO:0000330 ! conserved_region intersection_of: has_quality SO:0000857 ! homologous relationship: has_quality SO:0000857 ! homologous [Term] id: SO:0000854 name: paralogous_region def: "A homologous_region that is paralogous to another region." [SO:ke] comment: A term to be used in conjunction with the paralogous_to relationship. synonym: "paralog" EXACT [] synonym: "paralogous region" EXACT [] synonym: "paralogue" EXACT [] xref: http://en.wikipedia.org/wiki/Paralog#Paralogy "wiki" is_a: SO:0000853 ! homologous_region intersection_of: SO:0000853 ! homologous_region intersection_of: has_quality SO:0000859 ! paralogous relationship: has_quality SO:0000859 ! paralogous [Term] id: SO:0000855 name: orthologous_region def: "A homologous_region that is orthologous to another region." [SO:ke] comment: This term should be used in conjunction with the similarity relationships defined in SO. synonym: "ortholog" EXACT [] synonym: "orthologous region" EXACT [] synonym: "orthologue" EXACT [] xref: http://en.wikipedia.org/wiki/Ortholog#Orthology "wiki" is_a: SO:0000853 ! homologous_region intersection_of: SO:0000853 ! homologous_region intersection_of: has_quality SO:0000858 ! orthologous relationship: has_quality SO:0000858 ! orthologous [Term] id: SO:0000856 name: conserved is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000857 name: homologous def: "Similarity due to common ancestry." [SO:ke] is_a: SO:0000856 ! conserved [Term] id: SO:0000858 name: orthologous def: "An attribute describing a kind of homology where divergence occured after a speciation event." [SO:ke] is_a: SO:0000857 ! homologous [Term] id: SO:0000859 name: paralogous def: "An attribute describing a kind of homology where divergence occurred after a duplication event." [SO:ke] is_a: SO:0000857 ! homologous [Term] id: SO:0000860 name: syntenic def: "Attribute describing sequence regions occurring in same order on chromosome of different species." [SO:ke] xref: http://en.wikipedia.org/wiki/Syntenic "wiki" is_a: SO:0000856 ! conserved [Term] id: SO:0000861 name: capped_primary_transcript def: "A primary transcript that is capped." [SO:xp] synonym: "capped primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript intersection_of: SO:0000185 ! primary_transcript intersection_of: adjacent_to SO:0000581 ! cap intersection_of: has_quality SO:0000146 ! capped relationship: adjacent_to SO:0000581 ! cap relationship: has_quality SO:0000146 ! capped [Term] id: SO:0000862 name: capped_mRNA def: "An mRNA that is capped." [SO:xp] synonym: "capped mRNA" EXACT [] is_a: SO:0000234 ! mRNA intersection_of: SO:0000234 ! mRNA intersection_of: adjacent_to SO:0000581 ! cap intersection_of: has_quality SO:0000146 ! capped relationship: adjacent_to SO:0000581 ! cap relationship: has_quality SO:0000146 ! capped [Term] id: SO:0000863 name: mRNA_attribute def: "An attribute describing an mRNA feature." [SO:ke] synonym: "mRNA attribute" EXACT [] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000864 name: exemplar def: "An attribute describing a sequence is representative of a class of similar sequences." [SO:ke] is_a: SO:0000863 ! mRNA_attribute [Term] id: SO:0000865 name: frameshift def: "An attribute describing a sequence that contains a mutation involving the deletion or insertion of one or more bases, where this number is not divisible by 3." [SO:ke] xref: http://en.wikipedia.org/wiki/Frameshift "wiki" is_a: SO:0000863 ! mRNA_attribute [Term] id: SO:0000866 name: minus_1_frameshift def: "A frameshift caused by deleting one base." [SO:ke] synonym: "minus 1 frameshift" EXACT [] is_a: SO:0000865 ! frameshift [Term] id: SO:0000867 name: minus_2_frameshift def: "A frameshift caused by deleting two bases." [SO:ke] synonym: "minus 2 frameshift" EXACT [] is_a: SO:0000865 ! frameshift [Term] id: SO:0000868 name: plus_1_frameshift def: "A frameshift caused by inserting one base." [SO:ke] synonym: "plus 1 frameshift" EXACT [] is_a: SO:0000865 ! frameshift [Term] id: SO:0000869 name: plus_2_framshift def: "A frameshift caused by inserting two bases." [SO:ke] synonym: "plus 2 framshift" EXACT [] is_a: SO:0000865 ! frameshift [Term] id: SO:0000870 name: trans_spliced def: "An attribute describing transcript sequence that is created by splicing exons from diferent genes." [SO:ke] synonym: "trans-spliced" EXACT [] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000871 name: polyadenylated_mRNA def: "An mRNA that is polyadenylated." [SO:xp] synonym: "polyadenylated mRNA" EXACT [] is_a: SO:0000234 ! mRNA intersection_of: SO:0000234 ! mRNA intersection_of: adjacent_to SO:0000610 ! polyA_sequence intersection_of: has_quality SO:0000246 ! polyadenylated relationship: adjacent_to SO:0000610 ! polyA_sequence relationship: has_quality SO:0000246 ! polyadenylated [Term] id: SO:0000872 name: trans_spliced_mRNA def: "An mRNA that is trans-spliced." [SO:xp] synonym: "trans-spliced mRNA" EXACT [] is_a: SO:0000234 ! mRNA is_a: SO:0000479 ! trans_spliced_transcript intersection_of: SO:0000234 ! mRNA intersection_of: adjacent_to SO:0000636 ! spliced_leader_RNA intersection_of: has_quality SO:0000870 ! trans_spliced relationship: adjacent_to SO:0000636 ! spliced_leader_RNA relationship: has_quality SO:0000870 ! trans_spliced [Term] id: SO:0000873 name: edited_transcript def: "A transcript that is edited." [SO:ke] synonym: "edited transcript" EXACT [] is_a: SO:0000673 ! transcript intersection_of: SO:0000673 ! transcript intersection_of: has_quality SO:0000116 ! edited relationship: guided_by SO:0000602 ! guide_RNA relationship: has_part SO:0000977 ! anchor_binding_site relationship: has_quality SO:0000116 ! edited [Term] id: SO:0000874 name: edited_transcript_by_A_to_I_substitution def: "A transcript that has been edited by A to I substitution." [SO:ke] synonym: "edited transcript by A to I substitution" EXACT [] is_a: SO:0000873 ! edited_transcript [Term] id: SO:0000875 name: bound_by_protein def: "An attribute describing a sequence that is bound by a protein." [SO:ke] synonym: "bound by protein" EXACT [] is_a: SO:0000277 ! bound_by_factor [Term] id: SO:0000876 name: bound_by_nucleic_acid def: "An attribute describing a sequence that is bound by a nucleic acid." [SO:ke] synonym: "bound by nucleic acid" EXACT [] is_a: SO:0000277 ! bound_by_factor [Term] id: SO:0000877 name: alternatively_spliced def: "An attribute describing a situation where a gene may encode for more than 1 transcript." [SO:ke] synonym: "alternatively spliced" EXACT [] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000878 name: monocistronic def: "An attribute describing a sequence that contains the code for one gene product." [SO:ke] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000879 name: dicistronic def: "An attribute describing a sequence that contains the code for two gene products." [SO:ke] is_a: SO:0000880 ! polycistronic [Term] id: SO:0000880 name: polycistronic def: "An attribute describing a sequence that contains the code for more than one gene product." [SO:ke] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000881 name: recoded def: "An attribute describing an mRNA sequence that has been reprogrammed at translation, causing localized alterations." [SO:ke] is_a: SO:0000863 ! mRNA_attribute [Term] id: SO:0000882 name: codon_redefined def: "An attribute describing the alteration of codon meaning." [SO:ke] synonym: "codon redefined" EXACT [] is_a: SO:0000881 ! recoded [Term] id: SO:0000883 name: stop_codon_read_through def: "A stop codon redefined to be a new amino acid." [SO:ke] synonym: "stop codon read through" EXACT [] synonym: "stop codon readthrough" RELATED [] is_a: SO:0000145 ! recoded_codon [Term] id: SO:0000884 name: stop_codon_redefined_as_pyrrolysine def: "A stop codon redefined to be the new amino acid, pyrrolysine." [SO:ke] synonym: "stop codon redefined as pyrrolysine" EXACT [] is_a: SO:0000883 ! stop_codon_read_through [Term] id: SO:0000885 name: stop_codon_redefined_as_selenocysteine def: "A stop codon redefined to be the new amino acid, selenocysteine." [SO:ke] synonym: "stop codon redefined as selenocysteine" EXACT [] is_a: SO:0000883 ! stop_codon_read_through [Term] id: SO:0000886 name: recoded_by_translational_bypass def: "Recoded mRNA where a block of nucleotides is not translated." [SO:ke] synonym: "recoded by translational bypass" EXACT [] is_a: SO:0000881 ! recoded [Term] id: SO:0000887 name: translationally_frameshifted def: "Recoding by frameshifting a particular site." [SO:ke] synonym: "translationally frameshifted" EXACT [] is_a: SO:0000881 ! recoded [Term] id: SO:0000888 name: maternally_imprinted_gene def: "A gene that is maternally_imprinted." [SO:xp] synonym: "maternally imprinted gene" EXACT [] is_a: SO:0000898 ! epigenetically_modified_gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000135 ! maternally_imprinted relationship: has_quality SO:0000135 ! maternally_imprinted [Term] id: SO:0000889 name: paternally_imprinted_gene def: "A gene that is paternally imprinted." [SO:xp] synonym: "paternally imprinted gene" EXACT [] is_a: SO:0000898 ! epigenetically_modified_gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000136 ! paternally_imprinted relationship: has_quality SO:0000136 ! paternally_imprinted [Term] id: SO:0000890 name: post_translationally_regulated_gene def: "A gene that is post translationally regulated." [SO:xp] synonym: "post translationally regulated gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000130 ! post_translationally_regulated relationship: has_quality SO:0000130 ! post_translationally_regulated [Term] id: SO:0000891 name: negatively_autoregulated_gene def: "A gene that is negatively autoreguated." [SO:xp] synonym: "negatively autoregulated gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000473 ! negatively_autoregulated relationship: has_quality SO:0000473 ! negatively_autoregulated [Term] id: SO:0000892 name: positively_autoregulated_gene def: "A gene that is positively autoregulated." [SO:xp] synonym: "positively autoregulated gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000475 ! positively_autoregulated relationship: has_quality SO:0000475 ! positively_autoregulated [Term] id: SO:0000893 name: silenced def: "An attribute describing an epigenetic process where a gene is inactivated at transcriptional or translational level." [SO:ke] xref: http://en.wikipedia.org/wiki/Silenced "wiki" is_a: SO:0000126 ! transcriptionally_repressed [Term] id: SO:0000894 name: silenced_by_DNA_modification def: "An attribute describing an epigenetic process where a gene is inactivated by DNA modifications, resulting in repression of transcription." [SO:ke] synonym: "silenced by DNA modification" EXACT [] is_a: SO:0000893 ! silenced [Term] id: SO:0000895 name: silenced_by_DNA_methylation def: "An attribute describing an epigenetic process where a gene is inactivated by DNA methylation, resulting in repression of transcription." [SO:ke] synonym: "silenced by DNA methylation" EXACT [] is_a: SO:0000894 ! silenced_by_DNA_modification [Term] id: SO:0000896 name: translationally_regulated_gene def: "A gene that is translationally regulated." [SO:xp] synonym: "translationally regulated gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000131 ! translationally_regulated relationship: has_quality SO:0000131 ! translationally_regulated [Term] id: SO:0000897 name: allelically_excluded_gene def: "A gene that is allelically_excluded." [SO:xp] synonym: "allelically excluded gene" EXACT [] is_a: SO:0000898 ! epigenetically_modified_gene intersection_of: SO:0000898 ! epigenetically_modified_gene intersection_of: has_quality SO:0000137 ! allelically_excluded relationship: has_quality SO:0000137 ! allelically_excluded [Term] id: SO:0000898 name: epigenetically_modified_gene def: "A gene that is epigenetically modified." [SO:ke] synonym: "epigenetically modified gene" EXACT [] is_a: SO:0000704 ! gene is_a: SO:0001720 ! epigenetically_modified_region intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000133 ! epigenetically_modified relationship: has_quality SO:0000133 ! epigenetically_modified [Term] id: SO:0000899 name: nuclear_mitochondrial def: "An attribute describing a nuclear pseudogene of a mitochndrial gene." [SO:ke] synonym: "nuclear mitochondrial" EXACT [] is_obsolete: true [Term] id: SO:0000900 name: processed def: "An attribute describing a pseudogene where by an mRNA was retrotransposed. The mRNA sequence is transcribed back into the genome, lacking introns and promotors, but often including a polyA tail." [SO:ke] is_obsolete: true [Term] id: SO:0000901 name: unequally_crossed_over def: "An attribute describing a pseudogene that was created by tandem duplication and unequal crossing over during recombination." [SO:ke] synonym: "unequally crossed over" EXACT [] is_obsolete: true [Term] id: SO:0000902 name: transgene def: "A transgene is a gene that has been transferred naturally or by any of a number of genetic engineering techniques from one organism to another." [SO:xp] xref: http://en.wikipedia.org/wiki/Transgene "wiki" is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000781 ! transgenic relationship: has_quality SO:0000781 ! transgenic [Term] id: SO:0000903 name: endogenous_retroviral_sequence synonym: "endogenous retroviral sequence" EXACT [] is_a: SO:0000751 ! proviral_location [Term] id: SO:0000904 name: rearranged_at_DNA_level def: "An attribute to describe the sequence of a feature, where the DNA is rearranged." [SO:ke] synonym: "rearranged at DNA level" EXACT [] is_a: SO:0000133 ! epigenetically_modified [Term] id: SO:0000905 name: status def: "An attribute describing the status of a feature, based on the available evidence." [SO:ke] comment: This term is the hypernym of attributes and should not be annotated to. is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000906 name: independently_known def: "Attribute to describe a feature that is independently known - not predicted." [SO:ke] synonym: "independently known" EXACT [] is_a: SO:0000905 ! status [Term] id: SO:0000907 name: supported_by_sequence_similarity def: "An attribute to describe a feature that has been predicted using sequence similarity techniques." [SO:ke] synonym: "supported by sequence similarity" EXACT [] is_a: SO:0000732 ! predicted [Term] id: SO:0000908 name: supported_by_domain_match def: "An attribute to describe a feature that has been predicted using sequence similarity of a known domain." [SO:ke] synonym: "supported by domain match" EXACT [] is_a: SO:0000907 ! supported_by_sequence_similarity [Term] id: SO:0000909 name: supported_by_EST_or_cDNA def: "An attribute to describe a feature that has been predicted using sequence similarity to EST or cDNA data." [SO:ke] synonym: "supported by EST or cDNA" EXACT [] is_a: SO:0000907 ! supported_by_sequence_similarity [Term] id: SO:0000910 name: orphan is_a: SO:0000732 ! predicted [Term] id: SO:0000911 name: predicted_by_ab_initio_computation def: "An attribute describing a feature that is predicted by a computer program that did not rely on sequence similarity." [SO:ke] synonym: "predicted by ab initio computation" EXACT [] is_a: SO:0000732 ! predicted [Term] id: SO:0000912 name: asx_turn alt_id: BS:00203 def: "A motif of three consecutive residues and one H-bond in which: residue(i) is Aspartate or Asparagine (Asx), the side-chain O of residue(i) is H-bonded to the main-chain NH of residue(i+2)." [http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx turn" EXACT [] is_a: SO:0001128 ! polypeptide_turn_motif [Term] id: SO:0000913 name: cloned_cDNA_insert def: "A clone insert made from cDNA." [SO:xp] synonym: "cloned cDNA insert" EXACT [] is_a: SO:0000753 ! clone_insert intersection_of: SO:0000753 ! clone_insert intersection_of: has_quality SO:0000756 ! cDNA relationship: has_quality SO:0000756 ! cDNA [Term] id: SO:0000914 name: cloned_genomic_insert def: "A clone insert made from genomic DNA." [SO:xp] synonym: "cloned genomic insert" EXACT [] is_a: SO:0000753 ! clone_insert intersection_of: SO:0000753 ! clone_insert intersection_of: has_quality SO:0000991 ! genomic_DNA relationship: has_quality SO:0000991 ! genomic_DNA [Term] id: SO:0000915 name: engineered_insert def: "A clone insert that is engineered." [SO:xp] synonym: "engineered insert" EXACT [] is_a: SO:0000753 ! clone_insert is_a: SO:0000804 ! engineered_region intersection_of: SO:0000753 ! clone_insert intersection_of: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000916 name: edit_operation synonym: "edit operation" EXACT [] is_obsolete: true [Term] id: SO:0000917 name: insert_U def: "An edit to insert a U." [SO:ke] comment: The insertion and deletion of uridine (U) residues, usually within coding regions of mRNA transcripts of cryptogenes in the mitochondrial genome of kinetoplastid protozoa. synonym: "insert U" EXACT [] is_obsolete: true [Term] id: SO:0000918 name: delete_U def: "An edit to delete a uridine." [SO:ke] comment: The insertion and deletion of uridine (U) residues, usually within coding regions of mRNA transcripts of cryptogenes in the mitochondrial genome of kinetoplastid protozoa. synonym: "delete U" EXACT [] is_obsolete: true [Term] id: SO:0000919 name: substitute_A_to_I def: "An edit to substitute an I for an A." [SO:ke] synonym: "substitute A to I" EXACT [] is_obsolete: true [Term] id: SO:0000920 name: insert_C def: "An edit to insert a cytidine." [SO:ke] synonym: "insert C" EXACT [] is_obsolete: true [Term] id: SO:0000921 name: insert_dinucleotide def: "An edit to insert a dinucleotide." [SO:ke] synonym: "insert dinucleotide" EXACT [] is_obsolete: true [Term] id: SO:0000922 name: substitute_C_to_U def: "An edit to substitute an U for a C." [SO:ke] synonym: "substitute C to U" EXACT [] is_obsolete: true [Term] id: SO:0000923 name: insert_G def: "An edit to insert a G." [SO:ke] synonym: "insert G" EXACT [] is_obsolete: true [Term] id: SO:0000924 name: insert_GC def: "An edit to insert a GC dinucleotide." [SO:ke] comment: The type of RNA editing found in the mitochondria of Myxomycota, characterized by the insertion of mono- and dinucleotides in RNAs relative to their mtDNA template and in addition, C to U base conversion. The most common mononucleotide insertion is cytidine, although a number of uridine mononucleotides are inserted at specific sites. Adenine and guanine have not been observed in mononucleotide insertions. Five different dinucleotide insertions have been observed, GC, GU, CU, AU and AA. Both mono- and dinucleotide insertions create open reading frames in mRNA and contribute to highly conserved structural features of rRNAs and tRNAs. synonym: "insert GC" EXACT [] is_obsolete: true [Term] id: SO:0000925 name: insert_GU def: "An edit to insert a GU dinucleotide." [SO:ke] comment: The type of RNA editing found in the mitochondria of Myxomycota, characterized by the insertion of mono- and dinucleotides in RNAs relative to their mtDNA template and in addition, C to U base conversion. The most common mononucleotide insertion is cytidine, although a number of uridine mononucleotides are inserted at specific sites. Adenine and guanine have not been observed in mononucleotide insertions. Five different dinucleotide insertions have been observed, GC, GU, CU, AU and AA. Both mono- and dinucleotide insertions create open reading frames in mRNA and contribute to highly conserved structural features of rRNAs and tRNAs. synonym: "insert GU" EXACT [] is_obsolete: true [Term] id: SO:0000926 name: insert_CU def: "An edit to insert a CU dinucleotide." [SO:ke] comment: The type of RNA editing found in the mitochondria of Myxomycota, characterized by the insertion of mono- and dinucleotides in RNAs relative to their mtDNA template and in addition, C to U base conversion. The most common mononucleotide insertion is cytidine, although a number of uridine mononucleotides are inserted at specific sites. Adenine and guanine have not been observed in mononucleotide insertions. Five different dinucleotide insertions have been observed, GC, GU, CU, AU and AA. Both mono- and dinucleotide insertions create open reading frames in mRNA and contribute to highly conserved structural features of rRNAs and tRNAs. synonym: "insert CU" EXACT [] is_obsolete: true [Term] id: SO:0000927 name: insert_AU def: "An edit to insert a AU dinucleotide." [SO:ke] comment: The type of RNA editing found in the mitochondria of Myxomycota, characterized by the insertion of mono- and dinucleotides in RNAs relative to their mtDNA template and in addition, C to U base conversion. The most common mononucleotide insertion is cytidine, although a number of uridine mononucleotides are inserted at specific sites. Adenine and guanine have not been observed in mononucleotide insertions. Five different dinucleotide insertions have been observed, GC, GU, CU, AU and AA. Both mono- and dinucleotide insertions create open reading frames in mRNA and contribute to highly conserved structural features of rRNAs and tRNAs. synonym: "insert AU" EXACT [] is_obsolete: true [Term] id: SO:0000928 name: insert_AA def: "An edit to insert a AA dinucleotide." [SO:ke] comment: The type of RNA editing found in the mitochondria of Myxomycota, characterized by the insertion of mono- and dinucleotides in RNAs relative to their mtDNA template and in addition, C to U base conversion. The most common mononucleotide insertion is cytidine, although a number of uridine mononucleotides are inserted at specific sites. Adenine and guanine have not been observed in mononucleotide insertions. Five different dinucleotide insertions have been observed, GC, GU, CU, AU and AA. Both mono- and dinucleotide insertions create open reading frames in mRNA and contribute to highly conserved structural features of rRNAs and tRNAs. synonym: "insert AA" EXACT [] is_obsolete: true [Term] id: SO:0000929 name: edited_mRNA def: "An mRNA that is edited." [SO:xp] synonym: "edited mRNA" EXACT [] is_a: SO:0000234 ! mRNA is_a: SO:0000873 ! edited_transcript intersection_of: SO:0000234 ! mRNA intersection_of: has_quality SO:0000116 ! edited relationship: has_quality SO:0000116 ! edited [Term] id: SO:0000930 name: guide_RNA_region def: "A region of guide RNA." [SO:ma] synonym: "guide RNA region" EXACT [] is_a: SO:0000834 ! mature_transcript_region relationship: part_of SO:0000602 ! guide_RNA [Term] id: SO:0000931 name: anchor_region def: "A region of a guide_RNA that base-pairs to a target mRNA." [SO:jk] synonym: "anchor region" EXACT [] is_a: SO:0000930 ! guide_RNA_region [Term] id: SO:0000932 name: pre_edited_mRNA synonym: "pre-edited mRNA" EXACT [] is_a: SO:0000120 ! protein_coding_primary_transcript [Term] id: SO:0000933 name: intermediate def: "An attribute to describe a feature between stages of processing." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000934 name: miRNA_target_site def: "A miRNA target site is a binding site where the molecule is a micro RNA." [FB:cds] synonym: "miRNA target site" EXACT [] is_a: SO:0001655 ! nucleotide_binding_site [Term] id: SO:0000935 name: edited_CDS def: "A CDS that is edited." [SO:xp] synonym: "edited CDS" EXACT [] is_a: SO:0000316 ! CDS intersection_of: SO:0000316 ! CDS intersection_of: has_quality SO:0000116 ! edited relationship: has_quality SO:0000116 ! edited [Term] id: SO:0000936 name: vertebrate_immunoglobulin_T_cell_receptor_rearranged_segment synonym: "vertebrate immunoglobulin T cell receptor rearranged segment" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000937 name: vertebrate_immune_system_feature is_obsolete: true [Term] id: SO:0000938 name: vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster synonym: "vertebrate immunoglobulin T cell receptor rearranged gene cluster" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000939 name: vertebrate_immune_system_gene_recombination_signal_feature synonym: "vertebrate immune system gene recombination signal feature" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000940 name: recombinationally_rearranged synonym: "recombinationally rearranged" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000941 name: recombinationally_rearranged_vertebrate_immune_system_gene def: "A recombinationally rearranged gene of the vertebrate immune system." [SO:xp] synonym: "recombinationally rearranged vertebrate immune system gene" EXACT [] is_a: SO:0000456 ! recombinationally_rearranged_gene [Term] id: SO:0000942 name: attP_site def: "An integration/excision site of a phage chromosome at which a recombinase acts to insert the phage DNA at a cognate integration/excision site on a bacterial chromosome." [SO:as] synonym: "attP site" EXACT [] is_a: SO:0000946 ! integration_excision_site relationship: part_of SO:0001042 ! phage_sequence [Term] id: SO:0000943 name: attB_site def: "An integration/excision site of a bacterial chromosome at which a recombinase acts to insert foreign DNA containing a cognate integration/excision site." [SO:as] synonym: "attB site" EXACT [] is_a: SO:0000946 ! integration_excision_site [Term] id: SO:0000944 name: attL_site def: "A region that results from recombination between attP_site and attB_site, composed of the 5' portion of attB_site and the 3' portion of attP_site." [SO:as] synonym: "attBP'" RELATED [] synonym: "attL site" RELATED [] is_a: SO:0000946 ! integration_excision_site [Term] id: SO:0000945 name: attR_site def: "A region that results from recombination between attP_site and attB_site, composed of the 5' portion of attP_site and the 3' portion of attB_site." [SO:as] synonym: "attPB'" RELATED [] synonym: "attR site" EXACT [] is_a: SO:0000946 ! integration_excision_site [Term] id: SO:0000946 name: integration_excision_site def: "A region specifically recognised by a recombinase, which inserts or removes another region marked by a distinct cognate integration/excision site." [SO:as] synonym: "attachment site" RELATED [] synonym: "integration excision site" EXACT [] is_a: SO:0000342 ! site_specific_recombination_target_region [Term] id: SO:0000947 name: resolution_site def: "A region specifically recognised by a recombinase, which separates a physically contiguous circle of DNA into two physically separate circles." [SO:as] synonym: "res site" EXACT [] synonym: "resolution site" EXACT [] is_a: SO:0000342 ! site_specific_recombination_target_region [Term] id: SO:0000948 name: inversion_site def: "A region specifically recognised by a recombinase, which inverts the region flanked by a pair of sites." [SO:ma] comment: A target region for site-specific inversion of a DNA region and which carries binding sites for a site-specific recombinase and accessory proteins as well as the site for specific cleavage by the recombinase. synonym: "inversion site" EXACT [] is_a: SO:0000342 ! site_specific_recombination_target_region [Term] id: SO:0000949 name: dif_site def: "A site at which replicated bacterial circular chromosomes are decatenated by site specific resolvase." [SO:as] synonym: "dif site" EXACT [] is_a: SO:0000947 ! resolution_site [Term] id: SO:0000950 name: attC_site def: "An attC site is a sequence required for the integration of a DNA of an integron." [SO:as] synonym: "attC site" EXACT [] is_a: SO:0000946 ! integration_excision_site relationship: part_of SO:0000365 ! integron [Term] id: SO:0000951 name: eukaryotic_terminator synonym: "eukaryotic terminator" EXACT [] is_a: SO:0000141 ! terminator [Term] id: SO:0000952 name: oriV def: "An origin of vegetative replication in plasmids and phages." [SO:as] synonym: "origin of vegetative replication" EXACT [] is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000953 name: oriC def: "An origin of bacterial chromosome replication." [SO:as] synonym: "origin of bacterial chromosome replication" EXACT [] is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000954 name: DNA_chromosome def: "Structural unit composed of a self-replicating, DNA molecule." [SO:ma] synonym: "DNA chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_quality SO:0000352 ! DNA relationship: has_quality SO:0000352 ! DNA [Term] id: SO:0000955 name: double_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded DNA molecule." [SO:ma] synonym: "double stranded DNA chromosome" EXACT [] is_a: SO:0000954 ! DNA_chromosome intersection_of: SO:0000954 ! DNA_chromosome intersection_of: has_quality SO:0000985 ! double relationship: has_quality SO:0000985 ! double [Term] id: SO:0000956 name: single_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded DNA molecule." [SO:ma] synonym: "single stranded DNA chromosome" EXACT [] is_a: SO:0000954 ! DNA_chromosome intersection_of: SO:0000954 ! DNA_chromosome intersection_of: has_quality SO:0000984 ! single relationship: has_quality SO:0000984 ! single [Term] id: SO:0000957 name: linear_double_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded, linear DNA molecule." [SO:ma] synonym: "linear double stranded DNA chromosome" EXACT [] is_a: SO:0000955 ! double_stranded_DNA_chromosome intersection_of: SO:0000955 ! double_stranded_DNA_chromosome intersection_of: has_quality SO:0000987 ! linear relationship: has_quality SO:0000987 ! linear [Term] id: SO:0000958 name: circular_double_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded, circular DNA molecule." [SO:ma] synonym: "circular double stranded DNA chromosome" EXACT [] is_a: SO:0000955 ! double_stranded_DNA_chromosome intersection_of: SO:0000955 ! double_stranded_DNA_chromosome intersection_of: has_quality SO:0000988 ! circular relationship: has_quality SO:0000988 ! circular [Term] id: SO:0000959 name: linear_single_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded, linear DNA molecule." [SO:ma] synonym: "linear single stranded DNA chromosome" EXACT [] is_a: SO:0000956 ! single_stranded_DNA_chromosome intersection_of: SO:0000956 ! single_stranded_DNA_chromosome intersection_of: has_quality SO:0000987 ! linear relationship: has_quality SO:0000987 ! linear [Term] id: SO:0000960 name: circular_single_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded, circular DNA molecule." [SO:ma] synonym: "circular single stranded DNA chromosome" EXACT [] is_a: SO:0000956 ! single_stranded_DNA_chromosome intersection_of: SO:0000956 ! single_stranded_DNA_chromosome intersection_of: has_quality SO:0000988 ! circular relationship: has_quality SO:0000988 ! circular [Term] id: SO:0000961 name: RNA_chromosome def: "Structural unit composed of a self-replicating, RNA molecule." [SO:ma] synonym: "RNA chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_quality SO:0000356 ! RNA relationship: has_quality SO:0000356 ! RNA [Term] id: SO:0000962 name: single_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded RNA molecule." [SO:ma] synonym: "single stranded RNA chromosome" EXACT [] is_a: SO:0000961 ! RNA_chromosome intersection_of: SO:0000961 ! RNA_chromosome intersection_of: has_quality SO:0000984 ! single relationship: has_quality SO:0000984 ! single [Term] id: SO:0000963 name: linear_single_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded, linear RNA molecule." [SO:ma] synonym: "linear single stranded RNA chromosome" EXACT [] is_a: SO:0000962 ! single_stranded_RNA_chromosome intersection_of: SO:0000962 ! single_stranded_RNA_chromosome intersection_of: has_quality SO:0000987 ! linear relationship: has_quality SO:0000987 ! linear [Term] id: SO:0000964 name: linear_double_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded, linear RNA molecule." [SO:ma] synonym: "linear double stranded RNA chromosome" EXACT [] is_a: SO:0000965 ! double_stranded_RNA_chromosome intersection_of: SO:0000965 ! double_stranded_RNA_chromosome intersection_of: has_quality SO:0000987 ! linear relationship: has_quality SO:0000987 ! linear [Term] id: SO:0000965 name: double_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded RNA molecule." [SO:ma] synonym: "double stranded RNA chromosome" EXACT [] is_a: SO:0000961 ! RNA_chromosome intersection_of: SO:0000961 ! RNA_chromosome intersection_of: has_quality SO:0000985 ! double relationship: has_quality SO:0000985 ! double [Term] id: SO:0000966 name: circular_single_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded, circular DNA molecule." [SO:ma] synonym: "circular single stranded RNA chromosome" EXACT [] is_a: SO:0000962 ! single_stranded_RNA_chromosome intersection_of: SO:0000962 ! single_stranded_RNA_chromosome intersection_of: has_quality SO:0000988 ! circular relationship: has_quality SO:0000988 ! circular [Term] id: SO:0000967 name: circular_double_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded, circular RNA molecule." [SO:ma] synonym: "circular double stranded RNA chromosome" EXACT [] is_a: SO:0000965 ! double_stranded_RNA_chromosome intersection_of: SO:0000965 ! double_stranded_RNA_chromosome intersection_of: has_quality SO:0000988 ! circular relationship: has_quality SO:0000988 ! circular [Term] id: SO:0000968 name: sequence_replication_mode comment: This has been obsoleted as it represents a process. replaced_by: GO:0034961. synonym: "sequence replication mode" EXACT [] is_obsolete: true [Term] id: SO:0000969 name: rolling_circle comment: This has been obsoleted as it represents a process. replaced_by: GO:0070581. synonym: "rolling circle" EXACT [] xref: http://en.wikipedia.org/wiki/Rolling_circle "wiki" is_obsolete: true [Term] id: SO:0000970 name: theta_replication comment: This has been obsoleted as it represents a process. replaced_by: GO:0070582 synonym: "theta replication" EXACT [] is_obsolete: true [Term] id: SO:0000971 name: DNA_replication_mode comment: This has been obsoleted as it represents a process. replaced_by: GO:0006260. synonym: "DNA replication mode" EXACT [] is_obsolete: true [Term] id: SO:0000972 name: RNA_replication_mode comment: This has been obsoleted as it represents a process. replaced_by: GO:0034961. synonym: "RNA replication mode" EXACT [] is_obsolete: true [Term] id: SO:0000973 name: insertion_sequence def: "A terminal_inverted_repeat_element that is bacterial and only encodes the functions required for its transposition between these inverted repeats." [SO:as] synonym: "insertion sequence" EXACT [] synonym: "IS" RELATED [] xref: http://en.wikipedia.org/wiki/Insertion_sequence "wiki" is_a: SO:0000208 ! terminal_inverted_repeat_element [Term] id: SO:0000975 name: minicircle_gene synonym: "minicircle gene" EXACT [] is_a: SO:0000089 ! kinetoplast_gene intersection_of: SO:0000089 ! kinetoplast_gene intersection_of: part_of SO:0000980 ! minicircle relationship: part_of SO:0000980 ! minicircle [Term] id: SO:0000976 name: cryptic def: "A feature_attribute describing a feature that is not manifest under normal conditions." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000977 name: anchor_binding_site comment: Part of an edited transcript only. synonym: "anchor binding site" EXACT [] is_a: SO:0000833 ! transcript_region [Term] id: SO:0000978 name: template_region def: "A region of a guide_RNA that specifies the insertions and deletions of bases in the editing of a target mRNA." [SO:jk] synonym: "information region" EXACT [] synonym: "template region" EXACT [] is_a: SO:0000930 ! guide_RNA_region [Term] id: SO:0000979 name: gRNA_encoding def: "A non-protein_coding gene that encodes a guide_RNA." [SO:ma] synonym: "gRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000980 name: minicircle alt_id: SO:0000974 def: "A minicircle is a replicon, part of a kinetoplast, that encodes for guide RNAs." [PMID:8395055] synonym: "minicircle_chromosome" EXACT [] xref: http://en.wikipedia.org/wiki/Minicircle "wiki" is_a: SO:0001235 ! replicon [Term] id: SO:0000981 name: rho_dependent_bacterial_terminator synonym: "rho dependent bacterial terminator" EXACT [] is_a: SO:0000614 ! bacterial_terminator [Term] id: SO:0000982 name: rho_independent_bacterial_terminator synonym: "rho independent bacterial terminator" EXACT [] is_a: SO:0000614 ! bacterial_terminator [Term] id: SO:0000983 name: strand_attribute comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. synonym: "strand attribute" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000984 name: single comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. is_a: SO:0000983 ! strand_attribute [Term] id: SO:0000985 name: double comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. is_a: SO:0000983 ! strand_attribute [Term] id: SO:0000986 name: topology_attribute comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. synonym: "topology attribute" EXACT [] is_a: SO:0000443 ! polymer_attribute [Term] id: SO:0000987 name: linear def: "A quality of a nucleotide polymer that has a 3'-terminal residue and a 5'-terminal residue." [SO:cb] comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. synonym: "two-ended" RELATED [] is_a: SO:0000986 ! topology_attribute disjoint_from: SO:0000988 ! circular [Term] id: SO:0000988 name: circular def: "A quality of a nucleotide polymer that has no terminal nucleotide residues." [SO:cb] comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. synonym: "zero-ended" RELATED [] is_a: SO:0000986 ! topology_attribute [Term] id: SO:0000989 name: class_II_RNA def: "Small non-coding RNA (59-60 nt long) containing 5' and 3' ends that are predicted to come together to form a stem structure. Identified in the social amoeba Dictyostelium discoideum and localized in the cytoplasm." [PMID:15333696] synonym: "class II RNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000990 name: class_I_RNA def: "Small non-coding RNA (55-65 nt long) containing highly conserved 5' and 3' ends (16 and 8 nt, respectively) that are predicted to come together to form a stem structure. Identified in the social amoeba Dictyostelium discoideum and localized in the cytoplasm." [PMID:15333696] comment: Requested by Karen Pilcher - Dictybase. song-Term Tracker-1574577. synonym: "class I RNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000991 name: genomic_DNA comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "genomic DNA" EXACT [] is_a: SO:0000352 ! DNA [Term] id: SO:0000992 name: BAC_cloned_genomic_insert comment: Requested by Andy Schroder - Flybase Harvard, Nov 2006. synonym: "BAC cloned genomic insert" EXACT [] is_a: SO:0000914 ! cloned_genomic_insert intersection_of: SO:0000914 ! cloned_genomic_insert intersection_of: derives_from SO:0000153 ! BAC relationship: derives_from SO:0000153 ! BAC [Term] id: SO:0000993 name: consensus comment: Term added Dec 06 to comply with mapping to MGED terms. It should be used to generate consensus regions. The specific cross product terms they require are consensus_region and consensus_mRNA. is_a: SO:0000905 ! status [Term] id: SO:0000994 name: consensus_region comment: DO not obsolete without considering MGED mapping. synonym: "consensus region" EXACT [] is_a: SO:0001410 ! experimental_feature intersection_of: SO:0000001 ! region intersection_of: has_quality SO:0000993 ! consensus relationship: has_quality SO:0000993 ! consensus [Term] id: SO:0000995 name: consensus_mRNA comment: DO not obsolete without considering MGED mapping. synonym: "consensus mRNA" EXACT [] is_a: SO:0000234 ! mRNA is_a: SO:0000994 ! consensus_region intersection_of: SO:0000234 ! mRNA intersection_of: has_quality SO:0000993 ! consensus relationship: has_quality SO:0000993 ! consensus [Term] id: SO:0000996 name: predicted_gene comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "predicted gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000732 ! predicted relationship: has_quality SO:0000732 ! predicted [Term] id: SO:0000997 name: gene_fragment comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "gene fragment" EXACT [] is_a: SO:0000842 ! gene_component_region intersection_of: SO:0000842 ! gene_component_region intersection_of: has_quality SO:0000731 ! fragmentary relationship: has_quality SO:0000731 ! fragmentary [Term] id: SO:0000998 name: recursive_splice_site def: "A recursive splice site is a splice site which subdivides a large intron. Recursive splicing is a mechanism that splices large introns by sub dividing the intron at non exonic elements and alternate exons." [http://www.genetics.org/cgi/content/full/170/2/661] synonym: "recursive splice site" EXACT [] is_a: SO:0001419 ! cis_splice_site [Term] id: SO:0000999 name: BAC_end def: "A region of sequence from the end of a BAC clone that may provide a highly specific marker." [SO:ke] comment: Requested by Keith Boroevich December, 2006. synonym: "BAC end" EXACT [] synonym: "BAC end sequence" EXACT [] synonym: "BES" EXACT [] is_a: SO:0000150 ! read relationship: part_of SO:0000153 ! BAC [Term] id: SO:0001000 name: rRNA_16S def: "A large polynucleotide in Bacteria and Archaea, which functions as the small subunit of the ribosome." [SO:ke] subset: SOFA synonym: "16S ribosomal RNA" EXACT [] synonym: "16S rRNA" RELATED [] synonym: "16S SSU RNA" EXACT [] synonym: "rRNA 16S" EXACT [] xref: http://en.wikipedia.org/wiki/16S_ribosomal_RNA "wiki" is_a: SO:0000650 ! small_subunit_rRNA [Term] id: SO:0001001 name: rRNA_23S def: "A large polynucleotide in Bacteria and Archaea, which functions as the large subunit of the ribosome." [SO:ke] subset: SOFA synonym: "23S LSU rRNA" EXACT [] synonym: "23S ribosomal RNA" RELATED [] synonym: "23S rRNA" EXACT [] synonym: "rRNA 23S" EXACT [] is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0001002 name: rRNA_25S def: "A large polynucleotide which functions as part of the large subunit of the ribosome in some eukaryotes." [RSC:cb] subset: SOFA synonym: "25S LSU rRNA" EXACT [] synonym: "25S ribosomal RNA" EXACT [] synonym: "25S rRNA" EXACT [] synonym: "rRNA 25S" EXACT [] is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0001003 name: solo_LTR def: "A recombination product between the 2 LTR of the same element." [SO:ke] comment: Requested by Hadi Quesneville January 2007. synonym: "solo LTR" EXACT [] is_a: SO:0000286 ! long_terminal_repeat [Term] id: SO:0001004 name: low_complexity synonym: "low complexity" EXACT [] is_a: SO:0000905 ! status [Term] id: SO:0001005 name: low_complexity_region synonym: "low complexity region" EXACT [] is_a: SO:0001410 ! experimental_feature intersection_of: SO:0000001 ! region intersection_of: has_quality SO:0001004 ! low_complexity relationship: has_quality SO:0001004 ! low_complexity [Term] id: SO:0001006 name: prophage def: "A phage genome after it has established in the host genome in a latent/immune state either as a plasmid or as an integrated \"island\"." [GOC:jl] xref: http://en.wikipedia.org/wiki/Prophage "wiki" is_a: SO:0000113 ! proviral_region [Term] id: SO:0001007 name: cryptic_prophage def: "A remnant of an integrated prophage in the host genome or an \"island\" in the host genome that includes phage like-genes." [GOC:jl] comment: This is not cryptic in the same sense as a cryptic gene or cryptic splice site. synonym: "cryptic prophage" EXACT [] xref: http://ecoliwiki.net/colipedia/index.php/Category:Cryptic_Prophage.w is_a: SO:0000772 ! genomic_island [Term] id: SO:0001008 name: tetraloop def: "A base-paired stem with loop of 4 non-hydrogen bonded nucleotides." [SO:ke] xref: http://en.wikipedia.org/wiki/Tetraloop "wiki" is_a: SO:0000313 ! stem_loop [Term] id: SO:0001009 name: DNA_constraint_sequence def: "A double-stranded DNA used to control macromolecular structure and function." [http:/www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=search&db=pubmed&term=SILVERMAN+SK[au\]&dispmax=50] synonym: "DNA constraint" EXACT [] synonym: "DNA constraint sequence" EXACT [] is_a: SO:0000442 ! ds_oligo [Term] id: SO:0001010 name: i_motif def: "A cytosine rich domain whereby strands associate both inter- and intramolecularly at moderately acidic pH." [PMID:9753739] synonym: "i motif" EXACT [] synonym: "short intercalated motif" EXACT [] is_a: SO:0000142 ! DNA_sequence_secondary_structure [Term] id: SO:0001011 name: PNA_oligo def: "Peptide nucleic acid, is a chemical not known to occur naturally but is artificially synthesized and used in some biological research and medical treatments. The PNA backbone is composed of repeating N-(2-aminoethyl)-glycine units linked by peptide bonds. The purine and pyrimidine bases are linked to the backbone by methylene carbonyl bonds." [SO:ke] synonym: "peptide nucleic acid" EXACT [] synonym: "PNA oligo" EXACT [] xref: http://en.wikipedia.org/wiki/Peptide_nucleic_acid "wiki" is_a: SO:0001247 ! synthetic_oligo intersection_of: SO:0001247 ! synthetic_oligo intersection_of: has_quality SO:0001184 ! PNA relationship: has_quality SO:0001184 ! PNA [Term] id: SO:0001012 name: DNAzyme def: "A DNA sequence with catalytic activity." [SO:cb] comment: Added by request from Colin Batchelor. synonym: "catalytic DNA" EXACT [] synonym: "deoxyribozyme" RELATED [] synonym: "DNA enzyme" EXACT [] is_a: SO:0000696 ! oligo intersection_of: SO:0000696 ! oligo intersection_of: has_quality SO:0001185 ! enzymatic relationship: has_quality SO:0001185 ! enzymatic [Term] id: SO:0001013 name: MNP def: "A multiple nucleotide polymorphism with alleles of common length > 1, for example AAA/TTT." [http://www.ncbi.nlm.nih.gov/SNP/snp_ref.cgi?rs=rs2067431] synonym: "multiple nucleotide polymorphism" RELATED [] is_a: SO:1000002 ! substitution [Term] id: SO:0001014 name: intron_domain comment: Requested by Colin Batchelor, Feb 2007. synonym: "intron domain" EXACT [] is_a: SO:0000835 ! primary_transcript_region relationship: part_of SO:0000188 ! intron [Term] id: SO:0001015 name: wobble_base_pair def: "A type of non-canonical base pairing, most commonly between G and U, which is important for the secondary structure of RNAs. It has similar thermodynamic stability to the Watson-Crick pairing. Wobble base pairs only have two hydrogen bonds. Other wobble base pair possibilities are I-A, I-U and I-C." [PMID:11256617] synonym: "wobble base pair" EXACT [] synonym: "wobble pair" EXACT [] xref: http://en.wikipedia.org/wiki/Wobble_base_pair "wiki" is_a: SO:0000028 ! base_pair [Term] id: SO:0001016 name: internal_guide_sequence def: "A purine-rich sequence in the group I introns which determines the locations of the splice sites in group I intron splicing and has catalytic activity." [SO:cb] synonym: "IGS" EXACT [] synonym: "internal guide sequence" EXACT [] is_a: SO:0001014 ! intron_domain relationship: part_of SO:0000587 ! group_I_intron [Term] id: SO:0001017 name: silent_mutation def: "A sequence variant that does not affect protein function. Silent mutations may occur in genic ( CDS, UTR, intron etc) and intergenic regions. Silent mutations may have affects on processes such as splicing and regulation." [SO:ke] comment: Added in March 2007 in after meeting with pharmgkb. Although this term is in common usage, it is better to annotate with the most specific term possible, such as synonymous codon, intron variant etc. synonym: "silent mutation" EXACT [] xref: http://en.wikipedia.org/wiki/Silent_mutation "wiki" xref: loinc:LA6700-4 "Silent" is_a: SO:0001878 ! feature_variant [Term] id: SO:0001018 name: epitope def: "A binding site that, in the molecule, interacts selectively and non-covalently with antibodies, B cells or T cells." [http://en.wikipedia.org/wiki/Epitope, SO:cb] comment: Requested by Trish Whetzel. xref: http://en.wikipedia.org/wiki/Epitope "wiki" is_a: SO:0000409 ! binding_site [Term] id: SO:0001019 name: copy_number_variation def: "A variation that increases or decreases the copy number of a given region." [SO:ke] subset: SOFA synonym: "CNP" EXACT [] synonym: "CNV" EXACT [] synonym: "copy number polymorphism" EXACT [] synonym: "copy number variation" EXACT [] xref: http://en.wikipedia.org/wiki/Copy_number_variation "wiki" is_a: SO:0001059 ! sequence_alteration [Term] id: SO:0001020 name: sequence_variant_affecting_copy_number comment: OBSOLETE: This term was deleted as it conflated more than one term. The alteration is separate from the effect. synonym: "mutation affecting copy number" EXACT [] synonym: "sequence variant affecting copy number" EXACT [] is_obsolete: true replaced_by: SO:0001563 [Term] id: SO:0001021 name: chromosome_breakpoint alt_id: SO:0001242 synonym: "aberration breakpoint" EXACT [] synonym: "aberration_junction" EXACT [] synonym: "chromosome breakpoint" EXACT [] is_a: SO:0000699 ! junction relationship: part_of SO:0000340 ! chromosome [Term] id: SO:0001022 name: inversion_breakpoint def: "The point within a chromosome where an inversion begins or ends." [SO:cb] synonym: "inversion breakpoint" EXACT [] is_a: SO:0001021 ! chromosome_breakpoint [Term] id: SO:0001023 name: allele def: "An allele is one of a set of coexisting sequence variants of a gene." [SO:immuno_workshop] synonym: "allelomorph" EXACT [] xref: http://en.wikipedia.org/wiki/Allele "wiki" is_a: SO:0001507 ! variant_collection relationship: variant_of SO:0000704 ! gene [Term] id: SO:0001024 name: haplotype def: "A haplotype is one of a set of coexisting sequence variants of a haplotype block." [SO:immuno_workshop] xref: http://en.wikipedia.org/wiki/Haplotype "wiki" is_a: SO:0001507 ! variant_collection relationship: variant_of SO:0000355 ! haplotype_block [Term] id: SO:0001025 name: polymorphic_sequence_variant def: "A sequence variant that is segregating in one or more natural populations of a species." [SO:immuno_workshop] synonym: "polymorphic sequence variant" EXACT [] is_a: SO:0001023 ! allele [Term] id: SO:0001026 name: genome def: "A genome is the sum of genetic material within a cell or virion." [SO:immuno_workshop] xref: http://en.wikipedia.org/wiki/Genome "wiki" is_a: SO:0001260 ! sequence_collection intersection_of: SO:0001260 ! sequence_collection intersection_of: has_part SO:0001235 ! replicon relationship: has_part SO:0001235 ! replicon [Term] id: SO:0001027 name: genotype def: "A genotype is a variant genome, complete or incomplete." [SO:immuno_workshop] xref: http://en.wikipedia.org/wiki/Genotype "wiki" is_a: SO:0001507 ! variant_collection relationship: variant_of SO:0001026 ! genome [Term] id: SO:0001028 name: diplotype def: "A diplotype is a pair of haplotypes from a given individual. It is a genotype where the phase is known." [SO:immuno_workshop] is_a: SO:0001507 ! variant_collection [Term] id: SO:0001029 name: direction_attribute synonym: "direction attribute" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0001030 name: forward def: "Forward is an attribute of the feature, where the feature is in the 5' to 3' direction." [SO:ke] is_a: SO:0001029 ! direction_attribute [Term] id: SO:0001031 name: reverse def: "Reverse is an attribute of the feature, where the feature is in the 3' to 5' direction. Again could be applied to primer." [SO:ke] is_a: SO:0001029 ! direction_attribute [Term] id: SO:0001032 name: mitochondrial_DNA comment: This terms is used by MO. synonym: "mitochondrial DNA" EXACT [] synonym: "mtDNA" EXACT [] xref: http://en.wikipedia.org/wiki/Mitochondrial_DNA "wiki" is_a: SO:0000737 ! mitochondrial_sequence intersection_of: SO:0000737 ! mitochondrial_sequence intersection_of: has_quality SO:0000352 ! DNA relationship: has_quality SO:0000352 ! DNA [Term] id: SO:0001033 name: chloroplast_DNA comment: This term is used by MO. synonym: "chloroplast DNA" EXACT [] is_a: SO:0000745 ! chloroplast_sequence intersection_of: SO:0000745 ! chloroplast_sequence intersection_of: has_quality SO:0000352 ! DNA relationship: has_quality SO:0000352 ! DNA [Term] id: SO:0001034 name: mirtron def: "A de-branched intron which mimics the structure of pre-miRNA and enters the miRNA processing pathway without Drosha mediated cleavage." [PMID:17589500, SO:ma] comment: Ruby et al. Nature 448:83 describe a new class of miRNAs that are derived from de-branched introns. is_a: SO:0001014 ! intron_domain [Term] id: SO:0001035 name: piRNA def: "A small non coding RNA, part of a silencing system that prevents the spreading of selfish genetic elements." [SO:ke] synonym: "piwi-associated RNA" EXACT [] xref: http://en.wikipedia.org/wiki/PiRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0001036 name: arginyl_tRNA def: "A tRNA sequence that has an arginine anticodon, and a 3' arginine binding region." [SO:ke] synonym: "arginyl tRNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000212 ! arginine_tRNA_primary_transcript [Term] id: SO:0001037 name: mobile_genetic_element def: "A nucleotide region with either intra-genome or intracellular moblity, of varying length, which often carry the information necessary for transfer and recombination with the host genome." [PMID:14681355] subset: SOFA synonym: "MGE" EXACT [] synonym: "mobile genetic element" EXACT [] xref: http://en.wikipedia.org/wiki/Mobile_genetic_element "wiki" is_a: SO:0001411 ! biological_region intersection_of: SO:0000001 ! region intersection_of: has_quality SO:0001234 ! mobile relationship: has_quality SO:0001234 ! mobile [Term] id: SO:0001038 name: extrachromosomal_mobile_genetic_element def: "An MGE that is not integrated into the host chromosome." [SO:ke] synonym: "extrachromosomal mobile genetic element" EXACT [] is_a: SO:0001037 ! mobile_genetic_element [Term] id: SO:0001039 name: integrated_mobile_genetic_element def: "An MGE that is integrated into the host chromosome." [SO:ke] subset: SOFA synonym: "integrated mobile genetic element" EXACT [] is_a: SO:0001037 ! mobile_genetic_element [Term] id: SO:0001040 name: integrated_plasmid def: "A plasmid sequence that is integrated within the host chromosome." [SO:ke] synonym: "integrated plasmid" EXACT [] is_a: SO:0001039 ! integrated_mobile_genetic_element intersection_of: SO:0001039 ! integrated_mobile_genetic_element intersection_of: derives_from SO:0000155 ! plasmid relationship: derives_from SO:0000155 ! plasmid [Term] id: SO:0001041 name: viral_sequence def: "The region of nucleotide sequence of a virus, a submicroscopic particle that replicates by infecting a host cell." [SO:ke] comment: The definitions of the children of this term were revised Decemeber 2007 after discussion on song-devel. The resulting definitions are slightly unweildy but hopefully more logically correct. synonym: "viral sequence" EXACT [] synonym: "virus sequence" EXACT [] is_a: SO:0001038 ! extrachromosomal_mobile_genetic_element is_a: SO:0001235 ! replicon [Term] id: SO:0001042 name: phage_sequence def: "The nucleotide sequence of a virus that infects bacteria." [SO:ke] synonym: "bacteriophage" EXACT [] synonym: "phage" EXACT [] synonym: "phage sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Bacteriophage "wiki" is_a: SO:0001041 ! viral_sequence [Term] id: SO:0001043 name: attCtn_site def: "An attachment site located on a conjugative transposon and used for site-specific integration of a conjugative transposon." [Phigo:at] synonym: "attCtn site" EXACT [] is_a: SO:0000946 ! integration_excision_site relationship: part_of SO:0000371 ! conjugative_transposon [Term] id: SO:0001044 name: nuclear_mt_pseudogene def: "A nuclear pseudogene of either coding or non-coding mitochondria derived sequence." [SO:xp] comment: Definition change requested by Val, 3172757. synonym: "nuclear mitochondrial pseudogene" EXACT [] synonym: "nuclear mt pseudogene" EXACT [] synonym: "NUMT" EXACT [] xref: http://en.wikipedia.org/wiki/Numt "wikipedia" is_a: SO:0001760 ! non_processed_pseudogene [Term] id: SO:0001045 name: cointegrated_plasmid def: "A MGE region consisting of two fused plasmids resulting from a replicative transposition event." [phigo:at] synonym: "cointegrated plasmid" EXACT [] synonym: "cointegrated replicon" EXACT [] is_a: SO:0001039 ! integrated_mobile_genetic_element [Term] id: SO:0001046 name: IRLinv_site def: "Component of the inversion site located at the left of a region susceptible to site-specific inversion." [Phigo:at] synonym: "IRLinv site" EXACT [] is_a: SO:0001048 ! inversion_site_part relationship: part_of SO:0000948 ! inversion_site [Term] id: SO:0001047 name: IRRinv_site def: "Component of the inversion site located at the right of a region susceptible to site-specific inversion." [Phigo:at] synonym: "IRRinv site" EXACT [] is_a: SO:0001048 ! inversion_site_part relationship: part_of SO:0000948 ! inversion_site [Term] id: SO:0001048 name: inversion_site_part def: "A region located within an inversion site." [SO:ke] comment: A term created to allow the parts of an inversion site have an is_a path back to the root. synonym: "inversion site part" EXACT [] is_a: SO:0000342 ! site_specific_recombination_target_region [Term] id: SO:0001049 name: defective_conjugative_transposon def: "An island that contains genes for integration/excision and the gene and site for the initiation of intercellular transfer by conjugation. It can be complemented for transfer by a conjugative transposon." [Phigo:ariane] synonym: "defective conjugative transposon" EXACT [] is_a: SO:0000772 ! genomic_island [Term] id: SO:0001050 name: repeat_fragment def: "A portion of a repeat, interrupted by the insertion of another element." [SO:ke] comment: Requested by Chris Smith, and others at Flybase to help annotate nested repeats. synonym: "repeat fragment" EXACT [] is_a: SO:0000840 ! repeat_component relationship: part_of SO:0001649 ! nested_repeat [Term] id: SO:0001051 name: nested_region is_obsolete: true [Term] id: SO:0001052 name: nested_repeat is_obsolete: true [Term] id: SO:0001053 name: nested_transposon is_obsolete: true [Term] id: SO:0001054 name: transposon_fragment def: "A portion of a transposon, interrupted by the insertion of another element." [SO:ke] synonym: "transposon fragment" EXACT [] is_a: SO:0000840 ! repeat_component relationship: part_of SO:0001648 ! nested_transposon [Term] id: SO:0001055 name: transcriptional_cis_regulatory_region def: "A regulatory_region that modulates the transcription of a gene or genes." [SO:regcreative] subset: SOFA synonym: "transcriptional cis regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0001056 name: splicing_regulatory_region def: "A regulatory_region that modulates splicing." [SO:ke] subset: SOFA synonym: "splicing regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0001057 name: enhanceosome is_obsolete: true [Term] id: SO:0001058 name: promoter_targeting_sequence def: "A transcriptional_cis_regulatory_region that restricts the activity of a CRM to a single promoter and which functions only when both itself and an insulator are located between the CRM and the promoter." [SO:regcreative] synonym: "promoter targeting sequence" EXACT [] is_a: SO:0001055 ! transcriptional_cis_regulatory_region [Term] id: SO:0001059 name: sequence_alteration alt_id: SO:1000004 alt_id: SO:1000007 def: "A sequence_alteration is a sequence_feature whose extent is the deviation from another sequence." [SO:ke] comment: Merged with partially characterized change in nucleotide sequence. subset: SOFA synonym: "partially characterised change in DNA sequence" NARROW [] synonym: "partially_characterised_change_in_DNA_sequence" NARROW [] synonym: "sequence alteration" EXACT [] synonym: "uncharacterised_change_in_nucleotide_sequence" NARROW [] is_a: SO:0000110 ! sequence_feature [Term] id: SO:0001060 name: sequence_variant def: "A sequence_variant is a non exact copy of a sequence_feature or genome exhibiting one or more sequence_alteration." [SO:ke] synonym: "sequence variant" EXACT [] [Term] id: SO:0001061 name: propeptide_cleavage_site alt_id: BS:00063 def: "The propeptide_cleavage_site is the arginine/lysine boundary on a propeptide where cleavage occurs." [EBIBS:GAR] comment: Discrete. subset: biosapiens synonym: "propeptide cleavage site" EXACT [] is_a: SO:0100011 ! cleaved_peptide_region relationship: part_of SO:0001062 ! propeptide [Term] id: SO:0001062 name: propeptide alt_id: BS:00077 def: "Part of a peptide chain which is cleaved off during the formation of the mature protein." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "propep" RELATED [uniprot:feature_type] xref: http://en.wikipedia.org/wiki/Propeptide "wiki" is_a: SO:0100011 ! cleaved_peptide_region [Term] id: SO:0001063 name: immature_peptide_region alt_id: BS:00129 def: "An immature_peptide_region is the extent of the peptide after it has been translated and before any processing occurs." [EBIBS:GAR] comment: Range. subset: biosapiens subset: SOFA synonym: "immature peptide region" EXACT [] is_a: SO:0000839 ! polypeptide_region [Term] id: SO:0001064 name: active_peptide alt_id: BS:00076 def: "Active peptides are proteins which are biologically active, released from a precursor molecule." [EBIBS:GAR, UniProt:curation_manual] comment: Hormones, neuropeptides, antimicrobial peptides, are active peptides. They are typically short (<40 amino acids) in length. subset: biosapiens synonym: "active peptide" EXACT [] synonym: "peptide" BROAD [uniprot:feature_type] xref: http://en.wikipedia.org/wiki/Peptide "wiki" is_a: SO:0000419 ! mature_protein_region [Term] id: SO:0001066 name: compositionally_biased_region_of_peptide alt_id: BS:00068 def: "Polypeptide region that is rich in a particular amino acid or homopolymeric and greater than three residues in length." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "compbias" RELATED [uniprot:feature_type] synonym: "compositional bias" RELATED [] synonym: "compositionally biased" RELATED [] synonym: "compositionally biased region of peptide" RELATED [] synonym: "compositionally_biased_region" EXACT [] is_a: SO:0000839 ! polypeptide_region [Term] id: SO:0001067 name: polypeptide_motif alt_id: BS:00032 def: "A sequence motif is a short (up to 20 amino acids) region of biological interest. Such motifs, although they are too short to constitute functional domains, share sequence similarities and are conserved in different proteins. They display a common function (protein-binding, subcellular location etc.)." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "motif" BROAD [uniprot:feature_type] synonym: "polypeptide motif" EXACT [] is_a: SO:0100021 ! polypeptide_conserved_region [Term] id: SO:0001068 name: polypeptide_repeat alt_id: BS:00070 def: "A polypeptide_repeat is a single copy of an internal sequence repetition." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "polypeptide repeat" EXACT [] synonym: "repeat" RELATED [uniprot:feature_type] is_a: SO:0100021 ! polypeptide_conserved_region [Term] id: SO:0001070 name: polypeptide_structural_region alt_id: BS:00337 def: "Region of polypeptide with a given structural property." [EBIBS:GAR, SO:cb] comment: Range. subset: biosapiens synonym: "polypeptide structural region" EXACT [] synonym: "structural_region" RELATED [] is_a: SO:0000839 ! polypeptide_region [Term] id: SO:0001071 name: membrane_structure alt_id: BS:00128 def: "Arrangement of the polypeptide with respect to the lipid bilayer." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "membrane structure" EXACT [] is_a: SO:0001070 ! polypeptide_structural_region [Term] id: SO:0001072 name: extramembrane_polypeptide_region alt_id: BS:00154 def: "Polypeptide region that is localized outside of a lipid bilayer." [EBIBS:GAR, SO:cb] comment: Range. subset: biosapiens synonym: "extramembrane" RELATED BS [] synonym: "extramembrane polypeptide region" EXACT [] synonym: "extramembrane_region" RELATED BS [] synonym: "topo_dom" RELATED BS [uniprot:feature_type] is_a: SO:0001070 ! polypeptide_structural_region relationship: part_of SO:0001071 ! membrane_structure [Term] id: SO:0001073 name: cytoplasmic_polypeptide_region alt_id: BS:00145 def: "Polypeptide region that is localized inside the cytoplasm." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "cytoplasm_location" EXACT BS [] synonym: "cytoplasmic polypeptide region" EXACT [] synonym: "inside" RELATED BS [] is_a: SO:0001072 ! extramembrane_polypeptide_region [Term] id: SO:0001074 name: non_cytoplasmic_polypeptide_region alt_id: BS:00144 def: "Polypeptide region that is localized outside of a lipid bilayer and outside of the cytoplasm." [EBIBS:GAR, SO:cb] comment: This could be inside an organelle within the cell. subset: biosapiens synonym: "non cytoplasmic polypeptide region" EXACT [] synonym: "non_cytoplasm_location" EXACT BS [] synonym: "outside" RELATED BS [] is_a: SO:0001072 ! extramembrane_polypeptide_region [Term] id: SO:0001075 name: intramembrane_polypeptide_region alt_id: BS:00156 def: "Polypeptide region present in the lipid bilayer." [EBIBS:GAR] subset: biosapiens synonym: "intramembrane" RELATED BS [] synonym: "intramembrane polypeptide region" EXACT [] is_a: SO:0001070 ! polypeptide_structural_region relationship: part_of SO:0001071 ! membrane_structure [Term] id: SO:0001076 name: membrane_peptide_loop alt_id: BS:00155 def: "Polypeptide region localized within the lipid bilayer where both ends traverse the same membrane." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "membrane peptide loop" EXACT [] synonym: "membrane_loop" RELATED BS [] is_a: SO:0001075 ! intramembrane_polypeptide_region [Term] id: SO:0001077 name: transmembrane_polypeptide_region alt_id: BS:00158 def: "Polypeptide region traversing the lipid bilayer." [EBIBS:GAR, UniProt:curator_manual] subset: biosapiens synonym: "transmem" RELATED BS [uniprot:feature_type] synonym: "transmembrane" RELATED BS [] synonym: "transmembrane polypeptide region" EXACT [] is_a: SO:0001075 ! intramembrane_polypeptide_region [Term] id: SO:0001078 name: polypeptide_secondary_structure alt_id: BS:00003 def: "A region of peptide with secondary structure has hydrogen bonding along the peptide chain that causes a defined conformation of the chain." [EBIBS:GAR] comment: Biosapien term was secondary_structure. subset: biosapiens synonym: "2nary structure" RELATED BS [] synonym: "polypeptide secondary structure" EXACT [] synonym: "secondary structure" RELATED BS [] synonym: "secondary structure region" RELATED BS [] synonym: "secondary_structure" RELATED BS [] xref: http://en.wikipedia.org/wiki/Secondary_structure "wiki" is_a: SO:0001070 ! polypeptide_structural_region [Term] id: SO:0001079 name: polypeptide_structural_motif alt_id: BS:0000338 def: "Motif is a three-dimensional structural element within the chain, which appears also in a variety of other molecules. Unlike a domain, a motif does not need to form a stable globular unit." [EBIBS:GAR] subset: biosapiens synonym: "polypeptide structural motif" RELATED [] synonym: "structural_motif" RELATED BS [] xref: http://en.wikipedia.org/wiki/Structural_motif "wiki" is_a: SO:0001070 ! polypeptide_structural_region [Term] id: SO:0001080 name: coiled_coil alt_id: BS:00041 def: "A coiled coil is a structural motif in proteins, in which alpha-helices are coiled together like the strands of a rope." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "coiled" RELATED BS [uniprot:feature_type] synonym: "coiled coil" EXACT [] xref: http://en.wikipedia.org/wiki/Coiled_coil "wiki" is_a: SO:0001079 ! polypeptide_structural_motif [Term] id: SO:0001081 name: helix_turn_helix alt_id: BS:00147 def: "A motif comprising two helices separated by a turn." [EBIBS:GAR] subset: biosapiens synonym: "helix turn helix" EXACT [] synonym: "helix-turn-helix" EXACT [] synonym: "HTH" RELATED BS [] is_a: SO:0001079 ! polypeptide_structural_motif relationship: has_part SO:0001114 ! peptide_helix relationship: has_part SO:0001128 ! polypeptide_turn_motif [Term] id: SO:0001082 name: polypeptide_sequencing_information alt_id: BS:00125 def: "Incompatibility in the sequence due to some experimental problem." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "sequencing_information" EXACT [] is_a: SO:0000700 ! remark [Term] id: SO:0001083 name: non_adjacent_residues alt_id: BS:00182 def: "Indicates that two consecutive residues in a fragment sequence are not consecutive in the full-length protein and that there are a number of unsequenced residues between them." [EBIBS:GAR, UniProt:curation_manual] subset: biosapiens synonym: "non consecutive" EXACT [] synonym: "non_cons" EXACT [uniprot:feature_type] is_a: SO:0001082 ! polypeptide_sequencing_information [Term] id: SO:0001084 name: non_terminal_residue alt_id: BS:00072 def: "The residue at an extremity of the sequence is not the terminal residue." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "non terminal" EXACT [] synonym: "non_ter" EXACT [uniprot:feature_type] is_a: SO:0001082 ! polypeptide_sequencing_information [Term] id: SO:0001085 name: sequence_conflict alt_id: BS:00069 def: "Different sources report differing sequences." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "conflict" EXACT [uniprot:feature_type] is_a: SO:0001082 ! polypeptide_sequencing_information [Term] id: SO:0001086 name: sequence_uncertainty alt_id: BS:00181 def: "Describes the positions in a sequence where the authors are unsure about the sequence assignment." [EBIBS:GAR, UniProt:curation_manual] subset: biosapiens synonym: "unsure" EXACT [uniprot:feature_type] is_a: SO:0001082 ! polypeptide_sequencing_information [Term] id: SO:0001087 name: cross_link alt_id: BS:00178 def: "Posttranslationally formed amino acid bonds." [EBIBS:GAR, UniProt:curation_manual] subset: biosapiens synonym: "cross link" EXACT [] synonym: "crosslink" RELATED [] is_obsolete: true [Term] id: SO:0001088 name: disulfide_bond alt_id: BS:00028 def: "The covalent bond between sulfur atoms that binds two peptide chains or different parts of one peptide chain and is a structural determinant in many protein molecules." [EBIBS:GAR, UniProt:curation_manual] comment: 2 discreet & joined. subset: biosapiens synonym: "disulfid" RELATED [] synonym: "disulfide" RELATED [] synonym: "disulfide bond" RELATED [] synonym: "disulphide" EXACT [] synonym: "disulphide bond" RELATED [] is_obsolete: true [Term] id: SO:0001089 name: post_translationally_modified_region alt_id: BS:00052 def: "A region where a transformation occurs in a protein after it has been synthesized. This which may regulate, stabilize, crosslink or introduce new chemical functionalities in the protein." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "mod_res" EXACT [uniprot:feature_type] synonym: "modified residue" EXACT [] synonym: "post_translational_modification" EXACT [] xref: http://en.wikipedia.org/wiki/Post_translational_modification "wiki" is_a: SO:0100001 ! biochemical_region_of_peptide [Term] id: SO:0001090 name: covalent_binding_site alt_id: BS:00246 def: "Binding involving a covalent bond." [EBIBS:GAR] subset: biosapiens synonym: "covalent binding site" EXACT [] is_obsolete: true [Term] id: SO:0001091 name: non_covalent_binding_site alt_id: BS:00029 def: "Binding site for any chemical group (co-enzyme, prosthetic group, etc.)." [EBIBS:GAR] comment: Discrete. subset: biosapiens synonym: "binding" RELATED [uniprot:curation] synonym: "binding site" RELATED [] synonym: "non covalent binding site" EXACT [] is_obsolete: true [Term] id: SO:0001092 name: polypeptide_metal_contact alt_id: BS:00027 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with metal ions." [EBIBS:GAR, SO:cb, UniProt:curation_manual] comment: Residue is part of a binding site for a metal ion. subset: biosapiens synonym: "metal_binding" RELATED [] is_a: SO:0001656 ! metal_binding_site is_a: SO:0100002 ! molecular_contact_region [Term] id: SO:0001093 name: protein_protein_contact alt_id: BS:00131 def: "A binding site that, in the protein molecule, interacts selectively and non-covalently with polypeptide residues." [EBIBS:GAR, UniProt:Curation_manual] subset: biosapiens synonym: "protein protein contact" EXACT [] synonym: "protein protein contact site" EXACT [] synonym: "protein_protein_interaction" RELATED [] xref: http://en.wikipedia.org/wiki/Protein_protein_interaction "wiki" is_a: SO:0000410 ! protein_binding_site is_a: SO:0100002 ! molecular_contact_region [Term] id: SO:0001094 name: polypeptide_calcium_ion_contact_site alt_id: BS:00186 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with calcium ions." [EBIBS:GAR] comment: Residue involved in contact with calcium. subset: biosapiens synonym: "ca bind" RELATED [] synonym: "Ca_contact_site" EXACT [] synonym: "polypeptide calcium ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001095 name: polypeptide_cobalt_ion_contact_site alt_id: BS:00136 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with cobalt ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Co_contact_site" EXACT [] synonym: "polypeptide cobalt ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001096 name: polypeptide_copper_ion_contact_site alt_id: BS:00146 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with copper ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Cu_contact_site" EXACT [] synonym: "polypeptide copper ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001097 name: polypeptide_iron_ion_contact_site alt_id: BS:00137 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with iron ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Fe_contact_site" EXACT [] synonym: "polypeptide iron ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001098 name: polypeptide_magnesium_ion_contact_site alt_id: BS:00187 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with magnesium ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Mg_contact_site" EXACT [] synonym: "polypeptide magnesium ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001099 name: polypeptide_manganese_ion_contact_site alt_id: BS:00140 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with manganese ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Mn_contact_site" EXACT [] synonym: "polypeptide manganese ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001100 name: polypeptide_molybdenum_ion_contact_site alt_id: BS:00141 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with molybdenum ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Mo_contact_site" EXACT [] synonym: "polypeptide molybdenum ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001101 name: polypeptide_nickel_ion_contact_site alt_id: BS:00142 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with nickel ions." [EBIBS:GAR] subset: biosapiens synonym: "Ni_contact_site" EXACT [] synonym: "polypeptide nickel ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001102 name: polypeptide_tungsten_ion_contact_site alt_id: BS:00143 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with tungsten ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "polypeptide tungsten ion contact site" EXACT [] synonym: "W_contact_site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001103 name: polypeptide_zinc_ion_contact_site alt_id: BS:00185 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with zinc ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "polypeptide zinc ion contact site" EXACT [] synonym: "Zn_contact_site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001104 name: catalytic_residue alt_id: BS:00026 def: "Amino acid involved in the activity of an enzyme." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "act_site" RELATED [uniprot:feature_type] synonym: "active site residue" EXACT [] synonym: "catalytic residue" EXACT [] is_a: SO:0001237 ! amino_acid relationship: part_of SO:0100019 ! polypeptide_catalytic_motif [Term] id: SO:0001105 name: polypeptide_ligand_contact alt_id: BS:00157 def: "Residues which interact with a ligand." [EBIBS:GAR] subset: biosapiens synonym: "polypeptide ligand contact" EXACT [] synonym: "protein-ligand interaction" RELATED [] is_a: SO:0001657 ! ligand_binding_site is_a: SO:0100002 ! molecular_contact_region [Term] id: SO:0001106 name: asx_motif alt_id: BS:00202 def: "A motif of five consecutive residues and two H-bonds in which: Residue(i) is Aspartate or Asparagine (Asx), side-chain O of residue(i) is H-bonded to the main-chain NH of residue(i+2) or (i+3), main-chain CO of residue(i) is H-bonded to the main-chain NH of residue(i+3) or (i+4)." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx motif" EXACT [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001107 name: beta_bulge alt_id: BS:00208 def: "A motif of three residues within a beta-sheet in which the main chains of two consecutive residues are H-bonded to that of the third, and in which the dihedral angles are as follows: Residue(i): -140 degrees < phi(l) -20 degrees , -90 degrees < psi(l) < 40 degrees. Residue (i+1): -180 degrees < phi < -25 degrees or +120 degrees < phi < +180 degrees, +40 degrees < psi < +180 degrees or -180 degrees < psi < -120 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta bulge" EXACT [] xref: http://en.wikipedia.org/wiki/Beta_bulge "wiki" is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001108 name: beta_bulge_loop alt_id: BS:00209 def: "A motif of three residues within a beta-sheet consisting of two H-bonds. Beta bulge loops often occur at the loop ends of beta-hairpins." [EBIBS:GAR, Http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta bulge loop" EXACT [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001109 name: beta_bulge_loop_five alt_id: BS:00210 def: "A motif of three residues within a beta-sheet consisting of two H-bonds in which: the main-chain NH of residue(i) is H-bonded to the main-chain CO of residue(i+4), the main-chain CO of residue i is H-bonded to the main-chain NH of residue(i+3), these loops have an RL nest at residues i+2 and i+3." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta bulge loop five" EXACT [] is_a: SO:0001108 ! beta_bulge_loop [Term] id: SO:0001110 name: beta_bulge_loop_six alt_id: BS:00211 def: "A motif of three residues within a beta-sheet consisting of two H-bonds in which: the main-chain NH of residue(i) is H-bonded to the main-chain CO of residue(i+5), the main-chain CO of residue i is H-bonded to the main-chain NH of residue(i+4), these loops have an RL nest at residues i+3 and i+4." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta bulge loop six" EXACT [] is_a: SO:0001108 ! beta_bulge_loop [Term] id: SO:0001111 name: beta_strand alt_id: BS:00042 def: "A beta strand describes a single length of polypeptide chain that forms part of a beta sheet. A single continuous stretch of amino acids adopting an extended conformation of hydrogen bonds between the N-O and the C=O of another part of the peptide. This forms a secondary protein structure in which two or more extended polypeptide regions are hydrogen-bonded to one another in a planar array." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "strand" RELATED BS [uniprot:feature_type] xref: http://en.wikipedia.org/wiki/Beta_sheet "wiki" is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001112 name: antiparallel_beta_strand alt_id: BS:0000341 def: "A peptide region which hydrogen bonded to another region of peptide running in the oposite direction (one running N-terminal to C-terminal and one running C-terminal to N-terminal). Hydrogen bonding occurs between every other C=O from one strand to every other N-H on the adjacent strand. In this case, if two atoms C-alpha (i) and C-alpha (j) are adjacent in two hydrogen-bonded beta strands, then they form two mutual backbone hydrogen bonds to each other's flanking peptide groups; this is known as a close pair of hydrogen bonds. The peptide backbone dihedral angles (phi, psi) are about (-140 degrees, 135 degrees) in antiparallel sheets." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "antiparallel beta strand" EXACT [] is_a: SO:0001111 ! beta_strand [Term] id: SO:0001113 name: parallel_beta_strand alt_id: BS:00151 def: "A peptide region which hydrogen bonded to another region of peptide running in the oposite direction (both running N-terminal to C-terminal). This orientation is slightly less stable because it introduces nonplanarity in the inter-strand hydrogen bonding pattern. Hydrogen bonding occurs between every other C=O from one strand to every other N-H on the adjacent strand. In this case, if two atoms C-alpha (i)and C-alpha (j) are adjacent in two hydrogen-bonded beta strands, then they do not hydrogen bond to each other; rather, one residue forms hydrogen bonds to the residues that flank the other (but not vice versa). For example, residue i may form hydrogen bonds to residues j - 1 and j + 1; this is known as a wide pair of hydrogen bonds. By contrast, residue j may hydrogen-bond to different residues altogether, or to none at all. The dihedral angles (phi, psi) are about (-120 degrees, 115 degrees) in parallel sheets." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "parallel beta strand" EXACT [] is_a: SO:0001111 ! beta_strand [Term] id: SO:0001114 name: peptide_helix alt_id: BS:00152 def: "A helix is a secondary_structure conformation where the peptide backbone forms a coil." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "helix" RELATED BS [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001115 name: left_handed_peptide_helix alt_id: BS:00222 def: "A left handed helix is a region of peptide where the coiled conformation turns in an anticlockwise, left handed screw." [EBIBS:GAR] subset: biosapiens synonym: "helix-l" RELATED [] synonym: "left handed helix" EXACT [] is_a: SO:0001114 ! peptide_helix [Term] id: SO:0001116 name: right_handed_peptide_helix alt_id: BS:0000339 def: "A right handed helix is a region of peptide where the coiled conformation turns in a clockwise, right handed screw." [EBIBS:GAR] subset: biosapiens synonym: "helix" RELATED BS [] synonym: "right handed helix" EXACT [] is_a: SO:0001114 ! peptide_helix [Term] id: SO:0001117 name: alpha_helix alt_id: BS:00040 def: "The helix has 3.6 residues per turn which corersponds to a translation of 1.5 angstroms (= 0.15 nm) along the helical axis. Every backbone N-H group donates a hydrogen bond to the backbone C=O group of the amino acid four residues earlier." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "a-helix" RELATED BS [] synonym: "helix" RELATED BS [uniprot:feature_type] xref: http://en.wikipedia.org/wiki/Alpha_helix "wiki" is_a: SO:0001116 ! right_handed_peptide_helix [Term] id: SO:0001118 name: pi_helix alt_id: BS:00153 def: "The pi helix has 4.1 residues per turn and a translation of 1.15 (=0.115 nm) along the helical axis. The N-H group of an amino acid forms a hydrogen bond with the C=O group of the amino acid five residues earlier." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "pi helix" EXACT [] xref: http://en.wikipedia.org/wiki/Pi_helix "wiki" is_a: SO:0001116 ! right_handed_peptide_helix [Term] id: SO:0001119 name: three_ten_helix alt_id: BS:0000340 def: "The 3-10 helix has 3 residues per turn with a translation of 2.0 angstroms (=0.2 nm) along the helical axis. The N-H group of an amino acid forms a hydrogen bond with the C=O group of the amino acid three residues earlier." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "3(10) helix" EXACT [] synonym: "3-10 helix" EXACT [] synonym: "310 helix" EXACT [] synonym: "three ten helix" EXACT [] xref: http://en.wikipedia.org/wiki/310_helix "wiki" is_a: SO:0001116 ! right_handed_peptide_helix [Term] id: SO:0001120 name: polypeptide_nest_motif alt_id: BS:00223 def: "A motif of two consecutive residues with dihedral angles. Nest should not have Proline as any residue. Nests frequently occur as parts of other motifs such as Schellman loops." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "nest" RELATED BS [] synonym: "nest_motif" EXACT [] synonym: "polypeptide nest motif" RELATED [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001121 name: polypeptide_nest_left_right_motif alt_id: BS:00224 def: "A motif of two consecutive residues with dihedral angles: Residue(i): +20 degrees < phi < +140 degrees, -40 degrees < psi < +90 degrees. Residue(i+1): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "nest_left_right" EXACT [] synonym: "nest_lr" EXACT [] synonym: "polypeptide nest left right motif" EXACT [] is_a: SO:0001120 ! polypeptide_nest_motif [Term] id: SO:0001122 name: polypeptide_nest_right_left_motif alt_id: BS:00225 def: "A motif of two consecutive residues with dihedral angles: Residue(i): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees. Residue(i+1): +20 degrees < phi < +140 degrees, -40 degrees < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "nest_right_left" EXACT [] synonym: "nest_rl" EXACT [] synonym: "polypeptide nest right left motif" EXACT [] is_a: SO:0001120 ! polypeptide_nest_motif [Term] id: SO:0001123 name: schellmann_loop alt_id: BS:00226 def: "A motif of six or seven consecutive residues that contains two H-bonds." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "paperclip" RELATED BS [] synonym: "paperclip loop" RELATED [] synonym: "schellmann loop" EXACT [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001124 name: schellmann_loop_seven alt_id: BS:00228 def: "Wild type: A motif of seven consecutive residues that contains two H-bonds in which: the main-chain CO of residue(i) is H-bonded to the main-chain NH of residue(i+6), the main-chain CO of residue(i+1) is H-bonded to the main-chain NH of residue(i+5)." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "schellmann loop seven" EXACT [] synonym: "seven-residue schellmann loop" EXACT [] is_a: SO:0001123 ! schellmann_loop [Term] id: SO:0001125 name: schellmann_loop_six alt_id: BS:00227 def: "Common Type: A motif of six consecutive residues that contains two H-bonds in which: the main-chain CO of residue(i) is H-bonded to the main-chain NH of residue(i+5) the main-chain CO of residue(i+1) is H-bonded to the main-chain NH of residue(i+4)." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "schellmann loop six" EXACT [] synonym: "six-residue schellmann loop" EXACT [] is_a: SO:0001123 ! schellmann_loop [Term] id: SO:0001126 name: serine_threonine_motif alt_id: BS:00229 def: "A motif of five consecutive residues and two hydrogen bonds in which: residue(i) is Serine (S) or Threonine (T), the side-chain O of residue(i) is H-bonded to the main-chain NH of residue(i+2) or (i+3) , the main-chain CO group of residue(i) is H-bonded to the main-chain NH of residue(i+3) or (i+4)." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "serine/threonine motif" EXACT [] synonym: "st motif" EXACT [] synonym: "st_motif" EXACT [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001127 name: serine_threonine_staple_motif alt_id: BS:00230 def: "A motif of four or five consecutive residues and one H-bond in which: residue(i) is Serine (S) or Threonine (T), the side-chain OH of residue(i) is H-bonded to the main-chain CO of residue(i3) or (i4), Phi angles of residues(i1), (i2) and (i3) are negative." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "serine threonine staple motif" EXACT [] synonym: "st_staple" EXACT [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001128 name: polypeptide_turn_motif alt_id: BS:00148 def: "A reversal in the direction of the backbone of a protein that is stabilized by hydrogen bond between backbone NH and CO groups, involving no more than 4 amino acid residues." [EBIBS:GAR, uniprot:feature_type] comment: Range. subset: biosapiens synonym: "turn" RELATED BS [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001129 name: asx_turn_left_handed_type_one alt_id: BS:00206 def: "Left handed type I (dihedral angles):- Residue(i): -140 degrees < chi (1) -120 degrees < -20 degrees, -90 degrees < psi +120 degrees < +40 degrees. Residue(i+1): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx turn left handed type one" EXACT [] synonym: "asx_turn_il" RELATED [] is_a: SO:0000912 ! asx_turn [Term] id: SO:0001130 name: asx_turn_left_handed_type_two alt_id: BS:00204 def: "Left handed type II (dihedral angles):- Residue(i): -140 degrees < chi (1) -120 degrees < -20 degrees, +80 degrees < psi +120 degrees < +180 degrees. Residue(i+1): +20 degrees < phi < +140 degrees, -40 degrees < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx turn left handed type two" EXACT [] synonym: "asx_turn_iil" EXACT [] is_a: SO:0000912 ! asx_turn [Term] id: SO:0001131 name: asx_turn_right_handed_type_two alt_id: BS:00205 def: "Right handed type II (dihedral angles):- Residue(i): -140 degrees < chi (1) -120 degrees < -20 degrees, +80 degrees < psi +120 degrees < +180 degrees. Residue(i+1): +20 degrees < phi < +140 degrees, -40 degrees < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx turn right handed type two" EXACT [] synonym: "asx_turn_iir" EXACT [] is_a: SO:0000912 ! asx_turn [Term] id: SO:0001132 name: asx_turn_right_handed_type_one alt_id: BS:00207 def: "Right handed type I (dihedral angles):- Residue(i): -140 degrees < chi (1) -120 degrees < -20 degrees, -90 degrees < psi +120 degrees < +40 degrees. Residue(i+1): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx turn type right handed type one" EXACT [] synonym: "asx_turn_ir" EXACT [] is_a: SO:0000912 ! asx_turn [Term] id: SO:0001133 name: beta_turn alt_id: BS:00212 def: "A motif of four consecutive residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth. It is characterized by the dihedral angles of the second and third residues, which are the basis for sub-categorization." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta turn" EXACT [] is_a: SO:0001128 ! polypeptide_turn_motif [Term] id: SO:0001134 name: beta_turn_left_handed_type_one alt_id: BS:00215 def: "Left handed type I:A motif of four consecutive residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth. It is characterized by the dihedral angles:- Residue(i+1): -140 degrees > phi > -20 degrees, -90 degrees > psi > +40 degrees. Residue(i+2): -140 degrees > phi > -20 degrees, -90 degrees > psi > +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta turn left handed type one" EXACT [] synonym: "beta_turn_il" EXACT [] synonym: "type I' beta turn" EXACT [] synonym: "type I' turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001135 name: beta_turn_left_handed_type_two alt_id: BS:00213 def: "Left handed type II: A motif of four consecutive residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth. It is characterized by the dihedral angles: Residue(i+1): -140 degrees > phi > -20 degrees, +80 degrees > psi > +180 degrees. Residue(i+2): +20 degrees > phi > +140 degrees, -40 degrees > psi > +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta turn left handed type two" EXACT [] synonym: "beta_turn_iil" EXACT [] synonym: "type II' beta turn" EXACT [] synonym: "type II' turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001136 name: beta_turn_right_handed_type_one alt_id: BS:00216 def: "Right handed type I:A motif of four consecutive residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth. It is characterized by the dihedral angles: Residue(i+1): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees. Residue(i+2): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta turn right handed type one" EXACT [] synonym: "beta_turn_ir" EXACT [] synonym: "type I beta turn" EXACT [] synonym: "type I turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001137 name: beta_turn_right_handed_type_two alt_id: BS:00214 def: "Right handed type II:A motif of four consecutive residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth. It is characterized by the dihedral angles: Residue(i+1): -140 degrees < phi < -20 degrees, +80 degrees < psi < +180 degrees. Residue(i+2): +20 degrees < phi < +140 degrees, -40 degrees < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta turn right handed type two" EXACT [] synonym: "beta_turn_iir" EXACT [] synonym: "type II beta turn" EXACT [] synonym: "type II turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001138 name: gamma_turn alt_id: BS:00219 def: "Gamma turns, defined for 3 residues i,( i+1),( i+2) if a hydrogen bond exists between residues i and i+2 and the phi and psi angles of residue i+1 fall within 40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "gamma turn" EXACT [] is_a: SO:0001128 ! polypeptide_turn_motif [Term] id: SO:0001139 name: gamma_turn_classic alt_id: BS:00220 def: "Gamma turns, defined for 3 residues i, i+1, i+2 if a hydrogen bond exists between residues i and i+2 and the phi and psi angles of residue i+1 fall within 40 degrees: phi(i+1)=75.0 - psi(i+1)=-64.0." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "classic gamma turn" EXACT [] synonym: "gamma turn classic" EXACT [] is_a: SO:0001138 ! gamma_turn [Term] id: SO:0001140 name: gamma_turn_inverse alt_id: BS:00221 def: "Gamma turns, defined for 3 residues i, i+1, i+2 if a hydrogen bond exists between residues i and i+2 and the phi and psi angles of residue i+1 fall within 40 degrees: phi(i+1)=-79.0 - psi(i+1)=69.0." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "gamma turn inverse" EXACT [] is_a: SO:0001138 ! gamma_turn [Term] id: SO:0001141 name: serine_threonine_turn alt_id: BS:00231 def: "A motif of three consecutive residues and one H-bond in which: residue(i) is Serine (S) or Threonine (T), the side-chain O of residue(i) is H-bonded to the main-chain NH of residue(i+2)." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "serine/threonine turn" EXACT [] synonym: "st_turn" EXACT [] is_a: SO:0001128 ! polypeptide_turn_motif [Term] id: SO:0001142 name: st_turn_left_handed_type_one alt_id: BS:00234 def: "The peptide twists in an anticlockwise, left handed manner. The dihedral angles for this turn are: Residue(i): -140 degrees < chi(1) -120 degrees < -20 degrees, -90 degrees psi +120 degrees < +40 degrees, residue(i+1): -140 degrees < phi < -20 degrees, -90 < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "st turn left handed type one" EXACT [] synonym: "st_turn_il" EXACT [] is_a: SO:0001141 ! serine_threonine_turn [Term] id: SO:0001143 name: st_turn_left_handed_type_two alt_id: BS:00232 def: "The peptide twists in an anticlockwise, left handed manner. The dihedral angles for this turn are: Residue(i): -140 degrees < chi(1) -120 degrees < -20 degrees, +80 degrees psi +120 degrees < +180 degrees, residue(i+1): +20 degrees < phi < +140 degrees, -40 < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "st turn left handed type two" EXACT [] synonym: "st_turn_iil" EXACT [] is_a: SO:0001141 ! serine_threonine_turn [Term] id: SO:0001144 name: st_turn_right_handed_type_one alt_id: BS:00235 def: "The peptide twists in an clockwise, right handed manner. The dihedral angles for this turn are: Residue(i): -140 degrees < chi(1) -120 degrees < -20 degrees, -90 degrees psi +120 degrees < +40 degrees, residue(i+1): -140 degrees < phi < -20 degrees, -90 < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "st turn right handed type one" EXACT [] synonym: "st_turn_ir" EXACT [] is_a: SO:0001141 ! serine_threonine_turn [Term] id: SO:0001145 name: st_turn_right_handed_type_two alt_id: BS:00233 def: "The peptide twists in an clockwise, right handed manner. The dihedral angles for this turn are: Residue(i): -140 degrees < chi(1) -120 degrees < -20 degrees, +80 degrees psi +120 degrees < +180 degrees, residue(i+1): +20 degrees < phi < +140 degrees, -40 < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "st turn right handed type two" EXACT [] synonym: "st_turn_iir" EXACT [] is_a: SO:0001141 ! serine_threonine_turn [Term] id: SO:0001146 name: polypeptide_variation_site alt_id: BS:00336 def: "A site of sequence variation (alteration). Alternative sequence due to naturally occuring events such as polymorphisms and altermatve splicing or experimental methods such as site directed mutagenesis." [EBIBS:GAR, SO:ke] comment: For example, was a substitution natural or mutated as part of an experiment? This term is added to merge the biosapiens term sequence_variations. subset: biosapiens synonym: "sequence_variations" EXACT [] is_a: SO:0000839 ! polypeptide_region [Term] id: SO:0001147 name: natural_variant_site alt_id: BS:00071 def: "Describes the natural sequence variants due to polymorphisms, disease-associated mutations, RNA editing and variations between strains, isolates or cultivars." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "natural_variant" BROAD [] synonym: "sequence variation" BROAD [] synonym: "variant" BROAD [uniprot:feature_type] is_a: SO:0001146 ! polypeptide_variation_site [Term] id: SO:0001148 name: mutated_variant_site alt_id: BS:00036 def: "Site which has been experimentally altered." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "mutagen" EXACT BS [uniprot:feature_type] synonym: "mutagenesis" EXACT [] synonym: "mutated_site" EXACT [] is_a: SO:0001146 ! polypeptide_variation_site [Term] id: SO:0001149 name: alternate_sequence_site alt_id: BS:00073 alt_id: SO:0001065 def: "Description of sequence variants produced by alternative splicing, alternative promoter usage, alternative initiation and ribosomal frameshifting." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "alternative_sequence" EXACT [] synonym: "isoform" NARROW [] synonym: "sequence variation" NARROW [] synonym: "var_seq" EXACT [uniprot:feature_type] synonym: "varsplic" NARROW [] is_a: SO:0001146 ! polypeptide_variation_site [Term] id: SO:0001150 name: beta_turn_type_six def: "A motif of four consecutive peptide resides of type VIa or type VIb and where the i+2 residue is cis-proline." [SO:cb] subset: biosapiens synonym: "beta turn type six" EXACT [] synonym: "cis-proline loop" EXACT [] synonym: "type VI beta turn" EXACT [] synonym: "type VI turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001151 name: beta_turn_type_six_a def: "A motif of four consecutive peptide residues, of which the i+2 residue is proline, and that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth and is characterized by the dihedral angles: Residue(i+1): phi ~ -60 degrees, psi ~ 120 degrees. Residue(i+2): phi ~ -90 degrees, psi ~ 0 degrees." [PMID:2371257, SO:cb] subset: biosapiens synonym: "beta turn type six a" EXACT [] synonym: "type VIa beta turn" EXACT [] synonym: "type VIa turn" EXACT [] is_a: SO:0001150 ! beta_turn_type_six [Term] id: SO:0001152 name: beta_turn_type_six_a_one subset: biosapiens synonym: "beta turn type six a one" EXACT [] synonym: "type VIa1 beta turn" EXACT [] synonym: "type VIa1 turn" EXACT [] is_a: SO:0001151 ! beta_turn_type_six_a [Term] id: SO:0001153 name: beta_turn_type_six_a_two subset: biosapiens synonym: "beta turn type six a two" EXACT [] synonym: "type VIa2 beta turn" EXACT [] synonym: "type VIa2 turn" EXACT [] is_a: SO:0001151 ! beta_turn_type_six_a [Term] id: SO:0001154 name: beta_turn_type_six_b def: "A motif of four consecutive peptide residues, of which the i+2 residue is proline, and that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth and is characterized by the dihedral angles: Residue(i+1): phi ~ -120 degrees, psi ~ 120 degrees. Residue(i+2): phi ~ -60 degrees, psi ~ 0 degrees." [PMID:2371257, SO:cb] subset: biosapiens synonym: "beta turn type six b" EXACT [] synonym: "type VIb beta turn" EXACT [] synonym: "type VIb turn" EXACT [] is_a: SO:0001150 ! beta_turn_type_six [Term] id: SO:0001155 name: beta_turn_type_eight def: "A motif of four consecutive peptide residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth and is characterized by the dihedral angles: Residue(i+1): phi ~ -60 degrees, psi ~ -30 degrees. Residue(i+2): phi ~ -120 degrees, psi ~ 120 degrees." [PMID:2371257, SO:cb] subset: biosapiens synonym: "beta turn type eight" EXACT [] synonym: "type VIII beta turn" EXACT [] synonym: "type VIII turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001156 name: DRE_motif def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between -10 and -60 relative to the TSS. Consensus sequence is WATCGATW." [PMID:12537576] comment: This consensus sequence was identified computationally using the MEME algorithm within core promoter sequences from -60 to +40, with an E value of 1.7e-183. Tends to co-occur with Motif 7. Tends to not occur with DPE motif (SO:0000015) or motif 10. synonym: "DRE motif" EXACT [] synonym: "NDM4" EXACT [] synonym: "WATCGATW_motif" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001157 name: DMv4_motif def: "A sequence element characteristic of some RNA polymerase II promoters, located immediately upstream of some TATA box elements with respect to the TSS (+1). Consensus sequence is YGGTCACACTR. Marked spatial preference within core promoter; tend to occur near the TSS, although not as tightly as INR (SO:0000014)." [PMID:16827941:12537576] synonym: "directional motif v4" EXACT [] synonym: "DMv4" EXACT [] synonym: "DMv4 motif" EXACT [] synonym: "motif 1 element" EXACT [] synonym: "promoter motif 1" EXACT [] synonym: "YGGTCACATR" NARROW [] is_a: SO:0001659 ! promoter_element [Term] id: SO:0001158 name: E_box_motif def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between -60 and +1 relative to the TSS. Consensus sequence is AWCAGCTGWT. Tends to co-occur with DMv2 (SO:0001161). Tends to not occur with DPE motif (SO:0000015)." [PMID:12537576:16827941] synonym: "AWCAGCTGWT" NARROW [] synonym: "E box motif" EXACT [] synonym: "generic E box motif" EXACT [] synonym: "NDM5" RELATED [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001159 name: DMv5_motif def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between -50 and -10 relative to the TSS. Consensus sequence is KTYRGTATWTTT. Tends to co-occur with DMv4 (SO:0001157) . Tends to not occur with DPE motif (SO:0000015) or MTE (SO:0001162)." [PMID:12537576:16827941] synonym: "directional motif v5" EXACT [] synonym: "DMv5" EXACT [] synonym: "DMv5 motif" EXACT [] synonym: "KTYRGTATWTTT" NARROW [] synonym: "promoter motif 6" RELATED [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001160 name: DMv3_motif def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between -30 and +15 relative to the TSS. Consensus sequence is KNNCAKCNCTRNY. Tends to co-occur with DMv2 (SO:0001161). Tends to not occur with DPE motif (SO:0000015) or MTE (0001162)." [PMID:12537576:16827941] synonym: "directional motif v3" EXACT [] synonym: "DMv3" EXACT [] synonym: "DMv3 motif" EXACT [] synonym: "KNNCAKCNCTRNY" NARROW [] synonym: "promoter motif 7" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001161 name: DMv2_motif def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between -60 and -45 relative to the TSS. Consensus sequence is MKSYGGCARCGSYSS. Tends to co-occur with DMv3 (SO:0001160). Tends to not occur with DPE motif (SO:0000015) or MTE (SO:0001162)." [PMID:12537576:16827941] synonym: "directional motif v2" EXACT [] synonym: "DMv2" EXACT [] synonym: "DMv2 motif" EXACT [] synonym: "MKSYGGCARCGSYSS" NARROW [] synonym: "promoter motif 8" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001162 name: MTE def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between +20 and +30 relative to the TSS. Consensus sequence is CSARCSSAACGS. Tends to co-occur with INR motif (SO:0000014). Tends to not occur with DPE motif (SO:0000015) or DMv5 (SO:0001159)." [PMID:12537576:15231738, PMID:16858867] synonym: "CSARCSSAACGS" NARROW [] synonym: "motif ten element" EXACT [] synonym: "motif_ten_element" EXACT [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0001669 ! RNApol_II_core_promoter [Term] id: SO:0001163 name: INR1_motif def: "A promoter motif with consensus sequence TCATTCG." [PMID:16827941] synonym: "directional motif p3" EXACT [] synonym: "directional promoter motif 3" EXACT [] synonym: "DMp3" EXACT [] synonym: "INR1 motif" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001164 name: DPE1_motif def: "A promoter motif with consensus sequence CGGACGT." [PMID:16827941] synonym: "directional motif 5" EXACT [] synonym: "directional promoter motif 5" RELATED [] synonym: "DMp5" EXACT [] synonym: "DPE1 motif" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001165 name: DMv1_motif def: "A promoter motif with consensus sequence CARCCCT." [PMID:16827941] synonym: "directional promoter motif v1" RELATED [] synonym: "DMv1" RELATED [] synonym: "DMv1 motif" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001166 name: GAGA_motif def: "A non directional promoter motif with consensus sequence GAGAGCG." [PMID:16827941] synonym: "GAGA" EXACT [] synonym: "GAGA motif" EXACT [] synonym: "NDM1" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001167 name: NDM2_motif def: "A non directional promoter motif with consensus CGMYGYCR." [PMID:16827941] synonym: "NDM2" EXACT [] synonym: "NDM2 motif" EXACT [] synonym: "non directional promoter motif 2" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001168 name: NDM3_motif def: "A non directional promoter motif with consensus sequence GAAAGCT." [PMID:16827941] synonym: "NDM3" EXACT [] synonym: "NDM3 motif" EXACT [] synonym: "non directional motif 3" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001169 name: ds_RNA_viral_sequence def: "A ds_RNA_viral_sequence is a viral_sequence that is the sequence of a virus that exists as double stranded RNA." [SO:ke] synonym: "double stranded RNA virus sequence" EXACT [] synonym: "ds RNA viral sequence" EXACT [] is_a: SO:0001041 ! viral_sequence [Term] id: SO:0001170 name: polinton def: "A kind of DNA transposon that populates the genomes of protists, fungi, and animals, characterized by a unique set of proteins necessary for their transposition, including a protein-primed DNA polymerase B, retroviral integrase, cysteine protease, and ATPase. Polintons are characterized by 6-bp target site duplications, terminal-inverted repeats that are several hundred nucleotides long, and 5'-AG and TC-3' termini. Polintons exist as autonomous and nonautonomous elements." [PMID:16537396] synonym: "maverick element" RELATED [] is_a: SO:0000208 ! terminal_inverted_repeat_element [Term] id: SO:0001171 name: rRNA_21S def: "A component of the large ribosomal subunit in mitochondrial rRNA." [RSC:cb] synonym: "21S LSU rRNA" EXACT [] synonym: "21S ribosomal RNA" EXACT [] synonym: "21S rRNA" EXACT [] synonym: "rRNA 21S" EXACT [] is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0001172 name: tRNA_region def: "A region of a tRNA." [RSC:cb] synonym: "tRNA region" EXACT [] is_a: SO:0000834 ! mature_transcript_region relationship: part_of SO:0000253 ! tRNA [Term] id: SO:0001173 name: anticodon_loop def: "A sequence of seven nucleotide bases in tRNA which contains the anticodon. It has the sequence 5'-pyrimidine-purine-anticodon-modified purine-any base-3." [ISBN:0716719207] synonym: "anti-codon loop" EXACT [] synonym: "anticodon loop" EXACT [] is_a: SO:0001172 ! tRNA_region [Term] id: SO:0001174 name: anticodon def: "A sequence of three nucleotide bases in tRNA which recognizes a codon in mRNA." [RSC:cb] synonym: "anti-codon" EXACT [] xref: http://en.wikipedia.org/wiki/Anticodon "wiki" is_a: SO:0001172 ! tRNA_region relationship: part_of SO:0001173 ! anticodon_loop [Term] id: SO:0001175 name: CCA_tail def: "Base sequence at the 3' end of a tRNA. The 3'-hydroxyl group on the terminal adenosine is the attachment point for the amino acid." [ISBN:0716719207] synonym: "CCA sequence" EXACT [] synonym: "CCA tail" EXACT [] is_a: SO:0001172 ! tRNA_region [Term] id: SO:0001176 name: DHU_loop def: "Non-base-paired sequence of nucleotide bases in tRNA. It contains several dihydrouracil residues." [ISBN:071671920] synonym: "D loop" RELATED [] synonym: "DHU loop" EXACT [] is_a: SO:0001172 ! tRNA_region [Term] id: SO:0001177 name: T_loop def: "Non-base-paired sequence of three nucleotide bases in tRNA. It has sequence T-Psi-C." [ISBN:0716719207] synonym: "T loop" EXACT [] synonym: "TpsiC loop" EXACT [] is_a: SO:0001172 ! tRNA_region [Term] id: SO:0001178 name: pyrrolysine_tRNA_primary_transcript def: "A primary transcript encoding pyrrolysyl tRNA (SO:0000766)." [RSC:cb] synonym: "pyrrolysine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0001179 name: U3_snoRNA def: "U3 snoRNA is a member of the box C/D class of small nucleolar RNAs. The U3 snoRNA secondary structure is characterised by a small 5' domain (with boxes A and A'), and a larger 3' domain (with boxes B, C, C', and D), the two domains being linked by a single-stranded hinge. Boxes B and C form the B/C motif, which appears to be exclusive to U3 snoRNAs, and boxes C' and D form the C'/D motif. The latter is functionally similar to the C/D motifs found in other snoRNAs. The 5' domain and the hinge region act as a pre-rRNA-binding domain. The 3' domain has conserved protein-binding sites. Both the box B/C and box C'/D motifs are sufficient for nuclear retention of U3 snoRNA. The box C'/D motif is also necessary for nucleolar localization, stability and hypermethylation of U3 snoRNA. Both box B/C and C'/D motifs are involved in specific protein interactions and are necessary for the rRNA processing functions of U3 snoRNA." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00012] comment: The definition is most of the old definition for snoRNA (SO:0000275). synonym: "small nucleolar RNA U3" EXACT [] synonym: "snoRNA U3" EXACT [] synonym: "U3 small nucleolar RNA" EXACT [] synonym: "U3 snoRNA" EXACT [] xref: http://en.wikipedia.org/wiki/Small_nucleolar_RNA_U3 "wiki" is_a: SO:0000593 ! C_D_box_snoRNA [Term] id: SO:0001180 name: AU_rich_element def: "A cis-acting element found in the 3' UTR of some mRNA which is rich in AUUUA pentamers. Messenger RNAs bearing multiple AU-rich elements are often unstable." [PMID:7892223] synonym: "ARE" RELATED [] synonym: "AU rich element" EXACT [] synonym: "AU-rich element" EXACT [] xref: http://en.wikipedia.org/wiki/AU-rich_element "wiki" is_a: SO:0000837 ! UTR_region relationship: part_of SO:0000205 ! three_prime_UTR [Term] id: SO:0001181 name: Bruno_response_element def: "A cis-acting element found in the 3' UTR of some mRNA which is bound by the Drosophila Bruno protein and its homologs." [PMID:10893231] comment: Not to be confused with BRE_motif (SO:0000016), which binds transcription factor II B. synonym: "BRE" RELATED [] synonym: "Bruno response element" EXACT [] is_a: SO:0000837 ! UTR_region relationship: part_of SO:0000205 ! three_prime_UTR [Term] id: SO:0001182 name: iron_responsive_element def: "A regulatory sequence found in the 5' and 3' UTRs of many mRNAs which encode iron-binding proteins. It has a hairpin structure and is recognized by trans-acting proteins known as iron-regulatory proteins." [PMID:3198610, PMID:8710843] synonym: "IRE" EXACT [] synonym: "iron responsive element" EXACT [] xref: http://en.wikipedia.org/wiki/Iron_responsive_element "wiki" is_a: SO:0000837 ! UTR_region relationship: part_of SO:0000203 ! UTR [Term] id: SO:0001183 name: morpholino_backbone def: "An attribute describing a sequence composed of nucleobases bound to a morpholino backbone. A morpholino backbone consists of morpholine (CHEBI:34856) rings connected by phosphorodiamidate linkages." [RSC:cb] comment: Do not use this for feature annotation. Use morpholino_oligo (SO:0000034) instead. synonym: "morpholino backbone" EXACT [] xref: http://en.wikipedia.org/wiki/Morpholino "wiki" is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0001184 name: PNA def: "An attribute describing a sequence composed of peptide nucleic acid (CHEBI:48021), a chemical consisting of nucleobases bound to a backbone composed of repeating N-(2-aminoethyl)-glycine units linked by peptide bonds. The purine and pyrimidine bases are linked to the backbone by methylene carbonyl bonds." [RSC:cb] comment: Do not use this term for feature annotation. Use PNA_oligo (SO:0001011) instead. synonym: "peptide nucleic acid" RELATED [] is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0001185 name: enzymatic def: "An attribute describing the sequence of a transcript that has catalytic activity with or without an associated ribonucleoprotein." [RSC:cb] comment: Do not use this for feature annotation. Use enzymatic_RNA (SO:0000372) instead. is_a: SO:0000733 ! feature_attribute [Term] id: SO:0001186 name: ribozymic def: "An attribute describing the sequence of a transcript that has catalytic activity even without an associated ribonucleoprotein." [RSC:cb] comment: Do not use this for feature annotation. Use ribozyme (SO:0000374) instead. is_a: SO:0001185 ! enzymatic [Term] id: SO:0001187 name: pseudouridylation_guide_snoRNA def: "A snoRNA that specifies the site of pseudouridylation in an RNA molecule by base pairing with a short sequence around the target residue." [GOC:mah, PMID:12457565] comment: Has RNA pseudouridylation guide activity (GO:0030558). synonym: "pseudouridylation guide snoRNA" EXACT [] is_a: SO:0000594 ! H_ACA_box_snoRNA [Term] id: SO:0001188 name: LNA def: "An attribute describing a sequence consisting of nucleobases attached to a repeating unit made of 'locked' deoxyribose rings connected to a phosphate backbone. The deoxyribose unit's conformation is 'locked' by a 2'-C,4'-C-oxymethylene link." [CHEBI:48010] comment: Do not use this term for feature annotation. Use LNA_oligo (SO:0001189) instead. is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0001189 name: LNA_oligo def: "An oligo composed of LNA residues." [RSC:cb] synonym: "LNA oligo" EXACT [] synonym: "locked nucleic acid" EXACT [] xref: http://en.wikipedia.org/wiki/Locked_nucleic_acid "wiki" is_a: SO:0001247 ! synthetic_oligo intersection_of: SO:0001247 ! synthetic_oligo intersection_of: has_quality SO:0001188 ! LNA relationship: has_quality SO:0001188 ! LNA [Term] id: SO:0001190 name: TNA def: "An attribute describing a sequence consisting of nucleobases attached to a repeating unit made of threose rings connected to a phosphate backbone." [CHEBI:48019] comment: Do not use this term for feature annotation. Use TNA_oligo (SO:0001191) instead. is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0001191 name: TNA_oligo def: "An oligo composed of TNA residues." [RSC:cb] synonym: "threose nucleic acid" EXACT [] synonym: "TNA oligo" EXACT [] xref: http://en.wikipedia.org/wiki/Threose_nucleic_acid "wiki" is_a: SO:0001247 ! synthetic_oligo intersection_of: SO:0001247 ! synthetic_oligo intersection_of: has_quality SO:0001190 ! TNA relationship: has_quality SO:0001190 ! TNA [Term] id: SO:0001192 name: GNA def: "An attribute describing a sequence consisting of nucleobases attached to a repeating unit made of an acyclic three-carbon propylene glycol connected to a phosphate backbone. It has two enantiomeric forms, (R)-GNA and (S)-GNA." [CHEBI:48015] comment: Do not use this term for feature annotation. Use GNA_oligo (SO:0001192) instead. is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0001193 name: GNA_oligo def: "An oligo composed of GNA residues." [RSC:cb] synonym: "glycerol nucleic acid" EXACT [] synonym: "glycol nucleic acid" EXACT [] synonym: "GNA oligo" EXACT [] xref: http://en.wikipedia.org/wiki/Glycerol_nucleic_acid "wiki" is_a: SO:0001247 ! synthetic_oligo intersection_of: SO:0001247 ! synthetic_oligo intersection_of: has_quality SO:0001192 ! GNA relationship: has_quality SO:0001192 ! GNA [Term] id: SO:0001194 name: R_GNA def: "An attribute describing a GNA sequence in the (R)-GNA enantiomer." [CHEBI:48016] comment: Do not use this term for feature annotation. Use R_GNA_oligo (SO:0001195) instead. synonym: "R GNA" EXACT [] is_a: SO:0001192 ! GNA [Term] id: SO:0001195 name: R_GNA_oligo def: "An oligo composed of (R)-GNA residues." [RSC:cb] synonym: "(R)-glycerol nucleic acid" EXACT [] synonym: "(R)-glycol nucleic acid" EXACT [] synonym: "R GNA oligo" EXACT [] is_a: SO:0001193 ! GNA_oligo intersection_of: SO:0001193 ! GNA_oligo intersection_of: has_quality SO:0001194 ! R_GNA relationship: has_quality SO:0001194 ! R_GNA [Term] id: SO:0001196 name: S_GNA def: "An attribute describing a GNA sequence in the (S)-GNA enantiomer." [CHEBI:48017] comment: Do not use this term for feature annotation. Use S_GNA_oligo (SO:0001197) instead. synonym: "S GNA" EXACT [] is_a: SO:0001192 ! GNA [Term] id: SO:0001197 name: S_GNA_oligo def: "An oligo composed of (S)-GNA residues." [RSC:cb] synonym: "(S)-glycerol nucleic acid" EXACT [] synonym: "(S)-glycol nucleic acid" EXACT [] synonym: "S GNA oligo" EXACT [] is_a: SO:0001193 ! GNA_oligo intersection_of: SO:0001193 ! GNA_oligo intersection_of: has_quality SO:0001196 ! S_GNA relationship: has_quality SO:0001196 ! S_GNA [Term] id: SO:0001198 name: ds_DNA_viral_sequence def: "A ds_DNA_viral_sequence is a viral_sequence that is the sequence of a virus that exists as double stranded DNA." [SO:ke] synonym: "double stranded DNA virus" EXACT [] synonym: "ds DNA viral sequence" EXACT [] is_a: SO:0001041 ! viral_sequence [Term] id: SO:0001199 name: ss_RNA_viral_sequence def: "A ss_RNA_viral_sequence is a viral_sequence that is the sequence of a virus that exists as single stranded RNA." [SO:ke] synonym: "single strand RNA virus" EXACT [] synonym: "ss RNA viral sequence" EXACT [] is_a: SO:0001041 ! viral_sequence [Term] id: SO:0001200 name: negative_sense_ssRNA_viral_sequence def: "A negative_sense_RNA_viral_sequence is a ss_RNA_viral_sequence that is the sequence of a single stranded RNA virus that is complementary to mRNA and must be converted to positive sense RNA by RNA polymerase before translation." [SO:ke] synonym: "negative sense single stranded RNA virus" RELATED [] synonym: "negative sense ssRNA viral sequence" EXACT [] is_a: SO:0001199 ! ss_RNA_viral_sequence [Term] id: SO:0001201 name: positive_sense_ssRNA_viral_sequence def: "A positive_sense_RNA_viral_sequence is a ss_RNA_viral_sequence that is the sequence of a single stranded RNA virus that can be immediately translated by the host." [SO:ke] synonym: "positive sense single stranded RNA virus" RELATED [] synonym: "positive sense ssRNA viral sequence" EXACT [] is_a: SO:0001199 ! ss_RNA_viral_sequence [Term] id: SO:0001202 name: ambisense_ssRNA_viral_sequence def: "A ambisense_RNA_virus is a ss_RNA_viral_sequence that is the sequence of a single stranded RNA virus with both messenger and anti messenger polarity." [SO:ke] synonym: "ambisense single stranded RNA virus" EXACT [] synonym: "ambisense ssRNA viral sequence" EXACT [] is_a: SO:0001199 ! ss_RNA_viral_sequence [Term] id: SO:0001203 name: RNA_polymerase_promoter def: "A region (DNA) to which RNA polymerase binds, to begin transcription." [xenbase:jb] synonym: "RNA polymerase promoter" EXACT [] is_a: SO:0000167 ! promoter [Term] id: SO:0001204 name: Phage_RNA_Polymerase_Promoter def: "A region (DNA) to which Bacteriophage RNA polymerase binds, to begin transcription." [xenbase:jb] synonym: "Phage RNA Polymerase Promoter" EXACT [] is_a: SO:0001203 ! RNA_polymerase_promoter [Term] id: SO:0001205 name: SP6_RNA_Polymerase_Promoter def: "A region (DNA) to which the SP6 RNA polymerase binds, to begin transcription." [xenbase:jb] synonym: "SP6 RNA Polymerase Promoter" EXACT [] is_a: SO:0001204 ! Phage_RNA_Polymerase_Promoter [Term] id: SO:0001206 name: T3_RNA_Polymerase_Promoter def: "A DNA sequence to which the T3 RNA polymerase binds, to begin transcription." [xenbase:jb] synonym: "T3 RNA Polymerase Promoter" EXACT [] is_a: SO:0001204 ! Phage_RNA_Polymerase_Promoter [Term] id: SO:0001207 name: T7_RNA_Polymerase_Promoter def: "A region (DNA) to which the T7 RNA polymerase binds, to begin transcription." [xenbase:jb] synonym: "T7 RNA Polymerase Promoter" EXACT [] is_a: SO:0001204 ! Phage_RNA_Polymerase_Promoter [Term] id: SO:0001208 name: five_prime_EST def: "An EST read from the 5' end of a transcript that usually codes for a protein. These regions tend to be conserved across species and do not change much within a gene family." [http://www.ncbi.nlm.nih.gov/About/primer/est.html] synonym: "5' EST" EXACT [] synonym: "five prime EST" EXACT [] is_a: SO:0000345 ! EST [Term] id: SO:0001209 name: three_prime_EST def: "An EST read from the 3' end of a transcript. They are more likely to fall within non-coding, or untranslated regions(UTRs)." [http://www.ncbi.nlm.nih.gov/About/primer/est.html] synonym: "3' EST" EXACT [] synonym: "three prime EST" EXACT [] is_a: SO:0000345 ! EST [Term] id: SO:0001210 name: translational_frameshift def: "The region of mRNA (not divisible by 3 bases) that is skipped during the process of translational frameshifting (GO:0006452), causing the reading frame to be different." [SO:ke] synonym: "ribosomal frameshift" EXACT [] synonym: "translational frameshift" EXACT [] xref: http://en.wikipedia.org/wiki/Translational_frameshift "wiki" is_a: SO:0000836 ! mRNA_region [Term] id: SO:0001211 name: plus_1_translational_frameshift def: "The region of mRNA 1 base long that is skipped during the process of translational frameshifting (GO:0006452), causing the reading frame to be different." [SO:ke] synonym: "plus 1 ribosomal frameshift" EXACT [] synonym: "plus 1 translational frameshift" EXACT [] is_a: SO:0001210 ! translational_frameshift [Term] id: SO:0001212 name: plus_2_translational_frameshift def: "The region of mRNA 2 bases long that is skipped during the process of translational frameshifting (GO:0006452), causing the reading frame to be different." [SO:ke] synonym: "plus 2 ribosomal frameshift" EXACT [] synonym: "plus 2 translational frameshift" EXACT [] is_a: SO:0001210 ! translational_frameshift [Term] id: SO:0001213 name: group_III_intron def: "Group III introns are introns found in the mRNA of the plastids of euglenoid protists. They are spliced by a two step transesterification with bulged adenosine as initiating nucleophile." [PMID:11377794] comment: GO:0000374. synonym: "group III intron" EXACT [] xref: http://en.wikipedia.org/wiki/Group_III_intron "wiki" is_a: SO:0000588 ! autocatalytically_spliced_intron [Term] id: SO:0001214 name: noncoding_region_of_exon def: "The maximal intersection of exon and UTR." [SO:ke] comment: An exon either containing but not starting with a start codon or containing but not ending with a stop codon will be partially coding and partially non coding. subset: SOFA synonym: "noncoding region of exon" EXACT [] is_a: SO:0000852 ! exon_region [Term] id: SO:0001215 name: coding_region_of_exon def: "The region of an exon that encodes for protein sequence." [SO:ke] comment: An exon containing either a start or stop codon will be partially coding and partially non coding. subset: SOFA synonym: "coding region of exon" EXACT [] is_a: SO:0000852 ! exon_region [Term] id: SO:0001216 name: endonuclease_spliced_intron def: "An intron that spliced via endonucleolytic cleavage and ligation rather than transesterification." [SO:ke] synonym: "endonuclease spliced intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0001217 name: protein_coding_gene synonym: "protein coding gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000010 ! protein_coding relationship: has_quality SO:0000010 ! protein_coding [Term] id: SO:0001218 name: transgenic_insertion def: "An insertion that derives from another organism, via the use of recombinant DNA technology." [SO:bm] synonym: "transgenic insertion" EXACT [] is_a: SO:0000667 ! insertion intersection_of: SO:0000667 ! insertion intersection_of: has_quality SO:0000781 ! transgenic relationship: has_quality SO:0000781 ! transgenic [Term] id: SO:0001219 name: retrogene is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000569 ! retrotransposed relationship: has_quality SO:0000569 ! retrotransposed [Term] id: SO:0001220 name: silenced_by_RNA_interference def: "An attribute describing an epigenetic process where a gene is inactivated by RNA interference." [RSC:cb] comment: RNA interference is GO:0016246. synonym: "silenced by RNA interference" EXACT [] is_a: SO:0000893 ! silenced [Term] id: SO:0001221 name: silenced_by_histone_modification def: "An attribute describing an epigenetic process where a gene is inactivated by histone modification." [RSC:cb] comment: Histone modification is GO:0016570. synonym: "silenced by histone modification" EXACT [] is_a: SO:0000893 ! silenced [Term] id: SO:0001222 name: silenced_by_histone_methylation def: "An attribute describing an epigenetic process where a gene is inactivated by histone methylation." [RSC:cb] comment: Histone methylation is GO:0016571. synonym: "silenced by histone methylation" EXACT [] is_a: SO:0001221 ! silenced_by_histone_modification [Term] id: SO:0001223 name: silenced_by_histone_deacetylation def: "An attribute describing an epigenetic process where a gene is inactivated by histone deacetylation." [RSC:cb] comment: Histone deacetylation is GO:0016573. synonym: "silenced by histone deacetylation" EXACT [] is_a: SO:0001221 ! silenced_by_histone_modification [Term] id: SO:0001224 name: gene_silenced_by_RNA_interference def: "A gene that is silenced by RNA interference." [SO:xp] synonym: "gene silenced by RNA interference" EXACT [] synonym: "RNA interference silenced gene" EXACT [] synonym: "RNAi silenced gene" EXACT [] is_a: SO:0000127 ! silenced_gene intersection_of: SO:0000127 ! silenced_gene intersection_of: has_quality SO:0001220 ! silenced_by_RNA_interference relationship: has_quality SO:0001220 ! silenced_by_RNA_interference [Term] id: SO:0001225 name: gene_silenced_by_histone_modification def: "A gene that is silenced by histone modification." [SO:xp] synonym: "gene silenced by histone modification" EXACT [] is_a: SO:0000127 ! silenced_gene intersection_of: SO:0000127 ! silenced_gene intersection_of: has_quality SO:0001221 ! silenced_by_histone_modification relationship: has_quality SO:0001221 ! silenced_by_histone_modification [Term] id: SO:0001226 name: gene_silenced_by_histone_methylation def: "A gene that is silenced by histone methylation." [SO:xp] synonym: "gene silenced by histone methylation" EXACT [] is_a: SO:0001225 ! gene_silenced_by_histone_modification intersection_of: SO:0001225 ! gene_silenced_by_histone_modification intersection_of: has_quality SO:0001222 ! silenced_by_histone_methylation relationship: has_quality SO:0001222 ! silenced_by_histone_methylation [Term] id: SO:0001227 name: gene_silenced_by_histone_deacetylation def: "A gene that is silenced by histone deacetylation." [SO:xp] synonym: "gene silenced by histone deacetylation" EXACT [] is_a: SO:0001225 ! gene_silenced_by_histone_modification intersection_of: SO:0001225 ! gene_silenced_by_histone_modification intersection_of: has_quality SO:0001223 ! silenced_by_histone_deacetylation relationship: has_quality SO:0001223 ! silenced_by_histone_deacetylation [Term] id: SO:0001228 name: dihydrouridine def: "A modified RNA base in which the 5,6-dihydrouracil is bound to the ribose ring." [RSC:cb] synonym: "D" EXACT RNAMOD [] xref: http://en.wikipedia.org/wiki/Dihydrouridine "wiki" xref: RNAMOD:051 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001229 name: pseudouridine def: "A modified RNA base in which the 5- position of the uracil is bound to the ribose ring instead of the 4- position." [RSC:cb] comment: The free molecule is CHEBI:17802. synonym: "Y" EXACT RNAMOD [] xref: http://en.wikipedia.org/wiki/Pseudouridine "wiki" xref: RNAMOD:050 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001230 name: inosine def: "A modified RNA base in which hypoxanthine is bound to the ribose ring." [http://library.med.utah.edu/RNAmods/, RSC:cb] comment: The free molecule is CHEBI:17596. synonym: "I" RELATED [] synonym: "RNAMOD:017" RELATED [] xref: http://en.wikipedia.org/wiki/Inosine "wiki" is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001231 name: seven_methylguanine def: "A modified RNA base in which guanine is methylated at the 7- position." [RSC:cb] comment: The free molecule is CHEBI:2274. synonym: "7-methylguanine" EXACT [] synonym: "seven methylguanine" EXACT [] is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001232 name: ribothymidine def: "A modified RNA base in which thymine is bound to the ribose ring." [RSC:cb] comment: The free molecule is CHEBI:30832. is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001233 name: methylinosine def: "A modified RNA base in which methylhypoxanthine is bound to the ribose ring." [RSC:cb] is_a: SO:0001274 ! modified_inosine [Term] id: SO:0001234 name: mobile def: "An attribute describing a feature that has either intra-genome or intracellular mobility." [RSC:cb] xref: http://en.wikipedia.org/wiki/Mobile "wiki" is_a: SO:0000733 ! feature_attribute [Term] id: SO:0001235 name: replicon def: "A region containing at least one unique origin of replication and a unique termination site." [ISBN:0716719207] subset: SOFA xref: http://en.wikipedia.org/wiki/Replicon_(genetics) "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0001236 name: base def: "A base is a sequence feature that corresponds to a single unit of a nucleotide polymer." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Nucleobase "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0001237 name: amino_acid def: "A sequence feature that corresponds to a single amino acid residue in a polypeptide." [RSC:cb] comment: Probably in the future this will cross reference to Chebi. synonym: "amino acid" EXACT [] xref: http://en.wikipedia.org/wiki/Amino_acid "wiki" is_a: SO:0001411 ! biological_region relationship: part_of SO:0000104 ! polypeptide [Term] id: SO:0001238 name: major_TSS synonym: "major transcription start site" EXACT [] synonym: "major TSS" EXACT [] is_a: SO:0000315 ! TSS [Term] id: SO:0001239 name: minor_TSS synonym: "minor TSS" EXACT [] is_a: SO:0000315 ! TSS [Term] id: SO:0001240 name: TSS_region def: "The region of a gene from the 5' most TSS to the 3' TSS." [BBOP:nw] synonym: "TSS region" EXACT [] is_a: SO:0000842 ! gene_component_region relationship: has_part SO:0000315 ! TSS [Term] id: SO:0001241 name: encodes_alternate_transcription_start_sites synonym: "encodes alternate transcription start sites" EXACT [] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0001243 name: miRNA_primary_transcript_region def: "A part of an miRNA primary_transcript." [SO:ke] synonym: "miRNA primary transcript region" EXACT [] is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0001244 name: pre_miRNA def: "The 60-70 nucleotide region remain after Drosha processing of the primary transcript, that folds back upon itself to form a hairpin sructure." [SO:ke] synonym: "pre-miRNA" EXACT [] is_a: SO:0001243 ! miRNA_primary_transcript_region relationship: part_of SO:0000647 ! miRNA_primary_transcript [Term] id: SO:0001245 name: miRNA_stem def: "The stem of the hairpin loop formed by folding of the pre-miRNA." [SO:ke] synonym: "miRNA stem" EXACT [] is_a: SO:0001243 ! miRNA_primary_transcript_region relationship: part_of SO:0001244 ! pre_miRNA [Term] id: SO:0001246 name: miRNA_loop def: "The loop of the hairpin loop formed by folding of the pre-miRNA." [SO:ke] synonym: "miRNA loop" EXACT [] is_a: SO:0001243 ! miRNA_primary_transcript_region relationship: part_of SO:0001244 ! pre_miRNA [Term] id: SO:0001247 name: synthetic_oligo def: "An oligo composed of synthetic nucleotides." [SO:ke] synonym: "synthetic oligo" EXACT [] is_a: SO:0000696 ! oligo [Term] id: SO:0001248 name: assembly def: "A region of the genome of known length that is composed by ordering and aligning two or more different regions." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Genome_assembly#Genome_assembly "wiki" is_a: SO:0001410 ! experimental_feature [Term] id: SO:0001249 name: fragment_assembly def: "A fragment assembly is a genome assembly that orders overlapping fragments of the genome based on landmark sequences. The base pair distance between the landmarks is known allowing additivity of lengths." [SO:ke] synonym: "fragment assembly" EXACT [] synonym: "physical map" EXACT [] is_a: SO:0001248 ! assembly [Term] id: SO:0001250 name: fingerprint_map def: "A fingerprint_map is a physical map composed of restriction fragments." [SO:ke] synonym: "BACmap" EXACT [] synonym: "fingerprint map" EXACT [] synonym: "FPC" EXACT [] synonym: "FPCmap" EXACT [] synonym: "restriction map" EXACT [] is_a: SO:0001249 ! fragment_assembly relationship: has_part SO:0000412 ! restriction_fragment [Term] id: SO:0001251 name: STS_map def: "An STS map is a physical map organized by the unique STS landmarks." [SO:ke] synonym: "STS map" EXACT [] is_a: SO:0001249 ! fragment_assembly relationship: has_part SO:0000331 ! STS [Term] id: SO:0001252 name: RH_map def: "A radiation hybrid map is a physical map." [SO:ke] synonym: "radiation hybrid map" EXACT [] synonym: "RH map" EXACT [] is_a: SO:0001249 ! fragment_assembly relationship: has_part SO:0000331 ! STS [Term] id: SO:0001253 name: sonicate_fragment def: "A DNA fragment generated by sonication. Sonication is a technique used to sheer DNA into smaller fragments." [SO:ke] synonym: "sonicate fragment" EXACT [] is_a: SO:0000143 ! assembly_component [Term] id: SO:0001254 name: polyploid def: "A kind of chromosome variation where the chromosome complement is an exact multiple of the haploid number and is greater than the diploid number." [SO:ke] xref: http://en.wikipedia.org/wiki/Polyploid "wiki" is_a: SO:1000182 ! chromosome_number_variation [Term] id: SO:0001255 name: autopolyploid def: "A polyploid where the multiple chromosome set was derived from the same organism." [SO:ke] xref: http://en.wikipedia.org/wiki/Autopolyploid "wiki" is_a: SO:0001254 ! polyploid [Term] id: SO:0001256 name: allopolyploid def: "A polyploid where the multiple chromosome set was derived from a different organism." [SO:ke] xref: http://en.wikipedia.org/wiki/Allopolyploid "wiki" is_a: SO:0001254 ! polyploid [Term] id: SO:0001257 name: homing_endonuclease_binding_site def: "The binding site (recognition site) of a homing endonuclease. The binding site is typically large." [SO:ke] synonym: "homing endonuclease binding site" EXACT [] is_a: SO:0000059 ! nuclease_binding_site [Term] id: SO:0001258 name: octamer_motif def: "A sequence element characteristic of some RNA polymerase II promoters with sequence ATTGCAT that binds Pou-domain transcription factors." [GOC:dh, PMID:3095662] comment: Nature. 1986 Oct 16-22;323(6089):640-3. synonym: "octamer motif" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001259 name: apicoplast_chromosome def: "A chromosome originating in an apicoplast." [SO:xp] synonym: "apicoplast chromosome" EXACT [] is_a: SO:0000340 ! chromosome intersection_of: SO:0000340 ! chromosome intersection_of: has_origin SO:0000743 ! apicoplast_sequence relationship: has_origin SO:0000743 ! apicoplast_sequence [Term] id: SO:0001260 name: sequence_collection def: "A collection of discontinuous sequences." [SO:ke] synonym: "sequence collection" EXACT [] [Term] id: SO:0001261 name: overlapping_feature_set def: "A continuous region of sequence composed of the overlapping of multiple sequence_features, which ultimately provides evidence for another sequence_feature." [SO:ke] comment: This feature was requested by Nicole, tracker id 1911479. It is required to gather evidence together for annotation. An example would be overlapping ESTs that support an mRNA. synonym: "overlapping feature set" EXACT [] is_a: SO:0000703 ! experimental_result_region [Term] id: SO:0001262 name: overlapping_EST_set def: "A continous experimental result region extending the length of multiple overlapping EST's." [SO:ke] synonym: "overlapping EST set" EXACT [] is_a: SO:0001261 ! overlapping_feature_set relationship: has_part SO:0000345 ! EST [Term] id: SO:0001263 name: ncRNA_gene synonym: "ncRNA gen" EXACT [] synonym: "ncRNA gene" EXACT [] synonym: "non-coding RNA gene" RELATED [] is_a: SO:0000704 ! gene [Term] id: SO:0001264 name: gRNA_gene synonym: "gRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene intersection_of: SO:0001263 ! ncRNA_gene intersection_of: has_quality SO:0000979 ! gRNA_encoding relationship: has_quality SO:0000979 ! gRNA_encoding [Term] id: SO:0001265 name: miRNA_gene synonym: "miRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene intersection_of: SO:0001263 ! ncRNA_gene intersection_of: has_quality SO:0000571 ! miRNA_encoding relationship: has_quality SO:0000571 ! miRNA_encoding [Term] id: SO:0001266 name: scRNA_gene synonym: "scRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene intersection_of: SO:0001263 ! ncRNA_gene intersection_of: has_quality SO:0000575 ! scRNA_encoding relationship: has_quality SO:0000575 ! scRNA_encoding [Term] id: SO:0001267 name: snoRNA_gene synonym: "snoRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene intersection_of: SO:0001263 ! ncRNA_gene intersection_of: has_quality SO:0000578 ! snoRNA_encoding relationship: has_quality SO:0000578 ! snoRNA_encoding [Term] id: SO:0001268 name: snRNA_gene synonym: "snRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene intersection_of: SO:0001263 ! ncRNA_gene intersection_of: has_quality SO:0001263 ! ncRNA_gene relationship: has_quality SO:0001263 ! ncRNA_gene [Term] id: SO:0001269 name: SRP_RNA_gene synonym: "SRP RNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene intersection_of: SO:0001263 ! ncRNA_gene intersection_of: has_quality SO:0000642 ! SRP_RNA_encoding relationship: has_quality SO:0000642 ! SRP_RNA_encoding [Term] id: SO:0001270 name: stRNA_gene synonym: "stRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene intersection_of: SO:0001263 ! ncRNA_gene intersection_of: has_quality SO:0000656 ! stRNA_encoding relationship: has_quality SO:0000656 ! stRNA_encoding [Term] id: SO:0001271 name: tmRNA_gene synonym: "tmRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene intersection_of: SO:0001263 ! ncRNA_gene intersection_of: has_quality SO:0000659 ! tmRNA_encoding relationship: has_quality SO:0000659 ! tmRNA_encoding [Term] id: SO:0001272 name: tRNA_gene synonym: "tRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene intersection_of: SO:0001263 ! ncRNA_gene intersection_of: has_quality SO:0000663 ! tRNA_encoding relationship: has_quality SO:0000663 ! tRNA_encoding [Term] id: SO:0001273 name: modified_adenosine def: "A modified adenine is an adenine base feature that has been altered." [SO:ke] synonym: "modified adenosine" EXACT [] is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001274 name: modified_inosine def: "A modified inosine is an inosine base feature that has been altered." [SO:ke] synonym: "modified inosine" EXACT [] is_a: SO:0001230 ! inosine [Term] id: SO:0001275 name: modified_cytidine def: "A modified cytidine is a cytidine base feature which has been altered." [SO:ke] synonym: "modified cytidine" EXACT [] is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001276 name: modified_guanosine synonym: "modified guanosine" EXACT [] is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001277 name: modified_uridine synonym: "modified uridine" EXACT [] is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001278 name: one_methylinosine def: "1-methylinosine is a modified insosine." [http://library.med.utah.edu/RNAmods/] synonym: "1-methylinosine" EXACT [] synonym: "m1I" EXACT RNAMOD [] synonym: "one methylinosine" EXACT [] xref: RNAMOD:018 is_a: SO:0001274 ! modified_inosine [Term] id: SO:0001279 name: one_two_prime_O_dimethylinosine def: "1,2'-O-dimethylinosine is a modified inosine." [http://library.med.utah.edu/RNAmods/] synonym: "1,2'-O-dimethylinosine" EXACT [] synonym: "m'Im" EXACT RNAMOD [] synonym: "one two prime O dimethylinosine" EXACT [] xref: RNAMOD:019 is_a: SO:0001274 ! modified_inosine [Term] id: SO:0001280 name: two_prime_O_methylinosine def: "2'-O-methylinosine is a modified inosine." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methylinosine" EXACT [] synonym: "Im" EXACT RNAMOD [] synonym: "two prime O methylinosine" EXACT [] xref: RNAMOD:081 is_a: SO:0001274 ! modified_inosine [Term] id: SO:0001281 name: three_methylcytidine def: "3-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "3-methylcytidine" EXACT [] synonym: "m3C" EXACT RNAMOD [] synonym: "three methylcytidine" EXACT [] xref: RNAMOD:020 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001282 name: five_methylcytidine def: "5-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "5-methylcytidine" EXACT [] synonym: "five methylcytidine" EXACT [] synonym: "m5C" EXACT RNAMOD [] xref: RNAMOD:021 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001283 name: two_prime_O_methylcytidine def: "2'-O-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methylcytidine" EXACT [] synonym: "Cm" EXACT RNAMOD [] synonym: "two prime O methylcytidine" EXACT [] xref: RNAMOD:022 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001284 name: two_thiocytidine def: "2-thiocytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "2-thiocytidine" EXACT [] synonym: "s2C" EXACT RNAMOD [] synonym: "two thiocytidine" EXACT [] xref: RNAMOD:023 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001285 name: N4_acetylcytidine def: "N4-acetylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "ac4C" EXACT RNAMOD [] synonym: "N4 acetylcytidine" EXACT [] synonym: "N4-acetylcytidine" EXACT [] xref: RNAMOD:024 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001286 name: five_formylcytidine def: "5-formylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "5-formylcytidine" EXACT [] synonym: "f5C" EXACT RNAMOD [] synonym: "five formylcytidine" EXACT [] xref: RNAMOD:025 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001287 name: five_two_prime_O_dimethylcytidine def: "5,2'-O-dimethylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "5,2'-O-dimethylcytidine" EXACT [] synonym: "five two prime O dimethylcytidine" EXACT [] synonym: "m5Cm" EXACT RNAMOD [] xref: RNAMOD:026 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001288 name: N4_acetyl_2_prime_O_methylcytidine def: "N4-acetyl-2'-O-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "ac4Cm" EXACT RNAMOD [] synonym: "N4 acetyl 2 prime O methylcytidine" EXACT [] synonym: "N4-acetyl-2'-O-methylcytidine" EXACT [] xref: RNAMOD:027 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001289 name: lysidine def: "Lysidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "k2C" EXACT RNAMOD [] xref: http://en.wikipedia.org/wiki/Lysidine "wiki" xref: RNAMOD:028 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001290 name: N4_methylcytidine def: "N4-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "m4C" EXACT RNAMOD [] synonym: "N4 methylcytidine" EXACT [] synonym: "N4-methylcytidine" EXACT [] xref: RNAMOD:082 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001291 name: N4_2_prime_O_dimethylcytidine def: "N4,2'-O-dimethylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "m4Cm" EXACT RNAMOD [] synonym: "N4 2 prime O dimethylcytidine" EXACT [] synonym: "N4,2'-O-dimethylcytidine" EXACT [] xref: RNAMOD:083 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001292 name: five_hydroxymethylcytidine def: "5-hydroxymethylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "5-hydroxymethylcytidine" EXACT [] synonym: "five hydroxymethylcytidine" EXACT [] synonym: "hm5C" EXACT RNAMOD [] xref: RNAMOD:084 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001293 name: five_formyl_two_prime_O_methylcytidine def: "5-formyl-2'-O-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "5-formyl-2'-O-methylcytidine" EXACT [] synonym: "f5Cm" EXACT RNAMOD [] synonym: "five formyl two prime O methylcytidine" EXACT [] xref: RNAMOD:095 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001294 name: N4_N4_2_prime_O_trimethylcytidine def: "N4_N4_2_prime_O_trimethylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "m42Cm" EXACT RNAMOD [] synonym: "N4,N4,2'-O-trimethylcytidine" EXACT [] xref: RNAMOD:107 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001295 name: one_methyladenosine def: "1_methyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "1-methyladenosine" EXACT [] synonym: "m1A" EXACT RNAMOD [] synonym: "one methyladenosine" EXACT [] xref: RNAMOD:001 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001296 name: two_methyladenosine def: "2_methyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methyladenosine" EXACT [] synonym: "m2A" EXACT RNAMOD [] synonym: "two methyladenosine" EXACT [] xref: RNAMOD:002 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001297 name: N6_methyladenosine def: "N6_methyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "m6A" EXACT RNAMOD [] synonym: "N6 methyladenosine" EXACT [] synonym: "N6-methyladenosine" EXACT [] xref: RNAMOD:003 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001298 name: two_prime_O_methyladenosine def: "2prime_O_methyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methyladenosine" EXACT [] synonym: "Am" EXACT RNAMOD [] synonym: "two prime O methyladenosine" EXACT [] xref: RNAMOD:004 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001299 name: two_methylthio_N6_methyladenosine def: "2_methylthio_N6_methyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methylthio-N6-methyladenosine" EXACT [] synonym: "ms2m6A" EXACT RNAMOD [] synonym: "two methylthio N6 methyladenosine" EXACT [] xref: RNAMOD:005 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001300 name: N6_isopentenyladenosine def: "N6_isopentenyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "i6A" EXACT RNAMOD [] synonym: "N6 isopentenyladenosine" EXACT [] synonym: "N6-isopentenyladenosine" EXACT [] xref: RNAMOD:006 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001301 name: two_methylthio_N6_isopentenyladenosine def: "2_methylthio_N6_isopentenyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methylthio-N6-isopentenyladenosine" EXACT [] synonym: "ms2i6A" EXACT RNAMOD [] synonym: "two methylthio N6 isopentenyladenosine" EXACT [] xref: RNAMOD:007 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001302 name: N6_cis_hydroxyisopentenyl_adenosine def: "N6_cis_hydroxyisopentenyl_adenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "io6A" EXACT RNAMOD [] synonym: "N6 cis hydroxyisopentenyl adenosine" EXACT [] synonym: "N6-(cis-hydroxyisopentenyl)adenosine" EXACT [] xref: RNAMOD:008 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001303 name: two_methylthio_N6_cis_hydroxyisopentenyl_adenosine def: "2_methylthio_N6_cis_hydroxyisopentenyl_adenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methylthio-N6-(cis-hydroxyisopentenyl) adenosine" EXACT [] synonym: "ms2io6A" EXACT RNAMOD [] synonym: "two methylthio N6 cis hydroxyisopentenyl adenosine" EXACT [] xref: RNAMOD:009 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001304 name: N6_glycinylcarbamoyladenosine def: "N6_glycinylcarbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "g6A" EXACT RNAMOD [] synonym: "N6 glycinylcarbamoyladenosine" EXACT [] synonym: "N6-glycinylcarbamoyladenosine" EXACT [] xref: RNAMOD:010 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001305 name: N6_threonylcarbamoyladenosine def: "N6_threonylcarbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "N6 threonylcarbamoyladenosine" EXACT [] synonym: "N6-threonylcarbamoyladenosine" EXACT [] synonym: "t6A" EXACT RNAMOD [] xref: RNAMOD:011 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001306 name: two_methylthio_N6_threonyl_carbamoyladenosine def: "2_methylthio_N6_threonyl_carbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methylthio-N6-threonyl carbamoyladenosine" EXACT [] synonym: "ms2t6A" EXACT RNAMOD [] synonym: "two methylthio N6 threonyl carbamoyladenosine" EXACT [] xref: RNAMOD:012 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001307 name: N6_methyl_N6_threonylcarbamoyladenosine def: "N6_methyl_N6_threonylcarbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "m6t6A" EXACT RNAMOD [] synonym: "N6 methyl N6 threonylcarbamoyladenosine" EXACT [] synonym: "N6-methyl-N6-threonylcarbamoyladenosine" EXACT [] xref: RNAMOD:013 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001308 name: N6_hydroxynorvalylcarbamoyladenosine def: "N6_hydroxynorvalylcarbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "hn6A" EXACT RNAMOD [] synonym: "N6 hydroxynorvalylcarbamoyladenosine" EXACT [] synonym: "N6-hydroxynorvalylcarbamoyladenosine" EXACT [] xref: RNAMOD:014 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001309 name: two_methylthio_N6_hydroxynorvalyl_carbamoyladenosine def: "2_methylthio_N6_hydroxynorvalyl_carbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methylthio-N6-hydroxynorvalyl carbamoyladenosine" EXACT [] synonym: "ms2hn6A" EXACT RNAMOD [] synonym: "two methylthio N6 hydroxynorvalyl carbamoyladenosine" EXACT [] xref: RNAMOD:015 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001310 name: two_prime_O_ribosyladenosine_phosphate def: "2prime_O_ribosyladenosine_phosphate is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-ribosyladenosine (phosphate)" EXACT [] synonym: "Ar(p)" EXACT RNAMOD [] synonym: "two prime O ribosyladenosine phosphate" EXACT [] xref: RNAMOD:016 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001311 name: N6_N6_dimethyladenosine def: "N6_N6_dimethyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "m62A" EXACT RNAMOD [] synonym: "N6,N6-dimethyladenosine" EXACT [] xref: RNAMOD:080 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001312 name: N6_2_prime_O_dimethyladenosine def: "N6_2prime_O_dimethyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "m6Am" EXACT RNAMOD [] synonym: "N6 2 prime O dimethyladenosine" EXACT [] synonym: "N6,2'-O-dimethyladenosine" EXACT [] xref: RNAMOD:088 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001313 name: N6_N6_2_prime_O_trimethyladenosine def: "N6_N6_2prime_O_trimethyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "m62Am" EXACT RNAMOD [] synonym: "N6,N6,2'-O-trimethyladenosine" EXACT [] xref: RNAMOD:089 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001314 name: one_two_prime_O_dimethyladenosine def: "1,2'-O-dimethyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "1,2'-O-dimethyladenosine" EXACT [] synonym: "m1Am" EXACT RNAMOD [] synonym: "one two prime O dimethyladenosine" EXACT [] xref: RNAMOD:097 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001315 name: N6_acetyladenosine def: "N6_acetyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "ac6A" EXACT RNAMOD [] synonym: "N6 acetyladenosine" EXACT [] synonym: "N6-acetyladenosine" EXACT [] xref: RNAMOD:102 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001316 name: seven_deazaguanosine def: "7-deazaguanosine is a moddified guanosine." [http://library.med.utah.edu/RNAmods/] synonym: "7-deazaguanosine" RELATED [] synonym: "seven deazaguanosine" EXACT [] is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001317 name: queuosine def: "Queuosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "Q" EXACT RNAMOD [] xref: http://en.wikipedia.org/wiki/Queuosine "wiki" xref: RNAMOD:043 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001318 name: epoxyqueuosine def: "Epoxyqueuosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "eQ" EXACT RNAMOD [] xref: RNAMOD:044 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001319 name: galactosyl_queuosine def: "Galactosyl_queuosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "galactosyl queuosine" EXACT [] synonym: "galactosyl-queuosine" EXACT [] synonym: "galQ" EXACT RNAMOD [] xref: RNAMOD:045 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001320 name: mannosyl_queuosine def: "Mannosyl_queuosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "mannosyl queuosine" EXACT [] synonym: "mannosyl-queuosine" EXACT [] synonym: "manQ" EXACT RNAMOD [] xref: RNAMOD:046 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001321 name: seven_cyano_seven_deazaguanosine def: "7_cyano_7_deazaguanosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "7-cyano-7-deazaguanosine" EXACT [] synonym: "preQ0" EXACT RNAMOD [] synonym: "seven cyano seven deazaguanosine" EXACT [] xref: RNAMOD:047 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001322 name: seven_aminomethyl_seven_deazaguanosine def: "7_aminomethyl_7_deazaguanosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "7-aminomethyl-7-deazaguanosine" EXACT [] synonym: "preQ1" EXACT RNAMOD [] synonym: "seven aminomethyl seven deazaguanosine" EXACT [] xref: RNAMOD:048 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001323 name: archaeosine def: "Archaeosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "G+" EXACT RNAMOD [] xref: RNAMOD:049 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001324 name: one_methylguanosine def: "1_methylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "1-methylguanosine" EXACT [] synonym: "m1G" EXACT RNAMOD [] synonym: "one methylguanosine" EXACT [] xref: RNAMOD:029 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001325 name: N2_methylguanosine def: "N2_methylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m2G" EXACT RNAMOD [] synonym: "N2 methylguanosine" EXACT [] synonym: "N2-methylguanosine" EXACT [] xref: RNAMOD:030 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001326 name: seven_methylguanosine def: "7_methylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "7-methylguanosine" EXACT [] synonym: "m7G" EXACT RNAMOD [] synonym: "seven methylguanosine" EXACT [] xref: RNAMOD:031 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001327 name: two_prime_O_methylguanosine def: "2prime_O_methylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methylguanosine" EXACT [] synonym: "Gm" EXACT RNAMOD [] synonym: "two prime O methylguanosine" EXACT [] xref: RNAMOD:032 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001328 name: N2_N2_dimethylguanosine def: "N2_N2_dimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m22G" EXACT RNAMOD [] synonym: "N2,N2-dimethylguanosine" EXACT [] xref: RNAMOD:033 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001329 name: N2_2_prime_O_dimethylguanosine def: "N2_2prime_O_dimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m2Gm" EXACT RNAMOD [] synonym: "N2 2 prime O dimethylguanosine" EXACT [] synonym: "N2,2'-O-dimethylguanosine" EXACT [] xref: RNAMOD:034 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001330 name: N2_N2_2_prime_O_trimethylguanosine def: "N2_N2_2prime_O_trimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m22Gmv" EXACT RNAMOD [] synonym: "N2,N2,2'-O-trimethylguanosine" EXACT [] xref: RNAMOD:035 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001331 name: two_prime_O_ribosylguanosine_phosphate def: "2prime_O_ribosylguanosine_phosphate is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-ribosylguanosine (phosphate)" EXACT [] synonym: "Gr(p)" EXACT RNAMOD [] synonym: "two prime O ribosylguanosine phosphate" EXACT [] xref: RNAMOD:036 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001332 name: wybutosine def: "Wybutosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "yW" EXACT RNAMOD [] xref: RNAMOD:037 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001333 name: peroxywybutosine def: "Peroxywybutosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "o2yW" EXACT RNAMOD [] xref: RNAMOD:038 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001334 name: hydroxywybutosine def: "Hydroxywybutosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "OHyW" EXACT RNAMOD [] xref: RNAMOD:039 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001335 name: undermodified_hydroxywybutosine def: "Undermodified_hydroxywybutosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "OHyW*" EXACT RNAMOD [] synonym: "undermodified hydroxywybutosine" EXACT [] xref: RNAMOD:040 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001336 name: wyosine def: "Wyosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "IMG" EXACT RNAMOD [] xref: RNAMOD:041 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001337 name: methylwyosine def: "Methylwyosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "mimG" EXACT RNAMOD [] xref: RNAMOD:042 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001338 name: N2_7_dimethylguanosine def: "N2_7_dimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m2,7G" EXACT RNAMOD [] synonym: "N2 7 dimethylguanosine" EXACT [] synonym: "N2,7-dimethylguanosine" EXACT [] xref: RNAMOD:090 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001339 name: N2_N2_7_trimethylguanosine def: "N2_N2_7_trimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m2,2,7G" EXACT RNAMOD [] synonym: "N2,N2,7-trimethylguanosine" EXACT [] xref: RNAMOD:091 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001340 name: one_two_prime_O_dimethylguanosine def: "1_2prime_O_dimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "1,2'-O-dimethylguanosine" EXACT [] synonym: "m1Gm" EXACT RNAMOD [] synonym: "one two prime O dimethylguanosine" EXACT [] xref: RNAMOD:096 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001341 name: four_demethylwyosine def: "4_demethylwyosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "4-demethylwyosine" EXACT [] synonym: "four demethylwyosine" EXACT [] synonym: "imG-14" EXACT RNAMOD [] xref: RNAMOD:100 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001342 name: isowyosine def: "Isowyosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "imG2" EXACT RNAMOD [] xref: RNAMOD:101 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001343 name: N2_7_2prirme_O_trimethylguanosine def: "N2_7_2prirme_O_trimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m2,7Gm" EXACT RNAMOD [] synonym: "N2 7 2prirme O trimethylguanosine" EXACT [] synonym: "N2,7,2'-O-trimethylguanosine" EXACT [] xref: RNAMOD:106 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001344 name: five_methyluridine def: "5_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methyluridine" EXACT [] synonym: "five methyluridine" EXACT [] synonym: "m5U" EXACT RNAMOD [] xref: http://en.wikipedia.org/wiki/5-methyluridine "wiki" xref: RNAMOD:052 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001345 name: two_prime_O_methyluridine def: "2prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methyluridine" EXACT [] synonym: "two prime O methyluridine" EXACT [] synonym: "Um" EXACT RNAMOD [] xref: RNAMOD:053 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001346 name: five_two_prime_O_dimethyluridine def: "5_2_prime_O_dimethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5,2'-O-dimethyluridine" EXACT [] synonym: "five two prime O dimethyluridine" EXACT [] synonym: "m5Um" EXACT RNAMOD [] xref: RNAMOD:054 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001347 name: one_methylpseudouridine def: "1_methylpseudouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "1-methylpseudouridine" EXACT [] synonym: "m1Y" EXACT RNAMOD [] synonym: "one methylpseudouridine" EXACT [] xref: RNAMOD:055 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001348 name: two_prime_O_methylpseudouridine def: "2prime_O_methylpseudouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methylpseudouridine" EXACT [] synonym: "two prime O methylpseudouridine" EXACT [] synonym: "Ym" EXACT RNAMOD [] xref: RNAMOD:056 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001349 name: two_thiouridine def: "2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2-thiouridine" EXACT [] synonym: "s2U" EXACT RNAMOD [] synonym: "two thiouridine" EXACT [] xref: RNAMOD:057 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001350 name: four_thiouridine def: "4_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "4-thiouridine" EXACT [] synonym: "four thiouridine" EXACT [] synonym: "s4U" EXACT RNAMOD [] xref: RNAMOD:058 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001351 name: five_methyl_2_thiouridine def: "5_methyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methyl-2-thiouridine" EXACT [] synonym: "five methyl 2 thiouridine" EXACT [] synonym: "m5s2U" EXACT RNAMOD [] xref: RNAMOD:059 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001352 name: two_thio_two_prime_O_methyluridine def: "2_thio_2prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2-thio-2'-O-methyluridine" EXACT [] synonym: "s2Um" EXACT RNAMOD [] synonym: "two thio two prime O methyluridine" EXACT [] xref: RNAMOD:060 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001353 name: three_three_amino_three_carboxypropyl_uridine def: "3_3_amino_3_carboxypropyl_uridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "3-(3-amino-3-carboxypropyl)uridine" EXACT [] synonym: "acp3U" EXACT RNAMOD [] xref: RNAMOD:061 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001354 name: five_hydroxyuridine def: "5_hydroxyuridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-hydroxyuridine" EXACT [] synonym: "five hydroxyuridine" EXACT [] synonym: "ho5U" EXACT RNAMOD [] xref: RNAMOD:060 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001355 name: five_methoxyuridine def: "5_methoxyuridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methoxyuridine" EXACT [] synonym: "five methoxyuridine" EXACT [] synonym: "mo5U" EXACT RNAMOD [] xref: RNAMOD:063 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001356 name: uridine_five_oxyacetic_acid def: "Uridine_5_oxyacetic_acid is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "cmo5U" EXACT RNAMOD [] synonym: "uridine 5-oxyacetic acid" EXACT [] synonym: "uridine five oxyacetic acid" EXACT [] xref: RNAMOD:064 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001357 name: uridine_five_oxyacetic_acid_methyl_ester def: "Uridine_5_oxyacetic_acid_methyl_ester is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "mcmo5U" EXACT RNAMOD [] synonym: "uridine 5-oxyacetic acid methyl ester" EXACT [] synonym: "uridine five oxyacetic acid methyl ester" EXACT [] xref: RNAMOD:065 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001358 name: five_carboxyhydroxymethyl_uridine def: "5_carboxyhydroxymethyl_uridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-(carboxyhydroxymethyl)uridine" EXACT [] synonym: "chm5U" EXACT RNAMOD [] synonym: "five carboxyhydroxymethyl uridine" EXACT [] xref: RNAMOD:066 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001359 name: five_carboxyhydroxymethyl_uridine_methyl_ester def: "5_carboxyhydroxymethyl_uridine_methyl_ester is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-(carboxyhydroxymethyl)uridine methyl ester" EXACT [] synonym: "five carboxyhydroxymethyl uridine methyl ester" EXACT [] synonym: "mchm5U" EXACT RNAMOD [] xref: RNAMOD:067 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001360 name: five_methoxycarbonylmethyluridine def: "Five_methoxycarbonylmethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methoxycarbonylmethyluridine" EXACT [] synonym: "five methoxycarbonylmethyluridine" EXACT [] synonym: "mcm5U" EXACT RNAMOD [] xref: RNAMOD:068 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001361 name: five_methoxycarbonylmethyl_two_prime_O_methyluridine def: "Five_methoxycarbonylmethyl_2_prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methoxycarbonylmethyl-2'-O-methyluridine" EXACT [] synonym: "five methoxycarbonylmethyl two prime O methyluridine" EXACT [] synonym: "mcm5Um" EXACT RNAMOD [] xref: RNAMOD:069 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001362 name: five_methoxycarbonylmethyl_two_thiouridine def: "5_methoxycarbonylmethyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methoxycarbonylmethyl-2-thiouridine" EXACT [] synonym: "five methoxycarbonylmethyl two thiouridine" EXACT [] synonym: "mcm5s2U" EXACT RNAMOD [] xref: RNAMOD:070 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001363 name: five_aminomethyl_two_thiouridine def: "5_aminomethyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-aminomethyl-2-thiouridine" EXACT [] synonym: "five aminomethyl two thiouridine" EXACT [] synonym: "nm5s2U" EXACT RNAMOD [] xref: RNAMOD:071 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001364 name: five_methylaminomethyluridine def: "5_methylaminomethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methylaminomethyluridine" EXACT [] synonym: "five methylaminomethyluridine" EXACT [] synonym: "mnm5U" EXACT RNAMOD [] xref: RNAMOD:072 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001365 name: five_methylaminomethyl_two_thiouridine def: "5_methylaminomethyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methylaminomethyl-2-thiouridine" EXACT [] synonym: "five methylaminomethyl two thiouridine" EXACT [] synonym: "mnm5s2U" EXACT RNAMOD [] xref: RNAMOD:073 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001366 name: five_methylaminomethyl_two_selenouridine def: "5_methylaminomethyl_2_selenouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methylaminomethyl-2-selenouridine" EXACT [] synonym: "five methylaminomethyl two selenouridine" EXACT [] synonym: "mnm5se2U" EXACT RNAMOD [] xref: RNAMOD:074 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001367 name: five_carbamoylmethyluridine def: "5_carbamoylmethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carbamoylmethyluridine" EXACT [] synonym: "five carbamoylmethyluridine" EXACT [] synonym: "ncm5U" EXACT RNAMOD [] xref: RNAMOD:075 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001368 name: five_carbamoylmethyl_two_prime_O_methyluridine def: "5_carbamoylmethyl_2_prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carbamoylmethyl-2'-O-methyluridine" EXACT [] synonym: "five carbamoylmethyl two prime O methyluridine" EXACT [] synonym: "ncm5Um" EXACT RNAMOD [] xref: RNAMOD:076 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001369 name: five_carboxymethylaminomethyluridine def: "5_carboxymethylaminomethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carboxymethylaminomethyluridine" EXACT [] synonym: "cmnm5U" EXACT RNAMOD [] synonym: "five carboxymethylaminomethyluridine" EXACT [] xref: RNAMOD:077 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001370 name: five_carboxymethylaminomethyl_two_prime_O_methyluridine def: "5_carboxymethylaminomethyl_2_prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carboxymethylaminomethyl- 2'-O-methyluridine" EXACT [] synonym: "cmnm5Um" EXACT RNAMOD [] synonym: "five carboxymethylaminomethyl two prime O methyluridine" EXACT [] xref: RNAMOD:078 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001371 name: five_carboxymethylaminomethyl_two_thiouridine def: "5_carboxymethylaminomethyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carboxymethylaminomethyl-2-thiouridine" EXACT [] synonym: "cmnm5s2U" EXACT RNAMOD [] synonym: "five carboxymethylaminomethyl two thiouridine" EXACT [] xref: RNAMOD:079 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001372 name: three_methyluridine def: "3_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "3-methyluridine" EXACT [] synonym: "m3U" EXACT RNAMOD [] synonym: "three methyluridine" EXACT [] xref: RNAMOD:085 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001373 name: one_methyl_three_three_amino_three_carboxypropyl_pseudouridine def: "1_methyl_3_3_amino_3_carboxypropyl_pseudouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "1-methyl-3-(3-amino-3-carboxypropyl) pseudouridine" EXACT [] synonym: "m1acp3Y" EXACT RNAMOD [] xref: RNAMOD:086 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001374 name: five_carboxymethyluridine def: "5_carboxymethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carboxymethyluridine" EXACT [] synonym: "cm5U" EXACT RNAMOD [] synonym: "five carboxymethyluridine" EXACT [] xref: RNAMOD:087 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001375 name: three_two_prime_O_dimethyluridine def: "3_2prime_O_dimethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "3,2'-O-dimethyluridine" EXACT [] synonym: "m3Um" EXACT RNAMOD [] synonym: "three two prime O dimethyluridine" EXACT [] xref: RNAMOD:092 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001376 name: five_methyldihydrouridine def: "5_methyldihydrouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methyldihydrouridine" EXACT [] synonym: "five methyldihydrouridine" EXACT [] synonym: "m5D" EXACT RNAMOD [] xref: RNAMOD:093 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001377 name: three_methylpseudouridine def: "3_methylpseudouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "3-methylpseudouridine" EXACT [] synonym: "m3Y" EXACT RNAMOD [] synonym: "three methylpseudouridine" EXACT [] xref: RNAMOD:094 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001378 name: five_taurinomethyluridine def: "5_taurinomethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-taurinomethyluridine" EXACT [] synonym: "five taurinomethyluridine" EXACT [] synonym: "tm5U" EXACT RNAMOD [] xref: RNAMOD:098 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001379 name: five_taurinomethyl_two_thiouridine def: "5_taurinomethyl_2_thiouridineis a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-taurinomethyl-2-thiouridine" EXACT [] synonym: "five taurinomethyl two thiouridine" EXACT [] synonym: "tm5s2U" EXACT RNAMOD [] xref: RNAMOD:099 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001380 name: five_isopentenylaminomethyl_uridine def: "5_isopentenylaminomethyl_uridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-(isopentenylaminomethyl)uridine" EXACT [] synonym: "five isopentenylaminomethyl uridine" EXACT [] synonym: "inm5U" EXACT RNAMOD [] xref: RNAMOD:103 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001381 name: five_isopentenylaminomethyl_two_thiouridine def: "5_isopentenylaminomethyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-(isopentenylaminomethyl)- 2-thiouridine" EXACT [] synonym: "five isopentenylaminomethyl two thiouridine" EXACT [] synonym: "inm5s2U" EXACT RNAMOD [] xref: RNAMOD:104 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001382 name: five_isopentenylaminomethyl_two_prime_O_methyluridine def: "5_isopentenylaminomethyl_2prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-(isopentenylaminomethyl)- 2'-O-methyluridine" EXACT [] synonym: "five isopentenylaminomethyl two prime O methyluridine" EXACT [] synonym: "inm5Um" EXACT RNAMOD [] xref: RNAMOD:105 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001383 name: histone_binding_site def: "A binding site that, in the nucleotide molecule, interacts selectively and non-covalently with polypeptide residues of a histone." [SO:ke] synonym: "histone binding site" EXACT [] is_a: SO:0001654 ! nucleotide_to_protein_binding_site [Term] id: SO:0001384 name: CDS_fragment synonym: "CDS fragment" EXACT [] synonym: "incomplete CDS" EXACT [] is_a: SO:0000316 ! CDS intersection_of: SO:0000316 ! CDS intersection_of: has_quality SO:0000731 ! fragmentary relationship: has_quality SO:0000731 ! fragmentary [Term] id: SO:0001385 name: modified_amino_acid_feature def: "A post translationally modified amino acid feature." [SO:ke] synonym: "modified amino acid feature" EXACT [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001386 name: modified_glycine def: "A post translationally modified glycine amino acid feature." [SO:ke] synonym: "ModGly" EXACT AAMOD [] synonym: "modified glycine" EXACT [] xref: MOD:00908 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001387 name: modified_L_alanine def: "A post translationally modified alanine amino acid feature." [SO:ke] synonym: "ModAla" EXACT AAMOD [] synonym: "modified L alanine" EXACT [] synonym: "modified L-alanine" EXACT [] xref: MOD:00901 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001388 name: modified_L_asparagine def: "A post translationally modified asparagine amino acid feature." [SO:ke] synonym: "ModAsn" EXACT AAMOD [] synonym: "modified L asparagine" EXACT [] synonym: "modified L-asparagine" EXACT [] xref: MOD:00903 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001389 name: modified_L_aspartic_acid def: "A post translationally modified aspartic acid amino acid feature." [SO:ke] synonym: "ModAsp" EXACT AAMOD [] synonym: "modified L aspartic acid" EXACT [] synonym: "modified L-aspartic acid" EXACT [] xref: MOD:00904 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001390 name: modified_L_cysteine def: "A post translationally modified cysteine amino acid feature." [SO:ke] synonym: "ModCys" EXACT AAMOD [] synonym: "modified L cysteine" EXACT [] synonym: "modified L-cysteine" EXACT [] xref: MOD:00905 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001391 name: modified_L_glutamic_acid synonym: "ModGlu" EXACT AAMOD [] synonym: "modified L glutamic acid" EXACT [] synonym: "modified L-glutamic acid" EXACT [] xref: MOD:00906 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001392 name: modified_L_threonine def: "A post translationally modified threonine amino acid feature." [SO:ke] synonym: "modified L threonine" EXACT [] synonym: "modified L-threonine" EXACT [] synonym: "ModThr" EXACT AAMOD [] xref: MOD:00917 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001393 name: modified_L_tryptophan def: "A post translationally modified tryptophan amino acid feature." [SO:ke] synonym: "modified L tryptophan" EXACT [] synonym: "modified L-tryptophan" EXACT [] synonym: "ModTrp" EXACT AAMOD [] xref: MOD:00918 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001394 name: modified_L_glutamine def: "A post translationally modified glutamine amino acid feature." [SO:ke] synonym: "ModGln" EXACT [] synonym: "modified L glutamine" EXACT [] synonym: "modified L-glutamine" EXACT [] xref: MOD:00907 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001395 name: modified_L_methionine def: "A post translationally modified methionine amino acid feature." [SO:ke] synonym: "modified L methionine" EXACT [] synonym: "modified L-methionine" EXACT [] synonym: "ModMet" EXACT AAMOD [] xref: MOD:00913 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001396 name: modified_L_isoleucine def: "A post translationally modified isoleucine amino acid feature." [SO:ke] synonym: "modified L isoleucine" EXACT [] synonym: "modified L-isoleucine" EXACT [] synonym: "ModIle" EXACT AAMOD [] xref: MOD:00910 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001397 name: modified_L_phenylalanine def: "A post translationally modified phenylalanine amino acid feature." [SO:ke] synonym: "modified L phenylalanine" EXACT [] synonym: "modified L-phenylalanine" EXACT [] synonym: "ModPhe" EXACT AAMOD [] xref: MOD:00914 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001398 name: modified_L_histidine def: "A post translationally modified histidie amino acid feature." [SO:ke] synonym: "ModHis" EXACT [] synonym: "modified L histidine" EXACT [] synonym: "modified L-histidine" EXACT [] xref: MOD:00909 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001399 name: modified_L_serine def: "A post translationally modified serine amino acid feature." [SO:ke] synonym: "modified L serine" EXACT [] synonym: "modified L-serine" EXACT [] synonym: "MosSer" EXACT AAMOD [] xref: MOD:00916 "http://www.psidev.info/index.php?q=node/104" is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001400 name: modified_L_lysine def: "A post translationally modified lysine amino acid feature." [SO:ke] synonym: "modified L lysine" EXACT [] synonym: "modified L-lysine" EXACT [] synonym: "ModLys" EXACT AAMOD [] xref: MOD:00912 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001401 name: modified_L_leucine def: "A post translationally modified leucine amino acid feature." [SO:ke] synonym: "modified L leucine" EXACT [] synonym: "modified L-leucine " EXACT [] synonym: "ModLeu" EXACT AAMOD [] xref: MOD:00911 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001402 name: modified_L_selenocysteine def: "A post translationally modified selenocysteine amino acid feature." [SO:ke] synonym: "modified L selenocysteine" EXACT [] synonym: "modified L-selenocysteine" EXACT [] xref: MOD:01158 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001403 name: modified_L_valine def: "A post translationally modified valine amino acid feature." [SO:ke] synonym: "modified L valine" EXACT [] synonym: "modified L-valine" EXACT [] synonym: "ModVal" EXACT AAMOD [] xref: MOD:00920 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001404 name: modified_L_proline def: "A post translationally modified proline amino acid feature." [SO:ke] synonym: "modified L proline" EXACT [] synonym: "modified L-proline " EXACT [] synonym: "ModPro" EXACT AAMOD [] xref: MOD:00915 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001405 name: modified_L_tyrosine def: "A post translationally modified tyrosine amino acid feature." [SO:ke] synonym: "modified L tyrosine" EXACT [] synonym: "modified L-tyrosine" EXACT [] synonym: "ModTry" EXACT AAMOD [] xref: MOD:00919 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001406 name: modified_L_arginine def: "A post translationally modified arginine amino acid feature." [SO:ke] synonym: "ModArg" EXACT AAMOD [] synonym: "modified L arginine" EXACT [] synonym: "modified L-arginine" EXACT [] xref: MOD:00902 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001407 name: peptidyl def: "An attribute describing the nature of a proteinaceous polymer, where by the amino acid units are joined by peptide bonds." [SO:ke] is_a: SO:0000443 ! polymer_attribute [Term] id: SO:0001408 name: cleaved_for_gpi_anchor_region def: "The C-terminal residues of a polypeptide which are exchanged for a GPI-anchor." [EBI:rh] synonym: "cleaved for gpi anchor region" EXACT [] is_a: SO:0100011 ! cleaved_peptide_region [Term] id: SO:0001409 name: biomaterial_region def: "A region which is intended for use in an experiment." [SO:cb] subset: SOFA synonym: "biomaterial region" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001410 name: experimental_feature def: "A region which is the result of some arbitrary experimental procedure. The procedure may be carried out with biological material or inside a computer." [SO:cb] subset: SOFA synonym: "analysis feature" RELATED [] synonym: "experimental output artefact" EXACT [] synonym: "experimental_output_artefact" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001411 name: biological_region def: "A region defined by its disposition to be involved in a biological process." [SO:cb] subset: SOFA synonym: "biological region" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001412 name: topologically_defined_region def: "A region that is defined according to its relations with other regions within the same sequence." [SO:cb] subset: SOFA synonym: "topologically defined region" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001413 name: translocation_breakpoint def: "The point within a chromosome where a translocation begins or ends." [SO:cb] synonym: "translocation breakpoint" EXACT [] is_a: SO:0001021 ! chromosome_breakpoint [Term] id: SO:0001414 name: insertion_breakpoint def: "The point within a chromosome where a insertion begins or ends." [SO:cb] synonym: "insertion breakpoint" EXACT [] is_a: SO:0001021 ! chromosome_breakpoint [Term] id: SO:0001415 name: deletion_breakpoint def: "The point within a chromosome where a deletion begins or ends." [SO:cb] synonym: "deletion breakpoint" EXACT [] is_a: SO:0001021 ! chromosome_breakpoint [Term] id: SO:0001416 name: five_prime_flanking_region def: "A flanking region located five prime of a specific region." [SO:chado] synonym: "5' flanking region" RELATED [] synonym: "five prime flanking region" EXACT [] is_a: SO:0000239 ! flanking_region [Term] id: SO:0001417 name: three_prime_flanking_region def: "A flanking region located three prime of a specific region." [SO:chado] synonym: "3' flanking region" RELATED [] synonym: "three prime flanking region" EXACT [] is_a: SO:0000239 ! flanking_region [Term] id: SO:0001418 name: transcribed_fragment def: "An experimental region, defined by a tiling array experiment to be transcribed at some level." [SO:ke] comment: Term requested by the MODencode group. synonym: "transcribed fragment" EXACT [] synonym: "transfrag" RELATED [] is_a: SO:0001410 ! experimental_feature [Term] id: SO:0001419 name: cis_splice_site def: "Intronic 2 bp region bordering exon. A splice_site that adjacent_to exon and overlaps intron." [SO:cjm, SO:ke] subset: SOFA synonym: "cis splice site" EXACT [] is_a: SO:0000162 ! splice_site [Term] id: SO:0001420 name: trans_splice_site def: "Primary transcript region bordering trans-splice junction." [SO:ke] subset: SOFA synonym: "trans splice site" EXACT [] is_a: SO:0000162 ! splice_site [Term] id: SO:0001421 name: splice_junction def: "The boundary between an intron and an exon." [SO:ke] synonym: "splice boundary" EXACT [] synonym: "splice junction" EXACT [] is_a: SO:0000699 ! junction [Term] id: SO:0001422 name: conformational_switch def: "A region of a polypeptide, involved in the transition from one conformational state to another." [SO:ke] comment: MM Young, K Kirshenbaum, KA Dill & S Highsmith. Predicting conformational switches in proteins. Protein Science, 1999, 8, 1752-64. K. Kirshenbaum, M.M. Young and S. Highsmith. Predicting Allosteric Switches in Myosins. Protein Science 8(9):1806-1815. 1999. synonym: "polypeptide conformational switch" EXACT [] is_a: SO:0100001 ! biochemical_region_of_peptide [Term] id: SO:0001423 name: dye_terminator_read def: "A read produced by the dye terminator method of sequencing." [SO:ke] synonym: "dye terminator read" RELATED [] is_a: SO:0000150 ! read [Term] id: SO:0001424 name: pyrosequenced_read def: "A read produced by pyrosequencing technology." [SO:ke] comment: An example is a read produced by Roche 454 technology. synonym: "pyorsequenced read" RELATED [] is_a: SO:0000150 ! read [Term] id: SO:0001425 name: ligation_based_read def: "A read produced by ligation based sequencing technologies." [SO:ke] comment: An example of this kind of read is one produced by ABI SOLiD. synonym: "ligation based read" RELATED [] is_a: SO:0000150 ! read [Term] id: SO:0001426 name: polymerase_synthesis_read def: "A read produced by the polymerase based sequence by synthesis method." [SO:ke] comment: An example is a read produced by Illumina technology. synonym: "polymerase synthesis read" RELATED [] is_a: SO:0000150 ! read [Term] id: SO:0001427 name: cis_regulatory_frameshift_element def: "A structural region in an RNA molecule which promotes ribosomal frameshifting of cis coding sequence." [RFAM:jd] synonym: "cis regulatory frameshift element" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0001428 name: expressed_sequence_assembly def: "A sequence assembly derived from expressed sequences." [SO:ke] comment: From tracker [ 2372385 ] expressed_sequence_assembly. synonym: "expressed sequence assembly" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0001429 name: DNA_binding_site def: "A binding site that, in the molecule, interacts selectively and non-covalently with DNA." [SO:ke] synonym: "DNA binding site" EXACT [] is_a: SO:0001655 ! nucleotide_binding_site [Term] id: SO:0001431 name: cryptic_gene def: "A gene that is not transcribed under normal conditions and is not critical to normal cellular functioning." [SO:ke] synonym: "cryptic gene" EXACT [] is_a: SO:0000704 ! gene intersection_of: SO:0000704 ! gene intersection_of: has_quality SO:0000976 ! cryptic relationship: has_quality SO:0000976 ! cryptic [Term] id: SO:0001432 name: sequence_variant_affecting_polyadenylation comment: OBSOLETE: This term was deleted as it conflated more than one term. The alteration is separate from the effect. synonym: "mutation affecting polyadenylation" RELATED [] synonym: "sequence variant affecting polyadenylation" EXACT [] is_obsolete: true replaced_by: SO:0001545 [Term] id: SO:0001433 name: three_prime_RACE_clone def: "A three prime RACE (Rapid Amplification of cDNA Ends) clone is a cDNA clone copied from the 3' end of an mRNA (using a poly-dT primer to capture the polyA tail and a gene-specific or randomly primed 5' primer), and spliced into a vector for propagation in a suitable host." [modENCODE:nlw] synonym: "3' RACE clone" RELATED [] is_a: SO:0000317 ! cDNA_clone [Term] id: SO:0001434 name: cassette_pseudogene def: "A cassette pseudogene is a kind of gene in an inactive form which may recombine at a telomeric locus to form a functional copy." [SO:ke] comment: Requested by the Trypanosome community. synonym: "cassette pseudogene" EXACT [] synonym: "cassette type psedogene" RELATED [] is_a: SO:0001760 ! non_processed_pseudogene [Term] id: SO:0001435 name: alanine comment: A place holder for a cross product with chebi. synonym: "A" EXACT aa1 [] synonym: "Ala" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001436 name: valine comment: A place holder for a cross product with chebi. synonym: "V" EXACT aa1 [] synonym: "Val" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001437 name: leucine comment: A place holder for a cross product with chebi. synonym: "L" EXACT aa1 [] synonym: "Leu" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001438 name: isoleucine comment: A place holder for a cross product with chebi. synonym: "I" EXACT aa1 [] synonym: "Ile" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001439 name: proline comment: A place holder for a cross product with chebi. synonym: "P" EXACT aa1 [] synonym: "Pro" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001440 name: tryptophan comment: A place holder for a cross product with chebi. synonym: "Trp" EXACT aa3 [] synonym: "W" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001441 name: phenylalanine comment: A place holder for a cross product with chebi. synonym: "F" EXACT aa1 [] synonym: "Phe" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001442 name: methionine comment: A place holder for a cross product with chebi. synonym: "M" EXACT aa1 [] synonym: "Met" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001443 name: glycine comment: A place holder for a cross product with chebi. synonym: "G" EXACT aa1 [] synonym: "Gly" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001444 name: serine comment: A place holder for a cross product with chebi. synonym: "S" EXACT aa1 [] synonym: "Ser" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001445 name: threonine comment: A place holder for a cross product with chebi. synonym: "T" EXACT aa1 [] synonym: "Thr" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001446 name: tyrosine comment: A place holder for a cross product with chebi. synonym: "Tyr" EXACT aa3 [] synonym: "Y" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001447 name: cysteine comment: A place holder for a cross product with chebi. synonym: "C" EXACT aa1 [] synonym: "Cys" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001448 name: glutamine comment: A place holder for a cross product with chebi. synonym: "Gln" EXACT aa3 [] synonym: "Q" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001449 name: asparagine comment: A place holder for a cross product with chebi. synonym: "Asn" EXACT aa3 [] synonym: "N" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001450 name: lysine comment: A place holder for a cross product with chebi. synonym: "K" EXACT aa1 [] synonym: "Lys" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001451 name: arginine comment: A place holder for a cross product with chebi. synonym: "Arg" EXACT aa3 [] synonym: "R" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001452 name: histidine comment: A place holder for a cross product with chebi. synonym: "H" EXACT aa1 [] synonym: "His" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001453 name: aspartic_acid comment: A place holder for a cross product with chebi. synonym: "Asp" EXACT aa3 [] synonym: "aspartic acid" EXACT [] synonym: "D" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001454 name: glutamic_acid comment: A place holder for a cross product with chebi. synonym: "E" EXACT aa1 [] synonym: "Glu" EXACT aa3 [] synonym: "glutamic acid" EXACT [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001455 name: selenocysteine comment: A place holder for a cross product with chebi. synonym: "Sec" EXACT aa3 [] synonym: "U" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001456 name: pyrrolysine comment: A place holder for a cross product with chebi. synonym: "O" EXACT aa1 [] synonym: "Pyl" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001457 name: transcribed_cluster def: "A region defined by a set of transcribed sequences from the same gene or expressed pseudogene." [SO:ke] comment: This term was requested by Jeff Bowes, using the tracker, ID = 2594157. synonym: "transcribed cluster" EXACT [] synonym: "unigene cluster" RELATED [] is_a: SO:0001410 ! experimental_feature relationship: has_part SO:0000695 ! reagent [Term] id: SO:0001458 name: unigene_cluster def: "A kind of transcribed_cluster defined by a set of transcribed sequences from the a unique gene." [SO:ke] comment: This term was requested by Jeff Bowes, using the tracker, ID = 2594157. synonym: "unigene cluster" RELATED [] is_a: SO:0001457 ! transcribed_cluster [Term] id: SO:0001459 name: CRISPR def: "Clustered Palindromic Repeats interspersed with bacteriophage derived spacer sequences." [RFAM:jd] synonym: "Clustered_Regularly_Interspaced_Short_Palindromic_Repeat" EXACT [] synonym: "CRISPR element" EXACT [] xref: http:en.wikipedia.org/wiki/CRISPR is_a: SO:0000314 ! direct_repeat [Term] id: SO:0001460 name: insulator_binding_site def: "A binding site that, in an insulator region of a nucleotide molecule, interacts selectively and non-covalently with polypeptide residues." [SO:ke] comment: See tracker ID 2060908. synonym: "insulator binding site" RELATED [] is_a: SO:0001654 ! nucleotide_to_protein_binding_site relationship: part_of SO:0000627 ! insulator [Term] id: SO:0001461 name: enhancer_binding_site def: "A binding site that, in the enhancer region of a nucleotide molecule, interacts selectively and non-covalently with polypeptide residues." [SO:ke] synonym: "enhancer binding site" RELATED [] is_a: SO:0001654 ! nucleotide_to_protein_binding_site relationship: part_of SO:0000165 ! enhancer [Term] id: SO:0001462 name: contig_collection def: "A collection of contigs." [SO:ke] comment: See tracker ID: 2138359. synonym: "contig collection" EXACT [] is_a: SO:0001085 ! sequence_conflict is_a: SO:0001260 ! sequence_collection intersection_of: SO:0001085 ! sequence_conflict intersection_of: has_part SO:0000149 ! contig relationship: has_part SO:0000149 ! contig [Term] id: SO:0001463 name: lincRNA def: "A multiexonic non-coding RNA transcribed by RNA polymerase II." [PMID:19182780, SO:ke] synonym: "large intervening non-coding RNA" EXACT [] synonym: "long intergenic non-coding RNA" EXACT [] is_a: SO:0001877 ! lnc_RNA [Term] id: SO:0001464 name: UST def: "An EST spanning part or all of the untranslated regions of a protein-coding transcript." [SO:nlw] synonym: "UTR sequence tag" EXACT [] is_a: SO:0000345 ! EST [Term] id: SO:0001465 name: three_prime_UST def: "A UST located in the 3'UTR of a protein-coding transcript." [SO:nlw] synonym: "3' UST" RELATED [] is_a: SO:0001464 ! UST [Term] id: SO:0001466 name: five_prime_UST def: "An UST located in the 5'UTR of a protein-coding transcript." [SO:nlw] synonym: "5' UST" RELATED [] is_a: SO:0001464 ! UST [Term] id: SO:0001467 name: RST def: "A tag produced from a single sequencing read from a RACE product; typically a few hundred base pairs long." [SO:nlw] synonym: "RACE sequence tag" EXACT [] is_a: SO:0000345 ! EST [Term] id: SO:0001468 name: three_prime_RST def: "A tag produced from a single sequencing read from a 3'-RACE product; typically a few hundred base pairs long." [SO:nlw] synonym: "3' RST" EXACT [] is_a: SO:0001467 ! RST [Term] id: SO:0001469 name: five_prime_RST def: "A tag produced from a single sequencing read from a 5'-RACE product; typically a few hundred base pairs long." [SO:nlw] synonym: "5' RST" RELATED [] is_a: SO:0001467 ! RST [Term] id: SO:0001470 name: UST_match def: "A match against an UST sequence." [SO:nlw] synonym: "UST match" EXACT [] is_a: SO:0000102 ! expressed_sequence_match [Term] id: SO:0001471 name: RST_match def: "A match against an RST sequence." [SO:nlw] synonym: "RST match" EXACT [] is_a: SO:0000102 ! expressed_sequence_match [Term] id: SO:0001472 name: primer_match def: "A nucleotide match to a primer sequence." [SO:nlw] synonym: "primer match" EXACT [] is_a: SO:0000347 ! nucleotide_match [Term] id: SO:0001473 name: miRNA_antiguide def: "A region of the pri miRNA that basepairs with the guide to form the hairpin." [SO:ke] synonym: "miRNA antiguide " EXACT [] synonym: "miRNA passenger strand" EXACT [] synonym: "miRNA star" EXACT [] is_a: SO:0001243 ! miRNA_primary_transcript_region created_by: kareneilbeck creation_date: 2009-05-27T03:35:43Z [Term] id: SO:0001474 name: trans_splice_junction def: "The boundary between the spliced leader and the first exon of the mRNA." [SO:ke] synonym: "trans-splice junction" EXACT [] is_a: SO:0000699 ! junction created_by: kareneilbeck creation_date: 2009-07-13T04:50:49Z [Term] id: SO:0001475 name: outron def: "A region of a primary transcript, that is removed via trans splicing." [PMID:16401417, SO:ke] is_a: SO:0000835 ! primary_transcript_region created_by: kareneilbeck creation_date: 2009-07-14T11:36:08Z [Term] id: SO:0001476 name: natural_plasmid def: "A plasmid that occurs naturally." [SO:xp] synonym: "natural plasmid" EXACT [] is_a: SO:0000155 ! plasmid is_a: SO:0001038 ! extrachromosomal_mobile_genetic_element intersection_of: SO:0000155 ! plasmid intersection_of: has_quality SO:0000782 ! natural relationship: has_quality SO:0000782 ! natural created_by: kareneilbeck creation_date: 2009-09-01T03:43:06Z [Term] id: SO:0001477 name: gene_trap_construct def: "A gene trap construct is a type of engineered plasmid which is designed to integrate into a genome and produce a fusion transcript between exons of the gene into which it inserts and a reporter element in the construct. Gene traps contain a splice acceptor, do not contain promoter elements for the reporter, and are mutagenic. Gene traps may be bicistronic with the second cassette containing a promoter driving an a selectable marker." [ZFIN:dh] synonym: "gene trap construct" EXACT [] is_a: SO:0000637 ! engineered_plasmid created_by: kareneilbeck creation_date: 2009-09-01T03:49:09Z [Term] id: SO:0001478 name: promoter_trap_construct def: "A promoter trap construct is a type of engineered plasmid which is designed to integrate into a genome and express a reporter when inserted in close proximity to a promoter element. Promoter traps typically do not contain promoter elements and are mutagenic." [ZFIN:dh] synonym: "promoter trap construct" EXACT [] is_a: SO:0000637 ! engineered_plasmid created_by: kareneilbeck creation_date: 2009-09-01T03:52:01Z [Term] id: SO:0001479 name: enhancer_trap_construct def: "An enhancer trap construct is a type of engineered plasmid which is designed to integrate into a genome and express a reporter when the expression from a basic minimal promoter is enhanced by genomic enhancer elements. Enhancer traps contain promoter elements and are not usually mutagenic." [ZFIN:dh] synonym: "enhancer trap construct" EXACT [] is_a: SO:0000637 ! engineered_plasmid created_by: kareneilbeck creation_date: 2009-09-01T03:53:26Z [Term] id: SO:0001480 name: PAC_end def: "A region of sequence from the end of a PAC clone that may provide a highly specific marker." [ZFIN:mh] synonym: "PAC end" EXACT [] is_a: SO:0000150 ! read relationship: part_of SO:0000154 ! PAC created_by: kareneilbeck creation_date: 2009-09-09T05:18:12Z [Term] id: SO:0001481 name: RAPD def: "RAPD is a 'PCR product' where a sequence variant is identified through the use of PCR with random primers." [ZFIN:mh] synonym: "Random Amplification Polymorphic DNA" EXACT [] is_a: SO:0000006 ! PCR_product created_by: kareneilbeck creation_date: 2009-09-09T05:26:10Z [Term] id: SO:0001482 name: shadow_enhancer synonym: "shadow enhancer" EXACT [] is_a: SO:0000165 ! enhancer created_by: kareneilbeck creation_date: 2009-09-09T05:29:29Z [Term] id: SO:0001483 name: SNV def: "SNVs are single nucleotide positions in genomic DNA at which different sequence alternatives exist." [SO:bm] subset: SOFA synonym: "single nucleotide variant" EXACT [] is_a: SO:1000002 ! substitution created_by: kareneilbeck creation_date: 2009-10-08T11:37:49Z [Term] id: SO:0001484 name: X_element_combinatorial_repeat def: "An X element combinatorial repeat is a repeat region located between the X element and the telomere or adjacent Y' element." [http://www.yeastgenome.org/help/glossary.html] comment: X element combinatorial repeats contain Tbf1p binding sites,\nand possible functions include a role in telomerase-independent telomere\nmaintenance via recombination or as a barrier against transcriptional\nsilencing. These are usually present as a combination of one or more of\nseveral types of smaller elements (designated A, B, C, or D). This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880747. synonym: "X element combinatorial repeat" EXACT [] is_a: SO:0000657 ! repeat_region relationship: part_of SO:0000624 ! telomere created_by: kareneilbeck creation_date: 2009-11-10T11:03:37Z [Term] id: SO:0001485 name: Y_prime_element def: "A Y' element is a repeat region (SO:0000657) located adjacent to telomeric repeats or X element combinatorial repeats, either as a single copy or tandem repeat of two to four copies." [http:http://www.yeastgenome.org/help/glossary.html] comment: This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880747. synonym: "Y' element" EXACT [] is_a: SO:0000657 ! repeat_region relationship: part_of SO:0000624 ! telomere created_by: kareneilbeck creation_date: 2009-11-10T12:08:57Z [Term] id: SO:0001486 name: standard_draft def: "The status of a whole genome sequence, where the data is minimally filtered or un-filtered, from any number of sequencing platforms, and is assembled into contigs. Genome sequence of this quality may harbour regions of poor quality and can be relatively incomplete." [DOI:10.1126] synonym: "standard draft" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T12:48:32Z [Term] id: SO:0001487 name: high_quality_draft def: "The status of a whole genome sequence, where overall coverage represents at least 90 percent of the genome." [DOI:10.1126] synonym: "high quality draft" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T12:52:36Z [Term] id: SO:0001488 name: improved_high_quality_draft def: "The status of a whole genome sequence, where additional work has been performed, using either manual or automated methods, such as gap resolution." [DOI:10.1126] synonym: "improved high quality draft" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T12:54:35Z [Term] id: SO:0001489 name: annotation_directed_improved_draft def: "The status of a whole genome sequence,where annotation, and verification of coding regions has occurred." [DOI:10.1126] synonym: "annotation directed improvement" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T12:57:10Z [Term] id: SO:0001490 name: noncontiguous_finished def: "The status of a whole genome sequence, where the assembly is high quality, closure approaches have been successful for most gaps, misassemblies and low quality regions." [DOI:10.1126] synonym: "non contiguous finished" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T01:01:07Z [Term] id: SO:0001491 name: finished_genome def: "The status of a whole genome sequence, with less than 1 error per 100,000 base pairs." [DOI:10.1126] synonym: "finished" EXACT [] synonym: "finished genome" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T01:04:43Z [Term] id: SO:0001492 name: intronic_regulatory_region def: "A regulatory region that is part of an intron." [SO:ke] synonym: "intronic regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region relationship: part_of SO:0000188 ! intron created_by: kareneilbeck creation_date: 2009-11-08T02:48:02Z [Term] id: SO:0001493 name: centromere_DNA_Element_I def: "A centromere DNA Element I (CDEI) is a conserved region, part of the centromere, consisting of a consensus region composed of 8-11bp which enables binding by the centromere binding factor 1(Cbf1p)." [PMID:11222754] comment: This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880699. synonym: "CDEI" EXACT [] synonym: "Centromere DNA Element I" EXACT [] is_a: SO:0000330 ! conserved_region relationship: part_of SO:0001794 ! point_centromere created_by: kareneilbeck creation_date: 2009-11-09T05:47:23Z [Term] id: SO:0001494 name: centromere_DNA_Element_II def: "A centromere DNA Element II (CDEII) is part a conserved region of the centromere, consisting of a consensus region that is AT-rich and ~ 75-100 bp in length." [PMID:11222754] comment: This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880699. synonym: "CDEII" EXACT [] synonym: "centromere DNA Element II" EXACT [] is_a: SO:0000330 ! conserved_region relationship: part_of SO:0001794 ! point_centromere created_by: kareneilbeck creation_date: 2009-11-09T05:51:26Z [Term] id: SO:0001495 name: centromere_DNA_Element_III def: "A centromere DNA Element I (CDEI) is a conserved region, part of the centromere, consisting of a consensus region that consists of a 25-bp which enables binding by the centromere DNA binding factor 3 (CBF3) complex." [PMID:11222754] comment: This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880699. synonym: "CDEIII" EXACT [] synonym: "centromere DNA Element III" EXACT [] is_a: SO:0000330 ! conserved_region relationship: part_of SO:0001794 ! point_centromere created_by: kareneilbeck creation_date: 2009-11-09T05:54:47Z [Term] id: SO:0001496 name: telomeric_repeat def: "The telomeric repeat is a repeat region, part of the chromosome, which in yeast, is a G-rich terminal sequence of the form (TG(1-3))n or more precisely ((TG)(1-6)TG(2-3))n." [PMID:8720065] comment: The repeats are maintained by telomerase and there is generally 300 (+/-) 75 bp of TG(1-3) at a given end. Telomeric repeats function in completing chromosome replication and protecting the ends from degradation and end-to-end fusions. This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880739. synonym: "telomeric repeat" EXACT [] is_a: SO:0000657 ! repeat_region relationship: part_of SO:0000624 ! telomere created_by: kareneilbeck creation_date: 2009-11-09T06:00:42Z [Term] id: SO:0001497 name: X_element def: "The X element is a conserved region, of the telomere, of ~475 bp that contains an ARS sequence and in most cases an Abf1p binding site." [http://www.yeastgenome.org/help/glossary.html#xelemcoresequence] comment: Possible functions include roles in chromosomal segregation,\nmaintenance of chromosome stability, recombinational sequestering, or as a\nbarrier to transcriptional silencing. This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880747. synonym: "X element" RELATED [] is_a: SO:0000330 ! conserved_region relationship: part_of SO:0000624 ! telomere created_by: kareneilbeck creation_date: 2009-11-10T10:56:54Z [Term] id: SO:0001498 name: YAC_end def: "A region of sequence from the end of a YAC clone that may provide a highly specific marker." [SO:ke] synonym: "YAC end" EXACT [] is_a: SO:0000150 ! read relationship: part_of SO:0000152 ! YAC created_by: kareneilbeck creation_date: 2009-11-19T11:07:18Z [Term] id: SO:0001499 name: whole_genome_sequence_status def: "The status of whole genome sequence." [DOI:10.1126] comment: This terms and children were added to SO in response to tracker request by Patrick Chain. The paper Genome Project Standards in a New Era of Sequencing. Science October 9th 2009, addresses these terms. synonym: "whole genome sequence status" EXACT [] is_a: SO:0000905 ! status created_by: kareneilbeck creation_date: 2009-10-23T12:47:47Z [Term] id: SO:0001500 name: heritable_phenotypic_marker def: "A biological_region characterized as a single heritable trait in a phenotype screen. The heritable phenotype may be mapped to a chromosome but generally has not been characterized to a specific gene locus." [JAX:hdene] synonym: "heritable phenotypic marker" EXACT [] synonym: "phenotypic marker" EXACT [] is_a: SO:0001645 ! genetic_marker created_by: kareneilbeck creation_date: 2009-12-07T01:50:55Z [Term] id: SO:0001501 name: peptide_collection def: "A collection of peptide sequences." [BBOP:nlw] comment: Term requested via tracker ID: 2910829. synonym: "peptide collection" EXACT [] synonym: "peptide set" EXACT [] is_a: SO:0001260 ! sequence_collection intersection_of: SO:0001260 ! sequence_collection intersection_of: has_part SO:0000104 ! polypeptide relationship: has_part SO:0000104 ! polypeptide created_by: kareneilbeck creation_date: 2009-12-11T10:58:58Z [Term] id: SO:0001502 name: high_identity_region def: "An experimental feature with high sequence identity to another sequence." [SO:ke] comment: Requested by tracker ID: 2902685. synonym: "high identity region" EXACT [] is_a: SO:0001410 ! experimental_feature created_by: kareneilbeck creation_date: 2009-12-11T11:06:05Z [Term] id: SO:0001503 name: processed_transcript def: "A transcript for which no open reading frame has been identified and for which no other function has been determined." [MGI:hdeen] comment: Ensembl and Vega also use this term name. Requested by Howard Deen of MGI. synonym: "processed transcript" EXACT [] is_a: SO:0000673 ! transcript created_by: kareneilbeck creation_date: 2009-12-21T05:37:14Z [Term] id: SO:0001504 name: assortment_derived_variation def: "A chromosome variation derived from an event during meiosis." [SO:ke] synonym: "assortment derived variation" RELATED [] is_a: SO:0000240 ! chromosome_variation created_by: kareneilbeck creation_date: 2010-03-02T05:03:18Z [Term] id: SO:0001505 name: reference_genome def: "A collection of sequences (often chromosomes) taken as the standard for a given organism and genome assembly." [SO:ke] synonym: "reference genome" RELATED [] is_a: SO:0001026 ! genome created_by: kareneilbeck creation_date: 2010-03-03T02:10:03Z [Term] id: SO:0001506 name: variant_genome def: "A collection of sequences (often chromosomes) of an individual." [SO:ke] synonym: "variant genome" RELATED [] is_a: SO:0001026 ! genome created_by: kareneilbeck creation_date: 2010-03-03T02:11:25Z [Term] id: SO:0001507 name: variant_collection def: "A collection of one or more sequences of an individual." [SO:ke] synonym: "variant collection" RELATED [] is_a: SO:0001260 ! sequence_collection intersection_of: SO:0001260 ! sequence_collection intersection_of: has_part SO:0001059 ! sequence_alteration relationship: has_part SO:0001059 ! sequence_alteration created_by: kareneilbeck creation_date: 2010-03-03T02:13:28Z [Term] id: SO:0001508 name: alteration_attribute synonym: "alteration attribute" EXACT [] is_a: SO:0000733 ! feature_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:53:23Z [Term] id: SO:0001509 name: chromosomal_variation_attribute synonym: "chromosomal variation attribute" EXACT [] is_a: SO:0001508 ! alteration_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:54:30Z [Term] id: SO:0001510 name: intrachromosomal is_a: SO:0001509 ! chromosomal_variation_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:55:25Z [Term] id: SO:0001511 name: interchromosomal is_a: SO:0001509 ! chromosomal_variation_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:55:43Z [Term] id: SO:0001512 name: insertion_attribute def: "A quality of a chromosomal insertion,." [SO:ke] synonym: "insertion attribute" EXACT [] is_a: SO:0001508 ! alteration_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:55:56Z [Term] id: SO:0001513 name: tandem is_a: SO:0001512 ! insertion_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:56:37Z [Term] id: SO:0001514 name: direct def: "A quality of an insertion where the insert is not in a cytologically inverted orientation." [SO:ke] is_a: SO:0001512 ! insertion_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:56:49Z [Term] id: SO:0001515 name: inverted def: "A quality of an insertion where the insert is in a cytologically inverted orientation." [SO:ke] is_a: SO:0001512 ! insertion_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:57:40Z [Term] id: SO:0001516 name: free def: "The quality of a duplication where the new region exists independently of the original." [SO:ke] is_a: SO:0001523 ! duplication_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:57:51Z [Term] id: SO:0001517 name: inversion_attribute synonym: "inversion attribute" EXACT [] is_a: SO:0001508 ! alteration_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:58:10Z [Term] id: SO:0001518 name: pericentric is_a: SO:0001517 ! inversion_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:58:24Z [Term] id: SO:0001519 name: paracentric is_a: SO:0001517 ! inversion_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:58:35Z [Term] id: SO:0001520 name: translocaton_attribute synonym: "translocation attribute" EXACT [] is_a: SO:0001508 ! alteration_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:58:47Z [Term] id: SO:0001521 name: reciprocal is_a: SO:0001520 ! translocaton_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:59:34Z [Term] id: SO:0001522 name: insertional is_a: SO:0001520 ! translocaton_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:59:51Z [Term] id: SO:0001523 name: duplication_attribute synonym: "duplication attribute" RELATED [] is_a: SO:0001508 ! alteration_attribute created_by: kareneilbeck creation_date: 2010-03-05T01:56:33Z [Term] id: SO:0001524 name: chromosomally_aberrant_genome synonym: "chromosomally aberrant genome" RELATED [] is_a: SO:0001506 ! variant_genome created_by: kareneilbeck creation_date: 2010-03-05T02:21:00Z [Term] id: SO:0001525 name: assembly_error_correction def: "A region of sequence where the final nucleotide assignment differs from the original assembly due to an improvement that replaces a mistake." [SO:ke] synonym: "assembly error correction" RELATED [] is_a: SO:0000413 ! sequence_difference created_by: kareneilbeck creation_date: 2010-03-09T02:16:31Z [Term] id: SO:0001526 name: base_call_error_correction def: "A region of sequence where the final nucleotide assignment is different from that given by the base caller due to an improvement that replaces a mistake." [SO:ke] synonym: "base call error correction" RELATED [] is_a: SO:0000413 ! sequence_difference created_by: kareneilbeck creation_date: 2010-03-09T02:18:07Z [Term] id: SO:0001527 name: peptide_localization_signal def: "A region of peptide sequence used to target the polypeptide molecule to a specific organelle." [SO:ke] subset: SOFA synonym: "localization signal" RELATED [] synonym: "peptide localization signal" EXACT [] is_a: SO:0000839 ! polypeptide_region created_by: kareneilbeck creation_date: 2010-03-11T02:15:05Z [Term] id: SO:0001528 name: nuclear_localization_signal def: "A polypeptide region that targets a polypeptide to the nucleus." [SO:ke] synonym: "NLS" EXACT [] xref: http://en.wikipedia.org/wiki/Nuclear_localization_signal "wikipedia" is_a: SO:0001527 ! peptide_localization_signal created_by: kareneilbeck creation_date: 2010-03-11T02:16:38Z [Term] id: SO:0001529 name: endosomal_localization_signal def: "A polypeptide region that targets a polypeptide to the endosome." [SO:ke] synonym: "endosomal localization signal" EXACT [] is_a: SO:0001527 ! peptide_localization_signal created_by: kareneilbeck creation_date: 2010-03-11T02:20:58Z [Term] id: SO:0001530 name: lysosomal_localization_signal def: "A polypeptide region that targets a polypeptide to the lysosome." [SO:ke] synonym: "lysosomal localization signal" EXACT [] is_a: SO:0001527 ! peptide_localization_signal created_by: kareneilbeck creation_date: 2010-03-11T02:24:10Z [Term] id: SO:0001531 name: nuclear_export_signal def: "A polypeptide region that targets a polypeptide to he cytoplasm." [SO:ke] synonym: "NES" EXACT [] synonym: "nuclear export signal" EXACT [] xref: http://en.wikipedia.org/wiki/Nuclear_export_signal is_a: SO:0001527 ! peptide_localization_signal created_by: kareneilbeck creation_date: 2010-03-11T02:25:25Z [Term] id: SO:0001532 name: recombination_signal_sequence def: "A region recognized by a recombinase." [SO:ke] synonym: "recombination signal sequence" RELATED [] xref: http://en.wikipedia.org/wiki/Recombination_Signal_Sequences "wikipedia" is_a: SO:0000299 ! specific_recombination_site created_by: kareneilbeck creation_date: 2010-03-11T03:16:47Z [Term] id: SO:0001533 name: cryptic_splice_site def: "A splice site that is in part of the transcript not normally spliced. They occur via mutation or transcriptional error." [SO:ke] synonym: "cryptic splice signal" RELATED [] synonym: "cryptic splice site" EXACT [] is_a: SO:0000162 ! splice_site created_by: kareneilbeck creation_date: 2010-03-11T03:25:06Z [Term] id: SO:0001534 name: nuclear_rim_localization_signal def: "A polypeptide region that targets a polypeptide to the nuclear rim." [SO:ke] synonym: "nuclear rim localization signal" RELATED [] xref: PMID:16027110 is_a: SO:0001527 ! peptide_localization_signal created_by: kareneilbeck creation_date: 2010-03-11T03:31:30Z [Term] id: SO:0001535 name: p_element def: "A P_element is a DNA transposon responsible for hybrid dysgenesis." [SO:ke] synonym: "P element" RELATED [] is_a: SO:0000182 ! DNA_transposon created_by: kareneilbeck creation_date: 2010-03-12T03:40:33Z [Term] id: SO:0001536 name: functional_variant def: "A sequence variant in which the function of a gene product is altered with respect to a reference." [SO:ke] synonym: "functional variant" EXACT [] is_a: SO:0001060 ! sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T11:30:25Z [Term] id: SO:0001537 name: structural_variant def: "A sequence variant that changes one or more sequence features." [SO:ke] synonym: "structural variant" RELATED [] is_a: SO:0001060 ! sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T11:31:01Z [Term] id: SO:0001538 name: transcript_function_variant def: "A sequence variant which alters the functioning of a transcript with respect to a reference sequence." [SO:ke] synonym: "transcript function variant" EXACT [] is_a: SO:0001536 ! functional_variant created_by: kareneilbeck creation_date: 2010-03-22T11:32:58Z [Term] id: SO:0001539 name: translational_product_function_variant def: "A sequence variant that affects the functioning of a translational product with respect to a reference sequence." [SO:ke] synonym: "translational product variant" EXACT [] is_a: SO:0001536 ! functional_variant created_by: kareneilbeck creation_date: 2010-03-22T11:46:15Z [Term] id: SO:0001540 name: level_of_transcript_variant def: "A sequence variant which alters the level of a transcript." [SO:ke] synonym: "level of transcript variant" EXACT [] is_a: SO:0001538 ! transcript_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:47:07Z [Term] id: SO:0001541 name: decreased_transcript_level_variant def: "A sequence variant that increases the level of mature, spliced and processed RNA with respect to a reference sequence." [SO:ke] synonym: "decreased transcript level" EXACT [] is_a: SO:0001540 ! level_of_transcript_variant created_by: kareneilbeck creation_date: 2010-03-22T11:47:47Z [Term] id: SO:0001542 name: increased_transcript_level_variant def: "A sequence variant that increases the level of mature, spliced and processed RNA with respect to a reference sequence." [SO:ke] synonym: "increased transcript level variant" EXACT [] is_a: SO:0001540 ! level_of_transcript_variant created_by: kareneilbeck creation_date: 2010-03-22T11:48:17Z [Term] id: SO:0001543 name: transcript_processing_variant def: "A sequence variant that affects the post transcriptional processing of a transcript with respect to a reference sequence." [SO:ke] synonym: "transcript processing variant" EXACT [] is_a: SO:0001538 ! transcript_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:48:48Z [Term] id: SO:0001544 name: editing_variant def: "A transcript processing variant whereby the process of editing is disrupted with respect to the reference." [SO:ke] synonym: "editing variant" EXACT [] is_a: SO:0001543 ! transcript_processing_variant created_by: kareneilbeck creation_date: 2010-03-22T11:49:25Z [Term] id: SO:0001545 name: polyadenylation_variant def: "A sequence variant that changes polyadenylation with respect to a reference sequence." [SO:ke] synonym: "polyadenylation variant" EXACT [] is_a: SO:0001543 ! transcript_processing_variant created_by: kareneilbeck creation_date: 2010-03-22T11:49:40Z [Term] id: SO:0001546 name: transcript_stability_variant def: "A variant that changes the stability of a transcript with respect to a reference sequence." [SO:ke] synonym: "transcript stability variant" EXACT [] is_a: SO:0001538 ! transcript_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:50:01Z [Term] id: SO:0001547 name: decreased_transcript_stability_variant def: "A sequence variant that decreases transcript stability with respect to a reference sequence." [SO:ke] synonym: "decrease transcript stability variant" EXACT [] is_a: SO:0001546 ! transcript_stability_variant created_by: kareneilbeck creation_date: 2010-03-22T11:50:23Z [Term] id: SO:0001548 name: increased_transcript_stability_variant def: "A sequence variant that increases transcript stability with respect to a reference sequence." [SO:ke] synonym: "increased transcript stability variant" EXACT [] is_a: SO:0001546 ! transcript_stability_variant created_by: kareneilbeck creation_date: 2010-03-22T11:50:39Z [Term] id: SO:0001549 name: transcription_variant def: "A variant that changes alters the transcription of a transcript with respect to a reference sequence." [SO:ke] synonym: "transcription variant" EXACT [] is_a: SO:0001538 ! transcript_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:51:26Z [Term] id: SO:0001550 name: rate_of_transcription_variant def: "A sequence variant that changes the rate of transcription with respect to a reference sequence." [SO:ke] synonym: "rate of transcription variant" EXACT [] is_a: SO:0001549 ! transcription_variant created_by: kareneilbeck creation_date: 2010-03-22T11:51:50Z [Term] id: SO:0001551 name: increased_transcription_rate_variant def: "A sequence variant that increases the rate of transcription with respect to a reference sequence." [SO:ke] synonym: "increased transcription rate variant" EXACT [] is_a: SO:0001550 ! rate_of_transcription_variant created_by: kareneilbeck creation_date: 2010-03-22T11:52:17Z [Term] id: SO:0001552 name: decreased_transcription_rate_variant def: "A sequence variant that decreases the rate of transcription with respect to a reference sequence." [SO:ke] synonym: "decreased transcription rate variant" EXACT [] is_a: SO:0001550 ! rate_of_transcription_variant created_by: kareneilbeck creation_date: 2010-03-22T11:52:43Z [Term] id: SO:0001553 name: translational_product_level_variant def: "A functional variant that changes the translational product level with respect to a reference sequence." [SO:ke] synonym: "translational product level variant" EXACT [] is_a: SO:0001539 ! translational_product_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:53:32Z [Term] id: SO:0001554 name: polypeptide_function_variant def: "A sequence variant which changes polypeptide functioning with respect to a reference sequence." [SO:ke] synonym: "polypeptide function variant" EXACT [] is_a: SO:0001539 ! translational_product_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:53:54Z [Term] id: SO:0001555 name: decreased_translational_product_level def: "A sequence variant which decreases the translational product level with respect to a reference sequence." [SO:ke] synonym: "decrease translational product level" EXACT [] is_a: SO:0001553 ! translational_product_level_variant created_by: kareneilbeck creation_date: 2010-03-22T11:54:25Z [Term] id: SO:0001556 name: increased_translational_product_level def: "A sequence variant which increases the translational product level with respect to a reference sequence." [SO:ke] synonym: "increase translational product level" EXACT [] is_a: SO:0001553 ! translational_product_level_variant created_by: kareneilbeck creation_date: 2010-03-22T11:55:25Z [Term] id: SO:0001557 name: polypeptide_gain_of_function_variant def: "A sequence variant which causes gain of polypeptide function with respect to a reference sequence." [SO:ke] synonym: "polypeptide gain of function variant" EXACT [] is_a: SO:0001554 ! polypeptide_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:56:12Z [Term] id: SO:0001558 name: polypeptide_localization_variant def: "A sequence variant which changes the localization of a polypeptide with respect to a reference sequence." [SO:ke] synonym: "polypeptide localization variant" EXACT [] is_a: SO:0001554 ! polypeptide_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:56:37Z [Term] id: SO:0001559 name: polypeptide_loss_of_function_variant def: "A sequence variant that causes the loss of a polypeptide function with respect to a reference sequence." [SO:ke] synonym: "polypeptide loss of function variant" EXACT [] is_a: SO:0001554 ! polypeptide_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:56:58Z [Term] id: SO:0001560 name: inactive_ligand_binding_site def: "A sequence variant that causes the inactivation of a ligand binding site with respect to a reference sequence." [SO:ke] synonym: "inactive ligand binding site" EXACT [] is_a: SO:0001559 ! polypeptide_loss_of_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:58:00Z [Term] id: SO:0001561 name: polypeptide_partial_loss_of_function def: "A sequence variant that causes some but not all loss of polypeptide function with respect to a reference sequence." [SO:ke] synonym: "polypeptide partial loss of function" EXACT [] is_a: SO:0001559 ! polypeptide_loss_of_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:58:32Z [Term] id: SO:0001562 name: polypeptide_post_translational_processing_variant def: "A sequence variant that causes a change in post translational processing of the peptide with respect to a reference sequence." [SO:ke] synonym: "polypeptide post translational processing variant" EXACT [] is_a: SO:0001554 ! polypeptide_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:59:06Z [Term] id: SO:0001563 name: copy_number_change def: "A sequence variant where copies of a feature (CNV) are either increased or decreased." [SO:ke] synonym: "copy number change" EXACT [] is_a: SO:0001537 ! structural_variant created_by: kareneilbeck creation_date: 2010-03-22T02:27:33Z [Term] id: SO:0001564 name: gene_variant def: "A sequence variant where the structure of the gene is changed." [SO:ke] synonym: "gene structure variant" EXACT [] is_a: SO:0001878 ! feature_variant created_by: kareneilbeck creation_date: 2010-03-22T02:28:01Z [Term] id: SO:0001565 name: gene_fusion def: "A sequence variant whereby a two genes have become joined." [SO:ke] synonym: "gene fusion" EXACT [] is_a: SO:0001564 ! gene_variant created_by: kareneilbeck creation_date: 2010-03-22T02:28:28Z [Term] id: SO:0001566 name: regulatory_region_variant def: "A sequence variant located within a regulatory region." [SO:ke] comment: EBI term: Regulatory region variations - In regulatory region annotated by Ensembl. synonym: "regulatory region variant" EXACT [] synonym: "regulatory_region_" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001878 ! feature_variant created_by: kareneilbeck creation_date: 2010-03-22T02:28:48Z [Term] id: SO:0001567 name: stop_retained_variant def: "A sequence variant where at least one base in the terminator codon is changed, but the terminator remains." [SO:ke] synonym: "stop retained variant" EXACT [] is_a: SO:0001590 ! terminator_codon_variant is_a: SO:0001819 ! synonymous_variant created_by: kareneilbeck creation_date: 2010-04-19T05:02:30Z [Term] id: SO:0001568 name: splicing_variant def: "A sequence variant that changes the process of splicing." [SO:ke] synonym: "splicing variant" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001564 ! gene_variant created_by: kareneilbeck creation_date: 2010-03-22T02:29:22Z [Term] id: SO:0001569 name: cryptic_splice_site_variant def: "A sequence variant causing a new (functional) splice site." [EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html] synonym: "cryptic splice site activation" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001568 ! splicing_variant created_by: kareneilbeck creation_date: 2010-03-22T02:29:41Z [Term] id: SO:0001570 name: cryptic_splice_acceptor def: "A sequence variant whereby a new splice site is created due to the activation of a new acceptor." [SO:ke] synonym: "cryptic splice acceptor" EXACT [] is_a: SO:0001569 ! cryptic_splice_site_variant created_by: kareneilbeck creation_date: 2010-03-22T02:30:11Z [Term] id: SO:0001571 name: cryptic_splice_donor def: "A sequence variant whereby a new splice site is created due to the activation of a new donor." [SO:ke] synonym: "cryptic splice donor" EXACT [] is_a: SO:0001569 ! cryptic_splice_site_variant created_by: kareneilbeck creation_date: 2010-03-22T02:30:35Z [Term] id: SO:0001572 name: exon_loss def: "A sequence variant whereby an exon is lost from the transcript." [SO:ke] synonym: "exon loss" EXACT [] is_a: SO:0001568 ! splicing_variant created_by: kareneilbeck creation_date: 2010-03-22T02:31:09Z [Term] id: SO:0001573 name: intron_gain def: "A sequence variant whereby an intron is gained by the processed transcript; usually a result of an alteration of the donor or acceptor." [EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html] synonym: "intron gain" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001568 ! splicing_variant created_by: kareneilbeck creation_date: 2010-03-22T02:31:25Z [Term] id: SO:0001574 name: splice_acceptor_variant def: "A splice variant that changes the 2 base region at the 3' end of an intron." [SO:ke] synonym: "splice acceptor variant" EXACT [] is_a: SO:0001629 ! splice_site_variant created_by: kareneilbeck creation_date: 2010-03-22T02:31:52Z [Term] id: SO:0001575 name: splice_donor_variant def: "A splice variant that changes the2 base region at the 5' end of an intron." [SO:ke] synonym: "splice donor variant" EXACT [] is_a: SO:0001629 ! splice_site_variant created_by: kareneilbeck creation_date: 2010-03-22T02:32:10Z [Term] id: SO:0001576 name: transcript_variant def: "A sequence variant that changes the structure of the transcript." [SO:ke] synonym: "transcript variant" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001564 ! gene_variant created_by: kareneilbeck creation_date: 2010-03-22T02:32:41Z [Term] id: SO:0001577 name: complex_transcript_variant def: "A transcript variant with a complex INDEL- Insertion or deletion that spans an exon/intron border or a coding sequence/UTR border." [http://ensembl.org/info/docs/variation/index.html] comment: EBI term: Complex InDel - Insertion or deletion that spans an exon/intron border or a coding sequence/UTR border. synonym: "complex transcript variant" EXACT [] synonym: "complex_indel" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "complext change in transcript" EXACT [] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-22T02:33:03Z [Term] id: SO:0001578 name: stop_lost def: "A sequence variant where at least one base of the terminator codon (stop) is changed, resulting in an elongated transcript." [SO:ke] comment: EBI term: Stop lost - In coding sequence, resulting in the loss of a stop codon. synonym: "stop codon lost" EXACT [] synonym: "stop lost" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001590 ! terminator_codon_variant is_a: SO:0001650 ! inframe_variant is_a: SO:0001907 ! feature_elongation created_by: kareneilbeck creation_date: 2010-03-23T03:46:42Z [Term] id: SO:0001579 name: transcript_sequence_variant synonym: "transcript sequence variant" EXACT [] is_obsolete: true [Term] id: SO:0001580 name: coding_sequence_variant alt_id: SO:0001581 def: "A sequence variant that changes the coding sequence." [SO:ke] synonym: "coding sequence variant" EXACT [] synonym: "coding variant" EXACT [] synonym: "codon variant" EXACT [] synonym: "codon_variant" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001791 ! exon_variant created_by: kareneilbeck creation_date: 2010-03-22T02:34:36Z [Term] id: SO:0001582 name: initiator_codon_variant def: "A codon variant that changes at least one base of the first codon of a transcript." [SO:ke] synonym: "initiatior codon variant" EXACT [] synonym: "initiator codon change" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html xref: loinc:LA6695-6 "Initiating Methionine" is_a: SO:0001650 ! inframe_variant created_by: kareneilbeck creation_date: 2010-03-22T02:35:18Z [Term] id: SO:0001583 name: missense_variant alt_id: SO:0001584 alt_id: SO:0001783 def: "A sequence variant, that changes one or more bases, resulting in a different amino acid sequence but where the length is preserved." [EBI:fc, EBI:gr, SO:ke] comment: EBI term: Non-synonymous SNPs. SNPs that are located in the coding sequence and result in an amino acid change in the encoded peptide sequence. A change that causes a non_synonymous_codon can be more than 3 bases - for example 4 base substitution. synonym: "missense" EXACT [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] synonym: "missense codon" EXACT [] synonym: "non synonymous codon" EXACT [] synonym: "non synonymous variant" EXACT [] synonym: "non_synonymous_coding" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html xref: http://en.wikipedia.org/wiki/Missense_mutation xref: loinc:LA6698-0 "Missense" is_a: SO:0001650 ! inframe_variant created_by: kareneilbeck creation_date: 2010-03-22T02:35:49Z [Term] id: SO:0001585 name: conservative_missense_variant def: "A sequence variant whereby at least one base of a codon is changed resulting in a codon that encodes for a different but similar amino acid. These variants may or may not be deleterious." [SO:ke] synonym: "conservative missense codon" EXACT [] synonym: "conservative missense variant" EXACT [] synonym: "neutral missense codon" RELATED [] synonym: "quiet missense codon" RELATED [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001583 ! missense_variant created_by: kareneilbeck creation_date: 2010-03-22T02:36:40Z [Term] id: SO:0001586 name: non_conservative_missense_variant def: "A sequence variant whereby at least one base of a codon is changed resulting in a codon that encodes for an amino acid with different biochemical properties." [SO:ke] synonym: "non conservative missense codon" EXACT [] synonym: "non conservative missense variant" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001583 ! missense_variant created_by: kareneilbeck creation_date: 2010-03-22T02:37:16Z [Term] id: SO:0001587 name: stop_gained def: "A sequence variant whereby at least one base of a codon is changed, resulting in a premature stop codon, leading to a shortened transcript." [SO:ke] comment: EBI term: Stop gained - In coding sequence, resulting in the gain of a stop codon (i.e. leading to a shortened peptide sequence). synonym: "nonsense" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] synonym: "nonsense codon" EXACT [] synonym: "stop codon gained" RELATED [] synonym: "stop gained" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] xref: loinc:LA6699-8 "Nonsense" is_a: SO:0001650 ! inframe_variant is_a: SO:0001906 ! feature_truncation created_by: kareneilbeck creation_date: 2010-03-22T02:37:52Z [Term] id: SO:0001589 name: frameshift_variant def: "A sequence variant which causes a disruption of the translational reading frame, because the number of nucleotides inserted or deleted is not a multiple of three." [SO:ke] comment: EBI term:Frameshift variations - In coding sequence, resulting in a frameshift. synonym: "frameshift variant" EXACT [] synonym: "frameshift_" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] synonym: "frameshift_coding" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] xref: loinc:LA6694-9 "Frameshift" is_a: SO:0001818 ! protein_altering_variant created_by: kareneilbeck creation_date: 2010-03-22T02:40:19Z [Term] id: SO:0001590 name: terminator_codon_variant alt_id: SO:0001625 def: "A sequence variant whereby at least one of the bases in the terminator codon is changed." [SO:ke] comment: The terminal codon may be the terminator, or in an incomplete transcript the last available codon. synonym: "terminal codon variant" EXACT [] synonym: "terminal_codon_variant" EXACT [] synonym: "terminator codon variant" EXACT [] xref: loinc:LA6700-2 "Stop Codon Mutation" is_a: SO:0001580 ! coding_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:40:37Z [Term] id: SO:0001591 name: frame_restoring_variant def: "A sequence variant that reverts the sequence of a previous frameshift mutation back to the initial frame." [SO:ke] synonym: "frame restoring variant" EXACT [] is_a: SO:0001589 ! frameshift_variant created_by: kareneilbeck creation_date: 2010-03-22T02:41:09Z [Term] id: SO:0001592 name: minus_1_frameshift_variant def: "A sequence variant which causes a disruption of the translational reading frame, by shifting one base ahead." [http://arjournals.annualreviews.org/doi/pdf/10.1146/annurev.ge.08.120174.001535] synonym: "-1 frameshift variant" EXACT [] synonym: "minus 1 frameshift variant" EXACT [] is_a: SO:0001589 ! frameshift_variant created_by: kareneilbeck creation_date: 2010-03-22T02:41:30Z [Term] id: SO:0001593 name: minus_2_frameshift_variant synonym: "-2 frameshift variant" EXACT [] synonym: "minus 2 frameshift variant" EXACT [] is_a: SO:0001589 ! frameshift_variant created_by: kareneilbeck creation_date: 2010-03-22T02:41:52Z [Term] id: SO:0001594 name: plus_1_frameshift_variant def: "A sequence variant which causes a disruption of the translational reading frame, by shifting one base backward." [http://arjournals.annualreviews.org/doi/pdf/10.1146/annurev.ge.08.120174.001535] synonym: "+1 frameshift variant" EXACT [] synonym: "plus 1 frameshift variant" EXACT [] is_a: SO:0001589 ! frameshift_variant created_by: kareneilbeck creation_date: 2010-03-22T02:42:06Z [Term] id: SO:0001595 name: plus_2_frameshift_variant synonym: "+2 frameshift variant" EXACT [] synonym: "plus 2 frameshift variant" EXACT [] is_a: SO:0001589 ! frameshift_variant created_by: kareneilbeck creation_date: 2010-03-22T02:42:23Z [Term] id: SO:0001596 name: transcript_secondary_structure_variant def: "A sequence variant within a transcript that changes the secondary structure of the RNA product." [SO:ke] synonym: "transcript secondary structure variant" EXACT [] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-22T02:43:18Z [Term] id: SO:0001597 name: compensatory_transcript_secondary_structure_variant def: "A secondary structure variant that compensate for the change made by a previous variant." [SO:ke] synonym: "compensatory transcript secondary structure variant" EXACT [] is_a: SO:0001596 ! transcript_secondary_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:43:54Z [Term] id: SO:0001598 name: translational_product_structure_variant def: "A sequence variant within the transcript that changes the structure of the translational product." [SO:ke] synonym: "translational product structure variant" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001564 ! gene_variant created_by: kareneilbeck creation_date: 2010-03-22T02:44:17Z [Term] id: SO:0001599 name: 3D_polypeptide_structure_variant def: "A sequence variant that changes the resulting polypeptide structure." [SO:ke] synonym: "3D polypeptide structure variant" EXACT [] is_a: SO:0001598 ! translational_product_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:44:46Z [Term] id: SO:0001600 name: complex_3D_structural_variant def: "A sequence variant that changes the resulting polypeptide structure." [SO:ke] synonym: "complex 3D structural variant" EXACT [] is_a: SO:0001599 ! 3D_polypeptide_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:45:13Z [Term] id: SO:0001601 name: conformational_change_variant def: "A sequence variant in the CDS region that causes a conformational change in the resulting polypeptide sequence." [SO:ke] synonym: "conformational change variant" EXACT [] is_a: SO:0001599 ! 3D_polypeptide_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:45:48Z [Term] id: SO:0001602 name: complex_change_of_translational_product_variant synonym: "complex change of translational product variant" EXACT [] is_a: SO:0001598 ! translational_product_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:46:54Z [Term] id: SO:0001603 name: polypeptide_sequence_variant def: "A sequence variant with in the CDS that causes a change in the resulting polypeptide sequence." [SO:ke] synonym: "polypeptide sequence variant" EXACT [] is_a: SO:0001598 ! translational_product_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:47:13Z [Term] id: SO:0001604 name: amino_acid_deletion def: "A sequence variant within a CDS resulting in the loss of an amino acid from the resulting polypeptide." [SO:ke] synonym: "amino acid deletion" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:47:36Z [Term] id: SO:0001605 name: amino_acid_insertion def: "A sequence variant within a CDS resulting in the gain of an amino acid to the resulting polypeptide." [SO:ke] synonym: "amino acid insertion" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:47:56Z [Term] id: SO:0001606 name: amino_acid_substitution def: "A sequence variant of a codon resulting in the substitution of one amino acid for another in the resulting polypeptide." [SO:ke] synonym: "amino acid substitution" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:48:17Z [Term] id: SO:0001607 name: conservative_amino_acid_substitution def: "A sequence variant of a codon causing the substitution of a similar amino acid for another in the resulting polypeptide." [SO:ke] synonym: "conservative amino acid substitution" EXACT [] is_a: SO:0001606 ! amino_acid_substitution created_by: kareneilbeck creation_date: 2010-03-22T02:48:57Z [Term] id: SO:0001608 name: non_conservative_amino_acid_substitution def: "A sequence variant of a codon causing the substitution of a non conservative amino acid for another in the resulting polypeptide." [SO:ke] synonym: "non conservative amino acid substitution" EXACT [] is_a: SO:0001606 ! amino_acid_substitution created_by: kareneilbeck creation_date: 2010-03-22T02:49:23Z [Term] id: SO:0001609 name: elongated_polypeptide def: "A sequence variant with in the CDS that causes elongation of the resulting polypeptide sequence." [SO:ke] synonym: "elongated polypeptide" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:49:52Z [Term] id: SO:0001610 name: elongated_polypeptide_C_terminal def: "A sequence variant with in the CDS that causes elongation of the resulting polypeptide sequence at the C terminus." [SO:ke] synonym: "elongated polypeptide C terminal" EXACT [] is_a: SO:0001609 ! elongated_polypeptide created_by: kareneilbeck creation_date: 2010-03-22T02:50:20Z [Term] id: SO:0001611 name: elongated_polypeptide_N_terminal def: "A sequence variant with in the CDS that causes elongation of the resulting polypeptide sequence at the N terminus." [SO:ke] synonym: "elongated polypeptide N terminal" EXACT [] is_a: SO:0001609 ! elongated_polypeptide created_by: kareneilbeck creation_date: 2010-03-22T02:50:31Z [Term] id: SO:0001612 name: elongated_in_frame_polypeptide_C_terminal def: "A sequence variant with in the CDS that causes in frame elongation of the resulting polypeptide sequence at the C terminus." [SO:ke] synonym: "elongated in frame polypeptide C terminal" EXACT [] is_a: SO:0001610 ! elongated_polypeptide_C_terminal created_by: kareneilbeck creation_date: 2010-03-22T02:51:05Z [Term] id: SO:0001613 name: elongated_out_of_frame_polypeptide_C_terminal def: "A sequence variant with in the CDS that causes out of frame elongation of the resulting polypeptide sequence at the C terminus." [SO:ke] synonym: "elongated polypeptide out of frame C terminal" EXACT [] is_a: SO:0001610 ! elongated_polypeptide_C_terminal created_by: kareneilbeck creation_date: 2010-03-22T02:51:20Z [Term] id: SO:0001614 name: elongated_in_frame_polypeptide_N_terminal_elongation def: "A sequence variant with in the CDS that causes in frame elongation of the resulting polypeptide sequence at the N terminus." [SO:ke] synonym: "elongated in frame polypeptide N terminal" EXACT [] is_a: SO:0001611 ! elongated_polypeptide_N_terminal created_by: kareneilbeck creation_date: 2010-03-22T02:51:49Z [Term] id: SO:0001615 name: elongated_out_of_frame_polypeptide_N_terminal def: "A sequence variant with in the CDS that causes out of frame elongation of the resulting polypeptide sequence at the N terminus." [SO:ke] synonym: "elongated out of frame N terminal" EXACT [] is_a: SO:0001611 ! elongated_polypeptide_N_terminal created_by: kareneilbeck creation_date: 2010-03-22T02:52:05Z [Term] id: SO:0001616 name: polypeptide_fusion def: "A sequence variant that causes a fusion of two polypeptide sequences." [SO:ke] synonym: "polypeptide fusion" EXACT [] is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:52:43Z [Term] id: SO:0001617 name: polypeptide_truncation def: "A sequence variant of the CD that causes a truncation of the resulting polypeptide." [SO:ke] synonym: "polypeptide truncation" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:53:07Z [Term] id: SO:0001618 name: inactive_catalytic_site def: "A sequence variant that causes the inactivation of a catalytic site with respect to a reference sequence." [SO:ke] synonym: "inactive catalytic site" EXACT [] is_a: SO:0001560 ! inactive_ligand_binding_site created_by: kareneilbeck creation_date: 2010-03-22T03:06:14Z [Term] id: SO:0001619 name: nc_transcript_variant def: "A transcript variant of a non coding RNA gene." [SO:ke] comment: Within non-coding gene - Located within a gene that does not code for a protein. synonym: "nc transcript variant" EXACT [] synonym: "non coding transcript variant" EXACT [] synonym: "within_non_coding_gene" EXACT dbsnp [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-23T11:16:23Z [Term] id: SO:0001620 name: mature_miRNA_variant def: "A transcript variant located with the sequence of the mature miRNA." [SO:ke] comment: EBI term: Within mature miRNA - Located within a microRNA. synonym: "mature miRNA variant" EXACT [] synonym: "within_mature_miRNA" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001619 ! nc_transcript_variant created_by: kareneilbeck creation_date: 2010-03-23T11:16:58Z [Term] id: SO:0001621 name: NMD_transcript_variant def: "A variant in a transcript that is the target of NMD." [SO:ke] synonym: "NMD transcript variant" EXACT [] synonym: "NMD_transcript" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-23T11:20:40Z [Term] id: SO:0001622 name: UTR_variant def: "A transcript variant that is located within the UTR." [SO:ke] synonym: "UTR variant" EXACT [] synonym: "UTR_" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-23T11:22:58Z [Term] id: SO:0001623 name: 5_prime_UTR_variant def: "A UTR variant of the 5' UTR." [SO:ke] comment: EBI term: 5prime UTR variations - In 5prime UTR (untranslated region). synonym: "5'UTR variant" EXACT [] synonym: "5PRIME_UTR" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "five prime UTR variant" EXACT [] synonym: "untranslated-5" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] is_a: SO:0001622 ! UTR_variant created_by: kareneilbeck creation_date: 2010-03-23T11:23:29Z [Term] id: SO:0001624 name: 3_prime_UTR_variant def: "A UTR variant of the 3' UTR." [SO:ke] comment: EBI term 3prime UTR variations - In 3prime UTR. synonym: "3'UTR variant" EXACT [] synonym: "3PRIME_UTR" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "three prime UTR variant" EXACT [] synonym: "untranslated-3" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] is_a: SO:0001622 ! UTR_variant created_by: kareneilbeck creation_date: 2010-03-23T11:23:54Z [Term] id: SO:0001626 name: incomplete_terminal_codon_variant def: "A sequence variant where at least one base of the final codon of an incompletely annotated transcript is changed." [SO:ke] comment: EBI term: Partial codon - Located within the final, incomplete codon of a transcript with a shortened coding sequence where the end is unknown. synonym: "incomplete terminal codon variant" EXACT [] synonym: "partial_codon" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001590 ! terminator_codon_variant is_a: SO:0001650 ! inframe_variant created_by: kareneilbeck creation_date: 2010-03-23T03:51:15Z [Term] id: SO:0001627 name: intron_variant def: "A transcript variant occurring within an intron." [SO:ke] comment: EBI term: Intronic variations - In intron. synonym: "intron variant" EXACT [] synonym: "intron_" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] synonym: "intronic" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-23T03:52:38Z [Term] id: SO:0001628 name: intergenic_variant def: "A sequence variant located in the intergenic region, between genes." [SO:ke] comment: EBI term Intergenic variations - More than 5 kb either upstream or downstream of a transcript. synonym: "intergenic" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "intergenic variant" EXACT [] is_a: SO:0001878 ! feature_variant created_by: kareneilbeck creation_date: 2010-03-23T05:07:37Z [Term] id: SO:0001629 name: splice_site_variant def: "A sequence variant that changes the first two or last two bases of an intron, or the 5th base from the start of the intron in the orientation of the transcript." [http://ensembl.org/info/docs/variation/index.html] comment: EBI term - essential splice site - In the first 2 or the last 2 base pairs of an intron. The 5th base is on the donor (5') side of the intron. Updated to b in line with Cancer Genome Project at the Sanger. synonym: "essential_splice_site" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "splice site variant" EXACT [] is_a: SO:0001627 ! intron_variant created_by: kareneilbeck creation_date: 2010-03-24T09:42:00Z [Term] id: SO:0001630 name: splice_region_variant def: "A sequence variant in which a change has occurred within the region of the splice site, either within 1-3 bases of the exon or 3-8 bases of the intron." [http://ensembl.org/info/docs/variation/index.html] comment: EBI term: splice site - 1-3 bps into an exon or 3-8 bps into an intron. synonym: "splice region variant" EXACT [] synonym: "splice_region_variant" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001568 ! splicing_variant created_by: kareneilbeck creation_date: 2010-03-24T09:46:02Z [Term] id: SO:0001631 name: upstream_gene_variant def: "A sequence variant located 5' of a gene." [SO:ke] comment: Different groups annotate up and downstream to different lengths. The subtypes are specific and are backed up with cross references. synonym: "upstream gene variant" EXACT [] is_a: SO:0001878 ! feature_variant created_by: kareneilbeck creation_date: 2010-03-24T09:49:13Z [Term] id: SO:0001632 name: downstream_gene_variant def: "A sequence variant located 3' of a gene." [SO:ke] comment: Different groups annotate up and downstream to different lengths. The subtypes are specific and are backed up with cross references. synonym: "downstream gene variant" EXACT [] is_a: SO:0001878 ! feature_variant created_by: kareneilbeck creation_date: 2010-03-24T09:49:38Z [Term] id: SO:0001633 name: 5KB_downstream_variant def: "A sequence variant located within 5 KB of the end of a gene." [SO:ke] comment: EBI term Downstream variations - Within 5 kb downstream of the 3prime end of a transcript. synonym: "5KB downstream variant" EXACT [] synonym: "downstream" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "within 5KB downstream" RELATED [] is_a: SO:0001632 ! downstream_gene_variant created_by: kareneilbeck creation_date: 2010-03-24T09:50:16Z [Term] id: SO:0001634 name: 500B_downstream_variant def: "A sequence variant located within a half KB of the end of a gene." [SO:ke] synonym: "500B downstream variant" EXACT [] synonym: "near-gene-3" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] is_a: SO:0001633 ! 5KB_downstream_variant created_by: kareneilbeck creation_date: 2010-03-24T09:50:42Z [Term] id: SO:0001635 name: 5KB_upstream_variant def: "A sequence variant located within 5KB 5' of a gene." [SO:ke] comment: EBI term Upstream variations - Within 5 kb upstream of the 5prime end of a transcript. synonym: "5kb upstream variant" EXACT [] synonym: "upstream" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001631 ! upstream_gene_variant created_by: kareneilbeck creation_date: 2010-03-24T09:51:06Z [Term] id: SO:0001636 name: 2KB_upstream_variant def: "A sequence variant located within 2KB 5' of a gene." [SO:ke] synonym: "2KB upstream variant" EXACT [] synonym: "near-gene-5" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] is_a: SO:0001635 ! 5KB_upstream_variant created_by: kareneilbeck creation_date: 2010-03-24T09:51:22Z [Term] id: SO:0001637 name: rRNA_gene def: "A gene that encodes for ribosomal RNA." [SO:ke] synonym: "rRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-04-21T10:10:32Z [Term] id: SO:0001638 name: piRNA_gene def: "A gene that encodes for an piwi associated RNA." [SO:ke] synonym: "piRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-04-21T10:11:36Z [Term] id: SO:0001639 name: RNase_P_RNA_gene def: "A gene that encodes an RNase P RNA." [SO:ke] synonym: "RNase P RNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-04-21T10:13:23Z [Term] id: SO:0001640 name: RNase_MRP_RNA_gene def: "A gene that encodes a RNase_MRP_RNA." [SO:ke] synonym: "RNase MRP RNA gene" RELATED [] is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-04-21T10:13:58Z [Term] id: SO:0001641 name: lincRNA_gene def: "A gene that encodes large intervening non-coding RNA." [SO:ke] synonym: "lincRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-04-21T10:14:24Z [Term] id: SO:0001642 name: mathematically_defined_repeat def: "A mathematically defined repeat (MDR) is a experimental feature that is determined by querying overlapping oligomers of length k against a database of shotgun sequence data and identifying regions in the query sequence that exceed a statistically determined threshold of repetitiveness." [SO:jestill] comment: Mathematically defined repeat regions are determined without regard to the biological origin of the repetitive region. The repeat units of a MDR are the overlapping oligomers of size k that were used to for the query. Tools that can annotate mathematically defined repeats include Tallymer (Kurtz et al 2008, BMC Genomics: 517) and RePS (Wang et al, Genome Res 12(5): 824-831.). synonym: "mathematically defined repeat" EXACT [] is_a: SO:0001410 ! experimental_feature created_by: kareneilbeck creation_date: 2010-05-03T11:50:14Z [Term] id: SO:0001643 name: telomerase_RNA_gene def: "A telomerase RNA gene is a non coding RNA gene the RNA product of which is a component of telomerase." [SO:ke] synonym: "Telomerase RNA component" EXACT [] synonym: "telomerase RNA gene" EXACT [] synonym: "TERC" EXACT [] xref: http:http://en.wikipedia.org/wiki/Telomerase_RNA_component "wikipedia" is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-05-18T05:26:38Z [Term] id: SO:0001644 name: targeting_vector def: "An engineered vector that is able to take part in homologous recombination in a host with the intent of introducing site specific genomic modifications." [MGD:tm, PMID:10354467] synonym: "targeting vector" RELATED [] is_a: SO:0000440 ! vector_replicon is_a: SO:0000804 ! engineered_region intersection_of: SO:0000440 ! vector_replicon intersection_of: has_part SO:0000853 ! homologous_region intersection_of: has_quality SO:0000783 ! engineered relationship: has_part SO:0000853 ! homologous_region relationship: has_quality SO:0000783 ! engineered created_by: kareneilbeck creation_date: 2010-05-28T02:05:25Z [Term] id: SO:0001645 name: genetic_marker def: "A measurable sequence feature that varies within a population." [SO:db] synonym: "genetic marker" RELATED [] is_a: SO:0001411 ! biological_region created_by: kareneilbeck creation_date: 2010-05-28T02:33:07Z [Term] id: SO:0001646 name: DArT_marker def: "A genetic marker, discovered using Diversity Arrays Technology (DArT) technology." [SO:ke] synonym: "DArT marker" EXACT [] is_a: SO:0001645 ! genetic_marker created_by: kareneilbeck creation_date: 2010-05-28T02:34:43Z [Term] id: SO:0001647 name: kozak_sequence def: "A kind of ribosome entry site, specific to Eukaryotic organisms that overlaps part of both 5' UTR and CDS sequence." [SO:ke] subset: SOFA synonym: "kozak consensus" EXACT [] synonym: "kozak consensus sequence" EXACT [] synonym: "kozak sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Kozak_consensus_sequence "wikipedia" is_a: SO:0000139 ! ribosome_entry_site created_by: kareneilbeck creation_date: 2010-06-07T03:12:20Z [Term] id: SO:0001648 name: nested_transposon def: "A transposon that is disrupted by the insertion of another element." [SO:ke] synonym: "nested transposon" EXACT [] is_a: SO:0000101 ! transposable_element created_by: kareneilbeck creation_date: 2010-06-23T03:22:57Z [Term] id: SO:0001649 name: nested_repeat def: "A repeat that is disrupted by the insertion of another element." [SO:ke] synonym: "nested repeat" RELATED [] is_a: SO:0000657 ! repeat_region created_by: kareneilbeck creation_date: 2010-06-23T03:24:55Z [Term] id: SO:0001650 name: inframe_variant def: "A sequence variant which does not cause a disruption of the translational reading frame." [SO:ke] synonym: "cds-indel" EXACT dbsnp [] synonym: "inframe variant" EXACT [] is_a: SO:0001818 ! protein_altering_variant created_by: kareneilbeck creation_date: 2010-07-19T01:24:44Z [Term] id: SO:0001653 name: retinoic_acid_responsive_element def: "A transcription factor binding site of variable direct repeats of the sequence PuGGTCA spaced by five nucleotides (DR5) found in the promoters of retinoic acid-responsive genes, to which retinoic acid receptors bind." [PMID:11327309, PMID:19917671] synonym: "RARE" EXACT [] synonym: "retinoic acid responsive element" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000167 ! promoter created_by: kareneilbeck creation_date: 2010-08-03T10:46:12Z [Term] id: SO:0001654 name: nucleotide_to_protein_binding_site def: "A binding site that, in the nucleotide molecule, interacts selectively and non-covalently with polypeptide residues." [SO:ke] subset: SOFA synonym: "nucleotide to protein binding site" RELATED [] is_a: SO:0000410 ! protein_binding_site created_by: kareneilbeck creation_date: 2010-08-03T12:26:05Z [Term] id: SO:0001655 name: nucleotide_binding_site def: "A binding site that, in the molecule, interacts selectively and non-covalently with nucleotide residues." [SO:cb] comment: See GO:0000166 : nucleotide binding. synonym: "nucleotide binding site" EXACT [] is_a: SO:0000409 ! binding_site created_by: kareneilbeck creation_date: 2010-08-03T12:30:04Z [Term] id: SO:0001656 name: metal_binding_site def: "A binding site that, in the molecule, interacts selectively and non-covalently with metal ions." [SO:cb] comment: See GO:0046872 : metal ion binding. synonym: "metal binding site" RELATED [] is_a: SO:0000409 ! binding_site created_by: kareneilbeck creation_date: 2010-08-03T12:31:42Z [Term] id: SO:0001657 name: ligand_binding_site def: "A binding site that, in the molecule, interacts selectively and non-covalently with a small molecule such as a drug, or hormone." [SO:ke] synonym: "ligand binding site" EXACT [] is_a: SO:0000409 ! binding_site created_by: kareneilbeck creation_date: 2010-08-03T12:32:58Z [Term] id: SO:0001658 name: nested_tandem_repeat def: "An NTR is a nested repeat of two distinct tandem motifs interspersed with each other." [SO:AF] comment: Tracker ID: 3052459. synonym: "nested tandem repeat" EXACT [] synonym: "NTR" EXACT [] is_a: SO:0001649 ! nested_repeat created_by: kareneilbeck creation_date: 2010-08-26T09:36:16Z [Term] id: SO:0001659 name: promoter_element synonym: "promoter element" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: overlaps SO:0000235 ! TF_binding_site created_by: kareneilbeck creation_date: 2010-10-01T11:48:32Z [Term] id: SO:0001660 name: core_promoter_element synonym: "core promoter element" EXACT [] synonym: "general transcription factor binding site" RELATED [] is_a: SO:0001659 ! promoter_element created_by: kareneilbeck creation_date: 2010-10-01T11:49:03Z [Term] id: SO:0001661 name: RNA_polymerase_II_TATA_box def: "A TATA box core promoter of a gene transcribed by RNA polymerase II." [PMID:16858867] synonym: "RNA polymerase II TATA box" EXACT [] is_a: SO:0000174 ! TATA_box relationship: part_of SO:0001669 ! RNApol_II_core_promoter created_by: kareneilbeck creation_date: 2010-10-01T02:42:12Z [Term] id: SO:0001662 name: RNA_polymerase_III_TATA_box def: "A TATA box core promoter of a gene transcribed by RNA polymerase III." [SO:ke] synonym: "RNA polymerase III TATA box" EXACT [] is_a: SO:0000174 ! TATA_box relationship: part_of SO:0000171 ! RNApol_III_promoter created_by: kareneilbeck creation_date: 2010-10-01T02:43:16Z [Term] id: SO:0001663 name: BREd_motif def: "A core TRNA polymerase II promoter element with consensus (G/A)T(T/G/A)(T/A)(G/T)(T/G)(T/G)." [PMID:16858867] synonym: "BREd" EXACT [] synonym: "BREd motif" RELATED [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0001669 ! RNApol_II_core_promoter created_by: kareneilbeck creation_date: 2010-10-01T02:49:55Z [Term] id: SO:0001664 name: DCE def: "A discontinuous core element of RNA polymerase II transcribed genes, situated downstream of the TSS. It is composed of three sub elements: SI, SII and SIII." [PMID:16858867] synonym: "downstream core element" RELATED [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0001669 ! RNApol_II_core_promoter created_by: kareneilbeck creation_date: 2010-10-01T02:56:41Z [Term] id: SO:0001665 name: DCE_SI def: "A sub element of the DCE core promoter element, with consensus sequence CTTC." [PMID:16858867, SO:ke] synonym: "DCE SI" RELATED [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001664 ! DCE created_by: kareneilbeck creation_date: 2010-10-01T03:00:10Z [Term] id: SO:0001666 name: DCE_SII def: "A sub element of the DCE core promoter element with consensus sequence CTGT." [PMID:16858867, SO:ke] synonym: "DCE SII" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001664 ! DCE created_by: kareneilbeck creation_date: 2010-10-01T03:00:30Z [Term] id: SO:0001667 name: DCE_SIII def: "A sub element of the DCE core promoter element with consensus sequence AGC." [PMID:16858867, SO:ke] synonym: "DCE SIII" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001664 ! DCE created_by: kareneilbeck creation_date: 2010-10-01T03:00:44Z [Term] id: SO:0001668 name: proximal_promoter_element synonym: "proximal promoter element" RELATED [] synonym: "specific transcription factor binding site" RELATED [] is_a: SO:0001678 ! regulatory_promoter_element created_by: kareneilbeck creation_date: 2010-10-01T03:10:23Z [Term] id: SO:0001669 name: RNApol_II_core_promoter def: "The minimal portion of the promoter required to properly initiate transcription in RNA polymerase II transcribed genes." [PMID:16858867] synonym: "RNApol II core promoter" EXACT [] is_a: SO:0000170 ! RNApol_II_promoter created_by: kareneilbeck creation_date: 2010-10-01T03:13:41Z [Term] id: SO:0001670 name: distal_promoter_element synonym: "distal promoter element" RELATED [] is_a: SO:0001678 ! regulatory_promoter_element created_by: kareneilbeck creation_date: 2010-10-01T03:21:08Z [Term] id: SO:0001671 name: bacterial_RNApol_promoter_sigma_70 synonym: "bacterial RNA polymerase promoter sigma 70" EXACT [] is_a: SO:0000613 ! bacterial_RNApol_promoter created_by: kareneilbeck creation_date: 2010-10-06T01:41:34Z [Term] id: SO:0001672 name: bacterial_RNApol_promoter_sigma54 synonym: "bacterial RNA polymerase promoter sigma54" EXACT [] is_a: SO:0000613 ! bacterial_RNApol_promoter created_by: kareneilbeck creation_date: 2010-10-06T01:42:37Z [Term] id: SO:0001673 name: minus_12_signal def: "A conserved region about 12-bp upstream of the start point of bacterial transcription units, involved with sigma factor 54." [PMID:18331472] synonym: "minus 12 signal" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001672 ! bacterial_RNApol_promoter_sigma54 created_by: kareneilbeck creation_date: 2010-10-06T01:44:57Z [Term] id: SO:0001674 name: minus_24_signal def: "A conserved region about 12-bp upstream of the start point of bacterial transcription units, involved with sigma factor 54." [PMID:18331472] synonym: "minus 24 signal" RELATED [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001672 ! bacterial_RNApol_promoter_sigma54 created_by: kareneilbeck creation_date: 2010-10-06T01:45:24Z [Term] id: SO:0001675 name: A_box_type_1 def: "An A box within an RNA polymerase III type 1 promoter." [SO:ke] comment: The A box can be found in the promoters of type 1 and type 2 (pol III) so sub-typing here allows the part of relationship of the subtypes to remain true. synonym: "A box type 1" RELATED [] is_a: SO:0000619 ! A_box relationship: part_of SO:0000617 ! RNApol_III_promoter_type_1 created_by: kareneilbeck creation_date: 2010-10-06T05:43:43Z [Term] id: SO:0001676 name: A_box_type_2 def: "An A box within an RNA polymerase III type 2 promoter." [SO:ke] comment: The A box can be found in the promoters of type 1 and type 2 (pol III) so sub-typing here allows the part of relationship of the subtypes to remain true. synonym: "A box type 2" RELATED [] is_a: SO:0000619 ! A_box relationship: part_of SO:0000618 ! RNApol_III_promoter_type_2 created_by: kareneilbeck creation_date: 2010-10-06T05:44:18Z [Term] id: SO:0001677 name: intermediate_element def: "A core promoter region of RNA polymerase III type 1 promoters." [PMID:12381659] synonym: "IE" EXACT [] synonym: "intermediate element" RELATED [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0000617 ! RNApol_III_promoter_type_1 created_by: kareneilbeck creation_date: 2010-10-06T05:52:03Z [Term] id: SO:0001678 name: regulatory_promoter_element def: "A promoter element that is not part of the core promoter, but provides the promoter with a specific regulatory region." [PMID:12381659] synonym: "regulatory promoter element" RELATED [] is_a: SO:0001659 ! promoter_element created_by: kareneilbeck creation_date: 2010-10-07T04:39:48Z [Term] id: SO:0001679 name: transcription_regulatory_region def: "A regulatory region that is involved in the control of the process of transcription." [SO:ke] subset: SOFA synonym: "transcription regulatory region" EXACT [] is_a: SO:0005836 ! regulatory_region created_by: kareneilbeck creation_date: 2010-10-12T03:49:35Z [Term] id: SO:0001680 name: translation_regulatory_region def: "A regulatory region that is involved in the control of the process of translation." [SO:ke] synonym: "translation regulatory region" EXACT [] is_a: SO:0005836 ! regulatory_region created_by: kareneilbeck creation_date: 2010-10-12T03:52:45Z [Term] id: SO:0001681 name: recombination_regulatory_region def: "A regulatory region that is involved in the control of the process of recombination." [SO:ke] synonym: "recombination regulatory region" EXACT [] is_a: SO:0005836 ! regulatory_region created_by: kareneilbeck creation_date: 2010-10-12T03:53:35Z [Term] id: SO:0001682 name: replication_regulatory_region def: "A regulatory region that is involved in the control of the process of nucleotide replication." [SO:ke] synonym: "replication regulatory region" RELATED [] is_a: SO:0005836 ! regulatory_region created_by: kareneilbeck creation_date: 2010-10-12T03:54:09Z [Term] id: SO:0001683 name: sequence_motif def: "A sequence motif is a nucleotide or amino-acid sequence pattern that may have biological significance." [http://en.wikipedia.org/wiki/Sequence_motif] subset: SOFA synonym: "sequence motif" RELATED [] xref: http://en.wikipedia.org/wiki/Sequence_motif "wikipedia" is_a: SO:0001411 ! biological_region created_by: kareneilbeck creation_date: 2010-10-14T04:13:22Z [Term] id: SO:0001684 name: experimental_feature_attribute def: "An attribute of an experimentally derived feature." [SO:ke] synonym: "experimental feature attribute" RELATED [] is_a: SO:0000733 ! feature_attribute created_by: kareneilbeck creation_date: 2010-10-28T02:22:23Z [Term] id: SO:0001685 name: score def: "The score of an experimentally derived feature such as a p-value." [SO:ke] is_a: SO:0001684 ! experimental_feature_attribute created_by: kareneilbeck creation_date: 2010-10-28T02:23:16Z [Term] id: SO:0001686 name: quality_value def: "An experimental feature attribute that defines the quality of the feature in a quantitative way, such as a phred quality score." [SO:ke] synonym: "quality value" RELATED [] is_a: SO:0001684 ! experimental_feature_attribute created_by: kareneilbeck creation_date: 2010-10-28T02:24:11Z [Term] id: SO:0001687 name: restriction_enzyme_recognition_site def: "The nucleotide region (usually a palindrome) that is recognized by a restriction enzyme. This may or may not be equal to the restriction enzyme binding site." [SO:ke] synonym: "restriction endonuclease recognition site" EXACT [] synonym: "restriction enzyme recognition site" EXACT [] is_a: SO:0001411 ! biological_region created_by: kareneilbeck creation_date: 2010-10-29T12:29:57Z [Term] id: SO:0001688 name: restriction_enzyme_cleavage_junction def: "The boundary at which a restriction enzyme breaks the nucleotide sequence." [SO:ke] synonym: "restriction enzyme cleavage junction" EXACT [] is_a: SO:0000699 ! junction created_by: kareneilbeck creation_date: 2010-10-29T12:35:02Z [Term] id: SO:0001689 name: five_prime_restriction_enzyme_junction def: "The restriction enzyme cleavage junction on the 5' strand of the nucleotide sequence." [SO:ke] synonym: "5' restriction enzyme junction" EXACT [] is_a: SO:0001694 ! single_strand_restriction_enzyme_cleavage_site relationship: part_of SO:0001692 ! sticky_end_restriction_enzyme_cleavage_site created_by: kareneilbeck creation_date: 2010-10-29T12:36:24Z [Term] id: SO:0001690 name: three_prime_restriction_enzyme_junction synonym: "3' restriction enzyme junction" EXACT [] is_a: SO:0001694 ! single_strand_restriction_enzyme_cleavage_site relationship: part_of SO:0001692 ! sticky_end_restriction_enzyme_cleavage_site created_by: kareneilbeck creation_date: 2010-10-29T12:37:52Z [Term] id: SO:0001691 name: blunt_end_restriction_enzyme_cleavage_site synonym: "blunt end restriction enzyme cleavage site" EXACT [] is_a: SO:0001687 ! restriction_enzyme_recognition_site created_by: kareneilbeck creation_date: 2010-10-29T12:39:53Z [Term] id: SO:0001692 name: sticky_end_restriction_enzyme_cleavage_site synonym: "sticky end restriction enzyme cleavage site" RELATED [] is_a: SO:0001687 ! restriction_enzyme_recognition_site created_by: kareneilbeck creation_date: 2010-10-29T12:40:50Z [Term] id: SO:0001693 name: blunt_end_restriction_enzyme_cleavage_junction def: "A restriction enzyme cleavage site where both strands are cut at the same position." [SO:ke] synonym: "blunt end restriction enzyme cleavage site" RELATED [] is_a: SO:0001688 ! restriction_enzyme_cleavage_junction relationship: part_of SO:0001691 ! blunt_end_restriction_enzyme_cleavage_site created_by: kareneilbeck creation_date: 2010-10-29T12:43:14Z [Term] id: SO:0001694 name: single_strand_restriction_enzyme_cleavage_site def: "A restriction enzyme cleavage site whereby only one strand is cut." [SO:ke] synonym: "single strand restriction enzyme cleavage site" RELATED [] is_a: SO:0001688 ! restriction_enzyme_cleavage_junction created_by: kareneilbeck creation_date: 2010-10-29T12:44:48Z [Term] id: SO:0001695 name: restriction_enzyme_single_strand_overhang def: "A terminal region of DNA sequence where the end of the region is not blunt ended." [SO:ke] synonym: "single strand overhang" EXACT [] synonym: "sticky end" RELATED [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0001692 ! sticky_end_restriction_enzyme_cleavage_site created_by: kareneilbeck creation_date: 2010-10-29T12:48:35Z [Term] id: SO:0001696 name: experimentally_defined_binding_region def: "A region that has been implicated in binding although the exact coordinates of binding may be unknown." [SO:ke] synonym: "experimentally defined binding region" RELATED [] is_a: SO:0001410 ! experimental_feature created_by: kareneilbeck creation_date: 2010-11-02T11:39:59Z [Term] id: SO:0001697 name: ChIP_seq_region def: "A region of sequence identified by CHiP seq technology to contain a protein binding site." [SO:ke] synonym: "ChIP seq region" RELATED [] is_a: SO:0001696 ! experimentally_defined_binding_region relationship: contains SO:0000410 ! protein_binding_site created_by: kareneilbeck creation_date: 2010-11-02T11:43:07Z [Term] id: SO:0001698 name: ASPE_primer def: "\"A primer containing an SNV at the 3' end for accurate genotyping." [http://www.ncbi.nlm.nih.gov/pubmed/11252801] synonym: "allele specific primer extension primer" EXACT [] synonym: "ASPE primer" EXACT [] is_a: SO:0000112 ! primer created_by: kareneilbeck creation_date: 2010-11-11T03:25:21Z [Term] id: SO:0001699 name: dCAPS_primer def: "A primer with one or more mis-matches to the DNA template corresponding to a position within a restriction enzyme recognition site." [http://www.ncbi.nlm.nih.gov/pubmed/9628033] synonym: "dCAPS primer" EXACT [] synonym: "derived cleaved amplified polymorphic primer" EXACT [] is_a: SO:0000112 ! primer created_by: kareneilbeck creation_date: 2010-11-11T03:27:09Z [Term] id: SO:0001700 name: histone_modification def: "Histone modification is a post translationally modified region whereby residues of the histone protein are modified by methylation, acetylation, phosphorylation, ubiquitination, sumoylation, citrullination, or ADP-ribosylation." [http:en.wikipedia.org/wiki/Histone] synonym: "histone modification" EXACT [] synonym: "histone modification site" RELATED [] is_a: SO:0001089 ! post_translationally_modified_region is_a: SO:0001720 ! epigenetically_modified_region intersection_of: SO:0001089 ! post_translationally_modified_region intersection_of: has_quality SO:0000133 ! epigenetically_modified relationship: has_quality SO:0000133 ! epigenetically_modified created_by: kareneilbeck creation_date: 2010-03-31T10:22:08Z [Term] id: SO:0001701 name: histone_methylation_site def: "A histone modification site where the modification is the methylation of the residue." [SO:ke] synonym: "histone methylation" EXACT [] synonym: "histone methylation site" EXACT [] is_a: SO:0001700 ! histone_modification created_by: kareneilbeck creation_date: 2010-03-31T10:23:02Z [Term] id: SO:0001702 name: histone_acetylation_site def: "A histone modification where the modification is the acylation of the residue." [SO:ke] synonym: "histone acetylation" EXACT [] synonym: "histone acetylatoin site" EXACT [] is_a: SO:0001700 ! histone_modification created_by: kareneilbeck creation_date: 2010-03-31T10:23:27Z [Term] id: SO:0001703 name: H3K9_acetylation_site def: "A kind of histone modification site, whereby the 9th residue (a lysine), from the start of the H3 histone protein is acylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K9 acetylation site" EXACT [] synonym: "H3K9Ac" RELATED [] is_a: SO:0001702 ! histone_acetylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:25:05Z [Term] id: SO:0001704 name: H3K14_acetylation_site def: "A kind of histone modification site, whereby the 14th residue (a lysine), from the start of the H3 histone protein is acylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K14 acetylation site" EXACT [] synonym: "H3K14Ac" RELATED [] is_a: SO:0001702 ! histone_acetylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:25:53Z [Term] id: SO:0001705 name: H3K4_monomethylation_site def: "A kind of histone modification, whereby the 4th residue (a lysine), from the start of the H3 protein is mono-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K4 mono-methylation site" EXACT [] synonym: "H3K4me1" RELATED [] is_a: SO:0001734 ! H3K4_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:28:14Z [Term] id: SO:0001706 name: H3K4_trimethylation def: "A kind of histone modification site, whereby the 4th residue (a lysine), from the start of the H3 protein is tri-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K4 tri-methylation" EXACT [] synonym: "H3K4me3" RELATED [] is_a: SO:0001734 ! H3K4_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:29:12Z [Term] id: SO:0001707 name: H3K9_trimethylation_site def: "A kind of histone modification site, whereby the 9th residue (a lysine), from the start of the H3 histone protein is tri-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K9 tri-methylation site" EXACT [] synonym: "H3K9Me3" RELATED [] is_a: SO:0001736 ! H3K9_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:30:34Z [Term] id: SO:0001708 name: H3K27_monomethylation_site def: "A kind of histone modification site, whereby the 27th residue (a lysine), from the start of the H3 histone protein is mono-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H2K27 mono-methylation site" EXACT [] synonym: "H2K27Me1" RELATED [] is_a: SO:0001732 ! H3K27_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:31:54Z [Term] id: SO:0001709 name: H3K27_trimethylation_site def: "A kind of histone modification site, whereby the 27th residue (a lysine), from the start of the H3 histone protein is tri-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K27 tri-methylation site" EXACT [] synonym: "H3K27Me3" RELATED [] is_a: SO:0001732 ! H3K27_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:32:41Z [Term] id: SO:0001710 name: H3K79_monomethylation_site def: "A kind of histone modification site, whereby the 79th residue (a lysine), from the start of the H3 histone protein is mono- methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K79 mono-methylation site" EXACT [] synonym: "H3K79me1" RELATED [] is_a: SO:0001735 ! H3K79_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:33:42Z [Term] id: SO:0001711 name: H3K79_dimethylation_site def: "A kind of histone modification site, whereby the 79th residue (a lysine), from the start of the H3 histone protein is di-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K79 di-methylation site" EXACT [] synonym: "H3K79Me2" RELATED [] is_a: SO:0001735 ! H3K79_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:34:39Z [Term] id: SO:0001712 name: H3K79_trimethylation_site def: "A kind of histone modification site, whereby the 79th residue (a lysine), from the start of the H3 histone protein is tri-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K79 tri-methylation site" EXACT [] synonym: "H3K79Me3" RELATED [] is_a: SO:0001735 ! H3K79_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:35:30Z [Term] id: SO:0001713 name: H4K20_monomethylation_site def: "A kind of histone modification site, whereby the 20th residue (a lysine), from the start of the H34histone protein is mono-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H4K20 mono-methylation site" EXACT [] synonym: "H4K20Me1" RELATED [] is_a: SO:0001701 ! histone_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:36:43Z [Term] id: SO:0001714 name: H2BK5_monomethylation_site def: "A kind of histone modification site, whereby the 5th residue (a lysine), from the start of the H2B protein is methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H2BK5 mono-methylation site" EXACT [] is_a: SO:0001701 ! histone_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:38:12Z [Term] id: SO:0001715 name: ISRE def: "An ISRE is a transcriptional cis regulatory region, containing the consensus region: YAGTTTC(A/T)YTTTYCC, responsible for increased transcription via interferon binding." [http://genesdev.cshlp.org/content/2/4/383.abstrac] comment: Term requested via tracker (2981725) by Alan Ruttenberg, April 2010. It has been described as both an enhancer and a promoter, so the parent is the more general term. synonym: "interferon stimulated response element" EXACT [] is_a: SO:0001055 ! transcriptional_cis_regulatory_region created_by: kareneilbeck creation_date: 2010-04-05T11:15:08Z [Term] id: SO:0001716 name: histone_ubiqitination_site def: "A histone modification site where ubiquitin may be added." [SO:ke] synonym: "histone ubiquitination site" RELATED [] is_a: SO:0001700 ! histone_modification created_by: kareneilbeck creation_date: 2010-04-13T10:12:18Z [Term] id: SO:0001717 name: H2B_ubiquitination_site def: "A histone modification site on H2B where ubiquitin may be added." [SO:ke] synonym: "H2BUbiq" RELATED [] is_a: SO:0001716 ! histone_ubiqitination_site created_by: kareneilbeck creation_date: 2010-04-13T10:13:28Z [Term] id: SO:0001718 name: H3K18_acetylation_site def: "A kind of histone modification site, whereby the 14th residue (a lysine), from the start of the H3 histone protein is acylated." [SO:ke] synonym: "H3K18 acetylation site" EXACT [] synonym: "H3K18Ac" RELATED [] is_a: SO:0001702 ! histone_acetylation_site created_by: kareneilbeck creation_date: 2010-04-13T10:39:35Z [Term] id: SO:0001719 name: H3K23_acylation_site def: "A kind of histone modification, whereby the 23rd residue (a lysine), from the start of the H3 histone protein is acylated." [SO:ke] synonym: "H3K23 acylation site" RELATED [] synonym: "H3K23Ac" RELATED [] is_a: SO:0001702 ! histone_acetylation_site created_by: kareneilbeck creation_date: 2010-04-13T10:42:45Z [Term] id: SO:0001720 name: epigenetically_modified_region def: "A biological region implicated in inherited changes caused by mechanisms other than changes in the underlying DNA sequence." [http://en.wikipedia.org/wiki/Epigenetics, SO:ke] subset: SOFA synonym: "epigenetically modified region" RELATED [] is_a: SO:0001411 ! biological_region intersection_of: SO:0001411 ! biological_region intersection_of: has_quality SO:0000133 ! epigenetically_modified relationship: has_quality SO:0000133 ! epigenetically_modified created_by: kareneilbeck creation_date: 2010-03-27T12:02:29Z [Term] id: SO:0001721 name: H3K27_acylation_site def: "A kind of histone modification site, whereby the 27th residue (a lysine), from the start of the H3 histone protein is acylated." [SO:ke] synonym: "H3K27 acylation site" EXACT [] synonym: "H3K27Ac" RELATED [] is_a: SO:0001702 ! histone_acetylation_site created_by: kareneilbeck creation_date: 2010-04-13T10:44:09Z [Term] id: SO:0001722 name: H3K36_monomethylation_site def: "A kind of histone modification site, whereby the 36th residue (a lysine), from the start of the H3 histone protein is mono-methylated." [SO:ke] synonym: "H3K36 mono-methylation site" EXACT [] synonym: "H3K36. synonym: "transcriptionally regulated" EXACT [] is_a: SO:0000119 ! regulated [Term] id: SO:0000124 name: transcriptionally_constitutive def: "Expressed in relatively constant amounts without regard to cellular environmental conditions such as the concentration of a particular substrate." [SO:ke] synonym: "transcriptionally constitutive" EXACT [] is_a: SO:0000123 ! transcriptionally_regulated [Term] id: SO:0000125 name: transcriptionally_induced def: "An inducer molecule is required for transcription to occur." [SO:ke] synonym: "transcriptionally induced" EXACT [] is_a: SO:0000123 ! transcriptionally_regulated [Term] id: SO:0000126 name: transcriptionally_repressed def: "A repressor molecule is required for transcription to stop." [SO:ke] synonym: "transcriptionally repressed" EXACT [] is_a: SO:0000123 ! transcriptionally_regulated [Term] id: SO:0000127 name: silenced_gene def: "A gene that is silenced." [SO:xp] synonym: "silenced gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000893 ! silenced [Term] id: SO:0000128 name: gene_silenced_by_DNA_modification def: "A gene that is silenced by DNA modification." [SO:xp] synonym: "gene silenced by DNA modification" EXACT [] is_a: SO:0000127 ! silenced_gene relationship: has_quality SO:0000894 ! silenced_by_DNA_modification [Term] id: SO:0000129 name: gene_silenced_by_DNA_methylation def: "A gene that is silenced by DNA methylation." [SO:xp] synonym: "gene silenced by DNA methylation" EXACT [] synonym: "methylation-silenced gene" EXACT [] is_a: SO:0000128 ! gene_silenced_by_DNA_modification relationship: has_quality SO:0000895 ! silenced_by_DNA_methylation [Term] id: SO:0000130 name: post_translationally_regulated def: "An attribute describing a gene that is regulated after it has been translated." [SO:ke] synonym: "post translationally regulated" EXACT [] synonym: "post-translationally regulated" EXACT [] is_a: SO:0000119 ! regulated [Term] id: SO:0000131 name: translationally_regulated def: "An attribute describing a gene that is regulated as it is translated." [SO:ke] synonym: "translationally regulated" EXACT [] is_a: SO:0000119 ! regulated [Term] id: SO:0000132 name: reverse_primer def: "A single stranded oligo used for polymerase chain reaction." [http://mged.sourceforge.net/ontologies/MGEDontology.php] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "DNA reverse primer" EXACT [] synonym: "reverse DNA primer" EXACT [] synonym: "reverse primer" EXACT [] synonym: "reverse primer oligo" EXACT [] synonym: "reverse primer oligonucleotide" EXACT [] synonym: "reverse primer sequence" EXACT [] is_a: SO:0000112 ! primer relationship: has_quality SO:0001031 ! reverse [Term] id: SO:0000133 name: epigenetically_modified def: "This attribute describes a gene where heritable changes other than those in the DNA sequence occur. These changes include: modification to the DNA (such as DNA methylation, the covalent modification of cytosine), and post-translational modification of histones." [SO:ke] synonym: "epigenetically modified" EXACT [] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0000134 name: genomically_imprinted def: "Imprinted genes are epigenetically modified genes that are expressed monoallelically according to their parent of origin." [SO:ke] synonym: "genomically imprinted" EXACT [] synonym: "imprinted" BROAD [] xref: http:http://en.wikipedia.org/wiki/Genomic_imprinting "wiki" is_a: SO:0000119 ! regulated is_a: SO:0000133 ! epigenetically_modified [Term] id: SO:0000135 name: maternally_imprinted def: "The maternal copy of the gene is modified, rendering it transcriptionally silent." [SO:ke] synonym: "maternally imprinted" EXACT [] is_a: SO:0000134 ! genomically_imprinted [Term] id: SO:0000136 name: paternally_imprinted def: "The paternal copy of the gene is modified, rendering it transcriptionally silent." [SO:ke] synonym: "paternally imprinted" EXACT [] is_a: SO:0000134 ! genomically_imprinted [Term] id: SO:0000137 name: allelically_excluded def: "Allelic exclusion is a process occurring in diploid organisms, where a gene is inactivated and not expressed in that cell." [SO:ke] comment: Examples are x-inactivation and immunoglobulin formation. synonym: "allelically excluded" EXACT [] is_a: SO:0000133 ! epigenetically_modified [Term] id: SO:0000138 name: gene_rearranged_at_DNA_level def: "An epigenetically modified gene, rearranged at the DNA level." [SO:xp] synonym: "gene rearranged at DNA level" EXACT [] is_a: SO:0000898 ! epigenetically_modified_gene relationship: has_quality SO:0000904 ! rearranged_at_DNA_level [Term] id: SO:0000139 name: ribosome_entry_site def: "Region in mRNA where ribosome assembles." [SO:ke] subset: SOFA synonym: "ribosome entry site" EXACT [] is_a: SO:0000836 ! mRNA_region relationship: part_of SO:0000204 ! five_prime_UTR [Term] id: SO:0000140 name: attenuator def: "A sequence segment located within the five prime end of an mRNA that causes premature termination of translation." [SO:as] subset: SOFA synonym: "attenuator sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Attenuator "wiki" is_a: SO:0001680 ! translation_regulatory_region relationship: part_of SO:0000234 ! mRNA [Term] id: SO:0000141 name: terminator def: "The sequence of DNA located either at the end of the transcript that causes RNA polymerase to terminate transcription." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "terminator sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Terminator_(genetics) "wiki" is_a: SO:0001679 ! transcription_regulatory_region relationship: part_of SO:0000673 ! transcript [Term] id: SO:0000142 name: DNA_sequence_secondary_structure def: "A folded DNA sequence." [SO:ke] synonym: "DNA sequence secondary structure" EXACT [] is_a: SO:0000002 ! sequence_secondary_structure [Term] id: SO:0000143 name: assembly_component def: "A region of known length which may be used to manufacture a longer region." [SO:ke] subset: SOFA synonym: "assembly component" EXACT [] is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000144 name: primary_transcript_attribute is_obsolete: true [Term] id: SO:0000145 name: recoded_codon def: "A codon that has been redefined at translation. The redefinition may be as a result of translational bypass, translational frameshifting or stop codon readthrough." [SO:xp] synonym: "recoded codon" EXACT [] is_a: SO:0000360 ! codon [Term] id: SO:0000146 name: capped def: "An attribute describing when a sequence, usually an mRNA is capped by the addition of a modified guanine nucleotide at the 5' end." [SO:ke] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000147 name: exon def: "A region of the transcript sequence within a gene which is not removed from the primary RNA transcript by RNA splicing." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA xref: http://en.wikipedia.org/wiki/Exon "wiki" is_a: SO:0000833 ! transcript_region [Term] id: SO:0000148 name: supercontig def: "One or more contigs that have been ordered and oriented using end-read information. Contains gaps that are filled with N's." [SO:ls] subset: SOFA synonym: "scaffold" RELATED [] is_a: SO:0001876 ! partial_genomic_sequence_assembly relationship: part_of SO:0000719 ! ultracontig [Term] id: SO:0000149 name: contig def: "A contiguous sequence derived from sequence assembly. Has no gaps, but may contain N's from unavailable bases." [SO:ls] subset: SOFA xref: http://en.wikipedia.org/wiki/Contig "wiki" is_a: SO:0000143 ! assembly_component is_a: SO:0000353 ! sequence_assembly relationship: part_of SO:0000148 ! supercontig [Term] id: SO:0000150 name: read def: "A sequence obtained from a single sequencing experiment. Typically a read is produced when a base calling program interprets information from a chromatogram trace file produced from a sequencing machine." [SO:rd] subset: SOFA is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000149 ! contig [Term] id: SO:0000151 name: clone def: "A piece of DNA that has been inserted in a vector so that it can be propagated in a host bacterium or some other organism." [SO:ke] subset: SOFA xref: http:http://en.wikipedia.org/wiki/Clone_(genetics) "wiki" is_a: SO:0000695 ! reagent [Term] id: SO:0000152 name: YAC def: "Yeast Artificial Chromosome, a vector constructed from the telomeric, centromeric, and replication origin sequences needed for replication in yeast cells." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "yeast artificial chromosome" EXACT [] is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000153 name: BAC def: "Bacterial Artificial Chromosome, a cloning vector that can be propagated as mini-chromosomes in a bacterial host." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "bacterial artificial chromosome" EXACT [] is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000154 name: PAC def: "The P1-derived artificial chromosome are DNA constructs that are derived from the DNA of P1 bacteriophage. They can carry large amounts (about 100-300 kilobases) of other sequences for a variety of bioengineering purposes. It is one type of vector used to clone DNA fragments (100- to 300-kb insert size; average, 150 kb) in Escherichia coli cells." [http://en.wikipedia.org/wiki/P1-derived_artificial_chromosome] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. Drosophila melanogaster PACs carry an average insert size of 80 kb. The library represents a 6-fold coverage of the genome. synonym: "P1" EXACT [] synonym: "P1 artificial chromosome" EXACT [] xref: http://en.wikipedia.org/wiki/P1-derived_artificial_chromosome "wiki" is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000155 name: plasmid def: "A self replicating, using the hosts cellular machinery, often circular nucleic acid molecule that is distinct from a chromosome in the organism." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "plasmid sequence" EXACT [] is_a: SO:0001235 ! replicon [Term] id: SO:0000156 name: cosmid def: "A cloning vector that is a hybrid of lambda phages and a plasmid that can be propagated as a plasmid or packaged as a phage,since they retain the lambda cos sites." [SO:ma] comment: Paper: vans GA et al. High efficiency vectors for cosmid microcloning and genomic analysis. Gene 1989; 79(1):9-20. This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "cosmid vector" EXACT [] xref: http://en.wikipedia.org/wiki/Cosmid "wiki" is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000157 name: phagemid def: "A plasmid which carries within its sequence a bacteriophage replication origin. When the host bacterium is infected with \"helper\" phage, a phagemid is replicated along with the phage DNA and packaged into phage capsids." [SO:ma] synonym: "phagemid vector" RELATED [] xref: http://en.wikipedia.org/wiki/Phagemid "wiki" is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000158 name: fosmid def: "A cloning vector that utilizes the E. coli F factor." [SO:ma] comment: Birren BW et al. A human chromosome 22 fosmid resource: mapping and analysis of 96 clones. Genomics 1996. synonym: "fosmid vector" RELATED [] xref: http://en.wikipedia.org/wiki/Fosmid "wiki" is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000159 name: deletion alt_id: SO:1000033 def: "The point at which one or more contiguous nucleotides were excised." [SO:ke] subset: SOFA synonym: "deleted_sequence" EXACT [] synonym: "nucleotide deletion" EXACT [] synonym: "nucleotide_deletion" EXACT [] xref: http://en.wikipedia.org/wiki/Nucleotide_deletion "wiki" xref: loinc:LA6692-3 "Deletion" is_a: SO:0001059 ! sequence_alteration is_a: SO:0001411 ! biological_region [Term] id: SO:0000160 name: lambda_clone def: "A linear clone derived from lambda bacteriophage. The genes involved in the lysogenic pathway are removed from the from the viral DNA. Up to 25 kb of foreign DNA can then be inserted into the lambda genome." [ISBN:0-1767-2380-8] is_obsolete: true [Term] id: SO:0000161 name: methylated_adenine def: "A modified base in which adenine has been methylated." [SO:ke] subset: SOFA synonym: "methylated A" EXACT [] synonym: "methylated adenine" EXACT [] synonym: "methylated adenine base" EXACT [] synonym: "methylated adenine residue" EXACT [] synonym: "methylated_A" EXACT [] is_a: SO:0000306 ! methylated_DNA_base_feature [Term] id: SO:0000162 name: splice_site def: "Consensus region of primary transcript bordering junction of splicing. A region that overlaps exactly 2 base and adjacent_to splice_junction." [SO:cjm, SO:ke] comment: With spliceosomal introns, the splice sites bind the spliceosomal machinery. subset: SOFA synonym: "splice site" EXACT [] xref: http://en.wikipedia.org/wiki/Splice_site "wiki" is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000163 name: five_prime_cis_splice_site def: "Intronic 2 bp region bordering the exon, at the 5' edge of the intron. A splice_site that is downstream_adjacent_to exon and starts intron." [http://www.ucl.ac.uk/~ucbhjow/b241/glossary.html, SO:cjm, SO:ke] subset: SOFA synonym: "5' splice site" EXACT [] synonym: "donor" RELATED [] synonym: "donor splice site" EXACT [] synonym: "five prime splice site" EXACT [] synonym: "splice donor site" EXACT [] is_a: SO:0001419 ! cis_splice_site [Term] id: SO:0000164 name: three_prime_cis_splice_site def: "Intronic 2 bp region bordering the exon, at the 3' edge of the intron. A splice_site that is upstream_adjacent_to exon and finishes intron." [http://www.ucl.ac.uk/~ucbhjow/b241/glossary.html, SO:cjm, SO:ke] subset: SOFA synonym: "3' splice site" RELATED [] synonym: "acceptor" RELATED [] synonym: "acceptor splice site" EXACT [] synonym: "splice acceptor site" EXACT [] synonym: "three prime splice site" EXACT [] is_a: SO:0001419 ! cis_splice_site [Term] id: SO:0000165 name: enhancer def: "A cis-acting sequence that increases the utilization of (some) eukaryotic promoters, and can function in either orientation and in any location (upstream or downstream) relative to the promoter." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: An enhancer may participate in an enhanceosome GO:0034206. A protein-DNA complex formed by the association of a distinct set of general and specific transcription factors with a region of enhancer DNA. The cooperative assembly of an enhanceosome confers specificity of transcriptional regulation. This comment is a place holder should we start to make cross products with GO. subset: SOFA xref: http://en.wikipedia.org/wiki/Enhancer_(genetics) "wiki" is_a: SO:0000727 ! CRM [Term] id: SO:0000166 name: enhancer_bound_by_factor def: "An enhancer bound by a factor." [SO:xp] synonym: "enhancer bound by factor" EXACT [] is_a: SO:0000165 ! enhancer relationship: has_quality SO:0000277 ! bound_by_factor [Term] id: SO:0000167 name: promoter def: "A regulatory_region composed of the TSS(s) and binding sites for TF_complexes of the basal transcription machinery." [SO:regcreative] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. The region on a DNA molecule involved in RNA polymerase binding to initiate transcription. subset: SOFA synonym: "promoter sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Promoter "wiki" is_a: SO:0001055 ! transcriptional_cis_regulatory_region [Term] id: SO:0000168 name: restriction_enzyme_cut_site def: "A specific nucleotide sequence of DNA at or near which a particular restriction enzyme cuts the DNA." [SO:ma] is_obsolete: true [Term] id: SO:0000169 name: RNApol_I_promoter def: "A DNA sequence in eukaryotic DNA to which RNA polymerase I binds, to begin transcription." [SO:ke] synonym: "pol I promoter" EXACT [] synonym: "polymerase I promoter" EXACT [] synonym: "RNA polymerase A promoter" EXACT [] synonym: "RNApol I promoter" EXACT [] is_a: SO:0001203 ! RNA_polymerase_promoter [Term] id: SO:0000170 name: RNApol_II_promoter def: "A DNA sequence in eukaryotic DNA to which RNA polymerase II binds, to begin transcription." [SO:ke] synonym: "pol II promoter" RELATED [] synonym: "polymerase II promoter" EXACT [] synonym: "RNA polymerase B promoter" EXACT [] synonym: "RNApol II promoter" EXACT [] is_a: SO:0001203 ! RNA_polymerase_promoter [Term] id: SO:0000171 name: RNApol_III_promoter def: "A DNA sequence in eukaryotic DNA to which RNA polymerase III binds, to begin transcription." [SO:ke] synonym: "pol III promoter" EXACT [] synonym: "polymerase III promoter" EXACT [] synonym: "RNA polymerase C promoter" EXACT [] synonym: "RNApol III promoter" EXACT [] is_a: SO:0001203 ! RNA_polymerase_promoter [Term] id: SO:0000172 name: CAAT_signal def: "Part of a conserved sequence located about 75-bp upstream of the start point of eukaryotic transcription units which may be involved in RNA polymerase binding; consensus=GG(C|T)CAATCT." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "CAAT box" EXACT [] synonym: "CAAT signal" EXACT [] synonym: "CAAT-box" EXACT [] xref: http://en.wikipedia.org/wiki/CAAT_box "wiki" is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0000173 name: GC_rich_promoter_region def: "A conserved GC-rich region located upstream of the start point of eukaryotic transcription units which may occur in multiple copies or in either orientation; consensus=GGGCGG." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "GC rich promoter region" EXACT [] synonym: "GC-rich region" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0000174 name: TATA_box def: "A conserved AT-rich septamer found about 25-bp before the start point of many eukaryotic RNA polymerase II transcript units; may be involved in positioning the enzyme for correct initiation; consensus=TATA(A|T)A(A|T)." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html, PMID:16858867] comment: Binds TBP. synonym: "Goldstein-Hogness box" EXACT [] synonym: "TATA box" EXACT [] xref: http://en.wikipedia.org/wiki/TATA_box "wiki" is_a: SO:0001660 ! core_promoter_element [Term] id: SO:0000175 name: minus_10_signal def: "A conserved region about 10-bp upstream of the start point of bacterial transcription units which may be involved in binding RNA polymerase; consensus=TAtAaT. This region is associated with sigma factor 70." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "-10 signal" EXACT [] synonym: "minus 10 signal" EXACT [] synonym: "Pribnow box" EXACT [] synonym: "Pribnow Schaller box" EXACT [] synonym: "Pribnow-Schaller box" EXACT [] xref: http://en.wikipedia.org/wiki/Pribnow_box "wiki" is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001671 ! bacterial_RNApol_promoter_sigma_70 relationship: part_of SO:0001913 ! bacterial_RNApol_promoter_sigma_ecf [Term] id: SO:0000176 name: minus_35_signal def: "A conserved hexamer about 35-bp upstream of the start point of bacterial transcription units; consensus=TTGACa or TGTTGACA. This region is associated with sigma factor 70." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "-35 signal" EXACT [] synonym: "minus 35 signal" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001671 ! bacterial_RNApol_promoter_sigma_70 relationship: part_of SO:0001913 ! bacterial_RNApol_promoter_sigma_ecf [Term] id: SO:0000177 name: cross_genome_match def: "A nucleotide match against a sequence from another organism." [SO:ma] subset: SOFA synonym: "cross genome match" EXACT [] is_a: SO:0000347 ! nucleotide_match [Term] id: SO:0000178 name: operon def: "A group of contiguous genes transcribed as a single (polycistronic) mRNA from a single regulatory region." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA xref: http://en.wikipedia.org/wiki/Operon "wiki" is_a: SO:0005855 ! gene_group [Term] id: SO:0000179 name: clone_insert_start def: "The start of the clone insert." [SO:ke] subset: SOFA synonym: "clone insert start" EXACT [] is_a: SO:0000699 ! junction relationship: part_of SO:0000753 ! clone_insert [Term] id: SO:0000180 name: retrotransposon def: "A transposable element that is incorporated into a chromosome by a mechanism that requires reverse transcriptase." [http://www.dddmag.com/Glossary.aspx#r] synonym: "class I" RELATED [] synonym: "class I transposon" EXACT [] synonym: "retrotransposon element" EXACT [] xref: http://en.wikipedia.org/wiki/Retrotransposon "wiki" is_a: SO:0000101 ! transposable_element [Term] id: SO:0000181 name: translated_nucleotide_match def: "A match against a translated sequence." [SO:ke] subset: SOFA synonym: "translated nucleotide match" EXACT [] is_a: SO:0000347 ! nucleotide_match [Term] id: SO:0000182 name: DNA_transposon def: "A transposon where the mechanism of transposition is via a DNA intermediate." [SO:ke] synonym: "class II" RELATED [] synonym: "class II transposon" EXACT [] synonym: "DNA transposon" EXACT [] is_a: SO:0000101 ! transposable_element [Term] id: SO:0000183 name: non_transcribed_region def: "A region of the gene which is not transcribed." [SO:ke] subset: SOFA synonym: "non transcribed region" EXACT [] synonym: "non-transcribed sequence" EXACT [] synonym: "nontranscribed region" EXACT [] synonym: "nontranscribed sequence" EXACT [] is_a: SO:0000842 ! gene_component_region [Term] id: SO:0000184 name: U2_intron def: "A major type of spliceosomal intron spliced by the U2 spliceosome, that includes U1, U2, U4/U6 and U5 snRNAs." [PMID:9428511] comment: May have either GT-AG or AT-AG 5' and 3' boundaries. synonym: "U2 intron" EXACT [] is_a: SO:0000662 ! spliceosomal_intron [Term] id: SO:0000185 name: primary_transcript def: "A transcript that in its initial state requires modification to be functional." [SO:ma] subset: SOFA synonym: "precursor RNA" EXACT [] synonym: "primary transcript" EXACT [] xref: http://en.wikipedia.org/wiki/Primary_transcript "wiki" is_a: SO:0000673 ! transcript [Term] id: SO:0000186 name: LTR_retrotransposon def: "A retrotransposon flanked by long terminal repeat sequences." [SO:ke] synonym: "long terminal repeat retrotransposon" EXACT [] synonym: "LTR retrotransposon" EXACT [] is_a: SO:0000180 ! retrotransposon [Term] id: SO:0000187 name: repeat_family def: "A group of characterized repeat sequences." [SO:ke] subset: SOFA is_obsolete: true [Term] id: SO:0000188 name: intron def: "A region of a primary transcript that is transcribed, but removed from within the transcript by splicing together the sequences (exons) on either side of it." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA xref: http://en.wikipedia.org/wiki/Intron "wiki" is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000189 name: non_LTR_retrotransposon def: "A retrotransposon without long terminal repeat sequences." [SO:ke] synonym: "non LTR retrotransposon" EXACT [] is_a: SO:0000180 ! retrotransposon [Term] id: SO:0000190 name: five_prime_intron synonym: "5' intron" EXACT [] synonym: "5' intron sequence" EXACT [] synonym: "five prime intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000191 name: interior_intron synonym: "interior intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000192 name: three_prime_intron synonym: "3' intron" EXACT [] synonym: "3' intron sequence" RELATED [] synonym: "three prime intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000193 name: RFLP_fragment def: "A DNA fragment used as a reagent to detect the polymorphic genomic loci by hybridizing against the genomic DNA digested with a given restriction enzyme." [GOC:pj] subset: SOFA synonym: "restriction fragment length polymorphism" EXACT [] synonym: "RFLP" EXACT [] synonym: "RFLP fragment" EXACT [] xref: http://en.wikipedia.org/wiki/Restriction_fragment_length_polymorphism "wiki" is_a: SO:0000412 ! restriction_fragment [Term] id: SO:0000194 name: LINE_element def: "A dispersed repeat family with many copies, each from 1 to 6 kb long. New elements are generated by retroposition of a transcribed copy. Typically the LINE contains 2 ORF's one of which is reverse transcriptase, and 3'and 5' direct repeats." [http://www.ucl.ac.uk/~ucbhjow/b241/glossary.html] synonym: "LINE" EXACT [] synonym: "LINE element" EXACT [] synonym: "Long interspersed element" EXACT [] synonym: "Long interspersed nuclear element" EXACT [] is_a: SO:0000189 ! non_LTR_retrotransposon [Term] id: SO:0000195 name: coding_exon def: "An exon whereby at least one base is part of a codon (here, 'codon' is inclusive of the stop_codon)." [SO:ke] subset: SOFA synonym: "coding exon" EXACT [] is_a: SO:0000147 ! exon [Term] id: SO:0000196 name: five_prime_coding_exon_coding_region def: "The sequence of the five_prime_coding_exon that codes for protein." [SO:cjm] subset: SOFA synonym: "five prime exon coding region" EXACT [] is_a: SO:0001215 ! coding_region_of_exon relationship: part_of SO:0000200 ! five_prime_coding_exon [Term] id: SO:0000197 name: three_prime_coding_exon_coding_region def: "The sequence of the three_prime_coding_exon that codes for protein." [SO:cjm] subset: SOFA synonym: "three prime exon coding region" EXACT [] is_a: SO:0001215 ! coding_region_of_exon relationship: part_of SO:0000202 ! three_prime_coding_exon [Term] id: SO:0000198 name: noncoding_exon def: "An exon that does not contain any codons." [SO:ke] subset: SOFA synonym: "noncoding exon" EXACT [] is_a: SO:0000147 ! exon [Term] id: SO:0000199 name: translocation def: "A region of nucleotide sequence that has translocated to a new position." [SO:ke] subset: DBVAR synonym: "transchr" RELATED [http://www.ncbi.nlm.nih.gov/dbvar/] synonym: "translocated sequence" EXACT [] is_a: SO:0001059 ! sequence_alteration [Term] id: SO:0000200 name: five_prime_coding_exon def: "The 5' most coding exon." [SO:ke] subset: SOFA synonym: "5' coding exon" EXACT [] synonym: "five prime coding exon" EXACT [] is_a: SO:0000195 ! coding_exon [Term] id: SO:0000201 name: interior_exon def: "An exon that is bounded by 5' and 3' splice sites." [PMID:10373547] synonym: "interior exon" EXACT [] is_a: SO:0000147 ! exon [Term] id: SO:0000202 name: three_prime_coding_exon def: "The coding exon that is most 3-prime on a given transcript." [SO:ma] synonym: "3' coding exon" RELATED [] synonym: "three prime coding exon" EXACT [] is_a: SO:0000195 ! coding_exon [Term] id: SO:0000203 name: UTR def: "Messenger RNA sequences that are untranslated and lie five prime or three prime to sequences which are translated." [SO:ke] subset: SOFA synonym: "untranslated region" EXACT [] is_a: SO:0000836 ! mRNA_region [Term] id: SO:0000204 name: five_prime_UTR def: "A region at the 5' end of a mature transcript (preceding the initiation codon) that is not translated into a protein." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "5' UTR" EXACT [] synonym: "five prime UTR" EXACT [] synonym: "five_prime_untranslated_region" EXACT [] xref: http://en.wikipedia.org/wiki/5'_UTR "wiki" is_a: SO:0000203 ! UTR [Term] id: SO:0000205 name: three_prime_UTR def: "A region at the 3' end of a mature transcript (following the stop codon) that is not translated into a protein." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "three prime untranslated region" EXACT [] synonym: "three prime UTR" EXACT [] xref: http://en.wikipedia.org/wiki/Three_prime_untranslated_region "wiki" is_a: SO:0000203 ! UTR [Term] id: SO:0000206 name: SINE_element def: "A repetitive element, a few hundred base pairs long, that is dispersed throughout the genome. A common human SINE is the Alu element." [SO:ke] synonym: "Short interspersed element" EXACT [] synonym: "Short interspersed nuclear element" EXACT [] synonym: "SINE element" EXACT [] xref: http://en.wikipedia.org/wiki/Short_interspersed_nuclear_element "wiki" is_a: SO:0000189 ! non_LTR_retrotransposon [Term] id: SO:0000207 name: simple_sequence_length_variation synonym: "simple sequence length polymorphism" RELATED [] synonym: "simple sequence length variation" EXACT [] synonym: "SSLP" RELATED [] is_a: SO:0000248 ! sequence_length_variation [Term] id: SO:0000208 name: terminal_inverted_repeat_element def: "A DNA transposable element defined as having termini with perfect, or nearly perfect short inverted repeats, generally 10 - 40 nucleotides long." [http://www.genetics.org/cgi/reprint/156/4/1983.pdf] synonym: "terminal inverted repeat element" EXACT [] synonym: "TIR element" EXACT [] is_a: SO:0000182 ! DNA_transposon [Term] id: SO:0000209 name: rRNA_primary_transcript def: "A primary transcript encoding a ribosomal RNA." [SO:ke] subset: SOFA synonym: "ribosomal RNA primary transcript" EXACT [] synonym: "rRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000210 name: tRNA_primary_transcript def: "A primary transcript encoding a transfer RNA (SO:0000253)." [SO:ke] synonym: "tRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000211 name: alanine_tRNA_primary_transcript def: "A primary transcript encoding alanyl tRNA." [SO:ke] synonym: "alanine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000212 name: arginine_tRNA_primary_transcript def: "A primary transcript encoding arginyl tRNA (SO:0000255)." [SO:ke] synonym: "arginine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000213 name: asparagine_tRNA_primary_transcript def: "A primary transcript encoding asparaginyl tRNA (SO:0000256)." [SO:ke] synonym: "asparagine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000214 name: aspartic_acid_tRNA_primary_transcript def: "A primary transcript encoding aspartyl tRNA (SO:0000257)." [SO:ke] synonym: "aspartic acid tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000215 name: cysteine_tRNA_primary_transcript def: "A primary transcript encoding cysteinyl tRNA (SO:0000258)." [SO:ke] synonym: "cysteine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000216 name: glutamic_acid_tRNA_primary_transcript def: "A primary transcript encoding glutaminyl tRNA (SO:0000260)." [SO:ke] synonym: "glutamic acid tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000217 name: glutamine_tRNA_primary_transcript def: "A primary transcript encoding glutamyl tRNA (SO:0000260)." [SO:ke] synonym: "glutamine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000218 name: glycine_tRNA_primary_transcript def: "A primary transcript encoding glycyl tRNA (SO:0000263)." [SO:ke] synonym: "glycine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000219 name: histidine_tRNA_primary_transcript def: "A primary transcript encoding histidyl tRNA (SO:0000262)." [SO:ke] synonym: "histidine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000220 name: isoleucine_tRNA_primary_transcript def: "A primary transcript encoding isoleucyl tRNA (SO:0000263)." [SO:ke] synonym: "isoleucine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000221 name: leucine_tRNA_primary_transcript def: "A primary transcript encoding leucyl tRNA (SO:0000264)." [SO:ke] synonym: "leucine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000222 name: lysine_tRNA_primary_transcript def: "A primary transcript encoding lysyl tRNA (SO:0000265)." [SO:ke] synonym: "lysine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000223 name: methionine_tRNA_primary_transcript def: "A primary transcript encoding methionyl tRNA (SO:0000266)." [SO:ke] synonym: "methionine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000224 name: phenylalanine_tRNA_primary_transcript def: "A primary transcript encoding phenylalanyl tRNA (SO:0000267)." [SO:ke] synonym: "phenylalanine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000225 name: proline_tRNA_primary_transcript def: "A primary transcript encoding prolyl tRNA (SO:0000268)." [SO:ke] synonym: "proline tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000226 name: serine_tRNA_primary_transcript def: "A primary transcript encoding seryl tRNA (SO:000269)." [SO:ke] synonym: "serine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000227 name: threonine_tRNA_primary_transcript def: "A primary transcript encoding threonyl tRNA (SO:000270)." [SO:ke] synonym: "threonine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000228 name: tryptophan_tRNA_primary_transcript def: "A primary transcript encoding tryptophanyl tRNA (SO:000271)." [SO:ke] synonym: "tryptophan tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000229 name: tyrosine_tRNA_primary_transcript def: "A primary transcript encoding tyrosyl tRNA (SO:000272)." [SO:ke] synonym: "tyrosine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000230 name: valine_tRNA_primary_transcript def: "A primary transcript encoding valyl tRNA (SO:000273)." [SO:ke] synonym: "valine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000231 name: snRNA_primary_transcript def: "A primary transcript encoding a small nuclear RNA (SO:0000274)." [SO:ke] synonym: "snRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000232 name: snoRNA_primary_transcript def: "A primary transcript encoding a small nucleolar mRNA (SO:0000275)." [SO:ke] synonym: "snoRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000233 name: mature_transcript def: "A transcript which has undergone the necessary modifications, if any, for its function. In eukaryotes this includes, for example, processing of introns, cleavage, base modification, and modifications to the 5' and/or the 3' ends, other than addition of bases. In bacteria functional mRNAs are usually not modified." [SO:ke] comment: A processed transcript cannot contain introns. subset: SOFA synonym: "mature transcript" EXACT [] xref: http://en.wikipedia.org/wiki/Mature_transcript "wiki" is_a: SO:0000673 ! transcript relationship: derives_from SO:0000185 ! primary_transcript [Term] id: SO:0000234 name: mRNA def: "Messenger RNA is the intermediate molecule between DNA and protein. It includes UTR and coding sequences. It does not contain introns." [SO:ma] comment: An mRNA does not contain introns as it is a processed_transcript. The equivalent kind of primary_transcript is protein_coding_primary_transcript (SO:0000120) which may contain introns. This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "messenger RNA" EXACT [] xref: http://en.wikipedia.org/wiki/MRNA "wiki" is_a: SO:0000233 ! mature_transcript [Term] id: SO:0000235 name: TF_binding_site def: "A region of a nucleotide molecule that binds a Transcription Factor or Transcription Factor complex [GO:0005667]." [SO:ke] subset: SOFA synonym: "TF binding site" EXACT [] synonym: "transcription factor binding site" EXACT [] is_a: SO:0001654 ! nucleotide_to_protein_binding_site is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0000236 name: ORF def: "The in-frame interval between the stop codons of a reading frame which when read as sequential triplets, has the potential of encoding a sequential string of amino acids. TER(NNN)nTER." [SGD:rb, SO:ma] comment: The definition was modified by Rama. ORF is defined by the sequence, whereas the CDS is defined according to whether a polypeptide is made. This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "open reading frame" EXACT [] is_a: SO:0000717 ! reading_frame [Term] id: SO:0000237 name: transcript_attribute synonym: "transcript attribute" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000238 name: foldback_element def: "A transposable element with extensive secondary structure, characterized by large modular imperfect long inverted repeats." [http://www.genetics.org/cgi/reprint/156/4/1983.pdf] synonym: "foldback element" EXACT [] synonym: "long inverted repeat element" RELATED [] synonym: "LVR element" RELATED [] is_a: SO:0000182 ! DNA_transposon [Term] id: SO:0000239 name: flanking_region def: "The sequences extending on either side of a specific region." [SO:ke] subset: SOFA synonym: "flanking region" EXACT [] is_a: SO:0001412 ! topologically_defined_region [Term] id: SO:0000240 name: chromosome_variation synonym: "chromosome variation" EXACT [] is_a: SO:0001507 ! variant_collection disjoint_from: SO:0000400 ! sequence_attribute relationship: part_of SO:0001524 ! chromosomally_aberrant_genome [Term] id: SO:0000241 name: internal_UTR def: "A UTR bordered by the terminal and initial codons of two CDSs in a polycistronic transcript. Every UTR is either 5', 3' or internal." [SO:cjm] synonym: "internal UTR" EXACT [] is_a: SO:0000203 ! UTR [Term] id: SO:0000242 name: untranslated_region_polycistronic_mRNA def: "The untranslated sequence separating the 'cistrons' of multicistronic mRNA." [SO:ke] synonym: "untranslated region polycistronic mRNA" EXACT [] is_a: SO:0000203 ! UTR [Term] id: SO:0000243 name: internal_ribosome_entry_site def: "Sequence element that recruits a ribosomal subunit to internal mRNA for translation initiation." [SO:ke] synonym: "internal ribosomal entry sequence" EXACT [] synonym: "internal ribosomal entry site" EXACT [] synonym: "internal ribosome entry sequence" RELATED [] synonym: "internal ribosome entry site" EXACT [] synonym: "IRES" EXACT [] xref: http://en.wikipedia.org/wiki/Internal_ribosome_entry_site "wiki" is_a: SO:0000139 ! ribosome_entry_site [Term] id: SO:0000244 name: four_cutter_restriction_site synonym: "4-cutter_restriction_site" RELATED [] synonym: "four-cutter_restriction_sit" RELATED [] is_obsolete: true [Term] id: SO:0000245 name: mRNA_by_polyadenylation_status is_obsolete: true [Term] id: SO:0000246 name: polyadenylated def: "A attribute describing the addition of a poly A tail to the 3' end of a mRNA molecule." [SO:ke] is_a: SO:0000863 ! mRNA_attribute [Term] id: SO:0000247 name: mRNA_not_polyadenylated is_obsolete: true [Term] id: SO:0000248 name: sequence_length_variation synonym: "sequence length variation" EXACT [] is_a: SO:1000002 ! substitution [Term] id: SO:0000249 name: six_cutter_restriction_site synonym: "6-cutter_restriction_site" RELATED [] synonym: "six-cutter_restriction_site" RELATED [] is_obsolete: true [Term] id: SO:0000250 name: modified_RNA_base_feature def: "A post_transcriptionally modified base." [SO:ke] synonym: "modified RNA base feature" EXACT [] is_a: SO:0001236 ! base [Term] id: SO:0000251 name: eight_cutter_restriction_site synonym: "8-cutter_restriction_site" RELATED [] synonym: "eight-cutter_restriction_site" RELATED [] is_obsolete: true [Term] id: SO:0000252 name: rRNA def: "RNA that comprises part of a ribosome, and that can provide both structural scaffolding and catalytic activity." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html, ISBN:0198506732] subset: SOFA synonym: "ribosomal ribonucleic acid" EXACT [] synonym: "ribosomal RNA" EXACT [] xref: http://en.wikipedia.org/wiki/RRNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000209 ! rRNA_primary_transcript [Term] id: SO:0000253 name: tRNA def: "Transfer RNA (tRNA) molecules are approximately 80 nucleotides in length. Their secondary structure includes four short double-helical elements and three loops (D, anti-codon, and T loops). Further hydrogen bonds mediate the characteristic L-shaped molecular structure. Transfer RNAs have two regions of fundamental functional importance: the anti-codon, which is responsible for specific mRNA codon recognition, and the 3' end, to which the tRNA's corresponding amino acid is attached (by aminoacyl-tRNA synthetases). Transfer RNAs cope with the degeneracy of the genetic code in two manners: having more than one tRNA (with a specific anti-codon) for a particular amino acid; and 'wobble' base-pairing, i.e. permitting non-standard base-pairing at the 3rd anti-codon position." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00005, ISBN:0198506732] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "transfer ribonucleic acid" RELATED [] synonym: "transfer RNA" RELATED [] xref: http://en.wikipedia.org/wiki/TRNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0000254 name: alanyl_tRNA def: "A tRNA sequence that has an alanine anticodon, and a 3' alanine binding region." [SO:ke] synonym: "alanyl tRNA" EXACT [] synonym: "alanyl-transfer ribonucleic acid" EXACT [] synonym: "alanyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000211 ! alanine_tRNA_primary_transcript [Term] id: SO:0000255 name: rRNA_small_subunit_primary_transcript def: "A primary transcript encoding a small ribosomal subunit RNA." [SO:ke] synonym: "rRNA small subunit primary transcript" EXACT [] is_a: SO:0000209 ! rRNA_primary_transcript [Term] id: SO:0000256 name: asparaginyl_tRNA def: "A tRNA sequence that has an asparagine anticodon, and a 3' asparagine binding region." [SO:ke] synonym: "asparaginyl tRNA" EXACT [] synonym: "asparaginyl-transfer ribonucleic acid" EXACT [] synonym: "asparaginyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000213 ! asparagine_tRNA_primary_transcript [Term] id: SO:0000257 name: aspartyl_tRNA def: "A tRNA sequence that has an aspartic acid anticodon, and a 3' aspartic acid binding region." [SO:ke] synonym: "aspartyl tRNA" EXACT [] synonym: "aspartyl-transfer ribonucleic acid" EXACT [] synonym: "aspartyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000214 ! aspartic_acid_tRNA_primary_transcript [Term] id: SO:0000258 name: cysteinyl_tRNA def: "A tRNA sequence that has a cysteine anticodon, and a 3' cysteine binding region." [SO:ke] synonym: "cysteinyl tRNA" EXACT [] synonym: "cysteinyl-transfer ribonucleic acid" EXACT [] synonym: "cysteinyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000215 ! cysteine_tRNA_primary_transcript [Term] id: SO:0000259 name: glutaminyl_tRNA def: "A tRNA sequence that has a glutamine anticodon, and a 3' glutamine binding region." [SO:ke] synonym: "glutaminyl tRNA" EXACT [] synonym: "glutaminyl-transfer ribonucleic acid" EXACT [] synonym: "glutaminyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000216 ! glutamic_acid_tRNA_primary_transcript [Term] id: SO:0000260 name: glutamyl_tRNA def: "A tRNA sequence that has a glutamic acid anticodon, and a 3' glutamic acid binding region." [SO:ke] synonym: "glutamyl tRNA" EXACT [] synonym: "glutamyl-transfer ribonucleic acid" EXACT [] synonym: "glutamyl-transfer RNA" RELATED [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000217 ! glutamine_tRNA_primary_transcript [Term] id: SO:0000261 name: glycyl_tRNA def: "A tRNA sequence that has a glycine anticodon, and a 3' glycine binding region." [SO:ke] synonym: "glycyl tRNA" EXACT [] synonym: "glycyl-transfer ribonucleic acid" RELATED [] synonym: "glycyl-transfer RNA" RELATED [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000218 ! glycine_tRNA_primary_transcript [Term] id: SO:0000262 name: histidyl_tRNA def: "A tRNA sequence that has a histidine anticodon, and a 3' histidine binding region." [SO:ke] synonym: "histidyl tRNA" EXACT [] synonym: "histidyl-transfer ribonucleic acid" EXACT [] synonym: "histidyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000219 ! histidine_tRNA_primary_transcript [Term] id: SO:0000263 name: isoleucyl_tRNA def: "A tRNA sequence that has an isoleucine anticodon, and a 3' isoleucine binding region." [SO:ke] synonym: "isoleucyl tRNA" EXACT [] synonym: "isoleucyl-transfer ribonucleic acid" EXACT [] synonym: "isoleucyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000220 ! isoleucine_tRNA_primary_transcript [Term] id: SO:0000264 name: leucyl_tRNA def: "A tRNA sequence that has a leucine anticodon, and a 3' leucine binding region." [SO:ke] synonym: "leucyl tRNA" EXACT [] synonym: "leucyl-transfer ribonucleic acid" EXACT [] synonym: "leucyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000221 ! leucine_tRNA_primary_transcript [Term] id: SO:0000265 name: lysyl_tRNA def: "A tRNA sequence that has a lysine anticodon, and a 3' lysine binding region." [SO:ke] synonym: "lysyl tRNA" EXACT [] synonym: "lysyl-transfer ribonucleic acid" EXACT [] synonym: "lysyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000222 ! lysine_tRNA_primary_transcript [Term] id: SO:0000266 name: methionyl_tRNA def: "A tRNA sequence that has a methionine anticodon, and a 3' methionine binding region." [SO:ke] synonym: "methionyl tRNA" EXACT [] synonym: "methionyl-transfer ribonucleic acid" EXACT [] synonym: "methionyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000223 ! methionine_tRNA_primary_transcript [Term] id: SO:0000267 name: phenylalanyl_tRNA def: "A tRNA sequence that has a phenylalanine anticodon, and a 3' phenylalanine binding region." [SO:ke] synonym: "phenylalanyl tRNA" EXACT [] synonym: "phenylalanyl-transfer ribonucleic acid" EXACT [] synonym: "phenylalanyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000224 ! phenylalanine_tRNA_primary_transcript [Term] id: SO:0000268 name: prolyl_tRNA def: "A tRNA sequence that has a proline anticodon, and a 3' proline binding region." [SO:ke] synonym: "prolyl tRNA" EXACT [] synonym: "prolyl-transfer ribonucleic acid" EXACT [] synonym: "prolyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000225 ! proline_tRNA_primary_transcript [Term] id: SO:0000269 name: seryl_tRNA def: "A tRNA sequence that has a serine anticodon, and a 3' serine binding region." [SO:ke] synonym: "seryl tRNA" EXACT [] synonym: "seryl-transfer ribonucleic acid" RELATED [] synonym: "seryl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000226 ! serine_tRNA_primary_transcript [Term] id: SO:0000270 name: threonyl_tRNA def: "A tRNA sequence that has a threonine anticodon, and a 3' threonine binding region." [SO:ke] synonym: "threonyl tRNA" EXACT [] synonym: "threonyl-transfer ribonucleic acid" EXACT [] synonym: "threonyl-transfer RNA" RELATED [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000227 ! threonine_tRNA_primary_transcript [Term] id: SO:0000271 name: tryptophanyl_tRNA def: "A tRNA sequence that has a tryptophan anticodon, and a 3' tryptophan binding region." [SO:ke] synonym: "tryptophanyl tRNA" EXACT [] synonym: "tryptophanyl-transfer ribonucleic acid" EXACT [] synonym: "tryptophanyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000228 ! tryptophan_tRNA_primary_transcript [Term] id: SO:0000272 name: tyrosyl_tRNA def: "A tRNA sequence that has a tyrosine anticodon, and a 3' tyrosine binding region." [SO:ke] synonym: "tyrosyl tRNA" EXACT [] synonym: "tyrosyl-transfer ribonucleic acid" EXACT [] synonym: "tyrosyl-transfer RNA" RELATED [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000229 ! tyrosine_tRNA_primary_transcript [Term] id: SO:0000273 name: valyl_tRNA def: "A tRNA sequence that has a valine anticodon, and a 3' valine binding region." [SO:ke] synonym: "valyl tRNA" EXACT [] synonym: "valyl-transfer ribonucleic acid" EXACT [] synonym: "valyl-transfer RNA" RELATED [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000230 ! valine_tRNA_primary_transcript [Term] id: SO:0000274 name: snRNA def: "A small nuclear RNA molecule involved in pre-mRNA splicing and processing." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html, PMID:11733745, WB:ems] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "small nuclear RNA" EXACT [] xref: http://en.wikipedia.org/wiki/SnRNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000231 ! snRNA_primary_transcript [Term] id: SO:0000275 name: snoRNA def: "A snoRNA (small nucleolar RNA) is any one of a class of small RNAs that are associated with the eukaryotic nucleus as components of small nucleolar ribonucleoproteins. They participate in the processing or modifications of many RNAs, mostly ribosomal RNAs (rRNAs) though snoRNAs are also known to target other classes of RNA, including spliceosomal RNAs, tRNAs, and mRNAs via a stretch of sequence that is complementary to a sequence in the targeted RNA." [GOC:kgc] subset: SOFA synonym: "small nucleolar RNA" EXACT [] xref: http://en.wikipedia.org/wiki/SnoRNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000232 ! snoRNA_primary_transcript [Term] id: SO:0000276 name: miRNA def: "Small, ~22-nt, RNA molecule that is the endogenous transcript of a miRNA gene. Micro RNAs are produced from precursor molecules (SO:0000647) that can form local hairpin structures, which ordinarily are processed (via the Dicer pathway) such that a single miRNA molecule accumulates from one arm of a hairpin precursor molecule. Micro RNAs may trigger the cleavage of their target molecules or act as translational repressors." [PMID:12592000] subset: SOFA synonym: "micro RNA" EXACT [] synonym: "microRNA" EXACT [] xref: http://en.wikipedia.org/wiki/MiRNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA relationship: derives_from SO:0000647 ! miRNA_primary_transcript [Term] id: SO:0000277 name: bound_by_factor def: "An attribute describing a sequence that is bound by another molecule." [SO:ke] comment: Formerly called transcript_by_bound_factor. synonym: "bound by factor" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000278 name: transcript_bound_by_nucleic_acid def: "A transcript that is bound by a nucleic acid." [SO:xp] comment: Formerly called transcript_by_bound_nucleic_acid. synonym: "transcript bound by nucleic acid" EXACT [] is_a: SO:0000673 ! transcript relationship: has_quality SO:0000876 ! bound_by_nucleic_acid [Term] id: SO:0000279 name: transcript_bound_by_protein def: "A transcript that is bound by a protein." [SO:xp] comment: Formerly called transcript_by_bound_protein. synonym: "transcript bound by protein" EXACT [] is_a: SO:0000673 ! transcript relationship: has_quality SO:0000875 ! bound_by_protein [Term] id: SO:0000280 name: engineered_gene def: "A gene that is engineered." [SO:xp] synonym: "engineered gene" EXACT [] is_a: SO:0000704 ! gene is_a: SO:0000804 ! engineered_region relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000281 name: engineered_foreign_gene def: "A gene that is engineered and foreign." [SO:xp] synonym: "engineered foreign gene" EXACT [] is_a: SO:0000280 ! engineered_gene is_a: SO:0000285 ! foreign_gene is_a: SO:0000805 ! engineered_foreign_region relationship: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000282 name: mRNA_with_minus_1_frameshift def: "An mRNA with a minus 1 frameshift." [SO:xp] synonym: "mRNA with minus 1 frameshift" EXACT [] is_a: SO:0000108 ! mRNA_with_frameshift relationship: has_quality SO:0000866 ! minus_1_frameshift [Term] id: SO:0000283 name: engineered_foreign_transposable_element_gene def: "A transposable_element that is engineered and foreign." [SO:xp] synonym: "engineered foreign transposable element gene" EXACT [] is_a: SO:0000111 ! transposable_element_gene is_a: SO:0000281 ! engineered_foreign_gene relationship: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000284 name: type_I_enzyme_restriction_site def: "The recognition site is bipartite and interrupted." [http://www.promega.com] is_obsolete: true [Term] id: SO:0000285 name: foreign_gene def: "A gene that is foreign." [SO:xp] synonym: "foreign gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000286 name: long_terminal_repeat def: "A sequence directly repeated at both ends of a defined sequence, of the sort typically found in retroviruses." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "direct terminal repeat" RELATED [] synonym: "long terminal repeat" EXACT [] synonym: "LTR" EXACT [] xref: http://en.wikipedia.org/wiki/Long_terminal_repeat "wiki" is_a: SO:0000657 ! repeat_region relationship: part_of SO:0000186 ! LTR_retrotransposon [Term] id: SO:0000287 name: fusion_gene def: "A gene that is a fusion." [SO:xp] synonym: "fusion gene" EXACT [] xref: http://en.wikipedia.org/wiki/Fusion_gene "wiki" is_a: SO:0000704 ! gene relationship: has_quality SO:0000806 ! fusion [Term] id: SO:0000288 name: engineered_fusion_gene def: "A fusion gene that is engineered." [SO:xp] synonym: "engineered fusion gene" EXACT [] is_a: SO:0000280 ! engineered_gene is_a: SO:0000287 ! fusion_gene relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000289 name: microsatellite def: "A repeat_region containing repeat_units (2 to 4 bp) that is repeated multiple times in tandem." [http://www.informatics.jax.org/silver/glossary.shtml] subset: SOFA synonym: "microsatellite locus" EXACT [] synonym: "microsatellite marker" EXACT [] synonym: "VNTR" EXACT [] xref: http://en.wikipedia.org/wiki/Microsatellite "wiki" is_a: SO:0000005 ! satellite_DNA [Term] id: SO:0000290 name: dinucleotide_repeat_microsatellite_feature synonym: "dinucleotide repeat microsatellite" EXACT [] synonym: "dinucleotide repeat microsatellite feature" EXACT [] synonym: "dinucleotide repeat microsatellite locus" EXACT [] synonym: "dinucleotide repeat microsatellite marker" EXACT [] is_a: SO:0000289 ! microsatellite [Term] id: SO:0000291 name: trinucleotide_repeat_microsatellite_feature synonym: "dinucleotide repeat microsatellite marker" RELATED [] synonym: "rinucleotide repeat microsatellite" EXACT [] synonym: "trinucleotide repeat microsatellite feature" EXACT [] synonym: "trinucleotide repeat microsatellite locus" EXACT [] is_a: SO:0000289 ! microsatellite [Term] id: SO:0000292 name: repetitive_element is_obsolete: true [Term] id: SO:0000293 name: engineered_foreign_repetitive_element def: "A repetitive element that is engineered and foreign." [SO:xp] synonym: "engineered foreign repetitive element" EXACT [] is_a: SO:0000657 ! repeat_region is_a: SO:0000805 ! engineered_foreign_region relationship: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000294 name: inverted_repeat def: "The sequence is complementarily repeated on the opposite strand. It is a palindrome, and it may, or may not be hyphenated. Examples: GCTGATCAGC, or GCTGA-----TCAGC." [SO:ke] subset: SOFA synonym: "inverted repeat" EXACT [] synonym: "inverted repeat sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Inverted_repeat "wiki" is_a: SO:0000657 ! repeat_region [Term] id: SO:0000295 name: U12_intron def: "A type of spliceosomal intron spliced by the U12 spliceosome, that includes U11, U12, U4atac/U6atac and U5 snRNAs." [PMID:9428511] comment: May have either GT-AC or AT-AC 5' and 3' boundaries. synonym: "U12 intron" EXACT [] synonym: "U12-dependent intron" EXACT [] is_a: SO:0000662 ! spliceosomal_intron [Term] id: SO:0000296 name: origin_of_replication def: "The origin of replication; starting site for duplication of a nucleic acid molecule to give two identical copies." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "ori" EXACT [] synonym: "origin of replication" EXACT [] xref: http://en.wikipedia.org/wiki/Origin_of_replication "wiki" is_a: SO:0001411 ! biological_region relationship: part_of SO:0001235 ! replicon [Term] id: SO:0000297 name: D_loop def: "Displacement loop; a region within mitochondrial DNA in which a short stretch of RNA is paired with one strand of DNA, displacing the original partner DNA strand in this region; also used to describe the displacement of a region of one strand of duplex DNA by a single stranded invader in the reaction catalyzed by RecA protein." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "D-loop" EXACT [] synonym: "displacement loop" RELATED [] xref: http://en.wikipedia.org/wiki/D_loop "wiki" is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000298 name: recombination_feature synonym: "recombination feature" EXACT [] is_a: SO:0001411 ! biological_region [Term] id: SO:0000299 name: specific_recombination_site synonym: "specific recombination site" EXACT [] is_a: SO:0000669 ! sequence_rearrangement_feature [Term] id: SO:0000300 name: recombination_feature_of_rearranged_gene synonym: "recombination feature of rearranged gene" EXACT [] is_a: SO:0000299 ! specific_recombination_site [Term] id: SO:0000301 name: vertebrate_immune_system_gene_recombination_feature synonym: "vertebrate immune system gene recombination feature" EXACT [] is_a: SO:0000300 ! recombination_feature_of_rearranged_gene [Term] id: SO:0000302 name: J_gene_recombination_feature def: "Recombination signal including J-heptamer, J-spacer and J-nonamer in 5' of J-region of a J-gene or J-sequence." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J gene recombination feature" EXACT [] synonym: "J-RS" EXACT [] is_a: SO:0000939 ! vertebrate_immune_system_gene_recombination_signal_feature [Term] id: SO:0000303 name: clip def: "Part of the primary transcript that is clipped off during processing." [SO:ke] subset: SOFA is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000304 name: type_II_enzyme_restriction_site def: "The recognition site is either palindromic, partially palindromic or an interrupted palindrome. Cleavage occurs within the recognition site." [http://www.promega.com] is_obsolete: true [Term] id: SO:0000305 name: modified_DNA_base def: "A modified nucleotide, i.e. a nucleotide other than A, T, C. G." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: Modified base:. subset: SOFA synonym: "modified base site" EXACT [] is_a: SO:0001236 ! base is_a: SO:0001720 ! epigenetically_modified_region [Term] id: SO:0000306 name: methylated_DNA_base_feature def: "A nucleotide modified by methylation." [SO:ke] subset: SOFA synonym: "methylated base feature" EXACT [] is_a: SO:0000305 ! modified_DNA_base [Term] id: SO:0000307 name: CpG_island def: "Regions of a few hundred to a few thousand bases in vertebrate genomes that are relatively GC and CpG rich; they are typically unmethylated and often found near the 5' ends of genes." [SO:rd] subset: SOFA synonym: "CG island" EXACT [] synonym: "CpG island" EXACT [] xref: http://en.wikipedia.org/wiki/CpG_island "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000308 name: sequence_feature_locating_method is_obsolete: true [Term] id: SO:0000309 name: computed_feature is_obsolete: true [Term] id: SO:0000310 name: predicted_ab_initio_computation is_obsolete: true [Term] id: SO:0000311 name: computed_feature_by_similarity def: "." [SO:ma] comment: similar to: is_obsolete: true [Term] id: SO:0000312 name: experimentally_determined def: "Attribute to describe a feature that has been experimentally verified." [SO:ke] synonym: "experimentally determined" EXACT [] is_a: SO:0000789 ! validated [Term] id: SO:0000313 name: stem_loop alt_id: SO:0000019 def: "A double-helical region of nucleic acid formed by base-pairing between adjacent (inverted) complementary sequences." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "RNA_hairpin_loop" EXACT [] synonym: "stem loop" EXACT [] synonym: "stem-loop" EXACT [] xref: http://en.wikipedia.org/wiki/Stem_loop "wiki" is_a: SO:0000122 ! RNA_sequence_secondary_structure [Term] id: SO:0000314 name: direct_repeat def: "A repeat where the same sequence is repeated in the same direction. Example: GCTGA-----GCTGA." [SO:ke] subset: SOFA synonym: "direct repeat" EXACT [] xref: http://en.wikipedia.org/wiki/Direct_repeat "wiki" is_a: SO:0000657 ! repeat_region [Term] id: SO:0000315 name: TSS def: "The first base where RNA polymerase begins to synthesize the RNA transcript." [SO:ke] subset: SOFA synonym: "transcription start site" EXACT [] is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000316 name: CDS def: "A contiguous sequence which begins with, and includes, a start codon and ends with, and includes, a stop codon." [SO:ma] subset: SOFA synonym: "coding sequence" EXACT [] is_a: SO:0000836 ! mRNA_region [Term] id: SO:0000317 name: cDNA_clone def: "Complementary DNA; A piece of DNA copied from an mRNA and spliced into a vector for propagation in a suitable host." [http://seqcore.brcf.med.umich.edu/doc/educ/dnapr/mbglossary/mbgloss.html] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "cDNA clone" EXACT [] is_a: SO:0000151 ! clone relationship: has_quality SO:0000756 ! cDNA [Term] id: SO:0000318 name: start_codon def: "First codon to be translated by a ribosome." [SO:ke] subset: SOFA synonym: "initiation codon" EXACT [] synonym: "start codon" EXACT [] xref: http://en.wikipedia.org/wiki/Start_codon "wiki" is_a: SO:0000360 ! codon [Term] id: SO:0000319 name: stop_codon def: "In mRNA, a set of three nucleotides that indicates the end of information for protein synthesis." [SO:ke] subset: SOFA synonym: "stop codon" EXACT [] xref: http://en.wikipedia.org/wiki/Stop_codon "wiki" is_a: SO:0000360 ! codon [Term] id: SO:0000320 name: intronic_splice_enhancer def: "Sequences within the intron that modulate splice site selection for some introns." [SO:ke] synonym: "intronic splice enhancer" EXACT [] is_a: SO:0000344 ! splice_enhancer is_a: SO:0000841 ! spliceosomal_intron_region [Term] id: SO:0000321 name: mRNA_with_plus_1_frameshift def: "An mRNA with a plus 1 frameshift." [SO:ke] synonym: "mRNA with plus 1 frameshift" EXACT [] is_a: SO:0000108 ! mRNA_with_frameshift relationship: has_quality SO:0000868 ! plus_1_frameshift [Term] id: SO:0000322 name: nuclease_hypersensitive_site synonym: "nuclease hypersensitive site" EXACT [] is_a: SO:0000684 ! nuclease_sensitive_site [Term] id: SO:0000323 name: coding_start def: "The first base to be translated into protein." [SO:ke] synonym: "coding start" EXACT [] synonym: "translation initiation site" EXACT [] synonym: "translation start" RELATED [] is_a: SO:0000851 ! CDS_region [Term] id: SO:0000324 name: tag def: "A nucleotide sequence that may be used to identify a larger sequence." [SO:ke] subset: SOFA is_a: SO:0000696 ! oligo [Term] id: SO:0000325 name: rRNA_large_subunit_primary_transcript def: "A primary transcript encoding a large ribosomal subunit RNA." [SO:ke] subset: SOFA synonym: "35S rRNA primary transcript" EXACT [] synonym: "rRNA large subunit primary transcript" EXACT [] is_a: SO:0000209 ! rRNA_primary_transcript [Term] id: SO:0000326 name: SAGE_tag def: "A short diagnostic sequence tag, serial analysis of gene expression (SAGE), that allows the quantitative and simultaneous analysis of a large number of transcripts." [http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=7570003&dopt=Abstract] subset: SOFA synonym: "SAGE tag" EXACT [] is_a: SO:0000324 ! tag [Term] id: SO:0000327 name: coding_end def: "The last base to be translated into protein. It does not include the stop codon." [SO:ke] synonym: "coding end" EXACT [] synonym: "translation termination site" EXACT [] synonym: "translation_end" EXACT [] is_a: SO:0000851 ! CDS_region [Term] id: SO:0000328 name: microarray_oligo synonym: "microarray oligo" EXACT [] synonym: "microarray oligonucleotide" EXACT [] is_a: SO:0000051 ! probe [Term] id: SO:0000329 name: mRNA_with_plus_2_frameshift def: "An mRNA with a plus 2 frameshift." [SO:xp] synonym: "mRNA with plus 2 frameshift" EXACT [] is_a: SO:0000108 ! mRNA_with_frameshift relationship: has_quality SO:0000869 ! plus_2_framshift [Term] id: SO:0000330 name: conserved_region def: "Region of sequence similarity by descent from a common ancestor." [SO:ke] subset: SOFA synonym: "conserved region" EXACT [] xref: http://en.wikipedia.org/wiki/Conserved_region "wiki" is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000331 name: STS def: "Short (typically a few hundred base pairs) DNA sequence that has a single occurrence in a genome and whose location and base sequence are known." [http://www.biospace.com] subset: SOFA synonym: "sequence tag site" EXACT [] is_a: SO:0000324 ! tag [Term] id: SO:0000332 name: coding_conserved_region def: "Coding region of sequence similarity by descent from a common ancestor." [SO:ke] subset: SOFA synonym: "coding conserved region" EXACT [] is_a: SO:0000330 ! conserved_region [Term] id: SO:0000333 name: exon_junction def: "The boundary between two exons in a processed transcript." [SO:ke] subset: SOFA synonym: "exon junction" EXACT [] is_a: SO:0000699 ! junction relationship: part_of SO:0000233 ! mature_transcript [Term] id: SO:0000334 name: nc_conserved_region def: "Non-coding region of sequence similarity by descent from a common ancestor." [SO:ke] subset: SOFA synonym: "nc conserved region" EXACT [] synonym: "noncoding conserved region" EXACT [] is_a: SO:0000330 ! conserved_region [Term] id: SO:0000335 name: mRNA_with_minus_2_frameshift def: "A mRNA with a minus 2 frameshift." [SO:ke] synonym: "mRNA with minus 2 frameshift" EXACT [] is_a: SO:0000108 ! mRNA_with_frameshift relationship: has_quality SO:0000867 ! minus_2_frameshift [Term] id: SO:0000336 name: pseudogene def: "A sequence that closely resembles a known functional gene, at another locus within a genome, that is non-functional as a consequence of (usually several) mutations that prevent either its transcription or translation (or both). In general, pseudogenes result from either reverse transcription of a transcript of their \"normal\" paralog (SO:0000043) (in which case the pseudogene typically lacks introns and includes a poly(A) tail) or from recombination (SO:0000044) (in which case the pseudogene is typically a tandem duplication of its \"normal\" paralog)." [http://www.ucl.ac.uk/~ucbhjow/b241/glossary.html] subset: SOFA xref: http://en.wikipedia.org/wiki/Pseudogene "wiki" is_a: SO:0001411 ! biological_region relationship: non_functional_homolog_of SO:0000704 ! gene [Term] id: SO:0000337 name: RNAi_reagent def: "A double stranded RNA duplex, at least 20bp long, used experimentally to inhibit gene function by RNA interference." [SO:rd] subset: SOFA synonym: "RNAi reagent" EXACT [] is_a: SO:0000442 ! ds_oligo [Term] id: SO:0000338 name: MITE def: "A highly repetitive and short (100-500 base pair) transposable element with terminal inverted repeats (TIR) and target site duplication (TSD). MITEs do not encode proteins." [http://www.pnas.org/cgi/content/full/97/18/10083] synonym: "miniature inverted repeat transposable element" EXACT [] is_a: SO:0000208 ! terminal_inverted_repeat_element [Term] id: SO:0000339 name: recombination_hotspot def: "A region in a genome which promotes recombination." [SO:rd] synonym: "recombination hotspot" EXACT [] xref: http://en.wikipedia.org/wiki/Recombination_hotspot "wiki" is_a: SO:0000298 ! recombination_feature [Term] id: SO:0000340 name: chromosome def: "Structural unit composed of a nucleic acid molecule which controls its own replication through the interaction of specific proteins at one or more origins of replication." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA xref: http://en.wikipedia.org/wiki/Chromosome "wiki" is_a: SO:0001235 ! replicon [Term] id: SO:0000341 name: chromosome_band def: "A cytologically distinguishable feature of a chromosome, often made visible by staining, and usually alternating light and dark." [SO:ma] subset: SOFA synonym: "chromosome band" EXACT [] synonym: "cytoband" EXACT [] synonym: "cytological band" EXACT [] xref: http://en.wikipedia.org/wiki/Cytological_band "wiki" is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000342 name: site_specific_recombination_target_region synonym: "site specific recombination target region" EXACT [] is_a: SO:0000299 ! specific_recombination_site [Term] id: SO:0000343 name: match def: "A region of sequence, aligned to another sequence with some statistical significance, using an algorithm such as BLAST or SIM4." [SO:ke] subset: SOFA is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000344 name: splice_enhancer def: "Region of a transcript that regulates splicing." [SO:ke] subset: SOFA synonym: "splice enhancer" EXACT [] is_a: SO:0001056 ! splicing_regulatory_region [Term] id: SO:0000345 name: EST def: "A tag produced from a single sequencing read from a cDNA clone or PCR product; typically a few hundred base pairs long." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "expressed sequence tag" EXACT [] is_a: SO:0000324 ! tag relationship: derives_from SO:0000234 ! mRNA [Term] id: SO:0000346 name: loxP_site synonym: "Cre-recombination target region" RELATED [] synonym: "loxP site" EXACT [] is_a: SO:0000947 ! resolution_site [Term] id: SO:0000347 name: nucleotide_match def: "A match against a nucleotide sequence." [SO:ke] subset: SOFA synonym: "nucleotide match" EXACT [] is_a: SO:0000343 ! match [Term] id: SO:0000348 name: nucleic_acid def: "An attribute describing a sequence consisting of nucleobases bound to repeating units. The forms found in nature are deoxyribonucleic acid (DNA), where the repeating units are 2-deoxy-D-ribose rings connected to a phosphate backbone, and ribonucleic acid (RNA), where the repeating units are D-ribose rings connected to a phosphate backbone." [CHEBI:33696, RSC:cb] synonym: "nucleic acid" EXACT [] xref: http://en.wikipedia.org/wiki/Nucleic_acid "wiki" is_a: SO:0000443 ! polymer_attribute [Term] id: SO:0000349 name: protein_match def: "A match against a protein sequence." [SO:ke] subset: SOFA synonym: "protein match" EXACT [] is_a: SO:0000343 ! match [Term] id: SO:0000350 name: FRT_site def: "An inversion site found on the Saccharomyces cerevisiae 2 micron plasmid." [SO:ma] synonym: "FLP recombination target region" EXACT [] synonym: "FRT site" EXACT [] is_a: SO:0000948 ! inversion_site [Term] id: SO:0000351 name: synthetic_sequence def: "An attribute to decide a sequence of nucleotides, nucleotide analogs, or amino acids that has been designed by an experimenter and which may, or may not, correspond with any natural sequence." [SO:ma] synonym: "synthetic sequence" EXACT [] is_a: SO:0000443 ! polymer_attribute [Term] id: SO:0000352 name: DNA def: "An attribute describing a sequence consisting of nucleobases bound to a repeating unit made of a 2-deoxy-D-ribose ring connected to a phosphate backbone." [RSC:cb] is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0000353 name: sequence_assembly def: "A sequence of nucleotides that has been algorithmically derived from an alignment of two or more different sequences." [SO:ma] subset: SOFA synonym: "sequence assembly" EXACT [] xref: http://en.wikipedia.org/wiki/Sequence_assembly "wiki" is_a: SO:0001248 ! assembly [Term] id: SO:0000354 name: group_1_intron_homing_endonuclease_target_region def: "A region of intronic nucleotide sequence targeted by a nuclease enzyme." [SO:ke] synonym: "group 1 intron homing endonuclease target region" EXACT [] is_a: SO:0000684 ! nuclease_sensitive_site [Term] id: SO:0000355 name: haplotype_block def: "A region of the genome which is co-inherited as the result of the lack of historic recombination within it." [SO:ma] synonym: "haplotype block" EXACT [] is_a: SO:0000298 ! recombination_feature [Term] id: SO:0000356 name: RNA def: "An attribute describing a sequence consisting of nucleobases bound to a repeating unit made of a D-ribose ring connected to a phosphate backbone." [RSC:cb] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0000357 name: flanked def: "An attribute describing a region that is bounded either side by a particular kind of region." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000359 name: floxed def: "An attribute describing sequence that is flanked by Lox-P sites." [SO:ke] xref: http://en.wikipedia.org/wiki/Floxed "wiki" is_a: SO:0000357 ! flanked [Term] id: SO:0000360 name: codon def: "A set of (usually) three nucleotide bases in a DNA or RNA sequence, which together code for a unique amino acid or the termination of translation and are contained within the CDS." [http://www.everythingbio.com/glos/definition.php?word=codon, SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Codon "wiki" is_a: SO:0000851 ! CDS_region [Term] id: SO:0000361 name: FRT_flanked def: "An attribute to describe sequence that is flanked by the FLP recombinase recognition site, FRT." [SO:ke] synonym: "FRT flanked" EXACT [] is_a: SO:0000357 ! flanked [Term] id: SO:0000362 name: invalidated_by_chimeric_cDNA def: "A cDNA clone constructed from more than one mRNA. Usually an experimental artifact." [SO:ma] synonym: "invalidated by chimeric cDNA" EXACT [] is_a: SO:0000790 ! invalidated [Term] id: SO:0000363 name: floxed_gene def: "A transgene that is floxed." [SO:xp] synonym: "floxed gene" EXACT [] is_a: SO:0000902 ! transgene relationship: has_quality SO:0000359 ! floxed [Term] id: SO:0000364 name: transposable_element_flanking_region def: "The region of sequence surrounding a transposable element." [SO:ke] synonym: "transposable element flanking region" EXACT [] is_a: SO:0000239 ! flanking_region [Term] id: SO:0000365 name: integron def: "A region encoding an integrase which acts at a site adjacent to it (attI_site) to insert DNA which must include but is not limited to an attC_site." [SO:as] xref: http://en.wikipedia.org/wiki/Integron "wiki" is_a: SO:0001039 ! integrated_mobile_genetic_element [Term] id: SO:0000366 name: insertion_site def: "The junction where an insertion occurred." [SO:ke] subset: SOFA synonym: "insertion site" EXACT [] is_a: SO:0000699 ! junction [Term] id: SO:0000367 name: attI_site def: "A region within an integron, adjacent to an integrase, at which site specific recombination involving an attC_site takes place." [SO:as] synonym: "attI site" EXACT [] is_a: SO:0000946 ! integration_excision_site relationship: part_of SO:0000365 ! integron [Term] id: SO:0000368 name: transposable_element_insertion_site def: "The junction in a genome where a transposable_element has inserted." [SO:ke] subset: SOFA synonym: "transposable element insertion site" EXACT [] is_a: SO:0000366 ! insertion_site [Term] id: SO:0000369 name: integrase_coding_region is_obsolete: true [Term] id: SO:0000370 name: small_regulatory_ncRNA def: "A non-coding RNA, usually with a specific secondary structure, that acts to regulate gene expression." [SO:ma] subset: SOFA synonym: "small regulatory ncRNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000371 name: conjugative_transposon def: "A transposon that encodes function required for conjugation." [http://www.sci.sdsu.edu/~smaloy/Glossary/C.html] synonym: "conjugative transposon" EXACT [] is_a: SO:0000182 ! DNA_transposon [Term] id: SO:0000372 name: enzymatic_RNA def: "An RNA sequence that has catalytic activity with or without an associated ribonucleoprotein." [RSC:cb] comment: This was moved to be a child of transcript (SO:0000673) because some enzymatic RNA regions are part of primary transcripts and some are part of processed transcripts. subset: SOFA synonym: "enzymatic RNA" EXACT [] is_a: SO:0000673 ! transcript relationship: has_quality SO:0001185 ! enzymatic [Term] id: SO:0000373 name: recombinationally_inverted_gene def: "A recombinationally rearranged gene by inversion." [SO:xp] synonym: "recombinationally inverted gene" EXACT [] is_a: SO:0000456 ! recombinationally_rearranged_gene relationship: has_quality SO:1000036 ! inversion [Term] id: SO:0000374 name: ribozyme def: "An RNA with catalytic activity." [SO:ma] subset: SOFA xref: http://en.wikipedia.org/wiki/Ribozyme "wiki" is_a: SO:0000372 ! enzymatic_RNA relationship: has_quality SO:0001186 ! ribozymic [Term] id: SO:0000375 name: rRNA_5_8S def: "5_8S ribosomal RNA (5. 8S rRNA) is a component of the large subunit of the eukaryotic ribosome. It is transcribed by RNA polymerase I as part of the 45S precursor that also contains 18S and 28S rRNA. Functionally, it is thought that 5.8S rRNA may be involved in ribosome translocation. It is also known to form covalent linkage to the p53 tumour suppressor protein. 5_8S rRNA is also found in archaea." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00002] subset: SOFA synonym: "5.8S LSU rRNA" EXACT [] synonym: "5.8S ribosomal RNA" EXACT [] synonym: "5.8S rRNA" EXACT [] synonym: "rRNA 5 8S" EXACT [] xref: http://en.wikipedia.org/wiki/5.8S_ribosomal_RNA "wiki" is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0000376 name: RNA_6S def: "A small (184-nt in E. coli) RNA that forms a hairpin type structure. 6S RNA associates with RNA polymerase in a highly specific manner. 6S RNA represses expression from a sigma70-dependent promoter during stationary phase." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00013] synonym: "6S RNA" EXACT [] synonym: "RNA 6S" EXACT [] xref: http://en.wikipedia.org/wiki/6S_RNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000377 name: CsrB_RsmB_RNA def: "An enterobacterial RNA that binds the CsrA protein. The CsrB RNAs contain a conserved motif CAGGXXG that is found in up to 18 copies and has been suggested to bind CsrA. The Csr regulatory system has a strong negative regulatory effect on glycogen biosynthesis, glyconeogenesis and glycogen catabolism and a positive regulatory effect on glycolysis. In other bacteria such as Erwinia caratovara the RsmA protein has been shown to regulate the production of virulence determinants, such extracellular enzymes. RsmA binds to RsmB regulatory RNA which is also a member of this family." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00018] synonym: "CsrB RsmB RNA" EXACT [] synonym: "CsrB-RsmB RNA" EXACT [] is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000378 name: DsrA_RNA def: "DsrA RNA regulates both transcription, by overcoming transcriptional silencing by the nucleoid-associated H-NS protein, and translation, by promoting efficient translation of the stress sigma factor, RpoS. These two activities of DsrA can be separated by mutation: the first of three stem-loops of the 85 nucleotide RNA is necessary for RpoS translation but not for anti-H-NS action, while the second stem-loop is essential for antisilencing and less critical for RpoS translation. The third stem-loop, which behaves as a transcription terminator, can be substituted by the trp transcription terminator without loss of either DsrA function. The sequence of the first stem-loop of DsrA is complementary with the upstream leader portion of RpoS messenger RNA, suggesting that pairing of DsrA with the RpoS message might be important for translational regulation." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00014] synonym: "DsrA RNA" EXACT [] xref: http://en.wikipedia.org/wiki/DsrA_RNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000379 name: GcvB_RNA def: "A small untranslated RNA involved in expression of the dipeptide and oligopeptide transport systems in Escherichia coli." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00022] synonym: "GcvB RNA" EXACT [] xref: http://en.wikipedia.org/wiki/GcvB_RNA "wiki" is_a: SO:0000378 ! DsrA_RNA [Term] id: SO:0000380 name: hammerhead_ribozyme def: "A small catalytic RNA motif that catalyzes self-cleavage reaction. Its name comes from its secondary structure which resembles a carpenter's hammer. The hammerhead ribozyme is involved in the replication of some viroid and some satellite RNAs." [PMID:2436805] subset: SOFA synonym: "hammerhead ribozyme" EXACT [] xref: http://en.wikipedia.org/wiki/Hammerhead_ribozyme "wiki" is_a: SO:0000715 ! RNA_motif relationship: has_quality SO:0001186 ! ribozymic [Term] id: SO:0000381 name: group_IIA_intron synonym: "group IIA intron" EXACT [] is_a: SO:0000603 ! group_II_intron [Term] id: SO:0000382 name: group_IIB_intron synonym: "group IIB intron" EXACT [] is_a: SO:0000603 ! group_II_intron [Term] id: SO:0000383 name: MicF_RNA def: "A non-translated 93 nt antisense RNA that binds its target ompF mRNA and regulates ompF expression by inhibiting translation and inducing degradation of the message." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00033] synonym: "MicF RNA" EXACT [] xref: http://en.wikipedia.org/wiki/MicF_RNA "wiki" is_a: SO:0000644 ! antisense_RNA [Term] id: SO:0000384 name: OxyS_RNA def: "A small untranslated RNA which is induced in response to oxidative stress in Escherichia coli. Acts as a global regulator to activate or repress the expression of as many as 40 genes, including the fhlA-encoded transcriptional activator and the rpoS-encoded sigma(s) subunit of RNA polymerase. OxyS is bound by the Hfq protein, that increases the OxyS RNA interaction with its target messages." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00035] synonym: "OxyS RNA" EXACT [] xref: http://en.wikipedia.org/wiki/OxyS_RNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000385 name: RNase_MRP_RNA def: "The RNA molecule essential for the catalytic activity of RNase MRP, an enzymatically active ribonucleoprotein with two distinct roles in eukaryotes. In mitochondria it plays a direct role in the initiation of mitochondrial DNA replication. In the nucleus it is involved in precursor rRNA processing, where it cleaves the internal transcribed spacer 1 between 18S and 5.8S rRNAs." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00030] subset: SOFA synonym: "RNase MRP RNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000386 name: RNase_P_RNA def: "The RNA component of Ribonuclease P (RNase P), a ubiquitous endoribonuclease, found in archaea, bacteria and eukarya as well as chloroplasts and mitochondria. Its best characterized activity is the generation of mature 5 prime ends of tRNAs by cleaving the 5 prime leader elements of precursor-tRNAs. Cellular RNase Ps are ribonucleoproteins. RNA from bacterial RNase Ps retains its catalytic activity in the absence of the protein subunit, i.e. it is a ribozyme. Isolated eukaryotic and archaeal RNase P RNA has not been shown to retain its catalytic function, but is still essential for the catalytic activity of the holoenzyme. Although the archaeal and eukaryotic holoenzymes have a much greater protein content than the bacterial ones, the RNA cores from all the three lineages are homologous. Helices corresponding to P1, P2, P3, P4, and P10/11 are common to all cellular RNase P RNAs. Yet, there is considerable sequence variation, particularly among the eukaryotic RNAs." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00010] subset: SOFA synonym: "RNase P RNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000387 name: RprA_RNA def: "Translational regulation of the stationary phase sigma factor RpoS is mediated by the formation of a double-stranded RNA stem-loop structure in the upstream region of the rpoS messenger RNA, occluding the translation initiation site. Clones carrying rprA (RpoS regulator RNA) increased the translation of RpoS. The rprA gene encodes a 106 nucleotide regulatory RNA. As with DsrA Rfam:RF00014, RprA is predicted to form three stem-loops. Thus, at least two small RNAs, DsrA and RprA, participate in the positive regulation of RpoS translation. Unlike DsrA, RprA does not have an extensive region of complementarity to the RpoS leader, leaving its mechanism of action unclear. RprA is non-essential." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00034] synonym: "RprA RNA" EXACT [] xref: http://en.wikipedia.org/wiki/RprA_RNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000388 name: RRE_RNA def: "The Rev response element (RRE) is encoded within the HIV-env gene. Rev is an essential regulatory protein of HIV that binds an internal loop of the RRE leading, encouraging further Rev-RRE binding. This RNP complex is critical for mRNA export and hence for expression of the HIV structural proteins." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00036] synonym: "RRE RNA" EXACT [] is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000389 name: spot_42_RNA def: "A 109-nucleotide RNA of E. coli that seems to have a regulatory role on the galactose operon. Changes in Spot 42 levels are implicated in affecting DNA polymerase I levels." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00021] synonym: "spot-42 RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Spot_42_RNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000390 name: telomerase_RNA def: "The RNA component of telomerase, a reverse transcriptase that synthesizes telomeric DNA." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00025] subset: SOFA synonym: "telomerase RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Telomerase_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000391 name: U1_snRNA def: "U1 is a small nuclear RNA (snRNA) component of the spliceosome (involved in pre-mRNA splicing). Its 5' end forms complementary base pairs with the 5' splice junction, thus defining the 5' donor site of an intron. There are significant differences in sequence and secondary structure between metazoan and yeast U1 snRNAs, the latter being much longer (568 nucleotides as compared to 164 nucleotides in human). Nevertheless, secondary structure predictions suggest that all U1 snRNAs share a 'common core' consisting of helices I, II, the proximal region of III, and IV." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00003] subset: SOFA synonym: "small nuclear RNA U1" EXACT [RSC:cb] synonym: "snRNA U1" EXACT [RSC:cb] synonym: "U1 small nuclear RNA" EXACT [RSC:cb] synonym: "U1 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U1_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000392 name: U2_snRNA def: "U2 is a small nuclear RNA (snRNA) component of the spliceosome (involved in pre-mRNA splicing). Complementary binding between U2 snRNA (in an area lying towards the 5' end but 3' to hairpin I) and the branchpoint sequence (BPS) of the intron results in the bulging out of an unpaired adenine, on the BPS, which initiates a nucleophilic attack at the intronic 5' splice site, thus starting the first of two transesterification reactions that mediate splicing." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00004] subset: SOFA synonym: "small nuclear RNA U2" EXACT [RSC:CB] synonym: "snRNA U2" EXACT [RSC:CB] synonym: "U2 small nuclear RNA" EXACT [RSC:CB] synonym: "U2 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U2_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000393 name: U4_snRNA def: "U4 small nuclear RNA (U4 snRNA) is a component of the major U2-dependent spliceosome. It forms a duplex with U6, and with each splicing round, it is displaced from U6 (and the spliceosome) in an ATP-dependent manner, allowing U6 to refold and create the active site for splicing catalysis. A recycling process involving protein Prp24 re-anneals U4 and U6." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00015] subset: SOFA synonym: "small nuclear RNA U4" EXACT [RSC:cb] synonym: "snRNA U4" EXACT [RSC:cb] synonym: "U4 small nuclear RNA" EXACT [RSC:cb] synonym: "U4 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U4_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000394 name: U4atac_snRNA def: "An snRNA required for the splicing of the minor U12-dependent class of eukaryotic nuclear introns. It forms a base paired complex with U6atac_snRNA (SO:0000397)." [PMID:=12409455] subset: SOFA synonym: "small nuclear RNA U4atac" EXACT [RSC:cb] synonym: "snRNA U4atac" EXACT [RSC:cb] synonym: "U4atac small nuclear RNA" EXACT [RSC:cb] synonym: "U4atac snRNA" EXACT [] is_a: SO:0000274 ! snRNA [Term] id: SO:0000395 name: U5_snRNA def: "U5 RNA is a component of both types of known spliceosome. The precise function of this molecule is unknown, though it is known that the 5' loop is required for splice site selection and p220 binding, and that both the 3' stem-loop and the Sm site are important for Sm protein binding and cap methylation." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00020] subset: SOFA synonym: "small nuclear RNA U5" EXACT [RSC:cb] synonym: "snRNA U5" EXACT [RSC:cb] synonym: "U5 small nuclear RNA" EXACT [RSC:cb] synonym: "U5 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U5_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000396 name: U6_snRNA def: "U6 snRNA is a component of the spliceosome which is involved in splicing pre-mRNA. The putative secondary structure consensus base pairing is confined to a short 5' stem loop, but U6 snRNA is thought to form extensive base-pair interactions with U4 snRNA." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00015] subset: SOFA synonym: "small nuclear RNA U6" EXACT [RSC:cb] synonym: "snRNA U6" EXACT [RSC:cb] synonym: "U6 small nuclear RNA" EXACT [RSC:cb] synonym: "U6 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U6_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000397 name: U6atac_snRNA def: "U6atac_snRNA is an snRNA required for the splicing of the minor U12-dependent class of eukaryotic nuclear introns. It forms a base paired complex with U4atac_snRNA (SO:0000394)." [http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=retrieve&db=pubmed&list_uids=12409455&dopt=Abstract] subset: SOFA synonym: "snRNA U6atac" EXACT [RSC:cb] synonym: "U6atac small nuclear RNA" EXACT [RSC:cb] synonym: "U6atac snRNA" EXACT [RSC:cb] is_a: SO:0000274 ! snRNA [Term] id: SO:0000398 name: U11_snRNA def: "U11 snRNA plays a role in splicing of the minor U12-dependent class of eukaryotic nuclear introns, similar to U1 snRNA in the major class spliceosome it base pairs to the conserved 5' splice site sequence." [PMID:9622129] subset: SOFA synonym: "small nuclear RNA U11" EXACT [RSC:cb] synonym: "snRNA U11" EXACT [RSC:cb] synonym: "U11 small nuclear RNA" EXACT [RSC:cb] synonym: "U11 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U11_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000399 name: U12_snRNA def: "The U12 small nuclear (snRNA), together with U4atac/U6atac, U5, and U11 snRNAs and associated proteins, forms a spliceosome that cleaves a divergent class of low-abundance pre-mRNA introns." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00007] subset: SOFA synonym: "small nuclear RNA U12" EXACT [RSC:cb] synonym: "snRNA U12" EXACT [RSC:cb] synonym: "U12 small nuclear RNA" EXACT [RSC:cb] synonym: "U12 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U12_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000400 name: sequence_attribute def: "An attribute describes a quality of sequence." [SO:ke] synonym: "sequence attribute" EXACT [] [Term] id: SO:0000401 name: gene_attribute synonym: "gene attribute" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000402 name: enhancer_attribute is_obsolete: true [Term] id: SO:0000403 name: U14_snoRNA alt_id: SO:0005839 def: "U14 small nucleolar RNA (U14 snoRNA) is required for early cleavages of eukaryotic precursor rRNAs. In yeasts, this molecule possess a stem-loop region (known as the Y-domain) which is essential for function. A similar structure, but with a different consensus sequence, is found in plants, but is absent in vertebrates." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00016, PMID:2551119] comment: An evolutionarily conserved eukaryotic low molecular weight RNA capable of intermolecular hybridization with both homologous and heterologous 18S rRNA. subset: SOFA synonym: "small nucleolar RNA U14" EXACT [] synonym: "snoRNA U14" EXACT [] synonym: "U14 small nucleolar RNA" EXACT [] synonym: "U14 snoRNA" EXACT [] is_a: SO:0000593 ! C_D_box_snoRNA relationship: derives_from SO:0005837 ! U14_snoRNA_primary_transcript [Term] id: SO:0000404 name: vault_RNA def: "A family of RNAs are found as part of the enigmatic vault ribonucleoprotein complex. The complex consists of a major vault protein (MVP), two minor vault proteins (VPARP and TEP1), and several small untranslated RNA molecules. It has been suggested that the vault complex is involved in drug resistance." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00006] subset: SOFA synonym: "vault RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Vault_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000405 name: Y_RNA def: "Y RNAs are components of the Ro ribonucleoprotein particle (Ro RNP), in association with Ro60 and La proteins. The Y RNAs and Ro60 and La proteins are well conserved, but the function of the Ro RNP is not known. In humans the RNA component can be one of four small RNAs: hY1, hY3, hY4 and hY5. These small RNAs are predicted to fold into a conserved secondary structure containing three stem structures. The largest of the four, hY1, contains an additional hairpin." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00019] subset: SOFA synonym: "Y RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Y_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000406 name: twintron def: "An intron within an intron. Twintrons are group II or III introns, into which another group II or III intron has been transposed." [PMID:1899376, PMID:7823908] xref: http://en.wikipedia.org/wiki/Twintron "wiki" is_a: SO:0000188 ! intron [Term] id: SO:0000407 name: rRNA_18S def: "A large polynucleotide in eukaryotes, which functions as the small subunit of the ribosome." [SO:ke] subset: SOFA synonym: "18S ribosomal RNA" EXACT [] synonym: "18S rRNA" EXACT [] synonym: "rRNA 18S" EXACT [] xref: http://en.wikipedia.org/wiki/18S_ribosomal_RNA "wiki" is_a: SO:0000650 ! small_subunit_rRNA [Term] id: SO:0000408 name: site def: "The interbase position where something (eg an aberration) occurred." [SO:ke] is_obsolete: true [Term] id: SO:0000409 name: binding_site alt_id: BS:00033 def: "A biological_region of sequence that, in the molecule, interacts selectively and non-covalently with other molecules. A region on the surface of a molecule that may interact with another molecule. When applied to polypeptides: Amino acids involved in binding or interactions. It can also apply to an amino acid bond which is represented by the positions of the two flanking amino acids." [EBIBS:GAR, SO:ke] comment: See GO:0005488 : binding. subset: biosapiens subset: SOFA synonym: "binding_or_interaction_site" EXACT [] synonym: "site" RELATED [] xref: http://en.wikipedia.org/wiki/Binding_site "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000410 name: protein_binding_site def: "A binding site that, in the molecule, interacts selectively and non-covalently with polypeptide molecules." [SO:ke] comment: See GO:0042277 : peptide binding. subset: SOFA synonym: "protein binding site" EXACT [] is_a: SO:0000409 ! binding_site [Term] id: SO:0000411 name: rescue_region def: "A region that rescues." [SO:xp] synonym: "rescue fragment" EXACT [] synonym: "rescue region" EXACT [] synonym: "rescue segment" RELATED [] is_a: SO:0000695 ! reagent relationship: has_quality SO:0000814 ! rescue [Term] id: SO:0000412 name: restriction_fragment def: "A region of polynucleotide sequence produced by digestion with a restriction endonuclease." [SO:ke] subset: SOFA synonym: "restriction fragment" EXACT [] xref: http://en.wikipedia.org/wiki/Restriction_fragment "wiki" is_a: SO:0000143 ! assembly_component [Term] id: SO:0000413 name: sequence_difference def: "A region where the sequence differs from that of a specified sequence." [SO:ke] subset: SOFA synonym: "sequence difference" EXACT [] is_a: SO:0000700 ! remark [Term] id: SO:0000414 name: invalidated_by_genomic_contamination def: "An attribute to describe a feature that is invalidated due to genomic contamination." [SO:ke] synonym: "invalidated by genomic contamination" EXACT [] is_a: SO:0000790 ! invalidated [Term] id: SO:0000415 name: invalidated_by_genomic_polyA_primed_cDNA def: "An attribute to describe a feature that is invalidated due to polyA priming." [SO:ke] synonym: "invalidated by genomic polyA primed cDNA" EXACT [] is_a: SO:0000790 ! invalidated [Term] id: SO:0000416 name: invalidated_by_partial_processing def: "An attribute to describe a feature that is invalidated due to partial processing." [SO:ke] synonym: "invalidated by partial processing" EXACT [] is_a: SO:0000790 ! invalidated [Term] id: SO:0000417 name: polypeptide_domain alt_id: BS:00012 alt_id: BS:00134 alt_id: SO:0001069 def: "A structurally or functionally defined protein region. In proteins with multiple domains, the combination of the domains determines the function of the protein. A region which has been shown to recur throughout evolution." [EBIBS:GAR] comment: Range. Old definition from before biosapiens: A region of a single polypeptide chain that folds into an independent unit and exhibits biological activity. A polypeptide chain may have multiple domains. subset: biosapiens synonym: "ca_bind" RELATED BS [uniprot:feature_type] synonym: "DNA_bind" RELATED BS [uniprot:feature_type] synonym: "domain" BROAD BS [uniprot:feature_type] synonym: "np_bind" RELATED BS [uniprot:feature_type] synonym: "polypeptide domain" EXACT [] synonym: "polypeptide_structural_domain" EXACT BS [] synonym: "structural domain" BROAD BS [] synonym: "zn_fing" RELATED BS [uniprot:feature_type] is_a: SO:0001070 ! polypeptide_structural_region is_a: SO:0100021 ! polypeptide_conserved_region [Term] id: SO:0000418 name: signal_peptide alt_id: BS:00159 def: "The signal_peptide is a short region of the peptide located at the N-terminus that directs the protein to be secreted or part of membrane components." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: Old def before biosapiens:The sequence for an N-terminal domain of a secreted protein; this domain is involved in attaching nascent polypeptide to the membrane leader sequence. subset: biosapiens subset: SOFA synonym: "signal" RELATED [uniprot:feature_type] synonym: "signal peptide" EXACT [] synonym: "signal peptide coding sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Signal_peptide "wiki" is_a: SO:0001527 ! peptide_localization_signal relationship: part_of SO:0001062 ! propeptide [Term] id: SO:0000419 name: mature_protein_region alt_id: BS:00149 def: "The polypeptide sequence that remains when the cleaved peptide regions have been cleaved from the immature peptide." [EBIBS:GAR, http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html, SO:cb] comment: This term mature peptide, merged with the biosapiens term mature protein region and took that to be the new name. Old def: The coding sequence for the mature or final peptide or protein product following post-translational modification. subset: biosapiens subset: SOFA synonym: "chain" RELATED [uniprot:feature_type] synonym: "mature peptide" RELATED [] synonym: "mature protein region" EXACT [] is_a: SO:0000839 ! polypeptide_region relationship: part_of SO:0001063 ! immature_peptide_region [Term] id: SO:0000420 name: five_prime_terminal_inverted_repeat synonym: "5' TIR" EXACT [] synonym: "five prime terminal inverted repeat" EXACT [] is_a: SO:0000481 ! terminal_inverted_repeat [Term] id: SO:0000421 name: three_prime_terminal_inverted_repeat synonym: "3' TIR" EXACT [] synonym: "three prime terminal inverted repeat" EXACT [] is_a: SO:0000481 ! terminal_inverted_repeat [Term] id: SO:0000422 name: U5_LTR_region synonym: "U5 long terminal repeat region" EXACT [] synonym: "U5 LTR region" EXACT [] is_a: SO:0000848 ! LTR_component [Term] id: SO:0000423 name: R_LTR_region synonym: "R long terminal repeat region" EXACT [] synonym: "R LTR region" EXACT [] is_a: SO:0000848 ! LTR_component [Term] id: SO:0000424 name: U3_LTR_region synonym: "U3 long terminal repeat region" EXACT [] synonym: "U3 LTR region" EXACT [] is_a: SO:0000848 ! LTR_component [Term] id: SO:0000425 name: five_prime_LTR synonym: "5' long terminal repeat" EXACT [] synonym: "5' LTR" EXACT [] synonym: "five prime LTR" EXACT [] is_a: SO:0000286 ! long_terminal_repeat [Term] id: SO:0000426 name: three_prime_LTR synonym: "3' long terminal repeat" EXACT [] synonym: "3' LTR" EXACT [] synonym: "three prime LTR" EXACT [] is_a: SO:0000286 ! long_terminal_repeat [Term] id: SO:0000427 name: R_five_prime_LTR_region synonym: "R 5' long term repeat region" EXACT [] synonym: "R five prime LTR region" EXACT [] is_a: SO:0000423 ! R_LTR_region is_a: SO:0000850 ! five_prime_LTR_component [Term] id: SO:0000428 name: U5_five_prime_LTR_region synonym: "U5 5' long terminal repeat region" EXACT [] synonym: "U5 five prime LTR region" EXACT [] is_a: SO:0000422 ! U5_LTR_region is_a: SO:0000850 ! five_prime_LTR_component [Term] id: SO:0000429 name: U3_five_prime_LTR_region synonym: "U3 5' long term repeat region" EXACT [] synonym: "U3 five prime LTR region" EXACT [] is_a: SO:0000424 ! U3_LTR_region is_a: SO:0000850 ! five_prime_LTR_component [Term] id: SO:0000430 name: R_three_prime_LTR_region synonym: "R 3' long terminal repeat region" EXACT [] synonym: "R three prime LTR region" EXACT [] is_a: SO:0000849 ! three_prime_LTR_component [Term] id: SO:0000431 name: U3_three_prime_LTR_region synonym: "U3 3' long terminal repeat region" EXACT [] synonym: "U3 three prime LTR region" EXACT [] is_a: SO:0000849 ! three_prime_LTR_component [Term] id: SO:0000432 name: U5_three_prime_LTR_region synonym: "U5 3' long terminal repeat region" EXACT [] synonym: "U5 three prime LTR region" EXACT [] is_a: SO:0000849 ! three_prime_LTR_component [Term] id: SO:0000433 name: non_LTR_retrotransposon_polymeric_tract def: "A polymeric tract, such as poly(dA), within a non_LTR_retrotransposon." [SO:ke] synonym: "non LTR retrotransposon polymeric tract" EXACT [] is_a: SO:0000657 ! repeat_region is_a: SO:0000840 ! repeat_component relationship: part_of SO:0000189 ! non_LTR_retrotransposon [Term] id: SO:0000434 name: target_site_duplication def: "A sequence of the target DNA that is duplicated when a transposable element or phage inserts; usually found at each end the insertion." [http://www.koko.gov.my/CocoaBioTech/Glossaryt.html] synonym: "target site duplication" EXACT [] is_a: SO:0000314 ! direct_repeat relationship: derives_from SO:0000101 ! transposable_element [Term] id: SO:0000435 name: RR_tract def: "A polypurine tract within an LTR_retrotransposon." [SO:ke] synonym: "LTR retrotransposon poly purine tract" RELATED [] synonym: "RR tract" EXACT [] is_a: SO:0000330 ! conserved_region relationship: part_of SO:0000186 ! LTR_retrotransposon [Term] id: SO:0000436 name: ARS def: "A sequence that can autonomously replicate, as a plasmid, when transformed into a bacterial host." [SO:ma] subset: SOFA synonym: "autonomously replicating sequence" EXACT [] is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000437 name: assortment_derived_duplication is_obsolete: true [Term] id: SO:0000438 name: gene_not_polyadenylated is_obsolete: true [Term] id: SO:0000439 name: inverted_ring_chromosome synonym: "inverted ring chromosome" EXACT [] is_a: SO:1000030 ! chromosomal_inversion is_a: SO:1000045 ! ring_chromosome [Term] id: SO:0000440 name: vector_replicon def: "A replicon that has been modified to act as a vector for foreign sequence." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "vector" EXACT [] synonym: "vector replicon" EXACT [] xref: http://en.wikipedia.org/wiki/Vector_(molecular_biology) "wiki" is_a: SO:0001235 ! replicon relationship: part_of SO:0000151 ! clone [Term] id: SO:0000441 name: ss_oligo def: "A single stranded oligonucleotide." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "single strand oligo" EXACT [] synonym: "single strand oligonucleotide" EXACT [] synonym: "single stranded oligonucleotide" EXACT [] synonym: "ss oligo" EXACT [] synonym: "ss oligonucleotide" EXACT [] is_a: SO:0000696 ! oligo [Term] id: SO:0000442 name: ds_oligo def: "A double stranded oligonucleotide." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "double stranded oligonucleotide" EXACT [] synonym: "ds oligo" EXACT [] synonym: "ds-oligonucleotide" EXACT [] is_a: SO:0000696 ! oligo [Term] id: SO:0000443 name: polymer_attribute def: "An attribute to describe the kind of biological sequence." [SO:ke] synonym: "polymer attribute" EXACT [] is_a: SO:0000400 ! sequence_attribute [Term] id: SO:0000444 name: three_prime_noncoding_exon def: "Non-coding exon in the 3' UTR." [SO:ke] synonym: "three prime noncoding exon" EXACT [] is_a: SO:0000198 ! noncoding_exon [Term] id: SO:0000445 name: five_prime_noncoding_exon def: "Non-coding exon in the 5' UTR." [SO:ke] synonym: "5' nc exon" EXACT [] synonym: "5' non coding exon" EXACT [] synonym: "five prime noncoding exon" EXACT [] is_a: SO:0000198 ! noncoding_exon [Term] id: SO:0000446 name: UTR_intron def: "Intron located in the untranslated region." [SO:ke] synonym: "UTR intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000447 name: five_prime_UTR_intron def: "An intron located in the 5' UTR." [SO:ke] synonym: "five prime UTR intron" EXACT [] is_a: SO:0000446 ! UTR_intron [Term] id: SO:0000448 name: three_prime_UTR_intron def: "An intron located in the 3' UTR." [SO:ke] synonym: "three prime UTR intron" EXACT [] is_a: SO:0000446 ! UTR_intron [Term] id: SO:0000449 name: random_sequence def: "A sequence of nucleotides or amino acids which, by design, has a \"random\" order of components, given a predetermined input frequency of these components." [SO:ma] synonym: "random sequence" EXACT [] is_a: SO:0000351 ! synthetic_sequence [Term] id: SO:0000450 name: interband def: "A light region between two darkly staining bands in a polytene chromosome." [SO:ma] synonym: "chromosome interband" RELATED [] is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000451 name: gene_with_polyadenylated_mRNA def: "A gene that encodes a polyadenylated mRNA." [SO:xp] synonym: "gene with polyadenylated mRNA" EXACT [] is_a: SO:0001217 ! protein_coding_gene relationship: transcribed_to SO:0000871 ! polyadenylated_mRNA [Term] id: SO:0000452 name: transgene_attribute is_obsolete: true [Term] id: SO:0000453 name: chromosomal_transposition def: "A chromosome structure variant whereby a region of a chromosome has been transferred to another position. Among interchromosomal rearrangements, the term transposition is reserved for that class in which the telomeres of the chromosomes involved are coupled (that is to say, form the two ends of a single DNA molecule) as in wild-type." [FB:reference_manual, SO:ke] synonym: "chromosomal transposition" EXACT [] synonym: "transposition" NARROW [] is_a: SO:1000183 ! chromosome_structure_variation [Term] id: SO:0000454 name: rasiRNA def: "A 17-28-nt, small interfering RNA derived from transcripts of repetitive elements." [http://www.developmentalcell.com/content/article/abstract?uid=PIIS1534580703002284] subset: SOFA synonym: "repeat associated small interfering RNA" EXACT [] xref: http://en.wikipedia.org/wiki/RasiRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000455 name: gene_with_mRNA_with_frameshift def: "A gene that encodes an mRNA with a frameshift." [SO:xp] synonym: "gene with mRNA with frameshift" EXACT [] is_a: SO:0001217 ! protein_coding_gene relationship: has_quality SO:0000865 ! frameshift [Term] id: SO:0000456 name: recombinationally_rearranged_gene def: "A gene that is recombinationally rearranged." [SO:ke] synonym: "recombinationally rearranged gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000940 ! recombinationally_rearranged [Term] id: SO:0000457 name: interchromosomal_duplication def: "A chromosome duplication involving an insertion from another chromosome." [SO:ke] synonym: "interchromosomal duplication" EXACT [] is_a: SO:1000037 ! chromosomal_duplication [Term] id: SO:0000458 name: D_gene_segment def: "Germline genomic DNA including D-region with 5' UTR and 3' UTR, also designated as D-segment." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D gene" EXACT [] synonym: "D-GENE" EXACT [] is_a: SO:0000460 ! vertebrate_immunoglobulin_T_cell_receptor_segment [Term] id: SO:0000459 name: gene_with_trans_spliced_transcript def: "A gene with a transcript that is trans-spliced." [SO:xp] synonym: "gene with trans spliced transcript" EXACT [] is_a: SO:0000704 ! gene relationship: transcribed_to SO:0000479 ! trans_spliced_transcript [Term] id: SO:0000460 name: vertebrate_immunoglobulin_T_cell_receptor_segment comment: I am using the term segment instead of gene here to avoid confusion with the region 'gene'. synonym: "vertebrate immunoglobulin T cell receptor segment" EXACT [] synonym: "vertebrate_immunoglobulin/T-cell receptor gene" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000461 name: inversion_derived_bipartite_deficiency def: "A chromosomal deletion whereby a chromosome generated by recombination between two inversions; has a deficiency at each end of the inversion." [FB:km] synonym: "inversion derived bipartite deficiency" EXACT [] is_a: SO:1000029 ! chromosomal_deletion [Term] id: SO:0000462 name: pseudogenic_region def: "A non-functional descendent of a functional entity." [SO:cjm] subset: SOFA synonym: "pseudogenic region" EXACT [] is_a: SO:0001411 ! biological_region [Term] id: SO:0000463 name: encodes_alternately_spliced_transcripts def: "A gene that encodes more than one transcript." [SO:ke] synonym: "encodes alternately spliced transcripts" EXACT [] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0000464 name: decayed_exon def: "A non-functional descendant of an exon." [SO:ke] subset: SOFA synonym: "decayed exon" EXACT [] is_a: SO:0000462 ! pseudogenic_region relationship: non_functional_homolog_of SO:0000147 ! exon [Term] id: SO:0000465 name: inversion_derived_deficiency_plus_duplication def: "A chromosome deletion whereby a chromosome is generated by recombination between two inversions; there is a deficiency at one end of the inversion and a duplication at the other end of the inversion." [FB:km] synonym: "inversion derived deficiency plus duplication" EXACT [] is_a: SO:1000029 ! chromosomal_deletion is_a: SO:1000038 ! intrachromosomal_duplication [Term] id: SO:0000466 name: V_gene_segment def: "Germline genomic DNA including L-part1, V-intron and V-exon, with the 5' UTR and 3' UTR." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V gene" EXACT [] synonym: "V-GENE" EXACT [] synonym: "variable_gene" EXACT [] is_a: SO:0000460 ! vertebrate_immunoglobulin_T_cell_receptor_segment [Term] id: SO:0000467 name: post_translationally_regulated_by_protein_stability def: "An attribute describing a gene sequence where the resulting protein is regulated by the stability of the resulting protein." [SO:ke] synonym: "post translationally regulated by protein stability" EXACT [] synonym: "post-translationally regulated by protein stability" EXACT [] is_a: SO:0000130 ! post_translationally_regulated [Term] id: SO:0000468 name: golden_path_fragment def: "One of the pieces of sequence that make up a golden path." [SO:rd] subset: SOFA synonym: "golden path fragment" EXACT [] is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000688 ! golden_path [Term] id: SO:0000469 name: post_translationally_regulated_by_protein_modification def: "An attribute describing a gene sequence where the resulting protein is modified to regulate it." [SO:ke] synonym: "post translationally regulated by protein modification" EXACT [] synonym: "post-translationally regulated by protein modification" EXACT [] is_a: SO:0000130 ! post_translationally_regulated [Term] id: SO:0000470 name: J_gene_segment def: "Germline genomic DNA of an immunoglobulin/T-cell receptor gene including J-region with 5' UTR (SO:0000204) and 3' UTR (SO:0000205), also designated as J-segment." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J gene" EXACT [] synonym: "J-GENE" EXACT [] is_a: SO:0000460 ! vertebrate_immunoglobulin_T_cell_receptor_segment [Term] id: SO:0000471 name: autoregulated def: "The gene product is involved in its own transcriptional regulation." [SO:ke] is_a: SO:0000123 ! transcriptionally_regulated [Term] id: SO:0000472 name: tiling_path def: "A set of regions which overlap with minimal polymorphism to form a linear sequence." [SO:cjm] subset: SOFA synonym: "tiling path" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0000473 name: negatively_autoregulated def: "The gene product is involved in its own transcriptional regulation where it decreases transcription." [SO:ke] synonym: "negatively autoregulated" EXACT [] is_a: SO:0000126 ! transcriptionally_repressed is_a: SO:0000471 ! autoregulated [Term] id: SO:0000474 name: tiling_path_fragment def: "A piece of sequence that makes up a tiling_path (SO:0000472)." [SO:ke] subset: SOFA synonym: "tiling path fragment" EXACT [] is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000472 ! tiling_path [Term] id: SO:0000475 name: positively_autoregulated def: "The gene product is involved in its own transcriptional regulation, where it increases transcription." [SO:ke] synonym: "positively autoregulated" EXACT [] is_a: SO:0000125 ! transcriptionally_induced is_a: SO:0000471 ! autoregulated [Term] id: SO:0000476 name: contig_read def: "A DNA sequencer read which is part of a contig." [SO:ke] synonym: "contig read" EXACT [] is_a: SO:0000150 ! read [Term] id: SO:0000477 name: polycistronic_gene def: "A gene that is polycistronic." [SO:ke] is_obsolete: true [Term] id: SO:0000478 name: C_gene_segment def: "Genomic DNA of immunoglobulin/T-cell receptor gene including C-region (and introns if present) with 5' UTR (SO:0000204) and 3' UTR (SO:0000205)." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "C gene" EXACT [] synonym: "C_GENE" EXACT [] synonym: "constant gene" EXACT [] is_a: SO:0000460 ! vertebrate_immunoglobulin_T_cell_receptor_segment [Term] id: SO:0000479 name: trans_spliced_transcript def: "A transcript that is trans-spliced." [SO:xp] synonym: "trans spliced transcript" EXACT [] synonym: "trans-spliced transcript" EXACT [] is_a: SO:0000673 ! transcript relationship: has_quality SO:0000870 ! trans_spliced [Term] id: SO:0000480 name: tiling_path_clone def: "A clone which is part of a tiling path. A tiling path is a set of sequencing substrates, typically clones, which have been selected in order to efficiently cover a region of the genome in preparation for sequencing and assembly." [SO:ke] synonym: "tiling path clone" EXACT [] is_a: SO:0000151 ! clone is_a: SO:0000474 ! tiling_path_fragment [Term] id: SO:0000481 name: terminal_inverted_repeat def: "An inverted repeat (SO:0000294) occurring at the termini of a DNA transposon." [SO:ke] synonym: "terminal inverted repeat" EXACT [] synonym: "TIR" EXACT [] is_a: SO:0000294 ! inverted_repeat relationship: part_of SO:0000208 ! terminal_inverted_repeat_element [Term] id: SO:0000482 name: vertebrate_immunoglobulin_T_cell_receptor_gene_cluster synonym: "vertebrate immunoglobulin T cell receptor gene cluster" EXACT [] synonym: "vertebrate_immunoglobulin/T-cell receptor gene cluster" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000483 name: nc_primary_transcript def: "A primary transcript that is never translated into a protein." [SO:ke] subset: SOFA synonym: "nc primary transcript" EXACT [] synonym: "noncoding primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript [Term] id: SO:0000484 name: three_prime_coding_exon_noncoding_region def: "The sequence of the 3' exon that is not coding." [SO:ke] subset: SOFA synonym: "three prime coding exon noncoding region" EXACT [] synonym: "three_prime_exon_noncoding_region" EXACT [] is_a: SO:0001214 ! noncoding_region_of_exon relationship: part_of SO:0000202 ! three_prime_coding_exon [Term] id: SO:0000485 name: DJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one DJ-gene, and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(DJ)-J-CLUSTER" EXACT [] synonym: "DJ J cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000486 name: five_prime_coding_exon_noncoding_region def: "The sequence of the 5' exon preceding the start codon." [SO:ke] subset: SOFA synonym: "five prime coding exon noncoding region" EXACT [] synonym: "five_prime_exon_noncoding_region" EXACT [] is_a: SO:0001214 ! noncoding_region_of_exon relationship: part_of SO:0000200 ! five_prime_coding_exon [Term] id: SO:0000487 name: VDJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VDJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VDJ)-J-C-CLUSTER" EXACT [] synonym: "VDJ J C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000488 name: VDJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VDJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VDJ)-J-CLUSTER" EXACT [] synonym: "VDJ J cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000489 name: VJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VJ)-C-CLUSTER" RELATED [] synonym: "VJ C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000490 name: VJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VJ)-J-C-CLUSTER" EXACT [] synonym: "VJ J C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000491 name: VJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VJ)-J-CLUSTER" EXACT [] synonym: "VJ J cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000492 name: D_gene_recombination_feature synonym: "D gene recombination feature" EXACT [] is_a: SO:0000939 ! vertebrate_immune_system_gene_recombination_signal_feature [Term] id: SO:0000493 name: three_prime_D_heptamer def: "7 nucleotide recombination site like CACAGTG, part of a 3' D-recombination signal sequence of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "3'D-HEPTAMER" EXACT [] synonym: "three prime D heptamer" EXACT [] is_a: SO:0000561 ! heptamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000570 ! three_prime_D_recombination_signal_sequence [Term] id: SO:0000494 name: three_prime_D_nonamer def: "A 9 nucleotide recombination site (e.g. ACAAAAACC), part of a 3' D-recombination signal sequence of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "3'D-NOMAMER" EXACT [] synonym: "three prime D nonamer" EXACT [] is_a: SO:0000562 ! nonamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000570 ! three_prime_D_recombination_signal_sequence [Term] id: SO:0000495 name: three_prime_D_spacer def: "A 12 or 23 nucleotide spacer between the 3'D-HEPTAMER and 3'D-NONAMER of a 3'D-RS." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "3'D-SPACER" EXACT [] synonym: "three prime D spacer" EXACT [] is_a: SO:0000563 ! vertebrate_immune_system_gene_recombination_spacer relationship: part_of SO:0000570 ! three_prime_D_recombination_signal_sequence [Term] id: SO:0000496 name: five_prime_D_heptamer def: "7 nucleotide recombination site (e.g. CACTGTG), part of a 5' D-recombination signal sequence (SO:0000556) of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "5'D-HEPTAMER" EXACT [] synonym: "five prime D heptamer" EXACT [] is_a: SO:0000561 ! heptamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000556 ! five_prime_D_recombination_signal_sequence [Term] id: SO:0000497 name: five_prime_D_nonamer def: "9 nucleotide recombination site (e.g. GGTTTTTGT), part of a five_prime_D-recombination signal sequence (SO:0000556) of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "5'D-NONAMER" EXACT [] synonym: "five prime D nonamer" EXACT [] is_a: SO:0000562 ! nonamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000556 ! five_prime_D_recombination_signal_sequence [Term] id: SO:0000498 name: five_prime_D_spacer def: "12 or 23 nucleotide spacer between the 5' D-heptamer (SO:0000496) and 5' D-nonamer (SO:0000497) of a 5' D-recombination signal sequence (SO:0000556) of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "5'-SPACER" EXACT [] synonym: "five prime D spacer" EXACT [] synonym: "five prime D-spacer" EXACT [] is_a: SO:0000563 ! vertebrate_immune_system_gene_recombination_spacer relationship: part_of SO:0000556 ! five_prime_D_recombination_signal_sequence [Term] id: SO:0000499 name: virtual_sequence def: "A continuous piece of sequence similar to the 'virtual contig' concept of the Ensembl database." [SO:ke] subset: SOFA synonym: "virtual sequence" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0000500 name: Hoogsteen_base_pair def: "A type of non-canonical base-pairing. This is less energetically favourable than watson crick base pairing. Hoogsteen GC base pairs only have two hydrogen bonds." [PMID:12177293] synonym: "Hoogsteen base pair" EXACT [] xref: http://en.wikipedia.org/wiki/Hoogsteen_base_pair "wiki" is_a: SO:0000028 ! base_pair [Term] id: SO:0000501 name: reverse_Hoogsteen_base_pair def: "A type of non-canonical base-pairing." [SO:ke] synonym: "reverse Hoogsteen base pair" EXACT [] is_a: SO:0000028 ! base_pair [Term] id: SO:0000502 name: transcribed_region def: "A region of sequence that is transcribed. This region may cover the transcript of a gene, it may emcompas the sequence covered by all of the transcripts of a alternately spliced gene, or it may cover the region transcribed by a polycistronic transcript. A gene may have 1 or more transcribed regions and a transcribed_region may belong to one or more genes." [SO:ke] comment: This concept cam about as a direct result of the SO meeting August 2004.nThe exact nature of the relationship between transcribed_region and gene is still up for discussion. We are going with 'associated_with' for the time being. subset: SOFA is_obsolete: true [Term] id: SO:0000503 name: alternately_spliced_gene_encodeing_one_transcript is_obsolete: true [Term] id: SO:0000504 name: D_DJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one D-gene, one DJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D DJ C cluster" EXACT [] synonym: "D-(DJ)-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000505 name: D_DJ_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one D-gene and one DJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D DJ cluster" EXACT [] synonym: "D-(DJ)-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000506 name: D_DJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one D-gene, one DJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D DJ J C cluster" EXACT [] synonym: "D-(DJ)-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000507 name: pseudogenic_exon def: "A non functional descendant of an exon, part of a pseudogene." [SO:ke] comment: This is the analog of the exon of a functional gene. The term was requested by Rama - SGD to allow the annotation of the parts of a pseudogene. Non-functional is defined as either its transcription or translation (or both) are prevented due to one or more mutations. synonym: "pseudogenic exon" EXACT [] is_a: SO:0000462 ! pseudogenic_region relationship: non_functional_homolog_of SO:0000147 ! exon relationship: part_of SO:0000516 ! pseudogenic_transcript [Term] id: SO:0000508 name: D_DJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one D-gene, one DJ-gene, and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D DJ J cluster" EXACT [] synonym: "D-(DJ)-J-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000509 name: D_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one D-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D J C cluster" EXACT [] synonym: "D-J-C-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment [Term] id: SO:0000510 name: VD_gene_segment def: "Genomic DNA of immunoglobulin/T-cell receptor gene in partially rearranged genomic DNA including L-part1, V-intron and V-D-exon, with the 5' UTR (SO:0000204) and 3' UTR (SO:0000205)." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V_D_GENE" EXACT [] synonym: "VD gene" EXACT [] is_a: SO:0000936 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_segment [Term] id: SO:0000511 name: J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J C cluster" EXACT [] synonym: "J-C-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment [Term] id: SO:0000512 name: inversion_derived_deficiency_plus_aneuploid def: "A chromosomal deletion whereby a chromosome generated by recombination between two inversions; has a deficiency at one end and presumed to have a deficiency or duplication at the other end of the inversion." [FB:km] synonym: "inversion derived deficiency plus aneuploid" EXACT [] is_a: SO:1000029 ! chromosomal_deletion [Term] id: SO:0000513 name: J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including more than one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J cluster" EXACT [] synonym: "J-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment [Term] id: SO:0000514 name: J_nonamer def: "9 nucleotide recombination site (e.g. GGTTTTTGT), part of a J-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J nonamer" EXACT [] synonym: "J-NONAMER" EXACT [] is_a: SO:0000562 ! nonamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000302 ! J_gene_recombination_feature [Term] id: SO:0000515 name: J_heptamer def: "7 nucleotide recombination site (e.g. CACAGTG), part of a J-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J heptamer" EXACT [] synonym: "J-HEPTAMER" EXACT [] is_a: SO:0000561 ! heptamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000302 ! J_gene_recombination_feature [Term] id: SO:0000516 name: pseudogenic_transcript def: "A non functional descendant of a transcript, part of a pseudogene." [SO:ke] comment: This is the analog of the transcript of a functional gene. The term was requested by Rama - SGD to allow the annotation of the parts of a pseudogene. Non-functional is defined as either its transcription or translation (or both) are prevented due to one or more mutations. synonym: "pseudogenic transcript" EXACT [] is_a: SO:0000462 ! pseudogenic_region relationship: non_functional_homolog_of SO:0000673 ! transcript relationship: part_of SO:0000336 ! pseudogene [Term] id: SO:0000517 name: J_spacer def: "12 or 23 nucleotide spacer between the J-nonamer and the J-heptamer of a J-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "J spacer" EXACT [] synonym: "J-SPACER" EXACT [] is_a: SO:0000563 ! vertebrate_immune_system_gene_recombination_spacer relationship: part_of SO:0000302 ! J_gene_recombination_feature [Term] id: SO:0000518 name: V_DJ_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene and one DJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V DJ cluster" EXACT [] synonym: "V-(DJ)-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000519 name: V_DJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one DJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V DJ J cluster" EXACT [] synonym: "V-(DJ)-J-CLUSTER" RELATED [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000520 name: V_VDJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VDJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VDJ C cluster" EXACT [] synonym: "V-(VDJ)-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000521 name: V_VDJ_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene and one VDJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VDJ cluster" EXACT [] synonym: "V-(VDJ)-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000522 name: V_VDJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VDJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VDJ J cluster" EXACT [] synonym: "V-(VDJ)-J-CLUSTER" RELATED [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000523 name: V_VJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VJ C cluster" EXACT [] synonym: "V-(VJ)-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000524 name: V_VJ_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene and one VJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VJ cluster" EXACT [] synonym: "V-(VJ)-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000525 name: V_VJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VJ J cluster" EXACT [] synonym: "V-(VJ)-J-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000526 name: V_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including more than one V-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V cluster" EXACT [] synonym: "V-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment [Term] id: SO:0000527 name: V_D_DJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one D-gene, one DJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D DJ C cluster" EXACT [] synonym: "V-D-(DJ)-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000528 name: V_D_DJ_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one D-gene, one DJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D DJ cluster" EXACT [] synonym: "V-D-(DJ)-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000529 name: V_D_DJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one D-gene, one DJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D DJ J C cluster" EXACT [] synonym: "V-D-(DJ)-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000530 name: V_D_DJ_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one D-gene, one DJ-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D DJ J cluster" EXACT [] synonym: "V-D-(DJ)-J-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000531 name: V_D_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one V-gene, one D-gene and one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D J C cluster" EXACT [] synonym: "V-D-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment [Term] id: SO:0000532 name: V_D_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one V-gene, one D-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V D J cluster" EXACT [] synonym: "V-D-J-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment [Term] id: SO:0000533 name: V_heptamer def: "7 nucleotide recombination site (e.g. CACAGTG), part of V-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V heptamer" EXACT [] synonym: "V-HEPTAMER" EXACT [] is_a: SO:0000561 ! heptamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000538 ! V_gene_recombination_feature [Term] id: SO:0000534 name: V_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one V-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V J cluster" EXACT [] synonym: "V-J-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment [Term] id: SO:0000535 name: V_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one V-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V J C cluster" EXACT [] synonym: "V-J-C-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment [Term] id: SO:0000536 name: V_nonamer def: "9 nucleotide recombination site (e.g. ACAAAAACC), part of V-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V nonamer" EXACT [] synonym: "V-NONAMER" EXACT [] is_a: SO:0000562 ! nonamer_of_recombination_feature_of_vertebrate_immune_system_gene relationship: part_of SO:0000538 ! V_gene_recombination_feature [Term] id: SO:0000537 name: V_spacer def: "12 or 23 nucleotide spacer between the V-heptamer and the V-nonamer of a V-gene recombination feature of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V spacer" EXACT [] synonym: "V-SPACER" EXACT [] is_a: SO:0000563 ! vertebrate_immune_system_gene_recombination_spacer relationship: part_of SO:0000538 ! V_gene_recombination_feature [Term] id: SO:0000538 name: V_gene_recombination_feature def: "Recombination signal including V-heptamer, V-spacer and V-nonamer in 3' of V-region of a V-gene or V-sequence of an immunoglobulin/T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V gene recombination feature" EXACT [] synonym: "V-RS" EXACT [] is_a: SO:0000939 ! vertebrate_immune_system_gene_recombination_signal_feature [Term] id: SO:0000539 name: DJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one DJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(DJ)-C-CLUSTER" EXACT [] synonym: "DJ C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000540 name: DJ_J_C_cluster def: "Genomic DNA in rearranged configuration including at least one D-J-GENE, one J-GENE and one C-GENE." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(DJ)-J-C-CLUSTER" EXACT [] synonym: "DJ J C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000541 name: VDJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one VDJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "(VDJ)-C-CLUSTER" EXACT [] synonym: "VDJ C cluster" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000542 name: V_DJ_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one DJ-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V DJ C cluster" EXACT [] synonym: "V-(DJ)-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000543 name: alternately_spliced_gene_encoding_greater_than_one_transcript is_obsolete: true [Term] id: SO:0000544 name: helitron def: "A rolling circle transposon. Autonomous helitrons encode a 5'-to-3' DNA helicase and nuclease/ligase similar to those encoded by known rolling-circle replicons." [http://www.pnas.org/cgi/content/full/100/11/6569] synonym: "ISCR" RELATED [] xref: http://en.wikipedia.org/wiki/Helitron "wiki" is_a: SO:0000182 ! DNA_transposon [Term] id: SO:0000545 name: recoding_pseudoknot def: "The pseudoknots involved in recoding are unique in that, as they play their role as a structure, they are immediately unfolded and their now linear sequence serves as a template for decoding." [http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=33937] synonym: "recoding pseudoknot" EXACT [] is_a: SO:0000591 ! pseudoknot relationship: part_of SO:1001268 ! recoding_stimulatory_region [Term] id: SO:0000546 name: designed_sequence synonym: "designed sequence" EXACT [] is_a: SO:0000351 ! synthetic_sequence [Term] id: SO:0000547 name: inversion_derived_bipartite_duplication def: "A chromosome generated by recombination between two inversions; there is a duplication at each end of the inversion." [FB:km] synonym: "inversion derived bipartite duplication" EXACT [] is_a: SO:1000038 ! intrachromosomal_duplication [Term] id: SO:0000548 name: gene_with_edited_transcript def: "A gene that encodes a transcript that is edited." [SO:xp] synonym: "gene with edited transcript" EXACT [] is_a: SO:0001217 ! protein_coding_gene relationship: transcribed_to SO:0000873 ! edited_transcript [Term] id: SO:0000549 name: inversion_derived_duplication_plus_aneuploid def: "A chromosome generated by recombination between two inversions; has a duplication at one end and presumed to have a deficiency or duplication at the other end of the inversion." [FB:km] synonym: "inversion derived duplication plus aneuploid" EXACT [] is_a: SO:1000038 ! intrachromosomal_duplication [Term] id: SO:0000550 name: aneuploid_chromosome def: "A chromosome structural variation whereby either a chromosome exists in addition to the normal chromosome complement or is lacking." [SO:ke] comment: Examples are Nullo-4, Haplo-4 and triplo-4 in Drosophila. synonym: "aneuploid chromosome" EXACT [] is_a: SO:1000183 ! chromosome_structure_variation [Term] id: SO:0000551 name: polyA_signal_sequence def: "The recognition sequence necessary for endonuclease cleavage of an RNA transcript that is followed by polyadenylation; consensus=AATAAA." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "poly(A) signal" EXACT [] synonym: "polyA signal sequence" EXACT [] synonym: "polyadenylation termination signal" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0000552 name: Shine_Dalgarno_sequence def: "A region in the 5' UTR that pairs with the 16S rRNA during formation of the preinitiation complex." [SO:jh] comment: Not found in Eukaryotic sequence. synonym: "five prime ribosome binding site" EXACT [] synonym: "RBS" RELATED [] synonym: "Shine Dalgarno sequence" EXACT [] synonym: "Shine-Dalgarno sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Shine-Dalgarno_sequence "wiki" is_a: SO:0000139 ! ribosome_entry_site [Term] id: SO:0000553 name: polyA_site alt_id: SO:0001430 def: "The site on an RNA transcript to which will be added adenine residues by post-transcriptional polyadenylation. The boundary between the UTR and the polyA sequence." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "polyA cleavage site" EXACT [] synonym: "polyA junction" EXACT [] synonym: "polyA site" EXACT [] synonym: "polyA_junction" EXACT [] synonym: "polyadenylation site" RELATED [] is_a: SO:0000699 ! junction relationship: part_of SO:0000205 ! three_prime_UTR relationship: part_of SO:0000233 ! mature_transcript [Term] id: SO:0000554 name: assortment_derived_deficiency_plus_duplication is_obsolete: true [Term] id: SO:0000555 name: five_prime_clip def: "5' most region of a precursor transcript that is clipped off during processing." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "5' clip" RELATED [] synonym: "five prime clip" EXACT [] is_a: SO:0000303 ! clip [Term] id: SO:0000556 name: five_prime_D_recombination_signal_sequence def: "Recombination signal of an immunoglobulin/T-cell receptor gene, including the 5' D-nonamer (SO:0000497), 5' D-spacer (SO:0000498), and 5' D-heptamer (SO:0000396) in 5' of the D-region of a D-gene, or in 5' of the D-region of DJ-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "5'RS" EXACT [] synonym: "five prime D recombination signal sequence" EXACT [] synonym: "five prime D-recombination signal sequence" EXACT [] is_a: SO:0000492 ! D_gene_recombination_feature [Term] id: SO:0000557 name: three_prime_clip def: "3'-most region of a precursor transcript that is clipped off during processing." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] synonym: "3'-clip" EXACT [] synonym: "three prime clip" EXACT [] is_a: SO:0000303 ! clip [Term] id: SO:0000558 name: C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene including more than one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "C cluster" EXACT [] synonym: "C-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000478 ! C_gene_segment [Term] id: SO:0000559 name: D_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including more than one D-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D cluster" EXACT [] synonym: "D-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment [Term] id: SO:0000560 name: D_J_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in germline configuration including at least one D-gene and one J-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D J cluster" EXACT [] synonym: "D-J-CLUSTER" EXACT [] is_a: SO:0000482 ! vertebrate_immunoglobulin_T_cell_receptor_gene_cluster relationship: has_part SO:0000458 ! D_gene_segment relationship: has_part SO:0000470 ! J_gene_segment [Term] id: SO:0000561 name: heptamer_of_recombination_feature_of_vertebrate_immune_system_gene def: "Seven nucleotide recombination site (e.g. CACAGTG), part of V-gene, D-gene or J-gene recombination feature of an immunoglobulin or T-cell receptor gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "HEPTAMER" RELATED [] synonym: "heptamer of recombination feature of vertebrate immune system gene" EXACT [] is_a: SO:0000939 ! vertebrate_immune_system_gene_recombination_signal_feature [Term] id: SO:0000562 name: nonamer_of_recombination_feature_of_vertebrate_immune_system_gene synonym: "nonamer of recombination feature of vertebrate immune system gene" EXACT [] is_a: SO:0000939 ! vertebrate_immune_system_gene_recombination_signal_feature [Term] id: SO:0000563 name: vertebrate_immune_system_gene_recombination_spacer synonym: "vertebrate immune system gene recombination spacer" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000564 name: V_DJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one DJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V DJ J C cluster" EXACT [] synonym: "V-(DJ)-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000572 ! DJ_gene_segment [Term] id: SO:0000565 name: V_VDJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VDJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VDJ J C cluster" EXACT [] synonym: "V-(VDJ)-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000574 ! VDJ_gene_segment [Term] id: SO:0000566 name: V_VJ_J_C_cluster def: "Genomic DNA of immunoglobulin/T-cell receptor gene in rearranged configuration including at least one V-gene, one VJ-gene, one J-gene and one C-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V VJ J C cluster" EXACT [] synonym: "V-(VJ)-J-C-CLUSTER" EXACT [] is_a: SO:0000938 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster relationship: has_part SO:0000466 ! V_gene_segment relationship: has_part SO:0000470 ! J_gene_segment relationship: has_part SO:0000478 ! C_gene_segment relationship: has_part SO:0000576 ! VJ_gene_segment [Term] id: SO:0000567 name: inversion_derived_aneuploid_chromosome def: "A chromosome may be generated by recombination between two inversions; presumed to have a deficiency or duplication at each end of the inversion." [FB:km] synonym: "inversion derived aneuploid chromosome" EXACT [] is_a: SO:0000550 ! aneuploid_chromosome [Term] id: SO:0000568 name: bidirectional_promoter synonym: "bidirectional promoter" EXACT [] is_a: SO:0000167 ! promoter [Term] id: SO:0000569 name: retrotransposed alt_id: SO:0100042 def: "An attribute of a feature that occurred as the product of a reverse transcriptase mediated event." [SO:ke] comment: GO:0003964 RNA-directed DNA polymerase activity. xref: http://en.wikipedia.org/wiki/Retrotransposed "wiki" is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000570 name: three_prime_D_recombination_signal_sequence def: "Recombination signal of an immunoglobulin/T-cell receptor gene, including the 3' D-heptamer (SO:0000493), 3' D-spacer, and 3' D-nonamer (SO:0000494) in 3' of the D-region of a D-gene." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "3'D-RS" EXACT [] synonym: "three prime D recombination signal sequence" EXACT [] synonym: "three_prime_D-recombination_signal_sequence" EXACT [] is_a: SO:0000492 ! D_gene_recombination_feature [Term] id: SO:0000571 name: miRNA_encoding synonym: "miRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000572 name: DJ_gene_segment def: "Genomic DNA of immunoglobulin/T-cell receptor gene in partially rearranged genomic DNA including D-J-region with 5' UTR and 3' UTR, also designated as D-J-segment." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "D-J-GENE" EXACT [] synonym: "DJ gene" EXACT [] is_a: SO:0000936 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_segment [Term] id: SO:0000573 name: rRNA_encoding synonym: "rRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000574 name: VDJ_gene_segment def: "Rearranged genomic DNA of immunoglobulin/T-cell receptor gene including L-part1, V-intron and V-D-J-exon, with the 5'UTR (SO:0000204) and 3'UTR (SO:0000205)." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V-D-J-GENE" EXACT [] synonym: "VDJ gene" EXACT [] is_a: SO:0000936 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_segment [Term] id: SO:0000575 name: scRNA_encoding synonym: "scRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000576 name: VJ_gene_segment def: "Rearranged genomic DNA of immunoglobulin/T-cell receptor gene including L-part1, V-intron and V-J-exon, with the 5'UTR (SO:0000204) and 3'UTR (SO:0000205)." [http://www.imgt.org/cgi-bin/IMGTlect.jv?query=7#] synonym: "V-J-GENE" EXACT [] synonym: "VJ gene" EXACT [] is_a: SO:0000936 ! vertebrate_immunoglobulin_T_cell_receptor_rearranged_segment [Term] id: SO:0000577 name: centromere def: "A region of chromosome where the spindle fibers attach during mitosis and meiosis." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Centromere "wiki" is_a: SO:0000628 ! chromosomal_structural_element [Term] id: SO:0000578 name: snoRNA_encoding synonym: "snoRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000579 name: edited_transcript_feature def: "A locatable feature on a transcript that is edited." [SO:ma] synonym: "edited transcript feature" EXACT [] is_a: SO:0000833 ! transcript_region [Term] id: SO:0000580 name: methylation_guide_snoRNA_primary_transcript def: "A primary transcript encoding a methylation guide small nucleolar RNA." [SO:ke] synonym: "methylation guide snoRNA primary transcript" EXACT [] is_a: SO:0000232 ! snoRNA_primary_transcript [Term] id: SO:0000581 name: cap def: "A structure consisting of a 7-methylguanosine in 5'-5' triphosphate linkage with the first nucleotide of an mRNA. It is added post-transcriptionally, and is not encoded in the DNA." [http://seqcore.brcf.med.umich.edu/doc/educ/dnapr/mbglossary/mbgloss.html] subset: SOFA xref: http://en.wikipedia.org/wiki/5%27_cap "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000582 name: rRNA_cleavage_snoRNA_primary_transcript def: "A primary transcript encoding an rRNA cleavage snoRNA." [SO:ke] synonym: "rRNA cleavage snoRNA primary transcript" EXACT [] is_a: SO:0000232 ! snoRNA_primary_transcript [Term] id: SO:0000583 name: pre_edited_region def: "The region of a transcript that will be edited." [http://dna.kdna.ucla.edu/rna/index.aspx] synonym: "pre edited region" EXACT [] synonym: "pre-edited region" EXACT [] is_a: SO:0000579 ! edited_transcript_feature [Term] id: SO:0000584 name: tmRNA def: "A tmRNA liberates a mRNA from a stalled ribosome. To accomplish this part of the tmRNA is used as a reading frame that ends in a translation stop signal. The broken mRNA is replaced in the ribosome by the tmRNA and translation of the tmRNA leads to addition of a proteolysis tag to the incomplete protein enabling recognition by a protease. Recently a number of permuted tmRNAs genes have been found encoded in two parts. TmRNAs have been identified in eubacteria and some chloroplasts but are absent from archeal and Eukaryote nuclear genomes." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00023] synonym: "10Sa RNA" RELATED [] synonym: "ssrA" RELATED [] xref: http://en.wikipedia.org/wiki/TmRNA "wiki" is_a: SO:0000370 ! small_regulatory_ncRNA [Term] id: SO:0000585 name: C_D_box_snoRNA_encoding synonym: "C/D box snoRNA encoding" EXACT [] is_a: SO:0000578 ! snoRNA_encoding [Term] id: SO:0000586 name: tmRNA_primary_transcript def: "A primary transcript encoding a tmRNA (SO:0000584)." [SO:ke] synonym: "10Sa RNA primary transcript" RELATED [] synonym: "ssrA RNA primary transcript" RELATED [] synonym: "tmRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000587 name: group_I_intron def: "Group I catalytic introns are large self-splicing ribozymes. They catalyze their own excision from mRNA, tRNA and rRNA precursors in a wide range of organisms. The core secondary structure consists of 9 paired regions (P1-P9). These fold to essentially two domains, the P4-P6 domain (formed from the stacking of P5, P4, P6 and P6a helices) and the P3-P9 domain (formed from the P8, P3, P7 and P9 helices). Group I catalytic introns often have long ORFs inserted in loop regions." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00028] comment: GO:0000372. subset: SOFA synonym: "group I intron" EXACT [] xref: http://en.wikipedia.org/wiki/Group_I_intron "wiki" is_a: SO:0000588 ! autocatalytically_spliced_intron [Term] id: SO:0000588 name: autocatalytically_spliced_intron def: "A self spliced intron." [SO:ke] subset: SOFA synonym: "autocatalytically spliced intron" EXACT [] is_a: SO:0000188 ! intron relationship: has_quality SO:0001186 ! ribozymic [Term] id: SO:0000589 name: SRP_RNA_primary_transcript def: "A primary transcript encoding a signal recognition particle RNA." [SO:ke] synonym: "SRP RNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000590 name: SRP_RNA def: "The signal recognition particle (SRP) is a universally conserved ribonucleoprotein. It is involved in the co-translational targeting of proteins to membranes. The eukaryotic SRP consists of a 300-nucleotide 7S RNA and six proteins: SRPs 72, 68, 54, 19, 14, and 9. Archaeal SRP consists of a 7S RNA and homologues of the eukaryotic SRP19 and SRP54 proteins. In most eubacteria, the SRP consists of a 4.5S RNA and the Ffh protein (a homologue of the eukaryotic SRP54 protein). Eukaryotic and archaeal 7S RNAs have very similar secondary structures, with eight helical elements. These fold into the Alu and S domains, separated by a long linker region. Eubacterial SRP is generally a simpler structure, with the M domain of Ffh bound to a region of the 4.5S RNA that corresponds to helix 8 of the eukaryotic and archaeal SRP S domain. Some Gram-positive bacteria (e.g. Bacillus subtilis), however, have a larger SRP RNA that also has an Alu domain. The Alu domain is thought to mediate the peptide chain elongation retardation function of the SRP. The universally conserved helix which interacts with the SRP54/Ffh M domain mediates signal sequence recognition. In eukaryotes and archaea, the SRP19-helix 6 complex is thought to be involved in SRP assembly and stabilizes helix 8 for SRP54 binding." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00017] subset: SOFA synonym: "7S RNA" RELATED [] synonym: "signal recognition particle RNA" RELATED [] synonym: "SRP RNA" EXACT [] is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000589 ! SRP_RNA_primary_transcript [Term] id: SO:0000591 name: pseudoknot def: "A tertiary structure in RNA where nucleotides in a loop form base pairs with a region of RNA downstream of the loop." [RSC:cb] xref: http://en.wikipedia.org/wiki/Pseudoknot "wiki" is_a: SO:0000002 ! sequence_secondary_structure [Term] id: SO:0000592 name: H_pseudoknot def: "A pseudoknot which contains two stems and at least two loops." [http://www.ncbi.nlm.nih.gov:80/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=10334330&dopt=Abstract] synonym: "classical pseudoknot" EXACT [] synonym: "H pseudoknot" EXACT [] synonym: "H-pseudoknot" EXACT [] synonym: "H-type pseudoknot" EXACT [] synonym: "hairpin-type pseudoknot" EXACT [] is_a: SO:0000591 ! pseudoknot [Term] id: SO:0000593 name: C_D_box_snoRNA def: "Most box C/D snoRNAs also contain long (>10 nt) sequences complementary to rRNA. Boxes C and D, as well as boxes C' and D', are usually located in close proximity, and form a structure known as the box C/D motif. This motif is important for snoRNA stability, processing, nucleolar targeting and function. A small number of box C/D snoRNAs are involved in rRNA processing; most, however, are known or predicted to serve as guide RNAs in ribose methylation of rRNA. Targeting involves direct base pairing of the snoRNA at the rRNA site to be modified and selection of a rRNA nucleotide a fixed distance from box D or D'." [http://www.bio.umass.edu/biochem/rna-sequence/Yeast_snoRNA_Database/snoRNA_DataBase.html] subset: SOFA synonym: "box C/D snoRNA" EXACT [] synonym: "C D box snoRNA" EXACT [] synonym: "C/D box snoRNA" EXACT [] is_a: SO:0000275 ! snoRNA relationship: derives_from SO:0000595 ! C_D_box_snoRNA_primary_transcript [Term] id: SO:0000594 name: H_ACA_box_snoRNA def: "Members of the box H/ACA family contain an ACA triplet, exactly 3 nt upstream from the 3' end and an H-box in a hinge region that links two structurally similar functional domains of the molecule. Both boxes are important for snoRNA biosynthesis and function. A few box H/ACA snoRNAs are involved in rRNA processing; most others are known or predicted to participate in selection of uridine nucleosides in rRNA to be converted to pseudouridines. Site selection is mediated by direct base pairing of the snoRNA with rRNA through one or both targeting domains." [http://www.bio.umass.edu/biochem/rna-sequence/Yeast_snoRNA_Database/snoRNA_DataBase.html] synonym: "box H/ACA snoRNA" EXACT [] synonym: "H ACA box snoRNA" EXACT [] synonym: "H/ACA box snoRNA" EXACT [] is_a: SO:0000275 ! snoRNA relationship: derives_from SO:0000596 ! H_ACA_box_snoRNA_primary_transcript [Term] id: SO:0000595 name: C_D_box_snoRNA_primary_transcript def: "A primary transcript encoding a small nucleolar RNA of the box C/D family." [SO:ke] synonym: "C/D box snoRNA primary transcript" EXACT [] is_a: SO:0000232 ! snoRNA_primary_transcript [Term] id: SO:0000596 name: H_ACA_box_snoRNA_primary_transcript def: "A primary transcript encoding a small nucleolar RNA of the box H/ACA family." [SO:ke] synonym: "H ACA box snoRNA primary transcript" EXACT [] is_a: SO:0000232 ! snoRNA_primary_transcript [Term] id: SO:0000597 name: transcript_edited_by_U_insertion/deletion def: "The insertion and deletion of uridine (U) residues, usually within coding regions of mRNA transcripts of cryptogenes in the mitochondrial genome of kinetoplastid protozoa." [http://www.rna.ucla.edu/index.html] is_obsolete: true [Term] id: SO:0000598 name: edited_by_C_insertion_and_dinucleotide_insertion synonym: "transcript_edited_by_C-insertion_and_dinucleotide_insertion" RELATED [] is_obsolete: true [Term] id: SO:0000599 name: edited_by_C_to_U_substitution is_obsolete: true [Term] id: SO:0000600 name: edited_by_A_to_I_substitution is_obsolete: true [Term] id: SO:0000601 name: edited_by_G_addition is_obsolete: true [Term] id: SO:0000602 name: guide_RNA def: "A short 3'-uridylated RNA that can form a duplex (except for its post-transcriptionally added oligo_U tail (SO:0000609)) with a stretch of mature edited mRNA." [http://www.rna.ucla.edu/index.html] subset: SOFA synonym: "gRNA" EXACT [] synonym: "guide RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Guide_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000603 name: group_II_intron def: "Group II introns are found in rRNA, tRNA and mRNA of organelles in fungi, plants and protists, and also in mRNA in bacteria. They are large self-splicing ribozymes and have 6 structural domains (usually designated dI to dVI). A subset of group II introns also encode essential splicing proteins in intronic ORFs. The length of these introns can therefore be up to 3kb. Splicing occurs in almost identical fashion to nuclear pre-mRNA splicing with two transesterification steps. The 2' hydroxyl of a bulged adenosine in domain VI attacks the 5' splice site, followed by nucleophilic attack on the 3' splice site by the 3' OH of the upstream exon. Protein machinery is required for splicing in vivo, and long range intron-intron and intron-exon interactions are important for splice site positioning. Group II introns are further sub-classified into groups IIA and IIB which differ in splice site consensus, distance of bulged A from 3' splice site, some tertiary interactions, and intronic ORF phylogeny." [http://www.sanger.ac.uk/Software/Rfam/browse/index.shtml] comment: GO:0000373. subset: SOFA synonym: "group II intron" EXACT [] xref: http://en.wikipedia.org/wiki/Group_II_intron "wiki" is_a: SO:0000588 ! autocatalytically_spliced_intron [Term] id: SO:0000604 name: editing_block def: "Edited mRNA sequence mediated by a single guide RNA (SO:0000602)." [http://dna.kdna.ucla.edu/rna/index.aspx] synonym: "editing block" EXACT [] is_a: SO:0000579 ! edited_transcript_feature [Term] id: SO:0000605 name: intergenic_region def: "A region containing or overlapping no genes that is bounded on either side by a gene, or bounded by a gene and the end of the chromosome." [SO:cjm] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "intergenic region" EXACT [] xref: http://en.wikipedia.org/wiki/Intergenic_region "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000606 name: editing_domain def: "Edited mRNA sequence mediated by two or more overlapping guide RNAs (SO:0000602)." [http://dna.kdna.ucla.edu/rna/index.aspx] synonym: "editing domain" EXACT [] is_a: SO:0000579 ! edited_transcript_feature [Term] id: SO:0000607 name: unedited_region def: "The region of an edited transcript that will not be edited." [http://dna.kdna.ucla.edu/rna/index.aspx] synonym: "unedited region" EXACT [] is_a: SO:0000579 ! edited_transcript_feature [Term] id: SO:0000608 name: H_ACA_box_snoRNA_encoding synonym: "H ACA box snoRNA encoding" EXACT [] is_a: SO:0000578 ! snoRNA_encoding [Term] id: SO:0000609 name: oligo_U_tail def: "The string of non-encoded U's at the 3' end of a guide RNA (SO:0000602)." [http://www.rna.ucla.edu/] synonym: "oligo U tail" EXACT [] is_a: SO:0001411 ! biological_region relationship: adjacent_to SO:0000602 ! guide_RNA [Term] id: SO:0000610 name: polyA_sequence def: "Sequence of about 100 nucleotides of A added to the 3' end of most eukaryotic mRNAs." [SO:ke] subset: SOFA synonym: "polyA sequence" EXACT [] is_a: SO:0001411 ! biological_region relationship: adjacent_to SO:0000234 ! mRNA [Term] id: SO:0000611 name: branch_site def: "A pyrimidine rich sequence near the 3' end of an intron to which the 5'end becomes covalently bound during nuclear splicing. The resulting structure resembles a lariat." [SO:ke] subset: SOFA synonym: "branch point" EXACT [] synonym: "branch site" EXACT [] synonym: "branch_point" EXACT [] is_a: SO:0000841 ! spliceosomal_intron_region [Term] id: SO:0000612 name: polypyrimidine_tract def: "The polypyrimidine tract is one of the cis-acting sequence elements directing intron removal in pre-mRNA splicing." [http://nar.oupjournals.org/cgi/content/full/25/4/888] subset: SOFA synonym: "polypyrimidine tract" EXACT [] xref: http://en.wikipedia.org/wiki/Polypyrimidine_tract "wiki" is_a: SO:0000841 ! spliceosomal_intron_region [Term] id: SO:0000613 name: bacterial_RNApol_promoter def: "A DNA sequence to which bacterial RNA polymerase binds, to begin transcription." [SO:ke] synonym: "bacterial RNApol promoter" EXACT [] is_a: SO:0000752 ! gene_group_regulatory_region is_a: SO:0001203 ! RNA_polymerase_promoter [Term] id: SO:0000614 name: bacterial_terminator def: "A terminator signal for bacterial transcription." [SO:ke] synonym: "bacterial terminator" EXACT [] is_a: SO:0000141 ! terminator is_a: SO:0000752 ! gene_group_regulatory_region [Term] id: SO:0000615 name: terminator_of_type_2_RNApol_III_promoter def: "A terminator signal for RNA polymerase III transcription." [SO:ke] synonym: "terminator of type 2 RNApol III promoter" EXACT [] is_a: SO:0000951 ! eukaryotic_terminator [Term] id: SO:0000616 name: transcription_end_site def: "The base where transcription ends." [SO:ke] subset: SOFA synonym: "transcription end site" EXACT [] is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000617 name: RNApol_III_promoter_type_1 synonym: "RNApol III promoter type 1" EXACT [] is_a: SO:0000171 ! RNApol_III_promoter [Term] id: SO:0000618 name: RNApol_III_promoter_type_2 synonym: "RNApol III promoter type 2" EXACT [] synonym: "tRNA promoter" RELATED [] is_a: SO:0000171 ! RNApol_III_promoter [Term] id: SO:0000619 name: A_box def: "A variably distant linear promoter region recognized by TFIIIC, with consensus sequence TGGCnnAGTGG." [SO:ke] comment: Binds TFIIIC. synonym: "A-box" EXACT [] xref: http://en.wikipedia.org/wiki/A-box "wiki" is_a: SO:0001660 ! core_promoter_element [Term] id: SO:0000620 name: B_box def: "A variably distant linear promoter region recognized by TFIIIC, with consensus sequence AGGTTCCAnnCC." [SO:ke] comment: Binds TFIIIC. synonym: "B-box" EXACT [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0000618 ! RNApol_III_promoter_type_2 [Term] id: SO:0000621 name: RNApol_III_promoter_type_3 synonym: "RNApol III promoter type 3" EXACT [] is_a: SO:0000171 ! RNApol_III_promoter [Term] id: SO:0000622 name: C_box def: "An RNA polymerase III type 1 promoter with consensus sequence CAnnCCn." [SO:ke] synonym: "C-box" EXACT [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0000617 ! RNApol_III_promoter_type_1 [Term] id: SO:0000623 name: snRNA_encoding synonym: "snRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000624 name: telomere def: "A specific structure at the end of a linear chromosome, required for the integrity and maintenance of the end." [SO:ma] subset: SOFA synonym: "telomeric DNA" EXACT [] synonym: "telomeric sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Telomere "wiki" is_a: SO:0000628 ! chromosomal_structural_element [Term] id: SO:0000625 name: silencer def: "A regulatory region which upon binding of transcription factors, suppress the transcription of the gene or genes they control." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Silencer_(DNA) "wiki" is_a: SO:0000727 ! CRM [Term] id: SO:0000626 name: chromosomal_regulatory_element synonym: "chromosomal regulatory element" EXACT [] is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000627 name: insulator def: "A transcriptional cis regulatory region that when located between a CM and a gene's promoter prevents the CRM from modulating that genes expression." [SO:regcreative] subset: SOFA synonym: "insulator element" EXACT [] xref: http://en.wikipedia.org/wiki/Insulator_(genetics) "wiki" is_a: SO:0001055 ! transcriptional_cis_regulatory_region [Term] id: SO:0000628 name: chromosomal_structural_element subset: SOFA synonym: "chromosomal structural element" EXACT [] is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000629 name: five_prime_open_reading_frame synonym: "five prime open reading frame" EXACT [] is_a: SO:0000836 ! mRNA_region relationship: part_of SO:0000204 ! five_prime_UTR [Term] id: SO:0000630 name: upstream_AUG_codon def: "A start codon upstream of the ORF." [SO:ke] synonym: "upstream AUG codon" EXACT [] is_a: SO:0000837 ! UTR_region relationship: part_of SO:0000203 ! UTR [Term] id: SO:0000631 name: polycistronic_primary_transcript def: "A primary transcript encoding for more than one gene product." [SO:ke] synonym: "polycistronic primary transcript" EXACT [] is_a: SO:0000078 ! polycistronic_transcript is_a: SO:0000185 ! primary_transcript relationship: has_quality SO:0000880 ! polycistronic [Term] id: SO:0000632 name: monocistronic_primary_transcript def: "A primary transcript encoding for one gene product." [SO:ke] synonym: "monocistronic primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript is_a: SO:0000665 ! monocistronic_transcript relationship: has_quality SO:0000878 ! monocistronic [Term] id: SO:0000633 name: monocistronic_mRNA def: "An mRNA with either a single protein product, or for which the regions encoding all its protein products overlap." [SO:rd] synonym: "monocistronic mRNA" EXACT [] synonym: "monocistronic processed transcript" EXACT [] xref: http://en.wikipedia.org/wiki/Monocistronic_mRNA "wiki" is_a: SO:0000234 ! mRNA is_a: SO:0000665 ! monocistronic_transcript relationship: has_quality SO:0000878 ! monocistronic [Term] id: SO:0000634 name: polycistronic_mRNA def: "An mRNA that encodes multiple proteins from at least two non-overlapping regions." [SO:rd] synonym: "polycistronic mRNA" EXACT [] synonym: "polycistronic processed transcript" RELATED [] xref: http://en.wikipedia.org/wiki/Polycistronic_mRNA "wiki" is_a: SO:0000078 ! polycistronic_transcript is_a: SO:0000234 ! mRNA relationship: has_quality SO:0000880 ! polycistronic [Term] id: SO:0000635 name: mini_exon_donor_RNA def: "A primary transcript that donates the spliced leader to other mRNA." [SO:ke] synonym: "mini exon donor RNA" EXACT [] synonym: "mini-exon donor RNA" EXACT [] is_a: SO:0000185 ! primary_transcript [Term] id: SO:0000636 name: spliced_leader_RNA synonym: "mini-exon" RELATED [] synonym: "spliced leader RNA" EXACT [] is_a: SO:0000835 ! primary_transcript_region relationship: part_of SO:0000635 ! mini_exon_donor_RNA [Term] id: SO:0000637 name: engineered_plasmid def: "A plasmid that is engineered." [SO:xp] synonym: "engineered plasmid" EXACT [] synonym: "engineered plasmid gene" RELATED [] is_a: SO:0000155 ! plasmid is_a: SO:0000804 ! engineered_region relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000638 name: transcribed_spacer_region def: "Part of an rRNA transcription unit that is transcribed but discarded during maturation, not giving rise to any part of rRNA." [http://oregonstate.edu/instruction/bb492/general/glossary.html] synonym: "transcribed spacer region" EXACT [] is_a: SO:0000838 ! rRNA_primary_transcript_region [Term] id: SO:0000639 name: internal_transcribed_spacer_region def: "Non-coding regions of DNA sequence that separate genes coding for the 28S, 5.8S, and 18S ribosomal RNAs." [SO:ke] synonym: "internal transcribed spacer region" EXACT [] is_a: SO:0000638 ! transcribed_spacer_region [Term] id: SO:0000640 name: external_transcribed_spacer_region def: "Non-coding regions of DNA that precede the sequence that codes for the ribosomal RNA." [SO:ke] synonym: "external transcribed spacer region" EXACT [] is_a: SO:0000638 ! transcribed_spacer_region [Term] id: SO:0000641 name: tetranucleotide_repeat_microsatellite_feature synonym: "tetranucleotide repeat microsatellite feature" EXACT [] is_a: SO:0000289 ! microsatellite [Term] id: SO:0000642 name: SRP_RNA_encoding synonym: "SRP RNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000643 name: minisatellite def: "A repeat region containing tandemly repeated sequences having a unit length of 10 to 40 bp." [http://www.informatics.jax.org/silver/glossary.shtml] subset: SOFA xref: http://en.wikipedia.org/wiki/Minisatellite "wiki" is_a: SO:0000005 ! satellite_DNA [Term] id: SO:0000644 name: antisense_RNA def: "Antisense RNA is RNA that is transcribed from the coding, rather than the template, strand of DNA. It is therefore complementary to mRNA." [SO:ke] subset: SOFA synonym: "antisense RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Antisense_RNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000645 ! antisense_primary_transcript [Term] id: SO:0000645 name: antisense_primary_transcript def: "The reverse complement of the primary transcript." [SO:ke] subset: SOFA synonym: "antisense primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript [Term] id: SO:0000646 name: siRNA def: "A small RNA molecule that is the product of a longer exogenous or endogenous dsRNA, which is either a bimolecular duplex or very long hairpin, processed (via the Dicer pathway) such that numerous siRNAs accumulate from both strands of the dsRNA. SRNAs trigger the cleavage of their target molecules." [PMID:12592000] subset: SOFA synonym: "small interfering RNA" EXACT [] xref: http://en.wikipedia.org/wiki/SiRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000647 name: miRNA_primary_transcript def: "A primary transcript encoding a micro RNA." [SO:ke] synonym: "micro RNA primary transcript" EXACT [] synonym: "miRNA primary transcript" EXACT [] is_a: SO:0000483 ! nc_primary_transcript [Term] id: SO:0000648 name: stRNA_primary_transcript def: "A primary transcript encoding a small temporal mRNA (SO:0000649)." [SO:ke] synonym: "small temporal RNA primary transcript" EXACT [] synonym: "stRNA primary transcript" EXACT [] is_a: SO:0000647 ! miRNA_primary_transcript [Term] id: SO:0000649 name: stRNA def: "Non-coding RNAs of about 21 nucleotides in length that regulate temporal development; first discovered in C. elegans." [PMID:11081512] subset: SOFA synonym: "small temporal RNA" EXACT [] xref: http://en.wikipedia.org/wiki/StRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000650 name: small_subunit_rRNA def: "Ribosomal RNA transcript that structures the small subunit of the ribosome." [SO:ke] subset: SOFA synonym: "small subunit rRNA" EXACT [] synonym: "SSU RNA" EXACT [RSC:cb] synonym: "SSU rRNA" EXACT [RSC:cb] is_a: SO:0000252 ! rRNA relationship: derives_from SO:0000255 ! rRNA_small_subunit_primary_transcript [Term] id: SO:0000651 name: large_subunit_rRNA def: "Ribosomal RNA transcript that structures the large subunit of the ribosome." [SO:ke] subset: SOFA synonym: "large subunit rRNA" EXACT [] synonym: "LSU RNA" EXACT [RSC:cb] synonym: "LSU rRNA" EXACT [RSC:cb] is_a: SO:0000252 ! rRNA relationship: derives_from SO:0000325 ! rRNA_large_subunit_primary_transcript [Term] id: SO:0000652 name: rRNA_5S def: "5S ribosomal RNA (5S rRNA) is a component of the large ribosomal subunit in both prokaryotes and eukaryotes. In eukaryotes, it is synthesised by RNA polymerase III (the other eukaryotic rRNAs are cleaved from a 45S precursor synthesised by RNA polymerase I). In Xenopus oocytes, it has been shown that fingers 4-7 of the nine-zinc finger transcription factor TFIIIA can bind to the central region of 5S RNA. Thus, in addition to positively regulating 5S rRNA transcription, TFIIIA also stabilizes 5S rRNA until it is required for transcription." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00001] subset: SOFA synonym: "5S LSU rRNA" EXACT [] synonym: "5S ribosomal RNA" EXACT [] synonym: "5S rRNA" EXACT [] synonym: "rRNA 5S" EXACT [] xref: http://en.wikipedia.org/wiki/5S_ribosomal_RNA "wiki" is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0000653 name: rRNA_28S def: "A component of the large ribosomal subunit." [SO:ke] subset: SOFA synonym: "28S LSU rRNA" EXACT [] synonym: "28S ribosomal RNA" EXACT [] synonym: "28S rRNA" EXACT [] synonym: "rRNA 28S" EXACT [] xref: http://en.wikipedia.org/wiki/28S_ribosomal_RNA "wiki" is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0000654 name: maxicircle_gene def: "A mitochondrial gene located in a maxicircle." [SO:xp] synonym: "maxi-circle gene" EXACT [] synonym: "maxicircle gene" EXACT [] is_a: SO:0000089 ! kinetoplast_gene relationship: part_of SO:0000742 ! maxicircle [Term] id: SO:0000655 name: ncRNA def: "An RNA transcript that does not encode for a protein rather the RNA molecule is the gene product." [SO:ke] comment: A ncRNA is a processed_transcript, so it may not contain parts such as transcribed_spacer_regions that are removed in the act of processing. For the corresponding primary_transcripts, please see term SO:0000483 nc_primary_transcript. subset: SOFA synonym: "noncoding RNA" EXACT [] xref: http://en.wikipedia.org/wiki/NcRNA "wiki" is_a: SO:0000233 ! mature_transcript [Term] id: SO:0000656 name: stRNA_encoding synonym: "stRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000657 name: repeat_region def: "A region of sequence containing one or more repeat units." [SO:ke] subset: SOFA synonym: "repeat region" EXACT [] is_a: SO:0001411 ! biological_region relationship: has_part SO:0000726 ! repeat_unit [Term] id: SO:0000658 name: dispersed_repeat def: "A repeat that is located at dispersed sites in the genome." [SO:ke] subset: SOFA synonym: "dispersed repeat" EXACT [] synonym: "interspersed repeat" EXACT [] xref: http://en.wikipedia.org/wiki/Interspersed_repeat "wiki" is_a: SO:0000657 ! repeat_region [Term] id: SO:0000659 name: tmRNA_encoding synonym: "tmRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000660 name: DNA_invertase_target_sequence is_obsolete: true [Term] id: SO:0000661 name: intron_attribute is_obsolete: true [Term] id: SO:0000662 name: spliceosomal_intron def: "An intron which is spliced by the spliceosome." [SO:ke] comment: GO:0000398. subset: SOFA synonym: "spliceosomal intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000663 name: tRNA_encoding synonym: "tRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000664 name: introgressed_chromosome_region synonym: "introgressed chromosome region" EXACT [] is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000665 name: monocistronic_transcript def: "A transcript that is monocistronic." [SO:xp] synonym: "monocistronic transcript" EXACT [] is_a: SO:0000673 ! transcript relationship: has_quality SO:0000878 ! monocistronic [Term] id: SO:0000666 name: mobile_intron def: "An intron (mitochondrial, chloroplast, nuclear or prokaryotic) that encodes a double strand sequence specific endonuclease allowing for mobility." [SO:ke] synonym: "mobile intron" EXACT [] is_a: SO:0000188 ! intron is_a: SO:0001037 ! mobile_genetic_element relationship: has_quality SO:0001234 ! mobile [Term] id: SO:0000667 name: insertion alt_id: SO:1000034 def: "The sequence of one or more nucleotides added between two adjacent nucleotides in the sequence." [SO:ke] subset: DBVAR subset: SOFA synonym: "insertion" EXACT dbvar [http://www.ncbi.nlm.nih.gov/dbvar/] synonym: "nucleotide insertion" EXACT [] synonym: "nucleotide_insertion" EXACT [] xref: loinc:LA6687-3 "Insertion" is_a: SO:0001059 ! sequence_alteration is_a: SO:0001411 ! biological_region [Term] id: SO:0000668 name: EST_match def: "A match against an EST sequence." [SO:ke] subset: SOFA synonym: "EST match" EXACT [] is_a: SO:0000102 ! expressed_sequence_match [Term] id: SO:0000669 name: sequence_rearrangement_feature synonym: "sequence rearrangement feature" EXACT [] is_a: SO:0000298 ! recombination_feature [Term] id: SO:0000670 name: chromosome_breakage_sequence def: "A sequence within the micronuclear DNA of ciliates at which chromosome breakage and telomere addition occurs during nuclear differentiation." [SO:ma] synonym: "chromosome breakage sequence" EXACT [] is_a: SO:0000669 ! sequence_rearrangement_feature [Term] id: SO:0000671 name: internal_eliminated_sequence def: "A sequence eliminated from the genome of ciliates during nuclear differentiation." [SO:ma] synonym: "internal eliminated sequence" EXACT [] is_a: SO:0000669 ! sequence_rearrangement_feature [Term] id: SO:0000672 name: macronucleus_destined_segment def: "A sequence that is conserved, although rearranged relative to the micronucleus, in the macronucleus of a ciliate genome." [SO:ma] synonym: "macronucleus destined segment" EXACT [] is_a: SO:0000669 ! sequence_rearrangement_feature [Term] id: SO:0000673 name: transcript def: "An RNA synthesized on a DNA or RNA template by an RNA polymerase." [SO:ma] subset: SOFA xref: http://en.wikipedia.org/wiki/RNA "wiki" is_a: SO:0000831 ! gene_member_region [Term] id: SO:0000674 name: non_canonical_splice_site def: "A splice site where the donor and acceptor sites differ from the canonical form." [SO:ke] synonym: "non canonical splice site" EXACT [] synonym: "non-canonical splice site" EXACT [] is_obsolete: true consider: SO:0000678 consider: SO:0000679 [Term] id: SO:0000675 name: canonical_splice_site def: "The major class of splice site with dinucleotides GT and AG for donor and acceptor sites, respectively." [SO:ke] synonym: "canonical splice site" EXACT [] is_obsolete: true consider: SO:0000676 consider: SO:0000677 [Term] id: SO:0000676 name: canonical_three_prime_splice_site def: "The canonical 3' splice site has the sequence \"AG\"." [SO:ke] synonym: "canonical 3' splice site" EXACT [] synonym: "canonical three prime splice site" EXACT [] is_a: SO:0000164 ! three_prime_cis_splice_site [Term] id: SO:0000677 name: canonical_five_prime_splice_site def: "The canonical 5' splice site has the sequence \"GT\"." [SO:ke] synonym: "canonical 5' splice site" EXACT [] synonym: "canonical five prime splice site" EXACT [] is_a: SO:0000163 ! five_prime_cis_splice_site [Term] id: SO:0000678 name: non_canonical_three_prime_splice_site def: "A 3' splice site that does not have the sequence \"AG\"." [SO:ke] synonym: "non canonical 3' splice site" RELATED [] synonym: "non canonical three prime splice site" EXACT [] synonym: "non-canonical three prime splice site" EXACT [] is_a: SO:0000164 ! three_prime_cis_splice_site [Term] id: SO:0000679 name: non_canonical_five_prime_splice_site def: "A 5' splice site which does not have the sequence \"GT\"." [SO:ke] synonym: "non canonical 5' splice site" EXACT [] synonym: "non canonical five prime splice site" EXACT [] synonym: "non-canonical five prime splice site" EXACT [] is_a: SO:0000163 ! five_prime_cis_splice_site [Term] id: SO:0000680 name: non_canonical_start_codon def: "A start codon that is not the usual AUG sequence." [SO:ke] synonym: "non ATG start codon" EXACT [] synonym: "non canonical start codon" EXACT [] synonym: "non-canonical start codon" EXACT [] is_a: SO:0000318 ! start_codon [Term] id: SO:0000681 name: aberrant_processed_transcript def: "A transcript that has been processed \"incorrectly\", for example by the failure of splicing of one or more exons." [SO:ke] synonym: "aberrant processed transcript" EXACT [] is_a: SO:0000673 ! transcript [Term] id: SO:0000682 name: splicing_feature is_obsolete: true [Term] id: SO:0000683 name: exonic_splice_enhancer def: "Exonic splicing enhancers (ESEs) facilitate exon definition by assisting in the recruitment of splicing factors to the adjacent intron." [http://www.ncbi.nlm.nih.gov:80/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=12403462&dopt=Abstract] synonym: "exonic splice enhancer" EXACT [] is_a: SO:0000344 ! splice_enhancer [Term] id: SO:0000684 name: nuclease_sensitive_site def: "A region of nucleotide sequence targeted by a nuclease enzyme." [SO:ma] subset: SOFA synonym: "nuclease sensitive site" EXACT [] is_a: SO:0000059 ! nuclease_binding_site [Term] id: SO:0000685 name: DNAseI_hypersensitive_site synonym: "DHS" EXACT [] synonym: "DNAseI hypersensitive site" EXACT [] is_a: SO:0000322 ! nuclease_hypersensitive_site [Term] id: SO:0000686 name: translocation_element def: "A chromosomal translocation whereby the chromosomes carrying non-homologous centromeres may be recovered independently. These chromosomes are described as translocation elements. This occurs for some translocations, particularly but not exclusively, reciprocal translocations." [SO:ma] synonym: "translocation element" EXACT [] is_a: SO:1000044 ! chromosomal_translocation [Term] id: SO:0000687 name: deletion_junction def: "The space between two bases in a sequence which marks the position where a deletion has occurred." [SO:ke] subset: SOFA synonym: "deletion junction" EXACT [] is_a: SO:0000699 ! junction [Term] id: SO:0000688 name: golden_path def: "A set of subregions selected from sequence contigs which when concatenated form a nonredundant linear sequence." [SO:ls] subset: SOFA synonym: "golden path" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0000689 name: cDNA_match def: "A match against cDNA sequence." [SO:ke] subset: SOFA synonym: "cDNA match" EXACT [] is_a: SO:0000102 ! expressed_sequence_match [Term] id: SO:0000690 name: gene_with_polycistronic_transcript def: "A gene that encodes a polycistronic transcript." [SO:xp] synonym: "gene with polycistronic transcript" EXACT [] is_a: SO:0000704 ! gene relationship: transcribed_to SO:0000078 ! polycistronic_transcript [Term] id: SO:0000691 name: cleaved_initiator_methionine alt_id: BS:00067 def: "The initiator methionine that has been cleaved from a mature polypeptide sequence." [EBIBS:GAR] subset: biosapiens synonym: "cleaved initiator methionine" EXACT [] synonym: "init_met" RELATED [uniprot:feature_type] synonym: "initiator methionine" RELATED [] is_a: SO:0100011 ! cleaved_peptide_region [Term] id: SO:0000692 name: gene_with_dicistronic_transcript def: "A gene that encodes a dicistronic transcript." [SO:xp] synonym: "gene with dicistronic transcript" EXACT [] is_a: SO:0000690 ! gene_with_polycistronic_transcript relationship: transcribed_to SO:0000079 ! dicistronic_transcript [Term] id: SO:0000693 name: gene_with_recoded_mRNA def: "A gene that encodes an mRNA that is recoded." [SO:xp] synonym: "gene with recoded mRNA" EXACT [] is_a: SO:0001217 ! protein_coding_gene relationship: has_quality SO:0000881 ! recoded [Term] id: SO:0000694 name: SNP def: "SNPs are single base pair positions in genomic DNA at which different sequence alternatives exist in normal individuals in some population(s), wherein the least frequent variant has an abundance of 1% or greater." [SO:cb] subset: SOFA synonym: "single nucleotide polymorphism" EXACT [] is_a: SO:0001483 ! SNV [Term] id: SO:0000695 name: reagent def: "A sequence used in experiment." [SO:ke] comment: Requested by Lynn Crosby, jan 2006. subset: SOFA is_a: SO:0001409 ! biomaterial_region [Term] id: SO:0000696 name: oligo def: "A short oligonucleotide sequence, of length on the order of 10's of bases; either single or double stranded." [SO:ma] subset: SOFA synonym: "oligonucleotide" EXACT [] xref: http://en.wikipedia.org/wiki/Oligonucleotide "wiki" is_a: SO:0000695 ! reagent [Term] id: SO:0000697 name: gene_with_stop_codon_read_through def: "A gene that encodes a transcript with stop codon readthrough." [SO:xp] synonym: "gene with stop codon read through" EXACT [] is_a: SO:0000693 ! gene_with_recoded_mRNA relationship: has_part SO:0000883 ! stop_codon_read_through [Term] id: SO:0000698 name: gene_with_stop_codon_redefined_as_pyrrolysine def: "A gene encoding an mRNA that has the stop codon redefined as pyrrolysine." [SO:xp] synonym: "gene with stop codon redefined as pyrrolysine" EXACT [] is_a: SO:0000697 ! gene_with_stop_codon_read_through relationship: has_part SO:0000884 ! stop_codon_redefined_as_pyrrolysine [Term] id: SO:0000699 name: junction def: "A sequence_feature with an extent of zero." [SO:ke] comment: A junction is a boundary between regions. A boundary has an extent of zero. subset: SOFA synonym: "boundary" EXACT [] synonym: "breakpoint" EXACT [] is_a: SO:0000110 ! sequence_feature [Term] id: SO:0000700 name: remark def: "A comment about the sequence." [SO:ke] subset: SOFA is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000701 name: possible_base_call_error def: "A region of sequence where the validity of the base calling is questionable." [SO:ke] subset: SOFA synonym: "possible base call error" EXACT [] is_a: SO:0000413 ! sequence_difference [Term] id: SO:0000702 name: possible_assembly_error def: "A region of sequence where there may have been an error in the assembly." [SO:ke] subset: SOFA synonym: "possible assembly error" EXACT [] is_a: SO:0000413 ! sequence_difference [Term] id: SO:0000703 name: experimental_result_region def: "A region of sequence implicated in an experimental result." [SO:ke] subset: SOFA synonym: "experimental result region" EXACT [] is_a: SO:0000700 ! remark [Term] id: SO:0000704 name: gene def: "A region (or regions) that includes all of the sequence elements necessary to encode a functional transcript. A gene may include regulatory regions, transcribed regions and/or other functional sequence regions." [SO:immuno_workshop] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. A gene may be considered as a unit of inheritance. subset: SOFA xref: http://en.wikipedia.org/wiki/Gene "wiki" is_a: SO:0001411 ! biological_region relationship: member_of SO:0005855 ! gene_group [Term] id: SO:0000705 name: tandem_repeat def: "Two or more adjcent copies of a region (of length greater than 1)." [SO:ke] subset: SOFA synonym: "tandem repeat" EXACT [] xref: http://en.wikipedia.org/wiki/Tandem_repeat "wiki" xref: http://www.sci.sdsu.edu/~smaloy/Glossary/T.html is_a: SO:0000657 ! repeat_region [Term] id: SO:0000706 name: trans_splice_acceptor_site def: "The 3' splice site of the acceptor primary transcript." [SO:ke] comment: This region contains a polypyridine tract and AG dinucleotide in some organisms and is UUUCAG in C. elegans. subset: SOFA synonym: "3' trans splice site" RELATED [] synonym: "trans splice acceptor site" EXACT [] is_a: SO:0001420 ! trans_splice_site [Term] id: SO:0000707 name: trans_splice_donor_site def: "The 5' five prime splice site region of the donor RNA." [SO:ke] comment: SL RNA contains a donor site. synonym: "5 prime trans splice site" RELATED [] synonym: "trans splice donor site" EXACT [] synonym: "trans-splice donor site" EXACT [] is_a: SO:0001420 ! trans_splice_site [Term] id: SO:0000708 name: SL1_acceptor_site def: "A trans_splicing_acceptor_site which appends the 22nt SL1 RNA leader sequence to the 5' end of most mRNAs." [SO:nlw] synonym: "SL1 acceptor site" EXACT [] is_a: SO:0000706 ! trans_splice_acceptor_site [Term] id: SO:0000709 name: SL2_acceptor_site def: "A trans_splicing_acceptor_site which appends the 22nt SL2 RNA leader sequence to the 5' end of mRNAs. SL2 acceptor sites occur in genes in internal segments of polycistronic transcripts." [SO:nlw] synonym: "SL2 acceptor site" EXACT [] is_a: SO:0000706 ! trans_splice_acceptor_site [Term] id: SO:0000710 name: gene_with_stop_codon_redefined_as_selenocysteine def: "A gene encoding an mRNA that has the stop codon redefined as selenocysteine." [SO:xp] synonym: "gene with stop codon redefined as selenocysteine" EXACT [] is_a: SO:0000697 ! gene_with_stop_codon_read_through relationship: has_part SO:0000885 ! stop_codon_redefined_as_selenocysteine [Term] id: SO:0000711 name: gene_with_mRNA_recoded_by_translational_bypass def: "A gene with mRNA recoded by translational bypass." [SO:xp] synonym: "gene with mRNA recoded by translational bypass" EXACT [] is_a: SO:0000693 ! gene_with_recoded_mRNA relationship: has_quality SO:0000886 ! recoded_by_translational_bypass [Term] id: SO:0000712 name: gene_with_transcript_with_translational_frameshift def: "A gene encoding a transcript that has a translational frameshift." [SO:xp] synonym: "gene with transcript with translational frameshift" EXACT [] is_a: SO:0000693 ! gene_with_recoded_mRNA relationship: has_quality SO:0000887 ! translationally_frameshifted [Term] id: SO:0000713 name: DNA_motif def: "A motif that is active in the DNA form of the sequence." [SO:ke] synonym: "DNA motif" EXACT [] xref: http://en.wikipedia.org/wiki/DNA_motif "wiki" is_a: SO:0000714 ! nucleotide_motif [Term] id: SO:0000714 name: nucleotide_motif def: "A region of nucleotide sequence corresponding to a known motif." [SO:ke] subset: SOFA synonym: "nucleotide motif" EXACT [] is_a: SO:0001683 ! sequence_motif [Term] id: SO:0000715 name: RNA_motif def: "A motif that is active in RNA sequence." [SO:ke] subset: SOFA synonym: "RNA motif" EXACT [] is_a: SO:0000714 ! nucleotide_motif [Term] id: SO:0000716 name: dicistronic_mRNA def: "An mRNA that has the quality dicistronic." [SO:ke] synonym: "dicistronic mRNA" EXACT [] synonym: "dicistronic processed transcript" RELATED [] is_a: SO:0000079 ! dicistronic_transcript is_a: SO:0000634 ! polycistronic_mRNA relationship: has_quality SO:0000879 ! dicistronic [Term] id: SO:0000717 name: reading_frame def: "A nucleic acid sequence that when read as sequential triplets, has the potential of encoding a sequential string of amino acids. It need not contain the start or stop codon." [SGD:rb] comment: This term was added after a request by SGD. August 2004. Modified after SO meeting in Cambridge to not include start or stop. subset: SOFA synonym: "reading frame" EXACT [] xref: http://en.wikipedia.org/wiki/Reading_frame "wiki" is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000718 name: blocked_reading_frame def: "A reading_frame that is interrupted by one or more stop codons; usually identified through intergenomic sequence comparisons." [SGD:rb] comment: Term requested by Rama from SGD. synonym: "blocked reading frame" EXACT [] is_a: SO:0000717 ! reading_frame [Term] id: SO:0000719 name: ultracontig def: "An ordered and oriented set of scaffolds based on somewhat weaker sets of inferential evidence such as one set of mate pair reads together with supporting evidence from ESTs or location of markers from SNP or microsatellite maps, or cytogenetic localization of contained markers." [FB:WG] subset: SOFA synonym: "superscaffold" RELATED [] is_a: SO:0001876 ! partial_genomic_sequence_assembly [Term] id: SO:0000720 name: foreign_transposable_element def: "A transposable element that is foreign." [SO:ke] comment: requested by Michael on 19 Nov 2004. synonym: "foreign transposable element" EXACT [] is_a: SO:0000101 ! transposable_element relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000721 name: gene_with_dicistronic_primary_transcript def: "A gene that encodes a dicistronic primary transcript." [SO:xp] comment: Requested by Michael, 19 nov 2004. synonym: "gene with dicistronic primary transcript" EXACT [] is_a: SO:0000692 ! gene_with_dicistronic_transcript relationship: transcribed_to SO:1001197 ! dicistronic_primary_transcript [Term] id: SO:0000722 name: gene_with_dicistronic_mRNA def: "A gene that encodes a polycistronic mRNA." [SO:xp] comment: Requested by MA nov 19 2004. synonym: "gene with dicistronic mRNA" EXACT [] synonym: "gene with dicistronic processed transcript" EXACT [] is_a: SO:0000692 ! gene_with_dicistronic_transcript relationship: transcribed_to SO:0000716 ! dicistronic_mRNA [Term] id: SO:0000723 name: iDNA def: "Genomic sequence removed from the genome, as a normal event, by a process of recombination." [SO:ma] synonym: "intervening DNA" EXACT [] xref: http://en.wikipedia.org/wiki/IDNA "wiki" is_a: SO:0000298 ! recombination_feature [Term] id: SO:0000724 name: oriT def: "A region of a DNA molecule where transfer is initiated during the process of conjugation or mobilization." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "origin of transfer" EXACT [] xref: http://en.wikipedia.org/wiki/Origin_of_transfer "wiki" is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000725 name: transit_peptide alt_id: BS:00055 def: "The transit_peptide is a short region at the N-terminus of the peptide that directs the protein to an organelle (chloroplast, mitochondrion, microbody or cyanelle)." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: Added to bring SO inline with the embl ddbj genbank feature table. Old definition before biosapiens: The coding sequence for an N-terminal domain of a nuclear-encoded organellar protein. This domain is involved in post translational import of the protein into the organelle. subset: biosapiens subset: SOFA synonym: "signal" RELATED [] synonym: "transit" RELATED [uniprot:feature_type] synonym: "transit peptide" EXACT [] is_a: SO:0001527 ! peptide_localization_signal [Term] id: SO:0000726 name: repeat_unit def: "The simplest repeated component of a repeat region. A single repeat." [SO:ke] comment: Added to comply with the feature table. A single repeat. synonym: "repeat unit" EXACT [] xref: http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html is_a: SO:0001411 ! biological_region [Term] id: SO:0000727 name: CRM def: "A regulatory_region where more than 1 TF_binding_site together are regulatorily active." [SO:SG] comment: Requested by Stepen Grossmann Dec 2004. subset: SOFA synonym: "cis regulatory module" EXACT [] synonym: "TF module" EXACT [] is_a: SO:0001055 ! transcriptional_cis_regulatory_region relationship: has_part SO:0000235 ! TF_binding_site [Term] id: SO:0000728 name: intein def: "A region of a peptide that is able to excise itself and rejoin the remaining portions with a peptide bond." [SO:ke] comment: Intein-mediated protein splicing occurs after mRNA has been translated into a protein. synonym: "protein intron" RELATED [] xref: http://en.wikipedia.org/wiki/Intein "wiki" is_a: SO:0100011 ! cleaved_peptide_region [Term] id: SO:0000729 name: intein_containing def: "An attribute of protein-coding genes where the initial protein product contains an intein." [SO:ke] synonym: "intein containing" EXACT [] is_a: SO:0000010 ! protein_coding [Term] id: SO:0000730 name: gap def: "A gap in the sequence of known length. The unknown bases are filled in with N's." [SO:ke] subset: SOFA is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000353 ! sequence_assembly [Term] id: SO:0000731 name: fragmentary def: "An attribute to describe a feature that is incomplete." [SO:ke] comment: Term added because of request by MO people. synonym: "fragment" EXACT [] is_a: SO:0000905 ! status [Term] id: SO:0000732 name: predicted def: "An attribute describing an unverified region." [SO:ke] xref: http://en.wikipedia.org/wiki/Predicted "wiki" is_a: SO:0000905 ! status [Term] id: SO:0000733 name: feature_attribute def: "An attribute describing a located_sequence_feature." [SO:ke] synonym: "feature attribute" EXACT [] is_a: SO:0000400 ! sequence_attribute [Term] id: SO:0000734 name: exemplar_mRNA def: "An exemplar is a representative cDNA sequence for each gene. The exemplar approach is a method that usually involves some initial clustering into gene groups and the subsequent selection of a representative from each gene group." [http://mged.sourceforge.net/ontologies/MGEDontology.php] comment: Added for the MO people. synonym: "exemplar mRNA" EXACT [] is_a: SO:0000234 ! mRNA relationship: has_quality SO:0000864 ! exemplar [Term] id: SO:0000735 name: sequence_location synonym: "sequence location" EXACT [] is_a: SO:0000400 ! sequence_attribute [Term] id: SO:0000736 name: organelle_sequence synonym: "organelle sequence" EXACT [] is_a: SO:0000735 ! sequence_location [Term] id: SO:0000737 name: mitochondrial_sequence comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "mitochondrial sequence" EXACT [] is_a: SO:0000736 ! organelle_sequence [Term] id: SO:0000738 name: nuclear_sequence synonym: "nuclear sequence" EXACT [] is_a: SO:0000736 ! organelle_sequence [Term] id: SO:0000739 name: nucleomorphic_sequence synonym: "nucleomorphic sequence" EXACT [] is_a: SO:0000736 ! organelle_sequence [Term] id: SO:0000740 name: plastid_sequence synonym: "plastid sequence" EXACT [] is_a: SO:0000736 ! organelle_sequence [Term] id: SO:0000741 name: kinetoplast alt_id: SO:0000826 def: "A kinetoplast is an interlocked network of thousands of minicircles and tens of maxi circles, located near the base of the flagellum of some protozoan species." [PMID:8395055] synonym: "kinetoplast_chromosome" EXACT [] xref: http://en.wikipedia.org/wiki/Kinetoplast "wiki" is_a: SO:0001026 ! genome relationship: has_part SO:0000742 ! maxicircle relationship: has_part SO:0000980 ! minicircle [Term] id: SO:0000742 name: maxicircle alt_id: SO:0000827 def: "A maxicircle is a replicon, part of a kinetoplast, that contains open reading frames and replicates via a rolling circle method." [PMID:8395055] synonym: "maxicircle_chromosome" EXACT [] is_a: SO:0001235 ! replicon [Term] id: SO:0000743 name: apicoplast_sequence synonym: "apicoplast sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000744 name: chromoplast_sequence synonym: "chromoplast sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000745 name: chloroplast_sequence synonym: "chloroplast sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000746 name: cyanelle_sequence synonym: "cyanelle sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000747 name: leucoplast_sequence synonym: "leucoplast sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000748 name: proplastid_sequence synonym: "proplastid sequence" EXACT [] is_a: SO:0000740 ! plastid_sequence [Term] id: SO:0000749 name: plasmid_location synonym: "plasmid location" EXACT [] is_a: SO:0000735 ! sequence_location [Term] id: SO:0000750 name: amplification_origin def: "An origin_of_replication that is used for the amplification of a chromosomal nucleic acid sequence." [SO:ma] synonym: "amplification origin" EXACT [] is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000751 name: proviral_location synonym: "proviral location" EXACT [] is_a: SO:0000735 ! sequence_location [Term] id: SO:0000752 name: gene_group_regulatory_region subset: SOFA synonym: "gene group regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region relationship: member_of SO:0005855 ! gene_group [Term] id: SO:0000753 name: clone_insert def: "The region of sequence that has been inserted and is being propagated by the clone." [SO:ke] subset: SOFA synonym: "clone insert" EXACT [] is_a: SO:0000695 ! reagent relationship: part_of SO:0000151 ! clone [Term] id: SO:0000754 name: lambda_vector def: "The lambda bacteriophage is the vector for the linear lambda clone. The genes involved in the lysogenic pathway are removed from the from the viral DNA. Up to 25 kb of foreign DNA can then be inserted into the lambda genome." [ISBN:0-1767-2380-8] synonym: "lambda vector" EXACT [] is_a: SO:0000440 ! vector_replicon [Term] id: SO:0000755 name: plasmid_vector synonym: "plasmid vector" EXACT [] xref: http://en.wikipedia.org/wiki/Plasmid_vector#Vectors "wiki" is_a: SO:0000440 ! vector_replicon relationship: derives_from SO:0000155 ! plasmid [Term] id: SO:0000756 name: cDNA def: "DNA synthesized by reverse transcriptase using RNA as a template." [SO:ma] synonym: "complementary DNA" EXACT [] xref: http://en.wikipedia.org/wiki/CDNA "wiki" is_a: SO:0000352 ! DNA [Term] id: SO:0000757 name: single_stranded_cDNA synonym: "single strand cDNA" EXACT [] synonym: "single stranded cDNA" EXACT [] synonym: "single-strand cDNA" RELATED [] is_a: SO:0000756 ! cDNA [Term] id: SO:0000758 name: double_stranded_cDNA synonym: "double strand cDNA" RELATED [] synonym: "double stranded cDNA" EXACT [] synonym: "double-strand cDNA" RELATED [] is_a: SO:0000756 ! cDNA [Term] id: SO:0000759 name: plasmid_clone is_obsolete: true [Term] id: SO:0000760 name: YAC_clone is_obsolete: true [Term] id: SO:0000761 name: phagemid_clone is_obsolete: true [Term] id: SO:0000762 name: PAC_clone synonym: "P1_clone" RELATED [] is_obsolete: true [Term] id: SO:0000763 name: fosmid_clone is_obsolete: true [Term] id: SO:0000764 name: BAC_clone is_obsolete: true [Term] id: SO:0000765 name: cosmid_clone is_obsolete: true [Term] id: SO:0000766 name: pyrrolysyl_tRNA def: "A tRNA sequence that has a pyrrolysine anticodon, and a 3' pyrrolysine binding region." [SO:ke] synonym: "pyrrolysyl tRNA" EXACT [] synonym: "pyrrolysyl-transfer ribonucleic acid" EXACT [] synonym: "pyrrolysyl-transfer RNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0001178 ! pyrrolysine_tRNA_primary_transcript [Term] id: SO:0000767 name: clone_insert_start is_obsolete: true [Term] id: SO:0000768 name: episome def: "A plasmid that may integrate with a chromosome." [SO:ma] is_a: SO:0000155 ! plasmid [Term] id: SO:0000769 name: tmRNA_coding_piece def: "The region of a two-piece tmRNA that bears the reading frame encoding the proteolysis tag. The tmRNA gene undergoes circular permutation in some groups of bacteria. Processing of the transcripts from such a gene leaves the mature tmRNA in two pieces, base-paired together." [doi:10.1093/nar/gkh795, Indiana:kw, issn:1362-4962] comment: Added in response to comment from Kelly Williams from Indiana. Nov 2005. synonym: "tmRNA coding piece" EXACT [] is_a: SO:0000847 ! tmRNA_region [Term] id: SO:0000770 name: tmRNA_acceptor_piece def: "The acceptor region of a two-piece tmRNA that when mature is charged at its 3' end with alanine. The tmRNA gene undergoes circular permutation in some groups of bacteria; processing of the transcripts from such a gene leaves the mature tmRNA in two pieces, base-paired together." [doi:10.1093/nar/gkh795, Indiana:kw] comment: Added in response to Kelly Williams from Indiana. Date: Nov 2005. synonym: "tmRNA acceptor piece" EXACT [] is_a: SO:0000847 ! tmRNA_region [Term] id: SO:0000771 name: QTL def: "A quantitative trait locus (QTL) is a polymorphic locus which contains alleles that differentially affect the expression of a continuously distributed phenotypic trait. Usually it is a marker described by statistical association to quantitative variation in the particular phenotypic trait that is thought to be controlled by the cumulative action of alleles at multiple loci." [http://rgd.mcw.edu/tu/qtls/] comment: Added in respose to request by Simon Twigger November 14th 2005. synonym: "quantitative trait locus" EXACT [] is_a: SO:0001411 ! biological_region [Term] id: SO:0000772 name: genomic_island def: "A genomic island is an integrated mobile genetic element, characterized by size (over 10 Kb). It that has features that suggest a foreign origin. These can include nucleotide distribution (oligonucleotides signature, CG content etc.) that differs from the bulk of the chromosome and/or genes suggesting DNA mobility." [Phigo:at, SO:ke] comment: Genomic islands are transmissible elements characterized by large size (>10kb). synonym: "genomic island" EXACT [] xref: http://en.wikipedia.org/wiki/Genomic_island "wiki" is_a: SO:0001039 ! integrated_mobile_genetic_element [Term] id: SO:0000773 name: pathogenic_island def: "Mobile genetic elements that contribute to rapid changes in virulence potential. They are present on the genomes of pathogenic strains but absent from the genomes of non pathogenic members of the same or related species." [SO:ke] comment: Nature Reviews Microbiology 2, 414-424 (2004); doi:10.1038 micro 884 GENOMIC ISLANDS IN PATHOGENIC AND ENVIRONMENTAL MICROORGANISMS Ulrich Dobrindt, Bianca Hochhut, Ute Hentschel & Jorg Hacker. synonym: "pathogenic island" EXACT [] is_a: SO:0000772 ! genomic_island [Term] id: SO:0000774 name: metabolic_island def: "A transmissible element containing genes involved in metabolism, analogous to the pathogenicity islands of gram negative bacteria." [SO:ke] comment: Genes for phenolic compound degradation in Pseudomonas putida are found on metabolic islands. synonym: "metabolic island" EXACT [] is_a: SO:0000772 ! genomic_island [Term] id: SO:0000775 name: adaptive_island def: "An adaptive island is a genomic island that provides an adaptive advantage to the host." [SO:ke] comment: The iron-uptake ability of many pathogens are conveyed by adaptive islands. Nature Reviews Microbiology 2, 414-424 (2004); doi:10.1038 micro 884 GENOMIC ISLANDS IN PATHOGENIC AND ENVIRONMENTAL MICROORGANISMS Ulrich Dobrindt, Bianca Hochhut, Ute Hentschel & Jorg Hacker. synonym: "adaptive island" EXACT [] is_a: SO:0000772 ! genomic_island [Term] id: SO:0000776 name: symbiosis_island def: "A transmissible element containing genes involved in symbiosis, analogous to the pathogenicity islands of gram negative bacteria." [SO:ke] comment: Nitrogen fixation in Rhizobiaceae species is encoded by symbiosis islands. Evolution of rhizobia by acquisition of a 500-kb symbiosis island that integrates into a phe-tRNA gene. John T. Sullivan and Clive W. Ronso PNAS 1998 Apr 28 95 (9) 5145-5149. synonym: "symbiosis island" EXACT [] is_a: SO:0000772 ! genomic_island [Term] id: SO:0000777 name: pseudogenic_rRNA def: "A non functional descendent of an rRNA." [SO:ke] comment: Added Jan 2006 to allow the annotation of the pseudogenic rRNA by flybase. Non-functional is defined as its transcription is prevented due to one or more mutatations. subset: SOFA synonym: "pseudogenic rRNA" EXACT [] is_a: SO:0000462 ! pseudogenic_region [Term] id: SO:0000778 name: pseudogenic_tRNA def: "A non functional descendent of a tRNA." [SO:ke] comment: Added Jan 2006 to allow the annotation of the pseudogenic tRNA by flybase. Non-functional is defined as its transcription is prevented due to one or more mutatations. subset: SOFA synonym: "pseudogenic tRNA" EXACT [] is_a: SO:0000462 ! pseudogenic_region [Term] id: SO:0000779 name: engineered_episome def: "An episome that is engineered." [SO:xp] comment: Requested by Lynn Crosby Jan 2006. synonym: "engineered episome" EXACT [] is_a: SO:0000637 ! engineered_plasmid is_a: SO:0000768 ! episome relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000780 name: transposable_element_attribute comment: Added by KE Jan 2006 to capture the kinds of attributes of TEs is_obsolete: true [Term] id: SO:0000781 name: transgenic def: "Attribute describing sequence that has been integrated with foreign sequence." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000782 name: natural def: "An attribute describing a feature that occurs in nature." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000783 name: engineered def: "An attribute to describe a region that was modified in vitro." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000784 name: foreign def: "An attribute to describe a region from another species." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000785 name: cloned_region comment: Added in response to Lynn Crosby. A clone insert may be composed of many cloned regions. synonym: "cloned region" EXACT [] synonym: "cloned segment" EXACT [] is_a: SO:0000695 ! reagent relationship: part_of SO:0000753 ! clone_insert [Term] id: SO:0000786 name: reagent_attribute comment: Added jan 2006 by KE. synonym: "reagent attribute" EXACT [] is_obsolete: true [Term] id: SO:0000787 name: clone_attribute is_obsolete: true [Term] id: SO:0000788 name: cloned is_obsolete: true [Term] id: SO:0000789 name: validated def: "An attribute to describe a feature that has been proven." [SO:ke] is_a: SO:0000905 ! status [Term] id: SO:0000790 name: invalidated def: "An attribute describing a feature that is invalidated." [SO:ke] is_a: SO:0000905 ! status [Term] id: SO:0000791 name: cloned_genomic is_obsolete: true [Term] id: SO:0000792 name: cloned_cDNA is_obsolete: true [Term] id: SO:0000793 name: engineered_DNA is_obsolete: true [Term] id: SO:0000794 name: engineered_rescue_region def: "A rescue region that is engineered." [SO:xp] synonym: "engineered rescue fragment" EXACT [] synonym: "engineered rescue region" EXACT [] synonym: "engineered rescue segment" EXACT [] is_a: SO:0000411 ! rescue_region is_a: SO:0000804 ! engineered_region relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000795 name: rescue_mini_gene def: "A mini_gene that rescues." [SO:xp] synonym: "rescue mini gene" EXACT [] synonym: "rescue mini-gene" EXACT [] is_a: SO:0000815 ! mini_gene relationship: has_quality SO:0000814 ! rescue [Term] id: SO:0000796 name: transgenic_transposable_element def: "TE that has been modified in vitro, including insertion of DNA derived from a source other than the originating TE." [FB:mc] comment: Modified as requested by Lynn - FB. May 2007. synonym: "transgenic transposable element" EXACT [] is_a: SO:0000101 ! transposable_element relationship: derives_from SO:0000151 ! clone relationship: has_quality SO:0000781 ! transgenic [Term] id: SO:0000797 name: natural_transposable_element def: "TE that exists (or existed) in nature." [FB:mc] synonym: "natural transposable element" EXACT [] is_a: SO:0000101 ! transposable_element is_a: SO:0001038 ! extrachromosomal_mobile_genetic_element relationship: has_quality SO:0000782 ! natural [Term] id: SO:0000798 name: engineered_transposable_element def: "TE that has been modified by manipulations in vitro." [FB:mc] synonym: "engineered transposable element" EXACT [] is_a: SO:0000101 ! transposable_element is_a: SO:0000804 ! engineered_region relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000799 name: engineered_foreign_transposable_element def: "A transposable_element that is engineered and foreign." [FB:mc] synonym: "engineered foreign transposable element" EXACT [] is_a: SO:0000720 ! foreign_transposable_element is_a: SO:0000798 ! engineered_transposable_element is_a: SO:0000805 ! engineered_foreign_region relationship: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000800 name: assortment_derived_duplication def: "A multi-chromosome duplication aberration generated by reassortment of other aberration components." [FB:gm] synonym: "assortment derived duplication" EXACT [] is_a: SO:0001504 ! assortment_derived_variation [Term] id: SO:0000801 name: assortment_derived_deficiency_plus_duplication def: "A multi-chromosome aberration generated by reassortment of other aberration components; presumed to have a deficiency and a duplication." [FB:gm] synonym: "assortment derived deficiency plus duplication" EXACT [] is_a: SO:0001504 ! assortment_derived_variation [Term] id: SO:0000802 name: assortment_derived_deficiency def: "A multi-chromosome deficiency aberration generated by reassortment of other aberration components." [FB:gm] synonym: "assortment-derived deficiency" EXACT [] is_a: SO:0001504 ! assortment_derived_variation [Term] id: SO:0000803 name: assortment_derived_aneuploid def: "A multi-chromosome aberration generated by reassortment of other aberration components; presumed to have a deficiency or a duplication." [FB:gm] synonym: "assortment derived aneuploid" EXACT [] is_a: SO:0001504 ! assortment_derived_variation [Term] id: SO:0000804 name: engineered_region def: "A region that is engineered." [SO:xp] synonym: "construct" EXACT [] synonym: "engineered region" EXACT [] synonym: "engineered sequence" EXACT [] is_a: SO:0001409 ! biomaterial_region relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000805 name: engineered_foreign_region def: "A region that is engineered and foreign." [SO:xp] synonym: "engineered foreign region" EXACT [] is_a: SO:0000804 ! engineered_region relationship: has_quality SO:0000783 ! engineered relationship: has_quality SO:0000784 ! foreign [Term] id: SO:0000806 name: fusion is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000807 name: engineered_tag def: "A tag that is engineered." [SO:xp] synonym: "engineered tag" EXACT [] is_a: SO:0000324 ! tag is_a: SO:0000804 ! engineered_region relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000808 name: validated_cDNA_clone def: "A cDNA clone that has been validated." [SO:xp] synonym: "validated cDNA clone" EXACT [] is_a: SO:0000317 ! cDNA_clone relationship: has_quality SO:0000789 ! validated [Term] id: SO:0000809 name: invalidated_cDNA_clone def: "A cDNA clone that is invalid." [SO:xp] synonym: "invalidated cDNA clone" EXACT [] is_a: SO:0000317 ! cDNA_clone relationship: has_quality SO:0000790 ! invalidated [Term] id: SO:0000810 name: chimeric_cDNA_clone def: "A cDNA clone invalidated because it is chimeric." [SO:xp] synonym: "chimeric cDNA clone" EXACT [] is_a: SO:0000809 ! invalidated_cDNA_clone relationship: has_quality SO:0000362 ! invalidated_by_chimeric_cDNA [Term] id: SO:0000811 name: genomically_contaminated_cDNA_clone def: "A cDNA clone invalidated by genomic contamination." [SO:xp] synonym: "genomically contaminated cDNA clone" EXACT [] is_a: SO:0000809 ! invalidated_cDNA_clone relationship: has_quality SO:0000414 ! invalidated_by_genomic_contamination [Term] id: SO:0000812 name: polyA_primed_cDNA_clone def: "A cDNA clone invalidated by polyA priming." [SO:xp] synonym: "polyA primed cDNA clone" EXACT [] is_a: SO:0000809 ! invalidated_cDNA_clone relationship: has_quality SO:0000415 ! invalidated_by_genomic_polyA_primed_cDNA [Term] id: SO:0000813 name: partially_processed_cDNA_clone def: "A cDNA invalidated clone by partial processing." [SO:xp] synonym: "partially processed cDNA clone" EXACT [] is_a: SO:0000809 ! invalidated_cDNA_clone relationship: has_quality SO:0000416 ! invalidated_by_partial_processing [Term] id: SO:0000814 name: rescue def: "An attribute describing a region's ability, when introduced to a mutant organism, to re-establish (rescue) a phenotype." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000815 name: mini_gene def: "By definition, minigenes are short open-reading frames (ORF), usually encoding approximately 9 to 20 amino acids, which are expressed in vivo (as distinct from being synthesized as peptide or protein ex vivo and subsequently injected). The in vivo synthesis confers a distinct advantage: the expressed sequences can enter both antigen presentation pathways, MHC I (inducing CD8+ T- cells, which are usually cytotoxic T-lymphocytes (CTL)) and MHC II (inducing CD4+ T-cells, usually 'T-helpers' (Th)); and can encounter B-cells, inducing antibody responses. Three main vector approaches have been used to deliver minigenes: viral vectors, bacterial vectors and plasmid DNA." [PMID:15992143] synonym: "mini gene" EXACT [] is_a: SO:0000236 ! ORF [Term] id: SO:0000816 name: rescue_gene def: "A gene that rescues." [SO:xp] synonym: "rescue gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000814 ! rescue [Term] id: SO:0000817 name: wild_type def: "An attribute describing sequence with the genotype found in nature and/or standard laboratory stock." [SO:ke] synonym: "wild type" EXACT [] xref: http://en.wikipedia.org/wiki/Wild_type "wiki" xref: loinc:LA9658-1 "wild type" is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000818 name: wild_type_rescue_gene def: "A gene that rescues." [SO:xp] synonym: "wild type rescue gene" EXACT [] is_a: SO:0000816 ! rescue_gene relationship: has_quality SO:0000817 ! wild_type [Term] id: SO:0000819 name: mitochondrial_chromosome def: "A chromosome originating in a mitochondria." [SO:xp] synonym: "mitochondrial chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_origin SO:0000737 ! mitochondrial_sequence [Term] id: SO:0000820 name: chloroplast_chromosome def: "A chromosome originating in a chloroplast." [SO:xp] synonym: "chloroplast chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_origin SO:0000745 ! chloroplast_sequence [Term] id: SO:0000821 name: chromoplast_chromosome def: "A chromosome originating in a chromoplast." [SO:xp] synonym: "chromoplast chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_origin SO:0000744 ! chromoplast_sequence [Term] id: SO:0000822 name: cyanelle_chromosome def: "A chromosome originating in a cyanelle." [SO:xp] synonym: "cyanelle chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_origin SO:0000746 ! cyanelle_sequence [Term] id: SO:0000823 name: leucoplast_chromosome def: "A chromosome with origin in a leucoplast." [SO:xp] synonym: "leucoplast chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_origin SO:0000747 ! leucoplast_sequence [Term] id: SO:0000824 name: macronuclear_chromosome def: "A chromosome originating in a macronucleus." [SO:xp] synonym: "macronuclear chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_origin SO:0000083 ! macronuclear_sequence [Term] id: SO:0000825 name: micronuclear_chromosome def: "A chromosome originating in a micronucleus." [SO:xp] synonym: "micronuclear chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_origin SO:0000084 ! micronuclear_sequence [Term] id: SO:0000828 name: nuclear_chromosome def: "A chromosome originating in a nucleus." [SO:xp] synonym: "nuclear chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_origin SO:0000738 ! nuclear_sequence [Term] id: SO:0000829 name: nucleomorphic_chromosome def: "A chromosome originating in a nucleomorph." [SO:xp] synonym: "nucleomorphic chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_origin SO:0000739 ! nucleomorphic_sequence [Term] id: SO:0000830 name: chromosome_part def: "A region of a chromosome." [SO:ke] comment: This is a manufactured term, that serves the purpose of allow the parts of a chromosome to have an is_a path to the root. subset: SOFA synonym: "chromosome part" EXACT [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000340 ! chromosome [Term] id: SO:0000831 name: gene_member_region def: "A region of a gene." [SO:ke] comment: A manufactured term used to allow the parts of a gene to have an is_a path to the root. subset: SOFA synonym: "gene member region" EXACT [] is_a: SO:0001411 ! biological_region relationship: member_of SO:0000704 ! gene [Term] id: SO:0000832 name: promoter_region def: "A region of sequence which is part of a promoter." [SO:ke] comment: This is a manufactured term to allow the parts of promoter to have an is_a path back to the root. is_obsolete: true [Term] id: SO:0000833 name: transcript_region def: "A region of a transcript." [SO:ke] comment: This term was added to provide a grouping term for the region parts of transcript, thus giving them an is_a path back to the root. subset: SOFA synonym: "transcript region" EXACT [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000673 ! transcript [Term] id: SO:0000834 name: mature_transcript_region def: "A region of a mature transcript." [SO:ke] comment: A manufactured term to collect together the parts of a mature transcript and give them an is_a path to the root. subset: SOFA synonym: "mature transcript region" EXACT [] is_a: SO:0000833 ! transcript_region [Term] id: SO:0000835 name: primary_transcript_region def: "A part of a primary transcript." [SO:ke] comment: This term was added to provide a grouping term for the region parts of primary_transcript, thus giving them an is_a path back to the root. subset: SOFA synonym: "primary transcript region" EXACT [] is_a: SO:0000833 ! transcript_region relationship: part_of SO:0000185 ! primary_transcript [Term] id: SO:0000836 name: mRNA_region def: "A region of an mRNA." [SO:cb] comment: This term was added to provide a grouping term for the region parts of mRNA, thus giving them an is_a path back to the root. subset: SOFA synonym: "mRNA region" EXACT [] is_a: SO:0000834 ! mature_transcript_region relationship: part_of SO:0000234 ! mRNA [Term] id: SO:0000837 name: UTR_region def: "A region of UTR." [SO:ke] comment: A region of UTR. This term is a grouping term to allow the parts of UTR to have an is_a path to the root. subset: SOFA synonym: "UTR region" EXACT [] is_a: SO:0000836 ! mRNA_region [Term] id: SO:0000838 name: rRNA_primary_transcript_region def: "A region of an rRNA primary transcript." [SO:ke] comment: To allow transcribed_spacer_region to have a path to the root. synonym: "rRNA primary transcript region" EXACT [] is_a: SO:0000835 ! primary_transcript_region relationship: part_of SO:0000209 ! rRNA_primary_transcript [Term] id: SO:0000839 name: polypeptide_region alt_id: BS:00124 alt_id: BS:00331 def: "Biological sequence region that can be assigned to a specific subsequence of a polypeptide." [SO:GAR, SO:ke] comment: Added to allow the polypeptide regions to have is_a paths back to the root. subset: biosapiens subset: SOFA synonym: "positional" RELATED [] synonym: "positional polypeptide feature" RELATED [] synonym: "region" NARROW [uniprot:feature_type] synonym: "region or site annotation" RELATED [] synonym: "site" NARROW [uniprot:feature_type] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000104 ! polypeptide [Term] id: SO:0000840 name: repeat_component def: "A region of a repeated sequence." [SO:ke] comment: A manufactured to group the parts of repeats, to give them an is_a path back to the root. synonym: "repeat component" EXACT [] is_a: SO:0001412 ! topologically_defined_region [Term] id: SO:0000841 name: spliceosomal_intron_region def: "A region within an intron." [SO:ke] comment: A terms added to allow the parts of introns to have is_a paths to the root. subset: SOFA synonym: "spliceosomal intron region" EXACT [] is_a: SO:0000835 ! primary_transcript_region relationship: part_of SO:0000662 ! spliceosomal_intron [Term] id: SO:0000842 name: gene_component_region subset: SOFA synonym: "gene component region" EXACT [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000704 ! gene [Term] id: SO:0000843 name: bacterial_RNApol_promoter_region def: "A region which is part of a bacterial RNA polymerase promoter." [SO:ke] comment: This is a manufactured term to allow the parts of bacterial_RNApol_promoter to have an is_a path back to the root. is_obsolete: true [Term] id: SO:0000844 name: RNApol_II_promoter_region def: "A region of sequence which is a promoter for RNA polymerase II." [SO:ke] comment: This is a manufactured term to allow the parts of RNApol_II_promoter to have an is_a path back to the root. is_obsolete: true [Term] id: SO:0000845 name: RNApol_III_promoter_type_1_region def: "A region of sequence which is a promoter for RNA polymerase III type 1." [SO:ke] comment: This is a manufactured term to allow the parts of RNApol_III_promoter_type_1 to have an is_a path back to the root. is_obsolete: true [Term] id: SO:0000846 name: RNApol_III_promoter_type_2_region def: "A region of sequence which is a promoter for RNA polymerase III type 2." [SO:ke] comment: This is a manufactured term to allow the parts of RNApol_III_promoter_type_2 to have an is_a path back to the root. is_obsolete: true [Term] id: SO:0000847 name: tmRNA_region def: "A region of a tmRNA." [SO:cb] comment: This term was added to provide a grouping term for the region parts of tmRNA, thus giving them an is_a path back to the root. synonym: "tmRNA region" EXACT [] is_a: SO:0000834 ! mature_transcript_region relationship: part_of SO:0000584 ! tmRNA [Term] id: SO:0000848 name: LTR_component synonym: "long term repeat component" EXACT [] synonym: "LTR component" EXACT [] is_a: SO:0000840 ! repeat_component relationship: part_of SO:0000286 ! long_terminal_repeat [Term] id: SO:0000849 name: three_prime_LTR_component synonym: "3' long terminal repeat component" EXACT [] synonym: "three prime LTR component" EXACT [] is_a: SO:0000848 ! LTR_component relationship: part_of SO:0000426 ! three_prime_LTR [Term] id: SO:0000850 name: five_prime_LTR_component synonym: "5' long term repeat component" EXACT [] synonym: "five prime LTR component" EXACT [] is_a: SO:0000848 ! LTR_component relationship: part_of SO:0000425 ! five_prime_LTR [Term] id: SO:0000851 name: CDS_region def: "A region of a CDS." [SO:cb] subset: SOFA synonym: "CDS region" EXACT [] is_a: SO:0000836 ! mRNA_region relationship: part_of SO:0000316 ! CDS [Term] id: SO:0000852 name: exon_region def: "A region of an exon." [RSC:cb] subset: SOFA synonym: "exon region" EXACT [] is_a: SO:0000833 ! transcript_region relationship: part_of SO:0000147 ! exon [Term] id: SO:0000853 name: homologous_region def: "A region that is homologous to another region." [SO:ke] synonym: "homolog" EXACT [] synonym: "homologous region" EXACT [] synonym: "homologue" EXACT [] xref: http://en.wikipedia.org/wiki/Homology_(biology) "wiki" is_a: SO:0000330 ! conserved_region relationship: has_quality SO:0000857 ! homologous [Term] id: SO:0000854 name: paralogous_region def: "A homologous_region that is paralogous to another region." [SO:ke] comment: A term to be used in conjunction with the paralogous_to relationship. synonym: "paralog" EXACT [] synonym: "paralogous region" EXACT [] synonym: "paralogue" EXACT [] xref: http://en.wikipedia.org/wiki/Paralog#Paralogy "wiki" is_a: SO:0000853 ! homologous_region relationship: has_quality SO:0000859 ! paralogous [Term] id: SO:0000855 name: orthologous_region def: "A homologous_region that is orthologous to another region." [SO:ke] comment: This term should be used in conjunction with the similarity relationships defined in SO. synonym: "ortholog" EXACT [] synonym: "orthologous region" EXACT [] synonym: "orthologue" EXACT [] xref: http://en.wikipedia.org/wiki/Ortholog#Orthology "wiki" is_a: SO:0000853 ! homologous_region relationship: has_quality SO:0000858 ! orthologous [Term] id: SO:0000856 name: conserved is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000857 name: homologous def: "Similarity due to common ancestry." [SO:ke] is_a: SO:0000856 ! conserved [Term] id: SO:0000858 name: orthologous def: "An attribute describing a kind of homology where divergence occured after a speciation event." [SO:ke] is_a: SO:0000857 ! homologous [Term] id: SO:0000859 name: paralogous def: "An attribute describing a kind of homology where divergence occurred after a duplication event." [SO:ke] is_a: SO:0000857 ! homologous [Term] id: SO:0000860 name: syntenic def: "Attribute describing sequence regions occurring in same order on chromosome of different species." [SO:ke] xref: http://en.wikipedia.org/wiki/Syntenic "wiki" is_a: SO:0000856 ! conserved [Term] id: SO:0000861 name: capped_primary_transcript def: "A primary transcript that is capped." [SO:xp] synonym: "capped primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript relationship: adjacent_to SO:0000581 ! cap relationship: has_quality SO:0000146 ! capped [Term] id: SO:0000862 name: capped_mRNA def: "An mRNA that is capped." [SO:xp] synonym: "capped mRNA" EXACT [] is_a: SO:0000234 ! mRNA relationship: adjacent_to SO:0000581 ! cap relationship: has_quality SO:0000146 ! capped [Term] id: SO:0000863 name: mRNA_attribute def: "An attribute describing an mRNA feature." [SO:ke] synonym: "mRNA attribute" EXACT [] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000864 name: exemplar def: "An attribute describing a sequence is representative of a class of similar sequences." [SO:ke] is_a: SO:0000863 ! mRNA_attribute [Term] id: SO:0000865 name: frameshift def: "An attribute describing a sequence that contains a mutation involving the deletion or insertion of one or more bases, where this number is not divisible by 3." [SO:ke] xref: http://en.wikipedia.org/wiki/Frameshift "wiki" is_a: SO:0000863 ! mRNA_attribute [Term] id: SO:0000866 name: minus_1_frameshift def: "A frameshift caused by deleting one base." [SO:ke] synonym: "minus 1 frameshift" EXACT [] is_a: SO:0000865 ! frameshift [Term] id: SO:0000867 name: minus_2_frameshift def: "A frameshift caused by deleting two bases." [SO:ke] synonym: "minus 2 frameshift" EXACT [] is_a: SO:0000865 ! frameshift [Term] id: SO:0000868 name: plus_1_frameshift def: "A frameshift caused by inserting one base." [SO:ke] synonym: "plus 1 frameshift" EXACT [] is_a: SO:0000865 ! frameshift [Term] id: SO:0000869 name: plus_2_framshift def: "A frameshift caused by inserting two bases." [SO:ke] synonym: "plus 2 framshift" EXACT [] is_a: SO:0000865 ! frameshift [Term] id: SO:0000870 name: trans_spliced def: "An attribute describing transcript sequence that is created by splicing exons from diferent genes." [SO:ke] synonym: "trans-spliced" EXACT [] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000871 name: polyadenylated_mRNA def: "An mRNA that is polyadenylated." [SO:xp] synonym: "polyadenylated mRNA" EXACT [] is_a: SO:0000234 ! mRNA relationship: adjacent_to SO:0000610 ! polyA_sequence relationship: has_quality SO:0000246 ! polyadenylated [Term] id: SO:0000872 name: trans_spliced_mRNA def: "An mRNA that is trans-spliced." [SO:xp] synonym: "trans-spliced mRNA" EXACT [] is_a: SO:0000234 ! mRNA is_a: SO:0000479 ! trans_spliced_transcript relationship: adjacent_to SO:0000636 ! spliced_leader_RNA relationship: has_quality SO:0000870 ! trans_spliced [Term] id: SO:0000873 name: edited_transcript def: "A transcript that is edited." [SO:ke] synonym: "edited transcript" EXACT [] is_a: SO:0000673 ! transcript relationship: guided_by SO:0000602 ! guide_RNA relationship: has_part SO:0000977 ! anchor_binding_site relationship: has_quality SO:0000116 ! edited [Term] id: SO:0000874 name: edited_transcript_by_A_to_I_substitution def: "A transcript that has been edited by A to I substitution." [SO:ke] synonym: "edited transcript by A to I substitution" EXACT [] is_a: SO:0000873 ! edited_transcript [Term] id: SO:0000875 name: bound_by_protein def: "An attribute describing a sequence that is bound by a protein." [SO:ke] synonym: "bound by protein" EXACT [] is_a: SO:0000277 ! bound_by_factor [Term] id: SO:0000876 name: bound_by_nucleic_acid def: "An attribute describing a sequence that is bound by a nucleic acid." [SO:ke] synonym: "bound by nucleic acid" EXACT [] is_a: SO:0000277 ! bound_by_factor [Term] id: SO:0000877 name: alternatively_spliced def: "An attribute describing a situation where a gene may encode for more than 1 transcript." [SO:ke] synonym: "alternatively spliced" EXACT [] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000878 name: monocistronic def: "An attribute describing a sequence that contains the code for one gene product." [SO:ke] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000879 name: dicistronic def: "An attribute describing a sequence that contains the code for two gene products." [SO:ke] is_a: SO:0000880 ! polycistronic [Term] id: SO:0000880 name: polycistronic def: "An attribute describing a sequence that contains the code for more than one gene product." [SO:ke] is_a: SO:0000237 ! transcript_attribute [Term] id: SO:0000881 name: recoded def: "An attribute describing an mRNA sequence that has been reprogrammed at translation, causing localized alterations." [SO:ke] is_a: SO:0000863 ! mRNA_attribute [Term] id: SO:0000882 name: codon_redefined def: "An attribute describing the alteration of codon meaning." [SO:ke] synonym: "codon redefined" EXACT [] is_a: SO:0000881 ! recoded [Term] id: SO:0000883 name: stop_codon_read_through def: "A stop codon redefined to be a new amino acid." [SO:ke] synonym: "stop codon read through" EXACT [] synonym: "stop codon readthrough" RELATED [] is_a: SO:0000145 ! recoded_codon [Term] id: SO:0000884 name: stop_codon_redefined_as_pyrrolysine def: "A stop codon redefined to be the new amino acid, pyrrolysine." [SO:ke] synonym: "stop codon redefined as pyrrolysine" EXACT [] is_a: SO:0000883 ! stop_codon_read_through [Term] id: SO:0000885 name: stop_codon_redefined_as_selenocysteine def: "A stop codon redefined to be the new amino acid, selenocysteine." [SO:ke] synonym: "stop codon redefined as selenocysteine" EXACT [] is_a: SO:0000883 ! stop_codon_read_through [Term] id: SO:0000886 name: recoded_by_translational_bypass def: "Recoded mRNA where a block of nucleotides is not translated." [SO:ke] synonym: "recoded by translational bypass" EXACT [] is_a: SO:0000881 ! recoded [Term] id: SO:0000887 name: translationally_frameshifted def: "Recoding by frameshifting a particular site." [SO:ke] synonym: "translationally frameshifted" EXACT [] is_a: SO:0000881 ! recoded [Term] id: SO:0000888 name: maternally_imprinted_gene def: "A gene that is maternally_imprinted." [SO:xp] synonym: "maternally imprinted gene" EXACT [] is_a: SO:0000898 ! epigenetically_modified_gene relationship: has_quality SO:0000135 ! maternally_imprinted [Term] id: SO:0000889 name: paternally_imprinted_gene def: "A gene that is paternally imprinted." [SO:xp] synonym: "paternally imprinted gene" EXACT [] is_a: SO:0000898 ! epigenetically_modified_gene relationship: has_quality SO:0000136 ! paternally_imprinted [Term] id: SO:0000890 name: post_translationally_regulated_gene def: "A gene that is post translationally regulated." [SO:xp] synonym: "post translationally regulated gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000130 ! post_translationally_regulated [Term] id: SO:0000891 name: negatively_autoregulated_gene def: "A gene that is negatively autoreguated." [SO:xp] synonym: "negatively autoregulated gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000473 ! negatively_autoregulated [Term] id: SO:0000892 name: positively_autoregulated_gene def: "A gene that is positively autoregulated." [SO:xp] synonym: "positively autoregulated gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000475 ! positively_autoregulated [Term] id: SO:0000893 name: silenced def: "An attribute describing an epigenetic process where a gene is inactivated at transcriptional or translational level." [SO:ke] xref: http://en.wikipedia.org/wiki/Silenced "wiki" is_a: SO:0000126 ! transcriptionally_repressed [Term] id: SO:0000894 name: silenced_by_DNA_modification def: "An attribute describing an epigenetic process where a gene is inactivated by DNA modifications, resulting in repression of transcription." [SO:ke] synonym: "silenced by DNA modification" EXACT [] is_a: SO:0000893 ! silenced [Term] id: SO:0000895 name: silenced_by_DNA_methylation def: "An attribute describing an epigenetic process where a gene is inactivated by DNA methylation, resulting in repression of transcription." [SO:ke] synonym: "silenced by DNA methylation" EXACT [] is_a: SO:0000894 ! silenced_by_DNA_modification [Term] id: SO:0000896 name: translationally_regulated_gene def: "A gene that is translationally regulated." [SO:xp] synonym: "translationally regulated gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000131 ! translationally_regulated [Term] id: SO:0000897 name: allelically_excluded_gene def: "A gene that is allelically_excluded." [SO:xp] synonym: "allelically excluded gene" EXACT [] is_a: SO:0000898 ! epigenetically_modified_gene relationship: has_quality SO:0000137 ! allelically_excluded [Term] id: SO:0000898 name: epigenetically_modified_gene def: "A gene that is epigenetically modified." [SO:ke] synonym: "epigenetically modified gene" EXACT [] is_a: SO:0000704 ! gene is_a: SO:0001720 ! epigenetically_modified_region relationship: has_quality SO:0000133 ! epigenetically_modified [Term] id: SO:0000899 name: nuclear_mitochondrial def: "An attribute describing a nuclear pseudogene of a mitochndrial gene." [SO:ke] synonym: "nuclear mitochondrial" EXACT [] is_obsolete: true [Term] id: SO:0000900 name: processed def: "An attribute describing a pseudogene where by an mRNA was retrotransposed. The mRNA sequence is transcribed back into the genome, lacking introns and promotors, but often including a polyA tail." [SO:ke] is_obsolete: true [Term] id: SO:0000901 name: unequally_crossed_over def: "An attribute describing a pseudogene that was created by tandem duplication and unequal crossing over during recombination." [SO:ke] synonym: "unequally crossed over" EXACT [] is_obsolete: true [Term] id: SO:0000902 name: transgene def: "A transgene is a gene that has been transferred naturally or by any of a number of genetic engineering techniques from one organism to another." [SO:xp] xref: http://en.wikipedia.org/wiki/Transgene "wiki" is_a: SO:0000704 ! gene relationship: has_quality SO:0000781 ! transgenic [Term] id: SO:0000903 name: endogenous_retroviral_sequence synonym: "endogenous retroviral sequence" EXACT [] is_a: SO:0000751 ! proviral_location [Term] id: SO:0000904 name: rearranged_at_DNA_level def: "An attribute to describe the sequence of a feature, where the DNA is rearranged." [SO:ke] synonym: "rearranged at DNA level" EXACT [] is_a: SO:0000133 ! epigenetically_modified [Term] id: SO:0000905 name: status def: "An attribute describing the status of a feature, based on the available evidence." [SO:ke] comment: This term is the hypernym of attributes and should not be annotated to. is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000906 name: independently_known def: "Attribute to describe a feature that is independently known - not predicted." [SO:ke] synonym: "independently known" EXACT [] is_a: SO:0000905 ! status [Term] id: SO:0000907 name: supported_by_sequence_similarity def: "An attribute to describe a feature that has been predicted using sequence similarity techniques." [SO:ke] synonym: "supported by sequence similarity" EXACT [] is_a: SO:0000732 ! predicted [Term] id: SO:0000908 name: supported_by_domain_match def: "An attribute to describe a feature that has been predicted using sequence similarity of a known domain." [SO:ke] synonym: "supported by domain match" EXACT [] is_a: SO:0000907 ! supported_by_sequence_similarity [Term] id: SO:0000909 name: supported_by_EST_or_cDNA def: "An attribute to describe a feature that has been predicted using sequence similarity to EST or cDNA data." [SO:ke] synonym: "supported by EST or cDNA" EXACT [] is_a: SO:0000907 ! supported_by_sequence_similarity [Term] id: SO:0000910 name: orphan is_a: SO:0000732 ! predicted [Term] id: SO:0000911 name: predicted_by_ab_initio_computation def: "An attribute describing a feature that is predicted by a computer program that did not rely on sequence similarity." [SO:ke] synonym: "predicted by ab initio computation" EXACT [] is_a: SO:0000732 ! predicted [Term] id: SO:0000912 name: asx_turn alt_id: BS:00203 def: "A motif of three consecutive residues and one H-bond in which: residue(i) is Aspartate or Asparagine (Asx), the side-chain O of residue(i) is H-bonded to the main-chain NH of residue(i+2)." [http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx turn" EXACT [] is_a: SO:0001128 ! polypeptide_turn_motif [Term] id: SO:0000913 name: cloned_cDNA_insert def: "A clone insert made from cDNA." [SO:xp] synonym: "cloned cDNA insert" EXACT [] is_a: SO:0000753 ! clone_insert relationship: has_quality SO:0000756 ! cDNA [Term] id: SO:0000914 name: cloned_genomic_insert def: "A clone insert made from genomic DNA." [SO:xp] synonym: "cloned genomic insert" EXACT [] is_a: SO:0000753 ! clone_insert relationship: has_quality SO:0000991 ! genomic_DNA [Term] id: SO:0000915 name: engineered_insert def: "A clone insert that is engineered." [SO:xp] synonym: "engineered insert" EXACT [] is_a: SO:0000753 ! clone_insert is_a: SO:0000804 ! engineered_region relationship: has_quality SO:0000783 ! engineered [Term] id: SO:0000916 name: edit_operation synonym: "edit operation" EXACT [] is_obsolete: true [Term] id: SO:0000917 name: insert_U def: "An edit to insert a U." [SO:ke] comment: The insertion and deletion of uridine (U) residues, usually within coding regions of mRNA transcripts of cryptogenes in the mitochondrial genome of kinetoplastid protozoa. synonym: "insert U" EXACT [] is_obsolete: true [Term] id: SO:0000918 name: delete_U def: "An edit to delete a uridine." [SO:ke] comment: The insertion and deletion of uridine (U) residues, usually within coding regions of mRNA transcripts of cryptogenes in the mitochondrial genome of kinetoplastid protozoa. synonym: "delete U" EXACT [] is_obsolete: true [Term] id: SO:0000919 name: substitute_A_to_I def: "An edit to substitute an I for an A." [SO:ke] synonym: "substitute A to I" EXACT [] is_obsolete: true [Term] id: SO:0000920 name: insert_C def: "An edit to insert a cytidine." [SO:ke] synonym: "insert C" EXACT [] is_obsolete: true [Term] id: SO:0000921 name: insert_dinucleotide def: "An edit to insert a dinucleotide." [SO:ke] synonym: "insert dinucleotide" EXACT [] is_obsolete: true [Term] id: SO:0000922 name: substitute_C_to_U def: "An edit to substitute an U for a C." [SO:ke] synonym: "substitute C to U" EXACT [] is_obsolete: true [Term] id: SO:0000923 name: insert_G def: "An edit to insert a G." [SO:ke] synonym: "insert G" EXACT [] is_obsolete: true [Term] id: SO:0000924 name: insert_GC def: "An edit to insert a GC dinucleotide." [SO:ke] comment: The type of RNA editing found in the mitochondria of Myxomycota, characterized by the insertion of mono- and dinucleotides in RNAs relative to their mtDNA template and in addition, C to U base conversion. The most common mononucleotide insertion is cytidine, although a number of uridine mononucleotides are inserted at specific sites. Adenine and guanine have not been observed in mononucleotide insertions. Five different dinucleotide insertions have been observed, GC, GU, CU, AU and AA. Both mono- and dinucleotide insertions create open reading frames in mRNA and contribute to highly conserved structural features of rRNAs and tRNAs. synonym: "insert GC" EXACT [] is_obsolete: true [Term] id: SO:0000925 name: insert_GU def: "An edit to insert a GU dinucleotide." [SO:ke] comment: The type of RNA editing found in the mitochondria of Myxomycota, characterized by the insertion of mono- and dinucleotides in RNAs relative to their mtDNA template and in addition, C to U base conversion. The most common mononucleotide insertion is cytidine, although a number of uridine mononucleotides are inserted at specific sites. Adenine and guanine have not been observed in mononucleotide insertions. Five different dinucleotide insertions have been observed, GC, GU, CU, AU and AA. Both mono- and dinucleotide insertions create open reading frames in mRNA and contribute to highly conserved structural features of rRNAs and tRNAs. synonym: "insert GU" EXACT [] is_obsolete: true [Term] id: SO:0000926 name: insert_CU def: "An edit to insert a CU dinucleotide." [SO:ke] comment: The type of RNA editing found in the mitochondria of Myxomycota, characterized by the insertion of mono- and dinucleotides in RNAs relative to their mtDNA template and in addition, C to U base conversion. The most common mononucleotide insertion is cytidine, although a number of uridine mononucleotides are inserted at specific sites. Adenine and guanine have not been observed in mononucleotide insertions. Five different dinucleotide insertions have been observed, GC, GU, CU, AU and AA. Both mono- and dinucleotide insertions create open reading frames in mRNA and contribute to highly conserved structural features of rRNAs and tRNAs. synonym: "insert CU" EXACT [] is_obsolete: true [Term] id: SO:0000927 name: insert_AU def: "An edit to insert a AU dinucleotide." [SO:ke] comment: The type of RNA editing found in the mitochondria of Myxomycota, characterized by the insertion of mono- and dinucleotides in RNAs relative to their mtDNA template and in addition, C to U base conversion. The most common mononucleotide insertion is cytidine, although a number of uridine mononucleotides are inserted at specific sites. Adenine and guanine have not been observed in mononucleotide insertions. Five different dinucleotide insertions have been observed, GC, GU, CU, AU and AA. Both mono- and dinucleotide insertions create open reading frames in mRNA and contribute to highly conserved structural features of rRNAs and tRNAs. synonym: "insert AU" EXACT [] is_obsolete: true [Term] id: SO:0000928 name: insert_AA def: "An edit to insert a AA dinucleotide." [SO:ke] comment: The type of RNA editing found in the mitochondria of Myxomycota, characterized by the insertion of mono- and dinucleotides in RNAs relative to their mtDNA template and in addition, C to U base conversion. The most common mononucleotide insertion is cytidine, although a number of uridine mononucleotides are inserted at specific sites. Adenine and guanine have not been observed in mononucleotide insertions. Five different dinucleotide insertions have been observed, GC, GU, CU, AU and AA. Both mono- and dinucleotide insertions create open reading frames in mRNA and contribute to highly conserved structural features of rRNAs and tRNAs. synonym: "insert AA" EXACT [] is_obsolete: true [Term] id: SO:0000929 name: edited_mRNA def: "An mRNA that is edited." [SO:xp] synonym: "edited mRNA" EXACT [] is_a: SO:0000234 ! mRNA is_a: SO:0000873 ! edited_transcript relationship: has_quality SO:0000116 ! edited [Term] id: SO:0000930 name: guide_RNA_region def: "A region of guide RNA." [SO:ma] synonym: "guide RNA region" EXACT [] is_a: SO:0000834 ! mature_transcript_region relationship: part_of SO:0000602 ! guide_RNA [Term] id: SO:0000931 name: anchor_region def: "A region of a guide_RNA that base-pairs to a target mRNA." [SO:jk] synonym: "anchor region" EXACT [] is_a: SO:0000930 ! guide_RNA_region [Term] id: SO:0000932 name: pre_edited_mRNA synonym: "pre-edited mRNA" EXACT [] is_a: SO:0000120 ! protein_coding_primary_transcript [Term] id: SO:0000933 name: intermediate def: "An attribute to describe a feature between stages of processing." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000934 name: miRNA_target_site def: "A miRNA target site is a binding site where the molecule is a micro RNA." [FB:cds] synonym: "miRNA target site" EXACT [] is_a: SO:0001655 ! nucleotide_binding_site [Term] id: SO:0000935 name: edited_CDS def: "A CDS that is edited." [SO:xp] synonym: "edited CDS" EXACT [] is_a: SO:0000316 ! CDS relationship: has_quality SO:0000116 ! edited [Term] id: SO:0000936 name: vertebrate_immunoglobulin_T_cell_receptor_rearranged_segment synonym: "vertebrate immunoglobulin T cell receptor rearranged segment" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000937 name: vertebrate_immune_system_feature is_obsolete: true [Term] id: SO:0000938 name: vertebrate_immunoglobulin_T_cell_receptor_rearranged_gene_cluster synonym: "vertebrate immunoglobulin T cell receptor rearranged gene cluster" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000939 name: vertebrate_immune_system_gene_recombination_signal_feature synonym: "vertebrate immune system gene recombination signal feature" EXACT [] is_a: SO:0000301 ! vertebrate_immune_system_gene_recombination_feature [Term] id: SO:0000940 name: recombinationally_rearranged synonym: "recombinationally rearranged" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000941 name: recombinationally_rearranged_vertebrate_immune_system_gene def: "A recombinationally rearranged gene of the vertebrate immune system." [SO:xp] synonym: "recombinationally rearranged vertebrate immune system gene" EXACT [] is_a: SO:0000456 ! recombinationally_rearranged_gene [Term] id: SO:0000942 name: attP_site def: "An integration/excision site of a phage chromosome at which a recombinase acts to insert the phage DNA at a cognate integration/excision site on a bacterial chromosome." [SO:as] synonym: "attP site" EXACT [] is_a: SO:0000946 ! integration_excision_site relationship: part_of SO:0001042 ! phage_sequence [Term] id: SO:0000943 name: attB_site def: "An integration/excision site of a bacterial chromosome at which a recombinase acts to insert foreign DNA containing a cognate integration/excision site." [SO:as] synonym: "attB site" EXACT [] is_a: SO:0000946 ! integration_excision_site [Term] id: SO:0000944 name: attL_site def: "A region that results from recombination between attP_site and attB_site, composed of the 5' portion of attB_site and the 3' portion of attP_site." [SO:as] synonym: "attBP'" RELATED [] synonym: "attL site" RELATED [] is_a: SO:0000946 ! integration_excision_site [Term] id: SO:0000945 name: attR_site def: "A region that results from recombination between attP_site and attB_site, composed of the 5' portion of attP_site and the 3' portion of attB_site." [SO:as] synonym: "attPB'" RELATED [] synonym: "attR site" EXACT [] is_a: SO:0000946 ! integration_excision_site [Term] id: SO:0000946 name: integration_excision_site def: "A region specifically recognised by a recombinase, which inserts or removes another region marked by a distinct cognate integration/excision site." [SO:as] synonym: "attachment site" RELATED [] synonym: "integration excision site" EXACT [] is_a: SO:0000342 ! site_specific_recombination_target_region [Term] id: SO:0000947 name: resolution_site def: "A region specifically recognised by a recombinase, which separates a physically contiguous circle of DNA into two physically separate circles." [SO:as] synonym: "res site" EXACT [] synonym: "resolution site" EXACT [] is_a: SO:0000342 ! site_specific_recombination_target_region [Term] id: SO:0000948 name: inversion_site def: "A region specifically recognised by a recombinase, which inverts the region flanked by a pair of sites." [SO:ma] comment: A target region for site-specific inversion of a DNA region and which carries binding sites for a site-specific recombinase and accessory proteins as well as the site for specific cleavage by the recombinase. synonym: "inversion site" EXACT [] is_a: SO:0000342 ! site_specific_recombination_target_region [Term] id: SO:0000949 name: dif_site def: "A site at which replicated bacterial circular chromosomes are decatenated by site specific resolvase." [SO:as] synonym: "dif site" EXACT [] is_a: SO:0000947 ! resolution_site [Term] id: SO:0000950 name: attC_site def: "An attC site is a sequence required for the integration of a DNA of an integron." [SO:as] synonym: "attC site" EXACT [] is_a: SO:0000946 ! integration_excision_site relationship: part_of SO:0000365 ! integron [Term] id: SO:0000951 name: eukaryotic_terminator synonym: "eukaryotic terminator" EXACT [] is_a: SO:0000141 ! terminator [Term] id: SO:0000952 name: oriV def: "An origin of vegetative replication in plasmids and phages." [SO:as] synonym: "origin of vegetative replication" EXACT [] is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000953 name: oriC def: "An origin of bacterial chromosome replication." [SO:as] synonym: "origin of bacterial chromosome replication" EXACT [] is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000954 name: DNA_chromosome def: "Structural unit composed of a self-replicating, DNA molecule." [SO:ma] synonym: "DNA chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_quality SO:0000352 ! DNA [Term] id: SO:0000955 name: double_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded DNA molecule." [SO:ma] synonym: "double stranded DNA chromosome" EXACT [] is_a: SO:0000954 ! DNA_chromosome relationship: has_quality SO:0000985 ! double [Term] id: SO:0000956 name: single_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded DNA molecule." [SO:ma] synonym: "single stranded DNA chromosome" EXACT [] is_a: SO:0000954 ! DNA_chromosome relationship: has_quality SO:0000984 ! single [Term] id: SO:0000957 name: linear_double_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded, linear DNA molecule." [SO:ma] synonym: "linear double stranded DNA chromosome" EXACT [] is_a: SO:0000955 ! double_stranded_DNA_chromosome relationship: has_quality SO:0000987 ! linear [Term] id: SO:0000958 name: circular_double_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded, circular DNA molecule." [SO:ma] synonym: "circular double stranded DNA chromosome" EXACT [] is_a: SO:0000955 ! double_stranded_DNA_chromosome relationship: has_quality SO:0000988 ! circular [Term] id: SO:0000959 name: linear_single_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded, linear DNA molecule." [SO:ma] synonym: "linear single stranded DNA chromosome" EXACT [] is_a: SO:0000956 ! single_stranded_DNA_chromosome relationship: has_quality SO:0000987 ! linear [Term] id: SO:0000960 name: circular_single_stranded_DNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded, circular DNA molecule." [SO:ma] synonym: "circular single stranded DNA chromosome" EXACT [] is_a: SO:0000956 ! single_stranded_DNA_chromosome relationship: has_quality SO:0000988 ! circular [Term] id: SO:0000961 name: RNA_chromosome def: "Structural unit composed of a self-replicating, RNA molecule." [SO:ma] synonym: "RNA chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_quality SO:0000356 ! RNA [Term] id: SO:0000962 name: single_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded RNA molecule." [SO:ma] synonym: "single stranded RNA chromosome" EXACT [] is_a: SO:0000961 ! RNA_chromosome relationship: has_quality SO:0000984 ! single [Term] id: SO:0000963 name: linear_single_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded, linear RNA molecule." [SO:ma] synonym: "linear single stranded RNA chromosome" EXACT [] is_a: SO:0000962 ! single_stranded_RNA_chromosome relationship: has_quality SO:0000987 ! linear [Term] id: SO:0000964 name: linear_double_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded, linear RNA molecule." [SO:ma] synonym: "linear double stranded RNA chromosome" EXACT [] is_a: SO:0000965 ! double_stranded_RNA_chromosome relationship: has_quality SO:0000987 ! linear [Term] id: SO:0000965 name: double_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded RNA molecule." [SO:ma] synonym: "double stranded RNA chromosome" EXACT [] is_a: SO:0000961 ! RNA_chromosome relationship: has_quality SO:0000985 ! double [Term] id: SO:0000966 name: circular_single_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, single-stranded, circular DNA molecule." [SO:ma] synonym: "circular single stranded RNA chromosome" EXACT [] is_a: SO:0000962 ! single_stranded_RNA_chromosome relationship: has_quality SO:0000988 ! circular [Term] id: SO:0000967 name: circular_double_stranded_RNA_chromosome def: "Structural unit composed of a self-replicating, double-stranded, circular RNA molecule." [SO:ma] synonym: "circular double stranded RNA chromosome" EXACT [] is_a: SO:0000965 ! double_stranded_RNA_chromosome relationship: has_quality SO:0000988 ! circular [Term] id: SO:0000968 name: sequence_replication_mode comment: This has been obsoleted as it represents a process. replaced_by: GO:0034961. synonym: "sequence replication mode" EXACT [] is_obsolete: true [Term] id: SO:0000969 name: rolling_circle comment: This has been obsoleted as it represents a process. replaced_by: GO:0070581. synonym: "rolling circle" EXACT [] xref: http://en.wikipedia.org/wiki/Rolling_circle "wiki" is_obsolete: true [Term] id: SO:0000970 name: theta_replication comment: This has been obsoleted as it represents a process. replaced_by: GO:0070582 synonym: "theta replication" EXACT [] is_obsolete: true [Term] id: SO:0000971 name: DNA_replication_mode comment: This has been obsoleted as it represents a process. replaced_by: GO:0006260. synonym: "DNA replication mode" EXACT [] is_obsolete: true [Term] id: SO:0000972 name: RNA_replication_mode comment: This has been obsoleted as it represents a process. replaced_by: GO:0034961. synonym: "RNA replication mode" EXACT [] is_obsolete: true [Term] id: SO:0000973 name: insertion_sequence def: "A terminal_inverted_repeat_element that is bacterial and only encodes the functions required for its transposition between these inverted repeats." [SO:as] synonym: "insertion sequence" EXACT [] synonym: "IS" RELATED [] xref: http://en.wikipedia.org/wiki/Insertion_sequence "wiki" is_a: SO:0000208 ! terminal_inverted_repeat_element [Term] id: SO:0000975 name: minicircle_gene synonym: "minicircle gene" EXACT [] is_a: SO:0000089 ! kinetoplast_gene relationship: part_of SO:0000980 ! minicircle [Term] id: SO:0000976 name: cryptic def: "A feature_attribute describing a feature that is not manifest under normal conditions." [SO:ke] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000977 name: anchor_binding_site comment: Part of an edited transcript only. synonym: "anchor binding site" EXACT [] is_a: SO:0000833 ! transcript_region [Term] id: SO:0000978 name: template_region def: "A region of a guide_RNA that specifies the insertions and deletions of bases in the editing of a target mRNA." [SO:jk] synonym: "information region" EXACT [] synonym: "template region" EXACT [] is_a: SO:0000930 ! guide_RNA_region [Term] id: SO:0000979 name: gRNA_encoding def: "A non-protein_coding gene that encodes a guide_RNA." [SO:ma] synonym: "gRNA encoding" EXACT [] is_a: SO:0000011 ! non_protein_coding [Term] id: SO:0000980 name: minicircle alt_id: SO:0000974 def: "A minicircle is a replicon, part of a kinetoplast, that encodes for guide RNAs." [PMID:8395055] synonym: "minicircle_chromosome" EXACT [] xref: http://en.wikipedia.org/wiki/Minicircle "wiki" is_a: SO:0001235 ! replicon [Term] id: SO:0000981 name: rho_dependent_bacterial_terminator synonym: "rho dependent bacterial terminator" EXACT [] is_a: SO:0000614 ! bacterial_terminator [Term] id: SO:0000982 name: rho_independent_bacterial_terminator synonym: "rho independent bacterial terminator" EXACT [] is_a: SO:0000614 ! bacterial_terminator [Term] id: SO:0000983 name: strand_attribute comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. synonym: "strand attribute" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0000984 name: single comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. is_a: SO:0000983 ! strand_attribute [Term] id: SO:0000985 name: double comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. is_a: SO:0000983 ! strand_attribute [Term] id: SO:0000986 name: topology_attribute comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. synonym: "topology attribute" EXACT [] is_a: SO:0000443 ! polymer_attribute [Term] id: SO:0000987 name: linear def: "A quality of a nucleotide polymer that has a 3'-terminal residue and a 5'-terminal residue." [SO:cb] comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. synonym: "two-ended" RELATED [] is_a: SO:0000986 ! topology_attribute disjoint_from: SO:0000988 ! circular [Term] id: SO:0000988 name: circular def: "A quality of a nucleotide polymer that has no terminal nucleotide residues." [SO:cb] comment: Attributes added to describe the different kinds of replicon. SO workshop, September 2006. synonym: "zero-ended" RELATED [] is_a: SO:0000986 ! topology_attribute [Term] id: SO:0000989 name: class_II_RNA def: "Small non-coding RNA (59-60 nt long) containing 5' and 3' ends that are predicted to come together to form a stem structure. Identified in the social amoeba Dictyostelium discoideum and localized in the cytoplasm." [PMID:15333696] synonym: "class II RNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000990 name: class_I_RNA def: "Small non-coding RNA (55-65 nt long) containing highly conserved 5' and 3' ends (16 and 8 nt, respectively) that are predicted to come together to form a stem structure. Identified in the social amoeba Dictyostelium discoideum and localized in the cytoplasm." [PMID:15333696] comment: Requested by Karen Pilcher - Dictybase. song-Term Tracker-1574577. synonym: "class I RNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000991 name: genomic_DNA comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "genomic DNA" EXACT [] is_a: SO:0000352 ! DNA [Term] id: SO:0000992 name: BAC_cloned_genomic_insert comment: Requested by Andy Schroder - Flybase Harvard, Nov 2006. synonym: "BAC cloned genomic insert" EXACT [] is_a: SO:0000914 ! cloned_genomic_insert relationship: derives_from SO:0000153 ! BAC [Term] id: SO:0000993 name: consensus comment: Term added Dec 06 to comply with mapping to MGED terms. It should be used to generate consensus regions. The specific cross product terms they require are consensus_region and consensus_mRNA. is_a: SO:0000905 ! status [Term] id: SO:0000994 name: consensus_region comment: DO not obsolete without considering MGED mapping. synonym: "consensus region" EXACT [] is_a: SO:0001410 ! experimental_feature relationship: has_quality SO:0000993 ! consensus [Term] id: SO:0000995 name: consensus_mRNA comment: DO not obsolete without considering MGED mapping. synonym: "consensus mRNA" EXACT [] is_a: SO:0000234 ! mRNA is_a: SO:0000994 ! consensus_region relationship: has_quality SO:0000993 ! consensus [Term] id: SO:0000996 name: predicted_gene comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "predicted gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000732 ! predicted [Term] id: SO:0000997 name: gene_fragment comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. synonym: "gene fragment" EXACT [] is_a: SO:0000842 ! gene_component_region relationship: has_quality SO:0000731 ! fragmentary [Term] id: SO:0000998 name: recursive_splice_site def: "A recursive splice site is a splice site which subdivides a large intron. Recursive splicing is a mechanism that splices large introns by sub dividing the intron at non exonic elements and alternate exons." [http://www.genetics.org/cgi/content/full/170/2/661] synonym: "recursive splice site" EXACT [] is_a: SO:0001419 ! cis_splice_site [Term] id: SO:0000999 name: BAC_end def: "A region of sequence from the end of a BAC clone that may provide a highly specific marker." [SO:ke] comment: Requested by Keith Boroevich December, 2006. synonym: "BAC end" EXACT [] synonym: "BAC end sequence" EXACT [] synonym: "BES" EXACT [] is_a: SO:0000150 ! read relationship: part_of SO:0000153 ! BAC [Term] id: SO:0001000 name: rRNA_16S def: "A large polynucleotide in Bacteria and Archaea, which functions as the small subunit of the ribosome." [SO:ke] subset: SOFA synonym: "16S ribosomal RNA" EXACT [] synonym: "16S rRNA" RELATED [] synonym: "16S SSU RNA" EXACT [] synonym: "rRNA 16S" EXACT [] xref: http://en.wikipedia.org/wiki/16S_ribosomal_RNA "wiki" is_a: SO:0000650 ! small_subunit_rRNA [Term] id: SO:0001001 name: rRNA_23S def: "A large polynucleotide in Bacteria and Archaea, which functions as the large subunit of the ribosome." [SO:ke] subset: SOFA synonym: "23S LSU rRNA" EXACT [] synonym: "23S ribosomal RNA" RELATED [] synonym: "23S rRNA" EXACT [] synonym: "rRNA 23S" EXACT [] is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0001002 name: rRNA_25S def: "A large polynucleotide which functions as part of the large subunit of the ribosome in some eukaryotes." [RSC:cb] subset: SOFA synonym: "25S LSU rRNA" EXACT [] synonym: "25S ribosomal RNA" EXACT [] synonym: "25S rRNA" EXACT [] synonym: "rRNA 25S" EXACT [] is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0001003 name: solo_LTR def: "A recombination product between the 2 LTR of the same element." [SO:ke] comment: Requested by Hadi Quesneville January 2007. synonym: "solo LTR" EXACT [] is_a: SO:0000286 ! long_terminal_repeat [Term] id: SO:0001004 name: low_complexity synonym: "low complexity" EXACT [] is_a: SO:0000905 ! status [Term] id: SO:0001005 name: low_complexity_region synonym: "low complexity region" EXACT [] is_a: SO:0001410 ! experimental_feature relationship: has_quality SO:0001004 ! low_complexity [Term] id: SO:0001006 name: prophage def: "A phage genome after it has established in the host genome in a latent/immune state either as a plasmid or as an integrated \"island\"." [GOC:jl] xref: http://en.wikipedia.org/wiki/Prophage "wiki" is_a: SO:0000113 ! proviral_region [Term] id: SO:0001007 name: cryptic_prophage def: "A remnant of an integrated prophage in the host genome or an \"island\" in the host genome that includes phage like-genes." [GOC:jl] comment: This is not cryptic in the same sense as a cryptic gene or cryptic splice site. synonym: "cryptic prophage" EXACT [] xref: http://ecoliwiki.net/colipedia/index.php/Category:Cryptic_Prophage.w is_a: SO:0000772 ! genomic_island [Term] id: SO:0001008 name: tetraloop def: "A base-paired stem with loop of 4 non-hydrogen bonded nucleotides." [SO:ke] xref: http://en.wikipedia.org/wiki/Tetraloop "wiki" is_a: SO:0000313 ! stem_loop [Term] id: SO:0001009 name: DNA_constraint_sequence def: "A double-stranded DNA used to control macromolecular structure and function." [http:/www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=search&db=pubmed&term=SILVERMAN+SK[au\]&dispmax=50] synonym: "DNA constraint" EXACT [] synonym: "DNA constraint sequence" EXACT [] is_a: SO:0000442 ! ds_oligo [Term] id: SO:0001010 name: i_motif def: "A cytosine rich domain whereby strands associate both inter- and intramolecularly at moderately acidic pH." [PMID:9753739] synonym: "i motif" EXACT [] synonym: "short intercalated motif" EXACT [] is_a: SO:0000142 ! DNA_sequence_secondary_structure [Term] id: SO:0001011 name: PNA_oligo def: "Peptide nucleic acid, is a chemical not known to occur naturally but is artificially synthesized and used in some biological research and medical treatments. The PNA backbone is composed of repeating N-(2-aminoethyl)-glycine units linked by peptide bonds. The purine and pyrimidine bases are linked to the backbone by methylene carbonyl bonds." [SO:ke] synonym: "peptide nucleic acid" EXACT [] synonym: "PNA oligo" EXACT [] xref: http://en.wikipedia.org/wiki/Peptide_nucleic_acid "wiki" is_a: SO:0001247 ! synthetic_oligo relationship: has_quality SO:0001184 ! PNA [Term] id: SO:0001012 name: DNAzyme def: "A DNA sequence with catalytic activity." [SO:cb] comment: Added by request from Colin Batchelor. synonym: "catalytic DNA" EXACT [] synonym: "deoxyribozyme" RELATED [] synonym: "DNA enzyme" EXACT [] is_a: SO:0000696 ! oligo relationship: has_quality SO:0001185 ! enzymatic [Term] id: SO:0001013 name: MNP def: "A multiple nucleotide polymorphism with alleles of common length > 1, for example AAA/TTT." [http://www.ncbi.nlm.nih.gov/SNP/snp_ref.cgi?rs=rs2067431] synonym: "multiple nucleotide polymorphism" RELATED [] is_a: SO:1000002 ! substitution [Term] id: SO:0001014 name: intron_domain comment: Requested by Colin Batchelor, Feb 2007. synonym: "intron domain" EXACT [] is_a: SO:0000835 ! primary_transcript_region relationship: part_of SO:0000188 ! intron [Term] id: SO:0001015 name: wobble_base_pair def: "A type of non-canonical base pairing, most commonly between G and U, which is important for the secondary structure of RNAs. It has similar thermodynamic stability to the Watson-Crick pairing. Wobble base pairs only have two hydrogen bonds. Other wobble base pair possibilities are I-A, I-U and I-C." [PMID:11256617] synonym: "wobble base pair" EXACT [] synonym: "wobble pair" EXACT [] xref: http://en.wikipedia.org/wiki/Wobble_base_pair "wiki" is_a: SO:0000028 ! base_pair [Term] id: SO:0001016 name: internal_guide_sequence def: "A purine-rich sequence in the group I introns which determines the locations of the splice sites in group I intron splicing and has catalytic activity." [SO:cb] synonym: "IGS" EXACT [] synonym: "internal guide sequence" EXACT [] is_a: SO:0001014 ! intron_domain relationship: part_of SO:0000587 ! group_I_intron [Term] id: SO:0001017 name: silent_mutation def: "A sequence variant that does not affect protein function. Silent mutations may occur in genic ( CDS, UTR, intron etc) and intergenic regions. Silent mutations may have affects on processes such as splicing and regulation." [SO:ke] comment: Added in March 2007 in after meeting with pharmgkb. Although this term is in common usage, it is better to annotate with the most specific term possible, such as synonymous codon, intron variant etc. synonym: "silent mutation" EXACT [] xref: http://en.wikipedia.org/wiki/Silent_mutation "wiki" xref: loinc:LA6700-4 "Silent" is_a: SO:0001878 ! feature_variant [Term] id: SO:0001018 name: epitope def: "A binding site that, in the molecule, interacts selectively and non-covalently with antibodies, B cells or T cells." [http://en.wikipedia.org/wiki/Epitope, SO:cb] comment: Requested by Trish Whetzel. xref: http://en.wikipedia.org/wiki/Epitope "wiki" is_a: SO:0000409 ! binding_site [Term] id: SO:0001019 name: copy_number_variation def: "A variation that increases or decreases the copy number of a given region." [SO:ke] subset: SOFA synonym: "CNP" EXACT [] synonym: "CNV" EXACT [] synonym: "copy number polymorphism" EXACT [] synonym: "copy number variation" EXACT [] xref: http://en.wikipedia.org/wiki/Copy_number_variation "wiki" is_a: SO:0001059 ! sequence_alteration [Term] id: SO:0001020 name: sequence_variant_affecting_copy_number comment: OBSOLETE: This term was deleted as it conflated more than one term. The alteration is separate from the effect. synonym: "mutation affecting copy number" EXACT [] synonym: "sequence variant affecting copy number" EXACT [] is_obsolete: true replaced_by: SO:0001563 [Term] id: SO:0001021 name: chromosome_breakpoint alt_id: SO:0001242 synonym: "aberration breakpoint" EXACT [] synonym: "aberration_junction" EXACT [] synonym: "chromosome breakpoint" EXACT [] is_a: SO:0000699 ! junction relationship: part_of SO:0000340 ! chromosome [Term] id: SO:0001022 name: inversion_breakpoint def: "The point within a chromosome where an inversion begins or ends." [SO:cb] synonym: "inversion breakpoint" EXACT [] is_a: SO:0001021 ! chromosome_breakpoint [Term] id: SO:0001023 name: allele def: "An allele is one of a set of coexisting sequence variants of a gene." [SO:immuno_workshop] synonym: "allelomorph" EXACT [] xref: http://en.wikipedia.org/wiki/Allele "wiki" is_a: SO:0001507 ! variant_collection relationship: variant_of SO:0000704 ! gene [Term] id: SO:0001024 name: haplotype def: "A haplotype is one of a set of coexisting sequence variants of a haplotype block." [SO:immuno_workshop] xref: http://en.wikipedia.org/wiki/Haplotype "wiki" is_a: SO:0001507 ! variant_collection relationship: variant_of SO:0000355 ! haplotype_block [Term] id: SO:0001025 name: polymorphic_sequence_variant def: "A sequence variant that is segregating in one or more natural populations of a species." [SO:immuno_workshop] synonym: "polymorphic sequence variant" EXACT [] is_a: SO:0001023 ! allele [Term] id: SO:0001026 name: genome def: "A genome is the sum of genetic material within a cell or virion." [SO:immuno_workshop] xref: http://en.wikipedia.org/wiki/Genome "wiki" is_a: SO:0001260 ! sequence_collection relationship: has_part SO:0001235 ! replicon [Term] id: SO:0001027 name: genotype def: "A genotype is a variant genome, complete or incomplete." [SO:immuno_workshop] xref: http://en.wikipedia.org/wiki/Genotype "wiki" is_a: SO:0001507 ! variant_collection relationship: variant_of SO:0001026 ! genome [Term] id: SO:0001028 name: diplotype def: "A diplotype is a pair of haplotypes from a given individual. It is a genotype where the phase is known." [SO:immuno_workshop] is_a: SO:0001507 ! variant_collection [Term] id: SO:0001029 name: direction_attribute synonym: "direction attribute" EXACT [] is_a: SO:0000733 ! feature_attribute [Term] id: SO:0001030 name: forward def: "Forward is an attribute of the feature, where the feature is in the 5' to 3' direction." [SO:ke] is_a: SO:0001029 ! direction_attribute [Term] id: SO:0001031 name: reverse def: "Reverse is an attribute of the feature, where the feature is in the 3' to 5' direction. Again could be applied to primer." [SO:ke] is_a: SO:0001029 ! direction_attribute [Term] id: SO:0001032 name: mitochondrial_DNA comment: This terms is used by MO. synonym: "mitochondrial DNA" EXACT [] synonym: "mtDNA" EXACT [] xref: http://en.wikipedia.org/wiki/Mitochondrial_DNA "wiki" is_a: SO:0000737 ! mitochondrial_sequence relationship: has_quality SO:0000352 ! DNA [Term] id: SO:0001033 name: chloroplast_DNA comment: This term is used by MO. synonym: "chloroplast DNA" EXACT [] is_a: SO:0000745 ! chloroplast_sequence relationship: has_quality SO:0000352 ! DNA [Term] id: SO:0001034 name: mirtron def: "A de-branched intron which mimics the structure of pre-miRNA and enters the miRNA processing pathway without Drosha mediated cleavage." [PMID:17589500, SO:ma] comment: Ruby et al. Nature 448:83 describe a new class of miRNAs that are derived from de-branched introns. is_a: SO:0001014 ! intron_domain [Term] id: SO:0001035 name: piRNA def: "A small non coding RNA, part of a silencing system that prevents the spreading of selfish genetic elements." [SO:ke] synonym: "piwi-associated RNA" EXACT [] xref: http://en.wikipedia.org/wiki/PiRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0001036 name: arginyl_tRNA def: "A tRNA sequence that has an arginine anticodon, and a 3' arginine binding region." [SO:ke] synonym: "arginyl tRNA" EXACT [] is_a: SO:0000253 ! tRNA relationship: derives_from SO:0000212 ! arginine_tRNA_primary_transcript [Term] id: SO:0001037 name: mobile_genetic_element def: "A nucleotide region with either intra-genome or intracellular moblity, of varying length, which often carry the information necessary for transfer and recombination with the host genome." [PMID:14681355] subset: SOFA synonym: "MGE" EXACT [] synonym: "mobile genetic element" EXACT [] xref: http://en.wikipedia.org/wiki/Mobile_genetic_element "wiki" is_a: SO:0001411 ! biological_region relationship: has_quality SO:0001234 ! mobile [Term] id: SO:0001038 name: extrachromosomal_mobile_genetic_element def: "An MGE that is not integrated into the host chromosome." [SO:ke] synonym: "extrachromosomal mobile genetic element" EXACT [] is_a: SO:0001037 ! mobile_genetic_element [Term] id: SO:0001039 name: integrated_mobile_genetic_element def: "An MGE that is integrated into the host chromosome." [SO:ke] subset: SOFA synonym: "integrated mobile genetic element" EXACT [] is_a: SO:0001037 ! mobile_genetic_element [Term] id: SO:0001040 name: integrated_plasmid def: "A plasmid sequence that is integrated within the host chromosome." [SO:ke] synonym: "integrated plasmid" EXACT [] is_a: SO:0001039 ! integrated_mobile_genetic_element relationship: derives_from SO:0000155 ! plasmid [Term] id: SO:0001041 name: viral_sequence def: "The region of nucleotide sequence of a virus, a submicroscopic particle that replicates by infecting a host cell." [SO:ke] comment: The definitions of the children of this term were revised Decemeber 2007 after discussion on song-devel. The resulting definitions are slightly unweildy but hopefully more logically correct. synonym: "viral sequence" EXACT [] synonym: "virus sequence" EXACT [] is_a: SO:0001038 ! extrachromosomal_mobile_genetic_element is_a: SO:0001235 ! replicon [Term] id: SO:0001042 name: phage_sequence def: "The nucleotide sequence of a virus that infects bacteria." [SO:ke] synonym: "bacteriophage" EXACT [] synonym: "phage" EXACT [] synonym: "phage sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Bacteriophage "wiki" is_a: SO:0001041 ! viral_sequence [Term] id: SO:0001043 name: attCtn_site def: "An attachment site located on a conjugative transposon and used for site-specific integration of a conjugative transposon." [Phigo:at] synonym: "attCtn site" EXACT [] is_a: SO:0000946 ! integration_excision_site relationship: part_of SO:0000371 ! conjugative_transposon [Term] id: SO:0001044 name: nuclear_mt_pseudogene def: "A nuclear pseudogene of either coding or non-coding mitochondria derived sequence." [SO:xp] comment: Definition change requested by Val, 3172757. synonym: "nuclear mitochondrial pseudogene" EXACT [] synonym: "nuclear mt pseudogene" EXACT [] synonym: "NUMT" EXACT [] xref: http://en.wikipedia.org/wiki/Numt "wikipedia" is_a: SO:0001760 ! non_processed_pseudogene [Term] id: SO:0001045 name: cointegrated_plasmid def: "A MGE region consisting of two fused plasmids resulting from a replicative transposition event." [phigo:at] synonym: "cointegrated plasmid" EXACT [] synonym: "cointegrated replicon" EXACT [] is_a: SO:0001039 ! integrated_mobile_genetic_element [Term] id: SO:0001046 name: IRLinv_site def: "Component of the inversion site located at the left of a region susceptible to site-specific inversion." [Phigo:at] synonym: "IRLinv site" EXACT [] is_a: SO:0001048 ! inversion_site_part relationship: part_of SO:0000948 ! inversion_site [Term] id: SO:0001047 name: IRRinv_site def: "Component of the inversion site located at the right of a region susceptible to site-specific inversion." [Phigo:at] synonym: "IRRinv site" EXACT [] is_a: SO:0001048 ! inversion_site_part relationship: part_of SO:0000948 ! inversion_site [Term] id: SO:0001048 name: inversion_site_part def: "A region located within an inversion site." [SO:ke] comment: A term created to allow the parts of an inversion site have an is_a path back to the root. synonym: "inversion site part" EXACT [] is_a: SO:0000342 ! site_specific_recombination_target_region [Term] id: SO:0001049 name: defective_conjugative_transposon def: "An island that contains genes for integration/excision and the gene and site for the initiation of intercellular transfer by conjugation. It can be complemented for transfer by a conjugative transposon." [Phigo:ariane] synonym: "defective conjugative transposon" EXACT [] is_a: SO:0000772 ! genomic_island [Term] id: SO:0001050 name: repeat_fragment def: "A portion of a repeat, interrupted by the insertion of another element." [SO:ke] comment: Requested by Chris Smith, and others at Flybase to help annotate nested repeats. synonym: "repeat fragment" EXACT [] is_a: SO:0000840 ! repeat_component relationship: part_of SO:0001649 ! nested_repeat [Term] id: SO:0001051 name: nested_region is_obsolete: true [Term] id: SO:0001052 name: nested_repeat is_obsolete: true [Term] id: SO:0001053 name: nested_transposon is_obsolete: true [Term] id: SO:0001054 name: transposon_fragment def: "A portion of a transposon, interrupted by the insertion of another element." [SO:ke] synonym: "transposon fragment" EXACT [] is_a: SO:0000840 ! repeat_component relationship: part_of SO:0001648 ! nested_transposon [Term] id: SO:0001055 name: transcriptional_cis_regulatory_region def: "A regulatory_region that modulates the transcription of a gene or genes." [SO:regcreative] subset: SOFA synonym: "transcriptional cis regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0001056 name: splicing_regulatory_region def: "A regulatory_region that modulates splicing." [SO:ke] subset: SOFA synonym: "splicing regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0001057 name: enhanceosome is_obsolete: true [Term] id: SO:0001058 name: promoter_targeting_sequence def: "A transcriptional_cis_regulatory_region that restricts the activity of a CRM to a single promoter and which functions only when both itself and an insulator are located between the CRM and the promoter." [SO:regcreative] synonym: "promoter targeting sequence" EXACT [] is_a: SO:0001055 ! transcriptional_cis_regulatory_region [Term] id: SO:0001059 name: sequence_alteration alt_id: SO:1000004 alt_id: SO:1000007 def: "A sequence_alteration is a sequence_feature whose extent is the deviation from another sequence." [SO:ke] comment: Merged with partially characterized change in nucleotide sequence. subset: SOFA synonym: "partially characterised change in DNA sequence" NARROW [] synonym: "partially_characterised_change_in_DNA_sequence" NARROW [] synonym: "sequence alteration" EXACT [] synonym: "uncharacterised_change_in_nucleotide_sequence" NARROW [] is_a: SO:0000110 ! sequence_feature [Term] id: SO:0001060 name: sequence_variant def: "A sequence_variant is a non exact copy of a sequence_feature or genome exhibiting one or more sequence_alteration." [SO:ke] synonym: "sequence variant" EXACT [] [Term] id: SO:0001061 name: propeptide_cleavage_site alt_id: BS:00063 def: "The propeptide_cleavage_site is the arginine/lysine boundary on a propeptide where cleavage occurs." [EBIBS:GAR] comment: Discrete. subset: biosapiens synonym: "propeptide cleavage site" EXACT [] is_a: SO:0100011 ! cleaved_peptide_region relationship: part_of SO:0001062 ! propeptide [Term] id: SO:0001062 name: propeptide alt_id: BS:00077 def: "Part of a peptide chain which is cleaved off during the formation of the mature protein." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "propep" RELATED [uniprot:feature_type] xref: http://en.wikipedia.org/wiki/Propeptide "wiki" is_a: SO:0100011 ! cleaved_peptide_region [Term] id: SO:0001063 name: immature_peptide_region alt_id: BS:00129 def: "An immature_peptide_region is the extent of the peptide after it has been translated and before any processing occurs." [EBIBS:GAR] comment: Range. subset: biosapiens subset: SOFA synonym: "immature peptide region" EXACT [] is_a: SO:0000839 ! polypeptide_region [Term] id: SO:0001064 name: active_peptide alt_id: BS:00076 def: "Active peptides are proteins which are biologically active, released from a precursor molecule." [EBIBS:GAR, UniProt:curation_manual] comment: Hormones, neuropeptides, antimicrobial peptides, are active peptides. They are typically short (<40 amino acids) in length. subset: biosapiens synonym: "active peptide" EXACT [] synonym: "peptide" BROAD [uniprot:feature_type] xref: http://en.wikipedia.org/wiki/Peptide "wiki" is_a: SO:0000419 ! mature_protein_region [Term] id: SO:0001066 name: compositionally_biased_region_of_peptide alt_id: BS:00068 def: "Polypeptide region that is rich in a particular amino acid or homopolymeric and greater than three residues in length." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "compbias" RELATED [uniprot:feature_type] synonym: "compositional bias" RELATED [] synonym: "compositionally biased" RELATED [] synonym: "compositionally biased region of peptide" RELATED [] synonym: "compositionally_biased_region" EXACT [] is_a: SO:0000839 ! polypeptide_region [Term] id: SO:0001067 name: polypeptide_motif alt_id: BS:00032 def: "A sequence motif is a short (up to 20 amino acids) region of biological interest. Such motifs, although they are too short to constitute functional domains, share sequence similarities and are conserved in different proteins. They display a common function (protein-binding, subcellular location etc.)." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "motif" BROAD [uniprot:feature_type] synonym: "polypeptide motif" EXACT [] is_a: SO:0100021 ! polypeptide_conserved_region [Term] id: SO:0001068 name: polypeptide_repeat alt_id: BS:00070 def: "A polypeptide_repeat is a single copy of an internal sequence repetition." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "polypeptide repeat" EXACT [] synonym: "repeat" RELATED [uniprot:feature_type] is_a: SO:0100021 ! polypeptide_conserved_region [Term] id: SO:0001070 name: polypeptide_structural_region alt_id: BS:00337 def: "Region of polypeptide with a given structural property." [EBIBS:GAR, SO:cb] comment: Range. subset: biosapiens synonym: "polypeptide structural region" EXACT [] synonym: "structural_region" RELATED [] is_a: SO:0000839 ! polypeptide_region [Term] id: SO:0001071 name: membrane_structure alt_id: BS:00128 def: "Arrangement of the polypeptide with respect to the lipid bilayer." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "membrane structure" EXACT [] is_a: SO:0001070 ! polypeptide_structural_region [Term] id: SO:0001072 name: extramembrane_polypeptide_region alt_id: BS:00154 def: "Polypeptide region that is localized outside of a lipid bilayer." [EBIBS:GAR, SO:cb] comment: Range. subset: biosapiens synonym: "extramembrane" RELATED BS [] synonym: "extramembrane polypeptide region" EXACT [] synonym: "extramembrane_region" RELATED BS [] synonym: "topo_dom" RELATED BS [uniprot:feature_type] is_a: SO:0001070 ! polypeptide_structural_region relationship: part_of SO:0001071 ! membrane_structure [Term] id: SO:0001073 name: cytoplasmic_polypeptide_region alt_id: BS:00145 def: "Polypeptide region that is localized inside the cytoplasm." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "cytoplasm_location" EXACT BS [] synonym: "cytoplasmic polypeptide region" EXACT [] synonym: "inside" RELATED BS [] is_a: SO:0001072 ! extramembrane_polypeptide_region [Term] id: SO:0001074 name: non_cytoplasmic_polypeptide_region alt_id: BS:00144 def: "Polypeptide region that is localized outside of a lipid bilayer and outside of the cytoplasm." [EBIBS:GAR, SO:cb] comment: This could be inside an organelle within the cell. subset: biosapiens synonym: "non cytoplasmic polypeptide region" EXACT [] synonym: "non_cytoplasm_location" EXACT BS [] synonym: "outside" RELATED BS [] is_a: SO:0001072 ! extramembrane_polypeptide_region [Term] id: SO:0001075 name: intramembrane_polypeptide_region alt_id: BS:00156 def: "Polypeptide region present in the lipid bilayer." [EBIBS:GAR] subset: biosapiens synonym: "intramembrane" RELATED BS [] synonym: "intramembrane polypeptide region" EXACT [] is_a: SO:0001070 ! polypeptide_structural_region relationship: part_of SO:0001071 ! membrane_structure [Term] id: SO:0001076 name: membrane_peptide_loop alt_id: BS:00155 def: "Polypeptide region localized within the lipid bilayer where both ends traverse the same membrane." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "membrane peptide loop" EXACT [] synonym: "membrane_loop" RELATED BS [] is_a: SO:0001075 ! intramembrane_polypeptide_region [Term] id: SO:0001077 name: transmembrane_polypeptide_region alt_id: BS:00158 def: "Polypeptide region traversing the lipid bilayer." [EBIBS:GAR, UniProt:curator_manual] subset: biosapiens synonym: "transmem" RELATED BS [uniprot:feature_type] synonym: "transmembrane" RELATED BS [] synonym: "transmembrane polypeptide region" EXACT [] is_a: SO:0001075 ! intramembrane_polypeptide_region [Term] id: SO:0001078 name: polypeptide_secondary_structure alt_id: BS:00003 def: "A region of peptide with secondary structure has hydrogen bonding along the peptide chain that causes a defined conformation of the chain." [EBIBS:GAR] comment: Biosapien term was secondary_structure. subset: biosapiens synonym: "2nary structure" RELATED BS [] synonym: "polypeptide secondary structure" EXACT [] synonym: "secondary structure" RELATED BS [] synonym: "secondary structure region" RELATED BS [] synonym: "secondary_structure" RELATED BS [] xref: http://en.wikipedia.org/wiki/Secondary_structure "wiki" is_a: SO:0001070 ! polypeptide_structural_region [Term] id: SO:0001079 name: polypeptide_structural_motif alt_id: BS:0000338 def: "Motif is a three-dimensional structural element within the chain, which appears also in a variety of other molecules. Unlike a domain, a motif does not need to form a stable globular unit." [EBIBS:GAR] subset: biosapiens synonym: "polypeptide structural motif" RELATED [] synonym: "structural_motif" RELATED BS [] xref: http://en.wikipedia.org/wiki/Structural_motif "wiki" is_a: SO:0001070 ! polypeptide_structural_region [Term] id: SO:0001080 name: coiled_coil alt_id: BS:00041 def: "A coiled coil is a structural motif in proteins, in which alpha-helices are coiled together like the strands of a rope." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "coiled" RELATED BS [uniprot:feature_type] synonym: "coiled coil" EXACT [] xref: http://en.wikipedia.org/wiki/Coiled_coil "wiki" is_a: SO:0001079 ! polypeptide_structural_motif [Term] id: SO:0001081 name: helix_turn_helix alt_id: BS:00147 def: "A motif comprising two helices separated by a turn." [EBIBS:GAR] subset: biosapiens synonym: "helix turn helix" EXACT [] synonym: "helix-turn-helix" EXACT [] synonym: "HTH" RELATED BS [] is_a: SO:0001079 ! polypeptide_structural_motif relationship: has_part SO:0001114 ! peptide_helix relationship: has_part SO:0001128 ! polypeptide_turn_motif [Term] id: SO:0001082 name: polypeptide_sequencing_information alt_id: BS:00125 def: "Incompatibility in the sequence due to some experimental problem." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "sequencing_information" EXACT [] is_a: SO:0000700 ! remark [Term] id: SO:0001083 name: non_adjacent_residues alt_id: BS:00182 def: "Indicates that two consecutive residues in a fragment sequence are not consecutive in the full-length protein and that there are a number of unsequenced residues between them." [EBIBS:GAR, UniProt:curation_manual] subset: biosapiens synonym: "non consecutive" EXACT [] synonym: "non_cons" EXACT [uniprot:feature_type] is_a: SO:0001082 ! polypeptide_sequencing_information [Term] id: SO:0001084 name: non_terminal_residue alt_id: BS:00072 def: "The residue at an extremity of the sequence is not the terminal residue." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "non terminal" EXACT [] synonym: "non_ter" EXACT [uniprot:feature_type] is_a: SO:0001082 ! polypeptide_sequencing_information [Term] id: SO:0001085 name: sequence_conflict alt_id: BS:00069 def: "Different sources report differing sequences." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "conflict" EXACT [uniprot:feature_type] is_a: SO:0001082 ! polypeptide_sequencing_information [Term] id: SO:0001086 name: sequence_uncertainty alt_id: BS:00181 def: "Describes the positions in a sequence where the authors are unsure about the sequence assignment." [EBIBS:GAR, UniProt:curation_manual] subset: biosapiens synonym: "unsure" EXACT [uniprot:feature_type] is_a: SO:0001082 ! polypeptide_sequencing_information [Term] id: SO:0001087 name: cross_link alt_id: BS:00178 def: "Posttranslationally formed amino acid bonds." [EBIBS:GAR, UniProt:curation_manual] subset: biosapiens synonym: "cross link" EXACT [] synonym: "crosslink" RELATED [] is_obsolete: true [Term] id: SO:0001088 name: disulfide_bond alt_id: BS:00028 def: "The covalent bond between sulfur atoms that binds two peptide chains or different parts of one peptide chain and is a structural determinant in many protein molecules." [EBIBS:GAR, UniProt:curation_manual] comment: 2 discreet & joined. subset: biosapiens synonym: "disulfid" RELATED [] synonym: "disulfide" RELATED [] synonym: "disulfide bond" RELATED [] synonym: "disulphide" EXACT [] synonym: "disulphide bond" RELATED [] is_obsolete: true [Term] id: SO:0001089 name: post_translationally_modified_region alt_id: BS:00052 def: "A region where a transformation occurs in a protein after it has been synthesized. This which may regulate, stabilize, crosslink or introduce new chemical functionalities in the protein." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "mod_res" EXACT [uniprot:feature_type] synonym: "modified residue" EXACT [] synonym: "post_translational_modification" EXACT [] xref: http://en.wikipedia.org/wiki/Post_translational_modification "wiki" is_a: SO:0100001 ! biochemical_region_of_peptide [Term] id: SO:0001090 name: covalent_binding_site alt_id: BS:00246 def: "Binding involving a covalent bond." [EBIBS:GAR] subset: biosapiens synonym: "covalent binding site" EXACT [] is_obsolete: true [Term] id: SO:0001091 name: non_covalent_binding_site alt_id: BS:00029 def: "Binding site for any chemical group (co-enzyme, prosthetic group, etc.)." [EBIBS:GAR] comment: Discrete. subset: biosapiens synonym: "binding" RELATED [uniprot:curation] synonym: "binding site" RELATED [] synonym: "non covalent binding site" EXACT [] is_obsolete: true [Term] id: SO:0001092 name: polypeptide_metal_contact alt_id: BS:00027 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with metal ions." [EBIBS:GAR, SO:cb, UniProt:curation_manual] comment: Residue is part of a binding site for a metal ion. subset: biosapiens synonym: "metal_binding" RELATED [] is_a: SO:0001656 ! metal_binding_site is_a: SO:0100002 ! molecular_contact_region [Term] id: SO:0001093 name: protein_protein_contact alt_id: BS:00131 def: "A binding site that, in the protein molecule, interacts selectively and non-covalently with polypeptide residues." [EBIBS:GAR, UniProt:Curation_manual] subset: biosapiens synonym: "protein protein contact" EXACT [] synonym: "protein protein contact site" EXACT [] synonym: "protein_protein_interaction" RELATED [] xref: http://en.wikipedia.org/wiki/Protein_protein_interaction "wiki" is_a: SO:0000410 ! protein_binding_site is_a: SO:0100002 ! molecular_contact_region [Term] id: SO:0001094 name: polypeptide_calcium_ion_contact_site alt_id: BS:00186 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with calcium ions." [EBIBS:GAR] comment: Residue involved in contact with calcium. subset: biosapiens synonym: "ca bind" RELATED [] synonym: "Ca_contact_site" EXACT [] synonym: "polypeptide calcium ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001095 name: polypeptide_cobalt_ion_contact_site alt_id: BS:00136 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with cobalt ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Co_contact_site" EXACT [] synonym: "polypeptide cobalt ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001096 name: polypeptide_copper_ion_contact_site alt_id: BS:00146 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with copper ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Cu_contact_site" EXACT [] synonym: "polypeptide copper ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001097 name: polypeptide_iron_ion_contact_site alt_id: BS:00137 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with iron ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Fe_contact_site" EXACT [] synonym: "polypeptide iron ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001098 name: polypeptide_magnesium_ion_contact_site alt_id: BS:00187 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with magnesium ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Mg_contact_site" EXACT [] synonym: "polypeptide magnesium ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001099 name: polypeptide_manganese_ion_contact_site alt_id: BS:00140 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with manganese ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Mn_contact_site" EXACT [] synonym: "polypeptide manganese ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001100 name: polypeptide_molybdenum_ion_contact_site alt_id: BS:00141 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with molybdenum ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "Mo_contact_site" EXACT [] synonym: "polypeptide molybdenum ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001101 name: polypeptide_nickel_ion_contact_site alt_id: BS:00142 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with nickel ions." [EBIBS:GAR] subset: biosapiens synonym: "Ni_contact_site" EXACT [] synonym: "polypeptide nickel ion contact site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001102 name: polypeptide_tungsten_ion_contact_site alt_id: BS:00143 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with tungsten ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "polypeptide tungsten ion contact site" EXACT [] synonym: "W_contact_site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001103 name: polypeptide_zinc_ion_contact_site alt_id: BS:00185 def: "A binding site that, in the polypeptide molecule, interacts selectively and non-covalently with zinc ions." [EBIBS:GAR, SO:cb] subset: biosapiens synonym: "polypeptide zinc ion contact site" EXACT [] synonym: "Zn_contact_site" EXACT [] is_a: SO:0001092 ! polypeptide_metal_contact [Term] id: SO:0001104 name: catalytic_residue alt_id: BS:00026 def: "Amino acid involved in the activity of an enzyme." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "act_site" RELATED [uniprot:feature_type] synonym: "active site residue" EXACT [] synonym: "catalytic residue" EXACT [] is_a: SO:0001237 ! amino_acid relationship: part_of SO:0100019 ! polypeptide_catalytic_motif [Term] id: SO:0001105 name: polypeptide_ligand_contact alt_id: BS:00157 def: "Residues which interact with a ligand." [EBIBS:GAR] subset: biosapiens synonym: "polypeptide ligand contact" EXACT [] synonym: "protein-ligand interaction" RELATED [] is_a: SO:0001657 ! ligand_binding_site is_a: SO:0100002 ! molecular_contact_region [Term] id: SO:0001106 name: asx_motif alt_id: BS:00202 def: "A motif of five consecutive residues and two H-bonds in which: Residue(i) is Aspartate or Asparagine (Asx), side-chain O of residue(i) is H-bonded to the main-chain NH of residue(i+2) or (i+3), main-chain CO of residue(i) is H-bonded to the main-chain NH of residue(i+3) or (i+4)." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx motif" EXACT [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001107 name: beta_bulge alt_id: BS:00208 def: "A motif of three residues within a beta-sheet in which the main chains of two consecutive residues are H-bonded to that of the third, and in which the dihedral angles are as follows: Residue(i): -140 degrees < phi(l) -20 degrees , -90 degrees < psi(l) < 40 degrees. Residue (i+1): -180 degrees < phi < -25 degrees or +120 degrees < phi < +180 degrees, +40 degrees < psi < +180 degrees or -180 degrees < psi < -120 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta bulge" EXACT [] xref: http://en.wikipedia.org/wiki/Beta_bulge "wiki" is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001108 name: beta_bulge_loop alt_id: BS:00209 def: "A motif of three residues within a beta-sheet consisting of two H-bonds. Beta bulge loops often occur at the loop ends of beta-hairpins." [EBIBS:GAR, Http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta bulge loop" EXACT [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001109 name: beta_bulge_loop_five alt_id: BS:00210 def: "A motif of three residues within a beta-sheet consisting of two H-bonds in which: the main-chain NH of residue(i) is H-bonded to the main-chain CO of residue(i+4), the main-chain CO of residue i is H-bonded to the main-chain NH of residue(i+3), these loops have an RL nest at residues i+2 and i+3." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta bulge loop five" EXACT [] is_a: SO:0001108 ! beta_bulge_loop [Term] id: SO:0001110 name: beta_bulge_loop_six alt_id: BS:00211 def: "A motif of three residues within a beta-sheet consisting of two H-bonds in which: the main-chain NH of residue(i) is H-bonded to the main-chain CO of residue(i+5), the main-chain CO of residue i is H-bonded to the main-chain NH of residue(i+4), these loops have an RL nest at residues i+3 and i+4." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta bulge loop six" EXACT [] is_a: SO:0001108 ! beta_bulge_loop [Term] id: SO:0001111 name: beta_strand alt_id: BS:00042 def: "A beta strand describes a single length of polypeptide chain that forms part of a beta sheet. A single continuous stretch of amino acids adopting an extended conformation of hydrogen bonds between the N-O and the C=O of another part of the peptide. This forms a secondary protein structure in which two or more extended polypeptide regions are hydrogen-bonded to one another in a planar array." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "strand" RELATED BS [uniprot:feature_type] xref: http://en.wikipedia.org/wiki/Beta_sheet "wiki" is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001112 name: antiparallel_beta_strand alt_id: BS:0000341 def: "A peptide region which hydrogen bonded to another region of peptide running in the oposite direction (one running N-terminal to C-terminal and one running C-terminal to N-terminal). Hydrogen bonding occurs between every other C=O from one strand to every other N-H on the adjacent strand. In this case, if two atoms C-alpha (i) and C-alpha (j) are adjacent in two hydrogen-bonded beta strands, then they form two mutual backbone hydrogen bonds to each other's flanking peptide groups; this is known as a close pair of hydrogen bonds. The peptide backbone dihedral angles (phi, psi) are about (-140 degrees, 135 degrees) in antiparallel sheets." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "antiparallel beta strand" EXACT [] is_a: SO:0001111 ! beta_strand [Term] id: SO:0001113 name: parallel_beta_strand alt_id: BS:00151 def: "A peptide region which hydrogen bonded to another region of peptide running in the oposite direction (both running N-terminal to C-terminal). This orientation is slightly less stable because it introduces nonplanarity in the inter-strand hydrogen bonding pattern. Hydrogen bonding occurs between every other C=O from one strand to every other N-H on the adjacent strand. In this case, if two atoms C-alpha (i)and C-alpha (j) are adjacent in two hydrogen-bonded beta strands, then they do not hydrogen bond to each other; rather, one residue forms hydrogen bonds to the residues that flank the other (but not vice versa). For example, residue i may form hydrogen bonds to residues j - 1 and j + 1; this is known as a wide pair of hydrogen bonds. By contrast, residue j may hydrogen-bond to different residues altogether, or to none at all. The dihedral angles (phi, psi) are about (-120 degrees, 115 degrees) in parallel sheets." [EBIBS:GAR, UniProt:curation_manual] comment: Range. subset: biosapiens synonym: "parallel beta strand" EXACT [] is_a: SO:0001111 ! beta_strand [Term] id: SO:0001114 name: peptide_helix alt_id: BS:00152 def: "A helix is a secondary_structure conformation where the peptide backbone forms a coil." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "helix" RELATED BS [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001115 name: left_handed_peptide_helix alt_id: BS:00222 def: "A left handed helix is a region of peptide where the coiled conformation turns in an anticlockwise, left handed screw." [EBIBS:GAR] subset: biosapiens synonym: "helix-l" RELATED [] synonym: "left handed helix" EXACT [] is_a: SO:0001114 ! peptide_helix [Term] id: SO:0001116 name: right_handed_peptide_helix alt_id: BS:0000339 def: "A right handed helix is a region of peptide where the coiled conformation turns in a clockwise, right handed screw." [EBIBS:GAR] subset: biosapiens synonym: "helix" RELATED BS [] synonym: "right handed helix" EXACT [] is_a: SO:0001114 ! peptide_helix [Term] id: SO:0001117 name: alpha_helix alt_id: BS:00040 def: "The helix has 3.6 residues per turn which corersponds to a translation of 1.5 angstroms (= 0.15 nm) along the helical axis. Every backbone N-H group donates a hydrogen bond to the backbone C=O group of the amino acid four residues earlier." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "a-helix" RELATED BS [] synonym: "helix" RELATED BS [uniprot:feature_type] xref: http://en.wikipedia.org/wiki/Alpha_helix "wiki" is_a: SO:0001116 ! right_handed_peptide_helix [Term] id: SO:0001118 name: pi_helix alt_id: BS:00153 def: "The pi helix has 4.1 residues per turn and a translation of 1.15 (=0.115 nm) along the helical axis. The N-H group of an amino acid forms a hydrogen bond with the C=O group of the amino acid five residues earlier." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "pi helix" EXACT [] xref: http://en.wikipedia.org/wiki/Pi_helix "wiki" is_a: SO:0001116 ! right_handed_peptide_helix [Term] id: SO:0001119 name: three_ten_helix alt_id: BS:0000340 def: "The 3-10 helix has 3 residues per turn with a translation of 2.0 angstroms (=0.2 nm) along the helical axis. The N-H group of an amino acid forms a hydrogen bond with the C=O group of the amino acid three residues earlier." [EBIBS:GAR] comment: Range. subset: biosapiens synonym: "3(10) helix" EXACT [] synonym: "3-10 helix" EXACT [] synonym: "310 helix" EXACT [] synonym: "three ten helix" EXACT [] xref: http://en.wikipedia.org/wiki/310_helix "wiki" is_a: SO:0001116 ! right_handed_peptide_helix [Term] id: SO:0001120 name: polypeptide_nest_motif alt_id: BS:00223 def: "A motif of two consecutive residues with dihedral angles. Nest should not have Proline as any residue. Nests frequently occur as parts of other motifs such as Schellman loops." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "nest" RELATED BS [] synonym: "nest_motif" EXACT [] synonym: "polypeptide nest motif" RELATED [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001121 name: polypeptide_nest_left_right_motif alt_id: BS:00224 def: "A motif of two consecutive residues with dihedral angles: Residue(i): +20 degrees < phi < +140 degrees, -40 degrees < psi < +90 degrees. Residue(i+1): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "nest_left_right" EXACT [] synonym: "nest_lr" EXACT [] synonym: "polypeptide nest left right motif" EXACT [] is_a: SO:0001120 ! polypeptide_nest_motif [Term] id: SO:0001122 name: polypeptide_nest_right_left_motif alt_id: BS:00225 def: "A motif of two consecutive residues with dihedral angles: Residue(i): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees. Residue(i+1): +20 degrees < phi < +140 degrees, -40 degrees < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "nest_right_left" EXACT [] synonym: "nest_rl" EXACT [] synonym: "polypeptide nest right left motif" EXACT [] is_a: SO:0001120 ! polypeptide_nest_motif [Term] id: SO:0001123 name: schellmann_loop alt_id: BS:00226 def: "A motif of six or seven consecutive residues that contains two H-bonds." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "paperclip" RELATED BS [] synonym: "paperclip loop" RELATED [] synonym: "schellmann loop" EXACT [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001124 name: schellmann_loop_seven alt_id: BS:00228 def: "Wild type: A motif of seven consecutive residues that contains two H-bonds in which: the main-chain CO of residue(i) is H-bonded to the main-chain NH of residue(i+6), the main-chain CO of residue(i+1) is H-bonded to the main-chain NH of residue(i+5)." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "schellmann loop seven" EXACT [] synonym: "seven-residue schellmann loop" EXACT [] is_a: SO:0001123 ! schellmann_loop [Term] id: SO:0001125 name: schellmann_loop_six alt_id: BS:00227 def: "Common Type: A motif of six consecutive residues that contains two H-bonds in which: the main-chain CO of residue(i) is H-bonded to the main-chain NH of residue(i+5) the main-chain CO of residue(i+1) is H-bonded to the main-chain NH of residue(i+4)." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "schellmann loop six" EXACT [] synonym: "six-residue schellmann loop" EXACT [] is_a: SO:0001123 ! schellmann_loop [Term] id: SO:0001126 name: serine_threonine_motif alt_id: BS:00229 def: "A motif of five consecutive residues and two hydrogen bonds in which: residue(i) is Serine (S) or Threonine (T), the side-chain O of residue(i) is H-bonded to the main-chain NH of residue(i+2) or (i+3) , the main-chain CO group of residue(i) is H-bonded to the main-chain NH of residue(i+3) or (i+4)." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "serine/threonine motif" EXACT [] synonym: "st motif" EXACT [] synonym: "st_motif" EXACT [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001127 name: serine_threonine_staple_motif alt_id: BS:00230 def: "A motif of four or five consecutive residues and one H-bond in which: residue(i) is Serine (S) or Threonine (T), the side-chain OH of residue(i) is H-bonded to the main-chain CO of residue(i3) or (i4), Phi angles of residues(i1), (i2) and (i3) are negative." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "serine threonine staple motif" EXACT [] synonym: "st_staple" EXACT [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001128 name: polypeptide_turn_motif alt_id: BS:00148 def: "A reversal in the direction of the backbone of a protein that is stabilized by hydrogen bond between backbone NH and CO groups, involving no more than 4 amino acid residues." [EBIBS:GAR, uniprot:feature_type] comment: Range. subset: biosapiens synonym: "turn" RELATED BS [] is_a: SO:0001078 ! polypeptide_secondary_structure [Term] id: SO:0001129 name: asx_turn_left_handed_type_one alt_id: BS:00206 def: "Left handed type I (dihedral angles):- Residue(i): -140 degrees < chi (1) -120 degrees < -20 degrees, -90 degrees < psi +120 degrees < +40 degrees. Residue(i+1): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx turn left handed type one" EXACT [] synonym: "asx_turn_il" RELATED [] is_a: SO:0000912 ! asx_turn [Term] id: SO:0001130 name: asx_turn_left_handed_type_two alt_id: BS:00204 def: "Left handed type II (dihedral angles):- Residue(i): -140 degrees < chi (1) -120 degrees < -20 degrees, +80 degrees < psi +120 degrees < +180 degrees. Residue(i+1): +20 degrees < phi < +140 degrees, -40 degrees < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx turn left handed type two" EXACT [] synonym: "asx_turn_iil" EXACT [] is_a: SO:0000912 ! asx_turn [Term] id: SO:0001131 name: asx_turn_right_handed_type_two alt_id: BS:00205 def: "Right handed type II (dihedral angles):- Residue(i): -140 degrees < chi (1) -120 degrees < -20 degrees, +80 degrees < psi +120 degrees < +180 degrees. Residue(i+1): +20 degrees < phi < +140 degrees, -40 degrees < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx turn right handed type two" EXACT [] synonym: "asx_turn_iir" EXACT [] is_a: SO:0000912 ! asx_turn [Term] id: SO:0001132 name: asx_turn_right_handed_type_one alt_id: BS:00207 def: "Right handed type I (dihedral angles):- Residue(i): -140 degrees < chi (1) -120 degrees < -20 degrees, -90 degrees < psi +120 degrees < +40 degrees. Residue(i+1): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "asx turn type right handed type one" EXACT [] synonym: "asx_turn_ir" EXACT [] is_a: SO:0000912 ! asx_turn [Term] id: SO:0001133 name: beta_turn alt_id: BS:00212 def: "A motif of four consecutive residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth. It is characterized by the dihedral angles of the second and third residues, which are the basis for sub-categorization." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta turn" EXACT [] is_a: SO:0001128 ! polypeptide_turn_motif [Term] id: SO:0001134 name: beta_turn_left_handed_type_one alt_id: BS:00215 def: "Left handed type I:A motif of four consecutive residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth. It is characterized by the dihedral angles:- Residue(i+1): -140 degrees > phi > -20 degrees, -90 degrees > psi > +40 degrees. Residue(i+2): -140 degrees > phi > -20 degrees, -90 degrees > psi > +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta turn left handed type one" EXACT [] synonym: "beta_turn_il" EXACT [] synonym: "type I' beta turn" EXACT [] synonym: "type I' turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001135 name: beta_turn_left_handed_type_two alt_id: BS:00213 def: "Left handed type II: A motif of four consecutive residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth. It is characterized by the dihedral angles: Residue(i+1): -140 degrees > phi > -20 degrees, +80 degrees > psi > +180 degrees. Residue(i+2): +20 degrees > phi > +140 degrees, -40 degrees > psi > +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta turn left handed type two" EXACT [] synonym: "beta_turn_iil" EXACT [] synonym: "type II' beta turn" EXACT [] synonym: "type II' turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001136 name: beta_turn_right_handed_type_one alt_id: BS:00216 def: "Right handed type I:A motif of four consecutive residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth. It is characterized by the dihedral angles: Residue(i+1): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees. Residue(i+2): -140 degrees < phi < -20 degrees, -90 degrees < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta turn right handed type one" EXACT [] synonym: "beta_turn_ir" EXACT [] synonym: "type I beta turn" EXACT [] synonym: "type I turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001137 name: beta_turn_right_handed_type_two alt_id: BS:00214 def: "Right handed type II:A motif of four consecutive residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth. It is characterized by the dihedral angles: Residue(i+1): -140 degrees < phi < -20 degrees, +80 degrees < psi < +180 degrees. Residue(i+2): +20 degrees < phi < +140 degrees, -40 degrees < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "beta turn right handed type two" EXACT [] synonym: "beta_turn_iir" EXACT [] synonym: "type II beta turn" EXACT [] synonym: "type II turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001138 name: gamma_turn alt_id: BS:00219 def: "Gamma turns, defined for 3 residues i,( i+1),( i+2) if a hydrogen bond exists between residues i and i+2 and the phi and psi angles of residue i+1 fall within 40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "gamma turn" EXACT [] is_a: SO:0001128 ! polypeptide_turn_motif [Term] id: SO:0001139 name: gamma_turn_classic alt_id: BS:00220 def: "Gamma turns, defined for 3 residues i, i+1, i+2 if a hydrogen bond exists between residues i and i+2 and the phi and psi angles of residue i+1 fall within 40 degrees: phi(i+1)=75.0 - psi(i+1)=-64.0." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "classic gamma turn" EXACT [] synonym: "gamma turn classic" EXACT [] is_a: SO:0001138 ! gamma_turn [Term] id: SO:0001140 name: gamma_turn_inverse alt_id: BS:00221 def: "Gamma turns, defined for 3 residues i, i+1, i+2 if a hydrogen bond exists between residues i and i+2 and the phi and psi angles of residue i+1 fall within 40 degrees: phi(i+1)=-79.0 - psi(i+1)=69.0." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "gamma turn inverse" EXACT [] is_a: SO:0001138 ! gamma_turn [Term] id: SO:0001141 name: serine_threonine_turn alt_id: BS:00231 def: "A motif of three consecutive residues and one H-bond in which: residue(i) is Serine (S) or Threonine (T), the side-chain O of residue(i) is H-bonded to the main-chain NH of residue(i+2)." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "serine/threonine turn" EXACT [] synonym: "st_turn" EXACT [] is_a: SO:0001128 ! polypeptide_turn_motif [Term] id: SO:0001142 name: st_turn_left_handed_type_one alt_id: BS:00234 def: "The peptide twists in an anticlockwise, left handed manner. The dihedral angles for this turn are: Residue(i): -140 degrees < chi(1) -120 degrees < -20 degrees, -90 degrees psi +120 degrees < +40 degrees, residue(i+1): -140 degrees < phi < -20 degrees, -90 < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "st turn left handed type one" EXACT [] synonym: "st_turn_il" EXACT [] is_a: SO:0001141 ! serine_threonine_turn [Term] id: SO:0001143 name: st_turn_left_handed_type_two alt_id: BS:00232 def: "The peptide twists in an anticlockwise, left handed manner. The dihedral angles for this turn are: Residue(i): -140 degrees < chi(1) -120 degrees < -20 degrees, +80 degrees psi +120 degrees < +180 degrees, residue(i+1): +20 degrees < phi < +140 degrees, -40 < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "st turn left handed type two" EXACT [] synonym: "st_turn_iil" EXACT [] is_a: SO:0001141 ! serine_threonine_turn [Term] id: SO:0001144 name: st_turn_right_handed_type_one alt_id: BS:00235 def: "The peptide twists in an clockwise, right handed manner. The dihedral angles for this turn are: Residue(i): -140 degrees < chi(1) -120 degrees < -20 degrees, -90 degrees psi +120 degrees < +40 degrees, residue(i+1): -140 degrees < phi < -20 degrees, -90 < psi < +40 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "st turn right handed type one" EXACT [] synonym: "st_turn_ir" EXACT [] is_a: SO:0001141 ! serine_threonine_turn [Term] id: SO:0001145 name: st_turn_right_handed_type_two alt_id: BS:00233 def: "The peptide twists in an clockwise, right handed manner. The dihedral angles for this turn are: Residue(i): -140 degrees < chi(1) -120 degrees < -20 degrees, +80 degrees psi +120 degrees < +180 degrees, residue(i+1): +20 degrees < phi < +140 degrees, -40 < psi < +90 degrees." [EBIBS:GAR, http://www.ebi.ac.uk/msd-srv/msdmotif/] subset: biosapiens synonym: "st turn right handed type two" EXACT [] synonym: "st_turn_iir" EXACT [] is_a: SO:0001141 ! serine_threonine_turn [Term] id: SO:0001146 name: polypeptide_variation_site alt_id: BS:00336 def: "A site of sequence variation (alteration). Alternative sequence due to naturally occuring events such as polymorphisms and altermatve splicing or experimental methods such as site directed mutagenesis." [EBIBS:GAR, SO:ke] comment: For example, was a substitution natural or mutated as part of an experiment? This term is added to merge the biosapiens term sequence_variations. subset: biosapiens synonym: "sequence_variations" EXACT [] is_a: SO:0000839 ! polypeptide_region [Term] id: SO:0001147 name: natural_variant_site alt_id: BS:00071 def: "Describes the natural sequence variants due to polymorphisms, disease-associated mutations, RNA editing and variations between strains, isolates or cultivars." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "natural_variant" BROAD [] synonym: "sequence variation" BROAD [] synonym: "variant" BROAD [uniprot:feature_type] is_a: SO:0001146 ! polypeptide_variation_site [Term] id: SO:0001148 name: mutated_variant_site alt_id: BS:00036 def: "Site which has been experimentally altered." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "mutagen" EXACT BS [uniprot:feature_type] synonym: "mutagenesis" EXACT [] synonym: "mutated_site" EXACT [] is_a: SO:0001146 ! polypeptide_variation_site [Term] id: SO:0001149 name: alternate_sequence_site alt_id: BS:00073 alt_id: SO:0001065 def: "Description of sequence variants produced by alternative splicing, alternative promoter usage, alternative initiation and ribosomal frameshifting." [EBIBS:GAR, UniProt:curation_manual] comment: Discrete. subset: biosapiens synonym: "alternative_sequence" EXACT [] synonym: "isoform" NARROW [] synonym: "sequence variation" NARROW [] synonym: "var_seq" EXACT [uniprot:feature_type] synonym: "varsplic" NARROW [] is_a: SO:0001146 ! polypeptide_variation_site [Term] id: SO:0001150 name: beta_turn_type_six def: "A motif of four consecutive peptide resides of type VIa or type VIb and where the i+2 residue is cis-proline." [SO:cb] subset: biosapiens synonym: "beta turn type six" EXACT [] synonym: "cis-proline loop" EXACT [] synonym: "type VI beta turn" EXACT [] synonym: "type VI turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001151 name: beta_turn_type_six_a def: "A motif of four consecutive peptide residues, of which the i+2 residue is proline, and that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth and is characterized by the dihedral angles: Residue(i+1): phi ~ -60 degrees, psi ~ 120 degrees. Residue(i+2): phi ~ -90 degrees, psi ~ 0 degrees." [PMID:2371257, SO:cb] subset: biosapiens synonym: "beta turn type six a" EXACT [] synonym: "type VIa beta turn" EXACT [] synonym: "type VIa turn" EXACT [] is_a: SO:0001150 ! beta_turn_type_six [Term] id: SO:0001152 name: beta_turn_type_six_a_one subset: biosapiens synonym: "beta turn type six a one" EXACT [] synonym: "type VIa1 beta turn" EXACT [] synonym: "type VIa1 turn" EXACT [] is_a: SO:0001151 ! beta_turn_type_six_a [Term] id: SO:0001153 name: beta_turn_type_six_a_two subset: biosapiens synonym: "beta turn type six a two" EXACT [] synonym: "type VIa2 beta turn" EXACT [] synonym: "type VIa2 turn" EXACT [] is_a: SO:0001151 ! beta_turn_type_six_a [Term] id: SO:0001154 name: beta_turn_type_six_b def: "A motif of four consecutive peptide residues, of which the i+2 residue is proline, and that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth and is characterized by the dihedral angles: Residue(i+1): phi ~ -120 degrees, psi ~ 120 degrees. Residue(i+2): phi ~ -60 degrees, psi ~ 0 degrees." [PMID:2371257, SO:cb] subset: biosapiens synonym: "beta turn type six b" EXACT [] synonym: "type VIb beta turn" EXACT [] synonym: "type VIb turn" EXACT [] is_a: SO:0001150 ! beta_turn_type_six [Term] id: SO:0001155 name: beta_turn_type_eight def: "A motif of four consecutive peptide residues that may contain one H-bond, which, if present, is between the main-chain CO of the first residue and the main-chain NH of the fourth and is characterized by the dihedral angles: Residue(i+1): phi ~ -60 degrees, psi ~ -30 degrees. Residue(i+2): phi ~ -120 degrees, psi ~ 120 degrees." [PMID:2371257, SO:cb] subset: biosapiens synonym: "beta turn type eight" EXACT [] synonym: "type VIII beta turn" EXACT [] synonym: "type VIII turn" EXACT [] is_a: SO:0001133 ! beta_turn [Term] id: SO:0001156 name: DRE_motif def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between -10 and -60 relative to the TSS. Consensus sequence is WATCGATW." [PMID:12537576] comment: This consensus sequence was identified computationally using the MEME algorithm within core promoter sequences from -60 to +40, with an E value of 1.7e-183. Tends to co-occur with Motif 7. Tends to not occur with DPE motif (SO:0000015) or motif 10. synonym: "DRE motif" EXACT [] synonym: "NDM4" EXACT [] synonym: "WATCGATW_motif" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001157 name: DMv4_motif def: "A sequence element characteristic of some RNA polymerase II promoters, located immediately upstream of some TATA box elements with respect to the TSS (+1). Consensus sequence is YGGTCACACTR. Marked spatial preference within core promoter; tend to occur near the TSS, although not as tightly as INR (SO:0000014)." [PMID:16827941:12537576] synonym: "directional motif v4" EXACT [] synonym: "DMv4" EXACT [] synonym: "DMv4 motif" EXACT [] synonym: "motif 1 element" EXACT [] synonym: "promoter motif 1" EXACT [] synonym: "YGGTCACATR" NARROW [] is_a: SO:0001659 ! promoter_element [Term] id: SO:0001158 name: E_box_motif def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between -60 and +1 relative to the TSS. Consensus sequence is AWCAGCTGWT. Tends to co-occur with DMv2 (SO:0001161). Tends to not occur with DPE motif (SO:0000015)." [PMID:12537576:16827941] synonym: "AWCAGCTGWT" NARROW [] synonym: "E box motif" EXACT [] synonym: "generic E box motif" EXACT [] synonym: "NDM5" RELATED [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001159 name: DMv5_motif def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between -50 and -10 relative to the TSS. Consensus sequence is KTYRGTATWTTT. Tends to co-occur with DMv4 (SO:0001157) . Tends to not occur with DPE motif (SO:0000015) or MTE (SO:0001162)." [PMID:12537576:16827941] synonym: "directional motif v5" EXACT [] synonym: "DMv5" EXACT [] synonym: "DMv5 motif" EXACT [] synonym: "KTYRGTATWTTT" NARROW [] synonym: "promoter motif 6" RELATED [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001160 name: DMv3_motif def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between -30 and +15 relative to the TSS. Consensus sequence is KNNCAKCNCTRNY. Tends to co-occur with DMv2 (SO:0001161). Tends to not occur with DPE motif (SO:0000015) or MTE (0001162)." [PMID:12537576:16827941] synonym: "directional motif v3" EXACT [] synonym: "DMv3" EXACT [] synonym: "DMv3 motif" EXACT [] synonym: "KNNCAKCNCTRNY" NARROW [] synonym: "promoter motif 7" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001161 name: DMv2_motif def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between -60 and -45 relative to the TSS. Consensus sequence is MKSYGGCARCGSYSS. Tends to co-occur with DMv3 (SO:0001160). Tends to not occur with DPE motif (SO:0000015) or MTE (SO:0001162)." [PMID:12537576:16827941] synonym: "directional motif v2" EXACT [] synonym: "DMv2" EXACT [] synonym: "DMv2 motif" EXACT [] synonym: "MKSYGGCARCGSYSS" NARROW [] synonym: "promoter motif 8" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001162 name: MTE def: "A sequence element characteristic of some RNA polymerase II promoters, usually located between +20 and +30 relative to the TSS. Consensus sequence is CSARCSSAACGS. Tends to co-occur with INR motif (SO:0000014). Tends to not occur with DPE motif (SO:0000015) or DMv5 (SO:0001159)." [PMID:12537576:15231738, PMID:16858867] synonym: "CSARCSSAACGS" NARROW [] synonym: "motif ten element" EXACT [] synonym: "motif_ten_element" EXACT [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0001669 ! RNApol_II_core_promoter [Term] id: SO:0001163 name: INR1_motif def: "A promoter motif with consensus sequence TCATTCG." [PMID:16827941] synonym: "directional motif p3" EXACT [] synonym: "directional promoter motif 3" EXACT [] synonym: "DMp3" EXACT [] synonym: "INR1 motif" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001164 name: DPE1_motif def: "A promoter motif with consensus sequence CGGACGT." [PMID:16827941] synonym: "directional motif 5" EXACT [] synonym: "directional promoter motif 5" RELATED [] synonym: "DMp5" EXACT [] synonym: "DPE1 motif" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001165 name: DMv1_motif def: "A promoter motif with consensus sequence CARCCCT." [PMID:16827941] synonym: "directional promoter motif v1" RELATED [] synonym: "DMv1" RELATED [] synonym: "DMv1 motif" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001166 name: GAGA_motif def: "A non directional promoter motif with consensus sequence GAGAGCG." [PMID:16827941] synonym: "GAGA" EXACT [] synonym: "GAGA motif" EXACT [] synonym: "NDM1" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001167 name: NDM2_motif def: "A non directional promoter motif with consensus CGMYGYCR." [PMID:16827941] synonym: "NDM2" EXACT [] synonym: "NDM2 motif" EXACT [] synonym: "non directional promoter motif 2" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001168 name: NDM3_motif def: "A non directional promoter motif with consensus sequence GAAAGCT." [PMID:16827941] synonym: "NDM3" EXACT [] synonym: "NDM3 motif" EXACT [] synonym: "non directional motif 3" EXACT [] is_a: SO:0001659 ! promoter_element relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001169 name: ds_RNA_viral_sequence def: "A ds_RNA_viral_sequence is a viral_sequence that is the sequence of a virus that exists as double stranded RNA." [SO:ke] synonym: "double stranded RNA virus sequence" EXACT [] synonym: "ds RNA viral sequence" EXACT [] is_a: SO:0001041 ! viral_sequence [Term] id: SO:0001170 name: polinton def: "A kind of DNA transposon that populates the genomes of protists, fungi, and animals, characterized by a unique set of proteins necessary for their transposition, including a protein-primed DNA polymerase B, retroviral integrase, cysteine protease, and ATPase. Polintons are characterized by 6-bp target site duplications, terminal-inverted repeats that are several hundred nucleotides long, and 5'-AG and TC-3' termini. Polintons exist as autonomous and nonautonomous elements." [PMID:16537396] synonym: "maverick element" RELATED [] is_a: SO:0000208 ! terminal_inverted_repeat_element [Term] id: SO:0001171 name: rRNA_21S def: "A component of the large ribosomal subunit in mitochondrial rRNA." [RSC:cb] synonym: "21S LSU rRNA" EXACT [] synonym: "21S ribosomal RNA" EXACT [] synonym: "21S rRNA" EXACT [] synonym: "rRNA 21S" EXACT [] is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0001172 name: tRNA_region def: "A region of a tRNA." [RSC:cb] synonym: "tRNA region" EXACT [] is_a: SO:0000834 ! mature_transcript_region relationship: part_of SO:0000253 ! tRNA [Term] id: SO:0001173 name: anticodon_loop def: "A sequence of seven nucleotide bases in tRNA which contains the anticodon. It has the sequence 5'-pyrimidine-purine-anticodon-modified purine-any base-3." [ISBN:0716719207] synonym: "anti-codon loop" EXACT [] synonym: "anticodon loop" EXACT [] is_a: SO:0001172 ! tRNA_region [Term] id: SO:0001174 name: anticodon def: "A sequence of three nucleotide bases in tRNA which recognizes a codon in mRNA." [RSC:cb] synonym: "anti-codon" EXACT [] xref: http://en.wikipedia.org/wiki/Anticodon "wiki" is_a: SO:0001172 ! tRNA_region relationship: part_of SO:0001173 ! anticodon_loop [Term] id: SO:0001175 name: CCA_tail def: "Base sequence at the 3' end of a tRNA. The 3'-hydroxyl group on the terminal adenosine is the attachment point for the amino acid." [ISBN:0716719207] synonym: "CCA sequence" EXACT [] synonym: "CCA tail" EXACT [] is_a: SO:0001172 ! tRNA_region [Term] id: SO:0001176 name: DHU_loop def: "Non-base-paired sequence of nucleotide bases in tRNA. It contains several dihydrouracil residues." [ISBN:071671920] synonym: "D loop" RELATED [] synonym: "DHU loop" EXACT [] is_a: SO:0001172 ! tRNA_region [Term] id: SO:0001177 name: T_loop def: "Non-base-paired sequence of three nucleotide bases in tRNA. It has sequence T-Psi-C." [ISBN:0716719207] synonym: "T loop" EXACT [] synonym: "TpsiC loop" EXACT [] is_a: SO:0001172 ! tRNA_region [Term] id: SO:0001178 name: pyrrolysine_tRNA_primary_transcript def: "A primary transcript encoding pyrrolysyl tRNA (SO:0000766)." [RSC:cb] synonym: "pyrrolysine tRNA primary transcript" EXACT [] is_a: SO:0000210 ! tRNA_primary_transcript [Term] id: SO:0001179 name: U3_snoRNA def: "U3 snoRNA is a member of the box C/D class of small nucleolar RNAs. The U3 snoRNA secondary structure is characterised by a small 5' domain (with boxes A and A'), and a larger 3' domain (with boxes B, C, C', and D), the two domains being linked by a single-stranded hinge. Boxes B and C form the B/C motif, which appears to be exclusive to U3 snoRNAs, and boxes C' and D form the C'/D motif. The latter is functionally similar to the C/D motifs found in other snoRNAs. The 5' domain and the hinge region act as a pre-rRNA-binding domain. The 3' domain has conserved protein-binding sites. Both the box B/C and box C'/D motifs are sufficient for nuclear retention of U3 snoRNA. The box C'/D motif is also necessary for nucleolar localization, stability and hypermethylation of U3 snoRNA. Both box B/C and C'/D motifs are involved in specific protein interactions and are necessary for the rRNA processing functions of U3 snoRNA." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00012] comment: The definition is most of the old definition for snoRNA (SO:0000275). synonym: "small nucleolar RNA U3" EXACT [] synonym: "snoRNA U3" EXACT [] synonym: "U3 small nucleolar RNA" EXACT [] synonym: "U3 snoRNA" EXACT [] xref: http://en.wikipedia.org/wiki/Small_nucleolar_RNA_U3 "wiki" is_a: SO:0000593 ! C_D_box_snoRNA [Term] id: SO:0001180 name: AU_rich_element def: "A cis-acting element found in the 3' UTR of some mRNA which is rich in AUUUA pentamers. Messenger RNAs bearing multiple AU-rich elements are often unstable." [PMID:7892223] synonym: "ARE" RELATED [] synonym: "AU rich element" EXACT [] synonym: "AU-rich element" EXACT [] xref: http://en.wikipedia.org/wiki/AU-rich_element "wiki" is_a: SO:0000837 ! UTR_region relationship: part_of SO:0000205 ! three_prime_UTR [Term] id: SO:0001181 name: Bruno_response_element def: "A cis-acting element found in the 3' UTR of some mRNA which is bound by the Drosophila Bruno protein and its homologs." [PMID:10893231] comment: Not to be confused with BRE_motif (SO:0000016), which binds transcription factor II B. synonym: "BRE" RELATED [] synonym: "Bruno response element" EXACT [] is_a: SO:0000837 ! UTR_region relationship: part_of SO:0000205 ! three_prime_UTR [Term] id: SO:0001182 name: iron_responsive_element def: "A regulatory sequence found in the 5' and 3' UTRs of many mRNAs which encode iron-binding proteins. It has a hairpin structure and is recognized by trans-acting proteins known as iron-regulatory proteins." [PMID:3198610, PMID:8710843] synonym: "IRE" EXACT [] synonym: "iron responsive element" EXACT [] xref: http://en.wikipedia.org/wiki/Iron_responsive_element "wiki" is_a: SO:0000837 ! UTR_region relationship: part_of SO:0000203 ! UTR [Term] id: SO:0001183 name: morpholino_backbone def: "An attribute describing a sequence composed of nucleobases bound to a morpholino backbone. A morpholino backbone consists of morpholine (CHEBI:34856) rings connected by phosphorodiamidate linkages." [RSC:cb] comment: Do not use this for feature annotation. Use morpholino_oligo (SO:0000034) instead. synonym: "morpholino backbone" EXACT [] xref: http://en.wikipedia.org/wiki/Morpholino "wiki" is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0001184 name: PNA def: "An attribute describing a sequence composed of peptide nucleic acid (CHEBI:48021), a chemical consisting of nucleobases bound to a backbone composed of repeating N-(2-aminoethyl)-glycine units linked by peptide bonds. The purine and pyrimidine bases are linked to the backbone by methylene carbonyl bonds." [RSC:cb] comment: Do not use this term for feature annotation. Use PNA_oligo (SO:0001011) instead. synonym: "peptide nucleic acid" RELATED [] is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0001185 name: enzymatic def: "An attribute describing the sequence of a transcript that has catalytic activity with or without an associated ribonucleoprotein." [RSC:cb] comment: Do not use this for feature annotation. Use enzymatic_RNA (SO:0000372) instead. is_a: SO:0000733 ! feature_attribute [Term] id: SO:0001186 name: ribozymic def: "An attribute describing the sequence of a transcript that has catalytic activity even without an associated ribonucleoprotein." [RSC:cb] comment: Do not use this for feature annotation. Use ribozyme (SO:0000374) instead. is_a: SO:0001185 ! enzymatic [Term] id: SO:0001187 name: pseudouridylation_guide_snoRNA def: "A snoRNA that specifies the site of pseudouridylation in an RNA molecule by base pairing with a short sequence around the target residue." [GOC:mah, PMID:12457565] comment: Has RNA pseudouridylation guide activity (GO:0030558). synonym: "pseudouridylation guide snoRNA" EXACT [] is_a: SO:0000594 ! H_ACA_box_snoRNA [Term] id: SO:0001188 name: LNA def: "An attribute describing a sequence consisting of nucleobases attached to a repeating unit made of 'locked' deoxyribose rings connected to a phosphate backbone. The deoxyribose unit's conformation is 'locked' by a 2'-C,4'-C-oxymethylene link." [CHEBI:48010] comment: Do not use this term for feature annotation. Use LNA_oligo (SO:0001189) instead. is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0001189 name: LNA_oligo def: "An oligo composed of LNA residues." [RSC:cb] synonym: "LNA oligo" EXACT [] synonym: "locked nucleic acid" EXACT [] xref: http://en.wikipedia.org/wiki/Locked_nucleic_acid "wiki" is_a: SO:0001247 ! synthetic_oligo relationship: has_quality SO:0001188 ! LNA [Term] id: SO:0001190 name: TNA def: "An attribute describing a sequence consisting of nucleobases attached to a repeating unit made of threose rings connected to a phosphate backbone." [CHEBI:48019] comment: Do not use this term for feature annotation. Use TNA_oligo (SO:0001191) instead. is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0001191 name: TNA_oligo def: "An oligo composed of TNA residues." [RSC:cb] synonym: "threose nucleic acid" EXACT [] synonym: "TNA oligo" EXACT [] xref: http://en.wikipedia.org/wiki/Threose_nucleic_acid "wiki" is_a: SO:0001247 ! synthetic_oligo relationship: has_quality SO:0001190 ! TNA [Term] id: SO:0001192 name: GNA def: "An attribute describing a sequence consisting of nucleobases attached to a repeating unit made of an acyclic three-carbon propylene glycol connected to a phosphate backbone. It has two enantiomeric forms, (R)-GNA and (S)-GNA." [CHEBI:48015] comment: Do not use this term for feature annotation. Use GNA_oligo (SO:0001192) instead. is_a: SO:0000348 ! nucleic_acid [Term] id: SO:0001193 name: GNA_oligo def: "An oligo composed of GNA residues." [RSC:cb] synonym: "glycerol nucleic acid" EXACT [] synonym: "glycol nucleic acid" EXACT [] synonym: "GNA oligo" EXACT [] xref: http://en.wikipedia.org/wiki/Glycerol_nucleic_acid "wiki" is_a: SO:0001247 ! synthetic_oligo relationship: has_quality SO:0001192 ! GNA [Term] id: SO:0001194 name: R_GNA def: "An attribute describing a GNA sequence in the (R)-GNA enantiomer." [CHEBI:48016] comment: Do not use this term for feature annotation. Use R_GNA_oligo (SO:0001195) instead. synonym: "R GNA" EXACT [] is_a: SO:0001192 ! GNA [Term] id: SO:0001195 name: R_GNA_oligo def: "An oligo composed of (R)-GNA residues." [RSC:cb] synonym: "(R)-glycerol nucleic acid" EXACT [] synonym: "(R)-glycol nucleic acid" EXACT [] synonym: "R GNA oligo" EXACT [] is_a: SO:0001193 ! GNA_oligo relationship: has_quality SO:0001194 ! R_GNA [Term] id: SO:0001196 name: S_GNA def: "An attribute describing a GNA sequence in the (S)-GNA enantiomer." [CHEBI:48017] comment: Do not use this term for feature annotation. Use S_GNA_oligo (SO:0001197) instead. synonym: "S GNA" EXACT [] is_a: SO:0001192 ! GNA [Term] id: SO:0001197 name: S_GNA_oligo def: "An oligo composed of (S)-GNA residues." [RSC:cb] synonym: "(S)-glycerol nucleic acid" EXACT [] synonym: "(S)-glycol nucleic acid" EXACT [] synonym: "S GNA oligo" EXACT [] is_a: SO:0001193 ! GNA_oligo relationship: has_quality SO:0001196 ! S_GNA [Term] id: SO:0001198 name: ds_DNA_viral_sequence def: "A ds_DNA_viral_sequence is a viral_sequence that is the sequence of a virus that exists as double stranded DNA." [SO:ke] synonym: "double stranded DNA virus" EXACT [] synonym: "ds DNA viral sequence" EXACT [] is_a: SO:0001041 ! viral_sequence [Term] id: SO:0001199 name: ss_RNA_viral_sequence def: "A ss_RNA_viral_sequence is a viral_sequence that is the sequence of a virus that exists as single stranded RNA." [SO:ke] synonym: "single strand RNA virus" EXACT [] synonym: "ss RNA viral sequence" EXACT [] is_a: SO:0001041 ! viral_sequence [Term] id: SO:0001200 name: negative_sense_ssRNA_viral_sequence def: "A negative_sense_RNA_viral_sequence is a ss_RNA_viral_sequence that is the sequence of a single stranded RNA virus that is complementary to mRNA and must be converted to positive sense RNA by RNA polymerase before translation." [SO:ke] synonym: "negative sense single stranded RNA virus" RELATED [] synonym: "negative sense ssRNA viral sequence" EXACT [] is_a: SO:0001199 ! ss_RNA_viral_sequence [Term] id: SO:0001201 name: positive_sense_ssRNA_viral_sequence def: "A positive_sense_RNA_viral_sequence is a ss_RNA_viral_sequence that is the sequence of a single stranded RNA virus that can be immediately translated by the host." [SO:ke] synonym: "positive sense single stranded RNA virus" RELATED [] synonym: "positive sense ssRNA viral sequence" EXACT [] is_a: SO:0001199 ! ss_RNA_viral_sequence [Term] id: SO:0001202 name: ambisense_ssRNA_viral_sequence def: "A ambisense_RNA_virus is a ss_RNA_viral_sequence that is the sequence of a single stranded RNA virus with both messenger and anti messenger polarity." [SO:ke] synonym: "ambisense single stranded RNA virus" EXACT [] synonym: "ambisense ssRNA viral sequence" EXACT [] is_a: SO:0001199 ! ss_RNA_viral_sequence [Term] id: SO:0001203 name: RNA_polymerase_promoter def: "A region (DNA) to which RNA polymerase binds, to begin transcription." [xenbase:jb] synonym: "RNA polymerase promoter" EXACT [] is_a: SO:0000167 ! promoter [Term] id: SO:0001204 name: Phage_RNA_Polymerase_Promoter def: "A region (DNA) to which Bacteriophage RNA polymerase binds, to begin transcription." [xenbase:jb] synonym: "Phage RNA Polymerase Promoter" EXACT [] is_a: SO:0001203 ! RNA_polymerase_promoter [Term] id: SO:0001205 name: SP6_RNA_Polymerase_Promoter def: "A region (DNA) to which the SP6 RNA polymerase binds, to begin transcription." [xenbase:jb] synonym: "SP6 RNA Polymerase Promoter" EXACT [] is_a: SO:0001204 ! Phage_RNA_Polymerase_Promoter [Term] id: SO:0001206 name: T3_RNA_Polymerase_Promoter def: "A DNA sequence to which the T3 RNA polymerase binds, to begin transcription." [xenbase:jb] synonym: "T3 RNA Polymerase Promoter" EXACT [] is_a: SO:0001204 ! Phage_RNA_Polymerase_Promoter [Term] id: SO:0001207 name: T7_RNA_Polymerase_Promoter def: "A region (DNA) to which the T7 RNA polymerase binds, to begin transcription." [xenbase:jb] synonym: "T7 RNA Polymerase Promoter" EXACT [] is_a: SO:0001204 ! Phage_RNA_Polymerase_Promoter [Term] id: SO:0001208 name: five_prime_EST def: "An EST read from the 5' end of a transcript that usually codes for a protein. These regions tend to be conserved across species and do not change much within a gene family." [http://www.ncbi.nlm.nih.gov/About/primer/est.html] synonym: "5' EST" EXACT [] synonym: "five prime EST" EXACT [] is_a: SO:0000345 ! EST [Term] id: SO:0001209 name: three_prime_EST def: "An EST read from the 3' end of a transcript. They are more likely to fall within non-coding, or untranslated regions(UTRs)." [http://www.ncbi.nlm.nih.gov/About/primer/est.html] synonym: "3' EST" EXACT [] synonym: "three prime EST" EXACT [] is_a: SO:0000345 ! EST [Term] id: SO:0001210 name: translational_frameshift def: "The region of mRNA (not divisible by 3 bases) that is skipped during the process of translational frameshifting (GO:0006452), causing the reading frame to be different." [SO:ke] synonym: "ribosomal frameshift" EXACT [] synonym: "translational frameshift" EXACT [] xref: http://en.wikipedia.org/wiki/Translational_frameshift "wiki" is_a: SO:0000836 ! mRNA_region [Term] id: SO:0001211 name: plus_1_translational_frameshift def: "The region of mRNA 1 base long that is skipped during the process of translational frameshifting (GO:0006452), causing the reading frame to be different." [SO:ke] synonym: "plus 1 ribosomal frameshift" EXACT [] synonym: "plus 1 translational frameshift" EXACT [] is_a: SO:0001210 ! translational_frameshift [Term] id: SO:0001212 name: plus_2_translational_frameshift def: "The region of mRNA 2 bases long that is skipped during the process of translational frameshifting (GO:0006452), causing the reading frame to be different." [SO:ke] synonym: "plus 2 ribosomal frameshift" EXACT [] synonym: "plus 2 translational frameshift" EXACT [] is_a: SO:0001210 ! translational_frameshift [Term] id: SO:0001213 name: group_III_intron def: "Group III introns are introns found in the mRNA of the plastids of euglenoid protists. They are spliced by a two step transesterification with bulged adenosine as initiating nucleophile." [PMID:11377794] comment: GO:0000374. synonym: "group III intron" EXACT [] xref: http://en.wikipedia.org/wiki/Group_III_intron "wiki" is_a: SO:0000588 ! autocatalytically_spliced_intron [Term] id: SO:0001214 name: noncoding_region_of_exon def: "The maximal intersection of exon and UTR." [SO:ke] comment: An exon either containing but not starting with a start codon or containing but not ending with a stop codon will be partially coding and partially non coding. subset: SOFA synonym: "noncoding region of exon" EXACT [] is_a: SO:0000852 ! exon_region [Term] id: SO:0001215 name: coding_region_of_exon def: "The region of an exon that encodes for protein sequence." [SO:ke] comment: An exon containing either a start or stop codon will be partially coding and partially non coding. subset: SOFA synonym: "coding region of exon" EXACT [] is_a: SO:0000852 ! exon_region [Term] id: SO:0001216 name: endonuclease_spliced_intron def: "An intron that spliced via endonucleolytic cleavage and ligation rather than transesterification." [SO:ke] synonym: "endonuclease spliced intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0001217 name: protein_coding_gene synonym: "protein coding gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000010 ! protein_coding [Term] id: SO:0001218 name: transgenic_insertion def: "An insertion that derives from another organism, via the use of recombinant DNA technology." [SO:bm] synonym: "transgenic insertion" EXACT [] is_a: SO:0000667 ! insertion relationship: has_quality SO:0000781 ! transgenic [Term] id: SO:0001219 name: retrogene is_a: SO:0000704 ! gene relationship: has_quality SO:0000569 ! retrotransposed [Term] id: SO:0001220 name: silenced_by_RNA_interference def: "An attribute describing an epigenetic process where a gene is inactivated by RNA interference." [RSC:cb] comment: RNA interference is GO:0016246. synonym: "silenced by RNA interference" EXACT [] is_a: SO:0000893 ! silenced [Term] id: SO:0001221 name: silenced_by_histone_modification def: "An attribute describing an epigenetic process where a gene is inactivated by histone modification." [RSC:cb] comment: Histone modification is GO:0016570. synonym: "silenced by histone modification" EXACT [] is_a: SO:0000893 ! silenced [Term] id: SO:0001222 name: silenced_by_histone_methylation def: "An attribute describing an epigenetic process where a gene is inactivated by histone methylation." [RSC:cb] comment: Histone methylation is GO:0016571. synonym: "silenced by histone methylation" EXACT [] is_a: SO:0001221 ! silenced_by_histone_modification [Term] id: SO:0001223 name: silenced_by_histone_deacetylation def: "An attribute describing an epigenetic process where a gene is inactivated by histone deacetylation." [RSC:cb] comment: Histone deacetylation is GO:0016573. synonym: "silenced by histone deacetylation" EXACT [] is_a: SO:0001221 ! silenced_by_histone_modification [Term] id: SO:0001224 name: gene_silenced_by_RNA_interference def: "A gene that is silenced by RNA interference." [SO:xp] synonym: "gene silenced by RNA interference" EXACT [] synonym: "RNA interference silenced gene" EXACT [] synonym: "RNAi silenced gene" EXACT [] is_a: SO:0000127 ! silenced_gene relationship: has_quality SO:0001220 ! silenced_by_RNA_interference [Term] id: SO:0001225 name: gene_silenced_by_histone_modification def: "A gene that is silenced by histone modification." [SO:xp] synonym: "gene silenced by histone modification" EXACT [] is_a: SO:0000127 ! silenced_gene relationship: has_quality SO:0001221 ! silenced_by_histone_modification [Term] id: SO:0001226 name: gene_silenced_by_histone_methylation def: "A gene that is silenced by histone methylation." [SO:xp] synonym: "gene silenced by histone methylation" EXACT [] is_a: SO:0001225 ! gene_silenced_by_histone_modification relationship: has_quality SO:0001222 ! silenced_by_histone_methylation [Term] id: SO:0001227 name: gene_silenced_by_histone_deacetylation def: "A gene that is silenced by histone deacetylation." [SO:xp] synonym: "gene silenced by histone deacetylation" EXACT [] is_a: SO:0001225 ! gene_silenced_by_histone_modification relationship: has_quality SO:0001223 ! silenced_by_histone_deacetylation [Term] id: SO:0001228 name: dihydrouridine def: "A modified RNA base in which the 5,6-dihydrouracil is bound to the ribose ring." [RSC:cb] synonym: "D" EXACT RNAMOD [] xref: http://en.wikipedia.org/wiki/Dihydrouridine "wiki" xref: RNAMOD:051 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001229 name: pseudouridine def: "A modified RNA base in which the 5- position of the uracil is bound to the ribose ring instead of the 4- position." [RSC:cb] comment: The free molecule is CHEBI:17802. synonym: "Y" EXACT RNAMOD [] xref: http://en.wikipedia.org/wiki/Pseudouridine "wiki" xref: RNAMOD:050 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001230 name: inosine def: "A modified RNA base in which hypoxanthine is bound to the ribose ring." [http://library.med.utah.edu/RNAmods/, RSC:cb] comment: The free molecule is CHEBI:17596. synonym: "I" RELATED [] synonym: "RNAMOD:017" RELATED [] xref: http://en.wikipedia.org/wiki/Inosine "wiki" is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001231 name: seven_methylguanine def: "A modified RNA base in which guanine is methylated at the 7- position." [RSC:cb] comment: The free molecule is CHEBI:2274. synonym: "7-methylguanine" EXACT [] synonym: "seven methylguanine" EXACT [] is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001232 name: ribothymidine def: "A modified RNA base in which thymine is bound to the ribose ring." [RSC:cb] comment: The free molecule is CHEBI:30832. is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001233 name: methylinosine def: "A modified RNA base in which methylhypoxanthine is bound to the ribose ring." [RSC:cb] is_a: SO:0001274 ! modified_inosine [Term] id: SO:0001234 name: mobile def: "An attribute describing a feature that has either intra-genome or intracellular mobility." [RSC:cb] xref: http://en.wikipedia.org/wiki/Mobile "wiki" is_a: SO:0000733 ! feature_attribute [Term] id: SO:0001235 name: replicon def: "A region containing at least one unique origin of replication and a unique termination site." [ISBN:0716719207] subset: SOFA xref: http://en.wikipedia.org/wiki/Replicon_(genetics) "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0001236 name: base def: "A base is a sequence feature that corresponds to a single unit of a nucleotide polymer." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Nucleobase "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0001237 name: amino_acid def: "A sequence feature that corresponds to a single amino acid residue in a polypeptide." [RSC:cb] comment: Probably in the future this will cross reference to Chebi. synonym: "amino acid" EXACT [] xref: http://en.wikipedia.org/wiki/Amino_acid "wiki" is_a: SO:0001411 ! biological_region relationship: part_of SO:0000104 ! polypeptide [Term] id: SO:0001238 name: major_TSS synonym: "major transcription start site" EXACT [] synonym: "major TSS" EXACT [] is_a: SO:0000315 ! TSS [Term] id: SO:0001239 name: minor_TSS synonym: "minor TSS" EXACT [] is_a: SO:0000315 ! TSS [Term] id: SO:0001240 name: TSS_region def: "The region of a gene from the 5' most TSS to the 3' TSS." [BBOP:nw] synonym: "TSS region" EXACT [] is_a: SO:0000842 ! gene_component_region relationship: has_part SO:0000315 ! TSS [Term] id: SO:0001241 name: encodes_alternate_transcription_start_sites synonym: "encodes alternate transcription start sites" EXACT [] is_a: SO:0000401 ! gene_attribute [Term] id: SO:0001243 name: miRNA_primary_transcript_region def: "A part of an miRNA primary_transcript." [SO:ke] synonym: "miRNA primary transcript region" EXACT [] is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0001244 name: pre_miRNA def: "The 60-70 nucleotide region remain after Drosha processing of the primary transcript, that folds back upon itself to form a hairpin sructure." [SO:ke] synonym: "pre-miRNA" EXACT [] is_a: SO:0001243 ! miRNA_primary_transcript_region relationship: part_of SO:0000647 ! miRNA_primary_transcript [Term] id: SO:0001245 name: miRNA_stem def: "The stem of the hairpin loop formed by folding of the pre-miRNA." [SO:ke] synonym: "miRNA stem" EXACT [] is_a: SO:0001243 ! miRNA_primary_transcript_region relationship: part_of SO:0001244 ! pre_miRNA [Term] id: SO:0001246 name: miRNA_loop def: "The loop of the hairpin loop formed by folding of the pre-miRNA." [SO:ke] synonym: "miRNA loop" EXACT [] is_a: SO:0001243 ! miRNA_primary_transcript_region relationship: part_of SO:0001244 ! pre_miRNA [Term] id: SO:0001247 name: synthetic_oligo def: "An oligo composed of synthetic nucleotides." [SO:ke] synonym: "synthetic oligo" EXACT [] is_a: SO:0000696 ! oligo [Term] id: SO:0001248 name: assembly def: "A region of the genome of known length that is composed by ordering and aligning two or more different regions." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Genome_assembly#Genome_assembly "wiki" is_a: SO:0001410 ! experimental_feature [Term] id: SO:0001249 name: fragment_assembly def: "A fragment assembly is a genome assembly that orders overlapping fragments of the genome based on landmark sequences. The base pair distance between the landmarks is known allowing additivity of lengths." [SO:ke] synonym: "fragment assembly" EXACT [] synonym: "physical map" EXACT [] is_a: SO:0001248 ! assembly [Term] id: SO:0001250 name: fingerprint_map def: "A fingerprint_map is a physical map composed of restriction fragments." [SO:ke] synonym: "BACmap" EXACT [] synonym: "fingerprint map" EXACT [] synonym: "FPC" EXACT [] synonym: "FPCmap" EXACT [] synonym: "restriction map" EXACT [] is_a: SO:0001249 ! fragment_assembly relationship: has_part SO:0000412 ! restriction_fragment [Term] id: SO:0001251 name: STS_map def: "An STS map is a physical map organized by the unique STS landmarks." [SO:ke] synonym: "STS map" EXACT [] is_a: SO:0001249 ! fragment_assembly relationship: has_part SO:0000331 ! STS [Term] id: SO:0001252 name: RH_map def: "A radiation hybrid map is a physical map." [SO:ke] synonym: "radiation hybrid map" EXACT [] synonym: "RH map" EXACT [] is_a: SO:0001249 ! fragment_assembly relationship: has_part SO:0000331 ! STS [Term] id: SO:0001253 name: sonicate_fragment def: "A DNA fragment generated by sonication. Sonication is a technique used to sheer DNA into smaller fragments." [SO:ke] synonym: "sonicate fragment" EXACT [] is_a: SO:0000143 ! assembly_component [Term] id: SO:0001254 name: polyploid def: "A kind of chromosome variation where the chromosome complement is an exact multiple of the haploid number and is greater than the diploid number." [SO:ke] xref: http://en.wikipedia.org/wiki/Polyploid "wiki" is_a: SO:1000182 ! chromosome_number_variation [Term] id: SO:0001255 name: autopolyploid def: "A polyploid where the multiple chromosome set was derived from the same organism." [SO:ke] xref: http://en.wikipedia.org/wiki/Autopolyploid "wiki" is_a: SO:0001254 ! polyploid [Term] id: SO:0001256 name: allopolyploid def: "A polyploid where the multiple chromosome set was derived from a different organism." [SO:ke] xref: http://en.wikipedia.org/wiki/Allopolyploid "wiki" is_a: SO:0001254 ! polyploid [Term] id: SO:0001257 name: homing_endonuclease_binding_site def: "The binding site (recognition site) of a homing endonuclease. The binding site is typically large." [SO:ke] synonym: "homing endonuclease binding site" EXACT [] is_a: SO:0000059 ! nuclease_binding_site [Term] id: SO:0001258 name: octamer_motif def: "A sequence element characteristic of some RNA polymerase II promoters with sequence ATTGCAT that binds Pou-domain transcription factors." [GOC:dh, PMID:3095662] comment: Nature. 1986 Oct 16-22;323(6089):640-3. synonym: "octamer motif" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000170 ! RNApol_II_promoter [Term] id: SO:0001259 name: apicoplast_chromosome def: "A chromosome originating in an apicoplast." [SO:xp] synonym: "apicoplast chromosome" EXACT [] is_a: SO:0000340 ! chromosome relationship: has_origin SO:0000743 ! apicoplast_sequence [Term] id: SO:0001260 name: sequence_collection def: "A collection of discontinuous sequences." [SO:ke] synonym: "sequence collection" EXACT [] [Term] id: SO:0001261 name: overlapping_feature_set def: "A continuous region of sequence composed of the overlapping of multiple sequence_features, which ultimately provides evidence for another sequence_feature." [SO:ke] comment: This feature was requested by Nicole, tracker id 1911479. It is required to gather evidence together for annotation. An example would be overlapping ESTs that support an mRNA. synonym: "overlapping feature set" EXACT [] is_a: SO:0000703 ! experimental_result_region [Term] id: SO:0001262 name: overlapping_EST_set def: "A continous experimental result region extending the length of multiple overlapping EST's." [SO:ke] synonym: "overlapping EST set" EXACT [] is_a: SO:0001261 ! overlapping_feature_set relationship: has_part SO:0000345 ! EST [Term] id: SO:0001263 name: ncRNA_gene synonym: "ncRNA gen" EXACT [] synonym: "ncRNA gene" EXACT [] synonym: "non-coding RNA gene" RELATED [] is_a: SO:0000704 ! gene [Term] id: SO:0001264 name: gRNA_gene synonym: "gRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene relationship: has_quality SO:0000979 ! gRNA_encoding [Term] id: SO:0001265 name: miRNA_gene synonym: "miRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene relationship: has_quality SO:0000571 ! miRNA_encoding [Term] id: SO:0001266 name: scRNA_gene synonym: "scRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene relationship: has_quality SO:0000575 ! scRNA_encoding [Term] id: SO:0001267 name: snoRNA_gene synonym: "snoRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene relationship: has_quality SO:0000578 ! snoRNA_encoding [Term] id: SO:0001268 name: snRNA_gene synonym: "snRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene relationship: has_quality SO:0001263 ! ncRNA_gene [Term] id: SO:0001269 name: SRP_RNA_gene synonym: "SRP RNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene relationship: has_quality SO:0000642 ! SRP_RNA_encoding [Term] id: SO:0001270 name: stRNA_gene synonym: "stRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene relationship: has_quality SO:0000656 ! stRNA_encoding [Term] id: SO:0001271 name: tmRNA_gene synonym: "tmRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene relationship: has_quality SO:0000659 ! tmRNA_encoding [Term] id: SO:0001272 name: tRNA_gene synonym: "tRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene relationship: has_quality SO:0000663 ! tRNA_encoding [Term] id: SO:0001273 name: modified_adenosine def: "A modified adenine is an adenine base feature that has been altered." [SO:ke] synonym: "modified adenosine" EXACT [] is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001274 name: modified_inosine def: "A modified inosine is an inosine base feature that has been altered." [SO:ke] synonym: "modified inosine" EXACT [] is_a: SO:0001230 ! inosine [Term] id: SO:0001275 name: modified_cytidine def: "A modified cytidine is a cytidine base feature which has been altered." [SO:ke] synonym: "modified cytidine" EXACT [] is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001276 name: modified_guanosine synonym: "modified guanosine" EXACT [] is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001277 name: modified_uridine synonym: "modified uridine" EXACT [] is_a: SO:0000250 ! modified_RNA_base_feature [Term] id: SO:0001278 name: one_methylinosine def: "1-methylinosine is a modified insosine." [http://library.med.utah.edu/RNAmods/] synonym: "1-methylinosine" EXACT [] synonym: "m1I" EXACT RNAMOD [] synonym: "one methylinosine" EXACT [] xref: RNAMOD:018 is_a: SO:0001274 ! modified_inosine [Term] id: SO:0001279 name: one_two_prime_O_dimethylinosine def: "1,2'-O-dimethylinosine is a modified inosine." [http://library.med.utah.edu/RNAmods/] synonym: "1,2'-O-dimethylinosine" EXACT [] synonym: "m'Im" EXACT RNAMOD [] synonym: "one two prime O dimethylinosine" EXACT [] xref: RNAMOD:019 is_a: SO:0001274 ! modified_inosine [Term] id: SO:0001280 name: two_prime_O_methylinosine def: "2'-O-methylinosine is a modified inosine." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methylinosine" EXACT [] synonym: "Im" EXACT RNAMOD [] synonym: "two prime O methylinosine" EXACT [] xref: RNAMOD:081 is_a: SO:0001274 ! modified_inosine [Term] id: SO:0001281 name: three_methylcytidine def: "3-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "3-methylcytidine" EXACT [] synonym: "m3C" EXACT RNAMOD [] synonym: "three methylcytidine" EXACT [] xref: RNAMOD:020 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001282 name: five_methylcytidine def: "5-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "5-methylcytidine" EXACT [] synonym: "five methylcytidine" EXACT [] synonym: "m5C" EXACT RNAMOD [] xref: RNAMOD:021 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001283 name: two_prime_O_methylcytidine def: "2'-O-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methylcytidine" EXACT [] synonym: "Cm" EXACT RNAMOD [] synonym: "two prime O methylcytidine" EXACT [] xref: RNAMOD:022 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001284 name: two_thiocytidine def: "2-thiocytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "2-thiocytidine" EXACT [] synonym: "s2C" EXACT RNAMOD [] synonym: "two thiocytidine" EXACT [] xref: RNAMOD:023 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001285 name: N4_acetylcytidine def: "N4-acetylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "ac4C" EXACT RNAMOD [] synonym: "N4 acetylcytidine" EXACT [] synonym: "N4-acetylcytidine" EXACT [] xref: RNAMOD:024 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001286 name: five_formylcytidine def: "5-formylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "5-formylcytidine" EXACT [] synonym: "f5C" EXACT RNAMOD [] synonym: "five formylcytidine" EXACT [] xref: RNAMOD:025 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001287 name: five_two_prime_O_dimethylcytidine def: "5,2'-O-dimethylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "5,2'-O-dimethylcytidine" EXACT [] synonym: "five two prime O dimethylcytidine" EXACT [] synonym: "m5Cm" EXACT RNAMOD [] xref: RNAMOD:026 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001288 name: N4_acetyl_2_prime_O_methylcytidine def: "N4-acetyl-2'-O-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "ac4Cm" EXACT RNAMOD [] synonym: "N4 acetyl 2 prime O methylcytidine" EXACT [] synonym: "N4-acetyl-2'-O-methylcytidine" EXACT [] xref: RNAMOD:027 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001289 name: lysidine def: "Lysidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "k2C" EXACT RNAMOD [] xref: http://en.wikipedia.org/wiki/Lysidine "wiki" xref: RNAMOD:028 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001290 name: N4_methylcytidine def: "N4-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "m4C" EXACT RNAMOD [] synonym: "N4 methylcytidine" EXACT [] synonym: "N4-methylcytidine" EXACT [] xref: RNAMOD:082 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001291 name: N4_2_prime_O_dimethylcytidine def: "N4,2'-O-dimethylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "m4Cm" EXACT RNAMOD [] synonym: "N4 2 prime O dimethylcytidine" EXACT [] synonym: "N4,2'-O-dimethylcytidine" EXACT [] xref: RNAMOD:083 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001292 name: five_hydroxymethylcytidine def: "5-hydroxymethylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "5-hydroxymethylcytidine" EXACT [] synonym: "five hydroxymethylcytidine" EXACT [] synonym: "hm5C" EXACT RNAMOD [] xref: RNAMOD:084 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001293 name: five_formyl_two_prime_O_methylcytidine def: "5-formyl-2'-O-methylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "5-formyl-2'-O-methylcytidine" EXACT [] synonym: "f5Cm" EXACT RNAMOD [] synonym: "five formyl two prime O methylcytidine" EXACT [] xref: RNAMOD:095 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001294 name: N4_N4_2_prime_O_trimethylcytidine def: "N4_N4_2_prime_O_trimethylcytidine is a modified cytidine." [http://library.med.utah.edu/RNAmods/] synonym: "m42Cm" EXACT RNAMOD [] synonym: "N4,N4,2'-O-trimethylcytidine" EXACT [] xref: RNAMOD:107 is_a: SO:0001275 ! modified_cytidine [Term] id: SO:0001295 name: one_methyladenosine def: "1_methyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "1-methyladenosine" EXACT [] synonym: "m1A" EXACT RNAMOD [] synonym: "one methyladenosine" EXACT [] xref: RNAMOD:001 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001296 name: two_methyladenosine def: "2_methyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methyladenosine" EXACT [] synonym: "m2A" EXACT RNAMOD [] synonym: "two methyladenosine" EXACT [] xref: RNAMOD:002 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001297 name: N6_methyladenosine def: "N6_methyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "m6A" EXACT RNAMOD [] synonym: "N6 methyladenosine" EXACT [] synonym: "N6-methyladenosine" EXACT [] xref: RNAMOD:003 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001298 name: two_prime_O_methyladenosine def: "2prime_O_methyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methyladenosine" EXACT [] synonym: "Am" EXACT RNAMOD [] synonym: "two prime O methyladenosine" EXACT [] xref: RNAMOD:004 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001299 name: two_methylthio_N6_methyladenosine def: "2_methylthio_N6_methyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methylthio-N6-methyladenosine" EXACT [] synonym: "ms2m6A" EXACT RNAMOD [] synonym: "two methylthio N6 methyladenosine" EXACT [] xref: RNAMOD:005 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001300 name: N6_isopentenyladenosine def: "N6_isopentenyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "i6A" EXACT RNAMOD [] synonym: "N6 isopentenyladenosine" EXACT [] synonym: "N6-isopentenyladenosine" EXACT [] xref: RNAMOD:006 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001301 name: two_methylthio_N6_isopentenyladenosine def: "2_methylthio_N6_isopentenyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methylthio-N6-isopentenyladenosine" EXACT [] synonym: "ms2i6A" EXACT RNAMOD [] synonym: "two methylthio N6 isopentenyladenosine" EXACT [] xref: RNAMOD:007 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001302 name: N6_cis_hydroxyisopentenyl_adenosine def: "N6_cis_hydroxyisopentenyl_adenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "io6A" EXACT RNAMOD [] synonym: "N6 cis hydroxyisopentenyl adenosine" EXACT [] synonym: "N6-(cis-hydroxyisopentenyl)adenosine" EXACT [] xref: RNAMOD:008 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001303 name: two_methylthio_N6_cis_hydroxyisopentenyl_adenosine def: "2_methylthio_N6_cis_hydroxyisopentenyl_adenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methylthio-N6-(cis-hydroxyisopentenyl) adenosine" EXACT [] synonym: "ms2io6A" EXACT RNAMOD [] synonym: "two methylthio N6 cis hydroxyisopentenyl adenosine" EXACT [] xref: RNAMOD:009 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001304 name: N6_glycinylcarbamoyladenosine def: "N6_glycinylcarbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "g6A" EXACT RNAMOD [] synonym: "N6 glycinylcarbamoyladenosine" EXACT [] synonym: "N6-glycinylcarbamoyladenosine" EXACT [] xref: RNAMOD:010 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001305 name: N6_threonylcarbamoyladenosine def: "N6_threonylcarbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "N6 threonylcarbamoyladenosine" EXACT [] synonym: "N6-threonylcarbamoyladenosine" EXACT [] synonym: "t6A" EXACT RNAMOD [] xref: RNAMOD:011 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001306 name: two_methylthio_N6_threonyl_carbamoyladenosine def: "2_methylthio_N6_threonyl_carbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methylthio-N6-threonyl carbamoyladenosine" EXACT [] synonym: "ms2t6A" EXACT RNAMOD [] synonym: "two methylthio N6 threonyl carbamoyladenosine" EXACT [] xref: RNAMOD:012 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001307 name: N6_methyl_N6_threonylcarbamoyladenosine def: "N6_methyl_N6_threonylcarbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "m6t6A" EXACT RNAMOD [] synonym: "N6 methyl N6 threonylcarbamoyladenosine" EXACT [] synonym: "N6-methyl-N6-threonylcarbamoyladenosine" EXACT [] xref: RNAMOD:013 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001308 name: N6_hydroxynorvalylcarbamoyladenosine def: "N6_hydroxynorvalylcarbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "hn6A" EXACT RNAMOD [] synonym: "N6 hydroxynorvalylcarbamoyladenosine" EXACT [] synonym: "N6-hydroxynorvalylcarbamoyladenosine" EXACT [] xref: RNAMOD:014 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001309 name: two_methylthio_N6_hydroxynorvalyl_carbamoyladenosine def: "2_methylthio_N6_hydroxynorvalyl_carbamoyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2-methylthio-N6-hydroxynorvalyl carbamoyladenosine" EXACT [] synonym: "ms2hn6A" EXACT RNAMOD [] synonym: "two methylthio N6 hydroxynorvalyl carbamoyladenosine" EXACT [] xref: RNAMOD:015 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001310 name: two_prime_O_ribosyladenosine_phosphate def: "2prime_O_ribosyladenosine_phosphate is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-ribosyladenosine (phosphate)" EXACT [] synonym: "Ar(p)" EXACT RNAMOD [] synonym: "two prime O ribosyladenosine phosphate" EXACT [] xref: RNAMOD:016 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001311 name: N6_N6_dimethyladenosine def: "N6_N6_dimethyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "m62A" EXACT RNAMOD [] synonym: "N6,N6-dimethyladenosine" EXACT [] xref: RNAMOD:080 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001312 name: N6_2_prime_O_dimethyladenosine def: "N6_2prime_O_dimethyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "m6Am" EXACT RNAMOD [] synonym: "N6 2 prime O dimethyladenosine" EXACT [] synonym: "N6,2'-O-dimethyladenosine" EXACT [] xref: RNAMOD:088 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001313 name: N6_N6_2_prime_O_trimethyladenosine def: "N6_N6_2prime_O_trimethyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "m62Am" EXACT RNAMOD [] synonym: "N6,N6,2'-O-trimethyladenosine" EXACT [] xref: RNAMOD:089 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001314 name: one_two_prime_O_dimethyladenosine def: "1,2'-O-dimethyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "1,2'-O-dimethyladenosine" EXACT [] synonym: "m1Am" EXACT RNAMOD [] synonym: "one two prime O dimethyladenosine" EXACT [] xref: RNAMOD:097 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001315 name: N6_acetyladenosine def: "N6_acetyladenosine is a modified adenosine." [http://library.med.utah.edu/RNAmods/] synonym: "ac6A" EXACT RNAMOD [] synonym: "N6 acetyladenosine" EXACT [] synonym: "N6-acetyladenosine" EXACT [] xref: RNAMOD:102 is_a: SO:0001273 ! modified_adenosine [Term] id: SO:0001316 name: seven_deazaguanosine def: "7-deazaguanosine is a moddified guanosine." [http://library.med.utah.edu/RNAmods/] synonym: "7-deazaguanosine" RELATED [] synonym: "seven deazaguanosine" EXACT [] is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001317 name: queuosine def: "Queuosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "Q" EXACT RNAMOD [] xref: http://en.wikipedia.org/wiki/Queuosine "wiki" xref: RNAMOD:043 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001318 name: epoxyqueuosine def: "Epoxyqueuosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "eQ" EXACT RNAMOD [] xref: RNAMOD:044 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001319 name: galactosyl_queuosine def: "Galactosyl_queuosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "galactosyl queuosine" EXACT [] synonym: "galactosyl-queuosine" EXACT [] synonym: "galQ" EXACT RNAMOD [] xref: RNAMOD:045 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001320 name: mannosyl_queuosine def: "Mannosyl_queuosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "mannosyl queuosine" EXACT [] synonym: "mannosyl-queuosine" EXACT [] synonym: "manQ" EXACT RNAMOD [] xref: RNAMOD:046 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001321 name: seven_cyano_seven_deazaguanosine def: "7_cyano_7_deazaguanosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "7-cyano-7-deazaguanosine" EXACT [] synonym: "preQ0" EXACT RNAMOD [] synonym: "seven cyano seven deazaguanosine" EXACT [] xref: RNAMOD:047 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001322 name: seven_aminomethyl_seven_deazaguanosine def: "7_aminomethyl_7_deazaguanosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "7-aminomethyl-7-deazaguanosine" EXACT [] synonym: "preQ1" EXACT RNAMOD [] synonym: "seven aminomethyl seven deazaguanosine" EXACT [] xref: RNAMOD:048 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001323 name: archaeosine def: "Archaeosine is a modified 7-deazoguanosine." [http://library.med.utah.edu/RNAmods/] synonym: "G+" EXACT RNAMOD [] xref: RNAMOD:049 is_a: SO:0001316 ! seven_deazaguanosine [Term] id: SO:0001324 name: one_methylguanosine def: "1_methylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "1-methylguanosine" EXACT [] synonym: "m1G" EXACT RNAMOD [] synonym: "one methylguanosine" EXACT [] xref: RNAMOD:029 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001325 name: N2_methylguanosine def: "N2_methylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m2G" EXACT RNAMOD [] synonym: "N2 methylguanosine" EXACT [] synonym: "N2-methylguanosine" EXACT [] xref: RNAMOD:030 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001326 name: seven_methylguanosine def: "7_methylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "7-methylguanosine" EXACT [] synonym: "m7G" EXACT RNAMOD [] synonym: "seven methylguanosine" EXACT [] xref: RNAMOD:031 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001327 name: two_prime_O_methylguanosine def: "2prime_O_methylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methylguanosine" EXACT [] synonym: "Gm" EXACT RNAMOD [] synonym: "two prime O methylguanosine" EXACT [] xref: RNAMOD:032 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001328 name: N2_N2_dimethylguanosine def: "N2_N2_dimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m22G" EXACT RNAMOD [] synonym: "N2,N2-dimethylguanosine" EXACT [] xref: RNAMOD:033 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001329 name: N2_2_prime_O_dimethylguanosine def: "N2_2prime_O_dimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m2Gm" EXACT RNAMOD [] synonym: "N2 2 prime O dimethylguanosine" EXACT [] synonym: "N2,2'-O-dimethylguanosine" EXACT [] xref: RNAMOD:034 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001330 name: N2_N2_2_prime_O_trimethylguanosine def: "N2_N2_2prime_O_trimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m22Gmv" EXACT RNAMOD [] synonym: "N2,N2,2'-O-trimethylguanosine" EXACT [] xref: RNAMOD:035 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001331 name: two_prime_O_ribosylguanosine_phosphate def: "2prime_O_ribosylguanosine_phosphate is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-ribosylguanosine (phosphate)" EXACT [] synonym: "Gr(p)" EXACT RNAMOD [] synonym: "two prime O ribosylguanosine phosphate" EXACT [] xref: RNAMOD:036 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001332 name: wybutosine def: "Wybutosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "yW" EXACT RNAMOD [] xref: RNAMOD:037 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001333 name: peroxywybutosine def: "Peroxywybutosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "o2yW" EXACT RNAMOD [] xref: RNAMOD:038 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001334 name: hydroxywybutosine def: "Hydroxywybutosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "OHyW" EXACT RNAMOD [] xref: RNAMOD:039 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001335 name: undermodified_hydroxywybutosine def: "Undermodified_hydroxywybutosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "OHyW*" EXACT RNAMOD [] synonym: "undermodified hydroxywybutosine" EXACT [] xref: RNAMOD:040 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001336 name: wyosine def: "Wyosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "IMG" EXACT RNAMOD [] xref: RNAMOD:041 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001337 name: methylwyosine def: "Methylwyosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "mimG" EXACT RNAMOD [] xref: RNAMOD:042 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001338 name: N2_7_dimethylguanosine def: "N2_7_dimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m2,7G" EXACT RNAMOD [] synonym: "N2 7 dimethylguanosine" EXACT [] synonym: "N2,7-dimethylguanosine" EXACT [] xref: RNAMOD:090 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001339 name: N2_N2_7_trimethylguanosine def: "N2_N2_7_trimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m2,2,7G" EXACT RNAMOD [] synonym: "N2,N2,7-trimethylguanosine" EXACT [] xref: RNAMOD:091 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001340 name: one_two_prime_O_dimethylguanosine def: "1_2prime_O_dimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "1,2'-O-dimethylguanosine" EXACT [] synonym: "m1Gm" EXACT RNAMOD [] synonym: "one two prime O dimethylguanosine" EXACT [] xref: RNAMOD:096 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001341 name: four_demethylwyosine def: "4_demethylwyosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "4-demethylwyosine" EXACT [] synonym: "four demethylwyosine" EXACT [] synonym: "imG-14" EXACT RNAMOD [] xref: RNAMOD:100 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001342 name: isowyosine def: "Isowyosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "imG2" EXACT RNAMOD [] xref: RNAMOD:101 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001343 name: N2_7_2prirme_O_trimethylguanosine def: "N2_7_2prirme_O_trimethylguanosine is a modified guanosine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "m2,7Gm" EXACT RNAMOD [] synonym: "N2 7 2prirme O trimethylguanosine" EXACT [] synonym: "N2,7,2'-O-trimethylguanosine" EXACT [] xref: RNAMOD:106 is_a: SO:0001276 ! modified_guanosine [Term] id: SO:0001344 name: five_methyluridine def: "5_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methyluridine" EXACT [] synonym: "five methyluridine" EXACT [] synonym: "m5U" EXACT RNAMOD [] xref: http://en.wikipedia.org/wiki/5-methyluridine "wiki" xref: RNAMOD:052 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001345 name: two_prime_O_methyluridine def: "2prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methyluridine" EXACT [] synonym: "two prime O methyluridine" EXACT [] synonym: "Um" EXACT RNAMOD [] xref: RNAMOD:053 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001346 name: five_two_prime_O_dimethyluridine def: "5_2_prime_O_dimethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5,2'-O-dimethyluridine" EXACT [] synonym: "five two prime O dimethyluridine" EXACT [] synonym: "m5Um" EXACT RNAMOD [] xref: RNAMOD:054 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001347 name: one_methylpseudouridine def: "1_methylpseudouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "1-methylpseudouridine" EXACT [] synonym: "m1Y" EXACT RNAMOD [] synonym: "one methylpseudouridine" EXACT [] xref: RNAMOD:055 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001348 name: two_prime_O_methylpseudouridine def: "2prime_O_methylpseudouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2'-O-methylpseudouridine" EXACT [] synonym: "two prime O methylpseudouridine" EXACT [] synonym: "Ym" EXACT RNAMOD [] xref: RNAMOD:056 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001349 name: two_thiouridine def: "2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2-thiouridine" EXACT [] synonym: "s2U" EXACT RNAMOD [] synonym: "two thiouridine" EXACT [] xref: RNAMOD:057 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001350 name: four_thiouridine def: "4_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "4-thiouridine" EXACT [] synonym: "four thiouridine" EXACT [] synonym: "s4U" EXACT RNAMOD [] xref: RNAMOD:058 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001351 name: five_methyl_2_thiouridine def: "5_methyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methyl-2-thiouridine" EXACT [] synonym: "five methyl 2 thiouridine" EXACT [] synonym: "m5s2U" EXACT RNAMOD [] xref: RNAMOD:059 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001352 name: two_thio_two_prime_O_methyluridine def: "2_thio_2prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "2-thio-2'-O-methyluridine" EXACT [] synonym: "s2Um" EXACT RNAMOD [] synonym: "two thio two prime O methyluridine" EXACT [] xref: RNAMOD:060 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001353 name: three_three_amino_three_carboxypropyl_uridine def: "3_3_amino_3_carboxypropyl_uridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "3-(3-amino-3-carboxypropyl)uridine" EXACT [] synonym: "acp3U" EXACT RNAMOD [] xref: RNAMOD:061 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001354 name: five_hydroxyuridine def: "5_hydroxyuridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-hydroxyuridine" EXACT [] synonym: "five hydroxyuridine" EXACT [] synonym: "ho5U" EXACT RNAMOD [] xref: RNAMOD:060 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001355 name: five_methoxyuridine def: "5_methoxyuridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methoxyuridine" EXACT [] synonym: "five methoxyuridine" EXACT [] synonym: "mo5U" EXACT RNAMOD [] xref: RNAMOD:063 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001356 name: uridine_five_oxyacetic_acid def: "Uridine_5_oxyacetic_acid is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "cmo5U" EXACT RNAMOD [] synonym: "uridine 5-oxyacetic acid" EXACT [] synonym: "uridine five oxyacetic acid" EXACT [] xref: RNAMOD:064 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001357 name: uridine_five_oxyacetic_acid_methyl_ester def: "Uridine_5_oxyacetic_acid_methyl_ester is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "mcmo5U" EXACT RNAMOD [] synonym: "uridine 5-oxyacetic acid methyl ester" EXACT [] synonym: "uridine five oxyacetic acid methyl ester" EXACT [] xref: RNAMOD:065 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001358 name: five_carboxyhydroxymethyl_uridine def: "5_carboxyhydroxymethyl_uridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-(carboxyhydroxymethyl)uridine" EXACT [] synonym: "chm5U" EXACT RNAMOD [] synonym: "five carboxyhydroxymethyl uridine" EXACT [] xref: RNAMOD:066 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001359 name: five_carboxyhydroxymethyl_uridine_methyl_ester def: "5_carboxyhydroxymethyl_uridine_methyl_ester is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-(carboxyhydroxymethyl)uridine methyl ester" EXACT [] synonym: "five carboxyhydroxymethyl uridine methyl ester" EXACT [] synonym: "mchm5U" EXACT RNAMOD [] xref: RNAMOD:067 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001360 name: five_methoxycarbonylmethyluridine def: "Five_methoxycarbonylmethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methoxycarbonylmethyluridine" EXACT [] synonym: "five methoxycarbonylmethyluridine" EXACT [] synonym: "mcm5U" EXACT RNAMOD [] xref: RNAMOD:068 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001361 name: five_methoxycarbonylmethyl_two_prime_O_methyluridine def: "Five_methoxycarbonylmethyl_2_prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methoxycarbonylmethyl-2'-O-methyluridine" EXACT [] synonym: "five methoxycarbonylmethyl two prime O methyluridine" EXACT [] synonym: "mcm5Um" EXACT RNAMOD [] xref: RNAMOD:069 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001362 name: five_methoxycarbonylmethyl_two_thiouridine def: "5_methoxycarbonylmethyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methoxycarbonylmethyl-2-thiouridine" EXACT [] synonym: "five methoxycarbonylmethyl two thiouridine" EXACT [] synonym: "mcm5s2U" EXACT RNAMOD [] xref: RNAMOD:070 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001363 name: five_aminomethyl_two_thiouridine def: "5_aminomethyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-aminomethyl-2-thiouridine" EXACT [] synonym: "five aminomethyl two thiouridine" EXACT [] synonym: "nm5s2U" EXACT RNAMOD [] xref: RNAMOD:071 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001364 name: five_methylaminomethyluridine def: "5_methylaminomethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methylaminomethyluridine" EXACT [] synonym: "five methylaminomethyluridine" EXACT [] synonym: "mnm5U" EXACT RNAMOD [] xref: RNAMOD:072 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001365 name: five_methylaminomethyl_two_thiouridine def: "5_methylaminomethyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methylaminomethyl-2-thiouridine" EXACT [] synonym: "five methylaminomethyl two thiouridine" EXACT [] synonym: "mnm5s2U" EXACT RNAMOD [] xref: RNAMOD:073 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001366 name: five_methylaminomethyl_two_selenouridine def: "5_methylaminomethyl_2_selenouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methylaminomethyl-2-selenouridine" EXACT [] synonym: "five methylaminomethyl two selenouridine" EXACT [] synonym: "mnm5se2U" EXACT RNAMOD [] xref: RNAMOD:074 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001367 name: five_carbamoylmethyluridine def: "5_carbamoylmethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carbamoylmethyluridine" EXACT [] synonym: "five carbamoylmethyluridine" EXACT [] synonym: "ncm5U" EXACT RNAMOD [] xref: RNAMOD:075 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001368 name: five_carbamoylmethyl_two_prime_O_methyluridine def: "5_carbamoylmethyl_2_prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carbamoylmethyl-2'-O-methyluridine" EXACT [] synonym: "five carbamoylmethyl two prime O methyluridine" EXACT [] synonym: "ncm5Um" EXACT RNAMOD [] xref: RNAMOD:076 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001369 name: five_carboxymethylaminomethyluridine def: "5_carboxymethylaminomethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carboxymethylaminomethyluridine" EXACT [] synonym: "cmnm5U" EXACT RNAMOD [] synonym: "five carboxymethylaminomethyluridine" EXACT [] xref: RNAMOD:077 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001370 name: five_carboxymethylaminomethyl_two_prime_O_methyluridine def: "5_carboxymethylaminomethyl_2_prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carboxymethylaminomethyl- 2'-O-methyluridine" EXACT [] synonym: "cmnm5Um" EXACT RNAMOD [] synonym: "five carboxymethylaminomethyl two prime O methyluridine" EXACT [] xref: RNAMOD:078 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001371 name: five_carboxymethylaminomethyl_two_thiouridine def: "5_carboxymethylaminomethyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carboxymethylaminomethyl-2-thiouridine" EXACT [] synonym: "cmnm5s2U" EXACT RNAMOD [] synonym: "five carboxymethylaminomethyl two thiouridine" EXACT [] xref: RNAMOD:079 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001372 name: three_methyluridine def: "3_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "3-methyluridine" EXACT [] synonym: "m3U" EXACT RNAMOD [] synonym: "three methyluridine" EXACT [] xref: RNAMOD:085 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001373 name: one_methyl_three_three_amino_three_carboxypropyl_pseudouridine def: "1_methyl_3_3_amino_3_carboxypropyl_pseudouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "1-methyl-3-(3-amino-3-carboxypropyl) pseudouridine" EXACT [] synonym: "m1acp3Y" EXACT RNAMOD [] xref: RNAMOD:086 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001374 name: five_carboxymethyluridine def: "5_carboxymethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-carboxymethyluridine" EXACT [] synonym: "cm5U" EXACT RNAMOD [] synonym: "five carboxymethyluridine" EXACT [] xref: RNAMOD:087 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001375 name: three_two_prime_O_dimethyluridine def: "3_2prime_O_dimethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "3,2'-O-dimethyluridine" EXACT [] synonym: "m3Um" EXACT RNAMOD [] synonym: "three two prime O dimethyluridine" EXACT [] xref: RNAMOD:092 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001376 name: five_methyldihydrouridine def: "5_methyldihydrouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-methyldihydrouridine" EXACT [] synonym: "five methyldihydrouridine" EXACT [] synonym: "m5D" EXACT RNAMOD [] xref: RNAMOD:093 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001377 name: three_methylpseudouridine def: "3_methylpseudouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "3-methylpseudouridine" EXACT [] synonym: "m3Y" EXACT RNAMOD [] synonym: "three methylpseudouridine" EXACT [] xref: RNAMOD:094 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001378 name: five_taurinomethyluridine def: "5_taurinomethyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-taurinomethyluridine" EXACT [] synonym: "five taurinomethyluridine" EXACT [] synonym: "tm5U" EXACT RNAMOD [] xref: RNAMOD:098 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001379 name: five_taurinomethyl_two_thiouridine def: "5_taurinomethyl_2_thiouridineis a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-taurinomethyl-2-thiouridine" EXACT [] synonym: "five taurinomethyl two thiouridine" EXACT [] synonym: "tm5s2U" EXACT RNAMOD [] xref: RNAMOD:099 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001380 name: five_isopentenylaminomethyl_uridine def: "5_isopentenylaminomethyl_uridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-(isopentenylaminomethyl)uridine" EXACT [] synonym: "five isopentenylaminomethyl uridine" EXACT [] synonym: "inm5U" EXACT RNAMOD [] xref: RNAMOD:103 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001381 name: five_isopentenylaminomethyl_two_thiouridine def: "5_isopentenylaminomethyl_2_thiouridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-(isopentenylaminomethyl)- 2-thiouridine" EXACT [] synonym: "five isopentenylaminomethyl two thiouridine" EXACT [] synonym: "inm5s2U" EXACT RNAMOD [] xref: RNAMOD:104 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001382 name: five_isopentenylaminomethyl_two_prime_O_methyluridine def: "5_isopentenylaminomethyl_2prime_O_methyluridine is a modified uridine base feature." [http://library.med.utah.edu/RNAmods/] synonym: "5-(isopentenylaminomethyl)- 2'-O-methyluridine" EXACT [] synonym: "five isopentenylaminomethyl two prime O methyluridine" EXACT [] synonym: "inm5Um" EXACT RNAMOD [] xref: RNAMOD:105 is_a: SO:0001277 ! modified_uridine [Term] id: SO:0001383 name: histone_binding_site def: "A binding site that, in the nucleotide molecule, interacts selectively and non-covalently with polypeptide residues of a histone." [SO:ke] synonym: "histone binding site" EXACT [] is_a: SO:0001654 ! nucleotide_to_protein_binding_site [Term] id: SO:0001384 name: CDS_fragment synonym: "CDS fragment" EXACT [] synonym: "incomplete CDS" EXACT [] is_a: SO:0000316 ! CDS relationship: has_quality SO:0000731 ! fragmentary [Term] id: SO:0001385 name: modified_amino_acid_feature def: "A post translationally modified amino acid feature." [SO:ke] synonym: "modified amino acid feature" EXACT [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001386 name: modified_glycine def: "A post translationally modified glycine amino acid feature." [SO:ke] synonym: "ModGly" EXACT AAMOD [] synonym: "modified glycine" EXACT [] xref: MOD:00908 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001387 name: modified_L_alanine def: "A post translationally modified alanine amino acid feature." [SO:ke] synonym: "ModAla" EXACT AAMOD [] synonym: "modified L alanine" EXACT [] synonym: "modified L-alanine" EXACT [] xref: MOD:00901 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001388 name: modified_L_asparagine def: "A post translationally modified asparagine amino acid feature." [SO:ke] synonym: "ModAsn" EXACT AAMOD [] synonym: "modified L asparagine" EXACT [] synonym: "modified L-asparagine" EXACT [] xref: MOD:00903 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001389 name: modified_L_aspartic_acid def: "A post translationally modified aspartic acid amino acid feature." [SO:ke] synonym: "ModAsp" EXACT AAMOD [] synonym: "modified L aspartic acid" EXACT [] synonym: "modified L-aspartic acid" EXACT [] xref: MOD:00904 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001390 name: modified_L_cysteine def: "A post translationally modified cysteine amino acid feature." [SO:ke] synonym: "ModCys" EXACT AAMOD [] synonym: "modified L cysteine" EXACT [] synonym: "modified L-cysteine" EXACT [] xref: MOD:00905 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001391 name: modified_L_glutamic_acid synonym: "ModGlu" EXACT AAMOD [] synonym: "modified L glutamic acid" EXACT [] synonym: "modified L-glutamic acid" EXACT [] xref: MOD:00906 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001392 name: modified_L_threonine def: "A post translationally modified threonine amino acid feature." [SO:ke] synonym: "modified L threonine" EXACT [] synonym: "modified L-threonine" EXACT [] synonym: "ModThr" EXACT AAMOD [] xref: MOD:00917 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001393 name: modified_L_tryptophan def: "A post translationally modified tryptophan amino acid feature." [SO:ke] synonym: "modified L tryptophan" EXACT [] synonym: "modified L-tryptophan" EXACT [] synonym: "ModTrp" EXACT AAMOD [] xref: MOD:00918 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001394 name: modified_L_glutamine def: "A post translationally modified glutamine amino acid feature." [SO:ke] synonym: "ModGln" EXACT [] synonym: "modified L glutamine" EXACT [] synonym: "modified L-glutamine" EXACT [] xref: MOD:00907 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001395 name: modified_L_methionine def: "A post translationally modified methionine amino acid feature." [SO:ke] synonym: "modified L methionine" EXACT [] synonym: "modified L-methionine" EXACT [] synonym: "ModMet" EXACT AAMOD [] xref: MOD:00913 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001396 name: modified_L_isoleucine def: "A post translationally modified isoleucine amino acid feature." [SO:ke] synonym: "modified L isoleucine" EXACT [] synonym: "modified L-isoleucine" EXACT [] synonym: "ModIle" EXACT AAMOD [] xref: MOD:00910 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001397 name: modified_L_phenylalanine def: "A post translationally modified phenylalanine amino acid feature." [SO:ke] synonym: "modified L phenylalanine" EXACT [] synonym: "modified L-phenylalanine" EXACT [] synonym: "ModPhe" EXACT AAMOD [] xref: MOD:00914 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001398 name: modified_L_histidine def: "A post translationally modified histidie amino acid feature." [SO:ke] synonym: "ModHis" EXACT [] synonym: "modified L histidine" EXACT [] synonym: "modified L-histidine" EXACT [] xref: MOD:00909 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001399 name: modified_L_serine def: "A post translationally modified serine amino acid feature." [SO:ke] synonym: "modified L serine" EXACT [] synonym: "modified L-serine" EXACT [] synonym: "MosSer" EXACT AAMOD [] xref: MOD:00916 "http://www.psidev.info/index.php?q=node/104" is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001400 name: modified_L_lysine def: "A post translationally modified lysine amino acid feature." [SO:ke] synonym: "modified L lysine" EXACT [] synonym: "modified L-lysine" EXACT [] synonym: "ModLys" EXACT AAMOD [] xref: MOD:00912 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001401 name: modified_L_leucine def: "A post translationally modified leucine amino acid feature." [SO:ke] synonym: "modified L leucine" EXACT [] synonym: "modified L-leucine " EXACT [] synonym: "ModLeu" EXACT AAMOD [] xref: MOD:00911 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001402 name: modified_L_selenocysteine def: "A post translationally modified selenocysteine amino acid feature." [SO:ke] synonym: "modified L selenocysteine" EXACT [] synonym: "modified L-selenocysteine" EXACT [] xref: MOD:01158 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001403 name: modified_L_valine def: "A post translationally modified valine amino acid feature." [SO:ke] synonym: "modified L valine" EXACT [] synonym: "modified L-valine" EXACT [] synonym: "ModVal" EXACT AAMOD [] xref: MOD:00920 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001404 name: modified_L_proline def: "A post translationally modified proline amino acid feature." [SO:ke] synonym: "modified L proline" EXACT [] synonym: "modified L-proline " EXACT [] synonym: "ModPro" EXACT AAMOD [] xref: MOD:00915 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001405 name: modified_L_tyrosine def: "A post translationally modified tyrosine amino acid feature." [SO:ke] synonym: "modified L tyrosine" EXACT [] synonym: "modified L-tyrosine" EXACT [] synonym: "ModTry" EXACT AAMOD [] xref: MOD:00919 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001406 name: modified_L_arginine def: "A post translationally modified arginine amino acid feature." [SO:ke] synonym: "ModArg" EXACT AAMOD [] synonym: "modified L arginine" EXACT [] synonym: "modified L-arginine" EXACT [] xref: MOD:00902 is_a: SO:0001385 ! modified_amino_acid_feature [Term] id: SO:0001407 name: peptidyl def: "An attribute describing the nature of a proteinaceous polymer, where by the amino acid units are joined by peptide bonds." [SO:ke] is_a: SO:0000443 ! polymer_attribute [Term] id: SO:0001408 name: cleaved_for_gpi_anchor_region def: "The C-terminal residues of a polypeptide which are exchanged for a GPI-anchor." [EBI:rh] synonym: "cleaved for gpi anchor region" EXACT [] is_a: SO:0100011 ! cleaved_peptide_region [Term] id: SO:0001409 name: biomaterial_region def: "A region which is intended for use in an experiment." [SO:cb] subset: SOFA synonym: "biomaterial region" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001410 name: experimental_feature def: "A region which is the result of some arbitrary experimental procedure. The procedure may be carried out with biological material or inside a computer." [SO:cb] subset: SOFA synonym: "analysis feature" RELATED [] synonym: "experimental output artefact" EXACT [] synonym: "experimental_output_artefact" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001411 name: biological_region def: "A region defined by its disposition to be involved in a biological process." [SO:cb] subset: SOFA synonym: "biological region" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001412 name: topologically_defined_region def: "A region that is defined according to its relations with other regions within the same sequence." [SO:cb] subset: SOFA synonym: "topologically defined region" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001413 name: translocation_breakpoint def: "The point within a chromosome where a translocation begins or ends." [SO:cb] synonym: "translocation breakpoint" EXACT [] is_a: SO:0001021 ! chromosome_breakpoint [Term] id: SO:0001414 name: insertion_breakpoint def: "The point within a chromosome where a insertion begins or ends." [SO:cb] synonym: "insertion breakpoint" EXACT [] is_a: SO:0001021 ! chromosome_breakpoint [Term] id: SO:0001415 name: deletion_breakpoint def: "The point within a chromosome where a deletion begins or ends." [SO:cb] synonym: "deletion breakpoint" EXACT [] is_a: SO:0001021 ! chromosome_breakpoint [Term] id: SO:0001416 name: five_prime_flanking_region def: "A flanking region located five prime of a specific region." [SO:chado] synonym: "5' flanking region" RELATED [] synonym: "five prime flanking region" EXACT [] is_a: SO:0000239 ! flanking_region [Term] id: SO:0001417 name: three_prime_flanking_region def: "A flanking region located three prime of a specific region." [SO:chado] synonym: "3' flanking region" RELATED [] synonym: "three prime flanking region" EXACT [] is_a: SO:0000239 ! flanking_region [Term] id: SO:0001418 name: transcribed_fragment def: "An experimental region, defined by a tiling array experiment to be transcribed at some level." [SO:ke] comment: Term requested by the MODencode group. synonym: "transcribed fragment" EXACT [] synonym: "transfrag" RELATED [] is_a: SO:0001410 ! experimental_feature [Term] id: SO:0001419 name: cis_splice_site def: "Intronic 2 bp region bordering exon. A splice_site that adjacent_to exon and overlaps intron." [SO:cjm, SO:ke] subset: SOFA synonym: "cis splice site" EXACT [] is_a: SO:0000162 ! splice_site [Term] id: SO:0001420 name: trans_splice_site def: "Primary transcript region bordering trans-splice junction." [SO:ke] subset: SOFA synonym: "trans splice site" EXACT [] is_a: SO:0000162 ! splice_site [Term] id: SO:0001421 name: splice_junction def: "The boundary between an intron and an exon." [SO:ke] synonym: "splice boundary" EXACT [] synonym: "splice junction" EXACT [] is_a: SO:0000699 ! junction [Term] id: SO:0001422 name: conformational_switch def: "A region of a polypeptide, involved in the transition from one conformational state to another." [SO:ke] comment: MM Young, K Kirshenbaum, KA Dill & S Highsmith. Predicting conformational switches in proteins. Protein Science, 1999, 8, 1752-64. K. Kirshenbaum, M.M. Young and S. Highsmith. Predicting Allosteric Switches in Myosins. Protein Science 8(9):1806-1815. 1999. synonym: "polypeptide conformational switch" EXACT [] is_a: SO:0100001 ! biochemical_region_of_peptide [Term] id: SO:0001423 name: dye_terminator_read def: "A read produced by the dye terminator method of sequencing." [SO:ke] synonym: "dye terminator read" RELATED [] is_a: SO:0000150 ! read [Term] id: SO:0001424 name: pyrosequenced_read def: "A read produced by pyrosequencing technology." [SO:ke] comment: An example is a read produced by Roche 454 technology. synonym: "pyorsequenced read" RELATED [] is_a: SO:0000150 ! read [Term] id: SO:0001425 name: ligation_based_read def: "A read produced by ligation based sequencing technologies." [SO:ke] comment: An example of this kind of read is one produced by ABI SOLiD. synonym: "ligation based read" RELATED [] is_a: SO:0000150 ! read [Term] id: SO:0001426 name: polymerase_synthesis_read def: "A read produced by the polymerase based sequence by synthesis method." [SO:ke] comment: An example is a read produced by Illumina technology. synonym: "polymerase synthesis read" RELATED [] is_a: SO:0000150 ! read [Term] id: SO:0001427 name: cis_regulatory_frameshift_element def: "A structural region in an RNA molecule which promotes ribosomal frameshifting of cis coding sequence." [RFAM:jd] synonym: "cis regulatory frameshift element" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0001428 name: expressed_sequence_assembly def: "A sequence assembly derived from expressed sequences." [SO:ke] comment: From tracker [ 2372385 ] expressed_sequence_assembly. synonym: "expressed sequence assembly" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0001429 name: DNA_binding_site def: "A binding site that, in the molecule, interacts selectively and non-covalently with DNA." [SO:ke] synonym: "DNA binding site" EXACT [] is_a: SO:0001655 ! nucleotide_binding_site [Term] id: SO:0001431 name: cryptic_gene def: "A gene that is not transcribed under normal conditions and is not critical to normal cellular functioning." [SO:ke] synonym: "cryptic gene" EXACT [] is_a: SO:0000704 ! gene relationship: has_quality SO:0000976 ! cryptic [Term] id: SO:0001432 name: sequence_variant_affecting_polyadenylation comment: OBSOLETE: This term was deleted as it conflated more than one term. The alteration is separate from the effect. synonym: "mutation affecting polyadenylation" RELATED [] synonym: "sequence variant affecting polyadenylation" EXACT [] is_obsolete: true replaced_by: SO:0001545 [Term] id: SO:0001433 name: three_prime_RACE_clone def: "A three prime RACE (Rapid Amplification of cDNA Ends) clone is a cDNA clone copied from the 3' end of an mRNA (using a poly-dT primer to capture the polyA tail and a gene-specific or randomly primed 5' primer), and spliced into a vector for propagation in a suitable host." [modENCODE:nlw] synonym: "3' RACE clone" RELATED [] is_a: SO:0000317 ! cDNA_clone [Term] id: SO:0001434 name: cassette_pseudogene def: "A cassette pseudogene is a kind of gene in an inactive form which may recombine at a telomeric locus to form a functional copy." [SO:ke] comment: Requested by the Trypanosome community. synonym: "cassette pseudogene" EXACT [] synonym: "cassette type psedogene" RELATED [] is_a: SO:0001760 ! non_processed_pseudogene [Term] id: SO:0001435 name: alanine comment: A place holder for a cross product with chebi. synonym: "A" EXACT aa1 [] synonym: "Ala" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001436 name: valine comment: A place holder for a cross product with chebi. synonym: "V" EXACT aa1 [] synonym: "Val" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001437 name: leucine comment: A place holder for a cross product with chebi. synonym: "L" EXACT aa1 [] synonym: "Leu" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001438 name: isoleucine comment: A place holder for a cross product with chebi. synonym: "I" EXACT aa1 [] synonym: "Ile" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001439 name: proline comment: A place holder for a cross product with chebi. synonym: "P" EXACT aa1 [] synonym: "Pro" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001440 name: tryptophan comment: A place holder for a cross product with chebi. synonym: "Trp" EXACT aa3 [] synonym: "W" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001441 name: phenylalanine comment: A place holder for a cross product with chebi. synonym: "F" EXACT aa1 [] synonym: "Phe" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001442 name: methionine comment: A place holder for a cross product with chebi. synonym: "M" EXACT aa1 [] synonym: "Met" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001443 name: glycine comment: A place holder for a cross product with chebi. synonym: "G" EXACT aa1 [] synonym: "Gly" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001444 name: serine comment: A place holder for a cross product with chebi. synonym: "S" EXACT aa1 [] synonym: "Ser" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001445 name: threonine comment: A place holder for a cross product with chebi. synonym: "T" EXACT aa1 [] synonym: "Thr" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001446 name: tyrosine comment: A place holder for a cross product with chebi. synonym: "Tyr" EXACT aa3 [] synonym: "Y" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001447 name: cysteine comment: A place holder for a cross product with chebi. synonym: "C" EXACT aa1 [] synonym: "Cys" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001448 name: glutamine comment: A place holder for a cross product with chebi. synonym: "Gln" EXACT aa3 [] synonym: "Q" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001449 name: asparagine comment: A place holder for a cross product with chebi. synonym: "Asn" EXACT aa3 [] synonym: "N" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001450 name: lysine comment: A place holder for a cross product with chebi. synonym: "K" EXACT aa1 [] synonym: "Lys" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001451 name: arginine comment: A place holder for a cross product with chebi. synonym: "Arg" EXACT aa3 [] synonym: "R" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001452 name: histidine comment: A place holder for a cross product with chebi. synonym: "H" EXACT aa1 [] synonym: "His" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001453 name: aspartic_acid comment: A place holder for a cross product with chebi. synonym: "Asp" EXACT aa3 [] synonym: "aspartic acid" EXACT [] synonym: "D" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001454 name: glutamic_acid comment: A place holder for a cross product with chebi. synonym: "E" EXACT aa1 [] synonym: "Glu" EXACT aa3 [] synonym: "glutamic acid" EXACT [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001455 name: selenocysteine comment: A place holder for a cross product with chebi. synonym: "Sec" EXACT aa3 [] synonym: "U" EXACT aa1 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001456 name: pyrrolysine comment: A place holder for a cross product with chebi. synonym: "O" EXACT aa1 [] synonym: "Pyl" EXACT aa3 [] is_a: SO:0001237 ! amino_acid [Term] id: SO:0001457 name: transcribed_cluster def: "A region defined by a set of transcribed sequences from the same gene or expressed pseudogene." [SO:ke] comment: This term was requested by Jeff Bowes, using the tracker, ID = 2594157. synonym: "transcribed cluster" EXACT [] synonym: "unigene cluster" RELATED [] is_a: SO:0001410 ! experimental_feature relationship: has_part SO:0000695 ! reagent [Term] id: SO:0001458 name: unigene_cluster def: "A kind of transcribed_cluster defined by a set of transcribed sequences from the a unique gene." [SO:ke] comment: This term was requested by Jeff Bowes, using the tracker, ID = 2594157. synonym: "unigene cluster" RELATED [] is_a: SO:0001457 ! transcribed_cluster [Term] id: SO:0001459 name: CRISPR def: "Clustered Palindromic Repeats interspersed with bacteriophage derived spacer sequences." [RFAM:jd] synonym: "Clustered_Regularly_Interspaced_Short_Palindromic_Repeat" EXACT [] synonym: "CRISPR element" EXACT [] xref: http:en.wikipedia.org/wiki/CRISPR is_a: SO:0000314 ! direct_repeat [Term] id: SO:0001460 name: insulator_binding_site def: "A binding site that, in an insulator region of a nucleotide molecule, interacts selectively and non-covalently with polypeptide residues." [SO:ke] comment: See tracker ID 2060908. synonym: "insulator binding site" RELATED [] is_a: SO:0001654 ! nucleotide_to_protein_binding_site relationship: part_of SO:0000627 ! insulator [Term] id: SO:0001461 name: enhancer_binding_site def: "A binding site that, in the enhancer region of a nucleotide molecule, interacts selectively and non-covalently with polypeptide residues." [SO:ke] synonym: "enhancer binding site" RELATED [] is_a: SO:0001654 ! nucleotide_to_protein_binding_site relationship: part_of SO:0000165 ! enhancer [Term] id: SO:0001462 name: contig_collection def: "A collection of contigs." [SO:ke] comment: See tracker ID: 2138359. synonym: "contig collection" EXACT [] is_a: SO:0001085 ! sequence_conflict is_a: SO:0001260 ! sequence_collection relationship: has_part SO:0000149 ! contig [Term] id: SO:0001463 name: lincRNA def: "A multiexonic non-coding RNA transcribed by RNA polymerase II." [PMID:19182780, SO:ke] synonym: "large intervening non-coding RNA" EXACT [] synonym: "long intergenic non-coding RNA" EXACT [] is_a: SO:0001877 ! lnc_RNA [Term] id: SO:0001464 name: UST def: "An EST spanning part or all of the untranslated regions of a protein-coding transcript." [SO:nlw] synonym: "UTR sequence tag" EXACT [] is_a: SO:0000345 ! EST [Term] id: SO:0001465 name: three_prime_UST def: "A UST located in the 3'UTR of a protein-coding transcript." [SO:nlw] synonym: "3' UST" RELATED [] is_a: SO:0001464 ! UST [Term] id: SO:0001466 name: five_prime_UST def: "An UST located in the 5'UTR of a protein-coding transcript." [SO:nlw] synonym: "5' UST" RELATED [] is_a: SO:0001464 ! UST [Term] id: SO:0001467 name: RST def: "A tag produced from a single sequencing read from a RACE product; typically a few hundred base pairs long." [SO:nlw] synonym: "RACE sequence tag" EXACT [] is_a: SO:0000345 ! EST [Term] id: SO:0001468 name: three_prime_RST def: "A tag produced from a single sequencing read from a 3'-RACE product; typically a few hundred base pairs long." [SO:nlw] synonym: "3' RST" EXACT [] is_a: SO:0001467 ! RST [Term] id: SO:0001469 name: five_prime_RST def: "A tag produced from a single sequencing read from a 5'-RACE product; typically a few hundred base pairs long." [SO:nlw] synonym: "5' RST" RELATED [] is_a: SO:0001467 ! RST [Term] id: SO:0001470 name: UST_match def: "A match against an UST sequence." [SO:nlw] synonym: "UST match" EXACT [] is_a: SO:0000102 ! expressed_sequence_match [Term] id: SO:0001471 name: RST_match def: "A match against an RST sequence." [SO:nlw] synonym: "RST match" EXACT [] is_a: SO:0000102 ! expressed_sequence_match [Term] id: SO:0001472 name: primer_match def: "A nucleotide match to a primer sequence." [SO:nlw] synonym: "primer match" EXACT [] is_a: SO:0000347 ! nucleotide_match [Term] id: SO:0001473 name: miRNA_antiguide def: "A region of the pri miRNA that basepairs with the guide to form the hairpin." [SO:ke] synonym: "miRNA antiguide " EXACT [] synonym: "miRNA passenger strand" EXACT [] synonym: "miRNA star" EXACT [] is_a: SO:0001243 ! miRNA_primary_transcript_region created_by: kareneilbeck creation_date: 2009-05-27T03:35:43Z [Term] id: SO:0001474 name: trans_splice_junction def: "The boundary between the spliced leader and the first exon of the mRNA." [SO:ke] synonym: "trans-splice junction" EXACT [] is_a: SO:0000699 ! junction created_by: kareneilbeck creation_date: 2009-07-13T04:50:49Z [Term] id: SO:0001475 name: outron def: "A region of a primary transcript, that is removed via trans splicing." [PMID:16401417, SO:ke] is_a: SO:0000835 ! primary_transcript_region created_by: kareneilbeck creation_date: 2009-07-14T11:36:08Z [Term] id: SO:0001476 name: natural_plasmid def: "A plasmid that occurs naturally." [SO:xp] synonym: "natural plasmid" EXACT [] is_a: SO:0000155 ! plasmid is_a: SO:0001038 ! extrachromosomal_mobile_genetic_element relationship: has_quality SO:0000782 ! natural created_by: kareneilbeck creation_date: 2009-09-01T03:43:06Z [Term] id: SO:0001477 name: gene_trap_construct def: "A gene trap construct is a type of engineered plasmid which is designed to integrate into a genome and produce a fusion transcript between exons of the gene into which it inserts and a reporter element in the construct. Gene traps contain a splice acceptor, do not contain promoter elements for the reporter, and are mutagenic. Gene traps may be bicistronic with the second cassette containing a promoter driving an a selectable marker." [ZFIN:dh] synonym: "gene trap construct" EXACT [] is_a: SO:0000637 ! engineered_plasmid created_by: kareneilbeck creation_date: 2009-09-01T03:49:09Z [Term] id: SO:0001478 name: promoter_trap_construct def: "A promoter trap construct is a type of engineered plasmid which is designed to integrate into a genome and express a reporter when inserted in close proximity to a promoter element. Promoter traps typically do not contain promoter elements and are mutagenic." [ZFIN:dh] synonym: "promoter trap construct" EXACT [] is_a: SO:0000637 ! engineered_plasmid created_by: kareneilbeck creation_date: 2009-09-01T03:52:01Z [Term] id: SO:0001479 name: enhancer_trap_construct def: "An enhancer trap construct is a type of engineered plasmid which is designed to integrate into a genome and express a reporter when the expression from a basic minimal promoter is enhanced by genomic enhancer elements. Enhancer traps contain promoter elements and are not usually mutagenic." [ZFIN:dh] synonym: "enhancer trap construct" EXACT [] is_a: SO:0000637 ! engineered_plasmid created_by: kareneilbeck creation_date: 2009-09-01T03:53:26Z [Term] id: SO:0001480 name: PAC_end def: "A region of sequence from the end of a PAC clone that may provide a highly specific marker." [ZFIN:mh] synonym: "PAC end" EXACT [] is_a: SO:0000150 ! read relationship: part_of SO:0000154 ! PAC created_by: kareneilbeck creation_date: 2009-09-09T05:18:12Z [Term] id: SO:0001481 name: RAPD def: "RAPD is a 'PCR product' where a sequence variant is identified through the use of PCR with random primers." [ZFIN:mh] synonym: "Random Amplification Polymorphic DNA" EXACT [] is_a: SO:0000006 ! PCR_product created_by: kareneilbeck creation_date: 2009-09-09T05:26:10Z [Term] id: SO:0001482 name: shadow_enhancer synonym: "shadow enhancer" EXACT [] is_a: SO:0000165 ! enhancer created_by: kareneilbeck creation_date: 2009-09-09T05:29:29Z [Term] id: SO:0001483 name: SNV def: "SNVs are single nucleotide positions in genomic DNA at which different sequence alternatives exist." [SO:bm] subset: SOFA synonym: "single nucleotide variant" EXACT [] is_a: SO:1000002 ! substitution created_by: kareneilbeck creation_date: 2009-10-08T11:37:49Z [Term] id: SO:0001484 name: X_element_combinatorial_repeat def: "An X element combinatorial repeat is a repeat region located between the X element and the telomere or adjacent Y' element." [http://www.yeastgenome.org/help/glossary.html] comment: X element combinatorial repeats contain Tbf1p binding sites,\nand possible functions include a role in telomerase-independent telomere\nmaintenance via recombination or as a barrier against transcriptional\nsilencing. These are usually present as a combination of one or more of\nseveral types of smaller elements (designated A, B, C, or D). This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880747. synonym: "X element combinatorial repeat" EXACT [] is_a: SO:0000657 ! repeat_region relationship: part_of SO:0000624 ! telomere created_by: kareneilbeck creation_date: 2009-11-10T11:03:37Z [Term] id: SO:0001485 name: Y_prime_element def: "A Y' element is a repeat region (SO:0000657) located adjacent to telomeric repeats or X element combinatorial repeats, either as a single copy or tandem repeat of two to four copies." [http:http://www.yeastgenome.org/help/glossary.html] comment: This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880747. synonym: "Y' element" EXACT [] is_a: SO:0000657 ! repeat_region relationship: part_of SO:0000624 ! telomere created_by: kareneilbeck creation_date: 2009-11-10T12:08:57Z [Term] id: SO:0001486 name: standard_draft def: "The status of a whole genome sequence, where the data is minimally filtered or un-filtered, from any number of sequencing platforms, and is assembled into contigs. Genome sequence of this quality may harbour regions of poor quality and can be relatively incomplete." [DOI:10.1126] synonym: "standard draft" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T12:48:32Z [Term] id: SO:0001487 name: high_quality_draft def: "The status of a whole genome sequence, where overall coverage represents at least 90 percent of the genome." [DOI:10.1126] synonym: "high quality draft" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T12:52:36Z [Term] id: SO:0001488 name: improved_high_quality_draft def: "The status of a whole genome sequence, where additional work has been performed, using either manual or automated methods, such as gap resolution." [DOI:10.1126] synonym: "improved high quality draft" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T12:54:35Z [Term] id: SO:0001489 name: annotation_directed_improved_draft def: "The status of a whole genome sequence,where annotation, and verification of coding regions has occurred." [DOI:10.1126] synonym: "annotation directed improvement" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T12:57:10Z [Term] id: SO:0001490 name: noncontiguous_finished def: "The status of a whole genome sequence, where the assembly is high quality, closure approaches have been successful for most gaps, misassemblies and low quality regions." [DOI:10.1126] synonym: "non contiguous finished" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T01:01:07Z [Term] id: SO:0001491 name: finished_genome def: "The status of a whole genome sequence, with less than 1 error per 100,000 base pairs." [DOI:10.1126] synonym: "finished" EXACT [] synonym: "finished genome" EXACT [] is_a: SO:0001499 ! whole_genome_sequence_status created_by: kareneilbeck creation_date: 2009-10-23T01:04:43Z [Term] id: SO:0001492 name: intronic_regulatory_region def: "A regulatory region that is part of an intron." [SO:ke] synonym: "intronic regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region relationship: part_of SO:0000188 ! intron created_by: kareneilbeck creation_date: 2009-11-08T02:48:02Z [Term] id: SO:0001493 name: centromere_DNA_Element_I def: "A centromere DNA Element I (CDEI) is a conserved region, part of the centromere, consisting of a consensus region composed of 8-11bp which enables binding by the centromere binding factor 1(Cbf1p)." [PMID:11222754] comment: This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880699. synonym: "CDEI" EXACT [] synonym: "Centromere DNA Element I" EXACT [] is_a: SO:0000330 ! conserved_region relationship: part_of SO:0001794 ! point_centromere created_by: kareneilbeck creation_date: 2009-11-09T05:47:23Z [Term] id: SO:0001494 name: centromere_DNA_Element_II def: "A centromere DNA Element II (CDEII) is part a conserved region of the centromere, consisting of a consensus region that is AT-rich and ~ 75-100 bp in length." [PMID:11222754] comment: This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880699. synonym: "CDEII" EXACT [] synonym: "centromere DNA Element II" EXACT [] is_a: SO:0000330 ! conserved_region relationship: part_of SO:0001794 ! point_centromere created_by: kareneilbeck creation_date: 2009-11-09T05:51:26Z [Term] id: SO:0001495 name: centromere_DNA_Element_III def: "A centromere DNA Element I (CDEI) is a conserved region, part of the centromere, consisting of a consensus region that consists of a 25-bp which enables binding by the centromere DNA binding factor 3 (CBF3) complex." [PMID:11222754] comment: This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880699. synonym: "CDEIII" EXACT [] synonym: "centromere DNA Element III" EXACT [] is_a: SO:0000330 ! conserved_region relationship: part_of SO:0001794 ! point_centromere created_by: kareneilbeck creation_date: 2009-11-09T05:54:47Z [Term] id: SO:0001496 name: telomeric_repeat def: "The telomeric repeat is a repeat region, part of the chromosome, which in yeast, is a G-rich terminal sequence of the form (TG(1-3))n or more precisely ((TG)(1-6)TG(2-3))n." [PMID:8720065] comment: The repeats are maintained by telomerase and there is generally 300 (+/-) 75 bp of TG(1-3) at a given end. Telomeric repeats function in completing chromosome replication and protecting the ends from degradation and end-to-end fusions. This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880739. synonym: "telomeric repeat" EXACT [] is_a: SO:0000657 ! repeat_region relationship: part_of SO:0000624 ! telomere created_by: kareneilbeck creation_date: 2009-11-09T06:00:42Z [Term] id: SO:0001497 name: X_element def: "The X element is a conserved region, of the telomere, of ~475 bp that contains an ARS sequence and in most cases an Abf1p binding site." [http://www.yeastgenome.org/help/glossary.html#xelemcoresequence] comment: Possible functions include roles in chromosomal segregation,\nmaintenance of chromosome stability, recombinational sequestering, or as a\nbarrier to transcriptional silencing. This term was requested 2009-10-16 by Michel Dumontier, tracker id 2880747. synonym: "X element" RELATED [] is_a: SO:0000330 ! conserved_region relationship: part_of SO:0000624 ! telomere created_by: kareneilbeck creation_date: 2009-11-10T10:56:54Z [Term] id: SO:0001498 name: YAC_end def: "A region of sequence from the end of a YAC clone that may provide a highly specific marker." [SO:ke] synonym: "YAC end" EXACT [] is_a: SO:0000150 ! read relationship: part_of SO:0000152 ! YAC created_by: kareneilbeck creation_date: 2009-11-19T11:07:18Z [Term] id: SO:0001499 name: whole_genome_sequence_status def: "The status of whole genome sequence." [DOI:10.1126] comment: This terms and children were added to SO in response to tracker request by Patrick Chain. The paper Genome Project Standards in a New Era of Sequencing. Science October 9th 2009, addresses these terms. synonym: "whole genome sequence status" EXACT [] is_a: SO:0000905 ! status created_by: kareneilbeck creation_date: 2009-10-23T12:47:47Z [Term] id: SO:0001500 name: heritable_phenotypic_marker def: "A biological_region characterized as a single heritable trait in a phenotype screen. The heritable phenotype may be mapped to a chromosome but generally has not been characterized to a specific gene locus." [JAX:hdene] synonym: "heritable phenotypic marker" EXACT [] synonym: "phenotypic marker" EXACT [] is_a: SO:0001645 ! genetic_marker created_by: kareneilbeck creation_date: 2009-12-07T01:50:55Z [Term] id: SO:0001501 name: peptide_collection def: "A collection of peptide sequences." [BBOP:nlw] comment: Term requested via tracker ID: 2910829. synonym: "peptide collection" EXACT [] synonym: "peptide set" EXACT [] is_a: SO:0001260 ! sequence_collection relationship: has_part SO:0000104 ! polypeptide created_by: kareneilbeck creation_date: 2009-12-11T10:58:58Z [Term] id: SO:0001502 name: high_identity_region def: "An experimental feature with high sequence identity to another sequence." [SO:ke] comment: Requested by tracker ID: 2902685. synonym: "high identity region" EXACT [] is_a: SO:0001410 ! experimental_feature created_by: kareneilbeck creation_date: 2009-12-11T11:06:05Z [Term] id: SO:0001503 name: processed_transcript def: "A transcript for which no open reading frame has been identified and for which no other function has been determined." [MGI:hdeen] comment: Ensembl and Vega also use this term name. Requested by Howard Deen of MGI. synonym: "processed transcript" EXACT [] is_a: SO:0000673 ! transcript created_by: kareneilbeck creation_date: 2009-12-21T05:37:14Z [Term] id: SO:0001504 name: assortment_derived_variation def: "A chromosome variation derived from an event during meiosis." [SO:ke] synonym: "assortment derived variation" RELATED [] is_a: SO:0000240 ! chromosome_variation created_by: kareneilbeck creation_date: 2010-03-02T05:03:18Z [Term] id: SO:0001505 name: reference_genome def: "A collection of sequences (often chromosomes) taken as the standard for a given organism and genome assembly." [SO:ke] synonym: "reference genome" RELATED [] is_a: SO:0001026 ! genome created_by: kareneilbeck creation_date: 2010-03-03T02:10:03Z [Term] id: SO:0001506 name: variant_genome def: "A collection of sequences (often chromosomes) of an individual." [SO:ke] synonym: "variant genome" RELATED [] is_a: SO:0001026 ! genome created_by: kareneilbeck creation_date: 2010-03-03T02:11:25Z [Term] id: SO:0001507 name: variant_collection def: "A collection of one or more sequences of an individual." [SO:ke] synonym: "variant collection" RELATED [] is_a: SO:0001260 ! sequence_collection relationship: has_part SO:0001059 ! sequence_alteration created_by: kareneilbeck creation_date: 2010-03-03T02:13:28Z [Term] id: SO:0001508 name: alteration_attribute synonym: "alteration attribute" EXACT [] is_a: SO:0000733 ! feature_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:53:23Z [Term] id: SO:0001509 name: chromosomal_variation_attribute synonym: "chromosomal variation attribute" EXACT [] is_a: SO:0001508 ! alteration_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:54:30Z [Term] id: SO:0001510 name: intrachromosomal is_a: SO:0001509 ! chromosomal_variation_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:55:25Z [Term] id: SO:0001511 name: interchromosomal is_a: SO:0001509 ! chromosomal_variation_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:55:43Z [Term] id: SO:0001512 name: insertion_attribute def: "A quality of a chromosomal insertion,." [SO:ke] synonym: "insertion attribute" EXACT [] is_a: SO:0001508 ! alteration_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:55:56Z [Term] id: SO:0001513 name: tandem is_a: SO:0001512 ! insertion_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:56:37Z [Term] id: SO:0001514 name: direct def: "A quality of an insertion where the insert is not in a cytologically inverted orientation." [SO:ke] is_a: SO:0001512 ! insertion_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:56:49Z [Term] id: SO:0001515 name: inverted def: "A quality of an insertion where the insert is in a cytologically inverted orientation." [SO:ke] is_a: SO:0001512 ! insertion_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:57:40Z [Term] id: SO:0001516 name: free def: "The quality of a duplication where the new region exists independently of the original." [SO:ke] is_a: SO:0001523 ! duplication_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:57:51Z [Term] id: SO:0001517 name: inversion_attribute synonym: "inversion attribute" EXACT [] is_a: SO:0001508 ! alteration_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:58:10Z [Term] id: SO:0001518 name: pericentric is_a: SO:0001517 ! inversion_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:58:24Z [Term] id: SO:0001519 name: paracentric is_a: SO:0001517 ! inversion_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:58:35Z [Term] id: SO:0001520 name: translocaton_attribute synonym: "translocation attribute" EXACT [] is_a: SO:0001508 ! alteration_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:58:47Z [Term] id: SO:0001521 name: reciprocal is_a: SO:0001520 ! translocaton_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:59:34Z [Term] id: SO:0001522 name: insertional is_a: SO:0001520 ! translocaton_attribute created_by: kareneilbeck creation_date: 2010-03-04T02:59:51Z [Term] id: SO:0001523 name: duplication_attribute synonym: "duplication attribute" RELATED [] is_a: SO:0001508 ! alteration_attribute created_by: kareneilbeck creation_date: 2010-03-05T01:56:33Z [Term] id: SO:0001524 name: chromosomally_aberrant_genome synonym: "chromosomally aberrant genome" RELATED [] is_a: SO:0001506 ! variant_genome created_by: kareneilbeck creation_date: 2010-03-05T02:21:00Z [Term] id: SO:0001525 name: assembly_error_correction def: "A region of sequence where the final nucleotide assignment differs from the original assembly due to an improvement that replaces a mistake." [SO:ke] synonym: "assembly error correction" RELATED [] is_a: SO:0000413 ! sequence_difference created_by: kareneilbeck creation_date: 2010-03-09T02:16:31Z [Term] id: SO:0001526 name: base_call_error_correction def: "A region of sequence where the final nucleotide assignment is different from that given by the base caller due to an improvement that replaces a mistake." [SO:ke] synonym: "base call error correction" RELATED [] is_a: SO:0000413 ! sequence_difference created_by: kareneilbeck creation_date: 2010-03-09T02:18:07Z [Term] id: SO:0001527 name: peptide_localization_signal def: "A region of peptide sequence used to target the polypeptide molecule to a specific organelle." [SO:ke] subset: SOFA synonym: "localization signal" RELATED [] synonym: "peptide localization signal" EXACT [] is_a: SO:0000839 ! polypeptide_region created_by: kareneilbeck creation_date: 2010-03-11T02:15:05Z [Term] id: SO:0001528 name: nuclear_localization_signal def: "A polypeptide region that targets a polypeptide to the nucleus." [SO:ke] synonym: "NLS" EXACT [] xref: http://en.wikipedia.org/wiki/Nuclear_localization_signal "wikipedia" is_a: SO:0001527 ! peptide_localization_signal created_by: kareneilbeck creation_date: 2010-03-11T02:16:38Z [Term] id: SO:0001529 name: endosomal_localization_signal def: "A polypeptide region that targets a polypeptide to the endosome." [SO:ke] synonym: "endosomal localization signal" EXACT [] is_a: SO:0001527 ! peptide_localization_signal created_by: kareneilbeck creation_date: 2010-03-11T02:20:58Z [Term] id: SO:0001530 name: lysosomal_localization_signal def: "A polypeptide region that targets a polypeptide to the lysosome." [SO:ke] synonym: "lysosomal localization signal" EXACT [] is_a: SO:0001527 ! peptide_localization_signal created_by: kareneilbeck creation_date: 2010-03-11T02:24:10Z [Term] id: SO:0001531 name: nuclear_export_signal def: "A polypeptide region that targets a polypeptide to he cytoplasm." [SO:ke] synonym: "NES" EXACT [] synonym: "nuclear export signal" EXACT [] xref: http://en.wikipedia.org/wiki/Nuclear_export_signal is_a: SO:0001527 ! peptide_localization_signal created_by: kareneilbeck creation_date: 2010-03-11T02:25:25Z [Term] id: SO:0001532 name: recombination_signal_sequence def: "A region recognized by a recombinase." [SO:ke] synonym: "recombination signal sequence" RELATED [] xref: http://en.wikipedia.org/wiki/Recombination_Signal_Sequences "wikipedia" is_a: SO:0000299 ! specific_recombination_site created_by: kareneilbeck creation_date: 2010-03-11T03:16:47Z [Term] id: SO:0001533 name: cryptic_splice_site def: "A splice site that is in part of the transcript not normally spliced. They occur via mutation or transcriptional error." [SO:ke] synonym: "cryptic splice signal" RELATED [] synonym: "cryptic splice site" EXACT [] is_a: SO:0000162 ! splice_site created_by: kareneilbeck creation_date: 2010-03-11T03:25:06Z [Term] id: SO:0001534 name: nuclear_rim_localization_signal def: "A polypeptide region that targets a polypeptide to the nuclear rim." [SO:ke] synonym: "nuclear rim localization signal" RELATED [] xref: PMID:16027110 is_a: SO:0001527 ! peptide_localization_signal created_by: kareneilbeck creation_date: 2010-03-11T03:31:30Z [Term] id: SO:0001535 name: p_element def: "A P_element is a DNA transposon responsible for hybrid dysgenesis." [SO:ke] synonym: "P element" RELATED [] is_a: SO:0000182 ! DNA_transposon created_by: kareneilbeck creation_date: 2010-03-12T03:40:33Z [Term] id: SO:0001536 name: functional_variant def: "A sequence variant in which the function of a gene product is altered with respect to a reference." [SO:ke] synonym: "functional variant" EXACT [] is_a: SO:0001060 ! sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T11:30:25Z [Term] id: SO:0001537 name: structural_variant def: "A sequence variant that changes one or more sequence features." [SO:ke] synonym: "structural variant" RELATED [] is_a: SO:0001060 ! sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T11:31:01Z [Term] id: SO:0001538 name: transcript_function_variant def: "A sequence variant which alters the functioning of a transcript with respect to a reference sequence." [SO:ke] synonym: "transcript function variant" EXACT [] is_a: SO:0001536 ! functional_variant created_by: kareneilbeck creation_date: 2010-03-22T11:32:58Z [Term] id: SO:0001539 name: translational_product_function_variant def: "A sequence variant that affects the functioning of a translational product with respect to a reference sequence." [SO:ke] synonym: "translational product variant" EXACT [] is_a: SO:0001536 ! functional_variant created_by: kareneilbeck creation_date: 2010-03-22T11:46:15Z [Term] id: SO:0001540 name: level_of_transcript_variant def: "A sequence variant which alters the level of a transcript." [SO:ke] synonym: "level of transcript variant" EXACT [] is_a: SO:0001538 ! transcript_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:47:07Z [Term] id: SO:0001541 name: decreased_transcript_level_variant def: "A sequence variant that increases the level of mature, spliced and processed RNA with respect to a reference sequence." [SO:ke] synonym: "decreased transcript level" EXACT [] is_a: SO:0001540 ! level_of_transcript_variant created_by: kareneilbeck creation_date: 2010-03-22T11:47:47Z [Term] id: SO:0001542 name: increased_transcript_level_variant def: "A sequence variant that increases the level of mature, spliced and processed RNA with respect to a reference sequence." [SO:ke] synonym: "increased transcript level variant" EXACT [] is_a: SO:0001540 ! level_of_transcript_variant created_by: kareneilbeck creation_date: 2010-03-22T11:48:17Z [Term] id: SO:0001543 name: transcript_processing_variant def: "A sequence variant that affects the post transcriptional processing of a transcript with respect to a reference sequence." [SO:ke] synonym: "transcript processing variant" EXACT [] is_a: SO:0001538 ! transcript_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:48:48Z [Term] id: SO:0001544 name: editing_variant def: "A transcript processing variant whereby the process of editing is disrupted with respect to the reference." [SO:ke] synonym: "editing variant" EXACT [] is_a: SO:0001543 ! transcript_processing_variant created_by: kareneilbeck creation_date: 2010-03-22T11:49:25Z [Term] id: SO:0001545 name: polyadenylation_variant def: "A sequence variant that changes polyadenylation with respect to a reference sequence." [SO:ke] synonym: "polyadenylation variant" EXACT [] is_a: SO:0001543 ! transcript_processing_variant created_by: kareneilbeck creation_date: 2010-03-22T11:49:40Z [Term] id: SO:0001546 name: transcript_stability_variant def: "A variant that changes the stability of a transcript with respect to a reference sequence." [SO:ke] synonym: "transcript stability variant" EXACT [] is_a: SO:0001538 ! transcript_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:50:01Z [Term] id: SO:0001547 name: decreased_transcript_stability_variant def: "A sequence variant that decreases transcript stability with respect to a reference sequence." [SO:ke] synonym: "decrease transcript stability variant" EXACT [] is_a: SO:0001546 ! transcript_stability_variant created_by: kareneilbeck creation_date: 2010-03-22T11:50:23Z [Term] id: SO:0001548 name: increased_transcript_stability_variant def: "A sequence variant that increases transcript stability with respect to a reference sequence." [SO:ke] synonym: "increased transcript stability variant" EXACT [] is_a: SO:0001546 ! transcript_stability_variant created_by: kareneilbeck creation_date: 2010-03-22T11:50:39Z [Term] id: SO:0001549 name: transcription_variant def: "A variant that changes alters the transcription of a transcript with respect to a reference sequence." [SO:ke] synonym: "transcription variant" EXACT [] is_a: SO:0001538 ! transcript_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:51:26Z [Term] id: SO:0001550 name: rate_of_transcription_variant def: "A sequence variant that changes the rate of transcription with respect to a reference sequence." [SO:ke] synonym: "rate of transcription variant" EXACT [] is_a: SO:0001549 ! transcription_variant created_by: kareneilbeck creation_date: 2010-03-22T11:51:50Z [Term] id: SO:0001551 name: increased_transcription_rate_variant def: "A sequence variant that increases the rate of transcription with respect to a reference sequence." [SO:ke] synonym: "increased transcription rate variant" EXACT [] is_a: SO:0001550 ! rate_of_transcription_variant created_by: kareneilbeck creation_date: 2010-03-22T11:52:17Z [Term] id: SO:0001552 name: decreased_transcription_rate_variant def: "A sequence variant that decreases the rate of transcription with respect to a reference sequence." [SO:ke] synonym: "decreased transcription rate variant" EXACT [] is_a: SO:0001550 ! rate_of_transcription_variant created_by: kareneilbeck creation_date: 2010-03-22T11:52:43Z [Term] id: SO:0001553 name: translational_product_level_variant def: "A functional variant that changes the translational product level with respect to a reference sequence." [SO:ke] synonym: "translational product level variant" EXACT [] is_a: SO:0001539 ! translational_product_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:53:32Z [Term] id: SO:0001554 name: polypeptide_function_variant def: "A sequence variant which changes polypeptide functioning with respect to a reference sequence." [SO:ke] synonym: "polypeptide function variant" EXACT [] is_a: SO:0001539 ! translational_product_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:53:54Z [Term] id: SO:0001555 name: decreased_translational_product_level def: "A sequence variant which decreases the translational product level with respect to a reference sequence." [SO:ke] synonym: "decrease translational product level" EXACT [] is_a: SO:0001553 ! translational_product_level_variant created_by: kareneilbeck creation_date: 2010-03-22T11:54:25Z [Term] id: SO:0001556 name: increased_translational_product_level def: "A sequence variant which increases the translational product level with respect to a reference sequence." [SO:ke] synonym: "increase translational product level" EXACT [] is_a: SO:0001553 ! translational_product_level_variant created_by: kareneilbeck creation_date: 2010-03-22T11:55:25Z [Term] id: SO:0001557 name: polypeptide_gain_of_function_variant def: "A sequence variant which causes gain of polypeptide function with respect to a reference sequence." [SO:ke] synonym: "polypeptide gain of function variant" EXACT [] is_a: SO:0001554 ! polypeptide_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:56:12Z [Term] id: SO:0001558 name: polypeptide_localization_variant def: "A sequence variant which changes the localization of a polypeptide with respect to a reference sequence." [SO:ke] synonym: "polypeptide localization variant" EXACT [] is_a: SO:0001554 ! polypeptide_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:56:37Z [Term] id: SO:0001559 name: polypeptide_loss_of_function_variant def: "A sequence variant that causes the loss of a polypeptide function with respect to a reference sequence." [SO:ke] synonym: "polypeptide loss of function variant" EXACT [] is_a: SO:0001554 ! polypeptide_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:56:58Z [Term] id: SO:0001560 name: inactive_ligand_binding_site def: "A sequence variant that causes the inactivation of a ligand binding site with respect to a reference sequence." [SO:ke] synonym: "inactive ligand binding site" EXACT [] is_a: SO:0001559 ! polypeptide_loss_of_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:58:00Z [Term] id: SO:0001561 name: polypeptide_partial_loss_of_function def: "A sequence variant that causes some but not all loss of polypeptide function with respect to a reference sequence." [SO:ke] synonym: "polypeptide partial loss of function" EXACT [] is_a: SO:0001559 ! polypeptide_loss_of_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:58:32Z [Term] id: SO:0001562 name: polypeptide_post_translational_processing_variant def: "A sequence variant that causes a change in post translational processing of the peptide with respect to a reference sequence." [SO:ke] synonym: "polypeptide post translational processing variant" EXACT [] is_a: SO:0001554 ! polypeptide_function_variant created_by: kareneilbeck creation_date: 2010-03-22T11:59:06Z [Term] id: SO:0001563 name: copy_number_change def: "A sequence variant where copies of a feature (CNV) are either increased or decreased." [SO:ke] synonym: "copy number change" EXACT [] is_a: SO:0001537 ! structural_variant created_by: kareneilbeck creation_date: 2010-03-22T02:27:33Z [Term] id: SO:0001564 name: gene_variant def: "A sequence variant where the structure of the gene is changed." [SO:ke] synonym: "gene structure variant" EXACT [] is_a: SO:0001878 ! feature_variant created_by: kareneilbeck creation_date: 2010-03-22T02:28:01Z [Term] id: SO:0001565 name: gene_fusion def: "A sequence variant whereby a two genes have become joined." [SO:ke] synonym: "gene fusion" EXACT [] is_a: SO:0001564 ! gene_variant created_by: kareneilbeck creation_date: 2010-03-22T02:28:28Z [Term] id: SO:0001566 name: regulatory_region_variant def: "A sequence variant located within a regulatory region." [SO:ke] comment: EBI term: Regulatory region variations - In regulatory region annotated by Ensembl. synonym: "regulatory region variant" EXACT [] synonym: "regulatory_region_" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001878 ! feature_variant created_by: kareneilbeck creation_date: 2010-03-22T02:28:48Z [Term] id: SO:0001567 name: stop_retained_variant def: "A sequence variant where at least one base in the terminator codon is changed, but the terminator remains." [SO:ke] synonym: "stop retained variant" EXACT [] is_a: SO:0001590 ! terminator_codon_variant is_a: SO:0001819 ! synonymous_variant created_by: kareneilbeck creation_date: 2010-04-19T05:02:30Z [Term] id: SO:0001568 name: splicing_variant def: "A sequence variant that changes the process of splicing." [SO:ke] synonym: "splicing variant" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001564 ! gene_variant created_by: kareneilbeck creation_date: 2010-03-22T02:29:22Z [Term] id: SO:0001569 name: cryptic_splice_site_variant def: "A sequence variant causing a new (functional) splice site." [EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html] synonym: "cryptic splice site activation" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001568 ! splicing_variant created_by: kareneilbeck creation_date: 2010-03-22T02:29:41Z [Term] id: SO:0001570 name: cryptic_splice_acceptor def: "A sequence variant whereby a new splice site is created due to the activation of a new acceptor." [SO:ke] synonym: "cryptic splice acceptor" EXACT [] is_a: SO:0001569 ! cryptic_splice_site_variant created_by: kareneilbeck creation_date: 2010-03-22T02:30:11Z [Term] id: SO:0001571 name: cryptic_splice_donor def: "A sequence variant whereby a new splice site is created due to the activation of a new donor." [SO:ke] synonym: "cryptic splice donor" EXACT [] is_a: SO:0001569 ! cryptic_splice_site_variant created_by: kareneilbeck creation_date: 2010-03-22T02:30:35Z [Term] id: SO:0001572 name: exon_loss def: "A sequence variant whereby an exon is lost from the transcript." [SO:ke] synonym: "exon loss" EXACT [] is_a: SO:0001568 ! splicing_variant created_by: kareneilbeck creation_date: 2010-03-22T02:31:09Z [Term] id: SO:0001573 name: intron_gain def: "A sequence variant whereby an intron is gained by the processed transcript; usually a result of an alteration of the donor or acceptor." [EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html] synonym: "intron gain" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001568 ! splicing_variant created_by: kareneilbeck creation_date: 2010-03-22T02:31:25Z [Term] id: SO:0001574 name: splice_acceptor_variant def: "A splice variant that changes the 2 base region at the 3' end of an intron." [SO:ke] synonym: "splice acceptor variant" EXACT [] is_a: SO:0001629 ! splice_site_variant created_by: kareneilbeck creation_date: 2010-03-22T02:31:52Z [Term] id: SO:0001575 name: splice_donor_variant def: "A splice variant that changes the2 base region at the 5' end of an intron." [SO:ke] synonym: "splice donor variant" EXACT [] is_a: SO:0001629 ! splice_site_variant created_by: kareneilbeck creation_date: 2010-03-22T02:32:10Z [Term] id: SO:0001576 name: transcript_variant def: "A sequence variant that changes the structure of the transcript." [SO:ke] synonym: "transcript variant" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001564 ! gene_variant created_by: kareneilbeck creation_date: 2010-03-22T02:32:41Z [Term] id: SO:0001577 name: complex_transcript_variant def: "A transcript variant with a complex INDEL- Insertion or deletion that spans an exon/intron border or a coding sequence/UTR border." [http://ensembl.org/info/docs/variation/index.html] comment: EBI term: Complex InDel - Insertion or deletion that spans an exon/intron border or a coding sequence/UTR border. synonym: "complex transcript variant" EXACT [] synonym: "complex_indel" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "complext change in transcript" EXACT [] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-22T02:33:03Z [Term] id: SO:0001578 name: stop_lost def: "A sequence variant where at least one base of the terminator codon (stop) is changed, resulting in an elongated transcript." [SO:ke] comment: EBI term: Stop lost - In coding sequence, resulting in the loss of a stop codon. synonym: "stop codon lost" EXACT [] synonym: "stop lost" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001590 ! terminator_codon_variant is_a: SO:0001650 ! inframe_variant is_a: SO:0001907 ! feature_elongation created_by: kareneilbeck creation_date: 2010-03-23T03:46:42Z [Term] id: SO:0001579 name: transcript_sequence_variant synonym: "transcript sequence variant" EXACT [] is_obsolete: true [Term] id: SO:0001580 name: coding_sequence_variant alt_id: SO:0001581 def: "A sequence variant that changes the coding sequence." [SO:ke] synonym: "coding sequence variant" EXACT [] synonym: "coding variant" EXACT [] synonym: "codon variant" EXACT [] synonym: "codon_variant" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001791 ! exon_variant created_by: kareneilbeck creation_date: 2010-03-22T02:34:36Z [Term] id: SO:0001582 name: initiator_codon_variant def: "A codon variant that changes at least one base of the first codon of a transcript." [SO:ke] synonym: "initiatior codon variant" EXACT [] synonym: "initiator codon change" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html xref: loinc:LA6695-6 "Initiating Methionine" is_a: SO:0001650 ! inframe_variant created_by: kareneilbeck creation_date: 2010-03-22T02:35:18Z [Term] id: SO:0001583 name: missense_variant alt_id: SO:0001584 alt_id: SO:0001783 def: "A sequence variant, that changes one or more bases, resulting in a different amino acid sequence but where the length is preserved." [EBI:fc, EBI:gr, SO:ke] comment: EBI term: Non-synonymous SNPs. SNPs that are located in the coding sequence and result in an amino acid change in the encoded peptide sequence. A change that causes a non_synonymous_codon can be more than 3 bases - for example 4 base substitution. synonym: "missense" EXACT [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] synonym: "missense codon" EXACT [] synonym: "non synonymous codon" EXACT [] synonym: "non synonymous variant" EXACT [] synonym: "non_synonymous_coding" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html xref: http://en.wikipedia.org/wiki/Missense_mutation xref: loinc:LA6698-0 "Missense" is_a: SO:0001650 ! inframe_variant created_by: kareneilbeck creation_date: 2010-03-22T02:35:49Z [Term] id: SO:0001585 name: conservative_missense_variant def: "A sequence variant whereby at least one base of a codon is changed resulting in a codon that encodes for a different but similar amino acid. These variants may or may not be deleterious." [SO:ke] synonym: "conservative missense codon" EXACT [] synonym: "conservative missense variant" EXACT [] synonym: "neutral missense codon" RELATED [] synonym: "quiet missense codon" RELATED [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001583 ! missense_variant created_by: kareneilbeck creation_date: 2010-03-22T02:36:40Z [Term] id: SO:0001586 name: non_conservative_missense_variant def: "A sequence variant whereby at least one base of a codon is changed resulting in a codon that encodes for an amino acid with different biochemical properties." [SO:ke] synonym: "non conservative missense codon" EXACT [] synonym: "non conservative missense variant" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001583 ! missense_variant created_by: kareneilbeck creation_date: 2010-03-22T02:37:16Z [Term] id: SO:0001587 name: stop_gained def: "A sequence variant whereby at least one base of a codon is changed, resulting in a premature stop codon, leading to a shortened transcript." [SO:ke] comment: EBI term: Stop gained - In coding sequence, resulting in the gain of a stop codon (i.e. leading to a shortened peptide sequence). synonym: "nonsense" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] synonym: "nonsense codon" EXACT [] synonym: "stop codon gained" RELATED [] synonym: "stop gained" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] xref: loinc:LA6699-8 "Nonsense" is_a: SO:0001650 ! inframe_variant is_a: SO:0001906 ! feature_truncation created_by: kareneilbeck creation_date: 2010-03-22T02:37:52Z [Term] id: SO:0001589 name: frameshift_variant def: "A sequence variant which causes a disruption of the translational reading frame, because the number of nucleotides inserted or deleted is not a multiple of three." [SO:ke] comment: EBI term:Frameshift variations - In coding sequence, resulting in a frameshift. synonym: "frameshift variant" EXACT [] synonym: "frameshift_" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] synonym: "frameshift_coding" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] xref: loinc:LA6694-9 "Frameshift" is_a: SO:0001818 ! protein_altering_variant created_by: kareneilbeck creation_date: 2010-03-22T02:40:19Z [Term] id: SO:0001590 name: terminator_codon_variant alt_id: SO:0001625 def: "A sequence variant whereby at least one of the bases in the terminator codon is changed." [SO:ke] comment: The terminal codon may be the terminator, or in an incomplete transcript the last available codon. synonym: "terminal codon variant" EXACT [] synonym: "terminal_codon_variant" EXACT [] synonym: "terminator codon variant" EXACT [] xref: loinc:LA6700-2 "Stop Codon Mutation" is_a: SO:0001580 ! coding_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:40:37Z [Term] id: SO:0001591 name: frame_restoring_variant def: "A sequence variant that reverts the sequence of a previous frameshift mutation back to the initial frame." [SO:ke] synonym: "frame restoring variant" EXACT [] is_a: SO:0001589 ! frameshift_variant created_by: kareneilbeck creation_date: 2010-03-22T02:41:09Z [Term] id: SO:0001592 name: minus_1_frameshift_variant def: "A sequence variant which causes a disruption of the translational reading frame, by shifting one base ahead." [http://arjournals.annualreviews.org/doi/pdf/10.1146/annurev.ge.08.120174.001535] synonym: "-1 frameshift variant" EXACT [] synonym: "minus 1 frameshift variant" EXACT [] is_a: SO:0001589 ! frameshift_variant created_by: kareneilbeck creation_date: 2010-03-22T02:41:30Z [Term] id: SO:0001593 name: minus_2_frameshift_variant synonym: "-2 frameshift variant" EXACT [] synonym: "minus 2 frameshift variant" EXACT [] is_a: SO:0001589 ! frameshift_variant created_by: kareneilbeck creation_date: 2010-03-22T02:41:52Z [Term] id: SO:0001594 name: plus_1_frameshift_variant def: "A sequence variant which causes a disruption of the translational reading frame, by shifting one base backward." [http://arjournals.annualreviews.org/doi/pdf/10.1146/annurev.ge.08.120174.001535] synonym: "+1 frameshift variant" EXACT [] synonym: "plus 1 frameshift variant" EXACT [] is_a: SO:0001589 ! frameshift_variant created_by: kareneilbeck creation_date: 2010-03-22T02:42:06Z [Term] id: SO:0001595 name: plus_2_frameshift_variant synonym: "+2 frameshift variant" EXACT [] synonym: "plus 2 frameshift variant" EXACT [] is_a: SO:0001589 ! frameshift_variant created_by: kareneilbeck creation_date: 2010-03-22T02:42:23Z [Term] id: SO:0001596 name: transcript_secondary_structure_variant def: "A sequence variant within a transcript that changes the secondary structure of the RNA product." [SO:ke] synonym: "transcript secondary structure variant" EXACT [] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-22T02:43:18Z [Term] id: SO:0001597 name: compensatory_transcript_secondary_structure_variant def: "A secondary structure variant that compensate for the change made by a previous variant." [SO:ke] synonym: "compensatory transcript secondary structure variant" EXACT [] is_a: SO:0001596 ! transcript_secondary_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:43:54Z [Term] id: SO:0001598 name: translational_product_structure_variant def: "A sequence variant within the transcript that changes the structure of the translational product." [SO:ke] synonym: "translational product structure variant" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001564 ! gene_variant created_by: kareneilbeck creation_date: 2010-03-22T02:44:17Z [Term] id: SO:0001599 name: 3D_polypeptide_structure_variant def: "A sequence variant that changes the resulting polypeptide structure." [SO:ke] synonym: "3D polypeptide structure variant" EXACT [] is_a: SO:0001598 ! translational_product_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:44:46Z [Term] id: SO:0001600 name: complex_3D_structural_variant def: "A sequence variant that changes the resulting polypeptide structure." [SO:ke] synonym: "complex 3D structural variant" EXACT [] is_a: SO:0001599 ! 3D_polypeptide_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:45:13Z [Term] id: SO:0001601 name: conformational_change_variant def: "A sequence variant in the CDS region that causes a conformational change in the resulting polypeptide sequence." [SO:ke] synonym: "conformational change variant" EXACT [] is_a: SO:0001599 ! 3D_polypeptide_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:45:48Z [Term] id: SO:0001602 name: complex_change_of_translational_product_variant synonym: "complex change of translational product variant" EXACT [] is_a: SO:0001598 ! translational_product_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:46:54Z [Term] id: SO:0001603 name: polypeptide_sequence_variant def: "A sequence variant with in the CDS that causes a change in the resulting polypeptide sequence." [SO:ke] synonym: "polypeptide sequence variant" EXACT [] is_a: SO:0001598 ! translational_product_structure_variant created_by: kareneilbeck creation_date: 2010-03-22T02:47:13Z [Term] id: SO:0001604 name: amino_acid_deletion def: "A sequence variant within a CDS resulting in the loss of an amino acid from the resulting polypeptide." [SO:ke] synonym: "amino acid deletion" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:47:36Z [Term] id: SO:0001605 name: amino_acid_insertion def: "A sequence variant within a CDS resulting in the gain of an amino acid to the resulting polypeptide." [SO:ke] synonym: "amino acid insertion" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:47:56Z [Term] id: SO:0001606 name: amino_acid_substitution def: "A sequence variant of a codon resulting in the substitution of one amino acid for another in the resulting polypeptide." [SO:ke] synonym: "amino acid substitution" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:48:17Z [Term] id: SO:0001607 name: conservative_amino_acid_substitution def: "A sequence variant of a codon causing the substitution of a similar amino acid for another in the resulting polypeptide." [SO:ke] synonym: "conservative amino acid substitution" EXACT [] is_a: SO:0001606 ! amino_acid_substitution created_by: kareneilbeck creation_date: 2010-03-22T02:48:57Z [Term] id: SO:0001608 name: non_conservative_amino_acid_substitution def: "A sequence variant of a codon causing the substitution of a non conservative amino acid for another in the resulting polypeptide." [SO:ke] synonym: "non conservative amino acid substitution" EXACT [] is_a: SO:0001606 ! amino_acid_substitution created_by: kareneilbeck creation_date: 2010-03-22T02:49:23Z [Term] id: SO:0001609 name: elongated_polypeptide def: "A sequence variant with in the CDS that causes elongation of the resulting polypeptide sequence." [SO:ke] synonym: "elongated polypeptide" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:49:52Z [Term] id: SO:0001610 name: elongated_polypeptide_C_terminal def: "A sequence variant with in the CDS that causes elongation of the resulting polypeptide sequence at the C terminus." [SO:ke] synonym: "elongated polypeptide C terminal" EXACT [] is_a: SO:0001609 ! elongated_polypeptide created_by: kareneilbeck creation_date: 2010-03-22T02:50:20Z [Term] id: SO:0001611 name: elongated_polypeptide_N_terminal def: "A sequence variant with in the CDS that causes elongation of the resulting polypeptide sequence at the N terminus." [SO:ke] synonym: "elongated polypeptide N terminal" EXACT [] is_a: SO:0001609 ! elongated_polypeptide created_by: kareneilbeck creation_date: 2010-03-22T02:50:31Z [Term] id: SO:0001612 name: elongated_in_frame_polypeptide_C_terminal def: "A sequence variant with in the CDS that causes in frame elongation of the resulting polypeptide sequence at the C terminus." [SO:ke] synonym: "elongated in frame polypeptide C terminal" EXACT [] is_a: SO:0001610 ! elongated_polypeptide_C_terminal created_by: kareneilbeck creation_date: 2010-03-22T02:51:05Z [Term] id: SO:0001613 name: elongated_out_of_frame_polypeptide_C_terminal def: "A sequence variant with in the CDS that causes out of frame elongation of the resulting polypeptide sequence at the C terminus." [SO:ke] synonym: "elongated polypeptide out of frame C terminal" EXACT [] is_a: SO:0001610 ! elongated_polypeptide_C_terminal created_by: kareneilbeck creation_date: 2010-03-22T02:51:20Z [Term] id: SO:0001614 name: elongated_in_frame_polypeptide_N_terminal_elongation def: "A sequence variant with in the CDS that causes in frame elongation of the resulting polypeptide sequence at the N terminus." [SO:ke] synonym: "elongated in frame polypeptide N terminal" EXACT [] is_a: SO:0001611 ! elongated_polypeptide_N_terminal created_by: kareneilbeck creation_date: 2010-03-22T02:51:49Z [Term] id: SO:0001615 name: elongated_out_of_frame_polypeptide_N_terminal def: "A sequence variant with in the CDS that causes out of frame elongation of the resulting polypeptide sequence at the N terminus." [SO:ke] synonym: "elongated out of frame N terminal" EXACT [] is_a: SO:0001611 ! elongated_polypeptide_N_terminal created_by: kareneilbeck creation_date: 2010-03-22T02:52:05Z [Term] id: SO:0001616 name: polypeptide_fusion def: "A sequence variant that causes a fusion of two polypeptide sequences." [SO:ke] synonym: "polypeptide fusion" EXACT [] is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:52:43Z [Term] id: SO:0001617 name: polypeptide_truncation def: "A sequence variant of the CD that causes a truncation of the resulting polypeptide." [SO:ke] synonym: "polypeptide truncation" EXACT [] xref: EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html is_a: SO:0001603 ! polypeptide_sequence_variant created_by: kareneilbeck creation_date: 2010-03-22T02:53:07Z [Term] id: SO:0001618 name: inactive_catalytic_site def: "A sequence variant that causes the inactivation of a catalytic site with respect to a reference sequence." [SO:ke] synonym: "inactive catalytic site" EXACT [] is_a: SO:0001560 ! inactive_ligand_binding_site created_by: kareneilbeck creation_date: 2010-03-22T03:06:14Z [Term] id: SO:0001619 name: nc_transcript_variant def: "A transcript variant of a non coding RNA gene." [SO:ke] comment: Within non-coding gene - Located within a gene that does not code for a protein. synonym: "nc transcript variant" EXACT [] synonym: "non coding transcript variant" EXACT [] synonym: "within_non_coding_gene" EXACT dbsnp [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-23T11:16:23Z [Term] id: SO:0001620 name: mature_miRNA_variant def: "A transcript variant located with the sequence of the mature miRNA." [SO:ke] comment: EBI term: Within mature miRNA - Located within a microRNA. synonym: "mature miRNA variant" EXACT [] synonym: "within_mature_miRNA" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001619 ! nc_transcript_variant created_by: kareneilbeck creation_date: 2010-03-23T11:16:58Z [Term] id: SO:0001621 name: NMD_transcript_variant def: "A variant in a transcript that is the target of NMD." [SO:ke] synonym: "NMD transcript variant" EXACT [] synonym: "NMD_transcript" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-23T11:20:40Z [Term] id: SO:0001622 name: UTR_variant def: "A transcript variant that is located within the UTR." [SO:ke] synonym: "UTR variant" EXACT [] synonym: "UTR_" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-23T11:22:58Z [Term] id: SO:0001623 name: 5_prime_UTR_variant def: "A UTR variant of the 5' UTR." [SO:ke] comment: EBI term: 5prime UTR variations - In 5prime UTR (untranslated region). synonym: "5'UTR variant" EXACT [] synonym: "5PRIME_UTR" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "five prime UTR variant" EXACT [] synonym: "untranslated-5" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] is_a: SO:0001622 ! UTR_variant created_by: kareneilbeck creation_date: 2010-03-23T11:23:29Z [Term] id: SO:0001624 name: 3_prime_UTR_variant def: "A UTR variant of the 3' UTR." [SO:ke] comment: EBI term 3prime UTR variations - In 3prime UTR. synonym: "3'UTR variant" EXACT [] synonym: "3PRIME_UTR" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "three prime UTR variant" EXACT [] synonym: "untranslated-3" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] is_a: SO:0001622 ! UTR_variant created_by: kareneilbeck creation_date: 2010-03-23T11:23:54Z [Term] id: SO:0001626 name: incomplete_terminal_codon_variant def: "A sequence variant where at least one base of the final codon of an incompletely annotated transcript is changed." [SO:ke] comment: EBI term: Partial codon - Located within the final, incomplete codon of a transcript with a shortened coding sequence where the end is unknown. synonym: "incomplete terminal codon variant" EXACT [] synonym: "partial_codon" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001590 ! terminator_codon_variant is_a: SO:0001650 ! inframe_variant created_by: kareneilbeck creation_date: 2010-03-23T03:51:15Z [Term] id: SO:0001627 name: intron_variant def: "A transcript variant occurring within an intron." [SO:ke] comment: EBI term: Intronic variations - In intron. synonym: "intron variant" EXACT [] synonym: "intron_" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] synonym: "intronic" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001576 ! transcript_variant created_by: kareneilbeck creation_date: 2010-03-23T03:52:38Z [Term] id: SO:0001628 name: intergenic_variant def: "A sequence variant located in the intergenic region, between genes." [SO:ke] comment: EBI term Intergenic variations - More than 5 kb either upstream or downstream of a transcript. synonym: "intergenic" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "intergenic variant" EXACT [] is_a: SO:0001878 ! feature_variant created_by: kareneilbeck creation_date: 2010-03-23T05:07:37Z [Term] id: SO:0001629 name: splice_site_variant def: "A sequence variant that changes the first two or last two bases of an intron, or the 5th base from the start of the intron in the orientation of the transcript." [http://ensembl.org/info/docs/variation/index.html] comment: EBI term - essential splice site - In the first 2 or the last 2 base pairs of an intron. The 5th base is on the donor (5') side of the intron. Updated to b in line with Cancer Genome Project at the Sanger. synonym: "essential_splice_site" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "splice site variant" EXACT [] is_a: SO:0001627 ! intron_variant created_by: kareneilbeck creation_date: 2010-03-24T09:42:00Z [Term] id: SO:0001630 name: splice_region_variant def: "A sequence variant in which a change has occurred within the region of the splice site, either within 1-3 bases of the exon or 3-8 bases of the intron." [http://ensembl.org/info/docs/variation/index.html] comment: EBI term: splice site - 1-3 bps into an exon or 3-8 bps into an intron. synonym: "splice region variant" EXACT [] synonym: "splice_region_variant" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001568 ! splicing_variant created_by: kareneilbeck creation_date: 2010-03-24T09:46:02Z [Term] id: SO:0001631 name: upstream_gene_variant def: "A sequence variant located 5' of a gene." [SO:ke] comment: Different groups annotate up and downstream to different lengths. The subtypes are specific and are backed up with cross references. synonym: "upstream gene variant" EXACT [] is_a: SO:0001878 ! feature_variant created_by: kareneilbeck creation_date: 2010-03-24T09:49:13Z [Term] id: SO:0001632 name: downstream_gene_variant def: "A sequence variant located 3' of a gene." [SO:ke] comment: Different groups annotate up and downstream to different lengths. The subtypes are specific and are backed up with cross references. synonym: "downstream gene variant" EXACT [] is_a: SO:0001878 ! feature_variant created_by: kareneilbeck creation_date: 2010-03-24T09:49:38Z [Term] id: SO:0001633 name: 5KB_downstream_variant def: "A sequence variant located within 5 KB of the end of a gene." [SO:ke] comment: EBI term Downstream variations - Within 5 kb downstream of the 3prime end of a transcript. synonym: "5KB downstream variant" EXACT [] synonym: "downstream" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] synonym: "within 5KB downstream" RELATED [] is_a: SO:0001632 ! downstream_gene_variant created_by: kareneilbeck creation_date: 2010-03-24T09:50:16Z [Term] id: SO:0001634 name: 500B_downstream_variant def: "A sequence variant located within a half KB of the end of a gene." [SO:ke] synonym: "500B downstream variant" EXACT [] synonym: "near-gene-3" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] is_a: SO:0001633 ! 5KB_downstream_variant created_by: kareneilbeck creation_date: 2010-03-24T09:50:42Z [Term] id: SO:0001635 name: 5KB_upstream_variant def: "A sequence variant located within 5KB 5' of a gene." [SO:ke] comment: EBI term Upstream variations - Within 5 kb upstream of the 5prime end of a transcript. synonym: "5kb upstream variant" EXACT [] synonym: "upstream" EXACT ebi_variants [http://ensembl.org/info/docs/variation/index.html] is_a: SO:0001631 ! upstream_gene_variant created_by: kareneilbeck creation_date: 2010-03-24T09:51:06Z [Term] id: SO:0001636 name: 2KB_upstream_variant def: "A sequence variant located within 2KB 5' of a gene." [SO:ke] synonym: "2KB upstream variant" EXACT [] synonym: "near-gene-5" EXACT dbsnp [ftp://ftp.ncbi.nih.gov/snp/specs/docsum_3.1.xsd] is_a: SO:0001635 ! 5KB_upstream_variant created_by: kareneilbeck creation_date: 2010-03-24T09:51:22Z [Term] id: SO:0001637 name: rRNA_gene def: "A gene that encodes for ribosomal RNA." [SO:ke] synonym: "rRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-04-21T10:10:32Z [Term] id: SO:0001638 name: piRNA_gene def: "A gene that encodes for an piwi associated RNA." [SO:ke] synonym: "piRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-04-21T10:11:36Z [Term] id: SO:0001639 name: RNase_P_RNA_gene def: "A gene that encodes an RNase P RNA." [SO:ke] synonym: "RNase P RNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-04-21T10:13:23Z [Term] id: SO:0001640 name: RNase_MRP_RNA_gene def: "A gene that encodes a RNase_MRP_RNA." [SO:ke] synonym: "RNase MRP RNA gene" RELATED [] is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-04-21T10:13:58Z [Term] id: SO:0001641 name: lincRNA_gene def: "A gene that encodes large intervening non-coding RNA." [SO:ke] synonym: "lincRNA gene" EXACT [] is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-04-21T10:14:24Z [Term] id: SO:0001642 name: mathematically_defined_repeat def: "A mathematically defined repeat (MDR) is a experimental feature that is determined by querying overlapping oligomers of length k against a database of shotgun sequence data and identifying regions in the query sequence that exceed a statistically determined threshold of repetitiveness." [SO:jestill] comment: Mathematically defined repeat regions are determined without regard to the biological origin of the repetitive region. The repeat units of a MDR are the overlapping oligomers of size k that were used to for the query. Tools that can annotate mathematically defined repeats include Tallymer (Kurtz et al 2008, BMC Genomics: 517) and RePS (Wang et al, Genome Res 12(5): 824-831.). synonym: "mathematically defined repeat" EXACT [] is_a: SO:0001410 ! experimental_feature created_by: kareneilbeck creation_date: 2010-05-03T11:50:14Z [Term] id: SO:0001643 name: telomerase_RNA_gene def: "A telomerase RNA gene is a non coding RNA gene the RNA product of which is a component of telomerase." [SO:ke] synonym: "Telomerase RNA component" EXACT [] synonym: "telomerase RNA gene" EXACT [] synonym: "TERC" EXACT [] xref: http:http://en.wikipedia.org/wiki/Telomerase_RNA_component "wikipedia" is_a: SO:0001263 ! ncRNA_gene created_by: kareneilbeck creation_date: 2010-05-18T05:26:38Z [Term] id: SO:0001644 name: targeting_vector def: "An engineered vector that is able to take part in homologous recombination in a host with the intent of introducing site specific genomic modifications." [MGD:tm, PMID:10354467] synonym: "targeting vector" RELATED [] is_a: SO:0000440 ! vector_replicon is_a: SO:0000804 ! engineered_region relationship: has_part SO:0000853 ! homologous_region relationship: has_quality SO:0000783 ! engineered created_by: kareneilbeck creation_date: 2010-05-28T02:05:25Z [Term] id: SO:0001645 name: genetic_marker def: "A measurable sequence feature that varies within a population." [SO:db] synonym: "genetic marker" RELATED [] is_a: SO:0001411 ! biological_region created_by: kareneilbeck creation_date: 2010-05-28T02:33:07Z [Term] id: SO:0001646 name: DArT_marker def: "A genetic marker, discovered using Diversity Arrays Technology (DArT) technology." [SO:ke] synonym: "DArT marker" EXACT [] is_a: SO:0001645 ! genetic_marker created_by: kareneilbeck creation_date: 2010-05-28T02:34:43Z [Term] id: SO:0001647 name: kozak_sequence def: "A kind of ribosome entry site, specific to Eukaryotic organisms that overlaps part of both 5' UTR and CDS sequence." [SO:ke] subset: SOFA synonym: "kozak consensus" EXACT [] synonym: "kozak consensus sequence" EXACT [] synonym: "kozak sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Kozak_consensus_sequence "wikipedia" is_a: SO:0000139 ! ribosome_entry_site created_by: kareneilbeck creation_date: 2010-06-07T03:12:20Z [Term] id: SO:0001648 name: nested_transposon def: "A transposon that is disrupted by the insertion of another element." [SO:ke] synonym: "nested transposon" EXACT [] is_a: SO:0000101 ! transposable_element created_by: kareneilbeck creation_date: 2010-06-23T03:22:57Z [Term] id: SO:0001649 name: nested_repeat def: "A repeat that is disrupted by the insertion of another element." [SO:ke] synonym: "nested repeat" RELATED [] is_a: SO:0000657 ! repeat_region created_by: kareneilbeck creation_date: 2010-06-23T03:24:55Z [Term] id: SO:0001650 name: inframe_variant def: "A sequence variant which does not cause a disruption of the translational reading frame." [SO:ke] synonym: "cds-indel" EXACT dbsnp [] synonym: "inframe variant" EXACT [] is_a: SO:0001818 ! protein_altering_variant created_by: kareneilbeck creation_date: 2010-07-19T01:24:44Z [Term] id: SO:0001653 name: retinoic_acid_responsive_element def: "A transcription factor binding site of variable direct repeats of the sequence PuGGTCA spaced by five nucleotides (DR5) found in the promoters of retinoic acid-responsive genes, to which retinoic acid receptors bind." [PMID:11327309, PMID:19917671] synonym: "RARE" EXACT [] synonym: "retinoic acid responsive element" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0000167 ! promoter created_by: kareneilbeck creation_date: 2010-08-03T10:46:12Z [Term] id: SO:0001654 name: nucleotide_to_protein_binding_site def: "A binding site that, in the nucleotide molecule, interacts selectively and non-covalently with polypeptide residues." [SO:ke] subset: SOFA synonym: "nucleotide to protein binding site" RELATED [] is_a: SO:0000410 ! protein_binding_site created_by: kareneilbeck creation_date: 2010-08-03T12:26:05Z [Term] id: SO:0001655 name: nucleotide_binding_site def: "A binding site that, in the molecule, interacts selectively and non-covalently with nucleotide residues." [SO:cb] comment: See GO:0000166 : nucleotide binding. synonym: "nucleotide binding site" EXACT [] is_a: SO:0000409 ! binding_site created_by: kareneilbeck creation_date: 2010-08-03T12:30:04Z [Term] id: SO:0001656 name: metal_binding_site def: "A binding site that, in the molecule, interacts selectively and non-covalently with metal ions." [SO:cb] comment: See GO:0046872 : metal ion binding. synonym: "metal binding site" RELATED [] is_a: SO:0000409 ! binding_site created_by: kareneilbeck creation_date: 2010-08-03T12:31:42Z [Term] id: SO:0001657 name: ligand_binding_site def: "A binding site that, in the molecule, interacts selectively and non-covalently with a small molecule such as a drug, or hormone." [SO:ke] synonym: "ligand binding site" EXACT [] is_a: SO:0000409 ! binding_site created_by: kareneilbeck creation_date: 2010-08-03T12:32:58Z [Term] id: SO:0001658 name: nested_tandem_repeat def: "An NTR is a nested repeat of two distinct tandem motifs interspersed with each other." [SO:AF] comment: Tracker ID: 3052459. synonym: "nested tandem repeat" EXACT [] synonym: "NTR" EXACT [] is_a: SO:0001649 ! nested_repeat created_by: kareneilbeck creation_date: 2010-08-26T09:36:16Z [Term] id: SO:0001659 name: promoter_element synonym: "promoter element" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: overlaps SO:0000235 ! TF_binding_site created_by: kareneilbeck creation_date: 2010-10-01T11:48:32Z [Term] id: SO:0001660 name: core_promoter_element synonym: "core promoter element" EXACT [] synonym: "general transcription factor binding site" RELATED [] is_a: SO:0001659 ! promoter_element created_by: kareneilbeck creation_date: 2010-10-01T11:49:03Z [Term] id: SO:0001661 name: RNA_polymerase_II_TATA_box def: "A TATA box core promoter of a gene transcribed by RNA polymerase II." [PMID:16858867] synonym: "RNA polymerase II TATA box" EXACT [] is_a: SO:0000174 ! TATA_box relationship: part_of SO:0001669 ! RNApol_II_core_promoter created_by: kareneilbeck creation_date: 2010-10-01T02:42:12Z [Term] id: SO:0001662 name: RNA_polymerase_III_TATA_box def: "A TATA box core promoter of a gene transcribed by RNA polymerase III." [SO:ke] synonym: "RNA polymerase III TATA box" EXACT [] is_a: SO:0000174 ! TATA_box relationship: part_of SO:0000171 ! RNApol_III_promoter created_by: kareneilbeck creation_date: 2010-10-01T02:43:16Z [Term] id: SO:0001663 name: BREd_motif def: "A core TRNA polymerase II promoter element with consensus (G/A)T(T/G/A)(T/A)(G/T)(T/G)(T/G)." [PMID:16858867] synonym: "BREd" EXACT [] synonym: "BREd motif" RELATED [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0001669 ! RNApol_II_core_promoter created_by: kareneilbeck creation_date: 2010-10-01T02:49:55Z [Term] id: SO:0001664 name: DCE def: "A discontinuous core element of RNA polymerase II transcribed genes, situated downstream of the TSS. It is composed of three sub elements: SI, SII and SIII." [PMID:16858867] synonym: "downstream core element" RELATED [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0001669 ! RNApol_II_core_promoter created_by: kareneilbeck creation_date: 2010-10-01T02:56:41Z [Term] id: SO:0001665 name: DCE_SI def: "A sub element of the DCE core promoter element, with consensus sequence CTTC." [PMID:16858867, SO:ke] synonym: "DCE SI" RELATED [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001664 ! DCE created_by: kareneilbeck creation_date: 2010-10-01T03:00:10Z [Term] id: SO:0001666 name: DCE_SII def: "A sub element of the DCE core promoter element with consensus sequence CTGT." [PMID:16858867, SO:ke] synonym: "DCE SII" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001664 ! DCE created_by: kareneilbeck creation_date: 2010-10-01T03:00:30Z [Term] id: SO:0001667 name: DCE_SIII def: "A sub element of the DCE core promoter element with consensus sequence AGC." [PMID:16858867, SO:ke] synonym: "DCE SIII" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001664 ! DCE created_by: kareneilbeck creation_date: 2010-10-01T03:00:44Z [Term] id: SO:0001668 name: proximal_promoter_element synonym: "proximal promoter element" RELATED [] synonym: "specific transcription factor binding site" RELATED [] is_a: SO:0001678 ! regulatory_promoter_element created_by: kareneilbeck creation_date: 2010-10-01T03:10:23Z [Term] id: SO:0001669 name: RNApol_II_core_promoter def: "The minimal portion of the promoter required to properly initiate transcription in RNA polymerase II transcribed genes." [PMID:16858867] synonym: "RNApol II core promoter" EXACT [] is_a: SO:0000170 ! RNApol_II_promoter created_by: kareneilbeck creation_date: 2010-10-01T03:13:41Z [Term] id: SO:0001670 name: distal_promoter_element synonym: "distal promoter element" RELATED [] is_a: SO:0001678 ! regulatory_promoter_element created_by: kareneilbeck creation_date: 2010-10-01T03:21:08Z [Term] id: SO:0001671 name: bacterial_RNApol_promoter_sigma_70 synonym: "bacterial RNA polymerase promoter sigma 70" EXACT [] is_a: SO:0000613 ! bacterial_RNApol_promoter created_by: kareneilbeck creation_date: 2010-10-06T01:41:34Z [Term] id: SO:0001672 name: bacterial_RNApol_promoter_sigma54 synonym: "bacterial RNA polymerase promoter sigma54" EXACT [] is_a: SO:0000613 ! bacterial_RNApol_promoter created_by: kareneilbeck creation_date: 2010-10-06T01:42:37Z [Term] id: SO:0001673 name: minus_12_signal def: "A conserved region about 12-bp upstream of the start point of bacterial transcription units, involved with sigma factor 54." [PMID:18331472] synonym: "minus 12 signal" EXACT [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001672 ! bacterial_RNApol_promoter_sigma54 created_by: kareneilbeck creation_date: 2010-10-06T01:44:57Z [Term] id: SO:0001674 name: minus_24_signal def: "A conserved region about 12-bp upstream of the start point of bacterial transcription units, involved with sigma factor 54." [PMID:18331472] synonym: "minus 24 signal" RELATED [] is_a: SO:0000713 ! DNA_motif relationship: part_of SO:0001672 ! bacterial_RNApol_promoter_sigma54 created_by: kareneilbeck creation_date: 2010-10-06T01:45:24Z [Term] id: SO:0001675 name: A_box_type_1 def: "An A box within an RNA polymerase III type 1 promoter." [SO:ke] comment: The A box can be found in the promoters of type 1 and type 2 (pol III) so sub-typing here allows the part of relationship of the subtypes to remain true. synonym: "A box type 1" RELATED [] is_a: SO:0000619 ! A_box relationship: part_of SO:0000617 ! RNApol_III_promoter_type_1 created_by: kareneilbeck creation_date: 2010-10-06T05:43:43Z [Term] id: SO:0001676 name: A_box_type_2 def: "An A box within an RNA polymerase III type 2 promoter." [SO:ke] comment: The A box can be found in the promoters of type 1 and type 2 (pol III) so sub-typing here allows the part of relationship of the subtypes to remain true. synonym: "A box type 2" RELATED [] is_a: SO:0000619 ! A_box relationship: part_of SO:0000618 ! RNApol_III_promoter_type_2 created_by: kareneilbeck creation_date: 2010-10-06T05:44:18Z [Term] id: SO:0001677 name: intermediate_element def: "A core promoter region of RNA polymerase III type 1 promoters." [PMID:12381659] synonym: "IE" EXACT [] synonym: "intermediate element" RELATED [] is_a: SO:0001660 ! core_promoter_element relationship: part_of SO:0000617 ! RNApol_III_promoter_type_1 created_by: kareneilbeck creation_date: 2010-10-06T05:52:03Z [Term] id: SO:0001678 name: regulatory_promoter_element def: "A promoter element that is not part of the core promoter, but provides the promoter with a specific regulatory region." [PMID:12381659] synonym: "regulatory promoter element" RELATED [] is_a: SO:0001659 ! promoter_element created_by: kareneilbeck creation_date: 2010-10-07T04:39:48Z [Term] id: SO:0001679 name: transcription_regulatory_region def: "A regulatory region that is involved in the control of the process of transcription." [SO:ke] subset: SOFA synonym: "transcription regulatory region" EXACT [] is_a: SO:0005836 ! regulatory_region created_by: kareneilbeck creation_date: 2010-10-12T03:49:35Z [Term] id: SO:0001680 name: translation_regulatory_region def: "A regulatory region that is involved in the control of the process of translation." [SO:ke] synonym: "translation regulatory region" EXACT [] is_a: SO:0005836 ! regulatory_region created_by: kareneilbeck creation_date: 2010-10-12T03:52:45Z [Term] id: SO:0001681 name: recombination_regulatory_region def: "A regulatory region that is involved in the control of the process of recombination." [SO:ke] synonym: "recombination regulatory region" EXACT [] is_a: SO:0005836 ! regulatory_region created_by: kareneilbeck creation_date: 2010-10-12T03:53:35Z [Term] id: SO:0001682 name: replication_regulatory_region def: "A regulatory region that is involved in the control of the process of nucleotide replication." [SO:ke] synonym: "replication regulatory region" RELATED [] is_a: SO:0005836 ! regulatory_region created_by: kareneilbeck creation_date: 2010-10-12T03:54:09Z [Term] id: SO:0001683 name: sequence_motif def: "A sequence motif is a nucleotide or amino-acid sequence pattern that may have biological significance." [http://en.wikipedia.org/wiki/Sequence_motif] subset: SOFA synonym: "sequence motif" RELATED [] xref: http://en.wikipedia.org/wiki/Sequence_motif "wikipedia" is_a: SO:0001411 ! biological_region created_by: kareneilbeck creation_date: 2010-10-14T04:13:22Z [Term] id: SO:0001684 name: experimental_feature_attribute def: "An attribute of an experimentally derived feature." [SO:ke] synonym: "experimental feature attribute" RELATED [] is_a: SO:0000733 ! feature_attribute created_by: kareneilbeck creation_date: 2010-10-28T02:22:23Z [Term] id: SO:0001685 name: score def: "The score of an experimentally derived feature such as a p-value." [SO:ke] is_a: SO:0001684 ! experimental_feature_attribute created_by: kareneilbeck creation_date: 2010-10-28T02:23:16Z [Term] id: SO:0001686 name: quality_value def: "An experimental feature attribute that defines the quality of the feature in a quantitative way, such as a phred quality score." [SO:ke] synonym: "quality value" RELATED [] is_a: SO:0001684 ! experimental_feature_attribute created_by: kareneilbeck creation_date: 2010-10-28T02:24:11Z [Term] id: SO:0001687 name: restriction_enzyme_recognition_site def: "The nucleotide region (usually a palindrome) that is recognized by a restriction enzyme. This may or may not be equal to the restriction enzyme binding site." [SO:ke] synonym: "restriction endonuclease recognition site" EXACT [] synonym: "restriction enzyme recognition site" EXACT [] is_a: SO:0001411 ! biological_region created_by: kareneilbeck creation_date: 2010-10-29T12:29:57Z [Term] id: SO:0001688 name: restriction_enzyme_cleavage_junction def: "The boundary at which a restriction enzyme breaks the nucleotide sequence." [SO:ke] synonym: "restriction enzyme cleavage junction" EXACT [] is_a: SO:0000699 ! junction created_by: kareneilbeck creation_date: 2010-10-29T12:35:02Z [Term] id: SO:0001689 name: five_prime_restriction_enzyme_junction def: "The restriction enzyme cleavage junction on the 5' strand of the nucleotide sequence." [SO:ke] synonym: "5' restriction enzyme junction" EXACT [] is_a: SO:0001694 ! single_strand_restriction_enzyme_cleavage_site relationship: part_of SO:0001692 ! sticky_end_restriction_enzyme_cleavage_site created_by: kareneilbeck creation_date: 2010-10-29T12:36:24Z [Term] id: SO:0001690 name: three_prime_restriction_enzyme_junction synonym: "3' restriction enzyme junction" EXACT [] is_a: SO:0001694 ! single_strand_restriction_enzyme_cleavage_site relationship: part_of SO:0001692 ! sticky_end_restriction_enzyme_cleavage_site created_by: kareneilbeck creation_date: 2010-10-29T12:37:52Z [Term] id: SO:0001691 name: blunt_end_restriction_enzyme_cleavage_site synonym: "blunt end restriction enzyme cleavage site" EXACT [] is_a: SO:0001687 ! restriction_enzyme_recognition_site created_by: kareneilbeck creation_date: 2010-10-29T12:39:53Z [Term] id: SO:0001692 name: sticky_end_restriction_enzyme_cleavage_site synonym: "sticky end restriction enzyme cleavage site" RELATED [] is_a: SO:0001687 ! restriction_enzyme_recognition_site created_by: kareneilbeck creation_date: 2010-10-29T12:40:50Z [Term] id: SO:0001693 name: blunt_end_restriction_enzyme_cleavage_junction def: "A restriction enzyme cleavage site where both strands are cut at the same position." [SO:ke] synonym: "blunt end restriction enzyme cleavage site" RELATED [] is_a: SO:0001688 ! restriction_enzyme_cleavage_junction relationship: part_of SO:0001691 ! blunt_end_restriction_enzyme_cleavage_site created_by: kareneilbeck creation_date: 2010-10-29T12:43:14Z [Term] id: SO:0001694 name: single_strand_restriction_enzyme_cleavage_site def: "A restriction enzyme cleavage site whereby only one strand is cut." [SO:ke] synonym: "single strand restriction enzyme cleavage site" RELATED [] is_a: SO:0001688 ! restriction_enzyme_cleavage_junction created_by: kareneilbeck creation_date: 2010-10-29T12:44:48Z [Term] id: SO:0001695 name: restriction_enzyme_single_strand_overhang def: "A terminal region of DNA sequence where the end of the region is not blunt ended." [SO:ke] synonym: "single strand overhang" EXACT [] synonym: "sticky end" RELATED [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0001692 ! sticky_end_restriction_enzyme_cleavage_site created_by: kareneilbeck creation_date: 2010-10-29T12:48:35Z [Term] id: SO:0001696 name: experimentally_defined_binding_region def: "A region that has been implicated in binding although the exact coordinates of binding may be unknown." [SO:ke] synonym: "experimentally defined binding region" RELATED [] is_a: SO:0001410 ! experimental_feature created_by: kareneilbeck creation_date: 2010-11-02T11:39:59Z [Term] id: SO:0001697 name: ChIP_seq_region def: "A region of sequence identified by CHiP seq technology to contain a protein binding site." [SO:ke] synonym: "ChIP seq region" RELATED [] is_a: SO:0001696 ! experimentally_defined_binding_region relationship: contains SO:0000410 ! protein_binding_site created_by: kareneilbeck creation_date: 2010-11-02T11:43:07Z [Term] id: SO:0001698 name: ASPE_primer def: "\"A primer containing an SNV at the 3' end for accurate genotyping." [http://www.ncbi.nlm.nih.gov/pubmed/11252801] synonym: "allele specific primer extension primer" EXACT [] synonym: "ASPE primer" EXACT [] is_a: SO:0000112 ! primer created_by: kareneilbeck creation_date: 2010-11-11T03:25:21Z [Term] id: SO:0001699 name: dCAPS_primer def: "A primer with one or more mis-matches to the DNA template corresponding to a position within a restriction enzyme recognition site." [http://www.ncbi.nlm.nih.gov/pubmed/9628033] synonym: "dCAPS primer" EXACT [] synonym: "derived cleaved amplified polymorphic primer" EXACT [] is_a: SO:0000112 ! primer created_by: kareneilbeck creation_date: 2010-11-11T03:27:09Z [Term] id: SO:0001700 name: histone_modification def: "Histone modification is a post translationally modified region whereby residues of the histone protein are modified by methylation, acetylation, phosphorylation, ubiquitination, sumoylation, citrullination, or ADP-ribosylation." [http:en.wikipedia.org/wiki/Histone] synonym: "histone modification" EXACT [] synonym: "histone modification site" RELATED [] is_a: SO:0001089 ! post_translationally_modified_region is_a: SO:0001720 ! epigenetically_modified_region relationship: has_quality SO:0000133 ! epigenetically_modified created_by: kareneilbeck creation_date: 2010-03-31T10:22:08Z [Term] id: SO:0001701 name: histone_methylation_site def: "A histone modification site where the modification is the methylation of the residue." [SO:ke] synonym: "histone methylation" EXACT [] synonym: "histone methylation site" EXACT [] is_a: SO:0001700 ! histone_modification created_by: kareneilbeck creation_date: 2010-03-31T10:23:02Z [Term] id: SO:0001702 name: histone_acetylation_site def: "A histone modification where the modification is the acylation of the residue." [SO:ke] synonym: "histone acetylation" EXACT [] synonym: "histone acetylatoin site" EXACT [] is_a: SO:0001700 ! histone_modification created_by: kareneilbeck creation_date: 2010-03-31T10:23:27Z [Term] id: SO:0001703 name: H3K9_acetylation_site def: "A kind of histone modification site, whereby the 9th residue (a lysine), from the start of the H3 histone protein is acylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K9 acetylation site" EXACT [] synonym: "H3K9Ac" RELATED [] is_a: SO:0001702 ! histone_acetylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:25:05Z [Term] id: SO:0001704 name: H3K14_acetylation_site def: "A kind of histone modification site, whereby the 14th residue (a lysine), from the start of the H3 histone protein is acylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K14 acetylation site" EXACT [] synonym: "H3K14Ac" RELATED [] is_a: SO:0001702 ! histone_acetylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:25:53Z [Term] id: SO:0001705 name: H3K4_monomethylation_site def: "A kind of histone modification, whereby the 4th residue (a lysine), from the start of the H3 protein is mono-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K4 mono-methylation site" EXACT [] synonym: "H3K4me1" RELATED [] is_a: SO:0001734 ! H3K4_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:28:14Z [Term] id: SO:0001706 name: H3K4_trimethylation def: "A kind of histone modification site, whereby the 4th residue (a lysine), from the start of the H3 protein is tri-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K4 tri-methylation" EXACT [] synonym: "H3K4me3" RELATED [] is_a: SO:0001734 ! H3K4_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:29:12Z [Term] id: SO:0001707 name: H3K9_trimethylation_site def: "A kind of histone modification site, whereby the 9th residue (a lysine), from the start of the H3 histone protein is tri-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K9 tri-methylation site" EXACT [] synonym: "H3K9Me3" RELATED [] is_a: SO:0001736 ! H3K9_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:30:34Z [Term] id: SO:0001708 name: H3K27_monomethylation_site def: "A kind of histone modification site, whereby the 27th residue (a lysine), from the start of the H3 histone protein is mono-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H2K27 mono-methylation site" EXACT [] synonym: "H2K27Me1" RELATED [] is_a: SO:0001732 ! H3K27_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:31:54Z [Term] id: SO:0001709 name: H3K27_trimethylation_site def: "A kind of histone modification site, whereby the 27th residue (a lysine), from the start of the H3 histone protein is tri-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K27 tri-methylation site" EXACT [] synonym: "H3K27Me3" RELATED [] is_a: SO:0001732 ! H3K27_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:32:41Z [Term] id: SO:0001710 name: H3K79_monomethylation_site def: "A kind of histone modification site, whereby the 79th residue (a lysine), from the start of the H3 histone protein is mono- methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K79 mono-methylation site" EXACT [] synonym: "H3K79me1" RELATED [] is_a: SO:0001735 ! H3K79_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:33:42Z [Term] id: SO:0001711 name: H3K79_dimethylation_site def: "A kind of histone modification site, whereby the 79th residue (a lysine), from the start of the H3 histone protein is di-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K79 di-methylation site" EXACT [] synonym: "H3K79Me2" RELATED [] is_a: SO:0001735 ! H3K79_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:34:39Z [Term] id: SO:0001712 name: H3K79_trimethylation_site def: "A kind of histone modification site, whereby the 79th residue (a lysine), from the start of the H3 histone protein is tri-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H3K79 tri-methylation site" EXACT [] synonym: "H3K79Me3" RELATED [] is_a: SO:0001735 ! H3K79_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:35:30Z [Term] id: SO:0001713 name: H4K20_monomethylation_site def: "A kind of histone modification site, whereby the 20th residue (a lysine), from the start of the H34histone protein is mono-methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H4K20 mono-methylation site" EXACT [] synonym: "H4K20Me1" RELATED [] is_a: SO:0001701 ! histone_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:36:43Z [Term] id: SO:0001714 name: H2BK5_monomethylation_site def: "A kind of histone modification site, whereby the 5th residue (a lysine), from the start of the H2B protein is methylated." [http://en.wikipedia.org/wiki/Histone] synonym: "H2BK5 mono-methylation site" EXACT [] is_a: SO:0001701 ! histone_methylation_site created_by: kareneilbeck creation_date: 2010-03-31T10:38:12Z [Term] id: SO:0001715 name: ISRE def: "An ISRE is a transcriptional cis regulatory region, containing the consensus region: YAGTTTC(A/T)YTTTYCC, responsible for increased transcription via interferon binding." [http://genesdev.cshlp.org/content/2/4/383.abstrac] comment: Term requested via tracker (2981725) by Alan Ruttenberg, April 2010. It has been described as both an enhancer and a promoter, so the parent is the more general term. synonym: "interferon stimulated response element" EXACT [] is_a: SO:0001055 ! transcriptional_cis_regulatory_region created_by: kareneilbeck creation_date: 2010-04-05T11:15:08Z [Term] id: SO:0001716 name: histone_ubiqitination_site def: "A histone modification site where ubiquitin may be added." [SO:ke] synonym: "histone ubiquitination site" RELATED [] is_a: SO:0001700 ! histone_modification created_by: kareneilbeck creation_date: 2010-04-13T10:12:18Z [Term] id: SO:0001717 name: H2B_ubiquitination_site def: "A histone modification site on H2B where ubiquitin may be added." [SO:ke] synonym: "H2BUbiq" RELATED [] is_a: SO:0001716 ! histone_ubiqitination_site created_by: kareneilbeck creation_date: 2010-04-13T10:13:28Z [Term] id: SO:0001718 name: H3K18_acetylation_site def: "A kind of histone modification site, whereby the 14th residue (a lysine), from the start of the H3 histone protein is acylated." [SO:ke] synonym: "H3K18 acetylation site" EXACT [] synonym: "H3K18Ac" RELATED [] is_a: SO:0001702 ! histone_acetylation_site created_by: kareneilbeck creation_date: 2010-04-13T10:39:35Z [Term] id: SO:0001719 name: H3K23_acylation_site def: "A kind of histone modification, whereby the 23rd residue (a lysine), from the start of the H3 histone protein is acylated." [SO:ke] synonym: "H3K23 acylation site" RELATED [] synonym: "H3K23Ac" RELATED [] is_a: SO:0001702 ! histone_acetylation_site created_by: kareneilbeck creation_date: 2010-04-13T10:42:45Z [Term] id: SO:0001720 name: epigenetically_modified_region def: "A biological region implicated in inherited changes caused by mechanisms other than changes in the underlying DNA sequence." [http://en.wikipedia.org/wiki/Epigenetics, SO:ke] subset: SOFA synonym: "epigenetically modified region" RELATED [] is_a: SO:0001411 ! biological_region relationship: has_quality SO:0000133 ! epigenetically_modified created_by: kareneilbeck creation_date: 2010-03-27T12:02:29Z [Term] id: SO:0001721 name: H3K27_acylation_site def: "A kind of histone modification site, whereby the 27th residue (a lysine), from the start of the H3 histone protein is acylated." [SO:ke] synonym: "H3K27 acylation site" EXACT [] synonym: "H3K27Ac" RELATED [] is_a: SO:0001702 ! histone_acetylation_site created_by: kareneilbeck creation_date: 2010-04-13T10:44:09Z [Term] id: SO:0001722 name: H3K36_monomethylation_site def: "A kind of histone modification site, whereby the 36th residue (a lysine), from the start of the H3 histone protein is mono-methylated." [SO:ke] synonym: "H3K36 mono-methylation site" EXACT [] synonym: "H3K36. subset: SOFA synonym: "modified base site" EXACT [] is_a: SO:0001236 ! base is_a: SO:0001720 ! epigenetically_modified_region [Term] id: SO:0000306 name: methylated_DNA_base_feature namespace: sequence def: "A nucleotide modified by methylation." [SO:ke] subset: SOFA synonym: "methylated base feature" EXACT [] is_a: SO:0000305 ! modified_DNA_base [Term] id: SO:0000307 name: CpG_island namespace: sequence def: "Regions of a few hundred to a few thousand bases in vertebrate genomes that are relatively GC and CpG rich; they are typically unmethylated and often found near the 5' ends of genes." [SO:rd] subset: SOFA synonym: "CG island" EXACT [] synonym: "CpG island" EXACT [] xref: http://en.wikipedia.org/wiki/CpG_island "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000314 name: direct_repeat namespace: sequence def: "A repeat where the same sequence is repeated in the same direction. Example: GCTGA-----GCTGA." [SO:ke] subset: SOFA synonym: "direct repeat" EXACT [] xref: http://en.wikipedia.org/wiki/Direct_repeat "wiki" is_a: SO:0000657 ! repeat_region [Term] id: SO:0000315 name: TSS namespace: sequence def: "The first base where RNA polymerase begins to synthesize the RNA transcript." [SO:ke] subset: SOFA synonym: "transcription start site" EXACT [] is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000316 name: CDS namespace: sequence def: "A contiguous sequence which begins with, and includes, a start codon and ends with, and includes, a stop codon." [SO:ma] subset: SOFA synonym: "coding sequence" EXACT [] is_a: SO:0000836 ! mRNA_region [Term] id: SO:0000318 name: start_codon namespace: sequence def: "First codon to be translated by a ribosome." [SO:ke] subset: SOFA synonym: "initiation codon" EXACT [] synonym: "start codon" EXACT [] xref: http://en.wikipedia.org/wiki/Start_codon "wiki" is_a: SO:0000360 ! codon [Term] id: SO:0000319 name: stop_codon namespace: sequence def: "In mRNA, a set of three nucleotides that indicates the end of information for protein synthesis." [SO:ke] subset: SOFA synonym: "stop codon" EXACT [] xref: http://en.wikipedia.org/wiki/Stop_codon "wiki" is_a: SO:0000360 ! codon [Term] id: SO:0000324 name: tag namespace: sequence def: "A nucleotide sequence that may be used to identify a larger sequence." [SO:ke] subset: SOFA is_a: SO:0000696 ! oligo [Term] id: SO:0000325 name: rRNA_large_subunit_primary_transcript namespace: sequence def: "A primary transcript encoding a large ribosomal subunit RNA." [SO:ke] subset: SOFA synonym: "35S rRNA primary transcript" EXACT [] synonym: "rRNA large subunit primary transcript" EXACT [] is_a: SO:0000209 ! rRNA_primary_transcript [Term] id: SO:0000326 name: SAGE_tag namespace: sequence def: "A short diagnostic sequence tag, serial analysis of gene expression (SAGE), that allows the quantitative and simultaneous analysis of a large number of transcripts." [http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=7570003&dopt=Abstract] subset: SOFA synonym: "SAGE tag" EXACT [] is_a: SO:0000324 ! tag [Term] id: SO:0000330 name: conserved_region namespace: sequence def: "Region of sequence similarity by descent from a common ancestor." [SO:ke] subset: SOFA synonym: "conserved region" EXACT [] xref: http://en.wikipedia.org/wiki/Conserved_region "wiki" is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000331 name: STS namespace: sequence def: "Short (typically a few hundred base pairs) DNA sequence that has a single occurrence in a genome and whose location and base sequence are known." [http://www.biospace.com] subset: SOFA synonym: "sequence tag site" EXACT [] is_a: SO:0000324 ! tag [Term] id: SO:0000332 name: coding_conserved_region namespace: sequence def: "Coding region of sequence similarity by descent from a common ancestor." [SO:ke] subset: SOFA synonym: "coding conserved region" EXACT [] is_a: SO:0000330 ! conserved_region [Term] id: SO:0000333 name: exon_junction namespace: sequence def: "The boundary between two exons in a processed transcript." [SO:ke] subset: SOFA synonym: "exon junction" EXACT [] is_a: SO:0000699 ! junction relationship: part_of SO:0000233 ! mature_transcript [Term] id: SO:0000334 name: nc_conserved_region namespace: sequence def: "Non-coding region of sequence similarity by descent from a common ancestor." [SO:ke] subset: SOFA synonym: "nc conserved region" EXACT [] synonym: "noncoding conserved region" EXACT [] is_a: SO:0000330 ! conserved_region [Term] id: SO:0000336 name: pseudogene namespace: sequence def: "A sequence that closely resembles a known functional gene, at another locus within a genome, that is non-functional as a consequence of (usually several) mutations that prevent either its transcription or translation (or both). In general, pseudogenes result from either reverse transcription of a transcript of their \"normal\" paralog (SO:0000043) (in which case the pseudogene typically lacks introns and includes a poly(A) tail) or from recombination (SO:0000044) (in which case the pseudogene is typically a tandem duplication of its \"normal\" paralog)." [http://www.ucl.ac.uk/~ucbhjow/b241/glossary.html] subset: SOFA xref: http://en.wikipedia.org/wiki/Pseudogene "wiki" is_a: SO:0001411 ! biological_region relationship: non_functional_homolog_of SO:0000704 ! gene [Term] id: SO:0000337 name: RNAi_reagent namespace: sequence def: "A double stranded RNA duplex, at least 20bp long, used experimentally to inhibit gene function by RNA interference." [SO:rd] subset: SOFA synonym: "RNAi reagent" EXACT [] is_a: SO:0000442 ! ds_oligo [Term] id: SO:0000340 name: chromosome namespace: sequence def: "Structural unit composed of a nucleic acid molecule which controls its own replication through the interaction of specific proteins at one or more origins of replication." [SO:ma] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA xref: http://en.wikipedia.org/wiki/Chromosome "wiki" is_a: SO:0001235 ! replicon [Term] id: SO:0000341 name: chromosome_band namespace: sequence def: "A cytologically distinguishable feature of a chromosome, often made visible by staining, and usually alternating light and dark." [SO:ma] subset: SOFA synonym: "chromosome band" EXACT [] synonym: "cytoband" EXACT [] synonym: "cytological band" EXACT [] xref: http://en.wikipedia.org/wiki/Cytological_band "wiki" is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000343 name: match namespace: sequence def: "A region of sequence, aligned to another sequence with some statistical significance, using an algorithm such as BLAST or SIM4." [SO:ke] subset: SOFA is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000344 name: splice_enhancer namespace: sequence def: "Region of a transcript that regulates splicing." [SO:ke] subset: SOFA synonym: "splice enhancer" EXACT [] is_a: SO:0001056 ! splicing_regulatory_region [Term] id: SO:0000345 name: EST namespace: sequence def: "A tag produced from a single sequencing read from a cDNA clone or PCR product; typically a few hundred base pairs long." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "expressed sequence tag" EXACT [] is_a: SO:0000324 ! tag relationship: derives_from SO:0000234 ! mRNA [Term] id: SO:0000347 name: nucleotide_match namespace: sequence def: "A match against a nucleotide sequence." [SO:ke] subset: SOFA synonym: "nucleotide match" EXACT [] is_a: SO:0000343 ! match [Term] id: SO:0000349 name: protein_match namespace: sequence def: "A match against a protein sequence." [SO:ke] subset: SOFA synonym: "protein match" EXACT [] is_a: SO:0000343 ! match [Term] id: SO:0000353 name: sequence_assembly namespace: sequence def: "A sequence of nucleotides that has been algorithmically derived from an alignment of two or more different sequences." [SO:ma] subset: SOFA synonym: "sequence assembly" EXACT [] xref: http://en.wikipedia.org/wiki/Sequence_assembly "wiki" is_a: SO:0001248 ! assembly [Term] id: SO:0000360 name: codon namespace: sequence def: "A set of (usually) three nucleotide bases in a DNA or RNA sequence, which together code for a unique amino acid or the termination of translation and are contained within the CDS." [http://www.everythingbio.com/glos/definition.php?word=codon, SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Codon "wiki" is_a: SO:0000851 ! CDS_region [Term] id: SO:0000366 name: insertion_site namespace: sequence def: "The junction where an insertion occurred." [SO:ke] subset: SOFA synonym: "insertion site" EXACT [] is_a: SO:0000699 ! junction [Term] id: SO:0000368 name: transposable_element_insertion_site namespace: sequence def: "The junction in a genome where a transposable_element has inserted." [SO:ke] subset: SOFA synonym: "transposable element insertion site" EXACT [] is_a: SO:0000366 ! insertion_site [Term] id: SO:0000370 name: small_regulatory_ncRNA namespace: sequence def: "A non-coding RNA, usually with a specific secondary structure, that acts to regulate gene expression." [SO:ma] subset: SOFA synonym: "small regulatory ncRNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000372 name: enzymatic_RNA namespace: sequence def: "An RNA sequence that has catalytic activity with or without an associated ribonucleoprotein." [RSC:cb] comment: This was moved to be a child of transcript (SO:0000673) because some enzymatic RNA regions are part of primary transcripts and some are part of processed transcripts. subset: SOFA synonym: "enzymatic RNA" EXACT [] is_a: SO:0000673 ! transcript [Term] id: SO:0000374 name: ribozyme namespace: sequence def: "An RNA with catalytic activity." [SO:ma] subset: SOFA xref: http://en.wikipedia.org/wiki/Ribozyme "wiki" is_a: SO:0000372 ! enzymatic_RNA [Term] id: SO:0000375 name: rRNA_5_8S namespace: sequence def: "5_8S ribosomal RNA (5. 8S rRNA) is a component of the large subunit of the eukaryotic ribosome. It is transcribed by RNA polymerase I as part of the 45S precursor that also contains 18S and 28S rRNA. Functionally, it is thought that 5.8S rRNA may be involved in ribosome translocation. It is also known to form covalent linkage to the p53 tumour suppressor protein. 5_8S rRNA is also found in archaea." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00002] subset: SOFA synonym: "5.8S LSU rRNA" EXACT [] synonym: "5.8S ribosomal RNA" EXACT [] synonym: "5.8S rRNA" EXACT [] synonym: "rRNA 5 8S" EXACT [] xref: http://en.wikipedia.org/wiki/5.8S_ribosomal_RNA "wiki" is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0000380 name: hammerhead_ribozyme namespace: sequence def: "A small catalytic RNA motif that catalyzes self-cleavage reaction. Its name comes from its secondary structure which resembles a carpenter's hammer. The hammerhead ribozyme is involved in the replication of some viroid and some satellite RNAs." [PMID:2436805] subset: SOFA synonym: "hammerhead ribozyme" EXACT [] xref: http://en.wikipedia.org/wiki/Hammerhead_ribozyme "wiki" is_a: SO:0000715 ! RNA_motif [Term] id: SO:0000385 name: RNase_MRP_RNA namespace: sequence def: "The RNA molecule essential for the catalytic activity of RNase MRP, an enzymatically active ribonucleoprotein with two distinct roles in eukaryotes. In mitochondria it plays a direct role in the initiation of mitochondrial DNA replication. In the nucleus it is involved in precursor rRNA processing, where it cleaves the internal transcribed spacer 1 between 18S and 5.8S rRNAs." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00030] subset: SOFA synonym: "RNase MRP RNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000386 name: RNase_P_RNA namespace: sequence def: "The RNA component of Ribonuclease P (RNase P), a ubiquitous endoribonuclease, found in archaea, bacteria and eukarya as well as chloroplasts and mitochondria. Its best characterized activity is the generation of mature 5 prime ends of tRNAs by cleaving the 5 prime leader elements of precursor-tRNAs. Cellular RNase Ps are ribonucleoproteins. RNA from bacterial RNase Ps retains its catalytic activity in the absence of the protein subunit, i.e. it is a ribozyme. Isolated eukaryotic and archaeal RNase P RNA has not been shown to retain its catalytic function, but is still essential for the catalytic activity of the holoenzyme. Although the archaeal and eukaryotic holoenzymes have a much greater protein content than the bacterial ones, the RNA cores from all the three lineages are homologous. Helices corresponding to P1, P2, P3, P4, and P10/11 are common to all cellular RNase P RNAs. Yet, there is considerable sequence variation, particularly among the eukaryotic RNAs." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00010] subset: SOFA synonym: "RNase P RNA" EXACT [] is_a: SO:0000655 ! ncRNA [Term] id: SO:0000390 name: telomerase_RNA namespace: sequence def: "The RNA component of telomerase, a reverse transcriptase that synthesizes telomeric DNA." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00025] subset: SOFA synonym: "telomerase RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Telomerase_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000391 name: U1_snRNA namespace: sequence def: "U1 is a small nuclear RNA (snRNA) component of the spliceosome (involved in pre-mRNA splicing). Its 5' end forms complementary base pairs with the 5' splice junction, thus defining the 5' donor site of an intron. There are significant differences in sequence and secondary structure between metazoan and yeast U1 snRNAs, the latter being much longer (568 nucleotides as compared to 164 nucleotides in human). Nevertheless, secondary structure predictions suggest that all U1 snRNAs share a 'common core' consisting of helices I, II, the proximal region of III, and IV." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00003] subset: SOFA synonym: "small nuclear RNA U1" EXACT [RSC:cb] synonym: "snRNA U1" EXACT [RSC:cb] synonym: "U1 small nuclear RNA" EXACT [RSC:cb] synonym: "U1 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U1_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000392 name: U2_snRNA namespace: sequence def: "U2 is a small nuclear RNA (snRNA) component of the spliceosome (involved in pre-mRNA splicing). Complementary binding between U2 snRNA (in an area lying towards the 5' end but 3' to hairpin I) and the branchpoint sequence (BPS) of the intron results in the bulging out of an unpaired adenine, on the BPS, which initiates a nucleophilic attack at the intronic 5' splice site, thus starting the first of two transesterification reactions that mediate splicing." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00004] subset: SOFA synonym: "small nuclear RNA U2" EXACT [RSC:CB] synonym: "snRNA U2" EXACT [RSC:CB] synonym: "U2 small nuclear RNA" EXACT [RSC:CB] synonym: "U2 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U2_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000393 name: U4_snRNA namespace: sequence def: "U4 small nuclear RNA (U4 snRNA) is a component of the major U2-dependent spliceosome. It forms a duplex with U6, and with each splicing round, it is displaced from U6 (and the spliceosome) in an ATP-dependent manner, allowing U6 to refold and create the active site for splicing catalysis. A recycling process involving protein Prp24 re-anneals U4 and U6." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00015] subset: SOFA synonym: "small nuclear RNA U4" EXACT [RSC:cb] synonym: "snRNA U4" EXACT [RSC:cb] synonym: "U4 small nuclear RNA" EXACT [RSC:cb] synonym: "U4 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U4_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000394 name: U4atac_snRNA namespace: sequence def: "An snRNA required for the splicing of the minor U12-dependent class of eukaryotic nuclear introns. It forms a base paired complex with U6atac_snRNA (SO:0000397)." [PMID:=12409455] subset: SOFA synonym: "small nuclear RNA U4atac" EXACT [RSC:cb] synonym: "snRNA U4atac" EXACT [RSC:cb] synonym: "U4atac small nuclear RNA" EXACT [RSC:cb] synonym: "U4atac snRNA" EXACT [] is_a: SO:0000274 ! snRNA [Term] id: SO:0000395 name: U5_snRNA namespace: sequence def: "U5 RNA is a component of both types of known spliceosome. The precise function of this molecule is unknown, though it is known that the 5' loop is required for splice site selection and p220 binding, and that both the 3' stem-loop and the Sm site are important for Sm protein binding and cap methylation." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00020] subset: SOFA synonym: "small nuclear RNA U5" EXACT [RSC:cb] synonym: "snRNA U5" EXACT [RSC:cb] synonym: "U5 small nuclear RNA" EXACT [RSC:cb] synonym: "U5 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U5_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000396 name: U6_snRNA namespace: sequence def: "U6 snRNA is a component of the spliceosome which is involved in splicing pre-mRNA. The putative secondary structure consensus base pairing is confined to a short 5' stem loop, but U6 snRNA is thought to form extensive base-pair interactions with U4 snRNA." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00015] subset: SOFA synonym: "small nuclear RNA U6" EXACT [RSC:cb] synonym: "snRNA U6" EXACT [RSC:cb] synonym: "U6 small nuclear RNA" EXACT [RSC:cb] synonym: "U6 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U6_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000397 name: U6atac_snRNA namespace: sequence def: "U6atac_snRNA is an snRNA required for the splicing of the minor U12-dependent class of eukaryotic nuclear introns. It forms a base paired complex with U4atac_snRNA (SO:0000394)." [http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=retrieve&db=pubmed&list_uids=12409455&dopt=Abstract] subset: SOFA synonym: "snRNA U6atac" EXACT [RSC:cb] synonym: "U6atac small nuclear RNA" EXACT [RSC:cb] synonym: "U6atac snRNA" EXACT [RSC:cb] is_a: SO:0000274 ! snRNA [Term] id: SO:0000398 name: U11_snRNA namespace: sequence def: "U11 snRNA plays a role in splicing of the minor U12-dependent class of eukaryotic nuclear introns, similar to U1 snRNA in the major class spliceosome it base pairs to the conserved 5' splice site sequence." [PMID:9622129] subset: SOFA synonym: "small nuclear RNA U11" EXACT [RSC:cb] synonym: "snRNA U11" EXACT [RSC:cb] synonym: "U11 small nuclear RNA" EXACT [RSC:cb] synonym: "U11 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U11_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000399 name: U12_snRNA namespace: sequence def: "The U12 small nuclear (snRNA), together with U4atac/U6atac, U5, and U11 snRNAs and associated proteins, forms a spliceosome that cleaves a divergent class of low-abundance pre-mRNA introns." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00007] subset: SOFA synonym: "small nuclear RNA U12" EXACT [RSC:cb] synonym: "snRNA U12" EXACT [RSC:cb] synonym: "U12 small nuclear RNA" EXACT [RSC:cb] synonym: "U12 snRNA" EXACT [] xref: http://en.wikipedia.org/wiki/U12_snRNA "wiki" is_a: SO:0000274 ! snRNA [Term] id: SO:0000403 name: U14_snoRNA namespace: sequence alt_id: SO:0005839 def: "U14 small nucleolar RNA (U14 snoRNA) is required for early cleavages of eukaryotic precursor rRNAs. In yeasts, this molecule possess a stem-loop region (known as the Y-domain) which is essential for function. A similar structure, but with a different consensus sequence, is found in plants, but is absent in vertebrates." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00016, PMID:2551119] comment: An evolutionarily conserved eukaryotic low molecular weight RNA capable of intermolecular hybridization with both homologous and heterologous 18S rRNA. subset: SOFA synonym: "small nucleolar RNA U14" EXACT [] synonym: "snoRNA U14" EXACT [] synonym: "U14 small nucleolar RNA" EXACT [] synonym: "U14 snoRNA" EXACT [] is_a: SO:0000593 ! C_D_box_snoRNA [Term] id: SO:0000404 name: vault_RNA namespace: sequence def: "A family of RNAs are found as part of the enigmatic vault ribonucleoprotein complex. The complex consists of a major vault protein (MVP), two minor vault proteins (VPARP and TEP1), and several small untranslated RNA molecules. It has been suggested that the vault complex is involved in drug resistance." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00006] subset: SOFA synonym: "vault RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Vault_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000405 name: Y_RNA namespace: sequence def: "Y RNAs are components of the Ro ribonucleoprotein particle (Ro RNP), in association with Ro60 and La proteins. The Y RNAs and Ro60 and La proteins are well conserved, but the function of the Ro RNP is not known. In humans the RNA component can be one of four small RNAs: hY1, hY3, hY4 and hY5. These small RNAs are predicted to fold into a conserved secondary structure containing three stem structures. The largest of the four, hY1, contains an additional hairpin." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00019] subset: SOFA synonym: "Y RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Y_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000407 name: rRNA_18S namespace: sequence def: "A large polynucleotide in eukaryotes, which functions as the small subunit of the ribosome." [SO:ke] subset: SOFA synonym: "18S ribosomal RNA" EXACT [] synonym: "18S rRNA" EXACT [] synonym: "rRNA 18S" EXACT [] xref: http://en.wikipedia.org/wiki/18S_ribosomal_RNA "wiki" is_a: SO:0000650 ! small_subunit_rRNA [Term] id: SO:0000409 name: binding_site namespace: sequence alt_id: BS:00033 def: "A biological_region of sequence that, in the molecule, interacts selectively and non-covalently with other molecules. A region on the surface of a molecule that may interact with another molecule. When applied to polypeptides: Amino acids involved in binding or interactions. It can also apply to an amino acid bond which is represented by the positions of the two flanking amino acids." [EBIBS:GAR, SO:ke] comment: See GO:0005488 : binding. subset: biosapiens subset: SOFA synonym: "binding_or_interaction_site" EXACT [] synonym: "site" RELATED [] xref: http://en.wikipedia.org/wiki/Binding_site "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000410 name: protein_binding_site namespace: sequence def: "A binding site that, in the molecule, interacts selectively and non-covalently with polypeptide molecules." [SO:ke] comment: See GO:0042277 : peptide binding. subset: SOFA synonym: "protein binding site" EXACT [] is_a: SO:0000409 ! binding_site [Term] id: SO:0000412 name: restriction_fragment namespace: sequence def: "A region of polynucleotide sequence produced by digestion with a restriction endonuclease." [SO:ke] subset: SOFA synonym: "restriction fragment" EXACT [] xref: http://en.wikipedia.org/wiki/Restriction_fragment "wiki" is_a: SO:0000143 ! assembly_component [Term] id: SO:0000413 name: sequence_difference namespace: sequence def: "A region where the sequence differs from that of a specified sequence." [SO:ke] subset: SOFA synonym: "sequence difference" EXACT [] is_a: SO:0000700 ! remark [Term] id: SO:0000418 name: signal_peptide namespace: sequence alt_id: BS:00159 def: "The signal_peptide is a short region of the peptide located at the N-terminus that directs the protein to be secreted or part of membrane components." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: Old def before biosapiens:The sequence for an N-terminal domain of a secreted protein; this domain is involved in attaching nascent polypeptide to the membrane leader sequence. subset: biosapiens subset: SOFA synonym: "signal" RELATED [uniprot:feature_type] synonym: "signal peptide" EXACT [] synonym: "signal peptide coding sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Signal_peptide "wiki" is_a: SO:0001527 ! peptide_localization_signal relationship: part_of SO:0100011 ! cleaved_peptide_region [Term] id: SO:0000419 name: mature_protein_region namespace: sequence alt_id: BS:00149 def: "The polypeptide sequence that remains when the cleaved peptide regions have been cleaved from the immature peptide." [EBIBS:GAR, http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html, SO:cb] comment: This term mature peptide, merged with the biosapiens term mature protein region and took that to be the new name. Old def: The coding sequence for the mature or final peptide or protein product following post-translational modification. subset: biosapiens subset: SOFA synonym: "chain" RELATED [uniprot:feature_type] synonym: "mature peptide" RELATED [] synonym: "mature protein region" EXACT [] is_a: SO:0000839 ! polypeptide_region relationship: part_of SO:0001063 ! immature_peptide_region [Term] id: SO:0000436 name: ARS namespace: sequence def: "A sequence that can autonomously replicate, as a plasmid, when transformed into a bacterial host." [SO:ma] subset: SOFA synonym: "autonomously replicating sequence" EXACT [] is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000441 name: ss_oligo namespace: sequence def: "A single stranded oligonucleotide." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "single strand oligo" EXACT [] synonym: "single strand oligonucleotide" EXACT [] synonym: "single stranded oligonucleotide" EXACT [] synonym: "ss oligo" EXACT [] synonym: "ss oligonucleotide" EXACT [] is_a: SO:0000696 ! oligo [Term] id: SO:0000442 name: ds_oligo namespace: sequence def: "A double stranded oligonucleotide." [SO:ke] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "double stranded oligonucleotide" EXACT [] synonym: "ds oligo" EXACT [] synonym: "ds-oligonucleotide" EXACT [] is_a: SO:0000696 ! oligo [Term] id: SO:0000454 name: rasiRNA namespace: sequence def: "A 17-28-nt, small interfering RNA derived from transcripts of repetitive elements." [http://www.developmentalcell.com/content/article/abstract?uid=PIIS1534580703002284] subset: SOFA synonym: "repeat associated small interfering RNA" EXACT [] xref: http://en.wikipedia.org/wiki/RasiRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000462 name: pseudogenic_region namespace: sequence def: "A non-functional descendent of a functional entity." [SO:cjm] subset: SOFA synonym: "pseudogenic region" EXACT [] is_a: SO:0001411 ! biological_region [Term] id: SO:0000464 name: decayed_exon namespace: sequence def: "A non-functional descendant of an exon." [SO:ke] subset: SOFA synonym: "decayed exon" EXACT [] is_a: SO:0000462 ! pseudogenic_region relationship: non_functional_homolog_of SO:0000147 ! exon [Term] id: SO:0000468 name: golden_path_fragment namespace: sequence def: "One of the pieces of sequence that make up a golden path." [SO:rd] subset: SOFA synonym: "golden path fragment" EXACT [] is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000688 ! golden_path [Term] id: SO:0000472 name: tiling_path namespace: sequence def: "A set of regions which overlap with minimal polymorphism to form a linear sequence." [SO:cjm] subset: SOFA synonym: "tiling path" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0000474 name: tiling_path_fragment namespace: sequence def: "A piece of sequence that makes up a tiling_path (SO:0000472)." [SO:ke] subset: SOFA synonym: "tiling path fragment" EXACT [] is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000472 ! tiling_path [Term] id: SO:0000483 name: nc_primary_transcript namespace: sequence def: "A primary transcript that is never translated into a protein." [SO:ke] subset: SOFA synonym: "nc primary transcript" EXACT [] synonym: "noncoding primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript [Term] id: SO:0000484 name: three_prime_coding_exon_noncoding_region namespace: sequence def: "The sequence of the 3' exon that is not coding." [SO:ke] subset: SOFA synonym: "three prime coding exon noncoding region" EXACT [] synonym: "three_prime_exon_noncoding_region" EXACT [] is_a: SO:0001214 ! noncoding_region_of_exon relationship: part_of SO:0000195 ! coding_exon [Term] id: SO:0000486 name: five_prime_coding_exon_noncoding_region namespace: sequence def: "The sequence of the 5' exon preceding the start codon." [SO:ke] subset: SOFA synonym: "five prime coding exon noncoding region" EXACT [] synonym: "five_prime_exon_noncoding_region" EXACT [] is_a: SO:0001214 ! noncoding_region_of_exon relationship: part_of SO:0000200 ! five_prime_coding_exon [Term] id: SO:0000499 name: virtual_sequence namespace: sequence def: "A continuous piece of sequence similar to the 'virtual contig' concept of the Ensembl database." [SO:ke] subset: SOFA synonym: "virtual sequence" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0000502 name: transcribed_region namespace: sequence def: "A region of sequence that is transcribed. This region may cover the transcript of a gene, it may emcompas the sequence covered by all of the transcripts of a alternately spliced gene, or it may cover the region transcribed by a polycistronic transcript. A gene may have 1 or more transcribed regions and a transcribed_region may belong to one or more genes." [SO:ke] comment: This concept cam about as a direct result of the SO meeting August 2004.nThe exact nature of the relationship between transcribed_region and gene is still up for discussion. We are going with 'associated_with' for the time being. subset: SOFA is_obsolete: true [Term] id: SO:0000551 name: polyA_signal_sequence namespace: sequence def: "The recognition sequence necessary for endonuclease cleavage of an RNA transcript that is followed by polyadenylation; consensus=AATAAA." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "poly(A) signal" EXACT [] synonym: "polyA signal sequence" EXACT [] synonym: "polyadenylation termination signal" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0000553 name: polyA_site namespace: sequence alt_id: SO:0001430 def: "The site on an RNA transcript to which will be added adenine residues by post-transcriptional polyadenylation. The boundary between the UTR and the polyA sequence." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "polyA cleavage site" EXACT [] synonym: "polyA junction" EXACT [] synonym: "polyA site" EXACT [] synonym: "polyA_junction" EXACT [] synonym: "polyadenylation site" RELATED [] is_a: SO:0000699 ! junction relationship: part_of SO:0000205 ! three_prime_UTR relationship: part_of SO:0000233 ! mature_transcript [Term] id: SO:0000577 name: centromere namespace: sequence def: "A region of chromosome where the spindle fibers attach during mitosis and meiosis." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Centromere "wiki" is_a: SO:0000628 ! chromosomal_structural_element [Term] id: SO:0000581 name: cap namespace: sequence def: "A structure consisting of a 7-methylguanosine in 5'-5' triphosphate linkage with the first nucleotide of an mRNA. It is added post-transcriptionally, and is not encoded in the DNA." [http://seqcore.brcf.med.umich.edu/doc/educ/dnapr/mbglossary/mbgloss.html] subset: SOFA xref: http://en.wikipedia.org/wiki/5%27_cap "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000587 name: group_I_intron namespace: sequence def: "Group I catalytic introns are large self-splicing ribozymes. They catalyze their own excision from mRNA, tRNA and rRNA precursors in a wide range of organisms. The core secondary structure consists of 9 paired regions (P1-P9). These fold to essentially two domains, the P4-P6 domain (formed from the stacking of P5, P4, P6 and P6a helices) and the P3-P9 domain (formed from the P8, P3, P7 and P9 helices). Group I catalytic introns often have long ORFs inserted in loop regions." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00028] comment: GO:0000372. subset: SOFA synonym: "group I intron" EXACT [] xref: http://en.wikipedia.org/wiki/Group_I_intron "wiki" is_a: SO:0000588 ! autocatalytically_spliced_intron [Term] id: SO:0000588 name: autocatalytically_spliced_intron namespace: sequence def: "A self spliced intron." [SO:ke] subset: SOFA synonym: "autocatalytically spliced intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000590 name: SRP_RNA namespace: sequence def: "The signal recognition particle (SRP) is a universally conserved ribonucleoprotein. It is involved in the co-translational targeting of proteins to membranes. The eukaryotic SRP consists of a 300-nucleotide 7S RNA and six proteins: SRPs 72, 68, 54, 19, 14, and 9. Archaeal SRP consists of a 7S RNA and homologues of the eukaryotic SRP19 and SRP54 proteins. In most eubacteria, the SRP consists of a 4.5S RNA and the Ffh protein (a homologue of the eukaryotic SRP54 protein). Eukaryotic and archaeal 7S RNAs have very similar secondary structures, with eight helical elements. These fold into the Alu and S domains, separated by a long linker region. Eubacterial SRP is generally a simpler structure, with the M domain of Ffh bound to a region of the 4.5S RNA that corresponds to helix 8 of the eukaryotic and archaeal SRP S domain. Some Gram-positive bacteria (e.g. Bacillus subtilis), however, have a larger SRP RNA that also has an Alu domain. The Alu domain is thought to mediate the peptide chain elongation retardation function of the SRP. The universally conserved helix which interacts with the SRP54/Ffh M domain mediates signal sequence recognition. In eukaryotes and archaea, the SRP19-helix 6 complex is thought to be involved in SRP assembly and stabilizes helix 8 for SRP54 binding." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00017] subset: SOFA synonym: "7S RNA" RELATED [] synonym: "signal recognition particle RNA" RELATED [] synonym: "SRP RNA" EXACT [] is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000483 ! nc_primary_transcript [Term] id: SO:0000593 name: C_D_box_snoRNA namespace: sequence def: "Most box C/D snoRNAs also contain long (>10 nt) sequences complementary to rRNA. Boxes C and D, as well as boxes C' and D', are usually located in close proximity, and form a structure known as the box C/D motif. This motif is important for snoRNA stability, processing, nucleolar targeting and function. A small number of box C/D snoRNAs are involved in rRNA processing; most, however, are known or predicted to serve as guide RNAs in ribose methylation of rRNA. Targeting involves direct base pairing of the snoRNA at the rRNA site to be modified and selection of a rRNA nucleotide a fixed distance from box D or D'." [http://www.bio.umass.edu/biochem/rna-sequence/Yeast_snoRNA_Database/snoRNA_DataBase.html] subset: SOFA synonym: "box C/D snoRNA" EXACT [] synonym: "C D box snoRNA" EXACT [] synonym: "C/D box snoRNA" EXACT [] is_a: SO:0000275 ! snoRNA [Term] id: SO:0000602 name: guide_RNA namespace: sequence def: "A short 3'-uridylated RNA that can form a duplex (except for its post-transcriptionally added oligo_U tail (SO:0000609)) with a stretch of mature edited mRNA." [http://www.rna.ucla.edu/index.html] subset: SOFA synonym: "gRNA" EXACT [] synonym: "guide RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Guide_RNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000603 name: group_II_intron namespace: sequence def: "Group II introns are found in rRNA, tRNA and mRNA of organelles in fungi, plants and protists, and also in mRNA in bacteria. They are large self-splicing ribozymes and have 6 structural domains (usually designated dI to dVI). A subset of group II introns also encode essential splicing proteins in intronic ORFs. The length of these introns can therefore be up to 3kb. Splicing occurs in almost identical fashion to nuclear pre-mRNA splicing with two transesterification steps. The 2' hydroxyl of a bulged adenosine in domain VI attacks the 5' splice site, followed by nucleophilic attack on the 3' splice site by the 3' OH of the upstream exon. Protein machinery is required for splicing in vivo, and long range intron-intron and intron-exon interactions are important for splice site positioning. Group II introns are further sub-classified into groups IIA and IIB which differ in splice site consensus, distance of bulged A from 3' splice site, some tertiary interactions, and intronic ORF phylogeny." [http://www.sanger.ac.uk/Software/Rfam/browse/index.shtml] comment: GO:0000373. subset: SOFA synonym: "group II intron" EXACT [] xref: http://en.wikipedia.org/wiki/Group_II_intron "wiki" is_a: SO:0000588 ! autocatalytically_spliced_intron [Term] id: SO:0000605 name: intergenic_region namespace: sequence def: "A region containing or overlapping no genes that is bounded on either side by a gene, or bounded by a gene and the end of the chromosome." [SO:cjm] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. subset: SOFA synonym: "intergenic region" EXACT [] xref: http://en.wikipedia.org/wiki/Intergenic_region "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0000610 name: polyA_sequence namespace: sequence def: "Sequence of about 100 nucleotides of A added to the 3' end of most eukaryotic mRNAs." [SO:ke] subset: SOFA synonym: "polyA sequence" EXACT [] is_a: SO:0001411 ! biological_region relationship: adjacent_to SO:0000234 ! mRNA [Term] id: SO:0000611 name: branch_site namespace: sequence def: "A pyrimidine rich sequence near the 3' end of an intron to which the 5'end becomes covalently bound during nuclear splicing. The resulting structure resembles a lariat." [SO:ke] subset: SOFA synonym: "branch point" EXACT [] synonym: "branch site" EXACT [] synonym: "branch_point" EXACT [] is_a: SO:0000841 ! spliceosomal_intron_region [Term] id: SO:0000612 name: polypyrimidine_tract namespace: sequence def: "The polypyrimidine tract is one of the cis-acting sequence elements directing intron removal in pre-mRNA splicing." [http://nar.oupjournals.org/cgi/content/full/25/4/888] subset: SOFA synonym: "polypyrimidine tract" EXACT [] xref: http://en.wikipedia.org/wiki/Polypyrimidine_tract "wiki" is_a: SO:0000841 ! spliceosomal_intron_region [Term] id: SO:0000616 name: transcription_end_site namespace: sequence def: "The base where transcription ends." [SO:ke] subset: SOFA synonym: "transcription end site" EXACT [] is_a: SO:0000835 ! primary_transcript_region [Term] id: SO:0000624 name: telomere namespace: sequence def: "A specific structure at the end of a linear chromosome, required for the integrity and maintenance of the end." [SO:ma] subset: SOFA synonym: "telomeric DNA" EXACT [] synonym: "telomeric sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Telomere "wiki" is_a: SO:0000628 ! chromosomal_structural_element [Term] id: SO:0000625 name: silencer namespace: sequence def: "A regulatory region which upon binding of transcription factors, suppress the transcription of the gene or genes they control." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Silencer_(DNA) "wiki" is_a: SO:0000727 ! CRM [Term] id: SO:0000627 name: insulator namespace: sequence def: "A transcriptional cis regulatory region that when located between a CM and a gene's promoter prevents the CRM from modulating that genes expression." [SO:regcreative] subset: SOFA synonym: "insulator element" EXACT [] xref: http://en.wikipedia.org/wiki/Insulator_(genetics) "wiki" is_a: SO:0001055 ! transcriptional_cis_regulatory_region [Term] id: SO:0000628 name: chromosomal_structural_element namespace: sequence subset: SOFA synonym: "chromosomal structural element" EXACT [] is_a: SO:0000830 ! chromosome_part [Term] id: SO:0000643 name: minisatellite namespace: sequence def: "A repeat region containing tandemly repeated sequences having a unit length of 10 to 40 bp." [http://www.informatics.jax.org/silver/glossary.shtml] subset: SOFA xref: http://en.wikipedia.org/wiki/Minisatellite "wiki" is_a: SO:0000005 ! satellite_DNA [Term] id: SO:0000644 name: antisense_RNA namespace: sequence def: "Antisense RNA is RNA that is transcribed from the coding, rather than the template, strand of DNA. It is therefore complementary to mRNA." [SO:ke] subset: SOFA synonym: "antisense RNA" EXACT [] xref: http://en.wikipedia.org/wiki/Antisense_RNA "wiki" is_a: SO:0000655 ! ncRNA relationship: derives_from SO:0000645 ! antisense_primary_transcript [Term] id: SO:0000645 name: antisense_primary_transcript namespace: sequence def: "The reverse complement of the primary transcript." [SO:ke] subset: SOFA synonym: "antisense primary transcript" EXACT [] is_a: SO:0000185 ! primary_transcript [Term] id: SO:0000646 name: siRNA namespace: sequence def: "A small RNA molecule that is the product of a longer exogenous or endogenous dsRNA, which is either a bimolecular duplex or very long hairpin, processed (via the Dicer pathway) such that numerous siRNAs accumulate from both strands of the dsRNA. SRNAs trigger the cleavage of their target molecules." [PMID:12592000] subset: SOFA synonym: "small interfering RNA" EXACT [] xref: http://en.wikipedia.org/wiki/SiRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000649 name: stRNA namespace: sequence def: "Non-coding RNAs of about 21 nucleotides in length that regulate temporal development; first discovered in C. elegans." [PMID:11081512] subset: SOFA synonym: "small temporal RNA" EXACT [] xref: http://en.wikipedia.org/wiki/StRNA "wiki" is_a: SO:0000655 ! ncRNA [Term] id: SO:0000650 name: small_subunit_rRNA namespace: sequence def: "Ribosomal RNA transcript that structures the small subunit of the ribosome." [SO:ke] subset: SOFA synonym: "small subunit rRNA" EXACT [] synonym: "SSU RNA" EXACT [RSC:cb] synonym: "SSU rRNA" EXACT [RSC:cb] is_a: SO:0000252 ! rRNA [Term] id: SO:0000651 name: large_subunit_rRNA namespace: sequence def: "Ribosomal RNA transcript that structures the large subunit of the ribosome." [SO:ke] subset: SOFA synonym: "large subunit rRNA" EXACT [] synonym: "LSU RNA" EXACT [RSC:cb] synonym: "LSU rRNA" EXACT [RSC:cb] is_a: SO:0000252 ! rRNA relationship: derives_from SO:0000325 ! rRNA_large_subunit_primary_transcript [Term] id: SO:0000652 name: rRNA_5S namespace: sequence def: "5S ribosomal RNA (5S rRNA) is a component of the large ribosomal subunit in both prokaryotes and eukaryotes. In eukaryotes, it is synthesised by RNA polymerase III (the other eukaryotic rRNAs are cleaved from a 45S precursor synthesised by RNA polymerase I). In Xenopus oocytes, it has been shown that fingers 4-7 of the nine-zinc finger transcription factor TFIIIA can bind to the central region of 5S RNA. Thus, in addition to positively regulating 5S rRNA transcription, TFIIIA also stabilizes 5S rRNA until it is required for transcription." [http://www.sanger.ac.uk/cgi-bin/Rfam/getacc?RF00001] subset: SOFA synonym: "5S LSU rRNA" EXACT [] synonym: "5S ribosomal RNA" EXACT [] synonym: "5S rRNA" EXACT [] synonym: "rRNA 5S" EXACT [] xref: http://en.wikipedia.org/wiki/5S_ribosomal_RNA "wiki" is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0000653 name: rRNA_28S namespace: sequence def: "A component of the large ribosomal subunit." [SO:ke] subset: SOFA synonym: "28S LSU rRNA" EXACT [] synonym: "28S ribosomal RNA" EXACT [] synonym: "28S rRNA" EXACT [] synonym: "rRNA 28S" EXACT [] xref: http://en.wikipedia.org/wiki/28S_ribosomal_RNA "wiki" is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0000655 name: ncRNA namespace: sequence def: "An RNA transcript that does not encode for a protein rather the RNA molecule is the gene product." [SO:ke] comment: A ncRNA is a processed_transcript, so it may not contain parts such as transcribed_spacer_regions that are removed in the act of processing. For the corresponding primary_transcripts, please see term SO:0000483 nc_primary_transcript. subset: SOFA synonym: "noncoding RNA" EXACT [] xref: http://en.wikipedia.org/wiki/NcRNA "wiki" is_a: SO:0000233 ! mature_transcript [Term] id: SO:0000657 name: repeat_region namespace: sequence def: "A region of sequence containing one or more repeat units." [SO:ke] subset: SOFA synonym: "repeat region" EXACT [] is_a: SO:0001411 ! biological_region relationship: has_part SO:0001411 ! biological_region [Term] id: SO:0000658 name: dispersed_repeat namespace: sequence def: "A repeat that is located at dispersed sites in the genome." [SO:ke] subset: SOFA synonym: "dispersed repeat" EXACT [] synonym: "interspersed repeat" EXACT [] xref: http://en.wikipedia.org/wiki/Interspersed_repeat "wiki" is_a: SO:0000657 ! repeat_region [Term] id: SO:0000662 name: spliceosomal_intron namespace: sequence def: "An intron which is spliced by the spliceosome." [SO:ke] comment: GO:0000398. subset: SOFA synonym: "spliceosomal intron" EXACT [] is_a: SO:0000188 ! intron [Term] id: SO:0000667 name: insertion namespace: sequence alt_id: SO:1000034 def: "The sequence of one or more nucleotides added between two adjacent nucleotides in the sequence." [SO:ke] subset: DBVAR subset: SOFA synonym: "insertion" EXACT dbvar [http://www.ncbi.nlm.nih.gov/dbvar/] synonym: "nucleotide insertion" EXACT [] synonym: "nucleotide_insertion" EXACT [] xref: loinc:LA6687-3 "Insertion" is_a: SO:0001059 ! sequence_alteration is_a: SO:0001411 ! biological_region [Term] id: SO:0000668 name: EST_match namespace: sequence def: "A match against an EST sequence." [SO:ke] subset: SOFA synonym: "EST match" EXACT [] is_a: SO:0000102 ! expressed_sequence_match [Term] id: SO:0000673 name: transcript namespace: sequence def: "An RNA synthesized on a DNA or RNA template by an RNA polymerase." [SO:ma] subset: SOFA xref: http://en.wikipedia.org/wiki/RNA "wiki" is_a: SO:0000831 ! gene_member_region [Term] id: SO:0000684 name: nuclease_sensitive_site namespace: sequence def: "A region of nucleotide sequence targeted by a nuclease enzyme." [SO:ma] subset: SOFA synonym: "nuclease sensitive site" EXACT [] is_a: SO:0000059 ! nuclease_binding_site [Term] id: SO:0000687 name: deletion_junction namespace: sequence def: "The space between two bases in a sequence which marks the position where a deletion has occurred." [SO:ke] subset: SOFA synonym: "deletion junction" EXACT [] is_a: SO:0000699 ! junction [Term] id: SO:0000688 name: golden_path namespace: sequence def: "A set of subregions selected from sequence contigs which when concatenated form a nonredundant linear sequence." [SO:ls] subset: SOFA synonym: "golden path" EXACT [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0000689 name: cDNA_match namespace: sequence def: "A match against cDNA sequence." [SO:ke] subset: SOFA synonym: "cDNA match" EXACT [] is_a: SO:0000102 ! expressed_sequence_match [Term] id: SO:0000694 name: SNP namespace: sequence def: "SNPs are single base pair positions in genomic DNA at which different sequence alternatives exist in normal individuals in some population(s), wherein the least frequent variant has an abundance of 1% or greater." [SO:cb] subset: SOFA synonym: "single nucleotide polymorphism" EXACT [] is_a: SO:0001483 ! SNV [Term] id: SO:0000695 name: reagent namespace: sequence def: "A sequence used in experiment." [SO:ke] comment: Requested by Lynn Crosby, jan 2006. subset: SOFA is_a: SO:0001409 ! biomaterial_region [Term] id: SO:0000696 name: oligo namespace: sequence def: "A short oligonucleotide sequence, of length on the order of 10's of bases; either single or double stranded." [SO:ma] subset: SOFA synonym: "oligonucleotide" EXACT [] xref: http://en.wikipedia.org/wiki/Oligonucleotide "wiki" is_a: SO:0000695 ! reagent [Term] id: SO:0000699 name: junction namespace: sequence def: "A sequence_feature with an extent of zero." [SO:ke] comment: A junction is a boundary between regions. A boundary has an extent of zero. subset: SOFA synonym: "boundary" EXACT [] synonym: "breakpoint" EXACT [] is_a: SO:0000110 ! sequence_feature [Term] id: SO:0000700 name: remark namespace: sequence def: "A comment about the sequence." [SO:ke] subset: SOFA is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000701 name: possible_base_call_error namespace: sequence def: "A region of sequence where the validity of the base calling is questionable." [SO:ke] subset: SOFA synonym: "possible base call error" EXACT [] is_a: SO:0000413 ! sequence_difference [Term] id: SO:0000702 name: possible_assembly_error namespace: sequence def: "A region of sequence where there may have been an error in the assembly." [SO:ke] subset: SOFA synonym: "possible assembly error" EXACT [] is_a: SO:0000413 ! sequence_difference [Term] id: SO:0000703 name: experimental_result_region namespace: sequence def: "A region of sequence implicated in an experimental result." [SO:ke] subset: SOFA synonym: "experimental result region" EXACT [] is_a: SO:0000700 ! remark [Term] id: SO:0000704 name: gene namespace: sequence def: "A region (or regions) that includes all of the sequence elements necessary to encode a functional transcript. A gene may include regulatory regions, transcribed regions and/or other functional sequence regions." [SO:immuno_workshop] comment: This term is mapped to MGED. Do not obsolete without consulting MGED ontology. A gene may be considered as a unit of inheritance. subset: SOFA xref: http://en.wikipedia.org/wiki/Gene "wiki" is_a: SO:0001411 ! biological_region relationship: member_of SO:0005855 ! gene_group [Term] id: SO:0000705 name: tandem_repeat namespace: sequence def: "Two or more adjcent copies of a region (of length greater than 1)." [SO:ke] subset: SOFA synonym: "tandem repeat" EXACT [] xref: http://en.wikipedia.org/wiki/Tandem_repeat "wiki" xref: http://www.sci.sdsu.edu/~smaloy/Glossary/T.html is_a: SO:0000657 ! repeat_region [Term] id: SO:0000706 name: trans_splice_acceptor_site namespace: sequence def: "The 3' splice site of the acceptor primary transcript." [SO:ke] comment: This region contains a polypyridine tract and AG dinucleotide in some organisms and is UUUCAG in C. elegans. subset: SOFA synonym: "3' trans splice site" RELATED [] synonym: "trans splice acceptor site" EXACT [] is_a: SO:0001420 ! trans_splice_site [Term] id: SO:0000714 name: nucleotide_motif namespace: sequence def: "A region of nucleotide sequence corresponding to a known motif." [SO:ke] subset: SOFA synonym: "nucleotide motif" EXACT [] is_a: SO:0001683 ! sequence_motif [Term] id: SO:0000715 name: RNA_motif namespace: sequence def: "A motif that is active in RNA sequence." [SO:ke] subset: SOFA synonym: "RNA motif" EXACT [] is_a: SO:0000714 ! nucleotide_motif [Term] id: SO:0000717 name: reading_frame namespace: sequence def: "A nucleic acid sequence that when read as sequential triplets, has the potential of encoding a sequential string of amino acids. It need not contain the start or stop codon." [SGD:rb] comment: This term was added after a request by SGD. August 2004. Modified after SO meeting in Cambridge to not include start or stop. subset: SOFA synonym: "reading frame" EXACT [] xref: http://en.wikipedia.org/wiki/Reading_frame "wiki" is_a: SO:0001410 ! experimental_feature [Term] id: SO:0000719 name: ultracontig namespace: sequence def: "An ordered and oriented set of scaffolds based on somewhat weaker sets of inferential evidence such as one set of mate pair reads together with supporting evidence from ESTs or location of markers from SNP or microsatellite maps, or cytogenetic localization of contained markers." [FB:WG] subset: SOFA synonym: "superscaffold" RELATED [] is_a: SO:0000353 ! sequence_assembly [Term] id: SO:0000724 name: oriT namespace: sequence def: "A region of a DNA molecule where transfer is initiated during the process of conjugation or mobilization." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] subset: SOFA synonym: "origin of transfer" EXACT [] xref: http://en.wikipedia.org/wiki/Origin_of_transfer "wiki" is_a: SO:0000296 ! origin_of_replication [Term] id: SO:0000725 name: transit_peptide namespace: sequence alt_id: BS:00055 def: "The transit_peptide is a short region at the N-terminus of the peptide that directs the protein to an organelle (chloroplast, mitochondrion, microbody or cyanelle)." [http://www.ebi.ac.uk/embl/Documentation/FT_definitions/feature_table.html] comment: Added to bring SO inline with the embl ddbj genbank feature table. Old definition before biosapiens: The coding sequence for an N-terminal domain of a nuclear-encoded organellar protein. This domain is involved in post translational import of the protein into the organelle. subset: biosapiens subset: SOFA synonym: "signal" RELATED [] synonym: "transit" RELATED [uniprot:feature_type] synonym: "transit peptide" EXACT [] is_a: SO:0001527 ! peptide_localization_signal [Term] id: SO:0000727 name: CRM namespace: sequence def: "A regulatory_region where more than 1 TF_binding_site together are regulatorily active." [SO:SG] comment: Requested by Stepen Grossmann Dec 2004. subset: SOFA synonym: "cis regulatory module" EXACT [] synonym: "TF module" EXACT [] is_a: SO:0001055 ! transcriptional_cis_regulatory_region intersection_of: SO:0001055 ! transcriptional_cis_regulatory_region intersection_of: has_part SO:0000235 ! TF_binding_site relationship: has_part SO:0000235 ! TF_binding_site [Term] id: SO:0000730 name: gap namespace: sequence def: "A gap in the sequence of known length. The unknown bases are filled in with N's." [SO:ke] subset: SOFA is_a: SO:0000143 ! assembly_component relationship: part_of SO:0000353 ! sequence_assembly [Term] id: SO:0000752 name: gene_group_regulatory_region namespace: sequence subset: SOFA synonym: "gene group regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region relationship: member_of SO:0005855 ! gene_group [Term] id: SO:0000753 name: clone_insert namespace: sequence def: "The region of sequence that has been inserted and is being propagated by the clone." [SO:ke] subset: SOFA synonym: "clone insert" EXACT [] is_a: SO:0000695 ! reagent relationship: part_of SO:0000151 ! clone [Term] id: SO:0000777 name: pseudogenic_rRNA namespace: sequence def: "A non functional descendent of an rRNA." [SO:ke] comment: Added Jan 2006 to allow the annotation of the pseudogenic rRNA by flybase. Non-functional is defined as its transcription is prevented due to one or more mutatations. subset: SOFA synonym: "pseudogenic rRNA" EXACT [] is_a: SO:0000462 ! pseudogenic_region [Term] id: SO:0000778 name: pseudogenic_tRNA namespace: sequence def: "A non functional descendent of a tRNA." [SO:ke] comment: Added Jan 2006 to allow the annotation of the pseudogenic tRNA by flybase. Non-functional is defined as its transcription is prevented due to one or more mutatations. subset: SOFA synonym: "pseudogenic tRNA" EXACT [] is_a: SO:0000462 ! pseudogenic_region [Term] id: SO:0000830 name: chromosome_part namespace: sequence def: "A region of a chromosome." [SO:ke] comment: This is a manufactured term, that serves the purpose of allow the parts of a chromosome to have an is_a path to the root. subset: SOFA synonym: "chromosome part" EXACT [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000340 ! chromosome [Term] id: SO:0000831 name: gene_member_region namespace: sequence def: "A region of a gene." [SO:ke] comment: A manufactured term used to allow the parts of a gene to have an is_a path to the root. subset: SOFA synonym: "gene member region" EXACT [] is_a: SO:0001411 ! biological_region relationship: member_of SO:0000704 ! gene [Term] id: SO:0000833 name: transcript_region namespace: sequence def: "A region of a transcript." [SO:ke] comment: This term was added to provide a grouping term for the region parts of transcript, thus giving them an is_a path back to the root. subset: SOFA synonym: "transcript region" EXACT [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000673 ! transcript [Term] id: SO:0000834 name: mature_transcript_region namespace: sequence def: "A region of a mature transcript." [SO:ke] comment: A manufactured term to collect together the parts of a mature transcript and give them an is_a path to the root. subset: SOFA synonym: "mature transcript region" EXACT [] is_a: SO:0000833 ! transcript_region [Term] id: SO:0000835 name: primary_transcript_region namespace: sequence def: "A part of a primary transcript." [SO:ke] comment: This term was added to provide a grouping term for the region parts of primary_transcript, thus giving them an is_a path back to the root. subset: SOFA synonym: "primary transcript region" EXACT [] is_a: SO:0000833 ! transcript_region relationship: part_of SO:0000185 ! primary_transcript [Term] id: SO:0000836 name: mRNA_region namespace: sequence def: "A region of an mRNA." [SO:cb] comment: This term was added to provide a grouping term for the region parts of mRNA, thus giving them an is_a path back to the root. subset: SOFA synonym: "mRNA region" EXACT [] is_a: SO:0000834 ! mature_transcript_region relationship: part_of SO:0000234 ! mRNA [Term] id: SO:0000837 name: UTR_region namespace: sequence def: "A region of UTR." [SO:ke] comment: A region of UTR. This term is a grouping term to allow the parts of UTR to have an is_a path to the root. subset: SOFA synonym: "UTR region" EXACT [] is_a: SO:0000836 ! mRNA_region [Term] id: SO:0000839 name: polypeptide_region namespace: sequence alt_id: BS:00124 alt_id: BS:00331 def: "Biological sequence region that can be assigned to a specific subsequence of a polypeptide." [SO:GAR, SO:ke] comment: Added to allow the polypeptide regions to have is_a paths back to the root. subset: biosapiens subset: SOFA synonym: "positional" RELATED [] synonym: "positional polypeptide feature" RELATED [] synonym: "region" NARROW [uniprot:feature_type] synonym: "region or site annotation" RELATED [] synonym: "site" NARROW [uniprot:feature_type] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000104 ! polypeptide [Term] id: SO:0000841 name: spliceosomal_intron_region namespace: sequence def: "A region within an intron." [SO:ke] comment: A terms added to allow the parts of introns to have is_a paths to the root. subset: SOFA synonym: "spliceosomal intron region" EXACT [] is_a: SO:0000835 ! primary_transcript_region relationship: part_of SO:0000662 ! spliceosomal_intron [Term] id: SO:0000842 name: gene_component_region namespace: sequence subset: SOFA synonym: "gene component region" EXACT [] is_a: SO:0001411 ! biological_region relationship: part_of SO:0000704 ! gene [Term] id: SO:0000851 name: CDS_region namespace: sequence def: "A region of a CDS." [SO:cb] subset: SOFA synonym: "CDS region" EXACT [] is_a: SO:0000836 ! mRNA_region relationship: part_of SO:0000316 ! CDS [Term] id: SO:0000852 name: exon_region namespace: sequence def: "A region of an exon." [RSC:cb] subset: SOFA synonym: "exon region" EXACT [] is_a: SO:0000833 ! transcript_region relationship: part_of SO:0000147 ! exon [Term] id: SO:0001000 name: rRNA_16S namespace: sequence def: "A large polynucleotide in Bacteria and Archaea, which functions as the small subunit of the ribosome." [SO:ke] subset: SOFA synonym: "16S ribosomal RNA" EXACT [] synonym: "16S rRNA" RELATED [] synonym: "16S SSU RNA" EXACT [] synonym: "rRNA 16S" EXACT [] xref: http://en.wikipedia.org/wiki/16S_ribosomal_RNA "wiki" is_a: SO:0000650 ! small_subunit_rRNA [Term] id: SO:0001001 name: rRNA_23S namespace: sequence def: "A large polynucleotide in Bacteria and Archaea, which functions as the large subunit of the ribosome." [SO:ke] subset: SOFA synonym: "23S LSU rRNA" EXACT [] synonym: "23S ribosomal RNA" RELATED [] synonym: "23S rRNA" EXACT [] synonym: "rRNA 23S" EXACT [] is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0001002 name: rRNA_25S namespace: sequence def: "A large polynucleotide which functions as part of the large subunit of the ribosome in some eukaryotes." [RSC:cb] subset: SOFA synonym: "25S LSU rRNA" EXACT [] synonym: "25S ribosomal RNA" EXACT [] synonym: "25S rRNA" EXACT [] synonym: "rRNA 25S" EXACT [] is_a: SO:0000651 ! large_subunit_rRNA [Term] id: SO:0001019 name: copy_number_variation namespace: sequence def: "A variation that increases or decreases the copy number of a given region." [SO:ke] subset: SOFA synonym: "CNP" EXACT [] synonym: "CNV" EXACT [] synonym: "copy number polymorphism" EXACT [] synonym: "copy number variation" EXACT [] xref: http://en.wikipedia.org/wiki/Copy_number_variation "wiki" is_a: SO:0001059 ! sequence_alteration [Term] id: SO:0001037 name: mobile_genetic_element namespace: sequence def: "A nucleotide region with either intra-genome or intracellular moblity, of varying length, which often carry the information necessary for transfer and recombination with the host genome." [PMID:14681355] subset: SOFA synonym: "MGE" EXACT [] synonym: "mobile genetic element" EXACT [] xref: http://en.wikipedia.org/wiki/Mobile_genetic_element "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0001039 name: integrated_mobile_genetic_element namespace: sequence def: "An MGE that is integrated into the host chromosome." [SO:ke] subset: SOFA synonym: "integrated mobile genetic element" EXACT [] is_a: SO:0001037 ! mobile_genetic_element [Term] id: SO:0001055 name: transcriptional_cis_regulatory_region namespace: sequence def: "A regulatory_region that modulates the transcription of a gene or genes." [SO:regcreative] subset: SOFA synonym: "transcriptional cis regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0001056 name: splicing_regulatory_region namespace: sequence def: "A regulatory_region that modulates splicing." [SO:ke] subset: SOFA synonym: "splicing regulatory region" EXACT [] is_a: SO:0001679 ! transcription_regulatory_region [Term] id: SO:0001059 name: sequence_alteration namespace: sequence alt_id: SO:1000004 alt_id: SO:1000007 def: "A sequence_alteration is a sequence_feature whose extent is the deviation from another sequence." [SO:ke] comment: Merged with partially characterized change in nucleotide sequence. subset: SOFA synonym: "partially characterised change in DNA sequence" NARROW [] synonym: "partially_characterised_change_in_DNA_sequence" NARROW [] synonym: "sequence alteration" EXACT [] synonym: "uncharacterised_change_in_nucleotide_sequence" NARROW [] is_a: SO:0000110 ! sequence_feature [Term] id: SO:0001063 name: immature_peptide_region namespace: sequence alt_id: BS:00129 def: "An immature_peptide_region is the extent of the peptide after it has been translated and before any processing occurs." [EBIBS:GAR] comment: Range. subset: biosapiens subset: SOFA synonym: "immature peptide region" EXACT [] is_a: SO:0000839 ! polypeptide_region [Term] id: SO:0001214 name: noncoding_region_of_exon namespace: sequence def: "The maximal intersection of exon and UTR." [SO:ke] comment: An exon either containing but not starting with a start codon or containing but not ending with a stop codon will be partially coding and partially non coding. subset: SOFA synonym: "noncoding region of exon" EXACT [] is_a: SO:0000852 ! exon_region [Term] id: SO:0001215 name: coding_region_of_exon namespace: sequence def: "The region of an exon that encodes for protein sequence." [SO:ke] comment: An exon containing either a start or stop codon will be partially coding and partially non coding. subset: SOFA synonym: "coding region of exon" EXACT [] is_a: SO:0000852 ! exon_region [Term] id: SO:0001235 name: replicon namespace: sequence def: "A region containing at least one unique origin of replication and a unique termination site." [ISBN:0716719207] subset: SOFA xref: http://en.wikipedia.org/wiki/Replicon_(genetics) "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0001236 name: base namespace: sequence def: "A base is a sequence feature that corresponds to a single unit of a nucleotide polymer." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Nucleobase "wiki" is_a: SO:0001411 ! biological_region [Term] id: SO:0001248 name: assembly namespace: sequence def: "A region of the genome of known length that is composed by ordering and aligning two or more different regions." [SO:ke] subset: SOFA xref: http://en.wikipedia.org/wiki/Genome_assembly#Genome_assembly "wiki" is_a: SO:0001410 ! experimental_feature [Term] id: SO:0001409 name: biomaterial_region namespace: sequence def: "A region which is intended for use in an experiment." [SO:cb] subset: SOFA synonym: "biomaterial region" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001410 name: experimental_feature namespace: sequence def: "A region which is the result of some arbitrary experimental procedure. The procedure may be carried out with biological material or inside a computer." [SO:cb] subset: SOFA synonym: "analysis feature" RELATED [] synonym: "experimental output artefact" EXACT [] synonym: "experimental_output_artefact" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001411 name: biological_region namespace: sequence def: "A region defined by its disposition to be involved in a biological process." [SO:cb] subset: SOFA synonym: "biological region" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001412 name: topologically_defined_region namespace: sequence def: "A region that is defined according to its relations with other regions within the same sequence." [SO:cb] subset: SOFA synonym: "topologically defined region" EXACT [] is_a: SO:0000001 ! region [Term] id: SO:0001419 name: cis_splice_site namespace: sequence def: "Intronic 2 bp region bordering exon. A splice_site that adjacent_to exon and overlaps intron." [SO:cjm, SO:ke] subset: SOFA synonym: "cis splice site" EXACT [] is_a: SO:0000162 ! splice_site [Term] id: SO:0001420 name: trans_splice_site namespace: sequence def: "Primary transcript region bordering trans-splice junction." [SO:ke] subset: SOFA synonym: "trans splice site" EXACT [] is_a: SO:0000162 ! splice_site [Term] id: SO:0001483 name: SNV namespace: sequence def: "SNVs are single nucleotide positions in genomic DNA at which different sequence alternatives exist." [SO:bm] subset: SOFA synonym: "single nucleotide variant" EXACT [] is_a: SO:1000002 ! substitution created_by: kareneilbeck creation_date: 2009-10-08T11:37:49Z [Term] id: SO:0001527 name: peptide_localization_signal namespace: sequence def: "A region of peptide sequence used to target the polypeptide molecule to a specific organelle." [SO:ke] subset: SOFA synonym: "localization signal" RELATED [] synonym: "peptide localization signal" EXACT [] is_a: SO:0000839 ! polypeptide_region created_by: kareneilbeck creation_date: 2010-03-11T02:15:05Z [Term] id: SO:0001647 name: kozak_sequence namespace: sequence def: "A kind of ribosome entry site, specific to Eukaryotic organisms that overlaps part of both 5' UTR and CDS sequence." [SO:ke] subset: SOFA synonym: "kozak consensus" EXACT [] synonym: "kozak consensus sequence" EXACT [] synonym: "kozak sequence" EXACT [] xref: http://en.wikipedia.org/wiki/Kozak_consensus_sequence "wikipedia" is_a: SO:0000139 ! ribosome_entry_site created_by: kareneilbeck creation_date: 2010-06-07T03:12:20Z [Term] id: SO:0001654 name: nucleotide_to_protein_binding_site namespace: sequence def: "A binding site that, in the nucleotide molecule, interacts selectively and non-covalently with polypeptide residues." [SO:ke] subset: SOFA synonym: "nucleotide to protein binding site" RELATED [] is_a: SO:0000410 ! protein_binding_site created_by: kareneilbeck creation_date: 2010-08-03T12:26:05Z [Term] id: SO:0001679 name: transcription_regulatory_region namespace: sequence def: "A regulatory region that is involved in the control of the process of transcription." [SO:ke] subset: SOFA synonym: "transcription regulatory region" EXACT [] is_a: SO:0005836 ! regulatory_region created_by: kareneilbeck creation_date: 2010-10-12T03:49:35Z [Term] id: SO:0001683 name: sequence_motif namespace: sequence def: "A sequence motif is a nucleotide or amino-acid sequence pattern that may have biological significance." [http://en.wikipedia.org/wiki/Sequence_motif] subset: SOFA synonym: "sequence motif" RELATED [] xref: http://en.wikipedia.org/wiki/Sequence_motif "wikipedia" is_a: SO:0001411 ! biological_region created_by: kareneilbeck creation_date: 2010-10-14T04:13:22Z [Term] id: SO:0001720 name: epigenetically_modified_region namespace: sequence def: "A biological region implicated in inherited changes caused by mechanisms other than changes in the underlying DNA sequence." [http://en.wikipedia.org/wiki/Epigenetics, SO:ke] subset: SOFA synonym: "epigenetically modified region" RELATED [] is_a: SO:0001411 ! biological_region created_by: kareneilbeck creation_date: 2010-03-27T12:02:29Z [Term] id: SO:0001790 name: paired_end_fragment namespace: sequence def: "An assembly region that has been sequenced from both ends resulting in a read_pair (mate_pair)." [SO:ke] subset: SOFA synonym: "paired end fragment" EXACT [] is_a: SO:0000143 ! assembly_component created_by: kareneilbeck creation_date: 2011-04-14T01:48:20Z [Term] id: SO:0005836 name: regulatory_region namespace: sequence def: "A region of sequence that is involved in the control of a biological process." [SO:ke] subset: SOFA synonym: "regulatory region" EXACT [] xref: http://en.wikipedia.org/wiki/Regulatory_region "wiki" is_a: SO:0000831 ! gene_member_region [Term] id: SO:0005855 name: gene_group namespace: sequence def: "A collection of related genes." [SO:ma] subset: SOFA synonym: "gene group" EXACT [] is_a: SO:0001411 ! biological_region [Term] id: SO:0100011 name: cleaved_peptide_region namespace: sequence def: "The cleaved_peptide_regon is the a region of peptide sequence that is cleaved during maturation." [EBIBS:GAR] comment: Range. subset: biosapiens subset: SOFA synonym: "cleaved peptide region" EXACT [] is_a: SO:0000839 ! polypeptide_region relationship: part_of SO:0001063 ! immature_peptide_region [Term] id: SO:1000002 name: substitution namespace: sequence def: "A sequence alteration where the length of the change in the variant is the same as that of the reference." [SO:ke] subset: SOFA xref: loinc:LA6690-7 "Substitution" is_a: SO:0001059 ! sequence_alteration is_a: SO:0001411 ! biological_region [Term] id: SO:1000005 name: complex_substitution namespace: sequence def: "When no simple or well defined DNA mutation event describes the observed DNA change, the keyword \"complex\" should be used. Usually there are multiple equally plausible explanations for the change." [EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html] subset: SOFA synonym: "complex substitution" EXACT [] is_a: SO:1000002 ! substitution [Term] id: SO:1000008 name: point_mutation namespace: sequence def: "A single nucleotide change which has occurred at the same position of a corresponding nucleotide in a reference sequence." [SO:immuno_workshop] subset: SOFA synonym: "point mutation" EXACT [] xref: http://en.wikipedia.org/wiki/Point_mutation "wiki" is_a: SO:0001483 ! SNV [Term] id: SO:1000036 name: inversion namespace: sequence def: "A continuous nucleotide sequence is inverted in the same position." [EBI:www.ebi.ac.uk/mutations/recommendations/mutevent.html] subset: DBVAR subset: SOFA synonym: "inversion" EXACT dbvar [http://www.ncbi.nlm.nih.gov/dbvar/] xref: loinc:LA6689-9 "Inversion" is_a: SO:0001059 ! sequence_alteration is_a: SO:0001411 ! biological_region [Term] id: SO:1001284 name: regulon namespace: sequence def: "A group of genes, whether linked as a cluster or not, that respond to a common regulatory signal." [ISBN:0198506732] subset: SOFA xref: http://en.wikipedia.org/wiki/Regulon "wiki" is_a: SO:0005855 ! gene_group [Term] id: SO:2000061 name: databank_entry namespace: sequence def: "The sequence referred to by an entry in a databank such as Genbank or SwissProt." [SO:ke] subset: SOFA synonym: "accession" RELATED [] synonym: "databank entry" EXACT [] is_a: SO:0000695 ! reagent [Typedef] id: adjacent_to name: adjacent_to namespace: sequence def: "A geometric operator, specified in Egenhofer 1989. Two features meet if they share a junction on the sequence. X adjacent_to Y iff X and Y share a boundary but do not overlap." [PMID:20226267, SO:ke] subset: SOFA [Typedef] id: associated_with name: associated_with namespace: sequence comment: This relationship is vague and up for discussion. [Typedef] id: complete_evidence_for_feature name: complete_evidence_for_feature namespace: sequence def: "B is complete_evidence_for_feature A if the extent (5' and 3' boundaries) and internal boundaries of B fully support the extent and internal boundaries of A." [SO:ke] comment: If A is a feature with multiple regions such as a multi exon transcript, the supporting EST evidence is complete if each of the regions is supported by an equivalent region in B. Also there must be no extra regions in B that are not represented in A. This relationship was requested by jeltje on the SO term tracker. The thread for the discussion is available can be accessed via tracker ID:1917222. is_transitive: true is_a: evidence_for_feature ! evidence_for_feature [Typedef] id: connects_on name: connects_on namespace: sequence def: "X connects_on Y, Z, R iff whenever Z is on a R, X is adjacent to a Y and adjacent to a Z." [PMID:20226267] comment: Example: A splice_junction connects_on exon, exon, mature_transcript. created_by: kareneilbeck creation_date: 2010-10-14T01:38:51Z [Typedef] id: contained_by name: contained_by namespace: sequence def: "X contained_by Y iff X starts after start of Y and X ends before end of Y." [PMID:20226267] comment: The inverse is contains. Example: intein contained_by immature_peptide_region. is_transitive: true created_by: kareneilbeck creation_date: 2010-10-14T01:26:16Z [Typedef] id: contains name: contains namespace: sequence def: "The inverse of contained_by." [PMID:20226267] comment: Example: pre_miRNA contains miRNA_loop. is_transitive: true created_by: kareneilbeck creation_date: 2010-10-14T01:32:15Z [Typedef] id: derives_from name: derives_from namespace: sequence subset: SOFA is_transitive: true [Typedef] id: disconnected_from name: disconnected_from namespace: sequence def: "X is disconnected_from Y iff it is not the case that X overlaps Y." [PMID:20226267] created_by: kareneilbeck creation_date: 2010-10-14T01:42:10Z [Typedef] id: edited_from name: edited_from namespace: sequence created_by: kareneilbeck creation_date: 2009-08-19T02:19:45Z [Typedef] id: edited_to name: edited_to namespace: sequence created_by: kareneilbeck creation_date: 2009-08-19T02:19:11Z [Typedef] id: evidence_for_feature name: evidence_for_feature namespace: sequence def: "B is evidence_for_feature A, if an instance of B supports the existence of A." [SO:ke] comment: This relationship was requested by nlw on the SO term tracker. The thread for the discussion is available can be accessed via tracker ID:1917222. is_transitive: true [Typedef] id: exemplar_of name: exemplar_of namespace: sequence def: "X is exemplar of Y if X is the best evidence for Y." [SO:ke] comment: Tracker id: 2594157. [Typedef] id: finished_by name: finished_by namespace: sequence def: "Xy is finished_by Y if Y part of X, and X and Y share a 3' boundary." [PMID:20226267] comment: Example CDS finished_by stop_codon. created_by: kareneilbeck creation_date: 2010-10-14T01:45:45Z [Typedef] id: finishes name: finishes namespace: sequence def: "X finishes Y if X is part_of Y and X and Y share a 3' or C terminal boundary." [PMID:20226267] comment: Example: stop_codon finishes CDS. created_by: kareneilbeck creation_date: 2010-10-14T02:17:53Z [Typedef] id: gained name: gained namespace: sequence def: "X gained Y if X is a variant_of X' and Y part of X but not X'." [SO:ke] comment: A relation with which to annotate the changes in a variant sequence with respect to a reference.\nFor example a variant transcript may gain a stop codon not present in the reference sequence. created_by: kareneilbeck creation_date: 2011-06-28T12:51:10Z [Typedef] id: genome_of name: genome_of namespace: sequence [Typedef] id: guided_by name: guided_by namespace: sequence created_by: kareneilbeck creation_date: 2009-08-19T02:27:04Z [Typedef] id: guides name: guides namespace: sequence created_by: kareneilbeck creation_date: 2009-08-19T02:27:24Z [Typedef] id: has_integral_part name: has_integral_part namespace: sequence def: "X has_integral_part Y if and only if: X has_part Y and Y part_of X." [http://precedings.nature.com/documents/3495/version/1] comment: Example: mRNA has_integral_part CDS. is_a: has_part ! has_part created_by: kareneilbeck creation_date: 2009-08-19T12:01:46Z [Typedef] id: has_origin name: has_origin namespace: sequence [Typedef] id: has_part name: has_part namespace: sequence def: "Inverse of part_of." [http://precedings.nature.com/documents/3495/version/1] comment: Example: operon has_part gene. [Typedef] id: has_quality name: has_quality namespace: sequence comment: The relationship between a feature and an attribute. [Typedef] id: homologous_to name: homologous_to namespace: sequence subset: SOFA is_symmetric: true is_a: similar_to ! similar_to [Typedef] id: integral_part_of name: integral_part_of namespace: sequence def: "X integral_part_of Y if and only if: X part_of Y and Y has_part X." [http://precedings.nature.com/documents/3495/version/1] comment: Example: exon integral_part_of transcript. is_a: part_of ! part_of created_by: kareneilbeck creation_date: 2009-08-19T12:03:28Z [Typedef] id: is_consecutive_sequence_of name: is_consecutive_sequence_of namespace: sequence def: "R is_consecutive_sequence_of R iff every instance of R is equivalent to a collection of instances of U:u1, u2, un, such that no pair of ux uy is overlapping and for all ux, it is adjacent to ux-1 and ux+1, with the exception of the initial and terminal u1,and un (which may be identical)." [PMID:20226267] comment: Example: region is consecutive_sequence of base. created_by: kareneilbeck creation_date: 2010-10-14T02:19:48Z [Typedef] id: lost name: lost namespace: sequence def: "X lost Y if X is a variant_of X' and Y part of X' but not X." [SO:ke] comment: A relation with which to annotate the changes in a variant sequence with respect to a reference.\nFor example a variant transcript may have lost a stop codon present in the reference sequence. created_by: kareneilbeck creation_date: 2011-06-28T12:53:16Z [Typedef] id: maximally_overlaps name: maximally_overlaps namespace: sequence def: "A maximally_overlaps X iff all parts of A (including A itself) overlap both A and Y." [PMID:20226267] comment: Example: non_coding_region_of_exon maximally_overlaps the intersections of exon and UTR. created_by: kareneilbeck creation_date: 2010-10-14T01:34:48Z [Typedef] id: member_of name: member_of namespace: sequence comment: A subtype of part_of. Inverse is collection_of. Winston, M, Chaffin, R, Herrmann: A taxonomy of part-whole relations. Cognitive Science 1987, 11:417-444. subset: SOFA is_transitive: true is_a: part_of ! part_of [Typedef] id: non_functional_homolog_of name: non_functional_homolog_of namespace: sequence def: "A relationship between a pseudogenic feature and its functional ancestor." [SO:ke] subset: SOFA is_a: homologous_to ! homologous_to [Typedef] id: orthologous_to name: orthologous_to namespace: sequence subset: SOFA is_symmetric: true is_a: homologous_to ! homologous_to [Typedef] id: overlaps name: overlaps namespace: sequence def: "X overlaps Y iff there exists some Z such that Z contained_by X and Z contained_by Y." [PMID:20226267] comment: Example: coding_exon overlaps CDS. created_by: kareneilbeck creation_date: 2010-10-14T01:33:15Z [Typedef] id: paralogous_to name: paralogous_to namespace: sequence subset: SOFA is_symmetric: true is_a: homologous_to ! homologous_to [Typedef] id: part_of name: part_of namespace: sequence def: "X part_of Y if X is a subregion of Y." [http://precedings.nature.com/documents/3495/version/1] comment: Example: amino_acid part_of polypeptide. subset: SOFA is_transitive: true [Typedef] id: partial_evidence_for_feature name: partial_evidence_for_feature namespace: sequence def: "B is partial_evidence_for_feature A if the extent of B supports part_of but not all of A." [SO:ke] is_a: evidence_for_feature ! evidence_for_feature [Typedef] id: position_of name: position_of namespace: sequence [Typedef] id: processed_from name: processed_from namespace: sequence def: "Inverse of processed_into." [http://precedings.nature.com/documents/3495/version/1] comment: Example: miRNA processed_from miRNA_primary_transcript. created_by: kareneilbeck creation_date: 2009-08-19T12:14:00Z [Typedef] id: processed_into name: processed_into namespace: sequence def: "X is processed_into Y if a region X is modified to create Y." [http://precedings.nature.com/documents/3495/version/1] comment: Example: miRNA_primary_transcript processed into miRNA. created_by: kareneilbeck creation_date: 2009-08-19T12:15:02Z [Typedef] id: recombined_from name: recombined_from namespace: sequence created_by: kareneilbeck creation_date: 2009-08-19T02:21:03Z [Typedef] id: recombined_to name: recombined_to namespace: sequence created_by: kareneilbeck creation_date: 2009-08-19T02:20:07Z [Typedef] id: sequence_of name: sequence_of namespace: sequence [Typedef] id: similar_to name: similar_to namespace: sequence subset: SOFA is_symmetric: true [Typedef] id: started_by name: started_by namespace: sequence def: "X is strted_by Y if Y is part_of X and X and Y share a 5' boundary." [PMID:20226267] comment: Example: CDS started_by start_codon. created_by: kareneilbeck creation_date: 2010-10-14T01:43:55Z [Typedef] id: starts name: starts namespace: sequence def: "X starts Y if X is part of Y, and A and Y share a 5' or N-terminal boundary." [PMID:20226267] comment: Example: start_codon starts CDS. created_by: kareneilbeck creation_date: 2010-10-14T01:47:53Z [Typedef] id: trans_spliced_from name: trans_spliced_from namespace: sequence created_by: kareneilbeck creation_date: 2009-08-19T02:22:14Z [Typedef] id: trans_spliced_to name: trans_spliced_to namespace: sequence created_by: kareneilbeck creation_date: 2009-08-19T02:22:00Z [Typedef] id: transcribed_from name: transcribed_from namespace: sequence def: "X is transcribed_from Y if X is synthesized from template Y." [http://precedings.nature.com/documents/3495/version/1] comment: Example: primary_transcript transcribed_from gene. created_by: kareneilbeck creation_date: 2009-08-19T12:05:39Z [Typedef] id: transcribed_to name: transcribed_to namespace: sequence def: "Inverse of transcribed_from." [http://precedings.nature.com/documents/3495/version/1] comment: Example: gene transcribed_to primary_transcript. created_by: kareneilbeck creation_date: 2009-08-19T12:08:24Z [Typedef] id: translates_to name: translates_to namespace: sequence def: "Inverse of translation _of." [http://precedings.nature.com/documents/3495/version/1] comment: Example: codon translates_to amino_acid. created_by: kareneilbeck creation_date: 2009-08-19T12:11:53Z [Typedef] id: translation_of name: translation_of namespace: sequence def: "X is translation of Y if X is translated by ribosome to create Y." [http://precedings.nature.com/documents/3495/version/1] comment: Example: Polypeptide translation_of CDS. created_by: kareneilbeck creation_date: 2009-08-19T12:09:59Z [Typedef] id: variant_of name: variant_of namespace: sequence def: "A' is a variant (mutation) of A = definition every instance of A' is either an immediate mutation of some instance of A, or there is a chain of immediate mutation processes linking A' to some instance of A." [SO:immuno_workshop] comment: Added to SO during the immunology workshop, June 2007. This relationship was approved by Barry Smith. genometools-1.5.1/gtdata/sketch/000077500000000000000000000000001211610345200165715ustar00rootroot00000000000000genometools-1.5.1/gtdata/sketch/default.style000066400000000000000000000251001211610345200212750ustar00rootroot00000000000000--[[ This is the GenomeTools annotation viewer config file. All options must be set inside the 'style' table. All items in this table must be tables, called 'sections'. Typically there is one section per feature type. Color definitions ----------------- Colors are given as RGB triplets {red=,green=,blue=(,alpha=)} where is a decimal value between 0 and 1. The alpha value is optional, as a default 0.5 will be used. Global format settings ---------------------- Global settings, such as margins, spacers, etc. are found at the end of this file, in the "format" section. ]]-- style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.9, green=0.9, blue=1.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- mRNA = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.4, green=0.5, blue=0.6}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- exon = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.6, green=0.6, blue=0.9}, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- CDS = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.9, green=0.9, blue=0.2}, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- TF_binding_site = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.8, green=0.6, blue=0.6}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- intron = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=1.0, blue=1.0}, style = "caret", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- repeat_region = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.8, green=0.3, blue=0.3}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = 0, }, -------------------------------------- LTR_retrotransposon = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.8, green=0.5, blue=0.5}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- long_terminal_repeat = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.9, green=0.9, blue=0.4}, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, target_site_duplication = { max_show_width = 0, }, -------------------------------------- protein_match = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.1, green=0.1, blue=0.5}, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- five_prime_cis_splice_site = { collapse_to_parent = true, }, -------------------------------------- five_prime_splice_site = { collapse_to_parent = true, }, -------------------------------------- three_prime_cis_splice_site = { collapse_to_parent = true, }, -------------------------------------- three_prime_splice_site = { collapse_to_parent = true, }, -------------------------------------- expressed_sequence_match = { fill = {red=0.2, green=0.2, blue=0.8}, max_show_width = 10000, max_num_lines = 10, max_capt_show_width= 5000, }, -------------------------------------- binding_site = { fill = {red=0.7, green=0.2, blue=0.8}, max_show_width = 10000, max_num_lines = 10, max_capt_show_width= 10000, }, -------------------------------------- SNP = { fill = {red=0.1, green=0.8, blue=0.8}, max_show_width = 10000, max_num_lines = 10, max_capt_show_width= 10000, }, -------------------------------------- deletion = { fill = {red=0.1, green=0.8, blue=0.8}, max_show_width = nil, max_num_lines = 10, max_capt_show_width= 10000, }, -------------------------------------- chromosome = { fill = {red=0.1, green=0.8, blue=0.8}, max_show_width = nil, max_num_lines = 10, }, -------------------------------------- substitution = { fill = {red=1.0, green=0.1, blue=0.05}, max_show_width = 10000, max_num_lines = 10, max_capt_show_width= 1000, }, -------------------------------------- BED_feature = { fill = {red=0.0, green=0.1, blue=0.0}, style = "box", }, -------------------------------------- BED_thick_feature = { fill = {red=0.0, green=0.5, blue=0.0}, style = "box", collapse_to_parent = true, }, -------------------------------------- BED_block = { fill = {red=0.0, green=1.0, blue=0.0}, style = "box", collapse_to_parent = true, }, -------------------------------------- GC_content = { -- this is for a custom track stroke = {red=0.2, green=0.2, blue=1.0, alpha = 0.4}, }, -------------------------------------- -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 8, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 8, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 8, -- size of track captions track_caption_space = 7, -- space between tracks and their captions arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/gtdata/trans/000077500000000000000000000000001211610345200164375ustar00rootroot00000000000000genometools-1.5.1/gtdata/trans/TransAnum000066400000000000000000000002031211610345200202650ustar00rootroot000000000000000 1 2 3 4 5 6 7 8 9 aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ !@#$%^&*()_-+=\|{}[];:'",<.>/?`~ genometools-1.5.1/gtdata/trans/TransDNA000066400000000000000000000000451211610345200177730ustar00rootroot00000000000000aA cC gG tTuU nsywrkvbdhmNSYWRKVBDHM genometools-1.5.1/gtdata/trans/TransDNAX000066400000000000000000000000471211610345200201250ustar00rootroot00000000000000aA cC gG tTuU nsywrkvbdhmxNSYWRKVBDHMX genometools-1.5.1/gtdata/trans/TransDNAX2000066400000000000000000000000471211610345200202070ustar00rootroot00000000000000A C G TU acgtunsywrkvbdhmxNSYWRKVBDHMX genometools-1.5.1/gtdata/trans/TransDNA_CBNP000066400000000000000000000000531211610345200205740ustar00rootroot00000000000000aA cC gG tT nsywrkvbdhmNSYWRKVBDHMxpofXPOF genometools-1.5.1/gtdata/trans/TransDNAall000066400000000000000000000000711211610345200204630ustar00rootroot00000000000000aA cC gG tT unsywrkvbdhmlifeqpxzojUNSYWRKVBDHMLIFEQPXZJO genometools-1.5.1/gtdata/trans/TransDNAlowermask000066400000000000000000000000471211610345200217220ustar00rootroot00000000000000A C G TU acgtunsywrkvbdhmxNSYWRKVBDHMX genometools-1.5.1/gtdata/trans/TransMass000066400000000000000000000002531211610345200202750ustar00rootroot00000000000000# 24-character amino acid alphabet in upper case # in addition to the usual 20 aminoacids, we have the following # B O X Z G A S P V T C LIX N O B D Q K Z E M H F R Y W * genometools-1.5.1/gtdata/trans/TransProt11000066400000000000000000000002221211610345200204540ustar00rootroot00000000000000# 11-character alphabet as defined by Volker Brendel # * and - are for stop codon LVIFJ i KR + ED - AG s ST o NQ n YW a P p H h M m C c XUBZO*- x genometools-1.5.1/gtdata/trans/TransProt12000066400000000000000000000003251211610345200204610ustar00rootroot00000000000000# 12-character alphabet defined by Volker Brendel # * is for a stop codon. It is an extra character but not a wildcard. LVIFlvif i KRkr + EDed - AGag s STst o NQnq n YWyw a Pp p Hh h Mm m Cc c *- * XUBZJOxubzjo x genometools-1.5.1/gtdata/trans/TransProt2000066400000000000000000000001531211610345200203770ustar00rootroot00000000000000# 2-character hydrophobic alphabet # O (hydrophobic), I (hydrophilic) AFILMPVWJ I CDEGHKNQRSTY O XUBZO*- x genometools-1.5.1/gtdata/trans/TransProt20000066400000000000000000000001421211610345200204550ustar00rootroot00000000000000# 20-character amino acid alphabet in upper case L V I F K R E D A G S T N Q Y W P H M C XUBZJO*- genometools-1.5.1/gtdata/trans/TransProt21000066400000000000000000000003221211610345200204560ustar00rootroot00000000000000# 21-character amino acid alphabet in capital and lower case # * denotes refers to stop codon and is extra character but not wildcard Ll Vv Ii Ff Kk Rr Ee Dd Aa Gg Ss Tt Nn Qq Yy Ww Pp Hh Mm Cc *- XUBZJOxubzjo genometools-1.5.1/gtdata/trans/TransProt3000066400000000000000000000001671211610345200204050ustar00rootroot00000000000000# 3-character structural alphabet # A (ambivalent), E (external), I (internal) ACGPSTWY A RNDQEHK E ILMFVJ I XUBZO*- X genometools-1.5.1/gtdata/trans/TransProt3B000066400000000000000000000001041211610345200204760ustar00rootroot00000000000000# 3-character charge alphabet DE A HKR C ACFGILMNPQSTVWYJ N XUBZO*- genometools-1.5.1/gtdata/trans/TransProt4000066400000000000000000000002011211610345200203730ustar00rootroot00000000000000# 4-character functional alphabet # A (acidic), C (basic), H (hydrophobic), P (polar) DE A HKR C AFILMPVWJ H CGNQSTY P XUBZO*- x genometools-1.5.1/gtdata/trans/TransProt4B000066400000000000000000000001121211610345200204760ustar00rootroot00000000000000# 4-character Stanfel alphabet ACGILMPSTVJ A DENQ C FWY D HKR E XUBZO*- X genometools-1.5.1/gtdata/trans/TransProt6000066400000000000000000000001201211610345200203750ustar00rootroot00000000000000# 6-character Dayhoff alphabet C A AGPST C DENQ D HKR E ILMVJ F FWY G XUBZO*- X genometools-1.5.1/gtdata/trans/TransProt7000066400000000000000000000001221211610345200204000ustar00rootroot00000000000000# 7-character Sneath alphabet ILVJ A AGP C MNQ D CST E DE F KR G FHWY H XUBZO*- X genometools-1.5.1/gtdata/trans/TransProt8000066400000000000000000000002761211610345200204130ustar00rootroot00000000000000# 8-character chemical alphabet # A (acidic), L (aliphatic), M (amide), R (aromatic) # C (basic), H (hydroxyl), I (imino), S (sulphur) DE A AGILVJ L NQ M FWY R RHK C ST H P I CM S XUBZO*- X genometools-1.5.1/gtdata/trans/TransProtall000066400000000000000000000003471211610345200210130ustar00rootroot00000000000000# simple mapping for protein sequences with all alphabet characters # * is for a stop codon. It is an extra character but not a wildcard. LVIFlvif i KRkr + EDed - AGag s STst o NQnq n YWyw a Pp p Hh h Mm m Cc c *- * XUBZJOxubzjo x genometools-1.5.1/gtdata/trans/Transab000066400000000000000000000000061211610345200177500ustar00rootroot00000000000000a b * genometools-1.5.1/gtpython/000077500000000000000000000000001211610345200157205ustar00rootroot00000000000000genometools-1.5.1/gtpython/README000066400000000000000000000017031211610345200166010ustar00rootroot00000000000000This directory contains the GenomeTools Python bindings. To use them, you have to add the following line to your Python script: from gt import * It is also possible to import single classes from the 'core', 'extended' and 'annotationsketch' sub-packages, e.g. from gt.extended.feature_node import FeatureNode Make sure that this directory is added to the PYTHONPATH environment variable. Alternatively, run python setup.py install to install the 'gt' package on this system (must be root). Furthermore, you have to make sure that the GenomeTools shared libraries can be be found by the dlopen(3) system call. For example, by adding the lib/ subdirectory of GenomeTools to your LD_LIBRARY_PATH environment variable. Alternatively, use "make install" in the genometools directory for a system-wide installation of libgenometools. For examples on how to use these bindings, please refer to the scripts in the subdirectory testdata/gtpython/ of GenomeTools. genometools-1.5.1/gtpython/gt/000077500000000000000000000000001211610345200163325ustar00rootroot00000000000000genometools-1.5.1/gtpython/gt/__init__.py000066400000000000000000000024141211610345200204440ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # import sys try: import ctypes except ImportError: sys.stderr.write("The ctypes package could not be found. ") sys.stderr.write("Please make sure it can be imported by Python.") sys.exit(1) try: from annotationsketch import * except AttributeError: # fail gracefully when AnnotationSketch symbols are not present pass from core import * from extended import * genometools-1.5.1/gtpython/gt/annotationsketch/000077500000000000000000000000001211610345200217065ustar00rootroot00000000000000genometools-1.5.1/gtpython/gt/annotationsketch/__init__.py000066400000000000000000000031271211610345200240220ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from block import * from canvas import * from color import * from custom_track import * from diagram import * from feature_index import * from feature_stream import * from graphics import * from image_info import * from layout import * from rec_map import * from style import * try: Block.register(gtlib) CanvasCairoFileBase.register(gtlib) CustomTrack.register(gtlib) Diagram.register(gtlib) #DiagramFromArray.register(gtlib) FeatureIndex.register(gtlib) Graphics.register(gtlib) ImageInfo.register(gtlib) Layout.register(gtlib) RecMap.register(gtlib) Style.register(gtlib) except AttributeError: # fail gracefully when AnnotationSketch symbols are not present pass genometools-1.5.1/gtpython/gt/annotationsketch/block.py000066400000000000000000000077511211610345200233640ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.error import gterror from gt.core.gtrange import Range from gt.core.gtstr import Str from gt.extended.strand import strandchars from gt.extended.feature_node import FeatureNode class Block(object): def __init__(self, ptr): if ptr == 0 or ptr == None: gterror("Block pointer cannot be NULL (was: " + str(ptr) + ")") self.block = gtlib.gt_block_ref(ptr) self._as_parameter_ = self.block def __del__(self): try: gtlib.gt_block_delete(self.block) except AttributeError: pass def get_range(self): r = gtlib.gt_block_get_range(self.block) return (r.start, r.end) def get_type(self): return gtlib.gt_block_get_type(self.block) def has_only_one_fullsize_element(self): return gtlib.gt_block_has_only_one_fullsize_element(self.block) == \ 1 def merge(self, block2): gtlib.gt_block_merge(self.block, block2) def clone(self): return Block(gtlib.gt_block_clone(self.block)) def get_caption(self): s = Str(gtlib.gt_block_get_caption(self.block)) return str(s) def set_strand(self, strand): if not strand in strandchars: gterror("Invalid strand '%s' -- must be one of %s" % (strand, strandchars)) gtlib.gt_block_set_strand(self.block, strandchars.index(strand)) def get_strand(self): return strandchars[gtlib.gt_block_get_strand(self.block)] def get_top_level_feature(self): f = gtlib.gt_block_get_top_level_feature(self.block) if f != 0: return FeatureNode.create_from_ptr(f, True) else: return None def get_size(self): return gtlib.gt_block_get_size(self.block) def from_param(cls, obj): if not isinstance(obj, Block): raise TypeError, "argument must be a Block" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): from ctypes import c_char_p, c_void_p, c_int gtlib.gt_block_get_range.restype = Range gtlib.gt_block_get_range.argtypes = [c_void_p] gtlib.gt_block_get_type.restype = c_char_p gtlib.gt_block_get_type.argtypes = [c_void_p] gtlib.gt_block_has_only_one_fullsize_element.argtypes = [c_void_p] gtlib.gt_block_merge.argtypes = [c_void_p, Block] gtlib.gt_block_clone.restype = c_void_p gtlib.gt_block_clone.argtypes = [c_void_p] gtlib.gt_block_set_caption_visibility.argtypes = [c_void_p, c_int] gtlib.gt_block_caption_is_visible.argtypes = [c_void_p] gtlib.gt_block_get_caption.restype = c_void_p gtlib.gt_block_get_caption.argtypes = [c_void_p] gtlib.gt_block_set_strand.argtypes = [c_void_p, c_int] gtlib.gt_block_get_strand.restype = c_int gtlib.gt_block_get_strand.argtypes = [c_void_p] gtlib.gt_block_get_top_level_feature.restype = c_void_p gtlib.gt_block_get_top_level_feature.argtypes = [c_void_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/annotationsketch/canvas.py000066400000000000000000000111471211610345200235370ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.annotationsketch.style import Style from gt.annotationsketch.image_info import ImageInfo from gt.core.error import Error, gterror from gt.core.gtstr import Str GRAPHICS_PDF = 0 GRAPHICS_PNG = 1 GRAPHICS_PS = 2 GRAPHICS_SVG = 3 class Canvas: def __init__(self, *args): raise NotImplementedError, \ 'Please call the constructor of a Canvas implementation.' def __del__(self): try: gtlib.gt_canvas_delete(self.canvas) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, Canvas): raise TypeError, "argument must be a Canvas" return obj._as_parameter_ from_param = classmethod(from_param) class CanvasCairoFileBase(Canvas): def from_param(cls, obj): if not isinstance(obj, CanvasCairoFile): raise TypeError, "argument must be a CanvasCairoFile" return obj._as_parameter_ from_param = classmethod(from_param) def to_file(self, filename): err = Error() rval = gtlib.gt_canvas_cairo_file_to_file(self.canvas, filename, err) if rval != 0: gterror(err) def to_stream(self): from ctypes import string_at str = Str(None) gtlib.gt_canvas_cairo_file_to_stream(self.canvas, str) return string_at(str.get_mem(), str.length()) def register(cls, gtlib): from ctypes import c_char_p, c_void_p, c_ulong, c_int gtlib.gt_canvas_cairo_file_to_file.restype = c_int gtlib.gt_canvas_cairo_file_to_file.argtypes = [c_void_p, c_char_p, Error] gtlib.gt_canvas_cairo_file_to_stream.restype = c_char_p gtlib.gt_canvas_cairo_file_to_stream.argtypes = [c_void_p, Str] gtlib.gt_canvas_cairo_file_new.restype = c_void_p gtlib.gt_canvas_cairo_file_new.argtypes = [Style, c_int, c_ulong, c_ulong, ImageInfo] register = classmethod(register) class CanvasCairoFile(CanvasCairoFileBase): def __init__(self, style, width, height, ii=None): err = Error() canvas = gtlib.gt_canvas_cairo_file_new(style, GRAPHICS_PNG, width, height, ii, err) if canvas == None: gterror(err) self.canvas = canvas self._as_parameter_ = self.canvas class CanvasCairoFilePNG(CanvasCairoFileBase): def __init__(self, style, width, height, ii=None): err = Error() canvas = gtlib.gt_canvas_cairo_file_new(style, GRAPHICS_PNG, width, height, ii, err) if canvas == None: gterror(err) self.canvas = canvas self._as_parameter_ = self.canvas class CanvasCairoFilePDF(CanvasCairoFileBase): def __init__(self, style, width, height, ii=None): err = Error() canvas = gtlib.gt_canvas_cairo_file_new(style, GRAPHICS_PDF, width, height, ii, err) if canvas == None: gterror(err) self.canvas = canvas self._as_parameter_ = self.canvas class CanvasCairoFilePS(CanvasCairoFileBase): def __init__(self, style, width, height, ii=None): err = Error() canvas = gtlib.gt_canvas_cairo_file_new(style, GRAPHICS_PS, width, height, ii, err) if canvas == None: gterror(err) self.canvas = canvas self._as_parameter_ = self.canvas class CanvasCairoFileSVG(CanvasCairoFileBase): def __init__(self, style, width, height, ii=None): err = Error() canvas = gtlib.gt_canvas_cairo_file_new(style, GRAPHICS_SVG, width, height, ii, err) if canvas == None: gterror(err) self.canvas = canvas self._as_parameter_ = self.canvas genometools-1.5.1/gtpython/gt/annotationsketch/color.py000066400000000000000000000021301211610345200233720ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from ctypes import Structure, c_double class Color(Structure): _fields_ = [("red", c_double), ("green", c_double), ("blue", c_double), ("alpha", c_double)] genometools-1.5.1/gtpython/gt/annotationsketch/custom_track.py000066400000000000000000000060631211610345200247630ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008-2009 Sascha Steinbiss # Copyright (c) 2008-2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from ctypes import CFUNCTYPE, POINTER, c_char_p, c_void_p, c_int, c_ulong from gt.dlload import gtlib from gt.annotationsketch.color import Color from gt.annotationsketch.style import Style from gt.annotationsketch.graphics import Graphics from gt.core.error import Error, gterror from gt.core.gtrange import Range from gt.core.gtstr import Str RenderFunc = CFUNCTYPE(c_int, c_void_p, c_ulong, POINTER(Range), c_void_p, c_void_p) TitleFunc = CFUNCTYPE(c_int, c_void_p, c_void_p) HeightFunc = CFUNCTYPE(c_ulong, c_void_p) FreeFunc = CFUNCTYPE(c_void_p, c_void_p) class CustomTrack(object): def __init__(self): # create callbacks to C script wrapper def get_title_w(ptr, str): s = Str(str) title = self.get_title() s.append_cstr(title) return 0 self.get_title_cb = TitleFunc(get_title_w) def get_height_w(ptr): return self.get_height() self.get_height_cb = HeightFunc(get_height_w) def render_w(graphics, ypos, rng, sty, err): g = Graphics(graphics) s = Style(sty) e = Error(err) return self.render(g, ypos, rng.contents, s, e) self.render_cb = RenderFunc(render_w) def free_w(ptr): self.free() self.free_cb = FreeFunc(free_w) self.ctt = gtlib.gt_custom_track_script_wrapper_new(self.render_cb, self.get_height_cb, self.get_title_cb, self.free_cb) self._as_parameter_ = self.ctt def __del__(self): try: gtlib.gt_custom_track_delete(self.ctt) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, CustomTrack): raise TypeError, "argument must be a CustomTrack" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): from ctypes import c_char_p, c_void_p, c_int, POINTER gtlib.gt_custom_track_script_wrapper_new.restype = c_void_p gtlib.gt_custom_track_script_wrapper_new.argtypes = [RenderFunc, HeightFunc, TitleFunc, FreeFunc] register = classmethod(register) genometools-1.5.1/gtpython/gt/annotationsketch/custom_track_example.py000066400000000000000000000031251211610345200264720ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.annotationsketch.custom_track import CustomTrack from gt.annotationsketch.color import Color from gt.core.gtrange import Range class CustomTrackExample(CustomTrack): def __init__(self): super(CustomTrackExample, self).__init__() def get_height(self): return 50 def get_title(self): return "Sample track drawn by a Python script" def render(self, graphics, ypos, rng, style, error): from random import random data = [] for i in range(0, 120): data.append(random()) graphics.draw_curve_data(graphics.get_xmargins(), ypos, Color(0, 0, 1, .6), data, 120, Range(0, 1), 40) return 0 genometools-1.5.1/gtpython/gt/annotationsketch/diagram.py000066400000000000000000000100701211610345200236620ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from ctypes import CFUNCTYPE, c_char_p, c_void_p, c_int from gt.dlload import gtlib from gt.annotationsketch.block import Block from gt.annotationsketch.canvas import Canvas from gt.annotationsketch.custom_track import CustomTrack from gt.annotationsketch.style import Style from gt.core.array import Array from gt.core.error import Error, gterror from gt.core.gtrange import Range from gt.core.gtstr import Str from gt.extended.feature_index import FeatureIndex from gt.extended.feature_node import FeatureNode TrackSelectorFunc = CFUNCTYPE(c_void_p, c_void_p, c_void_p, c_void_p) class Diagram: def from_array(arr, rng, style): from ctypes import byref, sizeof if rng.start > rng.end: gterror("range.start > range.end") gtarr = Array.create(sizeof(c_void_p), False) for i in arr: if not isinstance(i, FeatureNode): gterror("Diagram array must only contain FeatureNodes!") gtarr.add(i) diagram = gtlib.gt_diagram_new_from_array(gtarr, byref(rng), style) return Diagram(diagram) from_array = staticmethod(from_array) def from_index(feature_index, seqid, rng, style): from ctypes import byref err = Error() if rng.start > rng.end: gterror("range.start > range.end") diagram = gtlib.gt_diagram_new(feature_index, seqid, byref(rng), style, err) if err.is_set(): gterror(err) return Diagram(diagram) from_index = staticmethod(from_index) def __init__(self, ptr): self.diagram = ptr self._as_parameter_ = self.diagram def __del__(self): try: gtlib.gt_diagram_delete(self.diagram) except AttributeError: pass def set_track_selector_func(self, func): def trackselector(block_ptr, string_ptr, data_ptr): b = Block(block_ptr) string = Str(string_ptr) ret = func(b) if not ret: gterror("Track selector callback function must return a string!") string.append_cstr(ret) self.tsf_cb = TrackSelectorFunc(trackselector) self.tsf = trackselector gtlib.gt_diagram_set_track_selector_func(self.diagram, self.tsf_cb) def add_custom_track(self, ct): gtlib.gt_diagram_add_custom_track(self.diagram, ct) def from_param(cls, obj): if not isinstance(obj, Diagram): raise TypeError, "argument must be a Diagram" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): from ctypes import c_char_p, c_void_p, POINTER gtlib.gt_diagram_new.restype = c_void_p gtlib.gt_diagram_new.argtypes = [FeatureIndex, c_char_p, POINTER(Range), Style, Error] gtlib.gt_diagram_set_track_selector_func.argtypes = [c_void_p, TrackSelectorFunc] gtlib.gt_diagram_add_custom_track.argtypes = [c_void_p, CustomTrack] gtlib.gt_diagram_new_from_array.restype = c_void_p gtlib.gt_diagram_new_from_array.argtypes = [Array, POINTER(Range), Style] register = classmethod(register) genometools-1.5.1/gtpython/gt/annotationsketch/feature_index.py000066400000000000000000000017621211610345200251100ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2013 Sascha Steinbiss # Copyright (c) 2013 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # import warnings warnings.warn("deprecated", DeprecationWarning) from gt.extended.feature_index import * genometools-1.5.1/gtpython/gt/annotationsketch/feature_stream.py000066400000000000000000000017631211610345200252750ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2013 Sascha Steinbiss # Copyright (c) 2013 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # import warnings warnings.warn("deprecated", DeprecationWarning) from gt.extended.feature_stream import * genometools-1.5.1/gtpython/gt/annotationsketch/graphics.py000066400000000000000000000267641211610345200240770ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008-2010 Sascha Steinbiss # Copyright (c) 2008-2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.annotationsketch.color import Color from gt.core.array import Array from gt.core.error import Error, gterror from gt.core.gtrange import Range from gt.core.gtstr import Str GRAPHICS_PDF = 0 GRAPHICS_PNG = 1 GRAPHICS_PS = 2 GRAPHICS_SVG = 3 ARROW_LEFT = 0 ARROW_RIGHT = 1 ARROW_BOTH = 2 ARROW_NONE = 3 class Graphics: def __init__(self, p): self.g = p self.own = False self._as_parameter_ = self.g def __del__(self): if self.own: try: gtlib.gt_graphics_delete(self.g) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, Graphics): raise TypeError, "argument must be a Graphics" return obj._as_parameter_ from_param = classmethod(from_param) def draw_text(self, x, y, text): gtlib.gt_graphics_draw_text(self.g, x, y, text) def draw_text_centered(self, x, y, text): gtlib.gt_graphics_draw_text_centered(self.g, x, y, text) def draw_text_right(self, x, y, text): gtlib.gt_graphics_draw_text_right(self.g, x, y, text) def draw_colored_text(self, x, y, color, text): gtlib.gt_graphics_draw_colored_text(self.g, x, y, color, text) def get_image_height(self): return gtlib.gt_graphics_get_image_height(self.g) def get_image_width(self): return gtlib.gt_graphics_get_image_width(self.g) def get_text_height(self): return gtlib.gt_graphics_get_text_height(self.g) def get_text_width(self, txt): return gtlib.gt_graphics_get_text_width(self.g, txt) def set_margins(self, xmargs, ymargs): gtlib.gt_graphics_set_margins(self.g, xmargs, ymargs) def get_xmargins(self): return gtlib.gt_graphics_get_xmargins(self.g) def get_ymargins(self): return gtlib.gt_graphics_get_ymargins(self.g) def draw_line(self, x, y, xto, yto, color, stroke_width): gtlib.gt_graphics_draw_line(self.g, x, y, xto, yto, color, stroke_width) def draw_horizontal_line(self, x, y, color, width, stroke_width): gtlib.gt_graphics_draw_horizontal_line(self.g, x, y, color, width, stroke_width) def draw_vertical_line(self, x, y, color, length, stroke_width): gtlib.gt_graphics_draw_vertical_line(self.g, x, y, color, length, stroke_width) def draw_box( self, x, y, width, height, fillcolor, astatus, awidth, swidth, scolor, dashed, ): if dashed: d_int = 1 else: d_int = 0 gtlib.gt_graphics_draw_box( self.g, x, y, width, height, fillcolor, astatus, awidth, swidth, scolor, d_int, ) def draw_dashes( self, x, y, width, height, astatus, awidth, swidth, scolor, ): gtlib.gt_graphics_draw_dashes( self.g, x, y, width, height, astatus, awidth, swidth, scolor, ) def draw_caret( self, x, y, width, height, astatus, awidth, swidth, scolor, ): gtlib.gt_graphics_draw_caret( self.g, x, y, width, height, astatus, awidth, swidth, scolor, ) def draw_rectangle( self, x, y, filled, fcolor, stroked, scolor, swidth, width, height, ): if filled: f_int = 1 else: f_int = 0 if stroked: s_int = 1 else: s_int = 0 gtlib.gt_graphics_draw_rectangle( self.g, x, y, f_int, fcolor, s_int, scolor, swidth, width, height, ) def draw_arrowhead(self, x, y, color, status): gtlib.gt_graphics_draw_arrowhead(self.g, x, y, color, status) def draw_curve_data(self, x, y, color, data, ndata, valrange, height): from ctypes import c_double NDblArr = c_double * ndata cdata = NDblArr() for i in range(0, ndata): cdata[i] = data[i] gtlib.gt_graphics_draw_curve_data(self.g, x, y, color, cdata, ndata, valrange, height) def to_file(self, filename): err = Error() if gtlib.gt_graphics_save_to_file(self.g, filename, err) < 0: gterror(err) def to_stream(self): from ctypes import string_at s = Str(None) gtlib.gt_graphics_save_to_stream(self.g, s) return string_at(s.get_mem(), s.length()) def get_text_height(self): return gtlib.gt_graphics_get_text_height(self.g) def get_text_width(self, text): return gtlib.gt_graphics_get_text_width(self.g, text) def register(cls, gtlib): from ctypes import c_char_p, c_void_p, c_int, POINTER, c_double, \ c_ulong gtlib.gt_graphics_draw_text.argtypes = [c_void_p, c_double, c_double, c_char_p] gtlib.gt_graphics_draw_text_right.argtypes = [c_void_p, c_double, c_double, c_char_p] gtlib.gt_graphics_draw_text_centered.argtypes = [c_void_p, c_double, c_double, c_char_p] gtlib.gt_graphics_draw_colored_text.argtypes = [c_void_p, c_double, c_double, Color, c_char_p] gtlib.gt_graphics_get_image_height.restype = c_double gtlib.gt_graphics_get_image_height.argtypes = [c_void_p] gtlib.gt_graphics_get_image_width.restype = c_double gtlib.gt_graphics_get_image_width.argtypes = [c_void_p] gtlib.gt_graphics_get_text_height.restype = c_double gtlib.gt_graphics_get_text_height.argtypes = [c_void_p] gtlib.gt_graphics_get_text_width.restype = c_double gtlib.gt_graphics_get_text_width.argtypes = [c_void_p, c_char_p] gtlib.gt_graphics_set_margins.argtypes = [c_void_p, c_double, c_double] gtlib.gt_graphics_get_xmargins.restype = c_double gtlib.gt_graphics_get_xmargins.argtypes = [c_void_p] gtlib.gt_graphics_get_ymargins.restype = c_double gtlib.gt_graphics_get_ymargins.argtypes = [c_void_p] gtlib.gt_graphics_draw_vertical_line.argtypes = [c_void_p, c_double, c_double, Color, c_double, c_double] gtlib.gt_graphics_draw_line.argtypes = [c_void_p, c_double, c_double, c_double, c_double, Color, c_double] gtlib.gt_graphics_draw_horizontal_line.argtypes = [c_void_p, c_double, c_double, Color, c_double, c_double] gtlib.gt_graphics_draw_box.argtypes = [ c_void_p, c_double, c_double, c_double, c_double, Color, c_int, c_double, c_double, Color, c_int, ] gtlib.gt_graphics_draw_dashes.argtypes = [ c_void_p, c_double, c_double, c_double, c_double, c_int, c_double, c_double, Color, ] gtlib.gt_graphics_draw_caret.argtypes = [ c_void_p, c_double, c_double, c_double, c_double, c_int, c_double, c_double, Color, ] gtlib.gt_graphics_draw_rectangle.argtypes = [ c_void_p, c_double, c_double, c_int, Color, c_int, Color, c_double, c_double, c_double, ] gtlib.gt_graphics_draw_arrowhead.argtypes = [c_void_p, c_double, c_double, Color, c_int] gtlib.gt_graphics_draw_curve_data.argtypes = [c_void_p, c_double, c_double, Color, c_void_p, c_ulong, Range, c_ulong] gtlib.gt_graphics_save_to_file.restype = c_int gtlib.gt_graphics_save_to_file.argtypes = [c_void_p, c_char_p, Error] gtlib.gt_graphics_save_to_stream.argtypes = [c_void_p, Str] register = classmethod(register) class GraphicsCairo(Graphics): def __init__(self, p): self.g = p self.own = False self._as_parameter_ = self.g def from_param(cls, obj): if not isinstance(obj, GraphicsCairo): raise TypeError, "argument must be a GraphicsCairo" return obj._as_parameter_ from_param = classmethod(from_param) class GraphicsCairoPNG(GraphicsCairo): def __init__(self, width, height): self.g = gtlib.gt_graphics_cairo_new(GRAPHICS_PNG, width, height) self.own = True self._as_parameter_ = self.g def from_param(cls, obj): if not isinstance(obj, GraphicsCairoPNG): raise TypeError, "argument must be a GraphicsCairoPNG" return obj._as_parameter_ from_param = classmethod(from_param) class GraphicsCairoPDF(GraphicsCairo): def __init__(self, width, height): self.g = gtlib.gt_graphics_cairo_new(GRAPHICS_PDF, width, height) self.own = True self._as_parameter_ = self.g def from_param(cls, obj): if not isinstance(obj, GraphicsCairoPDF): raise TypeError, "argument must be a GraphicsCairoPDF" return obj._as_parameter_ from_param = classmethod(from_param) class GraphicsCairoPS(GraphicsCairo): def __init__(self, width, height): self.g = gtlib.gt_graphics_cairo_new(GRAPHICS_PS, width, height) self.own = True self._as_parameter_ = self.g def from_param(cls, obj): if not isinstance(obj, GraphicsCairoPS): raise TypeError, "argument must be a GraphicsCairoPS" return obj._as_parameter_ from_param = classmethod(from_param) class GraphicsCairoSVG(GraphicsCairo): def __init__(self, width, height): self.g = gtlib.gt_graphics_cairo_new(GRAPHICS_SVG, width, height) self.own = True self._as_parameter_ = self.g def from_param(cls, obj): if not isinstance(obj, GraphicsCairoSVG): raise TypeError, "argument must be a GraphicsCairoSVG" return obj._as_parameter_ from_param = classmethod(from_param) genometools-1.5.1/gtpython/gt/annotationsketch/image_info.py000066400000000000000000000063601211610345200243620ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.annotationsketch.rec_map import RecMap import math class ImageInfo: def __init__(self): self.ii = gtlib.gt_image_info_new() self._as_parameter_ = self.ii self.hotspots = None def __del__(self): try: gtlib.gt_image_info_delete(self.ii) except AttributeError: pass def from_param(cls, obj): if not (isinstance(obj, ImageInfo) or obj == None): raise TypeError, "argument must be an ImageInfo" if obj == None: return None return obj._as_parameter_ from_param = classmethod(from_param) def get_height(self): return gtlib.gt_image_info_get_height(self.ii) def num_of_rec_maps(self): return gtlib.gt_image_info_num_of_rec_maps(self.ii) def compare_hotspots(cls, hs1, hs2): if hs1[2] - hs1[0] + 1 > hs2[2] - hs2[0] + 1: return 1 elif hs1[2] - hs1[0] + 1 == hs2[2] - hs2[0] + 1: if hs1[3] > hs2[3]: return 1 elif hs1[3] == hs2[3]: return 0 else: return -1 else: return -1 compare_hotspots = classmethod(compare_hotspots) def each_hotspot(self): if not self.hotspots: self.hotspots = [] for i in range(self.num_of_rec_maps()): rm = RecMap(gtlib.gt_image_info_get_rec_map(self.ii, i)) self.hotspots.append([math.floor(rm.get_northwest_x()), math.floor(rm.get_northwest_y()), math.floor(rm.get_southeast_x()), math.floor(rm.get_southeast_y()), rm.get_genome_feature()]) self.hotspots.sort(ImageInfo.compare_hotspots) for hs in self.hotspots: yield (hs[0], hs[1], hs[2], hs[3], hs[4]) def register(cls, gtlib): from ctypes import c_void_p, c_ulong, c_uint gtlib.gt_image_info_get_rec_map.restype = c_void_p gtlib.gt_image_info_get_rec_map.argtypes = [c_void_p, c_ulong] gtlib.gt_image_info_num_of_rec_maps.restype = c_ulong gtlib.gt_image_info_num_of_rec_maps.argtypes = [c_void_p] gtlib.gt_image_info_get_height.restype = c_uint gtlib.gt_image_info_get_height.argtypes = [c_void_p] gtlib.gt_image_info_new.restype = c_void_p register = classmethod(register) genometools-1.5.1/gtpython/gt/annotationsketch/layout.py000066400000000000000000000065241211610345200236040ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008-2009 Sascha Steinbiss # Copyright (c) 2008-2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.annotationsketch.canvas import Canvas from gt.annotationsketch.diagram import Diagram from gt.annotationsketch.style import Style from gt.core.error import Error, gterror from ctypes import c_ulong, c_void_p, c_int, c_char_p, CFUNCTYPE, byref, \ POINTER, c_double TrackOrderingFunc = CFUNCTYPE(c_int, c_char_p, c_char_p, c_void_p) class Layout: def __init__(self, diagram, width, style): err = Error() self.layout = gtlib.gt_layout_new(diagram, width, style, err) if err.is_set(): gterror(err) self._as_parameter_ = self.layout def __del__(self): try: gtlib.gt_layout_delete(self.layout) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, Layout): raise TypeError, "argument must be a Layout" return obj._as_parameter_ from_param = classmethod(from_param) def sketch(self, canvas): err = Error() had_err = gtlib.gt_layout_sketch(self.layout, canvas, err) if err.is_set(): gterror(err) def get_height(self): err = Error() height = c_ulong() gtlib.gt_layout_get_height(self.layout, byref(height), err) if err.is_set(): gterror(err) return height.value def set_track_ordering_func(self, func): def trackorderer(s1, s2, data_ptr): ret = func(s1, s2) try: if ret is None: raise ValueError else: ret = int(ret) except ValueError: gterror("Track ordering function must return a number!") return ret self.tof_cb = TrackOrderingFunc(trackorderer) self.tof = trackorderer gtlib.gt_layout_set_track_ordering_func(self.layout, self.tof_cb) def register(cls, gtlib): gtlib.gt_layout_new.restype = c_void_p gtlib.gt_layout_new.argtypes = [Diagram, c_ulong, Style] gtlib.gt_layout_sketch.restype = c_int gtlib.gt_layout_sketch.argtypes = [c_void_p, Canvas, Error] gtlib.gt_layout_set_track_ordering_func.argtypes = [c_void_p, TrackOrderingFunc] gtlib.gt_layout_get_height.restype = c_int gtlib.gt_layout_get_height.argtypes = [c_void_p, POINTER(c_ulong), Error] register = classmethod(register) genometools-1.5.1/gtpython/gt/annotationsketch/rec_map.py000066400000000000000000000053701211610345200236730ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.feature_node import FeatureNode class RecMap: def __init__(self, rm): self.rm = rm self._as_parameter_ = self.rm def from_param(cls, obj): if not isinstance(obj, RecMap): raise TypeError, "argument must be a RecMap" return obj._as_parameter_ from_param = classmethod(from_param) def get_northwest_x(self): return gtlib.gt_rec_map_get_northwest_x(self.rm) def get_northwest_y(self): return gtlib.gt_rec_map_get_northwest_y(self.rm) def get_southeast_x(self): return gtlib.gt_rec_map_get_southeast_x(self.rm) def get_southeast_y(self): return gtlib.gt_rec_map_get_southeast_y(self.rm) def get_genome_feature(self): #refcount only this FeatureNode! return FeatureNode.create_from_ptr(gtlib.gt_rec_map_get_genome_feature(self.rm), True) def has_omitted_children(self): return gtlib.gt_rec_map_has_omitted_children(self.rm) == 1 def register(cls, gtlib): from ctypes import c_int, c_void_p, c_double gtlib.gt_rec_map_get_northwest_x.restype = c_double gtlib.gt_rec_map_get_northwest_x.argtypes = [c_void_p] gtlib.gt_rec_map_get_northwest_y.restype = c_double gtlib.gt_rec_map_get_northwest_y.argtypes = [c_void_p] gtlib.gt_rec_map_get_southeast_x.restype = c_double gtlib.gt_rec_map_get_southeast_x.argtypes = [c_void_p] gtlib.gt_rec_map_get_southeast_y.restype = c_double gtlib.gt_rec_map_get_southeast_y.argtypes = [c_void_p] gtlib.gt_rec_map_get_genome_feature.restype = c_void_p gtlib.gt_rec_map_get_genome_feature.argtypes = [c_void_p] gtlib.gt_rec_map_has_omitted_children.restype = c_int gtlib.gt_rec_map_has_omitted_children.argtypes = [c_void_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/annotationsketch/style.py000066400000000000000000000141711211610345200234240ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008-2010 Sascha Steinbiss # Copyright (c) 2008-2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib, CollectFunc from gt.annotationsketch.color import Color from gt.core.error import Error, gterror from gt.core.gtstr import Str from gt.core.str_array import StrArray from gt.extended.genome_node import GenomeNode STYLE_OK = 0 STYLE_NOT_SET = 1 STYLE_ERROR = 2 class Style: def __init__(self, ptr=None): if ptr: self.style = ptr self.own = False else: e = Error() self.style = gtlib.gt_style_new(e) if self.style == 0 or self.style == None: gterror(e) self.own = True self._as_parameter_ = self.style def __del__(self): if self.own: try: gtlib.gt_style_delete(self.style) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, Style): raise TypeError, "argument must be a Style" return obj._as_parameter_ from_param = classmethod(from_param) def load_file(self, filename): err = Error() rval = gtlib.gt_style_load_file(self.style, filename, err) if rval != 0: gterror(err) def load_str(self, string): err = Error() strg = Str(str(string.encode("utf-8"))) rval = gtlib.gt_style_load_str(self.style, strg, err) if rval != 0: gterror(err) def to_str(self): err = Error() string = Str() if gtlib.gt_style_to_str(self.style, string, err) == 0: return str(string) else: gterror(err) def clone(self): sty = Style() str = self.to_str() sty.load_str(str) return sty def get_color(self, section, key, gn=None): from ctypes import byref color = Color() err = Error() rval = gtlib.gt_style_get_color(self.style, section, key, byref(color),\ gn, err) if rval == STYLE_OK: return color elif rval == STYLE_NOT_SET: return None elif rval == STYLE_ERROR: gterror(err) def set_color(self, section, key, color): from ctypes import byref gtlib.gt_style_set_color(self.style, section, key, byref(color)) def get_cstr(self, section, key, gn=None): string = Str() err = Error() rval = gtlib.gt_style_get_str(self.style, section, key, string, gn, err) if rval == STYLE_OK: return str(string) elif rval == STYLE_NOT_SET: return None elif rval == STYLE_ERROR: gterror(err) def set_cstr(self, section, key, value): string = Str(str(value.encode("utf-8"))) gtlib.gt_style_set_str(self.style, section, key, string) def get_num(self, section, key, gn=None): from ctypes import c_double, byref double = c_double() err = Error() rval = gtlib.gt_style_get_num(self.style, section, key, byref(double), \ gn, err) if rval == STYLE_OK: return double.value elif rval == STYLE_NOT_SET: return None elif rval == STYLE_ERROR: gterror(err) def set_num(self, section, key, number): from ctypes import c_double num = c_double(number) gtlib.gt_style_set_num(self.style, section, key, num) def get_bool(self, section, key, gn=None): from ctypes import byref, c_int bool = c_int() err = Error() rval = gtlib.gt_style_get_bool(self.style, section, key, byref(bool), \ gn, err) if rval == STYLE_OK: if bool.value == 1: return True else: return False elif rval == STYLE_NOT_SET: return None elif rval == STYLE_ERROR: gterror(err) def set_bool(self, section, key, val): if val == True: gtlib.gt_style_set_bool(self.style, section, key, 1) else: gtlib.gt_style_set_bool(self.style, section, key, 0) def unset(self, section, key): gtlib.gt_style_unset(self.style, section, key) def register(cls, gtlib): from ctypes import c_char_p, c_double, c_float, c_void_p, \ POINTER, c_int gtlib.gt_style_get_bool.restype = c_int gtlib.gt_style_get_bool.argtypes = [c_void_p, c_char_p, c_char_p, POINTER(c_int), c_void_p] gtlib.gt_style_get_num.restype = c_int gtlib.gt_style_get_num.argtypes = [c_void_p, c_char_p, c_char_p, POINTER(c_double), c_void_p] gtlib.gt_style_get_str.restype = c_int gtlib.gt_style_get_str.argtypes = [c_void_p, c_char_p, c_char_p, Str, c_void_p] gtlib.gt_style_get_color.restype = c_int gtlib.gt_style_get_color.argtypes = [c_void_p, c_char_p, c_char_p, POINTER(Color), c_void_p] gtlib.gt_style_load_str.argtypes = [c_void_p, Str, Error] gtlib.gt_style_load_file.argtypes = [c_void_p, c_char_p, Error] gtlib.gt_style_unset.argtypes = [c_void_p, c_char_p, c_char_p] gtlib.gt_style_to_str.argtypes = [c_void_p, Str, Error] register = classmethod(register) genometools-1.5.1/gtpython/gt/core/000077500000000000000000000000001211610345200172625ustar00rootroot00000000000000genometools-1.5.1/gtpython/gt/core/__init__.py000066400000000000000000000024261211610345200213770ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from array import * from alphabet import * from encseq import * from error import * from gtrange import * from gtstr import * from str_array import * from warning import * Alphabet.register(gtlib) Array.register(gtlib) Encseq.register(gtlib) EncseqEncoder.register(gtlib) EncseqBuilder.register(gtlib) EncseqReader.register(gtlib) Error.register(gtlib) Str.register(gtlib) StrArray.register(gtlib) genometools-1.5.1/gtpython/gt/core/alphabet.py000066400000000000000000000132111211610345200214120ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.error import Error, gterror from gt.core.gtstr import Str from gt.core.str_array import StrArray from ctypes import c_ulong, c_uint, c_int, c_char_p, c_void_p, c_char, c_ubyte import os.path class Alphabet: def create_dna(): return Alphabet(gtlib.gt_alphabet_new_dna(), True) create_dna = staticmethod(create_dna) def create_protein(): return Alphabet(gtlib.gt_alphabet_new_protein(), True) create_protein = staticmethod(create_protein) def create_empty(): return Alphabet(gtlib.gt_alphabet_new_empty(), True) create_empty = staticmethod(create_empty) def create_from_file(indexname): if not os.path.exists(indexname + ".al1"): raise IOError, ("file not found: %s" % (indexname + ".al1")) e = Error() a_ptr = gtlib.gt_alphabet_new_from_file(str(indexname), e) a = Alphabet(a_ptr, True) if a == None: gterror(e) else: return a create_from_file = staticmethod(create_from_file) def create_from_sequence(seqfilenames): if not isinstance(seqfilenames, list): raise TypeError, "argument must be a list of strings" e = Error() sa = StrArray() for f in seqfilenames: if not os.path.exists(f): raise IOError, ("file not found: %s" % f) sa.add(str(f)) a_ptr = gtlib.gt_alphabet_new_from_sequence(sa, e) a = Alphabet(a_ptr, True) if a == None: gterror(e) else: return a create_from_sequence = staticmethod(create_from_sequence) def __init__(self, alpha, own=False): if own: self.alpha = alpha; else: self.alpha = gtlib.gt_alphabet_ref(alpha); self._as_parameter_ = self.alpha def __del__(self): try: gtlib.gt_alphabet_delete(self.slpha) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, Alphabet): raise TypeError, "argument must be an Alphabet" return obj._as_parameter_ from_param = classmethod(from_param) def size(self): return gtlib.gt_alphabet_size(self.alpha) def num_of_chars(self): return gtlib.gt_alphabet_num_of_chars(self.alpha) def encode(self, plainchar): if not self.valid_input(plainchar): gterror("No valid input character: %c" % plainchar) return gtlib.gt_alphabet_encode(self.alpha, plainchar) def decode(self, encodedchar): return gtlib.gt_alphabet_decode(self.alpha, encodedchar) def decode_seq(self, encoded): encstr = (c_ubyte*len(encoded))(*encoded) str_p = gtlib.gt_alphabet_decode_seq_to_str(self.alpha, encstr, len(encstr)) s = Str(str_p) return str(s) def valid_input(self, plainchar): if gtlib.gt_alphabet_valid_input(self.alpha, plainchar) == 1: return True else: return False def is_dna(self): if gtlib.gt_alphabet_is_dna(self.alpha) == 1: return True else: return False def is_protein(self): if gtlib.gt_alphabet_is_protein(self.alpha) == 1: return True else: return False def register(cls, gtlib): gtlib.gt_alphabet_new_from_sequence.restype = c_void_p gtlib.gt_alphabet_new_from_sequence.argtypes = [StrArray, Error] gtlib.gt_alphabet_new_dna.restype = c_void_p gtlib.gt_alphabet_new_dna.argtypes = [] gtlib.gt_alphabet_new_protein.restype = c_void_p gtlib.gt_alphabet_new_protein.argtypes = [] gtlib.gt_alphabet_new_empty.restype = c_void_p gtlib.gt_alphabet_new_empty.argtypes = [] gtlib.gt_alphabet_new_from_file.restype = c_void_p gtlib.gt_alphabet_new_from_file.argtypes = [c_char_p, Error] gtlib.gt_alphabet_ref.restype = c_void_p gtlib.gt_alphabet_ref.argtypes = [c_void_p] gtlib.gt_alphabet_size.restype = c_uint gtlib.gt_alphabet_size.argtypes = [c_void_p] gtlib.gt_alphabet_num_of_chars.restype = c_uint gtlib.gt_alphabet_num_of_chars.argtypes = [c_void_p] gtlib.gt_alphabet_encode.restype = c_ubyte gtlib.gt_alphabet_encode.argtypes = [c_void_p, c_char] gtlib.gt_alphabet_decode.restype = c_char gtlib.gt_alphabet_decode.argtypes = [c_void_p, c_ubyte] gtlib.gt_alphabet_valid_input.restype = c_int gtlib.gt_alphabet_valid_input.argtypes = [c_void_p, c_char] gtlib.gt_alphabet_is_dna.restype = c_int gtlib.gt_alphabet_is_dna.argtypes = [c_void_p] gtlib.gt_alphabet_is_protein.restype = c_int gtlib.gt_alphabet_is_protein.argtypes = [c_void_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/core/array.py000066400000000000000000000046231211610345200207570ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib class Array: def create(size=None, own=True): if size is None: from ctypes import c_void_p, sizeof size = sizeof(c_void_p) return Array(gtlib.gt_array_new(size), own) create = staticmethod(create) def __init__(self, arr, own=False): self.array = arr self._as_parameter_ = self.array self.own = own def __del__(self): if self.own: try: gtlib.gt_array_delete(self.array) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, Array): raise TypeError, "argument must be an Array" return obj._as_parameter_ from_param = classmethod(from_param) def get(self, i): return gtlib.gt_array_get(self.array, i).contents def size(self): return gtlib.gt_array_size(self.array) def add(self, val): gtlib.gt_array_add_ptr(self.array, val._as_parameter_) def register(cls, gtlib): from ctypes import c_void_p, c_uint, c_ulong, POINTER gtlib.gt_array_new.restype = c_void_p gtlib.gt_array_new.argtypes = [c_uint] gtlib.gt_array_ref.restype = c_void_p gtlib.gt_array_ref.argtypes = [c_void_p] gtlib.gt_array_get.restype = POINTER(c_void_p) gtlib.gt_array_get.argtypes = [c_ulong] gtlib.gt_array_size.restype = c_ulong gtlib.gt_array_add_ptr.argtypes = [c_void_p, c_void_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/core/encseq.py000066400000000000000000000426511211610345200211220ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2010-2011 Sascha Steinbiss # Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.alphabet import Alphabet from gt.core.error import Error, gterror from gt.core.readmode import * from gt.core.str_array import StrArray from gt.core.gtstr import Str import os from ctypes import Structure, c_ulong, c_uint, c_int, c_char_p, c_void_p, \ POINTER, byref, c_uint32, c_uint64, string_at, \ create_string_buffer, c_ubyte, c_char def int2bool(val): if val == 0: return False else: return True class Seqinfo(Structure): _fields_ = [("startpos", c_ulong), ("length", c_ulong)] class EncseqEncoder: def __init__(self): self.ee = gtlib.gt_encseq_encoder_new() self._as_parameter_ = self.ee def __del__(self): try: gtlib.gt_encseq_encoder_delete(self.ee) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, EncseqEncoder): raise TypeError, "argument must be an EncseqEncoder object" return obj._as_parameter_ from_param = classmethod(from_param) def set_representation_type(self, sat): gtlib.gt_encseq_encoder_set_access_type(self.ee, Str(str(sat.encode("utf-8")))) def set_symbolmap_file(self, fn): gtlib.gt_encseq_encoder_set_symbolmap_file(self.ee, Str(str(fn.encode("utf-8")))) def enable_description_support(self): gtlib.gt_encseq_encoder_enable_description_support(self.ee) def disable_description_support(self): gtlib.gt_encseq_encoder_disable_description_support(self.ee) def enable_multiseq_support(self): gtlib.gt_encseq_encoder_enable_multiseq_support(self.ee) def disable_multiseq_support(self): gtlib.gt_encseq_encoder_disable_multiseq_support(self.ee) def create_des_tab(self): gtlib.gt_encseq_encoder_create_des_tab(self.ee) def do_not_create_des_tab(self): gtlib.gt_encseq_encoder_do_not_create_des_tab(self.ee) def create_ssp_tab(self): gtlib.gt_encseq_encoder_create_ssp_tab(self.ee) def do_not_create_ssp_tab(self): gtlib.gt_encseq_encoder_do_not_create_ssp_tab(self.ee) def create_sds_tab(self): gtlib.gt_encseq_encoder_create_sds_tab(self.ee) def do_not_create_sds_tab(self): gtlib.gt_encseq_encoder_do_not_create_sds_tab(self.ee) def set_input_protein(self): gtlib.gt_encseq_encoder_set_input_protein(self.ee) def set_input_dna(self): gtlib.gt_encseq_encoder_set_input_dna(self.ee) def encode(self, seqfiles, indexname): if not isinstance(seqfiles, list): raise TypeError, "argument must be a list of strings" if len(seqfiles) == 0: raise Error, "list of input sequence files must be non-empty" sa = StrArray() for f in seqfiles: if not os.path.exists(str(f)): raise IOError, ("file not found: %s" % str(f)) sa.add(str(f)) err = Error() esptr = gtlib.gt_encseq_encoder_encode(self.ee, sa, str(indexname), err) if esptr != 0: gterror(err) def register(cls, gtlib): gtlib.gt_encseq_encoder_encode.argtypes = [c_void_p, StrArray, \ c_char_p, Error] register = classmethod(register) class EncseqLoader: def __init__(self): self.el = gtlib.gt_encseq_loader_new() self._as_parameter_ = self.el self.destab = True self.ssptab = True self.sdstab = True def __del__(self): try: gtlib.gt_encseq_loader_delete(self.el) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, EncseqLoader): raise TypeError, "argument must be an EncseqLoader object" return obj._as_parameter_ from_param = classmethod(from_param) def require_description_support(self): self.destab = True self.sdstab = True gtlib.gt_encseq_loader_require_description_support(self.el) def drop_description_support(self): self.destab = False self.sdstab = False gtlib.gt_encseq_loader_drop_description_support(self.el) def require_multiseq_support(self): self.ssptab = True gtlib.gt_encseq_loader_require_multiseq_support(self.el) def drop_multiseq_support(self): self.ssptab = False gtlib.gt_encseq_loader_drop_multiseq_support(self.el) def require_des_tab(self): self.destab = True gtlib.gt_encseq_loader_require_des_tab(self.el) def do_not_require_des_tab(self): self.destab = False gtlib.gt_encseq_loader_do_not_require_des_tab(self.el) def require_ssp_tab(self): self.ssptab = True gtlib.gt_encseq_loader_require_ssp_tab(self.el) def do_not_require_ssp_tab(self): self.ssptab = False gtlib.gt_encseq_encoder_do_not_require_ssp_tab(self.el) def require_sds_tab(self): self.sdstab = True gtlib.gt_encseq_loader_require_sds_tab(self.el) def do_not_require_sds_tab(self): self.sdstab = False gtlib.gt_encseq_loader_do_not_require_sds_tab(self.el) def load(self, indexname): if not os.path.exists(indexname+".esq"): raise IOError, ("file not found: %s" % indexname+".esq") if self.destab and not os.path.exists(indexname+".des"): raise IOError, ("file not found: %s" % indexname+".des") # not required in every case (equallength seqs) #if self.ssptab and not os.path.exists(indexname+".ssp"): # raise IOError, ("file not found: %s" % indexname+".ssp") if self.sdstab and not os.path.exists(indexname+".sds"): raise IOError, ("file not found: %s" % indexname+".sds") err = Error() esptr = gtlib.gt_encseq_loader_load(self.el, str(indexname), err) if not esptr: gterror(err) return Encseq(esptr, True) class EncseqBuilder: def __init__(self, a): self.eb = gtlib.gt_encseq_builder_new(a) self._as_parameter_ = self.eb def __del__(self): try: gtlib.gt_encseq_builder_delete(self.eb) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, EncseqBuilder): raise TypeError, "argument must be an EncseqBuilder object" return obj._as_parameter_ from_param = classmethod(from_param) def enable_description_support(self): gtlib.gt_encseq_builder_enable_description_support(self.eb) def disable_description_support(self): gtlib.gt_encseq_builder_disable_description_support(self.eb) def enable_multiseq_support(self): gtlib.gt_encseq_builder_enable_multiseq_support(self.eb) def disable_multiseq_support(self): gtlib.gt_encseq_builder_disable_multiseq_support(self.eb) def create_des_tab(self): gtlib.gt_encseq_builder_create_des_tab(self.eb) def do_not_create_des_tab(self): gtlib.gt_encseq_builder_do_not_create_des_tab(self.eb) def create_ssp_tab(self): gtlib.gt_encseq_builder_create_ssp_tab(self.eb) def do_not_create_ssp_tab(self): gtlib.gt_encseq_builder_do_not_create_ssp_tab(self.eb) def create_sds_tab(self): gtlib.gt_encseq_builder_create_sds_tab(self.eb) def do_not_create_sds_tab(self): gtlib.gt_encseq_builder_do_not_create_sds_tab(self.eb) def enable_range_iterator(self): gtlib.gt_encseq_builder_enable_range_iterator(self.eb) def disable_range_iterator(self): gtlib.gt_encseq_builder_disable_range_iterator(self.eb) def add_string(self, string, desc = ''): string = str(string) gtlib.gt_encseq_builder_add_cstr(self.eb, string, len(string), desc) def build(self): err = Error() esptr = gtlib.gt_encseq_builder_build(self.eb, err) if not esptr: gterror(err) return Encseq(esptr, True) def register(cls, gtlib): gtlib.gt_encseq_builder_new.argtypes = [Alphabet] gtlib.gt_encseq_builder_add_cstr.argtypes = [c_void_p, c_char_p, \ c_ulong, c_char_p] register = classmethod(register) class EncseqReader: def __init__(self, ptr, own=False): self.er = ptr self._as_parameter_ = self.er self.own = own def __del__(self): if self.own: try: gtlib.gt_encseq_reader_delete(self.er) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, EncseqReader): raise TypeError, "argument must be an EncseqReader" return obj._as_parameter_ def next_encoded_char(self): return gtlib.gt_encseq_reader_next_encoded_char(self.er) def next_decoded_char(self): return gtlib.gt_encseq_reader_next_decoded_char(self.er) from_param = classmethod(from_param) def register(cls, gtlib): gtlib.gt_encseq_reader_next_encoded_char.restype = c_ubyte gtlib.gt_encseq_reader_next_encoded_char.argtypes = [c_void_p] gtlib.gt_encseq_reader_next_decoded_char.restype = c_char gtlib.gt_encseq_reader_next_decoded_char.argtypes = [c_void_p] register = classmethod(register) class Encseq: def __init__(self, ptr, own=False): self.encseq = ptr self._as_parameter_ = self.encseq self.own = own def __del__(self): if self.own: try: gtlib.gt_encseq_delete(self.encseq) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, Encseq): raise TypeError, "argument must be an Encseq" return obj._as_parameter_ from_param = classmethod(from_param) def num_of_sequences(self): return gtlib.gt_encseq_num_of_sequences(self.encseq) def num_of_files(self): return gtlib.gt_encseq_num_of_files(self.encseq) def description(self, num): if not num < self.num_of_sequences(): gterror("invalid sequence number %d" % num) desclen = c_ulong() str_addr = gtlib.gt_encseq_description(self.encseq, byref(desclen), num) return str(string_at(str_addr, desclen.value)) def total_length(self): return gtlib.gt_encseq_total_length(self.encseq) def get_encoded_char(self, pos, readmode=0): if readmode < 0 or readmode > 3: gterror("invalid readmode!") return gtlib.gt_encseq_get_encoded_char(self.encseq, pos, readmode) def get_decoded_char(self, pos, readmode=0): if readmode < 0 or readmode > 3: gterror("invalid readmode!") return gtlib.gt_encseq_get_decoded_char(self.encseq, pos, readmode) def alphabet(self): a = gtlib.gt_encseq_alphabet(self.encseq) if not a: return None return Alphabet(a) def seqstartpos(self, num): if not num < self.num_of_sequences(): gterror("invalid sequence number %d" % num) return gtlib.gt_encseq_seqstartpos(self.encseq, num) def filestartpos(self, num): if not num < self.num_of_files(): gterror("invalid file number %d" % num) return gtlib.gt_encseq_filestartpos(self.encseq, num) def seqlength(self, num): if not num < self.num_of_sequences(): gterror("invalid sequence number %d" % num) return gtlib.gt_encseq_seqlength(self.encseq, num) def effective_filelength(self, num): if not num < self.num_of_files(): gterror("invalid file number %d" % num) return gtlib.gt_encseq_effective_filelength(self.encseq, num) def filenames(self, num): arr = StrArray(gtlib.gt_encseq_filenames(seld.encseq)) return arr.to_list() def create_reader_with_readmode(self, readmode, startpos): if readmode < 0 or readmode > 3: gterror("invalid readmode!") if startpos < 0 or startpos >= self.total_length(): gterror("invalid startposition: %d (allowed: %d-%d)" % (startpos, 0, self.total_length()-1)) er = gtlib.gt_encseq_create_reader_with_readmode(self.encseq, readmode, startpos) return EncseqReader(er, True) def extract_encoded(self, start, end): if start < 0 or end >= self.total_length(): gterror("invalid coordinates: %d-%d (allowed: %d-%d)" % (start, end, 0, self.total_length()-1)) buf = (c_ubyte * (end-start+1))() gtlib.gt_encseq_extract_encoded(self.encseq, buf, start, end) return buf def extract_decoded(self, start, end): if start < 0 or end >= self.total_length(): gterror("invalid coordinates: %d-%d (allowed: %d-%d)" % (start, end, 0, self.total_length()-1)) buf = (c_char * (end-start+1))() gtlib.gt_encseq_extract_decoded(self.encseq, buf, start, end) return string_at(buf, end-start+1) def seqnum(self, pos): if pos < 0 or pos >= self.total_length(): gterror("invalid position: %d (allowed: %d-%d)" % (pos, 0, self.total_length()-1)) return gtlib.gt_encseq_seqnum(self.encseq, pos) def filenum(self, pos): if pos < 0 or pos >= self.total_length(): gterror("invalid position: %d (allowed: %d-%d)" % (pos, 0, self.total_length()-1)) return gtlib.gt_encseq_filenum(self.encseq, pos) def mirror(self): if self.is_mirrored(): gterror("encoded sequence is already mirrored") err = Error() ret = gtlib.gt_encseq_mirror(self.encseq, err) if ret < 0: gterror(err) def unmirror(self): if not self.is_mirrored(): gterror("encoded sequence is not mirrored") err = Error() gtlib.gt_encseq_unmirror(self.encseq) def is_mirrored(self): return int2bool(gtlib.gt_encseq_is_mirrored(self.encseq)) def register(cls, gtlib): gtlib.gt_encseq_num_of_sequences.restype = c_ulong gtlib.gt_encseq_num_of_sequences.argtypes = [c_void_p] gtlib.gt_encseq_num_of_files.restype = c_ulong gtlib.gt_encseq_num_of_files.argtypes = [c_void_p] gtlib.gt_encseq_total_length.restype = c_ulong gtlib.gt_encseq_total_length.argtypes = [c_void_p] gtlib.gt_encseq_description.restype = c_char_p gtlib.gt_encseq_description.argtypes = [c_void_p, POINTER(c_ulong), \ c_ulong] gtlib.gt_encseq_get_encoded_char.restype = c_ubyte gtlib.gt_encseq_get_encoded_char.argtypes = [c_void_p, c_ulong, c_int] gtlib.gt_encseq_get_decoded_char.restype = c_char gtlib.gt_encseq_get_decoded_char.argtypes = [c_void_p, c_ulong, c_int] gtlib.gt_encseq_alphabet.restype = c_void_p gtlib.gt_encseq_alphabet.argtypes = [c_void_p] gtlib.gt_encseq_seqstartpos.restype = c_ulong gtlib.gt_encseq_seqstartpos.argtypes = [c_void_p, c_ulong] gtlib.gt_encseq_seqlength.restype = c_ulong gtlib.gt_encseq_seqlength.argtypes = [c_void_p, c_ulong] gtlib.gt_encseq_effective_filelength.restype = c_uint64 gtlib.gt_encseq_effective_filelength.argtypes = [c_void_p, c_ulong] gtlib.gt_encseq_extract_encoded.argtypes = [c_void_p, \ POINTER(c_ubyte), \ c_ulong, c_ulong] gtlib.gt_encseq_extract_decoded.argtypes = [c_void_p, c_char_p, \ c_ulong, c_ulong] gtlib.gt_encseq_mirror.restype = c_int gtlib.gt_encseq_mirror.argtypes = [c_void_p] gtlib.gt_encseq_unmirror.argtypes = [c_void_p] gtlib.gt_encseq_is_mirrored.restype = c_int gtlib.gt_encseq_is_mirrored.argtypes = [c_void_p] gtlib.gt_encseq_filestartpos.restype = c_ulong gtlib.gt_encseq_filestartpos.argtypes = [c_void_p, c_ulong] gtlib.gt_encseq_seqnum.restype = c_ulong gtlib.gt_encseq_seqnum.argtypes = [c_void_p, c_ulong] gtlib.gt_encseq_filenum.restype = c_ulong gtlib.gt_encseq_filenum.argtypes = [c_void_p, c_ulong] gtlib.gt_encseq_filenames.restype = c_void_p gtlib.gt_encseq_filenames.argtypes = [c_void_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/core/error.py000066400000000000000000000047731211610345200210000ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib class GTError(RuntimeError): pass class Error: def __init__(self, ptr=None): if ptr: self.error = ptr self.own = False else: self.error = gtlib.gt_error_new() self.own = True self._as_parameter_ = self.error def __del__(self): if self.own: try: gtlib.gt_error_delete(self.error) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, Error): raise TypeError, "argument must be an Error" return obj._as_parameter_ from_param = classmethod(from_param) def get(self): return gtlib.gt_error_get(self.error) def set(self, errmsg): return gtlib.gt_error_set_nonvariadic(self.error, str(errmsg)) def is_set(self): return gtlib.gt_error_is_set(self.error) == 1 def unset(self): gtlib.gt_error_unset(self.error) def register(cls, gtlib): from ctypes import c_void_p, c_char_p, c_int gtlib.gt_error_new.restype = c_void_p gtlib.gt_error_get.restype = c_char_p gtlib.gt_error_is_set.restype = c_int gtlib.gt_error_get.argtypes = [c_void_p] gtlib.gt_error_set_nonvariadic.argtypes = [c_void_p, c_char_p] gtlib.gt_error_is_set.argtypes = [c_void_p] gtlib.gt_error_unset.argtypes = [c_void_p] register = classmethod(register) def gterror(err): if isinstance(err, Error): raise GTError, "GenomeTools error: " + err.get() else: raise GTError, "GenomeTools error: " + err genometools-1.5.1/gtpython/gt/core/gtrange.py000066400000000000000000000034141211610345200212650ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008-2010 Sascha Steinbiss # Copyright (c) 2008-2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.error import gterror from ctypes import Structure, c_ulong class Range(Structure): _fields_ = [("w_start", c_ulong), ("w_end", c_ulong)] def __init__(self, start = 0, end = 0): if start > end or start < 0 or end < 0: gterror("range error: start > end!") super(Range, self).__init__(start, end) def _get_start(self): return self.w_start def _set_start(self, val): if val > self.end or not val >= 0: gterror("Invalid range start component: %d" % val) self.w_start = val start = property(_get_start, _set_start) def _get_end(self): return self.w_end def _set_end(self, val): if val < self.start or not val >= 0: gterror("Invalid range end component: %d" % val) self.w_end = val end = property(_get_end, _set_end) genometools-1.5.1/gtpython/gt/core/gtstr.py000066400000000000000000000046251211610345200210060ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib class Str: def __init__(self, s=None): if s == None or isinstance(s, str): self.strg = gtlib.gt_str_new_cstr(s) self.own = True else: self.strg = s self.own = False self._as_parameter_ = self.strg def __del__(self): if self.own: try: gtlib.gt_str_delete(self.strg) except AttributeError: pass def __str__(self): return str(gtlib.gt_str_get(self.strg)) def reset(self): gtlib.gt_str_reset(self.strg) def from_param(cls, obj): if not isinstance(obj, Str): raise TypeError, "argument must be a Str" return obj._as_parameter_ from_param = classmethod(from_param) def append_cstr(self, string): gtlib.gt_str_append_cstr(self.strg, string) def length(self): return gtlib.gt_str_length(self.strg) def get_mem(self): return gtlib.gt_str_get_mem(self.strg) def register(cls, gtlib): from ctypes import c_void_p, c_char_p, c_ulong gtlib.gt_str_new.restype = c_void_p gtlib.gt_str_new_cstr.restype = c_void_p gtlib.gt_str_new_cstr.argtypes = [c_char_p] gtlib.gt_str_append_cstr.argtypes = [c_void_p, c_char_p] gtlib.gt_str_get.restype = c_char_p gtlib.gt_str_get_mem.restype = c_void_p gtlib.gt_str_length.restype = c_ulong gtlib.gt_str_reset.argtypes = [c_void_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/core/readmode.py000066400000000000000000000016731211610345200214230ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # FORWARD = 0 REVERSE = 1 COMPL = 2 REVCOMPL = 3 genometools-1.5.1/gtpython/gt/core/str_array.py000066400000000000000000000044651211610345200216530ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib class StrArray: def __init__(self, arr=None): if not arr: self.strarr = gtlib.gt_str_array_new() else: self.strarr = gtlib.gt_str_array_ref(arr) self._as_parameter_ = self.strarr def __del__(self): try: gtlib.gt_str_array_delete(self.strarr) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, StrArray): raise TypeError, "argument must be a StrArray" return obj._as_parameter_ from_param = classmethod(from_param) def to_list(self): result = [] for i in range(gtlib.gt_str_array_size(self.strarr)): result.append(gtlib.gt_str_array_get(self.strarr, i)) return result def size(self): return gtlib.gt_str_array_size(self.strarr) def get(self, i): return gtlib.gt_str_array_get(self.strarr, i) def add(self, s): gtlib.gt_str_array_add_cstr(self.strarr, str(s)) def register(cls, gtlib): from ctypes import c_void_p, c_char_p, c_ulong gtlib.gt_str_array_add_cstr.argtypes = [c_void_p, c_char_p] gtlib.gt_str_array_get.restype = c_char_p gtlib.gt_str_array_get.argtypes = [c_void_p, c_ulong] gtlib.gt_str_array_size.restype = c_ulong gtlib.gt_str_array_add_cstr.argtypes = [c_void_p, c_char_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/core/warning.py000066400000000000000000000023341211610345200213030ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib def warning_disable(): gtlib.gt_warning_disable() def warning_enable_default(): from ctypes import CFUNCTYPE, c_void_p, c_char_p, addressof defhand = CFUNCTYPE(None, c_void_p, c_char_p, c_char_p).in_dll(gtlib, "gt_warning_default_handler") gtlib.gt_warning_set_handler(addressof(defhand), None) genometools-1.5.1/gtpython/gt/dlload.py000066400000000000000000000023561211610345200201510ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from ctypes import CDLL, CFUNCTYPE, c_char_p, c_void_p import sys # inspired by the ruby bindings, maybe there is a better way if sys.platform == "darwin": soext = ".dylib" else: soext = ".so" gtlib = CDLL("libgenometools" + soext) gtlib.gt_lib_init() gtlib.gt_lib_reg_atexit_func() CollectFunc = CFUNCTYPE(c_void_p, c_char_p, c_char_p, c_void_p) genometools-1.5.1/gtpython/gt/extended/000077500000000000000000000000001211610345200201325ustar00rootroot00000000000000genometools-1.5.1/gtpython/gt/extended/__init__.py000066400000000000000000000036211211610345200222450ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008-2012 Sascha Steinbiss # Copyright (c) 2008-2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from comment_node import * from feature_node import * from custom_stream import * from custom_stream_example import * from custom_visitor import * from genome_node import * from genome_stream import * from gff3_in_stream import * from gff3_out_stream import * from gff3_visitor import * from node_visitor import * from region_node import * from sequence_node import * from add_introns_stream import * from inter_feature_stream import * from dup_feature_stream import * from merge_feature_stream import * from rdb import * from anno_db import * CommentNode.register(gtlib) GenomeNode.register(gtlib) RegionNode.register(gtlib) SequenceNode.register(gtlib) MetaNode.register(gtlib) EOFNode.register(gtlib) CustomStream.register(gtlib) FeatureNode.register(gtlib) FeatureNodeIterator.register(gtlib) GFF3InStream.register(gtlib) AddIntronsStream.register(gtlib) InterFeatureStream.register(gtlib) DuplicateFeatureStream.register(gtlib) MergeFeatureStream.register(gtlib) RDBSqlite.register(gtlib) AnnoDBSchema.register(gtlib) genometools-1.5.1/gtpython/gt/extended/add_introns_stream.py000066400000000000000000000031251211610345200243640ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.genome_stream import GenomeStream class AddIntronsStream(GenomeStream): def __init__(self, genome_stream): self.gs = gtlib.gt_add_introns_stream_new(genome_stream) self._as_parameter_ = self.gs def from_param(cls, obj): if not isinstance(obj, AddIntronsStream): raise TypeError, "argument must be a AddIntronsStream" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): from ctypes import c_void_p gtlib.gt_add_introns_stream_new.restype = c_void_p gtlib.gt_add_introns_stream_new.argtypes = [GenomeStream] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/anno_db.py000066400000000000000000000052051211610345200221060ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.error import Error, gterror from gt.extended.rdb import RDB from gt.annotationsketch.feature_index import FeatureIndexFromPtr class AnnoDBSchema: def __init__(self, *args): raise NotImplementedError, \ 'Please call the constructor of an AnnoDBSchema implementation.' def __del__(self): try: gtlib.gt_anno_db_schema_delete(self.ads) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, AnnoDBSchema): raise TypeError, "argument must be an AnnoDBSchema" return obj._as_parameter_ from_param = classmethod(from_param) def get_feature_index(self, rdb): err = Error() fi = gtlib.gt_anno_db_schema_get_feature_index(self.ads, rdb, err) if fi == None: gterror(err) return FeatureIndexFromPtr(fi) def register(cls, gtlib): from ctypes import c_void_p gtlib.gt_anno_db_schema_get_feature_index.restype = c_void_p gtlib.gt_anno_db_schema_get_feature_index.argtypes = [c_void_p, RDB, Error] register = classmethod(register) class AnnoDBGFFLike(AnnoDBSchema): def __init__(self): err = Error() ads = gtlib.gt_anno_db_gfflike_new() if ads == None: gterror(err) self.ads = ads self._as_parameter_ = self.ads def from_param(cls, obj): if not isinstance(obj, AnnoDBGFFLike): raise TypeError, "argument must be an AnnoDBGFFLike" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): from ctypes import c_void_p gtlib.gt_anno_db_gfflike_new.restype = c_void_p register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/comment_node.py000066400000000000000000000031611211610345200231540ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.genome_node import GenomeNode class CommentNode(GenomeNode): def __init__(self): pass @classmethod def create_new(cls, comment): fn = gtlib.gt_comment_node_new(str(comment)) n = cls.create_from_ptr(fn, True) return n def get_comment(self): return gtlib.gt_comment_node_get_comment(self.gn) def register(cls, gtlib): from ctypes import c_char_p, c_void_p gtlib.gt_comment_node_new.restype = c_void_p gtlib.gt_comment_node_new.argtypes = [c_char_p] gtlib.gt_comment_node_get_comment.restype = c_char_p gtlib.gt_comment_node_get_comment.argtypes = [c_void_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/custom_stream.py000066400000000000000000000050461211610345200233760ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from ctypes import CFUNCTYPE, c_void_p, c_int, POINTER from gt.dlload import gtlib from gt.core.error import Error, gterror, GTError from gt.extended.genome_stream import GenomeStream NextFunc = CFUNCTYPE(c_int, POINTER(c_void_p), c_void_p) FreeFunc = CFUNCTYPE(c_void_p, c_void_p) class CustomStream(GenomeStream): def __init__(self): try: self.next except AttributeError: gterror("%s does not implement mandatory method 'next'!" \ % self.__class__.__name__) def next_w(nodepp, err): error = Error(err) try: nextnode = self.next() if nextnode: nodepp[0] = nextnode.gn else: nodepp[0] = None return 0 except Error, errmsg: error.set(str(errmsg)) return -1 self.next_cb = NextFunc(next_w) def free_w(ptr): self.free() self.free_cb = FreeFunc(free_w) self.gs = gtlib.gt_script_wrapper_stream_new(self.next_cb, self.free_cb) self._as_parameter_ = self.gs def from_param(cls, obj): if not isinstance(obj, CustomStream): raise TypeError, "argument must be a CustomStream" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): from ctypes import c_char_p, c_void_p, c_int, POINTER gtlib.gt_script_wrapper_stream_new.restype = c_void_p gtlib.gt_script_wrapper_stream_new.argtypes = [NextFunc, FreeFunc] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/custom_stream_example.py000066400000000000000000000035461211610345200251140ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core.error import GTError from gt.extended.custom_stream import CustomStream from gt.extended.custom_visitor_example import CustomVisitorExample from gt.extended.feature_node import FeatureNode # This is an example custom stream implementation in Python. # It applies a CustomVisitorExample to each node read from the input stream. # For example, it can be used like this: # # ins = GFF3InStream("somefile.gff3") # cs = CustomStreamExample(ins) # outs = GFF3OutStream(cs) # outs.pull() # # Please raise a GTError if a user error in the stream is to be signaled. # This will ensure that error handling is done properly in the underlying C # code. class CustomStreamExample(CustomStream): def __init__(self, instream): CustomStream.__init__(self) self.instream = instream self.visitor = CustomVisitorExample() def next(self): node = self.instream.next_tree() if node: node.accept(self.visitor) return node genometools-1.5.1/gtpython/gt/extended/custom_visitor.py000066400000000000000000000117301211610345200235770ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009-2012 Sascha Steinbiss # Copyright (c) 2009-2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.node_visitor import NodeVisitor from ctypes import CFUNCTYPE, c_void_p, c_int, POINTER from gt.extended.feature_node import FeatureNode from gt.extended.region_node import RegionNode from gt.extended.sequence_node import SequenceNode from gt.extended.comment_node import CommentNode from gt.extended.eof_node import EOFNode from gt.extended.meta_node import MetaNode from gt.core.error import Error, GTError CommentNodeFunc = CFUNCTYPE(c_int, c_void_p, c_void_p) FeatureNodeFunc = CFUNCTYPE(c_int, c_void_p, c_void_p) RegionNodeFunc = CFUNCTYPE(c_int, c_void_p, c_void_p) SequenceNodeFunc = CFUNCTYPE(c_int, c_void_p, c_void_p) MetaNodeFunc = CFUNCTYPE(c_int, c_void_p, c_void_p) EOFNodeFunc = CFUNCTYPE(c_int, c_void_p, c_void_p) FreeFunc = CFUNCTYPE(c_void_p, c_void_p) class CustomVisitor(NodeVisitor): def __init__(self): def feature_node_w(fn_p, err_p): fn = FeatureNode.create_from_ptr(fn_p) err = Error(err_p) try: try: self.visit_feature_node(fn) except AttributeError: pass return 0 except GTError, errmsg: err.set(str(errmsg)) return -1 self.feature_node_cb = FeatureNodeFunc(feature_node_w) def sequence_node_w(sn_p, err_p): sn = SequenceNode.create_from_ptr(sn_p) err = Error(err_p) try: try: self.visit_sequence_node(sn) except AttributeError: pass return 0 except GTError, errmsg: err.set(str(errmsg)) return -1 self.sequence_node_cb = SequenceNodeFunc(sequence_node_w) def region_node_w(rn_p, err_p): rn = RegionNode.create_from_ptr(rn_p) err = Error(err_p) try: try: self.visit_region_node(rn) except AttributeError: pass return 0 except GTError, errmsg: err.set(str(errmsg)) return -1 self.region_node_cb = RegionNodeFunc(region_node_w) def comment_node_w(cn_p, err_p): cn = CommentNode.create_from_ptr(cn_p) err = Error(err_p) try: try: self.visit_comment_node(cn) except AttributeError: pass return 0 except GTError, errmsg: err.set(str(errmsg)) return -1 self.comment_node_cb = CommentNodeFunc(comment_node_w) def eof_node_w(en_p, err_p): en = EOFNode.create_from_ptr(en_p) err = Error(err_p) try: try: self.visit_eof_node(en) except AttributeError: pass return 0 except GTError, errmsg: err.set(str(errmsg)) return -1 self.eof_node_cb = EOFNodeFunc(eof_node_w) def meta_node_w(mn_p, err_p): mn = EOFNode.create_from_ptr(mn_p) err = Error(err_p) try: try: self.visit_meta_node(mn) except AttributeError: pass return 0 except GTError, errmsg: err.set(str(errmsg)) return -1 self.meta_node_cb = MetaNodeFunc(meta_node_w) self.gv = gtlib.gt_script_wrapper_visitor_new(self.comment_node_cb, \ self.feature_node_cb, \ self.region_node_cb, \ self.sequence_node_cb, \ self.meta_node_cb, \ self.eof_node_cb, \ None) self._as_parameter_ = self.gv genometools-1.5.1/gtpython/gt/extended/custom_visitor_example.py000066400000000000000000000036021211610345200253110ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core.error import GTError from gt.extended.custom_visitor import CustomVisitor from gt.extended.feature_node import FeatureNode # This is an example custom visitor implementation in Python. # It adds a new subfeature to the visited node. # # For each node type, there is an accompanying visit_*_node method which is # called when a node of this type is visited. If a method is missing, then the # corresponding node type is ignored. # # Please raise a GTError if a user error in the visitor is to be signaled. # This will ensure that error handling is done properly in the underlying C # code. class CustomVisitorExample(CustomVisitor): def __init__(self): CustomVisitor.__init__(self) def visit_feature_node(self, fn): new_child = FeatureNode.create_new(fn.get_seqid(), "bar", 100, 1000, "+") fn.add_child(new_child) def visit_region_node(self, rn): pass def visit_comment_node(self, cn): pass def visit_sequence_node(self, sn): pass genometools-1.5.1/gtpython/gt/extended/dup_feature_stream.py000066400000000000000000000031411211610345200243610ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009 Brent Pedersen # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.genome_stream import GenomeStream class DuplicateFeatureStream(GenomeStream): def __init__(self, genome_stream, dest_type, source_type): self.gs = gtlib.gt_dup_feature_stream_new(genome_stream, dest_type, source_type) self._as_parameter_ = self.gs def from_param(cls, obj): if not isinstance(obj, DuplicateFeatureStream): raise TypeError, "argument must be a DuplicateFeatureStream" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): from ctypes import c_void_p, c_char_p gtlib.gt_dup_feature_stream_new.restype = c_void_p gtlib.gt_dup_feature_stream_new.argtypes = [GenomeStream, c_char_p, c_char_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/eof_node.py000066400000000000000000000025421211610345200222650ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.genome_node import GenomeNode from gt.core.gtstr import Str class EOFNode(GenomeNode): def __init__(self): pass @classmethod def create_new(cls): fn = gtlib.gt_eof_node_new() n = cls.create_from_ptr(fn, True) return n def register(cls, gtlib): from ctypes import c_void_p, c_char_p gtlib.gt_eof_node_new.restype = c_void_p register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/feature_index.py000066400000000000000000000132241211610345200233300ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.array import Array from gt.core.error import Error, gterror from gt.core.gtrange import Range from gt.core.str_array import StrArray from gt.extended.feature_node import FeatureNode class FeatureIndex: def __init__(self, *args): raise NotImplementedError, \ 'Please call the constructor of a FeatureIndex implementation.' def __del__(self): try: gtlib.gt_feature_index_delete(self.fi) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, FeatureIndex): raise TypeError, "argument must be a FeatureIndex" return obj._as_parameter_ from_param = classmethod(from_param) def get_features_for_seqid(self, seqid): err = Error() result = [] rval = gtlib.gt_feature_index_get_features_for_seqid(self.fi, seqid, err) if rval: a = Array(rval, True) for i in range(a.size()): fptr = gtlib.gt_genome_node_ref(a.get(i)) result.append(FeatureNode.create_from_ptr(fptr)) return result else: gterror(err) return result def add_gff3file(self, filename): err = Error() rval = gtlib.gt_feature_index_add_gff3file(self.fi, filename, err) if rval != 0: gterror(err) def has_seqid(self, seqid): from ctypes import c_int, byref val = c_int() err = Error() ret = gtlib.gt_feature_index_has_seqid(self.fi, byref(val), seqid, err) if ret != 0: gterror(err) else: return (val.value > 0) def get_first_seqid(self): err = Error() str = gtlib.gt_feature_index_get_first_seqid(self.fi, err) if str == None: gterror(err) return str def get_seqids(self): result = [] err = Error() stra = StrArray(gtlib.gt_feature_index_get_seqids(self.fi, err)) if stra == None: gterror(err) for i in range(stra.size()): result.append(stra.get(i)) return result def get_range_for_seqid(self, seqid): from ctypes import byref err = Error() if self.has_seqid(seqid) == 0: gterror("feature_index does not contain seqid") range = Range() rval = gtlib.gt_feature_index_get_range_for_seqid(self.fi, byref(range), seqid, err) if rval != 0: gterror(err) return range def get_features_for_range(self, start, end, seqid): from ctypes import byref a = Array.create() err = Error() rng = Range(start, end) rval = gtlib.gt_feature_index_get_features_for_range(self.fi, a, seqid, byref(rng), err) if rval != 0: gterror(err) result = [] for i in range(a.size()): fptr = gtlib.gt_genome_node_ref(a.get(i)) result.append(FeatureNode.create_from_ptr(fptr)) return result def register(cls, gtlib): from ctypes import c_char_p, c_void_p, c_int, POINTER gtlib.gt_feature_index_get_features_for_seqid.restype = c_void_p gtlib.gt_feature_index_add_gff3file.argtypes = [c_void_p, c_char_p, Error] gtlib.gt_feature_index_get_first_seqid.restype = c_char_p gtlib.gt_feature_index_get_first_seqid.argtypes = [c_void_p, Error] gtlib.gt_feature_index_get_seqids.restype = c_int gtlib.gt_feature_index_get_first_seqid.argtypes = [c_void_p, Error] gtlib.gt_feature_index_has_seqid.restype = c_int gtlib.gt_feature_index_has_seqid.argtypes = [c_void_p, POINTER(c_int), c_char_p, Error] gtlib.gt_feature_index_get_range_for_seqid.argtypes = [c_void_p, POINTER(Range), c_char_p] gtlib.gt_feature_index_get_features_for_range.argtypes = [c_void_p, Array, c_char_p, POINTER(Range), Error] register = classmethod(register) class FeatureIndexMemory(FeatureIndex): def __init__(self): self.fi = gtlib.gt_feature_index_memory_new() self._as_parameter_ = self.fi def from_param(cls, obj): if not isinstance(obj, FeatureIndexMemory): raise TypeError, "argument must be a FeatureIndexMemory" return obj._as_parameter_ from_param = classmethod(from_param) class FeatureIndexFromPtr(FeatureIndex): def __init__(self, ptr): self.fi = ptr self._as_parameter_ = self.fi def from_param(cls, obj): if not isinstance(obj, FeatureIndexFromPtr): raise TypeError, "argument must be a FeatureIndexFromPtr" return obj._as_parameter_ from_param = classmethod(from_param) genometools-1.5.1/gtpython/gt/extended/feature_node.py000066400000000000000000000213151211610345200231460ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008-2009 Sascha Steinbiss # Copyright (c) 2008-2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib, CollectFunc from gt.core.error import Error, gterror from gt.core.gtstr import Str from gt.core.str_array import StrArray from gt.extended.genome_node import GenomeNode from gt.props import cachedproperty class FeatureNode(GenomeNode): def __init__(self): self.depth_first = True pass @classmethod def create_new(cls, seqid, type, start, end, strand): from gt.extended.strand import strandchars if not strand in strandchars: gterror("Invalid strand '%s' -- must be one of %s" % (strand, strandchars)) s = Str(str(seqid.encode("utf-8"))) fn = gtlib.gt_feature_node_new(s, type, start, end, \ strandchars.index(strand)) n = cls.create_from_ptr(fn, True) n.depth_first = True return n def update_attrs(self): attribs = {} def py_collect_func(tag, val, data): attribs[tag] = val collect_func = CollectFunc(py_collect_func) gtlib.gt_feature_node_foreach_attribute(self.gn, collect_func, None) return attribs def add_child(self, node): ownid = str(self.get_seqid()) newid = str(node.get_seqid()) if (ownid != newid): gterror("cannot add node with sequence region '%s' to node with sequence region '%s'" % (ownid, newid)) else: gtlib.gt_feature_node_add_child(self.gn, node) def from_param(cls, obj): if not isinstance(obj, FeatureNode): raise TypeError, "argument must be a FeatureNode" return obj._as_parameter_ from_param = classmethod(from_param) def get_source(self): return gtlib.gt_feature_node_get_source(self.gn) def set_source(self, source): s = Str(str(source.encode("utf-8"))) gtlib.gt_feature_node_set_source(self.gn, s) source = cachedproperty(get_source, set_source) def get_type(self): return gtlib.gt_feature_node_get_type(self.gn) def set_type(self, type): gtlib.gt_feature_node_set_type(self.gn, type) type = cachedproperty(get_type, set_type) def has_type(self, type): return gtlib.gt_feature_node_has_type(self.gn, type) == 1 def set_strand(self, strand): from gt.extended.strand import strandchars if not strand in strandchars: gterror("Invalid strand '%s' -- must be one of %s" % (strand, strandchars)) gtlib.gt_feature_node_set_strand(self.gn, strandchars.index(strand)) def get_strand(self): from gt.extended.strand import strandchars return strandchars[gtlib.gt_feature_node_get_strand(self.gn)] strand = cachedproperty(get_strand, set_strand) def get_phase(self): return gtlib.gt_feature_node_get_phase(self.gn) def set_phase(self, phase): return gtlib.gt_feature_node_set_phase(self.gn, phase) phase = cachedproperty(get_phase, set_phase) def score_is_defined(self): return gtlib.gt_feature_node_score_is_defined(self.gn) == 1 def get_score(self): if gtlib.gt_feature_node_score_is_defined(self.gn) == 1: return gtlib.gt_feature_node_get_score(self.gn) else: return None def set_score(self, score): gtlib.gt_feature_node_set_score(self.gn, score) def unset_score(self): gtlib.gt_feature_node_unset_score(self.gn) score = cachedproperty(get_score, set_score, unset_score) def get_attribute(self, attrib): return gtlib.gt_feature_node_get_attribute(self.gn, attrib) def add_attribute(self, attrib, value): if attrib == "" or value == "": gterror("attribute keys or values must not be empty!") gtlib.gt_feature_node_add_attribute(self.gn, attrib, value) def each_attribute(self): attribs = self.update_attrs() for (tag, val) in attribs.iteritems(): yield (tag, val) def get_attribs(self): return dict(self.each_attribute()) attribs = property(get_attribs) def register(cls, gtlib): from ctypes import c_char_p, c_float, c_int, c_int, c_void_p, \ c_ulong, c_float gtlib.gt_feature_node_new.restype = c_void_p gtlib.gt_feature_node_new.argtypes = [Str, c_char_p, c_ulong, c_ulong, c_int] gtlib.gt_feature_node_add_child.argtypes = [c_void_p, FeatureNode] gtlib.gt_feature_node_set_source.argtypes = [c_void_p, Str] gtlib.gt_feature_node_get_source.restype = c_char_p gtlib.gt_feature_node_get_source.argtypes = [c_void_p] gtlib.gt_feature_node_get_type.restype = c_char_p gtlib.gt_feature_node_get_type.argtypes = [c_void_p] gtlib.gt_feature_node_has_type.restype = c_int gtlib.gt_feature_node_has_type.argtypes = [c_void_p, c_char_p] gtlib.gt_feature_node_get_score.restype = c_float gtlib.gt_feature_node_get_score.argtypes = [c_void_p] gtlib.gt_feature_node_set_score.argtypes = [c_void_p, c_float] gtlib.gt_feature_node_get_phase.restype = c_int gtlib.gt_feature_node_get_phase.argtypes = [c_void_p] gtlib.gt_feature_node_set_phase.argtypes = [c_void_p, c_int] gtlib.gt_feature_node_score_is_defined.restype = c_int gtlib.gt_feature_node_score_is_defined.argtypes = [c_void_p] gtlib.gt_feature_node_get_strand.restype = c_int gtlib.gt_feature_node_get_strand.argtypes = [c_void_p] gtlib.gt_feature_node_set_strand.argtypes = [c_void_p, c_int] gtlib.gt_feature_node_unset_score.argtypes = [c_void_p] gtlib.gt_feature_node_add_attribute.argtypes = [c_void_p, c_char_p, c_char_p] gtlib.gt_feature_node_get_attribute.restype = c_char_p gtlib.gt_feature_node_get_attribute.argtypes = [c_void_p, c_char_p] register = classmethod(register) def traverse(self, it): f = it.next() while f is not None: yield f f = it.next() def __iter__(self): if self.depth_first: it = FeatureNodeIteratorDepthFirst(self) else: it = FeatureNodeIteratorDirect(self) return self.traverse(it) def __call__(self, method=None): if str(method).lower() == 'direct': it = FeatureNodeIteratorDirect(self) else: it = FeatureNodeIteratorDepthFirst(self) return self.traverse(it) def traverse_dfs(self): it = FeatureNodeIteratorDepthFirst(self) return self.traverse(it) def traverse_direct(self): it = FeatureNodeIteratorDirect(self) return self.traverse(it) class FeatureNodeIterator(object): def next(self): ret = gtlib.gt_feature_node_iterator_next(self.i) if ret != None: return FeatureNode.create_from_ptr(ret) return ret def __del__(self): try: gtlib.gt_feature_node_iterator_delete(self.i) except AttributeError: pass def register(cls, gtlib): from ctypes import c_void_p gtlib.gt_feature_node_iterator_new.restype = c_void_p gtlib.gt_feature_node_iterator_new.argtypes = [FeatureNode] gtlib.gt_feature_node_iterator_new_direct.restype = c_void_p gtlib.gt_feature_node_iterator_new_direct.argtypes = [FeatureNode] gtlib.gt_feature_node_iterator_next.restype = c_void_p register = classmethod(register) class FeatureNodeIteratorDepthFirst(FeatureNodeIterator): """ includes the node itself """ def __init__(self, node): self.i = gtlib.gt_feature_node_iterator_new(node) self._as_parameter_ = self.i class FeatureNodeIteratorDirect(FeatureNodeIterator): def __init__(self, node): self.i = gtlib.gt_feature_node_iterator_new_direct(node) self._as_parameter_ = self.i genometools-1.5.1/gtpython/gt/extended/feature_stream.py000066400000000000000000000032431211610345200235140ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.annotationsketch.feature_index import FeatureIndex from gt.extended.genome_stream import GenomeStream class FeatureStream(GenomeStream): def __init__(self, genome_stream, feature_index): self.gs = gtlib.gt_feature_stream_new(genome_stream, feature_index) self._as_parameter_ = self.gs def from_param(cls, obj): if not isinstance(obj, FeatureStream): raise TypeError, "argument must be a FeatureStream" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): gtlib.gt_feature_stream_new.restype = c_void_p gtlib.gt_feature_stream_new.argtypes = [GenomeStream, FeatureIndex] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/genome_node.py000066400000000000000000000107031211610345200227640ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008-2009 Sascha Steinbiss # Copyright (c) 2008-2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.error import Error, gterror from gt.extended.node_visitor import NodeVisitor from gt.core.gtstr import Str from gt.props import cachedproperty class GenomeNode(object): def __init__(self): pass @classmethod def create_from_ptr(cls, node_ptr, newref=False): if node_ptr == 0 or node_ptr == None: gterror("GenomeNode pointer cannot be NULL (was: " + str(node_ptr) + ")") n = cls() if newref: n.own = True n.gn = gtlib.gt_genome_node_ref(node_ptr) else: n.own = False n.gn = node_ptr n._as_parameter_ = n.gn return n def __repr__(self): c = self.__class__.__name__ return "%s(start=%i, end=%i, seqid=\"%s\")" % (c, self.start, self.end, self.seqid) def __del__(self): if self.own: try: gtlib.gt_genome_node_delete(self.gn) except AttributeError: pass def __eq__(self, node): try: return self.gn == node.gn except AttributeError: return False def from_param(cls, obj): if not isinstance(obj, GenomeNode): raise TypeError, "argument must be a GenomeNode" return obj._as_parameter_ from_param = classmethod(from_param) def get_range(self): return (gtlib.gt_genome_node_get_start(self.gn), gtlib.gt_genome_node_get_end(self.gn)) range = property(get_range) def get_seqid(self): strptr = gtlib.gt_genome_node_get_seqid(self.gn) if strptr: return str(Str(strptr)) else: return None seqid = cachedproperty(get_seqid) def get_start(self): if not self.__class__.__name__ == "EOFNode": return gtlib.gt_genome_node_get_start(self.gn) else: return None start = cachedproperty(get_start) def get_end(self): if not self.__class__.__name__ == "EOFNode": return gtlib.gt_genome_node_get_end(self.gn) else: return None end = cachedproperty(get_end) def get_filename(self): return gtlib.gt_genome_node_get_filename(self.gn) filename = property(get_filename) def get_line_number(self): return gtlib.gt_genome_node_get_line_number(self.gn) line_number = property(get_line_number) def accept(self, visitor): err = Error() rval = gtlib.gt_genome_node_accept(self.gn, visitor, err) if rval != 0: gterror(err) def register(cls, gtlib): from ctypes import c_char_p, c_ulong, c_int, c_void_p, c_uint gtlib.gt_genome_node_get_filename.restype = c_char_p gtlib.gt_genome_node_get_filename.argtypes = [c_void_p] gtlib.gt_genome_node_get_start.restype = c_ulong gtlib.gt_genome_node_get_start.argtypes = [c_void_p] gtlib.gt_genome_node_get_end.restype = c_ulong gtlib.gt_genome_node_get_end.argtypes = [c_void_p] gtlib.gt_genome_node_get_seqid.argtypes = [c_void_p] gtlib.gt_genome_node_get_seqid.restype = c_void_p gtlib.gt_genome_node_get_filename.argtypes = [c_void_p] gtlib.gt_genome_node_get_filename.restype = c_char_p gtlib.gt_genome_node_get_line_number.argtypes = [c_void_p] gtlib.gt_genome_node_get_line_number.restype = c_uint gtlib.gt_genome_node_accept.restype = c_int gtlib.gt_genome_node_accept.argtypes = [c_void_p, NodeVisitor, Error] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/genome_stream.py000066400000000000000000000040361211610345200233340ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.error import Error, gterror from gt.extended.genome_node import GenomeNode from ctypes import byref, c_void_p class GenomeStream: def __init__(self, *args): raise NotImplementedError, \ 'Please call the constructor of a GenomeStream implementation.' def __del__(self): try: gtlib.gt_node_stream_delete(self.gs) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, GenomeStream): raise TypeError, "argument must be a GenomeStream" return obj._as_parameter_ from_param = classmethod(from_param) def next_tree(self): err = Error() genome_node = c_void_p() rval = gtlib.gt_node_stream_next(self.gs, byref(genome_node), err) if rval != 0: gterror(err) if genome_node.value == None: return None else: return GenomeNode.create_from_ptr(genome_node.value) def pull(self): err = Error() rval = gtlib.gt_node_stream_pull(self.gs, err) if rval != 0: gterror(err) genometools-1.5.1/gtpython/gt/extended/gff3_in_stream.py000066400000000000000000000041161211610345200233740ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.error import gterror from gt.core.str_array import StrArray from gt.extended.genome_stream import GenomeStream class GFF3InStream(GenomeStream): def __init__(self, filename): try: p = open(filename) tmp = p.readline() p.close() except: gterror("File " + filename + " not readable!") self.gs = gtlib.gt_gff3_in_stream_new_sorted(filename, 0) self._as_parameter_ = self.gs def from_param(cls, obj): if not isinstance(obj, GFF3InStream): raise TypeError, "argument must be a GFF3InStream" return obj._as_parameter_ from_param = classmethod(from_param) def get_used_types(self): str_array_ptr = gtlib.gt_gff3_in_stream_get_used_types(self.gs) used_types = StrArray(str_array_ptr) return used_types.to_list() def register(cls, gtlib): from ctypes import c_char_p, c_int, c_void_p gtlib.gt_gff3_in_stream_new_sorted.argtypes = [c_char_p, c_int] gtlib.gt_gff3_in_stream_get_used_types.restype = c_void_p gtlib.gt_gff3_in_stream_new_sorted.restype = c_void_p register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/gff3_out_stream.py000066400000000000000000000025511211610345200235760ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.genome_stream import GenomeStream class GFF3OutStream(GenomeStream): def __init__(self, genome_stream): self.gs = gtlib.gt_gff3_out_stream_new(genome_stream, None) self._as_parameter_ = self.gs def from_param(cls, obj): if not isinstance(obj, GFF3OutStream): raise TypeError, "argument must be a GFF3OutStream" return obj._as_parameter_ from_param = classmethod(from_param) genometools-1.5.1/gtpython/gt/extended/gff3_visitor.py000066400000000000000000000021471211610345200231140ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.node_visitor import NodeVisitor class GFF3Visitor(NodeVisitor): def __init__(self): self.gv = gtlib.gt_gff3_visitor_new(None) self._as_parameter_ = self.gv genometools-1.5.1/gtpython/gt/extended/inter_feature_stream.py000066400000000000000000000031341211610345200247140ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009 Brent Pedersen # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.genome_stream import GenomeStream class InterFeatureStream(GenomeStream): def __init__(self, genome_stream, surround_type, new_type): self.gs = gtlib.gt_inter_feature_stream_new(genome_stream, surround_type, new_type) self._as_parameter_ = self.gs def from_param(cls, obj): if not isinstance(obj, InterFeatureStream): raise TypeError, "argument must be a InterFeatureStream" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): from ctypes import c_void_p, c_char_p gtlib.gt_inter_feature_stream_new.restype = c_void_p gtlib.gt_inter_feature_stream_new.argtypes = [GenomeStream, c_char_p, c_char_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/merge_feature_stream.py000066400000000000000000000030151211610345200246700ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009 Brent Pedersen # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.genome_stream import GenomeStream class MergeFeatureStream(GenomeStream): def __init__(self, genome_stream): self.gs = gtlib.gt_merge_feature_stream_new(genome_stream) self._as_parameter_ = self.gs def from_param(cls, obj): if not isinstance(obj, MergeFeatureStream): raise TypeError, "argument must be a MergeFeatureStream" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): from ctypes import c_void_p gtlib.gt_merge_feature_stream_new.restype = c_void_p gtlib.gt_merge_feature_stream_new.argtypes = [GenomeStream] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/meta_node.py000066400000000000000000000035501211610345200224420ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.genome_node import GenomeNode from gt.core.gtstr import Str class MetaNode(GenomeNode): def __init__(self): pass @classmethod def create_new(cls, directive, data): fn = gtlib.gt_meta_node_new(str(directive), str(data)) n = cls.create_from_ptr(fn, True) return n def get_directive(self): return str(gtlib.gt_meta_node_get_directive(self.gn)) def get_data(self): return str(gtlib.gt_meta_node_get_data(self.gn)) def register(cls, gtlib): from ctypes import c_void_p, c_char_p gtlib.gt_meta_node_new.restype = c_void_p gtlib.gt_meta_node_new.argtypes = [c_char_p, c_char_p] gtlib.gt_meta_node_get_directive.restype = c_char_p gtlib.gt_meta_node_get_directive.argtypes = [c_void_p] gtlib.gt_meta_node_get_data.restype = c_char_p gtlib.gt_meta_node_get_data.argtypes = [c_void_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/node_visitor.py000066400000000000000000000025471211610345200232200ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib class NodeVisitor(object): def __init__(self): raise NotImplementedError, \ 'Please call the constructor of a NodeVisitor implementation.' def __del__(self): gtlib.gt_node_visitor_delete(self.gv) def from_param(cls, obj): if not isinstance(obj, NodeVisitor): raise TypeError, "argument must be a NodeVisitor" return obj._as_parameter_ from_param = classmethod(from_param) genometools-1.5.1/gtpython/gt/extended/rdb.py000066400000000000000000000041231211610345200212530ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.error import Error, gterror class RDB: def __init__(self, *args): raise NotImplementedError, \ 'Please call the constructor of a RDB implementation.' def __del__(self): try: gtlib.gt_rdb_delete(self.rdb) except AttributeError: pass def from_param(cls, obj): if not isinstance(obj, RDB): raise TypeError, "argument must be a RDB" return obj._as_parameter_ from_param = classmethod(from_param) class RDBSqlite(RDB): def __init__(self, filename): err = Error() rdb = gtlib.gt_rdb_sqlite_new(filename, err) if rdb == None: gterror(err) self.rdb = rdb self._as_parameter_ = self.rdb def from_param(cls, obj): if not isinstance(obj, RDBSqlite): raise TypeError, "argument must be a RDBSqlite" return obj._as_parameter_ from_param = classmethod(from_param) def register(cls, gtlib): from ctypes import c_char_p, c_void_p gtlib.gt_rdb_sqlite_new.restype = c_void_p gtlib.gt_rdb_sqlite_new.argtypes = [c_char_p, c_void_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/region_node.py000066400000000000000000000030561211610345200230000ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.extended.genome_node import GenomeNode from gt.core.gtstr import Str class RegionNode(GenomeNode): def __init__(self): pass @classmethod def create_new(cls, seqid, start, end): if start > end: raise "start > end" seq_str = Str(str(seqid)) fn = gtlib.gt_region_node_new(seq_str, start, end) n = cls.create_from_ptr(fn, True) return n def register(cls, gtlib): from ctypes import c_ulong, c_void_p gtlib.gt_region_node_new.restype = c_void_p gtlib.gt_region_node_new.argtypes = [Str, c_ulong, c_ulong] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/sequence_node.py000066400000000000000000000044361211610345200233300ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.dlload import gtlib from gt.core.gtstr import Str from gt.extended.genome_node import GenomeNode class SequenceNode(GenomeNode): def __init__(self): pass @classmethod def create_new(cls, description, sequence): seq_str = Str(str(sequence.encode("utf-8"))) fn = gtlib.gt_sequence_node_new(description, seq_str) n = cls.create_from_ptr(fn, True) return n def get_description(self): return gtlib.gt_sequence_node_get_description(self.gn) def get_sequence(self): seq = gtlib.gt_sequence_node_get_sequence(self.gn) if seq: return str(seq) else: return "" def get_sequence_length(self): return gtlib.gt_sequence_node_get_sequence_length(self.gn) def register(cls, gtlib): from ctypes import c_char_p, c_void_p, c_ulong gtlib.gt_sequence_node_new.restype = c_void_p gtlib.gt_sequence_node_new.argtypes = [c_char_p, Str] gtlib.gt_sequence_node_get_description.restype = c_char_p gtlib.gt_sequence_node_get_description.argtypes = [c_void_p] gtlib.gt_sequence_node_get_sequence.restype = c_char_p gtlib.gt_sequence_node_get_sequence.argtypes = [c_void_p] gtlib.gt_sequence_node_get_sequence_length.restype = c_ulong gtlib.gt_sequence_node_get_sequence_length.argtypes = [c_void_p] register = classmethod(register) genometools-1.5.1/gtpython/gt/extended/strand.py000066400000000000000000000016451211610345200220050ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # strandchars = ['+', '-', '.'] genometools-1.5.1/gtpython/gt/props.py000066400000000000000000000044411211610345200200520ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- class cachedproperty(object): ''' >>> class C(object): ... def __init__(self, x): ... self._x = x ... def get_x(self): ... print "getting x" ... return self._x ... ... def set_x(self, newx): ... print "setting x with %s" % newx ... self._x = newx ... def del_x(self): ... self._x = "i am deleted" ... ... x = cachedproperty(get_x, set_x, del_x) ... other_x = cachedproperty(get_x, set_x) >>> c = C(5) >>> c.x getting x 5 # cached. >>> c.x 5 >>> c.x, c.y = 6, 7 setting x with 6 # uncached. >>> c.x getting x 6 >>> c.x, c.y (6, 7) >>> c.y = 35 >>> c.x, c.y (6, 35) # ok with multiple instances. >>> d = C(4) >>> d.x getting x 4 >>> c.x 6 >>> c.other_x = 7 setting x with 7 >>> c.get_x() getting x 7 >>> del c.x >>> c.x getting x \'i am deleted\' >>> c.set_x(22) setting x with 22 # but the property cant konw about it... >>> c.x \'i am deleted\' ''' __slots__ = ("fget", "fset", "fdel", "n") def __init__(self, fget=None, fset=None, fdel=None): self.fget = fget self.fset = fset self.fdel = fdel self.n = "__" + fget.__name__ def __get__(self, o, otype=None): if o is None: return None if self.n in o.__dict__: return (o.__dict__)[self.n] result = (o.__dict__)[self.n] = self.fget(o) return result def __set__(self, o, value): if self.fset is None: raise AttributeError, "unsettable %s (with %s)" % (self.n, value) else: if o == 22: print self.n, o, value if self.n in o.__dict__: del (o.__dict__)[self.n] self.fset(o, value) def __delete__(self, o): if self.fdel is None: raise AttributeError, "undeletable %s (with %s)" % (self.n, value) else: if self.n in o.__dict__: del (o.__dict__)[self.n] self.fdel(o) if __name__ == "__main__": import doctest doctest.testmod() genometools-1.5.1/gtpython/setup.cfg000066400000000000000000000000471211610345200175420ustar00rootroot00000000000000[nosetests] with-doctest=1 verbosity=2 genometools-1.5.1/gtpython/setup.py000066400000000000000000000005541211610345200174360ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from distutils.core import setup setup(name='GenomeTools', version='0.1', description= 'Python bindings for GenomeTools', author='Sascha Steinbiss', author_email='steinbiss@zbh.uni-hamburg.de', url= 'http://www.genometools.org ', packages=['gt', 'gt.core', 'gt.annotationsketch', 'gt.extended']) genometools-1.5.1/gtpython/sketch_constructed.py000066400000000000000000000027541211610345200222000ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from gt.core import * from gt.extended import * from gt.annotationsketch import * from gt.annotationsketch.custom_track import CustomTrack from gt.core.gtrange import Range import sys if __name__ == "__main__": if len(sys.argv) != 3: sys.stderr.write("Usage: " + (sys.argv)[0] + " style_file PNG_file\n") sys.exit(1) seqid = "chromosome_21" nodes = [] # construct a gene on the forward strand with two exons gene = FeatureNode.create_new(seqid, "gene", 100, 900, "+") exon = FeatureNode.create_new(seqid, "exon", 100, 200, "+") gene.add_child(exon) intron = FeatureNode.create_new(seqid, "intron", 201, 799, "+") gene.add_child(intron) exon = FeatureNode.create_new(seqid, "exon", 800, 900, "+") gene.add_child(exon) # construct a single-exon gene on the reverse strand # (within the intron of the forward strand gene) reverse_gene = FeatureNode.create_new(seqid, "gene", 400, 600, "-") reverse_exon = FeatureNode.create_new(seqid, "exon", 400, 600, "-") reverse_gene.add_child(reverse_exon) pngfile = (sys.argv)[2] style = Style() style.load_file((sys.argv)[1]) diagram = Diagram.from_array([gene, reverse_gene], Range(1, 1000), style) layout = Layout(diagram, 600, style) height = layout.get_height() canvas = CanvasCairoFile(style, 600, height) layout.sketch(canvas) canvas.to_file(pngfile) genometools-1.5.1/gtpython/sketch_parsed.py000066400000000000000000000021631211610345200211130ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from gt.annotationsketch import * from gt.core.gtrange import Range import sys if __name__ == "__main__": if len(sys.argv) != 4: sys.stderr.write("Usage: " + (sys.argv)[0] + " Style_file PNG_file GFF3_file\n") sys.stderr.write("Create PNG representation of GFF3 annotation file.") sys.exit(1) pngfile = (sys.argv)[2] # load style file style = Style() style.load_file((sys.argv)[1]) # create feature index feature_index = FeatureIndexMemory() # add GFF3 file to index feature_index.add_gff3file((sys.argv)[3]) # create diagram for first sequence ID in feature index seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) diagram = Diagram.from_index(feature_index, seqid, range, style) # create layout layout = Layout(diagram, 600, style) height = layout.get_height() # create canvas canvas = CanvasCairoFile(style, 600, height) # sketch layout on canvas layout.sketch(canvas) # write canvas to file canvas.to_file(pngfile) genometools-1.5.1/gtpython/tests/000077500000000000000000000000001211610345200170625ustar00rootroot00000000000000genometools-1.5.1/gtpython/tests/__init__.py000066400000000000000000000005551211610345200212000ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from test_alphabet import * from test_commentnode import * from test_customvisitor import * from test_encseq import * from test_featurenode import * from test_metanode import * from test_sequencenode import * from test_iterators import * from test_stream import * from test_range import * import unittest unittest.main() genometools-1.5.1/gtpython/tests/test_alphabet.py000066400000000000000000000135101211610345200222530ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * import unittest import tempfile import os import string class AlphabetTest(unittest.TestCase): def setUp(self): self.dnaseqfile = tempfile.NamedTemporaryFile(mode="w", delete=False) self.dnaseqfile.write(">seq1\nagtccagctgtcagctagcgggcccgatgatatttt") self.aaseqfile = tempfile.NamedTemporaryFile(mode="w", delete=False) self.aaseqfile.write(">seq1\nMVHFTAEEKAAVTSLWSKMNVEEAGGEALG") self.dnaal1file = tempfile.NamedTemporaryFile(mode="w", suffix=".al1", \ delete=False) self.dnaal1file.write("aA\ncC\ngG\ntTuU\nnsywrkvbdhmNSYWRKVBDHM\n") self.aaal1file = tempfile.NamedTemporaryFile(mode="w", suffix=".al1", \ delete=False) self.aaal1file.write("L\nV\nI\nF\nK\nR\nE\nD\nA\nG\nS\nT\nN\nQ\nY\nW\nP\nH\nM\nC\nXUBZO*- x\n") self.dnaseqfile.close() self.aaseqfile.close() self.dnaal1file.close() self.aaal1file.close() def tearDown(self): os.unlink(self.dnaseqfile.name) os.unlink(self.aaseqfile.name) os.unlink(self.dnaal1file.name) os.unlink(self.aaal1file.name) def dna_encodedecode(self, a_dna): # test DNA alphabet dnachars = { 0 : ('A', 'a'), 1 : ('C','c'), 2 : ('G','g'), \ 3 : ('T','t'), 254 : ('N','n')} # encoding should yield the correct code independent of case for idx, c in dnachars.items(): self.assertEqual(a_dna.encode(c[0]), idx) self.assertEqual(a_dna.decode(a_dna.encode(c[0])), c[1]) self.assertEqual(a_dna.encode(c[1]), idx) self.assertEqual(a_dna.decode(a_dna.encode(c[1])), c[1]) # invalid input should raise an exception self.assertRaises(GTError, a_dna.encode, 'Z') teststr = "agtccagctgtcagctagcgggcccgatgatatttt" # encode string 'by hand' encodedstr = [a_dna.encode(c) for c in teststr] # ensure that string is ok self.assertEqual(a_dna.decode_seq(encodedstr), teststr) def protein_encodedecode(self, a_protein): # test AA alphabet aas = "LVIFKREDAGSTNQYWPHMC" aachars = {} for idx, c in enumerate(aas): aachars[idx] = (string.upper(c), string.lower(c)) #print aachars wcs = ('X','x','U','u','B','b','Z','z','O','*','-') # encoding should yield the correct code independent of case for idx, c in aachars.items(): self.assertEqual(a_protein.encode(c[0]), idx) self.assertEqual(a_protein.decode(a_protein.encode(c[0])), c[0]) # invalid input should raise an exception self.assertRaises(GTError, a_protein.encode, '&') teststr = "MVHFTAEEKAAVTSLWSKMNVEEAGGEALG" # encode string 'by hand' encodedstr = [a_protein.encode(c) for c in teststr] # ensure that string is ok self.assertEqual(a_protein.decode_seq(encodedstr), teststr) def test_dna_newcreated(self): a_dna = Alphabet.create_dna() self.dna_encodedecode(a_dna) def test_dna_fromsequence(self): a_dna = Alphabet.create_from_sequence([self.dnaseqfile.name]) self.dna_encodedecode(a_dna) def test_dna_fromsequence_fail(self): self.assertRaises(TypeError, Alphabet.create_from_sequence, \ self.dnaseqfile.name) def test_dna_fromal1file(self): indexname = self.dnaal1file.name.rsplit('.',1)[0] a_dna = Alphabet.create_from_file(indexname) self.dna_encodedecode(a_dna) def test_dna_fromal1file_fail(self): self.assertRaises(IOError, Alphabet.create_from_file, "nonexisting") def test_aa_newcreated(self): a_protein = Alphabet.create_protein() self.protein_encodedecode(a_protein) def test_aa_isdna(self): a_protein = Alphabet.create_protein() self.assertTrue(a_protein.is_protein()) self.assertFalse(a_protein.is_dna()) def test_isdna(self): a_protein = Alphabet.create_dna() self.assertFalse(a_protein.is_protein()) self.assertTrue(a_protein.is_dna()) def test_aa_fromsequence(self): a_protein = Alphabet.create_from_sequence([self.aaseqfile.name]) self.protein_encodedecode(a_protein) def test_aa_fromsequence_fail(self): self.assertRaises(TypeError, Alphabet.create_from_sequence, \ self.aaseqfile.name) def test_aa_fromsequence_fail_2(self): self.assertRaises(IOError, Alphabet.create_from_sequence, \ ["nonexisting"]) def test_aa_fromal1file(self): indexname = self.aaal1file.name.rsplit('.',1)[0] a_protein = Alphabet.create_from_file(indexname) self.protein_encodedecode(a_protein) def test_aa_fromal1file_fail(self): self.assertRaises(IOError, Alphabet.create_from_file, "nonexisting") if __name__ == "__main__": unittest.main() genometools-1.5.1/gtpython/tests/test_commentnode.py000066400000000000000000000011301211610345200227760ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- import unittest from gt import CommentNode, Str class CommentNodeTestCase(unittest.TestCase): def setUp(self): self.fn = CommentNode.create_new("testcomment") self.fn2 = CommentNode.create_new(333) def test_repr(self): self.assertEqual(str(self.fn), 'CommentNode(start=0, end=0, seqid="None")') def test_get_comment(self): self.assertEqual(self.fn.get_comment(), 'testcomment') self.assertEqual(self.fn2.get_comment(), '333') if __name__ == "__main__": unittest.main() genometools-1.5.1/gtpython/tests/test_customvisitor.py000066400000000000000000000054621211610345200234340ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- import unittest from gt import FeatureNode, CommentNode, SequenceNode, RegionNode, \ CustomVisitor, MetaNode, EOFNode,FeatureNodeIteratorDepthFirst, \ GTError class TestVisitor(CustomVisitor): def __init__(self): CustomVisitor.__init__(self) self.sn = None self.rn = None self.cn = None self.en = None self.mn = None def visit_feature_node(self, fn): new_child = FeatureNode.create_new(fn.get_seqid(), "bar", 100, 1000, "+") fn.add_child(new_child) def visit_region_node(self, rn): self.rn = rn def visit_comment_node(self, cn): self.cn = cn def visit_sequence_node(self, sn): self.sn = sn def visit_meta_node(self, mn): self.mn = mn def visit_eof_node(self, en): self.en = en class ErrorTestVisitor(CustomVisitor): def __init__(self): CustomVisitor.__init__(self) def visit_feature_node(self, fn): raise GTError class CustomVisitorTestCase(unittest.TestCase): def setUp(self): self.fn = FeatureNode.create_new("foo", "gene", 100, 10000, "+") self.cn = CommentNode.create_new("comment") self.rn = RegionNode.create_new("foo", 100, 2000) self.sn = SequenceNode.create_new("foo", "AGATATAGA") self.en = EOFNode.create_new() self.mn = MetaNode.create_new("foo", "bar") self.tv = TestVisitor() self.etv = ErrorTestVisitor() def test_accept_feature_node(self): self.fn.accept(self.tv) dfi = FeatureNodeIteratorDepthFirst(self.fn) f = dfi.next() nodes = [] while f: nodes.append(f) f = dfi.next() self.assertEqual(nodes[1].get_type(), "bar") self.assertRaises(GTError, self.fn.accept, self.etv) self.cn.accept(self.etv) self.sn.accept(self.etv) self.rn.accept(self.etv) def test_accept_sequence_node(self): self.assertNotEqual(self.tv.sn, self.sn) self.sn.accept(self.tv) self.assertEqual(self.tv.sn, self.sn) def test_accept_region_node(self): self.assertNotEqual(self.tv.rn, self.rn) self.rn.accept(self.tv) self.assertEqual(self.tv.rn, self.rn) def test_accept_comment_node(self): self.assertNotEqual(self.tv.cn, self.cn) self.cn.accept(self.tv) self.assertEqual(self.tv.cn, self.cn) def test_accept_eof_node(self): self.assertNotEqual(self.tv.en, self.en) self.en.accept(self.tv) self.assertEqual(self.tv.en, self.en) def test_accept_meta_node(self): self.assertNotEqual(self.tv.mn, self.mn) self.mn.accept(self.tv) self.assertEqual(self.tv.mn, self.mn) if __name__ == "__main__": unittest.main() genometools-1.5.1/gtpython/tests/test_encseq.py000077500000000000000000000266771211610345200217760ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from gt.core.encseq import * from gt.core.error import GTError from gt.core import readmode import unittest import tempfile import sys, os import string class EncodedsequenceTest(unittest.TestCase): def setUp(self): self.dnaseqfile = tempfile.NamedTemporaryFile(mode="w", delete=False) self.dseq1 = "agtccagctgtcagctagcgggcccgatgatatttt" self.dseq2 = "gtgctgtac" self.dseq3 = "gtacagcac" self.dseq4 = "aaaatatcatcgggcccgctagctgacagctggact" self.dnaseqfile.write(">seq1\n"+self.dseq1+"\n") self.dnaseqfile.write(">seq2\n"+self.dseq2+"\n") self.aaseqfile = tempfile.NamedTemporaryFile(mode="w", delete=False) self.aaseq1 = "MVHFTAEEKAAVTSLWSKMNVEEAGGEALG" self.aaseq2 = "KMNAVE" self.aaseqfile.write(">seq1\n"+self.aaseq1+"\n") self.aaseqfile.write(">seq2\n"+self.aaseq2+"\n") self.dnaseqfile.close() self.aaseqfile.close() self.idxsuffixes = ['esq','des','ssp','sds'] def tearDown(self): os.unlink(self.dnaseqfile.name) os.unlink(self.aaseqfile.name) def create_es(self, indexname): ee = EncseqEncoder() return ee.encode([self.dnaseqfile.name], indexname) def create_es_protein(self, indexname): ee = EncseqEncoder() return ee.encode([self.aaseqfile.name], indexname) def create_mem(self): a = Alphabet.create_dna() eb = EncseqBuilder(a) eb.enable_description_support() eb.enable_multiseq_support() eb.add_string(self.dseq1, 'seq1') eb.add_string(self.dseq2, 'seq2') return eb.build() def create_mem_protein(self): a = Alphabet.create_protein() eb = EncseqBuilder(a) eb.enable_description_support() eb.enable_multiseq_support() eb.add_string(self.aaseq1, 'seq1') eb.add_string(self.aaseq2, 'seq2') return eb.build() def delete_idx(self, indexname): for suf in self.idxsuffixes: os.unlink(indexname+"."+suf) def test_create_new(self): val = self.create_es("foo") for suf in self.idxsuffixes: self.assertTrue(os.path.isfile("foo."+suf)) self.delete_idx("foo") def test_create_mapped(self): self.create_es("foo_mapped") el = EncseqLoader() es = el.load("foo_mapped") self.assertNotEqual(es, None) self.delete_idx("foo_mapped") def test_map_fail(self): el = EncseqLoader() self.assertRaises(IOError, el.load, "foo_fail") def test_dna(self): self.create_es("foo") el = EncseqLoader() es = el.load("foo") self.run_test_descriptions(es) self.run_test_get_encoded_char(es, self.dseq1, self.dseq2, self.dseq3, self.dseq4) self.run_test_num_seqs(es) self.run_test_num_files(es) self.run_test_seq_length(es) self.run_test_seq_startpos(es) self.run_test_seq_substr_encoded(es, self.dseq1, self.dseq2, self.dseq3, self.dseq4) self.run_test_seq_substr_plain(es, self.dseq1, self.dseq2, self.dseq3, self.dseq4) self.run_test_seq_substr_sequential(es, self.dseq1, self.dseq2, self.dseq3, self.dseq4) self.run_test_total_length(es) self.delete_idx("foo") es = self.create_mem() self.run_test_descriptions(es) self.run_test_get_encoded_char(es, self.dseq1, self.dseq2, self.dseq3, self.dseq4) self.run_test_num_seqs(es) self.run_test_num_files_mem(es) self.run_test_seq_length(es) self.run_test_seq_substr_encoded(es, self.dseq1, self.dseq2, self.dseq3, self.dseq4) self.run_test_seq_substr_plain(es, self.dseq1, self.dseq2, self.dseq3, self.dseq4) self.run_test_seq_substr_sequential(es, self.dseq1, self.dseq2, self.dseq3, self.dseq4) self.run_test_total_length(es) def test_protein(self): self.create_es_protein("foo") el = EncseqLoader() es = el.load("foo") self.run_test_descriptions(es) self.run_test_get_encoded_char(es, self.aaseq1, self.aaseq2, None, None) self.run_test_num_seqs(es) self.run_test_num_files(es) self.run_test_seq_startpos_protein(es) self.run_test_seq_length_protein(es) self.run_test_file_length_protein(es) self.run_test_seq_substr_encoded(es, self.aaseq1, self.aaseq2, None, None) self.run_test_seq_substr_plain(es, self.aaseq1, self.aaseq2, None, None) self.run_test_seq_substr_sequential(es, self.aaseq1, self.aaseq2, None, None) self.run_test_total_length_protein(es) self.delete_idx("foo") es = self.create_mem_protein() self.run_test_descriptions(es) self.run_test_get_encoded_char(es, self.aaseq1, self.aaseq2, None, None) self.run_test_num_seqs(es) self.run_test_num_files_mem(es) self.run_test_seq_length_protein(es) self.run_test_seq_substr_encoded(es, self.aaseq1, self.aaseq2, None, None) self.run_test_seq_substr_plain(es, self.aaseq1, self.aaseq2, None, None) self.run_test_seq_substr_sequential(es, self.aaseq1, self.aaseq2, None, None) self.run_test_total_length_protein(es) def run_test_num_seqs(self, es): self.assertEquals(es.num_of_sequences(), 2) if es.alphabet().is_dna(): es.mirror() self.assertEquals(es.num_of_sequences(), 4) es.unmirror() def run_test_num_files(self, es): self.assertEquals(es.num_of_files(), 1) if es.alphabet().is_dna(): es.mirror() self.assertEquals(es.num_of_files(), 1) es.unmirror() def run_test_num_files_mem(self, es): self.assertEquals(es.num_of_files(), 1) if es.alphabet().is_dna(): es.mirror() self.assertEquals(es.num_of_files(), 1) es.unmirror() def run_test_descriptions(self, es): self.assertRaises(GTError, es.description, 2) self.assertEquals(es.description(0), "seq1") self.assertEquals(es.description(1), "seq2") if es.alphabet().is_dna(): es.mirror() self.assertRaises(GTError, es.description, 5) self.assertEquals(es.description(2), "seq2") self.assertEquals(es.description(3), "seq1") es.unmirror() def run_test_total_length(self, es): self.assertEquals(es.total_length(), 46) if es.alphabet().is_dna(): es.mirror() self.assertEquals(es.total_length(), 93) es.unmirror() def run_test_total_length_protein(self, es): self.assertEquals(es.total_length(), 37) def run_test_get_encoded_char(self, es, seq1, seq2, seq3, seq4): a = es.alphabet() for i, c in enumerate(seq1): encchar = es.get_encoded_char(i, readmode.FORWARD) self.assertEquals(a.decode(encchar), c) for i, c in enumerate(seq2[::-1]): encchar = es.get_encoded_char(i, readmode.REVERSE) self.assertEquals(a.decode(encchar), c) if es.alphabet().is_dna(): es.mirror() for i, c in enumerate(seq3): encchar = es.get_encoded_char(47+i, readmode.FORWARD) self.assertEquals(a.decode(encchar), c) for i, c in enumerate(seq4[::-1]): encchar = es.get_encoded_char(i, readmode.REVERSE) self.assertEquals(a.decode(encchar), c) es.unmirror() def run_test_seq_startpos(self, es): self.assertEquals(es.seqstartpos(0), 0) self.assertEquals(es.seqstartpos(1), 37) def run_test_seq_startpos_protein(self, es): self.assertEquals(es.seqstartpos(0), 0) self.assertEquals(es.seqstartpos(1), 31) def run_test_seq_length(self, es): self.assertEquals(es.seqlength(0), 36) self.assertEquals(es.seqlength(1), 9) def run_test_file_length(self, es): self.assertEquals(es.effective_filelength(0), 46) def run_test_seq_length_protein(self, es): self.assertEquals(es.seqlength(0), 30) self.assertEquals(es.seqlength(1), 6) def run_test_file_length_protein(self, es): self.assertEquals(es.effective_filelength(0), 37) def run_test_seq_substr_encoded(self, es, seq1, seq2, seq3, seq4): start = 3 end = 13 res = es.extract_encoded(start, end) a = es.alphabet() for i in range(start, end): self.assertEquals(a.decode(res[i-start]), seq1[i]) start = 0 end = 5 ssp = es.seqstartpos(1) res = es.extract_encoded(ssp+start, ssp+end) for i in range(start, end): self.assertEquals(a.decode(res[i-start]), seq2[i]) if es.alphabet().is_dna(): es.mirror() start = 3 end = 8 ssp = es.seqstartpos(2) res = es.extract_encoded(ssp+start, ssp+end) for i in range(start, end): self.assertEquals(a.decode(res[i-start]), seq3[i]) start = 0 end = 5 ssp = es.seqstartpos(3) res = es.extract_encoded(ssp+start, ssp+end) for i in range(start, end): self.assertEquals(a.decode(res[i-start]), seq4[i]) es.unmirror() def run_test_seq_substr_plain(self, es, seq1, seq2, seq3, seq4): start = 3 end = 13 self.assertEquals(es.extract_decoded(start, end), seq1[start:end+1]) start = 0 end = 5 ssp = es.seqstartpos(1) self.assertEquals(es.extract_decoded(ssp+start, ssp+end), \ seq2[start:end+1]) if es.alphabet().is_dna(): es.mirror() start = 3 end = 8 ssp = es.seqstartpos(2) res = es.extract_encoded(ssp+start, ssp+end) for i in range(start, end): self.assertEquals(es.extract_decoded(ssp+start, ssp+end), \ seq3[start:end+1]) start = 0 end = 5 ssp = es.seqstartpos(3) res = es.extract_encoded(ssp+start, ssp+end) for i in range(start, end): self.assertEquals(es.extract_decoded(ssp+start, ssp+end), \ seq4[start:end+1]) es.unmirror() def run_test_seq_substr_sequential(self, es, seq1, seq2, seq3, seq4): start = 3 end = 13 er = es.create_reader_with_readmode(readmode.FORWARD, start) a = es.alphabet() for i in range(start, end): self.assertEquals(a.decode(er.next_encoded_char()), seq1[i]) start = es.seqstartpos(1) end = start + 5 er = es.create_reader_with_readmode(readmode.FORWARD, start) for i in range(start-start, end-start): self.assertEquals(a.decode(er.next_encoded_char()), seq2[i]) if es.alphabet().is_dna(): es.mirror() start = es.seqstartpos(2) end = start + 5 er = es.create_reader_with_readmode(readmode.FORWARD, start) for i in range(start-start, end-start): self.assertEquals(a.decode(er.next_encoded_char()), seq3[i]) start = es.seqstartpos(3) end = start + 5 er = es.create_reader_with_readmode(readmode.FORWARD, start) for i in range(start-start, end-start): self.assertEquals(a.decode(er.next_encoded_char()), seq4[i]) es.unmirror() if __name__ == "__main__": unittest.main() genometools-1.5.1/gtpython/tests/test_featurenode.py000066400000000000000000000120671211610345200230020ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- import unittest from gt import FeatureNode, FeatureNodeIteratorDepthFirst, GenomeNode class FeatureNodeTestCase(unittest.TestCase): def setUp(self): self.fn = FeatureNode.create_new("test", "type", 100, 500, "+") def test_repr(self): self.assertEqual(str(self.fn), 'FeatureNode(start=100, end=500, seqid="test")') def test_score(self): fn = self.fn self.assert_(not fn.score_is_defined()) fn.set_score(2) self.assert_(fn.score_is_defined()) self.assertEqual(2, fn.get_score()) fn.unset_score() self.assert_(not fn.score_is_defined()) def test_type(self): fn = self.fn self.assert_(not fn.has_type("foo")) self.assert_(fn.has_type("type")) def test_strand(self): fn = self.fn self.assertEqual(fn.get_strand(), "+") def test_seqid(self): fn = self.fn self.assertEqual(fn.seqid, "test") def test_start_end(self): fn = self.fn self.assertEqual(fn.start, 100) self.assertEqual(fn.end, 500) def test_attributes(self): fn = self.fn fn.add_attribute("test", "testval") fn.add_attribute("test2", "testval2") self.assert_("test" in fn.attribs) self.assert_("test2" in fn.attribs) nattrs = 0 for (tag, val) in fn.each_attribute(): self.assertEqual(val, fn.get_attribute(tag)) nattrs += 1 self.assertEqual(nattrs, 2) class TestFeatureNodeChildren(unittest.TestCase): def setUp(self): self.fn = FeatureNode.create_new("test", "type", 100, 500, "+") self.fn2 = FeatureNode.create_new("test", "type2", 200, 300, "+") self.fn.add_child(self.fn2) def test_phase(self): fn = self.fn self.assertEqual(fn.get_phase(), 3) fn.set_phase(0) self.assertEqual(fn.get_phase(), 0) def test_fni(self): fn = self.fn fni = FeatureNodeIteratorDepthFirst(fn) num_features = 0 tfn = fni.next() while tfn: tfn = fni.next() num_features += 1 self.assertEqual(num_features, 2) fn3 = FeatureNode.create_new("test", "type3", 250, 300, "+") fn.add_child(fn3) fni = FeatureNodeIteratorDepthFirst(fn) num_features = 0 tfn = fni.next() while tfn: num_features += 1 tfn = fni.next() self.assertEqual(num_features, 3) def test_iterator(self): fn = self.fn fn3 = FeatureNode.create_new("test", "type3", 250, 300, "+") fn4 = FeatureNode.create_new("test", "type4", 250, 300, "+") fn.add_child(fn3) fn.add_child(fn4) # try object as iterator types = [] for i, f in enumerate(fn): types.append(f.type) self.assertEqual(types, ["type", "type2", "type3", "type4"], types) self.assert_(i == 3, i) # try iterator method types = [] for i, f in enumerate(fn.traverse_dfs()): types.append(f.type) self.assertEqual(types, ["type", "type2", "type3", "type4"], types) self.assert_(i == 3, i) # try callable object as iterator types = [] for i, f in enumerate(fn(method="depth_first")): types.append(f.type) self.assertEqual(types, ["type", "type2", "type3", "type4"], types) self.assert_(i == 3, i) # direct types = [] for i, f in enumerate(fn(method="direct")): types.append(f.type) self.assertEqual(types, ["type2", "type3", "type4"], types) self.assert_(i == 2, i) types = [] for i, f in enumerate(fn.traverse_direct()): types.append(f.type) self.assertEqual(types, ["type2", "type3", "type4"], types) self.assert_(i == 2, i) fn.depth_first = False types = [] for i, f in enumerate(fn): types.append(f.type) self.assertEqual(types, ["type2", "type3", "type4"], types) self.assert_(i == 2, i) class TestFeatureNodeProperties(unittest.TestCase): def setUp(self): self.fn = FeatureNode.create_new("test", "type", 100, 500, "+") def test_strand(self): fn = self.fn self.assertEqual("+", fn.strand) fn.strand = "-" self.assertEqual("-", fn.strand) def test_score(self): fn = self.fn self.assert_(not fn.score_is_defined()) fn.score = 2 self.assert_(fn.score_is_defined()) self.assertEqual(2, fn.get_score()) self.assertEqual(2, fn.score) fn.set_score(4) self.assertEqual(2, fn.score) def test_range(self): fn = self.fn self.assertEqual((100, 500), fn.range) def test_conversion(self): fn = self.fn g = GenomeNode.create_from_ptr(fn.gn, True) self.assertEqual((100, 500), g.range) f2 = FeatureNode.create_from_ptr(g.gn, True) self.assertEqual((100, 500), f2.range) if __name__ == "__main__": unittest.main() genometools-1.5.1/gtpython/tests/test_iterators.py000066400000000000000000000044651211610345200225200ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- import unittest import gt import os op = os.path datadir = op.abspath(op.join(op.dirname(__file__), "..", "..", "testdata")) """ ### 1877523 gth gene 25221 26100 1 + . ID=gene12;Target=8690053 1 521 + 1877523 gth exon 25221 25310 1 + . Parent=gene12 1877523 gth five_prime_cis_splice_site 25311 25312 0.993 + . Parent=gene12 1877523 gth three_prime_cis_splice_site 25508 25509 0.439 + . Parent=gene12 1877523 gth exon 25510 25626 1 + . Parent=gene12 1877523 gth five_prime_cis_splice_site 25627 25628 0.998 + . Parent=gene12 1877523 gth three_prime_cis_splice_site 25711 25712 0.996 + . Parent=gene12 1877523 gth exon 25713 25841 1 + . Parent=gene12 1877523 gth five_prime_cis_splice_site 25842 25843 0.63 + . Parent=gene12 1877523 gth three_prime_cis_splice_site 25914 25915 0.926 + . Parent=gene12 1877523 gth exon 25916 26100 1 + . Parent=gene12 ### """ class FeatureNodeIteratorTest(unittest.TestCase): def setUp(self): fi = gt.FeatureIndexMemory() self.gff_file = op.join(datadir, "U89959_sas.gff3") fi.add_gff3file(self.gff_file) self.fi = fi self.feature = fi.get_features_for_range(25000, 26000, '1877523')[0] def test_depth_first(self): dfi = gt.FeatureNodeIteratorDepthFirst(self.feature) found = dfi.next() self.assertEqual(found.get_attribute("ID"), "gene12") self.assertEqual(found.type, "gene") found = dfi.next() self.assertEqual(found.type, 'exon') found = dfi.next() self.assertEqual(found.type, 'five_prime_cis_splice_site') found = dfi.next() found = dfi.next() self.assertEqual(found.type, 'exon') def test_direct(self): di = gt.FeatureNodeIteratorDirect(self.feature) found = di.next() types = {} while found: types[found.type] = 1 found = di.next() #self.assert_('gene' in types) self.assert_('exon' in types) self.assert_('five_prime_cis_splice_site' in types) self.assert_('three_prime_cis_splice_site' in types) self.assertEqual(found, None) if __name__ == "__main__": unittest.main() genometools-1.5.1/gtpython/tests/test_metanode.py000066400000000000000000000011221211610345200222630ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- import unittest from gt import MetaNode, Str class MetaNodeTestCase(unittest.TestCase): def setUp(self): self.fn = MetaNode.create_new("test", "data") self.fn2 = MetaNode.create_new(333, 444) def test_get_directive(self): self.assertEqual(self.fn.get_directive(), 'test') self.assertEqual(self.fn2.get_directive(), '333') def test_get_data(self): self.assertEqual(self.fn.get_data(), 'data') self.assertEqual(self.fn2.get_data(), '444') if __name__ == "__main__": unittest.main() genometools-1.5.1/gtpython/tests/test_range.py000066400000000000000000000026761211610345200216020ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- import unittest from gt import Range, GTError class RangeTestCase(unittest.TestCase): def test_newrng(self): rng = Range(10, 100) self.assertEqual(rng.start, 10) self.assertEqual(rng.end, 100) rng = Range(10, 10) rng = Range(0, 0) rng = Range() self.assertEqual(rng.start, 0) self.assertEqual(rng.end, 0) def test_invalidrng(self): self.assertRaises(GTError, Range, 100, 10) self.assertRaises(GTError, Range, -10, 100) self.assertRaises(GTError, Range, -10, -100) self.assertRaises(GTError, Range, 10, -100) def test_setgetrng(self): rng = Range(10, 100) # change start/end values rng.start = 20 self.assertEqual(rng.start, 20) self.assertEqual(rng.end, 100) rng.end = 200 self.assertEqual(rng.start, 20) self.assertEqual(rng.end, 200) # change start/end to invalid value def setend(rng, val): rng.end = val def setstart(rng, val): rng.start = val # 20 > 10 self.assertRaises(GTError, setend, rng, 10) self.assertEqual(rng.start, 20) self.assertEqual(rng.end, 200) # 300 > 200 self.assertRaises(GTError, setstart, rng, 300) self.assertEqual(rng.start, 20) self.assertEqual(rng.end, 200) if __name__ == "__main__": unittest.main() genometools-1.5.1/gtpython/tests/test_sequencenode.py000066400000000000000000000014011211610345200231450ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- import unittest from gt import SequenceNode, Str class SequenceNodeTestCase(unittest.TestCase): def setUp(self): self.fn = SequenceNode.create_new("testdesc", "AGATATAGA") def test_repr(self): self.assertEqual(str(self.fn), 'SequenceNode(start=0, end=0, seqid="testdesc")') def test_get_sequence(self): self.assertEqual(self.fn.get_sequence(), 'AGATATAGA') def test_get_sequence_length(self): self.assertEqual(len(self.fn.get_sequence()), \ self.fn.get_sequence_length()) def test_get_description(self): self.assertEqual(self.fn.get_description(), 'testdesc') if __name__ == "__main__": unittest.main() genometools-1.5.1/gtpython/tests/test_stream.py000066400000000000000000000060141211610345200217670ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- import unittest import gt import os op = os.path datadir = op.abspath(op.join(op.dirname(__file__), "..", "..", "testdata")) class StreamTest(unittest.TestCase): def setUp(self): self.gff_file = op.join(datadir, "U89959_sas.gff3") self.ins = gt.GFF3InStream(self.gff_file) def test_pull(self): add_introns_stream = gt.AddIntronsStream(self.ins) fi = gt.FeatureIndexMemory() gt.FeatureStream(add_introns_stream, fi).pull() self.assert_('1877523' in fi.get_seqids()) class TestDuplicateStream(unittest.TestCase): def setUp(self): self.gff_file = op.join(datadir, "addintrons.gff3") self.ins = gt.GFF3InStream(self.gff_file) def test_dup(self): fi = gt.FeatureIndexMemory() gt.FeatureStream(gt.DuplicateFeatureStream(self.ins, "intron", "exon"), fi).pull() f = fi.get_features_for_seqid('ctg123') dfi = gt.FeatureNodeIteratorDepthFirst(f[0]) f = dfi.next() types = set([]) while f: types.update([f.type]) f = dfi.next() self.assert_('intron' in types, types) class TestMergeStream(unittest.TestCase): def setUp(self): self.gff_file = op.join(datadir, "mergefeat.gff3") self.ins = gt.GFF3InStream(self.gff_file) def test_merge(self): fi = gt.FeatureIndexMemory() gt.FeatureStream(gt.MergeFeatureStream(self.ins), fi).pull() f = fi.get_features_for_seqid('seq1') self.assertEqual(len(f), 1) dfi = gt.FeatureNodeIteratorDirect(f[0]) sub = dfi.next() self.assertEqual(None, dfi.next()) self.assertEqual(sub.start, 1000) self.assertEqual(sub.end, 10000) class TestInterFeat(unittest.TestCase): def setUp(self): self.gff_file = op.join(datadir, "addintrons.gff3") self.ins = gt.GFF3InStream(self.gff_file) def test_inter(self): fi = gt.FeatureIndexMemory() gt.FeatureStream(gt.InterFeatureStream(self.ins, "exon", "intron"), fi).pull() f = fi.get_features_for_seqid('ctg123') dfi = gt.FeatureNodeIteratorDepthFirst(f[0]) f = dfi.next() types = set([]) while f: types.update([f.type]) f = dfi.next() self.assert_('intron' in types, types) class TestCustomExample(unittest.TestCase): def setUp(self): self.gff_file = op.join(datadir, "eden.gff3") self.ins = gt.GFF3InStream(self.gff_file) def test_inter(self): fi = gt.FeatureIndexMemory() gt.FeatureStream(gt.CustomStreamExample(self.ins), fi).pull() f = fi.get_features_for_seqid('ctg123') dfi = gt.FeatureNodeIteratorDepthFirst(f[0]) f = dfi.next() types = set([]) while f: types.update([f.type]) f = dfi.next() self.assert_('bar' in types, types) if __name__ == "__main__": unittest.main() genometools-1.5.1/gtruby/000077500000000000000000000000001211610345200153605ustar00rootroot00000000000000genometools-1.5.1/gtruby/README000066400000000000000000000012651211610345200162440ustar00rootroot00000000000000This directory contains the GenomeTools Ruby bindings. To be able to use them, you have to add the following line to your Ruby script: require 'gtruby' and make sure that this directory is added to the ruby load-path variable ($:). Either by calling ruby with the option -I or by adding this directory to the RUBYLIB environment variable. Furthermore, you have to make sure that the GenomeTools shared libraries can be be found by the dlopen(3) system call. For example, by adding the lib/ subdirectory of GenomeTools to your LD_LIBRARY_PATH environment variable. For examples on how to use these bindings, please refer to the scripts in the subdirectory testdata/gtruby/ of GenomeTools. genometools-1.5.1/gtruby/annotationsketch.rb000066400000000000000000000025071211610345200212650ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # begin require 'annotationsketch/block' require 'annotationsketch/canvas' require 'annotationsketch/custom_track' require 'annotationsketch/style' require 'annotationsketch/diagram' require 'annotationsketch/graphics' require 'annotationsketch/image_info' require 'annotationsketch/layout' require 'annotationsketch/rec_map' rescue RuntimeError # fail gracefully when AnnotationSketch symbols are not present raise unless $!.to_s.match(/can't find the symbol/) end genometools-1.5.1/gtruby/annotationsketch/000077500000000000000000000000001211610345200207345ustar00rootroot00000000000000genometools-1.5.1/gtruby/annotationsketch/block.rb000066400000000000000000000051341211610345200223560ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' module GT extend DL::Importable gtdlload "libgenometools" extern "GtBlock* gt_block_ref(GtBlock*)" extern "GtRange* gt_block_get_range_ptr(const GtBlock*)" extern "const char* gt_block_get_type(const GtBlock*)" extern "bool gt_block_has_only_one_fullsize_element(const GtBlock*)" extern "void gt_block_merge(GtBlock*, GtBlock*)" extern "GtBlock* gt_block_clone(GtBlock*)" extern "void gt_block_set_strand(GtBlock*, int)" extern "GtFeatureNode* gt_block_get_top_level_feature(const GtBlock*)" extern "int gt_block_get_strand(const GtBlock*)" extern "unsigned long gt_block_get_size(const GtBlock*)" extern "void gt_block_delete(GtBlock*)" STRANDCHARS = ['+', '-', '.'] class Block def initialize(ptr) @block = GT.gt_block_ref(ptr) @block.free = GT::symbol("gt_block_delete", "0P") end def get_range ptr = GT.gt_block_get_range_ptr(@block) ptr.struct!("LL", :start, :stop) (ptr[:start]..ptr[:stop]) end def has_only_one_fullsize_element GT.gt_block_has_only_one_fullsize_element(@block) end def get_type GT.gt_block_get_type(@block) end def merge(block) GT.gt_block_merge(@block, block) end def clone Block.new(GT.gt_block_clone(@block)) end def set_strand(strand) if !GT::STRANDCHARS.include?(strand) GT::gterror("Invalid strand: '#{strand}'") end GT.gt_block_set_strand(@block, GT::STRANDCHARS.index(strand)) end def get_strand GT::STRANDCHARS[GT.gt_block_get_strand(@block)] end def get_size GT::gt_block_get_size(@block) end def to_ptr @block end end end genometools-1.5.1/gtruby/annotationsketch/canvas.rb000066400000000000000000000136721211610345200225450ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' require 'annotationsketch/graphics' require 'core/str' module GT extend DL::Importable gtdlload "libgenometools" extern "GtCanvas* gt_canvas_cairo_file_new(GtStyle*, int, unsigned int, " + \ "unsigned int, GtImageInfo*, " + \ "GtError*)" extern "int gt_canvas_cairo_file_to_file(GtCanvasCairoFile*, const char*, " + "GtError*)" extern "int gt_canvas_cairo_file_to_stream(GtCanvasCairoFile*, GtStr*)" extern "void gt_canvas_delete(GtCanvas*)" class Canvas def initialize(*) raise(NotImplementedError, "Please call the constructor of a " + "#{self.class} implementation.") end end class CanvasCairoFileBase < Canvas def initialize(*) raise(NotImplementedError, "Please call the constructor of a " + "#{self.class} implementation.") end def to_file(filename) err = GT::Error.new() rval = GT.gt_canvas_cairo_file_to_file(@canvas, filename, err.to_ptr) if rval != 0 then GT.gterror(err) end end def to_stream() str = GT::Str.new(nil) GT.gt_canvas_cairo_file_to_stream(@canvas, str.to_ptr) str.get_mem.to_s(str.length) end def to_ptr @canvas end end class CanvasCairoFile < CanvasCairoFileBase def initialize(style, width, height, ii = nil) err = GT::Error.new if ii.nil? then @canvas = GT.gt_canvas_cairo_file_new(style.style, GT::GRAPHICS_PNG, \ width, height, GT::NULL, \ err.to_ptr) else @canvas = GT.gt_canvas_cairo_file_new(style.style, GT::GRAPHICS_PNG, \ width, height, ii.to_ptr, \ err.to_ptr) end if @canvas == GT::NULL or @canvas == nil then GT.gterror(err) else @canvas.free = GT::symbol("gt_canvas_delete", "0P") end end end class CanvasCairoFilePNG < CanvasCairoFileBase def initialize(style, width, height, ii = nil) err = GT::Error.new if ii.nil? then @canvas = GT.gt_canvas_cairo_file_new(style.style, GT::GRAPHICS_PNG, \ width, height, GT::NULL, \ err.to_ptr) else @canvas = GT.gt_canvas_cairo_file_new(style.style, GT::GRAPHICS_PNG, \ width, height, ii.to_ptr, \ err.to_ptr) end if @canvas == GT::NULL or @canvas == nil then GT.gterror(err) else @canvas.free = GT::symbol("gt_canvas_delete", "0P") end end end class CanvasCairoFilePS < CanvasCairoFileBase def initialize(style, width, height, ii = nil) err = GT::Error.new if ii.nil? then @canvas = GT.gt_canvas_cairo_file_new(style.style, GT::GRAPHICS_PS, \ width, height, GT::NULL, \ err.to_ptr) else @canvas = GT.gt_canvas_cairo_file_new(style.style, GT::GRAPHICS_PS, \ width, height, ii.to_ptr, \ err.to_ptr) end if @canvas == GT::NULL or @canvas == nil then GT.gterror(err) else @canvas.free = GT::symbol("gt_canvas_delete", "0P") end end end class CanvasCairoFileSVG < CanvasCairoFileBase def initialize(style, width, height, ii = nil) err = GT::Error.new if ii.nil? then @canvas = GT.gt_canvas_cairo_file_new(style.style, GT::GRAPHICS_SVG, \ width, height, GT::NULL, \ err.to_ptr) else @canvas = GT.gt_canvas_cairo_file_new(style.style, GT::GRAPHICS_SVG, \ width, height, ii.to_ptr, \ err.to_ptr) end if @canvas == GT::NULL or @canvas == nil then GT.gterror(err) else @canvas.free = GT::symbol("gt_canvas_delete", "0P") end end end class CanvasCairoFilePDF < CanvasCairoFileBase def initialize(style, width, height, ii = nil) err = GT::Error.new if ii.nil? then @canvas = GT.gt_canvas_cairo_file_new(style.style, GT::GRAPHICS_PDF, \ width, height, GT::NULL, \ err.to_ptr) else @canvas = GT.gt_canvas_cairo_file_new(style.style, GT::GRAPHICS_PDF, \ width, height, ii.to_ptr, \ err.to_ptr) end if @canvas == GT::NULL or @canvas == nil then GT.gterror(err) else @canvas.free = GT::symbol("gt_canvas_delete", "0P") end end end end genometools-1.5.1/gtruby/annotationsketch/color.rb000066400000000000000000000017351211610345200224050ustar00rootroot00000000000000# # Copyright (c) 2008 Gordon Gremme # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/struct' module GT Color = struct [ "double red", "double green", "double blue", "double alpha" ] end genometools-1.5.1/gtruby/annotationsketch/custom_track.rb000066400000000000000000000060401211610345200237570ustar00rootroot00000000000000# # Copyright (c) 2008-2009 Sascha Steinbiss # Copyright (c) 2008-2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' module GT extend DL::Importable gtdlload "libgenometools" extern "GtCustomTrack* gt_custom_track_script_wrapper_new(void*, void*, void*, void*)" class CustomTrack def initialize() @get_height = DL.callback("L") do ret = self.get_height() if ret.nil? or !ret.is_a?(Numeric) then GT::gterror("custom track get_height() method must " + \ "return a numeric value!") end ret end @get_title = DL.callback("0PP") do |ptr, str_ptr| ret = self.get_title() s = GT::Str.new(str_ptr) if ret.nil? or !ret.to_s.is_a?(String) then GT::gterror("custom track get_title() method must " + \ "return a string!") end s.append_cstr(ret) end @render = DL.callback("IPLPPP") do |g, ypos, rng, sty, err| rng.struct!("LL", :start, :end) range = (rng[:start]..rng[:end]) ret = self.render(GT::Graphics.new(g), ypos, range, \ GT::Style.new(sty), GT::Error.new(err)) if ret.nil? or !ret.is_a?(Numeric) then GT::gterror("custom track render() method must " + \ "return a numeric value!") end ret end @free = DL.callback("0") do self.free() end @ct = GT.gt_custom_track_script_wrapper_new(@render, \ @get_height, \ @get_title, \ @free) @ct.free = GT::symbol("gt_custom_track_delete", "0P") end def to_ptr @ct end end end genometools-1.5.1/gtruby/annotationsketch/custom_track_example.rb000066400000000000000000000026141211610345200254750ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' require 'annotationsketch/custom_track' module GT extend DL::Importable gtdlload "libgenometools" class CustomTrackExample < CustomTrack def get_height 50 end def get_title "Sample track drawn by a Ruby script" end def render(g, ypos, rng, sty, err) data = [] 120.times do data.push(rand()) end g.draw_curve_data(g.get_xmargins(), ypos, [0,0,1,0.6].pack("DDDD").to_ptr, data, 120, 0, 1, 40) 0 end end end genometools-1.5.1/gtruby/annotationsketch/diagram.rb000066400000000000000000000072201211610345200226660ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'annotationsketch/block' require 'core/array' require 'core/range' module GT extend DL::Importable gtdlload "libgenometools" extern "GtDiagram* gt_diagram_new(GtFeatureIndex*, const char*, " + \ "const GtRange*, GtStyle*, GtError*)" extern "GtDiagram* gt_diagram_new_from_array(GtArray*, " + \ "const GtRange*, GtStyle*)" extern "void gt_diagram_set_track_selector_func(GtDiagram*, void*, void*)" extern "void gt_diagram_add_custom_track(GtDiagram*, GtCustomTrack*)" extern "void gt_diagram_delete(GtDiagram*)" class Diagram attr_reader :diagram def self.from_index(feature_index, seqid, range, style) err = GT::Error.new() if range.start > range.end GT.gterror("range.start > range.end") end if feature_index.nil? then GT.gterror("feature index must not be nil!") end if seqid.nil? then GT.gterror("seqid must not be nil!") end if !style.is_a?(GT::Style) then GT.gterror("'style' parameter must be a Style object!") end diagram = GT.gt_diagram_new(feature_index, seqid, range.to_ptr, style, err) if diagram.nil? then GT::gterror(err) end return GT::Diagram.new(diagram) end def self.from_array(array, range, style) if range.start > range.end GT.gterror("range.start > range.end") end gtarr = GT::Array.create(DL.sizeof("P"), false) array.each do |i| if !i.is_a?(GT::FeatureNode) then GT::gterror("Diagram array must only contain FeatureNodes!") end gtarr.add(i) end diagram = GT.gt_diagram_new_from_array(gtarr, range.to_ptr, style) return GT::Diagram.new(diagram) end def initialize(ptr) @diagram = ptr @diagram.free = GT::symbol("gt_diagram_delete", "0P") # callback_releaser = Proc.new do # DL.remove_callback(@tsf) unless @tsf.nil # end # ObjectSpace.define_finalizer(self, callback_releaser) end def set_track_selector_func(proc) @tsf = DL.callback('0PPP') do |b_ptr, string_ptr, data_ptr| b = GT::Block.new(b_ptr) string = GT::Str.new(string_ptr) s = proc.call(b, data_ptr) if (s.nil?) then GT::gterror("Track selector callback must return a string!") else string.append_cstr(s) end end GT.gt_diagram_set_track_selector_func(@diagram, @tsf, GT::NULL) end def release_track_selector_func DL.remove_callback(@tsf) end def add_custom_track(ct) GT.gt_diagram_add_custom_track(@diagram, ct) end def to_ptr @diagram end end end genometools-1.5.1/gtruby/annotationsketch/feature_index.rb000066400000000000000000000015761211610345200241140ustar00rootroot00000000000000# # Copyright (c) 2013 Sascha Steinbiss # Copyright (c) 2013 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'extended/feature_index' genometools-1.5.1/gtruby/annotationsketch/feature_stream.rb000066400000000000000000000015771211610345200243010ustar00rootroot00000000000000# # Copyright (c) 2013 Sascha Steinbiss # Copyright (c) 2013 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'extended/feature_stream' genometools-1.5.1/gtruby/annotationsketch/graphics.rb000066400000000000000000000222621211610345200230650ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy.to_f, modify.to_f, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'dl/struct' require 'gthelper' module GT extend DL::Importable gtdlload "libgenometools" extern "void gt_graphics_draw_text_p(GtGraphics*, void*)" extern "void gt_graphics_draw_text_clip_p(GtGraphics*, void*)" extern "void gt_graphics_draw_text_centered_p(GtGraphics*, void*)" extern "void gt_graphics_draw_text_right_p(GtGraphics*, void*)" extern "void gt_graphics_draw_colored_text_p(GtGraphics*, void*)" extern "double gt_graphics_get_text_height(GtGraphics*)" extern "double gt_graphics_get_text_width(GtGraphics*, const char*)" extern "double gt_graphics_get_image_width(GtGraphics*)" extern "double gt_graphics_get_image_height(GtGraphics*)" extern "void gt_graphics_set_margins_p(GtGraphics*, void*)" extern "double gt_graphics_get_xmargins(GtGraphics*)" extern "double gt_graphics_get_ymargins(GtGraphics*)" extern "void gt_graphics_draw_horizontal_line_p(GtGraphics*, void*)" extern "void gt_graphics_draw_vertical_line_p(GtGraphics*, void*)" extern "void gt_graphics_draw_line_p(GtGraphics*, void*)" extern "void gt_graphics_draw_box_p(GtGraphics*, void*)" extern "void gt_graphics_draw_dashes_p(GtGraphics*, void*)" extern "void gt_graphics_draw_caret_p(GtGraphics*, void*)" extern "void gt_graphics_draw_rectangle_p(GtGraphics*, void*)" extern "void gt_graphics_draw_arrowhead_p(GtGraphics*, void*)" extern "void gt_graphics_draw_curve_data_p(GtGraphics*, void*, double*, unsigned long, unsigned long, unsigned long, unsigned long)" extern "int gt_graphics_save_to_file(const GtGraphics*, const char*, GtError*)" extern "void gt_graphics_save_to_stream(const GtGraphics*, GtStr*)" extern "void gt_graphics_delete(GtGraphics*)" extern "GtGraphics* gt_graphics_cairo_new(int, unsigned int, unsigned int)" GRAPHICS_PDF = 0 GRAPHICS_PNG = 1 GRAPHICS_PS = 2 GRAPHICS_SVG = 3 ARROW_LEFT = 0 ARROW_RIGHT = 1 ARROW_BOTH = 2 ARROW_NONE = 3 class Graphics def initialize(ptr) @g = ptr end def draw_text(x, y, text) ptr = [x.to_f, y.to_f, text].pack("DDp").to_ptr GT.gt_graphics_draw_text_p(@g, ptr) end def draw_text_centered(x, y, text) ptr = [x.to_f, y.to_f, text].pack("DDp").to_ptr GT.gt_graphics_draw_text_centered_p(@g, ptr) end def draw_text_right(x, y, text) ptr = [x.to_f, y.to_f, text].pack("DDp").to_ptr GT.gt_graphics_draw_text_right_p(@g, ptr) end def draw_colored_text(x, y, color, text) color.struct!("DDDD", :r, :g, :b, :a) params = [x.to_f, y.to_f, color[:r], color[:g], color[:b], \ color[:a], text] GT.gt_graphics_draw_colored_text_p(@g, params.pack("DDDDDDp").to_ptr) end def get_image_height GT.gt_graphics_get_image_height(@g) end def get_image_width GT.gt_graphics_get_image_width(@g) end def get_text_height GT.gt_graphics_get_text_height(@g) end def get_text_width(txt) GT.gt_graphics_get_text_width(@g, txt) end def set_margins(xmargs, ymargs) ptr = [xmargs.to_f, ymargs.to_f].pack("DD").to_ptr GT.gt_graphics_set_margins_p(@g, ptr) end def get_xmargins GT.gt_graphics_get_xmargins(@g) end def get_ymargins GT.gt_graphics_get_ymargins(@g) end def draw_line(x, y, xto, yto, color, stroke_width) color.struct!("DDDD", :r, :g, :b, :a) params = [x.to_f, y.to_f, xto.to_f, yto.to_f, color[:r], color[:g], \ color[:b], color[:a], stroke_width.to_f ] GT.gt_graphics_draw_line_p(@g, params.pack("DDDDDDDDD").to_ptr) end def draw_horizontal_line(x, y, color, width, stroke_width) color.struct!("DDDD", :r, :g, :b, :a) params = [x.to_f, y.to_f, color[:r], color[:g], color[:b], color[:a], \ width.to_f, stroke_width.to_f] GT.gt_graphics_draw_horizontal_line_p(@g, params.pack("DDDDDDDD").to_ptr) end def draw_vertical_line(x, y, color, len, stroke_width) color.struct!("DDDD", :r, :g, :b, :a) params = [x.to_f, y.to_f, color[:r], color[:g], color[:b], color[:a], \ len.to_f, stroke_width.to_f] GT.gt_graphics_draw_vertical_line_p(@g, params.pack("DDDDDDDD").to_ptr) end def draw_box(x, y, width, height, fillcolor, astatus, awidth, swidth, \ scolor, dashed) fillcolor.struct!("DDDD", :r, :g, :b, :a) scolor.struct!("DDDD", :r, :g, :b, :a) if dashed then d_int = 1 else d_int = 0 end params = [x.to_f, y.to_f, width.to_f, height.to_f, fillcolor[:r], \ fillcolor[:g], fillcolor[:b], fillcolor[:a], awidth.to_f, \ swidth.to_f, scolor[:r],scolor[:g], scolor[:b], scolor[:a], \ d_int, astatus] GT.gt_graphics_draw_box_p(@g, params.pack("DDDDDDDDDDDDDDii").to_ptr) end def draw_dashes(x, y, width, height, astatus, awidth, swidth, scolor) scolor.struct!("DDDD", :r, :g, :b, :a) params = [x.to_f, y.to_f, width.to_f, height.to_f, awidth.to_f, \ swidth.to_f, scolor[:r],scolor[:g], scolor[:b], scolor[:a], \ astatus] GT.gt_graphics_draw_dashes_p(@g, params.pack("DDDDDDDDDDi").to_ptr) end def draw_caret(x, y, width, height, astatus, awidth, swidth, scolor) scolor.struct!("DDDD", :r, :g, :b, :a) params = [x.to_f, y.to_f, width.to_f, height.to_f, awidth, swidth, \ scolor[:r],scolor[:g], scolor[:b], scolor[:a], astatus] GT.gt_graphics_draw_caret_p(@g, params.pack("DDDDDDDDDDi").to_ptr) end def draw_rectangle(x, y, filled, fcolor, stroked, scolor, swidth, \ width, height) scolor.struct!("DDDD", :r, :g, :b, :a) fcolor.struct!("DDDD", :r, :g, :b, :a) if filled then f_int = 1 else f_int = 0 end if stroked then s_int = 1 else s_int = 0 end params = [x.to_f, y.to_f, fcolor[:r], fcolor[:g], fcolor[:b], fcolor[:a],\ scolor[:r], scolor[:g], scolor[:b], scolor[:a], swidth, width, \ height, f_int.to_i, s_int.to_i ] GT.gt_graphics_draw_rectangle_p(@g, params.pack("DDDDDDDDDDDDDii").to_ptr) end def draw_arrowhead(x, y, color, status) color.struct!("DDDD", :r, :g, :b, :a) params = [x.to_f, y.to_f, color[:r], color[:g], color[:b], color[:a], \ status] GT.gt_graphics_draw_arrowhead_p(@g, params.pack("DDDDDDi").to_ptr) end def draw_curve_data(x, y, color, data, ndata, s, e, height) color.struct!("DDDD", :r, :g, :b, :a) params = [x.to_f, y.to_f, color[:r], color[:g], color[:b], color[:a]] GT.gt_graphics_draw_curve_data_p(@g, params.pack("DDDDDD").to_ptr, \ data.to_ptr, s, e, ndata, height) end def to_file(filename) err = GT::Error.new() if GT.gt_graphics_save_to_file(@g, filename, err) < 0 then GT::gterror(err) end end def to_stream str = GT::Str.new() GT.gt_graphics_save_to_stream(@g, str) str.get_mem.to_s(str.length) end def get_text_height GT.gt_graphics_get_text_height(@g) end def get_text_width(text) GT.gt_graphics_get_text_width(@g, text) end def to_ptr @g end end class GraphicsCairo < Graphics end class GraphicsCairoPDF < GraphicsCairo def initialize(width, height) @g = GT.gt_graphics_cairo_new(GT::GRAPHICS_PDF, width, height) @g.free = GT::symbol("gt_graphics_delete", "0P") end end class GraphicsCairoPNG < GraphicsCairo def initialize(width, height) @g = GT.gt_graphics_cairo_new(GT::GRAPHICS_PNG, width, height) @g.free = GT::symbol("gt_graphics_delete", "0P") end end class GraphicsCairoPS < GraphicsCairo def initialize(width, height) @g = GT.gt_graphics_cairo_new(GT::GRAPHICS_PS, width, height) @g.free = GT::symbol("gt_graphics_delete", "0P") end end class GraphicsCairoSVG < GraphicsCairo def initialize(width, height) @g = GT.gt_graphics_cairo_new(GT::GRAPHICS_SVG, width, height) @g.free = GT::symbol("gt_graphics_delete", "0P") end end end genometools-1.5.1/gtruby/annotationsketch/image_info.rb000066400000000000000000000050431211610345200233600ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'dl/struct' require 'gthelper' require 'extended/feature_node' require 'annotationsketch/rec_map' module GT extend DL::Importable gtdlload "libgenometools" extern "GtImageInfo* gt_image_info_new()" extern "unsigned int gt_image_info_get_height(GtImageInfo*)" extern "unsigned long gt_image_info_num_of_rec_maps(GtImageInfo*)" extern "const GtRecMap* gt_image_info_get_rec_map(GtImageInfo*, " + "unsigned long)" extern "void gt_image_info_delete(GtImageInfo*)" class ImageInfo attr_reader :image_info def initialize() @image_info = GT.gt_image_info_new() @image_info.free = GT::symbol("gt_image_info_delete", "0P") end def get_height() GT.gt_image_info_get_height(@image_info) end def num_of_rec_maps() GT.gt_image_info_num_of_rec_maps(@image_info) end def each_hotspot() if @hotspots.nil? then @hotspots = [] 0.upto(self.num_of_rec_maps()-1) do |i| rm = GT::RecMap.new(GT.gt_image_info_get_rec_map(@image_info, i)) @hotspots.push([rm.get_northwest_x.to_i, \ rm.get_northwest_y.to_i, \ rm.get_southeast_x.to_i, \ rm.get_southeast_y.to_i, \ rm.get_genome_feature]) end @hotspots.sort!{|hs1,hs2| if hs1[2]-hs1[0]+1 == hs2[2]-hs2[0]+1 then hs1[3] <=> hs2[3] else hs1[2]-hs1[0]+1 <=> hs2[2]-hs2[0]+1 end } end @hotspots.each do |hs| yield hs[0],hs[1],hs[2],hs[3],hs[4] end end def to_ptr @image_info end end end genometools-1.5.1/gtruby/annotationsketch/layout.rb000066400000000000000000000053031211610345200225770ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' module GT extend DL::Importable gtdlload "libgenometools" extern "GtLayout* gt_layout_new(GtDiagram*, unsigned int, GtStyle*, " + \ "GtError*)" extern "int gt_layout_get_height(GtLayout*, unsigned long*, " + \ "GtError*)" extern "int gt_layout_sketch(GtLayout*, GtCanvas*, GtError*)" extern "void gt_layout_set_track_ordering_func(GtLayout*, " + \ "void*, void*)" extern "void gt_layout_delete(GtCanvas*)" class Layout UlongParam = GT.struct [ "GtUlong val" ] def initialize(diagram, width, style) err = GT::Error.new() @layout = GT.gt_layout_new(diagram, width, style, err) if @layout.nil? then GT::gterror(err) end @layout.free = GT::symbol("gt_layout_delete", "0P") end def get_height() err = GT::Error.new() height = UlongParam.malloc had_err = GT.gt_layout_get_height(@layout, height, err) if had_err < 0 then GT::gterror(err) end return height.val end def sketch(canvas) err = GT::Error.new() had_err = GT.gt_layout_sketch(@layout, canvas, err.to_ptr) if had_err < 0 or err.is_set? then GT::gterror(err) end end def set_track_ordering_func(proc) @tof = DL.callback('ISSP') do |s1, s2, data_ptr| r = proc.call(s1, s2) if (!r.is_a?(Numeric)) then GT::gterror("Track ordering callback must return a number!") end r.to_i end GT.gt_layout_set_track_ordering_func(@layout, @tof, GT::NULL) end def release_track_ordering_func DL.remove_callback(@tof) end def to_ptr @layout end end end genometools-1.5.1/gtruby/annotationsketch/rec_map.rb000066400000000000000000000036471211610345200227010ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'gthelper' module GT extend DL::Importable typealias "bool", "ibool" extern "double gt_rec_map_get_northwest_x(const GtRecMap*)" extern "double gt_rec_map_get_northwest_y(const GtRecMap*)" extern "double gt_rec_map_get_southeast_x(const GtRecMap*)" extern "double gt_rec_map_get_southeast_y(const GtRecMap*)" extern "const GtFeatureNode* gt_rec_map_get_genome_feature(const GtRecMap*)" extern "bool gt_rec_map_has_omitted_children(const GtRecMap*)" class RecMap def initialize(rm) @rm = rm end def get_northwest_x GT::gt_rec_map_get_northwest_x(@rm) end def get_northwest_y GT::gt_rec_map_get_northwest_y(@rm) end def get_southeast_x GT::gt_rec_map_get_southeast_x(@rm) end def get_southeast_y GT::gt_rec_map_get_southeast_y(@rm) end def get_genome_feature #refcount only this FeatureNode! GT::FeatureNode.new(GT::gt_rec_map_get_genome_feature(@rm), true) end def has_omitted_children GT::gt_rec_map_has_omitted_children(@gn) end end end genometools-1.5.1/gtruby/annotationsketch/style.rb000066400000000000000000000130371211610345200224250ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2008-2010 Sascha Steinbiss # Copyright (c) 2007-2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'gthelper' require 'core/error' require 'annotationsketch/color' module GT extend DL::Importable gtdlload "libgenometools" STYLE_OK = 0 STYLE_NOT_SET = 1 STYLE_ERROR = 2 # looks weird, but apparently the way to pass proper pointers to external # functions DoubleArg = struct [ "double val" ] typealias "bool", "ibool" # same as above BoolArg = struct [ "bool val" ] extern "GtStyle* gt_style_new(GtError*)" extern "int gt_style_load_file(GtStyle*, const char*, GtError*)" extern "int gt_style_load_str(GtStyle*, GtStr*, GtError*)" extern "int gt_style_to_str(const GtStyle*, GtStr*, GtError*)" extern "int gt_style_get_color(GtStyle*, const char*, const char*, GtColor*, " + "GenomeNode*, GtError*)" extern "void gt_style_set_color(GtStyle*, const char*, const char*, GtColor*)" extern "int gt_style_get_str(const GtStyle*, const char*, " + "const char*, GtStr*, GtGenomeNode*, GtError*)" extern "void gt_style_set_str(GtStyle*, const char*, const char*, GtStr*)" extern "int gt_style_get_num(const GtStyle*, const char*, " + "const char*, double*, GtGenomeNode*, GtError*)" extern "void gt_style_set_num_p(GtStyle*, const char*, const char*, double*)" extern "int gt_style_get_bool(const GtStyle*, const char*, " + "const char*, bool*, GtGenomeNode*, GtError*)" extern "void gt_style_set_bool(GtStyle*, const char*, const char*, bool)" extern "void gt_style_unset(GtStyle*, const char*, const char*)" extern "void gt_style_delete(GtStyle*)" class Style attr_reader :style def initialize(s = nil) err = GT::Error.new() if s.nil? then @style = GT.gt_style_new(err.to_ptr) @style.free = GT::symbol("gt_style_delete", "0P") else @style = s end if not @style then GT.gterror(err) end end def load_file(filename) err = GT::Error.new() rval = GT.gt_style_load_file(@style, filename, err.to_ptr) if rval != 0 then GT.gterror(err) end end def load_str(str) err = GT::Error.new() str = GT::Str.new(str) rval = GT.gt_style_load_str(@style, str.to_ptr, err.to_ptr) if rval != 0 then GT.gterror(err) end end def to_str() err = GT::Error.new() str = GT::Str.new(nil) if GT.gt_style_to_str(@style, str.to_ptr, err.to_ptr) == 0 str.to_s else GT.gterror(err) end end def clone sty = GT::Style.new() str = self.to_str() sty.load_str(str) sty end def get_color(section, key, gn = GT::NULL) color = GT::Color.malloc err = GT::Error.new case GT.gt_style_get_color(@style, section, key, color, gn, err.to_ptr) when STYLE_OK then color when STYLE_NOT_SET then nil when STYLE_ERROR then GT.gterror(err) end end def set_color(section, key, color) GT.gt_style_set_color(@style, section, key, color) end def get_cstr(section, key, gn = GT::NULL) str = GT::Str.new(nil) err = GT::Error.new case GT.gt_style_get_str(@style, section, key, str, gn, err.to_ptr) when STYLE_OK then str.to_s when STYLE_NOT_SET then nil when STYLE_ERROR then GT.gterror(err) end end def set_cstr(section, key, value) str = GT::Str.new(value) GT.gt_style_set_str(@style, section, key, str) end def get_num(section, key, gn = GT::NULL) double = DoubleArg.malloc err = GT::Error.new case GT.gt_style_get_num(@style, section, key, double, gn, err.to_ptr) when STYLE_OK then double.val when STYLE_NOT_SET then nil when STYLE_ERROR then GT.gterror(err) end end def set_num(section, key, number) num = number.to_f double = DoubleArg.malloc double.val = num GT.gt_style_set_num_p(@style, section, key, double) end def get_bool(section, key, gn = GT::NULL) bool = BoolArg.malloc err = GT::Error.new case GT.gt_style_get_bool(@style, section, key, bool, gn, err.to_ptr) when STYLE_OK then bool.val when STYLE_NOT_SET then nil when STYLE_ERROR then GT.gterror(err) end end def set_bool(section, key, val) GT.gt_style_set_bool(@style, section, key, val) end def unset(section, key) GT.gt_style_unset(@style, section, key) end def to_ptr @style end end end genometools-1.5.1/gtruby/core.rb000066400000000000000000000020421211610345200166330ustar00rootroot00000000000000# # Copyright (c) 2007 Gordon Gremme # Copyright (c) 2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'core/allocators' require 'core/alphabet' require 'core/array' require 'core/encseq' require 'core/error' require 'core/range' require 'core/readmode' require 'core/str' require 'core/str_array' genometools-1.5.1/gtruby/core/000077500000000000000000000000001211610345200163105ustar00rootroot00000000000000genometools-1.5.1/gtruby/core/allocators.rb000066400000000000000000000017761211610345200210130ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' module GT extend DL::Importable gtdlload "libgenometools" extern "void gt_lib_init()" extern "void gt_lib_reg_atexit_func()" end genometools-1.5.1/gtruby/core/alphabet.rb000066400000000000000000000105551211610345200204230ustar00rootroot00000000000000# # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'core/str' require 'core/str_array' module GT extend DL::Importable gtdlload "libgenometools" typealias "bool", "ibool" typealias "GtUchar", "unsigned char" extern "GtAlphabet* gt_alphabet_new_from_sequence(const GtStrArray*, GtError*)" extern "GtAlphabet* gt_alphabet_new_dna()" extern "GtAlphabet* gt_alphabet_new_protein()" extern "GtAlphabet* gt_alphabet_new_empty()" extern "GtAlphabet* gt_alphabet_new_from_file(const char*, GtError*)" extern "GtAlphabet* gt_alphabet_guess(const char*, unsigned long)" extern "GtAlphabet* gt_alphabet_ref(GtAlphabet*)" extern "void gt_alphabet_delete(GtAlphabet*)" extern "unsigned int gt_alphabet_num_of_chars(const GtAlphabet*)" extern "unsigned int gt_alphabet_size(const GtAlphabet*)" extern "const void* gt_alphabet_characters(const GtAlphabet*)" extern "int gt_alphabet_is_protein(const GtAlphabet*)" extern "int gt_alphabet_is_dna(const GtAlphabet*)" extern "int gt_alphabet_valid_input(const GtAlphabet*, char)" extern "GtUchar gt_alphabet_encode(const GtAlphabet*, char)" extern "char gt_alphabet_decode(const GtAlphabet*, GtUchar)" extern "GtStr* gt_alphabet_decode_seq_to_str(const GtAlphabet*, const GtUchar*, unsigned long)" class Alphabet def self.create_dna return Alphabet.new(GT.gt_alphabet_new_dna()) end def self.create_protein return Alphabet.new(GT.gt_alphabet_new_protein()) end def self.create_from_file(filename) err = Error.new aptr = GT.gt_alphabet_new_from_file(filename.to_str, err.to_ptr) if aptr == GT::NULL GT.gterror(err) else return Alphabet.new(aptr) end end def self.create_from_sequence(files) files = files.to_a if files.length == 0 then GT.gterror("list of input sequence files must be non-empty") end sa = StrArray.new files.each do |f| fn = f.to_s if (!File.exists?(fn)) GT.gterror("file not found: #{fn}") end sa.add(fn) end err = Error.new aptr = GT.gt_alphabet_new_from_sequence(sa, err) if aptr == GT::NULL GT.gterror(err) else return Alphabet.new(aptr) end end def initialize(aptr, own = true) if own then @alpha = aptr else @alpha = GT.gt_alphabet_ref(aptr) end @alpha.free = GT::symbol("gt_alphabet_delete", "0P") end def size GT.gt_alphabet_size(@alpha) end def num_of_chars GT.gt_alphabet_num_of_chars(@alpha) end def valid_input(char) GT.gt_alphabet_valid_input(@alpha, char) != 0 end def is_dna? GT.gt_alphabet_is_dna(@alpha) != 0 end def is_protein? GT.gt_alphabet_is_protein(@alpha) != 0 end def characters ptr = GT.gt_alphabet_characters(@alpha) ptr.to_a('C', self.num_of_chars).collect{|c| c.chr} end def encode(char) if !self.valid_input(char) then GT.gterror("#{char} is not a valid input character!") end return GT.gt_alphabet_encode(@alpha, char) end def decode(char) return GT.gt_alphabet_decode(@alpha, char).chr end def decode_seq(arr) strptr = GT.gt_alphabet_decode_seq_to_str(@alpha, arr.pack('C*'), \ arr.length) Str.new(strptr).to_s end def to_ptr @alpha end end end genometools-1.5.1/gtruby/core/array.rb000066400000000000000000000034371211610345200177620ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' module GT extend DL::Importable gtdlload "libgenometools" typealias "size_t", "unsigned long" extern "GtArray* gt_array_new(size_t)" extern "void* gt_array_get(const GtArray*, unsigned long)" extern "void gt_array_add_ptr(GtArray*, void*)" extern "unsigned long gt_array_size(const GtArray*)" extern "void gt_array_delete(GtArray*)" class Array def self.create(size = nil, own = true) if size.nil? then size = DL::sizeof("P") end return GT::Array.new(GT.gt_array_new(size), own) end def initialize(array_ptr, own = false) @array = array_ptr if own then @array.free = GT::symbol("gt_array_delete", "0P") end end def get(idx) GT.gt_array_get(@array, idx).ptr end def add(val) GT.gt_array_add_ptr(@array, val.to_ptr) end def size GT.gt_array_size(@array) end def to_ptr @array end end end genometools-1.5.1/gtruby/core/encseq.rb000066400000000000000000000501721211610345200201200ustar00rootroot00000000000000# # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'core/alphabet' require 'core/error' require 'core/readmode' require 'core/str' require 'dl/struct' require 'dl' module GT extend DL::Importable gtdlload "libgenometools" extern "GtEncseqEncoder* gt_encseq_encoder_new()" extern "int gt_encseq_encoder_use_representation(GtEncseqEncoder*, GtStr*, GtError*)" extern "int gt_encseq_encoder_use_symbolmap_file(GtEncseqEncoder*, GtStr*, GtError*)" extern "void gt_encseq_encoder_enable_description_support(GtEncseqEncoder*)" extern "void gt_encseq_encoder_disable_description_support(GtEncseqEncoder*)" extern "void gt_encseq_encoder_enable_multiseq_support(GtEncseqEncoder*)" extern "void gt_encseq_encoder_disable_multiseq_support(GtEncseqEncoder*)" extern "void gt_encseq_encoder_create_des_tab(GtEncseqEncoder*)" extern "void gt_encseq_encoder_do_not_create_des_tab(GtEncseqEncoder*)" extern "void gt_encseq_encoder_create_ssp_tab(GtEncseqEncoder*)" extern "void gt_encseq_encoder_do_not_create_ssp_tab(GtEncseqEncoder*)" extern "void gt_encseq_encoder_create_sds_tab(GtEncseqEncoder*)" extern "void gt_encseq_encoder_do_not_create_sds_tab(GtEncseqEncoder*)" extern "void gt_encseq_encoder_set_input_dna(GtEncseqEncoder*)" extern "void gt_encseq_encoder_set_input_protein(GtEncseqEncoder*)" extern "int gt_encseq_encoder_encode(GtEncseqEncoder*, GtStrArray*, const char*, GtError*)" extern "void gt_encseq_encoder_delete(GtEncseqEncoder*)" extern "GtEncseqLoader* gt_encseq_loader_new()" extern "void gt_encseq_loader_require_description_support(GtEncseqLoader*)" extern "void gt_encseq_loader_drop_description_support(GtEncseqLoader*)" extern "void gt_encseq_loader_require_multiseq_support(GtEncseqLoader*)" extern "void gt_encseq_loader_drop_multiseq_support(GtEncseqLoader*)" extern "void gt_encseq_loader_require_des_tab(GtEncseqLoader*)" extern "void gt_encseq_loader_do_not_require_des_tab(GtEncseqLoader*)" extern "void gt_encseq_loader_require_ssp_tab(GtEncseqLoader*)" extern "void gt_encseq_loader_do_not_require_ssp_tab(GtEncseqLoader*)" extern "void gt_encseq_loader_require_sds_tab(GtEncseqLoader*)" extern "void gt_encseq_loader_do_not_require_sds_tab(GtEncseqLoader*)" extern "GtEncseq* gt_encseq_loader_load(GtEncseqLoader*, const char*, GtError*)" extern "void gt_encseq_loader_delete(GtEncseqLoader*)" extern "GtEncseqBuilder* gt_encseq_builder_new(GtAlphabet*)" extern "void gt_encseq_builder_enable_description_support(GtEncseqBuilder*)" extern "void gt_encseq_builder_disable_description_support(GtEncseqBuilder*)" extern "void gt_encseq_builder_enable_multiseq_support(GtEncseqBuilder*)" extern "void gt_encseq_builder_disable_multiseq_support(GtEncseqBuilder*)" extern "void gt_encseq_builder_create_des_tab(GtEncseqBuilder*)" extern "void gt_encseq_builder_do_not_create_des_tab(GtEncseqBuilder*)" extern "void gt_encseq_builder_create_ssp_tab(GtEncseqBuilder*)" extern "void gt_encseq_builder_do_not_create_ssp_tab(GtEncseqBuilder*)" extern "void gt_encseq_builder_create_sds_tab(GtEncseqBuilder*)" extern "void gt_encseq_builder_do_not_create_sds_tab(GtEncseqBuilder*)" extern "void gt_encseq_builder_add_cstr(GtEncseqBuilder*,const char*, unsigned long, const char*)" extern "void gt_encseq_builder_add_encoded(GtEncseqBuilder*, const GtUchar*, unsigned long, const char*)" extern "GtEncseq* gt_encseq_builder_build(GtEncseqBuilder*, GtError*)" extern "void gt_encseq_builder_reset(GtEncseqBuilder*)" extern "void gt_encseq_builder_delete(GtEncseqBuilder*)" typealias "GtUchar", "unsigned char" typealias "GtUlong", "unsigned long" typealias "GtReadmode", "int" extern "void gt_encseq_total_length_p(const GtEncseq*, unsigned long*)" extern "void gt_encseq_num_of_sequences_p(const GtEncseq*, unsigned long*)" extern "void gt_encseq_num_of_files_p(const GtEncseq*, unsigned long*)" extern "GtUchar gt_encseq_get_encoded_char_p(const GtEncseq*, unsigned long*, GtReadmode)" extern "char gt_encseq_get_decoded_char_p(const GtEncseq*, unsigned long*, GtReadmode)" extern "void gt_encseq_extract_encoded_p(const GtEncseq*, GtUchar*, GtRange*)" extern "void gt_encseq_extract_decoded_p(const GtEncseq*, void*, GtRange*)" extern "void gt_encseq_seqlength_p(const GtEncseq*, unsigned long*, unsigned long*)" extern "void gt_encseq_seqnum_p(const GtEncseq*, unsigned long*, unsigned long*)" extern "void gt_encseq_filenum_p(const GtEncseq*, unsigned long*, unsigned long*)" extern "void gt_encseq_seqstartpos_p(const GtEncseq *, unsigned long*, unsigned long*)" extern "void gt_encseq_filestartpos_p(const GtEncseq *, unsigned long*, unsigned long*)" extern "void* gt_encseq_description_p(const GtEncseq*, unsigned long*, unsigned long*)" extern "void gt_encseq_effective_filelength_p(const GtEncseq*, void*, unsigned long*)" extern "GtEncseqReader* gt_encseq_create_reader_with_readmode_p(const GtEncseq*, GtReadmode, unsigned long*)" extern "const GtStrArray* gt_encseq_filenames(const GtEncseq*)" extern "GtAlphabet* gt_encseq_alphabet(const GtEncseq*)" extern "int gt_encseq_mirror(GtEncseq*, GtError*)" extern "void gt_encseq_unmirror(GtEncseq*)" extern "int gt_encseq_is_mirrored(GtEncseq*)" extern "void gt_encseq_delete(GtEncseq*)" extern "GtUchar gt_encseq_reader_next_encoded_char(GtEncseqReader*)" extern "char gt_encseq_reader_next_decoded_char(GtEncseqReader*)" extern "void gt_encseq_reader_delete(GtEncseqReader*)" class EncseqEncoder def initialize(eenc = nil, own = true) if eenc.nil? then @eenc = GT.gt_encseq_encoder_new() else @eenc = eenc end if own then @eenc.free = GT::symbol("gt_encseq_encoder_delete", "0P") end end def use_representation(sat) strsat = Str.new(sat) err = Error.new if (GT.gt_encseq_encoder_use_representation(@eenc, strsat, err) != 0) GT.gterror(err) end end def use_symbolmap_file(smap) strsmap = Str.new(smap) err = Error.new if (GT.gt_encseq_encoder_use_symbolmap_file(@eenc, strsmap, err) != 0) GT.gterror(err) end end def enable_description_support GT.gt_encseq_encoder_enable_description_support(@eenc) end def disable_description_support GT.gt_encseq_encoder_disable_description_support(@eenc) end def enable_multiseq_support GT.gt_encseq_encoder_enable_multiseq_support(@eenc) end def disable_multiseq_support GT.gt_encseq_encoder_disable_multiseq_support(@eenc) end def create_des_tab GT.gt_encseq_encoder_create_des_tab(@eenc) end def do_not_create_des_tab GT.gt_encseq_encoder_do_not_create_des_tab(@eenc) end def create_ssp_tab GT.gt_encseq_encoder_create_ssp_tab(@eenc) end def do_not_create_ssp_tab GT.gt_encseq_encoder_do_not_create_ssp_tab(@eenc) end def create_sds_tab GT.gt_encseq_encoder_create_sds_tab(@eenc) end def do_not_create_sds_tab GT.gt_encseq_encoder_do_not_create_sds_tab(@eenc) end def set_input_dna GT.gt_encseq_encoder_set_input_dna(@eenc) end def set_input_protein GT.gt_encseq_encoder_set_input_protein(@eenc) end def encode(files, indexname) files = files.to_a if files.length == 0 then GT.gterror("list of input sequence files must be non-empty") end sa = StrArray.new files.each do |f| fn = f.to_s if (!File.exists?(fn)) GT.gterror("file not found: #{fn}") end sa.add(fn) end err = Error.new rval = GT.gt_encseq_encoder_encode(@eenc, sa.to_ptr, indexname.to_s, \ err.to_ptr) if rval != 0 then GT.gterror(err) end end def to_ptr @eenc end end class EncseqLoader def initialize(eldr = nil, own = true) if eldr.nil? then @eldr = GT.gt_encseq_loader_new() else @eldr = eldr end if own then @eldr.free = GT::symbol("gt_encseq_loader_delete", "0P") end @destab = true @ssptab = true @sdstab = true end def require_description_support @destab = true @sdstab = true GT.gt_encseq_loader_require_description_support(@eldr) end def drop_description_support @destab = false @sdstab = false GT.gt_encseq_loader_drop_description_support(@eldr) end def require_multiseq_support @ssptab = true GT.gt_encseq_loader_require_multiseq_support(@eldr) end def drop_multiseq_support @ssptab = false GT.gt_encseq_loader_drop_multiseq_support(@eldr) end def require_des_tab @destab = true GT.gt_encseq_loader_require_des_tab(@eldr) end def do_not_require_des_tab @destab = false GT.gt_encseq_loader_do_not_require_des_tab(@eldr) end def require_ssp_tab @ssptab = true GT.gt_encseq_loader_require_ssp_tab(@eldr) end def do_not_require_ssp_tab @ssptab = false GT.gt_encseq_loader_do_not_require_ssp_tab(@eldr) end def require_sds_tab @sdstab = true GT.gt_encseq_loader_require_sds_tab(@eldr) end def do_not_require_sds_tab @sdstab = false GT.gt_encseq_loader_do_not_require_sds_tab(@eldr) end def enable_range_iterator GT.gt_encseq_loader_enable_range_iterator(@eldr) end def disable_range_iterator GT.gt_encseq_loader_disable_range_iterator(@eldr) end def load(indexname) if !File.exists?("#{indexname}.esq") then GT.gterror("file not found: #{indexname}.esq") end if @destab and !File.exists?("#{indexname}.des") then GT.gterror("file not found: #{indexname}.des") end # not required in every case (equallength seqs) #if @ssptab and !File.exists?("#{indexname}.ssp") then # GT.gterror("file not found: #{indexname}.ssp") #end if @sdstab and !File.exists?("#{indexname}.sds") then GT.gterror("file not found: #{indexname}.sds") end err = Error.new rval = GT.gt_encseq_loader_load(@eldr, indexname.to_s, err.to_ptr) if rval == GT::NULL then GT.gterror(err) end Encseq.new(rval, true) end def to_ptr @eldr end end class EncseqBuilder def self.create(alphabet) if !alphabet.is_a?(Alphabet) then GT.gterror("argument must be an Alphabet") end EncseqBuilder.new(GT.gt_encseq_builder_new(alphabet.to_ptr)) end def initialize(ebld, own = true) @ebld = ebld if own then @ebld.free = GT::symbol("gt_encseq_builder_delete", "0P") end end def enable_description_support GT.gt_encseq_builder_enable_description_support(@ebld) end def disable_description_support GT.gt_encseq_builder_disable_description_support(@ebld) end def enable_multiseq_support GT.gt_encseq_builder_enable_multiseq_support(@ebld) end def disable_multiseq_support GT.gt_encseq_builder_disable_multiseq_support(@ebld) end def create_des_tab GT.gt_encseq_builder_create_des_tab(@ebld) end def do_not_create_des_tab GT.gt_encseq_builder_do_not_create_des_tab(@ebld) end def create_ssp_tab GT.gt_encseq_builder_create_ssp_tab(@ebld) end def do_not_create_ssp_tab GT.gt_encseq_builder_do_not_create_ssp_tab(@ebld) end def create_sds_tab GT.gt_encseq_builder_create_sds_tab(@ebld) end def do_not_create_sds_tab GT.gt_encseq_builder_do_not_create_sds_tab(@ebld) end def add_string(string, desc = '') str = string.to_s GT.gt_encseq_builder_add_cstr(@ebld, str, str.length, desc) end def build err = Error.new rval = GT.gt_encseq_builder_build(@ebld, err.to_ptr) if rval == GT::NULL then GT.gterror(err) end Encseq.new(rval, true) end def to_ptr @ebld end end UlongParam = struct [ "GtUlong val" ] SeqInfo = struct [ "GtUlong startpos", "GtUlong length" ] class Encseq attr_reader :num_of_sequences, :num_of_files, :total_length def initialize(encseq, own = true) @encseq = encseq @num_of_sequences = self._num_of_sequences @num_of_files = self._num_of_files @total_length = self._total_length if own then @encseq.free = GT::symbol("gt_encseq_delete", "0P") end end def to_ptr @encseq end def _num_of_sequences n = DL::malloc(GT::NATIVEULONGSIZE) GT.gt_encseq_num_of_sequences_p(@encseq, n) return n[0, n.size].unpack("L!")[0] end def _num_of_files n = DL::malloc(GT::NATIVEULONGSIZE) GT.gt_encseq_num_of_files_p(@encseq, n) return n[0, n.size].unpack("L!")[0] end def description(num) num = num.to_i if num >= @num_of_sequences then GT.gterror("invalid sequence number #{num}") end len = DL::malloc(GT::NATIVEULONGSIZE) n = [num].pack("L!") charptr = GT.gt_encseq_description_p(@encseq, len, n) lval = len[0, len.size].unpack("L!")[0] if lval > 0 and charptr != GT::NULL then charptr.to_s(lval) else "" end end def get_encoded_char(pos, readmode = GT::READMODE_FORWARD) if readmode < 0 or readmode > 3 then GT.gterror("invalid readmode!") end p = [pos.to_i].pack("L!") return GT.gt_encseq_get_encoded_char_p(@encseq, p, readmode) end def get_decoded_char(pos, readmode = GT::READMODE_FORWARD) if readmode < 0 or readmode > 3 then GT.gterror("invalid readmode!") end p = [pos.to_i].pack("L!") return GT.gt_encseq_get_decoded_char_p(@encseq, p, readmode) end def _total_length n = DL::malloc(GT::NATIVEULONGSIZE) GT.gt_encseq_total_length_p(@encseq, n) return n[0, n.size].unpack("L!")[0] end def alphabet aptr = GT.gt_encseq_alphabet(@encseq) if aptr == GT::NULL then nil else Alphabet.new(aptr, false) end end def seqlength(num) if num >= @num_of_sequences then GT.gterror("invalid sequence number #{num}") end n = [num.to_i].pack("L!") l = DL::malloc(GT::NATIVEULONGSIZE) GT.gt_encseq_seqlength_p(@encseq, n, l) return l[0, l.size].unpack("L!")[0] end def effective_filelength(num) if num >= @num_of_files then GT.gterror("invalid file number #{num}") end n = UlongParam.malloc n.val = num.to_i # 64-bit size hardcoded res = DL::malloc(8) GT.gt_encseq_effective_filelength_p(@encseq, res, n) # 64-bit size hardcoded res[0, 8].unpack("Q")[0] end def seqstartpos(num) if num >= @num_of_sequences then GT.gterror("invalid sequence number #{num}") end n = [num.to_i].pack("L!") l = DL::malloc(GT::NATIVEULONGSIZE) GT.gt_encseq_seqstartpos_p(@encseq, n, l) return l[0, l.size].unpack("L!")[0] end def filestartpos(num) if num >= @num_of_files then GT.gterror("invalid file number #{num}") end n = [num.to_i].pack("L!") l = DL::malloc(GT::NATIVEULONGSIZE) GT.gt_encseq_filestartpos_p(@encseq, n, l) return l[0, l.size].unpack("L!")[0] end def create_reader_with_readmode(readmode, startpos) if readmode < 0 or readmode > 3 then GT.gterror("invalid readmode!") end if startpos < 0 or startpos >= @total_length then gterror("invalid start position: #{startpos} " + \ "(allowed: 0-#{total_length-1})") end p = [startpos.to_i].pack("L!") er_ptr = GT.gt_encseq_create_reader_with_readmode_p(@encseq, readmode, p) return EncseqReader.new(er_ptr) end def extract_encoded(start, stop) if start < 0 or stop >= @total_length then GT.gterror("invalid coordinates: #{start}-#{stop} " + \ "(allowed: 0-#{@total_length-1})") end buf = DL.malloc(DL::sizeof('C') * (stop-start+1)) r = GT::Range.new(start, stop) GT.gt_encseq_extract_encoded_p(@encseq, buf, r) buf.to_a('C') end def extract_decoded(start, stop) if start < 0 or stop >= @total_length then GT.gterror("invalid coordinates: #{start}-#{stop} " + \ "(allowed: 0-#{@total_length-1})") end buf = DL.malloc(DL::sizeof('C') * (stop-start+1)) r = GT::Range.new(start, stop) GT.gt_encseq_extract_decoded_p(@encseq, buf, r) buf.to_s(stop-start+1) end def mirrored? if GT.gt_encseq_is_mirrored(@encseq) == 1 then true else false end end def mirror if self.mirrored? then GT.gterror("encoded sequence is already mirrored") end err = Error.new rval = GT.gt_encseq_mirror(@encseq, err.to_ptr) if rval < 0 then GT.gterror(err) end @num_of_sequences = self._num_of_sequences @total_length = self._total_length end def unmirror if !self.mirrored? then GT.gterror("encoded sequence is not mirrored") end GT.gt_encseq_unmirror(@encseq) @num_of_sequences = self._num_of_sequences @total_length = self._total_length end def seqnum(pos) if pos < 0 or pos >= @total_length then GT.gterror("invalid coordinates: #{start}-#{stop} " + \ "(allowed: 0-#{@total_length-1})") end n = [pos.to_i].pack("L!") l = DL::malloc(GT::NATIVEULONGSIZE) GT.gt_encseq_seqnum_p(@encseq, l, n) return l[0, l.size].unpack("L!")[0] end def filenum(pos) if pos < 0 or pos >= @total_length then GT.gterror("invalid coordinates: #{start}-#{stop} " + \ "(allowed: 0-#{@total_length-1})") end n = [pos.to_i].pack("L!") l = DL::malloc(GT::NATIVEULONGSIZE) GT.gt_encseq_filenum_p(@encseq, l, n) return l[0, l.size].unpack("L!")[0] end def filenames sa = GT::StrArray.new(GT.gt_encseq_filenames(@encseq), false) sa.to_a end end class EncseqReader def initialize(er, own = true) @er = er if own then @er.free = GT::symbol("gt_encseq_reader_delete", "0P") end end def next_encoded_char return GT.gt_encseq_reader_next_encoded_char(@er) end def next_decoded_char return GT.gt_encseq_reader_next_decoded_char(@er) end def to_ptr @er end end end genometools-1.5.1/gtruby/core/error.rb000066400000000000000000000033601211610345200177700ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' module GT extend DL::Importable gtdlload "libgenometools" extern "GtError* gt_error_new()" extern "const char* gt_error_get(const GtError*)" extern "ibool gt_error_is_set(const GtError*)" extern "const char* gt_error_get(const GtError*)" extern "void gt_error_set_nonvariadic(GtError*, const char*)" extern "void gt_error_unset(GtError*)" extern "void gt_error_delete(GtError*)" class Error def initialize(e = nil) if e.nil? then @error = GT.gt_error_new() @error.free = GT::symbol("gt_error_delete", "0P") else @error = e end end def get GT.gt_error_get(@error) end def set(str) GT.gt_error_set_nonvariadic(@error, str.to_s) end def is_set? GT.gt_error_is_set(@error) end def unset GT.gt_error_unset(@error) end def to_ptr @error end end end genometools-1.5.1/gtruby/core/range.rb000066400000000000000000000033351211610345200177350ustar00rootroot00000000000000# # Copyright (c) 2007 Gordon Gremme # Copyright (c) 2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # module GT class Range def initialize(start, stop) set(start, stop) end def set(start, stop) if start.nil? or stop.nil? or start > stop or start < 0 or stop < 0 then GT.gterror("range error: start > end!") end @start = start # 'end' is a reserved token in Ruby and cannot be used as an identifier @stop = stop end def start @start end def start=(val) if val > @stop or not val >= 0 then GT.gterror("Invalid range start component: %d" % val) end @start = val end def Range.malloc Range.new() end def end @stop end def end=(val) if val < @start or not val >= 0 then GT.gterror("Invalid range end component: %d" % val) end @stop = val end def to_ptr (@mem = [@start, @stop].pack("L_L_")).to_ptr end end end genometools-1.5.1/gtruby/core/readmode.rb000066400000000000000000000017131211610345200204170ustar00rootroot00000000000000# # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # module GT READMODE_FORWARD = 0 READMODE_REVERSE = 1 READMODE_COMPL = 2 READMODE_REVCOMPL = 3 end genometools-1.5.1/gtruby/core/str.rb000066400000000000000000000042401211610345200174450ustar00rootroot00000000000000# # Copyright (c) 2008 Gordon Gremme # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' module GT extend DL::Importable gtdlload "libgenometools" extern "GtStr* gt_str_new()" extern "GtStr* gt_str_new_cstr(const char*)" extern "void* gt_str_get_mem(const GtStr*)" extern "void gt_str_append_str(GtStr*, const GtStr*)" extern "void gt_str_append_cstr(GtStr*, const char*)" # we declare the return value as const char* instead of char*, because # otherwise dl/import wrongly assumes that it has responsibility for the # returned memory region (which leads to a double free()) extern "const char* gt_str_get(const GtStr*)" extern "unsigned long gt_str_length(const GtStr*)" extern "void gt_str_delete(GtStr*)" class Str def initialize(cstr) if cstr.is_a?(String) then @str = GT.gt_str_new_cstr(cstr) @str.free = GT::symbol("gt_str_delete", "0P") elsif cstr.is_a?(DL::PtrData) then @str = cstr else @str = GT.gt_str_new() @str.free = GT::symbol("gt_str_delete", "0P") end end def append_str(str) GT.gt_str_append_str(@str, str) end def append_cstr(cstr) GT.gt_str_append_cstr(@str, cstr) end def to_s GT.gt_str_get(@str) end def get_mem GT.gt_str_get_mem(@str) end def to_ptr @str end def length GT.gt_str_length(@str) end end end genometools-1.5.1/gtruby/core/str_array.rb000066400000000000000000000035761211610345200206560ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' module GT extend DL::Importable gtdlload "libgenometools" extern "GtStrArray* gt_str_array_new()" extern "void gt_str_array_add_cstr(GtStrArray*, const char*)" extern "const char* gt_str_array_get(const GtStrArray*, unsigned long)" extern "unsigned long gt_str_array_size(const GtStrArray*)" extern "void gt_str_array_delete(GtStrArray*)" class StrArray attr_reader :str_array def initialize(str_array_ptr = GT.gt_str_array_new(), own = true) @str_array = str_array_ptr if own != false then @str_array.free = GT::symbol("gt_str_array_delete", "0P") end end def add_list(list) list.each { |cstr| GT.gt_str_array_add_cstr(@str_array, cstr.to_s) } end def add(string) GT.gt_str_array_add_cstr(@str_array, string.to_s) end def to_a strings = [] 1.upto(GT.gt_str_array_size(@str_array)) do |i| strings.push(GT.gt_str_array_get(@str_array, i-1)) end strings end def to_ptr @str_array end end end genometools-1.5.1/gtruby/extended.rb000066400000000000000000000025751211610345200175160ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'extended/add_introns_stream' require 'extended/anno_db' require 'extended/comment_node' require 'extended/custom_stream' require 'extended/custom_visitor' require 'extended/eof_node' require 'extended/feature_index' require 'extended/feature_node' require 'extended/feature_stream' require 'extended/gff3_in_stream' require 'extended/gff3_out_stream' require 'extended/gff3_visitor' require 'extended/meta_node' require 'extended/rdb' require 'extended/region_node' require 'extended/sequence_node' require 'extended/type_checker' genometools-1.5.1/gtruby/extended/000077500000000000000000000000001211610345200171605ustar00rootroot00000000000000genometools-1.5.1/gtruby/extended/add_introns_stream.rb000066400000000000000000000023521211610345200233660ustar00rootroot00000000000000# # Copyright (c) 2008 Gordon Gremme # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'extended/genome_stream' module GT extend DL::Importable gtdlload "libgenometools" extern "GtNodeStream* gt_add_introns_stream_new(GtNodeStream*)" class AddIntronsStream < GenomeStream def initialize(in_stream) @genome_stream = GT.gt_add_introns_stream_new(in_stream) @genome_stream.free = GT::symbol("gt_node_stream_delete", "0P") end end end genometools-1.5.1/gtruby/extended/anno_db.rb000066400000000000000000000040101211610345200211000ustar00rootroot00000000000000# # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'extended/feature_index' module GT extend DL::Importable gtdlload "libgenometools" extern "GtAnnoDBSchema* gt_anno_db_gfflike_new()" extern "GtFeatureIndex* gt_anno_db_schema_get_feature_index(GtAnnoDBSchema*, GtRDB*, GtError*)" extern "void gt_anno_db_schema_delete(GtAnnoDBSchema*) " class AnnoDBSchema def initialize(*) raise(NotImplementedError, "Please call the constructor of a " + "#{self.class} implementation.") end def to_ptr @adb end def get_feature_index(rdb) err = GT::Error.new() fi = GT.gt_anno_db_schema_get_feature_index(@adb, rdb.to_ptr, err) if fi.nil? then GT::gterror(err) end GT::FeatureIndexFromPtr.new(fi) end end class AnnoDBGFFlike < AnnoDBSchema def initialize() err = GT::Error.new() @adb = GT.gt_anno_db_gfflike_new() if @adb.nil? then GT::gterror(err) end @adb.free = GT::symbol("gt_anno_db_schema_delete", "0P") end end end genometools-1.5.1/gtruby/extended/comment_node.rb000066400000000000000000000026311211610345200221560ustar00rootroot00000000000000# # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' module GT extend DL::Importable gtdlload "libgenometools" extern "GtCommentNode* gt_comment_node_new(const char*)" extern "const char* gt_comment_node_get_comment(const GtCommentNode*)" class CommentNode < GenomeNode def self.create(comment) newfn = GT.gt_comment_node_new(comment.to_s) return GT::CommentNode.new(newfn, true) end def initialize(gn, newref=false) super(gn, newref) end def get_comment return GT.gt_comment_node_get_comment(@genome_node) end end end genometools-1.5.1/gtruby/extended/custom_stream.rb000066400000000000000000000035641211610345200224020ustar00rootroot00000000000000# # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'gthelper' require 'extended/genome_stream' require 'dl/struct' module GT extend DL::Importable gtdlload "libgenometools" extern "GtNodeStream* gt_script_wrapper_stream_new(void*, void*)" class CustomStream < GenomeStream def initialize() if !public_methods.include?("next") then GT::gterror "#{self.class} must implement 'next' method" end @next_cb = DL.callback("IPP") do |gn_ptr, err_ptr| rval = 0 begin node = self.next gn_ptr.struct!("P", :val) if !node.nil? then GT.gt_genome_node_ref(node) gn_ptr[:val] = node.to_ptr else gn_ptr[:val] = nil end rescue => errmsg Error.new(err_ptr).set(errmsg) rval = -1 end rval end @genome_stream = GT.gt_script_wrapper_stream_new(@next_cb, nil) @genome_stream.free = GT::symbol("gt_node_stream_delete", "0P") end def to_ptr @genome_stream end end end genometools-1.5.1/gtruby/extended/custom_stream_example.rb000066400000000000000000000023351211610345200241100ustar00rootroot00000000000000# # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'extended/custom_stream' require 'extended/custom_visitor_example' module GT class CustomStreamExample < CustomStream def initialize(instream) super() @instream = instream @visitor = CustomVisitorExample.new end def next node = @instream.next_tree if node then node.accept(@visitor) end node end end end genometools-1.5.1/gtruby/extended/custom_visitor.rb000066400000000000000000000070251211610345200226020ustar00rootroot00000000000000# # Copyright (c) 2009-2012 Sascha Steinbiss # Copyright (c) 2009-2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' require 'extended/comment_node' require 'extended/eof_node' require 'extended/feature_node' require 'extended/meta_node' require 'extended/sequence_node' require 'extended/region_node' module GT extend DL::Importable gtdlload "libgenometools" extern "GtNodeVisitor* gt_script_wrapper_visitor_new(void*, void*, void*, void*, void*, void*, void*)" class CustomVisitor def visitor_func_generic(node_class, node_ptr, err_ptr, method_name) node = node_class.new(node_ptr, true) err = GT::Error.new(err_ptr) begin begin ret = self.send("visit_#{method_name}_node", node) rescue NoMethodError ret = 0 end rescue Error => msg err.set(msg) ret = -1 end if ret.nil? 0 else begin Integer(ret) rescue err.set("Function 'visit_#{method_name}_node' of class " + \ "'#{self.class}' must return an integer or nil!") 1 end end end def initialize() @feature_node_cb = DL.callback("IPP") do |fn_ptr, err_ptr| self.visitor_func_generic(GT::FeatureNode, fn_ptr, err_ptr, "feature") end @comment_node_cb = DL.callback("IPP") do |cn_ptr, err_ptr| self.visitor_func_generic(GT::CommentNode, cn_ptr, err_ptr, "comment") end @region_node_cb = DL.callback("IPP") do |rn_ptr, err_ptr| self.visitor_func_generic(GT::RegionNode, rn_ptr, err_ptr, "region") end @sequence_node_cb = DL.callback("IPP") do |sn_ptr, err_ptr| self.visitor_func_generic(GT::CommentNode, sn_ptr, err_ptr, "sequence") end @meta_node_cb = DL.callback("IPP") do |mn_ptr, err_ptr| self.visitor_func_generic(GT::MetaNode, mn_ptr, err_ptr, "meta") end @eof_node_cb = DL.callback("IPP") do |en_ptr, err_ptr| self.visitor_func_generic(GT::EOFNode, en_ptr, err_ptr, "eof") end @genome_visitor = GT.gt_script_wrapper_visitor_new(@comment_node_cb, @feature_node_cb, @region_node_cb, @sequence_node_cb, @meta_node_cb, @eof_node_cb, nil) @genome_visitor.free = GT::symbol("gt_node_visitor_delete", "0P") end def to_ptr @genome_visitor end end end genometools-1.5.1/gtruby/extended/custom_visitor_example.rb000066400000000000000000000023151211610345200243120ustar00rootroot00000000000000# # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'extended/custom_visitor' module GT class CustomVisitorExample < CustomVisitor def initialize() super end def visit_feature_node(feature_node) new_node = GT::FeatureNode.create(feature_node.get_seqid, "test", \ 100, 1000, '+') feature_node.add_child(new_node) 0 end end end genometools-1.5.1/gtruby/extended/eof_node.rb000066400000000000000000000023441211610345200212660ustar00rootroot00000000000000# # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' require 'extended/genome_node' module GT extend DL::Importable gtdlload "libgenometools" extern "GtGenomeNode* gt_eof_node_new()" class EOFNode < GenomeNode def self.create newfn = GT.gt_eof_node_new() return GT::EOFNode.new(newfn, true) end def initialize(gn, newref=false) super(gn, newref) end end end genometools-1.5.1/gtruby/extended/feature_index.rb000066400000000000000000000131051211610345200223270ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2008-2010 Sascha Steinbiss # Copyright (c) 2007-2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'core/array' require 'core/range' require 'core/str_array' module GT extend DL::Importable gtdlload "libgenometools" typealias "bool", "ibool" extern "GtFeatureIndex* gt_feature_index_memory_new()" extern "void gt_feature_index_delete(GtFeatureIndex*)" extern "int gt_feature_index_add_gff3file(GtFeatureIndex*, " + "const char*, " + "GtError*)" extern "GtArray* gt_feature_index_get_features_for_seqid(Gt_FeatureIndex*, " + "const char*, " + "GtError*)" extern "char* gt_feature_index_get_first_seqid(const GtFeatureIndex*, " + "GtError*)" extern "GtStrArray* gt_feature_index_get_seqids(const GtFeatureIndex*, " + "GtError*)" extern "int gt_feature_index_get_range_for_seqid(GtFeatureIndex*, " + "GtRange*, const char*, " + "GtError*)" extern "int gt_feature_index_has_seqid(const GtFeatureIndex*, int*, " + "const char*, GtError*)" extern "int gt_feature_index_get_features_for_range(GtFeatureIndex*, GtArray*, const char*, const GtRange*, GtError*)" class FeatureIndex attr_reader :feature_index def initialize(*) raise(NotImplementedError, "Please call the constructor of a " + "#{self.class} implementation.") end def get_features_for_seqid(seqid) err = GT::Error.new() rval = GT.gt_feature_index_get_features_for_seqid(@feature_index, seqid, \ err) if rval then a = GT::Array.new(rval) result = [] 1.upto(a.size) do |i| fn = GT::FeatureNode.new(GT.gt_genome_node_ref(a.get(i-1))) result.push(fn) end result else GT.gterror(err) end end def get_features_for_range(start, stop, seqid) a = Array.create() err = Error.new() rng = Range.new(start, stop) rval = GT::gt_feature_index_get_features_for_range(@feature_index, a, \ seqid, rng.to_ptr, err) if rval != 0 then GT.gterror(err) end result = [] 1.upto(a.size) do |i| fn = GT::FeatureNode.new(GT.gt_genome_node_ref(a.get(i-1))) result.push(fn) end result end def add_gff3file(filename) err = GT::Error.new() rval = GT.gt_feature_index_add_gff3file(@feature_index, filename, \ err.to_ptr) if rval != 0 then GT.gterror(err) end end def get_first_seqid err = Error.new() val = GT.gt_feature_index_get_first_seqid(@feature_index, err.to_ptr) if val.nil? then GT.gterror(err) end val end def get_seqids err = Error.new() sap = GT.gt_feature_index_get_seqids(@feature_index, err.to_ptr) if sap.nil? then GT.gterror(err) end GT::StrArray.new(sap).to_a end def has_seqid?(seqid) err = Error.new() val = (GT::struct ["bool val"]).malloc rval = GT.gt_feature_index_has_seqid(@feature_index, val, seqid, err) if rval != 0 then GT.gterror(err) else return (val.val == true) end end def get_range_for_seqid(seqid) err = Error.new() if not self.has_seqid?(seqid) then GT.gterror("feature_index does not contain seqid") end range = DL::malloc(DL::sizeof("LL")) rval = GT.gt_feature_index_get_range_for_seqid(@feature_index, range, \ seqid, err) if rval != 0 then GT.gterror(err) else range.struct!("LL", :start, :stop) Range.new(range[:start],range[:stop]) end end def to_ptr @feature_index end end class FeatureIndexMemory < FeatureIndex def initialize @feature_index = GT.gt_feature_index_memory_new() @feature_index.free = GT::symbol("gt_feature_index_delete", "0P") end end class FeatureIndexFromPtr < FeatureIndex def initialize(ptr, own = false) @feature_index = ptr if own then @feature_index.free = GT::symbol("gt_feature_index_delete", "0P") end end end end genometools-1.5.1/gtruby/extended/feature_node.rb000066400000000000000000000163751211610345200221610ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' require 'core/str' require 'extended/genome_node' module GT extend DL::Importable gtdlload "libgenometools" typealias "bool", "ibool" typealias "GtStrand", "int" typealias "GtPhase", "int" extern "GtGenomeNode* gt_feature_node_new(GtStr*, const char*, unsigned long, unsigned long, GtStrand)" extern "void gt_feature_node_add_child(GtFeatureNode*, GtFeatureNode*)" extern "const char* gt_feature_node_get_source(GtFeatureNode*)" extern "void gt_feature_node_set_source(GtFeatureNode*, GtStr*)" extern "const char* gt_feature_node_get_type(GtFeatureNode*)" extern "bool gt_feature_node_has_type(GtFeatureNode*, const char*)" extern "bool gt_feature_node_score_is_defined(const GtFeatureNode*)" extern "float gt_feature_node_get_score(const GtFeatureNode*)" extern "void gt_feature_node_set_score(GtFeatureNode*, float)" extern "void gt_feature_node_unset_score(GtFeatureNode*)" extern "GtStrand gt_feature_node_get_strand(GtFeatureNode*)" extern "void gt_feature_node_set_strand(GtFeatureNode*, GtStrand)" extern "GtPhase gt_feature_node_get_phase(GtFeatureNode*)" extern "void gt_feature_node_set_phase(GtFeatureNode*, GtPhase)" extern "const char* gt_feature_node_get_attribute(GtFeatureNode*, const char*)" extern "void gt_feature_node_add_attribute(GtFeatureNode*, const char*, const char*)" extern "void gt_feature_node_foreach_attribute(GtFeatureNode*, void*, void*)" #callback to populate attribute list def collect_attrib(tag, val, data) GT.gt_str_array_add_cstr(data, tag) GT.gt_str_array_add_cstr(data, val) end COLLECTFUNC = callback "void collect_attrib(const char*, const char*, void*)" class FeatureNode < GenomeNode def self.create(seqid, type, start, stop, strand) s = GT::Str.new(seqid) if !GT::STRANDCHARS.include?(strand) GT::gterror("Invalid strand: '#{strand}'") end newfn = GT.gt_feature_node_new(s, type, start, stop, \ GT::STRANDCHARS.index(strand)) return GT::FeatureNode.new(newfn, true) end def initialize(gn, newref=false) super(gn, newref) end def add_child(node) if self.get_seqid != node.get_seqid GT::gterror("nodes must have identical sequence regions! " + \ "(was: '#{self.get_seqid}' vs. '#{node.get_seqid}'") end GT.gt_feature_node_add_child(@genome_node, node) end def get_source GT.gt_feature_node_get_source(@genome_node) end def set_source(source) GT.gt_feature_node_set_source(@genome_node, source.to_s) end def update_attribs attribs = GT::StrArray.new GT.gt_feature_node_foreach_attribute(@genome_node, COLLECTFUNC, attribs) attr_a = attribs.to_a @attribs = {} while not attr_a.empty? do @attribs[attr_a.shift] = attr_a.shift end end def get_type GT.gt_feature_node_get_type(@genome_node) end def has_type?(type) GT.gt_feature_node_has_type(@genome_node, type.to_s) end def score_is_defined? GT.gt_feature_node_score_is_defined(@genome_node) end def get_score if GT.gt_feature_node_score_is_defined(@genome_node) then GT.gt_feature_node_get_score(@genome_node) else nil end end def set_score(score) GT.gt_feature_node_set_score(@genome_node, score.to_f) end def unset_score GT.gt_feature_node_unset_score(@genome_node) end def get_strand GT.gt_feature_node_get_strand(@genome_node) end def set_strand if !GT::STRANDCHARS.include?(strand) GT::gterror("Invalid strand: '#{strand}'") end GT.gt_feature_node_set_strand(GT::STRANDCHARS.index(strand)) end def get_phase GT.gt_feature_node_get_phase(@genome_node) end def set_phase(phase) if phase.to_i > 3 then GT::gterror("Invalid phase: '#{phase}'") end GT.gt_feature_node_set_phase(@genome_node, phase.to_i) end def get_attribute(attrib) if @attribs.nil? self.update_attribs end @attribs[attrib] end def add_attribute(tag, val) if tag.to_s == "" or val.to_s == "" then gterror("Attribute keys or values must not be empty!") end GT.gt_feature_node_add_attribute(@genome_node, tag.to_s, val.to_s) self.update_attribs end def each_attribute if @attribs.nil? self.update_attribs end @attribs.each_pair do |tag, val| yield tag, val end end def traverse(it) tfn = it.next while !tfn.nil? do yield tfn tfn = it.next end end def traverse_dfs self.traverse(GT::FeatureNodeIteratorDepthFirst.new(self)) do |n| yield n end end def traverse_direct self.traverse(GT::FeatureNodeIteratorDirect.new(self)) do |n| yield n end end def to_ptr @genome_node end end extern "GtFeatureNode* gt_feature_node_iterator_next(GtFeatureNodeIterator*)" extern "void gt_feature_node_iterator_delete(GtFeatureNodeIterator*)" extern "GtFeatureNodeIterator* gt_feature_node_iterator_new(const GtFeatureNode*)" extern "GtFeatureNodeIterator* gt_feature_node_iterator_new_direct(const GtFeatureNode*)" class FeatureNodeIterator def next ret = GT.gt_feature_node_iterator_next(@i) if !ret.nil? then GT::FeatureNode.new(ret, true) else nil end end end class FeatureNodeIteratorDepthFirst < FeatureNodeIterator def initialize(node) @i = GT.gt_feature_node_iterator_new(node) @i.free = GT::symbol("gt_feature_node_iterator_delete", "0P") end end class FeatureNodeIteratorDirect < FeatureNodeIterator def initialize(node) @i = GT.gt_feature_node_iterator_new_direct(node) @i.free = GT::symbol("gt_feature_node_iterator_delete", "0P") end end end genometools-1.5.1/gtruby/extended/feature_stream.rb000066400000000000000000000025201211610345200225120ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'extended/genome_stream' module GT extend DL::Importable gtdlload "libgenometools" extern "GtNodeStream* gt_feature_stream_new(GtNodeStream*, GtFeatureIndex*)" class FeatureStream < GenomeStream def initialize(genome_stream, feature_index) @genome_stream = GT.gt_feature_stream_new(genome_stream, feature_index) @genome_stream.free = GT::symbol("gt_node_stream_delete", "0P") end end end genometools-1.5.1/gtruby/extended/genome_node.rb000066400000000000000000000051351211610345200217700ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2007-2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'gthelper' require 'core/str' module GT extend DL::Importable gtdlload "libgenometools" extern "int gt_genome_node_accept(GtGenomeNode*, GenomeVisitor*, GtError*)" extern "GtGenomeNode* gt_genome_node_ref(GtGenomeNode*)" extern "GtStr* gt_genome_node_get_seqid(GtGenomeNode*)" extern "unsigned long gt_genome_node_get_start(GtGenomeNode*)" extern "unsigned long gt_genome_node_get_end(GtGenomeNode*)" extern "const char* gt_genome_node_get_filename(GtGenomeNode*)" extern "unsigned int gt_genome_node_get_line_number(GtGenomeNode*)" extern "void gt_genome_node_delete(GtGenomeNode*)" class GenomeNode attr_reader :genome_node def initialize(node_ptr, newref=false) if newref then @genome_node = GT.gt_genome_node_ref(node_ptr) else @genome_node = node_ptr end @genome_node.free = GT::symbol("gt_genome_node_delete", "0P") end def ==(node) (node.genome_node == @genome_node) end def get_range (GT::gt_genome_node_get_start(@genome_node)..\ GT::gt_genome_node_get_end(@genome_node)) end def get_filename GT.gt_genome_node_get_filename(@genome_node) end def get_line_number GT.gt_genome_node_get_line_number(@genome_node) end def to_ptr @genome_node end def get_seqid str = GT::Str.new(GT.gt_genome_node_get_seqid(@genome_node)) if !str.nil? then str.to_s else "" end end def accept(visitor) err = GT::Error.new() rval = GT.gt_genome_node_accept(@genome_node, visitor.to_ptr, err.to_ptr) if rval != 0 GT.gterror(err) end end end end genometools-1.5.1/gtruby/extended/genome_stream.rb000066400000000000000000000033731211610345200223400ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2007-2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'gthelper' require 'core/error' require 'extended/genome_node' module GT extend DL::Importable gtdlload "libgenometools" extern "int gt_node_stream_next(GtNodeStream*, GtGenomeNode**, GtError*)" class GenomeStream def initialize(*) raise(NotImplementedError, "Please call the constructor of a " + "#{self.class} implementation.") end def next_tree err = GT::Error.new() genome_node = DL::PtrData.new(0) genome_node.free = DL::FREE rval = GT.gt_node_stream_next(@genome_stream, genome_node.ref, err.to_ptr) if rval != 0 then GT.gterror(err) end if genome_node.null? then return nil end GT::GenomeNode.new(genome_node) end def to_ptr @genome_stream end end end genometools-1.5.1/gtruby/extended/gff3_in_stream.rb000066400000000000000000000051741211610345200224020ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2007-2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'gthelper' require 'core/str_array' require 'extended/genome_stream' module GT extend DL::Importable gtdlload "libgenometools" typealias "bool", "ibool" extern "GtNodeStream* gt_gff3_in_stream_new_sorted(const char*)" extern "GtNodeStream* gt_gff3_in_stream_new_unsorted(int, const char**)" extern "GtStrArray* gt_gff3_in_stream_get_used_types(GtNodeStream*)" extern "void gt_gff3_in_stream_enable_strict_mode(GtGFF3InStream*)" extern "void gt_gff3_in_stream_enable_tidy_mode(GtGFF3InStream*)" extern "void gt_gff3_in_stream_set_type_checker(GtNodeStream*, GtTypeChecker*)" class GFF3InStream < GenomeStream def initialize(filename, sorted = true) if not File.readable?(filename) GT.gterror("file '#{filename}' not readable") end if sorted then @genome_stream = GT.gt_gff3_in_stream_new_sorted(filename.to_s) else @genome_stream = GT.gt_gff3_in_stream_new_unsorted(1, [filename.to_s]) end @genome_stream.free = GT::symbol("gt_node_stream_delete", "0P") end def get_used_types str_array_ptr = GT.gt_gff3_in_stream_get_used_types(@genome_stream) used_types = GT::StrArray.new(str_array_ptr) used_types.to_a end def enable_strict_mode GT.gt_gff3_in_stream_enable_strict_mode(@genome_stream) end def enable_tidy_mode GT.gt_gff3_in_stream_enable_tidy_mode(@genome_stream) end def set_type_checker(checker) if !checker.is_a?(GT::TypeChecker) then GT.gterror("'checker' parameter must be a TypeChecker object!") end GT.gt_gff3_in_stream_set_type_checker(@genome_stream, checker) end end end genometools-1.5.1/gtruby/extended/gff3_out_stream.rb000066400000000000000000000023741211610345200226020ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'extended/genome_stream' module GT extend DL::Importable gtdlload "libgenometools" extern "GtNodeStream* gt_gff3_out_stream_new(GtNodeStream*, GtGenFile*)" class GFF3OutStream < GenomeStream def initialize(in_stream) @genome_stream = GT.gt_gff3_out_stream_new(in_stream, nil) @genome_stream.free = GT::symbol("gt_node_stream_delete", "0P") end end end genometools-1.5.1/gtruby/extended/gff3_visitor.rb000066400000000000000000000023571211610345200221200ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtdlload' require 'extended/genome_stream' module GT extend DL::Importable gtdlload "libgenometools" extern "GtNodeVisitor* gt_gff3_visitor_new(GtFile*)" class GFF3Visitor def initialize @genome_visitor = GT.gt_gff3_visitor_new(nil) @genome_visitor.free = GT::symbol("gt_node_visitor_delete", "0P") end def to_ptr @genome_visitor end end end genometools-1.5.1/gtruby/extended/meta_node.rb000066400000000000000000000030721211610345200214420ustar00rootroot00000000000000# # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' module GT extend DL::Importable gtdlload "libgenometools" extern "GtGenomeNode* gt_meta_node_new(const char*, const char*)" extern "const char* gt_meta_node_get_directive(const GtMetaNode*)" extern "const char* gt_meta_node_get_data(const GtMetaNode*)" class MetaNode < GenomeNode def self.create(directive, data) newfn = GT.gt_meta_node_new(directive.to_s, data.to_s) return GT::MetaNode.new(newfn, true) end def initialize(gn, newref=false) super(gn, newref) end def get_directive return GT.gt_meta_node_get_directive(@genome_node) end def get_data return GT.gt_meta_node_get_data(@genome_node) end end end genometools-1.5.1/gtruby/extended/rdb.rb000066400000000000000000000037111211610345200202560ustar00rootroot00000000000000# # Copyright (c) 2009-2012 Sascha Steinbiss # Copyright (c) 2009-2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' module GT extend DL::Importable gtdlload "libgenometools" extern "GtRDB* gt_rdb_sqlite_new(const char*, GtError*)" begin extern "GtRDB* gt_rdb_mysql_new(const char*, unsigned int, const char*, const char*, const char*, GtError*)" rescue end class RDB def initialize(*) raise(NotImplementedError, "Please call the constructor of a " + "#{self.class} implementation.") end def to_ptr @rdb end end class RDBSqlite < RDB def initialize(dbpath) err = GT::Error.new() @rdb = GT.gt_rdb_sqlite_new(dbpath, err) if @rdb.nil? then GT::gterror(err) end @rdb.free = GT::symbol("gt_rdb_delete", "0P") end end class RDBMySQL < RDB def initialize(server, port, db, user, pass) err = GT::Error.new() @rdb = GT.gt_rdb_mysql_new(server, port, db, user, pass, err) if @rdb.nil? then GT::gterror(err) end @rdb.free = GT::symbol("gt_rdb_delete", "0P") end end end genometools-1.5.1/gtruby/extended/region_node.rb000066400000000000000000000027421211610345200220020ustar00rootroot00000000000000# # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' require "core/str" module GT extend DL::Importable gtdlload "libgenometools" extern "GtRegionNode* gt_region_node_new(GtStr*, unsigned long, unsigned long)" class RegionNode < GenomeNode def self.create(seqid, start, stop) unless start <= stop raise(ArgumentError, "start (#{start}) > stop (#{stop})") else newrn = GT.gt_region_node_new(GT::Str.new(seqid.to_s), start, stop) return GT::RegionNode.new(newrn, true) end end def initialize(gn, newref=false) super(gn, newref) end end end genometools-1.5.1/gtruby/extended/sequence_node.rb000066400000000000000000000037111211610345200223240ustar00rootroot00000000000000# # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' require "core/str" module GT extend DL::Importable gtdlload "libgenometools" extern "GtGenomeNode* gt_sequence_node_new(const char*, GtStr*)" extern "const char* gt_sequence_node_get_description(const GtSequenceNode*)" extern "const char* gt_sequence_node_get_sequence(const GtSequenceNode*)" extern "unsigned long gt_sequence_node_get_sequence_length(const GtSequenceNode*)" class SequenceNode < GenomeNode def self.create(description, sequence) newsn = GT.gt_sequence_node_new(description.to_s, \ GT::Str.new(sequence.to_s)) return GT::SequenceNode.new(newsn, true) end def initialize(gn, newref=false) super(gn, newref) end def get_description return GT.gt_sequence_node_get_description(@genome_node) end def get_sequence (seq = GT.gt_sequence_node_get_sequence(@genome_node)) ? seq : "" end def get_sequence_length return GT.gt_sequence_node_get_sequence_length(@genome_node) end end end genometools-1.5.1/gtruby/extended/type_checker.rb000066400000000000000000000044351211610345200221600ustar00rootroot00000000000000# # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' require 'gthelper' require 'core/error' module GT extend DL::Importable gtdlload "libgenometools" extern "GtTypeChecker* gt_type_checker_ref(GtTypeChecker*)" extern "bool gt_type_checker_is_valid(GtTypeChecker*, const char*)" extern "void gt_type_checker_delete(GtTypeChecker*)" extern "GtTypeChecker* gt_type_checker_obo_new(const char*, GtError*)" extern "GtTypeChecker* gt_type_checker_builtin_new()" class TypeChecker def initialize(*) raise(NotImplementedError, "Please call the constructor of a " + "#{self.class} implementation.") end def is_valid?(type) rval = GT.gt_type_checker_is_valid(@checker, type) return rval end def to_ptr @checker end end class TypeCheckerBuiltin < TypeChecker def initialize @checker = GT.gt_type_checker_builtin_new() @checker.free = GT::symbol("gt_type_checker_delete", "0P") end end class TypeCheckerOBO < TypeChecker def initialize(filename) if !File.exist?(filename) or File.directory?(filename) \ or !File.readable?(filename) GT.gterror("invalid file: #{filename}") end err = GT::Error.new @checker = GT.gt_type_checker_obo_new(filename, err.to_ptr) if @checker == GT::NULL or @checker == nil then GT.gterror(err) else @checker.free = GT::symbol("gt_type_checker_delete", "0P") end end end end genometools-1.5.1/gtruby/gtdlload.rb000066400000000000000000000022741211610345200175040ustar00rootroot00000000000000# # Copyright (c) 2008 Gordon Gremme # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'dl/import' module GT # XXX: Does anybody have a better idea for this mess? def GT.gtdlload(basename) if not $GT_SYSTEM then $GT_SYSTEM=`uname -s`.chomp end if $GT_SYSTEM == "Darwin" then dlload basename + ".dylib" else dlload basename + ".so" end end # a NULL pointer NULL = DL::PtrData.new(0) end genometools-1.5.1/gtruby/gthelper.rb000066400000000000000000000023021211610345200175140ustar00rootroot00000000000000# # Copyright (c) 2007 Gordon Gremme # Copyright (c) 2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'core/error' module GT class GTError < RuntimeError end # this is needed because DL is unaware of the native ulong size NATIVEULONGSIZE = [0].pack('L!').size def GT.gterror(err) if err.class == GT::Error then raise GTError, "GenomeTools error: #{err.get}" else raise GTError, "GenomeTools error: " + err end end end genometools-1.5.1/gtruby/gtruby.rb000066400000000000000000000020251211610345200172200ustar00rootroot00000000000000# # Copyright (c) 2007 Gordon Gremme # Copyright (c) 2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # the GenomeTools Ruby bindings require 'gthelper' require 'core' require 'extended' require 'annotationsketch' # initialize library globals GT::gt_lib_init() GT::gt_lib_reg_atexit_func() genometools-1.5.1/gtruby/sketch_constructed.rb000066400000000000000000000021221211610345200216000ustar00rootroot00000000000000require 'gtruby' if ARGV.size != 2 then STDERR.puts "Usage: #{$0} style_file PNG_file" exit(1) end seqid = "chromosome_21" # construct a gene on the forward strand with two exons gene = GT::FeatureNode.create(seqid, "gene", 100, 900, "+") exon = GT::FeatureNode.create(seqid, "exon", 100, 200, "+") gene.add_child(exon) intron = GT::FeatureNode.create(seqid, "intron", 201, 799, "+") gene.add_child(intron) exon = GT::FeatureNode.create(seqid, "exon", 800, 900, "+") gene.add_child(exon) # construct a single-exon gene on the reverse strand # (within the intron of the forward strand gene) reverse_gene = GT::FeatureNode.create(seqid, "gene", 400, 600, "-") reverse_exon = GT::FeatureNode.create(seqid, "exon", 400, 600, "-") reverse_gene.add_child(reverse_exon) pngfile = ARGV[1] style = GT::Style.new() style.load_file(ARGV[0]) rng = GT::Range.new(1, 1000) diagram = GT::Diagram.from_array([gene, reverse_gene], rng, style) layout = GT::Layout.new(diagram, 600, style) canvas = GT::CanvasCairoFile.new(style, 600, layout.get_height, nil) layout.sketch(canvas) canvas.to_file(pngfile) genometools-1.5.1/gtruby/sketch_parsed.rb000066400000000000000000000016471211610345200205340ustar00rootroot00000000000000require 'gtruby' if ARGV.size != 3 then STDERR.puts "Usage: #{$0} style_file PNG_file GFF3_file" STDERR.puts "Create PNG representation of GFF3 annotation file." exit(1) end (stylefile, pngfile, gff3file) = ARGV # load style file style = GT::Style.new() style.load_file(stylefile) # create feature index feature_index = GT::FeatureIndexMemory.new() # add GFF3 file to index feature_index.add_gff3file(gff3file) # create diagram for first sequence ID in feature index seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) diagram = GT::Diagram.from_index(feature_index, seqid, range, style) # create layout for given width layout = GT::Layout.new(diagram, 800, style) # create canvas with given width and computed height canvas = GT::CanvasCairoFile.new(style, 800, layout.get_height, nil) # sketch layout on canvas layout.sketch(canvas) # write canvas to file canvas.to_file(pngfile) genometools-1.5.1/gtscripts/000077500000000000000000000000001211610345200160665ustar00rootroot00000000000000genometools-1.5.1/gtscripts/display.lua000066400000000000000000000027551211610345200202470ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] require 'gtlua' function usage() io.stderr:write(string.format("Usage: %s PNG_dir\n", arg[0])) io.stderr:write("Display numbered PNG files in PNG_dir.\n") os.exit(1) end if #arg == 1 then png_dir = arg[1] -- make sure png_dir is a directory rval, err = lfs.attributes(png_dir, "mode") if rval ~= "directory" then io.stderr:write(string.format("PNG_dir '%s' is not a directory\n", png_dir)) os.exit(1) end else usage() end filenumber = 1 while (true) do local filename = png_dir .. "/" .. filenumber .. ".png" if gt.file_exists(filename) then gt.display(filename) filenumber = filenumber + 1 else break end end genometools-1.5.1/gtscripts/evalviz.lua000066400000000000000000000057101211610345200202540ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] require 'gtlua' require 'lfs' function usage() io.stderr:write(string.format("Usage: %s PNG_dir reality_file " .. "prediction_file\n", arg[0])) io.stderr:write("Evaluate prediction_file against reality_file and write " .. "out PNGs to PNG_dir.\n") os.exit(1) end if #arg == 3 then png_dir = arg[1] reality_file = arg[2] prediction_file = arg[3] -- make sure png_dir is a directory or create it rval, err = lfs.attributes(png_dir, "mode") if rval then if rval ~= "directory" then io.stderr:write(string.format("PNG_dir '%s' is not a directory\n", png_dir)) os.exit(1) end else -- not successfull, try to create directory rval, err = lfs.mkdir(png_dir) if not rval then io.stderr:write(string.format("could not create directory '%s': %s", png_dir, err)) os.exit(1) end end else usage() end function write_marked_regions(seqid, filenumber, maxdist) assert(seqid) local marked = feature_index:get_marked_regions(seqid, maxdist) for _,range in ipairs(marked) do local filename = png_dir .. "/" .. filenumber .. ".png" io.write(string.format("writing file '%s'\n", filename)) feature_index:render_to_png(seqid, range, filename, width) filenumber = filenumber + 1 end return filenumber end -- process input files reality_stream = gt.gff3_in_stream_new_sorted(reality_file) prediction_stream = gt.gff3_in_stream_new_sorted(prediction_file) stream_evaluator = gt.stream_evaluator_new(reality_stream, prediction_stream) feature_index = gt.feature_index_memory_new() feature_visitor = gt.feature_visitor_new(feature_index) stream_evaluator:evaluate(feature_visitor) stream_evaluator:show() -- write results filenumber = 1 width = 1600 for _, seqid in ipairs(feature_index:get_seqids()) do print(string.format("seqid '%s'", seqid)) filenumber = write_marked_regions(seqid, filenumber) end -- get ready for interactive mode fi = feature_index features = fi:get_all_features() marked_features = gt.features_get_marked(features) gt.export() genometools-1.5.1/gtscripts/gtdoc.lua000066400000000000000000000107701211610345200176760ustar00rootroot00000000000000--[[ Copyright (c) 2008-2011 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] require 'gtdoclib' function usage() io.stderr:write(string.format("Usage: [-html] [-lua] [-tex] [-v] %s " .. "gt_home\n", arg[0])) io.stderr:write("Generate documentation for the GenomeTools home " .. "directory gt_home.\n") os.exit(1) end local be_verbose = false local in_mode = "C" local out_mode = "txt" local file_mode = false local file_list = {} if #arg >= 1 then while #arg >= 1 and string.match(arg[1], "^-") do if string.match(arg[1], "^-f") then file_mode = true table.remove(arg, 1) while #arg > 1 and not string.match(arg[1], "^-") do file_list[#file_list+1] = arg[1] table.remove(arg, 1) end elseif string.match(arg[1], "^-h") then out_mode = "html" table.remove(arg, 1) elseif string.match(arg[1], "^-t") then out_mode = "latex" table.remove(arg, 1) elseif string.match(arg[1], "^-l") then in_mode = "Lua" table.remove(arg, 1) elseif string.match(arg[1], "^-v") then be_verbose = true table.remove(arg, 1) end end if #arg == 1 then gt_home = arg[1] else usage() end else usage() end local template_path = gt_home .. "/gtdata/modules/gtdoclib/" local export_C = { "src/core", "src/extended", "src/annotationsketch" } local export_Lua = { "src/gtlua", "gtdata/modules/gtlua.lua", "gtdata/modules/gtlua" } local doc_parser = DocParser:new() local doc_base = DocBase:new() local function show_rec_array(array, depth) assert(array) for _, v in ipairs(array) do if type(v) == "table" then print("") show_rec_array(v, depth + 2) else local indent = string.rep(".", depth) print(string.format("%s%s", indent, v)) end end end local function process_file(filename, be_verbose, is_lua) assert(filename) if (is_lua and (is_header(filename) or is_lua_file(filename))) or (not is_lua and is_api_header(filename)) then local ast = doc_parser:parse(filename, be_verbose, is_lua) if ast and be_verbose then print("showing ast:") show_rec_array(ast, 0) end if ast then doc_base:process_ast(ast, be_verbose) end end end local export = nil local is_lua = nil if in_mode == "C" then export = export_C is_lua = false else assert(in_mode == "Lua") export = export_Lua is_lua = true end assert(export) if file_mode then for _, f in ipairs(file_list) do local filename = gt_home .. "/" .. f process_file(filename, be_verbose, is_lua) end else for _, v in ipairs(export) do local filename = gt_home .. "/" .. v if is_dir(filename) then for f in lfs.dir(filename) do local filename = filename .. "/" .. f process_file(filename, be_verbose, is_lua) end else process_file(filename, be_verbose, is_lua) end end end local doc_visitor if out_mode == "txt" then doc_visitor = DocVisitorTxt:new() doc_base:accept(doc_visitor) elseif out_mode == "latex" then local header if in_mode == "C" then header = "libgenometools_header_latex.lp" else header = "gtscript_header_latex.lp" end doc_visitor = DocVisitorLaTeX:new(template_path, header) doc_visitor:show_header() doc_base:accept(doc_visitor) doc_visitor:show_footer() else assert(out_mode == "html") local header if in_mode == "C" then header = "libgenometools_header.lp" else header = "gtscript_header.lp" end doc_visitor = DocVisitorHTML:new(template_path, header) doc_visitor:show_header() doc_base:accept(doc_visitor) doc_visitor:show_footer() end genometools-1.5.1/gtscripts/repgen.lua000066400000000000000000000037031211610345200200540ustar00rootroot00000000000000--[[ Copyright (c) 2012 Stefan Kurtz Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] require 'gtlua' function usage() io.stderr:write(string.format("Usage: %s \n" , arg[0])) os.exit(1) end function outputmulticseq(indent, linewidth, times) for i = 1, times-1 do io.write('c') if indent >= linewidth then io.write('\n') indent = 0 else indent = indent + 1 end end return indent end function outputrepetitivesequence(iter) indent = 1; linewidth = 70; midseq = "acaccaccc" io.write(string.format(">%s for i=%d\na","ac^{i^2}acac^2ac^3 ... ac^ia",iter)) indent = outputmulticseq(indent,linewidth,iter * iter) assert (indent < linewidth) if indent + string.len(midseq) > linewidth then rest = linewidth - indent io.write(string.format("%*.*s\n",rest,rest,midseq)) if rest < string.len(midseq) then io.write(string.format("%s",midseq + rest)) end indent = 0 else io.write(string.format("acaccaccc")) indent = indent + string.len(midseq) end indent = outputmulticseq(indent,linewidth,iter) io.write("\n") end if #arg == 1 then i = arg[1] outputrepetitivesequence(i) else usage() end gt.export() genometools-1.5.1/gtscripts/sketch_constructed.lua000066400000000000000000000024051211610345200224700ustar00rootroot00000000000000function usage() io.stderr:write(string.format("Usage: %s Style_file PNG_file\n", arg[0])) os.exit(1) end if #arg == 2 then style_file = arg[1] png_file = arg[2] else usage() end -- load style file dofile(style_file) -- construct the example features seqid = "chromosome_21" nodes = {} -- construct a gene on the forward strand with two exons gene = gt.feature_node_new(seqid, "gene", 100, 900, "+") exon = gt.feature_node_new(seqid, "exon", 100, 200, "+") gene:add_child(exon) intron = gt.feature_node_new(seqid, "intron", 201, 799, "+") gene:add_child(intron) exon = gt.feature_node_new(seqid, "exon", 800, 900, "+") gene:add_child(exon) nodes[1] = gene -- construct a single-exon gene on the reverse strand -- (within the intron of the forward strand gene) reverse_gene = gt.feature_node_new(seqid, "gene", 400, 600, "-") reverse_exon = gt.feature_node_new(seqid, "exon", 400, 600, "-") reverse_gene:add_child(reverse_exon) nodes[2] = reverse_gene -- create diagram diagram = gt.diagram_new_from_array(nodes, 1, 1000) layout = gt.layout_new(diagram, 600) height = layout:get_height() -- create canvas canvas = gt.canvas_cairo_file_new_png(600, height, nil) -- sketch layout on canvas layout:sketch(canvas) -- write canvas to file canvas:to_file(png_file) genometools-1.5.1/gtscripts/sketch_parsed.lua000066400000000000000000000016441211610345200214150ustar00rootroot00000000000000function usage() io.stderr:write(string.format("Usage: %s Style_file PNG_file GFF3_file\n", arg[0])) io.stderr:write("Create PNG representation of GFF3 annotation file.\n") os.exit(1) end if #arg == 3 then style_file = arg[1] png_file = arg[2] gff3_file = arg[3] else usage() end -- load style file dofile(style_file) -- create feature index feature_index = gt.feature_index_memory_new() -- add GFF3 file to index feature_index:add_gff3file(gff3_file) -- create diagram for first sequence ID in feature index seqid = feature_index:get_first_seqid() range = feature_index:get_range_for_seqid(seqid) diagram = gt.diagram_new(feature_index, seqid, range) -- create layout layout = gt.layout_new(diagram, 600) height = layout:get_height() -- create canvas canvas = gt.canvas_cairo_file_new_png(600, height, nil) -- sketch layout on canvas layout:sketch(canvas) -- write canvas to file canvas:to_file(png_file) genometools-1.5.1/scripts/000077500000000000000000000000001211610345200155335ustar00rootroot00000000000000genometools-1.5.1/scripts/DW-pre-commit000077500000000000000000000010141211610345200200410ustar00rootroot00000000000000#!/bin/sh # copy this file to .git/hooks (i.e., overwrite the file .git/hooks/pre-commit) # to perform source checks before commits FILES=`git diff --cached --name-status HEAD | \ awk '$1 != "R" && $1 != "D" { print $2 }' | \ grep -v -e 'src/external' | \ grep -e '.*\.c$' -e '.*\.h$'` make -j8 curses=no cairo=no CFLAGS+=-fstrict-aliasing opt=no 64bit=yes CC='ccache gcc' [ $? -eq 0 ] && make -j8 spgt [ $? -eq 0 ] && if [ ${#FILES} -gt 0 ] then $PWD/scripts/src_check $FILES else exit 0 fi genometools-1.5.1/scripts/Suffixerator-calls.rb000077500000000000000000000010711211610345200216370ustar00rootroot00000000000000#!/usr/bin/env ruby require 'Suffixerator-table' numofargs = ARGV.length if numofargs != 2 STDERR.puts "Usage: $0 " exit 1 end program = ARGV[0] dbdna = ARGV[1] def makesystemcall(argstring) if system(argstring) STDERR.puts "# success #{argstring}" else STDERR.puts "system \"#{argstring}\" failed: errorcode #{$?}" exit 1 end end arglisttable = makesuffixeratorarglisttable(dbdna) arglisttable.each do |argstring| makesystemcall(program + " " + argstring) end STDERR.puts "# number of calls was #{arglisttable.length}" genometools-1.5.1/scripts/Suffixerator-table.rb000066400000000000000000001702141211610345200216330ustar00rootroot00000000000000def makesuffixeratorarglisttable(dbdna) arglisttable = [ " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 32", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 4", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 8", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 16", " -dna -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -bck -pl -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -tis -bsize 10 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 8 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 9 -blbuck 10 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 8 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 9 -locfreq 32", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 4", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 8", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 16", " -smap TransDNA -db #{dbdna} -pl -bsize 10 -blbuck 10 -locfreq 32", ] return arglisttable end genometools-1.5.1/scripts/add_revcmp.rb000077500000000000000000000032431211610345200201710ustar00rootroot00000000000000#!/usr/bin/env ruby class Sequence attr_reader :sequence, :length, :fasta_id attr_writer :sequence, :length, :fasta_id def initialize() @length = 0 @sequence = "" @fasta_id = "" end def read_sequence(file) if !File.exists?(file) raise "The specified file #{file} does not exist." end File.open(file) do |line| #read first line str = line.gets.chomp if (str =~ /^>.*$/) then #FASTA file, read header properly @fasta_id = str else #no FASTA file, but plain sequence @sequence = str @length = str.length end #read the rest of the file while nextline = line.gets nextline.chomp! @sequence = @sequence + nextline @length += nextline.length end end end end def revcomp(seq) seq.tr("aAcCgGtTnN","tTgGcCaAnN").reverse end class MSA attr_reader :seqs, :length, :cons def initialize(file) if !File.exists?(file) raise "The specified file #{file} does not exist." end @file = file @length = 0 @seqs = [] self.read end def read text = File.read(@file) text = text.split('>') text[1..text.length-1].each do |item| seq_components = item.split(/\n/) fasta_id=seq_components[0] sequence = seq_components[1..seq_components.length-1] seqObj = Sequence.new() seqObj.fasta_id = fasta_id seqObj.sequence = sequence.join seqObj.length = seqObj.sequence.length @seqs.push(seqObj) end @length = @seqs[0].length end end m = MSA.new(ARGV[0]) l = 0 m.seqs.each do |s| puts ">#{s.fasta_id}" puts "#{s.sequence}" l += s.length end m.seqs.reverse.each do |s| puts ">#{s.fasta_id}" puts "#{revcomp(s.sequence)}" end puts genometools-1.5.1/scripts/alloutputoptions.rb000077500000000000000000000014071211610345200215320ustar00rootroot00000000000000#!/usr/bin/env ruby def turnwheels(outlist) numofalphabets = outlist.length wheelspace = Array.new alphasizes = Array.new 0.upto(numofalphabets-1) do |z| alphasizes[z] = 2 wheelspace[z] = 0 end z = numofalphabets-1 while true output = false 0.upto(numofalphabets-1) do |i| if wheelspace[i] == 1 output = true print " #{outlist[i]}" end end if output puts "" end stop = false while not stop wheelspace[z] = wheelspace[z]+1 if wheelspace[z] == alphasizes[z] wheelspace[z] = 0 if z == 0 return end z = z - 1 else z = numofalphabets-1 stop = true end end end end turnwheels(["-tis","-suf","-bwt","-lcp"]) genometools-1.5.1/scripts/appendsuffix.rb000077500000000000000000000065701211610345200205670ustar00rootroot00000000000000#!/usr/bin/ruby # # Copyright (c) 2011 Giorgio Gonnella # Copyright (c) 2011 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # usage = <<-end_usage Usage: #$0 [+] Find macro names, function names and typedefs in a C file (templatefilename) and append "_" followed by the specified suffix to these identifiers and to further identifiers specified as optional arguments. end_usage if ARGV.size < 2 || !File.exists?(ARGV[0]) puts usage exit end class IdentifiersCollection attr_reader :macros, :functions, :types def initialize(c_code) uncommented = delcomments(c_code) toplevel = delblocks(uncommented) @macros = findmacronames(toplevel) notpreproc_toplevel = delpreproc(toplevel) @functions = findfunctionnames(notpreproc_toplevel) @types = findtypes(notpreproc_toplevel) end private def delcomments(input) output = "" prevc = nil state = :code input.each_byte do |c| if state == :comment state = :code if c == ?/ and prevc == ?* else if c == ?* and prevc == ?/ state = :comment output.chop! else output << c end end prevc = c end return output end def delblocks(uncommented) output = "" level = 0 uncommented.each_byte do |c| level += 1 if c == ?{ output << c if level == 0 level -= 1 if c == ?} end return output end def delpreproc(input) state = :notpreproc prevc = nil output = "" input.each_byte do |c| if state == :preproc state = :notpreproc if c == ?\n and prevc != ?\\ else if c == ?# state = :preproc else output << c end end prevc = c end return output end def findmacronames(toplevel) toplevel.scan(/#\s*define\s(\w+)/).flatten end def findfunctionnames(notpreproc_toplevel) notpreproc_toplevel.scan(/(\w+)\s*\([^\*].*?\)/m).flatten end def findtypes(notpreproc_toplevel) notpreproc_toplevel.scan(/typedef\s+[^;]*\s+(\w+)\s*;/m).flatten end end class CCode def initialize(c_code) @code = c_code @ids = IdentifiersCollection.new(c_code) end def append_suffix!(suffix, more_identifiers = []) ids = more_identifiers [:macros, :functions, :types].each do |idtype| ids += @ids.send(idtype) end ids.each do |id| @code.gsub!(/(\W+)(#{id})(\W+)/m) {"#$1#$2_#{suffix}#$3"} end end def to_s @code end end input = IO.read(ARGV.shift) suffix = ARGV.shift more_identifiers = ARGV code = CCode.new(input) code.append_suffix!(suffix, more_identifiers) print code genometools-1.5.1/scripts/blat2gff3000077500000000000000000000040701211610345200172340ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2006-2007 Gordon Gremme # Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'getoptlong' $:.push(File.dirname($0)) require 'gff3' # parse options opts = GetoptLong.new( [ "--max-mismatches", "-m", GetoptLong::REQUIRED_ARGUMENT ] ) max_mismatches = nil opts.each do |opt, arg| raise if opt != "--max-mismatches" max_mismatches = arg.to_i end # read input sequences = {} ARGF.each do |line| matches, misMatches, repMatches, nCount, qNumInsert, qBaseInsert, \ tNumInsert, tBaseInsert, strand, qName, qSize, qStart, qEnd, tName, tSize, \ tStart, tEnd, blockCount, blockSizes, qStarts, tStarts = line.split if not max_mismatches or misMatches.to_i <= max_mismatches then if sequences[tName] then sequences[tName].update_range(tStart.to_i, tEnd.to_i) else sequences[tName] = Sequence.new(tStart.to_i, tEnd.to_i) end gene = Gene.new(Range.new(tStart.to_i + 1, tEnd.to_i + 1), strand[0..0].to_s) exon_start_pos = tStarts.split(',') exon_sizes = blockSizes.split(',') 1.upto(blockCount.to_i) do |i| gene.add_exon(Range.new(exon_start_pos[i-1].to_i + 1, \ exon_start_pos[i-1].to_i + exon_sizes[i-1].to_i)); end sequences[tName].add_gene(gene); end end # output gff3_output(sequences, "blat") genometools-1.5.1/scripts/calcmonosize.rb000077500000000000000000000025421211610345200205540ustar00rootroot00000000000000#!/usr/bin/env ruby # compute the size of the representation of a monotone sequence of integers # the representation is described in author = # Gonnella, G. and Kurtz, S. # Readjoiner: a fast and memory efficient string graph-based sequence assembler # BMC Bioinformatics, 13, http://www.biomedcentral.com/1471-2105/13/82, # 2012 def log2(v) return Math.log(v)/Math.log(2.0) end def monotonesize(numofelems,maxvalue,trace=false) beta = log2 maxvalue.ceil minbits = nil mindelta = nil extra = nil 0.upto(beta) do |delta| bits = numofelems * delta + 2 ** (beta-delta) if trace puts "delta=#{delta},beta=#{beta},bits=#{bits/8}" end if minbits.nil? or bits < minbits minbits = bits mindelta = delta extra = 2 ** (beta-delta) end end return mindelta, minbits, extra end [10,20,30,40,50].each do |elems| numofelems = elems * 100000 [10,20,30,40,50].each do |maxval| maxvalue = numofelems * maxval mindelta, minbits, extra = monotonesize(numofelems,maxvalue) print "#{numofelems} #{maxvalue} #{mindelta} #{minbits} " printf("%.2f\n",minbits/numofelems.to_f) end end maxvalue = 2329908870 numofelems = 2492653 mindelta, minbits, extra = monotonesize(numofelems,maxvalue,true) print "#{numofelems} #{maxvalue} #{mindelta} #{minbits} " printf("%.2f %u %u\n",minbits/numofelems.to_f,minbits/8,extra/8) genometools-1.5.1/scripts/callrununique.sh000077500000000000000000000017501211610345200207640ustar00rootroot00000000000000#!/bin/sh # # Copyright (c) 2009 Stefan Kurtz # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. set -e -x cd testsuite AT=../testdata/at1MB U8=../testdata/U89959_genomic.fas ../scripts/rununique.sh ../bin/gt 10 20 ${U8} ${AT} cd .. genometools-1.5.1/scripts/calltestcase.sh000077500000000000000000000002401211610345200205350ustar00rootroot00000000000000#!/bin/sh if test $# -ne 1 then echo "Usage: $0 " exit 1 fi cd testsuite env -i ./testsuite.rb -gttestdata ${GTTESTDATA} -keywords ${1} cd .. genometools-1.5.1/scripts/check_api_includes000077500000000000000000000001311211610345200212500ustar00rootroot00000000000000#!/bin/bash find src/ -name '*_api.h' | xargs grep include | grep '"' | grep -v 'api.h"' genometools-1.5.1/scripts/check_core_includes000077500000000000000000000001351211610345200214330ustar00rootroot00000000000000#!/bin/bash find src/core -name '*.h' | xargs grep '#include' | grep '"' | egrep -v '"core/' genometools-1.5.1/scripts/checkchains.rb000077500000000000000000000022351211610345200203300ustar00rootroot00000000000000#!/usr/bin/env ruby def runchain2dimvschain2dim(args,matchfile) system "cat #{matchfile} | ../scripts/rf2of.rb > tmp.of" system "../bin/gt chain2dim " + args + " -m tmp.of > gtchain.out" system "chain2dim.x " + args + " tmp.of > vschain.out" system "cmp -s gtchain.out vschain.out" end params = ["-global", "-silent -global", "-local -wf 1.8", "-local -wf 0.5", "-local -maxgap 20", "-local 2b", "-local 55p -silent", "-global gc", "-global ov", "-global gc -wf 1.5", "-global ov -wf 1.8", "-global -maxgap 10", "-global gc -wf 1.5 -maxgap 10", "-global ov -wf 1.8 -maxgap 10", "-local", "-local 2p", "-local 20", "-local 2p -wf 1.8", "-local 2b -wf 1.8", "-local 20 -wf 1.8", "-local -wf 1.8 -maxgap 20", "-local 2p -wf 1.8 -maxgap 10", "-local 2b -wf 1.8 -maxgap 10", "-local 20 -wf 1.8 -maxgap 10"] resultdir="#{ENV['GTTESTDATA']}/repfind-result" Dir.foreach("#{resultdir}") do |matchfile| if matchfile.match(/^\S+\.fna-\S+\.fna.result$/) params.each do |args| runchain2dimvschain2dim(args,"#{resultdir}/#{matchfile}") end end end system "rm -f tmp.of gtchain.out vschain.out" genometools-1.5.1/scripts/checklcp.sh000077500000000000000000000003011211610345200176400ustar00rootroot00000000000000#!/bin/sh set -e -x if test $# -ne 1 then echo "Usage: $0 " exit 1 fi gt suffixerator -db $1 -dna -suf -tis -lcp -indexname sideeff gt dev sfxmap -lcp -tis -suf -esa sideeff genometools-1.5.1/scripts/checkmaxpairs.sh000077500000000000000000000020701211610345200207130ustar00rootroot00000000000000#!/bin/sh #set -e -x usage() { echo "Usage: $0 minlength [-q query] file1 [file2 ...]" } checkerror() { $1 if test $? -ne 0 then echo "failure: ${1}" exit 1 fi } cleanhashlines() { TMPFILE=`mktemp TMP.XXXXXX` || exit 1 sed -e '/^#/d' $1 > ${TMPFILE} mv ${TMPFILE} $1 } if test $# -lt 2 then usage exit 1 fi queryfile="" minlength=$1 if test "$2" = "-q" then if test $# -lt 4 then usage exit 1 fi queryfile=$3 shift shift fi shift filenames=$* for filename in ${filenames} do echo "$0 ${minlength} ${filename}" checkerror "../bin/gt suffixerator -algbds 3 43 120 -db ${filename} -indexname sfxidx -dna -suf -tis -lcp -pl" if test "X${queryfile}" = "X" then checkerror "../bin/gt repfind -l ${minlength} -ii sfxidx" > result.mp cleanhashlines result.mp else checkerror "../bin/gt repfind -l ${minlength} -q ${queryfile} -ii sfxidx" > result.mp cleanhashlines result.mp fi resultfile="${GTTESTDATA}/repfind-result/`basename ${filename}`.result" checkerror "cmp -s ${resultfile} result.mp" done genometools-1.5.1/scripts/checktallymer.sh000077500000000000000000000036671211610345200207350ustar00rootroot00000000000000#!/bin/sh checkerror() { if test $? -ne 0 then echo "failure: ${cmd}" exit 1 else echo "run ${cmd}" fi } cerr() { $* if [ $? -ne 0 ] then echo "failure: $*" exit 1 fi } if test $# -ne 1 then echo "Usage: $0 " exit 1 fi mersize=20 inputfile=$1 outoptions="-counts -pl -mersize ${mersize} -minocc 2 -maxocc 30" #PRECMD="valgrind.sh" PRECMD="env -i" cerr "bin/gt suffixerator -sat direct -db ${inputfile} -algbds 3 43 120 -tis -suf -lcp -pl -dna -indexname sfxidx" cmd="env -i bin/gt tallymer mkindex -test -mersize ${mersize} -esa sfxidx" ${cmd} > tmp1 checkerror cerr "mkvtree.x -db ${inputfile} -tis -suf -lcp -pl -dna -indexname mkvidx" cmd="tallymer-mkindex -mersize ${mersize} mkvidx" ${cmd} > tmp2 checkerror grep -v '^#' tmp2 > tmp2.2 mv tmp2.2 tmp2 cerr "cmp -s tmp1 tmp2" rm -f tmp[12] cmd="tallymer-mkindex ${outoptions} -indexname mkv-tyr-index mkvidx" ${cmd} checkerror cmd="${PRECMD} bin/gt tallymer mkindex ${outoptions} -indexname tyr-index -esa sfxidx" ${cmd} checkerror if test -s tyr-index.mct then cmd="${PRECMD} bin/gt tallymer search -strand fp -output qseqnum qpos counts sequence -test -tyr tyr-index -q ${AT}" ${cmd} > tmp1 checkerror cmd="tallymer-search -strand fp -output qseqnum qpos counts sequence mkv-tyr-index ${AT}" ${cmd} > tmp2 checkerror grep -v '^#' tmp2 > tmp2.2 mv tmp2.2 tmp2 cerr "cmp -s tmp1 tmp2" if test ${inputfile} = "testdata/Duplicate.fna" then echo "skip ${inputfile}" else cmd="${PRECMD} bin/gt tallymer occratio -minmersize 10 -maxmersize 500 -esa sfxidx -output total unique nonunique nonuniquemulti relative" ${cmd} > tmp1 checkerror grep -v '^#' tmp1 > tmp1.2 mv tmp1.2 tmp1 cmd="tallymer-occratio -minmersize 10 -maxmersize 500 -output total unique nonunique nonuniquemulti relative mkvidx" ${cmd} > tmp2 checkerror grep -v '^#' tmp2 > tmp2.2 mv tmp2.2 tmp2 cerr "cmp -s tmp1 tmp2" fi fi rm -f tmp[12] genometools-1.5.1/scripts/checkunique.sh000077500000000000000000000003541211610345200204000ustar00rootroot00000000000000#!/bin/sh set -e -x if test $# -lt 4 then echo "Usage: $0 ..." exit 1 fi rununique.sh ../bin/gt $* | grep -v '^#' > shit rununique-test.sh $* | grep -v '^#' > shit-test diff shit shit-test genometools-1.5.1/scripts/class_gen.rb000077500000000000000000000173451211610345200200330ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2013 Dirk Willrodt # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # # # # create a new abstract class, or uses an abstract class to start an # implementation of it. # see src/core/example_rep.h # src/core/example.[ch] # for abstract class example and src/core/example_a.[ch] # src/core/example_b.[ch] # for implementations thereof. require 'optparse' require 'ostruct' require "erb" $:.unshift File.join(File.dirname(__FILE__), ".") require "codegen_module.rb" $CONFIG = ENV["GT_CODEGEN_CONFIG"] || "~/.gitconfig" module ClassGenOpts def self.parse(args) options = OpenStruct.new options.editor = "editor" options.create = true options.force = false options.refcount = true opts = OptionParser.new() opts.program_name = File.basename($0) opts.version = 0 , 1 opts.release = 1 opts.banner = "USAGE: #{opts.program_name} [options] dirname basename" opts.separator "" opts.separator "editor will open during file-creation, after editing, safe" opts.separator "the file, more files will be created based on that file" opts.separator "" opts.separator "Specific options:" opts.on("--editor EDITOR", "Your editor of choice to edit source code, ", "defaults to 'editor' which is only set on ", "Debion style systems" ) do |editor| options.editor = editor end opts.on("-f", "--force", "overwrite files if they already exist. _rep.h ", "file can be reused with --no-create.") do |force| options.force = force end opts.on("--[no-]create", "defaults to --create, will overwrite _rep.h ", "file if it exists (with --force). Otherwise ", "it will try to reopen it for editing. ", "(usufull if something went wrong in the first ", "step)" ) do |create| options.create = create end opts.on("--[no-]refcount", "add reference counting to the class interface ", "defaults to true.") do |refcount| options.refcount = refcount end opts.separator "" opts.separator "Common options" opts.on("-h", "--help", "print this help end exit") do puts opts exit end opts.on("--version", "print version and exit") do puts opts.ver exit end opts.parse!(args) if (args.length != 2) CodeGen.perror "wrong number of arguments\n" + opts end options.subdir = args[0] options.dirname = File.join "src", options.subdir if options.classname options.basename = File.join(options.dirname, File.basename(options.classname) + "_" + args[1]) else options.basename = File.join options.dirname, args[1] end return options end end def create_rep_file(options) repfile = File.new(options.repname, 'w') repfile << CodeGen.create_license guard_macro = File.basename(options.repname).gsub(/\./, '_').upcase fkt_pref = options.fkt_pref classN = options.classN subdir = options.subdir content = ERB.new($repfile).result(binding) repfile << ERB.new($hwrapper).result(binding) repfile.close end def fill_out_files(options) repfile = File.readlines(options.repname) options.functions = CodeGen.extract_functions_from_rep(options.classN, repfile) repfile.each_with_index do |line, idx| next unless line.match /XX\w+XX/ if line.match /XXfunctionNamesXX/ repfile[idx] = [] options.functions.each do |func, parameters| repfile[idx].push " #{options.classN}#{func} #{ func.gsub(/(^|[a-z])([A-Z])/) do replace = "" replace += $1 + '_' if $1.length > 0 replace += $2.downcase end};\n" end end if line.match /XXfunctionPtrXX/ repfile[idx] = [] indent = repfile[idx-1][/^.*\(/].length options.functions.each do |func, parameters| repfile[idx].push "#{' ' * indent}#{options.classN}#{func},\n" end repfile[idx][-1] = repfile[idx][-1].chomp.chop + ");\n" end end repfile.flatten! newfile = File.new(options.repname, 'w') newfile << repfile.join newfile.close end def create_interface_header(options) options.interfacename = options.basename + ".h" if File.exist?(options.interfacename) and not options.force CodeGen.perror "file #{options.interfacename} already exists\n" + "use --force to overwrite, with --no-create to reuse\n" + "(#$0 -h for details)" end i_file = File.new(options.interfacename, 'w') i_file << CodeGen.create_license classN = options.classN fkt_pref = options.fkt_pref functions = options.functions max_type_len = 0 max_type_len = "#{classN} *".length if options.refcount functions.each do |func, parameters| max_type_len = parameters[0].length if max_type_len < parameters[0].length end content = ERB.new($interface_header).result(binding) guard_macro = File.basename(options.interfacename).gsub(/\./, '_').upcase i_file << ERB.new($hwrapper).result(binding) end def create_interface_code(options) options.interfacename = options.basename + ".c" if File.exist?(options.interfacename) and not options.force CodeGen.perror "file #{options.interfacename} already exists\n" + "use --force to overwrite, with --no-create to reuse\n" + "(#$0 -h for details)" end i_code_file = File.new(options.interfacename, 'w') i_code_file << CodeGen.create_license classN = options.classN fkt_pref = options.fkt_pref functions = options.functions interface_funcs = "" functions.each do |func, paras| next if func == 'DeleteFunc' type = paras.shift interface_funcs += ERB.new($interface_func).result(binding) end create_func = ERB.new($create_func).result(binding) ref_func = ERB.new($ref_func).result(binding) cast_func = ERB.new($cast_func).result(binding) delete_func = ERB.new($delete_func).result(binding) class_new_fkt = ERB.new($class_new_fkt).result(binding) subdir = options.subdir i_code_file << ERB.new($interface_file).result(binding) i_code_file.close end begin options = ClassGenOpts.parse(ARGV); rescue OptionParser::InvalidOption => e CodeGen.perror e.message end options.repname = "#{options.basename}_rep.h" options.fkt_pref = File.basename(options.repname, '_rep.h') options.classN = CodeGen.filename2classname(options.basename) if File.exist?(options.repname) if not options.force CodeGen.perror "file #{options.repname} already exists\n" + "use --force to overwrite, with --no-create to reuse\n" + "(#$0 -h for details)" else if options.create create_rep_file(options) end end else create_rep_file(options) end system("#{options.editor} #{options.repname}") if options.create fill_out_files(options) else repfile = File.readlines(options.repname) options.functions = CodeGen.extract_functions_from_rep(options.classN, repfile) end create_interface_header(options) create_interface_code(options) genometools-1.5.1/scripts/class_implement.rb000077500000000000000000000103411211610345200212410ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2013 Dirk Willrodt # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # # # # creates an implementation skeleton of an abstract class # see src/core/example_rep.h # src/core/example.[ch] # for abstract class example and src/core/example_a.[ch] # src/core/example_b.[ch] # for implementations thereof. require 'optparse' require 'ostruct' require 'pp' require "erb" $:.unshift File.join(File.dirname(__FILE__), ".") require "codegen_module.rb" module ClassGenOpts def self.parse(args) options = OpenStruct.new options.force = false opts = OptionParser.new() opts.program_name = File.basename($0) opts.version = 0 , 1 opts.release = 1 opts.banner = "USAGE: #{opts.program_name} [options] dirname classname basename" opts.separator "" opts.separator "dirname + classname gives the path to the abstract class," opts.separator "basename will be added to classname for files of" opts.separator "implemetation" opts.separator "" opts.separator "Specific options:" opts.on("-f", "--force", "overwrite files if they already exist.") do |force| options.force = force end opts.separator "" opts.separator "Common options" opts.on("-h", "--help", "print this help end exit") do puts opts exit end opts.on("--version", "print version and exit") do puts opts.ver exit end opts.parse!(args) if (args.length != 3) CodeGen.perror "wrong number of arguments\n" + opts end options.dirname = File.join "src", args[0] options.classbase = File.join options.dirname, args[1] options.basename = options.classbase + '_' + args[2] if (File.exist?(options.basename + '.h') or File.exist?(options.basename + '.c')) and not options.force CodeGen.perror "Either or both file(s) #{options.basename}.[ch]\n" + "already exist. Use --force to overwrite.\n" + "(#{opts.program_name} -h for details)" end return options end end def create_header(options) h_file = File.new(options.basename + '.h', 'w') h_file << CodeGen.create_license classbase = options.classbase[4..-1] guard_macro = File.basename(options.basename).upcase + '_H' cvar= File.basename(options.classbase) icvar= File.basename(options.basename) fkt_pref = "gt_" + cvar ifkt_pref = "gt_" + icvar classN = CodeGen.filename2classname(options.classbase) iclassN = CodeGen.filename2classname(options.basename) content = ERB.new($implement_header).result(binding) h_file << ERB.new($hwrapper).result(binding) h_file.close end def create_src(options) src_file = File.new(options.basename + '.c', 'w') src_file << CodeGen.create_license classbase = options.classbase[/[^\/]+\/(.+)$/, 1] basename = options.basename[/[^\/]+\/(.+)$/, 1] classN = CodeGen.filename2classname(options.classbase) iclassN = CodeGen.filename2classname(options.basename) cvar= File.basename(options.classbase) icvar= File.basename(options.basename) fkt_pref = "gt_" + cvar ifkt_pref = "gt_" + icvar repfile = File.readlines(options.classbase + "_rep.h") functions = CodeGen.extract_functions_from_rep(classN,repfile) funcnames = [] cvar= File.basename(options.classbase) icvar= File.basename(options.basename) src_file << ERB.new($implement_src).result(binding) src_file.close end begin options = ClassGenOpts.parse(ARGV); rescue OptionParser::InvalidOption => e CodeGen.perror e.message end create_header(options) create_src(options) genometools-1.5.1/scripts/cleanpp.sh000077500000000000000000000010001211610345200175030ustar00rootroot00000000000000#!/bin/sh # clean all files comprising the different kind of indexes rm -f *.ssp rm -f *.llv rm -f *.llv2 rm -f *.skp rm -f *.al[12] rm -f *.des rm -f *.prj rm -f *.lcp rm -f *.lcp2 rm -f *.suf rm -f *.tis rm -f *.ois rm -f *.bwt rm -f *.bck rm -f *.sds rm -f *.kys rm -f *.iso rm -f *.sti rm -f *.sti1 rm -f *.cld rm -f *.cld1 rm -f *.crf rm -f *.cfr rm -f *.lsf rm -f *.mer rm -f *.mbd rm -f *.mct rm -f *.esq rm -f *.bdx rm -f *.fma rm -f *.fmd rm -f *.pbt rm -f *.md5 rm -f *.[1-9]cxm genometools-1.5.1/scripts/cmpdbfile.sh000077500000000000000000000015021211610345200200150ustar00rootroot00000000000000#!/bin/sh if test $# -lt 1 then echo "Usage: $0 " exit 1 fi checkerror() { $1 if test $? -ne 0 then echo "failure: ${1}" exit 1 fi } comparefiles() { TMPFILE1=`mktemp ../testsuite/TMP.XXXXXX` || exit 1 egrep -v 'prefixlength|integersize|readmode|realspecialranges' $1 > ${TMPFILE1} TMPFILE2=`mktemp ../testsuite/TMP.XXXXXX` || exit 1 egrep -v 'prefixlength|integersize|readmode|realspecialranges' $2 > ${TMPFILE2} checkerror "cmp -s ${TMPFILE1} ${TMPFILE2}" rm -f ${TMPFILE1} ${TMPFILE2} } options="$*" checkerror "../bin/gt suffixerator -algbds 3 43 120 -indexname /tmp/idx-sfx -des ${options}" MKVTREE="/Users/stefan/bin-ops/i686-apple-darwin/mkvtree.x" checkerror "${MKVTREE} -indexname /tmp/idx-mkv -dna ${options}" echo "XXX ${options}" comparefiles /tmp/idx-mkv.prj /tmp/idx-sfx.prj genometools-1.5.1/scripts/cmplcpintervals.sh000077500000000000000000000022371211610345200213040ustar00rootroot00000000000000#!/bin/sh checkerror() { if test $? -ne 0 then echo "failure: ${cmd}" exit 1 fi } if test $# -eq 1 then filenamelist="$1" else filenamelist=`find testdata/ -name '[A-Z]*.fna'` fi for filename in ${filenamelist} do echo "${filename}" cmd="env -i bin/gt suffixerator -tis -suf -lcp -dna -indexname sfx -db ${filename}" ${cmd} checkerror cmd="env -i RUBYLIB=gtruby LD_LIBRARY_PATH=lib scripts/lcpintervals.rb --itv sfx" ${cmd} > itvs.result1 checkerror cmd="env -i bin/gt dev sfxmap -enumlcpitvs -esa sfx" ${cmd} > itvs.result2 checkerror cmd="cmp -s itvs.result1 itvs.result2" ${cmd} checkerror cmd="env -i RUBYLIB=gtruby LD_LIBRARY_PATH=lib scripts/lcpintervals.rb --tree sfx" ${cmd} > itvtree.result1 checkerror cmd="env -i bin/gt dev sfxmap -enumlcpitvtree -esa sfx" ${cmd} > itvtree.result2 checkerror cmd="env -i bin/gt dev sfxmap -enumlcpitvtreeBU -esa sfx" ${cmd} > itvtree.result3 checkerror cmd="cmp -s itvtree.result1 itvtree.result2" ${cmd} checkerror cmd="cmp -s itvtree.result2 itvtree.result3" ${cmd} checkerror done rm -f itvs.result1 itvs.result2 rm -f itvtree.result1 itvtree.result2 itvtree.result3 genometools-1.5.1/scripts/code_templates.rb000066400000000000000000000232751211610345200210610ustar00rootroot00000000000000 $license = <<-END_LICENSE /* Copyright (c) <%=year%> <%=name%> <<%=email%>> Copyright (c) <%=year%> Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ END_LICENSE $repfile = <<-END_REPFILE #include #include "<%=subdir%>/<%=fkt_pref%>.h" typedef struct <%=classN%>Class <%=classN%>Class; typedef struct <%=classN%>Members <%=classN%>Members; /* TODO: add typedefs for functions here */ /* examples showcasing coding convention: typedef unsigned int (*<%=classN%>FooFunc)(<%=classN%>*, unsigned long*); typedef int *(*<%=classN%>BarFunc)(<%=classN%>*, unsigned long); */ typedef void (*<%=classN%>DeleteFunc)(<%=classN%>*); struct <%=classN%> { const <%=classN%>Class *c_class; <%=classN%>Members *members; }; struct <%=classN%>Class { size_t size; /* XXfunctionNamesXX do not change will be replaced by function names */ }; struct <%=classN%>Members {<% if options.refcount %>\n unsigned long refcount;<% end %> }; const <%=classN%>Class* gt_<%=fkt_pref%>_class_new(size_t size, <%= " "*(classN.length + fkt_pref.length + 26) %>\ /* XXfunctionPtrXX do not change */); <%=classN%>* gt_<%=fkt_pref%>_create(const <%=classN%>Class*); void*<%= ' ' * (classN.length + 8) %>\ gt_<%=fkt_pref%>_cast(const <%=classN%>Class*, <%= ' ' * (classN.length + fkt_pref.length + 22) %><%=classN%>*); END_REPFILE $hwrapper = <<-END_HWRAPPER #ifndef <%=guard_macro%> #define <%=guard_macro%> <%=content%> #endif END_HWRAPPER $gt_class_c = <<-END_GT_CLASS_C #include "core/ma.h" struct <%=klass%> { }; <%=creatordecl%> { <%=klass%> *<%=basename%>; <%=basename%> = gt_malloc(sizeof (<%=klass%>)); return <%=basename%>; } <%=destructordecl%> { gt_free(<%=basename%>); } END_GT_CLASS_C $gt_class_h = <<-END_GT_CLASS_H typedef struct <%=klass%> <%=klass%>; <%=creatordecl%>; <%=destructordecl%>; END_GT_CLASS_H $interface_header = <<-INTERFACE_HEADER /* Abstract class <%=classN%>, TODO: add documentation */ typedef struct <%=classN%> <%=classN%>; <% if options.refcount %>\ /* Increases the reference count of the <<%=classN%>>. */ <%=classN%>*<%=' '*(max_type_len - 1 - classN.length)%>\ gt_<%=fkt_pref%>_ref(<%=classN%> *<%=fkt_pref%>);\ <% end %>\ <%functions.each do |func, parameters| %> /* TODO: document and add parameter names */ <% type =parameters[0] + ' '*(max_type_len - parameters[0].length) %>\ <% type = type.gsub(/ [*]/, '* ') funcname = type + 'gt_' + fkt_pref + '_' + func[0..-5].gsub(/(^|.)([A-Z])/) do rep = '' rep = $1+'_' if $1.length >0 rep += $2.downcase end + '(' %>\ <%=funcname%>\ <% parameters[1..-1].each_with_index do |parameter, idx|%>\ <% if idx > 0 %>, <%= ' ' * funcname.length%>\ <% end %>\ <% if parameter[-1] == '*' %>\ <% puts parameter %>\ <%= parameter.chop%> *\ <% else %>\ <%= parameter%>\ <% end %>\ <% if parameter.match /^\#{classN}\\*$/ %>\ <%= fkt_pref %>\ <% else %>\ para<%=idx%> /*TODO: name*/\ <% end %>\ <% end %>);\ <%end %> INTERFACE_HEADER $ref_func = <<-REF_FUNC <%=classN%> *gt_<%=fkt_pref%>_ref(<%=classN%> *<%=fkt_pref%>) { gt_assert(<%=fkt_pref%>); <%=fkt_pref%>->members->refcount++; return <%=fkt_pref%>; } REF_FUNC $create_func = <<-CREATE_FUNC <%=classN%> *gt_<%=fkt_pref%>_create(const <%=classN%>Class *<%=fkt_pref%>_c) { <%=classN%> *<%=fkt_pref%>; gt_assert(<%=fkt_pref%>_c && <%=fkt_pref%>_c->size); <%=fkt_pref%> = gt_calloc((size_t) 1, <%=fkt_pref%>_c->size); <%=fkt_pref%>->c_class = <%=fkt_pref%>_c; <%=fkt_pref%>->members = gt_calloc((size_t) 1, sizeof (<%=classN%>Members)); return <%=fkt_pref%>; } CREATE_FUNC $cast_func = <<-CAST_FUNC void *gt_<%=fkt_pref%>_cast(GT_UNUSED const <%=classN%>Class *<%=fkt_pref%>_c, <%=' ' * (fkt_pref.length + 15)%><%=classN%> *<%=fkt_pref%>) { gt_assert(<%=fkt_pref%>_c && <%=fkt_pref%> && <%=fkt_pref%>->c_class == <%=fkt_pref%>_c); return <%=fkt_pref%>; } CAST_FUNC $delete_func = <<-DELETE_FUNC void gt_<%=fkt_pref%>_delete(<%=classN%> *<%=fkt_pref%>) { if (<%=fkt_pref%> != NULL) { <% if options.refcount %>\ if (<%=fkt_pref%>->members->refcount) { <%=fkt_pref%>->members->refcount--; return; } <%end %>\ gt_assert(<%=fkt_pref%>->c_class); if (<%=fkt_pref%>->c_class->delete_func != NULL) <%=fkt_pref%>->c_class->delete_func(<%=fkt_pref%>); gt_free(<%=fkt_pref%>->members); gt_free(<%=fkt_pref%>); } } DELETE_FUNC $interface_func = <<-INTERFACE_FUNC <%funcname = type + 'gt_' + fkt_pref + '_' + func[0..-5].gsub(/(^|.)([A-Z])/) do rep = '' rep = $1+'_' if $1.length >0 rep += $2.downcase end + '(' %> <%=funcname %>\ <%paras.each_with_index do |para,idx| %>\ <% if idx > 0 %>, <%= ' ' * (funcname.length) %>\ <% end %>\ <% if para[-1] == '*' %>\ <%= para.chop %> *\ <% else %>\ <%= para %>\ <% end %>\ <% if para.match /^\#{classN}\\*$/ %>\ <%= fkt_pref %>\ <% else %>\ para<%=idx%> /*TODO: name*/\ <% end %>\ <%end %>) { gt_assert(<%=fkt_pref%> != NULL); gt_assert(<%=fkt_pref%>->c_class != NULL); if (<%=fkt_pref%>->c_class->\ <%=func.gsub(/(^|.)([A-Z])/) do rep = '' rep = $1+'_' if $1.length >0 rep += $2.downcase \ end %> != NULL) return <%=fkt_pref%>->c_class->\ <%=func.gsub(/(^|.)([A-Z])/) do rep = '' rep = $1+'_' if $1.length >0 rep += $2.downcase \ end %>(\ <%paras.each_with_index do |para,idx| %>\ <% if idx > 0 %>, <%= ' ' * (func.length + fkt_pref.length + 23) %>\ <% end%>\ <% if para.match /^\#{classN}\\*$/ %>\ <%= fkt_pref %>\ <% else %>\ para<%=idx%> /*TODO: name*/\ <% end %>\ <%end %>); return\ <%if type.match /[*]/ %>\ NULL;\ <%elsif type.match /void/ %>\ ;\ <%else %>\ 0;\ <%end %> /* TODO: check if default return value is sane */ } INTERFACE_FUNC $class_new_fkt = <<-CLASS_NEW_FKT const <%=classN%>Class *gt_<%=fkt_pref%>_class_new(size_t size\ <%functions.each do |func, paras| %>, <%= ' ' * (27 + classN.length + fkt_pref.length)%>\ <%=classN%><%=func%> <%=func.gsub(/(^|.)([A-Z])/) do rep = '' rep = $1+'_' if $1.length > 0 rep += $2.downcase end%>\ <%end %>) { <%=classN%>Class *<%=fkt_pref%>_c = gt_malloc(sizeof (*<%=fkt_pref%>_c); <%=fkt_pref%>_c->size = size; <%functions.each do |func, paras| %>\ <% name = func.gsub(/(^|.)([A-Z])/) do rep = '' rep = $1+'_' if $1.length >0 rep += $2.downcase end %>\ <%=fkt_pref%>_c-><%=name%> = <%=name%>; <%end %>\ return <%=fkt_pref%>_c; } CLASS_NEW_FKT $interface_file = <<-INTERFACE_CODE #include "<%=subdir%>/<%=fkt_pref%>_rep.h" #include "core/assert_api.h" #include "core/ma.h" #include "core/unused_api.h" <%=create_func%> <% if options.refcount %>\ <%=ref_func%> <% end %>\ <%=cast_func%>\ <%=interface_funcs%> <%=class_new_fkt%> <%=delete_func%> INTERFACE_CODE $implement_header = <<-IMPLEMENT_HEADER #include "<%=classbase%>.h" /* Class <<%=iclassN%>>, Implements the <<%=classN%>> interface. TODO: add documentation */ typedef struct <%=iclassN%> <%=iclassN%>; /* Return a new <<%=classN%>> object, the implementation beeing of type <<%=iclassN%>>. TODO: add documentation */ <%=classN%>* <%=ifkt_pref%>_new(void /*TODO: add parameters*/); /* TODO: add prototypes of implementation <<%=iclassN%>> only functions */ IMPLEMENT_HEADER $implement_src = <<-IMPLEMENT_SRC #include "<%=classbase%>_rep.h" #include "<%=basename%>.h" #include "core/unused_api.h" struct <%=iclassN%> { <%=classN%> parent_instance; /* TODO: add implementation members */ }; <%functions.each do |func, parameters| %>\ <% type = parameters[0] %>\ <% funcnames << ifkt_pref + '_' + func[0..-5].gsub(/(^|.)([A-Z])/) do rep = '' rep = $1+'_' if $1.length >0 rep += $2.downcase end funcname = type + funcnames[-1] + '(' %>\ static <%=funcname%>\ <% parameters[1..-1].each_with_index do |parameter, idx|%>\ <% if idx > 0 %>, <%= ' ' * (funcname.length + 7)%>\ <% end %>GT_UNUSED \ <% if parameter[-1] == '*' %>\ <%= parameter.chop%> *\ <% else %>\ <%= parameter%>\ <% end %>\ <% if parameter.match /^\#{classN}\\*$/ %>\ <%= icvar %>\ <% else %>\ para<%=idx%> /*TODO: name*/\ <% end %>\ <% end %>) { /* TODO: add functionality */ return\ <% if type.match /[*]/ %>\ NULL;\ <% elsif type.match /void/ %>\ ;\ <% else %>\ 0;\ <% end %> /* TODO: check if default return value is sane */ } <%end %>\ /* TODO: implement <<%=iclassN%>> only functions */ /* map static local methods to interface */ const <%=classN%>Class* <%=ifkt_pref%>_class(void) { static const <%=classN%>Class *this_c = NULL; if (this_c == NULL) { this_c = <%=fkt_pref%>_class_new(sizeof (<%=iclassN%>), <%funcnames.each_with_index do |name,idx| %>\ <% if idx > 0 %>\ , <% end %>\ <%= ' ' * (fkt_pref.length + 24) %><%=name%>\ <%end %>); } return this_c; } #define <%=ifkt_pref%>_cast(cvar) \\ <%=fkt_pref%>_cast(<%=ifkt_pref%>_class(), cvar) <%=classN%>* <%=ifkt_pref%>_new(void /* TODO: add parameters */) { <%=classN%> *<%=cvar%>; <%=iclassN%> *<%=icvar%>; <%=cvar%> = <%=fkt_pref%>_create(<%=ifkt_pref%>_class()); <%=icvar%> = <%=ifkt_pref%>_cast(<%=cvar%>); /* TODO: initialise */ return <%=cvar%>; } IMPLEMENT_SRC genometools-1.5.1/scripts/codegen000077500000000000000000000123601211610345200170670ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2009-2010 Giorgio Gonnella # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require "erb" $:.unshift File.join(File.dirname(__FILE__), ".") require "codegen_module.rb" $help = <<-END_HELP \nCode generator for: - header file (license, ifndef/def/endif) - module files (header file and c file including the header) - class files (h and c files, basic skeleton) - tool files (based on tools/gt_template.[ch]) It requires name and email of the user, that are expected to be found in the [user] section of the user-specific git configuration file (#$GITCONFIG). You may specify another file using the env variable GT_CODEGEN_CONFIG. Usage: #$0 header|module|class|tool where is the directory under src where the files are written and has no gt_ prefix and is written in lower case, and if it consists of multiple words they are connected_with_underscores e.g. #$0 tool tools xyz #$0 header core abc_def There is absolutely no guarantee that the results are correct. Existing files are not overwritten or modified. Report bugs to . END_HELP def find_src_directory scripts_dir = File.dirname(File.expand_path($0)) src_dir = File.join(scripts_dir, "..", "src") return File.expand_path(src_dir) end def parse_args generators = %w{header module class tool help} CodeGen.perror("not enough arguments") if ARGV.size < 1 generator = ARGV[0] if (generator=="help") puts($help) exit(0) end CodeGen.perror("generator #{generator} unknown") if !generators.include?(generator) CodeGen.perror("not enough arguments") if ARGV.size < 3 CodeGen.perror("too many arguments") if ARGV.size > 3 path = File.join(find_src_directory, ARGV[1]) CodeGen.perror("Directory #{path} not found") if !File.directory?(path) basename = ARGV[2] return generator, path, basename end def check_file(path, basename, extension) filename = File.join(path, basename+"."+extension) CodeGen.perror("File #{filename} exists already") if File.exist?(filename) end def write_file(path, basename, extension, content) filename = File.join(path, basename+"."+extension) file = File.open(filename, "w+") puts File.expand_path(file.path) file.puts(content) file.close end def gen_header(path, basename, content = "") guard_macro = basename.upcase+"_H" header = $license + "\n" + ERB.new($hwrapper).result(binding) check_file(path, basename, "h") write_file(path, basename, "h", header) end def gen_module(path, basename, ccontent = "\n", hcontent = "") code = $license + "\n" + "#include \"#{File.basename(path)}/#{basename}.h\"" + ccontent check_file(path, basename, "c") gen_header(path, basename, hcontent) write_file(path, basename, "c", code) end def gen_class(path, basename) prefix = "gt_#{basename}_" klass = "Gt"+basename.gsub(/(^|_)(.)/){$2.upcase} creatordecl = "#{klass} *#{prefix}new(void)" destructordecl = "void #{prefix}delete(#{klass} *#{basename})" gen_module(path, basename, ERB.new($gt_class_c).result(binding), ERB.new($gt_class_h).result(binding)) end def prepare_tool_c(path, basename) tools_dir = File.join(find_src_directory, "tools") gt_template_c = File.expand_path(File.join(tools_dir, "gt_template.c")) CodeGen.perror("File #{gt_template_c} not found") if !File.exists?(gt_template_c) # skip license template: c_template = IO.read(gt_template_c) c_template =~ /(.*?)(#include.*)/m c_template = $2 structprefix = "Gt"+basename.gsub(/(^|_)(.)/){$2.upcase} c_template.gsub!("template", basename) c_template.gsub!("Template", structprefix) return $license + "\n" + c_template end def prepare_tool_h(path, basename) tools_dir = File.join(find_src_directory, "tools") gt_template_h = File.expand_path(File.join(tools_dir, "gt_template.h")) CodeGen.perror("File #{gt_template_h} not found") if !File.exists?(gt_template_h) h_template = IO.read(gt_template_h) # skip license template: h_template =~ /(.*?)(#ifndef.*)/m h_template = $2 h_template.gsub!("TEMPLATE", basename.upcase) h_template.gsub!("template", basename) return $license + "\n" + h_template end def gen_tool(path, basename) check_file(path, "gt_"+basename, "h") check_file(path, "gt_"+basename, "c") write_file(path, "gt_"+basename, "h", prepare_tool_h(path, basename)) write_file(path, "gt_"+basename, "c", prepare_tool_c(path, basename)) end # main generator, path, basename = parse_args name, email = CodeGen.find_user_data year = Time.now.year $license = ERB.new($license).result send("gen_#{generator}", path, basename) genometools-1.5.1/scripts/codegen_module.rb000066400000000000000000000031111211610345200210250ustar00rootroot00000000000000$:.unshift File.join(File.dirname(__FILE__), ".") require "code_templates.rb" $GITCONFIG = ENV["GT_CODEGEN_CONFIG"] || "~/.gitconfig" module CodeGen def CodeGen.perror(msg) STDERR.puts "#$0: error: #{msg}" STDERR.puts "Use '#$0 help' to print usage instructions" exit(1) end def CodeGen.find_user_data configfile = File.expand_path($GITCONFIG) if File.exist?(configfile) name = nil email = nil File.open(configfile) do |f| while (line = f.gets) && (!name||!email) do name = $1 if !name && line =~ /\s*name\s*=\s*(.*)\s*\n/ email = $1 if !email && line =~ /\s*email\s*=\s*(.*)\s*\n/ end end return name, email else self.perror("#$GITCONFIG file not found") exit end end def CodeGen.create_license name, email = CodeGen.find_user_data year = Time.now.year ERB.new($license).result(binding) end def CodeGen.filename2classname(filename) "Gt" + File.basename(filename).gsub(/(^|_)(.)/){$2.upcase} end def CodeGen.extract_functions_from_rep(classN, repfile) get_parameters=false functions = Hash.new repfile.each do |line| if line.match /^typedef (\S+( \S+)* \*?)\(\*#{classN}(\w+)\)/ functions[$3] = [$1] get_parameters = $3 end if get_parameters line.scan /(\w+(\s\w+)*[*]?)(,|\);)/ do |parameter| functions[get_parameters].push parameter[0] end get_parameters = false if line.match /\);/ end break if line.match /^struct #{classN}/ end return functions end end genometools-1.5.1/scripts/comparesfx.sh000077500000000000000000000003731211610345200202440ustar00rootroot00000000000000#!/bin/sh for filename in `scripts/enumseqfiles.sh` do # echo "${filename}" bin/gt suffixerator -db ${filename} -tis -v > tmp1 /local/kurtz/tallymer-test/bin/gt suffixerator -algbds 3 43 120 -db ${filename} -tis -v > tmp2 diff tmp1 tmp2 done genometools-1.5.1/scripts/create_amalgamation000077500000000000000000000001211211610345200214300ustar00rootroot00000000000000#!/bin/sh -e for FILE in $* do echo "$FILE\"" | sed 's%src/%#include "%' done genometools-1.5.1/scripts/ctags.sh000077500000000000000000000030451211610345200171750ustar00rootroot00000000000000#!/bin/sh # # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # try to differntiate between Exuberant Ctags and BSD Ctags ctags --version > /dev/null if [ $? -eq 0 ] then exuberantopts="--c++-kinds=+p --fields=+iaSKlm --extra=+q" fi # make a new tags file ctags -w ${exuberantopts} \ src/*.[ch] \ src/annotationsketch/*.[ch] \ src/core/*.[ch] \ src/examples/*.[ch] \ src/extended/*.[ch] \ src/gtlua/*.[ch] \ src/gth/*.[ch] \ src/ltr/*.[ch] \ src/match/*.[ch] \ src/mgth/*.[ch] \ src/tools/*.[ch] \ testsuite/*.rb \ scripts/*.rb genometools-1.5.1/scripts/diff-cover.rb000077500000000000000000000040751211610345200201150ustar00rootroot00000000000000#!/usr/bin/env ruby def copy(v,r) return Array.new(r) {v} end def partialsums(bseq) sum = 0 l = [0] bseq.each do |b| sum += b l = l.push(sum) end return l end def checkcover(v,psum,i) psum.each do |j| psum.each do |k| if (k-j) % v == i return true end end end return false end def checkallcover(v,psum) 0.upto(v-1) do |i| if not checkcover(v,psum,i) STDERR.puts "cannot find difference elements for #{i} in #{v}-cover" exit(1) end end end def diff_cover(check,logmod) dc = case logmod when 0 then [0] when 1 then [0,1] when 2 then [0,1,2] when 3 then [0,1,2,4] when 4 then [0,1,2,5,8] when 5 then [0,1,2,3,7,11,19] when 6 then [0,1,2,5,14,16,34,42,59] when 7 then [0,1,3,7,17,40,55,64,75,85,104,109,117] when 8 then [0,1,3,7,12,20,30,44,65,80,89,96,114, 122,128,150,196,197,201,219] else v = 2**logmod r = 0 while 24*r*r+36*r+13 < v r += 1 end bseq = copy(1,r) + copy(r+1,1) + copy(2*r+1,r) + copy(4*r+3,2*r+1) + copy(2*r+2,r+1) + copy(1,r) psum = partialsums(bseq) if check checkallcover(v,psum) end partialsums(bseq) end return dc end def usage() STDERR.puts "Usage: #{$0} [check] " exit(1) end check=false if ARGV.length == 1 maxcover=ARGV[0].to_i else if ARGV.length == 2 if ARGV[0] == 'check' check=true maxcover=ARGV[0].to_i else usage() end else usage() end end def formtype(dc,cflag) dc.collect {|a| "#{cflag}(" + a.to_s + ")"} end puts "static Diffvalue differencecovertab[] =" puts "{" lentab = [] 0.upto(maxcover) do |logmod| dc = diff_cover(check,logmod) lentab = lentab.push(dc.length) print " /* #{2**logmod} */ " + formtype(dc,"UScast").join(",") if logmod == maxcover puts "" else puts ", " end end puts "};" puts "" puts "static Diffrank differencecoversizes[]" puts " = {" + formtype(lentab,"UCcast").join(",") + "};" genometools-1.5.1/scripts/do.sh000077500000000000000000000010111211610345200164650ustar00rootroot00000000000000#!/bin/sh checkerror() { if test $? -ne 0 then echo "failure: ${cmd}" exit 1 else echo "okay: ${cmd}" fi } for cmpcharbychar in 0 1 do for dir in fwd rev cpl rcl do extra="" if cmpcharbychar -eq 1 then extra="-cmpcharbychar" fi cmd="gt suffixerator -dir ${dir} -algbds 3 43 120 -parts 5 -dna -v -pl -bck -tis -suf -lcp -bwt -des -db ${AT} -showtime ${extra}" ${cmd} checkerror cmd="gt dev sfxmap -tis -suf -lcp -bwt -des -esa at1MB" ${cmd} checkerror done done genometools-1.5.1/scripts/dos2unix000077500000000000000000000001671211610345200172400ustar00rootroot00000000000000#!/usr/bin/env ruby regex = /\r\n/ newstring = "\n" ARGF.each{ |line| line.gsub!( regex, newstring ) puts line } genometools-1.5.1/scripts/dwmake.rb000077500000000000000000000054261211610345200173420ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2010 Stefan Kurtz # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'ostruct' require 'optparse' require 'fileutils' def usage(opts,msg) STDERR.puts "#{$0}: #{msg}\n#{opts.to_s}" exit 1 end def parseargs(argv) options = OpenStruct.new options.m64 = false options.speed = false options.prof = false options.ddd = false options.threads = false opts = OptionParser.new opts.on("-m","--m64","compile 64 bit binary") do |x| options.m64 = true end opts.on("-s","--speed","optimize for speed") do |x| if options.ddd usage(opts,"-d and -s exclusive") end options.speed = true end opts.on("-p","--prof","compile for profiling") do |x| options.prof = true end opts.on("-d","--ddd","compile for debugging (no opt)") do |x| if options.speed usage(opts,"-d and -s exclusive") end options.ddd = true end opts.on("-j [n]", Integer, "number of processes for make") do |x| options.threads = true options.j = x || "" end rest = opts.parse(argv) if not rest.empty? usage(opts,"unnecessary arguments: #{rest}") exit 1 end return options end def makecompilerflags(fp,options) fp.print "all:\n\t\${MAKE} curses=no cairo=no" fp.print " CFLAGS+=-fstrict-aliasing" if options.ddd fp.print " opt=no" end if options.speed fp.print " assert=no amalgamation=yes" end if options.m64 fp.print " 64bit=yes" end if options.prof fp.print " prof=yes" end if options.threads fp.print " -j#{options.j}" end fp.puts " CC='ccache clang'" end if File.exists?('LocalMakefile') FileUtils.mv('LocalMakefile','LocalMakefile.previous') end options = parseargs(ARGV) File.open('LocalMakefile',"w") do |fp| makecompilerflags(fp,options) end if File.exists?('LocalMakefile.previous') and not FileUtils.compare_file('LocalMakefile','LocalMakefile.previous') STDERR.puts "Current and previous LocalMakefile files differ: first " + "remove them" exit 1 end system("make -f LocalMakefile") genometools-1.5.1/scripts/encodesql2gff3000077500000000000000000000034541211610345200202740ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2006-2007, 2012 Gordon Gremme # Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # $:.push(File.dirname($0)) require 'gff3' # read input sequences = {} ARGF.each do |line| bin, name, chrom, strand, txStart, txEnd, cdsStart, cdsEnd, exonCount, exonStarts, exonEnds, score, name2, cdsStartStat, cdsEndStat, exonFrames = line.split if sequences[chrom] then sequences[chrom].update_range(txStart.to_i+1, txEnd.to_i) else sequences[chrom] = Sequence.new(txStart.to_i+1, txEnd.to_i) end gene = Gene.new(Range.new(txStart.to_i+1, txEnd.to_i), strand) gene.name = name gene.attributes = { "Name2" => name2 } if (cdsStart.to_i > 0 and cdsEnd.to_i > 0) then gene.cds_pos = Range.new(cdsStart.to_i+1, cdsEnd.to_i) end exon_start_pos = exonStarts.split(',') exon_end_pos = exonEnds.split(',') 1.upto(exonCount.to_i) do |i| gene.add_exon(Range.new(exon_start_pos[i-1].to_i+1, exon_end_pos[i-1].to_i)); end sequences[chrom].add_gene(gene); end # output gff3_output(sequences, "ENCODE") genometools-1.5.1/scripts/enumseqfiles.sh000077500000000000000000000002411211610345200205670ustar00rootroot00000000000000#!/bin/sh find testdata ${GTTESTDATA} -type f \( -name '*.fsa.gz' -o\ -name '*.fna' -o\ -name '*.fsa' \) genometools-1.5.1/scripts/esq-in-bytes.sh000077500000000000000000000004711211610345200204140ustar00rootroot00000000000000#!/bin/sh set -e -x # set GTDIR as paht of genometools directory for filename in `${GTDIR}/scripts/findfasta.rb` do gt encseq encode -ssp no -sds no -md5 no -des no -no_esq_header \ -showstats -sat direct -indexname seq $filename # Now do something with the sequence ls -l seq.esq done genometools-1.5.1/scripts/evalsfxrun.sh000077500000000000000000000070141211610345200202710ustar00rootroot00000000000000#!/bin/bash # set -e -x if test $# -ne 1 then echo "Usage: $0 [small|all]" exit 1 fi if test "${PROJECT}XXX" = "XXX" then echo "$0: environment variable PROJECT not defined" exit 1 fi repetitivefiles="mfd paradoxus" case $1 in small) allfiles="at1MB ecoli1 ecoli2 yeast mfd" ;; all) allfiles="at1MB ecoli1 ecoli2 yeast mfd dmel human2 human22 paradoxus" ;; *) allfiles=$1 ;; esac code2file() { case $1 in at1MB) echo "${GTDIR}/testdata/at1MB";; mfd) echo "${HOME}/seqcmpprojects/MouthFootDisease/mfdallpart.fna.gz";; yeast) echo "${HOME}/seqcmpprojects/yeast.fna.gz";; human2) echo "${PROJECT}/genomes/primate/H_sapiens-build36.54-2009/Homo_sapiens.NCBI36.54.dna.chromosome.02.fa.gz";; human22) echo "${PROJECT}/genomes/primate/H_sapiens-build36.54-2009/Homo_sapiens.NCBI36.54.dna.chromosome.22.fa.gz";; dmel) echo "${HOME}/seqcmpprojects/d_mel.fna.gz";; ecoli1) echo "${PROJECT}/genomes/Bacteria/Escherichia_coli_K12/NC_000913.fna";; ecoli2) echo "${PROJECT}/genomes/Bacteria/Ecoli_O157_H7/AE005174.fna";; swiss1MB) echo "${GTTESTDATA}/swissprot/swiss1MB";; paradoxus) echo "${HOME}/seqcmpprojects/S-paradoxus.fna.gz";; *) echo "$0: illegal filecode $1" exit 1;; esac } checkrepetitive() { filename=$1 for cfc in $repetitivefiles do if test ${cfc} == ${filename} then return 1 fi done return 0 } suffixerator() { fc=$1 filename=`code2file $1` shift printf "# RUN $fc sfx $*\n" GT_ENV_OPTIONS=-showtime ${RUNNER} ${GTDIR}/bin/gt suffixerator -v -indexname sfx-id -tis -suf -db ${filename} $* | egrep '# TIME overall|# space peak' } sainesq() { fc=$1 filename=`code2file $1` shift printf "# RUN ${fc} sainesq\n" ${GTDIR}/bin/gt encseq encode -indexname sfx-id ${filename} GT_ENV_OPTIONS=-showtime ${RUNNER} ${GTDIR}/bin/gt dev sain -esq sfx-id | egrep '# TIME overall|# space peak' } sainfile() { fc=$1 filename=`code2file $1` shift printf "# RUN ${fc} sainfile\n" GT_ENV_OPTIONS=-showtime ${RUNNER} ${GTDIR}/bin/gt dev sain -file ${filename} | egrep '# TIME overall|# space peak' } sais() { fc=$1 filename=`code2file $1` shift printf "# RUN ${fc} sais-lite\n" ${ETC}/Ccode/SAIS-lite/sais.x ${filename} | egrep '# TIME overall|# space peak' } afconstruct() { fc=$1 filename=`code2file $1` shift printf "# RUN ${fc} afconstruct\n" Structatordir=${HOME}/Software/Structator1.1 TMPFILE=`mktemp /tmp/fastafile.XXXXXX` echo ${filename} | egrep '\.gz$' > /dev/null if test $? -eq 0 then cmd="gzip -c -d ${filename}" else cmd="cat ${filename}" fi ${cmd} > ${TMPFILE} if test $? -ne 0 then echo "Failure: ${cmd}" exit 1 fi ${Structatordir}/construct/afconstruct ${TMPFILE} -suf -alph ${Structatordir}/testdata/rna.alphab -time | egrep '# TIME overall' } mkesa() { fc=$1 printf "# RUN $fc mkesa\n" filename=`code2file $1` runmkesa-sfx.sh ${filename} } for rfc in $allfiles do fn=`code2file ${rfc}` if test ! -f ${fn} then echo "$0: ${fn} does not exist" exit 1 fi done # suffixerator ecoli2 -sat uint32 -dc 128 # exit 0 echo "# DATE `date +%Y-%m-%d-%H:%M`" echo "# HOSTNAME `hostname`" for rfc in $allfiles do checkrepetitive ${rfc} if test $? -eq 0 then suffixerator ${rfc} "" fi for dc in 32 128 256 do suffixerator ${rfc} -dc ${dc} done sainesq ${rfc} sainfile ${rfc} sais ${rfc} mkesa ${rfc} afconstruct ${rfc} rm -f sfx-id.* mkesa-idx.* done genometools-1.5.1/scripts/expand_license000077500000000000000000000062461211610345200204520ustar00rootroot00000000000000#!/usr/bin/env lua --[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] function usage() io.stderr:write(string.format("Usage: %s source_file [...]\n", arg[0])) io.stderr:write("Expand license string to full license in given source files.\n") os.exit(1) end if #arg == 0 then usage() end local tmpfile = "tempfile.txt" -- not nice, but ``pure'' lua doesn't have mktemp local license_string = [[ See LICENSE file or http://genometools.org/license.html for license details.]] local license_string_script = [[ # See LICENSE file or http://genometools.org/license.html for license details.]] local license_full = [[ Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.]] local license_full_script = [[ # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.]] for index, file in ipairs(arg) do io.output(tmpfile) for line in io.lines(file) do line = string.gsub(line, license_string, license_full) line = string.gsub(line, license_string_script, license_full_script) io.write(line) io.write("\n") end rval, err = os.rename(tmpfile, file) if not rval then error(err) end end genometools-1.5.1/scripts/failure.sh000077500000000000000000000012051211610345200175170ustar00rootroot00000000000000#!/bin/sh set -e -x if test $# -ne 3 then echo "Usage: $0 " exit 1 fi reference=$1 query=$2 threshold=$3 # exec in gt root dir # mkvtree.x -db ${reference} -indexname esa-mkv -dna -pl -lcp -suf -tis # vstree2tex.x -tis -suf -s esa-mkv > tmp.tex # gt suffixerator -tis -suf -dna -pl -db ${reference} -indexname esa-fwd # gt tagerator -e 2 -maxocc 20 -rw -esa esa-fwd -q ${query} gt packedindex mkindex -ssp -tis -indexname pck-rev -db ${reference} -sprank -dna -pl -bsize 10 -locfreq 32 -dir rev gt prebwt -maxdepth 4 -pck pck-rev gt tagerator -rw -best -e ${threshold} -pck pck-rev -q ${query} genometools-1.5.1/scripts/findfasta.rb000077500000000000000000000030401211610345200200170ustar00rootroot00000000000000#!/usr/bin/ruby def listdirectory(directory) # prepare regexp for entries to ignore # saves time for repeated regexp use, since it stays the same ignore_dirs = Regexp.compile(/^\.\.?$/) stack = Array.new stack.push(directory) while not stack.empty? d = stack.pop Dir.foreach(d) do |entry| if not ignore_dirs.match(entry) if File.stat("#{d}/#{entry}").file? yield "#{d}/#{entry}" else stack.push("#{d}/#{entry}") end end end end end def listselected(dirname,excludelist) suffixes = ["fastq","fasta","fna","fa","fsa.gz","fsa","FASTA.gz","FASTA"] listdirectory(dirname) do |filename| suffixes.each do |suffix| if filename.match(/\.#{suffix}$/) and not excludelist.member?(File.basename(filename)) yield filename end end end end testdata_exclude = ["solid_color_reads.fastq", "test2_wrong_begin.fastq", "test9_uneven_length.fastq", "test7_empty_seq.fastq", "test6_premature_end.fastq", "test4_different_seqlengths.fastq", "test3_different_seqnames.fastq", "corruptpatternfile.fna", "sw100K1.fsa", "sw100K2.fsa"] listselected("testdata",testdata_exclude) do |filename| puts filename end if ENV.has_key?("GTTESTDATA") gttestdata_exclude = ["trembl-section.fsa.gz"] listselected(ENV["GTTESTDATA"],gttestdata_exclude) do |filename| puts filename end end genometools-1.5.1/scripts/fmt_embl.rb000077500000000000000000000041751211610345200176570ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # def each_seq(filename) File.open(filename) do |file| (farr = file.read.split(">")).each do |fitem| seq = fitem.split("\n") fline = seq.shift next if fline.nil? sequence = seq.collect{|l| l.chomp}.join yield fline, sequence end end end if ARGV.length != 1 then STDERR.puts "Usage: #{$0} " exit 1 end j=0 begin each_seq(ARGV[0]) do |header, seq| # break up headers into words and create description lines not longer than # 70 characters of length hlines = [[]] llen = 0 lineno = 0 header.chomp.split(/\s+/).each do |word| if llen + word.length + 1 > 70 hlines.push([]) lineno += 1 llen = 0 end hlines[lineno].push(word) llen += word.length + 1 end i=1 puts "ID sequence#{j}" puts "XX" hlines.each do |hline| puts "DE #{hline.join(" ")}" end puts "XX" puts "SQ" print " " seq.each_byte do |c| putc c if i % 10 == 0 then print " " end if i % 60 == 0 then printf("%9s\n ", i) end i += 1 end printf(' '*(80-i%60-(i%60)/10-13) + "%9d\n", i-1) puts "//\n\n" j+=1 end rescue StandardError => msg STDERR.puts "Error: #{msg}" exit 1 end genometools-1.5.1/scripts/fmt_gbk.rb000077500000000000000000000042731211610345200175020ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # def each_seq(filename) File.open(filename) do |file| (farr = file.read.split(">")).each do |fitem| seq = fitem.split("\n") fline = seq.shift next if fline.nil? sequence = seq.collect{|l| l.chomp}.join yield fline, sequence end end end if ARGV.length != 1 then STDERR.puts "Usage: #{$0} " exit 1 end j=0 begin each_seq(ARGV[0]) do |header, seq| # break up headers into words and create description lines not longer than # 70 characters of length hlines = [[]] llen = 0 lineno = 0 header.chomp.split(/\s+/).each do |word| if llen + word.length + 1 > 65 hlines.push([]) lineno += 1 llen = 0 end hlines[lineno].push(word) llen += word.length + 1 end puts "LOCUS sequence#{j}" first = true hlines.each do |hline| if first then print "DEFINITION " first = false else print " " end puts "#{hline.join(" ")}" end puts "ORIGIN " i=1 print " 1 " seq.each_byte do |c| putc c if i % 10 == 0 then print " " end if i % 60 == 0 then printf("\n%9s ", i+1) end i += 1 end puts "\n//\n" j+=1 end rescue StandardError => msg STDERR.puts "Error: #{msg}" exit 1 end genometools-1.5.1/scripts/gdb-stack.sh000077500000000000000000000004051211610345200177300ustar00rootroot00000000000000#!/bin/sh if test $# -eq 0 then echo "Usage: $0 " exit 1 fi TMPFILE=`mktemp -t tmpfile.XXXXXX` shift echo "break exit" >> ${TMPFILE} echo "run $*" >> ${TMPFILE} echo "bt" >> ${TMPFILE} cat ${TMPFILE} | gdb ${GTDIR}/bin/gt rm -f ${TMPFILE} genometools-1.5.1/scripts/gen-esa-bottomup.rb000077500000000000000000000414311211610345200212540ustar00rootroot00000000000000#!/usr/bin/env ruby require 'ostruct' require 'optparse' def usage(opts,msg) STDERR.puts "#{$0}: #{msg}\n#{opts.to_s}" exit 1 end def parseargs(argv) options = OpenStruct.new options.key = nil options.usefile = false options.absolute = false options.with_process_branching = true options.with_process_lcpinterval = true options.process_lastvalue = true options.withlastfrompreviousbucket = false options.gtlcpvaluetypeset = false options.nodeclarations = false options.additionaluint32bucket = false opts = OptionParser.new opts.on("-k","--key STRING","use given key as suffix for all symbols") do |x| options.key = x end opts.on("--reader","generate code for the esa-reader") do |x| options.usefile = true end opts.on("--absolute","use absolute start positions to address suffixes") do |x| options.absolute = true end opts.on("--no_process_branchingedge","no processbranchingedge function") do |x| options.with_process_branching = false end opts.on("--no_process_lcpinterval","no processlcpinterval function") do |x| options.with_process_lcpinterval = false end opts.on("--no_process_lastvalue","no proceccing of lastsuftabvalue") do |x| options.process_lastvalue = false end opts.on("--gtlcpvaluetypeset","use GtLcpvaluetype for lcp type") do |x| options.gtlcpvaluetypeset = true end opts.on("--withlastfrompreviousbucket","process last value from previous bucket") do |x| options.withlastfrompreviousbucket = true end opts.on("--additionaluint32bucket","add uint32-bucket argument") do |x| options.additionaluint32bucket = true end opts.on("--no_declarations","do not output declarations") do |x| options.nodeclarations = true end rest = opts.parse(argv) if not rest.empty? usage(opts,"superfluous arguments") end if options.key.nil? usage(opts,"option --key is mandatory") end return options end def processleafedgeargs(options) if options.absolute return "unsigned long, /* position */" else return "unsigned long, /* seqnum */ unsigned long, /* relpos */" end end def spacer(width) s = "" 0.upto(width-1) do |idx| s += " " end return s end def previoussuffix_expr_get(width,variable,options) if options.absolute return variable + "," else return "gt_seqnumrelpos_decode_seqnum(snrp,#{variable}), #{" " * width} gt_seqnumrelpos_decode_relpos(snrp,#{variable})," end end def previoussuffix_param_get(width,options) return previoussuffix_expr_get(width,"previoussuffix",options) end def processbranching_call1(key,options) if options.with_process_branching return "if (processbranchingedge_#{key}(firstedge, TOP_ESA_BOTTOMUP_#{key}.lcp, &TOP_ESA_BOTTOMUP_#{key}.info, lastinterval->lcp, lastinterval->rb - lastinterval->lb + 1, &lastinterval->info, bustate, err) != 0) { haserr = true; }" else return "/* no call to processbranchingedge_#{key} */" end end def processbranching_call2(key,options) if options.with_process_branching return "unsigned long lastintervallcp = lastinterval->lcp, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP_#{key}(lcpvalue,lastintervallb); if (processbranchingedge_#{key}(true, TOP_ESA_BOTTOMUP_#{key}.lcp, &TOP_ESA_BOTTOMUP_#{key}.info, lastintervallcp, lastintervalrb - lastintervallb + 1, NULL, bustate, err) != 0) { haserr = true; }" else return "PUSH_ESA_BOTTOMUP_#{key}(lcpvalue,lastintervallb);" end end def processlcpinterval_decl(key,options) if options.with_process_lcpinterval return "static int processlcpinterval_#{key}(unsigned long, GtBUinfo_#{key} *, GtBUstate_#{key} *, GtError *err);" else return "/* no declaration of processlcpinterval_#{key} */" end end def processlcpinterval_call1(key,options) if options.with_process_lcpinterval return "if (processlcpinterval_#{key}(lastinterval->lcp, &lastinterval->info, bustate, err) != 0) { haserr = true; }" else return "/* no call to processlcpinterval_#{key} */" end end def processlcpinterval_call2(key,options) if options.with_process_lcpinterval return "if (processlcpinterval_#{key}(TOP_ESA_BOTTOMUP_#{key}.lcp, &TOP_ESA_BOTTOMUP_#{key}.info, bustate, err) != 0) { haserr = true; }" else return "/* no call to processlcpinterval_#{key} */" end end def showidxexpr(options) if options.withlastfrompreviousbucket return "idx + bustate->idxoffset" else return "idx" end end def process_suf_lcp(key,options) print <nextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_#{key}.lcp) { if (TOP_ESA_BOTTOMUP_#{key}.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_#{key}(firstedge, TOP_ESA_BOTTOMUP_#{key}.lcp, &TOP_ESA_BOTTOMUP_#{key}.info, #{previoussuffix_param_get(14,options)} bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_#{key}.lcp) { lastinterval = POP_ESA_BOTTOMUP_#{key}; lastinterval->rb = #{showidxexpr(options)}; #{processlcpinterval_call1(key,options)} if (lcpvalue <= TOP_ESA_BOTTOMUP_#{key}.lcp) { if (TOP_ESA_BOTTOMUP_#{key}.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } #{processbranching_call1(key,options)} lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_#{key}.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; #{processbranching_call2(key,options)} lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_#{key}(lcpvalue,#{showidxexpr(options)}); if (processleafedge_#{key}(true, TOP_ESA_BOTTOMUP_#{key}.lcp, &TOP_ESA_BOTTOMUP_#{key}.info, #{previoussuffix_param_get(16,options)} bustate, err) != 0) { haserr = true; } } } END_OF_FILE end def lastsuftabvalue_fromarray(options) if not options.usefile return "unsigned long lastsuftabvalue = bucketofsuffixes[numberofsuffixes-1];" else return "/* no assignment to lastsuftabvalue */" end end def lastsuftabvalue_get(key,options) if options.process_lastvalue print <nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP_#{key}.lcp > 0) { #{lastsuftabvalue_fromarray(options)} if (processleafedge_#{key}(false, TOP_ESA_BOTTOMUP_#{key}.lcp, &TOP_ESA_BOTTOMUP_#{key}.info, #{previoussuffix_expr_get(12,"lastsuftabvalue",options)} bustate, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP_#{key}.rb = #{showidxexpr(options)}; #{processlcpinterval_call2(key,options)} } } END_OF_FILE else print <previousbucketlastsuffix = #{accessbucketofsuffixes("numberofsuffixes-1",options)} bustate->firstedgefromroot = firstedgefromroot; } END_OF_FILE end end def seqnumrelpos_include(options) if not options.absolute return "#include \"seqnumrelpos.h\"" else return "/* no include for seqnumrelpos.h */" end end def processbranchingedge_decl(key,options) if options.with_process_branching return "static int processbranchingedge_#{key}(bool firstsucc, unsigned long, GtBUinfo_#{key} *, unsigned long, unsigned long, GtBUinfo_#{key} *, GtBUstate_#{key} *, GtError *);" else return "/* no declaration of processbranchingedge_#{key} */" end end def return_snrp_decl(options) if not options.absolute return "const GtSeqnumrelpos *snrp," else return "/* no parameter snrp */" end end def lcptype(options) if options.gtlcpvaluetypeset return "const GtLcpvaluetype" else return "const uint16_t" end end def additionaluint32bucket(options) if options.additionaluint32bucket return "const uint32_t *bucketofsuffixes_uint32,\n" + (" " * 24) + lcptype(options) else return "#{lcptype(options)}" end end def accessbucketofsuffixes(idx,options) if options.additionaluint32bucket return "bucketofsuffixes != NULL ? bucketofsuffixes[#{idx}] : (unsigned long) bucketofsuffixes_uint32[#{idx}];" else return "bucketofsuffixes[#{idx}];" end end def formatargv(argv) s = "\n #{argv[0]} #{argv[1]}" argv.each_with_index do |arg,i| if i > 1 s += "\n " + argv[i] end end return s end def initfirstinterval(key,options) if options.withlastfrompreviousbucket print <previousbucketlastsuffix == ULONG_MAX) { PUSH_ESA_BOTTOMUP_#{key}(0,0); firstedgefromroot = true; } else { firstedgefromroot = bustate->firstedgefromroot; } END_OF_FILE else print < Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* THIS FILE IS GENERATED by\n #{$0}#{formatargv(ARGV)}. DO NOT EDIT. */ #include #include "core/ma.h" #include "esa-seqread.h" #{seqnumrelpos_include(options)} END_OF_FILE if not options.nodeclarations print <spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo-1] #define POP_ESA_BOTTOMUP_#{key}\\ (stack->spaceGtBUItvinfo + (--stack->nextfreeGtBUItvinfo)) #define PUSH_ESA_BOTTOMUP_#{key}(LCP,LB)\\ if (stack->nextfreeGtBUItvinfo >= stack->allocatedGtBUItvinfo)\\ {\\ gt_assert(stack->nextfreeGtBUItvinfo ==\\ stack->allocatedGtBUItvinfo);\\ stack->spaceGtBUItvinfo\\ = allocateBUstack_#{key}(stack->spaceGtBUItvinfo,\\ stack->allocatedGtBUItvinfo,\\ stack->allocatedGtBUItvinfo+incrementstacksize,\\ bustate);\\ stack->allocatedGtBUItvinfo += incrementstacksize;\\ }\\ gt_assert(stack->spaceGtBUItvinfo != NULL);\\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lcp = LCP;\\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lb = LB;\\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo++].rb = ULONG_MAX typedef struct { unsigned long lcp, lb, rb; GtBUinfo_#{key} info; } GtBUItvinfo_#{key}; typedef struct { GtBUItvinfo_#{key} *spaceGtBUItvinfo; unsigned long allocatedGtBUItvinfo, nextfreeGtBUItvinfo; } GtArrayGtBUItvinfo_#{key}; GtArrayGtBUItvinfo_#{key} *gt_GtArrayGtBUItvinfo_new_#{key}(void) { GtArrayGtBUItvinfo_#{key} *stack = gt_malloc(sizeof (*stack)); stack->spaceGtBUItvinfo = NULL; stack->allocatedGtBUItvinfo = stack->nextfreeGtBUItvinfo = 0; return stack; } void gt_GtArrayGtBUItvinfo_delete_#{key}(GtArrayGtBUItvinfo_#{key} *stack, GtBUstate_#{key} *state) { unsigned long idx; for (idx=0; idxallocatedGtBUItvinfo; idx++) { freeBUinfo_#{key}(&stack->spaceGtBUItvinfo[idx].info,state); } gt_free(stack->spaceGtBUItvinfo); gt_free(stack); } static GtBUItvinfo_#{key} *allocateBUstack_#{key}(GtBUItvinfo_#{key} *ptr, unsigned long currentallocated, unsigned long allocated, GtBUstate_#{key} *state) { unsigned long idx; GtBUItvinfo_#{key} *itvinfo; itvinfo = gt_realloc(ptr,sizeof (*itvinfo) * allocated); gt_assert(allocated > currentallocated); for (idx=currentallocated; idxfirstedgefromroot; END_OF_FILE process_suf_lcp(key,options) print <firstedgefromroot = firstedgefromroot; } return haserr ? -1 : 0; } END_OF_FILE end if options.usefile print < 0); for (idx = 0; !haserr && idx < numberofsuffixes-1; idx++) { lcpvalue = (unsigned long) lcptab_bucket[idx+1]; previoussuffix = #{accessbucketofsuffixes("idx",options)} END_OF_FILE end process_suf_lcp(key,options) puts " }" lastsuftabvalue_get(key,options) if options.usefile puts " gt_GtArrayGtBUItvinfo_delete_#{key}(stack,bustate);" elsif options.process_lastvalue puts " stack->nextfreeGtBUItvinfo = 0; /* empty the stack */" end puts " return haserr ? -1 : 0;" puts "}" genometools-1.5.1/scripts/gen-esa-bottomup.sh000077500000000000000000000020241211610345200212560ustar00rootroot00000000000000#!/bin/sh TEMPLATE=src/match/esa-bottomup SC=scripts/gen-esa-bottomup.rb ${SC} --key maxpairs --reader --absolute \ --no_process_lcpinterval > ${TEMPLATE}-maxpairs.inc ${SC} --key spmsk --no_process_branchingedge > ${TEMPLATE}-spmsk.inc ${SC} --key rdjcv --reader --absolute \ --no_process_lcpinterval > ${TEMPLATE}-rdjcv.inc ${SC} --key rdjce --reader --absolute \ --no_process_lcpinterval > ${TEMPLATE}-rdjce.inc ${SC} --key errfind --reader --absolute > ${TEMPLATE}-errfind.inc ${SC} --key spmeq --no_process_lcpinterval > ${TEMPLATE}-spmeq.inc ${SC} --key spmvar > ${TEMPLATE}-spmvar.inc ${SC} --key shulen --reader --absolute \ --no_process_lcpinterval > ${TEMPLATE}-shulen.inc ${SC} --key shulen --gtlcpvaluetypeset --absolute --no_process_lastvalue \ --no_process_lcpinterval \ --withlastfrompreviousbucket \ --additionaluint32bucket \ --no_declarations > ${TEMPLATE}-shulen-RAM.inc genometools-1.5.1/scripts/gen-radixsort-ip.rb000077500000000000000000000252011211610345200212570ustar00rootroot00000000000000#!/usr/bin/env ruby require 'ostruct' require 'optparse' def usage(opts,msg) STDERR.puts "#{$0}: #{msg}\n#{opts.to_s}" exit 1 end def parseargs(argv) options = OpenStruct.new options.ulong = true opts = OptionParser.new opts.on("--ulongpair","generate code sorting pairs of ulongs") do |x| options.ulong = false end rest = opts.parse(argv) if not rest.empty? usage(opts,"superfluous arguments") end return options end def makekey(options) if options.ulong return "ulong" else return "ulongpair" end end def maketype(options) if options.ulong return "unsigned long" else return "GtUlongPair" end end def derefptr(ptr,options) if options.ulong return "*#{ptr}" else return "#{ptr}->a" end end def derefval(val,options) if options.ulong return "#{val}" else return "#{val}.a" end end options = parseargs(ARGV) print <values.#{makekey(options)}ptr[(binnum << rbuf->log_bufsize) + (unsigned long) rbuf->nextidx[binnum]]; } static void gt_radixsort_#{makekey(options)}_bin_update(#{maketype(options)} *target, GtRadixbuffer *rbuf, unsigned long binnum, #{maketype(options)} value) { unsigned long binoffset = binnum << rbuf->log_bufsize; rbuf->values.#{makekey(options)}ptr[binoffset + (unsigned long) rbuf->nextidx[binnum]] = value; if ((unsigned long) rbuf->nextidx[binnum] < rbuf->buf_size - 1) { rbuf->nextidx[binnum]++; } else { unsigned long j; #{maketype(options)} *wtargetptr, *rtargetptr, *rend, *valptr; wtargetptr = target + rbuf->endofbin[binnum] - (rbuf->buf_size - 1); rtargetptr = wtargetptr + rbuf->buf_size; rend = target + rbuf->startofbin[binnum+1]; valptr = rbuf->values.#{makekey(options)}ptr + binoffset; for (j=0; jbuf_size; j++) { *wtargetptr++ = *valptr; if (rtargetptr < rend) { *valptr = *rtargetptr++; } valptr++; } rbuf->nextidx[binnum] = 0; } rbuf->endofbin[binnum]++; } static void gt_radixsort_#{makekey(options)}_cached_shuffle(GtRadixbuffer *rbuf, #{maketype(options)} *source, GtCountbasetype len, size_t rightshift) { unsigned long binoffset, binnum, bufoffset, nextbin, firstnonemptybin = UINT8_MAX+1; GtCountbasetype *count, previouscount, current; #{maketype(options)} *sp, *spend = source + len; rbuf->countcached++; count = rbuf->startofbin; /* use same memory for count and startofbin */ for (binnum = 0; binnum <= UINT8_MAX; binnum++) { count[binnum] = 0; rbuf->nextidx[binnum] = 0; } for (sp = source; sp < spend; sp++) { count[GT_RADIX_KEY(UINT8_MAX,rightshift,#{derefptr("sp",options)})]++; } for (bufoffset = 0, binoffset = 0, binnum = 0; binnum <= UINT8_MAX; bufoffset += rbuf->buf_size, binoffset += count[binnum], binnum++) { unsigned long j; const unsigned long end = MIN(rbuf->buf_size,(unsigned long) count[binnum]); if (firstnonemptybin == UINT8_MAX+1 && end > 0) { firstnonemptybin = binnum; } for (j=0; jvalues.#{makekey(options)}ptr[bufoffset + j] = source[binoffset + j]; } } previouscount = count[0]; rbuf->startofbin[0] = rbuf->endofbin[0] = 0; nextbin = 0; for (binnum = 1UL; binnum <= UINT8_MAX; binnum++) { GtCountbasetype tmp = rbuf->startofbin[binnum-1] + previouscount; previouscount = count[binnum]; rbuf->startofbin[binnum] = rbuf->endofbin[binnum] = tmp; } /* to simplify compution of bin end */ rbuf->startofbin[UINT8_MAX+1] = len; for (current = 0, binnum = firstnonemptybin; current < len; binnum = nextbin - 1) { #{maketype(options)} currentvalue = gt_radixsort_#{makekey(options)}_bin_get(rbuf,binnum); while (true) { binnum = GT_RADIX_KEY(UINT8_MAX,rightshift,#{derefval("currentvalue",options)}); if (current != rbuf->endofbin[binnum]) { #{maketype(options)} tmp = currentvalue; currentvalue = gt_radixsort_#{makekey(options)}_bin_get(rbuf,binnum); gt_radixsort_#{makekey(options)}_bin_update(source,rbuf,binnum,tmp); } else { break; } } gt_radixsort_#{makekey(options)}_bin_update(source,rbuf,binnum,currentvalue); current++; /* skip over empty bins */ while (nextbin <= UINT8_MAX && current >= rbuf->startofbin[nextbin]) { nextbin++; } /* skip over full bins */ while (nextbin <= UINT8_MAX && rbuf->endofbin[nextbin-1] == rbuf->startofbin[nextbin]) { nextbin++; } if (current < rbuf->endofbin[nextbin-1]) { current = rbuf->endofbin[nextbin-1]; } } for (binnum = 0; binnum <= UINT8_MAX; binnum++) { unsigned long bufleft = (unsigned long) rbuf->nextidx[binnum]; if (bufleft > 0) { unsigned long j; #{maketype(options)} *targetptr, *valptr; valptr = rbuf->values.#{makekey(options)}ptr + (binnum << rbuf->log_bufsize); targetptr = source + rbuf->startofbin[binnum+1] - bufleft; for (j=0; j < bufleft; j++) { targetptr[j] = valptr[j]; } } } } static void gt_radixsort_#{makekey(options)}_uncached_shuffle(GtRadixbuffer *rbuf, #{maketype(options)} *source, GtCountbasetype len, size_t rightshift) { unsigned long binnum, nextbin; #{maketype(options)} *sp, *spend = source + len; GtCountbasetype current, previouscount, *count; rbuf->countuncached++; count = rbuf->startofbin; /* use same memory for count and startofbin */ for (binnum = 0; binnum <= UINT8_MAX; binnum++) { count[binnum] = 0; rbuf->nextidx[binnum] = 0; } for (sp = source; sp < spend; sp++) { count[GT_RADIX_KEY(UINT8_MAX,rightshift,#{derefptr("sp",options)})]++; } previouscount = count[0]; rbuf->startofbin[0] = rbuf->endofbin[0] = 0; nextbin = 0; for (binnum = 1UL; binnum <= UINT8_MAX; binnum++) { GtCountbasetype tmp = rbuf->startofbin[binnum-1] + previouscount; previouscount = count[binnum]; rbuf->startofbin[binnum] = rbuf->endofbin[binnum] = tmp; } /* to simplify compution of bin end */ rbuf->startofbin[UINT8_MAX+1] = len; for (current = 0; current < len; /* Nothing */) { #{maketype(options)} currentvalue = source[current]; GtCountbasetype *binptr; while (true) { binptr = rbuf->endofbin + GT_RADIX_KEY(UINT8_MAX,rightshift,#{derefval("currentvalue",options)}); if (current != *binptr) { #{maketype(options)} tmp = currentvalue; currentvalue = source[*binptr]; source[*binptr] = tmp; (*binptr)++; } else { break; } } source[current++] = currentvalue; (*binptr)++; /* skip over empty bins */ while (nextbin <= UINT8_MAX && current >= rbuf->startofbin[nextbin]) { nextbin++; } /* skip over full bins */ while (nextbin <= UINT8_MAX && rbuf->endofbin[nextbin-1] == rbuf->startofbin[nextbin]) { nextbin++; } if (current < rbuf->endofbin[nextbin-1]) { current = rbuf->endofbin[nextbin-1]; } } } static void gt_radixsort_#{makekey(options)}_shuffle(GtRadixbuffer *rbuf, #{maketype(options)} *source, GtCountbasetype len, size_t rightshift) { ((unsigned long) len > rbuf->cachesize ? gt_radixsort_#{makekey(options)}_cached_shuffle : gt_radixsort_#{makekey(options)}_uncached_shuffle) (rbuf,source,len,rightshift); } static void gt_radixsort_#{makekey(options)}_inplace_insertionsort(#{maketype(options)} *a, GtCountbasetype a_size) { #{maketype(options)} *optr, *iptr, *end = a + a_size; for (optr = a + 1; optr < end; optr++) { if (#{derefptr("optr",options)} < #{derefptr("(optr-1)",options)}) { #{maketype(options)} currentElement = *optr; *optr = *(optr-1); for (iptr = optr-1; iptr > a && #{derefval("currentElement",options)} < #{derefptr("(iptr-1)",options)}; iptr--) { *iptr = *(iptr-1); } *iptr = currentElement; } } } static void gt_radixsort_#{makekey(options)}_process_bin( GtStackGtRadixsort_stackelem *stack, GtRadixbuffer *rbuf, #{maketype(options)} *source, size_t shift) { unsigned long binnum; for (binnum = 0; binnum <= UINT8_MAX; binnum++) { GtCountbasetype width = rbuf->endofbin[binnum] - rbuf->startofbin[binnum]; if (width >= (GtCountbasetype) 2) { #{maketype(options)} *ptr = source + rbuf->startofbin[binnum]; if (width == (GtCountbasetype) 2) { if (#{derefptr("ptr",options)} > #{derefptr("(ptr+1)",options)}) { #{maketype(options)} tmp = *ptr; *ptr = *(ptr+1); *(ptr+1) = tmp; } } else { if (width <= (GtCountbasetype) 32) { rbuf->countinsertionsort++; gt_radixsort_#{makekey(options)}_inplace_insertionsort(ptr,width); } else { GtRadixsort_stackelem tmpstackelem; tmpstackelem.left.#{makekey(options)}ptr = ptr; tmpstackelem.len = width; tmpstackelem.shift = shift - CHAR_BIT; GT_STACK_PUSH(stack,tmpstackelem); } } } } } static void gt_radixsort_#{makekey(options)}_sub_inplace(GtRadixbuffer *rbuf, GtStackGtRadixsort_stackelem *stack) { GtRadixsort_stackelem currentstackelem; while (!GT_STACK_ISEMPTY(stack)) { currentstackelem = GT_STACK_POP(stack); gt_radixsort_#{makekey(options)}_shuffle(rbuf,currentstackelem.left.#{makekey(options)}ptr, currentstackelem.len, currentstackelem.shift); if (currentstackelem.shift > 0) { (void) gt_radixsort_#{makekey(options)}_process_bin(stack,rbuf, currentstackelem.left.#{makekey(options)}ptr, currentstackelem.shift); } } } END_OF_FILE genometools-1.5.1/scripts/gen-radixsort-ip.sh000077500000000000000000000002071211610345200212650ustar00rootroot00000000000000#!/bin/sh gen-radixsort-ip.rb > src/core/radixsort-ip-ulong.inc gen-radixsort-ip.rb --ulongpair > src/core/radixsort-ip-ulongpair.inc genometools-1.5.1/scripts/generate_hmmer_squid_h000077500000000000000000000003031211610345200221530ustar00rootroot00000000000000#!/bin/sh -e sed -e 's/#include /#include \ #include /'\ -e 's/@SQD_UINT16@/uint16_t/'\ -e 's/@SQD_UINT32@/uint32_t/'\ -e 's/@SQD_UINT64@/uint64_t/' $1 genometools-1.5.1/scripts/generate_hmmer_squidconf_h000077500000000000000000000015111211610345200230230ustar00rootroot00000000000000#!/bin/sh -e sed -e 's/#undef SQUID_VERSION/#define SQUID_VERSION "1.9g"/'\ -e 's/#undef SQUID_RELCODE/#define SQUID_RELCODE "squid1_9g"/'\ -e 's/#undef SQUID_DATE/#define SQUID_DATE "January 2003"/'\ -e 's/#undef SQUID_COPYRIGHT/#define SQUID_COPYRIGHT "Copyright (C) 1992-2003 HHMI\/Washington University School of Medicine"/'\ -e 's/#undef SQUID_LICENSE/#define SQUID_LICENSE "Freely distributed under the GNU General Public License (GPL)"/'\ -e 's/SIZEOF_UNSIGNED_SHORT 0/SIZEOF_UNSIGNED_SHORT 2/'\ -e 's/SIZEOF_UNSIGNED_INT 0/SIZEOF_UNSIGNED_INT 4/'\ -e 's/#define SIZEOF_UNSIGNED_LONG 0/#ifdef _LP64\ #define SIZEOF_UNSIGNED_LONG 8\ #else\ #define SIZEOF_UNSIGNED_LONG 4\ #endif/'\ -e 's/SIZEOF_UNSIGNED_LONG_LONG 0/SIZEOF_UNSIGNED_LONG_LONG 8/' $1 genometools-1.5.1/scripts/genlengthsorted.rb000077500000000000000000000017741211610345200212700ustar00rootroot00000000000000#!/usr/bin/env ruby # generate random DNA sequence of approx. the given totallength, such that the # sequence are ordered according to their length, with the shortest sequences # coming first. Stefan Kurtz, September 2012 if ARGV.length != 1 STDERR.puts "Usage: #{$0} " exit 1 end srand=37739292920 def randseq(width,len) seq = "" currentwidth=0 0.upto(len-1) do |idx| r = rand(3) cc = ['a','c','g','t'][rand(4)] seq += "#{cc}" if currentwidth < width currentwidth+=1 else seq += "\n" currentwidth=0 end end return seq.chomp end totallength = ARGV[0].to_i currentlen = 100 currentseqnum = 0 seqnumofthislength = 1 + rand(10) sumlen = 0 seqnum = 0 while sumlen < totallength puts ">sequence #{seqnum} of length #{currentlen}\n#{randseq(70,currentlen)}" seqnum+=1 sumlen += currentlen if currentseqnum < seqnumofthislength currentseqnum+=1 else currentseqnum=0 seqnumofthislength = 1 + rand(10) currentlen += 43 end end genometools-1.5.1/scripts/genomediff.rb000066400000000000000000000176421211610345200201750ustar00rootroot00000000000000# # Copyright (c) 2010 Dirk Willrodt # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # common functions for genomediff scripts # require 'tempfile' require 'fileutils' module Genomediff def Genomediff.reduceN(file,removeN) alphabet = [?a, ?A, ?c, ?C, ?g, ?G, ?t, ?T] newline = [?\n] charcount = 0 header = false wildcard = false first = true newfile = "" dirname = File.dirname(file) File.open(file, 'r') {|fp| basename = File.basename(file, ".*") newfile = File.join(dirname, basename + "_redN.fas") #return newfile if File.exist?(newfile) File.open(newfile, 'w') {|nfp| while cc = fp.getc if charcount == 80 nfp.putc ?\n charcount = 0 end if not header and cc == ?> header = true nfp.putc ?\n unless first first = false nfp.putc cc next elsif header if cc == ?\n header = false charcount = 0 end nfp.putc cc next end if cc == ?\n next end if not wildcard and not alphabet.include?(cc) wildcard = true unless removeN nfp.putc ?N charcount += 1 end next elsif wildcard if alphabet.include?(cc) wildcard = false nfp.putc cc charcount += 1 next end else nfp.putc cc charcount += 1 end end nfp.putc ?\n } } exit 1 unless File.exist?(newfile) return newfile end def Genomediff.reverse_and_concat(file) tf = Tempfile.new("gt_rev") tmpfile = tf.path tf.close dirname = File.dirname(file) `$GTDIR/bin/gt \ convertseq -o #{tmpfile} \ -force -r #{file}` basename = File.basename(file, ".*") newfile = File.join(dirname, basename + "_plus_rev.fas") `cat #{file} #{tmpfile} > #{newfile}` exit 1 unless File.exist?(newfile) File.unlink(tmpfile) return newfile end def Genomediff.pck_index(files,idxname,parameter) return `$GTDIR/bin/gt \ packedindex mkindex \ -mirrored \ -dna -dir rev -ssp -sprank -pl \ -db #{files} \ -indexname #{idxname} \ #{parameter}` end def Genomediff.esa_index(files,idxname,parameter) return `$GTDIR/bin/gt suffixerator \ -mirrored \ -dna -suf -tis -lcp -ssp \ -db #{files} \ -indexname #{idxname} \ #{parameter}` end def Genomediff.pck_genomediff(idxname,parameter) return `$GTDIR/bin/gt genomediff \ -indextype pck #{parameter} #{idxname}` end def Genomediff.esa_genomediff(idxname,parameter) return `$GTDIR/bin/gt genomediff \ -indextype esa #{parameter} #{idxname}` end end module Eval def Eval.pck_index(code, revfiles, log_fp, verbose, bsize, parts) puts "# INDEX PCK" if verbose idxname = File.join(File.dirname(revfiles[0]), code+"_pck") log_fp.puts "# RUN #{code} -pck -parts #{parts} -bsize #{bsize}" puts "# RUN #{code} -pck -parts"+ " #{parts} -bsize #{bsize}" if verbose output = Genomediff.pck_index(revfiles.join(" "),bsize,parts,idxname) /^# TIME overall \d+.\d+.*$/.match output log_fp.puts $& /^# space peak .*$/.match output log_fp.puts $& puts output if verbose return idxname end def Eval.esa_index(code, revfiles, log_fp, verbose, parts) puts "# INDEX ESA" if verbose m = code.match(/(\d+_\d+)_(\d+\.\d+)_(\d+)/) filecode, div, n = m[1], m[2], m[3] idxname = File.join(File.dirname(revfiles[0]), code+"_esa") log_fp.puts "# RUN #{filecode} d:#{div} n:#{n} -parts #{parts}" puts "# RUN #{filecode} d:#{div} n:#{n}"+ " -esa" if verbose output = Genomediff.esa_index(revfiles.join(" "),parts,idxname) /^# TIME overall \d+.\d+.*$/.match output log_fp.puts $& /^# space peak .*$/.match output log_fp.puts $& puts output if verbose return idxname end def Eval.pck_genomediff(code, idxname, parameter, log_fp, verbose) puts "# GENOMEDIFF PCK" if verbose m = code.match(/(\d+_\d+)_(\d+\.\d+)_(\d+)/) filecode, div, n = m[1], m[2], m[3] log_fp.puts "# RUN #{filecode} d:#{div} n:#{n} #{parameter}" puts "# RUN #{filecode} d:#{div} n:#{n} #{parameter}" if verbose output = Genomediff.pck_genomediff(idxname,parameter) /^# TIME overall \d+.\d+.*$/.match output log_fp.puts $& /^# space peak .*$/.match output log_fp.puts $& /^# mmap .*$/.match output log_fp.puts $& puts output if verbose end def Eval.esa_genomediff(code, idxname, parameter, log_fp, verbose) puts "# GENOMEDIFF ESA" if verbose m = code.match(/(\d+_\d+)_(\d+\.\d+)_(\d+)/) filecode, div, n = m[1], m[2], m[3] log_fp.puts "# RUN #{filecode} d:#{div} n:#{n} #{parameter}" puts "# RUN #{filecode} d:#{div} n:#{n} #{parameter}" if verbose output = Genomediff.esa_genomediff(idxname,parameter) /^# TIME overall \d+.\d+.*$/.match output log_fp.puts $& /^# space peak .*$/.match output log_fp.puts $& /^# mmap .*$/.match output log_fp.puts $& puts output if verbose end def Eval.run_pck_index_creation(code, revfiles, log_fp, verbose) self.pck_index(code, revfiles, log_fp, verbose, 8, 1) end def Eval.run_pck_index_bsize(code, revfiles, log_fp, verbose, bsize) self.pck_index(code, revfiles, log_fp, verbose, bsize, 1) end def Eval.run_pck_index_parts(code, revfiles, log_fp, verbose, parts) self.pck_index(code, revfiles, log_fp, verbose, 8, parts) end def Eval.run_esa_index_creation(code, revfiles, log_fp, verbose) self.esa_index(code, revfiles, log_fp, verbose, 1) end def Eval.run_esa_index_parts(code, revfiles, log_fp, verbose,parts) self.esa_index(code, revfiles, log_fp, verbose, parts) end def Eval.run_genomediff_pck(code, idxname, parameter, log_fp, verbose) parameter += " -v " if verbose self.pck_genomediff(code, idxname, parameter, log_fp, verbose) end def Eval.run_genomediff_esa(code, idxname, parameter, log_fp, verbose) parameter += " -v " if verbose self.esa_genomediff(code, idxname, parameter, log_fp, verbose) end end genometools-1.5.1/scripts/genswtest.sh000077500000000000000000000021741211610345200201210ustar00rootroot00000000000000#!/bin/sh VSTREEBIN=/projects/vstree/bin/i686-pc-linux-gnu if test ! -d ${VSTREEBIN} then VSTREEBIN=/Users/stefan/vstree/bin/i686-apple-darwin fi set -e -x if test $# -ne 4 then echo "Usage: $0 <# refseq> <# query seq> " exit 1 fi # modify the following if you need larger files. # but only use an extractfile that does not contain wildcard characters, # i.e. N etc. extractfile=testdata/U89959_genomic.fas lines=$1 seqref=$2 seqquery=$3 threshold=$4 createseq() { TMPFILE=`mktemp gt-test.XXXXXX` || exit 1 echo ">$3 -n $1" > ${TMPFILE}.extract grep -v '^>' ${extractfile} | $3 -n $1 >> ${TMPFILE}.extract gt mutate -rate 10 ${TMPFILE}.extract | grep -v '^#' > ${TMPFILE}.mut ${VSTREEBIN}/mkvtree -db ${TMPFILE}.mut -indexname ${TMPFILE} -ois -tis -dna ${VSTREEBIN}/vsubseqselect -minlength 100 -maxlength 200 -snum $2 ${TMPFILE} |\ grep -v '^#' | gawk '/.*/ {print ">\n" $1}' rm -f ${TMPFILE}.* } createseq $lines $seqref head > gt-test-refer createseq $lines $seqquery tail > gt-test-query scripts/failure.sh gt-test-refer gt-test-query ${threshold} genometools-1.5.1/scripts/gff3.rb000077500000000000000000000056001211610345200167110ustar00rootroot00000000000000# # Copyright (c) 2006-2007 Gordon Gremme # Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # class Gene def initialize(range, strand) @range = range if not (strand == '+' or strand == '-') then raise "'#{strand}' is not a valid strand" end @strand = strand @exons = [] end def add_exon(range) @exons.push(range) end attr_reader :range, :strand, :exons attr_accessor :name, :attributes, :cds_pos end class Sequence def initialize(start_pos, end_pos) @start_pos = start_pos @end_pos = end_pos @genes = [] end def update_range(start_pos, end_pos) @start_pos = start_pos if start_pos < @start_pos @end_pos = end_pos if end_pos > @end_pos end def add_gene(gene) @genes.push(gene) end attr_accessor :start_pos, :end_pos attr_reader :genes end def gff3_output(sequences, source) gene_number = 1 puts "##gff-version 3" sequences.each do |name, seq| puts "##sequence-region #{name} #{seq.start_pos} #{seq.end_pos}" seq.genes.each do |gene| print "#{name} #{source} gene #{gene.range.begin} "+ "#{gene.range.end} . #{gene.strand} . "+ "ID=gene#{gene_number}" if gene.name then print ";Name=#{gene.name}" end if gene.attributes then gene.attributes.each do |attr_name, attr_value| print ";#{attr_name}=#{attr_value}" end end print "\n" exon_number = 1 gene.exons.each do |exon| puts "#{name} #{source} exon #{exon.begin} #{exon.end} "+ ". #{gene.strand} . Parent=gene#{gene_number}" if (gene.cds_pos) then max_start = gene.cds_pos.begin > exon.begin ? gene.cds_pos.begin \ : exon.begin min_end = gene.cds_pos.end < exon.end ? gene.cds_pos.end : exon.end if (gene.cds_pos.begin <= exon.end and gene.cds_pos.end >= exon.begin) then puts "#{name} #{source} CDS " + "#{max_start} #{min_end} . #{gene.strand} . Parent=gene#{gene_number}" end end end gene_number += 1 end puts "###" end end genometools-1.5.1/scripts/gff3tidy_all000077500000000000000000000024471211610345200200370ustar00rootroot00000000000000#!/bin/sh # # Copyright (c) 2010 Gordon Gremme # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # if [ $# -lt 1 ] then echo "Usage: `basename $0` file [...]" >&2 echo "Apply \"gt gff3 -tidy\" to each \"file\" and replace it afterwards." >&2 echo "The original \"file\" is saved as \"file.bac\"." >&2 exit 1 fi for FILE in $* do TMPFILE=`mktemp` cp $FILE $FILE.bac gt gff3 -tidy $FILE > $TMPFILE if [ $? -eq 0 ] then # gt gff3 -tidy call succeeded -> overwrite file mv -f $TMPFILE $FILE else echo "`basename $0`: gt gff3 -tidy command failed, removing tmpfile" rm -f $TMPFILE fi done genometools-1.5.1/scripts/gmap2gff3000077500000000000000000000106131211610345200172360ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2006-2007 Gordon Gremme # Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # $:.push(File.dirname($0)) require 'gff3' class Scanner def initialize(input) @input = input @line_buf = nil end def peek if @line_buf then return @line_buf end @line_buf = @input.gets end def gets if @line_buf then buf = @line_buf @line_buf = nil return buf end @input.gets end def lineno @input.lineno end def filename @input.filename end end class GMAPParser def initialize(sequences) @sequences = sequences @current_accession = nil @current_strand = nil end def parse(scanner) while scanner.peek if scanner.gets =~ /^>/ then if parse_paths(scanner) then parse_alignment(scanner) end end end end private def parse_paths(scanner) line = scanner.gets if line =~ /^Paths/ then # XXX: change parser to handle multiple paths if line =~ /^Paths \(1\):/ then while line = scanner.gets do if line =~ /Genomic pos:/ then if line =~ /^.*\(([+-])/ then @current_strand = $1 else raise "could not parse strand on line #{scanner.lineno} of " + "file #{scanner.filename}" end elsif line =~ /Accessions:/ then accession_parts = line.split(':') @current_accession = accession_parts[1].strip return true end end elsif line !~ /^Paths \(0\):/ STDERR.puts "warning: skipping multiple path alignment on line " + "#{scanner.lineno} of file #{scanner.filename}" return false end else raise "expecting 'Paths' on line #{scanner.lineno} of file " + "#{scanner.filename}" end end def parse_alignment(scanner) while line = scanner.gets do if line =~ /^Alignments:/ then # skip two lines scanner.gets scanner.gets exons = [] while (line = scanner.gets) =~ /:/ do # process all alignment lines line =~ /^.*:(\d+)-(\d+)/ exon = Range.new($1.to_i, $2.to_i) if exon.begin > exon.end then exon = Range.new(exon.end, exon.begin) end exons.push(exon) end if exons.size == 0 then raise "could not parse exon up to line #{scanner.lineno} in file " + "#{scanner.filename}" end # construct gene exon_border = [] exon_border.push(exons.first.begin) exon_border.push(exons.first.end) exon_border.push(exons.last.begin) exon_border.push(exons.last.end) gene_range = Range.new(exon_border.min, exon_border.max) raise if gene_range.begin > gene_range.end if current_sequence = @sequences[@current_accession] then # the current sequence exists already -> make sure it is maximal current_sequence.update_range(gene_range.begin, gene_range.end) else # the current sequence does not exist -> add it @sequences[@current_accession] = Sequence.new(gene_range.begin, gene_range.end) end current_sequence = @sequences[@current_accession] gene = Gene.new(gene_range, @current_strand) exons.each { |exon| gene.add_exon(exon) } current_sequence.add_gene(gene) return end end end end # read input sequences = {} gmap_parser = GMAPParser.new(sequences) gmap_parser.parse(Scanner.new(ARGF)) # output gff3_output(sequences, "gmap") genometools-1.5.1/scripts/gprof-run.sh000077500000000000000000000005511211610345200200120ustar00rootroot00000000000000#!/bin/sh Yeast=`ls ${GTTESTDATA}/ltrharvest/s_cer/chr[01][0-9].*.gz` bin/gt packedindex mkindex -sprank -tis -dna -pl -bsize 10 -locfreq 32 -dir rev\ -db ${Yeast}\ -indexname pck-yeast env -i GT_MEM_BOOKKEEPING=off time bin/gt tagerator -rw -pck pck-yeast -k 2\ -t yeast.1000 > tmp.prot gprof bin/gt gmon.out genometools-1.5.1/scripts/gtgrep.sh000077500000000000000000000002641211610345200173640ustar00rootroot00000000000000#!/bin/sh egrep "$@" src/match/*\ src/ltr/*\ src/mgth/*\ src/tools/*.[ch]\ src/*.[ch]\ scripts/*\ testsuite/*.rb genometools-1.5.1/scripts/gthclean.sh000077500000000000000000000024201211610345200176550ustar00rootroot00000000000000#!/bin/sh # # Copyright (c) 2004-2008, 2012 Gordon Gremme # Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # clean (i.e., remove!) all files comprising the index constructed by mkvtree # and all *.polya and *.polya.info files constructed by gth # furthermore, all bioseq files (*.bsi, *.bsr, and *.md5) are removed rm -f *.ssp *.llv *.skp *.al[12] *.des *.prj *.lcp *.suf rm -f *.tis *.ois *.bwt *.bck *.sds *.iso *.sti *.sti1 *.cld rm -f *.cld1 *.crf *.cfr *.lsf rm -f *.polya *.polya.info rm -f *.bsi *.bsr *.md5 genometools-1.5.1/scripts/gthcleanrec.sh000077500000000000000000000025521211610345200203550ustar00rootroot00000000000000#!/bin/sh -e # # Copyright (c) 2004-2008, 2012 Gordon Gremme # Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # descend recursively in all subdirectries of the current directory and # clean (i.e., remove!) all files comprising the index constructed by mkvtree # and all *.polya and *.polya.info files constructed by gth # furthermore, all bioseq files (*.bsi, *.bsr, and *.md5) are removed SUFFIXES="ssp llv skp al1 al2 des prj lcp suf tis ois bwt bck sds iso sti sti1 cld cld1 crf cfr lsf polya polya.info bsi bsr md5" for SUFFIX in $SUFFIXES do find . -name "*.$SUFFIX" -print0 | xargs -0 rm -f done genometools-1.5.1/scripts/hop.sh000077500000000000000000000523111211610345200166620ustar00rootroot00000000000000#!/bin/bash # # Copyright (c) 2012 Giorgio Gonnella # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # hardcoded values: NOGFF='--' # default values: BWA=${BWA:=bwa} GT=${GT:=gt} SAMTOOLS=${SAMTOOLS:=samtools} HOP_PARAMS=${HOP_PARAMS:=""} BWA_PARAMS=${BWA_PARAMS:="-t 4"} USESW=${USESW:=""} # command line parameters: USG=" (|$NOGFF) []" ACTION=$1 if [[ "$ACTION" =~ "eval" ]]; then USG="eval " USG="$USG (|$NOGFF) []" SGENOME=$2 shift fi GENOME=$2 ANNOTATION=$3 READS=$4 MATES=$5 MAP="${READS}.${GENOME}" MAPM="${MATES}.${GENOME}" function show_globals { echo "USG=$USG" echo "ACTION=$ACTION" echo "SGENOME=$SGENOME" echo "GENOME=$GENOME" echo "ANNOTATION=$ANNOTATION" echo "READS=$READS" echo "MATES=$MATES" echo "MAP=$MAP" echo "MAPM=$MAPM" } function f_help_header { echo "Reference-based correction of homopolymer length in sequencing reads." echo echo " Usage: $0 $USG" echo } function f_help_footer { echo echo "Important: this script only works correctly if all files are located" echo " in the working directory where the script is called" echo " (you can use symbolic links, of course)" echo echo "Further parameters can be optionally passed using env variables:" echo " - BWA path to bwa binary (default: $BWA)" echo " - SAMTOOLS path to samtools binary (default: $SAMTOOLS)" echo " - GT path to GenomeTools binary (default: $GT)" echo " - BWA_PARAMS parameters for bwa aln (default: $BWA_PARAMS)" echo " - HOP_PARAMS parameters for hop (default: $HOP_PARAMS)" echo " - USESW set to \"TRUE\" to use bwa bwasw instead of bwa aln" echo " - SHOWONLY set to \"TRUE\" to echo commands, without executing" } function f_shorthelp { f_help_header echo "Use \"$0 help\" for more information." } function f_help { f_help_header echo " - is one of the following:" echo echo " prepare prepare the data necessary for the correction" echo " (index preparation, mapping, sorting, etc)" echo echo " correct run the homopolymer error correction tool;" echo " (for single-end reads, reads are output in a " echo " single file and are usually sorted differently " echo " than in the original file;" echo " if paired-end reads are used, the sorting " echo " order is conserved, at cost of a longer running " echo " time and an higher memory requirement)" echo echo " clean remove index, mapping results and intermediate files" echo " (DISCLAIMER: this may have unintended effects, as" echo " it deletes files solely based on their filename)" echo echo " run prepare, correct and clean" echo echo " stats collect statistics for each correction position" echo " (useful for debugging and evaluation," echo " it may be slow and require lot of memory)" echo echo " eval-help more information about evaluation actions;" echo echo " help shows this message" echo echo " - is a single sequence Fasta file which" echo " contains the reference against which the correction is done" echo echo " - CDS.gff contains the annotation of ;" echo " instead of a filename '$NOGFF' can be specified; in this case," echo " homopolymer are corrected in the whole sequence instead of only " echo " in coding regions" echo echo " - contains the reads to correct" echo echo " - contains the mate pairs (if available)" f_help_footer } function f_eval_help { f_help_header echo " - is one of the following:" echo echo " eval evaluate corrections to reads of a known genome" echo echo " eval-make-true prepare a set of \"true\" corrections" echo " for reads which have been sequenced from " echo " " echo echo " eval-prepare prepare for the evaluation of corrections " echo " against " echo echo " eval-help show this message" echo echo " - is a single sequence Fasta file which" echo " contains the genome that has been sequenced" echo echo " - is a single sequence Fasta file which" echo " contains the reference against which the correction is done" echo echo " - CDS.gff contains the annotation of genome.fas;" echo " instead of a filename '$NOGFF' can be specified; in this case," echo " homopolymer are corrected in the whole sequence instead of only " echo " in coding regions; this is however not reccomended" echo echo " - contains the reads to correct" echo echo " - contains the mate pairs (if available)" echo echo "Before using eval, both eval-make-true and eval-prepare must be called." f_help_footer } function f_die { f_shorthelp exit $E_BADARGS } function f_index { echo "==== Create bwa genome index..." CMD="$BWA index $GENOME" echo echo $CMD if [ "$SHOWONLY" != "TRUE" ]; then $CMD; fi echo } function f_map { if [ "$USESW" == "TRUE" ]; then echo "==== Map reads to the genome using bwasw..." echo CMD="$BWA bwasw ${BWA_PARAMS} $GENOME $READS" echo $CMD '>' $MAP.sam if [ "$SHOWONLY" != "TRUE" ]; then $CMD > $MAP.sam; fi else echo "==== Map reads to the genome using bwa..." echo CMD="$BWA aln ${BWA_PARAMS} $GENOME $READS" echo $CMD '>' $MAP.sai if [ "$SHOWONLY" != "TRUE" ]; then $CMD > $MAP.sai; fi if [ "$MATES" != "" ]; then CMD1="$BWA aln ${BWA_PARAMS} $GENOME $MATES" CMD2="$BWA sampe $GENOME $MAP.sai $MAPM.sai $READS $MATES" echo $CMD1 '>' $MAPM.sai echo $CMD2 '>' $MAP.sam if [ "$SHOWONLY" != "TRUE" ]; then $CMD1 > $MAPM.sai $CMD2 > $MAP.sam fi else CMD="$BWA samse $GENOME $MAP.sai $READS" echo $CMD '>' $MAP.sam if [ "$SHOWONLY" != "TRUE" ]; then $CMD > $MAP.sam; fi fi fi echo } function f_sortmap { echo "==== Sort the mapping results using samtools..." echo CMD1="$SAMTOOLS view -Shu $MAP.sam" CMD2="$SAMTOOLS sort $MAP.bam sorted.$MAP" echo $CMD1 '>' $MAP.bam echo $CMD2 if [ "$SHOWONLY" != "TRUE" ]; then $CMD1 > $MAP.bam $CMD2 fi echo } function f_sortgff { echo "==== Process and sort the annotation..." echo awk '$3 == "CDS" \ {print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t." }' \ $ANNOTATION > tmp_1.$ANNOTATION echo "##gff-version 3" > tmp_2.$ANNOTATION sort -k4 -n tmp_1.$ANNOTATION >> tmp_2.$ANNOTATION $GT gff3 -tidy -force -o sorted.$ANNOTATION tmp_2.$ANNOTATION rm tmp_1.$ANNOTATION rm tmp_2.$ANNOTATION echo } function f_encode { echo echo "==== Encode genome in GtEncseq format..." echo CMD="$GT encseq encode -v $GENOME" echo $CMD if [ "$SHOWONLY" != "TRUE" ]; then $CMD; fi echo } function f_prepare { f_index f_map f_sortmap f_encode if [ "$ANNOTATION" != "$NOGFF" ]; then f_sortgff; fi } function f_correct { echo "==== Correct homopolymers..." echo if [ "$ANNOTATION" != "$NOGFF" ]; then HOP_PARAMS="-ann sorted.$ANNOTATION $HOP_PARAMS" fi if [ "$MATES" != "" -o "$USESW" == "TRUE" ]; then HOP_PARAMS="-reads $READS $MATES $HOP_PARAMS" else HOP_PARAMS="-o hop_$READS $HOP_PARAMS" fi CMD="$GT hop -v -ref $GENOME -map sorted.$MAP.bam $HOP_PARAMS" echo $CMD if [ "$SHOWONLY" != "TRUE" ]; then $CMD; fi echo echo "==== done " echo echo "corrected reads: hop_$READS" echo } function f_clean { rm -f $GENOME.amb $GENOME.ann $GENOME.bwt $GENOME.pac $GENOME.sa rm -f $MAP.sai $MAP.sam rm -f $MAP.bam sorted.$MAP.bam rm -f $GENOME.esq $GENOME.des $GENOME.md5 $GENOME.sds if [ "$ANNOTATION" != "$NOGFF" ]; then rm -f sorted.$ANNOTATION fi if [ "$MATES" != "" ]; then rm -f $MAPM.sai fi } function f_run { f_prepare f_correct f_clean } # position of fields in correction stats output table declare -A FIELD FIELD[R_HPOS]='$1' FIELD[EDIT]='$2' FIELD[S_HPOS]='$3' FIELD[S_HEND]='$4' FIELD[S_CHAR]='$5' FIELD[S_OR]='$6' FIELD[C_LEN]='$7' FIELD[COVERAGE]='$8' FIELD[R_HLEN]='$9' FIELD[R_SUPP]='$10' FIELD[S_HLEN]='$11' FIELD[A_HLEN]='$12' FIELD[A_SUPP]='$13' FIELD[S_MAPQ]='$14' FIELD[S_Q_BEF]='$15' FIELD[S_Q_FIRST]='$16' FIELD[S_Q_MIN]='$17' FIELD[S_Q_AVE]='$18' FIELD[S_Q_MAX]='$19' FIELD[S_Q_RANGE]='$20' FIELD[S_Q_LAST]='$21' FIELD[S_Q_AFT]='$22' FIELD[S_QUAL]='$23' FIELD[S_ID]='$24' FIELD[C_CLASS]='$25' # combined fields FIELD[EDIT_OP]="${FIELD[EDIT]}\"-\"${FIELD[S_CHAR]}" FIELD[MULTIEDIT_OP]="${FIELD[EDIT]}\"-\"${FIELD[S_CHAR]}\"-\"${FIELD[C_LEN]}" FIELD[A_HLEN_DIFF]="${FIELD[A_HLEN]}-${FIELD[R_HLEN]}" FIELD[S_HLEN_DIFF]="${FIELD[S_HLEN]}-${FIELD[R_HLEN]}" FIELD[NON_C_LEN]="(${FIELD[S_HLEN]}>${FIELD[R_HLEN]}?${FIELD[S_HLEN]}-${FIELD[R_HLEN]}:${FIELD[R_HLEN]}-${FIELD[S_HLEN]})-${FIELD[C_LEN]}" FIELD[A_SUPP_DIFF]="${FIELD[A_SUPP]}-${FIELD[R_SUPP]}" function f_pos_stats { count_all () { RETVAL=`grep '^'$2 $1 | wc -l`; } count_all_pos () { RETVAL=`awk '/^'$2'/ && ('${FIELD[S_HEND]}' == "'$3'")' $1 \ | wc -l`; } count () { RETVAL=`awk '/^'$2'/ && ('${FIELD[S_CHAR]}' == "'$3'")' $1 | wc -l`; } count_pos () { RETVAL=`awk '/^'$2'/ && ('${FIELD[S_HEND]}' == "'$3'") \ && ('${FIELD[S_CHAR]}' == "'$4'")' $1 | wc -l`; } nof_seq_long () { RETVAL=`grep "^$2--$2" $1 | awk '{ print $2 }'` if [ "$RETVAL" == "" ]; then RETVAL=0; fi; } OUTFILE=$2 MAX_READ_LEN=`grep 'maximum length' $3 | awk '{ print $4 }'` NOFSEQ=`grep 'sequences' $3 | awk '{ print $2 }'` nof_seq_long $3 1; S=$RETVAL P=`echo "$S / $NOFSEQ" | bc -l` rm -f $OUTFILE touch $OUTFILE echo \ "# pos: last position in original read of corrected homopolymer (1-based)"\ >> $OUTFILE echo \ "# %reads: percent of reads which are at least as long as pos" >> $OUTFILE echo "# (ins|del): insertions, deletions in read" >> $OUTFILE echo "# (ins|del)[ACGT]: insertions, deletions in read of symbol" >> $OUTFILE H="# pos\t%reads\tedits\tins\tdel" H="$H\tinsA\tinsC\tinsG\tinsT\tdelA\tdelC\tdelG\tdelT" echo -e "$H" >> $OUTFILE count_all $1 I; I=$RETVAL count_all $1 D; D=$RETVAL A=$[$I+ $D] count $1 I a; Ia=$RETVAL count $1 I c; Ic=$RETVAL count $1 I g; Ig=$RETVAL count $1 I t; It=$RETVAL count $1 D a; Da=$RETVAL count $1 D c; Dc=$RETVAL count $1 D g; Dg=$RETVAL count $1 D t; Dt=$RETVAL echo -e "all\t100.00\t$A\t$I\t$D\t$Ia\t$Ic\t$Ig\t$It\t$Da\t$Dc\t$Dg\t$Dt" \ >> $OUTFILE for ((i = 2; i < $MAX_READ_LEN; i++)); do nof_seq_long $3 $i S=$[$RETVAL+$S] P=`echo "(1.0 - ($S / $NOFSEQ)) * 100" | bc -l` count_all_pos $1 I $i; I=$RETVAL count_all_pos $1 D $i; D=$RETVAL A=$[$I+ $D] count_pos $1 I $i a; Ia=$RETVAL count_pos $1 D $i a; Da=$RETVAL count_pos $1 I $i c; Ic=$RETVAL count_pos $1 D $i c; Dc=$RETVAL count_pos $1 I $i g; Ig=$RETVAL count_pos $1 D $i g; Dg=$RETVAL count_pos $1 I $i t; It=$RETVAL count_pos $1 D $i t; Dt=$RETVAL printf "$i\t%.2f\t$A\t$I\t$D\t$Ia\t$Ic\t$Ig\t$It\t$Da\t$Dc\t$Dg\t$Dt\n" $P \ >> $OUTFILE done } function f_edits_per_read { grep -v '^#' $1 | awk '{ print '${FIELD[S_ID]}' }' | sort | uniq -c > $MAP~tmpfile echo "# edited reads: `cat $MAP~tmpfile | wc -l`" >> $1 t=0 for ((i=1;i<10;i++)); do c=`awk ' $1 == '$i $MAP~tmpfile | wc -l` if [ $c == 0 ]; then break else t=$[$t+($c*$i)] echo -e "# reads edited $i time(s): $c" >> $1 fi done echo -e "# total edits: $t" >> $1 rm $MAP~tmpfile } function f_stats { echo "==== Collecting correction statistics..." if [ "$ANNOTATION" != "$NOGFF" ]; then HOP_PARAMS="-ann sorted.$ANNOTATION $HOP_PARAMS" fi if [ "$MAKETRUE" == "TRUE" ]; then HOP_PARAMS="-state-of-truth $HOP_PARAMS" else HOP_PARAMS="-stats $HOP_PARAMS" fi if [ "$MATES" != "" -o "$USESW" == "TRUE" ]; then HOP_PARAMS="-reads $READS $MATES $HOP_PARAMS" else HOP_PARAMS="-o hop_$READS $HOP_PARAMS" fi CMD="$GT hop -v -ref $GENOME -map sorted.$MAP.bam $HOP_PARAMS" echo "$CMD" '>' $MAP.hop_stats if [ "$SHOWONLY" != "TRUE" ]; then $CMD > $MAP.hop_stats echo f_edits_per_read $MAP.hop_stats fi echo "==== done " echo echo "correction statistics: $MAP.hop_stats" echo } stats2eds () { grep -v '^#' $MAP.hop_stats | awk '{ printf("%-30s\t%-5s\t%s\t%s\n", \ '${FIELD[S_ID]}', '${FIELD[S_HEND]}', \ '${FIELD[EDIT]}', '${FIELD[C_LEN]}') }' | sort > $MAP.eds } function f_eval_make_true { GENOME=$SGENOME MAP="${READS}.${GENOME}" MAPM="${MATES}.${GENOME}" ANNOTATION=$NOGFF if [ "$NOMAP" != "TRUE" ]; then f_prepare; fi MAKETRUE="TRUE" f_stats if [ "$SHOWONLY" != "TRUE" ]; then stats2eds; fi } function f_eval_prepare { f_prepare } function f_eval_mark { echo "==== Mark hop_stats lines using evaluation results" SMAP="${READS}.${SGENOME}" diff $SMAP.eds $MAP.eds | grep '^>' | sort > $MAP.fp ruby -e " fp = IO.read('$MAP.fp').split(%Q[\n]) S_ID = %Q[${FIELD[S_ID]}][1..-1].to_i - 1 S_HEND = %Q[${FIELD[S_HEND]}][1..-1].to_i - 1 fp = fp.map{|x| x = x.split; %Q[#{x[1]} #{x[2]}]} infile = File.new('$MAP.hop_stats') outfile = File.new('$MAP.hop_stats_eval', 'w') infile.each do |line| line.chomp! if line =~ /^# coordinates/ outfile.puts %Q[# c_class = classification of correction ]+ %Q[(TP=true positive; FP=false positive)] outfile.puts line elsif line =~ /^# edit\sr_hpos/ outfile.puts %Q[#{line}\tc_class] elsif line =~ /^#/ outfile.puts line else splitted = line.split if (fp.include?(%Q[#{splitted[S_ID]} #{splitted[S_HEND]}])) outfile.puts %Q[#{line}\tFP] else outfile.puts %Q[#{line}\tTP] end end end " echo "marked hop_stats: $MAP.hop_stats_eval" } function f_eval_proc_marked { awk ${FIELD[C_CLASS]}' == "FP"' $MAP.hop_stats_eval > $MAP.hop_stats_FP awk ${FIELD[C_CLASS]}' == "TP"' $MAP.hop_stats_eval > $MAP.hop_stats_TP echo "false positive only stats: $MAP.hop_stats_FP" echo "true positive only stats: $MAP.hop_stats_TP" QUANT_MEASURES="S_HPOS S_HEND C_LEN COVERAGE R_HLEN R_SUPP S_HLEN" QUANT_MEASURES="${QUANT_MEASURES} A_HLEN A_SUPP S_MAPQ S_Q_BEF S_Q_FIRST" QUANT_MEASURES="${QUANT_MEASURES} S_Q_MIN S_Q_AVE S_Q_MAX S_Q_RANGE S_Q_LAST" QUANT_MEASURES="${QUANT_MEASURES} S_Q_AFT A_HLEN_DIFF S_HLEN_DIFF NON_C_LEN" QUANT_MEASURES="${QUANT_MEASURES} A_SUPP_DIFF" for MEASURE in ${QUANT_MEASURES}; do awk '{print int('${FIELD[$MEASURE]}')}' $MAP.hop_stats_FP \ | sort -n | uniq -c > $MAP.hop_FP_${MEASURE}_distri awk '{print int('${FIELD[$MEASURE]}')}' $MAP.hop_stats_TP \ | sort -n | uniq -c > $MAP.hop_TP_${MEASURE}_distri done QUAL_MEASURES="S_CHAR EDIT S_OR EDIT_OP MULTIEDIT_OP" for MEASURE in ${QUAL_MEASURES}; do awk '{print '${FIELD[$MEASURE]}'}' $MAP.hop_stats_FP \ | sort | uniq -c > $MAP.hop_FP_${MEASURE}_distri awk '{print '${FIELD[$MEASURE]}'}' $MAP.hop_stats_TP \ | sort | uniq -c > $MAP.hop_TP_${MEASURE}_distri done MEASURES="${QUAL_MEASURES} ${QUANT_MEASURES}" for MEASURE in $MEASURES; do ruby -e " f = File.open('$MAP.hop_${MEASURE}_distri', 'w') tp={} fp={} IO.read(%Q[$MAP.hop_TP_${MEASURE}_distri]).split(%Q[\n]). each{|x| x=x.split; tp[x[1]]=x[0]; fp[x[1]]=0} IO.read(%Q[$MAP.hop_FP_${MEASURE}_distri]).split(%Q[\n]). each{|x| x=x.split; fp[x[1]]=x[0]; tp[x[1]]||=0} f.printf(%Q[${MEASURE}\tALL\tTP\tFP\tTPR\tFPR\n]) keys = tp.keys if (keys[0].to_i.to_s == keys[0]) keys = keys.sort_by {|x| x.to_i} else keys.sort! end keys.each do |k| f.printf(%Q[#{k}\t%s\t%s\t%s\t%.2f\t%.2f\n], tp[k].to_i + fp[k].to_i, tp[k], fp[k], tp[k].to_f * 100 / (tp[k].to_f+fp[k].to_f), fp[k].to_f * 100 / (tp[k].to_f+fp[k].to_f)) end f.close " echo "${MEASURE} distribution: $MAP.hop_${MEASURE}_distri" done } function f_eval_stats { SMAP="${READS}.${SGENOME}" EDSDIFF="$SMAP.$GENOME.eds_diff" INFO="$SMAP.$GENOME.eval" diff $SMAP.eds $MAP.eds > $EDSDIFF CORR=`cat $MAP.eds | wc -l` ERR=`cat $SMAP.eds | wc -l` FN=`grep '^<' $EDSDIFF | wc -l` FP=`grep '^>' $EDSDIFF | wc -l` TP=$[$CORR-$FP] GENOMEDESC=`head -n 1 $GENOME` SGENOMEDESC=`head -n 1 $SGENOME` echo "==== Computing evaluation statistics..." echo | tee $INFO echo "Statistics of the correction of:" | tee -a $INFO if [ "$MATES" == "" ];then echo "- reads: $READS" | tee -a $INFO else echo "- reads: $READS + $MATES" | tee -a $INFO fi echo "- state of truth based upon: $SGENOMEDESC" | tee -a $INFO echo | tee -a $INFO MIN_HLEN=`grep -P -o "(?<=Distribution of homopolymers of length >= )\d+" \ $MAP.hop_stats` if [ "$MIN_HLEN" == "" ]; then MIN_HLEN="n.a."; fi NOF_READS=`grep -P -o "(?<=segments in SAM file:)\s+\d+" \ $MAP.hop_stats | grep -P -o "\d+"` NOF_NMAP=`grep -P -o "(?<=not mapping:)\s+\d+" \ $MAP.hop_stats | grep -P -o "\d+"` if [ "$NOF_READS" != "" -a "$NOF_NMAP" != "" ]; then NOF_MAP=$[$NOF_READS - $NOF_NMAP] else NOF_MAP="n.a." fi if [ "$NOF_READS" == "" ]; then NOF_READS="n.a."; fi if [ "$NOF_NMAP" == "" ]; then NOF_NMAP="n.a."; fi echo "Correction parameters:" | tee -a $INFO echo "- reference for correction: $GENOMEDESC" | tee -a $INFO if [ "$ANNOTATION" != "$NOGFF" ]; then echo "- annotation: $ANNOTATION" | tee -a $INFO else echo "- annotation: none" | tee -a $INFO fi echo "- minimal homopol. length: ${MIN_HLEN}" | tee -a $INFO echo | tee -a $INFO echo "Mapping results:" | tee -a $INFO echo "- total reads: $NOF_READS" | tee -a $INFO echo "- mapping: $NOF_MAP" | tee -a $INFO echo "- not mapping: $NOF_NMAP" | tee -a $INFO echo | tee -a $INFO echo "Correction results:" | tee -a $INFO echo "- homopol. errors: $ERR" | tee -a $INFO echo "- corrected homopol.: $CORR" | tee -a $INFO echo "- true positives: $TP" | tee -a $INFO echo "- false positives: $FP" | tee -a $INFO echo "- false negatives: $FN" | tee -a $INFO SN=`echo "$TP * 100 / ($TP + $FN)" | bc -l` PR=`echo "$TP * 100 / ($TP + $FP)" | bc -l` printf -- "- sensitivity: %.2f %%\n" $SN | tee -a $INFO printf -- "- precision: %.2f %%\n" $PR | tee -a $INFO echo | tee -a $INFO echo "==== done " echo echo "evaluation statistics: $INFO" echo } function f_eval { f_stats if [ "$SHOWONLY" != "TRUE" ]; then stats2eds f_eval_stats fi } function f_dists { echo "==== Computing distributions..." echo $GT seqstat -distlen -b 1 $READS $MATES >| $READS.lendist $GT seqstat -distlen -b 1 hop_$READS >| hop_$READS.lendist f_pos_stats $MAP.hop_stats $MAP.hop_pos_stats $READS.lendist echo echo "==== done " echo echo "original reads length distribution: $READS.lendist" echo "corrected reads length distribution: hop_$READS.lendist" echo "corrections per read position: $MAP.hop_pos_stats" echo } if [ "$ACTION" != "help" -a "$ACTION" != "eval-help" ]; then if [ $# -lt 4 -o $# -gt 5 ]; then f_die; fi fi case "$ACTION" in 'prepare') f_prepare ;; 'correct') f_correct ;; 'clean') f_clean ;; 'run') f_run ;; 'stats') f_stats ;; 'dists') f_dists ;; 'help') f_help ;; 'eval-help') f_eval_help ;; 'eval-make-true') f_eval_make_true ;; 'eval-prepare') f_eval_prepare ;; 'eval') f_eval ;; # parts of other actions: 'index') f_index ;; 'map') f_map ;; 'sortmap') f_sortmap ;; 'encode') f_encode ;; 'sortgff') f_sortgff ;; 'eval-stats') f_eval_stats ;; 'eval-mark') f_eval_mark ;; 'eval-proc-marked') f_eval_proc_marked ;; *) f_die ;; esac genometools-1.5.1/scripts/incl.sed000066400000000000000000000001041211610345200171500ustar00rootroot00000000000000/ this is a SNP <----- */ if (gt_range_overlap(&new_rng, &sas->cur_gene_range)) { /* it falls into the currently observed range */ gt_queue_add(sas->snps, gt_genome_node_ref((GtGenomeNode*) fn)); } else { /* SNP outside a gene, this cluster is done add to out queue and start serving */ gt_assert(gt_queue_size(sas->outqueue) == 0); had_err = snp_annotator_stream_process_current_gene(sas, err); gt_queue_add(sas->outqueue, mygn); if (gt_queue_size(sas->outqueue) > 0) { *gn = (GtGenomeNode*) gt_queue_get(sas->outqueue); complete_cluster = true; } } } else if (type == gene_type) { /* -----> this is a gene <----- */ if (gt_array_size(sas->cur_gene_set) == 0UL) { /* new overlapping gene cluster */ addgn = gt_genome_node_ref(mygn); gt_array_add(sas->cur_gene_set, addgn); sas->cur_gene_range = gt_genome_node_get_range(mygn); } else { if (gt_range_overlap(&new_rng, &sas->cur_gene_range)) { /* gene overlaps with current one, add to cluster */ addgn = gt_genome_node_ref(mygn); gt_array_add(sas->cur_gene_set, addgn); sas->cur_gene_range = gt_range_join(&sas->cur_gene_range, &new_rng); } else { /* finish current cluster and start a new one */ had_err = snp_annotator_stream_process_current_gene(sas, err); if (!had_err) { addgn = gt_genome_node_ref(mygn); gt_array_add(sas->cur_gene_set, addgn); sas->cur_gene_range = gt_genome_node_get_range(mygn); } if (gt_queue_size(sas->outqueue) > 0) { *gn = (GtGenomeNode*) gt_queue_get(sas->outqueue); complete_cluster = true; } } } /* from now on, genes are kept in gene cluster arrays only */ gt_genome_node_delete(mygn); } } else { /* meta node */ had_err = snp_annotator_stream_process_current_gene(sas, err); if (!had_err) { gt_queue_add(sas->outqueue, mygn); } if (gt_queue_size(sas->outqueue) > 0) { *gn = (GtGenomeNode*) gt_queue_get(sas->outqueue); complete_cluster = true; } } } return had_err; } static void snp_annotator_stream_free(GtNodeStream *ns) { unsigned long i; GtSNPAnnotatorStream *sas; if (!ns) return; sas = gt_snp_annotator_stream_cast(ns); gt_region_mapping_delete(sas->rmap); while (gt_queue_size(sas->snps) > 0) { gt_genome_node_delete((GtGenomeNode*) gt_queue_get(sas->snps)); } while (gt_queue_size(sas->outqueue) > 0) { gt_genome_node_delete((GtGenomeNode*) gt_queue_get(sas->outqueue)); } for (i = 0; i < gt_array_size(sas->instreams); i++) { gt_node_stream_delete(*(GtNodeStream**) gt_array_get(sas->instreams, i)); } for (i = 0; i < gt_array_size(sas->cur_gene_set); i++) { gt_genome_node_delete(*(GtGenomeNode**) gt_array_get(sas->cur_gene_set, i)); } gt_array_delete(sas->cur_gene_set); gt_node_stream_delete(sas->merge_stream); gt_array_delete(sas->instreams); gt_queue_delete(sas->snps); gt_queue_delete(sas->outqueue); } const GtNodeStreamClass* gt_snp_annotator_stream_class(void) { static const GtNodeStreamClass *nsc = NULL; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtSNPAnnotatorStream), snp_annotator_stream_free, snp_annotator_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_snp_annotator_stream_new(GtNodeStream *gvf_stream, GtNodeStream *gff_stream, GtTransTable *trans_table, GtRegionMapping *rmap) { GtSNPAnnotatorStream *sas; GtNodeStream *ns; gt_assert(gvf_stream && gff_stream && rmap); ns = gt_node_stream_create(gt_snp_annotator_stream_class(), true); sas = gt_snp_annotator_stream_cast(ns); sas->instreams = gt_array_new(sizeof (GtNodeStream*)); (void) gt_node_stream_ref(gvf_stream); gt_array_add(sas->instreams, gvf_stream); (void) gt_node_stream_ref(gff_stream); gt_array_add(sas->instreams, gff_stream); sas->cur_gene_set = gt_array_new(sizeof (GtFeatureNode*)); sas->merge_stream = gt_merge_stream_new(sas->instreams); sas->rmap = gt_region_mapping_ref(rmap); sas->cur_gene_range.start = sas->cur_gene_range.end = GT_UNDEF_ULONG; sas->snps = gt_queue_new(); sas->outqueue = gt_queue_new(); sas->tt = trans_table; return ns; } genometools-1.5.1/src/extended/snp_annotator_stream.h000066400000000000000000000030051211610345200230420ustar00rootroot00000000000000/* Copyright (c) 2012-2013 Sascha Steinbiss Copyright (c) 2012-2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SNP_ANNOTATOR_STREAM_H #define SNP_ANNOTATOR_STREAM_H #include "core/trans_table_api.h" #include "extended/node_stream_api.h" #include "extended/region_mapping_api.h" /* implements the ``genome stream'' interface */ typedef struct GtSNPAnnotatorStream GtSNPAnnotatorStream; const GtNodeStreamClass* gt_snp_annotator_stream_class(void); GtNodeStream* gt_snp_annotator_stream_new(GtNodeStream *gvf_stream, GtNodeStream *gff_stream, GtTransTable *trans_table, GtRegionMapping *rmap); #endif genometools-1.5.1/src/extended/snp_annotator_visitor.c000066400000000000000000000351601211610345200232500ustar00rootroot00000000000000/* Copyright (c) 2013 Sascha Steinbiss Copyright (c) 2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "core/codon_api.h" #include "core/complement.h" #include "core/cstr_api.h" #include "core/hashmap.h" #include "core/log.h" #include "core/ma_api.h" #include "core/strand_api.h" #include "core/symbol.h" #include "core/trans_table.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "extended/feature_node_iterator_api.h" #include "extended/feature_type.h" #include "extended/gff3_defines.h" #include "extended/node_visitor_api.h" #include "extended/region_mapping_api.h" #include "extended/reverse_api.h" #include "extended/snp_annotator_visitor.h" struct GtSNPAnnotatorVisitor { const GtNodeVisitor parent_instance; GtFeatureNode *gene; GtRegionMapping *rmap; GtHashmap *rnaseqs; GtTransTable *tt; bool own_tt; const char *mRNA_type, *CDS_type, *SNV_type, *SNP_type; }; #define GT_SNP_MISSENSE_EFFECT "non_conservative_missense_variant" #define GT_SNP_NONSENSE_EFFECT "stop_gained" #define GT_SNP_STOP_LOST_EFFECT "stop_lost" #define GT_SNP_SYNONYMOUS_AMINO_EFFECT "synonymous_variant" #define GT_SNP_SYNONYMOUS_STOP_EFFECT "stop_retained_variant" #define snp_annotator_visitor_cast(GV)\ gt_node_visitor_cast(gt_snp_annotator_visitor_class(), GV) static void snp_annotator_visitor_free(GtNodeVisitor *nv) { GtSNPAnnotatorVisitor *sav; if (!nv) return; sav = snp_annotator_visitor_cast(nv); gt_genome_node_delete((GtGenomeNode*) sav->gene); if (sav->own_tt) gt_trans_table_delete(sav->tt); gt_region_mapping_delete(sav->rmap); gt_hashmap_delete(sav->rnaseqs); } static int snp_annotator_classify_snp(GtSNPAnnotatorVisitor *sav, GtFeatureNode *mRNA, GtFeatureNode *snp, unsigned long variant_pos, unsigned long variant_idx, char variant_char, #ifndef NDEBUG GT_UNUSED char reference_char, #endif GT_UNUSED GtError *err) { int had_err = 0; char *mrnaseq; const char *variant_effect = NULL; gt_assert(mRNA && snp && sav); gt_log_log("processing variant char %c for SNP %s\n", variant_char, gt_feature_node_get_attribute(snp, "Dbxref")); mrnaseq = gt_hashmap_get(sav->rnaseqs, mRNA); gt_assert(mrnaseq); if (mrnaseq) { char codon[3], variant_codon[3]; GtStr *effect_string; char oldamino, newamino; GT_UNUSED unsigned long mrnalen; unsigned long startpos = variant_pos / GT_CODON_LENGTH, variantoffset = variant_pos % GT_CODON_LENGTH; mrnalen = strlen(mrnaseq); gt_assert(variant_pos < mrnalen); variant_codon[0] = codon[0] = mrnaseq[3*startpos]; variant_codon[1] = codon[1] = mrnaseq[3*startpos+1]; variant_codon[2] = codon[2] = mrnaseq[3*startpos+2]; variant_codon[variantoffset] = variant_char; #ifndef NDEBUG gt_assert(toupper(codon[variantoffset]) == toupper(reference_char)); #endif if (gt_trans_table_is_stop_codon(sav->tt, codon[0], codon[1], codon[2])) { if (gt_trans_table_is_stop_codon(sav->tt, variant_codon[0], variant_codon[1], variant_codon[2])) { variant_effect = gt_symbol(GT_SNP_SYNONYMOUS_STOP_EFFECT); } else { variant_effect = gt_symbol(GT_SNP_STOP_LOST_EFFECT); } } else { if (gt_trans_table_is_stop_codon(sav->tt, variant_codon[0], variant_codon[1], variant_codon[2])) { variant_effect = gt_symbol(GT_SNP_NONSENSE_EFFECT); } else { had_err = gt_trans_table_translate_codon(sav->tt, codon[0], codon[1], codon[2], &oldamino, err); if (!had_err) { had_err = gt_trans_table_translate_codon(sav->tt, variant_codon[0], variant_codon[1], variant_codon[2], &newamino, err); } if (!had_err) { if (newamino == oldamino) { variant_effect = gt_symbol(GT_SNP_SYNONYMOUS_AMINO_EFFECT); } else { variant_effect = gt_symbol(GT_SNP_MISSENSE_EFFECT); } } } } if (!had_err) { const char *var_attrib; gt_assert(variant_effect != NULL); if ((var_attrib = gt_feature_node_get_attribute(snp, GT_GVF_VARIANT_EFFECT))) { effect_string = gt_str_new_cstr(var_attrib); gt_str_append_cstr(effect_string, ","); gt_str_append_cstr(effect_string, variant_effect); } else { effect_string = gt_str_new_cstr(variant_effect); } gt_str_append_cstr(effect_string, " "); gt_str_append_ulong(effect_string, variant_idx); gt_str_append_cstr(effect_string, " "); gt_str_append_cstr(effect_string, gt_feature_node_get_type(mRNA)); gt_str_append_cstr(effect_string, " "); gt_str_append_cstr(effect_string, gt_feature_node_get_attribute(mRNA, GT_GFF_ID)); gt_feature_node_set_attribute(snp, GT_GVF_VARIANT_EFFECT, gt_str_get(effect_string)); gt_str_reset(effect_string); gt_str_delete(effect_string); } } return had_err; } static int snp_annotator_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GtError *err) { int had_err = 0; GtSNPAnnotatorVisitor *sav; GtFeatureNodeIterator *fni, *mrnafni; GtFeatureNode *curnode, *curnode2; GtRange snp_rng; gt_error_check(err); sav = snp_annotator_visitor_cast(nv); /* ignore non-nodes */ if (!fn) return 0; /* only process SNPs */ if (!(gt_feature_node_get_type(fn) == sav->SNV_type || gt_feature_node_get_type(fn) == sav->SNP_type)) { return 0; } fni = gt_feature_node_iterator_new_direct(sav->gene); snp_rng = gt_genome_node_get_range((GtGenomeNode*) fn); while (!had_err && (curnode = gt_feature_node_iterator_next(fni))) { if (gt_feature_node_get_type(curnode) == sav->mRNA_type) { GtStrand mrna_strand = gt_feature_node_get_strand(curnode); #ifndef NDEBUG const char *refstr; #endif unsigned long mrnasnppos = 0; mrnafni = gt_feature_node_iterator_new(curnode); while (!had_err && (curnode2 = gt_feature_node_iterator_next(mrnafni))) { if (gt_feature_node_get_type(curnode2) == sav->CDS_type) { GtRange cds_rng = gt_genome_node_get_range((GtGenomeNode*) curnode2); if (gt_range_overlap(&snp_rng, &cds_rng)) { char *mRNA, origchar; char *variantchars, *variantptr = NULL; GT_UNUSED char *refchars, *refptr = NULL; mRNA = (char*) gt_hashmap_get(sav->rnaseqs, curnode); gt_assert(mRNA); gt_assert(snp_rng.start >= cds_rng.start); mrnasnppos += (snp_rng.start - cds_rng.start); if (mrna_strand == GT_STRAND_REVERSE) mrnasnppos = strlen(mRNA) - mrnasnppos - 1; gt_assert(mrnasnppos < strlen(mRNA)); origchar = mRNA[mrnasnppos]; #ifndef NDEBUG refstr = refptr = gt_cstr_dup(gt_feature_node_get_attribute(fn, GT_GVF_REFERENCE_SEQ)); if (!had_err && refstr) { if (gt_feature_node_get_strand(curnode) == GT_STRAND_REVERSE) { int rval = gt_complement(&origchar, origchar, err); gt_assert(rval == 0); } gt_assert(toupper(origchar) == toupper(refstr[0])); } #endif variantchars = variantptr = gt_cstr_dup( gt_feature_node_get_attribute(fn, GT_GVF_VARIANT_SEQ)); if (!had_err && variantchars) { unsigned long i = 0; while (!had_err && (*variantchars != ';' && *variantchars != '\0')) { if (*variantchars != ',' && *variantchars != origchar) { char variantchar = *variantchars; #ifndef NDEBUG char refchar = refstr[0]; if (!had_err && mrna_strand == GT_STRAND_REVERSE) had_err = gt_complement(&refchar, refchar, err); #endif if (!had_err && mrna_strand == GT_STRAND_REVERSE) had_err = gt_complement(&variantchar, variantchar, err); if (!had_err) { had_err = snp_annotator_classify_snp(sav, curnode, fn, mrnasnppos, i++, variantchar, #ifndef NDEBUG refchar, #endif err); } } else if (*variantchars == origchar) { i++; } variantchars++; } gt_free(variantptr); gt_free(refptr); } } else { mrnasnppos += gt_range_length(&cds_rng); } } } gt_feature_node_iterator_delete(mrnafni); } } gt_feature_node_iterator_delete(fni); return had_err; } const GtNodeVisitorClass* gt_snp_annotator_visitor_class() { static GtNodeVisitorClass *nvc = NULL; gt_class_alloc_lock_enter(); if (!nvc) { nvc = gt_node_visitor_class_new(sizeof (GtSNPAnnotatorVisitor), snp_annotator_visitor_free, NULL, snp_annotator_visitor_feature_node, NULL, NULL, NULL); } gt_class_alloc_lock_leave(); return nvc; } static int gt_snp_annotator_visitor_prepare_gene(GtSNPAnnotatorVisitor *sav, GtError *err) { GtFeatureNodeIterator *fni, *mrnafni; GtFeatureNode *curnode, *last_mRNA = NULL; GtStr *mrnaseq, *seqid; int had_err = 0; mrnaseq = gt_str_new(); seqid = gt_genome_node_get_seqid((GtGenomeNode*) sav->gene); fni = gt_feature_node_iterator_new(sav->gene); while (!had_err && (curnode = gt_feature_node_iterator_next(fni))) { if (gt_feature_node_get_type(curnode) == sav->mRNA_type) { GtFeatureNode *curnode2; if (last_mRNA) { char *mrna_charseq = gt_calloc(gt_str_length(mrnaseq)+1, sizeof (char)); (void) strncpy(mrna_charseq, gt_str_get(mrnaseq), gt_str_length(mrnaseq)); if (gt_feature_node_get_strand(sav->gene) == GT_STRAND_REVERSE) { had_err = gt_reverse_complement(mrna_charseq, gt_str_length(mrnaseq), err); } if (!had_err) { gt_hashmap_add(sav->rnaseqs, last_mRNA, mrna_charseq); last_mRNA = curnode; gt_str_reset(mrnaseq); } } else last_mRNA = curnode; if (!had_err) { mrnafni = gt_feature_node_iterator_new(curnode); while (!had_err && (curnode2 = gt_feature_node_iterator_next(mrnafni))) { if (gt_feature_node_get_type(curnode2) == sav->CDS_type) { char *tmp; GtRange rng = gt_genome_node_get_range((GtGenomeNode*) curnode2); had_err = gt_region_mapping_get_sequence(sav->rmap, &tmp, seqid, rng.start, rng.end, err); if (!had_err) { gt_str_append_cstr_nt(mrnaseq, tmp, gt_range_length(&rng)); gt_free(tmp); } } } gt_feature_node_iterator_delete(mrnafni); } } } if (!had_err && last_mRNA) { char *mrna_charseq = gt_calloc(gt_str_length(mrnaseq)+1, sizeof (char)); (void) strncpy(mrna_charseq, gt_str_get(mrnaseq), gt_str_length(mrnaseq)); if (gt_feature_node_get_strand(sav->gene) == GT_STRAND_REVERSE) { had_err = gt_reverse_complement(mrna_charseq, gt_str_length(mrnaseq), err); } if (!had_err) { gt_hashmap_add(sav->rnaseqs, last_mRNA, mrna_charseq); } } gt_feature_node_iterator_delete(fni); gt_str_delete(mrnaseq); return had_err; } GtNodeVisitor* gt_snp_annotator_visitor_new(GtFeatureNode *gene, GtTransTable *trans_table, GtRegionMapping *rmap, GtError *err) { GtNodeVisitor *nv; GtSNPAnnotatorVisitor *sav; gt_assert(gene && gt_feature_node_get_type(gene) == gt_symbol(gt_ft_gene)); nv = gt_node_visitor_create(gt_snp_annotator_visitor_class()); sav = snp_annotator_visitor_cast(nv); sav->gene = (GtFeatureNode*) gt_genome_node_ref((GtGenomeNode*) gene); sav->rmap = gt_region_mapping_ref(rmap); sav->mRNA_type = gt_symbol(gt_ft_mRNA); sav->CDS_type = gt_symbol(gt_ft_CDS); sav->SNV_type = gt_symbol(gt_ft_SNV); sav->SNP_type = gt_symbol(gt_ft_SNP); sav->rnaseqs = gt_hashmap_new(GT_HASH_DIRECT, NULL, gt_free_func); if (trans_table) { sav->tt = trans_table; sav->own_tt = false; } else { sav->tt = gt_trans_table_new_standard(err); sav->own_tt = true; } if (!sav->tt || gt_snp_annotator_visitor_prepare_gene(sav, err) != 0) { gt_node_visitor_delete(nv); return NULL; } return nv; } genometools-1.5.1/src/extended/snp_annotator_visitor.h000066400000000000000000000030211211610345200232440ustar00rootroot00000000000000/* Copyright (c) 2013 Sascha Steinbiss Copyright (c) 2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SNP_ANNOTATOR_VISITOR_H #define SNP_ANNOTATOR_VISITOR_H /* Implements the interface. */ typedef struct GtSNPAnnotatorVisitor GtSNPAnnotatorVisitor; #include "core/error_api.h" #include "core/trans_table_api.h" #include "extended/region_mapping_api.h" #include "extended/node_visitor_api.h" const GtNodeVisitorClass* gt_snp_annotator_visitor_class(void); GtNodeVisitor* gt_snp_annotator_visitor_new(GtFeatureNode *gene, GtTransTable *trans_table, GtRegionMapping *rmap, GtError *err); #endif genometools-1.5.1/src/extended/sort_stream.c000066400000000000000000000106411211610345200211430ustar00rootroot00000000000000/* Copyright (c) 2006-2011 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/array.h" #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "extended/eof_node.h" #include "extended/genome_node.h" #include "extended/node_stream_api.h" #include "extended/sort_stream.h" struct GtSortStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; unsigned long idx; GtArray *nodes; bool sorted; }; #define gt_sort_stream_cast(GS)\ gt_node_stream_cast(gt_sort_stream_class(), GS); static int gt_sort_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtSortStream *sort_stream; GtGenomeNode *node, *eofn; int had_err = 0; gt_error_check(err); sort_stream = gt_sort_stream_cast(ns); if (!sort_stream->sorted) { while (!(had_err = gt_node_stream_next(sort_stream->in_stream, &node, err)) && node) { if ((eofn = gt_eof_node_try_cast(node))) gt_genome_node_delete(eofn); /* get rid of EOF nodes */ else gt_array_add(sort_stream->nodes, node); } if (!had_err) { gt_genome_nodes_sort_stable(sort_stream->nodes); sort_stream->sorted = true; } } if (!had_err) { gt_assert(sort_stream->sorted); if (sort_stream->idx < gt_array_size(sort_stream->nodes)) { *gn = *(GtGenomeNode**) gt_array_get(sort_stream->nodes, sort_stream->idx); sort_stream->idx++; /* join region nodes with the same sequence ID */ if (gt_region_node_try_cast(*gn)) { GtRange range_a, range_b; while (sort_stream->idx < gt_array_size(sort_stream->nodes)) { node = *(GtGenomeNode**) gt_array_get(sort_stream->nodes, sort_stream->idx); if (!gt_region_node_try_cast(node) || gt_str_cmp(gt_genome_node_get_seqid(*gn), gt_genome_node_get_seqid(node))) { /* the next node is not a region node with the same ID */ break; } range_a = gt_genome_node_get_range(*gn); range_b = gt_genome_node_get_range(node); range_a = gt_range_join(&range_a, &range_b); gt_genome_node_set_range(*gn, &range_a); gt_genome_node_delete(node); sort_stream->idx++; } } return 0; } } if (!had_err) { gt_array_reset(sort_stream->nodes); *gn = NULL; } return had_err; } static void gt_sort_stream_free(GtNodeStream *ns) { unsigned long i; GtSortStream *sort_stream = gt_sort_stream_cast(ns); for (i = sort_stream->idx; i < gt_array_size(sort_stream->nodes); i++) { gt_genome_node_delete(*(GtGenomeNode**) gt_array_get(sort_stream->nodes, i)); } gt_array_delete(sort_stream->nodes); gt_node_stream_delete(sort_stream->in_stream); } const GtNodeStreamClass* gt_sort_stream_class(void) { static const GtNodeStreamClass *nsc = NULL; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtSortStream), gt_sort_stream_free, gt_sort_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_sort_stream_new(GtNodeStream *in_stream) { GtNodeStream *ns = gt_node_stream_create(gt_sort_stream_class(), true); GtSortStream *sort_stream = gt_sort_stream_cast(ns); gt_assert(in_stream); sort_stream->in_stream = gt_node_stream_ref(in_stream); sort_stream->sorted = false; sort_stream->idx = 0; sort_stream->nodes = gt_array_new(sizeof (GtGenomeNode*)); return ns; } genometools-1.5.1/src/extended/sort_stream.h000066400000000000000000000017761211610345200211610ustar00rootroot00000000000000/* Copyright (c) 2006-2007, 2011 Gordon Gremme Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SORT_STREAM_H #define SORT_STREAM_H #include "extended/sort_stream_api.h" const GtNodeStreamClass* gt_sort_stream_class(void); #endif genometools-1.5.1/src/extended/sort_stream_api.h000066400000000000000000000025151211610345200220020ustar00rootroot00000000000000/* Copyright (c) 2006-2007, 2011 Gordon Gremme Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SORT_STREAM_API_H #define SORT_STREAM_API_H #include "extended/node_stream_api.h" /* Implements the interface. A sorts the objects it retrieves from its node source. */ typedef struct GtSortStream GtSortStream; /* Create a which sorts the genome nodes it retrieves from and returns them unmodified, but in sorted order. */ GtNodeStream* gt_sort_stream_new(GtNodeStream *in_stream); #endif genometools-1.5.1/src/extended/splice_site_info_stream.c000066400000000000000000000077751211610345200235100ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "extended/genome_node.h" #include "extended/node_stream_api.h" #include "extended/splice_site_info_stream.h" #include "extended/splice_site_info_visitor.h" struct GtSpliceSiteInfoStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; GtNodeVisitor *splice_site_info_visitor; }; #define gt_splice_site_info_stream_cast(GS)\ gt_node_stream_cast(gt_splice_site_info_stream_class(), GS) static int gt_splice_site_info_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtSpliceSiteInfoStream *ssis; int had_err; gt_error_check(err); ssis = gt_splice_site_info_stream_cast(ns); had_err = gt_node_stream_next(ssis->in_stream, gn, err); if (!had_err) { gt_assert(ssis->splice_site_info_visitor); if (*gn) { had_err = gt_genome_node_accept(*gn, ssis->splice_site_info_visitor, err); if (had_err) { /* we own the node -> delete it */ gt_genome_node_delete(*gn); *gn = NULL; } } } return had_err; } static void gt_splice_site_info_stream_free(GtNodeStream *ns) { GtSpliceSiteInfoStream *ssis = gt_splice_site_info_stream_cast(ns); gt_node_visitor_delete(ssis->splice_site_info_visitor); gt_node_stream_delete(ssis->in_stream); } const GtNodeStreamClass* gt_splice_site_info_stream_class(void) { static const GtNodeStreamClass *nsc = NULL; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtSpliceSiteInfoStream), gt_splice_site_info_stream_free, gt_splice_site_info_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_splice_site_info_stream_new(GtNodeStream *in_stream, GtRegionMapping *rm) { GtNodeStream *ns = gt_node_stream_create(gt_splice_site_info_stream_class(), false); GtSpliceSiteInfoStream *ssis = gt_splice_site_info_stream_cast(ns); ssis->in_stream = gt_node_stream_ref(in_stream); ssis->splice_site_info_visitor = gt_splice_site_info_visitor_new(rm); return ns; } bool gt_splice_site_info_stream_show(GtNodeStream *ns, GtFile *outfp) { GtSpliceSiteInfoStream *ssis; gt_assert(ns); ssis = gt_splice_site_info_stream_cast(ns); return gt_splice_site_info_visitor_show(ssis->splice_site_info_visitor, outfp); } bool gt_splice_site_info_stream_intron_processed(GtNodeStream *ns) { GtSpliceSiteInfoStream *ssis; gt_assert(ns); ssis = gt_splice_site_info_stream_cast(ns); return gt_splice_site_info_visitor_intron_processed(ssis ->splice_site_info_visitor); } bool gt_splice_site_info_stream_show_canonical(GtNodeStream *ns, bool show_gc) { GtSpliceSiteInfoStream *ssis; gt_assert(ns); ssis = gt_splice_site_info_stream_cast(ns); return gt_splice_site_info_visitor_show_canonical(ssis ->splice_site_info_visitor, show_gc); } genometools-1.5.1/src/extended/splice_site_info_stream.h000066400000000000000000000034141211610345200234770ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SPLICE_SITE_INFO_STREAM_H #define SPLICE_SITE_INFO_STREAM_H #include #include "extended/node_stream_api.h" #include "extended/region_mapping_api.h" /* implements the ``genome_stream'' interface */ typedef struct GtSpliceSiteInfoStream GtSpliceSiteInfoStream; const GtNodeStreamClass* gt_splice_site_info_stream_class(void); /* Create a GtSpliceSiteInfoStream, takes ownership of . */ GtNodeStream* gt_splice_site_info_stream_new(GtNodeStream *in_stream, GtRegionMapping *region_mapping); /* Returns if an intron has been processed, otherwise */ bool gt_splice_site_info_stream_show(GtNodeStream*, GtFile*); bool gt_splice_site_info_stream_intron_processed(GtNodeStream*); bool gt_splice_site_info_stream_show_canonical(GtNodeStream*, bool show_gc); #endif genometools-1.5.1/src/extended/splice_site_info_visitor.c000066400000000000000000000177111211610345200237030ustar00rootroot00000000000000/* Copyright (c) 2007-2010 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "core/fasta.h" #include "core/ma_api.h" #include "core/string_distri.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "core/xansi_api.h" #include "extended/feature_node_iterator_api.h" #include "extended/feature_type.h" #include "extended/node_visitor_api.h" #include "extended/splice_site_info_visitor.h" #include "extended/reverse_api.h" struct GtSpliceSiteInfoVisitor { const GtNodeVisitor parent_instance; GtRegionMapping *region_mapping; GtStringDistri *splicesites, *donorsites, *acceptorsites; bool show, intron_processed; }; #define splice_site_info_visitor_cast(GV)\ gt_node_visitor_cast(gt_splice_site_info_visitor_class(), GV) static void splice_site_info_visitor_free(GtNodeVisitor *nv) { GtSpliceSiteInfoVisitor *splice_site_info_visitor; gt_assert(nv); splice_site_info_visitor = splice_site_info_visitor_cast(nv); gt_region_mapping_delete(splice_site_info_visitor->region_mapping); gt_string_distri_delete(splice_site_info_visitor->splicesites); gt_string_distri_delete(splice_site_info_visitor->donorsites); gt_string_distri_delete(splice_site_info_visitor->acceptorsites); } static int process_intron(GtSpliceSiteInfoVisitor *ssiv, GtGenomeNode *intron, GtError *err) { char *sequence = NULL; GtStrand strand; GtRange range; char site[5]; GtStr *seqid; int had_err = 0; gt_error_check(err); gt_assert(ssiv && intron); ssiv->intron_processed = true; range = gt_genome_node_get_range(intron); gt_assert(range.start); /* 1-based coordinates */ if (gt_range_length(&range) >= 4) { seqid = gt_genome_node_get_seqid(intron); had_err = gt_region_mapping_get_sequence(ssiv->region_mapping, &sequence, seqid, range.start, range.end, err); if (!had_err) { strand = gt_feature_node_get_strand((GtFeatureNode*) intron); if (strand == GT_STRAND_FORWARD || strand == GT_STRAND_REVERSE) { /* fill site */ site[0] = tolower(sequence[0]); site[1] = tolower(sequence[1]); site[2] = tolower(sequence[gt_range_length(&range)-2]); site[3] = tolower(sequence[gt_range_length(&range)-1]); site[4] = '\0'; if (strand == GT_STRAND_REVERSE) had_err = gt_reverse_complement(site, 4, err); if (!had_err) { /* add site to distributions */ gt_string_distri_add(ssiv->splicesites, site); gt_string_distri_add(ssiv->acceptorsites, site + 2); site[2] = '\0'; gt_string_distri_add(ssiv->donorsites, site); ssiv->show = true; } } else { gt_warning("skipping intron with unknown orientation " "(file '%s', line %u)", gt_genome_node_get_filename(intron), gt_genome_node_get_line_number(intron)); } gt_free(sequence); } } return had_err; } static int splice_site_info_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GtError *err) { GtSpliceSiteInfoVisitor *ssiv; GtFeatureNodeIterator *fni; GtFeatureNode *node; int had_err = 0; gt_error_check(err); ssiv = splice_site_info_visitor_cast(nv); gt_assert(ssiv->region_mapping); fni = gt_feature_node_iterator_new(fn); while (!had_err && (node = gt_feature_node_iterator_next(fni))) { if (gt_feature_node_has_type((GtFeatureNode*) node, gt_ft_intron)) had_err = process_intron(ssiv, (GtGenomeNode*) node, err); } gt_feature_node_iterator_delete(fni); return had_err; } const GtNodeVisitorClass* gt_splice_site_info_visitor_class() { static const GtNodeVisitorClass *nvc = NULL; gt_class_alloc_lock_enter(); if (!nvc) { nvc = gt_node_visitor_class_new(sizeof (GtSpliceSiteInfoVisitor), splice_site_info_visitor_free, NULL, splice_site_info_visitor_feature_node, NULL, NULL, NULL); } gt_class_alloc_lock_leave(); return nvc; } GtNodeVisitor* gt_splice_site_info_visitor_new(GtRegionMapping *rm) { GtNodeVisitor *nv; GtSpliceSiteInfoVisitor *ssiv; gt_assert(rm); nv = gt_node_visitor_create(gt_splice_site_info_visitor_class()); ssiv = splice_site_info_visitor_cast(nv); ssiv->region_mapping = rm; ssiv->splicesites = gt_string_distri_new(); ssiv->acceptorsites = gt_string_distri_new(); ssiv->donorsites = gt_string_distri_new(); return nv; } static void showsplicesite(const char *string, unsigned long occurrences, double probability, GT_UNUSED void *unused) { gt_assert(string && strlen(string) == 4); gt_xputchar(string[0]); gt_xputchar(string[1]); gt_xputchar('-'); gt_xputchar(string[2]); gt_xputchar(string[3]); printf(": %6.2f%% (n=%lu)\n", probability * 100.0, occurrences); } static void showsinglesite(const char *string, unsigned long occurrences, double probability, GT_UNUSED void *unused) { gt_assert(string && strlen(string) == 2); printf("%s: %6.2f%% (n=%lu)\n", string, probability * 100.0, occurrences); } bool gt_splice_site_info_visitor_show(GtNodeVisitor *nv, GtFile *outfp) { GtSpliceSiteInfoVisitor *ssiv; gt_assert(nv); ssiv = splice_site_info_visitor_cast(nv); if (ssiv->show) { /* show splice sites */ gt_file_xprintf(outfp, "splice site distribution (for introns >= 4bp)\n"); gt_string_distri_foreach(ssiv->splicesites, showsplicesite, outfp); gt_xputchar('\n'); /* show donor sites */ gt_file_xprintf(outfp, "donor site distribution (for introns >= 4bp)\n"); gt_string_distri_foreach(ssiv->donorsites, showsinglesite, outfp); gt_xputchar('\n'); /* show acceptor sites */ gt_file_xprintf(outfp, "acceptor site distribution (for introns >= 4bp)\n"); gt_string_distri_foreach(ssiv->acceptorsites, showsinglesite, outfp); } return ssiv->intron_processed; } bool gt_splice_site_info_visitor_intron_processed(GtNodeVisitor *nv) { GtSpliceSiteInfoVisitor *ssiv; gt_assert(nv); ssiv = splice_site_info_visitor_cast(nv); return ssiv->intron_processed; } bool gt_splice_site_info_visitor_show_canonical(GtNodeVisitor *nv, bool show_gc) { GtSpliceSiteInfoVisitor *ssiv; bool canonical_shown = false; gt_assert(nv); ssiv = splice_site_info_visitor_cast(nv); if (ssiv->show) { unsigned long occ; if ((occ = gt_string_distri_get(ssiv->splicesites, "gtag"))) { printf("gt-ag: %6.2f%% (n=%lu)\n", gt_string_distri_get_prob(ssiv->splicesites, "gtag") * 100.0, occ); canonical_shown = true; } if (show_gc && (occ = gt_string_distri_get(ssiv->splicesites, "gcag"))) { printf("gc-ag: %6.2f%% (n=%lu)\n", gt_string_distri_get_prob(ssiv->splicesites, "gcag") * 100.0, occ); canonical_shown = true; } } return canonical_shown; } genometools-1.5.1/src/extended/splice_site_info_visitor.h000066400000000000000000000031231211610345200237000ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SPLICE_SITE_INFO_VISITOR_H #define SPLICE_SITE_INFO_VISITOR_H /* Implements the interface. */ typedef struct GtSpliceSiteInfoVisitor GtSpliceSiteInfoVisitor; #include #include "extended/node_visitor.h" #include "extended/region_mapping_api.h" const GtNodeVisitorClass* gt_splice_site_info_visitor_class(void); /* takes ownership of */ GtNodeVisitor* gt_splice_site_info_visitor_new(GtRegionMapping *rm); bool gt_splice_site_info_visitor_show(GtNodeVisitor*, GtFile*); bool gt_splice_site_info_visitor_intron_processed(GtNodeVisitor*); bool gt_splice_site_info_visitor_show_canonical(GtNodeVisitor*, bool show_gc); #endif genometools-1.5.1/src/extended/splicedseq.c000066400000000000000000000112611211610345200207340ustar00rootroot00000000000000/* Copyright (c) 2006-2007 Gordon Gremme Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/array.h" #include "core/ensure.h" #include "core/ma.h" #include "core/str.h" #include "extended/reverse_api.h" #include "extended/splicedseq.h" struct Splicedseq { GtStr *splicedseq; GtArray *positionmapping; bool forward; }; Splicedseq* gt_splicedseq_new(void) { Splicedseq *ss = gt_malloc(sizeof (Splicedseq)); ss->splicedseq = gt_str_new(); ss->positionmapping = gt_array_new(sizeof (unsigned long)); ss->forward = true; return ss; } void gt_splicedseq_add(Splicedseq *ss, unsigned long start, unsigned long end, const char *original_sequence) { unsigned long i; gt_assert(ss && start <= end && original_sequence); gt_str_append_cstr_nt(ss->splicedseq, original_sequence, end - start + 1); /* make sure elements are added in ascending order */ gt_assert(!gt_array_size(ss->positionmapping) || start > *(unsigned long*) gt_array_get_last(ss->positionmapping)); for (i = start; i <= end; i++) gt_array_add(ss->positionmapping, i); } char* gt_splicedseq_get(const Splicedseq *ss) { return gt_str_get(ss->splicedseq); } bool gt_splicedseq_pos_is_border(const Splicedseq *ss, unsigned long pos) { gt_assert(ss && gt_str_length(ss->splicedseq) == gt_array_size(ss->positionmapping)); gt_assert(pos < gt_str_length(ss->splicedseq)); /* legal position */ if (ss->forward && pos + 1 < gt_array_size(ss->positionmapping) && *(unsigned long*) gt_array_get(ss->positionmapping, pos) + 1 != *(unsigned long*) gt_array_get(ss->positionmapping, pos+1)) { return true; } if (!ss->forward && pos && *(unsigned long*) gt_array_get(ss->positionmapping, pos-1) - 1 != *(unsigned long*) gt_array_get(ss->positionmapping, pos)) { return true; } return false; } unsigned long gt_splicedseq_map(const Splicedseq *ss, unsigned long pos) { gt_assert(ss && gt_str_length(ss->splicedseq) == gt_array_size(ss->positionmapping)); gt_assert(pos < gt_str_length(ss->splicedseq)); /* legal position */ return *(unsigned long*) gt_array_get(ss->positionmapping, pos); } unsigned long gt_splicedseq_length(const Splicedseq *ss) { gt_assert(ss); return gt_str_length(ss->splicedseq); } int gt_splicedseq_reverse(Splicedseq *ss, GtError *err) { int had_err; gt_error_check(err); gt_assert(ss); had_err = gt_reverse_complement(gt_str_get(ss->splicedseq), gt_str_length(ss->splicedseq), err); if (!had_err) { gt_array_reverse(ss->positionmapping); ss->forward = !ss->forward; } return had_err; } void gt_splicedseq_reset(Splicedseq *ss) { gt_assert(ss); gt_str_reset(ss->splicedseq); gt_array_reset(ss->positionmapping); ss->forward = true; } static int check_splicedseq(Splicedseq *ss, GtError *err) { /*0123456789*/ static char *origseq = "aaccaagtga", *splicedseq = "ccgtg"; int had_err = 0; gt_error_check(err); gt_splicedseq_add(ss, 2, 3, origseq + 2); gt_splicedseq_add(ss, 6, 8, origseq + 6); gt_ensure(had_err, strcmp(gt_splicedseq_get(ss), splicedseq) == 0); gt_ensure(had_err, !gt_splicedseq_pos_is_border(ss, 0)); gt_ensure(had_err, gt_splicedseq_pos_is_border(ss, 1)); gt_ensure(had_err, !gt_splicedseq_pos_is_border(ss, 2)); gt_ensure(had_err, !gt_splicedseq_pos_is_border(ss, 3)); gt_ensure(had_err, !gt_splicedseq_pos_is_border(ss, 4)); return had_err; } int gt_splicedseq_unit_test(GtError *err) { Splicedseq *ss; int had_err = 0; gt_error_check(err); ss = gt_splicedseq_new(); had_err = check_splicedseq(ss, err); if (!had_err) { gt_splicedseq_reset(ss); had_err = check_splicedseq(ss, err); } gt_splicedseq_delete(ss); return had_err; } void gt_splicedseq_delete(Splicedseq *ss) { if (!ss) return; gt_str_delete(ss->splicedseq); gt_array_delete(ss->positionmapping); gt_free(ss); } genometools-1.5.1/src/extended/splicedseq.h000066400000000000000000000033521211610345200207430ustar00rootroot00000000000000/* Copyright (c) 2006-2007 Gordon Gremme Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SPLICEDSEQ_H #define SPLICEDSEQ_H #include typedef struct Splicedseq Splicedseq; Splicedseq* gt_splicedseq_new(void); /* adds an ``exon'' to the spliced sequence */ void gt_splicedseq_add(Splicedseq*, unsigned long start, unsigned long end, const char *original_sequence); char* gt_splicedseq_get(const Splicedseq*); bool gt_splicedseq_pos_is_border(const Splicedseq*, unsigned long); /* maps the given position back to the original coordinate system */ unsigned long gt_splicedseq_map(const Splicedseq*, unsigned long); unsigned long gt_splicedseq_length(const Splicedseq*); int gt_splicedseq_reverse(Splicedseq*, GtError*); void gt_splicedseq_reset(Splicedseq*); int gt_splicedseq_unit_test(GtError*); void gt_splicedseq_delete(Splicedseq*); #endif genometools-1.5.1/src/extended/sspliced_alignment.c000066400000000000000000000061101211610345200224410ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/cstr_api.h" #include "core/ma.h" #include "extended/sspliced_alignment.h" struct GtSSplicedAlignment { char *id; bool forward; GtArray *exons; /* the exon ranges */ }; GtSSplicedAlignment* gt_sspliced_alignment_new(const char *id, bool forward) { GtSSplicedAlignment *sa; gt_assert(id); sa = gt_malloc(sizeof *sa); sa->id = gt_cstr_dup(id); sa->forward = forward; sa->exons = gt_array_new(sizeof (GtRange)); return sa; } void gt_sspliced_alignment_delete(GtSSplicedAlignment *sa) { if (!sa) return; gt_array_delete(sa->exons); gt_free(sa->id); gt_free(sa); } bool gt_sspliced_alignment_is_forward(const GtSSplicedAlignment *sa) { gt_assert(sa); return sa->forward; } void gt_sspliced_alignment_add_exon(GtSSplicedAlignment *sa, GtRange exon) { gt_assert(sa); gt_array_add(sa->exons, exon); } unsigned long gt_sspliced_alignment_num_of_exons(const GtSSplicedAlignment *sa) { gt_assert(sa); return gt_array_size(sa->exons); } GtRange gt_sspliced_alignment_get_exon(const GtSSplicedAlignment *sa, unsigned long exon_number) { gt_assert(sa); return *(GtRange*) gt_array_get(sa->exons, exon_number); } GtRange gt_sspliced_alignment_genomic_range(const GtSSplicedAlignment *sa) { GtRange range; gt_assert(sa); gt_assert(gt_array_size(sa->exons)); range.start = ((GtRange*) gt_array_get_first(sa->exons))->start; range.end = ((GtRange*) gt_array_get_last(sa->exons))->end; return range; } static int range_compare_long_first(GtRange range_a, GtRange range_b) { gt_assert(range_a.start <= range_a.end && range_b.start <= range_b.end); if ((range_a.start == range_b.start) && (range_a.end == range_b.end)) return 0; /* range_a == range_b */ if ((range_a.start < range_b.start) || ((range_a.start == range_b.start) && (range_a.end > range_b.end))) return -1; /* range_a < range_b */ return 1; /* range_a > range_b */ } int gt_sspliced_alignment_compare_ptr(const GtSSplicedAlignment **sa_a, const GtSSplicedAlignment **sa_b) { GtRange range_a, range_b; range_a = gt_sspliced_alignment_genomic_range(*sa_a); range_b = gt_sspliced_alignment_genomic_range(*sa_b); return range_compare_long_first(range_a, range_b); } genometools-1.5.1/src/extended/sspliced_alignment.h000066400000000000000000000041231211610345200224500ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SSPLICED_ALIGNMENT_H #define SSPLICED_ALIGNMENT_H #include #include "core/range.h" /* the simple spliced alignment class */ typedef struct GtSSplicedAlignment GtSSplicedAlignment; GtSSplicedAlignment* gt_sspliced_alignment_new(const char *id, bool forward); void gt_sspliced_alignment_delete(GtSSplicedAlignment*); bool gt_sspliced_alignment_is_forward(const GtSSplicedAlignment*); void gt_sspliced_alignment_add_exon(GtSSplicedAlignment*, GtRange); unsigned long gt_sspliced_alignment_num_of_exons(const GtSSplicedAlignment*); GtRange gt_sspliced_alignment_get_exon(const GtSSplicedAlignment*, unsigned long exon_number); GtRange gt_sspliced_alignment_genomic_range(const GtSSplicedAlignment*); int gt_sspliced_alignment_compare_ptr(const GtSSplicedAlignment**, const GtSSplicedAlignment**); #endif genometools-1.5.1/src/extended/sspliced_alignment_parsing.c000066400000000000000000000100511211610345200241630ustar00rootroot00000000000000/* Copyright (c) 2005-2008 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/fa.h" #include "core/str.h" #include "extended/sspliced_alignment.h" #include "extended/sspliced_alignment_parsing.h" #define DELIMITER ',' #define FORWARDSTRANDCHAR '+' #define REVERSESTRANDCHAR '-' static int parse_input_line(GtSSplicedAlignment **alignment, const char *line, unsigned long line_length, GtError *err) { long leftpos, rightpos; unsigned long i = 0; GtRange exon; GtStr *id; int had_err = 0; gt_error_check(err); #define CHECKLINELENGTH\ if (!had_err && i >= line_length) { \ gt_error_set(err, "incomplete input line\n" \ "line=%s", line); \ return had_err = -1; \ } /* init */ id = gt_str_new(); *alignment = NULL; /* parsing id */ while (!had_err) { CHECKLINELENGTH; if (line[i] == DELIMITER) { /* reference id has been saved, skip this character and break */ i++; CHECKLINELENGTH; break; } else { /* save this character of the reference id */ gt_str_append_char(id, line[i]); } /* increase counter */ i++; } /* parsing orientation */ if (line[i] == FORWARDSTRANDCHAR) *alignment = gt_sspliced_alignment_new(gt_str_get(id), true); else if (line[i] == REVERSESTRANDCHAR) *alignment = gt_sspliced_alignment_new(gt_str_get(id), false); else { gt_error_set(err, "wrong formatted input line, orientation must be %c or %c\n" "line=%s", FORWARDSTRANDCHAR, REVERSESTRANDCHAR, line); had_err = -1; } i++; CHECKLINELENGTH; if (!had_err && line[i] != DELIMITER) { gt_error_set(err, "incomplete input line\nline=%s", line); had_err = -1; } while (!had_err) { if (line[i] == DELIMITER) { i++; CHECKLINELENGTH; if (!had_err && sscanf(line+i, "%ld-%ld", &leftpos, &rightpos) != 2) { gt_error_set(err, "incomplete input line\nline=%s", line); had_err = -1; } if (!had_err) { /* save exon */ exon.start = leftpos; exon.end = rightpos; gt_sspliced_alignment_add_exon(*alignment, exon); } } i++; if (i >= line_length) break; } if (had_err) gt_sspliced_alignment_delete(*alignment); else { /* alignment contains at least one exon */ gt_assert(gt_sspliced_alignment_num_of_exons(*alignment)); } gt_str_delete(id); return had_err; } int gt_sspliced_alignment_parse(GtArray *spliced_alignments, const char *filename, GtError *err) { FILE *input_file; GtSSplicedAlignment *sa; int had_err = 0; GtStr *line; gt_error_check(err); line = gt_str_new(); input_file = gt_fa_xfopen(filename, "r"); while (!had_err && gt_str_read_next_line(line, input_file) != EOF) { /* parse input line and save result in spliced alignment */ had_err = parse_input_line(&sa, gt_str_get(line), gt_str_length(line), err); if (!had_err) { /* store spliced alignment */ gt_array_add(spliced_alignments, sa); /* reset array */ gt_str_reset(line); } } gt_fa_xfclose(input_file); gt_str_delete(line); return had_err; } genometools-1.5.1/src/extended/sspliced_alignment_parsing.h000066400000000000000000000021531211610345200241740ustar00rootroot00000000000000/* Copyright (c) 2005-2008 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SSPLICED_ALIGNMENT_PARSING_H #define SSPLICED_ALIGNMENT_PARSING_H #include "core/error.h" int gt_sspliced_alignment_parse(GtArray *spliced_alignments, const char *filename, GtError*); #endif genometools-1.5.1/src/extended/stat_stream.c000066400000000000000000000072021211610345200211260ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "extended/eof_node.h" #include "extended/genome_node.h" #include "extended/stat_stream_api.h" #include "extended/stat_visitor.h" #include "extended/node_stream_api.h" struct GtStatStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; GtNodeVisitor *stat_visitor; unsigned long number_of_DAGs; }; const GtNodeStreamClass* gt_stat_stream_class(void); #define stat_stream_cast(GS)\ gt_node_stream_cast(gt_stat_stream_class(), GS) static int stat_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtStatStream *stat_stream; int had_err; gt_error_check(err); stat_stream = stat_stream_cast(ns); had_err = gt_node_stream_next(stat_stream->in_stream, gn, err); if (!had_err) { gt_assert(stat_stream->stat_visitor); if (*gn) { if (!gt_eof_node_try_cast(*gn)) /* do not count EOF nodes */ stat_stream->number_of_DAGs++; had_err = gt_genome_node_accept(*gn, stat_stream->stat_visitor, err); gt_assert(!had_err); /* the status visitor is sane */ } } return had_err; } static void stat_stream_free(GtNodeStream *ns) { GtStatStream *stat_stream = stat_stream_cast(ns); gt_node_visitor_delete(stat_stream->stat_visitor); gt_node_stream_delete(stat_stream->in_stream); } const GtNodeStreamClass* gt_stat_stream_class(void) { static const GtNodeStreamClass *nsc = NULL; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtStatStream), stat_stream_free, stat_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_stat_stream_new(GtNodeStream *in_stream, bool gene_length_distri, bool gene_score_distri, bool exon_length_distri, bool exon_number_distri, bool intron_length_distri, bool cds_length_distri, bool used_sources) { GtNodeStream *ns = gt_node_stream_create(gt_stat_stream_class(), false); GtStatStream *ss = stat_stream_cast(ns); ss->in_stream = gt_node_stream_ref(in_stream); ss->stat_visitor = gt_stat_visitor_new(gene_length_distri, gene_score_distri, exon_length_distri, exon_number_distri, intron_length_distri, cds_length_distri, used_sources); return ns; } void gt_stat_stream_show_stats(GtStatStream *ss, GtFile *outfp) { gt_file_xprintf(outfp, "parsed genome node DAGs: %lu\n", ss->number_of_DAGs); gt_stat_visitor_show_stats(ss->stat_visitor, outfp); } genometools-1.5.1/src/extended/stat_stream_api.h000066400000000000000000000047101211610345200217650ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef STAT_STREAM_API_H #define STAT_STREAM_API_H #include #include "core/file_api.h" #include "extended/node_stream_api.h" /* Implements the interface. A gathers statistics about the objects it retrieves from its node source and passes them along unmodified. */ typedef struct GtStatStream GtStatStream; /* Create a object which gathers statistics about the objects it retrieves from its and returns them unmodified. Besides the basic statistics, statistics about the following distributions can be gathered, if the corresponding argument equals : , , , , , . If equals , it is recorded which source tags have been encountered. */ GtNodeStream* gt_stat_stream_new(GtNodeStream *in_stream, bool gene_length_distribution, bool gene_score_distribution, bool exon_length_distribution, bool exon_number_distribution, bool intron_length_distribution, bool cds_length_distribution, bool used_sources); /* Write the statistics gathered by to . */ void gt_stat_stream_show_stats(GtStatStream *stat_stream, GtFile *outfp); #endif genometools-1.5.1/src/extended/stat_visitor.c000066400000000000000000000257131211610345200213410ustar00rootroot00000000000000/* Copyright (c) 2006-2011 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "core/cstr_table_api.h" #include "core/disc_distri_api.h" #include "core/unused_api.h" #include "extended/feature_node.h" #include "extended/node_visitor_api.h" #include "extended/stat_visitor.h" struct GtStatVisitor { const GtNodeVisitor parent_instance; unsigned long number_of_sequence_regions, number_of_multi_features, number_of_genes, number_of_protein_coding_genes, number_of_mRNAs, number_of_protein_coding_mRNAs, number_of_exons, number_of_CDSs, number_of_LTR_retrotransposons, exon_number_for_distri, cds_length_for_distri; unsigned long long total_length_of_sequence_regions; GtDiscDistri *gene_length_distribution, *gene_score_distribution, *exon_length_distribution, *exon_number_distribution, *intron_length_distribution, *cds_length_distribution; GtCstrTable *used_sources; }; #define stat_visitor_cast(GV)\ gt_node_visitor_cast(gt_stat_visitor_class(), GV) static void stat_visitor_free(GtNodeVisitor *nv) { GtStatVisitor *sv = stat_visitor_cast(nv); gt_cstr_table_delete(sv->used_sources); gt_disc_distri_delete(sv->cds_length_distribution); gt_disc_distri_delete(sv->intron_length_distribution); gt_disc_distri_delete(sv->exon_number_distribution); gt_disc_distri_delete(sv->exon_length_distribution); gt_disc_distri_delete(sv->gene_score_distribution); gt_disc_distri_delete(sv->gene_length_distribution); } static int add_exon_or_cds_number(GtFeatureNode *fn, void *data, GT_UNUSED GtError *err) { GtStatVisitor *sv = (GtStatVisitor*) data; gt_error_check(err); gt_assert(sv && fn); if (gt_feature_node_has_type(fn, gt_ft_exon)) sv->exon_number_for_distri++; else if (gt_feature_node_has_type(fn, gt_ft_CDS)) { GtRange range = gt_genome_node_get_range((GtGenomeNode*) fn); sv->cds_length_for_distri += gt_range_length(&range); } return 0; } static void compute_source_statistics(GtFeatureNode *fn, GtCstrTable *used_sources) { const char *source; gt_assert(fn && used_sources); source = gt_feature_node_get_source(fn); if (!gt_cstr_table_get(used_sources, source)) gt_cstr_table_add(used_sources, source); } static void compute_type_statistics(GtFeatureNode *fn, GtStatVisitor *sv) { GtRange range; gt_assert(fn && sv); if (gt_feature_node_has_type(fn, gt_ft_gene)) { sv->number_of_genes++; if (gt_feature_node_has_CDS(fn)) sv->number_of_protein_coding_genes++; if (sv->gene_length_distribution) { range = gt_genome_node_get_range((GtGenomeNode*) fn); gt_disc_distri_add(sv->gene_length_distribution, gt_range_length(&range)); } if (sv->gene_score_distribution) { gt_disc_distri_add(sv->gene_score_distribution, gt_feature_node_get_score(fn) * 100.0); } } else if (gt_feature_node_has_type(fn, gt_ft_mRNA)) { sv->number_of_mRNAs++; if (gt_feature_node_has_CDS(fn)) sv->number_of_protein_coding_mRNAs++; } else if (gt_feature_node_has_type(fn, gt_ft_exon)) { sv->number_of_exons++; if (sv->exon_length_distribution) { range = gt_genome_node_get_range((GtGenomeNode*) fn); gt_disc_distri_add(sv->exon_length_distribution, gt_range_length(&range)); } } else if (gt_feature_node_has_type(fn, gt_ft_CDS)) { sv->number_of_CDSs++; } else if (gt_feature_node_has_type(fn, gt_ft_intron)) { if (sv->intron_length_distribution) { range = gt_genome_node_get_range((GtGenomeNode*) fn); gt_disc_distri_add(sv->intron_length_distribution, gt_range_length(&range)); } } else if (gt_feature_node_has_type(fn, gt_ft_LTR_retrotransposon)) { sv->number_of_LTR_retrotransposons++; } } static int compute_statistics(GtFeatureNode *fn, void *data, GtError *err) { GtStatVisitor *sv; GT_UNUSED int rval; gt_error_check(err); gt_assert(data); sv = (GtStatVisitor*) data; if (gt_feature_node_is_multi(fn) && gt_feature_node_get_multi_representative(fn) == fn) { sv->number_of_multi_features++; } if (sv->used_sources) compute_source_statistics(fn, sv->used_sources); compute_type_statistics(fn, sv); if (sv->exon_number_distribution || sv->cds_length_distribution) { sv->exon_number_for_distri = 0; sv->cds_length_for_distri = 0; rval = gt_feature_node_traverse_direct_children(fn, sv, add_exon_or_cds_number, err); gt_assert(!rval); /* add_exon_or_cds_number() is sane */ if (sv->exon_number_distribution && sv->exon_number_for_distri) { gt_disc_distri_add(sv->exon_number_distribution, sv->exon_number_for_distri); } if (sv->cds_length_distribution && sv->cds_length_for_distri) { gt_disc_distri_add(sv->cds_length_distribution, sv->cds_length_for_distri); } } return 0; } static int stat_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GtError *err) { GtStatVisitor *sv; gt_error_check(err); sv = stat_visitor_cast(nv); return gt_feature_node_traverse_children(fn, sv, compute_statistics, false, err); } static int stat_visitor_region_node(GtNodeVisitor *nv, GtRegionNode *rn, GT_UNUSED GtError *err) { GtStatVisitor *sv; GtRange range; gt_error_check(err); sv = stat_visitor_cast(nv); sv->number_of_sequence_regions++; range = gt_genome_node_get_range((GtGenomeNode*) rn); sv->total_length_of_sequence_regions += gt_range_length(&range); return 0; } const GtNodeVisitorClass* gt_stat_visitor_class() { static const GtNodeVisitorClass *nvc = NULL; gt_class_alloc_lock_enter(); if (!nvc) { nvc = gt_node_visitor_class_new(sizeof (GtStatVisitor), stat_visitor_free, NULL, stat_visitor_feature_node, stat_visitor_region_node, NULL, NULL); } gt_class_alloc_lock_leave(); return nvc; } GtNodeVisitor* gt_stat_visitor_new(bool gene_length_distri, bool gene_score_distri, bool exon_length_distri, bool exon_number_distri, bool intron_length_distri, bool cds_length_distri, bool used_sources) { GtNodeVisitor *nv = gt_node_visitor_create(gt_stat_visitor_class()); GtStatVisitor *sv = stat_visitor_cast(nv); if (gene_length_distri) sv->gene_length_distribution = gt_disc_distri_new(); if (gene_score_distri) sv->gene_score_distribution = gt_disc_distri_new(); if (exon_length_distri) sv->exon_length_distribution = gt_disc_distri_new(); if (exon_number_distri) sv->exon_number_distribution = gt_disc_distri_new(); if (intron_length_distri) sv->intron_length_distribution = gt_disc_distri_new(); if (cds_length_distri) sv->cds_length_distribution = gt_disc_distri_new(); if (used_sources) sv->used_sources = gt_cstr_table_new(); return nv; } void gt_stat_visitor_show_stats(GtNodeVisitor *nv, GtFile *outfp) { GtStatVisitor *sv = stat_visitor_cast(nv); if (sv->number_of_sequence_regions) { gt_file_xprintf(outfp, "sequence regions: %lu (total length: %llu)\n", sv->number_of_sequence_regions, sv->total_length_of_sequence_regions); } if (sv->number_of_multi_features) { gt_file_xprintf(outfp, "multi-features: %lu\n", sv->number_of_multi_features); } if (sv->number_of_genes) gt_file_xprintf(outfp, "genes: %lu\n", sv->number_of_genes); if (sv->number_of_protein_coding_genes) { gt_file_xprintf(outfp, "protein-coding genes: %lu\n", sv->number_of_protein_coding_genes); } if (sv->number_of_mRNAs) gt_file_xprintf(outfp, "mRNAs: %lu\n", sv->number_of_mRNAs); if (sv->number_of_protein_coding_mRNAs) { gt_file_xprintf(outfp, "protein-coding mRNAs: %lu\n", sv->number_of_protein_coding_mRNAs); } if (sv->number_of_exons) gt_file_xprintf(outfp, "exons: %lu\n", sv->number_of_exons); if (sv->number_of_CDSs) gt_file_xprintf(outfp, "CDSs: %lu\n", sv->number_of_CDSs); if (sv->number_of_LTR_retrotransposons) { gt_file_xprintf(outfp, "LTR_retrotransposons: %lu\n", sv->number_of_LTR_retrotransposons); } if (sv->gene_length_distribution) { gt_file_xprintf(outfp, "gene length distribution:\n"); gt_disc_distri_show(sv->gene_length_distribution, outfp); } if (sv->gene_score_distribution) { gt_file_xprintf(outfp, "gene score distribution:\n"); gt_disc_distri_show(sv->gene_score_distribution, outfp); } if (sv->exon_length_distribution) { gt_file_xprintf(outfp, "exon length distribution:\n"); gt_disc_distri_show(sv->exon_length_distribution, outfp); } if (sv->exon_number_distribution) { gt_file_xprintf(outfp, "exon number distribution:\n"); gt_disc_distri_show(sv->exon_number_distribution, outfp); } if (sv->intron_length_distribution) { gt_file_xprintf(outfp, "intron length distribution:\n"); gt_disc_distri_show(sv->intron_length_distribution, outfp); } if (sv->cds_length_distribution) { gt_file_xprintf(outfp, "CDS length distribution:\n"); gt_disc_distri_show(sv->cds_length_distribution, outfp); } if (sv->used_sources) { GtStrArray *sources; unsigned long i; gt_file_xprintf(outfp, "used source tags:\n"); sources = gt_cstr_table_get_all(sv->used_sources); for (i = 0; i < gt_str_array_size(sources); i++) gt_file_xprintf(outfp, "%s\n", gt_str_array_get(sources, i)); gt_str_array_delete(sources); } } genometools-1.5.1/src/extended/stat_visitor.h000066400000000000000000000032371211610345200213430ustar00rootroot00000000000000/* Copyright (c) 2006-2011 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef STAT_VISITOR_H #define STAT_VISITOR_H /* Implements the interface, gathers statistics. */ typedef struct GtStatVisitor GtStatVisitor; #include "extended/node_visitor.h" const GtNodeVisitorClass* gt_stat_visitor_class(void); GtNodeVisitor* gt_stat_visitor_new(bool gene_length_distri, bool gene_score_distri, bool exon_length_distri, bool exon_number_distri, bool intron_length_distri, bool cds_length_distri, bool used_sources); void gt_stat_visitor_show_stats(GtNodeVisitor*, GtFile*); #endif genometools-1.5.1/src/extended/stream_evaluator.c000066400000000000000000002064331211610345200221640ustar00rootroot00000000000000/* Copyright (c) 2006-2011 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/bsearch.h" #include "core/cstr_api.h" #include "core/hashmap.h" #include "core/log.h" #include "core/ma.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "core/xansi_api.h" #include "extended/evaluator.h" #include "extended/gff3_output.h" #include "extended/stream_evaluator.h" #include "extended/transcript_evaluators.h" #include "extended/transcript_exons.h" #include "extended/transcript_used_exons.h" typedef struct { unsigned long TP, FP, FN; } NucEval; struct GtStreamEvaluator { GtNodeStream *reference, *prediction; bool nuceval, evalLTR; unsigned long LTRdelta; GtHashmap *slots; /* sequence id -> slot */ GtEvaluator *mRNA_gene_evaluator, *CDS_gene_evaluator, *mRNA_mRNA_evaluator, *CDS_mRNA_evaluator, *LTR_evaluator; GtTranscriptEvaluators *mRNA_exon_evaluators, *mRNA_exon_evaluators_collapsed, *CDS_exon_evaluators, *CDS_exon_evaluators_collapsed; unsigned long missing_genes, wrong_genes, missing_mRNAs, wrong_mRNAs, missing_LTRs, wrong_LTRs; NucEval mRNA_nucleotides, CDS_nucleotides; }; typedef struct { GtArray *genes_forward, *genes_reverse, *mRNAs_forward, *mRNAs_reverse, *LTRs; GtTranscriptExons *mRNA_exons_forward, *mRNA_exons_reverse, *CDS_exons_forward, *CDS_exons_reverse; GtTranscriptCounts *mRNA_counts_forward, *mRNA_counts_reverse, *CDS_counts_forward, *CDS_counts_reverse; GtRange real_range; unsigned long FP_mRNA_nucleotides_forward, FP_mRNA_nucleotides_reverse, FP_CDS_nucleotides_forward, FP_CDS_nucleotides_reverse; GtBittab *real_mRNA_nucleotides_forward, *pred_mRNA_nucleotides_forward, *real_mRNA_nucleotides_reverse, *pred_mRNA_nucleotides_reverse, *real_CDS_nucleotides_forward, *pred_CDS_nucleotides_forward, *real_CDS_nucleotides_reverse, *pred_CDS_nucleotides_reverse, *true_mRNA_genes_forward, *true_mRNA_genes_reverse, *true_CDS_genes_forward, *true_CDS_genes_reverse, *true_mRNA_mRNAs_forward, *true_mRNA_mRNAs_reverse, *true_CDS_mRNAs_forward, *true_CDS_mRNAs_reverse, *true_LTRs, *overlapped_genes_forward, *overlapped_genes_reverse, *overlapped_mRNAs_forward, *overlapped_mRNAs_reverse, *overlapped_LTRs; GtTranscriptBittabs *mRNA_exon_bittabs_forward, *mRNA_exon_bittabs_reverse, *CDS_exon_bittabs_forward, *CDS_exon_bittabs_reverse; GtTranscriptUsedExons *used_mRNA_exons_forward, *used_mRNA_exons_reverse, *used_CDS_exons_forward, *used_CDS_exons_reverse; } Slot; typedef struct { Slot *slot; bool nuceval, verbose; } ProcessRealFeatureInfo; typedef struct { Slot *slot; bool nuceval, verbose, exondiff, exondiffcollapsed; unsigned long LTRdelta; GtEvaluator *mRNA_gene_evaluator, *CDS_gene_evaluator, *mRNA_mRNA_evaluator, *CDS_mRNA_evaluator, *LTR_evaluator; GtTranscriptEvaluators *mRNA_exon_evaluators, *mRNA_exon_evaluators_collapsed, *CDS_exon_evaluators, *CDS_exon_evaluators_collapsed; unsigned long *wrong_genes, *wrong_mRNAs, *wrong_LTRs; } ProcessPredictedFeatureInfo; static Slot* slot_new(bool nuceval, GtRange range) { unsigned long length; Slot *s = gt_calloc(1, sizeof (Slot)); length = gt_range_length(&range); s->genes_forward = gt_array_new(sizeof (GtGenomeNode*)); s->genes_reverse = gt_array_new(sizeof (GtGenomeNode*)); s->mRNAs_forward = gt_array_new(sizeof (GtGenomeNode*)); s->mRNAs_reverse = gt_array_new(sizeof (GtGenomeNode*)); s->LTRs = gt_array_new(sizeof (GtGenomeNode*)); s->mRNA_exons_forward = gt_transcript_exons_new(); s->mRNA_exons_reverse = gt_transcript_exons_new(); s->CDS_exons_forward = gt_transcript_exons_new(); s->CDS_exons_reverse = gt_transcript_exons_new(); if (nuceval) { s->real_range = range; s->real_mRNA_nucleotides_forward = gt_bittab_new(length); s->pred_mRNA_nucleotides_forward = gt_bittab_new(length); s->real_mRNA_nucleotides_reverse = gt_bittab_new(length); s->pred_mRNA_nucleotides_reverse = gt_bittab_new(length); s->real_CDS_nucleotides_forward = gt_bittab_new(length); s->pred_CDS_nucleotides_forward = gt_bittab_new(length); s->real_CDS_nucleotides_reverse = gt_bittab_new(length); s->pred_CDS_nucleotides_reverse = gt_bittab_new(length); } s->used_mRNA_exons_forward = gt_transcript_used_exons_new(); s->used_mRNA_exons_reverse = gt_transcript_used_exons_new(); s->used_CDS_exons_forward = gt_transcript_used_exons_new(); s->used_CDS_exons_reverse = gt_transcript_used_exons_new(); return s; } static void slot_delete(Slot *s) { unsigned long i; gt_assert(s); for (i = 0; i < gt_array_size(s->genes_forward); i++) gt_genome_node_delete(*(GtGenomeNode**) gt_array_get(s->genes_forward, i)); gt_array_delete(s->genes_forward); for (i = 0; i < gt_array_size(s->genes_reverse); i++) gt_genome_node_delete(*(GtGenomeNode**) gt_array_get(s->genes_reverse, i)); gt_array_delete(s->genes_reverse); for (i = 0; i < gt_array_size(s->mRNAs_forward); i++) gt_genome_node_delete(*(GtGenomeNode**) gt_array_get(s->mRNAs_forward, i)); gt_array_delete(s->mRNAs_forward); for (i = 0; i < gt_array_size(s->mRNAs_reverse); i++) gt_genome_node_delete(*(GtGenomeNode**) gt_array_get(s->mRNAs_reverse, i)); gt_array_delete(s->mRNAs_reverse); for (i = 0; i < gt_array_size(s->LTRs); i++) gt_genome_node_delete(*(GtGenomeNode**) gt_array_get(s->LTRs, i)); gt_array_delete(s->LTRs); gt_transcript_exons_delete(s->mRNA_exons_forward); gt_transcript_exons_delete(s->mRNA_exons_reverse); gt_transcript_exons_delete(s->CDS_exons_forward); gt_transcript_exons_delete(s->CDS_exons_reverse); gt_transcript_counts_delete(s->mRNA_counts_forward); gt_transcript_counts_delete(s->mRNA_counts_reverse); gt_transcript_counts_delete(s->CDS_counts_forward); gt_transcript_counts_delete(s->CDS_counts_reverse); gt_bittab_delete(s->real_mRNA_nucleotides_forward); gt_bittab_delete(s->pred_mRNA_nucleotides_forward); gt_bittab_delete(s->real_mRNA_nucleotides_reverse); gt_bittab_delete(s->pred_mRNA_nucleotides_reverse); gt_bittab_delete(s->real_CDS_nucleotides_forward); gt_bittab_delete(s->pred_CDS_nucleotides_forward); gt_bittab_delete(s->real_CDS_nucleotides_reverse); gt_bittab_delete(s->pred_CDS_nucleotides_reverse); gt_bittab_delete(s->true_mRNA_genes_forward); gt_bittab_delete(s->true_mRNA_genes_reverse); gt_bittab_delete(s->true_CDS_genes_forward); gt_bittab_delete(s->true_CDS_genes_reverse); gt_bittab_delete(s->true_mRNA_mRNAs_forward); gt_bittab_delete(s->true_mRNA_mRNAs_reverse); gt_bittab_delete(s->true_CDS_mRNAs_forward); gt_bittab_delete(s->true_CDS_mRNAs_reverse); gt_bittab_delete(s->true_LTRs); gt_bittab_delete(s->overlapped_genes_forward); gt_bittab_delete(s->overlapped_genes_reverse); gt_bittab_delete(s->overlapped_mRNAs_forward); gt_bittab_delete(s->overlapped_mRNAs_reverse); gt_bittab_delete(s->overlapped_LTRs); gt_transcript_bittabs_delete(s->mRNA_exon_bittabs_forward); gt_transcript_bittabs_delete(s->mRNA_exon_bittabs_reverse); gt_transcript_bittabs_delete(s->CDS_exon_bittabs_forward); gt_transcript_bittabs_delete(s->CDS_exon_bittabs_reverse); gt_transcript_used_exons_delete(s->used_mRNA_exons_forward); gt_transcript_used_exons_delete(s->used_mRNA_exons_reverse); gt_transcript_used_exons_delete(s->used_CDS_exons_forward); gt_transcript_used_exons_delete(s->used_CDS_exons_reverse); gt_free(s); } GtStreamEvaluator* gt_stream_evaluator_new(GtNodeStream *reference, GtNodeStream *prediction, bool nuceval, bool evalLTR, unsigned long LTRdelta) { GtStreamEvaluator *evaluator = gt_calloc(1, sizeof (GtStreamEvaluator)); evaluator->reference = gt_node_stream_ref(reference); evaluator->prediction = gt_node_stream_ref(prediction); evaluator->nuceval = nuceval; evaluator->evalLTR = evalLTR; evaluator->LTRdelta = LTRdelta; evaluator->slots = gt_hashmap_new(GT_HASH_STRING, gt_free_func, (GtFree) slot_delete); evaluator->mRNA_gene_evaluator = gt_evaluator_new(); evaluator->CDS_gene_evaluator = gt_evaluator_new(); evaluator->mRNA_mRNA_evaluator = gt_evaluator_new(); evaluator->CDS_mRNA_evaluator = gt_evaluator_new(); evaluator->LTR_evaluator = gt_evaluator_new(); evaluator->mRNA_exon_evaluators = gt_transcript_evaluators_new(); evaluator->mRNA_exon_evaluators_collapsed = gt_transcript_evaluators_new(); evaluator->CDS_exon_evaluators = gt_transcript_evaluators_new(); evaluator->CDS_exon_evaluators_collapsed = gt_transcript_evaluators_new(); return evaluator; } static int set_actuals_and_sort_them(GT_UNUSED void *key, void *value, void *data, GT_UNUSED GtError *err) { GtStreamEvaluator *se = (GtStreamEvaluator*) data; Slot *s = (Slot*) value; gt_error_check(err); gt_assert(key && value && data); /* set actual genes */ gt_evaluator_add_actual(se->mRNA_gene_evaluator, gt_array_size(s->genes_forward)); gt_evaluator_add_actual(se->mRNA_gene_evaluator, gt_array_size(s->genes_reverse)); gt_evaluator_add_actual(se->CDS_gene_evaluator, gt_array_size(s->genes_forward)); gt_evaluator_add_actual(se->CDS_gene_evaluator, gt_array_size(s->genes_reverse)); /* set actual mRNAs */ gt_evaluator_add_actual(se->mRNA_mRNA_evaluator, gt_array_size(s->mRNAs_forward)); gt_evaluator_add_actual(se->mRNA_mRNA_evaluator, gt_array_size(s->mRNAs_reverse)); gt_evaluator_add_actual(se->CDS_mRNA_evaluator, gt_array_size(s->mRNAs_forward)); gt_evaluator_add_actual(se->CDS_mRNA_evaluator, gt_array_size(s->mRNAs_reverse)); /* set actual LTRs */ gt_evaluator_add_actual(se->LTR_evaluator, gt_array_size(s->LTRs)); /* set actual exons (before uniq!) */ gt_transcript_evaluators_add_actuals(se->mRNA_exon_evaluators, s->mRNA_exons_forward); gt_transcript_evaluators_add_actuals(se->mRNA_exon_evaluators, s->mRNA_exons_reverse); gt_transcript_evaluators_add_actuals(se->CDS_exon_evaluators, s->CDS_exons_forward); gt_transcript_evaluators_add_actuals(se->CDS_exon_evaluators, s->CDS_exons_reverse); /* sort genes */ gt_genome_nodes_sort(s->genes_forward); gt_genome_nodes_sort(s->genes_reverse); /* sort mRNAs */ gt_genome_nodes_sort(s->mRNAs_forward); gt_genome_nodes_sort(s->mRNAs_reverse); /* sort LTRs */ gt_genome_nodes_sort(s->LTRs); /* sort exons */ gt_transcript_exons_sort(s->mRNA_exons_forward); gt_transcript_exons_sort(s->mRNA_exons_reverse); gt_transcript_exons_sort(s->CDS_exons_forward); gt_transcript_exons_sort(s->CDS_exons_reverse); /* determine true exons */ s->mRNA_counts_forward = gt_transcript_exons_uniq_in_place_count(s->mRNA_exons_forward); s->mRNA_counts_reverse = gt_transcript_exons_uniq_in_place_count(s->mRNA_exons_reverse); s->CDS_counts_forward = gt_transcript_exons_uniq_in_place_count(s->CDS_exons_forward); s->CDS_counts_reverse = gt_transcript_exons_uniq_in_place_count(s->CDS_exons_reverse); /* set actual exons for the collapsed case (after uniq!) */ gt_transcript_evaluators_add_actuals(se->mRNA_exon_evaluators_collapsed, s->mRNA_exons_forward); gt_transcript_evaluators_add_actuals(se->mRNA_exon_evaluators_collapsed, s->mRNA_exons_reverse); gt_transcript_evaluators_add_actuals(se->CDS_exon_evaluators_collapsed, s->CDS_exons_forward); gt_transcript_evaluators_add_actuals(se->CDS_exon_evaluators_collapsed, s->CDS_exons_reverse); /* make sure that the genes are sorted */ gt_assert(gt_genome_nodes_are_sorted(s->genes_forward)); gt_assert(gt_genome_nodes_are_sorted(s->genes_reverse)); /* make sure that the mRNAs are sorted */ gt_assert(gt_genome_nodes_are_sorted(s->mRNAs_forward)); gt_assert(gt_genome_nodes_are_sorted(s->mRNAs_reverse)); /* make sure that the LTRs are sorted */ gt_assert(gt_genome_nodes_are_sorted(s->LTRs)); /* make sure that the exons are sorted */ gt_assert(gt_transcript_exons_are_sorted(s->mRNA_exons_forward)); gt_assert(gt_transcript_exons_are_sorted(s->mRNA_exons_reverse)); gt_assert(gt_transcript_exons_are_sorted(s->CDS_exons_forward)); gt_assert(gt_transcript_exons_are_sorted(s->CDS_exons_reverse)); /* init true bittabs */ s->true_mRNA_genes_forward = gt_array_size(s->genes_forward) ? gt_bittab_new(gt_array_size(s->genes_forward)) : NULL; s->true_mRNA_genes_reverse = gt_array_size(s->genes_reverse) ? gt_bittab_new(gt_array_size(s->genes_reverse)) : NULL; s->true_CDS_genes_forward = gt_array_size(s->genes_forward) ? gt_bittab_new(gt_array_size(s->genes_forward)) : NULL; s->true_CDS_genes_reverse = gt_array_size(s->genes_reverse) ? gt_bittab_new(gt_array_size(s->genes_reverse)) : NULL; s->true_mRNA_mRNAs_forward = gt_array_size(s->mRNAs_forward) ? gt_bittab_new(gt_array_size(s->mRNAs_forward)) : NULL; s->true_mRNA_mRNAs_reverse = gt_array_size(s->mRNAs_reverse) ? gt_bittab_new(gt_array_size(s->mRNAs_reverse)) : NULL; s->true_CDS_mRNAs_forward = gt_array_size(s->mRNAs_forward) ? gt_bittab_new(gt_array_size(s->mRNAs_forward)) : NULL; s->true_CDS_mRNAs_reverse = gt_array_size(s->mRNAs_reverse) ? gt_bittab_new(gt_array_size(s->mRNAs_reverse)) : NULL; s->true_LTRs = gt_array_size(s->LTRs) ? gt_bittab_new(gt_array_size(s->LTRs)) : NULL; /* init overlap bittabs */ s->overlapped_genes_forward = gt_array_size(s->genes_forward) ? gt_bittab_new(gt_array_size(s->genes_forward)) : NULL; s->overlapped_genes_reverse = gt_array_size(s->genes_reverse) ? gt_bittab_new(gt_array_size(s->genes_reverse)) : NULL; s->overlapped_mRNAs_forward = gt_array_size(s->mRNAs_forward) ? gt_bittab_new(gt_array_size(s->mRNAs_forward)) : NULL; s->overlapped_mRNAs_reverse = gt_array_size(s->mRNAs_reverse) ? gt_bittab_new(gt_array_size(s->mRNAs_reverse)) : NULL; s->overlapped_LTRs = gt_array_size(s->LTRs) ? gt_bittab_new(gt_array_size(s->LTRs)) : NULL; /* init bittabs (for collapsed exons) */ s->mRNA_exon_bittabs_forward = gt_transcript_exons_create_bittabs(s->mRNA_exons_forward); s->mRNA_exon_bittabs_reverse = gt_transcript_exons_create_bittabs(s->mRNA_exons_reverse); s->CDS_exon_bittabs_forward = gt_transcript_exons_create_bittabs(s->CDS_exons_forward); s->CDS_exon_bittabs_reverse = gt_transcript_exons_create_bittabs(s->CDS_exons_reverse); return 0; } static void add_real_exon(GtTranscriptExons *te, GtRange range, GtFeatureNode *fn) { gt_assert(te); gt_array_add(gt_transcript_exons_get_all(te), range); switch (gt_feature_node_get_transcriptfeaturetype(fn)) { case TRANSCRIPT_FEATURE_TYPE_UNDETERMINED: gt_warning("type of feature (single, initial, internal, or terminal) " "given on line %u in file \"%s\" could not be determined, " "because the feature has no Parent attribute. Treating it as " "single.", gt_genome_node_get_line_number((GtGenomeNode*) fn), gt_genome_node_get_filename((GtGenomeNode*) fn)); /*@fallthrough@*/ case TRANSCRIPT_FEATURE_TYPE_SINGLE: gt_array_add(gt_transcript_exons_get_single(te), range); break; case TRANSCRIPT_FEATURE_TYPE_INITIAL: gt_array_add(gt_transcript_exons_get_initial(te), range); break; case TRANSCRIPT_FEATURE_TYPE_INTERNAL: gt_array_add(gt_transcript_exons_get_internal(te), range); break; case TRANSCRIPT_FEATURE_TYPE_TERMINAL: gt_array_add(gt_transcript_exons_get_terminal(te), range); break; } } static void add_nucleotide_exon(GtBittab *nucleotides, GtRange range, GtRange real_range, unsigned long *FP) { unsigned long i; gt_assert(nucleotides); for (i = range.start; i <= range.end; i++) { if (gt_range_within(&real_range, i)) { gt_assert(i >= real_range.start); gt_bittab_set_bit(nucleotides, i - real_range.start); } else { gt_assert(FP); (*FP)++; } } } static int process_real_feature(GtFeatureNode *fn, void *data, GT_UNUSED GtError *err) { ProcessRealFeatureInfo *info = (ProcessRealFeatureInfo*) data; GtGenomeNode *gn_ref; GtRange range; gt_error_check(err); gt_assert(fn && data); if (gt_feature_node_has_type(fn, gt_ft_gene)) { switch (gt_feature_node_get_strand(fn)) { case GT_STRAND_FORWARD: gn_ref = gt_genome_node_ref((GtGenomeNode*) fn); gt_array_add(info->slot->genes_forward, gn_ref); break; case GT_STRAND_REVERSE: gn_ref = gt_genome_node_ref((GtGenomeNode*) fn); gt_array_add(info->slot->genes_reverse, gn_ref); break; default: if (info->verbose) { fprintf(stderr, "skipping real gene with unknown orientation " "(line %u)\n", gt_genome_node_get_line_number((GtGenomeNode*) fn)); } } } else if (gt_feature_node_has_type(fn, gt_ft_mRNA)) { switch (gt_feature_node_get_strand(fn)) { case GT_STRAND_FORWARD: gn_ref = gt_genome_node_ref((GtGenomeNode*) fn); gt_array_add(info->slot->mRNAs_forward, gn_ref); break; case GT_STRAND_REVERSE: gn_ref = gt_genome_node_ref((GtGenomeNode*) fn); gt_array_add(info->slot->mRNAs_reverse, gn_ref); break; default: if (info->verbose) { fprintf(stderr, "skipping real mRNA with unknown orientation " "(line %u)\n", gt_genome_node_get_line_number((GtGenomeNode*) fn)); } } } else if (gt_feature_node_has_type(fn, gt_ft_LTR_retrotransposon)) { gn_ref = gt_genome_node_ref((GtGenomeNode*) fn); gt_array_add(info->slot->LTRs, gn_ref); } else if (gt_feature_node_has_type(fn, gt_ft_CDS)) { range = gt_genome_node_get_range((GtGenomeNode*) fn); switch (gt_feature_node_get_strand(fn)) { case GT_STRAND_FORWARD: add_real_exon(info->slot->CDS_exons_forward, range, fn); /* nucleotide level */ if (info->nuceval) { add_nucleotide_exon(info->slot->real_CDS_nucleotides_forward, range, info->slot->real_range, NULL); } break; case GT_STRAND_REVERSE: add_real_exon(info->slot->CDS_exons_reverse, range, fn); /* nucleotide level */ if (info->nuceval) { add_nucleotide_exon(info->slot->real_CDS_nucleotides_reverse, range, info->slot->real_range, NULL); } break; default: if (info->verbose) { fprintf(stderr, "skipping real CDS exon with unknown orientation " "(line %u)\n", gt_genome_node_get_line_number((GtGenomeNode*) fn)); } } } else if (gt_feature_node_has_type(fn, gt_ft_exon)) { range = gt_genome_node_get_range((GtGenomeNode*) fn); switch (gt_feature_node_get_strand(fn)) { case GT_STRAND_FORWARD: add_real_exon(info->slot->mRNA_exons_forward, range, fn); /* nucleotide level */ if (info->nuceval) { add_nucleotide_exon(info->slot->real_mRNA_nucleotides_forward, range, info->slot->real_range, NULL); } break; case GT_STRAND_REVERSE: add_real_exon(info->slot->mRNA_exons_reverse, range, fn); /* nucleotide level */ if (info->nuceval) { add_nucleotide_exon(info->slot->real_mRNA_nucleotides_reverse, range, info->slot->real_range, NULL); } break; default: if (info->verbose) { fprintf(stderr, "skipping real mRNA exon with unknown orientation " "(line %u)\n", gt_genome_node_get_line_number((GtGenomeNode*) fn)); } } } return 0; } typedef struct { GtArray *exons; const char *feature_type; } StoreExonFeatureInfo; static int store_exon(GtFeatureNode *fn, void *data, GT_UNUSED GtError *err) { StoreExonFeatureInfo *info = (StoreExonFeatureInfo*) data; GtRange range; gt_error_check(err); gt_assert(fn && info); if (gt_feature_node_has_type(fn, info->feature_type)) { range = gt_genome_node_get_range((GtGenomeNode*) fn); gt_array_add(info->exons, range); } return 0; } static bool mRNAs_are_equal(GtGenomeNode *gn_1, GtGenomeNode *gn_2, const char *feature_type) { GtArray *exons_1, *exons_2; StoreExonFeatureInfo info; bool equal; GT_UNUSED int had_err; gt_assert(gn_1 && gn_2 && feature_type); /* init */ exons_1 = gt_array_new(sizeof (GtRange)); exons_2 = gt_array_new(sizeof (GtRange)); /* get exon ranges */ info.exons = exons_1; info.feature_type = feature_type; had_err = gt_feature_node_traverse_children(gt_feature_node_cast(gn_1), &info, store_exon, false, NULL); gt_assert(!had_err); /* cannot happen, store_exon() is sane */ info.exons = exons_2; had_err = gt_feature_node_traverse_children(gt_feature_node_cast(gn_2), &info, store_exon, false, NULL); gt_assert(!had_err); /* cannot happen, store_exon() is sane */ /* sort exon ranges */ gt_ranges_sort(exons_1); gt_ranges_sort(exons_2); /* compare exon ranges */ equal = gt_ranges_are_equal(exons_1, exons_2); /* free */ gt_array_delete(exons_1); gt_array_delete(exons_2); return equal; } typedef struct { GtArray *exons, *mRNAs; const char *feature_type; } StoreGeneFeatureInfo; static int store_gene_feature(GtFeatureNode *fn, void *data, GT_UNUSED GtError *err) { StoreGeneFeatureInfo *info = (StoreGeneFeatureInfo*) data; GtRange range; gt_error_check(err); gt_assert(fn && info); if (gt_feature_node_has_type(fn, gt_ft_mRNA)) gt_array_add(info->mRNAs, fn); else if (gt_feature_node_has_type(fn, info->feature_type)) { range = gt_genome_node_get_range((GtGenomeNode*) fn); gt_array_add(info->exons, range); } return 0; } static bool genes_are_equal(GtGenomeNode *gn_1, GtGenomeNode *gn_2, const char *feature_type) { GtArray *exons_1, *exons_2, *mRNAs_1, *mRNAs_2; StoreGeneFeatureInfo info; unsigned long i; bool equal; GT_UNUSED int had_err; gt_assert(gn_1 && gn_2 && feature_type); /* init */ exons_1 = gt_array_new(sizeof (GtRange)); exons_2 = gt_array_new(sizeof (GtRange)); mRNAs_1 = gt_array_new(sizeof (GtGenomeNode*)); mRNAs_2 = gt_array_new(sizeof (GtGenomeNode*)); /* get (direct) gene features */ info.exons = exons_1; info.mRNAs = mRNAs_1; info.feature_type = feature_type; had_err = gt_feature_node_traverse_direct_children(gt_feature_node_cast(gn_1), &info, store_gene_feature, NULL); gt_assert(!had_err); /* cannot happen, store_gene_feature() is sane */ info.exons = exons_2; info.mRNAs = mRNAs_2; had_err = gt_feature_node_traverse_direct_children(gt_feature_node_cast(gn_2), &info, store_gene_feature, NULL); gt_assert(!had_err); /* cannot happen, store_gene_feature() is sane */ /* sort exon ranges */ gt_ranges_sort(exons_1); gt_ranges_sort(exons_2); /* compare exon ranges */ equal = gt_ranges_are_equal(exons_1, exons_2); /* compare mRNAs, if necessary */ if (equal && gt_array_size(mRNAs_1) == gt_array_size(mRNAs_2)) { /* sort mRNAs */ gt_genome_nodes_sort(mRNAs_1); gt_genome_nodes_sort(mRNAs_2); for (i = 0; i < gt_array_size(mRNAs_1); i++) { gt_assert(equal); equal = mRNAs_are_equal(*(GtGenomeNode**) gt_array_get(mRNAs_1, i), *(GtGenomeNode**) gt_array_get(mRNAs_2, i), feature_type); if (!equal) break; } } /* free */ gt_array_delete(exons_1); gt_array_delete(exons_2); gt_array_delete(mRNAs_1); gt_array_delete(mRNAs_2); return equal; } static void store_predicted_exon(GtTranscriptEvaluators *te, GtFeatureNode *fn) { gt_assert(te && fn); gt_evaluator_add_predicted(gt_transcript_evaluators_get_all(te), 1); switch (gt_feature_node_get_transcriptfeaturetype(fn)) { case TRANSCRIPT_FEATURE_TYPE_UNDETERMINED: gt_warning("type of feature (single, initial, internal, or terminal) " "given on line %u in file \"%s\" could not be determined, " "because the feature has no Parent attribute. Treating it as " "single.", gt_genome_node_get_line_number((GtGenomeNode*) fn), gt_genome_node_get_filename((GtGenomeNode*) fn)); /*@fallthrough@*/ case TRANSCRIPT_FEATURE_TYPE_SINGLE: gt_evaluator_add_predicted(gt_transcript_evaluators_get_single(te), 1); break; case TRANSCRIPT_FEATURE_TYPE_INITIAL: gt_evaluator_add_predicted(gt_transcript_evaluators_get_initial(te), 1); break; case TRANSCRIPT_FEATURE_TYPE_INTERNAL: gt_evaluator_add_predicted(gt_transcript_evaluators_get_internal(te), 1); break; case TRANSCRIPT_FEATURE_TYPE_TERMINAL: gt_evaluator_add_predicted(gt_transcript_evaluators_get_terminal(te), 1); break; } } /* adds exon only if necessary */ static void add_predicted_collapsed(GtDlist *used_exons, GtRange *predicted_range, GtEvaluator *exon_evaluator_collapsed) { GtRange *used_range; if (!gt_dlist_find(used_exons, predicted_range)) { used_range = gt_malloc(sizeof (GtRange)); used_range->start = predicted_range->start; used_range->end = predicted_range->end; gt_dlist_add(used_exons, used_range); gt_evaluator_add_predicted(exon_evaluator_collapsed, 1); } } static void store_predicted_exon_collapsed(GtTranscriptUsedExons *used_exons, GtRange *predicted_range, GtTranscriptEvaluators *te, GtFeatureNode *fn) { add_predicted_collapsed(gt_transcript_used_exons_get_all(used_exons), predicted_range, gt_transcript_evaluators_get_all(te)); switch (gt_feature_node_get_transcriptfeaturetype(fn)) { case TRANSCRIPT_FEATURE_TYPE_UNDETERMINED: /* we do not show a warning here, because store_predicted_exon() has been called before and already shown one */ case TRANSCRIPT_FEATURE_TYPE_SINGLE: add_predicted_collapsed(gt_transcript_used_exons_get_single(used_exons), predicted_range, gt_transcript_evaluators_get_single(te)); break; case TRANSCRIPT_FEATURE_TYPE_INITIAL: add_predicted_collapsed(gt_transcript_used_exons_get_initial(used_exons), predicted_range, gt_transcript_evaluators_get_initial(te)); break; case TRANSCRIPT_FEATURE_TYPE_INTERNAL: add_predicted_collapsed(gt_transcript_used_exons_get_internal(used_exons), predicted_range, gt_transcript_evaluators_get_internal(te)); break; case TRANSCRIPT_FEATURE_TYPE_TERMINAL: add_predicted_collapsed(gt_transcript_used_exons_get_terminal(used_exons), predicted_range, gt_transcript_evaluators_get_terminal(te)); break; } } static void mark_and_show_false_exon(GtFeatureNode *fn, bool exondiff) { gt_feature_node_mark(fn); /* mark false exons */ if (exondiff) { gt_gff3_output_leading(fn, NULL); printf(".\n"); } } static void determine_true_exon(GtFeatureNode *fn, GtStrand predicted_strand, bool exondiff, bool exondiffcollapsed, GtRange *predicted_range, GtArray *exons_forward, GtArray *exons_reverse, GtArray *true_exons_forward, GtArray *true_exons_reverse, GtBittab *true_exons_forward_collapsed, GtBittab *true_exons_reverse_collapsed, GtEvaluator *exon_evaluator, GtEvaluator *exon_evaluator_collapsed) { GtRange *actual_range; unsigned long num, *ctr_ptr; if ((actual_range = bsearch(predicted_range, predicted_strand == GT_STRAND_FORWARD ? gt_array_get_space(exons_forward) : gt_array_get_space(exons_reverse), predicted_strand == GT_STRAND_FORWARD ? gt_array_size(exons_forward) : gt_array_size(exons_reverse), sizeof (GtRange), (GtCompare) gt_range_compare))) { if (predicted_strand == GT_STRAND_FORWARD) { num = actual_range - (GtRange*) gt_array_get_space(exons_forward); ctr_ptr = gt_array_get(true_exons_forward, num); if (*ctr_ptr) { (*ctr_ptr)--; gt_evaluator_add_true(exon_evaluator); } else mark_and_show_false_exon(fn, exondiff); if (true_exons_forward_collapsed && !gt_bittab_bit_is_set(true_exons_forward_collapsed, num)) { gt_bittab_set_bit(true_exons_forward_collapsed, num); gt_evaluator_add_true(exon_evaluator_collapsed); } } else { num = actual_range - (GtRange*) gt_array_get_space(exons_reverse); ctr_ptr = gt_array_get(true_exons_reverse, num); if (*ctr_ptr) { (*ctr_ptr)--; gt_evaluator_add_true(exon_evaluator); } else mark_and_show_false_exon(fn, exondiff); if (true_exons_reverse_collapsed && !gt_bittab_bit_is_set(true_exons_reverse_collapsed, num)) { gt_bittab_set_bit(true_exons_reverse_collapsed, num); gt_evaluator_add_true(exon_evaluator_collapsed); } } } else { mark_and_show_false_exon(fn, exondiff); if (exondiffcollapsed) { gt_gff3_output_leading(fn, NULL); printf(".\n"); } } } static void store_true_exon(GtFeatureNode *fn, GtStrand predicted_strand, GtRange *predicted_range, bool exondiff, bool exondiffcollapsed, GtTranscriptExons *exons_forward, GtTranscriptExons *exons_reverse, GtTranscriptCounts *counts_forward, GtTranscriptCounts *counts_reverse, GtTranscriptBittabs *exon_bittabs_forward, GtTranscriptBittabs *exon_bittabs_reverse, GtTranscriptEvaluators *exon_evaluators, GtTranscriptEvaluators *exon_evaluators_collapsed) { gt_assert(fn && predicted_range && exons_forward && exons_reverse); determine_true_exon(fn, predicted_strand, exondiff, exondiffcollapsed, predicted_range, gt_transcript_exons_get_all(exons_forward), gt_transcript_exons_get_all(exons_reverse), gt_transcript_counts_get_all(counts_forward), gt_transcript_counts_get_all(counts_reverse), gt_transcript_bittabs_get_all(exon_bittabs_forward), gt_transcript_bittabs_get_all(exon_bittabs_reverse), gt_transcript_evaluators_get_all(exon_evaluators), gt_transcript_evaluators_get_all( exon_evaluators_collapsed)); switch (gt_feature_node_get_transcriptfeaturetype(fn)) { case TRANSCRIPT_FEATURE_TYPE_UNDETERMINED: case TRANSCRIPT_FEATURE_TYPE_SINGLE: determine_true_exon(fn, predicted_strand, exondiff, exondiffcollapsed, predicted_range, gt_transcript_exons_get_single(exons_forward), gt_transcript_exons_get_single(exons_reverse), gt_transcript_counts_get_single(counts_forward), gt_transcript_counts_get_single(counts_reverse), gt_transcript_bittabs_get_single( exon_bittabs_forward), gt_transcript_bittabs_get_single( exon_bittabs_reverse), gt_transcript_evaluators_get_single(exon_evaluators), gt_transcript_evaluators_get_single( exon_evaluators_collapsed)); break; case TRANSCRIPT_FEATURE_TYPE_INITIAL: determine_true_exon(fn, predicted_strand, exondiff, exondiffcollapsed, predicted_range, gt_transcript_exons_get_initial(exons_forward), gt_transcript_exons_get_initial(exons_reverse), gt_transcript_counts_get_initial(counts_forward), gt_transcript_counts_get_initial(counts_reverse), gt_transcript_bittabs_get_initial( exon_bittabs_forward), gt_transcript_bittabs_get_initial( exon_bittabs_reverse), gt_transcript_evaluators_get_initial(exon_evaluators), gt_transcript_evaluators_get_initial( exon_evaluators_collapsed)); break; case TRANSCRIPT_FEATURE_TYPE_INTERNAL: determine_true_exon(fn, predicted_strand, exondiff, exondiffcollapsed, predicted_range, gt_transcript_exons_get_internal(exons_forward), gt_transcript_exons_get_internal(exons_reverse), gt_transcript_counts_get_internal(counts_forward), gt_transcript_counts_get_internal(counts_reverse), gt_transcript_bittabs_get_internal( exon_bittabs_forward), gt_transcript_bittabs_get_internal( exon_bittabs_reverse), gt_transcript_evaluators_get_internal( exon_evaluators), gt_transcript_evaluators_get_internal( exon_evaluators_collapsed)); break; case TRANSCRIPT_FEATURE_TYPE_TERMINAL: determine_true_exon(fn, predicted_strand, exondiff, exondiffcollapsed, predicted_range, gt_transcript_exons_get_terminal(exons_forward), gt_transcript_exons_get_terminal(exons_reverse), gt_transcript_counts_get_terminal(counts_forward), gt_transcript_counts_get_terminal(counts_reverse), gt_transcript_bittabs_get_terminal( exon_bittabs_forward), gt_transcript_bittabs_get_terminal( exon_bittabs_reverse), gt_transcript_evaluators_get_terminal( exon_evaluators), gt_transcript_evaluators_get_terminal( exon_evaluators_collapsed)); break; } } typedef bool (*FeaturesAreEqualFunc)(GtGenomeNode *gn_1, GtGenomeNode *gn_2, const char *feature_type); static void compare_features(GtArray *real_genome_nodes, GtFeatureNode *fn, GtArray *genes_forward, GtArray *genes_reverse, GtBittab *true_genes_forward, GtBittab *true_genes_reverse, GtEvaluator *gene_evaluator, FeaturesAreEqualFunc features_are_equal, const char *feature_type) { GtStrand predicted_strand; GtGenomeNode **real_gn; unsigned long i, num; gt_assert(real_genome_nodes && fn && genes_forward && genes_reverse); gt_assert(gene_evaluator && features_are_equal && feature_type); predicted_strand = gt_feature_node_get_strand(fn); for (i = 0; i < gt_array_size(real_genome_nodes); i++) { real_gn = *(GtGenomeNode***) gt_array_get(real_genome_nodes, i); if (features_are_equal((GtGenomeNode*) fn, *real_gn, feature_type)) { if (predicted_strand == GT_STRAND_FORWARD) { num = real_gn - (GtGenomeNode**) gt_array_get_space(genes_forward); if (!gt_bittab_bit_is_set(true_genes_forward, num)) { gt_bittab_set_bit(true_genes_forward, num); gt_evaluator_add_true(gene_evaluator); /*@loopbreak@*/ break; } } else { num = real_gn - (GtGenomeNode**) gt_array_get_space(genes_reverse); if (!gt_bittab_bit_is_set(true_genes_reverse, num)) { gt_bittab_set_bit(true_genes_reverse, num); gt_evaluator_add_true(gene_evaluator); /*@loopbreak@*/ break; } } } } } static int process_predicted_feature(GtFeatureNode *fn, void *data, GT_UNUSED GtError *err) { ProcessPredictedFeatureInfo *info = (ProcessPredictedFeatureInfo*) data; GtRange predicted_range; unsigned long i, num; GtStrand predicted_strand; GtArray *real_genome_nodes; GtGenomeNode **real_gn; gt_error_check(err); gt_assert(fn && data); predicted_range = gt_genome_node_get_range((GtGenomeNode*) fn); predicted_strand = gt_feature_node_get_strand(fn); real_genome_nodes = gt_array_new(sizeof (GtGenomeNode**)); if (gt_feature_node_has_type(fn, gt_ft_gene)) { /* store predicted gene */ gt_evaluator_add_predicted(info->mRNA_gene_evaluator, 1); gt_evaluator_add_predicted(info->CDS_gene_evaluator, 1); /* determine true gene */ switch (predicted_strand) { case GT_STRAND_FORWARD: case GT_STRAND_REVERSE: gt_bsearch_all_mark(real_genome_nodes, &fn, predicted_strand == GT_STRAND_FORWARD ? gt_array_get_space(info->slot->genes_forward) : gt_array_get_space(info->slot->genes_reverse), predicted_strand == GT_STRAND_FORWARD ? gt_array_size(info->slot->genes_forward) : gt_array_size(info->slot->genes_reverse), sizeof (GtGenomeNode*), (GtCompareWithData) gt_genome_node_compare_with_data, NULL, predicted_strand == GT_STRAND_FORWARD ? info->slot->overlapped_genes_forward : info->slot->overlapped_genes_reverse); if (gt_array_size(real_genome_nodes)) { /* gene(s) with the same range found -> check if they are equal */ compare_features(real_genome_nodes, fn, info->slot->genes_forward, info->slot->genes_reverse, info->slot->true_mRNA_genes_forward, info->slot->true_mRNA_genes_reverse, info->mRNA_gene_evaluator, genes_are_equal, gt_ft_exon); compare_features(real_genome_nodes, fn, info->slot->genes_forward, info->slot->genes_reverse, info->slot->true_CDS_genes_forward, info->slot->true_CDS_genes_reverse, info->CDS_gene_evaluator, genes_are_equal, gt_ft_CDS); } else { /* no gene with the same range found -> check if this is a wrong gene */ if (!gt_feature_node_overlaps_nodes_mark(fn, predicted_strand == GT_STRAND_FORWARD ? info->slot->genes_forward : info->slot->genes_reverse, predicted_strand == GT_STRAND_FORWARD ? info->slot->overlapped_genes_forward : info->slot->overlapped_genes_reverse)) { (*info->wrong_genes)++; } } break; default: if (info->verbose) { fprintf(stderr, "skipping predicted gene with unknown orientation " "(line %u)\n", gt_genome_node_get_line_number((GtGenomeNode*) fn)); } } } else if (gt_feature_node_has_type(fn, gt_ft_mRNA)) { /* store predicted mRNA */ gt_evaluator_add_predicted(info->mRNA_mRNA_evaluator, 1); gt_evaluator_add_predicted(info->CDS_mRNA_evaluator, 1); /* determine true mRNA */ switch (predicted_strand) { case GT_STRAND_FORWARD: case GT_STRAND_REVERSE: gt_bsearch_all_mark(real_genome_nodes, &fn, predicted_strand == GT_STRAND_FORWARD ? gt_array_get_space(info->slot->mRNAs_forward) : gt_array_get_space(info->slot->mRNAs_reverse), predicted_strand == GT_STRAND_FORWARD ? gt_array_size(info->slot->mRNAs_forward) : gt_array_size(info->slot->mRNAs_reverse), sizeof (GtGenomeNode*), (GtCompareWithData) gt_genome_node_compare_with_data, NULL, predicted_strand == GT_STRAND_FORWARD ? info->slot->overlapped_mRNAs_forward : info->slot->overlapped_mRNAs_reverse); if (gt_array_size(real_genome_nodes)) { /* mRNA(s) with the same range found -> check if they are equal */ compare_features(real_genome_nodes, fn, info->slot->mRNAs_forward, info->slot->mRNAs_reverse, info->slot->true_mRNA_mRNAs_forward, info->slot->true_mRNA_mRNAs_reverse, info->mRNA_mRNA_evaluator, mRNAs_are_equal, gt_ft_exon); compare_features(real_genome_nodes, fn, info->slot->mRNAs_forward, info->slot->mRNAs_reverse, info->slot->true_CDS_mRNAs_forward, info->slot->true_CDS_mRNAs_reverse, info->CDS_mRNA_evaluator, mRNAs_are_equal, gt_ft_CDS); } else { /* no mRNA with the same range found -> check if this is a wrong mRNA */ if (!gt_feature_node_overlaps_nodes_mark(fn, predicted_strand == GT_STRAND_FORWARD ? info->slot->mRNAs_forward : info->slot->mRNAs_reverse, predicted_strand == GT_STRAND_FORWARD ? info->slot->overlapped_mRNAs_forward : info->slot->overlapped_mRNAs_reverse)) { (*info->wrong_mRNAs)++; } } break; default: if (info->verbose) { fprintf(stderr, "skipping predicted mRNA with unknown orientation " "(line %u)\n", gt_genome_node_get_line_number((GtGenomeNode*) fn)); } } } else if (gt_feature_node_has_type(fn, gt_ft_LTR_retrotransposon)) { /* store predicted LTR */ gt_evaluator_add_predicted(info->LTR_evaluator, 1); /* determine true LTR */ gt_bsearch_all_mark(real_genome_nodes, &fn, gt_array_get_space(info->slot->LTRs), gt_array_size(info->slot->LTRs), sizeof (GtGenomeNode*), (GtCompareWithData) gt_genome_node_compare_delta, &info->LTRdelta, info->slot->overlapped_LTRs); if (gt_array_size(real_genome_nodes)) { for (i = 0; i < gt_array_size(real_genome_nodes); i++) { real_gn = *(GtGenomeNode***) gt_array_get(real_genome_nodes, i); num = real_gn - (GtGenomeNode**) gt_array_get_space(info->slot->LTRs); if (!gt_bittab_bit_is_set(info->slot->true_LTRs, num)) { gt_bittab_set_bit(info->slot->true_LTRs, num); gt_evaluator_add_true(info->LTR_evaluator); /*@loopbreak@*/ break; } } } else { /* no LTR with the same range found -> check if this is a wrong LTR */ if (!gt_feature_node_overlaps_nodes_mark(fn, info->slot->LTRs, info->slot->overlapped_LTRs)) { (*info->wrong_LTRs)++; } } } else if (gt_feature_node_has_type(fn, gt_ft_exon)) { /* store predicted exon (mRNA level)*/ store_predicted_exon(info->mRNA_exon_evaluators, fn); /* store predicted exon (mRNA level, collapsed) */ store_predicted_exon_collapsed(predicted_strand == GT_STRAND_FORWARD ? info->slot->used_mRNA_exons_forward : info->slot->used_mRNA_exons_reverse, &predicted_range, info->mRNA_exon_evaluators_collapsed, fn); /* determine true exon (mRNA level)*/ switch (predicted_strand) { case GT_STRAND_FORWARD: case GT_STRAND_REVERSE: store_true_exon(fn, predicted_strand, &predicted_range, info->exondiff, info->exondiffcollapsed, info->slot->mRNA_exons_forward, info->slot->mRNA_exons_reverse, info->slot->mRNA_counts_forward, info->slot->mRNA_counts_reverse, info->slot->mRNA_exon_bittabs_forward, info->slot->mRNA_exon_bittabs_reverse, info->mRNA_exon_evaluators, info->mRNA_exon_evaluators_collapsed); /* nucleotide level */ if (info->nuceval) { add_nucleotide_exon(predicted_strand == GT_STRAND_FORWARD ? info->slot->pred_mRNA_nucleotides_forward : info->slot->pred_mRNA_nucleotides_reverse, predicted_range, info->slot->real_range, predicted_strand == GT_STRAND_FORWARD ? &info->slot->FP_mRNA_nucleotides_forward : &info->slot->FP_mRNA_nucleotides_reverse); } break; default: if (info->verbose) { fprintf(stderr, "skipping predicted exon with unknown orientation " "(line %u)\n", gt_genome_node_get_line_number((GtGenomeNode*) fn)); } } } else if (gt_feature_node_has_type(fn, gt_ft_CDS)) { /* store predicted exon (CDS level)*/ store_predicted_exon(info->CDS_exon_evaluators, fn); /* store predicted exon (CDS level, collapsed) */ store_predicted_exon_collapsed(predicted_strand == GT_STRAND_FORWARD ? info->slot->used_CDS_exons_forward : info->slot->used_CDS_exons_reverse, &predicted_range, info->CDS_exon_evaluators_collapsed, fn); /* determine true exon (CDS level) */ switch (predicted_strand) { case GT_STRAND_FORWARD: case GT_STRAND_REVERSE: store_true_exon(fn, predicted_strand, &predicted_range, info->exondiff, info->exondiffcollapsed, info->slot->CDS_exons_forward, info->slot->CDS_exons_reverse, info->slot->CDS_counts_forward, info->slot->CDS_counts_reverse, info->slot->CDS_exon_bittabs_forward, info->slot->CDS_exon_bittabs_reverse, info->CDS_exon_evaluators, info->CDS_exon_evaluators_collapsed); /* nucleotide level */ if (info->nuceval) { add_nucleotide_exon(predicted_strand == GT_STRAND_FORWARD ? info->slot->pred_CDS_nucleotides_forward : info->slot->pred_CDS_nucleotides_reverse, predicted_range, info->slot->real_range, predicted_strand == GT_STRAND_FORWARD ? &info->slot->FP_CDS_nucleotides_forward : &info->slot->FP_CDS_nucleotides_reverse); } break; default: if (info->verbose) { fprintf(stderr, "skipping predicted exon with unknown orientation " "(line %u)\n", gt_genome_node_get_line_number((GtGenomeNode*) fn)); } } } gt_array_delete(real_genome_nodes); return 0; } static int determine_missing_features(GT_UNUSED void *key, void *value, void *data, GT_UNUSED GtError *err) { GtStreamEvaluator *se = (GtStreamEvaluator*) data; Slot *slot = (Slot*) value; gt_error_check(err); gt_assert(key && value && data); if (slot->overlapped_genes_forward) { se->missing_genes += gt_bittab_size(slot->overlapped_genes_forward) - gt_bittab_count_set_bits(slot->overlapped_genes_forward); } if (slot->overlapped_genes_reverse) { se->missing_genes += gt_bittab_size(slot->overlapped_genes_reverse) - gt_bittab_count_set_bits(slot->overlapped_genes_reverse); } if (slot->overlapped_mRNAs_forward) { se->missing_mRNAs += gt_bittab_size(slot->overlapped_mRNAs_forward) - gt_bittab_count_set_bits(slot->overlapped_mRNAs_forward); } if (slot->overlapped_mRNAs_reverse) { se->missing_mRNAs += gt_bittab_size(slot->overlapped_mRNAs_reverse) - gt_bittab_count_set_bits(slot->overlapped_mRNAs_reverse); } if (slot->overlapped_LTRs) { se->missing_LTRs += gt_bittab_size(slot->overlapped_LTRs) - gt_bittab_count_set_bits(slot->overlapped_LTRs); } return 0; } static void add_nucleotide_values(NucEval *nucleotides, GtBittab *real, GtBittab *pred, GtBittab *tmp, const char *level) { gt_assert(nucleotides && real && pred && tmp); if (gt_log_enabled()) { gt_log_log("%s", level); gt_log_log("reference:"); gt_bittab_show(real, gt_log_fp()); gt_log_log("prediction:"); gt_bittab_show(pred, gt_log_fp()); } /* real & pred = TP */ gt_bittab_and(tmp, real, pred); nucleotides->TP += gt_bittab_count_set_bits(tmp); /* ~real & pred = FP */; gt_bittab_complement(tmp, real); gt_bittab_and_equal(tmp, pred); nucleotides->FP += gt_bittab_count_set_bits(tmp); /* real & ~pred = FN */ gt_bittab_complement(tmp, pred); gt_bittab_and_equal(tmp, real); nucleotides->FN += gt_bittab_count_set_bits(tmp); } static int compute_nucleotides_values(GT_UNUSED void *key, void *value, void *data, GT_UNUSED GtError *err) { GtStreamEvaluator *se = (GtStreamEvaluator*) data; Slot *slot = (Slot*) value; GtBittab *tmp; gt_error_check(err); gt_assert(key && value && data); /* add ``out of range'' FPs */ se->mRNA_nucleotides.FP += slot->FP_mRNA_nucleotides_forward; se->mRNA_nucleotides.FP += slot->FP_mRNA_nucleotides_reverse; se->CDS_nucleotides.FP += slot->FP_CDS_nucleotides_forward; se->CDS_nucleotides.FP += slot->FP_CDS_nucleotides_reverse; /* add other values */ tmp = gt_bittab_new(gt_range_length(&slot->real_range)); add_nucleotide_values(&se->mRNA_nucleotides, slot->real_mRNA_nucleotides_forward, slot->pred_mRNA_nucleotides_forward, tmp, "mRNA forward"); add_nucleotide_values(&se->mRNA_nucleotides, slot->real_mRNA_nucleotides_reverse, slot->pred_mRNA_nucleotides_reverse, tmp, "mRNA reverse"); add_nucleotide_values(&se->CDS_nucleotides, slot->real_CDS_nucleotides_forward, slot->pred_CDS_nucleotides_forward, tmp, "CDS forward"); add_nucleotide_values(&se->CDS_nucleotides, slot->real_CDS_nucleotides_reverse, slot->pred_CDS_nucleotides_reverse, tmp, "CDS reverse"); gt_bittab_delete(tmp); return 0; } int gt_stream_evaluator_evaluate(GtStreamEvaluator *se, bool verbose, bool exondiff, bool exondiffcollapsed, GtNodeVisitor *nv, GtError *err) { GtGenomeNode *gn; GtFeatureNode *fn; Slot *slot; ProcessRealFeatureInfo real_info; ProcessPredictedFeatureInfo predicted_info; int had_err; gt_error_check(err); gt_assert(se); /* init */ real_info.nuceval = se->nuceval; real_info.verbose = verbose; predicted_info.nuceval = se->nuceval; predicted_info.verbose = verbose; predicted_info.exondiff = exondiff; predicted_info.exondiffcollapsed = exondiffcollapsed; predicted_info.LTRdelta = se->LTRdelta; predicted_info.mRNA_gene_evaluator = se->mRNA_gene_evaluator; predicted_info.CDS_gene_evaluator = se->CDS_gene_evaluator; predicted_info.mRNA_mRNA_evaluator = se->mRNA_mRNA_evaluator; predicted_info.CDS_mRNA_evaluator = se->CDS_mRNA_evaluator; predicted_info.LTR_evaluator = se->LTR_evaluator; predicted_info.mRNA_exon_evaluators = se->mRNA_exon_evaluators; predicted_info.mRNA_exon_evaluators_collapsed = se->mRNA_exon_evaluators_collapsed; predicted_info.CDS_exon_evaluators = se->CDS_exon_evaluators; predicted_info.CDS_exon_evaluators_collapsed = se->CDS_exon_evaluators_collapsed; predicted_info.wrong_genes = &se->wrong_genes; predicted_info.wrong_mRNAs = &se->wrong_mRNAs; predicted_info.wrong_LTRs = &se->wrong_LTRs; /* process the reference stream completely */ while (!(had_err = gt_node_stream_next(se->reference, &gn, err)) && gn) { if (gt_region_node_try_cast(gn)) { /* each sequence region gets its own ``slot'' */ if (!(slot = gt_hashmap_get(se->slots, gt_str_get(gt_genome_node_get_seqid(gn))))) { slot = slot_new(se->nuceval, gt_genome_node_get_range(gn)); gt_hashmap_add(se->slots, gt_cstr_dup(gt_str_get(gt_genome_node_get_seqid(gn))), slot); } gt_assert(slot); } /* we consider only genome features */ if ((fn = gt_feature_node_try_cast(gn))) { /* each sequence must have its own ``slot'' at this point */ slot = gt_hashmap_get(se->slots, gt_str_get(gt_genome_node_get_seqid(gn))); gt_assert(slot); /* store the exons */ real_info.slot = slot; gt_feature_node_determine_transcripttypes(fn); had_err = gt_feature_node_traverse_children(fn, &real_info, process_real_feature, false, NULL); gt_assert(!had_err); /* cannot happen, process_real_feature() is sane */ } if (nv) gt_genome_node_accept(gn, nv, err); gt_genome_node_delete(gn); } /* set the actuals and sort them */ if (!had_err) { had_err = gt_hashmap_foreach(se->slots, set_actuals_and_sort_them, se, NULL); gt_assert(!had_err); /* set_actuals_and_sort_them() is sane */ } /* process the prediction stream */ if (!had_err) { while (!(had_err = gt_node_stream_next(se->prediction, &gn, err)) && gn) { /* we consider only genome features */ if ((fn = gt_feature_node_try_cast(gn))) { /* get (real) slot */ slot = gt_hashmap_get(se->slots, gt_str_get(gt_genome_node_get_seqid(gn))); if (slot) { predicted_info.slot = slot; gt_feature_node_determine_transcripttypes(fn); had_err = gt_feature_node_traverse_children(fn, &predicted_info, process_predicted_feature, false, NULL); gt_assert(!had_err); /* cannot happen, process_predicted_feature() is sane */ } else { /* we got no (real) slot */ gt_warning("sequence id \"%s\" (with predictions) not given in " "reference", gt_str_get(gt_genome_node_get_seqid(gn))); } } if (nv) had_err = gt_genome_node_accept(gn, nv, err); gt_genome_node_delete(gn); } } /* determine the missing mRNAs */ if (!had_err) { had_err = gt_hashmap_foreach(se->slots, determine_missing_features, se, NULL); gt_assert(!had_err); /* determine_missing_features() is sane */ } /* compute the nucleotides values */ if (!had_err && se->nuceval) { had_err = gt_hashmap_foreach(se->slots, compute_nucleotides_values, se, NULL); gt_assert(!had_err); /* compute_nucleotides_values() is sane */ } return had_err; } static void show_transcript_values(GtTranscriptEvaluators *te, const char *level, const char *additional_info, GtFile *outfp) { gt_assert(te); gt_file_xprintf(outfp, "exon sensitivity (%s level, all%s): ", level, additional_info); gt_evaluator_show_sensitivity(gt_transcript_evaluators_get_all(te), outfp); gt_file_xfputc('\n', outfp); gt_file_xprintf(outfp, "exon specificity (%s level, all%s): ", level, additional_info); gt_evaluator_show_specificity(gt_transcript_evaluators_get_all(te), outfp); gt_file_xfputc('\n', outfp); gt_file_xprintf(outfp, "exon sensitivity (%s level, single%s): ", level, additional_info); gt_evaluator_show_sensitivity(gt_transcript_evaluators_get_single(te), outfp); gt_file_xfputc('\n', outfp); gt_file_xprintf(outfp, "exon specificity (%s level, single%s): ", level, additional_info ); gt_evaluator_show_specificity(gt_transcript_evaluators_get_single(te), outfp); gt_file_xfputc('\n', outfp); gt_file_xprintf(outfp, "exon sensitivity (%s level, initial%s): ", level, additional_info); gt_evaluator_show_sensitivity(gt_transcript_evaluators_get_initial(te), outfp); gt_file_xfputc('\n', outfp); gt_file_xprintf(outfp, "exon specificity (%s level, initial%s): ", level, additional_info); gt_evaluator_show_specificity(gt_transcript_evaluators_get_initial(te), outfp); gt_file_xfputc('\n', outfp); gt_file_xprintf(outfp, "exon sensitivity (%s level, internal%s): ", level, additional_info); gt_evaluator_show_sensitivity(gt_transcript_evaluators_get_internal(te), outfp); gt_file_xfputc('\n', outfp); gt_file_xprintf(outfp, "exon specificity (%s level, internal%s): ", level, additional_info); gt_evaluator_show_specificity(gt_transcript_evaluators_get_internal(te), outfp); gt_file_xfputc('\n', outfp); gt_file_xprintf(outfp, "exon sensitivity (%s level, terminal%s): ", level, additional_info); gt_evaluator_show_sensitivity(gt_transcript_evaluators_get_terminal(te), outfp); gt_file_xfputc('\n', outfp); gt_file_xprintf(outfp, "exon specificity (%s level, terminal%s): ", level, additional_info); gt_evaluator_show_specificity(gt_transcript_evaluators_get_terminal(te), outfp); gt_file_xfputc('\n', outfp); } static void show_nucleotide_values(NucEval *nucleotides, const char *level, GtFile *outfp) { double sensitivity = 1.0, specificity = 1.0; gt_assert(nucleotides && level); if (nucleotides->TP || nucleotides->FN) { sensitivity = (double) nucleotides->TP / (nucleotides->TP + nucleotides->FN); } if (nucleotides->TP || nucleotides->FP) { specificity = (double) nucleotides->TP / (nucleotides->TP + nucleotides->FP); } gt_file_xprintf(outfp, "nucleotide sensitivity (%s level): %6.2f%% " "(TP=%lu/(TP=%lu + FN=%lu))\n", level, sensitivity * 100.0, nucleotides->TP, nucleotides->TP, nucleotides->FN); gt_file_xprintf(outfp, "nucleotide specificity (%s level): %6.2f%% " "(TP=%lu/(TP=%lu + FP=%lu))\n", level, specificity * 100.0, nucleotides->TP, nucleotides->TP, nucleotides->FP); } void gt_stream_evaluator_show(GtStreamEvaluator *se, GtFile *outfp) { gt_assert(se); if (!se->evalLTR) { /* gene level */ gt_file_xprintf(outfp, "gene sensitivity (mRNA level): "); gt_evaluator_show_sensitivity(se->mRNA_gene_evaluator, outfp); gt_file_xprintf(outfp, " (missing genes: %lu)\n", se->missing_genes); gt_file_xprintf(outfp, "gene specificity (mRNA level): "); gt_evaluator_show_specificity(se->mRNA_gene_evaluator, outfp); gt_file_xprintf(outfp, " (wrong genes: %lu)\n", se->wrong_genes); gt_file_xprintf(outfp, "gene sensitivity (CDS level): "); gt_evaluator_show_sensitivity(se->CDS_gene_evaluator, outfp); gt_file_xprintf(outfp, " (missing genes: %lu)\n", se->missing_genes); gt_file_xprintf(outfp, "gene specificity (CDS level): "); gt_evaluator_show_specificity(se->CDS_gene_evaluator, outfp); gt_file_xprintf(outfp, " (wrong genes: %lu)\n", se->wrong_genes); /* mRNA level */ gt_file_xprintf(outfp, "mRNA sensitivity (mRNA level): "); gt_evaluator_show_sensitivity(se->mRNA_mRNA_evaluator, outfp); gt_file_xprintf(outfp, " (missing mRNAs: %lu)\n", se->missing_mRNAs); gt_file_xprintf(outfp, "mRNA specificity (mRNA level): "); gt_evaluator_show_specificity(se->mRNA_mRNA_evaluator, outfp); gt_file_xprintf(outfp, " (wrong mRNAs: %lu)\n", se->wrong_mRNAs); gt_file_xprintf(outfp, "mRNA sensitivity (CDS level): "); gt_evaluator_show_sensitivity(se->CDS_mRNA_evaluator, outfp); gt_file_xprintf(outfp, " (missing mRNAs: %lu)\n", se->missing_mRNAs); gt_file_xprintf(outfp, "mRNA specificity (CDS level): "); gt_evaluator_show_specificity(se->CDS_mRNA_evaluator, outfp); gt_file_xprintf(outfp, " (wrong mRNAs: %lu)\n", se->wrong_mRNAs); /* mRNA exon level */ show_transcript_values(se->mRNA_exon_evaluators, "mRNA", "", outfp); show_transcript_values(se->mRNA_exon_evaluators_collapsed, "mRNA", ", collapsed", outfp); /* CDS exon level */ show_transcript_values(se->CDS_exon_evaluators, "CDS", "", outfp); show_transcript_values(se->CDS_exon_evaluators_collapsed, "CDS", ", collapsed", outfp); if (se->nuceval) { /* mRNA nucleotide level */ show_nucleotide_values(&se->mRNA_nucleotides, "mRNA", outfp); /* CDS nucleotide level */ show_nucleotide_values(&se->CDS_nucleotides, "CDS", outfp); } } else { /* LTR_retrotransposon prediction */ gt_file_xprintf(outfp, "LTR_retrotransposon sensitivity: "); gt_evaluator_show_sensitivity(se->LTR_evaluator, outfp); gt_file_xprintf(outfp, " (missing LTRs: %lu)\n", se->missing_LTRs); gt_file_xprintf(outfp, "LTR_retrotransposon specificity: "); gt_evaluator_show_specificity(se->LTR_evaluator, outfp); gt_file_xprintf(outfp, " (wrong LTRs: %lu)\n", se->wrong_LTRs); } } void gt_stream_evaluator_delete(GtStreamEvaluator *se) { if (!se) return; gt_node_stream_delete(se->reference); gt_node_stream_delete(se->prediction); gt_hashmap_delete(se->slots); gt_evaluator_delete(se->mRNA_gene_evaluator); gt_evaluator_delete(se->CDS_gene_evaluator); gt_evaluator_delete(se->mRNA_mRNA_evaluator); gt_evaluator_delete(se->CDS_mRNA_evaluator); gt_evaluator_delete(se->LTR_evaluator); gt_transcript_evaluators_delete(se->mRNA_exon_evaluators); gt_transcript_evaluators_delete(se->mRNA_exon_evaluators_collapsed); gt_transcript_evaluators_delete(se->CDS_exon_evaluators); gt_transcript_evaluators_delete(se->CDS_exon_evaluators_collapsed); gt_free(se); } genometools-1.5.1/src/extended/stream_evaluator.h000066400000000000000000000034741211610345200221710ustar00rootroot00000000000000/* Copyright (c) 2006-2011 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef STREAM_EVALUATOR_H #define STREAM_EVALUATOR_H #include "extended/node_stream_api.h" #include "extended/node_visitor_api.h" typedef struct GtStreamEvaluator GtStreamEvaluator; GtStreamEvaluator* gt_stream_evaluator_new(GtNodeStream *reference, GtNodeStream *prediction, bool nuceval, bool evalLTR, unsigned long LTRdelta); /* if is not NULL, it visits all nodes from reference and the prediction */ int gt_stream_evaluator_evaluate(GtStreamEvaluator*, bool verbose, bool exondiff, bool exondiffcollapsed, GtNodeVisitor *nv, GtError*); void gt_stream_evaluator_show(GtStreamEvaluator*, GtFile*); void gt_stream_evaluator_delete(GtStreamEvaluator*); #endif genometools-1.5.1/src/extended/string_matching.c000066400000000000000000000221531211610345200217620ustar00rootroot00000000000000/* Copyright (c) 2006-2009 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/assert_api.h" #include "core/bittab.h" #include "core/ensure.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/undef_api.h" #include "extended/string_matching.h" #define STRING_MATCHING_NUM_OF_TESTS 256 #define STRING_MATCHING_MAX_STRING_LENGTH 100000 #define STRING_MATCHING_MAX_PATTERN_LENGTH 66 void gt_string_matching_bmh(const char *s, unsigned long n, const char *p, unsigned long m, GtProcessMatch process_match, void *data) { unsigned long i, j, pos, d[UCHAR_MAX]; gt_assert(s && p); if (m > n || !m || !n) /* no match possible */ return; /* preprocessing */ for (i = 0; i < UCHAR_MAX; i++) d[i] = m; for (j = 0; j < m-1; j++) d[(unsigned) p[j]] = m-(j+1); /* searching */ pos = 0; while (pos <= n-m) { j = m; while (j > 0 && s[pos+j-1] == p[j-1]) j--; if (j == 0 && process_match) { if (process_match(pos, data)) return; } pos += d[(unsigned) s[pos+m-1]]; } } static unsigned long* compute_prefixtab(const char *p, unsigned long m) { unsigned long i, vlen = 0, *prefixtab; char b; gt_assert(p); prefixtab = gt_malloc(sizeof (unsigned long) * (m+1)); prefixtab[0] = GT_UNDEF_ULONG; /* paranoia */ if (m) prefixtab[1] = 0; for (i = 2; i <= m; i++) { b = p[i-1]; while (vlen > 0 && p[vlen] != b) vlen = prefixtab[vlen]; if (p[vlen] == b) vlen++; prefixtab[i] = vlen; } return prefixtab; } unsigned long gt_string_matching_kmp(const char *s, unsigned long n, const char *p, unsigned long m, GtProcessMatch process_match, void *data) { unsigned long *prefixtab, j = 0, /* position in s corresponding to the first character in p */ cpl = 0; /* length of common prefix of s[j]..s[n-1] and p */ char b, c; gt_assert(s && p); if (!m || !n) /* no match possible */ return 0; prefixtab = compute_prefixtab(p, m); while (j + cpl < n) { if (cpl == m) { /* case (1) */ if (process_match) { if (process_match(j, data)) break; } j = j + cpl - prefixtab[cpl]; cpl = prefixtab[cpl]; } else { /* case (2) */ b = s[j+cpl]; c = p[cpl]; if (b != c) { if (cpl > 0) { j = j + cpl - prefixtab[cpl]; /* case (2a) */ cpl = prefixtab[cpl]; } else j++; /* case (2b) */ } else cpl++; /* case (2c) */ } } /* do not miss match at the last possible position */ if (cpl == m && process_match) process_match(j, data); gt_free(prefixtab); return cpl; } void gt_string_matching_shift_and(const char *s, unsigned long n, const char *p, unsigned long m, GtProcessMatch process_match, void *data) { GtBittab *D, *B[UCHAR_MAX] = { NULL }; unsigned long i, j; gt_assert(s && p); if (m > n || !m || !n) /* no match possible */ return; /* preprocessing */ for (j = 0; j < m; j++) { if (!B[(unsigned) p[j]]) B[(unsigned) p[j]] = gt_bittab_new(m); gt_bittab_set_bit(B[(unsigned) p[j]], j); } /* searching */ D = gt_bittab_new(m); for (i = 0; i < n; i++) { gt_bittab_shift_left_equal(D); gt_bittab_set_bit(D, 0); if (B[(unsigned) s[i]]) gt_bittab_and_equal(D, B[(unsigned) s[i]]); else gt_bittab_unset(D); if (gt_bittab_bit_is_set(D, m - 1) && process_match) { if (process_match(i - m + 1, data)) break; } } /* free */ for (i = 0; i < UCHAR_MAX; i++) gt_bittab_delete(B[i]); gt_bittab_delete(D); } void gt_string_matching_brute_force(const char *s, unsigned long n, const char *p, unsigned long m, GtProcessMatch process_match, void *data) { unsigned long i; gt_assert(s && p); if (m > n || !m || !n) /* no match possible */ return; for (i = 0; i <= n - m; i++) { unsigned long j = 0; while (j < m && s[i+j] == p[j]) j++; if (j == m && process_match) { if (process_match(i, data)) break; } } } static bool store_first_match(unsigned long pos, void *data) { unsigned long *match = data; gt_assert(match); *match = pos; return true; } static bool store_match(unsigned long pos, void *data) { GtArray *positions = data; gt_assert(positions); gt_array_add(positions, pos); return false; } int gt_string_matching_unit_test(GtError *err) { char s[STRING_MATCHING_MAX_STRING_LENGTH+1], p[STRING_MATCHING_MAX_PATTERN_LENGTH+1], *text = "foo"; GtArray *brute_force_matches, *bmh_matches, *kmp_matches, *shift_and_matches; unsigned long i, brute_force_match, bmh_match, kmp_match, shift_and_match; int had_err = 0; gt_error_check(err); brute_force_matches = gt_array_new(sizeof (unsigned long)); bmh_matches = gt_array_new(sizeof (unsigned long)); kmp_matches = gt_array_new(sizeof (unsigned long)); shift_and_matches = gt_array_new(sizeof (unsigned long)); /* match the empty pattern */ gt_string_matching_brute_force(text, strlen(text), "", 0, store_match, brute_force_matches); gt_string_matching_bmh(text, strlen(text), "", 0, store_match, bmh_matches); gt_string_matching_kmp(text, strlen(text), "", 0, store_match, kmp_matches); gt_string_matching_shift_and(text, strlen(text), "", 0, store_match, shift_and_matches); gt_ensure(had_err, !gt_array_size(brute_force_matches)); gt_ensure(had_err, !gt_array_size(bmh_matches)); gt_ensure(had_err, !gt_array_size(kmp_matches)); gt_ensure(had_err, !gt_array_size(shift_and_matches)); for (i = 0; !had_err && i < STRING_MATCHING_NUM_OF_TESTS; i++) { unsigned long j, n, m; /* generate random string and pattern */ n = gt_rand_max(STRING_MATCHING_MAX_STRING_LENGTH); m = gt_rand_max(STRING_MATCHING_MAX_PATTERN_LENGTH); for (j = 0; j < n; j++) s[j] = gt_rand_char(); s[n] = '\0'; for (j = 0; j < m; j++) p[j] = gt_rand_char(); p[m] = '\0'; /* matching (first match) */ brute_force_match = GT_UNDEF_ULONG; bmh_match = GT_UNDEF_ULONG; kmp_match = GT_UNDEF_ULONG; shift_and_match = GT_UNDEF_ULONG; gt_string_matching_brute_force(s, n, p, m, store_first_match, &brute_force_match); gt_string_matching_bmh(s, n, p, m, store_first_match, &bmh_match); gt_string_matching_kmp(s, n, p, m, store_first_match, &kmp_match); gt_string_matching_shift_and(s, n, p, m, store_first_match, &shift_and_match); /* comparing (first match) */ gt_ensure(had_err, brute_force_match == bmh_match); gt_ensure(had_err, brute_force_match == kmp_match); gt_ensure(had_err, brute_force_match == shift_and_match); /* matching (all matches) */ gt_string_matching_brute_force(s, n, p, m, store_match, brute_force_matches); gt_string_matching_bmh(s, n, p, m, store_match, bmh_matches); gt_string_matching_kmp(s, n, p, m, store_match, kmp_matches); gt_string_matching_shift_and(s, n, p, m, store_match, shift_and_matches); /* comparing (all matches) */ gt_ensure(had_err, gt_array_size(brute_force_matches) == gt_array_size(bmh_matches)); gt_ensure(had_err, gt_array_size(brute_force_matches) == gt_array_size(kmp_matches)); gt_ensure(had_err, gt_array_size(brute_force_matches) == gt_array_size(shift_and_matches)); gt_ensure(had_err, !gt_array_cmp(brute_force_matches, bmh_matches)); gt_ensure(had_err, !gt_array_cmp(brute_force_matches, kmp_matches)); gt_ensure(had_err, !gt_array_cmp(brute_force_matches, shift_and_matches)); /* reset */ gt_array_reset(brute_force_matches); gt_array_reset(bmh_matches); gt_array_reset(kmp_matches); gt_array_reset(shift_and_matches); } gt_array_delete(shift_and_matches); gt_array_delete(bmh_matches); gt_array_delete(kmp_matches); gt_array_delete(brute_force_matches); return had_err; } genometools-1.5.1/src/extended/string_matching.h000066400000000000000000000042431211610345200217670ustar00rootroot00000000000000/* Copyright (c) 2006-2008 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef STRING_MATCHING_H #define STRING_MATCHING_H #include /* Gets called for every match. If it returns true, the matching is stopped. */ typedef bool (*GtProcessMatch)(unsigned long pos, void *data); /* Boyer-Moore-Horspool alg. (O(n*m) time worst-case; sublinear on average). */ void gt_string_matching_bmh(const char *s, unsigned long n, const char *p, unsigned long m, GtProcessMatch, void *data); /* Knuth-Morris-Pratt algorithm (O(n+m) time). Returns the last common prefix length.*/ unsigned long gt_string_matching_kmp(const char *s, unsigned long n, const char *p, unsigned long m, GtProcessMatch, void *data); /* Shift-And algorithm (O(n*(m/|w|) time, |w| is the word size). */ void gt_string_matching_shift_and(const char *s, unsigned long n, const char *p, unsigned long m, GtProcessMatch, void *data); /* Brute Force algorithm (O(n*m) time worst-case). */ void gt_string_matching_brute_force(const char *s, unsigned long n, const char *p, unsigned long m, GtProcessMatch, void *data); int gt_string_matching_unit_test(GtError*); #endif genometools-1.5.1/src/extended/swalign.c000066400000000000000000000145741211610345200202560ustar00rootroot00000000000000/* Copyright (c) 2007-2009 Gordon Gremme Copyright (c) 2007-2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/array2dim_api.h" #include "core/assert_api.h" #include "core/chardef.h" #include "core/minmax.h" #include "core/undef_api.h" #include "extended/swalign.h" typedef struct { unsigned long x, y; } Coordinate; typedef struct { long score; bool max_replacement, max_deletion, max_insertion; } DPentry; static void swalign_fill_table(DPentry **dptable, const GtUchar *u, unsigned long ulen, const GtUchar *v, unsigned long vlen, const int **scores, int deletion_score, int insertion_score, Coordinate *max_coordinate, unsigned int u_alpha_size, unsigned int v_alpha_size) { unsigned long i, j; long maxscore, repscore, delscore, insscore, overall_maxscore = LONG_MIN; gt_assert(dptable && u && ulen && v && vlen && max_coordinate && u_alpha_size && v_alpha_size); for (j = 1; j <= vlen; j++) { for (i = 1; i <= ulen; i++) { int uval, vval; uval = (int) ((u[i-1] == WILDCARD) ? u_alpha_size - 1 : u[i-1]); vval = (int) ((v[j-1] == WILDCARD) ? v_alpha_size - 1 : v[j-1]); repscore = dptable[i-1][j-1].score + scores[uval][vval]; delscore = dptable[i-1][j].score + deletion_score; insscore = dptable[i][j-1].score + insertion_score; maxscore = MAX(MAX(MAX(repscore, delscore), insscore), 0); dptable[i][j].score = maxscore; dptable[i][j].max_replacement = (maxscore == repscore) ? true : false; dptable[i][j].max_deletion = (maxscore == delscore) ? true : false; dptable[i][j].max_insertion = (maxscore == insscore) ? true : false; if (maxscore > overall_maxscore) { overall_maxscore = maxscore; max_coordinate->x = i; max_coordinate->y = j; } } } } static Coordinate traceback(GtAlignment *a, DPentry **dptable, unsigned long i, unsigned long j) { Coordinate start_coordinate = { GT_UNDEF_ULONG, GT_UNDEF_ULONG }; gt_assert(a && dptable); while (dptable[i][j].score) { gt_assert(dptable[i][j].score > 0); start_coordinate.x = i; start_coordinate.y = j; if (dptable[i][j].max_replacement) { gt_alignment_add_replacement(a); i--; j--; } else if (dptable[i][j].max_deletion) { gt_alignment_add_deletion(a); i--;; } else if (dptable[i][j].max_insertion) { gt_alignment_add_insertion(a); j--; } } gt_assert(start_coordinate.x != GT_UNDEF_ULONG); gt_assert(start_coordinate.y != GT_UNDEF_ULONG); return start_coordinate; } static GtAlignment* smith_waterman_align(const char *u_orig, const char *v_orig, const GtUchar *u_enc, const GtUchar *v_enc, unsigned long u_len, unsigned long v_len, const int **scores, int deletion_score, int insertion_score, const GtAlphabet *u_alpha, const GtAlphabet *v_alpha) { gt_assert(u_orig && v_orig && u_enc && v_enc && u_len && v_len && scores && u_alpha && v_alpha); Coordinate alignment_start, alignment_end = { GT_UNDEF_ULONG, GT_UNDEF_ULONG }; GtRange urange, vrange; DPentry **dptable; GtAlignment *a = NULL; gt_array2dim_calloc(dptable, u_len+1, v_len+1); swalign_fill_table(dptable, u_enc, u_len, v_enc, v_len, scores, deletion_score, insertion_score, &alignment_end, gt_alphabet_size(u_alpha), gt_alphabet_size(v_alpha)); gt_assert(alignment_end.x != GT_UNDEF_ULONG); gt_assert(alignment_end.y != GT_UNDEF_ULONG); if (dptable[alignment_end.x][alignment_end.y].score) { /* construct only an alignment if a (positive) score was computed */ a = gt_alignment_new(); alignment_start = traceback(a, dptable, alignment_end.x, alignment_end.y); /* transform the positions in the DP matrix to sequence positions */ urange.start = --alignment_start.x; vrange.start = --alignment_start.y; urange.end = --alignment_end.x; vrange.end = --alignment_end.y; /* employ sequence positions to set alignment sequences */ gt_alignment_set_seqs(a, (const GtUchar *) (u_orig + alignment_start.x), alignment_end.x - alignment_start.x + 1, (const GtUchar *) (v_orig + alignment_start.y), alignment_end.y - alignment_start.y + 1); gt_alignment_set_urange(a, urange); gt_alignment_set_vrange(a, vrange); } gt_array2dim_delete(dptable); return a; } GtAlignment* gt_swalign(GtSeq *u, GtSeq *v, const GtScoreFunction *sf) { gt_assert(u && v && sf); return smith_waterman_align(gt_seq_get_orig(u), gt_seq_get_orig(v), gt_seq_get_encoded(u), gt_seq_get_encoded(v), gt_seq_length(u), gt_seq_length(v), gt_score_function_get_scores(sf), gt_score_function_get_deletion_score(sf), gt_score_function_get_insertion_score(sf), gt_seq_get_alphabet(u), gt_seq_get_alphabet(v)); } genometools-1.5.1/src/extended/swalign.h000066400000000000000000000023271211610345200202540ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SWALIGN_H #define SWALIGN_H #include "core/score_function.h" #include "core/seq.h" #include "extended/alignment.h" /* (locally) align and (Smith-Waterman algorithm ) with the given score function and return one optimal Alignment. If no such alignment was found, NULL is returned. */ GtAlignment* gt_swalign(GtSeq *u, GtSeq *v, const GtScoreFunction*); #endif genometools-1.5.1/src/extended/tag_value_map.c000066400000000000000000000271451211610345200214140ustar00rootroot00000000000000/* Copyright (c) 2008-2011 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/ma.h" #include "core/ensure.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "extended/tag_value_map.h" /* The GtTagValueMap is implemented as a simple char* which points to a memory region organized as follows: tag\0value\0tag\0value\0\0 */ GtTagValueMap gt_tag_value_map_new(const char *tag, const char *value) { GtTagValueMap map; size_t tag_len, value_len; gt_assert(tag && value); tag_len = strlen(tag); value_len = strlen(value); gt_assert(tag_len && value_len); map = gt_malloc((tag_len + 1 + value_len + 1 + 1) * sizeof *map); memcpy(map, tag, tag_len + 1); memcpy(map + tag_len + 1, value, value_len + 1); map[tag_len + 1 + value_len + 1] = '\0'; return map; } /* Stores map length in if the return value equals NULL (i.e., if not value has been found) and does not equal NULL. */ static char* get_value(const GtTagValueMap map, const char *tag, size_t *map_len) { char *map_ptr; const char *tag_ptr; /* search for equal tag */ map_ptr = map; tag_ptr = tag; for (;;) { while (*map_ptr == *tag_ptr++) { if (*map_ptr++ == '\0') return map_ptr; /* match found -> return value */ } /* no match found */ while (*map_ptr++ != '\0'); /* go to next value */ if (*map_ptr == '\0') break; /* no next value found */ /* reset tag pointer */ tag_ptr = tag; } if (map_len) *map_len = map_ptr - map; /* save map length */ return NULL; } static size_t get_map_len(const GtTagValueMap map) { const char *map_ptr = map; for (;;) { if ((*map_ptr++ == '\0') && (*map_ptr++ == '\0')) break; } return map_ptr - map - 1; } void gt_tag_value_map_add(GtTagValueMap *map, const char *tag, const char *value) { size_t tag_len, value_len, map_len = 0; GT_UNUSED const char *tag_already_used; gt_assert(map && *map && tag && value); tag_len = strlen(tag); value_len = strlen(value); gt_assert(tag_len && value_len); /* determine current map length */ tag_already_used = get_value(*map, tag, &map_len); gt_assert(!tag_already_used); /* map does not contain given already */ /* allocate additional space */ *map = gt_realloc(*map, map_len + tag_len + 1 + value_len + 1 + 1); /* store new tag/value pair */ memcpy(*map + map_len, tag, tag_len + 1); memcpy(*map + map_len + tag_len + 1, value, value_len + 1); (*map)[map_len + tag_len + 1 + value_len + 1] = '\0'; } void gt_tag_value_map_remove(GtTagValueMap *map, const char *tag) { size_t tag_len, value_len, map_len; char *value; gt_assert(map && tag); tag_len = strlen(tag); gt_assert(tag_len); /* determine value for given tag */ value = get_value(*map, tag, NULL); gt_assert(value); map_len = get_map_len(*map); value_len = strlen(value); /* move memory from end position of value to start position of tag */ memmove(value - tag_len - 1, value + value_len + 1, map_len - ((size_t) value - (size_t) *map + value_len)); *map = gt_realloc(*map, map_len - (tag_len + 1 + value_len + 1) + 1); gt_assert((*map)[map_len - (tag_len + 1 + value_len + 1)] == '\0'); } void gt_tag_value_map_set(GtTagValueMap *map, const char *tag, const char *new_value) { size_t old_value_len, new_value_len, map_len = 0; char *old_value; gt_assert(map && *map && tag && new_value); gt_assert(strlen(tag)); new_value_len = strlen(new_value); gt_assert(new_value_len); /* determine current map length */ old_value = get_value(*map, tag, &map_len); if (!old_value) return gt_tag_value_map_add(map, tag, new_value); /* tag already used -> replace it */ old_value_len = strlen(old_value); map_len = get_map_len(*map); if (new_value_len < old_value_len) { memcpy(old_value, new_value, new_value_len); memmove(old_value + new_value_len, old_value + old_value_len, map_len - ((size_t) old_value - (size_t) *map + old_value_len) + 1); *map = gt_realloc(*map, map_len - (old_value_len - new_value_len) + 1); } else if (new_value_len == old_value_len) { memcpy(old_value, new_value, new_value_len); } else { /* (new_value_len > old_value_len) */ *map = gt_realloc(*map, map_len + (new_value_len - old_value_len) + 1); /* determine old_value again, realloc() might have moved it */ old_value = get_value(*map, tag, &map_len); gt_assert(old_value); memmove(old_value + new_value_len, old_value + old_value_len, map_len - ((size_t) old_value - (size_t) *map + old_value_len) + 1); memcpy(old_value, new_value, new_value_len); } gt_assert((*map)[map_len - old_value_len + new_value_len] == '\0'); } const char* gt_tag_value_map_get(const GtTagValueMap map, const char *tag) { gt_assert(map && tag && strlen(tag)); return get_value(map, tag, NULL); } void gt_tag_value_map_foreach(const GtTagValueMap map, GtTagValueMapIteratorFunc func, void *data) { const char *map_ptr, *tag; gt_assert(map && func); map_ptr = map; do { /* the map has at least one tag/value pair */ tag = map_ptr; while (*map_ptr++ != '\0'); /* skip tag and \0 */ func(tag, map_ptr /* value */, data); while (*map_ptr++ != '\0'); /* skip value and \0 */ } while (*map_ptr != '\0'); } void gt_tag_value_map_show(const GtTagValueMap map) { bool null_terminator_read = false; const char *map_ptr; gt_assert(map); map_ptr = map; for (;;) { if (*map_ptr == '\0') { printf("\\0"); if (null_terminator_read) break; else null_terminator_read = true; } else { gt_xputchar(*map_ptr); null_terminator_read = false; } map_ptr++; } gt_xputchar('\n'); } int gt_tag_value_map_example(GT_UNUSED GtError *err) { GtTagValueMap map; gt_error_check(err); map = gt_tag_value_map_new("tag 1", "value 1"); gt_tag_value_map_add(&map, "tag 2", "value 2"); gt_tag_value_map_add(&map, "tag 3", "value 3"); gt_assert(!gt_tag_value_map_get(map, "unused tag")); gt_assert(!strcmp(gt_tag_value_map_get(map, "tag 1"), "value 1")); gt_assert(!strcmp(gt_tag_value_map_get(map, "tag 2"), "value 2")); gt_assert(!strcmp(gt_tag_value_map_get(map, "tag 3"), "value 3")); gt_tag_value_map_delete(map); return 0; } static GtTagValueMap create_filled_tag_value_list(void) { GtTagValueMap map = gt_tag_value_map_new("tag 1", "value 1"); gt_tag_value_map_add(&map, "tag 2", "value 2"); gt_tag_value_map_add(&map, "tag 3", "value 3"); gt_assert(!gt_tag_value_map_get(map, "unused tag")); gt_assert(!strcmp(gt_tag_value_map_get(map, "tag 1"), "value 1")); gt_assert(!strcmp(gt_tag_value_map_get(map, "tag 2"), "value 2")); gt_assert(!strcmp(gt_tag_value_map_get(map, "tag 3"), "value 3")); return map; } int gt_tag_value_map_unit_test(GtError *err) { GtTagValueMap map; int had_err = 0; gt_error_check(err); /* test gt_tag_value_map_set() (new tags are shorter than old tags) */ map = create_filled_tag_value_list(); gt_tag_value_map_set(&map, "tag 1", "val X"); gt_tag_value_map_set(&map, "tag 2", "val Y"); gt_tag_value_map_set(&map, "tag 3", "val Z"); gt_ensure(had_err, !gt_tag_value_map_get(map, "unused tag")); gt_ensure(had_err, !strcmp(gt_tag_value_map_get(map, "tag 1"), "val X")); gt_ensure(had_err, !strcmp(gt_tag_value_map_get(map, "tag 2"), "val Y")); gt_ensure(had_err, !strcmp(gt_tag_value_map_get(map, "tag 3"), "val Z")); gt_tag_value_map_delete(map); /* test gt_tag_value_map_set() (new tags have same length) */ if (!had_err) { map = create_filled_tag_value_list(); gt_tag_value_map_set(&map, "tag 1", "value X"); gt_tag_value_map_set(&map, "tag 2", "value Y"); gt_tag_value_map_set(&map, "tag 3", "value Z"); gt_ensure(had_err, !gt_tag_value_map_get(map, "unused tag")); gt_ensure(had_err, !strcmp(gt_tag_value_map_get(map, "tag 1"), "value X")); gt_ensure(had_err, !strcmp(gt_tag_value_map_get(map, "tag 2"), "value Y")); gt_ensure(had_err, !strcmp(gt_tag_value_map_get(map, "tag 3"), "value Z")); gt_tag_value_map_delete(map); } /* test gt_tag_value_map_set() (new tags are longer than old tags) */ if (!had_err) { map = create_filled_tag_value_list(); gt_tag_value_map_set(&map, "tag 1", "value XXX"); gt_tag_value_map_set(&map, "tag 2", "value YYY"); gt_tag_value_map_set(&map, "tag 3", "value ZZZ"); gt_ensure(had_err, !gt_tag_value_map_get(map, "unused tag")); gt_ensure(had_err, !strcmp(gt_tag_value_map_get(map, "tag 1"), "value XXX")); gt_ensure(had_err, !strcmp(gt_tag_value_map_get(map, "tag 2"), "value YYY")); gt_ensure(had_err, !strcmp(gt_tag_value_map_get(map, "tag 3"), "value ZZZ")); gt_tag_value_map_delete(map); } /* test gt_tag_value_map_remove() (remove first tag)*/ if (!had_err) { size_t old_map_len, new_map_len; map = create_filled_tag_value_list(); gt_tag_value_map_set(&map, "tag 1", "value XXX"); gt_tag_value_map_set(&map, "tag 2", "value YYY"); gt_tag_value_map_set(&map, "tag 3", "value ZZZ"); old_map_len = get_map_len(map); gt_tag_value_map_remove(&map, "tag 1"); new_map_len = get_map_len(map); gt_ensure(had_err, !gt_tag_value_map_get(map, "unused tag")); gt_ensure(had_err, !(old_map_len - new_map_len - strlen("tag 1") - 1 - strlen("value XXX") -1)); gt_tag_value_map_delete(map); } /* test gt_tag_value_map_remove() (remove middle tag)*/ if (!had_err) { size_t old_map_len, new_map_len; map = create_filled_tag_value_list(); gt_tag_value_map_set(&map, "tag 1", "value XXX"); gt_tag_value_map_set(&map, "tag 2", "value YYY"); gt_tag_value_map_set(&map, "tag 3", "value ZZZ"); old_map_len = get_map_len(map); gt_tag_value_map_remove(&map, "tag 2"); new_map_len = get_map_len(map); gt_ensure(had_err, !gt_tag_value_map_get(map, "unused tag")); gt_ensure(had_err, !(old_map_len - new_map_len - strlen("tag 2") - 1 - strlen("value YYY") -1)); gt_tag_value_map_delete(map); } /* test gt_tag_value_map_remove() (remove last tag)*/ if (!had_err) { size_t old_map_len, new_map_len; map = create_filled_tag_value_list(); gt_tag_value_map_set(&map, "tag 1", "value XXX"); gt_tag_value_map_set(&map, "tag 2", "value YYY"); gt_tag_value_map_set(&map, "tag 3", "value ZZZ"); old_map_len = get_map_len(map); gt_tag_value_map_remove(&map, "tag 3"); new_map_len = get_map_len(map); gt_ensure(had_err, !gt_tag_value_map_get(map, "unused tag")); gt_ensure(had_err, !(old_map_len - new_map_len - strlen("tag 3") - 1 - strlen("value ZZZ") -1)); gt_tag_value_map_delete(map); } return had_err; } void gt_tag_value_map_delete(GtTagValueMap map) { if (!map) return; gt_free(map); } genometools-1.5.1/src/extended/tag_value_map.h000066400000000000000000000020611211610345200214070ustar00rootroot00000000000000/* Copyright (c) 2008-2011 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TAG_VALUE_MAP_H #define TAG_VALUE_MAP_H #include "extended/tag_value_map_api.h" void gt_tag_value_map_show(const GtTagValueMap); int gt_tag_value_map_unit_test(GtError*); #endif genometools-1.5.1/src/extended/tag_value_map_api.h000066400000000000000000000066201211610345200222450ustar00rootroot00000000000000/* Copyright (c) 2008-2011 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TAG_VALUE_MAP_API_H #define TAG_VALUE_MAP_API_H #include "core/error_api.h" /* A very simple tag/value map absolutely optimized for space (i.e., memory consumption) on the cost of time. Basically, each read/write access costs O(n) time, whereas n denotes the accumulated length of all tags and values contained in the map. Tags and values cannot have length 0. The implementation as a char* shines through (also to save one additional memory allocation), therefore the usage is a little bit different compared to other __GenomeTools__ classes. See the implementation of for an ussage example. */ typedef char* GtTagValueMap; /* Iterator function used to iterate over tag/value maps. A / pair and user are given as arguments. */ typedef void (*GtTagValueMapIteratorFunc)(const char *tag, const char *value, void *data); /* Return a new object which stores the given / pair. */ GtTagValueMap gt_tag_value_map_new(const char *tag, const char *value); /* Add / pair to . must not contain the given already! */ void gt_tag_value_map_add(GtTagValueMap *tag_value_map, const char *tag, const char *value); /* Set the given in to . */ void gt_tag_value_map_set(GtTagValueMap *tag_value_map, const char *tag, const char *value); /* Return value corresponding to from . If does not contain such a value, is returned. */ const char* gt_tag_value_map_get(const GtTagValueMap tag_value_map, const char *tag); /* Removes the given from . must contain the given already! */ void gt_tag_value_map_remove(GtTagValueMap *tag_value_map, const char *tag); /* Apply to each tag/value pair contained in and pass along. */ void gt_tag_value_map_foreach(const GtTagValueMap tag_value_map, GtTagValueMapIteratorFunc iterator_func, void *data); /* Implements an example useage of a tag/value map. */ int gt_tag_value_map_example(GtError *err); /* Delete . */ void gt_tag_value_map_delete(GtTagValueMap tag_value_map); #endif genometools-1.5.1/src/extended/targetbest_select_stream.c000066400000000000000000000155711211610345200236660ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "core/cstr_api.h" #include "core/dlist.h" #include "core/hashmap.h" #include "core/ma.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "extended/feature_node.h" #include "extended/genome_node.h" #include "extended/gff3_defines.h" #include "extended/gff3_parser.h" #include "extended/node_stream_api.h" #include "extended/targetbest_select_stream.h" struct GtTargetbestSelectStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; GtDlist *trees; GtDlistelem *next; GtHashmap *target_to_elem; /* maps the target ids to GtDlist elements */ bool in_stream_processed; }; #define targetbest_select_stream_cast(GS)\ gt_node_stream_cast(gt_targetbest_select_stream_class(), GS); static void build_key(GtStr *key, GtFeatureNode *feature, GtStr *target_id) { gt_assert(key && feature && target_id); gt_str_reset(key); gt_str_append_str(key, gt_genome_node_get_seqid((GtGenomeNode*) feature)); gt_str_append_char(key, '\t'); /* cannot occur in seqid or target_id */ gt_str_append_str(key, target_id); } static void include_feature(GtDlist *trees, GtHashmap *target_to_elem, GtFeatureNode *feature, GtStr *key) { gt_dlist_add(trees, feature); gt_hashmap_add(target_to_elem, gt_cstr_dup(gt_str_get(key)), gt_dlist_last(trees)); } static void remove_elem(GtDlistelem *elem, GtDlist *trees, GtHashmap *target_to_elem, GtStr *key) { GtGenomeNode *node = gt_dlistelem_get_data(elem); gt_genome_node_delete(node); gt_dlist_remove(trees, elem); gt_hashmap_remove(target_to_elem, gt_str_get(key)); } static void replace_previous_elem(GtDlistelem *previous_elem, GtFeatureNode *current_feature, GtDlist *trees, GtHashmap *target_to_elem, GtStr *key) { remove_elem(previous_elem, trees, target_to_elem, key); include_feature(trees, target_to_elem, current_feature, key); } static void select_targetbest(GtFeatureNode *current_feature, GtDlist *trees, GtHashmap *target_to_elem) { unsigned long num_of_targets; GtDlistelem *previous_elem; GtStr *first_target_id; const char *target; GT_UNUSED int had_err; gt_assert(current_feature && trees); target = gt_feature_node_get_attribute(current_feature, GT_GFF_TARGET); gt_assert(target); first_target_id = gt_str_new(); had_err = gt_gff3_parser_parse_target_attributes(target, &num_of_targets, first_target_id, NULL, NULL, "", 0, NULL); gt_assert(!had_err); if (num_of_targets == 1) { GtStr *key = gt_str_new(); build_key(key, current_feature, first_target_id); if (!(previous_elem = gt_hashmap_get(target_to_elem, gt_str_get(key)))) { /* element with this target_id not included yet -> include it */ include_feature(trees, target_to_elem, current_feature, key); } else { GtFeatureNode *previous_feature = gt_dlistelem_get_data(previous_elem); /* element with this target_id included already -> compare them */ if (gt_feature_node_get_score(current_feature) > gt_feature_node_get_score(previous_feature)) { /* current feature is better -> replace previous feature */ replace_previous_elem(previous_elem, current_feature, trees, target_to_elem, key); } else /* current feature is not better -> remove it */ gt_genome_node_delete((GtGenomeNode*) current_feature); } gt_str_delete(key); } else gt_dlist_add(trees, current_feature); gt_str_delete(first_target_id); } static int targetbest_select_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtTargetbestSelectStream *tfs; GtGenomeNode *node; int had_err = 0; gt_error_check(err); tfs = targetbest_select_stream_cast(ns); if (!tfs->in_stream_processed) { while (!(had_err = gt_node_stream_next(tfs->in_stream, &node, err)) && node) { if (gt_feature_node_try_cast(node) && gt_feature_node_get_attribute((GtFeatureNode*) node, "Target")) { select_targetbest((GtFeatureNode*) node, tfs->trees, tfs->target_to_elem); } else gt_dlist_add(tfs->trees, node); } tfs->next = gt_dlist_first(tfs->trees); tfs->in_stream_processed = true; } if (!had_err) { gt_assert(tfs->in_stream_processed); if (tfs->next) { *gn = gt_dlistelem_get_data(tfs->next); tfs->next = gt_dlistelem_next(tfs->next); } else *gn = NULL; return 0; } return had_err; } static void targetbest_select_stream_free(GtNodeStream *ns) { GtTargetbestSelectStream *tfs = targetbest_select_stream_cast(ns); for (; tfs->next != NULL; tfs->next = gt_dlistelem_next(tfs->next)) gt_genome_node_delete(gt_dlistelem_get_data(tfs->next)); gt_dlist_delete(tfs->trees); gt_hashmap_delete(tfs->target_to_elem); gt_node_stream_delete(tfs->in_stream); } const GtNodeStreamClass* gt_targetbest_select_stream_class(void) { static const GtNodeStreamClass *nsc = NULL; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtTargetbestSelectStream), targetbest_select_stream_free, targetbest_select_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_targetbest_select_stream_new(GtNodeStream *in_stream) { GtTargetbestSelectStream *tfs; GtNodeStream *ns; gt_assert(in_stream); ns = gt_node_stream_create(gt_targetbest_select_stream_class(), gt_node_stream_is_sorted(in_stream)); tfs = targetbest_select_stream_cast(ns); tfs->in_stream = gt_node_stream_ref(in_stream); tfs->in_stream_processed = false; tfs->trees = gt_dlist_new(NULL); tfs->target_to_elem = gt_hashmap_new(GT_HASH_STRING, gt_free_func, NULL); return ns; } genometools-1.5.1/src/extended/targetbest_select_stream.h000066400000000000000000000023141211610345200236620ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TARGETBEST_SELECT_STREAM_H #define TARGETBEST_SELECT_STREAM_H #include "extended/node_stream_api.h" /* implements the ``genome stream'' interface */ typedef struct GtTargetbestSelectStream GtTargetbestSelectStream; const GtNodeStreamClass* gt_targetbest_select_stream_class(void); GtNodeStream* gt_targetbest_select_stream_new(GtNodeStream*); #endif genometools-1.5.1/src/extended/tidy_region_node_stream.c000066400000000000000000000067401211610345200235020ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "extended/feature_node.h" #include "extended/tidy_region_node_stream.h" #include "extended/tidy_region_node_visitor.h" #include "extended/node_stream_api.h" struct GtTidyRegionNodeStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; GtNodeVisitor *tidy_region_node_visitor; bool queued; }; #define gt_tidy_region_node_stream_cast(GS)\ gt_node_stream_cast(gt_tidy_region_node_stream_class(), GS); static int tidy_region_node_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtTidyRegionNodeStream *ais; int had_err = 0; gt_error_check(err); ais = gt_tidy_region_node_stream_cast(ns); if (!ais->queued) { /* no nodes in the buffer -> get new nodes */ while (!(had_err = gt_node_stream_next(ais->in_stream, gn, err)) && *gn) { gt_assert(*gn && !had_err); had_err = gt_genome_node_accept(*gn, ais->tidy_region_node_visitor, err); if (had_err) { /* we own the node -> delete it */ gt_genome_node_delete(*gn); *gn = NULL; break; } } if (!had_err) { ais->queued = true; } } if (!had_err) { if (gt_tidy_region_node_visitor_node_buffer_size( ais->tidy_region_node_visitor)) { *gn = gt_tidy_region_node_visitor_get_node(ais->tidy_region_node_visitor); } } return had_err; } static void tidy_region_node_stream_free(GtNodeStream *ns) { GtTidyRegionNodeStream *ais = gt_tidy_region_node_stream_cast(ns); gt_node_visitor_delete(ais->tidy_region_node_visitor); gt_node_stream_delete(ais->in_stream); } const GtNodeStreamClass* gt_tidy_region_node_stream_class(void) { static const GtNodeStreamClass *nsc = NULL; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtTidyRegionNodeStream), tidy_region_node_stream_free, tidy_region_node_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_tidy_region_node_stream_new(GtNodeStream *in_stream) { GtTidyRegionNodeStream *tidy_region_node_stream; GtNodeStream *ns; gt_assert(in_stream); ns = gt_node_stream_create(gt_tidy_region_node_stream_class(), false); tidy_region_node_stream = gt_tidy_region_node_stream_cast(ns); tidy_region_node_stream->in_stream = gt_node_stream_ref(in_stream); tidy_region_node_stream->tidy_region_node_visitor = gt_tidy_region_node_visitor_new(); tidy_region_node_stream->queued = false; return ns; } genometools-1.5.1/src/extended/tidy_region_node_stream.h000066400000000000000000000023471211610345200235060ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TIDY_REGION_NODE_STREAM_H #define TIDY_REGION_NODE_STREAM_H #include "core/strand_api.h" #include "extended/node_stream_api.h" /* implements the ``genome stream'' interface */ typedef struct GtTidyRegionNodeStream GtTidyRegionNodeStream; const GtNodeStreamClass* gt_tidy_region_node_stream_class(void); GtNodeStream* gt_tidy_region_node_stream_new(GtNodeStream*); #endif genometools-1.5.1/src/extended/tidy_region_node_visitor.c000066400000000000000000000164421211610345200237060ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "core/cstr_api.h" #include "core/hashmap.h" #include "core/ma_api.h" #include "core/minmax.h" #include "core/queue.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "extended/tidy_region_node_visitor.h" #include "extended/feature_node_iterator_api.h" #include "extended/node_visitor_api.h" struct GtTidyRegionNodeVisitor { const GtNodeVisitor parent_instance; GtQueue *node_buffer; GtHashmap *region_nodes; }; #define tidy_region_node_visitor_cast(GV)\ gt_node_visitor_cast(gt_tidy_region_node_visitor_class(), GV) static void tidy_region_node_visitor_free(GtNodeVisitor *nv) { GtTidyRegionNodeVisitor *tidy_region_node_visitor = tidy_region_node_visitor_cast(nv); gt_hashmap_delete(tidy_region_node_visitor->region_nodes); gt_queue_delete(tidy_region_node_visitor->node_buffer); } static int tidy_region_node_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GT_UNUSED GtError *err) { GtTidyRegionNodeVisitor *trnv; GtFeatureNodeIterator *fni; GtFeatureNode *node; GtGenomeNode *sr; GtRange range = {0, 0}, sr_range, joined_range = {0, 0}; bool first = true; int had_err = 0; const char *seqid; trnv = tidy_region_node_visitor_cast(nv); seqid = gt_str_get(gt_genome_node_get_seqid((GtGenomeNode*) fn)); fni = gt_feature_node_iterator_new(fn); while ((node = gt_feature_node_iterator_next(fni))) { GtRange node_range = gt_genome_node_get_range((GtGenomeNode*) node); if (first) { range = node_range; first = false; } else range = gt_range_join(&range, &node_range); } gt_feature_node_iterator_delete(fni); sr = gt_hashmap_get(trnv->region_nodes, seqid); if (!sr) { gt_error_set(err, "seqid '%s' on line %u in file \"%s\" has not been " "defined yet", seqid, gt_genome_node_get_line_number((GtGenomeNode*) fn), gt_genome_node_get_filename((GtGenomeNode*) fn)); had_err = -1; } if (!had_err) { gt_assert(sr); sr_range = gt_genome_node_get_range(sr); joined_range = gt_range_join(&range, &sr_range); gt_genome_node_set_range(sr, &joined_range); gt_queue_add(trnv->node_buffer, fn); } return 0; } static int tidy_region_node_visitor_region_node(GtNodeVisitor *nv, GtRegionNode *rn, GT_UNUSED GtError *err) { GtTidyRegionNodeVisitor *trnv; const char *seqid; gt_error_check(err); trnv = tidy_region_node_visitor_cast(nv); seqid = gt_str_get(gt_genome_node_get_seqid((GtGenomeNode*) rn)); gt_assert(seqid); if (!gt_hashmap_get(trnv->region_nodes, seqid)) { gt_hashmap_add(trnv->region_nodes, gt_cstr_dup(seqid), gt_genome_node_ref((GtGenomeNode*) rn)); gt_assert(gt_hashmap_get(trnv->region_nodes, seqid)); } gt_queue_add(trnv->node_buffer, rn); return 0; } static int tidy_region_node_visitor_sequence_node(GtNodeVisitor *nv, GtSequenceNode *sn, GT_UNUSED GtError *err) { GtTidyRegionNodeVisitor *trnv; gt_error_check(err); trnv = tidy_region_node_visitor_cast(nv); gt_queue_add(trnv->node_buffer, sn); return 0; } static int tidy_region_node_visitor_comment_node(GtNodeVisitor *nv, GtCommentNode *cn, GT_UNUSED GtError *err) { GtTidyRegionNodeVisitor *trnv; gt_error_check(err); trnv = tidy_region_node_visitor_cast(nv); gt_queue_add(trnv->node_buffer, cn); return 0; } static int tidy_region_node_visitor_meta_node(GtNodeVisitor *nv, GtMetaNode *mn, GT_UNUSED GtError *err) { GtTidyRegionNodeVisitor *trnv; gt_error_check(err); trnv = tidy_region_node_visitor_cast(nv); gt_queue_add(trnv->node_buffer, mn); return 0; } static int tidy_region_node_visitor_eof_node(GtNodeVisitor *nv, GtEOFNode *en, GT_UNUSED GtError *err) { GtTidyRegionNodeVisitor *trnv; gt_error_check(err); trnv = tidy_region_node_visitor_cast(nv); gt_queue_add(trnv->node_buffer, en); return 0; } const GtNodeVisitorClass* gt_tidy_region_node_visitor_class() { static GtNodeVisitorClass *nvc = NULL; gt_class_alloc_lock_enter(); if (!nvc) { nvc = gt_node_visitor_class_new(sizeof (GtTidyRegionNodeVisitor), tidy_region_node_visitor_free, tidy_region_node_visitor_comment_node, tidy_region_node_visitor_feature_node, tidy_region_node_visitor_region_node, tidy_region_node_visitor_sequence_node, tidy_region_node_visitor_eof_node); gt_node_visitor_class_set_meta_node_func(nvc, tidy_region_node_visitor_meta_node); } gt_class_alloc_lock_leave(); return nvc; } GtNodeVisitor* gt_tidy_region_node_visitor_new(void) { GtNodeVisitor *nv; GtTidyRegionNodeVisitor *tidy_region_node_visitor; nv = gt_node_visitor_create(gt_tidy_region_node_visitor_class()); tidy_region_node_visitor = tidy_region_node_visitor_cast(nv); tidy_region_node_visitor->node_buffer = gt_queue_new(); tidy_region_node_visitor->region_nodes = gt_hashmap_new(GT_HASH_STRING, gt_free_func, (GtFree) gt_genome_node_delete); return nv; } unsigned long gt_tidy_region_node_visitor_node_buffer_size(GtNodeVisitor *nv) { GtTidyRegionNodeVisitor *tidy_region_node_visitor = tidy_region_node_visitor_cast(nv); return gt_queue_size(tidy_region_node_visitor->node_buffer); } GtGenomeNode* gt_tidy_region_node_visitor_get_node(GtNodeVisitor *nv) { GtTidyRegionNodeVisitor *tidy_region_node_visitor = tidy_region_node_visitor_cast(nv); return gt_queue_get(tidy_region_node_visitor->node_buffer); } genometools-1.5.1/src/extended/tidy_region_node_visitor.h000066400000000000000000000025141211610345200237060ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TIDY_REGION_NODE_VISITOR_H #define TIDY_REGION_NODE_VISITOR_H /* Implements the interface. */ typedef struct GtTidyRegionNodeVisitor GtTidyRegionNodeVisitor; #include "extended/node_visitor.h" const GtNodeVisitorClass* gt_tidy_region_node_visitor_class(void); GtNodeVisitor* gt_tidy_region_node_visitor_new(void); unsigned long gt_tidy_region_node_visitor_node_buffer_size(GtNodeVisitor*); GtGenomeNode* gt_tidy_region_node_visitor_get_node(GtNodeVisitor*); #endif genometools-1.5.1/src/extended/toolbox.c000066400000000000000000000074121211610345200202710ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/hashmap.h" #include "core/ma.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "extended/toolbox.h" struct GtToolbox { GtHashmap *tools; }; typedef struct { GtTool *tool; GtToolfunc toolfunc; bool hidden; } GtToolinfo; GtToolinfo* gt_toolinfo_new(void) { return gt_calloc(1, sizeof (GtToolinfo)); } void gt_toolinfo_delete(GtToolinfo *toolinfo) { if (!toolinfo) return; gt_tool_delete(toolinfo->tool); gt_free(toolinfo); } GtToolbox* gt_toolbox_new(void) { GtToolbox *tb; tb = gt_malloc(sizeof (GtToolbox)); tb->tools = gt_hashmap_new(GT_HASH_STRING, NULL, (GtFree) gt_toolinfo_delete); return tb; } void gt_toolbox_add_tool(GtToolbox *tb, const char *toolname, GtTool *tool) { GtToolinfo *toolinfo; gt_assert(tb && tb->tools); toolinfo = gt_toolinfo_new(); toolinfo->tool= tool; gt_hashmap_add(tb->tools, (char*) toolname, toolinfo); } void gt_toolbox_add_hidden_tool(GtToolbox *tb, const char *toolname, GtTool *tool) { GtToolinfo *toolinfo; gt_assert(tb && tb->tools); toolinfo = gt_toolinfo_new(); toolinfo->tool= tool; toolinfo->hidden = true; gt_hashmap_add(tb->tools, (char*) toolname, toolinfo); } GtTool* gt_toolbox_get_tool(GtToolbox *tb, const char *toolname) { GtToolinfo *toolinfo; gt_assert(tb && tb->tools); toolinfo = gt_hashmap_get(tb->tools, toolname); if (toolinfo) return toolinfo->tool; return NULL; } bool gt_toolbox_has_tool(const GtToolbox *tb, const char *toolname) { gt_assert(tb && tb->tools); if (gt_hashmap_get(tb->tools, toolname)) return true; return false; } void gt_toolbox_add(GtToolbox *tb, const char *toolname, GtToolfunc toolfunc) { GtToolinfo *toolinfo; gt_assert(tb && tb->tools); toolinfo = gt_toolinfo_new(); toolinfo->toolfunc = toolfunc; gt_hashmap_add(tb->tools, (char*) toolname, toolinfo); } GtToolfunc gt_toolbox_get(const GtToolbox *tb, const char *toolname) { GtToolinfo *toolinfo; gt_assert(tb && tb->tools); toolinfo = gt_hashmap_get(tb->tools, toolname); if (toolinfo) return toolinfo->toolfunc; return NULL; } static int show_tool_name(void *key, void *value, GT_UNUSED void *data, GT_UNUSED GtError *err) { GtToolinfo *toolinfo = value; gt_error_check(err); gt_assert(key && value); if (!toolinfo->hidden) gt_xputs(key); return 0; } int gt_toolbox_show(GT_UNUSED const char *progname, void *toolbox, GT_UNUSED GtError *err) { GtToolbox *tb; GT_UNUSED int had_err = 0; gt_error_check(err); gt_assert(toolbox); tb = (GtToolbox*) toolbox; printf("\nTools:\n\n"); had_err = gt_hashmap_foreach_in_key_order(tb->tools, show_tool_name, NULL, NULL); gt_assert(!had_err); /* show_tool_name() is sane */ return 0; } void gt_toolbox_delete(GtToolbox *tb) { if (!tb) return; gt_hashmap_delete(tb->tools); gt_free(tb); } genometools-1.5.1/src/extended/toolbox.h000066400000000000000000000024761211610345200203030ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TOOLBOX_H #define TOOLBOX_H #include "core/error.h" #include "core/tool_api.h" #include "extended/toolbox_api.h" /* deprecated */ typedef int (*GtToolfunc)(int argc, const char **argv, GtError*); /* deprecated */ bool gt_toolbox_has_tool(const GtToolbox*, const char *toolname); /* deprecated */ void gt_toolbox_add(GtToolbox*, const char *toolname, GtToolfunc); /* deprecated */ GtToolfunc gt_toolbox_get(const GtToolbox*, const char *toolname); #endif genometools-1.5.1/src/extended/toolbox_api.h000066400000000000000000000041761211610345200211330ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TOOLBOX_API_H #define TOOLBOX_API_H #include "core/error_api.h" #include "core/tool_api.h" /* The class groups several tools into one and can be used to structure GenomeTools into sensible sets of subtools. */ typedef struct GtToolbox GtToolbox; /* Return a new empty . */ GtToolbox* gt_toolbox_new(void); /* Add with name to . Takes ownership of . */ void gt_toolbox_add_tool(GtToolbox *toolbox, const char *toolname, GtTool *tool); /* Add (hidden) with name to . Hidden tools are not shown in the output of . Takes ownership of . */ void gt_toolbox_add_hidden_tool(GtToolbox *toolbox, const char *toolname, GtTool *tool); /* Get with name from . Returns NULL if tool does not exist in . */ GtTool* gt_toolbox_get_tool(GtToolbox *toolbox, const char *toolname); /* Show all tools in except the hidden ones. Intended to be used as an argument to . */ int gt_toolbox_show(const char *progname, void *toolbox, GtError*); /* Deletes . */ void gt_toolbox_delete(GtToolbox *toolbox); #endif genometools-1.5.1/src/extended/transcript_bittabs.c000066400000000000000000000054601211610345200225050ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "extended/transcript_bittabs.h" struct GtTranscriptBittabs { GtBittab *gt_bittab_all, *gt_bittab_single, *gt_bittab_initial, *gt_bittab_internal, *gt_bittab_terminal; }; GtTranscriptBittabs* gt_transcript_bittabs_new(unsigned long size_all, unsigned long size_single, unsigned long size_initial, unsigned long size_internal, unsigned long size_terminal) { GtTranscriptBittabs *tb = gt_calloc(1, sizeof (GtTranscriptBittabs)); if (size_all) tb->gt_bittab_all = gt_bittab_new(size_all); if (size_single) tb->gt_bittab_single = gt_bittab_new(size_single); if (size_initial) tb->gt_bittab_initial = gt_bittab_new(size_initial); if (size_internal) tb->gt_bittab_internal = gt_bittab_new(size_internal); if (size_terminal) tb->gt_bittab_terminal = gt_bittab_new(size_all); return tb; } GtBittab* gt_transcript_bittabs_get_all(const GtTranscriptBittabs *tb) { gt_assert(tb); return tb->gt_bittab_all; } GtBittab* gt_transcript_bittabs_get_single(const GtTranscriptBittabs *tb) { gt_assert(tb); return tb->gt_bittab_single; } GtBittab* gt_transcript_bittabs_get_initial(const GtTranscriptBittabs *tb) { gt_assert(tb); return tb->gt_bittab_initial; } GtBittab* gt_transcript_bittabs_get_internal(const GtTranscriptBittabs *tb) { gt_assert(tb); return tb->gt_bittab_internal; } GtBittab* gt_transcript_bittabs_get_terminal(const GtTranscriptBittabs *tb) { gt_assert(tb); return tb->gt_bittab_terminal; } void gt_transcript_bittabs_delete(GtTranscriptBittabs *tb) { if (!tb) return; gt_bittab_delete(tb->gt_bittab_all); gt_bittab_delete(tb->gt_bittab_single); gt_bittab_delete(tb->gt_bittab_initial); gt_bittab_delete(tb->gt_bittab_internal); gt_bittab_delete(tb->gt_bittab_terminal); gt_free(tb); } genometools-1.5.1/src/extended/transcript_bittabs.h000066400000000000000000000045141211610345200225110ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TRANSCRIPT_BITTABS_H #define TRANSCRIPT_BITTABS_H #include "core/bittab.h" /* a container class for transcript bittabs */ typedef struct GtTranscriptBittabs GtTranscriptBittabs; /* create an empy container */ GtTranscriptBittabs* gt_transcript_bittabs_new(unsigned long size_all, unsigned long size_single, unsigned long size_initial, unsigned long size_internal, unsigned long size_terminal); /* return the bittab for all exons */ GtBittab* gt_transcript_bittabs_get_all(const GtTranscriptBittabs*); /* return the bittab for single exons */ GtBittab* gt_transcript_bittabs_get_single(const GtTranscriptBittabs*); /* return the bittab for initial exons */ GtBittab* gt_transcript_bittabs_get_initial(const GtTranscriptBittabs*); /* return the bittab for internal exons */ GtBittab* gt_transcript_bittabs_get_internal(const GtTranscriptBittabs*); /* return the bittab for terminal exons */ GtBittab* gt_transcript_bittabs_get_terminal(const GtTranscriptBittabs*); void gt_transcript_bittabs_delete(GtTranscriptBittabs*); #endif genometools-1.5.1/src/extended/transcript_counts.c000066400000000000000000000055141211610345200223700ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "extended/transcript_counts.h" struct GtTranscriptCounts { GtArray *exon_array_all, *exon_array_single, *exon_array_initial, *exon_array_internal, *exon_array_terminal; }; GtTranscriptCounts* gt_transcript_counts_new(void) { GtTranscriptCounts *tc = gt_calloc(1, sizeof (GtTranscriptCounts)); return tc; } GtArray* gt_transcript_counts_get_all(const GtTranscriptCounts *tc) { gt_assert(tc); return tc->exon_array_all; } void gt_transcript_counts_set_all(GtTranscriptCounts *tc, GtArray *counts) { gt_assert(tc && counts); tc->exon_array_all = counts; } GtArray* gt_transcript_counts_get_single(const GtTranscriptCounts *tc) { gt_assert(tc); return tc->exon_array_single; } void gt_transcript_counts_set_single(GtTranscriptCounts *tc, GtArray *counts) { gt_assert(tc && counts); tc->exon_array_single = counts; } GtArray* gt_transcript_counts_get_initial(const GtTranscriptCounts *tc) { gt_assert(tc); return tc->exon_array_initial; } void gt_transcript_counts_set_initial(GtTranscriptCounts *tc, GtArray *counts) { gt_assert(tc && counts); tc->exon_array_initial = counts; } GtArray* gt_transcript_counts_get_internal(const GtTranscriptCounts *tc) { gt_assert(tc); return tc->exon_array_internal; } void gt_transcript_counts_set_internal(GtTranscriptCounts *tc, GtArray *counts) { gt_assert(tc && counts); tc->exon_array_internal = counts; } GtArray* gt_transcript_counts_get_terminal(const GtTranscriptCounts *tc) { gt_assert(tc); return tc->exon_array_terminal; } void gt_transcript_counts_set_terminal(GtTranscriptCounts *tc, GtArray *counts) { gt_assert(tc && counts); tc->exon_array_terminal = counts; } void gt_transcript_counts_delete(GtTranscriptCounts *tc) { if (!tc) return; gt_array_delete(tc->exon_array_all); gt_array_delete(tc->exon_array_single); gt_array_delete(tc->exon_array_initial); gt_array_delete(tc->exon_array_internal); gt_array_delete(tc->exon_array_terminal); gt_free(tc); } genometools-1.5.1/src/extended/transcript_counts.h000066400000000000000000000042441211610345200223740ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TRANSCRIPT_COUNTS_H #define TRANSCRIPT_COUNTS_H #include "core/array.h" /* a container class for transcript count arrays */ typedef struct GtTranscriptCounts GtTranscriptCounts; /* create an empy container */ GtTranscriptCounts* gt_transcript_counts_new(void); /* return the count array for all exons */ GtArray* gt_transcript_counts_get_all(const GtTranscriptCounts*); void gt_transcript_counts_set_all(GtTranscriptCounts*, GtArray*); /* return the count array for single exons */ GtArray* gt_transcript_counts_get_single(const GtTranscriptCounts*); void gt_transcript_counts_set_single(GtTranscriptCounts*, GtArray*); /* return the count array for initial exons */ GtArray* gt_transcript_counts_get_initial(const GtTranscriptCounts*); void gt_transcript_counts_set_initial(GtTranscriptCounts*, GtArray*); /* return the count array for internal exons */ GtArray* gt_transcript_counts_get_internal(const GtTranscriptCounts*); void gt_transcript_counts_set_internal(GtTranscriptCounts*, GtArray*); /* return the count array for terminal exons */ GtArray* gt_transcript_counts_get_terminal(const GtTranscriptCounts*); void gt_transcript_counts_set_terminal(GtTranscriptCounts*, GtArray*); void gt_transcript_counts_delete(GtTranscriptCounts*); #endif genometools-1.5.1/src/extended/transcript_evaluators.c000066400000000000000000000072721211610345200232450ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "extended/transcript_evaluators.h" struct GtTranscriptEvaluators { GtEvaluator *exon_evaluator_all, *exon_evaluator_single, *exon_evaluator_initial, *exon_evaluator_internal, *exon_evaluator_terminal; }; GtTranscriptEvaluators* gt_transcript_evaluators_new(void) { GtTranscriptEvaluators *te = gt_malloc(sizeof (GtTranscriptEvaluators)); te->exon_evaluator_all = gt_evaluator_new(); te->exon_evaluator_single = gt_evaluator_new(); te->exon_evaluator_initial = gt_evaluator_new(); te->exon_evaluator_internal = gt_evaluator_new(); te->exon_evaluator_terminal = gt_evaluator_new(); return te; } GtEvaluator* gt_transcript_evaluators_get_all(const GtTranscriptEvaluators *te) { gt_assert(te); return te->exon_evaluator_all; } GtEvaluator* gt_transcript_evaluators_get_single(const GtTranscriptEvaluators *te) { gt_assert(te); return te->exon_evaluator_single; } GtEvaluator* gt_transcript_evaluators_get_initial(const GtTranscriptEvaluators *te) { gt_assert(te); return te->exon_evaluator_initial; } GtEvaluator* gt_transcript_evaluators_get_internal(const GtTranscriptEvaluators *te) { gt_assert(te); return te->exon_evaluator_internal; } GtEvaluator* gt_transcript_evaluators_get_terminal(const GtTranscriptEvaluators *te) { gt_assert(te); return te->exon_evaluator_terminal; } void gt_transcript_evaluators_add_actuals(const GtTranscriptEvaluators *evaluators, const GtTranscriptExons *exons) { gt_assert(evaluators && exons); gt_evaluator_add_actual(evaluators->exon_evaluator_all, gt_array_size(gt_transcript_exons_get_all(exons))); gt_evaluator_add_actual(evaluators->exon_evaluator_single, gt_array_size(gt_transcript_exons_get_single(exons))); gt_evaluator_add_actual(evaluators->exon_evaluator_initial, gt_array_size(gt_transcript_exons_get_initial(exons))); gt_evaluator_add_actual(evaluators->exon_evaluator_internal, gt_array_size(gt_transcript_exons_get_internal(exons))); gt_evaluator_add_actual(evaluators->exon_evaluator_terminal, gt_array_size(gt_transcript_exons_get_terminal(exons))); } void gt_transcript_evaluators_delete(GtTranscriptEvaluators *te) { if (!te) return; gt_evaluator_delete(te->exon_evaluator_all); gt_evaluator_delete(te->exon_evaluator_single); gt_evaluator_delete(te->exon_evaluator_initial); gt_evaluator_delete(te->exon_evaluator_internal); gt_evaluator_delete(te->exon_evaluator_terminal); gt_free(te); } genometools-1.5.1/src/extended/transcript_evaluators.h000066400000000000000000000046131211610345200232460ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TRANSCRIPT_EVALUATORS_H #define TRANSCRIPT_EVALUATORS_H #include "extended/evaluator.h" #include "extended/transcript_exons.h" /* a container class for transcript evaluators */ typedef struct GtTranscriptEvaluators GtTranscriptEvaluators; GtTranscriptEvaluators* gt_transcript_evaluators_new(void); /* return the evaluator for all exons */ GtEvaluator* gt_transcript_evaluators_get_all(const GtTranscriptEvaluators*); /* return the evaluator for single exons */ GtEvaluator* gt_transcript_evaluators_get_single(const GtTranscriptEvaluators*); /* return the evaluator for initial exons */ GtEvaluator* gt_transcript_evaluators_get_initial(const GtTranscriptEvaluators*); /* return the evaluator for internal exons */ GtEvaluator* gt_transcript_evaluators_get_internal(const GtTranscriptEvaluators*); /* return the evaluator for terminal exons */ GtEvaluator* gt_transcript_evaluators_get_terminal(const GtTranscriptEvaluators*); void gt_transcript_evaluators_add_actuals(const GtTranscriptEvaluators*, const GtTranscriptExons*); void gt_transcript_evaluators_delete(GtTranscriptEvaluators*); #endif genometools-1.5.1/src/extended/transcript_exons.c000066400000000000000000000107171211610345200222120ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/range.h" #include "extended/transcript_exons.h" struct GtTranscriptExons { GtArray *exon_array_all, *exon_array_single, *exon_array_initial, *exon_array_internal, *exon_array_terminal; }; GtTranscriptExons* gt_transcript_exons_new(void) { GtTranscriptExons *te = gt_malloc(sizeof (GtTranscriptExons)); te->exon_array_all = gt_array_new(sizeof (GtRange)); te->exon_array_single = gt_array_new(sizeof (GtRange)); te->exon_array_initial = gt_array_new(sizeof (GtRange)); te->exon_array_internal = gt_array_new(sizeof (GtRange)); te->exon_array_terminal = gt_array_new(sizeof (GtRange)); return te; } GtArray* gt_transcript_exons_get_all(const GtTranscriptExons *te) { gt_assert(te); return te->exon_array_all; } GtArray* gt_transcript_exons_get_single(const GtTranscriptExons *te) { gt_assert(te); return te->exon_array_single; } GtArray* gt_transcript_exons_get_initial(const GtTranscriptExons *te) { gt_assert(te); return te->exon_array_initial; } GtArray* gt_transcript_exons_get_internal(const GtTranscriptExons *te) { gt_assert(te); return te->exon_array_internal; } GtArray* gt_transcript_exons_get_terminal(const GtTranscriptExons *te) { gt_assert(te); return te->exon_array_terminal; } void gt_transcript_exons_sort(const GtTranscriptExons *te) { gt_assert(te); gt_ranges_sort(te->exon_array_all); gt_ranges_sort(te->exon_array_single); gt_ranges_sort(te->exon_array_initial); gt_ranges_sort(te->exon_array_internal); gt_ranges_sort(te->exon_array_terminal); } GtTranscriptCounts* gt_transcript_exons_uniq_in_place_count(GtTranscriptExons *te) { GtTranscriptCounts *tc; GtArray *counts; gt_assert(te); tc = gt_transcript_counts_new(); counts = gt_ranges_uniq_in_place_count(te->exon_array_all); gt_transcript_counts_set_all(tc, counts); counts = gt_ranges_uniq_in_place_count(te->exon_array_single); gt_transcript_counts_set_single(tc, counts); counts = gt_ranges_uniq_in_place_count(te->exon_array_initial); gt_transcript_counts_set_initial(tc, counts); counts = gt_ranges_uniq_in_place_count(te->exon_array_internal); gt_transcript_counts_set_internal(tc, counts); counts = gt_ranges_uniq_in_place_count(te->exon_array_terminal); gt_transcript_counts_set_terminal(tc, counts); return tc; } bool gt_transcript_exons_are_sorted(const GtTranscriptExons *te) { gt_assert(te); if (!gt_ranges_are_sorted(te->exon_array_all)) return false; if (!gt_ranges_are_sorted(te->exon_array_single)) return false; if (!gt_ranges_are_sorted(te->exon_array_initial)) return false; if (!gt_ranges_are_sorted(te->exon_array_internal)) return false; if (!gt_ranges_are_sorted(te->exon_array_terminal)) return false; return true; } GtTranscriptBittabs* gt_transcript_exons_create_bittabs(const GtTranscriptExons *te) { gt_assert(te); return gt_transcript_bittabs_new(gt_array_size(te->exon_array_all), gt_array_size(te->exon_array_single), gt_array_size(te->exon_array_initial), gt_array_size(te->exon_array_internal), gt_array_size(te->exon_array_terminal)); } void gt_transcript_exons_delete(GtTranscriptExons *te) { if (!te) return; gt_array_delete(te->exon_array_all); gt_array_delete(te->exon_array_single); gt_array_delete(te->exon_array_initial); gt_array_delete(te->exon_array_internal); gt_array_delete(te->exon_array_terminal); gt_free(te); } genometools-1.5.1/src/extended/transcript_exons.h000066400000000000000000000041771211610345200222220ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TRANSCRIPT_EXONS_H #define TRANSCRIPT_EXONS_H #include "extended/transcript_bittabs.h" #include "extended/transcript_counts.h" /* a container class for transcript exon arrays */ typedef struct GtTranscriptExons GtTranscriptExons; GtTranscriptExons* gt_transcript_exons_new(void); /* return the exon array for all exons */ GtArray* gt_transcript_exons_get_all(const GtTranscriptExons*); /* return the exon array for single exons */ GtArray* gt_transcript_exons_get_single(const GtTranscriptExons*); /* return the exon array for initial exons */ GtArray* gt_transcript_exons_get_initial(const GtTranscriptExons*); /* return the exon array for internal exons */ GtArray* gt_transcript_exons_get_internal(const GtTranscriptExons*); /* return the exon array for terminal exons */ GtArray* gt_transcript_exons_get_terminal(const GtTranscriptExons*); void gt_transcript_exons_sort(const GtTranscriptExons*); GtTranscriptCounts* gt_transcript_exons_uniq_in_place_count(GtTranscriptExons*); bool gt_transcript_exons_are_sorted(const GtTranscriptExons*); GtTranscriptBittabs* gt_transcript_exons_create_bittabs(const GtTranscriptExons*); void gt_transcript_exons_delete(GtTranscriptExons*); #endif genometools-1.5.1/src/extended/transcript_feature_type.h000066400000000000000000000022021211610345200235450ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TRANSCRIPT_FEATURE_TYPE_H #define TRANSCRIPT_FEATURE_TYPE_H typedef enum { TRANSCRIPT_FEATURE_TYPE_SINGLE, TRANSCRIPT_FEATURE_TYPE_INITIAL, TRANSCRIPT_FEATURE_TYPE_INTERNAL, TRANSCRIPT_FEATURE_TYPE_TERMINAL, TRANSCRIPT_FEATURE_TYPE_UNDETERMINED } GtTranscriptFeatureType; #endif genometools-1.5.1/src/extended/transcript_used_exons.c000066400000000000000000000055351211610345200232340ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/range.h" #include "extended/transcript_used_exons.h" struct GtTranscriptUsedExons { GtDlist *used_exons_all, *used_exons_single, *used_exons_initial, *used_exons_internal, *used_exons_terminal; }; GtTranscriptUsedExons* gt_transcript_used_exons_new(void) { GtTranscriptUsedExons *tue = gt_malloc(sizeof (GtTranscriptUsedExons)); tue->used_exons_all = gt_dlist_new((GtCompare) gt_range_compare); tue->used_exons_single = gt_dlist_new((GtCompare) gt_range_compare); tue->used_exons_initial = gt_dlist_new((GtCompare) gt_range_compare); tue->used_exons_internal = gt_dlist_new((GtCompare) gt_range_compare); tue->used_exons_terminal = gt_dlist_new((GtCompare) gt_range_compare); return tue; } GtDlist* gt_transcript_used_exons_get_all(GtTranscriptUsedExons *tue) { gt_assert(tue); return tue->used_exons_all; } GtDlist* gt_transcript_used_exons_get_single(GtTranscriptUsedExons *tue) { gt_assert(tue); return tue->used_exons_single; } GtDlist* gt_transcript_used_exons_get_initial(GtTranscriptUsedExons *tue) { gt_assert(tue); return tue->used_exons_initial; } GtDlist* gt_transcript_used_exons_get_internal(GtTranscriptUsedExons *tue) { gt_assert(tue); return tue->used_exons_internal; } GtDlist* gt_transcript_used_exons_get_terminal(GtTranscriptUsedExons *tue) { gt_assert(tue); return tue->used_exons_terminal; } static void used_gt_dlist_delete(GtDlist *used_list) { GtDlistelem *dlistelem; for (dlistelem = gt_dlist_first(used_list); dlistelem != NULL; dlistelem = gt_dlistelem_next(dlistelem)) { gt_free(gt_dlistelem_get_data(dlistelem)); } gt_dlist_delete(used_list); } void gt_transcript_used_exons_delete(GtTranscriptUsedExons *tue) { if (!tue) return; used_gt_dlist_delete(tue->used_exons_all); used_gt_dlist_delete(tue->used_exons_single); used_gt_dlist_delete(tue->used_exons_initial); used_gt_dlist_delete(tue->used_exons_internal); used_gt_dlist_delete(tue->used_exons_terminal); gt_free(tue); } genometools-1.5.1/src/extended/transcript_used_exons.h000066400000000000000000000030111211610345200232240ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TRANSCRIPT_USED_EXONS_H #define TRANSCRIPT_USED_EXONS_H #include "core/dlist.h" typedef struct GtTranscriptUsedExons GtTranscriptUsedExons; GtTranscriptUsedExons* gt_transcript_used_exons_new(void); GtDlist* gt_transcript_used_exons_get_all(GtTranscriptUsedExons*); GtDlist* gt_transcript_used_exons_get_single(GtTranscriptUsedExons*); GtDlist* gt_transcript_used_exons_get_initial(GtTranscriptUsedExons*); GtDlist* gt_transcript_used_exons_get_internal(GtTranscriptUsedExons*); GtDlist* gt_transcript_used_exons_get_terminal(GtTranscriptUsedExons*); void gt_transcript_used_exons_delete(GtTranscriptUsedExons*); #endif genometools-1.5.1/src/extended/type_checker.c000066400000000000000000000056151211610345200212530ustar00rootroot00000000000000/* Copyright (c) 2008, 2012 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/ma.h" #include "core/unused_api.h" #include "extended/type_checker_rep.h" GtTypeChecker* gt_type_checker_create(const GtTypeCheckerClass *type_checker_class) { GtTypeChecker *type_checker; gt_assert(type_checker_class && type_checker_class->size); type_checker = gt_calloc(1, type_checker_class->size); type_checker->c_class = type_checker_class; return type_checker; } GtTypeChecker* gt_type_checker_ref(GtTypeChecker *type_checker) { gt_assert(type_checker); type_checker->reference_count++; return type_checker; } const char* gt_type_checker_description(GtTypeChecker *type_checker) { gt_assert(type_checker && type_checker->c_class && type_checker->c_class->description); return type_checker->c_class->description(type_checker); } bool gt_type_checker_is_valid(GtTypeChecker *type_checker, const char *type) { gt_assert(type_checker && type_checker->c_class && type_checker->c_class->is_valid); return type_checker->c_class->is_valid(type_checker, type); } bool gt_type_checker_is_partof(GtTypeChecker *type_checker, const char *parent_type, const char *child_type) { gt_assert(type_checker && type_checker->c_class && type_checker->c_class->is_partof); return type_checker->c_class->is_partof(type_checker, parent_type, child_type); } void gt_type_checker_delete(GtTypeChecker *type_checker) { if (!type_checker) return; if (type_checker->reference_count) { type_checker->reference_count--; return; } gt_assert(type_checker->c_class); if (type_checker->c_class->free) type_checker->c_class->free(type_checker); gt_free(type_checker); } void* gt_type_checker_cast(GT_UNUSED const GtTypeCheckerClass *type_checker_class, GtTypeChecker *type_checker) { gt_assert(type_checker_class && type_checker && type_checker->c_class == type_checker_class); return type_checker; } genometools-1.5.1/src/extended/type_checker.h000066400000000000000000000017701211610345200212560ustar00rootroot00000000000000/* Copyright (c) 2008, 2011 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYPE_CHECKER_H #define TYPE_CHECKER_H #include "extended/type_checker_api.h" typedef struct GtTypeCheckerClass GtTypeCheckerClass; #endif genometools-1.5.1/src/extended/type_checker_api.h000066400000000000000000000037371211610345200221140ustar00rootroot00000000000000/* Copyright (c) 2008, 2011-2012 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYPE_CHECKER_API_H #define TYPE_CHECKER_API_H /* The interface, allows one to check the validity of (genome feature) types. */ typedef struct GtTypeChecker GtTypeChecker; /* Increase the reference count for and return it. */ GtTypeChecker* gt_type_checker_ref(GtTypeChecker *type_checker); /* Return description of . */ const char* gt_type_checker_description(GtTypeChecker *type_checker); /* Return if is a valid type for the given , otherwise. */ bool gt_type_checker_is_valid(GtTypeChecker *type_checker, const char *type); /* Return if is partof , otherwise. */ bool gt_type_checker_is_partof(GtTypeChecker *type_checker, const char *parent_type, const char *child_type); /* Decrease the reference count for or delete it, if this was the last reference. */ void gt_type_checker_delete(GtTypeChecker *type_checker); #endif genometools-1.5.1/src/extended/type_checker_builtin.c000066400000000000000000000071121211610345200227730ustar00rootroot00000000000000/* Copyright (c) 2008, 2012-2013 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/assert_api.h" #include "core/hashtable.h" #include "core/ma.h" #include "core/strcmp.h" #include "extended/type_checker_builtin.h" #include "extended/type_checker_rep.h" struct GtTypeCheckerBuiltin { const GtTypeChecker parent_instance; }; #define gt_type_checker_builtin_cast(FTF)\ gt_type_checker_cast(gt_type_checker_builtin_class(), FTF) static const char *gt_feature_node_type_strings[] = { "CDS", "EST_match", "LTR_retrotransposon", "SNP", "TF_binding_site", "cDNA_match", "exon", "five_prime_UTR", "five_prime_cis_splice_site", "gene", "intron", "inverted_repeat", "long_terminal_repeat", "mRNA", "protein_match", "repeat_region", "target_site_duplication", "three_prime_UTR", "three_prime_cis_splice_site", "transcript", "undefined" }; static const char* type_checker_builtin_find_type(const char *gft_string) { void *result; gt_assert(gft_string); /* do not convert undefined string */ gt_assert(strcmp(gft_string, "undefined")); result = bsearch(&gft_string, gt_feature_node_type_strings, sizeof (gt_feature_node_type_strings) / sizeof (gt_feature_node_type_strings[0]), sizeof (char*), gt_strcmpptr); if (result) return *(char**) result; return NULL; } static const char* gt_type_checker_builtin_description(GT_UNUSED GtTypeChecker *tc) { gt_assert(tc); return "built-in"; } static bool gt_type_checker_builtin_is_valid(GT_UNUSED GtTypeChecker *tc, const char *type) { gt_assert(tc && type); return type_checker_builtin_find_type(type) ? true : false; } static bool gt_type_checker_builtin_is_partof(GT_UNUSED GtTypeChecker *tc, GT_UNUSED const char *parent_type, GT_UNUSED const char *child_type) { gt_assert(tc && parent_type && child_type); return true; } const GtTypeCheckerClass* gt_type_checker_builtin_class(void) { static const GtTypeCheckerClass gt_type_checker_class = { sizeof (GtTypeCheckerBuiltin), gt_type_checker_builtin_description, gt_type_checker_builtin_is_valid, gt_type_checker_builtin_is_partof, NULL }; return >_type_checker_class; } GtTypeChecker* gt_type_checker_builtin_new(void) { GT_UNUSED GtTypeCheckerBuiltin *type_checker_builtin; GtTypeChecker *type_checker; type_checker = gt_type_checker_create(gt_type_checker_builtin_class()); type_checker_builtin = gt_type_checker_builtin_cast(type_checker); return type_checker; } genometools-1.5.1/src/extended/type_checker_builtin.h000066400000000000000000000022671211610345200230060ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYPE_CHECKER_BUILTIN_H #define TYPE_CHECKER_BUILTIN_H #include "extended/type_checker.h" /* Implements the GtTypeChecker interface with built-in types. */ typedef struct GtTypeCheckerBuiltin GtTypeCheckerBuiltin; const GtTypeCheckerClass* gt_type_checker_builtin_class(void); GtTypeChecker* gt_type_checker_builtin_new(); #endif genometools-1.5.1/src/extended/type_checker_obo.c000066400000000000000000000120331211610345200221020ustar00rootroot00000000000000/* Copyright (c) 2008, 2012 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/cstr_api.h" #include "core/cstr_table.h" #include "core/ma.h" #include "extended/obo_parse_tree.h" #include "extended/type_checker_obo.h" #include "extended/type_checker_rep.h" #include "extended/type_graph.h" struct GtTypeCheckerOBO { const GtTypeChecker parent_instance; GtStr *description; GtCstrTable *feature_node_types; GtTypeGraph *type_graph; }; #define gt_type_checker_obo_cast(FTF)\ gt_type_checker_cast(gt_type_checker_obo_class(), FTF) static void gt_type_checker_obo_free(GtTypeChecker *tc) { GtTypeCheckerOBO *tco = gt_type_checker_obo_cast(tc); gt_type_graph_delete(tco->type_graph); gt_cstr_table_delete(tco->feature_node_types); gt_str_delete(tco->description); } static const char* gt_type_checker_obo_description(GtTypeChecker *tc) { GtTypeCheckerOBO *tco; gt_assert(tc); tco = gt_type_checker_obo_cast(tc); return gt_str_get(tco->description); } static bool gt_type_checker_obo_is_valid(GtTypeChecker *tc, const char *type) { GtTypeCheckerOBO *tco; gt_assert(tc && type); tco = gt_type_checker_obo_cast(tc); return gt_cstr_table_get(tco->feature_node_types, type) ? true : false; } static bool gt_type_checker_obo_is_partof(GtTypeChecker *tc, const char *parent_type, const char *child_type) { GtTypeCheckerOBO *tco; gt_assert(tc && parent_type && child_type); tco = gt_type_checker_obo_cast(tc); return gt_type_graph_is_partof(tco->type_graph, parent_type, child_type); } const GtTypeCheckerClass* gt_type_checker_obo_class(void) { static const GtTypeCheckerClass gt_type_checker_class = { sizeof (GtTypeCheckerOBO), gt_type_checker_obo_description, gt_type_checker_obo_is_valid, gt_type_checker_obo_is_partof, gt_type_checker_obo_free }; return >_type_checker_class; } static void add_feature_node_from_tree(GtTypeCheckerOBO *tco, GtOBOParseTree *obo_parse_tree, unsigned long stanza_num, const char *stanza_key) { const char *value; gt_assert(tco && obo_parse_tree && stanza_key); value = gt_obo_parse_tree_get_stanza_value(obo_parse_tree, stanza_num, stanza_key); /* do not add values multiple times (possible for "name" values) */ if (!gt_cstr_table_get(tco->feature_node_types, value)) gt_cstr_table_add(tco->feature_node_types, value); else puts(value); } static int create_feature_nodes(GtTypeCheckerOBO *tco, const char *obo_file_path, GtError *err) { GtOBOParseTree *obo_parse_tree; unsigned long i; gt_error_check(err); gt_assert(tco && obo_file_path); if ((obo_parse_tree = gt_obo_parse_tree_new(obo_file_path, err))) { for (i = 0; i < gt_obo_parse_tree_num_of_stanzas(obo_parse_tree); i++) { if (!strcmp(gt_obo_parse_tree_get_stanza_type(obo_parse_tree, i), "Term")) { const char *is_obsolete = gt_obo_parse_tree_get_stanza_value(obo_parse_tree, i, "is_obsolete"); /* do not add obsolete types */ if (!is_obsolete || strcmp(is_obsolete, "true")) { const GtOBOStanza *stanza; add_feature_node_from_tree(tco, obo_parse_tree, i, "id"); add_feature_node_from_tree(tco, obo_parse_tree, i, "name"); stanza = gt_obo_parse_tree_get_stanza(obo_parse_tree, i); gt_type_graph_add_stanza(tco->type_graph, stanza); } } } gt_obo_parse_tree_delete(obo_parse_tree); return 0; } return -1; } GtTypeChecker* gt_type_checker_obo_new(const char *obo_file_path, GtError *err) { GtTypeCheckerOBO *tco; GtTypeChecker *tc; gt_error_check(err); gt_assert(obo_file_path); tc = gt_type_checker_create(gt_type_checker_obo_class()); tco = gt_type_checker_obo_cast(tc); tco->description= gt_str_new_cstr("OBO file "); gt_str_append_cstr(tco->description, obo_file_path); tco->feature_node_types = gt_cstr_table_new(); tco->type_graph = gt_type_graph_new(); if (create_feature_nodes(tco, obo_file_path, err)) { gt_type_checker_delete(tc); return NULL; } return tc; } genometools-1.5.1/src/extended/type_checker_obo.h000066400000000000000000000020401211610345200221040ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYPE_CHECKER_OBO_H #define TYPE_CHECKER_OBO_H #include "extended/type_checker_obo_api.h" #include "extended/type_checker.h" const GtTypeCheckerClass* gt_type_checker_obo_class(void); #endif genometools-1.5.1/src/extended/type_checker_obo_api.h000066400000000000000000000025201211610345200227400ustar00rootroot00000000000000/* Copyright (c) 2008, 2011 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYPE_CHECKER_OBO_API_H #define TYPE_CHECKER_OBO_API_H #include "extended/type_checker_api.h" /* Implements the interface with types from an OBO file. */ typedef struct GtTypeCheckerOBO GtTypeCheckerOBO; /* Create a new for OBO file with given . If the OBO file cannot be parsed correctly, is returned and is set correspondingly. */ GtTypeChecker* gt_type_checker_obo_new(const char *obo_file_path, GtError *err); #endif genometools-1.5.1/src/extended/type_checker_rep.h000066400000000000000000000031041211610345200221150ustar00rootroot00000000000000/* Copyright (c) 2008, 2012 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYPE_CHECKER_REP_H #define TYPE_CHECKER_REP_H #include #include "core/cstr_table.h" #include "extended/feature_type.h" #include "extended/type_checker.h" struct GtTypeCheckerClass { size_t size; const char* (*description)(GtTypeChecker*); bool (*is_valid)(GtTypeChecker*, const char *type); bool (*is_partof)(GtTypeChecker*, const char *parent_type, const char *child_type); void (*free)(GtTypeChecker*); }; struct GtTypeChecker { const GtTypeCheckerClass *c_class; unsigned int reference_count; }; GtTypeChecker* gt_type_checker_create(const GtTypeCheckerClass*); void* gt_type_checker_cast(const GtTypeCheckerClass*, GtTypeChecker*); #endif genometools-1.5.1/src/extended/type_graph.c000066400000000000000000000156461211610345200207550ustar00rootroot00000000000000/* Copyright (c) 2012-2013 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/array_api.h" #include "core/bool_matrix.h" #include "core/cstr_api.h" #include "core/hashmap_api.h" #include "core/ma_api.h" #include "core/symbol_api.h" #include "extended/type_graph.h" #include "extended/type_node.h" #define PART_OF "part_of" #define MEMBER_OF "member_of" #define INTEGRAL_PART_OF "integral_part_of" struct GtTypeGraph { GtHashmap *name2id, /* maps from name to SO ID */ *nodemap; /* maps SO ID to actual node */ GtArray *nodes; GtBoolMatrix *part_of_out_edges, *part_of_in_edges; bool ready; }; GtTypeGraph* gt_type_graph_new(void) { GtTypeGraph *type_graph = gt_malloc(sizeof (GtTypeGraph)); type_graph->name2id = gt_hashmap_new(GT_HASH_DIRECT, NULL, NULL); type_graph->nodemap = gt_hashmap_new(GT_HASH_DIRECT, NULL, NULL); type_graph->nodes = gt_array_new(sizeof (GtTypeNode*)); type_graph->part_of_out_edges = gt_bool_matrix_new(); type_graph->part_of_in_edges = gt_bool_matrix_new(); type_graph->ready = false; return type_graph; } void gt_type_graph_delete(GtTypeGraph *type_graph) { unsigned long i; if (!type_graph) return; gt_bool_matrix_delete(type_graph->part_of_in_edges); gt_bool_matrix_delete(type_graph->part_of_out_edges); for (i = 0; i < gt_array_size(type_graph->nodes); i++) gt_type_node_delete(*(GtTypeNode**) gt_array_get(type_graph->nodes, i)); gt_array_delete(type_graph->nodes); gt_hashmap_delete(type_graph->nodemap); gt_hashmap_delete(type_graph->name2id); gt_free(type_graph); } void gt_type_graph_add_stanza(GtTypeGraph *type_graph, const GtOBOStanza *stanza) { const char *id_value, *name_value; unsigned long i, size; GtTypeNode *node; GtStr *buf; gt_assert(type_graph && stanza && !type_graph->ready); gt_assert(gt_obo_stanza_size(stanza, "id") == 1); gt_assert(gt_obo_stanza_size(stanza, "name") == 1); id_value = gt_symbol(gt_obo_stanza_get_value(stanza, "id", 0)); name_value = gt_symbol(gt_obo_stanza_get_value(stanza, "name", 0)); gt_assert(id_value); gt_assert(name_value); gt_assert(!gt_hashmap_get(type_graph->nodemap, id_value)); node = gt_type_node_new(gt_array_size(type_graph->nodes), id_value); gt_hashmap_add(type_graph->name2id, (char*) name_value, (char*) id_value); gt_hashmap_add(type_graph->nodemap, (char*) id_value, node); gt_array_add(type_graph->nodes, node); buf = gt_str_new(); /* store is_a entries in node, if necessary */ if ((size = gt_obo_stanza_size(stanza, "is_a"))) { for (i = 0; i < size; i++) { const char *id = gt_obo_stanza_get_value(stanza, "is_a", i); gt_str_reset(buf); gt_str_append_cstr_nt(buf, id, strcspn(id, " \n")); gt_type_node_is_a_add(node, gt_symbol(gt_str_get(buf))); } } /* store part_of entries in node, if necessary */ if ((size = gt_obo_stanza_size(stanza, "relationship"))) { for (i = 0; i < size; i++) { const char *rel = gt_obo_stanza_get_value(stanza, "relationship", i); gt_str_reset(buf); /* match part_of */ if (!strncmp(rel, PART_OF, strlen(PART_OF))) { const char *part_of = rel + strlen(PART_OF) + 1; gt_str_append_cstr_nt(buf, part_of, strcspn(part_of, " \n")); gt_type_node_part_of_add(node, gt_symbol(gt_str_get(buf))); continue; } /* match member_of */ if (!strncmp(rel, MEMBER_OF, strlen(MEMBER_OF))) { const char *member_of = rel + strlen(MEMBER_OF) + 1; gt_str_append_cstr_nt(buf, member_of, strcspn(member_of, " \n")); gt_type_node_part_of_add(node, gt_symbol(gt_str_get(buf))); continue; } /* match integral_part_of */ if (!strncmp(rel, INTEGRAL_PART_OF, strlen(INTEGRAL_PART_OF))) { const char *integral_part_of = rel + strlen(INTEGRAL_PART_OF) + 1; gt_str_append_cstr_nt(buf, integral_part_of, strcspn(integral_part_of, " \n")); gt_type_node_part_of_add(node, gt_symbol(gt_str_get(buf))); } } } gt_str_delete(buf); } static void create_vertices(GtTypeGraph *type_graph) { unsigned long i, j; GtTypeNode *parent; const char *id; gt_assert(type_graph && !type_graph->ready); /* iterate over nodes */ for (i = 0; i < gt_array_size(type_graph->nodes); i++) { GtTypeNode *node = *(GtTypeNode**) gt_array_get(type_graph->nodes, i); /* process is_a parents */ for (j = 0; j < gt_type_node_is_a_size(node); j++) { id = gt_type_node_is_a_get(node, j); parent = gt_hashmap_get(type_graph->nodemap, id); gt_assert(parent); gt_type_node_add_is_a_vertex(node, parent); } /* process part_of parents */ for (j = 0; j < gt_type_node_part_of_size(node); j++) { id = gt_type_node_part_of_get(node, j); parent = gt_hashmap_get(type_graph->nodemap, id); gt_assert(parent); gt_bool_matrix_set(type_graph->part_of_out_edges, gt_type_node_num(node), gt_type_node_num(parent), true); gt_bool_matrix_set(type_graph->part_of_in_edges, gt_type_node_num(parent), gt_type_node_num(node), true); } } } bool gt_type_graph_is_partof(GtTypeGraph *type_graph, const char *parent_type, const char *child_type) { const char *parent_id, *child_id; GtTypeNode *child_node; gt_assert(type_graph && parent_type && child_type); /* make sure graph is built */ if (!type_graph->ready) { create_vertices(type_graph); type_graph->ready = true; } /* get parent ID, if the type is not mappable to an ID, assume it is the ID */ if (!(parent_id = gt_hashmap_get(type_graph->name2id, parent_type))) parent_id = parent_type; /* get child ID, if the type is not mappable to an ID, assmue it is the ID */ if (!(child_id = gt_hashmap_get(type_graph->name2id, child_type))) child_id = child_type; /* get child node */ child_node = gt_hashmap_get(type_graph->nodemap, child_id); gt_assert(child_node); /* check for parent */ return gt_type_node_has_parent(child_node, parent_id, type_graph->part_of_out_edges, type_graph->part_of_in_edges, type_graph->nodes); } genometools-1.5.1/src/extended/type_graph.h000066400000000000000000000024651211610345200207550ustar00rootroot00000000000000/* Copyright (c) 2012-2013 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYPE_GRAPH_H #define TYPE_GRAPH_H #include "extended/obo_stanza.h" typedef struct GtTypeGraph GtTypeGraph; GtTypeGraph* gt_type_graph_new(void); void gt_type_graph_delete(GtTypeGraph *type_graph); void gt_type_graph_add_stanza(GtTypeGraph *type_graph, const GtOBOStanza *obo_stanza); bool gt_type_graph_is_partof(GtTypeGraph *type_graph, const char *parent_type, const char *child_type); #endif genometools-1.5.1/src/extended/type_node.c000066400000000000000000000150231211610345200205660ustar00rootroot00000000000000/* Copyright (c) 2012-2013 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/array_api.h" #include "core/hashmap_api.h" #include "core/log_api.h" #include "core/ma_api.h" #include "extended/type_node.h" struct GtTypeNode { unsigned long num; const char *id; GtArray *is_a_list, *part_of_list; GtArray *is_a_out_edges; GtHashmap *cache; }; GtTypeNode* gt_type_node_new(unsigned long num, const char *id) { GtTypeNode *node = gt_calloc(1, sizeof *node); node->num = num; node->id = id; return node; } void gt_type_node_delete(GtTypeNode *type_node) { if (!type_node) return; gt_hashmap_delete(type_node->cache); gt_array_delete(type_node->is_a_out_edges); gt_array_delete(type_node->part_of_list); gt_array_delete(type_node->is_a_list); gt_free(type_node); } unsigned long gt_type_node_num(const GtTypeNode *type_node) { gt_assert(type_node); return type_node->num; } void gt_type_node_is_a_add(GtTypeNode *type_node, const char *id) { gt_assert(type_node && id); if (!type_node->is_a_list) type_node->is_a_list = gt_array_new(sizeof (const char*)); gt_array_add(type_node->is_a_list, id); } const char* gt_type_node_is_a_get(const GtTypeNode *type_node, unsigned long idx) { gt_assert(type_node && idx < gt_type_node_is_a_size(type_node)); return *(const char**) gt_array_get(type_node->is_a_list, idx); } unsigned long gt_type_node_is_a_size(const GtTypeNode *type_node) { gt_assert(type_node); return (type_node->is_a_list) ? gt_array_size(type_node->is_a_list) : 0; } void gt_type_node_part_of_add(GtTypeNode *type_node, const char *id) { gt_assert(type_node && id); if (!type_node->part_of_list) type_node->part_of_list = gt_array_new(sizeof (const char*)); gt_array_add(type_node->part_of_list, id); } const char* gt_type_node_part_of_get(const GtTypeNode *type_node, unsigned long idx) { gt_assert(type_node && idx < gt_type_node_part_of_size(type_node)); return *(const char**) gt_array_get(type_node->part_of_list, idx); } unsigned long gt_type_node_part_of_size(const GtTypeNode *type_node) { gt_assert(type_node); return (type_node->part_of_list) ? gt_array_size(type_node->part_of_list) : 0; } void gt_type_node_add_is_a_vertex(GtTypeNode *src, const GtTypeNode *dst) { gt_assert(src && dst); if (!src->is_a_out_edges) src->is_a_out_edges = gt_array_new(sizeof (GtTypeNode*)); gt_array_add(src->is_a_out_edges, dst); } static void create_transitive_part_of_edges(GtTypeNode *node, GtBoolMatrix *part_of_out_edges, GtBoolMatrix *part_of_in_edges, GtArray *node_stack) { unsigned long i, j; if (gt_array_size(node_stack)) { for (i = gt_bool_matrix_get_first_column(part_of_in_edges, node->num); i != gt_bool_matrix_get_last_column(part_of_in_edges, node->num); i = gt_bool_matrix_get_next_column(part_of_in_edges, node->num, i)) { for (j = 0; j < gt_array_size(node_stack); j++) { GtTypeNode *child = *(GtTypeNode**) gt_array_get(node_stack, j); gt_bool_matrix_set(part_of_out_edges, i, child->num, true); gt_bool_matrix_set(part_of_in_edges, child->num, i, true); } } } gt_array_add(node_stack, node); for (i = 0; i < gt_array_size(node->is_a_out_edges); i++) { GtTypeNode *parent = *(GtTypeNode**) gt_array_get(node->is_a_out_edges, i); create_transitive_part_of_edges(parent, part_of_out_edges, part_of_in_edges, node_stack); } gt_array_pop(node_stack); } bool gt_type_node_has_parent(GtTypeNode *node, const char *id, GtBoolMatrix *part_of_out_edges, GtBoolMatrix *part_of_in_edges, GtArray *node_list) { GtArray *node_stack; GtTypeNode *parent; unsigned long i; bool *result; gt_assert(node && id); gt_log_log("check if node %s has parent %s", node->id, id); /* try cache */ if (node->cache) { if ((result = gt_hashmap_get(node->cache, id))) return *result; } else node->cache = gt_hashmap_new(GT_HASH_DIRECT, NULL, gt_free_func); result = gt_malloc(sizeof (bool)); /* no cache hit found */ if (node->id == id) { *result = true; gt_hashmap_add(node->cache, (char*) id, result); gt_log_log("return true"); return true; } /* create transitive part_of edges */ node_stack = gt_array_new(sizeof (GtTypeNode*)); create_transitive_part_of_edges(node, part_of_out_edges, part_of_in_edges, node_stack); gt_assert(!gt_array_size(node_stack)); gt_array_delete(node_stack); /* traversal of part_of out edges */ for (i = gt_bool_matrix_get_first_column(part_of_out_edges, node->num); i != gt_bool_matrix_get_last_column(part_of_out_edges, node->num); i = gt_bool_matrix_get_next_column(part_of_out_edges, node->num, i)) { parent = *(GtTypeNode**) gt_array_get(node_list, i); if (gt_type_node_has_parent(parent, id, part_of_out_edges, part_of_in_edges, node_list)) { *result = true; gt_hashmap_add(node->cache, (char*) id, result); gt_log_log("return true"); return true; } } /* traversal of is_a out edges */ for (i = 0; i < gt_array_size(node->is_a_out_edges); i++) { parent = *(GtTypeNode**) gt_array_get(node->is_a_out_edges, i); if (gt_type_node_has_parent(parent, id, part_of_out_edges, part_of_in_edges, node_list)) { *result = true; gt_hashmap_add(node->cache, (char*) id, result); gt_log_log("return true"); return true; } } /* no result found */ *result = false; gt_hashmap_add(node->cache, (char*) id, result); return false; } genometools-1.5.1/src/extended/type_node.h000066400000000000000000000035041211610345200205740ustar00rootroot00000000000000/* Copyright (c) 2012-2013 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYPE_NODE_H #define TYPE_NODE_H #include "core/bool_matrix.h" typedef struct GtTypeNode GtTypeNode; GtTypeNode* gt_type_node_new(unsigned long num, const char *id); void gt_type_node_delete(GtTypeNode*); unsigned long gt_type_node_num(const GtTypeNode*); void gt_type_node_is_a_add(GtTypeNode*, const char*); const char* gt_type_node_is_a_get(const GtTypeNode*, unsigned long); unsigned long gt_type_node_is_a_size(const GtTypeNode*); void gt_type_node_part_of_add(GtTypeNode*, const char*); const char* gt_type_node_part_of_get(const GtTypeNode*, unsigned long); unsigned long gt_type_node_part_of_size(const GtTypeNode*); void gt_type_node_add_is_a_vertex(GtTypeNode *src, const GtTypeNode *dst); bool gt_type_node_has_parent(GtTypeNode*, const char *id, GtBoolMatrix *part_of_out_edges, GtBoolMatrix *part_of_in_edges, GtArray *node_list); #endif genometools-1.5.1/src/extended/typecheck_info.c000066400000000000000000000114311211610345200215710ustar00rootroot00000000000000/* Copyright (c) 2013 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/cstr_api.h" #include "core/error.h" #include "core/fileutils.h" #include "core/gtdatapath.h" #include "core/ma_api.h" #include "extended/typecheck_info.h" #include "extended/type_checker_builtin.h" #include "extended/type_checker_obo.h" struct GtTypecheckInfo { GtStr *typecheck; GtOption *typecheck_option; bool typecheck_built_in; }; GtTypecheckInfo* gt_typecheck_info_new(void) { GtTypecheckInfo *tci = gt_calloc(1, sizeof *tci); tci->typecheck = gt_str_new(); return tci; } void gt_typecheck_info_delete(GtTypecheckInfo *tci) { if (!tci) return; gt_option_delete(tci->typecheck_option); gt_str_delete(tci->typecheck); gt_free(tci); } void gt_typecheck_info_register_options(GtTypecheckInfo *tci, GtOptionParser *op) { GtOption *typecheck_option, *built_in_option; gt_assert(tci && op); gt_assert(!tci->typecheck_option); /* can only called once */ /* -typecheck */ typecheck_option = gt_option_new_string("typecheck", "check GFF3 types against \"id\" and " "\"name\" tags in given OBO file and validate parent " "(part-of) relationships.\nIf no argument is given, " "the sofa.obo file from the gtdata/obo_files " "directory is used.\nIf an argument is given, it is " "used as an OBO filename.\nIn the case that such a " "file does not exist '.obo' is added to the argument " "and loading the resulting filename from the " "gtdata/obo_files directory is attempted.", tci->typecheck, NULL); gt_option_argument_is_optional(typecheck_option); gt_option_parser_add_option(op, typecheck_option); tci->typecheck_option = gt_option_ref(typecheck_option); /* -typecheck-built-in */ built_in_option = gt_option_new_bool("typecheck-built-in", "use built-in type checker", &tci->typecheck_built_in, false); gt_option_is_development_option(built_in_option); gt_option_parser_add_option(op, built_in_option); gt_option_exclude(typecheck_option, built_in_option); } bool gt_typecheck_info_option_used(const GtTypecheckInfo *tci) { gt_assert(tci && tci->typecheck_option); if (gt_option_is_set(tci->typecheck_option) || tci->typecheck_built_in) return true; return false; } static GtStr* get_obo_path(GtError *err) { const char *progname; GtStr *obo_path, *prog; gt_error_check(err); progname = gt_error_get_progname(err); gt_assert(progname != NULL); prog = gt_str_new(); gt_str_append_cstr_nt(prog, progname, gt_cstr_length_up_to_char(progname, ' ')); obo_path = gt_get_gtdata_path(gt_str_get(prog), err); if (obo_path) gt_str_append_cstr(obo_path, "/obo_files/"); gt_str_delete(prog); return obo_path; } GtTypeChecker* gt_typecheck_info_create_type_checker(const GtTypecheckInfo *tci, GtError *err) { GtTypeChecker *type_checker = NULL; int had_err = 0; gt_error_check(err); gt_assert(tci); if (tci->typecheck_built_in) type_checker = gt_type_checker_builtin_new(); else { GtStr *obo_file; gt_assert(gt_option_is_set(tci->typecheck_option)); if (!gt_str_length(tci->typecheck)) { /* a. */ if (!(obo_file = get_obo_path(err))) had_err = -1; if (!had_err) gt_str_append_cstr(obo_file, "sofa.obo"); } else if (gt_file_exists(gt_str_get(tci->typecheck))) { /* b. */ obo_file = gt_str_new_cstr(gt_str_get(tci->typecheck)); } else { /* c. */ if (!(obo_file = get_obo_path(err))) had_err = -1; if (!had_err) { gt_str_append_str(obo_file, tci->typecheck); gt_str_append_cstr(obo_file, ".obo"); } } if (!had_err) type_checker = gt_type_checker_obo_new(gt_str_get(obo_file), err); gt_str_delete(obo_file); } return type_checker; } genometools-1.5.1/src/extended/typecheck_info.h000066400000000000000000000026261211610345200216040ustar00rootroot00000000000000/* Copyright (c) 2013 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYPECHECK_INFO_H #define TYPECHECK_INFO_H #include "core/option_api.h" #include "extended/type_checker_api.h" typedef struct GtTypecheckInfo GtTypecheckInfo; GtTypecheckInfo* gt_typecheck_info_new(void); void gt_typecheck_info_delete(GtTypecheckInfo*); void gt_typecheck_info_register_options(GtTypecheckInfo*, GtOptionParser*); bool gt_typecheck_info_option_used(const GtTypecheckInfo*); GtTypeChecker* gt_typecheck_info_create_type_checker(const GtTypecheckInfo*, GtError *err); #endif genometools-1.5.1/src/extended/uint64hashtable.c000066400000000000000000000237131211610345200216120ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/ensure.h" #include "core/log.h" #include "core/ma.h" #include "core/hashtable.h" /* gt_uint64_key_mul_hash */ #include "core/spacecalc.h" #include "core/format64.h" #include "core/qsort_r_api.h" #include "core/timer_api.h" #include "extended/uint64hashtable.h" #include "extended/uint64hashtable_primes.h" #define GT_UINT64TABLE_TOO_LARGE \ "fatal: no prime number larger than %lu in lookup table\n" \ "developers: modify scripts/makeprimestable.sh to create a larger table\n" #define GT_UINT64TABLE_NOFPRIMES \ (sizeof (gt_uint64hashtable_primes) / sizeof (gt_uint64hashtable_primes[0])) #define GT_UINT64TABLE_LARGEST_PRIME \ gt_uint64hashtable_primes[GT_UINT64TABLE_NOFPRIMES - 1UL] /* if n is in lookup table return it; * otherwise return first element in lookup table larger than n */ static size_t gt_uint64hashtable_get_size(size_t n) { size_t u, l, i, k, k_i; k = n; if (k > (size_t)GT_UINT64TABLE_LARGEST_PRIME) { fprintf(stderr, GT_UINT64TABLE_TOO_LARGE, (unsigned long)k); exit(1); } if (k < (size_t)gt_uint64hashtable_primes[0]) { return (size_t)gt_uint64hashtable_primes[0]; } l = 0; u = GT_UINT64TABLE_NOFPRIMES - (size_t)1; do { i = (l + u) >> 1; gt_assert(u >= l); if (u - l == (size_t)1) { return ((size_t)gt_uint64hashtable_primes[l] == k) ? k : (size_t)gt_uint64hashtable_primes[u]; } k_i = (size_t)gt_uint64hashtable_primes[i]; if (k < k_i) { u = i; } else if (k > k_i) { l = i; } else { return k_i; } } while (true); gt_assert(false); /* this point should never be reached */ return 0; } typedef struct { uint64_t key; unsigned long count; } GtUint64hashstoredvalue; static int compareGtUint64hashstoredvalue(const void *a,const void *b, void *data) { GtUint64hashstoredvalue *hspace = (GtUint64hashstoredvalue *) data; uint32_t va = *(const uint32_t *) a; uint32_t vb = *(const uint32_t *) b; if (hspace[va].key < hspace[vb].key) { return -1; } if (hspace[va].key > hspace[vb].key) { return 1; } gt_assert(false); return 0; } struct GtUint64hashtable { GtUint64hashstoredvalue *hspace; uint32_t *sortedhspace; size_t alloc; unsigned long countcollisions, zero_count, allentries; bool zero_occurs; }; GtUint64hashtable *gt_uint64hashtable_new(size_t nof_elements) { GtUint64hashtable *table; const double loadfactor = 1.30; table = gt_malloc(sizeof (*table)); table->countcollisions = 0; table->allentries = 0; table->zero_occurs = false; table->zero_count = 0; table->alloc = gt_uint64hashtable_get_size((size_t)(1 + loadfactor * (double) nof_elements)); table->hspace = gt_calloc(table->alloc, sizeof (*table->hspace)); return table; } void gt_uint64hashtable_delete(GtUint64hashtable *table) { if (table != NULL) { gt_free(table->hspace); gt_free(table); } } static inline size_t gt_uint64hashtable_h1(uint64_t key, size_t table_size) { return (size_t) gt_uint64_key_mul_hash(key) % table_size; } static inline size_t gt_uint64hashtable_h2(uint64_t key, size_t table_size) { return (size_t) 1 + (size_t) gt_uint64_key_mul_hash(key) % (table_size - 1); } bool gt_uint64hashtable_search(GtUint64hashtable *table, uint64_t key, bool insert_if_not_found) { gt_assert(table != NULL); if (key > 0) { size_t pos, hashadd = 0, iteration; const uint64_t emptymark = 0; #ifndef NDEBUG size_t first_pos; #endif pos = gt_uint64hashtable_h1(key, table->alloc); #ifndef NDEBUG first_pos = pos; #endif for (iteration = 0; iteration < table->alloc; iteration++) { gt_assert(pos < table->alloc); if (table->hspace[pos].key == emptymark) { if (insert_if_not_found) { table->allentries++; table->hspace[pos].key = key; table->hspace[pos].count++; } return false; } if (table->hspace[pos].key == key) { gt_assert(table->hspace[pos].count > 0); table->hspace[pos].count++; return true; } table->countcollisions++; if (hashadd == 0) { hashadd = gt_uint64hashtable_h2(key, table->alloc); } gt_assert(hashadd > 0); pos += hashadd; if (pos >= table->alloc) { pos -= table->alloc; } gt_assert(pos != first_pos); } fprintf(stderr, "function %s, file %s, line %d.\n" "Cannot find empty slot in hashtable: " "This is probably a bug, please report it.\n", __func__, __FILE__, __LINE__); exit(GT_EXIT_PROGRAMMING_ERROR); } else { if (!table->zero_occurs) { if (insert_if_not_found) { table->zero_occurs = true; table->zero_count++; } return false; } else { gt_assert(table->zero_count > 0); table->zero_count++; return true; } } } unsigned long gt_uint64hashtable_insertionindex(GtUint64hashtable *table, uint64_t key) { gt_assert(table != NULL); if (key > 0) { size_t pos, hashadd = 0, iteration; const uint64_t emptymark = 0; #ifndef NDEBUG size_t first_pos; #endif pos = gt_uint64hashtable_h1(key, table->alloc); #ifndef NDEBUG first_pos = pos; #endif for (iteration = 0; iteration < table->alloc; iteration++) { gt_assert(pos < table->alloc); if (table->hspace[pos].key == emptymark) { return ULONG_MAX; } if (table->hspace[pos].key == key) { gt_assert(table->hspace[pos].count > 0); return --table->hspace[pos].count; } table->countcollisions++; if (hashadd == 0) { hashadd = gt_uint64hashtable_h2(key, table->alloc); } gt_assert(hashadd > 0); pos += hashadd; if (pos >= table->alloc) { pos -= table->alloc; } gt_assert(pos != first_pos); } fprintf(stderr, "function %s, file %s, line %d.\n" "Cannot find empty slot in hashtable: " "This is probably a bug, please report it.\n", __func__, __FILE__, __LINE__); exit(GT_EXIT_PROGRAMMING_ERROR); } else { gt_assert(table->zero_occurs); gt_assert(table->zero_count > 0); return --table->zero_count; } } unsigned long gt_uint64hashtable_countsum_get(const GtUint64hashtable *table) { size_t idx; unsigned long sumcount = 0; for (idx=0; idx < table->alloc; idx++) { if (table->hspace[idx].count > 0) { sumcount += table->hspace[idx].count; } } return sumcount + table->zero_count; } unsigned long gt_uint64hashtable_partialsums(GtUint64hashtable *table, GtTimer *timer) { size_t idx, next = 0; unsigned long psum, maxsize = 0; table->sortedhspace = gt_malloc((size_t) table->allentries * sizeof (*table->sortedhspace)); if (timer != NULL) { gt_timer_show_progress(timer, "sorting the hashkeys",stdout); } for (idx = 0; idx < table->alloc; idx++) { if (table->hspace[idx].count > 0) { gt_assert(next < (size_t) table->allentries); table->sortedhspace[next++] = idx; if (maxsize < table->hspace[idx].count) { maxsize = table->hspace[idx].count; } } } gt_qsort_r(table->sortedhspace,next,sizeof (*table->sortedhspace), table->hspace,compareGtUint64hashstoredvalue); gt_assert(next > 0); if (table->zero_occurs) { table->hspace[table->sortedhspace[0]].count += table->zero_count; } if (timer != NULL) { gt_timer_show_progress(timer, "computing partial sums",stdout); } for (idx = (size_t) 1; idx < next; idx++) { table->hspace[table->sortedhspace[idx]].count += table->hspace[table->sortedhspace[idx-1]].count; } psum = table->hspace[table->sortedhspace[next-1]].count; gt_free(table->sortedhspace); return psum; } int gt_uint64hashtable_unit_test(GtError *err) { int had_err = 0; GtUint64hashtable *table = NULL; bool found; size_t i, nof_elements; gt_error_check(err); table = gt_uint64hashtable_new(0); gt_ensure(had_err, table != NULL); found = gt_uint64hashtable_search(table, (uint64_t)7, false); gt_ensure(had_err, !found); found = gt_uint64hashtable_search(table, (uint64_t)7, true); gt_ensure(had_err, !found); found = gt_uint64hashtable_search(table, (uint64_t)7, true); gt_ensure(had_err, found); gt_uint64hashtable_delete(table); nof_elements = (size_t)10000; table = gt_uint64hashtable_new(nof_elements); gt_ensure(had_err, table != NULL); for (i = 0; i < nof_elements; i++) { found = gt_uint64hashtable_search(table, (uint64_t)i, true); gt_ensure(had_err, !found); } for (i = 0; i < nof_elements; i++) { found = gt_uint64hashtable_search(table, (uint64_t)i, true); gt_ensure(had_err, found); } gt_uint64hashtable_delete(table); return had_err; } genometools-1.5.1/src/extended/uint64hashtable.h000066400000000000000000000040531211610345200216130ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef UINT64HASHTABLE_H #define UINT64HASHTABLE_H #include #include "core/timer_api.h" #include "core/error.h" /* An hash table of uint64_t values without any associated information */ typedef struct GtUint64hashtable GtUint64hashtable; /* Create a new with space for at least values */ GtUint64hashtable* gt_uint64hashtable_new(size_t nof_elements); /* Deletes a and frees all associated memory */ void gt_uint64hashtable_delete(GtUint64hashtable *table); /* Searches key in table; returns true if found, false otherwise; * if insert_if_not_found is true, key is added to the table if not already * contained */ bool gt_uint64hashtable_search(GtUint64hashtable *table, uint64_t key, bool insert_if_not_found); unsigned long gt_uint64hashtable_countsum_get(const GtUint64hashtable *table); unsigned long gt_uint64hashtable_partialsums(GtUint64hashtable *table, GtTimer *timer); unsigned long gt_uint64hashtable_insertionindex(GtUint64hashtable *table, uint64_t key); int gt_uint64hashtable_unit_test(GtError *err); #endif genometools-1.5.1/src/extended/uint64hashtable_primes.h000066400000000000000000001171671211610345200232050ustar00rootroot00000000000000#ifndef UINT64HASHTABLE_PRIMES_H #define UINT64HASHTABLE_PRIMES_H static const unsigned long gt_uint64hashtable_primes[] = { 1048583UL, 5242891UL, 9437203UL, 13631539UL, 17825867UL, 22020181UL, 26214511UL, 30408817UL, 34603141UL, 38797457UL, 42991769UL, 47186099UL, 51380429UL, 55574737UL, 59769067UL, 63963371UL, 68157689UL, 72352001UL, 76546331UL, 80740651UL, 84934973UL, 89129297UL, 93323621UL, 97517939UL, 101712269UL, 105906587UL, 110100919UL, 114295231UL, 118489619UL, 122683927UL, 126878249UL, 131072587UL, 135266891UL, 139461209UL, 143655529UL, 147849847UL, 152044199UL, 156238519UL, 160432823UL, 164627137UL, 168821447UL, 173015753UL, 177210071UL, 181404389UL, 185598701UL, 189793027UL, 193987361UL, 198181693UL, 202376003UL, 206570333UL, 210764669UL, 214958977UL, 219153281UL, 223347601UL, 227541907UL, 231736229UL, 235930579UL, 240124883UL, 244319197UL, 248513501UL, 252707813UL, 256902119UL, 261096449UL, 265290757UL, 269485067UL, 273679381UL, 277873691UL, 282068071UL, 286262387UL, 290456711UL, 294651047UL, 298845353UL, 303039707UL, 307234043UL, 311428391UL, 315622717UL, 319817021UL, 324011357UL, 328205687UL, 332399999UL, 336594331UL, 340788667UL, 344982997UL, 349177319UL, 353371637UL, 357565991UL, 361760327UL, 365954647UL, 370148963UL, 374343287UL, 378537647UL, 382731977UL, 386926327UL, 391120637UL, 395314943UL, 399509267UL, 403703579UL, 407897887UL, 412092209UL, 416286589UL, 420480899UL, 424675219UL, 428869541UL, 433063847UL, 437258167UL, 441452477UL, 445646791UL, 449841109UL, 454035427UL, 458229731UL, 462424063UL, 466618387UL, 470812703UL, 475007009UL, 479201329UL, 483395641UL, 487589981UL, 491784301UL, 495978629UL, 500172949UL, 504367289UL, 508561601UL, 512755913UL, 516950243UL, 521144549UL, 525338867UL, 529533181UL, 533727487UL, 537921847UL, 542116163UL, 546310481UL, 550504807UL, 554699111UL, 558893443UL, 563087773UL, 567282077UL, 571476391UL, 575670701UL, 579865021UL, 584059351UL, 588253663UL, 592447997UL, 596642309UL, 600836617UL, 605030929UL, 609225259UL, 613419563UL, 617613869UL, 621808177UL, 626002483UL, 630196811UL, 634391119UL, 638585429UL, 642779737UL, 646974059UL, 651168373UL, 655362679UL, 659557009UL, 663751367UL, 667945679UL, 672139987UL, 676334299UL, 680528603UL, 684722911UL, 688917223UL, 693111533UL, 697305853UL, 701500193UL, 705694499UL, 709888843UL, 714083177UL, 718277503UL, 722471819UL, 726666131UL, 730860437UL, 735054751UL, 739249067UL, 743443373UL, 747637691UL, 751832063UL, 756026377UL, 760220687UL, 764415059UL, 768609367UL, 772803673UL, 776998037UL, 781192361UL, 785386699UL, 789581017UL, 793775351UL, 797969693UL, 802164017UL, 806358323UL, 810552641UL, 814746983UL, 818941297UL, 823135603UL, 827329907UL, 831524263UL, 835718567UL, 839912881UL, 844107191UL, 848301499UL, 852495863UL, 856690201UL, 860884529UL, 865078853UL, 869273159UL, 873467477UL, 877661843UL, 881856193UL, 886050499UL, 890244833UL, 894439151UL, 898633457UL, 902827771UL, 907022099UL, 911216407UL, 915410711UL, 919605019UL, 923799341UL, 927993653UL, 932187961UL, 936382277UL, 940576591UL, 944770921UL, 948965239UL, 953159551UL, 957353869UL, 961548197UL, 965742527UL, 969936883UL, 974131211UL, 978325529UL, 982519847UL, 986714173UL, 990908509UL, 995102831UL, 999297151UL, 1003491527UL, 1007685841UL, 1011880153UL, 1016074471UL, 1020268801UL, 1024463117UL, 1028657453UL, 1032851801UL, 1037046133UL, 1041240443UL, 1045434751UL, 1049629099UL, 1053823409UL, 1058017721UL, 1062212033UL, 1066406377UL, 1070600723UL, 1074795041UL, 1078989367UL, 1083183683UL, 1087378001UL, 1091572343UL, 1095766649UL, 1099960957UL, 1104155263UL, 1108349581UL, 1112543893UL, 1116738199UL, 1120932511UL, 1125126823UL, 1129321147UL, 1133515483UL, 1137709823UL, 1141904131UL, 1146098491UL, 1150292809UL, 1154487127UL, 1158681439UL, 1162875773UL, 1167070087UL, 1171264399UL, 1175458703UL, 1179653009UL, 1183847317UL, 1188041623UL, 1192235929UL, 1196430241UL, 1200624569UL, 1204818889UL, 1209013199UL, 1213207517UL, 1217401831UL, 1221596221UL, 1225790569UL, 1229984879UL, 1234179203UL, 1238373527UL, 1242567841UL, 1246762151UL, 1250956459UL, 1255150781UL, 1259345089UL, 1263539401UL, 1267733717UL, 1271928071UL, 1276122377UL, 1280316757UL, 1284511073UL, 1288705469UL, 1292899787UL, 1297094111UL, 1301288431UL, 1305482747UL, 1309677067UL, 1313871371UL, 1318065691UL, 1322260001UL, 1326454307UL, 1330648651UL, 1334842961UL, 1339037279UL, 1343231587UL, 1347425909UL, 1351620269UL, 1355814589UL, 1360008913UL, 1364203223UL, 1368397531UL, 1372591873UL, 1376786179UL, 1380980507UL, 1385174827UL, 1389369139UL, 1393563469UL, 1397757797UL, 1401952103UL, 1406146429UL, 1410340733UL, 1414535063UL, 1418729381UL, 1422923687UL, 1427117999UL, 1431312307UL, 1435506661UL, 1439700967UL, 1443895273UL, 1448089603UL, 1452283909UL, 1456478251UL, 1460672567UL, 1464866881UL, 1469061199UL, 1473255503UL, 1477449811UL, 1481644123UL, 1485838429UL, 1490032741UL, 1494227047UL, 1498421357UL, 1502615729UL, 1506810037UL, 1511004367UL, 1515198673UL, 1519392977UL, 1523587291UL, 1527781597UL, 1531975901UL, 1536170213UL, 1540364587UL, 1544558891UL, 1548753223UL, 1552947547UL, 1557141853UL, 1561336199UL, 1565530507UL, 1569724817UL, 1573919147UL, 1578113461UL, 1582307803UL, 1586502107UL, 1590696413UL, 1594890727UL, 1599085069UL, 1603279373UL, 1607473691UL, 1611667999UL, 1615862317UL, 1620056687UL, 1624251023UL, 1628445341UL, 1632639653UL, 1636833973UL, 1641028289UL, 1645222609UL, 1649416943UL, 1653611251UL, 1657805557UL, 1661999881UL, 1666194193UL, 1670388497UL, 1674582853UL, 1678777171UL, 1682971481UL, 1687165787UL, 1691360123UL, 1695554437UL, 1699748779UL, 1703943103UL, 1708137413UL, 1712331739UL, 1716526043UL, 1720720357UL, 1724914669UL, 1729108993UL, 1733303309UL, 1737497669UL, 1741692011UL, 1745886319UL, 1750080677UL, 1754275007UL, 1758469343UL, 1762663691UL, 1766857997UL, 1771052303UL, 1775246633UL, 1779440941UL, 1783635263UL, 1787829611UL, 1792023917UL, 1796218247UL, 1800412589UL, 1804606897UL, 1808801257UL, 1812995567UL, 1817189897UL, 1821384203UL, 1825578527UL, 1829772853UL, 1833967171UL, 1838161511UL, 1842355849UL, 1846550191UL, 1850744507UL, 1854938893UL, 1859133197UL, 1863327503UL, 1867521827UL, 1871716139UL, 1875910453UL, 1880104813UL, 1884299143UL, 1888493447UL, 1892687759UL, 1896882073UL, 1901076389UL, 1905270713UL, 1909465043UL, 1913659361UL, 1917853681UL, 1922047997UL, 1926242309UL, 1930436617UL, 1934630927UL, 1938825241UL, 1943019557UL, 1947213869UL, 1951408253UL, 1955602567UL, 1959796957UL, 1963991269UL, 1968185573UL, 1972379887UL, 1976574221UL, 1980768551UL, 1984962871UL, 1989157201UL, 1993351517UL, 1997545877UL, 2001740197UL, 2005934501UL, 2010128831UL, 2014323137UL, 2018517451UL, 2022711773UL, 2026906099UL, 2031100411UL, 2035294717UL, 2039489021UL, 2043683329UL, 2047877707UL, 2052072013UL, 2056266343UL, 2060460671UL, 2064654997UL, 2068849309UL, 2073043619UL, 2077237927UL, 2081432257UL, 2085626563UL, 2089820893UL, 2094015221UL, 2098209541UL, 2102403917UL, 2106598283UL, 2110792601UL, 2114986961UL, 2119181269UL, 2123375587UL, 2127569921UL, 2131764253UL, 2135958563UL, 2140152887UL, 2144347229UL, 2148541537UL, 2152735847UL, 2156930203UL, 2161124509UL, 2165318851UL, 2169513161UL, 2173707541UL, 2177901857UL, 2182096177UL, 2186290487UL, 2190484817UL, 2194679191UL, 2198873513UL, 2203067821UL, 2207262143UL, 2211456491UL, 2215650797UL, 2219845129UL, 2224039457UL, 2228233771UL, 2232428087UL, 2236622489UL, 2240816843UL, 2245011151UL, 2249205473UL, 2253399787UL, 2257594091UL, 2261788457UL, 2265982777UL, 2270177083UL, 2274371413UL, 2278565797UL, 2282760107UL, 2286954419UL, 2291148733UL, 2295343081UL, 2299537403UL, 2303731711UL, 2307926041UL, 2312120347UL, 2316314717UL, 2320509041UL, 2324703349UL, 2328897691UL, 2333091997UL, 2337286313UL, 2341480633UL, 2345674937UL, 2349869257UL, 2354063561UL, 2358257911UL, 2362452221UL, 2366646533UL, 2370840853UL, 2375035231UL, 2379229553UL, 2383423879UL, 2387618197UL, 2391812503UL, 2396006863UL, 2400201169UL, 2404395473UL, 2408589791UL, 2412784123UL, 2416978441UL, 2421172801UL, 2425367129UL, 2429561471UL, 2433755783UL, 2437950089UL, 2442144427UL, 2446338733UL, 2450533093UL, 2454727397UL, 2458921709UL, 2463116057UL, 2467310387UL, 2471504747UL, 2475699067UL, 2479893371UL, 2484087703UL, 2488282007UL, 2492476319UL, 2496670637UL, 2500864963UL, 2505059311UL, 2509253633UL, 2513447957UL, 2517642263UL, 2521836613UL, 2526030919UL, 2530225223UL, 2534419529UL, 2538613837UL, 2542808141UL, 2547002449UL, 2551196761UL, 2555391071UL, 2559585403UL, 2563779719UL, 2567974027UL, 2572168337UL, 2576362661UL, 2580556997UL, 2584751303UL, 2588945609UL, 2593139917UL, 2597334241UL, 2601528563UL, 2605722907UL, 2609917253UL, 2614111601UL, 2618305967UL, 2622500281UL, 2626694641UL, 2630888963UL, 2635083271UL, 2639277611UL, 2643471947UL, 2647666261UL, 2651860567UL, 2656054883UL, 2660249197UL, 2664443503UL, 2668637831UL, 2672832137UL, 2677026463UL, 2681220811UL, 2685415121UL, 2689609427UL, 2693803741UL, 2697998111UL, 2702192417UL, 2706386729UL, 2710581043UL, 2714775361UL, 2718969667UL, 2723163977UL, 2727358289UL, 2731552609UL, 2735746933UL, 2739941299UL, 2744135623UL, 2748329933UL, 2752524251UL, 2756718577UL, 2760912883UL, 2765107201UL, 2769301511UL, 2773495831UL, 2777690171UL, 2781884503UL, 2786078809UL, 2790273149UL, 2794467527UL, 2798661857UL, 2802856169UL, 2807050487UL, 2811244861UL, 2815439213UL, 2819633533UL, 2823827837UL, 2828022179UL, 2832216487UL, 2836410809UL, 2840605121UL, 2844799429UL, 2848993733UL, 2853188053UL, 2857382357UL, 2861576701UL, 2865771019UL, 2869965331UL, 2874159641UL, 2878353949UL, 2882548267UL, 2886742571UL, 2890936883UL, 2895131191UL, 2899325497UL, 2903519803UL, 2907714109UL, 2911908463UL, 2916102797UL, 2920297117UL, 2924491459UL, 2928685777UL, 2932880087UL, 2937074407UL, 2941268731UL, 2945463041UL, 2949657371UL, 2953851689UL, 2958046001UL, 2962240319UL, 2966434661UL, 2970628979UL, 2974823297UL, 2979017611UL, 2983211927UL, 2987406239UL, 2991600583UL, 2995794887UL, 2999989217UL, 3004183547UL, 3008377877UL, 3012572183UL, 3016766491UL, 3020960807UL, 3025155163UL, 3029349497UL, 3033543803UL, 3037738117UL, 3041932427UL, 3046126757UL, 3050321083UL, 3054515389UL, 3058709707UL, 3062904011UL, 3067098341UL, 3071292661UL, 3075486989UL, 3079681307UL, 3083875651UL, 3088069961UL, 3092264267UL, 3096458579UL, 3100652897UL, 3104847203UL, 3109041511UL, 3113235883UL, 3117430201UL, 3121624531UL, 3125818921UL, 3130013231UL, 3134207561UL, 3138401887UL, 3142596211UL, 3146790527UL, 3150984847UL, 3155179171UL, 3159373489UL, 3163567807UL, 3167762113UL, 3171956423UL, 3176150741UL, 3180345053UL, 3184539377UL, 3188733683UL, 3192927989UL, 3197122303UL, 3201316619UL, 3205510933UL, 3209705273UL, 3213899597UL, 3218093933UL, 3222288269UL, 3226482617UL, 3230676931UL, 3234871249UL, 3239065591UL, 3243259909UL, 3247454219UL, 3251648549UL, 3255842881UL, 3260037191UL, 3264231497UL, 3268425817UL, 3272620129UL, 3276814451UL, 3281008777UL, 3285203087UL, 3289397431UL, 3293591809UL, 3297786113UL, 3301980433UL, 3306174737UL, 3310369063UL, 3314563387UL, 3318757693UL, 3322951999UL, 3327146321UL, 3331340669UL, 3335534981UL, 3339729299UL, 3343923623UL, 3348117953UL, 3352312259UL, 3356506567UL, 3360700891UL, 3364895197UL, 3369089509UL, 3373283827UL, 3377478157UL, 3381672493UL, 3385866821UL, 3390061139UL, 3394255451UL, 3398449793UL, 3402644143UL, 3406838447UL, 3411032759UL, 3415227071UL, 3419421377UL, 3423615721UL, 3427810031UL, 3432004337UL, 3436198651UL, 3440392973UL, 3444587291UL, 3448781641UL, 3452975969UL, 3457170329UL, 3461364667UL, 3465558973UL, 3469753277UL, 3473947583UL, 3478142021UL, 3482336357UL, 3486530699UL, 3490725031UL, 3494919377UL, 3499113773UL, 3503308097UL, 3507502421UL, 3511696789UL, 3515891107UL, 3520085417UL, 3524279729UL, 3528474041UL, 3532668407UL, 3536862731UL, 3541057087UL, 3545251403UL, 3549445709UL, 3553640021UL, 3557834339UL, 3562028677UL, 3566222983UL, 3570417307UL, 3574611613UL, 3578805953UL, 3583000313UL, 3587194649UL, 3591388961UL, 3595583287UL, 3599777593UL, 3603971923UL, 3608166227UL, 3612360547UL, 3616554853UL, 3620749163UL, 3624943489UL, 3629137801UL, 3633332111UL, 3637526443UL, 3641720777UL, 3645915131UL, 3650109473UL, 3654303791UL, 3658498111UL, 3662692421UL, 3666886753UL, 3671081111UL, 3675275423UL, 3679469737UL, 3683664041UL, 3687858373UL, 3692052709UL, 3696247013UL, 3700441331UL, 3704635643UL, 3708829991UL, 3713024303UL, 3717218639UL, 3721413013UL, 3725607317UL, 3729801671UL, 3733996009UL, 3738190331UL, 3742384661UL, 3746578993UL, 3750773317UL, 3754967641UL, 3759161947UL, 3763356281UL, 3767550587UL, 3771744913UL, 3775939291UL, 3780133597UL, 3784327901UL, 3788522251UL, 3792716567UL, 3796910893UL, 3801105199UL, 3805299517UL, 3809493823UL, 3813688127UL, 3817882483UL, 3822076793UL, 3826271143UL, 3830465459UL, 3834659783UL, 3838854113UL, 3843048421UL, 3847242727UL, 3851437061UL, 3855631387UL, 3859825703UL, 3864020009UL, 3868214327UL, 3872408633UL, 3876602957UL, 3880797301UL, 3884991619UL, 3889185947UL, 3893380279UL, 3897574601UL, 3901768909UL, 3905963233UL, 3910157549UL, 3914351863UL, 3918546167UL, 3922740473UL, 3926934829UL, 3931129141UL, 3935323451UL, 3939517787UL, 3943712107UL, 3947906419UL, 3952100729UL, 3956295071UL, 3960489397UL, 3964683703UL, 3968878007UL, 3973072339UL, 3977266703UL, 3981461009UL, 3985655357UL, 3989849707UL, 3994044031UL, 3998238353UL, 4002432659UL, 4006626977UL, 4010821289UL, 4015015603UL, 4019209913UL, 4023404239UL, 4027598543UL, 4031792857UL, 4035987161UL, 4040181469UL, 4044375779UL, 4048570093UL, 4052764399UL, 4056958769UL, 4061153093UL, 4065347399UL, 4069541717UL, 4073736047UL, 4077930361UL, 4082124689UL, 4086319007UL, 4090513321UL, 4094707681UL, 4098902009UL, 4103096317UL, 4107290647UL, 4111484959UL, 4115679263UL, 4119873577UL, 4124067907UL, 4128262247UL, 4132456561UL, 4136650871UL, 4140845179UL, 4145039537UL, 4149233861UL, 4153428199UL, 4157622517UL, 4161816821UL, 4166011133UL, 4170205441UL, 4174399811UL, 4178594141UL, 4182788501UL, 4186982837UL, 4191177173UL, 4195371491UL, 4199565809UL, 4203760123UL, 4207954447UL, 4212148751UL, 4216343057UL, 4220537381UL, 4224731711UL, 4228926019UL, 4233120361UL, 4237314667UL, 4241508977UL, 4245703303UL, 4249897607UL, 4254091913UL, 4258286239UL, 4262480557UL, 4266674891UL, 4270869199UL, 4275063511UL, 4279257817UL, 4283452139UL, 4287646481UL, 4291840799UL, #if defined (_LP64) || defined (LP64) 4294967311UL, 4362076231UL, 4429185097UL, 4496293981UL, 4563402853UL, 4630511719UL, 4697620589UL, 4764729461UL, 4831838327UL, 4898947201UL, 4966056101UL, 5033165029UL, 5100273901UL, 5167382819UL, 5234491687UL, 5301600553UL, 5368709441UL, 5435818309UL, 5502927173UL, 5570036039UL, 5637144913UL, 5704253833UL, 5771362711UL, 5838471607UL, 5905580489UL, 5972689363UL, 6039798287UL, 6106907179UL, 6174016049UL, 6241124927UL, 6308233793UL, 6375342667UL, 6442451567UL, 6509560433UL, 6576669349UL, 6643778221UL, 6710887109UL, 6777995977UL, 6845104841UL, 6912213709UL, 6979322629UL, 7046431519UL, 7113540433UL, 7180649299UL, 7247758169UL, 7314867061UL, 7381975933UL, 7449084823UL, 7516193689UL, 7583302567UL, 7650411473UL, 7717520353UL, 7784629217UL, 7851738127UL, 7918847003UL, 7985955869UL, 8053064743UL, 8120173627UL, 8187282491UL, 8254391371UL, 8321500273UL, 8388609139UL, 8455718017UL, 8522826883UL, 8589935773UL, 8657044661UL, 8724153541UL, 8791262429UL, 8858371297UL, 8925480173UL, 8992589041UL, 9059697917UL, 9126806789UL, 9193915663UL, 9261024551UL, 9328133449UL, 9395242313UL, 9462351193UL, 9529460069UL, 9596568941UL, 9663677813UL, 9730786727UL, 9797895631UL, 9865004507UL, 9932113397UL, 9999222281UL, 10066331237UL, 10133440129UL, 10200548993UL, 10267657891UL, 10334766773UL, 10401875639UL, 10468984541UL, 10536093419UL, 10603202297UL, 10670311177UL, 10737420061UL, 10804528939UL, 10871637823UL, 10938746717UL, 11005855639UL, 11072964517UL, 11140073381UL, 11207182409UL, 11274291311UL, 11341400209UL, 11408509081UL, 11475617977UL, 11542726849UL, 11609835719UL, 11676944597UL, 11744053471UL, 11811162343UL, 11878271213UL, 11945380099UL, 12012488963UL, 12079597837UL, 12146706701UL, 12213815573UL, 12280924441UL, 12348033307UL, 12415142189UL, 12482251073UL, 12549359939UL, 12616468807UL, 12683577703UL, 12750686581UL, 12817795451UL, 12884904343UL, 12952013209UL, 13019122117UL, 13086230987UL, 13153339873UL, 13220448739UL, 13287557639UL, 13354666529UL, 13421775449UL, 13488884323UL, 13555993249UL, 13623102137UL, 13690211021UL, 13757319907UL, 13824428771UL, 13891537663UL, 13958646539UL, 14025755423UL, 14092864301UL, 14159973181UL, 14227082069UL, 14294190961UL, 14361299851UL, 14428408721UL, 14495517599UL, 14562626501UL, 14629735391UL, 14696844269UL, 14763953137UL, 14831062003UL, 14898170869UL, 14965279783UL, 15032388647UL, 15099497519UL, 15166606421UL, 15233715331UL, 15300824207UL, 15367933093UL, 15435041957UL, 15502150823UL, 15569259709UL, 15636368591UL, 15703477457UL, 15770586329UL, 15837695243UL, 15904804159UL, 15971913029UL, 16039021903UL, 16106130841UL, 16173239723UL, 16240348589UL, 16307457469UL, 16374566333UL, 16441675207UL, 16508784091UL, 16575892987UL, 16643001913UL, 16710110789UL, 16777219661UL, 16844328583UL, 16911437489UL, 16978546381UL, 17045655301UL, 17112764173UL, 17179873063UL, 17246981951UL, 17314090823UL, 17381199749UL, 17448308621UL, 17515417489UL, 17582526373UL, 17649635239UL, 17716744103UL, 17783853007UL, 17850961901UL, 17918070767UL, 17985179633UL, 18052288517UL, 18119397383UL, 18186506281UL, 18253615151UL, 18320724029UL, 18387832913UL, 18454941823UL, 18522050731UL, 18589159601UL, 18656268467UL, 18723377371UL, 18790486237UL, 18857595137UL, 18924704039UL, 18991812913UL, 19058921797UL, 19126030663UL, 19193139529UL, 19260248401UL, 19327357267UL, 19394466131UL, 19461575039UL, 19528683907UL, 19595792789UL, 19662901693UL, 19730010563UL, 19797119431UL, 19864228297UL, 19931337187UL, 19998446071UL, 20065554953UL, 20132663819UL, 20199772693UL, 20266881577UL, 20333990459UL, 20401099333UL, 20468208239UL, 20535317167UL, 20602426063UL, 20669534927UL, 20736643799UL, 20803752677UL, 20870861591UL, 20937970477UL, 21005079341UL, 21072188209UL, 21139297087UL, 21206405981UL, 21273514853UL, 21340623739UL, 21407732627UL, 21474841499UL, 21541950431UL, 21609059317UL, 21676168187UL, 21743277067UL, 21810385951UL, 21877494841UL, 21944603741UL, 22011712633UL, 22078821509UL, 22145930419UL, 22213039369UL, 22280148259UL, 22347257161UL, 22414366069UL, 22481474933UL, 22548583823UL, 22615692691UL, 22682801563UL, 22749910427UL, 22817019409UL, 22884128329UL, 22951237213UL, 23018346077UL, 23085454969UL, 23152563893UL, 23219672767UL, 23286781681UL, 23353890613UL, 23420999479UL, 23488108373UL, 23555217353UL, 23622326239UL, 23689435109UL, 23756544041UL, 23823652921UL, 23890761821UL, 23957870689UL, 24024979631UL, 24092088523UL, 24159197393UL, 24226306277UL, 24293415203UL, 24360524107UL, 24427633003UL, 24494741881UL, 24561850769UL, 24628959647UL, 24696068533UL, 24763177403UL, 24830286281UL, 24897395183UL, 24964504051UL, 25031612929UL, 25098721799UL, 25165830667UL, 25232939539UL, 25300048447UL, 25367157323UL, 25434266233UL, 25501375099UL, 25568483981UL, 25635592847UL, 25702701743UL, 25769810623UL, 25836919501UL, 25904028379UL, 25971137243UL, 26038246109UL, 26105354981UL, 26172463901UL, 26239572767UL, 26306681663UL, 26373790561UL, 26440899451UL, 26508008339UL, 26575117223UL, 26642226089UL, 26709334969UL, 26776443943UL, 26843552819UL, 26910661703UL, 26977770571UL, 27044879447UL, 27111988363UL, 27179097241UL, 27246206107UL, 27313314971UL, 27380423843UL, 27447532709UL, 27514641577UL, 27581750473UL, 27648859351UL, 27715968263UL, 27783077129UL, 27850186043UL, 27917294921UL, 27984403877UL, 28051512757UL, 28118621693UL, 28185730583UL, 28252839569UL, 28319948441UL, 28387057313UL, 28454166193UL, 28521275059UL, 28588383949UL, 28655492813UL, 28722601727UL, 28789710617UL, 28856819483UL, 28923928349UL, 28991037221UL, 29058146099UL, 29125254979UL, 29192363881UL, 29259472751UL, 29326581631UL, 29393690507UL, 29460799387UL, 29527908259UL, 29595017129UL, 29662126027UL, 29729234921UL, 29796343831UL, 29863452709UL, 29930561579UL, 29997670463UL, 30064779343UL, 30131888233UL, 30198997097UL, 30266105977UL, 30333214921UL, 30400323799UL, 30467432689UL, 30534541553UL, 30601650437UL, 30668759357UL, 30735868249UL, 30802977119UL, 30870085993UL, 30937194877UL, 31004303749UL, 31071412637UL, 31138521527UL, 31205630411UL, 31272739403UL, 31339848269UL, 31406957137UL, 31474066061UL, 31541174947UL, 31608283813UL, 31675392703UL, 31742501579UL, 31809610471UL, 31876719389UL, 31943828311UL, 32010937183UL, 32078046059UL, 32145154969UL, 32212263857UL, 32279372729UL, 32346481597UL, 32413590479UL, 32480699357UL, 32547808229UL, 32614917109UL, 32682026033UL, 32749134923UL, 32816243797UL, 32883352669UL, 32950461559UL, 33017570423UL, 33084679297UL, 33151788181UL, 33218897053UL, 33286005919UL, 33353114789UL, 33420223691UL, 33487332689UL, 33554441573UL, 33621550477UL, 33688659349UL, 33755768243UL, 33822877133UL, 33889985999UL, 33957094909UL, 34024203809UL, 34091312707UL, 34158421601UL, 34225530473UL, 34292639369UL, 34359748249UL, 34426857119UL, 34493966021UL, 34561074923UL, 34628183789UL, 34695292657UL, 34762401523UL, 34829510423UL, 34896619333UL, 34963728197UL, 35030837077UL, 35097945941UL, 35165054809UL, 35232163691UL, 35299272557UL, 35366381431UL, 35433490321UL, 35500599247UL, 35567708117UL, 35634816983UL, 35701925849UL, 35769034747UL, 35836143613UL, 35903252479UL, 35970361363UL, 36037470233UL, 36104579183UL, 36171688087UL, 36238796969UL, 36305905841UL, 36373014737UL, 36440123641UL, 36507232507UL, 36574341371UL, 36641450249UL, 36708559117UL, 36775668023UL, 36842776903UL, 36909885769UL, 36976994641UL, 37044103517UL, 37111212473UL, 37178321351UL, 37245430223UL, 37312539119UL, 37379647993UL, 37446756887UL, 37513865761UL, 37580974631UL, 37648083503UL, 37715192401UL, 37782301279UL, 37849410149UL, 37916519021UL, 37983627919UL, 38050736891UL, 38117845769UL, 38184954649UL, 38252063533UL, 38319172453UL, 38386281337UL, 38453390201UL, 38520499099UL, 38587607963UL, 38654716831UL, 38721825721UL, 38788934593UL, 38856043477UL, 38923152397UL, 38990261263UL, 39057370133UL, 39124478999UL, 39191587873UL, 39258696823UL, 39325805699UL, 39392914571UL, 39460023469UL, 39527132341UL, 39594241217UL, 39661350103UL, 39728459003UL, 39795567901UL, 39862676771UL, 39929785661UL, 39996894527UL, 40064003423UL, 40131112337UL, 40198221221UL, 40265330107UL, 40332438977UL, 40399547849UL, 40466656739UL, 40533765617UL, 40600874497UL, 40667983387UL, 40735092301UL, 40802201183UL, 40869310049UL, 40936418917UL, 41003527783UL, 41070636689UL, 41137745567UL, 41204854451UL, 41271963331UL, 41339072209UL, 41406181081UL, 41473289959UL, 41540398849UL, 41607507749UL, 41674616651UL, 41741725549UL, 41808834427UL, 41875943303UL, 41943052181UL, 42010161091UL, 42077269963UL, 42144378833UL, 42211487711UL, 42278596621UL, 42345705527UL, 42412814443UL, 42479923313UL, 42547032197UL, 42614141099UL, 42681250021UL, 42748358957UL, 42815467837UL, 42882576701UL, 42949685567UL, 43016794477UL, 43083903341UL, 43151012213UL, 43218121081UL, 43285229957UL, 43352338837UL, 43419447763UL, 43486556627UL, 43553665523UL, 43620774403UL, 43687883297UL, 43754992199UL, 43822101073UL, 43889209939UL, 43956318803UL, 44023427687UL, 44090536577UL, 44157645481UL, 44224754351UL, 44291863237UL, 44358972121UL, 44426081003UL, 44493189877UL, 44560298747UL, 44627407639UL, 44694516521UL, 44761625429UL, 44828734337UL, 44895843233UL, 44962952131UL, 45030061031UL, 45097169977UL, 45164278847UL, 45231387737UL, 45298496627UL, 45365605501UL, 45432714373UL, 45499823273UL, 45566932157UL, 45634041029UL, 45701149943UL, 45768258817UL, 45835367723UL, 45902476601UL, 45969585479UL, 46036694419UL, 46103803283UL, 46170912173UL, 46238021057UL, 46305129947UL, 46372238849UL, 46439347723UL, 46506456631UL, 46573565503UL, 46640674391UL, 46707783319UL, 46774892183UL, 46842001057UL, 46909109921UL, 46976218819UL, 47043327689UL, 47110436557UL, 47177545439UL, 47244654311UL, 47311763197UL, 47378872091UL, 47445980977UL, 47513089853UL, 47580198727UL, 47647307639UL, 47714416507UL, 47781525377UL, 47848634279UL, 47915743201UL, 47982852097UL, 48049960967UL, 48117069851UL, 48184178753UL, 48251287631UL, 48318396569UL, 48385505437UL, 48452614307UL, 48519723229UL, 48586832123UL, 48653941031UL, 48721049977UL, 48788158841UL, 48855267719UL, 48922376623UL, 48989485537UL, 49056594401UL, 49123703269UL, 49190812201UL, 49257921091UL, 49325029997UL, 49392138941UL, 49459247807UL, 49526356681UL, 49593465557UL, 49660574461UL, 49727683339UL, 49794792277UL, 49861901143UL, 49929010007UL, 49996118881UL, 50063227757UL, 50130336679UL, 50197445569UL, 50264554433UL, 50331663359UL, 50398772231UL, 50465881099UL, 50532989989UL, 50600098889UL, 50667207761UL, 50734316653UL, 50801425517UL, 50868534403UL, 50935643359UL, 51002752223UL, 51069861107UL, 51136969973UL, 51204078847UL, 51271187713UL, 51338296579UL, 51405405473UL, 51472514351UL, 51539623237UL, 51606732109UL, 51673840973UL, 51740949859UL, 51808058737UL, 51875167613UL, 51942276497UL, 52009385369UL, 52076494237UL, 52143603121UL, 52210712023UL, 52277820901UL, 52344929797UL, 52412038661UL, 52479147557UL, 52546256467UL, 52613365373UL, 52680474257UL, 52747583131UL, 52814692009UL, 52881800879UL, 52948909751UL, 53016018623UL, 53083127519UL, 53150236427UL, 53217345371UL, 53284454273UL, 53351563141UL, 53418672067UL, 53485780961UL, 53552889853UL, 53619998771UL, 53687107657UL, 53754216521UL, 53821325399UL, 53888434273UL, 53955543167UL, 54022652069UL, 54089760941UL, 54156869821UL, 54223978687UL, 54291087583UL, 54358196483UL, 54425305351UL, 54492414233UL, 54559523101UL, 54626632007UL, 54693740891UL, 54760849777UL, 54827958707UL, 54895067581UL, 54962176447UL, 55029285317UL, 55096394183UL, 55163503051UL, 55230611923UL, 55297720789UL, 55364829671UL, 55431938561UL, 55499047427UL, 55566156301UL, 55633265173UL, 55700374043UL, 55767482909UL, 55834591783UL, 55901700653UL, 55968809549UL, 56035918427UL, 56103027301UL, 56170136167UL, 56237245067UL, 56304353933UL, 56371462799UL, 56438571671UL, 56505680557UL, 56572789457UL, 56639898323UL, 56707007191UL, 56774116081UL, 56841224963UL, 56908333837UL, 56975442743UL, 57042551611UL, 57109660511UL, 57176769413UL, 57243878291UL, 57310987199UL, 57378096071UL, 57445204939UL, 57512313821UL, 57579422701UL, 57646531573UL, 57713640449UL, 57780749317UL, 57847858217UL, 57914967109UL, 57982076029UL, 58049184917UL, 58116293797UL, 58183402661UL, 58250511533UL, 58317620419UL, 58384729303UL, 58451838197UL, 58518947093UL, 58586055961UL, 58653164831UL, 58720273709UL, 58787382587UL, 58854491461UL, 58921600327UL, 58988709223UL, 59055818089UL, 59122926953UL, 59190035819UL, 59257144697UL, 59324253587UL, 59391362453UL, 59458471337UL, 59525580209UL, 59592689087UL, 59659797961UL, 59726906843UL, 59794015717UL, 59861124581UL, 59928233467UL, 59995342333UL, 60062451199UL, 60129560069UL, 60196668943UL, 60263777807UL, 60330886673UL, 60397995571UL, 60465104449UL, 60532213319UL, 60599322239UL, 60666431123UL, 60733540019UL, 60800648927UL, 60867757843UL, 60934866761UL, 61001975627UL, 61069084523UL, 61136193409UL, 61203302323UL, 61270411217UL, 61337520121UL, 61404628991UL, 61471737863UL, 61538846741UL, 61605955627UL, 61673064521UL, 61740173389UL, 61807282297UL, 61874391199UL, 61941500081UL, 62008608947UL, 62075717857UL, 62142826769UL, 62209935659UL, 62277044569UL, 62344153439UL, 62411262323UL, 62478371203UL, 62545480133UL, 62612589001UL, 62679697931UL, 62746806847UL, 62813915719UL, 62881024603UL, 62948133473UL, 63015242341UL, 63082351223UL, 63149460097UL, 63216568963UL, 63283677839UL, 63350786717UL, 63417895627UL, 63485004509UL, 63552113381UL, 63619222291UL, 63686331157UL, 63753440029UL, 63820548917UL, 63887657831UL, 63954766709UL, 64021875629UL, 64088984503UL, 64156093373UL, 64223202269UL, 64290311143UL, 64357420021UL, 64424528899UL, 64491637781UL, 64558746653UL, 64625855519UL, 64692964439UL, 64760073307UL, 64827182179UL, 64894291051UL, 64961399929UL, 65028508793UL, 65095617689UL, 65162726557UL, 65229835421UL, 65296944313UL, 65364053189UL, 65431162081UL, 65498270993UL, 65565379871UL, 65632488749UL, 65699597627UL, 65766706531UL, 65833815413UL, 65900924293UL, 65968033169UL, 66035142037UL, 66102250909UL, 66169359863UL, 66236468731UL, 66303577597UL, 66370686517UL, 66437795443UL, 66504904343UL, 66572013229UL, 66639122113UL, 66706231043UL, 66773339921UL, 66840448837UL, 66907557709UL, 66974666579UL, 67041775483UL, 67108884397UL, 67175993279UL, 67243102159UL, 67310211047UL, 67377319949UL, 67444428817UL, 67511537689UL, 67578646573UL, 67645755439UL, 67712864321UL, 67779973213UL, 67847082097UL, 67914190961UL, 67981299863UL, 68048408749UL, 68115517663UL, 68182626539UL, 68249735431UL, 68316844319UL, 68383953221UL, 68451062117UL, 68518171003UL, 68585279923UL, 68652388801UL, 68719476767UL, 69793218611UL, 70866960449UL, 71940702293UL, 73014444143UL, 74088185989UL, 75161927837UL, 76235669701UL, 77309411527UL, 78383153363UL, 79456895209UL, 80530637063UL, 81604378897UL, 82678120729UL, 83751862577UL, 84825604427UL, 85899346319UL, 86973088171UL, 88046830021UL, 89120571871UL, 90194313749UL, 91268055577UL, 92341797407UL, 93415539241UL, 94489281077UL, 95563022903UL, 96636764771UL, 97710506627UL, 98784248467UL, 99857990339UL, 100931732171UL, 102005474003UL, 103079215843UL, 104152957669UL, 105226699531UL, 106300441409UL, 107374183289UL, 108447925129UL, 109521666953UL, 110595408821UL, 111669150709UL, 112742892533UL, 113816634377UL, 114890376203UL, 115964118073UL, 117037859899UL, 118111601789UL, 119185343617UL, 120259085449UL, 121332827279UL, 122406569203UL, 123480311033UL, 124554052877UL, 125627794739UL, 126701536573UL, 127775278457UL, 128849020283UL, 129922762127UL, 130996503977UL, 132070245809UL, 133143987637UL, 134217729491UL, 135291471319UL, 136365213143UL, 137438954977UL, 138512696807UL, 139586438683UL, 140660180519UL, 141733922381UL, 142807664221UL, 143881406069UL, 144955147921UL, 146028889759UL, 147102631591UL, 148176373493UL, 149250115331UL, 150323857163UL, 151397598997UL, 152471340823UL, 153545082659UL, 154618824509UL, 155692566353UL, 156766308191UL, 157840050023UL, 158913791873UL, 159987533731UL, 161061275561UL, 162135017477UL, 163208759321UL, 164282501147UL, 165356242993UL, 166429984817UL, 167503726661UL, 168577468487UL, 169651210319UL, 170724952157UL, 171798694007UL, 172872435839UL, 173946177679UL, 175019919539UL, 176093661383UL, 177167403233UL, 178241145059UL, 179314886911UL, 180388628767UL, 181462370603UL, 182536112459UL, 183609854287UL, 184683596117UL, 185757338009UL, 186831079847UL, 187904821697UL, 188978563523UL, 190052305361UL, 191126047199UL, 192199789043UL, 193273530869UL, 194347272719UL, 195421014589UL, 196494756421UL, 197568498251UL, 198642240091UL, 199715981957UL, 200789723803UL, 201863465633UL, 202937207471UL, 204010949297UL, 205084691131UL, 206158432957UL, 207232174789UL, 208305916619UL, 209379658459UL, 210453400291UL, 211527142181UL, 212600884007UL, 213674625833UL, 214748367677UL, 215822109539UL, 216895851373UL, 217969593203UL, 219043335059UL, 220117076891UL, 221190818729UL, 222264560561UL, 223338302423UL, 224412044261UL, 225485786093UL, 226559527927UL, 227633269751UL, 228707011579UL, 229780753409UL, 230854495259UL, 231928237087UL, 233001978917UL, 234075720751UL, 235149462641UL, 236223204499UL, 237296946329UL, 238370688163UL, 239444430011UL, 240518171857UL, 241591913687UL, 242665655513UL, 243739397357UL, 244813139183UL, 245886881081UL, 246960622919UL, 248034364751UL, 249108106627UL, 250181848453UL, 251255590337UL, 252329332183UL, 253403074037UL, 254476815899UL, 255550557727UL, 256624299553UL, 257698041413UL, 258771783299UL, 259845525131UL, 260919266969UL, 261993008831UL, 263066750657UL, 264140492491UL, 265214234359UL, 266287976197UL, 267361718027UL, 268435459883UL, 269509201813UL, 270582943663UL, 271656685511UL, 272730427357UL, 273804169181UL, 274877911081UL, 275951652937UL, 277025394781UL, 278099136643UL, 279172878473UL, 280246620301UL, 281320362137UL, 282394103987UL, 283467845819UL, 284541587647UL, 285615329471UL, 286689071297UL, 287762813131UL, 288836554957UL, 289910296811UL, 290984038663UL, 292057780513UL, 293131522381UL, 294205264207UL, 295279006067UL, 296352747947UL, 297426489809UL, 298500231647UL, 299573973509UL, 300647715341UL, 301721457179UL, 302795199013UL, 303868940839UL, 304942682683UL, 306016424513UL, 307090166389UL, 308163908219UL, 309237650063UL, 310311391889UL, 311385133753UL, 312458875583UL, 313532617421UL, 314606359247UL, 315680101081UL, 316753842941UL, 317827584769UL, 318901326607UL, 319975068461UL, 321048810343UL, 322122552179UL, 323196294017UL, 324270035879UL, 325343777711UL, 326417519543UL, 327491261389UL, 328565003219UL, 329638745063UL, 330712486913UL, 331786228751UL, 332859970579UL, 333933712433UL, 335007454321UL, 336081196147UL, 337154937989UL, 338228679821UL, 339302421671UL, 340376163497UL, 341449905361UL, 342523647199UL, 343597389049UL, 344671130917UL, 345744872749UL, 346818614579UL, 347892356407UL, 348966098279UL, 350039840141UL, 351113581969UL, 352187323799UL, 353261065639UL, 354334807471UL, 355408549387UL, 356482291213UL, 357556033057UL, 358629774901UL, 359703516763UL, 360777258599UL, 361851000461UL, 362924742287UL, 363998484119UL, 365072225983UL, 366145967821UL, 367219709683UL, 368293451567UL, 369367193441UL, 370440935279UL, 371514677119UL, 372588419003UL, 373662160831UL, 374735902657UL, 375809644513UL, 376883386349UL, 377957128207UL, 379030870037UL, 380104611877UL, 381178353701UL, 382252095527UL, 383325837371UL, 384399579211UL, 385473321041UL, 386547062893UL, 387620804759UL, 388694546593UL, 389768288423UL, 390842030261UL, 391915772093UL, 392989513957UL, 394063255793UL, 395136997621UL, 396210739469UL, 397284481313UL, 398358223163UL, 399431964989UL, 400505706817UL, 401579448649UL, 402653190517UL, 403726932373UL, 404800674203UL, 405874416029UL, 406948157879UL, 408021899711UL, 409095641587UL, 410169383411UL, 411243125239UL, 412316867063UL, 413390609003UL, 414464350837UL, 415538092687UL, 416611834531UL, 417685576381UL, 418759318249UL, 419833060099UL, 420906801941UL, 421980543779UL, 423054285631UL, 424128027493UL, 425201769337UL, 426275511187UL, 427349253043UL, 428422994869UL, 429496736717UL, 430570478579UL, 431644220507UL, 432717962351UL, 433791704179UL, 434865446017UL, 435939187921UL, 437012929751UL, 438086671591UL, 439160413493UL, 440234155321UL, 441307897157UL, 442381638989UL, 443455380833UL, 444529122677UL, 445602864503UL, 446676606359UL, 447750348193UL, 448824090019UL, 449897831863UL, 450971573699UL, 452045315537UL, 453119057387UL, 454192799243UL, 455266541069UL, 456340282907UL, 457414024843UL, 458487766669UL, 459561508537UL, 460635250399UL, 461708992243UL, 462782734081UL, 463856475923UL, 464930217749UL, 466003959581UL, 467077701469UL, 468151443301UL, 469225185133UL, 470298927001UL, 471372668911UL, 472446410759UL, 473520152603UL, 474593894441UL, 475667636267UL, 476741378129UL, 477815120023UL, 478888861931UL, 479962603789UL, 481036345631UL, 482110087469UL, 483183829307UL, 484257571219UL, 485331313057UL, 486405054923UL, 487478796767UL, 488552538599UL, 489626280439UL, 490700022301UL, 491773764127UL, 492847505993UL, 493921247839UL, 494994989683UL, 496068731549UL, 497142473389UL, 498216215219UL, 499289957083UL, 500363698927UL, 501437440771UL, 502511182631UL, 503584924457UL, 504658666297UL, 505732408147UL, 506806149991UL, 507879891847UL, 508953633679UL, 510027375511UL, 511101117343UL, 512174859169UL, 513248601023UL, 514322342879UL, 515396084717UL, 516469826549UL, 517543568393UL, 518617310293UL, 519691052119UL, 520764793999UL, 521838535831UL, 522912277661UL, 523986019489UL, 525059761361UL, 526133503241UL, 527207245067UL, 528280986899UL, 529354728809UL, 530428470641UL, 531502212469UL, 532575954311UL, 533649696187UL, 534723438071UL, 535797179921UL, 536870921753UL, 537944663593UL, 539018405423UL, 540092147281UL, 541165889129UL, 542239630991UL, 543313372817UL, 544387114703UL, 545460856607UL, 546534598483UL, 547608340319UL, 548682082147UL #endif }; #endif genometools-1.5.1/src/extended/union_find.c000066400000000000000000000071301211610345200207300ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/ensure.h" #include "core/ma.h" #include "extended/union_find.h" #define UNION_FIND_TEST_SIZE 1024 typedef struct { unsigned long parent, rank; } GtUnionFindElement; struct GtUnionFind { GtUnionFindElement *elems; unsigned long num_of_elems; }; GtUnionFind* gt_union_find_new(unsigned long num_of_elems) { GtUnionFind *uf; unsigned long i; gt_assert(num_of_elems); uf = gt_malloc(sizeof *uf); uf->elems = gt_calloc(sizeof (GtUnionFindElement), num_of_elems); for (i = 0; i < num_of_elems; i++) uf->elems[i].parent = i; uf->num_of_elems = num_of_elems; return uf; } void gt_union_find_delete(GtUnionFind *uf) { if (!uf) return; gt_free(uf->elems); gt_free(uf); } unsigned long gt_union_find_find(GtUnionFind *uf, unsigned long elem) { gt_assert(uf && elem < uf->num_of_elems); if (elem != uf->elems[elem].parent) /* path compression */ uf->elems[elem].parent = gt_union_find_find(uf, uf->elems[elem].parent); return uf->elems[elem].parent; } void gt_union_find_union(GtUnionFind *uf, unsigned long elem_a, unsigned long elem_b) { unsigned long x, y; gt_assert(uf && elem_a < uf->num_of_elems && elem_b < uf->num_of_elems); x = gt_union_find_find(uf, elem_a); y = gt_union_find_find(uf, elem_b); uf->elems[y].parent = x; /* union-by-rank heuristic if (uf->elems[x].rank > uf->elems[y].rank) uf->elems[y].parent = x; else { uf->elems[x].parent = y; if (uf->elems[x].rank == uf->elems[y].rank) uf->elems[y].rank++; } */ } int gt_union_find_unit_test(GtError *err) { unsigned long i; GtUnionFind *uf; int had_err = 0; gt_error_check(err); /* one element */ uf = gt_union_find_new(1); gt_ensure(had_err, gt_union_find_find(uf, 0) == 0); gt_union_find_delete(uf); /* two elements */ if (!had_err) { uf = gt_union_find_new(2); gt_ensure(had_err, gt_union_find_find(uf, 0) != gt_union_find_find(uf, 1)); gt_union_find_union(uf, 0, 1); gt_ensure(had_err, gt_union_find_find(uf, 0) == gt_union_find_find(uf, 1)); gt_union_find_delete(uf); } /* many elements */ if (!had_err) { uf = gt_union_find_new(UNION_FIND_TEST_SIZE); for (i = 1; !had_err && i < UNION_FIND_TEST_SIZE; i++) gt_ensure(had_err, gt_union_find_find(uf, 0) != gt_union_find_find(uf, i)); for (i = 1; !had_err && i < UNION_FIND_TEST_SIZE; i++) gt_union_find_union(uf, 0, i); for (i = 1; !had_err && i < UNION_FIND_TEST_SIZE; i++) gt_ensure(had_err, gt_union_find_find(uf, 0) == gt_union_find_find(uf, i)); gt_union_find_delete(uf); } return had_err; } genometools-1.5.1/src/extended/union_find.h000066400000000000000000000036751211610345200207470ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef UNION_FIND_H #define UNION_FIND_H #include "core/error.h" /* This class implements the union-find data structure (with union-by-rank heuristic and path compression). For a description see for example page 446 to page 449 of the book T.H. Cormen, C.E. Leiserson and R.L. Rivest. Introduction to Algorithms. MIT Press: Cambridge, MA, 1990. */ typedef struct GtUnionFind GtUnionFind; /* Create a new union-find data structures representing many elements (numbered from 0 up to - 1) contained in disjoined sets. */ GtUnionFind* gt_union_find_new(unsigned long num_of_elems); /* Delete the given union-find data structure. */ void gt_union_find_delete(GtUnionFind*); /* Find the representative set for the given . */ unsigned long gt_union_find_find(GtUnionFind*, unsigned long elem); /* Union the set containing with the set containing . */ void gt_union_find_union(GtUnionFind*, unsigned long elem_a, unsigned long elem_b); int gt_union_find_unit_test(GtError*); #endif genometools-1.5.1/src/extended/uniq_stream.c000066400000000000000000000126121211610345200211300ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "core/undef_api.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "extended/node_stream_api.h" #include "extended/uniq_stream.h" struct GtUniqStream{ const GtNodeStream parent_instance; GtNodeStream *in_stream; GtGenomeNode *first_node, *second_node; }; #define uniq_stream_cast(GS)\ gt_node_stream_cast(gt_uniq_stream_class(), GS) static bool nodes_are_equal_feature_trees(GtGenomeNode *first_node, GtGenomeNode *second_node) { bool equal = false; GtFeatureNodeIterator *fni_a, *fni_b; GtFeatureNode *fn_a, *fn_b; fn_a = gt_feature_node_try_cast(first_node); fn_b = gt_feature_node_try_cast(second_node); if (fn_a && fn_b) { fni_a = gt_feature_node_iterator_new((GtFeatureNode*) first_node); fni_b = gt_feature_node_iterator_new((GtFeatureNode*) second_node); for (fn_a = gt_feature_node_iterator_next(fni_a), fn_b = gt_feature_node_iterator_next(fni_b); fn_a && fn_b; fn_a = gt_feature_node_iterator_next(fni_a), fn_b = gt_feature_node_iterator_next(fni_b)) { if (!fn_b || !gt_feature_node_is_similar(fn_a, fn_b)) break; } fn_b = (GtFeatureNode*) gt_feature_node_iterator_next(fni_b); if (!fn_a && !fn_b) equal = true; gt_feature_node_iterator_delete(fni_a); gt_feature_node_iterator_delete(fni_b); return equal; } return false; } static bool uniq(GtGenomeNode **first_node, GtGenomeNode **second_node) { bool first_score_is_defined, second_score_is_defined; float first_score = 0.0, second_score = 0.0; gt_assert(*first_node && *second_node); if (nodes_are_equal_feature_trees(*first_node, *second_node)) { if ((first_score_is_defined = gt_feature_node_score_is_defined((GtFeatureNode*) *first_node))) { first_score = gt_feature_node_get_score((GtFeatureNode*) *first_node); } if ((second_score_is_defined = gt_feature_node_score_is_defined((GtFeatureNode*) *second_node))) { second_score = gt_feature_node_get_score((GtFeatureNode*) *second_node); } if ((!first_score_is_defined && !second_score_is_defined) || (first_score_is_defined && !second_score_is_defined) || (first_score_is_defined && second_score_is_defined && first_score >= second_score)) { /* keep first node */ gt_genome_node_delete(*second_node); } else { /* keep second node */ gt_genome_node_delete(*first_node); *first_node = *second_node; } *second_node = NULL; return true; } return false; } static int uniq_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtUniqStream *us; int had_err; gt_error_check(err); us = uniq_stream_cast(ns); gt_assert(!us->second_node); /* the second buffer is always empty when this function is called */ if (!us->first_node) { /* both buffers are empty */ had_err = gt_node_stream_next(us->in_stream, &us->first_node, err); if (had_err) return had_err; if (!us->first_node) { *gn = NULL; return 0; } } /* uniq loop */ for (;;) { gt_assert(us->first_node && !us->second_node); had_err = gt_node_stream_next(us->in_stream, &us->second_node, err); if (!had_err && us->second_node) { if (!uniq(&us->first_node, &us->second_node)) break; /* no uniq possible */ } else break; } /* serve node */ if (!had_err) { gt_assert(us->first_node); *gn = us->first_node; us->first_node = us->second_node; us->second_node = NULL; } return had_err; } static void uniq_stream_free(GtNodeStream *ns) { GtUniqStream *us = uniq_stream_cast(ns); gt_genome_node_delete(us->first_node); gt_genome_node_delete(us->second_node); gt_node_stream_delete(us->in_stream); } const GtNodeStreamClass* gt_uniq_stream_class(void) { static const GtNodeStreamClass *nsc = NULL; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtUniqStream), uniq_stream_free, uniq_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_uniq_stream_new(GtNodeStream *in_stream) { GtNodeStream *ns; GtUniqStream *us; gt_assert(in_stream && gt_node_stream_is_sorted(in_stream)); ns = gt_node_stream_create(gt_uniq_stream_class(), true); us = uniq_stream_cast(ns); us->in_stream = gt_node_stream_ref(in_stream); return ns; } genometools-1.5.1/src/extended/uniq_stream.h000066400000000000000000000017641211610345200211430ustar00rootroot00000000000000/* Copyright (c) 2007, 2011 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef UNIQ_STREAM_H #define UNIQ_STREAM_H #include "extended/uniq_stream_api.h" const GtNodeStreamClass* gt_uniq_stream_class(void); #endif genometools-1.5.1/src/extended/uniq_stream_api.h000066400000000000000000000033361211610345200217710ustar00rootroot00000000000000/* Copyright (c) 2007, 2011 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef UNIQ_STREAM_API_H #define UNIQ_STREAM_API_H #include "extended/node_stream_api.h" /* Implements the interface. A filters out repeated features it retrieves from its node source. */ typedef struct GtUniqStream GtUniqStream; /* Create a object which filters out repeated feature node graphs it retrieves from the sorted and return all other nodes. Two feature node graphs are considered to be __repeated__ if they have the same depth-first traversal and each corresponding feature node pair is similar according to the method. For such a repeated feature node graph the one with the higher score (of the top-level feature) is kept. If only one of the feature node graphs has a defined score, this one is kept. */ GtNodeStream* gt_uniq_stream_new(GtNodeStream*); #endif genometools-1.5.1/src/extended/visitor_stream.c000066400000000000000000000052401211610345200216520ustar00rootroot00000000000000/* Copyright (c) 2010 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/class_alloc_lock.h" #include "extended/feature_node.h" #include "extended/node_stream_api.h" #include "extended/visitor_stream.h" struct GtVisitorStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; GtNodeVisitor *visitor; }; #define visitor_stream_cast(GS)\ gt_node_stream_cast(gt_visitor_stream_class(), GS) static int visitor_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtVisitorStream *visitor_stream; int had_err; gt_error_check(err); visitor_stream = visitor_stream_cast(ns); had_err = gt_node_stream_next(visitor_stream->in_stream, gn, err); if (!had_err && *gn) had_err = gt_genome_node_accept(*gn, visitor_stream->visitor, err); if (had_err) { /* we own the node -> delete it */ gt_genome_node_delete(*gn); *gn = NULL; } return had_err; } static void visitor_stream_free(GtNodeStream *ns) { GtVisitorStream *visitor_stream = visitor_stream_cast(ns); gt_node_visitor_delete(visitor_stream->visitor); gt_node_stream_delete(visitor_stream->in_stream); } const GtNodeStreamClass* gt_visitor_stream_class(void) { static const GtNodeStreamClass *nsc = NULL; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtVisitorStream), visitor_stream_free, visitor_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_visitor_stream_new(GtNodeStream *in_stream, GtNodeVisitor *visitor) { GtVisitorStream *visitor_stream; GtNodeStream *ns; ns = gt_node_stream_create(gt_visitor_stream_class(), gt_node_stream_is_sorted(in_stream)); visitor_stream = visitor_stream_cast(ns); visitor_stream->in_stream = gt_node_stream_ref(in_stream); visitor_stream->visitor = visitor; return ns; } genometools-1.5.1/src/extended/visitor_stream.h000066400000000000000000000016631211610345200216640ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef VISITOR_STREAM_H #define VISITOR_STREAM_H #include "extended/visitor_stream_api.h" const GtNodeStreamClass* gt_visitor_stream_class(void); #endif genometools-1.5.1/src/extended/visitor_stream_api.h000066400000000000000000000025621211610345200225140ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef VISITOR_STREAM_API_H #define VISITOR_STREAM_API_H #include #include "extended/node_stream_api.h" #include "extended/node_visitor_api.h" /* Implements the interface. */ typedef struct GtVisitorStream GtVisitorStream; /* Create a new , takes ownership of . This stream applies to each node which passes through it. Can be used to implement all streams with such a functionality. */ GtNodeStream* gt_visitor_stream_new(GtNodeStream *in_stream, GtNodeVisitor *node_visitor); #endif genometools-1.5.1/src/external/000077500000000000000000000000001211610345200164555ustar00rootroot00000000000000genometools-1.5.1/src/external/bzip2-1.0.6/000077500000000000000000000000001211610345200201435ustar00rootroot00000000000000genometools-1.5.1/src/external/bzip2-1.0.6/CHANGES000066400000000000000000000262311211610345200211420ustar00rootroot00000000000000 ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ 0.9.0 ~~~~~ First version. 0.9.0a ~~~~~~ Removed 'ranlib' from Makefile, since most modern Unix-es don't need it, or even know about it. 0.9.0b ~~~~~~ Fixed a problem with error reporting in bzip2.c. This does not effect the library in any way. Problem is: versions 0.9.0 and 0.9.0a (of the program proper) compress and decompress correctly, but give misleading error messages (internal panics) when an I/O error occurs, instead of reporting the problem correctly. This shouldn't give any data loss (as far as I can see), but is confusing. Made the inline declarations disappear for non-GCC compilers. 0.9.0c ~~~~~~ Fixed some problems in the library pertaining to some boundary cases. This makes the library behave more correctly in those situations. The fixes apply only to features (calls and parameters) not used by bzip2.c, so the non-fixedness of them in previous versions has no effect on reliability of bzip2.c. In bzlib.c: * made zero-length BZ_FLUSH work correctly in bzCompress(). * fixed bzWrite/bzRead to ignore zero-length requests. * fixed bzread to correctly handle read requests after EOF. * wrong parameter order in call to bzDecompressInit in bzBuffToBuffDecompress. Fixed. In compress.c: * changed setting of nGroups in sendMTFValues() so as to do a bit better on small files. This _does_ effect bzip2.c. 0.9.5a ~~~~~~ Major change: add a fallback sorting algorithm (blocksort.c) to give reasonable behaviour even for very repetitive inputs. Nuked --repetitive-best and --repetitive-fast since they are no longer useful. Minor changes: mostly a whole bunch of small changes/ bugfixes in the driver (bzip2.c). Changes pertaining to the user interface are: allow decompression of symlink'd files to stdout decompress/test files even without .bz2 extension give more accurate error messages for I/O errors when compressing/decompressing to stdout, don't catch control-C read flags from BZIP2 and BZIP environment variables decline to break hard links to a file unless forced with -f allow -c flag even with no filenames preserve file ownerships as far as possible make -s -1 give the expected block size (100k) add a flag -q --quiet to suppress nonessential warnings stop decoding flags after --, so files beginning in - can be handled resolved inconsistent naming: bzcat or bz2cat ? bzip2 --help now returns 0 Programming-level changes are: fixed syntax error in GET_LL4 for Borland C++ 5.02 let bzBuffToBuffDecompress return BZ_DATA_ERROR{_MAGIC} fix overshoot of mode-string end in bzopen_or_bzdopen wrapped bzlib.h in #ifdef __cplusplus ... extern "C" { ... } close file handles under all error conditions added minor mods so it compiles with DJGPP out of the box fixed Makefile so it doesn't give problems with BSD make fix uninitialised memory reads in dlltest.c 0.9.5b ~~~~~~ Open stdin/stdout in binary mode for DJGPP. 0.9.5c ~~~~~~ Changed BZ_N_OVERSHOOT to be ... + 2 instead of ... + 1. The + 1 version could cause the sorted order to be wrong in some extremely obscure cases. Also changed setting of quadrant in blocksort.c. 0.9.5d ~~~~~~ The only functional change is to make bzlibVersion() in the library return the correct string. This has no effect whatsoever on the functioning of the bzip2 program or library. Added a couple of casts so the library compiles without warnings at level 3 in MS Visual Studio 6.0. Included a Y2K statement in the file Y2K_INFO. All other changes are minor documentation changes. 1.0 ~~~ Several minor bugfixes and enhancements: * Large file support. The library uses 64-bit counters to count the volume of data passing through it. bzip2.c is now compiled with -D_FILE_OFFSET_BITS=64 to get large file support from the C library. -v correctly prints out file sizes greater than 4 gigabytes. All these changes have been made without assuming a 64-bit platform or a C compiler which supports 64-bit ints, so, except for the C library aspect, they are fully portable. * Decompression robustness. The library/program should be robust to any corruption of compressed data, detecting and handling _all_ corruption, instead of merely relying on the CRCs. What this means is that the program should never crash, given corrupted data, and the library should always return BZ_DATA_ERROR. * Fixed an obscure race-condition bug only ever observed on Solaris, in which, if you were very unlucky and issued control-C at exactly the wrong time, both input and output files would be deleted. * Don't run out of file handles on test/decompression when large numbers of files have invalid magic numbers. * Avoid library namespace pollution. Prefix all exported symbols with BZ2_. * Minor sorting enhancements from my DCC2000 paper. * Advance the version number to 1.0, so as to counteract the (false-in-this-case) impression some people have that programs with version numbers less than 1.0 are in some way, experimental, pre-release versions. * Create an initial Makefile-libbz2_so to build a shared library. Yes, I know I should really use libtool et al ... * Make the program exit with 2 instead of 0 when decompression fails due to a bad magic number (ie, an invalid bzip2 header). Also exit with 1 (as the manual claims :-) whenever a diagnostic message would have been printed AND the corresponding operation is aborted, for example bzip2: Output file xx already exists. When a diagnostic message is printed but the operation is not aborted, for example bzip2: Can't guess original name for wurble -- using wurble.out then the exit value 0 is returned, unless some other problem is also detected. I think it corresponds more closely to what the manual claims now. 1.0.1 ~~~~~ * Modified dlltest.c so it uses the new BZ2_ naming scheme. * Modified makefile-msc to fix minor build probs on Win2k. * Updated README.COMPILATION.PROBLEMS. There are no functionality changes or bug fixes relative to version 1.0.0. This is just a documentation update + a fix for minor Win32 build problems. For almost everyone, upgrading from 1.0.0 to 1.0.1 is utterly pointless. Don't bother. 1.0.2 ~~~~~ A bug fix release, addressing various minor issues which have appeared in the 18 or so months since 1.0.1 was released. Most of the fixes are to do with file-handling or documentation bugs. To the best of my knowledge, there have been no data-loss-causing bugs reported in the compression/decompression engine of 1.0.0 or 1.0.1. Note that this release does not improve the rather crude build system for Unix platforms. The general plan here is to autoconfiscate/ libtoolise 1.0.2 soon after release, and release the result as 1.1.0 or perhaps 1.2.0. That, however, is still just a plan at this point. Here are the changes in 1.0.2. Bug-reporters and/or patch-senders in parentheses. * Fix an infinite segfault loop in 1.0.1 when a directory is encountered in -f (force) mode. (Trond Eivind Glomsrod, Nicholas Nethercote, Volker Schmidt) * Avoid double fclose() of output file on certain I/O error paths. (Solar Designer) * Don't fail with internal error 1007 when fed a long stream (> 48MB) of byte 251. Also print useful message suggesting that 1007s may be caused by bad memory. (noticed by Juan Pedro Vallejo, fixed by me) * Fix uninitialised variable silly bug in demo prog dlltest.c. (Jorj Bauer) * Remove 512-MB limitation on recovered file size for bzip2recover on selected platforms which support 64-bit ints. At the moment all GCC supported platforms, and Win32. (me, Alson van der Meulen) * Hard-code header byte values, to give correct operation on platforms using EBCDIC as their native character set (IBM's OS/390). (Leland Lucius) * Copy file access times correctly. (Marty Leisner) * Add distclean and check targets to Makefile. (Michael Carmack) * Parameterise use of ar and ranlib in Makefile. Also add $(LDFLAGS). (Rich Ireland, Bo Thorsen) * Pass -p (create parent dirs as needed) to mkdir during make install. (Jeremy Fusco) * Dereference symlinks when copying file permissions in -f mode. (Volker Schmidt) * Majorly simplify implementation of uInt64_qrm10. (Bo Lindbergh) * Check the input file still exists before deleting the output one, when aborting in cleanUpAndFail(). (Joerg Prante, Robert Linden, Matthias Krings) Also a bunch of patches courtesy of Philippe Troin, the Debian maintainer of bzip2: * Wrapper scripts (with manpages): bzdiff, bzgrep, bzmore. * Spelling changes and minor enhancements in bzip2.1. * Avoid race condition between creating the output file and setting its interim permissions safely, by using fopen_output_safely(). No changes to bzip2recover since there is no issue with file permissions there. * do not print senseless report with -v when compressing an empty file. * bzcat -f works on non-bzip2 files. * do not try to escape shell meta-characters on unix (the shell takes care of these). * added --fast and --best aliases for -1 -9 for gzip compatibility. 1.0.3 (15 Feb 05) ~~~~~~~~~~~~~~~~~ Fixes some minor bugs since the last version, 1.0.2. * Further robustification against corrupted compressed data. There are currently no known bitstreams which can cause the decompressor to crash, loop or access memory which does not belong to it. If you are using bzip2 or the library to decompress bitstreams from untrusted sources, an upgrade to 1.0.3 is recommended. This fixes CAN-2005-1260. * The documentation has been converted to XML, from which html and pdf can be derived. * Various minor bugs in the documentation have been fixed. * Fixes for various compilation warnings with newer versions of gcc, and on 64-bit platforms. * The BZ_NO_STDIO cpp symbol was not properly observed in 1.0.2. This has been fixed. 1.0.4 (20 Dec 06) ~~~~~~~~~~~~~~~~~ Fixes some minor bugs since the last version, 1.0.3. * Fix file permissions race problem (CAN-2005-0953). * Avoid possible segfault in BZ2_bzclose. From Coverity's NetBSD scan. * 'const'/prototype cleanups in the C code. * Change default install location to /usr/local, and handle multiple 'make install's without error. * Sanitise file names more carefully in bzgrep. Fixes CAN-2005-0758 to the extent that applies to bzgrep. * Use 'mktemp' rather than 'tempfile' in bzdiff. * Tighten up a couple of assertions in blocksort.c following automated analysis. * Fix minor doc/comment bugs. 1.0.5 (10 Dec 07) ~~~~~~~~~~~~~~~~~ Security fix only. Fixes CERT-FI 20469 as it applies to bzip2. 1.0.6 (6 Sept 10) ~~~~~~~~~~~~~~~~~ * Security fix for CVE-2010-0405. This was reported by Mikolaj Izdebski. * Make the documentation build on Ubuntu 10.04 genometools-1.5.1/src/external/bzip2-1.0.6/LICENSE000066400000000000000000000035551211610345200211600ustar00rootroot00000000000000 -------------------------------------------------------------------------- This program, "bzip2", the associated library "libbzip2", and all documentation, are copyright (C) 1996-2010 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. Julian Seward, jseward@bzip.org bzip2/libbzip2 version 1.0.6 of 6 September 2010 -------------------------------------------------------------------------- genometools-1.5.1/src/external/bzip2-1.0.6/Makefile000066400000000000000000000142361211610345200216110ustar00rootroot00000000000000# ------------------------------------------------------------------ # This file is part of bzip2/libbzip2, a program and library for # lossless, block-sorting data compression. # # bzip2/libbzip2 version 1.0.6 of 6 September 2010 # Copyright (C) 1996-2010 Julian Seward # # Please read the WARNING, DISCLAIMER and PATENTS sections in the # README file. # # This program is released under the terms of the license contained # in the file LICENSE. # ------------------------------------------------------------------ SHELL=/bin/sh # To assist in cross-compiling CC=gcc AR=ar RANLIB=ranlib LDFLAGS= BIGFILES=-D_FILE_OFFSET_BITS=64 CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) # Where you want it installed when you do 'make install' PREFIX=/usr/local OBJS= blocksort.o \ huffman.o \ crctable.o \ randtable.o \ compress.o \ decompress.o \ bzlib.o all: libbz2.a bzip2 bzip2recover test bzip2: libbz2.a bzip2.o $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 bzip2recover: bzip2recover.o $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o libbz2.a: $(OBJS) rm -f libbz2.a $(AR) cq libbz2.a $(OBJS) @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \ -f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \ echo $(RANLIB) libbz2.a ; \ $(RANLIB) libbz2.a ; \ fi check: test test: bzip2 @cat words1 ./bzip2 -1 < sample1.ref > sample1.rb2 ./bzip2 -2 < sample2.ref > sample2.rb2 ./bzip2 -3 < sample3.ref > sample3.rb2 ./bzip2 -d < sample1.bz2 > sample1.tst ./bzip2 -d < sample2.bz2 > sample2.tst ./bzip2 -ds < sample3.bz2 > sample3.tst cmp sample1.bz2 sample1.rb2 cmp sample2.bz2 sample2.rb2 cmp sample3.bz2 sample3.rb2 cmp sample1.tst sample1.ref cmp sample2.tst sample2.ref cmp sample3.tst sample3.ref @cat words3 install: bzip2 bzip2recover if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi cp -f bzip2 $(PREFIX)/bin/bzip2 cp -f bzip2 $(PREFIX)/bin/bunzip2 cp -f bzip2 $(PREFIX)/bin/bzcat cp -f bzip2recover $(PREFIX)/bin/bzip2recover chmod a+x $(PREFIX)/bin/bzip2 chmod a+x $(PREFIX)/bin/bunzip2 chmod a+x $(PREFIX)/bin/bzcat chmod a+x $(PREFIX)/bin/bzip2recover cp -f bzip2.1 $(PREFIX)/man/man1 chmod a+r $(PREFIX)/man/man1/bzip2.1 cp -f bzlib.h $(PREFIX)/include chmod a+r $(PREFIX)/include/bzlib.h cp -f libbz2.a $(PREFIX)/lib chmod a+r $(PREFIX)/lib/libbz2.a cp -f bzgrep $(PREFIX)/bin/bzgrep ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep chmod a+x $(PREFIX)/bin/bzgrep cp -f bzmore $(PREFIX)/bin/bzmore ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless chmod a+x $(PREFIX)/bin/bzmore cp -f bzdiff $(PREFIX)/bin/bzdiff ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp chmod a+x $(PREFIX)/bin/bzdiff cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 chmod a+r $(PREFIX)/man/man1/bzgrep.1 chmod a+r $(PREFIX)/man/man1/bzmore.1 chmod a+r $(PREFIX)/man/man1/bzdiff.1 echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1 echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1 echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1 echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 clean: rm -f *.o libbz2.a bzip2 bzip2recover \ sample1.rb2 sample2.rb2 sample3.rb2 \ sample1.tst sample2.tst sample3.tst blocksort.o: blocksort.c @cat words0 $(CC) $(CFLAGS) -c blocksort.c huffman.o: huffman.c $(CC) $(CFLAGS) -c huffman.c crctable.o: crctable.c $(CC) $(CFLAGS) -c crctable.c randtable.o: randtable.c $(CC) $(CFLAGS) -c randtable.c compress.o: compress.c $(CC) $(CFLAGS) -c compress.c decompress.o: decompress.c $(CC) $(CFLAGS) -c decompress.c bzlib.o: bzlib.c $(CC) $(CFLAGS) -c bzlib.c bzip2.o: bzip2.c $(CC) $(CFLAGS) -c bzip2.c bzip2recover.o: bzip2recover.c $(CC) $(CFLAGS) -c bzip2recover.c distclean: clean rm -f manual.ps manual.html manual.pdf DISTNAME=bzip2-1.0.6 dist: check manual rm -f $(DISTNAME) ln -s -f . $(DISTNAME) tar cvf $(DISTNAME).tar \ $(DISTNAME)/blocksort.c \ $(DISTNAME)/huffman.c \ $(DISTNAME)/crctable.c \ $(DISTNAME)/randtable.c \ $(DISTNAME)/compress.c \ $(DISTNAME)/decompress.c \ $(DISTNAME)/bzlib.c \ $(DISTNAME)/bzip2.c \ $(DISTNAME)/bzip2recover.c \ $(DISTNAME)/bzlib.h \ $(DISTNAME)/bzlib_private.h \ $(DISTNAME)/Makefile \ $(DISTNAME)/LICENSE \ $(DISTNAME)/bzip2.1 \ $(DISTNAME)/bzip2.1.preformatted \ $(DISTNAME)/bzip2.txt \ $(DISTNAME)/words0 \ $(DISTNAME)/words1 \ $(DISTNAME)/words2 \ $(DISTNAME)/words3 \ $(DISTNAME)/sample1.ref \ $(DISTNAME)/sample2.ref \ $(DISTNAME)/sample3.ref \ $(DISTNAME)/sample1.bz2 \ $(DISTNAME)/sample2.bz2 \ $(DISTNAME)/sample3.bz2 \ $(DISTNAME)/dlltest.c \ $(DISTNAME)/manual.html \ $(DISTNAME)/manual.pdf \ $(DISTNAME)/manual.ps \ $(DISTNAME)/README \ $(DISTNAME)/README.COMPILATION.PROBLEMS \ $(DISTNAME)/README.XML.STUFF \ $(DISTNAME)/CHANGES \ $(DISTNAME)/libbz2.def \ $(DISTNAME)/libbz2.dsp \ $(DISTNAME)/dlltest.dsp \ $(DISTNAME)/makefile.msc \ $(DISTNAME)/unzcrash.c \ $(DISTNAME)/spewG.c \ $(DISTNAME)/mk251.c \ $(DISTNAME)/bzdiff \ $(DISTNAME)/bzdiff.1 \ $(DISTNAME)/bzmore \ $(DISTNAME)/bzmore.1 \ $(DISTNAME)/bzgrep \ $(DISTNAME)/bzgrep.1 \ $(DISTNAME)/Makefile-libbz2_so \ $(DISTNAME)/bz-common.xsl \ $(DISTNAME)/bz-fo.xsl \ $(DISTNAME)/bz-html.xsl \ $(DISTNAME)/bzip.css \ $(DISTNAME)/entities.xml \ $(DISTNAME)/manual.xml \ $(DISTNAME)/format.pl \ $(DISTNAME)/xmlproc.sh gzip -v $(DISTNAME).tar # For rebuilding the manual from sources on my SuSE 9.1 box MANUAL_SRCS= bz-common.xsl bz-fo.xsl bz-html.xsl bzip.css \ entities.xml manual.xml manual: manual.html manual.ps manual.pdf manual.ps: $(MANUAL_SRCS) ./xmlproc.sh -ps manual.xml manual.pdf: $(MANUAL_SRCS) ./xmlproc.sh -pdf manual.xml manual.html: $(MANUAL_SRCS) ./xmlproc.sh -html manual.xml genometools-1.5.1/src/external/bzip2-1.0.6/Makefile-libbz2_so000066400000000000000000000033061211610345200234700ustar00rootroot00000000000000 # This Makefile builds a shared version of the library, # libbz2.so.1.0.6, with soname libbz2.so.1.0, # at least on x86-Linux (RedHat 7.2), # with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98). # Please see the README file for some important info # about building the library like this. # ------------------------------------------------------------------ # This file is part of bzip2/libbzip2, a program and library for # lossless, block-sorting data compression. # # bzip2/libbzip2 version 1.0.6 of 6 September 2010 # Copyright (C) 1996-2010 Julian Seward # # Please read the WARNING, DISCLAIMER and PATENTS sections in the # README file. # # This program is released under the terms of the license contained # in the file LICENSE. # ------------------------------------------------------------------ SHELL=/bin/sh CC=gcc BIGFILES=-D_FILE_OFFSET_BITS=64 CFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) OBJS= blocksort.o \ huffman.o \ crctable.o \ randtable.o \ compress.o \ decompress.o \ bzlib.o all: $(OBJS) $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.6 $(OBJS) $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.6 rm -f libbz2.so.1.0 ln -s libbz2.so.1.0.6 libbz2.so.1.0 clean: rm -f $(OBJS) bzip2.o libbz2.so.1.0.6 libbz2.so.1.0 bzip2-shared blocksort.o: blocksort.c $(CC) $(CFLAGS) -c blocksort.c huffman.o: huffman.c $(CC) $(CFLAGS) -c huffman.c crctable.o: crctable.c $(CC) $(CFLAGS) -c crctable.c randtable.o: randtable.c $(CC) $(CFLAGS) -c randtable.c compress.o: compress.c $(CC) $(CFLAGS) -c compress.c decompress.o: decompress.c $(CC) $(CFLAGS) -c decompress.c bzlib.o: bzlib.c $(CC) $(CFLAGS) -c bzlib.c genometools-1.5.1/src/external/bzip2-1.0.6/README000066400000000000000000000166361211610345200210370ustar00rootroot00000000000000 This is the README for bzip2/libzip2. This version is fully compatible with the previous public releases. ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in this file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ Complete documentation is available in Postscript form (manual.ps), PDF (manual.pdf) or html (manual.html). A plain-text version of the manual page is available as bzip2.txt. HOW TO BUILD -- UNIX Type 'make'. This builds the library libbz2.a and then the programs bzip2 and bzip2recover. Six self-tests are run. If the self-tests complete ok, carry on to installation: To install in /usr/local/bin, /usr/local/lib, /usr/local/man and /usr/local/include, type make install To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type make install PREFIX=/xxx/yyy If you are (justifiably) paranoid and want to see what 'make install' is going to do, you can first do make -n install or make -n install PREFIX=/xxx/yyy respectively. The -n instructs make to show the commands it would execute, but not actually execute them. HOW TO BUILD -- UNIX, shared library libbz2.so. Do 'make -f Makefile-libbz2_so'. This Makefile seems to work for Linux-ELF (RedHat 7.2 on an x86 box), with gcc. I make no claims that it works for any other platform, though I suspect it probably will work for most platforms employing both ELF and gcc. bzip2-shared, a client of the shared library, is also built, but not self-tested. So I suggest you also build using the normal Makefile, since that conducts a self-test. A second reason to prefer the version statically linked to the library is that, on x86 platforms, building shared objects makes a valuable register (%ebx) unavailable to gcc, resulting in a slowdown of 10%-20%, at least for bzip2. Important note for people upgrading .so's from 0.9.0/0.9.5 to version 1.0.X. All the functions in the library have been renamed, from (eg) bzCompress to BZ2_bzCompress, to avoid namespace pollution. Unfortunately this means that the libbz2.so created by Makefile-libbz2_so will not work with any program which used an older version of the library. I do encourage library clients to make the effort to upgrade to use version 1.0, since it is both faster and more robust than previous versions. HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc. It's difficult for me to support compilation on all these platforms. My approach is to collect binaries for these platforms, and put them on the master web site (http://www.bzip.org). Look there. However (FWIW), bzip2-1.0.X is very standard ANSI C and should compile unmodified with MS Visual C. If you have difficulties building, you might want to read README.COMPILATION.PROBLEMS. At least using MS Visual C++ 6, you can build from the unmodified sources by issuing, in a command shell: nmake -f makefile.msc (you may need to first run the MSVC-provided script VCVARS32.BAT so as to set up paths to the MSVC tools correctly). VALIDATION Correct operation, in the sense that a compressed file can always be decompressed to reproduce the original, is obviously of paramount importance. To validate bzip2, I used a modified version of Mark Nelson's churn program. Churn is an automated test driver which recursively traverses a directory structure, using bzip2 to compress and then decompress each file it encounters, and checking that the decompressed data is the same as the original. Please read and be aware of the following: WARNING: This program and library (attempts to) compress data by performing several non-trivial transformations on it. Unless you are 100% familiar with *all* the algorithms contained herein, and with the consequences of modifying them, you should NOT meddle with the compression or decompression machinery. Incorrect changes can and very likely *will* lead to disastrous loss of data. DISCLAIMER: I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED. Every compression of a file implies an assumption that the compressed file can be decompressed to reproduce the original. Great efforts in design, coding and testing have been made to ensure that this program works correctly. However, the complexity of the algorithms, and, in particular, the presence of various special cases in the code which occur with very low but non-zero probability make it impossible to rule out the possibility of bugs remaining in the program. DO NOT COMPRESS ANY DATA WITH THIS PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER SMALL, THAT THE DATA WILL NOT BE RECOVERABLE. That is not to say this program is inherently unreliable. Indeed, I very much hope the opposite is true. bzip2/libbzip2 has been carefully constructed and extensively tested. PATENTS: To the best of my knowledge, bzip2/libbzip2 does not use any patented algorithms. However, I do not have the resources to carry out a patent search. Therefore I cannot give any guarantee of the above statement. WHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ? * Approx 10% faster compression, 30% faster decompression * -t (test mode) is a lot quicker * Can decompress concatenated compressed files * Programming interface, so programs can directly read/write .bz2 files * Less restrictive (BSD-style) licensing * Flag handling more compatible with GNU gzip * Much more documentation, i.e., a proper user manual * Hopefully, improved portability (at least of the library) WHAT'S NEW IN 0.9.5 ? * Compression speed is much less sensitive to the input data than in previous versions. Specifically, the very slow performance caused by repetitive data is fixed. * Many small improvements in file and flag handling. * A Y2K statement. WHAT'S NEW IN 1.0.0 ? See the CHANGES file. WHAT'S NEW IN 1.0.2 ? See the CHANGES file. WHAT'S NEW IN 1.0.3 ? See the CHANGES file. WHAT'S NEW IN 1.0.4 ? See the CHANGES file. WHAT'S NEW IN 1.0.5 ? See the CHANGES file. WHAT'S NEW IN 1.0.6 ? See the CHANGES file. I hope you find bzip2 useful. Feel free to contact me at jseward@bzip.org if you have any suggestions or queries. Many people mailed me with comments, suggestions and patches after the releases of bzip-0.15, bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this feedback. I thank you for your comments. bzip2's "home" is http://www.bzip.org/ Julian Seward jseward@bzip.org Cambridge, UK. 18 July 1996 (version 0.15) 25 August 1996 (version 0.21) 7 August 1997 (bzip2, version 0.1) 29 August 1997 (bzip2, version 0.1pl2) 23 August 1998 (bzip2, version 0.9.0) 8 June 1999 (bzip2, version 0.9.5) 4 Sept 1999 (bzip2, version 0.9.5d) 5 May 2000 (bzip2, version 1.0pre8) 30 December 2001 (bzip2, version 1.0.2pre1) 15 February 2005 (bzip2, version 1.0.3) 20 December 2006 (bzip2, version 1.0.4) 10 December 2007 (bzip2, version 1.0.5) 6 Sept 2010 (bzip2, version 1.0.6) genometools-1.5.1/src/external/bzip2-1.0.6/README.COMPILATION.PROBLEMS000066400000000000000000000047171211610345200240330ustar00rootroot00000000000000------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ bzip2-1.0.6 should compile without problems on the vast majority of platforms. Using the supplied Makefile, I've built and tested it myself for x86-linux and amd64-linux. With makefile.msc, Visual C++ 6.0 and nmake, you can build a native Win32 version too. Large file support seems to work correctly on at least on amd64-linux. When I say "large file" I mean a file of size 2,147,483,648 (2^31) bytes or above. Many older OSs can't handle files above this size, but many newer ones can. Large files are pretty huge -- most files you'll encounter are not Large Files. Early versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide variety of platforms without difficulty, and I hope this version will continue in that tradition. However, in order to support large files, I've had to include the define -D_FILE_OFFSET_BITS=64 in the Makefile. This can cause problems. The technique of adding -D_FILE_OFFSET_BITS=64 to get large file support is, as far as I know, the Recommended Way to get correct large file support. For more details, see the Large File Support Specification, published by the Large File Summit, at http://ftp.sas.com/standards/large.file As a general comment, if you get compilation errors which you think are related to large file support, try removing the above define from the Makefile, ie, delete the line BIGFILES=-D_FILE_OFFSET_BITS=64 from the Makefile, and do 'make clean ; make'. This will give you a version of bzip2 without large file support, which, for most applications, is probably not a problem. Alternatively, try some of the platform-specific hints listed below. You can use the spewG.c program to generate huge files to test bzip2's large file support, if you are feeling paranoid. Be aware though that any compilation problems which affect bzip2 will also affect spewG.c, alas. AIX: I have reports that for large file support, you need to specify -D_LARGE_FILES rather than -D_FILE_OFFSET_BITS=64. I have not tested this myself. genometools-1.5.1/src/external/bzip2-1.0.6/README.XML.STUFF000066400000000000000000000025241211610345200223530ustar00rootroot00000000000000 ---------------------------------------------------------------- This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ---------------------------------------------------------------- The script xmlproc.sh takes an xml file as input, and processes it to create .pdf, .html or .ps output. It uses format.pl, a perl script to format
 blocks nicely,
 and add CDATA tags so writers do not have to use eg. < 

The file "entities.xml" must be edited to reflect current
version, year, etc.


Usage:

  ./xmlproc.sh -v manual.xml
  Validates an xml file to ensure no dtd-compliance errors

  ./xmlproc.sh -html manual.xml
  Output: manual.html

  ./xmlproc.sh -pdf manual.xml
  Output: manual.pdf

  ./xmlproc.sh -ps manual.xml
  Output: manual.ps


Notum bene: 
- pdfxmltex barfs if given a filename with an underscore in it

- xmltex won't work yet - there's a bug in passivetex
    which we are all waiting for Sebastian to fix.
  So we are going the xml -> pdf -> ps route for the time being,
    using pdfxmltex.
genometools-1.5.1/src/external/bzip2-1.0.6/blocksort.c000066400000000000000000000737461211610345200223320ustar00rootroot00000000000000
/*-------------------------------------------------------------*/
/*--- Block sorting machinery                               ---*/
/*---                                           blocksort.c ---*/
/*-------------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


#include "bzlib_private.h"

/*---------------------------------------------*/
/*--- Fallback O(N log(N)^2) sorting        ---*/
/*--- algorithm, for repetitive blocks      ---*/
/*---------------------------------------------*/

/*---------------------------------------------*/
static 
__inline__
void fallbackSimpleSort ( UInt32* fmap, 
                          UInt32* eclass, 
                          Int32   lo, 
                          Int32   hi )
{
   Int32 i, j, tmp;
   UInt32 ec_tmp;

   if (lo == hi) return;

   if (hi - lo > 3) {
      for ( i = hi-4; i >= lo; i-- ) {
         tmp = fmap[i];
         ec_tmp = eclass[tmp];
         for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )
            fmap[j-4] = fmap[j];
         fmap[j-4] = tmp;
      }
   }

   for ( i = hi-1; i >= lo; i-- ) {
      tmp = fmap[i];
      ec_tmp = eclass[tmp];
      for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )
         fmap[j-1] = fmap[j];
      fmap[j-1] = tmp;
   }
}


/*---------------------------------------------*/
#define fswap(zz1, zz2) \
   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }

#define fvswap(zzp1, zzp2, zzn)       \
{                                     \
   Int32 yyp1 = (zzp1);               \
   Int32 yyp2 = (zzp2);               \
   Int32 yyn  = (zzn);                \
   while (yyn > 0) {                  \
      fswap(fmap[yyp1], fmap[yyp2]);  \
      yyp1++; yyp2++; yyn--;          \
   }                                  \
}


#define fmin(a,b) ((a) < (b)) ? (a) : (b)

#define fpush(lz,hz) { stackLo[sp] = lz; \
                       stackHi[sp] = hz; \
                       sp++; }

#define fpop(lz,hz) { sp--;              \
                      lz = stackLo[sp];  \
                      hz = stackHi[sp]; }

#define FALLBACK_QSORT_SMALL_THRESH 10
#define FALLBACK_QSORT_STACK_SIZE   100


static
void fallbackQSort3 ( UInt32* fmap, 
                      UInt32* eclass,
                      Int32   loSt, 
                      Int32   hiSt )
{
   Int32 unLo, unHi, ltLo, gtHi, n, m;
   Int32 sp, lo, hi;
   UInt32 med, r, r3;
   Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];
   Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];

   r = 0;

   sp = 0;
   fpush ( loSt, hiSt );

   while (sp > 0) {

      AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 );

      fpop ( lo, hi );
      if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {
         fallbackSimpleSort ( fmap, eclass, lo, hi );
         continue;
      }

      /* Random partitioning.  Median of 3 sometimes fails to
         avoid bad cases.  Median of 9 seems to help but 
         looks rather expensive.  This too seems to work but
         is cheaper.  Guidance for the magic constants 
         7621 and 32768 is taken from Sedgewick's algorithms
         book, chapter 35.
      */
      r = ((r * 7621) + 1) % 32768;
      r3 = r % 3;
      if (r3 == 0) med = eclass[fmap[lo]]; else
      if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else
                   med = eclass[fmap[hi]];

      unLo = ltLo = lo;
      unHi = gtHi = hi;

      while (1) {
         while (1) {
            if (unLo > unHi) break;
            n = (Int32)eclass[fmap[unLo]] - (Int32)med;
            if (n == 0) { 
               fswap(fmap[unLo], fmap[ltLo]); 
               ltLo++; unLo++; 
               continue; 
            };
            if (n > 0) break;
            unLo++;
         }
         while (1) {
            if (unLo > unHi) break;
            n = (Int32)eclass[fmap[unHi]] - (Int32)med;
            if (n == 0) { 
               fswap(fmap[unHi], fmap[gtHi]); 
               gtHi--; unHi--; 
               continue; 
            };
            if (n < 0) break;
            unHi--;
         }
         if (unLo > unHi) break;
         fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;
      }

      AssertD ( unHi == unLo-1, "fallbackQSort3(2)" );

      if (gtHi < ltLo) continue;

      n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);
      m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);

      n = lo + unLo - ltLo - 1;
      m = hi - (gtHi - unHi) + 1;

      if (n - lo > hi - m) {
         fpush ( lo, n );
         fpush ( m, hi );
      } else {
         fpush ( m, hi );
         fpush ( lo, n );
      }
   }
}

#undef fmin
#undef fpush
#undef fpop
#undef fswap
#undef fvswap
#undef FALLBACK_QSORT_SMALL_THRESH
#undef FALLBACK_QSORT_STACK_SIZE


/*---------------------------------------------*/
/* Pre:
      nblock > 0
      eclass exists for [0 .. nblock-1]
      ((UChar*)eclass) [0 .. nblock-1] holds block
      ptr exists for [0 .. nblock-1]

   Post:
      ((UChar*)eclass) [0 .. nblock-1] holds block
      All other areas of eclass destroyed
      fmap [0 .. nblock-1] holds sorted order
      bhtab [ 0 .. 2+(nblock/32) ] destroyed
*/

#define       SET_BH(zz)  bhtab[(zz) >> 5] |= (1 << ((zz) & 31))
#define     CLEAR_BH(zz)  bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))
#define     ISSET_BH(zz)  (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))
#define      WORD_BH(zz)  bhtab[(zz) >> 5]
#define UNALIGNED_BH(zz)  ((zz) & 0x01f)

static
void fallbackSort ( UInt32* fmap, 
                    UInt32* eclass, 
                    UInt32* bhtab,
                    Int32   nblock,
                    Int32   verb )
{
   Int32 ftab[257];
   Int32 ftabCopy[256];
   Int32 H, i, j, k, l, r, cc, cc1;
   Int32 nNotDone;
   Int32 nBhtab;
   UChar* eclass8 = (UChar*)eclass;

   /*--
      Initial 1-char radix sort to generate
      initial fmap and initial BH bits.
   --*/
   if (verb >= 4)
      VPrintf0 ( "        bucket sorting ...\n" );
   for (i = 0; i < 257;    i++) ftab[i] = 0;
   for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;
   for (i = 0; i < 256;    i++) ftabCopy[i] = ftab[i];
   for (i = 1; i < 257;    i++) ftab[i] += ftab[i-1];

   for (i = 0; i < nblock; i++) {
      j = eclass8[i];
      k = ftab[j] - 1;
      ftab[j] = k;
      fmap[k] = i;
   }

   nBhtab = 2 + (nblock / 32);
   for (i = 0; i < nBhtab; i++) bhtab[i] = 0;
   for (i = 0; i < 256; i++) SET_BH(ftab[i]);

   /*--
      Inductively refine the buckets.  Kind-of an
      "exponential radix sort" (!), inspired by the
      Manber-Myers suffix array construction algorithm.
   --*/

   /*-- set sentinel bits for block-end detection --*/
   for (i = 0; i < 32; i++) { 
      SET_BH(nblock + 2*i);
      CLEAR_BH(nblock + 2*i + 1);
   }

   /*-- the log(N) loop --*/
   H = 1;
   while (1) {

      if (verb >= 4) 
         VPrintf1 ( "        depth %6d has ", H );

      j = 0;
      for (i = 0; i < nblock; i++) {
         if (ISSET_BH(i)) j = i;
         k = fmap[i] - H; if (k < 0) k += nblock;
         eclass[k] = j;
      }

      nNotDone = 0;
      r = -1;
      while (1) {

	 /*-- find the next non-singleton bucket --*/
         k = r + 1;
         while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;
         if (ISSET_BH(k)) {
            while (WORD_BH(k) == 0xffffffff) k += 32;
            while (ISSET_BH(k)) k++;
         }
         l = k - 1;
         if (l >= nblock) break;
         while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;
         if (!ISSET_BH(k)) {
            while (WORD_BH(k) == 0x00000000) k += 32;
            while (!ISSET_BH(k)) k++;
         }
         r = k - 1;
         if (r >= nblock) break;

         /*-- now [l, r] bracket current bucket --*/
         if (r > l) {
            nNotDone += (r - l + 1);
            fallbackQSort3 ( fmap, eclass, l, r );

            /*-- scan bucket and generate header bits-- */
            cc = -1;
            for (i = l; i <= r; i++) {
               cc1 = eclass[fmap[i]];
               if (cc != cc1) { SET_BH(i); cc = cc1; };
            }
         }
      }

      if (verb >= 4) 
         VPrintf1 ( "%6d unresolved strings\n", nNotDone );

      H *= 2;
      if (H > nblock || nNotDone == 0) break;
   }

   /*-- 
      Reconstruct the original block in
      eclass8 [0 .. nblock-1], since the
      previous phase destroyed it.
   --*/
   if (verb >= 4)
      VPrintf0 ( "        reconstructing block ...\n" );
   j = 0;
   for (i = 0; i < nblock; i++) {
      while (ftabCopy[j] == 0) j++;
      ftabCopy[j]--;
      eclass8[fmap[i]] = (UChar)j;
   }
   AssertH ( j < 256, 1005 );
}

#undef       SET_BH
#undef     CLEAR_BH
#undef     ISSET_BH
#undef      WORD_BH
#undef UNALIGNED_BH


/*---------------------------------------------*/
/*--- The main, O(N^2 log(N)) sorting       ---*/
/*--- algorithm.  Faster for "normal"       ---*/
/*--- non-repetitive blocks.                ---*/
/*---------------------------------------------*/

/*---------------------------------------------*/
static
__inline__
Bool mainGtU ( UInt32  i1, 
               UInt32  i2,
               UChar*  block, 
               UInt16* quadrant,
               UInt32  nblock,
               Int32*  budget )
{
   Int32  k;
   UChar  c1, c2;
   UInt16 s1, s2;

   AssertD ( i1 != i2, "mainGtU" );
   /* 1 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 2 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 3 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 4 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 5 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 6 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 7 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 8 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 9 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 10 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 11 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;
   /* 12 */
   c1 = block[i1]; c2 = block[i2];
   if (c1 != c2) return (c1 > c2);
   i1++; i2++;

   k = nblock + 8;

   do {
      /* 1 */
      c1 = block[i1]; c2 = block[i2];
      if (c1 != c2) return (c1 > c2);
      s1 = quadrant[i1]; s2 = quadrant[i2];
      if (s1 != s2) return (s1 > s2);
      i1++; i2++;
      /* 2 */
      c1 = block[i1]; c2 = block[i2];
      if (c1 != c2) return (c1 > c2);
      s1 = quadrant[i1]; s2 = quadrant[i2];
      if (s1 != s2) return (s1 > s2);
      i1++; i2++;
      /* 3 */
      c1 = block[i1]; c2 = block[i2];
      if (c1 != c2) return (c1 > c2);
      s1 = quadrant[i1]; s2 = quadrant[i2];
      if (s1 != s2) return (s1 > s2);
      i1++; i2++;
      /* 4 */
      c1 = block[i1]; c2 = block[i2];
      if (c1 != c2) return (c1 > c2);
      s1 = quadrant[i1]; s2 = quadrant[i2];
      if (s1 != s2) return (s1 > s2);
      i1++; i2++;
      /* 5 */
      c1 = block[i1]; c2 = block[i2];
      if (c1 != c2) return (c1 > c2);
      s1 = quadrant[i1]; s2 = quadrant[i2];
      if (s1 != s2) return (s1 > s2);
      i1++; i2++;
      /* 6 */
      c1 = block[i1]; c2 = block[i2];
      if (c1 != c2) return (c1 > c2);
      s1 = quadrant[i1]; s2 = quadrant[i2];
      if (s1 != s2) return (s1 > s2);
      i1++; i2++;
      /* 7 */
      c1 = block[i1]; c2 = block[i2];
      if (c1 != c2) return (c1 > c2);
      s1 = quadrant[i1]; s2 = quadrant[i2];
      if (s1 != s2) return (s1 > s2);
      i1++; i2++;
      /* 8 */
      c1 = block[i1]; c2 = block[i2];
      if (c1 != c2) return (c1 > c2);
      s1 = quadrant[i1]; s2 = quadrant[i2];
      if (s1 != s2) return (s1 > s2);
      i1++; i2++;

      if (i1 >= nblock) i1 -= nblock;
      if (i2 >= nblock) i2 -= nblock;

      k -= 8;
      (*budget)--;
   }
      while (k >= 0);

   return False;
}


/*---------------------------------------------*/
/*--
   Knuth's increments seem to work better
   than Incerpi-Sedgewick here.  Possibly
   because the number of elems to sort is
   usually small, typically <= 20.
--*/
static
Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,
                   9841, 29524, 88573, 265720,
                   797161, 2391484 };

static
void mainSimpleSort ( UInt32* ptr,
                      UChar*  block,
                      UInt16* quadrant,
                      Int32   nblock,
                      Int32   lo, 
                      Int32   hi, 
                      Int32   d,
                      Int32*  budget )
{
   Int32 i, j, h, bigN, hp;
   UInt32 v;

   bigN = hi - lo + 1;
   if (bigN < 2) return;

   hp = 0;
   while (incs[hp] < bigN) hp++;
   hp--;

   for (; hp >= 0; hp--) {
      h = incs[hp];

      i = lo + h;
      while (True) {

         /*-- copy 1 --*/
         if (i > hi) break;
         v = ptr[i];
         j = i;
         while ( mainGtU ( 
                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
                 ) ) {
            ptr[j] = ptr[j-h];
            j = j - h;
            if (j <= (lo + h - 1)) break;
         }
         ptr[j] = v;
         i++;

         /*-- copy 2 --*/
         if (i > hi) break;
         v = ptr[i];
         j = i;
         while ( mainGtU ( 
                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
                 ) ) {
            ptr[j] = ptr[j-h];
            j = j - h;
            if (j <= (lo + h - 1)) break;
         }
         ptr[j] = v;
         i++;

         /*-- copy 3 --*/
         if (i > hi) break;
         v = ptr[i];
         j = i;
         while ( mainGtU ( 
                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
                 ) ) {
            ptr[j] = ptr[j-h];
            j = j - h;
            if (j <= (lo + h - 1)) break;
         }
         ptr[j] = v;
         i++;

         if (*budget < 0) return;
      }
   }
}


/*---------------------------------------------*/
/*--
   The following is an implementation of
   an elegant 3-way quicksort for strings,
   described in a paper "Fast Algorithms for
   Sorting and Searching Strings", by Robert
   Sedgewick and Jon L. Bentley.
--*/

#define mswap(zz1, zz2) \
   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }

#define mvswap(zzp1, zzp2, zzn)       \
{                                     \
   Int32 yyp1 = (zzp1);               \
   Int32 yyp2 = (zzp2);               \
   Int32 yyn  = (zzn);                \
   while (yyn > 0) {                  \
      mswap(ptr[yyp1], ptr[yyp2]);    \
      yyp1++; yyp2++; yyn--;          \
   }                                  \
}

static 
__inline__
UChar mmed3 ( UChar a, UChar b, UChar c )
{
   UChar t;
   if (a > b) { t = a; a = b; b = t; };
   if (b > c) { 
      b = c;
      if (a > b) b = a;
   }
   return b;
}

#define mmin(a,b) ((a) < (b)) ? (a) : (b)

#define mpush(lz,hz,dz) { stackLo[sp] = lz; \
                          stackHi[sp] = hz; \
                          stackD [sp] = dz; \
                          sp++; }

#define mpop(lz,hz,dz) { sp--;             \
                         lz = stackLo[sp]; \
                         hz = stackHi[sp]; \
                         dz = stackD [sp]; }


#define mnextsize(az) (nextHi[az]-nextLo[az])

#define mnextswap(az,bz)                                        \
   { Int32 tz;                                                  \
     tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \
     tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \
     tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }


#define MAIN_QSORT_SMALL_THRESH 20
#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)
#define MAIN_QSORT_STACK_SIZE 100

static
void mainQSort3 ( UInt32* ptr,
                  UChar*  block,
                  UInt16* quadrant,
                  Int32   nblock,
                  Int32   loSt, 
                  Int32   hiSt, 
                  Int32   dSt,
                  Int32*  budget )
{
   Int32 unLo, unHi, ltLo, gtHi, n, m, med;
   Int32 sp, lo, hi, d;

   Int32 stackLo[MAIN_QSORT_STACK_SIZE];
   Int32 stackHi[MAIN_QSORT_STACK_SIZE];
   Int32 stackD [MAIN_QSORT_STACK_SIZE];

   Int32 nextLo[3];
   Int32 nextHi[3];
   Int32 nextD [3];

   sp = 0;
   mpush ( loSt, hiSt, dSt );

   while (sp > 0) {

      AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 );

      mpop ( lo, hi, d );
      if (hi - lo < MAIN_QSORT_SMALL_THRESH || 
          d > MAIN_QSORT_DEPTH_THRESH) {
         mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );
         if (*budget < 0) return;
         continue;
      }

      med = (Int32) 
            mmed3 ( block[ptr[ lo         ]+d],
                    block[ptr[ hi         ]+d],
                    block[ptr[ (lo+hi)>>1 ]+d] );

      unLo = ltLo = lo;
      unHi = gtHi = hi;

      while (True) {
         while (True) {
            if (unLo > unHi) break;
            n = ((Int32)block[ptr[unLo]+d]) - med;
            if (n == 0) { 
               mswap(ptr[unLo], ptr[ltLo]); 
               ltLo++; unLo++; continue; 
            };
            if (n >  0) break;
            unLo++;
         }
         while (True) {
            if (unLo > unHi) break;
            n = ((Int32)block[ptr[unHi]+d]) - med;
            if (n == 0) { 
               mswap(ptr[unHi], ptr[gtHi]); 
               gtHi--; unHi--; continue; 
            };
            if (n <  0) break;
            unHi--;
         }
         if (unLo > unHi) break;
         mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;
      }

      AssertD ( unHi == unLo-1, "mainQSort3(2)" );

      if (gtHi < ltLo) {
         mpush(lo, hi, d+1 );
         continue;
      }

      n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);
      m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);

      n = lo + unLo - ltLo - 1;
      m = hi - (gtHi - unHi) + 1;

      nextLo[0] = lo;  nextHi[0] = n;   nextD[0] = d;
      nextLo[1] = m;   nextHi[1] = hi;  nextD[1] = d;
      nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;

      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
      if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);
      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);

      AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" );
      AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" );

      mpush (nextLo[0], nextHi[0], nextD[0]);
      mpush (nextLo[1], nextHi[1], nextD[1]);
      mpush (nextLo[2], nextHi[2], nextD[2]);
   }
}

#undef mswap
#undef mvswap
#undef mpush
#undef mpop
#undef mmin
#undef mnextsize
#undef mnextswap
#undef MAIN_QSORT_SMALL_THRESH
#undef MAIN_QSORT_DEPTH_THRESH
#undef MAIN_QSORT_STACK_SIZE


/*---------------------------------------------*/
/* Pre:
      nblock > N_OVERSHOOT
      block32 exists for [0 .. nblock-1 +N_OVERSHOOT]
      ((UChar*)block32) [0 .. nblock-1] holds block
      ptr exists for [0 .. nblock-1]

   Post:
      ((UChar*)block32) [0 .. nblock-1] holds block
      All other areas of block32 destroyed
      ftab [0 .. 65536 ] destroyed
      ptr [0 .. nblock-1] holds sorted order
      if (*budget < 0), sorting was abandoned
*/

#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])
#define SETMASK (1 << 21)
#define CLEARMASK (~(SETMASK))

static
void mainSort ( UInt32* ptr, 
                UChar*  block,
                UInt16* quadrant, 
                UInt32* ftab,
                Int32   nblock,
                Int32   verb,
                Int32*  budget )
{
   Int32  i, j, k, ss, sb;
   Int32  runningOrder[256];
   Bool   bigDone[256];
   Int32  copyStart[256];
   Int32  copyEnd  [256];
   UChar  c1;
   Int32  numQSorted;
   UInt16 s;
   if (verb >= 4) VPrintf0 ( "        main sort initialise ...\n" );

   /*-- set up the 2-byte frequency table --*/
   for (i = 65536; i >= 0; i--) ftab[i] = 0;

   j = block[0] << 8;
   i = nblock-1;
   for (; i >= 3; i -= 4) {
      quadrant[i] = 0;
      j = (j >> 8) | ( ((UInt16)block[i]) << 8);
      ftab[j]++;
      quadrant[i-1] = 0;
      j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);
      ftab[j]++;
      quadrant[i-2] = 0;
      j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);
      ftab[j]++;
      quadrant[i-3] = 0;
      j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);
      ftab[j]++;
   }
   for (; i >= 0; i--) {
      quadrant[i] = 0;
      j = (j >> 8) | ( ((UInt16)block[i]) << 8);
      ftab[j]++;
   }

   /*-- (emphasises close relationship of block & quadrant) --*/
   for (i = 0; i < BZ_N_OVERSHOOT; i++) {
      block   [nblock+i] = block[i];
      quadrant[nblock+i] = 0;
   }

   if (verb >= 4) VPrintf0 ( "        bucket sorting ...\n" );

   /*-- Complete the initial radix sort --*/
   for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];

   s = block[0] << 8;
   i = nblock-1;
   for (; i >= 3; i -= 4) {
      s = (s >> 8) | (block[i] << 8);
      j = ftab[s] -1;
      ftab[s] = j;
      ptr[j] = i;
      s = (s >> 8) | (block[i-1] << 8);
      j = ftab[s] -1;
      ftab[s] = j;
      ptr[j] = i-1;
      s = (s >> 8) | (block[i-2] << 8);
      j = ftab[s] -1;
      ftab[s] = j;
      ptr[j] = i-2;
      s = (s >> 8) | (block[i-3] << 8);
      j = ftab[s] -1;
      ftab[s] = j;
      ptr[j] = i-3;
   }
   for (; i >= 0; i--) {
      s = (s >> 8) | (block[i] << 8);
      j = ftab[s] -1;
      ftab[s] = j;
      ptr[j] = i;
   }

   /*--
      Now ftab contains the first loc of every small bucket.
      Calculate the running order, from smallest to largest
      big bucket.
   --*/
   for (i = 0; i <= 255; i++) {
      bigDone     [i] = False;
      runningOrder[i] = i;
   }

   {
      Int32 vv;
      Int32 h = 1;
      do h = 3 * h + 1; while (h <= 256);
      do {
         h = h / 3;
         for (i = h; i <= 255; i++) {
            vv = runningOrder[i];
            j = i;
            while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {
               runningOrder[j] = runningOrder[j-h];
               j = j - h;
               if (j <= (h - 1)) goto zero;
            }
            zero:
            runningOrder[j] = vv;
         }
      } while (h != 1);
   }

   /*--
      The main sorting loop.
   --*/

   numQSorted = 0;

   for (i = 0; i <= 255; i++) {

      /*--
         Process big buckets, starting with the least full.
         Basically this is a 3-step process in which we call
         mainQSort3 to sort the small buckets [ss, j], but
         also make a big effort to avoid the calls if we can.
      --*/
      ss = runningOrder[i];

      /*--
         Step 1:
         Complete the big bucket [ss] by quicksorting
         any unsorted small buckets [ss, j], for j != ss.  
         Hopefully previous pointer-scanning phases have already
         completed many of the small buckets [ss, j], so
         we don't have to sort them at all.
      --*/
      for (j = 0; j <= 255; j++) {
         if (j != ss) {
            sb = (ss << 8) + j;
            if ( ! (ftab[sb] & SETMASK) ) {
               Int32 lo = ftab[sb]   & CLEARMASK;
               Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;
               if (hi > lo) {
                  if (verb >= 4)
                     VPrintf4 ( "        qsort [0x%x, 0x%x]   "
                                "done %d   this %d\n",
                                ss, j, numQSorted, hi - lo + 1 );
                  mainQSort3 ( 
                     ptr, block, quadrant, nblock, 
                     lo, hi, BZ_N_RADIX, budget 
                  );   
                  numQSorted += (hi - lo + 1);
                  if (*budget < 0) return;
               }
            }
            ftab[sb] |= SETMASK;
         }
      }

      AssertH ( !bigDone[ss], 1006 );

      /*--
         Step 2:
         Now scan this big bucket [ss] so as to synthesise the
         sorted order for small buckets [t, ss] for all t,
         including, magically, the bucket [ss,ss] too.
         This will avoid doing Real Work in subsequent Step 1's.
      --*/
      {
         for (j = 0; j <= 255; j++) {
            copyStart[j] =  ftab[(j << 8) + ss]     & CLEARMASK;
            copyEnd  [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;
         }
         for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {
            k = ptr[j]-1; if (k < 0) k += nblock;
            c1 = block[k];
            if (!bigDone[c1])
               ptr[ copyStart[c1]++ ] = k;
         }
         for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {
            k = ptr[j]-1; if (k < 0) k += nblock;
            c1 = block[k];
            if (!bigDone[c1]) 
               ptr[ copyEnd[c1]-- ] = k;
         }
      }

      AssertH ( (copyStart[ss]-1 == copyEnd[ss])
                || 
                /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.
                   Necessity for this case is demonstrated by compressing 
                   a sequence of approximately 48.5 million of character 
                   251; 1.0.0/1.0.1 will then die here. */
                (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),
                1007 )

      for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;

      /*--
         Step 3:
         The [ss] big bucket is now done.  Record this fact,
         and update the quadrant descriptors.  Remember to
         update quadrants in the overshoot area too, if
         necessary.  The "if (i < 255)" test merely skips
         this updating for the last bucket processed, since
         updating for the last bucket is pointless.

         The quadrant array provides a way to incrementally
         cache sort orderings, as they appear, so as to 
         make subsequent comparisons in fullGtU() complete
         faster.  For repetitive blocks this makes a big
         difference (but not big enough to be able to avoid
         the fallback sorting mechanism, exponential radix sort).

         The precise meaning is: at all times:

            for 0 <= i < nblock and 0 <= j <= nblock

            if block[i] != block[j], 

               then the relative values of quadrant[i] and 
                    quadrant[j] are meaningless.

               else {
                  if quadrant[i] < quadrant[j]
                     then the string starting at i lexicographically
                     precedes the string starting at j

                  else if quadrant[i] > quadrant[j]
                     then the string starting at j lexicographically
                     precedes the string starting at i

                  else
                     the relative ordering of the strings starting
                     at i and j has not yet been determined.
               }
      --*/
      bigDone[ss] = True;

      if (i < 255) {
         Int32 bbStart  = ftab[ss << 8] & CLEARMASK;
         Int32 bbSize   = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;
         Int32 shifts   = 0;

         while ((bbSize >> shifts) > 65534) shifts++;

         for (j = bbSize-1; j >= 0; j--) {
            Int32 a2update     = ptr[bbStart + j];
            UInt16 qVal        = (UInt16)(j >> shifts);
            quadrant[a2update] = qVal;
            if (a2update < BZ_N_OVERSHOOT)
               quadrant[a2update + nblock] = qVal;
         }
         AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );
      }

   }

   if (verb >= 4)
      VPrintf3 ( "        %d pointers, %d sorted, %d scanned\n",
                 nblock, numQSorted, nblock - numQSorted );
}

#undef BIGFREQ
#undef SETMASK
#undef CLEARMASK


/*---------------------------------------------*/
/* Pre:
      nblock > 0
      arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]
      ((UChar*)arr2)  [0 .. nblock-1] holds block
      arr1 exists for [0 .. nblock-1]

   Post:
      ((UChar*)arr2) [0 .. nblock-1] holds block
      All other areas of block destroyed
      ftab [ 0 .. 65536 ] destroyed
      arr1 [0 .. nblock-1] holds sorted order
*/
void BZ2_blockSort ( EState* s )
{
   UInt32* ptr    = s->ptr; 
   UChar*  block  = s->block;
   UInt32* ftab   = s->ftab;
   Int32   nblock = s->nblock;
   Int32   verb   = s->verbosity;
   Int32   wfact  = s->workFactor;
   UInt16* quadrant;
   Int32   budget;
   Int32   budgetInit;
   Int32   i;

   if (nblock < 10000) {
      fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
   } else {
      /* Calculate the location for quadrant, remembering to get
         the alignment right.  Assumes that &(block[0]) is at least
         2-byte aligned -- this should be ok since block is really
         the first section of arr2.
      */
      i = nblock+BZ_N_OVERSHOOT;
      if (i & 1) i++;
      quadrant = (UInt16*)(&(block[i]));

      /* (wfact-1) / 3 puts the default-factor-30
         transition point at very roughly the same place as 
         with v0.1 and v0.9.0.  
         Not that it particularly matters any more, since the
         resulting compressed stream is now the same regardless
         of whether or not we use the main sort or fallback sort.
      */
      if (wfact < 1  ) wfact = 1;
      if (wfact > 100) wfact = 100;
      budgetInit = nblock * ((wfact-1) / 3);
      budget = budgetInit;

      mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );
      if (verb >= 3) 
         VPrintf3 ( "      %d work, %d block, ratio %5.2f\n",
                    budgetInit - budget,
                    nblock, 
                    (float)(budgetInit - budget) /
                    (float)(nblock==0 ? 1 : nblock) ); 
      if (budget < 0) {
         if (verb >= 2) 
            VPrintf0 ( "    too repetitive; using fallback"
                       " sorting algorithm\n" );
         fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
      }
   }

   s->origPtr = -1;
   for (i = 0; i < s->nblock; i++)
      if (ptr[i] == 0)
         { s->origPtr = i; break; };

   AssertH( s->origPtr != -1, 1003 );
}


/*-------------------------------------------------------------*/
/*--- end                                       blocksort.c ---*/
/*-------------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/bz-common.xsl000066400000000000000000000020411211610345200225710ustar00rootroot00000000000000 



 



 
 
   
    
      
     
  




set       toc,title
book      toc,title,figure,table,example,equation
chapter   toc,title
section   toc
sect1     toc
sect2     toc
sect3     toc
sect4     nop
sect5     nop
qandaset  toc
qandadiv  nop
appendix  toc,title
article/appendix  nop
article   toc,title
preface   toc,title
reference toc,title



genometools-1.5.1/src/external/bzip2-1.0.6/bz-fo.xsl000066400000000000000000000245311211610345200217150ustar00rootroot00000000000000 












      
     
   




 






  




  blue




  
    
  



  
    
  




  
  
  
    
      
    
  
  
    
      
        
          
          
          
        
      
    
    
          
    
  
  
    
      
        
      
    
    
      
        
      
    
  




  
  
  
    
      
        
      
    
    
          
    
  
  
    
      
        
      
    
    
      
        
      
    
  





  
    
  
    
  
  
    
      
    
  





  
  
  
  
    
      0pt
    
  
  
    
      
      
      
        
          
            baseline
             
               
            
          
          
            baseline
            
              
                
                
                
                
              
            
          
        
      
    
  
  
  
    
      
    
    
      
    
    
      
    
  





  
  
  
  
    
      0pt
    
  
  
    
      
        
        
        
      
      
      
      
        
          
            baseline
            
               
            
          
          
            baseline
            
              
                
                
                
                
              
            
          
        
      
    
  
  
  
    
      
    
    
      
    
    
      
    
  






  always
  
    
  
  
    
    pt
  
  
    
    pt
  
  false




genometools-1.5.1/src/external/bzip2-1.0.6/bz-html.xsl000066400000000000000000000012061211610345200222470ustar00rootroot00000000000000 
 ]>










  
  



genometools-1.5.1/src/external/bzip2-1.0.6/bzdiff000066400000000000000000000041201211610345200213270ustar00rootroot00000000000000#!/bin/sh
# sh is buggy on RS/6000 AIX 3.2. Replace above line with #!/bin/ksh

# Bzcmp/diff wrapped for bzip2, 
# adapted from zdiff by Philippe Troin  for Debian GNU/Linux.

# Bzcmp and bzdiff are used to invoke the cmp or the  diff  pro-
# gram  on compressed files.  All options specified are passed
# directly to cmp or diff.  If only 1 file is specified,  then
# the  files  compared  are file1 and an uncompressed file1.gz.
# If two files are specified, then they are  uncompressed  (if
# necessary) and fed to cmp or diff.  The exit status from cmp
# or diff is preserved.

PATH="/usr/bin:/bin:$PATH"; export PATH
prog=`echo $0 | sed 's|.*/||'`
case "$prog" in
  *cmp) comp=${CMP-cmp}   ;;
  *)    comp=${DIFF-diff} ;;
esac

OPTIONS=
FILES=
for ARG
do
    case "$ARG" in
    -*)	OPTIONS="$OPTIONS $ARG";;
     *)	if test -f "$ARG"; then
            FILES="$FILES $ARG"
        else
            echo "${prog}: $ARG not found or not a regular file"
	    exit 1
        fi ;;
    esac
done
if test -z "$FILES"; then
	echo "Usage: $prog [${comp}_options] file [file]"
	exit 1
fi
tmp=`mktemp ${TMPDIR:-/tmp}/bzdiff.XXXXXXXXXX` || {
      echo 'cannot create a temporary file' >&2
      exit 1
}
set $FILES
if test $# -eq 1; then
	FILE=`echo "$1" | sed 's/.bz2$//'`
	bzip2 -cd "$FILE.bz2" | $comp $OPTIONS - "$FILE"
	STAT="$?"

elif test $# -eq 2; then
	case "$1" in
        *.bz2)
                case "$2" in
	        *.bz2)
			F=`echo "$2" | sed 's|.*/||;s|.bz2$||'`
                        bzip2 -cdfq "$2" > $tmp
                        bzip2 -cdfq "$1" | $comp $OPTIONS - $tmp
                        STAT="$?"
			/bin/rm -f $tmp;;

                *)      bzip2 -cdfq "$1" | $comp $OPTIONS - "$2"
                        STAT="$?";;
                esac;;
        *)      case "$2" in
	        *.bz2)
                        bzip2 -cdfq "$2" | $comp $OPTIONS "$1" -
                        STAT="$?";;
                *)      $comp $OPTIONS "$1" "$2"
                        STAT="$?";;
                esac;;
	esac
        exit "$STAT"
else
	echo "Usage: $prog [${comp}_options] file [file]"
	exit 1
fi
genometools-1.5.1/src/external/bzip2-1.0.6/bzdiff.1000066400000000000000000000016011211610345200214670ustar00rootroot00000000000000\"Shamelessly copied from zmore.1 by Philippe Troin 
\"for Debian GNU/Linux
.TH BZDIFF 1
.SH NAME
bzcmp, bzdiff \- compare bzip2 compressed files
.SH SYNOPSIS
.B bzcmp
[ cmp_options ] file1
[ file2 ]
.br
.B bzdiff
[ diff_options ] file1
[ file2 ]
.SH DESCRIPTION
.I  Bzcmp
and 
.I bzdiff
are used to invoke the
.I cmp
or the
.I diff
program on bzip2 compressed files.  All options specified are passed
directly to
.I cmp
or
.IR diff "."
If only 1 file is specified, then the files compared are
.I file1
and an uncompressed
.IR file1 ".bz2."
If two files are specified, then they are uncompressed if necessary and fed to
.I cmp
or
.IR diff "."
The exit status from 
.I cmp
or
.I diff
is preserved.
.SH "SEE ALSO"
cmp(1), diff(1), bzmore(1), bzless(1), bzgrep(1), bzip2(1)
.SH BUGS
Messages from the
.I cmp
or
.I diff
programs refer to temporary filenames instead of those specified.
genometools-1.5.1/src/external/bzip2-1.0.6/bzgrep000066400000000000000000000032151211610345200213600ustar00rootroot00000000000000#!/bin/sh

# Bzgrep wrapped for bzip2, 
# adapted from zgrep by Philippe Troin  for Debian GNU/Linux.
## zgrep notice:
## zgrep -- a wrapper around a grep program that decompresses files as needed
## Adapted from a version sent by Charles Levert 

PATH="/usr/bin:$PATH"; export PATH

prog=`echo $0 | sed 's|.*/||'`
case "$prog" in
	*egrep)	grep=${EGREP-egrep}	;;
	*fgrep)	grep=${FGREP-fgrep}	;;
	*)	grep=${GREP-grep}	;;
esac
pat=""
while test $# -ne 0; do
  case "$1" in
  -e | -f) opt="$opt $1"; shift; pat="$1"
           if test "$grep" = grep; then  # grep is buggy with -e on SVR4
             grep=egrep
           fi;;
  -A | -B) opt="$opt $1 $2"; shift;;
  -*)	   opt="$opt $1";;
   *)      if test -z "$pat"; then
	     pat="$1"
	   else
	     break;
           fi;;
  esac
  shift
done

if test -z "$pat"; then
  echo "grep through bzip2 files"
  echo "usage: $prog [grep_options] pattern [files]"
  exit 1
fi

list=0
silent=0
op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'`
case "$op" in
  *l*) list=1
esac
case "$op" in
  *h*) silent=1
esac

if test $# -eq 0; then
  bzip2 -cdfq | $grep $opt "$pat"
  exit $?
fi

res=0
for i do
  if test -f "$i"; then :; else if test -f "$i.bz2"; then i="$i.bz2"; fi; fi
  if test $list -eq 1; then
    bzip2 -cdfq "$i" | $grep $opt "$pat" 2>&1 > /dev/null && echo $i
    r=$?
  elif test $# -eq 1 -o $silent -eq 1; then
    bzip2 -cdfq "$i" | $grep $opt "$pat"
    r=$?
  else
    j=${i//\\/\\\\}
    j=${j//|/\\|}
    j=${j//&/\\&}
    j=`printf "%s" "$j" | tr '\n' ' '`
    bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${j}:|"
    r=$?
  fi
  test "$r" -ne 0 && res="$r"
done
exit $res
genometools-1.5.1/src/external/bzip2-1.0.6/bzgrep.1000066400000000000000000000024211211610345200215150ustar00rootroot00000000000000\"Shamelessly copied from zmore.1 by Philippe Troin 
\"for Debian GNU/Linux
.TH BZGREP 1
.SH NAME
bzgrep, bzfgrep, bzegrep \- search possibly bzip2 compressed files for a regular expression
.SH SYNOPSIS
.B bzgrep
[ grep_options ]
.BI  [\ -e\ ] " pattern"
.IR filename ".\|.\|."
.br
.B bzegrep
[ egrep_options ]
.BI  [\ -e\ ] " pattern"
.IR filename ".\|.\|."
.br
.B bzfgrep
[ fgrep_options ]
.BI  [\ -e\ ] " pattern"
.IR filename ".\|.\|."
.SH DESCRIPTION
.IR  Bzgrep
is used to invoke the
.I grep
on bzip2-compressed files. All options specified are passed directly to
.I grep.
If no file is specified, then the standard input is decompressed
if necessary and fed to grep.
Otherwise the given files are uncompressed if necessary and fed to
.I grep.
.PP
If
.I bzgrep
is invoked as
.I bzegrep
or
.I bzfgrep
then
.I egrep
or
.I fgrep
is used instead of
.I grep.
If the GREP environment variable is set,
.I bzgrep
uses it as the
.I grep
program to be invoked. For example:

    for sh:  GREP=fgrep  bzgrep string files
    for csh: (setenv GREP fgrep; bzgrep string files)
.SH AUTHOR
Charles Levert (charles@comm.polymtl.ca). Adapted to bzip2 by Philippe
Troin  for Debian GNU/Linux.
.SH "SEE ALSO"
grep(1), egrep(1), fgrep(1), bzdiff(1), bzmore(1), bzless(1), bzip2(1)
genometools-1.5.1/src/external/bzip2-1.0.6/bzip.css000066400000000000000000000033221211610345200216210ustar00rootroot00000000000000/* Colours:
#74240f  dark brown      h1, h2, h3, h4
#336699  medium blue     links
#339999  turquoise       link hover colour
#202020  almost black    general text
#761596  purple          md5sum text
#626262  dark gray       pre border
#eeeeee  very light gray pre background
#f2f2f9  very light blue nav table background
#3366cc  medium blue     nav table border
*/

a, a:link, a:visited, a:active { color: #336699; }
a:hover { color: #339999; }

body { font: 80%/126% sans-serif; }
h1, h2, h3, h4 { color: #74240f; }

dt { color: #336699; font-weight: bold }
dd { 
 margin-left: 1.5em; 
 padding-bottom: 0.8em;
}

/* -- ruler -- */
div.hr_blue { 
  height:  3px; 
  background:#ffffff url("/images/hr_blue.png") repeat-x; }
div.hr_blue hr { display:none; }

/* release styles */
#release p { margin-top: 0.4em; }
#release .md5sum { color: #761596; }


/* ------ styles for docs|manuals|howto ------ */
/* -- lists -- */
ul  { 
 margin:     0px 4px 16px 16px;
 padding:    0px;
 list-style: url("/images/li-blue.png"); 
}
ul li { 
 margin-bottom: 10px;
}
ul ul	{ 
 list-style-type:  none; 
 list-style-image: none; 
 margin-left:      0px; 
}

/* header / footer nav tables */
table.nav {
 border:     solid 1px #3366cc;
 background: #f2f2f9;
 background-color: #f2f2f9;
 margin-bottom: 0.5em;
}
/* don't have underlined links in chunked nav menus */
table.nav a { text-decoration: none; }
table.nav a:hover { text-decoration: underline; }
table.nav td { font-size: 85%; }

code, tt, pre { font-size: 120%; }
code, tt { color: #761596; }

div.literallayout, pre.programlisting, pre.screen {
 color:      #000000;
 padding:    0.5em;
 background: #eeeeee;
 border:     1px solid #626262;
 background-color: #eeeeee;
 margin: 4px 0px 4px 0px; 
}
genometools-1.5.1/src/external/bzip2-1.0.6/bzip2.1000066400000000000000000000376001211610345200212610ustar00rootroot00000000000000.PU
.TH bzip2 1
.SH NAME
bzip2, bunzip2 \- a block-sorting file compressor, v1.0.6
.br
bzcat \- decompresses files to stdout
.br
bzip2recover \- recovers data from damaged bzip2 files

.SH SYNOPSIS
.ll +8
.B bzip2
.RB [ " \-cdfkqstvzVL123456789 " ]
[
.I "filenames \&..."
]
.ll -8
.br
.B bunzip2
.RB [ " \-fkvsVL " ]
[ 
.I "filenames \&..."
]
.br
.B bzcat
.RB [ " \-s " ]
[ 
.I "filenames \&..."
]
.br
.B bzip2recover
.I "filename"

.SH DESCRIPTION
.I bzip2
compresses files using the Burrows-Wheeler block sorting
text compression algorithm, and Huffman coding.  Compression is
generally considerably better than that achieved by more conventional
LZ77/LZ78-based compressors, and approaches the performance of the PPM
family of statistical compressors.

The command-line options are deliberately very similar to 
those of 
.I GNU gzip, 
but they are not identical.

.I bzip2
expects a list of file names to accompany the
command-line flags.  Each file is replaced by a compressed version of
itself, with the name "original_name.bz2".  
Each compressed file
has the same modification date, permissions, and, when possible,
ownership as the corresponding original, so that these properties can
be correctly restored at decompression time.  File name handling is
naive in the sense that there is no mechanism for preserving original
file names, permissions, ownerships or dates in filesystems which lack
these concepts, or have serious file name length restrictions, such as
MS-DOS.

.I bzip2
and
.I bunzip2
will by default not overwrite existing
files.  If you want this to happen, specify the \-f flag.

If no file names are specified,
.I bzip2
compresses from standard
input to standard output.  In this case,
.I bzip2
will decline to
write compressed output to a terminal, as this would be entirely
incomprehensible and therefore pointless.

.I bunzip2
(or
.I bzip2 \-d) 
decompresses all
specified files.  Files which were not created by 
.I bzip2
will be detected and ignored, and a warning issued.  
.I bzip2
attempts to guess the filename for the decompressed file 
from that of the compressed file as follows:

       filename.bz2    becomes   filename
       filename.bz     becomes   filename
       filename.tbz2   becomes   filename.tar
       filename.tbz    becomes   filename.tar
       anyothername    becomes   anyothername.out

If the file does not end in one of the recognised endings, 
.I .bz2, 
.I .bz, 
.I .tbz2
or
.I .tbz, 
.I bzip2 
complains that it cannot
guess the name of the original file, and uses the original name
with
.I .out
appended.

As with compression, supplying no
filenames causes decompression from 
standard input to standard output.

.I bunzip2 
will correctly decompress a file which is the
concatenation of two or more compressed files.  The result is the
concatenation of the corresponding uncompressed files.  Integrity
testing (\-t) 
of concatenated 
compressed files is also supported.

You can also compress or decompress files to the standard output by
giving the \-c flag.  Multiple files may be compressed and
decompressed like this.  The resulting outputs are fed sequentially to
stdout.  Compression of multiple files 
in this manner generates a stream
containing multiple compressed file representations.  Such a stream
can be decompressed correctly only by
.I bzip2 
version 0.9.0 or
later.  Earlier versions of
.I bzip2
will stop after decompressing
the first file in the stream.

.I bzcat
(or
.I bzip2 -dc) 
decompresses all specified files to
the standard output.

.I bzip2
will read arguments from the environment variables
.I BZIP2
and
.I BZIP,
in that order, and will process them
before any arguments read from the command line.  This gives a 
convenient way to supply default arguments.

Compression is always performed, even if the compressed 
file is slightly
larger than the original.  Files of less than about one hundred bytes
tend to get larger, since the compression mechanism has a constant
overhead in the region of 50 bytes.  Random data (including the output
of most file compressors) is coded at about 8.05 bits per byte, giving
an expansion of around 0.5%.

As a self-check for your protection, 
.I 
bzip2
uses 32-bit CRCs to
make sure that the decompressed version of a file is identical to the
original.  This guards against corruption of the compressed data, and
against undetected bugs in
.I bzip2
(hopefully very unlikely).  The
chances of data corruption going undetected is microscopic, about one
chance in four billion for each file processed.  Be aware, though, that
the check occurs upon decompression, so it can only tell you that
something is wrong.  It can't help you 
recover the original uncompressed
data.  You can use 
.I bzip2recover
to try to recover data from
damaged files.

Return values: 0 for a normal exit, 1 for environmental problems (file
not found, invalid flags, I/O errors, &c), 2 to indicate a corrupt
compressed file, 3 for an internal consistency error (eg, bug) which
caused
.I bzip2
to panic.

.SH OPTIONS
.TP
.B \-c --stdout
Compress or decompress to standard output.
.TP
.B \-d --decompress
Force decompression.  
.I bzip2, 
.I bunzip2 
and
.I bzcat 
are
really the same program, and the decision about what actions to take is
done on the basis of which name is used.  This flag overrides that
mechanism, and forces 
.I bzip2
to decompress.
.TP
.B \-z --compress
The complement to \-d: forces compression, regardless of the
invocation name.
.TP
.B \-t --test
Check integrity of the specified file(s), but don't decompress them.
This really performs a trial decompression and throws away the result.
.TP
.B \-f --force
Force overwrite of output files.  Normally,
.I bzip2 
will not overwrite
existing output files.  Also forces 
.I bzip2 
to break hard links
to files, which it otherwise wouldn't do.

bzip2 normally declines to decompress files which don't have the
correct magic header bytes.  If forced (-f), however, it will pass
such files through unmodified.  This is how GNU gzip behaves.
.TP
.B \-k --keep
Keep (don't delete) input files during compression
or decompression.
.TP
.B \-s --small
Reduce memory usage, for compression, decompression and testing.  Files
are decompressed and tested using a modified algorithm which only
requires 2.5 bytes per block byte.  This means any file can be
decompressed in 2300k of memory, albeit at about half the normal speed.

During compression, \-s selects a block size of 200k, which limits
memory use to around the same figure, at the expense of your compression
ratio.  In short, if your machine is low on memory (8 megabytes or
less), use \-s for everything.  See MEMORY MANAGEMENT below.
.TP
.B \-q --quiet
Suppress non-essential warning messages.  Messages pertaining to
I/O errors and other critical events will not be suppressed.
.TP
.B \-v --verbose
Verbose mode -- show the compression ratio for each file processed.
Further \-v's increase the verbosity level, spewing out lots of
information which is primarily of interest for diagnostic purposes.
.TP
.B \-L --license -V --version
Display the software version, license terms and conditions.
.TP
.B \-1 (or \-\-fast) to \-9 (or \-\-best)
Set the block size to 100 k, 200 k ..  900 k when compressing.  Has no
effect when decompressing.  See MEMORY MANAGEMENT below.
The \-\-fast and \-\-best aliases are primarily for GNU gzip 
compatibility.  In particular, \-\-fast doesn't make things
significantly faster.  
And \-\-best merely selects the default behaviour.
.TP
.B \--
Treats all subsequent arguments as file names, even if they start
with a dash.  This is so you can handle files with names beginning
with a dash, for example: bzip2 \-- \-myfilename.
.TP
.B \--repetitive-fast --repetitive-best
These flags are redundant in versions 0.9.5 and above.  They provided
some coarse control over the behaviour of the sorting algorithm in
earlier versions, which was sometimes useful.  0.9.5 and above have an
improved algorithm which renders these flags irrelevant.

.SH MEMORY MANAGEMENT
.I bzip2 
compresses large files in blocks.  The block size affects
both the compression ratio achieved, and the amount of memory needed for
compression and decompression.  The flags \-1 through \-9
specify the block size to be 100,000 bytes through 900,000 bytes (the
default) respectively.  At decompression time, the block size used for
compression is read from the header of the compressed file, and
.I bunzip2
then allocates itself just enough memory to decompress
the file.  Since block sizes are stored in compressed files, it follows
that the flags \-1 to \-9 are irrelevant to and so ignored
during decompression.

Compression and decompression requirements, 
in bytes, can be estimated as:

       Compression:   400k + ( 8 x block size )

       Decompression: 100k + ( 4 x block size ), or
                      100k + ( 2.5 x block size )

Larger block sizes give rapidly diminishing marginal returns.  Most of
the compression comes from the first two or three hundred k of block
size, a fact worth bearing in mind when using
.I bzip2
on small machines.
It is also important to appreciate that the decompression memory
requirement is set at compression time by the choice of block size.

For files compressed with the default 900k block size,
.I bunzip2
will require about 3700 kbytes to decompress.  To support decompression
of any file on a 4 megabyte machine, 
.I bunzip2
has an option to
decompress using approximately half this amount of memory, about 2300
kbytes.  Decompression speed is also halved, so you should use this
option only where necessary.  The relevant flag is -s.

In general, try and use the largest block size memory constraints allow,
since that maximises the compression achieved.  Compression and
decompression speed are virtually unaffected by block size.

Another significant point applies to files which fit in a single block
-- that means most files you'd encounter using a large block size.  The
amount of real memory touched is proportional to the size of the file,
since the file is smaller than a block.  For example, compressing a file
20,000 bytes long with the flag -9 will cause the compressor to
allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560
kbytes of it.  Similarly, the decompressor will allocate 3700k but only
touch 100k + 20000 * 4 = 180 kbytes.

Here is a table which summarises the maximum memory usage for different
block sizes.  Also recorded is the total compressed size for 14 files of
the Calgary Text Compression Corpus totalling 3,141,622 bytes.  This
column gives some feel for how compression varies with block size.
These figures tend to understate the advantage of larger block sizes for
larger files, since the Corpus is dominated by smaller files.

           Compress   Decompress   Decompress   Corpus
    Flag     usage      usage       -s usage     Size

     -1      1200k       500k         350k      914704
     -2      2000k       900k         600k      877703
     -3      2800k      1300k         850k      860338
     -4      3600k      1700k        1100k      846899
     -5      4400k      2100k        1350k      845160
     -6      5200k      2500k        1600k      838626
     -7      6100k      2900k        1850k      834096
     -8      6800k      3300k        2100k      828642
     -9      7600k      3700k        2350k      828642

.SH RECOVERING DATA FROM DAMAGED FILES
.I bzip2
compresses files in blocks, usually 900kbytes long.  Each
block is handled independently.  If a media or transmission error causes
a multi-block .bz2
file to become damaged, it may be possible to
recover data from the undamaged blocks in the file.

The compressed representation of each block is delimited by a 48-bit
pattern, which makes it possible to find the block boundaries with
reasonable certainty.  Each block also carries its own 32-bit CRC, so
damaged blocks can be distinguished from undamaged ones.

.I bzip2recover
is a simple program whose purpose is to search for
blocks in .bz2 files, and write each block out into its own .bz2 
file.  You can then use
.I bzip2 
\-t
to test the
integrity of the resulting files, and decompress those which are
undamaged.

.I bzip2recover
takes a single argument, the name of the damaged file, 
and writes a number of files "rec00001file.bz2",
"rec00002file.bz2", etc, containing the  extracted  blocks.
The  output  filenames  are  designed  so  that the use of
wildcards in subsequent processing -- for example,  
"bzip2 -dc  rec*file.bz2 > recovered_data" -- processes the files in
the correct order.

.I bzip2recover
should be of most use dealing with large .bz2
files,  as  these will contain many blocks.  It is clearly
futile to use it on damaged single-block  files,  since  a
damaged  block  cannot  be recovered.  If you wish to minimise 
any potential data loss through media  or  transmission errors, 
you might consider compressing with a smaller
block size.

.SH PERFORMANCE NOTES
The sorting phase of compression gathers together similar strings in the
file.  Because of this, files containing very long runs of repeated
symbols, like "aabaabaabaab ..."  (repeated several hundred times) may
compress more slowly than normal.  Versions 0.9.5 and above fare much
better than previous versions in this respect.  The ratio between
worst-case and average-case compression time is in the region of 10:1.
For previous versions, this figure was more like 100:1.  You can use the
\-vvvv option to monitor progress in great detail, if you want.

Decompression speed is unaffected by these phenomena.

.I bzip2
usually allocates several megabytes of memory to operate
in, and then charges all over it in a fairly random fashion.  This means
that performance, both for compressing and decompressing, is largely
determined by the speed at which your machine can service cache misses.
Because of this, small changes to the code to reduce the miss rate have
been observed to give disproportionately large performance improvements.
I imagine 
.I bzip2
will perform best on machines with very large caches.

.SH CAVEATS
I/O error messages are not as helpful as they could be.
.I bzip2
tries hard to detect I/O errors and exit cleanly, but the details of
what the problem is sometimes seem rather misleading.

This manual page pertains to version 1.0.6 of
.I bzip2.  
Compressed data created by this version is entirely forwards and
backwards compatible with the previous public releases, versions
0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and above, but with the following
exception: 0.9.0 and above can correctly decompress multiple
concatenated compressed files.  0.1pl2 cannot do this; it will stop
after decompressing just the first file in the stream.

.I bzip2recover
versions prior to 1.0.2 used 32-bit integers to represent
bit positions in compressed files, so they could not handle compressed
files more than 512 megabytes long.  Versions 1.0.2 and above use
64-bit ints on some platforms which support them (GNU supported
targets, and Windows).  To establish whether or not bzip2recover was
built with such a limitation, run it without arguments.  In any event
you can build yourself an unlimited version if you can recompile it
with MaybeUInt64 set to be an unsigned 64-bit integer.



.SH AUTHOR
Julian Seward, jsewardbzip.org.

http://www.bzip.org

The ideas embodied in
.I bzip2
are due to (at least) the following
people: Michael Burrows and David Wheeler (for the block sorting
transformation), David Wheeler (again, for the Huffman coder), Peter
Fenwick (for the structured coding model in the original
.I bzip,
and many refinements), and Alistair Moffat, Radford Neal and Ian Witten
(for the arithmetic coder in the original
.I bzip).  
I am much
indebted for their help, support and advice.  See the manual in the
source distribution for pointers to sources of documentation.  Christian
von Roques encouraged me to look for faster sorting algorithms, so as to
speed up compression.  Bela Lubkin encouraged me to improve the
worst-case compression performance.  
Donna Robinson XMLised the documentation.
The bz* scripts are derived from those of GNU gzip.
Many people sent patches, helped
with portability problems, lent machines, gave advice and were generally
helpful.
genometools-1.5.1/src/external/bzip2-1.0.6/bzip2.1.preformatted000066400000000000000000000507071211610345200237570ustar00rootroot00000000000000bzip2(1)                                                 bzip2(1)



NNAAMMEE
       bzip2, bunzip2 − a block‐sorting file compressor, v1.0.6
       bzcat − decompresses files to stdout
       bzip2recover − recovers data from damaged bzip2 files


SSYYNNOOPPSSIISS
       bbzziipp22 [ −−ccddffkkqqssttvvzzVVLL112233445566778899 ] [ _f_i_l_e_n_a_m_e_s _._._.  ]
       bbuunnzziipp22 [ −−ffkkvvssVVLL ] [ _f_i_l_e_n_a_m_e_s _._._.  ]
       bbzzccaatt [ −−ss ] [ _f_i_l_e_n_a_m_e_s _._._.  ]
       bbzziipp22rreeccoovveerr _f_i_l_e_n_a_m_e


DDEESSCCRRIIPPTTIIOONN
       _b_z_i_p_2  compresses  files  using  the Burrows‐Wheeler block
       sorting text compression algorithm,  and  Huffman  coding.
       Compression  is  generally  considerably  better than that
       achieved by more conventional LZ77/LZ78‐based compressors,
       and  approaches  the performance of the PPM family of sta­
       tistical compressors.

       The command‐line options are deliberately very similar  to
       those of _G_N_U _g_z_i_p_, but they are not identical.

       _b_z_i_p_2  expects  a list of file names to accompany the com­
       mand‐line flags.  Each file is replaced  by  a  compressed
       version  of  itself,  with  the  name "original_name.bz2".
       Each compressed file has the same modification date,  per­
       missions, and, when possible, ownership as the correspond­
       ing original, so that these properties  can  be  correctly
       restored  at  decompression  time.   File name handling is
       naive in the sense that there is no mechanism for preserv­
       ing  original file names, permissions, ownerships or dates
       in filesystems which lack these concepts, or have  serious
       file name length restrictions, such as MS‐DOS.

       _b_z_i_p_2  and  _b_u_n_z_i_p_2 will by default not overwrite existing
       files.  If you want this to happen, specify the −f flag.

       If no file names  are  specified,  _b_z_i_p_2  compresses  from
       standard  input  to  standard output.  In this case, _b_z_i_p_2
       will decline to write compressed output to a terminal,  as
       this  would  be  entirely  incomprehensible  and therefore
       pointless.

       _b_u_n_z_i_p_2 (or _b_z_i_p_2 _−_d_) decompresses  all  specified  files.
       Files which were not created by _b_z_i_p_2 will be detected and
       ignored, and a warning issued.  _b_z_i_p_2  attempts  to  guess
       the  filename  for  the decompressed file from that of the
       compressed file as follows:

              filename.bz2    becomes   filename
              filename.bz     becomes   filename
              filename.tbz2   becomes   filename.tar
              filename.tbz    becomes   filename.tar
              anyothername    becomes   anyothername.out

       If the file does not end in one of the recognised endings,
       _._b_z_2_,  _._b_z_,  _._t_b_z_2 or _._t_b_z_, _b_z_i_p_2 complains that it cannot
       guess the name of the original file, and uses the original
       name with _._o_u_t appended.

       As  with compression, supplying no filenames causes decom­
       pression from standard input to standard output.

       _b_u_n_z_i_p_2 will correctly decompress a file which is the con­
       catenation of two or more compressed files.  The result is
       the concatenation of the corresponding uncompressed files.
       Integrity testing (−t) of concatenated compressed files is
       also supported.

       You can also compress or decompress files to the  standard
       output  by giving the −c flag.  Multiple files may be com­
       pressed and decompressed like this.  The resulting outputs
       are  fed  sequentially to stdout.  Compression of multiple
       files in this manner generates a stream containing  multi­
       ple compressed file representations.  Such a stream can be
       decompressed correctly only  by  _b_z_i_p_2  version  0.9.0  or
       later.   Earlier  versions of _b_z_i_p_2 will stop after decom­
       pressing the first file in the stream.

       _b_z_c_a_t (or _b_z_i_p_2 _‐_d_c_) decompresses all specified  files  to
       the standard output.

       _b_z_i_p_2  will  read arguments from the environment variables
       _B_Z_I_P_2 and _B_Z_I_P_, in  that  order,  and  will  process  them
       before  any  arguments  read  from the command line.  This
       gives a convenient way to supply default arguments.

       Compression is always performed, even  if  the  compressed
       file  is slightly larger than the original.  Files of less
       than about one hundred bytes tend to get larger, since the
       compression  mechanism  has  a  constant  overhead  in the
       region of 50 bytes.  Random data (including the output  of
       most  file  compressors)  is  coded at about 8.05 bits per
       byte, giving an expansion of around 0.5%.

       As a self‐check for your  protection,  _b_z_i_p_2  uses  32‐bit
       CRCs  to make sure that the decompressed version of a file
       is identical to the original.  This guards against corrup­
       tion  of  the compressed data, and against undetected bugs
       in _b_z_i_p_2 (hopefully very unlikely).  The chances  of  data
       corruption  going  undetected  is  microscopic,  about one
       chance in four billion for each file processed.  Be aware,
       though,  that  the  check occurs upon decompression, so it
       can only tell you that something is wrong.  It can’t  help
       you  recover  the original uncompressed data.  You can use
       _b_z_i_p_2_r_e_c_o_v_e_r to try to recover data from damaged files.

       Return values: 0 for a normal exit,  1  for  environmental
       problems  (file not found, invalid flags, I/O errors, &c),
       2 to indicate a corrupt compressed file, 3 for an internal
       consistency error (eg, bug) which caused _b_z_i_p_2 to panic.


OOPPTTIIOONNSS
       −−cc ‐‐‐‐ssttddoouutt
              Compress or decompress to standard output.

       −−dd ‐‐‐‐ddeeccoommpprreessss
              Force  decompression.  _b_z_i_p_2_, _b_u_n_z_i_p_2 and _b_z_c_a_t are
              really the same program,  and  the  decision  about
              what  actions to take is done on the basis of which
              name is used.  This flag overrides that  mechanism,
              and forces _b_z_i_p_2 to decompress.

       −−zz ‐‐‐‐ccoommpprreessss
              The   complement   to   −d:   forces   compression,
              regardless of the invocation name.

       −−tt ‐‐‐‐tteesstt
              Check integrity of the specified file(s), but don’t
              decompress  them.   This  really  performs  a trial
              decompression and throws away the result.

       −−ff ‐‐‐‐ffoorrccee
              Force overwrite of output files.   Normally,  _b_z_i_p_2
              will  not  overwrite  existing  output files.  Also
              forces _b_z_i_p_2 to break hard links to files, which it
              otherwise wouldn’t do.

              bzip2  normally  declines to decompress files which
              don’t have the  correct  magic  header  bytes.   If
              forced  (‐f),  however,  it  will  pass  such files
              through unmodified.  This is how GNU gzip  behaves.

       −−kk ‐‐‐‐kkeeeepp
              Keep  (don’t delete) input files during compression
              or decompression.

       −−ss ‐‐‐‐ssmmaallll
              Reduce memory usage, for compression, decompression
              and  testing.   Files  are  decompressed and tested
              using a modified algorithm which only requires  2.5
              bytes  per  block byte.  This means any file can be
              decompressed in 2300k of memory,  albeit  at  about
              half the normal speed.

              During  compression,  −s  selects  a  block size of
              200k, which limits memory use to  around  the  same
              figure,  at  the expense of your compression ratio.
              In short, if your  machine  is  low  on  memory  (8
              megabytes  or  less),  use  −s for everything.  See
              MEMORY MANAGEMENT below.

       −−qq ‐‐‐‐qquuiieett
              Suppress non‐essential warning messages.   Messages
              pertaining  to I/O errors and other critical events
              will not be suppressed.

       −−vv ‐‐‐‐vveerrbboossee
              Verbose mode ‐‐ show the compression ratio for each
              file  processed.   Further  −v’s  increase the ver­
              bosity level, spewing out lots of information which
              is primarily of interest for diagnostic purposes.

       −−LL ‐‐‐‐lliicceennssee ‐‐VV ‐‐‐‐vveerrssiioonn
              Display  the  software  version,  license terms and
              conditions.

       −−11 ((oorr −−−−ffaasstt)) ttoo −−99 ((oorr −−−−bbeesstt))
              Set the block size to 100 k, 200 k ..  900  k  when
              compressing.   Has  no  effect  when decompressing.
              See MEMORY MANAGEMENT below.  The −−fast and −−best
              aliases  are  primarily for GNU gzip compatibility.
              In particular, −−fast doesn’t make things  signifi­
              cantly  faster.   And  −−best  merely  selects  the
              default behaviour.

       −−‐‐     Treats all subsequent arguments as file names, even
              if they start with a dash.  This is so you can han­
              dle files with names beginning  with  a  dash,  for
              example: bzip2 −‐ −myfilename.

       −−‐‐rreeppeettiittiivvee‐‐ffaasstt ‐‐‐‐rreeppeettiittiivvee‐‐bbeesstt
              These  flags  are  redundant  in versions 0.9.5 and
              above.  They provided some coarse control over  the
              behaviour  of the sorting algorithm in earlier ver­
              sions, which was sometimes useful.  0.9.5 and above
              have  an  improved  algorithm  which  renders these
              flags irrelevant.


MMEEMMOORRYY MMAANNAAGGEEMMEENNTT
       _b_z_i_p_2 compresses large files in blocks.   The  block  size
       affects  both  the  compression  ratio  achieved,  and the
       amount of memory needed for compression and decompression.
       The  flags  −1  through  −9  specify  the block size to be
       100,000 bytes through 900,000 bytes (the default)  respec­
       tively.   At  decompression  time, the block size used for
       compression is read from  the  header  of  the  compressed
       file, and _b_u_n_z_i_p_2 then allocates itself just enough memory
       to decompress the file.  Since block sizes are  stored  in
       compressed  files,  it follows that the flags −1 to −9 are
       irrelevant to and so ignored during decompression.

       Compression and decompression requirements, in bytes,  can
       be estimated as:

              Compression:   400k + ( 8 x block size )

              Decompression: 100k + ( 4 x block size ), or
                             100k + ( 2.5 x block size )

       Larger  block  sizes  give  rapidly  diminishing  marginal
       returns.  Most of the compression comes from the first two
       or  three hundred k of block size, a fact worth bearing in
       mind when using _b_z_i_p_2  on  small  machines.   It  is  also
       important  to  appreciate  that  the  decompression memory
       requirement is set at compression time by  the  choice  of
       block size.

       For  files  compressed  with  the default 900k block size,
       _b_u_n_z_i_p_2 will require about 3700 kbytes to decompress.   To
       support decompression of any file on a 4 megabyte machine,
       _b_u_n_z_i_p_2 has an option to  decompress  using  approximately
       half this amount of memory, about 2300 kbytes.  Decompres­
       sion speed is also halved, so you should use  this  option
       only where necessary.  The relevant flag is ‐s.

       In general, try and use the largest block size memory con­
       straints  allow,  since  that  maximises  the  compression
       achieved.   Compression and decompression speed are virtu­
       ally unaffected by block size.

       Another significant point applies to files which fit in  a
       single  block  ‐‐  that  means  most files you’d encounter
       using a large block  size.   The  amount  of  real  memory
       touched is proportional to the size of the file, since the
       file is smaller than a block.  For example, compressing  a
       file  20,000  bytes  long  with the flag ‐9 will cause the
       compressor to allocate around 7600k of  memory,  but  only
       touch 400k + 20000 * 8 = 560 kbytes of it.  Similarly, the
       decompressor will allocate 3700k but  only  touch  100k  +
       20000 * 4 = 180 kbytes.

       Here  is a table which summarises the maximum memory usage
       for different block sizes.  Also  recorded  is  the  total
       compressed  size for 14 files of the Calgary Text Compres­
       sion Corpus totalling 3,141,622 bytes.  This column  gives
       some  feel  for  how  compression  varies with block size.
       These figures tend to understate the advantage  of  larger
       block  sizes  for  larger files, since the Corpus is domi­
       nated by smaller files.

                  Compress   Decompress   Decompress   Corpus
           Flag     usage      usage       ‐s usage     Size

            ‐1      1200k       500k         350k      914704
            ‐2      2000k       900k         600k      877703
            ‐3      2800k      1300k         850k      860338
            ‐4      3600k      1700k        1100k      846899
            ‐5      4400k      2100k        1350k      845160
            ‐6      5200k      2500k        1600k      838626
            ‐7      6100k      2900k        1850k      834096
            ‐8      6800k      3300k        2100k      828642
            ‐9      7600k      3700k        2350k      828642


RREECCOOVVEERRIINNGG DDAATTAA FFRROOMM DDAAMMAAGGEEDD FFIILLEESS
       _b_z_i_p_2 compresses files in blocks, usually 900kbytes  long.
       Each block is handled independently.  If a media or trans­
       mission error causes a multi‐block  .bz2  file  to  become
       damaged,  it  may  be  possible  to  recover data from the
       undamaged blocks in the file.

       The compressed representation of each block  is  delimited
       by  a  48‐bit pattern, which makes it possible to find the
       block boundaries with reasonable  certainty.   Each  block
       also  carries its own 32‐bit CRC, so damaged blocks can be
       distinguished from undamaged ones.

       _b_z_i_p_2_r_e_c_o_v_e_r is a  simple  program  whose  purpose  is  to
       search  for blocks in .bz2 files, and write each block out
       into its own .bz2 file.  You can then use _b_z_i_p_2 −t to test
       the integrity of the resulting files, and decompress those
       which are undamaged.

       _b_z_i_p_2_r_e_c_o_v_e_r takes a single argument, the name of the dam­
       aged    file,    and    writes    a    number   of   files
       "rec00001file.bz2",  "rec00002file.bz2",  etc,  containing
       the   extracted   blocks.   The   output   filenames   are
       designed  so  that the use of wildcards in subsequent pro­
       cessing  ‐‐ for example, "bzip2 ‐dc  rec*file.bz2 > recov­
       ered_data" ‐‐ processes the files in the correct order.

       _b_z_i_p_2_r_e_c_o_v_e_r should be of most use dealing with large .bz2
       files,  as  these will contain many blocks.  It is clearly
       futile to use it on damaged single‐block  files,  since  a
       damaged  block  cannot  be recovered.  If you wish to min­
       imise any potential data loss through media  or  transmis­
       sion errors, you might consider compressing with a smaller
       block size.


PPEERRFFOORRMMAANNCCEE NNOOTTEESS
       The sorting phase of compression gathers together  similar
       strings  in  the  file.  Because of this, files containing
       very long runs of  repeated  symbols,  like  "aabaabaabaab
       ..."   (repeated  several hundred times) may compress more
       slowly than normal.  Versions 0.9.5 and  above  fare  much
       better  than previous versions in this respect.  The ratio
       between worst‐case and average‐case compression time is in
       the  region  of  10:1.  For previous versions, this figure
       was more like 100:1.  You can use the −vvvv option to mon­
       itor progress in great detail, if you want.

       Decompression speed is unaffected by these phenomena.

       _b_z_i_p_2  usually  allocates  several  megabytes of memory to
       operate in, and then charges all over it in a fairly  ran­
       dom  fashion.   This means that performance, both for com­
       pressing and decompressing, is largely determined  by  the
       speed  at  which  your  machine  can service cache misses.
       Because of this, small changes to the code to  reduce  the
       miss  rate  have  been observed to give disproportionately
       large performance improvements.  I imagine _b_z_i_p_2 will per­
       form best on machines with very large caches.


CCAAVVEEAATTSS
       I/O  error  messages  are not as helpful as they could be.
       _b_z_i_p_2 tries hard to detect I/O errors  and  exit  cleanly,
       but  the  details  of  what  the problem is sometimes seem
       rather misleading.

       This manual page pertains to version 1.0.6 of _b_z_i_p_2_.  Com­
       pressed  data created by this version is entirely forwards
       and  backwards  compatible  with   the   previous   public
       releases,  versions  0.1pl2,  0.9.0,  0.9.5, 1.0.0, 1.0.1, 
       1.0.2 and above, but with the  following  exception: 0.9.0
       and above can  correctly decompress  multiple concatenated
       compressed files.  0.1pl2  cannot do this;  it  will  stop 
       after  decompressing just the first file in the stream.

       _b_z_i_p_2_r_e_c_o_v_e_r  versions prior to 1.0.2 used 32‐bit integers
       to represent bit positions in compressed  files,  so  they
       could  not handle compressed files more than 512 megabytes
       long.  Versions 1.0.2 and above use 64‐bit  ints  on  some
       platforms  which  support them (GNU supported targets, and
       Windows).  To establish whether or  not  bzip2recover  was
       built  with  such  a limitation, run it without arguments.
       In any event you can build yourself an  unlimited  version
       if  you  can  recompile  it  with MaybeUInt64 set to be an
       unsigned 64‐bit integer.




AAUUTTHHOORR
       Julian Seward, jsewardbzip.org.

       http://www.bzip.org

       The ideas embodied in _b_z_i_p_2 are due to (at least) the fol­
       lowing  people: Michael Burrows and David Wheeler (for the
       block sorting transformation), David Wheeler  (again,  for
       the Huffman coder), Peter Fenwick (for the structured cod­
       ing model in the original _b_z_i_p_, and many refinements), and
       Alistair  Moffat,  Radford  Neal  and  Ian Witten (for the
       arithmetic  coder  in  the  original  _b_z_i_p_)_.   I  am  much
       indebted for their help, support and advice.  See the man­
       ual in the source distribution for pointers to sources  of
       documentation.  Christian von Roques encouraged me to look
       for faster sorting algorithms, so as to speed up  compres­
       sion.  Bela Lubkin encouraged me to improve the worst‐case
       compression performance.  Donna Robinson XMLised the docu­
       mentation.   The bz* scripts are derived from those of GNU
       gzip.  Many people sent patches, helped  with  portability
       problems,  lent  machines,  gave advice and were generally
       helpful.



                                                         bzip2(1)
genometools-1.5.1/src/external/bzip2-1.0.6/bzip2.c000066400000000000000000001622741211610345200213510ustar00rootroot00000000000000
/*-----------------------------------------------------------*/
/*--- A block-sorting, lossless compressor        bzip2.c ---*/
/*-----------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


/* Place a 1 beside your platform, and 0 elsewhere.
   Generic 32-bit Unix.
   Also works on 64-bit Unix boxes.
   This is the default.
*/
#define BZ_UNIX      1

/*--
  Win32, as seen by Jacob Navia's excellent
  port of (Chris Fraser & David Hanson)'s excellent
  lcc compiler.  Or with MS Visual C.
  This is selected automatically if compiled by a compiler which
  defines _WIN32, not including the Cygwin GCC.
--*/
#define BZ_LCCWIN32  0

#if defined(_WIN32) && !defined(__CYGWIN__)
#undef  BZ_LCCWIN32
#define BZ_LCCWIN32 1
#undef  BZ_UNIX
#define BZ_UNIX 0
#endif


/*---------------------------------------------*/
/*--
  Some stuff for all platforms.
--*/

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "bzlib.h"

#define ERROR_IF_EOF(i)       { if ((i) == EOF)  ioError(); }
#define ERROR_IF_NOT_ZERO(i)  { if ((i) != 0)    ioError(); }
#define ERROR_IF_MINUS_ONE(i) { if ((i) == (-1)) ioError(); }


/*---------------------------------------------*/
/*--
   Platform-specific stuff.
--*/

#if BZ_UNIX
#   include 
#   include 
#   include 
#   include 
#   include 
#   include 

#   define PATH_SEP    '/'
#   define MY_LSTAT    lstat
#   define MY_STAT     stat
#   define MY_S_ISREG  S_ISREG
#   define MY_S_ISDIR  S_ISDIR

#   define APPEND_FILESPEC(root, name) \
      root=snocString((root), (name))

#   define APPEND_FLAG(root, name) \
      root=snocString((root), (name))

#   define SET_BINARY_MODE(fd) /**/

#   ifdef __GNUC__
#      define NORETURN __attribute__ ((noreturn))
#   else
#      define NORETURN /**/
#   endif

#   ifdef __DJGPP__
#     include 
#     include 
#     undef MY_LSTAT
#     undef MY_STAT
#     define MY_LSTAT stat
#     define MY_STAT stat
#     undef SET_BINARY_MODE
#     define SET_BINARY_MODE(fd)                        \
        do {                                            \
           int retVal = setmode ( fileno ( fd ),        \
                                  O_BINARY );           \
           ERROR_IF_MINUS_ONE ( retVal );               \
        } while ( 0 )
#   endif

#   ifdef __CYGWIN__
#     include 
#     include 
#     undef SET_BINARY_MODE
#     define SET_BINARY_MODE(fd)                        \
        do {                                            \
           int retVal = setmode ( fileno ( fd ),        \
                                  O_BINARY );           \
           ERROR_IF_MINUS_ONE ( retVal );               \
        } while ( 0 )
#   endif
#endif /* BZ_UNIX */



#if BZ_LCCWIN32
#   include 
#   include 
#   include 

#   define NORETURN       /**/
#   define PATH_SEP       '\\'
#   define MY_LSTAT       _stat
#   define MY_STAT        _stat
#   define MY_S_ISREG(x)  ((x) & _S_IFREG)
#   define MY_S_ISDIR(x)  ((x) & _S_IFDIR)

#   define APPEND_FLAG(root, name) \
      root=snocString((root), (name))

#   define APPEND_FILESPEC(root, name)                \
      root = snocString ((root), (name))

#   define SET_BINARY_MODE(fd)                        \
      do {                                            \
         int retVal = setmode ( fileno ( fd ),        \
                                O_BINARY );           \
         ERROR_IF_MINUS_ONE ( retVal );               \
      } while ( 0 )

#endif /* BZ_LCCWIN32 */


/*---------------------------------------------*/
/*--
  Some more stuff for all platforms :-)
--*/

typedef char            Char;
typedef unsigned char   Bool;
typedef unsigned char   UChar;
typedef int             Int32;
typedef unsigned int    UInt32;
typedef short           Int16;
typedef unsigned short  UInt16;
                                       
#define True  ((Bool)1)
#define False ((Bool)0)

/*--
  IntNative is your platform's `native' int size.
  Only here to avoid probs with 64-bit platforms.
--*/
typedef int IntNative;


/*---------------------------------------------------*/
/*--- Misc (file handling) data decls             ---*/
/*---------------------------------------------------*/

Int32   verbosity;
Bool    keepInputFiles, smallMode, deleteOutputOnInterrupt;
Bool    forceOverwrite, testFailsExist, unzFailsExist, noisy;
Int32   numFileNames, numFilesProcessed, blockSize100k;
Int32   exitValue;

/*-- source modes; F==file, I==stdin, O==stdout --*/
#define SM_I2O           1
#define SM_F2O           2
#define SM_F2F           3

/*-- operation modes --*/
#define OM_Z             1
#define OM_UNZ           2
#define OM_TEST          3

Int32   opMode;
Int32   srcMode;

#define FILE_NAME_LEN 1034

Int32   longestFileName;
Char    inName [FILE_NAME_LEN];
Char    outName[FILE_NAME_LEN];
Char    tmpName[FILE_NAME_LEN];
Char    *progName;
Char    progNameReally[FILE_NAME_LEN];
FILE    *outputHandleJustInCase;
Int32   workFactor;

static void    panic                 ( const Char* ) NORETURN;
static void    ioError               ( void )        NORETURN;
static void    outOfMemory           ( void )        NORETURN;
static void    configError           ( void )        NORETURN;
static void    crcError              ( void )        NORETURN;
static void    cleanUpAndFail        ( Int32 )       NORETURN;
static void    compressedStreamEOF   ( void )        NORETURN;

static void    copyFileName ( Char*, Char* );
static void*   myMalloc     ( Int32 );
static void    applySavedFileAttrToOutputFile ( IntNative fd );



/*---------------------------------------------------*/
/*--- An implementation of 64-bit ints.  Sigh.    ---*/
/*--- Roll on widespread deployment of ANSI C9X ! ---*/
/*---------------------------------------------------*/

typedef
   struct { UChar b[8]; } 
   UInt64;


static
void uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 )
{
   n->b[7] = (UChar)((hi32 >> 24) & 0xFF);
   n->b[6] = (UChar)((hi32 >> 16) & 0xFF);
   n->b[5] = (UChar)((hi32 >> 8)  & 0xFF);
   n->b[4] = (UChar) (hi32        & 0xFF);
   n->b[3] = (UChar)((lo32 >> 24) & 0xFF);
   n->b[2] = (UChar)((lo32 >> 16) & 0xFF);
   n->b[1] = (UChar)((lo32 >> 8)  & 0xFF);
   n->b[0] = (UChar) (lo32        & 0xFF);
}


static
double uInt64_to_double ( UInt64* n )
{
   Int32  i;
   double base = 1.0;
   double sum  = 0.0;
   for (i = 0; i < 8; i++) {
      sum  += base * (double)(n->b[i]);
      base *= 256.0;
   }
   return sum;
}


static
Bool uInt64_isZero ( UInt64* n )
{
   Int32 i;
   for (i = 0; i < 8; i++)
      if (n->b[i] != 0) return 0;
   return 1;
}


/* Divide *n by 10, and return the remainder.  */
static 
Int32 uInt64_qrm10 ( UInt64* n )
{
   UInt32 rem, tmp;
   Int32  i;
   rem = 0;
   for (i = 7; i >= 0; i--) {
      tmp = rem * 256 + n->b[i];
      n->b[i] = tmp / 10;
      rem = tmp % 10;
   }
   return rem;
}


/* ... and the Whole Entire Point of all this UInt64 stuff is
   so that we can supply the following function.
*/
static
void uInt64_toAscii ( char* outbuf, UInt64* n )
{
   Int32  i, q;
   UChar  buf[32];
   Int32  nBuf   = 0;
   UInt64 n_copy = *n;
   do {
      q = uInt64_qrm10 ( &n_copy );
      buf[nBuf] = q + '0';
      nBuf++;
   } while (!uInt64_isZero(&n_copy));
   outbuf[nBuf] = 0;
   for (i = 0; i < nBuf; i++) 
      outbuf[i] = buf[nBuf-i-1];
}


/*---------------------------------------------------*/
/*--- Processing of complete files and streams    ---*/
/*---------------------------------------------------*/

/*---------------------------------------------*/
static 
Bool myfeof ( FILE* f )
{
   Int32 c = fgetc ( f );
   if (c == EOF) return True;
   ungetc ( c, f );
   return False;
}


/*---------------------------------------------*/
static 
void compressStream ( FILE *stream, FILE *zStream )
{
   BZFILE* bzf = NULL;
   UChar   ibuf[5000];
   Int32   nIbuf;
   UInt32  nbytes_in_lo32, nbytes_in_hi32;
   UInt32  nbytes_out_lo32, nbytes_out_hi32;
   Int32   bzerr, bzerr_dummy, ret;

   SET_BINARY_MODE(stream);
   SET_BINARY_MODE(zStream);

   if (ferror(stream)) goto errhandler_io;
   if (ferror(zStream)) goto errhandler_io;

   bzf = BZ2_bzWriteOpen ( &bzerr, zStream, 
                           blockSize100k, verbosity, workFactor );   
   if (bzerr != BZ_OK) goto errhandler;

   if (verbosity >= 2) fprintf ( stderr, "\n" );

   while (True) {

      if (myfeof(stream)) break;
      nIbuf = fread ( ibuf, sizeof(UChar), 5000, stream );
      if (ferror(stream)) goto errhandler_io;
      if (nIbuf > 0) BZ2_bzWrite ( &bzerr, bzf, (void*)ibuf, nIbuf );
      if (bzerr != BZ_OK) goto errhandler;

   }

   BZ2_bzWriteClose64 ( &bzerr, bzf, 0, 
                        &nbytes_in_lo32, &nbytes_in_hi32,
                        &nbytes_out_lo32, &nbytes_out_hi32 );
   if (bzerr != BZ_OK) goto errhandler;

   if (ferror(zStream)) goto errhandler_io;
   ret = fflush ( zStream );
   if (ret == EOF) goto errhandler_io;
   if (zStream != stdout) {
      Int32 fd = fileno ( zStream );
      if (fd < 0) goto errhandler_io;
      applySavedFileAttrToOutputFile ( fd );
      ret = fclose ( zStream );
      outputHandleJustInCase = NULL;
      if (ret == EOF) goto errhandler_io;
   }
   outputHandleJustInCase = NULL;
   if (ferror(stream)) goto errhandler_io;
   ret = fclose ( stream );
   if (ret == EOF) goto errhandler_io;

   if (verbosity >= 1) {
      if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0) {
	 fprintf ( stderr, " no data compressed.\n");
      } else {
	 Char   buf_nin[32], buf_nout[32];
	 UInt64 nbytes_in,   nbytes_out;
	 double nbytes_in_d, nbytes_out_d;
	 uInt64_from_UInt32s ( &nbytes_in, 
			       nbytes_in_lo32, nbytes_in_hi32 );
	 uInt64_from_UInt32s ( &nbytes_out, 
			       nbytes_out_lo32, nbytes_out_hi32 );
	 nbytes_in_d  = uInt64_to_double ( &nbytes_in );
	 nbytes_out_d = uInt64_to_double ( &nbytes_out );
	 uInt64_toAscii ( buf_nin, &nbytes_in );
	 uInt64_toAscii ( buf_nout, &nbytes_out );
	 fprintf ( stderr, "%6.3f:1, %6.3f bits/byte, "
		   "%5.2f%% saved, %s in, %s out.\n",
		   nbytes_in_d / nbytes_out_d,
		   (8.0 * nbytes_out_d) / nbytes_in_d,
		   100.0 * (1.0 - nbytes_out_d / nbytes_in_d),
		   buf_nin,
		   buf_nout
		 );
      }
   }

   return;

   errhandler:
   BZ2_bzWriteClose64 ( &bzerr_dummy, bzf, 1, 
                        &nbytes_in_lo32, &nbytes_in_hi32,
                        &nbytes_out_lo32, &nbytes_out_hi32 );
   switch (bzerr) {
      case BZ_CONFIG_ERROR:
         configError(); break;
      case BZ_MEM_ERROR:
         outOfMemory (); break;
      case BZ_IO_ERROR:
         errhandler_io:
         ioError(); break;
      default:
         panic ( "compress:unexpected error" );
   }

   panic ( "compress:end" );
   /*notreached*/
}



/*---------------------------------------------*/
static 
Bool uncompressStream ( FILE *zStream, FILE *stream )
{
   BZFILE* bzf = NULL;
   Int32   bzerr, bzerr_dummy, ret, nread, streamNo, i;
   UChar   obuf[5000];
   UChar   unused[BZ_MAX_UNUSED];
   Int32   nUnused;
   void*   unusedTmpV;
   UChar*  unusedTmp;

   nUnused = 0;
   streamNo = 0;

   SET_BINARY_MODE(stream);
   SET_BINARY_MODE(zStream);

   if (ferror(stream)) goto errhandler_io;
   if (ferror(zStream)) goto errhandler_io;

   while (True) {

      bzf = BZ2_bzReadOpen ( 
               &bzerr, zStream, verbosity, 
               (int)smallMode, unused, nUnused
            );
      if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
      streamNo++;

      while (bzerr == BZ_OK) {
         nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
         if (bzerr == BZ_DATA_ERROR_MAGIC) goto trycat;
         if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0)
            fwrite ( obuf, sizeof(UChar), nread, stream );
         if (ferror(stream)) goto errhandler_io;
      }
      if (bzerr != BZ_STREAM_END) goto errhandler;

      BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
      if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );

      unusedTmp = (UChar*)unusedTmpV;
      for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];

      BZ2_bzReadClose ( &bzerr, bzf );
      if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );

      if (nUnused == 0 && myfeof(zStream)) break;
   }

   closeok:
   if (ferror(zStream)) goto errhandler_io;
   if (stream != stdout) {
      Int32 fd = fileno ( stream );
      if (fd < 0) goto errhandler_io;
      applySavedFileAttrToOutputFile ( fd );
   }
   ret = fclose ( zStream );
   if (ret == EOF) goto errhandler_io;

   if (ferror(stream)) goto errhandler_io;
   ret = fflush ( stream );
   if (ret != 0) goto errhandler_io;
   if (stream != stdout) {
      ret = fclose ( stream );
      outputHandleJustInCase = NULL;
      if (ret == EOF) goto errhandler_io;
   }
   outputHandleJustInCase = NULL;
   if (verbosity >= 2) fprintf ( stderr, "\n    " );
   return True;

   trycat: 
   if (forceOverwrite) {
      rewind(zStream);
      while (True) {
      	 if (myfeof(zStream)) break;
      	 nread = fread ( obuf, sizeof(UChar), 5000, zStream );
      	 if (ferror(zStream)) goto errhandler_io;
      	 if (nread > 0) fwrite ( obuf, sizeof(UChar), nread, stream );
      	 if (ferror(stream)) goto errhandler_io;
      }
      goto closeok;
   }
  
   errhandler:
   BZ2_bzReadClose ( &bzerr_dummy, bzf );
   switch (bzerr) {
      case BZ_CONFIG_ERROR:
         configError(); break;
      case BZ_IO_ERROR:
         errhandler_io:
         ioError(); break;
      case BZ_DATA_ERROR:
         crcError();
      case BZ_MEM_ERROR:
         outOfMemory();
      case BZ_UNEXPECTED_EOF:
         compressedStreamEOF();
      case BZ_DATA_ERROR_MAGIC:
         if (zStream != stdin) fclose(zStream);
         if (stream != stdout) fclose(stream);
         if (streamNo == 1) {
            return False;
         } else {
            if (noisy)
            fprintf ( stderr, 
                      "\n%s: %s: trailing garbage after EOF ignored\n",
                      progName, inName );
            return True;       
         }
      default:
         panic ( "decompress:unexpected error" );
   }

   panic ( "decompress:end" );
   return True; /*notreached*/
}


/*---------------------------------------------*/
static 
Bool testStream ( FILE *zStream )
{
   BZFILE* bzf = NULL;
   Int32   bzerr, bzerr_dummy, ret, nread, streamNo, i;
   UChar   obuf[5000];
   UChar   unused[BZ_MAX_UNUSED];
   Int32   nUnused;
   void*   unusedTmpV;
   UChar*  unusedTmp;

   nUnused = 0;
   streamNo = 0;

   SET_BINARY_MODE(zStream);
   if (ferror(zStream)) goto errhandler_io;

   while (True) {

      bzf = BZ2_bzReadOpen ( 
               &bzerr, zStream, verbosity, 
               (int)smallMode, unused, nUnused
            );
      if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
      streamNo++;

      while (bzerr == BZ_OK) {
         nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
         if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;
      }
      if (bzerr != BZ_STREAM_END) goto errhandler;

      BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
      if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );

      unusedTmp = (UChar*)unusedTmpV;
      for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];

      BZ2_bzReadClose ( &bzerr, bzf );
      if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
      if (nUnused == 0 && myfeof(zStream)) break;

   }

   if (ferror(zStream)) goto errhandler_io;
   ret = fclose ( zStream );
   if (ret == EOF) goto errhandler_io;

   if (verbosity >= 2) fprintf ( stderr, "\n    " );
   return True;

   errhandler:
   BZ2_bzReadClose ( &bzerr_dummy, bzf );
   if (verbosity == 0) 
      fprintf ( stderr, "%s: %s: ", progName, inName );
   switch (bzerr) {
      case BZ_CONFIG_ERROR:
         configError(); break;
      case BZ_IO_ERROR:
         errhandler_io:
         ioError(); break;
      case BZ_DATA_ERROR:
         fprintf ( stderr,
                   "data integrity (CRC) error in data\n" );
         return False;
      case BZ_MEM_ERROR:
         outOfMemory();
      case BZ_UNEXPECTED_EOF:
         fprintf ( stderr,
                   "file ends unexpectedly\n" );
         return False;
      case BZ_DATA_ERROR_MAGIC:
         if (zStream != stdin) fclose(zStream);
         if (streamNo == 1) {
          fprintf ( stderr, 
                    "bad magic number (file not created by bzip2)\n" );
            return False;
         } else {
            if (noisy)
            fprintf ( stderr, 
                      "trailing garbage after EOF ignored\n" );
            return True;       
         }
      default:
         panic ( "test:unexpected error" );
   }

   panic ( "test:end" );
   return True; /*notreached*/
}


/*---------------------------------------------------*/
/*--- Error [non-] handling grunge                ---*/
/*---------------------------------------------------*/

/*---------------------------------------------*/
static
void setExit ( Int32 v )
{
   if (v > exitValue) exitValue = v;
}


/*---------------------------------------------*/
static 
void cadvise ( void )
{
   if (noisy)
   fprintf (
      stderr,
      "\nIt is possible that the compressed file(s) have become corrupted.\n"
        "You can use the -tvv option to test integrity of such files.\n\n"
        "You can use the `bzip2recover' program to attempt to recover\n"
        "data from undamaged sections of corrupted files.\n\n"
    );
}


/*---------------------------------------------*/
static 
void showFileNames ( void )
{
   if (noisy)
   fprintf (
      stderr,
      "\tInput file = %s, output file = %s\n",
      inName, outName 
   );
}


/*---------------------------------------------*/
static 
void cleanUpAndFail ( Int32 ec )
{
   IntNative      retVal;
   struct MY_STAT statBuf;

   if ( srcMode == SM_F2F 
        && opMode != OM_TEST
        && deleteOutputOnInterrupt ) {

      /* Check whether input file still exists.  Delete output file
         only if input exists to avoid loss of data.  Joerg Prante, 5
         January 2002.  (JRS 06-Jan-2002: other changes in 1.0.2 mean
         this is less likely to happen.  But to be ultra-paranoid, we
         do the check anyway.)  */
      retVal = MY_STAT ( inName, &statBuf );
      if (retVal == 0) {
         if (noisy)
            fprintf ( stderr, 
                      "%s: Deleting output file %s, if it exists.\n",
                      progName, outName );
         if (outputHandleJustInCase != NULL)
            fclose ( outputHandleJustInCase );
         retVal = remove ( outName );
         if (retVal != 0)
            fprintf ( stderr,
                      "%s: WARNING: deletion of output file "
                      "(apparently) failed.\n",
                      progName );
      } else {
         fprintf ( stderr,
                   "%s: WARNING: deletion of output file suppressed\n",
                    progName );
         fprintf ( stderr,
                   "%s:    since input file no longer exists.  Output file\n",
                   progName );
         fprintf ( stderr,
                   "%s:    `%s' may be incomplete.\n",
                   progName, outName );
         fprintf ( stderr, 
                   "%s:    I suggest doing an integrity test (bzip2 -tv)"
                   " of it.\n",
                   progName );
      }
   }

   if (noisy && numFileNames > 0 && numFilesProcessed < numFileNames) {
      fprintf ( stderr, 
                "%s: WARNING: some files have not been processed:\n"
                "%s:    %d specified on command line, %d not processed yet.\n\n",
                progName, progName,
                numFileNames, numFileNames - numFilesProcessed );
   }
   setExit(ec);
   exit(exitValue);
}


/*---------------------------------------------*/
static 
void panic ( const Char* s )
{
   fprintf ( stderr,
             "\n%s: PANIC -- internal consistency error:\n"
             "\t%s\n"
             "\tThis is a BUG.  Please report it to me at:\n"
             "\tjseward@bzip.org\n",
             progName, s );
   showFileNames();
   cleanUpAndFail( 3 );
}


/*---------------------------------------------*/
static 
void crcError ( void )
{
   fprintf ( stderr,
             "\n%s: Data integrity error when decompressing.\n",
             progName );
   showFileNames();
   cadvise();
   cleanUpAndFail( 2 );
}


/*---------------------------------------------*/
static 
void compressedStreamEOF ( void )
{
  if (noisy) {
    fprintf ( stderr,
	      "\n%s: Compressed file ends unexpectedly;\n\t"
	      "perhaps it is corrupted?  *Possible* reason follows.\n",
	      progName );
    perror ( progName );
    showFileNames();
    cadvise();
  }
  cleanUpAndFail( 2 );
}


/*---------------------------------------------*/
static 
void ioError ( void )
{
   fprintf ( stderr,
             "\n%s: I/O or other error, bailing out.  "
             "Possible reason follows.\n",
             progName );
   perror ( progName );
   showFileNames();
   cleanUpAndFail( 1 );
}


/*---------------------------------------------*/
static 
void mySignalCatcher ( IntNative n )
{
   fprintf ( stderr,
             "\n%s: Control-C or similar caught, quitting.\n",
             progName );
   cleanUpAndFail(1);
}


/*---------------------------------------------*/
static 
void mySIGSEGVorSIGBUScatcher ( IntNative n )
{
   if (opMode == OM_Z)
      fprintf ( 
      stderr,
      "\n%s: Caught a SIGSEGV or SIGBUS whilst compressing.\n"
      "\n"
      "   Possible causes are (most likely first):\n"
      "   (1) This computer has unreliable memory or cache hardware\n"
      "       (a surprisingly common problem; try a different machine.)\n"
      "   (2) A bug in the compiler used to create this executable\n"
      "       (unlikely, if you didn't compile bzip2 yourself.)\n"
      "   (3) A real bug in bzip2 -- I hope this should never be the case.\n"
      "   The user's manual, Section 4.3, has more info on (1) and (2).\n"
      "   \n"
      "   If you suspect this is a bug in bzip2, or are unsure about (1)\n"
      "   or (2), feel free to report it to me at: jseward@bzip.org.\n"
      "   Section 4.3 of the user's manual describes the info a useful\n"
      "   bug report should have.  If the manual is available on your\n"
      "   system, please try and read it before mailing me.  If you don't\n"
      "   have the manual or can't be bothered to read it, mail me anyway.\n"
      "\n",
      progName );
      else
      fprintf ( 
      stderr,
      "\n%s: Caught a SIGSEGV or SIGBUS whilst decompressing.\n"
      "\n"
      "   Possible causes are (most likely first):\n"
      "   (1) The compressed data is corrupted, and bzip2's usual checks\n"
      "       failed to detect this.  Try bzip2 -tvv my_file.bz2.\n"
      "   (2) This computer has unreliable memory or cache hardware\n"
      "       (a surprisingly common problem; try a different machine.)\n"
      "   (3) A bug in the compiler used to create this executable\n"
      "       (unlikely, if you didn't compile bzip2 yourself.)\n"
      "   (4) A real bug in bzip2 -- I hope this should never be the case.\n"
      "   The user's manual, Section 4.3, has more info on (2) and (3).\n"
      "   \n"
      "   If you suspect this is a bug in bzip2, or are unsure about (2)\n"
      "   or (3), feel free to report it to me at: jseward@bzip.org.\n"
      "   Section 4.3 of the user's manual describes the info a useful\n"
      "   bug report should have.  If the manual is available on your\n"
      "   system, please try and read it before mailing me.  If you don't\n"
      "   have the manual or can't be bothered to read it, mail me anyway.\n"
      "\n",
      progName );

   showFileNames();
   if (opMode == OM_Z)
      cleanUpAndFail( 3 ); else
      { cadvise(); cleanUpAndFail( 2 ); }
}


/*---------------------------------------------*/
static 
void outOfMemory ( void )
{
   fprintf ( stderr,
             "\n%s: couldn't allocate enough memory\n",
             progName );
   showFileNames();
   cleanUpAndFail(1);
}


/*---------------------------------------------*/
static 
void configError ( void )
{
   fprintf ( stderr,
             "bzip2: I'm not configured correctly for this platform!\n"
             "\tI require Int32, Int16 and Char to have sizes\n"
             "\tof 4, 2 and 1 bytes to run properly, and they don't.\n"
             "\tProbably you can fix this by defining them correctly,\n"
             "\tand recompiling.  Bye!\n" );
   setExit(3);
   exit(exitValue);
}


/*---------------------------------------------------*/
/*--- The main driver machinery                   ---*/
/*---------------------------------------------------*/

/* All rather crufty.  The main problem is that input files
   are stat()d multiple times before use.  This should be
   cleaned up. 
*/

/*---------------------------------------------*/
static 
void pad ( Char *s )
{
   Int32 i;
   if ( (Int32)strlen(s) >= longestFileName ) return;
   for (i = 1; i <= longestFileName - (Int32)strlen(s); i++)
      fprintf ( stderr, " " );
}


/*---------------------------------------------*/
static 
void copyFileName ( Char* to, Char* from ) 
{
   if ( strlen(from) > FILE_NAME_LEN-10 )  {
      fprintf (
         stderr,
         "bzip2: file name\n`%s'\n"
         "is suspiciously (more than %d chars) long.\n"
         "Try using a reasonable file name instead.  Sorry! :-)\n",
         from, FILE_NAME_LEN-10
      );
      setExit(1);
      exit(exitValue);
   }

  strncpy(to,from,FILE_NAME_LEN-10);
  to[FILE_NAME_LEN-10]='\0';
}


/*---------------------------------------------*/
static 
Bool fileExists ( Char* name )
{
   FILE *tmp   = fopen ( name, "rb" );
   Bool exists = (tmp != NULL);
   if (tmp != NULL) fclose ( tmp );
   return exists;
}


/*---------------------------------------------*/
/* Open an output file safely with O_EXCL and good permissions.
   This avoids a race condition in versions < 1.0.2, in which
   the file was first opened and then had its interim permissions
   set safely.  We instead use open() to create the file with
   the interim permissions required. (--- --- rw-).

   For non-Unix platforms, if we are not worrying about
   security issues, simple this simply behaves like fopen.
*/
static
FILE* fopen_output_safely ( Char* name, const char* mode )
{
#  if BZ_UNIX
   FILE*     fp;
   IntNative fh;
   fh = open(name, O_WRONLY|O_CREAT|O_EXCL, S_IWUSR|S_IRUSR);
   if (fh == -1) return NULL;
   fp = fdopen(fh, mode);
   if (fp == NULL) close(fh);
   return fp;
#  else
   return fopen(name, mode);
#  endif
}


/*---------------------------------------------*/
/*--
  if in doubt, return True
--*/
static 
Bool notAStandardFile ( Char* name )
{
   IntNative      i;
   struct MY_STAT statBuf;

   i = MY_LSTAT ( name, &statBuf );
   if (i != 0) return True;
   if (MY_S_ISREG(statBuf.st_mode)) return False;
   return True;
}


/*---------------------------------------------*/
/*--
  rac 11/21/98 see if file has hard links to it
--*/
static 
Int32 countHardLinks ( Char* name )
{  
   IntNative      i;
   struct MY_STAT statBuf;

   i = MY_LSTAT ( name, &statBuf );
   if (i != 0) return 0;
   return (statBuf.st_nlink - 1);
}


/*---------------------------------------------*/
/* Copy modification date, access date, permissions and owner from the
   source to destination file.  We have to copy this meta-info off
   into fileMetaInfo before starting to compress / decompress it,
   because doing it afterwards means we get the wrong access time.

   To complicate matters, in compress() and decompress() below, the
   sequence of tests preceding the call to saveInputFileMetaInfo()
   involves calling fileExists(), which in turn establishes its result
   by attempting to fopen() the file, and if successful, immediately
   fclose()ing it again.  So we have to assume that the fopen() call
   does not cause the access time field to be updated.

   Reading of the man page for stat() (man 2 stat) on RedHat 7.2 seems
   to imply that merely doing open() will not affect the access time.
   Therefore we merely need to hope that the C library only does
   open() as a result of fopen(), and not any kind of read()-ahead
   cleverness.

   It sounds pretty fragile to me.  Whether this carries across
   robustly to arbitrary Unix-like platforms (or even works robustly
   on this one, RedHat 7.2) is unknown to me.  Nevertheless ...  
*/
#if BZ_UNIX
static 
struct MY_STAT fileMetaInfo;
#endif

static 
void saveInputFileMetaInfo ( Char *srcName )
{
#  if BZ_UNIX
   IntNative retVal;
   /* Note use of stat here, not lstat. */
   retVal = MY_STAT( srcName, &fileMetaInfo );
   ERROR_IF_NOT_ZERO ( retVal );
#  endif
}


static 
void applySavedTimeInfoToOutputFile ( Char *dstName )
{
#  if BZ_UNIX
   IntNative      retVal;
   struct utimbuf uTimBuf;

   uTimBuf.actime = fileMetaInfo.st_atime;
   uTimBuf.modtime = fileMetaInfo.st_mtime;

   retVal = utime ( dstName, &uTimBuf );
   ERROR_IF_NOT_ZERO ( retVal );
#  endif
}

static 
void applySavedFileAttrToOutputFile ( IntNative fd )
{
#  if BZ_UNIX
   IntNative retVal;

   retVal = fchmod ( fd, fileMetaInfo.st_mode );
   ERROR_IF_NOT_ZERO ( retVal );

   (void) fchown ( fd, fileMetaInfo.st_uid, fileMetaInfo.st_gid );
   /* chown() will in many cases return with EPERM, which can
      be safely ignored.
   */
#  endif
}


/*---------------------------------------------*/
static 
Bool containsDubiousChars ( Char* name )
{
#  if BZ_UNIX
   /* On unix, files can contain any characters and the file expansion
    * is performed by the shell.
    */
   return False;
#  else /* ! BZ_UNIX */
   /* On non-unix (Win* platforms), wildcard characters are not allowed in 
    * filenames.
    */
   for (; *name != '\0'; name++)
      if (*name == '?' || *name == '*') return True;
   return False;
#  endif /* BZ_UNIX */
}


/*---------------------------------------------*/
#define BZ_N_SUFFIX_PAIRS 4

const Char* zSuffix[BZ_N_SUFFIX_PAIRS] 
   = { ".bz2", ".bz", ".tbz2", ".tbz" };
const Char* unzSuffix[BZ_N_SUFFIX_PAIRS] 
   = { "", "", ".tar", ".tar" };

static 
Bool hasSuffix ( Char* s, const Char* suffix )
{
   Int32 ns = strlen(s);
   Int32 nx = strlen(suffix);
   if (ns < nx) return False;
   if (strcmp(s + ns - nx, suffix) == 0) return True;
   return False;
}

static 
Bool mapSuffix ( Char* name, 
                 const Char* oldSuffix, 
                 const Char* newSuffix )
{
   if (!hasSuffix(name,oldSuffix)) return False;
   name[strlen(name)-strlen(oldSuffix)] = 0;
   strcat ( name, newSuffix );
   return True;
}


/*---------------------------------------------*/
static 
void compress ( Char *name )
{
   FILE  *inStr;
   FILE  *outStr;
   Int32 n, i;
   struct MY_STAT statBuf;

   deleteOutputOnInterrupt = False;

   if (name == NULL && srcMode != SM_I2O)
      panic ( "compress: bad modes\n" );

   switch (srcMode) {
      case SM_I2O: 
         copyFileName ( inName, (Char*)"(stdin)" );
         copyFileName ( outName, (Char*)"(stdout)" ); 
         break;
      case SM_F2F: 
         copyFileName ( inName, name );
         copyFileName ( outName, name );
         strcat ( outName, ".bz2" ); 
         break;
      case SM_F2O: 
         copyFileName ( inName, name );
         copyFileName ( outName, (Char*)"(stdout)" ); 
         break;
   }

   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
      if (noisy)
      fprintf ( stderr, "%s: There are no files matching `%s'.\n",
                progName, inName );
      setExit(1);
      return;
   }
   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
      fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
                progName, inName, strerror(errno) );
      setExit(1);
      return;
   }
   for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) {
      if (hasSuffix(inName, zSuffix[i])) {
         if (noisy)
         fprintf ( stderr, 
                   "%s: Input file %s already has %s suffix.\n",
                   progName, inName, zSuffix[i] );
         setExit(1);
         return;
      }
   }
   if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
      MY_STAT(inName, &statBuf);
      if ( MY_S_ISDIR(statBuf.st_mode) ) {
         fprintf( stderr,
                  "%s: Input file %s is a directory.\n",
                  progName,inName);
         setExit(1);
         return;
      }
   }
   if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
      if (noisy)
      fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
                progName, inName );
      setExit(1);
      return;
   }
   if ( srcMode == SM_F2F && fileExists ( outName ) ) {
      if (forceOverwrite) {
	 remove(outName);
      } else {
	 fprintf ( stderr, "%s: Output file %s already exists.\n",
		   progName, outName );
	 setExit(1);
	 return;
      }
   }
   if ( srcMode == SM_F2F && !forceOverwrite &&
        (n=countHardLinks ( inName )) > 0) {
      fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
                progName, inName, n, n > 1 ? "s" : "" );
      setExit(1);
      return;
   }

   if ( srcMode == SM_F2F ) {
      /* Save the file's meta-info before we open it.  Doing it later
         means we mess up the access times. */
      saveInputFileMetaInfo ( inName );
   }

   switch ( srcMode ) {

      case SM_I2O:
         inStr = stdin;
         outStr = stdout;
         if ( isatty ( fileno ( stdout ) ) ) {
            fprintf ( stderr,
                      "%s: I won't write compressed data to a terminal.\n",
                      progName );
            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
                              progName, progName );
            setExit(1);
            return;
         };
         break;

      case SM_F2O:
         inStr = fopen ( inName, "rb" );
         outStr = stdout;
         if ( isatty ( fileno ( stdout ) ) ) {
            fprintf ( stderr,
                      "%s: I won't write compressed data to a terminal.\n",
                      progName );
            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
                              progName, progName );
            if ( inStr != NULL ) fclose ( inStr );
            setExit(1);
            return;
         };
         if ( inStr == NULL ) {
            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
                      progName, inName, strerror(errno) );
            setExit(1);
            return;
         };
         break;

      case SM_F2F:
         inStr = fopen ( inName, "rb" );
         outStr = fopen_output_safely ( outName, "wb" );
         if ( outStr == NULL) {
            fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
                      progName, outName, strerror(errno) );
            if ( inStr != NULL ) fclose ( inStr );
            setExit(1);
            return;
         }
         if ( inStr == NULL ) {
            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
                      progName, inName, strerror(errno) );
            if ( outStr != NULL ) fclose ( outStr );
            setExit(1);
            return;
         };
         break;

      default:
         panic ( "compress: bad srcMode" );
         break;
   }

   if (verbosity >= 1) {
      fprintf ( stderr,  "  %s: ", inName );
      pad ( inName );
      fflush ( stderr );
   }

   /*--- Now the input and output handles are sane.  Do the Biz. ---*/
   outputHandleJustInCase = outStr;
   deleteOutputOnInterrupt = True;
   compressStream ( inStr, outStr );
   outputHandleJustInCase = NULL;

   /*--- If there was an I/O error, we won't get here. ---*/
   if ( srcMode == SM_F2F ) {
      applySavedTimeInfoToOutputFile ( outName );
      deleteOutputOnInterrupt = False;
      if ( !keepInputFiles ) {
         IntNative retVal = remove ( inName );
         ERROR_IF_NOT_ZERO ( retVal );
      }
   }

   deleteOutputOnInterrupt = False;
}


/*---------------------------------------------*/
static 
void uncompress ( Char *name )
{
   FILE  *inStr;
   FILE  *outStr;
   Int32 n, i;
   Bool  magicNumberOK;
   Bool  cantGuess;
   struct MY_STAT statBuf;

   deleteOutputOnInterrupt = False;

   if (name == NULL && srcMode != SM_I2O)
      panic ( "uncompress: bad modes\n" );

   cantGuess = False;
   switch (srcMode) {
      case SM_I2O: 
         copyFileName ( inName, (Char*)"(stdin)" );
         copyFileName ( outName, (Char*)"(stdout)" ); 
         break;
      case SM_F2F: 
         copyFileName ( inName, name );
         copyFileName ( outName, name );
         for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++)
            if (mapSuffix(outName,zSuffix[i],unzSuffix[i]))
               goto zzz; 
         cantGuess = True;
         strcat ( outName, ".out" );
         break;
      case SM_F2O: 
         copyFileName ( inName, name );
         copyFileName ( outName, (Char*)"(stdout)" ); 
         break;
   }

   zzz:
   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
      if (noisy)
      fprintf ( stderr, "%s: There are no files matching `%s'.\n",
                progName, inName );
      setExit(1);
      return;
   }
   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
      fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
                progName, inName, strerror(errno) );
      setExit(1);
      return;
   }
   if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
      MY_STAT(inName, &statBuf);
      if ( MY_S_ISDIR(statBuf.st_mode) ) {
         fprintf( stderr,
                  "%s: Input file %s is a directory.\n",
                  progName,inName);
         setExit(1);
         return;
      }
   }
   if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
      if (noisy)
      fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
                progName, inName );
      setExit(1);
      return;
   }
   if ( /* srcMode == SM_F2F implied && */ cantGuess ) {
      if (noisy)
      fprintf ( stderr, 
                "%s: Can't guess original name for %s -- using %s\n",
                progName, inName, outName );
      /* just a warning, no return */
   }   
   if ( srcMode == SM_F2F && fileExists ( outName ) ) {
      if (forceOverwrite) {
	remove(outName);
      } else {
        fprintf ( stderr, "%s: Output file %s already exists.\n",
                  progName, outName );
        setExit(1);
        return;
      }
   }
   if ( srcMode == SM_F2F && !forceOverwrite &&
        (n=countHardLinks ( inName ) ) > 0) {
      fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
                progName, inName, n, n > 1 ? "s" : "" );
      setExit(1);
      return;
   }

   if ( srcMode == SM_F2F ) {
      /* Save the file's meta-info before we open it.  Doing it later
         means we mess up the access times. */
      saveInputFileMetaInfo ( inName );
   }

   switch ( srcMode ) {

      case SM_I2O:
         inStr = stdin;
         outStr = stdout;
         if ( isatty ( fileno ( stdin ) ) ) {
            fprintf ( stderr,
                      "%s: I won't read compressed data from a terminal.\n",
                      progName );
            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
                              progName, progName );
            setExit(1);
            return;
         };
         break;

      case SM_F2O:
         inStr = fopen ( inName, "rb" );
         outStr = stdout;
         if ( inStr == NULL ) {
            fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
                      progName, inName, strerror(errno) );
            if ( inStr != NULL ) fclose ( inStr );
            setExit(1);
            return;
         };
         break;

      case SM_F2F:
         inStr = fopen ( inName, "rb" );
         outStr = fopen_output_safely ( outName, "wb" );
         if ( outStr == NULL) {
            fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
                      progName, outName, strerror(errno) );
            if ( inStr != NULL ) fclose ( inStr );
            setExit(1);
            return;
         }
         if ( inStr == NULL ) {
            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
                      progName, inName, strerror(errno) );
            if ( outStr != NULL ) fclose ( outStr );
            setExit(1);
            return;
         };
         break;

      default:
         panic ( "uncompress: bad srcMode" );
         break;
   }

   if (verbosity >= 1) {
      fprintf ( stderr, "  %s: ", inName );
      pad ( inName );
      fflush ( stderr );
   }

   /*--- Now the input and output handles are sane.  Do the Biz. ---*/
   outputHandleJustInCase = outStr;
   deleteOutputOnInterrupt = True;
   magicNumberOK = uncompressStream ( inStr, outStr );
   outputHandleJustInCase = NULL;

   /*--- If there was an I/O error, we won't get here. ---*/
   if ( magicNumberOK ) {
      if ( srcMode == SM_F2F ) {
         applySavedTimeInfoToOutputFile ( outName );
         deleteOutputOnInterrupt = False;
         if ( !keepInputFiles ) {
            IntNative retVal = remove ( inName );
            ERROR_IF_NOT_ZERO ( retVal );
         }
      }
   } else {
      unzFailsExist = True;
      deleteOutputOnInterrupt = False;
      if ( srcMode == SM_F2F ) {
         IntNative retVal = remove ( outName );
         ERROR_IF_NOT_ZERO ( retVal );
      }
   }
   deleteOutputOnInterrupt = False;

   if ( magicNumberOK ) {
      if (verbosity >= 1)
         fprintf ( stderr, "done\n" );
   } else {
      setExit(2);
      if (verbosity >= 1)
         fprintf ( stderr, "not a bzip2 file.\n" ); else
         fprintf ( stderr,
                   "%s: %s is not a bzip2 file.\n",
                   progName, inName );
   }

}


/*---------------------------------------------*/
static 
void testf ( Char *name )
{
   FILE *inStr;
   Bool allOK;
   struct MY_STAT statBuf;

   deleteOutputOnInterrupt = False;

   if (name == NULL && srcMode != SM_I2O)
      panic ( "testf: bad modes\n" );

   copyFileName ( outName, (Char*)"(none)" );
   switch (srcMode) {
      case SM_I2O: copyFileName ( inName, (Char*)"(stdin)" ); break;
      case SM_F2F: copyFileName ( inName, name ); break;
      case SM_F2O: copyFileName ( inName, name ); break;
   }

   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
      if (noisy)
      fprintf ( stderr, "%s: There are no files matching `%s'.\n",
                progName, inName );
      setExit(1);
      return;
   }
   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
      fprintf ( stderr, "%s: Can't open input %s: %s.\n",
                progName, inName, strerror(errno) );
      setExit(1);
      return;
   }
   if ( srcMode != SM_I2O ) {
      MY_STAT(inName, &statBuf);
      if ( MY_S_ISDIR(statBuf.st_mode) ) {
         fprintf( stderr,
                  "%s: Input file %s is a directory.\n",
                  progName,inName);
         setExit(1);
         return;
      }
   }

   switch ( srcMode ) {

      case SM_I2O:
         if ( isatty ( fileno ( stdin ) ) ) {
            fprintf ( stderr,
                      "%s: I won't read compressed data from a terminal.\n",
                      progName );
            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
                              progName, progName );
            setExit(1);
            return;
         };
         inStr = stdin;
         break;

      case SM_F2O: case SM_F2F:
         inStr = fopen ( inName, "rb" );
         if ( inStr == NULL ) {
            fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
                      progName, inName, strerror(errno) );
            setExit(1);
            return;
         };
         break;

      default:
         panic ( "testf: bad srcMode" );
         break;
   }

   if (verbosity >= 1) {
      fprintf ( stderr, "  %s: ", inName );
      pad ( inName );
      fflush ( stderr );
   }

   /*--- Now the input handle is sane.  Do the Biz. ---*/
   outputHandleJustInCase = NULL;
   allOK = testStream ( inStr );

   if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" );
   if (!allOK) testFailsExist = True;
}


/*---------------------------------------------*/
static 
void license ( void )
{
   fprintf ( stderr,

    "bzip2, a block-sorting file compressor.  "
    "Version %s.\n"
    "   \n"
    "   Copyright (C) 1996-2010 by Julian Seward.\n"
    "   \n"
    "   This program is free software; you can redistribute it and/or modify\n"
    "   it under the terms set out in the LICENSE file, which is included\n"
    "   in the bzip2-1.0.6 source distribution.\n"
    "   \n"
    "   This program is distributed in the hope that it will be useful,\n"
    "   but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
    "   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
    "   LICENSE file for more details.\n"
    "   \n",
    BZ2_bzlibVersion()
   );
}


/*---------------------------------------------*/
static 
void usage ( Char *fullProgName )
{
   fprintf (
      stderr,
      "bzip2, a block-sorting file compressor.  "
      "Version %s.\n"
      "\n   usage: %s [flags and input files in any order]\n"
      "\n"
      "   -h --help           print this message\n"
      "   -d --decompress     force decompression\n"
      "   -z --compress       force compression\n"
      "   -k --keep           keep (don't delete) input files\n"
      "   -f --force          overwrite existing output files\n"
      "   -t --test           test compressed file integrity\n"
      "   -c --stdout         output to standard out\n"
      "   -q --quiet          suppress noncritical error messages\n"
      "   -v --verbose        be verbose (a 2nd -v gives more)\n"
      "   -L --license        display software version & license\n"
      "   -V --version        display software version & license\n"
      "   -s --small          use less memory (at most 2500k)\n"
      "   -1 .. -9            set block size to 100k .. 900k\n"
      "   --fast              alias for -1\n"
      "   --best              alias for -9\n"
      "\n"
      "   If invoked as `bzip2', default action is to compress.\n"
      "              as `bunzip2',  default action is to decompress.\n"
      "              as `bzcat', default action is to decompress to stdout.\n"
      "\n"
      "   If no file names are given, bzip2 compresses or decompresses\n"
      "   from standard input to standard output.  You can combine\n"
      "   short flags, so `-v -4' means the same as -v4 or -4v, &c.\n"
#     if BZ_UNIX
      "\n"
#     endif
      ,

      BZ2_bzlibVersion(),
      fullProgName
   );
}


/*---------------------------------------------*/
static 
void redundant ( Char* flag )
{
   fprintf ( 
      stderr, 
      "%s: %s is redundant in versions 0.9.5 and above\n",
      progName, flag );
}


/*---------------------------------------------*/
/*--
  All the garbage from here to main() is purely to
  implement a linked list of command-line arguments,
  into which main() copies argv[1 .. argc-1].

  The purpose of this exercise is to facilitate 
  the expansion of wildcard characters * and ? in 
  filenames for OSs which don't know how to do it
  themselves, like MSDOS, Windows 95 and NT.

  The actual Dirty Work is done by the platform-
  specific macro APPEND_FILESPEC.
--*/

typedef
   struct zzzz {
      Char        *name;
      struct zzzz *link;
   }
   Cell;


/*---------------------------------------------*/
static 
void *myMalloc ( Int32 n )
{
   void* p;

   p = malloc ( (size_t)n );
   if (p == NULL) outOfMemory ();
   return p;
}


/*---------------------------------------------*/
static 
Cell *mkCell ( void )
{
   Cell *c;

   c = (Cell*) myMalloc ( sizeof ( Cell ) );
   c->name = NULL;
   c->link = NULL;
   return c;
}


/*---------------------------------------------*/
static 
Cell *snocString ( Cell *root, Char *name )
{
   if (root == NULL) {
      Cell *tmp = mkCell();
      tmp->name = (Char*) myMalloc ( 5 + strlen(name) );
      strcpy ( tmp->name, name );
      return tmp;
   } else {
      Cell *tmp = root;
      while (tmp->link != NULL) tmp = tmp->link;
      tmp->link = snocString ( tmp->link, name );
      return root;
   }
}


/*---------------------------------------------*/
static 
void addFlagsFromEnvVar ( Cell** argList, Char* varName ) 
{
   Int32 i, j, k;
   Char *envbase, *p;

   envbase = getenv(varName);
   if (envbase != NULL) {
      p = envbase;
      i = 0;
      while (True) {
         if (p[i] == 0) break;
         p += i;
         i = 0;
         while (isspace((Int32)(p[0]))) p++;
         while (p[i] != 0 && !isspace((Int32)(p[i]))) i++;
         if (i > 0) {
            k = i; if (k > FILE_NAME_LEN-10) k = FILE_NAME_LEN-10;
            for (j = 0; j < k; j++) tmpName[j] = p[j];
            tmpName[k] = 0;
            APPEND_FLAG(*argList, tmpName);
         }
      }
   }
}


/*---------------------------------------------*/
#define ISFLAG(s) (strcmp(aa->name, (s))==0)

IntNative main ( IntNative argc, Char *argv[] )
{
   Int32  i, j;
   Char   *tmp;
   Cell   *argList;
   Cell   *aa;
   Bool   decode;

   /*-- Be really really really paranoid :-) --*/
   if (sizeof(Int32) != 4 || sizeof(UInt32) != 4  ||
       sizeof(Int16) != 2 || sizeof(UInt16) != 2  ||
       sizeof(Char)  != 1 || sizeof(UChar)  != 1)
      configError();

   /*-- Initialise --*/
   outputHandleJustInCase  = NULL;
   smallMode               = False;
   keepInputFiles          = False;
   forceOverwrite          = False;
   noisy                   = True;
   verbosity               = 0;
   blockSize100k           = 9;
   testFailsExist          = False;
   unzFailsExist           = False;
   numFileNames            = 0;
   numFilesProcessed       = 0;
   workFactor              = 30;
   deleteOutputOnInterrupt = False;
   exitValue               = 0;
   i = j = 0; /* avoid bogus warning from egcs-1.1.X */

   /*-- Set up signal handlers for mem access errors --*/
   signal (SIGSEGV, mySIGSEGVorSIGBUScatcher);
#  if BZ_UNIX
#  ifndef __DJGPP__
   signal (SIGBUS,  mySIGSEGVorSIGBUScatcher);
#  endif
#  endif

   copyFileName ( inName,  (Char*)"(none)" );
   copyFileName ( outName, (Char*)"(none)" );

   copyFileName ( progNameReally, argv[0] );
   progName = &progNameReally[0];
   for (tmp = &progNameReally[0]; *tmp != '\0'; tmp++)
      if (*tmp == PATH_SEP) progName = tmp + 1;


   /*-- Copy flags from env var BZIP2, and 
        expand filename wildcards in arg list.
   --*/
   argList = NULL;
   addFlagsFromEnvVar ( &argList,  (Char*)"BZIP2" );
   addFlagsFromEnvVar ( &argList,  (Char*)"BZIP" );
   for (i = 1; i <= argc-1; i++)
      APPEND_FILESPEC(argList, argv[i]);


   /*-- Find the length of the longest filename --*/
   longestFileName = 7;
   numFileNames    = 0;
   decode          = True;
   for (aa = argList; aa != NULL; aa = aa->link) {
      if (ISFLAG("--")) { decode = False; continue; }
      if (aa->name[0] == '-' && decode) continue;
      numFileNames++;
      if (longestFileName < (Int32)strlen(aa->name) )
         longestFileName = (Int32)strlen(aa->name);
   }


   /*-- Determine source modes; flag handling may change this too. --*/
   if (numFileNames == 0)
      srcMode = SM_I2O; else srcMode = SM_F2F;


   /*-- Determine what to do (compress/uncompress/test/cat). --*/
   /*-- Note that subsequent flag handling may change this. --*/
   opMode = OM_Z;

   if ( (strstr ( progName, "unzip" ) != 0) ||
        (strstr ( progName, "UNZIP" ) != 0) )
      opMode = OM_UNZ;

   if ( (strstr ( progName, "z2cat" ) != 0) ||
        (strstr ( progName, "Z2CAT" ) != 0) ||
        (strstr ( progName, "zcat" ) != 0)  ||
        (strstr ( progName, "ZCAT" ) != 0) )  {
      opMode = OM_UNZ;
      srcMode = (numFileNames == 0) ? SM_I2O : SM_F2O;
   }


   /*-- Look at the flags. --*/
   for (aa = argList; aa != NULL; aa = aa->link) {
      if (ISFLAG("--")) break;
      if (aa->name[0] == '-' && aa->name[1] != '-') {
         for (j = 1; aa->name[j] != '\0'; j++) {
            switch (aa->name[j]) {
               case 'c': srcMode          = SM_F2O; break;
               case 'd': opMode           = OM_UNZ; break;
               case 'z': opMode           = OM_Z; break;
               case 'f': forceOverwrite   = True; break;
               case 't': opMode           = OM_TEST; break;
               case 'k': keepInputFiles   = True; break;
               case 's': smallMode        = True; break;
               case 'q': noisy            = False; break;
               case '1': blockSize100k    = 1; break;
               case '2': blockSize100k    = 2; break;
               case '3': blockSize100k    = 3; break;
               case '4': blockSize100k    = 4; break;
               case '5': blockSize100k    = 5; break;
               case '6': blockSize100k    = 6; break;
               case '7': blockSize100k    = 7; break;
               case '8': blockSize100k    = 8; break;
               case '9': blockSize100k    = 9; break;
               case 'V':
               case 'L': license();            break;
               case 'v': verbosity++; break;
               case 'h': usage ( progName );
                         exit ( 0 );
                         break;
               default:  fprintf ( stderr, "%s: Bad flag `%s'\n",
                                   progName, aa->name );
                         usage ( progName );
                         exit ( 1 );
                         break;
            }
         }
      }
   }
   
   /*-- And again ... --*/
   for (aa = argList; aa != NULL; aa = aa->link) {
      if (ISFLAG("--")) break;
      if (ISFLAG("--stdout"))            srcMode          = SM_F2O;  else
      if (ISFLAG("--decompress"))        opMode           = OM_UNZ;  else
      if (ISFLAG("--compress"))          opMode           = OM_Z;    else
      if (ISFLAG("--force"))             forceOverwrite   = True;    else
      if (ISFLAG("--test"))              opMode           = OM_TEST; else
      if (ISFLAG("--keep"))              keepInputFiles   = True;    else
      if (ISFLAG("--small"))             smallMode        = True;    else
      if (ISFLAG("--quiet"))             noisy            = False;   else
      if (ISFLAG("--version"))           license();                  else
      if (ISFLAG("--license"))           license();                  else
      if (ISFLAG("--exponential"))       workFactor = 1;             else 
      if (ISFLAG("--repetitive-best"))   redundant(aa->name);        else
      if (ISFLAG("--repetitive-fast"))   redundant(aa->name);        else
      if (ISFLAG("--fast"))              blockSize100k = 1;          else
      if (ISFLAG("--best"))              blockSize100k = 9;          else
      if (ISFLAG("--verbose"))           verbosity++;                else
      if (ISFLAG("--help"))              { usage ( progName ); exit ( 0 ); }
         else
         if (strncmp ( aa->name, "--", 2) == 0) {
            fprintf ( stderr, "%s: Bad flag `%s'\n", progName, aa->name );
            usage ( progName );
            exit ( 1 );
         }
   }

   if (verbosity > 4) verbosity = 4;
   if (opMode == OM_Z && smallMode && blockSize100k > 2) 
      blockSize100k = 2;

   if (opMode == OM_TEST && srcMode == SM_F2O) {
      fprintf ( stderr, "%s: -c and -t cannot be used together.\n",
                progName );
      exit ( 1 );
   }

   if (srcMode == SM_F2O && numFileNames == 0)
      srcMode = SM_I2O;

   if (opMode != OM_Z) blockSize100k = 0;

   if (srcMode == SM_F2F) {
      signal (SIGINT,  mySignalCatcher);
      signal (SIGTERM, mySignalCatcher);
#     if BZ_UNIX
      signal (SIGHUP,  mySignalCatcher);
#     endif
   }

   if (opMode == OM_Z) {
     if (srcMode == SM_I2O) {
        compress ( NULL );
     } else {
        decode = True;
        for (aa = argList; aa != NULL; aa = aa->link) {
           if (ISFLAG("--")) { decode = False; continue; }
           if (aa->name[0] == '-' && decode) continue;
           numFilesProcessed++;
           compress ( aa->name );
        }
     }
   } 
   else

   if (opMode == OM_UNZ) {
      unzFailsExist = False;
      if (srcMode == SM_I2O) {
         uncompress ( NULL );
      } else {
         decode = True;
         for (aa = argList; aa != NULL; aa = aa->link) {
            if (ISFLAG("--")) { decode = False; continue; }
            if (aa->name[0] == '-' && decode) continue;
            numFilesProcessed++;
            uncompress ( aa->name );
         }      
      }
      if (unzFailsExist) { 
         setExit(2); 
         exit(exitValue);
      }
   } 

   else {
      testFailsExist = False;
      if (srcMode == SM_I2O) {
         testf ( NULL );
      } else {
         decode = True;
         for (aa = argList; aa != NULL; aa = aa->link) {
	    if (ISFLAG("--")) { decode = False; continue; }
            if (aa->name[0] == '-' && decode) continue;
            numFilesProcessed++;
            testf ( aa->name );
	 }
      }
      if (testFailsExist && noisy) {
         fprintf ( stderr,
           "\n"
           "You can use the `bzip2recover' program to attempt to recover\n"
           "data from undamaged sections of corrupted files.\n\n"
         );
         setExit(2);
         exit(exitValue);
      }
   }

   /* Free the argument list memory to mollify leak detectors 
      (eg) Purify, Checker.  Serves no other useful purpose.
   */
   aa = argList;
   while (aa != NULL) {
      Cell* aa2 = aa->link;
      if (aa->name != NULL) free(aa->name);
      free(aa);
      aa = aa2;
   }

   return exitValue;
}


/*-----------------------------------------------------------*/
/*--- end                                         bzip2.c ---*/
/*-----------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/bzip2.txt000066400000000000000000000450541211610345200217420ustar00rootroot00000000000000
NAME
       bzip2, bunzip2 - a block-sorting file compressor, v1.0.6
       bzcat - decompresses files to stdout
       bzip2recover - recovers data from damaged bzip2 files


SYNOPSIS
       bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ...  ]
       bunzip2 [ -fkvsVL ] [ filenames ...  ]
       bzcat [ -s ] [ filenames ...  ]
       bzip2recover filename


DESCRIPTION
       bzip2  compresses  files  using  the Burrows-Wheeler block
       sorting text compression algorithm,  and  Huffman  coding.
       Compression  is  generally  considerably  better than that
       achieved by more conventional LZ77/LZ78-based compressors,
       and  approaches  the performance of the PPM family of sta-
       tistical compressors.

       The command-line options are deliberately very similar  to
       those of GNU gzip, but they are not identical.

       bzip2  expects  a list of file names to accompany the com-
       mand-line flags.  Each file is replaced  by  a  compressed
       version  of  itself,  with  the  name "original_name.bz2".
       Each compressed file has the same modification date,  per-
       missions, and, when possible, ownership as the correspond-
       ing original, so that these properties  can  be  correctly
       restored  at  decompression  time.   File name handling is
       naive in the sense that there is no mechanism for preserv-
       ing  original file names, permissions, ownerships or dates
       in filesystems which lack these concepts, or have  serious
       file name length restrictions, such as MS-DOS.

       bzip2  and  bunzip2 will by default not overwrite existing
       files.  If you want this to happen, specify the -f flag.

       If no file names  are  specified,  bzip2  compresses  from
       standard  input  to  standard output.  In this case, bzip2
       will decline to write compressed output to a terminal,  as
       this  would  be  entirely  incomprehensible  and therefore
       pointless.

       bunzip2 (or bzip2 -d) decompresses  all  specified  files.
       Files which were not created by bzip2 will be detected and
       ignored, and a warning issued.  bzip2  attempts  to  guess
       the  filename  for  the decompressed file from that of the
       compressed file as follows:

              filename.bz2    becomes   filename
              filename.bz     becomes   filename
              filename.tbz2   becomes   filename.tar
              filename.tbz    becomes   filename.tar
              anyothername    becomes   anyothername.out

       If the file does not end in one of the recognised endings,
       .bz2,  .bz,  .tbz2 or .tbz, bzip2 complains that it cannot
       guess the name of the original file, and uses the original
       name with .out appended.

       As  with compression, supplying no filenames causes decom-
       pression from standard input to standard output.

       bunzip2 will correctly decompress a file which is the con-
       catenation of two or more compressed files.  The result is
       the concatenation of the corresponding uncompressed files.
       Integrity testing (-t) of concatenated compressed files is
       also supported.

       You can also compress or decompress files to the  standard
       output  by giving the -c flag.  Multiple files may be com-
       pressed and decompressed like this.  The resulting outputs
       are  fed  sequentially to stdout.  Compression of multiple
       files in this manner generates a stream containing  multi-
       ple compressed file representations.  Such a stream can be
       decompressed correctly only  by  bzip2  version  0.9.0  or
       later.   Earlier  versions of bzip2 will stop after decom-
       pressing the first file in the stream.

       bzcat (or bzip2 -dc) decompresses all specified  files  to
       the standard output.

       bzip2  will  read arguments from the environment variables
       BZIP2 and BZIP, in  that  order,  and  will  process  them
       before  any  arguments  read  from the command line.  This
       gives a convenient way to supply default arguments.

       Compression is always performed, even  if  the  compressed
       file  is slightly larger than the original.  Files of less
       than about one hundred bytes tend to get larger, since the
       compression  mechanism  has  a  constant  overhead  in the
       region of 50 bytes.  Random data (including the output  of
       most  file  compressors)  is  coded at about 8.05 bits per
       byte, giving an expansion of around 0.5%.

       As a self-check for your  protection,  bzip2  uses  32-bit
       CRCs  to make sure that the decompressed version of a file
       is identical to the original.  This guards against corrup-
       tion  of  the compressed data, and against undetected bugs
       in bzip2 (hopefully very unlikely).  The chances  of  data
       corruption  going  undetected  is  microscopic,  about one
       chance in four billion for each file processed.  Be aware,
       though,  that  the  check occurs upon decompression, so it
       can only tell you that something is wrong.  It can't  help
       you  recover  the original uncompressed data.  You can use
       bzip2recover to try to recover data from damaged files.

       Return values: 0 for a normal exit,  1  for  environmental
       problems  (file not found, invalid flags, I/O errors, &c),
       2 to indicate a corrupt compressed file, 3 for an internal
       consistency error (eg, bug) which caused bzip2 to panic.


OPTIONS
       -c --stdout
              Compress or decompress to standard output.

       -d --decompress
              Force  decompression.  bzip2, bunzip2 and bzcat are
              really the same program,  and  the  decision  about
              what  actions to take is done on the basis of which
              name is used.  This flag overrides that  mechanism,
              and forces bzip2 to decompress.

       -z --compress
              The   complement   to   -d:   forces   compression,
              regardless of the invocation name.

       -t --test
              Check integrity of the specified file(s), but don't
              decompress  them.   This  really  performs  a trial
              decompression and throws away the result.

       -f --force
              Force overwrite of output files.   Normally,  bzip2
              will  not  overwrite  existing  output files.  Also
              forces bzip2 to break hard links to files, which it
              otherwise wouldn't do.

              bzip2  normally  declines to decompress files which
              don't have the  correct  magic  header  bytes.   If
              forced  (-f),  however,  it  will  pass  such files
              through unmodified.  This is how GNU gzip  behaves.

       -k --keep
              Keep  (don't delete) input files during compression
              or decompression.

       -s --small
              Reduce memory usage, for compression, decompression
              and  testing.   Files  are  decompressed and tested
              using a modified algorithm which only requires  2.5
              bytes  per  block byte.  This means any file can be
              decompressed in 2300k of memory,  albeit  at  about
              half the normal speed.

              During  compression,  -s  selects  a  block size of
              200k, which limits memory use to  around  the  same
              figure,  at  the expense of your compression ratio.
              In short, if your  machine  is  low  on  memory  (8
              megabytes  or  less),  use  -s for everything.  See
              MEMORY MANAGEMENT below.

       -q --quiet
              Suppress non-essential warning messages.   Messages
              pertaining  to I/O errors and other critical events
              will not be suppressed.

       -v --verbose
              Verbose mode -- show the compression ratio for each
              file  processed.   Further  -v's  increase the ver-
              bosity level, spewing out lots of information which
              is primarily of interest for diagnostic purposes.

       -L --license -V --version
              Display  the  software  version,  license terms and
              conditions.

       -1 (or --fast) to -9 (or --best)
              Set the block size to 100 k, 200 k ..  900  k  when
              compressing.   Has  no  effect  when decompressing.
              See MEMORY MANAGEMENT below.  The --fast and --best
              aliases  are  primarily for GNU gzip compatibility.
              In particular, --fast doesn't make things  signifi-
              cantly  faster.   And  --best  merely  selects  the
              default behaviour.

       --     Treats all subsequent arguments as file names, even
              if they start with a dash.  This is so you can han-
              dle files with names beginning  with  a  dash,  for
              example: bzip2 -- -myfilename.

       --repetitive-fast --repetitive-best
              These  flags  are  redundant  in versions 0.9.5 and
              above.  They provided some coarse control over  the
              behaviour  of the sorting algorithm in earlier ver-
              sions, which was sometimes useful.  0.9.5 and above
              have  an  improved  algorithm  which  renders these
              flags irrelevant.


MEMORY MANAGEMENT
       bzip2 compresses large files in blocks.   The  block  size
       affects  both  the  compression  ratio  achieved,  and the
       amount of memory needed for compression and decompression.
       The  flags  -1  through  -9  specify  the block size to be
       100,000 bytes through 900,000 bytes (the default)  respec-
       tively.   At  decompression  time, the block size used for
       compression is read from  the  header  of  the  compressed
       file, and bunzip2 then allocates itself just enough memory
       to decompress the file.  Since block sizes are  stored  in
       compressed  files,  it follows that the flags -1 to -9 are
       irrelevant to and so ignored during decompression.

       Compression and decompression requirements, in bytes,  can
       be estimated as:

              Compression:   400k + ( 8 x block size )

              Decompression: 100k + ( 4 x block size ), or
                             100k + ( 2.5 x block size )

       Larger  block  sizes  give  rapidly  diminishing  marginal
       returns.  Most of the compression comes from the first two
       or  three hundred k of block size, a fact worth bearing in
       mind when using bzip2  on  small  machines.   It  is  also
       important  to  appreciate  that  the  decompression memory
       requirement is set at compression time by  the  choice  of
       block size.

       For  files  compressed  with  the default 900k block size,
       bunzip2 will require about 3700 kbytes to decompress.   To
       support decompression of any file on a 4 megabyte machine,
       bunzip2 has an option to  decompress  using  approximately
       half this amount of memory, about 2300 kbytes.  Decompres-
       sion speed is also halved, so you should use  this  option
       only where necessary.  The relevant flag is -s.

       In general, try and use the largest block size memory con-
       straints  allow,  since  that  maximises  the  compression
       achieved.   Compression and decompression speed are virtu-
       ally unaffected by block size.

       Another significant point applies to files which fit in  a
       single  block  --  that  means  most files you'd encounter
       using a large block  size.   The  amount  of  real  memory
       touched is proportional to the size of the file, since the
       file is smaller than a block.  For example, compressing  a
       file  20,000  bytes  long  with the flag -9 will cause the
       compressor to allocate around 7600k of  memory,  but  only
       touch 400k + 20000 * 8 = 560 kbytes of it.  Similarly, the
       decompressor will allocate 3700k but  only  touch  100k  +
       20000 * 4 = 180 kbytes.

       Here  is a table which summarises the maximum memory usage
       for different block sizes.  Also  recorded  is  the  total
       compressed  size for 14 files of the Calgary Text Compres-
       sion Corpus totalling 3,141,622 bytes.  This column  gives
       some  feel  for  how  compression  varies with block size.
       These figures tend to understate the advantage  of  larger
       block  sizes  for  larger files, since the Corpus is domi-
       nated by smaller files.

                  Compress   Decompress   Decompress   Corpus
           Flag     usage      usage       -s usage     Size

            -1      1200k       500k         350k      914704
            -2      2000k       900k         600k      877703
            -3      2800k      1300k         850k      860338
            -4      3600k      1700k        1100k      846899
            -5      4400k      2100k        1350k      845160
            -6      5200k      2500k        1600k      838626
            -7      6100k      2900k        1850k      834096
            -8      6800k      3300k        2100k      828642
            -9      7600k      3700k        2350k      828642


RECOVERING DATA FROM DAMAGED FILES
       bzip2 compresses files in blocks, usually 900kbytes  long.
       Each block is handled independently.  If a media or trans-
       mission error causes a multi-block  .bz2  file  to  become
       damaged,  it  may  be  possible  to  recover data from the
       undamaged blocks in the file.

       The compressed representation of each block  is  delimited
       by  a  48-bit pattern, which makes it possible to find the
       block boundaries with reasonable  certainty.   Each  block
       also  carries its own 32-bit CRC, so damaged blocks can be
       distinguished from undamaged ones.

       bzip2recover is a  simple  program  whose  purpose  is  to
       search  for blocks in .bz2 files, and write each block out
       into its own .bz2 file.  You can then use bzip2 -t to test
       the integrity of the resulting files, and decompress those
       which are undamaged.

       bzip2recover takes a single argument, the name of the dam-
       aged    file,    and    writes    a    number   of   files
       "rec00001file.bz2",  "rec00002file.bz2",  etc,  containing
       the   extracted   blocks.   The   output   filenames   are
       designed  so  that the use of wildcards in subsequent pro-
       cessing  -- for example, "bzip2 -dc  rec*file.bz2 > recov-
       ered_data" -- processes the files in the correct order.

       bzip2recover should be of most use dealing with large .bz2
       files,  as  these will contain many blocks.  It is clearly
       futile to use it on damaged single-block  files,  since  a
       damaged  block  cannot  be recovered.  If you wish to min-
       imise any potential data loss through media  or  transmis-
       sion errors, you might consider compressing with a smaller
       block size.


PERFORMANCE NOTES
       The sorting phase of compression gathers together  similar
       strings  in  the  file.  Because of this, files containing
       very long runs of  repeated  symbols,  like  "aabaabaabaab
       ..."   (repeated  several hundred times) may compress more
       slowly than normal.  Versions 0.9.5 and  above  fare  much
       better  than previous versions in this respect.  The ratio
       between worst-case and average-case compression time is in
       the  region  of  10:1.  For previous versions, this figure
       was more like 100:1.  You can use the -vvvv option to mon-
       itor progress in great detail, if you want.

       Decompression speed is unaffected by these phenomena.

       bzip2  usually  allocates  several  megabytes of memory to
       operate in, and then charges all over it in a fairly  ran-
       dom  fashion.   This means that performance, both for com-
       pressing and decompressing, is largely determined  by  the
       speed  at  which  your  machine  can service cache misses.
       Because of this, small changes to the code to  reduce  the
       miss  rate  have  been observed to give disproportionately
       large performance improvements.  I imagine bzip2 will per-
       form best on machines with very large caches.


CAVEATS
       I/O  error  messages  are not as helpful as they could be.
       bzip2 tries hard to detect I/O errors  and  exit  cleanly,
       but  the  details  of  what  the problem is sometimes seem
       rather misleading.

       This manual page pertains to version 1.0.6 of bzip2.  Com-
       pressed  data created by this version is entirely forwards
       and  backwards  compatible  with   the   previous   public
       releases,  versions  0.1pl2,  0.9.0,  0.9.5, 1.0.0, 1.0.1,
       1.0.2 and above, but with the  following  exception: 0.9.0
       and above can  correctly decompress  multiple concatenated
       compressed files.  0.1pl2  cannot do this;  it  will  stop
       after  decompressing just the first file in the stream.

       bzip2recover  versions prior to 1.0.2 used 32-bit integers
       to represent bit positions in compressed  files,  so  they
       could  not handle compressed files more than 512 megabytes
       long.  Versions 1.0.2 and above use 64-bit  ints  on  some
       platforms  which  support them (GNU supported targets, and
       Windows).  To establish whether or  not  bzip2recover  was
       built  with  such  a limitation, run it without arguments.
       In any event you can build yourself an  unlimited  version
       if  you  can  recompile  it  with MaybeUInt64 set to be an
       unsigned 64-bit integer.


AUTHOR
       Julian Seward, jsewardbzip.org.

       http://www.bzip.org

       The ideas embodied in bzip2 are due to (at least) the fol-
       lowing  people: Michael Burrows and David Wheeler (for the
       block sorting transformation), David Wheeler  (again,  for
       the Huffman coder), Peter Fenwick (for the structured cod-
       ing model in the original bzip, and many refinements), and
       Alistair  Moffat,  Radford  Neal  and  Ian Witten (for the
       arithmetic  coder  in  the  original  bzip).   I  am  much
       indebted for their help, support and advice.  See the man-
       ual in the source distribution for pointers to sources  of
       documentation.  Christian von Roques encouraged me to look
       for faster sorting algorithms, so as to speed up  compres-
       sion.  Bela Lubkin encouraged me to improve the worst-case
       compression performance.  Donna Robinson XMLised the docu-
       mentation.   The bz* scripts are derived from those of GNU
       gzip.  Many people sent patches, helped  with  portability
       problems,  lent  machines,  gave advice and were generally
       helpful.

genometools-1.5.1/src/external/bzip2-1.0.6/bzip2recover.c000066400000000000000000000351141211610345200227270ustar00rootroot00000000000000/*-----------------------------------------------------------*/
/*--- Block recoverer program for bzip2                   ---*/
/*---                                      bzip2recover.c ---*/
/*-----------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */

/* This program is a complete hack and should be rewritten properly.
	 It isn't very complicated. */

#include 
#include 
#include 
#include 


/* This program records bit locations in the file to be recovered.
   That means that if 64-bit ints are not supported, we will not
   be able to recover .bz2 files over 512MB (2^32 bits) long.
   On GNU supported platforms, we take advantage of the 64-bit
   int support to circumvent this problem.  Ditto MSVC.

   This change occurred in version 1.0.2; all prior versions have
   the 512MB limitation.
*/
#ifdef __GNUC__
   typedef  unsigned long long int  MaybeUInt64;
#  define MaybeUInt64_FMT "%Lu"
#else
#ifdef _MSC_VER
   typedef  unsigned __int64  MaybeUInt64;
#  define MaybeUInt64_FMT "%I64u"
#else
   typedef  unsigned int   MaybeUInt64;
#  define MaybeUInt64_FMT "%u"
#endif
#endif

typedef  unsigned int   UInt32;
typedef  int            Int32;
typedef  unsigned char  UChar;
typedef  char           Char;
typedef  unsigned char  Bool;
#define True    ((Bool)1)
#define False   ((Bool)0)


#define BZ_MAX_FILENAME 2000

Char inFileName[BZ_MAX_FILENAME];
Char outFileName[BZ_MAX_FILENAME];
Char progName[BZ_MAX_FILENAME];

MaybeUInt64 bytesOut = 0;
MaybeUInt64 bytesIn  = 0;


/*---------------------------------------------------*/
/*--- Header bytes                                ---*/
/*---------------------------------------------------*/

#define BZ_HDR_B 0x42                         /* 'B' */
#define BZ_HDR_Z 0x5a                         /* 'Z' */
#define BZ_HDR_h 0x68                         /* 'h' */
#define BZ_HDR_0 0x30                         /* '0' */
 

/*---------------------------------------------------*/
/*--- I/O errors                                  ---*/
/*---------------------------------------------------*/

/*---------------------------------------------*/
static void readError ( void )
{
   fprintf ( stderr,
             "%s: I/O error reading `%s', possible reason follows.\n",
            progName, inFileName );
   perror ( progName );
   fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
             progName );
   exit ( 1 );
}


/*---------------------------------------------*/
static void writeError ( void )
{
   fprintf ( stderr,
             "%s: I/O error reading `%s', possible reason follows.\n",
            progName, inFileName );
   perror ( progName );
   fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
             progName );
   exit ( 1 );
}


/*---------------------------------------------*/
static void mallocFail ( Int32 n )
{
   fprintf ( stderr,
             "%s: malloc failed on request for %d bytes.\n",
            progName, n );
   fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
             progName );
   exit ( 1 );
}


/*---------------------------------------------*/
static void tooManyBlocks ( Int32 max_handled_blocks )
{
   fprintf ( stderr,
             "%s: `%s' appears to contain more than %d blocks\n",
            progName, inFileName, max_handled_blocks );
   fprintf ( stderr,
             "%s: and cannot be handled.  To fix, increase\n",
             progName );
   fprintf ( stderr, 
             "%s: BZ_MAX_HANDLED_BLOCKS in bzip2recover.c, and recompile.\n",
             progName );
   exit ( 1 );
}



/*---------------------------------------------------*/
/*--- Bit stream I/O                              ---*/
/*---------------------------------------------------*/

typedef
   struct {
      FILE*  handle;
      Int32  buffer;
      Int32  buffLive;
      Char   mode;
   }
   BitStream;


/*---------------------------------------------*/
static BitStream* bsOpenReadStream ( FILE* stream )
{
   BitStream *bs = malloc ( sizeof(BitStream) );
   if (bs == NULL) mallocFail ( sizeof(BitStream) );
   bs->handle = stream;
   bs->buffer = 0;
   bs->buffLive = 0;
   bs->mode = 'r';
   return bs;
}


/*---------------------------------------------*/
static BitStream* bsOpenWriteStream ( FILE* stream )
{
   BitStream *bs = malloc ( sizeof(BitStream) );
   if (bs == NULL) mallocFail ( sizeof(BitStream) );
   bs->handle = stream;
   bs->buffer = 0;
   bs->buffLive = 0;
   bs->mode = 'w';
   return bs;
}


/*---------------------------------------------*/
static void bsPutBit ( BitStream* bs, Int32 bit )
{
   if (bs->buffLive == 8) {
      Int32 retVal = putc ( (UChar) bs->buffer, bs->handle );
      if (retVal == EOF) writeError();
      bytesOut++;
      bs->buffLive = 1;
      bs->buffer = bit & 0x1;
   } else {
      bs->buffer = ( (bs->buffer << 1) | (bit & 0x1) );
      bs->buffLive++;
   };
}


/*---------------------------------------------*/
/*--
   Returns 0 or 1, or 2 to indicate EOF.
--*/
static Int32 bsGetBit ( BitStream* bs )
{
   if (bs->buffLive > 0) {
      bs->buffLive --;
      return ( ((bs->buffer) >> (bs->buffLive)) & 0x1 );
   } else {
      Int32 retVal = getc ( bs->handle );
      if ( retVal == EOF ) {
         if (errno != 0) readError();
         return 2;
      }
      bs->buffLive = 7;
      bs->buffer = retVal;
      return ( ((bs->buffer) >> 7) & 0x1 );
   }
}


/*---------------------------------------------*/
static void bsClose ( BitStream* bs )
{
   Int32 retVal;

   if ( bs->mode == 'w' ) {
      while ( bs->buffLive < 8 ) {
         bs->buffLive++;
         bs->buffer <<= 1;
      };
      retVal = putc ( (UChar) (bs->buffer), bs->handle );
      if (retVal == EOF) writeError();
      bytesOut++;
      retVal = fflush ( bs->handle );
      if (retVal == EOF) writeError();
   }
   retVal = fclose ( bs->handle );
   if (retVal == EOF) {
      if (bs->mode == 'w') writeError(); else readError();
   }
   free ( bs );
}


/*---------------------------------------------*/
static void bsPutUChar ( BitStream* bs, UChar c )
{
   Int32 i;
   for (i = 7; i >= 0; i--)
      bsPutBit ( bs, (((UInt32) c) >> i) & 0x1 );
}


/*---------------------------------------------*/
static void bsPutUInt32 ( BitStream* bs, UInt32 c )
{
   Int32 i;

   for (i = 31; i >= 0; i--)
      bsPutBit ( bs, (c >> i) & 0x1 );
}


/*---------------------------------------------*/
static Bool endsInBz2 ( Char* name )
{
   Int32 n = strlen ( name );
   if (n <= 4) return False;
   return
      (name[n-4] == '.' &&
       name[n-3] == 'b' &&
       name[n-2] == 'z' &&
       name[n-1] == '2');
}


/*---------------------------------------------------*/
/*---                                             ---*/
/*---------------------------------------------------*/

/* This logic isn't really right when it comes to Cygwin. */
#ifdef _WIN32
#  define  BZ_SPLIT_SYM  '\\'  /* path splitter on Windows platform */
#else
#  define  BZ_SPLIT_SYM  '/'   /* path splitter on Unix platform */
#endif

#define BLOCK_HEADER_HI  0x00003141UL
#define BLOCK_HEADER_LO  0x59265359UL

#define BLOCK_ENDMARK_HI 0x00001772UL
#define BLOCK_ENDMARK_LO 0x45385090UL

/* Increase if necessary.  However, a .bz2 file with > 50000 blocks
   would have an uncompressed size of at least 40GB, so the chances
   are low you'll need to up this.
*/
#define BZ_MAX_HANDLED_BLOCKS 50000

MaybeUInt64 bStart [BZ_MAX_HANDLED_BLOCKS];
MaybeUInt64 bEnd   [BZ_MAX_HANDLED_BLOCKS];
MaybeUInt64 rbStart[BZ_MAX_HANDLED_BLOCKS];
MaybeUInt64 rbEnd  [BZ_MAX_HANDLED_BLOCKS];

Int32 main ( Int32 argc, Char** argv )
{
   FILE*       inFile;
   FILE*       outFile;
   BitStream*  bsIn, *bsWr;
   Int32       b, wrBlock, currBlock, rbCtr;
   MaybeUInt64 bitsRead;

   UInt32      buffHi, buffLo, blockCRC;
   Char*       p;

   strcpy ( progName, argv[0] );
   inFileName[0] = outFileName[0] = 0;

   fprintf ( stderr, 
             "bzip2recover 1.0.6: extracts blocks from damaged .bz2 files.\n" );

   if (argc != 2) {
      fprintf ( stderr, "%s: usage is `%s damaged_file_name'.\n",
                        progName, progName );
      switch (sizeof(MaybeUInt64)) {
         case 8:
            fprintf(stderr, 
                    "\trestrictions on size of recovered file: None\n");
            break;
         case 4:
            fprintf(stderr, 
                    "\trestrictions on size of recovered file: 512 MB\n");
            fprintf(stderr, 
                    "\tto circumvent, recompile with MaybeUInt64 as an\n"
                    "\tunsigned 64-bit int.\n");
            break;
         default:
            fprintf(stderr, 
                    "\tsizeof(MaybeUInt64) is not 4 or 8 -- "
                    "configuration error.\n");
            break;
      }
      exit(1);
   }

   if (strlen(argv[1]) >= BZ_MAX_FILENAME-20) {
      fprintf ( stderr, 
                "%s: supplied filename is suspiciously (>= %d chars) long.  Bye!\n",
                progName, (int)strlen(argv[1]) );
      exit(1);
   }

   strcpy ( inFileName, argv[1] );

   inFile = fopen ( inFileName, "rb" );
   if (inFile == NULL) {
      fprintf ( stderr, "%s: can't read `%s'\n", progName, inFileName );
      exit(1);
   }

   bsIn = bsOpenReadStream ( inFile );
   fprintf ( stderr, "%s: searching for block boundaries ...\n", progName );

   bitsRead = 0;
   buffHi = buffLo = 0;
   currBlock = 0;
   bStart[currBlock] = 0;

   rbCtr = 0;

   while (True) {
      b = bsGetBit ( bsIn );
      bitsRead++;
      if (b == 2) {
         if (bitsRead >= bStart[currBlock] &&
            (bitsRead - bStart[currBlock]) >= 40) {
            bEnd[currBlock] = bitsRead-1;
            if (currBlock > 0)
               fprintf ( stderr, "   block %d runs from " MaybeUInt64_FMT 
                                 " to " MaybeUInt64_FMT " (incomplete)\n",
                         currBlock,  bStart[currBlock], bEnd[currBlock] );
         } else
            currBlock--;
         break;
      }
      buffHi = (buffHi << 1) | (buffLo >> 31);
      buffLo = (buffLo << 1) | (b & 1);
      if ( ( (buffHi & 0x0000ffff) == BLOCK_HEADER_HI 
             && buffLo == BLOCK_HEADER_LO)
           || 
           ( (buffHi & 0x0000ffff) == BLOCK_ENDMARK_HI 
             && buffLo == BLOCK_ENDMARK_LO)
         ) {
         if (bitsRead > 49) {
            bEnd[currBlock] = bitsRead-49;
         } else {
            bEnd[currBlock] = 0;
         }
         if (currBlock > 0 &&
	     (bEnd[currBlock] - bStart[currBlock]) >= 130) {
            fprintf ( stderr, "   block %d runs from " MaybeUInt64_FMT 
                              " to " MaybeUInt64_FMT "\n",
                      rbCtr+1,  bStart[currBlock], bEnd[currBlock] );
            rbStart[rbCtr] = bStart[currBlock];
            rbEnd[rbCtr] = bEnd[currBlock];
            rbCtr++;
         }
         if (currBlock >= BZ_MAX_HANDLED_BLOCKS)
            tooManyBlocks(BZ_MAX_HANDLED_BLOCKS);
         currBlock++;

         bStart[currBlock] = bitsRead;
      }
   }

   bsClose ( bsIn );

   /*-- identified blocks run from 1 to rbCtr inclusive. --*/

   if (rbCtr < 1) {
      fprintf ( stderr,
                "%s: sorry, I couldn't find any block boundaries.\n",
                progName );
      exit(1);
   };

   fprintf ( stderr, "%s: splitting into blocks\n", progName );

   inFile = fopen ( inFileName, "rb" );
   if (inFile == NULL) {
      fprintf ( stderr, "%s: can't open `%s'\n", progName, inFileName );
      exit(1);
   }
   bsIn = bsOpenReadStream ( inFile );

   /*-- placate gcc's dataflow analyser --*/
   blockCRC = 0; bsWr = 0;

   bitsRead = 0;
   outFile = NULL;
   wrBlock = 0;
   while (True) {
      b = bsGetBit(bsIn);
      if (b == 2) break;
      buffHi = (buffHi << 1) | (buffLo >> 31);
      buffLo = (buffLo << 1) | (b & 1);
      if (bitsRead == 47+rbStart[wrBlock]) 
         blockCRC = (buffHi << 16) | (buffLo >> 16);

      if (outFile != NULL && bitsRead >= rbStart[wrBlock]
                          && bitsRead <= rbEnd[wrBlock]) {
         bsPutBit ( bsWr, b );
      }

      bitsRead++;

      if (bitsRead == rbEnd[wrBlock]+1) {
         if (outFile != NULL) {
            bsPutUChar ( bsWr, 0x17 ); bsPutUChar ( bsWr, 0x72 );
            bsPutUChar ( bsWr, 0x45 ); bsPutUChar ( bsWr, 0x38 );
            bsPutUChar ( bsWr, 0x50 ); bsPutUChar ( bsWr, 0x90 );
            bsPutUInt32 ( bsWr, blockCRC );
            bsClose ( bsWr );
         }
         if (wrBlock >= rbCtr) break;
         wrBlock++;
      } else
      if (bitsRead == rbStart[wrBlock]) {
         /* Create the output file name, correctly handling leading paths. 
            (31.10.2001 by Sergey E. Kusikov) */
         Char* split;
         Int32 ofs, k;
         for (k = 0; k < BZ_MAX_FILENAME; k++) 
            outFileName[k] = 0;
         strcpy (outFileName, inFileName);
         split = strrchr (outFileName, BZ_SPLIT_SYM);
         if (split == NULL) {
            split = outFileName;
         } else {
            ++split;
	 }
	 /* Now split points to the start of the basename. */
         ofs  = split - outFileName;
         sprintf (split, "rec%5d", wrBlock+1);
         for (p = split; *p != 0; p++) if (*p == ' ') *p = '0';
         strcat (outFileName, inFileName + ofs);

         if ( !endsInBz2(outFileName)) strcat ( outFileName, ".bz2" );

         fprintf ( stderr, "   writing block %d to `%s' ...\n",
                           wrBlock+1, outFileName );

         outFile = fopen ( outFileName, "wb" );
         if (outFile == NULL) {
            fprintf ( stderr, "%s: can't write `%s'\n",
                      progName, outFileName );
            exit(1);
         }
         bsWr = bsOpenWriteStream ( outFile );
         bsPutUChar ( bsWr, BZ_HDR_B );    
         bsPutUChar ( bsWr, BZ_HDR_Z );    
         bsPutUChar ( bsWr, BZ_HDR_h );    
         bsPutUChar ( bsWr, BZ_HDR_0 + 9 );
         bsPutUChar ( bsWr, 0x31 ); bsPutUChar ( bsWr, 0x41 );
         bsPutUChar ( bsWr, 0x59 ); bsPutUChar ( bsWr, 0x26 );
         bsPutUChar ( bsWr, 0x53 ); bsPutUChar ( bsWr, 0x59 );
      }
   }

   fprintf ( stderr, "%s: finished\n", progName );
   return 0;
}



/*-----------------------------------------------------------*/
/*--- end                                  bzip2recover.c ---*/
/*-----------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/bzlib.c000066400000000000000000001317451211610345200214240ustar00rootroot00000000000000
/*-------------------------------------------------------------*/
/*--- Library top-level functions.                          ---*/
/*---                                               bzlib.c ---*/
/*-------------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */

/* CHANGES
   0.9.0    -- original version.
   0.9.0a/b -- no changes in this file.
   0.9.0c   -- made zero-length BZ_FLUSH work correctly in bzCompress().
     fixed bzWrite/bzRead to ignore zero-length requests.
     fixed bzread to correctly handle read requests after EOF.
     wrong parameter order in call to bzDecompressInit in
     bzBuffToBuffDecompress.  Fixed.
*/

#include "bzlib_private.h"
#include "core/unused_api.h"

/*---------------------------------------------------*/
/*--- Compression stuff                           ---*/
/*---------------------------------------------------*/


/*---------------------------------------------------*/
#ifndef BZ_NO_STDIO
void BZ2_bz__AssertH__fail ( int errcode )
{
   fprintf(stderr, 
      "\n\nbzip2/libbzip2: internal error number %d.\n"
      "This is a bug in bzip2/libbzip2, %s.\n"
      "Please report it to me at: jseward@bzip.org.  If this happened\n"
      "when you were using some program which uses libbzip2 as a\n"
      "component, you should also report this bug to the author(s)\n"
      "of that program.  Please make an effort to report this bug;\n"
      "timely and accurate bug reports eventually lead to higher\n"
      "quality software.  Thanks.  Julian Seward, 10 December 2007.\n\n",
      errcode,
      BZ2_bzlibVersion()
   );

   if (errcode == 1007) {
   fprintf(stderr,
      "\n*** A special note about internal error number 1007 ***\n"
      "\n"
      "Experience suggests that a common cause of i.e. 1007\n"
      "is unreliable memory or other hardware.  The 1007 assertion\n"
      "just happens to cross-check the results of huge numbers of\n"
      "memory reads/writes, and so acts (unintendedly) as a stress\n"
      "test of your memory system.\n"
      "\n"
      "I suggest the following: try compressing the file again,\n"
      "possibly monitoring progress in detail with the -vv flag.\n"
      "\n"
      "* If the error cannot be reproduced, and/or happens at different\n"
      "  points in compression, you may have a flaky memory system.\n"
      "  Try a memory-test program.  I have used Memtest86\n"
      "  (www.memtest86.com).  At the time of writing it is free (GPLd).\n"
      "  Memtest86 tests memory much more thorougly than your BIOSs\n"
      "  power-on test, and may find failures that the BIOS doesn't.\n"
      "\n"
      "* If the error can be repeatably reproduced, this is a bug in\n"
      "  bzip2, and I would very much like to hear about it.  Please\n"
      "  let me know, and, ideally, save a copy of the file causing the\n"
      "  problem -- without which I will be unable to investigate it.\n"
      "\n"
   );
   }

   exit(3);
}
#endif


/*---------------------------------------------------*/
static
int bz_config_ok ( void )
{
   if (sizeof(int)   != 4) return 0;
   if (sizeof(short) != 2) return 0;
   if (sizeof(char)  != 1) return 0;
   return 1;
}


/*---------------------------------------------------*/
static
void* default_bzalloc ( GT_UNUSED void* opaque, Int32 items, Int32 size )
{
   void* v = malloc ( items * size );
   return v;
}

static
void default_bzfree ( GT_UNUSED void* opaque, void* addr )
{
   if (addr != NULL) free ( addr );
}


/*---------------------------------------------------*/
static
void prepare_new_block ( EState* s )
{
   Int32 i;
   s->nblock = 0;
   s->numZ = 0;
   s->state_out_pos = 0;
   BZ_INITIALISE_CRC ( s->blockCRC );
   for (i = 0; i < 256; i++) s->inUse[i] = False;
   s->blockNo++;
}


/*---------------------------------------------------*/
static
void init_RL ( EState* s )
{
   s->state_in_ch  = 256;
   s->state_in_len = 0;
}


static
Bool isempty_RL ( EState* s )
{
   if (s->state_in_ch < 256 && s->state_in_len > 0)
      return False; else
      return True;
}


/*---------------------------------------------------*/
int BZ_API(BZ2_bzCompressInit) 
                    ( bz_stream* strm, 
                     int        blockSize100k,
                     int        verbosity,
                     int        workFactor )
{
   Int32   n;
   EState* s;

   if (!bz_config_ok()) return BZ_CONFIG_ERROR;

   if (strm == NULL || 
       blockSize100k < 1 || blockSize100k > 9 ||
       workFactor < 0 || workFactor > 250)
     return BZ_PARAM_ERROR;

   if (workFactor == 0) workFactor = 30;
   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;

   s = BZALLOC( sizeof(EState) );
   if (s == NULL) return BZ_MEM_ERROR;
   s->strm = strm;

   s->arr1 = NULL;
   s->arr2 = NULL;
   s->ftab = NULL;

   n       = 100000 * blockSize100k;
   s->arr1 = BZALLOC( n                  * sizeof(UInt32) );
   s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) );
   s->ftab = BZALLOC( 65537              * sizeof(UInt32) );

   if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) {
      if (s->arr1 != NULL) BZFREE(s->arr1);
      if (s->arr2 != NULL) BZFREE(s->arr2);
      if (s->ftab != NULL) BZFREE(s->ftab);
      if (s       != NULL) BZFREE(s);
      return BZ_MEM_ERROR;
   }

   s->blockNo           = 0;
   s->state             = BZ_S_INPUT;
   s->mode              = BZ_M_RUNNING;
   s->combinedCRC       = 0;
   s->blockSize100k     = blockSize100k;
   s->nblockMAX         = 100000 * blockSize100k - 19;
   s->verbosity         = verbosity;
   s->workFactor        = workFactor;

   s->block             = (UChar*)s->arr2;
   s->mtfv              = (UInt16*)s->arr1;
   s->zbits             = NULL;
   s->ptr               = (UInt32*)s->arr1;

   strm->state          = s;
   strm->total_in_lo32  = 0;
   strm->total_in_hi32  = 0;
   strm->total_out_lo32 = 0;
   strm->total_out_hi32 = 0;
   init_RL ( s );
   prepare_new_block ( s );
   return BZ_OK;
}


/*---------------------------------------------------*/
static
void add_pair_to_block ( EState* s )
{
   Int32 i;
   UChar ch = (UChar)(s->state_in_ch);
   for (i = 0; i < s->state_in_len; i++) {
      BZ_UPDATE_CRC( s->blockCRC, ch );
   }
   s->inUse[s->state_in_ch] = True;
   switch (s->state_in_len) {
      case 1:
         s->block[s->nblock] = (UChar)ch; s->nblock++;
         break;
      case 2:
         s->block[s->nblock] = (UChar)ch; s->nblock++;
         s->block[s->nblock] = (UChar)ch; s->nblock++;
         break;
      case 3:
         s->block[s->nblock] = (UChar)ch; s->nblock++;
         s->block[s->nblock] = (UChar)ch; s->nblock++;
         s->block[s->nblock] = (UChar)ch; s->nblock++;
         break;
      default:
         s->inUse[s->state_in_len-4] = True;
         s->block[s->nblock] = (UChar)ch; s->nblock++;
         s->block[s->nblock] = (UChar)ch; s->nblock++;
         s->block[s->nblock] = (UChar)ch; s->nblock++;
         s->block[s->nblock] = (UChar)ch; s->nblock++;
         s->block[s->nblock] = ((UChar)(s->state_in_len-4));
         s->nblock++;
         break;
   }
}


/*---------------------------------------------------*/
static
void flush_RL ( EState* s )
{
   if (s->state_in_ch < 256) add_pair_to_block ( s );
   init_RL ( s );
}


/*---------------------------------------------------*/
#define ADD_CHAR_TO_BLOCK(zs,zchh0)               \
{                                                 \
   UInt32 zchh = (UInt32)(zchh0);                 \
   /*-- fast track the common case --*/           \
   if (zchh != zs->state_in_ch &&                 \
       zs->state_in_len == 1) {                   \
      UChar ch = (UChar)(zs->state_in_ch);        \
      BZ_UPDATE_CRC( zs->blockCRC, ch );          \
      zs->inUse[zs->state_in_ch] = True;          \
      zs->block[zs->nblock] = (UChar)ch;          \
      zs->nblock++;                               \
      zs->state_in_ch = zchh;                     \
   }                                              \
   else                                           \
   /*-- general, uncommon cases --*/              \
   if (zchh != zs->state_in_ch ||                 \
      zs->state_in_len == 255) {                  \
      if (zs->state_in_ch < 256)                  \
         add_pair_to_block ( zs );                \
      zs->state_in_ch = zchh;                     \
      zs->state_in_len = 1;                       \
   } else {                                       \
      zs->state_in_len++;                         \
   }                                              \
}


/*---------------------------------------------------*/
static
Bool copy_input_until_stop ( EState* s )
{
   Bool progress_in = False;

   if (s->mode == BZ_M_RUNNING) {

      /*-- fast track the common case --*/
      while (True) {
         /*-- block full? --*/
         if (s->nblock >= s->nblockMAX) break;
         /*-- no input? --*/
         if (s->strm->avail_in == 0) break;
         progress_in = True;
         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); 
         s->strm->next_in++;
         s->strm->avail_in--;
         s->strm->total_in_lo32++;
         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
      }

   } else {

      /*-- general, uncommon case --*/
      while (True) {
         /*-- block full? --*/
         if (s->nblock >= s->nblockMAX) break;
         /*-- no input? --*/
         if (s->strm->avail_in == 0) break;
         /*-- flush/finish end? --*/
         if (s->avail_in_expect == 0) break;
         progress_in = True;
         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); 
         s->strm->next_in++;
         s->strm->avail_in--;
         s->strm->total_in_lo32++;
         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
         s->avail_in_expect--;
      }
   }
   return progress_in;
}


/*---------------------------------------------------*/
static
Bool copy_output_until_stop ( EState* s )
{
   Bool progress_out = False;

   while (True) {

      /*-- no output space? --*/
      if (s->strm->avail_out == 0) break;

      /*-- block done? --*/
      if (s->state_out_pos >= s->numZ) break;

      progress_out = True;
      *(s->strm->next_out) = s->zbits[s->state_out_pos];
      s->state_out_pos++;
      s->strm->avail_out--;
      s->strm->next_out++;
      s->strm->total_out_lo32++;
      if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
   }

   return progress_out;
}


/*---------------------------------------------------*/
static
Bool handle_compress ( bz_stream* strm )
{
   Bool progress_in  = False;
   Bool progress_out = False;
   EState* s = strm->state;
   
   while (True) {

      if (s->state == BZ_S_OUTPUT) {
         progress_out |= copy_output_until_stop ( s );
         if (s->state_out_pos < s->numZ) break;
         if (s->mode == BZ_M_FINISHING && 
             s->avail_in_expect == 0 &&
             isempty_RL(s)) break;
         prepare_new_block ( s );
         s->state = BZ_S_INPUT;
         if (s->mode == BZ_M_FLUSHING && 
             s->avail_in_expect == 0 &&
             isempty_RL(s)) break;
      }

      if (s->state == BZ_S_INPUT) {
         progress_in |= copy_input_until_stop ( s );
         if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {
            flush_RL ( s );
            BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) );
            s->state = BZ_S_OUTPUT;
         }
         else
         if (s->nblock >= s->nblockMAX) {
            BZ2_compressBlock ( s, False );
            s->state = BZ_S_OUTPUT;
         }
         else
         if (s->strm->avail_in == 0) {
            break;
         }
      }

   }

   return progress_in || progress_out;
}


/*---------------------------------------------------*/
int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action )
{
   Bool progress;
   EState* s;
   if (strm == NULL) return BZ_PARAM_ERROR;
   s = strm->state;
   if (s == NULL) return BZ_PARAM_ERROR;
   if (s->strm != strm) return BZ_PARAM_ERROR;

   preswitch:
   switch (s->mode) {

      case BZ_M_IDLE:
         return BZ_SEQUENCE_ERROR;

      case BZ_M_RUNNING:
         if (action == BZ_RUN) {
            progress = handle_compress ( strm );
            return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;
         } 
         else
	 if (action == BZ_FLUSH) {
            s->avail_in_expect = strm->avail_in;
            s->mode = BZ_M_FLUSHING;
            goto preswitch;
         }
         else
         if (action == BZ_FINISH) {
            s->avail_in_expect = strm->avail_in;
            s->mode = BZ_M_FINISHING;
            goto preswitch;
         }
         else 
            return BZ_PARAM_ERROR;

      case BZ_M_FLUSHING:
         if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;
         if (s->avail_in_expect != s->strm->avail_in) 
            return BZ_SEQUENCE_ERROR;
         progress = handle_compress ( strm );
         if (s->avail_in_expect > 0 || !isempty_RL(s) ||
             s->state_out_pos < s->numZ) return BZ_FLUSH_OK;
         s->mode = BZ_M_RUNNING;
         return BZ_RUN_OK;

      case BZ_M_FINISHING:
         if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;
         if (s->avail_in_expect != s->strm->avail_in) 
            return BZ_SEQUENCE_ERROR;
         progress = handle_compress ( strm );
         if (!progress) return BZ_SEQUENCE_ERROR;
         if (s->avail_in_expect > 0 || !isempty_RL(s) ||
             s->state_out_pos < s->numZ) return BZ_FINISH_OK;
         s->mode = BZ_M_IDLE;
         return BZ_STREAM_END;
   }
   return BZ_OK; /*--not reached--*/
}


/*---------------------------------------------------*/
int BZ_API(BZ2_bzCompressEnd)  ( bz_stream *strm )
{
   EState* s;
   if (strm == NULL) return BZ_PARAM_ERROR;
   s = strm->state;
   if (s == NULL) return BZ_PARAM_ERROR;
   if (s->strm != strm) return BZ_PARAM_ERROR;

   if (s->arr1 != NULL) BZFREE(s->arr1);
   if (s->arr2 != NULL) BZFREE(s->arr2);
   if (s->ftab != NULL) BZFREE(s->ftab);
   BZFREE(strm->state);

   strm->state = NULL;   

   return BZ_OK;
}


/*---------------------------------------------------*/
/*--- Decompression stuff                         ---*/
/*---------------------------------------------------*/

/*---------------------------------------------------*/
int BZ_API(BZ2_bzDecompressInit) 
                     ( bz_stream* strm, 
                       int        verbosity,
                       int        small )
{
   DState* s;

   if (!bz_config_ok()) return BZ_CONFIG_ERROR;

   if (strm == NULL) return BZ_PARAM_ERROR;
   if (small != 0 && small != 1) return BZ_PARAM_ERROR;
   if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;

   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;

   s = BZALLOC( sizeof(DState) );
   if (s == NULL) return BZ_MEM_ERROR;
   s->strm                  = strm;
   strm->state              = s;
   s->state                 = BZ_X_MAGIC_1;
   s->bsLive                = 0;
   s->bsBuff                = 0;
   s->calculatedCombinedCRC = 0;
   strm->total_in_lo32      = 0;
   strm->total_in_hi32      = 0;
   strm->total_out_lo32     = 0;
   strm->total_out_hi32     = 0;
   s->smallDecompress       = (Bool)small;
   s->ll4                   = NULL;
   s->ll16                  = NULL;
   s->tt                    = NULL;
   s->currBlockNo           = 0;
   s->verbosity             = verbosity;

   return BZ_OK;
}


/*---------------------------------------------------*/
/* Return  True iff data corruption is discovered.
   Returns False if there is no problem.
*/
static
Bool unRLE_obuf_to_output_FAST ( DState* s )
{
   UChar k1;

   if (s->blockRandomised) {

      while (True) {
         /* try to finish existing run */
         while (True) {
            if (s->strm->avail_out == 0) return False;
            if (s->state_out_len == 0) break;
            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
            s->state_out_len--;
            s->strm->next_out++;
            s->strm->avail_out--;
            s->strm->total_out_lo32++;
            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
         }

         /* can a new run be started? */
         if (s->nblock_used == s->save_nblock+1) return False;
               
         /* Only caused by corrupt data stream? */
         if (s->nblock_used > s->save_nblock+1)
            return True;
   
         s->state_out_len = 1;
         s->state_out_ch = s->k0;
         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
         k1 ^= BZ_RAND_MASK; s->nblock_used++;
         if (s->nblock_used == s->save_nblock+1) continue;
         if (k1 != s->k0) { s->k0 = k1; continue; };
   
         s->state_out_len = 2;
         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
         k1 ^= BZ_RAND_MASK; s->nblock_used++;
         if (s->nblock_used == s->save_nblock+1) continue;
         if (k1 != s->k0) { s->k0 = k1; continue; };
   
         s->state_out_len = 3;
         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
         k1 ^= BZ_RAND_MASK; s->nblock_used++;
         if (s->nblock_used == s->save_nblock+1) continue;
         if (k1 != s->k0) { s->k0 = k1; continue; };
   
         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
         k1 ^= BZ_RAND_MASK; s->nblock_used++;
         s->state_out_len = ((Int32)k1) + 4;
         BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; 
         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
      }

   } else {

      /* restore */
      UInt32        c_calculatedBlockCRC = s->calculatedBlockCRC;
      UChar         c_state_out_ch       = s->state_out_ch;
      Int32         c_state_out_len      = s->state_out_len;
      Int32         c_nblock_used        = s->nblock_used;
      Int32         c_k0                 = s->k0;
      UInt32*       c_tt                 = s->tt;
      UInt32        c_tPos               = s->tPos;
      char*         cs_next_out          = s->strm->next_out;
      unsigned int  cs_avail_out         = s->strm->avail_out;
      Int32         ro_blockSize100k     = s->blockSize100k;
      /* end restore */

      UInt32       avail_out_INIT = cs_avail_out;
      Int32        s_save_nblockPP = s->save_nblock+1;
      unsigned int total_out_lo32_old;

      while (True) {

         /* try to finish existing run */
         if (c_state_out_len > 0) {
            while (True) {
               if (cs_avail_out == 0) goto return_notr;
               if (c_state_out_len == 1) break;
               *( (UChar*)(cs_next_out) ) = c_state_out_ch;
               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
               c_state_out_len--;
               cs_next_out++;
               cs_avail_out--;
            }
            s_state_out_len_eq_one:
            {
               if (cs_avail_out == 0) { 
                  c_state_out_len = 1; goto return_notr;
               };
               *( (UChar*)(cs_next_out) ) = c_state_out_ch;
               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
               cs_next_out++;
               cs_avail_out--;
            }
         }   
         /* Only caused by corrupt data stream? */
         if (c_nblock_used > s_save_nblockPP)
            return True;

         /* can a new run be started? */
         if (c_nblock_used == s_save_nblockPP) {
            c_state_out_len = 0; goto return_notr;
         };   
         c_state_out_ch = c_k0;
         BZ_GET_FAST_C(k1); c_nblock_used++;
         if (k1 != c_k0) { 
            c_k0 = k1; goto s_state_out_len_eq_one; 
         };
         if (c_nblock_used == s_save_nblockPP) 
            goto s_state_out_len_eq_one;
   
         c_state_out_len = 2;
         BZ_GET_FAST_C(k1); c_nblock_used++;
         if (c_nblock_used == s_save_nblockPP) continue;
         if (k1 != c_k0) { c_k0 = k1; continue; };
   
         c_state_out_len = 3;
         BZ_GET_FAST_C(k1); c_nblock_used++;
         if (c_nblock_used == s_save_nblockPP) continue;
         if (k1 != c_k0) { c_k0 = k1; continue; };
   
         BZ_GET_FAST_C(k1); c_nblock_used++;
         c_state_out_len = ((Int32)k1) + 4;
         BZ_GET_FAST_C(c_k0); c_nblock_used++;
      }

      return_notr:
      total_out_lo32_old = s->strm->total_out_lo32;
      s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);
      if (s->strm->total_out_lo32 < total_out_lo32_old)
         s->strm->total_out_hi32++;

      /* save */
      s->calculatedBlockCRC = c_calculatedBlockCRC;
      s->state_out_ch       = c_state_out_ch;
      s->state_out_len      = c_state_out_len;
      s->nblock_used        = c_nblock_used;
      s->k0                 = c_k0;
      s->tt                 = c_tt;
      s->tPos               = c_tPos;
      s->strm->next_out     = cs_next_out;
      s->strm->avail_out    = cs_avail_out;
      /* end save */
   }
   return False;
}



/*---------------------------------------------------*/
__inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )
{
   Int32 nb, na, mid;
   nb = 0;
   na = 256;
   do {
      mid = (nb + na) >> 1;
      if (indx >= cftab[mid]) nb = mid; else na = mid;
   }
   while (na - nb != 1);
   return nb;
}


/*---------------------------------------------------*/
/* Return  True iff data corruption is discovered.
   Returns False if there is no problem.
*/
static
Bool unRLE_obuf_to_output_SMALL ( DState* s )
{
   UChar k1;

   if (s->blockRandomised) {

      while (True) {
         /* try to finish existing run */
         while (True) {
            if (s->strm->avail_out == 0) return False;
            if (s->state_out_len == 0) break;
            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
            s->state_out_len--;
            s->strm->next_out++;
            s->strm->avail_out--;
            s->strm->total_out_lo32++;
            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
         }
   
         /* can a new run be started? */
         if (s->nblock_used == s->save_nblock+1) return False;

         /* Only caused by corrupt data stream? */
         if (s->nblock_used > s->save_nblock+1)
            return True;
   
         s->state_out_len = 1;
         s->state_out_ch = s->k0;
         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
         k1 ^= BZ_RAND_MASK; s->nblock_used++;
         if (s->nblock_used == s->save_nblock+1) continue;
         if (k1 != s->k0) { s->k0 = k1; continue; };
   
         s->state_out_len = 2;
         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
         k1 ^= BZ_RAND_MASK; s->nblock_used++;
         if (s->nblock_used == s->save_nblock+1) continue;
         if (k1 != s->k0) { s->k0 = k1; continue; };
   
         s->state_out_len = 3;
         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
         k1 ^= BZ_RAND_MASK; s->nblock_used++;
         if (s->nblock_used == s->save_nblock+1) continue;
         if (k1 != s->k0) { s->k0 = k1; continue; };
   
         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
         k1 ^= BZ_RAND_MASK; s->nblock_used++;
         s->state_out_len = ((Int32)k1) + 4;
         BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; 
         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
      }

   } else {

      while (True) {
         /* try to finish existing run */
         while (True) {
            if (s->strm->avail_out == 0) return False;
            if (s->state_out_len == 0) break;
            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
            s->state_out_len--;
            s->strm->next_out++;
            s->strm->avail_out--;
            s->strm->total_out_lo32++;
            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
         }
   
         /* can a new run be started? */
         if (s->nblock_used == s->save_nblock+1) return False;

         /* Only caused by corrupt data stream? */
         if (s->nblock_used > s->save_nblock+1)
            return True;
   
         s->state_out_len = 1;
         s->state_out_ch = s->k0;
         BZ_GET_SMALL(k1); s->nblock_used++;
         if (s->nblock_used == s->save_nblock+1) continue;
         if (k1 != s->k0) { s->k0 = k1; continue; };
   
         s->state_out_len = 2;
         BZ_GET_SMALL(k1); s->nblock_used++;
         if (s->nblock_used == s->save_nblock+1) continue;
         if (k1 != s->k0) { s->k0 = k1; continue; };
   
         s->state_out_len = 3;
         BZ_GET_SMALL(k1); s->nblock_used++;
         if (s->nblock_used == s->save_nblock+1) continue;
         if (k1 != s->k0) { s->k0 = k1; continue; };
   
         BZ_GET_SMALL(k1); s->nblock_used++;
         s->state_out_len = ((Int32)k1) + 4;
         BZ_GET_SMALL(s->k0); s->nblock_used++;
      }

   }
}


/*---------------------------------------------------*/
int BZ_API(BZ2_bzDecompress) ( bz_stream *strm )
{
   Bool    corrupt;
   DState* s;
   if (strm == NULL) return BZ_PARAM_ERROR;
   s = strm->state;
   if (s == NULL) return BZ_PARAM_ERROR;
   if (s->strm != strm) return BZ_PARAM_ERROR;

   while (True) {
      if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;
      if (s->state == BZ_X_OUTPUT) {
         if (s->smallDecompress)
            corrupt = unRLE_obuf_to_output_SMALL ( s ); else
            corrupt = unRLE_obuf_to_output_FAST  ( s );
         if (corrupt) return BZ_DATA_ERROR;
         if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {
            BZ_FINALISE_CRC ( s->calculatedBlockCRC );
            if (s->verbosity >= 3) 
               VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, 
                          s->calculatedBlockCRC );
            if (s->verbosity >= 2) VPrintf0 ( "]" );
            if (s->calculatedBlockCRC != s->storedBlockCRC)
               return BZ_DATA_ERROR;
            s->calculatedCombinedCRC 
               = (s->calculatedCombinedCRC << 1) | 
                    (s->calculatedCombinedCRC >> 31);
            s->calculatedCombinedCRC ^= s->calculatedBlockCRC;
            s->state = BZ_X_BLKHDR_1;
         } else {
            return BZ_OK;
         }
      }
      if (s->state >= BZ_X_MAGIC_1) {
         Int32 r = BZ2_decompress ( s );
         if (r == BZ_STREAM_END) {
            if (s->verbosity >= 3)
               VPrintf2 ( "\n    combined CRCs: stored = 0x%08x, computed = 0x%08x", 
                          s->storedCombinedCRC, s->calculatedCombinedCRC );
            if (s->calculatedCombinedCRC != s->storedCombinedCRC)
               return BZ_DATA_ERROR;
            return r;
         }
         if (s->state != BZ_X_OUTPUT) return r;
      }
   }

   AssertH ( 0, 6001 );

   return 0;  /*NOTREACHED*/
}


/*---------------------------------------------------*/
int BZ_API(BZ2_bzDecompressEnd)  ( bz_stream *strm )
{
   DState* s;
   if (strm == NULL) return BZ_PARAM_ERROR;
   s = strm->state;
   if (s == NULL) return BZ_PARAM_ERROR;
   if (s->strm != strm) return BZ_PARAM_ERROR;

   if (s->tt   != NULL) BZFREE(s->tt);
   if (s->ll16 != NULL) BZFREE(s->ll16);
   if (s->ll4  != NULL) BZFREE(s->ll4);

   BZFREE(strm->state);
   strm->state = NULL;

   return BZ_OK;
}


#ifndef BZ_NO_STDIO
/*---------------------------------------------------*/
/*--- File I/O stuff                              ---*/
/*---------------------------------------------------*/

#define BZ_SETERR(eee)                    \
{                                         \
   if (bzerror != NULL) *bzerror = eee;   \
   if (bzf != NULL) bzf->lastErr = eee;   \
}

typedef 
   struct {
      FILE*     handle;
      Char      buf[BZ_MAX_UNUSED];
      Int32     bufN;
      Bool      writing;
      bz_stream strm;
      Int32     lastErr;
      Bool      initialisedOk;
   }
   bzFile;


/*---------------------------------------------*/
static Bool myfeof ( FILE* f )
{
   Int32 c = fgetc ( f );
   if (c == EOF) return True;
   ungetc ( c, f );
   return False;
}


/*---------------------------------------------------*/
BZFILE* BZ_API(BZ2_bzWriteOpen) 
                    ( int*  bzerror,      
                      FILE* f, 
                      int   blockSize100k, 
                      int   verbosity,
                      int   workFactor )
{
   Int32   ret;
   bzFile* bzf = NULL;

   BZ_SETERR(BZ_OK);

   if (f == NULL ||
       (blockSize100k < 1 || blockSize100k > 9) ||
       (workFactor < 0 || workFactor > 250) ||
       (verbosity < 0 || verbosity > 4))
      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };

   if (ferror(f))
      { BZ_SETERR(BZ_IO_ERROR); return NULL; };

   bzf = malloc ( sizeof(bzFile) );
   if (bzf == NULL)
      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };

   BZ_SETERR(BZ_OK);
   bzf->initialisedOk = False;
   bzf->bufN          = 0;
   bzf->handle        = f;
   bzf->writing       = True;
   bzf->strm.bzalloc  = NULL;
   bzf->strm.bzfree   = NULL;
   bzf->strm.opaque   = NULL;

   if (workFactor == 0) workFactor = 30;
   ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, 
                              verbosity, workFactor );
   if (ret != BZ_OK)
      { BZ_SETERR(ret); free(bzf); return NULL; };

   bzf->strm.avail_in = 0;
   bzf->initialisedOk = True;
   return bzf;   
}



/*---------------------------------------------------*/
void BZ_API(BZ2_bzWrite)
             ( int*    bzerror, 
               BZFILE* b, 
               void*   buf, 
               int     len )
{
   Int32 n, n2, ret;
   bzFile* bzf = (bzFile*)b;

   BZ_SETERR(BZ_OK);
   if (bzf == NULL || buf == NULL || len < 0)
      { BZ_SETERR(BZ_PARAM_ERROR); return; };
   if (!(bzf->writing))
      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
   if (ferror(bzf->handle))
      { BZ_SETERR(BZ_IO_ERROR); return; };

   if (len == 0)
      { BZ_SETERR(BZ_OK); return; };

   bzf->strm.avail_in = len;
   bzf->strm.next_in  = buf;

   while (True) {
      bzf->strm.avail_out = BZ_MAX_UNUSED;
      bzf->strm.next_out = bzf->buf;
      ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN );
      if (ret != BZ_RUN_OK)
         { BZ_SETERR(ret); return; };

      if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
         n = BZ_MAX_UNUSED - bzf->strm.avail_out;
         n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), 
                       n, bzf->handle );
         if (n != n2 || ferror(bzf->handle))
            { BZ_SETERR(BZ_IO_ERROR); return; };
      }

      if (bzf->strm.avail_in == 0)
         { BZ_SETERR(BZ_OK); return; };
   }
}


/*---------------------------------------------------*/
void BZ_API(BZ2_bzWriteClose)
                  ( int*          bzerror, 
                    BZFILE*       b, 
                    int           abandon,
                    unsigned int* nbytes_in,
                    unsigned int* nbytes_out )
{
   BZ2_bzWriteClose64 ( bzerror, b, abandon, 
                        nbytes_in, NULL, nbytes_out, NULL );
}


void BZ_API(BZ2_bzWriteClose64)
                  ( int*          bzerror, 
                    BZFILE*       b, 
                    int           abandon,
                    unsigned int* nbytes_in_lo32,
                    unsigned int* nbytes_in_hi32,
                    unsigned int* nbytes_out_lo32,
                    unsigned int* nbytes_out_hi32 )
{
   Int32   n, n2, ret;
   bzFile* bzf = (bzFile*)b;

   if (bzf == NULL)
      { BZ_SETERR(BZ_OK); return; };
   if (!(bzf->writing))
      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
   if (ferror(bzf->handle))
      { BZ_SETERR(BZ_IO_ERROR); return; };

   if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0;
   if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0;
   if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0;
   if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0;

   if ((!abandon) && bzf->lastErr == BZ_OK) {
      while (True) {
         bzf->strm.avail_out = BZ_MAX_UNUSED;
         bzf->strm.next_out = bzf->buf;
         ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH );
         if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END)
            { BZ_SETERR(ret); return; };

         if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
            n = BZ_MAX_UNUSED - bzf->strm.avail_out;
            n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), 
                          n, bzf->handle );
            if (n != n2 || ferror(bzf->handle))
               { BZ_SETERR(BZ_IO_ERROR); return; };
         }

         if (ret == BZ_STREAM_END) break;
      }
   }

   if ( !abandon && !ferror ( bzf->handle ) ) {
      fflush ( bzf->handle );
      if (ferror(bzf->handle))
         { BZ_SETERR(BZ_IO_ERROR); return; };
   }

   if (nbytes_in_lo32 != NULL)
      *nbytes_in_lo32 = bzf->strm.total_in_lo32;
   if (nbytes_in_hi32 != NULL)
      *nbytes_in_hi32 = bzf->strm.total_in_hi32;
   if (nbytes_out_lo32 != NULL)
      *nbytes_out_lo32 = bzf->strm.total_out_lo32;
   if (nbytes_out_hi32 != NULL)
      *nbytes_out_hi32 = bzf->strm.total_out_hi32;

   BZ_SETERR(BZ_OK);
   BZ2_bzCompressEnd ( &(bzf->strm) );
   free ( bzf );
}


/*---------------------------------------------------*/
BZFILE* BZ_API(BZ2_bzReadOpen) 
                   ( int*  bzerror, 
                     FILE* f, 
                     int   verbosity,
                     int   small,
                     void* unused,
                     int   nUnused )
{
   bzFile* bzf = NULL;
   int     ret;

   BZ_SETERR(BZ_OK);

   if (f == NULL || 
       (small != 0 && small != 1) ||
       (verbosity < 0 || verbosity > 4) ||
       (unused == NULL && nUnused != 0) ||
       (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED)))
      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };

   if (ferror(f))
      { BZ_SETERR(BZ_IO_ERROR); return NULL; };

   bzf = malloc ( sizeof(bzFile) );
   if (bzf == NULL) 
      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };

   BZ_SETERR(BZ_OK);

   bzf->initialisedOk = False;
   bzf->handle        = f;
   bzf->bufN          = 0;
   bzf->writing       = False;
   bzf->strm.bzalloc  = NULL;
   bzf->strm.bzfree   = NULL;
   bzf->strm.opaque   = NULL;
   
   while (nUnused > 0) {
      bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++;
      unused = ((void*)( 1 + ((UChar*)(unused))  ));
      nUnused--;
   }

   ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small );
   if (ret != BZ_OK)
      { BZ_SETERR(ret); free(bzf); return NULL; };

   bzf->strm.avail_in = bzf->bufN;
   bzf->strm.next_in  = bzf->buf;

   bzf->initialisedOk = True;
   return bzf;   
}


/*---------------------------------------------------*/
void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b )
{
   bzFile* bzf = (bzFile*)b;

   BZ_SETERR(BZ_OK);
   if (bzf == NULL)
      { BZ_SETERR(BZ_OK); return; };

   if (bzf->writing)
      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };

   if (bzf->initialisedOk)
      (void)BZ2_bzDecompressEnd ( &(bzf->strm) );
   free ( bzf );
}


/*---------------------------------------------------*/
int BZ_API(BZ2_bzRead) 
           ( int*    bzerror, 
             BZFILE* b, 
             void*   buf, 
             int     len )
{
   Int32   n, ret;
   bzFile* bzf = (bzFile*)b;

   BZ_SETERR(BZ_OK);

   if (bzf == NULL || buf == NULL || len < 0)
      { BZ_SETERR(BZ_PARAM_ERROR); return 0; };

   if (bzf->writing)
      { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; };

   if (len == 0)
      { BZ_SETERR(BZ_OK); return 0; };

   bzf->strm.avail_out = len;
   bzf->strm.next_out = buf;

   while (True) {

      if (ferror(bzf->handle)) 
         { BZ_SETERR(BZ_IO_ERROR); return 0; };

      if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) {
         n = fread ( bzf->buf, sizeof(UChar), 
                     BZ_MAX_UNUSED, bzf->handle );
         if (ferror(bzf->handle))
            { BZ_SETERR(BZ_IO_ERROR); return 0; };
         bzf->bufN = n;
         bzf->strm.avail_in = bzf->bufN;
         bzf->strm.next_in = bzf->buf;
      }

      ret = BZ2_bzDecompress ( &(bzf->strm) );

      if (ret != BZ_OK && ret != BZ_STREAM_END)
         { BZ_SETERR(ret); return 0; };

      if (ret == BZ_OK && myfeof(bzf->handle) && 
          bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0)
         { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; };

      if (ret == BZ_STREAM_END)
         { BZ_SETERR(BZ_STREAM_END);
           return len - bzf->strm.avail_out; };
      if (bzf->strm.avail_out == 0)
         { BZ_SETERR(BZ_OK); return len; };
      
   }

   return 0; /*not reached*/
}


/*---------------------------------------------------*/
void BZ_API(BZ2_bzReadGetUnused) 
                     ( int*    bzerror, 
                       BZFILE* b, 
                       void**  unused, 
                       int*    nUnused )
{
   bzFile* bzf = (bzFile*)b;
   if (bzf == NULL)
      { BZ_SETERR(BZ_PARAM_ERROR); return; };
   if (bzf->lastErr != BZ_STREAM_END)
      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
   if (unused == NULL || nUnused == NULL)
      { BZ_SETERR(BZ_PARAM_ERROR); return; };

   BZ_SETERR(BZ_OK);
   *nUnused = bzf->strm.avail_in;
   *unused = bzf->strm.next_in;
}
#endif


/*---------------------------------------------------*/
/*--- Misc convenience stuff                      ---*/
/*---------------------------------------------------*/

/*---------------------------------------------------*/
int BZ_API(BZ2_bzBuffToBuffCompress) 
                         ( char*         dest, 
                           unsigned int* destLen,
                           char*         source, 
                           unsigned int  sourceLen,
                           int           blockSize100k, 
                           int           verbosity, 
                           int           workFactor )
{
   bz_stream strm;
   int ret;

   if (dest == NULL || destLen == NULL || 
       source == NULL ||
       blockSize100k < 1 || blockSize100k > 9 ||
       verbosity < 0 || verbosity > 4 ||
       workFactor < 0 || workFactor > 250) 
      return BZ_PARAM_ERROR;

   if (workFactor == 0) workFactor = 30;
   strm.bzalloc = NULL;
   strm.bzfree = NULL;
   strm.opaque = NULL;
   ret = BZ2_bzCompressInit ( &strm, blockSize100k, 
                              verbosity, workFactor );
   if (ret != BZ_OK) return ret;

   strm.next_in = source;
   strm.next_out = dest;
   strm.avail_in = sourceLen;
   strm.avail_out = *destLen;

   ret = BZ2_bzCompress ( &strm, BZ_FINISH );
   if (ret == BZ_FINISH_OK) goto output_overflow;
   if (ret != BZ_STREAM_END) goto errhandler;

   /* normal termination */
   *destLen -= strm.avail_out;   
   BZ2_bzCompressEnd ( &strm );
   return BZ_OK;

   output_overflow:
   BZ2_bzCompressEnd ( &strm );
   return BZ_OUTBUFF_FULL;

   errhandler:
   BZ2_bzCompressEnd ( &strm );
   return ret;
}


/*---------------------------------------------------*/
int BZ_API(BZ2_bzBuffToBuffDecompress) 
                           ( char*         dest, 
                             unsigned int* destLen,
                             char*         source, 
                             unsigned int  sourceLen,
                             int           small,
                             int           verbosity )
{
   bz_stream strm;
   int ret;

   if (dest == NULL || destLen == NULL || 
       source == NULL ||
       (small != 0 && small != 1) ||
       verbosity < 0 || verbosity > 4) 
          return BZ_PARAM_ERROR;

   strm.bzalloc = NULL;
   strm.bzfree = NULL;
   strm.opaque = NULL;
   ret = BZ2_bzDecompressInit ( &strm, verbosity, small );
   if (ret != BZ_OK) return ret;

   strm.next_in = source;
   strm.next_out = dest;
   strm.avail_in = sourceLen;
   strm.avail_out = *destLen;

   ret = BZ2_bzDecompress ( &strm );
   if (ret == BZ_OK) goto output_overflow_or_eof;
   if (ret != BZ_STREAM_END) goto errhandler;

   /* normal termination */
   *destLen -= strm.avail_out;
   BZ2_bzDecompressEnd ( &strm );
   return BZ_OK;

   output_overflow_or_eof:
   if (strm.avail_out > 0) {
      BZ2_bzDecompressEnd ( &strm );
      return BZ_UNEXPECTED_EOF;
   } else {
      BZ2_bzDecompressEnd ( &strm );
      return BZ_OUTBUFF_FULL;
   };      

   errhandler:
   BZ2_bzDecompressEnd ( &strm );
   return ret; 
}


/*---------------------------------------------------*/
/*--
   Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)
   to support better zlib compatibility.
   This code is not _officially_ part of libbzip2 (yet);
   I haven't tested it, documented it, or considered the
   threading-safeness of it.
   If this code breaks, please contact both Yoshioka and me.
--*/
/*---------------------------------------------------*/

/*---------------------------------------------------*/
/*--
   return version like "0.9.5d, 4-Sept-1999".
--*/
const char * BZ_API(BZ2_bzlibVersion)(void)
{
   return BZ_VERSION;
}


#ifndef BZ_NO_STDIO
/*---------------------------------------------------*/

#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
#   include 
#   include 
#   define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
#else
#   define SET_BINARY_MODE(file)
#endif
static
BZFILE * bzopen_or_bzdopen
               ( const char *path,   /* no use when bzdopen */
                 int fd,             /* no use when bzdopen */
                 const char *mode,
                 int open_mode)      /* bzopen: 0, bzdopen:1 */
{
   int    bzerr;
   char   unused[BZ_MAX_UNUSED];
   int    blockSize100k = 9;
   int    writing       = 0;
   char   mode2[10]     = "";
   FILE   *fp           = NULL;
   BZFILE *bzfp         = NULL;
   int    verbosity     = 0;
   int    workFactor    = 30;
   int    smallMode     = 0;
   int    nUnused       = 0; 

   if (mode == NULL) return NULL;
   while (*mode) {
      switch (*mode) {
      case 'r':
         writing = 0; break;
      case 'w':
         writing = 1; break;
      case 's':
         smallMode = 1; break;
      default:
         if (isdigit((int)(*mode))) {
            blockSize100k = *mode-BZ_HDR_0;
         }
      }
      mode++;
   }
   strcat(mode2, writing ? "w" : "r" );
   strcat(mode2,"b");   /* binary mode */

   if (open_mode==0) {
      if (path==NULL || strcmp(path,"")==0) {
        fp = (writing ? stdout : stdin);
        SET_BINARY_MODE(fp);
      } else {
        fp = fopen(path,mode2);
      }
   } else {
#ifdef BZ_STRICT_ANSI
      fp = NULL;
#else
      fp = fdopen(fd,mode2);
#endif
   }
   if (fp == NULL) return NULL;

   if (writing) {
      /* Guard against total chaos and anarchy -- JRS */
      if (blockSize100k < 1) blockSize100k = 1;
      if (blockSize100k > 9) blockSize100k = 9; 
      bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k,
                             verbosity,workFactor);
   } else {
      bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode,
                            unused,nUnused);
   }
   if (bzfp == NULL) {
      if (fp != stdin && fp != stdout) fclose(fp);
      return NULL;
   }
   return bzfp;
}


/*---------------------------------------------------*/
/*--
   open file for read or write.
      ex) bzopen("file","w9")
      case path="" or NULL => use stdin or stdout.
--*/
BZFILE * BZ_API(BZ2_bzopen)
               ( const char *path,
                 const char *mode )
{
   return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0);
}


/*---------------------------------------------------*/
BZFILE * BZ_API(BZ2_bzdopen)
               ( int fd,
                 const char *mode )
{
   return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1);
}


/*---------------------------------------------------*/
int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len )
{
   int bzerr, nread;
   if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0;
   nread = BZ2_bzRead(&bzerr,b,buf,len);
   if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) {
      return nread;
   } else {
      return -1;
   }
}


/*---------------------------------------------------*/
int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len )
{
   int bzerr;

   BZ2_bzWrite(&bzerr,b,buf,len);
   if(bzerr == BZ_OK){
      return len;
   }else{
      return -1;
   }
}


/*---------------------------------------------------*/
int BZ_API(BZ2_bzflush) (GT_UNUSED BZFILE *b)
{
   /* do nothing now... */
   return 0;
}


/*---------------------------------------------------*/
void BZ_API(BZ2_bzclose) (BZFILE* b)
{
   int bzerr;
   FILE *fp;
   
   if (b==NULL) {return;}
   fp = ((bzFile *)b)->handle;
   if(((bzFile*)b)->writing){
      BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL);
      if(bzerr != BZ_OK){
         BZ2_bzWriteClose(NULL,b,1,NULL,NULL);
      }
   }else{
      BZ2_bzReadClose(&bzerr,b);
   }
   if(fp!=stdin && fp!=stdout){
      fclose(fp);
   }
}


/*---------------------------------------------------*/
/*--
   return last error code 
--*/
static const char *bzerrorstrings[] = {
       "OK"
      ,"SEQUENCE_ERROR"
      ,"PARAM_ERROR"
      ,"MEM_ERROR"
      ,"DATA_ERROR"
      ,"DATA_ERROR_MAGIC"
      ,"IO_ERROR"
      ,"UNEXPECTED_EOF"
      ,"OUTBUFF_FULL"
      ,"CONFIG_ERROR"
      ,"???"   /* for future */
      ,"???"   /* for future */
      ,"???"   /* for future */
      ,"???"   /* for future */
      ,"???"   /* for future */
      ,"???"   /* for future */
};


const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum)
{
   int err = ((bzFile *)b)->lastErr;

   if(err>0) err = 0;
   *errnum = err;
   return bzerrorstrings[err*-1];
}
#endif


/*-------------------------------------------------------------*/
/*--- end                                           bzlib.c ---*/
/*-------------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/bzlib.h000066400000000000000000000141451211610345200214230ustar00rootroot00000000000000
/*-------------------------------------------------------------*/
/*--- Public header file for the library.                   ---*/
/*---                                               bzlib.h ---*/
/*-------------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


#ifndef _BZLIB_H
#define _BZLIB_H

#ifdef __cplusplus
extern "C" {
#endif

#define BZ_RUN               0
#define BZ_FLUSH             1
#define BZ_FINISH            2

#define BZ_OK                0
#define BZ_RUN_OK            1
#define BZ_FLUSH_OK          2
#define BZ_FINISH_OK         3
#define BZ_STREAM_END        4
#define BZ_SEQUENCE_ERROR    (-1)
#define BZ_PARAM_ERROR       (-2)
#define BZ_MEM_ERROR         (-3)
#define BZ_DATA_ERROR        (-4)
#define BZ_DATA_ERROR_MAGIC  (-5)
#define BZ_IO_ERROR          (-6)
#define BZ_UNEXPECTED_EOF    (-7)
#define BZ_OUTBUFF_FULL      (-8)
#define BZ_CONFIG_ERROR      (-9)

typedef 
   struct {
      char *next_in;
      unsigned int avail_in;
      unsigned int total_in_lo32;
      unsigned int total_in_hi32;

      char *next_out;
      unsigned int avail_out;
      unsigned int total_out_lo32;
      unsigned int total_out_hi32;

      void *state;

      void *(*bzalloc)(void *,int,int);
      void (*bzfree)(void *,void *);
      void *opaque;
   } 
   bz_stream;


#ifndef BZ_IMPORT
#define BZ_EXPORT
#endif

#ifndef BZ_NO_STDIO
/* Need a definitition for FILE */
#include 
#endif

#ifdef _WIN32
#   include 
#   ifdef small
      /* windows.h define small to char */
#      undef small
#   endif
#   ifdef BZ_EXPORT
#   define BZ_API(func) WINAPI func
#   define BZ_EXTERN extern
#   else
   /* import windows dll dynamically */
#   define BZ_API(func) (WINAPI * func)
#   define BZ_EXTERN
#   endif
#else
#   define BZ_API(func) func
#   define BZ_EXTERN extern
#endif


/*-- Core (low-level) library functions --*/

BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( 
      bz_stream* strm, 
      int        blockSize100k, 
      int        verbosity, 
      int        workFactor 
   );

BZ_EXTERN int BZ_API(BZ2_bzCompress) ( 
      bz_stream* strm, 
      int action 
   );

BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( 
      bz_stream* strm 
   );

BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( 
      bz_stream *strm, 
      int       verbosity, 
      int       small
   );

BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( 
      bz_stream* strm 
   );

BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( 
      bz_stream *strm 
   );



/*-- High(er) level library functions --*/

#ifndef BZ_NO_STDIO
#define BZ_MAX_UNUSED 5000

typedef void BZFILE;

BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( 
      int*  bzerror,   
      FILE* f, 
      int   verbosity, 
      int   small,
      void* unused,    
      int   nUnused 
   );

BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( 
      int*    bzerror, 
      BZFILE* b 
   );

BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( 
      int*    bzerror, 
      BZFILE* b, 
      void**  unused,  
      int*    nUnused 
   );

BZ_EXTERN int BZ_API(BZ2_bzRead) ( 
      int*    bzerror, 
      BZFILE* b, 
      void*   buf, 
      int     len 
   );

BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( 
      int*  bzerror,      
      FILE* f, 
      int   blockSize100k, 
      int   verbosity, 
      int   workFactor 
   );

BZ_EXTERN void BZ_API(BZ2_bzWrite) ( 
      int*    bzerror, 
      BZFILE* b, 
      void*   buf, 
      int     len 
   );

BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( 
      int*          bzerror, 
      BZFILE*       b, 
      int           abandon, 
      unsigned int* nbytes_in, 
      unsigned int* nbytes_out 
   );

BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( 
      int*          bzerror, 
      BZFILE*       b, 
      int           abandon, 
      unsigned int* nbytes_in_lo32, 
      unsigned int* nbytes_in_hi32, 
      unsigned int* nbytes_out_lo32, 
      unsigned int* nbytes_out_hi32
   );
#endif


/*-- Utility functions --*/

BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( 
      char*         dest, 
      unsigned int* destLen,
      char*         source, 
      unsigned int  sourceLen,
      int           blockSize100k, 
      int           verbosity, 
      int           workFactor 
   );

BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( 
      char*         dest, 
      unsigned int* destLen,
      char*         source, 
      unsigned int  sourceLen,
      int           small, 
      int           verbosity 
   );


/*--
   Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)
   to support better zlib compatibility.
   This code is not _officially_ part of libbzip2 (yet);
   I haven't tested it, documented it, or considered the
   threading-safeness of it.
   If this code breaks, please contact both Yoshioka and me.
--*/

BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (
      void
   );

#ifndef BZ_NO_STDIO
BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (
      const char *path,
      const char *mode
   );

BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (
      int        fd,
      const char *mode
   );
         
BZ_EXTERN int BZ_API(BZ2_bzread) (
      BZFILE* b, 
      void* buf, 
      int len 
   );

BZ_EXTERN int BZ_API(BZ2_bzwrite) (
      BZFILE* b, 
      void*   buf, 
      int     len 
   );

BZ_EXTERN int BZ_API(BZ2_bzflush) (
      BZFILE* b
   );

BZ_EXTERN void BZ_API(BZ2_bzclose) (
      BZFILE* b
   );

BZ_EXTERN const char * BZ_API(BZ2_bzerror) (
      BZFILE *b, 
      int    *errnum
   );
#endif

#ifdef __cplusplus
}
#endif

#endif

/*-------------------------------------------------------------*/
/*--- end                                           bzlib.h ---*/
/*-------------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/bzlib_private.h000066400000000000000000000316741211610345200231630ustar00rootroot00000000000000
/*-------------------------------------------------------------*/
/*--- Private header file for the library.                  ---*/
/*---                                       bzlib_private.h ---*/
/*-------------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


#ifndef _BZLIB_PRIVATE_H
#define _BZLIB_PRIVATE_H

#include 

#ifndef BZ_NO_STDIO
#include 
#include 
#include 
#endif

#include "bzlib.h"



/*-- General stuff. --*/

#define BZ_VERSION  "1.0.6, 6-Sept-2010"

typedef char            Char;
typedef unsigned char   Bool;
typedef unsigned char   UChar;
typedef int             Int32;
typedef unsigned int    UInt32;
typedef short           Int16;
typedef unsigned short  UInt16;

#define True  ((Bool)1)
#define False ((Bool)0)

#ifndef __GNUC__
#define __inline__  /* */
#endif 

#ifndef BZ_NO_STDIO

extern void BZ2_bz__AssertH__fail ( int errcode );
#define AssertH(cond,errcode) \
   { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }

#if BZ_DEBUG
#define AssertD(cond,msg) \
   { if (!(cond)) {       \
      fprintf ( stderr,   \
        "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
      exit(1); \
   }}
#else
#define AssertD(cond,msg) /* */
#endif

#define VPrintf0(zf) \
   fprintf(stderr,zf)
#define VPrintf1(zf,za1) \
   fprintf(stderr,zf,za1)
#define VPrintf2(zf,za1,za2) \
   fprintf(stderr,zf,za1,za2)
#define VPrintf3(zf,za1,za2,za3) \
   fprintf(stderr,zf,za1,za2,za3)
#define VPrintf4(zf,za1,za2,za3,za4) \
   fprintf(stderr,zf,za1,za2,za3,za4)
#define VPrintf5(zf,za1,za2,za3,za4,za5) \
   fprintf(stderr,zf,za1,za2,za3,za4,za5)

#else

extern void bz_internal_error ( int errcode );
#define AssertH(cond,errcode) \
   { if (!(cond)) bz_internal_error ( errcode ); }
#define AssertD(cond,msg)                do { } while (0)
#define VPrintf0(zf)                     do { } while (0)
#define VPrintf1(zf,za1)                 do { } while (0)
#define VPrintf2(zf,za1,za2)             do { } while (0)
#define VPrintf3(zf,za1,za2,za3)         do { } while (0)
#define VPrintf4(zf,za1,za2,za3,za4)     do { } while (0)
#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)

#endif


#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
#define BZFREE(ppp)  (strm->bzfree)(strm->opaque,(ppp))


/*-- Header bytes. --*/

#define BZ_HDR_B 0x42   /* 'B' */
#define BZ_HDR_Z 0x5a   /* 'Z' */
#define BZ_HDR_h 0x68   /* 'h' */
#define BZ_HDR_0 0x30   /* '0' */
  
/*-- Constants for the back end. --*/

#define BZ_MAX_ALPHA_SIZE 258
#define BZ_MAX_CODE_LEN    23

#define BZ_RUNA 0
#define BZ_RUNB 1

#define BZ_N_GROUPS 6
#define BZ_G_SIZE   50
#define BZ_N_ITERS  4

#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))



/*-- Stuff for randomising repetitive blocks. --*/

extern Int32 BZ2_rNums[512];

#define BZ_RAND_DECLS                          \
   Int32 rNToGo;                               \
   Int32 rTPos                                 \

#define BZ_RAND_INIT_MASK                      \
   s->rNToGo = 0;                              \
   s->rTPos  = 0                               \

#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)

#define BZ_RAND_UPD_MASK                       \
   if (s->rNToGo == 0) {                       \
      s->rNToGo = BZ2_rNums[s->rTPos];         \
      s->rTPos++;                              \
      if (s->rTPos == 512) s->rTPos = 0;       \
   }                                           \
   s->rNToGo--;



/*-- Stuff for doing CRCs. --*/

extern UInt32 BZ2_crc32Table[256];

#define BZ_INITIALISE_CRC(crcVar)              \
{                                              \
   crcVar = 0xffffffffL;                       \
}

#define BZ_FINALISE_CRC(crcVar)                \
{                                              \
   crcVar = ~(crcVar);                         \
}

#define BZ_UPDATE_CRC(crcVar,cha)              \
{                                              \
   crcVar = (crcVar << 8) ^                    \
            BZ2_crc32Table[(crcVar >> 24) ^    \
                           ((UChar)cha)];      \
}



/*-- States and modes for compression. --*/

#define BZ_M_IDLE      1
#define BZ_M_RUNNING   2
#define BZ_M_FLUSHING  3
#define BZ_M_FINISHING 4

#define BZ_S_OUTPUT    1
#define BZ_S_INPUT     2

#define BZ_N_RADIX 2
#define BZ_N_QSORT 12
#define BZ_N_SHELL 18
#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)




/*-- Structure holding all the compression-side stuff. --*/

typedef
   struct {
      /* pointer back to the struct bz_stream */
      bz_stream* strm;

      /* mode this stream is in, and whether inputting */
      /* or outputting data */
      Int32    mode;
      Int32    state;

      /* remembers avail_in when flush/finish requested */
      UInt32   avail_in_expect;

      /* for doing the block sorting */
      UInt32*  arr1;
      UInt32*  arr2;
      UInt32*  ftab;
      Int32    origPtr;

      /* aliases for arr1 and arr2 */
      UInt32*  ptr;
      UChar*   block;
      UInt16*  mtfv;
      UChar*   zbits;

      /* for deciding when to use the fallback sorting algorithm */
      Int32    workFactor;

      /* run-length-encoding of the input */
      UInt32   state_in_ch;
      Int32    state_in_len;
      BZ_RAND_DECLS;

      /* input and output limits and current posns */
      Int32    nblock;
      Int32    nblockMAX;
      Int32    numZ;
      Int32    state_out_pos;

      /* map of bytes used in block */
      Int32    nInUse;
      Bool     inUse[256];
      UChar    unseqToSeq[256];

      /* the buffer for bit stream creation */
      UInt32   bsBuff;
      Int32    bsLive;

      /* block and combined CRCs */
      UInt32   blockCRC;
      UInt32   combinedCRC;

      /* misc administratium */
      Int32    verbosity;
      Int32    blockNo;
      Int32    blockSize100k;

      /* stuff for coding the MTF values */
      Int32    nMTF;
      Int32    mtfFreq    [BZ_MAX_ALPHA_SIZE];
      UChar    selector   [BZ_MAX_SELECTORS];
      UChar    selectorMtf[BZ_MAX_SELECTORS];

      UChar    len     [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
      Int32    code    [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
      Int32    rfreq   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
      /* second dimension: only 3 needed; 4 makes index calculations faster */
      UInt32   len_pack[BZ_MAX_ALPHA_SIZE][4];

   }
   EState;



/*-- externs for compression. --*/

extern void 
BZ2_blockSort ( EState* );

extern void 
BZ2_compressBlock ( EState*, Bool );

extern void 
BZ2_bsInitWrite ( EState* );

extern void 
BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );

extern void 
BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );



/*-- states for decompression. --*/

#define BZ_X_IDLE        1
#define BZ_X_OUTPUT      2

#define BZ_X_MAGIC_1     10
#define BZ_X_MAGIC_2     11
#define BZ_X_MAGIC_3     12
#define BZ_X_MAGIC_4     13
#define BZ_X_BLKHDR_1    14
#define BZ_X_BLKHDR_2    15
#define BZ_X_BLKHDR_3    16
#define BZ_X_BLKHDR_4    17
#define BZ_X_BLKHDR_5    18
#define BZ_X_BLKHDR_6    19
#define BZ_X_BCRC_1      20
#define BZ_X_BCRC_2      21
#define BZ_X_BCRC_3      22
#define BZ_X_BCRC_4      23
#define BZ_X_RANDBIT     24
#define BZ_X_ORIGPTR_1   25
#define BZ_X_ORIGPTR_2   26
#define BZ_X_ORIGPTR_3   27
#define BZ_X_MAPPING_1   28
#define BZ_X_MAPPING_2   29
#define BZ_X_SELECTOR_1  30
#define BZ_X_SELECTOR_2  31
#define BZ_X_SELECTOR_3  32
#define BZ_X_CODING_1    33
#define BZ_X_CODING_2    34
#define BZ_X_CODING_3    35
#define BZ_X_MTF_1       36
#define BZ_X_MTF_2       37
#define BZ_X_MTF_3       38
#define BZ_X_MTF_4       39
#define BZ_X_MTF_5       40
#define BZ_X_MTF_6       41
#define BZ_X_ENDHDR_2    42
#define BZ_X_ENDHDR_3    43
#define BZ_X_ENDHDR_4    44
#define BZ_X_ENDHDR_5    45
#define BZ_X_ENDHDR_6    46
#define BZ_X_CCRC_1      47
#define BZ_X_CCRC_2      48
#define BZ_X_CCRC_3      49
#define BZ_X_CCRC_4      50



/*-- Constants for the fast MTF decoder. --*/

#define MTFA_SIZE 4096
#define MTFL_SIZE 16



/*-- Structure holding all the decompression-side stuff. --*/

typedef
   struct {
      /* pointer back to the struct bz_stream */
      bz_stream* strm;

      /* state indicator for this stream */
      Int32    state;

      /* for doing the final run-length decoding */
      UChar    state_out_ch;
      Int32    state_out_len;
      Bool     blockRandomised;
      BZ_RAND_DECLS;

      /* the buffer for bit stream reading */
      UInt32   bsBuff;
      Int32    bsLive;

      /* misc administratium */
      Int32    blockSize100k;
      Bool     smallDecompress;
      Int32    currBlockNo;
      Int32    verbosity;

      /* for undoing the Burrows-Wheeler transform */
      Int32    origPtr;
      UInt32   tPos;
      Int32    k0;
      Int32    unzftab[256];
      Int32    nblock_used;
      Int32    cftab[257];
      Int32    cftabCopy[257];

      /* for undoing the Burrows-Wheeler transform (FAST) */
      UInt32   *tt;

      /* for undoing the Burrows-Wheeler transform (SMALL) */
      UInt16   *ll16;
      UChar    *ll4;

      /* stored and calculated CRCs */
      UInt32   storedBlockCRC;
      UInt32   storedCombinedCRC;
      UInt32   calculatedBlockCRC;
      UInt32   calculatedCombinedCRC;

      /* map of bytes used in block */
      Int32    nInUse;
      Bool     inUse[256];
      Bool     inUse16[16];
      UChar    seqToUnseq[256];

      /* for decoding the MTF values */
      UChar    mtfa   [MTFA_SIZE];
      Int32    mtfbase[256 / MTFL_SIZE];
      UChar    selector   [BZ_MAX_SELECTORS];
      UChar    selectorMtf[BZ_MAX_SELECTORS];
      UChar    len  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];

      Int32    limit  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
      Int32    base   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
      Int32    perm   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
      Int32    minLens[BZ_N_GROUPS];

      /* save area for scalars in the main decompress code */
      Int32    save_i;
      Int32    save_j;
      Int32    save_t;
      Int32    save_alphaSize;
      Int32    save_nGroups;
      Int32    save_nSelectors;
      Int32    save_EOB;
      Int32    save_groupNo;
      Int32    save_groupPos;
      Int32    save_nextSym;
      Int32    save_nblockMAX;
      Int32    save_nblock;
      Int32    save_es;
      Int32    save_N;
      Int32    save_curr;
      Int32    save_zt;
      Int32    save_zn; 
      Int32    save_zvec;
      Int32    save_zj;
      Int32    save_gSel;
      Int32    save_gMinlen;
      Int32*   save_gLimit;
      Int32*   save_gBase;
      Int32*   save_gPerm;

   }
   DState;



/*-- Macros for decompression. --*/

#define BZ_GET_FAST(cccc)                     \
    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
    s->tPos = s->tt[s->tPos];                 \
    cccc = (UChar)(s->tPos & 0xff);           \
    s->tPos >>= 8;

#define BZ_GET_FAST_C(cccc)                   \
    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
    if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \
    c_tPos = c_tt[c_tPos];                    \
    cccc = (UChar)(c_tPos & 0xff);            \
    c_tPos >>= 8;

#define SET_LL4(i,n)                                          \
   { if (((i) & 0x1) == 0)                                    \
        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else    \
        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4);  \
   }

#define GET_LL4(i)                             \
   ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)

#define SET_LL(i,n)                          \
   { s->ll16[i] = (UInt16)(n & 0x0000ffff);  \
     SET_LL4(i, n >> 16);                    \
   }

#define GET_LL(i) \
   (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))

#define BZ_GET_SMALL(cccc)                            \
    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
    cccc = BZ2_indexIntoF ( s->tPos, s->cftab );    \
    s->tPos = GET_LL(s->tPos);


/*-- externs for decompression. --*/

extern Int32 
BZ2_indexIntoF ( Int32, Int32* );

extern Int32 
BZ2_decompress ( DState* );

extern void 
BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
                           Int32,  Int32, Int32 );


#endif


/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/

#ifdef BZ_NO_STDIO
#ifndef NULL
#define NULL 0
#endif
#endif


/*-------------------------------------------------------------*/
/*--- end                                   bzlib_private.h ---*/
/*-------------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/bzmore000066400000000000000000000023531211610345200213670ustar00rootroot00000000000000#!/bin/sh

# Bzmore wrapped for bzip2, 
# adapted from zmore by Philippe Troin  for Debian GNU/Linux.

PATH="/usr/bin:$PATH"; export PATH

prog=`echo $0 | sed 's|.*/||'`
case "$prog" in
	*less)	more=less	;;
	*)	more=more       ;;
esac

if test "`echo -n a`" = "-n a"; then
  # looks like a SysV system:
  n1=''; n2='\c'
else
  n1='-n'; n2=''
fi
oldtty=`stty -g 2>/dev/null`
if stty -cbreak 2>/dev/null; then
  cb='cbreak'; ncb='-cbreak'
else
  # 'stty min 1' resets eof to ^a on both SunOS and SysV!
  cb='min 1 -icanon'; ncb='icanon eof ^d'
fi
if test $? -eq 0 -a -n "$oldtty"; then
   trap 'stty $oldtty 2>/dev/null; exit' 0 2 3 5 10 13 15
else
   trap 'stty $ncb echo 2>/dev/null; exit' 0 2 3 5 10 13 15
fi

if test $# = 0; then
    if test -t 0; then
	echo usage: $prog files...
    else
	bzip2 -cdfq | eval $more
    fi
else
    FIRST=1
    for FILE
    do
	if test $FIRST -eq 0; then
		echo $n1 "--More--(Next file: $FILE)$n2"
		stty $cb -echo 2>/dev/null
		ANS=`dd bs=1 count=1 2>/dev/null` 
		stty $ncb echo 2>/dev/null
		echo " "
		if test "$ANS" = 'e' -o "$ANS" = 'q'; then
			exit
		fi
	fi
	if test "$ANS" != 's'; then
		echo "------> $FILE <------"
		bzip2 -cdfq "$FILE" | eval $more
	fi
	if test -t; then
		FIRST=0
	fi
    done
fi
genometools-1.5.1/src/external/bzip2-1.0.6/bzmore.1000066400000000000000000000103261211610345200215250ustar00rootroot00000000000000.\"Shamelessly copied from zmore.1 by Philippe Troin 
.\"for Debian GNU/Linux
.TH BZMORE 1
.SH NAME
bzmore, bzless \- file perusal filter for crt viewing of bzip2 compressed text
.SH SYNOPSIS
.B bzmore
[ name ...  ]
.br
.B bzless
[ name ...  ]
.SH NOTE
In the following description,
.I bzless
and
.I less
can be used interchangeably with
.I bzmore
and
.I more.
.SH DESCRIPTION
.I  Bzmore
is a filter which allows examination of compressed or plain text files
one screenful at a time on a soft-copy terminal.
.I bzmore
works on files compressed with
.I bzip2
and also on uncompressed files.
If a file does not exist,
.I bzmore
looks for a file of the same name with the addition of a .bz2 suffix.
.PP
.I Bzmore
normally pauses after each screenful, printing --More--
at the bottom of the screen.
If the user then types a carriage return, one more line is displayed.
If the user hits a space,
another screenful is displayed.  Other possibilities are enumerated later.
.PP
.I Bzmore
looks in the file
.I /etc/termcap
to determine terminal characteristics,
and to determine the default window size.
On a terminal capable of displaying 24 lines,
the default window size is 22 lines.
Other sequences which may be typed when
.I bzmore
pauses, and their effects, are as follows (\fIi\fP is an optional integer
argument, defaulting to 1) :
.PP
.IP \fIi\|\fP
display
.I i
more lines, (or another screenful if no argument is given)
.PP
.IP ^D
display 11 more lines (a ``scroll'').
If
.I i
is given, then the scroll size is set to \fIi\|\fP.
.PP
.IP d
same as ^D (control-D)
.PP
.IP \fIi\|\fPz
same as typing a space except that \fIi\|\fP, if present, becomes the new
window size.  Note that the window size reverts back to the default at the
end of the current file.
.PP
.IP \fIi\|\fPs
skip \fIi\|\fP lines and print a screenful of lines
.PP
.IP \fIi\|\fPf
skip \fIi\fP screenfuls and print a screenful of lines
.PP
.IP "q or Q"
quit reading the current file; go on to the next (if any)
.PP
.IP "e or q"
When the prompt --More--(Next file: 
.IR file )
is printed, this command causes bzmore to exit.
.PP
.IP s
When the prompt --More--(Next file: 
.IR file )
is printed, this command causes bzmore to skip the next file and continue.
.PP 
.IP =
Display the current line number.
.PP
.IP \fIi\|\fP/expr
search for the \fIi\|\fP-th occurrence of the regular expression \fIexpr.\fP
If the pattern is not found,
.I bzmore
goes on to the next file (if any).
Otherwise, a screenful is displayed, starting two lines before the place
where the expression was found.
The user's erase and kill characters may be used to edit the regular
expression.
Erasing back past the first column cancels the search command.
.PP
.IP \fIi\|\fPn
search for the \fIi\|\fP-th occurrence of the last regular expression entered.
.PP
.IP !command
invoke a shell with \fIcommand\|\fP. 
The character `!' in "command" are replaced with the
previous shell command.  The sequence "\\!" is replaced by "!".
.PP
.IP ":q or :Q"
quit reading the current file; go on to the next (if any)
(same as q or Q).
.PP
.IP .
(dot) repeat the previous command.
.PP
The commands take effect immediately, i.e., it is not necessary to
type a carriage return.
Up to the time when the command character itself is given,
the user may hit the line kill character to cancel the numerical
argument being formed.
In addition, the user may hit the erase character to redisplay the
--More-- message.
.PP
At any time when output is being sent to the terminal, the user can
hit the quit key (normally control\-\\).
.I Bzmore
will stop sending output, and will display the usual --More--
prompt.
The user may then enter one of the above commands in the normal manner.
Unfortunately, some output is lost when this is done, due to the
fact that any characters waiting in the terminal's output queue
are flushed when the quit signal occurs.
.PP
The terminal is set to
.I noecho
mode by this program so that the output can be continuous.
What you type will thus not show on your terminal, except for the / and !
commands.
.PP
If the standard output is not a teletype, then
.I bzmore
acts just like
.I bzcat,
except that a header is printed before each file.
.SH FILES
.DT
/etc/termcap		Terminal data base
.SH "SEE ALSO"
more(1), less(1), bzip2(1), bzdiff(1), bzgrep(1)
genometools-1.5.1/src/external/bzip2-1.0.6/compress.c000066400000000000000000000501211211610345200221410ustar00rootroot00000000000000
/*-------------------------------------------------------------*/
/*--- Compression machinery (not incl block sorting)        ---*/
/*---                                            compress.c ---*/
/*-------------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


/* CHANGES
    0.9.0    -- original version.
    0.9.0a/b -- no changes in this file.
    0.9.0c   -- changed setting of nGroups in sendMTFValues() 
                so as to do a bit better on small files
*/

#include "bzlib_private.h"


/*---------------------------------------------------*/
/*--- Bit stream I/O                              ---*/
/*---------------------------------------------------*/

/*---------------------------------------------------*/
void BZ2_bsInitWrite ( EState* s )
{
   s->bsLive = 0;
   s->bsBuff = 0;
}


/*---------------------------------------------------*/
static
void bsFinishWrite ( EState* s )
{
   while (s->bsLive > 0) {
      s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);
      s->numZ++;
      s->bsBuff <<= 8;
      s->bsLive -= 8;
   }
}


/*---------------------------------------------------*/
#define bsNEEDW(nz)                           \
{                                             \
   while (s->bsLive >= 8) {                   \
      s->zbits[s->numZ]                       \
         = (UChar)(s->bsBuff >> 24);          \
      s->numZ++;                              \
      s->bsBuff <<= 8;                        \
      s->bsLive -= 8;                         \
   }                                          \
}


/*---------------------------------------------------*/
static
__inline__
void bsW ( EState* s, Int32 n, UInt32 v )
{
   bsNEEDW ( n );
   s->bsBuff |= (v << (32 - s->bsLive - n));
   s->bsLive += n;
}


/*---------------------------------------------------*/
static
void bsPutUInt32 ( EState* s, UInt32 u )
{
   bsW ( s, 8, (u >> 24) & 0xffL );
   bsW ( s, 8, (u >> 16) & 0xffL );
   bsW ( s, 8, (u >>  8) & 0xffL );
   bsW ( s, 8,  u        & 0xffL );
}


/*---------------------------------------------------*/
static
void bsPutUChar ( EState* s, UChar c )
{
   bsW( s, 8, (UInt32)c );
}


/*---------------------------------------------------*/
/*--- The back end proper                         ---*/
/*---------------------------------------------------*/

/*---------------------------------------------------*/
static
void makeMaps_e ( EState* s )
{
   Int32 i;
   s->nInUse = 0;
   for (i = 0; i < 256; i++)
      if (s->inUse[i]) {
         s->unseqToSeq[i] = s->nInUse;
         s->nInUse++;
      }
}


/*---------------------------------------------------*/
static
void generateMTFValues ( EState* s )
{
   UChar   yy[256];
   Int32   i, j;
   Int32   zPend;
   Int32   wr;
   Int32   EOB;

   /* 
      After sorting (eg, here),
         s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,
         and
         ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] 
         holds the original block data.

      The first thing to do is generate the MTF values,
      and put them in
         ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].
      Because there are strictly fewer or equal MTF values
      than block values, ptr values in this area are overwritten
      with MTF values only when they are no longer needed.

      The final compressed bitstream is generated into the
      area starting at
         (UChar*) (&((UChar*)s->arr2)[s->nblock])

      These storage aliases are set up in bzCompressInit(),
      except for the last one, which is arranged in 
      compressBlock().
   */
   UInt32* ptr   = s->ptr;
   UChar* block  = s->block;
   UInt16* mtfv  = s->mtfv;

   makeMaps_e ( s );
   EOB = s->nInUse+1;

   for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;

   wr = 0;
   zPend = 0;
   for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;

   for (i = 0; i < s->nblock; i++) {
      UChar ll_i;
      AssertD ( wr <= i, "generateMTFValues(1)" );
      j = ptr[i]-1; if (j < 0) j += s->nblock;
      ll_i = s->unseqToSeq[block[j]];
      AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" );

      if (yy[0] == ll_i) { 
         zPend++;
      } else {

         if (zPend > 0) {
            zPend--;
            while (True) {
               if (zPend & 1) {
                  mtfv[wr] = BZ_RUNB; wr++; 
                  s->mtfFreq[BZ_RUNB]++; 
               } else {
                  mtfv[wr] = BZ_RUNA; wr++; 
                  s->mtfFreq[BZ_RUNA]++; 
               }
               if (zPend < 2) break;
               zPend = (zPend - 2) / 2;
            };
            zPend = 0;
         }
         {
            register UChar  rtmp;
            register UChar* ryy_j;
            register UChar  rll_i;
            rtmp  = yy[1];
            yy[1] = yy[0];
            ryy_j = &(yy[1]);
            rll_i = ll_i;
            while ( rll_i != rtmp ) {
               register UChar rtmp2;
               ryy_j++;
               rtmp2  = rtmp;
               rtmp   = *ryy_j;
               *ryy_j = rtmp2;
            };
            yy[0] = rtmp;
            j = ryy_j - &(yy[0]);
            mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;
         }

      }
   }

   if (zPend > 0) {
      zPend--;
      while (True) {
         if (zPend & 1) {
            mtfv[wr] = BZ_RUNB; wr++; 
            s->mtfFreq[BZ_RUNB]++; 
         } else {
            mtfv[wr] = BZ_RUNA; wr++; 
            s->mtfFreq[BZ_RUNA]++; 
         }
         if (zPend < 2) break;
         zPend = (zPend - 2) / 2;
      };
      zPend = 0;
   }

   mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;

   s->nMTF = wr;
}


/*---------------------------------------------------*/
#define BZ_LESSER_ICOST  0
#define BZ_GREATER_ICOST 15

static
void sendMTFValues ( EState* s )
{
   Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;
   Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;
   Int32 nGroups, nBytes;

   /*--
   UChar  len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
   is a global since the decoder also needs it.

   Int32  code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
   Int32  rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
   are also globals only used in this proc.
   Made global to keep stack frame size small.
   --*/


   UInt16 cost[BZ_N_GROUPS];
   Int32  fave[BZ_N_GROUPS];

   UInt16* mtfv = s->mtfv;

   if (s->verbosity >= 3)
      VPrintf3( "      %d in block, %d after MTF & 1-2 coding, "
                "%d+2 syms in use\n", 
                s->nblock, s->nMTF, s->nInUse );

   alphaSize = s->nInUse+2;
   for (t = 0; t < BZ_N_GROUPS; t++)
      for (v = 0; v < alphaSize; v++)
         s->len[t][v] = BZ_GREATER_ICOST;

   /*--- Decide how many coding tables to use ---*/
   AssertH ( s->nMTF > 0, 3001 );
   if (s->nMTF < 200)  nGroups = 2; else
   if (s->nMTF < 600)  nGroups = 3; else
   if (s->nMTF < 1200) nGroups = 4; else
   if (s->nMTF < 2400) nGroups = 5; else
                       nGroups = 6;

   /*--- Generate an initial set of coding tables ---*/
   { 
      Int32 nPart, remF, tFreq, aFreq;

      nPart = nGroups;
      remF  = s->nMTF;
      gs = 0;
      while (nPart > 0) {
         tFreq = remF / nPart;
         ge = gs-1;
         aFreq = 0;
         while (aFreq < tFreq && ge < alphaSize-1) {
            ge++;
            aFreq += s->mtfFreq[ge];
         }

         if (ge > gs 
             && nPart != nGroups && nPart != 1 
             && ((nGroups-nPart) % 2 == 1)) {
            aFreq -= s->mtfFreq[ge];
            ge--;
         }

         if (s->verbosity >= 3)
            VPrintf5( "      initial group %d, [%d .. %d], "
                      "has %d syms (%4.1f%%)\n",
                      nPart, gs, ge, aFreq, 
                      (100.0 * (float)aFreq) / (float)(s->nMTF) );
 
         for (v = 0; v < alphaSize; v++)
            if (v >= gs && v <= ge) 
               s->len[nPart-1][v] = BZ_LESSER_ICOST; else
               s->len[nPart-1][v] = BZ_GREATER_ICOST;
 
         nPart--;
         gs = ge+1;
         remF -= aFreq;
      }
   }

   /*--- 
      Iterate up to BZ_N_ITERS times to improve the tables.
   ---*/
   for (iter = 0; iter < BZ_N_ITERS; iter++) {

      for (t = 0; t < nGroups; t++) fave[t] = 0;

      for (t = 0; t < nGroups; t++)
         for (v = 0; v < alphaSize; v++)
            s->rfreq[t][v] = 0;

      /*---
        Set up an auxiliary length table which is used to fast-track
	the common case (nGroups == 6). 
      ---*/
      if (nGroups == 6) {
         for (v = 0; v < alphaSize; v++) {
            s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];
            s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];
            s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];
	 }
      }

      nSelectors = 0;
      totc = 0;
      gs = 0;
      while (True) {

         /*--- Set group start & end marks. --*/
         if (gs >= s->nMTF) break;
         ge = gs + BZ_G_SIZE - 1; 
         if (ge >= s->nMTF) ge = s->nMTF-1;

         /*-- 
            Calculate the cost of this group as coded
            by each of the coding tables.
         --*/
         for (t = 0; t < nGroups; t++) cost[t] = 0;

         if (nGroups == 6 && 50 == ge-gs+1) {
            /*--- fast track the common case ---*/
            register UInt32 cost01, cost23, cost45;
            register UInt16 icv;
            cost01 = cost23 = cost45 = 0;

#           define BZ_ITER(nn)                \
               icv = mtfv[gs+(nn)];           \
               cost01 += s->len_pack[icv][0]; \
               cost23 += s->len_pack[icv][1]; \
               cost45 += s->len_pack[icv][2]; \

            BZ_ITER(0);  BZ_ITER(1);  BZ_ITER(2);  BZ_ITER(3);  BZ_ITER(4);
            BZ_ITER(5);  BZ_ITER(6);  BZ_ITER(7);  BZ_ITER(8);  BZ_ITER(9);
            BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);
            BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);
            BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);
            BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);
            BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);
            BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);
            BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);
            BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);

#           undef BZ_ITER

            cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;
            cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;
            cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;

         } else {
	    /*--- slow version which correctly handles all situations ---*/
            for (i = gs; i <= ge; i++) { 
               UInt16 icv = mtfv[i];
               for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];
            }
         }
 
         /*-- 
            Find the coding table which is best for this group,
            and record its identity in the selector table.
         --*/
         bc = 999999999; bt = -1;
         for (t = 0; t < nGroups; t++)
            if (cost[t] < bc) { bc = cost[t]; bt = t; };
         totc += bc;
         fave[bt]++;
         s->selector[nSelectors] = bt;
         nSelectors++;

         /*-- 
            Increment the symbol frequencies for the selected table.
          --*/
         if (nGroups == 6 && 50 == ge-gs+1) {
            /*--- fast track the common case ---*/

#           define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++

            BZ_ITUR(0);  BZ_ITUR(1);  BZ_ITUR(2);  BZ_ITUR(3);  BZ_ITUR(4);
            BZ_ITUR(5);  BZ_ITUR(6);  BZ_ITUR(7);  BZ_ITUR(8);  BZ_ITUR(9);
            BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);
            BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);
            BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);
            BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);
            BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);
            BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);
            BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);
            BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);

#           undef BZ_ITUR

         } else {
	    /*--- slow version which correctly handles all situations ---*/
            for (i = gs; i <= ge; i++)
               s->rfreq[bt][ mtfv[i] ]++;
         }

         gs = ge+1;
      }
      if (s->verbosity >= 3) {
         VPrintf2 ( "      pass %d: size is %d, grp uses are ", 
                   iter+1, totc/8 );
         for (t = 0; t < nGroups; t++)
            VPrintf1 ( "%d ", fave[t] );
         VPrintf0 ( "\n" );
      }

      /*--
        Recompute the tables based on the accumulated frequencies.
      --*/
      /* maxLen was changed from 20 to 17 in bzip2-1.0.3.  See 
         comment in huffman.c for details. */
      for (t = 0; t < nGroups; t++)
         BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), 
                                 alphaSize, 17 /*20*/ );
   }


   AssertH( nGroups < 8, 3002 );
   AssertH( nSelectors < 32768 &&
            nSelectors <= (2 + (900000 / BZ_G_SIZE)),
            3003 );


   /*--- Compute MTF values for the selectors. ---*/
   {
      UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;
      for (i = 0; i < nGroups; i++) pos[i] = i;
      for (i = 0; i < nSelectors; i++) {
         ll_i = s->selector[i];
         j = 0;
         tmp = pos[j];
         while ( ll_i != tmp ) {
            j++;
            tmp2 = tmp;
            tmp = pos[j];
            pos[j] = tmp2;
         };
         pos[0] = tmp;
         s->selectorMtf[i] = j;
      }
   };

   /*--- Assign actual codes for the tables. --*/
   for (t = 0; t < nGroups; t++) {
      minLen = 32;
      maxLen = 0;
      for (i = 0; i < alphaSize; i++) {
         if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
         if (s->len[t][i] < minLen) minLen = s->len[t][i];
      }
      AssertH ( !(maxLen > 17 /*20*/ ), 3004 );
      AssertH ( !(minLen < 1),  3005 );
      BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), 
                          minLen, maxLen, alphaSize );
   }

   /*--- Transmit the mapping table. ---*/
   { 
      Bool inUse16[16];
      for (i = 0; i < 16; i++) {
          inUse16[i] = False;
          for (j = 0; j < 16; j++)
             if (s->inUse[i * 16 + j]) inUse16[i] = True;
      }
     
      nBytes = s->numZ;
      for (i = 0; i < 16; i++)
         if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);

      for (i = 0; i < 16; i++)
         if (inUse16[i])
            for (j = 0; j < 16; j++) {
               if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);
            }

      if (s->verbosity >= 3) 
         VPrintf1( "      bytes: mapping %d, ", s->numZ-nBytes );
   }

   /*--- Now the selectors. ---*/
   nBytes = s->numZ;
   bsW ( s, 3, nGroups );
   bsW ( s, 15, nSelectors );
   for (i = 0; i < nSelectors; i++) { 
      for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);
      bsW(s,1,0);
   }
   if (s->verbosity >= 3)
      VPrintf1( "selectors %d, ", s->numZ-nBytes );

   /*--- Now the coding tables. ---*/
   nBytes = s->numZ;

   for (t = 0; t < nGroups; t++) {
      Int32 curr = s->len[t][0];
      bsW ( s, 5, curr );
      for (i = 0; i < alphaSize; i++) {
         while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };
         while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };
         bsW ( s, 1, 0 );
      }
   }

   if (s->verbosity >= 3)
      VPrintf1 ( "code lengths %d, ", s->numZ-nBytes );

   /*--- And finally, the block data proper ---*/
   nBytes = s->numZ;
   selCtr = 0;
   gs = 0;
   while (True) {
      if (gs >= s->nMTF) break;
      ge = gs + BZ_G_SIZE - 1; 
      if (ge >= s->nMTF) ge = s->nMTF-1;
      AssertH ( s->selector[selCtr] < nGroups, 3006 );

      if (nGroups == 6 && 50 == ge-gs+1) {
            /*--- fast track the common case ---*/
            UInt16 mtfv_i;
            UChar* s_len_sel_selCtr 
               = &(s->len[s->selector[selCtr]][0]);
            Int32* s_code_sel_selCtr
               = &(s->code[s->selector[selCtr]][0]);

#           define BZ_ITAH(nn)                      \
               mtfv_i = mtfv[gs+(nn)];              \
               bsW ( s,                             \
                     s_len_sel_selCtr[mtfv_i],      \
                     s_code_sel_selCtr[mtfv_i] )

            BZ_ITAH(0);  BZ_ITAH(1);  BZ_ITAH(2);  BZ_ITAH(3);  BZ_ITAH(4);
            BZ_ITAH(5);  BZ_ITAH(6);  BZ_ITAH(7);  BZ_ITAH(8);  BZ_ITAH(9);
            BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);
            BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);
            BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);
            BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);
            BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);
            BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);
            BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);
            BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);

#           undef BZ_ITAH

      } else {
	 /*--- slow version which correctly handles all situations ---*/
         for (i = gs; i <= ge; i++) {
            bsW ( s, 
                  s->len  [s->selector[selCtr]] [mtfv[i]],
                  s->code [s->selector[selCtr]] [mtfv[i]] );
         }
      }


      gs = ge+1;
      selCtr++;
   }
   AssertH( selCtr == nSelectors, 3007 );

   if (s->verbosity >= 3)
      VPrintf1( "codes %d\n", s->numZ-nBytes );
}


/*---------------------------------------------------*/
void BZ2_compressBlock ( EState* s, Bool is_last_block )
{
   if (s->nblock > 0) {

      BZ_FINALISE_CRC ( s->blockCRC );
      s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);
      s->combinedCRC ^= s->blockCRC;
      if (s->blockNo > 1) s->numZ = 0;

      if (s->verbosity >= 2)
         VPrintf4( "    block %d: crc = 0x%08x, "
                   "combined CRC = 0x%08x, size = %d\n",
                   s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );

      BZ2_blockSort ( s );
   }

   s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);

   /*-- If this is the first block, create the stream header. --*/
   if (s->blockNo == 1) {
      BZ2_bsInitWrite ( s );
      bsPutUChar ( s, BZ_HDR_B );
      bsPutUChar ( s, BZ_HDR_Z );
      bsPutUChar ( s, BZ_HDR_h );
      bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );
   }

   if (s->nblock > 0) {

      bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );
      bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );
      bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );

      /*-- Now the block's CRC, so it is in a known place. --*/
      bsPutUInt32 ( s, s->blockCRC );

      /*-- 
         Now a single bit indicating (non-)randomisation. 
         As of version 0.9.5, we use a better sorting algorithm
         which makes randomisation unnecessary.  So always set
         the randomised bit to 'no'.  Of course, the decoder
         still needs to be able to handle randomised blocks
         so as to maintain backwards compatibility with
         older versions of bzip2.
      --*/
      bsW(s,1,0);

      bsW ( s, 24, s->origPtr );
      generateMTFValues ( s );
      sendMTFValues ( s );
   }


   /*-- If this is the last block, add the stream trailer. --*/
   if (is_last_block) {

      bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );
      bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );
      bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
      bsPutUInt32 ( s, s->combinedCRC );
      if (s->verbosity >= 2)
         VPrintf1( "    final combined CRC = 0x%08x\n   ", s->combinedCRC );
      bsFinishWrite ( s );
   }
}


/*-------------------------------------------------------------*/
/*--- end                                        compress.c ---*/
/*-------------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/crctable.c000066400000000000000000000113221211610345200220650ustar00rootroot00000000000000
/*-------------------------------------------------------------*/
/*--- Table for doing CRCs                                  ---*/
/*---                                            crctable.c ---*/
/*-------------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


#include "bzlib_private.h"

/*--
  I think this is an implementation of the AUTODIN-II,
  Ethernet & FDDI 32-bit CRC standard.  Vaguely derived
  from code by Rob Warnock, in Section 51 of the
  comp.compression FAQ.
--*/

UInt32 BZ2_crc32Table[256] = {

   /*-- Ugly, innit? --*/

   0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
   0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
   0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
   0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
   0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
   0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
   0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
   0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
   0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
   0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
   0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
   0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
   0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
   0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
   0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
   0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
   0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
   0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
   0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
   0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
   0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
   0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
   0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
   0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
   0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
   0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
   0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
   0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
   0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
   0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
   0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
   0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
   0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
   0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
   0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
   0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
   0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
   0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
   0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
   0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
   0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
   0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
   0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
   0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
   0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
   0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
   0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
   0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
   0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
   0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
   0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
   0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
   0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
   0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
   0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
   0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
   0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
   0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
   0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
   0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
   0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
   0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
   0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
   0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
};


/*-------------------------------------------------------------*/
/*--- end                                        crctable.c ---*/
/*-------------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/decompress.c000066400000000000000000000506671211610345200224710ustar00rootroot00000000000000
/*-------------------------------------------------------------*/
/*--- Decompression machinery                               ---*/
/*---                                          decompress.c ---*/
/*-------------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


#include "bzlib_private.h"


/*---------------------------------------------------*/
static
void makeMaps_d ( DState* s )
{
   Int32 i;
   s->nInUse = 0;
   for (i = 0; i < 256; i++)
      if (s->inUse[i]) {
         s->seqToUnseq[s->nInUse] = i;
         s->nInUse++;
      }
}


/*---------------------------------------------------*/
#define RETURN(rrr)                               \
   { retVal = rrr; goto save_state_and_return; };

#define GET_BITS(lll,vvv,nnn)                     \
   case lll: s->state = lll;                      \
   while (True) {                                 \
      if (s->bsLive >= nnn) {                     \
         UInt32 v;                                \
         v = (s->bsBuff >>                        \
             (s->bsLive-nnn)) & ((1 << nnn)-1);   \
         s->bsLive -= nnn;                        \
         vvv = v;                                 \
         break;                                   \
      }                                           \
      if (s->strm->avail_in == 0) RETURN(BZ_OK);  \
      s->bsBuff                                   \
         = (s->bsBuff << 8) |                     \
           ((UInt32)                              \
              (*((UChar*)(s->strm->next_in))));   \
      s->bsLive += 8;                             \
      s->strm->next_in++;                         \
      s->strm->avail_in--;                        \
      s->strm->total_in_lo32++;                   \
      if (s->strm->total_in_lo32 == 0)            \
         s->strm->total_in_hi32++;                \
   }

#define GET_UCHAR(lll,uuu)                        \
   GET_BITS(lll,uuu,8)

#define GET_BIT(lll,uuu)                          \
   GET_BITS(lll,uuu,1)

/*---------------------------------------------------*/
#define GET_MTF_VAL(label1,label2,lval)           \
{                                                 \
   if (groupPos == 0) {                           \
      groupNo++;                                  \
      if (groupNo >= nSelectors)                  \
         RETURN(BZ_DATA_ERROR);                   \
      groupPos = BZ_G_SIZE;                       \
      gSel = s->selector[groupNo];                \
      gMinlen = s->minLens[gSel];                 \
      gLimit = &(s->limit[gSel][0]);              \
      gPerm = &(s->perm[gSel][0]);                \
      gBase = &(s->base[gSel][0]);                \
   }                                              \
   groupPos--;                                    \
   zn = gMinlen;                                  \
   GET_BITS(label1, zvec, zn);                    \
   while (1) {                                    \
      if (zn > 20 /* the longest code */)         \
         RETURN(BZ_DATA_ERROR);                   \
      if (zvec <= gLimit[zn]) break;              \
      zn++;                                       \
      GET_BIT(label2, zj);                        \
      zvec = (zvec << 1) | zj;                    \
   };                                             \
   if (zvec - gBase[zn] < 0                       \
       || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE)  \
      RETURN(BZ_DATA_ERROR);                      \
   lval = gPerm[zvec - gBase[zn]];                \
}


/*---------------------------------------------------*/
Int32 BZ2_decompress ( DState* s )
{
   UChar      uc;
   Int32      retVal;
   Int32      minLen, maxLen;
   bz_stream* strm = s->strm;

   /* stuff that needs to be saved/restored */
   Int32  i;
   Int32  j;
   Int32  t;
   Int32  alphaSize;
   Int32  nGroups;
   Int32  nSelectors;
   Int32  EOB;
   Int32  groupNo;
   Int32  groupPos;
   Int32  nextSym;
   Int32  nblockMAX;
   Int32  nblock;
   Int32  es;
   Int32  N;
   Int32  curr;
   Int32  zt;
   Int32  zn; 
   Int32  zvec;
   Int32  zj;
   Int32  gSel;
   Int32  gMinlen;
   Int32* gLimit;
   Int32* gBase;
   Int32* gPerm;

   if (s->state == BZ_X_MAGIC_1) {
      /*initialise the save area*/
      s->save_i           = 0;
      s->save_j           = 0;
      s->save_t           = 0;
      s->save_alphaSize   = 0;
      s->save_nGroups     = 0;
      s->save_nSelectors  = 0;
      s->save_EOB         = 0;
      s->save_groupNo     = 0;
      s->save_groupPos    = 0;
      s->save_nextSym     = 0;
      s->save_nblockMAX   = 0;
      s->save_nblock      = 0;
      s->save_es          = 0;
      s->save_N           = 0;
      s->save_curr        = 0;
      s->save_zt          = 0;
      s->save_zn          = 0;
      s->save_zvec        = 0;
      s->save_zj          = 0;
      s->save_gSel        = 0;
      s->save_gMinlen     = 0;
      s->save_gLimit      = NULL;
      s->save_gBase       = NULL;
      s->save_gPerm       = NULL;
   }

   /*restore from the save area*/
   i           = s->save_i;
   j           = s->save_j;
   t           = s->save_t;
   alphaSize   = s->save_alphaSize;
   nGroups     = s->save_nGroups;
   nSelectors  = s->save_nSelectors;
   EOB         = s->save_EOB;
   groupNo     = s->save_groupNo;
   groupPos    = s->save_groupPos;
   nextSym     = s->save_nextSym;
   nblockMAX   = s->save_nblockMAX;
   nblock      = s->save_nblock;
   es          = s->save_es;
   N           = s->save_N;
   curr        = s->save_curr;
   zt          = s->save_zt;
   zn          = s->save_zn; 
   zvec        = s->save_zvec;
   zj          = s->save_zj;
   gSel        = s->save_gSel;
   gMinlen     = s->save_gMinlen;
   gLimit      = s->save_gLimit;
   gBase       = s->save_gBase;
   gPerm       = s->save_gPerm;

   retVal = BZ_OK;

   switch (s->state) {

      GET_UCHAR(BZ_X_MAGIC_1, uc);
      if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);

      GET_UCHAR(BZ_X_MAGIC_2, uc);
      if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);

      GET_UCHAR(BZ_X_MAGIC_3, uc)
      if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC);

      GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)
      if (s->blockSize100k < (BZ_HDR_0 + 1) || 
          s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);
      s->blockSize100k -= BZ_HDR_0;

      if (s->smallDecompress) {
         s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
         s->ll4  = BZALLOC( 
                      ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) 
                   );
         if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);
      } else {
         s->tt  = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );
         if (s->tt == NULL) RETURN(BZ_MEM_ERROR);
      }

      GET_UCHAR(BZ_X_BLKHDR_1, uc);

      if (uc == 0x17) goto endhdr_2;
      if (uc != 0x31) RETURN(BZ_DATA_ERROR);
      GET_UCHAR(BZ_X_BLKHDR_2, uc);
      if (uc != 0x41) RETURN(BZ_DATA_ERROR);
      GET_UCHAR(BZ_X_BLKHDR_3, uc);
      if (uc != 0x59) RETURN(BZ_DATA_ERROR);
      GET_UCHAR(BZ_X_BLKHDR_4, uc);
      if (uc != 0x26) RETURN(BZ_DATA_ERROR);
      GET_UCHAR(BZ_X_BLKHDR_5, uc);
      if (uc != 0x53) RETURN(BZ_DATA_ERROR);
      GET_UCHAR(BZ_X_BLKHDR_6, uc);
      if (uc != 0x59) RETURN(BZ_DATA_ERROR);

      s->currBlockNo++;
      if (s->verbosity >= 2)
         VPrintf1 ( "\n    [%d: huff+mtf ", s->currBlockNo );
 
      s->storedBlockCRC = 0;
      GET_UCHAR(BZ_X_BCRC_1, uc);
      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
      GET_UCHAR(BZ_X_BCRC_2, uc);
      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
      GET_UCHAR(BZ_X_BCRC_3, uc);
      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
      GET_UCHAR(BZ_X_BCRC_4, uc);
      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);

      GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);

      s->origPtr = 0;
      GET_UCHAR(BZ_X_ORIGPTR_1, uc);
      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
      GET_UCHAR(BZ_X_ORIGPTR_2, uc);
      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
      GET_UCHAR(BZ_X_ORIGPTR_3, uc);
      s->origPtr = (s->origPtr << 8) | ((Int32)uc);

      if (s->origPtr < 0)
         RETURN(BZ_DATA_ERROR);
      if (s->origPtr > 10 + 100000*s->blockSize100k) 
         RETURN(BZ_DATA_ERROR);

      /*--- Receive the mapping table ---*/
      for (i = 0; i < 16; i++) {
         GET_BIT(BZ_X_MAPPING_1, uc);
         if (uc == 1) 
            s->inUse16[i] = True; else 
            s->inUse16[i] = False;
      }

      for (i = 0; i < 256; i++) s->inUse[i] = False;

      for (i = 0; i < 16; i++)
         if (s->inUse16[i])
            for (j = 0; j < 16; j++) {
               GET_BIT(BZ_X_MAPPING_2, uc);
               if (uc == 1) s->inUse[i * 16 + j] = True;
            }
      makeMaps_d ( s );
      if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);
      alphaSize = s->nInUse+2;

      /*--- Now the selectors ---*/
      GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
      if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
      GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
      if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
      for (i = 0; i < nSelectors; i++) {
         j = 0;
         while (True) {
            GET_BIT(BZ_X_SELECTOR_3, uc);
            if (uc == 0) break;
            j++;
            if (j >= nGroups) RETURN(BZ_DATA_ERROR);
         }
         s->selectorMtf[i] = j;
      }

      /*--- Undo the MTF values for the selectors. ---*/
      {
         UChar pos[BZ_N_GROUPS], tmp, v;
         for (v = 0; v < nGroups; v++) pos[v] = v;
   
         for (i = 0; i < nSelectors; i++) {
            v = s->selectorMtf[i];
            tmp = pos[v];
            while (v > 0) { pos[v] = pos[v-1]; v--; }
            pos[0] = tmp;
            s->selector[i] = tmp;
         }
      }

      /*--- Now the coding tables ---*/
      for (t = 0; t < nGroups; t++) {
         GET_BITS(BZ_X_CODING_1, curr, 5);
         for (i = 0; i < alphaSize; i++) {
            while (True) {
               if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);
               GET_BIT(BZ_X_CODING_2, uc);
               if (uc == 0) break;
               GET_BIT(BZ_X_CODING_3, uc);
               if (uc == 0) curr++; else curr--;
            }
            s->len[t][i] = curr;
         }
      }

      /*--- Create the Huffman decoding tables ---*/
      for (t = 0; t < nGroups; t++) {
         minLen = 32;
         maxLen = 0;
         for (i = 0; i < alphaSize; i++) {
            if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
            if (s->len[t][i] < minLen) minLen = s->len[t][i];
         }
         BZ2_hbCreateDecodeTables ( 
            &(s->limit[t][0]), 
            &(s->base[t][0]), 
            &(s->perm[t][0]), 
            &(s->len[t][0]),
            minLen, maxLen, alphaSize
         );
         s->minLens[t] = minLen;
      }

      /*--- Now the MTF values ---*/

      EOB      = s->nInUse+1;
      nblockMAX = 100000 * s->blockSize100k;
      groupNo  = -1;
      groupPos = 0;

      for (i = 0; i <= 255; i++) s->unzftab[i] = 0;

      /*-- MTF init --*/
      {
         Int32 ii, jj, kk;
         kk = MTFA_SIZE-1;
         for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {
            for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
               s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);
               kk--;
            }
            s->mtfbase[ii] = kk + 1;
         }
      }
      /*-- end MTF init --*/

      nblock = 0;
      GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);

      while (True) {

         if (nextSym == EOB) break;

         if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {

            es = -1;
            N = 1;
            do {
               /* Check that N doesn't get too big, so that es doesn't
                  go negative.  The maximum value that can be
                  RUNA/RUNB encoded is equal to the block size (post
                  the initial RLE), viz, 900k, so bounding N at 2
                  million should guard against overflow without
                  rejecting any legitimate inputs. */
               if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR);
               if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
               if (nextSym == BZ_RUNB) es = es + (1+1) * N;
               N = N * 2;
               GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);
            }
               while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);

            es++;
            uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
            s->unzftab[uc] += es;

            if (s->smallDecompress)
               while (es > 0) {
                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
                  s->ll16[nblock] = (UInt16)uc;
                  nblock++;
                  es--;
               }
            else
               while (es > 0) {
                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
                  s->tt[nblock] = (UInt32)uc;
                  nblock++;
                  es--;
               };

            continue;

         } else {

            if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);

            /*-- uc = MTF ( nextSym-1 ) --*/
            {
               Int32 ii, jj, kk, pp, lno, off;
               UInt32 nn;
               nn = (UInt32)(nextSym - 1);

               if (nn < MTFL_SIZE) {
                  /* avoid general-case expense */
                  pp = s->mtfbase[0];
                  uc = s->mtfa[pp+nn];
                  while (nn > 3) {
                     Int32 z = pp+nn;
                     s->mtfa[(z)  ] = s->mtfa[(z)-1];
                     s->mtfa[(z)-1] = s->mtfa[(z)-2];
                     s->mtfa[(z)-2] = s->mtfa[(z)-3];
                     s->mtfa[(z)-3] = s->mtfa[(z)-4];
                     nn -= 4;
                  }
                  while (nn > 0) { 
                     s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; 
                  };
                  s->mtfa[pp] = uc;
               } else { 
                  /* general case */
                  lno = nn / MTFL_SIZE;
                  off = nn % MTFL_SIZE;
                  pp = s->mtfbase[lno] + off;
                  uc = s->mtfa[pp];
                  while (pp > s->mtfbase[lno]) { 
                     s->mtfa[pp] = s->mtfa[pp-1]; pp--; 
                  };
                  s->mtfbase[lno]++;
                  while (lno > 0) {
                     s->mtfbase[lno]--;
                     s->mtfa[s->mtfbase[lno]] 
                        = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];
                     lno--;
                  }
                  s->mtfbase[0]--;
                  s->mtfa[s->mtfbase[0]] = uc;
                  if (s->mtfbase[0] == 0) {
                     kk = MTFA_SIZE-1;
                     for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
                        for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
                           s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
                           kk--;
                        }
                        s->mtfbase[ii] = kk + 1;
                     }
                  }
               }
            }
            /*-- end uc = MTF ( nextSym-1 ) --*/

            s->unzftab[s->seqToUnseq[uc]]++;
            if (s->smallDecompress)
               s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
               s->tt[nblock]   = (UInt32)(s->seqToUnseq[uc]);
            nblock++;

            GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);
            continue;
         }
      }

      /* Now we know what nblock is, we can do a better sanity
         check on s->origPtr.
      */
      if (s->origPtr < 0 || s->origPtr >= nblock)
         RETURN(BZ_DATA_ERROR);

      /*-- Set up cftab to facilitate generation of T^(-1) --*/
      /* Check: unzftab entries in range. */
      for (i = 0; i <= 255; i++) {
         if (s->unzftab[i] < 0 || s->unzftab[i] > nblock)
            RETURN(BZ_DATA_ERROR);
      }
      /* Actually generate cftab. */
      s->cftab[0] = 0;
      for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
      for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
      /* Check: cftab entries in range. */
      for (i = 0; i <= 256; i++) {
         if (s->cftab[i] < 0 || s->cftab[i] > nblock) {
            /* s->cftab[i] can legitimately be == nblock */
            RETURN(BZ_DATA_ERROR);
         }
      }
      /* Check: cftab entries non-descending. */
      for (i = 1; i <= 256; i++) {
         if (s->cftab[i-1] > s->cftab[i]) {
            RETURN(BZ_DATA_ERROR);
         }
      }

      s->state_out_len = 0;
      s->state_out_ch  = 0;
      BZ_INITIALISE_CRC ( s->calculatedBlockCRC );
      s->state = BZ_X_OUTPUT;
      if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );

      if (s->smallDecompress) {

         /*-- Make a copy of cftab, used in generation of T --*/
         for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];

         /*-- compute the T vector --*/
         for (i = 0; i < nblock; i++) {
            uc = (UChar)(s->ll16[i]);
            SET_LL(i, s->cftabCopy[uc]);
            s->cftabCopy[uc]++;
         }

         /*-- Compute T^(-1) by pointer reversal on T --*/
         i = s->origPtr;
         j = GET_LL(i);
         do {
            Int32 tmp = GET_LL(j);
            SET_LL(j, i);
            i = j;
            j = tmp;
         }
            while (i != s->origPtr);

         s->tPos = s->origPtr;
         s->nblock_used = 0;
         if (s->blockRandomised) {
            BZ_RAND_INIT_MASK;
            BZ_GET_SMALL(s->k0); s->nblock_used++;
            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; 
         } else {
            BZ_GET_SMALL(s->k0); s->nblock_used++;
         }

      } else {

         /*-- compute the T^(-1) vector --*/
         for (i = 0; i < nblock; i++) {
            uc = (UChar)(s->tt[i] & 0xff);
            s->tt[s->cftab[uc]] |= (i << 8);
            s->cftab[uc]++;
         }

         s->tPos = s->tt[s->origPtr] >> 8;
         s->nblock_used = 0;
         if (s->blockRandomised) {
            BZ_RAND_INIT_MASK;
            BZ_GET_FAST(s->k0); s->nblock_used++;
            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; 
         } else {
            BZ_GET_FAST(s->k0); s->nblock_used++;
         }

      }

      RETURN(BZ_OK);



    endhdr_2:

      GET_UCHAR(BZ_X_ENDHDR_2, uc);
      if (uc != 0x72) RETURN(BZ_DATA_ERROR);
      GET_UCHAR(BZ_X_ENDHDR_3, uc);
      if (uc != 0x45) RETURN(BZ_DATA_ERROR);
      GET_UCHAR(BZ_X_ENDHDR_4, uc);
      if (uc != 0x38) RETURN(BZ_DATA_ERROR);
      GET_UCHAR(BZ_X_ENDHDR_5, uc);
      if (uc != 0x50) RETURN(BZ_DATA_ERROR);
      GET_UCHAR(BZ_X_ENDHDR_6, uc);
      if (uc != 0x90) RETURN(BZ_DATA_ERROR);

      s->storedCombinedCRC = 0;
      GET_UCHAR(BZ_X_CCRC_1, uc);
      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
      GET_UCHAR(BZ_X_CCRC_2, uc);
      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
      GET_UCHAR(BZ_X_CCRC_3, uc);
      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
      GET_UCHAR(BZ_X_CCRC_4, uc);
      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);

      s->state = BZ_X_IDLE;
      RETURN(BZ_STREAM_END);

      default: AssertH ( False, 4001 );
   }

   AssertH ( False, 4002 );

   save_state_and_return:

   s->save_i           = i;
   s->save_j           = j;
   s->save_t           = t;
   s->save_alphaSize   = alphaSize;
   s->save_nGroups     = nGroups;
   s->save_nSelectors  = nSelectors;
   s->save_EOB         = EOB;
   s->save_groupNo     = groupNo;
   s->save_groupPos    = groupPos;
   s->save_nextSym     = nextSym;
   s->save_nblockMAX   = nblockMAX;
   s->save_nblock      = nblock;
   s->save_es          = es;
   s->save_N           = N;
   s->save_curr        = curr;
   s->save_zt          = zt;
   s->save_zn          = zn;
   s->save_zvec        = zvec;
   s->save_zj          = zj;
   s->save_gSel        = gSel;
   s->save_gMinlen     = gMinlen;
   s->save_gLimit      = gLimit;
   s->save_gBase       = gBase;
   s->save_gPerm       = gPerm;

   return retVal;   
}


/*-------------------------------------------------------------*/
/*--- end                                      decompress.c ---*/
/*-------------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/dlltest.c000066400000000000000000000104621211610345200217650ustar00rootroot00000000000000/*
   minibz2
      libbz2.dll test program.
      by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)
      This file is Public Domain.  Welcome any email to me.

   usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]
*/

#define BZ_IMPORT
#include 
#include 
#include "bzlib.h"
#ifdef _WIN32
#include 
#endif


#ifdef _WIN32

#define BZ2_LIBNAME "libbz2-1.0.2.DLL" 

#include 
static int BZ2DLLLoaded = 0;
static HINSTANCE BZ2DLLhLib;
int BZ2DLLLoadLibrary(void)
{
   HINSTANCE hLib;

   if(BZ2DLLLoaded==1){return 0;}
   hLib=LoadLibrary(BZ2_LIBNAME);
   if(hLib == NULL){
      fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME);
      return -1;
   }
   BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion");
   BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen");
   BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen");
   BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread");
   BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite");
   BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush");
   BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose");
   BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror");

   if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen
       || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush
       || !BZ2_bzclose || !BZ2_bzerror) {
      fprintf(stderr,"GetProcAddress failed.\n");
      return -1;
   }
   BZ2DLLLoaded=1;
   BZ2DLLhLib=hLib;
   return 0;

}
int BZ2DLLFreeLibrary(void)
{
   if(BZ2DLLLoaded==0){return 0;}
   FreeLibrary(BZ2DLLhLib);
   BZ2DLLLoaded=0;
}
#endif /* WIN32 */

void usage(void)
{
   puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]");
}

int main(int argc,char *argv[])
{
   int decompress = 0;
   int level = 9;
   char *fn_r = NULL;
   char *fn_w = NULL;

#ifdef _WIN32
   if(BZ2DLLLoadLibrary()<0){
      fprintf(stderr,"Loading of %s failed.  Giving up.\n", BZ2_LIBNAME);
      exit(1);
   }
   printf("Loading of %s succeeded.  Library version is %s.\n",
          BZ2_LIBNAME, BZ2_bzlibVersion() );
#endif
   while(++argv,--argc){
      if(**argv =='-' || **argv=='/'){
         char *p;

         for(p=*argv+1;*p;p++){
            if(*p=='d'){
               decompress = 1;
            }else if('1'<=*p && *p<='9'){
               level = *p - '0';
            }else{
               usage();
               exit(1);
            }
         }
      }else{
         break;
      }
   }
   if(argc>=1){
      fn_r = *argv;
      argc--;argv++;
   }else{
      fn_r = NULL;
   }
   if(argc>=1){
      fn_w = *argv;
      argc--;argv++;
   }else{
      fn_w = NULL;
   }
   {
      int len;
      char buff[0x1000];
      char mode[10];

      if(decompress){
         BZFILE *BZ2fp_r = NULL;
         FILE *fp_w = NULL;

         if(fn_w){
            if((fp_w = fopen(fn_w,"wb"))==NULL){
               printf("can't open [%s]\n",fn_w);
               perror("reason:");
               exit(1);
            }
         }else{
            fp_w = stdout;
         }
         if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)
            || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){
            printf("can't bz2openstream\n");
            exit(1);
         }
         while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){
            fwrite(buff,1,len,fp_w);
         }
         BZ2_bzclose(BZ2fp_r);
         if(fp_w != stdout) fclose(fp_w);
      }else{
         BZFILE *BZ2fp_w = NULL;
         FILE *fp_r = NULL;

         if(fn_r){
            if((fp_r = fopen(fn_r,"rb"))==NULL){
               printf("can't open [%s]\n",fn_r);
               perror("reason:");
               exit(1);
            }
         }else{
            fp_r = stdin;
         }
         mode[0]='w';
         mode[1] = '0' + level;
         mode[2] = '\0';

         if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL)
            || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){
            printf("can't bz2openstream\n");
            exit(1);
         }
         while((len=fread(buff,1,0x1000,fp_r))>0){
            BZ2_bzwrite(BZ2fp_w,buff,len);
         }
         BZ2_bzclose(BZ2fp_w);
         if(fp_r!=stdin)fclose(fp_r);
      }
   }
#ifdef _WIN32
   BZ2DLLFreeLibrary();
#endif
   return 0;
}
genometools-1.5.1/src/external/bzip2-1.0.6/dlltest.dsp000066400000000000000000000066741211610345200223430ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="dlltest" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# ** ҏWȂł **

# TARGTYPE "Win32 (x86) Console Application" 0x0103

CFG=dlltest - Win32 Debug
!MESSAGE ͗LҲ̧قł͂܂B ۼުĂނ邽߂ɂ NMAKE gpĂB
!MESSAGE [Ҳ̧ق̴߰] ނgpĎsĂ
!MESSAGE 
!MESSAGE NMAKE /f "dlltest.mak".
!MESSAGE 
!MESSAGE NMAKE ̎sɍ\wł܂
!MESSAGE  ײݏϸۂ̐ݒ`܂B:
!MESSAGE 
!MESSAGE NMAKE /f "dlltest.mak" CFG="dlltest - Win32 Debug"
!MESSAGE 
!MESSAGE I”\ Ӱ:
!MESSAGE 
!MESSAGE "dlltest - Win32 Release" ("Win32 (x86) Console Application" p)
!MESSAGE "dlltest - Win32 Debug" ("Win32 (x86) Console Application" p)
!MESSAGE 

# Begin Project
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe

!IF  "$(CFG)" == "dlltest - Win32 Release"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x411 /d "NDEBUG"
# ADD RSC /l 0x411 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"minibz2.exe"

!ELSEIF  "$(CFG)" == "dlltest - Win32 Debug"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "dlltest_"
# PROP BASE Intermediate_Dir "dlltest_"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "dlltest_"
# PROP Intermediate_Dir "dlltest_"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x411 /d "_DEBUG"
# ADD RSC /l 0x411 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"minibz2.exe" /pdbtype:sept

!ENDIF 

# Begin Target

# Name "dlltest - Win32 Release"
# Name "dlltest - Win32 Debug"
# Begin Source File

SOURCE=.\bzlib.h
# End Source File
# Begin Source File

SOURCE=.\dlltest.c
# End Source File
# End Target
# End Project
genometools-1.5.1/src/external/bzip2-1.0.6/entities.xml000066400000000000000000000003601211610345200225100ustar00rootroot00000000000000








genometools-1.5.1/src/external/bzip2-1.0.6/format.pl000077500000000000000000000032311211610345200217720ustar00rootroot00000000000000#!/usr/bin/perl -w
#
# ------------------------------------------------------------------
# This file is part of bzip2/libbzip2, a program and library for
# lossless, block-sorting data compression.
#
# bzip2/libbzip2 version 1.0.6 of 6 September 2010
# Copyright (C) 1996-2010 Julian Seward 
#
# Please read the WARNING, DISCLAIMER and PATENTS sections in the 
# README file.
#
# This program is released under the terms of the license contained
# in the file LICENSE.
# ------------------------------------------------------------------
#
use strict;

# get command line values:
if ( $#ARGV !=1 ) {
    die "Usage:  $0 xml_infile xml_outfile\n";
}

my $infile = shift;
# check infile exists
die "Can't find file \"$infile\""
  unless -f $infile;
# check we can read infile
if (! -r $infile) {
    die "Can't read input $infile\n";
}
# check we can open infile
open( INFILE,"<$infile" ) or 
    die "Can't input $infile $!";

#my $outfile = 'fmt-manual.xml';
my $outfile = shift;
#print "Infile: $infile, Outfile: $outfile\n";
# check we can write to outfile
open( OUTFILE,">$outfile" ) or 
    die "Can't output $outfile $! for writing";

my ($prev, $curr, $str);
$prev = ''; $curr = '';
while (  ) {

		print OUTFILE $prev;
    $prev = $curr;
    $curr = $_;
    $str = '';

    if ( $prev =~ /$|$/ ) {
        chomp $prev;
        $curr = join( '', $prev, "|<\/screen>/ ) {
        chomp $prev;
        $curr = join( '', $prev, "]]>", $curr );
				$prev = '';
        next;
    }
}
print OUTFILE $curr;
close INFILE;
close OUTFILE;
exit;
genometools-1.5.1/src/external/bzip2-1.0.6/huffman.c000066400000000000000000000155171211610345200217440ustar00rootroot00000000000000
/*-------------------------------------------------------------*/
/*--- Huffman coding low-level stuff                        ---*/
/*---                                             huffman.c ---*/
/*-------------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


#include "bzlib_private.h"

/*---------------------------------------------------*/
#define WEIGHTOF(zz0)  ((zz0) & 0xffffff00)
#define DEPTHOF(zz1)   ((zz1) & 0x000000ff)
#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))

#define ADDWEIGHTS(zw1,zw2)                           \
   (WEIGHTOF(zw1)+WEIGHTOF(zw2)) |                    \
   (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))

#define UPHEAP(z)                                     \
{                                                     \
   Int32 zz, tmp;                                     \
   zz = z; tmp = heap[zz];                            \
   while (weight[tmp] < weight[heap[zz >> 1]]) {      \
      heap[zz] = heap[zz >> 1];                       \
      zz >>= 1;                                       \
   }                                                  \
   heap[zz] = tmp;                                    \
}

#define DOWNHEAP(z)                                   \
{                                                     \
   Int32 zz, yy, tmp;                                 \
   zz = z; tmp = heap[zz];                            \
   while (True) {                                     \
      yy = zz << 1;                                   \
      if (yy > nHeap) break;                          \
      if (yy < nHeap &&                               \
          weight[heap[yy+1]] < weight[heap[yy]])      \
         yy++;                                        \
      if (weight[tmp] < weight[heap[yy]]) break;      \
      heap[zz] = heap[yy];                            \
      zz = yy;                                        \
   }                                                  \
   heap[zz] = tmp;                                    \
}


/*---------------------------------------------------*/
void BZ2_hbMakeCodeLengths ( UChar *len, 
                             Int32 *freq,
                             Int32 alphaSize,
                             Int32 maxLen )
{
   /*--
      Nodes and heap entries run from 1.  Entry 0
      for both the heap and nodes is a sentinel.
   --*/
   Int32 nNodes, nHeap, n1, n2, i, j, k;
   Bool  tooLong;

   Int32 heap   [ BZ_MAX_ALPHA_SIZE + 2 ];
   Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];
   Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; 

   for (i = 0; i < alphaSize; i++)
      weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;

   while (True) {

      nNodes = alphaSize;
      nHeap = 0;

      heap[0] = 0;
      weight[0] = 0;
      parent[0] = -2;

      for (i = 1; i <= alphaSize; i++) {
         parent[i] = -1;
         nHeap++;
         heap[nHeap] = i;
         UPHEAP(nHeap);
      }

      AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );
   
      while (nHeap > 1) {
         n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
         n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
         nNodes++;
         parent[n1] = parent[n2] = nNodes;
         weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);
         parent[nNodes] = -1;
         nHeap++;
         heap[nHeap] = nNodes;
         UPHEAP(nHeap);
      }

      AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );

      tooLong = False;
      for (i = 1; i <= alphaSize; i++) {
         j = 0;
         k = i;
         while (parent[k] >= 0) { k = parent[k]; j++; }
         len[i-1] = j;
         if (j > maxLen) tooLong = True;
      }
      
      if (! tooLong) break;

      /* 17 Oct 04: keep-going condition for the following loop used
         to be 'i < alphaSize', which missed the last element,
         theoretically leading to the possibility of the compressor
         looping.  However, this count-scaling step is only needed if
         one of the generated Huffman code words is longer than
         maxLen, which up to and including version 1.0.2 was 20 bits,
         which is extremely unlikely.  In version 1.0.3 maxLen was
         changed to 17 bits, which has minimal effect on compression
         ratio, but does mean this scaling step is used from time to
         time, enough to verify that it works.

         This means that bzip2-1.0.3 and later will only produce
         Huffman codes with a maximum length of 17 bits.  However, in
         order to preserve backwards compatibility with bitstreams
         produced by versions pre-1.0.3, the decompressor must still
         handle lengths of up to 20. */

      for (i = 1; i <= alphaSize; i++) {
         j = weight[i] >> 8;
         j = 1 + (j / 2);
         weight[i] = j << 8;
      }
   }
}


/*---------------------------------------------------*/
void BZ2_hbAssignCodes ( Int32 *code,
                         UChar *length,
                         Int32 minLen,
                         Int32 maxLen,
                         Int32 alphaSize )
{
   Int32 n, vec, i;

   vec = 0;
   for (n = minLen; n <= maxLen; n++) {
      for (i = 0; i < alphaSize; i++)
         if (length[i] == n) { code[i] = vec; vec++; };
      vec <<= 1;
   }
}


/*---------------------------------------------------*/
void BZ2_hbCreateDecodeTables ( Int32 *limit,
                                Int32 *base,
                                Int32 *perm,
                                UChar *length,
                                Int32 minLen,
                                Int32 maxLen,
                                Int32 alphaSize )
{
   Int32 pp, i, j, vec;

   pp = 0;
   for (i = minLen; i <= maxLen; i++)
      for (j = 0; j < alphaSize; j++)
         if (length[j] == i) { perm[pp] = j; pp++; };

   for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;
   for (i = 0; i < alphaSize; i++) base[length[i]+1]++;

   for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];

   for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;
   vec = 0;

   for (i = minLen; i <= maxLen; i++) {
      vec += (base[i+1] - base[i]);
      limit[i] = vec-1;
      vec <<= 1;
   }
   for (i = minLen + 1; i <= maxLen; i++)
      base[i] = ((limit[i-1] + 1) << 1) - base[i];
}


/*-------------------------------------------------------------*/
/*--- end                                         huffman.c ---*/
/*-------------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/libbz2.def000066400000000000000000000010051211610345200220030ustar00rootroot00000000000000LIBRARY			LIBBZ2
DESCRIPTION		"libbzip2: library for data compression"
EXPORTS
	BZ2_bzCompressInit
	BZ2_bzCompress
	BZ2_bzCompressEnd
	BZ2_bzDecompressInit
	BZ2_bzDecompress
	BZ2_bzDecompressEnd
	BZ2_bzReadOpen
	BZ2_bzReadClose
	BZ2_bzReadGetUnused
	BZ2_bzRead
	BZ2_bzWriteOpen
	BZ2_bzWrite
	BZ2_bzWriteClose
	BZ2_bzWriteClose64
	BZ2_bzBuffToBuffCompress
	BZ2_bzBuffToBuffDecompress
	BZ2_bzlibVersion
	BZ2_bzopen
	BZ2_bzdopen
	BZ2_bzread
	BZ2_bzwrite
	BZ2_bzflush
	BZ2_bzclose
	BZ2_bzerror
genometools-1.5.1/src/external/bzip2-1.0.6/libbz2.dsp000066400000000000000000000102361211610345200220410ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="libbz2" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# ** ҏWȂł **

# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102

CFG=libbz2 - Win32 Debug
!MESSAGE ͗LҲ̧قł͂܂B ۼުĂނ邽߂ɂ NMAKE gpĂB
!MESSAGE [Ҳ̧ق̴߰] ނgpĎsĂ
!MESSAGE 
!MESSAGE NMAKE /f "libbz2.mak".
!MESSAGE 
!MESSAGE NMAKE ̎sɍ\wł܂
!MESSAGE  ײݏϸۂ̐ݒ`܂B:
!MESSAGE 
!MESSAGE NMAKE /f "libbz2.mak" CFG="libbz2 - Win32 Debug"
!MESSAGE 
!MESSAGE I”\ Ӱ:
!MESSAGE 
!MESSAGE "libbz2 - Win32 Release" ("Win32 (x86) Dynamic-Link Library" p)
!MESSAGE "libbz2 - Win32 Debug" ("Win32 (x86) Dynamic-Link Library" p)
!MESSAGE 

# Begin Project
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe

!IF  "$(CFG)" == "libbz2 - Win32 Release"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
# ADD BASE RSC /l 0x411 /d "NDEBUG"
# ADD RSC /l 0x411 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"libbz2.dll"

!ELSEIF  "$(CFG)" == "libbz2 - Win32 Debug"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
# ADD BASE RSC /l 0x411 /d "_DEBUG"
# ADD RSC /l 0x411 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"libbz2.dll" /pdbtype:sept

!ENDIF 

# Begin Target

# Name "libbz2 - Win32 Release"
# Name "libbz2 - Win32 Debug"
# Begin Source File

SOURCE=.\blocksort.c
# End Source File
# Begin Source File

SOURCE=.\bzlib.c
# End Source File
# Begin Source File

SOURCE=.\bzlib.h
# End Source File
# Begin Source File

SOURCE=.\bzlib_private.h
# End Source File
# Begin Source File

SOURCE=.\compress.c
# End Source File
# Begin Source File

SOURCE=.\crctable.c
# End Source File
# Begin Source File

SOURCE=.\decompress.c
# End Source File
# Begin Source File

SOURCE=.\huffman.c
# End Source File
# Begin Source File

SOURCE=.\libbz2.def
# End Source File
# Begin Source File

SOURCE=.\randtable.c
# End Source File
# End Target
# End Project
genometools-1.5.1/src/external/bzip2-1.0.6/makefile.msc000066400000000000000000000031171211610345200224260ustar00rootroot00000000000000# Makefile for Microsoft Visual C++ 6.0
# usage: nmake -f makefile.msc
# K.M. Syring (syring@gsf.de)
# Fixed up by JRS for bzip2-0.9.5d release.

CC=cl
CFLAGS= -DWIN32 -MD -Ox -D_FILE_OFFSET_BITS=64 -nologo

OBJS= blocksort.obj  \
      huffman.obj    \
      crctable.obj   \
      randtable.obj  \
      compress.obj   \
      decompress.obj \
      bzlib.obj

all: lib bzip2 test

bzip2: lib
	$(CC) $(CFLAGS) -o bzip2 bzip2.c libbz2.lib setargv.obj
	$(CC) $(CFLAGS) -o bzip2recover bzip2recover.c

lib: $(OBJS)
	lib /out:libbz2.lib $(OBJS)

test: bzip2
	type words1
	.\\bzip2 -1  < sample1.ref > sample1.rb2
	.\\bzip2 -2  < sample2.ref > sample2.rb2
	.\\bzip2 -3  < sample3.ref > sample3.rb2
	.\\bzip2 -d  < sample1.bz2 > sample1.tst
	.\\bzip2 -d  < sample2.bz2 > sample2.tst
	.\\bzip2 -ds < sample3.bz2 > sample3.tst
	@echo All six of the fc's should find no differences.
	@echo If fc finds an error on sample3.bz2, this could be
	@echo because WinZip's 'TAR file smart CR/LF conversion'
	@echo is too clever for its own good.  Disable this option.
	@echo The correct size for sample3.ref is 120,244.  If it
	@echo is 150,251, WinZip has messed it up.
	fc sample1.bz2 sample1.rb2 
	fc sample2.bz2 sample2.rb2
	fc sample3.bz2 sample3.rb2
	fc sample1.tst sample1.ref
	fc sample2.tst sample2.ref
	fc sample3.tst sample3.ref



clean: 
	del *.obj
	del libbz2.lib 
	del bzip2.exe
	del bzip2recover.exe
	del sample1.rb2 
	del sample2.rb2 
	del sample3.rb2
	del sample1.tst 
	del sample2.tst
	del sample3.tst

.c.obj: 
	$(CC) $(CFLAGS) -c $*.c -o $*.obj

genometools-1.5.1/src/external/bzip2-1.0.6/mk251.c000066400000000000000000000016271211610345200211540ustar00rootroot00000000000000
/* Spew out a long sequence of the byte 251.  When fed to bzip2
   versions 1.0.0 or 1.0.1, causes it to die with internal error
   1007 in blocksort.c.  This assertion misses an extremely rare
   case, which is fixed in this version (1.0.2) and above.
*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


#include 

int main ()
{
   int i;
   for (i = 0; i < 48500000 ; i++)
     putchar(251);
   return 0;
}
genometools-1.5.1/src/external/bzip2-1.0.6/randtable.c000066400000000000000000000074241211610345200222520ustar00rootroot00000000000000
/*-------------------------------------------------------------*/
/*--- Table for randomising repetitive blocks               ---*/
/*---                                           randtable.c ---*/
/*-------------------------------------------------------------*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


#include "bzlib_private.h"


/*---------------------------------------------*/
Int32 BZ2_rNums[512] = { 
   619, 720, 127, 481, 931, 816, 813, 233, 566, 247, 
   985, 724, 205, 454, 863, 491, 741, 242, 949, 214, 
   733, 859, 335, 708, 621, 574, 73, 654, 730, 472, 
   419, 436, 278, 496, 867, 210, 399, 680, 480, 51, 
   878, 465, 811, 169, 869, 675, 611, 697, 867, 561, 
   862, 687, 507, 283, 482, 129, 807, 591, 733, 623, 
   150, 238, 59, 379, 684, 877, 625, 169, 643, 105, 
   170, 607, 520, 932, 727, 476, 693, 425, 174, 647, 
   73, 122, 335, 530, 442, 853, 695, 249, 445, 515, 
   909, 545, 703, 919, 874, 474, 882, 500, 594, 612, 
   641, 801, 220, 162, 819, 984, 589, 513, 495, 799, 
   161, 604, 958, 533, 221, 400, 386, 867, 600, 782, 
   382, 596, 414, 171, 516, 375, 682, 485, 911, 276, 
   98, 553, 163, 354, 666, 933, 424, 341, 533, 870, 
   227, 730, 475, 186, 263, 647, 537, 686, 600, 224, 
   469, 68, 770, 919, 190, 373, 294, 822, 808, 206, 
   184, 943, 795, 384, 383, 461, 404, 758, 839, 887, 
   715, 67, 618, 276, 204, 918, 873, 777, 604, 560, 
   951, 160, 578, 722, 79, 804, 96, 409, 713, 940, 
   652, 934, 970, 447, 318, 353, 859, 672, 112, 785, 
   645, 863, 803, 350, 139, 93, 354, 99, 820, 908, 
   609, 772, 154, 274, 580, 184, 79, 626, 630, 742, 
   653, 282, 762, 623, 680, 81, 927, 626, 789, 125, 
   411, 521, 938, 300, 821, 78, 343, 175, 128, 250, 
   170, 774, 972, 275, 999, 639, 495, 78, 352, 126, 
   857, 956, 358, 619, 580, 124, 737, 594, 701, 612, 
   669, 112, 134, 694, 363, 992, 809, 743, 168, 974, 
   944, 375, 748, 52, 600, 747, 642, 182, 862, 81, 
   344, 805, 988, 739, 511, 655, 814, 334, 249, 515, 
   897, 955, 664, 981, 649, 113, 974, 459, 893, 228, 
   433, 837, 553, 268, 926, 240, 102, 654, 459, 51, 
   686, 754, 806, 760, 493, 403, 415, 394, 687, 700, 
   946, 670, 656, 610, 738, 392, 760, 799, 887, 653, 
   978, 321, 576, 617, 626, 502, 894, 679, 243, 440, 
   680, 879, 194, 572, 640, 724, 926, 56, 204, 700, 
   707, 151, 457, 449, 797, 195, 791, 558, 945, 679, 
   297, 59, 87, 824, 713, 663, 412, 693, 342, 606, 
   134, 108, 571, 364, 631, 212, 174, 643, 304, 329, 
   343, 97, 430, 751, 497, 314, 983, 374, 822, 928, 
   140, 206, 73, 263, 980, 736, 876, 478, 430, 305, 
   170, 514, 364, 692, 829, 82, 855, 953, 676, 246, 
   369, 970, 294, 750, 807, 827, 150, 790, 288, 923, 
   804, 378, 215, 828, 592, 281, 565, 555, 710, 82, 
   896, 831, 547, 261, 524, 462, 293, 465, 502, 56, 
   661, 821, 976, 991, 658, 869, 905, 758, 745, 193, 
   768, 550, 608, 933, 378, 286, 215, 979, 792, 961, 
   61, 688, 793, 644, 986, 403, 106, 366, 905, 644, 
   372, 567, 466, 434, 645, 210, 389, 550, 919, 135, 
   780, 773, 635, 389, 707, 100, 626, 958, 165, 504, 
   920, 176, 193, 713, 857, 265, 203, 50, 668, 108, 
   645, 990, 626, 197, 510, 357, 358, 850, 858, 364, 
   936, 638
};


/*-------------------------------------------------------------*/
/*--- end                                       randtable.c ---*/
/*-------------------------------------------------------------*/
genometools-1.5.1/src/external/bzip2-1.0.6/spewG.c000066400000000000000000000033021211610345200213720ustar00rootroot00000000000000
/* spew out a thoroughly gigantic file designed so that bzip2
   can compress it reasonably rapidly.  This is to help test
   support for large files (> 2GB) in a reasonable amount of time.
   I suggest you use the undocumented --exponential option to
   bzip2 when compressing the resulting file; this saves a bit of
   time.  Note: *don't* bother with --exponential when compressing 
   Real Files; it'll just waste a lot of CPU time :-)
   (but is otherwise harmless).
*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
	 ------------------------------------------------------------------ */


#define _FILE_OFFSET_BITS 64

#include 
#include 

/* The number of megabytes of junk to spew out (roughly) */
#define MEGABYTES 5000

#define N_BUF 1000000
char buf[N_BUF];

int main ( int argc, char** argv )
{
   int ii, kk, p;
   srandom(1);
   setbuffer ( stdout, buf, N_BUF );
   for (kk = 0; kk < MEGABYTES * 515; kk+=3) {
      p = 25+random()%50;
      for (ii = 0; ii < p; ii++)
         printf ( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" );
      for (ii = 0; ii < p-1; ii++)
         printf ( "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" );
      for (ii = 0; ii < p+1; ii++)
         printf ( "ccccccccccccccccccccccccccccccccccccc" );
   }
   fflush(stdout);
   return 0;
}
genometools-1.5.1/src/external/bzip2-1.0.6/unzcrash.c000066400000000000000000000071031211610345200221450ustar00rootroot00000000000000
/* A test program written to test robustness to decompression of
   corrupted data.  Usage is 
       unzcrash filename
   and the program will read the specified file, compress it (in memory),
   and then repeatedly decompress it, each time with a different bit of
   the compressed data inverted, so as to test all possible one-bit errors.
   This should not cause any invalid memory accesses.  If it does, 
   I want to know about it!

   PS.  As you can see from the above description, the process is
   incredibly slow.  A file of size eg 5KB will cause it to run for
   many hours.
*/

/* ------------------------------------------------------------------
   This file is part of bzip2/libbzip2, a program and library for
   lossless, block-sorting data compression.

   bzip2/libbzip2 version 1.0.6 of 6 September 2010
   Copyright (C) 1996-2010 Julian Seward 

   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
   README file.

   This program is released under the terms of the license contained
   in the file LICENSE.
   ------------------------------------------------------------------ */


#include 
#include 
#include "bzlib.h"

#define M_BLOCK 1000000

typedef unsigned char uchar;

#define M_BLOCK_OUT (M_BLOCK + 1000000)
uchar inbuf[M_BLOCK];
uchar outbuf[M_BLOCK_OUT];
uchar zbuf[M_BLOCK + 600 + (M_BLOCK / 100)];

int nIn, nOut, nZ;

static char *bzerrorstrings[] = {
       "OK"
      ,"SEQUENCE_ERROR"
      ,"PARAM_ERROR"
      ,"MEM_ERROR"
      ,"DATA_ERROR"
      ,"DATA_ERROR_MAGIC"
      ,"IO_ERROR"
      ,"UNEXPECTED_EOF"
      ,"OUTBUFF_FULL"
      ,"???"   /* for future */
      ,"???"   /* for future */
      ,"???"   /* for future */
      ,"???"   /* for future */
      ,"???"   /* for future */
      ,"???"   /* for future */
};

void flip_bit ( int bit )
{
   int byteno = bit / 8;
   int bitno  = bit % 8;
   uchar mask = 1 << bitno;
   //fprintf ( stderr, "(byte %d  bit %d  mask %d)",
   //          byteno, bitno, (int)mask );
   zbuf[byteno] ^= mask;
}

int main ( int argc, char** argv )
{
   FILE* f;
   int   r;
   int   bit;
   int   i;

   if (argc != 2) {
      fprintf ( stderr, "usage: unzcrash filename\n" );
      return 1;
   }

   f = fopen ( argv[1], "r" );
   if (!f) {
      fprintf ( stderr, "unzcrash: can't open %s\n", argv[1] );
      return 1;
   }

   nIn = fread ( inbuf, 1, M_BLOCK, f );
   fprintf ( stderr, "%d bytes read\n", nIn );

   nZ = M_BLOCK;
   r = BZ2_bzBuffToBuffCompress (
         zbuf, &nZ, inbuf, nIn, 9, 0, 30 );

   assert (r == BZ_OK);
   fprintf ( stderr, "%d after compression\n", nZ );

   for (bit = 0; bit < nZ*8; bit++) {
      fprintf ( stderr, "bit %d  ", bit );
      flip_bit ( bit );
      nOut = M_BLOCK_OUT;
      r = BZ2_bzBuffToBuffDecompress (
            outbuf, &nOut, zbuf, nZ, 0, 0 );
      fprintf ( stderr, " %d  %s ", r, bzerrorstrings[-r] );

      if (r != BZ_OK) {
         fprintf ( stderr, "\n" );
      } else {
         if (nOut != nIn) {
           fprintf(stderr, "nIn/nOut mismatch %d %d\n", nIn, nOut );
           return 1;
         } else {
           for (i = 0; i < nOut; i++)
             if (inbuf[i] != outbuf[i]) { 
                fprintf(stderr, "mismatch at %d\n", i ); 
                return 1; 
           }
           if (i == nOut) fprintf(stderr, "really ok!\n" );
         }
      }

      flip_bit ( bit );
   }

#if 0
   assert (nOut == nIn);
   for (i = 0; i < nOut; i++) {
     if (inbuf[i] != outbuf[i]) {
        fprintf ( stderr, "difference at %d !\n", i );
        return 1;
     }
   }
#endif

   fprintf ( stderr, "all ok\n" );
   return 0;
}
genometools-1.5.1/src/external/bzip2-1.0.6/words0000066400000000000000000000005701211610345200213060ustar00rootroot00000000000000
If compilation produces errors, or a large number of warnings,
please read README.COMPILATION.PROBLEMS -- you might be able to
adjust the flags in this Makefile to improve matters.

Also in README.COMPILATION.PROBLEMS are some hints that may help
if your build produces an executable which is unable to correctly
handle so-called 'large files' -- files of size 2GB or more.

genometools-1.5.1/src/external/bzip2-1.0.6/words1000066400000000000000000000001471211610345200213070ustar00rootroot00000000000000
Doing 6 tests (3 compress, 3 uncompress) ...
If there's a problem, things might stop at this point.
 
genometools-1.5.1/src/external/bzip2-1.0.6/words2000066400000000000000000000002721211610345200213070ustar00rootroot00000000000000
Checking test results.  If any of the four "cmp"s which follow
report any differences, something is wrong.  If you can't easily
figure out what, please let me know (jseward@bzip.org).

genometools-1.5.1/src/external/bzip2-1.0.6/words3000066400000000000000000000016611211610345200213130ustar00rootroot00000000000000
If you got this far and the 'cmp's didn't complain, it looks
like you're in business.  

To install in /usr/local/bin, /usr/local/lib, /usr/local/man and 
/usr/local/include, type

   make install

To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type 

   make install PREFIX=/xxx/yyy

If you are (justifiably) paranoid and want to see what 'make install'
is going to do, you can first do

   make -n install                      or
   make -n install PREFIX=/xxx/yyy      respectively.

The -n instructs make to show the commands it would execute, but
not actually execute them.

Instructions for use are in the preformatted manual page, in the file
bzip2.txt.  For more detailed documentation, read the full manual.  
It is available in Postscript form (manual.ps), PDF form (manual.pdf),
and HTML form (manual.html).

You can also do "bzip2 --help" to see some helpful information. 
"bzip2 -L" displays the software license.

genometools-1.5.1/src/external/bzip2-1.0.6/xmlproc.sh000077500000000000000000000055441211610345200221760ustar00rootroot00000000000000#!/bin/bash
# see the README file for usage etc.
#
# ------------------------------------------------------------------
#  This file is part of bzip2/libbzip2, a program and library for
#  lossless, block-sorting data compression.
#
#  bzip2/libbzip2 version 1.0.6 of 6 September 2010
#  Copyright (C) 1996-2010 Julian Seward 
#
#  Please read the WARNING, DISCLAIMER and PATENTS sections in the 
#  README file.
#
#  This program is released under the terms of the license contained
#  in the file LICENSE.
# ----------------------------------------------------------------


usage() {
  echo '';
  echo 'Usage: xmlproc.sh -[option] ';
  echo 'Specify a target from:';
  echo '-v      verify xml file conforms to dtd';
  echo '-html   output in html format (single file)';
  echo '-ps     output in postscript format';
  echo '-pdf    output in pdf format';
  exit;
}

if test $# -ne 2; then
  usage
fi
# assign the variable for the output type
action=$1; shift
# assign the output filename
xmlfile=$1; shift
# and check user input it correct
if !(test -f $xmlfile); then
  echo "No such file: $xmlfile";
  exit;
fi
# some other stuff we will use
OUT=output
xsl_fo=bz-fo.xsl
xsl_html=bz-html.xsl

basename=$xmlfile
basename=${basename//'.xml'/''}

fofile="${basename}.fo"
htmlfile="${basename}.html"
pdffile="${basename}.pdf"
psfile="${basename}.ps"
xmlfmtfile="${basename}.fmt"

# first process the xmlfile with CDATA tags
./format.pl $xmlfile $xmlfmtfile
# so the shell knows where the catalogs live
export XML_CATALOG_FILES=/etc/xml/catalog

# post-processing tidy up
cleanup() {
  echo "Cleaning up: $@" 
  while [ $# != 0 ]
  do
    arg=$1; shift;
    echo "  deleting $arg";
    rm $arg
  done
}

case $action in
  -v)
   flags='--noout --xinclude --noblanks --postvalid'
   dtd='--dtdvalid http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd'
   xmllint $flags $dtd $xmlfmtfile 2> $OUT 
   egrep 'error' $OUT 
   rm $OUT
  ;;

  -html)
   echo "Creating $htmlfile ..."
   xsltproc --nonet --xinclude  -o $htmlfile $xsl_html $xmlfmtfile
   cleanup $xmlfmtfile
  ;;

  -pdf)
   echo "Creating $pdffile ..."
   xsltproc --nonet --xinclude -o $fofile $xsl_fo $xmlfmtfile
   pdfxmltex $fofile >$OUT $OUT $OUT $OUT $OUT $OUT $OUT $OUT $OUT >BBDDBBHHJJMMLLPPTTQQWWYYZZ^^\\``bbggiijjoollqqvvttyy{{~~‰ÊŎƐǒȕʙ˙̟ϡϢѥҩөԭֱױصڻݼ,#	H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0%2Is"j.3RO% @s"QJH@FQ0ᣤ P`O QECeܐ
E$e	!hsJ#	0
QSଁN'@@˗T᧥H9f$`rGTd!"},P>LPRʝDlB|砃O%)@PE	"
P#R$PNAE||	IN'qTaц!P#}q'
 %@mxP	 RD!EvGvutĈt
 ScNO7&-fGˆ|	_Q=Rd{=qQaqIpO
$D4]|>(^FNq$lY6T@4bH!~bH#!	4!
WЭ~8
	c!C	TAoTA	2!:ǘYFAk$NEb&6ea @d:ntG$O:*4pw5˾
1*x
u /۠mQE$;P-2&sGaFpV
!Qq<&ɰBf3
bXO!SaBҰEyU+50j8%82d?-D'pSw!'8#e%MOkG;{s2wQ7HBa
2!p-_=ę
(1E`ۑ=>p*haL<!KXFHv؞NE M;x
ͼCq	k'|2H8CZ0 |r$G`_([|w%}-5$0#^'`*e!.՝q5g$kx+/y[P:'$
Br H b
ԉoHXo8 (@`@Dk3ZWՊgޝgAguD"11&9""6N(c%U@UF=ӥwڝz/\vPQ3lߩOwH?&F1'	^-*PqTDyO#և~WV=ඕCzfI-Aa%|gX4+}6UcbQP@rG|XNYaAe/@)jX֧y]6'$lsynZ ?@uȁqFvA451Ѣ$TWG]uGEa2ubM=l4NueQ'(1W6u0z@rݓ1n"7}-I@{o6lP0O1'ԳS31PhSPQ(d "Ksڶm?Z4@"N\ 7AJ3["{OjPxh@4!N#`9vEz'g@!?*A@YPAfgsь eӥUP1]iPpdD ,(@jpT(	oP `TN&w&NwVd(rJ15Cb0)@~nK_"AF(VyX# `hVIM<#@1 &0@p0jt#q#&3)C)h2y3Њe}q3v`*ԘrsVpl@~
/XwEk7r8BW*!0i9sa΄lulv$ W(
`atkVgH7pt	՝5F7&P(+aR\tBv=kPaiTdEb!PQb	{P0"k?՝ZpXpr	@\C;ZU@bp'Muix^EkeR#	cǝycΉ-p3D:xMkNpQ, "i&1 _
ejq3:3Tā'-qwgS5!;6#t@4qrAC7@,	(:3W#P3W1F':<e&@P0x0`@P;i{PY8-+7W$
P|Q"nMg:drHMJKH֯A!N@7!h5nP	r $AG0{LQ
 &@%k0gӪ,
GM 1@1Ep@{bl;RmdJ"M>"G@(	kSٵjl۶n;genometools-1.5.1/src/external/cgilua-5.1.3/doc/br/index.html000066400000000000000000000213321211610345200235310ustar00rootroot00000000000000


    CGILua: geração de scripts para a Web usando Lua
    
	



CGILua
Geração de scripts para a Web usando Lua

Visão geral

O CGILua é uma ferramenta que permite criar páginas Web dinâmicas e manipular a inserção de dados por meio de formulários Web. O CGILua permite separar o tratamento dos dados e a lógica do processo de geração de páginas, facilitando o desenvolvimento de aplicativos Web em Lua. Uma das vantagens do CGILua é sua capacidade de abstrair o servidor Web utilizado. Você pode desenvolver um aplicativo em CGILua para um servidor Web e executá-lo em qualquer outro servidor Web compatível com CGILua.

O CGILua é um software livre que usa a mesma licença da Lua 5.0.

Status

A versão atual é a 5.0.

Download

O download do CGILua pode ser feito em código fonte na sua página no LuaForge.

Histórico

Versão 5.0 [23 de julho de 2005]
  • A distribuição do CGILua passa a incluir apenas os arquivos Lua. Os disparadores foram movidos para o Kepler.
  • A biblioteca Stable passou a ser distribuída com VEnv.
  • Correção de um problema de upload de arquivo nos disparadores CGI e Xavante.
  • cgilua.lp.include() passa a aceitar um ambiente com o qual executa o arquivo preprocessado.
Versão 5.0 beta 2 [23 de dezembro de 2004]
  • Correção de problema de distribuição: stable.lua estava ausente
Versão 5.0 beta [15 de dezembro de 2004]
  • Novos disparadores ISAPI e Servlet.
  • Novos recursos de tratamento de erros.
  • Novo recurso de dados persistentes (Stable).
  • Uso do modelo de pacote de Lua 5.1.
  • API de usuário Session mais simples.
  • Correções de pequenos problemas
Versão 5.0 alfa 3 [8 de junho de 2004]
Versão 5.0 alfa [21 de abril de 2004]

Incompatibilidade com versões anteriores do CGILua (4.0 e 3.x)

  • O CGILua 5.0 usa o Lua 5.0.
  • A tabela cgi passou a permitir valores do tipo tabela. Consulte Recebimento de parâmetros para obter uma explicação detalhada.
  • As tags de templates foram alteradas. Consulte Lua Pages para obter uma explicação detalhada.
  • O uso de chamadas getenv para obter variáveis CGI deve ser substituído por chamadas cgilua.servervariable.

Créditos

CGILua 5.0
O CGILua 5.0 foi totalmente reelaborado por Roberto Ierusalimschy, André Carregal e Tomás Guisasola, como parte do Projeto Kepler. A implementação é compatível com a Lua 5.0 e foi codificada por Tomás Guisasola, com as valiosas contribuições de Ana Lúcia de Moura, Fábio Mascarenhas e Danilo Tuler. O desenvolvimento do CGILua 5.0 foi patrocinado pela Fábrica Digital, pela FINEP e pelo CNPq.
CGILua 4.0
Ana Lúcia de Moura adaptou o CGILua 3.2 para Lua 4.0, reimplementou alguns trechos do código e acrescentou alguns aperfeiçoamentos, mas essa versão não foi distribuída oficialmente.
CGILua 3.x
O CGILua surgiu como a evolução de um sistema originário desenvolvido por Renato Ferreira Borges e André Clínio no TeCGraf. Na época (circa 1995) não estavam disponíveis ferramentas em CGI e tudo era feito com scripts de shell!
Porém, a principal contribuição ao CGILua 3 foi dada por Anna Hester, que consolidou toda a ferramenta e desenvolveu uma distribuição consistente com as versões 3.1 e 3.2 (o número foi um esforço para seguir os números de versão da Lua). Essa versão foi amplamente utilizada em uma grande variedade de sistemas.

Fale conosco

Para obter mais informações, entre em contato. Seus comentários são importantes!

XHTML 1.0 válido!

$Id: index.html,v 1.3 2005/11/03 18:48:57 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/br/libraries.html000066400000000000000000000205451211610345200244030ustar00rootroot00000000000000 CGILua: geração de scripts para a Web usando Lua
CGILua
Geração de scripts para a Web usando Lua

Visão geral

O CGILua inclui um conjunto de bibliotecas externas que permite o tratamento de cookies, dados serializados e sessões. Para usar essas bibliotecas, basta usar a instrução require para solicitá-las no arquivo config.lua do CGILua.

Cookies

cgilua.cookies.get (name)
Obtém o valor do cookie com o name fornecido.
Retorna uma string com o valor do cookie.
cgilua.cookies.set (name, value[, options])
Define o valor value do cookie com um name dado. Os nomes e valores de campos na tabela options são usados nos atributos do cookie. Esta função deve ser chamada antes do envio dos cabeçalhos HTTP e antes da geração de qualquer resultado.
Não retorna nada.
cgilua.cookies.sethtml (name, value[, options])
Define o valor value do cookie com um name dado. Esta função gera um elemento HTML <meta>, assim, ela deve ser chamada depois de produzida a tag HTML <head> e antes da tag </head> correspondente.
Não retorna nada.
cgilua.cookies.delete (name[, options])
Exclui um cookie com um name dado (define o valor como xxx).
Não retorna nada.

Serialize

cgilua.serialize (table, outfunc[, indent[, prefix]])
Serializa uma table usando outfunc como a função usada para gerar o resultado; indent como uma string opcional com o padrão de identação; prefix como uma string opcional com o prefixo de identação (usado para armazenar o recuo real entre as chamadas recursivas).
Observe que há algumas restrições: os valores dos tipos function e userdata não podem ser serializados; as tabelas que contêm ciclos também não podem ser serializadas.
Não retorna nada.

Session

cgilua.session.close ()
Fecha a sessão de usuário. Salva todos os dados em cgilua.session.data no sistema de armazenamento em uso (normalmente, o sistema de arquivos). Esta função deve ser chamada depois que o script terminar de ser executado. Para garantir que isso ocorra, recomenda-se usar a addclosefunction no arquivo de configuração.
Não retorna nada.
cgilua.session.data
Tabela que contém os dados sobre a sessão de usuário.
cgilua.session.delete (id)
Exclui uma sessão. O argumento id é o identificador da sessão.
Não retorna nada.
cgilua.session.load (id)
Carrega dados de uma sessão. O argumento id é o identificador da sessão.
Retorna uma tabela com os dados da sessão ou nil seguido de uma mensagem de erro.
cgilua.session.new ()
Cria um novo identificador de sessão.
Retorna o novo identificador de sessão.
cgilua.session.open ()
Abre a sessão de usuário. Cria a tabela cgilua.session.data. Esta função deve ser chamada imediatamente antes da execução do script, mas após o processamento dos cabeçalhos da solicitação. Para garantir que isso ocorra, recomenda-se usar a addopenfunction no arquivo de configuração.
Não retorna nada.
cgilua.session.save (id, data)
Salva data em uma sessão com um id.
Não retorna nada.
cgilua.session.setsessiondir (path)
Define o diretório temporário da sessão. O argumento path é uma string com o novo diretório.
Não retorna nada.

XHTML 1.0 válido!

$Id: libraries.html,v 1.3 2005/11/03 18:48:57 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/br/license.html000066400000000000000000000140021211610345200240400ustar00rootroot00000000000000 CGILua: geração de scripts para a Web usando Lua
CGILua
Geração de scripts para a Web usando Lua

Licença

O CGILua é um software livre: ele pode ser usado com fins acadêmicos e comerciais sem custo algum. Não há royalties ou restrições do tipo "copyleft" da GNU. O CGILua é classificado como um software Open Source (código aberto). Suas licenças são compatíveis com GPL. O CGILua não é de domínio público e o Kepler Project mantém o seu direito autoral. Os detalhes legais estão listados abaixo.

A idéia da licença é a de que você fique livre para usar o CGILua com qualquer objetivo sem incorrer em despesas e sem ter que pedir autorização para isso. Nossa única exigência é que, caso você realmente use o CGILua, então, o devido crédito seja dado por meio da inclusão do aviso de copyright apropriado em seu produto ou na documentação correspondente.

A biblioteca do CGILua foi desenvolvida e implementada por Roberto Ierusalimschy, André Carregal e Tomás Guisasola. A implementação não deriva de softwares licenciados.


Copyright © 2003-2005 The Kepler Project.

Por meio deste, concede-se permissão gratuita a qualquer pessoa que obtenha uma cópia deste software e dos arquivos da documentação associada (o "Software") para trabalhar com o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender cópias do Software, e de permitir a pessoas a quem o Software seja fornecido de assim fazê-lo, sujeitando-se às seguintes condições:

O aviso de copyright acima e esta permissão devem ser incluídos em todas as cópias ou em partes significativas do Software.

O SOFTWARE É FORNECIDO "NO ESTADO EM QUE ESTIVER", SEM GARANTIAS DE QUALQUER TIPO, EXPLÍCITAS OU IMPLÍCITAS, INCLUINDO, SEM LIMITAÇÃO, AS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO OBJETIVO E NÃO INFRAÇÃO. EM CIRCUNSTÂNCIA ALGUMA OS AUTORES OU OS DETENTORES DO COPYRIGHT SERÃO CONSIDERADOS RESPONSÁVEIS POR QUAISQUER REIVINDICAÇÕES, DANOS OU OUTRAS RESPONSABILIDADES, POR MEIO DE CONTRATO, DANOS OU OUTROS RELACIONADOS OU EM DECORRÊNCIA DO USO DO SOFTWARE OU OUTRAS AÇÕES NO MESMO.

XHTML 1.0 válido!

$Id: license.html,v 1.3 2005/11/03 18:48:57 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/br/manual.html000066400000000000000000000432211211610345200237000ustar00rootroot00000000000000 CGILua: geração de scripts para a Web usando Lua
CGILua
Geração de scripts para a Web usando Lua

Introdução

O CGILua usa Lua como a linguagem de scripts do servidor para criar páginas Web dinâmicas. O CGILua oferece suporte a Lua Scripts puros e a Lua Pages (.lp). Um Lua Script é, basicamente, um programa em Lua que cria todo o conteúdo de uma página Web e o retorna para o cliente. Uma Lua Page é um arquivo de texto com marcações (HTML, XML etc.) que incorpora código Lua usando algumas tags especiais. Essas tags são processadas pelo CGILua e a página resultante é retornada para o cliente.

Os Lua Scripts e as Lua Pages são igualmente fáceis de usar e a opção por um deles depende, primariamente, das características da página resultante. Enquanto as Lua Pages são mais convenientes para separar a lógica e o formato, os Lua Scripts são mais adequados para criar páginas de estrutura mais simples, mas que requeiram uma quantidade significativamente maior de processamento interno.

Ao permitir a combinação desses dois métodos, o CGILua dá aos desenvolvedores de aplicativos Web uma maior flexibilidade quando os dois requisitos estão presentes. Para obter uma descrição detalhada de ambos os métodos de criação de scripts e alguns exemplos práticos, consulte Lua Scripts e Lua Pages.

A arquitetura do CGILua é dividida em duas camadas. O nível inferior é representado pela API do servidor (SAPI) e o mais alto, pela API do próprio CGILua. SAPI é a interface entre o servidor Web e a API do CGILua, precisando portanto ser implementada em cada servidor Web e método de disparo empregado.

O CGILua e a API do CGILua são implementados usando-se apenas a SAPI e são totalmente transportáveis entre disparadores e os servidores Web compatíveis. Dessa maneira, qualquer Lua Script ou Lua Page pode ser usada por qualquer disparador.

Instalação

O CGILua segue o modelo de pacotes de Lua 5.1 e, conseqüentemente, precisa ser "instalado". Consulte a seção Configuração do Compat-5.1 para obter informações sobre como instalar corretamente o módulo.

Configuração

O CGILua 5.0 oferece um único arquivo de configuração, chamado config.lua, e um conjunto de funções para alterar a configuração padrão do CGILua. Esse arquivo pode ser colocado em qualquer lugar em LUA_PATH para facilitar a atualização do CGILua sem a substituição do config.lua existente.

Alguns usos do config.lua são:

Tratadores de scripts
Você pode adicionar novos tratadores de CGILua usando cgilua.addscripthandler (consulte também cgilua.buildplainhandler e cgilua.buildprocesshandler para obter as funções que criam tratadores simples).
Tamanhos de dados POST
Altere os limites de tamanho dos dados POST usando cgilua.setmaxinput e cgilua.setmaxfilesize.
Abertura e fechamento de funções
Você pode adicionar suas funções ao ciclo de vida útil do CGILua usando cgilua.addopenfunction e cgilua.addclosefunction. Essas funções são executadas imediatamente antes e depois da execução do script, mesmo quando ocorrer um erro no processamento do script.

Tratamento de erros

Há três funções para tratamento de erros no CGILua:

A função cgilua.seterrorhandler define o tratador de erro, uma função chamada pela Lua logo após ocorrer um erro. O tratador de erro tem acesso à pilha de execução antes da ocorrência do erro, assim, ele pode gerar uma mensagem de erro usando as informações da pilha. Lua também possui uma função para fazer isso: debug.traceback.

A função cgilua.seterroroutput define a função que decide o que deve ser feito com a mensagem de erro. Ele pode ser enviado para o cliente, gravado em um arquivo de log ou enviado para um endereço de email (com a ajuda do LuaSocket ou do LuaLogging, por exemplo).

A função cgilua.errorlog é fornecida para gravar diretamente no arquivo de log de erros do servidor HTTP.

Lua Scripts

Os Lua Scripts são arquivos de texto que contêm código Lua válido. Esse estilo de uso adota uma forma de programação para Web mais "rústica", na qual um programa é responsável pela geração da página resultante. Os Lua Scripts têm a extensão padrão .lua.

Para gerar um documento Web (HTML, XML, WML, CSS etc.) válido, o Lua Script deve obedecer a uma ordem esperada pelo HTTP para produzir a saída, primeiro enviando os cabeçalhos corretos e, depois, enviando o conteúdo real do documento.

O CGILua tem algumas funções que facilitam essas tarefas, por exemplo, cgilua.htmlheader para produzir o cabeçalho de um documento HTML e cgilua.put para enviar o conteúdo do documento (ou parte dele).

Por exemplo, um documento HTML que exiba a frase "Olá mundo!" pode ser gerado com este Lua Script:

cgilua.htmlheader()
cgilua.put([[
<html>
<head>
  <title>Olá mundo</title>
</head>
<body>
  <strong>Olá mundo!</strong>
</body>
</html>]])

Observe que o exemplo acima gera uma página "fixa": embora ela seja gerada no momento da execução, a página não contém informações "variáveis". Isso significa que o mesmo documento poderia ser gerado diretamente com um simples arquivo HTML estático. No entanto, os Lua Scripts são especialmente úteis quando o documento contém informações que não sejam conhecidas de antemão ou que mudem de acordo com os parâmetros passados. Nesse caso, é necessário gerar uma página "dinâmica".

Outro exemplo fácil pode ser mostrado, desta vez, usando uma estrutura de controle Lua, variáveis e o operador de concatenação:

cgilua.htmlheader()

if cgi.language == 'english' then
  greeting = 'Hello World!'
elseif cgi.language == 'portuguese' then
  greeting = 'Olá Mundo!'
else
  greeting = '[unknown language]'
end

cgilua.put('<html>')  
cgilua.put('<head>')
cgilua.put('  <title>'..greeting..'</title>')
cgilua.put('</head>')
cgilua.put('<body>')
cgilua.put('  <strong>'..greeting..'</strong>')
cgilua.put('</body>')
cgilua.put('</html>')

No exemplo acima, o uso de cgi.language indica que language foi passado para o Lua Script como um parâmetro do CGILua, oriundo de um campo de formulário HTML (via POST) ou da URL usada para ativá-lo (via GET). O CGILua decodifica automaticamente esses parâmetros para que você possa usá-los à vontade em Lua Scripts e Lua Pages.

Lua Pages

Uma Lua Page é um arquivo de modelo (template) com texto que será processado pelo CGILua antes de o servidor HTTP enviá-lo para o cliente. O CGILua não processa o texto, ele procura algumas marcações especiais que inserem o código Lua no arquivo. Depois que essas marcações são processadas e mescladas no arquivo de template, os resultados são enviados para o cliente.

As Lua Pages têm a extensão padrão .lp. Elas são uma maneira mais simples de criar uma página dinâmica porque eliminam a necessidade de enviar os cabeçalhos HTTP. Em geral, Lua Pages são páginas HTML, portanto, o CGILua envia automaticamente o cabeçalho HTML.

Como há algumas restrições quanto aos usos de cabeçalhos HTTP, ocasionalmente, será preciso usar um Lua Script em vez de uma Lua Page.

As marcações fundamentais de uma Lua Page são:

<?lua chunk ?>
Processa e mescla os resultados da execução do chunk Lua, no qual a marcação está localizada no template. A forma alternativa <% chunk %> também pode ser usada.
<?lua= expression ?>
Processa e mescla a avaliação de uma expression em Lua, na qual a marcação está localizada no template. A forma alternativa <%= expression %> também pode ser usada.

Observe que a marcação de término não pode estar dentro de um chunk de código ou uma expressão Lua, mesmo que esteja entre aspas. O pré-processador de Lua Pages apenas faz substituições globais no template, procurando um par correspondente de marcações e gerando o código Lua correspondente para obter o mesmo resultado que o Lua Script equivalente.

O segundo exemplo da seção anterior pode ser escrito usando uma Lua Page como esta:

<html>
<?lua
if cgi.language == 'english' then
  greeting = 'Hello World!'
elseif cgi.language == 'portuguese' then
  greeting = 'Olá Mundo!'
else
  greeting = '[unknown language]'
end
?>
<head>
  <title><%= greeting %></title>
</head>
<body>
  <>strong<%= greeting %></strong>
</body>
</html>

As tags HTML e as tags de Lua Page podem ser livremente intercambiadas. Porém, como ocorre em outras linguagens de template, considera-se uma boa prática não usar lógica Lua explícita em templates. A abordagem recomendada é usar apenas chamadas de funções que retornam chunks de conteúdo, dessa forma, nesse exemplo, pressupondo-se que a função getGreeting tenha sido definida em outro ponto como

function getGreeting()
  local greeting
  if cgi.language == 'english' then
    greeting = 'Hello World!'
  elseif cgi.language == 'portuguese' then
    greeting = 'Olá Mundo!'
  else
    greeting = '[unknown language]'
  end
  return greeting
end

a Lua Page poderia ser reescrita desta maneira:

<html>
<head>
  <title><%= getGreeting() %></title>
</head>
<body>
  <strong><%= getGreeting() %></strong>
</body>
</html>

Recebimento de parâmetros: a tabela cgi

O CGILua oferece uma maneira unificada de acessar dados passados para os scripts no método HTTP usado (GET ou POST). Independentemente do método usado no cliente, todos os parâmetros serão fornecidos dentro da tabela cgi.

Normalmente, todos os tipos de parâmetros estarão disponíveis como strings. Se o valor de um parâmetro for um número, ele será convertido na representação de string correspondente.

Há apenas duas exceções nas quais o valor será uma tabela Lua. O primeiro caso ocorre em uploads de arquivos, no qual a tabela correspondente terá estes campos:

filename
o nome do arquivo como fornecido pelo cliente.
filesize
o tamanho do arquivo em bytes.
file
o handler do arquivo temporário. O arquivo deve ser copiado porque o CGILua o removerá após a conclusão do script.

O outro caso que usa tabelas Lua ocorre quando há mais de um valor associado ao mesmo nome de parâmetro. Isso acontece no caso de uma lista de seleção com vários valores; mas também ocorre quando o formulário tiver dois ou mais elementos com o mesmo atributo name (possivelmente porque um estava em um formulário e o outro, na query string). Todos os valores serão inseridos em uma tabela indexada, na ordem em que foram tratados.

XHTML 1.0 válido!

$Id: manual.html,v 1.3 2005/11/03 18:48:57 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/br/reference.html000066400000000000000000000470421211610345200243660ustar00rootroot00000000000000 CGILua: geração de scripts para a Web usando Lua
CGILua
Geração de scripts para a Web usando Lua

Cabeçalhos

As funções de cabeçalho são usadas para alterar os cabeçalhos de resposta HTTP e consistem em:

cgilua.contentheader (type, subtype)
Envia um cabeçalho Content-type com os valores dados de tipo e subtipo.
Ambos os argumentos são strings: type é o tipo do cabeçalho; subtype é o subtipo do cabeçalho.
Não retorna nada.
cgilua.header (header, value)
Envia um cabeçalho genérico. Esta função não deve ser usada para gerar um cabeçalho Content-type ou Location.
Ambos os argumentos são strings: header é o nome do cabeçalho e value, seu valor.
Não retorna nada.
cgilua.htmlheader ()
Envia o cabeçalho de um arquivo HTML (Content-type: text/html).
Não retorna nada.
cgilua.redirect (url, args)
Envia o cabeçalho para forçar o redirecionamento para a URL dada, adicionando os parâmetros na tabela args relativos à nova URL.
O primeiro argumento (url) é a URL à qual o navegador deve ser redirecionado; o segundo (args) é uma tabela opcional que pode conter pares nome = valor que serão codificados para formar um URL válido (consulte a função cgilua.urlcode.encodetable).
Não retorna nada.

Geração de conteúdo

As funções de geração de conteúdo são usadas para produzir texto para a resposta e gerar URLs no formato do CGILua. Elas consistem em:

cgilua.mkabsoluteurl (path)
Cria uma URL absoluta contendo path da URL dada.
Retorna a URL absoluta resultante.
cgilua.mkurlpath (script [, args])
Cria o caminho de uma URL a ser usado como link para um script CGILua usando a tabela opcional de argumentos (args). Os argumentos são usados na URL como parâmetros de string de consulta.
Retorna a URL resultante.
cgilua.put (string)
Envia a string dada para o cliente.
Não retorna nada.

Lua Pages

As funções de Lua Pages são usadas para processar templates Lua Pages e definir o comportamento desse processamento. Elas consistem em:

cgilua.handlelp (filename)
Equivale a cgilua.lp.include, mas envia o cabeçalho HTML antes do arquivo pré-processado.
Não retorna nada.
cgilua.lp.include (filename)
Pré-processa um template Lua Page (fornecido por filename) e envia o resultado para o cliente.
Não retorna nada.
cgilua.lp.setcompatmode (boolean)
Ativa e desativa o modo de compatibilidade. A ativação fará com que o pré-processador de Lua Pages entenda as estruturas de campos de expressão e campos de código usadas por versões anteriores do CGILua.
Não retorna nada.
cgilua.lp.setoutfunc (funcname)
Define o nome da função de resultado de templates. O pré-processador Lua Pages gera chamadas para a função com o funcname fornecido (uma string).
Não retorna nada.
cgilua.lp.translate (string)
Usa o pré-processador Lua Pages para gerar uma string correspondente ao código Lua que executa expressões e/ou chunks em Lua dentro da string fornecida.
Retorna uma string com o código Lua resultante.

Variáveis do CGILua

As variáveis do CGILua oferecem informações sobre o script em processamento e as variáveis de ambiente do CGI. Elas consistem em atributos e funções:

cgilua.script_file
O nome do arquivo do script em execução. Obtido de cgilua.script_path.
cgilua.script_path
O caminho completo do arquivo do script em execução. Esta variável normalmente é igual à variável de ambiente do CGI PATH_TRANSLATED.
cgilua.script_pdir
O diretório do script em execução. Obtido de cgilua.script_path.
cgilua.script_vdir
O diretório virtual do script em execução. Obtido de cgilua.script_vpath.
cgilua.script_vpath
O caminho virtual completo do arquivo do script em execução. Equivale à variável de ambiente do CGI PATH_INFO.
cgilua.servervariable (varname)
Retorna uma string com o valor da variável de ambiente do CGI que corresponde a varname. Para obter uma lista das variáveis do CGI, consulte SAPI.Request.servervariable.
cgilua.urlpath
O nome do script. Equivale à variável de ambiente do CGI SCRIPT_NAME.

Tratamento de erros

As funções de tratamento de erros do CGILua permitem a redefinição de como os erros são tratados e apresentados ao usuário. Elas consistem em:

cgilua.errorlog (string)
Envia a string dada para o arquivo de log de erros.
Não retorna nada.
cgilua.seterrorhandler (func)
Define a tratador de erros como func. Esta função é chamada pela Lua quando ocorre um erro. Ela recebe a mensagem de erro gerada pela Lua e é responsável por gerar e retornar o erro correto que deve ser usado pelo CGILua.
Não retorna nada.
cgilua.seterroroutput (func)
Define a função responsável pela apresentação de erros como func. Esta função é chamada pela Lua para gerar o resultado do erro.
Não retorna nada.

Comportamento do CGILua

O comportamento do CGILua pode ser configurado com o uso deste conjunto de funções:

cgilua.addclosefunction (func)
Define uma função (func) para ser chamada após a execução do CGILua.
Não retorna nada.
cgilua.addopenfunction (func)
Define uma função (func) para ser chamada antes da execução do CGILua.
Não retorna nada.
cgilua.addscripthandler (ext, func)
Define uma função (func) para pré-processar os arquivos com uma determinada extensão (ext). A configuração padrão usa cgilua.doscript para processar Lua Scripts (arquivos .lua) e cgilua.handlelp para processar Lua Pages (arquivos .lp).
Não retorna nada.
cgilua.buildplainhandler (type, subtype)
Cria um tratador de scripts que envia o cabeçalho fornecido e o arquivo sem formatação solicitado. O cabeçalho Content-type é formado pelos dois argumentos; a função criada recebe um nome de arquivo como único argumento e retorna o nome de arquivo dado sem alterações.
Retorna uma função.
cgilua.buildprocesshandler (type, subtype)
Cria um tratador de scripts que envia o cabeçalho fornecido e o arquivo processado solicitado. O cabeçalho Content-type é formado pelos dois argumentos; a função criada recebe um nome de arquivo como único argumento e retorna o nome de arquivo dado pré-processado pela função cgilua.lp.include.
Retorna uma função.
cgilua.setlibdir (dir)
Define o diretório de bibliotecas padrão do CGILua. Esse valor é usado para criar o LUA_PATH usado pela função require (require é redefinida pelo CGILua).
Não retorna nada.
cgilua.setmaxfilesize (size)
Define o tamanho máximo (em bytes) de cada arquivo cujo upload seja feito. Esse valor é limitado pelo tamanho máximo de entrada total (consulte cgilua.setmaxinput). Esta função só passa a vigorar se usada antes do processamento dos dados de POST, portanto, seu uso em scripts é irrelevante.
Não retorna nada.
cgilua.setmaxinput (size)
Define o tamanho de entrada total máxima permitido (em bytes). Esta função só passa a vigorar se usada antes do processamento dos dados de POST, portanto, seu uso em scripts é irrelevante.
Não retorna nada.

Funções de codificação de URL

As funções de codificação do CGILua permitem que o processamento de strings de URL seja feito de maneira simples:

cgilua.urlcode.encodetable (table)
Codifica em formato URL os elementos de uma tabela, criando uma string usada como URL para informar dados/parâmetros a outro script.
Retorna uma string representando a tabela de argumentos codificada.
cgilua.urlcode.escape (string)
Codifica em formato URL uma string.
Retorna a string codificada.
cgilua.urlcode.insertfield (args, name, value)
Adiciona o valor (value) fornecido ao campo indexado por um nome (nome) na tabela args. Se o campo já tiver um valor, será transformado em uma tabela com esse valor no índice 1 e o novo valor no índice 2. Outros valores serão acrescentados no final da parte array da tabela criada.
Não retorna nada.
cgilua.urlcode.parsequery (query, args)
Analisa os dados codificados em formato URL do pedido. Isso pode ser a parte query da URL do script ou dos dados POST codificados em URL. Cada par nome = valor codificado é inserido na tabela args.
Não retorna nada.
cgilua.urlcode.unescape (string)
Decodifica uma string que usa o formato URL.
Retorna a string decodificada.

Funções auxiliares

cgilua.doscript (filepath)
Executa um arquivo (dado por filepath). Gera um erro se ocorrer. Em caso de êxito, retorna os valores retornados pela execução.
cgilua.pack (...)
Retorna uma nova tabela que armazena todos os argumentos passados.
cgilua.splitpath (path)
Retorna duas strings com as partes "diretório" e "arquivo" do path fornecido.

Índice alfabético

addclosefunction
addopenfunction
addscripthandler
buildplainhandler
buildprocesshandler
contentheader
doscript
encodetable (urlcode)
errorlog
escape (urlcode)
header
htmlheader
include (lp)
insertfield (urlcode)
mkabsoluteurl
mkurlpath
pack
parsequery (urlcode)
handlelp
lp
put
redirect
script_file
script_path
script_pdir
script_vdir
script_vpath
servervariable
setcompatmode (lp)
seterrorhandler
seterroroutput
setlibdir
setmaxfilesize
setmaxinput
setoutfunc (lp)
splitpath
urlcode
unescape (urlcode)
urlpath

XHTML 1.0 válido!

$Id: reference.html,v 1.4 2005/11/03 18:48:57 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/br/sapi.html000066400000000000000000000260371211610345200233650ustar00rootroot00000000000000 CGILua: geração de scripts para a Web usando Lua
CGILua
Geração de scripts para a Web usando Lua

API do servidor

A API do servidor (SAPI) é um conjunto de funções que abstrai o servidor Web e o disparador usado. Um disparador de SAPI é o mecanismo que permite a um servidor Web executar e comunicar-se com o CGILua e os aplicativos Web. A SAPI permite a abstração de uma série de detalhes internos, fazendo com que o CGILua seja muito mais portátil, já que transportar o CGILua para uma nova plataforma significa simplesmente escrever um disparador de SAPI para a plataforma de destino.

No momento, o CGILua oferece suporte a Apache, Microsoft IIS, Tomcat e Xavante como servidores Web, e a CGI, FastCGI, mod_lua, ISAPI e servlets como disparadores.

As funções são separadas em dois pacotes: SAPI.Request e SAPI.Response:

SAPI.Request.getpostdata ([n])
Obtém um bloco de dados de POST. O parâmetro opcional n é o número de bytes para ler (o tamanho de bloco padrão será usado se nenhum parâmetro for informado).
Retorna o bloco como uma string Lua.
SAPI.Request.servervariable (string)
Obtém o valor de uma variável de ambiente do servidor. O argumento pode ser uma das variáveis CGI definidas, embora nem todos os servidores implementem o conjunto completo de variáveis. O conjunto consiste em:
  • AUTH_TYPE - se o servidor suportar autenticação de usuário e o script estiver protegido, este é o método de autenticação específico ao protocolo usado para validar o usuário.
  • CONTENT_LENGTH - o tamanho do conteúdo como fornecido pelo cliente.
  • CONTENT_TYPE - para consultas que têm informações anexadas, por exemplo, HTTP POST e PUT, este é o tipo de conteúdo dos dados.
  • GATEWAY_INTERFACE - a revisão da especificação CGI com a qual esse servidor é compatível. Formato: CGI/revisão
  • PATH_INFO - informações adicionais sobre o caminho, conforme fornecidas pelo cliente. Em outras palavras, os scripts podem ser acessados por meio dos respectivos nomes de caminho virtual, seguidos de informações adicionais no final desse caminho. As informações adicionais são enviadas como PATH_INFO. Essas informações devem ser decodificadas pelo servidor se vierem de uma URL antes de serem passadas para o script CGI.
  • PATH_TRANSLATED - o servidor fornece uma versão convertida de PATH_INFO, que realiza quaisquer mapeamentos de virtual para físico no caminho.
  • QUERY_STRING - as informações inseridas após o "?" na URL que fez referência a esse script. Essas são as informações da consulta e não devem ser decodificadas. Esta variável deve ser sempre definida quando houver informações da consulta, qualquer que seja a decodificação da linha de comando.
  • REMOTE_ADDR - o endereço IP do host remoto que faz o pedido.
  • REMOTE_HOST - o nome do host que faz o pedido. Se o servidor não tiver essas informações, ele define REMOTE_ADDR e não define esta variável.
  • REMOTE_IDENT - se o servidor HTTP oferecer suporte à identificação RFC 931, esta variável será definida com o nome do usuário remoto recuperado do servidor. O uso desta variável deve ser limitado apenas à conexão.
  • REMOTE_USER - se o servidor oferecer suporte à autenticação de usuário e o script estiver protegido, este é o nome de usuário com o qual eles foram autenticados.
  • REQUEST_METHOD - o método com o qual o pedido foi feito. Para HTTP, isto equivale a "GET", "HEAD", "POST" etc.
  • SCRIPT_NAME - um caminho virtual para o script em execução, usado em URLs auto-referentes.
  • SERVER_NAME - o nome do host do servidor, o alias do DNS ou o endereço IP como exibido em URLs auto-referentes.
  • SERVER_PORT - o número da porta à qual o pedido foi enviado.
  • SERVER_PROTOCOL - o nome e a revisão do protocolo de informações com o qual este pedido foi enviado. Formato: protocolo/revisão
  • SERVER_SOFTWARE - o nome e a versão do software do servidor Web que responde ao pedido (e executa o gateway). Formato: nome/versão
Além desses, as linhas do cabeçalho recebidas do cliente, se houver, são colocadas no ambiente com o prefixo HTTP_ seguido do nome do cabeçalho. Quaisquer caracteres - (hífen) no nome do cabeçalho são alterados para caracteres _ (sublinhado). O servidor pode excluir quaisquer cabeçalhos que já tenha processado, por exemplo, Authorization, Content-type e Content-length. Se necessário, o servidor pode optar por excluir todos ou qualquer um desses cabeçalhos se a inclusão exceder algum limite do ambiente do sistema.
Retorna uma string.
SAPI.Response.contenttype (string)
Envia o cabeçalho Content-type para o cliente. A string fornecida está na forma "tipo/subtipo". Esta função deve ser chamada antes que qualquer saída seja enviada com o uso de SAPI.Response.write.
Não retorna nada.
SAPI.Response.errorlog (string)
Gera uma saída de erro usando a string fornecida.
Não retorna nada.
SAPI.Response.header (header, value)
Envia um cabeçalho genérico para o cliente. O primeiro argumento deve ser o nome do cabeçalho, por exemplo, "Set-Cookie". O segundo deve ser o valor. Esta função não deve ser usada em substituição às funções SAPI.Response.contenttype ou SAPI.Response.redirect.
Não retorna nada.
SAPI.Response.redirect (url)
Envia o cabeçalho Location para o cliente. A url fornecida deve ser uma string.
Não retorna nada.
SAPI.Response.write (string)
Gera uma saída usando a string fornecida.
Não retorna nada.

XHTML 1.0 válido!

$Id: sapi.html,v 1.3 2005/11/03 18:48:57 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/us/000077500000000000000000000000001211610345200215575ustar00rootroot00000000000000genometools-1.5.1/src/external/cgilua-5.1.3/doc/us/cgi-128.gif000066400000000000000000000105641211610345200233260ustar00rootroot00000000000000GIF87arvz}~ mmmssstttyyy|||  !!%%""%%)))),,55116611::::>>BBDDBBHHJJMMLLPPTTQQWWYYZZ^^\\``bbggiijjoollqqvvttyy{{~~‰ÊŎƐǒȕʙ˙̟ϡϢѥҩөԭֱױصڻݼ,# H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0%2Is"j.3RO% @s "QJH@FQ0ᣤ P`O QECeܐ E$e !hsJ# 0 QSଁN'@@˗T᧥H9f$`rGTd!"},P>LPRʝDlB| 砃 O%)@PE " P#R$PNAE|| IN'qTaц!P#}q' %@mxP RD!EvGvutĈt ScNO 7&-fGˆ| _Q=Rd{=qQaqIpO $D4]|>(^FNq$lY6T@4bH!~bH#! 4! WЭ~8 c!C TAoTA 2!:ǘYFAk$N Eb&6ea @d:ntG$O:*4pw5˾ 1*x u /۠mQE$;P-2&sGaFpV !Qq<&ɰBf3 bXO!SaBҰEyU+50j8%82d?-D'pSw!'8#e%MOkG;{s2wQ7HBa 2!p-_=ę (1E`ۑ=>p*ha L <!KXFHv؞NE M;x ͼCq k'|2H8CZ0 |r$ G`_([|w%}-5$0 #^'`*e!.՝q5g$kx+/y[P :'$ Br H b ԉoHXo8 (@`@Dk3ZWՊgޝgAguD"11&9""6N(c%U@UF=ӥwڝz/\vPQ3lߩOwH?&F1' ^-*PqTDyO#և~WV=ඕCzfI-Aa%|gX4+}6Ucb QP@rG|XNYaAe/@)jX֧y]6'$lsynZ ?@uȁq FvA45 1Ѣ$TWG]uGEa2ubM =l4NueQ'(1W6u0z@rݓ1n"7}-I@{o6lP0O1'ԳS31PhSPQ(d "Ksڶm?Z4@"N\ 7AJ3["{OjPxh@4!N#`9vEz'g@!?* A@YPAfgsь eӥUP1]iPpdD ,(@jpT( oP ` TN&w&NwVd(rJ15Cb0)@~n K_"AF(VyX# `h VIM<#@1 &0@p0jt#q#&3) C) h2y3Њe }q3v`*ԘrsVpl@~ /XwEk7r8BW*!0i9sa΄lulv$ W( `atkVgH7pt ՝5F7&P(+aR\tBv=kPaiTdEb!PQb {P0"k?՝ZpXpr @\C;ZU@bp'Muix^EkeR# cǝycΉ-p3D:xMkNpQ, "i&1 _ ejq3: 3Tā'-qwgS5!;6#t@4qrAC7@, (:3W#P3W1F':<e&@P0x0`@P;i{PY8-+7W$ P|Q"nMg:drHMJKH֯A!N@7!h5nP r $AG0{LQ &@% k0gӪ, GM 1@1Ep@{bl;RmdJ"M>"G@( kSٵjl۶n;genometools-1.5.1/src/external/cgilua-5.1.3/doc/us/index.html000066400000000000000000000325561211610345200235670ustar00rootroot00000000000000 CGILua: Building Web Scripts with Lua
CGILua
Building Web Scripts with Lua

Overview

CGILua is a tool for creating dynamic Web pages and manipulating input data from Web forms. CGILua allows the separation of logic and data handling from the generation of pages, making it easy to develop web applications with Lua.

One of advantages of CGILua is its abstraction of the underlying Web server. CGILua can be used with a variety of Web servers and, for each server, with different launchers. A launcher is responsible for the interaction of CGILua and the Web server, for example using ISAPI on IIS or mod_lua on Apache. The reference implementation of CGILua launchers is Kepler.

CGILua is free software and uses the same license as Lua 5.1.

Status

Current version is 5.1.3

Download

CGILua source code can be downloaded from its LuaForge page

You can also install CGILua using LuaRocks:

luarocks install cgilua

History

Version 5.1.2 [9/Mar/2009]
  • Strips utf-8 BOM from templates in lp.include
  • Fixed reentrancy bug
  • Fixed reset of cgilua.urlpath
Version 5.1.2 [19/May/2008]
  • Added the cgilua.authentication module
  • cgilua.print now separates arguments with tabs, like Lua print
  • Now print and write are aliases to cgilua.print and cgilua.put.
  • Now strips an eventual #! from top of Lua Pages files
  • CGILua can now process sequential requests in the same Lua state
  • Better error handling. Wraps error message in valid HTML
  • Bug fixed: CGILua was ignoring CGILUA_TMP in Windows
  • Corrected the URL handling for the dispatcher (bug found by Ronaldo Sugii)
  • Better URL handling for different locales
  • Handling multiple values in the generated URL (patch by Matt Campbell)
  • Fixed file handle leak in loader.lua
  • Fixed bug [#2630] - Including new files (bug found by Bruno Massa)
Version 5.1.1 [21/Nov/2007]
  • Changed the security policy for scripts. Now scripts have access to all Lua globals, including the debug and os packages. It is up to the application developer to choose what policy to use
  • If you are using Kepler, it is strongly suggested that you replace your previous CGILua config.lua file with the new one installed by Kepler and then merge the differences
  • Added the cgilua.dispatcher module
  • Added default handlers for a set of MIME types. The default handlers return only the content-type and conten-lenght headers for the files.
  • Added functions cgilua.splitonfirst and cgilua.splitonlast
  • Added functions cgilua.tmpfile and cgilua.tmpname
  • Changed the use of "/test" for the session temporary directory checking (bug found by Yuri Takhteyev)
  • Corrected the use of cgilua.QUERY in the session handling (bug found by Jim Madsen)
  • Better handling of "application/xml" POST content types (patch by Ignacio Burgueño)
  • Fixed Bug [#1910] - Bug in byte accounting in post.lua (found by Greg Bell)
Version 5.1.0 [23/Aug/2007]
  • Uses Lua 5.1
  • Added function cgilua.print (that uses tostring on its parameters)
  • Added a generic dispatcher and the concept of CGILua Apps
  • Replaced the cgi table used until CGILua 5.0 by two others cgilua.QUERY and cgilua.POST)
  • Added fake "package" table to enable the user/programmer to create modules with global visibility
  • Bug fix: return of HTTP status code
  • Bug fix: close method was recreating the session file
  • Correcting how LP handles strings with CR characters (Lua 5.0 would not mind, but Lua 5.1 does)
  • Fixed a bug with lighttpd
Version 5.0.1 [20/Sep/2006]
  • Uses Compat-5.1 Release 5.
  • Caches Lua Pages template strings.
  • New configuration examples.
  • Improvements in the Session library.
  • Removed the debug package from the user scripts environment.
  • POST handling bug fixes (related to the text/plain content type).
Version 5.0 [23/Jul/2005]
  • CGILua distribution includes now only the Lua files, the launchers have been moved to Kepler.
  • The Stable library is now distributed with VEnv.
  • Fixed a file upload bug in the CGI and Xavante launchers.
  • cgilua.lp.include() now accepts an environment to run the preprocessed file in it.
Version 5.0 beta 2 [23/Dec/2004]
  • Distribution bug fix: stable.lua was missing
Version 5.0 beta [15/Dec/2004]
  • New ISAPI and Servlet Launchers.
  • New Error Handling features.
  • New persistent data feature (Stable).
  • Uses the package model for Lua 5.1.
  • Simpler User Session API.
  • Small bug corrections
Version 5.0 alpha 3 [8/Jun/2004]
Version 5.0 alpha [21/Apr/2004]

Incompatibility with previous CGILua versions (5.0, 4.0 and 3.x)

  • CGILua 5.1 uses Lua 5.1.
  • The cgi table is now deprecated. See Receiving parameters for a more detailed explanation.
  • The template tags have changed. See Lua pages for a more detailed explanation.
  • The use of getenv calls to obtain CGI variables should be replaced by cgilua.servervariable calls.

Credits

CGILua 5.1
CGILua 5.1 is being maintained by André Carregal and Tomás Guisasola with contributions from Fábio Mascarenhas and others from the Kepler mailing list.
CGILua 5.0
CGILua 5.0 was completely redesigned by Roberto Ierusalimschy, André Carregal and Tomás Guisasola as part of the Kepler Project. The implementation is compatible with Lua 5.0 and was coded by Tomás Guisasola with invaluable contributions by Ana Lúcia de Moura, Fábio Mascarenhas and Danilo Tuler. CGILua 5.0 development was sponsored by Fábrica Digital, FINEP and CNPq.
CGILua 4.0
Ana Lúcia de Moura adapted CGILua 3.2 to Lua 4.0, reimplemented some code and added a few improvements but this version was not officially distributed.
CGILua 3.x
CGILua was born as the evolution of an early system developed by Renato Ferreira Borges and André Clínio at TeCGraf. At the time (circa 1995) there were no CGI tools available and everything was done with shell scripts!
However, the main contribution to CGILua 3 was done by Anna Hester, who consolidated the whole tool and developed a consistent distribution with versions 3.1 and 3.2 (the number was an effort to follow Lua version numbers). This version was widely used on a great variety of systems.

Contact us

For more information please contact us. Comments are welcome!

You can also reach other CGILua developers and users on the Kepler Project mailing list.

Valid XHTML 1.0!

$Id: index.html,v 1.67 2009/03/09 22:02:56 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/us/libraries.html000066400000000000000000000271371211610345200244330ustar00rootroot00000000000000 CGILua: Building Web Scripts with Lua
CGILua
Building Web Scripts with Lua

Overview

CGILua includes a set of external libraries that allows the handling of authentication, cookies, dispatching, serialized data and sessions. To use these libraries just require them in your CGILua config.lua or script file.

Authentication

cgilua.authentication.check (username, passwd)
Checks if the pair username/passwd is authenticated by the configured method.
Returns true if succesfull or nil plus an error message if not.
cgilua.authentication.checkURL ()
Returns the URL for the checking script. The checking script receives the current URL as the ref parameter. It is up to the checking script to ask for user credentials, check if the user has the expected credentials (using cgilua.authentication.check (username, passwd) if implementing the checking script using CGILua), and redirect to the original URL (using the ref parameter or cgilua.authentication.refURL() if implementing the checking script using CGILua).
cgilua.authentication.configure (options, methods)
Configures the authentication framework (see /examples/authentication_conf.lua in CVS for more information).
cgilua.authentication.logoutURL ()
Returns the URL for the logout script.
cgilua.authentication.refURL ()
Returns the URL for the page that orignally required authentication. Used in checking scripts that use CGILua. Other checking scripts can use the ref parameter.
cgilua.authentication.username ()
Returns the authenticated user or nil if no user is currently authenticated.

Cookies

cgilua.cookies.get (name)
Gets the value of the cookie with the given name.
Returns a string with the value of the cookie.
cgilua.cookies.set (name, value[, options])
Sets the value of the cookie with a given name. The optional table options is used togive the values of the cookies attributes: expires, path, domain, secure. This function should be called before the HTTP headers are sent and before any output is generated, so it must not be used inside a Lua Page.
This function sends a cookie with the response. If you need to create a cookie inside the generated response or if the cookie needs to be set inside the client, use cgilua.cookies.sethtml instead.
Returns nothing.
cgilua.cookies.sethtml (name, value[, options])
Sets the value of the cookie with a given name. The optional table options is used to give the values of the cookies attributes: expires, path, domain, secure.
This function generates a <meta> HTML element so it should be called after the <head> HTML tag and before the corresponding </head>.
This function creates a cookie in the client, if you need to send the cookie with the response use cgilua.cookies.set instead.
Returns nothing.
cgilua.cookies.delete (name[, options])
Deletes a cookie with a given name (setting its value to xxx). This function should be called before the HTTP headers are sent and before any output is generated.
Returns nothing.

Dispatcher

cgilua.dispatch.route (urlmaps)
Defines the routing using a table of URLs maps or a single map. A map defines a URL mask using $name patterns to extract parameters, a function to be called with the extracted parameters and a name for the map when used with cgilua.dispatch.route_url.
cgilua.dispatch.route_url (mapname, parameters, query)
Returns an URL for a named route map. mapname defines the name associated with the map in the original routed URL table sent to cgilua.dispatch.route. params defines a table of named parameters used to fill the URL pattern. query defines an optional table of named parameters used for the QUERY part of the URL.

Serialize

cgilua.serialize (table, outfunc[, indent[, prefix]])
Serializes a table using outfunc as the function to be used to generate the output; indent as an optional string with the indentation pattern; prefix as an optional string with the indentation prefix (it is used to store the actual indentation between the recursion calls).
Some restrictions must be noted: values of types function and userdata are not serialized; tables with cycles are not serialized.
Returns nothing.

Session

cgilua.session.close ()
Closes the user session. Saves all data in cgilua.session.data to the storage system being used (usually the filesystem). This function should be called after the end of the script execution. A recommended way to ensure that is to use addclosefunction in the configuration file.
Returns nothing.
cgilua.session.data
Table which holds the user session data.
cgilua.session.delete (id)
Deletes a session. The argument id is the session identifier.
Returns nothing.
cgilua.session.destroy ()
Destroys the current session.
Returns nothing.
cgilua.session.load (id)
Loads data from a session. The argument id is the session identifier.
Returns a table with session data or nil followed by an error message.
cgilua.session.new ()
Creates a new session identifier.
Returns the new session identifier.
cgilua.session.open ()
Opens the user session. Creates the table cgilua.session.data. This function should be called just before the execution of the script, but after the processing of the request's headers. A recommended way to ensure that is to use addopenfunction in the configuration file.
Returns nothing.
cgilua.session.save (id, data)
Saves data to a session with an id.
Returns nothing.
cgilua.session.setsessiondir (path)
Defines the session temporary directory. Argument path is a string with the new directory.
Returns nothing.

Valid XHTML 1.0!

$Id: libraries.html,v 1.34 2007/12/05 19:41:13 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/us/license.html000066400000000000000000000127701211610345200240760ustar00rootroot00000000000000 CGILua: Building Web Scripts with Lua
CGILua
Building Web Scripts with Lua

License

CGILua is free software: it can be used for both academic and commercial purposes at absolutely no cost. There are no royalties or GNU-like "copyleft" restrictions. CGILua qualifies as Open Source software. Its licenses are compatible with GPL. CGILua is not in the public domain and the Kepler Project keep its copyright. The legal details are below.

The spirit of the license is that you are free to use CGILua for any purpose at no cost without having to ask us. The only requirement is that if you do use CGILua, then you should give us credit by including the appropriate copyright notice somewhere in your product or its documentation.

The CGILua library is designed and implemented by Roberto Ierusalimschy, André Carregal and Tomás Guisasola. The implementation is not derived from licensed software.


Copyright © 2003 Kepler Project.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 

 

 

 

 

 

 

Valid XHTML 1.0!

$Id: license.html,v 1.23 2008/05/19 18:13:36 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/us/manual.html000066400000000000000000000677551211610345200237460ustar00rootroot00000000000000 CGILua: Building Web Scripts with Lua
CGILua
Building Web Scripts with Lua

Introduction

CGILua uses Lua as a server-side scripting language for creating dynamic Web pages. Both pure Lua Scripts and Lua Pages (LP) are supported by CGILua. A Lua Script is essentially a Lua program that creates the whole contents of a web page and returns it to the client. A Lua Page is a conventional markup text (HTML, XML etc) file that embeds Lua code using some special tags. Those tags are processed by CGILua and resulting page is returned to the client.

Lua Scripts and Lua Pages are equally easy to use, and choosing one of them basically depends on the characteristics of the resulting page. While Lua Pages are more convenient for the separation of logic and format, Lua Scripts are more adequate for creating pages that are simpler in terms of its structure, but require a more significative amount of internal processing.

Allowing these two methods to be intermixed, CGILua provides Web applications developers with great flexibility when both requirements are present. For a detailed description of both scripting methods and some examples of their use see Lua Scripts and Lua Pages.

Architecture

CGILua architecture is divided in two layers. The lower level is represented by the Server API (SAPI) and the higher level is represented by the CGILua API itself. SAPI is the interface between the web server and the CGILua API, so it needs to be implemented for each Web server and launching method used.

A launcher is responsible for the interaction of CGILua and the Web server, implementing SAPI for example using ISAPI on IIS or mod_lua on Apache. The reference implementation of CGILua launchers is Kepler.

The CGILua API is implemented using only SAPI and is totally portable over different launchers and their supporting Web servers. This way any Lua Script or Lua Page can be used by any launcher.

Request life cycle

CGILua processes requests using a CGI metaphor (even if the launcher is not based on CGI) and requests have a life cycle that can be customized by the programmer. The CGILua request life cycle consists in the following sequence of steps for each request:

  1. Add default handlers such as LuaScripts and Lua Pages and commom file formats.
  2. Execute the config.lua file, allowing the customization of the next steps.
  3. Build the cgilua.POST and cgilua.QUERY tables (processing POST and QUERY data).
  4. Change to user script directory.
  5. Execute the registered open functions.
  6. Execute the requested script with the correct environment.
  7. Execute the registered close functions.
  8. Change back to the original directory

Editing the config.lua file one can customize the CGILua behaviour. One typical use would be registering the open and close functions in order to change the request processing behavior. With this customization it is possible to implement new features like session management and private library directories as shown in section Configuration, or even to implement new abstractions over the whole CGILua way of live, like MVC-frameworks such as Orbit.

Installation

CGILua follows the package model for Lua 5.1, therefore it should be "installed" in your package.path.

You can also install CGILua using LuaRocks:

luarocks install cgilua

Configuration

The Kepler distribution of CGILua 5.1 offers a single configuration file, called config.lua. This file can be used to alter the default CGILua behaviour and is located in the Kepler configuration directory.

Some of the uses of config.lua customization are:

Script Handlers
A handler is responsible for the response of a request. You can add new CGILua handlers using cgilua.addscripthandler (see also cgilua.buildplainhandler and cgilua.buildprocesshandler for functions that build simple handlers).
POST Data Sizes
You can change the POST data size limits using cgilua.setmaxinput and cgilua.setmaxfilesize.
Opening and Closing Functions
You can add your functions to the life cycle of CGILua using cgilua.addopenfunction and cgilua.addclosefunction. These functions are executed just before and just after the script execution, even when an error occurs in the script processing.

In particular, the opening and closing functions are useful for different things. Some examples of the use of such functions in config.lua are shown next.

Previous versions of CGILua loaded a env.lua file from the script directory before processing it. To emulate this with CGILua 5.1 you can use something like:

cgilua.addopenfunction (function ()
	cgilua.doif ("env.lua")
end)

If every script needs to load a module (such as the sessions library), you can do:

require"cgilua.session"
cgilua.session.setsessiondir(CGILUA_TMP)
cgilua.addopenfunction (cgilua.session.open)
cgilua.addclosefunction (cgilua.session.close)

Note that the function cgilua.addopenfunction must be used to call cgilua.session.open because this function needs to change the cgi table (see section Receiving parameters for more information on this special table) which is not yet available during the execution of the config.lua file (see the Request life cycle).

When some scripts may use the library but others may not, you could define an "enabling" function (which should be called at the very beginning of each script that needs to use sessions):

require"cgilua.session"
cgilua.session.setsessiondir(CGILUA_TMP)
cgilua.enablesession = function ()
	cgilua.session.open ()
	cgilua.addclosefunction (cgilua.session.close)
end

Sometimes you need to configure a private libraries directory for each application hosted in the server. This configuration allows the function require to find packages installed in the private directory and in the system directory but not in other application's private directory. To implement this you could do:

local app_lib_dir = {
	["/virtual/path/"] = "/absolute/path/lib/",
}
local package = package
cgilua.addopenfunction (function ()
	local app = app_lib_dir[cgilua.script_vdir]
	if app then
		package.path = app..'/?.lua'..';'..package.path
	end
end)

Lua Scripts

Lua Scripts are text files containing valid Lua code. This style of usage adopts a more "raw" form of web programming, where a program is responsible for the entire generation of the resulting page. Lua Scripts have a default .lua extension.

To generate a valid web document (HTML, XML, WML, CSS etc) the Lua Script must follow the expected HTTP order to produce its output, first sending the correct headers and then sending the actual document contents.

CGILua offers some functions to ease these tasks, such as cgilua.htmlheader to produce the header for a HTML document and cgilua.put to send the document contents (or part of it).

For example, a HTML document which displays the sentence "Hello World!" can be generated with the following Lua Script:

cgilua.htmlheader()
cgilua.put([[
<html>
<head>
  <title>Hello World</title>
</head>
<body>
  <strong>Hello World!</strong>
</body>
</html>]])

It should be noted that the above example generates a "fixed" page: even though the page is generated at execution time there is no "variable" information. That means that the very same document could be generated directly with a simple static HTML file. However, Lua Scripts become especially useful when the document contains information which is not known beforehand or changes according to passed parameters, and it is necessary to generate a "dynamic" page.

Another easy example can be shown, this time using a Lua control structure, variables, and the concatenation operator:

cgilua.htmlheader()  

if cgilua.QUERY.language == 'english' then
  greeting = 'Hello World!'
elseif cgilua.QUERY.language == 'portuguese' then
  greeting = 'Olá Mundo!'
else
  greeting = '[unknown language]'
end

cgilua.put('<html>')  
cgilua.put('<head>')
cgilua.put('  <title>'..greeting..'</title>')
cgilua.put('</head>')
cgilua.put('<body>')
cgilua.put('  <strong>'..greeting..'</strong>')
cgilua.put('</body>')
cgilua.put('</html>')

In the above example the use of cgilua.QUERY.language indicates that language was passed to the Lua Script as a CGILua parameter, coming from the URL used to activate it (via GET). If you were using a form, the parameter would be available in cgilua.POST.language. CGILua automatically decodes such QUERY and POST parameters so you can use them at will on your Lua Scripts and Lua Pages.

Lua Pages

A Lua Page is a text template file which will be processed by CGILua before the HTTP server sends it to the client. CGILua does not process the text itself but look for some special markups that include Lua code into the file. After all those markups are processed and merged with the template file, the results are sent to the client.

Lua Pages have a default .lp extension. They are a simpler way to make a dynamic page because there is no need to send the HTTP headers. Usually Lua Pages are HTML pages so CGILua sends the HTML header automatically.

Since there are some restrictions on the uses of HTTP headers sometimes a Lua Script will have to be used instead of a Lua Page.

The fundamental Lua Page markups are:

<?lua chunk ?>
Processes and merges the Lua chunk execution results where the markup is located in the template. The alternative form <% chunk %> can also be used.
<?lua= expression ?>
Processes and merges the Lua expression evaluation where the markup is located in the template. The alternative form <%= expression %> can also be used.

Note that the ending mark could not appear inside a Lua chunk or Lua expression even inside quotes. The Lua Pages pre-processor just makes global substitutions on the template, searching for a matching pair of markups and generating the corresponding Lua code to achieve the same result as the equivalent Lua Script.

The second example on the previous section could be written using a Lua Page like:

<html>
<?lua
if cgilua.QUERY.language == 'english' then
  greeting = 'Hello World!'
elseif cgilua.QUERY.language == 'portuguese' then
  greeting = 'Olá Mundo!'
else
  greeting = '[unknown language]'
end
?>
<head>
  <title><%= greeting %></title>
</head>
<body>
  <strong><%= greeting %></strong>
</body>
</html>

HTML tags and Lua Page tags can be freely intermixed. However, as on other template languages, it's considered a best practice to not use explicit Lua logic on templates. The recommended aproach is to use only function calls that returns content chunks, so in this example, assuming that function getGreeting was definied in file functions.lua as follows:

function getGreeting()
  local greeting
  if cgilua.QUERY.language == 'english' then
    greeting = 'Hello World!'
  elseif cgilua.QUERY.language == 'portuguese' then
    greeting = 'Olá Mundo!'
  else
    greeting = '[unknown language]'
  end
  return greeting
end

the Lua Page could be rewriten as:

<?lua
assert (loadfile"functions.lua")()
?>
<html>
<head>
  <title><%= getGreeting() %></title>
</head>
<body>
  <strong><%= getGreeting() %></strong>
</body>
</html>

Another interesting feature of Lua Pages is the intermixing of Lua and HTML. It is very usual to have a list of values in a table, iterate over the list and show the items on the page.

A Lua Script could do that using a loop like:

cgilua.put("<ul>")
for i, item in ipairs(list) do
    cgilua.put("<li>"..item.."</li>")
end
cgilua.put("</ul>")

The equivalent loop in Lua Page would be:

<ul>
    <% for i, item in ipairs(list) do %>
    <li><%= item %></li>
    <% end %>
</ul>

Receiving parameters: the QUERY and POST tables

CGILua offers both types of request parameters (QUERY strings and POST data) in the cgilua.QUERY and cgilua.POST tables.

Usually all types of parameters will be available as strings. If the value of a parameter is a number, it will be converted to its string representation.

There are only two exceptions where the value will be a Lua table. The first case occurs on file uploads, where the corresponding table will have the following fields:

filename
the file name as given by the client.
filesize
the file size in bytes.
file
the temporary file handle. The file must be copied because CGILua will remove it after the script ends.

The other case that uses Lua tables occurs when there is more than one value associated with the same parameter name. This happens in the case of a selection list with multiple values; but it also occurs when the form (of the referrer) had two or more elements with the same name attribute (maybe because one was on a form and another was in the query string). All values will be inserted in an indexed table in the order in which they are handled.

Dispatching

If you want to use more sophisticated URLs, the Kepler distribution includes a dispatching script called app.lua that can be used to handle URLs in the format .../app.lua/app_name/path_info in a standard way. URLs in this format are said to refer to CGILua spplications, which consists in a standard loading sequence for web applications using CGILua and app.lua as their dispatcher:

  • there is an app_name as the start of path_info
  • there is an init.lua file in CGILUA_APPS/app_name
  • changes the current directory to CGILUA_APPS/app_name
  • sets cgilua.app_name to app_name
  • adds CGILUA_APPS/app_name/lua to the start of package.path
  • executes init.lua

CGILua applications usually need to dispatch their actions using the remaining path_info and for that they can use cgilua.dispatcher as a helper library. The example below uses it to dispatch URLs that follow a convention similar to Rails. Let's assume that this is a init.lua file in the CGILUA_APPS/blog directory:

require"cgilua.dispatcher"
return cgilua.dispatcher.route{"/$controller/$action/$ID", handle, "rails"}

In this example URLs like .../app.lua/blog/post/edit/2 would result in the function handle being called as

handle({controller="post", action="edit", ID="2"})

the handle function would then decide how to proceed depending on the parameters received and generate the corresponding response using CGILua functions or a template engine like Lua Pages or Cosmo.

Note that this example does not include error handling for invalid URLs or default values.

Authentication

CGILua offers a simple but useful authentication mechanism that can be shared by different CGILua applications or even applications developed in other platforms. The authentication mechanism is based on HTTP redirections and assumes three different participants.

The first one is the controller script, which is responsible for centralizing the user authentication control and deciding if the application should continue depending on a user being logged in or not. An example of such controller would be the app.lua dispatcher script distributed with Kepler. As most of the controllers would do, it checks for the presence of an authenticated user and redirects to the checking script when that fails:

-- checks for authenticated users
if not cgilua.authentication.username() then
    cgilua.redirect(cgilua.authentication.checkURL())
else
    -- continues with the application flow
end

If your application is not handled by a single script like one using app.lua then you would need to repeat this check in every script that requires authenticated users.

The second participant in the authentication mechanism is the checking script. This script should ask for user credentials, check them using the adequate method and redirect back to the original URL if the user was succesfully authenticated.

One simple example of such a checking script is the one found in /examples/check.lua in CGILua CVS, but usually a checking script implemented in CGILua would do the following:

-- Checking script example
-- Assumes that the login form will use two fields called username and pass

local username = cgilua.POST.username
local pass = cgilua.POST.pass
local logged, err, logoutURL

if cgilua.authentication then
    logged, err = cgilua.authentication.check(username, pass)
    username = cgilua.authentication.username() or ""
    logoutURL = cgilua.authentication.logoutURL()
else
    logged = false
    err = "No authentication configured!"
    username = ""
end

if logged and username then
    -- goes back to the application
	cgilua.redirect(cgilua.authentication.refURL())
else
    err = err or ""
    -- displays the login form which submits to this same script
	cgilua.htmlheader()
	cgilua.lp.include ("login.lp", {
        logged = logged, errorMsg = err, username = username,
        cgilua = cgilua, logoutURL = logoutURL})
end

The login form for this example can be fount at /examples/login.lp in CGILua CVS and consists of:

<% if logged then %>
<p>User <%= username %> logged in</p>
<a href="<%= logoutURL %>">Logout</a>
<% else %>
<p style="color:#ff0000"><%= errorMsg %> </p>
<form method="post" action="" >
    User name: <input name="username" maxlength="20" size="20" value="<%= username %>" ><br />
    Password: <input name="pass" type="password" maxlength="20" size="20"><br />
    <input type="submit" value="Login">
    <input type="reset" value="Reset">
</form>
<% end %>

Finally the third participant in the authentication process is the configuration file. This file is used to set the authentication method and other details. Each method has it's set of parameters and defines a check callback used by CGILua during the authentication process. See /examples/authentication_conf.lua for configuration examples using database, LDAP and Web server authentication methods.

Error Handling

There are three functions for error handling in CGILua:

The function cgilua.seterrorhandler defines the error handler, a function called by Lua when an error has just occurred. The error handler has access to the execution stack before the error is thrown so it can build an error message using stack information. Lua also provides a function to do that: debug.traceback.

The function cgilua.seterroroutput defines the function that decides what to do with the error message. It could be sent to the client's browser, written to a log file or sent to an e-mail address (with the help of LuaSocket or LuaLogging for example).

The function cgilua.errorlog is provided to write directly to the http server error log file.

An useful example of its use could be handling unexpected errors. Customizing unexpected error messages to the end user but giving all the information to the application's developers is the goal of the following piece of code:

local ip = cgilua.servervariable"REMOTE_ADDR"
local developers_machines = {
	["192.168.0.20"] = true,
	["192.168.0.27"] = true,
	["192.168.0.30"] = true,
}
local function mail (s)
	require"cgilua.serialize"
	require"socket.smtp"
	-- Build the message
	local msg = {}
	table.insert (msg, tostring(s))
	-- Tries to obtain the REFERER URL
	table.insert (msg, tostring (cgilua.servervariable"HTTP_REFERER"))
	table.insert (msg, cgilua.servervariable"SERVER_NAME"..
		cgilua.servervariable"SCRIPT_NAME")
	-- CGI parameters
	table.insert (msg, "CGI")
	cgilua.serialize(cgi, function (s) table.insert (msg, s) end)
	table.insert (msg, tostring (os.date()))
	table.insert (msg, tostring (ip))
	table.insert (msg, "Cookies:")
	table.insert (msg, tostring (cgilua.servervariable"HTTP_COOKIE" or "no cookies"))
	-- Formats message according to LuaSocket-2.0b3
	local source = socket.smtp.message {
		headers = { subject = "Script Error", },
		body = table.concat (msg, '\n'),
	}
	-- Sends the message
	local r, e = socket.smtp.send {
		from = "sender@my.domain.net",
		rcpt = "developers@my.domain.net",
		source = source,
	}
end
if developers_machines[ip] then
	-- Developer's error treatment: write to the display
	cgilua.seterroroutput (function (msg)
		cgilua.errorlog (msg)
		cgilua.errorlog (cgilua.servervariable"REMOTE_ADDR")
		cgilua.errorlog (os.date())
		cgilua.htmlheader ()
		msg = string.gsub (string.gsub (msg, "\n", "<br>\n"), "\t", "  ")
		cgilua.put (msg)
	end)
else
	-- User's error treatment: shows a standard page and sends an e-mail to
	-- the developer
	cgilua.seterroroutput (function (s)
		cgilua.htmlheader ()
		cgilua.put"<h1>An error occurred</h1>\n"
		cgilua.put"The responsible is being informed."
		mail (s)
	end)
end

The message is written to the browser if the request comes from one of the developer's machines. If it is not the case, a simple polite message is given to the user and a message is sent to the developer's e-mail account containing all possible information to help reproduce the situation.

Valid XHTML 1.0!

$Id: manual.html,v 1.27 2008/05/19 18:13:36 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/us/reference.html000066400000000000000000000521211211610345200244040ustar00rootroot00000000000000 CGILua: Building Web Scripts with Lua
CGILua
Building Web Scripts with Lua

Headers

Headers functions are used to change the HTTP response headers and consist of:

cgilua.contentheader (type, subtype)
Sends a Content-type header with the given values of type and sub-type.
Both arguments are strings: type is the header type; subtype is the header sub-type.
Returns nothing.
cgilua.header (header, value)
Sends a generic header. This function should not be used to generate a Content-type nor a Location header because some launchers/web-servers use different functions for this purpose.
Both arguments are strings: header is the name of the header; value is its value.
Returns nothing.
cgilua.htmlheader ()
Sends the header of an HTML file (Content-type: text/html).
Returns nothing.
cgilua.redirect (url, args)
Sends the header to force a redirection to the given URL adding the parameters in table args to the new URL.
The first argument (url) is the URL the browser should be redirected to; the second one (args) is an optional table which could have pairs name = value that will be encoded to form a valid URL (see function cgilua.urlcode.encodetable).
Returns nothing.

Content Generation

Content generation functions are used to output text to the response and to generate URLs in the CGILua format. They consist of:

cgilua.mkabsoluteurl (path)
Creates an absolute URL containing the given URL path.
Returns the resulting absolute URL.
cgilua.mkurlpath (script [, args])
Creates an URL path to be used as a link to a CGILua script using the optional table of arguments (args). The arguments are used in the URL as query string parameters.
Returns the resulting URL.
cgilua.print (...)
Sends the given arguments to the client. This function converts all its arguments to strings before sending them to the server thus it does not raises errors like cgilua.put.
Returns nothing.
cgilua.put (...)
Sends the given arguments to the client. This function should always be used; do not use Lua's print or io.write for output otherwise your script may not work for every launching method.
Returns nothing.

Lua Pages

Lua Pages functions are used to process Lua Pages templates and to define the behavior of this processing. They consist of:

cgilua.handlelp (filename[, env])
Equivalent to cgilua.lp.include but sends the HTML header before the pre-processed file.
Returns nothing.
cgilua.lp.compile (string)
Compile a piece of code given as a string into a Lua function. The string is translated with cgilua.lp.translate into another string which is transformed into a function with loadstring. The resulting function is cached internaly and reused if the same piece of code is given.
Returns a function.
cgilua.lp.include (filename[, env])
Pre-processes a Lua Page template (given by filename) and sends the results to the client. The file content is processed by cgilua.lp.compile and no headers are sent. If an optional environment table is passed, the file is executed with this environment instead of the global one. This can be used to sandbox your scripts.
Returns nothing.
cgilua.lp.setcompatmode (boolean)
Turns on or off the compatibility mode. Turning it on will make the Lua Pages preprocessor understand the expression fields and code fields structures used by previous versions of CGILua.
Default value: true
Returns nothing.
cgilua.lp.setoutfunc (funcname)
Defines the name of the output function for templates. The Lua Pages preprocessor will generate calls to the function with the given funcname (a string).
Returns nothing.
cgilua.lp.translate (string)
Uses the Lua Pages preprocessor to generate a string corresponding to the Lua code that executes the Lua chunks and/or expressions inside the given string.
Returns a string with the resulting Lua code.

CGILua Variables

CGILua Variables offers information about the script being processed and the CGI environment variables depending on the Web server and launcher used. They consist of both atributes and functions:

cgilua.script_file
The file name of the running script. Obtained from cgilua.script_path.
cgilua.script_path
The complete path of the running script. This variable is usually the same as the CGI environment variable PATH_TRANSLATED.
cgilua.script_pdir
The directory of the running script. Obtained from cgilua.script_path.
cgilua.script_vdir
The virtual directory of the running script. Obtained from cgilua.script_vpath.
cgilua.script_vpath
The complete virtual path of the running script. Equivalent to the CGI environment variable PATH_INFO.
cgilua.servervariable (varname)
Returns a string with the value of the CGI environment variable correspoding to varname. For a list of CGI variables please refer to SAPI.Request.servervariable
cgilua.tmp_path
The directory used by cgilua.tmpfile. Obtained by checking os.getenv("TEMP"), os.getenv ("TMP") and "/tmp" in that order.
cgilua.urlpath
The name of the script. Equivalent to the CGI environment variable SCRIPT_NAME.

Error Handling

CGILua error handling functions allow the redefinition of how errors are handled and presented to the user. The consist of:

cgilua.errorlog (string)
Sends the given string to the error log file.
Returns nothing.
cgilua.seterrorhandler (func)
Sets the error handler function to func. This function is called by Lua when an error occurs. It receives the error message generated by Lua and it is responsible for generating and returning the correct error message to be used by CGILua.
Returns nothing.
cgilua.seterroroutput (func)
Sets the error output function to func. This function is called by Lua to generate the error output itself.
Returns nothing.

CGILua behavior

The behavior of CGILua can be configured using this set of functions:

cgilua.addclosefunction (func)
Defines a function (func) to be called after the execution of the script requested.
Returns nothing.
cgilua.addopenfunction (func)
Defines a function (func) to be called before the execution of the script requested.
Returns nothing.
cgilua.addscripthandler (ext, func)
Defines a function (func) to pre-process files with a certain extension (ext). The default configuration uses cgilua.doscript to process Lua Scripts (.lua files) and cgilua.handlelp to process Lua Pages (.lp files).
Returns nothing.
cgilua.buildplainhandler (type, subtype)
Creates a script handler that sends the given header and the plain file requested. The Content-type header is formed by the two arguments; the created function will receive a filename as its only argument and will return the given filename untouched.
Returns a function.
cgilua.buildprocesshandler (type, subtype)
Creates a script handler that sends the given header and the processed file requested. The Content-type header is formed by the two arguments; the created function will receive a filename as its only argument and will return the given filename pre-processed by the function cgilua.lp.include.
Returns a function.
cgilua.setmaxfilesize (size)
Sets the maximum size (in bytes) for each uploaded file. This value is bounded by the maximum total input size (see cgilua.setmaxinput). This function only takes effect if used before POST data is processed, therefore its use in scripts are meaningless.
Returns nothing.
cgilua.setmaxinput (size)
Sets the maximum total input size allowed (in bytes). This function only takes efect if used before POST data is processed, therefore its use in scripts are meaningless.
Returns nothing.

URL encoding functions

CGILua enconding functions allow the processing of URL strings in a simple way:

cgilua.urlcode.encodetable (table)
URL-encode the elements of a table creating a string to be used as a URL for passing data/parameters to another script.
Returns a string representing the encoded argument table.
cgilua.urlcode.escape (string)
URL-encode a string.
Returns the encoded string.
cgilua.urlcode.insertfield (args, name, value)
Adds the given value to the field indexed by name in the args table. If the field already has a value, it is transformed into a table with this value at index 1 and the new value at index 2. Other values will be added at the end of the array-part of the created table.
Returns nothing.
cgilua.urlcode.parsequery (query, args)
Parse URL-encoded request data. This could be the query part of the script URL or URL-encoded POST data. Each decoded name = value pair is inserted into the args table.
Returns nothing.
cgilua.urlcode.unescape (string)
URL-decodes a string.
Returns the decoded string.

Auxiliar functions

cgilua.doif (filepath)
Executes a file (given by filepath) if it exists. Returns the values returned by the execution, or nil followed by an error message if the file does not exists.
cgilua.doscript (filepath)
Executes a file (given by filepath). Raises an error if it occurs. In case of success, returns the values returned by the execution.
cgilua.pack (...)
Returns a new table with all the passed arguments stored in it.
cgilua.splitfirst (path)
Returns two strings with the "first directory" and the "remaining paht" of the given path string splitted on the first separator ("/" or "\").
cgilua.splitonlast (path)
Returns two strings with the "directory path" and "file" parts of the given path string splitted on the last separator ("/" or "\"). This function used to be called cgilua.splitpath and still can be accessed by this name for compatibility reasons. cgilua.splitpath may be deprecated in future versions.
cgilua.tmpfile (dir[, namefunction])
Returns a temporary file in the cgilua.tmp_path directory using an optional name generator. If the name generator function is not passed, cgilua.tmpname is used. The file is removed by CGILua after the request has been processed.
cgilua.tmpname ()
Returns a temporary name using an adjusted version of os.tmpname.

Alphabetic Index

addclosefunction
addopenfunction
addscripthandler
buildplainhandler
buildprocesshandler
contentheader
doif
doscript
encodetable (urlcode)
errorlog
escape (urlcode)
header
htmlheader
include (lp)
insertfield (urlcode)
mkabsoluteurl
mkurlpath
pack
parsequery (urlcode)
handlelp
lp
print
put
redirect
script_file
script_path
script_pdir
script_vdir
script_vpath
servervariable
setcompatmode (lp)
seterrorhandler
seterroroutput
setlibdir
setmaxfilesize
setmaxinput
setoutfunc (lp)
splitonfirst
splitonlast
tmpfile
tmpname
tmp_path
urlcode
unescape (urlcode)
urlpath

Valid XHTML 1.0!

$Id: reference.html,v 1.46 2007/12/05 19:41:13 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/doc/us/sapi.html000066400000000000000000000243031211610345200234030ustar00rootroot00000000000000 CGILua: Building Web Scripts with Lua
CGILua
Building Web Scripts with Lua

Server API

The Server API (SAPI) allows the abstraction of a series of internal web server details and allows CGILua to be used over WSAPI. Kepler is the reference implementation of WSAPI and currently supports Apache, Microsoft IIS and Xavante as Web servers, and CGI, FastCGI, as WSAPI connectors. Xavante has a native WSAPI connector.

The SAPI API is separated into two packages: SAPI.Request and SAPI.Response.

The SAPI.Request package offers two functions:

SAPI.Request.getpostdata ([n])
Gets a block of POST data. The optional parameter n is the number of bytes to read (a default block size is used if no parameter is passed).
Returns the block as a Lua string.
SAPI.Request.servervariable (varname)
Gets the value of a server environment variable. The argument can be one of the defined CGI Variables, although not all servers implements the full set of variables. The set consists of:
  • AUTH_TYPE - If the server supports user authentication, and the script is protected, this is the protocol-specific authentication method used to validate the user.
  • CONTENT_LENGTH - The length of the content itself as given by the client.
  • CONTENT_TYPE - For queries which have attached information, such as HTTP POST and PUT, this is the content type of the data.
  • GATEWAY_INTERFACE - The revision of the CGI specification to which this server complies. Format: CGI/revision
  • PATH_INFO - The extra path information, as given by the client. In other words, scripts can be accessed by their virtual pathname, followed by extra information at the end of this path. The extra information is sent as PATH_INFO. This information should be decoded by the server if it comes from a URL before it is passed to the CGI script.
  • PATH_TRANSLATED - The server provides a translated version of PATH_INFO, which takes the path and does any virtual-to-physical mapping to it.
  • QUERY_STRING - The information which follows the "?" in the URL which referenced this script. This is the query information. It should not be decoded in any fashion. This variable should always be set when there is query information, regardless of command line decoding.
  • REMOTE_ADDR - The IP address of the remote host making the request.
  • REMOTE_HOST - The hostname making the request. If the server does not have this information, it should set REMOTE_ADDR and leave this unset.
  • REMOTE_IDENT - If the HTTP server supports RFC 931 identification, then this variable will be set to the remote user name retrieved from the server. Usage of this variable should be limited to logging only.
  • REMOTE_USER - If the server supports user authentication, and the script is protected, this is the username they have authenticated as.
  • REQUEST_METHOD - The method with which the request was made. For HTTP, this is "GET", "HEAD", "POST", etc.
  • SCRIPT_NAME - A virtual path to the script being executed, used for self-referencing URLs.
  • SERVER_NAME - The server's hostname, DNS alias, or IP address as it would appear in self-referencing URLs.
  • SERVER_PORT - The port number to which the request was sent.
  • SERVER_PROTOCOL - The name and revision of the information protcol this request came in with. Format: protocol/revision
  • SERVER_SOFTWARE - The name and version of the web server software answering the request (and running the gateway). Format: name/version
In addition to these, the header lines received from the client, if any, are placed into the environment with the prefix HTTP_ followed by the header name. Any - characters in the header name are changed to _ characters. The server may exclude any headers which it has already processed, such as Authorization, Content-type, and Content-length. If necessary, the server may choose to exclude any or all of these headers if including them would exceed any system environment limits.
Returns a string.

And the SAPI.Response package offers five functions:

SAPI.Response.contenttype (header)
Sends the Content-type header to the client. The given header should be in the form "type/subtype". This function must be called before any output is sent using SAPI.Response.write.
Returns nothing.
SAPI.Response.errorlog (message)
Generates error output using the given string or number.
Returns nothing.
SAPI.Response.header (header, value)
Sends a generic header to the client. The first argument must be the header name, such as "Set-Cookie". The second argument should be its value. This function should not be used to replace the SAPI.Response.contenttype nor the SAPI.Response.redirect functions.
Returns nothing.
SAPI.Response.redirect (url)
Sends the Location header to the client. The given url should be a string.
Returns nothing.
SAPI.Response.write (...)
Generates output using the given arguments. The arguments must be strings or numbers.
Returns nothing.

Valid XHTML 1.0!

$Id: sapi.html,v 1.33 2009/02/06 00:56:06 carregal Exp $

genometools-1.5.1/src/external/cgilua-5.1.3/examples/000077500000000000000000000000001211610345200222015ustar00rootroot00000000000000genometools-1.5.1/src/external/cgilua-5.1.3/examples/authentication_conf.lua000066400000000000000000000066551211610345200267440ustar00rootroot00000000000000---------------------------- -- Authentication configuration file -- -- Defines the method and details of the authentication mechanism -- -- $Id: authentication_conf.lua,v 1.1 2007/12/05 18:40:17 carregal Exp $ ---------------------------- require"cgilua.authentication" local options = { -- Authentication method: "simpledatabase", "webserver", "ldap", "test" method = "test", -- How Authentication is stored on the client -- This directive can be "cookie" or "url" tokenPersistence="url", -- Name used for the token persitence tokenName = "userhash", -- The criptografic key to encode user information on cookies and URLs criptKey="sfdtdyedbbg", -- Where to redirect when authentication is needed -- checkURL="https://remotehost/sso/authenticate", -- absolute URL checkURL="check.lua", -- authentication controller used by app.lua } -- -- Simple database authentication parameters -- options.simpledatabase = { driver="mysql", -- "mysql","oracle","odbc" sourcename="users", dbusername="root", dbpassword="pass", passwd_hash_function=(require"md5") and md5.sumhexa, -- for MD5 encription -- passwd_hash_function = function(arg) return arg end , -- for no encription users_table="Users", user_name_field="Name", pass_field="Password", } -- -- Web Server authentication parameters -- options.webserver = { user_env_var="REMOTE_USER", -- if supports RFC 931 use "REMOTE_IDENT" } -- -- LDAP authentication parameters -- options.ldap = { host="127.0.0.1", -- accepts host:port usetls=false, --baseDN="ou=People,dc=example,dc=com", baseDN="dc=example,dc=com", RDNatributeName="cn", } local methods = { simpledatabase = {}, webserver = {}, ldap = {}, test = {}, } -- -- Simple database authentication method -- methods.simpledatabase.check = function(username,userpasswd) local simpledatabase = options.simpledatabase require ("luasql."..simpledatabase.driver) local query = "SELECT "..simpledatabase.pass_field.." FROM "..simpledatabase.users_table.." WHERE "..simpledatabase.user_name_field.." = '"..username.."'" local conn,err = luasql[simpledatabase.driver]:connect(simpledatabase.sourcename,simpledatabase.dbusername,simpledatabase.dbpassword) if conn == nil then return false, err end local cur=conn:execute(query) local row=cur:fetch() local retpasswd=row[simpledatabase.pass_field] local passwdhash=simpledatabase.passwd_hash_function(userpasswd) if retpasswd==passwdhash then return true end return false, "Username and password do not match." end -- -- Web Server authentication method -- methods.webserver.user = function () return cgilua.servervariable (options.webserver.user_env_var) end -- -- LDAP authentication method -- methods.ldap.check = function(username,userpasswd) require"lualdap" local ld,err = options.lualdap.open_simple (options.ldap.host, options.ldap.RDNatributeName.."="..username..","..options.ldap.baseDN, userpasswd, options.ldap.usetls) if ld~=nil then return true else return false, err end end -- -- Test authentication method -- methods.test.check = function(username,userpasswd) if (username == "admin") and (userpasswd == "admin") then return true else return false, "Wrong user/password combination!" end end cgilua.authentication.configure(options, methods)genometools-1.5.1/src/external/cgilua-5.1.3/examples/check.lua000066400000000000000000000013711211610345200237630ustar00rootroot00000000000000-- Checking script example -- Assumes that the login form will use two fields called username and pass local username = cgilua.POST.username local pass = cgilua.POST.pass local logged, err, logoutURL if cgilua.authentication then logged, err = cgilua.authentication.check(username, pass) username = cgilua.authentication.username() or "" logoutURL = cgilua.authentication.logoutURL() else logged = false err = "No authentication configured!" username = "" end if logged and username then cgilua.redirect(cgilua.authentication.refURL()) else err = err or "" cgilua.htmlheader() cgilua.lp.include ("login.lp", { logged = logged, errorMsg = err, username = username, cgilua = cgilua, logoutURL = logoutURL}) end genometools-1.5.1/src/external/cgilua-5.1.3/examples/login.lp000066400000000000000000000011011211610345200236370ustar00rootroot00000000000000 Login <% if logged then %>

User <%= username %> logged in

Logout <% else %>

<%= errorMsg %>

User name:
Password:
<% end %> genometools-1.5.1/src/external/cgilua-5.1.3/rockspec/000077500000000000000000000000001211610345200221745ustar00rootroot00000000000000genometools-1.5.1/src/external/cgilua-5.1.3/rockspec/cgilua-5.1.2-1.rockspec000066400000000000000000000015451211610345200257770ustar00rootroot00000000000000package = "CGILua" version = "5.1.2-1" source = { url = "http://luaforge.net/frs/download.php/3398/cgilua-5.1.2.tar.gz" } description = { summary = "Tool for creating dynamic Web pages and manipulating data from Web forms", detailed = [[ CGILua allows the separation of logic and data handling from the generation of pages, making it easy to develop web applications with Lua. CGILua can be used with a variety of Web servers and, for each server, with different launchers. A launcher is responsible for the interaction of CGILua and the Web server, for example using ISAPI on IIS or mod_lua on Apache. ]] } dependencies = { "lua >= 5.1", "luafilesystem >= 1.4.1", } build = { type = "make", build_pass = false, install_target = "install", install_variables = { LUA_DIR = "$(LUADIR)" } } genometools-1.5.1/src/external/cgilua-5.1.3/rockspec/cgilua-5.1.2-2.rockspec000066400000000000000000000015451211610345200260000ustar00rootroot00000000000000package = "CGILua" version = "5.1.2-2" source = { url = "http://luaforge.net/frs/download.php/3398/cgilua-5.1.2.tar.gz" } description = { summary = "Tool for creating dynamic Web pages and manipulating data from Web forms", detailed = [[ CGILua allows the separation of logic and data handling from the generation of pages, making it easy to develop web applications with Lua. CGILua can be used with a variety of Web servers and, for each server, with different launchers. A launcher is responsible for the interaction of CGILua and the Web server, for example using ISAPI on IIS or mod_lua on Apache. ]] } dependencies = { "lua >= 5.1", "luafilesystem >= 1.4.1", } build = { type = "make", build_pass = false, install_target = "install", install_variables = { LUA_DIR = "$(LUADIR)" } } genometools-1.5.1/src/external/cgilua-5.1.3/rockspec/cgilua-5.1.2rc1-1.rockspec000066400000000000000000000015341211610345200264030ustar00rootroot00000000000000package = "CGILua" version = "5.1.2rc1-1" description = { summary = "Tool for creating dynamic Web pages and manipulating data from Web forms", detailed = [[ CGILua allows the separation of logic and data handling from the generation of pages, making it easy to develop web applications with Lua. CGILua can be used with a variety of Web servers and, for each server, with different launchers. A launcher is responsible for the interaction of CGILua and the Web server, for example using ISAPI on IIS or mod_lua on Apache. ]] } dependencies = { "lua >= 5.1", "luafilesystem 1.4.1rc1", } source = { url = "http://cgilua.luaforge.net/cgilua-5.1.2rc1.tar.gz" } build = { type = "make", build_pass = false, install_target = "install", install_variables = { LUA_DIR = "$(LUADIR)" } } genometools-1.5.1/src/external/cgilua-5.1.3/rockspec/cgilua-5.1.3-1.rockspec000066400000000000000000000025231211610345200257750ustar00rootroot00000000000000package = "CGILua" version = "5.1.3-1" source = { url = "http://luaforge.net/frs/download.php/3398/cgilua-5.1.3.tar.gz" } description = { summary = "Tool for creating dynamic Web pages and manipulating data from Web forms", detailed = [[ CGILua allows the separation of logic and data handling from the generation of pages, making it easy to develop web applications with Lua. CGILua can be used with a variety of Web servers and, for each server, with different launchers. A launcher is responsible for the interaction of CGILua and the Web server, for example using ISAPI on IIS or mod_lua on Apache. ]] } dependencies = { "lua >= 5.1", "luafilesystem >= 1.4.1", } local CGILUA_LUAS = { "src/cgilua/authentication.lua", "src/cgilua/cookies.lua", "src/cgilua/dispatcher.lua", "src/cgilua/loader.lua", "src/cgilua/lp.lua", "src/cgilua/mime.lua", "src/cgilua/post.lua", "src/cgilua/readuntil.lua", "src/cgilua/serialize.lua", "src/cgilua/session.lua", "src/cgilua/urlcode.lua" } build = { type = "module", modules = { cgilua = "src/cgilua/cgilua.lua" } } for i = 1, #CGILUA_LUAS do local file = CGILUA_LUAS[i] local mod = "cgilua." .. file:match("^src/cgilua/([^%.]+)%.lua$") build.modules[mod] = file end genometools-1.5.1/src/external/cgilua-5.1.3/rockspec/cgilua-cvs-2.rockspec000066400000000000000000000015451211610345200261300ustar00rootroot00000000000000package = "CGILua" version = "cvs-2" source = { url = "cvs://:pserver:anonymous:@cvs.luaforge.net:/cvsroot/cgilua", cvs_tag = "HEAD", } description = { summary = "Tool for creating dynamic Web pages and manipulating data from Web forms", detailed = [[ CGILua allows the separation of logic and data handling from the generation of pages, making it easy to develop web applications with Lua. CGILua can be used with a variety of Web servers and, for each server, with different launchers. A launcher is responsible for the interaction of CGILua and the Web server, for example using ISAPI on IIS or mod_lua on Apache. ]] } dependencies = { "lua >= 5.1", "luafilesystem > 1.0", "luasocket >= 2.0" } build = { type = "make", build_pass = false, install_variables = { LUA_DIR = "$(LUADIR)" } } genometools-1.5.1/src/external/cgilua-5.1.3/rockspec/cgilua-cvs-3.rockspec000066400000000000000000000016021211610345200261230ustar00rootroot00000000000000package = "CGILua" version = "cvs-3" description = { summary = "Tool for creating dynamic Web pages and manipulating data from Web forms", detailed = [[ CGILua allows the separation of logic and data handling from the generation of pages, making it easy to develop web applications with Lua. CGILua can be used with a variety of Web servers and, for each server, with different launchers. A launcher is responsible for the interaction of CGILua and the Web server, for example using ISAPI on IIS or mod_lua on Apache. ]] } dependencies = { "lua >= 5.1", "luafilesystem cvs", } source = { url = "cvs://:pserver:anonymous@cvs.luaforge.net:/cvsroot/cgilua", cvs_tag = "HEAD", dir = "cgilua" } build = { type = "make", build_pass = false, install_target = "install", install_variables = { LUA_DIR = "$(LUADIR)" } } genometools-1.5.1/src/external/cgilua-5.1.3/rockspec/cgilua-cvs-4.rockspec000066400000000000000000000025601211610345200261300ustar00rootroot00000000000000package = "CGILua" version = "cvs-4" description = { summary = "Tool for creating dynamic Web pages and manipulating data from Web forms", detailed = [[ CGILua allows the separation of logic and data handling from the generation of pages, making it easy to develop web applications with Lua. CGILua can be used with a variety of Web servers and, for each server, with different launchers. A launcher is responsible for the interaction of CGILua and the Web server, for example using ISAPI on IIS or mod_lua on Apache. ]] } dependencies = { "lua >= 5.1", "luafilesystem cvs", } source = { url = "cvs://:pserver:anonymous@cvs.luaforge.net:/cvsroot/cgilua", cvs_tag = "HEAD", dir = "cgilua" } local CGILUA_LUAS = { "src/cgilua/authentication.lua", "src/cgilua/cookies.lua", "src/cgilua/dispatcher.lua", "src/cgilua/loader.lua", "src/cgilua/lp.lua", "src/cgilua/mime.lua", "src/cgilua/post.lua", "src/cgilua/readuntil.lua", "src/cgilua/serialize.lua", "src/cgilua/session.lua", "src/cgilua/urlcode.lua" } build = { type = "module", modules = { cgilua = "src/cgilua/cgilua.lua" } } for i = 1, #CGILUA_LUAS do local file = CGILUA_LUAS[i] local mod = "cgilua." .. file:match("^src/cgilua/([^%.]+)%.lua$") build.modules[mod] = file end genometools-1.5.1/src/external/cgilua-5.1.3/src/000077500000000000000000000000001211610345200211525ustar00rootroot00000000000000genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/000077500000000000000000000000001211610345200224165ustar00rootroot00000000000000genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/authentication.lua000066400000000000000000000163361211610345200261510ustar00rootroot00000000000000-- CGILua authentication Module -- Author: Leonardo Godinho -- -- Offers a basic API for authentication assuming the presence of -- cgilua.POST.user, cgilua.POST.pass, cgilua.QUERY.logout, cgilua.QUERY[tokenName] -- -- The API consists in the functions -- check(username, passwd) - Checks if the pair username/passwd is authenticated by the configured method -- checkURL() - returns the URL for the checking script -- configure(options, methods) - configures the authentication framework (see /examples/authentication_conf.lua) -- logoutURL() - returns the URL for the logout page -- refURL() - returns the original URL being checked for authentication -- username() - returns the authenticated user if existent -- -- The authenticated user can be persisted by using a cookie or an ID in the URL -- -- $Id: authentication.lua,v 1.2 2007/12/05 19:41:13 carregal Exp $ local mime=require"mime" -- from LuaSocket local md5=require"md5" require"cgilua.cookies" local cgilua = cgilua local string = string local math = math local error = error module"cgilua.authentication" local authenticatedUser local configuration local _check -- check function provided by the configuration -- Callback functions to manipulate Tokens in the URL -- if not defined, CGILua standard URLs are assumed -- Returns the current token function getToken() return cgilua.QUERY[configuration.tokenName] end -- Sets the current token function setToken(token) cgilua.QUERY[configuration.tokenName] = token end -- Returns the current URL function currentURL() local script_name = cgilua.servervariable"SCRIPT_NAME" local path_info = cgilua.servervariable"PATH_INFO" or "" local query_string = cgilua.servervariable"QUERY_STRING" or "" if query_string ~= "" then query_string = "?"..query_string end return cgilua.mkabsoluteurl(script_name..path_info..query_string) end -- URL Base64 encoder and decoder functions -- (http://en.wikipedia.org/wiki/Base64) -- -- '=' is replaced by '' -- '+' and '/' are respectively replaced by '*' and '-' function encodeURLbase64(str) local b64str = mime.b64(str) local urlb64str = string.gsub(b64str,"=","") urlb64str = string.gsub(urlb64str,"+","*") urlb64str = string.gsub(urlb64str,"/","-") urlb64str = string.gsub(urlb64str," ","_") return urlb64str end function decodeURLbase64(urlb64str) local b64str = string.gsub(urlb64str,"*","+") b64str = string.gsub(b64str,"-","/") b64str = string.gsub(b64str,"_"," ") local b64strPadLen = math.fmod(4 - math.fmod(string.len(b64str), 4), 4) b64str = b64str..string.rep("=", b64strPadLen) local str = mime.unb64(b64str) return str end -- Returns the authenticated username or nil if no user is authenticated function username() if authenticatedUser == nil then local authenticatedUserData local token if configuration.tokenPersistence == "url" then token = getToken() elseif configuration.tokenPersistence == "cookie" then token = cgilua.cookies.get(configuration.tokenName) end if token then authenticatedUserData = md5.decrypt(decodeURLbase64(token), configuration.criptKey) -- check if IP in crypted data match with client IP local authenticatedUserIP = authenticatedUserData and string.gsub(authenticatedUserData, ",.*$","") or nil if authenticatedUserIP ~= cgilua.servervariable("REMOTE_ADDR") then return nil end authenticatedUser=authenticatedUserData and string.gsub(authenticatedUserData, "^.*,", "") or nil end end return authenticatedUser end -- encrypt the user IP and username for the user hash token local function cryptUserData() if authenticatedUser then local userData = cgilua.servervariable("REMOTE_ADDR") ..",".. authenticatedUser local cryptedUserData = encodeURLbase64(md5.crypt(userData, configuration.criptKey)) return cryptedUserData end end -- defines the logged user name and sets the user hash token local function setUser(username) authenticatedUser = username if username then local cryptedUserData = cryptUserData() if configuration.tokenPersistence == "url" then setToken(cryptedUserData) cgilua.cookies.delete(configuration.tokenName) -- removes an eventual previous cookie token elseif configuration.tokenPersistence == "cookie" then cgilua.cookies.set(configuration.tokenName, cryptedUserData) setToken() -- remove an eventual previous token from the URLs end end end -- User logout, clear everything function logout() setUser() cgilua.cookies.delete(configuration.tokenName) setToken() cgilua.QUERY.logout = nil end -- Checks if a user name/password is authenticated by the configured method -- if the user is authenticaded then login the user else logout the user -- returns true if the user has been succesfully authenticated or false plus -- an error message when the authentication fails function check(name, pass) name = name or cgilua.POST.user pass = pass or cgilua.POST.pass if name then -- Tries to authenticate the user using the configured method local retauth,errauth = _check(name, pass) if retauth then setUser(name) return true else logout() return false, errauth end else local authuser = username() if authuser then if cgilua.QUERY.logout ~= nil then logout() return false end end return authuser end end -- Returns a authentication URL with ref URL as a parameter, -- accepts an optional value for the logout action function checkURL(ref, tologout) local token if configuration.tokenPersistence == "url" then token = getToken() elseif configuration.tokenPersistence == "cookie" then token = cgilua.cookies.get(configuration.tokenName) end -- As HTTP header referer information can violate privacy, -- some browsers allow the user to disable the sending of referer information. -- Some proxy and firewall software will also filter out referer information, -- to avoid leaking the location of non-public websites. -- So we send the current URL as an URL parameter to the login URL. setToken() local args = {ref = ref or currentURL(), logout = tologout} if string.find(configuration.checkURL, "^https?:") then local params = "?"..urlcode.encodetable(args) return configuration.checkURL..params end return cgilua.mkabsoluteurl(cgilua.mkurlpath(configuration.checkURL, args)) end -- Returns the logout URL, based on the login URL function logoutURL() return checkURL(nil, 1) end -- Returns the referenced URL, the one supposed to be offered only for authenticated users function refURL() local url local baseURL = cgilua.QUERY.ref or configuration.checkURL if string.find(baseURL, "\?") then url = string.gsub(baseURL, "\?", "?"..configuration.tokenName.."="..cryptUserData().."&") else url = baseURL.."?"..configuration.tokenName.."="..cryptUserData() end return url end -- Sets the current configuration function configure(options, methods) configuration = options local method = methods[options.method] or {} if method.check then _check = method.check end if method.username then username = method.username end endgenometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/cgilua.lua000066400000000000000000000517421211610345200243760ustar00rootroot00000000000000---------------------------------------------------------------------------- -- CGILua library. -- -- @release $Id: cgilua.lua,v 1.84 2009/03/09 22:03:24 carregal Exp $ ---------------------------------------------------------------------------- local _G, SAPI = _G, SAPI local urlcode = require"cgilua.urlcode" local lp = require"cgilua.lp" local lfs = require"lfs" local debug = require"debug" local assert, error, ipairs, select, tostring, type, unpack, xpcall = assert, error, ipairs, select, tostring, type, unpack, xpcall local pairs = pairs local gsub, format, strfind, strlower, strsub, match = string.gsub, string.format, string.find, string.lower, string.sub, string.match local setmetatable = setmetatable local _open = io.open local tinsert, tremove, concat = table.insert, table.remove, table.concat local foreachi = table.foreachi local date = os.date local os_tmpname = os.tmpname local getenv = os.getenv local remove = os.remove local seeall = package.seeall local setfenv = setfenv lp.setoutfunc ("cgilua.put") lp.setcompatmode (true) module ("cgilua") _COPYRIGHT = "Copyright (C) 2003 Kepler Project" _DESCRIPTION = "CGILua is a tool for creating dynamic Web pages and manipulating input data from forms" _VERSION = "CGILua 5.1.3" -- -- Internal state variables. local _default_errorhandler = debug.traceback local _errorhandler = _default_errorhandler local _default_erroroutput = function (msg) if type(msg) ~= "string" and type(msg) ~= "number" then msg = format ("bad argument #1 to 'error' (string expected, got %s)", type(msg)) end -- Logging error SAPI.Response.errorlog (msg) SAPI.Response.errorlog (" ") SAPI.Response.errorlog (SAPI.Request.servervariable"REMOTE_ADDR") SAPI.Response.errorlog (" ") SAPI.Response.errorlog (date()) SAPI.Response.errorlog ("\n") -- Building user message msg = gsub (gsub (msg, "\n", "
\n"), "\t", "  ") SAPI.Response.contenttype ("text/html") SAPI.Response.write ("CGILua Error" .. msg .. "") end local _erroroutput = _default_erroroutput local _default_maxfilesize = 512 * 1024 local _maxfilesize = _default_maxfilesize local _default_maxinput = 1024 * 1024 local _maxinput = _default_maxinput script_path = false -- -- Header functions ---------------------------------------------------------------------------- -- Sends a header. -- @param header String with the header. -- @param value String with the corresponding value. ---------------------------------------------------------------------------- function header(...) return SAPI.Response.header(...) end ---------------------------------------------------------------------------- -- Sends a Content-type header. -- @param type String with the type of the header. -- @param subtype String with the subtype of the header. ---------------------------------------------------------------------------- function contentheader (type, subtype) SAPI.Response.contenttype (type..'/'..subtype) end ---------------------------------------------------------------------------- -- Sends the HTTP header "text/html". ---------------------------------------------------------------------------- function htmlheader() SAPI.Response.contenttype ("text/html") end local htmlheader = htmlheader ---------------------------------------------------------------------------- -- Sends an HTTP header redirecting the browser to another URL -- @param url String with the URL. -- @param args Table with the arguments (optional). ---------------------------------------------------------------------------- function redirect (url, args) if strfind(url,"^https?:") then local params="" if args then params = "?"..urlcode.encodetable(args) end return SAPI.Response.redirect(url..params) else return SAPI.Response.redirect(mkabsoluteurl(mkurlpath(url,args))) end end ---------------------------------------------------------------------------- -- Returns a server variable -- @param name String with the name of the server variable. -- @return String with the value of the server variable. ---------------------------------------------------------------------------- function servervariable(...) return SAPI.Request.servervariable(...) end ---------------------------------------------------------------------------- -- Primitive error output function -- @param msg String (or number) with the message. -- @param level String with the error level (optional). ---------------------------------------------------------------------------- function errorlog (msg, level) local t = type(msg) if t == "string" or t == "number" then SAPI.Response.errorlog (msg, level) else error ("bad argument #1 to `cgilua.errorlog' (string expected, got "..t..")", 2) end end ---------------------------------------------------------------------------- -- Converts all its arguments to strings before sending them to the server. ---------------------------------------------------------------------------- function print (...) local args = { ... } for i = 1, select("#",...) do args[i] = tostring(args[i]) end SAPI.Response.write (concat(args,"\t")) SAPI.Response.write ("\n") end ---------------------------------------------------------------------------- -- Function 'put' sends its arguments (basically strings of HTML text) -- to the server -- Its basic implementation is to use Lua function 'write', which writes -- each of its arguments (strings or numbers) to file _OUTPUT (a file -- handle initialized with the file descriptor for stdout) -- @param s String (or number) with output. ---------------------------------------------------------------------------- function put (...) return SAPI.Response.write(...) end -- Returns the current errorhandler function _geterrorhandler(msg) return _errorhandler(msg) end -- -- Executes a function using the CGILua error handler. -- @param f Function to be called. -- function pcall (f) local results = {xpcall (f, _geterrorhandler)} local ok = results[1] tremove(results, 1) if ok then if #results == 0 then results = { true } end return unpack(results) else _erroroutput (unpack(results)) end end local function buildscriptenv() local env = { print = _M.print, write = _M.put } setmetatable(env, { __index = _G, __newindex = _G }) return env end ---------------------------------------------------------------------------- -- Execute a script -- If an error is found, Lua's error handler is called and this function -- does not return -- @param filename String with the name of the file to be processed. -- @return The result of the execution of the file. ---------------------------------------------------------------------------- function doscript (filename) local f, err = _G.loadfile(filename) if not f then error (format ("Cannot execute `%s'. Exiting.\n%s", filename, err)) else local env = buildscriptenv() setfenv(f, env) return pcall(f) end end ---------------------------------------------------------------------------- -- Execute the file if there is no "file error". -- If an error is found, and it is not a "file error", Lua 'error' -- is called and this function does not return -- @param filename String with the name of the file to be processed. -- @return The result of the execution of the file or nil (in case the -- file does not exists or if it cannot be opened). -- @return It could return an error message if the file cannot be opened. ---------------------------------------------------------------------------- function doif (filename) if not filename then return end -- no file local f, err = _open(filename) if not f then return nil, err end -- no file (or unreadable file) f:close() return doscript (filename) end --------------------------------------------------------------------------- -- Set the maximum "total" input size allowed (in bytes) -- @param nbytes Number of the maximum size (in bytes) of the whole POST data. --------------------------------------------------------------------------- function setmaxinput(nbytes) _maxinput = nbytes end --------------------------------------------------------------------------- -- Set the maximum size for an "uploaded" file (in bytes) -- Might be less or equal than _maxinput. -- @param nbytes Number of the maximum size (in bytes) of a file. --------------------------------------------------------------------------- function setmaxfilesize(nbytes) _maxfilesize = nbytes end -- Default path for temporary files tmp_path = _G.CGILUA_TMP or getenv("TEMP") or getenv ("TMP") or "/tmp" -- Default function for temporary names -- @returns a temporay name using os.tmpname tmpname = function() local tempname = os_tmpname() -- Lua os.tmpname returns a full path in Unix, but not in Windows -- so we strip the eventual prefix tempname = gsub(tempname, "(/tmp/)", "") return tempname end local _tmpfiles = {} --------------------------------------------------------------------------- -- Returns a temporary file in a directory using a name generator -- @param dir Base directory for the temporary file -- @param namefunction Name generator function --------------------------------------------------------------------------- function tmpfile(dir, namefunction) dir = dir or tmp_path namefunction = namefunction or tmpname local tempname = namefunction() local filename = dir.."/"..tempname local file, err = _open(filename, "wb+") if file then tinsert(_tmpfiles, {name = filename, file = file}) end return file, err end ---------------------------------------------------------------------------- -- Preprocess the content of a mixed HTML file and output a complete -- HTML document ( a 'Content-type' header is inserted before the -- preprocessed HTML ) -- @param filename String with the name of the file to be processed. -- @param env Optional environment ---------------------------------------------------------------------------- function handlelp (filename, env) env = env or buildscriptenv() htmlheader () lp.include (filename, env) end ---------------------------------------------------------------------------- -- Builds a handler that sends a header and the contents of the given file. -- Sends the contents of the file to the output without processing it. -- @param type String with the type of the header. -- @param subtype String with the subtype of the header. -- @return Function (which receives a filename as argument) that produces -- the header and copies the content of the given file. ---------------------------------------------------------------------------- function buildplainhandler (type, subtype) return function (filename) local fh, err = _open (filename, "rb") local contents = "" if fh then contents = fh:read("*a") fh:close() else error(err) end header("Content-Lenght", #contents) contentheader (type, subtype) put (contents) end end ---------------------------------------------------------------------------- -- Builds a handler that sends a header and the processed file. -- Processes the file as a Lua Page. -- @param type String with the type of the header. -- @param subtype String with the subtype of the header. -- @return Function (which receives a filename as argument) that produces -- the header and processes the given file. ---------------------------------------------------------------------------- function buildprocesshandler (type, subtype) return function (filename) local env = buildscriptenv() contentheader (type, subtype) lp.include (filename, env) end end ---------------------------------------------------------------------------- -- Builds the default handler table from cgilua.mime ---------------------------------------------------------------------------- local function buildhandlers() local mime = _G.require "cgilua.mime" for ext, mediatype in pairs(mime) do local t, st = match(mediatype, "([^/]*)/([^/]*)") addscripthandler(ext, buildplainhandler(t, st)) end end ---------------------------------------------------------------------------- -- Create an URL path to be used as a link to a CGILua script -- @param script String with the name of the script. -- @param args Table with arguments to script (optional). -- @return String in URL format. ---------------------------------------------------------------------------- function mkurlpath (script, args) -- URL-encode the parameters to be passed do the script local params = "" if args then params = "?"..urlcode.encodetable(args) end if strsub(script,1,1) == "/" then return urlpath .. script .. params else return urlpath .. script_vdir .. script .. params end end ---------------------------------------------------------------------------- -- Create an absolute URL containing the given URL path -- @param path String with the path. -- @param protocol String with the name of the protocol (default = "http"). -- @return String in URL format. ---------------------------------------------------------------------------- function mkabsoluteurl (path, protocol) protocol = protocol or "http" if path:sub(1,1) ~= '/' then path = '/'..path end return format("%s://%s:%s%s", protocol, servervariable"SERVER_NAME", servervariable"SERVER_PORT", path) end ---------------------------------------------------------------------------- -- Extract the "directory" and "file" parts of a path -- @param path String with a path. -- @return String with the directory part. -- @return String with the file part. ---------------------------------------------------------------------------- function splitonlast (path, sep) local dir,file = match(path,"^(.-)([^:/\\]*)$") return dir,file end splitpath = splitonlast -- compatibility with previous versions ---------------------------------------------------------------------------- -- Extracts the first and remaining parts of a path -- @param path separator (defaults to "/") -- @return String with the extracted part. -- @return String with the remaining path. ---------------------------------------------------------------------------- function splitonfirst(path, sep) local first, rest = match(path, "^/([^:/\\]*)(.*)") return first, rest end -- -- Define variables and build the cgilua.POST, cgilua.GET tables. -- local function getparams () requestmethod = servervariable"REQUEST_METHOD" -- Fill in the POST table. POST = {} if requestmethod == "POST" then post.parsedata { read = SAPI.Request.getpostdata, discardinput = ap and ap.discard_request_body, content_type = servervariable"CONTENT_TYPE", content_length = servervariable"CONTENT_LENGTH", maxinput = _maxinput, maxfilesize = _maxfilesize, args = POST, } end -- Fill in the QUERY table. QUERY = {} urlcode.parsequery (servervariable"QUERY_STRING", QUERY) end -- -- Stores all script handlers and the file extensions used to identify -- them. Loads the default local _script_handlers = {} -- -- Default handler. -- Sends the contents of the file to the output without processing it. -- This relies in the browser being able to discover the content type -- which is not reliable. -- @param filename String with the name of the file. -- local function default_handler (filename) local fh, err = _open (filename, "rb") local contents if fh then contents = fh:read("*a") fh:close() else error(err) end header("Content-Lenght", #contents) put ("\n") put (contents) end ---------------------------------------------------------------------------- -- Add a script handler. -- @param file_extension String with the lower-case extension of the script. -- @param func Function to handle this kind of scripts. ---------------------------------------------------------------------------- function addscripthandler (file_extension, func) assert (type(file_extension) == "string", "File extension must be a string") if strfind (file_extension, '%.', 1) then file_extension = strsub (file_extension, 2) end file_extension = strlower(file_extension) assert (type(func) == "function", "Handler must be a function") _script_handlers[file_extension] = func end --------------------------------------------------------------------------- -- Obtains the handler corresponding to the given script path. -- @param path String with a script path. -- @return Function that handles it or nil. ---------------------------------------------------------------------------- function getscripthandler (path) local i,f, ext = strfind (path, "%.([^.]+)$") return _script_handlers[strlower(ext or '')] end --------------------------------------------------------------------------- -- Execute the given path with the corresponding handler. -- @param path String with a script path. -- @return The returned values from the script. --------------------------------------------------------------------------- function handle (path) local h = getscripthandler (path) or default_handler return h (path) end --------------------------------------------------------------------------- -- Sets "errorhandler" function -- This function is called by Lua when an error occurs. -- It receives the error message generated by Lua and it is resposible -- for the final message which should be returned. -- @param Function. --------------------------------------------------------------------------- function seterrorhandler (f) local tf = type(f) if tf == "function" then _errorhandler = f else error (format ("Invalid type: expected `function', got `%s'", tf)) end end --------------------------------------------------------------------------- -- Defines the "erroroutput" function -- This function is called to generate the error output. -- @param Function. --------------------------------------------------------------------------- function seterroroutput (f) local tf = type(f) if tf == "function" then _erroroutput = f else error (format ("Invalid type: expected `function', got `%s'", tf)) end end -- -- Stores all close functions in order they are set. local _close_functions = { } --------------------------------------------------------------------------- -- Adds a function to be executed after the script. -- @param f Function to be registered. --------------------------------------------------------------------------- function addclosefunction (f) local tf = type(f) if tf == "function" then tinsert (_close_functions, f) else error (format ("Invalid type: expected `function', got `%s'", tf)) end end -- -- Close function. -- local function close() for i = #_close_functions, 1, -1 do _close_functions[i]() end end -- -- Stores all open functions in order they are set. local _open_functions = { } --------------------------------------------------------------------------- -- Adds a function to be executed before the script. -- @param f Function to be registered. --------------------------------------------------------------------------- function addopenfunction (f) local tf = type(f) if tf == "function" then tinsert (_open_functions, f) else error (format ("Invalid type: expected `function', got `%s'", tf)) end end -- -- Open function. -- Call all defined open-functions in the order they were created. -- local function open() for i = #_open_functions, 1, -1 do _open_functions[i]() end end -- -- Resets CGILua's state. -- local function reset () script_path = false script_vpath, pdir, use_executable_name, urlpath, script_vdir, script_pdir, script_file, authentication, app_name = nil, nil, nil, nil, nil, nil, nil, nil, nil _maxfilesize = _default_maxfilesize _maxinput = _default_maxinput -- Error Handling _errorhandler = _default_errorhandler _erroroutput = _default_erroroutput -- Handlers _script_handlers = {} _open_functions = {} _close_functions = {} -- clean temporary files foreachi(_tmpfiles, function (i, v) v.file:close() local _, err = remove(v.name) if err then error(err) end end) end --------------------------------------------------------------------------- -- Request processing. --------------------------------------------------------------------------- function main () SAPI = _G.SAPI buildhandlers() -- Default handler values addscripthandler ("lua", doscript) addscripthandler ("lp", handlelp) -- Looks for an optional loader module pcall (function () _G.require"cgilua.loader" end) -- post.lua needs to be loaded after cgilua.lua is compiled pcall (function () _G.require"cgilua.post" end) if loader then loader.init() end -- Build QUERY/POST tables if not pcall (getparams) then return nil end local result -- Executes the optional loader module if loader then loader.run() end -- Changing curent directory to the script's "physical" dir local curr_dir = lfs.currentdir () pcall (function () lfs.chdir (script_pdir) end) -- Opening functions pcall (open) -- Executes the script result, err = pcall (function () return handle (script_file) end) -- Closing functions pcall (close) -- Changing to original directory pcall (function () lfs.chdir (curr_dir) end) -- Cleanup reset () if result then -- script executed ok! return result end end genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/cookies.lua000066400000000000000000000062201211610345200245550ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Cookies Library -- -- @release $Id: cookies.lua,v 1.8 2008/04/24 13:42:04 mascarenhas Exp $ ---------------------------------------------------------------------------- require"cgilua.urlcode" local error = error local format, gsub, strfind = string.format, string.gsub, string.find local date = os.date local escape, unescape = cgilua.urlcode.escape, cgilua.urlcode.unescape local function header(...) return SAPI.Response.header(...) end local function write(...) return SAPI.Response.write(...) end local function servervariable(...) return SAPI.Request.servervariable(...) end module ("cgilua.cookies") local function optional (what, name) if name ~= nil and name ~= "" then return format("; %s=%s", what, name) else return "" end end local function build (name, value, options) if not name or not value then error("cookie needs a name and a value") end local cookie = name .. "=" .. escape(value) options = options or {} if options.expires then local t = date("!%A, %d-%b-%Y %H:%M:%S GMT", options.expires) cookie = cookie .. optional("expires", t) end cookie = cookie .. optional("path", options.path) cookie = cookie .. optional("domain", options.domain) cookie = cookie .. optional("secure", options.secure) return cookie end ---------------------------------------------------------------------------- -- Sets a value to a cookie, with the given options. -- Generates a header "Set-Cookie", thus it can only be used in Lua Scripts. -- @param name String with the name of the cookie. -- @param value String with the value of the cookie. -- @param options Table with the options (optional). function set (name, value, options) header("Set-Cookie", build(name, value, options)) end ---------------------------------------------------------------------------- -- Sets a value to a cookie, with the given options. -- Generates an HTML META tag, thus it can be used in Lua Pages. -- @param name String with the name of the cookie. -- @param value String with the value of the cookie. -- @param options Table with the options (optional). function sethtml (name, value, options) write(format('', build(name, value, options))) end ---------------------------------------------------------------------------- -- Gets the value of a cookie. -- @param name String with the name of the cookie. -- @return String with the value associated with the cookie. function get (name) local cookies = servervariable"HTTP_COOKIE" or "" cookies = ";" .. cookies .. ";" cookies = gsub(cookies, "%s*;%s*", ";") -- remove extra spaces local pattern = ";" .. name .. "=(.-);" local _, __, value = strfind(cookies, pattern) return value and unescape(value) end ---------------------------------------------------------------------------- -- Deletes a cookie, by setting its value to "xxx". -- @param name String with the name of the cookie. -- @param options Table with the options (optional). function delete (name, options) options = options or {} options.expires = 1 set(name, "xxx", options) end genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/dispatcher.lua000066400000000000000000000041501211610345200252470ustar00rootroot00000000000000-- CGILua dispatcher module -- @release $Id: dispatcher.lua,v 1.8 2007/12/07 18:49:49 carregal Exp $ module(..., package.seeall) -- Checks if an URL matches a route pattern local function route_match(url, pattern) local params = {} local captures = string.gsub(pattern, "(/$[%w_-]+)", "/([^/]*)") local url_parts = {string.match(url, captures)} local i = 1 for name in string.gmatch(pattern, "/$([%w_-]+)") do params[name] = url_parts[i] i = i + 1 end return next(params) and params end local route_URLs = {} -- Maps the correct function for an URL local function route_map(url) for i, v in ipairs(route_URLs) do local pattern, f, name = unpack(v) local params = route_match(url, pattern) if params then return f, params end end end -- Returns an URL for a named route -- @param map_name Name associated with the map in the routed URL table. -- @param params Table of named parameters used in the URL map -- @param queryargs Optional table of named parameters used for the QUERY part of the URL function route_url(map_name, params, queryargs) local queryparams = "" if queryargs then queryparams = "?"..cgilua.urlcode.encodetable(queryargs) end for i, v in ipairs(route_URLs) do local pattern, f, name = unpack(v) if name == map_name then local url = string.gsub(pattern, "$([%w_-]+)", params) url = cgilua.urlpath.."/"..cgilua.app_name..url..queryparams return url end end end -- Defines the routing using a table of URLs maps or a single map -- a map defines a URL mask using $name to extract parameters, -- a function to be called with the extracted parameters and -- a name for the map when used with route_url -- @param table of maps or a single map function route(URLs) URLs = URLs or {} if type(URLs[1]) == "string" then -- accepts a single map as the only entry in a map table URLs = {URLs} end route_URLs = URLs f, args = route_map(cgilua.script_vpath) if f then return f(args) else error("Missing page parameters") end endgenometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/loader.lua000066400000000000000000000066741211610345200244040ustar00rootroot00000000000000-- CGILua loader -- -- Assumes two global variables pointing to directories: -- CGILUA_CONF - CGILua configuration directory -- CGILUA_TMP - CGILua temporary files directory -- -- # $Id: loader.lua,v 1.7 2008/03/28 22:01:18 ignacio Exp $ require "lfs" module("cgilua.loader", package.seeall) function init() -- Loads the user configuration cgilua.doif (CGILUA_CONF.."/config.lua") end function run() local servervariable = cgilua.servervariable cgilua.script_vpath = cgilua.script_vpath or servervariable"PATH_INFO" if cgilua.script_vpath == nil or cgilua.script_vpath == "" then cgilua.script_vpath = "/" end local document_root = cgilua.pdir or servervariable"DOCUMENT_ROOT" if not cgilua.script_path then if CGILUA_ISDIRECT then -- the launcher is associated with scripts (Xavante, mod_lua or isapi usually) if servervariable"PATH_TRANSLATED" ~= "" then cgilua.script_path = servervariable"PATH_TRANSLATED" else cgilua.script_path = servervariable"SCRIPT_FILENAME" end else -- the launcher executable is present in the URL (CGI or FastCGI only) if document_root == nil or document_root == "" then -- tries to obtain documents_root from the server local path_info = cgilua.script_vpath if path_info == nil or path_info == "" or path_info == "/" then document_root = cgilua.pdir or servervariable"PATH_TRANSLATED" else if string.find(servervariable("SERVER_SOFTWARE"), "IIS") then path_info = string.gsub(path_info, "/", "\\") end document_root = cgilua.pdir or string.gsub(servervariable"PATH_TRANSLATED", path_info, "") end end if cgilua.use_executable_name then -- looks for a Lua script with the same name as the executable local _, name = cgilua.splitpath(servervariable"SCRIPT_NAME") name = string.gsub(name, "%.[^%.]-$","") if name and lfs.attributes(document_root.."/"..name..".lua") then cgilua.script_path = document_root.."/"..name..".lua" end else -- uses /index.lua then /index.lp as the default script if cgilua.script_vpath == "/" then if lfs.attributes(document_root.."/index.lua") then cgilua.script_vpath = "/index.lua" elseif lfs.attributes(document_root.."/index.lp") then cgilua.script_vpath = "/index.lp" else error("Kepler is correctly configured, but you didn't provide a script!") end end -- checks if PATH_INFO refers to a valid file and ajusts the settings accordingly local filepath, path_info = string.match (cgilua.script_vpath, "^([^%.]-%.[^/]+)(.*)") if filepath and lfs.attributes(document_root..filepath) then -- if one is found use it cgilua.script_path = document_root..filepath cgilua.script_vpath = path_info cgilua.urlpath = cgilua.urlpath or servervariable"SCRIPT_NAME"..filepath else -- otherwise go with the current PATH_INFO cgilua.script_path = document_root..cgilua.script_vpath end end end end -- define other cgilua vars so mkurlpath can work correctly if cgilua.script_vpath then cgilua.script_vdir = cgilua.splitpath (cgilua.script_vpath) cgilua.urlpath = cgilua.urlpath or servervariable"SCRIPT_NAME" else cgilua.script_vdir = cgilua.splitpath (servervariable"SCRIPT_NAME") cgilua.urlpath = cgilua.urlpath or "" end cgilua.script_pdir, cgilua.script_file = cgilua.splitpath (cgilua.script_path) end genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/lp.lua000066400000000000000000000107101211610345200235330ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Lua Pages Template Preprocessor. -- -- @release $Id: lp.lua,v 1.15 2008/12/11 17:40:24 mascarenhas Exp $ ---------------------------------------------------------------------------- local assert, error, getfenv, loadstring, setfenv = assert, error, getfenv, loadstring, setfenv local find, format, gsub, strsub, char = string.find, string.format, string.gsub, string.sub, string.char local concat, tinsert = table.concat, table.insert local open = io.open module (...) ---------------------------------------------------------------------------- -- function to do output local outfunc = "io.write" -- accepts the old expression field: `$| |$' local compatmode = true -- -- Builds a piece of Lua code which outputs the (part of the) given string. -- @param s String. -- @param i Number with the initial position in the string. -- @param f Number with the final position in the string (default == -1). -- @return String with the correspondent Lua code which outputs the part of the string. -- local function out (s, i, f) s = strsub(s, i, f or -1) if s == "" then return s end -- we could use `%q' here, but this way we have better control s = gsub(s, "([\\\n\'])", "\\%1") -- substitute '\r' by '\'+'r' and let `loadstring' reconstruct it s = gsub(s, "\r", "\\r") return format(" %s('%s'); ", outfunc, s) end ---------------------------------------------------------------------------- -- Translate the template to Lua code. -- @param s String to translate. -- @return String with translated code. ---------------------------------------------------------------------------- function translate (s) s = gsub(s, "^#![^\n]+\n", "") if compatmode then s = gsub(s, "$|(.-)|%$", "") s = gsub(s, "", "") end s = gsub(s, "<%%(.-)%%>", "") local res = {} local start = 1 -- start of untranslated part in `s' while true do local ip, fp, target, exp, code = find(s, "<%?(%w*)[ \t]*(=?)(.-)%?>", start) if not ip then break end tinsert(res, out(s, start, ip-1)) if target ~= "" and target ~= "lua" then -- not for Lua; pass whole instruction to the output tinsert(res, out(s, ip, fp)) else if exp == "=" then -- expression? tinsert(res, format(" %s(%s);", outfunc, code)) else -- command tinsert(res, format(" %s ", code)) end end start = fp + 1 end tinsert(res, out(s, start)) return concat(res) end ---------------------------------------------------------------------------- -- Defines the name of the output function. -- @param f String with the name of the function which produces output. function setoutfunc (f) outfunc = f end ---------------------------------------------------------------------------- -- Turns on or off the compatibility with old CGILua 3.X behavior. -- @param c Boolean indicating if the compatibility mode should be used. function setcompatmode (c) compatmode = c end ---------------------------------------------------------------------------- -- Internal compilation cache. local cache = {} ---------------------------------------------------------------------------- -- Translates a template into a Lua function. -- Does NOT execute the resulting function. -- Uses a cache of templates. -- @param string String with the template to be translated. -- @param chunkname String with the name of the chunk, for debugging purposes. -- @return Function with the resulting translation. function compile (string, chunkname) local f, err = cache[string] if f then return f end f, err = loadstring (translate (string), chunkname) if not f then error (err, 3) end cache[string] = f return f end ---------------------------------------------------------------------------- -- Translates and executes a template in a given file. -- The translation creates a Lua function which will be executed in an -- optionally given environment. -- @param filename String with the name of the file containing the template. -- @param env Table with the environment to run the resulting function. local BOM = char(239) .. char(187) .. char(191) function include (filename, env) -- read the whole contents of the file local fh = assert (open (filename)) local src = fh:read("*a") fh:close() if src:sub(1,3) == BOM then src = src:sub(4) end -- translates the file into a function local prog = compile (src, '@'..filename) local _env if env then _env = getfenv (prog) setfenv (prog, env) end prog () end genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/mime.lua000066400000000000000000000124551211610345200240570ustar00rootroot00000000000000----------------------------------------------------------------------------- -- Xavante MIME types -- -- Authors: Javier Guerra and Andre Carregal -- Copyright (c) 2004-2007 Kepler Project -- -- $Id: mime.lua,v 1.1 2007/09/25 23:17:56 carregal Exp $ ----------------------------------------------------------------------------- -- Extracted from Apache's mime.types -- This file controls what Internet media types are sent to the client for -- given file extension(s). Sending the correct media type to the client -- is important so they know how to handle the content of the file. -- Extra types can either be added here or by using an AddType directive -- in your config files. For more information about Internet media types, -- please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type -- registry is at . return { ez = "application/andrew-inset", atom = "application/atom+xml", hqx = "application/mac-binhex40", cpt = "application/mac-compactpro", mathml = "application/mathml+xml", doc = "application/msword", bin = "application/octet-stream", dms = "application/octet-stream", lha = "application/octet-stream", lzh = "application/octet-stream", exe = "application/octet-stream", class = "application/octet-stream", so = "application/octet-stream", dll = "application/octet-stream", dmg = "application/octet-stream", oda = "application/oda", ogg = "application/ogg", pdf = "application/pdf", ai = "application/postscript", eps = "application/postscript", ps = "application/postscript", rdf = "application/rdf+xml", smi = "application/smil", smil = "application/smil", gram = "application/srgs", grxml = "application/srgs+xml", mif = "application/vnd.mif", xul = "application/vnd.mozilla.xul+xml", xls = "application/vnd.ms-excel", ppt = "application/vnd.ms-powerpoint", rm = "application/vnd.rn-realmedia", wbxml = "application/vnd.wap.wbxml", wmlc = "application/vnd.wap.wmlc", wmlsc = "application/vnd.wap.wmlscriptc", vxml = "application/voicexml+xml", bcpio = "application/x-bcpio", vcd = "application/x-cdlink", pgn = "application/x-chess-pgn", cpio = "application/x-cpio", csh = "application/x-csh", dcr = "application/x-director", dir = "application/x-director", dxr = "application/x-director", dvi = "application/x-dvi", spl = "application/x-futuresplash", gtar = "application/x-gtar", hdf = "application/x-hdf", xhtml = "application/xhtml+xml", xht = "application/xhtml+xml", js = "application/x-javascript", skp = "application/x-koan", skd = "application/x-koan", skt = "application/x-koan", skm = "application/x-koan", latex = "application/x-latex", xml = "application/xml", xsl = "application/xml", dtd = "application/xml-dtd", nc = "application/x-netcdf", cdf = "application/x-netcdf", sh = "application/x-sh", shar = "application/x-shar", swf = "application/x-shockwave-flash", xslt = "application/xslt+xml", sit = "application/x-stuffit", sv4cpio = "application/x-sv4cpio", sv4crc = "application/x-sv4crc", tar = "application/x-tar", tcl = "application/x-tcl", tex = "application/x-tex", texinfo = "application/x-texinfo", texi = "application/x-texinfo", t = "application/x-troff", tr = "application/x-troff", roff = "application/x-troff", man = "application/x-troff-man", me = "application/x-troff-me", ms = "application/x-troff-ms", ustar = "application/x-ustar", src = "application/x-wais-source", zip = "application/zip", au = "audio/basic", snd = "audio/basic", mid = "audio/midi", midi = "audio/midi", kar = "audio/midi", mpga = "audio/mpeg", mp2 = "audio/mpeg", mp3 = "audio/mpeg", aif = "audio/x-aiff", aiff = "audio/x-aiff", aifc = "audio/x-aiff", m3u = "audio/x-mpegurl", ram = "audio/x-pn-realaudio", ra = "audio/x-pn-realaudio", wav = "audio/x-wav", pdb = "chemical/x-pdb", xyz = "chemical/x-xyz", bmp = "image/bmp", cgm = "image/cgm", gif = "image/gif", ief = "image/ief", jpeg = "image/jpeg", jpg = "image/jpeg", jpe = "image/jpeg", png = "image/png", svg = "image/svg+xml", svgz = "image/svg+xml", tiff = "image/tiff", tif = "image/tiff", djvu = "image/vnd.djvu", djv = "image/vnd.djvu", wbmp = "image/vnd.wap.wbmp", ras = "image/x-cmu-raster", ico = "image/x-icon", pnm = "image/x-portable-anymap", pbm = "image/x-portable-bitmap", pgm = "image/x-portable-graymap", ppm = "image/x-portable-pixmap", rgb = "image/x-rgb", xbm = "image/x-xbitmap", xpm = "image/x-xpixmap", xwd = "image/x-xwindowdump", igs = "model/iges", iges = "model/iges", msh = "model/mesh", mesh = "model/mesh", silo = "model/mesh", wrl = "model/vrml", vrml = "model/vrml", ics = "text/calendar", ifb = "text/calendar", css = "text/css", html = "text/html", htm = "text/html", asc = "text/plain", txt = "text/plain", rtx = "text/richtext", rtf = "text/rtf", sgml = "text/sgml", sgm = "text/sgml", tsv = "text/tab-separated-values", wml = "text/vnd.wap.wml", wmls = "text/vnd.wap.wmlscript", etx = "text/x-setext", mpeg = "video/mpeg", mpg = "video/mpeg", mpe = "video/mpeg", qt = "video/quicktime", mov = "video/quicktime", mxu = "video/vnd.mpegurl", avi = "video/x-msvideo", movie = "video/x-sgi-movie", ice = "x-conference/x-cooltalk", } genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/post.lua000066400000000000000000000225651211610345200241200ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Process POST data. -- This library depends on some functions that read POST data and other -- HTTP information. A beginning is: -- require"post" -- local params = {} -- post.parsedata { -- read = ap.get_client_block or io.input, -- discardinput = ap.discard_request_body, -- content_type = ap.get_header"content-type" or os.getenv"CONTENT_TYPE", -- content_length = ap.get_header"content-length" or os.getenv"CONTENT_LENGTH", -- maxinput = 1024 * 1024, -- maxfilesize = 512 * 1024, -- args = params, -- } -- -- @release $Id: post.lua,v 1.17 2008/04/03 21:55:28 mascarenhas Exp $ ---------------------------------------------------------------------------- require"cgilua.readuntil" require"cgilua.urlcode" local assert, error, pairs, tonumber, tostring, type = assert, error, pairs, tonumber, tostring, type local getn, tinsert = table.getn, table.insert local format, gsub, strfind, strlower, strlen = string.format, string.gsub, string.find, string.lower, string.len local min = math.min local iterate = cgilua.readuntil.iterate local urlcode = cgilua.urlcode local tmpfile = cgilua.tmpfile -- environment for processing multipart/form-data input local boundary = nil -- boundary string that separates each 'part' of input local maxfilesize = nil -- maximum size for file upload local maxinput = nil -- maximum size of total POST data local inputfile = nil -- temporary file for inputting form-data local bytesleft = nil -- number of bytes yet to be read local content_type = nil -- request's content-type -- local functions local discardinput = nil -- discard all remaining input local readuntil = nil -- read until delimiter local read = nil -- basic read function module ("cgilua.post") -- -- Extract the boundary string from CONTENT_TYPE metavariable -- local function getboundary () local _,_,boundary = strfind (content_type, "boundary%=(.-)$") return "--"..boundary end -- -- Create a table containing the headers of a multipart/form-data field -- local function breakheaders (hdrdata) local headers = {} gsub (hdrdata, '([^%c%s:]+):%s+([^\n]+)', function(type,val) type = strlower(type) headers[type] = val end) return headers end -- -- Read the headers of the next multipart/form-data field -- -- This function returns a table containing the headers values. Each header -- value is indexed by the corresponding header "type". -- If end of input is reached (no more fields to process) it returns nil. -- local function readfieldheaders () local EOH = "\r\n\r\n" -- local hdrdata = "" local out = function (str) hdrdata = hdrdata..str end if readuntil (EOH, out) then -- parse headers return breakheaders (hdrdata) else -- no header found return nil end end -- -- Extract a field name (and possible filename) from its disposition header -- local function getfieldnames (headers) local disposition_hdr = headers["content-disposition"] local attrs = {} if disposition_hdr then gsub(disposition_hdr, ';%s*([^%s=]+)="(.-)"', function(attr, val) attrs[attr] = val end) else error("Error processing multipart/form-data.".. "\nMissing content-disposition header") end return attrs.name, attrs.filename end -- -- Read the contents of a 'regular' field to a string -- local function readfieldcontents () local value = "" local boundaryline = "\r\n"..boundary local out = function (str) value = value..str end if readuntil (boundaryline, out) then return value else error("Error processing multipart/form-data.\nUnexpected end of input\n") end end -- -- Read the contents of a 'file' field to a temporary file (file upload) -- local function fileupload (filename) -- create a temporary file for uploading the file field local file, err = tmpfile() if file == nil then discardinput(bytesleft) error("Cannot create a temporary file.\n"..err) end local bytesread = 0 local boundaryline = "\r\n"..boundary local out = function (str) local sl = strlen (str) if bytesread + sl > maxfilesize then discardinput (bytesleft) error (format ("Maximum file size (%d kbytes) exceeded while uploading `%s'", maxfilesize / 1024, filename)) end file:write (str) bytesread = bytesread + sl end if readuntil (boundaryline, out) then file:seek ("set", 0) return file, bytesread else error (format ("Error processing multipart/form-data.\nUnexpected end of input while uploading %s", filename)) end end -- -- Compose a file field 'value' -- local function filevalue (filehandle, filename, filesize, headers) -- the temporary file handle local value = { file = filehandle, filename = filename, filesize = filesize } -- copy additional header values for hdr, hdrval in pairs(headers) do if hdr ~= "content-disposition" then value[hdr] = hdrval end end return value end -- -- Process multipart/form-data -- -- This function receives the total size of the incoming multipart/form-data, -- the maximum size for a file upload, and a reference to a table where the -- form fields should be stored. -- -- For every field in the incoming form-data a (name=value) pair is -- inserted into the given table. [[name]] is the field name extracted -- from the content-disposition header. -- -- If a field is of type 'file' (i.e., a 'filename' attribute was found -- in its content-disposition header) a temporary file is created -- and the field contents are written to it. In this case, -- [[value]] has a table that contains the temporary file handle -- (key 'file') and the file name (key 'filename'). Optional headers -- included in the field description are also inserted into this table, -- as (header_type=value) pairs. -- -- If the field is not of type 'file', [[value]] contains the field -- contents. -- local function Main (inputsize, args) -- create a temporary file for processing input data local inputf,err = tmpfile() if inputf == nil then discardinput(inputsize) error("Cannot create a temporary file.\n"..err) end -- set the environment for processing the multipart/form-data inputfile = inputf bytesleft = inputsize maxfilesize = maxfilesize or inputsize boundary = getboundary() while true do -- read the next field header(s) local headers = readfieldheaders() if not headers then break end -- end of input -- get the name attributes for the form field (name and filename) local name, filename = getfieldnames(headers) -- get the field contents local value if filename then local filehandle, filesize = fileupload(filename) value = filevalue(filehandle, filename, filesize, headers) else value = readfieldcontents() end -- insert the form field into table [[args]] urlcode.insertfield(args, name, value) end end -- -- Initialize the library by setting the dependent functions: -- content_type = value of "Content-type" header -- content_length = value of "Content-length" header -- read = function that can read POST data -- discardinput (optional) = function that discard POST data -- maxinput (optional) = limit of POST data (in bytes) -- maxfilesize (optional) = limit of uploaded file(s) (in bytes) -- local function init (defs) assert (defs.read) read = defs.read readuntil = iterate (function () if bytesleft then if bytesleft <= 0 then return nil end local n = min (bytesleft, 2^13) -- 2^13 == 8192 local bytes = read (n) bytesleft = bytesleft - #bytes return bytes end end) if defs.discard_function then discardinput = defs.discardinput else discardinput = function (inputsize) readuntil ('\0', function()end) end end content_type = defs.content_type if defs.maxinput then maxinput = defs.maxinput end if defs.maxfilesize then maxfilesize = defs.maxfilesize end end ---------------------------------------------------------------------------- -- Parse the POST REQUEST incoming data according to its "content type" -- as defined by the metavariable CONTENT_TYPE (RFC CGI) -- -- An error is issued if the "total" size of the incoming data -- (defined by the metavariable CONTENT_LENGTH) exceeds the -- maximum input size allowed ---------------------------------------------------------------------------- function parsedata (defs) assert (type(defs.args) == "table", "field `args' must be a table") init (defs) -- get the "total" size of the incoming data local inputsize = tonumber(defs.content_length) or 0 if inputsize > maxinput then -- some Web Servers (like IIS) require that all the incoming data is read bytesleft = inputsize discardinput(inputsize) error(format("Total size of incoming data (%d KB) exceeds configured maximum (%d KB)", inputsize /1024, maxinput / 1024)) end -- process the incoming data according to its content type local contenttype = content_type if not contenttype then error("Undefined Media Type") end if strfind(contenttype, "x-www-form-urlencoded", 1, true) then urlcode.parsequery (read (inputsize), defs.args) elseif strfind(contenttype, "multipart/form-data", 1, true) then Main (inputsize, defs.args) elseif strfind (contenttype, "application/xml", 1, true) or strfind (contenttype, "text/xml", 1, true) or strfind (contenttype, "text/plain", 1, true) then tinsert (defs.args, read (inputsize)) else error("Unsupported Media Type: "..contenttype) end end genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/readuntil.lua000066400000000000000000000027231211610345200251140ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Reads an input until a given character. -- -- @release $Id: readuntil.lua,v 1.5 2007/04/16 14:01:32 tomas Exp $ ---------------------------------------------------------------------------- local strsub, strfind, strlen = string.sub, string.find, string.len module ("cgilua.readuntil") ---------------------------------------------------------------------------- -- Creates a function which reads an input until a given character. -- @param inp Function which reads the input. -- @return Function which receives a delimiter character and an output -- function. ---------------------------------------------------------------------------- function iterate (inp) local current = "" return function (del, out) local dellen = strlen(del) local i, e while true do i, e = strfind(current, del, 1, 1) if i then break end local new = inp() if not new then break end do -- handle borders local endcurrent = strsub(current, -dellen+1) local border = endcurrent .. strsub(new, 1, dellen-1) if strlen(current) < dellen or strlen(new) < dellen or strfind(border, del, 1, 1) then -- move last part of `current' to new block current = strsub(current, 1, -dellen) new = endcurrent .. new end end out(current) current = new end out(strsub(current, 1, (i or 0) - 1)) current = strsub(current, (e or strlen(current)) + 1) return (i ~= nil) end end genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/serialize.lua000066400000000000000000000057171211610345200251220ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Serialize tables. -- It works only for tables without cycles and without functions or -- userdata inside it. -- @release $Id: serialize.lua,v 1.7 2007/04/16 14:01:32 tomas Exp $ ---------------------------------------------------------------------------- local ipairs, pairs, type = ipairs, pairs, type local format = string.format local sort, tinsert = table.sort, table.insert -- local value = nil ---------------------------------------------------------------------------- -- Serializes a table. -- @param tab Table representing the session. -- @param outf Function used to generate the output. -- @param ind String with indentation pattern (default = ""). -- @param pre String with indentation prefix (default = ""). ---------------------------------------------------------------------------- local function tabledump (tab, outf, ind, pre) local sep_n, sep, _n = ",\n", ", ", "\n" if (not ind) or (ind == "") then ind = ""; sep_n = ", "; _n = "" end if not pre then pre = "" end outf ("{") local p = pre..ind -- prepare list of keys local keys = { boolean = {}, number = {}, string = {} } local total = 0 for key in pairs (tab) do total = total + 1 local t = type(key) if t == "string" then tinsert (keys.string, key) else keys[t][key] = true end end local many = total > 5 if not many then sep_n = sep; _n = " " end outf (_n) -- serialize entries with numeric keys if many then local _f,_s,_v = ipairs(tab) if _f(_s,_v) then outf (p) end end local num = keys.number local ok = false -- entries with automatic index for key, val in ipairs (tab) do value (val, outf, ind, p) outf (sep) num[key] = nil ok = true end if ok and many then outf (_n) end -- entries with explicit index for key in pairs (num) do if many then outf (p) end outf ("[") outf (key) outf ("] = ") value (tab[key], outf, ind, p) outf (sep_n) end -- serialize entries with boolean keys local tr = keys.boolean[true] if tr then outf (format ("%s[true] = ", many and p or '')) value (tab[true], outf, ind, p) outf (sep_n) end local fa = keys.boolean[false] if fa then outf (format ("%s[false] = ", many and p or '')) value (tab[false], outf, ind, p) outf (sep_n) end -- serialize entries with string keys sort (keys.string) for _, key in ipairs (keys.string) do outf (format ("%s[%q] = ", many and p or '', key)) value (tab[key], outf, ind, p) outf (sep_n) end if many then outf (pre) end outf ("}") end -- -- Serializes a value. -- value = function (v, outf, ind, pre) local t = type (v) if t == "string" then outf (format ("%q", v)) elseif t == "number" then outf (tostring(v)) elseif t == "boolean" then outf (tostring(v)) elseif t == "table" then tabledump (v, outf, ind, pre) else outf (format ("%q", tostring(v))) end end ---------------------------------------------------------------------------- cgilua.serialize = tabledump return tabledump genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/session.lua000066400000000000000000000162451211610345200246140ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Session library. -- -- @release $Id: session.lua,v 1.29 2007/11/21 16:33:20 carregal Exp $ ---------------------------------------------------------------------------- local lfs = require"lfs" local serialize = require"cgilua.serialize" local assert, error, ipairs, _G, loadfile, next, tostring, type = assert, error, ipairs, _G, loadfile, next, tostring, type local format, gsub, strfind, strsub = string.format, string.gsub, string.find, string.sub local tinsert = table.insert local _open = io.open local remove, time = os.remove, os.time local mod, rand, randseed = math.mod, math.random, math.randomseed local attributes, dir, mkdir = lfs.attributes, lfs.dir, lfs.mkdir module ("cgilua.session") local INVALID_SESSION_ID = "Invalid session identification" ---------------------------------------------------------------------------- -- Internal state variables. local root_dir = nil local timeout = 10 * 60 -- 10 minutes -- -- Checks identifier's format. -- local function check_id (id) return id and (strfind (id, "^%d+$") ~= nil) end -- -- Produces a file name based on a session. -- @param id Session identification. -- @return String with the session file name. -- local function filename (id) return format ("%s/%s.lua", root_dir, id) end ---------------------------------------------------------------------------- -- Deletes a session. -- @param id Session identification. ---------------------------------------------------------------------------- function delete (id) if not check_id (id) then return nil, INVALID_SESSION_ID end remove (filename (id)) end -- -- Searches for a file in the root_dir -- local function find (file) local fh = _open (root_dir.."/"..file) if fh then fh:close () return true else return false end end -- -- Creates a new identifier. -- @return New identifier. -- local function new_id () return rand (999999999) end ---------------------------------------------------------------------------- -- Creates a new session identifier. -- @return Session identification. ---------------------------------------------------------------------------- function new () local id = new_id () if find (id..".lua") then repeat id = new_id (id) until not find (id..".lua") randseed (mod (id, 999999999)) end return id end ---------------------------------------------------------------------------- -- Changes the session identificator generator. -- @param func Function. ---------------------------------------------------------------------------- function setidgenerator (func) if type (func) == "function" then new_id = func end end ---------------------------------------------------------------------------- -- Loads data from a session. -- @param id Session identification. -- @return Table with session data or nil in case of error. -- @return In case of error, also returns the error message. ---------------------------------------------------------------------------- function load (id) if not check_id (id) then return nil, INVALID_SESSION_ID end local f, err = loadfile (filename (id)) if not f then return nil, err else return f() end end ---------------------------------------------------------------------------- -- Saves data to a session. -- @param id Session identification. -- @param data Table with session data to be saved. ---------------------------------------------------------------------------- function save (id, data) if not check_id (id) then return nil, INVALID_SESSION_ID end local fh = assert (_open (filename (id), "w+")) fh:write "return " serialize (data, function (s) fh:write(s) end) fh:close() end ---------------------------------------------------------------------------- -- Removes expired sessions. ---------------------------------------------------------------------------- function cleanup () local rem = {} local now = time () for file in dir (root_dir) do local attr = attributes(root_dir.."/"..file) if attr and attr.mode == 'file' then if attr.modification + timeout < now then tinsert (rem, file) end end end for _, file in ipairs (rem) do remove (root_dir.."/"..file) end end ---------------------------------------------------------------------------- -- Changes the session timeout. -- @param t Number of seconds to maintain a session. ---------------------------------------------------------------------------- function setsessiontimeout (t) if type (t) == "number" then timeout = t end end ---------------------------------------------------------------------------- -- Changes the session directory. -- @param path String with the new session directory. ---------------------------------------------------------------------------- function setsessiondir (path) path = gsub (path, "[/\\]$", "") -- Make sure the given path is a directory if not attributes (path, "mode") then assert (mkdir (path)) end -- Make sure it can create a new file in the given directory local test_file = path.."/".._G.cgilua.tmpname() local fh, err = _open (test_file, "w") if not fh then error ("Could not open a file in session directory: ".. tostring(err), 2) end fh:close () remove (test_file) root_dir = path end ---------------------------------------------------------------------------- local ID_NAME = "cgilua session identification" local id = nil ---------------------------------------------------------------------------- -- Destroys the session. ---------------------------------------------------------------------------- function destroy () data = {} -- removes data from session table to avoid recreation by `close' delete (id) end ---------------------------------------------------------------------------- -- Open user session. -- This function should be called before the script is executed. ---------------------------------------------------------------------------- function open () -- Redefine cgilua.mkurlpath to manage the session identification local mkurlpath = _G.cgilua.mkurlpath function _G.cgilua.mkurlpath (script, data) if not data then data = {} end data[ID_NAME] = id return mkurlpath (script, data) end cleanup() id = _G.cgilua.QUERY[ID_NAME] or new() if id then _G.cgilua.QUERY[ID_NAME] = nil _G.cgilua.session.data = load (id) or {} end end ---------------------------------------------------------------------------- -- Close user session. -- This function should be called after the script is executed. ---------------------------------------------------------------------------- function close () if next (_G.cgilua.session.data) then save (id, _G.cgilua.session.data) id = nil end end local already_enabled = false ---------------------------------------------------------------------------- -- Enables the use of sessions. -- This function must be called by every script that needs sessions. -- It just calls the `open' function and register the `close' function -- to be called at the end of the execution. ---------------------------------------------------------------------------- function _G.cgilua.enablesession () if already_enabled then -- avoid misuse when a script calls another one return else already_enabled = true end open () _G.cgilua.addclosefunction (close) end genometools-1.5.1/src/external/cgilua-5.1.3/src/cgilua/urlcode.lua000066400000000000000000000066251211610345200245670ustar00rootroot00000000000000---------------------------------------------------------------------------- -- Utility functions for encoding/decoding of URLs. -- -- @release $Id: urlcode.lua,v 1.10 2008/01/21 16:11:32 carregal Exp $ ---------------------------------------------------------------------------- local ipairs, next, pairs, tonumber, type = ipairs, next, pairs, tonumber, type local string = string local table = table module ("cgilua.urlcode") ---------------------------------------------------------------------------- -- Decode an URL-encoded string (see RFC 2396) ---------------------------------------------------------------------------- function unescape (str) str = string.gsub (str, "+", " ") str = string.gsub (str, "%%(%x%x)", function(h) return string.char(tonumber(h,16)) end) str = string.gsub (str, "\r\n", "\n") return str end ---------------------------------------------------------------------------- -- URL-encode a string (see RFC 2396) ---------------------------------------------------------------------------- function escape (str) str = string.gsub (str, "\n", "\r\n") str = string.gsub (str, "([^0-9a-zA-Z ])", -- locale independent function (c) return string.format ("%%%02X", string.byte(c)) end) str = string.gsub (str, " ", "+") return str end ---------------------------------------------------------------------------- -- Insert a (name=value) pair into table [[args]] -- @param args Table to receive the result. -- @param name Key for the table. -- @param value Value for the key. -- Multi-valued names will be represented as tables with numerical indexes -- (in the order they came). ---------------------------------------------------------------------------- function insertfield (args, name, value) if not args[name] then args[name] = value else local t = type (args[name]) if t == "string" then args[name] = { args[name], value, } elseif t == "table" then table.insert (args[name], value) else error ("CGILua fatal error (invalid args table)!") end end end ---------------------------------------------------------------------------- -- Parse url-encoded request data -- (the query part of the script URL or url-encoded post data) -- -- Each decoded (name=value) pair is inserted into table [[args]] -- @param query String to be parsed. -- @param args Table where to store the pairs. ---------------------------------------------------------------------------- function parsequery (query, args) if type(query) == "string" then local insertfield, unescape = insertfield, unescape string.gsub (query, "([^&=]+)=([^&=]*)&?", function (key, val) insertfield (args, unescape(key), unescape(val)) end) end end ---------------------------------------------------------------------------- -- URL-encode the elements of a table creating a string to be used in a -- URL for passing data/parameters to another script -- @param args Table where to extract the pairs (name=value). -- @return String with the resulting encoding. ---------------------------------------------------------------------------- function encodetable (args) if args == nil or next(args) == nil then -- no args or empty args? return "" end local strp = "" for key, vals in pairs(args) do if type(vals) ~= "table" then vals = {vals} end for i,val in ipairs(vals) do strp = strp.."&"..escape(key).."="..escape(val) end end -- remove first & return string.sub(strp,2) end genometools-1.5.1/src/external/cgilua-5.1.3/tests/000077500000000000000000000000001211610345200215255ustar00rootroot00000000000000genometools-1.5.1/src/external/cgilua-5.1.3/tests/Makefile000066400000000000000000000005041211610345200231640ustar00rootroot00000000000000# $Id: Makefile,v 1.5 2004/11/08 16:39:51 tomas Exp $ T= test include ../config V= 1.0a #DIST_DIR=../$(PKG)/$T SRCS= test_main.html test_main.lua test_main.lp test_cookies.lua test_cookies.lp clean cgi fcgi mod: cgiinstall fcgiinstall modinstall: dist dist_dir: mkdir -p $(DIST_DIR) cp $(SRCS) Makefile $(DIST_DIR) genometools-1.5.1/src/external/cgilua-5.1.3/tests/download.lua000066400000000000000000000030161211610345200240370ustar00rootroot00000000000000#!/usr/local/bin/lua require"luasocket" function receive (connection) connection:settimeout(0) local s, status = connection:receive (2^10) if status == "timeout" then coroutine.yield (connection) end return s, status end function download (host, file, outfile) --local f = assert (io.open (outfile, "w")) local c = assert (socket.connect (host, 80)) c:send ("GET "..file.." HTTP/1.0\r\n\r\n") while true do local s, status = receive (c) --f:write (s) if status == "closed" then break end end c:close() --f:close() end local threads = {} function get (host, file, outfile) print (string.format ("Downloading %s from %s to %s", file, host, outfile)) local co = coroutine.create (function () return download (host, file, outfile) end) table.insert (threads, co) end function dispatcher () while true do local n = table.getn (threads) if n == 0 then break end local connections = {} for i = 1, n do local status, res = coroutine.resume (threads[i]) if not res then table.remove (threads, i) break else table.insert (connections, res) end end if table.getn (connections) == n then socket.select (connections) end end end local url = arg[1] if not url then print (string.format ("usage: %s url [times]", arg[0])) os.exit() end local times = arg[2] or 5 url = string.gsub (url, "^http.?://", "") local _, _, host, file = string.find (url, "^([^/]+)(/.*)") local _, _, fn = string.find (file, "([^/]+)$") for i = 1, times do get (host, file, fn..i) end dispatcher () genometools-1.5.1/src/external/cgilua-5.1.3/tests/env.lua000066400000000000000000000013011211610345200230130ustar00rootroot00000000000000-- This file should be executed before any script in this directory -- according to the configuration (cgilua/conf.lua). pcall (cgilua.enablesession) local put, mkurlpath = cgilua.put, cgilua.mkurlpath cgilua.addclosefunction (function () put [[

Main]] for _, test in ipairs{ { "Get", "test_main.lua", {ab = "cd", ef = "gh"} }, { "Cookies", "test_cookies.lua", }, { "FileSystem", "test_fs.lua", }, { "Libraries", "test_lib.lua", }, { "Session", "test_session.lua", }, { "Variables", "test_variables.lp", }, } do put (string.format (' · %s', mkurlpath (test[2], test[3]), test[1])) end put [[ ]] end) genometools-1.5.1/src/external/cgilua-5.1.3/tests/overview.lp000066400000000000000000000032731211610345200237350ustar00rootroot00000000000000 CGILua installation overview

CGILua installation overview

Version Copyright Description
<%= tostring(_G[l[2]]) %>
<%= idx(p,"VERSION") %> <%= idx(p,"COPYRIGHT") %> <%= idx(p,"DESCRIPTION") %>
genometools-1.5.1/src/external/cgilua-5.1.3/tests/prepara_sql2.lua000066400000000000000000000013161211610345200246240ustar00rootroot00000000000000#!/usr/local/bin/lua -- Prepara o 2o. teste de acesso ao banco de dados. -- Sao criadas duas tabelas com uma chave estrangeira ligando-as. MAX_ROWS = arg[1] or 10 require"postgres" local env = assert (luasql.postgres ()) local conn = assert (env:connect ("luasql-test", "tomas")) -- Apaga restos de outros testes. conn:execute "drop table t2" conn:execute "drop table t1" -- Criando as tabelas. assert (conn:execute [[create table t1 ( a int, b int )]]) assert (conn:execute [[create table t2 ( c int, d int )]]) -- Preenchedo as tabelas. for i = 1, MAX_ROWS do local ii = 2*i assert (conn:execute (string.format ([[ insert into t1 values (%d, %d); insert into t2 values (%d, %d);]], ii, i, ii, i))) end genometools-1.5.1/src/external/cgilua-5.1.3/tests/tcgi1.lua000066400000000000000000000005311211610345200232360ustar00rootroot00000000000000-- $Id: tcgi1.lua,v 1.1 2004/03/25 19:31:05 tomas Exp $ io.stdout:write"Content-type: text/html\n\n" for i,v in pairs{"QUERY_STRING", } do io.stdout:write (string.format ("%s = %s", v, os.getenv(v) or ' ')) end io.stdout:write "
\n" local post_data = io.stdin:read"*a" io.stdout:write (string.format ("post_data = {%s}", post_data)) genometools-1.5.1/src/external/cgilua-5.1.3/tests/test.html000066400000000000000000000042561211610345200234010ustar00rootroot00000000000000
GET:
cgi fcgi modulo
POST:
field 1:
field 2:
cgi fcgi modulo
POST (with upload):
field 1:
file:
cgi fcgi modulo
$Id: test.html,v 1.2 2004/06/07 12:04:10 tomas Exp $ genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_conc.lua000066400000000000000000000013571211610345200242170ustar00rootroot00000000000000cgilua.htmlheader() if ap then local pid, ppid = ap.pid () if not ppid then ppid = "no parent pid" end cgilua.put ("pid = "..pid.." ("..ppid..")".."\n") end assert(type(stable.get) == "function") assert(type(stable.set) == "function") cgilua.put"stable.pairs = {
\n" for i, v in stable.pairs () do cgilua.put (i.." = "..tostring(v).."
\n") end cgilua.put"}
\n" local counter = stable.get"counter" or 0 stable.set ("counter", counter + 1) local f = stable.get"f" if not f then local d = os.date() stable.set ("f", function () return d end) else cgilua.put ("f() = "..tostring (f ())) end cgilua.put"
\n" for i = 1,800 do cgilua.put (i) for ii = 1,1000 do cgilua.put ("") end cgilua.put ("\n") end cgilua.put ("End") genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_cookies.lp000066400000000000000000000004721211610345200245600ustar00rootroot00000000000000

Testing Cookies library

<%= CL_COOKIE%> = <%= tostring(test)%>
Assigning current date to cookie!
Reload this script to check cookie's value! genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_cookies.lua000066400000000000000000000005301211610345200247210ustar00rootroot00000000000000local cookies = require"cgilua.cookies" CL_COOKIE = "cgilua_cookie" local test = cookies.get (CL_COOKIE) cookies.set (CL_COOKIE, os.date()) cgilua.htmlheader () cgilua.put ([[

Testing Cookies library

]]..CL_COOKIE..' = '..tostring(test)..[[
Assigning current date to cookie!
Reload this script to check cookie's value! ]]) genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_err.lua000066400000000000000000000001351211610345200240560ustar00rootroot00000000000000cgilua.htmlheader() cgilua.put"Oi!" --io.write"something\n" cgilua.errorlog ("eca", "emerg") genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_fs.lua000066400000000000000000000011461211610345200237010ustar00rootroot00000000000000function link_dir (dir, base) local path = base.."/"..dir local mode = lfs.attributes (path).mode if mode == "directory" then return string.format ('%s', cgilua.mkurlpath ("test_fs.lua", { dir = path }), dir) else return dir end end cgilua.htmlheader () cgilua.put ("

Testing Filesystem library

\n") cgilua.put ("\n") cgilua.put ("\n") local i = 0 local dir = cgi.dir or "." for file in lfs.dir (dir) do i = i+1 cgilua.put ("\n") end cgilua.put ("
Testing dir
"..i..""..link_dir(file, dir).."
\n") genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_htk.lua000066400000000000000000000006231211610345200240560ustar00rootroot00000000000000require"htk" local a_table = {} for i = 1, 20 do local l = {} for j = 1, 20 do table.insert (l, HTK.TD { "cell "..i..","..j }) end table.insert (a_table, HTK.TR (l)) end cgilua.htmlheader() cgilua.put (HTK.HTML { HTK.HEAD { HTK.TITLE { "Titulo da Pagina" } }, HTK.BODY { bgcolor = "#FFFFFF", HTK.H1 { "Titulo da Pagina" }, HTK.P {}, "Uma pgina qualquer", HTK.TABLE (a_table), } }) genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_lib.lua000066400000000000000000000014341211610345200240370ustar00rootroot00000000000000local function getfield (t, f) for w in string.gfind(f, "[%w_]+") do if not t then return nil end t = t[w] end return t end function test_lib (libname) local ok, err = pcall (require, libname) if not ok then cgilua.put ("Library "..libname.." not found
\n".. err) else cgilua.put ("Library "..libname.."
\n") local t = getfield (_G, libname) if type(t) ~= "table" then cgilua.put (tostring(t)) else for i, v in pairs (t) do cgilua.put ("  "..tostring(i).." = "..tostring(v).."
\n") end end end cgilua.put ("\n

\n") end cgilua.htmlheader () for _, lib in ipairs { "lfs", "socket", "luasql.postgres", "luasql", "lxp", "lxp.lom", "lualdap", "htk", "xmlrpc", "xmlrpc.http" } do test_lib (lib) end genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_main.html000066400000000000000000000133261211610345200244030ustar00rootroot00000000000000 Test Page
GET:
Lua script cgi fcgi module
HTML template cgi fcgi module
POST:
field 1:
field 2:
field 3: op 1 op 2 op 3
Lua script cgi fcgi module
HTML template cgi fcgi module
POST (with upload):
field 1:
file (binary!):
Lua script cgi fcgi module
HTML template cgi fcgi module
Cookies:
Lua script cgi fcgi module
HTML template cgi fcgi module
Filesystem:
Lua script cgi fcgi module
Session:
Lua script cgi fcgi module
CGI Variables:
HTML template cgi fcgi module
Library Overview:
HTML template cgi fcgi module
Concurrency
Lua script cgi fcgi module
$Id: test_main.html,v 1.12 2004/11/25 10:52:58 tomas Exp $ genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_main.lp000066400000000000000000000011731211610345200240470ustar00rootroot00000000000000 Embeded Lua Test cgi = { \n", vv, a, tostring(b)) end v = vv.."}" end ?> <%= i %> = <%= tostring(v) %>
<% end %> }
Remote address: <%= cgilua.servervariable"REMOTE_ADDR" %>
Is persistent = <%= tostring (SAPI.Info.ispersistent) %>
ap =
lfcgi = <% = tostring(lfcgi) %>
<%= (ap and ap.handler()) or "" %>
$Id: test_main.lp,v 1.5 2005/02/11 14:39:21 tomas Exp $ genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_main.lua000066400000000000000000000023661211610345200242220ustar00rootroot00000000000000-- $Id: test_main.lua,v 1.11 2006/01/06 16:33:57 tomas Exp $ cgilua.htmlheader() cgilua.put[[ Script Lua Test cgi = { ]] for i,v in pairs (cgi) do if type(v) == "table" then local vv = "{" for a,b in pairs(v) do vv = string.format ("%s%s = %s
\n", vv, a, tostring(b)) end v = vv.."}" end cgilua.put (string.format ("%s = %s
\n", i, tostring(v))) end cgilua.put "}
\n" cgilua.put ("Remote address: "..cgilua.servervariable"REMOTE_ADDR") cgilua.put "
\n" cgilua.put ("Is persistent = "..tostring (SAPI.Info.ispersistent).."
\n") cgilua.put ("ap="..tostring(ap).."
\n") cgilua.put ("lfcgi="..tostring(lfcgi).."
\n") -- Checking Virtual Environment local my_output = cgilua.put cgilua.put = nil local status, err = pcall (function () assert (cgilua.put == nil, "cannot change cgilua.put value") end) cgilua.put = my_output assert (status == true, err) -- Checking require local status, err = pcall (function () require"unknown_module" end) assert (status == false, "unknown_module loaded!") assert (package == nil, "Access to package table allowed!") cgilua.put[[

$Id: test_main.lua,v 1.11 2006/01/06 16:33:57 tomas Exp $ ]] cgilua = nil genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_session.lua000066400000000000000000000017551211610345200247620ustar00rootroot00000000000000cgilua.enablesession () function pt (tab) for i, v in pairs (tab) do local vv = v if type(v) == "table" then vv = "" for _i, _v in pairs (v) do vv = vv..string.format ("%s = %q, ", _i, _v) end vv = '{'..vv..'}' end cgilua.put (string.format ("%s = %s
\n", tostring (i), tostring (vv))) end end if cgi.field then if not cgilua.session.data.field then cgilua.session.data.field = {} end table.insert (cgilua.session.data.field, cgi.field) end cgilua.htmlheader() if cgilua.session then cgilua.put "cgi = {
\n" pt (cgi) cgilua.put "}
\n" cgilua.put "cgilua.session.data = {
\n" pt (cgilua.session.data) cgilua.put "}
\n" cgilua.put [[

field:

]] else cgilua.put "Sessions library is not available or not well configured" end genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_sql.lua000066400000000000000000000006331211610345200240700ustar00rootroot00000000000000local s = require"luasql.postgres" local env = assert (luasql.postgres ()) local conn = assert (env:connect ("luasql-test", "tomas")) local cur = assert (conn:execute ("select count(*) from fetch_test")) cgilua.htmlheader() cgilua.put ("Total lines at table fetch_test is "..cur:fetch()) cgilua.put (string.format ("
\n%s == %s
\n", tostring(s), tostring(luasql))) cur:close() conn:close() env:close() genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_sql2.lua000066400000000000000000000012121211610345200241440ustar00rootroot00000000000000require"postgres" local env = assert (luasql.postgres ()) local conn = assert (env:connect ("luasql-test", "tomas")) local cur = assert (conn:execute ("select count(*) from t1")) local total = tonumber (cur:fetch()) cur:close() local aleatorio = math.random(total) local cur = assert (conn:execute ("select * from t1, t2 where b = d and a != "..2*aleatorio)) cgilua.htmlheader() cgilua.put ("Aleatorio = "..aleatorio.."
\n") local a,b,c,d = cur:fetch() cgilua.put ("\n") while a do -- cgilua.put ("") a,b,c,d = cur:fetch() end cgilua.put ("
",a,"",b,"",c,"",d,"
\n") cur:close() conn:close() env:close() genometools-1.5.1/src/external/cgilua-5.1.3/tests/test_variables.lp000066400000000000000000000013071211610345200250720ustar00rootroot00000000000000 <% for _, var in pairs { "SERVER_SOFTWARE", "SERVER_NAME", "GATEWAY_INTERFACE", "SERVER_PROTOCOL", "SERVER_PORT", "REQUEST_METHOD", "PATH_INFO", "PATH_TRANSLATED", "SCRIPT_NAME", "QUERY_STRING", "REMOTE_HOST", "REMOTE_ADDR", "AUTH_TYPE", "REMOTE_USER", "REMOTE_IDENT", "CONTENT_TYPE", "CONTENT_LENGTH", "HTTP_REFERER", "HTTP_COOKIE", "SCRIPT_FILENAME", "DOCUMENT_ROOT", } do %> <% end %>
<%= var %>="<%= cgilua.servervariable(var) or "not defined"%>"

<% for _, var in ipairs { "script_file", "script_path", "script_pdir", "script_vdir", "script_vpath", "urlpath", } do %> <% end %>
<%= var %>="<%= cgilua[var] %>"

genometools-1.5.1/src/external/cgilua-5.1.3/tests/tfcgi1.lua000066400000000000000000000005501211610345200234050ustar00rootroot00000000000000-- $Id: tfcgi1.lua,v 1.1 2004/03/25 19:31:05 tomas Exp $ lfcgi.stdout:write"Content-type: text/html\n\n" for i,v in pairs{"QUERY_STRING", } do lfcgi.stdout:write (string.format ("%s = %s", v, os.getenv(v) or ' ')) end lfcgi.stdout:write "
\n" local post_data = lfcgi.stdin:read"*a" lfcgi.stdout:write (string.format ("post_data = {%s}", post_data)) genometools-1.5.1/src/external/cgilua-5.1.3/tests/tmod1.lua000066400000000000000000000010621211610345200232530ustar00rootroot00000000000000-- $Id: tmod1.lua,v 1.1 2004/03/25 19:31:05 tomas Exp $ ap.set_content_type"text/html" ap.rputs "ap.args = {" ap.rputs (ap.args() or '') ap.rputs "}
\n" assert (ap.setup_client_block ("REQUEST_CHUNKED_ERROR") == ap.OK) if ap.should_client_block () ~= 0 then post_data = {} local block, err = ap.get_client_block () while block do table.insert (post_data, block) block, err = ap.get_client_block () end if err then error (err) end post_data = table.concat (post_data) end ap.rputs "post_data = {" ap.rputs (tostring (post_data)) ap.rputs "}\n" genometools-1.5.1/src/external/expat-2.0.1/000077500000000000000000000000001211610345200202325ustar00rootroot00000000000000genometools-1.5.1/src/external/expat-2.0.1/COPYING000077500000000000000000000022701211610345200212710ustar00rootroot00000000000000Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. genometools-1.5.1/src/external/expat-2.0.1/Changes000077500000000000000000000217641211610345200215420ustar00rootroot00000000000000Release 2.0.1 Tue June 5 2007 - Fixed bugs #1515266, 1515600: The character data handler's calling of XML_StopParser() was not handled properly; if the parser was stopped and the handler set to NULL, the parser would segfault. - Fixed bug #1690883: Expat failed on EBCDIC systems as it assumed some character constants to be ASCII encoded. - Minor cleanups of the test harness. - Fixed xmlwf bug #1513566: "out of memory" error on file size zero. - Fixed outline.c bug #1543233: missing a final XML_ParserFree() call. - Fixes and improvements for Windows platform: bugs #1409451, #1476160, 1548182, 1602769, 1717322. - Build fixes for various platforms: HP-UX, Tru64, Solaris 9: patch #1437840, bug #1196180. All Unix: #1554618 (refreshed config.sub/config.guess). #1490371, #1613457: support both, DESTDIR and INSTALL_ROOT, without relying on GNU-Make specific features. #1647805: Patched configure.in to work better with Intel compiler. - Fixes to Makefile.in to have make check work correctly: bugs #1408143, #1535603, #1536684. - Added Open Watcom support: patch #1523242. Release 2.0.0 Wed Jan 11 2006 - We no longer use the "check" library for C unit testing; we always use the (partial) internal implementation of the API. - Report XML_NS setting via XML_GetFeatureList(). - Fixed headers for use from C++. - XML_GetCurrentLineNumber() and XML_GetCurrentColumnNumber() now return unsigned integers. - Added XML_LARGE_SIZE switch to enable 64-bit integers for byte indexes and line/column numbers. - Updated to use libtool 1.5.22 (the most recent). - Added support for AmigaOS. - Some mostly minor bug fixes. SF issues include: 1006708, 1021776, 1023646, 1114960, 1156398, 1221160, 1271642. Release 1.95.8 Fri Jul 23 2004 - Major new feature: suspend/resume. Handlers can now request that a parse be suspended for later resumption or aborted altogether. See "Temporarily Stopping Parsing" in the documentation for more details. - Some mostly minor bug fixes, but compilation should no longer generate warnings on most platforms. SF issues include: 827319, 840173, 846309, 888329, 896188, 923913, 928113, 961698, 985192. Release 1.95.7 Mon Oct 20 2003 - Fixed enum XML_Status issue (reported on SourceForge many times), so compilers that are properly picky will be happy. - Introduced an XMLCALL macro to control the calling convention used by the Expat API; this macro should be used to annotate prototypes and definitions of callback implementations in code compiled with a calling convention other than the default convention for the host platform. - Improved ability to build without the configure-generated expat_config.h header. This is useful for applications which embed Expat rather than linking in the library. - Fixed a variety of bugs: see SF issues 458907, 609603, 676844, 679754, 692878, 692964, 695401, 699323, 699487, 820946. - Improved hash table lookups. - Added more regression tests and improved documentation. Release 1.95.6 Tue Jan 28 2003 - Added XML_FreeContentModel(). - Added XML_MemMalloc(), XML_MemRealloc(), XML_MemFree(). - Fixed a variety of bugs: see SF issues 615606, 616863, 618199, 653180, 673791. - Enhanced the regression test suite. - Man page improvements: includes SF issue 632146. Release 1.95.5 Fri Sep 6 2002 - Added XML_UseForeignDTD() for improved SAX2 support. - Added XML_GetFeatureList(). - Defined XML_Bool type and the values XML_TRUE and XML_FALSE. - Use an incomplete struct instead of a void* for the parser (may not retain). - Fixed UTF-8 decoding bug that caused legal UTF-8 to be rejected. - Finally fixed bug where default handler would report DTD events that were already handled by another handler. Initial patch contributed by Darryl Miles. - Removed unnecessary DllMain() function that caused static linking into a DLL to be difficult. - Added VC++ projects for building static libraries. - Reduced line-length for all source code and headers to be no longer than 80 characters, to help with AS/400 support. - Reduced memory copying during parsing (SF patch #600964). - Fixed a variety of bugs: see SF issues 580793, 434664, 483514, 580503, 581069, 584041, 584183, 584832, 585537, 596555, 596678, 598352, 598944, 599715, 600479, 600971. Release 1.95.4 Fri Jul 12 2002 - Added support for VMS, contributed by Craig Berry. See vms/README.vms for more information. - Added Mac OS (classic) support, with a makefile for MPW, contributed by Thomas Wegner and Daryle Walker. - Added Borland C++ Builder 5 / BCC 5.5 support, contributed by Patrick McConnell (SF patch #538032). - Fixed a variety of bugs: see SF issues 441449, 563184, 564342, 566334, 566901, 569461, 570263, 575168, 579196. - Made skippedEntityHandler conform to SAX2 (see source comment) - Re-implemented WFC: Entity Declared from XML 1.0 spec and added a new error "entity declared in parameter entity": see SF bug report 569461 and SF patch 578161 - Re-implemented section 5.1 from XML 1.0 spec: see SF bug report 570263 and SF patch 578161 Release 1.95.3 Mon Jun 3 2002 - Added a project to the MSVC workspace to create a wchar_t version of the library; the DLLs are named libexpatw.dll. - Changed the name of the Windows DLLs from expat.dll to libexpat.dll; this fixes SF bug #432456. - Added the XML_ParserReset() API function. - Fixed XML_SetReturnNSTriplet() to work for element names. - Made the XML_UNICODE builds usable (thanks, Karl!). - Allow xmlwf to read from standard input. - Install a man page for xmlwf on Unix systems. - Fixed many bugs; see SF bug reports 231864, 461380, 464837, 466885, 469226, 477667, 484419, 487840, 494749, 496505, 547350. Other bugs which we can't test as easily may also have been fixed, especially in the area of build support. Release 1.95.2 Fri Jul 27 2001 - More changes to make MSVC happy with the build; add a single workspace to support both the library and xmlwf application. - Added a Windows installer for Windows users; includes xmlwf.exe. - Added compile-time constants that can be used to determine the Expat version - Removed a lot of GNU-specific dependencies to aide portability among the various Unix flavors. - Fix the UTF-8 BOM bug. - Cleaned up warning messages for several compilers. - Added the -Wall, -Wstrict-prototypes options for GCC. Release 1.95.1 Sun Oct 22 15:11:36 EDT 2000 - Changes to get expat to build under Microsoft compiler - Removed all aborts and instead return an UNEXPECTED_STATE error. - Fixed a bug where a stray '%' in an entity value would cause an abort. - Defined XML_SetEndNamespaceDeclHandler. Thanks to Darryl Miles for finding this oversight. - Changed default patterns in lib/Makefile.in to fit non-GNU makes Thanks to robin@unrated.net for reporting and providing an account to test on. - The reference had the wrong label for XML_SetStartNamespaceDecl. Reported by an anonymous user. Release 1.95.0 Fri Sep 29 2000 - XML_ParserCreate_MM Allows you to set a memory management suite to replace the standard malloc,realloc, and free. - XML_SetReturnNSTriplet If you turn this feature on when namespace processing is in effect, then qualified, prefixed element and attribute names are returned as "uri|name|prefix" where '|' is whatever separator character is used in namespace processing. - Merged in features from perl-expat o XML_SetElementDeclHandler o XML_SetAttlistDeclHandler o XML_SetXmlDeclHandler o XML_SetEntityDeclHandler o StartDoctypeDeclHandler takes 3 additional parameters: sysid, pubid, has_internal_subset o Many paired handler setters (like XML_SetElementHandler) now have corresponding individual handler setters o XML_GetInputContext for getting the input context of the current parse position. - Added reference material - Packaged into a distribution that builds a sharable library genometools-1.5.1/src/external/expat-2.0.1/MANIFEST000077500000000000000000000043671211610345200214000ustar00rootroot00000000000000amiga/stdlib.c amiga/launch.c amiga/expat_vectors.c amiga/expat_lib.c amiga/expat.xml amiga/README.txt amiga/Makefile amiga/include/proto/expat.h amiga/include/libraries/expat.h amiga/include/interfaces/expat.h amiga/include/inline4/expat.h bcb5/README.txt bcb5/all_projects.bpg bcb5/elements.bpf bcb5/elements.bpr bcb5/elements.mak bcb5/expat.bpf bcb5/expat.bpr bcb5/expat.mak bcb5/expat_static.bpf bcb5/expat_static.bpr bcb5/expat_static.mak bcb5/expatw.bpf bcb5/expatw.bpr bcb5/expatw.mak bcb5/expatw_static.bpf bcb5/expatw_static.bpr bcb5/expatw_static.mak bcb5/libexpat_mtd.def bcb5/libexpatw_mtd.def bcb5/makefile.mak bcb5/outline.bpf bcb5/outline.bpr bcb5/outline.mak bcb5/setup.bat bcb5/xmlwf.bpf bcb5/xmlwf.bpr bcb5/xmlwf.mak doc/expat.png doc/reference.html doc/style.css doc/valid-xhtml10.png doc/xmlwf.1 doc/xmlwf.sgml COPYING Changes MANIFEST Makefile.in README configure configure.in expat_config.h.in expat.dsw conftools/PrintPath conftools/ac_c_bigendian_cross.m4 conftools/config.guess conftools/config.sub conftools/expat.m4 conftools/get-version.sh conftools/install-sh conftools/libtool.m4 conftools/ltmain.sh conftools/mkinstalldirs examples/elements.c examples/elements.dsp examples/outline.c examples/outline.dsp lib/Makefile.MPW lib/amigaconfig.h lib/ascii.h lib/asciitab.h lib/expat.dsp lib/expat.h lib/expat_external.h lib/expat_static.dsp lib/expatw.dsp lib/expatw_static.dsp lib/iasciitab.h lib/internal.h lib/latin1tab.h lib/libexpat.def lib/libexpatw.def lib/macconfig.h lib/nametab.h lib/utf8tab.h lib/winconfig.h lib/xmlparse.c lib/xmlrole.c lib/xmlrole.h lib/xmltok.c lib/xmltok.h lib/xmltok_impl.c lib/xmltok_impl.h lib/xmltok_ns.c tests/benchmark/README.txt tests/benchmark/benchmark.c tests/benchmark/benchmark.dsp tests/benchmark/benchmark.dsw tests/README.txt tests/chardata.c tests/chardata.h tests/minicheck.c tests/minicheck.h tests/runtests.c tests/runtestspp.cpp tests/xmltest.sh vms/README.vms vms/descrip.mms vms/expat_config.h win32/MANIFEST.txt win32/README.txt win32/expat.iss xmlwf/codepage.c xmlwf/codepage.h xmlwf/ct.c xmlwf/filemap.h xmlwf/readfilemap.c xmlwf/unixfilemap.c xmlwf/win32filemap.c xmlwf/xmlfile.c xmlwf/xmlfile.h xmlwf/xmlmime.c xmlwf/xmlmime.h xmlwf/xmltchar.h xmlwf/xmlurl.h xmlwf/xmlwf.c xmlwf/xmlwf.dsp xmlwf/xmlwin32url.cxx genometools-1.5.1/src/external/expat-2.0.1/README000077500000000000000000000131051211610345200211150ustar00rootroot00000000000000 Expat, Release 2.0.1 This is Expat, a C library for parsing XML, written by James Clark. Expat is a stream-oriented XML parser. This means that you register handlers with the parser before starting the parse. These handlers are called when the parser discovers the associated structures in the document being parsed. A start tag is an example of the kind of structures for which you may register handlers. Windows users should use the expat_win32bin package, which includes both precompiled libraries and executables, and source code for developers. Expat is free software. You may copy, distribute, and modify it under the terms of the License contained in the file COPYING distributed with this package. This license is the same as the MIT/X Consortium license. Versions of Expat that have an odd minor version (the middle number in the release above), are development releases and should be considered as beta software. Releases with even minor version numbers are intended to be production grade software. If you are building Expat from a check-out from the CVS repository, you need to run a script that generates the configure script using the GNU autoconf and libtool tools. To do this, you need to have autoconf 2.52 or newer and libtool 1.4 or newer (1.5 or newer preferred). Run the script like this: ./buildconf.sh Once this has been done, follow the same instructions as for building from a source distribution. To build Expat from a source distribution, you first run the configuration shell script in the top level distribution directory: ./configure There are many options which you may provide to configure (which you can discover by running configure with the --help option). But the one of most interest is the one that sets the installation directory. By default, the configure script will set things up to install libexpat into /usr/local/lib, expat.h into /usr/local/include, and xmlwf into /usr/local/bin. If, for example, you'd prefer to install into /home/me/mystuff/lib, /home/me/mystuff/include, and /home/me/mystuff/bin, you can tell configure about that with: ./configure --prefix=/home/me/mystuff Another interesting option is to enable 64-bit integer support for line and column numbers and the over-all byte index: ./configure CPPFLAGS=-DXML_LARGE_SIZE However, such a modification would be a breaking change to the ABI and is therefore not recommended for general use - e.g. as part of a Linux distribution - but rather for builds with special requirements. After running the configure script, the "make" command will build things and "make install" will install things into their proper location. Have a look at the "Makefile" to learn about additional "make" options. Note that you need to have write permission into the directories into which things will be installed. If you are interested in building Expat to provide document information in UTF-16 rather than the default UTF-8, follow these instructions (after having run "make distclean"): 1. For UTF-16 output as unsigned short (and version/error strings as char), run: ./configure CPPFLAGS=-DXML_UNICODE For UTF-16 output as wchar_t (incl. version/error strings), run: ./configure CFLAGS="-g -O2 -fshort-wchar" \ CPPFLAGS=-DXML_UNICODE_WCHAR_T 2. Edit the MakeFile, changing: LIBRARY = libexpat.la to: LIBRARY = libexpatw.la (Note the additional "w" in the library name.) 3. Run "make buildlib" (which builds the library only). Or, to save step 2, run "make buildlib LIBRARY=libexpatw.la". 4. Run "make installlib" (which installs the library only). Or, if step 2 was omitted, run "make installlib LIBRARY=libexpatw.la". Using DESTDIR or INSTALL_ROOT is enabled, with INSTALL_ROOT being the default value for DESTDIR, and the rest of the make file using only DESTDIR. It works as follows: $ make install DESTDIR=/path/to/image overrides the in-makefile set DESTDIR, while both $ INSTALL_ROOT=/path/to/image make install $ make install INSTALL_ROOT=/path/to/image use DESTDIR=$(INSTALL_ROOT), even if DESTDIR eventually is defined in the environment, because variable-setting priority is 1) commandline 2) in-makefile 3) environment Note for Solaris users: The "ar" command is usually located in "/usr/ccs/bin", which is not in the default PATH. You will need to add this to your path for the "make" command, and probably also switch to GNU make (the "make" found in /usr/ccs/bin does not seem to work properly -- appearantly it does not understand .PHONY directives). If you're using ksh or bash, use this command to build: PATH=/usr/ccs/bin:$PATH make When using Expat with a project using autoconf for configuration, you can use the probing macro in conftools/expat.m4 to determine how to include Expat. See the comments at the top of that file for more information. A reference manual is available in the file doc/reference.html in this distribution. The homepage for this project is http://www.libexpat.org/. There are links there to connect you to the bug reports page. If you need to report a bug when you don't have access to a browser, you may also send a bug report by email to expat-bugs@mail.libexpat.org. Discussion related to the direction of future expat development takes place on expat-discuss@mail.libexpat.org. Archives of this list and other Expat-related lists may be found at: http://mail.libexpat.org/mailman/listinfo/ genometools-1.5.1/src/external/expat-2.0.1/examples/000077500000000000000000000000001211610345200220505ustar00rootroot00000000000000genometools-1.5.1/src/external/expat-2.0.1/examples/elements.c000077500000000000000000000031211211610345200240300ustar00rootroot00000000000000/* This is simple demonstration of how to use expat. This program reads an XML document from standard input and writes a line with the name of each element to standard output indenting child elements by one tab stop more than their parent element. It must be used with Expat compiled for UTF-8 output. */ #include #include "expat.h" #if defined(__amigaos__) && defined(__USE_INLINE__) #include #endif #ifdef XML_LARGE_SIZE #if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 #define XML_FMT_INT_MOD "I64" #else #define XML_FMT_INT_MOD "ll" #endif #else #define XML_FMT_INT_MOD "l" #endif static void XMLCALL startElement(void *userData, const char *name, const char **atts) { int i; int *depthPtr = (int *)userData; for (i = 0; i < *depthPtr; i++) putchar('\t'); puts(name); *depthPtr += 1; } static void XMLCALL endElement(void *userData, const char *name) { int *depthPtr = (int *)userData; *depthPtr -= 1; } int main(int argc, char *argv[]) { char buf[BUFSIZ]; XML_Parser parser = XML_ParserCreate(NULL); int done; int depth = 0; XML_SetUserData(parser, &depth); XML_SetElementHandler(parser, startElement, endElement); do { int len = (int)fread(buf, 1, sizeof(buf), stdin); done = len < sizeof(buf); if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) { fprintf(stderr, "%s at line %" XML_FMT_INT_MOD "u\n", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser)); return 1; } } while (!done); XML_ParserFree(parser); return 0; } genometools-1.5.1/src/external/expat-2.0.1/examples/elements.dsp000077500000000000000000000103421211610345200243770ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="elements" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=elements - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "elements.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "elements.mak" CFG="elements - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "elements - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "elements - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "elements - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\win32\bin\Release" # PROP Intermediate_Dir "..\win32\tmp\Release-elements" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "..\lib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "XML_STATIC" /FD /c # SUBTRACT CPP /X /YX # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 odbccp32.lib libexpatMT.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\win32\bin\Release" !ELSEIF "$(CFG)" == "elements - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\win32\bin\Debug" # PROP Intermediate_Dir "..\win32\tmp\Debug-elements" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "..\lib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "XML_STATIC" /FR /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 odbccp32.lib libexpatMT.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\win32\bin\Debug" !ENDIF # Begin Target # Name "elements - Win32 Release" # Name "elements - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\elements.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project genometools-1.5.1/src/external/expat-2.0.1/examples/outline.c000077500000000000000000000045571211610345200237110ustar00rootroot00000000000000/***************************************************************** * outline.c * * Copyright 1999, Clark Cooper * All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the license contained in the * COPYING file that comes with the expat distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * Read an XML document from standard input and print an element * outline on standard output. * Must be used with Expat compiled for UTF-8 output. */ #include #include #if defined(__amigaos__) && defined(__USE_INLINE__) #include #endif #ifdef XML_LARGE_SIZE #if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 #define XML_FMT_INT_MOD "I64" #else #define XML_FMT_INT_MOD "ll" #endif #else #define XML_FMT_INT_MOD "l" #endif #define BUFFSIZE 8192 char Buff[BUFFSIZE]; int Depth; static void XMLCALL start(void *data, const char *el, const char **attr) { int i; for (i = 0; i < Depth; i++) printf(" "); printf("%s", el); for (i = 0; attr[i]; i += 2) { printf(" %s='%s'", attr[i], attr[i + 1]); } printf("\n"); Depth++; } static void XMLCALL end(void *data, const char *el) { Depth--; } int main(int argc, char *argv[]) { XML_Parser p = XML_ParserCreate(NULL); if (! p) { fprintf(stderr, "Couldn't allocate memory for parser\n"); exit(-1); } XML_SetElementHandler(p, start, end); for (;;) { int done; int len; len = (int)fread(Buff, 1, BUFFSIZE, stdin); if (ferror(stdin)) { fprintf(stderr, "Read error\n"); exit(-1); } done = feof(stdin); if (XML_Parse(p, Buff, len, done) == XML_STATUS_ERROR) { fprintf(stderr, "Parse error at line %" XML_FMT_INT_MOD "u:\n%s\n", XML_GetCurrentLineNumber(p), XML_ErrorString(XML_GetErrorCode(p))); exit(-1); } if (done) break; } XML_ParserFree(p); return 0; } genometools-1.5.1/src/external/expat-2.0.1/examples/outline.dsp000077500000000000000000000105621211610345200242460ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="outline" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=outline - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "outline.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "outline.mak" CFG="outline - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "outline - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "outline - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "outline - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\win32\bin\Release" # PROP Intermediate_Dir "..\win32\tmp\Release-outline" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "..\lib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c # SUBTRACT CPP /X /YX # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /machine:I386 !ELSEIF "$(CFG)" == "outline - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\win32\bin\Debug" # PROP Intermediate_Dir "..\win32\tmp\Debug-outline" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\lib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 !ENDIF # Begin Target # Name "outline - Win32 Release" # Name "outline - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\outline.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project genometools-1.5.1/src/external/expat-2.0.1/lib/000077500000000000000000000000001211610345200210005ustar00rootroot00000000000000genometools-1.5.1/src/external/expat-2.0.1/lib/Makefile.MPW000077500000000000000000000107671211610345200231200ustar00rootroot00000000000000# File: Makefile.MPW # Targets: All, Dynamic, Static (and Clean, Clean-All) # Created: Tuesday, July 02, 2002 # # MPW Makefile for building expat under the "classic" (i.e. pre-X) Mac OS # Copyright 2002 Daryle Walker # Portions Copyright 2002 Thomas Wegner # See the COPYING file for distribution information # # Description: # This Makefile lets you build static, dynamic (i.e. shared) and stub # versions of the expat library as well as the elements.c and outline.c # examples (built as tools for MPW). This is for PPC only; it should be # no problem to build a 68K version of the expat library, though. # # Usage: # Buildprogram All # or Buildprogram Dynamic # or Buildprogram Static # # Note: You first have to rename this file to "Makefile", or the Buildprogram # commando will not recognize it. # MAKEFILE = Makefile MondoBuild = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified ObjDir = : SrcDir = : HdrDir = : ToolDir = ::examples: Includes = -i {HdrDir} Sym-PPC = -sym off Defines = -d MACOS_CLASSIC PPCCOptions = {Includes} {Sym-PPC} -w 35 {Defines} FragName = libexpat ### Source Files ### SrcFiles = "{SrcDir}xmlparse.c" "{SrcDir}xmlrole.c" "{SrcDir}xmltok.c" ToolSrcFiles = "{ToolDir}elements.c" "{ToolDir}outline.c" ### Object Files ### ObjFiles-PPC = "{ObjDir}xmlparse.c.o" "{ObjDir}xmlrole.c.o" "{ObjDir}xmltok.c.o" ElementToolObjFile = "{ObjDir}elements.c.o" OutlineToolObjFile = "{ObjDir}outline.c.o" ### Libraries ### StLibFiles-PPC = "{PPCLibraries}StdCRuntime.o" "{PPCLibraries}PPCCRuntime.o" "{PPCLibraries}PPCToolLibs.o" ShLibFiles-PPC = "{SharedLibraries}InterfaceLib" "{SharedLibraries}StdCLib" "{SharedLibraries}MathLib" LibFiles-PPC = {StLibFiles-PPC} {ShLibFiles-PPC} ### Special Files ### ExportFile = "{ObjDir}{FragName}.exp" StLibFile = "{ObjDir}{FragName}.MrC.o" ShLibFile = "{ObjDir}{FragName}" StubFile = "{ObjDir}{FragName}.stub" ElementsTool = "{ToolDir}elements" OutlineTool = "{ToolDir}outline" ### Default Rules ### .c.o .c {MondoBuild} {PPCC} {depDir}{default}.c -o {targDir}{default}.c.o {PPCCOptions} ### Build Rules ### All Dynamic {ElementsTool} {OutlineTool} Static {StLibFile} Dynamic Static {ShLibFile} {StubFile} {StLibFile} {ObjFiles-PPC} {StLibFiles-PPC} {MondoBuild} PPCLink -o {Targ} {ObjFiles-PPC} {StLibFiles-PPC} {Sym-PPC} -mf -d -t 'XCOF' -c 'MPS ' -xm l {ShLibFile} {StLibFile} {ShLibFiles-PPC} {ExportFile} {MondoBuild} PPCLink -o {Targ} {StLibFile} {ShLibFiles-PPC} {Sym-PPC} -@export {ExportFile} -fragname {FragName} -mf -d -t 'shlb' -c '????' -xm s {StubFile} {ShLibFile} {MondoBuild} shlb2stub -o {Targ} {ShLibFile} {ElementsTool} {ElementToolObjFile} {StubFile} {LibFiles-PPC} {MondoBuild} PPCLink -o {Targ} {ElementToolObjFile} {StLibFile} {LibFiles-PPC} {Sym-PPC} -mf -d -t 'MPST' -c 'MPS ' {OutlineTool} {OutlineToolObjFile} {StubFile} {LibFiles-PPC} {MondoBuild} PPCLink -o {Targ} {OutlineToolObjFile} {StLibFile} {LibFiles-PPC} {Sym-PPC} -mf -d -t 'MPST' -c 'MPS ' ### Special Rules ### {ExportFile} "{HdrDir}expat.h" {MondoBuild} StreamEdit -d -e "/('XMLPARSEAPI('') ')0,1'XML_'([A-Za-z0-9_]+)1'('/ Print 'XML_' 1" "{HdrDir}expat.h" > {Targ} ### Required Dependencies ### "{ObjDir}xmlparse.c.o" "{SrcDir}xmlparse.c" "{ObjDir}xmlrole.c.o" "{SrcDir}xmlrole.c" "{ObjDir}xmltok.c.o" "{SrcDir}xmltok.c" "{ObjDir}elements.c.o" "{ToolDir}elements.c" "{ObjDir}outline.c.o" "{ToolDir}outline.c" ### Optional Dependencies ### ### Build this target to clean out generated intermediate files. ### Clean Delete {ObjFiles-PPC} {ExportFile} {ElementToolObjFile} {OutlineToolObjFile} ### Build this target to clean out all generated files. ### Clean-All Clean Delete {StLibFile} {ShLibFile} {StubFile} {ElementsTool} {OutlineTool} ### Build this target to generate "include file" dependencies. ### Dependencies $OutOfDate MakeDepend -append {MAKEFILE} -ignore "{CIncludes}" -objdir "{ObjDir}" -objext .o {Defines} {Includes} {SrcFiles} genometools-1.5.1/src/external/expat-2.0.1/lib/amigaconfig.h000077500000000000000000000014351211610345200234230ustar00rootroot00000000000000#ifndef AMIGACONFIG_H #define AMIGACONFIG_H /* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ #define BYTEORDER 4321 /* Define to 1 if you have the `bcopy' function. */ #define HAVE_BCOPY 1 /* Define to 1 if you have the header file. */ #undef HAVE_CHECK_H /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* whether byteorder is bigendian */ #define WORDS_BIGENDIAN /* Define to specify how much context to retain around the current parse point. */ #define XML_CONTEXT_BYTES 1024 /* Define to make parameter entity parsing functionality available. */ #define XML_DTD /* Define to make XML Namespaces functionality available. */ #define XML_NS #endif /* AMIGACONFIG_H */ genometools-1.5.1/src/external/expat-2.0.1/lib/ascii.h000077500000000000000000000037011211610345200222450ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #define ASCII_A 0x41 #define ASCII_B 0x42 #define ASCII_C 0x43 #define ASCII_D 0x44 #define ASCII_E 0x45 #define ASCII_F 0x46 #define ASCII_G 0x47 #define ASCII_H 0x48 #define ASCII_I 0x49 #define ASCII_J 0x4A #define ASCII_K 0x4B #define ASCII_L 0x4C #define ASCII_M 0x4D #define ASCII_N 0x4E #define ASCII_O 0x4F #define ASCII_P 0x50 #define ASCII_Q 0x51 #define ASCII_R 0x52 #define ASCII_S 0x53 #define ASCII_T 0x54 #define ASCII_U 0x55 #define ASCII_V 0x56 #define ASCII_W 0x57 #define ASCII_X 0x58 #define ASCII_Y 0x59 #define ASCII_Z 0x5A #define ASCII_a 0x61 #define ASCII_b 0x62 #define ASCII_c 0x63 #define ASCII_d 0x64 #define ASCII_e 0x65 #define ASCII_f 0x66 #define ASCII_g 0x67 #define ASCII_h 0x68 #define ASCII_i 0x69 #define ASCII_j 0x6A #define ASCII_k 0x6B #define ASCII_l 0x6C #define ASCII_m 0x6D #define ASCII_n 0x6E #define ASCII_o 0x6F #define ASCII_p 0x70 #define ASCII_q 0x71 #define ASCII_r 0x72 #define ASCII_s 0x73 #define ASCII_t 0x74 #define ASCII_u 0x75 #define ASCII_v 0x76 #define ASCII_w 0x77 #define ASCII_x 0x78 #define ASCII_y 0x79 #define ASCII_z 0x7A #define ASCII_0 0x30 #define ASCII_1 0x31 #define ASCII_2 0x32 #define ASCII_3 0x33 #define ASCII_4 0x34 #define ASCII_5 0x35 #define ASCII_6 0x36 #define ASCII_7 0x37 #define ASCII_8 0x38 #define ASCII_9 0x39 #define ASCII_TAB 0x09 #define ASCII_SPACE 0x20 #define ASCII_EXCL 0x21 #define ASCII_QUOT 0x22 #define ASCII_AMP 0x26 #define ASCII_APOS 0x27 #define ASCII_MINUS 0x2D #define ASCII_PERIOD 0x2E #define ASCII_COLON 0x3A #define ASCII_SEMI 0x3B #define ASCII_LT 0x3C #define ASCII_EQUALS 0x3D #define ASCII_GT 0x3E #define ASCII_LSQB 0x5B #define ASCII_RSQB 0x5D #define ASCII_UNDERSCORE 0x5F #define ASCII_LPAREN 0x28 #define ASCII_RPAREN 0x29 #define ASCII_FF 0x0C #define ASCII_SLASH 0x2F #define ASCII_HASH 0x23 #define ASCII_PIPE 0x7C #define ASCII_COMMA 0x2C genometools-1.5.1/src/external/expat-2.0.1/lib/asciitab.h000077500000000000000000000033401211610345200227330ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, /* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML, /* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, /* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, /* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, /* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, /* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, /* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, /* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, /* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, /* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, genometools-1.5.1/src/external/expat-2.0.1/lib/expat.dsp000077500000000000000000000125311211610345200226360ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="expat" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=expat - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "expat.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "expat.mak" CFG="expat - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "expat - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "expat - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "expat - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\win32\bin\Release" # PROP Intermediate_Dir "..\win32\tmp\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXPAT_EXPORTS" /Yu"stdafx.h" /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILED_FROM_DSP" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"..\win32\bin\Release/libexpat.dll" !ELSEIF "$(CFG)" == "expat - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\win32\bin\Debug" # PROP Intermediate_Dir "..\win32\tmp\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXPAT_EXPORTS" /Yu"stdafx.h" /FD /GZ /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /D "_DEBUG" /D "COMPILED_FROM_DSP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"..\win32\bin\Debug/libexpat.dll" !ENDIF # Begin Target # Name "expat - Win32 Release" # Name "expat - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\libexpat.def # End Source File # Begin Source File SOURCE=.\xmlparse.c !IF "$(CFG)" == "expat - Win32 Release" !ELSEIF "$(CFG)" == "expat - Win32 Debug" # ADD CPP /GX- /Od !ENDIF # End Source File # Begin Source File SOURCE=.\xmlrole.c # End Source File # Begin Source File SOURCE=.\xmltok.c # End Source File # Begin Source File SOURCE=.\xmltok_impl.c # End Source File # Begin Source File SOURCE=.\xmltok_ns.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\ascii.h # End Source File # Begin Source File SOURCE=.\asciitab.h # End Source File # Begin Source File SOURCE=.\expat.h # End Source File # Begin Source File SOURCE=.\expat_external.h # End Source File # Begin Source File SOURCE=.\iasciitab.h # End Source File # Begin Source File SOURCE=.\internal.h # End Source File # Begin Source File SOURCE=.\latin1tab.h # End Source File # Begin Source File SOURCE=.\nametab.h # End Source File # Begin Source File SOURCE=.\utf8tab.h # End Source File # Begin Source File SOURCE=.\xmlrole.h # End Source File # Begin Source File SOURCE=.\xmltok.h # End Source File # Begin Source File SOURCE=.\xmltok_impl.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project genometools-1.5.1/src/external/expat-2.0.1/lib/expat.h000077500000000000000000001166231211610345200223060ustar00rootroot00000000000000/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #ifndef Expat_INCLUDED #define Expat_INCLUDED 1 #ifdef __VMS /* 0 1 2 3 0 1 2 3 1234567890123456789012345678901 1234567890123456789012345678901 */ #define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler #define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler #define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler #define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg #endif #include #include "expat_external.h" #ifdef __cplusplus extern "C" { #endif struct XML_ParserStruct; typedef struct XML_ParserStruct *XML_Parser; /* Should this be defined using stdbool.h when C99 is available? */ typedef unsigned char XML_Bool; #define XML_TRUE ((XML_Bool) 1) #define XML_FALSE ((XML_Bool) 0) /* The XML_Status enum gives the possible return values for several API functions. The preprocessor #defines are included so this stanza can be added to code that still needs to support older versions of Expat 1.95.x: #ifndef XML_STATUS_OK #define XML_STATUS_OK 1 #define XML_STATUS_ERROR 0 #endif Otherwise, the #define hackery is quite ugly and would have been dropped. */ enum XML_Status { XML_STATUS_ERROR = 0, #define XML_STATUS_ERROR XML_STATUS_ERROR XML_STATUS_OK = 1, #define XML_STATUS_OK XML_STATUS_OK XML_STATUS_SUSPENDED = 2 #define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED }; enum XML_Error { XML_ERROR_NONE, XML_ERROR_NO_MEMORY, XML_ERROR_SYNTAX, XML_ERROR_NO_ELEMENTS, XML_ERROR_INVALID_TOKEN, XML_ERROR_UNCLOSED_TOKEN, XML_ERROR_PARTIAL_CHAR, XML_ERROR_TAG_MISMATCH, XML_ERROR_DUPLICATE_ATTRIBUTE, XML_ERROR_JUNK_AFTER_DOC_ELEMENT, XML_ERROR_PARAM_ENTITY_REF, XML_ERROR_UNDEFINED_ENTITY, XML_ERROR_RECURSIVE_ENTITY_REF, XML_ERROR_ASYNC_ENTITY, XML_ERROR_BAD_CHAR_REF, XML_ERROR_BINARY_ENTITY_REF, XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, XML_ERROR_MISPLACED_XML_PI, XML_ERROR_UNKNOWN_ENCODING, XML_ERROR_INCORRECT_ENCODING, XML_ERROR_UNCLOSED_CDATA_SECTION, XML_ERROR_EXTERNAL_ENTITY_HANDLING, XML_ERROR_NOT_STANDALONE, XML_ERROR_UNEXPECTED_STATE, XML_ERROR_ENTITY_DECLARED_IN_PE, XML_ERROR_FEATURE_REQUIRES_XML_DTD, XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, /* Added in 1.95.7. */ XML_ERROR_UNBOUND_PREFIX, /* Added in 1.95.8. */ XML_ERROR_UNDECLARING_PREFIX, XML_ERROR_INCOMPLETE_PE, XML_ERROR_XML_DECL, XML_ERROR_TEXT_DECL, XML_ERROR_PUBLICID, XML_ERROR_SUSPENDED, XML_ERROR_NOT_SUSPENDED, XML_ERROR_ABORTED, XML_ERROR_FINISHED, XML_ERROR_SUSPEND_PE, /* Added in 2.0. */ XML_ERROR_RESERVED_PREFIX_XML, XML_ERROR_RESERVED_PREFIX_XMLNS, XML_ERROR_RESERVED_NAMESPACE_URI }; enum XML_Content_Type { XML_CTYPE_EMPTY = 1, XML_CTYPE_ANY, XML_CTYPE_MIXED, XML_CTYPE_NAME, XML_CTYPE_CHOICE, XML_CTYPE_SEQ }; enum XML_Content_Quant { XML_CQUANT_NONE, XML_CQUANT_OPT, XML_CQUANT_REP, XML_CQUANT_PLUS }; /* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be XML_CQUANT_NONE, and the other fields will be zero or NULL. If type == XML_CTYPE_MIXED, then quant will be NONE or REP and numchildren will contain number of elements that may be mixed in and children point to an array of XML_Content cells that will be all of XML_CTYPE_NAME type with no quantification. If type == XML_CTYPE_NAME, then the name points to the name, and the numchildren field will be zero and children will be NULL. The quant fields indicates any quantifiers placed on the name. CHOICE and SEQ will have name NULL, the number of children in numchildren and children will point, recursively, to an array of XML_Content cells. The EMPTY, ANY, and MIXED types will only occur at top level. */ typedef struct XML_cp XML_Content; struct XML_cp { enum XML_Content_Type type; enum XML_Content_Quant quant; XML_Char * name; unsigned int numchildren; XML_Content * children; }; /* This is called for an element declaration. See above for description of the model argument. It's the caller's responsibility to free model when finished with it. */ typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData, const XML_Char *name, XML_Content *model); XMLPARSEAPI(void) XML_SetElementDeclHandler(XML_Parser parser, XML_ElementDeclHandler eldecl); /* The Attlist declaration handler is called for *each* attribute. So a single Attlist declaration with multiple attributes declared will generate multiple calls to this handler. The "default" parameter may be NULL in the case of the "#IMPLIED" or "#REQUIRED" keyword. The "isrequired" parameter will be true and the default value will be NULL in the case of "#REQUIRED". If "isrequired" is true and default is non-NULL, then this is a "#FIXED" default. */ typedef void (XMLCALL *XML_AttlistDeclHandler) ( void *userData, const XML_Char *elname, const XML_Char *attname, const XML_Char *att_type, const XML_Char *dflt, int isrequired); XMLPARSEAPI(void) XML_SetAttlistDeclHandler(XML_Parser parser, XML_AttlistDeclHandler attdecl); /* The XML declaration handler is called for *both* XML declarations and text declarations. The way to distinguish is that the version parameter will be NULL for text declarations. The encoding parameter may be NULL for XML declarations. The standalone parameter will be -1, 0, or 1 indicating respectively that there was no standalone parameter in the declaration, that it was given as no, or that it was given as yes. */ typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData, const XML_Char *version, const XML_Char *encoding, int standalone); XMLPARSEAPI(void) XML_SetXmlDeclHandler(XML_Parser parser, XML_XmlDeclHandler xmldecl); typedef struct { void *(*malloc_fcn)(size_t size); void *(*realloc_fcn)(void *ptr, size_t size); void (*free_fcn)(void *ptr); } XML_Memory_Handling_Suite; /* Constructs a new parser; encoding is the encoding specified by the external protocol or NULL if there is none specified. */ XMLPARSEAPI(XML_Parser) XML_ParserCreate(const XML_Char *encoding); /* Constructs a new parser and namespace processor. Element type names and attribute names that belong to a namespace will be expanded; unprefixed attribute names are never expanded; unprefixed element type names are expanded only if there is a default namespace. The expanded name is the concatenation of the namespace URI, the namespace separator character, and the local part of the name. If the namespace separator is '\0' then the namespace URI and the local part will be concatenated without any separator. It is a programming error to use the separator '\0' with namespace triplets (see XML_SetReturnNSTriplet). */ XMLPARSEAPI(XML_Parser) XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); /* Constructs a new parser using the memory management suite referred to by memsuite. If memsuite is NULL, then use the standard library memory suite. If namespaceSeparator is non-NULL it creates a parser with namespace processing as described above. The character pointed at will serve as the namespace separator. All further memory operations used for the created parser will come from the given suite. */ XMLPARSEAPI(XML_Parser) XML_ParserCreate_MM(const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, const XML_Char *namespaceSeparator); /* Prepare a parser object to be re-used. This is particularly valuable when memory allocation overhead is disproportionatly high, such as when a large number of small documnents need to be parsed. All handlers are cleared from the parser, except for the unknownEncodingHandler. The parser's external state is re-initialized except for the values of ns and ns_triplets. Added in Expat 1.95.3. */ XMLPARSEAPI(XML_Bool) XML_ParserReset(XML_Parser parser, const XML_Char *encoding); /* atts is array of name/value pairs, terminated by 0; names and values are 0 terminated. */ typedef void (XMLCALL *XML_StartElementHandler) (void *userData, const XML_Char *name, const XML_Char **atts); typedef void (XMLCALL *XML_EndElementHandler) (void *userData, const XML_Char *name); /* s is not 0 terminated. */ typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData, const XML_Char *s, int len); /* target and data are 0 terminated */ typedef void (XMLCALL *XML_ProcessingInstructionHandler) ( void *userData, const XML_Char *target, const XML_Char *data); /* data is 0 terminated */ typedef void (XMLCALL *XML_CommentHandler) (void *userData, const XML_Char *data); typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData); typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData); /* This is called for any characters in the XML document for which there is no applicable handler. This includes both characters that are part of markup which is of a kind that is not reported (comments, markup declarations), or characters that are part of a construct which could be reported but for which no handler has been supplied. The characters are passed exactly as they were in the XML document except that they will be encoded in UTF-8 or UTF-16. Line boundaries are not normalized. Note that a byte order mark character is not passed to the default handler. There are no guarantees about how characters are divided between calls to the default handler: for example, a comment might be split between multiple calls. */ typedef void (XMLCALL *XML_DefaultHandler) (void *userData, const XML_Char *s, int len); /* This is called for the start of the DOCTYPE declaration, before any DTD or internal subset is parsed. */ typedef void (XMLCALL *XML_StartDoctypeDeclHandler) ( void *userData, const XML_Char *doctypeName, const XML_Char *sysid, const XML_Char *pubid, int has_internal_subset); /* This is called for the start of the DOCTYPE declaration when the closing > is encountered, but after processing any external subset. */ typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); /* This is called for entity declarations. The is_parameter_entity argument will be non-zero if the entity is a parameter entity, zero otherwise. For internal entities (), value will be non-NULL and systemId, publicID, and notationName will be NULL. The value string is NOT nul-terminated; the length is provided in the value_length argument. Since it is legal to have zero-length values, do not use this argument to test for internal entities. For external entities, value will be NULL and systemId will be non-NULL. The publicId argument will be NULL unless a public identifier was provided. The notationName argument will have a non-NULL value only for unparsed entity declarations. Note that is_parameter_entity can't be changed to XML_Bool, since that would break binary compatibility. */ typedef void (XMLCALL *XML_EntityDeclHandler) ( void *userData, const XML_Char *entityName, int is_parameter_entity, const XML_Char *value, int value_length, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName); XMLPARSEAPI(void) XML_SetEntityDeclHandler(XML_Parser parser, XML_EntityDeclHandler handler); /* OBSOLETE -- OBSOLETE -- OBSOLETE This handler has been superceded by the EntityDeclHandler above. It is provided here for backward compatibility. This is called for a declaration of an unparsed (NDATA) entity. The base argument is whatever was set by XML_SetBase. The entityName, systemId and notationName arguments will never be NULL. The other arguments may be. */ typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) ( void *userData, const XML_Char *entityName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName); /* This is called for a declaration of notation. The base argument is whatever was set by XML_SetBase. The notationName will never be NULL. The other arguments can be. */ typedef void (XMLCALL *XML_NotationDeclHandler) ( void *userData, const XML_Char *notationName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId); /* When namespace processing is enabled, these are called once for each namespace declaration. The call to the start and end element handlers occur between the calls to the start and end namespace declaration handlers. For an xmlns attribute, prefix will be NULL. For an xmlns="" attribute, uri will be NULL. */ typedef void (XMLCALL *XML_StartNamespaceDeclHandler) ( void *userData, const XML_Char *prefix, const XML_Char *uri); typedef void (XMLCALL *XML_EndNamespaceDeclHandler) ( void *userData, const XML_Char *prefix); /* This is called if the document is not standalone, that is, it has an external subset or a reference to a parameter entity, but does not have standalone="yes". If this handler returns XML_STATUS_ERROR, then processing will not continue, and the parser will return a XML_ERROR_NOT_STANDALONE error. If parameter entity parsing is enabled, then in addition to the conditions above this handler will only be called if the referenced entity was actually read. */ typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData); /* This is called for a reference to an external parsed general entity. The referenced entity is not automatically parsed. The application can parse it immediately or later using XML_ExternalEntityParserCreate. The parser argument is the parser parsing the entity containing the reference; it can be passed as the parser argument to XML_ExternalEntityParserCreate. The systemId argument is the system identifier as specified in the entity declaration; it will not be NULL. The base argument is the system identifier that should be used as the base for resolving systemId if systemId was relative; this is set by XML_SetBase; it may be NULL. The publicId argument is the public identifier as specified in the entity declaration, or NULL if none was specified; the whitespace in the public identifier will have been normalized as required by the XML spec. The context argument specifies the parsing context in the format expected by the context argument to XML_ExternalEntityParserCreate; context is valid only until the handler returns, so if the referenced entity is to be parsed later, it must be copied. context is NULL only when the entity is a parameter entity. The handler should return XML_STATUS_ERROR if processing should not continue because of a fatal error in the handling of the external entity. In this case the calling parser will return an XML_ERROR_EXTERNAL_ENTITY_HANDLING error. Note that unlike other handlers the first argument is the parser, not userData. */ typedef int (XMLCALL *XML_ExternalEntityRefHandler) ( XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId); /* This is called in two situations: 1) An entity reference is encountered for which no declaration has been read *and* this is not an error. 2) An internal entity reference is read, but not expanded, because XML_SetDefaultHandler has been called. Note: skipped parameter entities in declarations and skipped general entities in attribute values cannot be reported, because the event would be out of sync with the reporting of the declarations or attribute values */ typedef void (XMLCALL *XML_SkippedEntityHandler) ( void *userData, const XML_Char *entityName, int is_parameter_entity); /* This structure is filled in by the XML_UnknownEncodingHandler to provide information to the parser about encodings that are unknown to the parser. The map[b] member gives information about byte sequences whose first byte is b. If map[b] is c where c is >= 0, then b by itself encodes the Unicode scalar value c. If map[b] is -1, then the byte sequence is malformed. If map[b] is -n, where n >= 2, then b is the first byte of an n-byte sequence that encodes a single Unicode scalar value. The data member will be passed as the first argument to the convert function. The convert function is used to convert multibyte sequences; s will point to a n-byte sequence where map[(unsigned char)*s] == -n. The convert function must return the Unicode scalar value represented by this byte sequence or -1 if the byte sequence is malformed. The convert function may be NULL if the encoding is a single-byte encoding, that is if map[b] >= -1 for all bytes b. When the parser is finished with the encoding, then if release is not NULL, it will call release passing it the data member; once release has been called, the convert function will not be called again. Expat places certain restrictions on the encodings that are supported using this mechanism. 1. Every ASCII character that can appear in a well-formed XML document, other than the characters $@\^`{}~ must be represented by a single byte, and that byte must be the same byte that represents that character in ASCII. 2. No character may require more than 4 bytes to encode. 3. All characters encoded must have Unicode scalar values <= 0xFFFF, (i.e., characters that would be encoded by surrogates in UTF-16 are not allowed). Note that this restriction doesn't apply to the built-in support for UTF-8 and UTF-16. 4. No Unicode character may be encoded by more than one distinct sequence of bytes. */ typedef struct { int map[256]; void *data; int (XMLCALL *convert)(void *data, const char *s); void (XMLCALL *release)(void *data); } XML_Encoding; /* This is called for an encoding that is unknown to the parser. The encodingHandlerData argument is that which was passed as the second argument to XML_SetUnknownEncodingHandler. The name argument gives the name of the encoding as specified in the encoding declaration. If the callback can provide information about the encoding, it must fill in the XML_Encoding structure, and return XML_STATUS_OK. Otherwise it must return XML_STATUS_ERROR. If info does not describe a suitable encoding, then the parser will return an XML_UNKNOWN_ENCODING error. */ typedef int (XMLCALL *XML_UnknownEncodingHandler) ( void *encodingHandlerData, const XML_Char *name, XML_Encoding *info); XMLPARSEAPI(void) XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end); XMLPARSEAPI(void) XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler handler); XMLPARSEAPI(void) XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler handler); XMLPARSEAPI(void) XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler); XMLPARSEAPI(void) XML_SetProcessingInstructionHandler(XML_Parser parser, XML_ProcessingInstructionHandler handler); XMLPARSEAPI(void) XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler); XMLPARSEAPI(void) XML_SetCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start, XML_EndCdataSectionHandler end); XMLPARSEAPI(void) XML_SetStartCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start); XMLPARSEAPI(void) XML_SetEndCdataSectionHandler(XML_Parser parser, XML_EndCdataSectionHandler end); /* This sets the default handler and also inhibits expansion of internal entities. These entity references will be passed to the default handler, or to the skipped entity handler, if one is set. */ XMLPARSEAPI(void) XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler); /* This sets the default handler but does not inhibit expansion of internal entities. The entity reference will not be passed to the default handler. */ XMLPARSEAPI(void) XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler); XMLPARSEAPI(void) XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, XML_EndDoctypeDeclHandler end); XMLPARSEAPI(void) XML_SetStartDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start); XMLPARSEAPI(void) XML_SetEndDoctypeDeclHandler(XML_Parser parser, XML_EndDoctypeDeclHandler end); XMLPARSEAPI(void) XML_SetUnparsedEntityDeclHandler(XML_Parser parser, XML_UnparsedEntityDeclHandler handler); XMLPARSEAPI(void) XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler); XMLPARSEAPI(void) XML_SetNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end); XMLPARSEAPI(void) XML_SetStartNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start); XMLPARSEAPI(void) XML_SetEndNamespaceDeclHandler(XML_Parser parser, XML_EndNamespaceDeclHandler end); XMLPARSEAPI(void) XML_SetNotStandaloneHandler(XML_Parser parser, XML_NotStandaloneHandler handler); XMLPARSEAPI(void) XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler handler); /* If a non-NULL value for arg is specified here, then it will be passed as the first argument to the external entity ref handler instead of the parser object. */ XMLPARSEAPI(void) XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg); XMLPARSEAPI(void) XML_SetSkippedEntityHandler(XML_Parser parser, XML_SkippedEntityHandler handler); XMLPARSEAPI(void) XML_SetUnknownEncodingHandler(XML_Parser parser, XML_UnknownEncodingHandler handler, void *encodingHandlerData); /* This can be called within a handler for a start element, end element, processing instruction or character data. It causes the corresponding markup to be passed to the default handler. */ XMLPARSEAPI(void) XML_DefaultCurrent(XML_Parser parser); /* If do_nst is non-zero, and namespace processing is in effect, and a name has a prefix (i.e. an explicit namespace qualifier) then that name is returned as a triplet in a single string separated by the separator character specified when the parser was created: URI + sep + local_name + sep + prefix. If do_nst is zero, then namespace information is returned in the default manner (URI + sep + local_name) whether or not the name has a prefix. Note: Calling XML_SetReturnNSTriplet after XML_Parse or XML_ParseBuffer has no effect. */ XMLPARSEAPI(void) XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); /* This value is passed as the userData argument to callbacks. */ XMLPARSEAPI(void) XML_SetUserData(XML_Parser parser, void *userData); /* Returns the last value set by XML_SetUserData or NULL. */ #define XML_GetUserData(parser) (*(void **)(parser)) /* This is equivalent to supplying an encoding argument to XML_ParserCreate. On success XML_SetEncoding returns non-zero, zero otherwise. Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer has no effect and returns XML_STATUS_ERROR. */ XMLPARSEAPI(enum XML_Status) XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); /* If this function is called, then the parser will be passed as the first argument to callbacks instead of userData. The userData will still be accessible using XML_GetUserData. */ XMLPARSEAPI(void) XML_UseParserAsHandlerArg(XML_Parser parser); /* If useDTD == XML_TRUE is passed to this function, then the parser will assume that there is an external subset, even if none is specified in the document. In such a case the parser will call the externalEntityRefHandler with a value of NULL for the systemId argument (the publicId and context arguments will be NULL as well). Note: For the purpose of checking WFC: Entity Declared, passing useDTD == XML_TRUE will make the parser behave as if the document had a DTD with an external subset. Note: If this function is called, then this must be done before the first call to XML_Parse or XML_ParseBuffer, since it will have no effect after that. Returns XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. Note: If the document does not have a DOCTYPE declaration at all, then startDoctypeDeclHandler and endDoctypeDeclHandler will not be called, despite an external subset being parsed. Note: If XML_DTD is not defined when Expat is compiled, returns XML_ERROR_FEATURE_REQUIRES_XML_DTD. */ XMLPARSEAPI(enum XML_Error) XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); /* Sets the base to be used for resolving relative URIs in system identifiers in declarations. Resolving relative identifiers is left to the application: this value will be passed through as the base argument to the XML_ExternalEntityRefHandler, XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base argument will be copied. Returns XML_STATUS_ERROR if out of memory, XML_STATUS_OK otherwise. */ XMLPARSEAPI(enum XML_Status) XML_SetBase(XML_Parser parser, const XML_Char *base); XMLPARSEAPI(const XML_Char *) XML_GetBase(XML_Parser parser); /* Returns the number of the attribute/value pairs passed in last call to the XML_StartElementHandler that were specified in the start-tag rather than defaulted. Each attribute/value pair counts as 2; thus this correspondds to an index into the atts array passed to the XML_StartElementHandler. */ XMLPARSEAPI(int) XML_GetSpecifiedAttributeCount(XML_Parser parser); /* Returns the index of the ID attribute passed in the last call to XML_StartElementHandler, or -1 if there is no ID attribute. Each attribute/value pair counts as 2; thus this correspondds to an index into the atts array passed to the XML_StartElementHandler. */ XMLPARSEAPI(int) XML_GetIdAttributeIndex(XML_Parser parser); /* Parses some input. Returns XML_STATUS_ERROR if a fatal error is detected. The last call to XML_Parse must have isFinal true; len may be zero for this call (or any other). Though the return values for these functions has always been described as a Boolean value, the implementation, at least for the 1.95.x series, has always returned exactly one of the XML_Status values. */ XMLPARSEAPI(enum XML_Status) XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); XMLPARSEAPI(void *) XML_GetBuffer(XML_Parser parser, int len); XMLPARSEAPI(enum XML_Status) XML_ParseBuffer(XML_Parser parser, int len, int isFinal); /* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return. Must be called from within a call-back handler, except when aborting (resumable = 0) an already suspended parser. Some call-backs may still follow because they would otherwise get lost. Examples: - endElementHandler() for empty elements when stopped in startElementHandler(), - endNameSpaceDeclHandler() when stopped in endElementHandler(), and possibly others. Can be called from most handlers, including DTD related call-backs, except when parsing an external parameter entity and resumable != 0. Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. Possible error codes: - XML_ERROR_SUSPENDED: when suspending an already suspended parser. - XML_ERROR_FINISHED: when the parser has already finished. - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE. When resumable != 0 (true) then parsing is suspended, that is, XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED. Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer() return XML_STATUS_ERROR with error code XML_ERROR_ABORTED. *Note*: This will be applied to the current parser instance only, that is, if there is a parent parser then it will continue parsing when the externalEntityRefHandler() returns. It is up to the implementation of the externalEntityRefHandler() to call XML_StopParser() on the parent parser (recursively), if one wants to stop parsing altogether. When suspended, parsing can be resumed by calling XML_ResumeParser(). */ XMLPARSEAPI(enum XML_Status) XML_StopParser(XML_Parser parser, XML_Bool resumable); /* Resumes parsing after it has been suspended with XML_StopParser(). Must not be called from within a handler call-back. Returns same status codes as XML_Parse() or XML_ParseBuffer(). Additional error code XML_ERROR_NOT_SUSPENDED possible. *Note*: This must be called on the most deeply nested child parser instance first, and on its parent parser only after the child parser has finished, to be applied recursively until the document entity's parser is restarted. That is, the parent parser will not resume by itself and it is up to the application to call XML_ResumeParser() on it at the appropriate moment. */ XMLPARSEAPI(enum XML_Status) XML_ResumeParser(XML_Parser parser); enum XML_Parsing { XML_INITIALIZED, XML_PARSING, XML_FINISHED, XML_SUSPENDED }; typedef struct { enum XML_Parsing parsing; XML_Bool finalBuffer; } XML_ParsingStatus; /* Returns status of parser with respect to being initialized, parsing, finished, or suspended and processing the final buffer. XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus, XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED */ XMLPARSEAPI(void) XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); /* Creates an XML_Parser object that can parse an external general entity; context is a '\0'-terminated string specifying the parse context; encoding is a '\0'-terminated string giving the name of the externally specified encoding, or NULL if there is no externally specified encoding. The context string consists of a sequence of tokens separated by formfeeds (\f); a token consisting of a name specifies that the general entity of the name is open; a token of the form prefix=uri specifies the namespace for a particular prefix; a token of the form =uri specifies the default namespace. This can be called at any point after the first call to an ExternalEntityRefHandler so longer as the parser has not yet been freed. The new parser is completely independent and may safely be used in a separate thread. The handlers and userData are initialized from the parser argument. Returns NULL if out of memory. Otherwise returns a new XML_Parser object. */ XMLPARSEAPI(XML_Parser) XML_ExternalEntityParserCreate(XML_Parser parser, const XML_Char *context, const XML_Char *encoding); enum XML_ParamEntityParsing { XML_PARAM_ENTITY_PARSING_NEVER, XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, XML_PARAM_ENTITY_PARSING_ALWAYS }; /* Controls parsing of parameter entities (including the external DTD subset). If parsing of parameter entities is enabled, then references to external parameter entities (including the external DTD subset) will be passed to the handler set with XML_SetExternalEntityRefHandler. The context passed will be 0. Unlike external general entities, external parameter entities can only be parsed synchronously. If the external parameter entity is to be parsed, it must be parsed during the call to the external entity ref handler: the complete sequence of XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and XML_ParserFree calls must be made during this call. After XML_ExternalEntityParserCreate has been called to create the parser for the external parameter entity (context must be 0 for this call), it is illegal to make any calls on the old parser until XML_ParserFree has been called on the newly created parser. If the library has been compiled without support for parameter entity parsing (ie without XML_DTD being defined), then XML_SetParamEntityParsing will return 0 if parsing of parameter entities is requested; otherwise it will return non-zero. Note: If XML_SetParamEntityParsing is called after XML_Parse or XML_ParseBuffer, then it has no effect and will always return 0. */ XMLPARSEAPI(int) XML_SetParamEntityParsing(XML_Parser parser, enum XML_ParamEntityParsing parsing); /* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then XML_GetErrorCode returns information about the error. */ XMLPARSEAPI(enum XML_Error) XML_GetErrorCode(XML_Parser parser); /* These functions return information about the current parse location. They may be called from any callback called to report some parse event; in this case the location is the location of the first of the sequence of characters that generated the event. When called from callbacks generated by declarations in the document prologue, the location identified isn't as neatly defined, but will be within the relevant markup. When called outside of the callback functions, the position indicated will be just past the last parse event (regardless of whether there was an associated callback). They may also be called after returning from a call to XML_Parse or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then the location is the location of the character at which the error was detected; otherwise the location is the location of the last parse event, as described above. */ XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser); XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser); XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser); /* Return the number of bytes in the current event. Returns 0 if the event is in an internal entity. */ XMLPARSEAPI(int) XML_GetCurrentByteCount(XML_Parser parser); /* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets the integer pointed to by offset to the offset within this buffer of the current parse position, and sets the integer pointed to by size to the size of this buffer (the number of input bytes). Otherwise returns a NULL pointer. Also returns a NULL pointer if a parse isn't active. NOTE: The character pointer returned should not be used outside the handler that makes the call. */ XMLPARSEAPI(const char *) XML_GetInputContext(XML_Parser parser, int *offset, int *size); /* For backwards compatibility with previous versions. */ #define XML_GetErrorLineNumber XML_GetCurrentLineNumber #define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber #define XML_GetErrorByteIndex XML_GetCurrentByteIndex /* Frees the content model passed to the element declaration handler */ XMLPARSEAPI(void) XML_FreeContentModel(XML_Parser parser, XML_Content *model); /* Exposing the memory handling functions used in Expat */ XMLPARSEAPI(void *) XML_MemMalloc(XML_Parser parser, size_t size); XMLPARSEAPI(void *) XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); XMLPARSEAPI(void) XML_MemFree(XML_Parser parser, void *ptr); /* Frees memory used by the parser. */ XMLPARSEAPI(void) XML_ParserFree(XML_Parser parser); /* Returns a string describing the error. */ XMLPARSEAPI(const XML_LChar *) XML_ErrorString(enum XML_Error code); /* Return a string containing the version number of this expat */ XMLPARSEAPI(const XML_LChar *) XML_ExpatVersion(void); typedef struct { int major; int minor; int micro; } XML_Expat_Version; /* Return an XML_Expat_Version structure containing numeric version number information for this version of expat. */ XMLPARSEAPI(XML_Expat_Version) XML_ExpatVersionInfo(void); /* Added in Expat 1.95.5. */ enum XML_FeatureEnum { XML_FEATURE_END = 0, XML_FEATURE_UNICODE, XML_FEATURE_UNICODE_WCHAR_T, XML_FEATURE_DTD, XML_FEATURE_CONTEXT_BYTES, XML_FEATURE_MIN_SIZE, XML_FEATURE_SIZEOF_XML_CHAR, XML_FEATURE_SIZEOF_XML_LCHAR, XML_FEATURE_NS, XML_FEATURE_LARGE_SIZE /* Additional features must be added to the end of this enum. */ }; typedef struct { enum XML_FeatureEnum feature; const XML_LChar *name; long int value; } XML_Feature; XMLPARSEAPI(const XML_Feature *) XML_GetFeatureList(void); /* Expat follows the GNU/Linux convention of odd number minor version for beta/development releases and even number minor version for stable releases. Micro is bumped with each release, and set to 0 with each change to major or minor version. */ #define XML_MAJOR_VERSION 2 #define XML_MINOR_VERSION 0 #define XML_MICRO_VERSION 1 #ifdef __cplusplus } #endif #endif /* not Expat_INCLUDED */ genometools-1.5.1/src/external/expat-2.0.1/lib/expat_external.h000077500000000000000000000064441211610345200242070ustar00rootroot00000000000000/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #ifndef Expat_External_INCLUDED #define Expat_External_INCLUDED 1 /* External API definitions */ #if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) #define XML_USE_MSC_EXTENSIONS 1 #endif /* Expat tries very hard to make the API boundary very specifically defined. There are two macros defined to control this boundary; each of these can be defined before including this header to achieve some different behavior, but doing so it not recommended or tested frequently. XMLCALL - The calling convention to use for all calls across the "library boundary." This will default to cdecl, and try really hard to tell the compiler that's what we want. XMLIMPORT - Whatever magic is needed to note that a function is to be imported from a dynamically loaded library (.dll, .so, or .sl, depending on your platform). The XMLCALL macro was added in Expat 1.95.7. The only one which is expected to be directly useful in client code is XMLCALL. Note that on at least some Unix versions, the Expat library must be compiled with the cdecl calling convention as the default since system headers may assume the cdecl convention. */ #ifndef XMLCALL #if defined(_MSC_VER) #define XMLCALL __cdecl #elif defined(__GNUC__) && defined(__i386) && !defined(__INTEL_COMPILER) #define XMLCALL __attribute__((cdecl)) #else /* For any platform which uses this definition and supports more than one calling convention, we need to extend this definition to declare the convention used on that platform, if it's possible to do so. If this is the case for your platform, please file a bug report with information on how to identify your platform via the C pre-processor and how to specify the same calling convention as the platform's malloc() implementation. */ #define XMLCALL #endif #endif /* not defined XMLCALL */ #if !defined(XML_STATIC) && !defined(XMLIMPORT) #ifndef XML_BUILDING_EXPAT /* using Expat from an application */ #ifdef XML_USE_MSC_EXTENSIONS #define XMLIMPORT __declspec(dllimport) #endif #endif #endif /* not defined XML_STATIC */ /* If we didn't define it above, define it away: */ #ifndef XMLIMPORT #define XMLIMPORT #endif #define XMLPARSEAPI(type) XMLIMPORT type XMLCALL #ifdef __cplusplus extern "C" { #endif #ifdef XML_UNICODE_WCHAR_T #define XML_UNICODE #endif #ifdef XML_UNICODE /* Information is UTF-16 encoded. */ #ifdef XML_UNICODE_WCHAR_T typedef wchar_t XML_Char; typedef wchar_t XML_LChar; #else typedef unsigned short XML_Char; typedef char XML_LChar; #endif /* XML_UNICODE_WCHAR_T */ #else /* Information is UTF-8 encoded. */ typedef char XML_Char; typedef char XML_LChar; #endif /* XML_UNICODE */ #ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */ #if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 typedef __int64 XML_Index; typedef unsigned __int64 XML_Size; #else typedef long long XML_Index; typedef unsigned long long XML_Size; #endif #else typedef long XML_Index; typedef unsigned long XML_Size; #endif /* XML_LARGE_SIZE */ #ifdef __cplusplus } #endif #endif /* not Expat_External_INCLUDED */ genometools-1.5.1/src/external/expat-2.0.1/lib/expat_static.dsp000077500000000000000000000102361211610345200242050ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="expat_static" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=expat_static - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "expat_static.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "expat_static.mak" CFG="expat_static - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "expat_static - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "expat_static - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "expat_static - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "expat_static___Win32_Release" # PROP BASE Intermediate_Dir "expat_static___Win32_Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\win32\bin\Release" # PROP Intermediate_Dir "..\win32\tmp\Release_static" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x1009 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\win32\bin\Release/libexpatMT.lib" !ELSEIF "$(CFG)" == "expat_static - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "expat_static___Win32_Debug" # PROP BASE Intermediate_Dir "expat_static___Win32_Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\win32\bin\Debug" # PROP Intermediate_Dir "..\win32\tmp\Debug_static" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "COMPILED_FROM_DSP" /D "_MBCS" /D "_LIB" /FR /FD /GZ /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x1009 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\win32\bin\Debug\libexpatMT.lib" !ENDIF # Begin Target # Name "expat_static - Win32 Release" # Name "expat_static - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\xmlparse.c # End Source File # Begin Source File SOURCE=.\xmlrole.c # End Source File # Begin Source File SOURCE=.\xmltok.c # End Source File # Begin Source File SOURCE=.\xmltok_impl.c # End Source File # Begin Source File SOURCE=.\xmltok_ns.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\ascii.h # End Source File # Begin Source File SOURCE=.\asciitab.h # End Source File # Begin Source File SOURCE=.\expat.h # End Source File # Begin Source File SOURCE=.\expat_external.h # End Source File # Begin Source File SOURCE=.\iasciitab.h # End Source File # Begin Source File SOURCE=.\internal.h # End Source File # Begin Source File SOURCE=.\latin1tab.h # End Source File # Begin Source File SOURCE=.\nametab.h # End Source File # Begin Source File SOURCE=.\utf8tab.h # End Source File # Begin Source File SOURCE=.\xmlrole.h # End Source File # Begin Source File SOURCE=.\xmltok.h # End Source File # Begin Source File SOURCE=.\xmltok_impl.h # End Source File # End Group # End Target # End Project genometools-1.5.1/src/external/expat-2.0.1/lib/expatw.dsp000077500000000000000000000126371211610345200230340ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="expatw" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=expatw - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "expatw.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "expatw.mak" CFG="expatw - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "expatw - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "expatw - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "expatw - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\win32\bin\Release" # PROP Intermediate_Dir "..\win32\tmp\Release-w" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXPAT_EXPORTS" /Yu"stdafx.h" /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "COMPILED_FROM_DSP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XML_UNICODE_WCHAR_T" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"..\win32\bin\Release/libexpatw.dll" !ELSEIF "$(CFG)" == "expatw - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\win32\bin\Debug" # PROP Intermediate_Dir "..\win32\tmp\Debug-w" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXPAT_EXPORTS" /Yu"stdafx.h" /FD /GZ /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /D "_DEBUG" /D "COMPILED_FROM_DSP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XML_UNICODE_WCHAR_T" /FR /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"..\win32\bin\Debug/libexpatw.dll" !ENDIF # Begin Target # Name "expatw - Win32 Release" # Name "expatw - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\libexpatw.def # End Source File # Begin Source File SOURCE=.\xmlparse.c !IF "$(CFG)" == "expatw - Win32 Release" !ELSEIF "$(CFG)" == "expatw - Win32 Debug" # ADD CPP /GX- /Od !ENDIF # End Source File # Begin Source File SOURCE=.\xmlrole.c # End Source File # Begin Source File SOURCE=.\xmltok.c # End Source File # Begin Source File SOURCE=.\xmltok_impl.c # End Source File # Begin Source File SOURCE=.\xmltok_ns.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\ascii.h # End Source File # Begin Source File SOURCE=.\asciitab.h # End Source File # Begin Source File SOURCE=.\expat.h # End Source File # Begin Source File SOURCE=.\expat_external.h # End Source File # Begin Source File SOURCE=.\iasciitab.h # End Source File # Begin Source File SOURCE=.\internal.h # End Source File # Begin Source File SOURCE=.\latin1tab.h # End Source File # Begin Source File SOURCE=.\nametab.h # End Source File # Begin Source File SOURCE=.\utf8tab.h # End Source File # Begin Source File SOURCE=.\xmlrole.h # End Source File # Begin Source File SOURCE=.\xmltok.h # End Source File # Begin Source File SOURCE=.\xmltok_impl.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project genometools-1.5.1/src/external/expat-2.0.1/lib/expatw_static.dsp000077500000000000000000000103451211610345200243750ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="expatw_static" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=expatw_static - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "expatw_static.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "expatw_static.mak" CFG="expatw_static - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "expatw_static - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "expatw_static - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "expatw_static - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "expatw_static___Win32_Release" # PROP BASE Intermediate_Dir "expatw_static___Win32_Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "..\win32\bin\Release" # PROP Intermediate_Dir "..\win32\tmp\Release-w_static" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D "XML_UNICODE_WCHAR_T" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x1009 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\win32\bin\Release\libexpatwMT.lib" !ELSEIF "$(CFG)" == "expatw_static - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "expatw_static___Win32_Debug" # PROP BASE Intermediate_Dir "expatw_static___Win32_Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "..\win32\bin\Debug" # PROP Intermediate_Dir "..\win32\tmp\Debug-w_static" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D "XML_UNICODE_WCHAR_T" /FR /FD /GZ /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x1009 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\win32\bin\Debug\libexpatwMT.lib" !ENDIF # Begin Target # Name "expatw_static - Win32 Release" # Name "expatw_static - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\xmlparse.c # End Source File # Begin Source File SOURCE=.\xmlrole.c # End Source File # Begin Source File SOURCE=.\xmltok.c # End Source File # Begin Source File SOURCE=.\xmltok_impl.c # End Source File # Begin Source File SOURCE=.\xmltok_ns.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\ascii.h # End Source File # Begin Source File SOURCE=.\asciitab.h # End Source File # Begin Source File SOURCE=.\expat.h # End Source File # Begin Source File SOURCE=.\expat_external.h # End Source File # Begin Source File SOURCE=.\iasciitab.h # End Source File # Begin Source File SOURCE=.\internal.h # End Source File # Begin Source File SOURCE=.\latin1tab.h # End Source File # Begin Source File SOURCE=.\nametab.h # End Source File # Begin Source File SOURCE=.\utf8tab.h # End Source File # Begin Source File SOURCE=.\xmlrole.h # End Source File # Begin Source File SOURCE=.\xmltok.h # End Source File # Begin Source File SOURCE=.\xmltok_impl.h # End Source File # End Group # End Target # End Project genometools-1.5.1/src/external/expat-2.0.1/lib/iasciitab.h000077500000000000000000000034461211610345200231130ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */ /* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, /* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML, /* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, /* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, /* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, /* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, /* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, /* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, /* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, /* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, /* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, genometools-1.5.1/src/external/expat-2.0.1/lib/internal.h000077500000000000000000000037541211610345200230010ustar00rootroot00000000000000/* internal.h Internal definitions used by Expat. This is not needed to compile client code. The following calling convention macros are defined for frequently called functions: FASTCALL - Used for those internal functions that have a simple body and a low number of arguments and local variables. PTRCALL - Used for functions called though function pointers. PTRFASTCALL - Like PTRCALL, but for low number of arguments. inline - Used for selected internal functions for which inlining may improve performance on some platforms. Note: Use of these macros is based on judgement, not hard rules, and therefore subject to change. */ #if defined(__GNUC__) && defined(__i386__) && !defined(__MINGW32__) /* We'll use this version by default only where we know it helps. regparm() generates warnings on Solaris boxes. See SF bug #692878. Instability reported with egcs on a RedHat Linux 7.3. Let's comment out: #define FASTCALL __attribute__((stdcall, regparm(3))) and let's try this: */ #define FASTCALL __attribute__((regparm(3))) #define PTRFASTCALL __attribute__((regparm(3))) #endif /* Using __fastcall seems to have an unexpected negative effect under MS VC++, especially for function pointers, so we won't use it for now on that platform. It may be reconsidered for a future release if it can be made more effective. Likely reason: __fastcall on Windows is like stdcall, therefore the compiler cannot perform stack optimizations for call clusters. */ /* Make sure all of these are defined if they aren't already. */ #ifndef FASTCALL #define FASTCALL #endif #ifndef PTRCALL #define PTRCALL #endif #ifndef PTRFASTCALL #define PTRFASTCALL #endif #ifndef XML_MIN_SIZE #if !defined(__cplusplus) && !defined(inline) #ifdef __GNUC__ #define inline __inline #endif /* __GNUC__ */ #endif #endif /* XML_MIN_SIZE */ #ifdef __cplusplus #define inline inline #else #ifndef inline #define inline #endif #endif genometools-1.5.1/src/external/expat-2.0.1/lib/latin1tab.h000077500000000000000000000034251211610345200230370ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, /* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME, /* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, /* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, genometools-1.5.1/src/external/expat-2.0.1/lib/libexpat.def000077500000000000000000000037541211610345200233040ustar00rootroot00000000000000; DEF file for MS VC++ LIBRARY EXPORTS XML_DefaultCurrent @1 XML_ErrorString @2 XML_ExpatVersion @3 XML_ExpatVersionInfo @4 XML_ExternalEntityParserCreate @5 XML_GetBase @6 XML_GetBuffer @7 XML_GetCurrentByteCount @8 XML_GetCurrentByteIndex @9 XML_GetCurrentColumnNumber @10 XML_GetCurrentLineNumber @11 XML_GetErrorCode @12 XML_GetIdAttributeIndex @13 XML_GetInputContext @14 XML_GetSpecifiedAttributeCount @15 XML_Parse @16 XML_ParseBuffer @17 XML_ParserCreate @18 XML_ParserCreateNS @19 XML_ParserCreate_MM @20 XML_ParserFree @21 XML_SetAttlistDeclHandler @22 XML_SetBase @23 XML_SetCdataSectionHandler @24 XML_SetCharacterDataHandler @25 XML_SetCommentHandler @26 XML_SetDefaultHandler @27 XML_SetDefaultHandlerExpand @28 XML_SetDoctypeDeclHandler @29 XML_SetElementDeclHandler @30 XML_SetElementHandler @31 XML_SetEncoding @32 XML_SetEndCdataSectionHandler @33 XML_SetEndDoctypeDeclHandler @34 XML_SetEndElementHandler @35 XML_SetEndNamespaceDeclHandler @36 XML_SetEntityDeclHandler @37 XML_SetExternalEntityRefHandler @38 XML_SetExternalEntityRefHandlerArg @39 XML_SetNamespaceDeclHandler @40 XML_SetNotStandaloneHandler @41 XML_SetNotationDeclHandler @42 XML_SetParamEntityParsing @43 XML_SetProcessingInstructionHandler @44 XML_SetReturnNSTriplet @45 XML_SetStartCdataSectionHandler @46 XML_SetStartDoctypeDeclHandler @47 XML_SetStartElementHandler @48 XML_SetStartNamespaceDeclHandler @49 XML_SetUnknownEncodingHandler @50 XML_SetUnparsedEntityDeclHandler @51 XML_SetUserData @52 XML_SetXmlDeclHandler @53 XML_UseParserAsHandlerArg @54 ; added with version 1.95.3 XML_ParserReset @55 XML_SetSkippedEntityHandler @56 ; added with version 1.95.5 XML_GetFeatureList @57 XML_UseForeignDTD @58 ; added with version 1.95.6 XML_FreeContentModel @59 XML_MemMalloc @60 XML_MemRealloc @61 XML_MemFree @62 ; added with version 1.95.8 XML_StopParser @63 XML_ResumeParser @64 XML_GetParsingStatus @65 genometools-1.5.1/src/external/expat-2.0.1/lib/libexpatw.def000077500000000000000000000037541211610345200234730ustar00rootroot00000000000000; DEF file for MS VC++ LIBRARY EXPORTS XML_DefaultCurrent @1 XML_ErrorString @2 XML_ExpatVersion @3 XML_ExpatVersionInfo @4 XML_ExternalEntityParserCreate @5 XML_GetBase @6 XML_GetBuffer @7 XML_GetCurrentByteCount @8 XML_GetCurrentByteIndex @9 XML_GetCurrentColumnNumber @10 XML_GetCurrentLineNumber @11 XML_GetErrorCode @12 XML_GetIdAttributeIndex @13 XML_GetInputContext @14 XML_GetSpecifiedAttributeCount @15 XML_Parse @16 XML_ParseBuffer @17 XML_ParserCreate @18 XML_ParserCreateNS @19 XML_ParserCreate_MM @20 XML_ParserFree @21 XML_SetAttlistDeclHandler @22 XML_SetBase @23 XML_SetCdataSectionHandler @24 XML_SetCharacterDataHandler @25 XML_SetCommentHandler @26 XML_SetDefaultHandler @27 XML_SetDefaultHandlerExpand @28 XML_SetDoctypeDeclHandler @29 XML_SetElementDeclHandler @30 XML_SetElementHandler @31 XML_SetEncoding @32 XML_SetEndCdataSectionHandler @33 XML_SetEndDoctypeDeclHandler @34 XML_SetEndElementHandler @35 XML_SetEndNamespaceDeclHandler @36 XML_SetEntityDeclHandler @37 XML_SetExternalEntityRefHandler @38 XML_SetExternalEntityRefHandlerArg @39 XML_SetNamespaceDeclHandler @40 XML_SetNotStandaloneHandler @41 XML_SetNotationDeclHandler @42 XML_SetParamEntityParsing @43 XML_SetProcessingInstructionHandler @44 XML_SetReturnNSTriplet @45 XML_SetStartCdataSectionHandler @46 XML_SetStartDoctypeDeclHandler @47 XML_SetStartElementHandler @48 XML_SetStartNamespaceDeclHandler @49 XML_SetUnknownEncodingHandler @50 XML_SetUnparsedEntityDeclHandler @51 XML_SetUserData @52 XML_SetXmlDeclHandler @53 XML_UseParserAsHandlerArg @54 ; added with version 1.95.3 XML_ParserReset @55 XML_SetSkippedEntityHandler @56 ; added with version 1.95.5 XML_GetFeatureList @57 XML_UseForeignDTD @58 ; added with version 1.95.6 XML_FreeContentModel @59 XML_MemMalloc @60 XML_MemRealloc @61 XML_MemFree @62 ; added with version 1.95.8 XML_StopParser @63 XML_ResumeParser @64 XML_GetParsingStatus @65 genometools-1.5.1/src/external/expat-2.0.1/lib/macconfig.h000077500000000000000000000024551211610345200231100ustar00rootroot00000000000000/*================================================================ ** Copyright 2000, Clark Cooper ** All rights reserved. ** ** This is free software. You are permitted to copy, distribute, or modify ** it under the terms of the MIT/X license (contained in the COPYING file ** with this distribution.) ** */ #ifndef MACCONFIG_H #define MACCONFIG_H /* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ #define BYTEORDER 4321 /* Define to 1 if you have the `bcopy' function. */ #undef HAVE_BCOPY /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* whether byteorder is bigendian */ #define WORDS_BIGENDIAN /* Define to specify how much context to retain around the current parse point. */ #undef XML_CONTEXT_BYTES /* Define to make parameter entity parsing functionality available. */ #define XML_DTD /* Define to make XML Namespaces functionality available. */ #define XML_NS /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `long' if does not define. */ #define off_t long /* Define to `unsigned' if does not define. */ #undef size_t #endif /* ifndef MACCONFIG_H */ genometools-1.5.1/src/external/expat-2.0.1/lib/nametab.h000077500000000000000000000156121211610345200225700ustar00rootroot00000000000000static const unsigned namingBitmap[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE, 0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, 0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, 0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, 0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, 0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF, 0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000, 0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060, 0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003, 0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003, 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, 0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001, 0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003, 0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000, 0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003, 0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003, 0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000, 0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF, 0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB, 0x40000000, 0xF580C900, 0x00000007, 0x02010800, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00004C40, 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF, 0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, 0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE, 0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003, 0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, 0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, 0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, 0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, 0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF, 0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF, 0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF, 0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF, 0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF, 0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0, 0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1, 0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3, 0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80, 0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3, 0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3, 0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000, 0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000, 0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF, 0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFF0000, 0x00000002, 0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, 0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF, }; static const unsigned char nmstrtPages[] = { 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const unsigned char namePages[] = { 0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00, 0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; genometools-1.5.1/src/external/expat-2.0.1/lib/utf8tab.h000077500000000000000000000033431211610345200225340ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4, /* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML, /* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM, genometools-1.5.1/src/external/expat-2.0.1/lib/winconfig.h000077500000000000000000000013051211610345200231360ustar00rootroot00000000000000/*================================================================ ** Copyright 2000, Clark Cooper ** All rights reserved. ** ** This is free software. You are permitted to copy, distribute, or modify ** it under the terms of the MIT/X license (contained in the COPYING file ** with this distribution.) */ #ifndef WINCONFIG_H #define WINCONFIG_H #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN #include #include #define XML_NS 1 #define XML_DTD 1 #define XML_CONTEXT_BYTES 1024 /* we will assume all Windows platforms are little endian */ #define BYTEORDER 1234 /* Windows has memmove() available. */ #define HAVE_MEMMOVE #endif /* ndef WINCONFIG_H */ genometools-1.5.1/src/external/expat-2.0.1/lib/xmlparse.c000077500000000000000000005733511211610345200230200ustar00rootroot00000000000000/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #include /* memset(), memcpy() */ #include #define XML_BUILDING_EXPAT 1 #ifdef COMPILED_FROM_DSP #include "winconfig.h" #elif defined(MACOS_CLASSIC) #include "macconfig.h" #elif defined(__amigaos4__) #include "amigaconfig.h" #elif defined(__WATCOMC__) #include "watcomconfig.h" #elif defined(HAVE_EXPAT_CONFIG_H) #include #endif /* ndef COMPILED_FROM_DSP */ #include "ascii.h" #include "expat.h" #ifdef XML_UNICODE #define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX #define XmlConvert XmlUtf16Convert #define XmlGetInternalEncoding XmlGetUtf16InternalEncoding #define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS #define XmlEncode XmlUtf16Encode /* Using pointer subtraction to convert to integer type. */ #define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((char *)(s) - (char *)NULL) & 1)) typedef unsigned short ICHAR; #else #define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX #define XmlConvert XmlUtf8Convert #define XmlGetInternalEncoding XmlGetUtf8InternalEncoding #define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS #define XmlEncode XmlUtf8Encode #define MUST_CONVERT(enc, s) (!(enc)->isUtf8) typedef char ICHAR; #endif #ifndef XML_NS #define XmlInitEncodingNS XmlInitEncoding #define XmlInitUnknownEncodingNS XmlInitUnknownEncoding #undef XmlGetInternalEncodingNS #define XmlGetInternalEncodingNS XmlGetInternalEncoding #define XmlParseXmlDeclNS XmlParseXmlDecl #endif #ifdef XML_UNICODE #ifdef XML_UNICODE_WCHAR_T #define XML_T(x) (const wchar_t)x #define XML_L(x) L ## x #else #define XML_T(x) (const unsigned short)x #define XML_L(x) x #endif #else #define XML_T(x) x #define XML_L(x) x #endif /* Round up n to be a multiple of sz, where sz is a power of 2. */ #define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1)) /* Handle the case where memmove() doesn't exist. */ #ifndef HAVE_MEMMOVE #ifdef HAVE_BCOPY #define memmove(d,s,l) bcopy((s),(d),(l)) #else #error memmove does not exist on this platform, nor is a substitute available #endif /* HAVE_BCOPY */ #endif /* HAVE_MEMMOVE */ #include "internal.h" #include "xmltok.h" #include "xmlrole.h" typedef const XML_Char *KEY; typedef struct { KEY name; } NAMED; typedef struct { NAMED **v; unsigned char power; size_t size; size_t used; const XML_Memory_Handling_Suite *mem; } HASH_TABLE; /* Basic character hash algorithm, taken from Python's string hash: h = h * 1000003 ^ character, the constant being a prime number. */ #ifdef XML_UNICODE #define CHAR_HASH(h, c) \ (((h) * 0xF4243) ^ (unsigned short)(c)) #else #define CHAR_HASH(h, c) \ (((h) * 0xF4243) ^ (unsigned char)(c)) #endif /* For probing (after a collision) we need a step size relative prime to the hash table size, which is a power of 2. We use double-hashing, since we can calculate a second hash value cheaply by taking those bits of the first hash value that were discarded (masked out) when the table index was calculated: index = hash & mask, where mask = table->size - 1. We limit the maximum step size to table->size / 4 (mask >> 2) and make it odd, since odd numbers are always relative prime to a power of 2. */ #define SECOND_HASH(hash, mask, power) \ ((((hash) & ~(mask)) >> ((power) - 1)) & ((mask) >> 2)) #define PROBE_STEP(hash, mask, power) \ ((unsigned char)((SECOND_HASH(hash, mask, power)) | 1)) typedef struct { NAMED **p; NAMED **end; } HASH_TABLE_ITER; #define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */ #define INIT_DATA_BUF_SIZE 1024 #define INIT_ATTS_SIZE 16 #define INIT_ATTS_VERSION 0xFFFFFFFF #define INIT_BLOCK_SIZE 1024 #define INIT_BUFFER_SIZE 1024 #define EXPAND_SPARE 24 typedef struct binding { struct prefix *prefix; struct binding *nextTagBinding; struct binding *prevPrefixBinding; const struct attribute_id *attId; XML_Char *uri; int uriLen; int uriAlloc; } BINDING; typedef struct prefix { const XML_Char *name; BINDING *binding; } PREFIX; typedef struct { const XML_Char *str; const XML_Char *localPart; const XML_Char *prefix; int strLen; int uriLen; int prefixLen; } TAG_NAME; /* TAG represents an open element. The name of the element is stored in both the document and API encodings. The memory buffer 'buf' is a separately-allocated memory area which stores the name. During the XML_Parse()/ XMLParseBuffer() when the element is open, the memory for the 'raw' version of the name (in the document encoding) is shared with the document buffer. If the element is open across calls to XML_Parse()/XML_ParseBuffer(), the buffer is re-allocated to contain the 'raw' name as well. A parser re-uses these structures, maintaining a list of allocated TAG objects in a free list. */ typedef struct tag { struct tag *parent; /* parent of this element */ const char *rawName; /* tagName in the original encoding */ int rawNameLength; TAG_NAME name; /* tagName in the API encoding */ char *buf; /* buffer for name components */ char *bufEnd; /* end of the buffer */ BINDING *bindings; } TAG; typedef struct { const XML_Char *name; const XML_Char *textPtr; int textLen; /* length in XML_Chars */ int processed; /* # of processed bytes - when suspended */ const XML_Char *systemId; const XML_Char *base; const XML_Char *publicId; const XML_Char *notation; XML_Bool open; XML_Bool is_param; XML_Bool is_internal; /* true if declared in internal subset outside PE */ } ENTITY; typedef struct { enum XML_Content_Type type; enum XML_Content_Quant quant; const XML_Char * name; int firstchild; int lastchild; int childcnt; int nextsib; } CONTENT_SCAFFOLD; #define INIT_SCAFFOLD_ELEMENTS 32 typedef struct block { struct block *next; int size; XML_Char s[1]; } BLOCK; typedef struct { BLOCK *blocks; BLOCK *freeBlocks; const XML_Char *end; XML_Char *ptr; XML_Char *start; const XML_Memory_Handling_Suite *mem; } STRING_POOL; /* The XML_Char before the name is used to determine whether an attribute has been specified. */ typedef struct attribute_id { XML_Char *name; PREFIX *prefix; XML_Bool maybeTokenized; XML_Bool xmlns; } ATTRIBUTE_ID; typedef struct { const ATTRIBUTE_ID *id; XML_Bool isCdata; const XML_Char *value; } DEFAULT_ATTRIBUTE; typedef struct { unsigned long version; unsigned long hash; const XML_Char *uriName; } NS_ATT; typedef struct { const XML_Char *name; PREFIX *prefix; const ATTRIBUTE_ID *idAtt; int nDefaultAtts; int allocDefaultAtts; DEFAULT_ATTRIBUTE *defaultAtts; } ELEMENT_TYPE; typedef struct { HASH_TABLE generalEntities; HASH_TABLE elementTypes; HASH_TABLE attributeIds; HASH_TABLE prefixes; STRING_POOL pool; STRING_POOL entityValuePool; /* false once a parameter entity reference has been skipped */ XML_Bool keepProcessing; /* true once an internal or external PE reference has been encountered; this includes the reference to an external subset */ XML_Bool hasParamEntityRefs; XML_Bool standalone; #ifdef XML_DTD /* indicates if external PE has been read */ XML_Bool paramEntityRead; HASH_TABLE paramEntities; #endif /* XML_DTD */ PREFIX defaultPrefix; /* === scaffolding for building content model === */ XML_Bool in_eldecl; CONTENT_SCAFFOLD *scaffold; unsigned contentStringLen; unsigned scaffSize; unsigned scaffCount; int scaffLevel; int *scaffIndex; } DTD; typedef struct open_internal_entity { const char *internalEventPtr; const char *internalEventEndPtr; struct open_internal_entity *next; ENTITY *entity; int startTagLevel; XML_Bool betweenDecl; /* WFC: PE Between Declarations */ } OPEN_INTERNAL_ENTITY; typedef enum XML_Error PTRCALL Processor(XML_Parser parser, const char *start, const char *end, const char **endPtr); static Processor prologProcessor; static Processor prologInitProcessor; static Processor contentProcessor; static Processor cdataSectionProcessor; #ifdef XML_DTD static Processor ignoreSectionProcessor; static Processor externalParEntProcessor; static Processor externalParEntInitProcessor; static Processor entityValueProcessor; static Processor entityValueInitProcessor; #endif /* XML_DTD */ static Processor epilogProcessor; static Processor errorProcessor; static Processor externalEntityInitProcessor; static Processor externalEntityInitProcessor2; static Processor externalEntityInitProcessor3; static Processor externalEntityContentProcessor; static Processor internalEntityProcessor; static enum XML_Error handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName); static enum XML_Error processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *s, const char *next); static enum XML_Error initializeEncoding(XML_Parser parser); static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, int tok, const char *next, const char **nextPtr, XML_Bool haveMore); static enum XML_Error processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl); static enum XML_Error doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, const char *start, const char *end, const char **endPtr, XML_Bool haveMore); static enum XML_Error doCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr, XML_Bool haveMore); #ifdef XML_DTD static enum XML_Error doIgnoreSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr, XML_Bool haveMore); #endif /* XML_DTD */ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *, const char *s, TAG_NAME *tagNamePtr, BINDING **bindingsPtr); static enum XML_Error addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr); static int defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, XML_Bool isCdata, XML_Bool isId, const XML_Char *dfltValue, XML_Parser parser); static enum XML_Error storeAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata, const char *, const char *, STRING_POOL *); static enum XML_Error appendAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata, const char *, const char *, STRING_POOL *); static ATTRIBUTE_ID * getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *); static enum XML_Error storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static void reportDefault(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static const XML_Char * getContext(XML_Parser parser); static XML_Bool setContext(XML_Parser parser, const XML_Char *context); static void FASTCALL normalizePublicId(XML_Char *s); static DTD * dtdCreate(const XML_Memory_Handling_Suite *ms); /* do not call if parentParser != NULL */ static void dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms); static void dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms); static int dtdCopy(DTD *newDtd, const DTD *oldDtd, const XML_Memory_Handling_Suite *ms); static int copyEntityTable(HASH_TABLE *, STRING_POOL *, const HASH_TABLE *); static NAMED * lookup(HASH_TABLE *table, KEY name, size_t createSize); static void FASTCALL hashTableInit(HASH_TABLE *, const XML_Memory_Handling_Suite *ms); static void FASTCALL hashTableClear(HASH_TABLE *); static void FASTCALL hashTableDestroy(HASH_TABLE *); static void FASTCALL hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *); static NAMED * FASTCALL hashTableIterNext(HASH_TABLE_ITER *); static void FASTCALL poolInit(STRING_POOL *, const XML_Memory_Handling_Suite *ms); static void FASTCALL poolClear(STRING_POOL *); static void FASTCALL poolDestroy(STRING_POOL *); static XML_Char * poolAppend(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end); static XML_Char * poolStoreString(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end); static XML_Bool FASTCALL poolGrow(STRING_POOL *pool); static const XML_Char * FASTCALL poolCopyString(STRING_POOL *pool, const XML_Char *s); static const XML_Char * poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n); static const XML_Char * FASTCALL poolAppendString(STRING_POOL *pool, const XML_Char *s); static int FASTCALL nextScaffoldPart(XML_Parser parser); static XML_Content * build_model(XML_Parser parser); static ELEMENT_TYPE * getElementType(XML_Parser parser, const ENCODING *enc, const char *ptr, const char *end); static XML_Parser parserCreate(const XML_Char *encodingName, const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep, DTD *dtd); static void parserInit(XML_Parser parser, const XML_Char *encodingName); #define poolStart(pool) ((pool)->start) #define poolEnd(pool) ((pool)->ptr) #define poolLength(pool) ((pool)->ptr - (pool)->start) #define poolChop(pool) ((void)--(pool->ptr)) #define poolLastChar(pool) (((pool)->ptr)[-1]) #define poolDiscard(pool) ((pool)->ptr = (pool)->start) #define poolFinish(pool) ((pool)->start = (pool)->ptr) #define poolAppendChar(pool, c) \ (((pool)->ptr == (pool)->end && !poolGrow(pool)) \ ? 0 \ : ((*((pool)->ptr)++ = c), 1)) struct XML_ParserStruct { /* The first member must be userData so that the XML_GetUserData macro works. */ void *m_userData; void *m_handlerArg; char *m_buffer; const XML_Memory_Handling_Suite m_mem; /* first character to be parsed */ const char *m_bufferPtr; /* past last character to be parsed */ char *m_bufferEnd; /* allocated end of buffer */ const char *m_bufferLim; XML_Index m_parseEndByteIndex; const char *m_parseEndPtr; XML_Char *m_dataBuf; XML_Char *m_dataBufEnd; XML_StartElementHandler m_startElementHandler; XML_EndElementHandler m_endElementHandler; XML_CharacterDataHandler m_characterDataHandler; XML_ProcessingInstructionHandler m_processingInstructionHandler; XML_CommentHandler m_commentHandler; XML_StartCdataSectionHandler m_startCdataSectionHandler; XML_EndCdataSectionHandler m_endCdataSectionHandler; XML_DefaultHandler m_defaultHandler; XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler; XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler; XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler; XML_NotationDeclHandler m_notationDeclHandler; XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler; XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler; XML_NotStandaloneHandler m_notStandaloneHandler; XML_ExternalEntityRefHandler m_externalEntityRefHandler; XML_Parser m_externalEntityRefHandlerArg; XML_SkippedEntityHandler m_skippedEntityHandler; XML_UnknownEncodingHandler m_unknownEncodingHandler; XML_ElementDeclHandler m_elementDeclHandler; XML_AttlistDeclHandler m_attlistDeclHandler; XML_EntityDeclHandler m_entityDeclHandler; XML_XmlDeclHandler m_xmlDeclHandler; const ENCODING *m_encoding; INIT_ENCODING m_initEncoding; const ENCODING *m_internalEncoding; const XML_Char *m_protocolEncodingName; XML_Bool m_ns; XML_Bool m_ns_triplets; void *m_unknownEncodingMem; void *m_unknownEncodingData; void *m_unknownEncodingHandlerData; void (XMLCALL *m_unknownEncodingRelease)(void *); PROLOG_STATE m_prologState; Processor *m_processor; enum XML_Error m_errorCode; const char *m_eventPtr; const char *m_eventEndPtr; const char *m_positionPtr; OPEN_INTERNAL_ENTITY *m_openInternalEntities; OPEN_INTERNAL_ENTITY *m_freeInternalEntities; XML_Bool m_defaultExpandInternalEntities; int m_tagLevel; ENTITY *m_declEntity; const XML_Char *m_doctypeName; const XML_Char *m_doctypeSysid; const XML_Char *m_doctypePubid; const XML_Char *m_declAttributeType; const XML_Char *m_declNotationName; const XML_Char *m_declNotationPublicId; ELEMENT_TYPE *m_declElementType; ATTRIBUTE_ID *m_declAttributeId; XML_Bool m_declAttributeIsCdata; XML_Bool m_declAttributeIsId; DTD *m_dtd; const XML_Char *m_curBase; TAG *m_tagStack; TAG *m_freeTagList; BINDING *m_inheritedBindings; BINDING *m_freeBindingList; int m_attsSize; int m_nSpecifiedAtts; int m_idAttIndex; ATTRIBUTE *m_atts; NS_ATT *m_nsAtts; unsigned long m_nsAttsVersion; unsigned char m_nsAttsPower; POSITION m_position; STRING_POOL m_tempPool; STRING_POOL m_temp2Pool; char *m_groupConnector; unsigned int m_groupSize; XML_Char m_namespaceSeparator; XML_Parser m_parentParser; XML_ParsingStatus m_parsingStatus; #ifdef XML_DTD XML_Bool m_isParamEntity; XML_Bool m_useForeignDTD; enum XML_ParamEntityParsing m_paramEntityParsing; #endif }; #define MALLOC(s) (parser->m_mem.malloc_fcn((s))) #define REALLOC(p,s) (parser->m_mem.realloc_fcn((p),(s))) #define FREE(p) (parser->m_mem.free_fcn((p))) #define userData (parser->m_userData) #define handlerArg (parser->m_handlerArg) #define startElementHandler (parser->m_startElementHandler) #define endElementHandler (parser->m_endElementHandler) #define characterDataHandler (parser->m_characterDataHandler) #define processingInstructionHandler \ (parser->m_processingInstructionHandler) #define commentHandler (parser->m_commentHandler) #define startCdataSectionHandler \ (parser->m_startCdataSectionHandler) #define endCdataSectionHandler (parser->m_endCdataSectionHandler) #define defaultHandler (parser->m_defaultHandler) #define startDoctypeDeclHandler (parser->m_startDoctypeDeclHandler) #define endDoctypeDeclHandler (parser->m_endDoctypeDeclHandler) #define unparsedEntityDeclHandler \ (parser->m_unparsedEntityDeclHandler) #define notationDeclHandler (parser->m_notationDeclHandler) #define startNamespaceDeclHandler \ (parser->m_startNamespaceDeclHandler) #define endNamespaceDeclHandler (parser->m_endNamespaceDeclHandler) #define notStandaloneHandler (parser->m_notStandaloneHandler) #define externalEntityRefHandler \ (parser->m_externalEntityRefHandler) #define externalEntityRefHandlerArg \ (parser->m_externalEntityRefHandlerArg) #define internalEntityRefHandler \ (parser->m_internalEntityRefHandler) #define skippedEntityHandler (parser->m_skippedEntityHandler) #define unknownEncodingHandler (parser->m_unknownEncodingHandler) #define elementDeclHandler (parser->m_elementDeclHandler) #define attlistDeclHandler (parser->m_attlistDeclHandler) #define entityDeclHandler (parser->m_entityDeclHandler) #define xmlDeclHandler (parser->m_xmlDeclHandler) #define encoding (parser->m_encoding) #define initEncoding (parser->m_initEncoding) #define internalEncoding (parser->m_internalEncoding) #define unknownEncodingMem (parser->m_unknownEncodingMem) #define unknownEncodingData (parser->m_unknownEncodingData) #define unknownEncodingHandlerData \ (parser->m_unknownEncodingHandlerData) #define unknownEncodingRelease (parser->m_unknownEncodingRelease) #define protocolEncodingName (parser->m_protocolEncodingName) #define ns (parser->m_ns) #define ns_triplets (parser->m_ns_triplets) #define prologState (parser->m_prologState) #define processor (parser->m_processor) #define errorCode (parser->m_errorCode) #define eventPtr (parser->m_eventPtr) #define eventEndPtr (parser->m_eventEndPtr) #define positionPtr (parser->m_positionPtr) #define position (parser->m_position) #define openInternalEntities (parser->m_openInternalEntities) #define freeInternalEntities (parser->m_freeInternalEntities) #define defaultExpandInternalEntities \ (parser->m_defaultExpandInternalEntities) #define tagLevel (parser->m_tagLevel) #define buffer (parser->m_buffer) #define bufferPtr (parser->m_bufferPtr) #define bufferEnd (parser->m_bufferEnd) #define parseEndByteIndex (parser->m_parseEndByteIndex) #define parseEndPtr (parser->m_parseEndPtr) #define bufferLim (parser->m_bufferLim) #define dataBuf (parser->m_dataBuf) #define dataBufEnd (parser->m_dataBufEnd) #define _dtd (parser->m_dtd) #define curBase (parser->m_curBase) #define declEntity (parser->m_declEntity) #define doctypeName (parser->m_doctypeName) #define doctypeSysid (parser->m_doctypeSysid) #define doctypePubid (parser->m_doctypePubid) #define declAttributeType (parser->m_declAttributeType) #define declNotationName (parser->m_declNotationName) #define declNotationPublicId (parser->m_declNotationPublicId) #define declElementType (parser->m_declElementType) #define declAttributeId (parser->m_declAttributeId) #define declAttributeIsCdata (parser->m_declAttributeIsCdata) #define declAttributeIsId (parser->m_declAttributeIsId) #define freeTagList (parser->m_freeTagList) #define freeBindingList (parser->m_freeBindingList) #define inheritedBindings (parser->m_inheritedBindings) #define tagStack (parser->m_tagStack) #define atts (parser->m_atts) #define attsSize (parser->m_attsSize) #define nSpecifiedAtts (parser->m_nSpecifiedAtts) #define idAttIndex (parser->m_idAttIndex) #define nsAtts (parser->m_nsAtts) #define nsAttsVersion (parser->m_nsAttsVersion) #define nsAttsPower (parser->m_nsAttsPower) #define tempPool (parser->m_tempPool) #define temp2Pool (parser->m_temp2Pool) #define groupConnector (parser->m_groupConnector) #define groupSize (parser->m_groupSize) #define namespaceSeparator (parser->m_namespaceSeparator) #define parentParser (parser->m_parentParser) #define ps_parsing (parser->m_parsingStatus.parsing) #define ps_finalBuffer (parser->m_parsingStatus.finalBuffer) #ifdef XML_DTD #define isParamEntity (parser->m_isParamEntity) #define useForeignDTD (parser->m_useForeignDTD) #define paramEntityParsing (parser->m_paramEntityParsing) #endif /* XML_DTD */ XML_Parser XMLCALL XML_ParserCreate(const XML_Char *encodingName) { return XML_ParserCreate_MM(encodingName, NULL, NULL); } XML_Parser XMLCALL XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) { XML_Char tmp[2]; *tmp = nsSep; return XML_ParserCreate_MM(encodingName, NULL, tmp); } static const XML_Char implicitContext[] = { ASCII_x, ASCII_m, ASCII_l, ASCII_EQUALS, ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, ASCII_SLASH, ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g, ASCII_SLASH, ASCII_X, ASCII_M, ASCII_L, ASCII_SLASH, ASCII_1, ASCII_9, ASCII_9, ASCII_8, ASCII_SLASH, ASCII_n, ASCII_a, ASCII_m, ASCII_e, ASCII_s, ASCII_p, ASCII_a, ASCII_c, ASCII_e, '\0' }; XML_Parser XMLCALL XML_ParserCreate_MM(const XML_Char *encodingName, const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep) { XML_Parser parser = parserCreate(encodingName, memsuite, nameSep, NULL); if (parser != NULL && ns) { /* implicit context only set for root parser, since child parsers (i.e. external entity parsers) will inherit it */ if (!setContext(parser, implicitContext)) { XML_ParserFree(parser); return NULL; } } return parser; } static XML_Parser parserCreate(const XML_Char *encodingName, const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep, DTD *dtd) { XML_Parser parser; if (memsuite) { XML_Memory_Handling_Suite *mtemp; parser = (XML_Parser) memsuite->malloc_fcn(sizeof(struct XML_ParserStruct)); if (parser != NULL) { mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); mtemp->malloc_fcn = memsuite->malloc_fcn; mtemp->realloc_fcn = memsuite->realloc_fcn; mtemp->free_fcn = memsuite->free_fcn; } } else { XML_Memory_Handling_Suite *mtemp; parser = (XML_Parser)malloc(sizeof(struct XML_ParserStruct)); if (parser != NULL) { mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); mtemp->malloc_fcn = malloc; mtemp->realloc_fcn = realloc; mtemp->free_fcn = free; } } if (!parser) return parser; buffer = NULL; bufferLim = NULL; attsSize = INIT_ATTS_SIZE; atts = (ATTRIBUTE *)MALLOC(attsSize * sizeof(ATTRIBUTE)); if (atts == NULL) { FREE(parser); return NULL; } dataBuf = (XML_Char *)MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char)); if (dataBuf == NULL) { FREE(atts); FREE(parser); return NULL; } dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE; if (dtd) _dtd = dtd; else { _dtd = dtdCreate(&parser->m_mem); if (_dtd == NULL) { FREE(dataBuf); FREE(atts); FREE(parser); return NULL; } } freeBindingList = NULL; freeTagList = NULL; freeInternalEntities = NULL; groupSize = 0; groupConnector = NULL; unknownEncodingHandler = NULL; unknownEncodingHandlerData = NULL; namespaceSeparator = ASCII_EXCL; ns = XML_FALSE; ns_triplets = XML_FALSE; nsAtts = NULL; nsAttsVersion = 0; nsAttsPower = 0; poolInit(&tempPool, &(parser->m_mem)); poolInit(&temp2Pool, &(parser->m_mem)); parserInit(parser, encodingName); if (encodingName && !protocolEncodingName) { XML_ParserFree(parser); return NULL; } if (nameSep) { ns = XML_TRUE; internalEncoding = XmlGetInternalEncodingNS(); namespaceSeparator = *nameSep; } else { internalEncoding = XmlGetInternalEncoding(); } return parser; } static void parserInit(XML_Parser parser, const XML_Char *encodingName) { processor = prologInitProcessor; XmlPrologStateInit(&prologState); protocolEncodingName = (encodingName != NULL ? poolCopyString(&tempPool, encodingName) : NULL); curBase = NULL; XmlInitEncoding(&initEncoding, &encoding, 0); userData = NULL; handlerArg = NULL; startElementHandler = NULL; endElementHandler = NULL; characterDataHandler = NULL; processingInstructionHandler = NULL; commentHandler = NULL; startCdataSectionHandler = NULL; endCdataSectionHandler = NULL; defaultHandler = NULL; startDoctypeDeclHandler = NULL; endDoctypeDeclHandler = NULL; unparsedEntityDeclHandler = NULL; notationDeclHandler = NULL; startNamespaceDeclHandler = NULL; endNamespaceDeclHandler = NULL; notStandaloneHandler = NULL; externalEntityRefHandler = NULL; externalEntityRefHandlerArg = parser; skippedEntityHandler = NULL; elementDeclHandler = NULL; attlistDeclHandler = NULL; entityDeclHandler = NULL; xmlDeclHandler = NULL; bufferPtr = buffer; bufferEnd = buffer; parseEndByteIndex = 0; parseEndPtr = NULL; declElementType = NULL; declAttributeId = NULL; declEntity = NULL; doctypeName = NULL; doctypeSysid = NULL; doctypePubid = NULL; declAttributeType = NULL; declNotationName = NULL; declNotationPublicId = NULL; declAttributeIsCdata = XML_FALSE; declAttributeIsId = XML_FALSE; memset(&position, 0, sizeof(POSITION)); errorCode = XML_ERROR_NONE; eventPtr = NULL; eventEndPtr = NULL; positionPtr = NULL; openInternalEntities = NULL; defaultExpandInternalEntities = XML_TRUE; tagLevel = 0; tagStack = NULL; inheritedBindings = NULL; nSpecifiedAtts = 0; unknownEncodingMem = NULL; unknownEncodingRelease = NULL; unknownEncodingData = NULL; parentParser = NULL; ps_parsing = XML_INITIALIZED; #ifdef XML_DTD isParamEntity = XML_FALSE; useForeignDTD = XML_FALSE; paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; #endif } /* moves list of bindings to freeBindingList */ static void FASTCALL moveToFreeBindingList(XML_Parser parser, BINDING *bindings) { while (bindings) { BINDING *b = bindings; bindings = bindings->nextTagBinding; b->nextTagBinding = freeBindingList; freeBindingList = b; } } XML_Bool XMLCALL XML_ParserReset(XML_Parser parser, const XML_Char *encodingName) { TAG *tStk; OPEN_INTERNAL_ENTITY *openEntityList; if (parentParser) return XML_FALSE; /* move tagStack to freeTagList */ tStk = tagStack; while (tStk) { TAG *tag = tStk; tStk = tStk->parent; tag->parent = freeTagList; moveToFreeBindingList(parser, tag->bindings); tag->bindings = NULL; freeTagList = tag; } /* move openInternalEntities to freeInternalEntities */ openEntityList = openInternalEntities; while (openEntityList) { OPEN_INTERNAL_ENTITY *openEntity = openEntityList; openEntityList = openEntity->next; openEntity->next = freeInternalEntities; freeInternalEntities = openEntity; } moveToFreeBindingList(parser, inheritedBindings); FREE(unknownEncodingMem); if (unknownEncodingRelease) unknownEncodingRelease(unknownEncodingData); poolClear(&tempPool); poolClear(&temp2Pool); parserInit(parser, encodingName); dtdReset(_dtd, &parser->m_mem); return setContext(parser, implicitContext); } enum XML_Status XMLCALL XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) { /* Block after XML_Parse()/XML_ParseBuffer() has been called. XXX There's no way for the caller to determine which of the XXX possible error cases caused the XML_STATUS_ERROR return. */ if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED) return XML_STATUS_ERROR; if (encodingName == NULL) protocolEncodingName = NULL; else { protocolEncodingName = poolCopyString(&tempPool, encodingName); if (!protocolEncodingName) return XML_STATUS_ERROR; } return XML_STATUS_OK; } XML_Parser XMLCALL XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context, const XML_Char *encodingName) { XML_Parser parser = oldParser; DTD *newDtd = NULL; DTD *oldDtd = _dtd; XML_StartElementHandler oldStartElementHandler = startElementHandler; XML_EndElementHandler oldEndElementHandler = endElementHandler; XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler; XML_ProcessingInstructionHandler oldProcessingInstructionHandler = processingInstructionHandler; XML_CommentHandler oldCommentHandler = commentHandler; XML_StartCdataSectionHandler oldStartCdataSectionHandler = startCdataSectionHandler; XML_EndCdataSectionHandler oldEndCdataSectionHandler = endCdataSectionHandler; XML_DefaultHandler oldDefaultHandler = defaultHandler; XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler = unparsedEntityDeclHandler; XML_NotationDeclHandler oldNotationDeclHandler = notationDeclHandler; XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler = startNamespaceDeclHandler; XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler = endNamespaceDeclHandler; XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler; XML_ExternalEntityRefHandler oldExternalEntityRefHandler = externalEntityRefHandler; XML_SkippedEntityHandler oldSkippedEntityHandler = skippedEntityHandler; XML_UnknownEncodingHandler oldUnknownEncodingHandler = unknownEncodingHandler; XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler; XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler; XML_EntityDeclHandler oldEntityDeclHandler = entityDeclHandler; XML_XmlDeclHandler oldXmlDeclHandler = xmlDeclHandler; ELEMENT_TYPE * oldDeclElementType = declElementType; void *oldUserData = userData; void *oldHandlerArg = handlerArg; XML_Bool oldDefaultExpandInternalEntities = defaultExpandInternalEntities; XML_Parser oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg; #ifdef XML_DTD enum XML_ParamEntityParsing oldParamEntityParsing = paramEntityParsing; int oldInEntityValue = prologState.inEntityValue; #endif XML_Bool oldns_triplets = ns_triplets; #ifdef XML_DTD if (!context) newDtd = oldDtd; #endif /* XML_DTD */ /* Note that the magical uses of the pre-processor to make field access look more like C++ require that `parser' be overwritten here. This makes this function more painful to follow than it would be otherwise. */ if (ns) { XML_Char tmp[2]; *tmp = namespaceSeparator; parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd); } else { parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd); } if (!parser) return NULL; startElementHandler = oldStartElementHandler; endElementHandler = oldEndElementHandler; characterDataHandler = oldCharacterDataHandler; processingInstructionHandler = oldProcessingInstructionHandler; commentHandler = oldCommentHandler; startCdataSectionHandler = oldStartCdataSectionHandler; endCdataSectionHandler = oldEndCdataSectionHandler; defaultHandler = oldDefaultHandler; unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler; notationDeclHandler = oldNotationDeclHandler; startNamespaceDeclHandler = oldStartNamespaceDeclHandler; endNamespaceDeclHandler = oldEndNamespaceDeclHandler; notStandaloneHandler = oldNotStandaloneHandler; externalEntityRefHandler = oldExternalEntityRefHandler; skippedEntityHandler = oldSkippedEntityHandler; unknownEncodingHandler = oldUnknownEncodingHandler; elementDeclHandler = oldElementDeclHandler; attlistDeclHandler = oldAttlistDeclHandler; entityDeclHandler = oldEntityDeclHandler; xmlDeclHandler = oldXmlDeclHandler; declElementType = oldDeclElementType; userData = oldUserData; if (oldUserData == oldHandlerArg) handlerArg = userData; else handlerArg = parser; if (oldExternalEntityRefHandlerArg != oldParser) externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; defaultExpandInternalEntities = oldDefaultExpandInternalEntities; ns_triplets = oldns_triplets; parentParser = oldParser; #ifdef XML_DTD paramEntityParsing = oldParamEntityParsing; prologState.inEntityValue = oldInEntityValue; if (context) { #endif /* XML_DTD */ if (!dtdCopy(_dtd, oldDtd, &parser->m_mem) || !setContext(parser, context)) { XML_ParserFree(parser); return NULL; } processor = externalEntityInitProcessor; #ifdef XML_DTD } else { /* The DTD instance referenced by _dtd is shared between the document's root parser and external PE parsers, therefore one does not need to call setContext. In addition, one also *must* not call setContext, because this would overwrite existing prefix->binding pointers in _dtd with ones that get destroyed with the external PE parser. This would leave those prefixes with dangling pointers. */ isParamEntity = XML_TRUE; XmlPrologStateInitExternalEntity(&prologState); processor = externalParEntInitProcessor; } #endif /* XML_DTD */ return parser; } static void FASTCALL destroyBindings(BINDING *bindings, XML_Parser parser) { for (;;) { BINDING *b = bindings; if (!b) break; bindings = b->nextTagBinding; FREE(b->uri); FREE(b); } } void XMLCALL XML_ParserFree(XML_Parser parser) { TAG *tagList; OPEN_INTERNAL_ENTITY *entityList; if (parser == NULL) return; /* free tagStack and freeTagList */ tagList = tagStack; for (;;) { TAG *p; if (tagList == NULL) { if (freeTagList == NULL) break; tagList = freeTagList; freeTagList = NULL; } p = tagList; tagList = tagList->parent; FREE(p->buf); destroyBindings(p->bindings, parser); FREE(p); } /* free openInternalEntities and freeInternalEntities */ entityList = openInternalEntities; for (;;) { OPEN_INTERNAL_ENTITY *openEntity; if (entityList == NULL) { if (freeInternalEntities == NULL) break; entityList = freeInternalEntities; freeInternalEntities = NULL; } openEntity = entityList; entityList = entityList->next; FREE(openEntity); } destroyBindings(freeBindingList, parser); destroyBindings(inheritedBindings, parser); poolDestroy(&tempPool); poolDestroy(&temp2Pool); #ifdef XML_DTD /* external parameter entity parsers share the DTD structure parser->m_dtd with the root parser, so we must not destroy it */ if (!isParamEntity && _dtd) #else if (_dtd) #endif /* XML_DTD */ dtdDestroy(_dtd, (XML_Bool)!parentParser, &parser->m_mem); FREE((void *)atts); FREE(groupConnector); FREE(buffer); FREE(dataBuf); FREE(nsAtts); FREE(unknownEncodingMem); if (unknownEncodingRelease) unknownEncodingRelease(unknownEncodingData); FREE(parser); } void XMLCALL XML_UseParserAsHandlerArg(XML_Parser parser) { handlerArg = parser; } enum XML_Error XMLCALL XML_UseForeignDTD(__attribute__ ((unused)) XML_Parser parser, __attribute__ ((unused)) XML_Bool useDTD) { #ifdef XML_DTD /* block after XML_Parse()/XML_ParseBuffer() has been called */ if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED) return XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING; useForeignDTD = useDTD; return XML_ERROR_NONE; #else return XML_ERROR_FEATURE_REQUIRES_XML_DTD; #endif } void XMLCALL XML_SetReturnNSTriplet(XML_Parser parser, int do_nst) { /* block after XML_Parse()/XML_ParseBuffer() has been called */ if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED) return; ns_triplets = do_nst ? XML_TRUE : XML_FALSE; } void XMLCALL XML_SetUserData(XML_Parser parser, void *p) { if (handlerArg == userData) handlerArg = userData = p; else userData = p; } enum XML_Status XMLCALL XML_SetBase(XML_Parser parser, const XML_Char *p) { if (p) { p = poolCopyString(&_dtd->pool, p); if (!p) return XML_STATUS_ERROR; curBase = p; } else curBase = NULL; return XML_STATUS_OK; } const XML_Char * XMLCALL XML_GetBase(XML_Parser parser) { return curBase; } int XMLCALL XML_GetSpecifiedAttributeCount(XML_Parser parser) { return nSpecifiedAtts; } int XMLCALL XML_GetIdAttributeIndex(XML_Parser parser) { return idAttIndex; } void XMLCALL XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end) { startElementHandler = start; endElementHandler = end; } void XMLCALL XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler start) { startElementHandler = start; } void XMLCALL XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler end) { endElementHandler = end; } void XMLCALL XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler) { characterDataHandler = handler; } void XMLCALL XML_SetProcessingInstructionHandler(XML_Parser parser, XML_ProcessingInstructionHandler handler) { processingInstructionHandler = handler; } void XMLCALL XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler) { commentHandler = handler; } void XMLCALL XML_SetCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start, XML_EndCdataSectionHandler end) { startCdataSectionHandler = start; endCdataSectionHandler = end; } void XMLCALL XML_SetStartCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start) { startCdataSectionHandler = start; } void XMLCALL XML_SetEndCdataSectionHandler(XML_Parser parser, XML_EndCdataSectionHandler end) { endCdataSectionHandler = end; } void XMLCALL XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler) { defaultHandler = handler; defaultExpandInternalEntities = XML_FALSE; } void XMLCALL XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler) { defaultHandler = handler; defaultExpandInternalEntities = XML_TRUE; } void XMLCALL XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, XML_EndDoctypeDeclHandler end) { startDoctypeDeclHandler = start; endDoctypeDeclHandler = end; } void XMLCALL XML_SetStartDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start) { startDoctypeDeclHandler = start; } void XMLCALL XML_SetEndDoctypeDeclHandler(XML_Parser parser, XML_EndDoctypeDeclHandler end) { endDoctypeDeclHandler = end; } void XMLCALL XML_SetUnparsedEntityDeclHandler(XML_Parser parser, XML_UnparsedEntityDeclHandler handler) { unparsedEntityDeclHandler = handler; } void XMLCALL XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler) { notationDeclHandler = handler; } void XMLCALL XML_SetNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end) { startNamespaceDeclHandler = start; endNamespaceDeclHandler = end; } void XMLCALL XML_SetStartNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start) { startNamespaceDeclHandler = start; } void XMLCALL XML_SetEndNamespaceDeclHandler(XML_Parser parser, XML_EndNamespaceDeclHandler end) { endNamespaceDeclHandler = end; } void XMLCALL XML_SetNotStandaloneHandler(XML_Parser parser, XML_NotStandaloneHandler handler) { notStandaloneHandler = handler; } void XMLCALL XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler handler) { externalEntityRefHandler = handler; } void XMLCALL XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg) { if (arg) externalEntityRefHandlerArg = (XML_Parser)arg; else externalEntityRefHandlerArg = parser; } void XMLCALL XML_SetSkippedEntityHandler(XML_Parser parser, XML_SkippedEntityHandler handler) { skippedEntityHandler = handler; } void XMLCALL XML_SetUnknownEncodingHandler(XML_Parser parser, XML_UnknownEncodingHandler handler, void *data) { unknownEncodingHandler = handler; unknownEncodingHandlerData = data; } void XMLCALL XML_SetElementDeclHandler(XML_Parser parser, XML_ElementDeclHandler eldecl) { elementDeclHandler = eldecl; } void XMLCALL XML_SetAttlistDeclHandler(XML_Parser parser, XML_AttlistDeclHandler attdecl) { attlistDeclHandler = attdecl; } void XMLCALL XML_SetEntityDeclHandler(XML_Parser parser, XML_EntityDeclHandler handler) { entityDeclHandler = handler; } void XMLCALL XML_SetXmlDeclHandler(XML_Parser parser, XML_XmlDeclHandler handler) { xmlDeclHandler = handler; } int XMLCALL XML_SetParamEntityParsing(XML_Parser parser, enum XML_ParamEntityParsing peParsing) { /* block after XML_Parse()/XML_ParseBuffer() has been called */ if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED) return 0; #ifdef XML_DTD paramEntityParsing = peParsing; return 1; #else return peParsing == XML_PARAM_ENTITY_PARSING_NEVER; #endif } enum XML_Status XMLCALL XML_Parse(XML_Parser parser, const char *s, int len, int isFinal) { switch (ps_parsing) { case XML_SUSPENDED: errorCode = XML_ERROR_SUSPENDED; return XML_STATUS_ERROR; case XML_FINISHED: errorCode = XML_ERROR_FINISHED; return XML_STATUS_ERROR; default: ps_parsing = XML_PARSING; } if (len == 0) { ps_finalBuffer = (XML_Bool)isFinal; if (!isFinal) return XML_STATUS_OK; positionPtr = bufferPtr; parseEndPtr = bufferEnd; /* If data are left over from last buffer, and we now know that these data are the final chunk of input, then we have to check them again to detect errors based on that fact. */ errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr); if (errorCode == XML_ERROR_NONE) { switch (ps_parsing) { case XML_SUSPENDED: XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); positionPtr = bufferPtr; return XML_STATUS_SUSPENDED; case XML_INITIALIZED: case XML_PARSING: ps_parsing = XML_FINISHED; /* fall through */ default: return XML_STATUS_OK; } } eventEndPtr = eventPtr; processor = errorProcessor; return XML_STATUS_ERROR; } #ifndef XML_CONTEXT_BYTES else if (bufferPtr == bufferEnd) { const char *end; int nLeftOver; enum XML_Status result = 0; parseEndByteIndex += len; positionPtr = s; ps_finalBuffer = (XML_Bool)isFinal; errorCode = processor(parser, s, parseEndPtr = s + len, &end); if (errorCode != XML_ERROR_NONE) { eventEndPtr = eventPtr; processor = errorProcessor; return XML_STATUS_ERROR; } else { switch (ps_parsing) { case XML_SUSPENDED: result = XML_STATUS_SUSPENDED; break; case XML_INITIALIZED: case XML_PARSING: result = XML_STATUS_OK; if (isFinal) { ps_parsing = XML_FINISHED; return result; } case XML_FINISHED: break; } } XmlUpdatePosition(encoding, positionPtr, end, &position); nLeftOver = s + len - end; if (nLeftOver) { if (buffer == NULL || nLeftOver > bufferLim - buffer) { /* FIXME avoid integer overflow */ char *temp; temp = (buffer == NULL ? (char *)MALLOC(len * 2) : (char *)REALLOC(buffer, len * 2)); if (temp == NULL) { errorCode = XML_ERROR_NO_MEMORY; return XML_STATUS_ERROR; } buffer = temp; if (!buffer) { errorCode = XML_ERROR_NO_MEMORY; eventPtr = eventEndPtr = NULL; processor = errorProcessor; return XML_STATUS_ERROR; } bufferLim = buffer + len * 2; } memcpy(buffer, end, nLeftOver); } bufferPtr = buffer; bufferEnd = buffer + nLeftOver; positionPtr = bufferPtr; parseEndPtr = bufferEnd; eventPtr = bufferPtr; eventEndPtr = bufferPtr; return result; } #endif /* not defined XML_CONTEXT_BYTES */ else { void *buff = XML_GetBuffer(parser, len); if (buff == NULL) return XML_STATUS_ERROR; else { memcpy(buff, s, len); return XML_ParseBuffer(parser, len, isFinal); } } } enum XML_Status XMLCALL XML_ParseBuffer(XML_Parser parser, int len, int isFinal) { const char *start; enum XML_Status result = XML_STATUS_OK; switch (ps_parsing) { case XML_SUSPENDED: errorCode = XML_ERROR_SUSPENDED; return XML_STATUS_ERROR; case XML_FINISHED: errorCode = XML_ERROR_FINISHED; return XML_STATUS_ERROR; default: ps_parsing = XML_PARSING; } start = bufferPtr; positionPtr = start; bufferEnd += len; parseEndPtr = bufferEnd; parseEndByteIndex += len; ps_finalBuffer = (XML_Bool)isFinal; errorCode = processor(parser, start, parseEndPtr, &bufferPtr); if (errorCode != XML_ERROR_NONE) { eventEndPtr = eventPtr; processor = errorProcessor; return XML_STATUS_ERROR; } else { switch (ps_parsing) { case XML_SUSPENDED: result = XML_STATUS_SUSPENDED; break; case XML_INITIALIZED: case XML_PARSING: if (isFinal) { ps_parsing = XML_FINISHED; return result; } default: ; /* should not happen */ } } XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); positionPtr = bufferPtr; return result; } void * XMLCALL XML_GetBuffer(XML_Parser parser, int len) { switch (ps_parsing) { case XML_SUSPENDED: errorCode = XML_ERROR_SUSPENDED; return NULL; case XML_FINISHED: errorCode = XML_ERROR_FINISHED; return NULL; default: ; } if (len > bufferLim - bufferEnd) { /* FIXME avoid integer overflow */ int neededSize = len + (int)(bufferEnd - bufferPtr); #ifdef XML_CONTEXT_BYTES int keep = (int)(bufferPtr - buffer); if (keep > XML_CONTEXT_BYTES) keep = XML_CONTEXT_BYTES; neededSize += keep; #endif /* defined XML_CONTEXT_BYTES */ if (neededSize <= bufferLim - buffer) { #ifdef XML_CONTEXT_BYTES if (keep < bufferPtr - buffer) { int offset = (int)(bufferPtr - buffer) - keep; memmove(buffer, &buffer[offset], bufferEnd - bufferPtr + keep); bufferEnd -= offset; bufferPtr -= offset; } #else memmove(buffer, bufferPtr, bufferEnd - bufferPtr); bufferEnd = buffer + (bufferEnd - bufferPtr); bufferPtr = buffer; #endif /* not defined XML_CONTEXT_BYTES */ } else { char *newBuf; int bufferSize = (int)(bufferLim - bufferPtr); if (bufferSize == 0) bufferSize = INIT_BUFFER_SIZE; do { bufferSize *= 2; } while (bufferSize < neededSize); newBuf = (char *)MALLOC(bufferSize); if (newBuf == 0) { errorCode = XML_ERROR_NO_MEMORY; return NULL; } bufferLim = newBuf + bufferSize; #ifdef XML_CONTEXT_BYTES if (bufferPtr) { int keep = (int)(bufferPtr - buffer); if (keep > XML_CONTEXT_BYTES) keep = XML_CONTEXT_BYTES; memcpy(newBuf, &bufferPtr[-keep], bufferEnd - bufferPtr + keep); FREE(buffer); buffer = newBuf; bufferEnd = buffer + (bufferEnd - bufferPtr) + keep; bufferPtr = buffer + keep; } else { bufferEnd = newBuf + (bufferEnd - bufferPtr); bufferPtr = buffer = newBuf; } #else if (bufferPtr) { memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr); FREE(buffer); } bufferEnd = newBuf + (bufferEnd - bufferPtr); bufferPtr = buffer = newBuf; #endif /* not defined XML_CONTEXT_BYTES */ } } return bufferEnd; } enum XML_Status XMLCALL XML_StopParser(XML_Parser parser, XML_Bool resumable) { switch (ps_parsing) { case XML_SUSPENDED: if (resumable) { errorCode = XML_ERROR_SUSPENDED; return XML_STATUS_ERROR; } ps_parsing = XML_FINISHED; break; case XML_FINISHED: errorCode = XML_ERROR_FINISHED; return XML_STATUS_ERROR; default: if (resumable) { #ifdef XML_DTD if (isParamEntity) { errorCode = XML_ERROR_SUSPEND_PE; return XML_STATUS_ERROR; } #endif ps_parsing = XML_SUSPENDED; } else ps_parsing = XML_FINISHED; } return XML_STATUS_OK; } enum XML_Status XMLCALL XML_ResumeParser(XML_Parser parser) { enum XML_Status result = XML_STATUS_OK; if (ps_parsing != XML_SUSPENDED) { errorCode = XML_ERROR_NOT_SUSPENDED; return XML_STATUS_ERROR; } ps_parsing = XML_PARSING; errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr); if (errorCode != XML_ERROR_NONE) { eventEndPtr = eventPtr; processor = errorProcessor; return XML_STATUS_ERROR; } else { switch (ps_parsing) { case XML_SUSPENDED: result = XML_STATUS_SUSPENDED; break; case XML_INITIALIZED: case XML_PARSING: if (ps_finalBuffer) { ps_parsing = XML_FINISHED; return result; } default: ; } } XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); positionPtr = bufferPtr; return result; } void XMLCALL XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status) { assert(status != NULL); *status = parser->m_parsingStatus; } enum XML_Error XMLCALL XML_GetErrorCode(XML_Parser parser) { return errorCode; } XML_Index XMLCALL XML_GetCurrentByteIndex(XML_Parser parser) { if (eventPtr) return parseEndByteIndex - (parseEndPtr - eventPtr); return -1; } int XMLCALL XML_GetCurrentByteCount(XML_Parser parser) { if (eventEndPtr && eventPtr) return (int)(eventEndPtr - eventPtr); return 0; } const char * XMLCALL XML_GetInputContext(__attribute__ ((unused)) XML_Parser parser, __attribute__ ((unused)) int *offset, __attribute__ ((unused)) int *size) { #ifdef XML_CONTEXT_BYTES if (eventPtr && buffer) { *offset = (int)(eventPtr - buffer); *size = (int)(bufferEnd - buffer); return buffer; } #endif /* defined XML_CONTEXT_BYTES */ return (char *) 0; } XML_Size XMLCALL XML_GetCurrentLineNumber(XML_Parser parser) { if (eventPtr && eventPtr >= positionPtr) { XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); positionPtr = eventPtr; } return position.lineNumber + 1; } XML_Size XMLCALL XML_GetCurrentColumnNumber(XML_Parser parser) { if (eventPtr && eventPtr >= positionPtr) { XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); positionPtr = eventPtr; } return position.columnNumber; } void XMLCALL XML_FreeContentModel(XML_Parser parser, XML_Content *model) { FREE(model); } void * XMLCALL XML_MemMalloc(XML_Parser parser, size_t size) { return MALLOC(size); } void * XMLCALL XML_MemRealloc(XML_Parser parser, void *ptr, size_t size) { return REALLOC(ptr, size); } void XMLCALL XML_MemFree(XML_Parser parser, void *ptr) { FREE(ptr); } void XMLCALL XML_DefaultCurrent(XML_Parser parser) { if (defaultHandler) { if (openInternalEntities) reportDefault(parser, internalEncoding, openInternalEntities->internalEventPtr, openInternalEntities->internalEventEndPtr); else reportDefault(parser, encoding, eventPtr, eventEndPtr); } } const XML_LChar * XMLCALL XML_ErrorString(enum XML_Error code) { static const XML_LChar* const message[] = { 0, XML_L("out of memory"), XML_L("syntax error"), XML_L("no element found"), XML_L("not well-formed (invalid token)"), XML_L("unclosed token"), XML_L("partial character"), XML_L("mismatched tag"), XML_L("duplicate attribute"), XML_L("junk after document element"), XML_L("illegal parameter entity reference"), XML_L("undefined entity"), XML_L("recursive entity reference"), XML_L("asynchronous entity"), XML_L("reference to invalid character number"), XML_L("reference to binary entity"), XML_L("reference to external entity in attribute"), XML_L("XML or text declaration not at start of entity"), XML_L("unknown encoding"), XML_L("encoding specified in XML declaration is incorrect"), XML_L("unclosed CDATA section"), XML_L("error in processing external entity reference"), XML_L("document is not standalone"), XML_L("unexpected parser state - please send a bug report"), XML_L("entity declared in parameter entity"), XML_L("requested feature requires XML_DTD support in Expat"), XML_L("cannot change setting once parsing has begun"), XML_L("unbound prefix"), XML_L("must not undeclare prefix"), XML_L("incomplete markup in parameter entity"), XML_L("XML declaration not well-formed"), XML_L("text declaration not well-formed"), XML_L("illegal character(s) in public id"), XML_L("parser suspended"), XML_L("parser not suspended"), XML_L("parsing aborted"), XML_L("parsing finished"), XML_L("cannot suspend in external parameter entity"), XML_L("reserved prefix (xml) must not be undeclared or bound to another namespace name"), XML_L("reserved prefix (xmlns) must not be declared or undeclared"), XML_L("prefix must not be bound to one of the reserved namespace names") }; if (code > 0 && code < sizeof(message)/sizeof(message[0])) return message[code]; return NULL; } const XML_LChar * XMLCALL XML_ExpatVersion(void) { /* V1 is used to string-ize the version number. However, it would string-ize the actual version macro *names* unless we get them substituted before being passed to V1. CPP is defined to expand a macro, then rescan for more expansions. Thus, we use V2 to expand the version macros, then CPP will expand the resulting V1() macro with the correct numerals. */ /* ### I'm assuming cpp is portable in this respect... */ #define V1(a,b,c) XML_L(#a)XML_L(".")XML_L(#b)XML_L(".")XML_L(#c) #define V2(a,b,c) XML_L("expat_")V1(a,b,c) return V2(XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION); #undef V1 #undef V2 } XML_Expat_Version XMLCALL XML_ExpatVersionInfo(void) { XML_Expat_Version version; version.major = XML_MAJOR_VERSION; version.minor = XML_MINOR_VERSION; version.micro = XML_MICRO_VERSION; return version; } const XML_Feature * XMLCALL XML_GetFeatureList(void) { static const XML_Feature features[] = { {XML_FEATURE_SIZEOF_XML_CHAR, XML_L("sizeof(XML_Char)"), sizeof(XML_Char)}, {XML_FEATURE_SIZEOF_XML_LCHAR, XML_L("sizeof(XML_LChar)"), sizeof(XML_LChar)}, #ifdef XML_UNICODE {XML_FEATURE_UNICODE, XML_L("XML_UNICODE"), 0}, #endif #ifdef XML_UNICODE_WCHAR_T {XML_FEATURE_UNICODE_WCHAR_T, XML_L("XML_UNICODE_WCHAR_T"), 0}, #endif #ifdef XML_DTD {XML_FEATURE_DTD, XML_L("XML_DTD"), 0}, #endif #ifdef XML_CONTEXT_BYTES {XML_FEATURE_CONTEXT_BYTES, XML_L("XML_CONTEXT_BYTES"), XML_CONTEXT_BYTES}, #endif #ifdef XML_MIN_SIZE {XML_FEATURE_MIN_SIZE, XML_L("XML_MIN_SIZE"), 0}, #endif #ifdef XML_NS {XML_FEATURE_NS, XML_L("XML_NS"), 0}, #endif #ifdef XML_LARGE_SIZE {XML_FEATURE_LARGE_SIZE, XML_L("XML_LARGE_SIZE"), 0}, #endif {XML_FEATURE_END, NULL, 0} }; return features; } /* Initially tag->rawName always points into the parse buffer; for those TAG instances opened while the current parse buffer was processed, and not yet closed, we need to store tag->rawName in a more permanent location, since the parse buffer is about to be discarded. */ static XML_Bool storeRawNames(XML_Parser parser) { TAG *tag = tagStack; while (tag) { int bufSize; int nameLen = sizeof(XML_Char) * (tag->name.strLen + 1); char *rawNameBuf = tag->buf + nameLen; /* Stop if already stored. Since tagStack is a stack, we can stop at the first entry that has already been copied; everything below it in the stack is already been accounted for in a previous call to this function. */ if (tag->rawName == rawNameBuf) break; /* For re-use purposes we need to ensure that the size of tag->buf is a multiple of sizeof(XML_Char). */ bufSize = nameLen + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)); if (bufSize > tag->bufEnd - tag->buf) { char *temp = (char *)REALLOC(tag->buf, bufSize); if (temp == NULL) return XML_FALSE; /* if tag->name.str points to tag->buf (only when namespace processing is off) then we have to update it */ if (tag->name.str == (XML_Char *)tag->buf) tag->name.str = (XML_Char *)temp; /* if tag->name.localPart is set (when namespace processing is on) then update it as well, since it will always point into tag->buf */ if (tag->name.localPart) tag->name.localPart = (XML_Char *)temp + (tag->name.localPart - (XML_Char *)tag->buf); tag->buf = temp; tag->bufEnd = temp + bufSize; rawNameBuf = temp + nameLen; } memcpy(rawNameBuf, tag->rawName, tag->rawNameLength); tag->rawName = rawNameBuf; tag = tag->parent; } return XML_TRUE; } static enum XML_Error PTRCALL contentProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doContent(parser, 0, encoding, start, end, endPtr, (XML_Bool)!ps_finalBuffer); if (result == XML_ERROR_NONE) { if (!storeRawNames(parser)) return XML_ERROR_NO_MEMORY; } return result; } static enum XML_Error PTRCALL externalEntityInitProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = initializeEncoding(parser); if (result != XML_ERROR_NONE) return result; processor = externalEntityInitProcessor2; return externalEntityInitProcessor2(parser, start, end, endPtr); } static enum XML_Error PTRCALL externalEntityInitProcessor2(XML_Parser parser, const char *start, const char *end, const char **endPtr) { const char *next = start; /* XmlContentTok doesn't always set the last arg */ int tok = XmlContentTok(encoding, start, end, &next); switch (tok) { case XML_TOK_BOM: /* If we are at the end of the buffer, this would cause the next stage, i.e. externalEntityInitProcessor3, to pass control directly to doContent (by detecting XML_TOK_NONE) without processing any xml text declaration - causing the error XML_ERROR_MISPLACED_XML_PI in doContent. */ if (next == end && !ps_finalBuffer) { *endPtr = next; return XML_ERROR_NONE; } start = next; break; case XML_TOK_PARTIAL: if (!ps_finalBuffer) { *endPtr = start; return XML_ERROR_NONE; } eventPtr = start; return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (!ps_finalBuffer) { *endPtr = start; return XML_ERROR_NONE; } eventPtr = start; return XML_ERROR_PARTIAL_CHAR; } processor = externalEntityInitProcessor3; return externalEntityInitProcessor3(parser, start, end, endPtr); } static enum XML_Error PTRCALL externalEntityInitProcessor3(XML_Parser parser, const char *start, const char *end, const char **endPtr) { int tok; const char *next = start; /* XmlContentTok doesn't always set the last arg */ eventPtr = start; tok = XmlContentTok(encoding, start, end, &next); eventEndPtr = next; switch (tok) { case XML_TOK_XML_DECL: { enum XML_Error result; result = processXmlDecl(parser, 1, start, next); if (result != XML_ERROR_NONE) return result; switch (ps_parsing) { case XML_SUSPENDED: *endPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: start = next; } } break; case XML_TOK_PARTIAL: if (!ps_finalBuffer) { *endPtr = start; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (!ps_finalBuffer) { *endPtr = start; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; } processor = externalEntityContentProcessor; tagLevel = 1; return externalEntityContentProcessor(parser, start, end, endPtr); } static enum XML_Error PTRCALL externalEntityContentProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doContent(parser, 1, encoding, start, end, endPtr, (XML_Bool)!ps_finalBuffer); if (result == XML_ERROR_NONE) { if (!storeRawNames(parser)) return XML_ERROR_NO_MEMORY; } return result; } static enum XML_Error doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, const char *s, const char *end, const char **nextPtr, XML_Bool haveMore) { /* save one level of indirection */ DTD * const dtd = _dtd; const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } *eventPP = s; for (;;) { const char *next = s; /* XmlContentTok doesn't always set the last arg */ int tok = XmlContentTok(enc, s, end, &next); *eventEndPP = next; switch (tok) { case XML_TOK_TRAILING_CR: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } *eventEndPP = end; if (characterDataHandler) { XML_Char c = 0xA; characterDataHandler(handlerArg, &c, 1); } else if (defaultHandler) reportDefault(parser, enc, s, end); /* We are at the end of the final buffer, should we check for XML_SUSPENDED, XML_FINISHED? */ if (startTagLevel == 0) return XML_ERROR_NO_ELEMENTS; if (tagLevel != startTagLevel) return XML_ERROR_ASYNC_ENTITY; *nextPtr = end; return XML_ERROR_NONE; case XML_TOK_NONE: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } if (startTagLevel > 0) { if (tagLevel != startTagLevel) return XML_ERROR_ASYNC_ENTITY; *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_NO_ELEMENTS; case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; case XML_TOK_ENTITY_REF: { const XML_Char *name; ENTITY *entity; XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (ch) { if (characterDataHandler) characterDataHandler(handlerArg, &ch, 1); else if (defaultHandler) reportDefault(parser, enc, s, next); break; } name = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) return XML_ERROR_NO_MEMORY; entity = (ENTITY *)lookup(&dtd->generalEntities, name, 0); poolDiscard(&dtd->pool); /* First, determine if a check for an existing declaration is needed; if yes, check that the entity exists, and that it is internal, otherwise call the skipped entity or default handler. */ if (!dtd->hasParamEntityRefs || dtd->standalone) { if (!entity) return XML_ERROR_UNDEFINED_ENTITY; else if (!entity->is_internal) return XML_ERROR_ENTITY_DECLARED_IN_PE; } else if (!entity) { if (skippedEntityHandler) skippedEntityHandler(handlerArg, name, 0); else if (defaultHandler) reportDefault(parser, enc, s, next); break; } if (entity->open) return XML_ERROR_RECURSIVE_ENTITY_REF; if (entity->notation) return XML_ERROR_BINARY_ENTITY_REF; if (entity->textPtr) { enum XML_Error result; if (!defaultExpandInternalEntities) { if (skippedEntityHandler) skippedEntityHandler(handlerArg, entity->name, 0); else if (defaultHandler) reportDefault(parser, enc, s, next); break; } result = processInternalEntity(parser, entity, XML_FALSE); if (result != XML_ERROR_NONE) return result; } else if (externalEntityRefHandler) { const XML_Char *context; entity->open = XML_TRUE; context = getContext(parser); entity->open = XML_FALSE; if (!context) return XML_ERROR_NO_MEMORY; if (!externalEntityRefHandler(externalEntityRefHandlerArg, context, entity->base, entity->systemId, entity->publicId)) return XML_ERROR_EXTERNAL_ENTITY_HANDLING; poolDiscard(&tempPool); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; } case XML_TOK_START_TAG_NO_ATTS: /* fall through */ case XML_TOK_START_TAG_WITH_ATTS: { TAG *tag; enum XML_Error result; XML_Char *toPtr; if (freeTagList) { tag = freeTagList; freeTagList = freeTagList->parent; } else { tag = (TAG *)MALLOC(sizeof(TAG)); if (!tag) return XML_ERROR_NO_MEMORY; tag->buf = (char *)MALLOC(INIT_TAG_BUF_SIZE); if (!tag->buf) { FREE(tag); return XML_ERROR_NO_MEMORY; } tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE; } tag->bindings = NULL; tag->parent = tagStack; tagStack = tag; tag->name.localPart = NULL; tag->name.prefix = NULL; tag->rawName = s + enc->minBytesPerChar; tag->rawNameLength = XmlNameLength(enc, tag->rawName); ++tagLevel; { const char *rawNameEnd = tag->rawName + tag->rawNameLength; const char *fromPtr = tag->rawName; toPtr = (XML_Char *)tag->buf; for (;;) { int bufSize; int convLen; XmlConvert(enc, &fromPtr, rawNameEnd, (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1); convLen = (int)(toPtr - (XML_Char *)tag->buf); if (fromPtr == rawNameEnd) { tag->name.strLen = convLen; break; } bufSize = (int)(tag->bufEnd - tag->buf) << 1; { char *temp = (char *)REALLOC(tag->buf, bufSize); if (temp == NULL) return XML_ERROR_NO_MEMORY; tag->buf = temp; tag->bufEnd = temp + bufSize; toPtr = (XML_Char *)temp + convLen; } } } tag->name.str = (XML_Char *)tag->buf; *toPtr = XML_T('\0'); result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings)); if (result) return result; if (startElementHandler) startElementHandler(handlerArg, tag->name.str, (const XML_Char **)atts); else if (defaultHandler) reportDefault(parser, enc, s, next); poolClear(&tempPool); break; } case XML_TOK_EMPTY_ELEMENT_NO_ATTS: /* fall through */ case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: { const char *rawName = s + enc->minBytesPerChar; enum XML_Error result; BINDING *bindings = NULL; XML_Bool noElmHandlers = XML_TRUE; TAG_NAME name; name.str = poolStoreString(&tempPool, enc, rawName, rawName + XmlNameLength(enc, rawName)); if (!name.str) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); result = storeAtts(parser, enc, s, &name, &bindings); if (result) return result; poolFinish(&tempPool); if (startElementHandler) { startElementHandler(handlerArg, name.str, (const XML_Char **)atts); noElmHandlers = XML_FALSE; } if (endElementHandler) { if (startElementHandler) *eventPP = *eventEndPP; endElementHandler(handlerArg, name.str); noElmHandlers = XML_FALSE; } if (noElmHandlers && defaultHandler) reportDefault(parser, enc, s, next); poolClear(&tempPool); while (bindings) { BINDING *b = bindings; if (endNamespaceDeclHandler) endNamespaceDeclHandler(handlerArg, b->prefix->name); bindings = bindings->nextTagBinding; b->nextTagBinding = freeBindingList; freeBindingList = b; b->prefix->binding = b->prevPrefixBinding; } } if (tagLevel == 0) return epilogProcessor(parser, next, end, nextPtr); break; case XML_TOK_END_TAG: if (tagLevel == startTagLevel) return XML_ERROR_ASYNC_ENTITY; else { int len; const char *rawName; TAG *tag = tagStack; tagStack = tag->parent; tag->parent = freeTagList; freeTagList = tag; rawName = s + enc->minBytesPerChar*2; len = XmlNameLength(enc, rawName); if (len != tag->rawNameLength || memcmp(tag->rawName, rawName, len) != 0) { *eventPP = rawName; return XML_ERROR_TAG_MISMATCH; } --tagLevel; if (endElementHandler) { const XML_Char *localPart; const XML_Char *prefix; XML_Char *uri; localPart = tag->name.localPart; if (ns && localPart) { /* localPart and prefix may have been overwritten in tag->name.str, since this points to the binding->uri buffer which gets re-used; so we have to add them again */ uri = (XML_Char *)tag->name.str + tag->name.uriLen; /* don't need to check for space - already done in storeAtts() */ while (*localPart) *uri++ = *localPart++; prefix = (XML_Char *)tag->name.prefix; if (ns_triplets && prefix) { *uri++ = namespaceSeparator; while (*prefix) *uri++ = *prefix++; } *uri = XML_T('\0'); } endElementHandler(handlerArg, tag->name.str); } else if (defaultHandler) reportDefault(parser, enc, s, next); while (tag->bindings) { BINDING *b = tag->bindings; if (endNamespaceDeclHandler) endNamespaceDeclHandler(handlerArg, b->prefix->name); tag->bindings = tag->bindings->nextTagBinding; b->nextTagBinding = freeBindingList; freeBindingList = b; b->prefix->binding = b->prevPrefixBinding; } if (tagLevel == 0) return epilogProcessor(parser, next, end, nextPtr); } break; case XML_TOK_CHAR_REF: { int n = XmlCharRefNumber(enc, s); if (n < 0) return XML_ERROR_BAD_CHAR_REF; if (characterDataHandler) { XML_Char buf[XML_ENCODE_MAX]; characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf)); } else if (defaultHandler) reportDefault(parser, enc, s, next); } break; case XML_TOK_XML_DECL: return XML_ERROR_MISPLACED_XML_PI; case XML_TOK_DATA_NEWLINE: if (characterDataHandler) { XML_Char c = 0xA; characterDataHandler(handlerArg, &c, 1); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_TOK_CDATA_SECT_OPEN: { enum XML_Error result; if (startCdataSectionHandler) startCdataSectionHandler(handlerArg); #if 0 /* Suppose you doing a transformation on a document that involves changing only the character data. You set up a defaultHandler and a characterDataHandler. The defaultHandler simply copies characters through. The characterDataHandler does the transformation and writes the characters out escaping them as necessary. This case will fail to work if we leave out the following two lines (because & and < inside CDATA sections will be incorrectly escaped). However, now we have a start/endCdataSectionHandler, so it seems easier to let the user deal with this. */ else if (characterDataHandler) characterDataHandler(handlerArg, dataBuf, 0); #endif else if (defaultHandler) reportDefault(parser, enc, s, next); result = doCdataSection(parser, enc, &next, end, nextPtr, haveMore); if (result != XML_ERROR_NONE) return result; else if (!next) { processor = cdataSectionProcessor; return result; } } break; case XML_TOK_TRAILING_RSQB: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } if (characterDataHandler) { if (MUST_CONVERT(enc, s)) { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); characterDataHandler(handlerArg, dataBuf, (int)(dataPtr - (ICHAR *)dataBuf)); } else characterDataHandler(handlerArg, (XML_Char *)s, (int)((XML_Char *)end - (XML_Char *)s)); } else if (defaultHandler) reportDefault(parser, enc, s, end); /* We are at the end of the final buffer, should we check for XML_SUSPENDED, XML_FINISHED? */ if (startTagLevel == 0) { *eventPP = end; return XML_ERROR_NO_ELEMENTS; } if (tagLevel != startTagLevel) { *eventPP = end; return XML_ERROR_ASYNC_ENTITY; } *nextPtr = end; return XML_ERROR_NONE; case XML_TOK_DATA_CHARS: { XML_CharacterDataHandler charDataHandler = characterDataHandler; if (charDataHandler) { if (MUST_CONVERT(enc, s)) { for (;;) { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); *eventEndPP = s; charDataHandler(handlerArg, dataBuf, (int)(dataPtr - (ICHAR *)dataBuf)); if (s == next) break; *eventPP = s; } } else charDataHandler(handlerArg, (XML_Char *)s, (int)((XML_Char *)next - (XML_Char *)s)); } else if (defaultHandler) reportDefault(parser, enc, s, next); } break; case XML_TOK_PI: if (!reportProcessingInstruction(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_COMMENT: if (!reportComment(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; break; default: if (defaultHandler) reportDefault(parser, enc, s, next); break; } *eventPP = s = next; switch (ps_parsing) { case XML_SUSPENDED: *nextPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: ; } } /* not reached */ } /* Precondition: all arguments must be non-NULL; Purpose: - normalize attributes - check attributes for well-formedness - generate namespace aware attribute names (URI, prefix) - build list of attributes for startElementHandler - default attributes - process namespace declarations (check and report them) - generate namespace aware element name (URI, prefix) */ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr, TAG_NAME *tagNamePtr, BINDING **bindingsPtr) { DTD * const dtd = _dtd; /* save one level of indirection */ ELEMENT_TYPE *elementType; int nDefaultAtts; const XML_Char **appAtts; /* the attribute list for the application */ int attIndex = 0; int prefixLen; int i; int n; XML_Char *uri; int nPrefixes = 0; BINDING *binding; const XML_Char *localPart; /* lookup the element type name */ elementType = (ELEMENT_TYPE *)lookup(&dtd->elementTypes, tagNamePtr->str,0); if (!elementType) { const XML_Char *name = poolCopyString(&dtd->pool, tagNamePtr->str); if (!name) return XML_ERROR_NO_MEMORY; elementType = (ELEMENT_TYPE *)lookup(&dtd->elementTypes, name, sizeof(ELEMENT_TYPE)); if (!elementType) return XML_ERROR_NO_MEMORY; if (ns && !setElementTypePrefix(parser, elementType)) return XML_ERROR_NO_MEMORY; } nDefaultAtts = elementType->nDefaultAtts; /* get the attributes from the tokenizer */ n = XmlGetAttributes(enc, attStr, attsSize, atts); if (n + nDefaultAtts > attsSize) { int oldAttsSize = attsSize; ATTRIBUTE *temp; attsSize = n + nDefaultAtts + INIT_ATTS_SIZE; temp = (ATTRIBUTE *)REALLOC((void *)atts, attsSize * sizeof(ATTRIBUTE)); if (temp == NULL) return XML_ERROR_NO_MEMORY; atts = temp; if (n > oldAttsSize) XmlGetAttributes(enc, attStr, n, atts); } appAtts = (const XML_Char **)atts; for (i = 0; i < n; i++) { /* add the name and value to the attribute list */ ATTRIBUTE_ID *attId = getAttributeId(parser, enc, atts[i].name, atts[i].name + XmlNameLength(enc, atts[i].name)); if (!attId) return XML_ERROR_NO_MEMORY; /* Detect duplicate attributes by their QNames. This does not work when namespace processing is turned on and different prefixes for the same namespace are used. For this case we have a check further down. */ if ((attId->name)[-1]) { if (enc == encoding) eventPtr = atts[i].name; return XML_ERROR_DUPLICATE_ATTRIBUTE; } (attId->name)[-1] = 1; appAtts[attIndex++] = attId->name; if (!atts[i].normalized) { enum XML_Error result; XML_Bool isCdata = XML_TRUE; /* figure out whether declared as other than CDATA */ if (attId->maybeTokenized) { int j; for (j = 0; j < nDefaultAtts; j++) { if (attId == elementType->defaultAtts[j].id) { isCdata = elementType->defaultAtts[j].isCdata; break; } } } /* normalize the attribute value */ result = storeAttributeValue(parser, enc, isCdata, atts[i].valuePtr, atts[i].valueEnd, &tempPool); if (result) return result; appAtts[attIndex] = poolStart(&tempPool); poolFinish(&tempPool); } else { /* the value did not need normalizing */ appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr, atts[i].valueEnd); if (appAtts[attIndex] == 0) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); } /* handle prefixed attribute names */ if (attId->prefix) { if (attId->xmlns) { /* deal with namespace declarations here */ enum XML_Error result = addBinding(parser, attId->prefix, attId, appAtts[attIndex], bindingsPtr); if (result) return result; --attIndex; } else { /* deal with other prefixed names later */ attIndex++; nPrefixes++; (attId->name)[-1] = 2; } } else attIndex++; } /* set-up for XML_GetSpecifiedAttributeCount and XML_GetIdAttributeIndex */ nSpecifiedAtts = attIndex; if (elementType->idAtt && (elementType->idAtt->name)[-1]) { for (i = 0; i < attIndex; i += 2) if (appAtts[i] == elementType->idAtt->name) { idAttIndex = i; break; } } else idAttIndex = -1; /* do attribute defaulting */ for (i = 0; i < nDefaultAtts; i++) { const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + i; if (!(da->id->name)[-1] && da->value) { if (da->id->prefix) { if (da->id->xmlns) { enum XML_Error result = addBinding(parser, da->id->prefix, da->id, da->value, bindingsPtr); if (result) return result; } else { (da->id->name)[-1] = 2; nPrefixes++; appAtts[attIndex++] = da->id->name; appAtts[attIndex++] = da->value; } } else { (da->id->name)[-1] = 1; appAtts[attIndex++] = da->id->name; appAtts[attIndex++] = da->value; } } } appAtts[attIndex] = 0; /* expand prefixed attribute names, check for duplicates, and clear flags that say whether attributes were specified */ i = 0; if (nPrefixes) { int j; /* hash table index */ unsigned long version = nsAttsVersion; int nsAttsSize = (int)1 << nsAttsPower; /* size of hash table must be at least 2 * (# of prefixed attributes) */ if ((nPrefixes << 1) >> nsAttsPower) { /* true for nsAttsPower = 0 */ NS_ATT *temp; /* hash table size must also be a power of 2 and >= 8 */ while (nPrefixes >> nsAttsPower++); if (nsAttsPower < 3) nsAttsPower = 3; nsAttsSize = (int)1 << nsAttsPower; temp = (NS_ATT *)REALLOC(nsAtts, nsAttsSize * sizeof(NS_ATT)); if (!temp) return XML_ERROR_NO_MEMORY; nsAtts = temp; version = 0; /* force re-initialization of nsAtts hash table */ } /* using a version flag saves us from initializing nsAtts every time */ if (!version) { /* initialize version flags when version wraps around */ version = INIT_ATTS_VERSION; for (j = nsAttsSize; j != 0; ) nsAtts[--j].version = version; } nsAttsVersion = --version; /* expand prefixed names and check for duplicates */ for (; i < attIndex; i += 2) { const XML_Char *s = appAtts[i]; if (s[-1] == 2) { /* prefixed */ ATTRIBUTE_ID *id; const BINDING *b; unsigned long uriHash = 0; ((XML_Char *)s)[-1] = 0; /* clear flag */ id = (ATTRIBUTE_ID *)lookup(&dtd->attributeIds, s, 0); b = id->prefix->binding; if (!b) return XML_ERROR_UNBOUND_PREFIX; /* as we expand the name we also calculate its hash value */ for (j = 0; j < b->uriLen; j++) { const XML_Char c = b->uri[j]; if (!poolAppendChar(&tempPool, c)) return XML_ERROR_NO_MEMORY; uriHash = CHAR_HASH(uriHash, c); } while (*s++ != XML_T(ASCII_COLON)) ; do { /* copies null terminator */ const XML_Char c = *s; if (!poolAppendChar(&tempPool, *s)) return XML_ERROR_NO_MEMORY; uriHash = CHAR_HASH(uriHash, c); } while (*s++); { /* Check hash table for duplicate of expanded name (uriName). Derived from code in lookup(HASH_TABLE *table, ...). */ unsigned char step = 0; unsigned long mask = nsAttsSize - 1; j = uriHash & mask; /* index into hash table */ while (nsAtts[j].version == version) { /* for speed we compare stored hash values first */ if (uriHash == nsAtts[j].hash) { const XML_Char *s1 = poolStart(&tempPool); const XML_Char *s2 = nsAtts[j].uriName; /* s1 is null terminated, but not s2 */ for (; *s1 == *s2 && *s1 != 0; s1++, s2++); if (*s1 == 0) return XML_ERROR_DUPLICATE_ATTRIBUTE; } if (!step) step = PROBE_STEP(uriHash, mask, nsAttsPower); j < step ? (j += nsAttsSize - step) : (j -= step); } } if (ns_triplets) { /* append namespace separator and prefix */ tempPool.ptr[-1] = namespaceSeparator; s = b->prefix->name; do { if (!poolAppendChar(&tempPool, *s)) return XML_ERROR_NO_MEMORY; } while (*s++); } /* store expanded name in attribute list */ s = poolStart(&tempPool); poolFinish(&tempPool); appAtts[i] = s; /* fill empty slot with new version, uriName and hash value */ nsAtts[j].version = version; nsAtts[j].hash = uriHash; nsAtts[j].uriName = s; if (!--nPrefixes) { i += 2; break; } } else /* not prefixed */ ((XML_Char *)s)[-1] = 0; /* clear flag */ } } /* clear flags for the remaining attributes */ for (; i < attIndex; i += 2) ((XML_Char *)(appAtts[i]))[-1] = 0; for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding) binding->attId->name[-1] = 0; if (!ns) return XML_ERROR_NONE; /* expand the element type name */ if (elementType->prefix) { binding = elementType->prefix->binding; if (!binding) return XML_ERROR_UNBOUND_PREFIX; localPart = tagNamePtr->str; while (*localPart++ != XML_T(ASCII_COLON)) ; } else if (dtd->defaultPrefix.binding) { binding = dtd->defaultPrefix.binding; localPart = tagNamePtr->str; } else return XML_ERROR_NONE; prefixLen = 0; if (ns_triplets && binding->prefix->name) { for (; binding->prefix->name[prefixLen++];) ; /* prefixLen includes null terminator */ } tagNamePtr->localPart = localPart; tagNamePtr->uriLen = binding->uriLen; tagNamePtr->prefix = binding->prefix->name; tagNamePtr->prefixLen = prefixLen; for (i = 0; localPart[i++];) ; /* i includes null terminator */ n = i + binding->uriLen + prefixLen; if (n > binding->uriAlloc) { TAG *p; uri = (XML_Char *)MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char)); if (!uri) return XML_ERROR_NO_MEMORY; binding->uriAlloc = n + EXPAND_SPARE; memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char)); for (p = tagStack; p; p = p->parent) if (p->name.str == binding->uri) p->name.str = uri; FREE(binding->uri); binding->uri = uri; } /* if namespaceSeparator != '\0' then uri includes it already */ uri = binding->uri + binding->uriLen; memcpy(uri, localPart, i * sizeof(XML_Char)); /* we always have a namespace separator between localPart and prefix */ if (prefixLen) { uri += i - 1; *uri = namespaceSeparator; /* replace null terminator */ memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char)); } tagNamePtr->str = binding->uri; return XML_ERROR_NONE; } /* addBinding() overwrites the value of prefix->binding without checking. Therefore one must keep track of the old value outside of addBinding(). */ static enum XML_Error addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr) { static const XML_Char xmlNamespace[] = { ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, ASCII_SLASH, ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g, ASCII_SLASH, ASCII_X, ASCII_M, ASCII_L, ASCII_SLASH, ASCII_1, ASCII_9, ASCII_9, ASCII_8, ASCII_SLASH, ASCII_n, ASCII_a, ASCII_m, ASCII_e, ASCII_s, ASCII_p, ASCII_a, ASCII_c, ASCII_e, '\0' }; static const int xmlLen = (int)sizeof(xmlNamespace)/sizeof(XML_Char) - 1; static const XML_Char xmlnsNamespace[] = { ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, ASCII_SLASH, ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g, ASCII_SLASH, ASCII_2, ASCII_0, ASCII_0, ASCII_0, ASCII_SLASH, ASCII_x, ASCII_m, ASCII_l, ASCII_n, ASCII_s, ASCII_SLASH, '\0' }; static const int xmlnsLen = (int)sizeof(xmlnsNamespace)/sizeof(XML_Char) - 1; XML_Bool mustBeXML = XML_FALSE; XML_Bool isXML = XML_TRUE; XML_Bool isXMLNS = XML_TRUE; BINDING *b; int len; /* empty URI is only valid for default namespace per XML NS 1.0 (not 1.1) */ if (*uri == XML_T('\0') && prefix->name) return XML_ERROR_UNDECLARING_PREFIX; if (prefix->name && prefix->name[0] == XML_T(ASCII_x) && prefix->name[1] == XML_T(ASCII_m) && prefix->name[2] == XML_T(ASCII_l)) { /* Not allowed to bind xmlns */ if (prefix->name[3] == XML_T(ASCII_n) && prefix->name[4] == XML_T(ASCII_s) && prefix->name[5] == XML_T('\0')) return XML_ERROR_RESERVED_PREFIX_XMLNS; if (prefix->name[3] == XML_T('\0')) mustBeXML = XML_TRUE; } for (len = 0; uri[len]; len++) { if (isXML && (len > xmlLen || uri[len] != xmlNamespace[len])) isXML = XML_FALSE; if (!mustBeXML && isXMLNS && (len > xmlnsLen || uri[len] != xmlnsNamespace[len])) isXMLNS = XML_FALSE; } isXML = isXML && len == xmlLen; isXMLNS = isXMLNS && len == xmlnsLen; if (mustBeXML != isXML) return mustBeXML ? XML_ERROR_RESERVED_PREFIX_XML : XML_ERROR_RESERVED_NAMESPACE_URI; if (isXMLNS) return XML_ERROR_RESERVED_NAMESPACE_URI; if (namespaceSeparator) len++; if (freeBindingList) { b = freeBindingList; if (len > b->uriAlloc) { XML_Char *temp = (XML_Char *)REALLOC(b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE)); if (temp == NULL) return XML_ERROR_NO_MEMORY; b->uri = temp; b->uriAlloc = len + EXPAND_SPARE; } freeBindingList = b->nextTagBinding; } else { b = (BINDING *)MALLOC(sizeof(BINDING)); if (!b) return XML_ERROR_NO_MEMORY; b->uri = (XML_Char *)MALLOC(sizeof(XML_Char) * (len + EXPAND_SPARE)); if (!b->uri) { FREE(b); return XML_ERROR_NO_MEMORY; } b->uriAlloc = len + EXPAND_SPARE; } b->uriLen = len; memcpy(b->uri, uri, len * sizeof(XML_Char)); if (namespaceSeparator) b->uri[len - 1] = namespaceSeparator; b->prefix = prefix; b->attId = attId; b->prevPrefixBinding = prefix->binding; /* NULL binding when default namespace undeclared */ if (*uri == XML_T('\0') && prefix == &_dtd->defaultPrefix) prefix->binding = NULL; else prefix->binding = b; b->nextTagBinding = *bindingsPtr; *bindingsPtr = b; /* if attId == NULL then we are not starting a namespace scope */ if (attId && startNamespaceDeclHandler) startNamespaceDeclHandler(handlerArg, prefix->name, prefix->binding ? uri : 0); return XML_ERROR_NONE; } /* The idea here is to avoid using stack for each CDATA section when the whole file is parsed with one call. */ static enum XML_Error PTRCALL cdataSectionProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doCdataSection(parser, encoding, &start, end, endPtr, (XML_Bool)!ps_finalBuffer); if (result != XML_ERROR_NONE) return result; if (start) { if (parentParser) { /* we are parsing an external entity */ processor = externalEntityContentProcessor; return externalEntityContentProcessor(parser, start, end, endPtr); } else { processor = contentProcessor; return contentProcessor(parser, start, end, endPtr); } } return result; } /* startPtr gets set to non-null if the section is closed, and to null if the section is not yet closed. */ static enum XML_Error doCdataSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, const char *end, const char **nextPtr, XML_Bool haveMore) { const char *s = *startPtr; const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; *eventPP = s; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } *eventPP = s; *startPtr = NULL; for (;;) { const char *next; int tok = XmlCdataSectionTok(enc, s, end, &next); *eventEndPP = next; switch (tok) { case XML_TOK_CDATA_SECT_CLOSE: if (endCdataSectionHandler) endCdataSectionHandler(handlerArg); #if 0 /* see comment under XML_TOK_CDATA_SECT_OPEN */ else if (characterDataHandler) characterDataHandler(handlerArg, dataBuf, 0); #endif else if (defaultHandler) reportDefault(parser, enc, s, next); *startPtr = next; *nextPtr = next; if (ps_parsing == XML_FINISHED) return XML_ERROR_ABORTED; else return XML_ERROR_NONE; case XML_TOK_DATA_NEWLINE: if (characterDataHandler) { XML_Char c = 0xA; characterDataHandler(handlerArg, &c, 1); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_TOK_DATA_CHARS: { XML_CharacterDataHandler charDataHandler = characterDataHandler; if (charDataHandler) { if (MUST_CONVERT(enc, s)) { for (;;) { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); *eventEndPP = next; charDataHandler(handlerArg, dataBuf, (int)(dataPtr - (ICHAR *)dataBuf)); if (s == next) break; *eventPP = s; } } else charDataHandler(handlerArg, (XML_Char *)s, (int)((XML_Char *)next - (XML_Char *)s)); } else if (defaultHandler) reportDefault(parser, enc, s, next); } break; case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL_CHAR: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; case XML_TOK_PARTIAL: case XML_TOK_NONE: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_CDATA_SECTION; default: *eventPP = next; return XML_ERROR_UNEXPECTED_STATE; } *eventPP = s = next; switch (ps_parsing) { case XML_SUSPENDED: *nextPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: ; } } /* not reached */ } #ifdef XML_DTD /* The idea here is to avoid using stack for each IGNORE section when the whole file is parsed with one call. */ static enum XML_Error PTRCALL ignoreSectionProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doIgnoreSection(parser, encoding, &start, end, endPtr, (XML_Bool)!ps_finalBuffer); if (result != XML_ERROR_NONE) return result; if (start) { processor = prologProcessor; return prologProcessor(parser, start, end, endPtr); } return result; } /* startPtr gets set to non-null is the section is closed, and to null if the section is not yet closed. */ static enum XML_Error doIgnoreSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, const char *end, const char **nextPtr, XML_Bool haveMore) { const char *next; int tok; const char *s = *startPtr; const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; *eventPP = s; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } *eventPP = s; *startPtr = NULL; tok = XmlIgnoreSectionTok(enc, s, end, &next); *eventEndPP = next; switch (tok) { case XML_TOK_IGNORE_SECT: if (defaultHandler) reportDefault(parser, enc, s, next); *startPtr = next; *nextPtr = next; if (ps_parsing == XML_FINISHED) return XML_ERROR_ABORTED; else return XML_ERROR_NONE; case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL_CHAR: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; case XML_TOK_PARTIAL: case XML_TOK_NONE: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */ default: *eventPP = next; return XML_ERROR_UNEXPECTED_STATE; } /* not reached */ } #endif /* XML_DTD */ static enum XML_Error initializeEncoding(XML_Parser parser) { const char *s; #ifdef XML_UNICODE char encodingBuf[128]; if (!protocolEncodingName) s = NULL; else { int i; for (i = 0; protocolEncodingName[i]; i++) { if (i == sizeof(encodingBuf) - 1 || (protocolEncodingName[i] & ~0x7f) != 0) { encodingBuf[0] = '\0'; break; } encodingBuf[i] = (char)protocolEncodingName[i]; } encodingBuf[i] = '\0'; s = encodingBuf; } #else s = protocolEncodingName; #endif if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s)) return XML_ERROR_NONE; return handleUnknownEncoding(parser, protocolEncodingName); } static enum XML_Error processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *s, const char *next) { const char *encodingName = NULL; const XML_Char *storedEncName = NULL; const ENCODING *newEncoding = NULL; const char *version = NULL; const char *versionend; const XML_Char *storedversion = NULL; int standalone = -1; if (!(ns ? XmlParseXmlDeclNS : XmlParseXmlDecl)(isGeneralTextEntity, encoding, s, next, &eventPtr, &version, &versionend, &encodingName, &newEncoding, &standalone)) { if (isGeneralTextEntity) return XML_ERROR_TEXT_DECL; else return XML_ERROR_XML_DECL; } if (!isGeneralTextEntity && standalone == 1) { _dtd->standalone = XML_TRUE; #ifdef XML_DTD if (paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE) paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; #endif /* XML_DTD */ } if (xmlDeclHandler) { if (encodingName != NULL) { storedEncName = poolStoreString(&temp2Pool, encoding, encodingName, encodingName + XmlNameLength(encoding, encodingName)); if (!storedEncName) return XML_ERROR_NO_MEMORY; poolFinish(&temp2Pool); } if (version) { storedversion = poolStoreString(&temp2Pool, encoding, version, versionend - encoding->minBytesPerChar); if (!storedversion) return XML_ERROR_NO_MEMORY; } xmlDeclHandler(handlerArg, storedversion, storedEncName, standalone); } else if (defaultHandler) reportDefault(parser, encoding, s, next); if (protocolEncodingName == NULL) { if (newEncoding) { if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) { eventPtr = encodingName; return XML_ERROR_INCORRECT_ENCODING; } encoding = newEncoding; } else if (encodingName) { enum XML_Error result; if (!storedEncName) { storedEncName = poolStoreString( &temp2Pool, encoding, encodingName, encodingName + XmlNameLength(encoding, encodingName)); if (!storedEncName) return XML_ERROR_NO_MEMORY; } result = handleUnknownEncoding(parser, storedEncName); poolClear(&temp2Pool); if (result == XML_ERROR_UNKNOWN_ENCODING) eventPtr = encodingName; return result; } } if (storedEncName || storedversion) poolClear(&temp2Pool); return XML_ERROR_NONE; } static enum XML_Error handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName) { if (unknownEncodingHandler) { XML_Encoding info; int i; for (i = 0; i < 256; i++) info.map[i] = -1; info.convert = NULL; info.data = NULL; info.release = NULL; if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName, &info)) { ENCODING *enc; unknownEncodingMem = MALLOC(XmlSizeOfUnknownEncoding()); if (!unknownEncodingMem) { if (info.release) info.release(info.data); return XML_ERROR_NO_MEMORY; } enc = (ns ? XmlInitUnknownEncodingNS : XmlInitUnknownEncoding)(unknownEncodingMem, info.map, info.convert, info.data); if (enc) { unknownEncodingData = info.data; unknownEncodingRelease = info.release; encoding = enc; return XML_ERROR_NONE; } } if (info.release != NULL) info.release(info.data); } return XML_ERROR_UNKNOWN_ENCODING; } static enum XML_Error PTRCALL prologInitProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { enum XML_Error result = initializeEncoding(parser); if (result != XML_ERROR_NONE) return result; processor = prologProcessor; return prologProcessor(parser, s, end, nextPtr); } #ifdef XML_DTD static enum XML_Error PTRCALL externalParEntInitProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { enum XML_Error result = initializeEncoding(parser); if (result != XML_ERROR_NONE) return result; /* we know now that XML_Parse(Buffer) has been called, so we consider the external parameter entity read */ _dtd->paramEntityRead = XML_TRUE; if (prologState.inEntityValue) { processor = entityValueInitProcessor; return entityValueInitProcessor(parser, s, end, nextPtr); } else { processor = externalParEntProcessor; return externalParEntProcessor(parser, s, end, nextPtr); } } static enum XML_Error PTRCALL entityValueInitProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { int tok; const char *start = s; const char *next = start; eventPtr = start; for (;;) { tok = XmlPrologTok(encoding, start, end, &next); eventEndPtr = next; if (tok <= 0) { if (!ps_finalBuffer && tok != XML_TOK_INVALID) { *nextPtr = s; return XML_ERROR_NONE; } switch (tok) { case XML_TOK_INVALID: return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: return XML_ERROR_PARTIAL_CHAR; case XML_TOK_NONE: /* start == end */ default: break; } /* found end of entity value - can store it now */ return storeEntityValue(parser, encoding, s, end); } else if (tok == XML_TOK_XML_DECL) { enum XML_Error result; result = processXmlDecl(parser, 0, start, next); if (result != XML_ERROR_NONE) return result; switch (ps_parsing) { case XML_SUSPENDED: *nextPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: *nextPtr = next; } /* stop scanning for text declaration - we found one */ processor = entityValueProcessor; return entityValueProcessor(parser, next, end, nextPtr); } /* If we are at the end of the buffer, this would cause XmlPrologTok to return XML_TOK_NONE on the next call, which would then cause the function to exit with *nextPtr set to s - that is what we want for other tokens, but not for the BOM - we would rather like to skip it; then, when this routine is entered the next time, XmlPrologTok will return XML_TOK_INVALID, since the BOM is still in the buffer */ else if (tok == XML_TOK_BOM && next == end && !ps_finalBuffer) { *nextPtr = next; return XML_ERROR_NONE; } start = next; eventPtr = start; } } static enum XML_Error PTRCALL externalParEntProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { const char *next = s; int tok; tok = XmlPrologTok(encoding, s, end, &next); if (tok <= 0) { if (!ps_finalBuffer && tok != XML_TOK_INVALID) { *nextPtr = s; return XML_ERROR_NONE; } switch (tok) { case XML_TOK_INVALID: return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: return XML_ERROR_PARTIAL_CHAR; case XML_TOK_NONE: /* start == end */ default: break; } } /* This would cause the next stage, i.e. doProlog to be passed XML_TOK_BOM. However, when parsing an external subset, doProlog will not accept a BOM as valid, and report a syntax error, so we have to skip the BOM */ else if (tok == XML_TOK_BOM) { s = next; tok = XmlPrologTok(encoding, s, end, &next); } processor = prologProcessor; return doProlog(parser, encoding, s, end, tok, next, nextPtr, (XML_Bool)!ps_finalBuffer); } static enum XML_Error PTRCALL entityValueProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { const char *start = s; const char *next = s; const ENCODING *enc = encoding; int tok; for (;;) { tok = XmlPrologTok(enc, start, end, &next); if (tok <= 0) { if (!ps_finalBuffer && tok != XML_TOK_INVALID) { *nextPtr = s; return XML_ERROR_NONE; } switch (tok) { case XML_TOK_INVALID: return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: return XML_ERROR_PARTIAL_CHAR; case XML_TOK_NONE: /* start == end */ default: break; } /* found end of entity value - can store it now */ return storeEntityValue(parser, enc, s, end); } start = next; } } #endif /* XML_DTD */ static enum XML_Error PTRCALL prologProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { const char *next = s; int tok = XmlPrologTok(encoding, s, end, &next); return doProlog(parser, encoding, s, end, tok, next, nextPtr, (XML_Bool)!ps_finalBuffer); } static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, int tok, const char *next, const char **nextPtr, XML_Bool haveMore) { #ifdef XML_DTD static const XML_Char externalSubsetName[] = { ASCII_HASH , '\0' }; #endif /* XML_DTD */ static const XML_Char atypeCDATA[] = { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; static const XML_Char atypeID[] = { ASCII_I, ASCII_D, '\0' }; static const XML_Char atypeIDREF[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' }; static const XML_Char atypeIDREFS[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' }; static const XML_Char atypeENTITY[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' }; static const XML_Char atypeENTITIES[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, '\0' }; static const XML_Char atypeNMTOKEN[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' }; static const XML_Char atypeNMTOKENS[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, '\0' }; static const XML_Char notationPrefix[] = { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, ASCII_LPAREN, '\0' }; static const XML_Char enumValueSep[] = { ASCII_PIPE, '\0' }; static const XML_Char enumValueStart[] = { ASCII_LPAREN, '\0' }; /* save one level of indirection */ DTD * const dtd = _dtd; const char **eventPP; const char **eventEndPP; enum XML_Content_Quant quant; if (enc == encoding) { eventPP = &eventPtr; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } for (;;) { int role; XML_Bool handleDefault = XML_TRUE; *eventPP = s; *eventEndPP = next; if (tok <= 0) { if (haveMore && tok != XML_TOK_INVALID) { *nextPtr = s; return XML_ERROR_NONE; } switch (tok) { case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: return XML_ERROR_PARTIAL_CHAR; case XML_TOK_NONE: #ifdef XML_DTD /* for internal PE NOT referenced between declarations */ if (enc != encoding && !openInternalEntities->betweenDecl) { *nextPtr = s; return XML_ERROR_NONE; } /* WFC: PE Between Declarations - must check that PE contains complete markup, not only for external PEs, but also for internal PEs if the reference occurs between declarations. */ if (isParamEntity || enc != encoding) { if (XmlTokenRole(&prologState, XML_TOK_NONE, end, end, enc) == XML_ROLE_ERROR) return XML_ERROR_INCOMPLETE_PE; *nextPtr = s; return XML_ERROR_NONE; } #endif /* XML_DTD */ return XML_ERROR_NO_ELEMENTS; default: tok = -tok; next = end; break; } } role = XmlTokenRole(&prologState, tok, s, next, enc); switch (role) { case XML_ROLE_XML_DECL: { enum XML_Error result = processXmlDecl(parser, 0, s, next); if (result != XML_ERROR_NONE) return result; enc = encoding; handleDefault = XML_FALSE; } break; case XML_ROLE_DOCTYPE_NAME: if (startDoctypeDeclHandler) { doctypeName = poolStoreString(&tempPool, enc, s, next); if (!doctypeName) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); doctypePubid = NULL; handleDefault = XML_FALSE; } doctypeSysid = NULL; /* always initialize to NULL */ break; case XML_ROLE_DOCTYPE_INTERNAL_SUBSET: if (startDoctypeDeclHandler) { startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid, doctypePubid, 1); doctypeName = NULL; poolClear(&tempPool); handleDefault = XML_FALSE; } break; #ifdef XML_DTD case XML_ROLE_TEXT_DECL: { enum XML_Error result = processXmlDecl(parser, 1, s, next); if (result != XML_ERROR_NONE) return result; enc = encoding; handleDefault = XML_FALSE; } break; #endif /* XML_DTD */ case XML_ROLE_DOCTYPE_PUBLIC_ID: #ifdef XML_DTD useForeignDTD = XML_FALSE; declEntity = (ENTITY *)lookup(&dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; #endif /* XML_DTD */ dtd->hasParamEntityRefs = XML_TRUE; if (startDoctypeDeclHandler) { if (!XmlIsPublicId(enc, s, next, eventPP)) return XML_ERROR_PUBLICID; { XML_Char *p; doctypePubid = p = poolStoreString(&tempPool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!doctypePubid) return XML_ERROR_NO_MEMORY; normalizePublicId(p); } poolFinish(&tempPool); handleDefault = XML_FALSE; goto alreadyChecked; } /* fall through */ case XML_ROLE_ENTITY_PUBLIC_ID: if (!XmlIsPublicId(enc, s, next, eventPP)) return XML_ERROR_PUBLICID; alreadyChecked: if (dtd->keepProcessing && declEntity) { XML_Char *tem = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!tem) return XML_ERROR_NO_MEMORY; normalizePublicId(tem); declEntity->publicId = tem; poolFinish(&dtd->pool); if (entityDeclHandler) handleDefault = XML_FALSE; } break; case XML_ROLE_DOCTYPE_CLOSE: if (doctypeName) { startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid, doctypePubid, 0); poolClear(&tempPool); handleDefault = XML_FALSE; } /* doctypeSysid will be non-NULL in the case of a previous XML_ROLE_DOCTYPE_SYSTEM_ID, even if startDoctypeDeclHandler was not set, indicating an external subset */ #ifdef XML_DTD if (doctypeSysid || useForeignDTD) { XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs; dtd->hasParamEntityRefs = XML_TRUE; if (paramEntityParsing && externalEntityRefHandler) { ENTITY *entity = (ENTITY *)lookup(&dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); if (!entity) return XML_ERROR_NO_MEMORY; if (useForeignDTD) entity->base = curBase; dtd->paramEntityRead = XML_FALSE; if (!externalEntityRefHandler(externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) return XML_ERROR_EXTERNAL_ENTITY_HANDLING; if (dtd->paramEntityRead) { if (!dtd->standalone && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; } /* if we didn't read the foreign DTD then this means that there is no external subset and we must reset dtd->hasParamEntityRefs */ else if (!doctypeSysid) dtd->hasParamEntityRefs = hadParamEntityRefs; /* end of DTD - no need to update dtd->keepProcessing */ } useForeignDTD = XML_FALSE; } #endif /* XML_DTD */ if (endDoctypeDeclHandler) { endDoctypeDeclHandler(handlerArg); handleDefault = XML_FALSE; } break; case XML_ROLE_INSTANCE_START: #ifdef XML_DTD /* if there is no DOCTYPE declaration then now is the last chance to read the foreign DTD */ if (useForeignDTD) { XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs; dtd->hasParamEntityRefs = XML_TRUE; if (paramEntityParsing && externalEntityRefHandler) { ENTITY *entity = (ENTITY *)lookup(&dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); if (!entity) return XML_ERROR_NO_MEMORY; entity->base = curBase; dtd->paramEntityRead = XML_FALSE; if (!externalEntityRefHandler(externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) return XML_ERROR_EXTERNAL_ENTITY_HANDLING; if (dtd->paramEntityRead) { if (!dtd->standalone && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; } /* if we didn't read the foreign DTD then this means that there is no external subset and we must reset dtd->hasParamEntityRefs */ else dtd->hasParamEntityRefs = hadParamEntityRefs; /* end of DTD - no need to update dtd->keepProcessing */ } } #endif /* XML_DTD */ processor = contentProcessor; return contentProcessor(parser, s, end, nextPtr); case XML_ROLE_ATTLIST_ELEMENT_NAME: declElementType = getElementType(parser, enc, s, next); if (!declElementType) return XML_ERROR_NO_MEMORY; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_NAME: declAttributeId = getAttributeId(parser, enc, s, next); if (!declAttributeId) return XML_ERROR_NO_MEMORY; declAttributeIsCdata = XML_FALSE; declAttributeType = NULL; declAttributeIsId = XML_FALSE; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_CDATA: declAttributeIsCdata = XML_TRUE; declAttributeType = atypeCDATA; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_ID: declAttributeIsId = XML_TRUE; declAttributeType = atypeID; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_IDREF: declAttributeType = atypeIDREF; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_IDREFS: declAttributeType = atypeIDREFS; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_ENTITY: declAttributeType = atypeENTITY; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES: declAttributeType = atypeENTITIES; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN: declAttributeType = atypeNMTOKEN; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS: declAttributeType = atypeNMTOKENS; checkAttListDeclHandler: if (dtd->keepProcessing && attlistDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_ATTRIBUTE_ENUM_VALUE: case XML_ROLE_ATTRIBUTE_NOTATION_VALUE: if (dtd->keepProcessing && attlistDeclHandler) { const XML_Char *prefix; if (declAttributeType) { prefix = enumValueSep; } else { prefix = (role == XML_ROLE_ATTRIBUTE_NOTATION_VALUE ? notationPrefix : enumValueStart); } if (!poolAppendString(&tempPool, prefix)) return XML_ERROR_NO_MEMORY; if (!poolAppend(&tempPool, enc, s, next)) return XML_ERROR_NO_MEMORY; declAttributeType = tempPool.start; handleDefault = XML_FALSE; } break; case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE: case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE: if (dtd->keepProcessing) { if (!defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, declAttributeIsId, 0, parser)) return XML_ERROR_NO_MEMORY; if (attlistDeclHandler && declAttributeType) { if (*declAttributeType == XML_T(ASCII_LPAREN) || (*declAttributeType == XML_T(ASCII_N) && declAttributeType[1] == XML_T(ASCII_O))) { /* Enumerated or Notation type */ if (!poolAppendChar(&tempPool, XML_T(ASCII_RPAREN)) || !poolAppendChar(&tempPool, XML_T('\0'))) return XML_ERROR_NO_MEMORY; declAttributeType = tempPool.start; poolFinish(&tempPool); } *eventEndPP = s; attlistDeclHandler(handlerArg, declElementType->name, declAttributeId->name, declAttributeType, 0, role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE); poolClear(&tempPool); handleDefault = XML_FALSE; } } break; case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE: case XML_ROLE_FIXED_ATTRIBUTE_VALUE: if (dtd->keepProcessing) { const XML_Char *attVal; enum XML_Error result = storeAttributeValue(parser, enc, declAttributeIsCdata, s + enc->minBytesPerChar, next - enc->minBytesPerChar, &dtd->pool); if (result) return result; attVal = poolStart(&dtd->pool); poolFinish(&dtd->pool); /* ID attributes aren't allowed to have a default */ if (!defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, XML_FALSE, attVal, parser)) return XML_ERROR_NO_MEMORY; if (attlistDeclHandler && declAttributeType) { if (*declAttributeType == XML_T(ASCII_LPAREN) || (*declAttributeType == XML_T(ASCII_N) && declAttributeType[1] == XML_T(ASCII_O))) { /* Enumerated or Notation type */ if (!poolAppendChar(&tempPool, XML_T(ASCII_RPAREN)) || !poolAppendChar(&tempPool, XML_T('\0'))) return XML_ERROR_NO_MEMORY; declAttributeType = tempPool.start; poolFinish(&tempPool); } *eventEndPP = s; attlistDeclHandler(handlerArg, declElementType->name, declAttributeId->name, declAttributeType, attVal, role == XML_ROLE_FIXED_ATTRIBUTE_VALUE); poolClear(&tempPool); handleDefault = XML_FALSE; } } break; case XML_ROLE_ENTITY_VALUE: if (dtd->keepProcessing) { enum XML_Error result = storeEntityValue(parser, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (declEntity) { declEntity->textPtr = poolStart(&dtd->entityValuePool); declEntity->textLen = (int)(poolLength(&dtd->entityValuePool)); poolFinish(&dtd->entityValuePool); if (entityDeclHandler) { *eventEndPP = s; entityDeclHandler(handlerArg, declEntity->name, declEntity->is_param, declEntity->textPtr, declEntity->textLen, curBase, 0, 0, 0); handleDefault = XML_FALSE; } } else poolDiscard(&dtd->entityValuePool); if (result != XML_ERROR_NONE) return result; } break; case XML_ROLE_DOCTYPE_SYSTEM_ID: #ifdef XML_DTD useForeignDTD = XML_FALSE; #endif /* XML_DTD */ dtd->hasParamEntityRefs = XML_TRUE; if (startDoctypeDeclHandler) { doctypeSysid = poolStoreString(&tempPool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (doctypeSysid == NULL) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); handleDefault = XML_FALSE; } #ifdef XML_DTD else /* use externalSubsetName to make doctypeSysid non-NULL for the case where no startDoctypeDeclHandler is set */ doctypeSysid = externalSubsetName; #endif /* XML_DTD */ if (!dtd->standalone #ifdef XML_DTD && !paramEntityParsing #endif /* XML_DTD */ && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; #ifndef XML_DTD break; #else /* XML_DTD */ if (!declEntity) { declEntity = (ENTITY *)lookup(&dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; declEntity->publicId = NULL; } /* fall through */ #endif /* XML_DTD */ case XML_ROLE_ENTITY_SYSTEM_ID: if (dtd->keepProcessing && declEntity) { declEntity->systemId = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!declEntity->systemId) return XML_ERROR_NO_MEMORY; declEntity->base = curBase; poolFinish(&dtd->pool); if (entityDeclHandler) handleDefault = XML_FALSE; } break; case XML_ROLE_ENTITY_COMPLETE: if (dtd->keepProcessing && declEntity && entityDeclHandler) { *eventEndPP = s; entityDeclHandler(handlerArg, declEntity->name, declEntity->is_param, 0,0, declEntity->base, declEntity->systemId, declEntity->publicId, 0); handleDefault = XML_FALSE; } break; case XML_ROLE_ENTITY_NOTATION_NAME: if (dtd->keepProcessing && declEntity) { declEntity->notation = poolStoreString(&dtd->pool, enc, s, next); if (!declEntity->notation) return XML_ERROR_NO_MEMORY; poolFinish(&dtd->pool); if (unparsedEntityDeclHandler) { *eventEndPP = s; unparsedEntityDeclHandler(handlerArg, declEntity->name, declEntity->base, declEntity->systemId, declEntity->publicId, declEntity->notation); handleDefault = XML_FALSE; } else if (entityDeclHandler) { *eventEndPP = s; entityDeclHandler(handlerArg, declEntity->name, 0,0,0, declEntity->base, declEntity->systemId, declEntity->publicId, declEntity->notation); handleDefault = XML_FALSE; } } break; case XML_ROLE_GENERAL_ENTITY_NAME: { if (XmlPredefinedEntityName(enc, s, next)) { declEntity = NULL; break; } if (dtd->keepProcessing) { const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); if (!name) return XML_ERROR_NO_MEMORY; declEntity = (ENTITY *)lookup(&dtd->generalEntities, name, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; if (declEntity->name != name) { poolDiscard(&dtd->pool); declEntity = NULL; } else { poolFinish(&dtd->pool); declEntity->publicId = NULL; declEntity->is_param = XML_FALSE; /* if we have a parent parser or are reading an internal parameter entity, then the entity declaration is not considered "internal" */ declEntity->is_internal = !(parentParser || openInternalEntities); if (entityDeclHandler) handleDefault = XML_FALSE; } } else { poolDiscard(&dtd->pool); declEntity = NULL; } } break; case XML_ROLE_PARAM_ENTITY_NAME: #ifdef XML_DTD if (dtd->keepProcessing) { const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); if (!name) return XML_ERROR_NO_MEMORY; declEntity = (ENTITY *)lookup(&dtd->paramEntities, name, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; if (declEntity->name != name) { poolDiscard(&dtd->pool); declEntity = NULL; } else { poolFinish(&dtd->pool); declEntity->publicId = NULL; declEntity->is_param = XML_TRUE; /* if we have a parent parser or are reading an internal parameter entity, then the entity declaration is not considered "internal" */ declEntity->is_internal = !(parentParser || openInternalEntities); if (entityDeclHandler) handleDefault = XML_FALSE; } } else { poolDiscard(&dtd->pool); declEntity = NULL; } #else /* not XML_DTD */ declEntity = NULL; #endif /* XML_DTD */ break; case XML_ROLE_NOTATION_NAME: declNotationPublicId = NULL; declNotationName = NULL; if (notationDeclHandler) { declNotationName = poolStoreString(&tempPool, enc, s, next); if (!declNotationName) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); handleDefault = XML_FALSE; } break; case XML_ROLE_NOTATION_PUBLIC_ID: if (!XmlIsPublicId(enc, s, next, eventPP)) return XML_ERROR_PUBLICID; if (declNotationName) { /* means notationDeclHandler != NULL */ XML_Char *tem = poolStoreString(&tempPool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!tem) return XML_ERROR_NO_MEMORY; normalizePublicId(tem); declNotationPublicId = tem; poolFinish(&tempPool); handleDefault = XML_FALSE; } break; case XML_ROLE_NOTATION_SYSTEM_ID: if (declNotationName && notationDeclHandler) { const XML_Char *systemId = poolStoreString(&tempPool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!systemId) return XML_ERROR_NO_MEMORY; *eventEndPP = s; notationDeclHandler(handlerArg, declNotationName, curBase, systemId, declNotationPublicId); handleDefault = XML_FALSE; } poolClear(&tempPool); break; case XML_ROLE_NOTATION_NO_SYSTEM_ID: if (declNotationPublicId && notationDeclHandler) { *eventEndPP = s; notationDeclHandler(handlerArg, declNotationName, curBase, 0, declNotationPublicId); handleDefault = XML_FALSE; } poolClear(&tempPool); break; case XML_ROLE_ERROR: switch (tok) { case XML_TOK_PARAM_ENTITY_REF: /* PE references in internal subset are not allowed within declarations. */ return XML_ERROR_PARAM_ENTITY_REF; case XML_TOK_XML_DECL: return XML_ERROR_MISPLACED_XML_PI; default: return XML_ERROR_SYNTAX; } #ifdef XML_DTD case XML_ROLE_IGNORE_SECT: { enum XML_Error result; if (defaultHandler) reportDefault(parser, enc, s, next); handleDefault = XML_FALSE; result = doIgnoreSection(parser, enc, &next, end, nextPtr, haveMore); if (result != XML_ERROR_NONE) return result; else if (!next) { processor = ignoreSectionProcessor; return result; } } break; #endif /* XML_DTD */ case XML_ROLE_GROUP_OPEN: if (prologState.level >= groupSize) { if (groupSize) { char *temp = (char *)REALLOC(groupConnector, groupSize *= 2); if (temp == NULL) return XML_ERROR_NO_MEMORY; groupConnector = temp; if (dtd->scaffIndex) { int *temp = (int *)REALLOC(dtd->scaffIndex, groupSize * sizeof(int)); if (temp == NULL) return XML_ERROR_NO_MEMORY; dtd->scaffIndex = temp; } } else { groupConnector = (char *)MALLOC(groupSize = 32); if (!groupConnector) return XML_ERROR_NO_MEMORY; } } groupConnector[prologState.level] = 0; if (dtd->in_eldecl) { int myindex = nextScaffoldPart(parser); if (myindex < 0) return XML_ERROR_NO_MEMORY; dtd->scaffIndex[dtd->scaffLevel] = myindex; dtd->scaffLevel++; dtd->scaffold[myindex].type = XML_CTYPE_SEQ; if (elementDeclHandler) handleDefault = XML_FALSE; } break; case XML_ROLE_GROUP_SEQUENCE: if (groupConnector[prologState.level] == ASCII_PIPE) return XML_ERROR_SYNTAX; groupConnector[prologState.level] = ASCII_COMMA; if (dtd->in_eldecl && elementDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_GROUP_CHOICE: if (groupConnector[prologState.level] == ASCII_COMMA) return XML_ERROR_SYNTAX; if (dtd->in_eldecl && !groupConnector[prologState.level] && (dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type != XML_CTYPE_MIXED) ) { dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type = XML_CTYPE_CHOICE; if (elementDeclHandler) handleDefault = XML_FALSE; } groupConnector[prologState.level] = ASCII_PIPE; break; case XML_ROLE_PARAM_ENTITY_REF: #ifdef XML_DTD case XML_ROLE_INNER_PARAM_ENTITY_REF: dtd->hasParamEntityRefs = XML_TRUE; if (!paramEntityParsing) dtd->keepProcessing = dtd->standalone; else { const XML_Char *name; ENTITY *entity; name = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) return XML_ERROR_NO_MEMORY; entity = (ENTITY *)lookup(&dtd->paramEntities, name, 0); poolDiscard(&dtd->pool); /* first, determine if a check for an existing declaration is needed; if yes, check that the entity exists, and that it is internal, otherwise call the skipped entity handler */ if (prologState.documentEntity && (dtd->standalone ? !openInternalEntities : !dtd->hasParamEntityRefs)) { if (!entity) return XML_ERROR_UNDEFINED_ENTITY; else if (!entity->is_internal) return XML_ERROR_ENTITY_DECLARED_IN_PE; } else if (!entity) { dtd->keepProcessing = dtd->standalone; /* cannot report skipped entities in declarations */ if ((role == XML_ROLE_PARAM_ENTITY_REF) && skippedEntityHandler) { skippedEntityHandler(handlerArg, name, 1); handleDefault = XML_FALSE; } break; } if (entity->open) return XML_ERROR_RECURSIVE_ENTITY_REF; if (entity->textPtr) { enum XML_Error result; XML_Bool betweenDecl = (role == XML_ROLE_PARAM_ENTITY_REF ? XML_TRUE : XML_FALSE); result = processInternalEntity(parser, entity, betweenDecl); if (result != XML_ERROR_NONE) return result; handleDefault = XML_FALSE; break; } if (externalEntityRefHandler) { dtd->paramEntityRead = XML_FALSE; entity->open = XML_TRUE; if (!externalEntityRefHandler(externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) { entity->open = XML_FALSE; return XML_ERROR_EXTERNAL_ENTITY_HANDLING; } entity->open = XML_FALSE; handleDefault = XML_FALSE; if (!dtd->paramEntityRead) { dtd->keepProcessing = dtd->standalone; break; } } else { dtd->keepProcessing = dtd->standalone; break; } } #endif /* XML_DTD */ if (!dtd->standalone && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; break; /* Element declaration stuff */ case XML_ROLE_ELEMENT_NAME: if (elementDeclHandler) { declElementType = getElementType(parser, enc, s, next); if (!declElementType) return XML_ERROR_NO_MEMORY; dtd->scaffLevel = 0; dtd->scaffCount = 0; dtd->in_eldecl = XML_TRUE; handleDefault = XML_FALSE; } break; case XML_ROLE_CONTENT_ANY: case XML_ROLE_CONTENT_EMPTY: if (dtd->in_eldecl) { if (elementDeclHandler) { XML_Content * content = (XML_Content *) MALLOC(sizeof(XML_Content)); if (!content) return XML_ERROR_NO_MEMORY; content->quant = XML_CQUANT_NONE; content->name = NULL; content->numchildren = 0; content->children = NULL; content->type = ((role == XML_ROLE_CONTENT_ANY) ? XML_CTYPE_ANY : XML_CTYPE_EMPTY); *eventEndPP = s; elementDeclHandler(handlerArg, declElementType->name, content); handleDefault = XML_FALSE; } dtd->in_eldecl = XML_FALSE; } break; case XML_ROLE_CONTENT_PCDATA: if (dtd->in_eldecl) { dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type = XML_CTYPE_MIXED; if (elementDeclHandler) handleDefault = XML_FALSE; } break; case XML_ROLE_CONTENT_ELEMENT: quant = XML_CQUANT_NONE; goto elementContent; case XML_ROLE_CONTENT_ELEMENT_OPT: quant = XML_CQUANT_OPT; goto elementContent; case XML_ROLE_CONTENT_ELEMENT_REP: quant = XML_CQUANT_REP; goto elementContent; case XML_ROLE_CONTENT_ELEMENT_PLUS: quant = XML_CQUANT_PLUS; elementContent: if (dtd->in_eldecl) { ELEMENT_TYPE *el; const XML_Char *name; int nameLen; const char *nxt = (quant == XML_CQUANT_NONE ? next : next - enc->minBytesPerChar); int myindex = nextScaffoldPart(parser); if (myindex < 0) return XML_ERROR_NO_MEMORY; dtd->scaffold[myindex].type = XML_CTYPE_NAME; dtd->scaffold[myindex].quant = quant; el = getElementType(parser, enc, s, nxt); if (!el) return XML_ERROR_NO_MEMORY; name = el->name; dtd->scaffold[myindex].name = name; nameLen = 0; for (; name[nameLen++]; ); dtd->contentStringLen += nameLen; if (elementDeclHandler) handleDefault = XML_FALSE; } break; case XML_ROLE_GROUP_CLOSE: quant = XML_CQUANT_NONE; goto closeGroup; case XML_ROLE_GROUP_CLOSE_OPT: quant = XML_CQUANT_OPT; goto closeGroup; case XML_ROLE_GROUP_CLOSE_REP: quant = XML_CQUANT_REP; goto closeGroup; case XML_ROLE_GROUP_CLOSE_PLUS: quant = XML_CQUANT_PLUS; closeGroup: if (dtd->in_eldecl) { if (elementDeclHandler) handleDefault = XML_FALSE; dtd->scaffLevel--; dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel]].quant = quant; if (dtd->scaffLevel == 0) { if (!handleDefault) { XML_Content *model = build_model(parser); if (!model) return XML_ERROR_NO_MEMORY; *eventEndPP = s; elementDeclHandler(handlerArg, declElementType->name, model); } dtd->in_eldecl = XML_FALSE; dtd->contentStringLen = 0; } } break; /* End element declaration stuff */ case XML_ROLE_PI: if (!reportProcessingInstruction(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; handleDefault = XML_FALSE; break; case XML_ROLE_COMMENT: if (!reportComment(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; handleDefault = XML_FALSE; break; case XML_ROLE_NONE: switch (tok) { case XML_TOK_BOM: handleDefault = XML_FALSE; break; } break; case XML_ROLE_DOCTYPE_NONE: if (startDoctypeDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_ENTITY_NONE: if (dtd->keepProcessing && entityDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_NOTATION_NONE: if (notationDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_ATTLIST_NONE: if (dtd->keepProcessing && attlistDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_ELEMENT_NONE: if (elementDeclHandler) handleDefault = XML_FALSE; break; } /* end of big switch */ if (handleDefault && defaultHandler) reportDefault(parser, enc, s, next); switch (ps_parsing) { case XML_SUSPENDED: *nextPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: s = next; tok = XmlPrologTok(enc, s, end, &next); } } /* not reached */ } static enum XML_Error PTRCALL epilogProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { processor = epilogProcessor; eventPtr = s; for (;;) { const char *next = NULL; int tok = XmlPrologTok(encoding, s, end, &next); eventEndPtr = next; switch (tok) { /* report partial linebreak - it might be the last token */ case -XML_TOK_PROLOG_S: if (defaultHandler) { reportDefault(parser, encoding, s, next); if (ps_parsing == XML_FINISHED) return XML_ERROR_ABORTED; } *nextPtr = next; return XML_ERROR_NONE; case XML_TOK_NONE: *nextPtr = s; return XML_ERROR_NONE; case XML_TOK_PROLOG_S: if (defaultHandler) reportDefault(parser, encoding, s, next); break; case XML_TOK_PI: if (!reportProcessingInstruction(parser, encoding, s, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_COMMENT: if (!reportComment(parser, encoding, s, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_INVALID: eventPtr = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: if (!ps_finalBuffer) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (!ps_finalBuffer) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; default: return XML_ERROR_JUNK_AFTER_DOC_ELEMENT; } eventPtr = s = next; switch (ps_parsing) { case XML_SUSPENDED: *nextPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: ; } } } static enum XML_Error processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl) { const char *textStart, *textEnd; const char *next; enum XML_Error result; OPEN_INTERNAL_ENTITY *openEntity; if (freeInternalEntities) { openEntity = freeInternalEntities; freeInternalEntities = openEntity->next; } else { openEntity = (OPEN_INTERNAL_ENTITY *)MALLOC(sizeof(OPEN_INTERNAL_ENTITY)); if (!openEntity) return XML_ERROR_NO_MEMORY; } entity->open = XML_TRUE; entity->processed = 0; openEntity->next = openInternalEntities; openInternalEntities = openEntity; openEntity->entity = entity; openEntity->startTagLevel = tagLevel; openEntity->betweenDecl = betweenDecl; openEntity->internalEventPtr = NULL; openEntity->internalEventEndPtr = NULL; textStart = (char *)entity->textPtr; textEnd = (char *)(entity->textPtr + entity->textLen); #ifdef XML_DTD if (entity->is_param) { int tok = XmlPrologTok(internalEncoding, textStart, textEnd, &next); result = doProlog(parser, internalEncoding, textStart, textEnd, tok, next, &next, XML_FALSE); } else #endif /* XML_DTD */ result = doContent(parser, tagLevel, internalEncoding, textStart, textEnd, &next, XML_FALSE); if (result == XML_ERROR_NONE) { if (textEnd != next && ps_parsing == XML_SUSPENDED) { entity->processed = (int)(next - textStart); processor = internalEntityProcessor; } else { entity->open = XML_FALSE; openInternalEntities = openEntity->next; /* put openEntity back in list of free instances */ openEntity->next = freeInternalEntities; freeInternalEntities = openEntity; } } return result; } static enum XML_Error PTRCALL internalEntityProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { ENTITY *entity; const char *textStart, *textEnd; const char *next; enum XML_Error result; OPEN_INTERNAL_ENTITY *openEntity = openInternalEntities; if (!openEntity) return XML_ERROR_UNEXPECTED_STATE; entity = openEntity->entity; textStart = ((char *)entity->textPtr) + entity->processed; textEnd = (char *)(entity->textPtr + entity->textLen); #ifdef XML_DTD if (entity->is_param) { int tok = XmlPrologTok(internalEncoding, textStart, textEnd, &next); result = doProlog(parser, internalEncoding, textStart, textEnd, tok, next, &next, XML_FALSE); } else #endif /* XML_DTD */ result = doContent(parser, openEntity->startTagLevel, internalEncoding, textStart, textEnd, &next, XML_FALSE); if (result != XML_ERROR_NONE) return result; else if (textEnd != next && ps_parsing == XML_SUSPENDED) { entity->processed = (int)(next - (char *)entity->textPtr); return result; } else { entity->open = XML_FALSE; openInternalEntities = openEntity->next; /* put openEntity back in list of free instances */ openEntity->next = freeInternalEntities; freeInternalEntities = openEntity; } #ifdef XML_DTD if (entity->is_param) { int tok; processor = prologProcessor; tok = XmlPrologTok(encoding, s, end, &next); return doProlog(parser, encoding, s, end, tok, next, nextPtr, (XML_Bool)!ps_finalBuffer); } else #endif /* XML_DTD */ { processor = contentProcessor; /* see externalEntityContentProcessor vs contentProcessor */ return doContent(parser, parentParser ? 1 : 0, encoding, s, end, nextPtr, (XML_Bool)!ps_finalBuffer); } } static enum XML_Error PTRCALL errorProcessor(XML_Parser parser, __attribute__ ((unused)) const char *s, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const char **nextPtr) { return errorCode; } static enum XML_Error storeAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, const char *ptr, const char *end, STRING_POOL *pool) { enum XML_Error result = appendAttributeValue(parser, enc, isCdata, ptr, end, pool); if (result) return result; if (!isCdata && poolLength(pool) && poolLastChar(pool) == 0x20) poolChop(pool); if (!poolAppendChar(pool, XML_T('\0'))) return XML_ERROR_NO_MEMORY; return XML_ERROR_NONE; } static enum XML_Error appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, const char *ptr, const char *end, STRING_POOL *pool) { DTD * const dtd = _dtd; /* save one level of indirection */ for (;;) { const char *next; int tok = XmlAttributeValueTok(enc, ptr, end, &next); switch (tok) { case XML_TOK_NONE: return XML_ERROR_NONE; case XML_TOK_INVALID: if (enc == encoding) eventPtr = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: if (enc == encoding) eventPtr = ptr; return XML_ERROR_INVALID_TOKEN; case XML_TOK_CHAR_REF: { XML_Char buf[XML_ENCODE_MAX]; int i; int n = XmlCharRefNumber(enc, ptr); if (n < 0) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_BAD_CHAR_REF; } if (!isCdata && n == 0x20 /* space */ && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) break; n = XmlEncode(n, (ICHAR *)buf); if (!n) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_BAD_CHAR_REF; } for (i = 0; i < n; i++) { if (!poolAppendChar(pool, buf[i])) return XML_ERROR_NO_MEMORY; } } break; case XML_TOK_DATA_CHARS: if (!poolAppend(pool, enc, ptr, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_TRAILING_CR: next = ptr + enc->minBytesPerChar; /* fall through */ case XML_TOK_ATTRIBUTE_VALUE_S: case XML_TOK_DATA_NEWLINE: if (!isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) break; if (!poolAppendChar(pool, 0x20)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_ENTITY_REF: { const XML_Char *name; ENTITY *entity; char checkEntityDecl; XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc, ptr + enc->minBytesPerChar, next - enc->minBytesPerChar); if (ch) { if (!poolAppendChar(pool, ch)) return XML_ERROR_NO_MEMORY; break; } name = poolStoreString(&temp2Pool, enc, ptr + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) return XML_ERROR_NO_MEMORY; entity = (ENTITY *)lookup(&dtd->generalEntities, name, 0); poolDiscard(&temp2Pool); /* First, determine if a check for an existing declaration is needed; if yes, check that the entity exists, and that it is internal. */ if (pool == &dtd->pool) /* are we called from prolog? */ checkEntityDecl = #ifdef XML_DTD prologState.documentEntity && #endif /* XML_DTD */ (dtd->standalone ? !openInternalEntities : !dtd->hasParamEntityRefs); else /* if (pool == &tempPool): we are called from content */ checkEntityDecl = !dtd->hasParamEntityRefs || dtd->standalone; if (checkEntityDecl) { if (!entity) return XML_ERROR_UNDEFINED_ENTITY; else if (!entity->is_internal) return XML_ERROR_ENTITY_DECLARED_IN_PE; } else if (!entity) { /* Cannot report skipped entity here - see comments on skippedEntityHandler. if (skippedEntityHandler) skippedEntityHandler(handlerArg, name, 0); */ /* Cannot call the default handler because this would be out of sync with the call to the startElementHandler. if ((pool == &tempPool) && defaultHandler) reportDefault(parser, enc, ptr, next); */ break; } if (entity->open) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_RECURSIVE_ENTITY_REF; } if (entity->notation) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_BINARY_ENTITY_REF; } if (!entity->textPtr) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF; } else { enum XML_Error result; const XML_Char *textEnd = entity->textPtr + entity->textLen; entity->open = XML_TRUE; result = appendAttributeValue(parser, internalEncoding, isCdata, (char *)entity->textPtr, (char *)textEnd, pool); entity->open = XML_FALSE; if (result) return result; } } break; default: if (enc == encoding) eventPtr = ptr; return XML_ERROR_UNEXPECTED_STATE; } ptr = next; } /* not reached */ } static enum XML_Error storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *entityTextPtr, const char *entityTextEnd) { DTD * const dtd = _dtd; /* save one level of indirection */ STRING_POOL *pool = &(dtd->entityValuePool); enum XML_Error result = XML_ERROR_NONE; #ifdef XML_DTD int oldInEntityValue = prologState.inEntityValue; prologState.inEntityValue = 1; #endif /* XML_DTD */ /* never return Null for the value argument in EntityDeclHandler, since this would indicate an external entity; therefore we have to make sure that entityValuePool.start is not null */ if (!pool->blocks) { if (!poolGrow(pool)) return XML_ERROR_NO_MEMORY; } for (;;) { const char *next; int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); switch (tok) { case XML_TOK_PARAM_ENTITY_REF: #ifdef XML_DTD if (isParamEntity || enc != encoding) { const XML_Char *name; ENTITY *entity; name = poolStoreString(&tempPool, enc, entityTextPtr + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) { result = XML_ERROR_NO_MEMORY; goto endEntityValue; } entity = (ENTITY *)lookup(&dtd->paramEntities, name, 0); poolDiscard(&tempPool); if (!entity) { /* not a well-formedness error - see XML 1.0: WFC Entity Declared */ /* cannot report skipped entity here - see comments on skippedEntityHandler if (skippedEntityHandler) skippedEntityHandler(handlerArg, name, 0); */ dtd->keepProcessing = dtd->standalone; goto endEntityValue; } if (entity->open) { if (enc == encoding) eventPtr = entityTextPtr; result = XML_ERROR_RECURSIVE_ENTITY_REF; goto endEntityValue; } if (entity->systemId) { if (externalEntityRefHandler) { dtd->paramEntityRead = XML_FALSE; entity->open = XML_TRUE; if (!externalEntityRefHandler(externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) { entity->open = XML_FALSE; result = XML_ERROR_EXTERNAL_ENTITY_HANDLING; goto endEntityValue; } entity->open = XML_FALSE; if (!dtd->paramEntityRead) dtd->keepProcessing = dtd->standalone; } else dtd->keepProcessing = dtd->standalone; } else { entity->open = XML_TRUE; result = storeEntityValue(parser, internalEncoding, (char *)entity->textPtr, (char *)(entity->textPtr + entity->textLen)); entity->open = XML_FALSE; if (result) goto endEntityValue; } break; } #endif /* XML_DTD */ /* In the internal subset, PE references are not legal within markup declarations, e.g entity values in this case. */ eventPtr = entityTextPtr; result = XML_ERROR_PARAM_ENTITY_REF; goto endEntityValue; case XML_TOK_NONE: result = XML_ERROR_NONE; goto endEntityValue; case XML_TOK_ENTITY_REF: case XML_TOK_DATA_CHARS: if (!poolAppend(pool, enc, entityTextPtr, next)) { result = XML_ERROR_NO_MEMORY; goto endEntityValue; } break; case XML_TOK_TRAILING_CR: next = entityTextPtr + enc->minBytesPerChar; /* fall through */ case XML_TOK_DATA_NEWLINE: if (pool->end == pool->ptr && !poolGrow(pool)) { result = XML_ERROR_NO_MEMORY; goto endEntityValue; } *(pool->ptr)++ = 0xA; break; case XML_TOK_CHAR_REF: { XML_Char buf[XML_ENCODE_MAX]; int i; int n = XmlCharRefNumber(enc, entityTextPtr); if (n < 0) { if (enc == encoding) eventPtr = entityTextPtr; result = XML_ERROR_BAD_CHAR_REF; goto endEntityValue; } n = XmlEncode(n, (ICHAR *)buf); if (!n) { if (enc == encoding) eventPtr = entityTextPtr; result = XML_ERROR_BAD_CHAR_REF; goto endEntityValue; } for (i = 0; i < n; i++) { if (pool->end == pool->ptr && !poolGrow(pool)) { result = XML_ERROR_NO_MEMORY; goto endEntityValue; } *(pool->ptr)++ = buf[i]; } } break; case XML_TOK_PARTIAL: if (enc == encoding) eventPtr = entityTextPtr; result = XML_ERROR_INVALID_TOKEN; goto endEntityValue; case XML_TOK_INVALID: if (enc == encoding) eventPtr = next; result = XML_ERROR_INVALID_TOKEN; goto endEntityValue; default: if (enc == encoding) eventPtr = entityTextPtr; result = XML_ERROR_UNEXPECTED_STATE; goto endEntityValue; } entityTextPtr = next; } endEntityValue: #ifdef XML_DTD prologState.inEntityValue = oldInEntityValue; #endif /* XML_DTD */ return result; } static void FASTCALL normalizeLines(XML_Char *s) { XML_Char *p; for (;; s++) { if (*s == XML_T('\0')) return; if (*s == 0xD) break; } p = s; do { if (*s == 0xD) { *p++ = 0xA; if (*++s == 0xA) s++; } else *p++ = *s++; } while (*s); *p = XML_T('\0'); } static int reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) { const XML_Char *target; XML_Char *data; const char *tem; if (!processingInstructionHandler) { if (defaultHandler) reportDefault(parser, enc, start, end); return 1; } start += enc->minBytesPerChar * 2; tem = start + XmlNameLength(enc, start); target = poolStoreString(&tempPool, enc, start, tem); if (!target) return 0; poolFinish(&tempPool); data = poolStoreString(&tempPool, enc, XmlSkipS(enc, tem), end - enc->minBytesPerChar*2); if (!data) return 0; normalizeLines(data); processingInstructionHandler(handlerArg, target, data); poolClear(&tempPool); return 1; } static int reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) { XML_Char *data; if (!commentHandler) { if (defaultHandler) reportDefault(parser, enc, start, end); return 1; } data = poolStoreString(&tempPool, enc, start + enc->minBytesPerChar * 4, end - enc->minBytesPerChar * 3); if (!data) return 0; normalizeLines(data); commentHandler(handlerArg, data); poolClear(&tempPool); return 1; } static void reportDefault(XML_Parser parser, const ENCODING *enc, const char *s, const char *end) { if (MUST_CONVERT(enc, s)) { const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } do { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); *eventEndPP = s; defaultHandler(handlerArg, dataBuf, (int)(dataPtr - (ICHAR *)dataBuf)); *eventPP = s; } while (s != end); } else defaultHandler(handlerArg, (XML_Char *)s, (int)((XML_Char *)end - (XML_Char *)s)); } static int defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, XML_Bool isCdata, XML_Bool isId, const XML_Char *value, XML_Parser parser) { DEFAULT_ATTRIBUTE *att; if (value || isId) { /* The handling of default attributes gets messed up if we have a default which duplicates a non-default. */ int i; for (i = 0; i < type->nDefaultAtts; i++) if (attId == type->defaultAtts[i].id) return 1; if (isId && !type->idAtt && !attId->xmlns) type->idAtt = attId; } if (type->nDefaultAtts == type->allocDefaultAtts) { if (type->allocDefaultAtts == 0) { type->allocDefaultAtts = 8; type->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC(type->allocDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); if (!type->defaultAtts) return 0; } else { DEFAULT_ATTRIBUTE *temp; int count = type->allocDefaultAtts * 2; temp = (DEFAULT_ATTRIBUTE *) REALLOC(type->defaultAtts, (count * sizeof(DEFAULT_ATTRIBUTE))); if (temp == NULL) return 0; type->allocDefaultAtts = count; type->defaultAtts = temp; } } att = type->defaultAtts + type->nDefaultAtts; att->id = attId; att->value = value; att->isCdata = isCdata; if (!isCdata) attId->maybeTokenized = XML_TRUE; type->nDefaultAtts += 1; return 1; } static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType) { DTD * const dtd = _dtd; /* save one level of indirection */ const XML_Char *name; for (name = elementType->name; *name; name++) { if (*name == XML_T(ASCII_COLON)) { PREFIX *prefix; const XML_Char *s; for (s = elementType->name; s != name; s++) { if (!poolAppendChar(&dtd->pool, *s)) return 0; } if (!poolAppendChar(&dtd->pool, XML_T('\0'))) return 0; prefix = (PREFIX *)lookup(&dtd->prefixes, poolStart(&dtd->pool), sizeof(PREFIX)); if (!prefix) return 0; if (prefix->name == poolStart(&dtd->pool)) poolFinish(&dtd->pool); else poolDiscard(&dtd->pool); elementType->prefix = prefix; } } return 1; } static ATTRIBUTE_ID * getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) { DTD * const dtd = _dtd; /* save one level of indirection */ ATTRIBUTE_ID *id; const XML_Char *name; if (!poolAppendChar(&dtd->pool, XML_T('\0'))) return NULL; name = poolStoreString(&dtd->pool, enc, start, end); if (!name) return NULL; /* skip quotation mark - its storage will be re-used (like in name[-1]) */ ++name; id = (ATTRIBUTE_ID *)lookup(&dtd->attributeIds, name, sizeof(ATTRIBUTE_ID)); if (!id) return NULL; if (id->name != name) poolDiscard(&dtd->pool); else { poolFinish(&dtd->pool); if (!ns) ; else if (name[0] == XML_T(ASCII_x) && name[1] == XML_T(ASCII_m) && name[2] == XML_T(ASCII_l) && name[3] == XML_T(ASCII_n) && name[4] == XML_T(ASCII_s) && (name[5] == XML_T('\0') || name[5] == XML_T(ASCII_COLON))) { if (name[5] == XML_T('\0')) id->prefix = &dtd->defaultPrefix; else id->prefix = (PREFIX *)lookup(&dtd->prefixes, name + 6, sizeof(PREFIX)); id->xmlns = XML_TRUE; } else { int i; for (i = 0; name[i]; i++) { /* attributes without prefix are *not* in the default namespace */ if (name[i] == XML_T(ASCII_COLON)) { int j; for (j = 0; j < i; j++) { if (!poolAppendChar(&dtd->pool, name[j])) return NULL; } if (!poolAppendChar(&dtd->pool, XML_T('\0'))) return NULL; id->prefix = (PREFIX *)lookup(&dtd->prefixes, poolStart(&dtd->pool), sizeof(PREFIX)); if (id->prefix->name == poolStart(&dtd->pool)) poolFinish(&dtd->pool); else poolDiscard(&dtd->pool); break; } } } } return id; } #define CONTEXT_SEP XML_T(ASCII_FF) static const XML_Char * getContext(XML_Parser parser) { DTD * const dtd = _dtd; /* save one level of indirection */ HASH_TABLE_ITER iter; XML_Bool needSep = XML_FALSE; if (dtd->defaultPrefix.binding) { int i; int len; if (!poolAppendChar(&tempPool, XML_T(ASCII_EQUALS))) return NULL; len = dtd->defaultPrefix.binding->uriLen; if (namespaceSeparator) len--; for (i = 0; i < len; i++) if (!poolAppendChar(&tempPool, dtd->defaultPrefix.binding->uri[i])) return NULL; needSep = XML_TRUE; } hashTableIterInit(&iter, &(dtd->prefixes)); for (;;) { int i; int len; const XML_Char *s; PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter); if (!prefix) break; if (!prefix->binding) continue; if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) return NULL; for (s = prefix->name; *s; s++) if (!poolAppendChar(&tempPool, *s)) return NULL; if (!poolAppendChar(&tempPool, XML_T(ASCII_EQUALS))) return NULL; len = prefix->binding->uriLen; if (namespaceSeparator) len--; for (i = 0; i < len; i++) if (!poolAppendChar(&tempPool, prefix->binding->uri[i])) return NULL; needSep = XML_TRUE; } hashTableIterInit(&iter, &(dtd->generalEntities)); for (;;) { const XML_Char *s; ENTITY *e = (ENTITY *)hashTableIterNext(&iter); if (!e) break; if (!e->open) continue; if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) return NULL; for (s = e->name; *s; s++) if (!poolAppendChar(&tempPool, *s)) return 0; needSep = XML_TRUE; } if (!poolAppendChar(&tempPool, XML_T('\0'))) return NULL; return tempPool.start; } static XML_Bool setContext(XML_Parser parser, const XML_Char *context) { DTD * const dtd = _dtd; /* save one level of indirection */ const XML_Char *s = context; while (*context != XML_T('\0')) { if (*s == CONTEXT_SEP || *s == XML_T('\0')) { ENTITY *e; if (!poolAppendChar(&tempPool, XML_T('\0'))) return XML_FALSE; e = (ENTITY *)lookup(&dtd->generalEntities, poolStart(&tempPool), 0); if (e) e->open = XML_TRUE; if (*s != XML_T('\0')) s++; context = s; poolDiscard(&tempPool); } else if (*s == XML_T(ASCII_EQUALS)) { PREFIX *prefix; if (poolLength(&tempPool) == 0) prefix = &dtd->defaultPrefix; else { if (!poolAppendChar(&tempPool, XML_T('\0'))) return XML_FALSE; prefix = (PREFIX *)lookup(&dtd->prefixes, poolStart(&tempPool), sizeof(PREFIX)); if (!prefix) return XML_FALSE; if (prefix->name == poolStart(&tempPool)) { prefix->name = poolCopyString(&dtd->pool, prefix->name); if (!prefix->name) return XML_FALSE; } poolDiscard(&tempPool); } for (context = s + 1; *context != CONTEXT_SEP && *context != XML_T('\0'); context++) if (!poolAppendChar(&tempPool, *context)) return XML_FALSE; if (!poolAppendChar(&tempPool, XML_T('\0'))) return XML_FALSE; if (addBinding(parser, prefix, NULL, poolStart(&tempPool), &inheritedBindings) != XML_ERROR_NONE) return XML_FALSE; poolDiscard(&tempPool); if (*context != XML_T('\0')) ++context; s = context; } else { if (!poolAppendChar(&tempPool, *s)) return XML_FALSE; s++; } } return XML_TRUE; } static void FASTCALL normalizePublicId(XML_Char *publicId) { XML_Char *p = publicId; XML_Char *s; for (s = publicId; *s; s++) { switch (*s) { case 0x20: case 0xD: case 0xA: if (p != publicId && p[-1] != 0x20) *p++ = 0x20; break; default: *p++ = *s; } } if (p != publicId && p[-1] == 0x20) --p; *p = XML_T('\0'); } static DTD * dtdCreate(const XML_Memory_Handling_Suite *ms) { DTD *p = (DTD *)ms->malloc_fcn(sizeof(DTD)); if (p == NULL) return p; poolInit(&(p->pool), ms); poolInit(&(p->entityValuePool), ms); hashTableInit(&(p->generalEntities), ms); hashTableInit(&(p->elementTypes), ms); hashTableInit(&(p->attributeIds), ms); hashTableInit(&(p->prefixes), ms); #ifdef XML_DTD p->paramEntityRead = XML_FALSE; hashTableInit(&(p->paramEntities), ms); #endif /* XML_DTD */ p->defaultPrefix.name = NULL; p->defaultPrefix.binding = NULL; p->in_eldecl = XML_FALSE; p->scaffIndex = NULL; p->scaffold = NULL; p->scaffLevel = 0; p->scaffSize = 0; p->scaffCount = 0; p->contentStringLen = 0; p->keepProcessing = XML_TRUE; p->hasParamEntityRefs = XML_FALSE; p->standalone = XML_FALSE; return p; } static void dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms) { HASH_TABLE_ITER iter; hashTableIterInit(&iter, &(p->elementTypes)); for (;;) { ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); if (!e) break; if (e->allocDefaultAtts != 0) ms->free_fcn(e->defaultAtts); } hashTableClear(&(p->generalEntities)); #ifdef XML_DTD p->paramEntityRead = XML_FALSE; hashTableClear(&(p->paramEntities)); #endif /* XML_DTD */ hashTableClear(&(p->elementTypes)); hashTableClear(&(p->attributeIds)); hashTableClear(&(p->prefixes)); poolClear(&(p->pool)); poolClear(&(p->entityValuePool)); p->defaultPrefix.name = NULL; p->defaultPrefix.binding = NULL; p->in_eldecl = XML_FALSE; ms->free_fcn(p->scaffIndex); p->scaffIndex = NULL; ms->free_fcn(p->scaffold); p->scaffold = NULL; p->scaffLevel = 0; p->scaffSize = 0; p->scaffCount = 0; p->contentStringLen = 0; p->keepProcessing = XML_TRUE; p->hasParamEntityRefs = XML_FALSE; p->standalone = XML_FALSE; } static void dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms) { HASH_TABLE_ITER iter; hashTableIterInit(&iter, &(p->elementTypes)); for (;;) { ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); if (!e) break; if (e->allocDefaultAtts != 0) ms->free_fcn(e->defaultAtts); } hashTableDestroy(&(p->generalEntities)); #ifdef XML_DTD hashTableDestroy(&(p->paramEntities)); #endif /* XML_DTD */ hashTableDestroy(&(p->elementTypes)); hashTableDestroy(&(p->attributeIds)); hashTableDestroy(&(p->prefixes)); poolDestroy(&(p->pool)); poolDestroy(&(p->entityValuePool)); if (isDocEntity) { ms->free_fcn(p->scaffIndex); ms->free_fcn(p->scaffold); } ms->free_fcn(p); } /* Do a deep copy of the DTD. Return 0 for out of memory, non-zero otherwise. The new DTD has already been initialized. */ static int dtdCopy(DTD *newDtd, const DTD *oldDtd, const XML_Memory_Handling_Suite *ms) { HASH_TABLE_ITER iter; /* Copy the prefix table. */ hashTableIterInit(&iter, &(oldDtd->prefixes)); for (;;) { const XML_Char *name; const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter); if (!oldP) break; name = poolCopyString(&(newDtd->pool), oldP->name); if (!name) return 0; if (!lookup(&(newDtd->prefixes), name, sizeof(PREFIX))) return 0; } hashTableIterInit(&iter, &(oldDtd->attributeIds)); /* Copy the attribute id table. */ for (;;) { ATTRIBUTE_ID *newA; const XML_Char *name; const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter); if (!oldA) break; /* Remember to allocate the scratch byte before the name. */ if (!poolAppendChar(&(newDtd->pool), XML_T('\0'))) return 0; name = poolCopyString(&(newDtd->pool), oldA->name); if (!name) return 0; ++name; newA = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), name, sizeof(ATTRIBUTE_ID)); if (!newA) return 0; newA->maybeTokenized = oldA->maybeTokenized; if (oldA->prefix) { newA->xmlns = oldA->xmlns; if (oldA->prefix == &oldDtd->defaultPrefix) newA->prefix = &newDtd->defaultPrefix; else newA->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldA->prefix->name, 0); } } /* Copy the element type table. */ hashTableIterInit(&iter, &(oldDtd->elementTypes)); for (;;) { int i; ELEMENT_TYPE *newE; const XML_Char *name; const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter); if (!oldE) break; name = poolCopyString(&(newDtd->pool), oldE->name); if (!name) return 0; newE = (ELEMENT_TYPE *)lookup(&(newDtd->elementTypes), name, sizeof(ELEMENT_TYPE)); if (!newE) return 0; if (oldE->nDefaultAtts) { newE->defaultAtts = (DEFAULT_ATTRIBUTE *) ms->malloc_fcn(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); if (!newE->defaultAtts) { ms->free_fcn(newE); return 0; } } if (oldE->idAtt) newE->idAtt = (ATTRIBUTE_ID *) lookup(&(newDtd->attributeIds), oldE->idAtt->name, 0); newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts; if (oldE->prefix) newE->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldE->prefix->name, 0); for (i = 0; i < newE->nDefaultAtts; i++) { newE->defaultAtts[i].id = (ATTRIBUTE_ID *) lookup(&(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0); newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata; if (oldE->defaultAtts[i].value) { newE->defaultAtts[i].value = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value); if (!newE->defaultAtts[i].value) return 0; } else newE->defaultAtts[i].value = NULL; } } /* Copy the entity tables. */ if (!copyEntityTable(&(newDtd->generalEntities), &(newDtd->pool), &(oldDtd->generalEntities))) return 0; #ifdef XML_DTD if (!copyEntityTable(&(newDtd->paramEntities), &(newDtd->pool), &(oldDtd->paramEntities))) return 0; newDtd->paramEntityRead = oldDtd->paramEntityRead; #endif /* XML_DTD */ newDtd->keepProcessing = oldDtd->keepProcessing; newDtd->hasParamEntityRefs = oldDtd->hasParamEntityRefs; newDtd->standalone = oldDtd->standalone; /* Don't want deep copying for scaffolding */ newDtd->in_eldecl = oldDtd->in_eldecl; newDtd->scaffold = oldDtd->scaffold; newDtd->contentStringLen = oldDtd->contentStringLen; newDtd->scaffSize = oldDtd->scaffSize; newDtd->scaffLevel = oldDtd->scaffLevel; newDtd->scaffIndex = oldDtd->scaffIndex; return 1; } /* End dtdCopy */ static int copyEntityTable(HASH_TABLE *newTable, STRING_POOL *newPool, const HASH_TABLE *oldTable) { HASH_TABLE_ITER iter; const XML_Char *cachedOldBase = NULL; const XML_Char *cachedNewBase = NULL; hashTableIterInit(&iter, oldTable); for (;;) { ENTITY *newE; const XML_Char *name; const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter); if (!oldE) break; name = poolCopyString(newPool, oldE->name); if (!name) return 0; newE = (ENTITY *)lookup(newTable, name, sizeof(ENTITY)); if (!newE) return 0; if (oldE->systemId) { const XML_Char *tem = poolCopyString(newPool, oldE->systemId); if (!tem) return 0; newE->systemId = tem; if (oldE->base) { if (oldE->base == cachedOldBase) newE->base = cachedNewBase; else { cachedOldBase = oldE->base; tem = poolCopyString(newPool, cachedOldBase); if (!tem) return 0; cachedNewBase = newE->base = tem; } } if (oldE->publicId) { tem = poolCopyString(newPool, oldE->publicId); if (!tem) return 0; newE->publicId = tem; } } else { const XML_Char *tem = poolCopyStringN(newPool, oldE->textPtr, oldE->textLen); if (!tem) return 0; newE->textPtr = tem; newE->textLen = oldE->textLen; } if (oldE->notation) { const XML_Char *tem = poolCopyString(newPool, oldE->notation); if (!tem) return 0; newE->notation = tem; } newE->is_param = oldE->is_param; newE->is_internal = oldE->is_internal; } return 1; } #define INIT_POWER 6 static XML_Bool FASTCALL keyeq(KEY s1, KEY s2) { for (; *s1 == *s2; s1++, s2++) if (*s1 == 0) return XML_TRUE; return XML_FALSE; } static unsigned long FASTCALL hash(KEY s) { unsigned long h = 0; while (*s) h = CHAR_HASH(h, *s++); return h; } static NAMED * lookup(HASH_TABLE *table, KEY name, size_t createSize) { size_t i; if (table->size == 0) { size_t tsize; if (!createSize) return NULL; table->power = INIT_POWER; /* table->size is a power of 2 */ table->size = (size_t)1 << INIT_POWER; tsize = table->size * sizeof(NAMED *); table->v = (NAMED **)table->mem->malloc_fcn(tsize); if (!table->v) { table->size = 0; return NULL; } memset(table->v, 0, tsize); i = hash(name) & ((unsigned long)table->size - 1); } else { unsigned long h = hash(name); unsigned long mask = (unsigned long)table->size - 1; unsigned char step = 0; i = h & mask; while (table->v[i]) { if (keyeq(name, table->v[i]->name)) return table->v[i]; if (!step) step = PROBE_STEP(h, mask, table->power); i < step ? (i += table->size - step) : (i -= step); } if (!createSize) return NULL; /* check for overflow (table is half full) */ if (table->used >> (table->power - 1)) { unsigned char newPower = table->power + 1; size_t newSize = (size_t)1 << newPower; unsigned long newMask = (unsigned long)newSize - 1; size_t tsize = newSize * sizeof(NAMED *); NAMED **newV = (NAMED **)table->mem->malloc_fcn(tsize); if (!newV) return NULL; memset(newV, 0, tsize); for (i = 0; i < table->size; i++) if (table->v[i]) { unsigned long newHash = hash(table->v[i]->name); size_t j = newHash & newMask; step = 0; while (newV[j]) { if (!step) step = PROBE_STEP(newHash, newMask, newPower); j < step ? (j += newSize - step) : (j -= step); } newV[j] = table->v[i]; } table->mem->free_fcn(table->v); table->v = newV; table->power = newPower; table->size = newSize; i = h & newMask; step = 0; while (table->v[i]) { if (!step) step = PROBE_STEP(h, newMask, newPower); i < step ? (i += newSize - step) : (i -= step); } } } table->v[i] = (NAMED *)table->mem->malloc_fcn(createSize); if (!table->v[i]) return NULL; memset(table->v[i], 0, createSize); table->v[i]->name = name; (table->used)++; return table->v[i]; } static void FASTCALL hashTableClear(HASH_TABLE *table) { size_t i; for (i = 0; i < table->size; i++) { table->mem->free_fcn(table->v[i]); table->v[i] = NULL; } table->used = 0; } static void FASTCALL hashTableDestroy(HASH_TABLE *table) { size_t i; for (i = 0; i < table->size; i++) table->mem->free_fcn(table->v[i]); table->mem->free_fcn(table->v); } static void FASTCALL hashTableInit(HASH_TABLE *p, const XML_Memory_Handling_Suite *ms) { p->power = 0; p->size = 0; p->used = 0; p->v = NULL; p->mem = ms; } static void FASTCALL hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) { iter->p = table->v; iter->end = iter->p + table->size; } static NAMED * FASTCALL hashTableIterNext(HASH_TABLE_ITER *iter) { while (iter->p != iter->end) { NAMED *tem = *(iter->p)++; if (tem) return tem; } return NULL; } static void FASTCALL poolInit(STRING_POOL *pool, const XML_Memory_Handling_Suite *ms) { pool->blocks = NULL; pool->freeBlocks = NULL; pool->start = NULL; pool->ptr = NULL; pool->end = NULL; pool->mem = ms; } static void FASTCALL poolClear(STRING_POOL *pool) { if (!pool->freeBlocks) pool->freeBlocks = pool->blocks; else { BLOCK *p = pool->blocks; while (p) { BLOCK *tem = p->next; p->next = pool->freeBlocks; pool->freeBlocks = p; p = tem; } } pool->blocks = NULL; pool->start = NULL; pool->ptr = NULL; pool->end = NULL; } static void FASTCALL poolDestroy(STRING_POOL *pool) { BLOCK *p = pool->blocks; while (p) { BLOCK *tem = p->next; pool->mem->free_fcn(p); p = tem; } p = pool->freeBlocks; while (p) { BLOCK *tem = p->next; pool->mem->free_fcn(p); p = tem; } } static XML_Char * poolAppend(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end) { if (!pool->ptr && !poolGrow(pool)) return NULL; for (;;) { XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end); if (ptr == end) break; if (!poolGrow(pool)) return NULL; } return pool->start; } static const XML_Char * FASTCALL poolCopyString(STRING_POOL *pool, const XML_Char *s) { do { if (!poolAppendChar(pool, *s)) return NULL; } while (*s++); s = pool->start; poolFinish(pool); return s; } static const XML_Char * poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n) { if (!pool->ptr && !poolGrow(pool)) return NULL; for (; n > 0; --n, s++) { if (!poolAppendChar(pool, *s)) return NULL; } s = pool->start; poolFinish(pool); return s; } static const XML_Char * FASTCALL poolAppendString(STRING_POOL *pool, const XML_Char *s) { while (*s) { if (!poolAppendChar(pool, *s)) return NULL; s++; } return pool->start; } static XML_Char * poolStoreString(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end) { if (!poolAppend(pool, enc, ptr, end)) return NULL; if (pool->ptr == pool->end && !poolGrow(pool)) return NULL; *(pool->ptr)++ = 0; return pool->start; } static XML_Bool FASTCALL poolGrow(STRING_POOL *pool) { if (pool->freeBlocks) { if (pool->start == 0) { pool->blocks = pool->freeBlocks; pool->freeBlocks = pool->freeBlocks->next; pool->blocks->next = NULL; pool->start = pool->blocks->s; pool->end = pool->start + pool->blocks->size; pool->ptr = pool->start; return XML_TRUE; } if (pool->end - pool->start < pool->freeBlocks->size) { BLOCK *tem = pool->freeBlocks->next; pool->freeBlocks->next = pool->blocks; pool->blocks = pool->freeBlocks; pool->freeBlocks = tem; memcpy(pool->blocks->s, pool->start, (pool->end - pool->start) * sizeof(XML_Char)); pool->ptr = pool->blocks->s + (pool->ptr - pool->start); pool->start = pool->blocks->s; pool->end = pool->start + pool->blocks->size; return XML_TRUE; } } if (pool->blocks && pool->start == pool->blocks->s) { int blockSize = (int)(pool->end - pool->start)*2; pool->blocks = (BLOCK *) pool->mem->realloc_fcn(pool->blocks, (offsetof(BLOCK, s) + blockSize * sizeof(XML_Char))); if (pool->blocks == NULL) return XML_FALSE; pool->blocks->size = blockSize; pool->ptr = pool->blocks->s + (pool->ptr - pool->start); pool->start = pool->blocks->s; pool->end = pool->start + blockSize; } else { BLOCK *tem; int blockSize = (int)(pool->end - pool->start); if (blockSize < INIT_BLOCK_SIZE) blockSize = INIT_BLOCK_SIZE; else blockSize *= 2; tem = (BLOCK *)pool->mem->malloc_fcn(offsetof(BLOCK, s) + blockSize * sizeof(XML_Char)); if (!tem) return XML_FALSE; tem->size = blockSize; tem->next = pool->blocks; pool->blocks = tem; if (pool->ptr != pool->start) memcpy(tem->s, pool->start, (pool->ptr - pool->start) * sizeof(XML_Char)); pool->ptr = tem->s + (pool->ptr - pool->start); pool->start = tem->s; pool->end = tem->s + blockSize; } return XML_TRUE; } static int FASTCALL nextScaffoldPart(XML_Parser parser) { DTD * const dtd = _dtd; /* save one level of indirection */ CONTENT_SCAFFOLD * me; int next; if (!dtd->scaffIndex) { dtd->scaffIndex = (int *)MALLOC(groupSize * sizeof(int)); if (!dtd->scaffIndex) return -1; dtd->scaffIndex[0] = 0; } if (dtd->scaffCount >= dtd->scaffSize) { CONTENT_SCAFFOLD *temp; if (dtd->scaffold) { temp = (CONTENT_SCAFFOLD *) REALLOC(dtd->scaffold, dtd->scaffSize * 2 * sizeof(CONTENT_SCAFFOLD)); if (temp == NULL) return -1; dtd->scaffSize *= 2; } else { temp = (CONTENT_SCAFFOLD *)MALLOC(INIT_SCAFFOLD_ELEMENTS * sizeof(CONTENT_SCAFFOLD)); if (temp == NULL) return -1; dtd->scaffSize = INIT_SCAFFOLD_ELEMENTS; } dtd->scaffold = temp; } next = dtd->scaffCount++; me = &dtd->scaffold[next]; if (dtd->scaffLevel) { CONTENT_SCAFFOLD *parent = &dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel-1]]; if (parent->lastchild) { dtd->scaffold[parent->lastchild].nextsib = next; } if (!parent->childcnt) parent->firstchild = next; parent->lastchild = next; parent->childcnt++; } me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0; return next; } static void build_node(XML_Parser parser, int src_node, XML_Content *dest, XML_Content **contpos, XML_Char **strpos) { DTD * const dtd = _dtd; /* save one level of indirection */ dest->type = dtd->scaffold[src_node].type; dest->quant = dtd->scaffold[src_node].quant; if (dest->type == XML_CTYPE_NAME) { const XML_Char *src; dest->name = *strpos; src = dtd->scaffold[src_node].name; for (;;) { *(*strpos)++ = *src; if (!*src) break; src++; } dest->numchildren = 0; dest->children = NULL; } else { unsigned int i; int cn; dest->numchildren = dtd->scaffold[src_node].childcnt; dest->children = *contpos; *contpos += dest->numchildren; for (i = 0, cn = dtd->scaffold[src_node].firstchild; i < dest->numchildren; i++, cn = dtd->scaffold[cn].nextsib) { build_node(parser, cn, &(dest->children[i]), contpos, strpos); } dest->name = NULL; } } static XML_Content * build_model (XML_Parser parser) { DTD * const dtd = _dtd; /* save one level of indirection */ XML_Content *ret; XML_Content *cpos; XML_Char * str; int allocsize = (dtd->scaffCount * sizeof(XML_Content) + (dtd->contentStringLen * sizeof(XML_Char))); ret = (XML_Content *)MALLOC(allocsize); if (!ret) return NULL; str = (XML_Char *) (&ret[dtd->scaffCount]); cpos = &ret[1]; build_node(parser, 0, ret, &cpos, &str); return ret; } static ELEMENT_TYPE * getElementType(XML_Parser parser, const ENCODING *enc, const char *ptr, const char *end) { DTD * const dtd = _dtd; /* save one level of indirection */ const XML_Char *name = poolStoreString(&dtd->pool, enc, ptr, end); ELEMENT_TYPE *ret; if (!name) return NULL; ret = (ELEMENT_TYPE *) lookup(&dtd->elementTypes, name, sizeof(ELEMENT_TYPE)); if (!ret) return NULL; if (ret->name != name) poolDiscard(&dtd->pool); else { poolFinish(&dtd->pool); if (!setElementTypePrefix(parser, ret)) return NULL; } return ret; } genometools-1.5.1/src/external/expat-2.0.1/lib/xmlrole.c000077500000000000000000001045501211610345200226360ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #ifdef COMPILED_FROM_DSP #include "winconfig.h" #elif defined(MACOS_CLASSIC) #include "macconfig.h" #elif defined(__amigaos4__) #include "amigaconfig.h" #elif defined(__WATCOMC__) #include "watcomconfig.h" #else #ifdef HAVE_EXPAT_CONFIG_H #include #endif #endif /* ndef COMPILED_FROM_DSP */ #include "expat_external.h" #include "internal.h" #include "xmlrole.h" #include "ascii.h" /* Doesn't check: that ,| are not mixed in a model group content of literals */ static const char KW_ANY[] = { ASCII_A, ASCII_N, ASCII_Y, '\0' }; static const char KW_ATTLIST[] = { ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' }; static const char KW_CDATA[] = { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; static const char KW_DOCTYPE[] = { ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' }; static const char KW_ELEMENT[] = { ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' }; static const char KW_EMPTY[] = { ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' }; static const char KW_ENTITIES[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, '\0' }; static const char KW_ENTITY[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' }; static const char KW_FIXED[] = { ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' }; static const char KW_ID[] = { ASCII_I, ASCII_D, '\0' }; static const char KW_IDREF[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' }; static const char KW_IDREFS[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' }; #ifdef XML_DTD static const char KW_IGNORE[] = { ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' }; #endif static const char KW_IMPLIED[] = { ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' }; #ifdef XML_DTD static const char KW_INCLUDE[] = { ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' }; #endif static const char KW_NDATA[] = { ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; static const char KW_NMTOKEN[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' }; static const char KW_NMTOKENS[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, '\0' }; static const char KW_NOTATION[] = { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, '\0' }; static const char KW_PCDATA[] = { ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; static const char KW_PUBLIC[] = { ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' }; static const char KW_REQUIRED[] = { ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D, '\0' }; static const char KW_SYSTEM[] = { ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' }; #ifndef MIN_BYTES_PER_CHAR #define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar) #endif #ifdef XML_DTD #define setTopLevel(state) \ ((state)->handler = ((state)->documentEntity \ ? internalSubset \ : externalSubset1)) #else /* not XML_DTD */ #define setTopLevel(state) ((state)->handler = internalSubset) #endif /* not XML_DTD */ typedef int PTRCALL PROLOG_HANDLER(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc); static PROLOG_HANDLER prolog0, prolog1, prolog2, doctype0, doctype1, doctype2, doctype3, doctype4, doctype5, internalSubset, entity0, entity1, entity2, entity3, entity4, entity5, entity6, entity7, entity8, entity9, entity10, notation0, notation1, notation2, notation3, notation4, attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6, attlist7, attlist8, attlist9, element0, element1, element2, element3, element4, element5, element6, element7, #ifdef XML_DTD externalSubset0, externalSubset1, condSect0, condSect1, condSect2, #endif /* XML_DTD */ declClose, error; static int FASTCALL common(PROLOG_STATE *state, int tok); static int PTRCALL prolog0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: state->handler = prolog1; return XML_ROLE_NONE; case XML_TOK_XML_DECL: state->handler = prolog1; return XML_ROLE_XML_DECL; case XML_TOK_PI: state->handler = prolog1; return XML_ROLE_PI; case XML_TOK_COMMENT: state->handler = prolog1; return XML_ROLE_COMMENT; case XML_TOK_BOM: return XML_ROLE_NONE; case XML_TOK_DECL_OPEN: if (!XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_DOCTYPE)) break; state->handler = doctype0; return XML_ROLE_DOCTYPE_NONE; case XML_TOK_INSTANCE_START: state->handler = error; return XML_ROLE_INSTANCE_START; } return common(state, tok); } static int PTRCALL prolog1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_PI: return XML_ROLE_PI; case XML_TOK_COMMENT: return XML_ROLE_COMMENT; case XML_TOK_BOM: return XML_ROLE_NONE; case XML_TOK_DECL_OPEN: if (!XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_DOCTYPE)) break; state->handler = doctype0; return XML_ROLE_DOCTYPE_NONE; case XML_TOK_INSTANCE_START: state->handler = error; return XML_ROLE_INSTANCE_START; } return common(state, tok); } static int PTRCALL prolog2(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_PI: return XML_ROLE_PI; case XML_TOK_COMMENT: return XML_ROLE_COMMENT; case XML_TOK_INSTANCE_START: state->handler = error; return XML_ROLE_INSTANCE_START; } return common(state, tok); } static int PTRCALL doctype0(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = doctype1; return XML_ROLE_DOCTYPE_NAME; } return common(state, tok); } static int PTRCALL doctype1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = internalSubset; return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; case XML_TOK_DECL_CLOSE: state->handler = prolog2; return XML_ROLE_DOCTYPE_CLOSE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = doctype3; return XML_ROLE_DOCTYPE_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = doctype2; return XML_ROLE_DOCTYPE_NONE; } break; } return common(state, tok); } static int PTRCALL doctype2(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_LITERAL: state->handler = doctype3; return XML_ROLE_DOCTYPE_PUBLIC_ID; } return common(state, tok); } static int PTRCALL doctype3(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_LITERAL: state->handler = doctype4; return XML_ROLE_DOCTYPE_SYSTEM_ID; } return common(state, tok); } static int PTRCALL doctype4(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = internalSubset; return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; case XML_TOK_DECL_CLOSE: state->handler = prolog2; return XML_ROLE_DOCTYPE_CLOSE; } return common(state, tok); } static int PTRCALL doctype5(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_DECL_CLOSE: state->handler = prolog2; return XML_ROLE_DOCTYPE_CLOSE; } return common(state, tok); } static int PTRCALL internalSubset(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_DECL_OPEN: if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_ENTITY)) { state->handler = entity0; return XML_ROLE_ENTITY_NONE; } if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_ATTLIST)) { state->handler = attlist0; return XML_ROLE_ATTLIST_NONE; } if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_ELEMENT)) { state->handler = element0; return XML_ROLE_ELEMENT_NONE; } if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_NOTATION)) { state->handler = notation0; return XML_ROLE_NOTATION_NONE; } break; case XML_TOK_PI: return XML_ROLE_PI; case XML_TOK_COMMENT: return XML_ROLE_COMMENT; case XML_TOK_PARAM_ENTITY_REF: return XML_ROLE_PARAM_ENTITY_REF; case XML_TOK_CLOSE_BRACKET: state->handler = doctype5; return XML_ROLE_DOCTYPE_NONE; case XML_TOK_NONE: return XML_ROLE_NONE; } return common(state, tok); } #ifdef XML_DTD static int PTRCALL externalSubset0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { state->handler = externalSubset1; if (tok == XML_TOK_XML_DECL) return XML_ROLE_TEXT_DECL; return externalSubset1(state, tok, ptr, end, enc); } static int PTRCALL externalSubset1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_COND_SECT_OPEN: state->handler = condSect0; return XML_ROLE_NONE; case XML_TOK_COND_SECT_CLOSE: if (state->includeLevel == 0) break; state->includeLevel -= 1; return XML_ROLE_NONE; case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_CLOSE_BRACKET: break; case XML_TOK_NONE: if (state->includeLevel) break; return XML_ROLE_NONE; default: return internalSubset(state, tok, ptr, end, enc); } return common(state, tok); } #endif /* XML_DTD */ static int PTRCALL entity0(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_PERCENT: state->handler = entity1; return XML_ROLE_ENTITY_NONE; case XML_TOK_NAME: state->handler = entity2; return XML_ROLE_GENERAL_ENTITY_NAME; } return common(state, tok); } static int PTRCALL entity1(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_NAME: state->handler = entity7; return XML_ROLE_PARAM_ENTITY_NAME; } return common(state, tok); } static int PTRCALL entity2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = entity4; return XML_ROLE_ENTITY_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = entity3; return XML_ROLE_ENTITY_NONE; } break; case XML_TOK_LITERAL: state->handler = declClose; state->role_none = XML_ROLE_ENTITY_NONE; return XML_ROLE_ENTITY_VALUE; } return common(state, tok); } static int PTRCALL entity3(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_LITERAL: state->handler = entity4; return XML_ROLE_ENTITY_PUBLIC_ID; } return common(state, tok); } static int PTRCALL entity4(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_LITERAL: state->handler = entity5; return XML_ROLE_ENTITY_SYSTEM_ID; } return common(state, tok); } static int PTRCALL entity5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_ENTITY_COMPLETE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) { state->handler = entity6; return XML_ROLE_ENTITY_NONE; } break; } return common(state, tok); } static int PTRCALL entity6(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_NAME: state->handler = declClose; state->role_none = XML_ROLE_ENTITY_NONE; return XML_ROLE_ENTITY_NOTATION_NAME; } return common(state, tok); } static int PTRCALL entity7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = entity9; return XML_ROLE_ENTITY_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = entity8; return XML_ROLE_ENTITY_NONE; } break; case XML_TOK_LITERAL: state->handler = declClose; state->role_none = XML_ROLE_ENTITY_NONE; return XML_ROLE_ENTITY_VALUE; } return common(state, tok); } static int PTRCALL entity8(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_LITERAL: state->handler = entity9; return XML_ROLE_ENTITY_PUBLIC_ID; } return common(state, tok); } static int PTRCALL entity9(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_LITERAL: state->handler = entity10; return XML_ROLE_ENTITY_SYSTEM_ID; } return common(state, tok); } static int PTRCALL entity10(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_ENTITY_COMPLETE; } return common(state, tok); } static int PTRCALL notation0(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NOTATION_NONE; case XML_TOK_NAME: state->handler = notation1; return XML_ROLE_NOTATION_NAME; } return common(state, tok); } static int PTRCALL notation1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NOTATION_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = notation3; return XML_ROLE_NOTATION_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = notation2; return XML_ROLE_NOTATION_NONE; } break; } return common(state, tok); } static int PTRCALL notation2(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NOTATION_NONE; case XML_TOK_LITERAL: state->handler = notation4; return XML_ROLE_NOTATION_PUBLIC_ID; } return common(state, tok); } static int PTRCALL notation3(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NOTATION_NONE; case XML_TOK_LITERAL: state->handler = declClose; state->role_none = XML_ROLE_NOTATION_NONE; return XML_ROLE_NOTATION_SYSTEM_ID; } return common(state, tok); } static int PTRCALL notation4(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NOTATION_NONE; case XML_TOK_LITERAL: state->handler = declClose; state->role_none = XML_ROLE_NOTATION_NONE; return XML_ROLE_NOTATION_SYSTEM_ID; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_NOTATION_NO_SYSTEM_ID; } return common(state, tok); } static int PTRCALL attlist0(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = attlist1; return XML_ROLE_ATTLIST_ELEMENT_NAME; } return common(state, tok); } static int PTRCALL attlist1(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_ATTLIST_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = attlist2; return XML_ROLE_ATTRIBUTE_NAME; } return common(state, tok); } static int PTRCALL attlist2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_NAME: { static const char * const types[] = { KW_CDATA, KW_ID, KW_IDREF, KW_IDREFS, KW_ENTITY, KW_ENTITIES, KW_NMTOKEN, KW_NMTOKENS, }; int i; for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++) if (XmlNameMatchesAscii(enc, ptr, end, types[i])) { state->handler = attlist8; return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i; } } if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) { state->handler = attlist5; return XML_ROLE_ATTLIST_NONE; } break; case XML_TOK_OPEN_PAREN: state->handler = attlist3; return XML_ROLE_ATTLIST_NONE; } return common(state, tok); } static int PTRCALL attlist3(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_NMTOKEN: case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = attlist4; return XML_ROLE_ATTRIBUTE_ENUM_VALUE; } return common(state, tok); } static int PTRCALL attlist4(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_CLOSE_PAREN: state->handler = attlist8; return XML_ROLE_ATTLIST_NONE; case XML_TOK_OR: state->handler = attlist3; return XML_ROLE_ATTLIST_NONE; } return common(state, tok); } static int PTRCALL attlist5(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_OPEN_PAREN: state->handler = attlist6; return XML_ROLE_ATTLIST_NONE; } return common(state, tok); } static int PTRCALL attlist6(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_NAME: state->handler = attlist7; return XML_ROLE_ATTRIBUTE_NOTATION_VALUE; } return common(state, tok); } static int PTRCALL attlist7(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_CLOSE_PAREN: state->handler = attlist8; return XML_ROLE_ATTLIST_NONE; case XML_TOK_OR: state->handler = attlist6; return XML_ROLE_ATTLIST_NONE; } return common(state, tok); } /* default value */ static int PTRCALL attlist8(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_POUND_NAME: if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_IMPLIED)) { state->handler = attlist1; return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE; } if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_REQUIRED)) { state->handler = attlist1; return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE; } if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_FIXED)) { state->handler = attlist9; return XML_ROLE_ATTLIST_NONE; } break; case XML_TOK_LITERAL: state->handler = attlist1; return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE; } return common(state, tok); } static int PTRCALL attlist9(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_LITERAL: state->handler = attlist1; return XML_ROLE_FIXED_ATTRIBUTE_VALUE; } return common(state, tok); } static int PTRCALL element0(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element1; return XML_ROLE_ELEMENT_NAME; } return common(state, tok); } static int PTRCALL element1(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; return XML_ROLE_CONTENT_EMPTY; } if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; return XML_ROLE_CONTENT_ANY; } break; case XML_TOK_OPEN_PAREN: state->handler = element2; state->level = 1; return XML_ROLE_GROUP_OPEN; } return common(state, tok); } static int PTRCALL element2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_POUND_NAME: if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_PCDATA)) { state->handler = element3; return XML_ROLE_CONTENT_PCDATA; } break; case XML_TOK_OPEN_PAREN: state->level = 2; state->handler = element6; return XML_ROLE_GROUP_OPEN; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT; case XML_TOK_NAME_QUESTION: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_OPT; case XML_TOK_NAME_ASTERISK: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_REP; case XML_TOK_NAME_PLUS: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_PLUS; } return common(state, tok); } static int PTRCALL element3(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_CLOSE_PAREN: state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; return XML_ROLE_GROUP_CLOSE; case XML_TOK_CLOSE_PAREN_ASTERISK: state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; return XML_ROLE_GROUP_CLOSE_REP; case XML_TOK_OR: state->handler = element4; return XML_ROLE_ELEMENT_NONE; } return common(state, tok); } static int PTRCALL element4(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element5; return XML_ROLE_CONTENT_ELEMENT; } return common(state, tok); } static int PTRCALL element5(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_CLOSE_PAREN_ASTERISK: state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; return XML_ROLE_GROUP_CLOSE_REP; case XML_TOK_OR: state->handler = element4; return XML_ROLE_ELEMENT_NONE; } return common(state, tok); } static int PTRCALL element6(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_OPEN_PAREN: state->level += 1; return XML_ROLE_GROUP_OPEN; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT; case XML_TOK_NAME_QUESTION: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_OPT; case XML_TOK_NAME_ASTERISK: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_REP; case XML_TOK_NAME_PLUS: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_PLUS; } return common(state, tok); } static int PTRCALL element7(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_CLOSE_PAREN: state->level -= 1; if (state->level == 0) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; } return XML_ROLE_GROUP_CLOSE; case XML_TOK_CLOSE_PAREN_ASTERISK: state->level -= 1; if (state->level == 0) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; } return XML_ROLE_GROUP_CLOSE_REP; case XML_TOK_CLOSE_PAREN_QUESTION: state->level -= 1; if (state->level == 0) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; } return XML_ROLE_GROUP_CLOSE_OPT; case XML_TOK_CLOSE_PAREN_PLUS: state->level -= 1; if (state->level == 0) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; } return XML_ROLE_GROUP_CLOSE_PLUS; case XML_TOK_COMMA: state->handler = element6; return XML_ROLE_GROUP_SEQUENCE; case XML_TOK_OR: state->handler = element6; return XML_ROLE_GROUP_CHOICE; } return common(state, tok); } #ifdef XML_DTD static int PTRCALL condSect0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) { state->handler = condSect1; return XML_ROLE_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) { state->handler = condSect2; return XML_ROLE_NONE; } break; } return common(state, tok); } static int PTRCALL condSect1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = externalSubset1; state->includeLevel += 1; return XML_ROLE_NONE; } return common(state, tok); } static int PTRCALL condSect2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = externalSubset1; return XML_ROLE_IGNORE_SECT; } return common(state, tok); } #endif /* XML_DTD */ static int PTRCALL declClose(PROLOG_STATE *state, int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return state->role_none; case XML_TOK_DECL_CLOSE: setTopLevel(state); return state->role_none; } return common(state, tok); } static int PTRCALL error(__attribute__ ((unused)) PROLOG_STATE *state, __attribute__ ((unused)) int tok, __attribute__ ((unused)) const char *ptr, __attribute__ ((unused)) const char *end, __attribute__ ((unused)) const ENCODING *enc) { return XML_ROLE_NONE; } static int FASTCALL common(PROLOG_STATE *state, __attribute__ ((unused)) int tok) { #ifdef XML_DTD if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF) return XML_ROLE_INNER_PARAM_ENTITY_REF; #endif state->handler = error; return XML_ROLE_ERROR; } void XmlPrologStateInit(PROLOG_STATE *state) { state->handler = prolog0; #ifdef XML_DTD state->documentEntity = 1; state->includeLevel = 0; state->inEntityValue = 0; #endif /* XML_DTD */ } #ifdef XML_DTD void XmlPrologStateInitExternalEntity(PROLOG_STATE *state) { state->handler = externalSubset0; state->documentEntity = 0; state->includeLevel = 0; } #endif /* XML_DTD */ genometools-1.5.1/src/external/expat-2.0.1/lib/xmlrole.h000077500000000000000000000057171211610345200226500ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #ifndef XmlRole_INCLUDED #define XmlRole_INCLUDED 1 #ifdef __VMS /* 0 1 2 3 0 1 2 3 1234567890123456789012345678901 1234567890123456789012345678901 */ #define XmlPrologStateInitExternalEntity XmlPrologStateInitExternalEnt #endif #include "xmltok.h" #ifdef __cplusplus extern "C" { #endif enum { XML_ROLE_ERROR = -1, XML_ROLE_NONE = 0, XML_ROLE_XML_DECL, XML_ROLE_INSTANCE_START, XML_ROLE_DOCTYPE_NONE, XML_ROLE_DOCTYPE_NAME, XML_ROLE_DOCTYPE_SYSTEM_ID, XML_ROLE_DOCTYPE_PUBLIC_ID, XML_ROLE_DOCTYPE_INTERNAL_SUBSET, XML_ROLE_DOCTYPE_CLOSE, XML_ROLE_GENERAL_ENTITY_NAME, XML_ROLE_PARAM_ENTITY_NAME, XML_ROLE_ENTITY_NONE, XML_ROLE_ENTITY_VALUE, XML_ROLE_ENTITY_SYSTEM_ID, XML_ROLE_ENTITY_PUBLIC_ID, XML_ROLE_ENTITY_COMPLETE, XML_ROLE_ENTITY_NOTATION_NAME, XML_ROLE_NOTATION_NONE, XML_ROLE_NOTATION_NAME, XML_ROLE_NOTATION_SYSTEM_ID, XML_ROLE_NOTATION_NO_SYSTEM_ID, XML_ROLE_NOTATION_PUBLIC_ID, XML_ROLE_ATTRIBUTE_NAME, XML_ROLE_ATTRIBUTE_TYPE_CDATA, XML_ROLE_ATTRIBUTE_TYPE_ID, XML_ROLE_ATTRIBUTE_TYPE_IDREF, XML_ROLE_ATTRIBUTE_TYPE_IDREFS, XML_ROLE_ATTRIBUTE_TYPE_ENTITY, XML_ROLE_ATTRIBUTE_TYPE_ENTITIES, XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN, XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS, XML_ROLE_ATTRIBUTE_ENUM_VALUE, XML_ROLE_ATTRIBUTE_NOTATION_VALUE, XML_ROLE_ATTLIST_NONE, XML_ROLE_ATTLIST_ELEMENT_NAME, XML_ROLE_IMPLIED_ATTRIBUTE_VALUE, XML_ROLE_REQUIRED_ATTRIBUTE_VALUE, XML_ROLE_DEFAULT_ATTRIBUTE_VALUE, XML_ROLE_FIXED_ATTRIBUTE_VALUE, XML_ROLE_ELEMENT_NONE, XML_ROLE_ELEMENT_NAME, XML_ROLE_CONTENT_ANY, XML_ROLE_CONTENT_EMPTY, XML_ROLE_CONTENT_PCDATA, XML_ROLE_GROUP_OPEN, XML_ROLE_GROUP_CLOSE, XML_ROLE_GROUP_CLOSE_REP, XML_ROLE_GROUP_CLOSE_OPT, XML_ROLE_GROUP_CLOSE_PLUS, XML_ROLE_GROUP_CHOICE, XML_ROLE_GROUP_SEQUENCE, XML_ROLE_CONTENT_ELEMENT, XML_ROLE_CONTENT_ELEMENT_REP, XML_ROLE_CONTENT_ELEMENT_OPT, XML_ROLE_CONTENT_ELEMENT_PLUS, XML_ROLE_PI, XML_ROLE_COMMENT, #ifdef XML_DTD XML_ROLE_TEXT_DECL, XML_ROLE_IGNORE_SECT, XML_ROLE_INNER_PARAM_ENTITY_REF, #endif /* XML_DTD */ XML_ROLE_PARAM_ENTITY_REF }; typedef struct prolog_state { int (PTRCALL *handler) (struct prolog_state *state, int tok, const char *ptr, const char *end, const ENCODING *enc); unsigned level; int role_none; #ifdef XML_DTD unsigned includeLevel; int documentEntity; int inEntityValue; #endif /* XML_DTD */ } PROLOG_STATE; void XmlPrologStateInit(PROLOG_STATE *); #ifdef XML_DTD void XmlPrologStateInitExternalEntity(PROLOG_STATE *); #endif /* XML_DTD */ #define XmlTokenRole(state, tok, ptr, end, enc) \ (((state)->handler)(state, tok, ptr, end, enc)) #ifdef __cplusplus } #endif #endif /* not XmlRole_INCLUDED */ genometools-1.5.1/src/external/expat-2.0.1/lib/xmltok.c000077500000000000000000001215301211610345200224670ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #ifdef COMPILED_FROM_DSP #include "winconfig.h" #elif defined(MACOS_CLASSIC) #include "macconfig.h" #elif defined(__amigaos4__) #include "amigaconfig.h" #elif defined(__WATCOMC__) #include "watcomconfig.h" #else #ifdef HAVE_EXPAT_CONFIG_H #include #endif #endif /* ndef COMPILED_FROM_DSP */ #include "expat_external.h" #include "internal.h" #include "xmltok.h" #include "nametab.h" #ifdef XML_DTD #define IGNORE_SECTION_TOK_VTABLE , PREFIX(ignoreSectionTok) #else #define IGNORE_SECTION_TOK_VTABLE /* as nothing */ #endif #define VTABLE1 \ { PREFIX(prologTok), PREFIX(contentTok), \ PREFIX(cdataSectionTok) IGNORE_SECTION_TOK_VTABLE }, \ { PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \ PREFIX(sameName), \ PREFIX(nameMatchesAscii), \ PREFIX(nameLength), \ PREFIX(skipS), \ PREFIX(getAtts), \ PREFIX(charRefNumber), \ PREFIX(predefinedEntityName), \ PREFIX(updatePosition), \ PREFIX(isPublicId) #define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16) #define UCS2_GET_NAMING(pages, hi, lo) \ (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F))) /* A 2 byte UTF-8 representation splits the characters 11 bits between the bottom 5 and 6 bits of the bytes. We need 8 bits to index into pages, 3 bits to add to that index and 5 bits to generate the mask. */ #define UTF8_GET_NAMING2(pages, byte) \ (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \ + ((((byte)[0]) & 3) << 1) \ + ((((byte)[1]) >> 5) & 1)] \ & (1 << (((byte)[1]) & 0x1F))) /* A 3 byte UTF-8 representation splits the characters 16 bits between the bottom 4, 6 and 6 bits of the bytes. We need 8 bits to index into pages, 3 bits to add to that index and 5 bits to generate the mask. */ #define UTF8_GET_NAMING3(pages, byte) \ (namingBitmap[((pages)[((((byte)[0]) & 0xF) << 4) \ + ((((byte)[1]) >> 2) & 0xF)] \ << 3) \ + ((((byte)[1]) & 3) << 1) \ + ((((byte)[2]) >> 5) & 1)] \ & (1 << (((byte)[2]) & 0x1F))) #define UTF8_GET_NAMING(pages, p, n) \ ((n) == 2 \ ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \ : ((n) == 3 \ ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \ : 0)) /* Detection of invalid UTF-8 sequences is based on Table 3.1B of Unicode 3.2: http://www.unicode.org/unicode/reports/tr28/ with the additional restriction of not allowing the Unicode code points 0xFFFF and 0xFFFE (sequences EF,BF,BF and EF,BF,BE). Implementation details: (A & 0x80) == 0 means A < 0x80 and (A & 0xC0) == 0xC0 means A > 0xBF */ #define UTF8_INVALID2(p) \ ((*p) < 0xC2 || ((p)[1] & 0x80) == 0 || ((p)[1] & 0xC0) == 0xC0) #define UTF8_INVALID3(p) \ (((p)[2] & 0x80) == 0 \ || \ ((*p) == 0xEF && (p)[1] == 0xBF \ ? \ (p)[2] > 0xBD \ : \ ((p)[2] & 0xC0) == 0xC0) \ || \ ((*p) == 0xE0 \ ? \ (p)[1] < 0xA0 || ((p)[1] & 0xC0) == 0xC0 \ : \ ((p)[1] & 0x80) == 0 \ || \ ((*p) == 0xED ? (p)[1] > 0x9F : ((p)[1] & 0xC0) == 0xC0))) #define UTF8_INVALID4(p) \ (((p)[3] & 0x80) == 0 || ((p)[3] & 0xC0) == 0xC0 \ || \ ((p)[2] & 0x80) == 0 || ((p)[2] & 0xC0) == 0xC0 \ || \ ((*p) == 0xF0 \ ? \ (p)[1] < 0x90 || ((p)[1] & 0xC0) == 0xC0 \ : \ ((p)[1] & 0x80) == 0 \ || \ ((*p) == 0xF4 ? (p)[1] > 0x8F : ((p)[1] & 0xC0) == 0xC0))) static int PTRFASTCALL isNever(__attribute__ ((unused)) const ENCODING *enc, __attribute__ ((unused)) const char *p) { return 0; } static int PTRFASTCALL utf8_isName2(__attribute__ ((unused)) const ENCODING *enc, const char *p) { return UTF8_GET_NAMING2(namePages, (const unsigned char *)p); } static int PTRFASTCALL utf8_isName3(__attribute__ ((unused)) const ENCODING *enc, const char *p) { return UTF8_GET_NAMING3(namePages, (const unsigned char *)p); } #define utf8_isName4 isNever static int PTRFASTCALL utf8_isNmstrt2(__attribute__ ((unused)) const ENCODING *enc, const char *p) { return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p); } static int PTRFASTCALL utf8_isNmstrt3(__attribute__ ((unused)) const ENCODING *enc, const char *p) { return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p); } #define utf8_isNmstrt4 isNever static int PTRFASTCALL utf8_isInvalid2(__attribute__ ((unused)) const ENCODING *enc, const char *p) { return UTF8_INVALID2((const unsigned char *)p); } static int PTRFASTCALL utf8_isInvalid3(__attribute__ ((unused)) const ENCODING *enc, const char *p) { return UTF8_INVALID3((const unsigned char *)p); } static int PTRFASTCALL utf8_isInvalid4(__attribute__ ((unused)) const ENCODING *enc, const char *p) { return UTF8_INVALID4((const unsigned char *)p); } struct normal_encoding { ENCODING enc; unsigned char type[256]; #ifdef XML_MIN_SIZE int (PTRFASTCALL *byteType)(const ENCODING *, const char *); int (PTRFASTCALL *isNameMin)(const ENCODING *, const char *); int (PTRFASTCALL *isNmstrtMin)(const ENCODING *, const char *); int (PTRFASTCALL *byteToAscii)(const ENCODING *, const char *); int (PTRCALL *charMatches)(const ENCODING *, const char *, int); #endif /* XML_MIN_SIZE */ int (PTRFASTCALL *isName2)(const ENCODING *, const char *); int (PTRFASTCALL *isName3)(const ENCODING *, const char *); int (PTRFASTCALL *isName4)(const ENCODING *, const char *); int (PTRFASTCALL *isNmstrt2)(const ENCODING *, const char *); int (PTRFASTCALL *isNmstrt3)(const ENCODING *, const char *); int (PTRFASTCALL *isNmstrt4)(const ENCODING *, const char *); int (PTRFASTCALL *isInvalid2)(const ENCODING *, const char *); int (PTRFASTCALL *isInvalid3)(const ENCODING *, const char *); int (PTRFASTCALL *isInvalid4)(const ENCODING *, const char *); }; #define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *) (enc)) #ifdef XML_MIN_SIZE #define STANDARD_VTABLE(E) \ E ## byteType, \ E ## isNameMin, \ E ## isNmstrtMin, \ E ## byteToAscii, \ E ## charMatches, #else #define STANDARD_VTABLE(E) /* as nothing */ #endif #define NORMAL_VTABLE(E) \ E ## isName2, \ E ## isName3, \ E ## isName4, \ E ## isNmstrt2, \ E ## isNmstrt3, \ E ## isNmstrt4, \ E ## isInvalid2, \ E ## isInvalid3, \ E ## isInvalid4 static int FASTCALL checkCharRefNumber(int); #include "xmltok_impl.h" #include "ascii.h" #ifdef XML_MIN_SIZE #define sb_isNameMin isNever #define sb_isNmstrtMin isNever #endif #ifdef XML_MIN_SIZE #define MINBPC(enc) ((enc)->minBytesPerChar) #else /* minimum bytes per character */ #define MINBPC(enc) 1 #endif #define SB_BYTE_TYPE(enc, p) \ (((struct normal_encoding *)(enc))->type[(unsigned char)*(p)]) #ifdef XML_MIN_SIZE static int PTRFASTCALL sb_byteType(const ENCODING *enc, const char *p) { return SB_BYTE_TYPE(enc, p); } #define BYTE_TYPE(enc, p) \ (AS_NORMAL_ENCODING(enc)->byteType(enc, p)) #else #define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p) #endif #ifdef XML_MIN_SIZE #define BYTE_TO_ASCII(enc, p) \ (AS_NORMAL_ENCODING(enc)->byteToAscii(enc, p)) static int PTRFASTCALL sb_byteToAscii(const ENCODING *enc, const char *p) { return *p; } #else #define BYTE_TO_ASCII(enc, p) (*(p)) #endif #define IS_NAME_CHAR(enc, p, n) \ (AS_NORMAL_ENCODING(enc)->isName ## n(enc, p)) #define IS_NMSTRT_CHAR(enc, p, n) \ (AS_NORMAL_ENCODING(enc)->isNmstrt ## n(enc, p)) #define IS_INVALID_CHAR(enc, p, n) \ (AS_NORMAL_ENCODING(enc)->isInvalid ## n(enc, p)) #ifdef XML_MIN_SIZE #define IS_NAME_CHAR_MINBPC(enc, p) \ (AS_NORMAL_ENCODING(enc)->isNameMin(enc, p)) #define IS_NMSTRT_CHAR_MINBPC(enc, p) \ (AS_NORMAL_ENCODING(enc)->isNmstrtMin(enc, p)) #else #define IS_NAME_CHAR_MINBPC(enc, p) (0) #define IS_NMSTRT_CHAR_MINBPC(enc, p) (0) #endif #ifdef XML_MIN_SIZE #define CHAR_MATCHES(enc, p, c) \ (AS_NORMAL_ENCODING(enc)->charMatches(enc, p, c)) static int PTRCALL sb_charMatches(const ENCODING *enc, const char *p, int c) { return *p == c; } #else /* c is an ASCII character */ #define CHAR_MATCHES(enc, p, c) (*(p) == c) #endif #define PREFIX(ident) normal_ ## ident #define XML_TOK_IMPL_C #include "xmltok_impl.c" #undef XML_TOK_IMPL_C #undef MINBPC #undef BYTE_TYPE #undef BYTE_TO_ASCII #undef CHAR_MATCHES #undef IS_NAME_CHAR #undef IS_NAME_CHAR_MINBPC #undef IS_NMSTRT_CHAR #undef IS_NMSTRT_CHAR_MINBPC #undef IS_INVALID_CHAR enum { /* UTF8_cvalN is value of masked first byte of N byte sequence */ UTF8_cval1 = 0x00, UTF8_cval2 = 0xc0, UTF8_cval3 = 0xe0, UTF8_cval4 = 0xf0 }; static void PTRCALL utf8_toUtf8(__attribute__ ((unused)) const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { char *to; const char *from; if (fromLim - *fromP > toLim - *toP) { /* Avoid copying partial characters. */ for (fromLim = *fromP + (toLim - *toP); fromLim > *fromP; fromLim--) if (((unsigned char)fromLim[-1] & 0xc0) != 0x80) break; } for (to = *toP, from = *fromP; from != fromLim; from++, to++) *to = *from; *fromP = from; *toP = to; } static void PTRCALL utf8_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim) { unsigned short *to = *toP; const char *from = *fromP; while (from != fromLim && to != toLim) { switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) { case BT_LEAD2: *to++ = (unsigned short)(((from[0] & 0x1f) << 6) | (from[1] & 0x3f)); from += 2; break; case BT_LEAD3: *to++ = (unsigned short)(((from[0] & 0xf) << 12) | ((from[1] & 0x3f) << 6) | (from[2] & 0x3f)); from += 3; break; case BT_LEAD4: { unsigned long n; if (to + 1 == toLim) goto after; n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12) | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f); n -= 0x10000; to[0] = (unsigned short)((n >> 10) | 0xD800); to[1] = (unsigned short)((n & 0x3FF) | 0xDC00); to += 2; from += 4; } break; default: *to++ = *from++; break; } } after: *fromP = from; *toP = to; } #ifdef XML_NS static const struct normal_encoding utf8_encoding_ns = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #include "asciitab.h" #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; #endif static const struct normal_encoding utf8_encoding = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; #ifdef XML_NS static const struct normal_encoding internal_utf8_encoding_ns = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #include "iasciitab.h" #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; #endif static const struct normal_encoding internal_utf8_encoding = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #define BT_COLON BT_NMSTRT #include "iasciitab.h" #undef BT_COLON #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; static void PTRCALL latin1_toUtf8(__attribute__ ((unused)) const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { for (;;) { unsigned char c; if (*fromP == fromLim) break; c = (unsigned char)**fromP; if (c & 0x80) { if (toLim - *toP < 2) break; *(*toP)++ = (char)((c >> 6) | UTF8_cval2); *(*toP)++ = (char)((c & 0x3f) | 0x80); (*fromP)++; } else { if (*toP == toLim) break; *(*toP)++ = *(*fromP)++; } } } static void PTRCALL latin1_toUtf16(__attribute__ ((unused)) const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim) { while (*fromP != fromLim && *toP != toLim) *(*toP)++ = (unsigned char)*(*fromP)++; } #ifdef XML_NS static const struct normal_encoding latin1_encoding_ns = { { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, { #include "asciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(sb_) }; #endif static const struct normal_encoding latin1_encoding = { { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(sb_) }; static void PTRCALL ascii_toUtf8(__attribute__ ((unused)) const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { while (*fromP != fromLim && *toP != toLim) *(*toP)++ = *(*fromP)++; } #ifdef XML_NS static const struct normal_encoding ascii_encoding_ns = { { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, { #include "asciitab.h" /* BT_NONXML == 0 */ }, STANDARD_VTABLE(sb_) }; #endif static const struct normal_encoding ascii_encoding = { { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON /* BT_NONXML == 0 */ }, STANDARD_VTABLE(sb_) }; static int PTRFASTCALL unicode_byte_type(char hi, char lo) { switch ((unsigned char)hi) { case 0xD8: case 0xD9: case 0xDA: case 0xDB: return BT_LEAD4; case 0xDC: case 0xDD: case 0xDE: case 0xDF: return BT_TRAIL; case 0xFF: switch ((unsigned char)lo) { case 0xFF: case 0xFE: return BT_NONXML; } break; } return BT_NONASCII; } #define DEFINE_UTF16_TO_UTF8(E) \ static void PTRCALL \ E ## toUtf8(__attribute__ ((unused)) const ENCODING *enc, \ const char **fromP, const char *fromLim, \ char **toP, const char *toLim) \ { \ const char *from; \ for (from = *fromP; from != fromLim; from += 2) { \ int plane; \ unsigned char lo2; \ unsigned char lo = GET_LO(from); \ unsigned char hi = GET_HI(from); \ switch (hi) { \ case 0: \ if (lo < 0x80) { \ if (*toP == toLim) { \ *fromP = from; \ return; \ } \ *(*toP)++ = lo; \ break; \ } \ /* fall through */ \ case 0x1: case 0x2: case 0x3: \ case 0x4: case 0x5: case 0x6: case 0x7: \ if (toLim - *toP < 2) { \ *fromP = from; \ return; \ } \ *(*toP)++ = ((lo >> 6) | (hi << 2) | UTF8_cval2); \ *(*toP)++ = ((lo & 0x3f) | 0x80); \ break; \ default: \ if (toLim - *toP < 3) { \ *fromP = from; \ return; \ } \ /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \ *(*toP)++ = ((hi >> 4) | UTF8_cval3); \ *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \ *(*toP)++ = ((lo & 0x3f) | 0x80); \ break; \ case 0xD8: case 0xD9: case 0xDA: case 0xDB: \ if (toLim - *toP < 4) { \ *fromP = from; \ return; \ } \ plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \ *(*toP)++ = ((plane >> 2) | UTF8_cval4); \ *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \ from += 2; \ lo2 = GET_LO(from); \ *(*toP)++ = (((lo & 0x3) << 4) \ | ((GET_HI(from) & 0x3) << 2) \ | (lo2 >> 6) \ | 0x80); \ *(*toP)++ = ((lo2 & 0x3f) | 0x80); \ break; \ } \ } \ *fromP = from; \ } #define DEFINE_UTF16_TO_UTF16(E) \ static void PTRCALL \ E ## toUtf16(__attribute__ ((unused)) const ENCODING *enc, \ const char **fromP, const char *fromLim, \ unsigned short **toP, const unsigned short *toLim) \ { \ /* Avoid copying first half only of surrogate */ \ if (fromLim - *fromP > ((toLim - *toP) << 1) \ && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \ fromLim -= 2; \ for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \ *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \ } #define SET2(ptr, ch) \ (((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8))) #define GET_LO(ptr) ((unsigned char)(ptr)[0]) #define GET_HI(ptr) ((unsigned char)(ptr)[1]) DEFINE_UTF16_TO_UTF8(little2_) DEFINE_UTF16_TO_UTF16(little2_) #undef SET2 #undef GET_LO #undef GET_HI #define SET2(ptr, ch) \ (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF))) #define GET_LO(ptr) ((unsigned char)(ptr)[1]) #define GET_HI(ptr) ((unsigned char)(ptr)[0]) DEFINE_UTF16_TO_UTF8(big2_) DEFINE_UTF16_TO_UTF16(big2_) #undef SET2 #undef GET_LO #undef GET_HI #define LITTLE2_BYTE_TYPE(enc, p) \ ((p)[1] == 0 \ ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \ : unicode_byte_type((p)[1], (p)[0])) #define LITTLE2_BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1) #define LITTLE2_CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c) #define LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0]) #define LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0]) #ifdef XML_MIN_SIZE static int PTRFASTCALL little2_byteType(const ENCODING *enc, const char *p) { return LITTLE2_BYTE_TYPE(enc, p); } static int PTRFASTCALL little2_byteToAscii(const ENCODING *enc, const char *p) { return LITTLE2_BYTE_TO_ASCII(enc, p); } static int PTRCALL little2_charMatches(const ENCODING *enc, const char *p, int c) { return LITTLE2_CHAR_MATCHES(enc, p, c); } static int PTRFASTCALL little2_isNameMin(const ENCODING *enc, const char *p) { return LITTLE2_IS_NAME_CHAR_MINBPC(enc, p); } static int PTRFASTCALL little2_isNmstrtMin(const ENCODING *enc, const char *p) { return LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p); } #undef VTABLE #define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16 #else /* not XML_MIN_SIZE */ #undef PREFIX #define PREFIX(ident) little2_ ## ident #define MINBPC(enc) 2 /* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ #define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p) #define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(enc, p) #define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(enc, p, c) #define IS_NAME_CHAR(enc, p, n) 0 #define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) #define IS_NMSTRT_CHAR(enc, p, n) (0) #define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) #define XML_TOK_IMPL_C #include "xmltok_impl.c" #undef XML_TOK_IMPL_C #undef MINBPC #undef BYTE_TYPE #undef BYTE_TO_ASCII #undef CHAR_MATCHES #undef IS_NAME_CHAR #undef IS_NAME_CHAR_MINBPC #undef IS_NMSTRT_CHAR #undef IS_NMSTRT_CHAR_MINBPC #undef IS_INVALID_CHAR #endif /* not XML_MIN_SIZE */ #ifdef XML_NS static const struct normal_encoding little2_encoding_ns = { { VTABLE, 2, 0, #if BYTEORDER == 1234 1 #else 0 #endif }, { #include "asciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #endif static const struct normal_encoding little2_encoding = { { VTABLE, 2, 0, #if BYTEORDER == 1234 1 #else 0 #endif }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #if BYTEORDER != 4321 #ifdef XML_NS static const struct normal_encoding internal_little2_encoding_ns = { { VTABLE, 2, 0, 1 }, { #include "iasciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #endif static const struct normal_encoding internal_little2_encoding = { { VTABLE, 2, 0, 1 }, { #define BT_COLON BT_NMSTRT #include "iasciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #endif #define BIG2_BYTE_TYPE(enc, p) \ ((p)[0] == 0 \ ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \ : unicode_byte_type((p)[0], (p)[1])) #define BIG2_BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1) #define BIG2_CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c) #define BIG2_IS_NAME_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1]) #define BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1]) #ifdef XML_MIN_SIZE static int PTRFASTCALL big2_byteType(const ENCODING *enc, const char *p) { return BIG2_BYTE_TYPE(enc, p); } static int PTRFASTCALL big2_byteToAscii(const ENCODING *enc, const char *p) { return BIG2_BYTE_TO_ASCII(enc, p); } static int PTRCALL big2_charMatches(const ENCODING *enc, const char *p, int c) { return BIG2_CHAR_MATCHES(enc, p, c); } static int PTRFASTCALL big2_isNameMin(const ENCODING *enc, const char *p) { return BIG2_IS_NAME_CHAR_MINBPC(enc, p); } static int PTRFASTCALL big2_isNmstrtMin(const ENCODING *enc, const char *p) { return BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p); } #undef VTABLE #define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16 #else /* not XML_MIN_SIZE */ #undef PREFIX #define PREFIX(ident) big2_ ## ident #define MINBPC(enc) 2 /* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ #define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p) #define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(enc, p) #define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(enc, p, c) #define IS_NAME_CHAR(enc, p, n) 0 #define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(enc, p) #define IS_NMSTRT_CHAR(enc, p, n) (0) #define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) #define XML_TOK_IMPL_C #include "xmltok_impl.c" #undef XML_TOK_IMPL_C #undef MINBPC #undef BYTE_TYPE #undef BYTE_TO_ASCII #undef CHAR_MATCHES #undef IS_NAME_CHAR #undef IS_NAME_CHAR_MINBPC #undef IS_NMSTRT_CHAR #undef IS_NMSTRT_CHAR_MINBPC #undef IS_INVALID_CHAR #endif /* not XML_MIN_SIZE */ #ifdef XML_NS static const struct normal_encoding big2_encoding_ns = { { VTABLE, 2, 0, #if BYTEORDER == 4321 1 #else 0 #endif }, { #include "asciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #endif static const struct normal_encoding big2_encoding = { { VTABLE, 2, 0, #if BYTEORDER == 4321 1 #else 0 #endif }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #if BYTEORDER != 1234 #ifdef XML_NS static const struct normal_encoding internal_big2_encoding_ns = { { VTABLE, 2, 0, 1 }, { #include "iasciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #endif static const struct normal_encoding internal_big2_encoding = { { VTABLE, 2, 0, 1 }, { #define BT_COLON BT_NMSTRT #include "iasciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #endif #undef PREFIX static int FASTCALL streqci(const char *s1, const char *s2) { for (;;) { char c1 = *s1++; char c2 = *s2++; if (ASCII_a <= c1 && c1 <= ASCII_z) c1 += ASCII_A - ASCII_a; if (ASCII_a <= c2 && c2 <= ASCII_z) c2 += ASCII_A - ASCII_a; if (c1 != c2) return 0; if (!c1) break; } return 1; } static void PTRCALL initUpdatePosition(__attribute__ ((unused)) const ENCODING *enc, const char *ptr, const char *end, POSITION *pos) { normal_updatePosition(&utf8_encoding.enc, ptr, end, pos); } static int toAscii(const ENCODING *enc, const char *ptr, const char *end) { char buf[1]; char *p = buf; XmlUtf8Convert(enc, &ptr, end, &p, p + 1); if (p == buf) return -1; else return buf[0]; } static int FASTCALL isSpace(int c) { switch (c) { case 0x20: case 0xD: case 0xA: case 0x9: return 1; } return 0; } /* Return 1 if there's just optional white space or there's an S followed by name=val. */ static int parsePseudoAttribute(const ENCODING *enc, const char *ptr, const char *end, const char **namePtr, const char **nameEndPtr, const char **valPtr, const char **nextTokPtr) { int c; char open; if (ptr == end) { *namePtr = NULL; return 1; } if (!isSpace(toAscii(enc, ptr, end))) { *nextTokPtr = ptr; return 0; } do { ptr += enc->minBytesPerChar; } while (isSpace(toAscii(enc, ptr, end))); if (ptr == end) { *namePtr = NULL; return 1; } *namePtr = ptr; for (;;) { c = toAscii(enc, ptr, end); if (c == -1) { *nextTokPtr = ptr; return 0; } if (c == ASCII_EQUALS) { *nameEndPtr = ptr; break; } if (isSpace(c)) { *nameEndPtr = ptr; do { ptr += enc->minBytesPerChar; } while (isSpace(c = toAscii(enc, ptr, end))); if (c != ASCII_EQUALS) { *nextTokPtr = ptr; return 0; } break; } ptr += enc->minBytesPerChar; } if (ptr == *namePtr) { *nextTokPtr = ptr; return 0; } ptr += enc->minBytesPerChar; c = toAscii(enc, ptr, end); while (isSpace(c)) { ptr += enc->minBytesPerChar; c = toAscii(enc, ptr, end); } if (c != ASCII_QUOT && c != ASCII_APOS) { *nextTokPtr = ptr; return 0; } open = (char)c; ptr += enc->minBytesPerChar; *valPtr = ptr; for (;; ptr += enc->minBytesPerChar) { c = toAscii(enc, ptr, end); if (c == open) break; if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z) && !(ASCII_0 <= c && c <= ASCII_9) && c != ASCII_PERIOD && c != ASCII_MINUS && c != ASCII_UNDERSCORE) { *nextTokPtr = ptr; return 0; } } *nextTokPtr = ptr + enc->minBytesPerChar; return 1; } static const char KW_version[] = { ASCII_v, ASCII_e, ASCII_r, ASCII_s, ASCII_i, ASCII_o, ASCII_n, '\0' }; static const char KW_encoding[] = { ASCII_e, ASCII_n, ASCII_c, ASCII_o, ASCII_d, ASCII_i, ASCII_n, ASCII_g, '\0' }; static const char KW_standalone[] = { ASCII_s, ASCII_t, ASCII_a, ASCII_n, ASCII_d, ASCII_a, ASCII_l, ASCII_o, ASCII_n, ASCII_e, '\0' }; static const char KW_yes[] = { ASCII_y, ASCII_e, ASCII_s, '\0' }; static const char KW_no[] = { ASCII_n, ASCII_o, '\0' }; static int doParseXmlDecl(const ENCODING *(*encodingFinder)(const ENCODING *, const char *, const char *), int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **versionEndPtr, const char **encodingName, const ENCODING **encoding, int *standalone) { const char *val = NULL; const char *name = NULL; const char *nameEnd = NULL; ptr += 5 * enc->minBytesPerChar; end -= 2 * enc->minBytesPerChar; if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr) || !name) { *badPtr = ptr; return 0; } if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_version)) { if (!isGeneralTextEntity) { *badPtr = name; return 0; } } else { if (versionPtr) *versionPtr = val; if (versionEndPtr) *versionEndPtr = ptr; if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { *badPtr = ptr; return 0; } if (!name) { if (isGeneralTextEntity) { /* a TextDecl must have an EncodingDecl */ *badPtr = ptr; return 0; } return 1; } } if (XmlNameMatchesAscii(enc, name, nameEnd, KW_encoding)) { int c = toAscii(enc, val, end); if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z)) { *badPtr = val; return 0; } if (encodingName) *encodingName = val; if (encoding) *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar); if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { *badPtr = ptr; return 0; } if (!name) return 1; } if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_standalone) || isGeneralTextEntity) { *badPtr = name; return 0; } if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_yes)) { if (standalone) *standalone = 1; } else if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_no)) { if (standalone) *standalone = 0; } else { *badPtr = val; return 0; } while (isSpace(toAscii(enc, ptr, end))) ptr += enc->minBytesPerChar; if (ptr != end) { *badPtr = ptr; return 0; } return 1; } static int FASTCALL checkCharRefNumber(int result) { switch (result >> 8) { case 0xD8: case 0xD9: case 0xDA: case 0xDB: case 0xDC: case 0xDD: case 0xDE: case 0xDF: return -1; case 0: if (latin1_encoding.type[result] == BT_NONXML) return -1; break; case 0xFF: if (result == 0xFFFE || result == 0xFFFF) return -1; break; } return result; } int FASTCALL XmlUtf8Encode(int c, char *buf) { enum { /* minN is minimum legal resulting value for N byte sequence */ min2 = 0x80, min3 = 0x800, min4 = 0x10000 }; if (c < 0) return 0; if (c < min2) { buf[0] = (char)(c | UTF8_cval1); return 1; } if (c < min3) { buf[0] = (char)((c >> 6) | UTF8_cval2); buf[1] = (char)((c & 0x3f) | 0x80); return 2; } if (c < min4) { buf[0] = (char)((c >> 12) | UTF8_cval3); buf[1] = (char)(((c >> 6) & 0x3f) | 0x80); buf[2] = (char)((c & 0x3f) | 0x80); return 3; } if (c < 0x110000) { buf[0] = (char)((c >> 18) | UTF8_cval4); buf[1] = (char)(((c >> 12) & 0x3f) | 0x80); buf[2] = (char)(((c >> 6) & 0x3f) | 0x80); buf[3] = (char)((c & 0x3f) | 0x80); return 4; } return 0; } int FASTCALL XmlUtf16Encode(int charNum, unsigned short *buf) { if (charNum < 0) return 0; if (charNum < 0x10000) { buf[0] = (unsigned short)charNum; return 1; } if (charNum < 0x110000) { charNum -= 0x10000; buf[0] = (unsigned short)((charNum >> 10) + 0xD800); buf[1] = (unsigned short)((charNum & 0x3FF) + 0xDC00); return 2; } return 0; } struct unknown_encoding { struct normal_encoding normal; CONVERTER convert; void *userData; unsigned short utf16[256]; char utf8[256][4]; }; #define AS_UNKNOWN_ENCODING(enc) ((const struct unknown_encoding *) (enc)) int XmlSizeOfUnknownEncoding(void) { return sizeof(struct unknown_encoding); } static int PTRFASTCALL unknown_isName(const ENCODING *enc, const char *p) { const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); int c = uenc->convert(uenc->userData, p); if (c & ~0xFFFF) return 0; return UCS2_GET_NAMING(namePages, c >> 8, c & 0xFF); } static int PTRFASTCALL unknown_isNmstrt(const ENCODING *enc, const char *p) { const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); int c = uenc->convert(uenc->userData, p); if (c & ~0xFFFF) return 0; return UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xFF); } static int PTRFASTCALL unknown_isInvalid(const ENCODING *enc, const char *p) { const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); int c = uenc->convert(uenc->userData, p); return (c & ~0xFFFF) || checkCharRefNumber(c) < 0; } static void PTRCALL unknown_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); char buf[XML_UTF8_ENCODE_MAX]; for (;;) { const char *utf8; int n; if (*fromP == fromLim) break; utf8 = uenc->utf8[(unsigned char)**fromP]; n = *utf8++; if (n == 0) { int c = uenc->convert(uenc->userData, *fromP); n = XmlUtf8Encode(c, buf); if (n > toLim - *toP) break; utf8 = buf; *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP] - (BT_LEAD2 - 2)); } else { if (n > toLim - *toP) break; (*fromP)++; } do { *(*toP)++ = *utf8++; } while (--n != 0); } } static void PTRCALL unknown_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim) { const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); while (*fromP != fromLim && *toP != toLim) { unsigned short c = uenc->utf16[(unsigned char)**fromP]; if (c == 0) { c = (unsigned short) uenc->convert(uenc->userData, *fromP); *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP] - (BT_LEAD2 - 2)); } else (*fromP)++; *(*toP)++ = c; } } ENCODING * XmlInitUnknownEncoding(void *mem, int *table, CONVERTER convert, void *userData) { int i; struct unknown_encoding *e = (struct unknown_encoding *)mem; for (i = 0; i < (int)sizeof(struct normal_encoding); i++) ((char *)mem)[i] = ((char *)&latin1_encoding)[i]; for (i = 0; i < 128; i++) if (latin1_encoding.type[i] != BT_OTHER && latin1_encoding.type[i] != BT_NONXML && table[i] != i) return 0; for (i = 0; i < 256; i++) { int c = table[i]; if (c == -1) { e->normal.type[i] = BT_MALFORM; /* This shouldn't really get used. */ e->utf16[i] = 0xFFFF; e->utf8[i][0] = 1; e->utf8[i][1] = 0; } else if (c < 0) { if (c < -4) return 0; e->normal.type[i] = (unsigned char)(BT_LEAD2 - (c + 2)); e->utf8[i][0] = 0; e->utf16[i] = 0; } else if (c < 0x80) { if (latin1_encoding.type[c] != BT_OTHER && latin1_encoding.type[c] != BT_NONXML && c != i) return 0; e->normal.type[i] = latin1_encoding.type[c]; e->utf8[i][0] = 1; e->utf8[i][1] = (char)c; e->utf16[i] = (unsigned short)(c == 0 ? 0xFFFF : c); } else if (checkCharRefNumber(c) < 0) { e->normal.type[i] = BT_NONXML; /* This shouldn't really get used. */ e->utf16[i] = 0xFFFF; e->utf8[i][0] = 1; e->utf8[i][1] = 0; } else { if (c > 0xFFFF) return 0; if (UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xff)) e->normal.type[i] = BT_NMSTRT; else if (UCS2_GET_NAMING(namePages, c >> 8, c & 0xff)) e->normal.type[i] = BT_NAME; else e->normal.type[i] = BT_OTHER; e->utf8[i][0] = (char)XmlUtf8Encode(c, e->utf8[i] + 1); e->utf16[i] = (unsigned short)c; } } e->userData = userData; e->convert = convert; if (convert) { e->normal.isName2 = unknown_isName; e->normal.isName3 = unknown_isName; e->normal.isName4 = unknown_isName; e->normal.isNmstrt2 = unknown_isNmstrt; e->normal.isNmstrt3 = unknown_isNmstrt; e->normal.isNmstrt4 = unknown_isNmstrt; e->normal.isInvalid2 = unknown_isInvalid; e->normal.isInvalid3 = unknown_isInvalid; e->normal.isInvalid4 = unknown_isInvalid; } e->normal.enc.utf8Convert = unknown_toUtf8; e->normal.enc.utf16Convert = unknown_toUtf16; return &(e->normal.enc); } /* If this enumeration is changed, getEncodingIndex and encodings must also be changed. */ enum { UNKNOWN_ENC = -1, ISO_8859_1_ENC = 0, US_ASCII_ENC, UTF_8_ENC, UTF_16_ENC, UTF_16BE_ENC, UTF_16LE_ENC, /* must match encodingNames up to here */ NO_ENC }; static const char KW_ISO_8859_1[] = { ASCII_I, ASCII_S, ASCII_O, ASCII_MINUS, ASCII_8, ASCII_8, ASCII_5, ASCII_9, ASCII_MINUS, ASCII_1, '\0' }; static const char KW_US_ASCII[] = { ASCII_U, ASCII_S, ASCII_MINUS, ASCII_A, ASCII_S, ASCII_C, ASCII_I, ASCII_I, '\0' }; static const char KW_UTF_8[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_8, '\0' }; static const char KW_UTF_16[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, '\0' }; static const char KW_UTF_16BE[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_B, ASCII_E, '\0' }; static const char KW_UTF_16LE[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_L, ASCII_E, '\0' }; static int FASTCALL getEncodingIndex(const char *name) { static const char * const encodingNames[] = { KW_ISO_8859_1, KW_US_ASCII, KW_UTF_8, KW_UTF_16, KW_UTF_16BE, KW_UTF_16LE, }; int i; if (name == NULL) return NO_ENC; for (i = 0; i < (int)(sizeof(encodingNames)/sizeof(encodingNames[0])); i++) if (streqci(name, encodingNames[i])) return i; return UNKNOWN_ENC; } /* For binary compatibility, we store the index of the encoding specified at initialization in the isUtf16 member. */ #define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16) #define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i) /* This is what detects the encoding. encodingTable maps from encoding indices to encodings; INIT_ENC_INDEX(enc) is the index of the external (protocol) specified encoding; state is XML_CONTENT_STATE if we're parsing an external text entity, and XML_PROLOG_STATE otherwise. */ static int initScan(const ENCODING * const *encodingTable, const INIT_ENCODING *enc, int state, const char *ptr, const char *end, const char **nextTokPtr) { const ENCODING **encPtr; if (ptr == end) return XML_TOK_NONE; encPtr = enc->encPtr; if (ptr + 1 == end) { /* only a single byte available for auto-detection */ #ifndef XML_DTD /* FIXME */ /* a well-formed document entity must have more than one byte */ if (state != XML_CONTENT_STATE) return XML_TOK_PARTIAL; #endif /* so we're parsing an external text entity... */ /* if UTF-16 was externally specified, then we need at least 2 bytes */ switch (INIT_ENC_INDEX(enc)) { case UTF_16_ENC: case UTF_16LE_ENC: case UTF_16BE_ENC: return XML_TOK_PARTIAL; } switch ((unsigned char)*ptr) { case 0xFE: case 0xFF: case 0xEF: /* possibly first byte of UTF-8 BOM */ if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) break; /* fall through */ case 0x00: case 0x3C: return XML_TOK_PARTIAL; } } else { switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) { case 0xFEFF: if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) break; *nextTokPtr = ptr + 2; *encPtr = encodingTable[UTF_16BE_ENC]; return XML_TOK_BOM; /* 00 3C is handled in the default case */ case 0x3C00: if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC || INIT_ENC_INDEX(enc) == UTF_16_ENC) && state == XML_CONTENT_STATE) break; *encPtr = encodingTable[UTF_16LE_ENC]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); case 0xFFFE: if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) break; *nextTokPtr = ptr + 2; *encPtr = encodingTable[UTF_16LE_ENC]; return XML_TOK_BOM; case 0xEFBB: /* Maybe a UTF-8 BOM (EF BB BF) */ /* If there's an explicitly specified (external) encoding of ISO-8859-1 or some flavour of UTF-16 and this is an external text entity, don't look for the BOM, because it might be a legal data. */ if (state == XML_CONTENT_STATE) { int e = INIT_ENC_INDEX(enc); if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC || e == UTF_16LE_ENC || e == UTF_16_ENC) break; } if (ptr + 2 == end) return XML_TOK_PARTIAL; if ((unsigned char)ptr[2] == 0xBF) { *nextTokPtr = ptr + 3; *encPtr = encodingTable[UTF_8_ENC]; return XML_TOK_BOM; } break; default: if (ptr[0] == '\0') { /* 0 isn't a legal data character. Furthermore a document entity can only start with ASCII characters. So the only way this can fail to be big-endian UTF-16 if it it's an external parsed general entity that's labelled as UTF-16LE. */ if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC) break; *encPtr = encodingTable[UTF_16BE_ENC]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); } else if (ptr[1] == '\0') { /* We could recover here in the case: - parsing an external entity - second byte is 0 - no externally specified encoding - no encoding declaration by assuming UTF-16LE. But we don't, because this would mean when presented just with a single byte, we couldn't reliably determine whether we needed further bytes. */ if (state == XML_CONTENT_STATE) break; *encPtr = encodingTable[UTF_16LE_ENC]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); } break; } } *encPtr = encodingTable[INIT_ENC_INDEX(enc)]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); } #define NS(x) x #define ns(x) x #define XML_TOK_NS_C #include "xmltok_ns.c" #undef XML_TOK_NS_C #undef NS #undef ns #ifdef XML_NS #define NS(x) x ## NS #define ns(x) x ## _ns #define XML_TOK_NS_C #include "xmltok_ns.c" #undef XML_TOK_NS_C #undef NS #undef ns ENCODING * XmlInitUnknownEncodingNS(void *mem, int *table, CONVERTER convert, void *userData) { ENCODING *enc = XmlInitUnknownEncoding(mem, table, convert, userData); if (enc) ((struct normal_encoding *)enc)->type[ASCII_COLON] = BT_COLON; return enc; } #endif /* XML_NS */ genometools-1.5.1/src/external/expat-2.0.1/lib/xmltok.h000077500000000000000000000256601211610345200225030ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #ifndef XmlTok_INCLUDED #define XmlTok_INCLUDED 1 #ifdef __cplusplus extern "C" { #endif /* The following token may be returned by XmlContentTok */ #define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be start of illegal ]]> sequence */ /* The following tokens may be returned by both XmlPrologTok and XmlContentTok. */ #define XML_TOK_NONE -4 /* The string to be scanned is empty */ #define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan; might be part of CRLF sequence */ #define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */ #define XML_TOK_PARTIAL -1 /* only part of a token */ #define XML_TOK_INVALID 0 /* The following tokens are returned by XmlContentTok; some are also returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok. */ #define XML_TOK_START_TAG_WITH_ATTS 1 #define XML_TOK_START_TAG_NO_ATTS 2 #define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag */ #define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4 #define XML_TOK_END_TAG 5 #define XML_TOK_DATA_CHARS 6 #define XML_TOK_DATA_NEWLINE 7 #define XML_TOK_CDATA_SECT_OPEN 8 #define XML_TOK_ENTITY_REF 9 #define XML_TOK_CHAR_REF 10 /* numeric character reference */ /* The following tokens may be returned by both XmlPrologTok and XmlContentTok. */ #define XML_TOK_PI 11 /* processing instruction */ #define XML_TOK_XML_DECL 12 /* XML decl or text decl */ #define XML_TOK_COMMENT 13 #define XML_TOK_BOM 14 /* Byte order mark */ /* The following tokens are returned only by XmlPrologTok */ #define XML_TOK_PROLOG_S 15 #define XML_TOK_DECL_OPEN 16 /* */ #define XML_TOK_NAME 18 #define XML_TOK_NMTOKEN 19 #define XML_TOK_POUND_NAME 20 /* #name */ #define XML_TOK_OR 21 /* | */ #define XML_TOK_PERCENT 22 #define XML_TOK_OPEN_PAREN 23 #define XML_TOK_CLOSE_PAREN 24 #define XML_TOK_OPEN_BRACKET 25 #define XML_TOK_CLOSE_BRACKET 26 #define XML_TOK_LITERAL 27 #define XML_TOK_PARAM_ENTITY_REF 28 #define XML_TOK_INSTANCE_START 29 /* The following occur only in element type declarations */ #define XML_TOK_NAME_QUESTION 30 /* name? */ #define XML_TOK_NAME_ASTERISK 31 /* name* */ #define XML_TOK_NAME_PLUS 32 /* name+ */ #define XML_TOK_COND_SECT_OPEN 33 /* */ #define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */ #define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */ #define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */ #define XML_TOK_COMMA 38 /* The following token is returned only by XmlAttributeValueTok */ #define XML_TOK_ATTRIBUTE_VALUE_S 39 /* The following token is returned only by XmlCdataSectionTok */ #define XML_TOK_CDATA_SECT_CLOSE 40 /* With namespace processing this is returned by XmlPrologTok for a name with a colon. */ #define XML_TOK_PREFIXED_NAME 41 #ifdef XML_DTD #define XML_TOK_IGNORE_SECT 42 #endif /* XML_DTD */ #ifdef XML_DTD #define XML_N_STATES 4 #else /* not XML_DTD */ #define XML_N_STATES 3 #endif /* not XML_DTD */ #define XML_PROLOG_STATE 0 #define XML_CONTENT_STATE 1 #define XML_CDATA_SECTION_STATE 2 #ifdef XML_DTD #define XML_IGNORE_SECTION_STATE 3 #endif /* XML_DTD */ #define XML_N_LITERAL_TYPES 2 #define XML_ATTRIBUTE_VALUE_LITERAL 0 #define XML_ENTITY_VALUE_LITERAL 1 /* The size of the buffer passed to XmlUtf8Encode must be at least this. */ #define XML_UTF8_ENCODE_MAX 4 /* The size of the buffer passed to XmlUtf16Encode must be at least this. */ #define XML_UTF16_ENCODE_MAX 2 typedef struct position { /* first line and first column are 0 not 1 */ XML_Size lineNumber; XML_Size columnNumber; } POSITION; typedef struct { const char *name; const char *valuePtr; const char *valueEnd; char normalized; } ATTRIBUTE; struct encoding; typedef struct encoding ENCODING; typedef int (PTRCALL *SCANNER)(const ENCODING *, const char *, const char *, const char **); struct encoding { SCANNER scanners[XML_N_STATES]; SCANNER literalScanners[XML_N_LITERAL_TYPES]; int (PTRCALL *sameName)(const ENCODING *, const char *, const char *); int (PTRCALL *nameMatchesAscii)(const ENCODING *, const char *, const char *, const char *); int (PTRFASTCALL *nameLength)(const ENCODING *, const char *); const char *(PTRFASTCALL *skipS)(const ENCODING *, const char *); int (PTRCALL *getAtts)(const ENCODING *enc, const char *ptr, int attsMax, ATTRIBUTE *atts); int (PTRFASTCALL *charRefNumber)(const ENCODING *enc, const char *ptr); int (PTRCALL *predefinedEntityName)(const ENCODING *, const char *, const char *); void (PTRCALL *updatePosition)(const ENCODING *, const char *ptr, const char *end, POSITION *); int (PTRCALL *isPublicId)(const ENCODING *enc, const char *ptr, const char *end, const char **badPtr); void (PTRCALL *utf8Convert)(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim); void (PTRCALL *utf16Convert)(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim); int minBytesPerChar; char isUtf8; char isUtf16; }; /* Scan the string starting at ptr until the end of the next complete token, but do not scan past eptr. Return an integer giving the type of token. Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set. Return XML_TOK_PARTIAL when the string does not contain a complete token; nextTokPtr will not be set. Return XML_TOK_INVALID when the string does not start a valid token; nextTokPtr will be set to point to the character which made the token invalid. Otherwise the string starts with a valid token; nextTokPtr will be set to point to the character following the end of that token. Each data character counts as a single token, but adjacent data characters may be returned together. Similarly for characters in the prolog outside literals, comments and processing instructions. */ #define XmlTok(enc, state, ptr, end, nextTokPtr) \ (((enc)->scanners[state])(enc, ptr, end, nextTokPtr)) #define XmlPrologTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr) #define XmlContentTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr) #define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr) #ifdef XML_DTD #define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr) #endif /* XML_DTD */ /* This is used for performing a 2nd-level tokenization on the content of a literal that has already been returned by XmlTok. */ #define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \ (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr)) #define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \ XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr) #define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \ XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr) #define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2)) #define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \ (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2)) #define XmlNameLength(enc, ptr) \ (((enc)->nameLength)(enc, ptr)) #define XmlSkipS(enc, ptr) \ (((enc)->skipS)(enc, ptr)) #define XmlGetAttributes(enc, ptr, attsMax, atts) \ (((enc)->getAtts)(enc, ptr, attsMax, atts)) #define XmlCharRefNumber(enc, ptr) \ (((enc)->charRefNumber)(enc, ptr)) #define XmlPredefinedEntityName(enc, ptr, end) \ (((enc)->predefinedEntityName)(enc, ptr, end)) #define XmlUpdatePosition(enc, ptr, end, pos) \ (((enc)->updatePosition)(enc, ptr, end, pos)) #define XmlIsPublicId(enc, ptr, end, badPtr) \ (((enc)->isPublicId)(enc, ptr, end, badPtr)) #define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \ (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim)) #define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \ (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim)) typedef struct { ENCODING initEnc; const ENCODING **encPtr; } INIT_ENCODING; int XmlParseXmlDecl(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **versionEndPtr, const char **encodingNamePtr, const ENCODING **namedEncodingPtr, int *standalonePtr); int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name); const ENCODING *XmlGetUtf8InternalEncoding(void); const ENCODING *XmlGetUtf16InternalEncoding(void); int FASTCALL XmlUtf8Encode(int charNumber, char *buf); int FASTCALL XmlUtf16Encode(int charNumber, unsigned short *buf); int XmlSizeOfUnknownEncoding(void); typedef int (XMLCALL *CONVERTER) (void *userData, const char *p); ENCODING * XmlInitUnknownEncoding(void *mem, int *table, CONVERTER convert, void *userData); int XmlParseXmlDeclNS(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **versionEndPtr, const char **encodingNamePtr, const ENCODING **namedEncodingPtr, int *standalonePtr); int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name); const ENCODING *XmlGetUtf8InternalEncodingNS(void); const ENCODING *XmlGetUtf16InternalEncodingNS(void); ENCODING * XmlInitUnknownEncodingNS(void *mem, int *table, CONVERTER convert, void *userData); #ifdef __cplusplus } #endif #endif /* not XmlTok_INCLUDED */ genometools-1.5.1/src/external/expat-2.0.1/lib/xmltok_impl.c000077500000000000000000001272111211610345200235120ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* This file is included! */ #ifdef XML_TOK_IMPL_C #ifndef IS_INVALID_CHAR #define IS_INVALID_CHAR(enc, ptr, n) (0) #endif #define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (IS_INVALID_CHAR(enc, ptr, n)) { \ *(nextTokPtr) = (ptr); \ return XML_TOK_INVALID; \ } \ ptr += n; \ break; #define INVALID_CASES(ptr, nextTokPtr) \ INVALID_LEAD_CASE(2, ptr, nextTokPtr) \ INVALID_LEAD_CASE(3, ptr, nextTokPtr) \ INVALID_LEAD_CASE(4, ptr, nextTokPtr) \ case BT_NONXML: \ case BT_MALFORM: \ case BT_TRAIL: \ *(nextTokPtr) = (ptr); \ return XML_TOK_INVALID; #define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (!IS_NAME_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ ptr += n; \ break; #define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \ case BT_NONASCII: \ if (!IS_NAME_CHAR_MINBPC(enc, ptr)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ case BT_NMSTRT: \ case BT_HEX: \ case BT_DIGIT: \ case BT_NAME: \ case BT_MINUS: \ ptr += MINBPC(enc); \ break; \ CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \ CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \ CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr) #define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ ptr += n; \ break; #define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \ case BT_NONASCII: \ if (!IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ case BT_NMSTRT: \ case BT_HEX: \ ptr += MINBPC(enc); \ break; \ CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \ CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \ CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr) #ifndef PREFIX #define PREFIX(ident) ident #endif /* ptr points to character following " */ switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) { case BT_S: case BT_CR: case BT_LF: case BT_PERCNT: *nextTokPtr = ptr; return XML_TOK_INVALID; } /* fall through */ case BT_S: case BT_CR: case BT_LF: *nextTokPtr = ptr; return XML_TOK_DECL_OPEN; case BT_NMSTRT: case BT_HEX: ptr += MINBPC(enc); break; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } static int PTRCALL PREFIX(checkPiTarget)(__attribute__ ((unused)) const ENCODING *enc, const char *ptr, const char *end, int *tokPtr) { int upper = 0; *tokPtr = XML_TOK_PI; if (end - ptr != MINBPC(enc)*3) return 1; switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_x: break; case ASCII_X: upper = 1; break; default: return 1; } ptr += MINBPC(enc); switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_m: break; case ASCII_M: upper = 1; break; default: return 1; } ptr += MINBPC(enc); switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_l: break; case ASCII_L: upper = 1; break; default: return 1; } if (upper) return 0; *tokPtr = XML_TOK_XML_DECL; return 1; } /* ptr points to character following " 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); if (n == 0) return XML_TOK_PARTIAL; end = ptr + n; } } switch (BYTE_TYPE(enc, ptr)) { case BT_RSQB: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) break; ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { ptr -= MINBPC(enc); break; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CDATA_SECT_CLOSE; case BT_CR: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; case BT_LF: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; INVALID_CASES(ptr, nextTokPtr) default: ptr += MINBPC(enc); break; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_DATA_CHARS; \ } \ ptr += n; \ break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NONXML: case BT_MALFORM: case BT_TRAIL: case BT_CR: case BT_LF: case BT_RSQB: *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } /* ptr points to character following " 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); if (n == 0) return XML_TOK_PARTIAL; end = ptr + n; } } switch (BYTE_TYPE(enc, ptr)) { case BT_LT: return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_AMP: return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_CR: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_CR; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; case BT_LF: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; case BT_RSQB: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_RSQB; if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) break; ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_RSQB; if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { ptr -= MINBPC(enc); break; } *nextTokPtr = ptr; return XML_TOK_INVALID; INVALID_CASES(ptr, nextTokPtr) default: ptr += MINBPC(enc); break; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_DATA_CHARS; \ } \ ptr += n; \ break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_RSQB: if (ptr + MINBPC(enc) != end) { if (!CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) { ptr += MINBPC(enc); break; } if (ptr + 2*MINBPC(enc) != end) { if (!CHAR_MATCHES(enc, ptr + 2*MINBPC(enc), ASCII_GT)) { ptr += MINBPC(enc); break; } *nextTokPtr = ptr + 2*MINBPC(enc); return XML_TOK_INVALID; } } /* fall through */ case BT_AMP: case BT_LT: case BT_NONXML: case BT_MALFORM: case BT_TRAIL: case BT_CR: case BT_LF: *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } /* ptr points to character following "%" */ static int PTRCALL PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return -XML_TOK_PERCENT; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) case BT_S: case BT_LF: case BT_CR: case BT_PERCNT: *nextTokPtr = ptr; return XML_TOK_PERCENT; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_SEMI: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_PARAM_ENTITY_REF; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } static int PTRCALL PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_CR: case BT_LF: case BT_S: case BT_RPAR: case BT_GT: case BT_PERCNT: case BT_VERBAR: *nextTokPtr = ptr; return XML_TOK_POUND_NAME; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return -XML_TOK_POUND_NAME; } static int PTRCALL PREFIX(scanLit)(int open, const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { while (ptr != end) { int t = BYTE_TYPE(enc, ptr); switch (t) { INVALID_CASES(ptr, nextTokPtr) case BT_QUOT: case BT_APOS: ptr += MINBPC(enc); if (t != open) break; if (ptr == end) return -XML_TOK_LITERAL; *nextTokPtr = ptr; switch (BYTE_TYPE(enc, ptr)) { case BT_S: case BT_CR: case BT_LF: case BT_GT: case BT_PERCNT: case BT_LSQB: return XML_TOK_LITERAL; default: return XML_TOK_INVALID; } default: ptr += MINBPC(enc); break; } } return XML_TOK_PARTIAL; } static int PTRCALL PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { int tok; if (ptr == end) return XML_TOK_NONE; if (MINBPC(enc) > 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); if (n == 0) return XML_TOK_PARTIAL; end = ptr + n; } } switch (BYTE_TYPE(enc, ptr)) { case BT_QUOT: return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_APOS: return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_LT: { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { case BT_EXCL: return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_QUEST: return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_NMSTRT: case BT_HEX: case BT_NONASCII: case BT_LEAD2: case BT_LEAD3: case BT_LEAD4: *nextTokPtr = ptr - MINBPC(enc); return XML_TOK_INSTANCE_START; } *nextTokPtr = ptr; return XML_TOK_INVALID; } case BT_CR: if (ptr + MINBPC(enc) == end) { *nextTokPtr = end; /* indicate that this might be part of a CR/LF pair */ return -XML_TOK_PROLOG_S; } /* fall through */ case BT_S: case BT_LF: for (;;) { ptr += MINBPC(enc); if (ptr == end) break; switch (BYTE_TYPE(enc, ptr)) { case BT_S: case BT_LF: break; case BT_CR: /* don't split CR/LF pair */ if (ptr + MINBPC(enc) != end) break; /* fall through */ default: *nextTokPtr = ptr; return XML_TOK_PROLOG_S; } } *nextTokPtr = ptr; return XML_TOK_PROLOG_S; case BT_PERCNT: return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_COMMA: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_COMMA; case BT_LSQB: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_OPEN_BRACKET; case BT_RSQB: ptr += MINBPC(enc); if (ptr == end) return -XML_TOK_CLOSE_BRACKET; if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { if (ptr + MINBPC(enc) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) { *nextTokPtr = ptr + 2*MINBPC(enc); return XML_TOK_COND_SECT_CLOSE; } } *nextTokPtr = ptr; return XML_TOK_CLOSE_BRACKET; case BT_LPAR: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_OPEN_PAREN; case BT_RPAR: ptr += MINBPC(enc); if (ptr == end) return -XML_TOK_CLOSE_PAREN; switch (BYTE_TYPE(enc, ptr)) { case BT_AST: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CLOSE_PAREN_ASTERISK; case BT_QUEST: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CLOSE_PAREN_QUESTION; case BT_PLUS: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CLOSE_PAREN_PLUS; case BT_CR: case BT_LF: case BT_S: case BT_GT: case BT_COMMA: case BT_VERBAR: case BT_RPAR: *nextTokPtr = ptr; return XML_TOK_CLOSE_PAREN; } *nextTokPtr = ptr; return XML_TOK_INVALID; case BT_VERBAR: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_OR; case BT_GT: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DECL_CLOSE; case BT_NUM: return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr); #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (IS_NMSTRT_CHAR(enc, ptr, n)) { \ ptr += n; \ tok = XML_TOK_NAME; \ break; \ } \ if (IS_NAME_CHAR(enc, ptr, n)) { \ ptr += n; \ tok = XML_TOK_NMTOKEN; \ break; \ } \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NMSTRT: case BT_HEX: tok = XML_TOK_NAME; ptr += MINBPC(enc); break; case BT_DIGIT: case BT_NAME: case BT_MINUS: #ifdef XML_NS case BT_COLON: #endif tok = XML_TOK_NMTOKEN; ptr += MINBPC(enc); break; case BT_NONASCII: if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { ptr += MINBPC(enc); tok = XML_TOK_NAME; break; } if (IS_NAME_CHAR_MINBPC(enc, ptr)) { ptr += MINBPC(enc); tok = XML_TOK_NMTOKEN; break; } /* fall through */ default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_GT: case BT_RPAR: case BT_COMMA: case BT_VERBAR: case BT_LSQB: case BT_PERCNT: case BT_S: case BT_CR: case BT_LF: *nextTokPtr = ptr; return tok; #ifdef XML_NS case BT_COLON: ptr += MINBPC(enc); switch (tok) { case XML_TOK_NAME: if (ptr == end) return XML_TOK_PARTIAL; tok = XML_TOK_PREFIXED_NAME; switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) default: tok = XML_TOK_NMTOKEN; break; } break; case XML_TOK_PREFIXED_NAME: tok = XML_TOK_NMTOKEN; break; } break; #endif case BT_PLUS: if (tok == XML_TOK_NMTOKEN) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_NAME_PLUS; case BT_AST: if (tok == XML_TOK_NMTOKEN) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_NAME_ASTERISK; case BT_QUEST: if (tok == XML_TOK_NMTOKEN) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_NAME_QUESTION; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return -tok; } static int PTRCALL PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { const char *start; if (ptr == end) return XML_TOK_NONE; start = ptr; while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: ptr += n; break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_AMP: if (ptr == start) return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_LT: /* this is for inside entity references */ *nextTokPtr = ptr; return XML_TOK_INVALID; case BT_LF: if (ptr == start) { *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_CR: if (ptr == start) { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_CR; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_S: if (ptr == start) { *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_ATTRIBUTE_VALUE_S; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } static int PTRCALL PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { const char *start; if (ptr == end) return XML_TOK_NONE; start = ptr; while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: ptr += n; break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_AMP: if (ptr == start) return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_PERCNT: if (ptr == start) { int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_LF: if (ptr == start) { *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_CR: if (ptr == start) { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_CR; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } #ifdef XML_DTD static int PTRCALL PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { int level = 0; if (MINBPC(enc) > 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); end = ptr + n; } } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { INVALID_CASES(ptr, nextTokPtr) case BT_LT: if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) { if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) { ++level; ptr += MINBPC(enc); } } break; case BT_RSQB: if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { ptr += MINBPC(enc); if (level == 0) { *nextTokPtr = ptr; return XML_TOK_IGNORE_SECT; } --level; } } break; default: ptr += MINBPC(enc); break; } } return XML_TOK_PARTIAL; } #endif /* XML_DTD */ static int PTRCALL PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end, const char **badPtr) { ptr += MINBPC(enc); end -= MINBPC(enc); for (; ptr != end; ptr += MINBPC(enc)) { switch (BYTE_TYPE(enc, ptr)) { case BT_DIGIT: case BT_HEX: case BT_MINUS: case BT_APOS: case BT_LPAR: case BT_RPAR: case BT_PLUS: case BT_COMMA: case BT_SOL: case BT_EQUALS: case BT_QUEST: case BT_CR: case BT_LF: case BT_SEMI: case BT_EXCL: case BT_AST: case BT_PERCNT: case BT_NUM: #ifdef XML_NS case BT_COLON: #endif break; case BT_S: if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) { *badPtr = ptr; return 0; } break; case BT_NAME: case BT_NMSTRT: if (!(BYTE_TO_ASCII(enc, ptr) & ~0x7f)) break; default: switch (BYTE_TO_ASCII(enc, ptr)) { case 0x24: /* $ */ case 0x40: /* @ */ break; default: *badPtr = ptr; return 0; } break; } } return 1; } /* This must only be called for a well-formed start-tag or empty element tag. Returns the number of attributes. Pointers to the first attsMax attributes are stored in atts. */ static int PTRCALL PREFIX(getAtts)(const ENCODING *enc, const char *ptr, int attsMax, ATTRIBUTE *atts) { enum { other, inName, inValue } state = inName; int nAtts = 0; int open = 0; /* defined when state == inValue; initialization just to shut up compilers */ for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) { switch (BYTE_TYPE(enc, ptr)) { #define START_NAME \ if (state == other) { \ if (nAtts < attsMax) { \ atts[nAtts].name = ptr; \ atts[nAtts].normalized = 1; \ } \ state = inName; \ } #define LEAD_CASE(n) \ case BT_LEAD ## n: START_NAME ptr += (n - MINBPC(enc)); break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NONASCII: case BT_NMSTRT: case BT_HEX: START_NAME break; #undef START_NAME case BT_QUOT: if (state != inValue) { if (nAtts < attsMax) atts[nAtts].valuePtr = ptr + MINBPC(enc); state = inValue; open = BT_QUOT; } else if (open == BT_QUOT) { state = other; if (nAtts < attsMax) atts[nAtts].valueEnd = ptr; nAtts++; } break; case BT_APOS: if (state != inValue) { if (nAtts < attsMax) atts[nAtts].valuePtr = ptr + MINBPC(enc); state = inValue; open = BT_APOS; } else if (open == BT_APOS) { state = other; if (nAtts < attsMax) atts[nAtts].valueEnd = ptr; nAtts++; } break; case BT_AMP: if (nAtts < attsMax) atts[nAtts].normalized = 0; break; case BT_S: if (state == inName) state = other; else if (state == inValue && nAtts < attsMax && atts[nAtts].normalized && (ptr == atts[nAtts].valuePtr || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open)) atts[nAtts].normalized = 0; break; case BT_CR: case BT_LF: /* This case ensures that the first attribute name is counted Apart from that we could just change state on the quote. */ if (state == inName) state = other; else if (state == inValue && nAtts < attsMax) atts[nAtts].normalized = 0; break; case BT_GT: case BT_SOL: if (state != inValue) return nAtts; break; default: break; } } /* not reached */ } static int PTRFASTCALL PREFIX(charRefNumber)(__attribute__ ((unused)) const ENCODING *enc, const char *ptr) { int result = 0; /* skip &# */ ptr += 2*MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_x)) { for (ptr += MINBPC(enc); !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { int c = BYTE_TO_ASCII(enc, ptr); switch (c) { case ASCII_0: case ASCII_1: case ASCII_2: case ASCII_3: case ASCII_4: case ASCII_5: case ASCII_6: case ASCII_7: case ASCII_8: case ASCII_9: result <<= 4; result |= (c - ASCII_0); break; case ASCII_A: case ASCII_B: case ASCII_C: case ASCII_D: case ASCII_E: case ASCII_F: result <<= 4; result += 10 + (c - ASCII_A); break; case ASCII_a: case ASCII_b: case ASCII_c: case ASCII_d: case ASCII_e: case ASCII_f: result <<= 4; result += 10 + (c - ASCII_a); break; } if (result >= 0x110000) return -1; } } else { for (; !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { int c = BYTE_TO_ASCII(enc, ptr); result *= 10; result += (c - ASCII_0); if (result >= 0x110000) return -1; } } return checkCharRefNumber(result); } static int PTRCALL PREFIX(predefinedEntityName)(__attribute__ ((unused)) const ENCODING *enc, const char *ptr, const char *end) { switch ((end - ptr)/MINBPC(enc)) { case 2: if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) { switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_l: return ASCII_LT; case ASCII_g: return ASCII_GT; } } break; case 3: if (CHAR_MATCHES(enc, ptr, ASCII_a)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_m)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_p)) return ASCII_AMP; } } break; case 4: switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_q: ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_u)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_o)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_t)) return ASCII_QUOT; } } break; case ASCII_a: ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_p)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_o)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_s)) return ASCII_APOS; } } break; } } return 0; } static int PTRCALL PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2) { for (;;) { switch (BYTE_TYPE(enc, ptr1)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (*ptr1++ != *ptr2++) \ return 0; LEAD_CASE(4) LEAD_CASE(3) LEAD_CASE(2) #undef LEAD_CASE /* fall through */ if (*ptr1++ != *ptr2++) return 0; break; case BT_NONASCII: case BT_NMSTRT: #ifdef XML_NS case BT_COLON: #endif case BT_HEX: case BT_DIGIT: case BT_NAME: case BT_MINUS: if (*ptr2++ != *ptr1++) return 0; if (MINBPC(enc) > 1) { if (*ptr2++ != *ptr1++) return 0; if (MINBPC(enc) > 2) { if (*ptr2++ != *ptr1++) return 0; if (MINBPC(enc) > 3) { if (*ptr2++ != *ptr1++) return 0; } } } break; default: if (MINBPC(enc) == 1 && *ptr1 == *ptr2) return 1; switch (BYTE_TYPE(enc, ptr2)) { case BT_LEAD2: case BT_LEAD3: case BT_LEAD4: case BT_NONASCII: case BT_NMSTRT: #ifdef XML_NS case BT_COLON: #endif case BT_HEX: case BT_DIGIT: case BT_NAME: case BT_MINUS: return 0; default: return 1; } } } /* not reached */ } static int PTRCALL PREFIX(nameMatchesAscii)(__attribute__ ((unused)) const ENCODING *enc, const char *ptr1, const char *end1, const char *ptr2) { for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) { if (ptr1 == end1) return 0; if (!CHAR_MATCHES(enc, ptr1, *ptr2)) return 0; } return ptr1 == end1; } static int PTRFASTCALL PREFIX(nameLength)(const ENCODING *enc, const char *ptr) { const char *start = ptr; for (;;) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: ptr += n; break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NONASCII: case BT_NMSTRT: #ifdef XML_NS case BT_COLON: #endif case BT_HEX: case BT_DIGIT: case BT_NAME: case BT_MINUS: ptr += MINBPC(enc); break; default: return (int)(ptr - start); } } } static const char * PTRFASTCALL PREFIX(skipS)(const ENCODING *enc, const char *ptr) { for (;;) { switch (BYTE_TYPE(enc, ptr)) { case BT_LF: case BT_CR: case BT_S: ptr += MINBPC(enc); break; default: return ptr; } } } static void PTRCALL PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end, POSITION *pos) { while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ ptr += n; \ break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_LF: pos->columnNumber = (XML_Size)-1; pos->lineNumber++; ptr += MINBPC(enc); break; case BT_CR: pos->lineNumber++; ptr += MINBPC(enc); if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); pos->columnNumber = (XML_Size)-1; break; default: ptr += MINBPC(enc); break; } pos->columnNumber++; } } #undef DO_LEAD_CASE #undef MULTIBYTE_CASES #undef INVALID_CASES #undef CHECK_NAME_CASE #undef CHECK_NAME_CASES #undef CHECK_NMSTRT_CASE #undef CHECK_NMSTRT_CASES #endif /* XML_TOK_IMPL_C */ genometools-1.5.1/src/external/expat-2.0.1/lib/xmltok_impl.h000077500000000000000000000012251211610345200235130ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ enum { BT_NONXML, BT_MALFORM, BT_LT, BT_AMP, BT_RSQB, BT_LEAD2, BT_LEAD3, BT_LEAD4, BT_TRAIL, BT_CR, BT_LF, BT_GT, BT_QUOT, BT_APOS, BT_EQUALS, BT_QUEST, BT_EXCL, BT_SOL, BT_SEMI, BT_NUM, BT_LSQB, BT_S, BT_NMSTRT, BT_COLON, BT_HEX, BT_DIGIT, BT_NAME, BT_MINUS, BT_OTHER, /* known not to be a name or name start character */ BT_NONASCII, /* might be a name or name start character */ BT_PERCNT, BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, BT_COMMA, BT_VERBAR }; #include genometools-1.5.1/src/external/expat-2.0.1/lib/xmltok_ns.c000077500000000000000000000061101211610345200231630ustar00rootroot00000000000000/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* This file is included! */ #ifdef XML_TOK_NS_C const ENCODING * NS(XmlGetUtf8InternalEncoding)(void) { return &ns(internal_utf8_encoding).enc; } const ENCODING * NS(XmlGetUtf16InternalEncoding)(void) { #if BYTEORDER == 1234 return &ns(internal_little2_encoding).enc; #elif BYTEORDER == 4321 return &ns(internal_big2_encoding).enc; #else const short n = 1; return (*(const char *)&n ? &ns(internal_little2_encoding).enc : &ns(internal_big2_encoding).enc); #endif } static const ENCODING * const NS(encodings)[] = { &ns(latin1_encoding).enc, &ns(ascii_encoding).enc, &ns(utf8_encoding).enc, &ns(big2_encoding).enc, &ns(big2_encoding).enc, &ns(little2_encoding).enc, &ns(utf8_encoding).enc /* NO_ENC */ }; static int PTRCALL NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, ptr, end, nextTokPtr); } static int PTRCALL NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, ptr, end, nextTokPtr); } int NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, const char *name) { int i = getEncodingIndex(name); if (i == UNKNOWN_ENC) return 0; SET_INIT_ENC_INDEX(p, i); p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); p->initEnc.updatePosition = initUpdatePosition; p->encPtr = encPtr; *encPtr = &(p->initEnc); return 1; } static const ENCODING * NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) { #define ENCODING_MAX 128 char buf[ENCODING_MAX]; char *p = buf; int i; XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); if (ptr != end) return 0; *p = 0; if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) return enc; i = getEncodingIndex(buf); if (i == UNKNOWN_ENC) return 0; return NS(encodings)[i]; } int NS(XmlParseXmlDecl)(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **versionEndPtr, const char **encodingName, const ENCODING **encoding, int *standalone) { return doParseXmlDecl(NS(findEncoding), isGeneralTextEntity, enc, ptr, end, badPtr, versionPtr, versionEndPtr, encodingName, encoding, standalone); } #endif /* XML_TOK_NS_C */ genometools-1.5.1/src/external/libtecla-1.6.1/000077500000000000000000000000001211610345200206755ustar00rootroot00000000000000genometools-1.5.1/src/external/libtecla-1.6.1/LICENSE.TERMS000066400000000000000000000027551211610345200226040ustar00rootroot00000000000000Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. genometools-1.5.1/src/external/libtecla-1.6.1/README000066400000000000000000000051671211610345200215660ustar00rootroot00000000000000This is version 1.6.1 of the tecla command-line editing library. For the current official release, please direct your browser to: http://www.astro.caltech.edu/~mcs/tecla/index.html The tecla library provides UNIX and LINUX programs with interactive command line editing facilities, similar to those of the unix tcsh shell. In addition to simple command-line editing, it supports recall of previously entered command lines, TAB completion of file names, and in-line wild-card expansion of filenames. The internal functions which perform file-name completion and wild-card expansion are also available externally for optional use by programs, along with a module for tab-completion and lookup of filenames in a list of directories. Note that special care has been taken to allow the use of this library in threaded programs. The option to enable this is discussed in the Makefile, and specific discussions of thread safety are presented in the included man pages. For instructions on how to compile and install the library, please see the INSTALL file, which should be in the same directory as this file. Copyright and Disclaimer ------------------------ Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. genometools-1.5.1/src/external/libtecla-1.6.1/RELEASE.NOTES000066400000000000000000000702031211610345200225710ustar00rootroot00000000000000This file lists major changes which accompany each new release. Version 1.6.1: This is primarily a minor bug-fix release. One added feature is the ability to call gl_normal_io() from callbacks registered by gl_watch_fd() and gl_inactivity_timeout(). This allows these callbacks to cleanly suspend line editing before either reading from the terminal, or writing to the terminal; and then subsequently causes the input line to be automatically redisplayed, and line-editing to be resumed by gl_get_line(), as soon as the callback returns. Another minor change is that if the terminal type specified in the TERM environment variable is set to "dumb", gl_get_line() now treats the terminal as though it were a non-interactive stream, rather than treating it as a VT100-compatible terminal. This means that it doesn't either prompt for input, or perform any command-line editing, even when it really is interacting with a terminal. This is aimed at the rare situation where a third-pary program that connects to libtecla through an embedded pseudo-terminal, needs to be forced to behave as though it weren't talking to a terminal, in order that it be useable in non-interactive scripts. Note that in the previous release, the optional configuration function, gl_tty_signals(), was incorrectly swapping the suspend and terminal signal handlers before installing them. A configuration problem that prevented select() from being used under MacOS X, has been fixed. Although not documented in the man page, it was meant to be possible to take the input line that one call to gl_get_line() returned, and ask the next call to gl_get_line() to present it back to the user for re-editing, simply by passing the pointer returned by one call to gl_get_line() as the start_line argument of the next call to gl_get_line(). This feature unfortunately stopped working in 1.6.0, so this release restores it, and officially documents it in the man page documentation of gl_get_line(). In the previous version of the library, calling gl_terminal_size() on a system without SIGWINCH support, would crash the application. This has been fixed. Libtecla now apparently compiles cleanly under IRIX. Version 1.6.0: This release is primarily a bug-fix release. However there are also four new functions, so the minor version number has been incremented to reflect this. Two of the new functions are gl_automatic_history() and gl_append_history(). The former of these functions allows the application to tell gl_get_line() not to automatically archive entered lines in the history list. The second of these functions allows the application to explicitly append a line to the history list. Thus together, these two functions allow the calling application to take over control of what is placed in the history list. The third new function is gl_query_char(), which prompts the user for a single character reply, which the user can then type without having to hit return to enter it. Unless echoing is disabled, the character that is entered is then displayed after the prompt, and a newline is started. Finally, the 4th new function is gl_read_char(), which also reads a single character from the user, but doesn't prompt the user, write anything to the terminal, or disturb any partially entered input line. It is thus safe to call this function not only from between calls to gl_get_line(), but also from application callback functions, even if gl_normal_io() hasn't been called. When using the history-search-backwards or history-search-forwards actions, if the search prefix that the user typed, contains any of the *,? or [ globbing characters, it is now treated as a glob pattern to be matched against historical lines, instead of a simple prefix. I have added a --without-file-system option to the configure script. This is intended for use in embedded systems that either don't have filesystems, or where the file-system code in libtecla is seen as unwanted bloat. See the INSTALL document for details. Similarly, I also added a --without-file-actions option to the configure script. This allows the application author/installer to prevent users of gl_get_line() from accessing the filesystem with the builtin actions of gl_get_line(). It does this by removing a number of action functions, such as expand-filename, and list-glob, and by changing the default behavior of other actions, such as complete-word and list-or-eof, to show no completions. Now to the bugs that have been fixed. Version 1.5.0 had a lot of big internal changes, so there are a number of bugs that needed to be fixed. There was a bug which caused a crash if gl_load_history() was called multiple times. There was another bug which caused a prompt not to be displayed on the next line after switching from reading input from a file to reading from the terminal. Also, in tecla configuration files, backslash escaped characters within key-binding key-sequences weren't being escaped. Thus ^\\ got interpretted as a control-\ followed by a \ character instead of as a control-\. There was a bug in the history recall mechanism which caused the search prefix to be forgotten in certain complicated usage scenarios. There was a minor memory leak in the gl_configure_getline() function. Finally, if gl_get_line() was aborted by a signal, or any other abnormal event, the value of errno which originally indicated what had happened, got zeroed by the code that restored the terminal to a usable state. Thus the application couldn't figure out what had caused the error, apart from by looking at gl_return_status(). All of these bugs have been fixed. In the Makefile, there were a number of places where install-sh was invoked without a path prefix. This has now been remedied. A fully functional workaround for a bug in Solaris' terminal I/O code has also been implemented. This bug, which only manifested itself in libtecla's uncommonly used non-blocking server I/O mode, caused characters entered while in normal I/O mode, between calls to gl_get_line() to be invisible to the next call to gl_get_line(), until the user typed at least one more key after raw terminal mode was restored. The Gnu autoconf config.guess and config.sub scripts have been updated to their latest versions. Apparently the old versions that I was previously using were too old to know about certain BSD ports. Version 1.5.0: This release includes several major new features for those using gl_get_line(), shared library support in Darwin, better cross compilation support, and various minor bug fixes. The biggest new feature is the option of a non-blocking I/O mode, in which gl_get_line() can safely be called from an application's external event-loop to incrementally read input lines from the user. This feature is documented in the gl_io_mode(3) man page. In addition, there is now support for the definition of additional word-completion action functions, which can then be bound to different keys. See the documentation of the gl_completion_action() function in the gl_get_line(3) man page. Externally defined action functions can also be defined, although presently they don't have write access to the input line, so they are restricted to operations that display information text to the terminal, or modify the environment of the calling application in some way. See the documentation of the gl_register_action() function in the gl_get_line(3) man page. Some of the non-blocking I/O support functions can also be used for improved signal handling in the normal blocking mode. In particular, the gl_list_signals() and gl_catch_blocked() functions make it easier to write reliable signal handling around gl_get_line(). The new "RELIABLE SIGNAL HANDLING" section of the gl_get_line(3) man page is intended as an introduction to this subject. Programs can now clear the terminal between calls to gl_get_line(), by calling the new gl_erase_terminal() function. The gl_display_text() function, now used in the demos to display introductory banners, is provided for formatting text according to the width of the terminal. It is now possible to install inactivity timeout callbacks in gl_get_line(), using the new gl_inactivity_timeout() function. The new gl_set_term_size() function allows the application to explicitly set the terminal size, for cases, such as when one is using a terminal at the end of a serial lineq, where the terminal driver doesn't send the process a SIGWINCH when the terminal size changes. The new gl_bind_keyseq() function provides a convenient alternative to gl_configure_getline(), for binding or unbinding one key-sequence at a time. gl_get_line()s signal handling, file-descriptor event-handling, inactivity-timeout handling and server-mode non-blocking I/O features now not only work when input is coming from a terminal, but now also work when input is coming from non-interactive streams, such as files and pipes. The history implementation has been re-written to make it more efficient and easier to modify. The biggest user-level change is that when recalling history lines using a search prefix, the same line is no longer returned more than once in a row. Previously this duplicate elimination only worked when one was recalling a line without specifying a search prefix, and this was naively performed by preventing neighboring duplicates from existing in the history list, rather than by skipping duplicates at search time. In previous versions of the library, when gl_get_line() and its associated public functions detected invalid arguments, or couldn't allocate memory, etc, error messages were written to stderr. This isn't appropriate for library functions, so instead of writing such messages to stderr, these messages are now recorded in buffers within the affected GetLine object. The latest error message can then subsequently be queried by calling gl_error_message(). The use of errno has also been expanded, and a new function called gl_return_status() has been provided to expand on the cause of the last return from gl_get_line(). User level usage and configuration information has now been split out of the gl_get_line(3) man page into a separate tecla(7) man page. The enhance(3) man page has also been renamed to enhance(1). When expanding "~/", gl_get_line() now checks for, and returns the value of the HOME environment variable, if it exists, in preference to looking up the directory of the current user in the password file. When the terminal was resized to a narrower width, previous versions of gl_get_line() would redraw the line higher up the terminal. This bug has been fixed. A bug in history recall has also been fixed, in which an error message was being generated if one attempted to recall a line while the cursor was at the end of the longest possible input line. A more serious bug, in which callbacks registered by gl_watch_fd() weren't being called for write-events, has also been fixed. Finally, a few minor fixes have been made to improve support under QNX and Mac OS X. Beware that in this release, much of the underlying code has undergone some radical re-work, so although backwards compatibility of all documented features has been preserved, there may be some lingering bugs that could break existing programs. So, if you plan to use this version in production code, please test it as far as possible within your application before releasing it to your clients, and as always, please report any unexpected behavior. Version 1.4.1: This is a maintenance release. It includes minor changes to support Mac OS X (Darwin), the QNX real-time operating system, and Cygwin under Windows. It also fixes an oversight that was preventing the tab key from inserting tab characters when users unbound the complete-word action from it. Version 1.4.0: The contents of the history list can now be saved and restored with the new gl_save_history() and gl_load_history() functions. Event handlers can now be registered to watch for and respond to I/O on arbitrary file descriptors while gl_get_line() is waiting for terminal input from the user. See the gl_get_line(3) man page for details on gl_watch_fd(). As an optional alternative to getting configuration information only from ~/.teclarc, the new gl_configure_getline() function allows configuration commands to be taken from any of, a string, a specified application-specific file, and/or a specified user-specific file. See the gl_get_line(3) man page for details. The version number of the library can now be queried using the libtecla_version() function. See the libtecla(3) man page. The new gl_group_history() function allows applications to group different types of input line in the history buffer, and arrange for only members of the appropriate group to be recalled on a given call to gl_get_line(). See the gl_get_line(3) man page. The new gl_show_history() function displays the current history list to a given stdio output stream. See the gl_get_line(3) man page. new_GetLine() now allows you to specify a history buffer size of zero, thus requesting that no history buffer be allocated. You can subsequently resize or delete the history buffer at any time, by calling gl_resize_history(), limit the number of lines that are allowed in the buffer by calling gl_limit_history(), clear either all history lines from the history list, or just the history lines that are associated with the current history group, by calling gl_clear_history, and toggle the history mechanism on and off by calling gl_toggle_history(). The new gl_terminal_size() function can be used to query the current terminal size. It can also be used to supply a default terminal size on systems where no mechanism is available for looking up the size. The contents and configuration of the history list can now be obtained by the calling application, by calling the new gl_lookup_history(), gl_state_of_history(), gl_range_of_history() and gl_size_of_history() functions. See the gl_get_line(3) man page. Echoing of the input line as it is typed, can now be turned on and off via the new gl_echo_mode() function. While echoing is disabled, newly entered input lines are omitted from the history list. See the gl_get_line(3) man page. While the default remains to display the prompt string literally, the new gl_prompt_style() function can be used to enable text attribute formatting directives in prompt strings, such as underlining, bold font, and highlighting directives. Signal handling in gl_get_line() is now customizable. The default signal handling behavior remains essentially the same, except that the SIGTSTP, SIGTTIN and SIGTTOU are now forwarded to the corresponding signal handler of the calling program, instead of causing a SIGSTOP to be sent to the application. It is now possible to remove signals from the list that are trapped by gl_get_line(), as well as add new signals to this list. The signal and terminal environments in which the signal handler of the calling program is invoked, and what gl_get_line() does after the signal handler returns, is now customizable on a per signal basis. You can now also query the last signal that was caught by gl_get_line(). This is useful when gl_get_line() aborts with errno=EINTR, and you need to know which signal caused it to abort. Key-sequences bound to action functions can now start with printable characters. Previously only keysequences starting with control or meta characters were permitted. gl_get_line() is now 8-bit clean. If the calling program has correctly called setlocale(LC_CTYPE,""), then the user can select an alternate locale by setting the standard LC_CTYPE, LC_ALL, or LANG environment variables, and international characters can then be entered directly, either by using a non-US keyboard, or by using a compose key on a standard US keyboard. Note that in locales in which meta characters become printable, meta characters no longer match M-c bindings, which then have to be entered using their escape-c equivalents. Fortunately most modern terminal emulators either output the escape-c version by default when the meta key is used, or can be configured to do so (see the gl_get_line(3) man page), so in most cases you can continue to use the meta key. Completion callback functions can now tell gl_get_line() to return the input line immediately after a successful tab completion, simply by setting the last character of the optional continuation suffix to a newline character (ie. in the call to cpl_add_completion()). It is now safe to create and use multiple GetLine objects, albeit still only from a single thread. In conjunction with the new gl_configure_getline() function, this optionally allows multiple GetLine objects with different bindings to be used to implement different input modes. The edit-mode configuration command now accepts the argument, none. This tells gl_get_line() to revert to using just the native line editing facilities provided by the terminal driver. This could be used if the termcap or terminfo entry of the host terminal were badly corrupted. Application callback functions invoked by gl_get_line() can now change the displayed prompt using the gl_replace_prompt() function. Their is now an optional program distributed with the library. This is a beta release of a program which adds tecla command-line editing to virtually any third party application without the application needing to be linked to the library. See the enhance(3) man page for further details. Although built and installed by default, the INSTALL document explains how to prevent this. The INSTALL document now explains how you can stop the demo programs from being built and installed. NetBSD/termcap fixes. Mike MacFaden reported two problems that he saw when compiling libtecla under NetBSD. Both cases were related to the use of termcap. Most systems use terminfo, so this problem has gone unnoticed until now, and won't have affected the grand majority of users. The configure script had a bug which prevented the check for CPP working properly, and getline.c wouldn't compile due to an undeclared variable when USE_TERMCAP was defined. Both problems have now been fixed. Note that if you successfully compiled version 1.3.3, this problem didn't affect you. An unfortunate and undocumented binding of the key-sequence M-O was shadowing the arrow-key bindings on systems that use ^[OA etc. I have removed this binding (the documented lower case M-o binding remains bound). Under the KDE konsole terminal this was causing the arrow keys to do something other than expected. There was a bug in the history list code which could result in strange entries appearing at the start of the history list once enough history lines had been added to the list to cause the circular history buffer to wrap. This is now fixed. Version 1.3.3: Signal handling has been re-written, and documentation of its behaviour has been added to the gl_get_line(3) man page. In addition to eliminating race conditions, and appropriately setting errno for those signals that abort gl_get_line(), many more signals are now intercepted, making it less likely that the terminal will be left in raw mode by a signal that isn't trapped by gl_get_line(). A bug was also fixed that was leaving the terminal in raw mode if the editing mode was changed interactively between vi and emacs. This was only noticeable when running programs from old shells that don't reset terminal modes. Version 1.3.2: Tim Eliseo contributed a number of improvements to vi mode, including a fuller set of vi key-bindings, implementation of the vi constraint that the cursor can't backup past the point at which input mode was entered, and restoration of overwritten characters when backspacing in overwrite mode. There are also now new bindings to allow users to toggle between vi and emacs modes interactively. The terminal bell is now used in some circumstances, such as when an unrecognized key sequence is entered. This can be turned off by the new nobeep option in the tecla configuration file. Unrelated to the above, a problem under Linux which prevented ^Q from being used to resume terminal output after the user had pressed ^S, has been fixed. Version 1.3.1: In vi mode a bug was preventing the history-search-backward and history-search-forward actions from doing anything when invoked on empty lines. On empty lines they now act like up-history and down-history respectively, as in emacs mode. When creating shared libraries under Linux, the -soname directive was being used incorrectly. The result is that Linux binaries linked with the 1.2.3, 1.2.4 and 1.3.0 versions of the tecla shared libraries, will refuse to see other versions of the shared library until relinked with version 1.3.1 or higher. The configure script can now handle the fact that under Solaris-2.6 and earlier, the only curses library is a static one that hides in /usr/ccs/lib. Under Linux it now also caters for old versions of GNU ld which don't accept version scripts. The demos are now linked against the shared version of the library if possible. Previously they were always linked with the static version. Version 1.3.0: The major change in this release is the addition of an optional vi command-line editing mode in gl_get_line(), along with lots of new action functions to support its bindings. To enable this, first create a ~/.teclarc file if you don't already have one, then add the following line to it. edit-mode vi The default vi bindings, which are designed to mimic those of the vi editor as closely as possible, are described in the gl_get_line(3) man page. A new convenience function called ef_list_expansions() has been added for listing filename expansions. See the ef_list_expansions(3) man page for details. This is used in a new list-glob binding, bound to ^Xg in emacs mode, and ^G in vi input mode. A bug has been fixed in the key-binding table expansion code. This bug would have caused problems to anybody who defined more than about 18 personalized key-bindings in their ~/.teclarc file. Version 1.2.4: Buffered I/O is now used for writing to terminals, and where supported, cursor motion is done with move-n-positions terminfo capabilities instead of doing lots of move-1-position requests. This greatly improves how the library feels over slow links. You can now optionally compile different architectures in different directories, without having to make multiple copies of the distribution. This is documented in the INSTALL file. The ksh ~+ directive is now supported. Thanks to Markus Gyger for the above improvements. Documentation has been added to the INSTALL file describing features designed to facilitate configuration and installation of the library as part of larger packages. These features are intended to remove the need to modify the tecla distribution's configuration and build procedures when embedding the libtecla distribution in other package distributions. A previous fix to stop the cursor from warping when the last character of the input line was in the last column of the terminal, was only being used for the first terminal line of the input line. It is now used for all subsequent lines as well, as originally intended. Version 1.2.3: The installation procedure has been better automated with the addition of an autoconf configure script. This means that installers can now compile and install the library by typing: ./configure make make install On all systems this makes at least the normal static version of the tecla library. It also makes the reentrant version if reentrant POSIX functions are detected. Under Solaris, Linux and HP-UX the configuration script arranges for shared libraries to be compiled in addition to the static libraries. It is hoped that installers will return information about how to compile shared libraries on other systems, for inclusion in future releases, and to this end, a new PORTING guide has been provided. The versioning number scheme has been changed. This release would have been 1.2c, but instead will be refered to as 1.2.3. The versioning scheme, based on conventions used by Sun Microsystems, is described in configure.in. The library was also tested under HP-UX, and this revealed two serious bugs, both of which have now been fixed. The first bug prevented the library from writing control codes to terminals on big-endian machines, with the exception of those running under Solaris. This was due to an int variable being used where a char was needed. The second bug had the symptom that on systems that don't use the newline character as the control code for moving the cursor down a line, a newline wasn't started when the user hit enter. Version 1.2b: Two more minor bug fixes: Many terminals don't wrap the cursor to the next line when a character is written to the rightmost terminal column. Instead, they delay starting a new line until one more character is written, at which point they move the cursor two positions. gl_get_line() wasn't aware of this, so cursor repositionings just after writing the last character of a column, caused it to erroneously go up a line. This has now been remedied, using a method that should work regardless of whether a terminal exhibits this behavior or not. Some systems dynamically record the current terminal dimensions in environment variables called LINES and COLUMNS. On such systems, during the initial terminal setup, these values should override the static values read from the terminal information databases, and now do. Previously they were only used if the dimensions returned by terminfo/termcap looked bogus. Version 1.2a: This minor release fixes the following two bugs: The initial terminal size and subsequent changes thereto, weren't being noticed by gl_get_line(). This was because the test for the existence of TIOCWINSZ was erroneously placed before the inclusion of termios.h. One of the results was that on input lines that spanned more than one terminal line, the cursor occasionally jumped unexpectedly to the previous terminal line. On entering a line that wrapped over multiple terminal lines, gl_get_line() simply output a carriage-return line-feed at the point at which the user pressed return. Thus if one typed in such a line, then moved back onto one of the earlier terminal lines before hitting return, the cursor was left on a line containing part of the line that had just been entered. This didn't do any harm, but it looked a mess. Version 1.2: A new facility for looking up and completing filenames in UNIX-style paths has now been added (eg. you can search for, or complete commands using the UNIX PATH environment variable). See the pca_lookup_file(3) man page. The already existing filename completion callback can now be made selective in what types of files it lists. See the cpl_complete_word(3) man page. Due to its potential to break applications when changed, the use of the publically defined CplFileArgs structure to configure the cpl_file_completions() callback is now deprecated. The definition of this structure has been frozen, and its documentation has been removed from the man pages. It will remain supported, but if you have used it, you are recommended to switch to the new method, which involves a new opaque configuration object, allocated via a provided constructor function, configured via accessor functions, and eventually deleted with a provided destructor function. The cpl_file_completions() callback distinguishes which structure type it has been sent by virtue of a code placed at the start of the new structure by the constructor. It is assumed that no existing applications set the boolean 'escaped' member of the CplFileArgs structure to 4568. The new method is documented in the cpl_complete_word(3) man page. Version 1.1j This was the initial public release on freshmeat.org. genometools-1.5.1/src/external/libtecla-1.6.1/chrqueue.c000066400000000000000000000332711211610345200226700ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include #include "ioutil.h" #include "chrqueue.h" #include "freelist.h" #include "errmsg.h" /* * Set the number of bytes allocated to each node of the list of * character buffers. This facility is designed principally as * an expandible I/O output buffer, so use the stdio buffer size * where available. */ #ifdef BUFSIZ #define GL_CQ_SIZE BUFSIZ #else #define GL_CQ_SIZE 512 #endif /* * The queue is contained in a list of fixed sized buffers. New nodes * are appended to this list as needed to accomodate newly added bytes. * Old nodes at the head of the list are removed as they are emptied. */ typedef struct CqCharBuff CqCharBuff; struct CqCharBuff { CqCharBuff *next; /* The next node in the list of buffers */ char bytes[GL_CQ_SIZE]; /* The fixed size buffer of this node */ }; /* * Define the structure that is used to contain a list of character * buffers. */ struct GlCharQueue { ErrMsg *err; /* A buffer in which to record error messages */ FreeList *bufmem; /* A free-list of CqCharBuff structures */ struct { CqCharBuff *head; /* The head of the list of output buffers */ CqCharBuff *tail; /* The tail of the list of output buffers */ } buffers; int nflush; /* The total number of characters that have been */ /* flushed from the start of the queue since */ /* _glq_empty_queue() was last called. */ int ntotal; /* The total number of characters that have been */ /* appended to the queue since _glq_empty_queue() */ /* was last called. */ }; /*....................................................................... * Create a new GlCharQueue object. * * Output: * return GlCharQueue * The new object, or NULL on error. */ GlCharQueue *_new_GlCharQueue(void) { GlCharQueue *cq; /* The object to be returned */ /* * Allocate the container. */ cq = malloc(sizeof(GlCharQueue)); if(!cq) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_GlCharQueue(). */ cq->err = NULL; cq->bufmem = NULL; cq->buffers.head = NULL; cq->buffers.tail = NULL; cq->nflush = cq->ntotal = 0; /* * Allocate a place to record error messages. */ cq->err = _new_ErrMsg(); if(!cq->err) return _del_GlCharQueue(cq); /* * Allocate the freelist of CqCharBuff structures. */ cq->bufmem = _new_FreeList(sizeof(CqCharBuff), 1); if(!cq->bufmem) return _del_GlCharQueue(cq); return cq; } /*....................................................................... * Delete a GlCharQueue object. * * Input: * cq GlCharQueue * The object to be deleted. * Output: * return GlCharQueue * The deleted object (always NULL). */ GlCharQueue *_del_GlCharQueue(GlCharQueue *cq) { if(cq) { cq->err = _del_ErrMsg(cq->err); cq->bufmem = _del_FreeList(cq->bufmem, 1); free(cq); }; return NULL; } /*....................................................................... * Append an array of n characters to a character queue. * * Input: * cq GlCharQueue * The queue to append to. * chars const char * The array of n characters to be appended. * n int The number of characters in chars[]. * write_fn GL_WRITE_FN * The function to call to output characters, * or 0 to simply discard the contents of the * queue. This will be called whenever the * buffer becomes full. If it fails to release * any space, the buffer will be extended. * data void * Anonymous data to pass to write_fn(). * Output: * return int The number of characters successfully * appended. This will only be < n on error. */ int _glq_append_chars(GlCharQueue *cq, const char *chars, int n, GlWriteFn *write_fn, void *data) { int ndone = 0; /* The number of characters appended so far */ /* * Check the arguments. */ if(!cq || !chars) { errno = EINVAL; return 0; }; /* * The appended characters may have to be split between multiple * buffers, so loop for each buffer. */ while(ndone < n) { int ntodo; /* The number of characters remaining to be appended */ int nleft; /* The amount of space remaining in cq->buffers.tail */ int nnew; /* The number of characters to append to cq->buffers.tail */ /* * Compute the offset at which the next character should be written * into the tail buffer segment. */ int boff = cq->ntotal % GL_CQ_SIZE; /* * Since we don't allocate a new buffer until we have at least one * character to write into it, if boff is 0 at this point, it means * that we hit the end of the tail buffer segment on the last append, * so we need to allocate a new one. * * If allocating this new node will require a call to malloc(), as * opposed to using a currently unused node in the freelist, first try * flushing the current contents of the buffer to the terminal. When * write_fn() uses blocking I/O, this stops the buffer size ever getting * bigger than a single buffer node. When it is non-blocking, it helps * to keep the amount of memory, but it isn't gauranteed to do so. */ if(boff == 0 && _idle_FreeListNodes(cq->bufmem) == 0) { switch(_glq_flush_queue(cq, write_fn, data)) { case GLQ_FLUSH_DONE: break; case GLQ_FLUSH_AGAIN: errno = 0; /* Don't confuse the caller */ break; default: return ndone; /* Error */ }; boff = cq->ntotal % GL_CQ_SIZE; }; /* * Since we don't allocate a new buffer until we have at least one * character to write into it, if boff is 0 at this point, it means * that we hit the end of the tail buffer segment on the last append, * so we need to allocate a new one. */ if(boff == 0) { /* * Allocate the new node. */ CqCharBuff *node = (CqCharBuff *) _new_FreeListNode(cq->bufmem); if(!node) { _err_record_msg(cq->err, "Insufficient memory to buffer output.", END_ERR_MSG); return ndone; }; /* * Initialize the node. */ node->next = NULL; /* * Append the new node to the tail of the list. */ if(cq->buffers.tail) cq->buffers.tail->next = node; else cq->buffers.head = node; cq->buffers.tail = node; }; /* * How much room is there for new characters in the current tail node? */ nleft = GL_CQ_SIZE - boff; /* * How many characters remain to be appended? */ ntodo = n - ndone; /* * How many characters should we append to the current tail node? */ nnew = nleft < ntodo ? nleft : ntodo; /* * Append the latest prefix of nnew characters. */ memcpy(cq->buffers.tail->bytes + boff, chars + ndone, nnew); cq->ntotal += nnew; ndone += nnew; }; /* * Return the count of the number of characters successfully appended. */ return ndone; } /*....................................................................... * Discard the contents of a queue of characters. * * Input: * cq GlCharQueue * The queue to clear. */ void _glq_empty_queue(GlCharQueue *cq) { if(cq) { /* * Return all list nodes to their respective free-lists. */ _rst_FreeList(cq->bufmem); /* * Mark the lists as empty. */ cq->buffers.head = cq->buffers.tail = NULL; cq->nflush = cq->ntotal = 0; }; } /*....................................................................... * Return a count of the number of characters currently in the queue. * * Input: * cq GlCharQueue * The queue of interest. * Output: * return int The number of characters in the queue. */ int _glq_char_count(GlCharQueue *cq) { return (cq && cq->buffers.head) ? (cq->ntotal - cq->nflush) : 0; } /*....................................................................... * Write as many characters as possible from the start of a character * queue via a given output callback function, removing those written * from the queue. * * Input: * cq GlCharQueue * The queue to write characters from. * write_fn GL_WRITE_FN * The function to call to output characters, * or 0 to simply discard the contents of the * queue. * data void * Anonymous data to pass to write_fn(). * Output: * return GlFlushState The status of the flush operation: * GLQ_FLUSH_DONE - The flush operation * completed successfully. * GLQ_FLUSH_AGAIN - The flush operation * couldn't be completed * on this call. Call this * function again when the * output channel can accept * further output. * GLQ_FLUSH_ERROR Unrecoverable error. */ GlqFlushState _glq_flush_queue(GlCharQueue *cq, GlWriteFn *write_fn, void *data) { /* * Check the arguments. */ if(!cq) { errno = EINVAL; return GLQ_FLUSH_ERROR; }; /* * If possible keep writing until all of the chained buffers have been * emptied and removed from the list. */ while(cq->buffers.head) { /* * Are we looking at the only node in the list? */ int is_tail = cq->buffers.head == cq->buffers.tail; /* * How many characters more than an exact multiple of the buffer-segment * size have been added to the buffer so far? */ int nmodulo = cq->ntotal % GL_CQ_SIZE; /* * How many characters of the buffer segment at the head of the list * have been used? Note that this includes any characters that have * already been flushed. Also note that if nmodulo==0, this means that * the tail buffer segment is full. The reason for this is that we * don't allocate new tail buffer segments until there is at least one * character to be added to them. */ int nhead = (!is_tail || nmodulo == 0) ? GL_CQ_SIZE : nmodulo; /* * How many characters remain to be flushed from the buffer * at the head of the list? */ int nbuff = nhead - (cq->nflush % GL_CQ_SIZE); /* * Attempt to write this number. */ int nnew = write_fn(data, cq->buffers.head->bytes + cq->nflush % GL_CQ_SIZE, nbuff); /* * Was anything written? */ if(nnew > 0) { /* * Increment the count of the number of characters that have * been flushed from the head of the queue. */ cq->nflush += nnew; /* * If we succeded in writing all of the contents of the current * buffer segment, remove it from the queue. */ if(nnew == nbuff) { /* * If we just emptied the last node left in the list, then the queue is * now empty and should be reset. */ if(is_tail) { _glq_empty_queue(cq); } else { /* * Get the node to be removed from the head of the list. */ CqCharBuff *node = cq->buffers.head; /* * Make the node that follows it the new head of the queue. */ cq->buffers.head = node->next; /* * Return it to the freelist. */ node = (CqCharBuff *) _del_FreeListNode(cq->bufmem, node); }; }; /* * If the write blocked, request that this function be called again * when space to write next becomes available. */ } else if(nnew==0) { return GLQ_FLUSH_AGAIN; /* * I/O error. */ } else { _err_record_msg(cq->err, "Error writing to terminal", END_ERR_MSG); return GLQ_FLUSH_ERROR; }; }; /* * To get here the queue must now be empty. */ return GLQ_FLUSH_DONE; } /*....................................................................... * Return extra information (ie. in addition to that provided by errno) * about the last error to occur in any of the public functions of this * module. * * Input: * cq GlCharQueue * The container of the history list. * Output: * return const char * A pointer to the internal buffer in which * the error message is temporarily stored. */ const char *_glq_last_error(GlCharQueue *cq) { return cq ? _err_get_msg(cq->err) : "NULL GlCharQueue argument"; } genometools-1.5.1/src/external/libtecla-1.6.1/chrqueue.h000066400000000000000000000074371211610345200227020ustar00rootroot00000000000000#ifndef chrqueue_h #define chrqueue_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /*----------------------------------------------------------------------- * This module implements a queue of characters to be processed in some * way. It is used by gl_get_line() to maintain a queue of characters * to be sent to a remote terminal. Characters are recorded in a * dynamically extensible list of fixed sized buffers. */ typedef struct GlCharQueue GlCharQueue; /* * Create a new character queue. */ GlCharQueue *_new_GlCharQueue(void); /* * Delete a redundant character queue. */ GlCharQueue *_del_GlCharQueue(GlCharQueue *cq); /* * Append an array of n characters to a character queue. */ int _glq_append_chars(GlCharQueue *cq, const char *chars, int n, GlWriteFn *write_fn, void *data); /* * Clear a character queue. */ void _glq_empty_queue(GlCharQueue *cq); /* * Return a count of the number of characters in the queue. */ int _glq_char_count(GlCharQueue *cq); /* * A structure of the following type is used by _glq_peek_chars() to * return characters at the start of the queue. */ typedef struct { const char *buff; /* A pointer to the first undeleted byte in the */ /* first buffer of the queue. */ int nbuff; /* The number of characters in buff[] */ } GlCharQueueBuff; /* * Enumerator values of the following type are returned by * _glq_flush_queue() to indicate the status of the flush operation. */ typedef enum { GLQ_FLUSH_DONE, /* The flush operation completed successfully */ GLQ_FLUSH_AGAIN, /* The flush operation couldn't be completed on this */ /* call. Call this function again when the output */ /* channel can accept further output. */ GLQ_FLUSH_ERROR /* Unrecoverable error. */ } GlqFlushState; /* * Transfer as much of the contents of a character queue to an output * channel as possible, returning before the queue is empty if the * write_fn() callback says that it can't currently write anymore. */ GlqFlushState _glq_flush_queue(GlCharQueue *cq, GlWriteFn *write_fn, void *data); /* * Provide information about the last error that occurred while calling * any of the above functions. */ const char *_glq_last_error(GlCharQueue *cq); #endif genometools-1.5.1/src/external/libtecla-1.6.1/cplfile.c000066400000000000000000000702671211610345200224730ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * If file-system access is to be excluded, this module has no function, * so all of its code should be excluded. */ #ifndef WITHOUT_FILE_SYSTEM /* * Standard includes. */ #include #include #include #include #include #include /* * Local includes. */ #include "libtecla.h" #include "direader.h" #include "homedir.h" #include "pathutil.h" #include "cplfile.h" #include "errmsg.h" /* * Set the maximum length allowed for usernames. * names. */ #define USR_LEN 100 /* * Set the maximum length allowed for environment variable names. */ #define ENV_LEN 100 /* * The resources needed to complete a filename are maintained in objects * of the following type. */ struct CompleteFile { ErrMsg *err; /* The error reporting buffer */ DirReader *dr; /* A directory reader */ HomeDir *home; /* A home directory expander */ PathName *path; /* The buffer in which to accumulate the path */ PathName *buff; /* A pathname work buffer */ char usrnam[USR_LEN+1]; /* The buffer used when reading the names of */ /* users. */ char envnam[ENV_LEN+1]; /* The buffer used when reading the names of */ /* environment variables. */ }; static int cf_expand_home_dir(CompleteFile *cf, const char *user); static int cf_complete_username(CompleteFile *cf, WordCompletion *cpl, const char *prefix, const char *line, int word_start, int word_end, int escaped); static HOME_DIR_FN(cf_homedir_callback); static int cf_complete_entry(CompleteFile *cf, WordCompletion *cpl, const char *line, int word_start, int word_end, int escaped, CplCheckFn *check_fn, void *check_data); static char *cf_read_name(CompleteFile *cf, const char *type, const char *string, int slen, char *nambuf, int nammax); static int cf_prepare_suffix(CompleteFile *cf, const char *suffix, int add_escapes); /* * A stack based object of the following type is used to pass data to the * cf_homedir_callback() function. */ typedef struct { CompleteFile *cf; /* The file-completion resource object */ WordCompletion *cpl; /* The string-completion rsource object */ size_t prefix_len; /* The length of the prefix being completed */ const char *line; /* The line from which the prefix was extracted */ int word_start; /* The index in line[] of the start of the username */ int word_end; /* The index in line[] following the end of the prefix */ int escaped; /* If true, add escapes to the completion suffixes */ } CfHomeArgs; /*....................................................................... * Create a new file-completion object. * * Output: * return CompleteFile * The new object, or NULL on error. */ CompleteFile *_new_CompleteFile(void) { CompleteFile *cf; /* The object to be returned */ /* * Allocate the container. */ cf = (CompleteFile *) malloc(sizeof(CompleteFile)); if(!cf) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to _del_CompleteFile(). */ cf->err = NULL; cf->dr = NULL; cf->home = NULL; cf->path = NULL; cf->buff = NULL; cf->usrnam[0] = '\0'; cf->envnam[0] = '\0'; /* * Allocate a place to record error messages. */ cf->err = _new_ErrMsg(); if(!cf->err) return _del_CompleteFile(cf); /* * Create the object that is used for reading directories. */ cf->dr = _new_DirReader(); if(!cf->dr) return _del_CompleteFile(cf); /* * Create the object that is used to lookup home directories. */ cf->home = _new_HomeDir(); if(!cf->home) return _del_CompleteFile(cf); /* * Create the buffer in which the completed pathname is accumulated. */ cf->path = _new_PathName(); if(!cf->path) return _del_CompleteFile(cf); /* * Create a pathname work buffer. */ cf->buff = _new_PathName(); if(!cf->buff) return _del_CompleteFile(cf); return cf; } /*....................................................................... * Delete a file-completion object. * * Input: * cf CompleteFile * The object to be deleted. * Output: * return CompleteFile * The deleted object (always NULL). */ CompleteFile *_del_CompleteFile(CompleteFile *cf) { if(cf) { cf->err = _del_ErrMsg(cf->err); cf->dr = _del_DirReader(cf->dr); cf->home = _del_HomeDir(cf->home); cf->path = _del_PathName(cf->path); cf->buff = _del_PathName(cf->buff); free(cf); }; return NULL; } /*....................................................................... * Look up the possible completions of the incomplete filename that * lies between specified indexes of a given command-line string. * * Input: * cpl WordCompletion * The object in which to record the completions. * cf CompleteFile * The filename-completion resource object. * line const char * The string containing the incomplete filename. * word_start int The index of the first character in line[] * of the incomplete filename. * word_end int The index of the character in line[] that * follows the last character of the incomplete * filename. * escaped int If true, backslashes in line[] are * interpreted as escaping the characters * that follow them, and any spaces, tabs, * backslashes, or wildcard characters in the * returned suffixes will be similarly escaped. * If false, backslashes will be interpreted as * literal parts of the file name, and no * backslashes will be added to the returned * suffixes. * check_fn CplCheckFn * If not zero, this argument specifies a * function to call to ask whether a given * file should be included in the list * of completions. * check_data void * Anonymous data to be passed to check_fn(). * Output: * return int 0 - OK. * 1 - Error. A description of the error can be * acquired by calling _cf_last_error(cf). */ int _cf_complete_file(WordCompletion *cpl, CompleteFile *cf, const char *line, int word_start, int word_end, int escaped, CplCheckFn *check_fn, void *check_data) { const char *lptr; /* A pointer into line[] */ int nleft; /* The number of characters still to be processed */ /* in line[]. */ /* * Check the arguments. */ if(!cpl || !cf || !line || word_end < word_start) { if(cf) { _err_record_msg(cf->err, "_cf_complete_file: Invalid arguments", END_ERR_MSG); }; return 1; }; /* * Clear the buffer in which the filename will be constructed. */ _pn_clear_path(cf->path); /* * How many characters are to be processed? */ nleft = word_end - word_start; /* * Get a pointer to the start of the incomplete filename. */ lptr = line + word_start; /* * If the first character is a tilde, then perform home-directory * interpolation. */ if(nleft > 0 && *lptr == '~') { int slen; if(!cf_read_name(cf, "User", ++lptr, --nleft, cf->usrnam, USR_LEN)) return 1; /* * Advance over the username in the input line. */ slen = strlen(cf->usrnam); lptr += slen; nleft -= slen; /* * If we haven't hit the end of the input string then we have a complete * username to translate to the corresponding home directory. */ if(nleft > 0) { if(cf_expand_home_dir(cf, cf->usrnam)) return 1; /* * ~user and ~ are usually followed by a directory separator to * separate them from the file contained in the home directory. * If the home directory is the root directory, then we don't want * to follow the home directory by a directory separator, so we should * skip over it so that it doesn't get copied into the filename. */ if(strcmp(cf->path->name, FS_ROOT_DIR) == 0 && strncmp(lptr, FS_DIR_SEP, FS_DIR_SEP_LEN) == 0) { lptr += FS_DIR_SEP_LEN; nleft -= FS_DIR_SEP_LEN; }; /* * If we have reached the end of the input string, then the username * may be incomplete, and we should attempt to complete it. */ } else { /* * Look up the possible completions of the username. */ return cf_complete_username(cf, cpl, cf->usrnam, line, word_start+1, word_end, escaped); }; }; /* * Copy the rest of the path, stopping to expand $envvar expressions * where encountered. */ while(nleft > 0) { int seglen; /* The length of the next segment to be copied */ /* * Find the length of the next segment to be copied, stopping if an * unescaped '$' is seen, or the end of the path is reached. */ for(seglen=0; seglen < nleft; seglen++) { int c = lptr[seglen]; if(escaped && c == '\\') seglen++; else if(c == '$') break; /* * We will be completing the last component of the file name, * so whenever a directory separator is seen, assume that it * might be the start of the last component, and mark the character * that follows it as the start of the name that is to be completed. */ if(nleft >= FS_DIR_SEP_LEN && strncmp(lptr + seglen, FS_DIR_SEP, FS_DIR_SEP_LEN)==0) { word_start = (lptr + seglen) - line + FS_DIR_SEP_LEN; }; }; /* * We have reached either the end of the filename or the start of * $environment_variable expression. Record the newly checked * segment of the filename in the output filename, removing * backslash-escapes where needed. */ if(_pn_append_to_path(cf->path, lptr, seglen, escaped) == NULL) { _err_record_msg(cf->err, "Insufficient memory to complete filename", END_ERR_MSG); return 1; }; lptr += seglen; nleft -= seglen; /* * If the above loop finished before we hit the end of the filename, * then this was because an unescaped $ was seen. In this case, interpolate * the value of the environment variable that follows it into the output * filename. */ if(nleft > 0) { char *value; /* The value of the environment variable */ int vlen; /* The length of the value string */ int nlen; /* The length of the environment variable name */ /* * Read the name of the environment variable. */ if(!cf_read_name(cf, "Environment", ++lptr, --nleft, cf->envnam, ENV_LEN)) return 1; /* * Advance over the environment variable name in the input line. */ nlen = strlen(cf->envnam); lptr += nlen; nleft -= nlen; /* * Get the value of the environment variable. */ value = getenv(cf->envnam); if(!value) { _err_record_msg(cf->err, "Unknown environment variable: ", cf->envnam, END_ERR_MSG); return 1; }; vlen = strlen(value); /* * If we are at the start of the filename and the first character of the * environment variable value is a '~', attempt home-directory * interpolation. */ if(cf->path->name[0] == '\0' && value[0] == '~') { if(!cf_read_name(cf, "User", value+1, vlen-1, cf->usrnam, USR_LEN) || cf_expand_home_dir(cf, cf->usrnam)) return 1; /* * If the home directory is the root directory, and the ~usrname expression * was followed by a directory separator, prevent the directory separator * from being appended to the root directory by skipping it in the * input line. */ if(strcmp(cf->path->name, FS_ROOT_DIR) == 0 && strncmp(lptr, FS_DIR_SEP, FS_DIR_SEP_LEN) == 0) { lptr += FS_DIR_SEP_LEN; nleft -= FS_DIR_SEP_LEN; }; } else { /* * Append the value of the environment variable to the output path. */ if(_pn_append_to_path(cf->path, value, strlen(value), escaped)==NULL) { _err_record_msg(cf->err, "Insufficient memory to complete filename", END_ERR_MSG); return 1; }; /* * Prevent extra directory separators from being added. */ if(nleft >= FS_DIR_SEP_LEN && strcmp(cf->path->name, FS_ROOT_DIR) == 0 && strncmp(lptr, FS_DIR_SEP, FS_DIR_SEP_LEN) == 0) { lptr += FS_DIR_SEP_LEN; nleft -= FS_DIR_SEP_LEN; } else if(vlen > FS_DIR_SEP_LEN && strcmp(value + vlen - FS_DIR_SEP_LEN, FS_DIR_SEP)==0) { cf->path->name[vlen-FS_DIR_SEP_LEN] = '\0'; }; }; /* * If adding the environment variable didn't form a valid directory, * we can't complete the line, since there is no way to separate append * a partial filename to an environment variable reference without * that appended part of the name being seen later as part of the * environment variable name. Thus if the currently constructed path * isn't a directory, quite now with no completions having been * registered. */ if(!_pu_path_is_dir(cf->path->name)) return 0; /* * For the reasons given above, if we have reached the end of the filename * with the expansion of an environment variable, the only allowed * completion involves the addition of a directory separator. */ if(nleft == 0) { if(cpl_add_completion(cpl, line, lptr-line, word_end, FS_DIR_SEP, "", "")) { _err_record_msg(cf->err, cpl_last_error(cpl), END_ERR_MSG); return 1; }; return 0; }; }; }; /* * Complete the filename if possible. */ return cf_complete_entry(cf, cpl, line, word_start, word_end, escaped, check_fn, check_data); } /*....................................................................... * Return a description of the last path-completion error that occurred. * * Input: * cf CompleteFile * The path-completion resource object. * Output: * return const char * The description of the last error. */ const char *_cf_last_error(CompleteFile *cf) { return cf ? _err_get_msg(cf->err) : "NULL CompleteFile argument"; } /*....................................................................... * Lookup the home directory of the specified user, or the current user * if no name is specified, appending it to output pathname. * * Input: * cf CompleteFile * The pathname completion resource object. * user const char * The username to lookup, or "" to lookup the * current user. * Output: * return int 0 - OK. * 1 - Error. */ static int cf_expand_home_dir(CompleteFile *cf, const char *user) { /* * Attempt to lookup the home directory. */ const char *home_dir = _hd_lookup_home_dir(cf->home, user); /* * Failed? */ if(!home_dir) { _err_record_msg(cf->err, _hd_last_home_dir_error(cf->home), END_ERR_MSG); return 1; }; /* * Append the home directory to the pathname string. */ if(_pn_append_to_path(cf->path, home_dir, -1, 0) == NULL) { _err_record_msg(cf->err, "Insufficient memory for home directory expansion", END_ERR_MSG); return 1; }; return 0; } /*....................................................................... * Lookup and report all completions of a given username prefix. * * Input: * cf CompleteFile * The filename-completion resource object. * cpl WordCompletion * The object in which to record the completions. * prefix const char * The prefix of the usernames to lookup. * line const char * The command-line in which the username appears. * word_start int The index within line[] of the start of the * username that is being completed. * word_end int The index within line[] of the character which * follows the incomplete username. * escaped int True if the completions need to have special * characters escaped. * Output: * return int 0 - OK. * 1 - Error. */ static int cf_complete_username(CompleteFile *cf, WordCompletion *cpl, const char *prefix, const char *line, int word_start, int word_end, int escaped) { /* * Set up a container of anonymous arguments to be sent to the * username-lookup iterator. */ CfHomeArgs args; args.cf = cf; args.cpl = cpl; args.prefix_len = strlen(prefix); args.line = line; args.word_start = word_start; args.word_end = word_end; args.escaped = escaped; /* * Iterate through the list of users, recording those which start * with the specified prefix. */ if(_hd_scan_user_home_dirs(cf->home, prefix, &args, cf_homedir_callback)) { _err_record_msg(cf->err, _hd_last_home_dir_error(cf->home), END_ERR_MSG); return 1; }; return 0; } /*....................................................................... * The user/home-directory scanner callback function (see homedir.h) * used by cf_complete_username(). */ static HOME_DIR_FN(cf_homedir_callback) { /* * Get the file-completion resources from the anonymous data argument. */ CfHomeArgs *args = (CfHomeArgs *) data; WordCompletion *cpl = args->cpl; CompleteFile *cf = args->cf; /* * Copy the username into the pathname work buffer, adding backslash * escapes where needed. */ if(cf_prepare_suffix(cf, usrnam+args->prefix_len, args->escaped)) { strncpy(errmsg, _err_get_msg(cf->err), maxerr); errmsg[maxerr] = '\0'; return 1; }; /* * Report the completion suffix that was copied above. */ if(cpl_add_completion(cpl, args->line, args->word_start, args->word_end, cf->buff->name, FS_DIR_SEP, FS_DIR_SEP)) { strncpy(errmsg, cpl_last_error(cpl), maxerr); errmsg[maxerr] = '\0'; return 1; }; return 0; } /*....................................................................... * Report possible completions of the filename in cf->path->name[]. * * Input: * cf CompleteFile * The file-completion resource object. * cpl WordCompletion * The object in which to record the completions. * line const char * The input line, as received by the callback * function. * word_start int The index within line[] of the start of the * last component of the filename that is being * completed. * word_end int The index within line[] of the character which * follows the incomplete filename. * escaped int If true, escape special characters in the * completion suffixes. * check_fn CplCheckFn * If not zero, this argument specifies a * function to call to ask whether a given * file should be included in the list * of completions. * check_data void * Anonymous data to be passed to check_fn(). * Output: * return int 0 - OK. * 1 - Error. */ static int cf_complete_entry(CompleteFile *cf, WordCompletion *cpl, const char *line, int word_start, int word_end, int escaped, CplCheckFn *check_fn, void *check_data) { const char *dirpath; /* The name of the parent directory */ int start; /* The index of the start of the last filename */ /* component in the transcribed filename. */ const char *prefix; /* The filename prefix to be completed */ int prefix_len; /* The length of the filename prefix */ const char *file_name; /* The lastest filename being compared */ int waserr = 0; /* True after errors */ int terminated=0; /* True if the directory part had to be terminated */ /* * Get the pathname string and its current length. */ char *pathname = cf->path->name; int pathlen = strlen(pathname); /* * Locate the start of the final component of the pathname. */ for(start=pathlen - 1; start >= 0 && strncmp(pathname + start, FS_DIR_SEP, FS_DIR_SEP_LEN) != 0; start--) ; /* * Is the parent directory the root directory? */ if(start==0 || (start < 0 && strncmp(pathname, FS_ROOT_DIR, FS_ROOT_DIR_LEN) == 0)) { dirpath = FS_ROOT_DIR; start += FS_ROOT_DIR_LEN; /* * If we found a directory separator then the part which precedes the * last component is the name of the directory to be opened. */ } else if(start > 0) { /* * The _dr_open_dir() function requires the directory name to be '\0' * terminated, so temporarily do this by overwriting the first character * of the directory separator. */ pathname[start] = '\0'; dirpath = pathname; terminated = 1; /* * We reached the start of the pathname before finding a directory * separator, so arrange to open the current working directory. */ } else { start = 0; dirpath = FS_PWD; }; /* * Attempt to open the directory. */ if(_dr_open_dir(cf->dr, dirpath, NULL)) { _err_record_msg(cf->err, "Can't open directory: ", dirpath, END_ERR_MSG); return 1; }; /* * If removed above, restore the directory separator and skip over it * to the start of the filename. */ if(terminated) { memcpy(pathname + start, FS_DIR_SEP, FS_DIR_SEP_LEN); start += FS_DIR_SEP_LEN; }; /* * Get the filename prefix and its length. */ prefix = pathname + start; prefix_len = strlen(prefix); /* * Traverse the directory, looking for files who's prefixes match the * last component of the pathname. */ while((file_name = _dr_next_file(cf->dr)) != NULL && !waserr) { int name_len = strlen(file_name); /* * Is the latest filename a possible completion of the filename prefix? */ if(name_len >= prefix_len && strncmp(prefix, file_name, prefix_len)==0) { /* * When listing all files in a directory, don't list files that start * with '.'. This is how hidden files are denoted in UNIX. */ if(prefix_len > 0 || file_name[0] != '.') { /* * Copy the completion suffix into the work pathname cf->buff->name, * adding backslash escapes if needed. */ if(cf_prepare_suffix(cf, file_name + prefix_len, escaped)) { waserr = 1; } else { /* * We want directories to be displayed with directory suffixes, * and other fully completed filenames to be followed by spaces. * To check the type of the file, append the current suffix * to the path being completed, check the filetype, then restore * the path to its original form. */ const char *cont_suffix = ""; /* The suffix to add if fully */ /* completed. */ const char *type_suffix = ""; /* The suffix to add when listing */ if(_pn_append_to_path(cf->path, file_name + prefix_len, -1, escaped) == NULL) { _err_record_msg(cf->err, "Insufficient memory to complete filename.", END_ERR_MSG); return 1; }; /* * Specify suffixes according to the file type. */ if(_pu_path_is_dir(cf->path->name)) { cont_suffix = FS_DIR_SEP; type_suffix = FS_DIR_SEP; } else if(!check_fn || check_fn(check_data, cf->path->name)) { cont_suffix = " "; } else { cf->path->name[pathlen] = '\0'; continue; }; /* * Remove the temporarily added suffix. */ cf->path->name[pathlen] = '\0'; /* * Record the latest completion. */ if(cpl_add_completion(cpl, line, word_start, word_end, cf->buff->name, type_suffix, cont_suffix)) waserr = 1; }; }; }; }; /* * Close the directory. */ _dr_close_dir(cf->dr); return waserr; } /*....................................................................... * Read a username or environment variable name, stopping when a directory * separator is seen, when the end of the string is reached, or the * output buffer overflows. * * Input: * cf CompleteFile * The file-completion resource object. * type char * The capitalized name of the type of name being read. * string char * The string who's prefix contains the name. * slen int The number of characters in string[]. * nambuf char * The output name buffer. * nammax int The longest string that will fit in nambuf[], excluding * the '\0' terminator. * Output: * return char * A pointer to nambuf on success. On error NULL is * returned and a description of the error is recorded * in cf->err. */ static char *cf_read_name(CompleteFile *cf, const char *type, const char *string, int slen, char *nambuf, int nammax) { int namlen; /* The number of characters in nambuf[] */ const char *sptr; /* A pointer into string[] */ /* * Work out the max number of characters that should be copied. */ int nmax = nammax < slen ? nammax : slen; /* * Get the environment variable name that follows the dollar. */ for(sptr=string,namlen=0; namlen < nmax && (slen-namlen < FS_DIR_SEP_LEN || strncmp(sptr, FS_DIR_SEP, FS_DIR_SEP_LEN) != 0); namlen++) { nambuf[namlen] = *sptr++; }; /* * Did the name overflow the buffer? */ if(namlen >= nammax) { _err_record_msg(cf->err, type, " name too long", END_ERR_MSG); return NULL; }; /* * Terminate the string. */ nambuf[namlen] = '\0'; return nambuf; } /*....................................................................... * Using the work buffer cf->buff, make a suitably escaped copy of a * given completion suffix, ready to be passed to cpl_add_completion(). * * Input: * cf CompleteFile * The file-completion resource object. * suffix char * The suffix to be copied. * add_escapes int If true, escape special characters. * Output: * return int 0 - OK. * 1 - Error. */ static int cf_prepare_suffix(CompleteFile *cf, const char *suffix, int add_escapes) { const char *sptr; /* A pointer into suffix[] */ int nbsl; /* The number of backslashes to add to the suffix */ int i; /* * How long is the suffix? */ int suffix_len = strlen(suffix); /* * Clear the work buffer. */ _pn_clear_path(cf->buff); /* * Count the number of backslashes that will have to be added to * escape spaces, tabs, backslashes and wildcard characters. */ nbsl = 0; if(add_escapes) { for(sptr = suffix; *sptr; sptr++) { switch(*sptr) { case ' ': case '\t': case '\\': case '*': case '?': case '[': nbsl++; break; }; }; }; /* * Arrange for the output path buffer to have sufficient room for the * both the suffix and any backslashes that have to be inserted. */ if(_pn_resize_path(cf->buff, suffix_len + nbsl) == NULL) { _err_record_msg(cf->err, "Insufficient memory to complete filename", END_ERR_MSG); return 1; }; /* * If the suffix doesn't need any escapes, copy it directly into the * work buffer. */ if(nbsl==0) { strcpy(cf->buff->name, suffix); } else { /* * Make a copy with special characters escaped? */ if(nbsl > 0) { const char *src = suffix; char *dst = cf->buff->name; for(i=0; i #include #include #include /* * Local includes. */ #include "libtecla.h" #include "ioutil.h" #include "stringrp.h" #include "pathutil.h" #include "cplfile.h" #include "cplmatch.h" #include "errmsg.h" /* * Specify the number of strings to allocate when the string free-list * is exhausted. This also sets the number of elements to expand the * matches[] array by whenever it is found to be too small. */ #define STR_BLK_FACT 100 /* * Set the default number of spaces place between columns when listing * a set of completions. */ #define CPL_COL_SEP 2 /* * Completion matches are recorded in containers of the following * type. */ struct WordCompletion { ErrMsg *err; /* The error reporting buffer */ StringGroup *sg; /* Memory for a group of strings */ int matches_dim; /* The allocated size of result.matches[] */ CplMatches result; /* Completions to be returned to the caller */ #ifndef WITHOUT_FILE_SYSTEM CompleteFile *cf; /* The resources used for filename completion */ #endif }; static void cpl_sort_matches(WordCompletion *cpl); static void cpl_zap_duplicates(WordCompletion *cpl); static void cpl_clear_completions(WordCompletion *cpl); static int cpl_cmp_matches(const void *v1, const void *v2); static int cpl_cmp_suffixes(const void *v1, const void *v2); /* * The new_CplFileConf() constructor sets the integer first member of * the returned object to the following magic number. On seeing this, * cpl_file_completions() knows when it is passed a valid CplFileConf * object. */ #define CFC_ID_CODE 4568 #ifndef WITHOUT_FILE_SYSTEM /* * A pointer to a structure of the following type can be passed to * the builtin file-completion callback function to modify its behavior. */ struct CplFileConf { int id; /* new_CplFileConf() sets this to CFC_ID_CODE */ int escaped; /* If none-zero, backslashes in the input line are */ /* interpreted as escaping special characters and */ /* spaces, and any special characters and spaces in */ /* the listed completions will also be escaped with */ /* added backslashes. This is the default behaviour. */ /* If zero, backslashes are interpreted as being */ /* literal parts of the filename, and none are added */ /* to the completion suffixes. */ int file_start; /* The index in the input line of the first character */ /* of the filename. If you specify -1 here, */ /* cpl_file_completions() identifies the */ /* the start of the filename by looking backwards for */ /* an unescaped space, or the beginning of the line. */ CplCheckFn *chk_fn; /* If not zero, this argument specifies a */ /* function to call to ask whether a given */ /* file should be included in the list */ /* of completions. */ void *chk_data; /* Anonymous data to be passed to check_fn(). */ }; static void cpl_init_FileConf(CplFileConf *cfc); /* * When file-system access is being excluded, define a dummy structure * to satisfy the typedef in libtecla.h. */ #else struct CplFileConf {int dummy;}; #endif /* * Encapsulate the formatting information needed to layout a * multi-column listing of completions. */ typedef struct { int term_width; /* The width of the terminal (characters) */ int column_width; /* The number of characters within in each column. */ int ncol; /* The number of columns needed */ int nline; /* The number of lines needed */ } CplListFormat; /* * Given the current terminal width, and a list of completions, determine * how to best use the terminal width to display a multi-column listing * of completions. */ static void cpl_plan_listing(CplMatches *result, int term_width, CplListFormat *fmt); /* * Display a given line of a multi-column list of completions. */ static int cpl_format_line(CplMatches *result, CplListFormat *fmt, int lnum, GlWriteFn *write_fn, void *data); /*....................................................................... * Create a new string-completion object. * * Output: * return WordCompletion * The new object, or NULL on error. */ WordCompletion *new_WordCompletion(void) { WordCompletion *cpl; /* The object to be returned */ /* * Allocate the container. */ cpl = (WordCompletion *) malloc(sizeof(WordCompletion)); if(!cpl) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_WordCompletion(). */ cpl->err = NULL; cpl->sg = NULL; cpl->matches_dim = 0; cpl->result.suffix = NULL; cpl->result.cont_suffix = NULL; cpl->result.matches = NULL; cpl->result.nmatch = 0; #ifndef WITHOUT_FILE_SYSTEM cpl->cf = NULL; #endif /* * Allocate a place to record error messages. */ cpl->err = _new_ErrMsg(); if(!cpl->err) return del_WordCompletion(cpl); /* * Allocate an object that allows a group of strings to be allocated * efficiently by placing many of them in contiguous string segments. */ #ifdef WITHOUT_FILE_SYSTEM cpl->sg = _new_StringGroup(MAX_PATHLEN_FALLBACK); #else cpl->sg = _new_StringGroup(_pu_pathname_dim()); #endif if(!cpl->sg) return del_WordCompletion(cpl); /* * Allocate an array for matching completions. This will be extended later * if needed. */ cpl->matches_dim = STR_BLK_FACT; cpl->result.matches = (CplMatch *) malloc(sizeof(cpl->result.matches[0]) * cpl->matches_dim); if(!cpl->result.matches) { errno = ENOMEM; return del_WordCompletion(cpl); }; /* * Allocate a filename-completion resource object. */ #ifndef WITHOUT_FILE_SYSTEM cpl->cf = _new_CompleteFile(); if(!cpl->cf) return del_WordCompletion(cpl); #endif return cpl; } /*....................................................................... * Delete a string-completion object. * * Input: * cpl WordCompletion * The object to be deleted. * Output: * return WordCompletion * The deleted object (always NULL). */ WordCompletion *del_WordCompletion(WordCompletion *cpl) { if(cpl) { cpl->err = _del_ErrMsg(cpl->err); cpl->sg = _del_StringGroup(cpl->sg); if(cpl->result.matches) { free(cpl->result.matches); cpl->result.matches = NULL; #ifndef WITHOUT_FILE_SYSTEM cpl->cf = _del_CompleteFile(cpl->cf); #endif }; free(cpl); }; return NULL; } /*....................................................................... * This function is designed to be called by CplMatchFn callback * functions. It adds one possible completion of the token that is being * completed to an array of completions. If the completion needs any * special quoting to be valid when displayed in the input line, this * quoting must be included in the string. * * Input: * cpl WordCompletion * The argument of the same name that was passed * to the calling CplMatchFn callback function. * line const char * The input line, as received by the callback * function. * word_start int The index within line[] of the start of the * word that is being completed. * word_end int The index within line[] of the character which * follows the incomplete word, as received by the * calling callback function. * suffix const char * The appropriately quoted string that could * be appended to the incomplete token to complete * it. A copy of this string will be allocated * internally. * type_suffix const char * When listing multiple completions, gl_get_line() * appends this string to the completion to indicate * its type to the user. If not pertinent pass "". * Otherwise pass a literal or static string. * cont_suffix const char * If this turns out to be the only completion, * gl_get_line() will append this string as * a continuation. For example, the builtin * file-completion callback registers a directory * separator here for directory matches, and a * space otherwise. If the match were a function * name you might want to append an open * parenthesis, etc.. If not relevant pass "". * Otherwise pass a literal or static string. * Output: * return int 0 - OK. * 1 - Error. */ int cpl_add_completion(WordCompletion *cpl, const char *line, int word_start, int word_end, const char *suffix, const char *type_suffix, const char *cont_suffix) { CplMatch *match; /* The container of the new match */ char *string; /* A newly allocated copy of the completion string */ /* * Check the arguments. */ if(!cpl) return 1; if(!suffix) return 0; if(!type_suffix) type_suffix = ""; if(!cont_suffix) cont_suffix = ""; /* * Do we need to extend the array of matches[]? */ if(cpl->result.nmatch+1 > cpl->matches_dim) { int needed = cpl->matches_dim + STR_BLK_FACT; CplMatch *matches = (CplMatch *) realloc(cpl->result.matches, sizeof(cpl->result.matches[0]) * needed); if(!matches) { _err_record_msg(cpl->err, "Insufficient memory to extend array of matches.", END_ERR_MSG); return 1; }; cpl->result.matches = matches; cpl->matches_dim = needed; }; /* * Allocate memory to store the combined completion prefix and the * new suffix. */ string = _sg_alloc_string(cpl->sg, word_end-word_start + strlen(suffix)); if(!string) { _err_record_msg(cpl->err, "Insufficient memory to extend array of matches.", END_ERR_MSG); return 1; }; /* * Compose the string. */ strncpy(string, line + word_start, word_end - word_start); strcpy(string + word_end - word_start, suffix); /* * Record the new match. */ match = cpl->result.matches + cpl->result.nmatch++; match->completion = string; match->suffix = string + word_end - word_start; match->type_suffix = type_suffix; /* * Record the continuation suffix. */ cpl->result.cont_suffix = cont_suffix; return 0; } /*....................................................................... * Sort the array of matches. * * Input: * cpl WordCompletion * The completion resource object. */ static void cpl_sort_matches(WordCompletion *cpl) { qsort(cpl->result.matches, cpl->result.nmatch, sizeof(cpl->result.matches[0]), cpl_cmp_matches); } /*....................................................................... * This is a qsort() comparison function used to sort matches. * * Input: * v1, v2 void * Pointers to the two matches to be compared. * Output: * return int -1 -> v1 < v2. * 0 -> v1 == v2 * 1 -> v1 > v2 */ static int cpl_cmp_matches(const void *v1, const void *v2) { const CplMatch *m1 = (const CplMatch *) v1; const CplMatch *m2 = (const CplMatch *) v2; return strcmp(m1->completion, m2->completion); } /*....................................................................... * Sort the array of matches in order of their suffixes. * * Input: * cpl WordCompletion * The completion resource object. */ static void cpl_sort_suffixes(WordCompletion *cpl) { qsort(cpl->result.matches, cpl->result.nmatch, sizeof(cpl->result.matches[0]), cpl_cmp_suffixes); } /*....................................................................... * This is a qsort() comparison function used to sort matches in order of * their suffixes. * * Input: * v1, v2 void * Pointers to the two matches to be compared. * Output: * return int -1 -> v1 < v2. * 0 -> v1 == v2 * 1 -> v1 > v2 */ static int cpl_cmp_suffixes(const void *v1, const void *v2) { const CplMatch *m1 = (const CplMatch *) v1; const CplMatch *m2 = (const CplMatch *) v2; return strcmp(m1->suffix, m2->suffix); } /*....................................................................... * Find the common prefix of all of the matching completion matches, * and record a pointer to it in cpl->result.suffix. Note that this has * the side effect of sorting the matches into suffix order. * * Input: * cpl WordCompletion * The completion resource object. * Output: * return int 0 - OK. * 1 - Error. */ static int cpl_common_suffix(WordCompletion *cpl) { CplMatches *result; /* The result container */ const char *first, *last; /* The first and last matching suffixes */ int length; /* The length of the common suffix */ /* * Get the container of the array of matching files. */ result = &cpl->result; /* * No matching completions? */ if(result->nmatch < 1) return 0; /* * Sort th matches into suffix order. */ cpl_sort_suffixes(cpl); /* * Given that the array of matches is sorted, the first and last * suffixes are those that differ most in their prefixes, so the common * prefix of these strings is the longest common prefix of all of the * suffixes. */ first = result->matches[0].suffix; last = result->matches[result->nmatch - 1].suffix; /* * Find the point at which the first and last matching strings * first difffer. */ while(*first && *first == *last) { first++; last++; }; /* * How long is the common suffix? */ length = first - result->matches[0].suffix; /* * Allocate memory to record the common suffix. */ result->suffix = _sg_alloc_string(cpl->sg, length); if(!result->suffix) { _err_record_msg(cpl->err, "Insufficient memory to record common completion suffix.", END_ERR_MSG); return 1; }; /* * Record the common suffix. */ strncpy(result->suffix, result->matches[0].suffix, length); result->suffix[length] = '\0'; return 0; } /*....................................................................... * Discard the contents of the array of possible completion matches. * * Input: * cpl WordCompletion * The word-completion resource object. */ static void cpl_clear_completions(WordCompletion *cpl) { /* * Discard all of the strings. */ _clr_StringGroup(cpl->sg); /* * Record the fact that the array is now empty. */ cpl->result.nmatch = 0; cpl->result.suffix = NULL; cpl->result.cont_suffix = ""; /* * Also clear the error message. */ _err_clear_msg(cpl->err); return; } /*....................................................................... * Given an input line and the point at which it completion is to be * attempted, return an array of possible completions. * * Input: * cpl WordCompletion * The completion resource object. * line char * The current input line. * word_end int The index of the character in line[] which * follows the end of the token that is being * completed. * data void * Anonymous 'data' to be passed to match_fn(). * match_fn CplMatchFn * The function that will identify the prefix * to be completed from the input line, and * record completion matches. * Output: * return CplMatches * The container of the array of possible * completions. The returned pointer refers * to a container owned by the parent WordCompletion * object, and its contents thus potentially * change on every call to cpl_matches(). * On error, NULL is returned, and a description * of the error can be acquired by calling * cpl_last_error(cpl). */ CplMatches *cpl_complete_word(WordCompletion *cpl, const char *line, int word_end, void *data, CplMatchFn *match_fn) { int line_len; /* The total length of the input line */ /* * How long is the input line? */ line_len = strlen(line); /* * Check the arguments. */ if(!cpl || !line || !match_fn || word_end < 0 || word_end > line_len) { if(cpl) { _err_record_msg(cpl->err, "cpl_complete_word: Invalid arguments.", END_ERR_MSG); }; return NULL; }; /* * Clear the return container. */ cpl_clear_completions(cpl); /* * Have the matching function record possible completion matches in * cpl->result.matches. */ if(match_fn(cpl, data, line, word_end)) { if(_err_get_msg(cpl->err)[0] == '\0') _err_record_msg(cpl->err, "Error completing word.", END_ERR_MSG); return NULL; }; /* * Record a copy of the common initial part of all of the prefixes * in cpl->result.common. */ if(cpl_common_suffix(cpl)) return NULL; /* * Sort the matches into lexicographic order. */ cpl_sort_matches(cpl); /* * Discard any duplicate matches. */ cpl_zap_duplicates(cpl); /* * If there is more than one match, discard the continuation suffix. */ if(cpl->result.nmatch > 1) cpl->result.cont_suffix = ""; /* * Return the array of matches. */ return &cpl->result; } /*....................................................................... * Recall the return value of the last call to cpl_complete_word(). * * Input: * cpl WordCompletion * The completion resource object. * Output: * return CplMatches * The container of the array of possible * completions, as returned by the last call to * cpl_complete_word(). The returned pointer refers * to a container owned by the parent WordCompletion * object, and its contents thus potentially * change on every call to cpl_complete_word(). * On error, either in the execution of this * function, or in the last call to * cpl_complete_word(), NULL is returned, and a * description of the error can be acquired by * calling cpl_last_error(cpl). */ CplMatches *cpl_recall_matches(WordCompletion *cpl) { return (!cpl || *_err_get_msg(cpl->err)!='\0') ? NULL : &cpl->result; } /*....................................................................... * Print out an array of matching completions. * * Input: * result CplMatches * The container of the sorted array of * completions. * fp FILE * The output stream to write to. * term_width int The width of the terminal. * Output: * return int 0 - OK. * 1 - Error. */ int cpl_list_completions(CplMatches *result, FILE *fp, int term_width) { return _cpl_output_completions(result, _io_write_stdio, fp, term_width); } /*....................................................................... * Print an array of matching completions via a callback function. * * Input: * result CplMatches * The container of the sorted array of * completions. * write_fn GlWriteFn * The function to call to write the completions, * or 0 to discard the output. * data void * Anonymous data to pass to write_fn(). * term_width int The width of the terminal. * Output: * return int 0 - OK. * 1 - Error. */ int _cpl_output_completions(CplMatches *result, GlWriteFn *write_fn, void *data, int term_width) { CplListFormat fmt; /* List formatting information */ int lnum; /* The sequential number of the line to print next */ /* * Not enough space to list anything? */ if(term_width < 1) return 0; /* * Do we have a callback to write via, and any completions to be listed? */ if(write_fn && result && result->nmatch>0) { /* * Work out how to arrange the listing into fixed sized columns. */ cpl_plan_listing(result, term_width, &fmt); /* * Print the listing via the specified callback. */ for(lnum=0; lnum < fmt.nline; lnum++) { if(cpl_format_line(result, &fmt, lnum, write_fn, data)) return 1; }; }; return 0; } /*....................................................................... * Return a description of the string-completion error that occurred. * * Input: * cpl WordCompletion * The string-completion resource object. * Output: * return const char * The description of the last error. */ const char *cpl_last_error(WordCompletion *cpl) { return cpl ? _err_get_msg(cpl->err) : "NULL WordCompletion argument"; } /*....................................................................... * When an error occurs while performing a completion, you registerf a * terse description of the error by calling cpl_record_error(). This * message will then be returned on the next call to cpl_last_error(). * * Input: * cpl WordCompletion * The string-completion resource object that was * originally passed to the callback. * errmsg const char * The description of the error. */ void cpl_record_error(WordCompletion *cpl, const char *errmsg) { if(cpl && errmsg) _err_record_msg(cpl->err, errmsg, END_ERR_MSG); } /*....................................................................... * This is the builtin completion callback function which performs file * completion. * * Input: * cpl WordCompletion * An opaque pointer to the object that will * contain the matches. This should be filled * via zero or more calls to cpl_add_completion(). * data void * Either NULL to request the default * file-completion behavior, or a pointer to a * CplFileConf structure, whose members specify * a different behavior. * line char * The current input line. * word_end int The index of the character in line[] which * follows the end of the token that is being * completed. * Output * return int 0 - OK. * 1 - Error. */ CPL_MATCH_FN(cpl_file_completions) { #ifdef WITHOUT_FILE_SYSTEM return 0; #else const char *start_path; /* The pointer to the start of the pathname */ /* in line[]. */ CplFileConf *conf; /* The new-style configuration object. */ /* * The following configuration object will be used if the caller didn't * provide one. */ CplFileConf default_conf; /* * This function can be called externally, so check its arguments. */ if(!cpl) return 1; if(!line || word_end < 0) { _err_record_msg(cpl->err, "cpl_file_completions: Invalid arguments.", END_ERR_MSG); return 1; }; /* * The 'data' argument is either a CplFileConf pointer, identifiable * by having an integer id code as its first member, or the deprecated * CplFileArgs pointer, or can be NULL to request the default * configuration. */ if(data && *(int *)data == CFC_ID_CODE) { conf = (CplFileConf *) data; } else { /* * Select the defaults. */ conf = &default_conf; cpl_init_FileConf(&default_conf); /* * If we have been passed an instance of the deprecated CplFileArgs * structure, copy its configuration parameters over the defaults. */ if(data) { CplFileArgs *args = (CplFileArgs *) data; conf->escaped = args->escaped; conf->file_start = args->file_start; }; }; /* * Get the start of the filename. If not specified by the caller * identify it by searching backwards in the input line for an * unescaped space or the start of the line. */ if(conf->file_start < 0) { start_path = _pu_start_of_path(line, word_end); if(!start_path) { _err_record_msg(cpl->err, "Unable to find the start of the filename.", END_ERR_MSG); return 1; }; } else { start_path = line + conf->file_start; }; /* * Perform the completion. */ if(_cf_complete_file(cpl, cpl->cf, line, start_path - line, word_end, conf->escaped, conf->chk_fn, conf->chk_data)) { cpl_record_error(cpl, _cf_last_error(cpl->cf)); return 1; }; return 0; #endif } /*....................................................................... * Initialize a CplFileArgs structure with default configuration * parameters. Note that the CplFileArgs configuration type is * deprecated. The opaque CplFileConf object should be used in future * applications. * * Input: * cfa CplFileArgs * The configuration object of the * cpl_file_completions() callback. */ void cpl_init_FileArgs(CplFileArgs *cfa) { if(cfa) { cfa->escaped = 1; cfa->file_start = -1; }; } #ifndef WITHOUT_FILE_SYSTEM /*....................................................................... * Initialize a CplFileConf structure with default configuration * parameters. * * Input: * cfc CplFileConf * The configuration object of the * cpl_file_completions() callback. */ static void cpl_init_FileConf(CplFileConf *cfc) { if(cfc) { cfc->id = CFC_ID_CODE; cfc->escaped = 1; cfc->file_start = -1; cfc->chk_fn = 0; cfc->chk_data = NULL; }; } #endif /*....................................................................... * Create a new CplFileConf object and initialize it with defaults. * * Output: * return CplFileConf * The new object, or NULL on error. */ CplFileConf *new_CplFileConf(void) { #ifdef WITHOUT_FILE_SYSTEM errno = EINVAL; return NULL; #else CplFileConf *cfc; /* The object to be returned */ /* * Allocate the container. */ cfc = (CplFileConf *)malloc(sizeof(CplFileConf)); if(!cfc) return NULL; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_CplFileConf(). */ cpl_init_FileConf(cfc); return cfc; #endif } /*....................................................................... * Delete a CplFileConf object. * * Input: * cfc CplFileConf * The object to be deleted. * Output: * return CplFileConf * The deleted object (always NULL). */ CplFileConf *del_CplFileConf(CplFileConf *cfc) { #ifndef WITHOUT_FILE_SYSTEM if(cfc) { /* * Delete the container. */ free(cfc); }; #endif return NULL; } /*....................................................................... * If backslashes in the filename should be treated as literal * characters, call the following function with literal=1. Otherwise * the default is to treat them as escape characters, used for escaping * spaces etc.. * * Input: * cfc CplFileConf * The cpl_file_completions() configuration object * to be configured. * literal int Pass non-zero here to enable literal interpretation * of backslashes. Pass 0 to turn off literal * interpretation. */ void cfc_literal_escapes(CplFileConf *cfc, int literal) { #ifndef WITHOUT_FILE_SYSTEM if(cfc) cfc->escaped = !literal; #endif } /*....................................................................... * Call this function if you know where the index at which the * filename prefix starts in the input line. Otherwise by default, * or if you specify start_index to be -1, the filename is taken * to start after the first unescaped space preceding the cursor, * or the start of the line, which ever comes first. * * Input: * cfc CplFileConf * The cpl_file_completions() configuration object * to be configured. * start_index int The index of the start of the filename in * the input line, or -1 to select the default. */ void cfc_file_start(CplFileConf *cfc, int start_index) { #ifndef WITHOUT_FILE_SYSTEM if(cfc) cfc->file_start = start_index; #endif } /*....................................................................... * If you only want certain types of files to be included in the * list of completions, you use the following function to specify a * callback function which will be called to ask whether a given file * should be included. * * Input: * cfc CplFileConf * The cpl_file_completions() configuration object * to be configured. * chk_fn CplCheckFn * Zero to disable filtering, or a pointer to a * function that returns 1 if a given file should * be included in the list of completions. * chk_data void * Anonymous data to be passed to chk_fn() * every time that it is called. */ void cfc_set_check_fn(CplFileConf *cfc, CplCheckFn *chk_fn, void *chk_data) { #ifndef WITHOUT_FILE_SYSTEM if(cfc) { cfc->chk_fn = chk_fn; cfc->chk_data = chk_data; }; #endif } /*....................................................................... * The following CplCheckFn callback returns non-zero if the specified * filename is that of an executable. */ CPL_CHECK_FN(cpl_check_exe) { #ifdef WITHOUT_FILE_SYSTEM return 0; #else return _pu_path_is_exe(pathname); #endif } /*....................................................................... * Remove duplicates from a sorted array of matches. * * Input: * cpl WordCompletion * The completion resource object. */ static void cpl_zap_duplicates(WordCompletion *cpl) { CplMatch *matches; /* The array of matches */ int nmatch; /* The number of elements in matches[] */ const char *completion; /* The completion string of the last unique match */ const char *type_suffix; /* The type of the last unique match */ int src; /* The index of the match being considered */ int dst; /* The index at which to record the next */ /* unique match. */ /* * Get the array of matches and the number of matches that it * contains. */ matches = cpl->result.matches; nmatch = cpl->result.nmatch; /* * No matches? */ if(nmatch < 1) return; /* * Initialize the comparison strings with the first match. */ completion = matches[0].completion; type_suffix = matches[0].type_suffix; /* * Go through the array of matches, copying each new unrecorded * match at the head of the array, while discarding duplicates. */ for(src=dst=1; srccompletion) != 0 || strcmp(type_suffix, match->type_suffix) != 0) { if(src != dst) matches[dst] = *match; dst++; completion = match->completion; type_suffix = match->type_suffix; }; }; /* * Record the number of unique matches that remain. */ cpl->result.nmatch = dst; return; } /*....................................................................... * Work out how to arrange a given array of completions into a listing * of one or more fixed size columns. * * Input: * result CplMatches * The set of completions to be listed. * term_width int The width of the terminal. A lower limit of * zero is quietly enforced. * Input/Output: * fmt CplListFormat * The formatting information will be assigned * to the members of *fmt. */ static void cpl_plan_listing(CplMatches *result, int term_width, CplListFormat *fmt) { int maxlen; /* The length of the longest matching string */ int i; /* * Ensure that term_width >= 0. */ if(term_width < 0) term_width = 0; /* * Start by assuming the worst case, that either nothing will fit * on the screen, or that there are no matches to be listed. */ fmt->term_width = term_width; fmt->column_width = 0; fmt->nline = fmt->ncol = 0; /* * Work out the maximum length of the matching strings. */ maxlen = 0; for(i=0; inmatch; i++) { CplMatch *match = result->matches + i; int len = strlen(match->completion) + strlen(match->type_suffix); if(len > maxlen) maxlen = len; }; /* * Nothing to list? */ if(maxlen == 0) return; /* * Split the available terminal width into columns of * maxlen + CPL_COL_SEP characters. */ fmt->column_width = maxlen; fmt->ncol = fmt->term_width / (fmt->column_width + CPL_COL_SEP); /* * If the column width is greater than the terminal width, zero columns * will have been selected. Set a lower limit of one column. Leave it * up to the caller how to deal with completions who's widths exceed * the available terminal width. */ if(fmt->ncol < 1) fmt->ncol = 1; /* * How many lines of output will be needed? */ fmt->nline = (result->nmatch + fmt->ncol - 1) / fmt->ncol; return; } /*....................................................................... * Render one line of a multi-column listing of completions, using a * callback function to pass the output to an arbitrary destination. * * Input: * result CplMatches * The container of the sorted array of * completions. * fmt CplListFormat * Formatting information. * lnum int The index of the line to print, starting * from 0, and incrementing until the return * value indicates that there is nothing more * to be printed. * write_fn GlWriteFn * The function to call to write the line, or * 0 to discard the output. * data void * Anonymous data to pass to write_fn(). * Output: * return int 0 - Line printed ok. * 1 - Nothing to print. */ static int cpl_format_line(CplMatches *result, CplListFormat *fmt, int lnum, GlWriteFn *write_fn, void *data) { int col; /* The index of the list column being output */ /* * If the line index is out of bounds, there is nothing to be written. */ if(lnum < 0 || lnum >= fmt->nline) return 1; /* * If no output function has been provided, return as though the * line had been printed. */ if(!write_fn) return 0; /* * Print the matches in 'ncol' columns, sorted in line order within each * column. */ for(col=0; col < fmt->ncol; col++) { int m = col*fmt->nline + lnum; /* * Is there another match to be written? Note that in general * the last line of a listing will have fewer filled columns * than the initial lines. */ if(m < result->nmatch) { CplMatch *match = result->matches + m; /* * How long are the completion and type-suffix strings? */ int clen = strlen(match->completion); int tlen = strlen(match->type_suffix); /* * Write the completion string. */ if(write_fn(data, match->completion, clen) != clen) return 1; /* * Write the type suffix, if any. */ if(tlen > 0 && write_fn(data, match->type_suffix, tlen) != tlen) return 1; /* * If another column follows the current one, pad to its start with spaces. */ if(col+1 < fmt->ncol) { /* * The following constant string of spaces is used to pad the output. */ static const char spaces[] = " "; static const int nspace = sizeof(spaces) - 1; /* * Pad to the next column, using as few sub-strings of the spaces[] * array as possible. */ int npad = fmt->column_width + CPL_COL_SEP - clen - tlen; while(npad>0) { int n = npad > nspace ? nspace : npad; if(write_fn(data, spaces + nspace - n, n) != n) return 1; npad -= n; }; }; }; }; /* * Start a new line. */ { char s[] = "\r\n"; int n = strlen(s); if(write_fn(data, s, n) != n) return 1; }; return 0; } genometools-1.5.1/src/external/libtecla-1.6.1/cplmatch.h000066400000000000000000000037361211610345200226520ustar00rootroot00000000000000#ifndef cplmatch_h #define cplmatch_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * This header is not for use by external applicatons. It contains * internal immplementation features of the libtecla library, which * may change incompatibly between releases. */ /* * Display a list of completions via a callback function. */ int _cpl_output_completions(CplMatches *result, GlWriteFn *write_fn, void *data, int term_width); #endif genometools-1.5.1/src/external/libtecla-1.6.1/demo.c000066400000000000000000000125571211610345200217770ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include #include #include #include #include #include "libtecla.h" /* The function which displays the introductory text of the demo */ static void show_demo_introduction(GetLine *gl); /*....................................................................... * This program demonstrates how to use gl_get_line() as a line editor to * to enable users to enter input. It takes no arguments. */ int main(int argc, char *argv[]) { char *line; /* A line of input */ GetLine *gl; /* The line editor */ int major,minor,micro; /* The version number of the library */ /* * Create the line editor, specifying a max line length of 500 bytes, * and 10000 bytes to allocate to storage of historical input lines. */ gl = new_GetLine(500, 5000); if(!gl) return 1; /* * If the user has the LC_CTYPE or LC_ALL environment variables set, * enable display of characters corresponding to the specified locale. */ (void) setlocale(LC_CTYPE, ""); /* * Lookup and display the version number of the library. */ libtecla_version(&major, &minor, µ); printf("\n Welcome to the main demo program of libtecla version %d.%d.%d\n", major, minor, micro); /* * Display an introductory banner. */ show_demo_introduction(gl); /* * Load history. */ #ifndef WITHOUT_FILE_SYSTEM (void) gl_load_history(gl, "~/.demo_history", "#"); #endif /* * Read lines of input from the user and print them to stdout. */ do { /* * Get a new line from the user. */ line = gl_get_line(gl, "$ ", NULL, 0); if(!line) break; /* * Display what was entered. */ if(printf("You entered: %s", line) < 0 || fflush(stdout)) break; /* * If the user types "exit", quit the program. */ if(strcmp(line, "exit\n")==0) break; else if(strcmp(line, "history\n")==0) gl_show_history(gl, stdout, "%N %T %H\n", 0, -1); else if(strcmp(line, "size\n")==0) { GlTerminalSize size = gl_terminal_size(gl, 80, 24); printf("Terminal size = %d columns x %d lines.\n", size.ncolumn, size.nline); } else if(strcmp(line, "clear\n")==0) { if(gl_erase_terminal(gl)) return 1; }; } while(1); /* * Save historical command lines. */ #ifndef WITHOUT_FILE_SYSTEM (void) gl_save_history(gl, "~/.demo_history", "#", -1); #endif /* * Clean up. */ gl = del_GetLine(gl); return 0; } /*....................................................................... * Display introductory text to the user, formatted according to the * current terminal width and enclosed in a box of asterixes. * * Input: * gl GetLine * The resource object of gl_get_line(). */ static void show_demo_introduction(GetLine *gl) { int start; /* The column in which gl_display_text() left the cursor */ int i; /* * Break the indtroductory text into an array of strings, so as to * avoid overflowing any compiler string limits. */ const char *doc[] = { "This program is a simple shell with which you can experiment with the ", "line editing and tab completion facilities provided by the gl_get_line() ", "function. The file demo.c also serves as a fully commented example ", "of how to use gl_get_line().\n" }; /* * Form the top line of the documentation box by filling the area of * the line between a " *" prefix and a "* " suffix with asterixes. */ printf("\n"); gl_display_text(gl, 0, " *", "* ", '*', 80, 0, "\n"); /* * Justify the documentation text within margins of asterixes. */ for(start=0,i=0; i= 0; i++) start = gl_display_text(gl, 0, " * ", " * ", ' ', 80, start,doc[i]); /* * Draw the bottom line of the documentation box. */ gl_display_text(gl, 0, " *", "* ", '*', 80, 0, "\n"); printf("\n"); } genometools-1.5.1/src/external/libtecla-1.6.1/demo2.c000066400000000000000000000330601211610345200220510ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include #include #include #include #include #include "libtecla.h" /* * If the library is being built with file-system access excluded, this * demo program won't have anything to demonstrate. */ #ifdef WITHOUT_FILE_SYSTEM int main(int argc, char *argv[]) { fprintf(stderr, "\n" " This program normally demonstrates tecla's path-lookup\n" " facility. However libtecla has been installed with\n" " file-system facilities explicitly excluded, so there is\n" " nothing to demonstrate.\n\n"); return 1; } #else /* * Encapsulate the resources needed by this demo. */ typedef struct { GetLine *gl; /* The line editor */ PathCache *pc; /* A cache of executables in the user's path */ PcaPathConf *ppc; /* The configuration argument of pca_path_completions() */ } DemoRes; /* * The following functions allocate and free instances of the above * structure. */ static DemoRes *new_DemoRes(void); static DemoRes *del_DemoRes(DemoRes *res); /* * Search backwards for the start of a pathname. */ static char *start_of_path(const char *string, int back_from); /* * Find the array indexes of the first character of the first * space-delimited word in the specified string, and of the character * that follows it. */ static int get_word_limits(const char *string, int *wa, int *wb); /* * This is the demonstration completion callback function (defined below). */ static CPL_MATCH_FN(demo_cpl_fn); /* The function which displays the introductory text of the demo */ static void show_demo_introduction(GetLine *gl); /*....................................................................... * This demo takes no arguments. It reads lines of input until the * word 'exit' is entered, or C-d is pressed. It replaces the default * tab-completion callback with one which when invoked at the start of * a line, looks up completions of commands in the user's execution * path, and when invoked in other parts of the line, reverts to * normal filename completion. Whenever a new line is entered, it * extracts the first word on the line, looks it up in the user's * execution path to see if it corresponds to a known executable file, * and if so, displays the full pathname of the file, along with the * remaining arguments. */ int main(int argc, char *argv[]) { char *line; /* A line of input */ DemoRes *res; /* The resources of the demo */ int wa,wb; /* The delimiting indexes of a word in line[] */ int major,minor,micro; /* The version number of the library */ /* * Allocate the resources needed by this demo. */ res = new_DemoRes(); if(!res) return 1; /* * If the user has the LC_CTYPE or LC_ALL environment variables set, * enable display of characters corresponding to the specified locale. */ (void) setlocale(LC_CTYPE, ""); /* * Lookup and display the version number of the library. */ libtecla_version(&major, &minor, µ); printf("\n Welcome to the path-search demo of libtecla version %d.%d.%d\n", major, minor, micro); /* * Display some introductory text, left-justifying it within the current * width of the terminal and enclosing it in a box of asterixes. */ show_demo_introduction(res->gl); /* * Read lines of input from the user and print them to stdout. */ do { /* * Get a new line from the user. */ line = gl_get_line(res->gl, "$ ", NULL, 0); if(!line) break; /* * Work out the extent of the first word in the input line, and * try to identify this as a command in the path, displaying the * full pathname of the match if found. */ if(get_word_limits(line, &wa, &wb) == 0) { char *cmd = pca_lookup_file(res->pc, line + wa, wb-wa, 0); if(cmd) { printf("Command=%s\n", cmd); printf("Arguments=%s", line+wb); } else { printf("Command not found\n"); }; }; /* * If the user types "exit", quit the program. */ if(strcmp(line, "exit\n")==0) break; } while(1); /* * Clean up. */ res = del_DemoRes(res); return 0; } /*....................................................................... * This completion callback searches for completions of executables in * the user's path when invoked on a word at the start of the path, and * performs normal filename completion elsewhere. */ static CPL_MATCH_FN(demo_cpl_fn) { /* * Get the resource object that was passed to gl_customize_completion(). */ DemoRes *res = (DemoRes *) data; /* * Find the start of the filename prefix to be completed, searching * backwards for the first unescaped space, or the start of the line. */ char *start = start_of_path(line, word_end); /* * Skip spaces preceding the start of the prefix. */ while(start > line && isspace((int)(unsigned char) start[-1])) start--; /* * If the filename prefix is at the start of the line, attempt * to complete the filename as a command in the path. Otherwise * perform normal filename completion. */ return (start == line) ? pca_path_completions(cpl, res->ppc, line, word_end) : cpl_file_completions(cpl, NULL, line, word_end); } /*....................................................................... * Search backwards for the potential start of a filename. This * looks backwards from the specified index in a given string, * stopping at the first unescaped space or the start of the line. * * Input: * string const char * The string to search backwards in. * back_from int The index of the first character in string[] * that follows the pathname. * Output: * return char * The pointer to the first character of * the potential pathname, or NULL on error. */ static char *start_of_path(const char *string, int back_from) { int i, j; /* * Search backwards from the specified index. */ for(i=back_from-1; i>=0; i--) { int c = string[i]; /* * Stop on unescaped spaces. */ if(isspace((int)(unsigned char)c)) { /* * The space can't be escaped if we are at the start of the line. */ if(i==0) break; /* * Find the extent of the escape characters which precedes the space. */ for(j=i-1; j>=0 && string[j]=='\\'; j--) ; /* * If there isn't an odd number of escape characters before the space, * then the space isn't escaped. */ if((i - 1 - j) % 2 == 0) break; }; }; return (char *)string + i + 1; } /*....................................................................... * Create a new DemoRes object containing the resources needed by the * demo. * * Output: * return DemoRes * The new object, or NULL on error. */ static DemoRes *new_DemoRes(void) { DemoRes *res; /* The object to be returned */ /* * Allocate the container. */ res = (DemoRes *)malloc(sizeof(DemoRes)); if(!res) { fprintf(stderr, "new_DemoRes: Insufficient memory.\n"); return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_DemoRes(). */ res->gl = NULL; res->pc = NULL; res->ppc = NULL; /* * Create the line editor, specifying a max line length of 500 bytes, * and 10000 bytes to allocate to storage of historical input lines. */ res->gl = new_GetLine(500, 10000); if(!res->gl) return del_DemoRes(res); /* * Enable text attribute formatting directives in prompt strings. */ gl_prompt_style(res->gl, GL_FORMAT_PROMPT); /* * Allocate a cache of the executable files found in the user's path. */ res->pc = new_PathCache(); if(!res->pc) return del_DemoRes(res); /* * Populate the cache with the contents of the user's path. */ if(pca_scan_path(res->pc, getenv("PATH"))) return del_DemoRes(res); /* * Arrange for susequent calls to pca_lookup_file() and pca_path_completions() * to only report files that are executable by the user. */ pca_set_check_fn(res->pc, cpl_check_exe, NULL); /* * Allocate a configuration object for use with pca_path_completions(). */ res->ppc = new_PcaPathConf(res->pc); if(!res->ppc) return del_DemoRes(res); /* * Replace the builtin filename completion callback with one which * searches for completions of executables in the user's path when * invoked on a word at the start of the path, and completes files * elsewhere. */ if(gl_customize_completion(res->gl, res, demo_cpl_fn)) return del_DemoRes(res); return res; } /*....................................................................... * Delete a DemoRes object. * * Input: * res DemoRes * The object to be deleted. * Output: * return DemoRes * The deleted object (always NULL). */ static DemoRes *del_DemoRes(DemoRes *res) { if(res) { res->gl = del_GetLine(res->gl); res->pc = del_PathCache(res->pc); res->ppc = del_PcaPathConf(res->ppc); free(res); }; return NULL; } /*....................................................................... * Return the limits of the word at the start of a given string, ignoring * leading white-space, and interpretting the first unescaped space, tab or * the end of the line, as the end of the word. * * Input: * string const char * The string to tokenize. * Input/Output: * wa,wb int * The indexes of the first character of the word, * and the character which follows the last * character of the word, will be assigned to * *wa and *wb, respectively. * Output: * return int 0 - A word was found. * 1 - No word was found before the end of the * string. */ static int get_word_limits(const char *string, int *wa, int *wb) { int escaped = 0; /* True if the next character is escaped */ /* * Skip leading white-space. */ for(*wa=0; isspace((int)(unsigned char)string[*wa]); (*wa)++) ; /* * Find the first unescaped space, stopping early if the end of the * string is reached. */ for(*wb = *wa; ; (*wb)++) { int c = string[*wb]; if(c=='\\') escaped = !escaped; else if((!escaped && isspace((int)(unsigned char)c)) || c=='\0') break; }; return *wa == *wb; } /*....................................................................... * Display introductory text to the user, formatted according to the * current terminal width and enclosed in a box of asterixes. * * Input: * gl GetLine * The resource object of gl_get_line(). */ static void show_demo_introduction(GetLine *gl) { int start; /* The column in which gl_display_text() left the cursor */ int i; /* * Break the indtroductory text into an array of strings, so as to * avoid overflowing any compiler string limits. */ const char *doc[] = { "This program demonstrates the use of the pca_lookup_file() function ", "for finding executables in the UNIX PATH. It also demonstrates ", "tab completion of the names of executables found in the path. For ", "example, if you type:\n\n ta\n\nthen hit the tab key, you will be ", "presented with a list of executables such as tar and tail whose names ", "start with the string \"ta\". If you decide to add an \"r\" to select ", "the tar command, then you type return, the full pathname of the tar ", "program will be printed.\n\nThe file demo2.c contains the code ", "of this program, and is fully commented to enable its use as ", "a working example of how to use the facilities documented in the ", "pca_lookup_file man page.\n"}; /* * Form the top line of the documentation box by filling the area of * the line between a " *" prefix and a "* " suffix with asterixes. */ printf("\n"); gl_display_text(gl, 0, " *", "* ", '*', 80, 0, "\n"); /* * Justify the documentation text within margins of asterixes. */ for(start=0,i=0; i= 0; i++) start = gl_display_text(gl, 0, " * ", " * ", ' ', 80, start,doc[i]); /* * Draw the bottom line of the documentation box. */ gl_display_text(gl, 0, " *", "* ", '*', 80, 0, "\n"); printf("\n"); } #endif /* ifndef WITHOUT_FILE_SYSTEM */ genometools-1.5.1/src/external/libtecla-1.6.1/demo3.c000066400000000000000000000633051211610345200220570ustar00rootroot00000000000000/* * Copyright (c) 2002, 2003, 2004 by Martin C. Shepherd * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include #include #include #include #ifdef HAVE_SELECT #ifdef HAVE_SYS_SELECT_H #include #endif #endif #include #include #include #include #include #include "libtecla.h" /* * The SignalActions object provides a way to temporarily install * a signal handler to a given set of signals, and later restore all * of the signal handlers that this displaced. */ typedef struct { int nsignal; /* The number of signals on the host OS */ sigset_t mask; /* The set of signals who's signal handlers */ /* are stored in the following actions[] */ /* array. */ struct sigaction *actions; /* An array of nsignal actions */ } SignalActions; static SignalActions *new_SignalActions(void); static SignalActions *del_SignalActions(SignalActions *si); static int displace_signal_handlers(SignalActions *si, sigset_t *mask, void (*handler)(int)); static int reinstate_signal_handlers(SignalActions *si); /* Return resources, restore the terminal to a usable state and exit */ static void cleanup_and_exit(GetLine *gl, SignalActions *si, int status); /* The function which displays the introductory text of the demo */ static void show_demo_introduction(GetLine *gl); /* A signal-aware version of select() */ static int demo_sigselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout, sigset_t *mask, SignalActions *si); /* * The following variables are accessed from signal handlers. Note * that these variables don't need to be either volatile or * sig_atomic_t because: * * 1. Outside of signal handlers we only access them when signal * delivery is blocked, so we know that no signal handlers can * be accessing them at that time. * * 2. When the signal handlers that set these variables are installed, * the sa_mask member of the sigaction structure is used to ensure * that only one instance of these signal handlers can be running * at a time, so we also know that there can't be simultaneous * accesses to them by multiple signal handlers. */ static GetLine *demo_gl; /* The line editor object */ static sigjmp_buf demo_setjmp_buffer; /* The sigsetjmp() buffer */ static int demo_setjmp_signo = -1; /* The signal that was caught */ /* Signal handlers */ static void demo_signal_handler(int signo); static void demo_setjmp_handler(int signo); /* * Set the amount of time that gl_get_line() should wait for I/O before * returning to let the external event loop continue. */ #define DEMO_IO_TIMEOUT 100000000 /* ns => 100ms */ /* The timeout handler */ static GL_TIMEOUT_FN(demo_timeout_fn); /*....................................................................... * This program demonstrates the use of gl_get_line() from an external * event loop. It takes no arguments. */ int main(int argc, char *argv[]) { int major,minor,micro; /* The version number of the library */ GetLine *gl=NULL; /* The resource object of gl_get_line() */ SignalActions *si=NULL; /* Temporary storage of displaced signal */ /* handlers. */ sigset_t all_signal_mask; /* The set of signals known by gl_get_line() */ /* * This program requires select(). */ #if !defined(HAVE_SELECT) fprintf(stderr, "The select() system call isn't available - aborting.\n"); exit(1); #else /* * Create the line editor, specifying a maximum line length of 500 bytes, * and 10000 bytes to allocate to storage of historical input lines. */ gl = demo_gl = new_GetLine(500, 5000); if(!gl) cleanup_and_exit(gl, si, 1); /* * Allocate an object in which to temporarily record displaced * signal handlers. */ si = new_SignalActions(); if(!si) cleanup_and_exit(gl, si, 1); /* * If the user has the LC_CTYPE or LC_ALL environment variables set, * enable display of characters corresponding to the specified locale. */ (void) setlocale(LC_CTYPE, ""); /* * Lookup and display the version number of the library. */ libtecla_version(&major, &minor, µ); printf( "\n Welcome to the server-mode demo program of libtecla version %d.%d.%d\n", major, minor, micro); /* * Display some introductory text, left-justifying it within the current * width of the terminal and enclosing it in a box of asterixes. */ show_demo_introduction(gl); /* * Load history. */ #ifndef WITHOUT_FILE_SYSTEM (void) gl_load_history(gl, "~/.demo_history", "#"); #endif /* * In this demo, rather than having gl_get_line() return immediately * when it would otherwise have to wait for I/O, we register a timeout * callback which causes gl_get_line() to give up waiting after a short * interval. */ gl_inactivity_timeout(gl, demo_timeout_fn, NULL, 0, DEMO_IO_TIMEOUT); /* * Install our signal handlers for process termination, suspension and * terminal resize signals. Ignore process continuation signals. */ gl_tty_signals(demo_signal_handler, demo_signal_handler, SIG_DFL, demo_signal_handler); /* * Get a list of all of the signals that gl_get_line() currently catches. */ gl_list_signals(gl, &all_signal_mask); /* * Switch gl_get_line() to non-blocking server mode. */ if(gl_io_mode(gl, GL_SERVER_MODE)) cleanup_and_exit(gl, si, 1); /* * Instruct gl_get_line() to unblock any signals that it catches * while waiting for input. Note that in non-blocking server mode, * this is only necessary when using gl_inactivity_timeout() to make * gl_get_line() block for a non-zero amount of time. */ gl_catch_blocked(gl); /* * Enter the event loop. */ while(1) { int nready; /* The number of file-descriptors that are */ /* ready for I/O */ fd_set rfds; /* The set of file descriptors to watch for */ /* readability */ fd_set wfds; /* The set of file descriptors to watch for */ /* writability */ /* * Construct the sets of file descriptors to be watched by select(), * starting from empty sets. */ FD_ZERO(&rfds); FD_ZERO(&wfds); /* * To ensure that no signals are received whos handlers might change * the requirements for the contents of the above signal sets, block * all of the signals that we are handling. */ sigprocmask(SIG_BLOCK, &all_signal_mask, NULL); /* * Depending on which direction of I/O gl_get_line()s is currently * waiting for, add the terminal file descriptor to either the set * of file descriptors to watch for readability, or those to watch * for writability. Note that at the start of a new line, such as * after an error, or the return of a completed line, we need to * wait for writability, so that a prompt can be written. */ switch(gl_pending_io(gl)) { case GLP_READ: FD_SET(STDIN_FILENO, &rfds); break; default: FD_SET(STDIN_FILENO, &wfds); break; }; /* * Wait for I/O to become possible on the selected file descriptors. * The following is a signal-aware wrapper around the select() system * call. This wrapper guarantees that if any of the signals marked in * all_signal_mask arrive after the statement above where we blocked * these signals, it will detect this and abort with nready=-1 and * errno=EINTR. If instead, we just unblocked the above signals just * before calling a normal call to select(), there would be a small * window of time between those two statements in which a signal could * arrive without aborting select(). This would be a problem, since * the functions called by our signal handler may change the type * of I/O that gl_get_line() wants us to wait for in select(). */ nready = demo_sigselect(STDIN_FILENO + 1, &rfds, &wfds, NULL, NULL, &all_signal_mask, si); /* * We can now unblock our signals again. */ sigprocmask(SIG_UNBLOCK, &all_signal_mask, NULL); /* * Did an I/O error occur? */ if(nready < 0 && errno != EINTR) cleanup_and_exit(gl, si, 1); /* * If the terminal file descriptor is now ready for I/O, call * gl_get_line() to continue editing the current input line. */ if(FD_ISSET(STDIN_FILENO, &rfds) || FD_ISSET(STDIN_FILENO, &wfds)) { /* * Start or continue editing an input line. */ char *line = gl_get_line(gl, "$ ", NULL, 0); /* * Did the user finish entering a new line? */ if(line) { /* * Before writing messages to the terminal, start a new line and * switch back to normal terminal I/O. */ gl_normal_io(gl); /* * Display what was entered. */ if(printf("You entered: %s", line) < 0 || fflush(stdout)) break; /* * Implement a few simple commands. */ if(strcmp(line, "exit\n")==0) cleanup_and_exit(gl, si, 0); else if(strcmp(line, "history\n")==0) gl_show_history(gl, stdout, "%N %T %H\n", 0, -1); else if(strcmp(line, "size\n")==0) { GlTerminalSize size = gl_terminal_size(gl, 80, 24); printf("Terminal size = %d columns x %d lines.\n", size.ncolumn, size.nline); } else if(strcmp(line, "clear\n")==0) { if(gl_erase_terminal(gl)) return 1; }; /* * To resume command-line editing, return the terminal to raw, * non-blocking I/O mode. */ gl_raw_io(gl); /* * If gl_get_line() returned NULL because of an error or end-of-file, * abort the program. */ } else if(gl_return_status(gl) == GLR_ERROR || gl_return_status(gl) == GLR_EOF) { cleanup_and_exit(gl, si, 1); }; }; }; #endif return 0; } /*....................................................................... * This function is called to return resources to the system and restore * the terminal to its original state before exiting the process. * * Input: * gl GetLine * The line editor. * si SignalActions * The repository for displaced signal handlers. * status int The exit code of the process. */ static void cleanup_and_exit(GetLine *gl, SignalActions *si, int status) { /* * Restore the terminal to its original state before exiting the program. */ gl_normal_io(gl); /* * Save historical command lines. */ #ifndef WITHOUT_FILE_SYSTEM (void) gl_save_history(gl, "~/.demo_history", "#", -1); #endif /* * Clean up. */ gl = del_GetLine(gl); si = del_SignalActions(si); /* * Exit the process. */ exit(status); } /*....................................................................... * This is a signal-aware wrapper around the select() system call. It * is designed to facilitate reliable signal handling of a given set * of signals, without the race conditions that would usually surround * the use of select(). See the "RELIABLE SIGNAL HANDLING" section of * the gl_get_line(3) man page for further details. * * Provided that the calling function has blocked the specified set of * signals before calling this function, this function guarantees that * select() will be aborted by any signal that arrives between the * time that the caller blocked the specified signals and this * function returns. On return these signals will again be blocked to * prevent any signals that arrive after select() returns, from being * missed by the caller. * * Note that this function is written not to be specific to this * program, and is thus suitable for use in other programs, whether or * not they use gl_get_line(). * * Also note that this function depends on the NSIG preprocessor * constant being >= the maximum number of signals available on the * host operating system. Under BSD and SysV, this macro is set * appropriately in signal.h. On other systems, a reasonably large * guess should be substituted. Although nothing terrible will happen * if a value that is too small is chosen, signal numbers that exceed * the specified value of NSIG will be ignored by this function. A * more robust method than depending on nsig would be to use the * POSIX sigismember() function to count valid signals, and use this * to allocate the array of sigaction structures used to preserve * * * Input: * n int The number of file descriptors to pay * attention to at the start of each of the * following sets of file descriptors. * readfds fd_set * The set of file descriptors to check for * readability, or NULL if not pertinent. * wwritefds fd_set * The set of file descriptors to check for * writability, or NULL if not pertinent. * exceptfds fd_set * The set of file descriptors to check for * the arrival of urgent data, or NULL if * not pertinent. * timeout struct timeval * The maximum time that select() should * wait, or NULL to wait forever. * mask sigset_t * The set of signals to catch. * si SignalHandlers * An object in which to preserve temporary * copies signal handlers. * Output: * return int > 0 The number of entries in all of the * sets of descriptors that are ready * for I/O. * 0 Select() timed out. * -1 Error (see errno). */ static int demo_sigselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout, sigset_t *mask, SignalActions *si) { /* * The reason that the the following variables are marked as volatile * is to prevent the compiler from placing their values in registers * that might not be saved and restored by sigsetjmp(). */ volatile sigset_t old_mask; /* The displaced process signal mask */ volatile int status; /* The return value of select() */ /* * Make sure that all of the specified signals are blocked. This is * redundant if the caller has already blocked signals. */ if(sigprocmask(SIG_BLOCK, mask, (sigset_t *) &old_mask) < 0) return -1; /* * Record the fact that no signal has been caught yet. */ demo_setjmp_signo = -1; /* * Now set up the point where our temporary signal handlers will return * control if a signal is received. */ if(sigsetjmp(demo_setjmp_buffer, 1) == 0) { /* * Now install the temporary signal handlers that cause the above * sigsetjmp() to return non-zero when a signal is detected. */ if(displace_signal_handlers(si, mask, demo_setjmp_handler)) { reinstate_signal_handlers(si); return 1; }; /* * Now that we are ready to catch the signals, unblock them. */ sigprocmask(SIG_UNBLOCK, mask, NULL); /* * At last, call select(). */ status = select(n, readfds, writefds, exceptfds, timeout); /* * Block the specified signals again. */ sigprocmask(SIG_BLOCK, mask, NULL); /* * Record the fact that no signal was caught. */ demo_setjmp_signo = -1; }; /* * We can get to this point in one of two ways. Either no signals were * caught, and the above block ran to completion (with demo_setjmp_signo=-1), * or a signal was caught that caused the above block to be aborted, * in which case demo_setjmp_signo will now equal the number of the signal that * was caught, and sigsetjmp() will have restored the process signal * mask to how it was before it was called (ie. all of the specified * signals blocked). * * First restore the signal handlers to how they were on entry to * this function. */ reinstate_signal_handlers(si); /* * Was a signal caught? */ if(demo_setjmp_signo > 0) { sigset_t new_mask; /* * Send the signal again, then unblock its delivery, so that the application's * signal handler gets invoked. */ raise(demo_setjmp_signo); sigemptyset(&new_mask); sigaddset(&new_mask, demo_setjmp_signo); sigprocmask(SIG_UNBLOCK, &new_mask, NULL); /* * Set the return status to show that a signal was caught. */ errno = EINTR; status = -1; }; /* * Now restore the process signal mask to how it was on entry to this * function. */ sigprocmask(SIG_SETMASK, (sigset_t *) &old_mask, NULL); return status; } /*....................................................................... * This is the main signal handler of this demonstration program. If a * SIGINT is received by the process, it arranges that the next call * to gl_get_line() will abort entry of the current line and start * entering a new one. Otherwise it calls the library function which * handles terminal resize signals and process suspension and process * termination signals. Both of the functions called by this signal * handler are designed to be async-signal safe, provided that the * rules laid out in the gl_io_mode(3) man page are followed. */ static void demo_signal_handler(int signo) { if(signo==SIGINT) gl_abandon_line(demo_gl); else gl_handle_signal(signo, demo_gl, 1); } /*....................................................................... * The following signal handler is installed while select() is being * called from within a block of code protected by sigsetjmp(). It * simply records the signal that was caught in setjmp_signo, then * causes the sigsetjmp() to return non-zero. */ static void demo_setjmp_handler(int signo) { demo_setjmp_signo = signo; siglongjmp(demo_setjmp_buffer, 1); } /*....................................................................... * This optional inactivity timeout function is used in this * demonstration to cause gl_get_line() to wait for a small amount of * time for I/O, before returning and allowing the event loop to * continue. This isn't needed if you want gl_get_line() to return * immediately, rather than blocking. */ static GL_TIMEOUT_FN(demo_timeout_fn) { return GLTO_CONTINUE; } /*....................................................................... * Display introductory text to the user, formatted according to the * current terminal width and enclosed in a box of asterixes. * * Input: * gl GetLine * The resource object of gl_get_line(). */ static void show_demo_introduction(GetLine *gl) { int start; /* The column in which gl_display_text() left the cursor */ int i; /* * Break the indtroductory text into an array of strings, so as to * avoid overflowing any compiler string limits. */ const char *doc[] = { "To the user this program appears to act identically to the main ", "demo program. However whereas the code underlying the main demo ", "program uses gl_get_line() in its default configuration, where each ", "call blocks the caller until the user has entered a complete input ", "line, demo3 uses gl_get_line() in its non-blocking server mode, ", "where it must be called repeatedly from an external ", "event loop to incrementally accept entry of the input ", "line, as and when terminal I/O becomes possible. The well commented ", "source code of demo3, which can be found in demo3.c, thus provides ", "a working example of how to use gl_get_line() in a manner that ", "doesn't block the caller. Documentation of this mode can be found ", "in the gl_io_mode(3) man page.\n" }; /* * Form the top line of the documentation box by filling the area of * the line between a " *" prefix and a "* " suffix with asterixes. */ printf("\n"); gl_display_text(gl, 0, " *", "* ", '*', 80, 0, "\n"); /* * Justify the documentation text within margins of asterixes. */ for(start=0,i=0; i= 0; i++) start = gl_display_text(gl, 0, " * ", " * ", ' ', 80, start,doc[i]); /* * Draw the bottom line of the documentation box. */ gl_display_text(gl, 0, " *", "* ", '*', 80, 0, "\n"); printf("\n"); } /*....................................................................... * This is a constructor function for an object who's role is to allow * a signal handler to be assigned to potentially all available signals, * while preserving a copy of the original signal handlers, for later * restration. * * Output: * return SignalActions * The new object, or NULL on error. */ static SignalActions *new_SignalActions(void) { SignalActions *si; /* The object to be returned */ /* * Allocate the container. */ si = malloc(sizeof(SignalActions)); if(!si) { fprintf(stderr, "new_SignalActions: Insufficient memory.\n"); return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_SignalActions(). */ si->nsignal = 0; sigemptyset(&si->mask); si->actions = NULL; /* * Count the number of signals that are available of the host * platform. Note that si->mask has no members set, and that * sigismember() is defined to return -1 if the signal number * isn't valid. */ for(si->nsignal=1; sigismember(&si->mask, si->nsignal) == 0; si->nsignal++) ; /* * Allocate the array of sigaction structures to use to keep a record * of displaced signal handlers. */ si->actions = (struct sigaction *) malloc(sizeof(*si->actions) * si->nsignal); if(!si->actions) { fprintf(stderr, "Insufficient memory for %d sigaction structures.\n", si->nsignal); return del_SignalActions(si); }; return si; } /*....................................................................... * Delete a SignalActions object. * * Input: * si SignalActions * The object to be deleted. * Output: * return SignalActions * The deleted object (always NULL). */ static SignalActions *del_SignalActions(SignalActions *si) { if(si) { if(si->actions) free(si->actions); free(si); }; return NULL; } /*....................................................................... * Replace the signal handlers of all of the signals in 'mask' with * the signal handler 'handler'. * * Input: * si SignalActions * The object in which to record the displaced * signal handlers. * mask sigset_t * The set of signals who's signal handlers * should be displaced. * handler void (*handler)(int) The new signal handler to assign to each * of the signals marked in 'mask'. * Output: * return int 0 - OK. * 1 - Error. */ static int displace_signal_handlers(SignalActions *si, sigset_t *mask, void (*handler)(int)) { int signo; /* A signal number */ struct sigaction action; /* The new signal handler */ /* * Mark the fact that so far we haven't displaced any signal handlers. */ sigemptyset(&si->mask); /* * Set up the description of the new signal handler. Note that * we make sa_mask=mask. This ensures that only one instance of the * signal handler will ever be running at one time. */ action.sa_handler = handler; memcpy(&action.sa_mask, mask, sizeof(*mask)); action.sa_flags = 0; /* * Check each of the available signals to see if it is specified in 'mask'. * If so, install the new signal handler, record the displaced one in * the corresponding element of si->actions[], and make a record in * si->mask that this signal handler has been displaced. */ for(signo=1; signo < si->nsignal; signo++) { if(sigismember(mask, signo)) { if(sigaction(signo, &action, &si->actions[signo]) < 0) { fprintf(stderr, "sigaction error (%s)\n", strerror(errno)); return 1; }; sigaddset(&si->mask, signo); }; }; return 0; } /*....................................................................... * Reinstate any signal handlers displaced by displace_signal_handlers(). * * Input: * sig SignalActions * The object containing the displaced signal * handlers. * Output: * return int 0 - OK. * 1 - Error. */ static int reinstate_signal_handlers(SignalActions *si) { int signo; /* A signal number */ /* * Check each of the available signals to see if it is specified in * si->mask. If so, reinstate the displaced recorded in the * corresponding element of si->actions[], and make a record in * si->mask that this signal handler has been reinstated. */ for(signo=1; signo < si->nsignal; signo++) { if(sigismember(&si->mask, signo)) { if(sigaction(signo, &si->actions[signo], NULL) < 0) { fprintf(stderr, "sigaction error (%s)\n", strerror(errno)); return 1; }; sigdelset(&si->mask, signo); }; }; return 0; } genometools-1.5.1/src/external/libtecla-1.6.1/direader.c000066400000000000000000000201141211610345200226160ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * If file-system access is to be excluded, this module has no function, * so all of its code should be excluded. */ #ifndef WITHOUT_FILE_SYSTEM /* * Standard includes. */ #include #include #include #include /* * Operating system includes. */ #include #include #include #include #include "direader.h" #include "errmsg.h" /* * Use the reentrant POSIX threads version of readdir()? */ #if defined(PREFER_REENTRANT) && defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199506L #define USE_READDIR_R 1 #endif /* * Objects of the following type are used to maintain the resources * needed to read directories. */ struct DirReader { ErrMsg *err; /* The error reporting buffer */ DIR *dir; /* The directory stream (if open, NULL otherwise) */ struct dirent *file; /* The latest directory entry */ #ifdef USE_READDIR_R struct dirent *buffer; /* A buffer used by the threaded version of */ /* readdir() */ int buffer_dim; /* The allocated size of buffer[] */ #endif }; static int _dr_path_is_dir(const char *pathname); /*....................................................................... * Create a new DirReader object. * * Output: * return DirReader * The new object, or NULL on error. */ DirReader *_new_DirReader(void) { DirReader *dr; /* The object to be returned */ /* * Allocate the container. */ dr = (DirReader *) malloc(sizeof(DirReader)); if(!dr) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to _del_DirReader(). */ dr->err = NULL; dr->dir = NULL; dr->file = NULL; #ifdef USE_READDIR_R dr->buffer = NULL; dr->buffer_dim = 0; #endif /* * Allocate a place to record error messages. */ dr->err = _new_ErrMsg(); if(!dr->err) return _del_DirReader(dr); return dr; } /*....................................................................... * Delete a DirReader object. * * Input: * dr DirReader * The object to be deleted. * Output: * return DirReader * The deleted object (always NULL). */ DirReader *_del_DirReader(DirReader *dr) { if(dr) { _dr_close_dir(dr); #ifdef USE_READDIR_R free(dr->buffer); #endif dr->err = _del_ErrMsg(dr->err); free(dr); }; return NULL; } /*....................................................................... * Open a new directory. * * Input: * dr DirReader * The directory reader resource object. * path const char * The directory to be opened. * Input/Output: * errmsg char ** If an error occurs and errmsg isn't NULL, a * pointer to an error description will be assigned * to *errmsg. * Output: * return int 0 - OK. * 1 - Error (see *errmsg for a description). */ int _dr_open_dir(DirReader *dr, const char *path, char **errmsg) { DIR *dir = NULL; /* The directory stream */ /* * If a directory is already open, close it first. */ (void) _dr_close_dir(dr); /* * Is the path a directory? */ if(!_dr_path_is_dir(path)) { if(errmsg) { _err_record_msg(dr->err, "Can't open directory: ", path, END_ERR_MSG); *errmsg = _err_get_msg(dr->err); }; return 1; }; /* * Attempt to open the directory. */ dir = opendir(path); if(!dir) { if(errmsg) { _err_record_msg(dr->err, "Can't open directory: ", path, END_ERR_MSG); *errmsg = _err_get_msg(dr->err); }; return 1; }; /* * If using POSIX threads, allocate a buffer for readdir_r(). */ #ifdef USE_READDIR_R { size_t size; int name_max = pathconf(path, _PC_NAME_MAX); #ifdef NAME_MAX if(name_max < 0) name_max = NAME_MAX; #endif if(name_max < 0) { if(errmsg) { _err_record_msg(dr->err, "Unable to deduce readdir() buffer size.", END_ERR_MSG); *errmsg = _err_get_msg(dr->err); }; closedir(dir); return 1; }; /* * How big a buffer do we need to allocate? */ size = sizeof(struct dirent) + name_max; /* * Extend the buffer? */ if(size > dr->buffer_dim || !dr->buffer) { struct dirent *buffer = (struct dirent *) (dr->buffer ? realloc(dr->buffer, size) : malloc(size)); if(!buffer) { if(errmsg) { _err_record_msg(dr->err, "Insufficient memory for readdir() buffer.", END_ERR_MSG); *errmsg = _err_get_msg(dr->err); }; closedir(dir); errno = ENOMEM; return 1; }; dr->buffer = buffer; dr->buffer_dim = size; }; }; #endif /* * Record the successfully opened directory. */ dr->dir = dir; return 0; } /*....................................................................... * If the DirReader object is currently contains an open directory, * close it. * * Input: * dr DirReader * The directory reader resource object. */ void _dr_close_dir(DirReader *dr) { if(dr && dr->dir) { closedir(dr->dir); dr->dir = NULL; dr->file = NULL; _err_clear_msg(dr->err); }; } /*....................................................................... * Read the next file from the directory opened with _dr_open_dir(). * * Input: * dr DirReader * The directory reader resource object. * Output: * return char * The name of the new file, or NULL if we reached * the end of the directory. */ char *_dr_next_file(DirReader *dr) { /* * Are we currently reading a directory? */ if(dr->dir) { /* * Read the next directory entry. */ #ifdef USE_READDIR_R if(readdir_r(dr->dir, dr->buffer, &dr->file) == 0 && dr->file) return dr->file->d_name; #else dr->file = readdir(dr->dir); if(dr->file) return dr->file->d_name; #endif }; /* * When the end of a directory is reached, close it. */ _dr_close_dir(dr); return NULL; } /*....................................................................... * Return 1 if the specified pathname refers to a directory. * * Input: * pathname const char * The path to test. * Output: * return int 0 - Not a directory. * 1 - pathname[] refers to a directory. */ static int _dr_path_is_dir(const char *pathname) { struct stat statbuf; /* The file-statistics return buffer */ /* * Look up the file attributes. */ if(stat(pathname, &statbuf) < 0) return 0; /* * Is the file a directory? */ return S_ISDIR(statbuf.st_mode) != 0; } #endif /* ifndef WITHOUT_FILE_SYSTEM */ genometools-1.5.1/src/external/libtecla-1.6.1/direader.h000066400000000000000000000035701211610345200226320ustar00rootroot00000000000000#ifndef dirreader_h #define dirreader_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ typedef struct DirReader DirReader; DirReader *_new_DirReader(void); DirReader *_del_DirReader(DirReader *dr); int _dr_open_dir(DirReader *dr, const char *pathname, char **errmsg); char *_dr_next_file(DirReader *dr); void _dr_close_dir(DirReader *dr); #endif genometools-1.5.1/src/external/libtecla-1.6.1/enhance.c000066400000000000000000000520141211610345200224440ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #ifdef HAVE_SELECT #ifdef HAVE_SYS_SELECT_H #include #endif #endif #include #include #include #include #include #if HAVE_SYSV_PTY #include /* System-V stream I/O */ char *ptsname(int fd); int grantpt(int fd); int unlockpt(int fd); #endif #include "libtecla.h" /* * Pseudo-terminal devices are found in the following directory. */ #define PTY_DEV_DIR "/dev/" /* * Pseudo-terminal controller device file names start with the following * prefix. */ #define PTY_CNTRL "pty" /* * Pseudo-terminal slave device file names start with the following * prefix. */ #define PTY_SLAVE "tty" /* * Specify the maximum suffix length for the control and slave device * names. */ #define PTY_MAX_SUFFIX 10 /* * Set the maximum length of the master and slave terminal device filenames, * including space for a terminating '\0'. */ #define PTY_MAX_NAME (sizeof(PTY_DEV_DIR)-1 + \ (sizeof(PTY_SLAVE) > sizeof(PTY_CNTRL) ? \ sizeof(PTY_SLAVE) : sizeof(PTY_CNTRL))-1 \ + PTY_MAX_SUFFIX + 1) /* * Set the maximum length of an input line. */ #define PTY_MAX_LINE 4096 /* * Set the size of the buffer used for accumulating bytes written by the * user's terminal to its stdout. */ #define PTY_MAX_READ 1000 /* * Set the amount of memory used to record history. */ #define PTY_HIST_SIZE 10000 /* * Set the timeout delay used to check for quickly arriving * sequential output from the application. */ #define PTY_READ_TIMEOUT 100000 /* micro-seconds */ static int pty_open_master(const char *prog, int *cntrl, char *slave_name); static int pty_open_slave(const char *prog, char *slave_name); static int pty_child(const char *prog, int slave, char *argv[]); static int pty_parent(const char *prog, int cntrl); static int pty_stop_parent(int waserr, int cntrl, GetLine *gl, char *rbuff); static GL_FD_EVENT_FN(pty_read_from_program); static int pty_write_to_fd(int fd, const char *string, int n); static void pty_child_exited(int sig); static int pty_master_readable(int fd, long usec); /*....................................................................... * Run a program with enhanced terminal editing facilities. * * Usage: * enhance program [args...] */ int main(int argc, char *argv[]) { int cntrl = -1; /* The fd of the pseudo-terminal controller device */ int slave = -1; /* The fd of the pseudo-terminal slave device */ pid_t pid; /* The return value of fork() */ int status; /* The return statuses of the parent and child functions */ char slave_name[PTY_MAX_NAME]; /* The filename of the slave end of the */ /* pseudo-terminal. */ char *prog; /* The name of the program (ie. argv[0]) */ /* * Check the arguments. */ if(argc < 2) { fprintf(stderr, "Usage: %s [arguments...]\n", argv[0]); return 1; }; /* * Get the name of the program. */ prog = argv[0]; /* * If the user has the LC_CTYPE or LC_ALL environment variables set, * enable display of characters corresponding to the specified locale. */ (void) setlocale(LC_CTYPE, ""); /* * If the program is taking its input from a pipe or a file, or * sending its output to something other than a terminal, run the * program without tecla. */ if(!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO)) { if(execvp(argv[1], argv + 1) < 0) { fprintf(stderr, "%s: Unable to execute %s (%s).\n", prog, argv[1], strerror(errno)); fflush(stderr); _exit(1); }; }; /* * Open the master side of a pseudo-terminal pair, and return * the corresponding file descriptor and the filename of the * slave end of the pseudo-terminal. */ if(pty_open_master(prog, &cntrl, slave_name)) return 1; /* * Set up a signal handler to watch for the child process exiting. */ signal(SIGCHLD, pty_child_exited); /* * The above signal handler sends the parent process a SIGINT signal. * This signal is caught by gl_get_line(), which resets the terminal * settings, and if the application signal handler for this signal * doesn't abort the process, gl_get_line() returns NULL with errno * set to EINTR. Arrange to ignore the signal, so that gl_get_line() * returns and we have a chance to cleanup. */ signal(SIGINT, SIG_IGN); /* * We will read user input in one process, and run the user's program * in a child process. */ pid = fork(); if(pid < 0) { fprintf(stderr, "%s: Unable to fork child process (%s).\n", prog, strerror(errno)); return 1; }; /* * Are we the parent? */ if(pid!=0) { status = pty_parent(prog, cntrl); close(cntrl); } else { close(cntrl); /* The child doesn't use the slave device */ signal(SIGCHLD, pty_child_exited); if((slave = pty_open_slave(prog, slave_name)) >= 0) { status = pty_child(prog, slave, argv + 1); close(slave); } else { status = 1; }; }; return status; } /*....................................................................... * Open the master side of a pseudo-terminal pair, and return * the corresponding file descriptor and the filename of the * slave end of the pseudo-terminal. * * Input/Output: * prog const char * The name of this program. * cntrl int * The file descriptor of the pseudo-terminal * controller device will be assigned tp *cntrl. * slave_name char * The file-name of the pseudo-terminal slave device * will be recorded in slave_name[], which must have * at least PTY_MAX_NAME elements. * Output: * return int 0 - OK. * 1 - Error. */ static int pty_open_master(const char *prog, int *cntrl, char *slave_name) { char master_name[PTY_MAX_NAME]; /* The filename of the master device */ DIR *dir; /* The directory iterator */ struct dirent *file; /* A file in "/dev" */ /* * Mark the controller device as not opened yet. */ *cntrl = -1; /* * On systems with the Sys-V pseudo-terminal interface, we don't * have to search for a free master terminal. We just open /dev/ptmx, * and if there is a free master terminal device, we are given a file * descriptor connected to it. */ #if HAVE_SYSV_PTY *cntrl = open("/dev/ptmx", O_RDWR); if(*cntrl >= 0) { /* * Get the filename of the slave side of the pseudo-terminal. */ char *name = ptsname(*cntrl); if(name) { if(strlen(name)+1 > PTY_MAX_NAME) { fprintf(stderr, "%s: Slave pty filename too long.\n", prog); return 1; }; strcpy(slave_name, name); /* * If unable to get the slave name, discard the controller file descriptor, * ready to try a search instead. */ } else { close(*cntrl); *cntrl = -1; }; } else { #endif /* * On systems without /dev/ptmx, or if opening /dev/ptmx failed, * we open one master terminal after another, until one that isn't * in use by another program is found. * * Open the devices directory. */ dir = opendir(PTY_DEV_DIR); if(!dir) { fprintf(stderr, "%s: Couldn't open %s (%s)\n", prog, PTY_DEV_DIR, strerror(errno)); return 1; }; /* * Look for pseudo-terminal controller device files in the devices * directory. */ while(*cntrl < 0 && (file = readdir(dir))) { if(strncmp(file->d_name, PTY_CNTRL, sizeof(PTY_CNTRL)-1) == 0) { /* * Get the common extension of the control and slave filenames. */ const char *ext = file->d_name + sizeof(PTY_CNTRL)-1; if(strlen(ext) > PTY_MAX_SUFFIX) continue; /* * Attempt to open the control file. */ strcpy(master_name, PTY_DEV_DIR); strcat(master_name, PTY_CNTRL); strcat(master_name, ext); *cntrl = open(master_name, O_RDWR); if(*cntrl < 0) continue; /* * Attempt to open the matching slave file. */ strcpy(slave_name, PTY_DEV_DIR); strcat(slave_name, PTY_SLAVE); strcat(slave_name, ext); }; }; closedir(dir); #if HAVE_SYSV_PTY }; #endif /* * Did we fail to find a pseudo-terminal pair that we could open? */ if(*cntrl < 0) { fprintf(stderr, "%s: Unable to find a free pseudo-terminal.\n", prog); return 1; }; /* * System V systems require the program that opens the master to * grant access to the slave side of the pseudo-terminal. */ #ifdef HAVE_SYSV_PTY if(grantpt(*cntrl) < 0 || unlockpt(*cntrl) < 0) { fprintf(stderr, "%s: Unable to unlock terminal (%s).\n", prog, strerror(errno)); return 1; }; #endif /* * Success. */ return 0; } /*....................................................................... * Open the slave end of a pseudo-terminal. * * Input: * prog const char * The name of this program. * slave_name char * The filename of the slave device. * Output: * return int The file descriptor of the successfully opened * slave device, or < 0 on error. */ static int pty_open_slave(const char *prog, char *slave_name) { int fd; /* The file descriptor of the slave device */ /* * Place the process in its own process group. In system-V based * OS's, this ensures that when the pseudo-terminal is opened, it * becomes the controlling terminal of the process. */ if(setsid() < 0) { fprintf(stderr, "%s: Unable to form new process group (%s).\n", prog, strerror(errno)); return -1; }; /* * Attempt to open the specified device. */ fd = open(slave_name, O_RDWR); if(fd < 0) { fprintf(stderr, "%s: Unable to open pseudo-terminal slave device (%s).\n", prog, strerror(errno)); return -1; }; /* * On system-V streams based systems, we need to push the stream modules * that implement pseudo-terminal and termio interfaces. At least on * Solaris, which pushes these automatically when a slave is opened, * this is redundant, so ignore errors when pushing the modules. */ #if HAVE_SYSV_PTY (void) ioctl(fd, I_PUSH, "ptem"); (void) ioctl(fd, I_PUSH, "ldterm"); /* * On BSD based systems other than SunOS 4.x, the following makes the * pseudo-terminal the controlling terminal of the child process. * According to the pseudo-terminal example code in Steven's * Advanced programming in the unix environment, the !defined(CIBAUD) * part of the clause prevents this from being used under SunOS. Since * I only have his code with me, and won't have access to the book, * I don't know why this is necessary. */ #elif defined(TIOCSCTTY) && !defined(CIBAUD) if(ioctl(fd, TIOCSCTTY, (char *) 0) < 0) { fprintf(stderr, "%s: Unable to establish controlling terminal (%s).\n", prog, strerror(errno)); close(fd); return -1; }; #endif return fd; } /*....................................................................... * Read input from the controlling terminal of the program, using * gl_get_line(), and feed it to the user's program running in a child * process, via the controller side of the pseudo-terminal. Also pass * data received from the user's program via the conroller end of * the pseudo-terminal, to stdout. * * Input: * prog const char * The name of this program. * cntrl int The file descriptor of the controller end of the * pseudo-terminal. * Output: * return int 0 - OK. * 1 - Error. */ static int pty_parent(const char *prog, int cntrl) { GetLine *gl = NULL; /* The gl_get_line() resource object */ char *line; /* An input line read from the user */ char *rbuff=NULL; /* A buffer for reading from the pseudo terminal */ /* * Allocate the gl_get_line() resource object. */ gl = new_GetLine(PTY_MAX_LINE, PTY_HIST_SIZE); if(!gl) return pty_stop_parent(1, cntrl, gl, rbuff); /* * Allocate a buffer to use to accumulate bytes read from the * pseudo-terminal. */ rbuff = (char *) malloc(PTY_MAX_READ+1); if(!rbuff) return pty_stop_parent(1, cntrl, gl, rbuff); rbuff[0] = '\0'; /* * Register an event handler to watch for data appearing from the * user's program on the controller end of the pseudo terminal. */ if(gl_watch_fd(gl, cntrl, GLFD_READ, pty_read_from_program, rbuff)) return pty_stop_parent(1, cntrl, gl, rbuff); /* * Read input lines from the user and pass them on to the user's program, * by writing to the controller end of the pseudo-terminal. */ while((line=gl_get_line(gl, rbuff, NULL, 0))) { if(pty_write_to_fd(cntrl, line, strlen(line))) return pty_stop_parent(1, cntrl, gl, rbuff); rbuff[0] = '\0'; }; return pty_stop_parent(0, cntrl, gl, rbuff); } /*....................................................................... * This is a private return function of pty_parent(), used to release * dynamically allocated resources, close the controller end of the * pseudo-terminal, and wait for the child to exit. It returns the * exit status of the child process, unless the caller reports an * error itself, in which case the caller's error status is returned. * * Input: * waserr int True if the caller is calling this function because * an error occured. * cntrl int The file descriptor of the controller end of the * pseudo-terminal. * gl GetLine * The resource object of gl_get_line(). * rbuff char * The buffer used to accumulate bytes read from * the pseudo-terminal. * Output: * return int The desired exit status of the program. */ static int pty_stop_parent(int waserr, int cntrl, GetLine *gl, char *rbuff) { int status; /* The return status of the child process */ /* * Close the controller end of the terminal. */ close(cntrl); /* * Delete the resource object. */ gl = del_GetLine(gl); /* * Delete the read buffer. */ if(rbuff) free(rbuff); /* * Wait for the user's program to end. */ (void) wait(&status); /* * Return either our error status, or the return status of the child * program. */ return waserr ? 1 : status; } /*....................................................................... * Run the user's program, with its stdin and stdout connected to the * slave end of the psuedo-terminal. * * Input: * prog const char * The name of this program. * slave int The file descriptor of the slave end of the * pseudo terminal. * argv char *[] The argument vector to pass to the user's program, * where argv[0] is the name of the user's program, * and the last argument is followed by a pointer * to NULL. * Output: * return int If this function returns at all, an error must * have occured when trying to overlay the process * with the user's program. In this case 1 is * returned. */ static int pty_child(const char *prog, int slave, char *argv[]) { struct termios attr; /* The terminal attributes */ /* * We need to stop the pseudo-terminal from echoing everything that we send it. */ if(tcgetattr(slave, &attr)) { fprintf(stderr, "%s: Can't get pseudo-terminal attributes (%s).\n", prog, strerror(errno)); return 1; }; attr.c_lflag &= ~(ECHO); while(tcsetattr(slave, TCSADRAIN, &attr)) { if(errno != EINTR) { fprintf(stderr, "%s: tcsetattr error: %s\n", prog, strerror(errno)); return 1; }; }; /* * Arrange for stdin, stdout and stderr to be connected to the slave device, * ignoring errors that imply that either stdin or stdout is closed. */ while(dup2(slave, STDIN_FILENO) < 0 && errno==EINTR) ; while(dup2(slave, STDOUT_FILENO) < 0 && errno==EINTR) ; while(dup2(slave, STDERR_FILENO) < 0 && errno==EINTR) ; /* * Run the user's program. */ if(execvp(argv[0], argv) < 0) { fprintf(stderr, "%s: Unable to execute %s (%s).\n", prog, argv[0], strerror(errno)); fflush(stderr); _exit(1); }; return 0; /* This should never be reached */ } /*....................................................................... * This is the event-handler that is called by gl_get_line() whenever * there is tet waiting to be read from the user's program, via the * controller end of the pseudo-terminal. See libtecla.h for details * about its arguments. */ static GL_FD_EVENT_FN(pty_read_from_program) { char *nlptr; /* A pointer to the last newline in the accumulated string */ char *crptr; /* A pointer to the last '\r' in the accumulated string */ char *nextp; /* A pointer to the next unprocessed character */ /* * Get the read buffer in which we are accumulating a line to be * forwarded to stdout. */ char *rbuff = (char *) data; /* * New data may arrive while we are processing the current read, and * it is more efficient to display this here than to keep returning to * gl_get_line() and have it display the latest prefix as a prompt, * followed by the current input line, so we loop, delaying a bit at * the end of each iteration to check for more data arriving from * the application, before finally returning to gl_get_line() when * no more input is available. */ do { /* * Get the current length of the output string. */ int len = strlen(rbuff); /* * Read the text from the program. */ int nnew = read(fd, rbuff + len, PTY_MAX_READ - len); if(nnew < 0) return GLFD_ABORT; len += nnew; /* * Nul terminate the accumulated string. */ rbuff[len] = '\0'; /* * Find the last newline and last carriage return in the buffer, if any. */ nlptr = strrchr(rbuff, '\n'); crptr = strrchr(rbuff, '\r'); /* * We want to output up to just before the last newline or carriage * return. If there are no newlines of carriage returns in the line, * and the buffer is full, then we should output the whole line. In * all cases a new output line will be started after the latest text * has been output. The intention is to leave any incomplete line * in the buffer, for (perhaps temporary) use as the current prompt. */ if(nlptr) { nextp = crptr && crptr < nlptr ? crptr : nlptr; } else if(crptr) { nextp = crptr; } else if(len >= PTY_MAX_READ) { nextp = rbuff + len; } else { nextp = NULL; }; /* * Do we have any text to output yet? */ if(nextp) { /* * If there was already some text in rbuff before this function * was called, then it will have been used as a prompt. Arrange * to rewrite this prefix, plus the new suffix, by moving back to * the start of the line. */ if(len > 0) (void) pty_write_to_fd(STDOUT_FILENO, "\r", 1); /* * Write everything up to the last newline to stdout. */ (void) pty_write_to_fd(STDOUT_FILENO, rbuff, nextp - rbuff); /* * Start a new line. */ (void) pty_write_to_fd(STDOUT_FILENO, "\r\n", 2); /* * Skip trailing carriage returns and newlines. */ while(*nextp=='\n' || *nextp=='\r') nextp++; /* * Move any unwritten text following the newline, to the start of the * buffer. */ memmove(rbuff, nextp, len - (nextp - rbuff) + 1); }; } while(pty_master_readable(fd, PTY_READ_TIMEOUT)); /* * Make the incomplete line in the output buffer the current prompt. */ gl_replace_prompt(gl, rbuff); return GLFD_REFRESH; } /*....................................................................... * Write a given string to a specified file descriptor. * * Input: * fd int The file descriptor to write to. * string const char * The string to write (of at least 'n' characters). * n int The number of characters to write. * Output: * return int 0 - OK. * 1 - Error. */ static int pty_write_to_fd(int fd, const char *string, int n) { int ndone = 0; /* The number of characters written so far */ /* * Do as many writes as are needed to write the whole string. */ while(ndone < n) { int nnew = write(fd, string + ndone, n - ndone); if(nnew > 0) ndone += nnew; else if(errno != EINTR) return 1; }; return 0; } /*....................................................................... * This is the signal handler that is called when the child process * that is running the user's program exits for any reason. It closes * the slave end of the terminal, so that gl_get_line() in the parent * process sees an end of file. */ static void pty_child_exited(int sig) { raise(SIGINT); } /*....................................................................... * Return non-zero after a given amount of time if there is data waiting * to be read from a given file descriptor. * * Input: * fd int The descriptor to watch. * usec long The number of micro-seconds to wait for input to * arrive before giving up. * Output: * return int 0 - No data is waiting to be read (or select isn't * available). * 1 - Data is waiting to be read. */ static int pty_master_readable(int fd, long usec) { #if HAVE_SELECT fd_set rfds; /* The set of file descriptors to check */ struct timeval timeout; /* The timeout */ FD_ZERO(&rfds); FD_SET(fd, &rfds); timeout.tv_sec = 0; timeout.tv_usec = usec; return select(fd+1, &rfds, NULL, NULL, &timeout) == 1; #else return 0; #endif } genometools-1.5.1/src/external/libtecla-1.6.1/errmsg.c000066400000000000000000000114471211610345200223470ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include #include "errmsg.h" /* * Encapsulate the error reporting buffer in an opaque object. */ struct ErrMsg { char msg[ERR_MSG_LEN+1]; /* An error message */ }; /*....................................................................... * Create a new error-message object. * * Output: * return ErrMsg * The new object, or NULL on error. */ ErrMsg *_new_ErrMsg(void) { ErrMsg *err; /* The object to be returned */ /* * Allocate the container. */ err = malloc(sizeof(ErrMsg)); if(!err) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_ErrMsg(). */ err->msg[0] = '\0'; return err; } /*....................................................................... * Delete an error-message object. * * Input: * err ErrMsg * The object to be deleted. * Output: * return ErrMsg * The deleted object (always NULL). */ ErrMsg *_del_ErrMsg(ErrMsg *err) { if(err) { free(err); }; return NULL; } /*....................................................................... * Record the concatenation of a list of string arguments in an error * message object. The last argument must be END_ERR_MSG to terminate * the argument list. * * Input: * err ErrMsg * The error-message container. * ... const char * Zero or more strings to be concatenated in buff[]. * ... const char * The last argument must always be END_ERR_MSG to * terminate the argument list. */ void _err_record_msg(ErrMsg *err, ...) { va_list ap; /* The variable argument list */ const char *s; /* The string being printed */ size_t msglen = 0; /* The total length of the message */ /* * Nowhere to record the result? */ if(!err) { errno = EINVAL; return; }; /* * Concatenate the list of argument strings in err->msg[]. */ va_start(ap, err); while((s = va_arg(ap, const char *)) != END_ERR_MSG) { /* * How much room is left in the output buffer (note that the output * buffer has ERR_MSG_LEN+1 elements). */ int nleft = ERR_MSG_LEN - msglen; /* * How long is the next string to be appended? */ size_t slen = strlen(s); /* * If there is any room left, append as much of the string * as will fit. */ if(nleft > 0) { int nnew = slen < nleft ? slen : nleft; strncpy(err->msg + msglen, s, nnew); msglen += nnew; }; }; va_end(ap); /* * Terminate the message. */ err->msg[msglen] = '\0'; return; } /*....................................................................... * Return a pointer to the error message buffer. * * Input: * err ErrMsg * The container of the error message buffer. * Output: * return char * The current error message, or NULL if err==NULL. */ char *_err_get_msg(ErrMsg *err) { return err ? err->msg : NULL; } /*....................................................................... * Replace the current error message with an empty string. * * Input: * err ErrMsg * The container of the error message buffer. */ void _err_clear_msg(ErrMsg *err) { if(err) err->msg[0] = '\0'; } genometools-1.5.1/src/external/libtecla-1.6.1/errmsg.h000066400000000000000000000056241211610345200223540ustar00rootroot00000000000000#ifndef errmsg_h #define errmsg_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * Set the longest expected length of an error message (excluding its * '\0' terminator. Since any message over a nominal terminal width of * 80 characters is going to look a mess, it makes no sense to support * huge lengths. Note that many uses of strings declared with this * macro assume that it will be at least 81, so don't reduce it below * this limit. */ #define ERR_MSG_LEN 128 /* * Provide an opaque typedef to the error-message object. */ typedef struct ErrMsg ErrMsg; /* * The following token is used to terminate the argument lists of calls * to _err_record_msg(). */ #define END_ERR_MSG ((const char *)0) /* * Allocate a new error-message buffer. */ ErrMsg *_new_ErrMsg(void); /* * Delete an error message buffer. */ ErrMsg *_del_ErrMsg(ErrMsg *err); /* * Concatenate a list of string arguments into the specified buffer, buff[], * which has an allocated size of buffdim characters. * The last argument must be END_ERR_MSG to terminate the argument list. */ void _err_record_msg(ErrMsg *err, ...); /* * Replace the current error message with an empty string. */ void _err_clear_msg(ErrMsg *err); /* * Return a pointer to the error message buffer. This is * a '\0' terminated character array containing ERR_MSG_LEN+1 * elements. */ char *_err_get_msg(ErrMsg *err); #endif genometools-1.5.1/src/external/libtecla-1.6.1/expand.c000066400000000000000000001302401211610345200223200ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * If file-system access is to be excluded, this module has no function, * so all of its code should be excluded. */ #ifndef WITHOUT_FILE_SYSTEM #include #include #include #include #include "freelist.h" #include "direader.h" #include "pathutil.h" #include "homedir.h" #include "stringrp.h" #include "libtecla.h" #include "ioutil.h" #include "expand.h" #include "errmsg.h" /* * Specify the number of elements to extend the files[] array by * when it proves to be too small. This also sets the initial size * of the array. */ #define MATCH_BLK_FACT 256 /* * A list of directory iterators is maintained using nodes of the * following form. */ typedef struct DirNode DirNode; struct DirNode { DirNode *next; /* The next directory in the list */ DirNode *prev; /* The node that precedes this node in the list */ DirReader *dr; /* The directory reader object */ }; typedef struct { FreeList *mem; /* Memory for DirNode list nodes */ DirNode *head; /* The head of the list of used and unused cache nodes */ DirNode *next; /* The next unused node between head and tail */ DirNode *tail; /* The tail of the list of unused cache nodes */ } DirCache; /* * Specify how many directory cache nodes to allocate at a time. */ #define DIR_CACHE_BLK 20 /* * Set the maximum length allowed for usernames. */ #define USR_LEN 100 /* * Set the maximum length allowed for environment variable names. */ #define ENV_LEN 100 /* * Set the default number of spaces place between columns when listing * a set of expansions. */ #define EF_COL_SEP 2 struct ExpandFile { ErrMsg *err; /* The error reporting buffer */ StringGroup *sg; /* A list of string segments in which */ /* matching filenames are stored. */ DirCache cache; /* The cache of directory reader objects */ PathName *path; /* The pathname being matched */ HomeDir *home; /* Home-directory lookup object */ int files_dim; /* The allocated dimension of result.files[] */ char usrnam[USR_LEN+1]; /* A user name */ char envnam[ENV_LEN+1]; /* An environment variable name */ FileExpansion result; /* The container used to return the results of */ /* expanding a path. */ }; static int ef_record_pathname(ExpandFile *ef, const char *pathname, int remove_escapes); static char *ef_cache_pathname(ExpandFile *ef, const char *pathname, int remove_escapes); static void ef_clear_files(ExpandFile *ef); static DirNode *ef_open_dir(ExpandFile *ef, const char *pathname); static DirNode *ef_close_dir(ExpandFile *ef, DirNode *node); static char *ef_expand_special(ExpandFile *ef, const char *path, int pathlen); static int ef_match_relative_pathname(ExpandFile *ef, DirReader *dr, const char *pattern, int separate); static int ef_matches_range(int c, const char *pattern, const char **endp); static int ef_string_matches_pattern(const char *file, const char *pattern, int xplicit, const char *nextp); static int ef_cmp_strings(const void *v1, const void *v2); /* * Encapsulate the formatting information needed to layout a * multi-column listing of expansions. */ typedef struct { int term_width; /* The width of the terminal (characters) */ int column_width; /* The number of characters within in each column. */ int ncol; /* The number of columns needed */ int nline; /* The number of lines needed */ } EfListFormat; /* * Given the current terminal width, and a list of file expansions, * determine how to best use the terminal width to display a multi-column * listing of expansions. */ static void ef_plan_listing(FileExpansion *result, int term_width, EfListFormat *fmt); /* * Display a given line of a multi-column list of file-expansions. */ static int ef_format_line(FileExpansion *result, EfListFormat *fmt, int lnum, GlWriteFn *write_fn, void *data); /*....................................................................... * Create the resources needed to expand filenames. * * Output: * return ExpandFile * The new object, or NULL on error. */ ExpandFile *new_ExpandFile(void) { ExpandFile *ef; /* The object to be returned */ /* * Allocate the container. */ ef = (ExpandFile *) malloc(sizeof(ExpandFile)); if(!ef) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_ExpandFile(). */ ef->err = NULL; ef->sg = NULL; ef->cache.mem = NULL; ef->cache.head = NULL; ef->cache.next = NULL; ef->cache.tail = NULL; ef->path = NULL; ef->home = NULL; ef->result.files = NULL; ef->result.nfile = 0; ef->usrnam[0] = '\0'; ef->envnam[0] = '\0'; /* * Allocate a place to record error messages. */ ef->err = _new_ErrMsg(); if(!ef->err) return del_ExpandFile(ef); /* * Allocate a list of string segments for storing filenames. */ ef->sg = _new_StringGroup(_pu_pathname_dim()); if(!ef->sg) return del_ExpandFile(ef); /* * Allocate a freelist for allocating directory cache nodes. */ ef->cache.mem = _new_FreeList(sizeof(DirNode), DIR_CACHE_BLK); if(!ef->cache.mem) return del_ExpandFile(ef); /* * Allocate a pathname buffer. */ ef->path = _new_PathName(); if(!ef->path) return del_ExpandFile(ef); /* * Allocate an object for looking up home-directories. */ ef->home = _new_HomeDir(); if(!ef->home) return del_ExpandFile(ef); /* * Allocate an array for files. This will be extended later if needed. */ ef->files_dim = MATCH_BLK_FACT; ef->result.files = (char **) malloc(sizeof(ef->result.files[0]) * ef->files_dim); if(!ef->result.files) { errno = ENOMEM; return del_ExpandFile(ef); }; return ef; } /*....................................................................... * Delete a ExpandFile object. * * Input: * ef ExpandFile * The object to be deleted. * Output: * return ExpandFile * The deleted object (always NULL). */ ExpandFile *del_ExpandFile(ExpandFile *ef) { if(ef) { DirNode *dnode; /* * Delete the string segments. */ ef->sg = _del_StringGroup(ef->sg); /* * Delete the cached directory readers. */ for(dnode=ef->cache.head; dnode; dnode=dnode->next) dnode->dr = _del_DirReader(dnode->dr); /* * Delete the memory from which the DirNode list was allocated, thus * deleting the list at the same time. */ ef->cache.mem = _del_FreeList(ef->cache.mem, 1); ef->cache.head = ef->cache.tail = ef->cache.next = NULL; /* * Delete the pathname buffer. */ ef->path = _del_PathName(ef->path); /* * Delete the home-directory lookup object. */ ef->home = _del_HomeDir(ef->home); /* * Delete the array of pointers to files. */ if(ef->result.files) { free(ef->result.files); ef->result.files = NULL; }; /* * Delete the error report buffer. */ ef->err = _del_ErrMsg(ef->err); /* * Delete the container. */ free(ef); }; return NULL; } /*....................................................................... * Expand a pathname, converting ~user/ and ~/ patterns at the start * of the pathname to the corresponding home directories, replacing * $envvar with the value of the corresponding environment variable, * and then, if there are any wildcards, matching these against existing * filenames. * * If no errors occur, a container is returned containing the array of * files that resulted from the expansion. If there were no wildcards * in the input pathname, this will contain just the original pathname * after expansion of ~ and $ expressions. If there were any wildcards, * then the array will contain the files that matched them. Note that * if there were any wildcards but no existing files match them, this * is counted as an error and NULL is returned. * * The supported wildcards and their meanings are: * * - Match any sequence of zero or more characters. * ? - Match any single character. * [chars] - Match any single character that appears in 'chars'. * If 'chars' contains an expression of the form a-b, * then any character between a and b, including a and b, * matches. The '-' character looses its special meaning * as a range specifier when it appears at the start * of the sequence of characters. * [^chars] - The same as [chars] except that it matches any single * character that doesn't appear in 'chars'. * * Wildcard expressions are applied to individual filename components. * They don't match across directory separators. A '.' character at * the beginning of a filename component must also be matched * explicitly by a '.' character in the input pathname, since these * are UNIX's hidden files. * * Input: * ef ExpandFile * The pathname expansion resource object. * path char * The path name to be expanded. * pathlen int The length of the suffix of path[] that * constitutes the filename to be expanded, * or -1 to specify that the whole of the * path string should be used. Note that * regardless of the value of this argument, * path[] must contain a '\0' terminated * string, since this function checks that * pathlen isn't mistakenly too long. * Output: * return FileExpansion * A pointer to a container within the given * ExpandFile object. This contains an array * of the pathnames that resulted from expanding * ~ and $ expressions and from matching any * wildcards, sorted into lexical order. * This container and its contents will be * recycled on subsequent calls, so if you need * to keep the results of two successive runs, * you will either have to allocate a private * copy of the array, or use two ExpandFile * objects. * * On error NULL is returned. A description * of the error can be acquired by calling the * ef_last_error() function. */ FileExpansion *ef_expand_file(ExpandFile *ef, const char *path, int pathlen) { DirNode *dnode; /* A directory-reader cache node */ const char *dirname; /* The name of the top level directory of the search */ const char *pptr; /* A pointer into path[] */ int wild; /* True if the path contains any wildcards */ /* * Check the arguments. */ if(!ef || !path) { if(ef) { _err_record_msg(ef->err, "ef_expand_file: NULL path argument", END_ERR_MSG); }; errno = EINVAL; return NULL; }; /* * If the caller specified that the whole of path[] be matched, * work out the corresponding length. */ if(pathlen < 0 || pathlen > strlen(path)) pathlen = strlen(path); /* * Discard previous expansion results. */ ef_clear_files(ef); /* * Preprocess the path, expanding ~/, ~user/ and $envvar references, * using ef->path as a work directory and returning a pointer to * a copy of the resulting pattern in the cache. */ path = ef_expand_special(ef, path, pathlen); if(!path) return NULL; /* * Clear the pathname buffer. */ _pn_clear_path(ef->path); /* * Does the pathname contain any wildcards? */ for(wild=0,pptr=path; !wild && *pptr; pptr++) { switch(*pptr) { case '\\': /* Skip escaped characters */ if(pptr[1]) pptr++; break; case '*': case '?': case '[': /* A wildcard character? */ wild = 1; break; }; }; /* * If there are no wildcards to match, copy the current expanded * path into the output array, removing backslash escapes while doing so. */ if(!wild) { if(ef_record_pathname(ef, path, 1)) return NULL; /* * Does the filename exist? */ ef->result.exists = _pu_file_exists(ef->result.files[0]); /* * Match wildcards against existing files. */ } else { /* * Only existing files that match the pattern will be returned in the * cache. */ ef->result.exists = 1; /* * Treat matching of the root-directory as a special case since it * isn't contained in a directory. */ if(strcmp(path, FS_ROOT_DIR) == 0) { if(ef_record_pathname(ef, FS_ROOT_DIR, 0)) return NULL; } else { /* * What should the top level directory of the search be? */ if(strncmp(path, FS_ROOT_DIR, FS_ROOT_DIR_LEN) == 0) { dirname = FS_ROOT_DIR; if(!_pn_append_to_path(ef->path, FS_ROOT_DIR, -1, 0)) { _err_record_msg(ef->err, "Insufficient memory to record path", END_ERR_MSG); return NULL; }; path += FS_ROOT_DIR_LEN; } else { dirname = FS_PWD; }; /* * Open the top-level directory of the search. */ dnode = ef_open_dir(ef, dirname); if(!dnode) return NULL; /* * Recursively match successive directory components of the path. */ if(ef_match_relative_pathname(ef, dnode->dr, path, 0)) { dnode = ef_close_dir(ef, dnode); return NULL; }; /* * Cleanup. */ dnode = ef_close_dir(ef, dnode); }; /* * No files matched? */ if(ef->result.nfile < 1) { _err_record_msg(ef->err, "No files match", END_ERR_MSG); return NULL; }; /* * Sort the pathnames that matched. */ qsort(ef->result.files, ef->result.nfile, sizeof(ef->result.files[0]), ef_cmp_strings); }; /* * Return the result container. */ return &ef->result; } /*....................................................................... * Attempt to recursively match the given pattern with the contents of * the current directory, descending sub-directories as needed. * * Input: * ef ExpandFile * The pathname expansion resource object. * dr DirReader * The directory reader object of the directory * to be searched. * pattern const char * The pattern to match with files in the current * directory. * separate int When appending a filename from the specified * directory to ef->pathname, insert a directory * separator between the existing pathname and * the filename, unless separate is zero. * Output: * return int 0 - OK. * 1 - Error. */ static int ef_match_relative_pathname(ExpandFile *ef, DirReader *dr, const char *pattern, int separate) { const char *nextp; /* The pointer to the character that follows the part */ /* of the pattern that is to be matched with files */ /* in the current directory. */ char *file; /* The name of the file being matched */ int pathlen; /* The length of ef->pathname[] on entry to this */ /* function */ /* * Record the current length of the pathname string recorded in * ef->pathname[]. */ pathlen = strlen(ef->path->name); /* * Get a pointer to the character that follows the end of the part of * the pattern that should be matched to files within the current directory. * This will either point to a directory separator, or to the '\0' terminator * of the pattern string. */ for(nextp=pattern; *nextp && strncmp(nextp, FS_DIR_SEP, FS_DIR_SEP_LEN) != 0; nextp++) ; /* * Read each file from the directory, attempting to match it to the * current pattern. */ while((file=_dr_next_file(dr)) != NULL) { /* * Does the latest file match the pattern up to nextp? */ if(ef_string_matches_pattern(file, pattern, file[0]=='.', nextp)) { /* * Append the new directory entry to the current matching pathname. */ if((separate && _pn_append_to_path(ef->path, FS_DIR_SEP, -1, 0)==NULL) || _pn_append_to_path(ef->path, file, -1, 0)==NULL) { _err_record_msg(ef->err, "Insufficient memory to record path", END_ERR_MSG); return 1; }; /* * If we have reached the end of the pattern, record the accumulated * pathname in the list of matching files. */ if(*nextp == '\0') { if(ef_record_pathname(ef, ef->path->name, 0)) return 1; /* * If the matching directory entry is a subdirectory, and the * next character of the pattern is a directory separator, * recursively call the current function to scan the sub-directory * for matches. */ } else if(_pu_path_is_dir(ef->path->name) && strncmp(nextp, FS_DIR_SEP, FS_DIR_SEP_LEN) == 0) { /* * If the pattern finishes with the directory separator, then * record the pathame as matching. */ if(nextp[FS_DIR_SEP_LEN] == '\0') { if(ef_record_pathname(ef, ef->path->name, 0)) return 1; /* * Match files within the directory. */ } else { DirNode *subdnode = ef_open_dir(ef, ef->path->name); if(subdnode) { if(ef_match_relative_pathname(ef, subdnode->dr, nextp+FS_DIR_SEP_LEN, 1)) { subdnode = ef_close_dir(ef, subdnode); return 1; }; subdnode = ef_close_dir(ef, subdnode); }; }; }; /* * Remove the latest filename from the pathname string, so that * another matching file can be appended. */ ef->path->name[pathlen] = '\0'; }; }; return 0; } /*....................................................................... * Record a new matching filename. * * Input: * ef ExpandFile * The filename-match resource object. * pathname const char * The pathname to record. * remove_escapes int If true, remove backslash escapes in the * recorded copy of the pathname. * Output: * return int 0 - OK. * 1 - Error (ef->err will contain a * description of the error). */ static int ef_record_pathname(ExpandFile *ef, const char *pathname, int remove_escapes) { char *copy; /* The recorded copy of pathname[] */ /* * Attempt to make a copy of the pathname in the cache. */ copy = ef_cache_pathname(ef, pathname, remove_escapes); if(!copy) return 1; /* * If there isn't room to record a pointer to the recorded pathname in the * array of files, attempt to extend the array. */ if(ef->result.nfile + 1 > ef->files_dim) { int files_dim = ef->files_dim + MATCH_BLK_FACT; char **files = (char **) realloc(ef->result.files, files_dim * sizeof(files[0])); if(!files) { _err_record_msg(ef->err, "Insufficient memory to record all of the matching filenames", END_ERR_MSG); errno = ENOMEM; return 1; }; ef->result.files = files; ef->files_dim = files_dim; }; /* * Record a pointer to the new match. */ ef->result.files[ef->result.nfile++] = copy; return 0; } /*....................................................................... * Record a pathname in the cache. * * Input: * ef ExpandFile * The filename-match resource object. * pathname char * The pathname to record. * remove_escapes int If true, remove backslash escapes in the * copy of the pathname. * Output: * return char * The pointer to the copy of the pathname. * On error NULL is returned and a description * of the error is left in ef->err. */ static char *ef_cache_pathname(ExpandFile *ef, const char *pathname, int remove_escapes) { char *copy = _sg_store_string(ef->sg, pathname, remove_escapes); if(!copy) _err_record_msg(ef->err, "Insufficient memory to store pathname", END_ERR_MSG); return copy; } /*....................................................................... * Clear the results of the previous expansion operation, ready for the * next. * * Input: * ef ExpandFile * The pathname expansion resource object. */ static void ef_clear_files(ExpandFile *ef) { _clr_StringGroup(ef->sg); _pn_clear_path(ef->path); ef->result.exists = 0; ef->result.nfile = 0; _err_clear_msg(ef->err); return; } /*....................................................................... * Get a new directory reader object from the cache. * * Input: * ef ExpandFile * The pathname expansion resource object. * pathname const char * The pathname of the directory. * Output: * return DirNode * The cache entry of the new directory reader, * or NULL on error. On error, ef->err will * contain a description of the error. */ static DirNode *ef_open_dir(ExpandFile *ef, const char *pathname) { char *errmsg = NULL; /* An error message from a called function */ DirNode *node; /* The cache node used */ /* * Get the directory reader cache. */ DirCache *cache = &ef->cache; /* * Extend the cache if there are no free cache nodes. */ if(!cache->next) { node = (DirNode *) _new_FreeListNode(cache->mem); if(!node) { _err_record_msg(ef->err, "Insufficient memory to open a new directory", END_ERR_MSG); return NULL; }; /* * Initialize the cache node. */ node->next = NULL; node->prev = NULL; node->dr = NULL; /* * Allocate a directory reader object. */ node->dr = _new_DirReader(); if(!node->dr) { _err_record_msg(ef->err, "Insufficient memory to open a new directory", END_ERR_MSG); node = (DirNode *) _del_FreeListNode(cache->mem, node); return NULL; }; /* * Append the node to the cache list. */ node->prev = cache->tail; if(cache->tail) cache->tail->next = node; else cache->head = node; cache->next = cache->tail = node; }; /* * Get the first unused node, but don't remove it from the list yet. */ node = cache->next; /* * Attempt to open the specified directory. */ if(_dr_open_dir(node->dr, pathname, &errmsg)) { _err_record_msg(ef->err, errmsg, END_ERR_MSG); return NULL; }; /* * Now that we have successfully opened the specified directory, * remove the cache node from the list, and relink the list around it. */ cache->next = node->next; if(node->prev) node->prev->next = node->next; else cache->head = node->next; if(node->next) node->next->prev = node->prev; else cache->tail = node->prev; node->next = node->prev = NULL; /* * Return the successfully initialized cache node to the caller. */ return node; } /*....................................................................... * Return a directory reader object to the cache, after first closing * the directory that it was managing. * * Input: * ef ExpandFile * The pathname expansion resource object. * node DirNode * The cache entry of the directory reader, as returned * by ef_open_dir(). * Output: * return DirNode * The deleted DirNode (ie. allways NULL). */ static DirNode *ef_close_dir(ExpandFile *ef, DirNode *node) { /* * Get the directory reader cache. */ DirCache *cache = &ef->cache; /* * Close the directory. */ _dr_close_dir(node->dr); /* * Return the node to the tail of the cache list. */ node->next = NULL; node->prev = cache->tail; if(cache->tail) cache->tail->next = node; else cache->head = cache->tail = node; if(!cache->next) cache->next = node; return NULL; } /*....................................................................... * Return non-zero if the specified file name matches a given glob * pattern. * * Input: * file const char * The file-name component to be matched to the pattern. * pattern const char * The start of the pattern to match against file[]. * xplicit int If non-zero, the first character must be matched * explicitly (ie. not with a wildcard). * nextp const char * The pointer to the the character following the * end of the pattern in pattern[]. * Output: * return int 0 - Doesn't match. * 1 - The file-name string matches the pattern. */ static int ef_string_matches_pattern(const char *file, const char *pattern, int xplicit, const char *nextp) { const char *pptr = pattern; /* The pointer used to scan the pattern */ const char *fptr = file; /* The pointer used to scan the filename string */ /* * Match each character of the pattern in turn. */ while(pptr < nextp) { /* * Handle the next character of the pattern. */ switch(*pptr) { /* * A match zero-or-more characters wildcard operator. */ case '*': /* * Skip the '*' character in the pattern. */ pptr++; /* * If wildcards aren't allowed, the pattern doesn't match. */ if(xplicit) return 0; /* * If the pattern ends with a the '*' wildcard, then the * rest of the filename matches this. */ if(pptr >= nextp) return 1; /* * Using the wildcard to match successively longer sections of * the remaining characters of the filename, attempt to match * the tail of the filename against the tail of the pattern. */ for( ; *fptr; fptr++) { if(ef_string_matches_pattern(fptr, pptr, 0, nextp)) return 1; }; return 0; /* The pattern following the '*' didn't match */ break; /* * A match-one-character wildcard operator. */ case '?': /* * If there is a character to be matched, skip it and advance the * pattern pointer. */ if(!xplicit && *fptr) { fptr++; pptr++; /* * If we hit the end of the filename string, there is no character * matching the operator, so the string doesn't match. */ } else { return 0; }; break; /* * A character range operator, with the character ranges enclosed * in matching square brackets. */ case '[': if(xplicit || !ef_matches_range(*fptr++, ++pptr, &pptr)) return 0; break; /* * A backslash in the pattern prevents the following character as * being seen as a special character. */ case '\\': pptr++; /* Note fallthrough to default */ /* * A normal character to be matched explicitly. */ default: if(*fptr == *pptr) { fptr++; pptr++; } else { return 0; }; break; }; /* * After passing the first character, turn off the explicit match * requirement. */ xplicit = 0; }; /* * To get here the pattern must have been exhausted. If the filename * string matched, then the filename string must also have been * exhausted. */ return *fptr == '\0'; } /*....................................................................... * Match a character range expression terminated by an unescaped close * square bracket. * * Input: * c int The character to be matched with the range * pattern. * pattern const char * The range pattern to be matched (ie. after the * initiating '[' character). * endp const char ** On output a pointer to the character following the * range expression will be assigned to *endp. * Output: * return int 0 - Doesn't match. * 1 - The character matched. */ static int ef_matches_range(int c, const char *pattern, const char **endp) { const char *pptr = pattern; /* The pointer used to scan the pattern */ int invert = 0; /* True to invert the sense of the match */ int matched = 0; /* True if the character matched the pattern */ /* * If the first character is a caret, the sense of the match is * inverted and only if the character isn't one of those in the * range, do we say that it matches. */ if(*pptr == '^') { pptr++; invert = 1; }; /* * The hyphen is only a special character when it follows the first * character of the range (not including the caret). */ if(*pptr == '-') { pptr++; if(c == '-') { *endp = pptr; matched = 1; }; /* * Skip other leading '-' characters since they make no sense. */ while(*pptr == '-') pptr++; }; /* * The hyphen is only a special character when it follows the first * character of the range (not including the caret or a hyphen). */ if(*pptr == ']') { pptr++; if(c == ']') { *endp = pptr; matched = 1; }; }; /* * Having dealt with the characters that have special meanings at * the beginning of a character range expression, see if the * character matches any of the remaining characters of the range, * up until a terminating ']' character is seen. */ while(!matched && *pptr && *pptr != ']') { /* * Is this a range of characters signaled by the two end characters * separated by a hyphen? */ if(*pptr == '-') { if(pptr[1] != ']') { if(c >= pptr[-1] && c <= pptr[1]) matched = 1; pptr += 2; }; /* * A normal character to be compared directly. */ } else if(*pptr++ == c) { matched = 1; }; }; /* * Find the terminating ']'. */ while(*pptr && *pptr != ']') pptr++; /* * Did we find a terminating ']'? */ if(*pptr == ']') { *endp = pptr + 1; return matched ? !invert : invert; }; /* * If the pattern didn't end with a ']' then it doesn't match, regardless * of the value of the required sense of the match. */ *endp = pptr; return 0; } /*....................................................................... * This is a qsort() comparison function used to sort strings. * * Input: * v1, v2 void * Pointers to the two strings to be compared. * Output: * return int -1 -> v1 < v2. * 0 -> v1 == v2 * 1 -> v1 > v2 */ static int ef_cmp_strings(const void *v1, const void *v2) { char * const *s1 = (char * const *) v1; char * const *s2 = (char * const *) v2; return strcmp(*s1, *s2); } /*....................................................................... * Preprocess a path, expanding ~/, ~user/ and $envvar references, using * ef->path as a work buffer, then copy the result into a cache entry, * and return a pointer to this copy. * * Input: * ef ExpandFile * The resource object of the file matcher. * pathlen int The length of the prefix of path[] to be expanded. * Output: * return char * A pointer to a copy of the output path in the * cache. On error NULL is returned, and a description * of the error is left in ef->err. */ static char *ef_expand_special(ExpandFile *ef, const char *path, int pathlen) { int spos; /* The index of the start of the path segment that needs */ /* to be copied from path[] to the output pathname. */ int ppos; /* The index of a character in path[] */ char *pptr; /* A pointer into the output path */ int escaped; /* True if the previous character was a '\' */ int i; /* * Clear the pathname buffer. */ _pn_clear_path(ef->path); /* * We need to perform two passes, one to expand environment variables * and a second to do tilde expansion. This caters for the case * where an initial dollar expansion yields a tilde expression. */ escaped = 0; for(spos=ppos=0; ppos < pathlen; ppos++) { int c = path[ppos]; if(escaped) { escaped = 0; } else if(c == '\\') { escaped = 1; } else if(c == '$') { int envlen; /* The length of the environment variable */ char *value; /* The value of the environment variable */ /* * Record the preceding unrecorded part of the pathname. */ if(spos < ppos && _pn_append_to_path(ef->path, path + spos, ppos-spos, 0) == NULL) { _err_record_msg(ef->err, "Insufficient memory to expand path", END_ERR_MSG); return NULL; }; /* * Skip the dollar. */ ppos++; /* * Copy the environment variable name that follows the dollar into * ef->envnam[], stopping if a directory separator or end of string * is seen. */ for(envlen=0; envlenenvnam[envlen] = path[ppos++]; /* * If the username overflowed the buffer, treat it as invalid (note that * on most unix systems only 8 characters are allowed in a username, * whereas our ENV_LEN is much bigger than that. */ if(envlen >= ENV_LEN) { _err_record_msg(ef->err, "Environment variable name too long", END_ERR_MSG); return NULL; }; /* * Terminate the environment variable name. */ ef->envnam[envlen] = '\0'; /* * Lookup the value of the environment variable. */ value = getenv(ef->envnam); if(!value) { _err_record_msg(ef->err, "No expansion found for: $", ef->envnam, END_ERR_MSG); return NULL; }; /* * Copy the value of the environment variable into the output pathname. */ if(_pn_append_to_path(ef->path, value, -1, 0) == NULL) { _err_record_msg(ef->err, "Insufficient memory to expand path", END_ERR_MSG); return NULL; }; /* * Record the start of the uncopied tail of the input pathname. */ spos = ppos; }; }; /* * Record the uncopied tail of the pathname. */ if(spos < ppos && _pn_append_to_path(ef->path, path + spos, ppos-spos, 0) == NULL) { _err_record_msg(ef->err, "Insufficient memory to expand path", END_ERR_MSG); return NULL; }; /* * If the first character of the resulting pathname is a tilde, * then attempt to substitute the home directory of the specified user. */ pptr = ef->path->name; if(*pptr == '~' && path[0] != '\\') { int usrlen; /* The length of the username following the tilde */ const char *homedir; /* The home directory of the user */ int homelen; /* The length of the home directory string */ int plen; /* The current length of the path */ int skip=0; /* The number of characters to skip after the ~user */ /* * Get the current length of the output path. */ plen = strlen(ef->path->name); /* * Skip the tilde. */ pptr++; /* * Copy the optional username that follows the tilde into ef->usrnam[]. */ for(usrlen=0; usrlenusrnam[usrlen] = *pptr++; /* * If the username overflowed the buffer, treat it as invalid (note that * on most unix systems only 8 characters are allowed in a username, * whereas our USR_LEN is much bigger than that. */ if(usrlen >= USR_LEN) { _err_record_msg(ef->err, "Username too long", END_ERR_MSG); return NULL; }; /* * Terminate the username string. */ ef->usrnam[usrlen] = '\0'; /* * Lookup the home directory of the user. */ homedir = _hd_lookup_home_dir(ef->home, ef->usrnam); if(!homedir) { _err_record_msg(ef->err, _hd_last_home_dir_error(ef->home), END_ERR_MSG); return NULL; }; homelen = strlen(homedir); /* * ~user and ~ are usually followed by a directory separator to * separate them from the file contained in the home directory. * If the home directory is the root directory, then we don't want * to follow the home directory by a directory separator, so we must * erase it. */ if(strcmp(homedir, FS_ROOT_DIR) == 0 && strncmp(pptr, FS_DIR_SEP, FS_DIR_SEP_LEN) == 0) { skip = FS_DIR_SEP_LEN; }; /* * If needed, increase the size of the pathname buffer to allow it * to accomodate the home directory instead of the tilde expression. * Note that pptr may not be valid after this call. */ if(_pn_resize_path(ef->path, plen - usrlen - 1 - skip + homelen)==NULL) { _err_record_msg(ef->err, "Insufficient memory to expand filename", END_ERR_MSG); return NULL; }; /* * Move the part of the pathname that follows the tilde expression to * the end of where the home directory will need to be inserted. */ memmove(ef->path->name + homelen, ef->path->name + 1 + usrlen + skip, plen - usrlen - 1 - skip+1); /* * Write the home directory at the beginning of the string. */ for(i=0; ipath->name[i] = homedir[i]; }; /* * Copy the result into the cache, and return a pointer to the copy. */ return ef_cache_pathname(ef, ef->path->name, 0); } /*....................................................................... * Return a description of the last path-expansion error that occurred. * * Input: * ef ExpandFile * The path-expansion resource object. * Output: * return char * The description of the last error. */ const char *ef_last_error(ExpandFile *ef) { return ef ? _err_get_msg(ef->err) : "NULL ExpandFile argument"; } /*....................................................................... * Print out an array of matching files. * * Input: * result FileExpansion * The container of the sorted array of * expansions. * fp FILE * The output stream to write to. * term_width int The width of the terminal. * Output: * return int 0 - OK. * 1 - Error. */ int ef_list_expansions(FileExpansion *result, FILE *fp, int term_width) { return _ef_output_expansions(result, _io_write_stdio, fp, term_width); } /*....................................................................... * Print out an array of matching files via a callback. * * Input: * result FileExpansion * The container of the sorted array of * expansions. * write_fn GlWriteFn * The function to call to write the * expansions or 0 to discard the output. * data void * Anonymous data to pass to write_fn(). * term_width int The width of the terminal. * Output: * return int 0 - OK. * 1 - Error. */ int _ef_output_expansions(FileExpansion *result, GlWriteFn *write_fn, void *data, int term_width) { EfListFormat fmt; /* List formatting information */ int lnum; /* The sequential number of the line to print next */ /* * Not enough space to list anything? */ if(term_width < 1) return 0; /* * Do we have a callback to write via, and any expansions to be listed? */ if(write_fn && result && result->nfile>0) { /* * Work out how to arrange the listing into fixed sized columns. */ ef_plan_listing(result, term_width, &fmt); /* * Print the listing to the specified stream. */ for(lnum=0; lnum < fmt.nline; lnum++) { if(ef_format_line(result, &fmt, lnum, write_fn, data)) return 1; }; }; return 0; } /*....................................................................... * Work out how to arrange a given array of completions into a listing * of one or more fixed size columns. * * Input: * result FileExpansion * The set of completions to be listed. * term_width int The width of the terminal. A lower limit of * zero is quietly enforced. * Input/Output: * fmt EfListFormat * The formatting information will be assigned * to the members of *fmt. */ static void ef_plan_listing(FileExpansion *result, int term_width, EfListFormat *fmt) { int maxlen; /* The length of the longest matching string */ int i; /* * Ensure that term_width >= 0. */ if(term_width < 0) term_width = 0; /* * Start by assuming the worst case, that either nothing will fit * on the screen, or that there are no matches to be listed. */ fmt->term_width = term_width; fmt->column_width = 0; fmt->nline = fmt->ncol = 0; /* * Work out the maximum length of the matching strings. */ maxlen = 0; for(i=0; infile; i++) { int len = strlen(result->files[i]); if(len > maxlen) maxlen = len; }; /* * Nothing to list? */ if(maxlen == 0) return; /* * Split the available terminal width into columns of * maxlen + EF_COL_SEP characters. */ fmt->column_width = maxlen; fmt->ncol = fmt->term_width / (fmt->column_width + EF_COL_SEP); /* * If the column width is greater than the terminal width, zero columns * will have been selected. Set a lower limit of one column. Leave it * up to the caller how to deal with completions who's widths exceed * the available terminal width. */ if(fmt->ncol < 1) fmt->ncol = 1; /* * How many lines of output will be needed? */ fmt->nline = (result->nfile + fmt->ncol - 1) / fmt->ncol; return; } /*....................................................................... * Render one line of a multi-column listing of completions, using a * callback function to pass the output to an arbitrary destination. * * Input: * result FileExpansion * The container of the sorted array of * completions. * fmt EfListFormat * Formatting information. * lnum int The index of the line to print, starting * from 0, and incrementing until the return * value indicates that there is nothing more * to be printed. * write_fn GlWriteFn * The function to call to write the line, or * 0 to discard the output. * data void * Anonymous data to pass to write_fn(). * Output: * return int 0 - Line printed ok. * 1 - Nothing to print. */ static int ef_format_line(FileExpansion *result, EfListFormat *fmt, int lnum, GlWriteFn *write_fn, void *data) { int col; /* The index of the list column being output */ /* * If the line index is out of bounds, there is nothing to be written. */ if(lnum < 0 || lnum >= fmt->nline) return 1; /* * If no output function has been provided, return as though the line * had been printed. */ if(!write_fn) return 0; /* * Print the matches in 'ncol' columns, sorted in line order within each * column. */ for(col=0; col < fmt->ncol; col++) { int m = col*fmt->nline + lnum; /* * Is there another match to be written? Note that in general * the last line of a listing will have fewer filled columns * than the initial lines. */ if(m < result->nfile) { char *file = result->files[m]; /* * How long are the completion and type-suffix strings? */ int flen = strlen(file); /* * Write the completion string. */ if(write_fn(data, file, flen) != flen) return 1; /* * If another column follows the current one, pad to its start with spaces. */ if(col+1 < fmt->ncol) { /* * The following constant string of spaces is used to pad the output. */ static const char spaces[] = " "; static const int nspace = sizeof(spaces) - 1; /* * Pad to the next column, using as few sub-strings of the spaces[] * array as possible. */ int npad = fmt->column_width + EF_COL_SEP - flen; while(npad>0) { int n = npad > nspace ? nspace : npad; if(write_fn(data, spaces + nspace - n, n) != n) return 1; npad -= n; }; }; }; }; /* * Start a new line. */ { char s[] = "\r\n"; int n = strlen(s); if(write_fn(data, s, n) != n) return 1; }; return 0; } #endif /* ifndef WITHOUT_FILE_SYSTEM */ genometools-1.5.1/src/external/libtecla-1.6.1/expand.h000066400000000000000000000037271211610345200223360ustar00rootroot00000000000000#ifndef expand_h #define expand_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * This header is not for use by external applicatons. It contains * internal immplementation features of the libtecla library, which * may change incompatibly between releases. */ /* * Print a list of expansions via a callback function. */ int _ef_output_expansions(FileExpansion *result, GlWriteFn *write_fn, void *data, int term_width); #endif genometools-1.5.1/src/external/libtecla-1.6.1/freelist.c000066400000000000000000000275231211610345200226670ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include "freelist.h" typedef struct FreeListBlock FreeListBlock; struct FreeListBlock { FreeListBlock *next; /* The next block in the list */ char *nodes; /* The array of free-list nodes */ }; struct FreeList { size_t node_size; /* The size of a free-list node */ unsigned blocking_factor; /* The number of nodes per block */ long nbusy; /* The number of nodes that are in use */ long ntotal; /* The total number of nodes in the free list */ FreeListBlock *block; /* The head of the list of free-list blocks */ void *free_list; /* The free-list of nodes */ }; static FreeListBlock *_new_FreeListBlock(FreeList *fl); static FreeListBlock *_del_FreeListBlock(FreeListBlock *fl); static void _thread_FreeListBlock(FreeList *fl, FreeListBlock *block); /*....................................................................... * Allocate a new free-list from blocks of 'blocking_factor' objects of size * node_size. * * Input: * node_size size_t The size of the free-list nodes to be returned * by _new_FreeListNode(). Use sizeof() to * determine this. * blocking_factor unsigned The number of objects of size 'object_size' * to allocate per block. * Output: * return FreeList * The new freelist, or NULL on error. */ FreeList *_new_FreeList(size_t node_size, unsigned blocking_factor) { FreeList *fl; /* The new free-list container */ /* * When a free-list node is on the free-list, it is used as a (void *) * link field. Roundup node_size to a mulitple of the size of a void * pointer. This, plus the fact that the array of nodes is obtained via * malloc, which returns memory suitably aligned for any object, will * ensure that the first sizeof(void *) bytes of each node will be * suitably aligned to use as a (void *) link pointer. */ node_size = sizeof(void *) * ((node_size + sizeof(void *) - 1) / sizeof(void *)); /* * Enfore a minimum block size. */ if(blocking_factor < 1) blocking_factor = 1; /* * Allocate the container of the free list. */ fl = (FreeList *) malloc(sizeof(FreeList)); if(!fl) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to _del_FreeList(). */ fl->node_size = node_size; fl->blocking_factor = blocking_factor; fl->nbusy = 0; fl->ntotal = 0; fl->block = NULL; fl->free_list = NULL; /* * Allocate the first block of memory. */ fl->block = _new_FreeListBlock(fl); if(!fl->block) { errno = ENOMEM; return _del_FreeList(fl, 1); }; /* * Add the new list of nodes to the free-list. */ fl->free_list = fl->block->nodes; /* * Return the free-list for use. */ return fl; } /*....................................................................... * Re-thread a freelist to reclaim all allocated nodes. * This function should not be called unless if it is known that none * of the currently allocated nodes are still being used. * * Input: * fl FreeList * The free-list to be reset, or NULL. */ void _rst_FreeList(FreeList *fl) { if(fl) { FreeListBlock *block; /* * Re-thread the nodes of each block into individual free-lists. */ for(block=fl->block; block; block=block->next) _thread_FreeListBlock(fl, block); /* * Link all of the block freelists into one large freelist. */ fl->free_list = NULL; for(block=fl->block; block; block=block->next) { /* * Locate the last node of the current block. */ char *last_node = block->nodes + fl->node_size * (fl->blocking_factor - 1); /* * Make the link-field of the last node point to the first * node of the current freelist, then make the first node of the * new block the start of the freelist. */ *(void **)last_node = fl->free_list; fl->free_list = block->nodes; }; /* * All allocated nodes have now been returned to the freelist. */ fl->nbusy = 0; }; } /*....................................................................... * Delete a free-list. * * Input: * fl FreeList * The free-list to be deleted, or NULL. * force int If force==0 then _del_FreeList() will complain * and refuse to delete the free-list if any * of nodes have not been returned to the free-list. * If force!=0 then _del_FreeList() will not check * whether any nodes are still in use and will * always delete the list. * Output: * return FreeList * Always NULL (even if the list couldn't be * deleted). */ FreeList *_del_FreeList(FreeList *fl, int force) { if(fl) { /* * Check whether any nodes are in use. */ if(!force && _busy_FreeListNodes(fl) != 0) { errno = EBUSY; return NULL; }; /* * Delete the list blocks. */ { FreeListBlock *next = fl->block; while(next) { FreeListBlock *block = next; next = block->next; block = _del_FreeListBlock(block); }; }; fl->block = NULL; fl->free_list = NULL; /* * Discard the container. */ free(fl); }; return NULL; } /*....................................................................... * Allocate a new object from a free-list. * * Input: * fl FreeList * The free-list to return an object from. * Output: * return void * A new object of the size that was specified via * the node_size argument of _new_FreeList() when * the free-list was created, or NULL if there * is insufficient memory, or 'fl' is NULL. */ void *_new_FreeListNode(FreeList *fl) { void *node; /* The node to be returned */ /* * Check arguments. */ if(!fl) return NULL; /* * If the free-list has been exhausted extend it by allocating * another block of nodes. */ if(!fl->free_list) { FreeListBlock *block = _new_FreeListBlock(fl); if(!block) return NULL; /* * Prepend the new block to the list of free-list blocks. */ block->next = fl->block; fl->block = block; /* * Add the new list of nodes to the free-list. */ fl->free_list = fl->block->nodes; }; /* * Remove and return a node from the front of the free list. */ node = fl->free_list; fl->free_list = *(void **)node; /* * Record the loss of a node from the free-list. */ fl->nbusy++; /* * Return the node. */ return node; } /*....................................................................... * Return an object to the free-list that it was allocated from. * * Input: * fl FreeList * The free-list from which the object was taken. * object void * The node to be returned. * Output: * return void * Always NULL. */ void *_del_FreeListNode(FreeList *fl, void *object) { /* * Check arguments. */ if(!fl) return NULL; /* * Return the node to the head of the free list. */ if(object) { *(void **)object = fl->free_list; fl->free_list = object; /* * Record the return of the node to the free-list. */ fl->nbusy--; }; return NULL; } /*....................................................................... * Return a count of the number of nodes that are currently allocated. * * Input: * fl FreeList * The list to count wrt, or NULL. * Output: * return long The number of nodes (or 0 if fl==NULL). */ long _busy_FreeListNodes(FreeList *fl) { return fl ? fl->nbusy : 0; } /*....................................................................... * Query the number of allocated nodes in the freelist which are * currently unused. * * Input: * fl FreeList * The list to count wrt, or NULL. * Output: * return long The number of unused nodes (or 0 if fl==NULL). */ long _idle_FreeListNodes(FreeList *fl) { return fl ? (fl->ntotal - fl->nbusy) : 0; } /*....................................................................... * Allocate a new list of free-list nodes. On return the nodes will * be linked together as a list starting with the node at the lowest * address and ending with a NULL next pointer. * * Input: * fl FreeList * The free-list to allocate the list for. * Output: * return FreeListBlock * The new linked block of free-list nodes, * or NULL on error. */ static FreeListBlock *_new_FreeListBlock(FreeList *fl) { FreeListBlock *block; /* The new block to be returned */ /* * Allocate the container. */ block = (FreeListBlock *) malloc(sizeof(FreeListBlock)); if(!block) return NULL; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to _del_FreeListBlock(). */ block->next = NULL; block->nodes = NULL; /* * Allocate the block of nodes. */ block->nodes = (char *) malloc(fl->node_size * fl->blocking_factor); if(!block->nodes) return _del_FreeListBlock(block); /* * Initialize the block as a linked list of FreeListNode's. */ _thread_FreeListBlock(fl, block); /* * Update the record of the number of nodes in the freelist. */ fl->ntotal += fl->blocking_factor; return block; } /*....................................................................... * Link each node of a freelist block to the node that follows it. * * Input: * fl FreeList * The freelist that contains the block. * block FreeListBlock * The block to be threaded. */ static void _thread_FreeListBlock(FreeList *fl, FreeListBlock *block) { char *mem = block->nodes; int i; for(i=0; iblocking_factor - 1; i++, mem += fl->node_size) *(void **)mem = mem + fl->node_size; /* Link to the next node */ *(void **)mem = NULL; /* Terminate the list */ } /*....................................................................... * Delete a free-list block. * * Input: * fl FreeListBlock * The block to be deleted, or NULL. * Output: * return FreeListBlock * Always NULL. */ static FreeListBlock *_del_FreeListBlock(FreeListBlock *fl) { if(fl) { fl->next = NULL; if(fl->nodes) free(fl->nodes); fl->nodes = NULL; free(fl); }; return NULL; } genometools-1.5.1/src/external/libtecla-1.6.1/freelist.h000066400000000000000000000062011211610345200226620ustar00rootroot00000000000000#ifndef freelist_h #define freelist_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * This module provides a memory allocation scheme that helps to * prevent memory fragmentation by allocating large blocks of * fixed sized objects and forming them into a free-list for * subsequent allocations. The free-list is expanded as needed. */ typedef struct FreeList FreeList; /* * Allocate a new free-list from blocks of 'blocking_factor' objects of size * node_size. The node_size argument should be determined by applying * the sizeof() operator to the object type that you intend to allocate from * the freelist. */ FreeList *_new_FreeList(size_t node_size, unsigned blocking_factor); /* * If it is known that none of the nodes currently allocated from * a freelist are still in use, the following function can be called * to return all nodes to the freelist without the overhead of * having to call del_FreeListNode() for every allocated node. The * nodes of the freelist can then be reused by future callers to * new_FreeListNode(). */ void _rst_FreeList(FreeList *fl); /* * Delete a free-list. */ FreeList *_del_FreeList(FreeList *fl, int force); /* * Determine the number of nodes that are currently in use. */ long _busy_FreeListNodes(FreeList *fl); /* * Query the number of allocated nodes in the freelist which are * currently unused. */ long _idle_FreeListNodes(FreeList *fl); /* * Allocate a new object from a free-list. */ void *_new_FreeListNode(FreeList *fl); /* * Return an object to the free-list that it was allocated from. */ void *_del_FreeListNode(FreeList *fl, void *object); #endif genometools-1.5.1/src/external/libtecla-1.6.1/getline.c000066400000000000000000014164431211610345200225050ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * Standard headers. */ #include #include #include #include #include #include #include #include /* * UNIX headers. */ #include #ifdef HAVE_SELECT #ifdef HAVE_SYS_SELECT_H #include #endif #include #include #endif /* * Handle the different sources of terminal control string and size * information. Note that if no terminal information database is available, * ANSI VT100 control sequences are used. */ #if defined(USE_TERMINFO) || defined(USE_TERMCAP) /* * Include curses.h or ncurses/curses.h depending on which is available. */ #ifdef HAVE_CURSES_H #include #elif defined(HAVE_NCURSES_CURSES_H) #include #endif /* * Include term.h where available. */ #if defined(HAVE_TERM_H) #include #elif defined(HAVE_NCURSES_TERM_H) #include #endif /* * When using termcap, include termcap.h on systems that have it. * Otherwise assume that all prototypes are provided by curses.h. */ #if defined(USE_TERMCAP) && defined(HAVE_TERMCAP_H) #include #endif /* * Under Solaris default Curses the output function that tputs takes is * declared to have a char argument. On all other systems and on Solaris * X/Open Curses (Issue 4, Version 2) it expects an int argument (using * c89 or options -I /usr/xpg4/include -L /usr/xpg4/lib -R /usr/xpg4/lib * selects XPG4v2 Curses on Solaris 2.6 and later). * * Similarly, under Mac OS X, the return value of the tputs output * function is declared as void, whereas it is declared as int on * other systems. */ #if defined __sun && defined __SVR4 && !defined _XOPEN_CURSES typedef int TputsRetType; typedef char TputsArgType; /* int tputs(char c, FILE *fp) */ #define TPUTS_RETURNS_VALUE 1 #else typedef int TputsRetType; typedef int TputsArgType; /* int tputs(int c, FILE *fp) */ #define TPUTS_RETURNS_VALUE 1 #endif /* * Use the above specifications to prototype our tputs callback function. */ static TputsRetType gl_tputs_putchar(TputsArgType c); #endif /* defined(USE_TERMINFO) || defined(USE_TERMCAP) */ /* * If the library is being compiled without filesystem access facilities, * ensure that none of the action functions that normally do access the * filesystem are bound by default, and that it they do get bound, that * they don't do anything. */ #if WITHOUT_FILE_SYSTEM #define HIDE_FILE_SYSTEM #endif /* * POSIX headers. */ #include #include #include /* * Provide typedefs for standard POSIX structures. */ typedef struct sigaction SigAction; typedef struct termios Termios; /* * Which flag is used to select non-blocking I/O with fcntl()? */ #undef NON_BLOCKING_FLAG #if defined(O_NONBLOCK) #define NON_BLOCKING_FLAG (O_NONBLOCK) #elif defined(O_NDELAY) #define NON_BLOCKING_FLAG (O_NDELAY) #endif /* * What value should we give errno if I/O blocks when it shouldn't. */ #undef BLOCKED_ERRNO #if defined(EAGAIN) #define BLOCKED_ERRNO (EAGAIN) #elif defined(EWOULDBLOCK) #define BLOCKED_ERRNO (EWOULDBLOCK) #elif defined(EIO) #define BLOCKED_ERRNO (EIO) #else #define BLOCKED_ERRNO 0 #endif /* * Local headers. */ #ifndef WITHOUT_FILE_SYSTEM #include "pathutil.h" #endif #include "libtecla.h" #include "keytab.h" #include "getline.h" #include "ioutil.h" #include "history.h" #include "freelist.h" #include "stringrp.h" #include "chrqueue.h" #include "cplmatch.h" #ifndef WITHOUT_FILE_SYSTEM #include "expand.h" #endif #include "errmsg.h" /* * Enumerate the available editing styles. */ typedef enum { GL_EMACS_MODE, /* Emacs style editing */ GL_VI_MODE, /* Vi style editing */ GL_NO_EDITOR /* Fall back to the basic OS-provided editing */ } GlEditor; /* * Set the largest key-sequence that can be handled. */ #define GL_KEY_MAX 64 /* * In vi mode, the following datatype is used to implement the * undo command. It records a copy of the input line from before * the command-mode action which edited the input line. */ typedef struct { char *line; /* A historical copy of the input line */ int buff_curpos; /* The historical location of the cursor in */ /* line[] when the line was modified. */ int ntotal; /* The number of characters in line[] */ int saved; /* True once a line has been saved after the */ /* last call to gl_interpret_char(). */ } ViUndo; /* * In vi mode, the following datatype is used to record information * needed by the vi-repeat-change command. */ typedef struct { KtAction action; /* The last action function that made a */ /* change to the line. */ int count; /* The repeat count that was passed to the */ /* above command. */ int input_curpos; /* Whenever vi command mode is entered, the */ /* the position at which it was first left */ /* is recorded here. */ int command_curpos; /* Whenever vi command mode is entered, the */ /* the location of the cursor is recorded */ /* here. */ char input_char; /* Commands that call gl_read_terminal() */ /* record the character here, so that it can */ /* used on repeating the function. */ int saved; /* True if a function has been saved since the */ /* last call to gl_interpret_char(). */ int active; /* True while a function is being repeated. */ } ViRepeat; /* * The following datatype is used to encapsulate information specific * to vi mode. */ typedef struct { ViUndo undo; /* Information needed to implement the vi */ /* undo command. */ ViRepeat repeat; /* Information needed to implement the vi */ /* repeat command. */ int command; /* True in vi command-mode */ int find_forward; /* True if the last character search was in the */ /* forward direction. */ int find_onto; /* True if the last character search left the */ /* on top of the located character, as opposed */ /* to just before or after it. */ char find_char; /* The last character sought, or '\0' if no */ /* searches have been performed yet. */ } ViMode; #ifdef HAVE_SELECT /* * Define a type for recording a file-descriptor callback and its associated * data. */ typedef struct { GlFdEventFn *fn; /* The callback function */ void *data; /* Anonymous data to pass to the callback function */ } GlFdHandler; /* * A list of nodes of the following type is used to record file-activity * event handlers, but only on systems that have the select() system call. */ typedef struct GlFdNode GlFdNode; struct GlFdNode { GlFdNode *next; /* The next in the list of nodes */ int fd; /* The file descriptor being watched */ GlFdHandler rd; /* The callback to call when fd is readable */ GlFdHandler wr; /* The callback to call when fd is writable */ GlFdHandler ur; /* The callback to call when fd has urgent data */ }; /* * Set the number of the above structures to allocate every time that * the freelist of GlFdNode's becomes exhausted. */ #define GLFD_FREELIST_BLOCKING 10 static int gl_call_fd_handler(GetLine *gl, GlFdHandler *gfh, int fd, GlFdEvent event); static int gl_call_timeout_handler(GetLine *gl); #endif /* * Each signal that gl_get_line() traps is described by a list node * of the following type. */ typedef struct GlSignalNode GlSignalNode; struct GlSignalNode { GlSignalNode *next; /* The next signal in the list */ int signo; /* The number of the signal */ sigset_t proc_mask; /* A process mask which only includes signo */ SigAction original; /* The signal disposition of the calling program */ /* for this signal. */ unsigned flags; /* A bitwise union of GlSignalFlags enumerators */ GlAfterSignal after; /* What to do after the signal has been handled */ int errno_value; /* What to set errno to */ }; /* * Set the number of the above structures to allocate every time that * the freelist of GlSignalNode's becomes exhausted. */ #define GLS_FREELIST_BLOCKING 30 /* * Completion handlers and their callback data are recorded in * nodes of the following type. */ typedef struct GlCplCallback GlCplCallback; struct GlCplCallback { CplMatchFn *fn; /* The completion callback function */ void *data; /* Arbitrary callback data */ }; /* * The following function is used as the default completion handler when * the filesystem is to be hidden. It simply reports no completions. */ #ifdef HIDE_FILE_SYSTEM static CPL_MATCH_FN(gl_no_completions); #endif /* * Specify how many GlCplCallback nodes are added to the GlCplCallback freelist * whenever it becomes exhausted. */ #define GL_CPL_FREELIST_BLOCKING 10 /* * External action functions and their callback data are recorded in * nodes of the following type. */ typedef struct GlExternalAction GlExternalAction; struct GlExternalAction { GlActionFn *fn; /* The function which implements the action */ void *data; /* Arbitrary callback data */ }; /* * Specify how many GlExternalAction nodes are added to the * GlExternalAction freelist whenever it becomes exhausted. */ #define GL_EXT_ACT_FREELIST_BLOCKING 10 /* * Define the contents of the GetLine object. * Note that the typedef for this object can be found in libtecla.h. */ struct GetLine { ErrMsg *err; /* The error-reporting buffer */ GlHistory *glh; /* The line-history buffer */ WordCompletion *cpl; /* String completion resource object */ GlCplCallback cplfn; /* The completion callback */ #ifndef WITHOUT_FILE_SYSTEM ExpandFile *ef; /* ~user/, $envvar and wildcard expansion */ /* resource object. */ #endif StringGroup *capmem; /* Memory for recording terminal capability */ /* strings. */ GlCharQueue *cq; /* The terminal output character queue */ int input_fd; /* The file descriptor to read on */ int output_fd; /* The file descriptor to write to */ FILE *input_fp; /* A stream wrapper around input_fd */ FILE *output_fp; /* A stream wrapper around output_fd */ FILE *file_fp; /* When input is being temporarily taken from */ /* a file, this is its file-pointer. Otherwise */ /* it is NULL. */ char *term; /* The terminal type specified on the last call */ /* to gl_change_terminal(). */ int is_term; /* True if stdin is a terminal */ GlWriteFn *flush_fn; /* The function to call to write to the terminal */ GlIOMode io_mode; /* The I/O mode established by gl_io_mode() */ int raw_mode; /* True while the terminal is in raw mode */ GlPendingIO pending_io; /* The type of I/O that is currently pending */ GlReturnStatus rtn_status; /* The reason why gl_get_line() returned */ int rtn_errno; /* THe value of errno associated with rtn_status */ size_t linelen; /* The max number of characters per line */ char *line; /* A line-input buffer of allocated size */ /* linelen+2. The extra 2 characters are */ /* reserved for "\n\0". */ char *cutbuf; /* A cut-buffer of the same size as line[] */ char *prompt; /* The current prompt string */ int prompt_len; /* The length of the prompt string */ int prompt_changed; /* True after a callback changes the prompt */ int prompt_style; /* How the prompt string is displayed */ FreeList *cpl_mem; /* Memory for GlCplCallback objects */ FreeList *ext_act_mem; /* Memory for GlExternalAction objects */ FreeList *sig_mem; /* Memory for nodes of the signal list */ GlSignalNode *sigs; /* The head of the list of signals */ int signals_masked; /* True between calls to gl_mask_signals() and */ /* gl_unmask_signals() */ int signals_overriden; /* True between calls to gl_override_signals() */ /* and gl_restore_signals() */ sigset_t all_signal_set; /* The set of all signals that we are trapping */ sigset_t old_signal_set; /* The set of blocked signals on entry to */ /* gl_get_line(). */ sigset_t use_signal_set; /* The subset of all_signal_set to unblock */ /* while waiting for key-strokes */ Termios oldattr; /* Saved terminal attributes. */ KeyTab *bindings; /* A table of key-bindings */ int ntotal; /* The number of characters in gl->line[] */ int buff_curpos; /* The cursor position within gl->line[] */ int term_curpos; /* The cursor position on the terminal */ int term_len; /* The number of terminal characters used to */ /* display the current input line. */ int buff_mark; /* A marker location in the buffer */ int insert_curpos; /* The cursor position at start of insert */ int insert; /* True in insert mode */ int number; /* If >= 0, a numeric argument is being read */ int endline; /* True to tell gl_get_input_line() to return */ /* the current contents of gl->line[] */ int displayed; /* True if an input line is currently displayed */ int redisplay; /* If true, the input line will be redrawn */ /* either after the current action function */ /* returns, or when gl_get_input_line() */ /* is next called. */ int postpone; /* _gl_normal_io() sets this flag, to */ /* postpone any redisplays until */ /* is next called, to resume line editing. */ char keybuf[GL_KEY_MAX+1]; /* A buffer of currently unprocessed key presses */ int nbuf; /* The number of characters in keybuf[] */ int nread; /* The number of characters read from keybuf[] */ KtAction current_action; /* The action function that is being invoked */ int current_count; /* The repeat count passed to */ /* current_acction.fn() */ GlhLineID preload_id; /* When not zero, this should be the ID of a */ /* line in the history buffer for potential */ /* recall. */ int preload_history; /* If true, preload the above history line when */ /* gl_get_input_line() is next called. */ long keyseq_count; /* The number of key sequences entered by the */ /* the user since new_GetLine() was called. */ long last_search; /* The value of keyseq_count during the last */ /* history search operation. */ GlEditor editor; /* The style of editing, (eg. vi or emacs) */ int silence_bell; /* True if gl_ring_bell() should do nothing. */ int automatic_history; /* True to automatically archive entered lines */ /* in the history list. */ ViMode vi; /* Parameters used when editing in vi mode */ const char *left; /* The string that moves the cursor 1 character */ /* left. */ const char *right; /* The string that moves the cursor 1 character */ /* right. */ const char *up; /* The string that moves the cursor 1 character */ /* up. */ const char *down; /* The string that moves the cursor 1 character */ /* down. */ const char *home; /* The string that moves the cursor home */ const char *bol; /* Move cursor to beginning of line */ const char *clear_eol; /* The string that clears from the cursor to */ /* the end of the line. */ const char *clear_eod; /* The string that clears from the cursor to */ /* the end of the display. */ const char *u_arrow; /* The string returned by the up-arrow key */ const char *d_arrow; /* The string returned by the down-arrow key */ const char *l_arrow; /* The string returned by the left-arrow key */ const char *r_arrow; /* The string returned by the right-arrow key */ const char *sound_bell; /* The string needed to ring the terminal bell */ const char *bold; /* Switch to the bold font */ const char *underline; /* Underline subsequent characters */ const char *standout; /* Turn on standout mode */ const char *dim; /* Switch to a dim font */ const char *reverse; /* Turn on reverse video */ const char *blink; /* Switch to a blinking font */ const char *text_attr_off; /* Turn off all text attributes */ int nline; /* The height of the terminal in lines */ int ncolumn; /* The width of the terminal in columns */ #ifdef USE_TERMCAP char *tgetent_buf; /* The buffer that is used by tgetent() to */ /* store a terminal description. */ char *tgetstr_buf; /* The buffer that is used by tgetstr() to */ /* store terminal capabilities. */ #endif #ifdef USE_TERMINFO const char *left_n; /* The parameter string that moves the cursor */ /* n characters left. */ const char *right_n; /* The parameter string that moves the cursor */ /* n characters right. */ #endif char *app_file; /* The pathname of the application-specific */ /* .teclarc configuration file, or NULL. */ char *user_file; /* The pathname of the user-specific */ /* .teclarc configuration file, or NULL. */ int configured; /* True as soon as any teclarc configuration */ /* file has been read. */ int echo; /* True to display the line as it is being */ /* entered. If 0, only the prompt will be */ /* displayed, and the line will not be */ /* archived in the history list. */ int last_signal; /* The last signal that was caught by */ /* the last call to gl_get_line(), or -1 */ /* if no signal has been caught yet. */ #ifdef HAVE_SELECT FreeList *fd_node_mem; /* A freelist of GlFdNode structures */ GlFdNode *fd_nodes; /* The list of fd event descriptions */ fd_set rfds; /* The set of fds to watch for readability */ fd_set wfds; /* The set of fds to watch for writability */ fd_set ufds; /* The set of fds to watch for urgent data */ int max_fd; /* The maximum file-descriptor being watched */ struct { /* Inactivity timeout related data */ struct timeval dt; /* The inactivity timeout when timer.fn() */ /* isn't 0 */ GlTimeoutFn *fn; /* The application callback to call when */ /* the inactivity timer expires, or 0 if */ /* timeouts are not required. */ void *data; /* Application provided data to be passed to */ /* timer.fn(). */ } timer; #endif }; /* * Define the max amount of space needed to store a termcap terminal * description. Unfortunately this has to be done by guesswork, so * there is the potential for buffer overflows if we guess too small. * Fortunately termcap has been replaced by terminfo on most * platforms, and with terminfo this isn't an issue. The value that I * am using here is the conventional value, as recommended by certain * web references. */ #ifdef USE_TERMCAP #define TERMCAP_BUF_SIZE 2048 #endif /* * Set the size of the string segments used to store terminal capability * strings. */ #define CAPMEM_SEGMENT_SIZE 512 /* * If no terminal size information is available, substitute the * following vt100 default sizes. */ #define GL_DEF_NLINE 24 #define GL_DEF_NCOLUMN 80 /* * Enumerate the attributes needed to classify different types of * signals. These attributes reflect the standard default * characteristics of these signals (according to Richard Steven's * Advanced Programming in the UNIX Environment). Note that these values * are all powers of 2, so that they can be combined in a bitwise union. */ typedef enum { GLSA_TERM=1, /* A signal that terminates processes */ GLSA_SUSP=2, /* A signal that suspends processes */ GLSA_CONT=4, /* A signal that is sent when suspended processes resume */ GLSA_IGN=8, /* A signal that is ignored */ GLSA_CORE=16, /* A signal that generates a core dump */ GLSA_HARD=32, /* A signal generated by a hardware exception */ GLSA_SIZE=64 /* A signal indicating terminal size changes */ } GlSigAttr; /* * List the signals that we need to catch. In general these are * those that by default terminate or suspend the process, since * in such cases we need to restore terminal settings. */ static const struct GlDefSignal { int signo; /* The number of the signal */ unsigned flags; /* A bitwise union of GlSignalFlags enumerators */ GlAfterSignal after; /* What to do after the signal has been delivered */ int attr; /* The default attributes of this signal, expressed */ /* as a bitwise union of GlSigAttr enumerators */ int errno_value; /* What to set errno to */ } gl_signal_list[] = { {SIGABRT, GLS_SUSPEND_INPUT, GLS_ABORT, GLSA_TERM|GLSA_CORE, EINTR}, {SIGALRM, GLS_RESTORE_ENV, GLS_CONTINUE, GLSA_TERM, 0}, {SIGCONT, GLS_RESTORE_ENV, GLS_CONTINUE, GLSA_CONT|GLSA_IGN, 0}, #if defined(SIGHUP) #ifdef ENOTTY {SIGHUP, GLS_SUSPEND_INPUT, GLS_ABORT, GLSA_TERM, ENOTTY}, #else {SIGHUP, GLS_SUSPEND_INPUT, GLS_ABORT, GLSA_TERM, EINTR}, #endif #endif {SIGINT, GLS_SUSPEND_INPUT, GLS_ABORT, GLSA_TERM, EINTR}, #if defined(SIGPIPE) #ifdef EPIPE {SIGPIPE, GLS_SUSPEND_INPUT, GLS_ABORT, GLSA_TERM, EPIPE}, #else {SIGPIPE, GLS_SUSPEND_INPUT, GLS_ABORT, GLSA_TERM, EINTR}, #endif #endif #ifdef SIGPOLL {SIGPOLL, GLS_SUSPEND_INPUT, GLS_ABORT, GLSA_TERM, EINTR}, #endif #ifdef SIGPWR {SIGPWR, GLS_RESTORE_ENV, GLS_CONTINUE, GLSA_IGN, 0}, #endif #ifdef SIGQUIT {SIGQUIT, GLS_SUSPEND_INPUT, GLS_ABORT, GLSA_TERM|GLSA_CORE, EINTR}, #endif {SIGTERM, GLS_SUSPEND_INPUT, GLS_ABORT, GLSA_TERM, EINTR}, #ifdef SIGTSTP {SIGTSTP, GLS_SUSPEND_INPUT, GLS_CONTINUE, GLSA_SUSP, 0}, #endif #ifdef SIGTTIN {SIGTTIN, GLS_SUSPEND_INPUT, GLS_CONTINUE, GLSA_SUSP, 0}, #endif #ifdef SIGTTOU {SIGTTOU, GLS_SUSPEND_INPUT, GLS_CONTINUE, GLSA_SUSP, 0}, #endif #ifdef SIGUSR1 {SIGUSR1, GLS_RESTORE_ENV, GLS_CONTINUE, GLSA_TERM, 0}, #endif #ifdef SIGUSR2 {SIGUSR2, GLS_RESTORE_ENV, GLS_CONTINUE, GLSA_TERM, 0}, #endif #ifdef SIGVTALRM {SIGVTALRM, GLS_RESTORE_ENV, GLS_CONTINUE, GLSA_TERM, 0}, #endif #ifdef SIGWINCH {SIGWINCH, GLS_RESTORE_ENV, GLS_CONTINUE, GLSA_SIZE|GLSA_IGN, 0}, #endif #ifdef SIGXCPU {SIGXCPU, GLS_RESTORE_ENV, GLS_CONTINUE, GLSA_TERM|GLSA_CORE, 0}, #endif #ifdef SIGXFSZ {SIGXFSZ, GLS_RESTORE_ENV, GLS_CONTINUE, GLSA_TERM|GLSA_CORE, 0}, #endif }; /* * Define file-scope variables for use in signal handlers. */ static volatile sig_atomic_t gl_pending_signal = -1; static sigjmp_buf gl_setjmp_buffer; static void gl_signal_handler(int signo); static int gl_check_caught_signal(GetLine *gl); /* * Respond to an externally caught process suspension or * termination signal. */ static void gl_suspend_process(int signo, GetLine *gl, int ngl); /* Return the default attributes of a given signal */ static int gl_classify_signal(int signo); /* * Unfortunately both terminfo and termcap require one to use the tputs() * function to output terminal control characters, and this function * doesn't allow one to specify a file stream. As a result, the following * file-scope variable is used to pass the current output file stream. * This is bad, but there doesn't seem to be any alternative. */ #if defined(USE_TERMINFO) || defined(USE_TERMCAP) static GetLine *tputs_gl = NULL; #endif /* * Define a tab to be a string of 8 spaces. */ #define TAB_WIDTH 8 /* * Lookup the current size of the terminal. */ static void gl_query_size(GetLine *gl, int *ncolumn, int *nline); /* * Getline calls this to temporarily override certain signal handlers * of the calling program. */ static int gl_override_signal_handlers(GetLine *gl); /* * Getline calls this to restore the signal handlers of the calling * program. */ static int gl_restore_signal_handlers(GetLine *gl); /* * Temporarily block the delivery of all signals that gl_get_line() * is currently configured to trap. */ static int gl_mask_signals(GetLine *gl, sigset_t *oldset); /* * Restore the process signal mask that was overriden by a previous * call to gl_mask_signals(). */ static int gl_unmask_signals(GetLine *gl, sigset_t *oldset); /* * Unblock the signals that gl_get_line() has been configured to catch. */ static int gl_catch_signals(GetLine *gl); /* * Return the set of all trappable signals. */ static void gl_list_trappable_signals(sigset_t *signals); /* * Put the terminal into raw input mode, after saving the original * terminal attributes in gl->oldattr. */ static int gl_raw_terminal_mode(GetLine *gl); /* * Restore the terminal attributes from gl->oldattr. */ static int gl_restore_terminal_attributes(GetLine *gl); /* * Switch to non-blocking I/O if possible. */ static int gl_nonblocking_io(GetLine *gl, int fd); /* * Switch to blocking I/O if possible. */ static int gl_blocking_io(GetLine *gl, int fd); /* * Read a line from the user in raw mode. */ static int gl_get_input_line(GetLine *gl, const char *prompt, const char *start_line, int start_pos); /* * Query the user for a single character. */ static int gl_get_query_char(GetLine *gl, const char *prompt, int defchar); /* * Read input from a non-interactive input stream. */ static int gl_read_stream_line(GetLine *gl); /* * Read a single character from a non-interactive input stream. */ static int gl_read_stream_char(GetLine *gl); /* * Prepare to edit a new line. */ static int gl_present_line(GetLine *gl, const char *prompt, const char *start_line, int start_pos); /* * Reset all line-editing parameters for a new input line. */ static void gl_reset_editor(GetLine *gl); /* * Handle the receipt of the potential start of a new key-sequence from * the user. */ static int gl_interpret_char(GetLine *gl, char c); /* * Bind a single control or meta character to an action. */ static int gl_bind_control_char(GetLine *gl, KtBinder binder, char c, const char *action); /* * Set up terminal-specific key bindings. */ static int gl_bind_terminal_keys(GetLine *gl); /* * Lookup terminal control string and size information. */ static int gl_control_strings(GetLine *gl, const char *term); /* * Wrappers around the terminfo and termcap functions that lookup * strings in the terminal information databases. */ #ifdef USE_TERMINFO static const char *gl_tigetstr(GetLine *gl, const char *name); #elif defined(USE_TERMCAP) static const char *gl_tgetstr(GetLine *gl, const char *name, char **bufptr); #endif /* * Output a binary string directly to the terminal. */ static int gl_print_raw_string(GetLine *gl, int buffered, const char *string, int n); /* * Print an informational message, starting and finishing on new lines. * After the list of strings to be printed, the last argument MUST be * GL_END_INFO. */ static int gl_print_info(GetLine *gl, ...); #define GL_END_INFO ((const char *)0) /* * Start a newline and place the cursor at its start. */ static int gl_start_newline(GetLine *gl, int buffered); /* * Output a terminal control sequence. */ static int gl_print_control_sequence(GetLine *gl, int nline, const char *string); /* * Output a character or string to the terminal after converting tabs * to spaces and control characters to a caret followed by the modified * character. */ static int gl_print_char(GetLine *gl, char c, char pad); static int gl_print_string(GetLine *gl, const char *string, char pad); /* * Delete nc characters starting from the one under the cursor. * Optionally copy the deleted characters to the cut buffer. */ static int gl_delete_chars(GetLine *gl, int nc, int cut); /* * Add a character to the line buffer at the current cursor position, * inserting or overwriting according the current mode. */ static int gl_add_char_to_line(GetLine *gl, char c); /* * Insert/append a string to the line buffer and terminal at the current * cursor position. */ static int gl_add_string_to_line(GetLine *gl, const char *s); /* * Record a new character in the input-line buffer. */ static int gl_buffer_char(GetLine *gl, char c, int bufpos); /* * Record a string in the input-line buffer. */ static int gl_buffer_string(GetLine *gl, const char *s, int n, int bufpos); /* * Make way to insert a string in the input-line buffer. */ static int gl_make_gap_in_buffer(GetLine *gl, int start, int n); /* * Remove characters from the input-line buffer, and move any characters * that followed them to the start of the vacated space. */ static void gl_remove_from_buffer(GetLine *gl, int start, int n); /* * Terminate the input-line buffer after a specified number of characters. */ static int gl_truncate_buffer(GetLine *gl, int n); /* * Delete the displayed part of the input line that follows the current * terminal cursor position. */ static int gl_truncate_display(GetLine *gl); /* * Accomodate changes to the contents of the input line buffer * that weren't made by the above gl_*buffer functions. */ static void gl_update_buffer(GetLine *gl); /* * Read a single character from the terminal. */ static int gl_read_terminal(GetLine *gl, int keep, char *c); /* * Discard processed characters from the key-press lookahead buffer. */ static void gl_discard_chars(GetLine *gl, int nused); /* * Move the terminal cursor n positions to the left or right. */ static int gl_terminal_move_cursor(GetLine *gl, int n); /* * Move the terminal cursor to a given position. */ static int gl_set_term_curpos(GetLine *gl, int term_curpos); /* * Set the position of the cursor both in the line input buffer and on the * terminal. */ static int gl_place_cursor(GetLine *gl, int buff_curpos); /* * How many characters are needed to write a number as an octal string? */ static int gl_octal_width(unsigned num); /* * Return the number of spaces needed to display a tab character at * a given location of the terminal. */ static int gl_displayed_tab_width(GetLine *gl, int term_curpos); /* * Return the number of terminal characters needed to display a * given raw character. */ static int gl_displayed_char_width(GetLine *gl, char c, int term_curpos); /* * Return the number of terminal characters needed to display a * given substring. */ static int gl_displayed_string_width(GetLine *gl, const char *string, int nc, int term_curpos); /* * Return non-zero if 'c' is to be considered part of a word. */ static int gl_is_word_char(int c); /* * Read a tecla configuration file. */ static int _gl_read_config_file(GetLine *gl, const char *filename, KtBinder who); /* * Read a tecla configuration string. */ static int _gl_read_config_string(GetLine *gl, const char *buffer, KtBinder who); /* * Define the callback function used by _gl_parse_config_line() to * read the next character of a configuration stream. */ #define GLC_GETC_FN(fn) int (fn)(void *stream) typedef GLC_GETC_FN(GlcGetcFn); static GLC_GETC_FN(glc_file_getc); /* Read from a file */ static GLC_GETC_FN(glc_buff_getc); /* Read from a string */ /* * Parse a single configuration command line. */ static int _gl_parse_config_line(GetLine *gl, void *stream, GlcGetcFn *getc_fn, const char *origin, KtBinder who, int *lineno); static int gl_report_config_error(GetLine *gl, const char *origin, int lineno, const char *errmsg); /* * Bind the actual arrow key bindings to match those of the symbolic * arrow-key bindings. */ static int _gl_bind_arrow_keys(GetLine *gl); /* * Copy the binding of the specified symbolic arrow-key binding to * the terminal specific, and default arrow-key key-sequences. */ static int _gl_rebind_arrow_key(GetLine *gl, const char *name, const char *term_seq, const char *def_seq1, const char *def_seq2); /* * After the gl_read_from_file() action has been used to tell gl_get_line() * to temporarily read input from a file, gl_revert_input() arranges * for input to be reverted to the input stream last registered with * gl_change_terminal(). */ static void gl_revert_input(GetLine *gl); /* * Flush unwritten characters to the terminal. */ static int gl_flush_output(GetLine *gl); /* * The callback through which all terminal output is routed. * This simply appends characters to a queue buffer, which is * subsequently flushed to the output channel by gl_flush_output(). */ static GL_WRITE_FN(gl_write_fn); /* * The callback function which the output character queue object * calls to transfer characters to the output channel. */ static GL_WRITE_FN(gl_flush_terminal); /* * Enumerate the possible return statuses of gl_read_input(). */ typedef enum { GL_READ_OK, /* A character was read successfully */ GL_READ_ERROR, /* A read-error occurred */ GL_READ_BLOCKED, /* The read would have blocked the caller */ GL_READ_EOF /* The end of the current input file was reached */ } GlReadStatus; static GlReadStatus gl_read_input(GetLine *gl, char *c); /* * Private functions of gl_read_input(). */ static int gl_event_handler(GetLine *gl, int fd); static GlReadStatus gl_read_unmasked(GetLine *gl, int fd, char *c); /* * A private function of gl_tty_signals(). */ static int gl_set_tty_signal(int signo, void (*handler)(int)); /* * Change the editor style being emulated. */ static int gl_change_editor(GetLine *gl, GlEditor editor); /* * Searching in a given direction, return the index of a given (or * read) character in the input line, or the character that precedes * it in the specified search direction. Return -1 if not found. */ static int gl_find_char(GetLine *gl, int count, int forward, int onto, char c); /* * Return the buffer index of the nth word ending after the cursor. */ static int gl_nth_word_end_forward(GetLine *gl, int n); /* * Return the buffer index of the nth word start after the cursor. */ static int gl_nth_word_start_forward(GetLine *gl, int n); /* * Return the buffer index of the nth word start before the cursor. */ static int gl_nth_word_start_backward(GetLine *gl, int n); /* * When called when vi command mode is enabled, this function saves the * current line and cursor position for potential restoration later * by the vi undo command. */ static void gl_save_for_undo(GetLine *gl); /* * If in vi mode, switch to vi command mode. */ static void gl_vi_command_mode(GetLine *gl); /* * In vi mode this is used to delete up to or onto a given or read * character in the input line. Also switch to insert mode if requested * after the deletion. */ static int gl_delete_find(GetLine *gl, int count, char c, int forward, int onto, int change); /* * Copy the characters between the cursor and the count'th instance of * a specified (or read) character in the input line, into the cut buffer. */ static int gl_copy_find(GetLine *gl, int count, char c, int forward, int onto); /* * Return the line index of the parenthesis that either matches the one under * the cursor, or not over a parenthesis character, the index of the next * close parenthesis. Return -1 if not found. */ static int gl_index_of_matching_paren(GetLine *gl); /* * Replace a malloc'd string (or NULL), with another malloc'd copy of * a string (or NULL). */ static int gl_record_string(char **sptr, const char *string); /* * Enumerate text display attributes as powers of two, suitable for * use in a bit-mask. */ typedef enum { GL_TXT_STANDOUT=1, /* Display text highlighted */ GL_TXT_UNDERLINE=2, /* Display text underlined */ GL_TXT_REVERSE=4, /* Display text with reverse video */ GL_TXT_BLINK=8, /* Display blinking text */ GL_TXT_DIM=16, /* Display text in a dim font */ GL_TXT_BOLD=32 /* Display text using a bold font */ } GlTextAttr; /* * Display the prompt regardless of the current visibility mode. */ static int gl_display_prompt(GetLine *gl); /* * Return the number of characters used by the prompt on the terminal. */ static int gl_displayed_prompt_width(GetLine *gl); /* * Prepare to return the current input line to the caller of gl_get_line(). */ static int gl_line_ended(GetLine *gl, int newline_char); /* * Arrange for the input line to be redisplayed when the current contents * of the output queue have been flushed. */ static void gl_queue_redisplay(GetLine *gl); /* * Erase the displayed representation of the input line, without * touching the buffered copy. */ static int gl_erase_line(GetLine *gl); /* * This function is called whenever the input line has been erased. */ static void gl_line_erased(GetLine *gl); /* * Arrange for the current input line to be discarded. */ void _gl_abandon_line(GetLine *gl); /* * The following are private internally callable versions of pertinent * public functions. Unlike their public wrapper functions, they don't * block signals while running, and assume that their arguments are valid. * They are designed to be called from places where signals are already * blocked, and where simple sanity checks have already been applied to * their arguments. */ static char *_gl_get_line(GetLine *gl, const char *prompt, const char *start_line, int start_pos); static int _gl_query_char(GetLine *gl, const char *prompt, char defchar); static int _gl_read_char(GetLine *gl); static int _gl_update_size(GetLine *gl); /* * Redraw the current input line to account for a change in the terminal * size. Also install the new size in gl. */ static int gl_handle_tty_resize(GetLine *gl, int ncolumn, int nline); static int _gl_change_terminal(GetLine *gl, FILE *input_fp, FILE *output_fp, const char *term); static int _gl_configure_getline(GetLine *gl, const char *app_string, const char *app_file, const char *user_file); static int _gl_save_history(GetLine *gl, const char *filename, const char *comment, int max_lines); static int _gl_load_history(GetLine *gl, const char *filename, const char *comment); static int _gl_watch_fd(GetLine *gl, int fd, GlFdEvent event, GlFdEventFn *callback, void *data); static void _gl_terminal_size(GetLine *gl, int def_ncolumn, int def_nline, GlTerminalSize *size); static void _gl_replace_prompt(GetLine *gl, const char *prompt); static int _gl_trap_signal(GetLine *gl, int signo, unsigned flags, GlAfterSignal after, int errno_value); static int _gl_raw_io(GetLine *gl, int redisplay); static int _gl_normal_io(GetLine *gl); static int _gl_completion_action(GetLine *gl, void *data, CplMatchFn *match_fn, int list_only, const char *name, const char *keyseq); static int _gl_register_action(GetLine *gl, void *data, GlActionFn *fn, const char *name, const char *keyseq); static int _gl_io_mode(GetLine *gl, GlIOMode mode); static int _gl_set_term_size(GetLine *gl, int ncolumn, int nline); static int _gl_append_history(GetLine *gl, const char *line); /* * Reset the completion status and associated errno value in * gl->rtn_status and gl->rtn_errno. */ static void gl_clear_status(GetLine *gl); /* * Record a completion status, unless a previous abnormal completion * status has already been recorded for the current call. */ static void gl_record_status(GetLine *gl, GlReturnStatus rtn_status, int rtn_errno); /* * Set the maximum length of a line in a user's tecla configuration * file (not counting comments). */ #define GL_CONF_BUFLEN 100 /* * Set the maximum number of arguments supported by individual commands * in tecla configuration files. */ #define GL_CONF_MAXARG 10 /* * Prototype the available action functions. */ static KT_KEY_FN(gl_user_interrupt); static KT_KEY_FN(gl_abort); static KT_KEY_FN(gl_suspend); static KT_KEY_FN(gl_stop_output); static KT_KEY_FN(gl_start_output); static KT_KEY_FN(gl_literal_next); static KT_KEY_FN(gl_cursor_left); static KT_KEY_FN(gl_cursor_right); static KT_KEY_FN(gl_insert_mode); static KT_KEY_FN(gl_beginning_of_line); static KT_KEY_FN(gl_end_of_line); static KT_KEY_FN(gl_delete_line); static KT_KEY_FN(gl_kill_line); static KT_KEY_FN(gl_forward_word); static KT_KEY_FN(gl_backward_word); static KT_KEY_FN(gl_forward_delete_char); static KT_KEY_FN(gl_backward_delete_char); static KT_KEY_FN(gl_forward_delete_word); static KT_KEY_FN(gl_backward_delete_word); static KT_KEY_FN(gl_delete_refind); static KT_KEY_FN(gl_delete_invert_refind); static KT_KEY_FN(gl_delete_to_column); static KT_KEY_FN(gl_delete_to_parenthesis); static KT_KEY_FN(gl_forward_delete_find); static KT_KEY_FN(gl_backward_delete_find); static KT_KEY_FN(gl_forward_delete_to); static KT_KEY_FN(gl_backward_delete_to); static KT_KEY_FN(gl_upcase_word); static KT_KEY_FN(gl_downcase_word); static KT_KEY_FN(gl_capitalize_word); static KT_KEY_FN(gl_redisplay); static KT_KEY_FN(gl_clear_screen); static KT_KEY_FN(gl_transpose_chars); static KT_KEY_FN(gl_set_mark); static KT_KEY_FN(gl_exchange_point_and_mark); static KT_KEY_FN(gl_kill_region); static KT_KEY_FN(gl_copy_region_as_kill); static KT_KEY_FN(gl_yank); static KT_KEY_FN(gl_up_history); static KT_KEY_FN(gl_down_history); static KT_KEY_FN(gl_history_search_backward); static KT_KEY_FN(gl_history_re_search_backward); static KT_KEY_FN(gl_history_search_forward); static KT_KEY_FN(gl_history_re_search_forward); static KT_KEY_FN(gl_complete_word); #ifndef HIDE_FILE_SYSTEM static KT_KEY_FN(gl_expand_filename); static KT_KEY_FN(gl_read_from_file); static KT_KEY_FN(gl_read_init_files); static KT_KEY_FN(gl_list_glob); #endif static KT_KEY_FN(gl_del_char_or_list_or_eof); static KT_KEY_FN(gl_list_or_eof); static KT_KEY_FN(gl_beginning_of_history); static KT_KEY_FN(gl_end_of_history); static KT_KEY_FN(gl_digit_argument); static KT_KEY_FN(gl_newline); static KT_KEY_FN(gl_repeat_history); static KT_KEY_FN(gl_vi_insert); static KT_KEY_FN(gl_vi_overwrite); static KT_KEY_FN(gl_change_case); static KT_KEY_FN(gl_vi_insert_at_bol); static KT_KEY_FN(gl_vi_append_at_eol); static KT_KEY_FN(gl_vi_append); static KT_KEY_FN(gl_backward_kill_line); static KT_KEY_FN(gl_goto_column); static KT_KEY_FN(gl_forward_to_word); static KT_KEY_FN(gl_vi_replace_char); static KT_KEY_FN(gl_vi_change_rest_of_line); static KT_KEY_FN(gl_vi_change_line); static KT_KEY_FN(gl_vi_change_to_bol); static KT_KEY_FN(gl_vi_change_refind); static KT_KEY_FN(gl_vi_change_invert_refind); static KT_KEY_FN(gl_vi_change_to_column); static KT_KEY_FN(gl_vi_change_to_parenthesis); static KT_KEY_FN(gl_vi_forward_change_word); static KT_KEY_FN(gl_vi_backward_change_word); static KT_KEY_FN(gl_vi_forward_change_find); static KT_KEY_FN(gl_vi_backward_change_find); static KT_KEY_FN(gl_vi_forward_change_to); static KT_KEY_FN(gl_vi_backward_change_to); static KT_KEY_FN(gl_vi_forward_change_char); static KT_KEY_FN(gl_vi_backward_change_char); static KT_KEY_FN(gl_forward_copy_char); static KT_KEY_FN(gl_backward_copy_char); static KT_KEY_FN(gl_forward_find_char); static KT_KEY_FN(gl_backward_find_char); static KT_KEY_FN(gl_forward_to_char); static KT_KEY_FN(gl_backward_to_char); static KT_KEY_FN(gl_repeat_find_char); static KT_KEY_FN(gl_invert_refind_char); static KT_KEY_FN(gl_append_yank); static KT_KEY_FN(gl_backward_copy_word); static KT_KEY_FN(gl_forward_copy_word); static KT_KEY_FN(gl_copy_to_bol); static KT_KEY_FN(gl_copy_refind); static KT_KEY_FN(gl_copy_invert_refind); static KT_KEY_FN(gl_copy_to_column); static KT_KEY_FN(gl_copy_to_parenthesis); static KT_KEY_FN(gl_copy_rest_of_line); static KT_KEY_FN(gl_copy_line); static KT_KEY_FN(gl_backward_copy_find); static KT_KEY_FN(gl_forward_copy_find); static KT_KEY_FN(gl_backward_copy_to); static KT_KEY_FN(gl_forward_copy_to); static KT_KEY_FN(gl_vi_undo); static KT_KEY_FN(gl_emacs_editing_mode); static KT_KEY_FN(gl_vi_editing_mode); static KT_KEY_FN(gl_ring_bell); static KT_KEY_FN(gl_vi_repeat_change); static KT_KEY_FN(gl_find_parenthesis); static KT_KEY_FN(gl_list_history); static KT_KEY_FN(gl_list_completions); static KT_KEY_FN(gl_run_external_action); /* * Name the available action functions. */ static const struct {const char *name; KT_KEY_FN(*fn);} gl_actions[] = { {"user-interrupt", gl_user_interrupt}, {"abort", gl_abort}, {"suspend", gl_suspend}, {"stop-output", gl_stop_output}, {"start-output", gl_start_output}, {"literal-next", gl_literal_next}, {"cursor-right", gl_cursor_right}, {"cursor-left", gl_cursor_left}, {"insert-mode", gl_insert_mode}, {"beginning-of-line", gl_beginning_of_line}, {"end-of-line", gl_end_of_line}, {"delete-line", gl_delete_line}, {"kill-line", gl_kill_line}, {"forward-word", gl_forward_word}, {"backward-word", gl_backward_word}, {"forward-delete-char", gl_forward_delete_char}, {"backward-delete-char", gl_backward_delete_char}, {"forward-delete-word", gl_forward_delete_word}, {"backward-delete-word", gl_backward_delete_word}, {"delete-refind", gl_delete_refind}, {"delete-invert-refind", gl_delete_invert_refind}, {"delete-to-column", gl_delete_to_column}, {"delete-to-parenthesis", gl_delete_to_parenthesis}, {"forward-delete-find", gl_forward_delete_find}, {"backward-delete-find", gl_backward_delete_find}, {"forward-delete-to", gl_forward_delete_to}, {"backward-delete-to", gl_backward_delete_to}, {"upcase-word", gl_upcase_word}, {"downcase-word", gl_downcase_word}, {"capitalize-word", gl_capitalize_word}, {"redisplay", gl_redisplay}, {"clear-screen", gl_clear_screen}, {"transpose-chars", gl_transpose_chars}, {"set-mark", gl_set_mark}, {"exchange-point-and-mark", gl_exchange_point_and_mark}, {"kill-region", gl_kill_region}, {"copy-region-as-kill", gl_copy_region_as_kill}, {"yank", gl_yank}, {"up-history", gl_up_history}, {"down-history", gl_down_history}, {"history-search-backward", gl_history_search_backward}, {"history-re-search-backward", gl_history_re_search_backward}, {"history-search-forward", gl_history_search_forward}, {"history-re-search-forward", gl_history_re_search_forward}, {"complete-word", gl_complete_word}, #ifndef HIDE_FILE_SYSTEM {"expand-filename", gl_expand_filename}, {"read-from-file", gl_read_from_file}, {"read-init-files", gl_read_init_files}, {"list-glob", gl_list_glob}, #endif {"del-char-or-list-or-eof", gl_del_char_or_list_or_eof}, {"beginning-of-history", gl_beginning_of_history}, {"end-of-history", gl_end_of_history}, {"digit-argument", gl_digit_argument}, {"newline", gl_newline}, {"repeat-history", gl_repeat_history}, {"vi-insert", gl_vi_insert}, {"vi-overwrite", gl_vi_overwrite}, {"vi-insert-at-bol", gl_vi_insert_at_bol}, {"vi-append-at-eol", gl_vi_append_at_eol}, {"vi-append", gl_vi_append}, {"change-case", gl_change_case}, {"backward-kill-line", gl_backward_kill_line}, {"goto-column", gl_goto_column}, {"forward-to-word", gl_forward_to_word}, {"vi-replace-char", gl_vi_replace_char}, {"vi-change-rest-of-line", gl_vi_change_rest_of_line}, {"vi-change-line", gl_vi_change_line}, {"vi-change-to-bol", gl_vi_change_to_bol}, {"vi-change-refind", gl_vi_change_refind}, {"vi-change-invert-refind", gl_vi_change_invert_refind}, {"vi-change-to-column", gl_vi_change_to_column}, {"vi-change-to-parenthesis", gl_vi_change_to_parenthesis}, {"forward-copy-char", gl_forward_copy_char}, {"backward-copy-char", gl_backward_copy_char}, {"forward-find-char", gl_forward_find_char}, {"backward-find-char", gl_backward_find_char}, {"forward-to-char", gl_forward_to_char}, {"backward-to-char", gl_backward_to_char}, {"repeat-find-char", gl_repeat_find_char}, {"invert-refind-char", gl_invert_refind_char}, {"append-yank", gl_append_yank}, {"backward-copy-word", gl_backward_copy_word}, {"forward-copy-word", gl_forward_copy_word}, {"copy-to-bol", gl_copy_to_bol}, {"copy-refind", gl_copy_refind}, {"copy-invert-refind", gl_copy_invert_refind}, {"copy-to-column", gl_copy_to_column}, {"copy-to-parenthesis", gl_copy_to_parenthesis}, {"copy-rest-of-line", gl_copy_rest_of_line}, {"copy-line", gl_copy_line}, {"backward-copy-find", gl_backward_copy_find}, {"forward-copy-find", gl_forward_copy_find}, {"backward-copy-to", gl_backward_copy_to}, {"forward-copy-to", gl_forward_copy_to}, {"list-or-eof", gl_list_or_eof}, {"vi-undo", gl_vi_undo}, {"vi-backward-change-word", gl_vi_backward_change_word}, {"vi-forward-change-word", gl_vi_forward_change_word}, {"vi-backward-change-find", gl_vi_backward_change_find}, {"vi-forward-change-find", gl_vi_forward_change_find}, {"vi-backward-change-to", gl_vi_backward_change_to}, {"vi-forward-change-to", gl_vi_forward_change_to}, {"vi-backward-change-char", gl_vi_backward_change_char}, {"vi-forward-change-char", gl_vi_forward_change_char}, {"emacs-mode", gl_emacs_editing_mode}, {"vi-mode", gl_vi_editing_mode}, {"ring-bell", gl_ring_bell}, {"vi-repeat-change", gl_vi_repeat_change}, {"find-parenthesis", gl_find_parenthesis}, {"list-history", gl_list_history}, }; /* * Define the default key-bindings in emacs mode. */ static const KtKeyBinding gl_emacs_bindings[] = { {"right", "cursor-right"}, {"^F", "cursor-right"}, {"left", "cursor-left"}, {"^B", "cursor-left"}, {"M-i", "insert-mode"}, {"M-I", "insert-mode"}, {"^A", "beginning-of-line"}, {"^E", "end-of-line"}, {"^U", "delete-line"}, {"^K", "kill-line"}, {"M-f", "forward-word"}, {"M-F", "forward-word"}, {"M-b", "backward-word"}, {"M-B", "backward-word"}, {"^D", "del-char-or-list-or-eof"}, {"^H", "backward-delete-char"}, {"^?", "backward-delete-char"}, {"M-d", "forward-delete-word"}, {"M-D", "forward-delete-word"}, {"M-^H", "backward-delete-word"}, {"M-^?", "backward-delete-word"}, {"M-u", "upcase-word"}, {"M-U", "upcase-word"}, {"M-l", "downcase-word"}, {"M-L", "downcase-word"}, {"M-c", "capitalize-word"}, {"M-C", "capitalize-word"}, {"^R", "redisplay"}, {"^L", "clear-screen"}, {"^T", "transpose-chars"}, {"^@", "set-mark"}, {"^X^X", "exchange-point-and-mark"}, {"^W", "kill-region"}, {"M-w", "copy-region-as-kill"}, {"M-W", "copy-region-as-kill"}, {"^Y", "yank"}, {"^P", "up-history"}, {"up", "up-history"}, {"^N", "down-history"}, {"down", "down-history"}, {"M-p", "history-search-backward"}, {"M-P", "history-search-backward"}, {"M-n", "history-search-forward"}, {"M-N", "history-search-forward"}, {"\t", "complete-word"}, #ifndef HIDE_FILE_SYSTEM {"^X*", "expand-filename"}, {"^X^F", "read-from-file"}, {"^X^R", "read-init-files"}, {"^Xg", "list-glob"}, {"^XG", "list-glob"}, #endif {"^Xh", "list-history"}, {"^XH", "list-history"}, {"M-<", "beginning-of-history"}, {"M->", "end-of-history"}, {"M-0", "digit-argument"}, {"M-1", "digit-argument"}, {"M-2", "digit-argument"}, {"M-3", "digit-argument"}, {"M-4", "digit-argument"}, {"M-5", "digit-argument"}, {"M-6", "digit-argument"}, {"M-7", "digit-argument"}, {"M-8", "digit-argument"}, {"M-9", "digit-argument"}, {"\r", "newline"}, {"\n", "newline"}, {"M-o", "repeat-history"}, {"M-C-v", "vi-mode"}, }; /* * Define the default key-bindings in vi mode. Note that in vi-mode * meta-key bindings are command-mode bindings. For example M-i first * switches to command mode if not already in that mode, then moves * the cursor one position right, as in vi. */ static const KtKeyBinding gl_vi_bindings[] = { {"^D", "list-or-eof"}, #ifndef HIDE_FILE_SYSTEM {"^G", "list-glob"}, #endif {"^H", "backward-delete-char"}, {"\t", "complete-word"}, {"\r", "newline"}, {"\n", "newline"}, {"^L", "clear-screen"}, {"^N", "down-history"}, {"^P", "up-history"}, {"^R", "redisplay"}, {"^U", "backward-kill-line"}, {"^W", "backward-delete-word"}, #ifndef HIDE_FILE_SYSTEM {"^X^F", "read-from-file"}, {"^X^R", "read-init-files"}, {"^X*", "expand-filename"}, #endif {"^?", "backward-delete-char"}, {"M- ", "cursor-right"}, {"M-$", "end-of-line"}, #ifndef HIDE_FILE_SYSTEM {"M-*", "expand-filename"}, #endif {"M-+", "down-history"}, {"M--", "up-history"}, {"M-<", "beginning-of-history"}, {"M->", "end-of-history"}, {"M-^", "beginning-of-line"}, {"M-;", "repeat-find-char"}, {"M-,", "invert-refind-char"}, {"M-|", "goto-column"}, {"M-~", "change-case"}, {"M-.", "vi-repeat-change"}, {"M-%", "find-parenthesis"}, {"M-0", "digit-argument"}, {"M-1", "digit-argument"}, {"M-2", "digit-argument"}, {"M-3", "digit-argument"}, {"M-4", "digit-argument"}, {"M-5", "digit-argument"}, {"M-6", "digit-argument"}, {"M-7", "digit-argument"}, {"M-8", "digit-argument"}, {"M-9", "digit-argument"}, {"M-a", "vi-append"}, {"M-A", "vi-append-at-eol"}, {"M-b", "backward-word"}, {"M-B", "backward-word"}, {"M-C", "vi-change-rest-of-line"}, {"M-cb", "vi-backward-change-word"}, {"M-cB", "vi-backward-change-word"}, {"M-cc", "vi-change-line"}, {"M-ce", "vi-forward-change-word"}, {"M-cE", "vi-forward-change-word"}, {"M-cw", "vi-forward-change-word"}, {"M-cW", "vi-forward-change-word"}, {"M-cF", "vi-backward-change-find"}, {"M-cf", "vi-forward-change-find"}, {"M-cT", "vi-backward-change-to"}, {"M-ct", "vi-forward-change-to"}, {"M-c;", "vi-change-refind"}, {"M-c,", "vi-change-invert-refind"}, {"M-ch", "vi-backward-change-char"}, {"M-c^H", "vi-backward-change-char"}, {"M-c^?", "vi-backward-change-char"}, {"M-cl", "vi-forward-change-char"}, {"M-c ", "vi-forward-change-char"}, {"M-c^", "vi-change-to-bol"}, {"M-c0", "vi-change-to-bol"}, {"M-c$", "vi-change-rest-of-line"}, {"M-c|", "vi-change-to-column"}, {"M-c%", "vi-change-to-parenthesis"}, {"M-dh", "backward-delete-char"}, {"M-d^H", "backward-delete-char"}, {"M-d^?", "backward-delete-char"}, {"M-dl", "forward-delete-char"}, {"M-d ", "forward-delete-char"}, {"M-dd", "delete-line"}, {"M-db", "backward-delete-word"}, {"M-dB", "backward-delete-word"}, {"M-de", "forward-delete-word"}, {"M-dE", "forward-delete-word"}, {"M-dw", "forward-delete-word"}, {"M-dW", "forward-delete-word"}, {"M-dF", "backward-delete-find"}, {"M-df", "forward-delete-find"}, {"M-dT", "backward-delete-to"}, {"M-dt", "forward-delete-to"}, {"M-d;", "delete-refind"}, {"M-d,", "delete-invert-refind"}, {"M-d^", "backward-kill-line"}, {"M-d0", "backward-kill-line"}, {"M-d$", "kill-line"}, {"M-D", "kill-line"}, {"M-d|", "delete-to-column"}, {"M-d%", "delete-to-parenthesis"}, {"M-e", "forward-word"}, {"M-E", "forward-word"}, {"M-f", "forward-find-char"}, {"M-F", "backward-find-char"}, {"M--", "up-history"}, {"M-h", "cursor-left"}, {"M-H", "beginning-of-history"}, {"M-i", "vi-insert"}, {"M-I", "vi-insert-at-bol"}, {"M-j", "down-history"}, {"M-J", "history-search-forward"}, {"M-k", "up-history"}, {"M-K", "history-search-backward"}, {"M-l", "cursor-right"}, {"M-L", "end-of-history"}, {"M-n", "history-re-search-forward"}, {"M-N", "history-re-search-backward"}, {"M-p", "append-yank"}, {"M-P", "yank"}, {"M-r", "vi-replace-char"}, {"M-R", "vi-overwrite"}, {"M-s", "vi-forward-change-char"}, {"M-S", "vi-change-line"}, {"M-t", "forward-to-char"}, {"M-T", "backward-to-char"}, {"M-u", "vi-undo"}, {"M-w", "forward-to-word"}, {"M-W", "forward-to-word"}, {"M-x", "forward-delete-char"}, {"M-X", "backward-delete-char"}, {"M-yh", "backward-copy-char"}, {"M-y^H", "backward-copy-char"}, {"M-y^?", "backward-copy-char"}, {"M-yl", "forward-copy-char"}, {"M-y ", "forward-copy-char"}, {"M-ye", "forward-copy-word"}, {"M-yE", "forward-copy-word"}, {"M-yw", "forward-copy-word"}, {"M-yW", "forward-copy-word"}, {"M-yb", "backward-copy-word"}, {"M-yB", "backward-copy-word"}, {"M-yf", "forward-copy-find"}, {"M-yF", "backward-copy-find"}, {"M-yt", "forward-copy-to"}, {"M-yT", "backward-copy-to"}, {"M-y;", "copy-refind"}, {"M-y,", "copy-invert-refind"}, {"M-y^", "copy-to-bol"}, {"M-y0", "copy-to-bol"}, {"M-y$", "copy-rest-of-line"}, {"M-yy", "copy-line"}, {"M-Y", "copy-line"}, {"M-y|", "copy-to-column"}, {"M-y%", "copy-to-parenthesis"}, {"M-^E", "emacs-mode"}, {"M-^H", "cursor-left"}, {"M-^?", "cursor-left"}, {"M-^L", "clear-screen"}, {"M-^N", "down-history"}, {"M-^P", "up-history"}, {"M-^R", "redisplay"}, {"M-^D", "list-or-eof"}, {"M-\r", "newline"}, {"M-\t", "complete-word"}, {"M-\n", "newline"}, #ifndef HIDE_FILE_SYSTEM {"M-^X^R", "read-init-files"}, #endif {"M-^Xh", "list-history"}, {"M-^XH", "list-history"}, {"down", "down-history"}, {"up", "up-history"}, {"left", "cursor-left"}, {"right", "cursor-right"}, }; /*....................................................................... * Create a new GetLine object. * * Input: * linelen size_t The maximum line length to allow for. * histlen size_t The number of bytes to allocate for recording * a circular buffer of history lines. * Output: * return GetLine * The new object, or NULL on error. */ GetLine *new_GetLine(size_t linelen, size_t histlen) { GetLine *gl; /* The object to be returned */ int i; /* * Check the arguments. */ if(linelen < 10) { errno = ENOMEM; return NULL; }; /* * Allocate the container. */ gl = (GetLine *) malloc(sizeof(GetLine)); if(!gl) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_GetLine(). */ gl->err = NULL; gl->glh = NULL; gl->cpl = NULL; #ifndef HIDE_FILE_SYSTEM gl->cplfn.fn = cpl_file_completions; #else gl->cplfn.fn = gl_no_completions; #endif gl->cplfn.data = NULL; #ifndef WITHOUT_FILE_SYSTEM gl->ef = NULL; #endif gl->capmem = NULL; gl->cq = NULL; gl->input_fd = -1; gl->output_fd = -1; gl->input_fp = NULL; gl->output_fp = NULL; gl->file_fp = NULL; gl->term = NULL; gl->is_term = 0; gl->flush_fn = gl_flush_terminal; gl->io_mode = GL_NORMAL_MODE; gl->raw_mode = 0; gl->pending_io = GLP_WRITE; /* We will start by writing the prompt */ gl_clear_status(gl); gl->linelen = linelen; gl->line = NULL; gl->cutbuf = NULL; gl->prompt = NULL; gl->prompt_len = 0; gl->prompt_changed = 0; gl->prompt_style = GL_LITERAL_PROMPT; gl->cpl_mem = NULL; gl->ext_act_mem = NULL; gl->sig_mem = NULL; gl->sigs = NULL; gl->signals_masked = 0; gl->signals_overriden = 0; sigemptyset(&gl->all_signal_set); sigemptyset(&gl->old_signal_set); sigemptyset(&gl->use_signal_set); gl->bindings = NULL; gl->ntotal = 0; gl->buff_curpos = 0; gl->term_curpos = 0; gl->term_len = 0; gl->buff_mark = 0; gl->insert_curpos = 0; gl->insert = 1; gl->number = -1; gl->endline = 1; gl->displayed = 0; gl->redisplay = 0; gl->postpone = 0; gl->keybuf[0]='\0'; gl->nbuf = 0; gl->nread = 0; gl->current_action.fn = 0; gl->current_action.data = NULL; gl->current_count = 0; gl->preload_id = 0; gl->preload_history = 0; gl->keyseq_count = 0; gl->last_search = -1; gl->editor = GL_EMACS_MODE; gl->silence_bell = 0; gl->automatic_history = 1; gl->vi.undo.line = NULL; gl->vi.undo.buff_curpos = 0; gl->vi.undo.ntotal = 0; gl->vi.undo.saved = 0; gl->vi.repeat.action.fn = 0; gl->vi.repeat.action.data = 0; gl->vi.repeat.count = 0; gl->vi.repeat.input_curpos = 0; gl->vi.repeat.command_curpos = 0; gl->vi.repeat.input_char = '\0'; gl->vi.repeat.saved = 0; gl->vi.repeat.active = 0; gl->vi.command = 0; gl->vi.find_forward = 0; gl->vi.find_onto = 0; gl->vi.find_char = '\0'; gl->left = NULL; gl->right = NULL; gl->up = NULL; gl->down = NULL; gl->home = NULL; gl->bol = 0; gl->clear_eol = NULL; gl->clear_eod = NULL; gl->u_arrow = NULL; gl->d_arrow = NULL; gl->l_arrow = NULL; gl->r_arrow = NULL; gl->sound_bell = NULL; gl->bold = NULL; gl->underline = NULL; gl->standout = NULL; gl->dim = NULL; gl->reverse = NULL; gl->blink = NULL; gl->text_attr_off = NULL; gl->nline = 0; gl->ncolumn = 0; #ifdef USE_TERMINFO gl->left_n = NULL; gl->right_n = NULL; #elif defined(USE_TERMCAP) gl->tgetent_buf = NULL; gl->tgetstr_buf = NULL; #endif gl->app_file = NULL; gl->user_file = NULL; gl->configured = 0; gl->echo = 1; gl->last_signal = -1; #ifdef HAVE_SELECT gl->fd_node_mem = NULL; gl->fd_nodes = NULL; FD_ZERO(&gl->rfds); FD_ZERO(&gl->wfds); FD_ZERO(&gl->ufds); gl->max_fd = 0; gl->timer.dt.tv_sec = 0; gl->timer.dt.tv_usec = 0; gl->timer.fn = 0; gl->timer.data = NULL; #endif /* * Allocate an error reporting buffer. */ gl->err = _new_ErrMsg(); if(!gl->err) return del_GetLine(gl); /* * Allocate the history buffer. */ gl->glh = _new_GlHistory(histlen); if(!gl->glh) return del_GetLine(gl); /* * Allocate the resource object for file-completion. */ gl->cpl = new_WordCompletion(); if(!gl->cpl) return del_GetLine(gl); /* * Allocate the resource object for file-completion. */ #ifndef WITHOUT_FILE_SYSTEM gl->ef = new_ExpandFile(); if(!gl->ef) return del_GetLine(gl); #endif /* * Allocate a string-segment memory allocator for use in storing terminal * capablity strings. */ gl->capmem = _new_StringGroup(CAPMEM_SEGMENT_SIZE); if(!gl->capmem) return del_GetLine(gl); /* * Allocate the character queue that is used to buffer terminal output. */ gl->cq = _new_GlCharQueue(); if(!gl->cq) return del_GetLine(gl); /* * Allocate a line buffer, leaving 2 extra characters for the terminating * '\n' and '\0' characters */ gl->line = (char *) malloc(linelen + 2); if(!gl->line) { errno = ENOMEM; return del_GetLine(gl); }; /* * Start with an empty input line. */ gl_truncate_buffer(gl, 0); /* * Allocate a cut buffer. */ gl->cutbuf = (char *) malloc(linelen + 2); if(!gl->cutbuf) { errno = ENOMEM; return del_GetLine(gl); }; gl->cutbuf[0] = '\0'; /* * Allocate an initial empty prompt. */ _gl_replace_prompt(gl, NULL); if(!gl->prompt) { errno = ENOMEM; return del_GetLine(gl); }; /* * Allocate a vi undo buffer. */ gl->vi.undo.line = (char *) malloc(linelen + 2); if(!gl->vi.undo.line) { errno = ENOMEM; return del_GetLine(gl); }; gl->vi.undo.line[0] = '\0'; /* * Allocate a freelist from which to allocate nodes for the list * of completion functions. */ gl->cpl_mem = _new_FreeList(sizeof(GlCplCallback), GL_CPL_FREELIST_BLOCKING); if(!gl->cpl_mem) return del_GetLine(gl); /* * Allocate a freelist from which to allocate nodes for the list * of external action functions. */ gl->ext_act_mem = _new_FreeList(sizeof(GlExternalAction), GL_EXT_ACT_FREELIST_BLOCKING); if(!gl->ext_act_mem) return del_GetLine(gl); /* * Allocate a freelist from which to allocate nodes for the list * of signals. */ gl->sig_mem = _new_FreeList(sizeof(GlSignalNode), GLS_FREELIST_BLOCKING); if(!gl->sig_mem) return del_GetLine(gl); /* * Install initial dispositions for the default list of signals that * gl_get_line() traps. */ for(i=0; isigno, sig->flags, sig->after, sig->errno_value)) return del_GetLine(gl); }; /* * Allocate an empty table of key bindings. */ gl->bindings = _new_KeyTab(); if(!gl->bindings) return del_GetLine(gl); /* * Define the available actions that can be bound to key sequences. */ for(i=0; ibindings, gl_actions[i].name, gl_actions[i].fn, NULL)) return del_GetLine(gl); }; /* * Set up the default bindings. */ if(gl_change_editor(gl, gl->editor)) return del_GetLine(gl); /* * Allocate termcap buffers. */ #ifdef USE_TERMCAP gl->tgetent_buf = (char *) malloc(TERMCAP_BUF_SIZE); gl->tgetstr_buf = (char *) malloc(TERMCAP_BUF_SIZE); if(!gl->tgetent_buf || !gl->tgetstr_buf) { errno = ENOMEM; return del_GetLine(gl); }; #endif /* * Set up for I/O assuming stdin and stdout. */ if(_gl_change_terminal(gl, stdin, stdout, getenv("TERM"))) return del_GetLine(gl); /* * Create a freelist for use in allocating GlFdNode list nodes. */ #ifdef HAVE_SELECT gl->fd_node_mem = _new_FreeList(sizeof(GlFdNode), GLFD_FREELIST_BLOCKING); if(!gl->fd_node_mem) return del_GetLine(gl); #endif /* * We are done for now. */ return gl; } /*....................................................................... * Delete a GetLine object. * * Input: * gl GetLine * The object to be deleted. * Output: * return GetLine * The deleted object (always NULL). */ GetLine *del_GetLine(GetLine *gl) { if(gl) { /* * If the terminal is in raw server mode, reset it. */ _gl_normal_io(gl); /* * Deallocate all objects contained by gl. */ gl->err = _del_ErrMsg(gl->err); gl->glh = _del_GlHistory(gl->glh); gl->cpl = del_WordCompletion(gl->cpl); #ifndef WITHOUT_FILE_SYSTEM gl->ef = del_ExpandFile(gl->ef); #endif gl->capmem = _del_StringGroup(gl->capmem); gl->cq = _del_GlCharQueue(gl->cq); if(gl->file_fp) fclose(gl->file_fp); if(gl->term) free(gl->term); if(gl->line) free(gl->line); if(gl->cutbuf) free(gl->cutbuf); if(gl->prompt) free(gl->prompt); gl->cpl_mem = _del_FreeList(gl->cpl_mem, 1); gl->ext_act_mem = _del_FreeList(gl->ext_act_mem, 1); gl->sig_mem = _del_FreeList(gl->sig_mem, 1); gl->sigs = NULL; /* Already freed by freeing sig_mem */ gl->bindings = _del_KeyTab(gl->bindings); if(gl->vi.undo.line) free(gl->vi.undo.line); #ifdef USE_TERMCAP if(gl->tgetent_buf) free(gl->tgetent_buf); if(gl->tgetstr_buf) free(gl->tgetstr_buf); #endif if(gl->app_file) free(gl->app_file); if(gl->user_file) free(gl->user_file); #ifdef HAVE_SELECT gl->fd_node_mem = _del_FreeList(gl->fd_node_mem, 1); gl->fd_nodes = NULL; /* Already freed by freeing gl->fd_node_mem */ #endif /* * Delete the now empty container. */ free(gl); }; return NULL; } /*....................................................................... * Bind a control or meta character to an action. * * Input: * gl GetLine * The resource object of this program. * binder KtBinder The source of the binding. * c char The control or meta character. * If this is '\0', the call is ignored. * action const char * The action name to bind the key to. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_bind_control_char(GetLine *gl, KtBinder binder, char c, const char *action) { char keyseq[2]; /* * Quietly reject binding to the NUL control character, since this * is an ambiguous prefix of all bindings. */ if(c == '\0') return 0; /* * Making sure not to bind characters which aren't either control or * meta characters. */ if(IS_CTRL_CHAR(c) || IS_META_CHAR(c)) { keyseq[0] = c; keyseq[1] = '\0'; } else { return 0; }; /* * Install the binding. */ if(_kt_set_keybinding(gl->bindings, binder, keyseq, action)) { _err_record_msg(gl->err, _kt_last_error(gl->bindings), END_ERR_MSG); return 1; }; return 0; } /*....................................................................... * Read a line from the user. * * Input: * gl GetLine * A resource object returned by new_GetLine(). * prompt char * The prompt to prefix the line with. * start_line char * The initial contents of the input line, or NULL * if it should start out empty. * start_pos int If start_line isn't NULL, this specifies the * index of the character over which the cursor * should initially be positioned within the line. * If you just want it to follow the last character * of the line, send -1. * Output: * return char * An internal buffer containing the input line, or * NULL at the end of input. If the line fitted in * the buffer there will be a '\n' newline character * before the terminating '\0'. If it was truncated * there will be no newline character, and the remains * of the line should be retrieved via further calls * to this function. */ char *gl_get_line(GetLine *gl, const char *prompt, const char *start_line, int start_pos) { char *retval; /* The return value of _gl_get_line() */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return NULL; }; /* * Temporarily block all of the signals that we have been asked to trap. */ if(gl_mask_signals(gl, &gl->old_signal_set)) return NULL; /* * Perform the command-line editing task. */ retval = _gl_get_line(gl, prompt, start_line, start_pos); /* * Restore the process signal mask to how it was when this function was * first called. */ gl_unmask_signals(gl, &gl->old_signal_set); return retval; } /*....................................................................... * This is the main body of the public function gl_get_line(). */ static char *_gl_get_line(GetLine *gl, const char *prompt, const char *start_line, int start_pos) { int waserr = 0; /* True if an error occurs */ /* * Assume that this call will successfully complete the input * line until proven otherwise. */ gl_clear_status(gl); /* * If this is the first call to this function since new_GetLine(), * complete any postponed configuration. */ if(!gl->configured) { (void) _gl_configure_getline(gl, NULL, NULL, TECLA_CONFIG_FILE); gl->configured = 1; }; /* * Before installing our signal handler functions, record the fact * that there are no pending signals. */ gl_pending_signal = -1; /* * Temporarily override the signal handlers of the calling program, * so that we can intercept signals that would leave the terminal * in a bad state. */ waserr = gl_override_signal_handlers(gl); /* * After recording the current terminal settings, switch the terminal * into raw input mode. */ waserr = waserr || _gl_raw_io(gl, 1); /* * Attempt to read the line. This will require more than one attempt if * either a current temporary input file is opened by gl_get_input_line() * or the end of a temporary input file is reached by gl_read_stream_line(). */ while(!waserr) { /* * Read a line from a non-interactive stream? */ if(gl->file_fp || !gl->is_term) { if(gl_read_stream_line(gl)==0) { break; } else if(gl->file_fp) { gl_revert_input(gl); gl_record_status(gl, GLR_NEWLINE, 0); } else { waserr = 1; break; }; }; /* * Read from the terminal? Note that the above if() block may have * changed gl->file_fp, so it is necessary to retest it here, rather * than using an else statement. */ if(!gl->file_fp && gl->is_term) { if(gl_get_input_line(gl, prompt, start_line, start_pos)) waserr = 1; else break; }; }; /* * If an error occurred, but gl->rtn_status is still set to * GLR_NEWLINE, change the status to GLR_ERROR. Otherwise * leave it at whatever specific value was assigned by the function * that aborted input. This means that only functions that trap * non-generic errors have to remember to update gl->rtn_status * themselves. */ if(waserr && gl->rtn_status == GLR_NEWLINE) gl_record_status(gl, GLR_ERROR, errno); /* * Restore terminal settings. */ if(gl->io_mode != GL_SERVER_MODE) _gl_normal_io(gl); /* * Restore the signal handlers. */ gl_restore_signal_handlers(gl); /* * If gl_get_line() gets aborted early, the errno value associated * with the event that caused this to happen is recorded in * gl->rtn_errno. Since errno may have been overwritten by cleanup * functions after this, restore its value to the value that it had * when the error condition occured, so that the caller can examine it * to find out what happened. */ errno = gl->rtn_errno; /* * Check the completion status to see how to return. */ switch(gl->rtn_status) { case GLR_NEWLINE: /* Success */ return gl->line; case GLR_BLOCKED: /* These events abort the current input line, */ case GLR_SIGNAL: /* when in normal blocking I/O mode, but only */ case GLR_TIMEOUT: /* temporarily pause line editing when in */ case GLR_FDABORT: /* non-blocking server I/O mode. */ if(gl->io_mode != GL_SERVER_MODE) _gl_abandon_line(gl); return NULL; case GLR_ERROR: /* Unrecoverable errors abort the input line, */ case GLR_EOF: /* regardless of the I/O mode. */ default: _gl_abandon_line(gl); return NULL; }; } /*....................................................................... * Read a single character from the user. * * Input: * gl GetLine * A resource object returned by new_GetLine(). * prompt char * The prompt to prefix the line with, or NULL if * no prompt is required. * defchar char The character to substitute if the * user simply hits return, or '\n' if you don't * need to substitute anything. * Output: * return int The character that was read, or EOF if the read * had to be aborted (in which case you can call * gl_return_status() to find out why). */ int gl_query_char(GetLine *gl, const char *prompt, char defchar) { int retval; /* The return value of _gl_query_char() */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return EOF; }; /* * Temporarily block all of the signals that we have been asked to trap. */ if(gl_mask_signals(gl, &gl->old_signal_set)) return EOF; /* * Perform the character reading task. */ retval = _gl_query_char(gl, prompt, defchar); /* * Restore the process signal mask to how it was when this function was * first called. */ gl_unmask_signals(gl, &gl->old_signal_set); return retval; } /*....................................................................... * This is the main body of the public function gl_query_char(). */ static int _gl_query_char(GetLine *gl, const char *prompt, char defchar) { int c = EOF; /* The character to be returned */ int waserr = 0; /* True if an error occurs */ /* * Assume that this call will successfully complete the input operation * until proven otherwise. */ gl_clear_status(gl); /* * If this is the first call to this function or gl_get_line(), * since new_GetLine(), complete any postponed configuration. */ if(!gl->configured) { (void) _gl_configure_getline(gl, NULL, NULL, TECLA_CONFIG_FILE); gl->configured = 1; }; /* * Before installing our signal handler functions, record the fact * that there are no pending signals. */ gl_pending_signal = -1; /* * Temporarily override the signal handlers of the calling program, * so that we can intercept signals that would leave the terminal * in a bad state. */ waserr = gl_override_signal_handlers(gl); /* * After recording the current terminal settings, switch the terminal * into raw input mode without redisplaying any partially entered * input line. */ waserr = waserr || _gl_raw_io(gl, 0); /* * Attempt to read the line. This will require more than one attempt if * either a current temporary input file is opened by gl_get_input_line() * or the end of a temporary input file is reached by gl_read_stream_line(). */ while(!waserr) { /* * Read a line from a non-interactive stream? */ if(gl->file_fp || !gl->is_term) { c = gl_read_stream_char(gl); if(c != EOF) { /* Success? */ if(c=='\n') c = defchar; break; } else if(gl->file_fp) { /* End of temporary input file? */ gl_revert_input(gl); gl_record_status(gl, GLR_NEWLINE, 0); } else { /* An error? */ waserr = 1; break; }; }; /* * Read from the terminal? Note that the above if() block may have * changed gl->file_fp, so it is necessary to retest it here, rather * than using an else statement. */ if(!gl->file_fp && gl->is_term) { c = gl_get_query_char(gl, prompt, defchar); if(c==EOF) waserr = 1; else break; }; }; /* * If an error occurred, but gl->rtn_status is still set to * GLR_NEWLINE, change the status to GLR_ERROR. Otherwise * leave it at whatever specific value was assigned by the function * that aborted input. This means that only functions that trap * non-generic errors have to remember to update gl->rtn_status * themselves. */ if(waserr && gl->rtn_status == GLR_NEWLINE) gl_record_status(gl, GLR_ERROR, errno); /* * Restore terminal settings. */ if(gl->io_mode != GL_SERVER_MODE) _gl_normal_io(gl); /* * Restore the signal handlers. */ gl_restore_signal_handlers(gl); /* * If this function gets aborted early, the errno value associated * with the event that caused this to happen is recorded in * gl->rtn_errno. Since errno may have been overwritten by cleanup * functions after this, restore its value to the value that it had * when the error condition occured, so that the caller can examine it * to find out what happened. */ errno = gl->rtn_errno; /* * Error conditions are signalled to the caller, by setting the returned * character to EOF. */ if(gl->rtn_status != GLR_NEWLINE) c = EOF; /* * In this mode, every character that is read is a completed * transaction, just like reading a completed input line, so prepare * for the next input line or character. */ _gl_abandon_line(gl); /* * Return the acquired character. */ return c; } /*....................................................................... * Record of the signal handlers of the calling program, so that they * can be restored later. * * Input: * gl GetLine * The resource object of this library. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_override_signal_handlers(GetLine *gl) { GlSignalNode *sig; /* A node in the list of signals to be caught */ /* * Set up our signal handler. */ SigAction act; act.sa_handler = gl_signal_handler; memcpy(&act.sa_mask, &gl->all_signal_set, sizeof(sigset_t)); act.sa_flags = 0; /* * Get the subset of the signals that we are supposed to trap that * should actually be trapped. */ sigemptyset(&gl->use_signal_set); for(sig=gl->sigs; sig; sig=sig->next) { /* * Trap this signal? If it is blocked by the calling program and we * haven't been told to unblock it, don't arrange to trap this signal. */ if(sig->flags & GLS_UNBLOCK_SIG || !sigismember(&gl->old_signal_set, sig->signo)) { if(sigaddset(&gl->use_signal_set, sig->signo) == -1) { _err_record_msg(gl->err, "sigaddset error", END_ERR_MSG); return 1; }; }; }; /* * Override the actions of the signals that we are trapping. */ for(sig=gl->sigs; sig; sig=sig->next) { if(sigismember(&gl->use_signal_set, sig->signo)) { sigdelset(&act.sa_mask, sig->signo); if(sigaction(sig->signo, &act, &sig->original)) { _err_record_msg(gl->err, "sigaction error", END_ERR_MSG); return 1; }; sigaddset(&act.sa_mask, sig->signo); }; }; /* * Record the fact that the application's signal handlers have now * been overriden. */ gl->signals_overriden = 1; /* * Just in case a SIGWINCH signal was sent to the process while our * SIGWINCH signal handler wasn't in place, check to see if the terminal * size needs updating. */ if(_gl_update_size(gl)) return 1; return 0; } /*....................................................................... * Restore the signal handlers of the calling program. * * Input: * gl GetLine * The resource object of this library. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_restore_signal_handlers(GetLine *gl) { GlSignalNode *sig; /* A node in the list of signals to be caught */ /* * Restore application signal handlers that were overriden * by gl_override_signal_handlers(). */ for(sig=gl->sigs; sig; sig=sig->next) { if(sigismember(&gl->use_signal_set, sig->signo) && sigaction(sig->signo, &sig->original, NULL)) { _err_record_msg(gl->err, "sigaction error", END_ERR_MSG); return 1; }; }; /* * Record the fact that the application's signal handlers have now * been restored. */ gl->signals_overriden = 0; return 0; } /*....................................................................... * This signal handler simply records the fact that a given signal was * caught in the file-scope gl_pending_signal variable. */ static void gl_signal_handler(int signo) { gl_pending_signal = signo; siglongjmp(gl_setjmp_buffer, 1); } /*....................................................................... * Switch the terminal into raw mode after storing the previous terminal * settings in gl->attributes. * * Input: * gl GetLine * The resource object of this program. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_raw_terminal_mode(GetLine *gl) { Termios newattr; /* The new terminal attributes */ /* * If the terminal is already in raw mode, do nothing. */ if(gl->raw_mode) return 0; /* * Record the current terminal attributes. */ if(tcgetattr(gl->input_fd, &gl->oldattr)) { _err_record_msg(gl->err, "tcgetattr error", END_ERR_MSG); return 1; }; /* * This function shouldn't do anything but record the current terminal * attritubes if editing has been disabled. */ if(gl->editor == GL_NO_EDITOR) return 0; /* * Modify the existing attributes. */ newattr = gl->oldattr; /* * Turn off local echo, canonical input mode and extended input processing. */ newattr.c_lflag &= ~(ECHO | ICANON | IEXTEN); /* * Don't translate carriage return to newline, turn off input parity * checking, don't strip off 8th bit, turn off output flow control. */ newattr.c_iflag &= ~(ICRNL | INPCK | ISTRIP); /* * Clear size bits, turn off parity checking, and allow 8-bit characters. */ newattr.c_cflag &= ~(CSIZE | PARENB); newattr.c_cflag |= CS8; /* * Turn off output processing. */ newattr.c_oflag &= ~(OPOST); /* * Request one byte at a time, without waiting. */ newattr.c_cc[VMIN] = gl->io_mode==GL_SERVER_MODE ? 0:1; newattr.c_cc[VTIME] = 0; /* * Install the new terminal modes. */ while(tcsetattr(gl->input_fd, TCSADRAIN, &newattr)) { if(errno != EINTR) { _err_record_msg(gl->err, "tcsetattr error", END_ERR_MSG); return 1; }; }; /* * Record the new terminal mode. */ gl->raw_mode = 1; return 0; } /*....................................................................... * Restore the terminal attributes recorded in gl->oldattr. * * Input: * gl GetLine * The resource object of this library. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_restore_terminal_attributes(GetLine *gl) { int waserr = 0; /* * If not in raw mode, do nothing. */ if(!gl->raw_mode) return 0; /* * Before changing the terminal attributes, make sure that all output * has been passed to the terminal. */ if(gl_flush_output(gl)) waserr = 1; /* * Reset the terminal attributes to the values that they had on * entry to gl_get_line(). */ while(tcsetattr(gl->input_fd, TCSADRAIN, &gl->oldattr)) { if(errno != EINTR) { _err_record_msg(gl->err, "tcsetattr error", END_ERR_MSG); waserr = 1; break; }; }; /* * Record the new terminal mode. */ gl->raw_mode = 0; return waserr; } /*....................................................................... * Switch the terminal file descriptor to use non-blocking I/O. * * Input: * gl GetLine * The resource object of gl_get_line(). * fd int The file descriptor to make non-blocking. */ static int gl_nonblocking_io(GetLine *gl, int fd) { int fcntl_flags; /* The new file-descriptor control flags */ /* * Is non-blocking I/O supported on this system? Note that even * without non-blocking I/O, the terminal will probably still act as * though it was non-blocking, because we also set the terminal * attributes to return immediately if no input is available and we * use select() to wait to be able to write. If select() also isn't * available, then input will probably remain fine, but output could * block, depending on the behaviour of the terminal driver. */ #if defined(NON_BLOCKING_FLAG) /* * Query the current file-control flags, and add the * non-blocking I/O flag. */ fcntl_flags = fcntl(fd, F_GETFL) | NON_BLOCKING_FLAG; /* * Install the new control flags. */ if(fcntl(fd, F_SETFL, fcntl_flags) == -1) { _err_record_msg(gl->err, "fcntl error", END_ERR_MSG); return 1; }; #endif return 0; } /*....................................................................... * Switch to blocking terminal I/O. * * Input: * gl GetLine * The resource object of gl_get_line(). * fd int The file descriptor to make blocking. */ static int gl_blocking_io(GetLine *gl, int fd) { int fcntl_flags; /* The new file-descriptor control flags */ /* * Is non-blocking I/O implemented on this system? */ #if defined(NON_BLOCKING_FLAG) /* * Query the current file control flags and remove the non-blocking * I/O flag. */ fcntl_flags = fcntl(fd, F_GETFL) & ~NON_BLOCKING_FLAG; /* * Install the modified control flags. */ if(fcntl(fd, F_SETFL, fcntl_flags) == -1) { _err_record_msg(gl->err, "fcntl error", END_ERR_MSG); return 1; }; #endif return 0; } /*....................................................................... * Read a new input line from the user. * * Input: * gl GetLine * The resource object of this library. * prompt char * The prompt to prefix the line with, or NULL to * use the same prompt that was used by the previous * line. * start_line char * The initial contents of the input line, or NULL * if it should start out empty. * start_pos int If start_line isn't NULL, this specifies the * index of the character over which the cursor * should initially be positioned within the line. * If you just want it to follow the last character * of the line, send -1. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_get_input_line(GetLine *gl, const char *prompt, const char *start_line, int start_pos) { char c; /* The character being read */ /* * Flush any pending output to the terminal. */ if(_glq_char_count(gl->cq) > 0 && gl_flush_output(gl)) return 1; /* * Are we starting a new line? */ if(gl->endline) { /* * Delete any incompletely enterred line. */ if(gl_erase_line(gl)) return 1; /* * Display the new line to be edited. */ if(gl_present_line(gl, prompt, start_line, start_pos)) return 1; }; /* * Read one character at a time. */ while(gl_read_terminal(gl, 1, &c) == 0) { /* * Increment the count of the number of key sequences entered. */ gl->keyseq_count++; /* * Interpret the character either as the start of a new key-sequence, * as a continuation of a repeat count, or as a printable character * to be added to the line. */ if(gl_interpret_char(gl, c)) break; /* * If we just ran an action function which temporarily asked for * input to be taken from a file, abort this call. */ if(gl->file_fp) return 0; /* * Has the line been completed? */ if(gl->endline) return gl_line_ended(gl, c); }; /* * To get here, gl_read_terminal() must have returned non-zero. See * whether a signal was caught that requested that the current line * be returned. */ if(gl->endline) return gl_line_ended(gl, '\n'); /* * If I/O blocked while attempting to get the latest character * of the key sequence, rewind the key buffer to allow interpretation of * the current key sequence to be restarted on the next call to this * function. */ if(gl->rtn_status == GLR_BLOCKED && gl->pending_io == GLP_READ) gl->nread = 0; return 1; } /*....................................................................... * This is the private function of gl_query_char() that handles * prompting the user, reading a character from the terminal, and * displaying what the user entered. * * Input: * gl GetLine * The resource object of this library. * prompt char * The prompt to prefix the line with. * defchar char The character to substitute if the * user simply hits return, or '\n' if you don't * need to substitute anything. * Output: * return int The character that was read, or EOF if something * prevented a character from being read. */ static int gl_get_query_char(GetLine *gl, const char *prompt, int defchar) { char c; /* The character being read */ int retval; /* The return value of this function */ /* * Flush any pending output to the terminal. */ if(_glq_char_count(gl->cq) > 0 && gl_flush_output(gl)) return EOF; /* * Delete any incompletely entered line. */ if(gl_erase_line(gl)) return EOF; /* * Reset the line input parameters and display the prompt, if any. */ if(gl_present_line(gl, prompt, NULL, 0)) return EOF; /* * Read one character. */ if(gl_read_terminal(gl, 1, &c) == 0) { /* * In this mode, count each character as being a new key-sequence. */ gl->keyseq_count++; /* * Delete the character that was read, from the key-press buffer. */ gl_discard_chars(gl, gl->nread); /* * Convert carriage returns to newlines. */ if(c == '\r') c = '\n'; /* * If the user just hit return, subsitute the default character. */ if(c == '\n') c = defchar; /* * Display the entered character to the right of the prompt. */ if(c!='\n') { if(gl_end_of_line(gl, 1, NULL)==0) gl_print_char(gl, c, ' '); }; /* * Record the return character, and mark the call as successful. */ retval = c; gl_record_status(gl, GLR_NEWLINE, 0); /* * Was a signal caught whose disposition is to cause the current input * line to be returned? If so return a newline character. */ } else if(gl->endline) { retval = '\n'; gl_record_status(gl, GLR_NEWLINE, 0); } else { retval = EOF; }; /* * Start a new line. */ if(gl_start_newline(gl, 1)) return EOF; /* * Attempt to flush any pending output. */ (void) gl_flush_output(gl); /* * Return either the character that was read, or EOF if an error occurred. */ return retval; } /*....................................................................... * Add a character to the line buffer at the current cursor position, * inserting or overwriting according the current mode. * * Input: * gl GetLine * The resource object of this library. * c char The character to be added. * Output: * return int 0 - OK. * 1 - Insufficient room. */ static int gl_add_char_to_line(GetLine *gl, char c) { /* * Keep a record of the current cursor position. */ int buff_curpos = gl->buff_curpos; int term_curpos = gl->term_curpos; /* * Work out the displayed width of the new character. */ int width = gl_displayed_char_width(gl, c, term_curpos); /* * If we are in insert mode, or at the end of the line, * check that we can accomodate a new character in the buffer. * If not, simply return, leaving it up to the calling program * to check for the absence of a newline character. */ if((gl->insert || buff_curpos >= gl->ntotal) && gl->ntotal >= gl->linelen) return 0; /* * Are we adding characters to the line (ie. inserting or appending)? */ if(gl->insert || buff_curpos >= gl->ntotal) { /* * If inserting, make room for the new character. */ if(buff_curpos < gl->ntotal) gl_make_gap_in_buffer(gl, buff_curpos, 1); /* * Copy the character into the buffer. */ gl_buffer_char(gl, c, buff_curpos); gl->buff_curpos++; /* * Redraw the line from the cursor position to the end of the line, * and move the cursor to just after the added character. */ if(gl_print_string(gl, gl->line + buff_curpos, '\0') || gl_set_term_curpos(gl, term_curpos + width)) return 1; /* * Are we overwriting an existing character? */ } else { /* * Get the width of the character being overwritten. */ int old_width = gl_displayed_char_width(gl, gl->line[buff_curpos], term_curpos); /* * Overwrite the character in the buffer. */ gl_buffer_char(gl, c, buff_curpos); /* * If we are replacing with a narrower character, we need to * redraw the terminal string to the end of the line, then * overwrite the trailing old_width - width characters * with spaces. */ if(old_width > width) { if(gl_print_string(gl, gl->line + buff_curpos, '\0')) return 1; /* * Clear to the end of the terminal. */ if(gl_truncate_display(gl)) return 1; /* * Move the cursor to the end of the new character. */ if(gl_set_term_curpos(gl, term_curpos + width)) return 1; gl->buff_curpos++; /* * If we are replacing with a wider character, then we will be * inserting new characters, and thus extending the line. */ } else if(width > old_width) { /* * Redraw the line from the cursor position to the end of the line, * and move the cursor to just after the added character. */ if(gl_print_string(gl, gl->line + buff_curpos, '\0') || gl_set_term_curpos(gl, term_curpos + width)) return 1; gl->buff_curpos++; /* * The original and replacement characters have the same width, * so simply overwrite. */ } else { /* * Copy the character into the buffer. */ gl_buffer_char(gl, c, buff_curpos); gl->buff_curpos++; /* * Overwrite the original character. */ if(gl_print_char(gl, c, gl->line[gl->buff_curpos])) return 1; }; }; return 0; } /*....................................................................... * Insert/append a string to the line buffer and terminal at the current * cursor position. * * Input: * gl GetLine * The resource object of this library. * s char * The string to be added. * Output: * return int 0 - OK. * 1 - Insufficient room. */ static int gl_add_string_to_line(GetLine *gl, const char *s) { int buff_slen; /* The length of the string being added to line[] */ int term_slen; /* The length of the string being written to the terminal */ int buff_curpos; /* The original value of gl->buff_curpos */ int term_curpos; /* The original value of gl->term_curpos */ /* * Keep a record of the current cursor position. */ buff_curpos = gl->buff_curpos; term_curpos = gl->term_curpos; /* * How long is the string to be added? */ buff_slen = strlen(s); term_slen = gl_displayed_string_width(gl, s, buff_slen, term_curpos); /* * Check that we can accomodate the string in the buffer. * If not, simply return, leaving it up to the calling program * to check for the absence of a newline character. */ if(gl->ntotal + buff_slen > gl->linelen) return 0; /* * Move the characters that follow the cursor in the buffer by * buff_slen characters to the right. */ if(gl->ntotal > gl->buff_curpos) gl_make_gap_in_buffer(gl, gl->buff_curpos, buff_slen); /* * Copy the string into the buffer. */ gl_buffer_string(gl, s, buff_slen, gl->buff_curpos); gl->buff_curpos += buff_slen; /* * Write the modified part of the line to the terminal, then move * the terminal cursor to the end of the displayed input string. */ if(gl_print_string(gl, gl->line + buff_curpos, '\0') || gl_set_term_curpos(gl, term_curpos + term_slen)) return 1; return 0; } /*....................................................................... * Read a single character from the terminal. * * Input: * gl GetLine * The resource object of this library. * keep int If true, the returned character will be kept in * the input buffer, for potential replays. It should * subsequently be removed from the buffer when the * key sequence that it belongs to has been fully * processed, by calling gl_discard_chars(). * Input/Output: * c char * The character that is read, is assigned to *c. * Output: * return int 0 - OK. * 1 - Either an I/O error occurred, or a signal was * caught who's disposition is to abort gl_get_line() * or to have gl_get_line() return the current line * as though the user had pressed return. In the * latter case gl->endline will be non-zero. */ static int gl_read_terminal(GetLine *gl, int keep, char *c) { /* * Before waiting for a new character to be input, flush unwritten * characters to the terminal. */ if(gl_flush_output(gl)) return 1; /* * Record the fact that we are about to read from the terminal. */ gl->pending_io = GLP_READ; /* * If there is already an unread character in the buffer, * return it. */ if(gl->nread < gl->nbuf) { *c = gl->keybuf[gl->nread]; /* * Retain the character in the key buffer, but mark it as having been read? */ if(keep) { gl->nread++; /* * Completely remove the character from the key buffer? */ } else { memmove(gl->keybuf + gl->nread, gl->keybuf + gl->nread + 1, gl->nbuf - gl->nread - 1); }; return 0; }; /* * Make sure that there is space in the key buffer for one more character. * This should always be true if gl_interpret_char() is called for each * new character added, since it will clear the buffer once it has recognized * or rejected a key sequence. */ if(gl->nbuf + 1 > GL_KEY_MAX) { gl_print_info(gl, "gl_read_terminal: Buffer overflow avoided.", GL_END_INFO); errno = EIO; return 1; }; /* * Read one character from the terminal. */ switch(gl_read_input(gl, c)) { case GL_READ_OK: break; case GL_READ_BLOCKED: gl_record_status(gl, GLR_BLOCKED, BLOCKED_ERRNO); return 1; break; default: return 1; break; }; /* * Append the character to the key buffer? */ if(keep) { gl->keybuf[gl->nbuf] = *c; gl->nread = ++gl->nbuf; }; return 0; } /*....................................................................... * Read one or more keypresses from the terminal of an input stream. * * Input: * gl GetLine * The resource object of this module. * c char * The character that was read is assigned to *c. * Output: * return GlReadStatus The completion status of the read operation. */ static GlReadStatus gl_read_input(GetLine *gl, char *c) { /* * We may have to repeat the read if window change signals are received. */ for(;;) { /* * Which file descriptor should we read from? Mark this volatile, so * that siglongjmp() can't clobber it. */ volatile int fd = gl->file_fp ? fileno(gl->file_fp) : gl->input_fd; /* * If the endline flag becomes set, don't wait for another character. */ if(gl->endline) return GL_READ_ERROR; /* * Since the code in this function can block, trap signals. */ if(sigsetjmp(gl_setjmp_buffer, 1)==0) { /* * Handle the different I/O modes. */ switch(gl->io_mode) { /* * In normal I/O mode, we call the event handler before attempting * to read, since read() blocks. */ case GL_NORMAL_MODE: if(gl_event_handler(gl, fd)) return GL_READ_ERROR; return gl_read_unmasked(gl, fd, c); /* Read one character */ break; /* * In non-blocking server I/O mode, we attempt to read a character, * and only if this fails, call the event handler to wait for a any * user-configured timeout and any other user-configured events. In * addition, we turn off the fcntl() non-blocking flag when reading * from the terminal, to work around a bug in Solaris. We can do this * without causing the read() to block, because when in non-blocking * server-I/O mode, gl_raw_io() sets the VMIN terminal attribute to 0, * which tells the terminal driver to return immediately if no * characters are available to be read. */ case GL_SERVER_MODE: { GlReadStatus status; /* The return status */ if(isatty(fd)) /* If we reading from a terminal, */ gl_blocking_io(gl, fd); /* switch to blocking I/O */ status = gl_read_unmasked(gl, fd, c); /* Try reading */ if(status == GL_READ_BLOCKED) { /* Nothing readable yet */ if(gl_event_handler(gl, fd)) /* Wait for input */ status = GL_READ_ERROR; else status = gl_read_unmasked(gl, fd, c); /* Try reading again */ }; gl_nonblocking_io(gl, fd); /* Restore non-blocking I/O */ return status; }; break; }; }; /* * To get here, one of the signals that we are trapping must have * been received. Note that by using sigsetjmp() instead of setjmp() * the signal mask that was blocking these signals will have been * reinstated, so we can be sure that no more of these signals will * be received until we explicitly unblock them again. * * First, if non-blocking I/O was temporarily disabled, reinstate it. */ if(gl->io_mode == GL_SERVER_MODE) gl_nonblocking_io(gl, fd); /* * Now respond to the signal that was caught. */ if(gl_check_caught_signal(gl)) return GL_READ_ERROR; }; } /*....................................................................... * This is a private function of gl_read_input(), which unblocks signals * temporarily while it reads a single character from the specified file * descriptor. * * Input: * gl GetLine * The resource object of this module. * fd int The file descriptor to read from. * c char * The character that was read is assigned to *c. * Output: * return GlReadStatus The completion status of the read. */ static GlReadStatus gl_read_unmasked(GetLine *gl, int fd, char *c) { int nread; /* The return value of read() */ /* * Unblock the signals that we are trapping, while waiting for I/O. */ gl_catch_signals(gl); /* * Attempt to read one character from the terminal, restarting the read * if any signals that we aren't trapping, are received. */ do { errno = 0; nread = read(fd, c, 1); } while(nread < 0 && errno==EINTR); /* * Block all of the signals that we are trapping. */ gl_mask_signals(gl, NULL); /* * Check the completion status of the read. */ switch(nread) { case 1: return GL_READ_OK; case 0: return (isatty(fd) || errno != 0) ? GL_READ_BLOCKED : GL_READ_EOF; default: return GL_READ_ERROR; }; } /*....................................................................... * Remove a specified number of characters from the start of the * key-press lookahead buffer, gl->keybuf[], and arrange for the next * read to start from the character at the start of the shifted buffer. * * Input: * gl GetLine * The resource object of this module. * nused int The number of characters to discard from the start * of the buffer. */ static void gl_discard_chars(GetLine *gl, int nused) { int nkeep = gl->nbuf - nused; if(nkeep > 0) { memmove(gl->keybuf, gl->keybuf + nused, nkeep); gl->nbuf = nkeep; gl->nread = 0; } else { gl->nbuf = gl->nread = 0; }; } /*....................................................................... * This function is called to handle signals caught between calls to * sigsetjmp() and siglongjmp(). * * Input: * gl GetLine * The resource object of this library. * Output: * return int 0 - Signal handled internally. * 1 - Signal requires gl_get_line() to abort. */ static int gl_check_caught_signal(GetLine *gl) { GlSignalNode *sig; /* The signal disposition */ SigAction keep_action; /* The signal disposition of tecla signal handlers */ unsigned flags; /* The signal processing flags to use */ int signo; /* The signal to be handled */ /* * Was no signal caught? */ if(gl_pending_signal == -1) return 0; /* * Get the signal to be handled. */ signo = gl_pending_signal; /* * Mark the signal as handled. Note that at this point, all of * the signals that we are trapping are blocked from delivery. */ gl_pending_signal = -1; /* * Record the signal that was caught, so that the user can query it later. */ gl->last_signal = signo; /* * In non-blocking server mode, the application is responsible for * responding to terminal signals, and we don't want gl_get_line()s * normal signal handling to clash with this, so whenever a signal * is caught, we arrange for gl_get_line() to abort and requeue the * signal while signals are still blocked. If the application * had the signal unblocked when gl_get_line() was called, the signal * will be delivered again as soon as gl_get_line() restores the * process signal mask, just before returning to the application. * Note that the caller of this function should set gl->pending_io * to the appropriate choice of GLP_READ and GLP_WRITE, before returning. */ if(gl->io_mode==GL_SERVER_MODE) { gl_record_status(gl, GLR_SIGNAL, EINTR); raise(signo); return 1; }; /* * Lookup the requested disposition of this signal. */ for(sig=gl->sigs; sig && sig->signo != signo; sig=sig->next) ; if(!sig) return 0; /* * Get the signal response flags for this signal. */ flags = sig->flags; /* * Only perform terminal-specific actions if the session is interactive. */ if(gl->is_term) { /* * Did we receive a terminal size signal? */ #ifdef SIGWINCH if(signo == SIGWINCH && _gl_update_size(gl)) return 1; #endif /* * Start a fresh line? */ if(flags & GLS_RESTORE_LINE) { if(gl_start_newline(gl, 0)) return 1; }; /* * Restore terminal settings to how they were before gl_get_line() was * called? */ if(flags & GLS_RESTORE_TTY) gl_restore_terminal_attributes(gl); }; /* * Restore signal handlers to how they were before gl_get_line() was * called? If this hasn't been requested, only reinstate the signal * handler of the signal that we are handling. */ if(flags & GLS_RESTORE_SIG) { gl_restore_signal_handlers(gl); gl_unmask_signals(gl, &gl->old_signal_set); } else { (void) sigaction(sig->signo, &sig->original, &keep_action); (void) sigprocmask(SIG_UNBLOCK, &sig->proc_mask, NULL); }; /* * Forward the signal to the application's signal handler. */ if(!(flags & GLS_DONT_FORWARD)) raise(signo); /* * Reinstate our signal handlers. */ if(flags & GLS_RESTORE_SIG) { gl_mask_signals(gl, NULL); gl_override_signal_handlers(gl); } else { (void) sigaction(sig->signo, &keep_action, NULL); (void) sigprocmask(SIG_BLOCK, &sig->proc_mask, NULL); }; /* * Prepare the terminal for continued editing, if this is an interactive * session. */ if(gl->is_term) { /* * Do we need to reinstate our terminal settings? */ if(flags & GLS_RESTORE_TTY) gl_raw_terminal_mode(gl); /* * Redraw the line? */ if(flags & GLS_REDRAW_LINE) gl_queue_redisplay(gl); }; /* * What next? */ switch(sig->after) { case GLS_RETURN: gl_newline(gl, 1, NULL); return gl->is_term && gl_flush_output(gl); break; case GLS_ABORT: gl_record_status(gl, GLR_SIGNAL, sig->errno_value); return 1; break; case GLS_CONTINUE: return gl->is_term && gl_flush_output(gl); break; }; return 0; } /*....................................................................... * Get pertinent terminal control strings and the initial terminal size. * * Input: * gl GetLine * The resource object of this library. * term char * The type of the terminal. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_control_strings(GetLine *gl, const char *term) { int bad_term = 0; /* True if term is unusable */ /* * Discard any existing control strings from a previous terminal. */ gl->left = NULL; gl->right = NULL; gl->up = NULL; gl->down = NULL; gl->home = NULL; gl->bol = 0; gl->clear_eol = NULL; gl->clear_eod = NULL; gl->u_arrow = NULL; gl->d_arrow = NULL; gl->l_arrow = NULL; gl->r_arrow = NULL; gl->sound_bell = NULL; gl->bold = NULL; gl->underline = NULL; gl->standout = NULL; gl->dim = NULL; gl->reverse = NULL; gl->blink = NULL; gl->text_attr_off = NULL; gl->nline = 0; gl->ncolumn = 0; #ifdef USE_TERMINFO gl->left_n = NULL; gl->right_n = NULL; #endif /* * If possible lookup the information in a terminal information * database. */ #ifdef USE_TERMINFO { int errret; if(!term || setupterm((char *)term, gl->input_fd, &errret) == ERR) { bad_term = 1; } else { _clr_StringGroup(gl->capmem); gl->left = gl_tigetstr(gl, "cub1"); gl->right = gl_tigetstr(gl, "cuf1"); gl->up = gl_tigetstr(gl, "cuu1"); gl->down = gl_tigetstr(gl, "cud1"); gl->home = gl_tigetstr(gl, "home"); gl->clear_eol = gl_tigetstr(gl, "el"); gl->clear_eod = gl_tigetstr(gl, "ed"); gl->u_arrow = gl_tigetstr(gl, "kcuu1"); gl->d_arrow = gl_tigetstr(gl, "kcud1"); gl->l_arrow = gl_tigetstr(gl, "kcub1"); gl->r_arrow = gl_tigetstr(gl, "kcuf1"); gl->left_n = gl_tigetstr(gl, "cub"); gl->right_n = gl_tigetstr(gl, "cuf"); gl->sound_bell = gl_tigetstr(gl, "bel"); gl->bold = gl_tigetstr(gl, "bold"); gl->underline = gl_tigetstr(gl, "smul"); gl->standout = gl_tigetstr(gl, "smso"); gl->dim = gl_tigetstr(gl, "dim"); gl->reverse = gl_tigetstr(gl, "rev"); gl->blink = gl_tigetstr(gl, "blink"); gl->text_attr_off = gl_tigetstr(gl, "sgr0"); }; }; #elif defined(USE_TERMCAP) if(!term || tgetent(gl->tgetent_buf, (char *)term) < 0) { bad_term = 1; } else { char *tgetstr_buf_ptr = gl->tgetstr_buf; _clr_StringGroup(gl->capmem); gl->left = gl_tgetstr(gl, "le", &tgetstr_buf_ptr); gl->right = gl_tgetstr(gl, "nd", &tgetstr_buf_ptr); gl->up = gl_tgetstr(gl, "up", &tgetstr_buf_ptr); gl->down = gl_tgetstr(gl, "do", &tgetstr_buf_ptr); gl->home = gl_tgetstr(gl, "ho", &tgetstr_buf_ptr); gl->clear_eol = gl_tgetstr(gl, "ce", &tgetstr_buf_ptr); gl->clear_eod = gl_tgetstr(gl, "cd", &tgetstr_buf_ptr); gl->u_arrow = gl_tgetstr(gl, "ku", &tgetstr_buf_ptr); gl->d_arrow = gl_tgetstr(gl, "kd", &tgetstr_buf_ptr); gl->l_arrow = gl_tgetstr(gl, "kl", &tgetstr_buf_ptr); gl->r_arrow = gl_tgetstr(gl, "kr", &tgetstr_buf_ptr); gl->sound_bell = gl_tgetstr(gl, "bl", &tgetstr_buf_ptr); gl->bold = gl_tgetstr(gl, "md", &tgetstr_buf_ptr); gl->underline = gl_tgetstr(gl, "us", &tgetstr_buf_ptr); gl->standout = gl_tgetstr(gl, "so", &tgetstr_buf_ptr); gl->dim = gl_tgetstr(gl, "mh", &tgetstr_buf_ptr); gl->reverse = gl_tgetstr(gl, "mr", &tgetstr_buf_ptr); gl->blink = gl_tgetstr(gl, "mb", &tgetstr_buf_ptr); gl->text_attr_off = gl_tgetstr(gl, "me", &tgetstr_buf_ptr); }; #endif /* * Report term being unusable. */ if(bad_term) { gl_print_info(gl, "Bad terminal type: \"", term ? term : "(null)", "\". Will assume vt100.", GL_END_INFO); }; /* * Fill in missing information with ANSI VT100 strings. */ if(!gl->left) gl->left = "\b"; /* ^H */ if(!gl->right) gl->right = GL_ESC_STR "[C"; if(!gl->up) gl->up = GL_ESC_STR "[A"; if(!gl->down) gl->down = "\n"; if(!gl->home) gl->home = GL_ESC_STR "[H"; if(!gl->bol) gl->bol = "\r"; if(!gl->clear_eol) gl->clear_eol = GL_ESC_STR "[K"; if(!gl->clear_eod) gl->clear_eod = GL_ESC_STR "[J"; if(!gl->u_arrow) gl->u_arrow = GL_ESC_STR "[A"; if(!gl->d_arrow) gl->d_arrow = GL_ESC_STR "[B"; if(!gl->l_arrow) gl->l_arrow = GL_ESC_STR "[D"; if(!gl->r_arrow) gl->r_arrow = GL_ESC_STR "[C"; if(!gl->sound_bell) gl->sound_bell = "\a"; if(!gl->bold) gl->bold = GL_ESC_STR "[1m"; if(!gl->underline) gl->underline = GL_ESC_STR "[4m"; if(!gl->standout) gl->standout = GL_ESC_STR "[1;7m"; if(!gl->dim) gl->dim = ""; /* Not available */ if(!gl->reverse) gl->reverse = GL_ESC_STR "[7m"; if(!gl->blink) gl->blink = GL_ESC_STR "[5m"; if(!gl->text_attr_off) gl->text_attr_off = GL_ESC_STR "[m"; /* * Find out the current terminal size. */ (void) _gl_terminal_size(gl, GL_DEF_NCOLUMN, GL_DEF_NLINE, NULL); return 0; } #ifdef USE_TERMINFO /*....................................................................... * This is a private function of gl_control_strings() used to look up * a termninal capability string from the terminfo database and make * a private copy of it. * * Input: * gl GetLine * The resource object of gl_get_line(). * name const char * The name of the terminfo string to look up. * Output: * return const char * The local copy of the capability, or NULL * if not available. */ static const char *gl_tigetstr(GetLine *gl, const char *name) { const char *value = tigetstr((char *)name); if(!value || value == (char *) -1) return NULL; return _sg_store_string(gl->capmem, value, 0); } #elif defined(USE_TERMCAP) /*....................................................................... * This is a private function of gl_control_strings() used to look up * a termninal capability string from the termcap database and make * a private copy of it. Note that some emulations of tgetstr(), such * as that used by Solaris, ignores the buffer pointer that is past to * it, so we can't assume that a private copy has been made that won't * be trashed by another call to gl_control_strings() by another * GetLine object. So we make what may be a redundant private copy * of the string in gl->capmem. * * Input: * gl GetLine * The resource object of gl_get_line(). * name const char * The name of the terminfo string to look up. * Input/Output: * bufptr char ** On input *bufptr points to the location in * gl->tgetstr_buf at which to record the * capability string. On output *bufptr is * incremented over the stored string. * Output: * return const char * The local copy of the capability, or NULL * on error. */ static const char *gl_tgetstr(GetLine *gl, const char *name, char **bufptr) { const char *value = tgetstr((char *)name, bufptr); if(!value || value == (char *) -1) return NULL; return _sg_store_string(gl->capmem, value, 0); } #endif /*....................................................................... * This is an action function that implements a user interrupt (eg. ^C). */ static KT_KEY_FN(gl_user_interrupt) { raise(SIGINT); return 1; } /*....................................................................... * This is an action function that implements the abort signal. */ static KT_KEY_FN(gl_abort) { raise(SIGABRT); return 1; } /*....................................................................... * This is an action function that sends a suspend signal (eg. ^Z) to the * the parent process. */ static KT_KEY_FN(gl_suspend) { raise(SIGTSTP); return 0; } /*....................................................................... * This is an action function that halts output to the terminal. */ static KT_KEY_FN(gl_stop_output) { tcflow(gl->output_fd, TCOOFF); return 0; } /*....................................................................... * This is an action function that resumes halted terminal output. */ static KT_KEY_FN(gl_start_output) { tcflow(gl->output_fd, TCOON); return 0; } /*....................................................................... * This is an action function that allows the next character to be accepted * without any interpretation as a special character. */ static KT_KEY_FN(gl_literal_next) { char c; /* The character to be added to the line */ int i; /* * Get the character to be inserted literally. */ if(gl_read_terminal(gl, 1, &c)) return 1; /* * Add the character to the line 'count' times. */ for(i=0; incolumn) % TAB_WIDTH); } /*....................................................................... * Return the number of characters needed to display a given character * on the screen. Tab characters require eight spaces, and control * characters are represented by a caret followed by the modified * character. * * Input: * gl GetLine * The resource object of this library. * c char The character to be displayed. * term_curpos int The destination terminal location of the character. * This is needed because the width of tab characters * depends on where they are, relative to the * preceding tab stops. * Output: * return int The number of terminal charaters needed. */ static int gl_displayed_char_width(GetLine *gl, char c, int term_curpos) { if(c=='\t') return gl_displayed_tab_width(gl, term_curpos); if(IS_CTRL_CHAR(c)) return 2; if(!isprint((int)(unsigned char) c)) return gl_octal_width((int)(unsigned char)c) + 1; return 1; } /*....................................................................... * Work out the length of given string of characters on the terminal. * * Input: * gl GetLine * The resource object of this library. * string char * The string to be measured. * nc int The number of characters to be measured, or -1 * to measure the whole string. * term_curpos int The destination terminal location of the character. * This is needed because the width of tab characters * depends on where they are, relative to the * preceding tab stops. * Output: * return int The number of displayed characters. */ static int gl_displayed_string_width(GetLine *gl, const char *string, int nc, int term_curpos) { int slen = 0; /* The displayed number of characters */ int i; /* * How many characters are to be measured? */ if(nc < 0) nc = strlen(string); /* * Add up the length of the displayed string. */ for(i=0; iflush_fn; /* * Only display output when echoing is turned on. */ if(gl->echo) { int ndone = 0; /* The number of characters written so far */ /* * When using un-buffered I/O, flush pending output first. */ if(!buffered) { if(gl_flush_output(gl)) return 1; }; /* * If no length has been provided, measure the length of the string. */ if(n < 0) n = strlen(string); /* * Write the string. */ if(write_fn(gl, string + ndone, n-ndone) != n) return 1; }; return 0; } /*....................................................................... * Output a terminal control sequence. When using terminfo, * this must be a sequence returned by tgetstr() or tigetstr() * respectively. * * Input: * gl GetLine * The resource object of this library. * nline int The number of lines affected by the operation, * or 1 if not relevant. * string char * The control sequence to be sent. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_print_control_sequence(GetLine *gl, int nline, const char *string) { int waserr = 0; /* True if an error occurs */ /* * Only write characters to the terminal when echoing is enabled. */ if(gl->echo) { #if defined(USE_TERMINFO) || defined(USE_TERMCAP) tputs_gl = gl; errno = 0; tputs((char *)string, nline, gl_tputs_putchar); waserr = errno != 0; #else waserr = gl_print_raw_string(gl, 1, string, -1); #endif }; return waserr; } #if defined(USE_TERMINFO) || defined(USE_TERMCAP) /*....................................................................... * The following callback function is called by tputs() to output a raw * control character to the terminal. */ static TputsRetType gl_tputs_putchar(TputsArgType c) { char ch = c; #if TPUTS_RETURNS_VALUE return gl_print_raw_string(tputs_gl, 1, &ch, 1); #else (void) gl_print_raw_string(tputs_gl, 1, &ch, 1); #endif } #endif /*....................................................................... * Move the terminal cursor n characters to the left or right. * * Input: * gl GetLine * The resource object of this program. * n int number of positions to the right (> 0) or left (< 0). * Output: * return int 0 - OK. * 1 - Error. */ static int gl_terminal_move_cursor(GetLine *gl, int n) { int cur_row, cur_col; /* The current terminal row and column index of */ /* the cursor wrt the start of the input line. */ int new_row, new_col; /* The target terminal row and column index of */ /* the cursor wrt the start of the input line. */ /* * Do nothing if the input line isn't currently displayed. In this * case, the cursor will be moved to the right place when the line * is next redisplayed. */ if(!gl->displayed) return 0; /* * How far can we move left? */ if(gl->term_curpos + n < 0) n = gl->term_curpos; /* * Break down the current and target cursor locations into rows and columns. */ cur_row = gl->term_curpos / gl->ncolumn; cur_col = gl->term_curpos % gl->ncolumn; new_row = (gl->term_curpos + n) / gl->ncolumn; new_col = (gl->term_curpos + n) % gl->ncolumn; /* * Move down to the next line. */ for(; cur_row < new_row; cur_row++) { if(gl_print_control_sequence(gl, 1, gl->down)) return 1; }; /* * Move up to the previous line. */ for(; cur_row > new_row; cur_row--) { if(gl_print_control_sequence(gl, 1, gl->up)) return 1; }; /* * Move to the right within the target line? */ if(cur_col < new_col) { #ifdef USE_TERMINFO /* * Use a parameterized control sequence if it generates less control * characters (guess based on ANSI terminal termcap entry). */ if(gl->right_n != NULL && new_col - cur_col > 1) { if(gl_print_control_sequence(gl, 1, tparm((char *)gl->right_n, (long)(new_col - cur_col), 0l, 0l, 0l, 0l, 0l, 0l, 0l, 0l))) return 1; } else #endif { for(; cur_col < new_col; cur_col++) { if(gl_print_control_sequence(gl, 1, gl->right)) return 1; }; }; /* * Move to the left within the target line? */ } else if(cur_col > new_col) { #ifdef USE_TERMINFO /* * Use a parameterized control sequence if it generates less control * characters (guess based on ANSI terminal termcap entry). */ if(gl->left_n != NULL && cur_col - new_col > 3) { if(gl_print_control_sequence(gl, 1, tparm((char *)gl->left_n, (long)(cur_col - new_col), 0l, 0l, 0l, 0l, 0l, 0l, 0l, 0l))) return 1; } else #endif { for(; cur_col > new_col; cur_col--) { if(gl_print_control_sequence(gl, 1, gl->left)) return 1; }; }; } /* * Update the recorded position of the terminal cursor. */ gl->term_curpos += n; return 0; } /*....................................................................... * Write a character to the terminal after expanding tabs and control * characters to their multi-character representations. * * Input: * gl GetLine * The resource object of this program. * c char The character to be output. * pad char Many terminals have the irritating feature that * when one writes a character in the last column of * of the terminal, the cursor isn't wrapped to the * start of the next line until one more character * is written. Some terminals don't do this, so * after such a write, we don't know where the * terminal is unless we output an extra character. * This argument specifies the character to write. * If at the end of the input line send '\0' or a * space, and a space will be written. Otherwise, * pass the next character in the input line * following the one being written. * Output: * return int 0 - OK. */ static int gl_print_char(GetLine *gl, char c, char pad) { char string[TAB_WIDTH + 4]; /* A work area for composing compound strings */ int nchar; /* The number of terminal characters */ int i; /* * Check for special characters. */ if(c == '\t') { /* * How many spaces do we need to represent a tab at the current terminal * column? */ nchar = gl_displayed_tab_width(gl, gl->term_curpos); /* * Compose the tab string. */ for(i=0; iterm_curpos += nchar; /* * Keep a record of the number of characters in the terminal version * of the input line. */ if(gl->term_curpos > gl->term_len) gl->term_len = gl->term_curpos; /* * If the new character ended exactly at the end of a line, * most terminals won't move the cursor onto the next line until we * have written a character on the next line, so append an extra * space then move the cursor back. */ if(gl->term_curpos % gl->ncolumn == 0) { int term_curpos = gl->term_curpos; if(gl_print_char(gl, pad ? pad : ' ', ' ') || gl_set_term_curpos(gl, term_curpos)) return 1; }; return 0; } /*....................................................................... * Write a string to the terminal after expanding tabs and control * characters to their multi-character representations. * * Input: * gl GetLine * The resource object of this program. * string char * The string to be output. * pad char Many terminals have the irritating feature that * when one writes a character in the last column of * of the terminal, the cursor isn't wrapped to the * start of the next line until one more character * is written. Some terminals don't do this, so * after such a write, we don't know where the * terminal is unless we output an extra character. * This argument specifies the character to write. * If at the end of the input line send '\0' or a * space, and a space will be written. Otherwise, * pass the next character in the input line * following the one being written. * Output: * return int 0 - OK. */ static int gl_print_string(GetLine *gl, const char *string, char pad) { const char *cptr; /* A pointer into string[] */ for(cptr=string; *cptr; cptr++) { char nextc = cptr[1]; if(gl_print_char(gl, *cptr, nextc ? nextc : pad)) return 1; }; return 0; } /*....................................................................... * Move the terminal cursor position. * * Input: * gl GetLine * The resource object of this library. * term_curpos int The destination terminal cursor position. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_set_term_curpos(GetLine *gl, int term_curpos) { return gl_terminal_move_cursor(gl, term_curpos - gl->term_curpos); } /*....................................................................... * This is an action function that moves the buffer cursor one character * left, and updates the terminal cursor to match. */ static KT_KEY_FN(gl_cursor_left) { return gl_place_cursor(gl, gl->buff_curpos - count); } /*....................................................................... * This is an action function that moves the buffer cursor one character * right, and updates the terminal cursor to match. */ static KT_KEY_FN(gl_cursor_right) { return gl_place_cursor(gl, gl->buff_curpos + count); } /*....................................................................... * This is an action function that toggles between overwrite and insert * mode. */ static KT_KEY_FN(gl_insert_mode) { gl->insert = !gl->insert; return 0; } /*....................................................................... * This is an action function which moves the cursor to the beginning of * the line. */ static KT_KEY_FN(gl_beginning_of_line) { return gl_place_cursor(gl, 0); } /*....................................................................... * This is an action function which moves the cursor to the end of * the line. */ static KT_KEY_FN(gl_end_of_line) { return gl_place_cursor(gl, gl->ntotal); } /*....................................................................... * This is an action function which deletes the entire contents of the * current line. */ static KT_KEY_FN(gl_delete_line) { /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Copy the contents of the line to the cut buffer. */ strcpy(gl->cutbuf, gl->line); /* * Clear the buffer. */ gl_truncate_buffer(gl, 0); /* * Move the terminal cursor to just after the prompt. */ if(gl_place_cursor(gl, 0)) return 1; /* * Clear from the end of the prompt to the end of the terminal. */ if(gl_truncate_display(gl)) return 1; return 0; } /*....................................................................... * This is an action function which deletes all characters between the * current cursor position and the end of the line. */ static KT_KEY_FN(gl_kill_line) { /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Copy the part of the line that is about to be deleted to the cut buffer. */ strcpy(gl->cutbuf, gl->line + gl->buff_curpos); /* * Terminate the buffered line at the current cursor position. */ gl_truncate_buffer(gl, gl->buff_curpos); /* * Clear the part of the line that follows the cursor. */ if(gl_truncate_display(gl)) return 1; /* * Explicitly reset the cursor position to allow vi command mode * constraints on its position to be set. */ return gl_place_cursor(gl, gl->buff_curpos); } /*....................................................................... * This is an action function which deletes all characters between the * start of the line and the current cursor position. */ static KT_KEY_FN(gl_backward_kill_line) { /* * How many characters are to be deleted from before the cursor? */ int nc = gl->buff_curpos - gl->insert_curpos; if (!nc) return 0; /* * Move the cursor to the start of the line, or in vi input mode, * the start of the sub-line at which insertion started, and delete * up to the old cursor position. */ return gl_place_cursor(gl, gl->insert_curpos) || gl_delete_chars(gl, nc, gl->editor == GL_EMACS_MODE || gl->vi.command); } /*....................................................................... * This is an action function which moves the cursor forward by a word. */ static KT_KEY_FN(gl_forward_word) { return gl_place_cursor(gl, gl_nth_word_end_forward(gl, count) + (gl->editor==GL_EMACS_MODE)); } /*....................................................................... * This is an action function which moves the cursor forward to the start * of the next word. */ static KT_KEY_FN(gl_forward_to_word) { return gl_place_cursor(gl, gl_nth_word_start_forward(gl, count)); } /*....................................................................... * This is an action function which moves the cursor backward by a word. */ static KT_KEY_FN(gl_backward_word) { return gl_place_cursor(gl, gl_nth_word_start_backward(gl, count)); } /*....................................................................... * Delete one or more characters, starting with the one under the cursor. * * Input: * gl GetLine * The resource object of this library. * nc int The number of characters to delete. * cut int If true, copy the characters to the cut buffer. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_delete_chars(GetLine *gl, int nc, int cut) { /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * If there are fewer than nc characters following the cursor, limit * nc to the number available. */ if(gl->buff_curpos + nc > gl->ntotal) nc = gl->ntotal - gl->buff_curpos; /* * Copy the about to be deleted region to the cut buffer. */ if(cut) { memcpy(gl->cutbuf, gl->line + gl->buff_curpos, nc); gl->cutbuf[nc] = '\0'; } /* * Nothing to delete? */ if(nc <= 0) return 0; /* * In vi overwrite mode, restore any previously overwritten characters * from the undo buffer. */ if(gl->editor == GL_VI_MODE && !gl->vi.command && !gl->insert) { /* * How many of the characters being deleted can be restored from the * undo buffer? */ int nrestore = gl->buff_curpos + nc <= gl->vi.undo.ntotal ? nc : gl->vi.undo.ntotal - gl->buff_curpos; /* * Restore any available characters. */ if(nrestore > 0) { gl_buffer_string(gl, gl->vi.undo.line + gl->buff_curpos, nrestore, gl->buff_curpos); }; /* * If their were insufficient characters in the undo buffer, then this * implies that we are deleting from the end of the line, so we need * to terminate the line either where the undo buffer ran out, or if * we are deleting from beyond the end of the undo buffer, at the current * cursor position. */ if(nc != nrestore) { gl_truncate_buffer(gl, (gl->vi.undo.ntotal > gl->buff_curpos) ? gl->vi.undo.ntotal : gl->buff_curpos); }; } else { /* * Copy the remaining part of the line back over the deleted characters. */ gl_remove_from_buffer(gl, gl->buff_curpos, nc); }; /* * Redraw the remaining characters following the cursor. */ if(gl_print_string(gl, gl->line + gl->buff_curpos, '\0')) return 1; /* * Clear to the end of the terminal. */ if(gl_truncate_display(gl)) return 1; /* * Place the cursor at the start of where the deletion was performed. */ return gl_place_cursor(gl, gl->buff_curpos); } /*....................................................................... * This is an action function which deletes character(s) under the * cursor without moving the cursor. */ static KT_KEY_FN(gl_forward_delete_char) { /* * Delete 'count' characters. */ return gl_delete_chars(gl, count, gl->vi.command); } /*....................................................................... * This is an action function which deletes character(s) under the * cursor and moves the cursor back one character. */ static KT_KEY_FN(gl_backward_delete_char) { /* * Restrict the deletion count to the number of characters that * precede the insertion point. */ if(count > gl->buff_curpos - gl->insert_curpos) count = gl->buff_curpos - gl->insert_curpos; /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); return gl_cursor_left(gl, count, NULL) || gl_delete_chars(gl, count, gl->vi.command); } /*....................................................................... * Starting from the cursor position delete to the specified column. */ static KT_KEY_FN(gl_delete_to_column) { if (--count >= gl->buff_curpos) return gl_forward_delete_char(gl, count - gl->buff_curpos, NULL); else return gl_backward_delete_char(gl, gl->buff_curpos - count, NULL); } /*....................................................................... * Starting from the cursor position delete characters to a matching * parenthesis. */ static KT_KEY_FN(gl_delete_to_parenthesis) { int curpos = gl_index_of_matching_paren(gl); if(curpos >= 0) { gl_save_for_undo(gl); if(curpos >= gl->buff_curpos) return gl_forward_delete_char(gl, curpos - gl->buff_curpos + 1, NULL); else return gl_backward_delete_char(gl, ++gl->buff_curpos - curpos + 1, NULL); }; return 0; } /*....................................................................... * This is an action function which deletes from the cursor to the end * of the word that the cursor is either in or precedes. */ static KT_KEY_FN(gl_forward_delete_word) { /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * In emacs mode delete to the end of the word. In vi mode delete to the * start of the net word. */ if(gl->editor == GL_EMACS_MODE) { return gl_delete_chars(gl, gl_nth_word_end_forward(gl,count) - gl->buff_curpos + 1, 1); } else { return gl_delete_chars(gl, gl_nth_word_start_forward(gl,count) - gl->buff_curpos, gl->vi.command); }; } /*....................................................................... * This is an action function which deletes the word that precedes the * cursor. */ static KT_KEY_FN(gl_backward_delete_word) { /* * Keep a record of the current cursor position. */ int buff_curpos = gl->buff_curpos; /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Move back 'count' words. */ if(gl_backward_word(gl, count, NULL)) return 1; /* * Delete from the new cursor position to the original one. */ return gl_delete_chars(gl, buff_curpos - gl->buff_curpos, gl->editor == GL_EMACS_MODE || gl->vi.command); } /*....................................................................... * Searching in a given direction, delete to the count'th * instance of a specified or queried character, in the input line. * * Input: * gl GetLine * The getline resource object. * count int The number of times to search. * c char The character to be searched for, or '\0' if * the character should be read from the user. * forward int True if searching forward. * onto int True if the search should end on top of the * character, false if the search should stop * one character before the character in the * specified search direction. * change int If true, this function is being called upon * to do a vi change command, in which case the * user will be left in insert mode after the * deletion. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_delete_find(GetLine *gl, int count, char c, int forward, int onto, int change) { /* * Search for the character, and abort the deletion if not found. */ int pos = gl_find_char(gl, count, forward, onto, c); if(pos < 0) return 0; /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Allow the cursor to be at the end of the line if this is a change * command. */ if(change) gl->vi.command = 0; /* * Delete the appropriate span of characters. */ if(forward) { if(gl_delete_chars(gl, pos - gl->buff_curpos + 1, 1)) return 1; } else { int buff_curpos = gl->buff_curpos; if(gl_place_cursor(gl, pos) || gl_delete_chars(gl, buff_curpos - gl->buff_curpos, 1)) return 1; }; /* * If this is a change operation, switch the insert mode. */ if(change && gl_vi_insert(gl, 0, NULL)) return 1; return 0; } /*....................................................................... * This is an action function which deletes forward from the cursor up to and * including a specified character. */ static KT_KEY_FN(gl_forward_delete_find) { return gl_delete_find(gl, count, '\0', 1, 1, 0); } /*....................................................................... * This is an action function which deletes backward from the cursor back to * and including a specified character. */ static KT_KEY_FN(gl_backward_delete_find) { return gl_delete_find(gl, count, '\0', 0, 1, 0); } /*....................................................................... * This is an action function which deletes forward from the cursor up to but * not including a specified character. */ static KT_KEY_FN(gl_forward_delete_to) { return gl_delete_find(gl, count, '\0', 1, 0, 0); } /*....................................................................... * This is an action function which deletes backward from the cursor back to * but not including a specified character. */ static KT_KEY_FN(gl_backward_delete_to) { return gl_delete_find(gl, count, '\0', 0, 0, 0); } /*....................................................................... * This is an action function which deletes to a character specified by a * previous search. */ static KT_KEY_FN(gl_delete_refind) { return gl_delete_find(gl, count, gl->vi.find_char, gl->vi.find_forward, gl->vi.find_onto, 0); } /*....................................................................... * This is an action function which deletes to a character specified by a * previous search, but in the opposite direction. */ static KT_KEY_FN(gl_delete_invert_refind) { return gl_delete_find(gl, count, gl->vi.find_char, !gl->vi.find_forward, gl->vi.find_onto, 0); } /*....................................................................... * This is an action function which converts the characters in the word * following the cursor to upper case. */ static KT_KEY_FN(gl_upcase_word) { /* * Locate the count'th word ending after the cursor. */ int last = gl_nth_word_end_forward(gl, count); /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Upcase characters from the current cursor position to 'last'. */ while(gl->buff_curpos <= last) { char *cptr = gl->line + gl->buff_curpos; /* * Convert the character to upper case? */ if(islower((int)(unsigned char) *cptr)) gl_buffer_char(gl, toupper((int) *cptr), gl->buff_curpos); gl->buff_curpos++; /* * Write the possibly modified character back. Note that for non-modified * characters we want to do this as well, so as to advance the cursor. */ if(gl_print_char(gl, *cptr, cptr[1])) return 1; }; return gl_place_cursor(gl, gl->buff_curpos); /* bounds check */ } /*....................................................................... * This is an action function which converts the characters in the word * following the cursor to lower case. */ static KT_KEY_FN(gl_downcase_word) { /* * Locate the count'th word ending after the cursor. */ int last = gl_nth_word_end_forward(gl, count); /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Upcase characters from the current cursor position to 'last'. */ while(gl->buff_curpos <= last) { char *cptr = gl->line + gl->buff_curpos; /* * Convert the character to upper case? */ if(isupper((int)(unsigned char) *cptr)) gl_buffer_char(gl, tolower((int) *cptr), gl->buff_curpos); gl->buff_curpos++; /* * Write the possibly modified character back. Note that for non-modified * characters we want to do this as well, so as to advance the cursor. */ if(gl_print_char(gl, *cptr, cptr[1])) return 1; }; return gl_place_cursor(gl, gl->buff_curpos); /* bounds check */ } /*....................................................................... * This is an action function which converts the first character of the * following word to upper case, in order to capitalize the word, and * leaves the cursor at the end of the word. */ static KT_KEY_FN(gl_capitalize_word) { char *cptr; /* &gl->line[gl->buff_curpos] */ int first; /* True for the first letter of the word */ int i; /* * Keep a record of the current insert mode and the cursor position. */ int insert = gl->insert; /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * We want to overwrite the modified word. */ gl->insert = 0; /* * Capitalize 'count' words. */ for(i=0; ibuff_curpos < gl->ntotal; i++) { int pos = gl->buff_curpos; /* * If we are not already within a word, skip to the start of the word. */ for(cptr = gl->line + pos ; posntotal && !gl_is_word_char((int) *cptr); pos++, cptr++) ; /* * Move the cursor to the new position. */ if(gl_place_cursor(gl, pos)) return 1; /* * While searching for the end of the word, change lower case letters * to upper case. */ for(first=1; gl->buff_curposntotal && gl_is_word_char((int) *cptr); gl->buff_curpos++, cptr++) { /* * Convert the character to upper case? */ if(first) { if(islower((int)(unsigned char) *cptr)) gl_buffer_char(gl, toupper((int) *cptr), cptr - gl->line); } else { if(isupper((int)(unsigned char) *cptr)) gl_buffer_char(gl, tolower((int) *cptr), cptr - gl->line); }; first = 0; /* * Write the possibly modified character back. Note that for non-modified * characters we want to do this as well, so as to advance the cursor. */ if(gl_print_char(gl, *cptr, cptr[1])) return 1; }; }; /* * Restore the insertion mode. */ gl->insert = insert; return gl_place_cursor(gl, gl->buff_curpos); /* bounds check */ } /*....................................................................... * This is an action function which redraws the current line. */ static KT_KEY_FN(gl_redisplay) { /* * Keep a record of the current cursor position. */ int buff_curpos = gl->buff_curpos; /* * Do nothing if there is no line to be redisplayed. */ if(gl->endline) return 0; /* * Erase the current input line. */ if(gl_erase_line(gl)) return 1; /* * Display the current prompt. */ if(gl_display_prompt(gl)) return 1; /* * Render the part of the line that the user has typed in so far. */ if(gl_print_string(gl, gl->line, '\0')) return 1; /* * Restore the cursor position. */ if(gl_place_cursor(gl, buff_curpos)) return 1; /* * Mark the redisplay operation as having been completed. */ gl->redisplay = 0; /* * Flush the redisplayed line to the terminal. */ return gl_flush_output(gl); } /*....................................................................... * This is an action function which clears the display and redraws the * input line from the home position. */ static KT_KEY_FN(gl_clear_screen) { /* * Home the cursor and clear from there to the end of the display. */ if(gl_print_control_sequence(gl, gl->nline, gl->home) || gl_print_control_sequence(gl, gl->nline, gl->clear_eod)) return 1; /* * The input line is no longer displayed. */ gl_line_erased(gl); /* * Arrange for the input line to be redisplayed. */ gl_queue_redisplay(gl); return 0; } /*....................................................................... * This is an action function which swaps the character under the cursor * with the character to the left of the cursor. */ static KT_KEY_FN(gl_transpose_chars) { char from[3]; /* The original string of 2 characters */ char swap[3]; /* The swapped string of two characters */ /* * If we are at the beginning or end of the line, there aren't two * characters to swap. */ if(gl->buff_curpos < 1 || gl->buff_curpos >= gl->ntotal) return 0; /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Get the original and swapped strings of the two characters. */ from[0] = gl->line[gl->buff_curpos - 1]; from[1] = gl->line[gl->buff_curpos]; from[2] = '\0'; swap[0] = gl->line[gl->buff_curpos]; swap[1] = gl->line[gl->buff_curpos - 1]; swap[2] = '\0'; /* * Move the cursor to the start of the two characters. */ if(gl_place_cursor(gl, gl->buff_curpos-1)) return 1; /* * Swap the two characters in the buffer. */ gl_buffer_char(gl, swap[0], gl->buff_curpos); gl_buffer_char(gl, swap[1], gl->buff_curpos+1); /* * If the sum of the displayed width of the two characters * in their current and final positions is the same, swapping can * be done by just overwriting with the two swapped characters. */ if(gl_displayed_string_width(gl, from, -1, gl->term_curpos) == gl_displayed_string_width(gl, swap, -1, gl->term_curpos)) { int insert = gl->insert; gl->insert = 0; if(gl_print_char(gl, swap[0], swap[1]) || gl_print_char(gl, swap[1], gl->line[gl->buff_curpos+2])) return 1; gl->insert = insert; /* * If the swapped substring has a different displayed size, we need to * redraw everything after the first of the characters. */ } else { if(gl_print_string(gl, gl->line + gl->buff_curpos, '\0') || gl_truncate_display(gl)) return 1; }; /* * Advance the cursor to the character after the swapped pair. */ return gl_place_cursor(gl, gl->buff_curpos + 2); } /*....................................................................... * This is an action function which sets a mark at the current cursor * location. */ static KT_KEY_FN(gl_set_mark) { gl->buff_mark = gl->buff_curpos; return 0; } /*....................................................................... * This is an action function which swaps the mark location for the * cursor location. */ static KT_KEY_FN(gl_exchange_point_and_mark) { /* * Get the old mark position, and limit to the extent of the input * line. */ int old_mark = gl->buff_mark <= gl->ntotal ? gl->buff_mark : gl->ntotal; /* * Make the current cursor position the new mark. */ gl->buff_mark = gl->buff_curpos; /* * Move the cursor to the old mark position. */ return gl_place_cursor(gl, old_mark); } /*....................................................................... * This is an action function which deletes the characters between the * mark and the cursor, recording them in gl->cutbuf for later pasting. */ static KT_KEY_FN(gl_kill_region) { /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Limit the mark to be within the line. */ if(gl->buff_mark > gl->ntotal) gl->buff_mark = gl->ntotal; /* * If there are no characters between the cursor and the mark, simply clear * the cut buffer. */ if(gl->buff_mark == gl->buff_curpos) { gl->cutbuf[0] = '\0'; return 0; }; /* * If the mark is before the cursor, swap the cursor and the mark. */ if(gl->buff_mark < gl->buff_curpos && gl_exchange_point_and_mark(gl,1,NULL)) return 1; /* * Delete the characters. */ if(gl_delete_chars(gl, gl->buff_mark - gl->buff_curpos, 1)) return 1; /* * Make the mark the same as the cursor position. */ gl->buff_mark = gl->buff_curpos; return 0; } /*....................................................................... * This is an action function which records the characters between the * mark and the cursor, in gl->cutbuf for later pasting. */ static KT_KEY_FN(gl_copy_region_as_kill) { int ca, cb; /* The indexes of the first and last characters in the region */ int mark; /* The position of the mark */ /* * Get the position of the mark, limiting it to lie within the line. */ mark = gl->buff_mark > gl->ntotal ? gl->ntotal : gl->buff_mark; /* * If there are no characters between the cursor and the mark, clear * the cut buffer. */ if(mark == gl->buff_curpos) { gl->cutbuf[0] = '\0'; return 0; }; /* * Get the line indexes of the first and last characters in the region. */ if(mark < gl->buff_curpos) { ca = mark; cb = gl->buff_curpos - 1; } else { ca = gl->buff_curpos; cb = mark - 1; }; /* * Copy the region to the cut buffer. */ memcpy(gl->cutbuf, gl->line + ca, cb + 1 - ca); gl->cutbuf[cb + 1 - ca] = '\0'; return 0; } /*....................................................................... * This is an action function which inserts the contents of the cut * buffer at the current cursor location. */ static KT_KEY_FN(gl_yank) { int i; /* * Set the mark at the current location. */ gl->buff_mark = gl->buff_curpos; /* * Do nothing else if the cut buffer is empty. */ if(gl->cutbuf[0] == '\0') return gl_ring_bell(gl, 1, NULL); /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Insert the string count times. */ for(i=0; icutbuf)) return 1; }; /* * gl_add_string_to_line() leaves the cursor after the last character that * was pasted, whereas vi leaves the cursor over the last character pasted. */ if(gl->editor == GL_VI_MODE && gl_cursor_left(gl, 1, NULL)) return 1; return 0; } /*....................................................................... * This is an action function which inserts the contents of the cut * buffer one character beyond the current cursor location. */ static KT_KEY_FN(gl_append_yank) { int was_command = gl->vi.command; int i; /* * If the cut buffer is empty, ring the terminal bell. */ if(gl->cutbuf[0] == '\0') return gl_ring_bell(gl, 1, NULL); /* * Set the mark at the current location + 1. */ gl->buff_mark = gl->buff_curpos + 1; /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Arrange to paste the text in insert mode after the current character. */ if(gl_vi_append(gl, 0, NULL)) return 1; /* * Insert the string count times. */ for(i=0; icutbuf)) return 1; }; /* * Switch back to command mode if necessary. */ if(was_command) gl_vi_command_mode(gl); return 0; } /*....................................................................... * Attempt to ask the terminal for its current size. On systems that * don't support the TIOCWINSZ ioctl() for querying the terminal size, * the current values of gl->ncolumn and gl->nrow are returned. * * Input: * gl GetLine * The resource object of gl_get_line(). * Input/Output: * ncolumn int * The number of columns will be assigned to *ncolumn. * nline int * The number of lines will be assigned to *nline. */ static void gl_query_size(GetLine *gl, int *ncolumn, int *nline) { #ifdef TIOCGWINSZ /* * Query the new terminal window size. Ignore invalid responses. */ struct winsize size; if(ioctl(gl->output_fd, TIOCGWINSZ, &size) == 0 && size.ws_row > 0 && size.ws_col > 0) { *ncolumn = size.ws_col; *nline = size.ws_row; return; }; #endif /* * Return the existing values. */ *ncolumn = gl->ncolumn; *nline = gl->nline; return; } /*....................................................................... * Query the size of the terminal, and if it has changed, redraw the * current input line accordingly. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int 0 - OK. * 1 - Error. */ static int _gl_update_size(GetLine *gl) { int ncolumn, nline; /* The new size of the terminal */ /* * Query the new terminal window size. */ gl_query_size(gl, &ncolumn, &nline); /* * Update gl and the displayed line to fit the new dimensions. */ return gl_handle_tty_resize(gl, ncolumn, nline); } /*....................................................................... * Redraw the current input line to account for a change in the terminal * size. Also install the new size in gl. * * Input: * gl GetLine * The resource object of gl_get_line(). * ncolumn int The new number of columns. * nline int The new number of lines. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_handle_tty_resize(GetLine *gl, int ncolumn, int nline) { /* * If the input device isn't a terminal, just record the new size. */ if(!gl->is_term) { gl->nline = nline; gl->ncolumn = ncolumn; /* * Has the size actually changed? */ } else if(ncolumn != gl->ncolumn || nline != gl->nline) { /* * If we are currently editing a line, erase it. */ if(gl_erase_line(gl)) return 1; /* * Update the recorded window size. */ gl->nline = nline; gl->ncolumn = ncolumn; /* * Arrange for the input line to be redrawn before the next character * is read from the terminal. */ gl_queue_redisplay(gl); }; return 0; } /*....................................................................... * This is the action function that recalls the previous line in the * history buffer. */ static KT_KEY_FN(gl_up_history) { /* * In vi mode, switch to command mode, since the user is very * likely to want to move around newly recalled lines. */ gl_vi_command_mode(gl); /* * Forget any previous recall session. */ gl->preload_id = 0; /* * Record the key sequence number of this search action. */ gl->last_search = gl->keyseq_count; /* * We don't want a search prefix for this function. */ if(_glh_search_prefix(gl->glh, gl->line, 0)) { _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); return 1; }; /* * Recall the count'th next older line in the history list. If the first one * fails we can return since nothing has changed, otherwise we must continue * and update the line state. */ if(_glh_find_backwards(gl->glh, gl->line, gl->linelen+1) == NULL) return 0; while(--count && _glh_find_backwards(gl->glh, gl->line, gl->linelen+1)) ; /* * Accomodate the new contents of gl->line[]. */ gl_update_buffer(gl); /* * Arrange to have the cursor placed at the end of the new line. */ gl->buff_curpos = gl->ntotal; /* * Erase and display the new line. */ gl_queue_redisplay(gl); return 0; } /*....................................................................... * This is the action function that recalls the next line in the * history buffer. */ static KT_KEY_FN(gl_down_history) { /* * In vi mode, switch to command mode, since the user is very * likely to want to move around newly recalled lines. */ gl_vi_command_mode(gl); /* * Record the key sequence number of this search action. */ gl->last_search = gl->keyseq_count; /* * If no search is currently in progress continue a previous recall * session from a previous entered line if possible. */ if(_glh_line_id(gl->glh, 0) == 0 && gl->preload_id) { _glh_recall_line(gl->glh, gl->preload_id, gl->line, gl->linelen+1); gl->preload_id = 0; } else { /* * We don't want a search prefix for this function. */ if(_glh_search_prefix(gl->glh, gl->line, 0)) { _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); return 1; }; /* * Recall the count'th next newer line in the history list. If the first one * fails we can return since nothing has changed otherwise we must continue * and update the line state. */ if(_glh_find_forwards(gl->glh, gl->line, gl->linelen+1) == NULL) return 0; while(--count && _glh_find_forwards(gl->glh, gl->line, gl->linelen+1)) ; }; /* * Accomodate the new contents of gl->line[]. */ gl_update_buffer(gl); /* * Arrange to have the cursor placed at the end of the new line. */ gl->buff_curpos = gl->ntotal; /* * Erase and display the new line. */ gl_queue_redisplay(gl); return 0; } /*....................................................................... * This is the action function that recalls the previous line in the * history buffer whos prefix matches the characters that currently * precede the cursor. By setting count=-1, this can be used internally * to force searching for the prefix used in the last search. */ static KT_KEY_FN(gl_history_search_backward) { /* * In vi mode, switch to command mode, since the user is very * likely to want to move around newly recalled lines. */ gl_vi_command_mode(gl); /* * Forget any previous recall session. */ gl->preload_id = 0; /* * Record the key sequence number of this search action. */ gl->last_search = gl->keyseq_count; /* * If a prefix search isn't already in progress, replace the search * prefix to the string that precedes the cursor. In vi command mode * include the character that is under the cursor in the string. If * count<0 keep the previous search prefix regardless, so as to force * a repeat search even if the last command wasn't a history command. */ if(count >= 0 && !_glh_search_active(gl->glh) && _glh_search_prefix(gl->glh, gl->line, gl->buff_curpos + (gl->editor==GL_VI_MODE && gl->ntotal>0))) { _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); return 1; }; /* * Search backwards for a match to the part of the line which precedes the * cursor. */ if(_glh_find_backwards(gl->glh, gl->line, gl->linelen+1) == NULL) return 0; /* * Accomodate the new contents of gl->line[]. */ gl_update_buffer(gl); /* * Arrange to have the cursor placed at the end of the new line. */ gl->buff_curpos = gl->ntotal; /* * Erase and display the new line. */ gl_queue_redisplay(gl); return 0; } /*....................................................................... * This is the action function that recalls the previous line in the * history buffer who's prefix matches that specified in an earlier call * to gl_history_search_backward() or gl_history_search_forward(). */ static KT_KEY_FN(gl_history_re_search_backward) { return gl_history_search_backward(gl, -1, NULL); } /*....................................................................... * This is the action function that recalls the next line in the * history buffer who's prefix matches that specified in the earlier call * to gl_history_search_backward) which started the history search. * By setting count=-1, this can be used internally to force searching * for the prefix used in the last search. */ static KT_KEY_FN(gl_history_search_forward) { /* * In vi mode, switch to command mode, since the user is very * likely to want to move around newly recalled lines. */ gl_vi_command_mode(gl); /* * Record the key sequence number of this search action. */ gl->last_search = gl->keyseq_count; /* * If a prefix search isn't already in progress, replace the search * prefix to the string that precedes the cursor. In vi command mode * include the character that is under the cursor in the string. If * count<0 keep the previous search prefix regardless, so as to force * a repeat search even if the last command wasn't a history command. */ if(count >= 0 && !_glh_search_active(gl->glh) && _glh_search_prefix(gl->glh, gl->line, gl->buff_curpos + (gl->editor==GL_VI_MODE && gl->ntotal>0))) { _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); return 1; }; /* * Search forwards for the next matching line. */ if(_glh_find_forwards(gl->glh, gl->line, gl->linelen+1) == NULL) return 0; /* * Accomodate the new contents of gl->line[]. */ gl_update_buffer(gl); /* * Arrange for the cursor to be placed at the end of the new line. */ gl->buff_curpos = gl->ntotal; /* * Erase and display the new line. */ gl_queue_redisplay(gl); return 0; } /*....................................................................... * This is the action function that recalls the next line in the * history buffer who's prefix matches that specified in an earlier call * to gl_history_search_backward() or gl_history_search_forward(). */ static KT_KEY_FN(gl_history_re_search_forward) { return gl_history_search_forward(gl, -1, NULL); } #ifdef HIDE_FILE_SYSTEM /*....................................................................... * The following function is used as the default completion handler when * the filesystem is to be hidden. It simply reports no completions. */ static CPL_MATCH_FN(gl_no_completions) { return 0; } #endif /*....................................................................... * This is the tab completion function that completes the filename that * precedes the cursor position. Its callback data argument must be a * pointer to a GlCplCallback containing the completion callback function * and its callback data, or NULL to use the builtin filename completer. */ static KT_KEY_FN(gl_complete_word) { CplMatches *matches; /* The possible completions */ int suffix_len; /* The length of the completion extension */ int cont_len; /* The length of any continuation suffix */ int nextra; /* The number of characters being added to the */ /* total length of the line. */ int buff_pos; /* The buffer index at which the completion is */ /* to be inserted. */ int waserr = 0; /* True after errors */ /* * Get the container of the completion callback and its callback data. */ GlCplCallback *cb = data ? (GlCplCallback *) data : &gl->cplfn; /* * In vi command mode, switch to append mode so that the character under * the cursor is included in the completion (otherwise people can't * complete at the end of the line). */ if(gl->vi.command && gl_vi_append(gl, 0, NULL)) return 1; /* * Get the cursor position at which the completion is to be inserted. */ buff_pos = gl->buff_curpos; /* * Perform the completion. */ matches = cpl_complete_word(gl->cpl, gl->line, gl->buff_curpos, cb->data, cb->fn); /* * No matching completions? */ if(!matches) { waserr = gl_print_info(gl, cpl_last_error(gl->cpl), GL_END_INFO); /* * Are there any completions? */ } else if(matches->nmatch >= 1) { /* * If there any ambiguous matches, report them, starting on a new line. */ if(matches->nmatch > 1 && gl->echo) { if(_gl_normal_io(gl) || _cpl_output_completions(matches, gl_write_fn, gl, gl->ncolumn)) waserr = 1; }; /* * Get the length of the suffix and any continuation suffix to add to it. */ suffix_len = strlen(matches->suffix); cont_len = strlen(matches->cont_suffix); /* * If there is an unambiguous match, and the continuation suffix ends in * a newline, strip that newline and arrange to have getline return * after this action function returns. */ if(matches->nmatch==1 && cont_len > 0 && matches->cont_suffix[cont_len - 1] == '\n') { cont_len--; if(gl_newline(gl, 1, NULL)) waserr = 1; }; /* * Work out the number of characters that are to be added. */ nextra = suffix_len + cont_len; /* * Is there anything to be added? */ if(!waserr && nextra) { /* * Will there be space for the expansion in the line buffer? */ if(gl->ntotal + nextra < gl->linelen) { /* * Make room to insert the filename extension. */ gl_make_gap_in_buffer(gl, gl->buff_curpos, nextra); /* * Insert the filename extension. */ gl_buffer_string(gl, matches->suffix, suffix_len, gl->buff_curpos); /* * Add the terminating characters. */ gl_buffer_string(gl, matches->cont_suffix, cont_len, gl->buff_curpos + suffix_len); /* * Place the cursor position at the end of the completion. */ gl->buff_curpos += nextra; /* * If we don't have to redisplay the whole line, redisplay the part * of the line which follows the original cursor position, and place * the cursor at the end of the completion. */ if(gl->displayed) { if(gl_truncate_display(gl) || gl_print_string(gl, gl->line + buff_pos, '\0') || gl_place_cursor(gl, gl->buff_curpos)) waserr = 1; }; } else { (void) gl_print_info(gl, "Insufficient room in line for file completion.", GL_END_INFO); waserr = 1; }; }; }; /* * If any output had to be written to the terminal, then editing will * have been suspended, make sure that we are back in raw line editing * mode before returning. */ if(_gl_raw_io(gl, 1)) waserr = 1; return 0; } #ifndef HIDE_FILE_SYSTEM /*....................................................................... * This is the function that expands the filename that precedes the * cursor position. It expands ~user/ expressions, $envvar expressions, * and wildcards. */ static KT_KEY_FN(gl_expand_filename) { char *start_path; /* The pointer to the start of the pathname in */ /* gl->line[]. */ FileExpansion *result; /* The results of the filename expansion */ int pathlen; /* The length of the pathname being expanded */ int length; /* The number of characters needed to display the */ /* expanded files. */ int nextra; /* The number of characters to be added */ int i,j; /* * In vi command mode, switch to append mode so that the character under * the cursor is included in the completion (otherwise people can't * complete at the end of the line). */ if(gl->vi.command && gl_vi_append(gl, 0, NULL)) return 1; /* * Locate the start of the filename that precedes the cursor position. */ start_path = _pu_start_of_path(gl->line, gl->buff_curpos); if(!start_path) return 1; /* * Get the length of the string that is to be expanded. */ pathlen = gl->buff_curpos - (start_path - gl->line); /* * Attempt to expand it. */ result = ef_expand_file(gl->ef, start_path, pathlen); /* * If there was an error, report the error on a new line. */ if(!result) return gl_print_info(gl, ef_last_error(gl->ef), GL_END_INFO); /* * If no files matched, report this as well. */ if(result->nfile == 0 || !result->exists) return gl_print_info(gl, "No files match.", GL_END_INFO); /* * If in vi command mode, preserve the current line for potential use by * vi-undo. */ gl_save_for_undo(gl); /* * Work out how much space we will need to display all of the matching * filenames, taking account of the space that we need to place between * them, and the number of additional '\' characters needed to escape * spaces, tabs and backslash characters in the individual filenames. */ length = 0; for(i=0; infile; i++) { char *file = result->files[i]; while(*file) { int c = *file++; switch(c) { case ' ': case '\t': case '\\': case '*': case '?': case '[': length++; /* Count extra backslash characters */ }; length++; /* Count the character itself */ }; length++; /* Count the space that follows each filename */ }; /* * Work out the number of characters that are to be added. */ nextra = length - pathlen; /* * Will there be space for the expansion in the line buffer? */ if(gl->ntotal + nextra >= gl->linelen) { return gl_print_info(gl, "Insufficient room in line for file expansion.", GL_END_INFO); } else { /* * Do we need to move the part of the line that followed the unexpanded * filename? */ if(nextra > 0) { gl_make_gap_in_buffer(gl, gl->buff_curpos, nextra); } else if(nextra < 0) { gl->buff_curpos += nextra; gl_remove_from_buffer(gl, gl->buff_curpos, -nextra); }; /* * Insert the filenames, separated by spaces, and with internal spaces, * tabs and backslashes escaped with backslashes. */ for(i=0,j=start_path - gl->line; infile; i++) { char *file = result->files[i]; while(*file) { int c = *file++; switch(c) { case ' ': case '\t': case '\\': case '*': case '?': case '[': gl_buffer_char(gl, '\\', j++); }; gl_buffer_char(gl, c, j++); }; gl_buffer_char(gl, ' ', j++); }; }; /* * Redisplay the part of the line which follows the start of * the original filename. */ if(gl_place_cursor(gl, start_path - gl->line) || gl_truncate_display(gl) || gl_print_string(gl, start_path, start_path[length])) return 1; /* * Move the cursor to the end of the expansion. */ return gl_place_cursor(gl, (start_path - gl->line) + length); } #endif #ifndef HIDE_FILE_SYSTEM /*....................................................................... * This is the action function that lists glob expansions of the * filename that precedes the cursor position. It expands ~user/ * expressions, $envvar expressions, and wildcards. */ static KT_KEY_FN(gl_list_glob) { char *start_path; /* The pointer to the start of the pathname in */ /* gl->line[]. */ FileExpansion *result; /* The results of the filename expansion */ int pathlen; /* The length of the pathname being expanded */ /* * Locate the start of the filename that precedes the cursor position. */ start_path = _pu_start_of_path(gl->line, gl->buff_curpos); if(!start_path) return 1; /* * Get the length of the string that is to be expanded. */ pathlen = gl->buff_curpos - (start_path - gl->line); /* * Attempt to expand it. */ result = ef_expand_file(gl->ef, start_path, pathlen); /* * If there was an error, report it. */ if(!result) { return gl_print_info(gl, ef_last_error(gl->ef), GL_END_INFO); /* * If no files matched, report this as well. */ } else if(result->nfile == 0 || !result->exists) { return gl_print_info(gl, "No files match.", GL_END_INFO); /* * List the matching expansions. */ } else if(gl->echo) { if(gl_start_newline(gl, 1) || _ef_output_expansions(result, gl_write_fn, gl, gl->ncolumn)) return 1; gl_queue_redisplay(gl); }; return 0; } #endif /*....................................................................... * Return non-zero if a character should be considered a part of a word. * * Input: * c int The character to be tested. * Output: * return int True if the character should be considered part of a word. */ static int gl_is_word_char(int c) { return isalnum((int)(unsigned char)c) || strchr(GL_WORD_CHARS, c) != NULL; } /*....................................................................... * Override the builtin file-completion callback that is bound to the * "complete_word" action function. * * Input: * gl GetLine * The resource object of the command-line input * module. * data void * This is passed to match_fn() whenever it is * called. It could, for example, point to a * symbol table where match_fn() could look * for possible completions. * match_fn CplMatchFn * The function that will identify the prefix * to be completed from the input line, and * report matching symbols. * Output: * return int 0 - OK. * 1 - Error. */ int gl_customize_completion(GetLine *gl, void *data, CplMatchFn *match_fn) { sigset_t oldset; /* The signals that were blocked on entry to this function */ /* * Check the arguments. */ if(!gl || !match_fn) { if(gl) _err_record_msg(gl->err, "NULL argument", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Record the new completion function and its callback data. */ gl->cplfn.fn = match_fn; gl->cplfn.data = data; /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); return 0; } /*....................................................................... * Change the terminal (or stream) that getline interacts with. * * Input: * gl GetLine * The resource object of the command-line input * module. * input_fp FILE * The stdio stream to read from. * output_fp FILE * The stdio stream to write to. * term char * The terminal type. This can be NULL if * either or both of input_fp and output_fp don't * refer to a terminal. Otherwise it should refer * to an entry in the terminal information database. * Output: * return int 0 - OK. * 1 - Error. */ int gl_change_terminal(GetLine *gl, FILE *input_fp, FILE *output_fp, const char *term) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_change_terminal() */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Execute the private body of the function while signals are blocked. */ status = _gl_change_terminal(gl, input_fp, output_fp, term); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the gl_change_terminal() function. It * assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_change_terminal(GetLine *gl, FILE *input_fp, FILE *output_fp, const char *term) { int is_term = 0; /* True if both input_fd and output_fd are associated */ /* with a terminal. */ /* * Require that input_fp and output_fp both be valid. */ if(!input_fp || !output_fp) { gl_print_info(gl, "Can't change terminal. Bad input/output stream(s).", GL_END_INFO); return 1; }; /* * Are we displacing an existing terminal (as opposed to setting the * initial terminal)? */ if(gl->input_fd >= 0) { /* * Make sure to leave the previous terminal in a usable state. */ if(_gl_normal_io(gl)) return 1; /* * Remove the displaced terminal from the list of fds to watch. */ #ifdef HAVE_SELECT FD_CLR(gl->input_fd, &gl->rfds); #endif }; /* * Record the file descriptors and streams. */ gl->input_fp = input_fp; gl->input_fd = fileno(input_fp); gl->output_fp = output_fp; gl->output_fd = fileno(output_fp); /* * If needed, expand the record of the maximum file-descriptor that might * need to be monitored with select(). */ #ifdef HAVE_SELECT if(gl->input_fd > gl->max_fd) gl->max_fd = gl->input_fd; #endif /* * Disable terminal interaction until we have enough info to interact * with the terminal. */ gl->is_term = 0; /* * For terminal editing, we need both output_fd and input_fd to refer to * a terminal. While we can't verify that they both point to the same * terminal, we can verify that they point to terminals. If the user * sets the TERM environment variable to "dumb", treat a terminal as * a non-interactive I/O stream. */ is_term = (isatty(gl->input_fd) && isatty(gl->output_fd)) && !(term && strcmp(term, "dumb")==0); /* * If we are interacting with a terminal and no terminal type has been * specified, treat it as a generic ANSI terminal. */ if(is_term && !term) term = "ansi"; /* * Make a copy of the terminal type string. */ if(term != gl->term) { /* * Delete any old terminal type string. */ if(gl->term) { free(gl->term); gl->term = NULL; }; /* * Make a copy of the new terminal-type string, if any. */ if(term) { gl->term = (char *) malloc(strlen(term)+1); if(gl->term) strcpy(gl->term, term); }; }; /* * Clear any terminal-specific key bindings that were taken from the * settings of the last terminal. */ _kt_clear_bindings(gl->bindings, KTB_TERM); /* * If we have a terminal install new bindings for it. */ if(is_term) { /* * Get the current settings of the terminal. */ if(tcgetattr(gl->input_fd, &gl->oldattr)) { _err_record_msg(gl->err, "tcgetattr error", END_ERR_MSG); return 1; }; /* * If we don't set this now, gl_control_strings() won't know * that it is talking to a terminal. */ gl->is_term = 1; /* * Lookup the terminal control string and size information. */ if(gl_control_strings(gl, term)) { gl->is_term = 0; return 1; }; /* * Bind terminal-specific keys. */ if(gl_bind_terminal_keys(gl)) return 1; }; /* * Assume that the caller has given us a terminal in a sane state. */ gl->io_mode = GL_NORMAL_MODE; /* * Switch into the currently configured I/O mode. */ if(_gl_io_mode(gl, gl->io_mode)) return 1; return 0; } /*....................................................................... * Set up terminal-specific key bindings. * * Input: * gl GetLine * The resource object of the command-line input * module. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_bind_terminal_keys(GetLine *gl) { /* * Install key-bindings for the special terminal characters. */ if(gl_bind_control_char(gl, KTB_TERM, gl->oldattr.c_cc[VINTR], "user-interrupt") || gl_bind_control_char(gl, KTB_TERM, gl->oldattr.c_cc[VQUIT], "abort") || gl_bind_control_char(gl, KTB_TERM, gl->oldattr.c_cc[VSUSP], "suspend")) return 1; /* * In vi-mode, arrange for the above characters to be seen in command * mode. */ if(gl->editor == GL_VI_MODE) { if(gl_bind_control_char(gl, KTB_TERM, MAKE_META(gl->oldattr.c_cc[VINTR]), "user-interrupt") || gl_bind_control_char(gl, KTB_TERM, MAKE_META(gl->oldattr.c_cc[VQUIT]), "abort") || gl_bind_control_char(gl, KTB_TERM, MAKE_META(gl->oldattr.c_cc[VSUSP]), "suspend")) return 1; }; /* * Non-universal special keys. */ #ifdef VLNEXT if(gl_bind_control_char(gl, KTB_TERM, gl->oldattr.c_cc[VLNEXT], "literal-next")) return 1; #else if(_kt_set_keybinding(gl->bindings, KTB_TERM, "^V", "literal-next")) { _err_record_msg(gl->err, _kt_last_error(gl->bindings), END_ERR_MSG); return 1; }; #endif /* * Bind action functions to the terminal-specific arrow keys * looked up by gl_control_strings(). */ if(_gl_bind_arrow_keys(gl)) return 1; return 0; } /*....................................................................... * This function is normally bound to control-D. When it is invoked within * a line it deletes the character which follows the cursor. When invoked * at the end of the line it lists possible file completions, and when * invoked on an empty line it causes gl_get_line() to return EOF. This * function emulates the one that is normally bound to control-D by tcsh. */ static KT_KEY_FN(gl_del_char_or_list_or_eof) { /* * If we have an empty line arrange to return EOF. */ if(gl->ntotal < 1) { gl_record_status(gl, GLR_EOF, 0); return 1; /* * If we are at the end of the line list possible completions. */ } else if(gl->buff_curpos >= gl->ntotal) { return gl_list_completions(gl, 1, NULL); /* * Within the line delete the character that follows the cursor. */ } else { /* * If in vi command mode, first preserve the current line for potential use * by vi-undo. */ gl_save_for_undo(gl); /* * Delete 'count' characters. */ return gl_forward_delete_char(gl, count, NULL); }; } /*....................................................................... * This function is normally bound to control-D in vi mode. When it is * invoked within a line it lists possible file completions, and when * invoked on an empty line it causes gl_get_line() to return EOF. This * function emulates the one that is normally bound to control-D by tcsh. */ static KT_KEY_FN(gl_list_or_eof) { /* * If we have an empty line arrange to return EOF. */ if(gl->ntotal < 1) { gl_record_status(gl, GLR_EOF, 0); return 1; /* * Otherwise list possible completions. */ } else { return gl_list_completions(gl, 1, NULL); }; } /*....................................................................... * List possible completions of the word that precedes the cursor. The * callback data argument must either be NULL to select the default * file completion callback, or be a GlCplCallback object containing the * completion callback function to call. */ static KT_KEY_FN(gl_list_completions) { int waserr = 0; /* True after errors */ /* * Get the container of the completion callback and its callback data. */ GlCplCallback *cb = data ? (GlCplCallback *) data : &gl->cplfn; /* * Get the list of possible completions. */ CplMatches *matches = cpl_complete_word(gl->cpl, gl->line, gl->buff_curpos, cb->data, cb->fn); /* * No matching completions? */ if(!matches) { waserr = gl_print_info(gl, cpl_last_error(gl->cpl), GL_END_INFO); /* * List the matches. */ } else if(matches->nmatch > 0 && gl->echo) { if(_gl_normal_io(gl) || _cpl_output_completions(matches, gl_write_fn, gl, gl->ncolumn)) waserr = 1; }; /* * If any output had to be written to the terminal, then editing will * have been suspended, make sure that we are back in raw line editing * mode before returning. */ if(_gl_raw_io(gl, 1)) waserr = 1; return waserr; } /*....................................................................... * Where the user has used the symbolic arrow-key names to specify * arrow key bindings, bind the specified action functions to the default * and terminal specific arrow key sequences. * * Input: * gl GetLine * The getline resource object. * Output: * return int 0 - OK. * 1 - Error. */ static int _gl_bind_arrow_keys(GetLine *gl) { /* * Process each of the arrow keys. */ if(_gl_rebind_arrow_key(gl, "up", gl->u_arrow, "^[[A", "^[OA") || _gl_rebind_arrow_key(gl, "down", gl->d_arrow, "^[[B", "^[OB") || _gl_rebind_arrow_key(gl, "left", gl->l_arrow, "^[[D", "^[OD") || _gl_rebind_arrow_key(gl, "right", gl->r_arrow, "^[[C", "^[OC")) return 1; return 0; } /*....................................................................... * Lookup the action function of a symbolic arrow-key binding, and bind * it to the terminal-specific and default arrow-key sequences. Note that * we don't trust the terminal-specified key sequences to be correct. * The main reason for this is that on some machines the xterm terminfo * entry is for hardware X-terminals, rather than xterm terminal emulators * and the two terminal types emit different character sequences when the * their cursor keys are pressed. As a result we also supply a couple * of default key sequences. * * Input: * gl GetLine * The resource object of gl_get_line(). * name char * The symbolic name of the arrow key. * term_seq char * The terminal-specific arrow-key sequence. * def_seq1 char * The first default arrow-key sequence. * def_seq2 char * The second arrow-key sequence. * Output: * return int 0 - OK. * 1 - Error. */ static int _gl_rebind_arrow_key(GetLine *gl, const char *name, const char *term_seq, const char *def_seq1, const char *def_seq2) { KeySym *keysym; /* The binding-table entry matching the arrow-key name */ int nsym; /* The number of ambiguous matches */ /* * Lookup the key binding for the symbolic name of the arrow key. This * will either be the default action, or a user provided one. */ if(_kt_lookup_keybinding(gl->bindings, name, strlen(name), &keysym, &nsym) == KT_EXACT_MATCH) { /* * Get the action function. */ KtAction *action = keysym->actions + keysym->binder; KtKeyFn *fn = action->fn; void *data = action->data; /* * Bind this to each of the specified key sequences. */ if((term_seq && _kt_set_keyfn(gl->bindings, KTB_TERM, term_seq, fn, data)) || (def_seq1 && _kt_set_keyfn(gl->bindings, KTB_NORM, def_seq1, fn, data)) || (def_seq2 && _kt_set_keyfn(gl->bindings, KTB_NORM, def_seq2, fn, data))) { _err_record_msg(gl->err, _kt_last_error(gl->bindings), END_ERR_MSG); return 1; }; }; return 0; } /*....................................................................... * Read getline configuration information from a given file. * * Input: * gl GetLine * The getline resource object. * filename const char * The name of the file to read configuration * information from. The contents of this file * are as described in the gl_get_line(3) man * page for the default ~/.teclarc configuration * file. * who KtBinder Who bindings are to be installed for. * Output: * return int 0 - OK. * 1 - Irrecoverable error. */ static int _gl_read_config_file(GetLine *gl, const char *filename, KtBinder who) { /* * If filesystem access is to be excluded, configuration files can't * be read. */ #ifdef WITHOUT_FILE_SYSTEM _err_record_msg(gl->err, "Can't read configuration files without filesystem access", END_ERR_MSG); errno = EINVAL; return 1; #else FileExpansion *expansion; /* The expansion of the filename */ FILE *fp; /* The opened file */ int waserr = 0; /* True if an error occurred while reading */ int lineno = 1; /* The line number being processed */ /* * Check the arguments. */ if(!gl || !filename) { if(gl) _err_record_msg(gl->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Expand the filename. */ expansion = ef_expand_file(gl->ef, filename, -1); if(!expansion) { gl_print_info(gl, "Unable to expand ", filename, " (", ef_last_error(gl->ef), ").", GL_END_INFO); return 1; }; /* * Attempt to open the file. */ fp = fopen(expansion->files[0], "r"); /* * It isn't an error for there to be no configuration file. */ if(!fp) return 0; /* * Parse the contents of the file. */ while(!waserr && !feof(fp)) waserr = _gl_parse_config_line(gl, fp, glc_file_getc, filename, who, &lineno); /* * Bind action functions to the terminal-specific arrow keys. */ if(_gl_bind_arrow_keys(gl)) return 1; /* * Clean up. */ (void) fclose(fp); return waserr; #endif } /*....................................................................... * Read GetLine configuration information from a string. The contents of * the string are the same as those described in the gl_get_line(3) * man page for the contents of the ~/.teclarc configuration file. */ static int _gl_read_config_string(GetLine *gl, const char *buffer, KtBinder who) { const char *bptr; /* A pointer into buffer[] */ int waserr = 0; /* True if an error occurred while reading */ int lineno = 1; /* The line number being processed */ /* * Check the arguments. */ if(!gl || !buffer) { if(gl) _err_record_msg(gl->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Get a pointer to the start of the buffer. */ bptr = buffer; /* * Parse the contents of the buffer. */ while(!waserr && *bptr) waserr = _gl_parse_config_line(gl, &bptr, glc_buff_getc, "", who, &lineno); /* * Bind action functions to the terminal-specific arrow keys. */ if(_gl_bind_arrow_keys(gl)) return 1; return waserr; } /*....................................................................... * Parse the next line of a getline configuration file. * * Input: * gl GetLine * The getline resource object. * stream void * The pointer representing the stream to be read * by getc_fn(). * getc_fn GlcGetcFn * A callback function which when called with * 'stream' as its argument, returns the next * unread character from the stream. * origin const char * The name of the entity being read (eg. a * file name). * who KtBinder Who bindings are to be installed for. * Input/Output: * lineno int * The line number being processed is to be * maintained in *lineno. * Output: * return int 0 - OK. * 1 - Irrecoverable error. */ static int _gl_parse_config_line(GetLine *gl, void *stream, GlcGetcFn *getc_fn, const char *origin, KtBinder who, int *lineno) { char buffer[GL_CONF_BUFLEN+1]; /* The input line buffer */ char *argv[GL_CONF_MAXARG]; /* The argument list */ int argc = 0; /* The number of arguments in argv[] */ int c; /* A character from the file */ int escaped = 0; /* True if the next character is escaped */ int i; /* * Skip spaces and tabs. */ do c = getc_fn(stream); while(c==' ' || c=='\t'); /* * Comments extend to the end of the line. */ if(c=='#') do c = getc_fn(stream); while(c != '\n' && c != EOF); /* * Ignore empty lines. */ if(c=='\n' || c==EOF) { (*lineno)++; return 0; }; /* * Record the buffer location of the start of the first argument. */ argv[argc] = buffer; /* * Read the rest of the line, stopping early if a comment is seen, or * the buffer overflows, and replacing sequences of spaces with a * '\0', and recording the thus terminated string as an argument. */ i = 0; while(i= GL_CONF_MAXARG) { gl_report_config_error(gl, origin, *lineno, "Too many arguments."); do c = getc_fn(stream); while(c!='\n' && c!=EOF); /* Skip past eol */ return 0; }; argv[argc] = buffer + i; /* * The next character was preceded by spaces, so it isn't escaped. */ escaped = 0; } else { /* * If we hit an unescaped backslash, this means that we should arrange * to treat the next character like a simple alphabetical character. */ if(c=='\\' && !escaped) { escaped = 1; /* * Splice lines where the newline is escaped. */ } else if(c=='\n' && escaped) { (*lineno)++; /* * Record a normal character, preserving any preceding backslash. */ } else { if(escaped) buffer[i++] = '\\'; if(i>=GL_CONF_BUFLEN) break; escaped = 0; buffer[i++] = c; }; /* * Get the next character. */ c = getc_fn(stream); }; }; /* * Did the buffer overflow? */ if(i>=GL_CONF_BUFLEN) { gl_report_config_error(gl, origin, *lineno, "Line too long."); return 0; }; /* * The first argument should be a command name. */ if(strcmp(argv[0], "bind") == 0) { const char *action = NULL; /* A NULL action removes a keybinding */ const char *keyseq = NULL; switch(argc) { case 3: action = argv[2]; case 2: /* Note the intentional fallthrough */ keyseq = argv[1]; /* * Attempt to record the new keybinding. */ if(_kt_set_keybinding(gl->bindings, who, keyseq, action)) { gl_report_config_error(gl, origin, *lineno, _kt_last_error(gl->bindings)); }; break; default: gl_report_config_error(gl, origin, *lineno, "Wrong number of arguments."); }; } else if(strcmp(argv[0], "edit-mode") == 0) { if(argc == 2 && strcmp(argv[1], "emacs") == 0) { gl_change_editor(gl, GL_EMACS_MODE); } else if(argc == 2 && strcmp(argv[1], "vi") == 0) { gl_change_editor(gl, GL_VI_MODE); } else if(argc == 2 && strcmp(argv[1], "none") == 0) { gl_change_editor(gl, GL_NO_EDITOR); } else { gl_report_config_error(gl, origin, *lineno, "The argument of editor should be vi or emacs."); }; } else if(strcmp(argv[0], "nobeep") == 0) { gl->silence_bell = 1; } else { gl_report_config_error(gl, origin, *lineno, "Unknown command name."); }; /* * Skip any trailing comment. */ while(c != '\n' && c != EOF) c = getc_fn(stream); (*lineno)++; return 0; } /*....................................................................... * This is a private function of _gl_parse_config_line() which prints * out an error message about the contents of the line, prefixed by the * name of the origin of the line and its line number. * * Input: * gl GetLine * The resource object of gl_get_line(). * origin const char * The name of the entity being read (eg. a * file name). * lineno int The line number at which the error occurred. * errmsg const char * The error message. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_report_config_error(GetLine *gl, const char *origin, int lineno, const char *errmsg) { char lnum[20]; /* A buffer in which to render a single integer */ /* * Convert the line number into a string. */ sprintf(lnum, "%d", lineno); /* * Have the string printed on the terminal. */ return gl_print_info(gl, origin, ":", lnum, ": ", errmsg, GL_END_INFO); } /*....................................................................... * This is the _gl_parse_config_line() callback function which reads the * next character from a configuration file. */ static GLC_GETC_FN(glc_file_getc) { return fgetc((FILE *) stream); } /*....................................................................... * This is the _gl_parse_config_line() callback function which reads the * next character from a buffer. Its stream argument is a pointer to a * variable which is, in turn, a pointer into the buffer being read from. */ static GLC_GETC_FN(glc_buff_getc) { const char **lptr = (char const **) stream; return **lptr ? *(*lptr)++ : EOF; } #ifndef HIDE_FILE_SYSTEM /*....................................................................... * When this action is triggered, it arranges to temporarily read command * lines from the regular file whos name precedes the cursor. * The current line is first discarded. */ static KT_KEY_FN(gl_read_from_file) { char *start_path; /* The pointer to the start of the pathname in */ /* gl->line[]. */ FileExpansion *result; /* The results of the filename expansion */ int pathlen; /* The length of the pathname being expanded */ /* * Locate the start of the filename that precedes the cursor position. */ start_path = _pu_start_of_path(gl->line, gl->buff_curpos); if(!start_path) return 1; /* * Get the length of the pathname string. */ pathlen = gl->buff_curpos - (start_path - gl->line); /* * Attempt to expand the pathname. */ result = ef_expand_file(gl->ef, start_path, pathlen); /* * If there was an error, report the error on a new line. */ if(!result) { return gl_print_info(gl, ef_last_error(gl->ef), GL_END_INFO); /* * If no files matched, report this as well. */ } else if(result->nfile == 0 || !result->exists) { return gl_print_info(gl, "No files match.", GL_END_INFO); /* * Complain if more than one file matches. */ } else if(result->nfile > 1) { return gl_print_info(gl, "More than one file matches.", GL_END_INFO); /* * Disallow input from anything but normal files. In principle we could * also support input from named pipes. Terminal files would be a problem * since we wouldn't know the terminal type, and other types of files * might cause the library to lock up. */ } else if(!_pu_path_is_file(result->files[0])) { return gl_print_info(gl, "Not a normal file.", GL_END_INFO); } else { /* * Attempt to open and install the specified file for reading. */ gl->file_fp = fopen(result->files[0], "r"); if(!gl->file_fp) { return gl_print_info(gl, "Unable to open: ", result->files[0], GL_END_INFO); }; /* * If needed, expand the record of the maximum file-descriptor that might * need to be monitored with select(). */ #ifdef HAVE_SELECT if(fileno(gl->file_fp) > gl->max_fd) gl->max_fd = fileno(gl->file_fp); #endif /* * Is non-blocking I/O needed? */ if(gl->raw_mode && gl->io_mode==GL_SERVER_MODE && gl_nonblocking_io(gl, fileno(gl->file_fp))) { gl_revert_input(gl); return gl_print_info(gl, "Can't read file %s with non-blocking I/O", result->files[0]); }; /* * Inform the user what is happening. */ if(gl_print_info(gl, "files[0], ">", GL_END_INFO)) return 1; }; return 0; } #endif /*....................................................................... * Close any temporary file that is being used for input. * * Input: * gl GetLine * The getline resource object. */ static void gl_revert_input(GetLine *gl) { if(gl->file_fp) fclose(gl->file_fp); gl->file_fp = NULL; gl->endline = 1; } /*....................................................................... * This is the action function that recalls the oldest line in the * history buffer. */ static KT_KEY_FN(gl_beginning_of_history) { /* * In vi mode, switch to command mode, since the user is very * likely to want to move around newly recalled lines. */ gl_vi_command_mode(gl); /* * Forget any previous recall session. */ gl->preload_id = 0; /* * Record the key sequence number of this search action. */ gl->last_search = gl->keyseq_count; /* * Recall the next oldest line in the history list. */ if(_glh_oldest_line(gl->glh, gl->line, gl->linelen+1) == NULL) return 0; /* * Accomodate the new contents of gl->line[]. */ gl_update_buffer(gl); /* * Arrange to have the cursor placed at the end of the new line. */ gl->buff_curpos = gl->ntotal; /* * Erase and display the new line. */ gl_queue_redisplay(gl); return 0; } /*....................................................................... * If a history session is currently in progress, this action function * recalls the line that was being edited when the session started. If * no history session is in progress, it does nothing. */ static KT_KEY_FN(gl_end_of_history) { /* * In vi mode, switch to command mode, since the user is very * likely to want to move around newly recalled lines. */ gl_vi_command_mode(gl); /* * Forget any previous recall session. */ gl->preload_id = 0; /* * Record the key sequence number of this search action. */ gl->last_search = gl->keyseq_count; /* * Recall the next oldest line in the history list. */ if(_glh_current_line(gl->glh, gl->line, gl->linelen+1) == NULL) return 0; /* * Accomodate the new contents of gl->line[]. */ gl_update_buffer(gl); /* * Arrange to have the cursor placed at the end of the new line. */ gl->buff_curpos = gl->ntotal; /* * Erase and display the new line. */ gl_queue_redisplay(gl); return 0; } /*....................................................................... * This action function is treated specially, in that its count argument * is set to the end keystroke of the keysequence that activated it. * It accumulates a numeric argument, adding one digit on each call in * which the last keystroke was a numeric digit. */ static KT_KEY_FN(gl_digit_argument) { /* * Was the last keystroke a digit? */ int is_digit = isdigit((int)(unsigned char) count); /* * In vi command mode, a lone '0' means goto-start-of-line. */ if(gl->vi.command && gl->number < 0 && count == '0') return gl_beginning_of_line(gl, count, NULL); /* * Are we starting to accumulate a new number? */ if(gl->number < 0 || !is_digit) gl->number = 0; /* * Was the last keystroke a digit? */ if(is_digit) { /* * Read the numeric value of the digit, without assuming ASCII. */ int n; char s[2]; s[0] = count; s[1] = '\0'; n = atoi(s); /* * Append the new digit. */ gl->number = gl->number * 10 + n; }; return 0; } /*....................................................................... * The newline action function sets gl->endline to tell * gl_get_input_line() that the line is now complete. */ static KT_KEY_FN(gl_newline) { GlhLineID id; /* The last history line recalled while entering this line */ /* * Flag the line as ended. */ gl->endline = 1; /* * Record the next position in the history buffer, for potential * recall by an action function on the next call to gl_get_line(). */ id = _glh_line_id(gl->glh, 1); if(id) gl->preload_id = id; return 0; } /*....................................................................... * The 'repeat' action function sets gl->endline to tell * gl_get_input_line() that the line is now complete, and records the * ID of the next history line in gl->preload_id so that the next call * to gl_get_input_line() will preload the line with that history line. */ static KT_KEY_FN(gl_repeat_history) { gl->endline = 1; gl->preload_id = _glh_line_id(gl->glh, 1); gl->preload_history = 1; return 0; } /*....................................................................... * Flush unwritten characters to the terminal. * * Input: * gl GetLine * The getline resource object. * Output: * return int 0 - OK. * 1 - Either an error occured, or the output * blocked and non-blocking I/O is being used. * See gl->rtn_status for details. */ static int gl_flush_output(GetLine *gl) { /* * Record the fact that we are about to write to the terminal. */ gl->pending_io = GLP_WRITE; /* * Attempt to flush the output to the terminal. */ errno = 0; switch(_glq_flush_queue(gl->cq, gl->flush_fn, gl)) { case GLQ_FLUSH_DONE: return gl->redisplay && !gl->postpone && gl_redisplay(gl, 1, NULL); break; case GLQ_FLUSH_AGAIN: /* Output blocked */ gl_record_status(gl, GLR_BLOCKED, BLOCKED_ERRNO); return 1; break; default: /* Abort the line if an error occurs */ gl_record_status(gl, errno==EINTR ? GLR_SIGNAL : GLR_ERROR, errno); return 1; break; }; } /*....................................................................... * This is the callback which _glq_flush_queue() uses to write buffered * characters to the terminal. */ static GL_WRITE_FN(gl_flush_terminal) { int ndone = 0; /* The number of characters written so far */ /* * Get the line-editor resource object. */ GetLine *gl = (GetLine *) data; /* * Transfer the latest array of characters to stdio. */ while(ndone < n) { int nnew = write(gl->output_fd, s, n-ndone); /* * If the write was successful, add to the recorded number of bytes * that have now been written. */ if(nnew > 0) { ndone += nnew; /* * If a signal interrupted the call, restart the write(), since all of * the signals that gl_get_line() has been told to watch for are * currently blocked. */ } else if(errno == EINTR) { continue; /* * If we managed to write something before an I/O error occurred, or * output blocked before anything was written, report the number of * bytes that were successfully written before this happened. */ } else if(ndone > 0 #if defined(EAGAIN) || errno==EAGAIN #endif #if defined(EWOULDBLOCK) || errno==EWOULDBLOCK #endif ) { return ndone; /* * To get here, an error must have occurred before anything new could * be written. */ } else { return -1; }; }; /* * To get here, we must have successfully written the number of * bytes that was specified. */ return n; } /*....................................................................... * Change the style of editing to emulate a given editor. * * Input: * gl GetLine * The getline resource object. * editor GlEditor The type of editor to emulate. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_change_editor(GetLine *gl, GlEditor editor) { /* * Install the default key-bindings of the requested editor. */ switch(editor) { case GL_EMACS_MODE: _kt_clear_bindings(gl->bindings, KTB_NORM); _kt_clear_bindings(gl->bindings, KTB_TERM); (void) _kt_add_bindings(gl->bindings, KTB_NORM, gl_emacs_bindings, sizeof(gl_emacs_bindings)/sizeof(gl_emacs_bindings[0])); break; case GL_VI_MODE: _kt_clear_bindings(gl->bindings, KTB_NORM); _kt_clear_bindings(gl->bindings, KTB_TERM); (void) _kt_add_bindings(gl->bindings, KTB_NORM, gl_vi_bindings, sizeof(gl_vi_bindings)/sizeof(gl_vi_bindings[0])); break; case GL_NO_EDITOR: break; default: _err_record_msg(gl->err, "Unknown editor", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Record the new editing mode. */ gl->editor = editor; gl->vi.command = 0; /* Start in input mode */ gl->insert_curpos = 0; /* * Reinstate terminal-specific bindings. */ if(gl->editor != GL_NO_EDITOR && gl->input_fp) (void) gl_bind_terminal_keys(gl); return 0; } /*....................................................................... * This is an action function that switches to editing using emacs bindings */ static KT_KEY_FN(gl_emacs_editing_mode) { return gl_change_editor(gl, GL_EMACS_MODE); } /*....................................................................... * This is an action function that switches to editing using vi bindings */ static KT_KEY_FN(gl_vi_editing_mode) { return gl_change_editor(gl, GL_VI_MODE); } /*....................................................................... * This is the action function that switches to insert mode. */ static KT_KEY_FN(gl_vi_insert) { /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Switch to vi insert mode. */ gl->insert = 1; gl->vi.command = 0; gl->insert_curpos = gl->buff_curpos; return 0; } /*....................................................................... * This is an action function that switches to overwrite mode. */ static KT_KEY_FN(gl_vi_overwrite) { /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Switch to vi overwrite mode. */ gl->insert = 0; gl->vi.command = 0; gl->insert_curpos = gl->buff_curpos; return 0; } /*....................................................................... * This action function toggles the case of the character under the * cursor. */ static KT_KEY_FN(gl_change_case) { int i; /* * Keep a record of the current insert mode and the cursor position. */ int insert = gl->insert; /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * We want to overwrite the modified word. */ gl->insert = 0; /* * Toggle the case of 'count' characters. */ for(i=0; ibuff_curpos < gl->ntotal; i++) { char *cptr = gl->line + gl->buff_curpos++; /* * Convert the character to upper case? */ if(islower((int)(unsigned char) *cptr)) gl_buffer_char(gl, toupper((int) *cptr), cptr - gl->line); else if(isupper((int)(unsigned char) *cptr)) gl_buffer_char(gl, tolower((int) *cptr), cptr - gl->line); /* * Write the possibly modified character back. Note that for non-modified * characters we want to do this as well, so as to advance the cursor. */ if(gl_print_char(gl, *cptr, cptr[1])) return 1; }; /* * Restore the insertion mode. */ gl->insert = insert; return gl_place_cursor(gl, gl->buff_curpos); /* bounds check */ } /*....................................................................... * This is the action function which implements the vi-style action which * moves the cursor to the start of the line, then switches to insert mode. */ static KT_KEY_FN(gl_vi_insert_at_bol) { gl_save_for_undo(gl); return gl_beginning_of_line(gl, 0, NULL) || gl_vi_insert(gl, 0, NULL); } /*....................................................................... * This is the action function which implements the vi-style action which * moves the cursor to the end of the line, then switches to insert mode * to allow text to be appended to the line. */ static KT_KEY_FN(gl_vi_append_at_eol) { gl_save_for_undo(gl); gl->vi.command = 0; /* Allow cursor at EOL */ return gl_end_of_line(gl, 0, NULL) || gl_vi_insert(gl, 0, NULL); } /*....................................................................... * This is the action function which implements the vi-style action which * moves the cursor to right one then switches to insert mode, thus * allowing text to be appended after the next character. */ static KT_KEY_FN(gl_vi_append) { gl_save_for_undo(gl); gl->vi.command = 0; /* Allow cursor at EOL */ return gl_cursor_right(gl, 1, NULL) || gl_vi_insert(gl, 0, NULL); } /*....................................................................... * This action function moves the cursor to the column specified by the * numeric argument. Column indexes start at 1. */ static KT_KEY_FN(gl_goto_column) { return gl_place_cursor(gl, count - 1); } /*....................................................................... * Starting with the character under the cursor, replace 'count' * characters with the next character that the user types. */ static KT_KEY_FN(gl_vi_replace_char) { char c; /* The replacement character */ int i; /* * Keep a record of the current insert mode. */ int insert = gl->insert; /* * Get the replacement character. */ if(gl->vi.repeat.active) { c = gl->vi.repeat.input_char; } else { if(gl_read_terminal(gl, 1, &c)) return 1; gl->vi.repeat.input_char = c; }; /* * Are there 'count' characters to be replaced? */ if(gl->ntotal - gl->buff_curpos >= count) { /* * If in vi command mode, preserve the current line for potential * use by vi-undo. */ gl_save_for_undo(gl); /* * Temporarily switch to overwrite mode. */ gl->insert = 0; /* * Overwrite the current character plus count-1 subsequent characters * with the replacement character. */ for(i=0; iinsert = insert; }; return gl_place_cursor(gl, gl->buff_curpos); /* bounds check */ } /*....................................................................... * This is an action function which changes all characters between the * current cursor position and the end of the line. */ static KT_KEY_FN(gl_vi_change_rest_of_line) { gl_save_for_undo(gl); gl->vi.command = 0; /* Allow cursor at EOL */ return gl_kill_line(gl, count, NULL) || gl_vi_insert(gl, 0, NULL); } /*....................................................................... * This is an action function which changes all characters between the * start of the line and the current cursor position. */ static KT_KEY_FN(gl_vi_change_to_bol) { return gl_backward_kill_line(gl,count,NULL) || gl_vi_insert(gl,0,NULL); } /*....................................................................... * This is an action function which deletes the entire contents of the * current line and switches to insert mode. */ static KT_KEY_FN(gl_vi_change_line) { return gl_delete_line(gl,count,NULL) || gl_vi_insert(gl,0,NULL); } /*....................................................................... * Starting from the cursor position and looking towards the end of the * line, copy 'count' characters to the cut buffer. */ static KT_KEY_FN(gl_forward_copy_char) { /* * Limit the count to the number of characters available. */ if(gl->buff_curpos + count >= gl->ntotal) count = gl->ntotal - gl->buff_curpos; if(count < 0) count = 0; /* * Copy the characters to the cut buffer. */ memcpy(gl->cutbuf, gl->line + gl->buff_curpos, count); gl->cutbuf[count] = '\0'; return 0; } /*....................................................................... * Starting from the character before the cursor position and looking * backwards towards the start of the line, copy 'count' characters to * the cut buffer. */ static KT_KEY_FN(gl_backward_copy_char) { /* * Limit the count to the number of characters available. */ if(count > gl->buff_curpos) count = gl->buff_curpos; if(count < 0) count = 0; gl_place_cursor(gl, gl->buff_curpos - count); /* * Copy the characters to the cut buffer. */ memcpy(gl->cutbuf, gl->line + gl->buff_curpos, count); gl->cutbuf[count] = '\0'; return 0; } /*....................................................................... * Starting from the cursor position copy to the specified column into the * cut buffer. */ static KT_KEY_FN(gl_copy_to_column) { if (--count >= gl->buff_curpos) return gl_forward_copy_char(gl, count - gl->buff_curpos, NULL); else return gl_backward_copy_char(gl, gl->buff_curpos - count, NULL); } /*....................................................................... * Starting from the cursor position copy characters up to a matching * parenthesis into the cut buffer. */ static KT_KEY_FN(gl_copy_to_parenthesis) { int curpos = gl_index_of_matching_paren(gl); if(curpos >= 0) { gl_save_for_undo(gl); if(curpos >= gl->buff_curpos) return gl_forward_copy_char(gl, curpos - gl->buff_curpos + 1, NULL); else return gl_backward_copy_char(gl, ++gl->buff_curpos - curpos + 1, NULL); }; return 0; } /*....................................................................... * Starting from the cursor position copy the rest of the line into the * cut buffer. */ static KT_KEY_FN(gl_copy_rest_of_line) { /* * Copy the characters to the cut buffer. */ memcpy(gl->cutbuf, gl->line + gl->buff_curpos, gl->ntotal - gl->buff_curpos); gl->cutbuf[gl->ntotal - gl->buff_curpos] = '\0'; return 0; } /*....................................................................... * Copy from the beginning of the line to the cursor position into the * cut buffer. */ static KT_KEY_FN(gl_copy_to_bol) { /* * Copy the characters to the cut buffer. */ memcpy(gl->cutbuf, gl->line, gl->buff_curpos); gl->cutbuf[gl->buff_curpos] = '\0'; gl_place_cursor(gl, 0); return 0; } /*....................................................................... * Copy the entire line into the cut buffer. */ static KT_KEY_FN(gl_copy_line) { /* * Copy the characters to the cut buffer. */ memcpy(gl->cutbuf, gl->line, gl->ntotal); gl->cutbuf[gl->ntotal] = '\0'; return 0; } /*....................................................................... * Search forwards for the next character that the user enters. */ static KT_KEY_FN(gl_forward_find_char) { int pos = gl_find_char(gl, count, 1, 1, '\0'); return pos >= 0 && gl_place_cursor(gl, pos); } /*....................................................................... * Search backwards for the next character that the user enters. */ static KT_KEY_FN(gl_backward_find_char) { int pos = gl_find_char(gl, count, 0, 1, '\0'); return pos >= 0 && gl_place_cursor(gl, pos); } /*....................................................................... * Search forwards for the next character that the user enters. Move up to, * but not onto, the found character. */ static KT_KEY_FN(gl_forward_to_char) { int pos = gl_find_char(gl, count, 1, 0, '\0'); return pos >= 0 && gl_place_cursor(gl, pos); } /*....................................................................... * Search backwards for the next character that the user enters. Move back to, * but not onto, the found character. */ static KT_KEY_FN(gl_backward_to_char) { int pos = gl_find_char(gl, count, 0, 0, '\0'); return pos >= 0 && gl_place_cursor(gl, pos); } /*....................................................................... * Searching in a given direction, return the index of a given (or * read) character in the input line, or the character that precedes * it in the specified search direction. Return -1 if not found. * * Input: * gl GetLine * The getline resource object. * count int The number of times to search. * forward int True if searching forward. * onto int True if the search should end on top of the * character, false if the search should stop * one character before the character in the * specified search direction. * c char The character to be sought, or '\0' if the * character should be read from the user. * Output: * return int The index of the character in gl->line[], or * -1 if not found. */ static int gl_find_char(GetLine *gl, int count, int forward, int onto, char c) { int pos; /* The index reached in searching the input line */ int i; /* * Get a character from the user? */ if(!c) { /* * If we are in the process of repeating a previous change command, substitute * the last find character. */ if(gl->vi.repeat.active) { c = gl->vi.find_char; } else { if(gl_read_terminal(gl, 1, &c)) return -1; /* * Record the details of the new search, for use by repeat finds. */ gl->vi.find_forward = forward; gl->vi.find_onto = onto; gl->vi.find_char = c; }; }; /* * Which direction should we search? */ if(forward) { /* * Search forwards 'count' times for the character, starting with the * character that follows the cursor. */ for(i=0, pos=gl->buff_curpos; intotal; i++) { /* * Advance past the last match (or past the current cursor position * on the first search). */ pos++; /* * Search for the next instance of c. */ for( ; posntotal && c!=gl->line[pos]; pos++) ; }; /* * If the character was found and we have been requested to return the * position of the character that precedes the desired character, then * we have gone one character too far. */ if(!onto && posntotal) pos--; } else { /* * Search backwards 'count' times for the character, starting with the * character that precedes the cursor. */ for(i=0, pos=gl->buff_curpos; i= gl->insert_curpos; i++) { /* * Step back one from the last match (or from the current cursor * position on the first search). */ pos--; /* * Search for the next instance of c. */ for( ; pos>=gl->insert_curpos && c!=gl->line[pos]; pos--) ; }; /* * If the character was found and we have been requested to return the * position of the character that precedes the desired character, then * we have gone one character too far. */ if(!onto && pos>=gl->insert_curpos) pos++; }; /* * If found, return the cursor position of the count'th match. * Otherwise ring the terminal bell. */ if(pos >= gl->insert_curpos && pos < gl->ntotal) { return pos; } else { (void) gl_ring_bell(gl, 1, NULL); return -1; } } /*....................................................................... * Repeat the last character search in the same direction as the last * search. */ static KT_KEY_FN(gl_repeat_find_char) { int pos = gl->vi.find_char ? gl_find_char(gl, count, gl->vi.find_forward, gl->vi.find_onto, gl->vi.find_char) : -1; return pos >= 0 && gl_place_cursor(gl, pos); } /*....................................................................... * Repeat the last character search in the opposite direction as the last * search. */ static KT_KEY_FN(gl_invert_refind_char) { int pos = gl->vi.find_char ? gl_find_char(gl, count, !gl->vi.find_forward, gl->vi.find_onto, gl->vi.find_char) : -1; return pos >= 0 && gl_place_cursor(gl, pos); } /*....................................................................... * Search forward from the current position of the cursor for 'count' * word endings, returning the index of the last one found, or the end of * the line if there were less than 'count' words. * * Input: * gl GetLine * The getline resource object. * n int The number of word boundaries to search for. * Output: * return int The buffer index of the located position. */ static int gl_nth_word_end_forward(GetLine *gl, int n) { int bufpos; /* The buffer index being checked. */ int i; /* * In order to guarantee forward motion to the next word ending, * we need to start from one position to the right of the cursor * position, since this may already be at the end of a word. */ bufpos = gl->buff_curpos + 1; /* * If we are at the end of the line, return the index of the last * real character on the line. Note that this will be -1 if the line * is empty. */ if(bufpos >= gl->ntotal) return gl->ntotal - 1; /* * Search 'n' times, unless the end of the input line is reached first. */ for(i=0; intotal; i++) { /* * If we are not already within a word, skip to the start of the next word. */ for( ; bufposntotal && !gl_is_word_char((int)gl->line[bufpos]); bufpos++) ; /* * Find the end of the next word. */ for( ; bufposntotal && gl_is_word_char((int)gl->line[bufpos]); bufpos++) ; }; /* * We will have overshot. */ return bufpos > 0 ? bufpos-1 : bufpos; } /*....................................................................... * Search forward from the current position of the cursor for 'count' * word starts, returning the index of the last one found, or the end of * the line if there were less than 'count' words. * * Input: * gl GetLine * The getline resource object. * n int The number of word boundaries to search for. * Output: * return int The buffer index of the located position. */ static int gl_nth_word_start_forward(GetLine *gl, int n) { int bufpos; /* The buffer index being checked. */ int i; /* * Get the current cursor position. */ bufpos = gl->buff_curpos; /* * Search 'n' times, unless the end of the input line is reached first. */ for(i=0; intotal; i++) { /* * Find the end of the current word. */ for( ; bufposntotal && gl_is_word_char((int)gl->line[bufpos]); bufpos++) ; /* * Skip to the start of the next word. */ for( ; bufposntotal && !gl_is_word_char((int)gl->line[bufpos]); bufpos++) ; }; return bufpos; } /*....................................................................... * Search backward from the current position of the cursor for 'count' * word starts, returning the index of the last one found, or the start * of the line if there were less than 'count' words. * * Input: * gl GetLine * The getline resource object. * n int The number of word boundaries to search for. * Output: * return int The buffer index of the located position. */ static int gl_nth_word_start_backward(GetLine *gl, int n) { int bufpos; /* The buffer index being checked. */ int i; /* * Get the current cursor position. */ bufpos = gl->buff_curpos; /* * Search 'n' times, unless the beginning of the input line (or vi insertion * point) is reached first. */ for(i=0; i gl->insert_curpos; i++) { /* * Starting one character back from the last search, so as not to keep * settling on the same word-start, search backwards until finding a * word character. */ while(--bufpos >= gl->insert_curpos && !gl_is_word_char((int)gl->line[bufpos])) ; /* * Find the start of the word. */ while(--bufpos >= gl->insert_curpos && gl_is_word_char((int)gl->line[bufpos])) ; /* * We will have gone one character too far. */ bufpos++; }; return bufpos >= gl->insert_curpos ? bufpos : gl->insert_curpos; } /*....................................................................... * Copy one or more words into the cut buffer without moving the cursor * or deleting text. */ static KT_KEY_FN(gl_forward_copy_word) { /* * Find the location of the count'th start or end of a word * after the cursor, depending on whether in emacs or vi mode. */ int next = gl->editor == GL_EMACS_MODE ? gl_nth_word_end_forward(gl, count) : gl_nth_word_start_forward(gl, count); /* * How many characters are to be copied into the cut buffer? */ int n = next - gl->buff_curpos; /* * Copy the specified segment and terminate the string. */ memcpy(gl->cutbuf, gl->line + gl->buff_curpos, n); gl->cutbuf[n] = '\0'; return 0; } /*....................................................................... * Copy one or more words preceding the cursor into the cut buffer, * without moving the cursor or deleting text. */ static KT_KEY_FN(gl_backward_copy_word) { /* * Find the location of the count'th start of word before the cursor. */ int next = gl_nth_word_start_backward(gl, count); /* * How many characters are to be copied into the cut buffer? */ int n = gl->buff_curpos - next; gl_place_cursor(gl, next); /* * Copy the specified segment and terminate the string. */ memcpy(gl->cutbuf, gl->line + next, n); gl->cutbuf[n] = '\0'; return 0; } /*....................................................................... * Copy the characters between the cursor and the count'th instance of * a specified character in the input line, into the cut buffer. * * Input: * gl GetLine * The getline resource object. * count int The number of times to search. * c char The character to be searched for, or '\0' if * the character should be read from the user. * forward int True if searching forward. * onto int True if the search should end on top of the * character, false if the search should stop * one character before the character in the * specified search direction. * Output: * return int 0 - OK. * 1 - Error. * */ static int gl_copy_find(GetLine *gl, int count, char c, int forward, int onto) { int n; /* The number of characters in the cut buffer */ /* * Search for the character, and abort the operation if not found. */ int pos = gl_find_char(gl, count, forward, onto, c); if(pos < 0) return 0; /* * Copy the specified segment. */ if(forward) { n = pos + 1 - gl->buff_curpos; memcpy(gl->cutbuf, gl->line + gl->buff_curpos, n); } else { n = gl->buff_curpos - pos; memcpy(gl->cutbuf, gl->line + pos, n); if(gl->editor == GL_VI_MODE) gl_place_cursor(gl, pos); } /* * Terminate the copy. */ gl->cutbuf[n] = '\0'; return 0; } /*....................................................................... * Copy a section up to and including a specified character into the cut * buffer without moving the cursor or deleting text. */ static KT_KEY_FN(gl_forward_copy_find) { return gl_copy_find(gl, count, '\0', 1, 1); } /*....................................................................... * Copy a section back to and including a specified character into the cut * buffer without moving the cursor or deleting text. */ static KT_KEY_FN(gl_backward_copy_find) { return gl_copy_find(gl, count, '\0', 0, 1); } /*....................................................................... * Copy a section up to and not including a specified character into the cut * buffer without moving the cursor or deleting text. */ static KT_KEY_FN(gl_forward_copy_to) { return gl_copy_find(gl, count, '\0', 1, 0); } /*....................................................................... * Copy a section back to and not including a specified character into the cut * buffer without moving the cursor or deleting text. */ static KT_KEY_FN(gl_backward_copy_to) { return gl_copy_find(gl, count, '\0', 0, 0); } /*....................................................................... * Copy to a character specified in a previous search into the cut * buffer without moving the cursor or deleting text. */ static KT_KEY_FN(gl_copy_refind) { return gl_copy_find(gl, count, gl->vi.find_char, gl->vi.find_forward, gl->vi.find_onto); } /*....................................................................... * Copy to a character specified in a previous search, but in the opposite * direction, into the cut buffer without moving the cursor or deleting text. */ static KT_KEY_FN(gl_copy_invert_refind) { return gl_copy_find(gl, count, gl->vi.find_char, !gl->vi.find_forward, gl->vi.find_onto); } /*....................................................................... * Set the position of the cursor in the line input buffer and the * terminal. * * Input: * gl GetLine * The getline resource object. * buff_curpos int The new buffer cursor position. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_place_cursor(GetLine *gl, int buff_curpos) { /* * Don't allow the cursor position to go out of the bounds of the input * line. */ if(buff_curpos >= gl->ntotal) buff_curpos = gl->vi.command ? gl->ntotal-1 : gl->ntotal; if(buff_curpos < 0) buff_curpos = 0; /* * Record the new buffer position. */ gl->buff_curpos = buff_curpos; /* * Move the terminal cursor to the corresponding character. */ return gl_set_term_curpos(gl, gl->prompt_len + gl_displayed_string_width(gl, gl->line, buff_curpos, gl->prompt_len)); } /*....................................................................... * In vi command mode, this function saves the current line to the * historical buffer needed by the undo command. In emacs mode it does * nothing. In order to allow action functions to call other action * functions, gl_interpret_char() sets gl->vi.undo.saved to 0 before * invoking an action, and thereafter once any call to this function * has set it to 1, further calls are ignored. * * Input: * gl GetLine * The getline resource object. */ static void gl_save_for_undo(GetLine *gl) { if(gl->vi.command && !gl->vi.undo.saved) { strcpy(gl->vi.undo.line, gl->line); gl->vi.undo.buff_curpos = gl->buff_curpos; gl->vi.undo.ntotal = gl->ntotal; gl->vi.undo.saved = 1; }; if(gl->vi.command && !gl->vi.repeat.saved && gl->current_action.fn != gl_vi_repeat_change) { gl->vi.repeat.action = gl->current_action; gl->vi.repeat.count = gl->current_count; gl->vi.repeat.saved = 1; }; return; } /*....................................................................... * In vi mode, restore the line to the way it was before the last command * mode operation, storing the current line in the buffer so that the * undo operation itself can subsequently be undone. */ static KT_KEY_FN(gl_vi_undo) { /* * Get pointers into the two lines. */ char *undo_ptr = gl->vi.undo.line; char *line_ptr = gl->line; /* * Swap the characters of the two buffers up to the length of the shortest * line. */ while(*undo_ptr && *line_ptr) { char c = *undo_ptr; *undo_ptr++ = *line_ptr; *line_ptr++ = c; }; /* * Copy the rest directly. */ if(gl->ntotal > gl->vi.undo.ntotal) { strcpy(undo_ptr, line_ptr); *line_ptr = '\0'; } else { strcpy(line_ptr, undo_ptr); *undo_ptr = '\0'; }; /* * Record the length of the stored string. */ gl->vi.undo.ntotal = gl->ntotal; /* * Accomodate the new contents of gl->line[]. */ gl_update_buffer(gl); /* * Set both cursor positions to the leftmost of the saved and current * cursor positions to emulate what vi does. */ if(gl->buff_curpos < gl->vi.undo.buff_curpos) gl->vi.undo.buff_curpos = gl->buff_curpos; else gl->buff_curpos = gl->vi.undo.buff_curpos; /* * Since we have bipassed calling gl_save_for_undo(), record repeat * information inline. */ gl->vi.repeat.action.fn = gl_vi_undo; gl->vi.repeat.action.data = NULL; gl->vi.repeat.count = 1; /* * Display the restored line. */ gl_queue_redisplay(gl); return 0; } /*....................................................................... * Delete the following word and leave the user in vi insert mode. */ static KT_KEY_FN(gl_vi_forward_change_word) { gl_save_for_undo(gl); gl->vi.command = 0; /* Allow cursor at EOL */ return gl_forward_delete_word(gl, count, NULL) || gl_vi_insert(gl, 0, NULL); } /*....................................................................... * Delete the preceding word and leave the user in vi insert mode. */ static KT_KEY_FN(gl_vi_backward_change_word) { return gl_backward_delete_word(gl, count, NULL) || gl_vi_insert(gl, 0, NULL); } /*....................................................................... * Delete the following section and leave the user in vi insert mode. */ static KT_KEY_FN(gl_vi_forward_change_find) { return gl_delete_find(gl, count, '\0', 1, 1, 1); } /*....................................................................... * Delete the preceding section and leave the user in vi insert mode. */ static KT_KEY_FN(gl_vi_backward_change_find) { return gl_delete_find(gl, count, '\0', 0, 1, 1); } /*....................................................................... * Delete the following section and leave the user in vi insert mode. */ static KT_KEY_FN(gl_vi_forward_change_to) { return gl_delete_find(gl, count, '\0', 1, 0, 1); } /*....................................................................... * Delete the preceding section and leave the user in vi insert mode. */ static KT_KEY_FN(gl_vi_backward_change_to) { return gl_delete_find(gl, count, '\0', 0, 0, 1); } /*....................................................................... * Delete to a character specified by a previous search and leave the user * in vi insert mode. */ static KT_KEY_FN(gl_vi_change_refind) { return gl_delete_find(gl, count, gl->vi.find_char, gl->vi.find_forward, gl->vi.find_onto, 1); } /*....................................................................... * Delete to a character specified by a previous search, but in the opposite * direction, and leave the user in vi insert mode. */ static KT_KEY_FN(gl_vi_change_invert_refind) { return gl_delete_find(gl, count, gl->vi.find_char, !gl->vi.find_forward, gl->vi.find_onto, 1); } /*....................................................................... * Delete the following character and leave the user in vi insert mode. */ static KT_KEY_FN(gl_vi_forward_change_char) { gl_save_for_undo(gl); gl->vi.command = 0; /* Allow cursor at EOL */ return gl_delete_chars(gl, count, 1) || gl_vi_insert(gl, 0, NULL); } /*....................................................................... * Delete the preceding character and leave the user in vi insert mode. */ static KT_KEY_FN(gl_vi_backward_change_char) { return gl_backward_delete_char(gl, count, NULL) || gl_vi_insert(gl, 0, NULL); } /*....................................................................... * Starting from the cursor position change characters to the specified column. */ static KT_KEY_FN(gl_vi_change_to_column) { if (--count >= gl->buff_curpos) return gl_vi_forward_change_char(gl, count - gl->buff_curpos, NULL); else return gl_vi_backward_change_char(gl, gl->buff_curpos - count, NULL); } /*....................................................................... * Starting from the cursor position change characters to a matching * parenthesis. */ static KT_KEY_FN(gl_vi_change_to_parenthesis) { int curpos = gl_index_of_matching_paren(gl); if(curpos >= 0) { gl_save_for_undo(gl); if(curpos >= gl->buff_curpos) return gl_vi_forward_change_char(gl, curpos - gl->buff_curpos + 1, NULL); else return gl_vi_backward_change_char(gl, ++gl->buff_curpos - curpos + 1, NULL); }; return 0; } /*....................................................................... * If in vi mode, switch to vi command mode. * * Input: * gl GetLine * The getline resource object. */ static void gl_vi_command_mode(GetLine *gl) { if(gl->editor == GL_VI_MODE && !gl->vi.command) { gl->insert = 1; gl->vi.command = 1; gl->vi.repeat.input_curpos = gl->insert_curpos; gl->vi.repeat.command_curpos = gl->buff_curpos; gl->insert_curpos = 0; /* unrestrict left motion boundary */ gl_cursor_left(gl, 1, NULL); /* Vi moves 1 left on entering command mode */ }; } /*....................................................................... * This is an action function which rings the terminal bell. */ static KT_KEY_FN(gl_ring_bell) { return gl->silence_bell ? 0 : gl_print_control_sequence(gl, 1, gl->sound_bell); } /*....................................................................... * This is the action function which implements the vi-repeat-change * action. */ static KT_KEY_FN(gl_vi_repeat_change) { int status; /* The return status of the repeated action function */ int i; /* * Nothing to repeat? */ if(!gl->vi.repeat.action.fn) return gl_ring_bell(gl, 1, NULL); /* * Provide a way for action functions to know whether they are being * called by us. */ gl->vi.repeat.active = 1; /* * Re-run the recorded function. */ status = gl->vi.repeat.action.fn(gl, gl->vi.repeat.count, gl->vi.repeat.action.data); /* * Mark the repeat as completed. */ gl->vi.repeat.active = 0; /* * Is we are repeating a function that has just switched to input * mode to allow the user to type, re-enter the text that the user * previously entered. */ if(status==0 && !gl->vi.command) { /* * Make sure that the current line has been saved. */ gl_save_for_undo(gl); /* * Repeat a previous insertion or overwrite? */ if(gl->vi.repeat.input_curpos >= 0 && gl->vi.repeat.input_curpos <= gl->vi.repeat.command_curpos && gl->vi.repeat.command_curpos <= gl->vi.undo.ntotal) { /* * Using the current line which is saved in the undo buffer, plus * the range of characters therein, as recorded by gl_vi_command_mode(), * add the characters that the user previously entered, to the input * line. */ for(i=gl->vi.repeat.input_curpos; ivi.repeat.command_curpos; i++) { if(gl_add_char_to_line(gl, gl->vi.undo.line[i])) return 1; }; }; /* * Switch back to command mode, now that the insertion has been repeated. */ gl_vi_command_mode(gl); }; return status; } /*....................................................................... * If the cursor is currently over a parenthesis character, return the * index of its matching parenthesis. If not currently over a parenthesis * character, return the next close parenthesis character to the right of * the cursor. If the respective parenthesis character isn't found, * ring the terminal bell and return -1. * * Input: * gl GetLine * The getline resource object. * Output: * return int Either the index of the matching parenthesis, * or -1 if not found. */ static int gl_index_of_matching_paren(GetLine *gl) { int i; /* * List the recognized parentheses, and their matches. */ const char *o_paren = "([{"; const char *c_paren = ")]}"; const char *cptr; /* * Get the character that is currently under the cursor. */ char c = gl->line[gl->buff_curpos]; /* * If the character under the cursor is an open parenthesis, look forward * for the matching close parenthesis. */ if((cptr=strchr(o_paren, c))) { char match = c_paren[cptr - o_paren]; int matches_needed = 1; for(i=gl->buff_curpos+1; intotal; i++) { if(gl->line[i] == c) matches_needed++; else if(gl->line[i] == match && --matches_needed==0) return i; }; /* * If the character under the cursor is an close parenthesis, look forward * for the matching open parenthesis. */ } else if((cptr=strchr(c_paren, c))) { char match = o_paren[cptr - c_paren]; int matches_needed = 1; for(i=gl->buff_curpos-1; i>=0; i--) { if(gl->line[i] == c) matches_needed++; else if(gl->line[i] == match && --matches_needed==0) return i; }; /* * If not currently over a parenthesis character, search forwards for * the first close parenthesis (this is what the vi % binding does). */ } else { for(i=gl->buff_curpos+1; intotal; i++) if(strchr(c_paren, gl->line[i]) != NULL) return i; }; /* * Not found. */ (void) gl_ring_bell(gl, 1, NULL); return -1; } /*....................................................................... * If the cursor is currently over a parenthesis character, this action * function moves the cursor to its matching parenthesis. */ static KT_KEY_FN(gl_find_parenthesis) { int curpos = gl_index_of_matching_paren(gl); if(curpos >= 0) return gl_place_cursor(gl, curpos); return 0; } /*....................................................................... * Handle the receipt of the potential start of a new key-sequence from * the user. * * Input: * gl GetLine * The resource object of this library. * first_char char The first character of the sequence. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_interpret_char(GetLine *gl, char first_char) { char keyseq[GL_KEY_MAX+1]; /* A special key sequence being read */ int nkey=0; /* The number of characters in the key sequence */ int count; /* The repeat count of an action function */ int ret; /* The return value of an action function */ int i; /* * Get the first character. */ char c = first_char; /* * If editing is disabled, just add newly entered characters to the * input line buffer, and watch for the end of the line. */ if(gl->editor == GL_NO_EDITOR) { gl_discard_chars(gl, 1); if(gl->ntotal >= gl->linelen) return 0; if(c == '\n' || c == '\r') return gl_newline(gl, 1, NULL); gl_buffer_char(gl, c, gl->ntotal); return 0; }; /* * If the user is in the process of specifying a repeat count and the * new character is a digit, increment the repeat count accordingly. */ if(gl->number >= 0 && isdigit((int)(unsigned char) c)) { gl_discard_chars(gl, 1); return gl_digit_argument(gl, c, NULL); /* * In vi command mode, all key-sequences entered need to be * either implicitly or explicitly prefixed with an escape character. */ } else if(gl->vi.command && c != GL_ESC_CHAR) { keyseq[nkey++] = GL_ESC_CHAR; /* * If the first character of the sequence is a printable character, * then to avoid confusion with the special "up", "down", "left" * or "right" cursor key bindings, we need to prefix the * printable character with a backslash escape before looking it up. */ } else if(!IS_META_CHAR(c) && !IS_CTRL_CHAR(c)) { keyseq[nkey++] = '\\'; }; /* * Compose a potentially multiple key-sequence in gl->keyseq. */ while(nkey < GL_KEY_MAX) { KtAction *action; /* An action function */ KeySym *keysym; /* The symbol-table entry of a key-sequence */ int nsym; /* The number of ambiguously matching key-sequences */ /* * If the character is an unprintable meta character, split it * into two characters, an escape character and the character * that was modified by the meta key. */ if(IS_META_CHAR(c)) { keyseq[nkey++] = GL_ESC_CHAR; c = META_TO_CHAR(c); continue; }; /* * Append the latest character to the key sequence. */ keyseq[nkey++] = c; /* * When doing vi-style editing, an escape at the beginning of any binding * switches to command mode. */ if(keyseq[0] == GL_ESC_CHAR && !gl->vi.command) gl_vi_command_mode(gl); /* * Lookup the key sequence. */ switch(_kt_lookup_keybinding(gl->bindings, keyseq, nkey, &keysym, &nsym)) { case KT_EXACT_MATCH: /* * Get the matching action function. */ action = keysym->actions + keysym->binder; /* * Get the repeat count, passing the last keystroke if executing the * digit-argument action. */ if(action->fn == gl_digit_argument) { count = c; } else { count = gl->number >= 0 ? gl->number : 1; }; /* * Record the function that is being invoked. */ gl->current_action = *action; gl->current_count = count; /* * Mark the current line as not yet preserved for use by the vi undo command. */ gl->vi.undo.saved = 0; gl->vi.repeat.saved = 0; /* * Execute the action function. Note the action function can tell * whether the provided repeat count was defaulted or specified * explicitly by looking at whether gl->number is -1 or not. If * it is negative, then no repeat count was specified by the user. */ ret = action->fn(gl, count, action->data); /* * In server mode, the action will return immediately if it tries to * read input from the terminal, and no input is currently available. * If this happens, abort. Note that gl_get_input_line() will rewind * the read-ahead buffer to allow the next call to redo the function * from scratch. */ if(gl->rtn_status == GLR_BLOCKED && gl->pending_io==GLP_READ) return 1; /* * Discard the now processed characters from the key sequence buffer. */ gl_discard_chars(gl, gl->nread); /* * If the latest action function wasn't a history action, cancel any * current history search. */ if(gl->last_search != gl->keyseq_count) _glh_cancel_search(gl->glh); /* * Reset the repeat count after running action functions. */ if(action->fn != gl_digit_argument) gl->number = -1; return ret ? 1 : 0; break; case KT_AMBIG_MATCH: /* Ambiguous match - so read the next character */ if(gl_read_terminal(gl, 1, &c)) return 1; break; case KT_NO_MATCH: /* * If the first character looked like it might be a prefix of a key-sequence * but it turned out not to be, ring the bell to tell the user that it * wasn't recognised. */ if(keyseq[0] != '\\' && keyseq[0] != '\t') { gl_ring_bell(gl, 1, NULL); } else { /* * The user typed a single printable character that doesn't match * the start of any keysequence, so add it to the line in accordance * with the current repeat count. */ count = gl->number >= 0 ? gl->number : 1; for(i=0; inumber = -1; }; gl_discard_chars(gl, 1); _glh_cancel_search(gl->glh); return 0; break; case KT_BAD_MATCH: gl_ring_bell(gl, 1, NULL); gl_discard_chars(gl, gl->nread); _glh_cancel_search(gl->glh); return 1; break; }; }; /* * If the key sequence was too long to match, ring the bell, then * discard the first character, so that the next attempt to match a * key-sequence continues with the next key press. In practice this * shouldn't happen, since one isn't allowed to bind action functions * to keysequences that are longer than GL_KEY_MAX. */ gl_ring_bell(gl, 1, NULL); gl_discard_chars(gl, 1); return 0; } /*....................................................................... * Configure the application and/or user-specific behavior of * gl_get_line(). * * Note that calling this function between calling new_GetLine() and * the first call to gl_get_line(), disables the otherwise automatic * reading of ~/.teclarc on the first call to gl_get_line(). * * Input: * gl GetLine * The resource object of this library. * app_string const char * Either NULL, or a string containing one * or more .teclarc command lines, separated * by newline characters. This can be used to * establish an application-specific * configuration, without the need for an external * file. This is particularly useful in embedded * environments where there is no filesystem. * app_file const char * Either NULL, or the pathname of an * application-specific .teclarc file. The * contents of this file, if provided, are * read after the contents of app_string[]. * user_file const char * Either NULL, or the pathname of a * user-specific .teclarc file. Except in * embedded applications, this should * usually be "~/.teclarc". * Output: * return int 0 - OK. * 1 - Bad argument(s). */ int gl_configure_getline(GetLine *gl, const char *app_string, const char *app_file, const char *user_file) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_configure_getline() */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Execute the private body of the function while signals are blocked. */ status = _gl_configure_getline(gl, app_string, app_file, user_file); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the gl_configure_getline() function. It * assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_configure_getline(GetLine *gl, const char *app_string, const char *app_file, const char *user_file) { /* * Mark getline as having been explicitly configured. */ gl->configured = 1; /* * Start by parsing the configuration string, if provided. */ if(app_string) (void) _gl_read_config_string(gl, app_string, KTB_NORM); /* * Now parse the application-specific configuration file, if provided. */ if(app_file) (void) _gl_read_config_file(gl, app_file, KTB_NORM); /* * Finally, parse the user-specific configuration file, if provided. */ if(user_file) (void) _gl_read_config_file(gl, user_file, KTB_USER); /* * Record the names of the configuration files to allow them to * be re-read if requested at a later time. */ if(gl_record_string(&gl->app_file, app_file) || gl_record_string(&gl->user_file, user_file)) { errno = ENOMEM; _err_record_msg(gl->err, "Insufficient memory to record tecla configuration file names", END_ERR_MSG); return 1; }; return 0; } /*....................................................................... * Replace a malloc'd string (or NULL), with another malloc'd copy of * a string (or NULL). * * Input: * sptr char ** On input if *sptr!=NULL, *sptr will be * free'd and *sptr will be set to NULL. Then, * on output, if string!=NULL a malloc'd copy * of this string will be assigned to *sptr. * string const char * The string to be copied, or NULL to simply * discard any existing string. * Output: * return int 0 - OK. * 1 - Malloc failure (no error message is generated). */ static int gl_record_string(char **sptr, const char *string) { /* * If the original string is the same string, don't do anything. */ if(*sptr == string || (*sptr && string && strcmp(*sptr, string)==0)) return 0; /* * Discard any existing cached string. */ if(*sptr) { free(*sptr); *sptr = NULL; }; /* * Allocate memory for a copy of the specified string. */ if(string) { *sptr = (char *) malloc(strlen(string) + 1); if(!*sptr) return 1; /* * Copy the string. */ strcpy(*sptr, string); }; return 0; } #ifndef HIDE_FILE_SYSTEM /*....................................................................... * Re-read any application-specific and user-specific files previously * specified via the gl_configure_getline() function. */ static KT_KEY_FN(gl_read_init_files) { return _gl_configure_getline(gl, NULL, gl->app_file, gl->user_file); } #endif /*....................................................................... * Save the contents of the history buffer to a given new file. * * Input: * gl GetLine * The resource object of this library. * filename const char * The name of the new file to write to. * comment const char * Extra information such as timestamps will * be recorded on a line started with this * string, the idea being that the file can * double as a command file. Specify "" if * you don't care. * max_lines int The maximum number of lines to save, or -1 * to save all of the lines in the history * list. * Output: * return int 0 - OK. * 1 - Error. */ int gl_save_history(GetLine *gl, const char *filename, const char *comment, int max_lines) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_save_history() */ /* * Check the arguments. */ if(!gl || !filename || !comment) { if(gl) _err_record_msg(gl->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Execute the private body of the function while signals are blocked. */ status = _gl_save_history(gl, filename, comment, max_lines); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the gl_save_history() function. It * assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_save_history(GetLine *gl, const char *filename, const char *comment, int max_lines) { /* * If filesystem access is to be excluded, then history files can't * be written. */ #ifdef WITHOUT_FILE_SYSTEM _err_record_msg(gl->err, "Can't save history without filesystem access", END_ERR_MSG); errno = EINVAL; return 1; #else FileExpansion *expansion; /* The expansion of the filename */ /* * Expand the filename. */ expansion = ef_expand_file(gl->ef, filename, -1); if(!expansion) { gl_print_info(gl, "Unable to expand ", filename, " (", ef_last_error(gl->ef), ").", GL_END_INFO); return 1; }; /* * Attempt to save to the specified file. */ if(_glh_save_history(gl->glh, expansion->files[0], comment, max_lines)) { _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); return 1; }; return 0; #endif } /*....................................................................... * Restore the contents of the history buffer from a given new file. * * Input: * gl GetLine * The resource object of this library. * filename const char * The name of the new file to write to. * comment const char * This must be the same string that was * passed to gl_save_history() when the file * was written. * Output: * return int 0 - OK. * 1 - Error. */ int gl_load_history(GetLine *gl, const char *filename, const char *comment) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_load_history() */ /* * Check the arguments. */ if(!gl || !filename || !comment) { if(gl) _err_record_msg(gl->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Execute the private body of the function while signals are blocked. */ status = _gl_load_history(gl, filename, comment); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the gl_load_history() function. It * assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_load_history(GetLine *gl, const char *filename, const char *comment) { /* * If filesystem access is to be excluded, then history files can't * be read. */ #ifdef WITHOUT_FILE_SYSTEM _err_record_msg(gl->err, "Can't load history without filesystem access", END_ERR_MSG); errno = EINVAL; return 1; #else FileExpansion *expansion; /* The expansion of the filename */ /* * Expand the filename. */ expansion = ef_expand_file(gl->ef, filename, -1); if(!expansion) { gl_print_info(gl, "Unable to expand ", filename, " (", ef_last_error(gl->ef), ").", GL_END_INFO); return 1; }; /* * Attempt to load from the specified file. */ if(_glh_load_history(gl->glh, expansion->files[0], comment, gl->cutbuf, gl->linelen+1)) { _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); gl->cutbuf[0] = '\0'; return 1; }; gl->cutbuf[0] = '\0'; return 0; #endif } /*....................................................................... * Where possible, register a function and associated data to be called * whenever a specified event is seen on a file descriptor. * * Input: * gl GetLine * The resource object of the command-line input * module. * fd int The file descriptor to watch. * event GlFdEvent The type of activity to watch for. * callback GlFdEventFn * The function to call when the specified * event occurs. Setting this to 0 removes * any existing callback. * data void * A pointer to arbitrary data to pass to the * callback function. * Output: * return int 0 - OK. * 1 - Either gl==NULL, or this facility isn't * available on the the host system * (ie. select() isn't available). No * error message is generated in the latter * case. */ int gl_watch_fd(GetLine *gl, int fd, GlFdEvent event, GlFdEventFn *callback, void *data) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_watch_fd() */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; if(fd < 0) { _err_record_msg(gl->err, "Error: fd < 0", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Execute the private body of the function while signals are blocked. */ status = _gl_watch_fd(gl, fd, event, callback, data); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the gl_watch_fd() function. It * assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_watch_fd(__attribute__ ((unused)) GetLine *gl, __attribute__ ((unused)) int fd, __attribute__ ((unused)) GlFdEvent event, __attribute__ ((unused)) GlFdEventFn *callback, __attribute__ ((unused)) void *data) #if !defined(HAVE_SELECT) {return 1;} /* The facility isn't supported on this system */ #else { GlFdNode *prev; /* The node that precedes 'node' in gl->fd_nodes */ GlFdNode *node; /* The file-descriptor node being checked */ /* * Search the list of already registered fd activity nodes for the specified * file descriptor. */ for(prev=NULL,node=gl->fd_nodes; node && node->fd != fd; prev=node, node=node->next) ; /* * Hasn't a node been allocated for this fd yet? */ if(!node) { /* * If there is no callback to record, just ignore the call. */ if(!callback) return 0; /* * Allocate the new node. */ node = (GlFdNode *) _new_FreeListNode(gl->fd_node_mem); if(!node) { errno = ENOMEM; _err_record_msg(gl->err, "Insufficient memory", END_ERR_MSG); return 1; }; /* * Prepend the node to the list. */ node->next = gl->fd_nodes; gl->fd_nodes = node; /* * Initialize the node. */ node->fd = fd; node->rd.fn = 0; node->rd.data = NULL; node->ur = node->wr = node->rd; }; /* * Record the new callback. */ switch(event) { case GLFD_READ: node->rd.fn = callback; node->rd.data = data; if(callback) FD_SET(fd, &gl->rfds); else FD_CLR(fd, &gl->rfds); break; case GLFD_WRITE: node->wr.fn = callback; node->wr.data = data; if(callback) FD_SET(fd, &gl->wfds); else FD_CLR(fd, &gl->wfds); break; case GLFD_URGENT: node->ur.fn = callback; node->ur.data = data; if(callback) FD_SET(fd, &gl->ufds); else FD_CLR(fd, &gl->ufds); break; }; /* * Keep a record of the largest file descriptor being watched. */ if(fd > gl->max_fd) gl->max_fd = fd; /* * If we are deleting an existing callback, also delete the parent * activity node if no callbacks are registered to the fd anymore. */ if(!callback) { if(!node->rd.fn && !node->wr.fn && !node->ur.fn) { if(prev) prev->next = node->next; else gl->fd_nodes = node->next; node = (GlFdNode *) _del_FreeListNode(gl->fd_node_mem, node); }; }; return 0; } #endif /*....................................................................... * On systems with the select() system call, the gl_inactivity_timeout() * function provides the option of setting (or cancelling) an * inactivity timeout. Inactivity, in this case, refers both to * terminal input received from the user, and to I/O on any file * descriptors registered by calls to gl_watch_fd(). If at any time, * no activity is seen for the requested time period, the specified * timeout callback function is called. On returning, this callback * returns a code which tells gl_get_line() what to do next. Note that * each call to gl_inactivity_timeout() replaces any previously installed * timeout callback, and that specifying a callback of 0, turns off * inactivity timing. * * Beware that although the timeout argument includes a nano-second * component, few computer clocks presently have resolutions finer * than a few milliseconds, so asking for less than a few milliseconds * is equivalent to zero on a lot of systems. * * Input: * gl GetLine * The resource object of the command-line input * module. * callback GlTimeoutFn * The function to call when the inactivity * timeout is exceeded. To turn off * inactivity timeouts altogether, send 0. * data void * A pointer to arbitrary data to pass to the * callback function. * sec unsigned long The number of whole seconds in the timeout. * nsec unsigned long The fractional number of seconds in the * timeout, expressed in nano-seconds (see * the caveat above). * Output: * return int 0 - OK. * 1 - Either gl==NULL, or this facility isn't * available on the the host system * (ie. select() isn't available). No * error message is generated in the latter * case. */ int gl_inactivity_timeout(__attribute__ ((unused)) GetLine *gl, __attribute__ ((unused)) GlTimeoutFn *timeout_fn, __attribute__ ((unused)) void *data, __attribute__ ((unused)) unsigned long sec, __attribute__ ((unused)) unsigned long nsec) #if !defined(HAVE_SELECT) {return 1;} /* The facility isn't supported on this system */ #else { sigset_t oldset; /* The signals that were blocked on entry to this function */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Install a new timeout? */ if(timeout_fn) { gl->timer.dt.tv_sec = sec; gl->timer.dt.tv_usec = nsec / 1000; gl->timer.fn = timeout_fn; gl->timer.data = data; } else { gl->timer.fn = 0; gl->timer.data = NULL; }; /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return 0; } #endif /*....................................................................... * When select() is available, this is a private function of * gl_read_input() which responds to file-descriptor events registered by * the caller. Note that it assumes that it is being called from within * gl_read_input()'s sigsetjump() clause. * * Input: * gl GetLine * The resource object of this module. * fd int The file descriptor to be watched for user input. * Output: * return int 0 - OK. * 1 - An error occurred. */ static int gl_event_handler(__attribute__ ((unused)) GetLine *gl, __attribute__ ((unused)) int fd) #if !defined(HAVE_SELECT) {return 0;} #else { /* * Set up a zero-second timeout. */ struct timeval zero; zero.tv_sec = zero.tv_usec = 0; /* * If at any time no external callbacks remain, quit the loop return, * so that we can simply wait in read(). This is designed as an * optimization for when no callbacks have been registered on entry to * this function, but since callbacks can delete themselves, it can * also help later. */ while(gl->fd_nodes || gl->timer.fn) { int nready; /* The number of file descriptors that are ready for I/O */ /* * Get the set of descriptors to be watched. */ fd_set rfds = gl->rfds; fd_set wfds = gl->wfds; fd_set ufds = gl->ufds; /* * Get the appropriate timeout. */ struct timeval dt = gl->timer.fn ? gl->timer.dt : zero; /* * Add the specified user-input file descriptor tot he set that is to * be watched. */ FD_SET(fd, &rfds); /* * Unblock the signals that we are watching, while select is blocked * waiting for I/O. */ gl_catch_signals(gl); /* * Wait for activity on any of the file descriptors. */ nready = select(gl->max_fd+1, &rfds, &wfds, &ufds, (gl->timer.fn || gl->io_mode==GL_SERVER_MODE) ? &dt : NULL); /* * We don't want to do a longjmp in the middle of a callback that * might be modifying global or heap data, so block all the signals * that we are trapping before executing callback functions. Note that * the caller will unblock them again when it needs to, so there is * no need to undo this before returning. */ gl_mask_signals(gl, NULL); /* * If select() returns but none of the file descriptors are reported * to have activity, then select() timed out. */ if(nready == 0) { /* * Note that in non-blocking server mode, the inactivity timer is used * to allow I/O to block for a specified amount of time, so in this * mode we return the postponed blocked status when an abort is * requested. */ if(gl_call_timeout_handler(gl)) { return 1; } else if(gl->io_mode == GL_SERVER_MODE) { gl_record_status(gl, GLR_BLOCKED, BLOCKED_ERRNO); return 1; }; /* * If nready < 0, this means an error occurred. */ } else if(nready < 0) { if(errno != EINTR) { gl_record_status(gl, GLR_ERROR, errno); return 1; }; /* * If the user-input file descriptor has data available, return. */ } else if(FD_ISSET(fd, &rfds)) { return 0; /* * Check for activity on any of the file descriptors registered by the * calling application, and call the associated callback functions. */ } else { GlFdNode *node; /* The fd event node being checked */ /* * Search the list for the file descriptor that caused select() to return. */ for(node=gl->fd_nodes; node; node=node->next) { /* * Is there urgent out of band data waiting to be read on fd? */ if(node->ur.fn && FD_ISSET(node->fd, &ufds)) { if(gl_call_fd_handler(gl, &node->ur, node->fd, GLFD_URGENT)) return 1; break; /* The callback may have changed the list of nodes */ /* * Is the fd readable? */ } else if(node->rd.fn && FD_ISSET(node->fd, &rfds)) { if(gl_call_fd_handler(gl, &node->rd, node->fd, GLFD_READ)) return 1; break; /* The callback may have changed the list of nodes */ /* * Is the fd writable? */ } else if(node->wr.fn && FD_ISSET(node->fd, &wfds)) { if(gl_call_fd_handler(gl, &node->wr, node->fd, GLFD_WRITE)) return 1; break; /* The callback may have changed the list of nodes */ }; }; }; /* * Just in case the above event handlers asked for the input line to * be redrawn, flush any pending output. */ if(gl_flush_output(gl)) return 1; }; return 0; } #endif #if defined(HAVE_SELECT) /*....................................................................... * This is a private function of gl_event_handler(), used to call a * file-descriptor callback. * * Input: * gl GetLine * The resource object of gl_get_line(). * gfh GlFdHandler * The I/O handler. * fd int The file-descriptor being reported. * event GlFdEvent The I/O event being reported. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_call_fd_handler(GetLine *gl, GlFdHandler *gfh, int fd, GlFdEvent event) { Termios attr; /* The terminal attributes */ int waserr = 0; /* True after any error */ /* * Re-enable conversion of newline characters to carriage-return/linefeed, * so that the callback can write to the terminal without having to do * anything special. */ if(tcgetattr(gl->input_fd, &attr)) { _err_record_msg(gl->err, "tcgetattr error", END_ERR_MSG); return 1; }; attr.c_oflag |= OPOST; while(tcsetattr(gl->input_fd, TCSADRAIN, &attr)) { if(errno != EINTR) { _err_record_msg(gl->err, "tcsetattr error", END_ERR_MSG); return 1; }; }; /* * Invoke the application's callback function. */ switch(gfh->fn(gl, gfh->data, fd, event)) { default: case GLFD_ABORT: gl_record_status(gl, GLR_FDABORT, 0); waserr = 1; break; case GLFD_REFRESH: gl_queue_redisplay(gl); break; case GLFD_CONTINUE: break; }; /* * If the callback function called gl_normal_io(), restore raw mode, * and queue a redisplay of the input line. */ if(!gl->raw_mode) waserr = waserr || _gl_raw_io(gl, 1); /* * Disable conversion of newline characters to carriage-return/linefeed. */ attr.c_oflag &= ~(OPOST); while(tcsetattr(gl->input_fd, TCSADRAIN, &attr)) { if(errno != EINTR) { _err_record_msg(gl->err, "tcsetattr error", END_ERR_MSG); return 1; }; }; return waserr; } /*....................................................................... * This is a private function of gl_event_handler(), used to call a * inactivity timer callbacks. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int 0 - OK. * 1 - Error. */ static int gl_call_timeout_handler(GetLine *gl) { Termios attr; /* The terminal attributes */ int waserr = 0; /* True after any error */ /* * Make sure that there is an inactivity timeout callback. */ if(!gl->timer.fn) return 0; /* * Re-enable conversion of newline characters to carriage-return/linefeed, * so that the callback can write to the terminal without having to do * anything special. */ if(tcgetattr(gl->input_fd, &attr)) { _err_record_msg(gl->err, "tcgetattr error", END_ERR_MSG); return 1; }; attr.c_oflag |= OPOST; while(tcsetattr(gl->input_fd, TCSADRAIN, &attr)) { if(errno != EINTR) { _err_record_msg(gl->err, "tcsetattr error", END_ERR_MSG); return 1; }; }; /* * Invoke the application's callback function. */ switch(gl->timer.fn(gl, gl->timer.data)) { default: case GLTO_ABORT: gl_record_status(gl, GLR_TIMEOUT, 0); waserr = 1; break; case GLTO_REFRESH: gl_queue_redisplay(gl); break; case GLTO_CONTINUE: break; }; /* * If the callback function called gl_normal_io(), restore raw mode, * and queue a redisplay of the input line. */ if(!gl->raw_mode) waserr = waserr || _gl_raw_io(gl, 1); /* * Disable conversion of newline characters to carriage-return/linefeed. */ attr.c_oflag &= ~(OPOST); while(tcsetattr(gl->input_fd, TCSADRAIN, &attr)) { if(errno != EINTR) { _err_record_msg(gl->err, "tcsetattr error", END_ERR_MSG); return 1; }; }; return waserr; } #endif /* HAVE_SELECT */ /*....................................................................... * Switch history groups. History groups represent separate history * lists recorded within a single history buffer. Different groups * are distinguished by integer identifiers chosen by the calling * appplicaton. Initially new_GetLine() sets the group identifier to * 0. Whenever a new line is appended to the history list, the current * group identifier is recorded with it, and history lookups only * consider lines marked with the current group identifier. * * Input: * gl GetLine * The resource object of gl_get_line(). * id unsigned The new history group identifier. * Output: * return int 0 - OK. * 1 - Error. */ int gl_group_history(GetLine *gl, unsigned id) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of this function */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Block all signals while we install the new configuration. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * If the group isn't being changed, do nothing. */ if(_glh_get_group(gl->glh) == id) { status = 0; /* * Establish the new group. */ } else if(_glh_set_group(gl->glh, id)) { _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); status = 1; /* * Prevent history information from the previous group being * inappropriately used by the next call to gl_get_line(). */ } else { gl->preload_history = 0; gl->last_search = -1; status = 0; }; /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * Display the contents of the history list. * * Input: * gl GetLine * The resource object of gl_get_line(). * fp FILE * The stdio output stream to write to. * fmt const char * A format string. This containing characters to be * written verbatim, plus any of the following * format directives: * %D - The date, formatted like 2001-11-20 * %T - The time of day, formatted like 23:59:59 * %N - The sequential entry number of the * line in the history buffer. * %G - The number of the history group that * the line belongs to. * %% - A literal % character. * %H - The history line itself. * Note that a '\n' newline character is not * appended by default. * all_groups int If true, display history lines from all * history groups. Otherwise only display * those of the current history group. * max_lines int If max_lines is < 0, all available lines * are displayed. Otherwise only the most * recent max_lines lines will be displayed. * Output: * return int 0 - OK. * 1 - Error. */ int gl_show_history(GetLine *gl, FILE *fp, const char *fmt, int all_groups, int max_lines) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of this function */ /* * Check the arguments. */ if(!gl || !fp || !fmt) { if(gl) _err_record_msg(gl->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Display the specified history group(s) while signals are blocked. */ status = _glh_show_history(gl->glh, _io_write_stdio, fp, fmt, all_groups, max_lines) || fflush(fp)==EOF; if(!status) _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * Update if necessary, and return the current size of the terminal. * * Input: * gl GetLine * The resource object of gl_get_line(). * def_ncolumn int If the number of columns in the terminal * can't be determined, substitute this number. * def_nline int If the number of lines in the terminal can't * be determined, substitute this number. * Output: * return GlTerminalSize The current terminal size. */ GlTerminalSize gl_terminal_size(GetLine *gl, int def_ncolumn, int def_nline) { GlTerminalSize size; /* The object to be returned */ sigset_t oldset; /* The signals that were blocked on entry */ /* to this function */ /* * Block all signals while accessing gl. */ gl_mask_signals(gl, &oldset); /* * Lookup/configure the terminal size. */ _gl_terminal_size(gl, def_ncolumn, def_nline, &size); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); return size; } /*....................................................................... * This is the private body of the gl_terminal_size() function. It * assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static void _gl_terminal_size(GetLine *gl, int def_ncolumn, int def_nline, GlTerminalSize *size) { const char *env; /* The value of an environment variable */ int n; /* A number read from env[] */ /* * Set the number of lines and columns to non-sensical values so that * we know later if they have been set. */ gl->nline = 0; gl->ncolumn = 0; /* * Are we reading from a terminal? */ if(gl->is_term) { /* * Ask the terminal directly if possible. */ gl_query_size(gl, &gl->ncolumn, &gl->nline); /* * If gl_query_size() couldn't ask the terminal, it will have * left gl->nrow and gl->ncolumn unchanged. If these values haven't * been changed from their initial values of zero, we need to find * a different method to get the terminal size. * * If the number of lines isn't known yet, first see if the * LINES environment ariable exists and specifies a believable number. * If this doesn't work, look up the default size in the terminal * information database. */ if(gl->nline < 1) { if((env = getenv("LINES")) && (n=atoi(env)) > 0) gl->nline = n; #ifdef USE_TERMINFO else gl->nline = tigetnum((char *)"lines"); #elif defined(USE_TERMCAP) else gl->nline = tgetnum("li"); #endif }; /* * If the number of lines isn't known yet, first see if the COLUMNS * environment ariable exists and specifies a believable number. If * this doesn't work, look up the default size in the terminal * information database. */ if(gl->ncolumn < 1) { if((env = getenv("COLUMNS")) && (n=atoi(env)) > 0) gl->ncolumn = n; #ifdef USE_TERMINFO else gl->ncolumn = tigetnum((char *)"cols"); #elif defined(USE_TERMCAP) else gl->ncolumn = tgetnum("co"); #endif }; }; /* * If we still haven't been able to acquire reasonable values, substitute * the default values specified by the caller. */ if(gl->nline <= 0) gl->nline = def_nline; if(gl->ncolumn <= 0) gl->ncolumn = def_ncolumn; /* * Copy the new size into the return value. */ if(size) { size->nline = gl->nline; size->ncolumn = gl->ncolumn; }; return; } /*....................................................................... * Resize or delete the history buffer. * * Input: * gl GetLine * The resource object of gl_get_line(). * bufsize size_t The number of bytes in the history buffer, or 0 * to delete the buffer completely. * Output: * return int 0 - OK. * 1 - Insufficient memory (the previous buffer * will have been retained). No error message * will be displayed. */ int gl_resize_history(GetLine *gl, size_t bufsize) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of this function */ /* * Check the arguments. */ if(!gl) return 1; /* * Block all signals while modifying the contents of gl. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Perform the resize while signals are blocked. */ status = _glh_resize_history(gl->glh, bufsize); if(status) _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * Set an upper limit to the number of lines that can be recorded in the * history list, or remove a previously specified limit. * * Input: * gl GetLine * The resource object of gl_get_line(). * max_lines int The maximum number of lines to allow, or -1 to * cancel a previous limit and allow as many lines * as will fit in the current history buffer size. */ void gl_limit_history(GetLine *gl, int max_lines) { if(gl) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Apply the limit while signals are blocked. */ _glh_limit_history(gl->glh, max_lines); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; } /*....................................................................... * Discard either all historical lines, or just those associated with the * current history group. * * Input: * gl GetLine * The resource object of gl_get_line(). * all_groups int If true, clear all of the history. If false, * clear only the stored lines associated with the * currently selected history group. */ void gl_clear_history(GetLine *gl, int all_groups) { if(gl) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Clear the history buffer while signals are blocked. */ _glh_clear_history(gl->glh, all_groups); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; } /*....................................................................... * Temporarily enable or disable the gl_get_line() history mechanism. * * Input: * gl GetLine * The resource object of gl_get_line(). * enable int If true, turn on the history mechanism. If * false, disable it. */ void gl_toggle_history(GetLine *gl, int enable) { if(gl) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Change the history recording mode while signals are blocked. */ _glh_toggle_history(gl->glh, enable); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; } /*....................................................................... * Lookup a history line by its sequential number of entry in the * history buffer. * * Input: * gl GetLine * The resource object of gl_get_line(). * id unsigned long The identification number of the line to * be returned, where 0 denotes the first line * that was entered in the history list, and * each subsequently added line has a number * one greater than the previous one. For * the range of lines currently in the list, * see the gl_range_of_history() function. * Input/Output: * line GlHistoryLine * A pointer to the variable in which to * return the details of the line. * Output: * return int 0 - The line is no longer in the history * list, and *line has not been changed. * 1 - The requested line can be found in * *line. Note that line->line is part * of the history buffer, so a * private copy should be made if you * wish to use it after subsequent calls * to any functions that take *gl as an * argument. */ int gl_lookup_history(GetLine *gl, unsigned long id, GlHistoryLine *line) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of this function */ /* * Check the arguments. */ if(!gl) return 0; /* * Block all signals while modifying the contents of gl. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Perform the lookup while signals are blocked. */ status = _glh_lookup_history(gl->glh, (GlhLineID) id, &line->line, &line->group, &line->timestamp); if(status) _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * Query the state of the history list. Note that any of the input/output * pointers can be specified as NULL. * * Input: * gl GetLine * The resource object of gl_get_line(). * Input/Output: * state GlHistoryState * A pointer to the variable in which to record * the return values. */ void gl_state_of_history(GetLine *gl, GlHistoryState *state) { if(gl && state) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Lookup the status while signals are blocked. */ _glh_state_of_history(gl->glh, &state->enabled, &state->group, &state->max_lines); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; } /*....................................................................... * Query the number and range of lines in the history buffer. * * Input: * gl GetLine * The resource object of gl_get_line(). * range GlHistoryRange * A pointer to the variable in which to record * the return values. If range->nline=0, the * range of lines will be given as 0-0. */ void gl_range_of_history(GetLine *gl, GlHistoryRange *range) { if(gl && range) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Lookup the information while signals are blocked. */ _glh_range_of_history(gl->glh, &range->oldest, &range->newest, &range->nlines); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; } /*....................................................................... * Return the size of the history buffer and the amount of the * buffer that is currently in use. * * Input: * gl GetLine * The gl_get_line() resource object. * Input/Output: * GlHistorySize size * A pointer to the variable in which to return * the results. */ void gl_size_of_history(GetLine *gl, GlHistorySize *size) { if(gl && size) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Lookup the information while signals are blocked. */ _glh_size_of_history(gl->glh, &size->size, &size->used); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; } /*....................................................................... * This is the action function that lists the contents of the history * list. */ static KT_KEY_FN(gl_list_history) { /* * Start a new line. */ if(gl_start_newline(gl, 1)) return 1; /* * List history lines that belong to the current group. */ _glh_show_history(gl->glh, gl_write_fn, gl, "%N %T %H\r\n", 0, count<=1 ? -1 : count); /* * Arrange for the input line to be redisplayed. */ gl_queue_redisplay(gl); return 0; } /*....................................................................... * Specify whether text that users type should be displayed or hidden. * In the latter case, only the prompt is displayed, and the final * input line is not archived in the history list. * * Input: * gl GetLine * The gl_get_line() resource object. * enable int 0 - Disable echoing. * 1 - Enable echoing. * -1 - Just query the mode without changing it. * Output: * return int The echoing disposition that was in effect * before this function was called: * 0 - Echoing was disabled. * 1 - Echoing was enabled. */ int gl_echo_mode(GetLine *gl, int enable) { if(gl) { sigset_t oldset; /* The signals that were blocked on entry to this block */ int was_echoing; /* The echoing disposition on entry to this function */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Install the new disposition while signals are blocked. */ was_echoing = gl->echo; if(enable >= 0) gl->echo = enable; /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); /* * Return the original echoing disposition. */ return was_echoing; }; return 1; } /*....................................................................... * Display the prompt. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int 0 - OK. * 1 - Error. */ static int gl_display_prompt(GetLine *gl) { const char *pptr; /* A pointer into gl->prompt[] */ unsigned old_attr=0; /* The current text display attributes */ unsigned new_attr=0; /* The requested text display attributes */ /* * Temporarily switch to echoing output characters. */ int kept_echo = gl->echo; gl->echo = 1; /* * In case the screen got messed up, send a carriage return to * put the cursor at the beginning of the current terminal line. */ if(gl_print_control_sequence(gl, 1, gl->bol)) return 1; /* * Mark the line as partially displayed. */ gl->displayed = 1; /* * Write the prompt, using the currently selected prompt style. */ switch(gl->prompt_style) { case GL_LITERAL_PROMPT: if(gl_print_string(gl, gl->prompt, '\0')) return 1; break; case GL_FORMAT_PROMPT: for(pptr=gl->prompt; *pptr; pptr++) { /* * Does the latest character appear to be the start of a directive? */ if(*pptr == '%') { /* * Check for and act on attribute changing directives. */ switch(pptr[1]) { /* * Add or remove a text attribute from the new set of attributes. */ case 'B': case 'U': case 'S': case 'P': case 'F': case 'V': case 'b': case 'u': case 's': case 'p': case 'f': case 'v': switch(*++pptr) { case 'B': /* Switch to a bold font */ new_attr |= GL_TXT_BOLD; break; case 'b': /* Switch to a non-bold font */ new_attr &= ~GL_TXT_BOLD; break; case 'U': /* Start underlining */ new_attr |= GL_TXT_UNDERLINE; break; case 'u': /* Stop underlining */ new_attr &= ~GL_TXT_UNDERLINE; break; case 'S': /* Start highlighting */ new_attr |= GL_TXT_STANDOUT; break; case 's': /* Stop highlighting */ new_attr &= ~GL_TXT_STANDOUT; break; case 'P': /* Switch to a pale font */ new_attr |= GL_TXT_DIM; break; case 'p': /* Switch to a non-pale font */ new_attr &= ~GL_TXT_DIM; break; case 'F': /* Switch to a flashing font */ new_attr |= GL_TXT_BLINK; break; case 'f': /* Switch to a steady font */ new_attr &= ~GL_TXT_BLINK; break; case 'V': /* Switch to reverse video */ new_attr |= GL_TXT_REVERSE; break; case 'v': /* Switch out of reverse video */ new_attr &= ~GL_TXT_REVERSE; break; }; continue; /* * A literal % is represented by %%. Skip the leading %. */ case '%': pptr++; break; }; }; /* * Many terminals, when asked to turn off a single text attribute, turn * them all off, so the portable way to turn one off individually is to * explicitly turn them all off, then specify those that we want from * scratch. */ if(old_attr & ~new_attr) { if(gl_print_control_sequence(gl, 1, gl->text_attr_off)) return 1; old_attr = 0; }; /* * Install new text attributes? */ if(new_attr != old_attr) { if(new_attr & GL_TXT_BOLD && !(old_attr & GL_TXT_BOLD) && gl_print_control_sequence(gl, 1, gl->bold)) return 1; if(new_attr & GL_TXT_UNDERLINE && !(old_attr & GL_TXT_UNDERLINE) && gl_print_control_sequence(gl, 1, gl->underline)) return 1; if(new_attr & GL_TXT_STANDOUT && !(old_attr & GL_TXT_STANDOUT) && gl_print_control_sequence(gl, 1, gl->standout)) return 1; if(new_attr & GL_TXT_DIM && !(old_attr & GL_TXT_DIM) && gl_print_control_sequence(gl, 1, gl->dim)) return 1; if(new_attr & GL_TXT_REVERSE && !(old_attr & GL_TXT_REVERSE) && gl_print_control_sequence(gl, 1, gl->reverse)) return 1; if(new_attr & GL_TXT_BLINK && !(old_attr & GL_TXT_BLINK) && gl_print_control_sequence(gl, 1, gl->blink)) return 1; old_attr = new_attr; }; /* * Display the latest character. */ if(gl_print_char(gl, *pptr, pptr[1])) return 1; }; /* * Turn off all text attributes now that we have finished drawing * the prompt. */ if(gl_print_control_sequence(gl, 1, gl->text_attr_off)) return 1; break; }; /* * Restore the original echo mode. */ gl->echo = kept_echo; /* * The prompt has now been displayed at least once. */ gl->prompt_changed = 0; return 0; } /*....................................................................... * This function can be called from gl_get_line() callbacks to have * the prompt changed when they return. It has no effect if gl_get_line() * is not currently being invoked. * * Input: * gl GetLine * The resource object of gl_get_line(). * prompt const char * The new prompt. */ void gl_replace_prompt(GetLine *gl, const char *prompt) { if(gl) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Replace the prompt. */ _gl_replace_prompt(gl, prompt); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; } /*....................................................................... * This is the private body of the gl_replace_prompt() function. It * assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static void _gl_replace_prompt(GetLine *gl, const char *prompt) { /* * Substitute an empty prompt? */ if(!prompt) prompt = ""; /* * Gaurd against aliasing between prompt and gl->prompt. */ if(gl->prompt != prompt) { /* * Get the length of the new prompt string. */ size_t slen = strlen(prompt); /* * If needed, allocate a new buffer for the prompt string. */ if(!gl->prompt || slen > strlen(gl->prompt)) { size_t size = sizeof(char) * (slen + 1); char *new_prompt = gl->prompt ? realloc(gl->prompt, size) : malloc(size); if(!new_prompt) return; gl->prompt = new_prompt; }; /* * Make a copy of the new prompt. */ strcpy(gl->prompt, prompt); }; /* * Record the statistics of the new prompt. */ gl->prompt_len = gl_displayed_prompt_width(gl); gl->prompt_changed = 1; gl_queue_redisplay(gl); return; } /*....................................................................... * Work out the length of the current prompt on the terminal, according * to the current prompt formatting style. * * Input: * gl GetLine * The resource object of this library. * Output: * return int The number of displayed characters. */ static int gl_displayed_prompt_width(GetLine *gl) { int slen=0; /* The displayed number of characters */ const char *pptr; /* A pointer into prompt[] */ /* * The length differs according to the prompt display style. */ switch(gl->prompt_style) { case GL_LITERAL_PROMPT: return gl_displayed_string_width(gl, gl->prompt, -1, 0); break; case GL_FORMAT_PROMPT: /* * Add up the length of the displayed string, while filtering out * attribute directives. */ for(pptr=gl->prompt; *pptr; pptr++) { /* * Does the latest character appear to be the start of a directive? */ if(*pptr == '%') { /* * Check for and skip attribute changing directives. */ switch(pptr[1]) { case 'B': case 'b': case 'U': case 'u': case 'S': case 's': pptr++; continue; /* * A literal % is represented by %%. Skip the leading %. */ case '%': pptr++; break; }; }; slen += gl_displayed_char_width(gl, *pptr, slen); }; break; }; return slen; } /*....................................................................... * Specify whether to heed text attribute directives within prompt * strings. * * Input: * gl GetLine * The resource object of gl_get_line(). * style GlPromptStyle The style of prompt (see the definition of * GlPromptStyle in libtecla.h for details). */ void gl_prompt_style(GetLine *gl, GlPromptStyle style) { if(gl) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Install the new style in gl while signals are blocked. */ if(style != gl->prompt_style) { gl->prompt_style = style; gl->prompt_len = gl_displayed_prompt_width(gl); gl->prompt_changed = 1; gl_queue_redisplay(gl); }; /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; } /*....................................................................... * Tell gl_get_line() how to respond to a given signal. This can be used * both to override the default responses to signals that gl_get_line() * normally catches and to add new signals to the list that are to be * caught. * * Input: * gl GetLine * The resource object of gl_get_line(). * signo int The number of the signal to be caught. * flags unsigned A bitwise union of GlSignalFlags enumerators. * after GlAfterSignal What to do after the application's signal * handler has been called. * errno_value int The value to set errno to. * Output: * return int 0 - OK. * 1 - Error. */ int gl_trap_signal(GetLine *gl, int signo, unsigned flags, GlAfterSignal after, int errno_value) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of this function */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Block all signals while modifying the contents of gl. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Perform the modification while signals are blocked. */ status = _gl_trap_signal(gl, signo, flags, after, errno_value); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the gl_trap_signal() function. It * assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_trap_signal(GetLine *gl, int signo, unsigned flags, GlAfterSignal after, int errno_value) { GlSignalNode *sig; /* * Complain if an attempt is made to trap untrappable signals. * These would otherwise cause errors later in gl_mask_signals(). */ if(0 #ifdef SIGKILL || signo==SIGKILL #endif #ifdef SIGBLOCK || signo==SIGBLOCK #endif ) { return 1; }; /* * See if the signal has already been registered. */ for(sig=gl->sigs; sig && sig->signo != signo; sig = sig->next) ; /* * If the signal hasn't already been registered, allocate a node for * it. */ if(!sig) { sig = (GlSignalNode *) _new_FreeListNode(gl->sig_mem); if(!sig) return 1; /* * Add the new node to the head of the list. */ sig->next = gl->sigs; gl->sigs = sig; /* * Record the signal number. */ sig->signo = signo; /* * Create a signal set that includes just this signal. */ sigemptyset(&sig->proc_mask); if(sigaddset(&sig->proc_mask, signo) == -1) { _err_record_msg(gl->err, "sigaddset error", END_ERR_MSG); sig = (GlSignalNode *) _del_FreeListNode(gl->sig_mem, sig); return 1; }; /* * Add the signal to the bit-mask of signals being trapped. */ sigaddset(&gl->all_signal_set, signo); }; /* * Record the new signal attributes. */ sig->flags = flags; sig->after = after; sig->errno_value = errno_value; return 0; } /*....................................................................... * Remove a signal from the list of signals that gl_get_line() traps. * * Input: * gl GetLine * The resource object of gl_get_line(). * signo int The number of the signal to be ignored. * Output: * return int 0 - OK. * 1 - Error. */ int gl_ignore_signal(GetLine *gl, int signo) { GlSignalNode *sig; /* The gl->sigs list node of the specified signal */ GlSignalNode *prev; /* The node that precedes sig in the list */ sigset_t oldset; /* The signals that were blocked on entry to this */ /* function. */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Block all signals while modifying the contents of gl. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Find the node of the gl->sigs list which records the disposition * of the specified signal. */ for(prev=NULL,sig=gl->sigs; sig && sig->signo != signo; prev=sig,sig=sig->next) ; if(sig) { /* * Remove the node from the list. */ if(prev) prev->next = sig->next; else gl->sigs = sig->next; /* * Return the node to the freelist. */ sig = (GlSignalNode *) _del_FreeListNode(gl->sig_mem, sig); /* * Remove the signal from the bit-mask union of signals being trapped. */ sigdelset(&gl->all_signal_set, signo); }; /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); return 0; } /*....................................................................... * This function is called when an input line has been completed. It * appends the specified newline character, terminates the line, * records the line in the history buffer if appropriate, and positions * the terminal cursor at the start of the next line. * * Input: * gl GetLine * The resource object of gl_get_line(). * newline_char int The newline character to add to the end * of the line. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_line_ended(GetLine *gl, int newline_char) { /* * If the newline character is printable, display it at the end of * the line, and add it to the input line buffer. */ if(isprint((int)(unsigned char) newline_char)) { if(gl_end_of_line(gl, 1, NULL) || gl_add_char_to_line(gl, newline_char)) return 1; } else { /* * Otherwise just append a newline character to the input line buffer. */ newline_char = '\n'; gl_buffer_char(gl, newline_char, gl->ntotal); }; /* * Add the line to the history buffer if it was entered with a * newline character. */ if(gl->echo && gl->automatic_history && newline_char=='\n') (void) _gl_append_history(gl, gl->line); /* * Except when depending on the system-provided line editing, start a new * line after the end of the line that has just been entered. */ if(gl->editor != GL_NO_EDITOR && gl_start_newline(gl, 1)) return 1; /* * Record the successful return status. */ gl_record_status(gl, GLR_NEWLINE, 0); /* * Attempt to flush any pending output. */ (void) gl_flush_output(gl); /* * The next call to gl_get_line() will write the prompt for a new line * (or continue the above flush if incomplete), so if we manage to * flush the terminal now, report that we are waiting to write to the * terminal. */ gl->pending_io = GLP_WRITE; return 0; } /*....................................................................... * Return the last signal that was caught by the most recent call to * gl_get_line(), or -1 if no signals were caught. This is useful if * gl_get_line() returns errno=EINTR and you need to find out what signal * caused it to abort. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int The last signal caught by the most recent * call to gl_get_line(), or -1 if no signals * were caught. */ int gl_last_signal(GetLine *gl) { int signo = -1; /* The requested signal number */ if(gl) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Access gl now that signals are blocked. */ signo = gl->last_signal; /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; return signo; } /*....................................................................... * Prepare to edit a new line. * * Input: * gl GetLine * The resource object of this library. * prompt char * The prompt to prefix the line with, or NULL to * use the same prompt that was used by the previous * line. * start_line char * The initial contents of the input line, or NULL * if it should start out empty. * start_pos int If start_line isn't NULL, this specifies the * index of the character over which the cursor * should initially be positioned within the line. * If you just want it to follow the last character * of the line, send -1. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_present_line(GetLine *gl, const char *prompt, const char *start_line, int start_pos) { /* * Prepare the line-editing properties for a new editing session. */ gl_reset_editor(gl); /* * Record the new prompt and its displayed width. */ if(prompt) _gl_replace_prompt(gl, prompt); /* * Reset the history search pointers. */ if(_glh_cancel_search(gl->glh)) { _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); return 1; }; /* * If the previous line was entered via the repeat-history action, * preload the specified history line. */ if(gl->preload_history) { gl->preload_history = 0; if(_glh_recall_line(gl->glh, gl->preload_id, gl->line, gl->linelen+1)) { gl_update_buffer(gl); /* Compute gl->ntotal etc.. */ gl->buff_curpos = gl->ntotal; } else { gl_truncate_buffer(gl, 0); }; gl->preload_id = 0; /* * Present a specified initial line? */ } else if(start_line) { char *cptr; /* A pointer into gl->line[] */ /* * Measure the length of the starting line. */ int start_len = strlen(start_line); /* * If the length of the line is greater than the available space, * truncate it. */ if(start_len > gl->linelen) start_len = gl->linelen; /* * Load the line into the buffer. */ if(start_line != gl->line) gl_buffer_string(gl, start_line, start_len, 0); /* * Strip off any trailing newline and carriage return characters. */ for(cptr=gl->line + gl->ntotal - 1; cptr >= gl->line && (*cptr=='\n' || *cptr=='\r'); cptr--,gl->ntotal--) ; gl_truncate_buffer(gl, gl->ntotal < 0 ? 0 : gl->ntotal); /* * Where should the cursor be placed within the line? */ if(start_pos < 0 || start_pos > gl->ntotal) { if(gl_place_cursor(gl, gl->ntotal)) return 1; } else { if(gl_place_cursor(gl, start_pos)) return 1; }; /* * Clear the input line? */ } else { gl_truncate_buffer(gl, 0); }; /* * Arrange for the line to be displayed by gl_flush_output(). */ gl_queue_redisplay(gl); /* * Update the display. */ return gl_flush_output(gl); } /*....................................................................... * Reset all line-editing parameters for a new editing session. Note * that this does not empty the input line, since that would prevent a * gl_get_line() caller from specifying the returned line buffer as * the start_line argument of the next call to gl_get_line(). * * Input: * gl GetLine * The line editor resource object. */ static void gl_reset_editor(GetLine *gl) { /* * Warning: Don't clear gl->line[] and gl->ntotal here (see above). */ gl->buff_curpos = 0; gl->term_curpos = 0; gl->term_len = 0; gl->insert_curpos = 0; gl->number = -1; gl->displayed = 0; gl->endline = 0; gl->redisplay = 0; gl->postpone = 0; gl->nbuf = 0; gl->nread = 0; gl->vi.command = 0; gl->vi.undo.line[0] = '\0'; gl->vi.undo.ntotal = 0; gl->vi.undo.buff_curpos = 0; gl->vi.repeat.action.fn = 0; gl->vi.repeat.action.data = 0; gl->last_signal = -1; } /*....................................................................... * Print an informational message to the terminal, after starting a new * line. * * Input: * gl GetLine * The line editor resource object. * ... const char * Zero or more strings to be printed. * ... void * The last argument must always be GL_END_INFO. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_print_info(GetLine *gl, ...) { va_list ap; /* The variable argument list */ const char *s; /* The string being printed */ int waserr = 0; /* True after an error */ /* * Only display output when echoing is on. */ if(gl->echo) { /* * Skip to the start of the next empty line before displaying the message. */ if(gl_start_newline(gl, 1)) return 1; /* * Display the list of provided messages. */ va_start(ap, gl); while(!waserr && (s = va_arg(ap, const char *)) != GL_END_INFO) waserr = gl_print_raw_string(gl, 1, s, -1); va_end(ap); /* * Start a newline. */ waserr = waserr || gl_print_raw_string(gl, 1, "\n\r", -1); /* * Arrange for the input line to be redrawn. */ gl_queue_redisplay(gl); }; return waserr; } /*....................................................................... * Go to the start of the next empty line, ready to output miscellaneous * text to the screen. * * Note that when async-signal safety is required, the 'buffered' * argument must be 0. * * Input: * gl GetLine * The line editor resource object. * buffered int If true, used buffered I/O when writing to * the terminal. Otherwise use async-signal-safe * unbuffered I/O. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_start_newline(GetLine *gl, int buffered) { int waserr = 0; /* True after any I/O error */ /* * Move the cursor to the start of the terminal line that follows the * last line of the partially enterred line. In order that this * function remain async-signal safe when write_fn is signal safe, we * can't call our normal output functions, since they call tputs(), * who's signal saftey isn't defined. Fortunately, we can simply use * \r and \n to move the cursor to the right place. */ if(gl->displayed) { /* Is an input line currently displayed? */ /* * On which terminal lines are the cursor and the last character of the * input line? */ int curs_line = gl->term_curpos / gl->ncolumn; int last_line = gl->term_len / gl->ncolumn; /* * Move the cursor to the start of the line that follows the last * terminal line that is occupied by the input line. */ for( ; curs_line < last_line + 1; curs_line++) waserr = waserr || gl_print_raw_string(gl, buffered, "\n", 1); waserr = waserr || gl_print_raw_string(gl, buffered, "\r", 1); /* * Mark the line as no longer displayed. */ gl_line_erased(gl); }; return waserr; } /*....................................................................... * The callback through which all terminal output is routed. * This simply appends characters to a queue buffer, which is * subsequently flushed to the output channel by gl_flush_output(). * * Input: * data void * The pointer to a GetLine line editor resource object * cast to (void *). * s const char * The string to be written. * n int The number of characters to write from s[]. * Output: * return int The number of characters written. This will always * be equal to 'n' unless an error occurs. */ static GL_WRITE_FN(gl_write_fn) { GetLine *gl = (GetLine *) data; int ndone = _glq_append_chars(gl->cq, s, n, gl->flush_fn, gl); if(ndone != n) _err_record_msg(gl->err, _glq_last_error(gl->cq), END_ERR_MSG); return ndone; } /*....................................................................... * Ask gl_get_line() what caused it to return. * * Input: * gl GetLine * The line editor resource object. * Output: * return GlReturnStatus The return status of the last call to * gl_get_line(). */ GlReturnStatus gl_return_status(GetLine *gl) { GlReturnStatus rtn_status = GLR_ERROR; /* The requested status */ if(gl) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Access gl while signals are blocked. */ rtn_status = gl->rtn_status; /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; return rtn_status; } /*....................................................................... * In non-blocking server-I/O mode, this function should be called * from the application's external event loop to see what type of * terminal I/O is being waited for by gl_get_line(), and thus what * direction of I/O to wait for with select() or poll(). * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return GlPendingIO The type of pending I/O being waited for. */ GlPendingIO gl_pending_io(GetLine *gl) { GlPendingIO pending_io = GLP_WRITE; /* The requested information */ if(gl) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Access gl while signals are blocked. */ pending_io = gl->pending_io; /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); }; return pending_io; } /*....................................................................... * In server mode, this function configures the terminal for non-blocking * raw terminal I/O. In normal I/O mode it does nothing. * * Callers of this function must be careful to trap all signals that * terminate or suspend the program, and call gl_normal_io() * from the corresponding signal handlers in order to restore the * terminal to its original settings before the program is terminated * or suspended. They should also trap the SIGCONT signal to detect * when the program resumes, and ensure that its signal handler * call gl_raw_io() to redisplay the line and resume editing. * * This function is async signal safe. * * Input: * gl GetLine * The line editor resource object. * Output: * return int 0 - OK. * 1 - Error. */ int gl_raw_io(GetLine *gl) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_raw_io() */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Don't allow applications to switch into raw mode unless in server mode. */ if(gl->io_mode != GL_SERVER_MODE) { _err_record_msg(gl->err, "Can't switch to raw I/O unless in server mode", END_ERR_MSG); errno = EPERM; status = 1; } else { /* * Execute the private body of the function while signals are blocked. */ status = _gl_raw_io(gl, 1); }; /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the public function, gl_raw_io(). * It assumes that the caller has checked its arguments and blocked the * delivery of signals. * * This function is async signal safe. */ static int _gl_raw_io(GetLine *gl, int redisplay) { /* * If we are already in the correct mode, do nothing. */ if(gl->raw_mode) return 0; /* * Switch the terminal to raw mode. */ if(gl->is_term && gl_raw_terminal_mode(gl)) return 1; /* * Switch to non-blocking I/O mode? */ if(gl->io_mode==GL_SERVER_MODE && (gl_nonblocking_io(gl, gl->input_fd) || gl_nonblocking_io(gl, gl->output_fd) || (gl->file_fp && gl_nonblocking_io(gl, fileno(gl->file_fp))))) { if(gl->is_term) gl_restore_terminal_attributes(gl); return 1; }; /* * If an input line is being entered, arrange for it to be * displayed. */ if(redisplay) { gl->postpone = 0; gl_queue_redisplay(gl); }; return 0; } /*....................................................................... * Restore the terminal to the state that it had when * gl_raw_io() was last called. After calling * gl_raw_io(), this function must be called before * terminating or suspending the program, and before attempting other * uses of the terminal from within the program. See gl_raw_io() * for more details. * * Input: * gl GetLine * The line editor resource object. * Output: * return int 0 - OK. * 1 - Error. */ int gl_normal_io(GetLine *gl) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_normal_io() */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Execute the private body of the function while signals are blocked. */ status = _gl_normal_io(gl); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the public function, gl_normal_io(). * It assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_normal_io(GetLine *gl) { /* * If we are already in normal mode, do nothing. */ if(!gl->raw_mode) return 0; /* * Postpone subsequent redisplays until after _gl_raw_io(gl, 1) * is next called. */ gl->postpone = 1; /* * Switch back to blocking I/O. Note that this is essential to do * here, because when using non-blocking I/O, the terminal output * buffering code can't always make room for new output without calling * malloc(), and a call to malloc() would mean that this function * couldn't safely be called from signal handlers. */ if(gl->io_mode==GL_SERVER_MODE && (gl_blocking_io(gl, gl->input_fd) || gl_blocking_io(gl, gl->output_fd) || (gl->file_fp && gl_blocking_io(gl, fileno(gl->file_fp))))) return 1; /* * Move the cursor to the next empty terminal line. Note that * unbuffered I/O is requested, to ensure that gl_start_newline() be * async-signal-safe. */ if(gl->is_term && gl_start_newline(gl, 0)) return 1; /* * Switch the terminal to normal mode. */ if(gl->is_term && gl_restore_terminal_attributes(gl)) { /* * On error, revert to non-blocking I/O if needed, so that on failure * we remain in raw mode. */ if(gl->io_mode==GL_SERVER_MODE) { gl_nonblocking_io(gl, gl->input_fd); gl_nonblocking_io(gl, gl->output_fd); if(gl->file_fp) gl_nonblocking_io(gl, fileno(gl->file_fp)); }; return 1; }; return 0; } /*....................................................................... * This function allows you to install an additional completion * action, or to change the completion function of an existing * one. This should be called before the first call to gl_get_line() * so that the name of the action be defined before the user's * configuration file is read. * * Input: * gl GetLine * The resource object of the command-line input * module. * data void * This is passed to match_fn() whenever it is * called. It could, for example, point to a * symbol table that match_fn() would look up * matches in. * match_fn CplMatchFn * The function that will identify the prefix * to be completed from the input line, and * report matching symbols. * list_only int If non-zero, install an action that only lists * possible completions, rather than attempting * to perform the completion. * name const char * The name with which users can refer to the * binding in tecla configuration files. * keyseq const char * Either NULL, or a key sequence with which * to invoke the binding. This should be * specified in the same manner as key-sequences * in tecla configuration files (eg. "M-^I"). * Output: * return int 0 - OK. * 1 - Error. */ int gl_completion_action(GetLine *gl, void *data, CplMatchFn *match_fn, int list_only, const char *name, const char *keyseq) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_completion_action() */ /* * Check the arguments. */ if(!gl || !name || !match_fn) { errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Install the new action while signals are blocked. */ status = _gl_completion_action(gl, data, match_fn, list_only, name, keyseq); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the public function, gl_completion_action(). * It assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_completion_action(GetLine *gl, void *data, CplMatchFn *match_fn, int list_only, const char *name, const char *keyseq) { KtKeyFn *current_fn; /* An existing action function */ void *current_data; /* The action-function callback data */ /* * Which action function is desired? */ KtKeyFn *action_fn = list_only ? gl_list_completions : gl_complete_word; /* * Is there already an action of the specified name? */ if(_kt_lookup_action(gl->bindings, name, ¤t_fn, ¤t_data) == 0) { /* * If the action has the same type as the one being requested, * simply change the contents of its GlCplCallback callback data. */ if(current_fn == action_fn) { GlCplCallback *cb = (GlCplCallback *) current_data; cb->fn = match_fn; cb->data = data; } else { errno = EINVAL; _err_record_msg(gl->err, "Illegal attempt to change the type of an existing completion action", END_ERR_MSG); return 1; }; /* * No existing action has the specified name. */ } else { /* * Allocate a new GlCplCallback callback object. */ GlCplCallback *cb = (GlCplCallback *) _new_FreeListNode(gl->cpl_mem); if(!cb) { errno = ENOMEM; _err_record_msg(gl->err, "Insufficient memory to add completion action", END_ERR_MSG); return 1; }; /* * Record the completion callback data. */ cb->fn = match_fn; cb->data = data; /* * Attempt to register the new action. */ if(_kt_set_action(gl->bindings, name, action_fn, cb)) { _err_record_msg(gl->err, _kt_last_error(gl->bindings), END_ERR_MSG); _del_FreeListNode(gl->cpl_mem, (void *) cb); return 1; }; }; /* * Bind the action to a given key-sequence? */ if(keyseq && _kt_set_keybinding(gl->bindings, KTB_NORM, keyseq, name)) { _err_record_msg(gl->err, _kt_last_error(gl->bindings), END_ERR_MSG); return 1; }; return 0; } /*....................................................................... * Register an application-provided function as an action function. * This should preferably be called before the first call to gl_get_line() * so that the name of the action becomes defined before the user's * configuration file is read. * * Input: * gl GetLine * The resource object of the command-line input * module. * data void * Arbitrary application-specific callback * data to be passed to the callback * function, fn(). * fn GlActionFn * The application-specific function that * implements the action. This will be invoked * whenever the user presses any * key-sequence which is bound to this action. * name const char * The name with which users can refer to the * binding in tecla configuration files. * keyseq const char * The key sequence with which to invoke * the binding. This should be specified in the * same manner as key-sequences in tecla * configuration files (eg. "M-^I"). * Output: * return int 0 - OK. * 1 - Error. */ int gl_register_action(GetLine *gl, void *data, GlActionFn *fn, const char *name, const char *keyseq) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_register_action() */ /* * Check the arguments. */ if(!gl || !name || !fn) { errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Install the new action while signals are blocked. */ status = _gl_register_action(gl, data, fn, name, keyseq); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the public function, gl_register_action(). * It assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_register_action(GetLine *gl, void *data, GlActionFn *fn, const char *name, const char *keyseq) { KtKeyFn *current_fn; /* An existing action function */ void *current_data; /* The action-function callback data */ /* * Get the action function which actually runs the application-provided * function. */ KtKeyFn *action_fn = gl_run_external_action; /* * Is there already an action of the specified name? */ if(_kt_lookup_action(gl->bindings, name, ¤t_fn, ¤t_data) == 0) { /* * If the action has the same type as the one being requested, * simply change the contents of its GlCplCallback callback data. */ if(current_fn == action_fn) { GlExternalAction *a = (GlExternalAction *) current_data; a->fn = fn; a->data = data; } else { errno = EINVAL; _err_record_msg(gl->err, "Illegal attempt to change the type of an existing action", END_ERR_MSG); return 1; }; /* * No existing action has the specified name. */ } else { /* * Allocate a new GlCplCallback callback object. */ GlExternalAction *a = (GlExternalAction *) _new_FreeListNode(gl->ext_act_mem); if(!a) { errno = ENOMEM; _err_record_msg(gl->err, "Insufficient memory to add completion action", END_ERR_MSG); return 1; }; /* * Record the completion callback data. */ a->fn = fn; a->data = data; /* * Attempt to register the new action. */ if(_kt_set_action(gl->bindings, name, action_fn, a)) { _err_record_msg(gl->err, _kt_last_error(gl->bindings), END_ERR_MSG); _del_FreeListNode(gl->cpl_mem, (void *) a); return 1; }; }; /* * Bind the action to a given key-sequence? */ if(keyseq && _kt_set_keybinding(gl->bindings, KTB_NORM, keyseq, name)) { _err_record_msg(gl->err, _kt_last_error(gl->bindings), END_ERR_MSG); return 1; }; return 0; } /*....................................................................... * Invoke an action function previously registered by a call to * gl_register_action(). */ static KT_KEY_FN(gl_run_external_action) { GlAfterAction status; /* The return value of the action function */ /* * Get the container of the action function and associated callback data. */ GlExternalAction *a = (GlExternalAction *) data; /* * Invoke the action function. */ status = a->fn(gl, a->data, count, gl->buff_curpos, gl->line); /* * If the callback took us out of raw (possibly non-blocking) input * mode, restore this mode, and queue a redisplay of the input line. */ if(_gl_raw_io(gl, 1)) return 1; /* * Finally, check to see what the action function wants us to do next. */ switch(status) { default: case GLA_ABORT: gl_record_status(gl, GLR_ERROR, errno); return 1; break; case GLA_RETURN: return gl_newline(gl, 1, NULL); break; case GLA_CONTINUE: break; }; return 0; } /*....................................................................... * In server-I/O mode the terminal is left in raw mode between calls * to gl_get_line(), so it is necessary for the application to install * terminal restoring signal handlers for signals that could terminate * or suspend the process, plus a terminal reconfiguration handler to * be called when a process resumption signal is received, and finally * a handler to be called when a terminal-resize signal is received. * * Since there are many signals that by default terminate or suspend * processes, and different systems support different sub-sets of * these signals, this function provides a convenient wrapper around * sigaction() for assigning the specified handlers to all appropriate * signals. It also arranges that when any one of these signals is * being handled, all other catchable signals are blocked. This is * necessary so that the specified signal handlers can safely call * gl_raw_io(), gl_normal_io() and gl_update_size() without * reentrancy issues. * * Input: * term_handler void (*)(int) The signal handler to invoke when * a process-terminating signal is * received. * susp_handler void (*)(int) The signal handler to invoke when * a process-suspending signal is * received. * cont_handler void (*)(int) The signal handler to invoke when * a process-resumption signal is * received (ie. SIGCONT). * size_handler void (*)(int) The signal handler to invoke when * a terminal-resize signal (ie. SIGWINCH) * is received. * Output: * return int 0 - OK. * 1 - Error. */ int gl_tty_signals(void (*term_handler)(int), void (*susp_handler)(int), void (*cont_handler)(int), void (*size_handler)(int)) { int i; /* * Search for signals of the specified classes, and assign the * associated signal handler to them. */ for(i=0; iattr & GLSA_SUSP) { if(gl_set_tty_signal(sig->signo, susp_handler)) return 1; } else if(sig->attr & GLSA_TERM) { if(gl_set_tty_signal(sig->signo, term_handler)) return 1; } else if(sig->attr & GLSA_CONT) { if(gl_set_tty_signal(sig->signo, cont_handler)) return 1; } else if(sig->attr & GLSA_SIZE) { if(gl_set_tty_signal(sig->signo, size_handler)) return 1; }; }; return 0; } /*....................................................................... * This is a private function of gl_tty_signals(). It installs a given * signal handler, and arranges that when that signal handler is being * invoked other signals are blocked. The latter is important to allow * functions like gl_normal_io(), gl_raw_io() and gl_update_size() * to be called from signal handlers. * * Input: * signo int The signal to be trapped. * handler void (*)(int) The signal handler to assign to the signal. */ static int gl_set_tty_signal(int signo, void (*handler)(int)) { SigAction act; /* The signal handler configuation */ /* * Arrange to block all trappable signals except the one that is being * assigned (the trapped signal will be blocked automatically by the * system). */ gl_list_trappable_signals(&act.sa_mask); sigdelset(&act.sa_mask, signo); /* * Assign the signal handler. */ act.sa_handler = handler; /* * There is only one portable signal handling flag, and it isn't * relevant to us, so don't specify any flags. */ act.sa_flags = 0; /* * Register the signal handler. */ if(sigaction(signo, &act, NULL)) return 1; return 0; } /*....................................................................... * Display a left-justified string over multiple terminal lines, * taking account of the current width of the terminal. Optional * indentation and an optional prefix string can be specified to be * displayed at the start of each new terminal line used. Similarly, * an optional suffix can be specified to be displayed at the end of * each terminal line. If needed, a single paragraph can be broken * across multiple calls. Note that literal newlines in the input * string can be used to force a newline at any point and that you * should use this feature to explicitly end all paragraphs, including * at the end of the last string that you write. Note that when a new * line is started between two words that are separated by spaces, * those spaces are not output, whereas when a new line is started * because a newline character was found in the string, only the * spaces before the newline character are discarded. * * Input: * gl GetLine * The resource object of gl_get_line(). * indentation int The number of spaces of indentation to write * at the beginning of each new terminal line. * prefix const char * An optional prefix string to write after the * indentation margin at the start of each new * terminal line. You can specify NULL if no * prefix is required. * suffix const char * An optional suffix string to draw at the end * of the terminal line. Spaces will be added * where necessary to ensure that the suffix ends * in the last column of the terminal line. If * no suffix is desired, specify NULL. * fill_char int The padding character to use when indenting * the line or padding up to the suffix. * def_width int If the terminal width isn't known, such as when * writing to a pipe or redirecting to a file, * this number specifies what width to assume. * start int The number of characters already written to * the start of the current terminal line. This * is primarily used to allow individual * paragraphs to be written over multiple calls * to this function, but can also be used to * allow you to start the first line of a * paragraph with a different prefix or * indentation than those specified above. * string const char * The string to be written. * Output: * return int On error -1 is returned. Otherwise the * return value is the terminal column index at * which the cursor was left after writing the * final word in the string. Successful return * values can thus be passed verbatim to the * 'start' arguments of subsequent calls to * gl_display_text() to allow the printing of a * paragraph to be broken across multiple calls * to gl_display_text(). */ int gl_display_text(GetLine *gl, int indentation, const char *prefix, const char *suffix, int fill_char, int def_width, int start, const char *string) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_completion_action() */ /* * Check the arguments? */ if(!gl || !string) { errno = EINVAL; return -1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return -1; /* * Display the text while signals are blocked. */ status = _io_display_text(_io_write_stdio, gl->output_fp, indentation, prefix, suffix, fill_char, gl->ncolumn > 0 ? gl->ncolumn : def_width, start, string); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * Block all of the signals that we are currently trapping. * * Input: * gl GetLine * The resource object of gl_get_line(). * Input/Output: * oldset sigset_t * The superseded process signal mask * will be return in *oldset unless oldset is * NULL. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_mask_signals(GetLine *gl, sigset_t *oldset) { /* * Block all signals in all_signal_set, along with any others that are * already blocked by the application. */ if(sigprocmask(SIG_BLOCK, &gl->all_signal_set, oldset) >= 0) { gl->signals_masked = 1; return 0; }; /* * On error attempt to query the current process signal mask, so * that oldset be the correct process signal mask to restore later * if the caller of this function ignores the error return value. */ if(oldset) (void) sigprocmask(SIG_SETMASK, NULL, oldset); gl->signals_masked = 0; return 1; } /*....................................................................... * Restore a process signal mask that was previously returned via the * oldset argument of gl_mask_signals(). * * Input: * gl GetLine * The resource object of gl_get_line(). * Input/Output: * oldset sigset_t * The process signal mask to be restored. * Output: * return int 0 - OK. * 1 - Error. */ static int gl_unmask_signals(GetLine *gl, sigset_t *oldset) { gl->signals_masked = 0; return sigprocmask(SIG_SETMASK, oldset, NULL) < 0; } /*....................................................................... * Arrange to temporarily catch the signals marked in gl->use_signal_set. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int 0 - OK. * 1 - Error. */ static int gl_catch_signals(GetLine *gl) { return sigprocmask(SIG_UNBLOCK, &gl->use_signal_set, NULL) < 0; } /*....................................................................... * Select the I/O mode to be used by gl_get_line(). * * Input: * gl GetLine * The resource object of gl_get_line(). * mode GlIOMode The I/O mode to establish. * Output: * return int 0 - OK. * 1 - Error. */ int gl_io_mode(GetLine *gl, GlIOMode mode) { sigset_t oldset; /* The signals that were blocked on entry to this function */ int status; /* The return status of _gl_io_mode() */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Check that the requested mode is known. */ switch(mode) { case GL_NORMAL_MODE: case GL_SERVER_MODE: break; default: errno = EINVAL; _err_record_msg(gl->err, "Unknown gl_get_line() I/O mode requested.", END_ERR_MSG); return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Invoke the private body of this function. */ status = _gl_io_mode(gl, mode); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the public function, gl_io_mode(). * It assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_io_mode(GetLine *gl, GlIOMode mode) { /* * Are we already in the specified mode? */ if(mode == gl->io_mode) return 0; /* * First revert to normal I/O in the current I/O mode. */ _gl_normal_io(gl); /* * Record the new mode. */ gl->io_mode = mode; /* * Perform any actions needed by the new mode. */ if(mode==GL_SERVER_MODE) { if(_gl_raw_io(gl, 1)) return 1; }; return 0; } /*....................................................................... * Return extra information (ie. in addition to that provided by errno) * about the last error to occur in either gl_get_line() or its * associated public functions. * * Input: * gl GetLine * The resource object of gl_get_line(). * Input/Output: * buff char * An optional output buffer. Note that if the * calling application calls any gl_*() * functions from signal handlers, it should * provide a buffer here, so that a copy of * the latest error message can safely be made * while signals are blocked. * n size_t The allocated size of buff[]. * Output: * return const char * A pointer to the error message. This will * be the buff argument, unless buff==NULL, in * which case it will be a pointer to an * internal error buffer. In the latter case, * note that the contents of the returned buffer * will change on subsequent calls to any gl_*() * functions. */ const char *gl_error_message(GetLine *gl, char *buff, size_t n) { if(!gl) { static const char *msg = "NULL GetLine argument"; if(buff) { strncpy(buff, msg, n); buff[n-1] = '\0'; } else { return msg; }; } else if(buff) { sigset_t oldset; /* The signals that were blocked on entry to this block */ /* * Temporarily block all signals. */ gl_mask_signals(gl, &oldset); /* * Copy the error message into the specified buffer. */ if(buff && n > 0) { strncpy(buff, _err_get_msg(gl->err), n); buff[n-1] = '\0'; }; /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); } else { return _err_get_msg(gl->err); }; return buff; } /*....................................................................... * Return the signal mask used by gl_get_line(). This is the set of * signals that gl_get_line() is currently configured to trap. * * Input: * gl GetLine * The resource object of gl_get_line(). * Input/Output: * set sigset_t * The set of signals will be returned in *set, * in the form of a signal process mask, as * used by sigaction(), sigprocmask(), * sigpending(), sigsuspend(), sigsetjmp() and * other standard POSIX signal-aware * functions. * Output: * return int 0 - OK. * 1 - Error (examine errno for reason). */ int gl_list_signals(GetLine *gl, sigset_t *set) { /* * Check the arguments. */ if(!gl || !set) { if(gl) _err_record_msg(gl->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Copy the signal mask into *set. */ memcpy(set, &gl->all_signal_set, sizeof(*set)); return 0; } /*....................................................................... * By default, gl_get_line() doesn't trap signals that are blocked * when it is called. This default can be changed either on a * per-signal basis by calling gl_trap_signal(), or on a global basis * by calling this function. What this function does is add the * GLS_UNBLOCK_SIG flag to all signals that are currently configured * to be trapped by gl_get_line(), such that when subsequent calls to * gl_get_line() wait for I/O, these signals are temporarily * unblocked. This behavior is useful in non-blocking server-I/O mode, * where it is used to avoid race conditions related to handling these * signals externally to gl_get_line(). See the demonstration code in * demo3.c, or the gl_handle_signal() man page for further * information. * * Input: * gl GetLine * The resource object of gl_get_line(). */ void gl_catch_blocked(GetLine *gl) { sigset_t oldset; /* The process signal mask to restore */ GlSignalNode *sig; /* A signal node in gl->sigs */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return; }; /* * Temporarily block all signals while we modify the contents of gl. */ gl_mask_signals(gl, &oldset); /* * Add the GLS_UNBLOCK_SIG flag to all configured signals. */ for(sig=gl->sigs; sig; sig=sig->next) sig->flags |= GLS_UNBLOCK_SIG; /* * Restore the process signal mask that was superseded by the call * to gl_mask_signals(). */ gl_unmask_signals(gl, &oldset); return; } /*....................................................................... * Respond to signals who's default effects have important * consequences to gl_get_line(). This is intended for use in * non-blocking server mode, where the external event loop is * responsible for catching signals. Signals that are handled include * those that by default terminate or suspend the process, and the * signal that indicates that the terminal size has changed. Note that * this function is not signal safe and should thus not be called from * a signal handler itself. See the gl_io_mode() man page for how it * should be used. * * In the case of signals that by default terminate or suspend * processes, command-line editing will be suspended, the terminal * returned to a usable state, then the default disposition of the * signal restored and the signal resent, in order to suspend or * terminate the process. If the process subsequently resumes, * command-line editing is resumed. * * In the case of signals that indicate that the terminal has been * resized, the new size will be queried, and any input line that is * being edited will be redrawn to fit the new dimensions of the * terminal. * * Input: * signo int The number of the signal to respond to. * gl GetLine * The first element of an array of 'ngl' GetLine * objects. * ngl int The number of elements in the gl[] array. Normally * this will be one. */ void gl_handle_signal(int signo, GetLine *gl, int ngl) { int attr; /* The attributes of the specified signal */ sigset_t all_signals; /* The set of trappable signals */ sigset_t oldset; /* The process signal mask to restore */ int i; /* * NULL operation? */ if(ngl < 1 || !gl) return; /* * Look up the default attributes of the specified signal. */ attr = gl_classify_signal(signo); /* * If the signal isn't known, we are done. */ if(!attr) return; /* * Temporarily block all signals while we modify the gl objects. */ gl_list_trappable_signals(&all_signals); sigprocmask(SIG_BLOCK, &all_signals, &oldset); /* * Suspend or terminate the process? */ if(attr & (GLSA_SUSP | GLSA_TERM)) { gl_suspend_process(signo, gl, ngl); /* * Resize the terminal? Note that ioctl() isn't defined as being * signal safe, so we can't call gl_update_size() here. However, * gl_get_line() checks for resizes on each call, so simply arrange * for the application's event loop to call gl_get_line() as soon as * it becomes possible to write to the terminal. Note that if the * caller is calling select() or poll when this happens, these functions * get interrupted, since a signal has been caught. */ } else if(attr & GLSA_SIZE) { for(i=0; iraw_mode) { _gl_normal_io(obj); if(!obj->raw_mode) /* Check that gl_normal_io() succeded */ obj->raw_mode = -1; /* Flag raw mode as needing to be restored */ }; }; /* * Restore the system default disposition of the signal that we * caught. Note that this signal is currently blocked. Note that we * don't use memcpy() to copy signal sets here, because the signal safety * of memcpy() is undefined. */ def_action.sa_handler = SIG_DFL; { char *orig = (char *) &all_signals; char *dest = (char *) &def_action.sa_mask; for(i=0; iraw_mode == -1) { /* Did we flag the need to restore raw mode? */ obj->raw_mode = 0; /* gl_raw_io() does nothing unless raw_mode==0 */ _gl_raw_io(obj, 1); }; }; /* * Restore the process signal mask to the way it was when this function * was called. */ sigprocmask(SIG_SETMASK, &oldset, NULL); return; } /*....................................................................... * Return the information about the default attributes of a given signal. * The attributes that are returned are as defined by the standards that * created them, including POSIX, SVR4 and 4.3+BSD, and are taken from a * table in Richard Steven's book, "Advanced programming in the UNIX * environment". * * Input: * signo int The signal to be characterized. * Output: * return int A bitwise union of GlSigAttr enumerators, or 0 * if the signal isn't known. */ static int gl_classify_signal(int signo) { int i; /* * Search for the specified signal in the gl_signal_list[] table. */ for(i=0; isigno == signo) return sig->attr; }; /* * Signal not known. */ return 0; } /*....................................................................... * When in non-blocking server mode, this function can be used to abandon * the current incompletely entered input line, and prepare to start * editing a new line on the next call to gl_get_line(). * * Input: * gl GetLine * The line editor resource object. */ void gl_abandon_line(GetLine *gl) { sigset_t oldset; /* The process signal mask to restore */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return; }; /* * Temporarily block all signals while we modify the contents of gl. */ gl_mask_signals(gl, &oldset); /* * Mark the input line as discarded. */ _gl_abandon_line(gl); /* * Restore the process signal mask that was superseded by the call * to gl_mask_signals(). */ gl_unmask_signals(gl, &oldset); return; } /*....................................................................... * This is the private body of the gl_abandon_line() function. It * assumes that the caller has checked its arguments and blocked the * delivery of signals. */ void _gl_abandon_line(GetLine *gl) { gl->endline = 1; gl->pending_io = GLP_WRITE; } /*....................................................................... * How many characters are needed to write a number as an octal string? * * Input: * num unsigned The to be measured. * Output: * return int The number of characters needed. */ static int gl_octal_width(unsigned num) { int n; /* The number of characters needed to render the number */ for(n=1; num /= 8; n++) ; return n; } /*....................................................................... * Tell gl_get_line() the current terminal size. Note that this is only * necessary on systems where changes in terminal size aren't reported * via SIGWINCH. * * Input: * gl GetLine * The resource object of gl_get_line(). * ncolumn int The number of columns in the terminal. * nline int The number of lines in the terminal. * Output: * return int 0 - OK. * 1 - Error. */ int gl_set_term_size(GetLine *gl, int ncolumn, int nline) { sigset_t oldset; /* The signals that were blocked on entry */ /* to this function */ int status; /* The return status */ /* * Block all signals while accessing gl. */ gl_mask_signals(gl, &oldset); /* * Install the new terminal size. */ status = _gl_set_term_size(gl, ncolumn, nline); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the gl_set_term_size() function. It * assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_set_term_size(GetLine *gl, int ncolumn, int nline) { /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Reject non-sensical dimensions. */ if(ncolumn <= 0 || nline <= 0) { _err_record_msg(gl->err, "Invalid terminal size", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Install the new dimensions in the terminal driver if possible, so * that future calls to gl_query_size() get the new value. */ #ifdef TIOCSWINSZ if(gl->is_term) { struct winsize size; size.ws_row = nline; size.ws_col = ncolumn; size.ws_xpixel = 0; size.ws_ypixel = 0; if(ioctl(gl->output_fd, TIOCSWINSZ, &size) == -1) { _err_record_msg(gl->err, "Can't change terminal size", END_ERR_MSG); return 1; }; }; #endif /* * If an input line is in the process of being edited, redisplay it to * accomodate the new dimensions, and record the new dimensions in * gl->nline and gl->ncolumn. */ return gl_handle_tty_resize(gl, ncolumn, nline); } /*....................................................................... * Record a character in the input line buffer at a given position. * * Input: * gl GetLine * The resource object of gl_get_line(). * c char The character to be recorded. * bufpos int The index in the buffer at which to record the * character. * Output: * return int 0 - OK. * 1 - Insufficient room. */ static int gl_buffer_char(GetLine *gl, char c, int bufpos) { /* * Guard against buffer overruns. */ if(bufpos >= gl->linelen) return 1; /* * Record the new character. */ gl->line[bufpos] = c; /* * If the new character was placed beyond the end of the current input * line, update gl->ntotal to reflect the increased number of characters * that are in gl->line, and terminate the string. */ if(bufpos >= gl->ntotal) { gl->ntotal = bufpos+1; gl->line[gl->ntotal] = '\0'; }; return 0; } /*....................................................................... * Copy a given string into the input buffer, overwriting the current * contents. * * Input: * gl GetLine * The resource object of gl_get_line(). * s const char * The string to be recorded. * n int The number of characters to be copied from the * string. * bufpos int The index in the buffer at which to place the * the first character of the string. * Output: * return int 0 - OK. * 1 - String truncated to fit. */ static int gl_buffer_string(GetLine *gl, const char *s, int n, int bufpos) { int nnew; /* The number of characters actually recorded */ int i; /* * How many of the characters will fit within the buffer? */ nnew = bufpos + n <= gl->linelen ? n : (gl->linelen - bufpos); /* * Record the first nnew characters of s[] in the buffer. */ for(i=0; intotal + n > gl->linelen) return 1; /* * Move everything including and beyond the character at 'start' * towards the end of the string. */ memmove(gl->line + start + n, gl->line + start, gl->ntotal - start + 1); /* * Update the recorded size of the line. */ gl->ntotal += n; return 1; } /*....................................................................... * Remove a given number of characters from the input buffer. This * involves moving the characters that follow the removed characters to * where the removed sub-string started in the input buffer. * * Input: * gl GetLine * The resource object of gl_get_line(). * start int The first character to be removed. * n int The number of characters to remove. */ static void gl_remove_from_buffer(GetLine *gl, int start, int n) { memmove(gl->line + start, gl->line + start + n, gl->ntotal - start - n + 1); /* * Update the recorded size of the line. */ gl->ntotal -= n; } /*....................................................................... * Truncate the string in the input line buffer after a given number of * characters. * * Input: * gl GetLine * The resource object of gl_get_line(). * n int The new length of the line. * Output: * return int 0 - OK. * 1 - n > gl->linelen. */ static int gl_truncate_buffer(GetLine *gl, int n) { if(n > gl->linelen) return 1; gl->line[n] = '\0'; gl->ntotal = n; return 0; } /*....................................................................... * When the contents of gl->line[] are changed without calling any of the * gl_ buffer manipulation functions, this function must be called to * compute the length of this string, and ancillary information. * * Input: * gl GetLine * The resource object of gl_get_line(). */ static void gl_update_buffer(GetLine *gl) { int len; /* The length of the line */ /* * Measure the length of the input line. */ for(len=0; len <= gl->linelen && gl->line[len]; len++) ; /* * Just in case the string wasn't correctly terminated, do so here. */ gl->line[len] = '\0'; /* * Record the number of characters that are now in gl->line[]. */ gl->ntotal = len; /* * Ensure that the cursor stays within the bounds of the modified * input line. */ if(gl->buff_curpos > gl->ntotal) gl->buff_curpos = gl->ntotal; /* * Arrange for the input line to be redrawn. */ gl_queue_redisplay(gl); return; } /*....................................................................... * Erase the displayed input line, including its prompt, and leave the * cursor where the erased line started. Note that to allow this * function to be used when responding to a terminal resize, this * function is designed to work even if the horizontal cursor position * doesn't match the internally recorded position. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int 0 - OK. * 1 - Error. */ static int gl_erase_line(GetLine *gl) { /* * Is a line currently displayed? */ if(gl->displayed) { /* * Relative the the start of the input line, which terminal line of * the current input line is the cursor currently on? */ int cursor_line = gl->term_curpos / gl->ncolumn; /* * Move the cursor to the start of the line. */ for( ; cursor_line > 0; cursor_line--) { if(gl_print_control_sequence(gl, 1, gl->up)) return 1; }; if(gl_print_control_sequence(gl, 1, gl->bol)) return 1; /* * Clear from the start of the line to the end of the terminal. */ if(gl_print_control_sequence(gl, gl->nline, gl->clear_eod)) return 1; /* * Mark the line as no longer displayed. */ gl_line_erased(gl); }; return 0; } /*....................................................................... * Arrange for the input line to be redisplayed by gl_flush_output(), * as soon as the output queue becomes empty. * * Input: * gl GetLine * The resource object of gl_get_line(). */ static void gl_queue_redisplay(GetLine *gl) { gl->redisplay = 1; gl->pending_io = GLP_WRITE; } /*....................................................................... * Truncate the displayed input line starting from the current * terminal cursor position, and leave the cursor at the end of the * truncated line. The input-line buffer is not affected. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int 0 - OK. * 1 - Error. */ static int gl_truncate_display(GetLine *gl) { /* * Keep a record of the current terminal cursor position. */ int term_curpos = gl->term_curpos; /* * First clear from the cursor to the end of the current input line. */ if(gl_print_control_sequence(gl, 1, gl->clear_eol)) return 1; /* * If there is more than one line displayed, go to the start of the * next line and clear from there to the end of the display. Note that * we can't use clear_eod to do the whole job of clearing from the * current cursor position to the end of the terminal because * clear_eod is only defined when used at the start of a terminal line * (eg. with gnome terminals, clear_eod clears from the start of the * current terminal line, rather than from the current cursor * position). */ if(gl->term_len / gl->ncolumn > gl->term_curpos / gl->ncolumn) { if(gl_print_control_sequence(gl, 1, gl->down) || gl_print_control_sequence(gl, 1, gl->bol) || gl_print_control_sequence(gl, gl->nline, gl->clear_eod)) return 1; /* * Where is the cursor now? */ gl->term_curpos = gl->ncolumn * (term_curpos / gl->ncolumn + 1); /* * Restore the cursor position. */ gl_set_term_curpos(gl, term_curpos); }; /* * Update the recorded position of the final character. */ gl->term_len = gl->term_curpos; return 0; } /*....................................................................... * Return the set of all trappable signals. * * Input: * signals sigset_t * The set of signals will be recorded in * *signals. */ static void gl_list_trappable_signals(sigset_t *signals) { /* * Start with the set of all signals. */ sigfillset(signals); /* * Remove un-trappable signals from this set. */ #ifdef SIGKILL sigdelset(signals, SIGKILL); #endif #ifdef SIGSTOP sigdelset(signals, SIGSTOP); #endif } /*....................................................................... * Read an input line from a non-interactive input stream. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int 0 - OK * 1 - Error. */ static int gl_read_stream_line(GetLine *gl) { char c = '\0'; /* The latest character read from fp */ /* * Record the fact that we are about to read input. */ gl->pending_io = GLP_READ; /* * If we are starting a new line, reset the line-editing parameters, * and discard the previous input line. */ if(gl->endline) { gl_reset_editor(gl); gl_truncate_buffer(gl, 0); }; /* * Read one character at a time. */ while(gl->ntotal < gl->linelen && c != '\n') { /* * Attempt to read one more character. */ switch(gl_read_input(gl, &c)) { case GL_READ_OK: break; case GL_READ_EOF: /* Reached end-of-file? */ /* * If any characters were read before the end-of-file condition, * interpolate a newline character, so that the caller sees a * properly terminated line. Otherwise return an end-of-file * condition. */ if(gl->ntotal > 0) { c = '\n'; } else { gl_record_status(gl, GLR_EOF, 0); return 1; }; break; case GL_READ_BLOCKED: /* Input blocked? */ gl_record_status(gl, GLR_BLOCKED, BLOCKED_ERRNO); return 1; break; case GL_READ_ERROR: /* I/O error? */ return 1; break; }; /* * Append the character to the line buffer. */ if(gl_buffer_char(gl, c, gl->ntotal)) return 1; }; /* * Was the end of the input line reached before running out of buffer space? */ gl->endline = (c == '\n'); return 0; } /*....................................................................... * Read a single character from a non-interactive input stream. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int The character, or EOF on error. */ static int gl_read_stream_char(GetLine *gl) { char c = '\0'; /* The latest character read from fp */ int retval = EOF; /* The return value of this function */ /* * Arrange to discard any incomplete input line. */ _gl_abandon_line(gl); /* * Record the fact that we are about to read input. */ gl->pending_io = GLP_READ; /* * Attempt to read one more character. */ switch(gl_read_input(gl, &c)) { case GL_READ_OK: /* Success */ retval = c; break; case GL_READ_BLOCKED: /* The read blocked */ gl_record_status(gl, GLR_BLOCKED, BLOCKED_ERRNO); retval = EOF; /* Failure */ break; case GL_READ_EOF: /* End of file reached */ gl_record_status(gl, GLR_EOF, 0); retval = EOF; /* Failure */ break; case GL_READ_ERROR: retval = EOF; /* Failure */ break; }; return retval; } /*....................................................................... * Bind a key sequence to a given action. * * Input: * gl GetLine * The resource object of gl_get_line(). * origin GlKeyOrigin The originator of the key binding. * key const char * The key-sequence to be bound (or unbound). * action const char * The name of the action to bind the key to, * or either NULL or "" to unbind the * key-sequence. * Output: * return int 0 - OK * 1 - Error. */ int gl_bind_keyseq(GetLine *gl, GlKeyOrigin origin, const char *keyseq, const char *action) { KtBinder binder; /* The private internal equivalent of 'origin' */ /* * Check the arguments. */ if(!gl || !keyseq) { errno = EINVAL; if(gl) _err_record_msg(gl->err, "NULL argument(s)", END_ERR_MSG); return 1; }; /* * An empty action string requests that the key-sequence be unbound. * This is indicated to _kt_set_keybinding() by passing a NULL action * string, so convert an empty string to a NULL action pointer. */ if(action && *action=='\0') action = NULL; /* * Translate the public originator enumeration to the private equivalent. */ binder = origin==GL_USER_KEY ? KTB_USER : KTB_NORM; /* * Bind the action to a given key-sequence? */ if(keyseq && _kt_set_keybinding(gl->bindings, binder, keyseq, action)) { _err_record_msg(gl->err, _kt_last_error(gl->bindings), END_ERR_MSG); return 1; }; return 0; } /*....................................................................... * This is the public wrapper around the gl_clear_termina() function. * It clears the terminal and leaves the cursor at the home position. * In server I/O mode, the next call to gl_get_line() will also * redisplay the current input line. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int 0 - OK. * 1 - Error. */ int gl_erase_terminal(GetLine *gl) { sigset_t oldset; /* The signals that were blocked on entry */ /* to this function */ int status; /* The return status */ /* * Block all signals while accessing gl. */ gl_mask_signals(gl, &oldset); /* * Clear the terminal. */ status = gl_clear_screen(gl, 1, NULL); /* * Attempt to flush the clear-screen control codes to the terminal. * If this doesn't complete the job, the next call to gl_get_line() * will. */ (void) gl_flush_output(gl); /* * Restore the process signal mask before returning. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This function must be called by any function that erases the input * line. * * Input: * gl GetLine * The resource object of gl_get_line(). */ static void gl_line_erased(GetLine *gl) { gl->displayed = 0; gl->term_curpos = 0; gl->term_len = 0; } /*....................................................................... * Append a specified line to the history list. * * Input: * gl GetLine * The resource object of gl_get_line(). * line const char * The line to be added. * Output: * return int 0 - OK. * 1 - Error. */ int gl_append_history(GetLine *gl, const char *line) { sigset_t oldset; /* The signals that were blocked on entry */ /* to this function */ int status; /* The return status */ /* * Check the arguments. */ if(!gl || !line) { errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Execute the private body of the function while signals are blocked. */ status = _gl_append_history(gl, line); /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return status; } /*....................................................................... * This is the private body of the public function, gl_append_history(). * It assumes that the caller has checked its arguments and blocked the * delivery of signals. */ static int _gl_append_history(GetLine *gl, const char *line) { int status =_glh_add_history(gl->glh, line, 0); if(status) _err_record_msg(gl->err, _glh_last_error(gl->glh), END_ERR_MSG); return status; } /*....................................................................... * Enable or disable the automatic addition of newly entered lines to the * history list. * * Input: * gl GetLine * The resource object of gl_get_line(). * enable int If true, subsequently entered lines will * automatically be added to the history list * before they are returned to the caller of * gl_get_line(). If 0, the choice of how and * when to archive lines in the history list, * is left up to the calling application, which * can do so via calls to gl_append_history(). * Output: * return int 0 - OK. * 1 - Error. */ int gl_automatic_history(GetLine *gl, int enable) { sigset_t oldset; /* The signals that were blocked on entry */ /* to this function */ /* * Check the arguments. */ if(!gl) { errno = EINVAL; return 1; }; /* * Block all signals. */ if(gl_mask_signals(gl, &oldset)) return 1; /* * Execute the private body of the function while signals are blocked. */ gl->automatic_history = enable; /* * Restore the process signal mask. */ gl_unmask_signals(gl, &oldset); return 0; } /*....................................................................... * This is a public function that reads a single uninterpretted * character from the user, without displaying anything. * * Input: * gl GetLine * A resource object previously returned by * new_GetLine(). * Output: * return int The character that was read, or EOF if the read * had to be aborted (in which case you can call * gl_return_status() to find out why). */ int gl_read_char(GetLine *gl) { int retval; /* The return value of _gl_read_char() */ /* * This function can be called from application callback functions, * so check whether signals have already been masked, so that we don't * do it again, and overwrite gl->old_signal_set. */ int was_masked = gl->signals_masked; /* * Check the arguments. */ if(!gl) { errno = EINVAL; return EOF; }; /* * Temporarily block all of the signals that we have been asked to trap. */ if(!was_masked && gl_mask_signals(gl, &gl->old_signal_set)) return EOF; /* * Perform the character reading task. */ retval = _gl_read_char(gl); /* * Restore the process signal mask to how it was when this function was * first called. */ if(!was_masked) gl_unmask_signals(gl, &gl->old_signal_set); return retval; } /*....................................................................... * This is the main body of the public function gl_read_char(). */ static int _gl_read_char(GetLine *gl) { int retval = EOF; /* The return value */ int waserr = 0; /* True if an error occurs */ char c; /* The character read */ /* * This function can be called from application callback functions, * so check whether signals have already been overriden, so that we don't * overwrite the preserved signal handlers with gl_get_line()s. Also * record whether we are currently in raw I/O mode or not, so that this * can be left in the same state on leaving this function. */ int was_overriden = gl->signals_overriden; int was_raw = gl->raw_mode; /* * Also keep a record of the direction of any I/O that gl_get_line() * is awaiting, so that we can restore this status on return. */ GlPendingIO old_pending_io = gl->pending_io; /* * Assume that this call will successfully complete the input operation * until proven otherwise. */ gl_clear_status(gl); /* * If this is the first call to this function or gl_get_line(), * since new_GetLine(), complete any postponed configuration. */ if(!gl->configured) { (void) _gl_configure_getline(gl, NULL, NULL, TECLA_CONFIG_FILE); gl->configured = 1; }; /* * Before installing our signal handler functions, record the fact * that there are no pending signals. */ gl_pending_signal = -1; /* * Temporarily override the signal handlers of the calling program, * so that we can intercept signals that would leave the terminal * in a bad state. */ if(!was_overriden) waserr = gl_override_signal_handlers(gl); /* * After recording the current terminal settings, switch the terminal * into raw input mode, without redisplaying any partially entered input * line. */ if(!was_raw) waserr = waserr || _gl_raw_io(gl, 0); /* * Attempt to read the line. This will require more than one attempt if * either a current temporary input file is opened by gl_get_input_line() * or the end of a temporary input file is reached by gl_read_stream_line(). */ while(!waserr) { /* * Read a line from a non-interactive stream? */ if(gl->file_fp || !gl->is_term) { retval = gl_read_stream_char(gl); if(retval != EOF) { /* Success? */ break; } else if(gl->file_fp) { /* End of temporary input file? */ gl_revert_input(gl); gl_record_status(gl, GLR_NEWLINE, 0); } else { /* An error? */ waserr = 1; break; }; }; /* * Read from the terminal? Note that the above if() block may have * changed gl->file_fp, so it is necessary to retest it here, rather * than using an else statement. */ if(!gl->file_fp && gl->is_term) { /* * Flush any pending output to the terminal before waiting * for the user to type a character. */ if(_glq_char_count(gl->cq) > 0 && gl_flush_output(gl)) { retval = EOF; /* * Read one character. Don't append it to the key buffer, since * this would subseuqnely appear as bogus input to the line editor. */ } else if(gl_read_terminal(gl, 0, &c) == 0) { /* * Record the character for return. */ retval = c; /* * In this mode, count each character as being a new key-sequence. */ gl->keyseq_count++; /* * Delete the character that was read, from the key-press buffer. */ gl_discard_chars(gl, 1); }; if(retval==EOF) waserr = 1; else break; }; }; /* * If an error occurred, but gl->rtn_status is still set to * GLR_NEWLINE, change the status to GLR_ERROR. Otherwise * leave it at whatever specific value was assigned by the function * that aborted input. This means that only functions that trap * non-generic errors have to remember to update gl->rtn_status * themselves. */ if(waserr && gl->rtn_status == GLR_NEWLINE) gl_record_status(gl, GLR_ERROR, errno); /* * Restore terminal settings, if they were changed by this function. */ if(!was_raw && gl->io_mode != GL_SERVER_MODE) _gl_normal_io(gl); /* * Restore the signal handlers, if they were overriden by this function. */ if(!was_overriden) gl_restore_signal_handlers(gl); /* * If this function gets aborted early, the errno value associated * with the event that caused this to happen is recorded in * gl->rtn_errno. Since errno may have been overwritten by cleanup * functions after this, restore its value to the value that it had * when the error condition occured, so that the caller can examine it * to find out what happened. */ errno = gl->rtn_errno; /* * Error conditions are signalled to the caller, by setting the returned * character to EOF. */ if(gl->rtn_status != GLR_NEWLINE) retval = EOF; /* * Restore the indication of what direction of I/O gl_get_line() * was awaiting before this call. */ gl->pending_io = old_pending_io; /* * Return the acquired character. */ return retval; } /*....................................................................... * Reset the GetLine completion status. This function should be called * at the start of gl_get_line(), gl_read_char() and gl_query_char() * to discard the completion status and non-zero errno value of any * preceding calls to these functions. * * Input: * gl GetLine * The resource object of this module. */ static void gl_clear_status(GetLine *gl) { gl_record_status(gl, GLR_NEWLINE, 0); } /*....................................................................... * When an error or other event causes gl_get_line() to return, this * function should be called to record information about what * happened, including the value of errno and the value that * gl_return_status() should return. * * Input: * gl GetLine * The resource object of this module. * rtn_status GlReturnStatus The completion status. To clear a * previous abnormal completion status, * specify GLR_NEWLINE (this is what * gl_clear_status() does). * rtn_errno int The associated value of errno. */ static void gl_record_status(GetLine *gl, GlReturnStatus rtn_status, int rtn_errno) { /* * If rtn_status==GLR_NEWLINE, then this resets the completion status, so we * should always heed this. Otherwise, only record the first abnormal * condition that occurs after such a reset. */ if(rtn_status == GLR_NEWLINE || gl->rtn_status == GLR_NEWLINE) { gl->rtn_status = rtn_status; gl->rtn_errno = rtn_errno; }; } genometools-1.5.1/src/external/libtecla-1.6.1/getline.h000066400000000000000000000060221211610345200224750ustar00rootroot00000000000000#ifndef getline_h #define getline_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * Set the name of the getline configuration file. */ #define TECLA_CONFIG_FILE "~/.teclarc" /* * The following macro returns non-zero if a character is * a control character. */ #define IS_CTRL_CHAR(c) ((unsigned char)(c) < ' ' || (unsigned char)(c)=='\177') /* * The following macro returns non-zero if a character is * a meta character. */ #define IS_META_CHAR(c) (((unsigned char)(c) & 0x80) && !isprint((int)(unsigned char)(c))) /* * Return the character that would be produced by pressing the * specified key plus the control key. */ #define MAKE_CTRL(c) ((c)=='?' ? '\177' : ((unsigned char)toupper(c) & ~0x40)) /* * Return the character that would be produced by pressing the * specified key plus the meta key. */ #define MAKE_META(c) ((unsigned char)(c) | 0x80) /* * Given a binary control character, return the character that * had to be pressed at the same time as the control key. */ #define CTRL_TO_CHAR(c) (toupper((unsigned char)(c) | 0x40)) /* * Given a meta character, return the character that was pressed * at the same time as the meta key. */ #define META_TO_CHAR(c) ((unsigned char)(c) & ~0x80) /* * Specify the string of characters other than the alphanumeric characters, * that are to be considered parts of words. */ #define GL_WORD_CHARS "_*\?\\[]" /* * Define the escape character, both as a string and as a character. */ #define GL_ESC_STR "\033" #define GL_ESC_CHAR '\033' #endif genometools-1.5.1/src/external/libtecla-1.6.1/hash.c000066400000000000000000000576101211610345200217750ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include #include #include "hash.h" #include "strngmem.h" #include "freelist.h" /* * The following container object contains free-lists to be used * for allocation of HashTable containers and nodes. */ struct HashMemory { FreeList *hash_memory; /* HashTable free-list */ FreeList *node_memory; /* HashNode free-list */ StringMem *string_memory; /* Memory used to allocate hash strings */ }; /* * Define a hash symbol-table entry. * See symbol.h for the definition of the Symbol container type. */ typedef struct HashNode HashNode; struct HashNode { Symbol symbol; /* The symbol stored in the hash-entry */ HashNode *next; /* The next hash-table entry in a bucket list */ }; /* * Each hash-table bucket contains a linked list of entries that * hash to the same bucket. */ typedef struct { HashNode *head; /* The head of the bucket hash-node list */ int count; /* The number of entries in the list */ } HashBucket; /* * A hash-table consists of 'size' hash buckets. * Note that the HashTable typedef for this struct is contained in hash.h. */ struct HashTable { HashMemory *mem; /* HashTable free-list */ int internal_mem; /* True if 'mem' was allocated by _new_HashTable() */ int case_sensitive; /* True if case is significant in lookup keys */ int size; /* The number of hash buckets */ HashBucket *bucket; /* An array of 'size' hash buckets */ int (*keycmp)(const char *, const char *); /* Key comparison function */ void *app_data; /* Application-provided data */ HASH_DEL_FN(*del_fn); /* Application-provided 'app_data' destructor */ }; static HashNode *_del_HashNode(HashTable *hash, HashNode *node); static HashNode *_new_HashNode(HashTable *hash, const char *name, int code, void (*fn)(void), void *data, SYM_DEL_FN(*del_fn)); static HashNode *_find_HashNode(HashTable *hash, HashBucket *bucket, const char *name, HashNode **prev); static HashBucket *_find_HashBucket(HashTable *hash, const char *name); static int _ht_lower_strcmp(const char *node_key, const char *look_key); static int _ht_strcmp(const char *node_key, const char *look_key); /*....................................................................... * Allocate a free-list for use in allocating hash tables and their nodes. * * Input: * list_count int The number of HashTable containers per free-list * block. * node_count int The number of HashTable nodes per free-list block. * Output: * return HashMemory * The new free-list for use in allocating hash tables * and their nodes. */ HashMemory *_new_HashMemory(int hash_count, int node_count) { HashMemory *mem; /* * Allocate the free-list container. */ mem = (HashMemory *) malloc(sizeof(HashMemory)); if(!mem) { errno = ENOMEM; return NULL; }; /* * Initialize the container at least up to the point at which it can * safely be passed to _del_HashMemory(). */ mem->hash_memory = NULL; mem->node_memory = NULL; mem->string_memory = NULL; /* * Allocate the two free-lists. */ mem->hash_memory = _new_FreeList(sizeof(HashTable), hash_count); if(!mem->hash_memory) return _del_HashMemory(mem, 1); mem->node_memory = _new_FreeList(sizeof(HashNode), node_count); if(!mem->node_memory) return _del_HashMemory(mem, 1); mem->string_memory = _new_StringMem(64); if(!mem->string_memory) return _del_HashMemory(mem, 1); /* * Return the free-list container. */ return mem; } /*....................................................................... * Delete a HashTable free-list. An error will be displayed if the list is * still in use and the deletion will be aborted. * * Input: * mem HashMemory * The free-list container to be deleted. * force int If force==0 then _del_HashMemory() will complain * and refuse to delete the free-list if any * of nodes have not been returned to the free-list. * If force!=0 then _del_HashMemory() will not check * whether any nodes are still in use and will * always delete the list. * Output: * return HashMemory * Always NULL (even if the memory could not be * deleted). */ HashMemory *_del_HashMemory(HashMemory *mem, int force) { if(mem) { if(!force && (_busy_FreeListNodes(mem->hash_memory) > 0 || _busy_FreeListNodes(mem->node_memory) > 0)) { errno = EBUSY; return NULL; }; mem->hash_memory = _del_FreeList(mem->hash_memory, force); mem->node_memory = _del_FreeList(mem->node_memory, force); mem->string_memory = _del_StringMem(mem->string_memory, force); free(mem); }; return NULL; } /*....................................................................... * Create a new hash table. * * Input: * mem HashMemory * An optional free-list for use in allocating * HashTable containers and nodes. See explanation * in hash.h. If you are going to allocate more * than one hash table, then it will be more * efficient to allocate a single free-list for * all of them than to force each hash table * to allocate its own private free-list. * size int The size of the hash table. Best performance * will be acheived if this is a prime number. * hcase HashCase Specify how symbol case is considered when * looking up symbols, from: * IGNORE_CASE - Upper and lower case versions * of a letter are treated as * being identical. * HONOUR_CASE - Upper and lower case versions * of a letter are treated as * being distinct. * characters in a lookup name is significant. * app_data void * Optional application data to be registered * to the table. This is presented to user * provided SYM_DEL_FN() symbol destructors along * with the symbol data. * del_fn() HASH_DEL_FN(*) If you want app_data to be free'd when the * hash-table is destroyed, register a suitable * destructor function here. * Output: * return HashTable * The new hash table, or NULL on error. */ HashTable *_new_HashTable(HashMemory *mem, int size, HashCase hcase, void *app_data, HASH_DEL_FN(*del_fn)) { HashTable *hash; /* The table to be returned */ int allocate_mem = !mem; /* True if mem should be internally allocated */ int i; /* * Check arguments. */ if(size <= 0) { errno = EINVAL; return NULL; }; /* * Allocate an internal free-list? */ if(allocate_mem) { mem = _new_HashMemory(1, 100); if(!mem) return NULL; }; /* * Allocate the container. */ hash = (HashTable *) _new_FreeListNode(mem->hash_memory); if(!hash) { errno = ENOMEM; if(allocate_mem) mem = _del_HashMemory(mem, 1); return NULL; }; /* * Before attempting any operation that might fail, initialize * the container at least up to the point at which it can safely * be passed to _del_HashTable(). */ hash->mem = mem; hash->internal_mem = allocate_mem; hash->case_sensitive = hcase==HONOUR_CASE; hash->size = size; hash->bucket = NULL; hash->keycmp = hash->case_sensitive ? _ht_strcmp : _ht_lower_strcmp; hash->app_data = app_data; hash->del_fn = del_fn; /* * Allocate the array of 'size' hash buckets. */ hash->bucket = (HashBucket *) malloc(sizeof(HashBucket) * size); if(!hash->bucket) { errno = ENOMEM; return _del_HashTable(hash); }; /* * Initialize the bucket array. */ for(i=0; ibucket + i; b->head = NULL; b->count = 0; }; /* * The table is ready for use - albeit currently empty. */ return hash; } /*....................................................................... * Delete a hash-table. * * Input: * hash HashTable * The hash table to be deleted. * Output: * return HashTable * The deleted hash table (always NULL). */ HashTable *_del_HashTable(HashTable *hash) { if(hash) { /* * Clear and delete the bucket array. */ if(hash->bucket) { _clear_HashTable(hash); free(hash->bucket); hash->bucket = NULL; }; /* * Delete application data. */ if(hash->del_fn) hash->del_fn(hash->app_data); /* * If the hash table was allocated from an internal free-list, delete * it and the hash table by deleting the free-list. Otherwise just * return the hash-table to the external free-list. */ if(hash->internal_mem) _del_HashMemory(hash->mem, 1); else hash = (HashTable *) _del_FreeListNode(hash->mem->hash_memory, hash); }; return NULL; } /*....................................................................... * Create and install a new entry in a hash table. If an entry with the * same name already exists, replace its contents with the new data. * * Input: * hash HashTable * The hash table to insert the symbol into. * name const char * The name to tag the entry with. * code int An application-specific code to be stored in * the entry. * fn void (*)(void) An application-specific function to be stored * in the entry. * data void * An application-specific pointer to data to be * associated with the entry, or NULL if not * relevant. * del_fn SYM_DEL_FN(*) An optional destructor function. When the * symbol is deleted this function will be called * with the 'code' and 'data' arguments given * above. Any application data that was registered * to the table via the app_data argument of * _new_HashTable() will also be passed. * Output: * return HashNode * The new entry, or NULL if there was insufficient * memory or the arguments were invalid. */ Symbol *_new_HashSymbol(HashTable *hash, const char *name, int code, void (*fn)(void), void *data, SYM_DEL_FN(*del_fn)) { HashBucket *bucket; /* The hash-bucket associated with the name */ HashNode *node; /* The new node */ /* * Check arguments. */ if(!hash || !name) { errno = EINVAL; return NULL; }; /* * Get the hash bucket of the specified name. */ bucket = _find_HashBucket(hash, name); /* * See if a node with the same name already exists. */ node = _find_HashNode(hash, bucket, name, NULL); /* * If found, delete its contents by calling the user-supplied * destructor function, if provided. */ if(node) { if(node->symbol.data && node->symbol.del_fn) { node->symbol.data = node->symbol.del_fn(hash->app_data, node->symbol.code, node->symbol.data); }; /* * Allocate a new node if necessary. */ } else { node = _new_HashNode(hash, name, code, fn, data, del_fn); if(!node) return NULL; }; /* * Install the node at the head of the hash-bucket list. */ node->next = bucket->head; bucket->head = node; bucket->count++; return &node->symbol; } /*....................................................................... * Remove and delete a given hash-table entry. * * Input: * hash HashTable * The hash table to find the symbol in. * name const char * The name of the entry. * Output: * return HashNode * The deleted hash node (always NULL). */ Symbol *_del_HashSymbol(HashTable *hash, const char *name) { if(hash && name) { HashBucket *bucket = _find_HashBucket(hash, name); HashNode *prev; /* The node preceding the located node */ HashNode *node = _find_HashNode(hash, bucket, name, &prev); /* * Node found? */ if(node) { /* * Remove the node from the bucket list. */ if(prev) { prev->next = node->next; } else { bucket->head = node->next; }; /* * Record the loss of a node. */ bucket->count--; /* * Delete the node. */ (void) _del_HashNode(hash, node); }; }; return NULL; } /*....................................................................... * Look up a symbol in the hash table. * * Input: * hash HashTable * The table to look up the string in. * name const char * The name of the symbol to look up. * Output: * return Symbol * The located hash-table symbol, or NULL if not * found. */ Symbol *_find_HashSymbol(HashTable *hash, const char *name) { HashBucket *bucket; /* The hash-table bucket associated with name[] */ HashNode *node; /* The hash-table node of the requested symbol */ /* * Check arguments. */ if(!hash) return NULL; /* * Nothing to lookup? */ if(!name) return NULL; /* * Hash the name to a hash-table bucket. */ bucket = _find_HashBucket(hash, name); /* * Find the bucket entry that exactly matches the name. */ node = _find_HashNode(hash, bucket, name, NULL); if(!node) return NULL; return &node->symbol; } /*....................................................................... * Private function used to allocate a hash-table node. * The caller is responsible for checking that the specified symbol * is unique and for installing the returned entry in the table. * * Input: * hash HashTable * The table to allocate the node for. * name const char * The name of the new entry. * code int A user-supplied context code. * fn void (*)(void) A user-supplied function pointer. * data void * A user-supplied data pointer. * del_fn SYM_DEL_FN(*) An optional 'data' destructor function. * Output: * return HashNode * The new node, or NULL on error. */ static HashNode *_new_HashNode(HashTable *hash, const char *name, int code, void (*fn)(void), void *data, SYM_DEL_FN(*del_fn)) { HashNode *node; /* The new node */ /* * Allocate the new node from the free list. */ node = (HashNode *) _new_FreeListNode(hash->mem->node_memory); if(!node) return NULL; /* * Before attempting any operation that might fail, initialize the * contents of 'node' at least up to the point at which it can be * safely passed to _del_HashNode(). */ node->symbol.name = NULL; node->symbol.code = code; node->symbol.fn = fn; node->symbol.data = data; node->symbol.del_fn = del_fn; node->next = NULL; /* * Allocate a copy of 'name'. */ node->symbol.name = _new_StringMemString(hash->mem->string_memory, strlen(name) + 1); if(!node->symbol.name) return _del_HashNode(hash, node); /* * If character-case is insignificant in the current table, convert the * name to lower case while copying it. */ if(hash->case_sensitive) { strcpy(node->symbol.name, name); } else { const char *src = name; char *dst = node->symbol.name; for( ; *src; src++,dst++) *dst = tolower(*src); *dst = '\0'; }; return node; } /*....................................................................... * Private function used to delete a hash-table node. * The node must have been removed from its list before calling this * function. * * Input: * hash HashTable * The table for which the node was originally * allocated. * node HashNode * The node to be deleted. * Output: * return HashNode * The deleted node (always NULL). */ static HashNode *_del_HashNode(HashTable *hash, HashNode *node) { if(node) { node->symbol.name = _del_StringMemString(hash->mem->string_memory, node->symbol.name); /* * Call the user-supplied data-destructor if provided. */ if(node->symbol.data && node->symbol.del_fn) node->symbol.data = node->symbol.del_fn(hash->app_data, node->symbol.code, node->symbol.data); /* * Return the node to the free-list. */ node->next = NULL; node = (HashNode *) _del_FreeListNode(hash->mem->node_memory, node); }; return NULL; } /*....................................................................... * Private function to locate the hash bucket associated with a given * name. * * This uses a hash-function described in the dragon-book * ("Compilers - Principles, Techniques and Tools", by Aho, Sethi and * Ullman; pub. Adison Wesley) page 435. * * Input: * hash HashTable * The table to look up the string in. * name const char * The name of the symbol to look up. * Output: * return HashBucket * The located hash-bucket. */ static HashBucket *_find_HashBucket(HashTable *hash, const char *name) { unsigned const char *kp; unsigned long h = 0L; if(hash->case_sensitive) { for(kp=(unsigned const char *) name; *kp; kp++) h = 65599UL * h + *kp; /* 65599 is a prime close to 2^16 */ } else { for(kp=(unsigned const char *) name; *kp; kp++) h = 65599UL * h + tolower((int)*kp); /* 65599 is a prime close to 2^16 */ }; return hash->bucket + (h % hash->size); } /*....................................................................... * Search for a given name in the entries of a given bucket. * * Input: * hash HashTable * The hash-table being searched. * bucket HashBucket * The bucket to search (use _find_HashBucket()). * name const char * The name to search for. * Output: * prev HashNode ** If prev!=NULL then the pointer to the node * preceding the located node in the list will * be recorded in *prev. This will be NULL either * if the name is not found or the located node is * at the head of the list of entries. * return HashNode * The located hash-table node, or NULL if not * found. */ static HashNode *_find_HashNode(HashTable *hash, HashBucket *bucket, const char *name, HashNode **prev) { HashNode *last; /* The previously searched node */ HashNode *node; /* The node that is being searched */ /* * Search the list for a node containing the specified name. */ for(last=NULL, node=bucket->head; node && hash->keycmp(node->symbol.name, name)!=0; last = node, node=node->next) ; if(prev) *prev = node ? last : NULL; return node; } /*....................................................................... * When hash->case_sensitive is zero this function is called * in place of strcmp(). In such cases the hash-table names are stored * as lower-case versions of the original strings so this function * performs the comparison against lower-case copies of the characters * of the string being compared. * * Input: * node_key const char * The lower-case hash-node key being compared * against. * look_key const char * The lookup key. * Output: * return int <0 if node_key < look_key. * 0 if node_key == look_key. * >0 if node_key > look_key. */ static int _ht_lower_strcmp(const char *node_key, const char *look_key) { int cn; /* The latest character from node_key[] */ int cl; /* The latest character from look_key[] */ do { cn = *node_key++; cl = *look_key++; } while(cn && cn==tolower(cl)); return cn - tolower(cl); } /*....................................................................... * This is a wrapper around strcmp for comparing hash-keys in a case * sensitive manner. The reason for having this wrapper, instead of using * strcmp() directly, is to make some C++ compilers happy. The problem * is that when the library is compiled with a C++ compiler, the * declaration of the comparison function is a C++ declaration, whereas * strcmp() is a pure C function and thus although it appears to have the * same declaration, the compiler disagrees. * * Input: * node_key char * The lower-case hash-node key being compared against. * look_key char * The lookup key. * Output: * return int <0 if node_key < look_key. * 0 if node_key == look_key. * >0 if node_key > look_key. */ static int _ht_strcmp(const char *node_key, const char *look_key) { return strcmp(node_key, look_key); } /*....................................................................... * Empty a hash-table by deleting all of its entries. * * Input: * hash HashTable * The hash table to clear. * Output: * return int 0 - OK. * 1 - Invalid arguments. */ int _clear_HashTable(HashTable *hash) { int i; /* * Check the arguments. */ if(!hash) return 1; /* * Clear the contents of the bucket array. */ for(i=0; isize; i++) { HashBucket *bucket = hash->bucket + i; /* * Delete the list of active hash nodes from the bucket. */ HashNode *node = bucket->head; while(node) { HashNode *next = node->next; (void) _del_HashNode(hash, node); node = next; }; /* * Mark the bucket as empty. */ bucket->head = NULL; bucket->count = 0; }; return 0; } /*....................................................................... * Execute a given function on each entry of a hash table, returning * before completion if the the specified function returns non-zero. * * Input: * hash HashTable * The table to traverse. * scan_fn HASH_SCAN_FN(*) The function to call. * context void * Optional caller-specific context data * to be passed to scan_fn(). * Output: * return int 0 - OK. * 1 - Either the arguments were invalid, or * scan_fn() returned non-zero at some * point. */ int _scan_HashTable(HashTable *hash, HASH_SCAN_FN(*scan_fn), void *context) { int i; /* * Check the arguments. */ if(!hash || !scan_fn) return 1; /* * Iterate through the buckets of the table. */ for(i=0; isize; i++) { HashBucket *bucket = hash->bucket + i; HashNode *node; /* * Iterate through the list of symbols that fall into bucket i, * passing each one to the caller-specified function. */ for(node=bucket->head; node; node=node->next) { if(scan_fn(&node->symbol, context)) return 1; }; }; return 0; } genometools-1.5.1/src/external/libtecla-1.6.1/hash.h000066400000000000000000000134641211610345200220010ustar00rootroot00000000000000#ifndef hash_h #define hash_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * The following macro can be used to prototype or define a * function that deletes the data of a symbol-table entry. * * Input: * app_data void * The _new_HashTable() app_data argument. * code int The Symbol::code argument. * sym_data void * The Symbol::data argument to be deleted. * Output: * return void * The deleted data (always return NULL). */ #define SYM_DEL_FN(fn) void *(fn)(void *app_data, int code, void *sym_data) /* * The following macro can be used to prototype or define a * function that deletes the application-data of a hash-table. * * Input: * data void * The _new_HashTable() 'app_data' argument to be * deleted. * Output: * return void * The deleted data (always return NULL). */ #define HASH_DEL_FN(fn) void *(fn)(void *app_data) /* * The following is a container for recording the context * of a symbol in a manner that is independant of the particular * symbol-table implementation. Each hash-table entry contains * the following user supplied parameters: * * 1. An optional integral parameter 'code'. This is useful for * enumerating a symbol or for describing what type of data * or function is stored in the symbol. * * 2. An optional generic function pointer. This is useful for * associating functions with names. The user is responsible * for casting between the generic function type and the * actual function type. The code field could be used to * enumerate what type of function to cast to. * * 3. An optional generic pointer to a static or heap-allocated * object. It is up to the user to cast this back to the * appropriate object type. Again, the code field could be used * to describe what type of object is stored there. * If the object is dynamically allocated and should be discarded * when the symbol is deleted from the symbol table, send a * destructor function to have it deleted automatically. */ typedef struct { char *name; /* The name of the symbol */ int code; /* Application supplied integral code */ void (*fn)(void); /* Application supplied generic function */ void *data; /* Application supplied context data */ SYM_DEL_FN(*del_fn); /* Data destructor function */ } Symbol; /* * HashNode's and HashTable's are small objects. Separately allocating * many such objects would normally cause memory fragmentation. To * counter this, HashMemory objects are used. These contain * dedicated free-lists formed from large dynamically allocated arrays * of objects. One HashMemory object can be shared between multiple hash * tables (within a single thread). */ typedef struct HashMemory HashMemory; /* Create a free-list for allocation of hash tables and their nodes */ HashMemory *_new_HashMemory(int hash_count, int node_count); /* Delete a redundant free-list if not being used */ HashMemory *_del_HashMemory(HashMemory *mem, int force); /* * Declare an alias for the private HashTable structure defined in * hash.c. */ typedef struct HashTable HashTable; /* * Enumerate case-sensitivity options. */ typedef enum { IGNORE_CASE, /* Ignore case when looking up symbols */ HONOUR_CASE /* Honor case when looking up symbols */ } HashCase; /* Create a new hash-table */ HashTable *_new_HashTable(HashMemory *mem, int size, HashCase hcase, void *app_data, HASH_DEL_FN(*del_fn)); /* Delete a reference to a hash-table */ HashTable *_del_HashTable(HashTable *hash); /* Add an entry to a hash table */ Symbol *_new_HashSymbol(HashTable *hash, const char *key, int code, void (*fn)(void), void *data, SYM_DEL_FN(*del_fn)); /* Remove and delete all the entries in a given hash table */ int _clear_HashTable(HashTable *hash); /* Remove and delete a given hash-table entry */ Symbol *_del_HashSymbol(HashTable *hash, const char *key); /* Lookup a given hash-table entry */ Symbol *_find_HashSymbol(HashTable *hash, const char *key); /* Execute a given function on each entry of a hash table, returning */ /* before completion if the specified function returns non-zero. */ #define HASH_SCAN_FN(fn) int (fn)(Symbol *sym, void *context) int _scan_HashTable(HashTable *hash, HASH_SCAN_FN(*scan_fn), void *context); #endif genometools-1.5.1/src/external/libtecla-1.6.1/history.c000066400000000000000000002462041211610345200225520ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include #include #include #include "ioutil.h" #include "history.h" #include "freelist.h" #include "errmsg.h" /* * History lines are split into sub-strings of GLH_SEG_SIZE * characters. To avoid wasting space in the GlhLineSeg structure, * this should be a multiple of the size of a pointer. */ #define GLH_SEG_SIZE 16 /* * GlhLineSeg structures contain fixed sized segments of a larger * string. These are linked into lists to record strings, with all but * the last segment having GLH_SEG_SIZE characters. The last segment * of a string is terminated within the GLH_SEG_SIZE characters with a * '\0'. */ typedef struct GlhLineSeg GlhLineSeg; struct GlhLineSeg { GlhLineSeg *next; /* The next sub-string of the history line */ char s[GLH_SEG_SIZE]; /* The sub-string. Beware that only the final */ /* substring of a line, as indicated by 'next' */ /* being NULL, is '\0' terminated. */ }; /* * History lines are recorded in a hash table, such that repeated * lines are stored just once. * * Start by defining the size of the hash table. This should be a * prime number. */ #define GLH_HASH_SIZE 113 typedef struct GlhHashBucket GlhHashBucket; /* * Each history line will be represented in the hash table by a * structure of the following type. */ typedef struct GlhHashNode GlhHashNode; struct GlhHashNode { GlhHashBucket *bucket; /* The parent hash-table bucket of this node */ GlhHashNode *next; /* The next in the list of nodes within the */ /* parent hash-table bucket. */ GlhLineSeg *head; /* The list of sub-strings which make up a line */ int len; /* The length of the line, excluding any '\0' */ int used; /* The number of times this string is pointed to by */ /* the time-ordered list of history lines. */ int reported; /* A flag that is used when searching to ensure that */ /* a line isn't reported redundantly. */ }; /* * How many new GlhHashNode elements should be allocated at a time? */ #define GLH_HASH_INCR 50 static int _glh_is_line(GlhHashNode *hash, const char *line, size_t n); static int _glh_line_matches_prefix(GlhHashNode *line, GlhHashNode *prefix); static void _glh_return_line(GlhHashNode *hash, char *line, size_t dim); /* * All history lines which hash to a given bucket in the hash table, are * recorded in a structure of the following type. */ struct GlhHashBucket { GlhHashNode *lines; /* The list of history lines which fall in this bucket */ }; static GlhHashBucket *glh_find_bucket(GlHistory *glh, const char *line, size_t n); static GlhHashNode *glh_find_hash_node(GlhHashBucket *bucket, const char *line, size_t n); typedef struct { FreeList *node_mem; /* A free-list of GlhHashNode structures */ GlhHashBucket bucket[GLH_HASH_SIZE]; /* The buckets of the hash table */ } GlhLineHash; /* * GlhLineNode's are used to record history lines in time order. */ typedef struct GlhLineNode GlhLineNode; struct GlhLineNode { long id; /* The unique identifier of this history line */ time_t timestamp; /* The time at which the line was archived */ unsigned group; /* The identifier of the history group to which the */ /* the line belongs. */ GlhLineNode *next; /* The next youngest line in the list */ GlhLineNode *prev; /* The next oldest line in the list */ GlhHashNode *line; /* The hash-table entry of the history line */ }; /* * The number of GlhLineNode elements per freelist block. */ #define GLH_LINE_INCR 100 /* * Encapsulate the time-ordered list of historical lines. */ typedef struct { FreeList *node_mem; /* A freelist of GlhLineNode objects */ GlhLineNode *head; /* The oldest line in the list */ GlhLineNode *tail; /* The newest line in the list */ } GlhLineList; /* * The _glh_lookup_history() returns copies of history lines in a * dynamically allocated array. This array is initially allocated * GLH_LOOKUP_SIZE bytes. If subsequently this size turns out to be * too small, realloc() is used to increase its size to the required * size plus GLH_LOOKUP_MARGIN. The idea of the later parameter is to * reduce the number of realloc() operations needed. */ #define GLH_LBUF_SIZE 300 #define GLH_LBUF_MARGIN 100 /* * Encapsulate all of the resources needed to store historical input lines. */ struct GlHistory { ErrMsg *err; /* The error-reporting buffer */ GlhLineSeg *buffer; /* An array of sub-line nodes to be partitioned */ /* into lists of sub-strings recording input lines. */ int nbuff; /* The allocated dimension of buffer[] */ GlhLineSeg *unused; /* The list of free nodes in buffer[] */ GlhLineList list; /* A time ordered list of history lines */ GlhLineNode *recall; /* The last line recalled, or NULL if no recall */ /* session is currently active. */ GlhLineNode *id_node;/* The node at which the last ID search terminated */ GlhLineHash hash; /* A hash-table of reference-counted history lines */ GlhHashNode *prefix; /* A pointer to a line containing the prefix that */ /* is being searched for. Note that if prefix==NULL */ /* and prefix_len>0, this means that no line in */ /* the buffer starts with the requested prefix. */ int prefix_len; /* The length of the prefix being searched for. */ char *lbuf; /* The array in which _glh_lookup_history() returns */ /* history lines */ int lbuf_dim; /* The allocated size of lbuf[] */ int nbusy; /* The number of line segments in buffer[] that are */ /* currently being used to record sub-lines */ int nfree; /* The number of line segments in buffer that are */ /* not currently being used to record sub-lines */ unsigned long seq; /* The next ID to assign to a line node */ unsigned group; /* The identifier of the current history group */ int nline; /* The number of lines currently in the history list */ int max_lines; /* Either -1 or a ceiling on the number of lines */ int enable; /* If false, ignore history additions and lookups */ }; #ifndef WITHOUT_FILE_SYSTEM static int _glh_cant_load_history(GlHistory *glh, const char *filename, int lineno, const char *message, FILE *fp); static int _glh_cant_save_history(GlHistory *glh, const char *message, const char *filename, FILE *fp); static int _glh_write_timestamp(FILE *fp, time_t timestamp); static int _glh_decode_timestamp(char *string, char **endp, time_t *timestamp); #endif static void _glh_discard_line(GlHistory *glh, GlhLineNode *node); static GlhLineNode *_glh_find_id(GlHistory *glh, GlhLineID id); static GlhHashNode *_glh_acquire_copy(GlHistory *glh, const char *line, size_t n); static GlhHashNode *_glh_discard_copy(GlHistory *glh, GlhHashNode *hnode); static int _glh_prepare_for_recall(GlHistory *glh, char *line); /* * The following structure and functions are used to iterate through * the characters of a segmented history line. */ typedef struct { GlhLineSeg *seg; /* The line segment that the next character will */ /* be returned from. */ int posn; /* The index in the above line segment, containing */ /* the next unread character. */ char c; /* The current character in the input line */ } GlhLineStream; static void glh_init_stream(GlhLineStream *str, GlhHashNode *line); static void glh_step_stream(GlhLineStream *str); /* * See if search prefix contains any globbing characters. */ static int glh_contains_glob(GlhHashNode *prefix); /* * Match a line against a search pattern. */ static int glh_line_matches_glob(GlhLineStream *lstr, GlhLineStream *pstr); static int glh_matches_range(char c, GlhLineStream *pstr); /*....................................................................... * Create a line history maintenance object. * * Input: * buflen size_t The number of bytes to allocate to the * buffer that is used to record all of the * most recent lines of user input that will fit. * If buflen==0, no buffer will be allocated. * Output: * return GlHistory * The new object, or NULL on error. */ GlHistory *_new_GlHistory(size_t buflen) { GlHistory *glh; /* The object to be returned */ int i; /* * Allocate the container. */ glh = (GlHistory *) malloc(sizeof(GlHistory)); if(!glh) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to _del_GlHistory(). */ glh->err = NULL; glh->buffer = NULL; glh->nbuff = (buflen+GLH_SEG_SIZE-1) / GLH_SEG_SIZE; glh->unused = NULL; glh->list.node_mem = NULL; glh->list.head = glh->list.tail = NULL; glh->recall = NULL; glh->id_node = NULL; glh->hash.node_mem = NULL; for(i=0; ihash.bucket[i].lines = NULL; glh->prefix = NULL; glh->lbuf = NULL; glh->lbuf_dim = 0; glh->nbusy = 0; glh->nfree = glh->nbuff; glh->seq = 0; glh->group = 0; glh->nline = 0; glh->max_lines = -1; glh->enable = 1; /* * Allocate a place to record error messages. */ glh->err = _new_ErrMsg(); if(!glh->err) return _del_GlHistory(glh); /* * Allocate the buffer, if required. */ if(glh->nbuff > 0) { glh->nbuff = glh->nfree; glh->buffer = (GlhLineSeg *) malloc(sizeof(GlhLineSeg) * glh->nbuff); if(!glh->buffer) { errno = ENOMEM; return _del_GlHistory(glh); }; /* * All nodes of the buffer are currently unused, so link them all into * a list and make glh->unused point to the head of this list. */ glh->unused = glh->buffer; for(i=0; inbuff-1; i++) { GlhLineSeg *seg = glh->unused + i; seg->next = seg + 1; }; glh->unused[i].next = NULL; }; /* * Allocate the GlhLineNode freelist. */ glh->list.node_mem = _new_FreeList(sizeof(GlhLineNode), GLH_LINE_INCR); if(!glh->list.node_mem) return _del_GlHistory(glh); /* * Allocate the GlhHashNode freelist. */ glh->hash.node_mem = _new_FreeList(sizeof(GlhLineNode), GLH_HASH_INCR); if(!glh->hash.node_mem) return _del_GlHistory(glh); /* * Allocate the array that _glh_lookup_history() uses to return a * copy of a given history line. This will be resized when necessary. */ glh->lbuf_dim = GLH_LBUF_SIZE; glh->lbuf = (char *) malloc(glh->lbuf_dim); if(!glh->lbuf) { errno = ENOMEM; return _del_GlHistory(glh); }; return glh; } /*....................................................................... * Delete a GlHistory object. * * Input: * glh GlHistory * The object to be deleted. * Output: * return GlHistory * The deleted object (always NULL). */ GlHistory *_del_GlHistory(GlHistory *glh) { if(glh) { /* * Delete the error-message buffer. */ glh->err = _del_ErrMsg(glh->err); /* * Delete the buffer. */ if(glh->buffer) { free(glh->buffer); glh->buffer = NULL; glh->unused = NULL; }; /* * Delete the freelist of GlhLineNode's. */ glh->list.node_mem = _del_FreeList(glh->list.node_mem, 1); /* * The contents of the list were deleted by deleting the freelist. */ glh->list.head = NULL; glh->list.tail = NULL; /* * Delete the freelist of GlhHashNode's. */ glh->hash.node_mem = _del_FreeList(glh->hash.node_mem, 1); /* * Delete the lookup buffer. */ if(glh->lbuf) free(glh->lbuf); /* * Delete the container. */ free(glh); }; return NULL; } /*....................................................................... * Append a new line to the history list, deleting old lines to make * room, if needed. * * Input: * glh GlHistory * The input-line history maintenance object. * line char * The line to be archived. * force int Unless this flag is non-zero, empty lines aren't * archived. This flag requests that the line be * archived regardless. * Output: * return int 0 - OK. * 1 - Error. */ int _glh_add_history(GlHistory *glh, const char *line, int force) { int slen; /* The length of the line to be recorded (minus the '\0') */ int empty; /* True if the string is empty */ const char *nlptr; /* A pointer to a newline character in line[] */ GlhHashNode *hnode; /* The hash-table node of the line */ GlhLineNode *lnode; /* A node in the time-ordered list of lines */ int i; /* * Check the arguments. */ if(!glh || !line) { errno = EINVAL; return 1; }; /* * Is history enabled? */ if(!glh->enable || !glh->buffer || glh->max_lines == 0) return 0; /* * Cancel any ongoing search. */ if(_glh_cancel_search(glh)) return 1; /* * How long is the string to be recorded, being careful not to include * any terminating '\n' character. */ nlptr = strchr(line, '\n'); if(nlptr) slen = (nlptr - line); else slen = strlen(line); /* * Is the line empty? */ empty = 1; for(i=0; imax_lines >= 0) { /* * If necessary, remove old lines until there is room to add one new * line without exceeding the specified line limit. */ while(glh->nline > 0 && glh->nline >= glh->max_lines) _glh_discard_line(glh, glh->list.head); /* * We can't archive the line if the maximum number of lines allowed is * zero. */ if(glh->max_lines == 0) return 0; }; /* * Unless already stored, store a copy of the line in the history buffer, * then return a reference-counted hash-node pointer to this copy. */ hnode = _glh_acquire_copy(glh, line, slen); if(!hnode) { _err_record_msg(glh->err, "No room to store history line", END_ERR_MSG); errno = ENOMEM; return 1; }; /* * Allocate a new node in the time-ordered list of lines. */ lnode = (GlhLineNode *) _new_FreeListNode(glh->list.node_mem); /* * If a new line-node couldn't be allocated, discard our copy of the * stored line before reporting the error. */ if(!lnode) { hnode = _glh_discard_copy(glh, hnode); _err_record_msg(glh->err, "No room to store history line", END_ERR_MSG); errno = ENOMEM; return 1; }; /* * Record a pointer to the hash-table record of the line in the new * list node. */ lnode->id = glh->seq++; lnode->timestamp = time(NULL); lnode->group = glh->group; lnode->line = hnode; /* * Append the new node to the end of the time-ordered list. */ if(glh->list.head) glh->list.tail->next = lnode; else glh->list.head = lnode; lnode->next = NULL; lnode->prev = glh->list.tail; glh->list.tail = lnode; /* * Record the addition of a line to the list. */ glh->nline++; return 0; } /*....................................................................... * Recall the next oldest line that has the search prefix last recorded * by _glh_search_prefix(). * * Input: * glh GlHistory * The input-line history maintenance object. * line char * The input line buffer. On input this should contain * the current input line, and on output, if anything * was found, its contents will have been replaced * with the matching line. * dim size_t The allocated dimension of the line buffer. * Output: * return char * A pointer to line[0], or NULL if not found. */ char *_glh_find_backwards(GlHistory *glh, char *line, size_t dim) { GlhLineNode *node; /* The line location node being checked */ GlhHashNode *old_line; /* The previous recalled line */ /* * Check the arguments. */ if(!glh || !line) { if(glh) _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return NULL; }; /* * Is history enabled? */ if(!glh->enable || !glh->buffer || glh->max_lines == 0) return NULL; /* * Check the line dimensions. */ if(dim < strlen(line) + 1) { _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", END_ERR_MSG); errno = EINVAL; return NULL; }; /* * Preserve the input line if needed. */ if(_glh_prepare_for_recall(glh, line)) return NULL; /* * From where should we start the search? */ if(glh->recall) { node = glh->recall->prev; old_line = glh->recall->line; } else { node = glh->list.tail; old_line = NULL; }; /* * Search backwards through the list for the first match with the * prefix string that differs from the last line that was recalled. */ while(node && (node->group != glh->group || node->line == old_line || !_glh_line_matches_prefix(node->line, glh->prefix))) node = node->prev; /* * Was a matching line found? */ if(node) { /* * Recall the found node as the starting point for subsequent * searches. */ glh->recall = node; /* * Copy the matching line into the provided line buffer. */ _glh_return_line(node->line, line, dim); /* * Return it. */ return line; }; /* * No match was found. */ return NULL; } /*....................................................................... * Recall the next newest line that has the search prefix last recorded * by _glh_search_prefix(). * * Input: * glh GlHistory * The input-line history maintenance object. * line char * The input line buffer. On input this should contain * the current input line, and on output, if anything * was found, its contents will have been replaced * with the matching line. * dim size_t The allocated dimensions of the line buffer. * Output: * return char * The line requested, or NULL if no matching line * was found. */ char *_glh_find_forwards(GlHistory *glh, char *line, size_t dim) { GlhLineNode *node; /* The line location node being checked */ GlhHashNode *old_line; /* The previous recalled line */ /* * Check the arguments. */ if(!glh || !line) { if(glh) _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return NULL; }; /* * Is history enabled? */ if(!glh->enable || !glh->buffer || glh->max_lines == 0) return NULL; /* * Check the line dimensions. */ if(dim < strlen(line) + 1) { _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", END_ERR_MSG); errno = EINVAL; return NULL; }; /* * From where should we start the search? */ if(glh->recall) { node = glh->recall->next; old_line = glh->recall->line; } else { return NULL; }; /* * Search forwards through the list for the first match with the * prefix string. */ while(node && (node->group != glh->group || node->line == old_line || !_glh_line_matches_prefix(node->line, glh->prefix))) node = node->next; /* * Was a matching line found? */ if(node) { /* * Copy the matching line into the provided line buffer. */ _glh_return_line(node->line, line, dim); /* * Record the starting point of the next search. */ glh->recall = node; /* * If we just returned the line that was being entered when the search * session first started, cancel the search. */ if(node == glh->list.tail) _glh_cancel_search(glh); /* * Return the matching line to the user. */ return line; }; /* * No match was found. */ return NULL; } /*....................................................................... * If a search is in progress, cancel it. * * This involves discarding the line that was temporarily saved by * _glh_find_backwards() when the search was originally started, * and reseting the search iteration pointer to NULL. * * Input: * glh GlHistory * The input-line history maintenance object. * Output: * return int 0 - OK. * 1 - Error. */ int _glh_cancel_search(GlHistory *glh) { /* * Check the arguments. */ if(!glh) { errno = EINVAL; return 1; }; /* * If there wasn't a search in progress, do nothing. */ if(!glh->recall) return 0; /* * Reset the search pointers. Note that it is essential to set * glh->recall to NULL before calling _glh_discard_line(), to avoid an * infinite recursion. */ glh->recall = NULL; /* * Delete the node of the preserved line. */ _glh_discard_line(glh, glh->list.tail); return 0; } /*....................................................................... * Set the prefix of subsequent history searches. * * Input: * glh GlHistory * The input-line history maintenance object. * line const char * The command line who's prefix is to be used. * prefix_len int The length of the prefix. * Output: * return int 0 - OK. * 1 - Error. */ int _glh_search_prefix(GlHistory *glh, const char *line, int prefix_len) { /* * Check the arguments. */ if(!glh) { errno = EINVAL; return 1; }; /* * Is history enabled? */ if(!glh->enable || !glh->buffer || glh->max_lines == 0) return 0; /* * Discard any existing prefix. */ glh->prefix = _glh_discard_copy(glh, glh->prefix); /* * Only store a copy of the prefix string if it isn't a zero-length string. */ if(prefix_len > 0) { /* * Get a reference-counted copy of the prefix from the history cache buffer. */ glh->prefix = _glh_acquire_copy(glh, line, prefix_len); /* * Was there insufficient buffer space? */ if(!glh->prefix) { _err_record_msg(glh->err, "The search prefix is too long to store", END_ERR_MSG); errno = ENOMEM; return 1; }; }; return 0; } /*....................................................................... * Recall the oldest recorded line. * * Input: * glh GlHistory * The input-line history maintenance object. * line char * The input line buffer. On input this should contain * the current input line, and on output, its contents * will have been replaced with the oldest line. * dim size_t The allocated dimensions of the line buffer. * Output: * return char * A pointer to line[0], or NULL if not found. */ char *_glh_oldest_line(GlHistory *glh, char *line, size_t dim) { GlhLineNode *node; /* The line location node being checked */ /* * Check the arguments. */ if(!glh || !line) { if(glh) _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return NULL; }; /* * Is history enabled? */ if(!glh->enable || !glh->buffer || glh->max_lines == 0) return NULL; /* * Check the line dimensions. */ if(dim < strlen(line) + 1) { _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", END_ERR_MSG); errno = EINVAL; return NULL; }; /* * Preserve the input line if needed. */ if(_glh_prepare_for_recall(glh, line)) return NULL; /* * Locate the oldest line that belongs to the current group. */ for(node=glh->list.head; node && node->group != glh->group; node = node->next) ; /* * No line found? */ if(!node) return NULL; /* * Record the above node as the starting point for subsequent * searches. */ glh->recall = node; /* * Copy the recalled line into the provided line buffer. */ _glh_return_line(node->line, line, dim); /* * If we just returned the line that was being entered when the search * session first started, cancel the search. */ if(node == glh->list.tail) _glh_cancel_search(glh); return line; } /*....................................................................... * Recall the line that was being entered when the search started. * * Input: * glh GlHistory * The input-line history maintenance object. * line char * The input line buffer. On input this should contain * the current input line, and on output, its contents * will have been replaced with the line that was * being entered when the search was started. * dim size_t The allocated dimensions of the line buffer. * Output: * return char * A pointer to line[0], or NULL if not found. */ char *_glh_current_line(GlHistory *glh, char *line, size_t dim) { /* * Check the arguments. */ if(!glh || !line) { if(glh) _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return NULL; }; /* * If history isn't enabled, or no history search has yet been started, * ignore the call. */ if(!glh->enable || !glh->buffer || glh->max_lines == 0 || !glh->recall) return NULL; /* * Check the line dimensions. */ if(dim < strlen(line) + 1) { _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", END_ERR_MSG); errno = EINVAL; return NULL; }; /* * Copy the recalled line into the provided line buffer. */ _glh_return_line(glh->list.tail->line, line, dim); /* * Since we have returned to the starting point of the search, cancel it. */ _glh_cancel_search(glh); return line; } /*....................................................................... * Query the id of a history line offset by a given number of lines from * the one that is currently being recalled. If a recall session isn't * in progress, or the offset points outside the history list, 0 is * returned. * * Input: * glh GlHistory * The input-line history maintenance object. * offset int The line offset (0 for the current line, < 0 * for an older line, > 0 for a newer line. * Output: * return GlhLineID The identifier of the line that is currently * being recalled, or 0 if no recall session is * currently in progress. */ GlhLineID _glh_line_id(GlHistory *glh, int offset) { GlhLineNode *node; /* The line location node being checked */ /* * Is history enabled? */ if(!glh->enable || !glh->buffer || glh->max_lines == 0) return 0; /* * Search forward 'offset' lines to find the required line. */ if(offset >= 0) { for(node=glh->recall; node && offset != 0; node=node->next) { if(node->group == glh->group) offset--; }; } else { for(node=glh->recall; node && offset != 0; node=node->prev) { if(node->group == glh->group) offset++; }; }; return node ? node->id : 0; } /*....................................................................... * Recall a line by its history buffer ID. If the line is no longer * in the buffer, or the id is zero, NULL is returned. * * Input: * glh GlHistory * The input-line history maintenance object. * id GlhLineID The ID of the line to be returned. * line char * The input line buffer. On input this should contain * the current input line, and on output, its contents * will have been replaced with the saved line. * dim size_t The allocated dimensions of the line buffer. * Output: * return char * A pointer to line[0], or NULL if not found. */ char *_glh_recall_line(GlHistory *glh, GlhLineID id, char *line, size_t dim) { GlhLineNode *node; /* The line location node being checked */ /* * Is history enabled? */ if(!glh->enable || !glh->buffer || glh->max_lines == 0) return NULL; /* * Preserve the input line if needed. */ if(_glh_prepare_for_recall(glh, line)) return NULL; /* * Search for the specified line. */ node = _glh_find_id(glh, id); /* * Not found? */ if(!node || node->group != glh->group) return NULL; /* * Record the node of the matching line as the starting point * for subsequent searches. */ glh->recall = node; /* * Copy the recalled line into the provided line buffer. */ _glh_return_line(node->line, line, dim); return line; } /*....................................................................... * Save the current history in a specified file. * * Input: * glh GlHistory * The input-line history maintenance object. * filename const char * The name of the new file to record the * history in. * comment const char * Extra information such as timestamps will * be recorded on a line started with this * string, the idea being that the file can * double as a command file. Specify "" if * you don't care. * max_lines int The maximum number of lines to save, or -1 * to save all of the lines in the history * list. * Output: * return int 0 - OK. * 1 - Error. */ int _glh_save_history(GlHistory *glh, const char *filename, const char *comment, int max_lines) { #ifdef WITHOUT_FILE_SYSTEM _err_record_msg(glh->err, "Can't save history without filesystem access", END_ERR_MSG); errno = EINVAL; return 1; #else FILE *fp; /* The output file */ GlhLineNode *node; /* The line being saved */ GlhLineNode *head; /* The head of the list of lines to be saved */ GlhLineSeg *seg; /* One segment of a line being saved */ /* * Check the arguments. */ if(!glh || !filename || !comment) { if(glh) _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Attempt to open the specified file. */ fp = fopen(filename, "w"); if(!fp) return _glh_cant_save_history(glh, "Can't open", filename, NULL); /* * If a ceiling on the number of lines to save was specified, count * that number of lines backwards, to find the first line to be saved. */ head = NULL; if(max_lines >= 0) { for(head=glh->list.tail; head && --max_lines > 0; head=head->prev) ; }; if(!head) head = glh->list.head; /* * Write the contents of the history buffer to the history file, writing * associated data such as timestamps, to a line starting with the * specified comment string. */ for(node=head; node; node=node->next) { /* * Write peripheral information associated with the line, as a comment. */ if(fprintf(fp, "%s ", comment) < 0 || _glh_write_timestamp(fp, node->timestamp) || fprintf(fp, " %u\n", node->group) < 0) { return _glh_cant_save_history(glh, "Error writing", filename, fp); }; /* * Write the history line. */ for(seg=node->line->head; seg; seg=seg->next) { size_t slen = seg->next ? GLH_SEG_SIZE : strlen(seg->s); if(fwrite(seg->s, sizeof(char), slen, fp) != slen) return _glh_cant_save_history(glh, "Error writing", filename, fp); }; fputc('\n', fp); }; /* * Close the history file. */ if(fclose(fp) == EOF) return _glh_cant_save_history(glh, "Error writing", filename, NULL); return 0; #endif } #ifndef WITHOUT_FILE_SYSTEM /*....................................................................... * This is a private error return function of _glh_save_history(). It * composes an error report in the error buffer, composed using * sprintf("%s %s (%s)", message, filename, strerror(errno)). It then * closes fp and returns the error return code of _glh_save_history(). * * Input: * glh GlHistory * The input-line history maintenance object. * message const char * A message to be followed by the filename. * filename const char * The name of the offending output file. * fp FILE * The stream to be closed (send NULL if not * open). * Output: * return int Always 1. */ static int _glh_cant_save_history(GlHistory *glh, const char *message, const char *filename, FILE *fp) { _err_record_msg(glh->err, message, filename, " (", strerror(errno), ")", END_ERR_MSG); if(fp) (void) fclose(fp); return 1; } /*....................................................................... * Write a timestamp to a given stdio stream, in the format * yyyymmddhhmmss * * Input: * fp FILE * The stream to write to. * timestamp time_t The timestamp to be written. * Output: * return int 0 - OK. * 1 - Error. */ static int _glh_write_timestamp(FILE *fp, time_t timestamp) { struct tm *t; /* THe broken-down calendar time */ /* * Get the calendar components corresponding to the given timestamp. */ if(timestamp < 0 || (t = localtime(×tamp)) == NULL) { if(fprintf(fp, "?") < 0) return 1; return 0; }; /* * Write the calendar time as yyyymmddhhmmss. */ if(fprintf(fp, "%04d%02d%02d%02d%02d%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec) < 0) return 1; return 0; } #endif /*....................................................................... * Restore previous history lines from a given file. * * Input: * glh GlHistory * The input-line history maintenance object. * filename const char * The name of the file to read from. * comment const char * The same comment string that was passed to * _glh_save_history() when this file was * written. * line char * A buffer into which lines can be read. * dim size_t The allocated dimension of line[]. * Output: * return int 0 - OK. * 1 - Error. */ int _glh_load_history(GlHistory *glh, const char *filename, const char *comment, char *line, size_t dim) { #ifdef WITHOUT_FILE_SYSTEM _err_record_msg(glh->err, "Can't load history without filesystem access", END_ERR_MSG); errno = EINVAL; return 1; #else FILE *fp; /* The output file */ size_t comment_len; /* The length of the comment string */ time_t timestamp; /* The timestamp of the history line */ unsigned group; /* The identifier of the history group to which */ /* the line belongs. */ int lineno; /* The line number being read */ /* * Check the arguments. */ if(!glh || !filename || !comment || !line) { if(glh) _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Measure the length of the comment string. */ comment_len = strlen(comment); /* * Clear the history list. */ _glh_clear_history(glh, 1); /* * Attempt to open the specified file. Don't treat it as an error * if the file doesn't exist. */ fp = fopen(filename, "r"); if(!fp) return 0; /* * Attempt to read each line and preceding peripheral info, and add these * to the history list. */ for(lineno=1; fgets(line, dim, fp) != NULL; lineno++) { char *lptr; /* A pointer into the input line */ /* * Check that the line starts with the comment string. */ if(strncmp(line, comment, comment_len) != 0) { return _glh_cant_load_history(glh, filename, lineno, "Corrupt history parameter line", fp); }; /* * Skip spaces and tabs after the comment. */ for(lptr=line+comment_len; *lptr && (*lptr==' ' || *lptr=='\t'); lptr++) ; /* * The next word must be a timestamp. */ if(_glh_decode_timestamp(lptr, &lptr, ×tamp)) { return _glh_cant_load_history(glh, filename, lineno, "Corrupt timestamp", fp); }; /* * Skip spaces and tabs. */ while(*lptr==' ' || *lptr=='\t') lptr++; /* * The next word must be an unsigned integer group number. */ group = (int) strtoul(lptr, &lptr, 10); if(*lptr != ' ' && *lptr != '\n') { return _glh_cant_load_history(glh, filename, lineno, "Corrupt group id", fp); }; /* * Skip spaces and tabs. */ while(*lptr==' ' || *lptr=='\t') lptr++; /* * There shouldn't be anything left on the line. */ if(*lptr != '\n') { return _glh_cant_load_history(glh, filename, lineno, "Corrupt parameter line", fp); }; /* * Now read the history line itself. */ lineno++; if(fgets(line, dim, fp) == NULL) return _glh_cant_load_history(glh, filename, lineno, "Read error", fp); /* * Append the line to the history buffer. */ if(_glh_add_history(glh, line, 1)) { return _glh_cant_load_history(glh, filename, lineno, "Insufficient memory to record line", fp); }; /* * Record the group and timestamp information along with the line. */ if(glh->list.tail) { glh->list.tail->timestamp = timestamp; glh->list.tail->group = group; }; }; /* * Close the file. */ (void) fclose(fp); return 0; #endif } #ifndef WITHOUT_FILE_SYSTEM /*....................................................................... * This is a private error return function of _glh_load_history(). */ static int _glh_cant_load_history(GlHistory *glh, const char *filename, int lineno, const char *message, FILE *fp) { char lnum[20]; /* * Convert the line number to a string. */ sprintf(lnum, "%d", lineno); /* * Render an error message. */ _err_record_msg(glh->err, filename, ":", lnum, ":", message, END_ERR_MSG); /* * Close the file. */ if(fp) (void) fclose(fp); return 1; } /*....................................................................... * Read a timestamp from a string. * * Input: * string char * The string to read from. * Input/Output: * endp char ** On output *endp will point to the next unprocessed * character in string[]. * timestamp time_t * The timestamp will be assigned to *t. * Output: * return int 0 - OK. * 1 - Error. */ static int _glh_decode_timestamp(char *string, char **endp, time_t *timestamp) { unsigned year,month,day,hour,min,sec; /* Calendar time components */ struct tm t; /* * There are 14 characters in the date format yyyymmddhhmmss. */ enum {TSLEN=14}; char timestr[TSLEN+1]; /* The timestamp part of the string */ /* * If the time wasn't available at the time that the line was recorded * it will have been written as "?". Check for this before trying * to read the timestamp. */ if(string[0] == '\?') { *endp = string+1; *timestamp = -1; return 0; }; /* * The timestamp is expected to be written in the form yyyymmddhhmmss. */ if(strlen(string) < TSLEN) { *endp = string; return 1; }; /* * Copy the timestamp out of the string. */ strncpy(timestr, string, TSLEN); timestr[TSLEN] = '\0'; /* * Decode the timestamp. */ if(sscanf(timestr, "%4u%2u%2u%2u%2u%2u", &year, &month, &day, &hour, &min, &sec) != 6) { *endp = string; return 1; }; /* * Advance the string pointer over the successfully read timestamp. */ *endp = string + TSLEN; /* * Copy the read values into a struct tm. */ t.tm_sec = sec; t.tm_min = min; t.tm_hour = hour; t.tm_mday = day; t.tm_wday = 0; t.tm_yday = 0; t.tm_mon = month - 1; t.tm_year = year - 1900; t.tm_isdst = -1; /* * Convert the contents of the struct tm to a time_t. */ *timestamp = mktime(&t); return 0; } #endif /*....................................................................... * Switch history groups. * * Input: * glh GlHistory * The input-line history maintenance object. * group unsigned The new group identifier. This will be recorded * with subsequent history lines, and subsequent * history searches will only return lines with * this group identifier. This allows multiple * separate history lists to exist within * a single GlHistory object. Note that the * default group identifier is 0. * Output: * return int 0 - OK. * 1 - Error. */ int _glh_set_group(GlHistory *glh, unsigned group) { /* * Check the arguments. */ if(!glh) { if(glh) _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Is the group being changed? */ if(group != glh->group) { /* * Cancel any ongoing search. */ if(_glh_cancel_search(glh)) return 1; /* * Record the new group. */ glh->group = group; }; return 0; } /*....................................................................... * Query the current history group. * * Input: * glh GlHistory * The input-line history maintenance object. * Output: * return unsigned The group identifier. */ int _glh_get_group(GlHistory *glh) { return glh ? glh->group : 0; } /*....................................................................... * Display the contents of the history list. * * Input: * glh GlHistory * The input-line history maintenance object. * write_fn GlWriteFn * The function to call to write the line, or * 0 to discard the output. * data void * Anonymous data to pass to write_fn(). * fmt const char * A format string. This can contain arbitrary * characters, which are written verbatim, plus * any of the following format directives: * %D - The date, like 2001-11-20 * %T - The time of day, like 23:59:59 * %N - The sequential entry number of the * line in the history buffer. * %G - The history group number of the line. * %% - A literal % character. * %H - The history line. * all_groups int If true, display history lines from all * history groups. Otherwise only display * those of the current history group. * max_lines int If max_lines is < 0, all available lines * are displayed. Otherwise only the most * recent max_lines lines will be displayed. * Output: * return int 0 - OK. * 1 - Error. */ int _glh_show_history(GlHistory *glh, GlWriteFn *write_fn, void *data, const char *fmt, int all_groups, int max_lines) { GlhLineNode *node; /* The line being displayed */ GlhLineNode *oldest; /* The oldest line to display */ GlhLineSeg *seg; /* One segment of a line being displayed */ enum {TSMAX=32}; /* The maximum length of the date and time string */ char buffer[TSMAX+1]; /* The buffer in which to write the date and time */ int idlen; /* The length of displayed ID strings */ unsigned grpmax; /* The maximum group number in the buffer */ int grplen; /* The number of characters needed to print grpmax */ int len; /* The length of a string to be written */ /* * Check the arguments. */ if(!glh || !write_fn || !fmt) { if(glh) _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); errno = EINVAL; return 1; }; /* * Is history enabled? */ if(!glh->enable || !glh->list.head) return 0; /* * Work out the length to display ID numbers, choosing the length of * the biggest number in the buffer. Smaller numbers will be padded * with leading zeroes if needed. */ sprintf(buffer, "%lu", (unsigned long) glh->list.tail->id); idlen = strlen(buffer); /* * Find the largest group number. */ grpmax = 0; for(node=glh->list.head; node; node=node->next) { if(node->group > grpmax) grpmax = node->group; }; /* * Find out how many characters are needed to display the group number. */ sprintf(buffer, "%u", (unsigned) grpmax); grplen = strlen(buffer); /* * Find the node that follows the oldest line to be displayed. */ if(max_lines < 0) { oldest = glh->list.head; } else if(max_lines==0) { return 0; } else { for(oldest=glh->list.tail; oldest; oldest=oldest->prev) { if((all_groups || oldest->group == glh->group) && --max_lines <= 0) break; }; /* * If the number of lines in the buffer doesn't exceed the specified * maximum, start from the oldest line in the buffer. */ if(!oldest) oldest = glh->list.head; }; /* * List the history lines in increasing time order. */ for(node=oldest; node; node=node->next) { /* * Only display lines from the current history group, unless * told otherwise. */ if(all_groups || node->group == glh->group) { const char *fptr; /* A pointer into the format string */ struct tm *t = NULL; /* The broken time version of the timestamp */ /* * Work out the calendar representation of the node timestamp. */ if(node->timestamp != (time_t) -1) t = localtime(&node->timestamp); /* * Parse the format string. */ fptr = fmt; while(*fptr) { /* * Search for the start of the next format directive or the end of the string. */ const char *start = fptr; while(*fptr && *fptr != '%') fptr++; /* * Display any literal characters that precede the located directive. */ if(fptr > start) { len = (int) (fptr - start); if(write_fn(data, start, len) != len) return 1; }; /* * Did we hit a new directive before the end of the line? */ if(*fptr) { /* * Obey the directive. Ignore unknown directives. */ switch(*++fptr) { case 'D': /* Display the date */ if(t && strftime(buffer, TSMAX, "%Y-%m-%d", t) != 0) { len = strlen(buffer); if(write_fn(data, buffer, len) != len) return 1; }; break; case 'T': /* Display the time of day */ if(t && strftime(buffer, TSMAX, "%H:%M:%S", t) != 0) { len = strlen(buffer); if(write_fn(data, buffer, len) != len) return 1; }; break; case 'N': /* Display the sequential entry number */ sprintf(buffer, "%*lu", idlen, (unsigned long) node->id); len = strlen(buffer); if(write_fn(data, buffer, len) != len) return 1; break; case 'G': sprintf(buffer, "%*u", grplen, (unsigned) node->group); len = strlen(buffer); if(write_fn(data, buffer, len) != len) return 1; break; case 'H': /* Display the history line */ for(seg=node->line->head; seg; seg=seg->next) { len = seg->next ? GLH_SEG_SIZE : strlen(seg->s); if(write_fn(data, seg->s, len) != len) return 1; }; break; case '%': /* A literal % symbol */ if(write_fn(data, "%", 1) != 1) return 1; break; }; /* * Skip the directive. */ if(*fptr) fptr++; }; }; }; }; return 0; } /*....................................................................... * Change the size of the history buffer. * * Input: * glh GlHistory * The input-line history maintenance object. * bufsize size_t The number of bytes in the history buffer, or 0 * to delete the buffer completely. * Output: * return int 0 - OK. * 1 - Insufficient memory (the previous buffer * will have been retained). No error message * will be displayed. */ int _glh_resize_history(GlHistory *glh, size_t bufsize) { int nbuff; /* The number of segments in the new buffer */ int i; /* * Check the arguments. */ if(!glh) { errno = EINVAL; return 1; }; /* * How many buffer segments does the requested buffer size correspond * to? */ nbuff = (bufsize+GLH_SEG_SIZE-1) / GLH_SEG_SIZE; /* * Has a different size than the current size been requested? */ if(glh->nbuff != nbuff) { /* * Cancel any ongoing search. */ (void) _glh_cancel_search(glh); /* * Create a wholly new buffer? */ if(glh->nbuff == 0 && nbuff>0) { glh->buffer = (GlhLineSeg *) malloc(sizeof(GlhLineSeg) * nbuff); if(!glh->buffer) return 1; glh->nbuff = nbuff; glh->nfree = glh->nbuff; glh->nbusy = 0; glh->nline = 0; /* * Link the currently unused nodes of the buffer into a list. */ glh->unused = glh->buffer; for(i=0; inbuff-1; i++) { GlhLineSeg *seg = glh->unused + i; seg->next = seg + 1; }; glh->unused[i].next = NULL; /* * Delete an existing buffer? */ } else if(nbuff == 0) { _glh_clear_history(glh, 1); free(glh->buffer); glh->buffer = NULL; glh->unused = NULL; glh->nbuff = 0; glh->nfree = 0; glh->nbusy = 0; glh->nline = 0; /* * Change from one finite buffer size to another? */ } else { GlhLineSeg *buffer; /* The resized buffer */ int nbusy; /* The number of used line segments in the new buffer */ /* * Starting from the oldest line in the buffer, discard lines until * the buffer contains at most 'nbuff' used line segments. */ while(glh->list.head && glh->nbusy > nbuff) _glh_discard_line(glh, glh->list.head); /* * Attempt to allocate a new buffer. */ buffer = (GlhLineSeg *) malloc(nbuff * sizeof(GlhLineSeg)); if(!buffer) { errno = ENOMEM; return 1; }; /* * Copy the used segments of the old buffer to the start of the new buffer. */ nbusy = 0; for(i=0; ihash.bucket + i; GlhHashNode *hnode; for(hnode=b->lines; hnode; hnode=hnode->next) { GlhLineSeg *seg = hnode->head; hnode->head = buffer + nbusy; for( ; seg; seg=seg->next) { buffer[nbusy] = *seg; buffer[nbusy].next = seg->next ? &buffer[nbusy+1] : NULL; nbusy++; }; }; }; /* * Make a list of the new buffer's unused segments. */ for(i=nbusy; ibuffer); /* * Install the new buffer. */ glh->buffer = buffer; glh->nbuff = nbuff; glh->nbusy = nbusy; glh->nfree = nbuff - nbusy; glh->unused = glh->nfree > 0 ? (buffer + nbusy) : NULL; }; }; return 0; } /*....................................................................... * Set an upper limit to the number of lines that can be recorded in the * history list, or remove a previously specified limit. * * Input: * glh GlHistory * The input-line history maintenance object. * max_lines int The maximum number of lines to allow, or -1 to * cancel a previous limit and allow as many lines * as will fit in the current history buffer size. */ void _glh_limit_history(GlHistory *glh, int max_lines) { if(!glh) return; /* * Apply a new limit? */ if(max_lines >= 0 && max_lines != glh->max_lines) { /* * Count successively older lines until we reach the start of the * list, or until we have seen max_lines lines (at which point 'node' * will be line number max_lines+1). */ int nline = 0; GlhLineNode *node; for(node=glh->list.tail; node && ++nline <= max_lines; node=node->prev) ; /* * Discard any lines that exceed the limit. */ if(node) { GlhLineNode *oldest = node->next; /* The oldest line to be kept */ /* * Delete nodes from the head of the list until we reach the node that * is to be kept. */ while(glh->list.head && glh->list.head != oldest) _glh_discard_line(glh, glh->list.head); }; }; /* * Record the new limit. */ glh->max_lines = max_lines; return; } /*....................................................................... * Discard either all history, or the history associated with the current * history group. * * Input: * glh GlHistory * The input-line history maintenance object. * all_groups int If true, clear all of the history. If false, * clear only the stored lines associated with the * currently selected history group. */ void _glh_clear_history(GlHistory *glh, int all_groups) { int i; /* * Check the arguments. */ if(!glh) return; /* * Cancel any ongoing search. */ (void) _glh_cancel_search(glh); /* * Delete all history lines regardless of group? */ if(all_groups) { /* * Claer the time-ordered list of lines. */ _rst_FreeList(glh->list.node_mem); glh->list.head = glh->list.tail = NULL; glh->nline = 0; glh->id_node = NULL; /* * Clear the hash table. */ for(i=0; ihash.bucket[i].lines = NULL; _rst_FreeList(glh->hash.node_mem); /* * Move all line segment nodes back onto the list of unused segments. */ if(glh->buffer) { glh->unused = glh->buffer; for(i=0; inbuff-1; i++) { GlhLineSeg *seg = glh->unused + i; seg->next = seg + 1; }; glh->unused[i].next = NULL; glh->nfree = glh->nbuff; glh->nbusy = 0; } else { glh->unused = NULL; glh->nbusy = glh->nfree = 0; }; /* * Just delete lines of the current group? */ } else { GlhLineNode *node; /* The line node being checked */ GlhLineNode *next; /* The line node that follows 'node' */ /* * Search out and delete the line nodes of the current group. */ for(node=glh->list.head; node; node=next) { /* * Keep a record of the following node before we delete the current * node. */ next = node->next; /* * Discard this node? */ if(node->group == glh->group) _glh_discard_line(glh, node); }; }; return; } /*....................................................................... * Temporarily enable or disable the history list. * * Input: * glh GlHistory * The input-line history maintenance object. * enable int If true, turn on the history mechanism. If * false, disable it. */ void _glh_toggle_history(GlHistory *glh, int enable) { if(glh) glh->enable = enable; } /*....................................................................... * Discard a given archived input line. * * Input: * glh GlHistory * The history container object. * node GlhLineNode * The line to be discarded, specified via its * entry in the time-ordered list of historical * input lines. */ static void _glh_discard_line(GlHistory *glh, GlhLineNode *node) { /* * Remove the node from the linked list. */ if(node->prev) node->prev->next = node->next; else glh->list.head = node->next; if(node->next) node->next->prev = node->prev; else glh->list.tail = node->prev; /* * If we are deleting the node that is marked as the start point of the * last ID search, remove the cached starting point. */ if(node == glh->id_node) glh->id_node = NULL; /* * If we are deleting the node that is marked as the start point of the * next prefix search, cancel the search. */ if(node == glh->recall) _glh_cancel_search(glh); /* * Delete our copy of the line. */ node->line = _glh_discard_copy(glh, node->line); /* * Return the node to the freelist. */ (void) _del_FreeListNode(glh->list.node_mem, node); /* * Record the removal of a line from the list. */ glh->nline--; return; } /*....................................................................... * Lookup the details of a given history line, given its id. * * Input: * glh GlHistory * The input-line history maintenance object. * id GlLineID The sequential number of the line. * Input/Output: * line const char ** A pointer to a copy of the history line will be * assigned to *line. Beware that this pointer may * be invalidated by the next call to any public * history function. * group unsigned * The group membership of the line will be assigned * to *group. * timestamp time_t * The timestamp of the line will be assigned to * *timestamp. * Output: * return int 0 - The requested line wasn't found. * 1 - The line was found. */ int _glh_lookup_history(GlHistory *glh, GlhLineID id, const char **line, unsigned *group, time_t *timestamp) { GlhLineNode *node; /* The located line location node */ /* * Check the arguments. */ if(!glh) return 0; /* * Search for the line that has the specified ID. */ node = _glh_find_id(glh, id); /* * Not found? */ if(!node) return 0; /* * Has the history line been requested? */ if(line) { /* * If necessary, reallocate the lookup buffer to accomodate the size of * a copy of the located line. */ if(node->line->len + 1 > glh->lbuf_dim) { int lbuf_dim = node->line->len + 1; char *lbuf = realloc(glh->lbuf, lbuf_dim); if(!lbuf) { errno = ENOMEM; return 0; }; glh->lbuf_dim = lbuf_dim; glh->lbuf = lbuf; }; /* * Copy the history line into the lookup buffer. */ _glh_return_line(node->line, glh->lbuf, glh->lbuf_dim); /* * Assign the lookup buffer as the returned line pointer. */ *line = glh->lbuf; }; /* * Does the caller want to know the group of the line? */ if(group) *group = node->group; /* * Does the caller want to know the timestamp of the line? */ if(timestamp) *timestamp = node->timestamp; return 1; } /*....................................................................... * Lookup a node in the history list by its ID. * * Input: * glh GlHistory * The input-line history maintenance object. * id GlhLineID The ID of the line to be returned. * Output: * return GlhLIneNode * The located node, or NULL if not found. */ static GlhLineNode *_glh_find_id(GlHistory *glh, GlhLineID id) { GlhLineNode *node; /* The node being checked */ /* * Is history enabled? */ if(!glh->enable || !glh->list.head) return NULL; /* * If possible, start at the end point of the last ID search. * Otherwise start from the head of the list. */ node = glh->id_node; if(!node) node = glh->list.head; /* * Search forwards from 'node'? */ if(node->id < id) { while(node && node->id != id) node = node->next; glh->id_node = node ? node : glh->list.tail; /* * Search backwards from 'node'? */ } else { while(node && node->id != id) node = node->prev; glh->id_node = node ? node : glh->list.head; }; /* * Return the located node (this will be NULL if the ID wasn't found). */ return node; } /*....................................................................... * Query the state of the history list. Note that any of the input/output * pointers can be specified as NULL. * * Input: * glh GlHistory * The input-line history maintenance object. * Input/Output: * enabled int * If history is enabled, *enabled will be * set to 1. Otherwise it will be assigned 0. * group unsigned * The current history group ID will be assigned * to *group. * max_lines int * The currently requested limit on the number * of history lines in the list, or -1 if * unlimited. */ void _glh_state_of_history(GlHistory *glh, int *enabled, unsigned *group, int *max_lines) { if(glh) { if(enabled) *enabled = glh->enable; if(group) *group = glh->group; if(max_lines) *max_lines = glh->max_lines; }; } /*....................................................................... * Get the range of lines in the history buffer. * * Input: * glh GlHistory * The input-line history maintenance object. * Input/Output: * oldest unsigned long * The sequential entry number of the oldest * line in the history list will be assigned * to *oldest, unless there are no lines, in * which case 0 will be assigned. * newest unsigned long * The sequential entry number of the newest * line in the history list will be assigned * to *newest, unless there are no lines, in * which case 0 will be assigned. * nlines int * The number of lines currently in the history * list. */ void _glh_range_of_history(GlHistory *glh, unsigned long *oldest, unsigned long *newest, int *nlines) { if(glh) { if(oldest) *oldest = glh->list.head ? glh->list.head->id : 0; if(newest) *newest = glh->list.tail ? glh->list.tail->id : 0; if(nlines) *nlines = glh->nline; }; } /*....................................................................... * Return the size of the history buffer and the amount of the * buffer that is currently in use. * * Input: * glh GlHistory * The input-line history maintenance object. * Input/Output: * buff_size size_t * The size of the history buffer (bytes). * buff_used size_t * The amount of the history buffer that * is currently occupied (bytes). */ void _glh_size_of_history(GlHistory *glh, size_t *buff_size, size_t *buff_used) { if(glh) { if(buff_size) *buff_size = (glh->nbusy + glh->nfree) * GLH_SEG_SIZE; /* * Determine the amount of buffer space that is currently occupied. */ if(buff_used) *buff_used = glh->nbusy * GLH_SEG_SIZE; }; } /*....................................................................... * Return extra information (ie. in addition to that provided by errno) * about the last error to occur in any of the public functions of this * module. * * Input: * glh GlHistory * The container of the history list. * Output: * return const char * A pointer to the internal buffer in which * the error message is temporarily stored. */ const char *_glh_last_error(GlHistory *glh) { return glh ? _err_get_msg(glh->err) : "NULL GlHistory argument"; } /*....................................................................... * Unless already stored, store a copy of the line in the history buffer, * then return a reference-counted hash-node pointer to this copy. * * Input: * glh GlHistory * The history maintenance buffer. * line const char * The history line to be recorded. * n size_t The length of the string, excluding any '\0' * terminator. * Output: * return GlhHashNode * The hash-node containing the stored line, or * NULL on error. */ static GlhHashNode *_glh_acquire_copy(GlHistory *glh, const char *line, size_t n) { GlhHashBucket *bucket; /* The hash-table bucket of the line */ GlhHashNode *hnode; /* The hash-table node of the line */ int i; /* * In which bucket should the line be recorded? */ bucket = glh_find_bucket(glh, line, n); /* * Is the line already recorded there? */ hnode = glh_find_hash_node(bucket, line, n); /* * If the line isn't recorded in the buffer yet, make room for it. */ if(!hnode) { GlhLineSeg *seg; /* A line segment */ int offset; /* An offset into line[] */ /* * How many string segments will be needed to record the new line, * including space for a '\0' terminator? */ int nseg = ((n+1) + GLH_SEG_SIZE-1) / GLH_SEG_SIZE; /* * Discard the oldest history lines in the buffer until at least * 'nseg' segments have been freed up, or until we run out of buffer * space. */ while(glh->nfree < nseg && glh->nbusy > 0) _glh_discard_line(glh, glh->list.head); /* * If the buffer is smaller than the new line, don't attempt to truncate * it to fit. Simply don't archive it. */ if(glh->nfree < nseg) return NULL; /* * Record the line in the first 'nseg' segments of the list of unused segments. */ offset = 0; for(i=0,seg=glh->unused; inext, offset+=GLH_SEG_SIZE) memcpy(seg->s, line + offset, GLH_SEG_SIZE); memcpy(seg->s, line + offset, n-offset); seg->s[n-offset] = '\0'; /* * Create a new hash-node for the line. */ hnode = (GlhHashNode *) _new_FreeListNode(glh->hash.node_mem); if(!hnode) return NULL; /* * Move the copy of the line from the list of unused segments to * the hash node. */ hnode->head = glh->unused; glh->unused = seg->next; seg->next = NULL; glh->nbusy += nseg; glh->nfree -= nseg; /* * Prepend the new hash node to the list within the associated bucket. */ hnode->next = bucket->lines; bucket->lines = hnode; /* * Initialize the rest of the members of the hash node. */ hnode->len = n; hnode->reported = 0; hnode->used = 0; hnode->bucket = bucket; }; /* * Increment the reference count of the line. */ hnode->used++; return hnode; } /*....................................................................... * Decrement the reference count of the history line of a given hash-node, * and if the count reaches zero, delete both the hash-node and the * buffered copy of the line. * * Input: * glh GlHistory * The history container object. * hnode GlhHashNode * The node to be removed. * Output: * return GlhHashNode * The deleted hash-node (ie. NULL). */ static GlhHashNode *_glh_discard_copy(GlHistory *glh, GlhHashNode *hnode) { if(hnode) { GlhHashBucket *bucket = hnode->bucket; /* * If decrementing the reference count of the hash-node doesn't reduce * the reference count to zero, then the line is still in use in another * object, so don't delete it yet. Return NULL to indicate that the caller's * access to the hash-node copy has been deleted. */ if(--hnode->used >= 1) return NULL; /* * Remove the hash-node from the list in its parent bucket. */ if(bucket->lines == hnode) { bucket->lines = hnode->next; } else { GlhHashNode *prev; /* The node which precedes hnode in the bucket */ for(prev=bucket->lines; prev && prev->next != hnode; prev=prev->next) ; if(prev) prev->next = hnode->next; }; hnode->next = NULL; /* * Return the line segments of the hash-node to the list of unused segments. */ if(hnode->head) { GlhLineSeg *tail; /* The last node in the list of line segments */ int nseg; /* The number of segments being discarded */ /* * Get the last node of the list of line segments referenced in the hash-node, * while counting the number of line segments used. */ for(nseg=1,tail=hnode->head; tail->next; nseg++,tail=tail->next) ; /* * Prepend the list of line segments used by the hash node to the * list of unused line segments. */ tail->next = glh->unused; glh->unused = hnode->head; glh->nbusy -= nseg; glh->nfree += nseg; }; /* * Return the container of the hash-node to the freelist. */ hnode = (GlhHashNode *) _del_FreeListNode(glh->hash.node_mem, hnode); }; return NULL; } /*....................................................................... * Private function to locate the hash bucket associated with a given * history line. * * This uses a hash-function described in the dragon-book * ("Compilers - Principles, Techniques and Tools", by Aho, Sethi and * Ullman; pub. Adison Wesley) page 435. * * Input: * glh GlHistory * The history container object. * line const char * The historical line to look up. * n size_t The length of the line in line[], excluding * any '\0' terminator. * Output: * return GlhHashBucket * The located hash-bucket. */ static GlhHashBucket *glh_find_bucket(GlHistory *glh, const char *line, size_t n) { unsigned long h = 0L; int i; for(i=0; ihash.bucket + (h % GLH_HASH_SIZE); } /*....................................................................... * Find a given history line within a given hash-table bucket. * * Input: * bucket GlhHashBucket * The hash-table bucket in which to search. * line const char * The historical line to lookup. * n size_t The length of the line in line[], excluding * any '\0' terminator. * Output: * return GlhHashNode * The hash-table entry of the line, or NULL * if not found. */ static GlhHashNode *glh_find_hash_node(GlhHashBucket *bucket, const char *line, size_t n) { GlhHashNode *node; /* A node in the list of lines in the bucket */ /* * Compare each of the lines in the list of lines, against 'line'. */ for(node=bucket->lines; node; node=node->next) { if(_glh_is_line(node, line, n)) return node; }; return NULL; } /*....................................................................... * Return non-zero if a given string is equal to a given segmented line * node. * * Input: * hash GlhHashNode * The hash-table entry of the line. * line const char * The string to be compared to the segmented * line. * n size_t The length of the line in line[], excluding * any '\0' terminator. * Output: * return int 0 - The lines differ. * 1 - The lines are the same. */ static int _glh_is_line(GlhHashNode *hash, const char *line, size_t n) { GlhLineSeg *seg; /* A node in the list of line segments */ int i; /* * Do the two lines have the same length? */ if(n != hash->len) return 0; /* * Compare the characters of the segmented and unsegmented versions * of the line. */ for(seg=hash->head; n>0 && seg; seg=seg->next) { const char *s = seg->s; for(i=0; n>0 && ilen > line->len) return 0; /* * Compare the line to the prefix. */ while(pstr.c != '\0' && pstr.c == lstr.c) { glh_step_stream(&lstr); glh_step_stream(&pstr); }; /* * Did we reach the end of the prefix string before finding * any differences? */ return pstr.c == '\0'; } /*....................................................................... * Copy a given history line into a specified output string. * * Input: * hash GlhHashNode The hash-table entry of the history line to * be copied. * line char * A copy of the history line. * dim size_t The allocated dimension of the line buffer. */ static void _glh_return_line(GlhHashNode *hash, char *line, size_t dim) { GlhLineSeg *seg; /* A node in the list of line segments */ int i; for(seg=hash->head; dim>0 && seg; seg=seg->next) { const char *s = seg->s; for(i=0; dim>0 && irecall && glh->recall == glh->list.tail && !_glh_is_line(glh->recall->line, line, strlen(line))) { _glh_cancel_search(glh); }; /* * If this is the first line recall of a new recall session, save the * current line for potential recall later, and mark it as the last * line recalled. */ if(!glh->recall) { if(_glh_add_history(glh, line, 1)) return 1; glh->recall = glh->list.tail; /* * The above call to _glh_add_history() will have incremented the line * sequence number, after adding the line. Since we only want this to * to be incremented for permanently entered lines, decrement it again. */ glh->seq--; }; return 0; } /*....................................................................... * Return non-zero if a history search session is currently in progress. * * Input: * glh GlHistory * The input-line history maintenance object. * Output: * return int 0 - No search is currently in progress. * 1 - A search is in progress. */ int _glh_search_active(GlHistory *glh) { return glh && glh->recall; } /*....................................................................... * Initialize a character iterator object to point to the start of a * given history line. The first character of the line will be placed * in str->c, and subsequent characters can be placed there by calling * glh_strep_stream(). * * Input: * str GlhLineStream * The iterator object to be initialized. * line GlhHashNode * The history line to be iterated over (a * NULL value here, is interpretted as an * empty string by glh_step_stream()). */ static void glh_init_stream(GlhLineStream *str, GlhHashNode *line) { str->seg = line ? line->head : NULL; str->posn = 0; str->c = str->seg ? str->seg->s[0] : '\0'; } /*....................................................................... * Copy the next unread character in the line being iterated, in str->c. * Once the end of the history line has been reached, all futher calls * set str->c to '\0'. * * Input: * str GlhLineStream * The history-line iterator to read from. */ static void glh_step_stream(GlhLineStream *str) { /* * Get the character from the current iterator position within the line. */ str->c = str->seg ? str->seg->s[str->posn] : '\0'; /* * Unless we have reached the end of the string, move the iterator * to the position of the next character in the line. */ if(str->c != '\0' && ++str->posn >= GLH_SEG_SIZE) { str->posn = 0; str->seg = str->seg->next; }; } /*....................................................................... * Return non-zero if the specified search prefix contains any glob * wildcard characters. * * Input: * prefix GlhHashNode * The search prefix. * Output: * return int 0 - The prefix doesn't contain any globbing * characters. * 1 - The prefix contains at least one * globbing character. */ static int glh_contains_glob(GlhHashNode *prefix) { GlhLineStream pstr; /* The stream that is used to traverse 'prefix' */ /* * Wrap a stream iterator around the prefix, so that we can traverse it * without worrying about line-segmentation. */ glh_init_stream(&pstr, prefix); /* * Search for unescaped wildcard characters. */ while(pstr.c != '\0') { switch(pstr.c) { case '\\': /* Skip escaped characters */ glh_step_stream(&pstr); break; case '*': case '?': case '[': /* A wildcard character? */ return 1; break; }; glh_step_stream(&pstr); }; /* * No wildcard characters were found. */ return 0; } /*....................................................................... * Return non-zero if the history line matches a search prefix containing * a glob pattern. * * Input: * lstr GlhLineStream * The iterator stream being used to traverse * the history line that is being matched. * pstr GlhLineStream * The iterator stream being used to traverse * the pattern. * Output: * return int 0 - Doesn't match. * 1 - The line matches the pattern. */ static int glh_line_matches_glob(GlhLineStream *lstr, GlhLineStream *pstr) { /* * Match each character of the pattern until we reach the end of the * pattern. */ while(pstr->c != '\0') { /* * Handle the next character of the pattern. */ switch(pstr->c) { /* * A match zero-or-more characters wildcard operator. */ case '*': /* * Skip the '*' character in the pattern. */ glh_step_stream(pstr); /* * If the pattern ends with the '*' wildcard, then the * rest of the line matches this. */ if(pstr->c == '\0') return 1; /* * Using the wildcard to match successively longer sections of * the remaining characters of the line, attempt to match * the tail of the line against the tail of the pattern. */ while(lstr->c) { GlhLineStream old_lstr = *lstr; GlhLineStream old_pstr = *pstr; if(glh_line_matches_glob(lstr, pstr)) return 1; /* * Restore the line and pattern iterators for a new try. */ *lstr = old_lstr; *pstr = old_pstr; /* * Prepare to try again, one character further into the line. */ glh_step_stream(lstr); }; return 0; /* The pattern following the '*' didn't match */ break; /* * A match-one-character wildcard operator. */ case '?': /* * If there is a character to be matched, skip it and advance the * pattern pointer. */ if(lstr->c) { glh_step_stream(lstr); glh_step_stream(pstr); /* * If we hit the end of the line, there is no character * matching the operator, so the pattern doesn't match. */ } else { return 0; }; break; /* * A character range operator, with the character ranges enclosed * in matching square brackets. */ case '[': glh_step_stream(pstr); /* Skip the '[' character */ if(!lstr->c || !glh_matches_range(lstr->c, pstr)) return 0; glh_step_stream(lstr); /* Skip the character that matched */ break; /* * A backslash in the pattern prevents the following character as * being seen as a special character. */ case '\\': glh_step_stream(pstr); /* Skip the backslash */ /* Note fallthrough to default */ /* * A normal character to be matched explicitly. */ default: if(lstr->c == pstr->c) { glh_step_stream(lstr); glh_step_stream(pstr); } else { return 0; }; break; }; }; /* * To get here, pattern must have been exhausted. The line only * matches the pattern if the line as also been exhausted. */ return pstr->c == '\0' && lstr->c == '\0'; } /*....................................................................... * Match a character range expression terminated by an unescaped close * square bracket. * * Input: * c char The character to be matched with the range * pattern. * pstr GlhLineStream * The iterator stream being used to traverse * the pattern. * Output: * return int 0 - Doesn't match. * 1 - The character matched. */ static int glh_matches_range(char c, GlhLineStream *pstr) { int invert = 0; /* True to invert the sense of the match */ int matched = 0; /* True if the character matched the pattern */ char lastc = '\0'; /* The previous character in the pattern */ /* * If the first character is a caret, the sense of the match is * inverted and only if the character isn't one of those in the * range, do we say that it matches. */ if(pstr->c == '^') { glh_step_stream(pstr); invert = 1; }; /* * The hyphen is only a special character when it follows the first * character of the range (not including the caret). */ if(pstr->c == '-') { glh_step_stream(pstr); if(c == '-') matched = 1; /* * Skip other leading '-' characters since they make no sense. */ while(pstr->c == '-') glh_step_stream(pstr); }; /* * The hyphen is only a special character when it follows the first * character of the range (not including the caret or a hyphen). */ if(pstr->c == ']') { glh_step_stream(pstr); if(c == ']') matched = 1; }; /* * Having dealt with the characters that have special meanings at * the beginning of a character range expression, see if the * character matches any of the remaining characters of the range, * up until a terminating ']' character is seen. */ while(!matched && pstr->c && pstr->c != ']') { /* * Is this a range of characters signaled by the two end characters * separated by a hyphen? */ if(pstr->c == '-') { glh_step_stream(pstr); /* Skip the hyphen */ if(pstr->c != ']') { if(c >= lastc && c <= pstr->c) matched = 1; }; /* * A normal character to be compared directly. */ } else if(pstr->c == c) { matched = 1; }; /* * Record and skip the character that we just processed. */ lastc = pstr->c; if(pstr->c != ']') glh_step_stream(pstr); }; /* * Find the terminating ']'. */ while(pstr->c && pstr->c != ']') glh_step_stream(pstr); /* * Did we find a terminating ']'? */ if(pstr->c == ']') { /* * Skip the terminating ']'. */ glh_step_stream(pstr); /* * If the pattern started with a caret, invert the sense of the match. */ if(invert) matched = !matched; /* * If the pattern didn't end with a ']', then it doesn't match, * regardless of the value of the required sense of the match. */ } else { matched = 0; }; return matched; } genometools-1.5.1/src/external/libtecla-1.6.1/history.h000066400000000000000000000126601211610345200225540ustar00rootroot00000000000000#ifndef history_h #define history_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include /* FILE * */ /*----------------------------------------------------------------------- * This module is used to record and traverse historical lines of user input. */ typedef struct GlHistory GlHistory; /* * Create a new history maintenance object. */ GlHistory *_new_GlHistory(size_t buflen); /* * Delete a history maintenance object. */ GlHistory *_del_GlHistory(GlHistory *glh); int _glh_add_history(GlHistory *glh, const char *line, int force); int _glh_search_prefix(GlHistory *glh, const char *line, int prefix_len); char *_glh_find_backwards(GlHistory *glh, char *line, size_t dim); char *_glh_find_forwards(GlHistory *glh, char *line, size_t dim); int _glh_cancel_search(GlHistory *glh); char *_glh_oldest_line(GlHistory *glh, char *line, size_t dim); char *_glh_current_line(GlHistory *glh, char *line, size_t dim); /* * Whenever a new line is added to the history buffer, it is given * a unique ID, recorded in an object of the following type. */ typedef unsigned long GlhLineID; /* * Query the id of a history line offset by a given number of lines from * the one that is currently being recalled. If a recall session isn't * in progress, or the offset points outside the history list, 0 is * returned. */ GlhLineID _glh_line_id(GlHistory *glh, int offset); /* * Recall a line by its history buffer ID. If the line is no longer * in the buffer, or the specified id is zero, NULL is returned. */ char *_glh_recall_line(GlHistory *glh, GlhLineID id, char *line, size_t dim); /* * Write the contents of the history buffer to a given file. Note that * ~ and $ expansion are not performed on the filename. */ int _glh_save_history(GlHistory *glh, const char *filename, const char *comment, int max_lines); /* * Restore the contents of the history buffer from a given file. * Note that ~ and $ expansion are not performed on the filename. */ int _glh_load_history(GlHistory *glh, const char *filename, const char *comment, char *line, size_t dim); /* * Set and query the current history group. */ int _glh_set_group(GlHistory *glh, unsigned group); int _glh_get_group(GlHistory *glh); /* * Display the contents of the history list to the specified stdio * output group. */ int _glh_show_history(GlHistory *glh, GlWriteFn *write_fn, void *data, const char *fmt, int all_groups, int max_lines); /* * Change the size of the history buffer. */ int _glh_resize_history(GlHistory *glh, size_t bufsize); /* * Set an upper limit to the number of lines that can be recorded in the * history list, or remove a previously specified limit. */ void _glh_limit_history(GlHistory *glh, int max_lines); /* * Discard either all history, or the history associated with the current * history group. */ void _glh_clear_history(GlHistory *glh, int all_groups); /* * Temporarily enable or disable the history facility. */ void _glh_toggle_history(GlHistory *glh, int enable); /* * Lookup a history line by its sequential number of entry in the * history buffer. */ int _glh_lookup_history(GlHistory *glh, GlhLineID id, const char **line, unsigned *group, time_t *timestamp); /* * Query the state of the history list. */ void _glh_state_of_history(GlHistory *glh, int *enabled, unsigned *group, int *max_lines); /* * Get the range of lines in the history buffer. */ void _glh_range_of_history(GlHistory *glh, unsigned long *oldest, unsigned long *newest, int *nlines); /* * Return the size of the history buffer and the amount of the * buffer that is currently in use. */ void _glh_size_of_history(GlHistory *glh, size_t *buff_size, size_t *buff_used); /* * Get information about the last error in this module. */ const char *_glh_last_error(GlHistory *glh); /* * Return non-zero if a history search session is currently in progress. */ int _glh_search_active(GlHistory *glh); #endif genometools-1.5.1/src/external/libtecla-1.6.1/homedir.c000066400000000000000000000354441211610345200225020ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * If file-system access is to be excluded, this module has no function, * so all of its code should be excluded. */ #ifndef WITHOUT_FILE_SYSTEM #include #include #include #include #include #include #include #include #include "pathutil.h" #include "homedir.h" #include "errmsg.h" /* * Use the reentrant POSIX threads versions of the password lookup functions? */ #if defined(PREFER_REENTRANT) && defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199506L #define THREAD_COMPATIBLE 1 /* * Under Solaris we can use thr_main() to determine whether * threads are actually running, and thus when it is necessary * to avoid non-reentrant features. */ #if defined __sun && defined __SVR4 #include /* Solaris thr_main() */ #endif #endif /* * Provide a password buffer size fallback in case the max size reported * by sysconf() is said to be indeterminate. */ #define DEF_GETPW_R_SIZE_MAX 1024 /* * The resources needed to lookup and record a home directory are * maintained in objects of the following type. */ struct HomeDir { ErrMsg *err; /* The error message report buffer */ char *buffer; /* A buffer for reading password entries and */ /* directory paths. */ int buflen; /* The allocated size of buffer[] */ #ifdef THREAD_COMPATIBLE struct passwd pwd; /* The password entry of a user */ #endif }; static const char *hd_getpwd(HomeDir *home); /*....................................................................... * Create a new HomeDir object. * * Output: * return HomeDir * The new object, or NULL on error. */ HomeDir *_new_HomeDir(void) { HomeDir *home; /* The object to be returned */ size_t pathlen; /* The estimated maximum size of a pathname */ /* * Allocate the container. */ home = (HomeDir *) malloc(sizeof(HomeDir)); if(!home) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to _del_HomeDir(). */ home->err = NULL; home->buffer = NULL; home->buflen = 0; /* * Allocate a place to record error messages. */ home->err = _new_ErrMsg(); if(!home->err) return _del_HomeDir(home); /* * Allocate the buffer that is used by the reentrant POSIX password-entry * lookup functions. */ #ifdef THREAD_COMPATIBLE /* * Get the length of the buffer needed by the reentrant version * of getpwnam(). */ #ifndef _SC_GETPW_R_SIZE_MAX home->buflen = DEF_GETPW_R_SIZE_MAX; #else errno = 0; home->buflen = sysconf(_SC_GETPW_R_SIZE_MAX); /* * If the limit isn't available, substitute a suitably large fallback value. */ if(home->buflen < 0 || errno) home->buflen = DEF_GETPW_R_SIZE_MAX; #endif #endif /* * If the existing buffer length requirement is too restrictive to record * a pathname, increase its length. */ pathlen = _pu_pathname_dim(); if(pathlen > home->buflen) home->buflen = pathlen; /* * Allocate a work buffer. */ home->buffer = (char *) malloc(home->buflen); if(!home->buffer) { errno = ENOMEM; return _del_HomeDir(home); }; return home; } /*....................................................................... * Delete a HomeDir object. * * Input: * home HomeDir * The object to be deleted. * Output: * return HomeDir * The deleted object (always NULL). */ HomeDir *_del_HomeDir(HomeDir *home) { if(home) { home->err = _del_ErrMsg(home->err); if(home->buffer) free(home->buffer); free(home); }; return NULL; } /*....................................................................... * Lookup the home directory of a given user in the password file. * * Input: * home HomeDir * The resources needed to lookup the home directory. * user const char * The name of the user to lookup, or "" to lookup * the home directory of the person running the * program. * Output: * return const char * The home directory. If the library was compiled * with threads, this string is part of the HomeDir * object and will change on subsequent calls. If * the library wasn't compiled to be reentrant, * then the string is a pointer into a static string * in the C library and will change not only on * subsequent calls to this function, but also if * any calls are made to the C library password * file lookup functions. Thus to be safe, you should * make a copy of this string before calling any * other function that might do a password file * lookup. * * On error, NULL is returned and a description * of the error can be acquired by calling * _hd_last_home_dir_error(). */ const char *_hd_lookup_home_dir(HomeDir *home, const char *user) { const char *home_dir; /* A pointer to the home directory of the user */ /* * If no username has been specified, arrange to lookup the current * user. */ int login_user = !user || *user=='\0'; /* * Check the arguments. */ if(!home) { errno = EINVAL; return NULL; }; /* * Handle the ksh "~+". This expands to the absolute path of the * current working directory. */ if(!login_user && strcmp(user, "+") == 0) { home_dir = hd_getpwd(home); if(!home_dir) { _err_record_msg(home->err, "Can't determine current directory", END_ERR_MSG); return NULL; } return home_dir; }; /* * When looking up the home directory of the current user, see if the * HOME environment variable is set, and if so, return its value. */ if(login_user) { home_dir = getenv("HOME"); if(home_dir) return home_dir; }; /* * Look up the password entry of the user. * First the POSIX threads version - this is painful! */ #ifdef THREAD_COMPATIBLE { struct passwd *ret; /* The returned pointer to pwd */ int status; /* The return value of getpwnam_r() */ /* * Look up the password entry of the specified user. */ if(login_user) status = getpwuid_r(geteuid(), &home->pwd, home->buffer, home->buflen, &ret); else status = getpwnam_r(user, &home->pwd, home->buffer, home->buflen, &ret); if(status || !ret) { _err_record_msg(home->err, "User '", user, "' doesn't exist.", END_ERR_MSG); return NULL; }; /* * Get a pointer to the string that holds the home directory. */ home_dir = home->pwd.pw_dir; }; /* * Now the classic unix version. */ #else { struct passwd *pwd = login_user ? getpwuid(geteuid()) : getpwnam(user); if(!pwd) { _err_record_msg(home->err, "User '", user, "' doesn't exist.", END_ERR_MSG); return NULL; }; /* * Get a pointer to the home directory. */ home_dir = pwd->pw_dir; }; #endif return home_dir; } /*....................................................................... * Return a description of the last error that caused _hd_lookup_home_dir() * to return NULL. * * Input: * home HomeDir * The resources needed to record the home directory. * Output: * return char * The description of the last error. */ const char *_hd_last_home_dir_error(HomeDir *home) { return home ? _err_get_msg(home->err) : "NULL HomeDir argument"; } /*....................................................................... * The _hd_scan_user_home_dirs() function calls a user-provided function * for each username known by the system, passing the function both * the name and the home directory of the user. * * Input: * home HomeDir * The resource object for reading home * directories. * prefix const char * Only information for usernames that * start with this prefix will be * returned. Note that the empty & string "", matches all usernames. * data void * Anonymous data to be passed to the * callback function. * callback_fn HOME_DIR_FN(*) The function to call for each user. * Output: * return int 0 - Successful completion. * 1 - An error occurred. A description * of the error can be obtained by * calling _hd_last_home_dir_error(). */ int _hd_scan_user_home_dirs(HomeDir *home, const char *prefix, void *data, HOME_DIR_FN(*callback_fn)) { int waserr = 0; /* True after errors */ int prefix_len; /* The length of prefix[] */ /* * Check the arguments. */ if(!home || !prefix || !callback_fn) { if(home) { _err_record_msg(home->err, "_hd_scan_user_home_dirs: Missing callback function", END_ERR_MSG); }; return 1; }; /* * Get the length of the username prefix. */ prefix_len = strlen(prefix); /* * There are no reentrant versions of getpwent() etc for scanning * the password file, so disable username completion when the * library is compiled to be reentrant. */ #if defined(PREFER_REENTRANT) && defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199506L #if defined __sun && defined __SVR4 if(thr_main() >= 0) /* thread library is linked in */ #else if(1) #endif { struct passwd pwd_buffer; /* A returned password entry */ struct passwd *pwd; /* A pointer to pwd_buffer */ char buffer[512]; /* The buffer in which the string members of */ /* pwd_buffer are stored. */ /* * See if the prefix that is being completed is a complete username. */ if(!waserr && getpwnam_r(prefix, &pwd_buffer, buffer, sizeof(buffer), &pwd) == 0 && pwd != NULL) { waserr = callback_fn(data, pwd->pw_name, pwd->pw_dir, _err_get_msg(home->err), ERR_MSG_LEN); }; /* * See if the username of the current user minimally matches the prefix. */ if(!waserr && getpwuid_r(getuid(), &pwd_buffer, buffer, sizeof(buffer), &pwd) == 0 && pwd != NULL && strncmp(prefix, pwd->pw_name, prefix_len)==0) { waserr = callback_fn(data, pwd->pw_name, pwd->pw_dir, _err_get_msg(home->err), ERR_MSG_LEN); }; /* * Reentrancy not required? */ } else #endif { struct passwd *pwd; /* The pointer to the latest password entry */ /* * Open the password file. */ setpwent(); /* * Read the contents of the password file, looking for usernames * that start with the specified prefix, and adding them to the * list of matches. */ while((pwd = getpwent()) != NULL && !waserr) { if(strncmp(prefix, pwd->pw_name, prefix_len) == 0) { waserr = callback_fn(data, pwd->pw_name, pwd->pw_dir, _err_get_msg(home->err), ERR_MSG_LEN); }; }; /* * Close the password file. */ endpwent(); }; /* * Under ksh ~+ stands for the absolute pathname of the current working * directory. */ if(!waserr && strncmp(prefix, "+", prefix_len) == 0) { const char *pwd = hd_getpwd(home); if(pwd) { waserr = callback_fn(data, "+", pwd, _err_get_msg(home->err),ERR_MSG_LEN); } else { waserr = 1; _err_record_msg(home->err, "Can't determine current directory.", END_ERR_MSG); }; }; return waserr; } /*....................................................................... * Return the value of getenv("PWD") if this points to the current * directory, or the return value of getcwd() otherwise. The reason for * prefering PWD over getcwd() is that the former preserves the history * of symbolic links that have been traversed to reach the current * directory. This function is designed to provide the equivalent * expansion of the ksh ~+ directive, which normally returns its value * of PWD. * * Input: * home HomeDir * The resource object for reading home directories. * Output: * return const char * A pointer to either home->buffer, where the * pathname is recorded, the string returned by * getenv("PWD"), or NULL on error. */ static const char *hd_getpwd(HomeDir *home) { /* * Get the absolute path of the current working directory. */ char *cwd = getcwd(home->buffer, home->buflen); /* * Some shells set PWD with the path of the current working directory. * This will differ from cwd in that it won't have had symbolic links * expanded. */ const char *pwd = getenv("PWD"); /* * If PWD was set, and it points to the same directory as cwd, return * its value. Note that it won't be the same if the current shell or * the current program has changed directories, after inheriting PWD * from a parent shell. */ struct stat cwdstat, pwdstat; if(pwd && cwd && stat(cwd, &cwdstat)==0 && stat(pwd, &pwdstat)==0 && cwdstat.st_dev == pwdstat.st_dev && cwdstat.st_ino == pwdstat.st_ino) return pwd; /* * Also return pwd if getcwd() failed, since it represents the best * information that we have access to. */ if(!cwd) return pwd; /* * In the absence of a valid PWD, return cwd. */ return cwd; } #endif /* ifndef WITHOUT_FILE_SYSTEM */ genometools-1.5.1/src/external/libtecla-1.6.1/homedir.h000066400000000000000000000070151211610345200225000ustar00rootroot00000000000000#ifndef homedir_h #define homedir_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ typedef struct HomeDir HomeDir; /* * The following constructor and destructor functions create and * delete the resources needed to look up home directories. */ HomeDir *_new_HomeDir(void); HomeDir *_del_HomeDir(HomeDir *home); /* * Return the home directory of a specified user, or NULL if unknown. */ const char *_hd_lookup_home_dir(HomeDir *home, const char *user); /* * Get the description of the that occured when _hd_lookup_home_dir() was * last called. */ const char *_hd_last_home_dir_error(HomeDir *home); /* * The _hd_scan_user_home_dirs() function calls a user-provided function * for each username known by the system, passing the function both * the name and the home directory of the user. * * The following macro can be used to declare both pointers and * prototypes for the callback functions. The 'data' argument is * a copy of the 'data' argument passed to _hd_scan_user_home_dirs() * and is intended for the user of _hd_scan_user_home_dirs() to use * to pass anonymous context data to the callback function. * The username and home directories are passed to the callback function * in the *usrnam and *homedir arguments respectively. * To abort the scan, and have _hd_scan_user_home_dirs() return 1, the * callback function can return 1. A description of up to maxerr * characters before the terminating '\0', can be written to errmsg[]. * This can then be examined by calling _hd_last_home_dir_error(). * To indicate success and continue the scan, the callback function * should return 0. _hd_scan_user_home_dirs() returns 0 on successful * completion of the scan, or 1 if an error occurred or a call to the * callback function returned 1. */ #define HOME_DIR_FN(fn) int (fn)(void *data, const char *usrnam, __attribute__ ((unused)) const char *homedir, char *errmsg, int maxerr) int _hd_scan_user_home_dirs(HomeDir *home, const char *prefix, void *data, HOME_DIR_FN(*callback_fn)); #endif genometools-1.5.1/src/external/libtecla-1.6.1/html/000077500000000000000000000000001211610345200216415ustar00rootroot00000000000000genometools-1.5.1/src/external/libtecla-1.6.1/html/changes.html000066400000000000000000004246211211610345200241500ustar00rootroot00000000000000The tecla library change log

In the following log, modification dates are listed using the European
convention in which the day comes before the month (ie. DD/MM/YYYY).
The most recent modifications are listed first.

31/10/2004 mcs@astro.caltech.edu (problem reported by Godfrey van der Linden) 
           getline.c
             The gl_event_handler() function had the endif of a
             conditional compilation clause in the wrong place. This
             only upset the compiler on unusual systems that don't
             have select(). The problem was seen under Mac OS X, due
             to the configuration problem in 1.6.0 that caused the
             configure script to mistakenly report that select wasn't
             available.

31/10/2004 mcs@astro.caltech.edu (info provided by Ivan Rayner)
           configure.in configure Makefile.in
             Ivan reported that under IRIX 6.5 it is necessary to add
             -D_XOPEN_SOURCE=500 to the compiler flags, when compiling
             the reentrant version of the library. Thus, whereas
             previously I hardwired the value of DEFINES_R in
             Makefile.in, I have now made this a variable in the
             configure script, which is augmented with the above
             addition, within an IRIX-specific switch clause.

             Also apparently configure leaves the RANLIB variable
             blank, instead of setting it to ":", so I have now
             explicitly set this to ":", within the new IRIX clause of
             the configure script.

31/10/2004 mcs@astro.caltech.edu (info provided by Ivan Rayner)
           getline.c
             Under IRIX, the compiler warned that gl_read_unmasked()
             was returning an int, which was then being assigned to an
             enumeration type. This is techically fine, but it
             highlighted the fact that I had meant to declare
             gl_read_unmasked() to directly return the enumerated
             type. I have now done so.

26/09/2004 mcs@astro.caltech.edu
           getline.c
             Users can now turn off interactive command-line editing
             by setting the TERM environment variable to the word "dumb".

18/07/2004 mcs@astro.caltech.edu (problem noted by Michael MacFaden)
           getline.c
             Calling gl_terminal_size() on a system without support
             for SIGWINCH caused a divide-by-zero error in an unintended
             call to gl_erase_line(), because gl_update_size() was
             incorrectly being called to query the terminal size,
             instead of gl_query_size().

18/07/2004 Padraig Brady  (documented here by mcs@astro.caltech.edu)
           getline.c
             The suspend and termination signal-handlers installed by
             gl_tty_signals(), were being installed swapped.

03/06/2004 Mike Meaney  (documented here by mcs@astro.caltech.edu)
           getline.c
             Mike pointed out the fact that the curses setupterm()
             function is actually documented to exit the application
             if an error occurs while its optional errret argument is
             NULL. I hadn't noticed this, and because I didn't need
             the extra information returned in the errret argument, I
             was passing it a NULL. As suggested by Mike, I now pass
             this argument a pointer to a dummy errret variable.

23/05/2004 mcs@astro.caltech.edu (problem noted by John Beck)
           man/func/cpl_complete_word.in
             Some of the prototypes of functions and types documented
             by the cpl_complete_word man page, weren't listed in the
             Synopsis section of this man page. They are now listed
             there.
            
23/05/2004 mcs@astro.caltech.edu
           getline.c man/func/gl_get_line.in
             I have now added support for calling gl_normal_io() from
             any callback functions that the application installs by
             calling either gl_inactivity_timeout(), or gl_watch_fd().
             Previously, if one of these callback functions called
             gl_normal_io(), then after returning to gl_get_line(),
             gl_get_line() would incorrectly assume that the terminal
             was still in raw I/O mode. Now, gl_get_line() checks to
             see if gl_normal_io() was called by the callback, and
             if so, calls _gl_raw_io() to reinstate raw I/O mode.

21/05/2004 mcs@astro.caltech.edu
           configure.in configure
             On Mac OS X the code that the configure script used to
             check for select() failed due to missing symbols in
             sys/select.h. Moving the inclusion of sys/select.h to
             after the inclusion of sys/time.h, sys/types.h and
             sys/unistd.h fixed this.

11/05/2004 mcs@astro.caltech.edu
           getline.c man/func/gl_get_line.in
             If the line buffer returned by one call to gl_get_line()
             was passed as the start_line argument of the next call to
             gl_get_line(), then instead of the just-entered line
             being presented back to the user for further editing, the
             start_line argument was effectively ignored, because the
             line buffer whose pointer was being passed back, was
             being cleared before the start_line pointer was examined.
             This appears to have been a case of me incorrectly
             thinking that I had forgotten to initialize gl->line[]
             and gl->ntotal in the gl_reset_input_line() function, and
             then "fixing" this supposed omission. Removing this
             erroneous fix, restored things to how they were meant to
             be. To make it unlikely that I will make the same mistake
             again, I have renamed the function from
             gl_reset_input_line() to gl_reset_editor(), to stop it
             looking as though it is meant to reset the contents of
             the input line (that is what gl_truncate_buffer() is
             for), explicitly stated that it doesn't clear the input
             line, in the header comments of the function, and added a
             prominent warning comment in the body of the function.

             Also, since support for passing back the returned line
             pointer via the start_line argument of the next call to
             gl_get_line(), wasn't documented in the man page, but was
             meant to be supported, and definitely used to work, I
             have now amended the man page documentation of
             gl_get_line() to explicitly state that this feature is
             officially supported.

2?/04/2004 Released 1.6.0

22/04/2004 mcs@astro.caltech.edu  (Fixed a bug reported by John Beck)
           getline.c
             When an error, signal, or other abnormal event aborted
             gl_get_line(), the cleanup code that restored the
             terminal to a sane state, also overwrote the value of
             errno that was associated with the aborting event. An
             I/O error occurring in the cleanup code would have also
             overwritten the value to be returned by
             gl_return_status(), and thus remove any possibility of
             the caller finding out what really caused gl_get_line()
             to abort. I have now written a new internal function
             called, gl_record_status(), which records the completion
             status to be returned by gl_return_status(), and the
             value to assign to errno just before gl_get_line()
             returns. This is called wherever code detects conditions
             that require gl_get_line() to return early. The function
             ensures that once an abnormal completion status has been
             recorded for return, subsequent completions statuses
             aren't recorded. This ensures that the caller sees the
             original cause of the abnormal return, rather than any
             error that occurs during cleaning up from this before
             return.

17/04/2004 mcs@astro.caltech.edu
           getline.c
             If an application's callback called gl_read_char() after
             calling gl_normal_io(), it would inappropriately
             redisplay the input line, when it called _gl_raw_io() to
             temporarily switch the terminal back into raw mode.

             To fix this, _gl_raw_io() now takes a new 'redisplay'
             argument, which specifies whether or not to queue a
             redisplay of the input line. I also created a new
             gl->postpone flag, which is set by gl_normal_io(), and
             cleared by _gl_raw_io() (when its redisplay argument is
             true). When this flag is set, gl_flush_output() ignores
             queued redisplays, as it generally should between calls
             to gl_normal_io() and gl_raw_io(). Thus its effect is to
             postpone redisplays while line editing is suspended.

11/04/2004 mcs@astro.caltech.edu
           history.c man/misc/tecla.in
             History searches can now include the globbing operators
             *, ?, []. When a search prefix is found to have at least
             one of these characters, then only history lines that
             completely match that pattern are returned.

11/04/2004 mcs@astro.caltech.edu  (issue raised by Mark Coiley)
           getline.c ioutil.c
             There appears to be a bug in Solaris's terminal I/O.
             When the terminal file descriptor is placed in
             non-blocking I/O mode, and the terminal is switched from
             canonical to raw mode, characters that were previously
             entered in canonical I/O mode don't become available to
             be read until the user types one character more. Select()
             incorrectly says that there are no characters available,
             and read() returns EAGAIN. This is only a problem for
             gl_get_line() when gl_get_line() is in non-blocking
             server I/O mode, so most users won't have experienced any
             problems with this.

             The only way that I have found to get read() to return
             the characters, without the user first having to type
             another character, is to turn off non-blocking I/O before
             calling read(). Select() still claims that there are no
             characters available to be read, but read happily returns
             them anyway. Fortunately, one can perform non-blocking
             terminal reads without setting the non-blocking I/O flag
             of the file descriptor, simply by setting the VTIME
             terminal attribute to zero (which I already was
             doing). Thus, when in non-blocking server I/O, I now turn
             off the non-blocking I/O flag, attempt to read one
             character and only if this fails, do I then call the
             select() based event handler to implement any configured
             non-zero timeout, before attempting the read again. Of
             course the non-blocking I/O flag is still needed for
             writing, so I only turn it off temporarily while reading.

25/03/2004 mcs@astro.caltech.edu  (bug reported by Gregory Harris)
           Makefile.in
             It appears that when in February, I patched Makefile.in
             to add abolute paths to the install-sh shell-script,
             I accidentally replaced install-sh with install.sh. I
             corrected the name in the Makefile.

25/03/2004 Gregory Harris  (documented here by mcs)
           configure.in configure
             Greg added the configuration parameters needed to build
             the shared version of the libtecla library under FreeBSD.

25/03/2004 mcs@astro.caltech.edu
           getline.c libtecla.h libtecla.map man/func/gl_get_line.in
           man/func/gl_read_char.in
             I wrote a public function called gl_read_char(). Unlike
             gl_query_char(), this function neither prompts the user
             for input, nor displays the character that was entered.
             In fact it doesn't write anything to the terminal, and
             takes pains not to disturb any incompletely entered
             input line, and can safely be called from application
             callback functions.

21/03/2004 mcs@astro.caltech.edu
           getline.c libtecla.h libtecla.map man/func/gl_get_line.in
           man/func/gl_query_char.in
             I wrote a public function called gl_query_char(), which
             prompts the user and awaits a single-character reply,
             without the user having to hit return.

23/02/2004 mcs@astro.caltech.edu (bug reported by Gregory Harris)
           configure.in configure getline.c enhance.c demo3.c
             The configure script now checks for the sys/select.h
             header file, and arranges for a C macro called
             HAVE_SYS_SELECT_H to be set if it exists. Thus the files
             that use select() now use this macro to conditionally
             include sys/select.h where available. Apparently this
             header is required under FreeBSD 5.1.

23/02/2004 mcs@astro.caltech.edu
           getline.c libtecla.h man/func/gl_get_line.in
             I wrote two new public functions, gl_append_history() and
             gl_automatic_history(). Together these allow the
             application to take over the responsibility of adding
             lines to the history list from gl_get_line(). I then
             documented their functionality in the gl_get_line man
             page.
           Version 1.6.0
             I incremented the minor version number of the library, to
             comply with the requirement to do so when additions are
             made to the public interface. See libtecla.map for
             details.
           libtecla.map
             I added a new 1.6.0 group for the new minor version, and
             added the above pair of functions to it.

15/02/2004 mcs@astro.caltech.edu (fixes a bug reported by Satya Sahoo)
           history.c
             Calling gl_load_history() multiple times, eventually led
             to a segmentation fault. This was due to the head of the
             list of unused history string segments not getting
             reset when the history buffer was cleared. While
             debugging this problem I also noticed that the history
             resizing function was way too complicated to verify, so
             after fixing the above bug, I heavily simplified the
             history resizing function, trading off a small reduction
             in memory efficiency, for greatly improved clarity, and
             thus made it much more verifiable and maintainable.

14/02/2004 mcs@astro.caltech.edu (fixes a bug reported by Tim Burress).
           getline.c
             If gl_change_terminal() was first used to tell
             gl_get_line to read input from a file, then called later
             to tell it to read subsequent input from a terminal, no
             prompt would be displayed for the first line of
             interactive input. The problem was that on reaching the
             end of the input file, gl_get_line() should have called
             gl_abandon_line(), to tell the next call to gl_get_line()
             to start inputting a new line from scratch. I have added
             this now.

14/02/2004 Krister Walfridsson (documented here by mcs@astro.caltech.edu)
           Makefile.in
             Krister noticed that I had failed to put $(srcdir)/ in front
             of some invokations of install.sh. I have remedied this.
           config.guess config.sub
             I hadn't updated these for a long time, so apparently they
             didn't recognise the BSD system that Krister was using.
             I have now updated them to the versions that come with
             autoconf-2.59. 

22/01/2004 mcs@astro.caltech.edu
           keytab.c
             When parsing key-binding specifications, backslash escaped
             characters following ^ characters were not being expanded.
             Thus ^\\ got interpretted as a control-\ character followed
             by a \ character, rather than simply as a control-\
             character.

12/01/2004 mcs@astro.caltech.edu
           cplfile.c cplmatch.c demo2.c demo3.c demo.c direader.c
           expand.c getline.c history.c homedir.c pathutil.c pcache.c
           configure.in configure INSTALL
             The configuration script now takes a
             "--without-file-system" argument. This is primarily for
             intended for embedded systems that either don't have
             filesystems, or where the file-system code in libtecla is
             unwanted bloat. It sets the WITHOUT_FILE_SYSTEM
             macro. This removes all code related to filesystem
             access, including the entire public file-expansion,
             file-completion and path-lookup facilities. Note that the
             general word completion facility is still included, but
             without the normally bundled file completion
             callback. Actually the callback is still there, but it
             reports no completions, regardless of what string you ask
             it to complete.

             This option is described in the INSTALL document.

12/01/2004 mcs@astro.caltech.edu
           getline.c configure.in configure INSTALL
             The configuration script now takes a
             "--without-file-actions" argument. This allows an
             application author/installer to prevent users of
             gl_get_line() from accessing the filesystem from the
             builtin actions of gl_get_line(). It defines a macro
             called HIDE_FILE_SYSTEM. This causes the
             "expand-filename", "read-from-file", "read-init-files",
             and "list-glob" action functions to be completely
             removed. It also changes the default behavior of actions
             such as "complete-word" and "list-or-eof" to show no
             completions, instead of the normal default of showing
             filename completions.

             This option is described in the INSTALL document.

11/01/2004 mcs@astro.caltech.edu
           getline.c man/func/gl_get_line.in
             In case an application's customized completion handler
             needs to write to the terminal for some unforseen reason,
             there needs to be a way for the it to cleanly suspend raw
             line editing, before writing to the terminal, and the
             caller then needs to be aware that it may need to
             resurrect the input line when the callback returns. I
             have now arranged that the completion callback functions
             can call the gl_normal_io() function for this purpose,
             and documented this in the gl_get_line() man page.

11/01/2004 mcs@astro.caltech.edu  (In response to a bug report by Satya Sahoo)
           getline.c
             The gl_configure_getline() function makes a malloc'd copy
             of the names of the configuration files that it is asked
             to read. Before the bug fix, if the application made one
             or more calls to this function, the memory allocated by
             the final call that it made before calling del_GetLine(),
             wasn't being freed. Note that memory allocated in all but
             the final call was being correctly freed, so the maximum
             extent of the memory leak was the length of the file
             name(s) passed in the final call to
             gl_configure_getline(), and an application that didn't
             call gl_configure_getline() didn't suffer any leak.

20/12/2003 mcs@astro.caltech.edu
           history.c
             Ellen tested the history fix that I reported below, and
             pointed out that it still had a problem. This turned out
             to be because getline.c was making some incorrect
             assumptions about the new behavior of history.c. This
             problem and the previous one both revolved around how
             search prefixes were stored and discarded, so I have now
             re-written this part of the code. Previously the search
             prefix was retained by looking for a line with that
             prefix, and keeping a pointer to that line. This saved
             memory, compared to storing a separate copy of the
             prefix, but it led to all kinds of hairy
             interdependencies, so I have now changed the code to keep
             a separate copy of search prefixes. To keep the memory
             requirements constant, the search prefix is stored in the
             history buffer, like normal history lines, but not
             referenced by the time-ordered history list. The prefix
             can now be kept around indefinitely, until a new search
             prefix is specified, regardless of changes to the
             archived lines in the history buffer. This is actually
             necessary to make the vi-mode re-search actions work
             correctly. In particular, I no longer discard the search
             prefix whenever a history search session ends. Also,
             rather than have getline.c keep its own record of when a
             history session is in progress, it now consults
             history.c, so that failed assumptions can't cause the
             kind of discrepancy that occurred before. For this to
             work, getline.c now explicitly tells history.c to cancel
             search sessions whenever it executes any non-history
             action.

14/12/2003 mcs@astro.caltech.edu (bug reported by Ellen Oschmann)
           history.c
             If one searched backwards for a prefix, then returned to
             the original line, changed that line, then started
             another backwards prefix search, getline incorrectly
             discarded the new search prefix in the process of
             throwing away its cached copy of the previous pre-search
             input line. In other words getline was belatedly
             cancelling a previous search, after a new search had
             already partially begun, and thus messed up the new
             search. The obvious fix was to arrange for the current
             search to be cancelled whenever the history pointer
             returns to its starting point, rather than waiting for
             the next search to begin from there.

14/12/2003 mcs@astro.caltech.edu
           history.c
             _glh_recall_line() was returning the last line in the
             history buffer instead of the line requested by the
             caller. This only affected the obscure "repeat-history"
             action-function, which probably isn't used by anybody.

09/12/2003 Version 1.5.0 released.

28/09/2003 mcs@astro.caltech.edu
           homedir.c
             When the home directory of the login user is requested,
             see if the HOME environment variable exists, and if so
             return its value, rather than looking up the user's home
             directory in the password file. This seems to be the
             convention adopted by other unix programs that perform
             tilde expansion, and it works around a strange problem,
             where a third-party libtecla program, statically compiled
             under an old version of RedHat, unexpectedly complained
             that getpwd() returned an error when the program was run
             under RedHat 9.

01/09/2003 mcs@astro.caltech.edu
           getline.c libtecla.h libtecla.map man/func/gl_get_line.in
           man/func/gl_register_action.in.
             It is now possible for an application to register
             external functions as action functions. These actions are
             initially bound to specified key-sequences, but if they
             are registered before the user's configuration file is
             loaded, they can also be re-bound by the user to
             different key-sequences. The function used to register a
             new action, is called gl_register_action().  Action
             functions are passed a readonly copy of the input line
             and the cursor position. They can display text to the
             terminal, or perform other operations on the application
             environment. Currently, they can't edit the input line or
             move the cursor. This will require the future addition of
             functions to queue the invokation of the built-in action
             functions.

26/08/2003 mcs@astro.caltech.edu
           getline.c
             I modified gl_update_buffer() to ensure that the cursor
             stays within the input line after external line
             modifications, and to queue a redisplay of the
             potentially modified input line.

21/07/2003 mcs@astro.caltech.edu
           configure.in configure Makefile.in Makefile.stub INSTALL
             By specifying --without-man-pages or --with-man-pages=no
             as command-line arguments to the configure script, it is
             now possible to have the configure script skip the
             man-page preprocessing step, and arrange for the man-page
             installation targets in the Makefile to do nothing. This
             option is designed for people who embed libtecla within
             other packages. It is also used by Makefile.stub when
             the distclean target is specified.

21/07/2003 mcs@astro.caltech.edu
           configure.in configure
             The previous workaround for recent versions of gcc
             placing /usr/local/include at the start of the system
             inlcude-file search path, broke something else.  The fix
             placed /usr/include before gcc's include area, which
             meant that gcc's modified version of stdarg.h was being
             ignored in deference to the version in /usr/include. I
             have changed the fix to have gcc report the search path,
             then have awk add options to CFLAGS to reorder this path,
             plaing /usr/local/include at the end.

             Also, under Solaris 9, including term.h without first
             including curses.h results in complaints about undefined
             symbols, such as bool. As a result the configure script's
             test for term.h was failing. I have now modified it to
             include curses.h in the test code that it uses to check
             for term.h. In the process I also improved the tests for
             curses.h and term.h to prevent an ncurses version of
             term.h from being used with the system-default version of
             curses.h.

29/06/2003 mcs@astro.caltech.edu
           Makefile.in direader.c homedir.c
             On some systems (eg. linux) the _POSIX_C_SOURCE
             feature-test macro is set by system headers, rather than
             being an option set by a project's Makefile at
             compilation time.  In software, such as tecla, where the
             definition of this macro is used as an indication of
             whether to use the non-reentrant or reentrant versions of
             system functions, this means that the reentrant functions
             are always used, regardless of whether this macro is set
             or not by the project Makefile. Thus, on such systems the
             reentrant and non-reentrant versions of the tecla library
             are essentially identical. This has a couple of
             drawbacks.  First, since thread-safe functions for
             traversing the password file don't exist, the supposedly
             non-reentrant version of the tecla library can't support
             ambiguous tab-completion of usernames in ~username/
             constructions. Secondly, on some systems the use of
             reentrant system functions dictates the use of a shared
             library that isn't needed for the non-reentrant
             functions, thus making it more difficult to distribute
             binary versions of the library.

             To remedy this situation I have modified the DEFINES_R
             variable in Makefile.in to arrange for the compiler to
             define a C macro called PREFER_REENTRANT when it is
             compiling the reentrant version of the tecla library.
             This macro is now used in the source code to determine
             when to require reentrant code. Whithin the source code,
             wherever a potentially non-reentrant interface is used,
             the existance of both this macro and a suitably valued
             _POSIX_C_SOURCE macro, are tested for to see if a
             reentrant alternative to the problem code should be used.

22/06/2003 mcs@astro.caltech.edu
           getline.c
             I changed the way that redisplays are requested and
             performed.  Redisplays are now queued by calling
             gl_queue_redisplay(), and subsequently performed by
             gl_flush_output(), when the queue of already pending
             output has been completely dispatched. This was necessary
             to prevent event handlers from filling up the output
             queue with redisplays, and it also simplifies a number of
             things. In the process I removed the gl_queue_display()
             function. I also wrote a gl_line_erased() function, which
             is now called by all functions that erase the input
             line. I also split the gl_abandon_line() function into
             public and private callable parts, and used the private
             version internally to arrange to discard the input line
             after errors.

             The raw_mode flag was not being initialized by new_GetLine().
             It is now initialized to zero.

             I removed the zapline flag, since using the endline flag to
             communicate the desire to terminate the line, did the same
             thing.

             gl_terminal_move_cursor() now does nothing when the input
             line isn't displayed.

18/03/2003 mcs@astro.caltech.edu
           getline.c
             Fixed bug which was causing newlines not to be output
             at the end of each newly entered line. I was
             interpreting the gl->endline flag in conflicting ways in
             two places. To fix this I have created a gl->displayed
             flag. This flags whether an input line is currently
             displayed.

17/03/2003 mcs@astro.caltech.edu
           getline.c libtecla.h man/func/gl_get_line.in
           man/func/gl_erase_terminal.in libtecla.map
             I added a new function that programs can call to clear
             the terminal between calls to gl_get_line().

11/03/2003 mcs@astro.caltech.edu
           configure.in configure
             Under linux when _POSIX_C_SOURCE is defined, getpwent()
             and associated functions become undefined, because
             _SVID_SOURCE and _BSD_SOURCE become undefined. Adding
             these feature macros back to CFLAGS resolves this.

06/03/2003 mcs@astro.caltech.edu
           getline.c libtecla.map man/func/gl_get_line.in
             Following the lead of Edward Chien, I wrote a function
             called gl_bind_keyseq(), which binds a specified
             key-sequence to a given action, or unbinds the
             key-sequence.

24/02/2003 mcs@astro.caltech.edu
           getline.c libtecla.map man/func/cpl_complete_word.in
             I implemented a simple function called
             cpl_recall_matches().  This recalls the return value of
             the last call to cpl_complete_word().

19/01/2003 mcs@astro.caltech.edu
           getline.c
             The documented signal handling, fd event-handling,
             inactivity timeout handling, and server-mode non-blocking
             I/O features are now implemented for non-interactive
             input streams, such as pipes and files.

19/01/2003 mcs@astro.caltech.edu
           getline.c libtecla.h man/func/gl_get_line.in demo3.c
             I added a new return status enumerator to report
             when an end-of-file condition causes gl_get_line()
             to return NULL.

13/01/2003 mcs@astro.caltech.edu
           history.c
             I rewrote the history facility. The previous
             circular buffer implementation was a nightmare to change,
             and it couldn't efficiently support certain newly
             requested features. The new implementation stores history
             lines in linked lists of fixed sized string segments,
             taken from the buffer, with each line being reference
             counted and recorded in a hash table. If the user enters
             a line multiple times, only one copy of the line is now
             stored. Not only does this make better use of the
             available buffer space, but it also makes it easy to
             ensure that a line whose prefix matches the current
             search prefix, isn't returned more than once in sequence,
             since we can simply see if the latest search result has
             the same hash-table pointer as the previous one, rather
             than having to compare strings. Another plus is that due
             to the use of linked lists of nodes of fixed size line
             segments, there is no longer any need to continually
             shuffle the contents of the buffer in order to defragment
             it. As far as the user is concerned, the visible
             differences are as follows:

             1. If the user enters a given line multiple times in a
                row, each one will be recorded in the history list,
                and will thus be listed by gl_show_history(), and
                saved in the history file. Previously only one line
                was recorded when consecutive duplicates were entered.
                This was a kludge to prevent history recall from
                recalling the same line multiple times in a row. This
                only achieved the desired result when not recalling by
                prefix.

             2. Not only simple recall, but prefix-based history line
                recalls now don't return the same line multiple times
                in a row. As mentioned in (1) above, previously this
                only worked when performing a simple recall, without a
                search prefix.

28/12/2002 mcs@astro.caltech.edu
           getline.c
             The one-line function, gl_buff_curpos_to_term_curpos()
             was only being used by gl_place_cursor(), so I inlined it
             in that function, and removed it.

28/12/2002 mcs@astro.caltech.edu
           getline.c
             gl_suspend_process() was calling the application-level
             gl_normal_io() and gl_raw_io() functions, where it should
             have been calling the internal versions _gl_normal_io()
             and _gl_raw_io().
             Also gl_handle_signal() was masking and unmasking just
             the signals of the first element of the gl[] array
             argument. It now masks and unmasks all trappable signals.

28/12/2002 mcs@astro.caltech.edu
           getline.c
             Now that the number of terminal characters used to
             display the current input line, is recorded, the relative
             line on which the last character of the input line
             resides can be determined without having to call
             gl_buff_curpos_to_term_curpos(). This is now used by
             gl_normal_io() via gl_start_newline(), so there is now no
             need for gl_buff_curpos_to_term_curpos() to be
             async-signal safe. I have thus removed the annoying
             gl->cwidth[] array, and gl_buff_curpos_to_term_curpos()
             now calls gl_width_of_char() directly again. There is
             also now no need for the gl_line_of_char_start() and
             gl_line_of_char_end() functions, so I have removed them.

28/12/2002 mcs@astro.caltech.edu
           getline.c
             Unfortunately it turns out that the terminfo/termcap
             control sequence which is defined to delete everything
             from the current position to the end of the terminal, is
             only defined to work when at the start of a terminal
             line. In gnome terminals in RedHat 8.0, if it is used
             within a terminal line, it erases the whole terminal
             line, rather than just what follows the cursor. Thus to
             portably truncate the displayed input line it is
             necessary to first use the control sequence which deletes
             from the cursor position to the end of the line, then if
             there are more terminal lines, move to the start of the
             next line, and use the delete to end-of-terminal control
             sequence, then restore the cursor position. This requires
             that one know how many physical terminal lines are used
             by the current input line, so I now keep a record of the
             number of characters so far displayed to the terminal
             following the start of the prompt, and the new
             gl_truncate_display() function uses this information to
             truncate the displayed input line from the current cursor
             position.

28/12/2002 mcs@astro.caltech.edu
           getline.c
             gl_start_newline() now moves to an empty line following
             the input line, rather than just to the next line. It
             also arranges for the input line to be redisplayed before
             editing resumes. A major user of this is gl_print_info(),
             which now need not be followed by an explicit call to
             gl_redisplay(), since the terminal input loop in
             gl_get_input_line() ensures that gl_redisplay() is called
             after any action function that asserts gl->redisplay.
             Also, all functions that erase the displayed input line
             can now call the gl_erase_line() function, which is
             designed to work correctly even when a terminal resize
             invalidates the horizontal cursor position.  Finally, the
             new gl_queue_display() function is now used by functions
             that need to arrange for the input line to be displayed
             from scratch after the displayed line has been erased or
             invalidated by other text being written to the terminal.
             All of these changes are aimed at reducing the number of
             places that directly modify gl->term_curpos and
             gl->redisplay.

22/12/2002 Markus Gyger   (logged here by mcs)
           Makefile.in update_html
	     In places where echo and sed were being used to extract
	     the base names of files, Markus substituted the basename
	     command. He also replaced explicit cp and chmod commands
	     with invokations of the install-sh script.
           configure.in
             Use $target_os and $target_cpu, where appropriate,
	     instead of $target.
           configure.in
             The Solaris man function and library man pages should
	     be in sections 3lib and 3tecla respectively, only in
	     Solaris version 2.8 and above.
           configure.in
             Markus provided values for the man page configuration
             variables for HPUX.
           man/*/*.in
             I had missed parameterizing man page section numbers in
	     the man page titles, Markus corrected this.
           man/func/libtecla_version.in
             Fixed incorrect section number in the link to the
             libtecla man page.
           homedir.c
             When compiled to be reentrant, although one can't use the
	     non-reentrant getpwent() function to scan the password
	     file for username completions, one can at least see if
	     the prefix being completed is a valid username, and if
	     the username of the current user minimally matches the
	     prefix, and if so list them. I simplified Markus'
	     modification by adding a prefix argument to the
             _hd_scan_user_home_dirs() function, and redefining the
	     function description accordingly, such that now it
	     reports only those password file entries who's usernames
	     minimally match the specified prefix. Without this, it
	     would have been necessary to peak inside the private data
	     argument passed in by cf_complete_username().
             Markus also provided code which under Solaris uses the
             non-reentrant interfaces if the reentrant version of the
             library isn't linked with the threads library.

19/12/2002 mcs@astro.caltech.edu
           Makefile.in
             Markus pointed out that LDFLAGS was being picked up by
             the configure script, but not then being interpolated
             into te Makefile. I have thus added the necessary
             assignment to Makefile.in and arranged for the value of
             LDFLAGS to be passed on to recursive make's. I also did
             the same for CPPFLAGS, which had also been omitted.

18/12/2002 mcs@astro.caltech.edu
           man/* man/*/* configure.in configure Makefile.in
           update_html
             It turns out that the assignment of man page sections to
             topics differs somewhat from system to system, so this is
             another thing that needs to be configured by the main
             configuration script, rather than being hardwired. All
             man pages have now been moved into suitably named
             topic-specific sub-directories of the top-level man
             directory, and instead of having a numeric suffix, now
             have the .in suffix, since they are now preprocessed by
             the configure script, in the same fashion as Makefile.in.
             Whithin these *.in versions of the man pages, and within
             Makefile.in, the installation subdirectory (eg. man1) and
             the file-name suffix (eg. 1), are written using
             configuration macros, so that they get expanded to the
             appropriate tokens when the configure script is run. In
             principle, the man pages could also take advantage of
             other configuration macros, such as the one which expands
             to the library installation directory, to include full
             path names to installed files in the documentation, so in
             the future this feature could have more uses than just
             that of parameterizing man page sections.

18/12/2002 mcs@astro.caltech.edu
           man3 man3/* Makefile.in html/index.html update_html
             Markus suggested splitting the gl_get_line(3) man page
             into user and developer sections, and also pointed out
             that the enhance man page should be in section 1, not
             section 3. I have thus created a top-level man
             directory in which to place the various sections, and
             moved the man3 directory into it. The enhance.3 man page
             is now in man/man1/enhance.1. I have extracted all
             user-oriented sections from the gl_get_line(3) man page
             and placed them in a new man7/tecla.7 man page.

18/12/2002 mcs@astro.caltech.edu
           getline.c
             Terminal resizing was broken in normal mode, due to
             me forcing the terminal cursor position to zero in the
             wrong place in gl_check_caught_signal().

14/12/2002 Markus Gyger  (logged here by mcs)
           configure.in configure
             Under Solaris, recent versions of gcc search
             /usr/local/include for header files before the system
             directories. This caused a problem if ncurses was
             installed under Solaris, since the termcap.h include file
             in /usr/local/include ended up being used at compile
             time, whereas the system default version of the curses
             library was used at link time. Since the two libraries
             declare tputs() differently, this evoked a complaint from
             gcc. Markus came up with a way to force Gnu cpp to move
             /usr/local/include to the end of the system-include-file
             search path, where it belongs.

13/12/2002 mcs@astro.caltech.edu
           man3/gl_io_mode.3
             I rewrote the man page which documents the new non-blocking
             server I/O mode.

12/12/2002 mcs@astro.caltech.edu
           demo3.c
             I wrote a new version of demo3.c, using signal handlers
             that call gl_handle_signal() and gl_abandon_line(), where
             previously in this demo, these functions were called from
             the application code.

05/12/2002 mcs@astro.caltech.edu
           getline.c
             gl_normal_io(), gl_raw_io() and gl_handle_signal() and
             gl_abandon_line() are now signal safe, provided that
             signal handlers that call them are installed with sa_mask's
             that block all other signals who's handlers call them.
             This is the case if gl_tty_signals() is used to install
             signal handlers that call any of these functions.

             A major stumbling block that had to be overcome was that
             gl_displayed_char_width() calls isprint(), which can't
             safely be called from a signal handler (eg. under linux,
             the is*() functions all use thread-specific data
             facilities to support per-thread locales, and the
             thread-specific data facilities aren't signal safe). To
             work around this, all functions that modify the
             input-line buffer, now do so via accessor functions which
             also maintain a parallel array of character widths, for
             use by gl_buff_curpos_to_term_curpos() in place of
             gl_displayed_char_width(). Other minor problems were the
             need to avoid tputs(), who's signal safety isn't defined.

05/12/2002 Eric Norum        (logged here by mcs@astro.caltech.edu)
           configure.in
             Eric provided the configuration information needed
             to build shared libraries under Darwin (Max OS X).

05/12/2002 Richard Mlynarik  (logged here by mcs@astro.caltech.edu)
           configure.in
             AC_PROG_RANLIB gets the wrong version of ranlib when
             cross compiling, so has now been replaced by an
             invokation of AC_CHECK_TOOL. In addition, AC_CHECK_TOOL
             is also now used to find an appropriate version of LD.

05/12/2002 mcs@astro.caltech.edu (based on patch by Pankaj Rathore)
           getline.c libtecla.h libtecla.map man3/gl_get_line.3
             The new gl_set_term_size() function provides a way
             to tell gl_get_line() about changes in the size of
             the terminal in cases where the values returned by
             ioctl(TIOCGWINSZ) isn't correct.

05/12/2002 mcs@astro.caltech.edu
           getline.c
             Rather than calling sprintf() to see how much space would
             be needed to print a given number in octal, I wrote a
             gl_octal_width() function, for use by
             gl_displayed_char_width().  This makes the latter
             function async signal safe.

05/12/2002 mcs@astro.caltech.edu
           chrqueue.c
             Whenever the buffer is exhausted, and getting a new
             buffer node would require a call to malloc(), attempt
             to flush the buffer to the terminal. In blocking I/O
             mode this means that the buffer never grows. In
             non-blocking I/O mode, it just helps keep the buffer
             size down.

05/12/2002 mcs@astro.caltech.edu
           freelist.h freelist.c
             The new _idle_FreeListNodes() function queries the
             number of nodes in the freelist which aren't currently
             in use.

05/12/2002 mcs@astro.caltech.edu
           Makefile.stub
             This now accepts all of the targets that the configured
             makefile does, and after configuring the latter makefile,
             it invokes it with the same options.

03/12/2002 mcs@astro.caltech.edu
           mans3/gl_io_mode.3
             I completed the man page for all of the new functions
             related to non-blocking I/O.

01/12/2002 mcs@astro.caltech.edu
           man3/gl_get_line.3
             I wrote a long section on reliable signal handling,
             explaining how gl_get_line() does this, how to make
             use of this in a program, and how to handle signals
             reliably when faced with other blocking functions.
             This basically documents what I have learnt about
             signal handling while working on this library.

01/12/2002 mcs@astro.caltech.edu
           getline.c man3/gl_get_line.3
             In non-blocking server mode, the gl_replace_prompt()
             function can now be used between calls to gl_get_line()
             if the application wants to change the prompt of the
             line that is being edited.

01/12/2002 mcs@astro.caltech.edu
           man3/gl_get_line.3
             I documented the new gl_return_status() and
             gl_error_message() functions.

01/12/2002 mcs@astro.caltech.edu
           getline.c man3/gl_get_line.3
             Added SIGPOLL and SIGXFSZ to the list of signals that
             are trapped by default. These are process termination
             signals, so the terminal needs to be restored to a
             usable state before they terminate the process.

27/11/2002 mcs@astro.caltech.edu
           getline.c libtecla.h
             Completed the essential changes needed to support
             non-blocking server-I/O mode.

             The new gl_io_mode() function allows one to switch to
             and from non-blocking server-I/O mode.

             The new gl_raw_io() function is used in non-blocking
             server-I/O mode to switch the terminal into non-blocking
             raw I/O mode.

             The new gl_normal_io() function is used in non-blocking
             server-I/O mode to switch the restore the terminal to
             a normal, blocking state. This is used to suspend line
             input before suspending the process or writing messages
             to the terminal.

             The new gl_tty_signals() function installs specified
             signals handlers for all signals that suspend, terminate
             or resume processes, and also for signals that indicate
             that the terminal has been resized. This not only saves
             the application from having to keep its own ifdef'd list
             of such signals, of which there are many, but it also
             makes sure that these signal handlers are registered
             correctly. This includes using the sa_mask member of each
             sigaction structure to ensure that only one of these
             handlers runs at a time. This is essential to avoid the
             signal handlers all trying to simultaneously modify
             shared global data.

             The new gl_handle_signal() function is provided for
             responding (from application level) to signals caught by
             the application. It handles process suspension, process
             termination and terminal resize signals.

             The new gl_pending_io() function tells the application
             what direction of I/O gl_get_line() is currently waiting
             for.

             In non-blocking server I/O mode, the new
             gl_abandon_line() function can be called between calls to
             gl_get_line() to discard an input line and force the next
             call to gl_get_line() to start the input of a new line.

             Also, in non-blocking server-I/O gl_get_line() doesn't
             attempt to do anything but return when one of the signals
             that it is configured to catch is caught. This is
             necessary because when in this mode, the application is
             required to handle these signals when gl_get_line() is
             running, and the default configuration of most of these
             signals in gl_get_line() is to restore the terminal then
             call the application signal handlers. This would be a
             case of too many cooks spoiling the broth, so in this
             mode, gl_get_line() always defers to the application's
             signal handlers.
             
26/11/2002 mcs@astro.caltech.edu
           getline.c libtecla.h
             I implemented a couple of new functions to support
             reliable signal handling, as now documented
             (see above) in the gl_get_line(3) man page.

             The new gl_catch_blocked() function tells gl_get_line()
             to unblock all configured signals around calls to
             long-running functions, not only those that aren't
             blocked when gl_get_line() is called. This allows
             the caller to implement reliable signal handling,
             since the unblocking is only done from within code
             protected by sigsetjmp(), which avoids race conditions.

             The new gl_list_signals() function fills a provided
             sigset_t with the set of signals that gl_get_line() is
             currently configured to catch. This allows callers to
             block said signals, such that they are only unblocked by
             gl_get_line() when it is waiting for I/O. When used in
             conjunction with the gl_catch_blocked() function, this
             removes the potential for race conditions.

             Also, when gl_get_line() installs its signal handler,
             it uses the sa_mask member of the sigaction structure
             to ensure that only one instance of this signal handler
             will ever be executing at a time.

25/11/2002 mcs@astro.caltech.edu (bug reported by Pankaj Rathore)
           getline.c
             When any history recall action was invoked when the
             input line buffer was full, an error message would be
             displayed complaining about the length of the string
             in the line input buffer being inconsistent with the
             specified allocated size. This was because instead of
             sending the allocated size of the input line, I was
             sending the length excluding the element that is
             reserved for the '\0' terminator. Sending it the
             correct size corrected the problem.

24/11/2002 mcs@astro.caltech.edu
           getline.c
             All public functions which take GetLine objects as
             arguments now block signals on entry and restore the
             signal mask on return. This was an attempt to make it
             safe to call getline functions from signal handlers, but
             the fact is that the functions that I really wanted this
             to apply to, potentially call malloc(), so this currently
             isn't the case.

23/11/2002 mcs@astro.caltech.edu
           getline.c libtecla.h
             The new gl_return_status() function returns an enumerated
             return status which can be used to query what caused
             gl_get_line() to return.

22/11/2002 mcs@astro.caltech.edu
           Most existing .c and .h files, plus errmsg.c errmsg.h
           Makefile.rules
             Until now, many library functions would report error
             messages to stderr. This isn't appropriate for library
             functions, so in place of this behavior, error messages
             are now recorded in internal ErrMsg objects, and passed
             between modules via new module-specific error querying
             functions. In addition, errno is now set appropriately.
             Thus when gl_get_line() and related functions return an
             error, strerror() can be used to look up system errors,
             and gl_error_message() can be used to recover a higher level
             error message. Note that error messages that are
             responses to user actions continue to be reported to the
             terminal, as before.

21/11/2002 mcs@astro.caltech.edu
           getline.c keytab.h keytab.c Makefile.rules
             I wrote a new version of _kt_lookup_binding() that didn't
             require the caller to have access to the innards of a
             KeyTab object. This then enabled me to move the definition
             of KeyTab objects into keytab.c and make the typedef in
             keytab.h opaque. Many nested includes were also moved from
             keytab.h into keytab.c.

05/11/2002 mcs@astro.caltech.edu
           getline.c libtecla.map libtecla.h demo3.c
             I split the old gl_resize_terminal() function into
             two parts, gl_query_size() and gl_update_size(), with
             the latter calling the former to get the new terminal
             size.

05/11/2002 mcs@astro.caltech.edu
           getline.c
             I fixed a long time bug in the terminal resizing code.
             When the cursor wasn't on the last terminal line of the
             input line, the resizing code would redisplay the
             the line one or more lines above where it should be
             restored. This was due to an error in the calculation of
             the number of lines above the cursor position.

04/11/2002 mcs@astro.caltech.edu
           demo.c demo2.c demo3.c
             I used the new gl_display_text() function to display
             introductory text at the startup of each of the demo
             programs. The text is enclosed within a box of asterixes,
             drawn dynamically to fit within the confines of the
             available terminal width.

04/11/2002 mcs@astro.caltech.edu
           libtecla.h getline.c ioutil.c ioutil.h Makefile.rules
           libtecla.map man3/gl_get_line.3 man3/gl_display_text.3
             Needing a way to display introductory text intelligently
             in the demo programs, I wrote and documented the
             gl_display_text() function. This justifies arbitrary
             length text within the bounds of the terminal width,
             with or without optional indentation, prefixes and
             suffixes.

03/11/2002 mcs@astro.caltech.edu
           demo3.c Makefile.rules
             I wrote a new demonstration program. This program acts
             exactly like the main demonstration program, except that
             it uses an external event loop instead of using the
             gl_get_line() internal event loop. This is thus an example
             of the new non-blocking server I/O facility.

02/11/2002 mcs@astro.caltech.edu
           getline.c keytab.c keytab.h libtecla.h man3/gl_get_line.3
           man3/gl_completion_action.3
             I added the ability to register additional word
             completion actions via the new function
             gl_completion_action().  All action functions now take a
             new (void *data) argument, which is stored with the
             function in the symbol table of actions. The new
             gl_completion_action() function uses this feature to
             record dynamically allocated objects containing the
             specified completion function and callback data along
             with either the gl_complete_word() action function, or
             the gl_list_completions() action function.  These two
             actions continue to use the builtin completion functions
             when their data pointer is NULL.

20/10/2002 mcs@astro.caltech.edu
           The following are changes merged from the non-blocking
           gl_get_line() development branch.

           getline.c
             I wrote a gl_start_newline() function, to replace all of
             the explicit calls to output \r\n to stdout.

             Informational messages are now written to the terminal
             using a new variadic function called gl_print_info().
             This starts a newline, writes string arguments until a
             special argument, GL_END_INFO, is seen, then starts
             another newline.

             Changed _output_ to _print_ in the following function
             names gl_output_control_sequence(), gl_output_char(),
             gl_output_string() and gl_output_raw_string().

             gl_print_raw_string() now has a length argument, so that
             strings that aren't terminated with '\0' can be printed.

             The display of the initial contents of a new line to be
             edited has been moved into a new function called
             gl_present_line().

             The gl_get_input_line() function now takes the prompt
             string as an argument so that gl_replace_prompt() can be
             called from within this function instead of from
             gl_get_line().

             Keyboard input is now buffered in a persistent buffer in
             the parent GetLine object. gl_read_character() checks
             this for unprocessed characters in preference to calling
             gl_read_terminal() to append characters to it.  A new
             function, gl_discard_chars(), removes processed
             characters from this buffer. This change is in
             preparation for a non-blocking version of gl_get_line(),
             where partially input key-sequences must be stored
             between calls to gl_get_line().

           getline.c getline.h history.c history.h cplmatch.c \
           cplmatch.h expand.c expand.h
             All terminal output from gl_get_line() is now routed
             through a GL_WRITE_FN() callback function called
             gl_write_fn. Internal functions in cplmatch.c,
             expand.c and history.c have been created which take
             such callbacks to write output. These are used both
             by functions in getline.c, to display file completions,
             expansions, history etc, and as the internals of existing
             public functions in these files that print to stdio
             streams. In the latter case an internal stdio
             GL_WRITE_FN() callback is substituted, so that the
             functions behave as before.

           getline.c chrqueue.c chrqueue.h
             The gl_write_fn() callback used by gl_get_line() now
             writes to a queue, implemented in chrqueue.c. This queue
             is implemented as a list of blocks of buffer segments,
             the number of which shrink and grow as
             needed. The contents of the queue are flushed to the
             terminal via another GL_WRITE_FN() callback passed to the
             queue object. Currently gl_get_line() passes an internal
             function assigned to gl->flush_fn, called
             gl_flush_terminal(), which writes the contents of the
             queue to the terminal, and knows how to handle both
             blocking and non-blocking I/O. The output queue is
             designed to be flushed to the terminal incrementally, and
             thereby also facilitates non-blocking I/O.

           getline.c getline.h
             gl_get_line() now reads all input via the GL_READ_FN()
             callback, assigned to gl->read_fn. Currently this is
             set to an internal function called gl_read_terminal(),
             which knows how to handle both blocking and
             non-blocking I/O.

           getline.c libtecla.h
             The new gl_set_nonblocking() function can be used to
             enable or disable non-blocking I/O. The default is still
             blocking I/O. In non-blocking mode, the terminal is told
             not to wait when either reading or writing would block.
             gl_get_line() then returns, with a return value of NULL,
             but with the terminal left in raw mode, so that the
             caller's event loop can detect key presses. The caller
             should call gl_return_status() to check whether the NULL
             return value was due to an error, lack of input, or
             inability to write to the terminal without waiting. If
             either reading or writing was said to have blocked, the
             user then should check for I/O readiness in the specified
             direction before calling gl_get_line() again to
             incrementally build up the input line.

05/08/2002 mcs@astro.caltech.edu
           man3/gl_get_line.3 man3/gl_inactivity_timeout.3
             I documented the new gl_inactivity_timeout() function.

08/07/2002 mcs@astro.caltech.edu
           libtecla.h getline.c libtecla.map
             I added a new gl_inactivity_timeout() function. On
             systems that have the select system call, this provides
             the option of registering a function that is then called
             whenever no I/O activity has been seen for more than a
             specified period of time. Like the gl_watch_fd()
             facility, timeout callbacks return a code which tells
             gl_get_line() how to proceed after the timeout has been
             handled.
             
04/07/2002 mcs@astro.caltech.edu  (based on a bug report from Michael MacFaden)
           getline.c
             The internal event handler wasn't responding to write
             events on client file descriptors, due to a typo which
             resulted in read events being checked for twice, and
             writes not checked for at all.
           pathutil.c
             The amount of space to allocate for pathnames is supposed
             to come from PATH_MAX in limits.h, but I had neglected to
             include limits.h. This went unnoticed because on most
             systems the equivalent number is deduced by calling
             pathconf(). Apparently under NetBSD this function doesn't
             work correctly over NFS mounts.

30/05/2002 Version 1.4.1 released.

25/05/2002 mcs@astro.caltech.edu  (based on suggestions by Paul Smith)
           pathutil.c
             Apparently, under QNX pathconf("/",_PC_PATH_MAX) returns
             EINVAL. At Paul's suggestion I have modified the code to
             silently substitute the existing MAX_PATHLEN_FALLBACK
             value if pathconf() returns an error of any kind.
           homedir.c
             Under QNX, sysconf(_SC_GETPW_R_SIZE_MAX) also apparently
             returns EINVAL, so as with pathconf() I modified the code
             to substitute a fallback default, rather than
             complaining and failing.
           enhance.c
             Paul told me that the inclusion of sys/termios.h was
             causing compilation of enhance.c to fail under QNX. This
             line is a bug.  The correct thing to do is include
             termios.h without a sub-directory prefix, as I was
             already doing futher up in the file, so I have just
             removed the errant include line.

07/05/2002 mcs@astro.caltech.edu  (async development branch only)
           getline.c
             gl_read_character() now caches and reads unprocessed
             characters from a key-press lookahead buffer. Whenever
             gl_intepret_char() receives a new character which makes
             an initially promising key-sequence no longer match the
             prefix of any binding, it now simply discards the first
             character from the key-press buffer and resets the buffer
             pointer so that the next call to gl_read_character()
             returns the character that followed it, from the buffer.
           getline.c
             The part of gl_get_input_line() which preloads, displays
             and prepares to edit a new input line, has now been moved
             into a function called gl_present_line().

12/02/2002 mcs@astro.caltech.edu
           getline.c configure.in configure
             Mac OS X doesn't have a term.h or termcap.h, but it does
             define prototypes for tputs() and setupterm(), so the
             default prototypes that I was including if no headers
             where available, upset it. I've removed these prototypes.
             I also now conditionally include whichever is found of
             curses.h and ncurses/curses.h for both termcap and
             terminfo (before I wasn't including curses.h when
             termcap was selected).

12/02/2002 mcs@astro.caltech.edu
           Updated version number to 1.4.1, ready for a micro
           release.

12/02/2002 mcs@astro.caltech.edu
           html/index.html
             Added Mac OS X and Cygwin to the list of systems that
             can compile libtecla.

12/02/2002 mcs@astro.caltech.edu
           getline.c
             Under Mac OS X, the tputs() callback function returns
             void, instead of the int return value used by other
             systems. This declaration is now used if both __MACH__
             and __APPLE__ are defined. Hopefully these are the
             correct system macros to check. Thanks for Stephan
             Fiedler for providing information on Mac OS X.

11/02/2002 mcs@astro.caltech.edu
           configure.in configure getline.c
             Some systems don't have term.h, and others have it hidden
             in an ncurses sub-directory of the standard system include
             directory. If term.h can't be found, simply don't include
             it. If it is in an ncurses sub-directory, include
             ncurses/term.h instead of term.h.

04/02/2002 mcs@astro.caltech.edu
           configure.in configure Makefile.in Makefile.rules
             Use ranlib on systems that need it (Mac OS X).  Also,
             make all components of the installation directories where
             needed, instead of assuming that they exist.

04/02/2002 mcs@astro.caltech.edu
           getline.c
             When the tab completion binding was unbound from the tab
             key, hitting the tab key caused gl_get_line() to ring the
             bell instead of inserting a tab character. This is
             problematic when using the 'enhance' program with
             Jython, since tabs are important in Python. I have
             corrected this.

10/12/2001 Version 1.4.0 released.

10/12/2001 mcs@astro.caltech.edu
           getline.c
             If the TIOCGWINSZ ioctl doesn't work, as is the case when
             running in an emacs shell, leave the size unchanged, rather
             than returning a fatal error.

07/12/2001 mcs@astro.caltech.edu
           configure.in configure
             Now that the configure version of CFLAGS is included in
             the makefile, I noticed that the optimization flags -g
             and -O2 had been added. It turns out that if CFLAGS isn't
             already set, the autoconf AC_PROG_CC macro initializes it
             with these two optimization flags. Since this would break
             backwards compatibility in embedded distributions that
             already use the OPT= makefile argument, and because
             turning debugging on needlessly bloats the library, I now
             make sure that CFLAGS is set before calling this macro.

07/12/2001 mcs@astro.caltech.edu
           enhance.c
             Use argv[0] in error reports instead of using a
             hardcoded macro.

07/12/2001 mcs@astro.caltech.edu
           getline.c
             The cut buffer wasn't being cleared after being
             used as a work buffer by gl_load_history().

06/12/2001 mcs@astro.caltech.edu
           configure.in configure
             I removed my now redundant definition of SUN_TPUTS from
             CFLAGS. I also added "-I/usr/include" to CFLAGS under
             Solaris to prevent gcc from seeing conflicting versions
             of system header files in /usr/local/include.

06/12/2001 Markus Gyger (logged here by mcs)
           Lots of files.
             Lots of corrections to misspellings and typos in the
             comments.
           getline.c
             Markus reverted a supposed fix that I added a day or two
             ago. I had incorrectly thought that in Solaris 8, Sun had
             finally brought their declaration of the callback
             function of tputs() into line with other systems, but it
             turned out that gcc was pulling in a GNU version of
             term.h from /usr/local/include, and this was what
             confused me.

05/12/2001 mcs@astro.caltech.edu
           Makefile.in
             I added @CFLAGS@ to the CFLAGS assignment, so that
             if CFLAGS is set as an environment variable when
             configure is run, the corresponding make variable
             includes its values in the output makefile.

05/12/2001 mcs@astro.caltech.edu
           getline.c libtecla.h libtecla.map man3/gl_get_line.3
           man3/gl_last_signal.3
             I added a function that programs can use to find out
             which signal caused gl_get_line() to return EINTR.

05/12/2001 mcs@astro.caltech.edu
           getline.c
             When the newline action was triggered by a printable
             character, it failed to display that character. It now
             does. Also, extra control codes that I had added, to
             clear to the end of the display after the carriage return,
             but before displaying the prompt, were confusing expect
             scripts, so I have removed them. This step is now done
             instead in gl_redisplay() after displaying the full input
             line.

05/12/2001 mcs@astro.caltech.edu
           getline.c man3/gl_get_line.3
             A user convinced me that continuing to invoke meta
             keybindings for meta characters that are printable is a
             bad idea, as is allowing users to ask to have setlocale()
             called behind the application's back. I have thus changed
             this. The setlocale configuration option has gone, and
             gl_get_line() is now completely 8-bit clean, by default.
             This means that if a meta character is printable, it is
             treated as a literal character, rather than a potential
             M-c binding.  Meta bindings can still be invoked via
             their Esc-c equivalents, and indeed most terminal
             emulators either output such escape pairs by default when
             the meta character is pressed, or can be configured to do
             so. I have documented how to configure xterm to do this,
             in the man page.

03/12/2001 mcs@astro.caltech.edu
           getline.c man3/gl_get_line.3
             gl_get_line() by default now prints any 8-bit printable
             characters that don't match keybindings. Previously
             characters > 127 were only printed if preceded by the
             literal-next action.  Alternatively, by placing the
             command literal_if_printable in the tecla configuration
             file, all printable characters are treated as literal
             characters, even if they are bound to action functions.

             For international users of programs written by
             programmers that weren't aware of the need to call
             setlocale() to support alternate character sets, the
             configuration file can now also contain the single-word
             command "setlocale", which tells gl_get_line() to remedy
             this.

27/11/2001 mcs@astro.caltech.edu
           demo.c demo2.c enhance man3/gl_get_line.3
             All demos and programs now call setlocale(LC_CTYPE,"").
             This makes them support character sets of different
             locales, where specified with the LC_CTYPE, LC_ALL, or
             LANG environment variables. I also added this to the demo
             in the man page, and documented its effect.

27/11/2001 mcs@astro.caltech.edu
           getline.c
             When displaying unsigned characters with values over
             127 literally, previously it was assumed that they would
             all be displayable. Now isprint() is consulted, and if it
             says that a character isn't printable, the character code
             is displayed in octal like \307. In non-C locales, some
             characters with values > 127 are displayable, and
             isprint() tells gl_get_line() which are and which aren't.

27/11/2001 mcs@astro.caltech.edu
           getline.c pathutil.c history.c enhance.c demo2.c
             All arguments of the ctype.h character class functions
             are now cast to (int)(unsigned char). Previously they
             were cast to (int), which doesn't correctly conform to
             the requirements of the C standard, and could cause
             problems for characters with values > 127 on systems
             with signed char's.

26/11/2001 mcs@astro.caltech.edu
           man3/enhance.3 man3/libtecla.3
             I started writing a man page for the enhance program.

26/11/2001 mcs@astro.caltech.edu
           Makefile.in Makefile.rules INSTALL
             It is now possible to specify whether the demos and other
             programs are to be built, by overriding the default
             values of the DEMOS, PROGRAMS and PROGRAMS_R variables.
             I have also documented the BINDIR variable and the
             install_bin makefile target.

22/11/2001 mcs@astro.caltech.edu
           getline.c libtecla.h libtecla.map man3/gl_get_line.3
           man3/gl_ignore_signal.3 man3/gl_trap_signal.3
             Signal handling has now been modified to be customizable.
             Signals that are trapped by default can be removed from
             the list of trapped signals, and signals that aren't
             currently trapped, can be added to the list. Applications
             can also specify the signal and terminal environments in
             which an application's signal handler is invoked, and
             what gl_get_line() does after the signal handler returns.

13/11/2001 mcs@astro.caltech.edu
           getline.c man3/gl_get_line.3
             Added half-bright, reverse-video and blinking text to the
             available prompt formatting options.
           getline.c
             Removed ^O from the default VT100 sgr0 capability
             string.  Apparently it can cause problems with some
             terminal emulators, and we don't need it, since it turns
             off the alternative character set mode, which we don't
             use.
           getline.c
             gl_tigetstr() and gl_tgetstr() didn't guard against the
             error returns of tigetstr() and tgetstr() respectively.
             They now do.

11/11/2001 mcs@astro.caltech.edu
           getline.c libtecla.h libtecla.map man3/gl_get_line.3
           man3/gl_prompt_style.3
             Although the default remains to display the prompt string
             literally, the new gl_prompt_style() function can be used
             to enable text attribute formatting directives in prompt
             strings, such as underlining, bold font, and highlighting
             directives.

09/11/2001 mcs@astro.caltech.edu
           enhance.c Makefile.rules configure.in configure
             I added a new program to the distribution that allows one
             to run most third party programs with the tecla library
             providing command-line editing.

08/11/2001 mcs@astro.caltech.edu
           libtecla.h getline.c man3/gl_get_line.3 history.c history.h
             I added a max_lines argument to gl_show_history() and
             _glh_show_history(). This can optionally be used to
             set a limit on the number of history lines displayed.
           libtecla.h getline.c man3/gl_get_line.3
             I added a new function called gl_replace_prompt(). This
             can be used by gl_get_line() callback functions to
             request that a new prompt be use when they return.

06/11/2001 mcs@astro.caltech.edu
           getline.c man3/gl_get_line.3
             I implemented, bound and documented the list-history
             action, used for listing historical lines of the current
             history group.
           getline.c man3/gl_get_line.3 man3/gl_echo_mode.3
             I wrote functions to specify and query whether subsequent
             lines will be visible as they are being typed.

28/10/2001 mcs@astro.caltech.edu
           getline.c man3/gl_get_line.3
             For those cases where a terminal provides its own
             high-level terminal editing facilities, you can now
             specify an edit-mode argument of 'none'. This disables
             all tecla key bindings, and by using canonical terminal
             input mode instead of raw input mode, editing is left up
             to the terminal driver.

21/10/2001 mcs@astro.caltech.edu
           libtecla.h getline.c history.c history.h
           man3/gl_get_line.3 man3/gl_history_info.3
             I added the new gl_state_of_history(),
             gl_range_of_history() and gl_size_of_history()
             functions for querying information about the
             history list.
           history.c
             While testing the new gl_size_of_history()
             function, I noticed that when the history buffer
             wrapped, any location nodes of old lines between
             the most recent line and the end of the buffer
             weren't being removed. This could result in bogus
             entries appearing at the start of the history list.
             Now fixed.

20/10/2001 mcs@astro.caltech.edu

           libtecla.h getline.c history.c history.h
           man3/gl_get_line.3 man3/gl_lookup_history.3
             I added a function called gl_lookup_history(), that
             the application can use to lookup lines in the history
             list.
           libtecla.h getline.c history.c history.h man3/gl_get_line.3
             gl_show_history() now takes a format string argument
             to control how the line is displayed, and with what
             information. It also now provides the option of either
             displaying all history lines or just those of the
             current history group.
           getline.c man3/gl_get_line.3
             gl_get_line() only archives lines in the history buffer
             if the newline action was invoked by a newline or
             carriage return character.

16/10/2001 mcs@astro.caltech.edu

           history.c history.h getline.c libtecla.h libtecla.map
           man3/gl_get_line.3 man3/gl_resize_history.3
           man3/gl_limit_history.3 man3/gl_clear_history.3
           man3/gl_toggle_history.3
	     I added a number of miscellaneous history configuration
	     functions. You can now resize or delete the history
	     buffer, limit the number of lines that are allowed in the
	     buffer, clear either all history or just the history of
	     the current history group, and temporarily enable and
	     disable the history mechanism.

13/10/2001 mcs@astro.caltech.edu

           getline.c
             tputs_fp is now only declared if using termcap or
             terminfo.
           getline.c libtecla.map man3/gl_get_line.3
           man3/gl_terminal_size.3
             I added a public gl_terminal_size() function for
             updating and querying the current size of the terminal.
           update_version configure.in libtecla.h
             A user noted that on systems where the configure script
             couldn't be used, it was inconvenient to have the version
             number macros set by the configure script, so they are
             now specified in libtecla.h. To reduce the likelihood
             that the various files where the version number now
             appears might get out of sync, I have written the
             update_version script, which changes the version number
             in all of these files to a given value.

01/10/2001 mcs@astro.caltech.edu

           getline.c history.c history.h man3/gl_get_line.3
             I added a max_lines argument to gl_save_history(), to
             allow people to optionally place a ceiling on the number
             of history lines saved. Specifying this as -1 sets the
             ceiling to infinity.

01/10/2001 mcs@astro.caltech.edu

           configure.in configure
             Under digital unix, getline wouldn't compile with
             _POSIX_C_SOURCE set, due to type definitions needed by
             select being excluded by this flag. Defining the
             _OSF_SOURCE macro as well on this system, resolved this.

30/09/2001 mcs@astro.caltech.edu

           getline.c libtecla.h history.c history.h man3/gl_get_line.3
           man3/gl_group_history.3
             I implemented history streams. History streams
             effectively allow multiple history lists to be stored in
             a single history buffer. Lines in the buffer are tagged
             with the current stream identification number, and
             lookups only consider lines that are marked with the
             current stream identifier.
           getline.c libtecla.h history.c history.h man3/gl_get_line.3
           man3/gl_show_history.3
             The new gl_show_history function displays the current
             history to a given stdio output stream.

29/09/2001 mcs@astro.caltech.edu

           getline.c
             Previously new_GetLine() installed a persistent signal
             handler to be sure to catch the SIGWINCH (terminal size
             change) signal between calls to gl_get_line(). This had
             the drawback that if multiple GetLine objects were
             created, only the first GetLine object used after the
             signal was received, would see the signal and adapt to
             the new terminal size. Instead of this, a signal handler
             for sigwinch is only installed while gl_get_line() is
             running, and just after installing this handler,
             gl_get_line() checks for terminal size changes that
             might have occurred while the signal handler wasn't
             installed.
           getline.c
             Dynamically allocated copies of capability strings looked
             up in the terminfo or termcap databases are now made, so
             that calls to setupterm() etc for one GetLine object
             don't get trashed when another GetLine object calls
             setupterm() etc. It is now safe to allocate and use
             multiple GetLine objects, albeit only within a single
             thread.
           
28/09/2001 mcs@astro.caltech.edu

           version.c Makefile.rules
             I added a function for querying the version number of
             the library.

26/09/2001 mcs@astro.caltech.edu

           getline.c man3/gl_get_line.3
             I added the new gl_watch_fd() function, which allows
             applications to register callback functions to be invoked
             when activity is seen on arbitrary file descriptors while
             gl_get_line() is awaiting keyboard input from the user.

           keytab.c
             If a request is received to delete a non-existent
             binding, which happens to be an ambiguous prefix of other
             bindings no complaint is now generated about it being
             ambiguous.

23/09/2001 mcs@astro.caltech.edu

           getline.c history.c history.h man3/gl_get_line.3
           libtecla.map demo.c
             I added new public functions for saving and restoring the
             contents of the history list. The demo program now uses
             these functions to load and save history in ~/.demo_history.

23/09/2001 mcs@astro.caltech.edu

           getline.c
             On trying the demo for the first time on a KDE konsole
             terminal, I discovered that the default M-O binding
             to repeat history was hiding the arrow keys, which are
             M-OA etc. I have removed this binding. The M-o (ie the
             lower case version of this), is still bound.

18/09/2001 mcs@astro.caltech.edu

           getline.c man3/gl_get_line.3 libtecla.map
             Automatic reading of ~/.teclarc is now postponed until
             the first call to gl_get_line(), to give the application
             the chance to specify alternative configuration sources
             with the new function gl_configure_getline(). The latter
             function allows configuration to be done with a string, a
             specified application-specific file, and/or a specified
             user-specific file. I also added a read-init-files action
             function, for re-reading the configuration files, if any.
             This is by default bound to ^X^R. This is all documented
             in gl_get_line.3.

08/09/2001 mcs@astro.caltech.edu

           getline.c man3/gl_get_line.3
             It is now possible to bind actions to key-sequences
             that start with printable characters. Previously
             keysequences were required to start with meta or control
             characters. This is documented in gl_get_line.3.

           getline.c man3/gl_get_line.3
             A customized completion function can now arrange for
             gl_get_line() to return the current input line whenever a
             successful completion has been made. This is signalled by
             setting the last character of the optional continuation
             suffix to a newline character. This is documented in
             gl_get_line.3.

05/07/2001 Bug reported by Mike MacFaden, fixed by mcs

           configure.in
             There was a bug in the configure script that only
             revealed itself on systems without termcap but not
             terminfo (eg. NetBSD). I traced the bug back to a lack of
             sufficient quoting of multi-line m4 macro arguments in
             configure.in, and have now fixed this and recreated the
             configure script.

05/07/2001 Bug reported and patched by Mike MacFaden (patch modified
           by mcs to match original intentions).

           getline.c
             getline.c wouldn't compile when termcap was selected as
             the terminal information database. setupterm() was being
             passed a non-existent variable, in place of the term[]
             argument of gl_control_strings(). Also if
             gl_change_terminal() is called with term==NULL, "ansi"
             is now substituted.

02/07/2001 Version 1.3.3 released.

27/06/2001 mcs@astro.caltech.edu

           getline.c expand.c cplmatch.c
             Added checks to fprintf() statements that write to the
             terminal.
           getline.c
             Move the cursor to the end of the line before suspending,
             so that the cursor doesn't get left in the middle of the
             input line.
           Makefile.in
             On systems that don't support shared libraries, the
             distclean target of make deleted libtecla.h. This has
             now been fixed.
           getline.c
             gl_change_terminal() was being called by gl_change_editor(),
             with the unwanted side effect that raw terminal modes were
             stored as those to be restored later, if called by an
             action function. gl_change_terminal() was being called in
             this case to re-establish terminal-specific key bindings,
             so I have just split this part of the function out into
             a separate function for both gl_change_editor() and
             gl_change_terminal() to call.

12/06/2001 mcs@astro.caltech.edu

           getline.c
             Signal handling has been improved. Many more signals are
             now trapped, and instead of using a simple flag set by a
             signal handler, race conditions are avoided by blocking
             signals during most of the gl_get_line() code, and
             unblocking them via calls to sigsetjmp(), just before
             attempting to read each new character from the user.
             The matching use of siglongjmp() in the signal
             handlers ensures that signals are reblocked correctly
             before they are handled. In most cases, signals cause
             gl_get_line() to restore the terminal modes and signal
             handlers of the calling application, then resend the
             signal to the application. In the case of SIGINT, SIGHUP,
             SIGPIPE, and SIGQUIT, if the process still exists after
             the signals are resent, gl_get_line() immediately returns
             with appropriate values assigned to errno. If SIGTSTP,
             SIGTTIN or SIGTTOU signals are received, the process is
             suspended. If any other signal is received, and the
             process continues to exist after the signal is resent to
             the calling application, line input is resumed after the
             terminal is put back into raw mode, the gl_get_line()
             signal handling is restored, and the input line redrawn.
           man/gl_get_line(3)
             I added a SIGNAL HANDLING section to the gl_get_line()
             man page, describing the new signal handling features.

21/05/2001 Version 1.3.2 released.

21/05/2001 mcs@astro.caltech.edu

           getline.c
             When vi-replace-char was used to replace the character at
             the end of the line, it left the cursor one character to
             its right instead of on top of it. Now rememdied.
           getline.c
             When undoing, to properly emulate vi, the cursor is now
             left at the leftmost of the saved and current cursor
             positions.
           getline.c man3/gl_get_line.3
             Implemented find-parenthesis (%), delete-to-paren (M-d%),
             vi-change-to-paren (M-c%), copy-to-paren (M-y%).
           cplfile.c pcache.c
             In three places I was comparing the last argument of
             strncmp() to zero instead of the return value of
             strncmp().

20/05/2001 mcs@astro.caltech.edu

           getline.c man3/gl_get_line.3
             Implemented and documented the vi-repeat-change action,
             bound to the period key. This repeats the last action
             that modified the input line.

19/05/2001 mcs@astro.caltech.edu

           man3/gl_get_line.3
             I documented the new action functions and bindings
             provided by Tim Eliseo, plus the ring-bell action and
             the new "nobeep" configuration option.
           getline.c
             I modified gl_change_editor() to remove and reinstate the
             terminal settings as well as the default bindings, since
             these have editor-specific differences. I also modified
             it to not abort if a key-sequence can't be bound for some
             reason. This allows the new vi-mode and emacs-mode
             bindings to be used safely.
           getline.c
             When the line was re-displayed on receipt of a SIGWINCH
             signal, the result wasn't visible until the next
             character was typed, since a call to fflush() was needed.
             gl_redisplay_line() now calls gl_flush_output() to remedy
             this.

17/05/2001 mcs@astro.catlech.edu

           getline.c
             Under Linux, calling fflush(gl->output_fd) hangs if
             terminal output has been suspended with ^S. With the
             tecla library taking responsability for reading the stop
             and start characters this was a problem, because once
             hung in fflush(), the keyboard input loop wasn't entered,
             so the user couldn't type the start character to resume
             output.  To remedy this, I now have the terminal process
             these characters, rather than the library.

12/05/2001 mcs@astro.caltech.edu

           getline.c
             The literal-next action is now implemented as a single
             function which reads the next character itself.
             Previously it just set a flag which effected the
             interpretation of the next character read by the input
             loop.
           getline.c
             Added a ring-bell action function. This is currently
             unbound to any key by default, but it is used internally,
             and can be used by users that want to disable any of the
             default key-bindings.

12/05/2001 Tim Eliseo    (logged here by mcs)

           getline.c
             Don't reset gl->number until after calling an action
             function. By looking at whether gl->number is <0 or
             not, action functions can then tell whether the count
             that they were passed was explicitly specified by the
             user, as opposed to being defaulted to 1.
           getline.c
             In vi, the position at which input mode is entered
             acts as a barrier to backward motion for the few
             backward moving actions that are enabled in input mode.
             Tim added this barrier to getline.
           getline.c
             In gl_get_line() after reading an input line, or
             having the read aborted by a signal, the sig_atomic_t
             gl_pending_signal was being compared to zero instead
             of -1 to see if no signals had been received.
             gl_get_line() will thus have been calling raise(-1),
             which luckily didn't seem to do anything. Tim also
             arranged for errno to be set to EINTR when a signal
             aborts gl_get_line().
           getline.c
             The test in gl_add_char_to_line() for detecting
             when overwriting a character with a wider character,
             had a < where it needed a >. Overwriting with a wider
             character thus overwrote trailing characters. Tim also
             removed a redundant copy of the character into the
             line buffer.
           getline.c
             gl_cursor_left() and gl->cursor_right() were executing
             a lot of redundant code, when the existing call to the
             recently added gl_place_cursor() function, does all that
             is necessary.
           getline.c
             Remove redundant code from backward_kill_line() by
             re-implimenting in terms of gl_place_cursor() and
             gl_delete_chars().
           getline.c
             gl_forward_delete_char() now records characters in cut
             buffer when in vi command mode.
           getline.c
             In vi mode gl_backward_delete_char() now only deletes
             up to the point at which input mode was entered. Also
             gl_delete_chars() restores from the undo buffer when
             deleting in vi insert mode.
           getline.c
             Added action functions, vi-delete-goto-column,
             vi-change-to-bol, vi-change-line, emacs-mode, vi-mode,
             vi-forward-change-find, vi-backward-change-find,
             vi-forward-change-to, vi-backward-change-to,
             vi-change-goto-col, forward-delete-find, backward-delete-find,
             forward-delete-to, backward-delete-to,
             delete-refind, delete-invert-refind, forward-copy-find,
             backward-copy-find, forward-copy-to, backward-copy-to
             copy-goto-column, copy-rest-of-line, copy-to-bol, copy-line,
             history-re-search-forward, history-re-search-backward.

06/05/2001 Version 1.3.1 released.

03/05/2001 mcs@astro.caltech.edu

           configure.in
             Old versions of GNU ld don't accept version scripts.
             Under Linux I thus added a test to try out ld with
             the --version-script argument to see if it works.
             If not, version scripts aren't used.
           configure.in
             My test for versions of Solaris earlier than 7
             failed when confronted by a three figure version
             number (2.5.1). Fixed.

30/04/2001 mcs@astro.caltech.edu

           getline.c
             In vi mode, history-search-backward and
             history-search-forward weren't doing anything when
             invoked at the start of an empty line, whereas
             they should have acted like up-history and down-history.
           Makefile.in Makefile.rules
             When shared libraries are being created, the build
             procedure now arranges for any alternate library
             links to be created as well, before linking the
             demos. Without this the demos always linked to the
             static libraries (which was perfectly ok, but wasn't a
             good example).
           Makefile.in Makefile.rules
             On systems on which shared libraries were being created,
             if there were no alternate list of names, make would
             abort due to a Bourne shell 'for' statement that didn't
             have any arguments. Currently there are no systems who's
             shared library configurations would trigger this
             problem.
           Makefile.rules
             The demos now relink to take account of changes to the
             library.
           configure.in configure
             When determining whether the reentrant version of the
             library should be compiled by default, the configure
             script now attempts to compile a dummy program that
             includes all of the appropriate system headers and
             defines _POSIX_C_SOURCE. This should now be a robust test
             on systems which use C macros to alias these function
             names to other internal functions.
           configure.in
             Under Solaris 2.6 and earlier, the curses library is in
             /usr/ccs/lib. Gcc wasn't finding this. In addition to
             remedying this, I had to remove "-z text" from
             LINK_SHARED under Solaris to get it to successfully
             compile the shared library against the static curses
             library.
           configure.in
             Under Linux the -soname directive was being used
             incorrectly, citing the fully qualified name of the
             library instead of its major version alias. This will
             unfortunately mean that binaries linked with the 1.2.3
             and 1.2.4 versions of the shared library won't use
             later versions of the library unless relinked.

30/04/2001 mcs@astro.caltech.edu

           getline.c
             In gl_get_input_line(), don't redundantly copy the
             start_line if start_line == gl->line.

30/04/2001 Version 1.3.0 released.

28/04/2001 mcs@astro.caltech.edu

           configure.in
             I removed the --no-undefined directive from the Linux
             LINK_SHARED command. After recent patches to our RedHat
             7.0 systems ld started reporting some internal symbols of
             libc as being undefined.  Using nm on libc indicated that
             the offending symbols are indeed defined, albeit as
             "common" symbols, so there appears to be a bug in
             RedHat's ld. Removing this flag allows the tecla shared
             library to compile, and programs appear to function fine.
           man3/gl_get_line.3
             The default key-sequence used to invoke the
             read-from-file action was incorrectly cited as ^Xi
             instead of ^X^F.

26/04/2001 mcs@astro.caltech.edu

           getline.c man3/gl_get_line.3
             A new vi-style editing mode was added. This involved
             adding many new action functions, adding support for
             specifying editing modes in users' ~/.teclarc files,
             writing a higher level cursor motion function to support
             the different line-end bounds required in vi command
             mode, and a few small changes to support the fact that vi
             has two modes, input mode and command mode with different
             bindings.

             When vi editing mode is enabled, any binding that starts
             with an escape or a meta character, is interpreted as a
             command-mode binding, and switches the library to vi
             command mode if not already in that mode. Once in command
             mode the first character of all keysequences entered
             until input mode is re-enabled, are quietly coerced to
             meta characters before being looked up in the key-binding
             table. So, for example, in the key-binding table, the
             standard vi command-mode 'w' key, which moves the cursor
             one word to the right, is represented by M-w. This
             emulates vi's dual sets of bindings in a natural way
             without needing large changes to the library, or new
             binding syntaxes. Since cursor keys normally emit
             keysequences which start with escape, it also does
             something sensible when a cursor key is pressed during
             input mode (unlike true vi, which gets upset).

             I also added a ^Xg binding for the new list-glob action
             to both the emacs and vi key-binding tables. This lists
             the files that match the wild-card expression that
             precedes it on the command line.

             The function that reads in ~/.teclarc used to tell
             new_GetLine() to abort if it encountered anything that it
             didn't understand in this file. It now just reports an
             error and continues onto the next line.
           Makefile.in:
             When passing LIBS=$(LIBS) to recursive invokations of
             make, quotes weren't included around the $(LIBS) part.
             This would cause problems if LIBS ever contained more
             than one word (with the supplied configure script this
             doesn't happen currently). I added these quotes.
           expand.c man3/ef_expand_file.3:
             I wrote a new public function called ef_list_expansions(),
             to list the matching filenames returned by
             ef_expand_file().

             I also fixed the example in the man page, which cited
             exp->file instead of exp->files, and changed the
             dangerous name 'exp' with 'expn'.
           keytab.c:
             Key-binding tables start with 100 elements, and are
             supposedly incremented in size by 100 elements whenever
             the a table runs out of space. The realloc arguments to
             do this were wrong. This would have caused problems if
             anybody added a lot of personal bindings in their
             ~/.teclarc file. I only noticed it because the number of
             key bindings needed by the new vi mode exceeded this
             number.
           libtecla.map
             ef_expand_file() is now reported as having been added in
             the upcoming 1.3.0 release.

25/03/2001 Markus Gyger  (logged here by mcs)

           Makefile.in:
             Make symbolic links to alternative shared library names
             relative instead of absolute.
           Makefile.rules:
             The HP-UX libtecla.map.opt file should be made in the
             compilation directory, to allow the source code directory
             to be on a readonly filesystem.
           cplmatch.c demo2.c history.c pcache.c
             To allow the library to be compiled with a C++ compiler,
             without generating warnings, a few casts were added where
             void* return values were being assigned directly to
             none void* pointer variables.

25/03/2001 mcs@astro.caltech.edu

           libtecla.map:
             Added comment header to explain the purpose of the file.
             Also added cpl_init_FileArgs to the list of exported
             symbols. This symbol is deprecated, and no longer
             documented, but for backwards compatibility, it should
             still be exported.
           configure:
             I had forgotten to run autoconf before releasing version
             1.2.4, so I have just belatedly done so.  This enables
             Markus' changes to "configure.in" documented previously,
             (see 17/03/2001).

20/03/2001 John Levon   (logged here by mcs)

           libtecla.h
             A couple of the function prototypes in libtecla.h have
             (FILE *) argument declarations, which means that stdio.h
             needs to be included. The header file should be self
             contained, so libtecla.h now includes stdio.h.

18/03/2001 Version 1.2.4 released.

           README html/index.html configure.in
             Incremented minor version from 3 to 4.

18/03/2001 mcs@astro.caltech.edu

           getline.c
             The fix for the end-of-line problem that I released a
             couple of weeks ago, only worked for the first line,
             because I was handling this case when the cursor position
             was equal to the last column, rather than when the cursor
             position modulo ncolumn was zero.
           Makefile.in Makefile.rules
             The demos are now made by default, their rules now being
             int Makefile.rules instead of Makefile.in.
           INSTALL
             I documented how to compile the library in a different
             directory than the distribution directory.
             I also documented features designed to facilitate
             configuring and building the library as part of another
             package.

17/03/2001 Markus Gyger (logged here by mcs)

           getline.c
             Until now cursor motions were done one at a time. Markus
             has added code to make use the of the terminfo capability
             that moves the cursor by more than one position at a
             time. This greatly improves performance when editing near
             the start of long lines.
           getline.c
             To further improve performance, Markus switched from
             writing one character at a time to the terminal, using
             the write() system call, to using C buffered output
             streams. The output buffer is only flushed when
             necessary.
           Makefile.rules Makefile.in configure.in
             Added support for compiling for different architectures
             in different directories. Simply create another directory
             and run the configure script located in the original
             directory.
           Makefile.in configure.in libtecla.map
             Under Solaris, Linux and HP-UX, symbols that are to be
             exported by tecla shared libraries are explicitly specified
             via symbol map files. Only publicly documented functions
             are thus visible to applications.
           configure.in
             When linking shared libraries under Solaris SPARC,
             registers that are reserved for applications are marked
             as off limits to the library, using -xregs=no%appl when
             compiling with Sun cc, or -mno-app-regs when compiling
             with gcc. Also removed -z redlocsym for Solaris, which
             caused problems under some releases of ld.
           homedir.c  (after minor changes by mcs)
             Under ksh, ~+ expands to the current value of the ksh
             PWD environment variable, which contains the path of
             the current working directory, including any symbolic
             links that were traversed to get there. The special
             username "+" is now treated equally by tecla, except
             that it substitutes the return value of getcwd() if PWD
             either isn't set, or if it points at a different
             directory than that reported by getcwd().

08/03/2001 Version 1.2.3 released.

08/03/2001 mcs@astro.caltech.edu

           getline.c
             On compiling the library under HP-UX for the first time
             I encountered and fixed a couple of bugs:

             1. On all systems except Solaris, the callback function
                required by tputs() takes an int argument for the
                character that is to be printed. Under Solaris it
                takes a char argument. The callback function was
                passing this argument, regardless of type, to write(),
                which wrote the first byte of the argument.  This was
                fine under Solaris and under little-endian systems,
                because the first byte contained the character to be
                written, but on big-endian systems, it always wrote
                the zero byte at the other end of the word. As a
                result, no control characters were being written to
                the terminal.
             2. While attempting to start a newline after the user hit
                enter, the library was outputting the control sequence
                for moving the cursor down, instead of the newline
                character. On many systems the control sequence for
                moving the cursor down happends to be a newline
                character, but under HP-UX it isn't. The result was
                that no new line was being started under HP-UX.

04/03/2001 mcs@astro.caltech.edu

           configure.in Makefile.in Makefile.stub configure config.guess
           config.sub Makefile.rules install-sh PORTING README INSTALL
             Configuration and compilation of the library is now
             performed with the help of an autoconf configure
             script. In addition to relieving the user of the need to
             edit the Makefile, this also allows automatic compilation
             of the reentrant version of the library on platforms that
             can handle it, along with the creation of shared
             libraries where configured. On systems that aren't known
             to the configure script, just the static tecla library is
             compiled. This is currently the case on all systems
             except Linux, Solaris and HP-UX. In the hope that
             installers will provide specific conigurations for other
             systems, the configure.in script is heavily commented,
             and instructions on how to use are included in a new
             PORTING file.

24/02/2001 Version 1.2b released.

22/02/2001 mcs@astro.caltech.edu

           getline.c
             It turns out that most terminals, but not all, on writing
             a character in the rightmost column, don't wrap the
             cursor onto the next line until the next character is
             output. This library wasn't aware of this and thus if one
             tried to reposition the cursor from the last column,
             gl_get_line() thought that it was moving relative to a
             point on the next line, and thus moved the cursor up a
             line. The fix was to write one extra character when in
             the last column to force the cursor onto the next line,
             then backup the cursor to the start of the new line.
           getline.c
             On terminal initialization, the dynamic LINES and COLUMNS
             environment variables were ignored unless
             terminfo/termcap didn't return sensible dimensions. In
             practice, when present they should override the static
             versions in the terminfo/termcap databases. This is the
             new behavior. In reality this probably won't have caused
             many problems, because a SIGWINCH signal which informs of
             terminal size changes is sent when the terminal is
             opened, so the dimensions established during
             initialization quickly get updated on most systems.

18/02/2001 Version 1.2a released.

18/02/2001 mcs@astro.caltech.edu

           getline.c
             Three months ago I moved the point at which termios.h
             was included in getline.c. Unfortunately, I didn't notice
             that this moved it to after the test for TIOCGWINSZ being
             defined. This resulted in SIGWINCH signals not being
             trapped for, and thus terminal size changes went
             unnoticed. I have now moved the test to after the 
             inclusion of termios.h.

12/02/2001 Markus Gyger     (described here by mcs)

           man3/pca_lookup_file.3 man3/gl_get_line.3
           man3/ef_expand_file.3 man3/cpl_complete_word.3
             In the 1.2 release of the library, all functions in the
             library were given man pages. Most of these simply
             include one of the above 4 man pages, which describe the
             functions while describing the modules that they are in.
             Markus added all of these function names to the lists in
             the "NAME" headers of the respective man pages.
             Previously only the primary function of each module was
             named there.

11/02/2001 mcs@astro.caltech.edu

           getline.c
             On entering a line that wrapped over two or more
             terminal, if the user pressed enter when the cursor
             wasn't on the last of the wrapped lines, the text of the
             wrapped lines that followed it got mixed up with the next
             line written by the application, or the next input
             line. Somehow this slipped through the cracks and wasn't
             noticed until now. Anyway, it is fixed now.

09/02/2001 Version 1.2 released.

04/02/2001 mcs@astro.caltech.edu

           pcache.c libtecla.h
             With all filesystems local, demo2 was very fast to start
             up, but on a Sun system with one of the target
             directories being on a remote nfs mounted filesystem, the
             startup time was many seconds. This was due to the
             executable selection callback being applied to all files
             in the path at startup. To avoid this, all files are now
             included in the cache, and the application specified
             file-selection callback is only called on files as they
             are matched. Whether the callback rejected or accepted
             them is then cached so that the next time an already
             checked file is looked at, the callback doesn't have to
             be called. As a result, startup is now fast on all
             systems, and since usually there are only a few matching
             file completions at a time, the delay during completion
             is also usually small. The only exception is if the user
             tries to complete an empty string, at which point all
             files have to be checked. Having done this once, however,
             doing it again is fast.
           man3/pca_lookup_file.3
             I added a man page documenting the new PathCache module.
           man3/<many-new-files>.3
             I have added man pages for all of the functions in each
             of the modules. These 1-line pages use the .so directive
             to redirect nroff to the man page of the parent module.
           man Makefile update_html
             I renamed man to man3 to make it easier to test man page
             rediction, and updated Makefile and update_html
             accordingly. I also instructed update_html to ignore
             1-line man pages when making html equivalents of the man
             pages.
           cplmatch.c
             In cpl_list_completions() the size_t return value of
             strlen() was being used as the length argument of a "%*s"
             printf directive. This ought to be an int, so the return
             value of strlen() is now cast to int. This would have
             caused problems on architectures where the size of a
             size_t is not equal to the size of an int.

02/02/2001 mcs@astro.caltech.edu

           getline.c
             Under UNIX, certain terminal bindings are set using the
             stty command. This, for example, specifies which control
             key generates a user-interrupt (usually ^C or ^Y). What I
             hadn't realized was that ASCII NUL is used as the way to
             specify that one of these bindings is unset. I have now
             modified the code to skip unset bindings, leaving the
             corresponding action bound to the built-in default, or a
             user provided binding.

28/01/2001 mcs@astro.caltech.edu

           pcache.c libtecla.h
             A new module was added which supports searching for files
             in any colon separated list of directories, such as the
             unix execution PATH environment variable. Files in these
             directories, after being individually okayed for
             inclusion via an application provided callback, are
             cached in a PathCache object. You can then look up the
             full pathname of a given filename, or you can use the
             provided completion callback to list possible completions
             in the path-list. The contents of relative directories,
             such as ".", obviously can't be cached, so these
             directories are read on the fly during lookups and
             completions. The obvious application of this facility is
             to provide Tab-completion of commands, and thus a
             callback to place executable files in the cache, is
             provided.
           demo2.c
             This new program demonstrates the new PathCache
             module. It reads and processes lines of input until the
             word 'exit' is entered, or C-d is pressed. The default
             tab-completion callback is replaced with one which at the
             start of a line, looks up completions of commands in the
             user's execution path, and when invoked in other parts of
             the line, reverts to normal filename completion. Whenever
             a new line is entered, it extracts the first word on the
             line, looks it up in the user's execution path to see if
             it corresponds to a known command file, and if so,
             displays the full pathname of the file, along with the
             remaining arguments.
           cplfile.c
             I added an optional pair of callback function/data
             members to the new cpl_file_completions() configuration
             structure. Where provided, this callback is asked
             on a file-by-file basis, which files should be included
             in the list of file completions. For example, a callback
             is provided for listing only completions of executable
             files.
           cplmatch.c
             When listing completions, the length of the type suffix
             of each completion wasn't being taken into account
             correctly when computing the column widths. Thus the
             listing appeared ragged sometimes. This is now fixed.
           pathutil.c
             I added a function for prepending a string to a path,
             and another for testing whether a pathname referred to
             an executable file.

28/01/2001 mcs@astro.caltech.edu

           libtecla.h cplmatch.c man/cpl_complete_word.3
             The use of a publically defined structure to configure
             the cpl_file_completions() callback was flawed, so a new
             approach has been designed, and the old method, albeit
             still supported, is no longer documented in the man
             pages. The definition of the CplFileArgs structure in
             libtecla.h is now accompanied by comments warning people
             not to modify it, since modifications could break
             applications linked to shared versions of the tecla
             library. The new method involves an opaque CplFileConf
             object, instances of which are returned by a provided
             constructor function, configured with provided accessor
             functions, and when no longer needed, deleted with a
             provided destructor function. This is documented in the
             cpl_complete_word man page. The cpl_file_completions()
             callback distinguishes what type of configuration
             structure it has been sent by virtue of a code placed at
             the beginning of the CplFileConf argument by its
             constructor.

04/01/2001 mcs@astro.caltech.edu (Release of version 1.1j)

           getline.c
             I added upper-case bindings for the default meta-letter
             keysequences such as M-b. They thus continue to work
             when the user has caps-lock on.
           Makefile
             I re-implemented the "install" target in terms of new
             install_lib, install_inc and install_man targets. When
             distributing the library with other packages, these new
             targets allows for finer grained control of the
             installation process.

30/12/2000 mcs@astro.caltech.edu

           getline.c man/gl_get_line.3
             I realized that the recall-history action that I
             implemented wasn't what Markus had asked me for. What he
             actually wanted was for down-history to continue going
             forwards through a previous history recall session if no
             history recall session had been started while entering
             the current line. I have thus removed the recall-history
             action and modified the down-history action function
             accordingly.

24/12/2000 mcs@astro.caltech.edu

           getline.c
             I modified gl_get_line() to allow the previously returned
             line to be passed in the start_line argument.
           getline.c man/gl_get_line.3
             I added a recall-history action function, bound to M^P.
             This recalls the last recalled history line, regardless
             of whether it was from the current or previous line.

13/12/2000 mcs@astro.caltech.edu (Release of version 1.1i)

           getline.c history.h history.c man/gl_get_line.3
             I implemented the equivalent of the ksh Operate action. I
             have named the tecla equivalent "repeat-history". This
             causes the line that is to be edited to returned, and
             arranges for the next most recent history line to be
             preloaded on the next call to gl_get_line(). Repeated
             invocations of this action thus result in successive
             history lines being repeated - hence the
             name. Implementing the ksh Operate action was suggested
             by Markus Gyger. In ksh it is bound to ^O, but since ^O
             is traditionally bound by the default terminal settings,
             to stop-output, I have bound the tecla equivalent to M-o.

01/12/2000 mcs@astro.caltech.edu (Release of version 1.1h)

           getline.c keytab.c keytab.h man/gl_get_line.3
             I added a digit-argument action, to allow repeat
             counts for actions to be entered. As in both tcsh
             and readline, this is bound by default to each of
             M-0, M-1 through to M-9, the number being appended
             to the current repeat count. Once one of these has been
             pressed, the subsequent digits of the repeat count can be
             typed with or without the meta key pressed. It is also
             possible to bind digit-argument to other keys, with or
             without a numeric final keystroke. See man page for
             details.

           getline.c man/gl_get_line.3
             Markus noted that my choice of M-< for the default
             binding of read-from-file, could be confusing, since
             readline binds this to beginning-of-history. I have
             thus rebound it to ^X^F (ie. like find-file in emacs).

           getline.c history.c history.h man/gl_get_line.3
             I have now implemented equivalents of the readline
             beginning-of-history and end-of-history actions.
             These are bound to M-< and M-> respectively.

           history.c history.h
             I Moved the definition of the GlHistory type, and
             its subordinate types from history.h to history.c.
             There is no good reason for any other module to
             have access to the innards of this structure.

27/11/2000 mcs@astro.caltech.edu (Release of version 1.1g)

           getline.c man/gl_get_line.3
             I added a "read-from-file" action function and bound it
             by default to M-<. This causes gl_get_line() to
             temporarily return input from the file who's name
             precedes the cursor.
             
26/11/2000 mcs@astro.caltech.edu

           getline.c keytab.c keytab.h man/gl_get_line.3
             I have reworked some of the keybinding code again.

             Now, within key binding strings, in addition to the
             previously existing notation, you can now use M-a to
             denote meta-a, and C-a to denote control-a. For example,
             a key binding which triggers when the user presses the
             meta key, the control key and the letter [
             simultaneously, can now be denoted by M-C-[, or M-^[ or
             \EC-[ or \E^[.

             I also updated the man page to use M- instead of \E in
             the list of default bindings, since this looks cleaner.

           getline.c man/gl_get_line.3
             I added a copy-region-as-kill action function and
             gave it a default binding to M-w.

22/11/2000 mcs@astro.caltech.edu

           *.c
             Markus Gyger sent me a copy of a previous version of
             the library, with const qualifiers added in appropriate
             places. I have done the same for the latest version.
             Among other things, this gets rid of the warnings
             that are generated if one tells the compiler to
             const qualify literal strings.

           getline.c getline.h glconf.c
             I have moved the contents of glconf.c and the declaration
             of the GetLine structure into getline.c. This is cleaner,
             since now only functions in getline.c can mess with the
             innards of GetLine objects. It also clears up some problems
             with system header inclusion order under Solaris, and also
             the possibility that this might result in inconsistent
             system macro definitions, which in turn could cause different
             declarations of the structure to be seen in different files.

           hash.c
             I wrote a wrapper function to go around strcmp(), such that
             when hash.c is compiled with a C++ compiler, the pointer
             to the wrapper function is a C++ function pointer.
             This makes it compatible with comparison function pointer
             recorded in the hash table.

           cplmatch.c getline.c libtecla.h
             Markus noted that the Sun C++ compiler wasn't able to
             match up the declaration of cpl_complete_word() in
             libtecla.h, where it is surrounded by a extern "C" {}
             wrapper, with the definition of this function in
             cplmatch.c. My suspicion is that the compiler looks not
             only at the function name, but also at the function
             arguments to see if two functions match, and that the
             match_fn() argument, being a fully blown function pointer
             declaration, got interpetted as that of a C function in
             one case, and a C++ function in the other, thus
             preventing a match.

             To fix this I now define a CplMatchFn typedef in libtecla.h,
             and use this to declare the match_fn callback.

20/11/2000 (Changes suggested by Markus Gyger to support C++ compilers):
           expand.c
             Renamed a variable called "explicit" to "xplicit", to
             avoid conflicts when compiling with C++ compilers.
           *.c
             Added explicit casts when converting from (void *) to
             other pointer types. This isn't needed in C but it is
             in C++.
           getline.c
             tputs() has a strange declaration under Solaris. I was
             enabling this declaration when the SPARC feature-test
             macro was set. Markus changed the test to hinge on the
             __sun and __SVR4 macros.
           direader.c glconf.c stringrp.c
             I had omitted to include string.h in these two files.

           Markus also suggested some other changes, which are still
           under discussion. With the just above changes however, the
           library compiles without complaint using g++.

19/11/2000 mcs@astro.caltech.edu
           getline.h getline.c keytab.c keytab.h glconf.c
           man/gl_get_line.3
             I added support for backslash escapes (include \e
             for the keyboard escape key) and literal binary
             characters to the characters allowed within key sequences
             of key bindings.

           getline.h getline.c keytab.c keytab.h glconf.c
           man/gl_get_line.3
             I introduced symbolic names for the arrow keys, and
             modified the library to use the cursor key sequences
             reported by terminfo/termcap in addition to the default
             ANSI ones. Anything bound to the symbolically named arrow
             keys also gets bound to the default and terminfo/termcap
             cursor key sequences. Note that under Solaris
             terminfo/termcap report the properties of hardware X
             terminals when TERM is xterm instead of the terminal
             emulator properties, and the cursor keys on these two
             systems generate different key sequences. This is an
             example of why extra default sequences are needed.

           getline.h getline.c keytab.c
             For some reason I was using \e to represent the escape
             character. This is supported by gcc, which thus doesn't
             emit a warning except with the -pedantic flag, but isn't
             part of standard C. I now use a macro to define escape
             as \033 in getline.h, and this is now used wherever the
             escape character is needed.

17/11/2000 mcs@astro.caltech.edu (Release of version 1.1d)

           getline.c, man/gl_get_line(3), html/gl_get_line.html
             In tcsh ^D is bound to a function which does different
             things depending on where the cursor is within the input
             line. I have implemented its equivalent in the tecla
             library. When invoked at the end of the line this action
             function displays possible completions. When invoked on
             an empty line it causes gl_get_line() to return NULL,
             thus signalling end of input. When invoked within a line
             it invokes forward-delete-char, as before. The new action
             function is called del-char-or-list-or-eof.

           getline.c, man/gl_get_line(3), html/gl_get_line.html
             I found that the complete-word and expand-file actions
             had underscores in their names instead of hyphens. This
             made them different from all other action functions, so I
             have changed the underscores to hyphens.

           homedir.c
             On SCO UnixWare while getpwuid_r() is available, the
             associated _SC_GETPW_R_SIZE_MAX macro used by sysconf()
             to find out how big to make the buffer to pass to this
             function to cater for any password entry, doesn't
             exist. I also hadn't catered for the case where sysconf()
             reports that this limit is indeterminate. I have thus
             change the code to substitute a default limit of 1024 if
             either the above macro isn't defined or if sysconf() says
             that the associated limit is indeterminate.
           
17/11/2000 mcs@astro.caltech.edu (Release of version 1.1c)

           getline.c, getline.h, history.c, history.h
             I have modified the way that the history recall functions
             operate, to make them better emulate the behavior of
             tcsh. Previously the history search bindings always
             searched for the prefix that preceded the cursor, then
             left the cursor at the same point in the line, so that a
             following search would search using the same prefix. This
             isn't how tcsh operates. On finding a matching line, tcsh
             puts the cursor at the end of the line, but arranges for
             the followup search to continue with the same prefix,
             unless the user does any cursor motion or character
             insertion operations in between, in which case it changes
             the search prefix to the new set of characters that are
             before the cursor. There are other complications as well,
             which I have attempted to emulate. As far as I can
             tell, the tecla history recall facilities now fully
             emulate those of tcsh.

16/11/2000 mcs@astro.caltech.edu (Release of version 1.1b)

           demo.c:
             One can now quit from the demo by typing exit.

           keytab.c:
             The first entry of the table was getting deleted
             by _kt_clear_bindings() regardless of the source
             of the binding. This deleted the up-arrow binding.
             Symptoms noted by gazelle@yin.interaccess.com.

           getline.h:
             Depending on which system include files were include
             before the inclusion of getline.h, SIGWINCH and
             TIOCGWINSZ might or might not be defined. This resulted
             in different definitions of the GetLine object in
             different files, and thus some very strange bugs! I have
             now added #includes for the necessary system header files
             in getline.h itself. The symptom was that on creating a
             ~/.teclarc file, the demo program complained of a NULL
             argument to kt_set_keybinding() for the first line of the
             file.

15/11/2000 mcs@astro.caltech.edu (Release of version 1.1a)

           demo.c:
             I had neglected to check the return value of
             new_GetLine() in the demo program. Oops.

           getline.c libtecla.h:
             I wrote gl_change_terminal(). This allows one to change to
             a different terminal or I/O stream, by specifying the
             stdio streams to use for input and output, along with the
             type of terminal that they are connected to.

           getline.c libtecla.h:
             Renamed GetLine::isterm to GetLine::is_term. Standard
             C reserves names that start with "is" followed by
             alphanumeric characters, so this avoids potential
             clashes in the future.

           keytab.c keytab.h
             Each key-sequence can now have different binding
             functions from different sources, with the user provided
             binding having the highest precedence, followed by the
             default binding, followed by any terminal specific
             binding. This allows gl_change_terminal() to redefine the
             terminal-specific bindings each time that
             gl_change_terminal() is called, without overwriting the
             user specified or default bindings. In the future, it will
             also allow for reconfiguration of user specified
             bindings after the call to new_GetLine(). Ie. deleting a
             user specified binding should reinstate any default or
             terminal specific binding.

           man/cpl_complete_word.3 html/cpl_complete_word.html
           man/ef_expand_file.3    html/ef_expand_file.html
           man/gl_get_line.3       html/gl_get_line.html
             I added sections on thread safety to the man pages of the
             individual modules.

           man/gl_get_line.3       html/gl_get_line.html
             I documented the new gl_change_terminal() function.

           man/gl_get_line.3       html/gl_get_line.html
             In the description of the ~/.teclarc configuration file,
             I had omitted the 'bind' command word in the example
             entry. I have now remedied this.
genometools-1.5.1/src/external/libtecla-1.6.1/html/cpl_complete_word.html000066400000000000000000000460601211610345200262360ustar00rootroot00000000000000 Manual Page
cpl_complete_word              cpl_complete_word



NAME

       cpl_complete_word,         cfc_file_start,         cfc_literal_escapes,
       cfc_set_check_fn,       cpl_add_completion,       cpl_file_completions,
       cpl_last_error,        cpl_list_completions,        cpl_recall_matches,
       cpl_record_error, del_CplFileConf, del_WordCompletion, new_CplFileConf,
       new_WordCompletion - lookup possible completions for a word

SYNOPSIS

       #include <stdio.h>
       #include <libtecla.h>

       WordCompletion *new_WordCompletion(void);

       WordCompletion *del_WordCompletion(WordCompletion *cpl);


       #define CPL_MATCH_FN(fn) int (fn)(WordCompletion *cpl, \
                                         void *data, \
                                         const char *line, \
                                         int word_end)
       typedef CPL_MATCH_FN(CplMatchFn);

       CPL_MATCH_FN(cpl_file_completions);


       CplMatches *cpl_complete_word(WordCompletion *cpl,
                                     const char *line,
                                     int word_end, void *data,
                                     CplMatchFn *match_fn);

       CplMatches *cpl_recall_matches(WordCompletion *cpl);

       int cpl_list_completions(CplMatches *result, FILE *fp,
                                int term_width);

       int cpl_add_completion(WordCompletion *cpl,
                              const char *line, int word_start,
                              int word_end, const char *suffix,
                              const char *type_suffix,
                              const char *cont_suffix);

       void cpl_record_error(WordCompletion *cpl,
                             const char *errmsg);

       const char *cpl_last_error(WordCompletion *cpl);


       #define CPL_CHECK_FN(fn) int (fn)(void *data, \
                                         const char *pathname)

       typedef CPL_CHECK_FN(CplCheckFn);

       CPL_CHECK_FN(cpl_check_exe);

       CplFileConf *new_CplFileConf(void);

       CplFileConf *del_CplFileConf(CplFileConf *cfc);

       void cfc_literal_escapes(CplFileConf *cfc, int literal);

       void cfc_file_start(CplFileConf *cfc, int start_index);

       void cfc_set_check_fn(CplFileConf *cfc, CplCheckFn *chk_fn,
                             void *chk_data);



DESCRIPTION

       The  cpl_complete_word() function is part of the tecla library (see the
       libtecla man page). It  is  usually  called  behind  the
       scenes  by  gl_get_line,  but  can  also be called sepa-
       rately.

       Given an input line containing an incomplete word to be  completed,  it
       calls  a  user-provided callback function (or the provided file-comple-
       tion callback function) to look up all possible completion suffixes for
       that  word.  The  callback function is expected to look backward in the
       line, starting from the specified cursor position, to find the start of
       the  word  to be completed, then to look up all possible completions of
       that word and record them, one at a  time  by  calling  cpl_add_comple-
       tion().


       Descriptions of the functions of this module are as follows:

         WordCompletion *new_WordCompletion(void)

       This  function  creates  the  resources used by the cpl_complete_word()
       function. In particular, it maintains the memory that is used to return
       the results of calling cpl_complete_word().

         WordCompletion *del_WordCompletion(WordCompletion *cpl)

       This  function  deletes  the resources that were returned by a previous
       call to new_WordCompletion(). It always returns  NULL  (ie.  a  deleted
       object). It does nothing if the cpl argument is NULL.

       The  callback  functions  which  lookup  possible completions should be
       defined with the following macro (which is defined in libtecla.h).

         #define CPL_MATCH_FN(fn) int (fn)(WordCompletion *cpl, \
                                           void *data, \
                                           const char *line, \
                                           int word_end)

       Functions of this type are called by cpl_complete_word(),  and  all  of
       the  arguments of the callback are those that were passed to said func-
       tion. In particular, the line argument contains the input line contain-
       ing  the word to be completed, and word_end is the index of the charac-
       ter that follows the last character of the incomplete word within  this
       string.  The  callback  is expected to look backwards from word_end for
       the start of the incomplete word. What constitutes the start of a  word
       clearly  depends on the application, so it makes sense for the callback
       to take on this responsibility. For example, the builtin filename  com-
       pletion  function  looks backwards until it hits an unescaped space, or
       the start of the line.  Having found the start of the word,  the  call-
       back  should  then  lookup  all  possible completions of this word, and
       record each completion via separate calls to  cpl_add_completion().  If
       the  callback  needs access to an application-specific symbol table, it
       can pass it and any other data that it needs, via  the  data  argument.
       This removes any need for globals.

       The callback function should return 0 if no errors occur. On failure it
       should return 1, and register a terse description of the error by call-
       ing cpl_record_error().

         void cpl_record_error(WordCompletion *cpl,
                               const char *errmsg);

       The last error message recorded by calling cpl_record_error(), can sub-
       sequently be queried by calling cpl_last_error(), as described later.

         int cpl_add_completion(WordCompletion *cpl,
                                const char *line, int word_start,
                                int word_end, const char *suffix,
                                const char *type_suffix,
                                const char *cont_suffix);

       The cpl_add_completion() function is called zero or more times  by  the
       completion  callback function to record each possible completion in the
       specified WordCompletion object.  These  completions  are  subsequently
       returned by cpl_complete_word(), as described later. The cpl, line, and
       word_end arguments should be those that were  passed  to  the  callback
       function.  The word_start argument should be the index within the input
       line string of the start of the word  that  is  being  completed.  This
       should  equal  word_end if a zero-length string is being completed. The
       suffix argument is the string that would have to  be  appended  to  the
       incomplete  word  to  complete  it.  If this needs any quoting (eg. the
       addition of backslashes before special charaters) to  be  valid  within
       the displayed input line, this should be included. A copy of the suffix
       string is allocated internally, so there is no need  to  maintain  your
       copy of the string after cpl_add_completion() returns.

       Note  that  in  the  array  of  possible completions which the cpl_com-
       plete_word() function returns, the suffix recorded  by  cpl_add_comple-
       tion()  is listed along with the concatentation of this suffix with the
       word that lies between word_start and word_end in the input line.

       The type_suffix argument specifies an optional string to be appended to
       the  completion  if it is displayed as part of a list of completions by
       cpl_list_completions(). The intention is that this indicate to the user
       the  type of each completion. For example, the file completion function
       places a directory separator after completions that are directories, to
       indicate  their  nature to the user. Similary, if the completion were a
       function, you could indicate this to the user by setting type_suffix to
       "()". Note that the type_suffix string isn't copied, so if the argument
       isn't a literal string between speech marks, be sure  that  the  string
       remains  valid  for  at  least  as  long  as  the  results  of cpl_com-
       plete_word() are needed.

       The cont_suffix is a continuation suffix to  append  to  the  completed
       word  in  the  input line if this is the only completion. This is some-
       thing that isn't part of the completion itself, but that gives the user
       an  indication  about how they might continue to extend the token.  For
       example, the file-completion callback function adds a directory separa-
       tor  if the completed word is a directory. If the completed word were a
       function name, you could similarly aid the user  by  arranging  for  an
       open parenthesis to be appended.

         CplMatches *cpl_complete_word(WordCompletion *cpl,
                                       const char *line,
                                       int word_end, void *data,
                                       CplMatchFn *match_fn);

       The  cpl_complete_word()  is  normally  called  behind  the  scenes  by
       gl_get_line, but can also be called  separately  if  you
       separately  allocate  a WordCompletion object. It performs word comple-
       tion, as described at the beginning of this section. Its first argument
       is  a resource object previously returned by new_WordCompletion().  The
       line argument is the input line string, containing the word to be  com-
       pleted.  The  word_end  argument contains the index of the character in
       the input line, that just follows the last character of the word to  be
       completed.  When  called  by  gl_get_line(), this is the character over
       which the user pressed TAB.  The  match_fn  argument  is  the  function
       pointer of the callback function which will lookup possible completions
       of the word, as described above, and the data argument provides  a  way
       for the application to pass arbitrary data to the callback function.

       If  no errors occur, the cpl_complete_word() function returns a pointer
       to a CplMatches container, as defined below. This  container  is  allo-
       cated as part of the cpl object that was passed to cpl_complete_word(),
       and will thus change on each call which uses the same cpl argument.

         typedef struct {
           char *completion;        /* A matching completion */
                                    /*  string */
           char *suffix;            /* The part of the */
                                    /*  completion string which */
                                    /*  would have to be */
                                    /*  appended to complete the */
                                    /*  original word. */
           const char *type_suffix; /* A suffix to be added when */
                                    /*  listing completions, to */
                                    /*  indicate the type of the */
                                    /*  completion. */
         } CplMatch;

         typedef struct {
           char *suffix;            /* The common initial part */
                                    /*  of all of the completion */
                                    /*  suffixes. */
           const char *cont_suffix; /* Optional continuation */
                                    /*  string to be appended to */
                                    /*  the sole completion when */
                                    /*  nmatch==1. */
           CplMatch *matches;       /* The array of possible */
                                    /*  completion strings, */
                                    /*  sorted into lexical */
                                    /*  order. */
           int nmatch;              /* The number of elements in */
                                    /*  the above matches[] */
                                    /*  array. */
         } CplMatches;

       If an error occurs during completion, cpl_complete_word() returns NULL.
       A   description   of   the   error  can  be  acquired  by  calling  the
       cpl_last_error() function.

         const char *cpl_last_error(WordCompletion *cpl);

       The cpl_last_error() function returns a terse description of the  error
       which  occurred on the last call to cpl_complete_word() or cpl_add_com-
       pletion().

         CplMatches *cpl_recall_matches(WordCompletion *cpl);

       As a convenience, the  return  value  of  the  last  call  to  cpl_com-
       plete_word()   can   be   recalled   at   a   later   time  by  calling
       cpl_recall_matches(). If cpl_complete_word()  returned  NULL,  so  will
       cpl_recall_matches().

         int cpl_list_completions(CplMatches *result, FILE *fp,
                                  int terminal_width);

       When the cpl_complete_word() function returns multiple possible comple-
       tions, the cpl_list_completions() function can be called upon  to  list
       them,  suitably arranged across the available width of the terminal. It
       arranges for the displayed columns of completions to all have the  same
       width,  set  by the longest completion. It also appends the type_suffix
       strings that were recorded with each completion, thus indicating  their
       types to the user.


THE BUILT-IN FILENAME-COMPLETION CALLBACK

       By  default the gl_get_line function, passes the follow-
       ing completion callback function to cpl_complete_word(). This  function
       can  also  be  used  separately,  either  by  sending  it  to  cpl_com-
       plete_word(), or by calling it directly from your own completion  call-
       back function.

         CPL_MATCH_FN(cpl_file_completions);

       Certain aspects of the behavior of this callback can be changed via its
       data argument. If you are happy with its default behavior you can  pass
       NULL  in  this argument. Otherwise it should be a pointer to a CplFile-
       Conf object, previously allocated by calling new_CplFileConf().

         CplFileConf *new_CplFileConf(void);

       CplFileConf  objects  encapsulate  the  configuration   parameters   of
       cpl_file_completions().  These parameters, which start out with default
       values, can be changed by  calling  the  accessor  functions  described
       below.

       By default, the cpl_file_completions() callback function searches back-
       wards for the start of the filename being completed,  looking  for  the
       first  un-escaped  space or the start of the input line. If you wish to
       specify a different location, call cfc_file_start() with the  index  at
       which the filename starts in the input line. Passing start_index=-1 re-
       enables the default behavior.

         void cfc_file_start(CplFileConf *cfc, int start_index);

       By default, when cpl_file_completions() looks  at  a  filename  in  the
       input  line,  each  lone  backslash in the input line is interpreted as
       being a special character which removes any special significance of the
       character  which  follows  it, such as a space which should be taken as
       part of the filename rather than delimiting the start of the  filename.
       These  backslashes  are thus ignored while looking for completions, and
       subsequently added before spaces, tabs and literal backslashes  in  the
       list  of  completions.  To have unescaped backslashes treated as normal
       characters, call cfc_literal_escapes() with a  non-zero  value  in  its
       literal argument.

         void cfc_literal_escapes(CplFileConf *cfc, int literal);

       By  default, cpl_file_completions() reports all files who's names start
       with the prefix that is being completed. If you only  want  a  selected
       subset  of  these  files to be reported in the list of completions, you
       can arrange this by providing a callback function which takes the  full
       pathname  of  a file, and returns 0 if the file should be ignored, or 1
       if the file should be included in the list of completions. To  register
       such    a    function   for   use   by   cpl_file_completions(),   call
       cfc_set_check_fn(), and pass it a pointer  to  the  function,  together
       with  a pointer to any data that you would like passed to this callback
       whenever it is called. Your callback can make its  decisions  based  on
       any property of the file, such as the filename itself, whether the file
       is readable, writable or executable, or even based  on  what  the  file
       contains.

         #define CPL_CHECK_FN(fn) int (fn)(void *data, \
                                           const char *pathname)
         typedef CPL_CHECK_FN(CplCheckFn);

         void cfc_set_check_fn(CplFileConf *cfc,
                               CplCheckFn *chk_fn, void *chk_data);

       The  cpl_check_exe() function is a provided callback of the above type,
       for use with cpl_file_completions(). It returns non-zero if  the  file-
       name  that  it is given represents a normal file that the user has exe-
       cute permission to. You could use this to  have  cpl_file_completions()
       only list completions of executable files.

       When  you have finished with a CplFileConf variable, you can pass it to
       the del_CplFileConf() destructor function to reclaim its memory.

         CplFileConf *del_CplFileConf(CplFileConf *cfc);



THREAD SAFETY

       In multi-threaded programs, you should use the libtecla_r.a version  of
       the library. This uses POSIX reentrant functions where available (hence
       the _r suffix), and disables features that rely on non-reentrant system
       functions.  In  the  case  of this module, the only disabled feature is
       username completion  in  ~username/  expressions,  in  cpl_file_comple-
       tions().

       Using  the  libtecla_r.a  version of the library, it is safe to use the
       facilities of this module  in  multiple  threads,  provided  that  each
       thread  uses  a  separately  allocated  WordCompletion object. In other
       words, if two threads want to do word completion, they should each call
       new_WordCompletion() to allocate their own completion objects.


FILES

       libtecla.a    -    The tecla library
       libtecla.h    -    The tecla header file.


SEE ALSO

       libtecla, gl_get_line, ef_expand_file,
       pca_lookup_file


AUTHOR

       Martin Shepherd  (mcs@astro.caltech.edu)



                                              cpl_complete_word
genometools-1.5.1/src/external/libtecla-1.6.1/html/ef_expand_file.html000066400000000000000000000233361211610345200254660ustar00rootroot00000000000000 Manual Page
ef_expand_file                    ef_expand_file



NAME

       ef_expand_file,   del_ExpandFile,   ef_last_error,  ef_list_expansions,
       new_ExpandFile - expand filenames containing ~user/$envvar and wildcard
       expressions

SYNOPSIS

       #include <libtecla.h>

       ExpandFile *new_ExpandFile(void);

       ExpandFile *del_ExpandFile(ExpandFile *ef);

       FileExpansion *ef_expand_file(ExpandFile *ef,
                                     const char *path,
                                     int pathlen);

       int ef_list_expansions(FileExpansion *result, FILE *fp,
                              int term_width);

       const char *ef_last_error(ExpandFile *ef);


DESCRIPTION

       The  ef_expand_file()  function  is  part of the tecla library (see the
       libtecla man page). It  expands  a  specified  filename,
       converting  ~user/  and  ~/ expressions at the start of the filename to
       the corresponding home directories, replacing $envvar with the value of
       the  corresponding  environment  variable,  and  then, if there are any
       wildcards, matching these against existing  filenames.  Backslashes  in
       the  input filename are interpreted as escaping any special meanings of
       the characters that follow them.  Only backslahes that  are  themselves
       preceded by backslashes are preserved in the expanded filename.

       In  the  presence  of  wildcards,  the  returned list of filenames only
       includes the names of existing files which match the wildcards.  Other-
       wise,  the  original  filename is returned after expansion of tilde and
       dollar expressions, and the result  is  not  checked  against  existing
       files. This mimics the file-globbing behavior of the unix tcsh shell.

       The supported wildcards and their meanings are:
         *        -  Match any sequence of zero or more characters.
         ?        -  Match any single character.
         [chars]  -  Match any single character that appears in
                     'chars'.  If 'chars' contains an expression of
                     the form a-b, then any character between a and
                     b, including a and b, matches. The '-'
                     character looses its special meaning as a
                     range specifier when it appears at the start
                     of the sequence of characters. The ']'
                     character also looses its significance as the
                     terminator of the range expression if it
                     appears immediately after the opening '[', at
                     which point it is treated one of the
                     characters of the range. If you want both '-'
                     and ']' to be part of the range, the '-'
                     should come first and the ']' second.

         [^chars] -  The same as [chars] except that it matches any
                     single character that doesn't appear in
                     'chars'.

       Note that wildcards never match the initial dot in filenames that start
       with '.'. The initial '.' must be explicitly specified in the filename.
       This  again  mimics  the globbing behavior of most unix shells, and its
       rational is based in the fact that in unix, files with names that start
       with  '.'  are usually hidden configuration files, which are not listed
       by default by the ls command.

       The following is a complete example of how to use  the  file  expansion
       function.

         #include <stdio.h>
         #include <libtecla.h>

         int main(int argc, char *argv[])
         {
           ExpandFile *ef;      /* The expansion resource object */
           char *filename;      /* The filename being expanded */
           FileExpansion *expn; /* The results of the expansion */
           int i;

           ef = new_ExpandFile();
           if(!ef)
             return 1;

           for(arg = *(argv++); arg; arg = *(argv++)) {
             if((expn = ef_expand_file(ef, arg, -1)) == NULL) {
               fprintf(stderr, "Error expanding %s (%s).\n", arg,
                                ef_last_error(ef));
             } else {
               printf("%s matches the following files:\n", arg);
               for(i=0; i<expn->nfile; i++)
                 printf(" %s\n", expn->files[i]);
             }
           }

           ef = del_ExpandFile(ef);
           return 0;
         }

       Descriptions of the functions used above are as follows:

         ExpandFile *new_ExpandFile(void)

       This  function creates the resources used by the ef_expand_file() func-
       tion. In particular, it maintains the memory that is used to record the
       array  of matching filenames that is returned by ef_expand_file(). This
       array is expanded as needed, so there is no built in limit to the  num-
       ber of files that can be matched.

         ExpandFile *del_ExpandFile(ExpandFile *ef)

       This  function  deletes  the resources that were returned by a previous
       call to new_ExpandFile(). It always returns NULL (ie a deleted object).
       It does nothing if the ef argument is NULL.

       A container of the following type is returned by ef_expand_file().

         typedef struct {
           int exists;   /* True if the files in files[] exist */
           int nfile;    /* The number of files in files[] */
           char **files; /* An array of 'nfile' filenames. */
         } FileExpansion;

         FileExpansion *ef_expand_file(ExpandFile *ef,
                                       const char *path,
                                       int pathlen)

       The  ef_expand_file()  function  performs  filename expansion, as docu-
       mented at the start of this section. Its first argument is  a  resource
       object  returned  by  new_ExpandFile().  A  pointer to the start of the
       filename to be matched is passed via the path argument. This must be  a
       normal  NUL  terminated  string, but unless a length of -1 is passed in
       pathlen, only the first pathlen characters will be used in the filename
       expansion.   If  the length is specified as -1, the whole of the string
       will be expanded.

       The function returns a pointer to a container who's  contents  are  the
       results  of  the expansion. If there were no wildcards in the filename,
       the nfile member will be 1, and the exists member should be queried  if
       it  is  important to know if the expanded file currently exists or not.
       If there were wildcards, then the contained files[] array will  contain
       the names of the nfile existing files that matched the wildcarded file-
       name, and the exists member will  have  the  value  1.  Note  that  the
       returned container belongs to the specified ef object, and its contents
       will change on each call, so if you need to retain the results of  more
       than  one  call  to  ef_expand_file(), you should either make a private
       copy  of  the  returned  results,  or  create  multiple  file-expansion
       resource objects via multiple calls to new_ExpandFile().

       On  error,  NULL  is  returned,  and an explanation of the error can be
       determined by calling ef_last_error(ef).

         const char *ef_last_error(ExpandFile *ef)

       This function returns  the  message  which  describes  the  error  that
       occurred  on  the last call to ef_expand_file(), for the given (Expand-
       File *ef) resource object.

         int ef_list_expansions(FileExpansion *result, FILE *fp,
                                int terminal_width);

       The ef_list_expansions() function provides a convenient way to list the
       filename expansions returned by ef_expand_file(). Like the unix ls com-
       mand, it arranges the filenames into equal width columns,  each  column
       having  the  width  of  the largest file. The number of columns used is
       thus determined by the length of the longest filename, and  the  speci-
       fied  terminal  width.  Beware  that filenames that are longer than the
       specified terminal width are printed without being truncated, so output
       longer than the specified terminal width can occur. The list is written
       to the stdio stream specified by the fp argument.


THREAD SAFETY

       In multi-threaded programs, you should use the libtecla_r.a version  of
       the library. This uses POSIX reentrant functions where available (hence
       the _r suffix), and disables features that rely on non-reentrant system
       functions. Currently there are no features disabled in this module.

       Using  the  libtecla_r.a  version of the library, it is safe to use the
       facilities of this module  in  multiple  threads,  provided  that  each
       thread  uses  a separately allocated ExpandFile object. In other words,
       if two threads want  to  do  file  expansion,  they  should  each  call
       new_ExpandFile() to allocate their own file-expansion objects.


FILES

       libtecla.a    -    The tecla library
       libtecla.h    -    The tecla header file.


SEE ALSO

       libtecla, gl_get_line, cpl_complete_word,
       pca_lookup_file


AUTHOR

       Martin Shepherd  (mcs@astro.caltech.edu)



                                                 ef_expand_file
genometools-1.5.1/src/external/libtecla-1.6.1/html/enhance.html000066400000000000000000000063571211610345200241430ustar00rootroot00000000000000 Manual Page
enhance                                  enhance



NAME

       enhance  - A program that adds command-line editing to third party pro-
       grams.

SYNOPSIS

       enhance command [ argument ... ]


DESCRIPTION

       The enhance program provides enhanced command-line  editing  facilities
       to  users  of  third  party applications, to which one doesn't have any
       source code. It does this by  placing  a  pseudo-terminal  between  the
       application and the real terminal. It uses the tecla command-line edit-
       ing library to read input from the real terminal,  then  forwards  each
       just  completed  input line to the application via the pseudo-terminal.
       All output from the application is forwarded back unchanged to the real
       terminal.

       Whenever  the application stops generating output for more than a tenth
       of a second, the enhance program treats the  latest  incomplete  output
       line  as the prompt, and redisplays any incompleted input line that the
       user has typed after it. Note that the small delay, which is  impercep-
       tible  to  the  user, isn't necessary for correct operation of the pro-
       gram. It is just an optimization, designed to stop the input line  from
       being redisplayed so often that it slows down output.

       Note  that  the  user-level command-line editing facilities provided by
       the Tecla library are documented in the tecla man page


DEFICIENCIES

       The one major problem that hasn't been solved yet, is how to deal  with
       applications  that  change  whether typed input is echo'd by their con-
       trolling terminal. For example, programs that ask for a password,  such
       as  ftp  and telnet, temporarily tell their controlling terminal not to
       echo what the user types. Since this request goes  to  the  application
       side  of the psuedo terminal, the enhance program has no way of knowing
       that this has happened, and continues to echo typed input to  its  con-
       trolling terminal, while the user types their password.

       Furthermore, before executing the host application, the enhance program
       initially sets the pseudo terminal to noecho mode, so  that  everything
       that  it sends to the program doesn't get redundantly echoed. If a pro-
       gram that switches to noecho mode explicitly  restores  echoing  after-
       wards, rather than restoring the terminal modes that were previously in
       force, then subsequently, every time that you enter a new input line, a
       duplicate copy will be displayed on the next line.


FILES

       libtecla.a    -   The tecla library.
       ~/.teclarc    -   The tecla personal customization file.


SEE ALSO

       tecla, libtecla


AUTHOR

       Martin Shepherd  (mcs@astro.caltech.edu)



                                                        enhance
genometools-1.5.1/src/external/libtecla-1.6.1/html/gl_get_line.html000066400000000000000000003017151211610345200250060ustar00rootroot00000000000000 Manual Page
gl_get_line                          gl_get_line



NAME

       gl_get_line,    new_GetLine,    del_GetLine,   gl_customize_completion,
       gl_change_terminal, gl_configure_getline, gl_load_history, gl_save_his-
       tory,   gl_group_history,   gl_show_history,  gl_watch_fd,  gl_inactiv-
       ity_timeout,  gl_terminal_size,  gl_set_term_size,   gl_resize_history,
       gl_limit_history,  gl_clear_history,  gl_toggle_history, gl_lookup_his-
       tory,  gl_state_of_history,  gl_range_of_history,   gl_size_of_history,
       gl_echo_mode,   gl_replace_prompt,  gl_prompt_style,  gl_ignore_signal,
       gl_trap_signal, gl_last_signal, gl_completion_action,  gl_display_text,
       gl_return_status,  gl_error_message, gl_catch_blocked, gl_list_signals,
       gl_bind_keyseq, gl_erase_terminal, gl_automatic_history, gl_append_his-
       tory,  gl_query_char, gl_read_char - allow the user to compose an input
       line

SYNOPSIS

       #include <stdio.h>
       #include <libtecla.h>

       GetLine *new_GetLine(size_t linelen, size_t histlen);

       GetLine *del_GetLine(GetLine *gl);

       char *gl_get_line(GetLine *gl, const char *prompt,
                         const char *start_line, int start_pos);

       int gl_query_char(GetLine *gl, const char *prompt,
                         char defchar);

       int gl_read_char(GetLine *gl);

       int gl_customize_completion(GetLine *gl, void *data,
                                   CplMatchFn *match_fn);

       int gl_change_terminal(GetLine *gl, FILE *input_fp,
                              FILE *output_fp, const char *term);

       int gl_configure_getline(GetLine *gl,
                                const char *app_string,
                                const char *app_file,
                                const char *user_file);

       int gl_bind_keyseq(GetLine *gl, GlKeyOrigin origin,
                          const char *keyseq, const char *action);

       int gl_save_history(GetLine *gl, const char *filename,
                           const char *comment, int max_lines);

       int gl_load_history(GetLine *gl, const char *filename,
                           const char *comment);

       int gl_watch_fd(GetLine *gl, int fd, GlFdEvent event,
                       GlFdEventFn *callback, void *data);

       int gl_inactivity_timeout(GetLine *gl, GlTimeoutFn *callback,
                          void *data, unsigned long sec,
                          unsigned long nsec);

       int gl_group_history(GetLine *gl, unsigned stream);

       int gl_show_history(GetLine *gl, FILE *fp,
                           const char *fmt, int all_groups,
                           int max_lines);

       int gl_resize_history(GetLine *gl, size_t bufsize);

       void gl_limit_history(GetLine *gl, int max_lines);

       void gl_clear_history(GetLine *gl, int all_groups);

       void gl_toggle_history(GetLine *gl, int enable);

       GlTerminalSize gl_terminal_size(GetLine *gl,
                                       int def_ncolumn,
                                       int def_nline);

       int gl_set_term_size(GetLine *gl, int ncolumn, int nline);

       int gl_lookup_history(GetLine *gl, unsigned long id,
                             GlHistoryLine *hline);

       void gl_state_of_history(GetLine *gl,
                                GlHistoryState *state);

       void gl_range_of_history(GetLine *gl,
                                GlHistoryRange *range);

       void gl_size_of_history(GetLine *gl, GlHistorySize *size);

       void gl_echo_mode(GetLine *gl, int enable);

       void gl_replace_prompt(GetLine *gl, const char *prompt);

       void gl_prompt_style(GetLine *gl, GlPromptStyle style);

       int gl_ignore_signal(GetLine *gl, int signo);

       int gl_trap_signal(GetLine *gl, int signo, unsigned flags,
                          GlAfterSignal after, int errno_value);

       int gl_last_signal(GetLine *gl);

       int gl_completion_action(GetLine *gl,
                                void *data, CplMatchFn *match_fn,
                                int list_only, const char *name,
                                const char *keyseq);

       int gl_register_action(GetLine *gl, void *data,
                              GlActionFn *fn, const char *name,
                              const char *keyseq);

       int gl_display_text(GetLine *gl, int indentation,
                           const char *prefix,
                           const char *suffix, int fill_char,
                           int def_width, int start,
                           const char *string);

       GlReturnStatus gl_return_status(GetLine *gl);

       const char *gl_error_message(GetLine *gl, char *buff,
                                    size_t n);

       void gl_catch_blocked(GetLine *gl);

       int gl_list_signals(GetLine *gl, sigset_t *set);

       int gl_append_history(GetLine *gl, const char *line);

       int gl_automatic_history(GetLine *gl, int enable);



DESCRIPTION

       The gl_get_line() function is part of the tecla library (see the libte-
       cla(@LIBR_MANEXT@) man page). If the user is typing at a terminal, each
       call prompts them for an line of input, then provides interactive edit-
       ing facilities, similar to those of the unix tcsh shell. In addition to
       simple command-line editing, it supports recall of  previously  entered
       command  lines,  TAB  completion  of  file names, and in-line wild-card
       expansion of filenames. Documentation of both the  user-level  command-
       line  editing features and all user configuration options, can be found
       in the tecla man page. This  man  page  concerns  itself
       with  documentation for programmers interested in using this library in
       their application.


AN EXAMPLE

       The following shows a complete example of how to use the  gl_get_line()
       function to get input from the user:

         #include <stdio.h>
         #include <locale.h>
         #include <libtecla.h>

         int main(int argc, char *argv[])
         {
           char *line;    /* The line that the user typed */
           GetLine *gl;   /* The gl_get_line() resource object */

           setlocale(LC_CTYPE, ""); /* Adopt the user's choice */
                                    /* of character set. */

           gl = new_GetLine(1024, 2048);
           if(!gl)
             return 1;

           while((line=gl_get_line(gl, "$ ", NULL, -1)) != NULL &&
                  strcmp(line, "exit\n") != 0)
             printf("You typed: %s\n", line);

           gl = del_GetLine(gl);
           return 0;
         }

       In  the  example, first the resources needed by the gl_get_line() func-
       tion are created by calling new_GetLine(). This  allocates  the  memory
       used  in  subsequent calls to the gl_get_line() function, including the
       history buffer for recording previously entered lines. Then one or more
       lines are read from the user, until either an error occurs, or the user
       types exit. Then finally the resources that were allocated by  new_Get-
       Line(),  are  returned to the system by calling del_GetLine(). Note the
       use of the NULL return value of del_GetLine() to make gl NULL. This  is
       a safety precaution. If the program subsequently attempts to pass gl to
       gl_get_line(), said  function  will  complain,  and  return  an  error,
       instead of attempting to use the deleted resource object.



THE FUNCTIONS USED IN THE EXAMPLE

       The descriptions of the functions used in the example are as follows:

         GetLine *new_GetLine(size_t linelen, size_t histlen)

       This  function creates the resources used by the gl_get_line() function
       and returns an opaque pointer to the object that  contains  them.   The
       maximum  length of an input line is specified via the linelen argument,
       and the number of bytes to allocate for storing history lines is set by
       the histlen argument. History lines are stored back-to-back in a single
       buffer of this size. Note that this means that the  number  of  history
       lines  that  can be stored at any given time, depends on the lengths of
       the individual lines.  If you want to place an upper limit on the  num-
       ber  of  lines  that can be stored, see the gl_limit_history() function
       described later. If you don't want history at all, specify  histlen  as
       zero, and no history buffer will be allocated.

       On error, a message is printed to stderr and NULL is returned.

         GetLine *del_GetLine(GetLine *gl)

       This  function  deletes  the resources that were returned by a previous
       call to new_GetLine(). It always returns NULL (ie a deleted object). It
       does nothing if the gl argument is NULL.

         char *gl_get_line(GetLine *gl, const char *prompt,
                          const char *start_line, int start_pos);

       The  gl_get_line()  function  can be called any number of times to read
       input from the user. The gl argument must have been previously returned
       by  a call to new_GetLine(). The prompt argument should be a normal NUL
       terminated string, specifying the prompt to present the user  with.  By
       default  prompts  are  displayed  literally,  but  if  enabled with the
       gl_prompt_style() function (see later), prompts can contain  directives
       to  do underlining, switch to and from bold fonts, or turn highlighting
       on and off.

       If you want to specify the initial contents of the line, for  the  user
       to  edit,  pass the desired string via the start_line argument. You can
       then specify which character of this line the cursor is initially posi-
       tioned  over,  using  the  start_pos argument. This should be -1 if you
       want the cursor to follow the last character of the start line. If  you
       don't want to preload the line in this manner, send start_line as NULL,
       and set start_pos to -1. Note that the line  pointer  returned  by  one
       call  to  gl_get_line()  can  be  passed  back  to  the  next  call  to
       gl_get_line() via the start_line. This allows the application  to  take
       the  last entered line, and if it contains an error, to then present it
       back to the user for re-editing, with the cursor  initially  positioned
       where the error was encountered.

       The gl_get_line() function returns a pointer to the line entered by the
       user, or NULL on error or at the end of the input. The returned pointer
       is  part  of  the  specified gl resource object, and thus should not be
       free'd by the caller, or assumed to be unchanging from one call to  the
       next.  When  reading  from a user at a terminal, there will always be a
       newline character at the end of the returned line.  When standard input
       is being taken from a pipe or a file, there will similarly be a newline
       unless the input line was too long to store in the internal buffer.  In
       the latter case you should call gl_get_line() again to read the rest of
       the line. Note  that  this  behavior  makes  gl_get_line()  similar  to
       fgets().    In   fact   when   stdin   isn't   connected  to  a  termi-
       nal,gl_get_line() just calls fgets().


THE RETURN STATUS OF GL_GET_LINE

       As described above, the gl_get_line() function has two possible  return
       values;  a pointer to the completed input line, or NULL. Extra informa-
       tion about what caused gl_get_line() to return  is  available  both  by
       inspecting errno, and by calling the gl_return_status() function.


         GlReturnStatus gl_return_status(GetLine *gl);


       The  following  are  the  possible enumerated values that this function
       returns.


         GLR_NEWLINE     -  The last call to gl_get_line()
                            successfully returned a completed
                            input line.

         GLR_BLOCKED     -  gl_get_line() was in non-blocking
                            server mode, and returned early to
                            avoid blocking the process while
                            waiting for terminal I/O. The
                            gl_pending_io() function can be
                            used to see what type of I/O
                            gl_get_line() was waiting for.
                            (see the gl_io_mode man page
                            for details).

         GLR_SIGNAL      -  A signal was caught by
                            gl_get_line() that had an
                            after-signal disposition of
                            GLS_ABORT (See gl_trap_signal()).

         GLR_TIMEOUT     -  The inactivity timer expired while
                            gl_get_line() was waiting for
                            input, and the timeout callback
                            function returned GLTO_ABORT.
                            See gl_inactivity_timeout() for
                            information about timeouts.

         GLR_FDABORT     -  An application I/O callack returned
                            GLFD_ABORT (see gl_watch_fd()).

         GLR_EOF         -  End of file reached. This can happen
                            when input is coming from a file or a
                            pipe, instead of the terminal. It also
                            occurs if the user invokes the
                            list-or-eof or del-char-or-list-or-eof
                            actions at the start of a new line.

         GLR_ERROR       -  An unexpected error caused
                            gl_get_line() to abort (consult
                            errno and/or
                            gl_error_message() for details.


       When gl_return_status() returns GLR_ERROR, and the value of errno isn't
       sufficient to explain what happened, you can use the gl_error_message()
       function to request a description of the last error that occurred.


         const char *gl_error_message(GetLine *gl, char *buff,
                                      size_t n);


       The return value is a pointer to the message that occurred. If the buff
       argument  is  NULL, this will be a pointer to a buffer within gl, who's
       value will probably change on the next call to any function  associated
       with gl_get_line(). Otherwise, if a non-NULL buff argument is provided,
       the error message, including a '\0' terminator, will be written  within
       the  first  n  elements  of this buffer, and the return value will be a
       pointer to the first element of this buffer. If the message  won't  fit
       in the provided buffer, it will be truncated to fit.


OPTIONAL PROMPT FORMATTING

       Whereas by default the prompt string that you specify is displayed lit-
       erally, without any special interpretation of the characters within it,
       the  gl_prompt_style()  function can be used to enable optional format-
       ting directives within the prompt.

         void gl_prompt_style(GetLine *gl, GlPromptStyle style);

       The style argument, which specifies the formatting style, can take  any
       of the following values:

         GL_FORMAT_PROMPT   -  In this style, the formatting
                               directives described below, when
                               included in prompt strings, are
                               interpreted as follows:

                                 %B  -  Display subsequent
                                        characters with a bold
                                        font.
                                 %b  -  Stop displaying characters
                                        with the bold font.
                                 %F  -  Make subsequent characters
                                        flash.
                                 %f  -  Turn off flashing
                                        characters.
                                 %U  -  Underline subsequent
                                        characters.
                                 %u  -  Stop underlining
                                        characters.
                                 %P  -  Switch to a pale (half
                                        brightness) font.
                                 %p  -  Stop using the pale font.
                                 %S  -  Highlight subsequent
                                        characters (also known as
                                        standout mode).
                                 %s  -  Stop highlighting
                                        characters.
                                 %V  -  Turn on reverse video.
                                 %v  -  Turn off reverse video.
                                 %%  -  Display a single %
                                        character.

                               For example, in this mode, a prompt
                               string like "%UOK%u$ " would
                               display the prompt "OK$ ",
                               but with the OK part
                               underlined.

                               Note that although a pair of
                               characters that starts with a %
                               character, but doesn't match any of
                               the above directives is displayed
                               literally, if a new directive is
                               subsequently introduced which does
                               match, the displayed prompt will
                               change, so it is better to always
                               use %% to display a literal %.

                               Also note that not all terminals
                               support all of these text
                               attributes, and that some substitute
                               a different attribute for missing
                               ones.

         GL_LITERAL_PROMPT  -  In this style, the prompt string is
                               printed literally. This is the
                               default style.


ALTERNATE CONFIGURATION SOURCES

       As mentioned above, by default users have the option of configuring the
       behavior of gl_get_line() via a configuration file called  .teclarc  in
       their  home directories. The fact that all applications share this same
       configuration file is both an advantage and a  disadvantage.   In  most
       cases it is an advantage, since it encourages uniformity, and frees the
       user from having to configure each  application  separately.   In  some
       applications, however, this single means of configuration is a problem.
       This is particularly  true  of  embedded  software,  where  there's  no
       filesystem  to read a configuration file from, and also in applications
       where a radically different choice of keybindings is needed to  emulate
       a  legacy  keyboard  interface.  To cater for such cases, the following
       function allows the application to control where configuration informa-
       tion is read from.


         int gl_configure_getline(GetLine *gl,
                                  const char *app_string,
                                  const char *app_file,
                                  const char *user_file);


       It allows the configuration commands that would normally be read from a
       user's ~/.teclarc file, to be read from any or none of,  a  string,  an
       application specific configuration file, and/or a user-specific config-
       uration file. If this function is  called  before  the  first  call  to
       gl_get_line(),  the default behavior of reading ~/.teclarc on the first
       call to  gl_get_line()  is  disabled,  so  all  configuration  must  be
       achieved  using the configuration sources specified with this function.

       If app_string != NULL, then it is interpreted as  a  string  containing
       one  or  more  configuration commands, separated from each other in the
       string by embedded newline characters. If app_file != NULL then  it  is
       interpreted  as the full pathname of an application-specific configura-
       tion file. If user_file != NULL then it  is  interpreted  as  the  full
       pathname of a user-specific configuration file, such as ~/.teclarc. For
       example, in the following call,


         gl_configure_getline(gl, "edit-mode vi \n nobeep",
                                  "/usr/share/myapp/teclarc",
                                  "~/.teclarc");


       the app_string argument causes the calling application to start  in  vi
       edit-mode,  instead of the default emacs mode, and turns off the use of
       the terminal bell by the library. It then attempts to read  system-wide
       configuration     commands     from    an    optional    file    called
       /usr/share/myapp/teclarc, then finally reads  user-specific  configura-
       tion  commands from an optional .teclarc file in the user's home direc-
       tory. Note that the arguments are listed in ascending order  of  prior-
       ity,  with  the  contents  of app_string being potentially overriden by
       commands in app_file, and commands in app_file potentially being  over-
       riden by commands in user_file.

       You  can  call this function as many times as needed, the results being
       cumulative, but note that copies of any  filenames  specified  via  the
       app_file and user_file arguments are recorded internally for subsequent
       use by the read-init-files key-binding function, so if you plan to call
       this  function multiple times, be sure that the last call specifies the
       filenames that you want re-read when the user requests that the config-
       uration files be re-read.

       Individual  key  sequences  can  also  be  bound  and unbound using the
       gl_bind_keyseq() function.


         int gl_bind_keyseq(GetLine *gl, GlKeyOrigin origin,
                            const char *keyseq,
                            const char *action);


       The origin argument specifies the priority of the binding, according to
       who  it  is being established for, and must be one of the following two
       values.

         GL_USER_KEY   -   The user requested this key-binding.
         GL_APP_KEY    -   This is a default binding set by the
                           application.

       When both user and application bindings for a given  key-sequence  have
       been  specified,  the  user binding takes precedence. The application's
       binding is subsequently reinstated  if  the  user's  binding  is  later
       unbound  via  either  another to this function, or a call to gl_config-
       ure_getline().

       The keyseq argument specifies the key-sequence to be bound or  unbound,
       and is expressed in the same way as in a ~/.teclarc configuration file.
       The action argument must either be a string containing the name of  the
       action  to bind the key-sequence to, or it must be NULL or "" to unbind
       the key-sequence.


CUSTOMIZED WORD COMPLETION

       If in your application, you would like to have TAB completion  complete
       other  things  in  addition to or instead of filenames, you can arrange
       this by registering an alternate completion callback  function,  via  a
       call to the gl_customize_completion() function.

         int gl_customize_completion(GetLine *gl, void *data,
                                     CplMatchFn *match_fn);

       The  data  argument  provides  a way for your application to pass arbi-
       trary, application-specific information to the callback function.  This
       is  passed  to  the callback every time that it is called. It might for
       example, point to the symbol table from which possible completions  are
       to  be sought. The match_fn argument specifies the callback function to
       be called. The CplMatchFn function type is defined in libtecla.h, as is
       a  CPL_MATCH_FN() macro that you can use to declare and prototype call-
       back functions. The declaration and responsibilities of callback  func-
       tions  are  described  in depth in the cpl_complete_word
       man page.

       In brief, the callback function is responsible for looking backwards in
       the  input  line, back from the point at which the user pressed TAB, to
       find the start of the word being completed. It then must lookup  possi-
       ble  completions  of this word, and record them one by one in the Word-
       Completion object that is passed to it as an argument, by  calling  the
       cpl_add_completion()  function. If the callback function wishes to pro-
       vide filename completion in addition to its own  specific  completions,
       it  has  the  option of itself calling the builtin file-name completion
       callback.    This    also,    is    documented    in    the    cpl_com-
       plete_word(@FUNC_MANEXT@) man page.

       Note  that  if you would like gl_get_line() to return the current input
       line when a successful completion is been made, you  can  arrange  this
       when you call cpl_add_completion(), by making the last character of the
       continuation suffix a newline character. If you do this, the input line
       will   be   updated  to  display  the  completion,  together  with  any
       contiuation suffix up to the newline character, then gl_get_line() will
       return this input line.


       If, for some reason, your callback function needs to write something to
       the terminal, it must call gl_normal_io() before doing  so.  This  will
       start  a  new line after the input line that is currently being edited,
       reinstate normal terminal I/O, and tell gl_get_line()  that  the  input
       line will need to be redrawn when the callback returns.


ADDING COMPLETION ACTIONS

       In  the  previous  section the ability to customize the behavior of the
       only default completion action, complete-word, was described.  In  this
       section  the  ability  to  install additional action functions, so that
       different types of word completion  can  be  bound  to  different  key-
       sequences,  is  described.  This  is  achieved  by using the gl_comple-
       tion_action() function.


         int gl_completion_action(GetLine *gl,
                                  void *data, CplMatchFn *match_fn,
                                  int list_only, const char *name,
                                  const char *keyseq);


       The data and match_fn  arguments  are  as  described  in  the  cpl_com-
       plete_word  man  page, and specify the callback function that should be
       invoked to  identify  possible  completions.   The  list_only  argument
       determines  whether  the action that is being defined should attempt to
       complete the word as far as possible in the input line before  display-
       ing  any  possible  ambiguous  completions, or whether it should simply
       display the list of possible completions  without  touching  the  input
       line. The former option is selected by specifying a value of 0, and the
       latter by specifying a value of 1. The name argument specifies the name
       by  which  configuration  files and future invokations of this function
       should refer to the action. This must either be the name of an existing
       completion  action  to  be  changed,  or be a new unused name for a new
       action. Finally, the keyseq argument specifies the default key-sequence
       to  bind  the  action  to.  If this is NULL, no new keysequence will be
       bound to the action.

       Beware that in order for the user to be able to change the key-sequence
       that  is  bound  to actions that are installed in this manner, when you
       call gl_completion_action() to install a given  action  for  the  first
       time,  you  should  do this between calling new_GetLine() and the first
       call to gl_get_line().  Otherwise, when the user's  configuration  file
       is  read on the first call to gl_get_line(), the name of the your addi-
       tional action won't be known, and any reference to it in the configura-
       tion file will generate an error.

       As  discussed for gl_customize_completion(), if your callback function,
       for some reason, needs to write anything to the terminal, it must  call
       gl_normal_io() before doing so.


DEFINING CUSTOM ACTIONS

       Although  the built-in key-binding actions are sufficient for the needs
       of most applications, occasionally a specialized application  may  need
       to  define  one  or  more custom actions, bound to application-specific
       key-sequences. For example, a sales application would benefit from hav-
       ing  a key-sequence that displayed the part name that corresponded to a
       part number preceding the cursor. Such a feature is clearly beyond  the
       scope  of the built-in action functions. So for such special cases, the
       gl_register_action() function is provided.


         int gl_register_action(GetLine *gl, void *data,
                       GlActionFn *fn, const char *name,
                       const char *keyseq);


       This function lets the application register an external  function,  fn,
       that  will  thereafter  be  called  whenever  either the specified key-
       sequence, keyseq, is entered by the user, or the user enters any  other
       key-sequence  that  the user subsequently binds to the specified action
       name, name, in their configuration file. The data  argument  can  be  a
       pointer  to  anything that the application wishes to have passed to the
       action function, fn, whenever that function is invoked.

       The action function, fn, should be declared using the following  macro,
       which is defined in libtecla.h.


         #define GL_ACTION_FN(fn) GlAfterAction (fn)(GetLine *gl, \
                     void *data, int count, size_t curpos, \
                     const char *line)


       The  gl  and  data  arguments  are those that were previously passed to
       gl_register_action() when the action function was registered. The count
       argument  is a numeric argument which the user has the option of enter-
       ing using the digit-argument action, before invoking the action. If the
       user doesn't enter a number, then the count argument is set to 1. Nomi-
       nally this argument is interpreted as a repeat count, meaning that  the
       action  should  be  repeated  that many times. In practice however, for
       some actions a repeat count makes little sense. In such cases,  actions
       can  either  simply  ignore  the count argument, or use its value for a
       different purpose.

       A copy of the current input line is passed in the read-only line  argu-
       ment.  The  current  cursor position within this string is given by the
       index contained in the curpos argument. Note that  direct  manipulation
       of  the  input  line  and the cursor position is not permitted. This is
       because the rules dicated by various modes,  such  as  vi  mode  versus
       emacs  mode,  no-echo mode, and insert mode versus overstrike mode etc,
       make it too complex for an application writer  to  write  a  conforming
       editing action, as well as constrain future changes to the internals of
       gl_get_line(). A potential solution to this dilema would  be  to  allow
       the  action  function  to  edit  the  line  using  the existing editing
       actions. This is currently under consideration.

       If the action function wishes to write text to  the  terminal,  without
       this  getting  mixed  up  with the displayed text of the input line, or
       read from the terminal without having to handle raw terminal I/O,  then
       before  doing  either  of these operations, it must temporarily suspend
       line editing by calling  the  gl_normal_io()  function.  This  function
       flushes  any  pending  output  to the terminal, moves the cursor to the
       start of the line that follows the last  terminal  line  of  the  input
       line,  then  restores  the terminal to a state that is suitable for use
       with the C stdio facilities. The latter includes such things as restor-
       ing the normal mapping of \n to \r\n, and, when in server mode, restor-
       ing the normal blocking form of terminal I/O. Having called this  func-
       tion, the action function can read from and write to the terminal with-
       out the fear of creating a mess.  It isn't  necessary  for  the  action
       function to restore the original editing environment before it returns.
       This is done automatically by gl_get_line() after the  action  function
       returns.  The following is a simple example of an action function which
       writes the sentence "Hello world" on a new terminal line after the line
       being  edited. When this function returns, the input line is redrawn on
       the line that follows the "Hello world" line, and line editing resumes.


         static GL_ACTION_FN(say_hello_fn)
         {
           if(gl_normal_io(gl))   /* Temporarily suspend editing */
             return GLA_ABORT;
           printf("Hello world\n");
           return GLA_CONTINUE;
         }


       Action  functions  must  return  one  of  the following values, to tell
       gl_get_line() how to procede.


         GLA_ABORT     -   Cause gl_get_line() to return NULL.
         GLA_RETURN    -   Cause gl_get_line() to return the
                           completed input line.
         GLA_CONTINUE  -   Resume command-line editing.


       Note that the name argument of gl_register_action() specifies the  name
       by  which  a  user can refer to the action in their configuration file.
       This allows them to re-bind the action to an alternate key-seqeunce. In
       order  for  this  to work, it is necessary to call gl_register_action()
       between calling new_GetLine() and the first call to gl_get_line().


HISTORY FILES

       To save the contents of the history buffer before quitting your  appli-
       cation,  and subsequently restore them when you next start the applica-
       tion, the following functions are provided.


        int gl_save_history(GetLine *gl, const char *filename,
                            const char *comment, int max_lines);
        int gl_load_history(GetLine *gl, const char *filename,
                            const char *comment);


       The filename argument specifies the name to give the history file  when
       saving, or the name of an existing history file, when loading. This may
       contain home-directory and environment variable  expressions,  such  as
       "~/.myapp_history" or "$HOME/.myapp_history".

       Along  with each history line, extra information about it, such as when
       it was entered by the user, and what its nesting level is, is  recorded
       as  a comment preceding the line in the history file. Writing this as a
       comment allows the history file to double as a command  file,  just  in
       case  you  wish  to replay a whole session using it. Since comment pre-
       fixes differ in different languages, the comment argument  is  provided
       for  specifying  the  comment  prefix. For example, if your application
       were a unix shell, such as the bourne  shell,  you  would  specify  "#"
       here.  Whatever  you choose for the comment character, you must specify
       the same prefix to gl_load_history() that  you  used  when  you  called
       gl_save_history() to write the history file.

       The  max_lines  must be either -1 to specify that all lines in the his-
       tory list be saved, or a positive number specifying a  ceiling  on  how
       many of the most recent lines should be saved.

       Both  fuctions return non-zero on error, after writing an error message
       to stderr. Note that gl_load_history() does not consider the  non-exis-
       tence of a file to be an error.


MULTIPLE HISTORY LISTS

       If your application uses a single GetLine object for entering many dif-
       ferent types of input lines, you may wish gl_get_line() to  distinguish
       the different types of lines in the history list, and only recall lines
       that match the current type  of  line.  To  support  this  requirement,
       gl_get_line()  marks  lines  being recorded in the history list with an
       integer identifier chosen by the application.  Initially  this  identi-
       fier  is  set to 0 by new_GetLine(), but it can be changed subsequently
       by calling gl_group_history().


         int gl_group_history(GetLine *gl, unsigned id);


       The integer identifier id can be any number chosen by the  application,
       but  note  that  gl_save_history()  and  gl_load_history() preserve the
       association between identifiers and historical input lines between pro-
       gram  invokations,  so you should choose fixed identifiers for the dif-
       ferent types of input line used by your application.

       Whenever gl_get_line() appends a new input line to  the  history  list,
       the  current  history  identifier  is  recorded with it, and when it is
       asked to recall a historical input line, it only recalls lines that are
       marked with the current identifier.


DISPLAYING HISTORY

       The history list can be displayed by calling gl_show_history().


         int gl_show_history(GetLine *gl, FILE *fp,
                             const char *fmt,
                             int all_groups,
                             int max_lines);


       This  displays  the  current  contents of the history list to the stdio
       output stream fp. If the max_lines argument is greater than or equal to
       zero,  then  no  more than this number of the most recent lines will be
       displayed. If the all_groups argument is non-zero, lines from all  his-
       tory  groups  are  displayed.  Otherwise  just  those  of the currently
       selected history group are displayed. The format string argument,  fmt,
       determines  how the line is displayed. This can contain arbitrary char-
       acters which are written verbatim, interleaved with any of the  follow-
       ing format directives:

         %D  -  The date on which the line was originally
                entered, formatted like 2001-11-20.
         %T  -  The time of day when the line was entered,
                formatted like 23:59:59.
         %N  -  The sequential entry number of the line in
                the history buffer.
         %G  -  The number of the history group which the
                line belongs to.
         %%  -  A literal % character.
         %H  -  The history line itself.

       Thus a format string like "%D %T  %H0 would output something like:

         2001-11-20 10:23:34  Hello world

       Note  the  inclusion  of  an  explicit  newline character in the format
       string.


LOOKING UP HISTORY

       The gl_lookup_history() function allows the calling application to look
       up lines in the history list.


         typedef struct {
           const char *line;    /* The requested historical */
                                /*  line. */
           unsigned group;      /* The history group to which */
                                /*  the line belongs. */
           time_t timestamp;    /* The date and time at which */
                                /*  the line was originally */
                                /*  entered. */
         } GlHistoryLine;

         int gl_lookup_history(GetLine *gl, unsigned long id,
                               GlHistoryLine *hline);


       The  id  argument indicates which line to look up, where the first line
       that was entered in the history list after new_GetLine() was called, is
       denoted  by  0, and subsequently entered lines are denoted with succes-
       sively higher numbers. Note that the range of lines currently preserved
       in the history list can be queried by calling the gl_range_of_history()
       function, described later. If the requested  line  is  in  the  history
       list,  the  details of the line are recorded in the variable pointed to
       by the hline argument, and 1 is returned. Otherwise 0 is returned,  and
       the variable pointed to by hline is left unchanged.

       Beware  that  the string returned in hline->line is part of the history
       buffer, so it must not be modified by the caller, and will be  recycled
       on  the next call to any function that takes gl as its argument. There-
       fore you should make a private copy of this string if you need to  keep
       it around.


MANUAL HISTORY ARCHIVAL

       By default, whenever a line is entered by the user, it is automatically
       appended to the history list, just  before  gl_get_line()  returns  the
       line  to  the  caller.  This is convenient for the majority of applica-
       tions, but there are also applications that need finer grained  control
       over  what gets added to the history list. In such cases, the automatic
       addition of entered lines to the history list  can  be  turned  off  by
       calling the gl_automatic_history() function.


         int gl_automatic_history(GetLine *gl, int enable);


       If  this  function  is  called  with  its  enable  argument  set  to 0,
       gl_get_line() won't automatically archive subsequently  entered  lines.
       Automatic  archiving  can be reenabled at a later time, by calling this
       function again, with its enable argument set  to  1.   While  automatic
       history  archiving  is  disabled,  the  calling application can use the
       gl_append_history() to append lines to the history list as needed.


         int gl_append_history(GetLine *gl, const char *line);


       The line argument specifies the line to be added to the  history  list.
       This  must  be  a normal ' ' terminated string. If this string contains
       any newline characters, the line that gets archived in the history list
       will  be  terminated by the first of these. Otherwise it will be termi-
       nated by the ' ' terminator.  If the line is longer  than  the  maximum
       input  line  length,  that was specified when new_GetLine() was called,
       when the line  is  recalled,  it  will  get  truncated  to  the  actual
       gl_get_line() line length.

       If successful, gl_append_history() returns 0. Otherwise it returns non-
       zero, and sets errno to one of the following values.


          EINVAL  -  One of the arguments passed to
                     gl_append_history() was NULL.
          ENOMEM  -  The specified line was longer than the allocated
                     size of the history buffer (as specified when
                     new_GetLine() was called), so it couldn't be
                     archived.


       A textual description of the error can optionally be obtained by  call-
       ing gl_error_message(). Note that after such an error, the history list
       remains in a valid state to receive new history lines, so there is lit-
       tle harm in simply ignoring the return status of gl_append_history().


MISCELLANEOUS HISTORY CONFIGURATION

       If  you  wish  to change the size of the history buffer that was origi-
       nally specified in the call to new_GetLine(), you can do  so  with  the
       gl_resize_history() function.


         int gl_resize_history(GetLine *gl, size_t histlen);


       The  histlen argument specifies the new size in bytes, and if you spec-
       ify this as 0, the buffer will be deleted.

       As mentioned in the discussion of new_GetLine(), the  number  of  lines
       that can be stored in the history buffer, depends on the lengths of the
       individual lines. For example, a 1000 byte buffer could  equally  store
       10  lines  of average length 100 bytes, or 2 lines of average length 50
       bytes. Although the buffer is never expanded when new lines are  added,
       a  list  of  pointers  into the buffer does get expanded when needed to
       accomodate the number of lines currently stored in the buffer. To place
       an upper limit on the number of lines in the buffer, and thus a ceiling
       on  the  amount  of  memory  used  in  this  list,  you  can  call  the
       gl_limit_history() function.


         void gl_limit_history(GetLine *gl, int max_lines);


       The  max_lines  should  either be a positive number >= 0, specifying an
       upper limit on the number of lines in the buffer, or be  -1  to  cancel
       any  previously  specified  limit.  When a limit is in effect, only the
       max_lines most recently appended lines are kept in  the  buffer.  Older
       lines are discarded.

       To  discard  lines  from the history buffer, use the gl_clear_history()
       function.

         void gl_clear_history(GetLine *gl, int all_groups);

       The all_groups argument tells the function whether to delete  just  the
       lines  associated  with  the  current  history group (see gl_group_his-
       tory()), or all historical lines in the buffer.

       The gl_toggle_history() function allows you to toggle  history  on  and
       off without losing the current contents of the history list.


         void gl_toggle_history(GetLine *gl, int enable);


       Setting  the  enable argument to 0 turns off the history mechanism, and
       setting it to 1 turns it back on. When history is turned  off,  no  new
       lines  will  be added to the history list, and history lookup key-bind-
       ings will act as though there is nothing in the history buffer.


QUERYING HISTORY INFORMATION

       The configured state of the  history  list  can  be  queried  with  the
       gl_history_state() function.


         typedef struct {
           int enabled;     /* True if history is enabled */
           unsigned group;  /* The current history group */
           int max_lines;   /* The current upper limit on the */
                            /*  number of lines in the history */
                            /*  list, or -1 if unlimited. */
         } GlHistoryState;

         void gl_state_of_history(GetLine *gl,
                                  GlHistoryState *state);

       On  return,  the status information is recorded in the variable pointed
       to by the state argument.

       The gl_range_of_history() function returns  the  number  and  range  of
       lines in the history list.


       typedef struct {
         unsigned long oldest;  /* The sequential entry number */
                                /*  of the oldest line in the */
                                /*  history list. */
         unsigned long newest;  /* The sequential entry number */
                                /*  of the newest line in the */
                                /*  history list. */
         int nlines;            /* The number of lines in the */
                                /*  history list. */
       } GlHistoryRange;

       void gl_range_of_history(GetLine *gl, GlHistoryRange *range);

       The  return values are recorded in the variable pointed to by the range
       argument. If the nlines member of this structure is greater than  zero,
       then  the  oldest  and  newest members report the range of lines in the
       list, and newest=oldest+nlines-1.  Otherwise they are both zero.

       The gl_size_of_history() function returns the total size of the history
       buffer and the amount of the buffer that is currently occupied.

         typedef struct {
           size_t size;      /* The size of the history buffer */
                             /*  (bytes). */
           size_t used;      /* The number of bytes of the */
                             /*  history buffer that are */
                             /*  currently occupied. */
         } GlHistorySize;

         void gl_size_of_history(GetLine *gl, GlHistorySize *size);

       On  return, the size information is recorded in the variable pointed to
       by the size argument.


CHANGING TERMINALS

       The new_GetLine() constructor function assumes that input is to be read
       from stdin, and output written to stdout. The following function allows
       you to switch to different input and output streams.

         int gl_change_terminal(GetLine *gl, FILE *input_fp,
                                FILE *output_fp, const char *term);

       The gl argument is the object that was returned by new_GetLine().   The
       input_fp  argument  specifies  the  stream  to read from, and output_fp
       specifies the stream to be written to. Only if both of these refer to a
       terminal,  will  interactive  terminal  input  be  enabled.   Otherwise
       gl_get_line() will simply call fgets() to read command input.  If  both
       streams refer to a terminal, then they must refer to the same terminal,
       and the type of this terminal must be specified via the term  argument.
       The value of the term argument is looked up in the terminal information
       database (terminfo or termcap), in order  to  determine  which  special
       control  sequences  are needed to control various aspects of the termi-
       nal.  new_GetLine()  for  example,   passes   the   return   value   of
       getenv("TERM")  in  this argument. Note that if one or both of input_fp
       and output_fp don't refer to a terminal, then it is legal to pass  NULL
       instead of a terminal type.

       Note that if you want to pass file descriptors to gl_change_terminal(),
       you can do this by creating  stdio  stream  wrappers  using  the  POSIX
       fdopen() function.


EXTERNAL EVENT HANDLING

       By  default, gl_get_line() doesn't return until either a complete input
       line has been entered by the user, or an error occurs. In programs that
       need  to  watch for I/O from other sources than the terminal, there are
       two options.


         1. Use the functions described in the
            gl_io_mode man page to switch
            gl_get_line() into non-blocking server mode. In this mode,
            gl_get_line() becomes a non-blocking, incremental
            line-editing function that can safely be called from
            an external event loop. Although this is a very
            versatile method, it involves taking on some
            responsibilities that are normally performed behind
            the scenes by gl_get_line().

         2. While gl_get_line() is waiting for keyboard
            input from the user, you can ask it to also watch for
            activity on arbitrary file descriptors, such as
            network sockets, pipes etc, and have it call functions
            of your choosing when activity is seen. This works on
            any system that has the select() system call,
            which is most, if not all flavors of unix.


       Registering a file descriptor to be watched by  gl_get_line()  involves
       calling the gl_watch_fd() function.


         int gl_watch_fd(GetLine *gl, int fd, GlFdEvent event,
                         GlFdEventFn *callback, void *data);


       If  this returns non-zero, then it means that either your arguments are
       invalid, or that this facility isn't supported on the host system.

       The fd argument is the file descriptor to be watched. The  event  argu-
       ment  specifies  what  type of activity is of interest, chosen from the
       following enumerated values:


         GLFD_READ   -  Watch for the arrival of data to be read.
         GLFD_WRITE  -  Watch for the ability to write to the file
                        descriptor without blocking.
         GLFD_URGENT -  Watch for the arrival of urgent
                        out-of-band data on the file descriptor.


       The callback argument  is  the  function  to  call  when  the  selected
       activity  is seen. It should be defined with the following macro, which
       is defined in libtecla.h.


         #define GL_FD_EVENT_FN(fn) GlFdStatus (fn)(GetLine *gl, \
                                             void *data, int fd, \
                                             GlFdEvent event)

       The data argument of the gl_watch_fd() function is passed to the  call-
       back  function  for  its  own  use, and can point to anything you like,
       including NULL. The file descriptor and the  event  argument  are  also
       passed  to  the callback function, and this potentially allows the same
       callback function to be registered to  more  than  one  type  of  event
       and/or  more than one file descriptor. The return value of the callback
       function should be one of the following values.


         GLFD_ABORT    -  Tell gl_get_line() to abort. When this
                          happens, gl_get_line() returns
                          NULL, and a following call to
                          gl_return_status() will return
                          GLR_FDABORT. Note that if the
                          application needs errno always to
                          have a meaningful value when
                          gl_get_line() returns NULL,
                          the callback function should set
                          errno appropriately.
         GLFD_REFRESH  -  Redraw the input line then continue
                          waiting for input. Return this if
                          your callback wrote to the terminal.
         GLFD_CONTINUE -  Continue to wait for input, without
                          redrawing the line.

       Note that before calling the callback, gl_get_line() blocks  most  sig-
       nals,  and  leaves its own signal handlers installed, so if you need to
       catch a particular signal you will need  to  both  temporarily  install
       your  own  signal  handler, and unblock the signal. Be sure to re-block
       the signal (if it was originally blocked) and  reinstate  the  original
       signal handler, if any, before returning.



       If  the  callback  function  needs to read or write to the terminal, it
       should ideally first call gl_normal_io(gl) to temporarily suspend  line
       editing.  This  will  restore  the terminal to canonical, blocking-I/O,
       mode, and move the cursor to the start of a new terminal  line.  Later,
       when  the  callback  returns,  gl_get_line()  will  notice that gl_nor-
       mal_io() was called, redisplay the input line and resume editing.  Note
       that in this case the return values, GLFD_REFRESH and GLFD_CONTINUE are
       equivalent.



       To support cases where the callback function calls a third-party  func-
       tion  which  occasionally and u0prisicre-enabledesbeforee themicallback
       automatic conversion of "0 to "
       function  is called. If the callack knows that the third-party function
       wrote to the terminal, it should then return  the  GLFD_REFRESH  return
       value, to tell gl_get_line() to redisplay the input line.



       To  remove  a  callback  function  that you previously registered for a
       given file descriptor and event, simply  call  gl_watch_fd()  with  the
       same  file descriptor and event arguments, but with a callback argument
       of 0. The data argument is ignored in this case.


SETTING AN INACTIVITY TIMEOUT

       On systems with the select() system call,  the  gl_inactivity_timeout()
       function can be used to set or cancel an inactivity timeout. Inactivity
       in this case refers both to keyboard input, and  to  I/O  on  any  file
       descriptors  registered by prior and subsequent calls to gl_watch_fd().
       On oddball systems that don't have select(), this call has no effect.


         int gl_inactivity_timeout(GetLine *gl, GlTimeoutFn *callback,
                            void *data, unsigned long sec,
                            unsigned long nsec);


       The timeout is specified in the form of an integral number  of  seconds
       and  an  integral number of nanoseconds, via the sec and nsec arguments
       respectively. Subsequently, whenever no activity is seen for this  time
       period, the function specified via the callback argument is called. The
       data argument of gl_inactivity_timeout() is  passed  verbatim  to  this
       callback  function whenever it is invoked, and can thus be used to pass
       arbitrary application-specific information to the callback. The follow-
       ing  macro is provided in libtecla.h for applications to use to declare
       and prototype timeout callback functions.


         #define GL_TIMEOUT_FN(fn) \
                      GlAfterTimeout (fn)(GetLine *gl, void *data)


       On returning, the application's callback is expected to return  one  of
       the  following  enumerators  to tell gl_get_line() how to procede after
       the timeout has been handled by the callback.


         GLTO_ABORT    -  Tell gl_get_line() to abort. When
                          this happens, gl_get_line() will
                          return NULL, and a following call
                          to gl_return_status() will return
                          GLR_TIMEOUT. Note that if the
                          application needs errno always to
                          have a meaningful value when
                          gl_get_line() returns NULL,
                          the callback function should set
                          errno appropriately.
         GLTO_REFRESH  -  Redraw the input line, then continue
                          waiting for input. You should return
                          this value if your callback wrote to the
                          terminal without having first called
                          gl_normal_io(gl).
         GLTO_CONTINUE -  In normal blocking-I/O mode, continue to
                          wait for input, without redrawing the
                          user's input line.
                          In non-blocking server I/O mode (see
                          gl_io_mode), cause gl_get_line()
                          to act as though I/O blocked. This means
                          that gl_get_line() will immediately
                          return NULL, and a following call
                          to gl_return_status() will return
                          GLR_BLOCKED.


       Note that before calling the callback, gl_get_line() blocks  most  sig-
       nals,  and  leaves its own signal handlers installed, so if you need to
       catch a particular signal you will need  to  both  temporarily  install
       your  own  signal  handler, and unblock the signal. Be sure to re-block
       the signal (if it was originally blocked) and  reinstate  the  original
       signal handler, if any, before returning.



       If  the  callback  function  needs to read or write to the terminal, it
       should ideally first call gl_normal_io(gl) to temporarily suspend  line
       editing.  This  will  restore  the terminal to canonical, blocking-I/O,
       mode, and move the cursor to the start of a new terminal  line.  Later,
       when  the  callback  returns,  gl_get_line()  will  notice that gl_nor-
       mal_io() was called, redisplay the input line and resume editing.  Note
       that in this case the return values, GLTO_REFRESH and GLTO_CONTINUE are
       equivalent.



       To support cases where the callback function calls a third-party  func-
       tion  which  occasionally and u0prisicre-enabledesbeforee themicallback
       automatic conversion of "0 to "
       function  is called. If the callack knows that the third-party function
       wrote to the terminal, it should then return  the  GLTO_REFRESH  return
       value, to tell gl_get_line() to redisplay the input line.



       Note  that  although the timeout argument includes a nano-second compo-
       nent, few computer clocks presently have  resolutions  that  are  finer
       than  a few milliseconds, so asking for less than a few milliseconds is
       equivalent to requesting zero seconds on a  lot  of  systems.  If  this
       would  be  a  problem,  you  should  base your timeout selection on the
       actual   resolution   of   the   host    clock    (eg.    by    calling
       sysconf(_SC_CLK_TCK)).



       To  turn off timeouts, simply call gl_inactivity_timeout() with a call-
       back argument of 0. The data argument is ignored in this case.


SIGNAL HANDLING DEFAULTS

       By default, the gl_get_line() function intercepts a number of  signals.
       This  is particularly important for signals which would by default ter-
       minate the process, since the terminal needs to be restored to a usable
       state  before  this  happens.  In  this  section,  the signals that are
       trapped  by  default,  and  how  gl_get_line()  responds  to  them,  is
       described.  Changing  these defaults is the topic of the following sec-
       tion.

       When the following subset of signals are  caught,  gl_get_line()  first
       restores  the  terminal  settings  and signal handling to how they were
       before gl_get_line() was called, resends the signal, to allow the call-
       ing  application's  signal  handlers  to handle it, then if the process
       still exists, gl_get_line() returns NULL and sets  errno  as  specified
       below.


        SIGINT  -  This signal is generated both by the keyboard
                   interrupt key (usually ^C), and the keyboard
                   break key.

                   errno=EINTR

        SIGHUP  -  This signal is generated when the controlling
                   terminal exits.

                   errno=ENOTTY

        SIGPIPE -  This signal is generated when a program attempts
                   to write to a pipe who's remote end isn't being
                   read by any process. This can happen for example
                   if you have called gl_change_terminal() to
                   redirect output to a pipe hidden under a pseudo
                   terminal.

                   errno=EPIPE

        SIGQUIT -  This signal is generated by the keyboard quit
                   key (usually ^\).

                   errno=EINTR

        SIGABRT -  This signal is generated by the standard C,
                   abort() function. By default it both
                   terminates the process and generates a core
                   dump.

                   errno=EINTR

        SIGTERM -  This is the default signal that the UN*X
                   kill command sends to processes.

                   errno=EINTR

       Note  that in the case of all of the above signals, POSIX mandates that
       by default the process is terminated, with the addition of a core  dump
       in  the  case  of  the  SIGQUIT  signal. In other words, if the calling
       application doesn't override the default handler by supplying  its  own
       signal  handler, receipt of the corresponding signal will terminate the
       application before gl_get_line() returns.

       If gl_get_line() aborts with errno set to EINTR, you can find out  what
       signal caused it to abort, by calling the following function.

         int gl_last_signal(const GetLine *gl);

       This  returns the numeric code (eg. SIGINT) of the last signal that was
       received during the most recent call to gl_get_line(), or -1 if no sig-
       nals were received.

       On  systems  that support it, when a SIGWINCH (window change) signal is
       received, gl_get_line() queries the terminal to find out its new  size,
       redraws the current input line to accomodate the new size, then returns
       to waiting for keyboard input from the user. Unlike other signals, this
       signal isn't resent to the application.

       Finally, the following signals cause gl_get_line() to first restore the
       terminal  and  signal  environment  to  that  which  prevailed   before
       gl_get_line() was called, then resend the signal to the application. If
       the process still exists after the  signal  has  been  delivered,  then
       gl_get_line() then re-establishes its own signal handlers, switches the
       terminal back to raw mode, redisplays the input line, and goes back  to
       awaiting terminal input from the user.

        SIGCONT    -  This signal is generated when a suspended
                      process is resumed.

        SIGPOLL    -  On SVR4 systems, this signal notifies the
                      process of an asynchronous I/O event. Note
                      that under 4.3+BSD, SIGIO and SIGPOLL are
                      the same. On other systems, SIGIO is ignored
                      by default, so gl_get_line() doesn't
                      trap it by default.

        SIGPWR     -  This signal is generated when a power failure
                      occurs (presumably when the system is on a
                      UPS).

        SIGALRM    -  This signal is generated when a timer
                      expires.

        SIGUSR1    -  An application specific signal.

        SIGUSR2    -  Another application specific signal.

        SIGVTALRM  -  This signal is generated when a virtual
                      timer expires (see man setitimer(2)).

        SIGXCPU    -  This signal is generated when a process
                      exceeds its soft CPU time limit.

        SIGXFSZ    -  This signal is generated when a process
                      exceeds its soft file-size limit.

        SIGTSTP    -  This signal is generated by the terminal
                      suspend key, which is usually ^Z, or the
                      delayed terminal suspend key, which is
                      usually ^Y.

        SIGTTIN    -  This signal is generated if the program
                      attempts to read from the terminal while the
                      program is running in the background.

        SIGTTOU    -  This signal is generated if the program
                      attempts to write to the terminal while the
                      program is running in the background.


       Obviously not all of the above signals are supported on all systems, so
       code to support them is conditionally compiled into the tecla  library.

       Note  that  if SIGKILL or SIGPOLL, which by definition can't be caught,
       or any of the hardware generated exception signals,  such  as  SIGSEGV,
       SIGBUS  and  SIGFPE, are received and unhandled while gl_get_line() has
       the terminal in raw mode, the program will be  terminated  without  the
       terminal  having been restored to a usable state. In practice, job-con-
       trol shells usually reset the terminal settings when a  process  relin-
       quishes  the controlling terminal, so this is only a problem with older
       shells.


CUSTOMIZED SIGNAL HANDLING

       The previous section listed the signals  that  gl_get_line()  traps  by
       default,  and described how it responds to them. This section describes
       how to both add and remove signals from the list  of  trapped  signals,
       and  how to specify how gl_get_line() should respond to a given signal.

       If you don't need gl_get_line() to do anything in response to a  signal
       that  it  normally  traps, you can tell to gl_get_line() to ignore that
       signal by calling gl_ignore_signal().

         int gl_ignore_signal(GetLine *gl, int signo);

       The signo argument is the number of the signal (eg.  SIGINT)  that  you
       want  to  have  ignored. If the specified signal isn't currently one of
       those being trapped, this function does nothing.

       The gl_trap_signal() function allows you to either add a new signal  to
       the  list that gl_get_line() traps, or modify how it responds to a sig-
       nal that it already traps.

         int gl_trap_signal(GetLine *gl, int signo, unsigned flags,
                            GlAfterSignal after, int errno_value);

       The signo argument is the number of the signal that you  wish  to  have
       trapped. The flags argument is a set of flags which determine the envi-
       ronment in which the application's signal handler is invoked, the after
       argument  tells gl_get_line() what to do after the application's signal
       handler returns, and errno_value tells gl_get_line() what to set  errno
       to if told to abort.

       The  flags  argument  is  a bitwise OR of zero or more of the following
       enumerators:

         GLS_RESTORE_SIG  -  Restore the caller's signal
                             environment while handling the
                             signal.

         GLS_RESTORE_TTY  -  Restore the caller's terminal settings
                             while handling the signal.

         GLS_RESTORE_LINE -  Move the cursor to the start of the
                             line following the input line before
                             invoking the application's signal
                             handler.

         GLS_REDRAW_LINE  -  Redraw the input line when the
                             application's signal handler returns.

         GLS_UNBLOCK_SIG  -  Normally, if the calling program has
                             a signal blocked (man sigprocmask),
                             gl_get_line() does not trap that
                             signal. This flag tells gl_get_line()
                             to trap the signal and unblock it for
                             the duration of the call to
                             gl_get_line().

         GLS_DONT_FORWARD -  If this flag is included, the signal
                             will not be forwarded to the signal
                             handler of the calling program.

       Two commonly useful flag combinations are also enumerated as follows:

         GLS_RESTORE_ENV   = GLS_RESTORE_SIG | GLS_RESTORE_TTY |
                             GLS_REDRAW_LINE

         GLS_SUSPEND_INPUT = GLS_RESTORE_ENV | GLS_RESTORE_LINE


       If your signal handler, or the default system signal handler  for  this
       signal, if you haven't overridden it, never either writes to the termi-
       nal, nor suspends or terminates  the  calling  program,  then  you  can
       safely set the flags argument to 0.

       If your signal handler always writes to the terminal, reads from it, or
       suspends or terminates the program, you should specify the flags  argu-
       ment as GL_SUSPEND_INPUT, so that:

       1. The cursor doesn't get left in the middle of the input
          line.
       2. So that the user can type in input and have it echoed.
       3. So that you don't need to end each output line with
          \r\n, instead of just \n.

       The  GL_RESTORE_ENV combination is the same as GL_SUSPEND_INPUT, except
       that it doesn't move the cursor, and if  your  signal  handler  doesn't
       read  or write anything to the terminal, the user won't see any visible
       indication that a signal was caught. This can be useful if you  have  a
       signal  handler  that  only  occasionally writes to the terminal, where
       using GL_SUSPEND_LINE would cause the input line  to  be  unnecessarily
       duplicated  when nothing had been written to the terminal.  Such a sig-
       nal handler, when it does write to the  terminal,  should  be  sure  to
       start a new line at the start of its first write, by writing a new line
       before returning. If the signal arrives while the user  is  entering  a
       line  that only occupies a signal terminal line, or if the cursor is on
       the last terminal line of a longer input line, this will have the  same
       effect  as  GL_SUSPEND_INPUT. Otherwise it will start writing on a line
       that already contains part of the displayed input line.   This  doesn't
       do any harm, but it looks a bit ugly, which is why the GL_SUSPEND_INPUT
       combination is better if you know that you are always going to be writ-
       ting to the terminal.

       The  after argument, which determines what gl_get_line() does after the
       application's signal handler returns (if it returns), can take any  one
       of the following values:

         GLS_RETURN   - Return the completed input line, just as
                        though the user had pressed the return
                        key.

         GLS_ABORT    - Cause gl_get_line() to abort. When
                        this happens, gl_get_line() returns
                        NULL, and a following call to
                        gl_return_status() will return
                        GLR_SIGNAL. Note that if the
                        application needs errno always to
                        have a meaningful value when
                        gl_get_line() returns NULL,
                        the callback function should set
                        errno appropriately.
         GLS_CONTINUE - Resume command line editing.

       The  errno_value argument is intended to be combined with the GLS_ABORT
       option, telling gl_get_line() what to set the standard  errno  variable
       to  before returning NULL to the calling program. It can also, however,
       be used with the GL_RETURN option, in case you wish to have  a  way  to
       distinguish  between  an  input  line that was entered using the return
       key, and one that was entered by the receipt of a signal.


RELIABLE SIGNAL HANDLING

       Signal handling is suprisingly hard to do reliably without race  condi-
       tions.  In gl_get_line() a lot of care has been taken to allow applica-
       tions to perform reliable signal handling  around  gl_get_line().  This
       section explains how to make use of this.

       As  an  example of the problems that can arise if the application isn't
       written correctly, imagine that one's application has a  SIGINT  signal
       handler that sets a global flag. Now suppose that the application tests
       this flag just before invoking gl_get_line(). If a SIGINT  signal  hap-
       pens  to  be received in the small window of time between the statement
       that tests the value  of  this  flag,  and  the  statement  that  calls
       gl_get_line(), then gl_get_line() will not see the signal, and will not
       be interrupted. As a result, the application won't be able  to  respond
       to  the  signal  until  the  user gets around to finishing entering the
       input line and gl_get_line() returns.  Depending  on  the  application,
       this  might  or might not be a disaster, but at the very least it would
       puzzle the user.

       The way to avoid such problems is to do the following.

       1. If needed, use the gl_trap_signal() function to
          configure gl_get_line() to abort when important
          signals are caught.

       2. Configure gl_get_line() such that if any of the
          signals that it catches are blocked when
          gl_get_line() is called, they will be unblocked
          automatically during times when gl_get_line() is
          waiting for I/O. This can be done either
          on a per signal basis, by calling the
          gl_trap_signal() function, and specifying the
          GLS_UNBLOCK attribute of the signal, or globally by
          calling the gl_catch_blocked() function.


            void gl_catch_blocked(GetLine *gl);


          This function simply adds the GLS_UNBLOCK attribute
          to all of the signals that it is currently configured to
          trap.

       3. Just before calling gl_get_line(), block delivery
          of all of the signals that gl_get_line() is
          configured to trap. This can be done using the POSIX
          sigprocmask() function in conjunction with the
          gl_list_signals() function.


             int gl_list_signals(GetLine *gl, sigset_t *set);


          This function returns the set of signals that it is
          currently configured to catch in the set argument,
          which is in the form required by sigprocmask().

       4. In the example, one would now test the global flag that
          the signal handler sets, knowing that there is now no
          danger of this flag being set again until
          gl_get_line() unblocks its signals while performing
          I/O.

       5. Eventually gl_get_line() returns, either because
          a signal was caught, an error occurred, or the user
          finished entering their input line.

       6. Now one would check the global signal flag again, and if
          it is set, respond to it, and zero the flag.

       7. Use sigprocmask() to unblock the signals that were
          blocked in step 3.

       The same technique can be used around certain POSIX signal-aware  func-
       tions,  such  as  sigsetjmp()  and sigsuspend(), and in particular, the
       former of these two functions can be  used  in  conjunction  with  sig-
       longjmp() to implement race-condition free signal handling around other
       long-running system calls. The way to do this, is  explained  next,  by
       showing how gl_get_line() manages to reliably trap signals around calls
       to functions like read() and select() without race conditions.

       The first thing that gl_get_line() does, whenever it is called,  is  to
       use  the  POSIX  sigprocmask() function to block the delivery of all of
       the signals that it is currently configured to catch. This is redundant
       if  the  application  has already blocked them, but it does no harm. It
       undoes this step just before returning.

       Whenever gl_get_line() needs to call read() or  select()  to  wait  for
       input  from  the  user,  it first calls the POSIX sigsetjmp() function,
       being sure to specify a non-zero value for its savesigs argument.   The
       reason for the latter argument will become clear shortly.

       If sigsetjmp() returns zero, gl_get_line() then does the following.


       a. It uses the POSIX sigaction() function to register
          a temporary signal handler to all of the signals that it
          is configured to catch. This signal handler does two
          things.

          1. It records the number of the signal that was received
             in a file-scope variable.

          2. It then calls the POSIX siglongjmp()
             function using the buffer that was passed to
             sigsetjmp() for its first argument, and
             a non-zero value for its second argument.

          When this signal handler is registered, the sa_mask
          member of the struct sigaction act argument of the
          call to sigaction() is configured to contain all of
          the signals that gl_get_line() is catching. This
          ensures that only one signal will be caught at once by
          our signal handler, which in turn ensures that multiple
          instances of our signal handler don't tread on each
          other's toes.

       b. Now that the signal handler has been set up,
          gl_get_line() unblocks all of the signals that it
          is configured to catch.

       c. It then calls the read() or select() system
          calls to wait for keyboard input.

       d. If this system call returns (ie. no signal is received),
          gl_get_line() blocks delivery of the signals of
          interest again.

       e. It then reinstates the signal handlers that were
          displaced by the one that was just installed.


       Alternatively,  if sigsetjmp() returns non-zero, this means that one of
       the signals being trapped was caught while the above steps were execut-
       ing. When this happens, gl_get_line() does the following.

       First,  note  that  when  a  call to siglongjmp() causes sigsetjmp() to
       return, provided that the savesigs argument  of  sigsetjmp()  was  non-
       zero, as specified above, the signal process mask is restored to how it
       was when sigsetjmp() was  called.  This  is  the  important  difference
       between  sigsetjmp()  and  the  older  problematic setjmp(), and is the
       essential ingredient that makes it possible to  avoid  signal  handling
       race  conditions.   Because  of  this we are guaranteed that all of the
       signals that we blocked before calling sigsetjmp() are blocked again as
       soon  as any signal is caught. The following statements, which are then
       executed, are thus guaranteed to be executed without any  further  sig-
       nals being caught.

       1. If so instructed by the gl_get_line() configuration
          attributes of the signal that was caught,
          gl_get_line() restores the terminal attributes to
          the state that they had when gl_get_line() was
          called. This is particularly important for signals that
          suspend or terminate the process, since otherwise the
          terminal would be left in an unusable state.

       2. It then reinstates the application's signal handlers.

       3. Then it uses the C standard-library raise()
          function to re-send the application the signal that
          was caught.

       3. Next it unblocks delivery of the signal that we just
          sent. This results in the signal that was just sent
          via raise(), being caught by the application's
          original signal handler, which can now handle it as it
          sees fit.

       4. If the signal handler returns (ie. it doesn't terminate
          the process), gl_get_line() blocks delivery of the
          above signal again.

       5. It then undoes any actions performed in the first of the
          above steps, and redisplays the line, if the signal
          configuration calls for this.

       6. gl_get_line() then either resumes trying to
          read a character, or aborts, depending on the
          configuration of the signal that was caught.

       What  the above steps do in essence is to take asynchronously delivered
       signals and handle them synchronously, one at a time, at a point in the
       code where gl_get_line() has complete control over its environment.


THE TERMINAL SIZE

       On  most  systems  the combination of the TIOCGWINSZ ioctl and the SIG-
       WINCH signal is used to maintain an accurate idea of the terminal size.
       The  terminal  size  is  newly queried every time that gl_get_line() is
       called and whenever a SIGWINCH signal is received.

       On the few systems where this mechanism  isn't  available,  at  startup
       new_GetLine()  first  looks for the LINES and COLUMNS environment vari-
       ables.  If these aren't found, or they contain unusable values, then if
       a  terminal information database like terminfo or termcap is available,
       the default size of the terminal is looked up in this database. If this
       too fails to provide the terminal size, a default size of 80 columns by
       24 lines is used.

       Even on systems that do support ioctl(TIOCGWINSZ), if the  terminal  is
       on the other end of a serial line, the terminal driver generally has no
       way of detecting when a resize occurs or of querying what  the  current
       size  is.  In  such  cases  no SIGWINCH is sent to the process, and the
       dimensions returned by ioctl(TIOCGWINSZ) aren't correct. The  only  way
       to  handle  such  instances is to provide a way for the user to enter a
       command that tells the remote system what the new size is. This command
       would  then  call the gl_set_term_size() function to tell gl_get_line()
       about the change in size.


         int gl_set_term_size(GetLine *gl, int ncolumn, int nline);


       The ncolumn and nline arguments are used to specify the new  dimensions
       of  the  terminal, and must not be less than 1. On systems that do sup-
       port ioctl(TIOCGWINSZ), this function first calls ioctl(TIOCSWINSZ)  to
       tell  the  terminal  driver  about  the change in size. In non-blocking
       server-I/O mode, if a line is currently being input, the input line  is
       then redrawn to accomodate the changed size. Finally the new values are
       recorded in gl for future use by gl_get_line().

       The gl_terminal_size() function allows you to query the current size of
       the  terminal,  and  install an alternate fallback size for cases where
       the size isn't available.  Beware  that  the  terminal  size  won't  be
       available  if  reading from a pipe or a file, so the default values can
       be important even on systems that do support ways of  finding  out  the
       terminal size.

         typedef struct {
           int nline;        /* The terminal has nline lines */
           int ncolumn;      /* The terminal has ncolumn columns */
         } GlTerminalSize;

         GlTerminalSize gl_terminal_size(GetLine *gl,
                                         int def_ncolumn,
                                         int def_nline);

       This  function  first  updates gl_get_line()'s fallback terminal dimen-
       sions, then records its findings in the return value.

       The def_ncolumn and def_nline specify the default  number  of  terminal
       columns  and  lines to use if the terminal size can't be determined via
       ioctl(TIOCGWINSZ) or environment variables.


HIDING WHAT YOU TYPE

       When entering sensitive information, such as passwords, it is best  not
       to  have  the  text that you are entering echoed on the terminal.  Fur-
       thermore, such text should not be recorded in the history  list,  since
       somebody  finding  your  terminal  unattended  could then recall it, or
       somebody snooping through your directories could see it in your history
       file. With this in mind, the gl_echo_mode() function allows you to tog-
       gle on and off the display and archival of  any  text  that  is  subse-
       quently entered in calls to gl_get_line().


         int gl_echo_mode(GetLine *gl, int enable);


       The enable argument specifies whether entered text should be visible or
       not. If it is 0, then subsequently entered lines will not be visible on
       the terminal, and will not be recorded in the history list. If it is 1,
       then subsequent input lines will be displayed as they are entered,  and
       provided  that  history  hasn't  been  turned off via a call to gl_tog-
       gle_history(), then they will also be archived  in  the  history  list.
       Finally,  if  the  enable argument is -1, then the echoing mode is left
       unchanged, which allows you to non-destructively query the current set-
       ting  via the return value. In all cases, the return value of the func-
       tion is 0 if echoing was disabled before the function was called, and 1
       if it was enabled.

       When  echoing  is  turned  off,  note that although tab completion will
       invisibly complete your prefix as far as  possible,  ambiguous  comple-
       tions will not be displayed.


SINGLE CHARACTER QUERIES

       Using  gl_get_line() to query the user for a single character reply, is
       inconvenient for the user, since they must hit the enter or return  key
       before  the  character that they typed is returned to the program. Thus
       the gl_query_char() function has been  provided  for  single  character
       queries like this.


         int gl_query_char(GetLine *gl, const char *prompt,
                           char defchar);


       This function displays the specified prompt at the start of a new line,
       and waits for the user to type a character. When the user types a char-
       acter, gl_query_char() displays it to the right of the prompt, starts a
       newline, then returns the character to the calling program. The  return
       value  of the function is the character that was typed. If the read had
       to be aborted for some reason, EOF is returned instead. In  the  latter
       case, the application can call the previously documented gl_return_sta-
       tus(), to find out what went wrong. This could, for example, have  been
       the  reception of a signal, or the optional inactivity timer going off.

       If the user simply hits enter, the value of  the  defchar  argument  is
       substituted.  This  means  that  when  the  user hits either newline or
       return, the character specified in  defchar,  is  displayed  after  the
       prompt,  as  though the user had typed it, as well as being returned to
       the calling application. If such a replacement is not important, simply
       pass '0 as the value of defchar.

       If  the  entered character is an unprintable character, it is displayed
       symbolically. For example, control-A is displayed as ^A, and characters
       beyond 127 are displayed in octal, preceded by a backslash.

       As with gl_get_line(), echoing of the entered character can be disabled
       using the gl_echo_mode() function.

       If the calling process is suspended while waiting for the user to  type
       their  response,  the  cursor is moved to the line following the prompt
       line, then when the process resumes, the  prompt  is  redisplayed,  and
       gl_query_char() resumes waiting for the user to type a character.

       Note that in non-blocking server mode, (see gl_io_mode),
       if an incomplete input line is  in  the  process  of  being  read  when
       gl_query_char()  is  called,  the  partial input line is discarded, and
       erased from the terminal, before the new prompt is displayed. The  next
       call to gl_get_line() will thus start editing a new line.


READING RAW CHARACTERS

       Whereas  the  gl_query_char()  function  visibly prompts the user for a
       character, and displays what they typed,  the  gl_read_char()  function
       reads a signal character from the user, without writing anything to the
       terminal, or perturbing any incompletely entered input line. This means
       that it can be called not only from between calls to gl_get_line(), but
       also from callback functions that the application has registered to  be
       called by gl_get_line().


         int gl_read_char(GetLine *gl);


       On  success,  the  return value of gl_read_char() is the character that
       was read. On failure, EOF is returned, and the gl_return_status() func-
       tion  can  be called to find out what went wrong. Possibilities include
       the optional inactivity timer going off, the receipt of a  signal  that
       is configured to abort gl_get_line(), or terminal I/O blocking, when in
       non-blocking server-I/O mode.

       Beware that certain keyboard keys, such as function  keys,  and  cursor
       keys,  usually generate at least 3 characters each, so a single call to
       gl_read_char() won't be enough to identify such keystrokes.


CLEARING THE TERMINAL

       The calling program can clear the terminal by  calling  gl_erase_termi-
       nal(). In non-blocking server-I/O mode, this function also arranges for
       the current input line to be redrawn from scratch when gl_get_line() is
       next called.


         int gl_erase_terminal(GetLine *gl);



DISPLAYING TEXT DYNAMICALLY

       Between calls to gl_get_line(), the gl_display_text() function provides
       a convenient way to display  paragraphs  of  text,  left-justified  and
       split  over  one or more terminal lines according to the constraints of
       the current width of the terminal. Examples of the use of this function
       may  be  found in the demo programs, where it is used to display intro-
       ductions. In those examples the advanced use of optional prefixes, suf-
       fixes  and  filled  lines  to draw a box around the text is also illus-
       trated.


         int gl_display_text(GetLine *gl, int indentation,
                             const char *prefix,
                             const char *suffix, int fill_char,
                             int def_width, int start,
                             const char *string);

       If gl isn't currently connected to a terminal, for example if the  out-
       put of a program that uses gl_get_line() is being piped to another pro-
       gram or redirected to a file, then the value of the def_width parameter
       is used as the terminal width.

       The  indentation  argument specifies the number of characters to use to
       indent each line of ouput. The fill_char argument specifies the charac-
       ter that will be used to perform this indentation.

       The  prefix argument can either be NULL, or be a string to place at the
       beginning of each new line (after  any  indentation).   Similarly,  the
       suffix  argument can either be NULL, or be a string to place at the end
       of each line. The suffix is placed flush against the right edge of  the
       terminal,  and  any space between its first character and the last word
       on that line is filled with the character specified via  the  fill_char
       argument.  Normally the fill-character is a space.

       The  start  argument  tells  gl_display_text() how many characters have
       already been written to the current terminal line, and  thus  tells  it
       the  starting  column  index  of the cursor.  Since the return value of
       gl_display_text() is the ending column index of the cursor, by  passing
       the  return value of one call to the start argument of the next call, a
       paragraph that is broken between more than one string can  be  composed
       by  calling  gl_display_text() for each successive portion of the para-
       graph. Note that literal newline characters are necessary at the end of
       each paragraph to force a new line to be started.

       On error, gl_display_text() returns -1.


CALLBACK FUNCTION FACILITIES

       Unless  otherwise  stated,  callback  functions, such as tab completion
       callbacks and event callbacks should not call  any  functions  in  this
       module.  The following functions, however, are designed specifically to
       be used by callback functions.

       Calling  the  gl_replace_prompt()  function  from  a   callback   tells
       gl_get_line()  to display a different prompt when the callback returns.
       Except in non-blocking server mode, it has no effect  if  used  between
       calls   to   gl_get_line().   In  non-blocking  server  mode  (see  the
       gl_io_mode man page, when  used  between  two  calls  to
       gl_get_line()  that  are  operating on the same input line, the current
       input line will be re-drawn with the new prompt on the  following  call
       to gl_get_line().


         void gl_replace_prompt(GetLine *gl, const char *prompt);



INTERNATIONAL CHARACTER SETS

       Since  libtecla version 1.4.0, gl_get_line() has been 8-bit clean. This
       means that all 8-bit characters that are printable in the  user's  cur-
       rent  locale  are  now  displayed verbatim and included in the returned
       input line.  Assuming that the calling  program  correctly  contains  a
       call like the following,

         setlocale(LC_CTYPE, "");

       then  the  current locale is determined by the first of the environment
       variables LC_CTYPE, LC_ALL, and LANG, that is found to contain a  valid
       locale  name.  If  none  of these variables are defined, or the program
       neglects to call setlocale, then the default C locale is used, which is
       US  7-bit  ASCII.  On  most  unix-like platforms, you can get a list of
       valid locales by typing the command:

         locale -a

       at the shell prompt. Further documentation on how the user can make use
       of  this  to  enter  international  characters  can  be  found  in  the
       tecla man page.


THREAD SAFETY

       In a multi-threaded program, you should use the libtecla_r.a version of
       the  library.  This  uses reentrant versions of system functions, where
       available. Unfortunately neither terminfo nor termcap were designed  to
       be reentrant, so you can't safely use the functions of the getline mod-
       ule in multiple threads (you can use the  separate  file-expansion  and
       word-completion  modules in multiple threads, see the corresponding man
       pages for details). However due to the use of POSIX reentrant functions
       for looking up home directories etc, it is safe to use this module from
       a single thread of a multi-threaded program, provided that  your  other
       threads don't use any termcap or terminfo functions.


FILES

       libtecla.a      -    The tecla library
       libtecla.h      -    The tecla header file.
       ~/.teclarc      -    The personal tecla customization file.


SEE ALSO

       libtecla, gl_io_mode, tecla, ef_expand_file,
       cpl_complete_word, pca_lookup_file


AUTHOR

       Martin Shepherd  (mcs@astro.caltech.edu)



                                                    gl_get_line
genometools-1.5.1/src/external/libtecla-1.6.1/html/gl_io_mode.html000066400000000000000000000614751211610345200246410ustar00rootroot00000000000000 Manual Page
gl_io_mode                            gl_io_mode



NAME

        gl_io_mode, gl_raw_io, gl_normal_io, gl_tty_signals, gl_abandon_line,
        gl_handle_signal,  gl_pending_io  -  How  to use gl_get_line() from an
       external event loop.

SYNOPSIS

       #include <libtecla.h>

       int gl_io_mode(GetLine *gl, GlIOMode mode);

       int gl_raw_io(GetLine *gl);

       int gl_normal_io(GetLine *gl);

       int gl_tty_signals(void (*term_handler)(int),
                          void (*susp_handler)(int),
                          void (*cont_handler)(int),
                          void (*size_handler)(int));

       void gl_abandon_line(GetLine *gl);

       void gl_handle_signal(int signo, GetLine *gl, int ngl);

       GlPendingIO gl_pending_io(GetLine *gl);



DESCRIPTION

       The gl_get_line() function,  which  is  documented  separately  in  the
       gl_get_line  man page, supports two different I/O modes.
       These are selected by calling the gl_io_mode() function.


         int gl_io_mode(GetLine *gl, GlIOMode mode);


       The mode argument of this function specifies the new I/O mode, and must
       be one of the following.


         GL_NORMAL_MODE   -  Select the normal blocking-I/O mode.
                             In this mode gl_get_line()
                             doesn't return until either an error
                             occurs of the user finishes entering a
                             new line. This mode is the focus of
                             the gl_get_line man page.

         GL_SERVER_MODE   -  Select non-blocking server I/O mode.
                             In this mode, since non-blocking
                             terminal I/O is used, the entry of
                             each new input line typically requires
                             many calls to gl_get_line() from
                             an external I/O-driven event loop.
                             This mode is the focus of this man
                             page.


       Newly created GetLine objects start in normal I/O mode, so to switch to
       non-blocking server mode requires an initial call to gl_io_mode().


SERVER I/O MODE

       In non-blocking server I/O mode, the application is required to have an
       event  loop  which  calls  gl_get_line()  whenever  the  terminal  file
       descriptor can do the type I/O that gl_get_line() is  waiting  for.  To
       determine  which type of I/O gl_get_line() is waiting for, the applica-
       tion calls the gl_pending_io() function.


         GlPendingIO gl_pending_io(GetLine *gl);


       The return value of this function is one of the following  two  enumer-
       ated values.


         GLP_READ    -  gl_get_line() is waiting to write a
                        character to the terminal.

         GLP_WRITE   -  gl_get_line() is waiting to read a
                        character from the keyboad.


       If  the application is using either the select() or poll() system calls
       to watch for I/O on a group of file descriptors, then  it  should  call
       the gl_pending_io() function before each call to these functions to see
       which direction of I/O it should tell them to watch for, and  configure
       their  arguments  accordingly. In the case of the select() system call,
       this means using the FD_SET() macro to add the terminal file descriptor
       either to the set of file descriptors to be watched for readability, or
       the set to be watched for writability.

       As in normal I/O mode, the return value of gl_get_line()  is  either  a
       pointer  to a completed input line, or NULL. However, whereas in normal
       I/O mode a NULL return value always means that an  error  occurred,  in
       non-blocking  server  mode,  NULL  is  also returned when gl_get_line()
       can't read or write to the terminal  without  blocking.  Thus  in  non-
       blocking  server  mode,  in order to determine when a NULL return value
       signifies that an error occurred or not, it is necessary  to  call  the
       gl_return_status()  function.  If  this function returns the enumerated
       value, GLR_BLOCKED, as documented in the gl_get_line man
       page,  this  means  that gl_get_line() is waiting for I/O, and no error
       has occurred.

       When gl_get_line() returns NULL and gl_return_status()  indicates  that
       this  is  due  to  blocked  terminal  I/O,  the application should call
       gl_get_line() again when the type of I/O  reported  by  gl_pending_io()
       becomes  possible.  The  prompt,  start_line and start_pos arguments of
       gl_get_line() will be ignored on these calls.  If you  need  to  change
       the  prompt  of  the  line that is currently being edited, then you can
       call   the   gl_replace_prompt()   function    (documented    in    the
       gl_get_line man page) between calls to gl_get_line().


GIVING UP THE TERMINAL

       A  complication  that  is unique to non-blocking server mode is that it
       requires that the terminal  be  left  in  raw  mode  between  calls  to
       gl_get_line().  If  this  weren't  the  case,  the  external event loop
       wouldn't be able to detect individual key-presses, and the  basic  line
       editing implemented by the terminal driver would clash with the editing
       provided by gl_get_line(). What this means is that any  time  that  the
       terminal  needs  to  be used for other things than entering a new input
       line with gl_get_line(), it needs to be restored to a usable state.  In
       particular, whenever the process is suspended or terminated, the termi-
       nal must be returned to a  normal  state.  If  this  isn't  done,  then
       depending  on  the characteristics of the shell that was used to invoke
       the program, the user may end up with a hung terminal. To this end, the
       gl_normal_io()  function is provided for switching the terminal back to
       the state that it was in when raw mode was last established.


         int gl_normal_io(GetLine *gl);


       What this function does is first flush any pending output to the termi-
       nal,  then move the cursor to the start of the terminal line which fol-
       lows the end of the incompletely entered input line. At this  point  it
       is  safe  to  suspend  or terminate the process, and it is safe for the
       application to read and write to the terminal. To resume entry  of  the
       input line, the application should call the gl_raw_io() function.


         int gl_raw_io(GetLine *gl);


       This  function  starts  a  new line, redisplays the partially completed
       input line (if any), restores the cursor position within this  line  to
       where it was when gl_normal_io() was called, then switches back to raw,
       non-blocking terminal mode ready to continue entry of  the  input  line
       when gl_get_line() is next called.

       Note that in non-blocking server mode, if gl_get_line() is called after
       a call to gl_normal_io(), without an intervening call  to  gl_raw_io(),
       gl_get_line()  will  call  gl_raw_mode()  itself, and the terminal will
       remain in this mode when gl_get_line() returns.


SIGNAL HANDLING

       In the previous section it was pointed out that in non-blocking  server
       mode,  the  terminal must be restored to a sane state whenever a signal
       is received that either suspends or terminates the process.  In  normal
       I/O  mode,  this  is done for you by gl_get_line(), but in non-blocking
       server mode, since the terminal is left in raw mode  between  calls  to
       gl_get_line(),  this signal handling has to be done by the application.
       Since there are many signals that can suspend or terminate  a  process,
       as  well  as other signals that are important to gl_get_line(), such as
       the SIGWINCH signal, which tells it when the terminal size has changed,
       the  gl_tty_signals()  function  is provided for installing signal han-
       dlers for all pertinent signals.


         int gl_tty_signals(void (*term_handler)(int),
                            void (*susp_handler)(int),
                            void (*cont_handler)(int),
                            void (*size_handler)(int));


       What this does is use  gl_get_line()'s  internal  list  of  signals  to
       assign specified signal handlers to groups of signals. The arguments of
       this function are as follows.


         term_handler  -  This is the signal handler that is to be
                          used to trap signals that by default
                          terminate any process that receives
                          them (eg. SIGINT or SIGTERM).

         susp_handler  -  This is the signal handler that is to be
                          used to trap signals that by default
                          suspend any process that receives them,
                          (eg. SIGTSTP or SIGTTOU).

         cont_handler  -  This is the signal handler that is to be
                          used to trap signals that are usually
                          sent when a process resumes after being
                          suspended (usually SIGCONT). Beware that there is
                          nothing to stop a user from sending one of these
                          signals at other times.

         size_handler  -  This signal handler is used to trap
                          signals that are sent to processes when
                          their controlling terminals are resized
                          by the user (eg. SIGWINCH).


       These arguments can all be the same, if so desired, and you can specify
       SIG_IGN  (ignore  this  signal)  or  SIG_DFL  (use  the system-provided
       default signal handler) instead of a function where pertinent. In  par-
       ticular, it is rarely useful to trap SIGCONT, so the cont_handler argu-
       ment will usually be SIG_DFL or SIG_IGN.

       The gl_tty_signals() function uses the POSIX  sigaction()  function  to
       install  these  signal  handlers,  and it is careful to use the sa_mask
       member of each sigaction structure to ensure that  only  one  of  these
       signals  is  ever  delivered  at  a time. This guards against different
       instances of these signal handlers from simultaneously trying to  write
       to common global data, such as a shared sigsetjmp() buffer or a signal-
       received flag.

       The signal handlers that are installed by this  function,  should  call
       the gl_handle_signal().


         void gl_handle_signal(int signo, GetLine *gl, int ngl);


       The  signo  argument tells this function which signal it is being asked
       to respond to, and the gl argument should be a  pointer  to  the  first
       element  of  an  array of ngl GetLine objects. If your application only
       has one of these objects, just pass its pointer as the gl argument  and
       specify ngl as 1.

       Depending  on the signal that is being handled, this function does dif-
       ferent things.


   Terminal resize signals (SIGWINCH)
       If the signal indicates that the terminal was resized, then it arranges
       for the next call to gl_get_line() to ask the terminal for its new size
       and redraw the input line accordingly. In order that  gl_get_line()  be
       called as soon as possible to do this, gl_handle_signal() also arranges
       that the next call to gl_pending_io() will return  GLP_WRITE.  Thus  if
       the  application waits for I/O in select() or poll(), then the applica-
       tion needs to ensure that these functions will be reliably aborted when
       a  signal is caught and handled by the application. More on this below.


Process termination signals.

       If the signal that was caught is one of those that  by  default  termi-
       nates  any  process  that receives it, then gl_handle_signal() does the
       following steps.

       1. First it blocks the delivery of all signals that can be
          blocked (ie. SIGKILL and SIGSTOP can't be blocked)

       2. Next it calls gl_normal_io() for each of the ngl
          GetLine objects. Note that this does nothing to any of the
          GetLine objects that aren't currently in raw mode.

       3. Next it sets the signal handler of the signal to its default,
          process-termination disposition.

       4. Next it re-sends the process the signal that was caught.

       5. Finally it unblocks delivery of this signal, which
          results in the process being terminated.


Process suspension signals.

       If the default disposition of the signal is to suspend the process, the
       same steps are executed as for process termination signals, except that
       when the process is later resumed,  gl_handle_signal()  continues,  and
       does the following steps.

       6. It re-blocks delivery of the signal.

       7. It reinstates the signal handler of the signal to the one
          that was displaced when its default disposition was substituted.

       8. For any of the GetLine objects that were in raw mode when
          gl_handle_signal() was called, gl_handle_signal() then
          calls gl_raw_io(), to resume entry of the input lines on
          those terminals.

       9. Finally, it restores the signal process mask to how it
          was when gl_handle_signal() was called.

       Note  that  the  process  is suspended or terminated using the original
       signal that was caught, rather than using the uncatchable  SIGSTOP  and
       SIGKILL signals. This is important, because when a process is suspended
       or terminated, the parent of the process may wish  to  use  the  status
       value returned by the wait() system call to figure out which signal was
       responsible. In particular, most shells use this information to print a
       corresponding  message to the terminal. Users would be rightly confused
       if when their process received a SIGPIPE signal, the program  responded
       by  sending itself a SIGKILL signal, and the shell then printed out the
       provocative statement, "Killed!".


INTERRUPTING THE EVENT LOOP

       If a signal is caught and handled when the application's event loop  is
       waiting  in  select()  or  poll(), these functions will be aborted with
       errno set to EINTR. When  this  happens  the  event  loop  should  call
       gl_pending_io(),  before  calling  select()  or poll() again. It should
       then arrange for select() or poll() to wait for the type  of  I/O  that
       this reports. This is necessary, because any signal handler which calls
       gl_handle_signal(),  will  frequently  change  the  type  of  I/O  that
       gl_get_line() is waiting for.

       Unfortunately, if a signal arrives between the statements which config-
       ure the arguments of select() or poll() and the calls  to  these  func-
       tions,  then the signal will not be seen by these functions, which will
       then not be aborted. If these functions are waiting for keyboard  input
       from  the  user  when  the  signal  is received, and the signal handler
       arranges to redraw the input line to accomodate a  terminal  resize  or
       the resumption of the process, then this redisplay will be end up being
       delayed until the user hits the next key. Apart from puzzling the user,
       this  clearly  isn't  a serious problem. However there is a way, albeit
       complicated, to completely avoid this  race  condition.  The  following
       steps illustrate this.

       1. Block all of the signals that gl_get_line() catches,
          by passing the signal set returned by gl_list_signals() to
          sigprocmask().

       2. Call gl_pending_io() and set up the arguments of
          select() or poll() accordingly.

       3. Call sigsetjmp() with a non-zero savesigs argument.

       4. Initially this sigsetjmp() statement will return zero,
          indicating that control isn't resuming there after a matching
          call to siglongjmp().

       5. Replace all of the handlers of the signals that gl_get_line()
          is configured to catch, with a signal handler that first records
          the number of the signal that was caught, in a file-scope variable,
          then calls siglongjmp() with a non-zero value argument, to
          return execution to the above sigsetjmp()
          statement.  Registering these signal handlers can conveniently be
          done using the gl_tty_signals() function.

       6. Set the file-scope variable that the above signal handler uses to
          record any signal that is caught to -1, so that we can check
          whether a signal was caught by seeing if it contains a valid signal
          number.

       7. Now unblock the signals that were blocked in step 1. Any signal
          that was received by the process in between step 1 and now will
          now be delivered, and trigger our signal handler, as will any
          signal that is received until we block these signals again.

       8. Now call select() or poll().

       9. When select() returns, again block the signals that were
          unblocked in step 7.

       If a signal is arrived any time during the above steps, our signal han-
       dler will be triggered and cause control to return to  the  sigsetjmp()
       statement,  where this time, sigsetjmp() will return non-zero, indicat-
       ing that a signal was caught. When this  happens  we  simply  skip  the
       above  block of statements, and continue with the following statements,
       which are executed regardless of whether or not  a  signal  is  caught.
       Note  that when sigsetjmp() returns, regardless of why it returned, the
       process signal mask is returned to how  it  was  when  sigsetjmp()  was
       called.  Thus  the following statements are always executed with all of
       our signals blocked.

       9. Reinstate the signal handlers that were displaced in step 5.

       10. Check wether a signal was caught, by checking the file-scope
           variable that the signal handler records signal numbers in.

       11. If a signal was caught, send this signal to the application
           again, and unblock just this signal, so that it invokes the
           signal handler which we just reinstated in step 10.

       12. Unblock all of the signals that were blocked in step 7.

       Since this is complicated, note that demo3.c includes a working example
       of  how to do this. The method used there however, is more general than
       the above. What it provides is a wrapper function around select() which
       encompasses   steps   3  to  11.  In  this  wrapper,  rather  than  use
       gl_list_signals()  to  figure  out  the  signals  to  block,  and   and
       gl_tty_signals() to assign and revert signal handlers, one of its argu-
       ments is a sigset_t which specifies which signals to block  and  assign
       signal  handlers to. This function thus doesn't depend on gl_get_line()
       and can thus be used in other situations where race-condition-free sig-
       nal handling is required.


SIGNALS CAUGHT BY GL_GET_LINE

       Since  the  application  is  expected to handle signals in non-blocking
       server mode, gl_get_line() doesn't attempt to duplicate this when it is
       being  called.  If one of the signals that it is configured to catch is
       sent  to  the  application  while  gl_get_line()   is   being   called,
       gl_get_line() reinstates the caller's signal handlers, then just before
       returning, re-sends the signal to the process to let the  application's
       signal  handler handle it. If the process isn't terminated by this sig-
       nal, gl_get_line() returns NULL, and a following call to gl_return_sta-
       tus() returns the enumerated value GLR_SIGNAL.


ABORTING LINE INPUT

       Often,  rather  than  letting  it  terminate  the process, applications
       respond to the SIGINT user-interrupt signal  by  aborting  the  current
       input  line.  The  way to do this in non-blocking server-I/O mode is to
       not call gl_handle_signal() when this signal is caught, but instead  to
       call the gl_abandon_line().


         void gl_abandon_line(GetLine *gl);


       This function arranges that when gl_get_line() is next called, it first
       flushes any pending output to the terminal, then discardes the  current
       input  line,  outputs a new prompt on the next line, and finally starts
       accepting input of a new input line from the user.


SIGNAL SAFE FUNCTIONS

       Provided that certain rules are followed, the following  functions  can
       have  been  written  to  be safely callable from signal handlers. Other
       functions in this library should not be called from signal handlers.


         gl_normal_io()
         gl_raw_io()
         gl_handle_signal()
         gl_abandon_line()


       In order for this to be true, all signal handlers that call these func-
       tions  must  be  registered in such a way that only one instance of any
       one of them can be running at one time. The way to do this  is  to  use
       the  POSIX  sigaction()  function  to register all signal handlers, and
       when doing this, use the sa_mask member of the corresponding  sigaction
       structure,  to  indicate  that all of the signals who's handlers invoke
       the above functions, should be blocked when the current signal is being
       handled.  This prevents two signal handlers from operating on a GetLine
       object at the same time.

       To prevent signal  handlers  from  accessing  a  GetLine  object  while
       gl_get_line()  or  any of its associated public functions are operating
       on it, all public functions associated  with  gl_get_line(),  including
       gl_get_line()  itself,  temporarily  block the delivery of signals when
       they are accessing GetLine objects. Beware that the only  signals  that
       they  block  are the signals that gl_get_line() is currently configured
       to catch, so be sure that if you call any of the above  functions  from
       signal  handlers,  that the signals that these handlers are assigned to
       are configured to be caught by gl_get_line() (see gl_trap_signal()).


USING TIMEOUTS TO POLL

       If instead of using select() or poll() to wait for I/O,  your  applica-
       tion  just needs to get out of gl_get_line() periodically to briefly do
       something else before returning to accept input from the user, this can
       be  done  in  non-blocking server mode by using the gl_inactivity_time-
       out() function (see  gl_get_line),  to  specify  that  a
       callback  function that returns GLTO_CONTINUE should be called whenever
       gl_get_line() has been waiting for I/O for more than a specified amount
       of time.

       When  this callback is triggered, gl_get_line() will return NULL, and a
       following call to gl_return_status() will return GLR_BLOCKED.

       Beware that gl_get_line() won't return until the user  hasn't  typed  a
       key  for  the  specified  interval, so if the interval is long, and the
       user keeps typing, gl_get_line() may not return for a while.  In  other
       words  there is no guarantee that it will return in the time specified.


THE SERVER DEMO PROGRAM

       The demo3 program that is distributed  with  the  library,  provides  a
       working  example  of  how to use non-blocking server I/O mode in a real
       program. As far  as  the  user  is  concerned,  this  program  operates
       identically to the main demo program (called demo), except that whereas
       the main demo program uses the normal blocking I/O  mode,  demo3  using
       non-blocking  I/O  and  an  external event loop. The source code can be
       found in demo3.c, and the comments therein explain the various steps.


FILES

       libtecla.a      -    The tecla library
       libtecla.h      -    The tecla header file.


SEE ALSO

       libtecla, gl_get_line, tecla, ef_expand_file,
       cpl_complete_word, pca_lookup_file


AUTHOR

       Martin Shepherd  (mcs@astro.caltech.edu)



                                                     gl_io_mode
genometools-1.5.1/src/external/libtecla-1.6.1/html/index.html000066400000000000000000000113011211610345200236320ustar00rootroot00000000000000The tecla command-line editing library.

The Tecla command-line editing library.

The tecla library provides UNIX and LINUX programs with interactive command line editing facilities, similar to those of the UNIX tcsh shell. In addition to simple command-line editing, it supports recall of previously entered command lines, TAB completion of file names or other tokens, and in-line wild-card expansion of filenames. The internal functions which perform file-name completion and wild-card expansion are also available externally for optional use by programs.

In addition, the library includes a path-searching module. This allows an application to provide completion and lookup of files located in UNIX style paths. Although not built into the line editor by default, it can easily be called from custom tab-completion callback functions. This was originally conceived for completing the names of executables and providing a way to look up their locations in the user's PATH environment variable, but it can easily be asked to look up and complete other types of files in any list of directories.

Note that special care has been taken to allow the use of this library in threaded programs. The option to enable this is discussed in the Makefile, and specific discussions of thread safety are presented in the included man pages.

The current version is version 1.6.1. This may be obtained from:

http://www.astro.caltech.edu/~mcs/tecla/libtecla-1.6.1.tar.gz

For the sake of automated scripts, the following URL always points to the latest version. Note that the version number can be found in the README file.

http://www.astro.caltech.edu/~mcs/tecla/libtecla.tar.gz

The library is distributed under a permissive non-copyleft free software license (the X11 license with the name of the copyright holder changed). This is compatible with, but not as restrictive as the GNU GPL.

Release notes

The list of major changes that accompany each new release can be found here.

Modifications

The gory details of changes in the latest and previous versions of the library can be found here.

Library documentation

The following are html versions of the libtecla man pages:
  • tecla - Documentation for users of programs which use gl_get_line().
  • libtecla - A programmers introduction to the tecla library.
  • gl_get_line - The interactive line-input function.
  • gl_io_mode - Using gl_get_line() in a non-blocking fashion.
  • cpl_complete_word - The word (eg. filename) completion function.
  • ef_expand_file - The filename expansion function.
  • pca_lookup_file - A directory-list based filename lookup and completion module.
  • enhance - A program that adds command-line editing to third party programs.

Portability

In principle, the standard version of the library should compile without any problems on any UNIX or UNIX like system. So far it has been reported to work on the following systems:
  Sun Solaris 2.5,2.6,7,8,9 with any of gcc, Sun C, or g++.
  Mandrake Linux 7.1 etc.., gcc
  Red Hat Linux 7 etc.., gcc
  Fedora Core 1, gcc
  Suse Linux 6.4, gcc
  IBM AIX 4.3.3, gcc
  HP-UX 10.20, HP-UX 11, gcc, c89
  FreeBSD, gcc
  Alpha OSF1, cc, gcc
  Mac OS X
  Cygwin (running under Windows)
  QNX
  NetBSD 1.6, 386, gcc
  SGI IRIX 6.5
There haven't been many reports concerning the POSIX reentrant version, so the absence of any of the above from the following list of systems on which the reentrant version is known to work, shouldn't be taken as an indication that the reentrant version doesn't work.
  Sun Solaris 2.5,2.6,7,8,9 with any of gcc, Sun C, or g++.
  Mandrake Linux, gcc
  RedHat Linux, gcc
  Fedora Core, gcc
  SuSE Linux, gcc
  HP-UX 11, gcc
  IBM AIX 4.3.3, gcc
  Alpha OSF1, cc
  SGI IRIX 6.5
The only system that is known to have issues with the reentrant version of the library is SCO UnixWare 7.1.1. The problem is in the system provided signal.h, which breaks when POSIX_C_SOURCE is defined. It has been reported that this can be "fixed" by editing signal.h.

If you compile the library on a system that isn't mentioned above, please send E-mail to mcs@astro.caltech.edu.


Martin Shepherd (31-Oct-2004) genometools-1.5.1/src/external/libtecla-1.6.1/html/libtecla.html000066400000000000000000000144211211610345200243100ustar00rootroot00000000000000 Manual Page
libtecla                                libtecla



NAME

       libtecla - An interactive command-line input library.

SYNOPSIS

       @CC@ ... -ltecla -lcurses


DESCRIPTION

       The tecla library provides programs with interactive command line edit-
       ing facilities, similar to those of the unix tcsh shell. In addition to
       simple  command-line  editing, it supports recall of previously entered
       command lines, TAB completion of file names or other  tokens,  and  in-
       line  wild-card  expansion  of  filenames. The internal functions which
       perform file-name completion and wild-card expansion are also available
       externally for optional use by the calling program.

       The  various  parts  of the library are documented in the following man
       pages:

         tecla              -  Use level documentation of the
                               command-line editing facilities
                               provided by gl_get_line().
         gl_get_line        -  The interactive line-input module.
         gl_io_mode         -  How to use gl_get_line() in an
                               incremental, non-blocking fashion.
         cpl_complete_word  -  The word completion module.
         ef_expand_file     -  The filename expansion module.
         pca_lookup_file    -  A directory-list based filename
                               lookup and completion module.

       In addition there is one  optional  application  distributed  with  the
       library:

         enhance            -  Add command-line editing to third
                                  party applications.


THREAD SAFETY

       If  the  library  is compiled with -D_POSIX_C_SOURCE=199506L, reentrant
       versions of as many functions as possible are used. This includes using
       getpwuid_r() and getpwnam_r() instead of getpwuid() and getpwnam() when
       looking up the home directories of specific users in the password  file
       (for  ~user/ expansion), and readdir_r() instead of readdir() for read-
       ing directory entries when doing  filename  completion.  The  reentrant
       version of the library is usually called libtecla_r.a instead of libte-
       cla.a, so if only the latter is available, it probably isn't  the  cor-
       rect version to link with threaded programs.

       Reentrant  functions  for  iterating  through  the password file aren't
       available, so when the library is compiled to be reentrant, TAB comple-
       tion  of  incomplete  usernames  in ~username/ expressions is disabled.
       This doesn't disable expansion of complete ~username expressions, which
       can  be  done  reentrantly, or expansion of the parts of filenames that
       follow them, so this doesn't remove much functionality.

       The terminfo functions setupterm(), tigetstr(), tigetnum() and  tputs()
       also aren't reentrant, but very few programs will want to interact with
       multiple terminals, so this shouldn't prevent this library  from  being
       used in threaded programs.


LIBRARY VERSION NUMBER

       The  version  number  of the library can be queried using the following
       function.

        void libtecla_version(int *major, int *minor, int *micro);


       On return, this function records the three components of  the  libtecla
       version  number  in  *major,  *minor, *micro. The formal meaning of the
       three components is as follows.


        major - Incrementing this number implies that a change has
                been made to the library's public interface, which
                makes it binary incompatible  with programs that
                were linked with previous shared versions of the
                tecla library.

        minor - This number is incremented by one whenever
                additional functionality, such as new functions or
                modules, are added to the library.

        micro - This is incremented whenever modifications to the
                library are made which make no changes to the
                public interface, but which fix bugs and/or improve
                the behind-the-scenes implementation.



TRIVIA

       In Spanish, a "tecla" is the key of a keyboard. Since this library cen-
       ters  on  keyboard  input,  and  given that I wrote much of the library
       while working in Chile, this seemed like a suitable name.


FILES

       libtecla.a    -   The tecla library.
       libtecla.h    -   The tecla header file.
       ~/.teclarc    -   The tecla personal customization file.


SEE ALSO

       gl_get_line, tecla, gl_io_mode, ef_expand_file,
       cpl_complete_word, pca_lookup_file, enhance


AUTHOR

       Martin Shepherd  (mcs@astro.caltech.edu)


ACKNOWLEDGMENTS

       Markus Gyger  - Lots of assistance, including help with
                       shared libraries, configuration information,
                       particularly for Solaris; modifications to
                       support C++ compilers, improvements for ksh
                       users, faster cursor motion, output
                       buffering, and changes to make gl_get_line()
                       8-bit clean.
       Mike MacFaden - Suggestions, feedback and testing that led
                       to many of the major new functions that were
                       added in version 1.4.0.
       Tim Eliseo    - Many vi-mode bindings and fixes.



                                                       libtecla
genometools-1.5.1/src/external/libtecla-1.6.1/html/pca_lookup_file.html000066400000000000000000000341341211610345200256670ustar00rootroot00000000000000 Manual Page
pca_lookup_file                  pca_lookup_file



NAME

       pca_lookup_file,    del_PathCache,    del_PcaPathConf,   new_PathCache,
       new_PcaPathConf, pca_last_error,  pca_path_completions,  pca_scan_path,
       pca_set_check_fn,  ppc_file_start,  ppc_literal_escapes - lookup a file
       in a list of directories

SYNOPSIS

       #include <libtecla.h>

       PathCache *new_PathCache(void);

       PathCache *del_PathCache(PathCache *pc);

       int pca_scan_path(PathCache *pc, const char *path);

       void pca_set_check_fn(PathCache *pc, CplCheckFn *check_fn,
                             void *data);

       char *pca_lookup_file(PathCache *pc, const char *name,
                             int name_len, int literal);

       const char *pca_last_error(PathCache *pc);

       CPL_MATCH_FN(pca_path_completions);



DESCRIPTION

       The PathCache object is part of  the  tecla  library  (see  the  libte-
       cla(@LIBR_MANEXT@) man page).

       PathCache objects allow an application to search for files in any colon
       separated list of directories, such as the unix execution PATH environ-
       ment  variable. Files in absolute directories are cached in a PathCache
       object, whereas relative directories are scanned  as  needed.  Using  a
       PathCache  object,  you can look up the full pathname of a simple file-
       name, or you can obtain a list of the possible completions of  a  given
       filename  prefix.  By  default all files in the list of directories are
       targets for lookup and completion, but a versatile  mechanism  is  pro-
       vided  for only selecting specific types of files. The obvious applica-
       tion of this facility is to provide Tab-completion and lookup  of  exe-
       cutable  commands  in  the  unix  PATH,  so  an optional callback which
       rejects all but executable files, is provided.


AN EXAMPLE

       Under UNIX, the following example program looks  up  and  displays  the
       full pathnames of each of the command names on the command line.

         #include <stdio.h>
         #include <stdlib.h>
         #include <libtecla.h>

         int main(int argc, char *argv[])
         {
           int i;
         /*
          * Create a cache for executable files.
          */
           PathCache *pc = new_PathCache();
           if(!pc)
             exit(1);
         /*
          * Scan the user's PATH for executables.
          */
           if(pca_scan_path(pc, getenv("PATH"))) {
             fprintf(stderr, "%s\n", pca_last_error(pc));
             exit(1);
           }
         /*
          * Arrange to only report executable files.
          */
          pca_set_check_fn(pc, cpl_check_exe, NULL);
         /*
          * Lookup and display the full pathname of each of the
          * commands listed on the command line.
          */
           for(i=1; i<argc; i++) {
             char *cmd = pca_lookup_file(pc, argv[i], -1, 0);
             printf("The full pathname of '%s' is %s\n", argv[i],
                    cmd ? cmd : "unknown");
           }
           pc = del_PathCache(pc);  /* Clean up */
           return 0;
         }

       The following is an example of what this does on my laptop under linux:

         $ ./example less more blob
         The full pathname of 'less' is /usr/bin/less
         The full pathname of 'more' is /bin/more
         The full pathname of 'blob' is unknown
         $


FUNCTION DESCRIPTIONS

       In order to use the facilities of this module, you must first  allocate
       a PathCache object by calling the new_PathCache() constructor function.

         PathCache *new_PathCache(void)

       This function creates the resources needed to cache and lookup files in
       a list of directories. It returns NULL on error.


POPULATING THE CACHE

       Once you have created a cache, it needs to be populated with files.  To
       do this, call the pca_scan_path() function.

         int pca_scan_path(PathCache *pc, const char *path);

       Whenever this function is called, it discards the current  contents  of
       the  cache,  then  scans  the list of directories specified in its path
       argument for files. The path argument must be  a  string  containing  a
       colon-separated       list       of      directories,      such      as
       "/usr/bin:/home/mcs/bin:.". This can include directories  specified  by
       absolute pathnames such as "/usr/bin", as well as sub-directories spec-
       ified by relative pathnames such as "." or "bin". Files in the absolute
       directories  are  immediately cached in the specified PathCache object,
       whereas sub-directories, whose identities obviously change whenever the
       current  working  directory is changed, are marked to be scanned on the
       fly whenever a file is looked up.

       On success this function return  0.  On  error  it  returns  1,  and  a
       description of the error can be obtained by calling pca_last_error(pc).


LOOKING UP FILES

       Once the cache has been populated with files, you can look up the  full
       pathname   of   a   file,   simply   by   specifying  its  filename  to
       pca_lookup_file().

         char *pca_lookup_file(PathCache *pc, const char *name,
                               int name_len, int literal);

       To make it possible to pass this function a filename which is  actually
       part  of  a longer string, the name_len argument can be used to specify
       the length of the filename at the start of the name[] argument. If  you
       pass  -1  for  this length, the length of the string will be determined
       with strlen(). If the name[]  string  might  contain  backslashes  that
       escape  the  special  meanings  of spaces and tabs within the filename,
       give the literal argument,  the  value  0.  Otherwise,  if  backslashes
       should  be  treated  as  normal characters, pass 1 for the value of the
       literal argument.


FILENAME COMPLETION

       Looking up the potential completions of a filename-prefix in the  file-
       name  cache, is achieved by passing the provided pca_path_completions()
       callback function to the cpl_complete_word() function (see the cpl_com-
       plete_word(@FUNC_MANEXT@) man page).

         CPL_MATCH_FN(pca_path_completions);

       This  callback  requires that its data argument be a pointer to a PcaP-
       athConf object. Configuration objects of this  type  are  allocated  by
       calling new_PcaPathConf().

         PcaPathConf *new_PcaPathConf(PathCache *pc);

       This  function returns an object initialized with default configuration
       parameters, which determine  how  the  cpl_path_completions()  callback
       function  behaves. The functions which allow you to individually change
       these parameters are discussed below.

       By default, the pca_path_completions() callback function searches back-
       wards  for  the  start of the filename being completed, looking for the
       first un-escaped space or the start of the input line. If you  wish  to
       specify  a  different location, call ppc_file_start() with the index at
       which the filename starts in the input line. Passing start_index=-1 re-
       enables the default behavior.

         void ppc_file_start(PcaPathConf *ppc, int start_index);

       By  default,  when  pca_path_completions()  looks  at a filename in the
       input line, each lone backslash in the input  line  is  interpreted  as
       being a special character which removes any special significance of the
       character which follows it, such as a space which should  be  taken  as
       part  of the filename rather than delimiting the start of the filename.
       These backslashes are thus ignored while looking for  completions,  and
       subsequently  added  before spaces, tabs and literal backslashes in the
       list of completions. To have unescaped backslashes  treated  as  normal
       characters,  call  ppc_literal_escapes()  with  a non-zero value in its
       literal argument.

         void ppc_literal_escapes(PcaPathConf *ppc, int literal);

       When you have finished with a PcaPathConf variable, you can pass it  to
       the del_PcaPathConf() destructor function to reclaim its memory.

         PcaPathConf *del_PcaPathConf(PcaPathConf *ppc);



BEING SELECTIVE

       If  you  are  only  interested  in certain types or files, such as, for
       example, executable files, or files whose names  end  in  a  particular
       suffix, you can arrange for the file completion and lookup functions to
       be selective in the filenames that they return.  This is done by regis-
       tering  a  callback  function  with  your PathCache object. Thereafter,
       whenever a filename is found which  either  matches  a  filename  being
       looked  up, or matches a prefix which is being completed, your callback
       function will be called with the full pathname of the  file,  plus  any
       application-specific data that you provide, and if the callback returns
       1 the filename will be reported as a match, and if  it  returns  0,  it
       will  be  ignored.   Suitable  callback  functions and their prototypes
       should be declared with the following macro. The CplCheckFn typedef  is
       also provided in case you wish to declare pointers to such functions.

         #define CPL_CHECK_FN(fn) int (fn)(void *data, \
                                           const char *pathname)
         typedef CPL_CHECK_FN(CplCheckFn);

       Registering    one    of   these   functions   involves   calling   the
       pca_set_check_fn() function. In  addition  to  the  callback  function,
       passed  via  the  check_fn argument, you can pass a pointer to anything
       via the data argument. This pointer will be passed on to your  callback
       function,  via  its  own  data argument, whenever it is called, so this
       provides a way to pass appplication specific data to your callback.

         void pca_set_check_fn(PathCache *pc, CplCheckFn *check_fn,
                               void *data);

       Note that these callbacks are passed the full pathname of each matching
       file,  so the decision about whether a file is of interest can be based
       on any property of the file, not just its filename. As an example,  the
       provided cpl_check_exe() callback function looks at the executable per-
       missions of the file and the permissions of its parent directories, and
       only  returns  1  if  the user has execute permission to the file. This
       callback function can thus be used to lookup or complete command  names
       found  in  the  directories listed in the user's PATH environment vari-
       able. The example program given earlier in this  man  page  provides  a
       demonstration of this.

       Beware  that  if somebody tries to complete an empty string, your call-
       back will get called once for every file in the cache, which could num-
       ber  in  the  thousands. If your callback does anything time consuming,
       this could result in an unacceptable delay for the user,  so  callbacks
       should be kept short.

       To  improve performance, whenever one of these callbacks is called, the
       choice that it makes is cached, and the  next  time  the  corresponding
       file  is  looked  up, instead of calling the callback again, the cached
       record of whether it was accepted or rejected is used. Thus if somebody
       tries  to  complete  an  empty  string, and hits tab a second time when
       nothing appears to happen, there will only be one long delay, since the
       second  pass  will operate entirely from the cached dispositions of the
       files. These cached dipositions are discarded whenever  pca_scan_path()
       is called, and whenever pca_set_check_fn() is called with changed call-
       back function or data arguments.


ERROR HANDLING

       If pca_scan_path() reports that an error occurred by returning  1,  you
       can   obtain   a   terse   description   of   the   error   by  calling
       pca_last_error(pc). This returns an internal string containing an error
       message.

         const char *pca_last_error(PathCache *pc);



CLEANING UP

       Once  you  have  finished using a PathCache object, you can reclaim its
       resources by passing it to  the  del_PathCache()  destructor  function.
       This  takes a pointer to one of these objects, and always returns NULL.

         PathCache *del_PathCache(PathCache *pc);


THREAD SAFETY

       In multi-threaded programs, you should use the libtecla_r.a version  of
       the library. This uses POSIX reentrant functions where available (hence
       the _r suffix), and disables features that rely on non-reentrant system
       functions.  In  the  case  of this module, the only disabled feature is
       username completion  in  ~username/  expressions,  in  cpl_path_comple-
       tions().

       Using  the  libtecla_r.a  version of the library, it is safe to use the
       facilities of this module  in  multiple  threads,  provided  that  each
       thread uses a separately allocated PathCache object. In other words, if
       two threads want to do path searching, they should each call  new_Path-
       Cache() to allocate their own caches.


FILES

       libtecla.a    -    The tecla library
       libtecla.h    -    The tecla header file.


SEE ALSO

       libtecla, gl_get_line, ef_expand_file,
       cpl_complete_word


AUTHOR

       Martin Shepherd  (mcs@astro.caltech.edu)



                                                pca_lookup_file
genometools-1.5.1/src/external/libtecla-1.6.1/html/release.html000066400000000000000000000703701211610345200241560ustar00rootroot00000000000000The tecla library release notes
This file lists major changes which accompany each new release.

Version 1.6.1:

  This is primarily a minor bug-fix release.

  One added feature is the ability to call gl_normal_io() from
  callbacks registered by gl_watch_fd() and
  gl_inactivity_timeout(). This allows these callbacks to cleanly
  suspend line editing before either reading from the terminal, or
  writing to the terminal; and then subsequently causes the input line
  to be automatically redisplayed, and line-editing to be resumed by
  gl_get_line(), as soon as the callback returns.

  Another minor change is that if the terminal type specified in the
  TERM environment variable is set to "dumb", gl_get_line() now treats
  the terminal as though it were a non-interactive stream, rather than
  treating it as a VT100-compatible terminal. This means that it
  doesn't either prompt for input, or perform any command-line
  editing, even when it really is interacting with a terminal. This is
  aimed at the rare situation where a third-pary program that connects
  to libtecla through an embedded pseudo-terminal, needs to be forced
  to behave as though it weren't talking to a terminal, in order that
  it be useable in non-interactive scripts.

  Note that in the previous release, the optional configuration
  function, gl_tty_signals(), was incorrectly swapping the suspend and
  terminal signal handlers before installing them.

  A configuration problem that prevented select() from being used
  under MacOS X, has been fixed.

  Although not documented in the man page, it was meant to be possible
  to take the input line that one call to gl_get_line() returned, and
  ask the next call to gl_get_line() to present it back to the user
  for re-editing, simply by passing the pointer returned by one call
  to gl_get_line() as the start_line argument of the next call to
  gl_get_line(). This feature unfortunately stopped working in 1.6.0,
  so this release restores it, and officially documents it in the man
  page documentation of gl_get_line().

  In the previous version of the library, calling gl_terminal_size()
  on a system without SIGWINCH support, would crash the
  application. This has been fixed.

  Libtecla now apparently compiles cleanly under IRIX.

Version 1.6.0:

  This release is primarily a bug-fix release. However there are also
  four new functions, so the minor version number has been
  incremented to reflect this.

  Two of the new functions are gl_automatic_history() and
  gl_append_history(). The former of these functions allows the
  application to tell gl_get_line() not to automatically archive
  entered lines in the history list. The second of these functions
  allows the application to explicitly append a line to the history
  list. Thus together, these two functions allow the calling
  application to take over control of what is placed in the history
  list.

  The third new function is gl_query_char(), which prompts the user
  for a single character reply, which the user can then type without
  having to hit return to enter it. Unless echoing is disabled, the
  character that is entered is then displayed after the prompt,
  and a newline is started.

  Finally, the 4th new function is gl_read_char(), which also reads
  a single character from the user, but doesn't prompt the user, write
  anything to the terminal, or disturb any partially entered input
  line. It is thus safe to call this function not only from between
  calls to gl_get_line(), but also from application callback
  functions, even if gl_normal_io() hasn't been called.

  When using the history-search-backwards or history-search-forwards
  actions, if the search prefix that the user typed, contains any of
  the *,? or [ globbing characters, it is now treated as a glob
  pattern to be matched against historical lines, instead of a simple
  prefix.

  I have added a --without-file-system option to the configure
  script. This is intended for use in embedded systems that either
  don't have filesystems, or where the file-system code in libtecla is
  seen as unwanted bloat. See the INSTALL document for details.

  Similarly, I also added a --without-file-actions option to the
  configure script. This allows the application author/installer to
  prevent users of gl_get_line() from accessing the filesystem with
  the builtin actions of gl_get_line(). It does this by removing a
  number of action functions, such as expand-filename, and list-glob,
  and by changing the default behavior of other actions, such as
  complete-word and list-or-eof, to show no completions.

  Now to the bugs that have been fixed. Version 1.5.0 had a lot of big
  internal changes, so there are a number of bugs that needed to be
  fixed.  There was a bug which caused a crash if gl_load_history()
  was called multiple times. There was another bug which caused a
  prompt not to be displayed on the next line after switching from
  reading input from a file to reading from the terminal. Also, in
  tecla configuration files, backslash escaped characters within
  key-binding key-sequences weren't being escaped. Thus ^\\ got
  interpretted as a control-\ followed by a \ character instead of as
  a control-\. There was a bug in the history recall mechanism which
  caused the search prefix to be forgotten in certain complicated
  usage scenarios. There was a minor memory leak in the
  gl_configure_getline() function. Finally, if gl_get_line() was
  aborted by a signal, or any other abnormal event, the value of errno
  which originally indicated what had happened, got zeroed by the
  code that restored the terminal to a usable state. Thus the
  application couldn't figure out what had caused the error, apart
  from by looking at gl_return_status(). All of these bugs have been
  fixed.

  In the Makefile, there were a number of places where install-sh was
  invoked without a path prefix. This has now been remedied.

  A fully functional workaround for a bug in Solaris' terminal I/O
  code has also been implemented. This bug, which only manifested
  itself in libtecla's uncommonly used non-blocking server I/O mode,
  caused characters entered while in normal I/O mode, between calls to
  gl_get_line() to be invisible to the next call to gl_get_line(),
  until the user typed at least one more key after raw terminal mode
  was restored.

  The Gnu autoconf config.guess and config.sub scripts have been
  updated to their latest versions. Apparently the old versions that I
  was previously using were too old to know about certain BSD ports.
  
Version 1.5.0:

  This release includes several major new features for those using
  gl_get_line(), shared library support in Darwin, better cross
  compilation support, and various minor bug fixes.

  The biggest new feature is the option of a non-blocking I/O mode, in
  which gl_get_line() can safely be called from an application's
  external event-loop to incrementally read input lines from the user.
  This feature is documented in the gl_io_mode(3) man page.

  In addition, there is now support for the definition of additional
  word-completion action functions, which can then be bound to
  different keys. See the documentation of the gl_completion_action()
  function in the gl_get_line(3) man page.

  Externally defined action functions can also be defined, although
  presently they don't have write access to the input line, so they
  are restricted to operations that display information text to the
  terminal, or modify the environment of the calling application in
  some way. See the documentation of the gl_register_action() function
  in the gl_get_line(3) man page.

  Some of the non-blocking I/O support functions can also be used for
  improved signal handling in the normal blocking mode. In particular,
  the gl_list_signals() and gl_catch_blocked() functions make it
  easier to write reliable signal handling around gl_get_line(). The
  new "RELIABLE SIGNAL HANDLING" section of the gl_get_line(3) man
  page is intended as an introduction to this subject.

  Programs can now clear the terminal between calls to gl_get_line(),
  by calling the new gl_erase_terminal() function.

  The gl_display_text() function, now used in the demos to display
  introductory banners, is provided for formatting text according to
  the width of the terminal.

  It is now possible to install inactivity timeout callbacks in
  gl_get_line(), using the new gl_inactivity_timeout() function.

  The new gl_set_term_size() function allows the application to
  explicitly set the terminal size, for cases, such as when one is
  using a terminal at the end of a serial lineq, where the terminal
  driver doesn't send the process a SIGWINCH when the terminal size
  changes.

  The new gl_bind_keyseq() function provides a convenient
  alternative to gl_configure_getline(), for binding or unbinding
  one key-sequence at a time.

  gl_get_line()s signal handling, file-descriptor event-handling,
  inactivity-timeout handling and server-mode non-blocking I/O
  features now not only work when input is coming from a terminal, but
  now also work when input is coming from non-interactive streams,
  such as files and pipes.

  The history implementation has been re-written to make it more
  efficient and easier to modify. The biggest user-level change is
  that when recalling history lines using a search prefix, the same
  line is no longer returned more than once in a row.  Previously this
  duplicate elimination only worked when one was recalling a line
  without specifying a search prefix, and this was naively performed
  by preventing neighboring duplicates from existing in the history
  list, rather than by skipping duplicates at search time.

  In previous versions of the library, when gl_get_line() and its
  associated public functions detected invalid arguments, or couldn't
  allocate memory, etc, error messages were written to stderr. This
  isn't appropriate for library functions, so instead of writing such
  messages to stderr, these messages are now recorded in buffers
  within the affected GetLine object. The latest error message can
  then subsequently be queried by calling gl_error_message(). The use
  of errno has also been expanded, and a new function called
  gl_return_status() has been provided to expand on the cause of the
  last return from gl_get_line().

  User level usage and configuration information has now been split
  out of the gl_get_line(3) man page into a separate tecla(7) man
  page. The enhance(3) man page has also been renamed to enhance(1).

  When expanding "~/", gl_get_line() now checks for, and returns the
  value of the HOME environment variable, if it exists, in preference
  to looking up the directory of the current user in the password
  file.

  When the terminal was resized to a narrower width, previous versions
  of gl_get_line() would redraw the line higher up the terminal. This
  bug has been fixed. A bug in history recall has also been fixed, in
  which an error message was being generated if one attempted to
  recall a line while the cursor was at the end of the longest
  possible input line. A more serious bug, in which callbacks
  registered by gl_watch_fd() weren't being called for write-events,
  has also been fixed. Finally, a few minor fixes have been made to
  improve support under QNX and Mac OS X.

  Beware that in this release, much of the underlying code has
  undergone some radical re-work, so although backwards compatibility
  of all documented features has been preserved, there may be some
  lingering bugs that could break existing programs.  So, if you plan
  to use this version in production code, please test it as far as
  possible within your application before releasing it to your
  clients, and as always, please report any unexpected behavior.

Version 1.4.1:

  This is a maintenance release. It includes minor changes to support
  Mac OS X (Darwin), the QNX real-time operating system, and Cygwin
  under Windows. It also fixes an oversight that was preventing the
  tab key from inserting tab characters when users unbound the
  complete-word action from it.

Version 1.4.0:

  The contents of the history list can now be saved and restored with
  the new gl_save_history() and gl_load_history() functions.

  Event handlers can now be registered to watch for and respond to I/O
  on arbitrary file descriptors while gl_get_line() is waiting for
  terminal input from the user. See the gl_get_line(3) man page
  for details on gl_watch_fd().

  As an optional alternative to getting configuration information only
  from ~/.teclarc, the new gl_configure_getline() function allows
  configuration commands to be taken from any of, a string, a
  specified application-specific file, and/or a specified
  user-specific file. See the gl_get_line(3) man page for details.

  The version number of the library can now be queried using the
  libtecla_version() function. See the libtecla(3) man page.

  The new gl_group_history() function allows applications to group
  different types of input line in the history buffer, and arrange for
  only members of the appropriate group to be recalled on a given call
  to gl_get_line(). See the gl_get_line(3) man page.

  The new gl_show_history() function displays the current history list
  to a given stdio output stream. See the gl_get_line(3) man page.

  new_GetLine() now allows you to specify a history buffer size of
  zero, thus requesting that no history buffer be allocated. You can
  subsequently resize or delete the history buffer at any time, by
  calling gl_resize_history(), limit the number of lines that are
  allowed in the buffer by calling gl_limit_history(), clear either
  all history lines from the history list, or just the history lines
  that are associated with the current history group, by calling
  gl_clear_history, and toggle the history mechanism on and off by
  calling gl_toggle_history().

  The new gl_terminal_size() function can be used to query the
  current terminal size. It can also be used to supply a default
  terminal size on systems where no mechanism is available for
  looking up the size.

  The contents and configuration of the history list can now be
  obtained by the calling application, by calling the new
  gl_lookup_history(), gl_state_of_history(), gl_range_of_history()
  and gl_size_of_history() functions. See the gl_get_line(3) man page.

  Echoing of the input line as it is typed, can now be turned on and
  off via the new gl_echo_mode() function. While echoing is disabled,
  newly entered input lines are omitted from the history list.  See
  the gl_get_line(3) man page.

  While the default remains to display the prompt string literally,
  the new gl_prompt_style() function can be used to enable text
  attribute formatting directives in prompt strings, such as
  underlining, bold font, and highlighting directives.

  Signal handling in gl_get_line() is now customizable. The default
  signal handling behavior remains essentially the same, except that
  the SIGTSTP, SIGTTIN and SIGTTOU are now forwarded to the
  corresponding signal handler of the calling program, instead of
  causing a SIGSTOP to be sent to the application.  It is now possible
  to remove signals from the list that are trapped by gl_get_line(),
  as well as add new signals to this list. The signal and terminal
  environments in which the signal handler of the calling program is
  invoked, and what gl_get_line() does after the signal handler
  returns, is now customizable on a per signal basis. You can now also
  query the last signal that was caught by gl_get_line(). This is
  useful when gl_get_line() aborts with errno=EINTR, and you need to
  know which signal caused it to abort.

  Key-sequences bound to action functions can now start with printable
  characters. Previously only keysequences starting with control or
  meta characters were permitted.

  gl_get_line() is now 8-bit clean. If the calling program has
  correctly called setlocale(LC_CTYPE,""), then the user can select an
  alternate locale by setting the standard LC_CTYPE, LC_ALL, or LANG
  environment variables, and international characters can then be
  entered directly, either by using a non-US keyboard, or by using a
  compose key on a standard US keyboard. Note that in locales in which
  meta characters become printable, meta characters no longer match
  M-c bindings, which then have to be entered using their escape-c
  equivalents.  Fortunately most modern terminal emulators either
  output the escape-c version by default when the meta key is used, or
  can be configured to do so (see the gl_get_line(3) man page), so in
  most cases you can continue to use the meta key.

  Completion callback functions can now tell gl_get_line() to return
  the input line immediately after a successful tab completion, simply
  by setting the last character of the optional continuation suffix to
  a newline character (ie. in the call to cpl_add_completion()).

  It is now safe to create and use multiple GetLine objects, albeit
  still only from a single thread. In conjunction with the new
  gl_configure_getline() function, this optionally allows multiple
  GetLine objects with different bindings to be used to implement
  different input modes.

  The edit-mode configuration command now accepts the argument,
  none. This tells gl_get_line() to revert to using just the native
  line editing facilities provided by the terminal driver. This could
  be used if the termcap or terminfo entry of the host terminal were
  badly corrupted.

  Application callback functions invoked by gl_get_line() can now
  change the displayed prompt using the gl_replace_prompt() function.

  Their is now an optional program distributed with the library. This
  is a beta release of a program which adds tecla command-line editing
  to virtually any third party application without the application
  needing to be linked to the library. See the enhance(3) man page for
  further details. Although built and installed by default, the
  INSTALL document explains how to prevent this.

  The INSTALL document now explains how you can stop the demo programs
  from being built and installed.

  NetBSD/termcap fixes. Mike MacFaden reported two problems that he
  saw when compiling libtecla under NetBSD. Both cases were related to
  the use of termcap.  Most systems use terminfo, so this problem has
  gone unnoticed until now, and won't have affected the grand majority
  of users.  The configure script had a bug which prevented the check
  for CPP working properly, and getline.c wouldn't compile due to an
  undeclared variable when USE_TERMCAP was defined. Both problems have
  now been fixed. Note that if you successfully compiled version
  1.3.3, this problem didn't affect you.

  An unfortunate and undocumented binding of the key-sequence M-O was
  shadowing the arrow-key bindings on systems that use ^[OA etc. I
  have removed this binding (the documented lower case M-o binding
  remains bound). Under the KDE konsole terminal this was causing the
  arrow keys to do something other than expected.

  There was a bug in the history list code which could result in
  strange entries appearing at the start of the history list once
  enough history lines had been added to the list to cause the
  circular history buffer to wrap. This is now fixed.
 
Version 1.3.3:

  Signal handling has been re-written, and documentation of its
  behaviour has been added to the gl_get_line(3) man page. In addition
  to eliminating race conditions, and appropriately setting errno for
  those signals that abort gl_get_line(), many more signals are now
  intercepted, making it less likely that the terminal will be left in
  raw mode by a signal that isn't trapped by gl_get_line().

  A bug was also fixed that was leaving the terminal in raw mode if
  the editing mode was changed interactively between vi and emacs.
  This was only noticeable when running programs from old shells that
  don't reset terminal modes.

Version 1.3.2:

  Tim Eliseo contributed a number of improvements to vi mode,
  including a fuller set of vi key-bindings, implementation of the vi
  constraint that the cursor can't backup past the point at which
  input mode was entered, and restoration of overwritten characters
  when backspacing in overwrite mode. There are also now new bindings
  to allow users to toggle between vi and emacs modes interactively.
  The terminal bell is now used in some circumstances, such as when an
  unrecognized key sequence is entered. This can be turned off by the
  new nobeep option in the tecla configuration file.

  Unrelated to the above, a problem under Linux which prevented ^Q
  from being used to resume terminal output after the user had pressed
  ^S, has been fixed.

Version 1.3.1:

  In vi mode a bug was preventing the history-search-backward and
  history-search-forward actions from doing anything when invoked on
  empty lines. On empty lines they now act like up-history and
  down-history respectively, as in emacs mode.

  When creating shared libraries under Linux, the -soname directive
  was being used incorrectly. The result is that Linux binaries linked
  with the 1.2.3, 1.2.4 and 1.3.0 versions of the tecla shared
  libraries, will refuse to see other versions of the shared library
  until relinked with version 1.3.1 or higher.

  The configure script can now handle the fact that under Solaris-2.6
  and earlier, the only curses library is a static one that hides in
  /usr/ccs/lib. Under Linux it now also caters for old versions of GNU
  ld which don't accept version scripts.

  The demos are now linked against the shared version of the library
  if possible. Previously they were always linked with the static
  version.

Version 1.3.0:

  The major change in this release is the addition of an optional vi
  command-line editing mode in gl_get_line(), along with lots of new
  action functions to support its bindings. To enable this, first
  create a ~/.teclarc file if you don't already have one, then add the
  following line to it.

   edit-mode vi

  The default vi bindings, which are designed to mimic those of the vi
  editor as closely as possible, are described in the gl_get_line(3)
  man page.

  A new convenience function called ef_list_expansions() has been
  added for listing filename expansions. See the ef_list_expansions(3)
  man page for details. This is used in a new list-glob binding, bound
  to ^Xg in emacs mode, and ^G in vi input mode.

  A bug has been fixed in the key-binding table expansion code. This
  bug would have caused problems to anybody who defined more than
  about 18 personalized key-bindings in their ~/.teclarc file.

Version 1.2.4:

  Buffered I/O is now used for writing to terminals, and where
  supported, cursor motion is done with move-n-positions terminfo
  capabilities instead of doing lots of move-1-position requests. This
  greatly improves how the library feels over slow links.

  You can now optionally compile different architectures in different
  directories, without having to make multiple copies of the
  distribution. This is documented in the INSTALL file.

  The ksh ~+ directive is now supported.

  Thanks to Markus Gyger for the above improvements.

  Documentation has been added to the INSTALL file describing features
  designed to facilitate configuration and installation of the library
  as part of larger packages. These features are intended to remove
  the need to modify the tecla distribution's configuration and build
  procedures when embedding the libtecla distribution in other package
  distributions.

  A previous fix to stop the cursor from warping when the last
  character of the input line was in the last column of the terminal,
  was only being used for the first terminal line of the input line.
  It is now used for all subsequent lines as well, as originally
  intended.
  
Version 1.2.3:

  The installation procedure has been better automated with the
  addition of an autoconf configure script. This means that installers
  can now compile and install the library by typing:

    ./configure
    make
    make install

  On all systems this makes at least the normal static version of the
  tecla library. It also makes the reentrant version if reentrant
  POSIX functions are detected.  Under Solaris, Linux and HP-UX the
  configuration script arranges for shared libraries to be compiled in
  addition to the static libraries.  It is hoped that installers will
  return information about how to compile shared libraries on other
  systems, for inclusion in future releases, and to this end, a new
  PORTING guide has been provided.

  The versioning number scheme has been changed. This release would
  have been 1.2c, but instead will be refered to as 1.2.3. The
  versioning scheme, based on conventions used by Sun Microsystems, is
  described in configure.in.

  The library was also tested under HP-UX, and this revealed two
  serious bugs, both of which have now been fixed.
  
  The first bug prevented the library from writing control codes to
  terminals on big-endian machines, with the exception of those
  running under Solaris. This was due to an int variable being used
  where a char was needed.

  The second bug had the symptom that on systems that don't use the
  newline character as the control code for moving the cursor down a
  line, a newline wasn't started when the user hit enter.

Version 1.2b:

  Two more minor bug fixes:

  Many terminals don't wrap the cursor to the next line when a
  character is written to the rightmost terminal column. Instead, they
  delay starting a new line until one more character is written, at
  which point they move the cursor two positions.  gl_get_line()
  wasn't aware of this, so cursor repositionings just after writing
  the last character of a column, caused it to erroneously go up a
  line. This has now been remedied, using a method that should work
  regardless of whether a terminal exhibits this behavior or not.

  Some systems dynamically record the current terminal dimensions in
  environment variables called LINES and COLUMNS. On such systems,
  during the initial terminal setup, these values should override the
  static values read from the terminal information databases, and now
  do.  Previously they were only used if the dimensions returned by
  terminfo/termcap looked bogus.

Version 1.2a:

  This minor release fixes the following two bugs:

  The initial terminal size and subsequent changes thereto, weren't
  being noticed by gl_get_line(). This was because the test for the
  existence of TIOCWINSZ was erroneously placed before the inclusion
  of termios.h. One of the results was that on input lines that
  spanned more than one terminal line, the cursor occasionally jumped
  unexpectedly to the previous terminal line.

  On entering a line that wrapped over multiple terminal lines,
  gl_get_line() simply output a carriage-return line-feed at the point
  at which the user pressed return. Thus if one typed in such a line,
  then moved back onto one of the earlier terminal lines before
  hitting return, the cursor was left on a line containing part of the
  line that had just been entered. This didn't do any harm, but it
  looked a mess.

Version 1.2:

  A new facility for looking up and completing filenames in UNIX-style
  paths has now been added (eg. you can search for, or complete
  commands using the UNIX PATH environment variable). See the
  pca_lookup_file(3) man page.

  The already existing filename completion callback can now be made
  selective in what types of files it lists. See the
  cpl_complete_word(3) man page.

  Due to its potential to break applications when changed, the use of
  the publically defined CplFileArgs structure to configure the
  cpl_file_completions() callback is now deprecated.  The definition
  of this structure has been frozen, and its documentation has been
  removed from the man pages.  It will remain supported, but if you
  have used it, you are recommended to switch to the new method, which
  involves a new opaque configuration object, allocated via a provided
  constructor function, configured via accessor functions, and
  eventually deleted with a provided destructor function. The
  cpl_file_completions() callback distinguishes which structure type
  it has been sent by virtue of a code placed at the start of the new
  structure by the constructor.  It is assumed that no existing
  applications set the boolean 'escaped' member of the CplFileArgs
  structure to 4568.  The new method is documented in the
  cpl_complete_word(3) man page.

Version 1.1j

  This was the initial public release on freshmeat.org.
genometools-1.5.1/src/external/libtecla-1.6.1/html/tecla.html000066400000000000000000001624741211610345200236350ustar00rootroot00000000000000 Manual Page
tecla                                      tecla



NAME

       tecla, teclarc - The user interface provided by the Tecla library.

DESCRIPTION

       This  man  page  describes  the  command-line editing features that are
       available to users of programs that read keyboard input via  the  Tecla
       library.  Users  of  the  tcsh shell will find the default key-bindings
       very familiar. Users of the bash shell will also find it  quite  famil-
       iar,  but with a few minor differences, most notably in how forward and
       backward searches through the list  of  historical  commands  are  per-
       formed.  There  are  two  major editing modes, one with emacs-like key-
       bindings and another with vi-like key-bindings. By default  emacs  mode
       is  enabled,  but  vi mode can alternatively be selected via the user's
       configuration file. This file can also be used to change  the  bindings
       of individual keys to suit the user's preferences. By default, tab com-
       pletion is provided. If the application  hasn't  reconfigured  this  to
       complete  other  types  of symbols, then tab completion completes file-
       names.


KEY SEQUENCE NOTATION

       In the rest of this man page,  and  also  in  all  Tecla  configuration
       files, key-sequences are expressed as follows.


       ^A  or  C-a
           This is a control-A, entered by pressing the control key at
           the same time as the A key.

       \E    or   M-
           In key-sequences, both of these notations can be entered
           either by pressing the escape key, then the following key, or by
           pressing the Meta key at the same time as the following key. Thus
           the key sequence M-p can be typed in two ways, by pressing
           the escape key, followed by pressing p, or by pressing the
           Meta key at the same time as p.

       up
           This refers to the up-arrow key.

       down
           This refers to the down-arrow key.

       left
           This refers to the left-arrow key.

       right
           This refers to the right-arrow key.

       a
           This is just a normal A key.



THE TECLA CONFIGURATION FILE

       By  default, Tecla looks for a file called .teclarc in your home direc-
       tory (ie. ~/.teclarc).  If it finds this file, it reads it,  interpret-
       ing each line as defining a new key binding or an editing configuration
       option. Since the emacs keybindings are installed by  default,  if  you
       want to use the non-default vi editing mode, the most important item to
       go in this file is the following line:

         edit-mode vi

       This will re-configure the default bindings for vi-mode.  The  complete
       set of arguments that this command accepts are:

         vi     -  Install key-bindings like those of the vi
                   editor.
         emacs  -  Install key-bindings like those of the emacs
                   editor. This is the default.
         none   -  Use just the native line editing facilities
                   provided by the terminal driver.

       To  prevent the terminal bell from being rung, such as when an unrecog-
       nized control-sequence is typed, place the following line in  the  con-
       figuration file:

         nobeep

       An  example of a key binding line in the configuration file is the fol-
       lowing.

         bind M-[2~ insert-mode

       On many keyboards, the above key sequence is generated when one presses
       the  insert  key,  so  with this keybinding, one can toggle between the
       emacs-mode insert and overwrite modes by hitting  one  key.  One  could
       also  do  it by typing out the above sequence of characters one by one.
       As explained above, the M- part of this sequence can be typed either by
       pressing  the  escape  key before the following key, or by pressing the
       Meta key at the same time as the following key. Thus if you had set the
       above  key binding, and the insert key on your keyboard didn't generate
       the above key sequence, you could still type it in either of  the  fol-
       lowing 2 ways.

         1. Hit the escape key momentarily, then press '[', then '2', then
            finally '~'.

         2. Press the meta key at the same time as pressing the '[' key,
            then press '2', then '~'.

       If  you  set a keybinding for a key-sequence that is already bound to a
       function, the new binding overrides the old one. If in the new  binding
       you  omit the name of the new function to bind to the key-sequence, the
       original binding becomes undefined.

       Starting with versions of libtecla later than 1.3.3 it is now  possible
       to  bind keysequences that begin with a printable character. Previously
       key-sequences were required to start with a control or meta  character.

       Note  that  the special keywords "up", "down", "left" and "right" refer
       to the arrow keys, and are thus not treated as  keysequences.  So,  for
       example, to rebind the up and down arrow keys to use the history search
       mechanism instead of the simple history recall method, you could  place
       the following in your configuration file:

         bind up history-search-backwards
         bind down history-search-backwards

       To unbind an existing binding, you can do this with the bind command by
       omitting to name any action to rebind the key sequence to.   For  exam-
       ple,  by  not  specifying  an  action  function,  the following command
       unbinds the default beginning-of-line action from the ^A key sequence:

         bind ^A

       If you create a ~/.teclarc configuration file, but it appears  to  have
       no effect on the program, check the documentation of the program to see
       if the author chose a different name for this file.


FILENAME AND TILDE COMPLETION

       With the default key bindings, pressing the TAB key (aka.  ^I)  results
       in  Tecla  attempting to complete the incomplete filename that precedes
       the cursor. Tecla searches backwards from the cursor, looking  for  the
       start  of  the  filename,  stopping  when it hits either a space or the
       start of the line. If more than one file has the specified prefix, then
       Tecla  completes  the  filename  up to the point at which the ambiguous
       matches start to differ, then lists the possible matches.

       In addition to literally written filenames, Tecla  can  complete  files
       that  start  with  ~/  and  ~user/ expressions and that contain $envvar
       expressions. In particular, if you hit TAB within an incomplete  ~user,
       expression,  Tecla  will  attempt to complete the username, listing any
       ambiguous matches.

       The completion binding is implemented using the  cpl_word_completions()
       function,  which is also available separately to users of this library.
       See the cpl_word_completions(@LIBR_MANEXT@) man page for more  details.


FILENAME EXPANSION

       With  the default key bindings, pressing ^X* causes Tecla to expand the
       filename that precedes the cursor, replacing ~/ and ~user/  expressions
       with  the corresponding home directories, and replacing $envvar expres-
       sions with the value of the specified  environment  variable,  then  if
       there  are any wildcards, replacing the so far expanded filename with a
       space-separated list of the files which match the wild cards.

       The expansion binding is implemented using the  ef_expand_file()  func-
       tion.  See the ef_expand_file man page for more details.


RECALLING PREVIOUSLY TYPED LINES

       Every time that a new line is entered by the user, it is appended to  a
       list  of  historical input lines maintained within the GetLine resource
       object. You can traverse up and down this list using the  up  and  down
       arrow  keys.  Alternatively,  you  can  do the same with the ^P, and ^N
       keys, and in vi command mode you can alternatively  use  the  k  and  j
       characters.  Thus  pressing  up-arrow  once, replaces the current input
       line  with  the  previously  entered  line.  Pressing  up-arrow  again,
       replaces  this  with  the line that was entered before it, etc.. Having
       gone back one or more lines into the history list, one  can  return  to
       newer  lines  by  pressing down-arrow one or more times. If you do this
       sufficient times, you will return to the original line  that  you  were
       entering when you first hit up-arrow.

       Note  that  in  vi mode, all of the history recall functions switch the
       library into command mode.

       In emacs mode the M-p and M-n keys work just like the ^P and  ^N  keys,
       except  that  they  skip all but those historical lines which share the
       prefix that precedes the cursor. In vi command mode the  upper  case  K
       and  J  characters  do the same thing, except that the string that they
       search for includes the character under the cursor as well as what pre-
       cedes it.

       Thus for example, suppose that you were in emacs mode, and you had just
       entered the following list of commands in the order shown:

         ls ~/tecla/
         cd ~/tecla
         ls -l getline.c
         emacs ~/tecla/getline.c

       If you next typed:

         ls

       and then hit M-p, then rather than returning the previously typed emacs
       line, which doesn't start with "ls", Tecla would recall the "ls -l get-
       line.c" line. Pressing M-p again would recall the "ls ~/tecla/" line.

       Note that if the string that you are searching for, contains any of the
       special  characters, *, ?, or '[', then it is interpretted as a pattern
       to be matched. Thus, cotinuing with the above example, after typing  in
       the list of commands shown, if you then typed:

         *tecla*

       and  hit M-p, then the "emacs ~/tecla/getline.c" line would be recalled
       first, since it contains the word tecla somewhere in  the  line,  Simi-
       larly, hitting M-p again, would recall the "ls ~/tecla/" line, and hit-
       ting it once more would recall the "ls ~/tecla/" line. The pattern syn-
       tax  is  the  same  as  that  described  for filename expansion, in the
       ef_expand_file(@LIBR_MANEXT@ man page.


HISTORY FILES

       Authors of programs that use the Tecla library have the option of  sav-
       ing historical command-lines in a file before exiting, and subsequently
       reading them back in from this file when the program is  next  started.
       There  is no standard name for this file, since it makes sense for each
       application to use its own history file, so that commands from  differ-
       ent applications don't get mixed up.


INTERNATIONAL CHARACTER SETS

       Since  libtecla  version  1.4.0, Tecla has been 8-bit clean. This means
       that all 8-bit characters that are  printable  in  the  user's  current
       locale  are  now  displayed verbatim and included in the returned input
       line.  Assuming that the calling program correctly contains a call like
       the following,

         setlocale(LC_CTYPE, "");

       then  the  current locale is determined by the first of the environment
       variables LC_CTYPE, LC_ALL, and LANG, that is found to contain a  valid
       locale  name.  If  none  of these variables are defined, or the program
       neglects to call setlocale, then the default C locale is used, which is
       US  7-bit  ASCII.  On  most  unix-like platforms, you can get a list of
       valid locales by typing the command:

         locale -a

       at the shell prompt.


   Meta keys and locales
       Beware that in most locales other than the default C locale, meta char-
       acters  become  printable,  and  they  are then no longer considered to
       match M-c style key bindings. This allows international  characters  to
       be  entered  with  the compose key without unexpectedly triggering meta
       key bindings. You can still invoke meta bindings, since there are actu-
       ally  two  ways  to  do  this.  For example the binding M-c can also be
       invoked by pressing the escape key momentarily,  then  pressing  the  c
       key,  and  this  will  work regardless of locale. Moreover, many modern
       terminal emulators, such as gnome's gnome-terminal's and KDE's  konsole
       terminals,  already  generate  escape  pairs like this when you use the
       meta key, rather than a real meta character, and other  emulators  usu-
       ally  have  a  way to request this behavior, so you can continue to use
       the meta key on most systems.

       For example, although xterm terminal emulators generate real 8-bit meta
       characters by default when you use the meta key, they can be configured
       to output the equivalent escape pair by setting their  EightBitInput  X
       resource  to  False.  You can either do this by placing a line like the
       following in your ~/.Xdefaults file,

         XTerm*EightBitInput: False

       or by starting an xterm with an -xrm '*EightBitInput:  False'  command-
       line  argument. In recent versions of xterm you can toggle this feature
       on and off with the "Meta Sends Escape" option in the menu that is dis-
       played  when you press the left mouse button and the control key within
       an xterm window. In CDE, dtterms can be similarly coerced  to  generate
       escape pairs in place of meta characters, by setting the Dtterm*KshMode
       resource to True.


   Entering international characters
       If you don't have a keyboard that generates all  of  the  international
       characters  that  you  need,  there  is usually a compose key that will
       allow you to enter special characters, or a  way  to  create  one.  For
       example, under X windows on unix-like systems, if your keyboard doesn't
       have a compose key, you can designate a redundant  key  to  serve  this
       purpose  with  the  xmodmap  command. For example, on many PC keyboards
       there is a microsoft-windows key,  which  is  otherwise  useless  under
       Linux. On my laptop the xev program reports that pressing this key gen-
       erates keycode 115, so to turn this key into a compose key,  I  do  the
       following:

         xmodmap -e 'keycode 115 = Multi_key'

       I  can  then  enter an i with a umlaut over it by typing this key, fol-
       lowed by ", followed by i.


THE AVAILABLE KEY BINDING FUNCTIONS

       The following is a list of the editing functions provided by the  Tecla
       library.  The  names  in the leftmost column of the list can be used in
       configuration files to specify which function a given key  or  combina-
       tion of keys should invoke. They are also used in the next two sections
       to list the default key-bindings in emacs and vi modes.

         user-interrupt           -  Send a SIGINT signal to the
                                     parent process.
         abort                    -  Send a SIGABRT signal to the
                                     parent process.
         suspend                  -  Suspend the parent process.
         stop-output              -  Pause terminal output.
         start-output             -  Resume paused terminal output.
         literal-next             -  Arrange for the next character
                                     to be treated as a normal
                                     character. This allows control
                                     characters to be entered.
         cursor-right             -  Move the cursor one character
                                     right.
         cursor-left              -  Move the cursor one character
                                     left.
         insert-mode              -  Toggle between insert mode and
                                     overwrite mode.
         beginning-of-line        -  Move the cursor to the
                                     beginning of the line.
         end-of-line              -  Move the cursor to the end of
                                     the line.
         delete-line              -  Delete the contents of the
                                     current line.
         kill-line                -  Delete everything that follows
                                     the cursor.
         backward-kill-line       -  Delete all characters between
                                     the cursor and the start of the
                                     line.
         forward-word             -  Move to the end of the word
                                     which follows the cursor.
         forward-to-word          -  Move the cursor to the start of
                                     the word that follows the
                                     cursor.
         backward-word            -  Move to the start of the word
                                     which precedes the cursor.
         goto-column              -  Move the cursor to the
                                     1-relative column in the line
                                     specified by any preceding
                                     digit-argument sequences (see
                                     ENTERING REPEAT COUNTS below).
         find-parenthesis         -  If the cursor is currently
                                     over a parenthesis character,
                                     move it to the matching
                                     parenthesis character. If not
                                     over a parenthesis character
                                     move right to the next close
                                     parenthesis.
         forward-delete-char      -  Delete the character under the
                                     cursor.
         backward-delete-char     -  Delete the character which
                                     precedes the cursor.
         list-or-eof              -  This is intended for binding
                                     to ^D. When invoked when the
                                     cursor is within the line it
                                     displays all possible
                                     completions then redisplays
                                     the line unchanged. When
                                     invoked on an empty line, it
                                     signals end-of-input (EOF) to
                                     the caller of gl_get_line().
         del-char-or-list-or-eof  -  This is intended for binding
                                     to ^D. When invoked when the
                                     cursor is within the line it
                                     invokes forward-delete-char.
                                     When invoked at the end of the
                                     line it displays all possible
                                     completions then redisplays
                                     the line unchanged. When
                                     invoked on an empty line, it
                                     signals end-of-input (EOF) to
                                     the caller of gl_get_line().
         forward-delete-word      -  Delete the word which follows
                                     the cursor.
         backward-delete-word     -  Delete the word which precedes
                                     the cursor.
         upcase-word              -  Convert all of the characters
                                     of the word which follows the
                                     cursor, to upper case.
         downcase-word            -  Convert all of the characters
                                     of the word which follows the
                                     cursor, to lower case.
         capitalize-word          -  Capitalize the word which
                                     follows the cursor.
         change-case              -  If the next character is upper
                                     case, toggle it to lower case
                                     and vice versa.
         redisplay                -  Redisplay the line.
         clear-screen             -  Clear the terminal, then
                                     redisplay the current line.
         transpose-chars          -  Swap the character under the
                                     cursor with the character just
                                     before the cursor.
         set-mark                 -  Set a mark at the position of
                                     the cursor.
         exchange-point-and-mark  -  Move the cursor to the last
                                     mark that was set, and move
                                     the mark to where the cursor
                                     used to be.
         kill-region              -  Delete the characters that lie
                                     between the last mark that was
                                     set, and the cursor.
         copy-region-as-kill      -  Copy the text between the mark
                                     and the cursor to the cut
                                     buffer, without deleting the
                                     original text.
         yank                     -  Insert the text that was last
                                     deleted, just before the
                                     current position of the cursor.
         append-yank              -  Paste the current contents of
                                     the cut buffer, after the
                                     cursor.
         up-history               -  Recall the next oldest line
                                     that was entered. Note that
                                     in vi mode you are left in
                                     command mode.
         down-history             -  Recall the next most recent
                                     line that was entered. If no
                                     history recall session is
                                     currently active, the next
                                     line from a previous recall
                                     session is recalled. Note that
                                     in vi mode you are left in
                                     command mode.
         history-search-backward  -  Recall the next oldest line
                                     who's prefix matches the string
                                     which currently precedes the
                                     cursor (in vi command-mode the
                                     character under the cursor is
                                     also included in the search
                                     string).  Note that in vi mode
                                     you are left in command mode.
         history-search-forward   -  Recall the next newest line
                                     who's prefix matches the string
                                     which currently precedes the
                                     cursor (in vi command-mode the
                                     character under the cursor is
                                     also included in the search
                                     string).  Note that in vi mode
                                     you are left in command mode.
         history-re-search-backward -Recall the next oldest line
                                     who's prefix matches that
                                     established by the last
                                     invocation of either
                                     history-search-forward or
                                     history-search-backward.
         history-re-search-forward - Recall the next newest line
                                     who's prefix matches that
                                     established by the last
                                     invocation of either
                                     history-search-forward or
                                     history-search-backward.
         complete-word            -  Attempt to complete the
                                     incomplete word which
                                     precedes the cursor. Unless
                                     the host program has customized
                                     word completion, filename
                                     completion is attempted. In vi
                                     commmand mode the character
                                     under the cursor is also
                                     included in the word being
                                     completed, and you are left in
                                     vi insert mode.
         expand-filename          -  Within the command line, expand
                                     wild cards, tilde expressions
                                     and dollar expressions in the
                                     filename which immediately
                                     precedes the cursor. In vi
                                     commmand mode the character
                                     under the cursor is also
                                     included in the filename being
                                     expanded, and you are left in
                                     vi insert mode.
         list-glob                -  List any filenames which match
                                     the wild-card, tilde and dollar
                                     expressions in the filename
                                     which immediately precedes the
                                     cursor, then redraw the input
                                     line unchanged.
         list-history             -  Display the contents of the
                                     history list for the current
                                     history group. If a repeat
                                     count of > 1 is specified,
                                     only that many of the most
                                     recent lines are displayed.
                                     See the "ENTERING REPEAT
                                     COUNTS" section.
         read-from-file           -  Temporarily switch to reading
                                     input from the file who's
                                     name precedes the cursor.
         read-init-files          -  Re-read teclarc configuration
                                     files.
         beginning-of-history     -  Move to the oldest line in the
                                     history list. Note that in vi
                                     mode you are left in command
                                     mode.
         end-of-history           -  Move to the newest line in the
                                     history list (ie. the current
                                     line). Note that in vi mode
                                     this leaves you in command
                                     mode.
         digit-argument           -  Enter a repeat count for the
                                     next key-binding function.
                                     For details, see the ENTERING
                                     REPEAT COUNTS section.
         newline                  -  Terminate and return the
                                     current contents of the
                                     line, after appending a
                                     newline character. The newline
                                     character is normally '\n',
                                     but will be the first
                                     character of the key-sequence
                                     that invoked the newline
                                     action, if this happens to be
                                     a printable character. If the
                                     action was invoked by the
                                     '\n' newline character or the
                                     '\r' carriage return
                                     character, the line is
                                     appended to the history
                                     buffer.
         repeat-history           -  Return the line that is being
                                     edited, then arrange for the
                                     next most recent entry in the
                                     history buffer to be recalled
                                     when Tecla is next called.
                                     Repeatedly invoking this
                                     action causes successive
                                     historical input lines to be
                                     re-executed. Note that this
                                     action is equivalent to the
                                     'Operate' action in ksh.
         ring-bell                -  Ring the terminal bell, unless
                                     the bell has been silenced via
                                     the nobeep configuration
                                     option (see the THE TECLA
                                     CONFIGURATION FILE section).
         forward-copy-char        -  Copy the next character into
                                     the cut buffer (NB. use repeat
                                     counts to copy more than one).
         backward-copy-char       -  Copy the previous character
                                     into the cut buffer.
         forward-copy-word        -  Copy the next word into the cut
                                     buffer.
         backward-copy-word       -  Copy the previous word into the
                                     cut buffer.
         forward-find-char        -  Move the cursor to the next
                                     occurrence of the next
                                     character that you type.
         backward-find-char       -  Move the cursor to the last
                                     occurrence of the next
                                     character that you type.
         forward-to-char          -  Move the cursor to the
                                     character just before the next
                                     occurrence of the next
                                     character that the user types.
         backward-to-char         -  Move the cursor to the
                                     character just after the last
                                     occurrence before the cursor
                                     of the next character that the
                                     user types.
         repeat-find-char         -  Repeat the last
                                     backward-find-char,
                                     forward-find-char,
                                     backward-to-char or
                                     forward-to-char.
         invert-refind-char       -  Repeat the last
                                     backward-find-char,
                                     forward-find-char,
                                     backward-to-char, or
                                     forward-to-char in the
                                     opposite direction.
         delete-to-column         -  Delete the characters from the
                                     cursor up to the column that
                                     is specified by the repeat
                                     count.
         delete-to-parenthesis    -  Delete the characters from the
                                     cursor up to and including
                                     the matching parenthesis, or
                                     next close parenthesis.
         forward-delete-find      -  Delete the characters from the
                                     cursor up to and including the
                                     following occurence of the
                                     next character typed.
         backward-delete-find     -  Delete the characters from the
                                     cursor up to and including the
                                     preceding occurence of the
                                     next character typed.
         forward-delete-to        -  Delete the characters from the
                                     cursor up to, but not
                                     including, the following
                                     occurence of the next
                                     character typed.
         backward-delete-to       -  Delete the characters from the
                                     cursor up to, but not
                                     including, the preceding
                                     occurence of the next
                                     character typed.
         delete-refind            -  Repeat the last *-delete-find
                                     or *-delete-to action.
         delete-invert-refind     -  Repeat the last *-delete-find
                                     or *-delete-to action, in the
                                     opposite direction.
         copy-to-column           -  Copy the characters from the
                                     cursor up to the column that
                                     is specified by the repeat
                                     count, into the cut buffer.
         copy-to-parenthesis      -  Copy the characters from the
                                     cursor up to and including
                                     the matching parenthesis, or
                                     next close parenthesis, into
                                     the cut buffer.
         forward-copy-find        -  Copy the characters from the
                                     cursor up to and including the
                                     following occurence of the
                                     next character typed, into the
                                     cut buffer.
         backward-copy-find       -  Copy the characters from the
                                     cursor up to and including the
                                     preceding occurence of the
                                     next character typed, into the
                                     cut buffer.
         forward-copy-to          -  Copy the characters from the
                                     cursor up to, but not
                                     including, the following
                                     occurence of the next
                                     character typed, into the cut
                                     buffer.
         backward-copy-to         -  Copy the characters from the
                                     cursor up to, but not
                                     including, the preceding
                                     occurence of the next
                                     character typed, into the cut
                                     buffer.
         copy-refind              -  Repeat the last *-copy-find
                                     or *-copy-to action.
         copy-invert-refind       -  Repeat the last *-copy-find
                                     or *-copy-to action, in the
                                     opposite direction.
         vi-mode                  -  Switch to vi mode from emacs
                                     mode.
         emacs-mode               -  Switch to emacs mode from vi
                                     mode.
         vi-insert                -  From vi command mode, switch to
                                     insert mode.
         vi-overwrite             -  From vi command mode, switch to
                                     overwrite mode.
         vi-insert-at-bol         -  From vi command mode, move the
                                     cursor to the start of the line
                                     and switch to insert mode.
         vi-append-at-eol         -  From vi command mode, move the
                                     cursor to the end of the line
                                     and switch to append mode.
         vi-append                -  From vi command mode, move the
                                     cursor one position right, and
                                     switch to insert mode.
         vi-replace-char          -  From vi command mode, replace
                                     the character under the cursor
                                     with the the next character
                                     entered.
         vi-forward-change-char   -  From vi command mode, delete
                                     the next character then enter
                                     insert mode.
         vi-backward-change-char  -  From vi command mode, delete
                                     the preceding character then
                                     enter insert mode.
         vi-forward-change-word   -  From vi command mode, delete
                                     the next word then enter
                                     insert mode.
         vi-backward-change-word  -  From vi command mode, delete
                                     the preceding word then
                                     enter insert mode.
         vi-change-rest-of-line   -  From vi command mode, delete
                                     from the cursor to the end of
                                     the line, then enter insert
                                     mode.
         vi-change-line           -  From vi command mode, delete
                                     the current line, then enter
                                     insert mode.
         vi-change-to-bol         -  From vi command mode, delete
                                     all characters between the
                                     cursor and the beginning of
                                     the line, then enter insert
                                     mode.
         vi-change-to-column      -  From vi command mode, delete
                                     the characters from the cursor
                                     up to the column that is
                                     specified by the repeat count,
                                     then enter insert mode.
         vi-change-to-parenthesis -  Delete the characters from the
                                     cursor up to and including
                                     the matching parenthesis, or
                                     next close parenthesis, then
                                     enter vi insert mode.
         vi-forward-change-find   -  From vi command mode, delete
                                     the characters from the
                                     cursor up to and including the
                                     following occurence of the
                                     next character typed, then
                                     enter insert mode.
         vi-backward-change-find  -  From vi command mode, delete
                                     the characters from the
                                     cursor up to and including the
                                     preceding occurence of the
                                     next character typed, then
                                     enter insert mode.
         vi-forward-change-to     -  From vi command mode, delete
                                     the characters from the
                                     cursor up to, but not
                                     including, the following
                                     occurence of the next
                                     character typed, then enter
                                     insert mode.
         vi-backward-change-to    -  From vi command mode, delete
                                     the characters from the
                                     cursor up to, but not
                                     including, the preceding
                                     occurence of the next
                                     character typed, then enter
                                     insert mode.
         vi-change-refind         -  Repeat the last
                                     vi-*-change-find or
                                     vi-*-change-to action.
         vi-change-invert-refind  -  Repeat the last
                                     vi-*-change-find or
                                     vi-*-change-to action, in the
                                     opposite direction.
         vi-undo                  -  In vi mode, undo the last
                                     editing operation.
         vi-repeat-change         -  In vi command mode, repeat the
                                     last command that modified the
                                     line.


DEFAULT KEY BINDINGS IN EMACS MODE

       The following default key bindings, which can be overriden by the Tecla
       configuration  file,  are designed to mimic most of the bindings of the
       unix tcsh shell, when it is in emacs editing mode.

       This is the default editing mode of the Tecla library.

       Under UNIX the terminal driver sets a number of special keys  for  cer-
       tain  functions. The tecla library attempts to use the same keybindings
       to maintain consistency. The key sequences shown for  the  following  6
       bindings  are  thus just examples of what they will probably be set to.
       If you have used the stty  command  to  change  these  keys,  then  the
       default bindings should match.

         ^C     ->   user-interrupt
         ^\     ->   abort
         ^Z     ->   suspend
         ^Q     ->   start-output
         ^S     ->   stop-output
         ^V     ->   literal-next

       The  cursor  keys are refered to by name, as follows. This is necessary
       because different types of terminals generate different  key  sequences
       when their cursor keys are pressed.

         right  ->   cursor-right
         left   ->   cursor-left
         up     ->   up-history
         down   ->   down-history

       The remaining bindings don't depend on the terminal setttings.

         ^F     ->   cursor-right
         ^B     ->   cursor-left
         M-i    ->   insert-mode
         ^A     ->   beginning-of-line
         ^E     ->   end-of-line
         ^U     ->   delete-line
         ^K     ->   kill-line
         M-f    ->   forward-word
         M-b    ->   backward-word
         ^D     ->   del-char-or-list-or-eof
         ^H     ->   backward-delete-char
         ^?     ->   backward-delete-char
         M-d    ->   forward-delete-word
         M-^H   ->   backward-delete-word
         M-^?   ->   backward-delete-word
         M-u    ->   upcase-word
         M-l    ->   downcase-word
         M-c    ->   capitalize-word
         ^R     ->   redisplay
         ^L     ->   clear-screen
         ^T     ->   transpose-chars
         ^@     ->   set-mark
         ^X^X   ->   exchange-point-and-mark
         ^W     ->   kill-region
         M-w    ->   copy-region-as-kill
         ^Y     ->   yank
         ^P     ->   up-history
         ^N     ->   down-history
         M-p    ->   history-search-backward
         M-n    ->   history-search-forward
         ^I     ->   complete-word
         ^X*    ->   expand-filename
         ^X^F   ->   read-from-file
         ^X^R   ->   read-init-files
         ^Xg    ->   list-glob
         ^Xh    ->   list-history
         M-<    ->   beginning-of-history
         M->    ->   end-of-history
         \n     ->   newline
         \r     ->   newline
         M-o    ->   repeat-history
         M-^V   ->   vi-mode

         M-0, M-1, ... M-9  ->  digit-argument  (see below)

       Note  that  ^I is what the TAB key generates, and that ^@ can be gener-
       ated not only by pressing the control key and the @ key simultaneously,
       but  also  by  pressing  the  control key and the space bar at the same
       time.


DEFAULT KEY BINDINGS IN VI MODE

       The following default key bindings are designed to mimic the  vi  style
       of  editing  as  closely  as possible. This means that very few editing
       functions are provided in the initial  character  input  mode,  editing
       functions  instead  being  provided  by the vi command mode. Vi command
       mode is entered whenever the escape character is pressed, or whenever a
       key-sequence  that starts with a meta character is entered. In addition
       to mimicing vi, libtecla provides bindings for  tab  completion,  wild-
       card expansion of file names, and historical line recall.

       To  learn  how  to tell the Tecla library to use vi mode instead of the
       default emacs editing mode, see the earlier section entitled THE  TECLA
       CONFIGURATION FILE.

       Under  UNIX  the terminal driver sets a number of special keys for cer-
       tain functions. The Tecla library attempts to use the same  keybindings
       to maintain consistency, binding them both in input mode and in command
       mode. The key sequences shown for the following  6  bindings  are  thus
       just  examples  of  what they will probably be set to. If you have used
       the stty command to change these keys, then the default bindings should
       match.

         ^C     ->   user-interrupt
         ^\     ->   abort
         ^Z     ->   suspend
         ^Q     ->   start-output
         ^S     ->   stop-output
         ^V     ->   literal-next
         M-^C   ->   user-interrupt
         M-^\   ->   abort
         M-^Z   ->   suspend
         M-^Q   ->   start-output
         M-^S   ->   stop-output

       Note  that above, most of the bindings are defined twice, once as a raw
       control code like ^C and then a second time as a  meta  character  like
       M-^C.  The  former is the binding for vi input mode, whereas the latter
       is the binding for vi command mode.  Once  in  command  mode  all  key-
       sequences  that the user types that they don't explicitly start with an
       escape or a meta key, have their first key secretly converted to a meta
       character  before  the key sequence is looked up in the key binding ta-
       ble. Thus, once in command mode, when you type the letter i, for  exam-
       ple, the Tecla library actually looks up the binding for M-i.

       The  cursor  keys are refered to by name, as follows. This is necessary
       because different types of terminals generate different  key  sequences
       when their cursor keys are pressed.

         right  ->   cursor-right
         left   ->   cursor-left
         up     ->   up-history
         down   ->   down-history

       The  cursor  keys  normally  generate  a keysequence that start with an
       escape character, so beware that using the arrow keys will put you into
       command mode (if you aren't already in command mode).

       The  following  are  the terminal-independent key bindings for vi input
       mode.

         ^D     ->   list-or-eof
         ^G     ->   list-glob
         ^H     ->   backward-delete-char
         ^I     ->   complete-word
         \r     ->   newline
         \n     ->   newline
         ^L     ->   clear-screen
         ^N     ->   down-history
         ^P     ->   up-history
         ^R     ->   redisplay
         ^U     ->   backward-kill-line
         ^W     ->   backward-delete-word
         ^X*    ->   expand-filename
         ^X^F   ->   read-from-file
         ^X^R   ->   read-init-files
         ^?     ->   backward-delete-char

       The following are the key bindings that are defined in vi command mode,
       this  being  specified  by  them all starting with a meta character. As
       mentioned above, once in command mode the  initial  meta  character  is
       optional.  For example, you might enter command mode by typing Esc, and
       then press h twice to move the cursor two positions to the left. Both h
       characters  get  quietly  converted to M-h before being compared to the
       key-binding table, the first one because Escape followed by a character
       is  always  converted  to the equivalent meta character, and the second
       because command mode was already active.

         M-\     ->   cursor-right     (Meta-space)
         M-$     ->   end-of-line
         M-*     ->   expand-filename
         M-+     ->   down-history
         M--     ->   up-history
         M-<     ->   beginning-of-history
         M->     ->   end-of-history
         M-^     ->   beginning-of-line
         M-;     ->   repeat-find-char
         M-,     ->   invert-refind-char
         M-|     ->   goto-column
         M-~     ->   change-case
         M-.     ->   vi-repeat-change
         M-%     ->   find-parenthesis
         M-a     ->   vi-append
         M-A     ->   vi-append-at-eol
         M-b     ->   backward-word
         M-B     ->   backward-word
         M-C     ->   vi-change-rest-of-line
         M-cb    ->   vi-backward-change-word
         M-cB    ->   vi-backward-change-word
         M-cc    ->   vi-change-line
         M-ce    ->   vi-forward-change-word
         M-cE    ->   vi-forward-change-word
         M-cw    ->   vi-forward-change-word
         M-cW    ->   vi-forward-change-word
         M-cF    ->   vi-backward-change-find
         M-cf    ->   vi-forward-change-find
         M-cT    ->   vi-backward-change-to
         M-ct    ->   vi-forward-change-to
         M-c;    ->   vi-change-refind
         M-c,    ->   vi-change-invert-refind
         M-ch    ->   vi-backward-change-char
         M-c^H   ->   vi-backward-change-char
         M-c^?   ->   vi-backward-change-char
         M-cl    ->   vi-forward-change-char
         M-c\    ->   vi-forward-change-char  (Meta-c-space)
         M-c^    ->   vi-change-to-bol
         M-c0    ->   vi-change-to-bol
         M-c$    ->   vi-change-rest-of-line
         M-c|    ->   vi-change-to-column
         M-c%    ->   vi-change-to-parenthesis
         M-dh    ->   backward-delete-char
         M-d^H   ->   backward-delete-char
         M-d^?   ->   backward-delete-char
         M-dl    ->   forward-delete-char
         M-d     ->   forward-delete-char    (Meta-d-space)
         M-dd    ->   delete-line
         M-db    ->   backward-delete-word
         M-dB    ->   backward-delete-word
         M-de    ->   forward-delete-word
         M-dE    ->   forward-delete-word
         M-dw    ->   forward-delete-word
         M-dW    ->   forward-delete-word
         M-dF    ->   backward-delete-find
         M-df    ->   forward-delete-find
         M-dT    ->   backward-delete-to
         M-dt    ->   forward-delete-to
         M-d;    ->   delete-refind
         M-d,    ->   delete-invert-refind
         M-d^    ->   backward-kill-line
         M-d0    ->   backward-kill-line
         M-d$    ->   kill-line
         M-D     ->   kill-line
         M-d|    ->   delete-to-column
         M-d%    ->   delete-to-parenthesis
         M-e     ->   forward-word
         M-E     ->   forward-word
         M-f     ->   forward-find-char
         M-F     ->   backward-find-char
         M--     ->   up-history
         M-h     ->   cursor-left
         M-H     ->   beginning-of-history
         M-i     ->   vi-insert
         M-I     ->   vi-insert-at-bol
         M-j     ->   down-history
         M-J     ->   history-search-forward
         M-k     ->   up-history
         M-K     ->   history-search-backward
         M-l     ->   cursor-right
         M-L     ->   end-of-history
         M-n     ->   history-re-search-forward
         M-N     ->   history-re-search-backward
         M-p     ->   append-yank
         M-P     ->   yank
         M-r     ->   vi-replace-char
         M-R     ->   vi-overwrite
         M-s     ->   vi-forward-change-char
         M-S     ->   vi-change-line
         M-t     ->   forward-to-char
         M-T     ->   backward-to-char
         M-u     ->   vi-undo
         M-w     ->   forward-to-word
         M-W     ->   forward-to-word
         M-x     ->   forward-delete-char
         M-X     ->   backward-delete-char
         M-yh    ->   backward-copy-char
         M-y^H   ->   backward-copy-char
         M-y^?   ->   backward-copy-char
         M-yl    ->   forward-copy-char
         M-y\    ->   forward-copy-char  (Meta-y-space)
         M-ye    ->   forward-copy-word
         M-yE    ->   forward-copy-word
         M-yw    ->   forward-copy-word
         M-yW    ->   forward-copy-word
         M-yb    ->   backward-copy-word
         M-yB    ->   backward-copy-word
         M-yf    ->   forward-copy-find
         M-yF    ->   backward-copy-find
         M-yt    ->   forward-copy-to
         M-yT    ->   backward-copy-to
         M-y;    ->   copy-refind
         M-y,    ->   copy-invert-refind
         M-y^    ->   copy-to-bol
         M-y0    ->   copy-to-bol
         M-y$    ->   copy-rest-of-line
         M-yy    ->   copy-line
         M-Y     ->   copy-line
         M-y|    ->   copy-to-column
         M-y%    ->   copy-to-parenthesis
         M-^E    ->   emacs-mode
         M-^H    ->   cursor-left
         M-^?    ->   cursor-left
         M-^L    ->   clear-screen
         M-^N    ->   down-history
         M-^P    ->   up-history
         M-^R    ->   redisplay
         M-^D    ->   list-or-eof
         M-^I    ->   complete-word
         M-\r    ->   newline
         M-\n    ->   newline
         M-^X^R  ->   read-init-files
         M-^Xh   ->   list-history

         M-0, M-1, ... M-9  ->  digit-argument  (see below)

       Note that ^I is what the TAB key generates.


ENTERING REPEAT COUNTS

       Many of  the  key  binding  functions  described  previously,  take  an
       optional count, typed in before the target keysequence.  This is inter-
       preted as a repeat count by most bindings. A notable exception  is  the
       goto-column binding, which interprets the count as a column number.

       By default you can specify this count argument by pressing the meta key
       while typing in the numeric count. This relies  on  the  digit-argument
       action  being bound to Meta-0, Meta-1 etc.  Once any one of these bind-
       ings has been activated, you can optionally take your  finger  off  the
       meta  key  to type in the rest of the number, since every numeric digit
       thereafter is treated as part of the number, unless it is  preceded  by
       the  literal-next binding. As soon as a non-digit, or literal digit key
       is pressed the repeat count is terminated and either  causes  the  just
       typed  character to be added to the line that many times, or causes the
       next key-binding function to be given that argument.

       For example, in emacs mode, typing:

         M-12a

       causes the letter 'a' to be added to the line 12 times, whereas

         M-4M-c

       Capitalizes the next 4 words.

       In vi command mode the Meta modifier  is  automatically  added  to  all
       characters  typed  in,  so  to  enter  a count in vi command-mode, just
       involves typing in the number, just as it does in the vi editor itself.
       So for example, in vi command mode, typing:

         4w2x

       moves  the cursor four words to the right, then deletes two characters.

       You can also bind digit-argument to other key sequences. If  these  end
       in  a  numeric  digit,  that  digit gets appended to the current repeat
       count. If it doesn't end in a numeric digit,  a  new  repeat  count  is
       started  with  a  value  of zero, and can be completed by typing in the
       number, after letting go of the key which triggered the  digit-argument
       action.


FILES

       libtecla.a      -    The Tecla library
       libtecla.h      -    The Tecla header file.
       ~/.teclarc      -    The personal Tecla customization file.


SEE ALSO

       libtecla, gl_get_line, gl_io_mode, ef_expand_file,
       cpl_complete_word, pca_lookup_file


AUTHOR

       Martin Shepherd  (mcs@astro.caltech.edu)



                                                          tecla
genometools-1.5.1/src/external/libtecla-1.6.1/install-sh000077500000000000000000000127361211610345200227120ustar00rootroot00000000000000#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 genometools-1.5.1/src/external/libtecla-1.6.1/ioutil.c000066400000000000000000000302601211610345200223470ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include #include #include "ioutil.h" static int _io_pad_line(GlWriteFn *write_fn, void *data, int c, int n); /*....................................................................... * Display a left-justified string over multiple terminal lines, * taking account of the specified width of the terminal. Optional * indentation and an option prefix string can be specified to be * displayed at the start of each new terminal line used, and if * needed, a single paragraph can be broken across multiple calls. * Note that literal newlines in the input string can be used to force * a newline at any point, and that in order to allow individual * paragraphs to be written using multiple calls to this function, * unless an explicit newline character is specified at the end of the * string, a newline will not be started at the end of the last word * in the string. Note that when a new line is started between two * words that are separated by spaces, those spaces are not output, * whereas when a new line is started because a newline character was * found in the string, only the spaces before the newline character * are discarded. * * Input: * write_fn GlWriteFn * The callback function to use to write the * output. * data void * A pointer to arbitrary data to be passed to * write_fn() whenever it is called. * fp FILE * The stdio stream to write to. * indentation int The number of fill characters to use to * indent the start of each new terminal line. * prefix const char * An optional prefix string to write after the * indentation margin at the start of each new * terminal line. You can specify NULL if no * prefix is required. * suffix const char * An optional suffix string to draw at the end * of the terminal line. The line will be padded * where necessary to ensure that the suffix ends * in the last column of the terminal line. If * no suffix is desired, specify NULL. * fill_char int The padding character to use when indenting * and filling up to the suffix. * term_width int The width of the terminal being written to. * start int The number of characters already written to * the start of the current terminal line. This * is primarily used to allow individual * paragraphs to be written over multiple calls * to this function, but can also be used to * allow you to start the first line of a * paragraph with a different prefix or * indentation than those specified above. * string const char * The string to be written. * Output: * return int On error -1 is returned. Otherwise the * return value is the terminal column index at * which the cursor was left after writing the * final word in the string. Successful return * values can thus be passed verbatim to the * 'start' arguments of subsequent calls to * _io_display_text() to allow the printing of a * paragraph to be broken across multiple calls * to _io_display_text(). */ int _io_display_text(GlWriteFn *write_fn, void *data, int indentation, const char *prefix, const char *suffix, int fill_char, int term_width, int start, const char *string) { int ndone; /* The number of characters written from string[] */ int nnew; /* The number of characters to be displayed next */ int was_space; /* True if the previous character was a space or tab */ int last = start; /* The column number of the last character written */ int prefix_len; /* The length of the optional line prefix string */ int suffix_len; /* The length of the optional line prefix string */ int margin_width; /* The total number of columns used by the indentation */ /* margin and the prefix string. */ int i; /* * Check the arguments? */ if(!string || !write_fn) { errno = EINVAL; return -1; }; /* * Enforce sensible values on the arguments. */ if(term_width < 0) term_width = 0; if(indentation > term_width) indentation = term_width; else if(indentation < 0) indentation = 0; if(start > term_width) start = term_width; else if(start < 0) start = 0; /* * Get the length of the prefix string. */ prefix_len = prefix ? strlen(prefix) : 0; /* * Get the length of the suffix string. */ suffix_len = suffix ? strlen(suffix) : 0; /* * How many characters are devoted to indenting and prefixing each line? */ margin_width = indentation + prefix_len; /* * Write as many terminal lines as are needed to display the whole string. */ for(ndone=0; string[ndone]; start=0) { last = start; /* * Write spaces from the current position in the terminal line to the * width of the requested indentation margin. */ if(indentation > 0 && last < indentation) { if(_io_pad_line(write_fn, data, fill_char, indentation - last)) return -1; last = indentation; }; /* * If a prefix string has been specified, display it unless we have * passed where it should end in the terminal output line. */ if(prefix_len > 0 && last < margin_width) { int pstart = last - indentation; int plen = prefix_len - pstart; if(write_fn(data, prefix+pstart, plen) != plen) return -1; last = margin_width; }; /* * Locate the end of the last complete word in the string before * (term_width - start) characters have been seen. To handle the case * where a single word is wider than the available space after the * indentation and prefix margins, always make sure that at least one * word is printed after the margin, regardless of whether it won't * fit on the line. The two exceptions to this rule are if an embedded * newline is found in the string or the end of the string is reached * before any word has been seen. */ nnew = 0; was_space = 0; for(i=ndone; string[i] && (last+i-ndone < term_width - suffix_len || (nnew==0 && last==margin_width)); i++) { if(string[i] == '\n') { if(!was_space) nnew = i-ndone; break; } else if(isspace((int) string[i])) { if(!was_space) { nnew = i-ndone+1; was_space = 1; }; } else { was_space = 0; }; }; /* * Does the end of the string delimit the last word that will fit on the * output line? */ if(nnew==0 && string[i] == '\0') nnew = i-ndone; /* * Write the new line. */ if(write_fn(data, string+ndone, nnew) != nnew) return -1; ndone += nnew; last += nnew; /* * Start a newline unless we have reached the end of the input string. * In the latter case, in order to give the caller the chance to * concatenate multiple calls to _io_display_text(), omit the newline, * leaving it up to the caller to write this. */ if(string[ndone] != '\0') { /* * If a suffix has been provided, pad out the end of the line with spaces * such that the suffix will end in the right-most terminal column. */ if(suffix_len > 0) { int npad = term_width - suffix_len - last; if(npad > 0 && _io_pad_line(write_fn, data, fill_char, npad)) return -1; last += npad; if(write_fn(data, suffix, suffix_len) != suffix_len) return -1; last += suffix_len; }; /* * Start a new line. */ if(write_fn(data, "\n", 1) != 1) return -1; /* * Skip any spaces and tabs that follow the last word that was written. */ while(string[ndone] && isspace((int)string[ndone]) && string[ndone] != '\n') ndone++; /* * If the terminating character was a literal newline character, * skip it in the input string, since we just wrote it. */ if(string[ndone] == '\n') ndone++; last = 0; }; }; /* * Return the column number of the last character printed. */ return last; } /*....................................................................... * Write a given number of spaces to the specified stdio output string. * * Input: * write_fn GlWriteFn * The callback function to use to write the * output. * data void * A pointer to arbitrary data to be passed to * write_fn() whenever it is called. * c int The padding character. * n int The number of spaces to be written. * Output: * return int 0 - OK. * 1 - Error. */ static int _io_pad_line(GlWriteFn *write_fn, void *data, int c, int n) { enum {FILL_SIZE=20}; char fill[FILL_SIZE+1]; /* * Fill the buffer with the specified padding character. */ memset(fill, c, FILL_SIZE); fill[FILL_SIZE] = '\0'; /* * Write the spaces using the above literal string of spaces as * many times as needed to output the requested number of spaces. */ while(n > 0) { int nnew = n <= FILL_SIZE ? n : FILL_SIZE; if(write_fn(data, fill, nnew) != nnew) return 1; n -= nnew; }; return 0; } /*....................................................................... * The following is an output callback function which uses fwrite() * to write to the stdio stream specified via its callback data argument. * * Input: * data void * The stdio stream to write to, specified via a * (FILE *) pointer cast to (void *). * s const char * The string to be written. * n int The length of the prefix of s[] to attempt to * write. * Output: * return int The number of characters written from s[]. This * should normally be a number in the range 0 to n. * To signal that an I/O error occurred, return -1. */ GL_WRITE_FN(_io_write_stdio) { int ndone; /* The total number of characters written */ int nnew; /* The number of characters written in the latest write */ /* * The callback data is the stdio stream to write to. */ FILE *fp = (FILE *) data; /* * Because of signals we may need to do more than one write to output * the whole string. */ for(ndone=0; ndone #include #include #include #include #include "keytab.h" #include "strngmem.h" #include "getline.h" #include "errmsg.h" #include "hash.h" /* * When allocating or reallocating the key-binding table, how * many entries should be added? */ #define KT_TABLE_INC 100 /* * Define the size of the hash table that is used to associate action * names with action functions. This should be a prime number. */ #define KT_HASH_SIZE 113 /* * Define a binary-symbol-table object. */ struct KeyTab { ErrMsg *err; /* Information about the last error */ int size; /* The allocated dimension of table[] */ int nkey; /* The current number of members in the table */ KeySym *table; /* The table of lexically sorted key sequences */ HashTable *actions; /* The hash table of actions */ StringMem *smem; /* Memory for allocating strings */ }; static int _kt_extend_table(KeyTab *kt); static int _kt_parse_keybinding_string(const char *keyseq, char *binary, int *nc); static int _kt_compare_strings(const char *s1, int n1, const char *s2, int n2); static void _kt_assign_action(KeySym *sym, KtBinder binder, KtKeyFn *keyfn, void *data); static char _kt_backslash_escape(const char *string, const char **endp); static int _kt_is_emacs_meta(const char *string); static int _kt_is_emacs_ctrl(const char *string); static KtKeyMatch _kt_locate_keybinding(KeyTab *kt, const char *binary_keyseq, int nc, int *first, int *last); /*....................................................................... * Create a new key-binding symbol table. * * Output: * return KeyTab * The new object, or NULL on error. */ KeyTab *_new_KeyTab(void) { KeyTab *kt; /* The object to be returned */ /* * Allocate the container. */ kt = (KeyTab *) malloc(sizeof(KeyTab)); if(!kt) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_KeyTab(). */ kt->err = NULL; kt->size = KT_TABLE_INC; kt->nkey = 0; kt->table = NULL; kt->actions = NULL; kt->smem = NULL; /* * Allocate a place to record error messages. */ kt->err = _new_ErrMsg(); if(!kt->err) return _del_KeyTab(kt); /* * Allocate the table. */ kt->table = (KeySym *) malloc(sizeof(kt->table[0]) * kt->size); if(!kt->table) { errno = ENOMEM; return _del_KeyTab(kt); }; /* * Allocate a hash table of actions. */ kt->actions = _new_HashTable(NULL, KT_HASH_SIZE, IGNORE_CASE, NULL, 0); if(!kt->actions) return _del_KeyTab(kt); /* * Allocate a string allocation object. This allows allocation of * small strings without fragmenting the heap. */ kt->smem = _new_StringMem(KT_TABLE_INC); if(!kt->smem) return _del_KeyTab(kt); return kt; } /*....................................................................... * Delete a KeyTab object. * * Input: * kt KeyTab * The object to be deleted. * Output: * return KeyTab * The deleted object (always NULL). */ KeyTab *_del_KeyTab(KeyTab *kt) { if(kt) { if(kt->table) free(kt->table); kt->actions = _del_HashTable(kt->actions); kt->smem = _del_StringMem(kt->smem, 1); kt->err = _del_ErrMsg(kt->err); free(kt); }; return NULL; } /*....................................................................... * Increase the size of the table to accomodate more keys. * * Input: * kt KeyTab * The table to be extended. * Output: * return int 0 - OK. * 1 - Error. */ static int _kt_extend_table(KeyTab *kt) { /* * Attempt to increase the size of the table. */ KeySym *newtab = (KeySym *) realloc(kt->table, sizeof(kt->table[0]) * (kt->size + KT_TABLE_INC)); /* * Failed? */ if(!newtab) { _err_record_msg(kt->err, "Can't extend keybinding table", END_ERR_MSG); errno = ENOMEM; return 1; }; /* * Install the resized table. */ kt->table = newtab; kt->size += KT_TABLE_INC; return 0; } /*....................................................................... * Add, update or remove a keybinding to the table. * * Input: * kt KeyTab * The table to add the binding to. * binder KtBinder The source of the binding. * keyseq const char * The key-sequence to bind. * action char * The action to associate with the key sequence, or * NULL to remove the action associated with the * key sequence. * Output: * return int 0 - OK. * 1 - Error. */ int _kt_set_keybinding(KeyTab *kt, KtBinder binder, const char *keyseq, const char *action) { KtKeyFn *keyfn; /* The action function */ void *data; /* The callback data of the action function */ /* * Check arguments. */ if(kt==NULL || !keyseq) { errno = EINVAL; if(kt) _err_record_msg(kt->err, "NULL argument(s)", END_ERR_MSG); return 1; }; /* * Lookup the function that implements the specified action. */ if(!action) { keyfn = 0; data = NULL; } else { Symbol *sym = _find_HashSymbol(kt->actions, action); if(!sym) { _err_record_msg(kt->err, "Unknown key-binding action: ", action, END_ERR_MSG); errno = EINVAL; return 1; }; keyfn = (KtKeyFn *) sym->fn; data = sym->data; }; /* * Record the action in the table. */ return _kt_set_keyfn(kt, binder, keyseq, keyfn, data); } /*....................................................................... * Add, update or remove a keybinding to the table, specifying an action * function directly. * * Input: * kt KeyTab * The table to add the binding to. * binder KtBinder The source of the binding. * keyseq char * The key-sequence to bind. * keyfn KtKeyFn * The action function, or NULL to remove any existing * action function. * data void * A pointer to anonymous data to be passed to keyfn * whenever it is called. * Output: * return int 0 - OK. * 1 - Error. */ int _kt_set_keyfn(KeyTab *kt, KtBinder binder, const char *keyseq, KtKeyFn *keyfn, void *data) { const char *kptr; /* A pointer into keyseq[] */ char *binary; /* The binary version of keyseq[] */ int nc; /* The number of characters in binary[] */ int first,last; /* The first and last entries in the table which */ /* minimally match. */ int size; /* The size to allocate for the binary string */ int i; /* * Check arguments. */ if(kt==NULL || !keyseq) { errno = EINVAL; if(kt) _err_record_msg(kt->err, "NULL argument(s)", END_ERR_MSG); return 1; }; /* * Work out a pessimistic estimate of how much space will be needed * for the binary copy of the string, noting that binary meta characters * embedded in the input string get split into two characters. */ for(size=0,kptr = keyseq; *kptr; kptr++) size += IS_META_CHAR(*kptr) ? 2 : 1; /* * Allocate a string that has the length of keyseq[]. */ binary = _new_StringMemString(kt->smem, size + 1); if(!binary) { errno = ENOMEM; _err_record_msg(kt->err, "Insufficient memory to record key sequence", END_ERR_MSG); return 1; }; /* * Convert control and octal character specifications to binary characters. */ if(_kt_parse_keybinding_string(keyseq, binary, &nc)) { binary = _del_StringMemString(kt->smem, binary); return 1; }; /* * Lookup the position in the table at which to insert the binding. */ switch(_kt_locate_keybinding(kt, binary, nc, &first, &last)) { /* * If an exact match for the key-sequence is already in the table, * simply replace its binding function (or delete the entry if * the new binding is 0). */ case KT_EXACT_MATCH: if(keyfn) { _kt_assign_action(kt->table + first, binder, keyfn, data); } else { _del_StringMemString(kt->smem, kt->table[first].keyseq); memmove(kt->table + first, kt->table + first + 1, (kt->nkey - first - 1) * sizeof(kt->table[0])); kt->nkey--; }; binary = _del_StringMemString(kt->smem, binary); break; /* * If an ambiguous match has been found and we are installing a * callback, then our new key-sequence would hide all of the ambiguous * matches, so we shouldn't allow it. */ case KT_AMBIG_MATCH: if(keyfn) { _err_record_msg(kt->err, "Can't bind \"", keyseq, "\", because it is a prefix of another binding", END_ERR_MSG); binary = _del_StringMemString(kt->smem, binary); errno = EPERM; return 1; }; break; /* * If the entry doesn't exist, create it. */ case KT_NO_MATCH: /* * Add a new binding? */ if(keyfn) { KeySym *sym; /* * We will need a new entry, extend the table if needed. */ if(kt->nkey + 1 > kt->size) { if(_kt_extend_table(kt)) { binary = _del_StringMemString(kt->smem, binary); return 1; }; }; /* * Make space to insert the new key-sequence before 'last'. */ if(last < kt->nkey) { memmove(kt->table + last + 1, kt->table + last, (kt->nkey - last) * sizeof(kt->table[0])); }; /* * Insert the new binding in the vacated position. */ sym = kt->table + last; sym->keyseq = binary; sym->nc = nc; for(i=0; iactions + i; action->fn = 0; action->data = NULL; }; sym->binder = -1; _kt_assign_action(sym, binder, keyfn, data); kt->nkey++; }; break; case KT_BAD_MATCH: binary = _del_StringMemString(kt->smem, binary); return 1; break; }; return 0; } /*....................................................................... * Perform a min-match lookup of a key-binding. * * Input: * kt KeyTab * The keybinding table to lookup in. * binary_keyseq char * The binary key-sequence to lookup. * nc int the number of characters in keyseq[]. * Input/Output: * first,last int * If there is an ambiguous or exact match, the indexes * of the first and last symbols that minimally match * will be assigned to *first and *last respectively. * If there is no match, then first and last will * bracket the location where the symbol should be * inserted. * Output: * return KtKeyMatch One of the following enumerators: * KT_EXACT_MATCH - An exact match was found. * KT_AMBIG_MATCH - An ambiguous match was found. * KT_NO_MATCH - No match was found. * KT_BAD_MATCH - An error occurred while searching. */ static KtKeyMatch _kt_locate_keybinding(KeyTab *kt, const char *binary_keyseq, int nc, int *first, int *last) { int mid; /* The index at which to bisect the table */ int bot; /* The lowest index of the table not searched yet */ int top; /* The highest index of the table not searched yet */ int test; /* The return value of strcmp() */ /* * Perform a binary search for the key-sequence. */ bot = 0; top = kt->nkey - 1; while(top >= bot) { mid = (top + bot)/2; test = _kt_compare_strings(kt->table[mid].keyseq, kt->table[mid].nc, binary_keyseq, nc); if(test > 0) top = mid - 1; else if(test < 0) bot = mid + 1; else { *first = *last = mid; return KT_EXACT_MATCH; }; }; /* * An exact match wasn't found, but top is the index just below the * index where a match would be found, and bot is the index just above * where the match ought to be found. */ *first = top; *last = bot; /* * See if any ambiguous matches exist, and if so make *first and *last * refer to the first and last matches. */ if(*last < kt->nkey && kt->table[*last].nc > nc && _kt_compare_strings(kt->table[*last].keyseq, nc, binary_keyseq, nc)==0) { *first = *last; while(*last+1 < kt->nkey && kt->table[*last+1].nc > nc && _kt_compare_strings(kt->table[*last+1].keyseq, nc, binary_keyseq, nc)==0) (*last)++; return KT_AMBIG_MATCH; }; /* * No match. */ return KT_NO_MATCH; } /*....................................................................... * Lookup the sub-array of key-bindings who's key-sequences minimally * match a given key-sequence. * * Input: * kt KeyTab * The keybinding table to lookup in. * binary_keyseq char * The binary key-sequence to lookup. * nc int the number of characters in keyseq[]. * Input/Output: * matches KeySym ** The array of minimally matching symbols * can be found in (*matches)[0..nmatch-1], unless * no match was found, in which case *matches will * be set to NULL. * nmatch int The number of ambiguously matching symbols. This * will be 0 if there is no match, 1 for an exact * match, and a number greater than 1 for an ambiguous * match. * Output: * return KtKeyMatch One of the following enumerators: * KT_EXACT_MATCH - An exact match was found. * KT_AMBIG_MATCH - An ambiguous match was found. * KT_NO_MATCH - No match was found. * KT_BAD_MATCH - An error occurred while searching. */ KtKeyMatch _kt_lookup_keybinding(KeyTab *kt, const char *binary_keyseq, int nc, KeySym **matches, int *nmatch) { KtKeyMatch status; /* The return status */ int first,last; /* The indexes of the first and last matching entry */ /* in the symbol table. */ /* * Check the arguments. */ if(!kt || !binary_keyseq || !matches || !nmatch || nc < 0) { errno = EINVAL; if(kt) _err_record_msg(kt->err, "NULL argument(s)", END_ERR_MSG); return KT_BAD_MATCH; }; /* * Lookup the indexes of the binding-table entries that bracket the * target key-sequence. */ status = _kt_locate_keybinding(kt, binary_keyseq, nc, &first, &last); /* * Translate the indexes into the corresponding subarray of matching * table entries. */ switch(status) { case KT_EXACT_MATCH: case KT_AMBIG_MATCH: *matches = kt->table + first; *nmatch = last - first + 1; break; default: *matches = NULL; *nmatch = 0; break; }; return status; } /*....................................................................... * Convert a keybinding string into a uniq binary representation. * * Control characters can be given directly in their binary form, * expressed as either ^ or C-, followed by the character, expressed in * octal, like \129 or via C-style backslash escapes, with the addition * of '\E' to denote the escape key. Similarly, meta characters can be * given directly in binary or expressed as M- followed by the character. * Meta characters are recorded as two characters in the binary output * string, the first being the escape key, and the second being the key * that was modified by the meta key. This means that binding to * \EA or ^[A or M-A are all equivalent. * * Input: * keyseq char * The key sequence being added. * Input/Output: * binary char * The binary version of the key sequence will be * assigned to binary[], which must have at least * as many characters as keyseq[] plus the number * of embedded binary meta characters. * nc int * The number of characters assigned to binary[] * will be recorded in *nc. * Output: * return int 0 - OK. * 1 - Error. */ static int _kt_parse_keybinding_string(const char *keyseq, char *binary, int *nc) { const char *iptr = keyseq; /* Pointer into keyseq[] */ char *optr = binary; /* Pointer into binary[] */ char c; /* An intermediate character */ /* * Parse the input characters until they are exhausted or the * output string becomes full. */ while(*iptr) { /* * Check for special characters. */ switch(*iptr) { case '^': /* A control character specification */ /* * Convert the caret expression into the corresponding control * character unless no character follows the caret, in which case * record a literal caret. */ if(iptr[1]) { /* * Get the next, possibly escaped, character. */ if(iptr[1] == '\\') { c = _kt_backslash_escape(iptr+2, &iptr); } else { c = iptr[1]; iptr += 2; }; /* * Convert the character to a control character. */ *optr++ = MAKE_CTRL(c); } else { *optr++ = *iptr++; }; break; /* * A backslash-escaped character? */ case '\\': /* * Convert the escape sequence to a binary character. */ *optr++ = _kt_backslash_escape(iptr+1, &iptr); break; /* * Possibly an emacs-style meta character? */ case 'M': if(_kt_is_emacs_meta(iptr)) { *optr++ = GL_ESC_CHAR; iptr += 2; } else { *optr++ = *iptr++; }; break; /* * Possibly an emacs-style control character specification? */ case 'C': if(_kt_is_emacs_ctrl(iptr)) { *optr++ = MAKE_CTRL(iptr[2]); iptr += 3; } else { *optr++ = *iptr++; }; break; default: /* * Convert embedded meta characters into an escape character followed * by the meta-unmodified character. */ if(IS_META_CHAR(*iptr)) { *optr++ = GL_ESC_CHAR; *optr++ = META_TO_CHAR(*iptr); iptr++; /* * To allow keysequences that start with printable characters to * be distinguished from the cursor-key keywords, prepend a backslash * to the former. This same operation is performed in gl_interpret_char() * before looking up a keysequence that starts with a printable character. */ } else if(iptr==keyseq && !IS_CTRL_CHAR(*iptr) && strcmp(keyseq, "up") != 0 && strcmp(keyseq, "down") != 0 && strcmp(keyseq, "left") != 0 && strcmp(keyseq, "right") != 0) { *optr++ = '\\'; *optr++ = *iptr++; } else { *optr++ = *iptr++; }; }; }; /* * How many characters were placed in the output array? */ *nc = optr - binary; return 0; } /*....................................................................... * Add, remove or modify an action. * * Input: * kt KeyTab * The key-binding table. * action char * The name of the action. * fn KtKeyFn * The function that implements the action, or NULL * to remove an existing action. * data void * A pointer to arbitrary callback data to pass to the * action function whenever it is called. * Output: * return int 0 - OK. * 1 - Error. */ int _kt_set_action(KeyTab *kt, const char *action, KtKeyFn *fn, void *data) { Symbol *sym; /* The symbol table entry of the action */ /* * Check the arguments. */ if(!kt || !action) { errno = EINVAL; if(kt) _err_record_msg(kt->err, "NULL argument(s)", END_ERR_MSG); return 1; }; /* * If no function was provided, delete an existing action. */ if(!fn) { sym = _del_HashSymbol(kt->actions, action); return 0; }; /* * If the action already exists, replace its action function. */ sym = _find_HashSymbol(kt->actions, action); if(sym) { sym->fn = (void (*)(void))fn; sym->data = data; return 0; }; /* * Add a new action. */ if(!_new_HashSymbol(kt->actions, action, 0, (void (*)(void))fn, data, 0)) { _err_record_msg(kt->err, "Insufficient memory to record key-binding action", END_ERR_MSG); return 1; }; return 0; } /*....................................................................... * Compare two strings of specified length which may contain embedded * ascii NUL's. * * Input: * s1 char * The first of the strings to be compared. * n1 int The length of the string in s1. * s2 char * The second of the strings to be compared. * n2 int The length of the string in s2. * Output: * return int < 0 if(s1 < s2) * 0 if(s1 == s2) * > 0 if(s1 > s2) */ static int _kt_compare_strings(const char *s1, int n1, const char *s2, int n2) { int i; /* * Find the first character where the two strings differ. */ for(i=0; i= KTB_NBIND) return; /* * Record the action according to its source. */ action = sym->actions + binder; action->fn = keyfn; action->data = data; /* * Find the highest priority binding source that has supplied an * action. Note that the actions[] array is ordered in order of * descreasing priority, so the first entry that contains a function * is the one to use. */ for(i=0; iactions[i].fn; i++) ; /* * Record the index of this action for use during lookups. */ sym->binder = i < KTB_NBIND ? i : -1; return; } /*....................................................................... * Remove all key bindings that came from a specified source. * * Input: * kt KeyTab * The table of key bindings. * binder KtBinder The source of the bindings to be cleared. */ void _kt_clear_bindings(KeyTab *kt, KtBinder binder) { int oldkey; /* The index of a key in the original binding table */ int newkey; /* The index of a key in the updated binding table */ /* * If there is no table, then no bindings exist to be deleted. */ if(!kt) return; /* * Clear bindings of the given source. */ for(oldkey=0; oldkeynkey; oldkey++) _kt_assign_action(kt->table + oldkey, binder, 0, NULL); /* * Delete entries that now don't have a binding from any source. */ newkey = 0; for(oldkey=0; oldkeynkey; oldkey++) { KeySym *sym = kt->table + oldkey; if(sym->binder < 0) { _del_StringMemString(kt->smem, sym->keyseq); } else { if(oldkey != newkey) kt->table[newkey] = *sym; newkey++; }; }; /* * Record the number of keys that were kept. */ kt->nkey = newkey; return; } /*....................................................................... * Translate a backslash escape sequence to a binary character. * * Input: * string const char * The characters that follow the backslash. * Input/Output: * endp const char ** If endp!=NULL, on return *endp will be made to * point to the character in string[] which follows * the escape sequence. * Output: * return char The binary character. */ static char _kt_backslash_escape(const char *string, const char **endp) { char c; /* The output character */ /* * Is the backslash followed by one or more octal digits? */ switch(*string) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': c = strtol(string, (char **)&string, 8); break; case 'a': c = '\a'; string++; break; case 'b': c = '\b'; string++; break; case 'e': case 'E': /* Escape */ c = GL_ESC_CHAR; string++; break; case 'f': c = '\f'; string++; break; case 'n': c = '\n'; string++; break; case 'r': c = '\r'; string++; break; case 't': c = '\t'; string++; break; case 'v': c = '\v'; string++; break; case '\0': c = '\\'; break; default: c = *string++; break; }; /* * Report the character which follows the escape sequence. */ if(endp) *endp = string; return c; } /*....................................................................... * Return non-zero if the next two characters are M- and a third character * follows. Otherwise return 0. * * Input: * string const char * The sub-string to scan. * Output: * return int 1 - The next two characters are M- and these * are followed by at least one character. * 0 - The next two characters aren't M- or no * character follows a M- pair. */ static int _kt_is_emacs_meta(const char *string) { return *string++ == 'M' && *string++ == '-' && *string; } /*....................................................................... * Return non-zero if the next two characters are C- and a third character * follows. Otherwise return 0. * * Input: * string const char * The sub-string to scan. * Output: * return int 1 - The next two characters are C- and these * are followed by at least one character. * 0 - The next two characters aren't C- or no * character follows a C- pair. */ static int _kt_is_emacs_ctrl(const char *string) { return *string++ == 'C' && *string++ == '-' && *string; } /*....................................................................... * Merge an array of bindings with existing bindings. * * Input: * kt KeyTab * The table of key bindings. * binder KtBinder The source of the bindings. * bindings const KtKeyBinding * The array of bindings. * n int The number of bindings in bindings[]. * Output: * return int 0 - OK. * 1 - Error. */ int _kt_add_bindings(KeyTab *kt, KtBinder binder, const KtKeyBinding *bindings, unsigned n) { int i; /* * Check the arguments. */ if(!kt || !bindings) { errno = EINVAL; if(kt) _err_record_msg(kt->err, "NULL argument(s)", END_ERR_MSG); return 1; }; /* * Install the array of bindings. */ for(i=0; ierr, "NULL argument(s)", END_ERR_MSG); return 1; }; /* * Lookup the symbol table entry of the action. */ sym = _find_HashSymbol(kt->actions, action); if(!sym) return 1; /* * Return the function and ccallback data associated with the action. */ if(fn) *fn = (KtKeyFn *) sym->fn; if(data) *data = sym->data; return 0; } /*....................................................................... * Return extra information (ie. in addition to that provided by errno) * about the last error to occur in any of the public functions of this * module. * * Input: * kt KeyTab * The table of key bindings. * Output: * return const char * A pointer to the internal buffer in which * the error message is temporarily stored. */ const char *_kt_last_error(KeyTab *kt) { return kt ? _err_get_msg(kt->err) : "NULL KeyTab argument"; } genometools-1.5.1/src/external/libtecla-1.6.1/keytab.h000066400000000000000000000127601211610345200223330ustar00rootroot00000000000000#ifndef keytab_h #define keytab_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include "libtecla.h" /*-----------------------------------------------------------------------* * This module defines a binary-search symbol table of key-bindings. * *-----------------------------------------------------------------------*/ /* * All key-binding functions are defined as follows. * * Input: * gl GetLine * The resource object of this library. * count int A positive repeat count specified by the user, * or 1. Action functions should ignore this if * repeating the action multiple times isn't * appropriate. * data void * A pointer to action-specific data, * cast to (void *). * Output: * return int 0 - OK. * 1 - Error. */ #define KT_KEY_FN(fn) int (fn)(__attribute__ ((unused)) GetLine *gl, __attribute__ ((unused)) int count, __attribute__ ((unused)) void *data) typedef KT_KEY_FN(KtKeyFn); /* * Allow the association of arbitrary callback data with each action * function. */ typedef struct { KtKeyFn *fn; /* The acion function */ void *data; /* A pointer to arbitrary data to be passed to */ /* fn() whenever it is called. */ } KtAction; /* * Enumerate the possible sources of key-bindings in order of decreasing * priority. */ typedef enum { KTB_USER, /* This is a binding being set by the user */ KTB_NORM, /* This is the default binding set by the library */ KTB_TERM, /* This is a binding taken from the terminal settings */ /* The following entry must always be last */ KTB_NBIND /* The number of binding sources listed above */ } KtBinder; /* * Define an entry of a key-binding binary symbol table. */ typedef struct { char *keyseq; /* The key sequence that triggers the macro */ int nc; /* The number of characters in keyseq[] */ KtAction actions[KTB_NBIND]; /* Bindings from different sources */ int binder; /* The index of the highest priority element */ /* of actions[] that has been assigned an */ /* action function, or -1 if none have. */ } KeySym; /* * Provide an opaque type alias to the symbol table container. */ typedef struct KeyTab KeyTab; /* * Create a new symbol table. */ KeyTab *_new_KeyTab(void); /* * Delete the symbol table. */ KeyTab *_del_KeyTab(KeyTab *kt); int _kt_set_keybinding(KeyTab *kt, KtBinder binder, const char *keyseq, const char *action); int _kt_set_keyfn(KeyTab *kt, KtBinder binder, const char *keyseq, KtKeyFn *fn, void *data); int _kt_set_action(KeyTab *kt, const char *action, KtKeyFn *fn, void *data); /* * Lookup the function that implements a given action. */ int _kt_lookup_action(KeyTab *kt, const char *action, KtKeyFn **fn, void **data); typedef enum { KT_EXACT_MATCH, /* An exact match was found */ KT_AMBIG_MATCH, /* An ambiguous match was found */ KT_NO_MATCH, /* No match was found */ KT_BAD_MATCH /* An error occurred while searching */ } KtKeyMatch; KtKeyMatch _kt_lookup_keybinding(KeyTab *kt, const char *binary_keyseq, int nc, KeySym **matches, int *nmatch); /* * Remove all key bindings that came from a specified source. */ void _kt_clear_bindings(KeyTab *kt, KtBinder binder); /* * When installing an array of keybings each binding is defined by * an element of the following type: */ typedef struct { const char *keyseq; /* The sequence of keys that trigger this binding */ const char *action; /* The name of the action function that is triggered */ } KtKeyBinding; /* * Merge an array of bindings with existing bindings. */ int _kt_add_bindings(KeyTab *kt, KtBinder binder, const KtKeyBinding *bindings, unsigned n); /* * Get information about the last error in this module. */ const char *_kt_last_error(KeyTab *kt); #endif genometools-1.5.1/src/external/libtecla-1.6.1/libtecla.h000066400000000000000000002436351211610345200226420ustar00rootroot00000000000000#ifndef libtecla_h #define libtecla_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #ifdef __cplusplus extern "C" { #endif #include /* FILE * */ #include /* size_t */ #include /* time_t */ #include /* struct sigaction */ /* * The following are the three components of the libtecla version number. * Note that it is better to use the libtecla_version() function than these * macros since the macros only tell you which version of the library your * code was compiled against, whereas the libtecla_version() function * tells you which version of the shared tecla library your program is * actually linked to. */ #define TECLA_MAJOR_VER 1 #define TECLA_MINOR_VER 6 #define TECLA_MICRO_VER 1 /*....................................................................... * Query the version number of the tecla library. * * Input: * major int * The major version number of the library * will be assigned to *major. This number is * only incremented when a change to the library is * made that breaks binary (shared library) and/or * compilation backwards compatibility. * minor int * The minor version number of the library * will be assigned to *minor. This number is * incremented whenever new functions are added to * the public API. * micro int * The micro version number of the library will be * assigned to *micro. This number is incremented * whenever internal changes are made that don't * change the public API, such as bug fixes and * performance enhancements. */ void libtecla_version(int *major, int *minor, int *micro); /*----------------------------------------------------------------------- * The getline module provides interactive command-line input, recall * and editing by users at terminals. See the gl_getline(3) man page for * more details. *-----------------------------------------------------------------------*/ /* * Provide an opaque handle for the resource object that is defined in * getline.h. */ typedef struct GetLine GetLine; /* * The following two functions are used to create and delete the * resource objects that are used by the gl_getline() function. */ GetLine *new_GetLine(size_t linelen, size_t histlen); GetLine *del_GetLine(GetLine *gl); /* * Read a line into an internal buffer of gl. */ char *gl_get_line(GetLine *gl, const char *prompt, const char *start_line, int start_pos); /*....................................................................... * Prompt the user for a single-character reply. * * Input: * gl GetLine * A resource object returned by new_GetLine(). * prompt char * The prompt to prefix the query with, or NULL * to reuse the previous prompt. * defchar char The character to substitute if the * user simply hits return, or '\n' if you don't * need to substitute anything. * Output: * return int The character that was read, or EOF if the read * had to be aborted (in which case you can call * gl_return_status() to find out why). */ int gl_query_char(GetLine *gl, const char *prompt, char defchar); /*....................................................................... * Read a single uninterpretted character from the user, without * displaying anything. * * Input: * gl GetLine * A resource object previously returned by * new_GetLine(). * Output: * return int The character that was read, or EOF if the read * had to be aborted (in which case you can call * gl_return_status() to find out why). */ int gl_read_char(GetLine *gl); /* * Configure the application specific and/or user-specific behavior of * gl_get_line(). */ int gl_configure_getline(GetLine *gl, const char *app_string, const char *app_file, const char *user_file); /* * The following enumerators specify the origin of a key binding, and * are listed in order of decreasing priority, such that user-specified * key-bindings take precedence over application default bindings. */ typedef enum { GL_USER_KEY, /* A key-binding specified by the user */ GL_APP_KEY /* A key-binding specified by the application */ } GlKeyOrigin; /* * Bind a key sequence to a given action. If action==NULL, unbind the * key-sequence. */ int gl_bind_keyseq(GetLine *gl, GlKeyOrigin origin, const char *keyseq, const char *action); /*----------------------------------------------------------------------- * The file-expansion module provides facilities for expanding ~user/ and * $envvar expressions, and for expanding glob-style wildcards. * See the ef_expand_file(3) man page for more details. *-----------------------------------------------------------------------*/ /* * ExpandFile objects contain the resources needed to expand pathnames. */ typedef struct ExpandFile ExpandFile; /* * The following functions are used to create and delete the resource * objects that are used by the ef_expand_file() function. */ ExpandFile *new_ExpandFile(void); ExpandFile *del_ExpandFile(ExpandFile *ef); /* * A container of the following type is returned by ef_expand_file(). */ typedef struct { int exists; /* True if the files in files[] currently exist. */ /* This only time that this may not be true is if */ /* the input filename didn't contain any wildcards */ /* and thus wasn't matched against existing files. */ /* In this case the single entry in 'nfile' may not */ /* refer to an existing file. */ int nfile; /* The number of files in files[] */ char **files; /* An array of 'nfile' filenames. */ } FileExpansion; /* * The ef_expand_file() function expands a specified pathname, converting * ~user/ and ~/ patterns at the start of the pathname to the * corresponding home directories, replacing $envvar with the value of * the corresponding environment variable, and then, if there are any * wildcards, matching these against existing filenames. * * If no errors occur, a container is returned containing the array of * files that resulted from the expansion. If there were no wildcards * in the input pathname, this will contain just the original pathname * after expansion of ~ and $ expressions. If there were any wildcards, * then the array will contain the files that matched them. Note that * if there were any wildcards but no existing files match them, this * is counted as an error and NULL is returned. * * The supported wildcards and their meanings are: * * - Match any sequence of zero or more characters. * ? - Match any single character. * [chars] - Match any single character that appears in 'chars'. * If 'chars' contains an expression of the form a-b, * then any character between a and b, including a and b, * matches. The '-' character looses its special meaning * as a range specifier when it appears at the start * of the sequence of characters. * [^chars] - The same as [chars] except that it matches any single * character that doesn't appear in 'chars'. * * Wildcard expressions are applied to individual filename components. * They don't match across directory separators. A '.' character at * the beginning of a filename component must also be matched * explicitly by a '.' character in the input pathname, since these * are UNIX's hidden files. * * Input: * fe ExpandFile * The pathname expansion resource object. * path const char * The path name to be expanded. * pathlen int The length of the suffix of path[] that * constitutes the filename to be expanded, * or -1 to specify that the whole of the * path string should be used. * Output: * return FileExpansion * A pointer to a results container within the * given ExpandFile object. This contains an * array of the pathnames that resulted from * expanding ~ and $ expressions and from * matching any wildcards, sorted into lexical * order. * * This container and its contents will be * recycled on subsequent calls, so if you need * to keep the results of two successive runs, * you will either have to allocate a private * copy of the array, or use two ExpandFile * objects. * * On error, NULL is returned. A description * of the error can be acquired by calling the * ef_last_error() function. */ FileExpansion *ef_expand_file(ExpandFile *ef, const char *path, int pathlen); /*....................................................................... * Print out an array of matching files. * * Input: * result FileExpansion * The container of the sorted array of * expansions. * fp FILE * The output stream to write to. * term_width int The width of the terminal. * Output: * return int 0 - OK. * 1 - Error. */ int ef_list_expansions(FileExpansion *result, FILE *fp, int term_width); /* * The ef_last_error() function returns a description of the last error * that occurred in a call ef_expand_file(). Note that this message is * contained in an array which is allocated as part of *ef, and its * contents thus potentially change on every call to ef_expand_file(). */ const char *ef_last_error(ExpandFile *ef); /*----------------------------------------------------------------------- * The WordCompletion module is used for completing incomplete words, such * as filenames. Programs can use functions within this module to register * their own customized completion functions. *-----------------------------------------------------------------------*/ /* * Ambiguous completion matches are recorded in objects of the * following type. */ typedef struct WordCompletion WordCompletion; /* * Create a new completion object. */ WordCompletion *new_WordCompletion(void); /* * Delete a redundant completion object. */ WordCompletion *del_WordCompletion(WordCompletion *cpl); /*....................................................................... * Callback functions declared and prototyped using the following macro * are called upon to return an array of possible completion suffixes * for the token that precedes a specified location in the given * input line. It is up to this function to figure out where the token * starts, and to call cpl_add_completion() to register each possible * completion before returning. * * Input: * cpl WordCompletion * An opaque pointer to the object that will * contain the matches. This should be filled * via zero or more calls to cpl_add_completion(). * data void * The anonymous 'data' argument that was * passed to cpl_complete_word() or * gl_customize_completion()). * line const char * The current input line. * word_end int The index of the character in line[] which * follows the end of the token that is being * completed. * Output * return int 0 - OK. * 1 - Error. */ #define CPL_MATCH_FN(fn) int (fn)(WordCompletion *cpl, void *data, \ const char *line, int word_end) typedef CPL_MATCH_FN(CplMatchFn); /*....................................................................... * Optional callback functions declared and prototyped using the * following macro are called upon to return non-zero if a given * file, specified by its pathname, is to be included in a list of * completions. * * Input: * data void * The application specified pointer which * was specified when this callback function * was registered. This can be used to have * anything you like passed to your callback. * pathname const char * The pathname of the file to be checked to * see if it should be included in the list * of completions. * Output * return int 0 - Ignore this file. * 1 - Do include this file in the list * of completions. */ #define CPL_CHECK_FN(fn) int (fn)(__attribute__ ((unused)) void *data, const char *pathname) typedef CPL_CHECK_FN(CplCheckFn); /* * You can use the following CplCheckFn callback function to only * have executables included in a list of completions. */ CPL_CHECK_FN(cpl_check_exe); /* * cpl_file_completions() is the builtin filename completion callback * function. This can also be called by your own custom CPL_MATCH_FN() * callback functions. To do this pass on all of the arguments of your * custom callback function to cpl_file_completions(), with the exception * of the (void *data) argument. The data argument should either be passed * NULL to request the default behaviour of the file-completion function, * or be passed a pointer to a CplFileConf structure (see below). In the * latter case the contents of the structure modify the behavior of the * file-completer. */ CPL_MATCH_FN(cpl_file_completions); /* * Objects of the following type can be used to change the default * behavior of the cpl_file_completions() callback function. */ typedef struct CplFileConf CplFileConf; /* * If you want to change the behavior of the cpl_file_completions() * callback function, call the following function to allocate a * configuration object, then call one or more of the subsequent * functions to change any of the default configuration parameters * that you don't want. This function returns NULL when there is * insufficient memory. */ CplFileConf *new_CplFileConf(void); /* * If backslashes in the prefix being passed to cpl_file_completions() * should be treated as literal characters, call the following function * with literal=1. Otherwise the default is to treat them as escape * characters which remove the special meanings of spaces etc.. */ void cfc_literal_escapes(CplFileConf *cfc, int literal); /* * Before calling cpl_file_completions(), call this function if you * know the index at which the filename prefix starts in the input line. * Otherwise by default, or if you specify start_index to be -1, the * filename is taken to start after the first unescaped space preceding * the cursor, or the start of the line, which ever comes first. */ void cfc_file_start(CplFileConf *cfc, int start_index); /* * If you only want certain types of files to be included in the * list of completions, use the following function to specify a * callback function which will be called to ask whether a given file * should be included. The chk_data argument is will be passed to the * callback function whenever it is called and can be anything you want. */ void cfc_set_check_fn(CplFileConf *cfc, CplCheckFn *chk_fn, void *chk_data); /* * The following function deletes a CplFileConf objects previously * returned by new_CplFileConf(). It always returns NULL. */ CplFileConf *del_CplFileConf(CplFileConf *cfc); /* * The following configuration structure is deprecated. Do not change * its contents, since this will break any programs that still use it, * and don't use it in new programs. Instead use opaque CplFileConf * objects as described above. cpl_file_completions() figures out * what type of structure you pass it, by virtue of a magic int code * placed at the start of CplFileConf object by new_CplFileConf(). */ typedef struct { int escaped; /* Opposite to the argument of cfc_literal_escapes() */ int file_start; /* Equivalent to the argument of cfc_file_start() */ } CplFileArgs; /* * This initializes the deprecated CplFileArgs structures. */ void cpl_init_FileArgs(CplFileArgs *cfa); /*....................................................................... * When an error occurs while performing a completion, custom completion * callback functions should register a terse description of the error * by calling cpl_record_error(). This message will then be returned on * the next call to cpl_last_error() and used by getline to display an * error message to the user. * * Input: * cpl WordCompletion * The string-completion resource object that was * originally passed to the callback. * errmsg const char * The description of the error. */ void cpl_record_error(WordCompletion *cpl, const char *errmsg); /*....................................................................... * This function can be used to replace the builtin filename-completion * function with one of the user's choice. The user's completion function * has the option of calling the builtin filename-completion function * if it believes that the token that it has been presented with is a * filename (see cpl_file_completions() above). * * Input: * gl GetLine * The resource object of the command-line input * module. * data void * This is passed to match_fn() whenever it is * called. It could, for example, point to a * symbol table that match_fn() would look up * matches in. * match_fn CplMatchFn * The function that will identify the prefix * to be completed from the input line, and * report matching symbols. * Output: * return int 0 - OK. * 1 - Error. */ int gl_customize_completion(GetLine *gl, void *data, CplMatchFn *match_fn); /*....................................................................... * This function allows you to install alternate completion action * functions or completion listing functions, or to change the * completion function of an existing action of the same type. This * should preferably be called before the first call to gl_get_line() * so that the name of the action becomes defined before the user's * configuration file is read. * * Input: * gl GetLine * The resource object of the command-line input * module. * data void * This is passed to match_fn() whenever it is * called. It could, for example, point to a * symbol table that match_fn() would look up * matches in. * match_fn CplMatchFn * The function that will identify the prefix * to be completed from the input line, and * report matching symbols. * list_only int If non-zero, install an action that only lists * possible completions, rather than attempting * to perform the completion. * name const char * The name with which users can refer to the * binding in tecla configuration files. * keyseq const char * The key sequence with which to invoke * the binding. This should be specified in the * same manner as key-sequences in tecla * configuration files (eg. "M-^I"). * Output: * return int 0 - OK. * 1 - Error. */ int gl_completion_action(GetLine *gl, void *data, CplMatchFn *match_fn, int list_only, const char *name, const char *keyseq); /*....................................................................... * Change the terminal (or stream) that getline interacts with. * * Input: * gl GetLine * The resource object of the command-line input * module. * input_fp FILE * The stdio stream to read from. * output_fp FILE * The stdio stream to write to. * term const char * The terminal type. This can be NULL if * either or both of input_fp and output_fp don't * refer to a terminal. Otherwise it should refer * to an entry in the terminal information database. * Output: * return int 0 - OK. * 1 - Error. */ int gl_change_terminal(GetLine *gl, FILE *input_fp, FILE *output_fp, const char *term); /*....................................................................... * The following functions can be used to save and restore the contents * of the history buffer. * * Input: * gl GetLine * The resource object of the command-line input * module. * filename const char * The name of the new file to write to. * comment const char * Extra information such as timestamps will * be recorded on a line started with this * string, the idea being that the file can * double as a command file. Specify "" if * you don't care. Be sure to specify the * same string to both functions. * max_lines int The maximum number of lines to save, or -1 * to save all of the lines in the history * list. * Output: * return int 0 - OK. * 1 - Error. */ int gl_save_history(GetLine *gl, const char *filename, const char *comment, int max_lines); int gl_load_history(GetLine *gl, const char *filename, const char *comment); /* * Enumerate file-descriptor events that can be waited for. */ typedef enum { GLFD_READ, /* Watch for data waiting to be read from a file descriptor */ GLFD_WRITE, /* Watch for ability to write to a file descriptor */ GLFD_URGENT /* Watch for urgent out-of-band data on the file descriptor */ } GlFdEvent; /* * The following enumeration is used for the return status of file * descriptor event callbacks. */ typedef enum { GLFD_ABORT, /* Cause gl_get_line() to abort with an error */ GLFD_REFRESH, /* Redraw the input line and continue waiting for input */ GLFD_CONTINUE /* Continue to wait for input, without redrawing the line */ } GlFdStatus; /*....................................................................... * On systems that have the select() system call, while gl_get_line() * is waiting for terminal input, it can also be asked to listen for * activity on arbitrary file descriptors. Callback functions of the * following type can be registered to be called when activity is * seen. If your callback needs to write to the terminal or use * signals, please see the gl_get_line(3) man page. * * Input: * gl GetLine * The gl_get_line() resource object. You can use * this safely to call gl_watch_fd() or * gl_inactivity_timeout(). The effect of calling other * functions that take a gl argument is undefined, * and must be avoided. * data void * A pointer to arbitrary callback data, as originally * registered with gl_watch_fd(). * fd int The file descriptor that has activity. * event GlFdEvent The activity seen on the file descriptor. The * inclusion of this argument allows the same * callback to be registered for multiple events. * Output: * return GlFdStatus GLFD_ABORT - Cause gl_get_line() to abort with * an error (set errno if you need it). * GLFD_REFRESH - Redraw the input line and continue * waiting for input. Use this if you * wrote something to the terminal. * GLFD_CONTINUE - Continue to wait for input, without * redrawing the line. */ #define GL_FD_EVENT_FN(fn) GlFdStatus (fn)(GetLine *gl, void *data, int fd, \ GlFdEvent event) typedef GL_FD_EVENT_FN(GlFdEventFn); /*....................................................................... * Where possible, register a function and associated data to be called * whenever a specified event is seen on a file descriptor. * * Input: * gl GetLine * The resource object of the command-line input * module. * fd int The file descriptor to watch. * event GlFdEvent The type of activity to watch for. * callback GlFdEventFn * The function to call when the specified * event occurs. Setting this to 0 removes * any existing callback. * data void * A pointer to arbitrary data to pass to the * callback function. * Output: * return int 0 - OK. * 1 - Either gl==NULL, or this facility isn't * available on the the host system * (ie. select() isn't available). No * error message is generated in the latter * case. */ int gl_watch_fd(GetLine *gl, int fd, GlFdEvent event, GlFdEventFn *callback, void *data); /* * Enumerators from the following list are returned by activity * timeout callbacks registered by gl_inactivity_timeout(). They tell * gl_get_line() whether and how to procede. */ typedef enum { GLTO_ABORT, /* Cause gl_get_line() to abort with an error */ GLTO_REFRESH, /* Redraw the input line and continue waiting for input */ GLTO_CONTINUE /* Continue to wait for input, without redrawing the line */ } GlAfterTimeout; /*....................................................................... * On systems that have the select() system call, the application has * the option of providing a callback function of the following type, * which is called whenever no terminal input or other I/O activity is * seen for the timeout duration specified in the last call to * gl_inactivity_timeout(). * * Input: * gl GetLine * The gl_get_line() resource object. You can use * this safely to call gl_watch_fd() or * gl_inactivity_timeout(). The effect of calling other * functions that take a gl argument is undefined, * and must be avoided. * data void * A pointer to arbitrary callback data, as * originally registered with gl_inactivity_timeout(). * Output: * return GlAfterTimeout GLTO_ABORT - Cause gl_get_line() to * abort with an error (set * errno if you need it). * GLTO_REFRESH - Redraw the input line and * continue waiting for * input. Use this if you * wrote something to the * terminal. * GLTO_CONTINUE - Continue to wait for * input, without redrawing * the line. */ #define GL_TIMEOUT_FN(fn) GlAfterTimeout (fn)(GetLine *gl, void *data) typedef GL_TIMEOUT_FN(GlTimeoutFn); /*....................................................................... * On systems with the select() system call, the gl_inactivity_timeout() * function provides the option of setting (or cancelling) an * inactivity timeout. Inactivity, in this case, refers both to * terminal input received from the user, and to I/O on any file * descriptors registered by calls to gl_watch_fd(). If at any time, * no activity is seen for the requested time period, the specified * timeout callback function is called. On returning, this callback * returns a code which tells gl_get_line() what to do next. Note that * each call to gl_inactivity_timeout() replaces any previously installed * timeout callback, and that specifying a callback of 0, turns off * inactivity timing. * * Beware that although the timeout argument includes a nano-second * component, few computer clocks presently have resolutions finer * than a few milliseconds, so asking for less than a few milliseconds * is equivalent to zero on a lot of systems. * * Input: * gl GetLine * The resource object of the command-line input * module. * callback GlTimeoutFn * The function to call when the inactivity * timeout is exceeded. To turn off * inactivity timeouts altogether, send 0. * data void * A pointer to arbitrary data to pass to the * callback function. * sec unsigned long The number of whole seconds in the timeout. * nsec unsigned long The fractional number of seconds in the * timeout, expressed in nano-seconds (see * the caveat above). * Output: * return int 0 - OK. * 1 - Either gl==NULL, or this facility isn't * available on the the host system * (ie. select() isn't available). No * error message is generated in the latter * case. */ int gl_inactivity_timeout(GetLine *gl, GlTimeoutFn *timeout_fn, void *data, unsigned long sec, unsigned long nsec); /*....................................................................... * Switch history streams. History streams represent separate history * lists recorded within a single history buffer. Different streams * are distinguished by integer identifiers chosen by the calling * appplicaton. Initially new_GetLine() sets the stream identifier to * 0. Whenever a new line is appended to the history list, the current * stream identifier is recorded with it, and history lookups only * consider lines marked with the current stream identifier. * * Input: * gl GetLine * The resource object of gl_get_line(). * id unsigned The new history stream identifier. * Output: * return int 0 - OK. * 1 - Error. */ int gl_group_history(GetLine *gl, unsigned id); /*....................................................................... * Display the contents of the history list. * * Input: * gl GetLine * The resource object of gl_get_line(). * fp FILE * The stdio output stream to write to. * fmt const char * A format string. This containing characters to be * written verbatim, plus any of the following * format directives: * %D - The date, formatted like 2001-11-20 * %T - The time of day, formatted like 23:59:59 * %N - The sequential entry number of the * line in the history buffer. * %G - The number of the history group that * the line belongs to. * %% - A literal % character. * %H - The history line itself. * Note that a '\n' newline character is not * appended by default. * all_groups int If true, display history lines from all * history groups. Otherwise only display * those of the current history group. * max_lines int If max_lines is < 0, all available lines * are displayed. Otherwise only the most * recent max_lines lines will be displayed. * Output: * return int 0 - OK. * 1 - Error. */ int gl_show_history(GetLine *gl, FILE *fp, const char *fmt, int all_groups, int max_lines); /*....................................................................... * Resize or delete the history buffer. * * Input: * gl GetLine * The resource object of gl_get_line(). * bufsize size_t The number of bytes in the history buffer, or 0 * to delete the buffer completely. * Output: * return int 0 - OK. * 1 - Insufficient memory (the previous buffer * will have been retained). No error message * will be displayed. */ int gl_resize_history(GetLine *gl, size_t bufsize); /*....................................................................... * Set an upper limit to the number of lines that can be recorded in the * history list, or remove a previously specified limit. * * Input: * gl GetLine * The resource object of gl_get_line(). * max_lines int The maximum number of lines to allow, or -1 to * cancel a previous limit and allow as many lines * as will fit in the current history buffer size. */ void gl_limit_history(GetLine *gl, int max_lines); /*....................................................................... * Discard either all historical lines, or just those associated with the * current history group. * * Input: * gl GetLine * The resource object of gl_get_line(). * all_groups int If true, clear all of the history. If false, * clear only the stored lines associated with the * currently selected history group. */ void gl_clear_history(GetLine *gl, int all_groups); /*....................................................................... * Temporarily enable or disable the gl_get_line() history mechanism. * * Input: * gl GetLine * The resource object of gl_get_line(). * enable int If true, turn on the history mechanism. If * false, disable it. */ void gl_toggle_history(GetLine *gl, int enable); /* * Objects of the following type are returned by gl_terminal_size(). */ typedef struct { int nline; /* The terminal has nline lines */ int ncolumn; /* The terminal has ncolumn columns */ } GlTerminalSize; /*....................................................................... * Update if necessary, and return the current size of the terminal. * * Input: * gl GetLine * The resource object of gl_get_line(). * def_ncolumn int If the number of columns in the terminal * can't be determined, substitute this number. * def_nline int If the number of lines in the terminal can't * be determined, substitute this number. * Output: * return GlTerminalSize The current terminal size. */ GlTerminalSize gl_terminal_size(GetLine *gl, int def_ncolumn, int def_nline); /*....................................................................... * Tell gl_get_line() the current terminal size. Note that this is only * necessary on systems where changes in terminal size aren't reported * via SIGWINCH. * * Input: * gl GetLine * The resource object of gl_get_line(). * ncolumn int The number of columns in the terminal. * nline int The number of rows in the terminal. * Output: * return int 0 - OK. * 1 - Error. */ int gl_set_term_size(GetLine *gl, int ncolumn, int nline); /* * The gl_lookup_history() function returns information in an * argument of the following type. */ typedef struct { const char *line; /* The requested history line */ unsigned group; /* The history group to which the */ /* line belongs. */ time_t timestamp; /* The date and time at which the */ /* line was originally entered. */ } GlHistoryLine; /*....................................................................... * Lookup a history line by its sequential number of entry in the * history buffer. * * Input: * gl GetLine * The resource object of gl_get_line(). * id unsigned long The identification number of the line to * be returned, where 0 denotes the first line * that was entered in the history list, and * each subsequently added line has a number * one greater than the previous one. For * the range of lines currently in the list, * see the gl_range_of_history() function. * Input/Output: * line GlHistoryLine * A pointer to the variable in which to * return the details of the line. * Output: * return int 0 - The line is no longer in the history * list, and *line has not been changed. * 1 - The requested line can be found in * *line. Note that the string in * line->line is part of the history * buffer and will change, so a private * copy should be made if you wish to * use it after subsequent calls to any * functions that take gl as an argument. */ int gl_lookup_history(GetLine *gl, unsigned long id, GlHistoryLine *line); /* * The gl_state_of_history() function returns information in an argument * of the following type. */ typedef struct { int enabled; /* True if history is enabled */ unsigned group; /* The current history group */ int max_lines; /* The current upper limit on the number of lines */ /* in the history list, or -1 if unlimited. */ } GlHistoryState; /*....................................................................... * Query the state of the history list. Note that any of the input/output * pointers can be specified as NULL. * * Input: * gl GetLine * The resource object of gl_get_line(). * Input/Output: * state GlHistoryState * A pointer to the variable in which to record * the return values. */ void gl_state_of_history(GetLine *gl, GlHistoryState *state); /* * The gl_range_of_history() function returns information in an argument * of the following type. */ typedef struct { unsigned long oldest; /* The sequential entry number of the oldest */ /* line in the history list. */ unsigned long newest; /* The sequential entry number of the newest */ /* line in the history list. */ int nlines; /* The number of lines in the history list */ } GlHistoryRange; /*....................................................................... * Query the number and range of lines in the history buffer. * * Input: * gl GetLine * The resource object of gl_get_line(). * range GlHistoryRange * A pointer to the variable in which to record * the return values. If range->nline=0, the * range of lines will be given as 0-0. */ void gl_range_of_history(GetLine *gl, GlHistoryRange *range); /* * The gl_size_of_history() function returns information in an argument * of the following type. */ typedef struct { size_t size; /* The size of the history buffer (bytes) */ size_t used; /* The number of bytes of the history buffer */ /* that are currently occupied. */ } GlHistorySize; /*....................................................................... * Return the size of the history buffer and the amount of the * buffer that is currently in use. * * Input: * gl GetLine * The resource object of gl_get_line(). * Input/Output: * GlHistorySize size * A pointer to the variable in which to return * the results. */ void gl_size_of_history(GetLine *gl, GlHistorySize *size); /*....................................................................... * Enable or disable the automatic addition of newly entered lines to the * history list. * * Input: * gl GetLine * The resource object of gl_get_line(). * enable int If true, subsequently entered lines will * automatically be added to the history list * before they are returned to the caller of * gl_get_line(). If 0, the choice of how and * when to archive lines in the history list, * is left up to the calling application, which * can do so via calls to gl_append_history(). * Output: * return int 0 - OK. * 1 - Error. */ int gl_automatic_history(GetLine *gl, int enable); /*....................................................................... * Append a specified line to the history list. * * Input: * gl GetLine * The resource object of gl_get_line(). * line const char * The line to be added. * Output: * return int 0 - OK. * 1 - Error. */ int gl_append_history(GetLine *gl, const char *line); /*....................................................................... * Specify whether text that users type should be displayed or hidden. * In the latter case, only the prompt is displayed, and the final * input line is not archived in the history list. * * Input: * gl GetLine * The input-line history maintenance object. * enable int 0 - Disable echoing. * 1 - Enable echoing. * -1 - Just query the mode without changing it. * Output: * return int The echoing disposition that was in effect * before this function was called: * 0 - Echoing was disabled. * 1 - Echoing was enabled. */ int gl_echo_mode(GetLine *gl, int enable); /*....................................................................... * This function can be called from gl_get_line() callbacks to have * the prompt changed when they return. It has no effect if gl_get_line() * is not currently being invoked. * * Input: * gl GetLine * The resource object of gl_get_line(). * prompt const char * The new prompt. */ void gl_replace_prompt(GetLine *gl, const char *prompt); /* * Enumerate the available prompt formatting styles. */ typedef enum { GL_LITERAL_PROMPT, /* Display the prompt string literally */ GL_FORMAT_PROMPT /* The prompt string can contain any of the */ /* following formatting directives: */ /* %B - Display subsequent characters */ /* with a bold font. */ /* %b - Stop displaying characters */ /* with the bold font. */ /* %U - Underline subsequent characters. */ /* %u - Stop underlining characters. */ /* %S - Highlight subsequent characters */ /* (also known as standout mode). */ /* %s - Stop highlighting characters */ /* %% - Display a single % character. */ } GlPromptStyle; /*....................................................................... * Specify whether to heed text attribute directives within prompt * strings. * * Input: * gl GetLine * The resource object of gl_get_line(). * style GlPromptStyle The style of prompt (see the definition of * GlPromptStyle in libtecla.h for details). */ void gl_prompt_style(GetLine *gl, GlPromptStyle style); /*....................................................................... * Remove a signal from the list of signals that gl_get_line() traps. * * Input: * gl GetLine * The resource object of gl_get_line(). * signo int The number of the signal to be ignored. * Output: * return int 0 - OK. * 1 - Error. */ int gl_ignore_signal(GetLine *gl, int signo); /* * A bitwise union of the following enumerators is passed to * gl_trap_signal() to specify the environment in which the * application's signal handler is to be called. */ typedef enum { GLS_RESTORE_SIG=1, /* Restore the caller's signal environment */ /* while handling the signal. */ GLS_RESTORE_TTY=2, /* Restore the caller's terminal settings */ /* while handling the signal. */ GLS_RESTORE_LINE=4, /* Move the cursor to the start of the next line */ GLS_REDRAW_LINE=8, /* Redraw the input line when the signal handler */ /* returns. */ GLS_UNBLOCK_SIG=16, /* Normally a signal who's delivery is found to */ /* be blocked by the calling application is not */ /* trapped by gl_get_line(). Including this flag */ /* causes it to be temporarily unblocked and */ /* trapped while gl_get_line() is executing. */ GLS_DONT_FORWARD=32,/* Don't forward the signal to the signal handler */ /* of the calling program. */ GLS_RESTORE_ENV = GLS_RESTORE_SIG | GLS_RESTORE_TTY | GLS_REDRAW_LINE, GLS_SUSPEND_INPUT = GLS_RESTORE_ENV | GLS_RESTORE_LINE } GlSignalFlags; /* * The following enumerators are passed to gl_trap_signal() to tell * it what to do after the application's signal handler has been called. */ typedef enum { GLS_RETURN, /* Return the line as though the user had pressed the */ /* return key. */ GLS_ABORT, /* Cause gl_get_line() to return NULL */ GLS_CONTINUE /* After handling the signal, resume command line editing */ } GlAfterSignal; /*....................................................................... * Tell gl_get_line() how to respond to a given signal. This can be used * both to override the default responses to signals that gl_get_line() * normally catches and to add new signals to the list that are to be * caught. * * Input: * gl GetLine * The resource object of gl_get_line(). * signo int The number of the signal to be caught. * flags unsigned A bitwise union of GlSignalFlags enumerators. * after GlAfterSignal What to do after the application's signal * handler has been called. * errno_value int The value to set errno to. * Output: * return int 0 - OK. * 1 - Insufficient memory to record the * new signal disposition. */ int gl_trap_signal(GetLine *gl, int signo, unsigned flags, GlAfterSignal after, int errno_value); /*....................................................................... * By default, gl_get_line() doesn't trap signals that are blocked * when it is called. This default can be changed either on a * per-signal basis by calling gl_trap_signal(), or on a global basis * by calling this function. What this function does is add the * GLS_UNBLOCK_SIG flag to all signals that are currently configured * to be trapped by gl_get_line(), such that when subsequent calls to * gl_get_line() wait for I/O, these signals are temporarily * unblocked. This behavior is useful in non-blocking server-I/O mode, * where it is used to avoid race conditions related to handling these * signals externally to gl_get_line(). See the demonstration code in * demo3.c, or the gl_handle_signal() man page for further * information. * * Input: * gl GetLine * The resource object of gl_get_line(). */ void gl_catch_blocked(GetLine *gl); /*....................................................................... * In server-I/O mode the terminal is left in raw mode between calls * to gl_get_line(), so it is necessary for the application to install * terminal restoring signal handlers for signals that could terminate * or suspend the process, plus a terminal reconfiguration handler to * be called when a process resumption signal is received, and finally * a handler to be called when a terminal-resize signal is received. * * Since there are many signals that by default terminate or suspend * processes, and different systems support different sub-sets of * these signals, this function provides a convenient wrapper around * sigaction() for assigning the specified handlers to all appropriate * signals. It also arranges that when any one of these signals is * being handled, all other catchable signals are blocked. This is * necessary so that the specified signal handlers can safely call * gl_raw_io(), gl_normal_io() and gl_update_size() without reentrancy * issues. * * Input: * term_handler void (*)(int) The signal handler to invoke when * a process terminating signal is * received. * susp_handler void (*)(int) The signal handler to invoke when * a process suspending signal is * received. * cont_handler void (*)(int) The signal handler to invoke when * a process resumption signal is * received (ie. SIGCONT). * size_handler void (*)(int) The signal handler to invoke when * a terminal-resize signal (ie. SIGWINCH) * is received. * Output: * return int 0 - OK. * 1 - Error. */ int gl_tty_signals(void (*term_handler)(int), void (*susp_handler)(int), void (*cont_handler)(int), void (*size_handler)(int)); /*....................................................................... * Return the last signal that was caught by the most recent call to * gl_get_line(), or -1 if no signals were caught. This is useful if * gl_get_line() returns errno=EINTR and you need to find out what signal * caused it to abort. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int The last signal caught by the most recent * call to gl_get_line(), or -1 if no signals * were caught. */ int gl_last_signal(GetLine *gl); /*....................................................................... * Return the signal mask used by gl_get_line(). This is the set of * signals that gl_get_line() is currently configured to trap. * * Input: * gl GetLine * The resource object of gl_get_line(). * Input/Output: * set sigset_t * The set of signals will be returned in *set, * in the form of a signal process mask, as * used by sigaction(), sigprocmask(), * sigpending(), sigsuspend(), sigsetjmp() and * other standard POSIX signal-aware * functions. * Output: * return int 0 - OK. * 1 - Error (examine errno for reason). */ int gl_list_signals(GetLine *gl, sigset_t *set); /*....................................................................... * Respond to signals who's default effects have important * consequences to gl_get_line(). This is intended for use in * non-blocking server mode, where the external event loop is * responsible for catching signals. Signals that are handled include * those that by default terminate or suspend the process, and the * signal that indicates that the terminal size has changed. Note that * this function is not signal safe and should thus not be called from * a signal handler itself. See the gl_io_mode() man page for how it * should be used. * * In the case of signals that by default terminate or suspend * processes, command-line editing will be suspended, the terminal * returned to a usable state, then the default disposition of the * signal restored and the signal resent, in order to suspend or * terminate the process. If the process subsequently resumes, * command-line editing is resumed. * * In the case of signals that indicate that the terminal has been * resized, the new size will be queried, and any input line that is * being edited will be redrawn to fit the new dimensions of the * terminal. * * Input: * signo int The number of the signal to respond to. * gl GetLine * The first element of an array of 'ngl' GetLine * objects. * ngl int The number of elements in the gl[] array. Normally * this will be one. */ void gl_handle_signal(int signo, GetLine *gl, int ngl); /*....................................................................... * Return extra information (ie. in addition to that provided by errno) * about the last error to occur in either gl_get_line() or its * associated public functions. * * Input: * gl GetLine * The resource object of gl_get_line(). * Input/Output: * buff char * An optional output buffer. Note that if the * calling application calls any gl_*() * functions from signal handlers, it should * provide a buffer here, so that a copy of * the latest error message can safely be made * while signals are blocked. * n size_t The allocated size of buff[]. * Output: * return const char * A pointer to the error message. This will * be the buff argument, unless buff==NULL, in * which case it will be a pointer to an * internal error buffer. In the latter case, * note that the contents of the returned buffer * will change on subsequent calls to any gl_*() * functions. */ const char *gl_error_message(GetLine *gl, char *buff, size_t n); /*....................................................................... * Clear the terminal and leave the cursor at the home position. In * server I/O mode, arrange for the input line to be redrawn from scratch * when gl_get_line() is next called. * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return int 0 - OK. * 1 - Error. */ int gl_erase_terminal(GetLine *gl); /*....................................................................... * Display a left-justified string over multiple terminal lines, * taking account of the current width of the terminal. Optional * indentation and an optional prefix string can be specified to be * displayed at the start of each new terminal line used. Similarly, * an optional suffix can be specified to be displayed at the end of * each terminal line. If needed, a single paragraph can be broken * across multiple calls. Note that literal newlines in the input * string can be used to force a newline at any point and that you * should use this feature to explicitly end all paragraphs, including * at the end of the last string that you write. Note that when a new * line is started between two words that are separated by spaces, * those spaces are not output, whereas when a new line is started * because a newline character was found in the string, only the * spaces before the newline character are discarded. * * Input: * gl GetLine * The resource object of gl_get_line(). * indentation int The number of spaces of indentation to write * at the beginning of each new terminal line. * prefix const char * An optional prefix string to write after the * indentation margin at the start of each new * terminal line. You can specify NULL if no * prefix is required. * suffix const char * An optional suffix string to draw at the end * of the terminal line. Spaces will be added * where necessary to ensure that the suffix ends * in the last column of the terminal line. If * no suffix is desired, specify NULL. * fill_char int The padding character to use when indenting * the line or padding up to the suffix. * def_width int If the terminal width isn't known, such as when * writing to a pipe or redirecting to a file, * this number specifies what width to assume. * start int The number of characters already written to * the start of the current terminal line. This * is primarily used to allow individual * paragraphs to be written over multiple calls * to this function, but can also be used to * allow you to start the first line of a * paragraph with a different prefix or * indentation than those specified above. * string const char * The string to be written. * Output: * return int On error -1 is returned. Otherwise the * return value is the terminal column index at * which the cursor was left after writing the * final word in the string. Successful return * values can thus be passed verbatim to the * 'start' arguments of subsequent calls to * gl_display_text() to allow the printing of a * paragraph to be broken across multiple calls * to gl_display_text(). */ int gl_display_text(GetLine *gl, int indentation, const char *prefix, const char *suffix, int fill_char, int def_width, int start, const char *string); /* * Enumerate the I/O modes supported by gl_get_line(). */ typedef enum { GL_NORMAL_MODE, /* Normal line-at-a-time mode using gl_get_line()'s */ /* internal event loop. */ GL_SERVER_MODE /* Non-blocking server mode, driven by an external */ /* event loop. */ } GlIOMode; /*....................................................................... * Select the I/O mode to be used by gl_get_line(). * * Input: * gl GetLine * The resource object of gl_get_line(). * mode GlIOMode The I/O mode to establish. Note that * when server mode, the terminal is placed * in raw mode, as though gl_raw_io() had * been called. * Output: * return int 0 - OK. * 1 - Error. */ int gl_io_mode(GetLine *gl, GlIOMode mode); /*....................................................................... * In server mode, this function configures the terminal for non-blocking * raw terminal I/O. In normal I/O mode it does nothing. * * Callers of this function must be careful to trap all signals that * terminate or suspend the program, and call gl_normal_io() * from the corresponding signal handlers in order to restore the * terminal to its original settings before the program is terminated * or suspended. They should also trap the SIGCONT signal to detect * when the program resumes, and ensure that its signal handler * call gl_raw_io() to redisplay the line and resume editing. * * Input: * gl GetLine * The line editor resource object. * Output: * return int 0 - OK. * 1 - Error. */ int gl_raw_io(GetLine *gl); /*....................................................................... * Restore the terminal to the state that it had when gl_raw_io() was * last called. After calling gl_raw_io(), this function must be called * before terminating or suspending the program, and before attempting * other uses of the terminal from within the program. See gl_raw_io() * for more details. * * Input: * gl GetLine * The line editor resource object. * Output: * return int 0 - OK. * 1 - Error. */ int gl_normal_io(GetLine *gl); /*....................................................................... * When in non-blocking server mode, this function can be used to abandon * the current incompletely entered input line, and prepare to start * editing a new line on the next call to gl_get_line(). * * Input: * gl GetLine * The line editor resource object. * Output: * return int 0 - OK. * 1 - Error. */ void gl_abandon_line(GetLine *gl); /* * Enumerators of the following type are used to report why * gl_get_line() returned. This is most useful in non-blocking * server mode, since in that mode a NULL return value can mean * either that an error occurred, or that I/O blocked. */ typedef enum { GLR_NEWLINE, /* A new input line was returned */ GLR_BLOCKED, /* The terminal was in non-blocking mode, and input */ /* or output would have blocked. */ GLR_SIGNAL, /* A signal caused gl_get_line() to return. */ GLR_TIMEOUT, /* An application timeout callback returned GLTO_ABORT */ GLR_FDABORT, /* An application I/O callack returned GLFD_ABORT */ GLR_EOF, /* End of file reached */ GLR_ERROR /* An unexpected error caused gl_get_line() to abort */ } GlReturnStatus; /*....................................................................... * Ask gl_get_line() what caused it to return. * * Input: * gl GetLine * The line editor resource object. * Output: * return GlReturnStatus The return status of the last call to * gl_get_line(). */ GlReturnStatus gl_return_status(GetLine *gl); /* * Enumerate the types of I/O that gl_get_line() can be waiting for * in non-blocking sedrver I/O mode. */ typedef enum { GLP_READ, /* gl_get_line() is waiting to write to the terminal */ GLP_WRITE /* gl_get_line() is waiting to read from the terminal */ } GlPendingIO; /*....................................................................... * In non-blocking server-I/O mode, this function should be called * from the application's external event loop to see what type of * terminal I/O is being waited for by gl_get_line(), and thus what * direction of I/O to wait for with select() or poll(). * * Input: * gl GetLine * The resource object of gl_get_line(). * Output: * return GlPendingIO The type of pending I/O being waited for. */ GlPendingIO gl_pending_io(GetLine *gl); /* * The following enumerators are returned by externally defined action * functions to tell gl_get_line() how to procede after the action * function returns. */ typedef enum { GLA_ABORT, /* Cause gl_get_line() to return NULL */ GLA_RETURN, /* Return the line as though the user had pressed the */ /* return key. */ GLA_CONTINUE /* Resume command-line editing */ } GlAfterAction; /*....................................................................... * Functions of the following form implement external * application-specific action functions, which can then be bound to * sequences of terminal keys. * * Input: * gl GetLine * The line editor resource object. * data void * The anonymous 'data' argument that was * passed to gl_external_action() when the * callback function was registered. * count int A positive repeat count specified by the user, * or 1 if not specified. Action functions should * ignore this if repeating the action multiple * times isn't appropriate. Alternatively they * can interpret it as a general numeric * argument. * curpos size_t The position of the cursor within the input * line, expressed as the index of the * corresponding character within the line[] * array. * line const char * A read-only copy of the current input line. * Output * return GlAfterAction What should gl_get_line() do when the action * function returns? * GLA_ABORT - Cause gl_get_line() to * abort with an error (set * errno if you need it). * GLA_RETURN - Return the input line as * though the user had typed * the return key. * GLA_CONTINUE - Resume waiting for keyboard * input. */ #define GL_ACTION_FN(fn) GlAfterAction (fn)(GetLine *gl, void *data, \ int count, size_t curpos, const char *line) typedef GL_ACTION_FN(GlActionFn); /*....................................................................... * Register an application-provided function as an action function. * This should preferably be called before the first call to gl_get_line() * so that the name of the action becomes defined before the user's * configuration file is read. * * Input: * gl GetLine * The resource object of the command-line input * module. * data void * Arbitrary application-specific callback * data to be passed to the callback * function, fn(). * fn GlActionFn * The application-specific function that * implements the action. This will be invoked * whenever the user presses any * key-sequence which is bound to this action. * name const char * The name with which users can refer to the * binding in tecla configuration files. * keyseq const char * The key sequence with which to invoke * the binding. This should be specified in the * same manner as key-sequences in tecla * configuration files (eg. "M-^I"). * Output: * return int 0 - OK. * 1 - Error. */ int gl_register_action(GetLine *gl, void *data, GlActionFn *fn, const char *name, const char *keyseq); /*....................................................................... * This function is designed to be called by CPL_MATCH_FN() callback * functions. It adds one possible completion of the token that is being * completed to an array of completions. If the completion needs any * special quoting to be valid when displayed in the input line, this * quoting must be included in the string. * * Input: * cpl WordCompletion * The argument of the same name that was passed * to the calling CPL_MATCH_FN() callback function. * line const char * The input line, as received by the callback * function. * word_start int The index within line[] of the start of the * word that is being completed. If an empty * string is being completed, set this to be * the same as word_end. * word_end int The index within line[] of the character which * follows the incomplete word, as received by the * callback function. * suffix const char * The appropriately quoted string that could * be appended to the incomplete token to complete * it. A copy of this string will be allocated * internally. * type_suffix const char * When listing multiple completions, gl_get_line() * appends this string to the completion to indicate * its type to the user. If not pertinent pass "". * Otherwise pass a literal or static string. * cont_suffix const char * If this turns out to be the only completion, * gl_get_line() will append this string as * a continuation. For example, the builtin * file-completion callback registers a directory * separator here for directory matches, and a * space otherwise. If the match were a function * name you might want to append an open * parenthesis, etc.. If not relevant pass "". * Otherwise pass a literal or static string. * Output: * return int 0 - OK. * 1 - Error. */ int cpl_add_completion(WordCompletion *cpl, const char *line, int word_start, int word_end, const char *suffix, const char *type_suffix, const char *cont_suffix); /* * Each possible completion string is recorded in an array element of * the following type. */ typedef struct { char *completion; /* The matching completion string */ char *suffix; /* The pointer into completion[] at which the */ /* string was extended. */ const char *type_suffix; /* A suffix to be added when listing completions */ /* to indicate the type of the completion. */ } CplMatch; /* * Completions are returned in a container of the following form. */ typedef struct { char *suffix; /* The common initial part of all of the */ /* completion suffixes. */ const char *cont_suffix; /* Optional continuation string to be appended to */ /* the sole completion when nmatch==1. */ CplMatch *matches; /* The array of possible completion strings, */ /* sorted into lexical order. */ int nmatch; /* The number of elements in matches[] */ } CplMatches; /*....................................................................... * Given an input line and the point at which completion is to be * attempted, return an array of possible completions. * * Input: * cpl WordCompletion * The word-completion resource object. * line const char * The current input line. * word_end int The index of the character in line[] which * follows the end of the token that is being * completed. * data void * Anonymous 'data' to be passed to match_fn(). * match_fn CplMatchFn * The function that will identify the prefix * to be completed from the input line, and * record completion suffixes. * Output: * return CplMatches * The container of the array of possible * completions. The returned pointer refers * to a container owned by the parent Completion * object, and its contents thus potentially * change on every call to cpl_complete_word(). */ CplMatches *cpl_complete_word(WordCompletion *cpl, const char *line, int word_end, void *data, CplMatchFn *match_fn); /*....................................................................... * Recall the return value of the last call to cpl_complete_word(). * * Input: * cpl WordCompletion * The completion resource object. * Output: * return CplMatches * The container of the array of possible * completions, as returned by the last call to * cpl_complete_word(). The returned pointer refers * to a container owned by the parent WordCompletion * object, and its contents thus potentially * change on every call to cpl_complete_word(). * On error, either in the execution of this * function, or in the last call to * cpl_complete_word(), NULL is returned, and a * description of the error can be acquired by * calling cpl_last_error(cpl). */ CplMatches *cpl_recall_matches(WordCompletion *cpl); /*....................................................................... * Print out an array of matching completions. * * Input: * result CplMatches * The container of the sorted array of * completions. * fp FILE * The output stream to write to. * term_width int The width of the terminal. * Output: * return int 0 - OK. * 1 - Error. */ int cpl_list_completions(CplMatches *result, FILE *fp, int term_width); /*....................................................................... * Return a description of the error that occurred on the last call to * cpl_complete_word() or cpl_add_completion(). * * Input: * cpl WordCompletion * The string-completion resource object. * Output: * return const char * The description of the last error. */ const char *cpl_last_error(WordCompletion *cpl); /* * PathCache objects encapsulate the resources needed to record * files of interest from comma-separated lists of directories. */ typedef struct PathCache PathCache; /*....................................................................... * Create an object who's function is to maintain a cache of filenames * found within a list of directories, and provide quick lookup and * completion of selected files in this cache. * * Output: * return PathCache * The new, initially empty cache, or NULL * on error. */ PathCache *new_PathCache(void); /*....................................................................... * Delete a given cache of files, returning the resources that it * was using to the system. * * Input: * pc PathCache * The cache to be deleted (can be NULL). * Output: * return PathCache * The deleted object (ie. allways NULL). */ PathCache *del_PathCache(PathCache *pc); /*....................................................................... * Return a description of the last path-caching error that occurred. * * Input: * pc PathCache * The filename cache that suffered the error. * Output: * return char * The description of the last error. */ const char *pca_last_error(PathCache *pc); /*....................................................................... * Build the list of files of interest contained in a given * colon-separated list of directories. * * Input: * pc PathCache * The cache in which to store the names of * the files that are found in the list of * directories. * path const char * A colon-separated list of directory * paths. Under UNIX, when searching for * executables, this should be the return * value of getenv("PATH"). * Output: * return int 0 - OK. * 1 - An error occurred. */ int pca_scan_path(PathCache *pc, const char *path); /*....................................................................... * If you want subsequent calls to pca_lookup_file() and * pca_path_completions() to only return the filenames of certain * types of files, for example executables, or filenames ending in * ".ps", call this function to register a file-selection callback * function. This callback function takes the full pathname of a file, * plus application-specific data, and returns 1 if the file is of * interest, and zero otherwise. * * Input: * pc PathCache * The filename cache. * check_fn CplCheckFn * The function to call to see if the name of * a given file should be included in the * cache. This determines what type of files * will reside in the cache. To revert to * selecting all files, regardless of type, * pass 0 here. * data void * You can pass a pointer to anything you * like here, including NULL. It will be * passed to your check_fn() callback * function, for its private use. */ void pca_set_check_fn(PathCache *pc, CplCheckFn *check_fn, void *data); /*....................................................................... * Given the simple name of a file, search the cached list of files * in the order in which they where found in the list of directories * previously presented to pca_scan_path(), and return the pathname * of the first file which has this name. * * Input: * pc PathCache * The cached list of files. * name const char * The name of the file to lookup. * name_len int The length of the filename substring at the * beginning of name[], or -1 to assume that the * filename occupies the whole of the string. * literal int If this argument is zero, lone backslashes * in name[] are ignored during comparison * with filenames in the cache, under the * assumption that they were in the input line * soley to escape the special significance of * characters like spaces. To have them treated * as normal characters, give this argument a * non-zero value, such as 1. * Output: * return char * The pathname of the first matching file, * or NULL if not found. Note that the returned * pointer points to memory owned by *pc, and * will become invalid on the next call. */ char *pca_lookup_file(PathCache *pc, const char *name, int name_len, int literal); /* * Objects of the following type can be used to change the default * behavior of the pca_path_completions() callback function. */ typedef struct PcaPathConf PcaPathConf; /* * pca_path_completions() is a completion callback function for use directly * with cpl_complete_word() or gl_customize_completions(), or indirectly * from your own completion callback function. It requires that a PcaPathConf * object be passed via its 'void *data' argument (see below). */ CPL_MATCH_FN(pca_path_completions); /*....................................................................... * Allocate and initialize a pca_path_completions() configuration object. * * Input: * pc PathCache * The filename cache in which to look for * file name completions. * Output: * return PcaPathConf * The new configuration structure, or NULL * on error. */ PcaPathConf *new_PcaPathConf(PathCache *pc); /*....................................................................... * Deallocate memory, previously allocated by new_PcaPathConf(). * * Input: * ppc PcaPathConf * Any pointer previously returned by * new_PcaPathConf() [NULL is allowed]. * Output: * return PcaPathConf * The deleted structure (always NULL). */ PcaPathConf *del_PcaPathConf(PcaPathConf *ppc); /* * If backslashes in the prefix being passed to pca_path_completions() * should be treated as literal characters, call the following function * with literal=1. Otherwise the default is to treat them as escape * characters which remove the special meanings of spaces etc.. */ void ppc_literal_escapes(PcaPathConf *ppc, int literal); /* * Before calling pca_path_completions, call this function if you know * the index at which the filename prefix starts in the input line. * Otherwise by default, or if you specify start_index to be -1, the * filename is taken to start after the first unescaped space preceding * the cursor, or the start of the line, whichever comes first. */ void ppc_file_start(PcaPathConf *ppc, int start_index); #ifdef __cplusplus } #endif #endif genometools-1.5.1/src/external/libtecla-1.6.1/libtecla.map000066400000000000000000000101121211610345200231460ustar00rootroot00000000000000# This mapfile (or version script) lists the public symbols that are # publically exported by each version of the tecla library. This file # has the format required by the Sun and Linux linkers, and also acts # as a template from which map files for other systems can be derived # with awk or sed. # # Under Solaris and Linux, this map file is used by ld during shared # library creation. It has two purposes: # # 1. It specifies which symbols in the library are to be made visible # to applications. This has the dual benefits of reducing namespace # polution, and of preventing applications from using private # internal library functions that might change or disappear in # future releases. # # 2. The information listed in this file is recorded in the shared # library, such that when an application is linked against it, the # linker can record a dependency in the application which says # which is the earliest library version which included all of the # symbols that the application needs. This means that if the # application is copied to another system that has an earlier # version of the library, the linker can quickly determine whether # the earlier version contains all of the symbols that it needs. # # Under Linux, mapfiles can also be used to allow multiple # incompatible versions of a given function to exist in a library, # thus supporting applications that were compiled against different # incompatible versions of the library. Since this feature (and the # inclusion of .symver directives) isn't supported by Solaris, it # can't be included in this file. Non backwards compatibility in the # ABI must instead be handled in the more traditional way, by # incrementing the major version number. # # When a new minor release is made, a new tecla_1.x specification # should be added which inherits the symbols of the previous release # and lists newly added functions. For example, below you will find # the following clause: # # tecla_1.3 { # global: # ef_list_expansions; # } tecla_1.2; # # This says that ef_list_expansions is the name of a public function # that was added in the 1.3 release, and that the symbols defined in # the previous tecla_1.2 clause have been inherited by tecla_1.3. # # For more details see the following URL: # # http://www.usenix.org/publications/library/proceedings/als2000/browndavid.html #------------------------------------------------------------------------------- tecla_1.2 { global: cfc_file_start; cfc_literal_escapes; cfc_set_check_fn; cpl_add_completion; cpl_check_exe; cpl_complete_word; cpl_file_completions; cpl_init_FileArgs; cpl_last_error; cpl_list_completions; cpl_record_error; del_CplFileConf; del_ExpandFile; del_GetLine; del_PathCache; del_PcaPathConf; del_WordCompletion; ef_expand_file; ef_last_error; gl_change_terminal; gl_customize_completion; gl_get_line; new_CplFileConf; new_ExpandFile; new_GetLine; new_PathCache; new_PcaPathConf; new_WordCompletion; pca_last_error; pca_lookup_file; pca_path_completions; pca_scan_path; pca_set_check_fn; ppc_file_start; ppc_literal_escapes; local: *; }; tecla_1.3 { global: ef_list_expansions; } tecla_1.2; tecla_1.4 { global: gl_configure_getline; gl_save_history; gl_load_history; gl_group_history; gl_show_history; gl_resize_history; gl_limit_history; gl_clear_history; gl_toggle_history; gl_watch_fd; libtecla_version; gl_terminal_size; gl_state_of_history; gl_range_of_history; gl_size_of_history; gl_lookup_history; gl_echo_mode; gl_replace_prompt; gl_prompt_style; gl_ignore_signal; gl_trap_signal; gl_last_signal; } tecla_1.3; tecla_l.5 { global: gl_inactivity_timeout; gl_completion_action; gl_register_action; gl_display_text; gl_error_message; gl_return_status; gl_set_term_size; gl_list_signals; gl_catch_blocked; gl_io_mode; gl_raw_io; gl_normal_io; gl_tty_signals; gl_abandon_line; gl_handle_signal; gl_pending_io; gl_bind_keyseq; cpl_recall_matches; gl_erase_terminal; } tecla_1.4; tecla_1.6 { global: gl_append_history; gl_automatic_history; gl_query_char; gl_read_char; } tecla_l.5; genometools-1.5.1/src/external/libtecla-1.6.1/pathutil.c000066400000000000000000000363301211610345200227000ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * If file-system access is to be excluded, this module has no function, * so all of its code should be excluded. */ #ifndef WITHOUT_FILE_SYSTEM #include #include #include #include #include #include #include #include #include #include "pathutil.h" /*....................................................................... * Create a new PathName object. * * Output: * return PathName * The new object, or NULL on error. */ PathName *_new_PathName(void) { PathName *path; /* The object to be returned */ /* * Allocate the container. */ path = (PathName *) malloc(sizeof(PathName)); if(!path) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to _del_PathName(). */ path->name = NULL; path->dim = 0; /* * Figure out the maximum length of an expanded pathname. */ path->dim = _pu_pathname_dim(); if(path->dim == 0) return _del_PathName(path); /* * Allocate the pathname buffer. */ path->name = (char *)malloc(path->dim * sizeof(char)); if(!path->name) { errno = ENOMEM; return _del_PathName(path); }; return path; } /*....................................................................... * Delete a PathName object. * * Input: * path PathName * The object to be deleted. * Output: * return PathName * The deleted object (always NULL). */ PathName *_del_PathName(PathName *path) { if(path) { if(path->name) free(path->name); free(path); }; return NULL; } /*....................................................................... * Return the pathname to a zero-length string. * * Input: * path PathName * The pathname container. * Output: * return char * The cleared pathname buffer, or NULL on error. */ char *_pn_clear_path(PathName *path) { /* * Check the arguments. */ if(!path) { errno = EINVAL; return NULL; }; path->name[0] = '\0'; return path->name; } /*....................................................................... * Append a string to a pathname, increasing the size of the pathname * buffer if needed. * * Input: * path PathName * The pathname container. * string const char * The string to be appended to the pathname. * Note that regardless of the slen argument, * this should be a '\0' terminated string. * slen int The maximum number of characters to append * from string[], or -1 to append the whole * string. * remove_escapes int If true, remove the backslashes that escape * spaces, tabs, backslashes etc.. * Output: * return char * The pathname string path->name[], which may * have been reallocated, or NULL if there was * insufficient memory to extend the pathname. */ char *_pn_append_to_path(PathName *path, const char *string, int slen, int remove_escapes) { int pathlen; /* The length of the pathname */ int i; /* * Check the arguments. */ if(!path || !string) { errno = EINVAL; return NULL; }; /* * Get the current length of the pathname. */ pathlen = strlen(path->name); /* * How many characters should be appended? */ if(slen < 0 || slen > strlen(string)) slen = strlen(string); /* * Resize the pathname if needed. */ if(!_pn_resize_path(path, pathlen + slen)) return NULL; /* * Append the string to the output pathname, removing any escape * characters found therein. */ if(remove_escapes) { int is_escape = 0; for(i=0; iname[pathlen++] = string[i]; }; /* * Terminate the string. */ path->name[pathlen] = '\0'; } else { /* * Append the string directly to the pathname. */ memcpy(path->name + pathlen, string, slen); path->name[pathlen + slen] = '\0'; }; return path->name; } /*....................................................................... * Prepend a string to a pathname, increasing the size of the pathname * buffer if needed. * * Input: * path PathName * The pathname container. * string const char * The string to be prepended to the pathname. * Note that regardless of the slen argument, * this should be a '\0' terminated string. * slen int The maximum number of characters to prepend * from string[], or -1 to append the whole * string. * remove_escapes int If true, remove the backslashes that escape * spaces, tabs, backslashes etc.. * Output: * return char * The pathname string path->name[], which may * have been reallocated, or NULL if there was * insufficient memory to extend the pathname. */ char *_pn_prepend_to_path(PathName *path, const char *string, int slen, int remove_escapes) { int pathlen; /* The length of the pathname */ int shift; /* The number of characters to shift the suffix by */ int i,j; /* * Check the arguments. */ if(!path || !string) { errno = EINVAL; return NULL; }; /* * Get the current length of the pathname. */ pathlen = strlen(path->name); /* * How many characters should be appended? */ if(slen < 0 || slen > strlen(string)) slen = strlen(string); /* * Work out how far we need to shift the original path string to make * way for the new prefix. When removing escape characters, we need * final length of the new prefix, after unescaped backslashes have * been removed. */ if(remove_escapes) { int is_escape = 0; for(shift=0,i=0; iname + shift, path->name, pathlen+1); /* * Copy the new prefix into the vacated space at the beginning of the * output pathname, removing any escape characters if needed. */ if(remove_escapes) { int is_escape = 0; for(i=j=0; iname[j++] = string[i]; }; } else { memcpy(path->name, string, slen); }; return path->name; } /*....................................................................... * If needed reallocate a given pathname buffer to allow a string of * a given length to be stored in it. * * Input: * path PathName * The pathname container object. * length size_t The required length of the pathname buffer, * not including the terminating '\0'. * Output: * return char * The pathname buffer, or NULL if there was * insufficient memory. */ char *_pn_resize_path(PathName *path, size_t length) { /* * Check the arguments. */ if(!path) { errno = EINVAL; return NULL; }; /* * If the pathname buffer isn't large enough to accomodate a string * of the specified length, attempt to reallocate it with the new * size, plus space for a terminating '\0'. Also add a bit of * head room to prevent too many reallocations if the initial length * turned out to be very optimistic. */ if(length + 1 > path->dim) { size_t dim = length + 1 + PN_PATHNAME_INC; char *name = (char *) realloc(path->name, dim); if(!name) return NULL; path->name = name; path->dim = dim; }; return path->name; } /*....................................................................... * Estimate the largest amount of space needed to store a pathname. * * Output: * return size_t The number of bytes needed, including space for the * terminating '\0'. */ size_t _pu_pathname_dim(void) { int maxlen; /* The return value excluding space for the '\0' */ /* * If the POSIX PATH_MAX macro is defined in limits.h, use it. */ #ifdef PATH_MAX maxlen = PATH_MAX; /* * If we have pathconf, use it. */ #elif defined(_PC_PATH_MAX) errno = 0; maxlen = pathconf(FS_ROOT_DIR, _PC_PATH_MAX); if(maxlen <= 0 || errno) maxlen = MAX_PATHLEN_FALLBACK; /* * None of the above approaches worked, so substitute our fallback * guess. */ #else maxlen = MAX_PATHLEN_FALLBACK; #endif /* * Return the amount of space needed to accomodate a pathname plus * a terminating '\0'. */ return maxlen + 1; } /*....................................................................... * Return non-zero if the specified path name refers to a directory. * * Input: * pathname const char * The path to test. * Output: * return int 0 - Not a directory. * 1 - pathname[] refers to a directory. */ int _pu_path_is_dir(const char *pathname) { struct stat statbuf; /* The file-statistics return buffer */ /* * Look up the file attributes. */ if(stat(pathname, &statbuf) < 0) return 0; /* * Is the file a directory? */ return S_ISDIR(statbuf.st_mode) != 0; } /*....................................................................... * Return non-zero if the specified path name refers to a regular file. * * Input: * pathname const char * The path to test. * Output: * return int 0 - Not a regular file. * 1 - pathname[] refers to a regular file. */ int _pu_path_is_file(const char *pathname) { struct stat statbuf; /* The file-statistics return buffer */ /* * Look up the file attributes. */ if(stat(pathname, &statbuf) < 0) return 0; /* * Is the file a regular file? */ return S_ISREG(statbuf.st_mode) != 0; } /*....................................................................... * Return non-zero if the specified path name refers to an executable. * * Input: * pathname const char * The path to test. * Output: * return int 0 - Not an executable file. * 1 - pathname[] refers to an executable file. */ int _pu_path_is_exe(const char *pathname) { struct stat statbuf; /* The file-statistics return buffer */ /* * Look up the file attributes. */ if(stat(pathname, &statbuf) < 0) return 0; /* * Is the file a regular file which is executable by the current user. */ return S_ISREG(statbuf.st_mode) != 0 && (statbuf.st_mode & (S_IXOTH | S_IXGRP | S_IXUSR)) && access(pathname, X_OK) == 0; } /*....................................................................... * Search backwards for the potential start of a filename. This * looks backwards from the specified index in a given string, * stopping at the first unescaped space or the start of the line. * * Input: * string const char * The string to search backwards in. * back_from int The index of the first character in string[] * that follows the pathname. * Output: * return char * The pointer to the first character of * the potential pathname, or NULL on error. */ char *_pu_start_of_path(const char *string, int back_from) { int i, j; /* * Check the arguments. */ if(!string || back_from < 0) { errno = EINVAL; return NULL; }; /* * Search backwards from the specified index. */ for(i=back_from-1; i>=0; i--) { int c = string[i]; /* * Stop on unescaped spaces. */ if(isspace((int)(unsigned char)c)) { /* * The space can't be escaped if we are at the start of the line. */ if(i==0) break; /* * Find the extent of the escape characters which precedes the space. */ for(j=i-1; j>=0 && string[j]=='\\'; j--) ; /* * If there isn't an odd number of escape characters before the space, * then the space isn't escaped. */ if((i - 1 - j) % 2 == 0) break; }; }; return (char *)string + i + 1; } /*....................................................................... * Find the length of a potential filename starting from a given * point. This looks forwards from the specified index in a given string, * stopping at the first unescaped space or the end of the line. * * Input: * string const char * The string to search backwards in. * start_from int The index of the first character of the pathname * in string[]. * Output: * return char * The pointer to the character that follows * the potential pathname, or NULL on error. */ char *_pu_end_of_path(const char *string, int start_from) { int c; /* The character being examined */ int escaped = 0; /* True when the next character is escaped */ int i; /* * Check the arguments. */ if(!string || start_from < 0) { errno = EINVAL; return NULL; }; /* * Search forwards from the specified index. */ for(i=start_from; (c=string[i]) != '\0'; i++) { if(escaped) { escaped = 0; } else if(isspace(c)) { break; } else if(c == '\\') { escaped = 1; }; }; return (char *)string + i; } /*....................................................................... * Return non-zero if the specified path name refers to an existing file. * * Input: * pathname const char * The path to test. * Output: * return int 0 - The file doesn't exist. * 1 - The file does exist. */ int _pu_file_exists(const char *pathname) { struct stat statbuf; return stat(pathname, &statbuf) == 0; } #endif /* ifndef WITHOUT_FILE_SYSTEM */ genometools-1.5.1/src/external/libtecla-1.6.1/pathutil.h000066400000000000000000000105631211610345200227050ustar00rootroot00000000000000#ifndef pathutil_h #define pathutil_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * The following object encapsulates a buffer designed to be used to * store pathnames. The pathname member of the object is initially * allocated with the size that _pu_pathname_dim() returns, and then * if this turns out to be pessimistic, the pathname can be reallocated * via calls to pb_append_to_path() and/or pb_resize_path(). */ typedef struct { char *name; /* The path buffer */ size_t dim; /* The current allocated size of buffer[] */ } PathName; PathName *_new_PathName(void); PathName *_del_PathName(PathName *path); char *_pn_clear_path(PathName *path); char *_pn_append_to_path(PathName *path, const char *string, int slen, int remove_escapes); char *_pn_prepend_to_path(PathName *path, const char *string, int slen, int remove_escapes); char *_pn_resize_path(PathName *path, size_t length); /* * Search backwards for the potential start of a filename. This * looks backwards from the specified index in a given string, * stopping at the first unescaped space or the start of the line. */ char *_pu_start_of_path(const char *string, int back_from); /* * Find the end of a potential filename, starting from a given index * in the string. This looks forwards from the specified index in a * given string, stopping at the first unescaped space or the end * of the line. */ char *_pu_end_of_path(const char *string, int start_from); /* * Return an estimate of the the length of the longest pathname * on the local system. */ size_t _pu_pathname_dim(void); /* * Return non-zero if the specified path name refers to a directory. */ int _pu_path_is_dir(const char *pathname); /* * Return non-zero if the specified path name refers to a regular file. */ int _pu_path_is_file(const char *pathname); /* * Return non-zero if the specified path name refers to an executable. */ int _pu_path_is_exe(const char *pathname); /* * Return non-zero if a file exists with the specified pathname. */ int _pu_file_exists(const char *pathname); /* * If neither the POSIX PATH_MAX macro nor the pathconf() function * can be used to find out the maximum pathlength on the target * system, the following fallback maximum length is used. */ #define MAX_PATHLEN_FALLBACK 1024 /* * If the pathname buffer turns out to be too small, it will be extended * in chunks of the following amount (plus whatever is needed at the time). */ #define PN_PATHNAME_INC 100 /* * Define the special character-sequences of the filesystem. */ #define FS_ROOT_DIR "/" /* The root directory */ #define FS_ROOT_DIR_LEN (sizeof(FS_ROOT_DIR) - 1) #define FS_PWD "." /* The current working directory */ #define FS_PWD_LEN (sizeof(FS_PWD_LEN) - 1) #define FS_DIR_SEP "/" /* The directory separator string */ #define FS_DIR_SEP_LEN (sizeof(FS_DIR_SEP) - 1) #endif genometools-1.5.1/src/external/libtecla-1.6.1/pcache.c000066400000000000000000001521771211610345200223010ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * If file-system access is to be excluded, this module has no function, * so all of its code should be excluded. */ #ifndef WITHOUT_FILE_SYSTEM #include #include #include #include #include "libtecla.h" #include "pathutil.h" #include "homedir.h" #include "freelist.h" #include "direader.h" #include "stringrp.h" #include "errmsg.h" /* * The new_PcaPathConf() constructor sets the integer first member of * the returned object to the following magic number. This is then * checked for by pca_path_completions() as a sanity check. */ #define PPC_ID_CODE 4567 /* * A pointer to a structure of the following type can be passed to * the builtin path-completion callback function to modify its behavior. */ struct PcaPathConf { int id; /* This is set to PPC_ID_CODE by new_PcaPathConf() */ PathCache *pc; /* The path-list cache in which to look up the executables */ int escaped; /* If non-zero, backslashes in the input line are */ /* interpreted as escaping special characters and */ /* spaces, and any special characters and spaces in */ /* the listed completions will also be escaped with */ /* added backslashes. This is the default behaviour. */ /* If zero, backslashes are interpreted as being */ /* literal parts of the file name, and none are added */ /* to the completion suffixes. */ int file_start; /* The index in the input line of the first character */ /* of the file name. If you specify -1 here, */ /* pca_path_completions() identifies the */ /* the start of the file by looking backwards for */ /* an unescaped space, or the beginning of the line. */ }; /* * Prepended to each chached filename is a character which contains * one of the following status codes. When a given filename (minus * this byte) is passed to the application's check_fn(), the result * is recorded in this byte, such that the next time it is looked * up, we don't have to call check_fn() again. These codes are cleared * whenever the path is scanned and whenever the check_fn() callback * is changed. */ typedef enum { PCA_F_ENIGMA='?', /* The file remains to be checked */ PCA_F_WANTED='+', /* The file has been selected by the caller's callback */ PCA_F_IGNORE='-' /* The file has been rejected by the caller's callback */ } PcaFileStatus; /* * Encapsulate the memory management objects which supply memoy for * the arrays of filenames. */ typedef struct { StringGroup *sg; /* The memory used to record the names of files */ size_t files_dim; /* The allocated size of files[] */ char **files; /* Memory for 'files_dim' pointers to files */ size_t nfiles; /* The number of filenames currently in files[] */ } CacheMem; static CacheMem *new_CacheMem(void); static CacheMem *del_CacheMem(CacheMem *cm); static void rst_CacheMem(CacheMem *cm); /* * Lists of nodes of the following type are used to record the * names and contents of individual directories. */ typedef struct PathNode PathNode; struct PathNode { PathNode *next; /* The next directory in the path */ int relative; /* True if the directory is a relative pathname */ CacheMem *mem; /* The memory used to store dir[] and files[] */ char *dir; /* The directory pathname (stored in pc->sg) */ int nfile; /* The number of filenames stored in 'files' */ char **files; /* Files of interest in the current directory, */ /* or NULL if dir[] is a relative pathname */ /* who's contents can't be cached. This array */ /* and its contents are taken from pc->abs_mem */ /* or pc->rel_mem */ }; /* * Append a new node to the list of directories in the path. */ static int add_PathNode(PathCache *pc, const char *dirname); /* * Set the maximum length allowed for usernames. * names. */ #define USR_LEN 100 /* * PathCache objects encapsulate the resources needed to record * files of interest from comma-separated lists of directories. */ struct PathCache { ErrMsg *err; /* The error reporting buffer */ FreeList *node_mem; /* A free-list of PathNode objects */ CacheMem *abs_mem; /* Memory for the filenames of absolute paths */ CacheMem *rel_mem; /* Memory for the filenames of relative paths */ PathNode *head; /* The head of the list of directories in the */ /* path, or NULL if no path has been scanned yet. */ PathNode *tail; /* The tail of the list of directories in the */ /* path, or NULL if no path has been scanned yet. */ PathName *path; /* The fully qualified name of a file */ HomeDir *home; /* Home-directory lookup object */ DirReader *dr; /* A portable directory reader */ CplFileConf *cfc; /* Configuration parameters to pass to */ /* cpl_file_completions() */ CplCheckFn *check_fn; /* The callback used to determine if a given */ /* filename should be recorded in the cache. */ void *data; /* Annonymous data to be passed to pc->check_fn() */ char usrnam[USR_LEN+1];/* The buffer used when reading the names of */ /* users. */ }; /* * Empty the cache. */ static void pca_clear_cache(PathCache *pc); /* * Read a username from string[] and record it in pc->usrnam[]. */ static int pca_read_username(PathCache *pc, const char *string, int slen, int literal, const char **nextp); /* * Extract the next component of a colon separated list of directory * paths. */ static int pca_extract_dir(PathCache *pc, const char *path, const char **nextp); /* * Scan absolute directories for files of interest, recording their names * in mem->sg and recording pointers to these names in mem->files[]. */ static int pca_scan_dir(PathCache *pc, const char *dirname, CacheMem *mem); /* * A qsort() comparison function for comparing the cached filename * strings pointed to by two (char **) array elements. Note that * this ignores the initial cache-status byte of each filename. */ static int pca_cmp_matches(const void *v1, const void *v2); /* * A qsort() comparison function for comparing a filename * against an element of an array of pointers to filename cache * entries. */ static int pca_cmp_file(const void *v1, const void *v2); /* * Initialize a PcaPathConf configuration objects with the default * options. */ static int pca_init_PcaPathConf(PcaPathConf *ppc, PathCache *pc); /* * Make a copy of a completion suffix, suitable for passing to * cpl_add_completion(). */ static int pca_prepare_suffix(PathCache *pc, const char *suffix, int add_escapes); /* * Return non-zero if the specified string appears to start with a pathname. */ static int cpa_cmd_contains_path(const char *prefix, int prefix_len); /* * Return a given prefix with escapes optionally removed. */ static const char *pca_prepare_prefix(PathCache *pc, const char *prefix, size_t prefix_len, int escaped); /* * If there is a tilde expression at the beginning of the specified path, * place the corresponding home directory into pc->path. Otherwise * just clear pc->path. */ static int pca_expand_tilde(PathCache *pc, const char *path, int pathlen, int literal, const char **endp); /* * Clear the filename status codes that are recorded before each filename * in the cache. */ static void pca_remove_marks(PathCache *pc); /* * Specify how many PathNode's to allocate at a time. */ #define PATH_NODE_BLK 30 /* * Specify the amount by which the files[] arrays are to be extended * whenever they are found to be too small. */ #define FILES_BLK_FACT 256 /*....................................................................... * Create a new object who's function is to maintain a cache of * filenames found within a list of directories, and provide quick * lookup and completion of selected files in this cache. * * Output: * return PathCache * The new, initially empty cache, or NULL * on error. */ PathCache *new_PathCache(void) { PathCache *pc; /* The object to be returned */ /* * Allocate the container. */ pc = (PathCache *)malloc(sizeof(PathCache)); if(!pc) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_PathCache(). */ pc->err = NULL; pc->node_mem = NULL; pc->abs_mem = NULL; pc->rel_mem = NULL; pc->head = NULL; pc->tail = NULL; pc->path = NULL; pc->home = NULL; pc->dr = NULL; pc->cfc = NULL; pc->check_fn = 0; pc->data = NULL; pc->usrnam[0] = '\0'; /* * Allocate a place to record error messages. */ pc->err = _new_ErrMsg(); if(!pc->err) return del_PathCache(pc); /* * Allocate the freelist of directory list nodes. */ pc->node_mem = _new_FreeList(sizeof(PathNode), PATH_NODE_BLK); if(!pc->node_mem) return del_PathCache(pc); /* * Allocate memory for recording names of files in absolute paths. */ pc->abs_mem = new_CacheMem(); if(!pc->abs_mem) return del_PathCache(pc); /* * Allocate memory for recording names of files in relative paths. */ pc->rel_mem = new_CacheMem(); if(!pc->rel_mem) return del_PathCache(pc); /* * Allocate a pathname buffer. */ pc->path = _new_PathName(); if(!pc->path) return del_PathCache(pc); /* * Allocate an object for looking up home-directories. */ pc->home = _new_HomeDir(); if(!pc->home) return del_PathCache(pc); /* * Allocate an object for reading directories. */ pc->dr = _new_DirReader(); if(!pc->dr) return del_PathCache(pc); /* * Allocate a cpl_file_completions() configuration object. */ pc->cfc = new_CplFileConf(); if(!pc->cfc) return del_PathCache(pc); /* * Configure cpl_file_completions() to use check_fn() to select * files of interest. */ cfc_set_check_fn(pc->cfc, pc->check_fn, pc->data); /* * Return the cache, ready for use. */ return pc; } /*....................................................................... * Delete a given cache of files, returning the resources that it * was using to the system. * * Input: * pc PathCache * The cache to be deleted (can be NULL). * Output: * return PathCache * The deleted object (ie. allways NULL). */ PathCache *del_PathCache(PathCache *pc) { if(pc) { /* * Delete the error message buffer. */ pc->err = _del_ErrMsg(pc->err); /* * Delete the memory of the list of path nodes. */ pc->node_mem = _del_FreeList(pc->node_mem, 1); /* * Delete the memory used to record filenames. */ pc->abs_mem = del_CacheMem(pc->abs_mem); pc->rel_mem = del_CacheMem(pc->rel_mem); /* * The list of PathNode's was already deleted when node_mem was * deleted. */ pc->head = NULL; pc->tail = NULL; /* * Delete the pathname buffer. */ pc->path = _del_PathName(pc->path); /* * Delete the home-directory lookup object. */ pc->home = _del_HomeDir(pc->home); /* * Delete the directory reader. */ pc->dr = _del_DirReader(pc->dr); /* * Delete the cpl_file_completions() config object. */ pc->cfc = del_CplFileConf(pc->cfc); /* * Delete the container. */ free(pc); }; return NULL; } /*....................................................................... * If you want subsequent calls to pca_lookup_file() and * pca_path_completions() to only return the filenames of certain * types of files, for example executables, or filenames ending in * ".ps", call this function to register a file-selection callback * function. This callback function takes the full pathname of a file, * plus application-specific data, and returns 1 if the file is of * interest, and zero otherwise. * * Input: * pc PathCache * The filename cache. * check_fn CplCheckFn * The function to call to see if the name of * a given file should be included in the * cache. This determines what type of files * will reside in the cache. To revert to * selecting all files, regardless of type, * pass 0 here. * data void * You can pass a pointer to anything you * like here, including NULL. It will be * passed to your check_fn() callback * function, for its private use. */ void pca_set_check_fn(PathCache *pc, CplCheckFn *check_fn, void *data) { if(pc) { /* * If the callback or its data pointer have changed, clear the cached * statuses of files that were accepted or rejected by the previous * calback. */ if(check_fn != pc->check_fn || data != pc->data) pca_remove_marks(pc); /* * Record the new callback locally. */ pc->check_fn = check_fn; pc->data = data; /* * Configure cpl_file_completions() to use the same callback to * select files of interest. */ cfc_set_check_fn(pc->cfc, check_fn, data); }; return; } /*....................................................................... * Return a description of the last path-caching error that occurred. * * Input: * pc PathCache * The filename cache that suffered the error. * Output: * return char * The description of the last error. */ const char *pca_last_error(PathCache *pc) { return pc ? _err_get_msg(pc->err) : "NULL PathCache argument"; } /*....................................................................... * Discard all cached filenames. * * Input: * pc PathCache * The cache to be cleared. */ static void pca_clear_cache(PathCache *pc) { if(pc) { /* * Return all path-nodes to the freelist. */ _rst_FreeList(pc->node_mem); pc->head = pc->tail = NULL; /* * Delete all filename strings. */ rst_CacheMem(pc->abs_mem); rst_CacheMem(pc->rel_mem); }; return; } /*....................................................................... * Build the list of files of interest contained in a given * colon-separated list of directories. * * Input: * pc PathCache * The cache in which to store the names of * the files that are found in the list of * directories. * path const char * A colon-separated list of directory * paths. Under UNIX, when searching for * executables, this should be the return * value of getenv("PATH"). * Output: * return int 0 - OK. * 1 - An error occurred. A description of * the error can be acquired by calling * pca_last_error(pc). */ int pca_scan_path(PathCache *pc, const char *path) { const char *pptr; /* A pointer to the next unprocessed character in path[] */ PathNode *node; /* A node in the list of directory paths */ char **fptr; /* A pointer into pc->abs_mem->files[] */ /* * Check the arguments. */ if(!pc) return 1; /* * Clear the outdated contents of the cache. */ pca_clear_cache(pc); /* * If no path list was provided, there is nothing to be added to the * cache. */ if(!path) return 0; /* * Extract directories from the path list, expanding tilde expressions * on the fly into pc->pathname, then add them to the list of path * nodes, along with a sorted list of the filenames of interest that * the directories hold. */ pptr = path; while(*pptr) { /* * Extract the next pathname component into pc->path->name. */ if(pca_extract_dir(pc, pptr, &pptr)) return 1; /* * Add a new node to the list of paths, containing both the * directory name and, if not a relative pathname, the list of * files of interest in the directory. */ if(add_PathNode(pc, pc->path->name)) return 1; }; /* * The file arrays in each absolute directory node are sections of * pc->abs_mem->files[]. Record pointers to the starts of each * of these sections in each directory node. Note that this couldn't * be done in add_PathNode(), because pc->abs_mem->files[] may * get reallocated in subsequent calls to add_PathNode(), thus * invalidating any pointers to it. */ fptr = pc->abs_mem->files; for(node=pc->head; node; node=node->next) { node->files = fptr; fptr += node->nfile; }; return 0; } /*....................................................................... * Extract the next directory path from a colon-separated list of * directories, expanding tilde home-directory expressions where needed. * * Input: * pc PathCache * The cache of filenames. * path const char * A pointer to the start of the next component * in the path list. * Input/Output: * nextp const char ** A pointer to the next unprocessed character * in path[] will be assigned to *nextp. * Output: * return int 0 - OK. The extracted path is in pc->path->name. * 1 - Error. A description of the error will * have been left in pc->err. */ static int pca_extract_dir(PathCache *pc, const char *path, const char **nextp) { const char *pptr; /* A pointer into path[] */ const char *sptr; /* The path following tilde expansion */ int escaped = 0; /* True if the last character was a backslash */ /* * If there is a tilde expression at the beginning of the specified path, * place the corresponding home directory into pc->path. Otherwise * just clear pc->path. */ if(pca_expand_tilde(pc, path, strlen(path), 0, &pptr)) return 1; /* * Keep a record of the current location in the path. */ sptr = pptr; /* * Locate the end of the directory name in the pathname string, stopping * when either the end of the string is reached, or an un-escaped colon * separator is seen. */ while(*pptr && (escaped || *pptr != ':')) escaped = !escaped && *pptr++ == '\\'; /* * Append the rest of the directory path to the pathname buffer. */ if(_pn_append_to_path(pc->path, sptr, pptr - sptr, 1) == NULL) { _err_record_msg(pc->err, "Insufficient memory to record directory name", END_ERR_MSG); return 1; }; /* * To facilitate subsequently appending filenames to the directory * path name, make sure that the recorded directory name ends in a * directory separator. */ { int dirlen = strlen(pc->path->name); if(dirlen < FS_DIR_SEP_LEN || strncmp(pc->path->name + dirlen - FS_DIR_SEP_LEN, FS_DIR_SEP, FS_DIR_SEP_LEN) != 0) { if(_pn_append_to_path(pc->path, FS_DIR_SEP, FS_DIR_SEP_LEN, 0) == NULL) { _err_record_msg(pc->err, "Insufficient memory to record directory name", END_ERR_MSG); return 1; }; }; }; /* * Skip the separator unless we have reached the end of the path. */ if(*pptr==':') pptr++; /* * Return the unprocessed tail of the path-list string. */ *nextp = pptr; return 0; } /*....................................................................... * Read a username, stopping when a directory separator is seen, a colon * separator is seen, the end of the string is reached, or the username * buffer overflows. * * Input: * pc PathCache * The cache of filenames. * string char * The string who's prefix contains the name. * slen int The max number of characters to read from string[]. * literal int If true, treat backslashes as literal characters * instead of escapes. * Input/Output: * nextp char ** A pointer to the next unprocessed character * in string[] will be assigned to *nextp. * Output: * return int 0 - OK. The username can be found in pc->usrnam. * 1 - Error. A description of the error message * can be found in pc->err. */ static int pca_read_username(PathCache *pc, const char *string, int slen, int literal, const char **nextp) { int usrlen; /* The number of characters in pc->usrnam[] */ const char *sptr; /* A pointer into string[] */ int escaped = 0; /* True if the last character was a backslash */ /* * Extract the username. */ for(sptr=string,usrlen=0; usrlen < USR_LEN && (sptr-string) < slen; sptr++) { /* * Stop if the end of the string is reached, or a directory separator * or un-escaped colon separator is seen. */ if(!*sptr || strncmp(sptr, FS_DIR_SEP, FS_DIR_SEP_LEN)==0 || (!escaped && *sptr == ':')) break; /* * Escape the next character? */ if(!literal && !escaped && *sptr == '\\') { escaped = 1; } else { escaped = 0; pc->usrnam[usrlen++] = *sptr; }; }; /* * Did the username overflow the buffer? */ if(usrlen >= USR_LEN) { _err_record_msg(pc->err, "Username too long", END_ERR_MSG); return 1; }; /* * Terminate the string. */ pc->usrnam[usrlen] = '\0'; /* * Indicate where processing of the input string should continue. */ *nextp = sptr; return 0; } /*....................................................................... * Create a new CacheMem object. * * Output: * return CacheMem * The new object, or NULL on error. */ static CacheMem *new_CacheMem(void) { CacheMem *cm; /* The object to be returned */ /* * Allocate the container. */ cm = (CacheMem *)malloc(sizeof(CacheMem)); if(!cm) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_CacheMem(). */ cm->sg = NULL; cm->files_dim = 0; cm->files = NULL; cm->nfiles = 0; /* * Allocate a list of string segments for storing filenames. */ cm->sg = _new_StringGroup(_pu_pathname_dim()); if(!cm->sg) return del_CacheMem(cm); /* * Allocate an array of pointers to filenames. * This will be extended later if needed. */ cm->files_dim = FILES_BLK_FACT; cm->files = (char **) malloc(sizeof(*cm->files) * cm->files_dim); if(!cm->files) { errno = ENOMEM; return del_CacheMem(cm); }; return cm; } /*....................................................................... * Delete a CacheMem object. * * Input: * cm CacheMem * The object to be deleted. * Output: * return CacheMem * The deleted object (always NULL). */ static CacheMem *del_CacheMem(CacheMem *cm) { if(cm) { /* * Delete the memory that was used to record filename strings. */ cm->sg = _del_StringGroup(cm->sg); /* * Delete the array of pointers to filenames. */ cm->files_dim = 0; if(cm->files) { free(cm->files); cm->files = NULL; }; /* * Delete the container. */ free(cm); }; return NULL; } /*....................................................................... * Re-initialize the memory used to allocate filename strings. * * Input: * cm CacheMem * The memory cache to be cleared. */ static void rst_CacheMem(CacheMem *cm) { _clr_StringGroup(cm->sg); cm->nfiles = 0; return; } /*....................................................................... * Append a new directory node to the list of directories read from the * path. * * Input: * pc PathCache * The filename cache. * dirname const char * The name of the new directory. * Output: * return int 0 - OK. * 1 - Error. */ static int add_PathNode(PathCache *pc, const char *dirname) { PathNode *node; /* The new directory list node */ int relative; /* True if dirname[] is a relative pathname */ /* * Have we been passed a relative pathname or an absolute pathname? */ relative = strncmp(dirname, FS_ROOT_DIR, FS_ROOT_DIR_LEN) != 0; /* * If it's an absolute pathname, ignore it if the corresponding * directory doesn't exist. */ if(!relative && !_pu_path_is_dir(dirname)) return 0; /* * Allocate a new list node to record the specifics of the new directory. */ node = (PathNode *) _new_FreeListNode(pc->node_mem); if(!node) { _err_record_msg(pc->err, "Insufficient memory to cache new directory.", END_ERR_MSG); return 1; }; /* * Initialize the node. */ node->next = NULL; node->relative = relative; node->mem = relative ? pc->rel_mem : pc->abs_mem; node->dir = NULL; node->nfile = 0; node->files = NULL; /* * Make a copy of the directory pathname. */ node->dir = _sg_store_string(pc->abs_mem->sg, dirname, 0); if(!node->dir) { _err_record_msg(pc->err, "Insufficient memory to store directory name.", END_ERR_MSG); return 1; }; /* * Scan absolute directories for files of interest, recording their names * in node->mem->sg and appending pointers to these names to the * node->mem->files[] array. */ if(!node->relative) { int nfile = node->nfile = pca_scan_dir(pc, node->dir, node->mem); if(nfile < 1) { /* No files matched or an error occurred */ node = (PathNode *) _del_FreeListNode(pc->node_mem, node); return nfile < 0; }; }; /* * Append the new node to the list. */ if(pc->head) { pc->tail->next = node; pc->tail = node; } else { pc->head = pc->tail = node; }; return 0; } /*....................................................................... * Scan a given directory for files of interest, record their names * in mem->sg and append pointers to them to the mem->files[] array. * * Input: * pc PathCache * The filename cache. * dirname const char * The pathname of the directory to be scanned. * mem CacheMem * The memory in which to store filenames of * interest. * Output: * return int The number of files recorded, or -1 if a * memory error occurs. Note that the * inability to read the contents of the * directory is not counted as an error. */ static int pca_scan_dir(PathCache *pc, const char *dirname, CacheMem *mem) { int nfile = 0; /* The number of filenames recorded */ const char *filename; /* The name of the file being looked at */ /* * Attempt to open the directory. If the directory can't be read then * there are no accessible files of interest in the directory. */ if(_dr_open_dir(pc->dr, dirname, NULL)) return 0; /* * Record the names of all files in the directory in the cache. */ while((filename = _dr_next_file(pc->dr))) { char *copy; /* A copy of the filename */ /* * Make a temporary copy of the filename with an extra byte prepended. */ _pn_clear_path(pc->path); if(_pn_append_to_path(pc->path, " ", 1, 0) == NULL || _pn_append_to_path(pc->path, filename, -1, 1) == NULL) { _err_record_msg(pc->err, "Insufficient memory to record filename", END_ERR_MSG); return -1; }; /* * Store the filename. */ copy = _sg_store_string(mem->sg, pc->path->name, 0); if(!copy) { _err_record_msg(pc->err, "Insufficient memory to cache file name.", END_ERR_MSG); return -1; }; /* * Mark the filename as unchecked. */ copy[0] = PCA_F_ENIGMA; /* * Make room to store a pointer to the copy in mem->files[]. */ if(mem->nfiles + 1 > mem->files_dim) { int needed = mem->files_dim + FILES_BLK_FACT; char **files = (char **) realloc(mem->files, sizeof(*mem->files)*needed); if(!files) { _err_record_msg(pc->err, "Insufficient memory to extend filename cache.", END_ERR_MSG); return 1; }; mem->files = files; mem->files_dim = needed; }; /* * Record a pointer to the copy of the filename at the end of the files[] * array. */ mem->files[mem->nfiles++] = copy; /* * Keep a record of the number of files matched so far. */ nfile++; }; /* * Sort the list of files into lexical order. */ qsort(mem->files + mem->nfiles - nfile, nfile, sizeof(*mem->files), pca_cmp_matches); /* * Return the number of files recorded in mem->files[]. */ return nfile; } /*....................................................................... * A qsort() comparison function for comparing the cached filename * strings pointed to by two (char **) array elements. Note that * this ignores the initial cache-status byte of each filename. * * Input: * v1, v2 void * Pointers to the pointers of two strings to be compared. * Output: * return int -1 -> v1 < v2. * 0 -> v1 == v2 * 1 -> v1 > v2 */ static int pca_cmp_matches(const void *v1, const void *v2) { const char **s1 = (const char **) v1; const char **s2 = (const char **) v2; return strcmp(*s1+1, *s2+1); } /*....................................................................... * Given the simple name of a file, search the cached list of files * in the order in which they where found in the list of directories * previously presented to pca_scan_path(), and return the pathname * of the first file which has this name. If a pathname to a file is * given instead of a simple filename, this is returned without being * looked up in the cache, but with any initial ~username expression * expanded, and optionally, unescaped backslashes removed. * * Input: * pc PathCache * The cached list of files. * name const char * The name of the file to lookup. * name_len int The length of the filename string at the * beginning of name[], or -1 to indicate that * the filename occupies the whole of the * string. * literal int If this argument is zero, lone backslashes * in name[] are ignored during comparison * with filenames in the cache, under the * assumption that they were in the input line * soley to escape the special significance of * characters like spaces. To have them treated * as normal characters, give this argument a * non-zero value, such as 1. * Output: * return char * The pathname of the first matching file, * or NULL if not found. Note that the returned * pointer points to memory owned by *pc, and * will become invalid on the next call to any * function in the PathCache module. */ char *pca_lookup_file(PathCache *pc, const char *name, int name_len, int literal) { PathNode *node; /* A node in the list of directories in the path */ char **match; /* A pointer to a matching filename string in the cache */ /* * Check the arguments. */ if(!pc || !name || name_len==0) return NULL; /* * If no length was specified, determine the length of the string to * be looked up. */ if(name_len < 0) name_len = strlen(name); /* * If the word starts with a ~username expression, the root directory, * of it contains any directory separators, then treat it isn't a simple * filename that can be looked up in the cache, but rather appears to * be the pathname of a file. If so, return a copy of this pathname with * escapes removed, if requested, and any initial ~username expression * expanded. */ if(cpa_cmd_contains_path(name, name_len)) { const char *nptr; if(pca_expand_tilde(pc, name, name_len, literal, &nptr) || _pn_append_to_path(pc->path, nptr, name_len - (nptr-name), !literal) == NULL) return NULL; return pc->path->name; }; /* * Look up the specified filename in each of the directories of the path, * in the same order that they were listed in the path, and stop as soon * as an instance of the file is found. */ for(node=pc->head; node; node=node->next) { /* * If the directory of the latest node is a relative pathname, * scan it for files of interest. */ if(node->relative) { rst_CacheMem(node->mem); if(pca_scan_dir(pc, node->dir, node->mem) < 1) continue; node->files = node->mem->files; node->nfile = node->mem->nfiles; }; /* * Copy the filename into a temporary buffer, while interpretting * escape characters if needed. */ _pn_clear_path(pc->path); if(_pn_append_to_path(pc->path, name, name_len, !literal) == NULL) return NULL; /* * Perform a binary search for the requested filename. */ match = (char **)bsearch(pc->path->name, node->files, node->nfile, sizeof(*node->files), pca_cmp_file); if(match) { /* * Prepend the pathname in which the directory was found, which we have * guaranteed to end in a directory separator, to the located filename. */ if(_pn_prepend_to_path(pc->path, node->dir, -1, 0) == NULL) return NULL; /* * Return the matching pathname unless it is rejected by the application. */ if(!pc->check_fn || (*match)[0] == PCA_F_WANTED || ((*match)[0]==PCA_F_ENIGMA && pc->check_fn(pc->data, pc->path->name))){ (*match)[0] = PCA_F_WANTED; return pc->path->name; } else { *(match)[0] = PCA_F_IGNORE; }; }; }; /* * File not found. */ return NULL; } /*....................................................................... * A qsort() comparison function for comparing a filename string to * a cached filename string pointed to by a (char **) array element. * This ignores the initial code byte at the start of the cached filename * string. * * Input: * v1, v2 void * Pointers to the pointers of two strings to be compared. * Output: * return int -1 -> v1 < v2. * 0 -> v1 == v2 * 1 -> v1 > v2 */ static int pca_cmp_file(const void *v1, const void *v2) { const char *file_name = (const char *) v1; const char **cache_name = (const char **) v2; return strcmp(file_name, *cache_name + 1); } /*....................................................................... * The PcaPathConf structure may have options added to it in the future. * To allow your application to be linked against a shared version of the * tecla library, without these additions causing your application to * crash, you should use new_PcaPathConf() to allocate such structures. * This will set all of the configuration options to their default values, * which you can then change before passing the structure to * pca_path_completions(). * * Input: * pc PathCache * The filename cache in which to look for * file name completions. * Output: * return PcaPathConf * The new configuration structure, or NULL * on error. A descripition of the error * can be found by calling pca_last_error(pc). */ PcaPathConf *new_PcaPathConf(PathCache *pc) { PcaPathConf *ppc; /* The object to be returned */ /* * Check the arguments. */ if(!pc) return NULL; /* * Allocate the container. */ ppc = (PcaPathConf *)malloc(sizeof(PcaPathConf)); if(!ppc) { _err_record_msg(pc->err, "Insufficient memory.", END_ERR_MSG); return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to del_PcaPathConf(). */ if(pca_init_PcaPathConf(ppc, pc)) return del_PcaPathConf(ppc); return ppc; } /*....................................................................... * Initialize a PcaPathConf configuration structure with defaults. * * Input: * ppc PcaPathConf * The structre to be initialized. * pc PathCache * The cache in which completions will be looked up. * Output: * return int 0 - OK. * 1 - Error. A description of the error can be * obtained by calling pca_last_error(pc). */ static int pca_init_PcaPathConf(PcaPathConf *ppc, PathCache *pc) { /* * Check the arguments. */ if(!pc) return 1; /* * Set the default options. */ ppc->id = PPC_ID_CODE; ppc->pc = pc; ppc->escaped = 1; ppc->file_start = -1; return 0; } /*....................................................................... * Delete a PcaPathConf object. * * Input: * ppc PcaPathConf * The object to be deleted. * Output: * return PcaPathConf * The deleted object (always NULL). */ PcaPathConf *del_PcaPathConf(PcaPathConf *ppc) { if(ppc) { ppc->pc = NULL; /* It is up to the caller to delete the cache */ /* * Delete the container. */ free(ppc); }; return NULL; } /*....................................................................... * pca_path_completions() is a completion callback function for use * directly with cpl_complete_word() or gl_customize_completions(), or * indirectly from your own completion callback function. It requires * that a CpaPathArgs object be passed via its 'void *data' argument. */ CPL_MATCH_FN(pca_path_completions) { PcaPathConf *ppc; /* The configuration arguments */ PathCache *pc; /* The cache in which to look for completions */ PathNode *node; /* A node in the list of directories in the path */ const char *filename; /* The name of the file being looked at */ const char *start_path; /* The pointer to the start of the pathname */ /* in line[]. */ int word_start; /* The index in line[] corresponding to start_path */ const char *prefix; /* The file-name prefix being searched for */ size_t prefix_len; /* The length of the prefix being completed */ int bot; /* The lowest index of the array not searched yet */ int top; /* The highest index of the array not searched yet */ /* * Check the arguments. */ if(!cpl) return 1; if(!line || word_end < 0 || !data) { cpl_record_error(cpl, "pca_path_completions: Invalid arguments."); return 1; }; /* * Get the configuration arguments. */ ppc = (PcaPathConf *) data; /* * Check that the callback data is a PcaPathConf structure returned * by new_PcaPathConf(). */ if(ppc->id != PPC_ID_CODE) { cpl_record_error(cpl, "Invalid callback data passed to pca_path_completions()"); return 1; }; /* * Get the filename cache. */ pc = ppc->pc; /* * Get the start of the file name. If not specified by the caller, * identify it by searching backwards in the input line for an * unescaped space or the start of the line. */ if(ppc->file_start < 0) { start_path = _pu_start_of_path(line, word_end); if(!start_path) { cpl_record_error(cpl, "Unable to find the start of the file name."); return 1; }; } else { start_path = line + ppc->file_start; }; /* * Get the index of the start of the word being completed. */ word_start = start_path - line; /* * Work out the length of the prefix that is bein completed. */ prefix_len = word_end - word_start; /* * If the word starts with a ~username expression or the root directory, * of it contains any directory separators, then completion must be * delegated to cpl_file_completions(). */ if(cpa_cmd_contains_path(start_path, prefix_len)) { cfc_file_start(pc->cfc, word_start); return cpl_file_completions(cpl, pc->cfc, line, word_end); }; /* * Look up the specified file name in each of the directories of the path, * in the same order that they were listed in the path, and stop as soon * as an instance of the file is found. */ for(node=pc->head; node; node=node->next) { /* * If the directory of the latest node is a relative pathname, * scan it for files of interest. */ if(node->relative) { rst_CacheMem(node->mem); if(pca_scan_dir(pc, node->dir, node->mem) < 1) continue; node->files = node->mem->files; node->nfile = node->mem->nfiles; }; /* * If needed, make a copy of the file-name being matched, with * escapes removed. Note that we need to do this anew every loop * iteration, because the above call to pca_scan_dir() uses * pc->path. */ prefix = pca_prepare_prefix(pc, start_path, prefix_len, ppc->escaped); if(!prefix) return 1; /* * The directory entries are sorted, so we can perform a binary * search for an instance of the prefix being searched for. */ bot = 0; top = node->nfile - 1; while(top >= bot) { int mid = (top + bot)/2; int test = strncmp(node->files[mid]+1, prefix, prefix_len); if(test > 0) top = mid - 1; else if(test < 0) bot = mid + 1; else { top = bot = mid; break; }; }; /* * If we found a match, look to see if any of its neigbors also match. */ if(top == bot) { while(--bot >= 0 && strncmp(node->files[bot]+1, prefix, prefix_len) == 0) ; while(++top < node->nfile && strncmp(node->files[top]+1, prefix, prefix_len) == 0) ; /* * We will have gone one too far in each direction. */ bot++; top--; /* * Add the completions to the list after checking them against the * callers requirements. */ for( ; bot<=top; bot++) { char *match = node->files[bot]; /* * Form the full pathname of the file. */ _pn_clear_path(pc->path); if(_pn_append_to_path(pc->path, node->dir, -1, 0) == NULL || _pn_append_to_path(pc->path, match+1, -1, 0) == NULL) { _err_record_msg(pc->err, "Insufficient memory to complete file name", END_ERR_MSG); return 1; }; /* * Should the file be included in the list of completions? */ if(!pc->check_fn || match[0] == PCA_F_WANTED || (match[0]==PCA_F_ENIGMA && pc->check_fn(pc->data, pc->path->name))) { match[0] = PCA_F_WANTED; /* * Copy the completion suffix into the work pathname pc->path->name, * adding backslash escapes if needed. */ if(pca_prepare_suffix(pc, match + 1 + prefix_len, ppc->escaped)) return 1; /* * Record the completion. */ if(cpl_add_completion(cpl, line, word_start, word_end, pc->path->name, "", " ")) return 1; /* * The file was rejected by the application. */ } else { match[0] = PCA_F_IGNORE; }; }; }; }; /* * We now need to search for subdirectories of the current directory which * have matching prefixes. First, if needed, make a copy of the word being * matched, with escapes removed. */ prefix = pca_prepare_prefix(pc, start_path, prefix_len, ppc->escaped); if(!prefix) return 1; /* * Now open the current directory. */ if(_dr_open_dir(pc->dr, FS_PWD, NULL)) return 0; /* * Scan the current directory for sub-directories whos names start with * the prefix that we are completing. */ while((filename = _dr_next_file(pc->dr))) { /* * Does the latest filename match the prefix, and is it a directory? */ if(strncmp(filename, prefix, prefix_len) == 0 && _pu_path_is_dir(filename)){ /* * Record the completion. */ if(pca_prepare_suffix(pc, filename + prefix_len, ppc->escaped) || cpl_add_completion(cpl, line, word_start, word_end, pc->path->name, FS_DIR_SEP, FS_DIR_SEP)) return 1; /* * The prefix in pc->path->name will have been overwritten by * pca_prepare_suffix(). Restore it here. */ prefix = pca_prepare_prefix(pc, start_path, prefix_len, ppc->escaped); if(!prefix) return 1; }; }; _dr_close_dir(pc->dr); return 0; } /*....................................................................... * Using the work buffer pc->path, make a suitably escaped copy of a * given completion suffix, ready to be passed to cpl_add_completion(). * * Input: * pc PathCache * The filename cache resource object. * suffix char * The suffix to be copied. * add_escapes int If true, escape special characters. * Output: * return int 0 - OK. * 1 - Error. */ static int pca_prepare_suffix(PathCache *pc, const char *suffix, int add_escapes) { const char *sptr; /* A pointer into suffix[] */ int nbsl; /* The number of backslashes to add to the suffix */ int i; /* * How long is the suffix? */ int suffix_len = strlen(suffix); /* * Clear the work buffer. */ _pn_clear_path(pc->path); /* * Count the number of backslashes that will have to be added to * escape spaces, tabs, backslashes and wildcard characters. */ nbsl = 0; if(add_escapes) { for(sptr = suffix; *sptr; sptr++) { switch(*sptr) { case ' ': case '\t': case '\\': case '*': case '?': case '[': nbsl++; break; }; }; }; /* * Arrange for the output path buffer to have sufficient room for the * both the suffix and any backslashes that have to be inserted. */ if(_pn_resize_path(pc->path, suffix_len + nbsl) == NULL) { _err_record_msg(pc->err, "Insufficient memory to complete file name", END_ERR_MSG); return 1; }; /* * If the suffix doesn't need any escapes, copy it directly into the * work buffer. */ if(nbsl==0) { strcpy(pc->path->name, suffix); } else { /* * Make a copy with special characters escaped? */ if(nbsl > 0) { const char *src = suffix; char *dst = pc->path->name; for(i=0; i= FS_ROOT_DIR_LEN && strncmp(prefix, FS_ROOT_DIR, FS_ROOT_DIR_LEN) == 0) return 1; /* * Search the prefix for directory separators, returning as soon as * any are found, since their presence indicates that the filename * starts with a pathname specification (valid or otherwise). */ for(i=0; i= FS_DIR_SEP_LEN && strncmp(prefix + i, FS_DIR_SEP, FS_DIR_SEP_LEN) == 0) return 1; }; /* * The file name doesn't appear to start with a pathname specification. */ return 0; } /*....................................................................... * If needed make a new copy of the prefix being matched, in pc->path->name, * but with escapes removed. If no escapes are to be removed, simply return * the original prefix string. * * Input: * pc PathCache * The cache being searched. * prefix const char * The prefix to be processed. * prefix_len size_t The length of the prefix. * escaped int If true, return a copy with escapes removed. * Output: * return const char * The prepared prefix, or NULL on error, in * which case an error message will have been * left in pc->err. */ static const char *pca_prepare_prefix(PathCache *pc, const char *prefix, size_t prefix_len, int escaped) { /* * Make a copy with escapes removed? */ if(escaped) { _pn_clear_path(pc->path); if(_pn_append_to_path(pc->path, prefix, prefix_len, 1) == NULL) { _err_record_msg(pc->err, "Insufficient memory to complete filename", END_ERR_MSG); return NULL; }; return pc->path->name; }; return prefix; } /*....................................................................... * If backslashes in the filename should be treated as literal * characters, call the following function with literal=1. Otherwise * the default is to treat them as escape characters, used for escaping * spaces etc.. * * Input: * ppc PcaPathConf * The pca_path_completions() configuration object * to be configured. * literal int Pass non-zero here to enable literal interpretation * of backslashes. Pass 0 to turn off literal * interpretation. */ void ppc_literal_escapes(PcaPathConf *ppc, int literal) { if(ppc) ppc->escaped = !literal; } /*....................................................................... * Call this function if you know where the index at which the * filename prefix starts in the input line. Otherwise by default, * or if you specify start_index to be -1, the filename is taken * to start after the first unescaped space preceding the cursor, * or the start of the line, which ever comes first. * * Input: * ppc PcaPathConf * The pca_path_completions() configuration object * to be configured. * start_index int The index of the start of the filename in * the input line, or -1 to select the default. */ void ppc_file_start(PcaPathConf *ppc, int start_index) { if(ppc) ppc->file_start = start_index; } /*....................................................................... * Expand any ~user expression found at the start of a path, leaving * either an empty string in pc->path if there is no ~user expression, * or the corresponding home directory. * * Input: * pc PathCache * The filename cache. * path const char * The path to expand. * pathlen int The max number of characters to look at in path[]. * literal int If true, treat backslashes as literal characters * instead of escapes. * Input/Output: * endp const char * A pointer to the next unprocessed character in * path[] will be assigned to *endp. * Output: * return int 0 - OK * 1 - Error (a description will have been placed * in pc->err). */ static int pca_expand_tilde(PathCache *pc, const char *path, int pathlen, int literal, const char **endp) { const char *pptr = path; /* A pointer into path[] */ const char *homedir=NULL; /* A home directory */ /* * Clear the pathname buffer. */ _pn_clear_path(pc->path); /* * If the first character is a tilde, then perform home-directory * interpolation. */ if(*pptr == '~') { /* * Skip the tilde character and attempt to read the username that follows * it, into pc->usrnam[]. */ if(pca_read_username(pc, ++pptr, pathlen-1, literal, &pptr)) return 1; /* * Attempt to lookup the home directory of the user. */ homedir = _hd_lookup_home_dir(pc->home, pc->usrnam); if(!homedir) { _err_record_msg(pc->err, _hd_last_home_dir_error(pc->home), END_ERR_MSG); return 1; }; /* * Append the home directory to the pathname string. */ if(_pn_append_to_path(pc->path, homedir, -1, 0) == NULL) { _err_record_msg(pc->err, "Insufficient memory for home directory expansion", END_ERR_MSG); return 1; }; }; /* * ~user and ~ are usually followed by a directory separator to * separate them from the file contained in the home directory. * If the home directory is the root directory, then we don't want * to follow the home directory by a directory separator, so we should * skip over it so that it doesn't get copied into the output pathname */ if(homedir && strcmp(homedir, FS_ROOT_DIR) == 0 && (pptr-path) + FS_DIR_SEP_LEN < pathlen && strncmp(pptr, FS_DIR_SEP, FS_DIR_SEP_LEN) == 0) { pptr += FS_DIR_SEP_LEN; }; /* * Return a pointer to the next unprocessed character. */ *endp = pptr; return 0; } /*....................................................................... * Clear the filename status codes that are recorded before each filename * in the cache. * * Input: * pc PathCache * The filename cache. */ static void pca_remove_marks(PathCache *pc) { PathNode *node; /* A node in the list of directories in the path */ int i; /* * Traverse the absolute directories of the path, clearing the * filename status marks that precede each filename. */ for(node=pc->head; node; node=node->next) { if(!node->relative) { for(i=0; infile; i++) *node->files[i] = PCA_F_ENIGMA; }; }; return; } #endif /* ifndef WITHOUT_FILE_SYSTEM */ genometools-1.5.1/src/external/libtecla-1.6.1/stringrp.c000066400000000000000000000211301211610345200227060ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include #include "freelist.h" #include "stringrp.h" /* * StringSegment objects store lots of small strings in larger * character arrays. Since the total length of all of the strings can't * be known in advance, an extensible list of large character arrays, * called string-segments are used. */ typedef struct StringSegment StringSegment; struct StringSegment { StringSegment *next; /* A pointer to the next segment in the list */ char *block; /* An array of characters to be shared between strings */ int unused; /* The amount of unused space at the end of block[] */ }; /* * StringGroup is typedef'd in stringrp.h. */ struct StringGroup { FreeList *node_mem; /* The StringSegment free-list */ int block_size; /* The dimension of each character array block */ StringSegment *head; /* The list of character arrays */ }; /* * Specify how many StringSegment's to allocate at a time. */ #define STR_SEG_BLK 20 /*....................................................................... * Create a new StringGroup object. * * Input: * segment_size int The length of each of the large character * arrays in which multiple strings will be * stored. This sets the length of longest * string that can be stored, and for efficiency * should be at least 10 times as large as * the average string that will be stored. * Output: * return StringGroup * The new object, or NULL on error. */ StringGroup *_new_StringGroup(int segment_size) { StringGroup *sg; /* The object to be returned */ /* * Check the arguments. */ if(segment_size < 1) { errno = EINVAL; return NULL; }; /* * Allocate the container. */ sg = (StringGroup *) malloc(sizeof(StringGroup)); if(!sg) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize the * container at least up to the point at which it can safely be passed * to _del_StringGroup(). */ sg->node_mem = NULL; sg->head = NULL; sg->block_size = segment_size; /* * Allocate the free list that is used to allocate list nodes. */ sg->node_mem = _new_FreeList(sizeof(StringSegment), STR_SEG_BLK); if(!sg->node_mem) return _del_StringGroup(sg); return sg; } /*....................................................................... * Delete a StringGroup object. * * Input: * sg StringGroup * The object to be deleted. * Output: * return StringGroup * The deleted object (always NULL). */ StringGroup *_del_StringGroup(StringGroup *sg) { if(sg) { StringSegment *node; /* * Delete the character arrays. */ for(node=sg->head; node; node=node->next) { if(node->block) free(node->block); node->block = NULL; }; /* * Delete the list nodes that contained the string segments. */ sg->node_mem = _del_FreeList(sg->node_mem, 1); sg->head = NULL; /* Already deleted by deleting sg->node_mem */ /* * Delete the container. */ free(sg); }; return NULL; } /*....................................................................... * Make a copy of a string in the specified string group, and return * a pointer to the copy. * * Input: * sg StringGroup * The group to store the string in. * string const char * The string to be recorded. * remove_escapes int If true, omit backslashes which escape * other characters when making the copy. * Output: * return char * The pointer to the copy of the string, * or NULL if there was insufficient memory. */ char *_sg_store_string(StringGroup *sg, const char *string, int remove_escapes) { char *copy; /* The recorded copy of string[] */ /* * Check the arguments. */ if(!sg || !string) return NULL; /* * Get memory for the string. */ copy = _sg_alloc_string(sg, strlen(string)); if(copy) { /* * If needed, remove backslash escapes while copying the input string * into the cache string. */ if(remove_escapes) { int escaped = 0; /* True if the next character should be */ /* escaped. */ const char *src = string; /* A pointer into the input string */ char *dst = copy; /* A pointer into the cached copy of the */ /* string. */ while(*src) { if(!escaped && *src == '\\') { escaped = 1; src++; } else { escaped = 0; *dst++ = *src++; }; }; *dst = '\0'; /* * If escapes have already been removed, copy the input string directly * into the cache. */ } else { strcpy(copy, string); }; }; /* * Return a pointer to the copy of the string (or NULL if the allocation * failed). */ return copy; } /*....................................................................... * Allocate memory for a string of a given length. * * Input: * sg StringGroup * The group to store the string in. * length int The required length of the string. * Output: * return char * The pointer to the copy of the string, * or NULL if there was insufficient memory. */ char *_sg_alloc_string(StringGroup *sg, int length) { StringSegment *node; /* A node of the list of string segments */ char *copy; /* The allocated string */ /* * If the string is longer than block_size, then we can't record it. */ if(length > sg->block_size || length < 0) return NULL; /* * See if there is room to record the string in one of the existing * string segments. Do this by advancing the node pointer until we find * a node with length+1 bytes unused, or we get to the end of the list. */ for(node=sg->head; node && node->unused <= length; node=node->next) ; /* * If there wasn't room, allocate a new string segment. */ if(!node) { node = (StringSegment *) _new_FreeListNode(sg->node_mem); if(!node) return NULL; /* * Initialize the segment. */ node->next = NULL; node->block = NULL; node->unused = sg->block_size; /* * Attempt to allocate the string segment character array. */ node->block = (char *) malloc(sg->block_size); if(!node->block) return NULL; /* * Prepend the node to the list. */ node->next = sg->head; sg->head = node; }; /* * Get memory for the string. */ copy = node->block + sg->block_size - node->unused; node->unused -= length + 1; /* * Return a pointer to the string memory. */ return copy; } /*....................................................................... * Delete all of the strings that are currently stored by a specified * StringGroup object. * * Input: * sg StringGroup * The group of strings to clear. */ void _clr_StringGroup(StringGroup *sg) { StringSegment *node; /* A node in the list of string segments */ /* * Mark all of the string segments as unoccupied. */ for(node=sg->head; node; node=node->next) node->unused = sg->block_size; return; } genometools-1.5.1/src/external/libtecla-1.6.1/stringrp.h000066400000000000000000000067361211610345200227320ustar00rootroot00000000000000#ifndef stringrp_h #define stringrp_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ /* * StringGroup objects provide memory for modules that need to * allocate lots of small strings without needing to free any of them * individually, but rather is happy to free them all at the same * time. Taking advantage of these properties, StringGroup objects * avoid the heap fragmentation that tends to occur when lots of small * strings are allocated directly from the heap and later free'd. They * do this by allocating a list of large character arrays in each of * which multiple strings are stored. Thus instead of allocating lots * of small strings, a few large character arrays are allocated. When * the strings are free'd on mass, this list of character arrays is * maintained, ready for subsequent use in recording another set of * strings. */ typedef struct StringGroup StringGroup; /* * The following constructor allocates a string-allocation object. * The segment_size argument specifies how long each string segment * array should be. This should be at least 10 times the length of * the average string to be recorded in the string group, and * sets the length of the longest string that can be stored. */ StringGroup *_new_StringGroup(int segment_size); /* * Delete all of the strings that are currently stored by a specified * StringGroup object. */ void _clr_StringGroup(StringGroup *sg); /* * Make a copy of the specified string, returning a pointer to * the copy, or NULL if there was insufficient memory. If the * remove_escapes argument is non-zero, backslashes that escape * other characters will be removed. */ char *_sg_store_string(StringGroup *sg, const char *string, int remove_escapes); /* * Allocate memory for a string of a given length. */ char *_sg_alloc_string(StringGroup *sg, int length); /* * Delete a StringGroup object (and all of the strings that it * contains). */ StringGroup *_del_StringGroup(StringGroup *sg); #endif genometools-1.5.1/src/external/libtecla-1.6.1/strngmem.c000066400000000000000000000152521211610345200227020ustar00rootroot00000000000000/* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ #include #include #include #include "strngmem.h" #include "freelist.h" struct StringMem { unsigned long nmalloc; /* The number of strings allocated with malloc */ FreeList *fl; /* The free-list */ }; /*....................................................................... * Create a string free-list container and the first block of its free-list. * * Input: * blocking_factor int The blocking_factor argument specifies how * many strings of length SM_STRLEN * bytes (see stringmem.h) are allocated in each * free-list block. * For example if blocking_factor=64 and * SM_STRLEN=16, then each new * free-list block will take 1K of memory. * Output: * return StringMem * The new free-list container, or NULL on * error. */ StringMem *_new_StringMem(unsigned blocking_factor) { StringMem *sm; /* The container to be returned. */ /* * Check arguments. */ if(blocking_factor < 1) { errno = EINVAL; return NULL; }; /* * Allocate the container. */ sm = (StringMem *) malloc(sizeof(StringMem)); if(!sm) { errno = ENOMEM; return NULL; }; /* * Before attempting any operation that might fail, initialize * the container at least up to the point at which it can safely * be passed to _del_StringMem(). */ sm->nmalloc = 0; sm->fl = NULL; /* * Allocate the free-list. */ sm->fl = _new_FreeList(SM_STRLEN, blocking_factor); if(!sm->fl) return _del_StringMem(sm, 1); /* * Return the free-list container. */ return sm; } /*....................................................................... * Delete a string free-list. * * Input: * sm StringMem * The string free-list to be deleted, or NULL. * force int If force==0 then _del_StringMem() will complain * and refuse to delete the free-list if any * of nodes have not been returned to the free-list. * If force!=0 then _del_StringMem() will not check * whether any nodes are still in use and will * always delete the list. * Output: * return StringMem * Always NULL (even if the list couldn't be * deleted). */ StringMem *_del_StringMem(StringMem *sm, int force) { if(sm) { /* * Check whether any strings have not been returned to the free-list. */ if(!force && (sm->nmalloc > 0 || _busy_FreeListNodes(sm->fl) > 0)) { errno = EBUSY; return NULL; }; /* * Delete the free-list. */ sm->fl = _del_FreeList(sm->fl, force); /* * Delete the container. */ free(sm); }; return NULL; } /*....................................................................... * Allocate an array of 'length' chars. * * Input: * sm StringMem * The string free-list to allocate from. * length size_t The length of the new string (including '\0'). * Output: * return char * The new string or NULL on error. */ char *_new_StringMemString(StringMem *sm, size_t length) { char *string; /* The string to be returned */ int was_malloc; /* True if malloc was used to allocate the string */ /* * Check arguments. */ if(!sm) return NULL; if(length < 1) length = 1; /* * Allocate the new node from the free list if possible. */ if(length < SM_STRLEN) { string = (char *)_new_FreeListNode(sm->fl); if(!string) return NULL; was_malloc = 0; } else { string = (char *) malloc(length+1); /* Leave room for the flag byte */ if(!string) return NULL; /* * Count malloc allocations. */ was_malloc = 1; sm->nmalloc++; }; /* * Use the first byte of the string to record whether the string was * allocated with malloc or from the free-list. Then return the rest * of the string for use by the user. */ string[0] = (char) was_malloc; return string + 1; } /*....................................................................... * Free a string that was previously returned by _new_StringMemString(). * * Input: * sm StringMem * The free-list from which the string was originally * allocated. * s char * The string to be returned to the free-list, or NULL. * Output: * return char * Always NULL. */ char *_del_StringMemString(StringMem *sm, char *s) { int was_malloc; /* True if the string originally came from malloc() */ /* * Is there anything to be deleted? */ if(s && sm) { /* * Retrieve the true string pointer. This is one less than the one * returned by _new_StringMemString() because the first byte of the * allocated memory is reserved by _new_StringMemString as a flag byte * to say whether the memory was allocated from the free-list or directly * from malloc(). */ s--; /* * Get the origination flag. */ was_malloc = s[0]; if(was_malloc) { free(s); s = NULL; sm->nmalloc--; } else { s = (char *) _del_FreeListNode(sm->fl, s); }; }; return NULL; } genometools-1.5.1/src/external/libtecla-1.6.1/strngmem.h000066400000000000000000000062671211610345200227150ustar00rootroot00000000000000#ifndef stringmem_h #define stringmem_h /* * Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons * to whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Except as contained in this notice, the name of a copyright holder * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * of the copyright holder. */ typedef struct StringMem StringMem; /* * Applications that dynamically allocate lots of small strings * run the risk of significantly fragmenting the heap. This module * aims to reduce this risk by allocating large arrays of small fixed * length strings, arranging them as a free-list and allowing * callers to allocate from the list. Strings that are too long * to be allocated from the free-list are allocated from the heap. * Since typical implementations of malloc() eat up a minimum of * 16 bytes per call to malloc() [because of alignment and space * management constraints] it makes sense to set the free-list * string size to 16 bytes. Note that unlike malloc() which typically * keeps 8 bytes per allocation for its own use, our allocator will * return all but one of the 16 bytes for use. One hidden byte of overhead * is reserved for flagging whether the string was allocated directly * from malloc or from the free-list. */ /* * Set the length of each free-list string. The longest string that * will be returned without calling malloc() will be one less than * this number. */ #define SM_STRLEN 16 /* * Create a string free-list container and the first block of its free-list. */ StringMem *_new_StringMem(unsigned blocking_factor); /* * Delete a string free-list. */ StringMem *_del_StringMem(StringMem *sm, int force); /* * Allocate an array of 'length' chars. */ char *_new_StringMemString(StringMem *sm, size_t size); /* * Free a string that was previously returned by _new_StringMemString(). */ char *_del_StringMemString(StringMem *sm, char *s); #endif genometools-1.5.1/src/external/libtecla-1.6.1/update_html000077500000000000000000000021721211610345200231330ustar00rootroot00000000000000#!/bin/sh # Convert man pages to html files. for dir in man/prog man/libr man/func man/misc man/file; do for template in $dir/*.in;do page=`basename "$template" .in` if [ `wc -l < $template` -gt 1 ]; then html="html/$page.html" man2html $template > $html for ref in libtecla cpl_complete_word ef_expand_file gl_get_line pca_lookup_file enhance gl_io_mode tecla; do link="$ref.html" ed -s $html << EOF %s|$ref[(][^)][^) ]*[)]|$ref|g w q EOF done fi done done # Convert the change log into a web page. cd html echo 'The tecla library change log' > changes.html echo '
' >> changes.html
sed 's/&/&/g; s//\>/g' ../CHANGES >> changes.html
echo '
' >> changes.html # Do the same to the release-notes file. cd ../html echo 'The tecla library release notes' > release.html echo '
' >> release.html
sed 's/&/&/g; s/> release.html
echo '
' >> release.html genometools-1.5.1/src/external/libtecla-1.6.1/version.c000066400000000000000000000023071211610345200225300ustar00rootroot00000000000000#include "libtecla.h" /*....................................................................... * Return the version number of the tecla library. * * Input: * major int * The major version number of the library * will be assigned to *major. This number is * only incremented when a change to the library is * made that breaks binary (shared library) and/or * compilation backwards compatibility. * minor int * The minor version number of the library * will be assigned to *minor. This number is * incremented whenever new functions are added to * the public API. * micro int * The micro version number of the library will be * assigned to *micro. This number is incremented * whenever internal changes are made that don't * change the public API, such as bug fixes and * performance enhancements. */ void libtecla_version(int *major, int *minor, int *micro) { if(major) *major = TECLA_MAJOR_VER; if(minor) *minor = TECLA_MINOR_VER; if(micro) *micro = TECLA_MICRO_VER; } genometools-1.5.1/src/external/lpeg-0.10.2/000077500000000000000000000000001211610345200201205ustar00rootroot00000000000000genometools-1.5.1/src/external/lpeg-0.10.2/HISTORY000066400000000000000000000050521211610345200212060ustar00rootroot00000000000000HISTORY for LPeg 0.10 * Changes from version 0.9 to 0.10 ------------------------------- + backtrack stack has configurable size + better error messages + Notation for non-terminals in 're' back to A instead o + experimental look-behind pattern + support for external extensions + works with Lua 5.2 + consumes less C stack - "and" predicates do not keep captures * Changes from version 0.8 to 0.9 ------------------------------- + The accumulator capture was replaced by a fold capture; programs that used the old 'lpeg.Ca' will need small changes. + Some support for character classes from old C locales. + A new named-group capture. * Changes from version 0.7 to 0.8 ------------------------------- + New "match-time" capture. + New "argument capture" that allows passing arguments into the pattern. + Better documentation for 're'. + Several small improvements for 're'. + The 're' module has an incompatibility with previous versions: now, any use of a non-terminal must be enclosed in angle brackets (like ). * Changes from version 0.6 to 0.7 ------------------------------- + Several improvements in module 're': - better documentation; - support for most captures (all but accumulator); - limited repetitions p{n,m}. + Small improvements in efficiency. + Several small bugs corrected (special thanks to Hans Hagen and Taco Hoekwater). * Changes from version 0.5 to 0.6 ------------------------------- + Support for non-numeric indices in grammars. + Some bug fixes (thanks to the luatex team). + Some new optimizations; (thanks to Mike Pall). + A new page layout (thanks to Andre Carregal). + Minimal documentation for module 're'. * Changes from version 0.4 to 0.5 ------------------------------- + Several optimizations. + lpeg.P now accepts booleans. + Some new examples. + A proper license. + Several small improvements. * Changes from version 0.3 to 0.4 ------------------------------- + Static check for loops in repetitions and grammars. + Removed label option in captures. + The implementation of captures uses less memory. * Changes from version 0.2 to 0.3 ------------------------------- + User-defined patterns in Lua. + Several new captures. * Changes from version 0.1 to 0.2 ------------------------------- + Several small corrections. + Handles embedded zeros like any other character. + Capture "name" can be any Lua value. + Unlimited number of captures. + Match gets an optional initial position. (end of HISTORY) genometools-1.5.1/src/external/lpeg-0.10.2/lpeg-128.gif000066400000000000000000000114731211610345200220540ustar00rootroot00000000000000GIF89a    %(!&!&#'$('*2*,.4+./0022-7446488;:=;?=A>;B!+ԬWH tk r嫵6c$*HG6[cF11WJua bu ɉEsa&}$DR:SH KuB>'"b:uY0R 6 :o ْvckXk=O%6aLe"Ё>I6TW>x{*?؃'ECy_R]q;e=6?#]ZpOia:vC !^ - CtAH+Tzܲ>SrL8\bƥX2rgtUBNDD amCА!^%v3/;zzaz: GpJ;sE㵶e|ڛL>JѮŮU?; ^[o `4[`/'&Hc jrI^F뙰7A#3˥fjwApū2} I^ >$A-_ŀ9 *w]NAIAXC«E-OL6ᜳyN?DΤ)<4H+.~AtcഇE49k8 @Ҿ[^C59( ,XHPx#ߎV@JVn SG.@0H)aUKB!oUcSdH4@˩NM>QUGJ4D&ٽAe?]PG=|qaBN !oP!e:"?vsv$R0eKx$r5縷U "~ib| X(prsdr}<ٝBAT#ሀ%2:DQvpR8aBΤdDhH'!l$㵸 @f*0ɐvH2 ɇ%8yh tM&}Q1X)19RlxjfAZt@:=ikN2|tb 'ϰ@T1 &:@NvT *2|t< BCMx䴜R1vhH=( 0Ebaveg>IsPQ"ĕOGH~H+(3}Dv@b'bS]Vh釬YX G, e AVc!3-%ձiPO='Bq CF$b$ X%b5 f 6a e.-lu]Į\71";Tk0|P &\Tۀr%8xbWG&}%Ov7Q}g*^ @~ʏqH[&XKY"8?KР~" ,@A?`I0 (^o kR @(1X8f+b|_+ 1{hI!XxN/s 1_rx2b#Dp;|i'9f;(fqE8صr0;TBn P{B1vx&nz2uţ]یn?ϨZ РD.j`XøRӒC>NJ Z`jHY虽I;A+cXن;an هu_ɴ9x4vxNMJa Yc48I|dcjř!5ch4>6r ME"&B<@zL|z l ` bR$3KrѺ=d8EC8vvGpSoF%^̽1S=1(ȘxR4Xef +LnX`S|G>6~{9?*Fӳ88ogea|4a| '0*շ 0bAPEc@b%[pMj'V6SepHaYBz4 D|s;cw&5|0za &D$@_0P}<M ų7@.z&/58@a)4 evv0 fw K4xv"p>0 ްl@]_ʡ_w%w-,Huz<4edI ~`0ġeQl=Dw4U6Y8D5p1`ȠD@ _؀Svy9k$X6#TjUA)8Pt FJ;&s|v7]<0` XҴOE1|q MRX#@\4 Ix &`@ e= POAXבcCXuA 5DQy P@ pxIxܐ0qb^[{Bou$I{1 b,x)cwezD E頕pQ0 q0tp PJ  SAQ B T_#$n@Ax4HDP+59p 9(7 ٟ%7 4rX,J0gC E-ғ5%Su|0Gp ;/* b 9uàI s39GuQY.H 2LKROOv2= ;m$jRjŖX)\` Kjl2}WFI68h{UuǤcu 2Q \З{cW5T*$4` oڨKo7vW} rZé#CУ K .a&prP$mu:*|ؐo' ÔKZU<ڢߖ@&X^4:`aI>t85( [gS`}3 k7q =,bفo_XU{ƩPh`0 4qA"KKD1:` W5UZaAq T2*Wt(JS+ q t ]  *2,qK @ LDjZ4Cxp3sf M90 I0b!{h;Ȋ T` ,4QW6PER!PH i`=" 0 0JkQazpvFeu*Q VA!{! M mfLj DbKv$=ۿv `PP-O [AΙME R(<;%l% BeQ@  Vน){Ry3  1F P@ =[J w!*8|ճMw. 0nzv{Ȃ<Ȅ\Ȇ|ȈȊȌ;genometools-1.5.1/src/external/lpeg-0.10.2/lpeg.c000066400000000000000000001763011211610345200212230ustar00rootroot00000000000000/* ** $Id: lpeg.c,v 1.114 2011/02/16 15:02:20 roberto Exp $ ** LPeg - PEG pattern matching for Lua ** Copyright 2007, Lua.org & PUC-Rio (see 'lpeg.html' for license) ** written by Roberto Ierusalimschy */ #include #include #include #include #include #include "lua.h" #include "lauxlib.h" #include "lpeg.h" #define VERSION "0.10" #define PATTERN_T "lpeg-pattern" #define MAXSTACKIDX "lpeg-maxstack" /* ** compatibility with Lua 5.2 */ #if (LUA_VERSION_NUM == 502) #undef lua_equal #define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ) #undef lua_getfenv #define lua_getfenv lua_getuservalue #undef lua_setfenv #define lua_setfenv lua_setuservalue #undef lua_objlen #define lua_objlen lua_rawlen #undef luaL_register #define luaL_register(L,n,f) \ { if ((n) == NULL) luaL_setfuncs(L,f,0); else luaL_newlib(L,f); } #endif /* initial size for call/backtrack stack */ #define INITBACK 100 /* default maximum size for call/backtrack stack */ #define MAXBACK INITBACK /* size for call/backtrack stack for verifier */ #define MAXBACKVER 200 /* initial size for capture's list */ #define INITCAPSIZE 32 /* index, on Lua stack, for subject */ #define SUBJIDX 2 /* number of fixed arguments to 'match' (before capture arguments) */ #define FIXEDARGS 3 /* index, on Lua stack, for substitution value cache */ #define subscache(cs) ((cs)->ptop + 1) /* index, on Lua stack, for capture list */ #define caplistidx(ptop) ((ptop) + 2) /* index, on Lua stack, for pattern's fenv */ #define penvidx(ptop) ((ptop) + 3) /* index, on Lua stack, for backtracking stack */ #define stackidx(ptop) ((ptop) + 4) typedef unsigned char byte; #define CHARSETSIZE ((UCHAR_MAX/CHAR_BIT) + 1) typedef byte Charset[CHARSETSIZE]; /* Virtual Machine's instructions */ typedef enum Opcode { IAny, IChar, ISet, ISpan, IBack, IRet, IEnd, IChoice, IJmp, ICall, IOpenCall, ICommit, IPartialCommit, IBackCommit, IFailTwice, IFail, IGiveup, IFunc, IFullCapture, IEmptyCapture, IEmptyCaptureIdx, IOpenCapture, ICloseCapture, ICloseRunTime } Opcode; #define ISJMP 0x1 #define ISCHECK 0x2 #define ISFIXCHECK 0x4 #define ISNOFAIL 0x8 #define ISCAPTURE 0x10 #define ISMOVABLE 0x20 #define ISFENVOFF 0x40 static const int opproperties[] = { /* IAny */ ISCHECK | ISFIXCHECK | ISJMP, /* IChar */ ISCHECK | ISFIXCHECK | ISJMP, /* ISet */ ISCHECK | ISFIXCHECK | ISJMP, /* ISpan */ ISNOFAIL, /* IBack */ 0, /* IRet */ 0, /* IEnd */ 0, /* IChoice */ ISJMP, /* IJmp */ ISJMP | ISNOFAIL, /* ICall */ ISJMP, /* IOpenCall */ ISFENVOFF, /* ICommit */ ISJMP, /* IPartialCommit */ ISJMP, /* IBackCommit */ ISJMP, /* IFailTwice */ 0, /* IFail */ 0, /* IGiveup */ 0, /* IFunc */ ISCHECK | ISJMP, /* IFullCapture */ ISCAPTURE | ISNOFAIL | ISFENVOFF, /* IEmptyCapture */ ISCAPTURE | ISNOFAIL | ISMOVABLE, /* IEmptyCaptureIdx */ISCAPTURE | ISNOFAIL | ISMOVABLE | ISFENVOFF, /* IOpenCapture */ ISCAPTURE | ISNOFAIL | ISMOVABLE | ISFENVOFF, /* ICloseCapture */ ISCAPTURE | ISNOFAIL | ISMOVABLE | ISFENVOFF, /* ICloseRunTime */ ISCAPTURE | ISFENVOFF }; typedef union Instruction { struct Inst { byte code; byte aux; short offset; } i; PattFunc f; int iv; byte buff[1]; } Instruction; static const Instruction giveup = {{IGiveup, 0, 0}}; #define getkind(op) ((op)->i.aux & 0xF) #define getoff(op) (((op)->i.aux >> 4) & 0xF) #define dest(p,x) ((x) + ((p)+(x))->i.offset) #define MAXOFF 0xF #define MAXAUX 0xFF /* maximum size (in elements) for a pattern */ #define MAXPATTSIZE (SHRT_MAX - 10) #define isprop(op,p) (opproperties[(op)->i.code] & (p)) #define isjmp(op) (isprop(op, ISJMP) && (op)->i.offset != 0) #define iscapture(op) isprop(op, ISCAPTURE) #define ischeck(op) (isprop(op, ISCHECK) && (op)->i.offset == 0) #define isfixcheck(op) (isprop(op, ISFIXCHECK) && (op)->i.offset == 0) #define istest(op) (isprop(op, ISCHECK) && (op)->i.offset != 0) #define isnofail(op) isprop(op, ISNOFAIL) #define ismovable(op) isprop(op, ISMOVABLE) #define isfenvoff(op) isprop(op, ISFENVOFF) /* kinds of captures */ typedef enum CapKind { Cclose, Cposition, Cconst, Cbackref, Carg, Csimple, Ctable, Cfunction, Cquery, Cstring, Csubst, Cfold, Cruntime, Cgroup } CapKind; #define iscapnosize(k) ((k) == Cposition || (k) == Cconst) typedef struct Capture { const char *s; /* position */ short idx; byte kind; byte siz; } Capture; /* size (in elements) for an instruction plus extra l bytes */ #define instsize(l) (((l) + sizeof(Instruction) - 1)/sizeof(Instruction) + 1) /* size (in elements) for a ISet instruction */ #define CHARSETINSTSIZE instsize(CHARSETSIZE) /* size (in elements) for a IFunc instruction */ #define funcinstsize(p) ((p)->i.aux + 2) #define loopset(v,b) { int v; for (v = 0; v < CHARSETSIZE; v++) b; } #define testchar(st,c) (((int)(st)[((c) >> 3)] & (1 << ((c) & 7)))) #define setchar(st,c) ((st)[(c) >> 3] |= (1 << ((c) & 7))) static int target (Instruction *p, int i); static int sizei (const Instruction *i) { switch((Opcode)i->i.code) { case ISet: case ISpan: return CHARSETINSTSIZE; case IFunc: return funcinstsize(i); default: return 1; } } static const char *val2str (lua_State *L, int idx) { const char *k = lua_tostring(L, idx); if (k != NULL) return lua_pushfstring(L, "rule '%s'", k); else return lua_pushfstring(L, "rule ", luaL_typename(L, idx)); } static int getposition (lua_State *L, int t, int i) { int res; lua_getfenv(L, -1); lua_rawgeti(L, -1, i); /* get key from pattern's environment */ lua_gettable(L, t); /* get position from positions table */ res = lua_tointeger(L, -1); if (res == 0) { /* key has no registered position? */ lua_rawgeti(L, -2, i); /* get key again */ return luaL_error(L, "%s is not defined in given grammar", val2str(L, -1)); } lua_pop(L, 2); /* remove environment and position */ return res; } /* ** {====================================================== ** Printing patterns (for debugging) ** ======================================================= */ static void printcharset (const Charset st) { int i; printf("["); for (i = 0; i <= UCHAR_MAX; i++) { int first = i; while (testchar(st, i) && i <= UCHAR_MAX) i++; if (i - 1 == first) /* unary range? */ printf("(%02x)", first); else if (i - 1 > first) /* non-empty range? */ printf("(%02x-%02x)", first, i - 1); } printf("]"); } static void printcapkind (int kind) { const char *const modes[] = { "close", "position", "constant", "backref", "argument", "simple", "table", "function", "query", "string", "substitution", "fold", "runtime", "group"}; printf("%s", modes[kind]); } static void printjmp (const Instruction *op, const Instruction *p) { printf("-> "); if (p->i.offset == 0) printf("FAIL"); else printf("%d", (int)(dest(0, p) - op)); } static void printinst (const Instruction *op, const Instruction *p) { const char *const names[] = { "any", "char", "set", "span", "back", "ret", "end", "choice", "jmp", "call", "open_call", "commit", "partial_commit", "back_commit", "failtwice", "fail", "giveup", "func", "fullcapture", "emptycapture", "emptycaptureidx", "opencapture", "closecapture", "closeruntime" }; printf("%02ld: %s ", (long)(p - op), names[p->i.code]); switch ((Opcode)p->i.code) { case IChar: { printf("'%c'", p->i.aux); printjmp(op, p); break; } case IAny: { printf("* %d", p->i.aux); printjmp(op, p); break; } case IFullCapture: case IOpenCapture: case IEmptyCapture: case IEmptyCaptureIdx: case ICloseCapture: case ICloseRunTime: { printcapkind(getkind(p)); printf("(n = %d) (off = %d)", getoff(p), p->i.offset); break; } case ISet: { printcharset((p+1)->buff); printjmp(op, p); break; } case ISpan: { printcharset((p+1)->buff); break; } case IOpenCall: { printf("-> %d", p->i.offset); break; } case IChoice: { printjmp(op, p); printf(" (%d)", p->i.aux); break; } case IJmp: case ICall: case ICommit: case IPartialCommit: case IBackCommit: { printjmp(op, p); break; } default: break; } printf("\n"); } static void printpatt (Instruction *p) { Instruction *op = p; for (;;) { printinst(op, p); if ((Opcode)p->i.code == IEnd) break; p += sizei(p); } } #if 0 static void printcap (Capture *cap) { printcapkind(cap->kind); printf(" (idx: %d - size: %d) -> %p\n", cap->idx, cap->siz, cap->s); } static void printcaplist (Capture *cap) { for (; cap->s; cap++) printcap(cap); } #endif /* }====================================================== */ /* ** {====================================================== ** Virtual Machine ** ======================================================= */ typedef struct Stack { const char *s; const Instruction *p; int caplevel; } Stack; #define getstackbase(L, ptop) ((Stack *)lua_touserdata(L, stackidx(ptop))) static int runtimecap (lua_State *L, Capture *close, Capture *ocap, const char *o, const char *s, int ptop); static Capture *doublecap (lua_State *L, Capture *cap, int captop, int ptop) { Capture *newc; if (captop >= INT_MAX/((int)sizeof(Capture) * 2)) luaL_error(L, "too many captures"); newc = (Capture *)lua_newuserdata(L, captop * 2 * sizeof(Capture)); memcpy(newc, cap, captop * sizeof(Capture)); lua_replace(L, caplistidx(ptop)); return newc; } static Stack *doublestack (lua_State *L, Stack **stacklimit, int ptop) { Stack *stack = getstackbase(L, ptop); Stack *newstack; int n = *stacklimit - stack; int max, newn; lua_getfield(L, LUA_REGISTRYINDEX, MAXSTACKIDX); max = lua_tointeger(L, -1); lua_pop(L, 1); if (n >= max) luaL_error(L, "too many pending calls/choices"); newn = 2*n; if (newn > max) newn = max; newstack = (Stack *)lua_newuserdata(L, newn * sizeof(Stack)); memcpy(newstack, stack, n * sizeof(Stack)); lua_replace(L, stackidx(ptop)); *stacklimit = newstack + newn; return newstack + n; } static void adddyncaptures (const char *s, Capture *base, int n, int fd) { int i; assert(base[0].kind == Cruntime && base[0].siz == 0); base[0].idx = fd; /* first returned capture */ for (i = 1; i < n; i++) { /* add extra captures */ base[i].siz = 1; /* mark it as closed */ base[i].s = s; base[i].kind = Cruntime; base[i].idx = fd + i; /* stack index */ } base[n].kind = Cclose; /* add closing entry */ base[n].siz = 1; base[n].s = s; } #define condfailed(p) { int f = p->i.offset; if (f) p+=f; else goto fail; } static const char *match (lua_State *L, const char *o, const char *s, const char *e, Instruction *op, Capture *capture, int ptop) { Stack stackbase[INITBACK]; Stack *stacklimit = stackbase + INITBACK; Stack *stack = stackbase; /* point to first empty slot in stack */ int capsize = INITCAPSIZE; int captop = 0; /* point to first empty slot in captures */ const Instruction *p = op; stack->p = &giveup; stack->s = s; stack->caplevel = 0; stack++; lua_pushlightuserdata(L, stackbase); for (;;) { #if defined(DEBUG) printf("s: |%s| stck: %d c: %d ", s, stack - getstackbase(L, ptop), captop); printinst(op, p); #endif switch ((Opcode)p->i.code) { case IEnd: { assert(stack == getstackbase(L, ptop) + 1); capture[captop].kind = Cclose; capture[captop].s = NULL; return s; } case IGiveup: { assert(stack == getstackbase(L, ptop)); return NULL; } case IRet: { assert(stack > getstackbase(L, ptop) && (stack - 1)->s == NULL); p = (--stack)->p; continue; } case IAny: { int n = p->i.aux; if (n <= e - s) { p++; s += n; } else condfailed(p); continue; } case IChar: { if ((byte)*s == p->i.aux && s < e) { p++; s++; } else condfailed(p); continue; } case ISet: { int c = (byte)*s; if (testchar((p+1)->buff, c) && s < e) { p += CHARSETINSTSIZE; s++; } else condfailed(p); continue; } case IBack: { int n = p->i.aux; if (n > s - o) goto fail; s -= n; p++; continue; } case ISpan: { for (; s < e; s++) { int c = (byte)*s; if (!testchar((p+1)->buff, c)) break; } p += CHARSETINSTSIZE; continue; } case IFunc: { const char *r = (p+1)->f(s, e, o, (p+2)->buff); if (r != NULL) { s = r; p += funcinstsize(p); } else condfailed(p); continue; } case IJmp: { p += p->i.offset; continue; } case IChoice: { if (stack == stacklimit) stack = doublestack(L, &stacklimit, ptop); stack->p = dest(0, p); stack->s = s - p->i.aux; stack->caplevel = captop; stack++; p++; continue; } case ICall: { if (stack == stacklimit) stack = doublestack(L, &stacklimit, ptop); stack->s = NULL; stack->p = p + 1; /* save return address */ stack++; p += p->i.offset; continue; } case ICommit: { assert(stack > getstackbase(L, ptop) && (stack - 1)->s != NULL); stack--; p += p->i.offset; continue; } case IPartialCommit: { assert(stack > getstackbase(L, ptop) && (stack - 1)->s != NULL); (stack - 1)->s = s; (stack - 1)->caplevel = captop; p += p->i.offset; continue; } case IBackCommit: { assert(stack > getstackbase(L, ptop) && (stack - 1)->s != NULL); s = (--stack)->s; captop = stack->caplevel; p += p->i.offset; continue; } case IFailTwice: assert(stack > getstackbase(L, ptop)); stack--; /* go through */ case IFail: fail: { /* pattern failed: try to backtrack */ do { /* remove pending calls */ assert(stack > getstackbase(L, ptop)); s = (--stack)->s; } while (s == NULL); captop = stack->caplevel; p = stack->p; continue; } case ICloseRunTime: { int fr = lua_gettop(L) + 1; /* stack index of first result */ int ncap = runtimecap(L, capture + captop, capture, o, s, ptop); lua_Integer res = lua_tointeger(L, fr) - 1; /* offset */ int n = lua_gettop(L) - fr; /* number of new captures */ if (res == -1) { /* may not be a number */ if (!lua_toboolean(L, fr)) { /* false value? */ lua_settop(L, fr - 1); /* remove results */ goto fail; /* and fail */ } else if (lua_isboolean(L, fr)) /* true? */ res = s - o; /* keep current position */ } if (res < s - o || res > e - o) luaL_error(L, "invalid position returned by match-time capture"); s = o + res; /* update current position */ captop -= ncap; /* remove nested captures */ lua_remove(L, fr); /* remove first result (offset) */ if (n > 0) { /* captures? */ if ((captop += n + 1) >= capsize) { capture = doublecap(L, capture, captop, ptop); capsize = 2 * captop; } adddyncaptures(s, capture + captop - n - 1, n, fr); } p++; continue; } case ICloseCapture: { const char *s1 = s - getoff(p); assert(captop > 0); if (capture[captop - 1].siz == 0 && s1 - capture[captop - 1].s < UCHAR_MAX) { capture[captop - 1].siz = s1 - capture[captop - 1].s + 1; p++; continue; } else { capture[captop].siz = 1; /* mark entry as closed */ goto capture; } } case IEmptyCapture: case IEmptyCaptureIdx: capture[captop].siz = 1; /* mark entry as closed */ goto capture; case IOpenCapture: capture[captop].siz = 0; /* mark entry as open */ goto capture; case IFullCapture: capture[captop].siz = getoff(p) + 1; /* save capture size */ capture: { capture[captop].s = s - getoff(p); capture[captop].idx = p->i.offset; capture[captop].kind = getkind(p); if (++captop >= capsize) { capture = doublecap(L, capture, captop, ptop); capsize = 2 * captop; } p++; continue; } case IOpenCall: { lua_rawgeti(L, penvidx(ptop), p->i.offset); luaL_error(L, "reference to %s outside a grammar", val2str(L, -1)); } default: assert(0); return NULL; } } } /* }====================================================== */ /* ** {====================================================== ** Verifier ** ======================================================= */ /* ** check whether pattern may go from 'p' to 'e' without consuming any ** input. Raises an error if it detects a left recursion. 'op' points ** the beginning of the pattern. If pattern belongs to a grammar, ** 'rule' is the stack index where is its corresponding key (only for ** error messages) and 'posttable' is the stack index with a table ** mapping rule keys to the position of their code in the pattern. */ static int verify (lua_State *L, Instruction *op, const Instruction *p, Instruction *e, int postable, int rule) { static const char dummy[] = ""; Stack back[MAXBACKVER]; int backtop = 0; /* point to first empty slot in back */ while (p != e) { switch ((Opcode)p->i.code) { case IRet: { p = back[--backtop].p; continue; } case IChoice: { if (backtop >= MAXBACKVER) return luaL_error(L, "too many pending calls/choices"); back[backtop].p = dest(0, p); back[backtop++].s = dummy; p++; continue; } case ICall: { assert((p + 1)->i.code != IRet); /* no tail call */ if (backtop >= MAXBACKVER) return luaL_error(L, "too many pending calls/choices"); back[backtop].s = NULL; back[backtop++].p = p + 1; goto dojmp; } case IOpenCall: { int i; if (postable == 0) /* grammar still not fixed? */ goto fail; /* to be verified later */ for (i = 0; i < backtop; i++) { if (back[i].s == NULL && back[i].p == p + 1) return luaL_error(L, "%s is left recursive", val2str(L, rule)); } if (backtop >= MAXBACKVER) return luaL_error(L, "too many pending calls/choices"); back[backtop].s = NULL; back[backtop++].p = p + 1; p = op + getposition(L, postable, p->i.offset); continue; } case IBackCommit: case ICommit: { assert(backtop > 0 && p->i.offset > 0); backtop--; goto dojmp; } case IPartialCommit: { assert(backtop > 0); if (p->i.offset > 0) goto dojmp; /* forward jump */ else { /* loop will be detected when checking corresponding rule */ assert(postable != 0); backtop--; p++; /* just go on now */ continue; } } case IBack: { if (p->i.aux == 1 && isfixcheck(p + 1)) { /* char test? */ p++; /* skip back instruction */ p += sizei(p); /* skip char test */ } else { /* standard lookbehind code */ assert((Opcode)(p - 1)->i.code == IChoice); /* look behind */ backtop--; p += (p - 1)->i.offset; assert((Opcode)(p - 1)->i.code == IFail); /* look behind */ } continue; } case IAny: case IChar: case ISet: { const Instruction *next = p + sizei(p); if ((Opcode)next->i.code == IBack) p = next + 1; /* continue after the back instruction */ else if (p->i.offset == 0) goto fail; else /* jump */ p += p->i.offset; continue; } case IJmp: dojmp: { p += p->i.offset; continue; } case IFailTwice: /* 'not' predicate */ goto fail; /* body could have failed; try to backtrack it */ case IFail: { if (p > op && (p - 1)->i.code == IBackCommit) { /* 'and' predicate? */ p++; /* pretend it succeeded and go ahead */ continue; } /* else failed: go through */ } fail: { /* pattern failed: try to backtrack */ do { if (backtop-- == 0) return 1; /* no more backtracking */ } while (back[backtop].s == NULL); p = back[backtop].p; continue; } case ISpan: case IOpenCapture: case ICloseCapture: case IEmptyCapture: case IEmptyCaptureIdx: case IFullCapture: { p += sizei(p); continue; } case ICloseRunTime: { goto fail; /* be liberal in this case */ } case IFunc: { const char *r = (p+1)->f(dummy, dummy, dummy, (p+2)->buff); if (r != NULL) { p += funcinstsize(p); } else condfailed(p); continue; } case IEnd: /* cannot happen (should stop before it) */ default: assert(0); return 0; } } assert(backtop == 0); return 0; } static void checkrule (lua_State *L, Instruction *op, int from, int to, int postable, int rule) { int i; int lastopen = 0; /* more recent OpenCall seen in the code */ for (i = from; i < to; i += sizei(op + i)) { if (op[i].i.code == IPartialCommit && op[i].i.offset < 0) { /* loop? */ int start = dest(op, i); assert(op[start - 1].i.code == IChoice && dest(op, start - 1) == target(op, i + 1)); if (start <= lastopen) { /* loop does contain an open call? */ if (!verify(L, op, op + start, op + i, postable, rule)) /* check body */ luaL_error(L, "possible infinite loop in %s", val2str(L, rule)); } } else if (op[i].i.code == IOpenCall) lastopen = i; } assert(op[i - 1].i.code == IRet); verify(L, op, op + from, op + to - 1, postable, rule); } /* }====================================================== */ /* ** {====================================================== ** Building Patterns ** ======================================================= */ enum charsetanswer { NOINFO, ISCHARSET, VALIDSTARTS }; typedef struct CharsetTag { enum charsetanswer tag; Charset cs; } CharsetTag; static Instruction *getpatt (lua_State *L, int idx, int *size); static void check2test (Instruction *p, int n) { assert(ischeck(p) && n != 0); p->i.offset = n; } /* ** invert array slice p[0]-p[e] (both inclusive) */ static void invert (Instruction *p, int e) { int i; for (i = 0; i < e; i++, e--) { Instruction temp = p[i]; p[i] = p[e]; p[e] = temp; } } /* ** rotate array slice p[0]-p[e] (both inclusive) 'n' steps ** to the 'left' */ static void rotate (Instruction *p, int e, int n) { invert(p, n - 1); invert(p + n, e - n); invert(p, e); } #define op_step(p) ((p)->i.code == IAny ? (p)->i.aux : 1) static int skipchecks (Instruction *p, int up, int *pn) { int i, n = 0; for (i = 0; isfixcheck(p + i); i += sizei(p + i)) { int st = op_step(p + i); if (n + st > MAXOFF - up) break; n += st; } *pn = n; return i; } #define ismovablecap(op) (ismovable(op) && getoff(op) < MAXOFF) static void optimizecaptures (Instruction *p) { int i; int limit = 0; for (i = 0; p[i].i.code != IEnd; i += sizei(p + i)) { if (isjmp(p + i) && dest(p, i) >= limit) limit = dest(p, i) + 1; /* do not optimize jump targets */ else if (i >= limit && ismovablecap(p + i) && isfixcheck(p + i + 1)) { int end, n, j; /* found a border capture|check */ int maxoff = getoff(p + i); int start = i; /* find first capture in the group */ while (start > limit && ismovablecap(p + start - 1)) { start--; if (getoff(p + start) > maxoff) maxoff = getoff(p + start); } end = skipchecks(p + i + 1, maxoff, &n) + i; /* find last check */ if (n == 0) continue; /* first check is too big to move across */ assert(n <= MAXOFF && start <= i && i < end); for (j = start; j <= i; j++) p[j].i.aux += (n << 4); /* correct offset of captures to be moved */ rotate(p + start, end - start, i - start + 1); /* move them up */ i = end; assert(isfixcheck(p + start) && iscapture(p + i)); } } } static int target (Instruction *p, int i) { while (p[i].i.code == IJmp) i += p[i].i.offset; return i; } static void optimizejumps (Instruction *p) { int i; for (i = 0; p[i].i.code != IEnd; i += sizei(p + i)) { if (isjmp(p + i)) p[i].i.offset = target(p, dest(p, i)) - i; } } static void optimizechoice (Instruction *p) { assert(p->i.code == IChoice); if (isfixcheck(p + 1)) { int lc = sizei(p + 1); rotate(p, lc, 1); assert(isfixcheck(p) && (p + lc)->i.code == IChoice); (p + lc)->i.aux = op_step(p); check2test(p, (p + lc)->i.offset); (p + lc)->i.offset -= lc; } } /* ** A 'headfail' pattern is a pattern that can only fails in its first ** instruction, which must be a check. */ static int isheadfail (Instruction *p) { if (!ischeck(p)) return 0; /* check that other operations cannot fail */ for (p += sizei(p); p->i.code != IEnd; p += sizei(p)) if (!isnofail(p)) return 0; return 1; } #define checkpattern(L, idx) ((Instruction *)luaL_checkudata(L, idx, PATTERN_T)) /* ** Return the number of elements in the ktable of a pattern. ** in Lua 5.2, default "environment" for patterns is nil, not ** a table. Treat it as an empty table. */ static int ktablelen (lua_State *L, int idx) { if (!lua_istable(L, idx)) return 0; else return lua_objlen(L, idx); } /* ** join the elements of the ktable from pattern 'p1' into the ktable of ** the pattern at the top of the stack ('p'). If 'p1' has no elements, ** 'p' keeps its original ktable. If 'p' has no elements, it shares ** 'p1' ktable. Otherwise, this function creates a new ktable for 'p'. ** Return the offset of original 'p' elements in the new ktable. */ static int jointable (lua_State *L, int p1) { int n, n1, i; lua_getfenv(L, p1); n1 = ktablelen(L, -1); /* number of elements in p1's env */ lua_getfenv(L, -2); if (n1 == 0 || lua_equal(L, -2, -1)) { lua_pop(L, 2); return 0; /* no need to change anything */ } n = ktablelen(L, -1); /* number of elements in p's env */ if (n == 0) { lua_pop(L, 1); /* removes p env */ lua_setfenv(L, -2); /* p now shares p1's env */ return 0; /* no need to correct anything */ } lua_createtable(L, n + n1, 0); /* stack: p; p1 env; p env; new p env */ for (i = 1; i <= n; i++) { lua_rawgeti(L, -2, i); lua_rawseti(L, -2, i); } for (i = 1; i <= n1; i++) { lua_rawgeti(L, -3, i); lua_rawseti(L, -2, n + i); } lua_setfenv(L, -4); /* new table becomes p env */ lua_pop(L, 2); /* remove p1 env and old p env */ return n; } #define copypatt(p1,p2,sz) memcpy(p1, p2, (sz) * sizeof(Instruction)); #define pattsize(L,idx) (lua_objlen(L, idx)/sizeof(Instruction) - 1) static int addpatt (lua_State *L, Instruction *p, int p1idx) { Instruction *p1 = (Instruction *)lua_touserdata(L, p1idx); int sz = pattsize(L, p1idx); int corr = jointable(L, p1idx); copypatt(p, p1, sz + 1); if (corr != 0) { Instruction *px; for (px = p; px < p + sz; px += sizei(px)) { if (isfenvoff(px) && px->i.offset != 0) px->i.offset += corr; } } return sz; } static void setinstaux (Instruction *i, Opcode op, int offset, int aux) { assert(aux <= MAXAUX); i->i.code = op; i->i.offset = offset; i->i.aux = aux; } #define setinst(i,op,off) setinstaux(i,op,off,0) #define setinstcap(i,op,idx,k,n) setinstaux(i,op,idx,((k) | ((n) << 4))) /* ** create a new ktable for pattern at the stack top, mapping ** '1' to the value at stack position 'vidx'. */ static int value2fenv (lua_State *L, int vidx) { lua_createtable(L, 1, 0); lua_pushvalue(L, vidx); lua_rawseti(L, -2, 1); lua_setfenv(L, -2); return 1; } static Instruction *newpatt (lua_State *L, size_t n) { Instruction *p; if (n >= MAXPATTSIZE - 1) luaL_error(L, "pattern too big"); p = (Instruction *)lua_newuserdata(L, (n + 1) * sizeof(Instruction)); luaL_getmetatable(L, PATTERN_T); lua_setmetatable(L, -2); setinst(p + n, IEnd, 0); return p; } static void fillcharset (Instruction *p, Charset cs) { switch (p[0].i.code) { case ISet: { loopset(i, cs[i] = p[1].buff[i]); break; } case IChar: { loopset(i, cs[i] = 0); setchar(cs, p[0].i.aux); break; } default: { /* any char may start unhandled instructions */ loopset(i, cs[i] = 0xff); break; } } } /* ** Function 'tocharset' gets information about which chars may be a ** valid start for a pattern. */ static enum charsetanswer tocharset (Instruction *p, CharsetTag *c) { if (isfixcheck(p)) { fillcharset(p, c->cs); if ((p + sizei(p))->i.code == IEnd && op_step(p) == 1) c->tag = ISCHARSET; else c->tag = VALIDSTARTS; } else c->tag = NOINFO; return c->tag; } static int exclusiveset (Charset c1, Charset c2) { /* non-empty intersection? */ loopset(i, {if ((c1[i] & c2[i]) != 0) return 0;}); return 1; /* no intersection */ } static int exclusive (CharsetTag *c1, CharsetTag *c2) { if (c1->tag == NOINFO || c2->tag == NOINFO) return 0; /* one of them is not filled */ else return exclusiveset(c1->cs, c2->cs); } static Instruction *newcharset (lua_State *L) { Instruction *p = newpatt(L, CHARSETINSTSIZE); p[0].i.code = ISet; p[0].i.offset = 0; loopset(i, p[1].buff[i] = 0); return p; } static int set_l (lua_State *L) { size_t l; const char *s = luaL_checklstring(L, 1, &l); if (l == 1) getpatt(L, 1, NULL); /* a unit set is equivalent to a literal */ else { Instruction *p = newcharset(L); while (l--) { setchar(p[1].buff, (byte)(*s)); s++; } } return 1; } static int range_l (lua_State *L) { int arg; int top = lua_gettop(L); Instruction *p = newcharset(L); for (arg = 1; arg <= top; arg++) { int c; size_t l; const char *r = luaL_checklstring(L, arg, &l); luaL_argcheck(L, l == 2, arg, "range must have two characters"); for (c = (byte)r[0]; c <= (byte)r[1]; c++) setchar(p[1].buff, c); } return 1; } static int nter_l (lua_State *L) { Instruction *p; luaL_argcheck(L, !lua_isnoneornil(L, 1), 1, "non-nil value expected"); p = newpatt(L, 1); setinst(p, IOpenCall, value2fenv(L, 1)); return 1; } static int testpattern (lua_State *L, int idx) { if (lua_touserdata(L, idx)) { /* value is a userdata? */ if (lua_getmetatable(L, idx)) { /* does it have a metatable? */ luaL_getmetatable(L, PATTERN_T); if (lua_rawequal(L, -1, -2)) { /* does it have the correct mt? */ lua_pop(L, 2); /* remove both metatables */ return 1; } } } return 0; } static Instruction *fix_l (lua_State *L, int t) { Instruction *p; int i; int totalsize = 2; /* include initial call and jump */ int n = 0; /* number of rules */ int base = lua_gettop(L); lua_newtable(L); /* to store relative positions of each rule */ lua_pushinteger(L, 1); /* default initial rule */ /* collect patterns and compute sizes */ lua_pushnil(L); while (lua_next(L, t) != 0) { int l; if (lua_tonumber(L, -2) == 1 && lua_isstring(L, -1)) { lua_replace(L, base + 2); /* use this value as initial rule */ continue; } if (!testpattern(L, -1)) luaL_error(L, "%s is not a pattern", val2str(L, -2)); l = pattsize(L, -1) + 1; /* space for pattern + ret */ if (totalsize >= MAXPATTSIZE - l) luaL_error(L, "grammar too large"); luaL_checkstack(L, LUA_MINSTACK, "grammar has too many rules"); lua_insert(L, -2); /* put key on top */ lua_pushvalue(L, -1); /* duplicate key (for lua_next) */ lua_pushvalue(L, -1); /* duplicate key (to index positions table)) */ lua_pushinteger(L, totalsize); /* position for this rule */ lua_settable(L, base + 1); /* store key=>position in positions table */ totalsize += l; n++; } luaL_argcheck(L, n > 0, t, "empty grammar"); p = newpatt(L, totalsize); /* create new pattern */ p++; /* save space for call */ setinst(p++, IJmp, totalsize - 1); /* after call, jumps to the end */ for (i = 1; i <= n; i++) { /* copy all rules into new pattern */ p += addpatt(L, p, base + 1 + i*2); setinst(p++, IRet, 0); } p -= totalsize; /* back to first position */ totalsize = 2; /* go through each rule's position */ for (i = 1; i <= n; i++) { /* check all rules */ int l = pattsize(L, base + 1 + i*2) + 1; checkrule(L, p, totalsize, totalsize + l, base + 1, base + 2 + i*2); totalsize += l; } lua_pushvalue(L, base + 2); /* get initial rule */ lua_gettable(L, base + 1); /* get its position in postions table */ i = lua_tonumber(L, -1); /* convert to number */ lua_pop(L, 1); if (i == 0) /* is it defined? */ luaL_error(L, "initial rule not defined in given grammar"); setinst(p, ICall, i); /* first instruction calls initial rule */ /* correct calls */ for (i = 0; i < totalsize; i += sizei(p + i)) { if (p[i].i.code == IOpenCall) { int pos = getposition(L, base + 1, p[i].i.offset); p[i].i.code = (p[target(p, i + 1)].i.code == IRet) ? IJmp : ICall; p[i].i.offset = pos - i; } } optimizejumps(p); lua_replace(L, t); /* put new pattern in old's position */ lua_settop(L, base); /* remove rules and positions table */ return p; } static Instruction *any (lua_State *L, int n, int extra, int *offsetp) { int offset = offsetp ? *offsetp : 0; Instruction *p = newpatt(L, (n - 1)/UCHAR_MAX + extra + 1); Instruction *p1 = p + offset; for (; n > UCHAR_MAX; n -= UCHAR_MAX) setinstaux(p1++, IAny, 0, UCHAR_MAX); setinstaux(p1++, IAny, 0, n); if (offsetp) *offsetp = p1 - p; return p; } static Instruction *getpatt (lua_State *L, int idx, int *size) { Instruction *p; switch (lua_type(L, idx)) { case LUA_TSTRING: { size_t i, len; const char *s = lua_tolstring(L, idx, &len); p = newpatt(L, len); for (i = 0; i < len; i++) setinstaux(p + i, IChar, 0, (byte)s[i]); lua_replace(L, idx); break; } case LUA_TNUMBER: { int n = lua_tointeger(L, idx); if (n == 0) /* empty pattern? */ p = newpatt(L, 0); else if (n > 0) p = any(L, n, 0, NULL); else if (-n <= UCHAR_MAX) { p = newpatt(L, 2); setinstaux(p, IAny, 2, -n); setinst(p + 1, IFail, 0); } else { int offset = 2; /* space for ITestAny & IChoice */ p = any(L, -n - UCHAR_MAX, 3, &offset); setinstaux(p, IAny, offset + 1, UCHAR_MAX); setinstaux(p + 1, IChoice, offset, UCHAR_MAX); setinst(p + offset, IFailTwice, 0); } lua_replace(L, idx); break; } case LUA_TBOOLEAN: { if (lua_toboolean(L, idx)) /* true? */ p = newpatt(L, 0); /* empty pattern (always succeeds) */ else { p = newpatt(L, 1); setinst(p, IFail, 0); } lua_replace(L, idx); break; } case LUA_TTABLE: { p = fix_l(L, idx); break; } case LUA_TFUNCTION: { p = newpatt(L, 2); setinstcap(p, IOpenCapture, value2fenv(L, idx), Cruntime, 0); setinstcap(p + 1, ICloseRunTime, 0, Cclose, 0); lua_replace(L, idx); break; } default: { p = checkpattern(L, idx); break; } } if (size) *size = pattsize(L, idx); return p; } static int getpattl (lua_State *L, int idx) { int size; getpatt(L, idx, &size); return size; } static int pattern_l (lua_State *L) { lua_settop(L, 1); getpatt(L, 1, NULL); return 1; } #define isany(p) ((p)->i.code == IAny && ((p) + 1)->i.code == IEnd) #define isfail(p) ((p)->i.code == IFail) #define issucc(p) ((p)->i.code == IEnd) static int concat_l (lua_State *L) { /* p1; p2; */ int l1, l2; Instruction *p1 = getpatt(L, 1, &l1); Instruction *p2 = getpatt(L, 2, &l2); if (isfail(p1) || issucc(p2)) lua_pushvalue(L, 1); /* fail * x == fail; x * true == x */ else if (isfail(p2) || issucc(p1)) lua_pushvalue(L, 2); /* x * fail == fail; true * x == x */ else if (isany(p1) && isany(p2)) any(L, p1->i.aux + p2->i.aux, 0, NULL); else { Instruction *op = newpatt(L, l1 + l2); Instruction *p = op + addpatt(L, op, 1); addpatt(L, p, 2); optimizecaptures(op); } return 1; } static int diff_l (lua_State *L) { int l1, l2; Instruction *p1 = getpatt(L, 1, &l1); Instruction *p2 = getpatt(L, 2, &l2); CharsetTag st1, st2; if (tocharset(p1, &st1) == ISCHARSET && tocharset(p2, &st2) == ISCHARSET) { Instruction *p = newcharset(L); loopset(i, p[1].buff[i] = st1.cs[i] & ~st2.cs[i]); } else if (isheadfail(p2)) { Instruction *p = newpatt(L, l2 + 1 + l1); p += addpatt(L, p, 2); check2test(p - l2, l2 + 1); setinst(p++, IFail, 0); addpatt(L, p, 1); } else { /* !e2 . e1 */ /* !e -> choice L1; e; failtwice; L1: ... */ Instruction *p = newpatt(L, 1 + l2 + 1 + l1); Instruction *pi = p; setinst(p++, IChoice, 1 + l2 + 1); p += addpatt(L, p, 2); setinst(p++, IFailTwice, 0); addpatt(L, p, 1); optimizechoice(pi); } return 1; } static int unm_l (lua_State *L) { Instruction *p = getpatt(L, 1, NULL); if (isfail(p)) { /* -false? */ newpatt(L, 0); /* true */ return 1; } else if (issucc(p)) { /* -true? */ Instruction *p1 = newpatt(L, 1); /* false */ setinst(p1, IFail, 0); return 1; } else { /* -A == '' - A */ lua_pushliteral(L, ""); lua_insert(L, 1); return diff_l(L); } } static int pattand_l (lua_State *L) { int l1; CharsetTag st1; Instruction *p1 = getpatt(L, 1, &l1); if (isfail(p1) || issucc(p1)) lua_pushvalue(L, 1); /* &fail == fail; &true == true */ else if (tocharset(p1, &st1) == ISCHARSET) { Instruction *p = newpatt(L, l1 + 1); copypatt(p, p1, l1); p += l1; setinstaux(p, IBack, 0, 1); } else { /* Choice L1; p1; BackCommit L2; L1: Fail; L2: */ Instruction *p = newpatt(L, 1 + l1 + 2); setinst(p++, IChoice, 1 + l1 + 1); p += addpatt(L, p, 1); setinst(p++, IBackCommit, 2); setinst(p, IFail, 0); } return 1; } static int nocalls (const Instruction *p) { for (; (Opcode)p->i.code != IEnd; p += sizei(p)) if ((Opcode)p->i.code == IOpenCall) return 0; return 1; } static int pattbehind (lua_State *L) { int l1; CharsetTag st1; Instruction *p1 = getpatt(L, 1, &l1); int n = luaL_optint(L, 2, 1); luaL_argcheck(L, n <= MAXAUX, 2, "lookbehind delta too large"); if (!nocalls(p1)) luaL_error(L, "lookbehind pattern cannot contain non terminals"); if (isfail(p1) || issucc(p1)) lua_pushvalue(L, 1); /* tag == NOINFO) return 1; assert(p1->i.offset != 0); switch (p1->i.code) { case IChar: return testchar(st2->cs, p1->i.aux); case ISet: return !exclusiveset(st2->cs, (p1 + 1)->buff); default: assert(p1->i.code == IAny); return 1; } } static Instruction *basicUnion (lua_State *L, Instruction *p1, int l1, int l2, int *size, CharsetTag *st2) { Instruction *op; CharsetTag st1; tocharset(p1, &st1); if (st1.tag == ISCHARSET && st2->tag == ISCHARSET) { Instruction *p = auxnew(L, &op, size, CHARSETINSTSIZE); setinst(p, ISet, 0); loopset(i, p[1].buff[i] = st1.cs[i] | st2->cs[i]); } else if (exclusive(&st1, st2) || isheadfail(p1)) { Instruction *p = auxnew(L, &op, size, l1 + 1 + l2); copypatt(p, p1, l1); check2test(p, l1 + 1); p += l1; setinst(p++, IJmp, l2 + 1); addpatt(L, p, 2); } else { /* choice L1; e1; commit L2; L1: e2; L2: ... */ Instruction *p = auxnew(L, &op, size, 1 + l1 + 1 + l2); setinst(p++, IChoice, 1 + l1 + 1); copypatt(p, p1, l1); p += l1; setinst(p++, ICommit, 1 + l2); addpatt(L, p, 2); optimizechoice(p - (1 + l1 + 1)); } return op; } static Instruction *separateparts (lua_State *L, Instruction *p1, int l1, int l2, int *size, CharsetTag *st2) { int sp = firstpart(p1, l1); if (sp == 0) /* first part is entire p1? */ return basicUnion(L, p1, l1, l2, size, st2); else if ((p1 + sp - 1)->i.code == ICommit || !interfere(p1, sp, st2)) { Instruction *p; int init = *size; int end = init + sp; *size = end; p = separateparts(L, p1 + sp, l1 - sp, l2, size, st2); copypatt(p + init, p1, sp); (p + end - 1)->i.offset = *size - (end - 1); return p; } else { /* must change back to non-optimized choice */ Instruction *p; int init = *size; int end = init + sp + 1; /* needs one extra instruction (choice) */ int sizefirst = sizei(p1); /* size of p1's first instruction (the test) */ *size = end; p = separateparts(L, p1 + sp, l1 - sp, l2, size, st2); copypatt(p + init, p1, sizefirst); /* copy the test */ (p + init)->i.offset++; /* correct jump (because of new instruction) */ init += sizefirst; setinstaux(p + init, IChoice, sp - sizefirst + 1, 1); init++; copypatt(p + init, p1 + sizefirst, sp - sizefirst - 1); init += sp - sizefirst - 1; setinst(p + init, ICommit, *size - (end - 1)); return p; } } static int union_l (lua_State *L) { int l1, l2; int size = 0; Instruction *p1 = getpatt(L, 1, &l1); Instruction *p2 = getpatt(L, 2, &l2); CharsetTag st2; if (isfail(p1)) /* check for simple identities */ lua_pushvalue(L, 2); /* fail / a == a */ else if (isfail(p2) || issucc(p1)) lua_pushvalue(L, 1); /* a / fail == a; true / a == true */ else { tocharset(p2, &st2); separateparts(L, p1, l1, l2, &size, &st2); } return 1; } static int repeatcharset (lua_State *L, Charset cs, int l1, int n) { /* e; ...; e; span; */ int i; Instruction *p = newpatt(L, n*l1 + CHARSETINSTSIZE); for (i = 0; i < n; i++) { p += addpatt(L, p, 1); } setinst(p, ISpan, 0); loopset(k, p[1].buff[k] = cs[k]); return 1; } static Instruction *repeatheadfail (lua_State *L, int l1, int n) { /* e; ...; e; L2: e'(L1); jump L2; L1: ... */ int i; Instruction *p = newpatt(L, (n + 1)*l1 + 1); Instruction *op = p; for (i = 0; i < n; i++) { p += addpatt(L, p, 1); } p += addpatt(L, p, 1); check2test(p - l1, l1 + 1); setinst(p, IJmp, -l1); return op; } static Instruction *repeats (lua_State *L, Instruction *p1, int l1, int n) { /* e; ...; e; choice L1; L2: e; partialcommit L2; L1: ... */ int i; Instruction *op = newpatt(L, (n + 1)*l1 + 2); Instruction *p = op; if (!verify(L, p1, p1, p1 + l1, 0, 0)) luaL_error(L, "loop body may accept empty string"); for (i = 0; i < n; i++) { p += addpatt(L, p, 1); } setinst(p++, IChoice, 1 + l1 + 1); p += addpatt(L, p, 1); setinst(p, IPartialCommit, -l1); return op; } static void optionalheadfail (lua_State *L, int l1, int n) { Instruction *op = newpatt(L, n * l1); Instruction *p = op; int i; for (i = 0; i < n; i++) { p += addpatt(L, p, 1); check2test(p - l1, (n - i)*l1); } } static void optionals (lua_State *L, int l1, int n) { /* choice L1; e; partialcommit L2; L2: ... e; L1: commit L3; L3: ... */ int i; Instruction *op = newpatt(L, n*(l1 + 1) + 1); Instruction *p = op; setinst(p++, IChoice, 1 + n*(l1 + 1)); for (i = 0; i < n; i++) { p += addpatt(L, p, 1); setinst(p++, IPartialCommit, 1); } setinst(p - 1, ICommit, 1); /* correct last commit */ optimizechoice(op); } static int star_l (lua_State *L) { int l1; int n = luaL_checkint(L, 2); Instruction *p1 = getpatt(L, 1, &l1); if (n >= 0) { CharsetTag st; Instruction *op; if (tocharset(p1, &st) == ISCHARSET) return repeatcharset(L, st.cs, l1, n); if (isheadfail(p1)) op = repeatheadfail(L, l1, n); else op = repeats(L, p1, l1, n); optimizecaptures(op); optimizejumps(op); } else { if (isheadfail(p1)) optionalheadfail(L, l1, -n); else optionals(L, l1, -n); } return 1; } static int getlabel (lua_State *L, int labelidx) { if (labelidx == 0) return 0; else return value2fenv(L, labelidx); } static int capture_aux (lua_State *L, int kind, int labelidx) { int l1, n; Instruction *p1 = getpatt(L, 1, &l1); int lc = skipchecks(p1, 0, &n); if (lc == l1) { /* got whole pattern? */ /* may use a IFullCapture instruction at its end */ Instruction *p = newpatt(L, l1 + 1); int label = getlabel(L, labelidx); p += addpatt(L, p, 1); setinstcap(p, IFullCapture, label, kind, n); } else { /* must use open-close pair */ Instruction *op = newpatt(L, 1 + l1 + 1); Instruction *p = op; setinstcap(p++, IOpenCapture, getlabel(L, labelidx), kind, 0); p += addpatt(L, p, 1); setinstcap(p, ICloseCapture, 0, Cclose, 0); optimizecaptures(op); } return 1; } static int capture_l (lua_State *L) { return capture_aux(L, Csimple, 0); } static int tcapture_l (lua_State *L) { return capture_aux(L, Ctable, 0); } static int capsubst_l (lua_State *L) { return capture_aux(L, Csubst, 0); } static int rcapture_l (lua_State *L) { switch (lua_type(L, 2)) { case LUA_TFUNCTION: return capture_aux(L, Cfunction, 2); case LUA_TTABLE: return capture_aux(L, Cquery, 2); case LUA_TSTRING: return capture_aux(L, Cstring, 2); default: return luaL_argerror(L, 2, "invalid replacement value"); } } static int fold_l (lua_State *L) { luaL_checktype(L, 2, LUA_TFUNCTION); return capture_aux(L, Cfold, 2); } static int group_l (lua_State *L) { if (lua_isnoneornil(L, 2)) return capture_aux(L, Cgroup, 0); else { luaL_checkstring(L, 2); return capture_aux(L, Cgroup, 2); } } static int position_l (lua_State *L) { Instruction *p = newpatt(L, 1); setinstcap(p, IEmptyCapture, 0, Cposition, 0); return 1; } static int backref_l (lua_State *L) { Instruction *p = newpatt(L, 1); int n = getlabel(L, 1); setinstcap(p, IEmptyCaptureIdx, n, Cbackref, 0); return 1; } static int argcap_l (lua_State *L) { int n = luaL_checkint(L, 1); Instruction *p = newpatt(L, 1); luaL_argcheck(L, 0 < n && n <= SHRT_MAX, 1, "invalid argument index"); setinstcap(p, IEmptyCapture, n, Carg, 0); return 1; } static int matchtime_l (lua_State *L) { int l1 = getpattl(L, 1); Instruction *op = newpatt(L, 1 + l1 + 1); Instruction *p = op; luaL_checktype(L, 2, LUA_TFUNCTION); setinstcap(p++, IOpenCapture, value2fenv(L, 2), Cruntime, 0); p += addpatt(L, p, 1); setinstcap(p, ICloseRunTime, 0, Cclose, 0); optimizecaptures(op); return 1; } static int capconst_l (lua_State *L) { int i, j; int n = lua_gettop(L); Instruction *p = newpatt(L, n > 1 ? n + 2 : n); lua_createtable(L, n, 0); /* new environment for the new pattern */ if (n > 1) setinstcap(p++, IOpenCapture, 0, Cgroup, 0); for (i = j = 1; i <= n; i++) { if (lua_isnil(L, i)) setinstcap(p++, IEmptyCaptureIdx, 0, Cconst, 0); else { setinstcap(p++, IEmptyCaptureIdx, j, Cconst, 0); lua_pushvalue(L, i); lua_rawseti(L, -2, j++); } } if (n > 1) setinstcap(p++, ICloseCapture, 0, Cclose, 0); lua_setfenv(L, -2); /* set environment */ return 1; } /* }====================================================== */ /* ** {====================================================== ** User-Defined Patterns ** ======================================================= */ static void l_newpf (lua_State *L, PattFunc f, const void *ud, size_t l) { int n = instsize(l) + 1; Instruction *p = newpatt(L, n); if (n > MAXAUX) luaL_error(L, "pattern data too long"); p[0].i.code = IFunc; p[0].i.aux = n - 2; p[0].i.offset = 0; p[1].f = f; memcpy(p[2].buff, ud, l); } /* }====================================================== */ /* ** {====================================================== ** Captures ** ======================================================= */ typedef struct CapState { Capture *cap; /* current capture */ Capture *ocap; /* (original) capture list */ lua_State *L; int ptop; /* index of last argument to 'match' */ const char *s; /* original string */ int valuecached; /* value stored in cache slot */ } CapState; #define captype(cap) ((cap)->kind) #define isclosecap(cap) (captype(cap) == Cclose) #define closeaddr(c) ((c)->s + (c)->siz - 1) #define isfullcap(cap) ((cap)->siz != 0) #define getfromenv(cs,v) lua_rawgeti((cs)->L, penvidx((cs)->ptop), v) #define pushluaval(cs) getfromenv(cs, (cs)->cap->idx) #define pushsubject(cs, c) lua_pushlstring((cs)->L, (c)->s, (c)->siz - 1) #define updatecache(cs,v) { if ((v) != (cs)->valuecached) updatecache_(cs,v); } static void updatecache_ (CapState *cs, int v) { getfromenv(cs, v); lua_replace(cs->L, subscache(cs)); cs->valuecached = v; } static int pushcapture (CapState *cs); static Capture *findopen (Capture *cap) { int n = 0; for (;;) { cap--; if (isclosecap(cap)) n++; else if (!isfullcap(cap)) if (n-- == 0) return cap; } } static Capture *nextcap (Capture *cap) { if (isfullcap(cap)) return cap + 1; else { int n = 0; for (;;) { cap++; if (isclosecap(cap)) { if (n-- == 0) return cap + 1; } else if (!isfullcap(cap)) n++; } } } static int pushallvalues (CapState *cs, int addextra) { Capture *co = cs->cap; int n = 0; if (isfullcap(cs->cap++)) { pushsubject(cs, co); /* push whole match */ return 1; } while (!isclosecap(cs->cap)) n += pushcapture(cs); if (addextra || n == 0) { /* need extra? */ lua_pushlstring(cs->L, co->s, cs->cap->s - co->s); /* push whole match */ n++; } cs->cap++; /* skip close entry */ return n; } static Capture *findback (CapState *cs, Capture *cap) { lua_State *L = cs->L; for (;;) { if (cap == cs->ocap) { /* not found */ const char *s = lua_tostring(L, -1); if (s == NULL) s = lua_pushfstring(L, "(a %s)", luaL_typename(L, -1)); luaL_error(L, "back reference '%s' not found", s); } cap--; if (isclosecap(cap)) cap = findopen(cap); else if (!isfullcap(cap)) continue; /* opening an enclosing capture: skip and get previous */ if (captype(cap) == Cgroup) { getfromenv(cs, cap->idx); /* get group name */ if (lua_equal(L, -2, -1)) { /* right group? */ lua_pop(L, 2); /* remove reference name and group name */ return cap; } else lua_pop(L, 1); /* remove group name */ } } } static int backrefcap (CapState *cs) { int n; Capture *curr = cs->cap; pushluaval(cs); /* reference name */ cs->cap = findback(cs, curr); n = pushallvalues(cs, 0); cs->cap = curr + 1; return n; } static int tablecap (CapState *cs) { lua_State *L = cs->L; int n = 0; lua_newtable(L); if (isfullcap(cs->cap++)) return 1; /* table is empty */ while (!isclosecap(cs->cap)) { if (captype(cs->cap) == Cgroup && cs->cap->idx != 0) { /* named group? */ int k; pushluaval(cs); /* push group name */ k = pushallvalues(cs, 0); if (k == 0) { /* no value? */ lua_pop(L, 1); /* remove group name */ continue; /* and go on */ } else if (k > 1) lua_pop(L, k - 1); /* keep just one value */ lua_settable(L, -3); } else { int i; int k = pushcapture(cs); for (i = k; i > 0; i--) lua_rawseti(L, -(i + 1), n + i); n += k; } } cs->cap++; /* skip close entry */ return 1; } static int querycap (CapState *cs) { int idx = cs->cap->idx; int n = pushallvalues(cs, 0); if (n > 1) /* extra captures? */ lua_pop(cs->L, n - 1); /* throw them away */ updatecache(cs, idx); lua_gettable(cs->L, subscache(cs)); if (!lua_isnil(cs->L, -1)) return 1; else { lua_pop(cs->L, 1); /* remove value */ return 0; } } static int foldcap (CapState *cs) { int n; lua_State *L = cs->L; int idx = cs->cap->idx; if (isfullcap(cs->cap++) || isclosecap(cs->cap) || (n = pushcapture(cs)) == 0) return luaL_error(L, "no initial value for fold capture"); if (n > 1) lua_pop(L, n - 1); /* leave only one result */ while (!isclosecap(cs->cap)) { updatecache(cs, idx); lua_pushvalue(L, subscache(cs)); /* get folding function */ lua_insert(L, -2); /* put it before accumulator */ n = pushcapture(cs); /* get other captures */ lua_call(L, n + 1, 1); /* call folding function */ } cs->cap++; /* skip close entry */ return 1; } static int functioncap (CapState *cs) { int n; int top = lua_gettop(cs->L); pushluaval(cs); n = pushallvalues(cs, 0); lua_call(cs->L, n, LUA_MULTRET); return lua_gettop(cs->L) - top; } static int runtimecap (lua_State *L, Capture *close, Capture *ocap, const char *o, const char *s, int ptop) { CapState cs; int n; Capture *open = findopen(close); assert(captype(open) == Cruntime); close->kind = Cclose; close->s = s; cs.ocap = ocap; cs.cap = open; cs.L = L; cs.s = o; cs.valuecached = 0; cs.ptop = ptop; luaL_checkstack(L, 4, "too many runtime captures"); pushluaval(&cs); lua_pushvalue(L, SUBJIDX); /* push original subject */ lua_pushinteger(L, s - o + 1); /* current position */ n = pushallvalues(&cs, 0); lua_call(L, n + 2, LUA_MULTRET); return close - open; } typedef struct StrAux { int isstring; union { Capture *cp; struct { const char *s; const char *e; } s; } u; } StrAux; #define MAXSTRCAPS 10 static int getstrcaps (CapState *cs, StrAux *cps, int n) { int k = n++; cps[k].isstring = 1; cps[k].u.s.s = cs->cap->s; if (!isfullcap(cs->cap++)) { while (!isclosecap(cs->cap)) { if (n >= MAXSTRCAPS) /* too many captures? */ cs->cap = nextcap(cs->cap); /* skip it */ else if (captype(cs->cap) == Csimple) n = getstrcaps(cs, cps, n); else { cps[n].isstring = 0; cps[n].u.cp = cs->cap; cs->cap = nextcap(cs->cap); n++; } } cs->cap++; /* skip close */ } cps[k].u.s.e = closeaddr(cs->cap - 1); return n; } /* ** add next capture (which should be a string) to buffer */ static int addonestring (luaL_Buffer *b, CapState *cs, const char *what); static void stringcap (luaL_Buffer *b, CapState *cs) { StrAux cps[MAXSTRCAPS]; int n; size_t len, i; const char *c; updatecache(cs, cs->cap->idx); c = lua_tolstring(cs->L, subscache(cs), &len); n = getstrcaps(cs, cps, 0) - 1; for (i = 0; i < len; i++) { if (c[i] != '%' || c[++i] < '0' || c[i] > '9') luaL_addchar(b, c[i]); else { int l = c[i] - '0'; if (l > n) luaL_error(cs->L, "invalid capture index (%d)", l); else if (cps[l].isstring) luaL_addlstring(b, cps[l].u.s.s, cps[l].u.s.e - cps[l].u.s.s); else { Capture *curr = cs->cap; cs->cap = cps[l].u.cp; if (addonestring(b, cs, "capture") == 0) luaL_error(cs->L, "no values in capture index %d", l); cs->cap = curr; } } } } static void substcap (luaL_Buffer *b, CapState *cs) { const char *curr = cs->cap->s; if (isfullcap(cs->cap)) /* no nested captures? */ luaL_addlstring(b, curr, cs->cap->siz - 1); /* keep original text */ else { cs->cap++; while (!isclosecap(cs->cap)) { const char *next = cs->cap->s; luaL_addlstring(b, curr, next - curr); /* add text up to capture */ if (addonestring(b, cs, "replacement") == 0) /* no capture value? */ curr = next; /* keep original text in final result */ else curr = closeaddr(cs->cap - 1); /* continue after match */ } luaL_addlstring(b, curr, cs->cap->s - curr); /* add last piece of text */ } cs->cap++; /* go to next capture */ } static int addonestring (luaL_Buffer *b, CapState *cs, const char *what) { switch (captype(cs->cap)) { case Cstring: stringcap(b, cs); /* add capture directly to buffer */ return 1; case Csubst: substcap(b, cs); /* add capture directly to buffer */ return 1; default: { lua_State *L = cs->L; int n = pushcapture(cs); if (n > 0) { if (n > 1) lua_pop(L, n - 1); /* only one result */ if (!lua_isstring(L, -1)) luaL_error(L, "invalid %s value (a %s)", what, luaL_typename(L, -1)); luaL_addvalue(b); } return n; } } } static int pushcapture (CapState *cs) { luaL_checkstack(cs->L, 4, "too many captures"); switch (captype(cs->cap)) { case Cposition: { lua_pushinteger(cs->L, cs->cap->s - cs->s + 1); cs->cap++; return 1; } case Cconst: { pushluaval(cs); cs->cap++; return 1; } case Carg: { int arg = (cs->cap++)->idx; if (arg + FIXEDARGS > cs->ptop) return luaL_error(cs->L, "reference to absent argument #%d", arg); lua_pushvalue(cs->L, arg + FIXEDARGS); return 1; } case Csimple: { int k = pushallvalues(cs, 1); if (k > 1) lua_insert(cs->L, -k); /* whole match is first result */ return k; } case Cruntime: { int n = 0; while (!isclosecap(cs->cap++)) { luaL_checkstack(cs->L, 4, "too many captures"); lua_pushvalue(cs->L, (cs->cap - 1)->idx); n++; } return n; } case Cstring: { luaL_Buffer b; luaL_buffinit(cs->L, &b); stringcap(&b, cs); luaL_pushresult(&b); return 1; } case Csubst: { luaL_Buffer b; luaL_buffinit(cs->L, &b); substcap(&b, cs); luaL_pushresult(&b); return 1; } case Cgroup: { if (cs->cap->idx == 0) /* anonymous group? */ return pushallvalues(cs, 0); /* add all nested values */ else { /* named group: add no values */ cs->cap = nextcap(cs->cap); /* skip capture */ return 0; } } case Cbackref: return backrefcap(cs); case Ctable: return tablecap(cs); case Cfunction: return functioncap(cs); case Cquery: return querycap(cs); case Cfold: return foldcap(cs); default: assert(0); return 0; } } static int getcaptures (lua_State *L, const char *s, const char *r, int ptop) { Capture *capture = (Capture *)lua_touserdata(L, caplistidx(ptop)); int n = 0; if (!isclosecap(capture)) { /* is there any capture? */ CapState cs; cs.ocap = cs.cap = capture; cs.L = L; cs.s = s; cs.valuecached = 0; cs.ptop = ptop; do { /* collect their values */ n += pushcapture(&cs); } while (!isclosecap(cs.cap)); } if (n == 0) { /* no capture values? */ lua_pushinteger(L, r - s + 1); /* return only end position */ n = 1; } return n; } /* }====================================================== */ static int version_l (lua_State *L) { lua_pushstring(L, VERSION); return 1; } static int type_l (lua_State *L) { if (testpattern(L, 1)) lua_pushliteral(L, "pattern"); else lua_pushnil(L); return 1; } static void createcat (lua_State *L, const char *catname, int (catf) (int)) { Instruction *p = newcharset(L); int i; for (i = 0; i < CHAR_MAX; i++) if (catf(i)) setchar(p[1].buff, i); lua_setfield(L, -2, catname); } static int locale_l (lua_State *L) { if (lua_isnoneornil(L, 1)) { lua_settop(L, 0); lua_createtable(L, 0, 12); } else { luaL_checktype(L, 1, LUA_TTABLE); lua_settop(L, 1); } createcat(L, "alnum", isalnum); createcat(L, "alpha", isalpha); createcat(L, "cntrl", iscntrl); createcat(L, "digit", isdigit); createcat(L, "graph", isgraph); createcat(L, "lower", islower); createcat(L, "print", isprint); createcat(L, "punct", ispunct); createcat(L, "space", isspace); createcat(L, "upper", isupper); createcat(L, "xdigit", isxdigit); return 1; } static int setmax (lua_State *L) { luaL_optinteger(L, 1, -1); lua_settop(L, 1); lua_setfield(L, LUA_REGISTRYINDEX, MAXSTACKIDX); return 0; } static int printpat_l (lua_State *L) { Instruction *p = getpatt(L, 1, NULL); int n, i; lua_getfenv(L, 1); n = ktablelen(L, -1); printf("["); for (i = 1; i <= n; i++) { printf("%d = ", i); lua_rawgeti(L, -1, i); if (lua_isstring(L, -1)) printf("%s ", lua_tostring(L, -1)); else printf("%s ", lua_typename(L, lua_type(L, -1))); lua_pop(L, 1); } printf("]\n"); printpatt(p); return 0; } static int matchl (lua_State *L) { Capture capture[INITCAPSIZE]; const char *r; size_t l; Instruction *p = getpatt(L, 1, NULL); const char *s = luaL_checklstring(L, SUBJIDX, &l); int ptop = lua_gettop(L); lua_Integer ii = luaL_optinteger(L, 3, 1); size_t i = (ii > 0) ? (((size_t)ii <= l) ? (size_t)ii - 1 : l) : (((size_t)-ii <= l) ? l - ((size_t)-ii) : 0); lua_pushnil(L); /* subscache */ lua_pushlightuserdata(L, capture); /* caplistidx */ lua_getfenv(L, 1); /* penvidx */ r = match(L, s, s + i, s + l, p, capture, ptop); if (r == NULL) { lua_pushnil(L); return 1; } return getcaptures(L, s, r, ptop); } static struct luaL_Reg pattreg[] = { {"match", matchl}, {"print", printpat_l}, {"locale", locale_l}, {"setmaxstack", setmax}, {"B", pattbehind}, {"C", capture_l}, {"Cf", fold_l}, {"Cc", capconst_l}, {"Cg", group_l}, {"Cp", position_l}, {"Cb", backref_l}, {"Carg", argcap_l}, {"Cmt", matchtime_l}, {"Cs", capsubst_l}, {"Ct", tcapture_l}, {"P", pattern_l}, {"R", range_l}, {"S", set_l}, {"V", nter_l}, {"type", type_l}, {"version", version_l}, {NULL, NULL} }; static struct luaL_Reg metapattreg[] = { {"__add", union_l}, {"__pow", star_l}, {"__sub", diff_l}, {"__mul", concat_l}, {"__div", rcapture_l}, {"__unm", unm_l}, {"__len", pattand_l}, {NULL, NULL} }; int luaopen_lpeg (lua_State *L); int luaopen_lpeg (lua_State *L) { lua_pushcfunction(L, (lua_CFunction)&l_newpf); /* new-pattern function */ lua_setfield(L, LUA_REGISTRYINDEX, KEYNEWPATT); /* register it */ luaL_newmetatable(L, PATTERN_T); lua_pushnumber(L, MAXBACK); lua_setfield(L, LUA_REGISTRYINDEX, MAXSTACKIDX); luaL_register(L, NULL, metapattreg); luaL_register(L, "lpeg", pattreg); lua_pushliteral(L, "__index"); lua_pushvalue(L, -2); lua_settable(L, -4); return 1; } genometools-1.5.1/src/external/lpeg-0.10.2/lpeg.h000066400000000000000000000023761211610345200212300ustar00rootroot00000000000000/* ** $Id: lpeg.h,v 1.1 2009/12/23 16:15:36 roberto Exp $ ** LPeg - PEG pattern matching for Lua ** Copyright 2009, Lua.org & PUC-Rio (see 'lpeg.html' for license) ** written by Roberto Ierusalimschy */ #ifndef lpeg_h #define lpeg_h #include "lua.h" int luaopen_lpeg (lua_State *L); #define KEYNEWPATT "lpeg.newpf" /* ** type of extension functions that define new "patterns" for LPEG ** It should return the new current position or NULL if match fails */ typedef const char *(*PattFunc) (const char *s, /* current position */ const char *e, /* string end */ const char *o, /* string start */ const void *ud); /* user data */ /* ** function to create new patterns based on 'PattFunc' functions. ** This function is available at *registry[KEYNEWPATT]. (Notice ** the extra indirection; the userdata at the registry points to ** a variable that points to the function. In ANSI C a void* cannot ** point to a function.) */ typedef void (*Newpf) (lua_State *L, PattFunc f, /* pattern */ const void *ud, /* (user) data to be passed to 'f' */ size_t l); /* size of data to be passed to 'f' */ #endif genometools-1.5.1/src/external/lpeg-0.10.2/lpeg.html000066400000000000000000001233541211610345200217450ustar00rootroot00000000000000 LPeg - Parsing Expression Grammars For Lua
LPeg
Parsing Expression Grammars For Lua, version 0.10

Introduction

LPeg is a new pattern-matching library for Lua, based on Parsing Expression Grammars (PEGs). This text is a reference manual for the library. For a more formal treatment of LPeg, as well as some discussion about its implementation, see A Text Pattern-Matching Tool based on Parsing Expression Grammars. (You may also be interested in my talk about LPeg given at the III Lua Workshop.)

Following the Snobol tradition, LPeg defines patterns as first-class objects. That is, patterns are regular Lua values (represented by userdata). The library offers several functions to create and compose patterns. With the use of metamethods, several of these functions are provided as infix or prefix operators. On the one hand, the result is usually much more verbose than the typical encoding of patterns using the so called regular expressions (which typically are not regular expressions in the formal sense). On the other hand, first-class patterns allow much better documentation (as it is easy to comment the code, to break complex definitions in smaller parts, etc.) and are extensible, as we can define new functions to create and compose patterns.

For a quick glance of the library, the following table summarizes its basic operations for creating patterns:

OperatorDescription
lpeg.P(string) Matches string literally
lpeg.P(n) Matches exactly n characters
lpeg.S(string) Matches any character in string (Set)
lpeg.R("xy") Matches any character between x and y (Range)
patt^n Matches at least n repetitions of patt
patt^-n Matches at most n repetitions of patt
patt1 * patt2 Matches patt1 followed by patt2
patt1 + patt2 Matches patt1 or patt2 (ordered choice)
patt1 - patt2 Matches patt1 if patt2 does not match
-patt Equivalent to ("" - patt)
#patt Matches patt but consumes no input
lpeg.B(patt, n) Matches patt n characters behind the current position, consuming no input

As a very simple example, lpeg.R("09")^1 creates a pattern that matches a non-empty sequence of digits. As a not so simple example, -lpeg.P(1) (which can be written as lpeg.P(-1) or simply -1 for operations expecting a pattern) matches an empty string only if it cannot match a single character; so, it succeeds only at the subject's end.

LPeg also offers the re module, which implements patterns following a regular-expression style (e.g., [09]+). (This module is 250 lines of Lua code, and of course uses LPeg to parse regular expressions and translate them to regular LPeg patterns.)

Functions

lpeg.match (pattern, subject [, init])

The matching function. It attempts to match the given pattern against the subject string. If the match succeeds, returns the index in the subject of the first character after the match, or the captured values (if the pattern captured any value).

An optional numeric argument init makes the match starts at that position in the subject string. As usual in Lua libraries, a negative value counts from the end.

Unlike typical pattern-matching functions, match works only in anchored mode; that is, it tries to match the pattern with a prefix of the given subject string (at position init), not with an arbitrary substring of the subject. So, if we want to find a pattern anywhere in a string, we must either write a loop in Lua or write a pattern that matches anywhere. This second approach is easy and quite efficient; see examples.

lpeg.type (value)

If the given value is a pattern, returns the string "pattern". Otherwise returns nil.

lpeg.version ()

Returns a string with the running version of LPeg.

lpeg.setmaxstack (max)

Sets the maximum size for the backtrack stack used by LPeg to track calls and choices. Most well-written patterns need little backtrack levels and therefore you seldom need to change this maximum; but a few useful patterns may need more space. Before changing this maximum you should try to rewrite your pattern to avoid the need for extra space.

Basic Constructions

The following operations build patterns. All operations that expect a pattern as an argument may receive also strings, tables, numbers, booleans, or functions, which are translated to patterns according to the rules of function lpeg.P.

lpeg.P (value)

Converts the given value into a proper pattern, according to the following rules:

  • If the argument is a pattern, it is returned unmodified.

  • If the argument is a string, it is translated to a pattern that matches literally the string.

  • If the argument is a non-negative number n, the result is a pattern that matches exactly n characters.

  • If the argument is a negative number -n, the result is a pattern that succeeds only if the input string does not have n characters: lpeg.P(-n) is equivalent to -lpeg.P(n) (see the unary minus operation).

  • If the argument is a boolean, the result is a pattern that always succeeds or always fails (according to the boolean value), without consuming any input.

  • If the argument is a table, it is interpreted as a grammar (see Grammars).

  • If the argument is a function, returns a pattern equivalent to a match-time capture over the empty string.

lpeg.B(patt [, n])

Returns a pattern that matches only if the input string matches patt starting n positions behind the current position. (The default value for n is 1.) If the current position is less than or equal to n, this pattern fails.

Like the and predicate, this pattern never consumes any input, independently of success or failure, and it never produces any capture.

The pattern patt cannot contain any open reference to grammar rules (see grammars).

(This is an experimental feature. There is a good chance it will change in future versions.)

lpeg.R ({range})

Returns a pattern that matches any single character belonging to one of the given ranges. Each range is a string xy of length 2, representing all characters with code between the codes of x and y (both inclusive).

As an example, the pattern lpeg.R("09") matches any digit, and lpeg.R("az", "AZ") matches any ASCII letter.

lpeg.S (string)

Returns a pattern that matches any single character that appears in the given string. (The S stands for Set.)

As an example, the pattern lpeg.S("+-*/") matches any arithmetic operator.

Note that, if s is a character (that is, a string of length 1), then lpeg.P(s) is equivalent to lpeg.S(s) which is equivalent to lpeg.R(s..s). Note also that both lpeg.S("") and lpeg.R() are patterns that always fail.

lpeg.V (v)

This operation creates a non-terminal (a variable) for a grammar. The created non-terminal refers to the rule indexed by v in the enclosing grammar. (See Grammars for details.)

lpeg.locale ([table])

Returns a table with patterns for matching some character classes according to the current locale. The table has fields named alnum, alpha, cntrl, digit, graph, lower, print, punct, space, upper, and xdigit, each one containing a correspondent pattern. Each pattern matches any single character that belongs to its class.

If called with an argument table, then it creates those fields inside the given table and returns that table.

#patt

Returns a pattern that matches only if the input string matches patt, but without consuming any input, independently of success or failure. (This pattern is called an and predicate and it is equivalent to &patt in the original PEG notation.)

This pattern never produces any capture.

.

-patt

Returns a pattern that matches only if the input string does not match patt. It does not consume any input, independently of success or failure. (This pattern is equivalent to !patt in the original PEG notation.)

As an example, the pattern -lpeg.P(1) matches only the end of string.

This pattern never produces any captures, because either patt fails or -patt fails. (A failing pattern never produces captures.)

patt1 + patt2

Returns a pattern equivalent to an ordered choice of patt1 and patt2. (This is denoted by patt1 / patt2 in the original PEG notation, not to be confused with the / operation in LPeg.) It matches either patt1 or patt2, with no backtracking once one of them succeeds. The identity element for this operation is the pattern lpeg.P(false), which always fails.

If both patt1 and patt2 are character sets, this operation is equivalent to set union.

lower = lpeg.R("az")
upper = lpeg.R("AZ")
letter = lower + upper

patt1 - patt2

Returns a pattern equivalent to !patt2 patt1. This pattern asserts that the input does not match patt2 and then matches patt1.

When succeeded, this pattern produces all captures from patt1. It never produces any capture from patt2 (as either patt2 fails or patt1 - patt2 fails).

If both patt1 and patt2 are character sets, this operation is equivalent to set difference. Note that -patt is equivalent to "" - patt (or 0 - patt). If patt is a character set, 1 - patt is its complement.

patt1 * patt2

Returns a pattern that matches patt1 and then matches patt2, starting where patt1 finished. The identity element for this operation is the pattern lpeg.P(true), which always succeeds.

(LPeg uses the * operator [instead of the more obvious ..] both because it has the right priority and because in formal languages it is common to use a dot for denoting concatenation.)

patt^n

If n is nonnegative, this pattern is equivalent to pattn patt*. It matches at least n occurrences of patt.

Otherwise, when n is negative, this pattern is equivalent to (patt?)-n. That is, it matches at most |n| occurrences of patt.

In particular, patt^0 is equivalent to patt*, patt^1 is equivalent to patt+, and patt^-1 is equivalent to patt? in the original PEG notation.

In all cases, the resulting pattern is greedy with no backtracking (also called a possessive repetition). That is, it matches only the longest possible sequence of matches for patt.

Grammars

With the use of Lua variables, it is possible to define patterns incrementally, with each new pattern using previously defined ones. However, this technique does not allow the definition of recursive patterns. For recursive patterns, we need real grammars.

LPeg represents grammars with tables, where each entry is a rule.

The call lpeg.V(v) creates a pattern that represents the nonterminal (or variable) with index v in a grammar. Because the grammar still does not exist when this function is evaluated, the result is an open reference to the respective rule.

A table is fixed when it is converted to a pattern (either by calling lpeg.P or by using it wherein a pattern is expected). Then every open reference created by lpeg.V(v) is corrected to refer to the rule indexed by v in the table.

When a table is fixed, the result is a pattern that matches its initial rule. The entry with index 1 in the table defines its initial rule. If that entry is a string, it is assumed to be the name of the initial rule. Otherwise, LPeg assumes that the entry 1 itself is the initial rule.

As an example, the following grammar matches strings of a's and b's that have the same number of a's and b's:

equalcount = lpeg.P{
  "S";   -- initial rule name
  S = "a" * lpeg.V"B" + "b" * lpeg.V"A" + "",
  A = "a" * lpeg.V"S" + "b" * lpeg.V"A" * lpeg.V"A",
  B = "b" * lpeg.V"S" + "a" * lpeg.V"B" * lpeg.V"B",
} * -1

It is equivalent to the following grammar in standard PEG notation:

  S <- 'a' B / 'b' A / ''
  A <- 'a' S / 'b' A A
  B <- 'b' S / 'a' B B

Captures

A capture is a pattern that creates values (the so called semantic information) when it matches. LPeg offers several kinds of captures, which produces values based on matches and combine these values to produce new values. Each capture may produce zero or more values.

The following table summarizes the basic captures:

OperationWhat it Produces
lpeg.C(patt) the match for patt plus all captures made by patt
lpeg.Carg(n) the value of the nth extra argument to lpeg.match (matches the empty string)
lpeg.Cb(name) the values produced by the previous group capture named name (matches the empty string)
lpeg.Cc(values) the given values (matches the empty string)
lpeg.Cf(patt, func) a folding of the captures from patt
lpeg.Cg(patt [, name]) the values produced by patt, optionally tagged with name
lpeg.Cp() the current position (matches the empty string)
lpeg.Cs(patt) the match for patt with the values from nested captures replacing their matches
lpeg.Ct(patt) a table with all captures from patt
patt / string string, with some marks replaced by captures of patt
patt / table table[c], where c is the (first) capture of patt
patt / function the returns of function applied to the captures of patt
lpeg.Cmt(patt, function) the returns of function applied to the captures of patt; the application is done at match time

A capture pattern produces its values every time it succeeds. For instance, a capture inside a loop produces as many values as matched by the loop. A capture produces a value only when it succeeds. For instance, the pattern lpeg.C(lpeg.P"a"^-1) produces the empty string when there is no "a" (because the pattern "a"? succeeds), while the pattern lpeg.C("a")^-1 does not produce any value when there is no "a" (because the pattern "a" fails).

Usually, LPeg evaluates all captures only after (and if) the entire match succeeds. During the match time it only gathers enough information to produce the capture values later. As a particularly important consequence, most captures cannot affect the way a pattern matches a subject. The only exception to this rule is the so-called match-time capture. When a match-time capture matches, it forces the immediate evaluation of all its nested captures and then calls its corresponding function, which tells whether the match succeeds and also what values are produced.

lpeg.C (patt)

Creates a simple capture, which captures the substring of the subject that matches patt. The captured value is a string. If patt has other captures, their values are returned after this one.

lpeg.Carg (n)

Creates an argument capture. This pattern matches the empty string and produces the value given as the nth extra argument given in the call to lpeg.match.

lpeg.Cb (name)

Creates a back capture. This pattern matches the empty string and produces the values produced by the most recent group capture named name.

Most recent means the last complete outermost group capture with the given name. A Complete capture means that the entire pattern corresponding to the capture has matched. An Outermost capture means that the capture is not inside another complete capture.

lpeg.Cc ([value, ...])

Creates a constant capture. This pattern matches the empty string and produces all given values as its captured values.

lpeg.Cf (patt, func)

Creates a fold capture. If patt produces a list of captures C1 C2 ... Cn, this capture will produce the value func(...func(func(C1, C2), C3)..., Cn), that is, it will fold (or accumulate, or reduce) the captures from patt using function func.

This capture assumes that patt should produce at least one capture with at least one value (of any type), which becomes the initial value of an accumulator. (If you need a specific initial value, you may prefix a constant capture to patt.) For each subsequent capture LPeg calls func with this accumulator as the first argument and all values produced by the capture as extra arguments; the value returned by this call becomes the new value for the accumulator. The final value of the accumulator becomes the captured value.

As an example, the following pattern matches a list of numbers separated by commas and returns their addition:

-- matches a numeral and captures its value
number = lpeg.R"09"^1 / tonumber

-- matches a list of numbers, captures their values
list = number * ("," * number)^0

-- auxiliary function to add two numbers
function add (acc, newvalue) return acc + newvalue end

-- folds the list of numbers adding them
sum = lpeg.Cf(list, add)

-- example of use
print(sum:match("10,30,43"))   --> 83

lpeg.Cg (patt [, name])

Creates a group capture. It groups all values returned by patt into a single capture. The group may be anonymous (if no name is given) or named with the given name.

An anonymous group serves to join values from several captures into a single capture. A named group has a different behavior. In most situations, a named group returns no values at all. Its values are only relevant for a following back capture or when used inside a table capture.

lpeg.Cp ()

Creates a position capture. It matches the empty string and captures the position in the subject where the match occurs. The captured value is a number.

lpeg.Cs (patt)

Creates a substitution capture, which captures the substring of the subject that matches patt, with substitutions. For any capture inside patt with a value, the substring that matched the capture is replaced by the capture value (which should be a string). The final captured value is the string resulting from all replacements.

lpeg.Ct (patt)

Creates a table capture. This capture creates a table and puts all values from all anonymous captures made by patt inside this table in successive integer keys, starting at 1. Moreover, for each named capture group created by patt, the first value of the group is put into the table with the group name as its key. The captured value is only the table.

patt / string

Creates a string capture. It creates a capture string based on string. The captured value is a copy of string, except that the character % works as an escape character: any sequence in string of the form %n, with n between 1 and 9, stands for the match of the n-th capture in patt. The sequence %0 stands for the whole match. The sequence %% stands for a single %.

patt / table

Creates a query capture. It indexes the given table using as key the first value captured by patt, or the whole match if patt produced no value. The value at that index is the final value of the capture. If the table does not have that key, there is no captured value.

patt / function

Creates a function capture. It calls the given function passing all captures made by patt as arguments, or the whole match if patt made no capture. The values returned by the function are the final values of the capture. In particular, if function returns no value, there is no captured value.

lpeg.Cmt(patt, function)

Creates a match-time capture. Unlike all other captures, this one is evaluated immediately when a match occurs. It forces the immediate evaluation of all its nested captures and then calls function.

The given function gets as arguments the entire subject, the current position (after the match of patt), plus any capture values produced by patt.

The first value returned by function defines how the match happens. If the call returns a number, the match succeeds and the returned number becomes the new current position. (Assuming a subject s and current position i, the returned number must be in the range [i, len(s) + 1].) If the call returns true, the match succeeds without consuming any input. (So, to return true is equivalent to return i.) If the call returns false, nil, or no value, the match fails.

Any extra values returned by the function become the values produced by the capture.

Some Examples

Using a Pattern

This example shows a very simple but complete program that builds and uses a pattern:

local lpeg = require "lpeg"

-- matches a word followed by end-of-string
p = lpeg.R"az"^1 * -1

print(p:match("hello"))        --> 6
print(lpeg.match(p, "hello"))  --> 6
print(p:match("1 hello"))      --> nil

The pattern is simply a sequence of one or more lower-case letters followed by the end of string (-1). The program calls match both as a method and as a function. In both sucessful cases, the match returns the index of the first character after the match, which is the string length plus one.

Name-value lists

This example parses a list of name-value pairs and returns a table with those pairs:

lpeg.locale(lpeg)   -- adds locale entries into 'lpeg' table

local space = lpeg.space^0
local name = lpeg.C(lpeg.alpha^1) * space
local sep = lpeg.S(",;") * space
local pair = lpeg.Cg(name * "=" * space * name) * sep^-1
local list = lpeg.Cf(lpeg.Ct("") * pair^0, rawset)
t = list:match("a=b, c = hi; next = pi")  --> { a = "b", c = "hi", next = "pi" }

Each pair has the format name = name followed by an optional separator (a comma or a semicolon). The pair pattern encloses the pair in a group pattern, so that the names become the values of a single capture. The list pattern then folds these captures. It starts with an empty table, created by a table capture matching an empty string; then for each capture (a pair of names) it applies rawset over the accumulator (the table) and the capture values (the pair of names). rawset returns the table itself, so the accumulator is always the table.

Splitting a string

The following code builds a pattern that splits a string using a given pattern sep as a separator:

function split (s, sep)
  sep = lpeg.P(sep)
  local elem = lpeg.C((1 - sep)^0)
  local p = elem * (sep * elem)^0
  return lpeg.match(p, s)
end

First the function ensures that sep is a proper pattern. The pattern elem is a repetition of zero of more arbitrary characters as long as there is not a match against the separator. It also captures its result. The pattern p matches a list of elements separated by sep.

If the split results in too many values, it may overflow the maximum number of values that can be returned by a Lua function. In this case, we should collect these values in a table:

function split (s, sep)
  sep = lpeg.P(sep)
  local elem = lpeg.C((1 - sep)^0)
  local p = lpeg.Ct(elem * (sep * elem)^0)   -- make a table capture
  return lpeg.match(p, s)
end

Searching for a pattern

The primitive match works only in anchored mode. If we want to find a pattern anywhere in a string, we must write a pattern that matches anywhere.

Because patterns are composable, we can write a function that, given any arbitrary pattern p, returns a new pattern that searches for p anywhere in a string. There are several ways to do the search. One way is like this:

function anywhere (p)
  return lpeg.P{ p + 1 * lpeg.V(1) }
end

This grammar has a straight reading: it matches p or skips one character and tries again.

If we want to know where the pattern is in the string (instead of knowing only that it is there somewhere), we can add position captures to the pattern:

local I = lpeg.Cp()
function anywhere (p)
  return lpeg.P{ I * p * I + 1 * lpeg.V(1) }
end

Another option for the search is like this:

local I = lpeg.Cp()
function anywhere (p)
  return (1 - lpeg.P(p))^0 * I * p * I
end

Again the pattern has a straight reading: it skips as many characters as possible while not matching p, and then matches p (plus appropriate captures).

If we want to look for a pattern only at word boundaries, we can use the following transformer:

local t = lpeg.locale()

function atwordboundary (p)
  return lpeg.P{
    [1] = p + t.alpha^0 * (1 - t.alpha)^1 * lpeg.V(1)
  }
end

Balanced parentheses

The following pattern matches only strings with balanced parentheses:

b = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" }

Reading the first (and only) rule of the given grammar, we have that a balanced string is an open parenthesis, followed by zero or more repetitions of either a non-parenthesis character or a balanced string (lpeg.V(1)), followed by a closing parenthesis.

Global substitution

The next example does a job somewhat similar to string.gsub. It receives a pattern and a replacement value, and substitutes the replacement value for all occurrences of the pattern in a given string:

function gsub (s, patt, repl)
  patt = lpeg.P(patt)
  patt = lpeg.Cs((patt / repl + 1)^0)
  return lpeg.match(patt, s)
end

As in string.gsub, the replacement value can be a string, a function, or a table.

Comma-Separated Values (CSV)

This example breaks a string into comma-separated values, returning all fields:

local field = '"' * lpeg.Cs(((lpeg.P(1) - '"') + lpeg.P'""' / '"')^0) * '"' +
                    lpeg.C((1 - lpeg.S',\n"')^0)

local record = field * (',' * field)^0 * (lpeg.P'\n' + -1)

function csv (s)
  return lpeg.match(record, s)
end

A field is either a quoted field (which may contain any character except an individual quote, which may be written as two quotes that are replaced by one) or an unquoted field (which cannot contain commas, newlines, or quotes). A record is a list of fields separated by commas, ending with a newline or the string end (-1).

As it is, the previous pattern returns each field as a separated result. If we add a table capture in the definition of record, the pattern will return instead a single table containing all fields:

local record = lpeg.Ct(field * (',' * field)^0) * (lpeg.P'\n' + -1)

UTF-8 and Latin 1

It is not difficult to use LPeg to convert a string from UTF-8 encoding to Latin 1 (ISO 8859-1):

-- convert a two-byte UTF-8 sequence to a Latin 1 character
local function f2 (s)
  local c1, c2 = string.byte(s, 1, 2)
  return string.char(c1 * 64 + c2 - 12416)
end

local utf8 = lpeg.R("\0\127")
           + lpeg.R("\194\195") * lpeg.R("\128\191") / f2

local decode_pattern = lpeg.Cs(utf8^0) * -1

In this code, the definition of UTF-8 is already restricted to the Latin 1 range (from 0 to 255). Any encoding outside this range (as well as any invalid encoding) will not match that pattern.

As the definition of decode_pattern demands that the pattern matches the whole input (because of the -1 at its end), any invalid string will simply fail to match, without any useful information about the problem. We can improve this situation redefining decode_pattern as follows:

local function er (_, i) error("invalid encoding at position " .. i) end

local decode_pattern = lpeg.Cs(utf8^0) * (-1 + lpeg.P(er))

Now, if the pattern utf8^0 stops before the end of the string, an appropriate error function is called.

UTF-8 and Unicode

We can extend the previous patterns to handle all Unicode code points. Of course, we cannot translate them to Latin 1 or any other one-byte encoding. Instead, our translation results in a array with the code points represented as numbers. The full code is here:

-- decode a two-byte UTF-8 sequence
local function f2 (s)
  local c1, c2 = string.byte(s, 1, 2)
  return c1 * 64 + c2 - 12416
end

-- decode a three-byte UTF-8 sequence
local function f3 (s)
  local c1, c2, c3 = string.byte(s, 1, 3)
  return (c1 * 64 + c2) * 64 + c3 - 925824
end

-- decode a four-byte UTF-8 sequence
local function f4 (s)
  local c1, c2, c3, c4 = string.byte(s, 1, 4)
  return ((c1 * 64 + c2) * 64 + c3) * 64 + c4 - 63447168
end

local cont = lpeg.R("\128\191")   -- continuation byte

local utf8 = lpeg.R("\0\127") / string.byte
           + lpeg.R("\194\223") * cont / f2
           + lpeg.R("\224\239") * cont * cont / f3
           + lpeg.R("\240\244") * cont * cont * cont / f4

local decode_pattern = lpeg.Ct(utf8^0) * -1

Lua's long strings

A long string in Lua starts with the pattern [=*[ and ends at the first occurrence of ]=*] with exactly the same number of equal signs. If the opening brackets are followed by a newline, this newline is discharged (that is, it is not part of the string).

To match a long string in Lua, the pattern must capture the first repetition of equal signs and then, whenever it finds a candidate for closing the string, check whether it has the same number of equal signs.

equals = lpeg.P"="^0
open = "[" * lpeg.Cg(equals, "init") * "[" * lpeg.P"\n"^-1
close = "]" * lpeg.C(equals) * "]"
closeeq = lpeg.Cmt(close * lpeg.Cb("init"), function (s, i, a, b) return a == b end)
string = open * lpeg.C((lpeg.P(1) - closeeq)^0) * close /
  function (s, o) return s end

The open pattern matches [=*[, capturing the repetitions of equal signs in a group named init; it also discharges an optional newline, if present. The close pattern matches ]=*], also capturing the repetitions of equal signs. The closeeq pattern first matches close; then it uses a back capture to recover the capture made by the previous open, which is named init; finally it uses a match-time capture to check whether both captures are equal. The string pattern starts with an open, then it goes as far as possible until matching closeeq, and then matches the final close. The final function capture simply discards the capture made by close.

Arithmetic expressions

This example is a complete parser and evaluator for simple arithmetic expressions. We write it in two styles. The first approach first builds a syntax tree and then traverses this tree to compute the expression value:

-- Lexical Elements
local Space = lpeg.S(" \n\t")^0
local Number = lpeg.C(lpeg.P"-"^-1 * lpeg.R("09")^1) * Space
local FactorOp = lpeg.C(lpeg.S("+-")) * Space
local TermOp = lpeg.C(lpeg.S("*/")) * Space
local Open = "(" * Space
local Close = ")" * Space

-- Grammar
local Exp, Term, Factor = lpeg.V"Exp", lpeg.V"Term", lpeg.V"Factor"
G = lpeg.P{ Exp,
  Exp = lpeg.Ct(Factor * (FactorOp * Factor)^0);
  Factor = lpeg.Ct(Term * (TermOp * Term)^0);
  Term = Number + Open * Exp * Close;
}

G = Space * G * -1

-- Evaluator
function eval (x)
  if type(x) == "string" then
    return tonumber(x)
  else
    local op1 = eval(x[1])
    for i = 2, #x, 2 do
      local op = x[i]
      local op2 = eval(x[i + 1])
      if (op == "+") then op1 = op1 + op2
      elseif (op == "-") then op1 = op1 - op2
      elseif (op == "*") then op1 = op1 * op2
      elseif (op == "/") then op1 = op1 / op2
      end
    end
    return op1
  end
end

-- Parser/Evaluator
function evalExp (s)
  local t = lpeg.match(G, s)
  if not t then error("syntax error", 2) end
  return eval(t)
end

-- small example
print(evalExp"3 + 5*9 / (1+1) - 12")   --> 13.5

The second style computes the expression value on the fly, without building the syntax tree. The following grammar takes this approach. (It assumes the same lexical elements as before.)

-- Auxiliary function
function eval (v1, op, v2)
  if (op == "+") then return v1 + v2
  elseif (op == "-") then return v1 - v2
  elseif (op == "*") then return v1 * v2
  elseif (op == "/") then return v1 / v2
  end
end

-- Grammar
local V = lpeg.V
G = lpeg.P{ "Exp",
  Exp = lpeg.Cf(V"Factor" * lpeg.Cg(FactorOp * V"Factor")^0, eval);
  Factor = lpeg.Cf(V"Term" * lpeg.Cg(TermOp * V"Term")^0, eval);
  Term = Number / tonumber + Open * V"Exp" * Close;
}

-- small example
print(lpeg.match(G, "3 + 5*9 / (1+1) - 12"))   --> 13.5

Note the use of the fold (accumulator) capture. To compute the value of an expression, the accumulator starts with the value of the first factor, and then applies eval over the accumulator, the operator, and the new factor for each repetition.

Download

LPeg source code.

License

Copyright © 2008 Lua.org, PUC-Rio.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

$Id: lpeg.html,v 1.64 2011/02/16 15:01:58 roberto Exp $

genometools-1.5.1/src/external/lpeg-0.10.2/makefile000066400000000000000000000014451211610345200216240ustar00rootroot00000000000000LIBNAME = lpeg LUADIR = /usr/include/lua5.1/ COPT = -O2 -DNDEBUG CWARNS = -Wall -Wextra -pedantic \ -Waggregate-return \ -Wbad-function-cast \ -Wcast-align \ -Wcast-qual \ -Wdeclaration-after-statement \ -Wdisabled-optimization \ -Wmissing-prototypes \ -Wnested-externs \ -Wpointer-arith \ -Wshadow \ -Wsign-compare \ -Wstrict-prototypes \ -Wundef \ -Wwrite-strings \ # -Wunreachable-code \ CFLAGS = $(CWARNS) $(COPT) -ansi -I$(LUADIR) CC = gcc # For Linux DLLFLAGS = -shared -fpic ENV = # For Mac OS # ENV = MACOSX_DEPLOYMENT_TARGET=10.4 # DLLFLAGS = -bundle -undefined dynamic_lookup lpeg.so: lpeg.o env $(ENV) $(CC) $(DLLFLAGS) lpeg.o -o lpeg.so lpeg.o: makefile lpeg.c lpeg.h test: test.lua re.lua lpeg.so test.lua genometools-1.5.1/src/external/lpeg-0.10.2/re.html000066400000000000000000000343261211610345200214240ustar00rootroot00000000000000 LPeg.re - Regex syntax for LPEG
LPeg.re
Regex syntax for LPEG

The re Module

The re module (provided by file re.lua in the distribution) supports a somewhat conventional regex syntax for pattern usage within LPeg.

The next table summarizes re's syntax. A p represents an arbitrary pattern; num represents a number ([0-9]+); name represents an identifier ([a-zA-Z][a-zA-Z0-9_]*). Constructions are listed in order of decreasing precedence.
SyntaxDescription
( p ) grouping
'string' literal string
"string" literal string
[class] character class
. any character
%name pattern defs[name] or a pre-defined pattern
namenon terminal
<name>non terminal
{} position capture
{ p } simple capture
{: p :} anonymous group capture
{:name: p :} named group capture
{~ p ~} substitution capture
=name back reference
p ? optional match
p * zero or more repetitions
p + one or more repetitions
p^num exactly n repetitions
p^+num at least n repetitions
p^-num at most n repetitions
p -> 'string' string capture
p -> "string" string capture
p -> {} table capture
p -> name function/query/string capture equivalent to p / defs[name]
p => name match-time capture equivalent to lpeg.Cmt(p, defs[name])
& p and predicate
! p not predicate
p1 p2 concatenation
p1 / p2 ordered choice
(name <- p)+ grammar

Any space appearing in a syntax description can be replaced by zero or more space characters and Lua-style comments (-- until end of line).

Character classes define sets of characters. An initial ^ complements the resulting set. A range x-y includes in the set all characters with codes between the codes of x and y. A pre-defined class %name includes all characters of that class. A simple character includes itself in the set. The only special characters inside a class are ^ (special only if it is the first character); ] (can be included in the set as the first character, after the optional ^); % (special only if followed by a letter); and - (can be included in the set as the first or the last character).

Currently the pre-defined classes are similar to those from the Lua's string library (%a for letters, %A for non letters, etc.). There is also a class %nl containing only the newline character, which is particularly handy for grammars written inside long strings, as long strings do not interpret escape sequences like \n.

Functions

re.compile (string, [, defs])

Compiles the given string and returns an equivalent LPeg pattern. The given string may define either an expression or a grammar. The optional defs table provides extra Lua values to be used by the pattern.

re.find (subject, pattern [, init])

Searches the given pattern in the given subject. If it finds a match, returns the index where this occurrence starts, plus the captures made by the pattern (if any). Otherwise, returns nil.

An optional numeric argument init makes the search starts at that position in the subject string. As usual in Lua libraries, a negative value counts from the end.

re.match (subject, pattern)

Matches the given pattern against the given subject.

re.updatelocale ()

Updates the pre-defined character classes to the current locale.

Some Examples

A complete simple program

The next code shows a simple complete Lua program using the re module:

local re = require"re"

-- find the position of the first number in a string
print(re.find("the number 423 is odd", "[0-9]+"))  --> 12

-- similar, but also captures (and returns) the number
print(re.find("the number 423 is odd", "{[0-9]+}"))  --> 12    423

-- returns all words in a string
print(re.match("the number 423 is odd", "({%a+} / .)*"))
--> the    number    is    odd

Balanced parentheses

The following call will produce the same pattern produced by the Lua expression in the balanced parentheses example:

b = re.compile[[  balanced <- "(" ([^()] / balanced)* ")"  ]]

String reversal

The next example reverses a string:

rev = re.compile[[ R <- (!.) -> '' / ({.} R) -> '%2%1']]
print(rev:match"0123456789")   --> 9876543210

CSV decoder

The next example replicates the CSV decoder:

record = re.compile[[
  record <- ( field (',' field)* ) -> {} (%nl / !.)
  field <- escaped / nonescaped
  nonescaped <- { [^,"%nl]* }
  escaped <- '"' {~ ([^"] / '""' -> '"')* ~} '"'
]]

Lua's long strings

The next example matches Lua long strings:

c = re.compile([[
  longstring <- ('[' {:eq: '='* :} '[' close) -> void
  close <- ']' =eq ']' / . close
]], {void = function () end})

print(c:match'[==[]]===]]]]==]===[]')   --> 17

Abstract Syntax Trees

This example shows a simple way to build an abstract syntax tree (AST) for a given grammar. To keep our example simple, let us consider the following grammar for lists of names:

p = re.compile[[
      listname <- (name s)*
      name <- [a-z][a-z]*
      s <- %s*
]]

Now, we will add captures to build a corresponding AST. As a first step, the pattern will build a table to represent each non terminal; terminals will be represented by their corresponding strings:

c = re.compile[[
      listname <- (name s)* -> {}
      name <- {[a-z][a-z]*} -> {}
      s <- %s*
]]

Now, a match against "hi hello bye" results in the table {{"hi"}, {"hello"}, {"bye"}}.

For such a simple grammar, this AST is more than enough; actually, the tables around each single name are already overkilling. More complex grammars, however, may need some more structure. Specifically, it would be useful if each table had a tag field telling what non terminal that table represents. We can add such a tag using named group captures:

x = re.compile[[
      listname <- ({:tag: '' -> 'list':} (name s)*) -> {}
      name <- ({:tag: '' -> 'id':} {[a-z][a-z]*}) -> {}
      s <- ' '*
]]

With these group captures, a match against "hi hello bye" results in the following table:

{tag="list",
  {tag="id", "hi"},
  {tag="id", "hello"},
  {tag="id", "bye"}
}

Indented blocks

This example breaks indented blocks into tables, respecting the indentation:

p = re.compile[[
  block <- ({:ident:' '*:} line
           ((=ident !' ' line) / &(=ident ' ') block)*) -> {}
  line <- {[^%nl]*} %nl
]]

As an example, consider the following text:

t = p:match[[
first line
  subline 1
  subline 2
second line
third line
  subline 3.1
    subline 3.1.1
  subline 3.2
]]

The resulting table t will be like this:

   {'first line'; {'subline 1'; 'subline 2'; ident = '  '};
    'second line';
    'third line'; { 'subline 3.1'; {'subline 3.1.1'; ident = '    '};
                    'subline 3.2'; ident = '  '};
    ident = ''}

Macro expander

This example implements a simple macro expander. Macros must be defined as part of the pattern, following some simple rules:

p = re.compile[[
      text <- {~ item* ~}
      item <- macro / [^()] / '(' item* ')'
      arg <- ' '* {~ (!',' item)* ~}
      args <- '(' arg (',' arg)* ')'
      -- now we define some macros
      macro <- ('apply' args) -> '%1(%2)'
             / ('add' args) -> '%1 + %2'
             / ('mul' args) -> '%1 * %2'
]]

print(p:match"add(mul(a,b), apply(f,x))")   --> a * b + f(x)

A text is a sequence of items, wherein we apply a substitution capture to expand any macros. An item is either a macro, any character different from parentheses, or a parenthesized expression. A macro argument (arg) is a sequence of items different from a comma. (Note that a comma may appear inside an item, e.g., inside a parenthesized expression.) Again we do a substitution capture to expand any macro in the argument before expanding the outer macro. args is a list of arguments separated by commas. Finally we define the macros. Each macro is a string substitution; it replaces the macro name and its arguments by its corresponding string, with each %n replaced by the n-th argument.

Patterns

This example shows the complete syntax of patterns accepted by re.

p = [=[

pattern         <- exp !.
exp             <- S (alternative / grammar)

alternative     <- seq ('/' S seq)*
seq             <- prefix*
prefix          <- '&' S prefix / '!' S prefix / suffix
suffix          <- primary S (([+*?]
                            / '^' [+-]? num
                            / '->' S (string / '{}' / name)
                            / '=>' S name) S)*

primary         <- '(' exp ')' / string / class / defined
                 / '{:' (name ':')? exp ':}'
                 / '=' name
                 / '{}'
                 / '{~' exp '~}'
                 / '{' exp '}'
                 / '.'
                 / name S !arrow
                 / '<' name '>'          -- old-style non terminals

grammar         <- definition+
definition      <- name S arrow exp

class           <- '[' '^'? item (!']' item)* ']'
item            <- defined / range / .
range           <- . '-' [^]]

S               <- (%s / '--' [^%nl]*)*   -- spaces and comments
name            <- [A-Za-z][A-Za-z0-9_]*
arrow           <- '<-'
num             <- [0-9]+
string          <- '"' [^"]* '"' / "'" [^']* "'"
defined         <- '%' name

]=]

print(re.match(p, p))   -- a self description must match itself

License

Copyright © 2008-2010 Lua.org, PUC-Rio.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

$Id: re.html,v 1.17 2011/01/10 15:08:06 roberto Exp $

genometools-1.5.1/src/external/lpeg-0.10.2/re.lua000066400000000000000000000136151211610345200212370ustar00rootroot00000000000000-- $Id: re.lua,v 1.39 2010/11/04 19:44:18 roberto Exp $ -- imported functions and modules local tonumber, type, print, error = tonumber, type, print, error local setmetatable = setmetatable local m = require"lpeg" -- 'm' will be used to parse expressions, and 'mm' will be used to -- create expressions; that is, 're' runs on 'm', creating patterns -- on 'mm' local mm = m -- pattern's metatable local mt = getmetatable(mm.P(0)) -- No more global accesses after this point local version = _VERSION if version == "Lua 5.2" then _ENV = nil end local any = m.P(1) -- Pre-defined names local Predef = { nl = m.P"\n" } local mem local fmem local gmem local function updatelocale () mm.locale(Predef) Predef.a = Predef.alpha Predef.c = Predef.cntrl Predef.d = Predef.digit Predef.g = Predef.graph Predef.l = Predef.lower Predef.p = Predef.punct Predef.s = Predef.space Predef.u = Predef.upper Predef.w = Predef.alnum Predef.x = Predef.xdigit Predef.A = any - Predef.a Predef.C = any - Predef.c Predef.D = any - Predef.d Predef.G = any - Predef.g Predef.L = any - Predef.l Predef.P = any - Predef.p Predef.S = any - Predef.s Predef.U = any - Predef.u Predef.W = any - Predef.w Predef.X = any - Predef.x mem = {} -- restart memoization fmem = {} gmem = {} local mt = {__mode = "v"} setmetatable(mem, mt) setmetatable(fmem, mt) setmetatable(gmem, mt) end updatelocale() local I = m.P(function (s,i) print(i, s:sub(1, i-1)); return i end) local function getdef (id, Defs) local c = Defs and Defs[id] if not c then error("undefined name: " .. id) end return c end local function patt_error (s, i) local msg = (#s < i + 20) and s:sub(i) or s:sub(i,i+20) .. "..." msg = ("pattern error near '%s'"):format(msg) error(msg, 2) end local function mult (p, n) local np = mm.P(true) while n >= 1 do if n%2 >= 1 then np = np * p end p = p * p n = n/2 end return np end local function equalcap (s, i, c) if type(c) ~= "string" then return nil end local e = #c + i if s:sub(i, e - 1) == c then return e else return nil end end local S = (m.S(" \f\n\r\t\v") + "--" * (any - Predef.nl)^0)^0 local name = m.R("AZ", "az") * m.R("AZ", "az", "__", "09")^0 local arrow = S * "<-" local exp_follow = m.P"/" + ")" + "}" + ":}" + "~}" + (name * arrow) + -1 name = m.C(name) -- identifiers only have meaning in a given environment local Identifier = name * m.Carg(1) local num = m.C(m.R"09"^1) * S / tonumber local String = "'" * m.C((any - "'")^0) * "'" + '"' * m.C((any - '"')^0) * '"' local defined = "%" * Identifier / function (c,Defs) local cat = Defs and Defs[c] or Predef[c] if not cat then error ("name '" .. c .. "' undefined") end return cat end local Range = m.Cs(any * (m.P"-"/"") * (any - "]")) / mm.R local item = defined + Range + m.C(any) local Class = "[" * (m.C(m.P"^"^-1)) -- optional complement symbol * m.Cf(item * (item - "]")^0, mt.__add) / function (c, p) return c == "^" and any - p or p end * "]" local function adddef (t, k, Defs, exp) if t[k] then error("'"..k.."' already defined as a rule") else t[k] = exp end return t end local function firstdef (n, Defs, r) return adddef({n}, n, Defs, r) end local exp = m.P{ "Exp", Exp = S * ( m.V"Grammar" + m.Cf(m.V"Seq" * ("/" * S * m.V"Seq")^0, mt.__add) ); Seq = m.Cf(m.Cc(m.P"") * m.V"Prefix"^0 , mt.__mul) * (#exp_follow + patt_error); Prefix = "&" * S * m.V"Prefix" / mt.__len + "!" * S * m.V"Prefix" / mt.__unm + m.V"Suffix"; Suffix = m.Cf(m.V"Primary" * S * ( ( m.P"+" * m.Cc(1, mt.__pow) + m.P"*" * m.Cc(0, mt.__pow) + m.P"?" * m.Cc(-1, mt.__pow) + "^" * ( m.Cg(num * m.Cc(mult)) + m.Cg(m.C(m.S"+-" * m.R"09"^1) * m.Cc(mt.__pow)) ) + "->" * S * ( m.Cg(String * m.Cc(mt.__div)) + m.P"{}" * m.Cc(nil, m.Ct) + m.Cg(Identifier / getdef * m.Cc(mt.__div)) ) + "=>" * S * m.Cg(Identifier / getdef * m.Cc(m.Cmt)) ) * S )^0, function (a,b,f) return f(a,b) end ); Primary = "(" * m.V"Exp" * ")" + String / mm.P + Class + defined + "{:" * (name * ":" + m.Cc(nil)) * m.V"Exp" * ":}" / function (n, p) return mm.Cg(p, n) end + "=" * name / function (n) return mm.Cmt(mm.Cb(n), equalcap) end + m.P"{}" / mm.Cp + "{~" * m.V"Exp" * "~}" / mm.Cs + "{" * m.V"Exp" * "}" / mm.C + m.P"." * m.Cc(any) + name * -arrow / mm.V + "<" * name * ">" / mm.V; Definition = Identifier * arrow * m.V"Exp"; Grammar = m.Cf(m.V"Definition" / firstdef * m.Cg(m.V"Definition")^0, adddef) / mm.P } local pattern = S * exp / mm.P * (-any + patt_error) local function compile (p, defs) if mm.type(p) == "pattern" then return p end -- already compiled local cp = pattern:match(p, 1, defs) if not cp then error("incorrect pattern", 3) end return cp end local function match (s, p, i) local cp = mem[p] if not cp then cp = compile(p) mem[p] = cp end return cp:match(s, i or 1) end local function find (s, p, i) local cp = fmem[p] if not cp then cp = compile(p) cp = mm.P{ mm.Cp() * cp + 1 * mm.V(1) } fmem[p] = cp end return cp:match(s, i or 1) end local function gsub (s, p, rep) local g = gmem[p] or {} -- ensure gmem[p] is not collected while here gmem[p] = g local cp = g[rep] if not cp then cp = compile(p) cp = mm.Cs((cp / rep + 1)^0) g[rep] = cp end return cp:match(s) end -- exported names local re = { compile = compile, match = match, find = find, gsub = gsub, updatelocale = updatelocale, } if version == "Lua 5.1" then _G.re = re end return re genometools-1.5.1/src/external/lpeg-0.10.2/test.lua000077500000000000000000001063151211610345200216130ustar00rootroot00000000000000#!/usr/bin/env lua5.1 -- $Id: test.lua,v 1.82 2010/12/03 14:49:54 roberto Exp $ --require"strict" -- just to be pedantic local m = require"lpeg" local debug = require"debug" -- compatibility with Lua 5.2 local unpack = table.unpack or unpack -- most tests here do not need much stack space m.setmaxstack(5) any = m.P(1) space = m.S" \t\n"^0 local function checkeq (x, y, p) if p then print(x,y) end if type(x) ~= "table" then assert(x == y) else for k,v in pairs(x) do checkeq(v, y[k], p) end for k,v in pairs(y) do checkeq(v, x[k], p) end end end mt = getmetatable(m.P(1)) local allchar = {} for i=0,255 do allchar[i + 1] = i end allchar = string.char(unpack(allchar)) assert(#allchar == 256) local function cs2str (c) return m.match(m.Cs((c + m.P(1)/"")^0), allchar) end local function eqcharset (c1, c2) assert(cs2str(c1) == cs2str(c2)) end print"General tests for LPeg library" assert(type(m.version()) == "string") print("version " .. m.version()) assert(m.type("alo") ~= "pattern") assert(m.type(io.input) ~= "pattern") assert(m.type(m.P"alo") == "pattern") -- tests for some basic optimizations assert(m.match(m.P(false) + "a", "a") == 2) assert(m.match(m.P(true) + "a", "a") == 1) assert(m.match("a" + m.P(false), "b") == nil) assert(m.match("a" + m.P(true), "b") == 1) assert(m.match(m.P(false) * "a", "a") == nil) assert(m.match(m.P(true) * "a", "a") == 2) assert(m.match("a" * m.P(false), "a") == nil) assert(m.match("a" * m.P(true), "a") == 2) assert(m.match(#m.P(false) * "a", "a") == nil) assert(m.match(#m.P(true) * "a", "a") == 2) assert(m.match("a" * #m.P(false), "a") == nil) assert(m.match("a" * #m.P(true), "a") == 2) -- tests for locale do assert(m.locale(m) == m) local t = {} assert(m.locale(t, m) == t) local x = m.locale() for n,v in pairs(x) do assert(type(n) == "string") eqcharset(v, m[n]) end end assert(m.match(3, "aaaa")) assert(m.match(4, "aaaa")) assert(not m.match(5, "aaaa")) assert(m.match(-3, "aa")) assert(not m.match(-3, "aaa")) assert(not m.match(-3, "aaaa")) assert(not m.match(-4, "aaaa")) assert(m.P(-5):match"aaaa") assert(m.match("a", "alo") == 2) assert(m.match("al", "alo") == 3) assert(not m.match("alu", "alo")) assert(m.match(true, "") == 1) digit = m.S"0123456789" upper = m.S"ABCDEFGHIJKLMNOPQRSTUVWXYZ" lower = m.S"abcdefghijklmnopqrstuvwxyz" letter = m.S"" + upper + lower alpha = letter + digit + m.R() eqcharset(m.S"", m.P(false)) eqcharset(upper, m.R("AZ")) eqcharset(lower, m.R("az")) eqcharset(upper + lower, m.R("AZ", "az")) eqcharset(upper + lower, m.R("AZ", "cz", "aa", "bb", "90")) eqcharset(digit, m.S"01234567" + "8" + "9") eqcharset(upper, letter - lower) eqcharset(m.S(""), m.R()) assert(cs2str(m.S("")) == "") eqcharset(m.S"\0", "\0") eqcharset(m.S"\1\0\2", m.R"\0\2") eqcharset(m.S"\1\0\2", m.R"\1\2" + "\0") eqcharset(m.S"\1\0\2" - "\0", m.R"\1\2") word = alpha^1 * (1 - alpha)^0 assert((word^0 * -1):match"alo alo") assert(m.match(word^1 * -1, "alo alo")) assert(m.match(word^2 * -1, "alo alo")) assert(not m.match(word^3 * -1, "alo alo")) assert(not m.match(word^-1 * -1, "alo alo")) assert(m.match(word^-2 * -1, "alo alo")) assert(m.match(word^-3 * -1, "alo alo")) eos = m.P(-1) assert(m.match(digit^0 * letter * digit * eos, "1298a1")) assert(not m.match(digit^0 * letter * eos, "1257a1")) b = { [1] = "(" * (((1 - m.S"()") + #m.P"(" * m.V(1))^0) * ")" } assert(m.match(b, "(al())()")) assert(not m.match(b * eos, "(al())()")) assert(m.match(b * eos, "((al())()(é))")) assert(not m.match(b, "(al()()")) assert(not m.match(letter^1 - "for", "foreach")) assert(m.match(letter^1 - ("for" * eos), "foreach")) assert(not m.match(letter^1 - ("for" * eos), "for")) function basiclookfor (p) return m.P { [1] = p + (1 * m.V(1)) } end function caplookfor (p) return basiclookfor(p:C()) end assert(m.match(caplookfor(letter^1), " 4achou123...") == "achou") a = {m.match(caplookfor(letter^1)^0, " two words, one more ")} checkeq(a, {"two", "words", "one", "more"}) assert(m.match( basiclookfor((#m.P(b) * 1) * m.Cp()), " ( (a)") == 7) a = {m.match(m.C(digit^1 * m.Cc"d") + m.C(letter^1 * m.Cc"l"), "123")} checkeq(a, {"123", "d"}) a = {m.match(m.C(digit^1) * "d" * -1 + m.C(letter^1 * m.Cc"l"), "123d")} checkeq(a, {"123"}) a = {m.match(m.C(digit^1 * m.Cc"d") + m.C(letter^1 * m.Cc"l"), "abcd")} checkeq(a, {"abcd", "l"}) a = {m.match(m.Cc(10,20,30) * 'a' * m.Cp(), 'aaa')} checkeq(a, {10,20,30,2}) a = {m.match(m.Cp() * m.Cc(10,20,30) * 'a' * m.Cp(), 'aaa')} checkeq(a, {1,10,20,30,2}) a = m.match(m.Ct(m.Cp() * m.Cc(10,20,30) * 'a' * m.Cp()), 'aaa') checkeq(a, {1,10,20,30,2}) a = m.match(m.Ct(m.Cp() * m.Cc(7,8) * m.Cc(10,20,30) * 'a' * m.Cp()), 'aaa') checkeq(a, {1,7,8,10,20,30,2}) a = {m.match(m.Cc() * m.Cc() * m.Cc(1) * m.Cc(2,3,4) * m.Cc() * 'a', 'aaa')} checkeq(a, {1,2,3,4}) a = {m.match(m.Cp() * letter^1 * m.Cp(), "abcd")} checkeq(a, {1, 5}) t = {m.match({[1] = m.C(m.C(1) * m.V(1) + -1)}, "abc")} checkeq(t, {"abc", "a", "bc", "b", "c", "c", ""}) -- test for small capture boundary for i = 250,260 do assert(#m.match(m.C(i), string.rep('a', i)) == i) assert(#m.match(m.C(m.C(i)), string.rep('a', i)) == i) end -- tests for any*n for n = 1, 550 do local x_1 = string.rep('x', n - 1) local x = x_1 .. 'a' assert(not m.P(n):match(x_1)) assert(m.P(n):match(x) == n + 1) assert(n < 4 or m.match(m.P(n) + "xxx", x_1) == 4) assert(m.C(n):match(x) == x) assert(m.C(m.C(n)):match(x) == x) assert(m.P(-n):match(x_1) == 1) assert(not m.P(-n):match(x)) assert(n < 13 or m.match(m.Cc(20) * ((n - 13) * m.P(10)) * 3, x) == 20) local n3 = math.floor(n/3) assert(m.match(n3 * m.Cp() * n3 * n3, x) == n3 + 1) end assert(m.P(0):match("x") == 1) assert(m.P(0):match("") == 1) assert(m.C(0):match("x") == "") assert(m.match(m.Cc(0) * m.P(10) + m.Cc(1) * "xuxu", "xuxu") == 1) assert(m.match(m.Cc(0) * m.P(10) + m.Cc(1) * "xuxu", "xuxuxuxuxu") == 0) assert(m.match(m.C(m.P(2)^1), "abcde") == "abcd") p = m.Cc(0) * 1 + m.Cc(1) * 2 + m.Cc(2) * 3 + m.Cc(3) * 4 -- test for alternation optimization assert(m.match(m.P"a"^1 + "ab" + m.P"x"^0, "ab") == 2) assert(m.match((m.P"a"^1 + "ab" + m.P"x"^0 * 1)^0, "ab") == 3) assert(m.match(m.P"ab" + "cd" + "" + "cy" + "ak", "98") == 1) assert(m.match(m.P"ab" + "cd" + "ax" + "cy", "ax") == 3) assert(m.match("a" * m.P"b"^0 * "c" + "cd" + "ax" + "cy", "ax") == 3) assert(m.match((m.P"ab" + "cd" + "ax" + "cy")^0, "ax") == 3) assert(m.match(m.P(1) * "x" + m.S"" * "xu" + "ay", "ay") == 3) assert(m.match(m.P"abc" + "cde" + "aka", "aka") == 4) assert(m.match(m.S"abc" * "x" + "cde" + "aka", "ax") == 3) assert(m.match(m.S"abc" * "x" + "cde" + "aka", "aka") == 4) assert(m.match(m.S"abc" * "x" + "cde" + "aka", "cde") == 4) assert(m.match(m.S"abc" * "x" + "ide" + m.S"ab" * "ka", "aka") == 4) assert(m.match("ab" + m.S"abc" * m.P"y"^0 * "x" + "cde" + "aka", "ax") == 3) assert(m.match("ab" + m.S"abc" * m.P"y"^0 * "x" + "cde" + "aka", "aka") == 4) assert(m.match("ab" + m.S"abc" * m.P"y"^0 * "x" + "cde" + "aka", "cde") == 4) assert(m.match("ab" + m.S"abc" * m.P"y"^0 * "x" + "ide" + m.S"ab" * "ka", "aka") == 4) assert(m.match("ab" + m.S"abc" * m.P"y"^0 * "x" + "ide" + m.S"ab" * "ka", "ax") == 3) assert(m.match(m.P(1) * "x" + "cde" + m.S"ab" * "ka", "aka") == 4) assert(m.match(m.P(1) * "x" + "cde" + m.P(1) * "ka", "aka") == 4) assert(m.match(m.P(1) * "x" + "cde" + m.P(1) * "ka", "cde") == 4) assert(m.match(m.P"eb" + "cd" + m.P"e"^0 + "x", "ee") == 3) assert(m.match(m.P"ab" + "cd" + m.P"e"^0 + "x", "abcd") == 3) assert(m.match(m.P"ab" + "cd" + m.P"e"^0 + "x", "eeex") == 4) assert(m.match(m.P"ab" + "cd" + m.P"e"^0 + "x", "cd") == 3) assert(m.match(m.P"ab" + "cd" + m.P"e"^0 + "x", "x") == 1) assert(m.match(m.P"ab" + "cd" + m.P"e"^0 + "x" + "", "zee") == 1) assert(m.match(m.P"ab" + "cd" + m.P"e"^1 + "x", "abcd") == 3) assert(m.match(m.P"ab" + "cd" + m.P"e"^1 + "x", "eeex") == 4) assert(m.match(m.P"ab" + "cd" + m.P"e"^1 + "x", "cd") == 3) assert(m.match(m.P"ab" + "cd" + m.P"e"^1 + "x", "x") == 2) assert(m.match(m.P"ab" + "cd" + m.P"e"^1 + "x" + "", "zee") == 1) pi = "3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510" assert(m.match(m.Cs((m.P"1" / "a" + m.P"5" / "b" + m.P"9" / "c" + 1)^0), pi) == m.match(m.Cs((m.P(1) / {["1"] = "a", ["5"] = "b", ["9"] = "c"})^0), pi)) print"+" -- tests for capture optimizations assert(m.match((m.P(3) + 4 * m.Cp()) * "a", "abca") == 5) t = {m.match(((m.P"a" + m.Cp()) * m.P"x")^0, "axxaxx")} checkeq(t, {3, 6}) -- test for table captures t = m.match(m.Ct(letter^1), "alo") checkeq(t, {}) t, n = m.match(m.Ct(m.C(letter)^1) * m.Cc"t", "alo") assert(n == "t" and table.concat(t) == "alo") t = m.match(m.Ct(m.C(m.C(letter)^1)), "alo") assert(table.concat(t, ";") == "alo;a;l;o") t = m.match(m.Ct(m.C(m.C(letter)^1)), "alo") assert(table.concat(t, ";") == "alo;a;l;o") t = m.match(m.Ct(m.Ct((m.Cp() * letter * m.Cp())^1)), "alo") assert(table.concat(t[1], ";") == "1;2;2;3;3;4") t = m.match(m.Ct(m.C(m.C(1) * 1 * m.C(1))), "alo") checkeq(t, {"alo", "a", "o"}) -- tests for groups p = m.Cg(1) -- no capture assert(p:match('x') == 'x') p = m.Cg(m.P(true)/function () end * 1) -- no value assert(p:match('x') == 'x') p = m.Cg(m.Cg(m.Cg(m.C(1)))) assert(p:match('x') == 'x') p = m.Cg(m.Cg(m.Cg(m.C(1))^0) * m.Cg(m.Cc(1) * m.Cc(2))) t = {p:match'abc'} checkeq(t, {'a', 'b', 'c', 1, 2}) -- test for non-pattern as arguments to pattern functions p = { ('a' * m.V(1))^-1 } * m.P'b' * { 'a' * m.V(2); m.V(1)^-1 } assert(m.match(p, "aaabaac") == 7) -- a large table capture t = m.match(m.Ct(m.C('a')^0), string.rep("a", 10000)) assert(#t == 10000 and t[1] == 'a' and t[#t] == 'a') -- test for errors local function checkerr (msg, ...) assert(m.match({ m.P(msg) + 1 * m.V(1) }, select(2, pcall(...)))) end -- checkerr("rule '1' is left recursive", m.match, { m.V(1) * 'a' }, "a") checkerr("rule '1' outside a grammar", m.match, m.V(1), "") checkerr("rule 'hiii' outside a grammar", m.match, m.V('hiii'), "") checkerr("rule 'hiii' is not defined", m.match, { m.V('hiii') }, "") checkerr("rule is not defined", m.match, { m.V{} }, "") checkerr("rule 'A' is not a pattern", m.P, { A = {} }) checkerr("rule is not a pattern", m.P, { [print] = {} }) -- test for non-pattern as arguments to pattern functions p = { ('a' * m.V(1))^-1 } * m.P'b' * { 'a' * m.V(2); m.V(1)^-1 } assert(m.match(p, "aaabaac") == 7) -- a large table capture t = m.match(m.Ct(m.C('a')^0), string.rep("a", 10000)) assert(#t == 10000 and t[1] == 'a' and t[#t] == 'a') -- test for errors local function checkerr (msg, ...) assert(m.match({ m.P(msg) + 1 * m.V(1) }, select(2, pcall(...)))) end checkerr("rule '1' is left recursive", m.match, { m.V(1) * 'a' }, "a") checkerr("rule '1' outside a grammar", m.match, m.V(1), "") checkerr("rule 'hiii' outside a grammar", m.match, m.V('hiii'), "") checkerr("rule 'hiii' is not defined", m.match, { m.V('hiii') }, "") checkerr("rule is not defined", m.match, { m.V({}) }, "") print('+') -- bug in 0.10 (rechecking a grammar, after tail-call optimization) m.P{ m.P { (m.P(3) + "xuxu")^0 * m.V"xuxu", xuxu = m.P(1) } } local V = m.V local Space = m.S(" \n\t")^0 local Number = m.C(m.R("09")^1) * Space local FactorOp = m.C(m.S("+-")) * Space local TermOp = m.C(m.S("*/")) * Space local Open = "(" * Space local Close = ")" * Space local function f_factor (v1, op, v2, d) assert(d == nil) if op == "+" then return v1 + v2 else return v1 - v2 end end local function f_term (v1, op, v2, d) assert(d == nil) if op == "*" then return v1 * v2 else return v1 / v2 end end G = m.P{ "Exp", Exp = m.Cf(V"Factor" * m.Cg(FactorOp * V"Factor")^0, f_factor); Factor = m.Cf(V"Term" * m.Cg(TermOp * V"Term")^0, f_term); Term = Number / tonumber + Open * V"Exp" * Close; } G = Space * G * -1 for _, s in ipairs{" 3 + 5*9 / (1+1) ", "3+4/2", "3+3-3- 9*2+3*9/1- 8"} do assert(m.match(G, s) == loadstring("return "..s)()) end -- test for grammars (errors deep in calling non-terminals) g = m.P{ [1] = m.V(2) + "a", [2] = "a" * m.V(3) * "x", [3] = "b" * m.V(3) + "c" } assert(m.match(g, "abbbcx") == 7) assert(m.match(g, "abbbbx") == 2) -- tests for \0 assert(m.match(m.R("\0\1")^1, "\0\1\0") == 4) assert(m.match(m.S("\0\1ab")^1, "\0\1\0a") == 5) assert(m.match(m.P(1)^3, "\0\1\0a") == 5) assert(not m.match(-4, "\0\1\0a")) assert(m.match("\0\1\0a", "\0\1\0a") == 5) assert(m.match("\0\0\0", "\0\0\0") == 4) assert(not m.match("\0\0\0", "\0\0")) -- tests for predicates assert(not m.match(-m.P("a") * 2, "alo")) assert(m.match(- -m.P("a") * 2, "alo") == 3) assert(m.match(#m.P("a") * 2, "alo") == 3) assert(m.match(##m.P("a") * 2, "alo") == 3) assert(not m.match(##m.P("c") * 2, "alo")) assert(m.match(m.Cs((##m.P("a") * 1 + m.P(1)/".")^0), "aloal") == "a..a.") assert(m.match(m.Cs((#((#m.P"a")/"") * 1 + m.P(1)/".")^0), "aloal") == "a..a.") assert(m.match(m.Cs((- -m.P("a") * 1 + m.P(1)/".")^0), "aloal") == "a..a.") assert(m.match(m.Cs((-((-m.P"a")/"") * 1 + m.P(1)/".")^0), "aloal") == "a..a.") -- look-behind predicate assert(not m.match(m.B'a', 'a')) assert(m.match(1 * m.B'a', 'a') == 2) assert(not m.match(m.B(1), 'a')) assert(m.match(1 * m.B(1), 'a') == 2) assert(m.match(-m.B(1), 'a') == 1) B = #letter * -m.B(letter) + -letter * m.B(letter) x = m.Ct({ (B * m.Cp())^-1 * (1 * m.V(1) + m.P(true)) }) checkeq(m.match(x, 'ar cal c'), {1,3,4,7,9,10}) checkeq(m.match(x, ' ar cal '), {2,4,5,8}) checkeq(m.match(x, ' '), {}) checkeq(m.match(x, 'aloalo'), {1,7}) assert(m.match(B, "a") == 1) assert(m.match(1 * B, "a") == 2) assert(not m.B(-letter):match("")) assert((-m.B(letter)):match("") == 1) assert((4 * m.B(letter, 4)):match("aaaaaaaa") == 5) assert(not (4 * m.B(letter, 5)):match("aaaaaaaa")) assert((4 * -m.B(letter, 5)):match("aaaaaaaa") == 5) assert((3 * m.B(m.C(1))):match("12345") == 4) -- bug in 0.9 assert(m.match(('a' * #m.P'b'), "ab") == 2) assert(not m.match(('a' * #m.P'b'), "a")) assert(not m.match(#m.S'567', "")) assert(m.match(#m.S'567' * 1, "6") == 2) -- tests for Tail Calls -- create a grammar for a simple DFA for even number of 0s and 1s -- finished in '$': -- -- ->1 <---0---> 2 -- ^ ^ -- | | -- 1 1 -- | | -- V V -- 3 <---0---> 4 -- -- this grammar should keep no backtracking information p = m.P{ [1] = '0' * m.V(2) + '1' * m.V(3) + '$', [2] = '0' * m.V(1) + '1' * m.V(4), [3] = '0' * m.V(4) + '1' * m.V(1), [4] = '0' * m.V(3) + '1' * m.V(2), } assert(p:match(string.rep("00", 10000) .. "$")) assert(p:match(string.rep("01", 10000) .. "$")) assert(p:match(string.rep("011", 10000) .. "$")) assert(not p:match(string.rep("011", 10001) .. "$")) -- this grammar does need backtracking info. local lim = 10000 p = m.P{ '0' * m.V(1) + '0' } assert(not pcall(m.match, p, string.rep("0", lim))) m.setmaxstack(2*lim) assert(not pcall(m.match, p, string.rep("0", lim))) m.setmaxstack(2*lim + 2) assert(pcall(m.match, p, string.rep("0", lim))) -- tests for optional start position assert(m.match("a", "abc", 1)) assert(m.match("b", "abc", 2)) assert(m.match("c", "abc", 3)) assert(not m.match(1, "abc", 4)) assert(m.match("a", "abc", -3)) assert(m.match("b", "abc", -2)) assert(m.match("c", "abc", -1)) assert(m.match("abc", "abc", -4)) -- truncate to position 1 assert(m.match("", "abc", 10)) -- empty string is everywhere! assert(m.match("", "", 10)) assert(not m.match(1, "", 1)) assert(not m.match(1, "", -1)) assert(not m.match(1, "", 0)) print("+") -- tests for argument captures assert(not pcall(m.Carg, 0)) assert(not pcall(m.Carg, -1)) assert(not pcall(m.Carg, 2^18)) assert(not pcall(m.match, m.Carg(1), 'a', 1)) assert(m.match(m.Carg(1), 'a', 1, print) == print) x = {m.match(m.Carg(1) * m.Carg(2), '', 1, 10, 20)} checkeq(x, {10, 20}) assert(m.match(m.Cmt(m.Cg(m.Carg(3), "a") * m.Cmt(m.Cb("a"), function (s,i,x) assert(s == "a" and i == 1); return i, x+1 end) * m.Carg(2), function (s,i,a,b,c) assert(s == "a" and i == 1 and c == nil); return i, 2*a + 3*b end) * "a", "a", 1, false, 100, 1000) == 2*1001 + 3*100) -- tests for Lua functions t = {} s = "" p = function (s1, i) assert(s == s1); t[#t + 1] = i; return nil end s = "hi, this is a test" assert(m.match(((p - m.P(-1)) + 2)^0, s) == string.len(s) + 1) assert(#t == string.len(s)/2 and t[1] == 1 and t[2] == 3) assert(not m.match(p, s)) p = mt.__add(function (s, i) return i end, function (s, i) return nil end) assert(m.match(p, "alo")) p = mt.__mul(function (s, i) return i end, function (s, i) return nil end) assert(not m.match(p, "alo")) t = {} p = function (s1, i) assert(s == s1); t[#t + 1] = i; return i end s = "hi, this is a test" assert(m.match((m.P(1) * p)^0, s) == string.len(s) + 1) assert(#t == string.len(s) and t[1] == 2 and t[2] == 3) t = {} p = m.P(function (s1, i) assert(s == s1); t[#t + 1] = i; return i <= s1:len() and i + 1 end) s = "hi, this is a test" assert(m.match(p^0, s) == string.len(s) + 1) assert(#t == string.len(s) + 1 and t[1] == 1 and t[2] == 2) p = function (s1, i) return m.match(m.P"a"^1, s1, i) end assert(m.match(p, "aaaa") == 5) assert(m.match(p, "abaa") == 2) assert(not m.match(p, "baaa")) assert(not pcall(m.match, function () return 2^20 end, s)) assert(not pcall(m.match, function () return 0 end, s)) assert(not pcall(m.match, function (s, i) return i - 1 end, s)) assert(not pcall(m.match, m.P(1)^0 * function (_, i) return i - 1 end, s)) assert(m.match(m.P(1)^0 * function (_, i) return i end * -1, s)) assert(not pcall(m.match, m.P(1)^0 * function (_, i) return i + 1 end, s)) assert(m.match(m.P(function (s, i) return s:len() + 1 end) * -1, s)) assert(not pcall(m.match, m.P(function (s, i) return s:len() + 2 end) * -1, s)) assert(not m.match(m.P(function (s, i) return s:len() end) * -1, s)) assert(m.match(m.P(1)^0 * function (_, i) return true end, s) == string.len(s) + 1) for i = 1, string.len(s) + 1 do assert(m.match(function (_, _) return i end, s) == i) end p = (m.P(function (s, i) return i%2 == 0 and i + 1 end) + m.P(function (s, i) return i%2 ~= 0 and i + 2 <= s:len() and i + 3 end))^0 * -1 assert(p:match(string.rep('a', 14000))) -- tests for Function Replacements f = function (a, ...) if a ~= "x" then return {a, ...} end end t = m.match(m.C(1)^0/f, "abc") checkeq(t, {"a", "b", "c"}) t = m.match(m.C(1)^0/f/f, "abc") checkeq(t, {{"a", "b", "c"}}) t = m.match(m.P(1)^0/f/f, "abc") -- no capture checkeq(t, {{"abc"}}) t = m.match((m.P(1)^0/f * m.Cp())/f, "abc") checkeq(t, {{"abc"}, 4}) t = m.match((m.C(1)^0/f * m.Cp())/f, "abc") checkeq(t, {{"a", "b", "c"}, 4}) t = m.match((m.C(1)^0/f * m.Cp())/f, "xbc") checkeq(t, {4}) t = m.match(m.C(m.C(1)^0)/f, "abc") checkeq(t, {"abc", "a", "b", "c"}) g = function (...) return 1, ... end t = {m.match(m.C(1)^0/g/g, "abc")} checkeq(t, {1, 1, "a", "b", "c"}) t = {m.match(m.Cc(nil,nil,4) * m.Cc(nil,3) * m.Cc(nil, nil) / g / g, "")} t1 = {1,1,nil,nil,4,nil,3,nil,nil} for i=1,10 do assert(t[i] == t1[i]) end t = {m.match((m.C(1) / function (x) return x, x.."x" end)^0, "abc")} checkeq(t, {"a", "ax", "b", "bx", "c", "cx"}) t = m.match(m.Ct((m.C(1) / function (x,y) return y, x end * m.Cc(1))^0), "abc") checkeq(t, {nil, "a", 1, nil, "b", 1, nil, "c", 1}) -- tests for Query Replacements assert(m.match(m.C(m.C(1)^0)/{abc = 10}, "abc") == 10) assert(m.match(m.C(1)^0/{a = 10}, "abc") == 10) assert(m.match(m.S("ba")^0/{ab = 40}, "abc") == 40) t = m.match(m.Ct((m.S("ba")/{a = 40})^0), "abc") checkeq(t, {40}) assert(m.match(m.Cs((m.C(1)/{a=".", d=".."})^0), "abcdde") == ".bc....e") assert(m.match(m.Cs((m.C(1)/{f="."})^0), "abcdde") == "abcdde") assert(m.match(m.Cs((m.C(1)/{d="."})^0), "abcdde") == "abc..e") assert(m.match(m.Cs((m.C(1)/{e="."})^0), "abcdde") == "abcdd.") assert(m.match(m.Cs((m.C(1)/{e=".", f="+"})^0), "eefef") == "..+.+") assert(m.match(m.Cs((m.C(1))^0), "abcdde") == "abcdde") assert(m.match(m.Cs(m.C(m.C(1)^0)), "abcdde") == "abcdde") assert(m.match(1 * m.Cs(m.P(1)^0), "abcdde") == "bcdde") assert(m.match(m.Cs((m.C('0')/'x' + 1)^0), "abcdde") == "abcdde") assert(m.match(m.Cs((m.C('0')/'x' + 1)^0), "0ab0b0") == "xabxbx") assert(m.match(m.Cs((m.C('0')/'x' + m.P(1)/{b=3})^0), "b0a0b") == "3xax3") assert(m.match(m.P(1)/'%0%0'/{aa = -3} * 'x', 'ax') == -3) assert(m.match(m.C(1)/'%0%1'/{aa = 'z'}/{z = -3} * 'x', 'ax') == -3) assert(m.match(m.Cs(m.Cc(0) * (m.P(1)/"")), "4321") == "0") assert(m.match(m.Cs((m.P(1) / "%0")^0), "abcd") == "abcd") assert(m.match(m.Cs((m.P(1) / "%0.%0")^0), "abcd") == "a.ab.bc.cd.d") assert(m.match(m.Cs((m.P("a") / "%0.%0" + 1)^0), "abcad") == "a.abca.ad") assert(m.match(m.C("a") / "%1%%%0", "a") == "a%a") assert(m.match(m.Cs((m.P(1) / ".xx")^0), "abcd") == ".xx.xx.xx.xx") assert(m.match(m.Cp() * m.P(3) * m.Cp()/"%2%1%1 - %0 ", "abcde") == "411 - abc ") assert(pcall(m.match, m.P(1)/"%0", "abc")) assert(not pcall(m.match, m.P(1)/"%1", "abc")) -- out of range assert(not pcall(m.match, m.P(1)/"%9", "abc")) -- out of range p = m.C(1) p = p * p; p = p * p; p = p * p * m.C(1) / "%9 - %1" assert(p:match("1234567890") == "9 - 1") assert(m.match(m.Cc(print), "") == print) -- too many captures (just ignore extra ones) p = m.C(1)^0 / "%2-%9-%0-%9" assert(p:match"01234567890123456789" == "1-8-01234567890123456789-8") s = string.rep("12345678901234567890", 20) assert(m.match(m.C(1)^0 / "%9-%1-%0-%3", s) == "9-1-" .. s .. "-3") -- string captures with non-string subcaptures p = m.Cc('alo') * m.C(1) / "%1 - %2 - %1" assert(p:match'x' == 'alo - x - alo') assert(not pcall(m.match, m.Cc(true) / "%1", "a")) -- long strings for string capture l = 10000 s = string.rep('a', l) .. string.rep('b', l) .. string.rep('c', l) p = (m.C(m.P'a'^1) * m.C(m.P'b'^1) * m.C(m.P'c'^1)) / '%3%2%1' assert(p:match(s) == string.rep('c', l) .. string.rep('b', l) .. string.rep('a', l)) print"+" -- accumulator capture function f (x) return x + 1 end assert(m.match(m.Cf(m.Cc(0) * m.C(1)^0, f), "alo alo") == 7) t = {m.match(m.Cf(m.Cc(1,2,3), error), "")} checkeq(t, {1}) p = m.Cf(m.Ct(true) * m.Cg(m.C(m.R"az"^1) * "=" * m.C(m.R"az"^1) * ";")^0, rawset) t = p:match("a=b;c=du;xux=yuy;") checkeq(t, {a="b", c="du", xux="yuy"}) -- tests for loop checker local function haveloop (p) assert(not pcall(function (p) return p^0 end, m.P(p))) end haveloop(m.P("x")^-4) assert(m.match(((m.P(0) + 1) * m.S"al")^0, "alo") == 3) assert(m.match((("x" + #m.P(1))^-4 * m.S"al")^0, "alo") == 3) haveloop("") haveloop(m.P("x")^0) haveloop(m.P("x")^-1) haveloop(m.P("x") + 1 + 2 + m.P("a")^-1) haveloop(-m.P("ab")) haveloop(- -m.P("ab")) haveloop(# #(m.P("ab") + "xy")) haveloop(- #m.P("ab")^0) haveloop(# -m.P("ab")^1) haveloop(#m.V(3)) haveloop(m.V(3) + m.V(1) + m.P('a')^-1) haveloop({[1] = m.V(2) * m.V(3), [2] = m.V(3), [3] = m.P(0)}) assert(m.match(m.P{[1] = m.V(2) * m.V(3), [2] = m.V(3), [3] = m.P(1)}^0, "abc") == 3) assert(m.match(m.P""^-3, "a") == 1) local function find (p, s) return m.match(basiclookfor(p), s) end local function badgrammar (g, exp) local err, msg = pcall(m.P, g) assert(not err) if exp then assert(find(exp, msg)) end end badgrammar({[1] = m.V(1)}, "rule '1'") badgrammar({[1] = m.V(2)}, "rule '2'") -- invalid non-terminal badgrammar({[1] = m.V"x"}, "rule 'x'") -- invalid non-terminal badgrammar({[1] = m.V{}}, "rule ") -- invalid non-terminal badgrammar({[1] = #m.P("a") * m.V(1)}, "rule '1'") badgrammar({[1] = -m.P("a") * m.V(1)}, "rule '1'") badgrammar({[1] = -1 * m.V(1)}, "rule '1'") badgrammar({[1] = 1 * m.V(2), [2] = m.V(2)}, "rule '2'") badgrammar({[1] = m.P(0), [2] = 1 * m.V(1)^0}, "loop in rule '2'") badgrammar({ m.V(2), m.V(3)^0, m.P"" }, "rule '2'") badgrammar({ m.V(2) * m.V(3)^0, m.V(3)^0, m.P"" }, "rule '1'") badgrammar({ #(m.V(1) * 'a') }, "rule '1'") badgrammar({ -(m.V(1) * 'a') }, "rule '1'") assert(m.match({'a' * -m.V(1)}, "aaa") == 2) assert(m.match({'a' * -m.V(1)}, "aaaa") == nil) -- simple tests for maximum sizes: local p = m.P"a" for i=1,14 do p = p * p end p = {} for i=1,100 do p[i] = m.P"a" end p = m.P(p) -- strange values for rule labels p = m.P{ "print", print = m.V(print), [print] = m.V(_G), [_G] = m.P"a", } assert(p:match("a")) -- initial rule g = {} for i = 1, 10 do g["i"..i] = "a" * m.V("i"..i+1) end g.i11 = m.P"" for i = 1, 10 do g[1] = "i"..i local p = m.P(g) assert(p:match("aaaaaaaaaaa") == 11 - i + 1) end print"+" -- tests for back references assert(not pcall(m.match, m.Cb('x'), '')) assert(not pcall(m.match, m.Cg(1, 'a') * m.Cb('b'), 'a')) p = m.Cg(m.C(1) * m.C(1), "k") * m.Ct(m.Cb("k")) t = p:match("ab") checkeq(t, {"a", "b"}) t = {} function foo (p) t[#t + 1] = p; return p .. "x" end p = m.Cg(m.C(2) / foo, "x") * m.Cb"x" * m.Cg(m.Cb('x') / foo, "x") * m.Cb"x" * m.Cg(m.Cb('x') / foo, "x") * m.Cb"x" * m.Cg(m.Cb('x') / foo, "x") * m.Cb"x" x = {p:match'ab'} checkeq(x, {'abx', 'abxx', 'abxxx', 'abxxxx'}) checkeq(t, {'ab', 'ab', 'abx', 'ab', 'abx', 'abxx', 'ab', 'abx', 'abxx', 'abxxx'}) -- tests for match-time captures local function id (s, i, ...) return true, ... end assert(m.Cmt(m.Cs((m.Cmt(m.S'abc' / { a = 'x', c = 'y' }, id) + m.R'09'^1 / string.char + m.P(1))^0), id):match"acb98+68c" == "xyb\98+\68y") p = m.P{'S', S = m.V'atom' * space + m.Cmt(m.Ct("(" * space * (m.Cmt(m.V'S'^1, id) + m.P(true)) * ")" * space), id), atom = m.Cmt(m.C(m.R("AZ", "az", "09")^1), id) } x = p:match"(a g () ((b) c) (d (e)))" checkeq(x, {'a', 'g', {}, {{'b'}, 'c'}, {'d', {'e'}}}); x = {(m.Cmt(1, id)^0):match(string.rep('a', 500))} assert(#x == 500) local function id(s, i, x) if x == 'a' then return i + 1, 1, 3, 7 else return nil, 2, 4, 6, 8 end end p = ((m.P(id) + m.Cmt(2, id) + m.Cmt(1, id)))^0 assert(table.concat{p:match('abababab')} == string.rep('137', 4)) local function ref (s, i, x) return m.match(x, s, i - x:len()) end assert(m.Cmt(m.P(1)^0, ref):match('alo') == 4) assert((m.P(1) * m.Cmt(m.P(1)^0, ref)):match('alo') == 4) assert(not (m.P(1) * m.Cmt(m.C(1)^0, ref)):match('alo')) ref = function (s,i,x) return i == tonumber(x) and i, 'xuxu' end assert(m.Cmt(1, ref):match'2') assert(not m.Cmt(1, ref):match'1') assert(m.Cmt(m.P(1)^0, ref):match'03') function ref (s, i, a, b) if a == b then return i, a:upper() end end p = m.Cmt(m.C(m.R"az"^1) * "-" * m.C(m.R"az"^1), ref) p = (any - p)^0 * p * any^0 * -1 assert(p:match'abbbc-bc ddaa' == 'BC') c = '[' * m.Cg(m.P'='^0, "init") * '[' * { m.Cmt(']' * m.C(m.P'='^0) * ']' * m.Cb("init"), function (_, _, s1, s2) return s1 == s2 end) + 1 * m.V(1) } / function () end assert(c:match'[==[]]====]]]]==]===[]' == 18) assert(c:match'[[]=]====]=]]]==]===[]' == 14) assert(not c:match'[[]=]====]=]=]==]===[]') ------------------------------------------------------------------- -- Tests for 're' module ------------------------------------------------------------------- local re = require "re" local match, compile = re.match, re.compile assert(match("a", ".") == 2) assert(match("a", "''") == 1) assert(match("", " ! . ") == 1) assert(not match("a", " ! . ")) assert(match("abcde", " ( . . ) * ") == 5) assert(match("abbcde", " [a-c] +") == 5) assert(match("0abbc1de", "'0' [a-c]+ '1'") == 7) assert(match("0zz1dda", "'0' [^a-c]+ 'a'") == 8) assert(match("abbc--", " [a-c] + +") == 5) assert(match("abbc--", " [ac-] +") == 2) assert(match("abbc--", " [-acb] + ") == 7) assert(not match("abbcde", " [b-z] + ")) assert(match("abb\"de", '"abb"["]"de"') == 7) assert(match("abceeef", "'ac' ? 'ab' * 'c' { 'e' * } / 'abceeef' ") == "eee") assert(match("abceeef", "'ac'? 'ab'* 'c' { 'f'+ } / 'abceeef' ") == 8) local t = {match("abceefe", "( ( & 'e' {} ) ? . ) * ")} checkeq(t, {4, 5, 7}) local t = {match("abceefe", "((&&'e' {})? .)*")} checkeq(t, {4, 5, 7}) local t = {match("abceefe", "( ( ! ! 'e' {} ) ? . ) *")} checkeq(t, {4, 5, 7}) local t = {match("abceefe", "(( & ! & ! 'e' {})? .)*")} checkeq(t, {4, 5, 7}) assert(match("cccx" , "'ab'? ('ccc' / ('cde' / 'cd'*)? / 'ccc') 'x'+") == 5) assert(match("cdx" , "'ab'? ('ccc' / ('cde' / 'cd'*)? / 'ccc') 'x'+") == 4) assert(match("abcdcdx" , "'ab'? ('ccc' / ('cde' / 'cd'*)? / 'ccc') 'x'+") == 8) assert(match("abc", "a <- (. a)?") == 4) b = "balanced <- '(' ([^()] / balanced)* ')'" assert(match("(abc)", b)) assert(match("(a(b)((c) (d)))", b)) assert(not match("(a(b ((c) (d)))", b)) b = compile[[ balanced <- "(" ([^()] / balanced)* ")" ]] assert(b == m.P(b)) assert(b:match"((((a))(b)))") local g = [[ S <- "0" B / "1" A / "" -- balanced strings A <- "0" S / "1" A A -- one more 0 B <- "1" S / "0" B B -- one more 1 ]] assert(match("00011011", g) == 9) local g = [[ S <- ("0" B / "1" A)* A <- "0" / "1" A A B <- "1" / "0" B B ]] assert(match("00011011", g) == 9) assert(match("000110110", g) == 9) assert(match("011110110", g) == 3) assert(match("000110010", g) == 1) s = "aaaaaaaaaaaaaaaaaaaaaaaa" assert(match(s, "'a'^3") == 4) assert(match(s, "'a'^0") == 1) assert(match(s, "'a'^+3") == s:len() + 1) assert(not match(s, "'a'^+30")) assert(match(s, "'a'^-30") == s:len() + 1) assert(match(s, "'a'^-5") == 6) for i = 1, s:len() do assert(match(s, string.format("'a'^+%d", i)) >= i + 1) assert(match(s, string.format("'a'^-%d", i)) <= i + 1) assert(match(s, string.format("'a'^%d", i)) == i + 1) end assert(match("01234567890123456789", "[0-9]^3+") == 19) assert(match("01234567890123456789", "({....}{...}) -> '%2%1'") == "4560123") t = match("0123456789", "{.}*->{}") checkeq(t, {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}) assert(match("012345", "( (..) -> '%0%0' ) -> {}")[1] == "0101") eqcharset(compile"[]]", "]") eqcharset(compile"[][]", m.S"[]") eqcharset(compile"[]-]", m.S"-]") eqcharset(compile"[-]", m.S"-") eqcharset(compile"[az-]", m.S"a-z") eqcharset(compile"[-az]", m.S"a-z") eqcharset(compile"[a-z]", m.R"az") eqcharset(compile"[]['\"]", m.S[[]['"]]) eqcharset(compile"[^]]", any - "]") eqcharset(compile"[^][]", any - m.S"[]") eqcharset(compile"[^]-]", any - m.S"-]") eqcharset(compile"[^]-]", any - m.S"-]") eqcharset(compile"[^-]", any - m.S"-") eqcharset(compile"[^az-]", any - m.S"a-z") eqcharset(compile"[^-az]", any - m.S"a-z") eqcharset(compile"[^a-z]", any - m.R"az") eqcharset(compile"[^]['\"]", any - m.S[[]['"]]) -- tests for comments in 're' e = compile[[ A <- B -- \t \n %nl .<> <- -> -- B <- 'x' --]] assert(e:match'xy' == 2) -- tests for 're' with pre-definitions defs = {digits = m.R"09", letters = m.R"az"} e = compile("%letters (%letters / %digits)*", defs) assert(e:match"x123" == 5) e = compile([[ S <- A+ A <- %letters+ B B <- %digits+ ]], defs) e = compile("{[0-9]+'.'?[0-9]*} -> sin", math) assert(e:match("2.34") == math.sin(2.34)) function eq (_, _, a, b) return a == b end c = re.compile([[ longstring <- '[' {:init: '='* :} '[' close close <- ']' =init ']' / . close ]]) assert(c:match'[==[]]===]]]]==]===[]' == 17) assert(c:match'[[]=]====]=]]]==]===[]' == 14) assert(not c:match'[[]=]====]=]=]==]===[]') c = re.compile" '[' {:init: '='* :} '[' (!(']' =init ']') .)* ']' =init ']' !. " assert(c:match'[==[]]===]]]]==]') assert(c:match'[[]=]====]=][]==]===[]]') assert(not c:match'[[]=]====]=]=]==]===[]') assert(re.find("hi alalo", "{:x:..:} =x") == 4) assert(re.find("hi alalo", "{:x:..:} =x", 4) == 4) assert(not re.find("hi alalo", "{:x:..:} =x", 5)) assert(re.find("hi alalo", "'al'", 5) == 6) assert(re.find("hi aloalolo", "{:x:..:} =x") == 8) assert(re.find("alo alohi x x", "{:word:%w+:}%W*(=word)!%w") == 11) assert(re.gsub("alo alo", "[abc]", "x") == "xlo xlo") assert(re.gsub("alo alo", "%w+", ".") == ". .") assert(re.gsub("hi, how are you", "[aeiou]", string.upper) == "hI, hOw ArE yOU") s = 'hi [[a comment[=]=] ending here]] and [=[another]]=]]' c = re.compile" '[' {:i: '='* :} '[' (!(']' =i ']') .)* ']' { =i } ']' " assert(re.gsub(s, c, "%2") == 'hi and =]') assert(re.gsub(s, c, "%0") == s) assert(re.gsub('[=[hi]=]', c, "%2") == '=') assert(re.find("", "!.") == 1) assert(re.find("alo", "!.") == 4) function addtag (s, i, t, tag) t.tag = tag; return i, t end c = re.compile([[ doc <- block !. block <- (start (block / { [^<]+ })* -> {} end?) => addtag start <- '<' {:tag: [a-z]+ :} '>' end <- '' ]], {addtag = addtag}) x = c:match[[ hihellobuttotheend]] checkeq(x, {tag='x', 'hi', {tag = 'b', 'hello'}, 'but', {'totheend'}}) assert(not pcall(compile, "x <- 'a' x <- 'b'")) assert(not pcall(compile, "'x' -> x", {x = 3})) -- tests for look-ahead captures x = {re.match("alo", "&(&{.}) !{'b'} {&(...)} &{..} {...} {!.}")} checkeq(x, {"", "alo", ""}) assert(re.match("aloalo", "{~ (((&'al' {.}) -> 'A%1' / (&%l {.}) -> '%1%1') / .)* ~}") == "AallooAalloo") -- bug in 0.9 (and older versions), due to captures in look-aheads x = re.compile[[ {~ (&(. ([a-z]* -> '*')) ([a-z]+ -> '+') ' '*)* ~} ]] assert(x:match"alo alo" == "+ +") -- valid capture in look-ahead (used inside the look-ahead itself) x = re.compile[[ S <- &({:two: .. :} . =two) {[a-z]+} / . S ]] assert(x:match("hello aloaLo aloalo xuxu") == "aloalo") p = re.compile[[ block <- ({:ident:' '*:} line ((=ident !' ' line) / &(=ident ' ') block)*) -> {} line <- {[^%nl]*} %nl ]] t= p:match[[ 1 1.1 1.2 1.2.1 2 2.1 ]] checkeq(t, {"1", {"1.1", "1.2", {"1.2.1", "", ident = " "}, ident = " "}, "2", {"2.1", ident = " "}, ident = ""}) -- nested grammars p = re.compile[[ s <- a b !. b <- ( x <- ('b' x)? ) a <- ( x <- 'a' x? ) ]] assert(p:match'aaabbb') assert(p:match'aaa') assert(not p:match'bbb') assert(not p:match'aaabbba') -- testing groups t = {re.match("abc", "{:S <- {:.:} {S} / '':}")} checkeq(t, {"a", "bc", "b", "c", "c", ""}) t = re.match("1234", "({:a:.:} {:b:.:} {:c:.{.}:}) -> {}") checkeq(t, {a="1", b="2", c="4"}) t = re.match("1234", "({:a:.:} {:b:{.}{.}:} {:c:{.}:}) -> {}") checkeq(t, {a="1", b="2", c="4"}) t = re.match("12345", "({:.:} {:b:{.}{.}:} {:{.}{.}:}) -> {}") checkeq(t, {"1", b="2", "4", "5"}) t = re.match("12345", "({:.:} {:{:b:{.}{.}:}:} {:{.}{.}:}) -> {}") checkeq(t, {"1", "23", "4", "5"}) t = re.match("12345", "({:.:} {{:b:{.}{.}:}} {:{.}{.}:}) -> {}") checkeq(t, {"1", "23", "4", "5"}) -- testing pre-defined names assert(os.setlocale("C") == "C") function eqlpeggsub (p1, p2) local s1 = cs2str(re.compile(p1)) local s2 = string.gsub(allchar, "[^" .. p2 .. "]", "") if s1 ~= s2 then print(s1,s2) end assert(s1 == s2) end eqlpeggsub("%w", "%w") eqlpeggsub("%a", "%a") eqlpeggsub("%l", "%l") eqlpeggsub("%u", "%u") eqlpeggsub("%p", "%p") eqlpeggsub("%d", "%d") eqlpeggsub("%x", "%x") eqlpeggsub("%s", "%s") eqlpeggsub("%W", "%W") eqlpeggsub("%A", "%A") eqlpeggsub("%L", "%L") eqlpeggsub("%U", "%U") eqlpeggsub("%P", "%P") eqlpeggsub("%D", "%D") eqlpeggsub("%X", "%X") eqlpeggsub("%S", "%S") eqlpeggsub("[%w]", "%w") eqlpeggsub("[_%w]", "_%w") eqlpeggsub("[^%w]", "%W") eqlpeggsub("[%W%S]", "%W%S") re.updatelocale() -- testing nested substitutions x string captures p = re.compile[[ text <- {~ item* ~} item <- macro / [^()] / '(' item* ')' arg <- ' '* {~ (!',' item)* ~} args <- '(' arg (',' arg)* ')' macro <- ('apply' args) -> '%1(%2)' / ('add' args) -> '%1 + %2' / ('mul' args) -> '%1 * %2' ]] assert(p:match"add(mul(a,b), apply(f,x))" == "a * b + f(x)") rev = re.compile[[ R <- (!.) -> '' / ({.} R) -> '%2%1']] assert(rev:match"0123456789" == "9876543210") print"OK" genometools-1.5.1/src/external/lua-5.1.5/000077500000000000000000000000001211610345200177025ustar00rootroot00000000000000genometools-1.5.1/src/external/lua-5.1.5/COPYRIGHT000066400000000000000000000027701211610345200212030ustar00rootroot00000000000000Lua License ----------- Lua is licensed under the terms of the MIT license reproduced below. This means that Lua is free software and can be used for both academic and commercial purposes at absolutely no cost. For details and rationale, see http://www.lua.org/license.html . =============================================================================== Copyright (C) 1994-2012 Lua.org, PUC-Rio. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. =============================================================================== (end of COPYRIGHT) genometools-1.5.1/src/external/lua-5.1.5/HISTORY000066400000000000000000000173431211610345200207760ustar00rootroot00000000000000HISTORY for Lua 5.1 * Changes from version 5.0 to 5.1 ------------------------------- Language: + new module system. + new semantics for control variables of fors. + new semantics for setn/getn. + new syntax/semantics for varargs. + new long strings and comments. + new `mod' operator (`%') + new length operator #t + metatables for all types API: + new functions: lua_createtable, lua_get(set)field, lua_push(to)integer. + user supplies memory allocator (lua_open becomes lua_newstate). + luaopen_* functions must be called through Lua. Implementation: + new configuration scheme via luaconf.h. + incremental garbage collection. + better handling of end-of-line in the lexer. + fully reentrant parser (new Lua function `load') + better support for 64-bit machines. + native loadlib support for Mac OS X. + standard distribution in only one library (lualib.a merged into lua.a) * Changes from version 4.0 to 5.0 ------------------------------- Language: + lexical scoping. + Lua coroutines. + standard libraries now packaged in tables. + tags replaced by metatables and tag methods replaced by metamethods, stored in metatables. + proper tail calls. + each function can have its own global table, which can be shared. + new __newindex metamethod, called when we insert a new key into a table. + new block comments: --[[ ... ]]. + new generic for. + new weak tables. + new boolean type. + new syntax "local function". + (f()) returns the first value returned by f. + {f()} fills a table with all values returned by f. + \n ignored in [[\n . + fixed and-or priorities. + more general syntax for function definition (e.g. function a.x.y:f()...end). + more general syntax for function calls (e.g. (print or write)(9)). + new functions (time/date, tmpfile, unpack, require, load*, etc.). API: + chunks are loaded by using lua_load; new luaL_loadfile and luaL_loadbuffer. + introduced lightweight userdata, a simple "void*" without a metatable. + new error handling protocol: the core no longer prints error messages; all errors are reported to the caller on the stack. + new lua_atpanic for host cleanup. + new, signal-safe, hook scheme. Implementation: + new license: MIT. + new, faster, register-based virtual machine. + support for external multithreading and coroutines. + new and consistent error message format. + the core no longer needs "stdio.h" for anything (except for a single use of sprintf to convert numbers to strings). + lua.c now runs the environment variable LUA_INIT, if present. It can be "@filename", to run a file, or the chunk itself. + support for user extensions in lua.c. sample implementation given for command line editing. + new dynamic loading library, active by default on several platforms. + safe garbage-collector metamethods. + precompiled bytecodes checked for integrity (secure binary dostring). + strings are fully aligned. + position capture in string.find. + read('*l') can read lines with embedded zeros. * Changes from version 3.2 to 4.0 ------------------------------- Language: + new "break" and "for" statements (both numerical and for tables). + uniform treatment of globals: globals are now stored in a Lua table. + improved error messages. + no more '$debug': full speed *and* full debug information. + new read form: read(N) for next N bytes. + general read patterns now deprecated. (still available with -DCOMPAT_READPATTERNS.) + all return values are passed as arguments for the last function (old semantics still available with -DLUA_COMPAT_ARGRET) + garbage collection tag methods for tables now deprecated. + there is now only one tag method for order. API: + New API: fully re-entrant, simpler, and more efficient. + New debug API. Implementation: + faster than ever: cleaner virtual machine and new hashing algorithm. + non-recursive garbage-collector algorithm. + reduced memory usage for programs with many strings. + improved treatment for memory allocation errors. + improved support for 16-bit machines (we hope). + code now compiles unmodified as both ANSI C and C++. + numbers in bases other than 10 are converted using strtoul. + new -f option in Lua to support #! scripts. + luac can now combine text and binaries. * Changes from version 3.1 to 3.2 ------------------------------- + redirected all output in Lua's core to _ERRORMESSAGE and _ALERT. + increased limit on the number of constants and globals per function (from 2^16 to 2^24). + debugging info (lua_debug and hooks) moved into lua_state and new API functions provided to get and set this info. + new debug lib gives full debugging access within Lua. + new table functions "foreachi", "sort", "tinsert", "tremove", "getn". + new io functions "flush", "seek". * Changes from version 3.0 to 3.1 ------------------------------- + NEW FEATURE: anonymous functions with closures (via "upvalues"). + new syntax: - local variables in chunks. - better scope control with DO block END. - constructors can now be also written: { record-part; list-part }. - more general syntax for function calls and lvalues, e.g.: f(x).y=1 o:f(x,y):g(z) f"string" is sugar for f("string") + strings may now contain arbitrary binary data (e.g., embedded zeros). + major code re-organization and clean-up; reduced module interdependecies. + no arbitrary limits on the total number of constants and globals. + support for multiple global contexts. + better syntax error messages. + new traversal functions "foreach" and "foreachvar". + the default for numbers is now double. changing it to use floats or longs is easy. + complete debug information stored in pre-compiled chunks. + sample interpreter now prompts user when run interactively, and also handles control-C interruptions gracefully. * Changes from version 2.5 to 3.0 ------------------------------- + NEW CONCEPT: "tag methods". Tag methods replace fallbacks as the meta-mechanism for extending the semantics of Lua. Whereas fallbacks had a global nature, tag methods work on objects having the same tag (e.g., groups of tables). Existing code that uses fallbacks should work without change. + new, general syntax for constructors {[exp] = exp, ... }. + support for handling variable number of arguments in functions (varargs). + support for conditional compilation ($if ... $else ... $end). + cleaner semantics in API simplifies host code. + better support for writing libraries (auxlib.h). + better type checking and error messages in the standard library. + luac can now also undump. * Changes from version 2.4 to 2.5 ------------------------------- + io and string libraries are now based on pattern matching; the old libraries are still available for compatibility + dofile and dostring can now return values (via return statement) + better support for 16- and 64-bit machines + expanded documentation, with more examples * Changes from version 2.2 to 2.4 ------------------------------- + external compiler creates portable binary files that can be loaded faster + interface for debugging and profiling + new "getglobal" fallback + new functions for handling references to Lua objects + new functions in standard lib + only one copy of each string is stored + expanded documentation, with more examples * Changes from version 2.1 to 2.2 ------------------------------- + functions now may be declared with any "lvalue" as a name + garbage collection of functions + support for pipes * Changes from version 1.1 to 2.1 ------------------------------- + object-oriented support + fallbacks + simplified syntax for tables + many internal improvements (end of HISTORY) genometools-1.5.1/src/external/lua-5.1.5/INSTALL000066400000000000000000000074341211610345200207430ustar00rootroot00000000000000INSTALL for Lua 5.1 * Building Lua ------------ Lua is built in the src directory, but the build process can be controlled from the top-level Makefile. Building Lua on Unix systems should be very easy. First do "make" and see if your platform is listed. If so, just do "make xxx", where xxx is your platform name. The platforms currently supported are: aix ansi bsd freebsd generic linux macosx mingw posix solaris If your platform is not listed, try the closest one or posix, generic, ansi, in this order. See below for customization instructions and for instructions on how to build with other Windows compilers. If you want to check that Lua has been built correctly, do "make test" after building Lua. Also, have a look at the example programs in test. * Installing Lua -------------- Once you have built Lua, you may want to install it in an official place in your system. In this case, do "make install". The official place and the way to install files are defined in Makefile. You must have the right permissions to install files. If you want to build and install Lua in one step, do "make xxx install", where xxx is your platform name. If you want to install Lua locally, then do "make local". This will create directories bin, include, lib, man, and install Lua there as follows: bin: lua luac include: lua.h luaconf.h lualib.h lauxlib.h lua.hpp lib: liblua.a man/man1: lua.1 luac.1 These are the only directories you need for development. There are man pages for lua and luac, in both nroff and html, and a reference manual in html in doc, some sample code in test, and some useful stuff in etc. You don't need these directories for development. If you want to install Lua locally, but in some other directory, do "make install INSTALL_TOP=xxx", where xxx is your chosen directory. See below for instructions for Windows and other systems. * Customization ------------- Three things can be customized by editing a file: - Where and how to install Lua -- edit Makefile. - How to build Lua -- edit src/Makefile. - Lua features -- edit src/luaconf.h. You don't actually need to edit the Makefiles because you may set the relevant variables when invoking make. On the other hand, if you need to select some Lua features, you'll need to edit src/luaconf.h. The edited file will be the one installed, and it will be used by any Lua clients that you build, to ensure consistency. We strongly recommend that you enable dynamic loading. This is done automatically for all platforms listed above that have this feature (and also Windows). See src/luaconf.h and also src/Makefile. * Building Lua on Windows and other systems ----------------------------------------- If you're not using the usual Unix tools, then the instructions for building Lua depend on the compiler you use. You'll need to create projects (or whatever your compiler uses) for building the library, the interpreter, and the compiler, as follows: library: lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c ltablib.c lstrlib.c loadlib.c linit.c interpreter: library, lua.c compiler: library, luac.c print.c If you use Visual Studio .NET, you can use etc/luavs.bat in its "Command Prompt". If all you want is to build the Lua interpreter, you may put all .c files in a single project, except for luac.c and print.c. Or just use etc/all.c. To use Lua as a library in your own programs, you'll need to know how to create and use libraries with your compiler. As mentioned above, you may edit luaconf.h to select some features before building Lua. (end of INSTALL) genometools-1.5.1/src/external/lua-5.1.5/Makefile000066400000000000000000000071571211610345200213540ustar00rootroot00000000000000# makefile for installing Lua # see INSTALL for installation instructions # see src/Makefile and src/luaconf.h for further customization # == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT ======================= # Your platform. See PLATS for possible values. PLAT= none # Where to install. The installation starts in the src and doc directories, # so take care if INSTALL_TOP is not an absolute path. INSTALL_TOP= /usr/local INSTALL_BIN= $(INSTALL_TOP)/bin INSTALL_INC= $(INSTALL_TOP)/include INSTALL_LIB= $(INSTALL_TOP)/lib INSTALL_MAN= $(INSTALL_TOP)/man/man1 # # You probably want to make INSTALL_LMOD and INSTALL_CMOD consistent with # LUA_ROOT, LUA_LDIR, and LUA_CDIR in luaconf.h (and also with etc/lua.pc). INSTALL_LMOD= $(INSTALL_TOP)/share/lua/$V INSTALL_CMOD= $(INSTALL_TOP)/lib/lua/$V # How to install. If your install program does not support "-p", then you # may have to run ranlib on the installed liblua.a (do "make ranlib"). INSTALL= install -p INSTALL_EXEC= $(INSTALL) -m 0755 INSTALL_DATA= $(INSTALL) -m 0644 # # If you don't have install you can use cp instead. # INSTALL= cp -p # INSTALL_EXEC= $(INSTALL) # INSTALL_DATA= $(INSTALL) # Utilities. MKDIR= mkdir -p RANLIB= ranlib # == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE ========= # Convenience platforms targets. PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris # What to install. TO_BIN= lua luac TO_INC= lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp TO_LIB= liblua.a TO_MAN= lua.1 luac.1 # Lua version and release. V= 5.1 R= 5.1.5 all: $(PLAT) $(PLATS) clean: cd src && $(MAKE) $@ test: dummy src/lua test/hello.lua install: dummy cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD) cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN) cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC) cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB) cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN) ranlib: cd src && cd $(INSTALL_LIB) && $(RANLIB) $(TO_LIB) local: $(MAKE) install INSTALL_TOP=.. none: @echo "Please do" @echo " make PLATFORM" @echo "where PLATFORM is one of these:" @echo " $(PLATS)" @echo "See INSTALL for complete instructions." # make may get confused with test/ and INSTALL in a case-insensitive OS dummy: # echo config parameters echo: @echo "" @echo "These are the parameters currently set in src/Makefile to build Lua $R:" @echo "" @cd src && $(MAKE) -s echo @echo "" @echo "These are the parameters currently set in Makefile to install Lua $R:" @echo "" @echo "PLAT = $(PLAT)" @echo "INSTALL_TOP = $(INSTALL_TOP)" @echo "INSTALL_BIN = $(INSTALL_BIN)" @echo "INSTALL_INC = $(INSTALL_INC)" @echo "INSTALL_LIB = $(INSTALL_LIB)" @echo "INSTALL_MAN = $(INSTALL_MAN)" @echo "INSTALL_LMOD = $(INSTALL_LMOD)" @echo "INSTALL_CMOD = $(INSTALL_CMOD)" @echo "INSTALL_EXEC = $(INSTALL_EXEC)" @echo "INSTALL_DATA = $(INSTALL_DATA)" @echo "" @echo "See also src/luaconf.h ." @echo "" # echo private config parameters pecho: @echo "V = $(V)" @echo "R = $(R)" @echo "TO_BIN = $(TO_BIN)" @echo "TO_INC = $(TO_INC)" @echo "TO_LIB = $(TO_LIB)" @echo "TO_MAN = $(TO_MAN)" # echo config parameters as Lua code # uncomment the last sed expression if you want nil instead of empty strings lecho: @echo "-- installation parameters for Lua $R" @echo "VERSION = '$V'" @echo "RELEASE = '$R'" @$(MAKE) echo | grep = | sed -e 's/= /= "/' -e 's/$$/"/' #-e 's/""/nil/' @echo "-- EOF" # list targets that do not create files (but not all makes understand .PHONY) .PHONY: all $(PLATS) clean test install local none dummy echo pecho lecho # (end of Makefile) genometools-1.5.1/src/external/lua-5.1.5/README000066400000000000000000000025421211610345200205650ustar00rootroot00000000000000README for Lua 5.1 See INSTALL for installation instructions. See HISTORY for a summary of changes since the last released version. * What is Lua? ------------ Lua is a powerful, light-weight programming language designed for extending applications. Lua is also frequently used as a general-purpose, stand-alone language. Lua is free software. For complete information, visit Lua's web site at http://www.lua.org/ . For an executive summary, see http://www.lua.org/about.html . Lua has been used in many different projects around the world. For a short list, see http://www.lua.org/uses.html . * Availability ------------ Lua is freely available for both academic and commercial purposes. See COPYRIGHT and http://www.lua.org/license.html for details. Lua can be downloaded at http://www.lua.org/download.html . * Installation ------------ Lua is implemented in pure ANSI C, and compiles unmodified in all known platforms that have an ANSI C compiler. In most Unix-like platforms, simply do "make" with a suitable target. See INSTALL for detailed instructions. * Origin ------ Lua is developed at Lua.org, a laboratory of the Department of Computer Science of PUC-Rio (the Pontifical Catholic University of Rio de Janeiro in Brazil). For more information about the authors, see http://www.lua.org/authors.html . (end of README) genometools-1.5.1/src/external/lua-5.1.5/doc/000077500000000000000000000000001211610345200204475ustar00rootroot00000000000000genometools-1.5.1/src/external/lua-5.1.5/doc/contents.html000066400000000000000000000537221211610345200232030ustar00rootroot00000000000000 Lua 5.1 Reference Manual - contents

Lua 5.1 Reference Manual

The reference manual is the official definition of the Lua language. For a complete introduction to Lua programming, see the book Programming in Lua.

This manual is also available as a book:

Lua 5.1 Reference Manual
by R. Ierusalimschy, L. H. de Figueiredo, W. Celes
Lua.org, August 2006
ISBN 85-903798-3-3

Buy a copy of this book and help to support the Lua project.

start · contents · index · other versions


Copyright © 2006–2012 Lua.org, PUC-Rio. Freely available under the terms of the Lua license.

Contents

Index

Lua functions

_G
_VERSION

assert
collectgarbage
dofile
error
getfenv
getmetatable
ipairs
load
loadfile
loadstring
module
next
pairs
pcall
print
rawequal
rawget
rawset
require
select
setfenv
setmetatable
tonumber
tostring
type
unpack
xpcall

coroutine.create
coroutine.resume
coroutine.running
coroutine.status
coroutine.wrap
coroutine.yield

debug.debug
debug.getfenv
debug.gethook
debug.getinfo
debug.getlocal
debug.getmetatable
debug.getregistry
debug.getupvalue
debug.setfenv
debug.sethook
debug.setlocal
debug.setmetatable
debug.setupvalue
debug.traceback

 

file:close
file:flush
file:lines
file:read
file:seek
file:setvbuf
file:write

io.close
io.flush
io.input
io.lines
io.open
io.output
io.popen
io.read
io.stderr
io.stdin
io.stdout
io.tmpfile
io.type
io.write

math.abs
math.acos
math.asin
math.atan
math.atan2
math.ceil
math.cos
math.cosh
math.deg
math.exp
math.floor
math.fmod
math.frexp
math.huge
math.ldexp
math.log
math.log10
math.max
math.min
math.modf
math.pi
math.pow
math.rad
math.random
math.randomseed
math.sin
math.sinh
math.sqrt
math.tan
math.tanh

os.clock
os.date
os.difftime
os.execute
os.exit
os.getenv
os.remove
os.rename
os.setlocale
os.time
os.tmpname

package.cpath
package.loaded
package.loaders
package.loadlib
package.path
package.preload
package.seeall

string.byte
string.char
string.dump
string.find
string.format
string.gmatch
string.gsub
string.len
string.lower
string.match
string.rep
string.reverse
string.sub
string.upper

table.concat
table.insert
table.maxn
table.remove
table.sort

C API

lua_Alloc
lua_CFunction
lua_Debug
lua_Hook
lua_Integer
lua_Number
lua_Reader
lua_State
lua_Writer

lua_atpanic
lua_call
lua_checkstack
lua_close
lua_concat
lua_cpcall
lua_createtable
lua_dump
lua_equal
lua_error
lua_gc
lua_getallocf
lua_getfenv
lua_getfield
lua_getglobal
lua_gethook
lua_gethookcount
lua_gethookmask
lua_getinfo
lua_getlocal
lua_getmetatable
lua_getstack
lua_gettable
lua_gettop
lua_getupvalue
lua_insert
lua_isboolean
lua_iscfunction
lua_isfunction
lua_islightuserdata
lua_isnil
lua_isnone
lua_isnoneornil
lua_isnumber
lua_isstring
lua_istable
lua_isthread
lua_isuserdata
lua_lessthan
lua_load
lua_newstate
lua_newtable
lua_newthread
lua_newuserdata
lua_next
lua_objlen
lua_pcall
lua_pop
lua_pushboolean
lua_pushcclosure
lua_pushcfunction
lua_pushfstring
lua_pushinteger
lua_pushlightuserdata
lua_pushliteral
lua_pushlstring
lua_pushnil
lua_pushnumber
lua_pushstring
lua_pushthread
lua_pushvalue
lua_pushvfstring
lua_rawequal
lua_rawget
lua_rawgeti
lua_rawset
lua_rawseti
lua_register
lua_remove
lua_replace
lua_resume
lua_setallocf
lua_setfenv
lua_setfield
lua_setglobal
lua_sethook
lua_setlocal
lua_setmetatable
lua_settable
lua_settop
lua_setupvalue
lua_status
lua_toboolean
lua_tocfunction
lua_tointeger
lua_tolstring
lua_tonumber
lua_topointer
lua_tostring
lua_tothread
lua_touserdata
lua_type
lua_typename
lua_upvalueindex
lua_xmove
lua_yield

auxiliary library

luaL_Buffer
luaL_Reg

luaL_addchar
luaL_addlstring
luaL_addsize
luaL_addstring
luaL_addvalue
luaL_argcheck
luaL_argerror
luaL_buffinit
luaL_callmeta
luaL_checkany
luaL_checkint
luaL_checkinteger
luaL_checklong
luaL_checklstring
luaL_checknumber
luaL_checkoption
luaL_checkstack
luaL_checkstring
luaL_checktype
luaL_checkudata
luaL_dofile
luaL_dostring
luaL_error
luaL_getmetafield
luaL_getmetatable
luaL_gsub
luaL_loadbuffer
luaL_loadfile
luaL_loadstring
luaL_newmetatable
luaL_newstate
luaL_openlibs
luaL_optint
luaL_optinteger
luaL_optlong
luaL_optlstring
luaL_optnumber
luaL_optstring
luaL_prepbuffer
luaL_pushresult
luaL_ref
luaL_register
luaL_typename
luaL_typerror
luaL_unref
luaL_where


Last update: Mon Feb 13 18:53:32 BRST 2012 genometools-1.5.1/src/external/lua-5.1.5/doc/cover.png000066400000000000000000000063511211610345200223000ustar00rootroot00000000000000PNG  IHDRE^N&gAMA a8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2).I IIDATxKpy3,xc$@IQ/ 9r|MG_t%/TT"ǩr$Ŋh*IR$$žgb"¿pt)B[c>+Hh Cfm8.E]0~;dlz9RD^S,dqҕt יOhRV}]绢-;d$s3.Z %R;J>ɢOV)a)e@q= RǢt!eiҸ0A8Re _PLh iz(ƥQz;z= "aLT\V#(h O)LclCk&!AJv쎓LA%ƶh 5mQ:[ioC2ƶE5xxՠ2wp>bfRV*/5˟jljH4Oؔca dJQZQ6St:m3 eZssI^:J$R$R\u&Y($$Ρ! LLL"B5ÆI*/m0J1=o?t[$_$>!^y8Ado?w &?rzY&C%>KGgů߼r4O ۱LL2Ϳ?!_]F'q>:|9+wo2г5Mk\4&s)=Fn0RS{#۳gޘ6+Ϯp.R0Ǔ5"lOs2xottH)ǽx֛owigP!XȐkڸ_ntѾgǯNpzO^62 CGy; rH!j_o6Gl͎>|x?sBmqyΠ9H}s5P(㜾L:[_tkh%)iCC"h}>ՇZSFM H$ou%]?K7Wcߜ"[!^ JJZ۷g~_COq|nkؑZy`D#(Ksk{R?ٿӹv)e>_<}ڛosefal\T3/>Q.ҚuX|Ç"DbddR MY:[}>bfگg?*}=6C}~Utj,YLI,U9i;#{|s-Oomç 叆92\B3CowC,w#G@8Ӈ* \AJ^|OX;.=S[ܹWr]<}SN3˓|mL`ZUl瓋~(bH< ڼvpڛBy%|uP| oa؁RH W|Uk/h.}SQ16@wib>$өӄ|E^;N0NB6{⾺j(ik]F)^2yfk5|<(l ]yh?o\4Df1]<ϸ:bOu2y^=FthPz츌dg\!Q ORbHDn=;o29HD3Wy4-B6i EY)wxDuv5>dqh),WRȆdrܚh 84XX;|7vlo#̈,`qtIME7#IENDB`genometools-1.5.1/src/external/lua-5.1.5/doc/logo.gif000066400000000000000000000102101211610345200220700ustar00rootroot00000000000000GIF87arvz}~ oooqqqvvvzzz !!%%""%%)),,55115511::::??BBDDBBEEJJHHLLMMPPTTQQWWYYZZ\\^^``ccggiijjoollqqvvttyy{{~~‰ËŎƐǒȕʙ˙̟ϡϢѥҩөԭ֯ױױصڻݼ,' H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIpִQ:(RJI;HGSSFAPȑA!rC+j D#:S Y:A mSNF1Rg.=2 @ ;5A)s.:)v 0`ϟlnp#rdDD#xЙ 643#LTFyPE+]s2Qk( ;gGΗPfh ( oNr,NiHG0^s& *92;!lX_mwDGU7 DX qIRw5EA&9MdMDHM(އhcYC$#!~8@I$~! $pP |@ c11abRI!``a㠁Y2qkD;Pv}6jǍ0}F^ipZDE ph2+ar&C }t.GEbC |,s69 P( y0DpVft%Af.KH?,nb9"|/GAH"} A#w:p;x5$sE-I";[Xwu85!KV}[A]$ܩepG pYC@ڄkn:m VXf2 BYzD3 ,.zs9PBD\ lf4y",Bscdqf(6J袋@\[$z@@B ˦=5ɢE8H Dk8F{R= ~}Ν `g-1,RBHe-Ms (!{QHm ` AcRf!F &D `Dvd!B07 ,^lأRPIh~ @r)`$ hC@AG"yX mB4i Y(D8& F+1Rh KIH+ @EJ I* #RWDBhD ,6o| m#DxBЪV@$Y B yC$B*$} ZE @asPJoQ| Η?BYeJB8JH,iuJ&9a!r(#D|,9|D'yF)_st$ @2^o'ЯCh>@dz,F!QHB6I( E9E;C\oh2B5+$T}mHCه:VGjM0$8!mhApfBɏ@ m:O<6t}p<1@"t$H "BZ-6lgq,:@|P aF #Q!a'Qi];$}^V_xpmѳq8K`m[@(m`q! B /[mrg&^&qt$ 6g)l ];FpHA(]r Ƃb`QAFkq72-KMΧh xw=XvA@@m‡ƺXZO/ ?xă(+D,d9}Ev XԽIe 0]4y}'W!)] B|Fq D ͧ?s!#F3_ӣ738 N>@8lH q[ JƱ7(hE6,sI7)F0Vp`[%W25fc"8t.Aa!D@i_qeG#UT4PFxE vDa~ R t<"(WAl-[uf$P%~w9W@xwHv{9whV65P\ "ufoDd2g>6-c0(Y< 1"1O*p)ЊPj*25 0% (@BanS{ DN/%Jҍ  (3 b1$X]RP9Z*)~N-#r]NhGpl с^@FY4}b/M !0U|Me=dE$>pM ~rJ-&&@.\ 87{3`%0ds+1Hh22PK3 W0uE)*U))+ @50FtEOKHP@}^ jH0}U`10 k咹EcVUK$A_z`TEΑUɕ4A֓<RrfPGBza"gd62(ayImF"qc("gAyP0i@eESҘYO9b4"}"x@'Pupj`22,*&qٕf%E+]B%f0YJ3f?1,/p?;}XV5Q%H1Z4JmpOP7d=O y;!ӑpeq!F PP-eKfw.lzp`- j`o@EPOv*RzUP uS@Ĩ!IO*PEAO` p\ P 1{:LSPU@QzRʪ#4PG`Nڬ;genometools-1.5.1/src/external/lua-5.1.5/doc/lua.1000066400000000000000000000070431211610345200213160ustar00rootroot00000000000000.\" $Id: lua.man,v 1.11 2006/01/06 16:03:34 lhf Exp $ .TH LUA 1 "$Date: 2006/01/06 16:03:34 $" .SH NAME lua \- Lua interpreter .SH SYNOPSIS .B lua [ .I options ] [ .I script [ .I args ] ] .SH DESCRIPTION .B lua is the stand-alone Lua interpreter. It loads and executes Lua programs, either in textual source form or in precompiled binary form. (Precompiled binaries are output by .BR luac , the Lua compiler.) .B lua can be used as a batch interpreter and also interactively. .LP The given .I options (see below) are executed and then the Lua program in file .I script is loaded and executed. The given .I args are available to .I script as strings in a global table named .BR arg . If these arguments contain spaces or other characters special to the shell, then they should be quoted (but note that the quotes will be removed by the shell). The arguments in .B arg start at 0, which contains the string .RI ' script '. The index of the last argument is stored in .BR arg.n . The arguments given in the command line before .IR script , including the name of the interpreter, are available in negative indices in .BR arg . .LP At the very start, before even handling the command line, .B lua executes the contents of the environment variable .BR LUA_INIT , if it is defined. If the value of .B LUA_INIT is of the form .RI '@ filename ', then .I filename is executed. Otherwise, the string is assumed to be a Lua statement and is executed. .LP Options start with .B '\-' and are described below. You can use .B "'\--'" to signal the end of options. .LP If no arguments are given, then .B "\-v \-i" is assumed when the standard input is a terminal; otherwise, .B "\-" is assumed. .LP In interactive mode, .B lua prompts the user, reads lines from the standard input, and executes them as they are read. If a line does not contain a complete statement, then a secondary prompt is displayed and lines are read until a complete statement is formed or a syntax error is found. So, one way to interrupt the reading of an incomplete statement is to force a syntax error: adding a .B ';' in the middle of a statement is a sure way of forcing a syntax error (except inside multiline strings and comments; these must be closed explicitly). If a line starts with .BR '=' , then .B lua displays the values of all the expressions in the remainder of the line. The expressions must be separated by commas. The primary prompt is the value of the global variable .BR _PROMPT , if this value is a string; otherwise, the default prompt is used. Similarly, the secondary prompt is the value of the global variable .BR _PROMPT2 . So, to change the prompts, set the corresponding variable to a string of your choice. You can do that after calling the interpreter or on the command line (but in this case you have to be careful with quotes if the prompt string contains a space; otherwise you may confuse the shell.) The default prompts are "> " and ">> ". .SH OPTIONS .TP .B \- load and execute the standard input as a file, that is, not interactively, even when the standard input is a terminal. .TP .BI \-e " stat" execute statement .IR stat . You need to quote .I stat if it contains spaces, quotes, or other characters special to the shell. .TP .B \-i enter interactive mode after .I script is executed. .TP .BI \-l " name" call .BI require(' name ') before executing .IR script . Typically used to load libraries. .TP .B \-v show version information. .SH "SEE ALSO" .BR luac (1) .br http://www.lua.org/ .SH DIAGNOSTICS Error messages should be self explanatory. .SH AUTHORS R. Ierusalimschy, L. H. de Figueiredo, and W. Celes .\" EOF genometools-1.5.1/src/external/lua-5.1.5/doc/lua.css000066400000000000000000000024321211610345200217430ustar00rootroot00000000000000body { color: #000000 ; background-color: #FFFFFF ; font-family: Helvetica, Arial, sans-serif ; text-align: justify ; margin-right: 30px ; margin-left: 30px ; } h1, h2, h3, h4 { font-family: Verdana, Geneva, sans-serif ; font-weight: normal ; font-style: italic ; } h2 { padding-top: 0.4em ; padding-bottom: 0.4em ; padding-left: 30px ; padding-right: 30px ; margin-left: -30px ; background-color: #E0E0FF ; } h3 { padding-left: 0.5em ; border-left: solid #E0E0FF 1em ; } table h3 { padding-left: 0px ; border-left: none ; } a:link { color: #000080 ; background-color: inherit ; text-decoration: none ; } a:visited { background-color: inherit ; text-decoration: none ; } a:link:hover, a:visited:hover { color: #000080 ; background-color: #E0E0FF ; } a:link:active, a:visited:active { color: #FF0000 ; } hr { border: 0 ; height: 1px ; color: #a0a0a0 ; background-color: #a0a0a0 ; } :target { background-color: #F8F8F8 ; padding: 8px ; border: solid #a0a0a0 2px ; } .footer { color: gray ; font-size: small ; } input[type=text] { border: solid #a0a0a0 2px ; border-radius: 2em ; -moz-border-radius: 2em ; background-image: url('images/search.png') ; background-repeat: no-repeat; background-position: 4px center ; padding-left: 20px ; height: 2em ; } genometools-1.5.1/src/external/lua-5.1.5/doc/lua.html000066400000000000000000000075571211610345200221340ustar00rootroot00000000000000 LUA man page

NAME

lua - Lua interpreter

SYNOPSIS

lua [ options ] [ script [ args ] ]

DESCRIPTION

lua is the stand-alone Lua interpreter. It loads and executes Lua programs, either in textual source form or in precompiled binary form. (Precompiled binaries are output by luac, the Lua compiler.) lua can be used as a batch interpreter and also interactively.

The given options (see below) are executed and then the Lua program in file script is loaded and executed. The given args are available to script as strings in a global table named arg. If these arguments contain spaces or other characters special to the shell, then they should be quoted (but note that the quotes will be removed by the shell). The arguments in arg start at 0, which contains the string 'script'. The index of the last argument is stored in arg.n. The arguments given in the command line before script, including the name of the interpreter, are available in negative indices in arg.

At the very start, before even handling the command line, lua executes the contents of the environment variable LUA_INIT, if it is defined. If the value of LUA_INIT is of the form '@filename', then filename is executed. Otherwise, the string is assumed to be a Lua statement and is executed.

Options start with '-' and are described below. You can use '--' to signal the end of options.

If no arguments are given, then "-v -i" is assumed when the standard input is a terminal; otherwise, "-" is assumed.

In interactive mode, lua prompts the user, reads lines from the standard input, and executes them as they are read. If a line does not contain a complete statement, then a secondary prompt is displayed and lines are read until a complete statement is formed or a syntax error is found. So, one way to interrupt the reading of an incomplete statement is to force a syntax error: adding a ';' in the middle of a statement is a sure way of forcing a syntax error (except inside multiline strings and comments; these must be closed explicitly). If a line starts with '=', then lua displays the values of all the expressions in the remainder of the line. The expressions must be separated by commas. The primary prompt is the value of the global variable _PROMPT, if this value is a string; otherwise, the default prompt is used. Similarly, the secondary prompt is the value of the global variable _PROMPT2. So, to change the prompts, set the corresponding variable to a string of your choice. You can do that after calling the interpreter or on the command line (but in this case you have to be careful with quotes if the prompt string contains a space; otherwise you may confuse the shell.) The default prompts are "> " and ">> ".

OPTIONS

- load and execute the standard input as a file, that is, not interactively, even when the standard input is a terminal.

-e stat execute statement stat. You need to quote stat if it contains spaces, quotes, or other characters special to the shell.

-i enter interactive mode after script is executed.

-l name call require('name') before executing script. Typically used to load libraries.

-v show version information.

SEE ALSO

luac(1)
http://www.lua.org/

DIAGNOSTICS

Error messages should be self explanatory.

AUTHORS

R. Ierusalimschy, L. H. de Figueiredo, and W. Celes genometools-1.5.1/src/external/lua-5.1.5/doc/luac.1000066400000000000000000000070411211610345200214570ustar00rootroot00000000000000.\" $Id: luac.man,v 1.28 2006/01/06 16:03:34 lhf Exp $ .TH LUAC 1 "$Date: 2006/01/06 16:03:34 $" .SH NAME luac \- Lua compiler .SH SYNOPSIS .B luac [ .I options ] [ .I filenames ] .SH DESCRIPTION .B luac is the Lua compiler. It translates programs written in the Lua programming language into binary files that can be later loaded and executed. .LP The main advantages of precompiling chunks are: faster loading, protecting source code from accidental user changes, and off-line syntax checking. .LP Pre-compiling does not imply faster execution because in Lua chunks are always compiled into bytecodes before being executed. .B luac simply allows those bytecodes to be saved in a file for later execution. .LP Pre-compiled chunks are not necessarily smaller than the corresponding source. The main goal in pre-compiling is faster loading. .LP The binary files created by .B luac are portable only among architectures with the same word size and byte order. .LP .B luac produces a single output file containing the bytecodes for all source files given. By default, the output file is named .BR luac.out , but you can change this with the .B \-o option. .LP In the command line, you can mix text files containing Lua source and binary files containing precompiled chunks. This is useful to combine several precompiled chunks, even from different (but compatible) platforms, into a single precompiled chunk. .LP You can use .B "'\-'" to indicate the standard input as a source file and .B "'\--'" to signal the end of options (that is, all remaining arguments will be treated as files even if they start with .BR "'\-'" ). .LP The internal format of the binary files produced by .B luac is likely to change when a new version of Lua is released. So, save the source files of all Lua programs that you precompile. .LP .SH OPTIONS Options must be separate. .TP .B \-l produce a listing of the compiled bytecode for Lua's virtual machine. Listing bytecodes is useful to learn about Lua's virtual machine. If no files are given, then .B luac loads .B luac.out and lists its contents. .TP .BI \-o " file" output to .IR file , instead of the default .BR luac.out . (You can use .B "'\-'" for standard output, but not on platforms that open standard output in text mode.) The output file may be a source file because all files are loaded before the output file is written. Be careful not to overwrite precious files. .TP .B \-p load files but do not generate any output file. Used mainly for syntax checking and for testing precompiled chunks: corrupted files will probably generate errors when loaded. Lua always performs a thorough integrity test on precompiled chunks. Bytecode that passes this test is completely safe, in the sense that it will not break the interpreter. However, there is no guarantee that such code does anything sensible. (None can be given, because the halting problem is unsolvable.) If no files are given, then .B luac loads .B luac.out and tests its contents. No messages are displayed if the file passes the integrity test. .TP .B \-s strip debug information before writing the output file. This saves some space in very large chunks, but if errors occur when running a stripped chunk, then the error messages may not contain the full information they usually do. For instance, line numbers and names of local variables are lost. .TP .B \-v show version information. .SH FILES .TP 15 .B luac.out default output file .SH "SEE ALSO" .BR lua (1) .br http://www.lua.org/ .SH DIAGNOSTICS Error messages should be self explanatory. .SH AUTHORS L. H. de Figueiredo, R. Ierusalimschy and W. Celes .\" EOF genometools-1.5.1/src/external/lua-5.1.5/doc/luac.html000066400000000000000000000074701211610345200222710ustar00rootroot00000000000000 LUAC man page

NAME

luac - Lua compiler

SYNOPSIS

luac [ options ] [ filenames ]

DESCRIPTION

luac is the Lua compiler. It translates programs written in the Lua programming language into binary files that can be later loaded and executed.

The main advantages of precompiling chunks are: faster loading, protecting source code from accidental user changes, and off-line syntax checking.

Precompiling does not imply faster execution because in Lua chunks are always compiled into bytecodes before being executed. luac simply allows those bytecodes to be saved in a file for later execution.

Precompiled chunks are not necessarily smaller than the corresponding source. The main goal in precompiling is faster loading.

The binary files created by luac are portable only among architectures with the same word size and byte order.

luac produces a single output file containing the bytecodes for all source files given. By default, the output file is named luac.out, but you can change this with the -o option.

In the command line, you can mix text files containing Lua source and binary files containing precompiled chunks. This is useful because several precompiled chunks, even from different (but compatible) platforms, can be combined into a single precompiled chunk.

You can use '-' to indicate the standard input as a source file and '--' to signal the end of options (that is, all remaining arguments will be treated as files even if they start with '-').

The internal format of the binary files produced by luac is likely to change when a new version of Lua is released. So, save the source files of all Lua programs that you precompile.

OPTIONS

Options must be separate.

-l produce a listing of the compiled bytecode for Lua's virtual machine. Listing bytecodes is useful to learn about Lua's virtual machine. If no files are given, then luac loads luac.out and lists its contents.

-o file output to file, instead of the default luac.out. (You can use '-' for standard output, but not on platforms that open standard output in text mode.) The output file may be a source file because all files are loaded before the output file is written. Be careful not to overwrite precious files.

-p load files but do not generate any output file. Used mainly for syntax checking and for testing precompiled chunks: corrupted files will probably generate errors when loaded. Lua always performs a thorough integrity test on precompiled chunks. Bytecode that passes this test is completely safe, in the sense that it will not break the interpreter. However, there is no guarantee that such code does anything sensible. (None can be given, because the halting problem is unsolvable.) If no files are given, then luac loads luac.out and tests its contents. No messages are displayed if the file passes the integrity test.

-s strip debug information before writing the output file. This saves some space in very large chunks, but if errors occur when running a stripped chunk, then the error messages may not contain the full information they usually do. For instance, line numbers and names of local variables are lost.

-v show version information.

FILES

luac.out default output file

SEE ALSO

lua(1)
http://www.lua.org/

DIAGNOSTICS

Error messages should be self explanatory.

AUTHORS

L. H. de Figueiredo, R. Ierusalimschy and W. Celes genometools-1.5.1/src/external/lua-5.1.5/doc/manual.css000066400000000000000000000005251211610345200224400ustar00rootroot00000000000000h3 code { font-family: inherit ; font-size: inherit ; } pre, code { font-size: 12pt ; } span.apii { float: right ; font-family: inherit ; font-style: normal ; font-size: small ; color: gray ; } p+h1, ul+h1 { padding-top: 0.4em ; padding-bottom: 0.4em ; padding-left: 30px ; margin-left: -30px ; background-color: #E0E0FF ; } genometools-1.5.1/src/external/lua-5.1.5/doc/manual.html000066400000000000000000007614311211610345200226260ustar00rootroot00000000000000 Lua 5.1 Reference Manual

Lua 5.1 Reference Manual

by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes

Copyright © 2006–2012 Lua.org, PUC-Rio. Freely available under the terms of the Lua license.


contents · index · other versions

1 - Introduction

Lua is an extension programming language designed to support general procedural programming with data description facilities. It also offers good support for object-oriented programming, functional programming, and data-driven programming. Lua is intended to be used as a powerful, light-weight scripting language for any program that needs one. Lua is implemented as a library, written in clean C (that is, in the common subset of ANSI C and C++).

Being an extension language, Lua has no notion of a "main" program: it only works embedded in a host client, called the embedding program or simply the host. This host program can invoke functions to execute a piece of Lua code, can write and read Lua variables, and can register C functions to be called by Lua code. Through the use of C functions, Lua can be augmented to cope with a wide range of different domains, thus creating customized programming languages sharing a syntactical framework. The Lua distribution includes a sample host program called lua, which uses the Lua library to offer a complete, stand-alone Lua interpreter.

Lua is free software, and is provided as usual with no guarantees, as stated in its license. The implementation described in this manual is available at Lua's official web site, www.lua.org.

Like any other reference manual, this document is dry in places. For a discussion of the decisions behind the design of Lua, see the technical papers available at Lua's web site. For a detailed introduction to programming in Lua, see Roberto's book, Programming in Lua (Second Edition).

2 - The Language

This section describes the lexis, the syntax, and the semantics of Lua. In other words, this section describes which tokens are valid, how they can be combined, and what their combinations mean.

The language constructs will be explained using the usual extended BNF notation, in which {a} means 0 or more a's, and [a] means an optional a. Non-terminals are shown like non-terminal, keywords are shown like kword, and other terminal symbols are shown like `=´. The complete syntax of Lua can be found in §8 at the end of this manual.

2.1 - Lexical Conventions

Names (also called identifiers) in Lua can be any string of letters, digits, and underscores, not beginning with a digit. This coincides with the definition of names in most languages. (The definition of letter depends on the current locale: any character considered alphabetic by the current locale can be used in an identifier.) Identifiers are used to name variables and table fields.

The following keywords are reserved and cannot be used as names:

     and       break     do        else      elseif
     end       false     for       function  if
     in        local     nil       not       or
     repeat    return    then      true      until     while

Lua is a case-sensitive language: and is a reserved word, but And and AND are two different, valid names. As a convention, names starting with an underscore followed by uppercase letters (such as _VERSION) are reserved for internal global variables used by Lua.

The following strings denote other tokens:

     +     -     *     /     %     ^     #
     ==    ~=    <=    >=    <     >     =
     (     )     {     }     [     ]
     ;     :     ,     .     ..    ...

Literal strings can be delimited by matching single or double quotes, and can contain the following C-like escape sequences: '\a' (bell), '\b' (backspace), '\f' (form feed), '\n' (newline), '\r' (carriage return), '\t' (horizontal tab), '\v' (vertical tab), '\\' (backslash), '\"' (quotation mark [double quote]), and '\'' (apostrophe [single quote]). Moreover, a backslash followed by a real newline results in a newline in the string. A character in a string can also be specified by its numerical value using the escape sequence \ddd, where ddd is a sequence of up to three decimal digits. (Note that if a numerical escape is to be followed by a digit, it must be expressed using exactly three digits.) Strings in Lua can contain any 8-bit value, including embedded zeros, which can be specified as '\0'.

Literal strings can also be defined using a long format enclosed by long brackets. We define an opening long bracket of level n as an opening square bracket followed by n equal signs followed by another opening square bracket. So, an opening long bracket of level 0 is written as [[, an opening long bracket of level 1 is written as [=[, and so on. A closing long bracket is defined similarly; for instance, a closing long bracket of level 4 is written as ]====]. A long string starts with an opening long bracket of any level and ends at the first closing long bracket of the same level. Literals in this bracketed form can run for several lines, do not interpret any escape sequences, and ignore long brackets of any other level. They can contain anything except a closing bracket of the proper level.

For convenience, when the opening long bracket is immediately followed by a newline, the newline is not included in the string. As an example, in a system using ASCII (in which 'a' is coded as 97, newline is coded as 10, and '1' is coded as 49), the five literal strings below denote the same string:

     a = 'alo\n123"'
     a = "alo\n123\""
     a = '\97lo\10\04923"'
     a = [[alo
     123"]]
     a = [==[
     alo
     123"]==]

A numerical constant can be written with an optional decimal part and an optional decimal exponent. Lua also accepts integer hexadecimal constants, by prefixing them with 0x. Examples of valid numerical constants are

     3   3.0   3.1416   314.16e-2   0.31416E1   0xff   0x56

A comment starts with a double hyphen (--) anywhere outside a string. If the text immediately after -- is not an opening long bracket, the comment is a short comment, which runs until the end of the line. Otherwise, it is a long comment, which runs until the corresponding closing long bracket. Long comments are frequently used to disable code temporarily.

2.2 - Values and Types

Lua is a dynamically typed language. This means that variables do not have types; only values do. There are no type definitions in the language. All values carry their own type.

All values in Lua are first-class values. This means that all values can be stored in variables, passed as arguments to other functions, and returned as results.

There are eight basic types in Lua: nil, boolean, number, string, function, userdata, thread, and table. Nil is the type of the value nil, whose main property is to be different from any other value; it usually represents the absence of a useful value. Boolean is the type of the values false and true. Both nil and false make a condition false; any other value makes it true. Number represents real (double-precision floating-point) numbers. (It is easy to build Lua interpreters that use other internal representations for numbers, such as single-precision float or long integers; see file luaconf.h.) String represents arrays of characters. Lua is 8-bit clean: strings can contain any 8-bit character, including embedded zeros ('\0') (see §2.1).

Lua can call (and manipulate) functions written in Lua and functions written in C (see §2.5.8).

The type userdata is provided to allow arbitrary C data to be stored in Lua variables. This type corresponds to a block of raw memory and has no pre-defined operations in Lua, except assignment and identity test. However, by using metatables, the programmer can define operations for userdata values (see §2.8). Userdata values cannot be created or modified in Lua, only through the C API. This guarantees the integrity of data owned by the host program.

The type thread represents independent threads of execution and it is used to implement coroutines (see §2.11). Do not confuse Lua threads with operating-system threads. Lua supports coroutines on all systems, even those that do not support threads.

The type table implements associative arrays, that is, arrays that can be indexed not only with numbers, but with any value (except nil). Tables can be heterogeneous; that is, they can contain values of all types (except nil). Tables are the sole data structuring mechanism in Lua; they can be used to represent ordinary arrays, symbol tables, sets, records, graphs, trees, etc. To represent records, Lua uses the field name as an index. The language supports this representation by providing a.name as syntactic sugar for a["name"]. There are several convenient ways to create tables in Lua (see §2.5.7).

Like indices, the value of a table field can be of any type (except nil). In particular, because functions are first-class values, table fields can contain functions. Thus tables can also carry methods (see §2.5.9).

Tables, functions, threads, and (full) userdata values are objects: variables do not actually contain these values, only references to them. Assignment, parameter passing, and function returns always manipulate references to such values; these operations do not imply any kind of copy.

The library function type returns a string describing the type of a given value.

2.2.1 - Coercion

Lua provides automatic conversion between string and number values at run time. Any arithmetic operation applied to a string tries to convert this string to a number, following the usual conversion rules. Conversely, whenever a number is used where a string is expected, the number is converted to a string, in a reasonable format. For complete control over how numbers are converted to strings, use the format function from the string library (see string.format).

2.3 - Variables

Variables are places that store values. There are three kinds of variables in Lua: global variables, local variables, and table fields.

A single name can denote a global variable or a local variable (or a function's formal parameter, which is a particular kind of local variable):

	var ::= Name

Name denotes identifiers, as defined in §2.1.

Any variable is assumed to be global unless explicitly declared as a local (see §2.4.7). Local variables are lexically scoped: local variables can be freely accessed by functions defined inside their scope (see §2.6).

Before the first assignment to a variable, its value is nil.

Square brackets are used to index a table:

	var ::= prefixexp `[´ exp `]´

The meaning of accesses to global variables and table fields can be changed via metatables. An access to an indexed variable t[i] is equivalent to a call gettable_event(t,i). (See §2.8 for a complete description of the gettable_event function. This function is not defined or callable in Lua. We use it here only for explanatory purposes.)

The syntax var.Name is just syntactic sugar for var["Name"]:

	var ::= prefixexp `.´ Name

All global variables live as fields in ordinary Lua tables, called environment tables or simply environments (see §2.9). Each function has its own reference to an environment, so that all global variables in this function will refer to this environment table. When a function is created, it inherits the environment from the function that created it. To get the environment table of a Lua function, you call getfenv. To replace it, you call setfenv. (You can only manipulate the environment of C functions through the debug library; (see §5.9).)

An access to a global variable x is equivalent to _env.x, which in turn is equivalent to

     gettable_event(_env, "x")

where _env is the environment of the running function. (See §2.8 for a complete description of the gettable_event function. This function is not defined or callable in Lua. Similarly, the _env variable is not defined in Lua. We use them here only for explanatory purposes.)

2.4 - Statements

Lua supports an almost conventional set of statements, similar to those in Pascal or C. This set includes assignments, control structures, function calls, and variable declarations.

2.4.1 - Chunks

The unit of execution of Lua is called a chunk. A chunk is simply a sequence of statements, which are executed sequentially. Each statement can be optionally followed by a semicolon:

	chunk ::= {stat [`;´]}

There are no empty statements and thus ';;' is not legal.

Lua handles a chunk as the body of an anonymous function with a variable number of arguments (see §2.5.9). As such, chunks can define local variables, receive arguments, and return values.

A chunk can be stored in a file or in a string inside the host program. To execute a chunk, Lua first pre-compiles the chunk into instructions for a virtual machine, and then it executes the compiled code with an interpreter for the virtual machine.

Chunks can also be pre-compiled into binary form; see program luac for details. Programs in source and compiled forms are interchangeable; Lua automatically detects the file type and acts accordingly.

2.4.2 - Blocks

A block is a list of statements; syntactically, a block is the same as a chunk:

	block ::= chunk

A block can be explicitly delimited to produce a single statement:

	stat ::= do block end

Explicit blocks are useful to control the scope of variable declarations. Explicit blocks are also sometimes used to add a return or break statement in the middle of another block (see §2.4.4).

2.4.3 - Assignment

Lua allows multiple assignments. Therefore, the syntax for assignment defines a list of variables on the left side and a list of expressions on the right side. The elements in both lists are separated by commas:

	stat ::= varlist `=´ explist
	varlist ::= var {`,´ var}
	explist ::= exp {`,´ exp}

Expressions are discussed in §2.5.

Before the assignment, the list of values is adjusted to the length of the list of variables. If there are more values than needed, the excess values are thrown away. If there are fewer values than needed, the list is extended with as many nil's as needed. If the list of expressions ends with a function call, then all values returned by that call enter the list of values, before the adjustment (except when the call is enclosed in parentheses; see §2.5).

The assignment statement first evaluates all its expressions and only then are the assignments performed. Thus the code

     i = 3
     i, a[i] = i+1, 20

sets a[3] to 20, without affecting a[4] because the i in a[i] is evaluated (to 3) before it is assigned 4. Similarly, the line

     x, y = y, x

exchanges the values of x and y, and

     x, y, z = y, z, x

cyclically permutes the values of x, y, and z.

The meaning of assignments to global variables and table fields can be changed via metatables. An assignment to an indexed variable t[i] = val is equivalent to settable_event(t,i,val). (See §2.8 for a complete description of the settable_event function. This function is not defined or callable in Lua. We use it here only for explanatory purposes.)

An assignment to a global variable x = val is equivalent to the assignment _env.x = val, which in turn is equivalent to

     settable_event(_env, "x", val)

where _env is the environment of the running function. (The _env variable is not defined in Lua. We use it here only for explanatory purposes.)

2.4.4 - Control Structures

The control structures if, while, and repeat have the usual meaning and familiar syntax:

	stat ::= while exp do block end
	stat ::= repeat block until exp
	stat ::= if exp then block {elseif exp then block} [else block] end

Lua also has a for statement, in two flavors (see §2.4.5).

The condition expression of a control structure can return any value. Both false and nil are considered false. All values different from nil and false are considered true (in particular, the number 0 and the empty string are also true).

In the repeatuntil loop, the inner block does not end at the until keyword, but only after the condition. So, the condition can refer to local variables declared inside the loop block.

The return statement is used to return values from a function or a chunk (which is just a function). Functions and chunks can return more than one value, and so the syntax for the return statement is

	stat ::= return [explist]

The break statement is used to terminate the execution of a while, repeat, or for loop, skipping to the next statement after the loop:

	stat ::= break

A break ends the innermost enclosing loop.

The return and break statements can only be written as the last statement of a block. If it is really necessary to return or break in the middle of a block, then an explicit inner block can be used, as in the idioms do return end and do break end, because now return and break are the last statements in their (inner) blocks.

2.4.5 - For Statement

The for statement has two forms: one numeric and one generic.

The numeric for loop repeats a block of code while a control variable runs through an arithmetic progression. It has the following syntax:

	stat ::= for Name `=´ exp `,´ exp [`,´ exp] do block end

The block is repeated for name starting at the value of the first exp, until it passes the second exp by steps of the third exp. More precisely, a for statement like

     for v = e1, e2, e3 do block end

is equivalent to the code:

     do
       local var, limit, step = tonumber(e1), tonumber(e2), tonumber(e3)
       if not (var and limit and step) then error() end
       while (step > 0 and var <= limit) or (step <= 0 and var >= limit) do
         local v = var
         block
         var = var + step
       end
     end

Note the following:

  • All three control expressions are evaluated only once, before the loop starts. They must all result in numbers.
  • var, limit, and step are invisible variables. The names shown here are for explanatory purposes only.
  • If the third expression (the step) is absent, then a step of 1 is used.
  • You can use break to exit a for loop.
  • The loop variable v is local to the loop; you cannot use its value after the for ends or is broken. If you need this value, assign it to another variable before breaking or exiting the loop.

The generic for statement works over functions, called iterators. On each iteration, the iterator function is called to produce a new value, stopping when this new value is nil. The generic for loop has the following syntax:

	stat ::= for namelist in explist do block end
	namelist ::= Name {`,´ Name}

A for statement like

     for var_1, ···, var_n in explist do block end

is equivalent to the code:

     do
       local f, s, var = explist
       while true do
         local var_1, ···, var_n = f(s, var)
         var = var_1
         if var == nil then break end
         block
       end
     end

Note the following:

  • explist is evaluated only once. Its results are an iterator function, a state, and an initial value for the first iterator variable.
  • f, s, and var are invisible variables. The names are here for explanatory purposes only.
  • You can use break to exit a for loop.
  • The loop variables var_i are local to the loop; you cannot use their values after the for ends. If you need these values, then assign them to other variables before breaking or exiting the loop.

2.4.6 - Function Calls as Statements

To allow possible side-effects, function calls can be executed as statements:

	stat ::= functioncall

In this case, all returned values are thrown away. Function calls are explained in §2.5.8.

2.4.7 - Local Declarations

Local variables can be declared anywhere inside a block. The declaration can include an initial assignment:

	stat ::= local namelist [`=´ explist]

If present, an initial assignment has the same semantics of a multiple assignment (see §2.4.3). Otherwise, all variables are initialized with nil.

A chunk is also a block (see §2.4.1), and so local variables can be declared in a chunk outside any explicit block. The scope of such local variables extends until the end of the chunk.

The visibility rules for local variables are explained in §2.6.

2.5 - Expressions

The basic expressions in Lua are the following:

	exp ::= prefixexp
	exp ::= nil | false | true
	exp ::= Number
	exp ::= String
	exp ::= function
	exp ::= tableconstructor
	exp ::= `...´
	exp ::= exp binop exp
	exp ::= unop exp
	prefixexp ::= var | functioncall | `(´ exp `)´

Numbers and literal strings are explained in §2.1; variables are explained in §2.3; function definitions are explained in §2.5.9; function calls are explained in §2.5.8; table constructors are explained in §2.5.7. Vararg expressions, denoted by three dots ('...'), can only be used when directly inside a vararg function; they are explained in §2.5.9.

Binary operators comprise arithmetic operators (see §2.5.1), relational operators (see §2.5.2), logical operators (see §2.5.3), and the concatenation operator (see §2.5.4). Unary operators comprise the unary minus (see §2.5.1), the unary not (see §2.5.3), and the unary length operator (see §2.5.5).

Both function calls and vararg expressions can result in multiple values. If an expression is used as a statement (only possible for function calls (see §2.4.6)), then its return list is adjusted to zero elements, thus discarding all returned values. If an expression is used as the last (or the only) element of a list of expressions, then no adjustment is made (unless the call is enclosed in parentheses). In all other contexts, Lua adjusts the result list to one element, discarding all values except the first one.

Here are some examples:

     f()                -- adjusted to 0 results
     g(f(), x)          -- f() is adjusted to 1 result
     g(x, f())          -- g gets x plus all results from f()
     a,b,c = f(), x     -- f() is adjusted to 1 result (c gets nil)
     a,b = ...          -- a gets the first vararg parameter, b gets
                        -- the second (both a and b can get nil if there
                        -- is no corresponding vararg parameter)
     
     a,b,c = x, f()     -- f() is adjusted to 2 results
     a,b,c = f()        -- f() is adjusted to 3 results
     return f()         -- returns all results from f()
     return ...         -- returns all received vararg parameters
     return x,y,f()     -- returns x, y, and all results from f()
     {f()}              -- creates a list with all results from f()
     {...}              -- creates a list with all vararg parameters
     {f(), nil}         -- f() is adjusted to 1 result

Any expression enclosed in parentheses always results in only one value. Thus, (f(x,y,z)) is always a single value, even if f returns several values. (The value of (f(x,y,z)) is the first value returned by f or nil if f does not return any values.)

2.5.1 - Arithmetic Operators

Lua supports the usual arithmetic operators: the binary + (addition), - (subtraction), * (multiplication), / (division), % (modulo), and ^ (exponentiation); and unary - (negation). If the operands are numbers, or strings that can be converted to numbers (see §2.2.1), then all operations have the usual meaning. Exponentiation works for any exponent. For instance, x^(-0.5) computes the inverse of the square root of x. Modulo is defined as

     a % b == a - math.floor(a/b)*b

That is, it is the remainder of a division that rounds the quotient towards minus infinity.

2.5.2 - Relational Operators

The relational operators in Lua are

     ==    ~=    <     >     <=    >=

These operators always result in false or true.

Equality (==) first compares the type of its operands. If the types are different, then the result is false. Otherwise, the values of the operands are compared. Numbers and strings are compared in the usual way. Objects (tables, userdata, threads, and functions) are compared by reference: two objects are considered equal only if they are the same object. Every time you create a new object (a table, userdata, thread, or function), this new object is different from any previously existing object.

You can change the way that Lua compares tables and userdata by using the "eq" metamethod (see §2.8).

The conversion rules of §2.2.1 do not apply to equality comparisons. Thus, "0"==0 evaluates to false, and t[0] and t["0"] denote different entries in a table.

The operator ~= is exactly the negation of equality (==).

The order operators work as follows. If both arguments are numbers, then they are compared as such. Otherwise, if both arguments are strings, then their values are compared according to the current locale. Otherwise, Lua tries to call the "lt" or the "le" metamethod (see §2.8). A comparison a > b is translated to b < a and a >= b is translated to b <= a.

2.5.3 - Logical Operators

The logical operators in Lua are and, or, and not. Like the control structures (see §2.4.4), all logical operators consider both false and nil as false and anything else as true.

The negation operator not always returns false or true. The conjunction operator and returns its first argument if this value is false or nil; otherwise, and returns its second argument. The disjunction operator or returns its first argument if this value is different from nil and false; otherwise, or returns its second argument. Both and and or use short-cut evaluation; that is, the second operand is evaluated only if necessary. Here are some examples:

     10 or 20            --> 10
     10 or error()       --> 10
     nil or "a"          --> "a"
     nil and 10          --> nil
     false and error()   --> false
     false and nil       --> false
     false or nil        --> nil
     10 and 20           --> 20

(In this manual, --> indicates the result of the preceding expression.)

2.5.4 - Concatenation

The string concatenation operator in Lua is denoted by two dots ('..'). If both operands are strings or numbers, then they are converted to strings according to the rules mentioned in §2.2.1. Otherwise, the "concat" metamethod is called (see §2.8).

2.5.5 - The Length Operator

The length operator is denoted by the unary operator #. The length of a string is its number of bytes (that is, the usual meaning of string length when each character is one byte).

The length of a table t is defined to be any integer index n such that t[n] is not nil and t[n+1] is nil; moreover, if t[1] is nil, n can be zero. For a regular array, with non-nil values from 1 to a given n, its length is exactly that n, the index of its last value. If the array has "holes" (that is, nil values between other non-nil values), then #t can be any of the indices that directly precedes a nil value (that is, it may consider any such nil value as the end of the array).

2.5.6 - Precedence

Operator precedence in Lua follows the table below, from lower to higher priority:

     or
     and
     <     >     <=    >=    ~=    ==
     ..
     +     -
     *     /     %
     not   #     - (unary)
     ^

As usual, you can use parentheses to change the precedences of an expression. The concatenation ('..') and exponentiation ('^') operators are right associative. All other binary operators are left associative.

2.5.7 - Table Constructors

Table constructors are expressions that create tables. Every time a constructor is evaluated, a new table is created. A constructor can be used to create an empty table or to create a table and initialize some of its fields. The general syntax for constructors is

	tableconstructor ::= `{´ [fieldlist] `}´
	fieldlist ::= field {fieldsep field} [fieldsep]
	field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
	fieldsep ::= `,´ | `;´

Each field of the form [exp1] = exp2 adds to the new table an entry with key exp1 and value exp2. A field of the form name = exp is equivalent to ["name"] = exp. Finally, fields of the form exp are equivalent to [i] = exp, where i are consecutive numerical integers, starting with 1. Fields in the other formats do not affect this counting. For example,

     a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 }

is equivalent to

     do
       local t = {}
       t[f(1)] = g
       t[1] = "x"         -- 1st exp
       t[2] = "y"         -- 2nd exp
       t.x = 1            -- t["x"] = 1
       t[3] = f(x)        -- 3rd exp
       t[30] = 23
       t[4] = 45          -- 4th exp
       a = t
     end

If the last field in the list has the form exp and the expression is a function call or a vararg expression, then all values returned by this expression enter the list consecutively (see §2.5.8). To avoid this, enclose the function call or the vararg expression in parentheses (see §2.5).

The field list can have an optional trailing separator, as a convenience for machine-generated code.

2.5.8 - Function Calls

A function call in Lua has the following syntax:

	functioncall ::= prefixexp args

In a function call, first prefixexp and args are evaluated. If the value of prefixexp has type function, then this function is called with the given arguments. Otherwise, the prefixexp "call" metamethod is called, having as first parameter the value of prefixexp, followed by the original call arguments (see §2.8).

The form

	functioncall ::= prefixexp `:´ Name args

can be used to call "methods". A call v:name(args) is syntactic sugar for v.name(v,args), except that v is evaluated only once.

Arguments have the following syntax:

	args ::= `(´ [explist] `)´
	args ::= tableconstructor
	args ::= String

All argument expressions are evaluated before the call. A call of the form f{fields} is syntactic sugar for f({fields}); that is, the argument list is a single new table. A call of the form f'string' (or f"string" or f[[string]]) is syntactic sugar for f('string'); that is, the argument list is a single literal string.

As an exception to the free-format syntax of Lua, you cannot put a line break before the '(' in a function call. This restriction avoids some ambiguities in the language. If you write

     a = f
     (g).x(a)

Lua would see that as a single statement, a = f(g).x(a). So, if you want two statements, you must add a semi-colon between them. If you actually want to call f, you must remove the line break before (g).

A call of the form return functioncall is called a tail call. Lua implements proper tail calls (or proper tail recursion): in a tail call, the called function reuses the stack entry of the calling function. Therefore, there is no limit on the number of nested tail calls that a program can execute. However, a tail call erases any debug information about the calling function. Note that a tail call only happens with a particular syntax, where the return has one single function call as argument; this syntax makes the calling function return exactly the returns of the called function. So, none of the following examples are tail calls:

     return (f(x))        -- results adjusted to 1
     return 2 * f(x)
     return x, f(x)       -- additional results
     f(x); return         -- results discarded
     return x or f(x)     -- results adjusted to 1

2.5.9 - Function Definitions

The syntax for function definition is

	function ::= function funcbody
	funcbody ::= `(´ [parlist] `)´ block end

The following syntactic sugar simplifies function definitions:

	stat ::= function funcname funcbody
	stat ::= local function Name funcbody
	funcname ::= Name {`.´ Name} [`:´ Name]

The statement

     function f () body end

translates to

     f = function () body end

The statement

     function t.a.b.c.f () body end

translates to

     t.a.b.c.f = function () body end

The statement

     local function f () body end

translates to

     local f; f = function () body end

not to

     local f = function () body end

(This only makes a difference when the body of the function contains references to f.)

A function definition is an executable expression, whose value has type function. When Lua pre-compiles a chunk, all its function bodies are pre-compiled too. Then, whenever Lua executes the function definition, the function is instantiated (or closed). This function instance (or closure) is the final value of the expression. Different instances of the same function can refer to different external local variables and can have different environment tables.

Parameters act as local variables that are initialized with the argument values:

	parlist ::= namelist [`,´ `...´] | `...´

When a function is called, the list of arguments is adjusted to the length of the list of parameters, unless the function is a variadic or vararg function, which is indicated by three dots ('...') at the end of its parameter list. A vararg function does not adjust its argument list; instead, it collects all extra arguments and supplies them to the function through a vararg expression, which is also written as three dots. The value of this expression is a list of all actual extra arguments, similar to a function with multiple results. If a vararg expression is used inside another expression or in the middle of a list of expressions, then its return list is adjusted to one element. If the expression is used as the last element of a list of expressions, then no adjustment is made (unless that last expression is enclosed in parentheses).

As an example, consider the following definitions:

     function f(a, b) end
     function g(a, b, ...) end
     function r() return 1,2,3 end

Then, we have the following mapping from arguments to parameters and to the vararg expression:

     CALL            PARAMETERS
     
     f(3)             a=3, b=nil
     f(3, 4)          a=3, b=4
     f(3, 4, 5)       a=3, b=4
     f(r(), 10)       a=1, b=10
     f(r())           a=1, b=2
     
     g(3)             a=3, b=nil, ... -->  (nothing)
     g(3, 4)          a=3, b=4,   ... -->  (nothing)
     g(3, 4, 5, 8)    a=3, b=4,   ... -->  5  8
     g(5, r())        a=5, b=1,   ... -->  2  3

Results are returned using the return statement (see §2.4.4). If control reaches the end of a function without encountering a return statement, then the function returns with no results.

The colon syntax is used for defining methods, that is, functions that have an implicit extra parameter self. Thus, the statement

     function t.a.b.c:f (params) body end

is syntactic sugar for

     t.a.b.c.f = function (self, params) body end

2.6 - Visibility Rules

Lua is a lexically scoped language. The scope of variables begins at the first statement after their declaration and lasts until the end of the innermost block that includes the declaration. Consider the following example:

     x = 10                -- global variable
     do                    -- new block
       local x = x         -- new 'x', with value 10
       print(x)            --> 10
       x = x+1
       do                  -- another block
         local x = x+1     -- another 'x'
         print(x)          --> 12
       end
       print(x)            --> 11
     end
     print(x)              --> 10  (the global one)

Notice that, in a declaration like local x = x, the new x being declared is not in scope yet, and so the second x refers to the outside variable.

Because of the lexical scoping rules, local variables can be freely accessed by functions defined inside their scope. A local variable used by an inner function is called an upvalue, or external local variable, inside the inner function.

Notice that each execution of a local statement defines new local variables. Consider the following example:

     a = {}
     local x = 20
     for i=1,10 do
       local y = 0
       a[i] = function () y=y+1; return x+y end
     end

The loop creates ten closures (that is, ten instances of the anonymous function). Each of these closures uses a different y variable, while all of them share the same x.

2.7 - Error Handling

Because Lua is an embedded extension language, all Lua actions start from C code in the host program calling a function from the Lua library (see lua_pcall). Whenever an error occurs during Lua compilation or execution, control returns to C, which can take appropriate measures (such as printing an error message).

Lua code can explicitly generate an error by calling the error function. If you need to catch errors in Lua, you can use the pcall function.

2.8 - Metatables

Every value in Lua can have a metatable. This metatable is an ordinary Lua table that defines the behavior of the original value under certain special operations. You can change several aspects of the behavior of operations over a value by setting specific fields in its metatable. For instance, when a non-numeric value is the operand of an addition, Lua checks for a function in the field "__add" in its metatable. If it finds one, Lua calls this function to perform the addition.

We call the keys in a metatable events and the values metamethods. In the previous example, the event is "add" and the metamethod is the function that performs the addition.

You can query the metatable of any value through the getmetatable function.

You can replace the metatable of tables through the setmetatable function. You cannot change the metatable of other types from Lua (except by using the debug library); you must use the C API for that.

Tables and full userdata have individual metatables (although multiple tables and userdata can share their metatables). Values of all other types share one single metatable per type; that is, there is one single metatable for all numbers, one for all strings, etc.

A metatable controls how an object behaves in arithmetic operations, order comparisons, concatenation, length operation, and indexing. A metatable also can define a function to be called when a userdata is garbage collected. For each of these operations Lua associates a specific key called an event. When Lua performs one of these operations over a value, it checks whether this value has a metatable with the corresponding event. If so, the value associated with that key (the metamethod) controls how Lua will perform the operation.

Metatables control the operations listed next. Each operation is identified by its corresponding name. The key for each operation is a string with its name prefixed by two underscores, '__'; for instance, the key for operation "add" is the string "__add". The semantics of these operations is better explained by a Lua function describing how the interpreter executes the operation.

The code shown here in Lua is only illustrative; the real behavior is hard coded in the interpreter and it is much more efficient than this simulation. All functions used in these descriptions (rawget, tonumber, etc.) are described in §5.1. In particular, to retrieve the metamethod of a given object, we use the expression

     metatable(obj)[event]

This should be read as

     rawget(getmetatable(obj) or {}, event)

That is, the access to a metamethod does not invoke other metamethods, and the access to objects with no metatables does not fail (it simply results in nil).

  • "add": the + operation.

    The function getbinhandler below defines how Lua chooses a handler for a binary operation. First, Lua tries the first operand. If its type does not define a handler for the operation, then Lua tries the second operand.

         function getbinhandler (op1, op2, event)
           return metatable(op1)[event] or metatable(op2)[event]
         end
    

    By using this function, the behavior of the op1 + op2 is

         function add_event (op1, op2)
           local o1, o2 = tonumber(op1), tonumber(op2)
           if o1 and o2 then  -- both operands are numeric?
             return o1 + o2   -- '+' here is the primitive 'add'
           else  -- at least one of the operands is not numeric
             local h = getbinhandler(op1, op2, "__add")
             if h then
               -- call the handler with both operands
               return (h(op1, op2))
             else  -- no handler available: default behavior
               error(···)
             end
           end
         end
    

  • "sub": the - operation. Behavior similar to the "add" operation.
  • "mul": the * operation. Behavior similar to the "add" operation.
  • "div": the / operation. Behavior similar to the "add" operation.
  • "mod": the % operation. Behavior similar to the "add" operation, with the operation o1 - floor(o1/o2)*o2 as the primitive operation.
  • "pow": the ^ (exponentiation) operation. Behavior similar to the "add" operation, with the function pow (from the C math library) as the primitive operation.
  • "unm": the unary - operation.
         function unm_event (op)
           local o = tonumber(op)
           if o then  -- operand is numeric?
             return -o  -- '-' here is the primitive 'unm'
           else  -- the operand is not numeric.
             -- Try to get a handler from the operand
             local h = metatable(op).__unm
             if h then
               -- call the handler with the operand
               return (h(op))
             else  -- no handler available: default behavior
               error(···)
             end
           end
         end
    

  • "concat": the .. (concatenation) operation.
         function concat_event (op1, op2)
           if (type(op1) == "string" or type(op1) == "number") and
              (type(op2) == "string" or type(op2) == "number") then
             return op1 .. op2  -- primitive string concatenation
           else
             local h = getbinhandler(op1, op2, "__concat")
             if h then
               return (h(op1, op2))
             else
               error(···)
             end
           end
         end
    

  • "len": the # operation.
         function len_event (op)
           if type(op) == "string" then
             return strlen(op)         -- primitive string length
           elseif type(op) == "table" then
             return #op                -- primitive table length
           else
             local h = metatable(op).__len
             if h then
               -- call the handler with the operand
               return (h(op))
             else  -- no handler available: default behavior
               error(···)
             end
           end
         end
    

    See §2.5.5 for a description of the length of a table.

  • "eq": the == operation. The function getcomphandler defines how Lua chooses a metamethod for comparison operators. A metamethod only is selected when both objects being compared have the same type and the same metamethod for the selected operation.
         function getcomphandler (op1, op2, event)
           if type(op1) ~= type(op2) then return nil end
           local mm1 = metatable(op1)[event]
           local mm2 = metatable(op2)[event]
           if mm1 == mm2 then return mm1 else return nil end
         end
    

    The "eq" event is defined as follows:

         function eq_event (op1, op2)
           if type(op1) ~= type(op2) then  -- different types?
             return false   -- different objects
           end
           if op1 == op2 then   -- primitive equal?
             return true   -- objects are equal
           end
           -- try metamethod
           local h = getcomphandler(op1, op2, "__eq")
           if h then
             return (h(op1, op2))
           else
             return false
           end
         end
    

    a ~= b is equivalent to not (a == b).

  • "lt": the < operation.
         function lt_event (op1, op2)
           if type(op1) == "number" and type(op2) == "number" then
             return op1 < op2   -- numeric comparison
           elseif type(op1) == "string" and type(op2) == "string" then
             return op1 < op2   -- lexicographic comparison
           else
             local h = getcomphandler(op1, op2, "__lt")
             if h then
               return (h(op1, op2))
             else
               error(···)
             end
           end
         end
    

    a > b is equivalent to b < a.

  • "le": the <= operation.
         function le_event (op1, op2)
           if type(op1) == "number" and type(op2) == "number" then
             return op1 <= op2   -- numeric comparison
           elseif type(op1) == "string" and type(op2) == "string" then
             return op1 <= op2   -- lexicographic comparison
           else
             local h = getcomphandler(op1, op2, "__le")
             if h then
               return (h(op1, op2))
             else
               h = getcomphandler(op1, op2, "__lt")
               if h then
                 return not h(op2, op1)
               else
                 error(···)
               end
             end
           end
         end
    

    a >= b is equivalent to b <= a. Note that, in the absence of a "le" metamethod, Lua tries the "lt", assuming that a <= b is equivalent to not (b < a).

  • "index": The indexing access table[key].
         function gettable_event (table, key)
           local h
           if type(table) == "table" then
             local v = rawget(table, key)
             if v ~= nil then return v end
             h = metatable(table).__index
             if h == nil then return nil end
           else
             h = metatable(table).__index
             if h == nil then
               error(···)
             end
           end
           if type(h) == "function" then
             return (h(table, key))     -- call the handler
           else return h[key]           -- or repeat operation on it
           end
         end
    

  • "newindex": The indexing assignment table[key] = value.
         function settable_event (table, key, value)
           local h
           if type(table) == "table" then
             local v = rawget(table, key)
             if v ~= nil then rawset(table, key, value); return end
             h = metatable(table).__newindex
             if h == nil then rawset(table, key, value); return end
           else
             h = metatable(table).__newindex
             if h == nil then
               error(···)
             end
           end
           if type(h) == "function" then
             h(table, key,value)           -- call the handler
           else h[key] = value             -- or repeat operation on it
           end
         end
    

  • "call": called when Lua calls a value.
         function function_event (func, ...)
           if type(func) == "function" then
             return func(...)   -- primitive call
           else
             local h = metatable(func).__call
             if h then
               return h(func, ...)
             else
               error(···)
             end
           end
         end
    

2.9 - Environments

Besides metatables, objects of types thread, function, and userdata have another table associated with them, called their environment. Like metatables, environments are regular tables and multiple objects can share the same environment.

Threads are created sharing the environment of the creating thread. Userdata and C functions are created sharing the environment of the creating C function. Non-nested Lua functions (created by loadfile, loadstring or load) are created sharing the environment of the creating thread. Nested Lua functions are created sharing the environment of the creating Lua function.

Environments associated with userdata have no meaning for Lua. It is only a convenience feature for programmers to associate a table to a userdata.

Environments associated with threads are called global environments. They are used as the default environment for threads and non-nested Lua functions created by the thread and can be directly accessed by C code (see §3.3).

The environment associated with a C function can be directly accessed by C code (see §3.3). It is used as the default environment for other C functions and userdata created by the function.

Environments associated with Lua functions are used to resolve all accesses to global variables within the function (see §2.3). They are used as the default environment for nested Lua functions created by the function.

You can change the environment of a Lua function or the running thread by calling setfenv. You can get the environment of a Lua function or the running thread by calling getfenv. To manipulate the environment of other objects (userdata, C functions, other threads) you must use the C API.

2.10 - Garbage Collection

Lua performs automatic memory management. This means that you have to worry neither about allocating memory for new objects nor about freeing it when the objects are no longer needed. Lua manages memory automatically by running a garbage collector from time to time to collect all dead objects (that is, objects that are no longer accessible from Lua). All memory used by Lua is subject to automatic management: tables, userdata, functions, threads, strings, etc.

Lua implements an incremental mark-and-sweep collector. It uses two numbers to control its garbage-collection cycles: the garbage-collector pause and the garbage-collector step multiplier. Both use percentage points as units (so that a value of 100 means an internal value of 1).

The garbage-collector pause controls how long the collector waits before starting a new cycle. Larger values make the collector less aggressive. Values smaller than 100 mean the collector will not wait to start a new cycle. A value of 200 means that the collector waits for the total memory in use to double before starting a new cycle.

The step multiplier controls the relative speed of the collector relative to memory allocation. Larger values make the collector more aggressive but also increase the size of each incremental step. Values smaller than 100 make the collector too slow and can result in the collector never finishing a cycle. The default, 200, means that the collector runs at "twice" the speed of memory allocation.

You can change these numbers by calling lua_gc in C or collectgarbage in Lua. With these functions you can also control the collector directly (e.g., stop and restart it).

2.10.1 - Garbage-Collection Metamethods

Using the C API, you can set garbage-collector metamethods for userdata (see §2.8). These metamethods are also called finalizers. Finalizers allow you to coordinate Lua's garbage collection with external resource management (such as closing files, network or database connections, or freeing your own memory).

Garbage userdata with a field __gc in their metatables are not collected immediately by the garbage collector. Instead, Lua puts them in a list. After the collection, Lua does the equivalent of the following function for each userdata in that list:

     function gc_event (udata)
       local h = metatable(udata).__gc
       if h then
         h(udata)
       end
     end

At the end of each garbage-collection cycle, the finalizers for userdata are called in reverse order of their creation, among those collected in that cycle. That is, the first finalizer to be called is the one associated with the userdata created last in the program. The userdata itself is freed only in the next garbage-collection cycle.

2.10.2 - Weak Tables

A weak table is a table whose elements are weak references. A weak reference is ignored by the garbage collector. In other words, if the only references to an object are weak references, then the garbage collector will collect this object.

A weak table can have weak keys, weak values, or both. A table with weak keys allows the collection of its keys, but prevents the collection of its values. A table with both weak keys and weak values allows the collection of both keys and values. In any case, if either the key or the value is collected, the whole pair is removed from the table. The weakness of a table is controlled by the __mode field of its metatable. If the __mode field is a string containing the character 'k', the keys in the table are weak. If __mode contains 'v', the values in the table are weak.

After you use a table as a metatable, you should not change the value of its __mode field. Otherwise, the weak behavior of the tables controlled by this metatable is undefined.

2.11 - Coroutines

Lua supports coroutines, also called collaborative multithreading. A coroutine in Lua represents an independent thread of execution. Unlike threads in multithread systems, however, a coroutine only suspends its execution by explicitly calling a yield function.

You create a coroutine with a call to coroutine.create. Its sole argument is a function that is the main function of the coroutine. The create function only creates a new coroutine and returns a handle to it (an object of type thread); it does not start the coroutine execution.

When you first call coroutine.resume, passing as its first argument a thread returned by coroutine.create, the coroutine starts its execution, at the first line of its main function. Extra arguments passed to coroutine.resume are passed on to the coroutine main function. After the coroutine starts running, it runs until it terminates or yields.

A coroutine can terminate its execution in two ways: normally, when its main function returns (explicitly or implicitly, after the last instruction); and abnormally, if there is an unprotected error. In the first case, coroutine.resume returns true, plus any values returned by the coroutine main function. In case of errors, coroutine.resume returns false plus an error message.

A coroutine yields by calling coroutine.yield. When a coroutine yields, the corresponding coroutine.resume returns immediately, even if the yield happens inside nested function calls (that is, not in the main function, but in a function directly or indirectly called by the main function). In the case of a yield, coroutine.resume also returns true, plus any values passed to coroutine.yield. The next time you resume the same coroutine, it continues its execution from the point where it yielded, with the call to coroutine.yield returning any extra arguments passed to coroutine.resume.

Like coroutine.create, the coroutine.wrap function also creates a coroutine, but instead of returning the coroutine itself, it returns a function that, when called, resumes the coroutine. Any arguments passed to this function go as extra arguments to coroutine.resume. coroutine.wrap returns all the values returned by coroutine.resume, except the first one (the boolean error code). Unlike coroutine.resume, coroutine.wrap does not catch errors; any error is propagated to the caller.

As an example, consider the following code:

     function foo (a)
       print("foo", a)
       return coroutine.yield(2*a)
     end
     
     co = coroutine.create(function (a,b)
           print("co-body", a, b)
           local r = foo(a+1)
           print("co-body", r)
           local r, s = coroutine.yield(a+b, a-b)
           print("co-body", r, s)
           return b, "end"
     end)
            
     print("main", coroutine.resume(co, 1, 10))
     print("main", coroutine.resume(co, "r"))
     print("main", coroutine.resume(co, "x", "y"))
     print("main", coroutine.resume(co, "x", "y"))

When you run it, it produces the following output:

     co-body 1       10
     foo     2
     
     main    true    4
     co-body r
     main    true    11      -9
     co-body x       y
     main    true    10      end
     main    false   cannot resume dead coroutine

3 - The Application Program Interface

This section describes the C API for Lua, that is, the set of C functions available to the host program to communicate with Lua. All API functions and related types and constants are declared in the header file lua.h.

Even when we use the term "function", any facility in the API may be provided as a macro instead. All such macros use each of their arguments exactly once (except for the first argument, which is always a Lua state), and so do not generate any hidden side-effects.

As in most C libraries, the Lua API functions do not check their arguments for validity or consistency. However, you can change this behavior by compiling Lua with a proper definition for the macro luai_apicheck, in file luaconf.h.

3.1 - The Stack

Lua uses a virtual stack to pass values to and from C. Each element in this stack represents a Lua value (nil, number, string, etc.).

Whenever Lua calls C, the called function gets a new stack, which is independent of previous stacks and of stacks of C functions that are still active. This stack initially contains any arguments to the C function and it is where the C function pushes its results to be returned to the caller (see lua_CFunction).

For convenience, most query operations in the API do not follow a strict stack discipline. Instead, they can refer to any element in the stack by using an index: A positive index represents an absolute stack position (starting at 1); a negative index represents an offset relative to the top of the stack. More specifically, if the stack has n elements, then index 1 represents the first element (that is, the element that was pushed onto the stack first) and index n represents the last element; index -1 also represents the last element (that is, the element at the top) and index -n represents the first element. We say that an index is valid if it lies between 1 and the stack top (that is, if 1 ≤ abs(index) ≤ top).

3.2 - Stack Size

When you interact with Lua API, you are responsible for ensuring consistency. In particular, you are responsible for controlling stack overflow. You can use the function lua_checkstack to grow the stack size.

Whenever Lua calls C, it ensures that at least LUA_MINSTACK stack positions are available. LUA_MINSTACK is defined as 20, so that usually you do not have to worry about stack space unless your code has loops pushing elements onto the stack.

Most query functions accept as indices any value inside the available stack space, that is, indices up to the maximum stack size you have set through lua_checkstack. Such indices are called acceptable indices. More formally, we define an acceptable index as follows:

     (index < 0 && abs(index) <= top) ||
     (index > 0 && index <= stackspace)

Note that 0 is never an acceptable index.

3.3 - Pseudo-Indices

Unless otherwise noted, any function that accepts valid indices can also be called with pseudo-indices, which represent some Lua values that are accessible to C code but which are not in the stack. Pseudo-indices are used to access the thread environment, the function environment, the registry, and the upvalues of a C function (see §3.4).

The thread environment (where global variables live) is always at pseudo-index LUA_GLOBALSINDEX. The environment of the running C function is always at pseudo-index LUA_ENVIRONINDEX.

To access and change the value of global variables, you can use regular table operations over an environment table. For instance, to access the value of a global variable, do

     lua_getfield(L, LUA_GLOBALSINDEX, varname);

3.4 - C Closures

When a C function is created, it is possible to associate some values with it, thus creating a C closure; these values are called upvalues and are accessible to the function whenever it is called (see lua_pushcclosure).

Whenever a C function is called, its upvalues are located at specific pseudo-indices. These pseudo-indices are produced by the macro lua_upvalueindex. The first value associated with a function is at position lua_upvalueindex(1), and so on. Any access to lua_upvalueindex(n), where n is greater than the number of upvalues of the current function (but not greater than 256), produces an acceptable (but invalid) index.

3.5 - Registry

Lua provides a registry, a pre-defined table that can be used by any C code to store whatever Lua value it needs to store. This table is always located at pseudo-index LUA_REGISTRYINDEX. Any C library can store data into this table, but it should take care to choose keys different from those used by other libraries, to avoid collisions. Typically, you should use as key a string containing your library name or a light userdata with the address of a C object in your code.

The integer keys in the registry are used by the reference mechanism, implemented by the auxiliary library, and therefore should not be used for other purposes.

3.6 - Error Handling in C

Internally, Lua uses the C longjmp facility to handle errors. (You can also choose to use exceptions if you use C++; see file luaconf.h.) When Lua faces any error (such as memory allocation errors, type errors, syntax errors, and runtime errors) it raises an error; that is, it does a long jump. A protected environment uses setjmp to set a recover point; any error jumps to the most recent active recover point.

Most functions in the API can throw an error, for instance due to a memory allocation error. The documentation for each function indicates whether it can throw errors.

Inside a C function you can throw an error by calling lua_error.

3.7 - Functions and Types

Here we list all functions and types from the C API in alphabetical order. Each function has an indicator like this: [-o, +p, x]

The first field, o, is how many elements the function pops from the stack. The second field, p, is how many elements the function pushes onto the stack. (Any function always pushes its results after popping its arguments.) A field in the form x|y means the function can push (or pop) x or y elements, depending on the situation; an interrogation mark '?' means that we cannot know how many elements the function pops/pushes by looking only at its arguments (e.g., they may depend on what is on the stack). The third field, x, tells whether the function may throw errors: '-' means the function never throws any error; 'm' means the function may throw an error only due to not enough memory; 'e' means the function may throw other kinds of errors; 'v' means the function may throw an error on purpose.


lua_Alloc

typedef void * (*lua_Alloc) (void *ud,
                             void *ptr,
                             size_t osize,
                             size_t nsize);

The type of the memory-allocation function used by Lua states. The allocator function must provide a functionality similar to realloc, but not exactly the same. Its arguments are ud, an opaque pointer passed to lua_newstate; ptr, a pointer to the block being allocated/reallocated/freed; osize, the original size of the block; nsize, the new size of the block. ptr is NULL if and only if osize is zero. When nsize is zero, the allocator must return NULL; if osize is not zero, it should free the block pointed to by ptr. When nsize is not zero, the allocator returns NULL if and only if it cannot fill the request. When nsize is not zero and osize is zero, the allocator should behave like malloc. When nsize and osize are not zero, the allocator behaves like realloc. Lua assumes that the allocator never fails when osize >= nsize.

Here is a simple implementation for the allocator function. It is used in the auxiliary library by luaL_newstate.

     static void *l_alloc (void *ud, void *ptr, size_t osize,
                                                size_t nsize) {
       (void)ud;  (void)osize;  /* not used */
       if (nsize == 0) {
         free(ptr);
         return NULL;
       }
       else
         return realloc(ptr, nsize);
     }

This code assumes that free(NULL) has no effect and that realloc(NULL, size) is equivalent to malloc(size). ANSI C ensures both behaviors.


lua_atpanic

[-0, +0, -]

lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);

Sets a new panic function and returns the old one.

If an error happens outside any protected environment, Lua calls a panic function and then calls exit(EXIT_FAILURE), thus exiting the host application. Your panic function can avoid this exit by never returning (e.g., doing a long jump).

The panic function can access the error message at the top of the stack.


lua_call

[-(nargs + 1), +nresults, e]

void lua_call (lua_State *L, int nargs, int nresults);

Calls a function.

To call a function you must use the following protocol: first, the function to be called is pushed onto the stack; then, the arguments to the function are pushed in direct order; that is, the first argument is pushed first. Finally you call lua_call; nargs is the number of arguments that you pushed onto the stack. All arguments and the function value are popped from the stack when the function is called. The function results are pushed onto the stack when the function returns. The number of results is adjusted to nresults, unless nresults is LUA_MULTRET. In this case, all results from the function are pushed. Lua takes care that the returned values fit into the stack space. The function results are pushed onto the stack in direct order (the first result is pushed first), so that after the call the last result is on the top of the stack.

Any error inside the called function is propagated upwards (with a longjmp).

The following example shows how the host program can do the equivalent to this Lua code:

     a = f("how", t.x, 14)

Here it is in C:

     lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* function to be called */
     lua_pushstring(L, "how");                        /* 1st argument */
     lua_getfield(L, LUA_GLOBALSINDEX, "t");   /* table to be indexed */
     lua_getfield(L, -1, "x");        /* push result of t.x (2nd arg) */
     lua_remove(L, -2);                  /* remove 't' from the stack */
     lua_pushinteger(L, 14);                          /* 3rd argument */
     lua_call(L, 3, 1);     /* call 'f' with 3 arguments and 1 result */
     lua_setfield(L, LUA_GLOBALSINDEX, "a");        /* set global 'a' */

Note that the code above is "balanced": at its end, the stack is back to its original configuration. This is considered good programming practice.


lua_CFunction

typedef int (*lua_CFunction) (lua_State *L);

Type for C functions.

In order to communicate properly with Lua, a C function must use the following protocol, which defines the way parameters and results are passed: a C function receives its arguments from Lua in its stack in direct order (the first argument is pushed first). So, when the function starts, lua_gettop(L) returns the number of arguments received by the function. The first argument (if any) is at index 1 and its last argument is at index lua_gettop(L). To return values to Lua, a C function just pushes them onto the stack, in direct order (the first result is pushed first), and returns the number of results. Any other value in the stack below the results will be properly discarded by Lua. Like a Lua function, a C function called by Lua can also return many results.

As an example, the following function receives a variable number of numerical arguments and returns their average and sum:

     static int foo (lua_State *L) {
       int n = lua_gettop(L);    /* number of arguments */
       lua_Number sum = 0;
       int i;
       for (i = 1; i <= n; i++) {
         if (!lua_isnumber(L, i)) {
           lua_pushstring(L, "incorrect argument");
           lua_error(L);
         }
         sum += lua_tonumber(L, i);
       }
       lua_pushnumber(L, sum/n);        /* first result */
       lua_pushnumber(L, sum);         /* second result */
       return 2;                   /* number of results */
     }

lua_checkstack

[-0, +0, m]

int lua_checkstack (lua_State *L, int extra);

Ensures that there are at least extra free stack slots in the stack. It returns false if it cannot grow the stack to that size. This function never shrinks the stack; if the stack is already larger than the new size, it is left unchanged.


lua_close

[-0, +0, -]

void lua_close (lua_State *L);

Destroys all objects in the given Lua state (calling the corresponding garbage-collection metamethods, if any) and frees all dynamic memory used by this state. On several platforms, you may not need to call this function, because all resources are naturally released when the host program ends. On the other hand, long-running programs, such as a daemon or a web server, might need to release states as soon as they are not needed, to avoid growing too large.


lua_concat

[-n, +1, e]

void lua_concat (lua_State *L, int n);

Concatenates the n values at the top of the stack, pops them, and leaves the result at the top. If n is 1, the result is the single value on the stack (that is, the function does nothing); if n is 0, the result is the empty string. Concatenation is performed following the usual semantics of Lua (see §2.5.4).


lua_cpcall

[-0, +(0|1), -]

int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);

Calls the C function func in protected mode. func starts with only one element in its stack, a light userdata containing ud. In case of errors, lua_cpcall returns the same error codes as lua_pcall, plus the error object on the top of the stack; otherwise, it returns zero, and does not change the stack. All values returned by func are discarded.


lua_createtable

[-0, +1, m]

void lua_createtable (lua_State *L, int narr, int nrec);

Creates a new empty table and pushes it onto the stack. The new table has space pre-allocated for narr array elements and nrec non-array elements. This pre-allocation is useful when you know exactly how many elements the table will have. Otherwise you can use the function lua_newtable.


lua_dump

[-0, +0, m]

int lua_dump (lua_State *L, lua_Writer writer, void *data);

Dumps a function as a binary chunk. Receives a Lua function on the top of the stack and produces a binary chunk that, if loaded again, results in a function equivalent to the one dumped. As it produces parts of the chunk, lua_dump calls function writer (see lua_Writer) with the given data to write them.

The value returned is the error code returned by the last call to the writer; 0 means no errors.

This function does not pop the Lua function from the stack.


lua_equal

[-0, +0, e]

int lua_equal (lua_State *L, int index1, int index2);

Returns 1 if the two values in acceptable indices index1 and index2 are equal, following the semantics of the Lua == operator (that is, may call metamethods). Otherwise returns 0. Also returns 0 if any of the indices is non valid.


lua_error

[-1, +0, v]

int lua_error (lua_State *L);

Generates a Lua error. The error message (which can actually be a Lua value of any type) must be on the stack top. This function does a long jump, and therefore never returns. (see luaL_error).


lua_gc

[-0, +0, e]

int lua_gc (lua_State *L, int what, int data);

Controls the garbage collector.

This function performs several tasks, according to the value of the parameter what:

  • LUA_GCSTOP: stops the garbage collector.
  • LUA_GCRESTART: restarts the garbage collector.
  • LUA_GCCOLLECT: performs a full garbage-collection cycle.
  • LUA_GCCOUNT: returns the current amount of memory (in Kbytes) in use by Lua.
  • LUA_GCCOUNTB: returns the remainder of dividing the current amount of bytes of memory in use by Lua by 1024.
  • LUA_GCSTEP: performs an incremental step of garbage collection. The step "size" is controlled by data (larger values mean more steps) in a non-specified way. If you want to control the step size you must experimentally tune the value of data. The function returns 1 if the step finished a garbage-collection cycle.
  • LUA_GCSETPAUSE: sets data as the new value for the pause of the collector (see §2.10). The function returns the previous value of the pause.
  • LUA_GCSETSTEPMUL: sets data as the new value for the step multiplier of the collector (see §2.10). The function returns the previous value of the step multiplier.

lua_getallocf

[-0, +0, -]

lua_Alloc lua_getallocf (lua_State *L, void **ud);

Returns the memory-allocation function of a given state. If ud is not NULL, Lua stores in *ud the opaque pointer passed to lua_newstate.


lua_getfenv

[-0, +1, -]

void lua_getfenv (lua_State *L, int index);

Pushes onto the stack the environment table of the value at the given index.


lua_getfield

[-0, +1, e]

void lua_getfield (lua_State *L, int index, const char *k);

Pushes onto the stack the value t[k], where t is the value at the given valid index. As in Lua, this function may trigger a metamethod for the "index" event (see §2.8).


lua_getglobal

[-0, +1, e]

void lua_getglobal (lua_State *L, const char *name);

Pushes onto the stack the value of the global name. It is defined as a macro:

     #define lua_getglobal(L,s)  lua_getfield(L, LUA_GLOBALSINDEX, s)

lua_getmetatable

[-0, +(0|1), -]

int lua_getmetatable (lua_State *L, int index);

Pushes onto the stack the metatable of the value at the given acceptable index. If the index is not valid, or if the value does not have a metatable, the function returns 0 and pushes nothing on the stack.


lua_gettable

[-1, +1, e]

void lua_gettable (lua_State *L, int index);

Pushes onto the stack the value t[k], where t is the value at the given valid index and k is the value at the top of the stack.

This function pops the key from the stack (putting the resulting value in its place). As in Lua, this function may trigger a metamethod for the "index" event (see §2.8).


lua_gettop

[-0, +0, -]

int lua_gettop (lua_State *L);

Returns the index of the top element in the stack. Because indices start at 1, this result is equal to the number of elements in the stack (and so 0 means an empty stack).


lua_insert

[-1, +1, -]

void lua_insert (lua_State *L, int index);

Moves the top element into the given valid index, shifting up the elements above this index to open space. Cannot be called with a pseudo-index, because a pseudo-index is not an actual stack position.


lua_Integer

typedef ptrdiff_t lua_Integer;

The type used by the Lua API to represent integral values.

By default it is a ptrdiff_t, which is usually the largest signed integral type the machine handles "comfortably".


lua_isboolean

[-0, +0, -]

int lua_isboolean (lua_State *L, int index);

Returns 1 if the value at the given acceptable index has type boolean, and 0 otherwise.


lua_iscfunction

[-0, +0, -]

int lua_iscfunction (lua_State *L, int index);

Returns 1 if the value at the given acceptable index is a C function, and 0 otherwise.


lua_isfunction

[-0, +0, -]

int lua_isfunction (lua_State *L, int index);

Returns 1 if the value at the given acceptable index is a function (either C or Lua), and 0 otherwise.


lua_islightuserdata

[-0, +0, -]

int lua_islightuserdata (lua_State *L, int index);

Returns 1 if the value at the given acceptable index is a light userdata, and 0 otherwise.


lua_isnil

[-0, +0, -]

int lua_isnil (lua_State *L, int index);

Returns 1 if the value at the given acceptable index is nil, and 0 otherwise.


lua_isnone

[-0, +0, -]

int lua_isnone (lua_State *L, int index);

Returns 1 if the given acceptable index is not valid (that is, it refers to an element outside the current stack), and 0 otherwise.


lua_isnoneornil

[-0, +0, -]

int lua_isnoneornil (lua_State *L, int index);

Returns 1 if the given acceptable index is not valid (that is, it refers to an element outside the current stack) or if the value at this index is nil, and 0 otherwise.


lua_isnumber

[-0, +0, -]

int lua_isnumber (lua_State *L, int index);

Returns 1 if the value at the given acceptable index is a number or a string convertible to a number, and 0 otherwise.


lua_isstring

[-0, +0, -]

int lua_isstring (lua_State *L, int index);

Returns 1 if the value at the given acceptable index is a string or a number (which is always convertible to a string), and 0 otherwise.


lua_istable

[-0, +0, -]

int lua_istable (lua_State *L, int index);

Returns 1 if the value at the given acceptable index is a table, and 0 otherwise.


lua_isthread

[-0, +0, -]

int lua_isthread (lua_State *L, int index);

Returns 1 if the value at the given acceptable index is a thread, and 0 otherwise.


lua_isuserdata

[-0, +0, -]

int lua_isuserdata (lua_State *L, int index);

Returns 1 if the value at the given acceptable index is a userdata (either full or light), and 0 otherwise.


lua_lessthan

[-0, +0, e]

int lua_lessthan (lua_State *L, int index1, int index2);

Returns 1 if the value at acceptable index index1 is smaller than the value at acceptable index index2, following the semantics of the Lua < operator (that is, may call metamethods). Otherwise returns 0. Also returns 0 if any of the indices is non valid.


lua_load

[-0, +1, -]

int lua_load (lua_State *L,
              lua_Reader reader,
              void *data,
              const char *chunkname);

Loads a Lua chunk. If there are no errors, lua_load pushes the compiled chunk as a Lua function on top of the stack. Otherwise, it pushes an error message. The return values of lua_load are:

This function only loads a chunk; it does not run it.

lua_load automatically detects whether the chunk is text or binary, and loads it accordingly (see program luac).

The lua_load function uses a user-supplied reader function to read the chunk (see lua_Reader). The data argument is an opaque value passed to the reader function.

The chunkname argument gives a name to the chunk, which is used for error messages and in debug information (see §3.8).


lua_newstate

[-0, +0, -]

lua_State *lua_newstate (lua_Alloc f, void *ud);

Creates a new, independent state. Returns NULL if cannot create the state (due to lack of memory). The argument f is the allocator function; Lua does all memory allocation for this state through this function. The second argument, ud, is an opaque pointer that Lua simply passes to the allocator in every call.


lua_newtable

[-0, +1, m]

void lua_newtable (lua_State *L);

Creates a new empty table and pushes it onto the stack. It is equivalent to lua_createtable(L, 0, 0).


lua_newthread

[-0, +1, m]

lua_State *lua_newthread (lua_State *L);

Creates a new thread, pushes it on the stack, and returns a pointer to a lua_State that represents this new thread. The new state returned by this function shares with the original state all global objects (such as tables), but has an independent execution stack.

There is no explicit function to close or to destroy a thread. Threads are subject to garbage collection, like any Lua object.


lua_newuserdata

[-0, +1, m]

void *lua_newuserdata (lua_State *L, size_t size);

This function allocates a new block of memory with the given size, pushes onto the stack a new full userdata with the block address, and returns this address.

Userdata represent C values in Lua. A full userdata represents a block of memory. It is an object (like a table): you must create it, it can have its own metatable, and you can detect when it is being collected. A full userdata is only equal to itself (under raw equality).

When Lua collects a full userdata with a gc metamethod, Lua calls the metamethod and marks the userdata as finalized. When this userdata is collected again then Lua frees its corresponding memory.


lua_next

[-1, +(2|0), e]

int lua_next (lua_State *L, int index);

Pops a key from the stack, and pushes a key-value pair from the table at the given index (the "next" pair after the given key). If there are no more elements in the table, then lua_next returns 0 (and pushes nothing).

A typical traversal looks like this:

     /* table is in the stack at index 't' */
     lua_pushnil(L);  /* first key */
     while (lua_next(L, t) != 0) {
       /* uses 'key' (at index -2) and 'value' (at index -1) */
       printf("%s - %s\n",
              lua_typename(L, lua_type(L, -2)),
              lua_typename(L, lua_type(L, -1)));
       /* removes 'value'; keeps 'key' for next iteration */
       lua_pop(L, 1);
     }

While traversing a table, do not call lua_tolstring directly on a key, unless you know that the key is actually a string. Recall that lua_tolstring changes the value at the given index; this confuses the next call to lua_next.


lua_Number

typedef double lua_Number;

The type of numbers in Lua. By default, it is double, but that can be changed in luaconf.h.

Through the configuration file you can change Lua to operate with another type for numbers (e.g., float or long).


lua_objlen

[-0, +0, -]

size_t lua_objlen (lua_State *L, int index);

Returns the "length" of the value at the given acceptable index: for strings, this is the string length; for tables, this is the result of the length operator ('#'); for userdata, this is the size of the block of memory allocated for the userdata; for other values, it is 0.


lua_pcall

[-(nargs + 1), +(nresults|1), -]

int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);

Calls a function in protected mode.

Both nargs and nresults have the same meaning as in lua_call. If there are no errors during the call, lua_pcall behaves exactly like lua_call. However, if there is any error, lua_pcall catches it, pushes a single value on the stack (the error message), and returns an error code. Like lua_call, lua_pcall always removes the function and its arguments from the stack.

If errfunc is 0, then the error message returned on the stack is exactly the original error message. Otherwise, errfunc is the stack index of an error handler function. (In the current implementation, this index cannot be a pseudo-index.) In case of runtime errors, this function will be called with the error message and its return value will be the message returned on the stack by lua_pcall.

Typically, the error handler function is used to add more debug information to the error message, such as a stack traceback. Such information cannot be gathered after the return of lua_pcall, since by then the stack has unwound.

The lua_pcall function returns 0 in case of success or one of the following error codes (defined in lua.h):

  • LUA_ERRRUN: a runtime error.
  • LUA_ERRMEM: memory allocation error. For such errors, Lua does not call the error handler function.
  • LUA_ERRERR: error while running the error handler function.

lua_pop

[-n, +0, -]

void lua_pop (lua_State *L, int n);

Pops n elements from the stack.


lua_pushboolean

[-0, +1, -]

void lua_pushboolean (lua_State *L, int b);

Pushes a boolean value with value b onto the stack.


lua_pushcclosure

[-n, +1, m]

void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);

Pushes a new C closure onto the stack.

When a C function is created, it is possible to associate some values with it, thus creating a C closure (see §3.4); these values are then accessible to the function whenever it is called. To associate values with a C function, first these values should be pushed onto the stack (when there are multiple values, the first value is pushed first). Then lua_pushcclosure is called to create and push the C function onto the stack, with the argument n telling how many values should be associated with the function. lua_pushcclosure also pops these values from the stack.

The maximum value for n is 255.


lua_pushcfunction

[-0, +1, m]

void lua_pushcfunction (lua_State *L, lua_CFunction f);

Pushes a C function onto the stack. This function receives a pointer to a C function and pushes onto the stack a Lua value of type function that, when called, invokes the corresponding C function.

Any function to be registered in Lua must follow the correct protocol to receive its parameters and return its results (see lua_CFunction).

lua_pushcfunction is defined as a macro:

     #define lua_pushcfunction(L,f)  lua_pushcclosure(L,f,0)

lua_pushfstring

[-0, +1, m]

const char *lua_pushfstring (lua_State *L, const char *fmt, ...);

Pushes onto the stack a formatted string and returns a pointer to this string. It is similar to the C function sprintf, but has some important differences:

  • You do not have to allocate space for the result: the result is a Lua string and Lua takes care of memory allocation (and deallocation, through garbage collection).
  • The conversion specifiers are quite restricted. There are no flags, widths, or precisions. The conversion specifiers can only be '%%' (inserts a '%' in the string), '%s' (inserts a zero-terminated string, with no size restrictions), '%f' (inserts a lua_Number), '%p' (inserts a pointer as a hexadecimal numeral), '%d' (inserts an int), and '%c' (inserts an int as a character).

lua_pushinteger

[-0, +1, -]

void lua_pushinteger (lua_State *L, lua_Integer n);

Pushes a number with value n onto the stack.


lua_pushlightuserdata

[-0, +1, -]

void lua_pushlightuserdata (lua_State *L, void *p);

Pushes a light userdata onto the stack.

Userdata represent C values in Lua. A light userdata represents a pointer. It is a value (like a number): you do not create it, it has no individual metatable, and it is not collected (as it was never created). A light userdata is equal to "any" light userdata with the same C address.


lua_pushliteral

[-0, +1, m]

void lua_pushliteral (lua_State *L, const char *s);

This macro is equivalent to lua_pushlstring, but can be used only when s is a literal string. In these cases, it automatically provides the string length.


lua_pushlstring

[-0, +1, m]

void lua_pushlstring (lua_State *L, const char *s, size_t len);

Pushes the string pointed to by s with size len onto the stack. Lua makes (or reuses) an internal copy of the given string, so the memory at s can be freed or reused immediately after the function returns. The string can contain embedded zeros.


lua_pushnil

[-0, +1, -]

void lua_pushnil (lua_State *L);

Pushes a nil value onto the stack.


lua_pushnumber

[-0, +1, -]

void lua_pushnumber (lua_State *L, lua_Number n);

Pushes a number with value n onto the stack.


lua_pushstring

[-0, +1, m]

void lua_pushstring (lua_State *L, const char *s);

Pushes the zero-terminated string pointed to by s onto the stack. Lua makes (or reuses) an internal copy of the given string, so the memory at s can be freed or reused immediately after the function returns. The string cannot contain embedded zeros; it is assumed to end at the first zero.


lua_pushthread

[-0, +1, -]

int lua_pushthread (lua_State *L);

Pushes the thread represented by L onto the stack. Returns 1 if this thread is the main thread of its state.


lua_pushvalue

[-0, +1, -]

void lua_pushvalue (lua_State *L, int index);

Pushes a copy of the element at the given valid index onto the stack.


lua_pushvfstring

[-0, +1, m]

const char *lua_pushvfstring (lua_State *L,
                              const char *fmt,
                              va_list argp);

Equivalent to lua_pushfstring, except that it receives a va_list instead of a variable number of arguments.


lua_rawequal

[-0, +0, -]

int lua_rawequal (lua_State *L, int index1, int index2);

Returns 1 if the two values in acceptable indices index1 and index2 are primitively equal (that is, without calling metamethods). Otherwise returns 0. Also returns 0 if any of the indices are non valid.


lua_rawget

[-1, +1, -]

void lua_rawget (lua_State *L, int index);

Similar to lua_gettable, but does a raw access (i.e., without metamethods).


lua_rawgeti

[-0, +1, -]

void lua_rawgeti (lua_State *L, int index, int n);

Pushes onto the stack the value t[n], where t is the value at the given valid index. The access is raw; that is, it does not invoke metamethods.


lua_rawset

[-2, +0, m]

void lua_rawset (lua_State *L, int index);

Similar to lua_settable, but does a raw assignment (i.e., without metamethods).


lua_rawseti

[-1, +0, m]

void lua_rawseti (lua_State *L, int index, int n);

Does the equivalent of t[n] = v, where t is the value at the given valid index and v is the value at the top of the stack.

This function pops the value from the stack. The assignment is raw; that is, it does not invoke metamethods.


lua_Reader

typedef const char * (*lua_Reader) (lua_State *L,
                                    void *data,
                                    size_t *size);

The reader function used by lua_load. Every time it needs another piece of the chunk, lua_load calls the reader, passing along its data parameter. The reader must return a pointer to a block of memory with a new piece of the chunk and set size to the block size. The block must exist until the reader function is called again. To signal the end of the chunk, the reader must return NULL or set size to zero. The reader function may return pieces of any size greater than zero.


lua_register

[-0, +0, e]

void lua_register (lua_State *L,
                   const char *name,
                   lua_CFunction f);

Sets the C function f as the new value of global name. It is defined as a macro:

     #define lua_register(L,n,f) \
            (lua_pushcfunction(L, f), lua_setglobal(L, n))

lua_remove

[-1, +0, -]

void lua_remove (lua_State *L, int index);

Removes the element at the given valid index, shifting down the elements above this index to fill the gap. Cannot be called with a pseudo-index, because a pseudo-index is not an actual stack position.


lua_replace

[-1, +0, -]

void lua_replace (lua_State *L, int index);

Moves the top element into the given position (and pops it), without shifting any element (therefore replacing the value at the given position).


lua_resume

[-?, +?, -]

int lua_resume (lua_State *L, int narg);

Starts and resumes a coroutine in a given thread.

To start a coroutine, you first create a new thread (see lua_newthread); then you push onto its stack the main function plus any arguments; then you call lua_resume, with narg being the number of arguments. This call returns when the coroutine suspends or finishes its execution. When it returns, the stack contains all values passed to lua_yield, or all values returned by the body function. lua_resume returns LUA_YIELD if the coroutine yields, 0 if the coroutine finishes its execution without errors, or an error code in case of errors (see lua_pcall). In case of errors, the stack is not unwound, so you can use the debug API over it. The error message is on the top of the stack. To restart a coroutine, you put on its stack only the values to be passed as results from yield, and then call lua_resume.


lua_setallocf

[-0, +0, -]

void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);

Changes the allocator function of a given state to f with user data ud.


lua_setfenv

[-1, +0, -]

int lua_setfenv (lua_State *L, int index);

Pops a table from the stack and sets it as the new environment for the value at the given index. If the value at the given index is neither a function nor a thread nor a userdata, lua_setfenv returns 0. Otherwise it returns 1.


lua_setfield

[-1, +0, e]

void lua_setfield (lua_State *L, int index, const char *k);

Does the equivalent to t[k] = v, where t is the value at the given valid index and v is the value at the top of the stack.

This function pops the value from the stack. As in Lua, this function may trigger a metamethod for the "newindex" event (see §2.8).


lua_setglobal

[-1, +0, e]

void lua_setglobal (lua_State *L, const char *name);

Pops a value from the stack and sets it as the new value of global name. It is defined as a macro:

     #define lua_setglobal(L,s)   lua_setfield(L, LUA_GLOBALSINDEX, s)

lua_setmetatable

[-1, +0, -]

int lua_setmetatable (lua_State *L, int index);

Pops a table from the stack and sets it as the new metatable for the value at the given acceptable index.


lua_settable

[-2, +0, e]

void lua_settable (lua_State *L, int index);

Does the equivalent to t[k] = v, where t is the value at the given valid index, v is the value at the top of the stack, and k is the value just below the top.

This function pops both the key and the value from the stack. As in Lua, this function may trigger a metamethod for the "newindex" event (see §2.8).


lua_settop

[-?, +?, -]

void lua_settop (lua_State *L, int index);

Accepts any acceptable index, or 0, and sets the stack top to this index. If the new top is larger than the old one, then the new elements are filled with nil. If index is 0, then all stack elements are removed.


lua_State

typedef struct lua_State lua_State;

Opaque structure that keeps the whole state of a Lua interpreter. The Lua library is fully reentrant: it has no global variables. All information about a state is kept in this structure.

A pointer to this state must be passed as the first argument to every function in the library, except to lua_newstate, which creates a Lua state from scratch.


lua_status

[-0, +0, -]

int lua_status (lua_State *L);

Returns the status of the thread L.

The status can be 0 for a normal thread, an error code if the thread finished its execution with an error, or LUA_YIELD if the thread is suspended.


lua_toboolean

[-0, +0, -]

int lua_toboolean (lua_State *L, int index);

Converts the Lua value at the given acceptable index to a C boolean value (0 or 1). Like all tests in Lua, lua_toboolean returns 1 for any Lua value different from false and nil; otherwise it returns 0. It also returns 0 when called with a non-valid index. (If you want to accept only actual boolean values, use lua_isboolean to test the value's type.)


lua_tocfunction

[-0, +0, -]

lua_CFunction lua_tocfunction (lua_State *L, int index);

Converts a value at the given acceptable index to a C function. That value must be a C function; otherwise, returns NULL.


lua_tointeger

[-0, +0, -]

lua_Integer lua_tointeger (lua_State *L, int index);

Converts the Lua value at the given acceptable index to the signed integral type lua_Integer. The Lua value must be a number or a string convertible to a number (see §2.2.1); otherwise, lua_tointeger returns 0.

If the number is not an integer, it is truncated in some non-specified way.


lua_tolstring

[-0, +0, m]

const char *lua_tolstring (lua_State *L, int index, size_t *len);

Converts the Lua value at the given acceptable index to a C string. If len is not NULL, it also sets *len with the string length. The Lua value must be a string or a number; otherwise, the function returns NULL. If the value is a number, then lua_tolstring also changes the actual value in the stack to a string. (This change confuses lua_next when lua_tolstring is applied to keys during a table traversal.)

lua_tolstring returns a fully aligned pointer to a string inside the Lua state. This string always has a zero ('\0') after its last character (as in C), but can contain other zeros in its body. Because Lua has garbage collection, there is no guarantee that the pointer returned by lua_tolstring will be valid after the corresponding value is removed from the stack.


lua_tonumber

[-0, +0, -]

lua_Number lua_tonumber (lua_State *L, int index);

Converts the Lua value at the given acceptable index to the C type lua_Number (see lua_Number). The Lua value must be a number or a string convertible to a number (see §2.2.1); otherwise, lua_tonumber returns 0.


lua_topointer

[-0, +0, -]

const void *lua_topointer (lua_State *L, int index);

Converts the value at the given acceptable index to a generic C pointer (void*). The value can be a userdata, a table, a thread, or a function; otherwise, lua_topointer returns NULL. Different objects will give different pointers. There is no way to convert the pointer back to its original value.

Typically this function is used only for debug information.


lua_tostring

[-0, +0, m]

const char *lua_tostring (lua_State *L, int index);

Equivalent to lua_tolstring with len equal to NULL.


lua_tothread

[-0, +0, -]

lua_State *lua_tothread (lua_State *L, int index);

Converts the value at the given acceptable index to a Lua thread (represented as lua_State*). This value must be a thread; otherwise, the function returns NULL.


lua_touserdata

[-0, +0, -]

void *lua_touserdata (lua_State *L, int index);

If the value at the given acceptable index is a full userdata, returns its block address. If the value is a light userdata, returns its pointer. Otherwise, returns NULL.


lua_type

[-0, +0, -]

int lua_type (lua_State *L, int index);

Returns the type of the value in the given acceptable index, or LUA_TNONE for a non-valid index (that is, an index to an "empty" stack position). The types returned by lua_type are coded by the following constants defined in lua.h: LUA_TNIL, LUA_TNUMBER, LUA_TBOOLEAN, LUA_TSTRING, LUA_TTABLE, LUA_TFUNCTION, LUA_TUSERDATA, LUA_TTHREAD, and LUA_TLIGHTUSERDATA.


lua_typename

[-0, +0, -]

const char *lua_typename  (lua_State *L, int tp);

Returns the name of the type encoded by the value tp, which must be one the values returned by lua_type.


lua_Writer

typedef int (*lua_Writer) (lua_State *L,
                           const void* p,
                           size_t sz,
                           void* ud);

The type of the writer function used by lua_dump. Every time it produces another piece of chunk, lua_dump calls the writer, passing along the buffer to be written (p), its size (sz), and the data parameter supplied to lua_dump.

The writer returns an error code: 0 means no errors; any other value means an error and stops lua_dump from calling the writer again.


lua_xmove

[-?, +?, -]

void lua_xmove (lua_State *from, lua_State *to, int n);

Exchange values between different threads of the same global state.

This function pops n values from the stack from, and pushes them onto the stack to.


lua_yield

[-?, +?, -]

int lua_yield  (lua_State *L, int nresults);

Yields a coroutine.

This function should only be called as the return expression of a C function, as follows:

     return lua_yield (L, nresults);

When a C function calls lua_yield in that way, the running coroutine suspends its execution, and the call to lua_resume that started this coroutine returns. The parameter nresults is the number of values from the stack that are passed as results to lua_resume.

3.8 - The Debug Interface

Lua has no built-in debugging facilities. Instead, it offers a special interface by means of functions and hooks. This interface allows the construction of different kinds of debuggers, profilers, and other tools that need "inside information" from the interpreter.


lua_Debug

typedef struct lua_Debug {
  int event;
  const char *name;           /* (n) */
  const char *namewhat;       /* (n) */
  const char *what;           /* (S) */
  const char *source;         /* (S) */
  int currentline;            /* (l) */
  int nups;                   /* (u) number of upvalues */
  int linedefined;            /* (S) */
  int lastlinedefined;        /* (S) */
  char short_src[LUA_IDSIZE]; /* (S) */
  /* private part */
  other fields
} lua_Debug;

A structure used to carry different pieces of information about an active function. lua_getstack fills only the private part of this structure, for later use. To fill the other fields of lua_Debug with useful information, call lua_getinfo.

The fields of lua_Debug have the following meaning:

  • source: If the function was defined in a string, then source is that string. If the function was defined in a file, then source starts with a '@' followed by the file name.
  • short_src: a "printable" version of source, to be used in error messages.
  • linedefined: the line number where the definition of the function starts.
  • lastlinedefined: the line number where the definition of the function ends.
  • what: the string "Lua" if the function is a Lua function, "C" if it is a C function, "main" if it is the main part of a chunk, and "tail" if it was a function that did a tail call. In the latter case, Lua has no other information about the function.
  • currentline: the current line where the given function is executing. When no line information is available, currentline is set to -1.
  • name: a reasonable name for the given function. Because functions in Lua are first-class values, they do not have a fixed name: some functions can be the value of multiple global variables, while others can be stored only in a table field. The lua_getinfo function checks how the function was called to find a suitable name. If it cannot find a name, then name is set to NULL.
  • namewhat: explains the name field. The value of namewhat can be "global", "local", "method", "field", "upvalue", or "" (the empty string), according to how the function was called. (Lua uses the empty string when no other option seems to apply.)
  • nups: the number of upvalues of the function.

lua_gethook

[-0, +0, -]

lua_Hook lua_gethook (lua_State *L);

Returns the current hook function.


lua_gethookcount

[-0, +0, -]

int lua_gethookcount (lua_State *L);

Returns the current hook count.


lua_gethookmask

[-0, +0, -]

int lua_gethookmask (lua_State *L);

Returns the current hook mask.


lua_getinfo

[-(0|1), +(0|1|2), m]

int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);

Returns information about a specific function or function invocation.

To get information about a function invocation, the parameter ar must be a valid activation record that was filled by a previous call to lua_getstack or given as argument to a hook (see lua_Hook).

To get information about a function you push it onto the stack and start the what string with the character '>'. (In that case, lua_getinfo pops the function in the top of the stack.) For instance, to know in which line a function f was defined, you can write the following code:

     lua_Debug ar;
     lua_getfield(L, LUA_GLOBALSINDEX, "f");  /* get global 'f' */
     lua_getinfo(L, ">S", &ar);
     printf("%d\n", ar.linedefined);

Each character in the string what selects some fields of the structure ar to be filled or a value to be pushed on the stack:

  • 'n': fills in the field name and namewhat;
  • 'S': fills in the fields source, short_src, linedefined, lastlinedefined, and what;
  • 'l': fills in the field currentline;
  • 'u': fills in the field nups;
  • 'f': pushes onto the stack the function that is running at the given level;
  • 'L': pushes onto the stack a table whose indices are the numbers of the lines that are valid on the function. (A valid line is a line with some associated code, that is, a line where you can put a break point. Non-valid lines include empty lines and comments.)

This function returns 0 on error (for instance, an invalid option in what).


lua_getlocal

[-0, +(0|1), -]

const char *lua_getlocal (lua_State *L, lua_Debug *ar, int n);

Gets information about a local variable of a given activation record. The parameter ar must be a valid activation record that was filled by a previous call to lua_getstack or given as argument to a hook (see lua_Hook). The index n selects which local variable to inspect (1 is the first parameter or active local variable, and so on, until the last active local variable). lua_getlocal pushes the variable's value onto the stack and returns its name.

Variable names starting with '(' (open parentheses) represent internal variables (loop control variables, temporaries, and C function locals).

Returns NULL (and pushes nothing) when the index is greater than the number of active local variables.


lua_getstack

[-0, +0, -]

int lua_getstack (lua_State *L, int level, lua_Debug *ar);

Get information about the interpreter runtime stack.

This function fills parts of a lua_Debug structure with an identification of the activation record of the function executing at a given level. Level 0 is the current running function, whereas level n+1 is the function that has called level n. When there are no errors, lua_getstack returns 1; when called with a level greater than the stack depth, it returns 0.


lua_getupvalue

[-0, +(0|1), -]

const char *lua_getupvalue (lua_State *L, int funcindex, int n);

Gets information about a closure's upvalue. (For Lua functions, upvalues are the external local variables that the function uses, and that are consequently included in its closure.) lua_getupvalue gets the index n of an upvalue, pushes the upvalue's value onto the stack, and returns its name. funcindex points to the closure in the stack. (Upvalues have no particular order, as they are active through the whole function. So, they are numbered in an arbitrary order.)

Returns NULL (and pushes nothing) when the index is greater than the number of upvalues. For C functions, this function uses the empty string "" as a name for all upvalues.


lua_Hook

typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);

Type for debugging hook functions.

Whenever a hook is called, its ar argument has its field event set to the specific event that triggered the hook. Lua identifies these events with the following constants: LUA_HOOKCALL, LUA_HOOKRET, LUA_HOOKTAILRET, LUA_HOOKLINE, and LUA_HOOKCOUNT. Moreover, for line events, the field currentline is also set. To get the value of any other field in ar, the hook must call lua_getinfo. For return events, event can be LUA_HOOKRET, the normal value, or LUA_HOOKTAILRET. In the latter case, Lua is simulating a return from a function that did a tail call; in this case, it is useless to call lua_getinfo.

While Lua is running a hook, it disables other calls to hooks. Therefore, if a hook calls back Lua to execute a function or a chunk, this execution occurs without any calls to hooks.


lua_sethook

[-0, +0, -]

int lua_sethook (lua_State *L, lua_Hook f, int mask, int count);

Sets the debugging hook function.

Argument f is the hook function. mask specifies on which events the hook will be called: it is formed by a bitwise or of the constants LUA_MASKCALL, LUA_MASKRET, LUA_MASKLINE, and LUA_MASKCOUNT. The count argument is only meaningful when the mask includes LUA_MASKCOUNT. For each event, the hook is called as explained below:

  • The call hook: is called when the interpreter calls a function. The hook is called just after Lua enters the new function, before the function gets its arguments.
  • The return hook: is called when the interpreter returns from a function. The hook is called just before Lua leaves the function. You have no access to the values to be returned by the function.
  • The line hook: is called when the interpreter is about to start the execution of a new line of code, or when it jumps back in the code (even to the same line). (This event only happens while Lua is executing a Lua function.)
  • The count hook: is called after the interpreter executes every count instructions. (This event only happens while Lua is executing a Lua function.)

A hook is disabled by setting mask to zero.


lua_setlocal

[-(0|1), +0, -]

const char *lua_setlocal (lua_State *L, lua_Debug *ar, int n);

Sets the value of a local variable of a given activation record. Parameters ar and n are as in lua_getlocal (see lua_getlocal). lua_setlocal assigns the value at the top of the stack to the variable and returns its name. It also pops the value from the stack.

Returns NULL (and pops nothing) when the index is greater than the number of active local variables.


lua_setupvalue

[-(0|1), +0, -]

const char *lua_setupvalue (lua_State *L, int funcindex, int n);

Sets the value of a closure's upvalue. It assigns the value at the top of the stack to the upvalue and returns its name. It also pops the value from the stack. Parameters funcindex and n are as in the lua_getupvalue (see lua_getupvalue).

Returns NULL (and pops nothing) when the index is greater than the number of upvalues.

4 - The Auxiliary Library

The auxiliary library provides several convenient functions to interface C with Lua. While the basic API provides the primitive functions for all interactions between C and Lua, the auxiliary library provides higher-level functions for some common tasks.

All functions from the auxiliary library are defined in header file lauxlib.h and have a prefix luaL_.

All functions in the auxiliary library are built on top of the basic API, and so they provide nothing that cannot be done with this API.

Several functions in the auxiliary library are used to check C function arguments. Their names are always luaL_check* or luaL_opt*. All of these functions throw an error if the check is not satisfied. Because the error message is formatted for arguments (e.g., "bad argument #1"), you should not use these functions for other stack values.

4.1 - Functions and Types

Here we list all functions and types from the auxiliary library in alphabetical order.


luaL_addchar

[-0, +0, m]

void luaL_addchar (luaL_Buffer *B, char c);

Adds the character c to the buffer B (see luaL_Buffer).


luaL_addlstring

[-0, +0, m]

void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);

Adds the string pointed to by s with length l to the buffer B (see luaL_Buffer). The string may contain embedded zeros.


luaL_addsize

[-0, +0, m]

void luaL_addsize (luaL_Buffer *B, size_t n);

Adds to the buffer B (see luaL_Buffer) a string of length n previously copied to the buffer area (see luaL_prepbuffer).


luaL_addstring

[-0, +0, m]

void luaL_addstring (luaL_Buffer *B, const char *s);

Adds the zero-terminated string pointed to by s to the buffer B (see luaL_Buffer). The string may not contain embedded zeros.


luaL_addvalue

[-1, +0, m]

void luaL_addvalue (luaL_Buffer *B);

Adds the value at the top of the stack to the buffer B (see luaL_Buffer). Pops the value.

This is the only function on string buffers that can (and must) be called with an extra element on the stack, which is the value to be added to the buffer.


luaL_argcheck

[-0, +0, v]

void luaL_argcheck (lua_State *L,
                    int cond,
                    int narg,
                    const char *extramsg);

Checks whether cond is true. If not, raises an error with the following message, where func is retrieved from the call stack:

     bad argument #<narg> to <func> (<extramsg>)

luaL_argerror

[-0, +0, v]

int luaL_argerror (lua_State *L, int narg, const char *extramsg);

Raises an error with the following message, where func is retrieved from the call stack:

     bad argument #<narg> to <func> (<extramsg>)

This function never returns, but it is an idiom to use it in C functions as return luaL_argerror(args).


luaL_Buffer

typedef struct luaL_Buffer luaL_Buffer;

Type for a string buffer.

A string buffer allows C code to build Lua strings piecemeal. Its pattern of use is as follows:

  • First you declare a variable b of type luaL_Buffer.
  • Then you initialize it with a call luaL_buffinit(L, &b).
  • Then you add string pieces to the buffer calling any of the luaL_add* functions.
  • You finish by calling luaL_pushresult(&b). This call leaves the final string on the top of the stack.

During its normal operation, a string buffer uses a variable number of stack slots. So, while using a buffer, you cannot assume that you know where the top of the stack is. You can use the stack between successive calls to buffer operations as long as that use is balanced; that is, when you call a buffer operation, the stack is at the same level it was immediately after the previous buffer operation. (The only exception to this rule is luaL_addvalue.) After calling luaL_pushresult the stack is back to its level when the buffer was initialized, plus the final string on its top.


luaL_buffinit

[-0, +0, -]

void luaL_buffinit (lua_State *L, luaL_Buffer *B);

Initializes a buffer B. This function does not allocate any space; the buffer must be declared as a variable (see luaL_Buffer).


luaL_callmeta

[-0, +(0|1), e]

int luaL_callmeta (lua_State *L, int obj, const char *e);

Calls a metamethod.

If the object at index obj has a metatable and this metatable has a field e, this function calls this field and passes the object as its only argument. In this case this function returns 1 and pushes onto the stack the value returned by the call. If there is no metatable or no metamethod, this function returns 0 (without pushing any value on the stack).


luaL_checkany

[-0, +0, v]

void luaL_checkany (lua_State *L, int narg);

Checks whether the function has an argument of any type (including nil) at position narg.


luaL_checkint

[-0, +0, v]

int luaL_checkint (lua_State *L, int narg);

Checks whether the function argument narg is a number and returns this number cast to an int.


luaL_checkinteger

[-0, +0, v]

lua_Integer luaL_checkinteger (lua_State *L, int narg);

Checks whether the function argument narg is a number and returns this number cast to a lua_Integer.


luaL_checklong

[-0, +0, v]

long luaL_checklong (lua_State *L, int narg);

Checks whether the function argument narg is a number and returns this number cast to a long.


luaL_checklstring

[-0, +0, v]

const char *luaL_checklstring (lua_State *L, int narg, size_t *l);

Checks whether the function argument narg is a string and returns this string; if l is not NULL fills *l with the string's length.

This function uses lua_tolstring to get its result, so all conversions and caveats of that function apply here.


luaL_checknumber

[-0, +0, v]

lua_Number luaL_checknumber (lua_State *L, int narg);

Checks whether the function argument narg is a number and returns this number.


luaL_checkoption

[-0, +0, v]

int luaL_checkoption (lua_State *L,
                      int narg,
                      const char *def,
                      const char *const lst[]);

Checks whether the function argument narg is a string and searches for this string in the array lst (which must be NULL-terminated). Returns the index in the array where the string was found. Raises an error if the argument is not a string or if the string cannot be found.

If def is not NULL, the function uses def as a default value when there is no argument narg or if this argument is nil.

This is a useful function for mapping strings to C enums. (The usual convention in Lua libraries is to use strings instead of numbers to select options.)


luaL_checkstack

[-0, +0, v]

void luaL_checkstack (lua_State *L, int sz, const char *msg);

Grows the stack size to top + sz elements, raising an error if the stack cannot grow to that size. msg is an additional text to go into the error message.


luaL_checkstring

[-0, +0, v]

const char *luaL_checkstring (lua_State *L, int narg);

Checks whether the function argument narg is a string and returns this string.

This function uses lua_tolstring to get its result, so all conversions and caveats of that function apply here.


luaL_checktype

[-0, +0, v]

void luaL_checktype (lua_State *L, int narg, int t);

Checks whether the function argument narg has type t. See lua_type for the encoding of types for t.


luaL_checkudata

[-0, +0, v]

void *luaL_checkudata (lua_State *L, int narg, const char *tname);

Checks whether the function argument narg is a userdata of the type tname (see luaL_newmetatable).


luaL_dofile

[-0, +?, m]

int luaL_dofile (lua_State *L, const char *filename);

Loads and runs the given file. It is defined as the following macro:

     (luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))

It returns 0 if there are no errors or 1 in case of errors.


luaL_dostring

[-0, +?, m]

int luaL_dostring (lua_State *L, const char *str);

Loads and runs the given string. It is defined as the following macro:

     (luaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, 0))

It returns 0 if there are no errors or 1 in case of errors.


luaL_error

[-0, +0, v]

int luaL_error (lua_State *L, const char *fmt, ...);

Raises an error. The error message format is given by fmt plus any extra arguments, following the same rules of lua_pushfstring. It also adds at the beginning of the message the file name and the line number where the error occurred, if this information is available.

This function never returns, but it is an idiom to use it in C functions as return luaL_error(args).


luaL_getmetafield

[-0, +(0|1), m]

int luaL_getmetafield (lua_State *L, int obj, const char *e);

Pushes onto the stack the field e from the metatable of the object at index obj. If the object does not have a metatable, or if the metatable does not have this field, returns 0 and pushes nothing.


luaL_getmetatable

[-0, +1, -]

void luaL_getmetatable (lua_State *L, const char *tname);

Pushes onto the stack the metatable associated with name tname in the registry (see luaL_newmetatable).


luaL_gsub

[-0, +1, m]

const char *luaL_gsub (lua_State *L,
                       const char *s,
                       const char *p,
                       const char *r);

Creates a copy of string s by replacing any occurrence of the string p with the string r. Pushes the resulting string on the stack and returns it.


luaL_loadbuffer

[-0, +1, m]

int luaL_loadbuffer (lua_State *L,
                     const char *buff,
                     size_t sz,
                     const char *name);

Loads a buffer as a Lua chunk. This function uses lua_load to load the chunk in the buffer pointed to by buff with size sz.

This function returns the same results as lua_load. name is the chunk name, used for debug information and error messages.


luaL_loadfile

[-0, +1, m]

int luaL_loadfile (lua_State *L, const char *filename);

Loads a file as a Lua chunk. This function uses lua_load to load the chunk in the file named filename. If filename is NULL, then it loads from the standard input. The first line in the file is ignored if it starts with a #.

This function returns the same results as lua_load, but it has an extra error code LUA_ERRFILE if it cannot open/read the file.

As lua_load, this function only loads the chunk; it does not run it.


luaL_loadstring

[-0, +1, m]

int luaL_loadstring (lua_State *L, const char *s);

Loads a string as a Lua chunk. This function uses lua_load to load the chunk in the zero-terminated string s.

This function returns the same results as lua_load.

Also as lua_load, this function only loads the chunk; it does not run it.


luaL_newmetatable

[-0, +1, m]

int luaL_newmetatable (lua_State *L, const char *tname);

If the registry already has the key tname, returns 0. Otherwise, creates a new table to be used as a metatable for userdata, adds it to the registry with key tname, and returns 1.

In both cases pushes onto the stack the final value associated with tname in the registry.


luaL_newstate

[-0, +0, -]

lua_State *luaL_newstate (void);

Creates a new Lua state. It calls lua_newstate with an allocator based on the standard C realloc function and then sets a panic function (see lua_atpanic) that prints an error message to the standard error output in case of fatal errors.

Returns the new state, or NULL if there is a memory allocation error.


luaL_openlibs

[-0, +0, m]

void luaL_openlibs (lua_State *L);

Opens all standard Lua libraries into the given state.


luaL_optint

[-0, +0, v]

int luaL_optint (lua_State *L, int narg, int d);

If the function argument narg is a number, returns this number cast to an int. If this argument is absent or is nil, returns d. Otherwise, raises an error.


luaL_optinteger

[-0, +0, v]

lua_Integer luaL_optinteger (lua_State *L,
                             int narg,
                             lua_Integer d);

If the function argument narg is a number, returns this number cast to a lua_Integer. If this argument is absent or is nil, returns d. Otherwise, raises an error.


luaL_optlong

[-0, +0, v]

long luaL_optlong (lua_State *L, int narg, long d);

If the function argument narg is a number, returns this number cast to a long. If this argument is absent or is nil, returns d. Otherwise, raises an error.


luaL_optlstring

[-0, +0, v]

const char *luaL_optlstring (lua_State *L,
                             int narg,
                             const char *d,
                             size_t *l);

If the function argument narg is a string, returns this string. If this argument is absent or is nil, returns d. Otherwise, raises an error.

If l is not NULL, fills the position *l with the results's length.


luaL_optnumber

[-0, +0, v]

lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number d);

If the function argument narg is a number, returns this number. If this argument is absent or is nil, returns d. Otherwise, raises an error.


luaL_optstring

[-0, +0, v]

const char *luaL_optstring (lua_State *L,
                            int narg,
                            const char *d);

If the function argument narg is a string, returns this string. If this argument is absent or is nil, returns d. Otherwise, raises an error.


luaL_prepbuffer

[-0, +0, -]

char *luaL_prepbuffer (luaL_Buffer *B);

Returns an address to a space of size LUAL_BUFFERSIZE where you can copy a string to be added to buffer B (see luaL_Buffer). After copying the string into this space you must call luaL_addsize with the size of the string to actually add it to the buffer.


luaL_pushresult

[-?, +1, m]

void luaL_pushresult (luaL_Buffer *B);

Finishes the use of buffer B leaving the final string on the top of the stack.


luaL_ref

[-1, +0, m]

int luaL_ref (lua_State *L, int t);

Creates and returns a reference, in the table at index t, for the object at the top of the stack (and pops the object).

A reference is a unique integer key. As long as you do not manually add integer keys into table t, luaL_ref ensures the uniqueness of the key it returns. You can retrieve an object referred by reference r by calling lua_rawgeti(L, t, r). Function luaL_unref frees a reference and its associated object.

If the object at the top of the stack is nil, luaL_ref returns the constant LUA_REFNIL. The constant LUA_NOREF is guaranteed to be different from any reference returned by luaL_ref.


luaL_Reg

typedef struct luaL_Reg {
  const char *name;
  lua_CFunction func;
} luaL_Reg;

Type for arrays of functions to be registered by luaL_register. name is the function name and func is a pointer to the function. Any array of luaL_Reg must end with an sentinel entry in which both name and func are NULL.


luaL_register

[-(0|1), +1, m]

void luaL_register (lua_State *L,
                    const char *libname,
                    const luaL_Reg *l);

Opens a library.

When called with libname equal to NULL, it simply registers all functions in the list l (see luaL_Reg) into the table on the top of the stack.

When called with a non-null libname, luaL_register creates a new table t, sets it as the value of the global variable libname, sets it as the value of package.loaded[libname], and registers on it all functions in the list l. If there is a table in package.loaded[libname] or in variable libname, reuses this table instead of creating a new one.

In any case the function leaves the table on the top of the stack.


luaL_typename

[-0, +0, -]

const char *luaL_typename (lua_State *L, int index);

Returns the name of the type of the value at the given index.


luaL_typerror

[-0, +0, v]

int luaL_typerror (lua_State *L, int narg, const char *tname);

Generates an error with a message like the following:

     location: bad argument narg to 'func' (tname expected, got rt)

where location is produced by luaL_where, func is the name of the current function, and rt is the type name of the actual argument.


luaL_unref

[-0, +0, -]

void luaL_unref (lua_State *L, int t, int ref);

Releases reference ref from the table at index t (see luaL_ref). The entry is removed from the table, so that the referred object can be collected. The reference ref is also freed to be used again.

If ref is LUA_NOREF or LUA_REFNIL, luaL_unref does nothing.


luaL_where

[-0, +1, m]

void luaL_where (lua_State *L, int lvl);

Pushes onto the stack a string identifying the current position of the control at level lvl in the call stack. Typically this string has the following format:

     chunkname:currentline:

Level 0 is the running function, level 1 is the function that called the running function, etc.

This function is used to build a prefix for error messages.

5 - Standard Libraries

The standard Lua libraries provide useful functions that are implemented directly through the C API. Some of these functions provide essential services to the language (e.g., type and getmetatable); others provide access to "outside" services (e.g., I/O); and others could be implemented in Lua itself, but are quite useful or have critical performance requirements that deserve an implementation in C (e.g., table.sort).

All libraries are implemented through the official C API and are provided as separate C modules. Currently, Lua has the following standard libraries:

  • basic library, which includes the coroutine sub-library;
  • package library;
  • string manipulation;
  • table manipulation;
  • mathematical functions (sin, log, etc.);
  • input and output;
  • operating system facilities;
  • debug facilities.

Except for the basic and package libraries, each library provides all its functions as fields of a global table or as methods of its objects.

To have access to these libraries, the C host program should call the luaL_openlibs function, which opens all standard libraries. Alternatively, it can open them individually by calling luaopen_base (for the basic library), luaopen_package (for the package library), luaopen_string (for the string library), luaopen_table (for the table library), luaopen_math (for the mathematical library), luaopen_io (for the I/O library), luaopen_os (for the Operating System library), and luaopen_debug (for the debug library). These functions are declared in lualib.h and should not be called directly: you must call them like any other Lua C function, e.g., by using lua_call.

5.1 - Basic Functions

The basic library provides some core functions to Lua. If you do not include this library in your application, you should check carefully whether you need to provide implementations for some of its facilities.


assert (v [, message])

Issues an error when the value of its argument v is false (i.e., nil or false); otherwise, returns all its arguments. message is an error message; when absent, it defaults to "assertion failed!"


collectgarbage ([opt [, arg]])

This function is a generic interface to the garbage collector. It performs different functions according to its first argument, opt:

  • "collect": performs a full garbage-collection cycle. This is the default option.
  • "stop": stops the garbage collector.
  • "restart": restarts the garbage collector.
  • "count": returns the total memory in use by Lua (in Kbytes).
  • "step": performs a garbage-collection step. The step "size" is controlled by arg (larger values mean more steps) in a non-specified way. If you want to control the step size you must experimentally tune the value of arg. Returns true if the step finished a collection cycle.
  • "setpause": sets arg as the new value for the pause of the collector (see §2.10). Returns the previous value for pause.
  • "setstepmul": sets arg as the new value for the step multiplier of the collector (see §2.10). Returns the previous value for step.


dofile ([filename])

Opens the named file and executes its contents as a Lua chunk. When called without arguments, dofile executes the contents of the standard input (stdin). Returns all values returned by the chunk. In case of errors, dofile propagates the error to its caller (that is, dofile does not run in protected mode).


error (message [, level])

Terminates the last protected function called and returns message as the error message. Function error never returns.

Usually, error adds some information about the error position at the beginning of the message. The level argument specifies how to get the error position. With level 1 (the default), the error position is where the error function was called. Level 2 points the error to where the function that called error was called; and so on. Passing a level 0 avoids the addition of error position information to the message.


_G

A global variable (not a function) that holds the global environment (that is, _G._G = _G). Lua itself does not use this variable; changing its value does not affect any environment, nor vice-versa. (Use setfenv to change environments.)


getfenv ([f])

Returns the current environment in use by the function. f can be a Lua function or a number that specifies the function at that stack level: Level 1 is the function calling getfenv. If the given function is not a Lua function, or if f is 0, getfenv returns the global environment. The default for f is 1.


getmetatable (object)

If object does not have a metatable, returns nil. Otherwise, if the object's metatable has a "__metatable" field, returns the associated value. Otherwise, returns the metatable of the given object.


ipairs (t)

Returns three values: an iterator function, the table t, and 0, so that the construction

     for i,v in ipairs(t) do body end

will iterate over the pairs (1,t[1]), (2,t[2]), ···, up to the first integer key absent from the table.


load (func [, chunkname])

Loads a chunk using function func to get its pieces. Each call to func must return a string that concatenates with previous results. A return of an empty string, nil, or no value signals the end of the chunk.

If there are no errors, returns the compiled chunk as a function; otherwise, returns nil plus the error message. The environment of the returned function is the global environment.

chunkname is used as the chunk name for error messages and debug information. When absent, it defaults to "=(load)".


loadfile ([filename])

Similar to load, but gets the chunk from file filename or from the standard input, if no file name is given.


loadstring (string [, chunkname])

Similar to load, but gets the chunk from the given string.

To load and run a given string, use the idiom

     assert(loadstring(s))()

When absent, chunkname defaults to the given string.


next (table [, index])

Allows a program to traverse all fields of a table. Its first argument is a table and its second argument is an index in this table. next returns the next index of the table and its associated value. When called with nil as its second argument, next returns an initial index and its associated value. When called with the last index, or with nil in an empty table, next returns nil. If the second argument is absent, then it is interpreted as nil. In particular, you can use next(t) to check whether a table is empty.

The order in which the indices are enumerated is not specified, even for numeric indices. (To traverse a table in numeric order, use a numerical for or the ipairs function.)

The behavior of next is undefined if, during the traversal, you assign any value to a non-existent field in the table. You may however modify existing fields. In particular, you may clear existing fields.


pairs (t)

Returns three values: the next function, the table t, and nil, so that the construction

     for k,v in pairs(t) do body end

will iterate over all key–value pairs of table t.

See function next for the caveats of modifying the table during its traversal.


pcall (f, arg1, ···)

Calls function f with the given arguments in protected mode. This means that any error inside f is not propagated; instead, pcall catches the error and returns a status code. Its first result is the status code (a boolean), which is true if the call succeeds without errors. In such case, pcall also returns all results from the call, after this first result. In case of any error, pcall returns false plus the error message.


print (···)

Receives any number of arguments, and prints their values to stdout, using the tostring function to convert them to strings. print is not intended for formatted output, but only as a quick way to show a value, typically for debugging. For formatted output, use string.format.


rawequal (v1, v2)

Checks whether v1 is equal to v2, without invoking any metamethod. Returns a boolean.


rawget (table, index)

Gets the real value of table[index], without invoking any metamethod. table must be a table; index may be any value.


rawset (table, index, value)

Sets the real value of table[index] to value, without invoking any metamethod. table must be a table, index any value different from nil, and value any Lua value.

This function returns table.


select (index, ···)

If index is a number, returns all arguments after argument number index. Otherwise, index must be the string "#", and select returns the total number of extra arguments it received.


setfenv (f, table)

Sets the environment to be used by the given function. f can be a Lua function or a number that specifies the function at that stack level: Level 1 is the function calling setfenv. setfenv returns the given function.

As a special case, when f is 0 setfenv changes the environment of the running thread. In this case, setfenv returns no values.


setmetatable (table, metatable)

Sets the metatable for the given table. (You cannot change the metatable of other types from Lua, only from C.) If metatable is nil, removes the metatable of the given table. If the original metatable has a "__metatable" field, raises an error.

This function returns table.


tonumber (e [, base])

Tries to convert its argument to a number. If the argument is already a number or a string convertible to a number, then tonumber returns this number; otherwise, it returns nil.

An optional argument specifies the base to interpret the numeral. The base may be any integer between 2 and 36, inclusive. In bases above 10, the letter 'A' (in either upper or lower case) represents 10, 'B' represents 11, and so forth, with 'Z' representing 35. In base 10 (the default), the number can have a decimal part, as well as an optional exponent part (see §2.1). In other bases, only unsigned integers are accepted.


tostring (e)

Receives an argument of any type and converts it to a string in a reasonable format. For complete control of how numbers are converted, use string.format.

If the metatable of e has a "__tostring" field, then tostring calls the corresponding value with e as argument, and uses the result of the call as its result.


type (v)

Returns the type of its only argument, coded as a string. The possible results of this function are "nil" (a string, not the value nil), "number", "string", "boolean", "table", "function", "thread", and "userdata".


unpack (list [, i [, j]])

Returns the elements from the given table. This function is equivalent to
     return list[i], list[i+1], ···, list[j]

except that the above code can be written only for a fixed number of elements. By default, i is 1 and j is the length of the list, as defined by the length operator (see §2.5.5).


_VERSION

A global variable (not a function) that holds a string containing the current interpreter version. The current contents of this variable is "Lua 5.1".


xpcall (f, err)

This function is similar to pcall, except that you can set a new error handler.

xpcall calls function f in protected mode, using err as the error handler. Any error inside f is not propagated; instead, xpcall catches the error, calls the err function with the original error object, and returns a status code. Its first result is the status code (a boolean), which is true if the call succeeds without errors. In this case, xpcall also returns all results from the call, after this first result. In case of any error, xpcall returns false plus the result from err.

5.2 - Coroutine Manipulation

The operations related to coroutines comprise a sub-library of the basic library and come inside the table coroutine. See §2.11 for a general description of coroutines.


coroutine.create (f)

Creates a new coroutine, with body f. f must be a Lua function. Returns this new coroutine, an object with type "thread".


coroutine.resume (co [, val1, ···])

Starts or continues the execution of coroutine co. The first time you resume a coroutine, it starts running its body. The values val1, ··· are passed as the arguments to the body function. If the coroutine has yielded, resume restarts it; the values val1, ··· are passed as the results from the yield.

If the coroutine runs without any errors, resume returns true plus any values passed to yield (if the coroutine yields) or any values returned by the body function (if the coroutine terminates). If there is any error, resume returns false plus the error message.


coroutine.running ()

Returns the running coroutine, or nil when called by the main thread.


coroutine.status (co)

Returns the status of coroutine co, as a string: "running", if the coroutine is running (that is, it called status); "suspended", if the coroutine is suspended in a call to yield, or if it has not started running yet; "normal" if the coroutine is active but not running (that is, it has resumed another coroutine); and "dead" if the coroutine has finished its body function, or if it has stopped with an error.


coroutine.wrap (f)

Creates a new coroutine, with body f. f must be a Lua function. Returns a function that resumes the coroutine each time it is called. Any arguments passed to the function behave as the extra arguments to resume. Returns the same values returned by resume, except the first boolean. In case of error, propagates the error.


coroutine.yield (···)

Suspends the execution of the calling coroutine. The coroutine cannot be running a C function, a metamethod, or an iterator. Any arguments to yield are passed as extra results to resume.

5.3 - Modules

The package library provides basic facilities for loading and building modules in Lua. It exports two of its functions directly in the global environment: require and module. Everything else is exported in a table package.


module (name [, ···])

Creates a module. If there is a table in package.loaded[name], this table is the module. Otherwise, if there is a global table t with the given name, this table is the module. Otherwise creates a new table t and sets it as the value of the global name and the value of package.loaded[name]. This function also initializes t._NAME with the given name, t._M with the module (t itself), and t._PACKAGE with the package name (the full module name minus last component; see below). Finally, module sets t as the new environment of the current function and the new value of package.loaded[name], so that require returns t.

If name is a compound name (that is, one with components separated by dots), module creates (or reuses, if they already exist) tables for each component. For instance, if name is a.b.c, then module stores the module table in field c of field b of global a.

This function can receive optional options after the module name, where each option is a function to be applied over the module.


require (modname)

Loads the given module. The function starts by looking into the package.loaded table to determine whether modname is already loaded. If it is, then require returns the value stored at package.loaded[modname]. Otherwise, it tries to find a loader for the module.

To find a loader, require is guided by the package.loaders array. By changing this array, we can change how require looks for a module. The following explanation is based on the default configuration for package.loaders.

First require queries package.preload[modname]. If it has a value, this value (which should be a function) is the loader. Otherwise require searches for a Lua loader using the path stored in package.path. If that also fails, it searches for a C loader using the path stored in package.cpath. If that also fails, it tries an all-in-one loader (see package.loaders).

Once a loader is found, require calls the loader with a single argument, modname. If the loader returns any value, require assigns the returned value to package.loaded[modname]. If the loader returns no value and has not assigned any value to package.loaded[modname], then require assigns true to this entry. In any case, require returns the final value of package.loaded[modname].

If there is any error loading or running the module, or if it cannot find any loader for the module, then require signals an error.


package.cpath

The path used by require to search for a C loader.

Lua initializes the C path package.cpath in the same way it initializes the Lua path package.path, using the environment variable LUA_CPATH or a default path defined in luaconf.h.


package.loaded

A table used by require to control which modules are already loaded. When you require a module modname and package.loaded[modname] is not false, require simply returns the value stored there.


package.loaders

A table used by require to control how to load modules.

Each entry in this table is a searcher function. When looking for a module, require calls each of these searchers in ascending order, with the module name (the argument given to require) as its sole parameter. The function can return another function (the module loader) or a string explaining why it did not find that module (or nil if it has nothing to say). Lua initializes this table with four functions.

The first searcher simply looks for a loader in the package.preload table.

The second searcher looks for a loader as a Lua library, using the path stored at package.path. A path is a sequence of templates separated by semicolons. For each template, the searcher will change each interrogation mark in the template by filename, which is the module name with each dot replaced by a "directory separator" (such as "/" in Unix); then it will try to open the resulting file name. So, for instance, if the Lua path is the string

     "./?.lua;./?.lc;/usr/local/?/init.lua"

the search for a Lua file for module foo will try to open the files ./foo.lua, ./foo.lc, and /usr/local/foo/init.lua, in that order.

The third searcher looks for a loader as a C library, using the path given by the variable package.cpath. For instance, if the C path is the string

     "./?.so;./?.dll;/usr/local/?/init.so"

the searcher for module foo will try to open the files ./foo.so, ./foo.dll, and /usr/local/foo/init.so, in that order. Once it finds a C library, this searcher first uses a dynamic link facility to link the application with the library. Then it tries to find a C function inside the library to be used as the loader. The name of this C function is the string "luaopen_" concatenated with a copy of the module name where each dot is replaced by an underscore. Moreover, if the module name has a hyphen, its prefix up to (and including) the first hyphen is removed. For instance, if the module name is a.v1-b.c, the function name will be luaopen_b_c.

The fourth searcher tries an all-in-one loader. It searches the C path for a library for the root name of the given module. For instance, when requiring a.b.c, it will search for a C library for a. If found, it looks into it for an open function for the submodule; in our example, that would be luaopen_a_b_c. With this facility, a package can pack several C submodules into one single library, with each submodule keeping its original open function.


package.loadlib (libname, funcname)

Dynamically links the host program with the C library libname. Inside this library, looks for a function funcname and returns this function as a C function. (So, funcname must follow the protocol (see lua_CFunction)).

This is a low-level function. It completely bypasses the package and module system. Unlike require, it does not perform any path searching and does not automatically adds extensions. libname must be the complete file name of the C library, including if necessary a path and extension. funcname must be the exact name exported by the C library (which may depend on the C compiler and linker used).

This function is not supported by ANSI C. As such, it is only available on some platforms (Windows, Linux, Mac OS X, Solaris, BSD, plus other Unix systems that support the dlfcn standard).


package.path

The path used by require to search for a Lua loader.

At start-up, Lua initializes this variable with the value of the environment variable LUA_PATH or with a default path defined in luaconf.h, if the environment variable is not defined. Any ";;" in the value of the environment variable is replaced by the default path.


package.preload

A table to store loaders for specific modules (see require).


package.seeall (module)

Sets a metatable for module with its __index field referring to the global environment, so that this module inherits values from the global environment. To be used as an option to function module.

5.4 - String Manipulation

This library provides generic functions for string manipulation, such as finding and extracting substrings, and pattern matching. When indexing a string in Lua, the first character is at position 1 (not at 0, as in C). Indices are allowed to be negative and are interpreted as indexing backwards, from the end of the string. Thus, the last character is at position -1, and so on.

The string library provides all its functions inside the table string. It also sets a metatable for strings where the __index field points to the string table. Therefore, you can use the string functions in object-oriented style. For instance, string.byte(s, i) can be written as s:byte(i).

The string library assumes one-byte character encodings.


string.byte (s [, i [, j]])

Returns the internal numerical codes of the characters s[i], s[i+1], ···, s[j]. The default value for i is 1; the default value for j is i.

Note that numerical codes are not necessarily portable across platforms.


string.char (···)

Receives zero or more integers. Returns a string with length equal to the number of arguments, in which each character has the internal numerical code equal to its corresponding argument.

Note that numerical codes are not necessarily portable across platforms.


string.dump (function)

Returns a string containing a binary representation of the given function, so that a later loadstring on this string returns a copy of the function. function must be a Lua function without upvalues.


string.find (s, pattern [, init [, plain]])

Looks for the first match of pattern in the string s. If it finds a match, then find returns the indices of s where this occurrence starts and ends; otherwise, it returns nil. A third, optional numerical argument init specifies where to start the search; its default value is 1 and can be negative. A value of true as a fourth, optional argument plain turns off the pattern matching facilities, so the function does a plain "find substring" operation, with no characters in pattern being considered "magic". Note that if plain is given, then init must be given as well.

If the pattern has captures, then in a successful match the captured values are also returned, after the two indices.


string.format (formatstring, ···)

Returns a formatted version of its variable number of arguments following the description given in its first argument (which must be a string). The format string follows the same rules as the printf family of standard C functions. The only differences are that the options/modifiers *, l, L, n, p, and h are not supported and that there is an extra option, q. The q option formats a string in a form suitable to be safely read back by the Lua interpreter: the string is written between double quotes, and all double quotes, newlines, embedded zeros, and backslashes in the string are correctly escaped when written. For instance, the call
     string.format('%q', 'a string with "quotes" and \n new line')

will produce the string:

     "a string with \"quotes\" and \
      new line"

The options c, d, E, e, f, g, G, i, o, u, X, and x all expect a number as argument, whereas q and s expect a string.

This function does not accept string values containing embedded zeros, except as arguments to the q option.


string.gmatch (s, pattern)

Returns an iterator function that, each time it is called, returns the next captures from pattern over string s. If pattern specifies no captures, then the whole match is produced in each call.

As an example, the following loop

     s = "hello world from Lua"
     for w in string.gmatch(s, "%a+") do
       print(w)
     end

will iterate over all the words from string s, printing one per line. The next example collects all pairs key=value from the given string into a table:

     t = {}
     s = "from=world, to=Lua"
     for k, v in string.gmatch(s, "(%w+)=(%w+)") do
       t[k] = v
     end

For this function, a '^' at the start of a pattern does not work as an anchor, as this would prevent the iteration.


string.gsub (s, pattern, repl [, n])

Returns a copy of s in which all (or the first n, if given) occurrences of the pattern have been replaced by a replacement string specified by repl, which can be a string, a table, or a function. gsub also returns, as its second value, the total number of matches that occurred.

If repl is a string, then its value is used for replacement. The character % works as an escape character: any sequence in repl of the form %n, with n between 1 and 9, stands for the value of the n-th captured substring (see below). The sequence %0 stands for the whole match. The sequence %% stands for a single %.

If repl is a table, then the table is queried for every match, using the first capture as the key; if the pattern specifies no captures, then the whole match is used as the key.

If repl is a function, then this function is called every time a match occurs, with all captured substrings passed as arguments, in order; if the pattern specifies no captures, then the whole match is passed as a sole argument.

If the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is false or nil, then there is no replacement (that is, the original match is kept in the string).

Here are some examples:

     x = string.gsub("hello world", "(%w+)", "%1 %1")
     --> x="hello hello world world"
     
     x = string.gsub("hello world", "%w+", "%0 %0", 1)
     --> x="hello hello world"
     
     x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
     --> x="world hello Lua from"
     
     x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)
     --> x="home = /home/roberto, user = roberto"
     
     x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
           return loadstring(s)()
         end)
     --> x="4+5 = 9"
     
     local t = {name="lua", version="5.1"}
     x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
     --> x="lua-5.1.tar.gz"


string.len (s)

Receives a string and returns its length. The empty string "" has length 0. Embedded zeros are counted, so "a\000bc\000" has length 5.


string.lower (s)

Receives a string and returns a copy of this string with all uppercase letters changed to lowercase. All other characters are left unchanged. The definition of what an uppercase letter is depends on the current locale.


string.match (s, pattern [, init])

Looks for the first match of pattern in the string s. If it finds one, then match returns the captures from the pattern; otherwise it returns nil. If pattern specifies no captures, then the whole match is returned. A third, optional numerical argument init specifies where to start the search; its default value is 1 and can be negative.


string.rep (s, n)

Returns a string that is the concatenation of n copies of the string s.


string.reverse (s)

Returns a string that is the string s reversed.


string.sub (s, i [, j])

Returns the substring of s that starts at i and continues until j; i and j can be negative. If j is absent, then it is assumed to be equal to -1 (which is the same as the string length). In particular, the call string.sub(s,1,j) returns a prefix of s with length j, and string.sub(s, -i) returns a suffix of s with length i.


string.upper (s)

Receives a string and returns a copy of this string with all lowercase letters changed to uppercase. All other characters are left unchanged. The definition of what a lowercase letter is depends on the current locale.

5.4.1 - Patterns

Character Class:

A character class is used to represent a set of characters. The following combinations are allowed in describing a character class:

  • x: (where x is not one of the magic characters ^$()%.[]*+-?) represents the character x itself.
  • .: (a dot) represents all characters.
  • %a: represents all letters.
  • %c: represents all control characters.
  • %d: represents all digits.
  • %l: represents all lowercase letters.
  • %p: represents all punctuation characters.
  • %s: represents all space characters.
  • %u: represents all uppercase letters.
  • %w: represents all alphanumeric characters.
  • %x: represents all hexadecimal digits.
  • %z: represents the character with representation 0.
  • %x: (where x is any non-alphanumeric character) represents the character x. This is the standard way to escape the magic characters. Any punctuation character (even the non magic) can be preceded by a '%' when used to represent itself in a pattern.
  • [set]: represents the class which is the union of all characters in set. A range of characters can be specified by separating the end characters of the range with a '-'. All classes %x described above can also be used as components in set. All other characters in set represent themselves. For example, [%w_] (or [_%w]) represents all alphanumeric characters plus the underscore, [0-7] represents the octal digits, and [0-7%l%-] represents the octal digits plus the lowercase letters plus the '-' character.

    The interaction between ranges and classes is not defined. Therefore, patterns like [%a-z] or [a-%%] have no meaning.

  • [^set]: represents the complement of set, where set is interpreted as above.

For all classes represented by single letters (%a, %c, etc.), the corresponding uppercase letter represents the complement of the class. For instance, %S represents all non-space characters.

The definitions of letter, space, and other character groups depend on the current locale. In particular, the class [a-z] may not be equivalent to %l.

Pattern Item:

A pattern item can be

  • a single character class, which matches any single character in the class;
  • a single character class followed by '*', which matches 0 or more repetitions of characters in the class. These repetition items will always match the longest possible sequence;
  • a single character class followed by '+', which matches 1 or more repetitions of characters in the class. These repetition items will always match the longest possible sequence;
  • a single character class followed by '-', which also matches 0 or more repetitions of characters in the class. Unlike '*', these repetition items will always match the shortest possible sequence;
  • a single character class followed by '?', which matches 0 or 1 occurrence of a character in the class;
  • %n, for n between 1 and 9; such item matches a substring equal to the n-th captured string (see below);
  • %bxy, where x and y are two distinct characters; such item matches strings that start with x, end with y, and where the x and y are balanced. This means that, if one reads the string from left to right, counting +1 for an x and -1 for a y, the ending y is the first y where the count reaches 0. For instance, the item %b() matches expressions with balanced parentheses.

Pattern:

A pattern is a sequence of pattern items. A '^' at the beginning of a pattern anchors the match at the beginning of the subject string. A '$' at the end of a pattern anchors the match at the end of the subject string. At other positions, '^' and '$' have no special meaning and represent themselves.

Captures:

A pattern can contain sub-patterns enclosed in parentheses; they describe captures. When a match succeeds, the substrings of the subject string that match captures are stored (captured) for future use. Captures are numbered according to their left parentheses. For instance, in the pattern "(a*(.)%w(%s*))", the part of the string matching "a*(.)%w(%s*)" is stored as the first capture (and therefore has number 1); the character matching "." is captured with number 2, and the part matching "%s*" has number 3.

As a special case, the empty capture () captures the current string position (a number). For instance, if we apply the pattern "()aa()" on the string "flaaap", there will be two captures: 3 and 5.

A pattern cannot contain embedded zeros. Use %z instead.

5.5 - Table Manipulation

This library provides generic functions for table manipulation. It provides all its functions inside the table table.

Most functions in the table library assume that the table represents an array or a list. For these functions, when we talk about the "length" of a table we mean the result of the length operator.


table.concat (table [, sep [, i [, j]]])

Given an array where all elements are strings or numbers, returns table[i]..sep..table[i+1] ··· sep..table[j]. The default value for sep is the empty string, the default for i is 1, and the default for j is the length of the table. If i is greater than j, returns the empty string.


table.insert (table, [pos,] value)

Inserts element value at position pos in table, shifting up other elements to open space, if necessary. The default value for pos is n+1, where n is the length of the table (see §2.5.5), so that a call table.insert(t,x) inserts x at the end of table t.


table.maxn (table)

Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices. (To do its job this function does a linear traversal of the whole table.)


table.remove (table [, pos])

Removes from table the element at position pos, shifting down other elements to close the space, if necessary. Returns the value of the removed element. The default value for pos is n, where n is the length of the table, so that a call table.remove(t) removes the last element of table t.


table.sort (table [, comp])

Sorts table elements in a given order, in-place, from table[1] to table[n], where n is the length of the table. If comp is given, then it must be a function that receives two table elements, and returns true when the first is less than the second (so that not comp(a[i+1],a[i]) will be true after the sort). If comp is not given, then the standard Lua operator < is used instead.

The sort algorithm is not stable; that is, elements considered equal by the given order may have their relative positions changed by the sort.

5.6 - Mathematical Functions

This library is an interface to the standard C math library. It provides all its functions inside the table math.


math.abs (x)

Returns the absolute value of x.


math.acos (x)

Returns the arc cosine of x (in radians).


math.asin (x)

Returns the arc sine of x (in radians).


math.atan (x)

Returns the arc tangent of x (in radians).


math.atan2 (y, x)

Returns the arc tangent of y/x (in radians), but uses the signs of both parameters to find the quadrant of the result. (It also handles correctly the case of x being zero.)


math.ceil (x)

Returns the smallest integer larger than or equal to x.


math.cos (x)

Returns the cosine of x (assumed to be in radians).


math.cosh (x)

Returns the hyperbolic cosine of x.


math.deg (x)

Returns the angle x (given in radians) in degrees.


math.exp (x)

Returns the value ex.


math.floor (x)

Returns the largest integer smaller than or equal to x.


math.fmod (x, y)

Returns the remainder of the division of x by y that rounds the quotient towards zero.


math.frexp (x)

Returns m and e such that x = m2e, e is an integer and the absolute value of m is in the range [0.5, 1) (or zero when x is zero).


math.huge

The value HUGE_VAL, a value larger than or equal to any other numerical value.


math.ldexp (m, e)

Returns m2e (e should be an integer).


math.log (x)

Returns the natural logarithm of x.


math.log10 (x)

Returns the base-10 logarithm of x.


math.max (x, ···)

Returns the maximum value among its arguments.


math.min (x, ···)

Returns the minimum value among its arguments.


math.modf (x)

Returns two numbers, the integral part of x and the fractional part of x.


math.pi

The value of pi.


math.pow (x, y)

Returns xy. (You can also use the expression x^y to compute this value.)


math.rad (x)

Returns the angle x (given in degrees) in radians.


math.random ([m [, n]])

This function is an interface to the simple pseudo-random generator function rand provided by ANSI C. (No guarantees can be given for its statistical properties.)

When called without arguments, returns a uniform pseudo-random real number in the range [0,1). When called with an integer number m, math.random returns a uniform pseudo-random integer in the range [1, m]. When called with two integer numbers m and n, math.random returns a uniform pseudo-random integer in the range [m, n].


math.randomseed (x)

Sets x as the "seed" for the pseudo-random generator: equal seeds produce equal sequences of numbers.


math.sin (x)

Returns the sine of x (assumed to be in radians).


math.sinh (x)

Returns the hyperbolic sine of x.


math.sqrt (x)

Returns the square root of x. (You can also use the expression x^0.5 to compute this value.)


math.tan (x)

Returns the tangent of x (assumed to be in radians).


math.tanh (x)

Returns the hyperbolic tangent of x.

5.7 - Input and Output Facilities

The I/O library provides two different styles for file manipulation. The first one uses implicit file descriptors; that is, there are operations to set a default input file and a default output file, and all input/output operations are over these default files. The second style uses explicit file descriptors.

When using implicit file descriptors, all operations are supplied by table io. When using explicit file descriptors, the operation io.open returns a file descriptor and then all operations are supplied as methods of the file descriptor.

The table io also provides three predefined file descriptors with their usual meanings from C: io.stdin, io.stdout, and io.stderr. The I/O library never closes these files.

Unless otherwise stated, all I/O functions return nil on failure (plus an error message as a second result and a system-dependent error code as a third result) and some value different from nil on success.


io.close ([file])

Equivalent to file:close(). Without a file, closes the default output file.


io.flush ()

Equivalent to file:flush over the default output file.


io.input ([file])

When called with a file name, it opens the named file (in text mode), and sets its handle as the default input file. When called with a file handle, it simply sets this file handle as the default input file. When called without parameters, it returns the current default input file.

In case of errors this function raises the error, instead of returning an error code.


io.lines ([filename])

Opens the given file name in read mode and returns an iterator function that, each time it is called, returns a new line from the file. Therefore, the construction

     for line in io.lines(filename) do body end

will iterate over all lines of the file. When the iterator function detects the end of file, it returns nil (to finish the loop) and automatically closes the file.

The call io.lines() (with no file name) is equivalent to io.input():lines(); that is, it iterates over the lines of the default input file. In this case it does not close the file when the loop ends.


io.open (filename [, mode])

This function opens a file, in the mode specified in the string mode. It returns a new file handle, or, in case of errors, nil plus an error message.

The mode string can be any of the following:

  • "r": read mode (the default);
  • "w": write mode;
  • "a": append mode;
  • "r+": update mode, all previous data is preserved;
  • "w+": update mode, all previous data is erased;
  • "a+": append update mode, previous data is preserved, writing is only allowed at the end of file.

The mode string can also have a 'b' at the end, which is needed in some systems to open the file in binary mode. This string is exactly what is used in the standard C function fopen.


io.output ([file])

Similar to io.input, but operates over the default output file.


io.popen (prog [, mode])

Starts program prog in a separated process and returns a file handle that you can use to read data from this program (if mode is "r", the default) or to write data to this program (if mode is "w").

This function is system dependent and is not available on all platforms.


io.read (···)

Equivalent to io.input():read.


io.tmpfile ()

Returns a handle for a temporary file. This file is opened in update mode and it is automatically removed when the program ends.


io.type (obj)

Checks whether obj is a valid file handle. Returns the string "file" if obj is an open file handle, "closed file" if obj is a closed file handle, or nil if obj is not a file handle.


io.write (···)

Equivalent to io.output():write.


file:close ()

Closes file. Note that files are automatically closed when their handles are garbage collected, but that takes an unpredictable amount of time to happen.


file:flush ()

Saves any written data to file.


file:lines ()

Returns an iterator function that, each time it is called, returns a new line from the file. Therefore, the construction

     for line in file:lines() do body end

will iterate over all lines of the file. (Unlike io.lines, this function does not close the file when the loop ends.)


file:read (···)

Reads the file file, according to the given formats, which specify what to read. For each format, the function returns a string (or a number) with the characters read, or nil if it cannot read data with the specified format. When called without formats, it uses a default format that reads the entire next line (see below).

The available formats are

  • "*n": reads a number; this is the only format that returns a number instead of a string.
  • "*a": reads the whole file, starting at the current position. On end of file, it returns the empty string.
  • "*l": reads the next line (skipping the end of line), returning nil on end of file. This is the default format.
  • number: reads a string with up to this number of characters, returning nil on end of file. If number is zero, it reads nothing and returns an empty string, or nil on end of file.


file:seek ([whence] [, offset])

Sets and gets the file position, measured from the beginning of the file, to the position given by offset plus a base specified by the string whence, as follows:

  • "set": base is position 0 (beginning of the file);
  • "cur": base is current position;
  • "end": base is end of file;

In case of success, function seek returns the final file position, measured in bytes from the beginning of the file. If this function fails, it returns nil, plus a string describing the error.

The default value for whence is "cur", and for offset is 0. Therefore, the call file:seek() returns the current file position, without changing it; the call file:seek("set") sets the position to the beginning of the file (and returns 0); and the call file:seek("end") sets the position to the end of the file, and returns its size.


file:setvbuf (mode [, size])

Sets the buffering mode for an output file. There are three available modes:

  • "no": no buffering; the result of any output operation appears immediately.
  • "full": full buffering; output operation is performed only when the buffer is full (or when you explicitly flush the file (see io.flush)).
  • "line": line buffering; output is buffered until a newline is output or there is any input from some special files (such as a terminal device).

For the last two cases, size specifies the size of the buffer, in bytes. The default is an appropriate size.


file:write (···)

Writes the value of each of its arguments to the file. The arguments must be strings or numbers. To write other values, use tostring or string.format before write.

5.8 - Operating System Facilities

This library is implemented through table os.


os.clock ()

Returns an approximation of the amount in seconds of CPU time used by the program.


os.date ([format [, time]])

Returns a string or a table containing date and time, formatted according to the given string format.

If the time argument is present, this is the time to be formatted (see the os.time function for a description of this value). Otherwise, date formats the current time.

If format starts with '!', then the date is formatted in Coordinated Universal Time. After this optional character, if format is the string "*t", then date returns a table with the following fields: year (four digits), month (1--12), day (1--31), hour (0--23), min (0--59), sec (0--61), wday (weekday, Sunday is 1), yday (day of the year), and isdst (daylight saving flag, a boolean).

If format is not "*t", then date returns the date as a string, formatted according to the same rules as the C function strftime.

When called without arguments, date returns a reasonable date and time representation that depends on the host system and on the current locale (that is, os.date() is equivalent to os.date("%c")).


os.difftime (t2, t1)

Returns the number of seconds from time t1 to time t2. In POSIX, Windows, and some other systems, this value is exactly t2-t1.


os.execute ([command])

This function is equivalent to the C function system. It passes command to be executed by an operating system shell. It returns a status code, which is system-dependent. If command is absent, then it returns nonzero if a shell is available and zero otherwise.


os.exit ([code])

Calls the C function exit, with an optional code, to terminate the host program. The default value for code is the success code.


os.getenv (varname)

Returns the value of the process environment variable varname, or nil if the variable is not defined.


os.remove (filename)

Deletes the file or directory with the given name. Directories must be empty to be removed. If this function fails, it returns nil, plus a string describing the error.


os.rename (oldname, newname)

Renames file or directory named oldname to newname. If this function fails, it returns nil, plus a string describing the error.


os.setlocale (locale [, category])

Sets the current locale of the program. locale is a string specifying a locale; category is an optional string describing which category to change: "all", "collate", "ctype", "monetary", "numeric", or "time"; the default category is "all". The function returns the name of the new locale, or nil if the request cannot be honored.

If locale is the empty string, the current locale is set to an implementation-defined native locale. If locale is the string "C", the current locale is set to the standard C locale.

When called with nil as the first argument, this function only returns the name of the current locale for the given category.


os.time ([table])

Returns the current time when called without arguments, or a time representing the date and time specified by the given table. This table must have fields year, month, and day, and may have fields hour, min, sec, and isdst (for a description of these fields, see the os.date function).

The returned value is a number, whose meaning depends on your system. In POSIX, Windows, and some other systems, this number counts the number of seconds since some given start time (the "epoch"). In other systems, the meaning is not specified, and the number returned by time can be used only as an argument to date and difftime.


os.tmpname ()

Returns a string with a file name that can be used for a temporary file. The file must be explicitly opened before its use and explicitly removed when no longer needed.

On some systems (POSIX), this function also creates a file with that name, to avoid security risks. (Someone else might create the file with wrong permissions in the time between getting the name and creating the file.) You still have to open the file to use it and to remove it (even if you do not use it).

When possible, you may prefer to use io.tmpfile, which automatically removes the file when the program ends.

5.9 - The Debug Library

This library provides the functionality of the debug interface to Lua programs. You should exert care when using this library. The functions provided here should be used exclusively for debugging and similar tasks, such as profiling. Please resist the temptation to use them as a usual programming tool: they can be very slow. Moreover, several of these functions violate some assumptions about Lua code (e.g., that variables local to a function cannot be accessed from outside or that userdata metatables cannot be changed by Lua code) and therefore can compromise otherwise secure code.

All functions in this library are provided inside the debug table. All functions that operate over a thread have an optional first argument which is the thread to operate over. The default is always the current thread.


debug.debug ()

Enters an interactive mode with the user, running each string that the user enters. Using simple commands and other debug facilities, the user can inspect global and local variables, change their values, evaluate expressions, and so on. A line containing only the word cont finishes this function, so that the caller continues its execution.

Note that commands for debug.debug are not lexically nested within any function, and so have no direct access to local variables.


debug.getfenv (o)

Returns the environment of object o.


debug.gethook ([thread])

Returns the current hook settings of the thread, as three values: the current hook function, the current hook mask, and the current hook count (as set by the debug.sethook function).


debug.getinfo ([thread,] function [, what])

Returns a table with information about a function. You can give the function directly, or you can give a number as the value of function, which means the function running at level function of the call stack of the given thread: level 0 is the current function (getinfo itself); level 1 is the function that called getinfo; and so on. If function is a number larger than the number of active functions, then getinfo returns nil.

The returned table can contain all the fields returned by lua_getinfo, with the string what describing which fields to fill in. The default for what is to get all information available, except the table of valid lines. If present, the option 'f' adds a field named func with the function itself. If present, the option 'L' adds a field named activelines with the table of valid lines.

For instance, the expression debug.getinfo(1,"n").name returns a table with a name for the current function, if a reasonable name can be found, and the expression debug.getinfo(print) returns a table with all available information about the print function.


debug.getlocal ([thread,] level, local)

This function returns the name and the value of the local variable with index local of the function at level level of the stack. (The first parameter or local variable has index 1, and so on, until the last active local variable.) The function returns nil if there is no local variable with the given index, and raises an error when called with a level out of range. (You can call debug.getinfo to check whether the level is valid.)

Variable names starting with '(' (open parentheses) represent internal variables (loop control variables, temporaries, and C function locals).


debug.getmetatable (object)

Returns the metatable of the given object or nil if it does not have a metatable.


debug.getregistry ()

Returns the registry table (see §3.5).


debug.getupvalue (func, up)

This function returns the name and the value of the upvalue with index up of the function func. The function returns nil if there is no upvalue with the given index.


debug.setfenv (object, table)

Sets the environment of the given object to the given table. Returns object.


debug.sethook ([thread,] hook, mask [, count])

Sets the given function as a hook. The string mask and the number count describe when the hook will be called. The string mask may have the following characters, with the given meaning:

  • "c": the hook is called every time Lua calls a function;
  • "r": the hook is called every time Lua returns from a function;
  • "l": the hook is called every time Lua enters a new line of code.

With a count different from zero, the hook is called after every count instructions.

When called without arguments, debug.sethook turns off the hook.

When the hook is called, its first parameter is a string describing the event that has triggered its call: "call", "return" (or "tail return", when simulating a return from a tail call), "line", and "count". For line events, the hook also gets the new line number as its second parameter. Inside a hook, you can call getinfo with level 2 to get more information about the running function (level 0 is the getinfo function, and level 1 is the hook function), unless the event is "tail return". In this case, Lua is only simulating the return, and a call to getinfo will return invalid data.


debug.setlocal ([thread,] level, local, value)

This function assigns the value value to the local variable with index local of the function at level level of the stack. The function returns nil if there is no local variable with the given index, and raises an error when called with a level out of range. (You can call getinfo to check whether the level is valid.) Otherwise, it returns the name of the local variable.


debug.setmetatable (object, table)

Sets the metatable for the given object to the given table (which can be nil).


debug.setupvalue (func, up, value)

This function assigns the value value to the upvalue with index up of the function func. The function returns nil if there is no upvalue with the given index. Otherwise, it returns the name of the upvalue.


debug.traceback ([thread,] [message [, level]])

Returns a string with a traceback of the call stack. An optional message string is appended at the beginning of the traceback. An optional level number tells at which level to start the traceback (default is 1, the function calling traceback).

6 - Lua Stand-alone

Although Lua has been designed as an extension language, to be embedded in a host C program, it is also frequently used as a stand-alone language. An interpreter for Lua as a stand-alone language, called simply lua, is provided with the standard distribution. The stand-alone interpreter includes all standard libraries, including the debug library. Its usage is:

     lua [options] [script [args]]

The options are:

  • -e stat: executes string stat;
  • -l mod: "requires" mod;
  • -i: enters interactive mode after running script;
  • -v: prints version information;
  • --: stops handling options;
  • -: executes stdin as a file and stops handling options.

After handling its options, lua runs the given script, passing to it the given args as string arguments. When called without arguments, lua behaves as lua -v -i when the standard input (stdin) is a terminal, and as lua - otherwise.

Before running any argument, the interpreter checks for an environment variable LUA_INIT. If its format is @filename, then lua executes the file. Otherwise, lua executes the string itself.

All options are handled in order, except -i. For instance, an invocation like

     $ lua -e'a=1' -e 'print(a)' script.lua

will first set a to 1, then print the value of a (which is '1'), and finally run the file script.lua with no arguments. (Here $ is the shell prompt. Your prompt may be different.)

Before starting to run the script, lua collects all arguments in the command line in a global table called arg. The script name is stored at index 0, the first argument after the script name goes to index 1, and so on. Any arguments before the script name (that is, the interpreter name plus the options) go to negative indices. For instance, in the call

     $ lua -la b.lua t1 t2

the interpreter first runs the file a.lua, then creates a table

     arg = { [-2] = "lua", [-1] = "-la",
             [0] = "b.lua",
             [1] = "t1", [2] = "t2" }

and finally runs the file b.lua. The script is called with arg[1], arg[2], ··· as arguments; it can also access these arguments with the vararg expression '...'.

In interactive mode, if you write an incomplete statement, the interpreter waits for its completion by issuing a different prompt.

If the global variable _PROMPT contains a string, then its value is used as the prompt. Similarly, if the global variable _PROMPT2 contains a string, its value is used as the secondary prompt (issued during incomplete statements). Therefore, both prompts can be changed directly on the command line or in any Lua programs by assigning to _PROMPT. See the next example:

     $ lua -e"_PROMPT='myprompt> '" -i

(The outer pair of quotes is for the shell, the inner pair is for Lua.) Note the use of -i to enter interactive mode; otherwise, the program would just end silently right after the assignment to _PROMPT.

To allow the use of Lua as a script interpreter in Unix systems, the stand-alone interpreter skips the first line of a chunk if it starts with #. Therefore, Lua scripts can be made into executable programs by using chmod +x and the #! form, as in

     #!/usr/local/bin/lua

(Of course, the location of the Lua interpreter may be different in your machine. If lua is in your PATH, then

     #!/usr/bin/env lua

is a more portable solution.)

7 - Incompatibilities with the Previous Version

Here we list the incompatibilities that you may find when moving a program from Lua 5.0 to Lua 5.1. You can avoid most of the incompatibilities compiling Lua with appropriate options (see file luaconf.h). However, all these compatibility options will be removed in the next version of Lua.

7.1 - Changes in the Language

  • The vararg system changed from the pseudo-argument arg with a table with the extra arguments to the vararg expression. (See compile-time option LUA_COMPAT_VARARG in luaconf.h.)
  • There was a subtle change in the scope of the implicit variables of the for statement and for the repeat statement.
  • The long string/long comment syntax ([[string]]) does not allow nesting. You can use the new syntax ([=[string]=]) in these cases. (See compile-time option LUA_COMPAT_LSTR in luaconf.h.)

7.2 - Changes in the Libraries

  • Function string.gfind was renamed string.gmatch. (See compile-time option LUA_COMPAT_GFIND in luaconf.h.)
  • When string.gsub is called with a function as its third argument, whenever this function returns nil or false the replacement string is the whole match, instead of the empty string.
  • Function table.setn was deprecated. Function table.getn corresponds to the new length operator (#); use the operator instead of the function. (See compile-time option LUA_COMPAT_GETN in luaconf.h.)
  • Function loadlib was renamed package.loadlib. (See compile-time option LUA_COMPAT_LOADLIB in luaconf.h.)
  • Function math.mod was renamed math.fmod. (See compile-time option LUA_COMPAT_MOD in luaconf.h.)
  • Functions table.foreach and table.foreachi are deprecated. You can use a for loop with pairs or ipairs instead.
  • There were substantial changes in function require due to the new module system. However, the new behavior is mostly compatible with the old, but require gets the path from package.path instead of from LUA_PATH.
  • Function collectgarbage has different arguments. Function gcinfo is deprecated; use collectgarbage("count") instead.

7.3 - Changes in the API

  • The luaopen_* functions (to open libraries) cannot be called directly, like a regular C function. They must be called through Lua, like a Lua function.
  • Function lua_open was replaced by lua_newstate to allow the user to set a memory-allocation function. You can use luaL_newstate from the standard library to create a state with a standard allocation function (based on realloc).
  • Functions luaL_getn and luaL_setn (from the auxiliary library) are deprecated. Use lua_objlen instead of luaL_getn and nothing instead of luaL_setn.
  • Function luaL_openlib was replaced by luaL_register.
  • Function luaL_checkudata now throws an error when the given value is not a userdata of the expected type. (In Lua 5.0 it returned NULL.)

8 - The Complete Syntax of Lua

Here is the complete syntax of Lua in extended BNF. (It does not describe operator precedences.)


	chunk ::= {stat [`;´]} [laststat [`;´]]

	block ::= chunk

	stat ::=  varlist `=´ explist | 
		 functioncall | 
		 do block end | 
		 while exp do block end | 
		 repeat block until exp | 
		 if exp then block {elseif exp then block} [else block] end | 
		 for Name `=´ exp `,´ exp [`,´ exp] do block end | 
		 for namelist in explist do block end | 
		 function funcname funcbody | 
		 local function Name funcbody | 
		 local namelist [`=´ explist] 

	laststat ::= return [explist] | break

	funcname ::= Name {`.´ Name} [`:´ Name]

	varlist ::= var {`,´ var}

	var ::=  Name | prefixexp `[´ exp `]´ | prefixexp `.´ Name 

	namelist ::= Name {`,´ Name}

	explist ::= {exp `,´} exp

	exp ::=  nil | false | true | Number | String | `...´ | function | 
		 prefixexp | tableconstructor | exp binop exp | unop exp 

	prefixexp ::= var | functioncall | `(´ exp `)´

	functioncall ::=  prefixexp args | prefixexp `:´ Name args 

	args ::=  `(´ [explist] `)´ | tableconstructor | String 

	function ::= function funcbody

	funcbody ::= `(´ [parlist] `)´ block end

	parlist ::= namelist [`,´ `...´] | `...´

	tableconstructor ::= `{´ [fieldlist] `}´

	fieldlist ::= field {fieldsep field} [fieldsep]

	field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp

	fieldsep ::= `,´ | `;´

	binop ::= `+´ | `-´ | `*´ | `/´ | `^´ | `%´ | `..´ | 
		 `<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´ | 
		 and | or

	unop ::= `-´ | not | `#´


Last update: Mon Feb 13 18:54:19 BRST 2012 genometools-1.5.1/src/external/lua-5.1.5/doc/readme.html000066400000000000000000000015021211610345200225700ustar00rootroot00000000000000 Lua documentation

Lua Documentation

This is the documentation included in the source distribution of Lua 5.1.5. Lua's official web site contains updated documentation, especially the reference manual.


Last update: Fri Feb 3 09:44:42 BRST 2012 genometools-1.5.1/src/external/lua-5.1.5/etc/000077500000000000000000000000001211610345200204555ustar00rootroot00000000000000genometools-1.5.1/src/external/lua-5.1.5/etc/Makefile000066400000000000000000000016201211610345200221140ustar00rootroot00000000000000# makefile for Lua etc TOP= .. LIB= $(TOP)/src INC= $(TOP)/src BIN= $(TOP)/src SRC= $(TOP)/src TST= $(TOP)/test CC= gcc CFLAGS= -O2 -Wall -I$(INC) $(MYCFLAGS) MYCFLAGS= MYLDFLAGS= -Wl,-E MYLIBS= -lm #MYLIBS= -lm -Wl,-E -ldl -lreadline -lhistory -lncurses RM= rm -f default: @echo 'Please choose a target: min noparser one strict clean' min: min.c $(CC) $(CFLAGS) $@.c -L$(LIB) -llua $(MYLIBS) echo 'print"Hello there!"' | ./a.out noparser: noparser.o $(CC) noparser.o $(SRC)/lua.o -L$(LIB) -llua $(MYLIBS) $(BIN)/luac $(TST)/hello.lua -./a.out luac.out -./a.out -e'a=1' one: $(CC) $(CFLAGS) all.c $(MYLIBS) ./a.out $(TST)/hello.lua strict: -$(BIN)/lua -e 'print(a);b=2' -$(BIN)/lua -lstrict -e 'print(a)' -$(BIN)/lua -e 'function f() b=2 end f()' -$(BIN)/lua -lstrict -e 'function f() b=2 end f()' clean: $(RM) a.out core core.* *.o luac.out .PHONY: default min noparser one strict clean genometools-1.5.1/src/external/lua-5.1.5/etc/README000066400000000000000000000017141211610345200213400ustar00rootroot00000000000000This directory contains some useful files and code. Unlike the code in ../src, everything here is in the public domain. If any of the makes fail, you're probably not using the same libraries used to build Lua. Set MYLIBS in Makefile accordingly. all.c Full Lua interpreter in a single file. Do "make one" for a demo. lua.hpp Lua header files for C++ using 'extern "C"'. lua.ico A Lua icon for Windows (and web sites: save as favicon.ico). Drawn by hand by Markus Gritsch . lua.pc pkg-config data for Lua luavs.bat Script to build Lua under "Visual Studio .NET Command Prompt". Run it from the toplevel as etc\luavs.bat. min.c A minimal Lua interpreter. Good for learning and for starting your own. Do "make min" for a demo. noparser.c Linking with noparser.o avoids loading the parsing modules in lualib.a. Do "make noparser" for a demo. strict.lua Traps uses of undeclared global variables. Do "make strict" for a demo. genometools-1.5.1/src/external/lua-5.1.5/etc/all.c000066400000000000000000000012461211610345200213740ustar00rootroot00000000000000/* * all.c -- Lua core, libraries and interpreter in a single file */ #define luaall_c #include "lapi.c" #include "lcode.c" #include "ldebug.c" #include "ldo.c" #include "ldump.c" #include "lfunc.c" #include "lgc.c" #include "llex.c" #include "lmem.c" #include "lobject.c" #include "lopcodes.c" #include "lparser.c" #include "lstate.c" #include "lstring.c" #include "ltable.c" #include "ltm.c" #include "lundump.c" #include "lvm.c" #include "lzio.c" #include "lauxlib.c" #include "lbaselib.c" #include "ldblib.c" #include "liolib.c" #include "linit.c" #include "lmathlib.c" #include "loadlib.c" #include "loslib.c" #include "lstrlib.c" #include "ltablib.c" #include "lua.c" genometools-1.5.1/src/external/lua-5.1.5/etc/lua.hpp000066400000000000000000000002771211610345200217550ustar00rootroot00000000000000// lua.hpp // Lua header files for C++ // <> not supplied automatically because Lua also compiles as C++ extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } genometools-1.5.1/src/external/lua-5.1.5/etc/lua.ico000066400000000000000000000020661211610345200217360ustar00rootroot00000000000000 &(( @DDHDDDDDDDDDDDDDDpDDDDDDDDHDDDDDDDDDDtDDDDDDDDDDGDDDDDDDDDDDDDHDDOxD@DDDOODDHDDDOOODHDDDDOODHDDDDDDOODDDDDDOOtDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDtDHDDDDDDHDHDDDDDDHD@DDDDDDHDDDDDDDDtDtDDDDDDGDDDDDDDDwpDDDDDDDDHxDHpDDDDDDDDpDDDDDDDDDDDGDDHDDDGDDDGDDxDHpwp????G( DHDDDHDDDDDDDDDD@DDDDDHDDDDDDDDDDDDDDDDDDDDDDDDDDDDDHDDD@DDDDDDHtGDHDDDDtG?DDDDDDDDDHDDDH0genometools-1.5.1/src/external/lua-5.1.5/etc/lua.pc000066400000000000000000000012221211610345200215570ustar00rootroot00000000000000# lua.pc -- pkg-config data for Lua # vars from install Makefile # grep '^V=' ../Makefile V= 5.1 # grep '^R=' ../Makefile R= 5.1.5 # grep '^INSTALL_.*=' ../Makefile | sed 's/INSTALL_TOP/prefix/' prefix= /usr/local INSTALL_BIN= ${prefix}/bin INSTALL_INC= ${prefix}/include INSTALL_LIB= ${prefix}/lib INSTALL_MAN= ${prefix}/man/man1 INSTALL_LMOD= ${prefix}/share/lua/${V} INSTALL_CMOD= ${prefix}/lib/lua/${V} # canonical vars exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: Lua Description: An Extensible Extension Language Version: ${R} Requires: Libs: -L${libdir} -llua -lm Cflags: -I${includedir} # (end of lua.pc) genometools-1.5.1/src/external/lua-5.1.5/etc/luavs.bat000066400000000000000000000020561211610345200223020ustar00rootroot00000000000000@rem Script to build Lua under "Visual Studio .NET Command Prompt". @rem Do not run from this directory; run it from the toplevel: etc\luavs.bat . @rem It creates lua51.dll, lua51.lib, lua.exe, and luac.exe in src. @rem (contributed by David Manura and Mike Pall) @setlocal @set MYCOMPILE=cl /nologo /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE @set MYLINK=link /nologo @set MYMT=mt /nologo cd src %MYCOMPILE% /DLUA_BUILD_AS_DLL l*.c del lua.obj luac.obj %MYLINK% /DLL /out:lua51.dll l*.obj if exist lua51.dll.manifest^ %MYMT% -manifest lua51.dll.manifest -outputresource:lua51.dll;2 %MYCOMPILE% /DLUA_BUILD_AS_DLL lua.c %MYLINK% /out:lua.exe lua.obj lua51.lib if exist lua.exe.manifest^ %MYMT% -manifest lua.exe.manifest -outputresource:lua.exe %MYCOMPILE% l*.c print.c del lua.obj linit.obj lbaselib.obj ldblib.obj liolib.obj lmathlib.obj^ loslib.obj ltablib.obj lstrlib.obj loadlib.obj %MYLINK% /out:luac.exe *.obj if exist luac.exe.manifest^ %MYMT% -manifest luac.exe.manifest -outputresource:luac.exe del *.obj *.manifest cd .. genometools-1.5.1/src/external/lua-5.1.5/etc/min.c000066400000000000000000000014401211610345200214030ustar00rootroot00000000000000/* * min.c -- a minimal Lua interpreter * loads stdin only with minimal error handling. * no interaction, and no standard library, only a "print" function. */ #include #include "lua.h" #include "lauxlib.h" static int print(lua_State *L) { int n=lua_gettop(L); int i; for (i=1; i<=n; i++) { if (i>1) printf("\t"); if (lua_isstring(L,i)) printf("%s",lua_tostring(L,i)); else if (lua_isnil(L,i)) printf("%s","nil"); else if (lua_isboolean(L,i)) printf("%s",lua_toboolean(L,i) ? "true" : "false"); else printf("%s:%p",luaL_typename(L,i),lua_topointer(L,i)); } printf("\n"); return 0; } int main(void) { lua_State *L=lua_open(); lua_register(L,"print",print); if (luaL_dofile(L,NULL)!=0) fprintf(stderr,"%s\n",lua_tostring(L,-1)); lua_close(L); return 0; } genometools-1.5.1/src/external/lua-5.1.5/etc/noparser.c000066400000000000000000000023451211610345200224560ustar00rootroot00000000000000/* * The code below can be used to make a Lua core that does not contain the * parsing modules (lcode, llex, lparser), which represent 35% of the total core. * You'll only be able to load binary files and strings, precompiled with luac. * (Of course, you'll have to build luac with the original parsing modules!) * * To use this module, simply compile it ("make noparser" does that) and list * its object file before the Lua libraries. The linker should then not load * the parsing modules. To try it, do "make luab". * * If you also want to avoid the dump module (ldump.o), define NODUMP. * #define NODUMP */ #define LUA_CORE #include "llex.h" #include "lparser.h" #include "lzio.h" LUAI_FUNC void luaX_init (lua_State *L) { UNUSED(L); } LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) { UNUSED(z); UNUSED(buff); UNUSED(name); lua_pushliteral(L,"parser not loaded"); lua_error(L); return NULL; } #ifdef NODUMP #include "lundump.h" LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) { UNUSED(f); UNUSED(w); UNUSED(data); UNUSED(strip); #if 1 UNUSED(L); return 0; #else lua_pushliteral(L,"dumper not loaded"); lua_error(L); #endif } #endif genometools-1.5.1/src/external/lua-5.1.5/etc/strict.lua000066400000000000000000000016401211610345200224710ustar00rootroot00000000000000-- -- strict.lua -- checks uses of undeclared global variables -- All global variables must be 'declared' through a regular assignment -- (even assigning nil will do) in a main chunk before being used -- anywhere or assigned to inside a function. -- local getinfo, error, rawset, rawget = debug.getinfo, error, rawset, rawget local mt = getmetatable(_G) if mt == nil then mt = {} setmetatable(_G, mt) end mt.__declared = {} local function what () local d = getinfo(3, "S") return d and d.what or "C" end mt.__newindex = function (t, n, v) if not mt.__declared[n] then local w = what() if w ~= "main" and w ~= "C" then error("assign to undeclared variable '"..n.."'", 2) end mt.__declared[n] = true end rawset(t, n, v) end mt.__index = function (t, n) if not mt.__declared[n] and what() ~= "C" then error("variable '"..n.."' is not declared", 2) end return rawget(t, n) end genometools-1.5.1/src/external/lua-5.1.5/src/000077500000000000000000000000001211610345200204715ustar00rootroot00000000000000genometools-1.5.1/src/external/lua-5.1.5/src/Makefile000066400000000000000000000137651211610345200221450ustar00rootroot00000000000000# makefile for building Lua # see ../INSTALL for installation instructions # see ../Makefile and luaconf.h for further customization # == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT ======================= # Your platform. See PLATS for possible values. PLAT= none CC= gcc CFLAGS= -O2 -Wall $(MYCFLAGS) AR= ar rcu RANLIB= ranlib RM= rm -f LIBS= -lm $(MYLIBS) MYCFLAGS= MYLDFLAGS= MYLIBS= # == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE ========= PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris LUA_A= liblua.a CORE_O= lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o \ lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \ lundump.o lvm.o lzio.o LIB_O= lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o \ lstrlib.o loadlib.o linit.o LUA_T= lua LUA_O= lua.o LUAC_T= luac LUAC_O= luac.o print.o ALL_O= $(CORE_O) $(LIB_O) $(LUA_O) $(LUAC_O) ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) ALL_A= $(LUA_A) default: $(PLAT) all: $(ALL_T) o: $(ALL_O) a: $(ALL_A) $(LUA_A): $(CORE_O) $(LIB_O) $(AR) $@ $(CORE_O) $(LIB_O) # DLL needs all object files $(RANLIB) $@ $(LUA_T): $(LUA_O) $(LUA_A) $(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(LUA_A) $(LIBS) $(LUAC_T): $(LUAC_O) $(LUA_A) $(CC) -o $@ $(MYLDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS) clean: $(RM) $(ALL_T) $(ALL_O) depend: @$(CC) $(CFLAGS) -MM l*.c print.c echo: @echo "PLAT = $(PLAT)" @echo "CC = $(CC)" @echo "CFLAGS = $(CFLAGS)" @echo "AR = $(AR)" @echo "RANLIB = $(RANLIB)" @echo "RM = $(RM)" @echo "MYCFLAGS = $(MYCFLAGS)" @echo "MYLDFLAGS = $(MYLDFLAGS)" @echo "MYLIBS = $(MYLIBS)" # convenience targets for popular platforms none: @echo "Please choose a platform:" @echo " $(PLATS)" aix: $(MAKE) all CC="xlc" CFLAGS="-O2 -DLUA_USE_POSIX -DLUA_USE_DLOPEN" MYLIBS="-ldl" MYLDFLAGS="-brtl -bexpall" ansi: $(MAKE) all MYCFLAGS=-DLUA_ANSI bsd: $(MAKE) all MYCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" MYLIBS="-Wl,-E" freebsd: $(MAKE) all MYCFLAGS="-DLUA_USE_LINUX" MYLIBS="-Wl,-E -lreadline" generic: $(MAKE) all MYCFLAGS= linux: $(MAKE) all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses" macosx: $(MAKE) all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-lreadline" # use this on Mac OS X 10.3- # $(MAKE) all MYCFLAGS=-DLUA_USE_MACOSX mingw: $(MAKE) "LUA_A=lua51.dll" "LUA_T=lua.exe" \ "AR=$(CC) -shared -o" "RANLIB=strip --strip-unneeded" \ "MYCFLAGS=-DLUA_BUILD_AS_DLL" "MYLIBS=" "MYLDFLAGS=-s" lua.exe $(MAKE) "LUAC_T=luac.exe" luac.exe posix: $(MAKE) all MYCFLAGS=-DLUA_USE_POSIX solaris: $(MAKE) all MYCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" MYLIBS="-ldl" # list targets that do not create files (but not all makes understand .PHONY) .PHONY: all $(PLATS) default o a clean depend echo none # DO NOT DELETE lapi.o: lapi.c lua.h luaconf.h lapi.h lobject.h llimits.h ldebug.h \ lstate.h ltm.h lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h \ lundump.h lvm.h lauxlib.o: lauxlib.c lua.h luaconf.h lauxlib.h lbaselib.o: lbaselib.c lua.h luaconf.h lauxlib.h lualib.h lcode.o: lcode.c lua.h luaconf.h lcode.h llex.h lobject.h llimits.h \ lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h lgc.h \ ltable.h ldblib.o: ldblib.c lua.h luaconf.h lauxlib.h lualib.h ldebug.o: ldebug.c lua.h luaconf.h lapi.h lobject.h llimits.h lcode.h \ llex.h lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h \ lfunc.h lstring.h lgc.h ltable.h lvm.h ldo.o: ldo.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \ lzio.h lmem.h ldo.h lfunc.h lgc.h lopcodes.h lparser.h lstring.h \ ltable.h lundump.h lvm.h ldump.o: ldump.c lua.h luaconf.h lobject.h llimits.h lstate.h ltm.h \ lzio.h lmem.h lundump.h lfunc.o: lfunc.c lua.h luaconf.h lfunc.h lobject.h llimits.h lgc.h lmem.h \ lstate.h ltm.h lzio.h lgc.o: lgc.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \ lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h linit.o: linit.c lua.h luaconf.h lualib.h lauxlib.h liolib.o: liolib.c lua.h luaconf.h lauxlib.h lualib.h llex.o: llex.c lua.h luaconf.h ldo.h lobject.h llimits.h lstate.h ltm.h \ lzio.h lmem.h llex.h lparser.h lstring.h lgc.h ltable.h lmathlib.o: lmathlib.c lua.h luaconf.h lauxlib.h lualib.h lmem.o: lmem.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \ ltm.h lzio.h lmem.h ldo.h loadlib.o: loadlib.c lua.h luaconf.h lauxlib.h lualib.h lobject.o: lobject.c lua.h luaconf.h ldo.h lobject.h llimits.h lstate.h \ ltm.h lzio.h lmem.h lstring.h lgc.h lvm.h lopcodes.o: lopcodes.c lopcodes.h llimits.h lua.h luaconf.h loslib.o: loslib.c lua.h luaconf.h lauxlib.h lualib.h lparser.o: lparser.c lua.h luaconf.h lcode.h llex.h lobject.h llimits.h \ lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h \ lfunc.h lstring.h lgc.h ltable.h lstate.o: lstate.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \ ltm.h lzio.h lmem.h ldo.h lfunc.h lgc.h llex.h lstring.h ltable.h lstring.o: lstring.c lua.h luaconf.h lmem.h llimits.h lobject.h lstate.h \ ltm.h lzio.h lstring.h lgc.h lstrlib.o: lstrlib.c lua.h luaconf.h lauxlib.h lualib.h ltable.o: ltable.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \ ltm.h lzio.h lmem.h ldo.h lgc.h ltable.h ltablib.o: ltablib.c lua.h luaconf.h lauxlib.h lualib.h ltm.o: ltm.c lua.h luaconf.h lobject.h llimits.h lstate.h ltm.h lzio.h \ lmem.h lstring.h lgc.h ltable.h lua.o: lua.c lua.h luaconf.h lauxlib.h lualib.h luac.o: luac.c lua.h luaconf.h lauxlib.h ldo.h lobject.h llimits.h \ lstate.h ltm.h lzio.h lmem.h lfunc.h lopcodes.h lstring.h lgc.h \ lundump.h lundump.o: lundump.c lua.h luaconf.h ldebug.h lstate.h lobject.h \ llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lstring.h lgc.h lundump.h lvm.o: lvm.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \ lzio.h lmem.h ldo.h lfunc.h lgc.h lopcodes.h lstring.h ltable.h lvm.h lzio.o: lzio.c lua.h luaconf.h llimits.h lmem.h lstate.h lobject.h ltm.h \ lzio.h print.o: print.c ldebug.h lstate.h lua.h luaconf.h lobject.h llimits.h \ ltm.h lzio.h lmem.h lopcodes.h lundump.h # (end of Makefile) genometools-1.5.1/src/external/lua-5.1.5/src/lapi.c000066400000000000000000000542641211610345200215750ustar00rootroot00000000000000/* ** $Id: lapi.c,v 2.55.1.5 2008/07/04 18:41:18 roberto Exp $ ** Lua API ** See Copyright Notice in lua.h */ #include #include #include #include #define lapi_c #define LUA_CORE #include "lua.h" #include "lapi.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #include "lundump.h" #include "lvm.h" const char lua_ident[] = "$Lua: " LUA_RELEASE " " LUA_COPYRIGHT " $\n" "$Authors: " LUA_AUTHORS " $\n" "$URL: www.lua.org $\n"; #define api_checknelems(L, n) api_check(L, (n) <= (L->top - L->base)) #define api_checkvalidindex(L, i) api_check(L, (i) != luaO_nilobject) #define api_incr_top(L) {api_check(L, L->top < L->ci->top); L->top++;} static TValue *index2adr (lua_State *L, int idx) { if (idx > 0) { TValue *o = L->base + (idx - 1); api_check(L, idx <= L->ci->top - L->base); if (o >= L->top) return cast(TValue *, luaO_nilobject); else return o; } else if (idx > LUA_REGISTRYINDEX) { api_check(L, idx != 0 && -idx <= L->top - L->base); return L->top + idx; } else switch (idx) { /* pseudo-indices */ case LUA_REGISTRYINDEX: return registry(L); case LUA_ENVIRONINDEX: { Closure *func = curr_func(L); sethvalue(L, &L->env, func->c.env); return &L->env; } case LUA_GLOBALSINDEX: return gt(L); default: { Closure *func = curr_func(L); idx = LUA_GLOBALSINDEX - idx; return (idx <= func->c.nupvalues) ? &func->c.upvalue[idx-1] : cast(TValue *, luaO_nilobject); } } } static Table *getcurrenv (lua_State *L) { if (L->ci == L->base_ci) /* no enclosing function? */ return hvalue(gt(L)); /* use global table as environment */ else { Closure *func = curr_func(L); return func->c.env; } } void luaA_pushobject (lua_State *L, const TValue *o) { setobj2s(L, L->top, o); api_incr_top(L); } LUA_API int lua_checkstack (lua_State *L, int size) { int res = 1; lua_lock(L); if (size > LUAI_MAXCSTACK || (L->top - L->base + size) > LUAI_MAXCSTACK) res = 0; /* stack overflow */ else if (size > 0) { luaD_checkstack(L, size); if (L->ci->top < L->top + size) L->ci->top = L->top + size; } lua_unlock(L); return res; } LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) { int i; if (from == to) return; lua_lock(to); api_checknelems(from, n); api_check(from, G(from) == G(to)); api_check(from, to->ci->top - to->top >= n); from->top -= n; for (i = 0; i < n; i++) { setobj2s(to, to->top++, from->top + i); } lua_unlock(to); } LUA_API void lua_setlevel (lua_State *from, lua_State *to) { to->nCcalls = from->nCcalls; } LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) { lua_CFunction old; lua_lock(L); old = G(L)->panic; G(L)->panic = panicf; lua_unlock(L); return old; } LUA_API lua_State *lua_newthread (lua_State *L) { lua_State *L1; lua_lock(L); luaC_checkGC(L); L1 = luaE_newthread(L); setthvalue(L, L->top, L1); api_incr_top(L); lua_unlock(L); luai_userstatethread(L, L1); return L1; } /* ** basic stack manipulation */ LUA_API int lua_gettop (lua_State *L) { return cast_int(L->top - L->base); } LUA_API void lua_settop (lua_State *L, int idx) { lua_lock(L); if (idx >= 0) { api_check(L, idx <= L->stack_last - L->base); while (L->top < L->base + idx) setnilvalue(L->top++); L->top = L->base + idx; } else { api_check(L, -(idx+1) <= (L->top - L->base)); L->top += idx+1; /* `subtract' index (index is negative) */ } lua_unlock(L); } LUA_API void lua_remove (lua_State *L, int idx) { StkId p; lua_lock(L); p = index2adr(L, idx); api_checkvalidindex(L, p); while (++p < L->top) setobjs2s(L, p-1, p); L->top--; lua_unlock(L); } LUA_API void lua_insert (lua_State *L, int idx) { StkId p; StkId q; lua_lock(L); p = index2adr(L, idx); api_checkvalidindex(L, p); for (q = L->top; q>p; q--) setobjs2s(L, q, q-1); setobjs2s(L, p, L->top); lua_unlock(L); } LUA_API void lua_replace (lua_State *L, int idx) { StkId o; lua_lock(L); /* explicit test for incompatible code */ if (idx == LUA_ENVIRONINDEX && L->ci == L->base_ci) luaG_runerror(L, "no calling environment"); api_checknelems(L, 1); o = index2adr(L, idx); api_checkvalidindex(L, o); if (idx == LUA_ENVIRONINDEX) { Closure *func = curr_func(L); api_check(L, ttistable(L->top - 1)); func->c.env = hvalue(L->top - 1); luaC_barrier(L, func, L->top - 1); } else { setobj(L, o, L->top - 1); if (idx < LUA_GLOBALSINDEX) /* function upvalue? */ luaC_barrier(L, curr_func(L), L->top - 1); } L->top--; lua_unlock(L); } LUA_API void lua_pushvalue (lua_State *L, int idx) { lua_lock(L); setobj2s(L, L->top, index2adr(L, idx)); api_incr_top(L); lua_unlock(L); } /* ** access functions (stack -> C) */ LUA_API int lua_type (lua_State *L, int idx) { StkId o = index2adr(L, idx); return (o == luaO_nilobject) ? LUA_TNONE : ttype(o); } LUA_API const char *lua_typename (lua_State *L, int t) { UNUSED(L); return (t == LUA_TNONE) ? "no value" : luaT_typenames[t]; } LUA_API int lua_iscfunction (lua_State *L, int idx) { StkId o = index2adr(L, idx); return iscfunction(o); } LUA_API int lua_isnumber (lua_State *L, int idx) { TValue n; const TValue *o = index2adr(L, idx); return tonumber(o, &n); } LUA_API int lua_isstring (lua_State *L, int idx) { int t = lua_type(L, idx); return (t == LUA_TSTRING || t == LUA_TNUMBER); } LUA_API int lua_isuserdata (lua_State *L, int idx) { const TValue *o = index2adr(L, idx); return (ttisuserdata(o) || ttislightuserdata(o)); } LUA_API int lua_rawequal (lua_State *L, int index1, int index2) { StkId o1 = index2adr(L, index1); StkId o2 = index2adr(L, index2); return (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 : luaO_rawequalObj(o1, o2); } LUA_API int lua_equal (lua_State *L, int index1, int index2) { StkId o1, o2; int i; lua_lock(L); /* may call tag method */ o1 = index2adr(L, index1); o2 = index2adr(L, index2); i = (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 : equalobj(L, o1, o2); lua_unlock(L); return i; } LUA_API int lua_lessthan (lua_State *L, int index1, int index2) { StkId o1, o2; int i; lua_lock(L); /* may call tag method */ o1 = index2adr(L, index1); o2 = index2adr(L, index2); i = (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 : luaV_lessthan(L, o1, o2); lua_unlock(L); return i; } LUA_API lua_Number lua_tonumber (lua_State *L, int idx) { TValue n; const TValue *o = index2adr(L, idx); if (tonumber(o, &n)) return nvalue(o); else return 0; } LUA_API lua_Integer lua_tointeger (lua_State *L, int idx) { TValue n; const TValue *o = index2adr(L, idx); if (tonumber(o, &n)) { lua_Integer res; lua_Number num = nvalue(o); lua_number2integer(res, num); return res; } else return 0; } LUA_API int lua_toboolean (lua_State *L, int idx) { const TValue *o = index2adr(L, idx); return !l_isfalse(o); } LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { StkId o = index2adr(L, idx); if (!ttisstring(o)) { lua_lock(L); /* `luaV_tostring' may create a new string */ if (!luaV_tostring(L, o)) { /* conversion failed? */ if (len != NULL) *len = 0; lua_unlock(L); return NULL; } luaC_checkGC(L); o = index2adr(L, idx); /* previous call may reallocate the stack */ lua_unlock(L); } if (len != NULL) *len = tsvalue(o)->len; return svalue(o); } LUA_API size_t lua_objlen (lua_State *L, int idx) { StkId o = index2adr(L, idx); switch (ttype(o)) { case LUA_TSTRING: return tsvalue(o)->len; case LUA_TUSERDATA: return uvalue(o)->len; case LUA_TTABLE: return luaH_getn(hvalue(o)); case LUA_TNUMBER: { size_t l; lua_lock(L); /* `luaV_tostring' may create a new string */ l = (luaV_tostring(L, o) ? tsvalue(o)->len : 0); lua_unlock(L); return l; } default: return 0; } } LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) { StkId o = index2adr(L, idx); return (!iscfunction(o)) ? NULL : clvalue(o)->c.f; } LUA_API void *lua_touserdata (lua_State *L, int idx) { StkId o = index2adr(L, idx); switch (ttype(o)) { case LUA_TUSERDATA: return (rawuvalue(o) + 1); case LUA_TLIGHTUSERDATA: return pvalue(o); default: return NULL; } } LUA_API lua_State *lua_tothread (lua_State *L, int idx) { StkId o = index2adr(L, idx); return (!ttisthread(o)) ? NULL : thvalue(o); } LUA_API const void *lua_topointer (lua_State *L, int idx) { StkId o = index2adr(L, idx); switch (ttype(o)) { case LUA_TTABLE: return hvalue(o); case LUA_TFUNCTION: return clvalue(o); case LUA_TTHREAD: return thvalue(o); case LUA_TUSERDATA: case LUA_TLIGHTUSERDATA: return lua_touserdata(L, idx); default: return NULL; } } /* ** push functions (C -> stack) */ LUA_API void lua_pushnil (lua_State *L) { lua_lock(L); setnilvalue(L->top); api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushnumber (lua_State *L, lua_Number n) { lua_lock(L); setnvalue(L->top, n); api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) { lua_lock(L); setnvalue(L->top, cast_num(n)); api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) { lua_lock(L); luaC_checkGC(L); setsvalue2s(L, L->top, luaS_newlstr(L, s, len)); api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushstring (lua_State *L, const char *s) { if (s == NULL) lua_pushnil(L); else lua_pushlstring(L, s, strlen(s)); } LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, va_list argp) { const char *ret; lua_lock(L); luaC_checkGC(L); ret = luaO_pushvfstring(L, fmt, argp); lua_unlock(L); return ret; } LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { const char *ret; va_list argp; lua_lock(L); luaC_checkGC(L); va_start(argp, fmt); ret = luaO_pushvfstring(L, fmt, argp); va_end(argp); lua_unlock(L); return ret; } LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { Closure *cl; lua_lock(L); luaC_checkGC(L); api_checknelems(L, n); cl = luaF_newCclosure(L, n, getcurrenv(L)); cl->c.f = fn; L->top -= n; while (n--) setobj2n(L, &cl->c.upvalue[n], L->top+n); setclvalue(L, L->top, cl); lua_assert(iswhite(obj2gco(cl))); api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushboolean (lua_State *L, int b) { lua_lock(L); setbvalue(L->top, (b != 0)); /* ensure that true is 1 */ api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushlightuserdata (lua_State *L, void *p) { lua_lock(L); setpvalue(L->top, p); api_incr_top(L); lua_unlock(L); } LUA_API int lua_pushthread (lua_State *L) { lua_lock(L); setthvalue(L, L->top, L); api_incr_top(L); lua_unlock(L); return (G(L)->mainthread == L); } /* ** get functions (Lua -> stack) */ LUA_API void lua_gettable (lua_State *L, int idx) { StkId t; lua_lock(L); t = index2adr(L, idx); api_checkvalidindex(L, t); luaV_gettable(L, t, L->top - 1, L->top - 1); lua_unlock(L); } LUA_API void lua_getfield (lua_State *L, int idx, const char *k) { StkId t; TValue key; lua_lock(L); t = index2adr(L, idx); api_checkvalidindex(L, t); setsvalue(L, &key, luaS_new(L, k)); luaV_gettable(L, t, &key, L->top); api_incr_top(L); lua_unlock(L); } LUA_API void lua_rawget (lua_State *L, int idx) { StkId t; lua_lock(L); t = index2adr(L, idx); api_check(L, ttistable(t)); setobj2s(L, L->top - 1, luaH_get(hvalue(t), L->top - 1)); lua_unlock(L); } LUA_API void lua_rawgeti (lua_State *L, int idx, int n) { StkId o; lua_lock(L); o = index2adr(L, idx); api_check(L, ttistable(o)); setobj2s(L, L->top, luaH_getnum(hvalue(o), n)); api_incr_top(L); lua_unlock(L); } LUA_API void lua_createtable (lua_State *L, int narray, int nrec) { lua_lock(L); luaC_checkGC(L); sethvalue(L, L->top, luaH_new(L, narray, nrec)); api_incr_top(L); lua_unlock(L); } LUA_API int lua_getmetatable (lua_State *L, int objindex) { const TValue *obj; Table *mt = NULL; int res; lua_lock(L); obj = index2adr(L, objindex); switch (ttype(obj)) { case LUA_TTABLE: mt = hvalue(obj)->metatable; break; case LUA_TUSERDATA: mt = uvalue(obj)->metatable; break; default: mt = G(L)->mt[ttype(obj)]; break; } if (mt == NULL) res = 0; else { sethvalue(L, L->top, mt); api_incr_top(L); res = 1; } lua_unlock(L); return res; } LUA_API void lua_getfenv (lua_State *L, int idx) { StkId o; lua_lock(L); o = index2adr(L, idx); api_checkvalidindex(L, o); switch (ttype(o)) { case LUA_TFUNCTION: sethvalue(L, L->top, clvalue(o)->c.env); break; case LUA_TUSERDATA: sethvalue(L, L->top, uvalue(o)->env); break; case LUA_TTHREAD: setobj2s(L, L->top, gt(thvalue(o))); break; default: setnilvalue(L->top); break; } api_incr_top(L); lua_unlock(L); } /* ** set functions (stack -> Lua) */ LUA_API void lua_settable (lua_State *L, int idx) { StkId t; lua_lock(L); api_checknelems(L, 2); t = index2adr(L, idx); api_checkvalidindex(L, t); luaV_settable(L, t, L->top - 2, L->top - 1); L->top -= 2; /* pop index and value */ lua_unlock(L); } LUA_API void lua_setfield (lua_State *L, int idx, const char *k) { StkId t; TValue key; lua_lock(L); api_checknelems(L, 1); t = index2adr(L, idx); api_checkvalidindex(L, t); setsvalue(L, &key, luaS_new(L, k)); luaV_settable(L, t, &key, L->top - 1); L->top--; /* pop value */ lua_unlock(L); } LUA_API void lua_rawset (lua_State *L, int idx) { StkId t; lua_lock(L); api_checknelems(L, 2); t = index2adr(L, idx); api_check(L, ttistable(t)); setobj2t(L, luaH_set(L, hvalue(t), L->top-2), L->top-1); luaC_barriert(L, hvalue(t), L->top-1); L->top -= 2; lua_unlock(L); } LUA_API void lua_rawseti (lua_State *L, int idx, int n) { StkId o; lua_lock(L); api_checknelems(L, 1); o = index2adr(L, idx); api_check(L, ttistable(o)); setobj2t(L, luaH_setnum(L, hvalue(o), n), L->top-1); luaC_barriert(L, hvalue(o), L->top-1); L->top--; lua_unlock(L); } LUA_API int lua_setmetatable (lua_State *L, int objindex) { TValue *obj; Table *mt; lua_lock(L); api_checknelems(L, 1); obj = index2adr(L, objindex); api_checkvalidindex(L, obj); if (ttisnil(L->top - 1)) mt = NULL; else { api_check(L, ttistable(L->top - 1)); mt = hvalue(L->top - 1); } switch (ttype(obj)) { case LUA_TTABLE: { hvalue(obj)->metatable = mt; if (mt) luaC_objbarriert(L, hvalue(obj), mt); break; } case LUA_TUSERDATA: { uvalue(obj)->metatable = mt; if (mt) luaC_objbarrier(L, rawuvalue(obj), mt); break; } default: { G(L)->mt[ttype(obj)] = mt; break; } } L->top--; lua_unlock(L); return 1; } LUA_API int lua_setfenv (lua_State *L, int idx) { StkId o; int res = 1; lua_lock(L); api_checknelems(L, 1); o = index2adr(L, idx); api_checkvalidindex(L, o); api_check(L, ttistable(L->top - 1)); switch (ttype(o)) { case LUA_TFUNCTION: clvalue(o)->c.env = hvalue(L->top - 1); break; case LUA_TUSERDATA: uvalue(o)->env = hvalue(L->top - 1); break; case LUA_TTHREAD: sethvalue(L, gt(thvalue(o)), hvalue(L->top - 1)); break; default: res = 0; break; } if (res) luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); L->top--; lua_unlock(L); return res; } /* ** `load' and `call' functions (run Lua code) */ #define adjustresults(L,nres) \ { if (nres == LUA_MULTRET && L->top >= L->ci->top) L->ci->top = L->top; } #define checkresults(L,na,nr) \ api_check(L, (nr) == LUA_MULTRET || (L->ci->top - L->top >= (nr) - (na))) LUA_API void lua_call (lua_State *L, int nargs, int nresults) { StkId func; lua_lock(L); api_checknelems(L, nargs+1); checkresults(L, nargs, nresults); func = L->top - (nargs+1); luaD_call(L, func, nresults); adjustresults(L, nresults); lua_unlock(L); } /* ** Execute a protected call. */ struct CallS { /* data to `f_call' */ StkId func; int nresults; }; static void f_call (lua_State *L, void *ud) { struct CallS *c = cast(struct CallS *, ud); luaD_call(L, c->func, c->nresults); } LUA_API int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc) { struct CallS c; int status; ptrdiff_t func; lua_lock(L); api_checknelems(L, nargs+1); checkresults(L, nargs, nresults); if (errfunc == 0) func = 0; else { StkId o = index2adr(L, errfunc); api_checkvalidindex(L, o); func = savestack(L, o); } c.func = L->top - (nargs+1); /* function to be called */ c.nresults = nresults; status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func); adjustresults(L, nresults); lua_unlock(L); return status; } /* ** Execute a protected C call. */ struct CCallS { /* data to `f_Ccall' */ lua_CFunction func; void *ud; }; static void f_Ccall (lua_State *L, void *ud) { struct CCallS *c = cast(struct CCallS *, ud); Closure *cl; cl = luaF_newCclosure(L, 0, getcurrenv(L)); cl->c.f = c->func; setclvalue(L, L->top, cl); /* push function */ api_incr_top(L); setpvalue(L->top, c->ud); /* push only argument */ api_incr_top(L); luaD_call(L, L->top - 2, 0); } LUA_API int lua_cpcall (lua_State *L, lua_CFunction func, void *ud) { struct CCallS c; int status; lua_lock(L); c.func = func; c.ud = ud; status = luaD_pcall(L, f_Ccall, &c, savestack(L, L->top), 0); lua_unlock(L); return status; } LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data, const char *chunkname) { ZIO z; int status; lua_lock(L); if (!chunkname) chunkname = "?"; luaZ_init(L, &z, reader, data); status = luaD_protectedparser(L, &z, chunkname); lua_unlock(L); return status; } LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data) { int status; TValue *o; lua_lock(L); api_checknelems(L, 1); o = L->top - 1; if (isLfunction(o)) status = luaU_dump(L, clvalue(o)->l.p, writer, data, 0); else status = 1; lua_unlock(L); return status; } LUA_API int lua_status (lua_State *L) { return L->status; } /* ** Garbage-collection function */ LUA_API int lua_gc (lua_State *L, int what, int data) { int res = 0; global_State *g; lua_lock(L); g = G(L); switch (what) { case LUA_GCSTOP: { g->GCthreshold = MAX_LUMEM; break; } case LUA_GCRESTART: { g->GCthreshold = g->totalbytes; break; } case LUA_GCCOLLECT: { luaC_fullgc(L); break; } case LUA_GCCOUNT: { /* GC values are expressed in Kbytes: #bytes/2^10 */ res = cast_int(g->totalbytes >> 10); break; } case LUA_GCCOUNTB: { res = cast_int(g->totalbytes & 0x3ff); break; } case LUA_GCSTEP: { lu_mem a = (cast(lu_mem, data) << 10); if (a <= g->totalbytes) g->GCthreshold = g->totalbytes - a; else g->GCthreshold = 0; while (g->GCthreshold <= g->totalbytes) { luaC_step(L); if (g->gcstate == GCSpause) { /* end of cycle? */ res = 1; /* signal it */ break; } } break; } case LUA_GCSETPAUSE: { res = g->gcpause; g->gcpause = data; break; } case LUA_GCSETSTEPMUL: { res = g->gcstepmul; g->gcstepmul = data; break; } default: res = -1; /* invalid option */ } lua_unlock(L); return res; } /* ** miscellaneous functions */ LUA_API int lua_error (lua_State *L) { lua_lock(L); api_checknelems(L, 1); luaG_errormsg(L); lua_unlock(L); return 0; /* to avoid warnings */ } LUA_API int lua_next (lua_State *L, int idx) { StkId t; int more; lua_lock(L); t = index2adr(L, idx); api_check(L, ttistable(t)); more = luaH_next(L, hvalue(t), L->top - 1); if (more) { api_incr_top(L); } else /* no more elements */ L->top -= 1; /* remove key */ lua_unlock(L); return more; } LUA_API void lua_concat (lua_State *L, int n) { lua_lock(L); api_checknelems(L, n); if (n >= 2) { luaC_checkGC(L); luaV_concat(L, n, cast_int(L->top - L->base) - 1); L->top -= (n-1); } else if (n == 0) { /* push empty string */ setsvalue2s(L, L->top, luaS_newlstr(L, "", 0)); api_incr_top(L); } /* else n == 1; nothing to do */ lua_unlock(L); } LUA_API lua_Alloc lua_getallocf (lua_State *L, void **ud) { lua_Alloc f; lua_lock(L); if (ud) *ud = G(L)->ud; f = G(L)->frealloc; lua_unlock(L); return f; } LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud) { lua_lock(L); G(L)->ud = ud; G(L)->frealloc = f; lua_unlock(L); } LUA_API void *lua_newuserdata (lua_State *L, size_t size) { Udata *u; lua_lock(L); luaC_checkGC(L); u = luaS_newudata(L, size, getcurrenv(L)); setuvalue(L, L->top, u); api_incr_top(L); lua_unlock(L); return u + 1; } static const char *aux_upvalue (StkId fi, int n, TValue **val) { Closure *f; if (!ttisfunction(fi)) return NULL; f = clvalue(fi); if (f->c.isC) { if (!(1 <= n && n <= f->c.nupvalues)) return NULL; *val = &f->c.upvalue[n-1]; return ""; } else { Proto *p = f->l.p; if (!(1 <= n && n <= p->sizeupvalues)) return NULL; *val = f->l.upvals[n-1]->v; return getstr(p->upvalues[n-1]); } } LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) { const char *name; TValue *val; lua_lock(L); name = aux_upvalue(index2adr(L, funcindex), n, &val); if (name) { setobj2s(L, L->top, val); api_incr_top(L); } lua_unlock(L); return name; } LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) { const char *name; TValue *val; StkId fi; lua_lock(L); fi = index2adr(L, funcindex); api_checknelems(L, 1); name = aux_upvalue(fi, n, &val); if (name) { L->top--; setobj(L, val, L->top); luaC_barrier(L, clvalue(fi), L->top); } lua_unlock(L); return name; } genometools-1.5.1/src/external/lua-5.1.5/src/lapi.h000066400000000000000000000004061211610345200215670ustar00rootroot00000000000000/* ** $Id: lapi.h,v 2.2.1.1 2007/12/27 13:02:25 roberto Exp $ ** Auxiliary functions from Lua API ** See Copyright Notice in lua.h */ #ifndef lapi_h #define lapi_h #include "lobject.h" LUAI_FUNC void luaA_pushobject (lua_State *L, const TValue *o); #endif genometools-1.5.1/src/external/lua-5.1.5/src/lauxlib.c000066400000000000000000000420111211610345200222730ustar00rootroot00000000000000/* ** $Id: lauxlib.c,v 1.159.1.3 2008/01/21 13:20:51 roberto Exp $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice in lua.h */ #include #include #include #include #include #include /* This file uses only the official API of Lua. ** Any function declared here could be written as an application function. */ #define lauxlib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #define FREELIST_REF 0 /* free list of references */ /* convert a stack index to positive */ #define abs_index(L, i) ((i) > 0 || (i) <= LUA_REGISTRYINDEX ? (i) : \ lua_gettop(L) + (i) + 1) /* ** {====================================================== ** Error-report functions ** ======================================================= */ LUALIB_API int luaL_argerror (lua_State *L, int narg, const char *extramsg) { lua_Debug ar; if (!lua_getstack(L, 0, &ar)) /* no stack frame? */ return luaL_error(L, "bad argument #%d (%s)", narg, extramsg); lua_getinfo(L, "n", &ar); if (strcmp(ar.namewhat, "method") == 0) { narg--; /* do not count `self' */ if (narg == 0) /* error is in the self argument itself? */ return luaL_error(L, "calling " LUA_QS " on bad self (%s)", ar.name, extramsg); } if (ar.name == NULL) ar.name = "?"; return luaL_error(L, "bad argument #%d to " LUA_QS " (%s)", narg, ar.name, extramsg); } LUALIB_API int luaL_typerror (lua_State *L, int narg, const char *tname) { const char *msg = lua_pushfstring(L, "%s expected, got %s", tname, luaL_typename(L, narg)); return luaL_argerror(L, narg, msg); } static void tag_error (lua_State *L, int narg, int tag) { luaL_typerror(L, narg, lua_typename(L, tag)); } LUALIB_API void luaL_where (lua_State *L, int level) { lua_Debug ar; if (lua_getstack(L, level, &ar)) { /* check function at level */ lua_getinfo(L, "Sl", &ar); /* get info about it */ if (ar.currentline > 0) { /* is there info? */ lua_pushfstring(L, "%s:%d: ", ar.short_src, ar.currentline); return; } } lua_pushliteral(L, ""); /* else, no information available... */ } LUALIB_API int luaL_error (lua_State *L, const char *fmt, ...) { va_list argp; va_start(argp, fmt); luaL_where(L, 1); lua_pushvfstring(L, fmt, argp); va_end(argp); lua_concat(L, 2); return lua_error(L); } /* }====================================================== */ LUALIB_API int luaL_checkoption (lua_State *L, int narg, const char *def, const char *const lst[]) { const char *name = (def) ? luaL_optstring(L, narg, def) : luaL_checkstring(L, narg); int i; for (i=0; lst[i]; i++) if (strcmp(lst[i], name) == 0) return i; return luaL_argerror(L, narg, lua_pushfstring(L, "invalid option " LUA_QS, name)); } LUALIB_API int luaL_newmetatable (lua_State *L, const char *tname) { lua_getfield(L, LUA_REGISTRYINDEX, tname); /* get registry.name */ if (!lua_isnil(L, -1)) /* name already in use? */ return 0; /* leave previous value on top, but return 0 */ lua_pop(L, 1); lua_newtable(L); /* create metatable */ lua_pushvalue(L, -1); lua_setfield(L, LUA_REGISTRYINDEX, tname); /* registry.name = metatable */ return 1; } LUALIB_API void *luaL_checkudata (lua_State *L, int ud, const char *tname) { void *p = lua_touserdata(L, ud); if (p != NULL) { /* value is a userdata? */ if (lua_getmetatable(L, ud)) { /* does it have a metatable? */ lua_getfield(L, LUA_REGISTRYINDEX, tname); /* get correct metatable */ if (lua_rawequal(L, -1, -2)) { /* does it have the correct mt? */ lua_pop(L, 2); /* remove both metatables */ return p; } } } luaL_typerror(L, ud, tname); /* else error */ return NULL; /* to avoid warnings */ } LUALIB_API void luaL_checkstack (lua_State *L, int space, const char *mes) { if (!lua_checkstack(L, space)) luaL_error(L, "stack overflow (%s)", mes); } LUALIB_API void luaL_checktype (lua_State *L, int narg, int t) { if (lua_type(L, narg) != t) tag_error(L, narg, t); } LUALIB_API void luaL_checkany (lua_State *L, int narg) { if (lua_type(L, narg) == LUA_TNONE) luaL_argerror(L, narg, "value expected"); } LUALIB_API const char *luaL_checklstring (lua_State *L, int narg, size_t *len) { const char *s = lua_tolstring(L, narg, len); if (!s) tag_error(L, narg, LUA_TSTRING); return s; } LUALIB_API const char *luaL_optlstring (lua_State *L, int narg, const char *def, size_t *len) { if (lua_isnoneornil(L, narg)) { if (len) *len = (def ? strlen(def) : 0); return def; } else return luaL_checklstring(L, narg, len); } LUALIB_API lua_Number luaL_checknumber (lua_State *L, int narg) { lua_Number d = lua_tonumber(L, narg); if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */ tag_error(L, narg, LUA_TNUMBER); return d; } LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number def) { return luaL_opt(L, luaL_checknumber, narg, def); } LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) { lua_Integer d = lua_tointeger(L, narg); if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */ tag_error(L, narg, LUA_TNUMBER); return d; } LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int narg, lua_Integer def) { return luaL_opt(L, luaL_checkinteger, narg, def); } LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) { if (!lua_getmetatable(L, obj)) /* no metatable? */ return 0; lua_pushstring(L, event); lua_rawget(L, -2); if (lua_isnil(L, -1)) { lua_pop(L, 2); /* remove metatable and metafield */ return 0; } else { lua_remove(L, -2); /* remove only metatable */ return 1; } } LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { obj = abs_index(L, obj); if (!luaL_getmetafield(L, obj, event)) /* no metafield? */ return 0; lua_pushvalue(L, obj); lua_call(L, 1, 1); return 1; } LUALIB_API void (luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l) { luaI_openlib(L, libname, l, 0); } static int libsize (const luaL_Reg *l) { int size = 0; for (; l->name; l++) size++; return size; } LUALIB_API void luaI_openlib (lua_State *L, const char *libname, const luaL_Reg *l, int nup) { if (libname) { int size = libsize(l); /* check whether lib already exists */ luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 1); lua_getfield(L, -1, libname); /* get _LOADED[libname] */ if (!lua_istable(L, -1)) { /* not found? */ lua_pop(L, 1); /* remove previous result */ /* try global variable (and create one if it does not exist) */ if (luaL_findtable(L, LUA_GLOBALSINDEX, libname, size) != NULL) luaL_error(L, "name conflict for module " LUA_QS, libname); lua_pushvalue(L, -1); lua_setfield(L, -3, libname); /* _LOADED[libname] = new table */ } lua_remove(L, -2); /* remove _LOADED table */ lua_insert(L, -(nup+1)); /* move library table to below upvalues */ } for (; l->name; l++) { int i; for (i=0; ifunc, nup); lua_setfield(L, -(nup+2), l->name); } lua_pop(L, nup); /* remove upvalues */ } /* ** {====================================================== ** getn-setn: size for arrays ** ======================================================= */ #if defined(LUA_COMPAT_GETN) static int checkint (lua_State *L, int topop) { int n = (lua_type(L, -1) == LUA_TNUMBER) ? lua_tointeger(L, -1) : -1; lua_pop(L, topop); return n; } static void getsizes (lua_State *L) { lua_getfield(L, LUA_REGISTRYINDEX, "LUA_SIZES"); if (lua_isnil(L, -1)) { /* no `size' table? */ lua_pop(L, 1); /* remove nil */ lua_newtable(L); /* create it */ lua_pushvalue(L, -1); /* `size' will be its own metatable */ lua_setmetatable(L, -2); lua_pushliteral(L, "kv"); lua_setfield(L, -2, "__mode"); /* metatable(N).__mode = "kv" */ lua_pushvalue(L, -1); lua_setfield(L, LUA_REGISTRYINDEX, "LUA_SIZES"); /* store in register */ } } LUALIB_API void luaL_setn (lua_State *L, int t, int n) { t = abs_index(L, t); lua_pushliteral(L, "n"); lua_rawget(L, t); if (checkint(L, 1) >= 0) { /* is there a numeric field `n'? */ lua_pushliteral(L, "n"); /* use it */ lua_pushinteger(L, n); lua_rawset(L, t); } else { /* use `sizes' */ getsizes(L); lua_pushvalue(L, t); lua_pushinteger(L, n); lua_rawset(L, -3); /* sizes[t] = n */ lua_pop(L, 1); /* remove `sizes' */ } } LUALIB_API int luaL_getn (lua_State *L, int t) { int n; t = abs_index(L, t); lua_pushliteral(L, "n"); /* try t.n */ lua_rawget(L, t); if ((n = checkint(L, 1)) >= 0) return n; getsizes(L); /* else try sizes[t] */ lua_pushvalue(L, t); lua_rawget(L, -2); if ((n = checkint(L, 2)) >= 0) return n; return (int)lua_objlen(L, t); } #endif /* }====================================================== */ LUALIB_API const char *luaL_gsub (lua_State *L, const char *s, const char *p, const char *r) { const char *wild; size_t l = strlen(p); luaL_Buffer b; luaL_buffinit(L, &b); while ((wild = strstr(s, p)) != NULL) { luaL_addlstring(&b, s, wild - s); /* push prefix */ luaL_addstring(&b, r); /* push replacement in place of pattern */ s = wild + l; /* continue after `p' */ } luaL_addstring(&b, s); /* push last suffix */ luaL_pushresult(&b); return lua_tostring(L, -1); } LUALIB_API const char *luaL_findtable (lua_State *L, int idx, const char *fname, int szhint) { const char *e; lua_pushvalue(L, idx); do { e = strchr(fname, '.'); if (e == NULL) e = fname + strlen(fname); lua_pushlstring(L, fname, e - fname); lua_rawget(L, -2); if (lua_isnil(L, -1)) { /* no such field? */ lua_pop(L, 1); /* remove this nil */ lua_createtable(L, 0, (*e == '.' ? 1 : szhint)); /* new table for field */ lua_pushlstring(L, fname, e - fname); lua_pushvalue(L, -2); lua_settable(L, -4); /* set new table into field */ } else if (!lua_istable(L, -1)) { /* field has a non-table value? */ lua_pop(L, 2); /* remove table and value */ return fname; /* return problematic part of the name */ } lua_remove(L, -2); /* remove previous table */ fname = e + 1; } while (*e == '.'); return NULL; } /* ** {====================================================== ** Generic Buffer manipulation ** ======================================================= */ #define bufflen(B) ((B)->p - (B)->buffer) #define bufffree(B) ((size_t)(LUAL_BUFFERSIZE - bufflen(B))) #define LIMIT (LUA_MINSTACK/2) static int emptybuffer (luaL_Buffer *B) { size_t l = bufflen(B); if (l == 0) return 0; /* put nothing on stack */ else { lua_pushlstring(B->L, B->buffer, l); B->p = B->buffer; B->lvl++; return 1; } } static void adjuststack (luaL_Buffer *B) { if (B->lvl > 1) { lua_State *L = B->L; int toget = 1; /* number of levels to concat */ size_t toplen = lua_strlen(L, -1); do { size_t l = lua_strlen(L, -(toget+1)); if (B->lvl - toget + 1 >= LIMIT || toplen > l) { toplen += l; toget++; } else break; } while (toget < B->lvl); lua_concat(L, toget); B->lvl = B->lvl - toget + 1; } } LUALIB_API char *luaL_prepbuffer (luaL_Buffer *B) { if (emptybuffer(B)) adjuststack(B); return B->buffer; } LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) { while (l--) luaL_addchar(B, *s++); } LUALIB_API void luaL_addstring (luaL_Buffer *B, const char *s) { luaL_addlstring(B, s, strlen(s)); } LUALIB_API void luaL_pushresult (luaL_Buffer *B) { emptybuffer(B); lua_concat(B->L, B->lvl); B->lvl = 1; } LUALIB_API void luaL_addvalue (luaL_Buffer *B) { lua_State *L = B->L; size_t vl; const char *s = lua_tolstring(L, -1, &vl); if (vl <= bufffree(B)) { /* fit into buffer? */ memcpy(B->p, s, vl); /* put it there */ B->p += vl; lua_pop(L, 1); /* remove from stack */ } else { if (emptybuffer(B)) lua_insert(L, -2); /* put buffer before new value */ B->lvl++; /* add new value into B stack */ adjuststack(B); } } LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) { B->L = L; B->p = B->buffer; B->lvl = 0; } /* }====================================================== */ LUALIB_API int luaL_ref (lua_State *L, int t) { int ref; t = abs_index(L, t); if (lua_isnil(L, -1)) { lua_pop(L, 1); /* remove from stack */ return LUA_REFNIL; /* `nil' has a unique fixed reference */ } lua_rawgeti(L, t, FREELIST_REF); /* get first free element */ ref = (int)lua_tointeger(L, -1); /* ref = t[FREELIST_REF] */ lua_pop(L, 1); /* remove it from stack */ if (ref != 0) { /* any free element? */ lua_rawgeti(L, t, ref); /* remove it from list */ lua_rawseti(L, t, FREELIST_REF); /* (t[FREELIST_REF] = t[ref]) */ } else { /* no free elements */ ref = (int)lua_objlen(L, t); ref++; /* create new reference */ } lua_rawseti(L, t, ref); return ref; } LUALIB_API void luaL_unref (lua_State *L, int t, int ref) { if (ref >= 0) { t = abs_index(L, t); lua_rawgeti(L, t, FREELIST_REF); lua_rawseti(L, t, ref); /* t[ref] = t[FREELIST_REF] */ lua_pushinteger(L, ref); lua_rawseti(L, t, FREELIST_REF); /* t[FREELIST_REF] = ref */ } } /* ** {====================================================== ** Load functions ** ======================================================= */ typedef struct LoadF { int extraline; FILE *f; char buff[LUAL_BUFFERSIZE]; } LoadF; static const char *getF (lua_State *L, void *ud, size_t *size) { LoadF *lf = (LoadF *)ud; (void)L; if (lf->extraline) { lf->extraline = 0; *size = 1; return "\n"; } if (feof(lf->f)) return NULL; *size = fread(lf->buff, 1, sizeof(lf->buff), lf->f); return (*size > 0) ? lf->buff : NULL; } static int errfile (lua_State *L, const char *what, int fnameindex) { const char *serr = strerror(errno); const char *filename = lua_tostring(L, fnameindex) + 1; lua_pushfstring(L, "cannot %s %s: %s", what, filename, serr); lua_remove(L, fnameindex); return LUA_ERRFILE; } LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { LoadF lf; int status, readstatus; int c; int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */ lf.extraline = 0; if (filename == NULL) { lua_pushliteral(L, "=stdin"); lf.f = stdin; } else { lua_pushfstring(L, "@%s", filename); lf.f = fopen(filename, "r"); if (lf.f == NULL) return errfile(L, "open", fnameindex); } c = getc(lf.f); if (c == '#') { /* Unix exec. file? */ lf.extraline = 1; while ((c = getc(lf.f)) != EOF && c != '\n') ; /* skip first line */ if (c == '\n') c = getc(lf.f); } if (c == LUA_SIGNATURE[0] && filename) { /* binary file? */ lf.f = freopen(filename, "rb", lf.f); /* reopen in binary mode */ if (lf.f == NULL) return errfile(L, "reopen", fnameindex); /* skip eventual `#!...' */ while ((c = getc(lf.f)) != EOF && c != LUA_SIGNATURE[0]) ; lf.extraline = 0; } ungetc(c, lf.f); status = lua_load(L, getF, &lf, lua_tostring(L, -1)); readstatus = ferror(lf.f); if (filename) fclose(lf.f); /* close file (even in case of errors) */ if (readstatus) { lua_settop(L, fnameindex); /* ignore results from `lua_load' */ return errfile(L, "read", fnameindex); } lua_remove(L, fnameindex); return status; } typedef struct LoadS { const char *s; size_t size; } LoadS; static const char *getS (lua_State *L, void *ud, size_t *size) { LoadS *ls = (LoadS *)ud; (void)L; if (ls->size == 0) return NULL; *size = ls->size; ls->size = 0; return ls->s; } LUALIB_API int luaL_loadbuffer (lua_State *L, const char *buff, size_t size, const char *name) { LoadS ls; ls.s = buff; ls.size = size; return lua_load(L, getS, &ls, name); } LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s) { return luaL_loadbuffer(L, s, strlen(s), s); } /* }====================================================== */ static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { (void)ud; (void)osize; if (nsize == 0) { free(ptr); return NULL; } else return realloc(ptr, nsize); } static int panic (lua_State *L) { (void)L; /* to avoid warnings */ fprintf(stderr, "PANIC: unprotected error in call to Lua API (%s)\n", lua_tostring(L, -1)); return 0; } LUALIB_API lua_State *luaL_newstate (void) { lua_State *L = lua_newstate(l_alloc, NULL); if (L) lua_atpanic(L, &panic); return L; } genometools-1.5.1/src/external/lua-5.1.5/src/lauxlib.h000066400000000000000000000132211211610345200223010ustar00rootroot00000000000000/* ** $Id: lauxlib.h,v 1.88.1.1 2007/12/27 13:02:25 roberto Exp $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice in lua.h */ #ifndef lauxlib_h #define lauxlib_h #include #include #include "lua.h" #if defined(LUA_COMPAT_GETN) LUALIB_API int (luaL_getn) (lua_State *L, int t); LUALIB_API void (luaL_setn) (lua_State *L, int t, int n); #else #define luaL_getn(L,i) ((int)lua_objlen(L, i)) #define luaL_setn(L,i,j) ((void)0) /* no op! */ #endif #if defined(LUA_COMPAT_OPENLIB) #define luaI_openlib luaL_openlib #endif /* extra error code for `luaL_load' */ #define LUA_ERRFILE (LUA_ERRERR+1) typedef struct luaL_Reg { const char *name; lua_CFunction func; } luaL_Reg; LUALIB_API void (luaI_openlib) (lua_State *L, const char *libname, const luaL_Reg *l, int nup); LUALIB_API void (luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l); LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, size_t *l); LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, const char *def, size_t *l); LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, lua_Integer def); LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); LUALIB_API void (luaL_checkany) (lua_State *L, int narg); LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); LUALIB_API void (luaL_where) (lua_State *L, int lvl); LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, const char *const lst[]); LUALIB_API int (luaL_ref) (lua_State *L, int t); LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name); LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); LUALIB_API lua_State *(luaL_newstate) (void); LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, const char *r); LUALIB_API const char *(luaL_findtable) (lua_State *L, int idx, const char *fname, int szhint); /* ** =============================================================== ** some useful macros ** =============================================================== */ #define luaL_argcheck(L, cond,numarg,extramsg) \ ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) #define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) #define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) #define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) #define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) #define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) #define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) #define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) #define luaL_dofile(L, fn) \ (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) #define luaL_dostring(L, s) \ (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) #define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) #define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) /* ** {====================================================== ** Generic Buffer manipulation ** ======================================================= */ typedef struct luaL_Buffer { char *p; /* current position in buffer */ int lvl; /* number of strings in the stack (level) */ lua_State *L; char buffer[LUAL_BUFFERSIZE]; } luaL_Buffer; #define luaL_addchar(B,c) \ ((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ (*(B)->p++ = (char)(c))) /* compatibility only */ #define luaL_putchar(B,c) luaL_addchar(B,c) #define luaL_addsize(B,n) ((B)->p += (n)) LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); LUALIB_API char *(luaL_prepbuffer) (luaL_Buffer *B); LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); /* }====================================================== */ /* compatibility with ref system */ /* pre-defined references */ #define LUA_NOREF (-2) #define LUA_REFNIL (-1) #define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \ (lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0)) #define lua_unref(L,ref) luaL_unref(L, LUA_REGISTRYINDEX, (ref)) #define lua_getref(L,ref) lua_rawgeti(L, LUA_REGISTRYINDEX, (ref)) #define luaL_reg luaL_Reg #endif genometools-1.5.1/src/external/lua-5.1.5/src/lbaselib.c000066400000000000000000000412251211610345200224160ustar00rootroot00000000000000/* ** $Id: lbaselib.c,v 1.191.1.6 2008/02/14 16:46:22 roberto Exp $ ** Basic library ** See Copyright Notice in lua.h */ #include #include #include #include #define lbaselib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" /* ** If your system does not support `stdout', you can just remove this function. ** If you need, you can define your own `print' function, following this ** model but changing `fputs' to put the strings at a proper place ** (a console window or a log file, for instance). */ static int luaB_print (lua_State *L) { int n = lua_gettop(L); /* number of arguments */ int i; lua_getglobal(L, "tostring"); for (i=1; i<=n; i++) { const char *s; lua_pushvalue(L, -1); /* function to be called */ lua_pushvalue(L, i); /* value to print */ lua_call(L, 1, 1); s = lua_tostring(L, -1); /* get result */ if (s == NULL) return luaL_error(L, LUA_QL("tostring") " must return a string to " LUA_QL("print")); if (i>1) fputs("\t", stdout); fputs(s, stdout); lua_pop(L, 1); /* pop result */ } fputs("\n", stdout); return 0; } static int luaB_tonumber (lua_State *L) { int base = luaL_optint(L, 2, 10); if (base == 10) { /* standard conversion */ luaL_checkany(L, 1); if (lua_isnumber(L, 1)) { lua_pushnumber(L, lua_tonumber(L, 1)); return 1; } } else { const char *s1 = luaL_checkstring(L, 1); char *s2; unsigned long n; luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range"); n = strtoul(s1, &s2, base); if (s1 != s2) { /* at least one valid digit? */ while (isspace((unsigned char)(*s2))) s2++; /* skip trailing spaces */ if (*s2 == '\0') { /* no invalid trailing characters? */ lua_pushnumber(L, (lua_Number)n); return 1; } } } lua_pushnil(L); /* else not a number */ return 1; } static int luaB_error (lua_State *L) { int level = luaL_optint(L, 2, 1); lua_settop(L, 1); if (lua_isstring(L, 1) && level > 0) { /* add extra information? */ luaL_where(L, level); lua_pushvalue(L, 1); lua_concat(L, 2); } return lua_error(L); } static int luaB_getmetatable (lua_State *L) { luaL_checkany(L, 1); if (!lua_getmetatable(L, 1)) { lua_pushnil(L); return 1; /* no metatable */ } luaL_getmetafield(L, 1, "__metatable"); return 1; /* returns either __metatable field (if present) or metatable */ } static int luaB_setmetatable (lua_State *L) { int t = lua_type(L, 2); luaL_checktype(L, 1, LUA_TTABLE); luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, "nil or table expected"); if (luaL_getmetafield(L, 1, "__metatable")) luaL_error(L, "cannot change a protected metatable"); lua_settop(L, 2); lua_setmetatable(L, 1); return 1; } static void getfunc (lua_State *L, int opt) { if (lua_isfunction(L, 1)) lua_pushvalue(L, 1); else { lua_Debug ar; int level = opt ? luaL_optint(L, 1, 1) : luaL_checkint(L, 1); luaL_argcheck(L, level >= 0, 1, "level must be non-negative"); if (lua_getstack(L, level, &ar) == 0) luaL_argerror(L, 1, "invalid level"); lua_getinfo(L, "f", &ar); if (lua_isnil(L, -1)) luaL_error(L, "no function environment for tail call at level %d", level); } } static int luaB_getfenv (lua_State *L) { getfunc(L, 1); if (lua_iscfunction(L, -1)) /* is a C function? */ lua_pushvalue(L, LUA_GLOBALSINDEX); /* return the thread's global env. */ else lua_getfenv(L, -1); return 1; } static int luaB_setfenv (lua_State *L) { luaL_checktype(L, 2, LUA_TTABLE); getfunc(L, 0); lua_pushvalue(L, 2); if (lua_isnumber(L, 1) && lua_tonumber(L, 1) == 0) { /* change environment of current thread */ lua_pushthread(L); lua_insert(L, -2); lua_setfenv(L, -2); return 0; } else if (lua_iscfunction(L, -2) || lua_setfenv(L, -2) == 0) luaL_error(L, LUA_QL("setfenv") " cannot change environment of given object"); return 1; } static int luaB_rawequal (lua_State *L) { luaL_checkany(L, 1); luaL_checkany(L, 2); lua_pushboolean(L, lua_rawequal(L, 1, 2)); return 1; } static int luaB_rawget (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); luaL_checkany(L, 2); lua_settop(L, 2); lua_rawget(L, 1); return 1; } static int luaB_rawset (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); luaL_checkany(L, 2); luaL_checkany(L, 3); lua_settop(L, 3); lua_rawset(L, 1); return 1; } static int luaB_gcinfo (lua_State *L) { lua_pushinteger(L, lua_getgccount(L)); return 1; } static int luaB_collectgarbage (lua_State *L) { static const char *const opts[] = {"stop", "restart", "collect", "count", "step", "setpause", "setstepmul", NULL}; static const int optsnum[] = {LUA_GCSTOP, LUA_GCRESTART, LUA_GCCOLLECT, LUA_GCCOUNT, LUA_GCSTEP, LUA_GCSETPAUSE, LUA_GCSETSTEPMUL}; int o = luaL_checkoption(L, 1, "collect", opts); int ex = luaL_optint(L, 2, 0); int res = lua_gc(L, optsnum[o], ex); switch (optsnum[o]) { case LUA_GCCOUNT: { int b = lua_gc(L, LUA_GCCOUNTB, 0); lua_pushnumber(L, res + ((lua_Number)b/1024)); return 1; } case LUA_GCSTEP: { lua_pushboolean(L, res); return 1; } default: { lua_pushnumber(L, res); return 1; } } } static int luaB_type (lua_State *L) { luaL_checkany(L, 1); lua_pushstring(L, luaL_typename(L, 1)); return 1; } static int luaB_next (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); lua_settop(L, 2); /* create a 2nd argument if there isn't one */ if (lua_next(L, 1)) return 2; else { lua_pushnil(L); return 1; } } static int luaB_pairs (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); lua_pushvalue(L, lua_upvalueindex(1)); /* return generator, */ lua_pushvalue(L, 1); /* state, */ lua_pushnil(L); /* and initial value */ return 3; } static int ipairsaux (lua_State *L) { int i = luaL_checkint(L, 2); luaL_checktype(L, 1, LUA_TTABLE); i++; /* next value */ lua_pushinteger(L, i); lua_rawgeti(L, 1, i); return (lua_isnil(L, -1)) ? 0 : 2; } static int luaB_ipairs (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); lua_pushvalue(L, lua_upvalueindex(1)); /* return generator, */ lua_pushvalue(L, 1); /* state, */ lua_pushinteger(L, 0); /* and initial value */ return 3; } static int load_aux (lua_State *L, int status) { if (status == 0) /* OK? */ return 1; else { lua_pushnil(L); lua_insert(L, -2); /* put before error message */ return 2; /* return nil plus error message */ } } static int luaB_loadstring (lua_State *L) { size_t l; const char *s = luaL_checklstring(L, 1, &l); const char *chunkname = luaL_optstring(L, 2, s); return load_aux(L, luaL_loadbuffer(L, s, l, chunkname)); } static int luaB_loadfile (lua_State *L) { const char *fname = luaL_optstring(L, 1, NULL); return load_aux(L, luaL_loadfile(L, fname)); } /* ** Reader for generic `load' function: `lua_load' uses the ** stack for internal stuff, so the reader cannot change the ** stack top. Instead, it keeps its resulting string in a ** reserved slot inside the stack. */ static const char *generic_reader (lua_State *L, void *ud, size_t *size) { (void)ud; /* to avoid warnings */ luaL_checkstack(L, 2, "too many nested functions"); lua_pushvalue(L, 1); /* get function */ lua_call(L, 0, 1); /* call it */ if (lua_isnil(L, -1)) { *size = 0; return NULL; } else if (lua_isstring(L, -1)) { lua_replace(L, 3); /* save string in a reserved stack slot */ return lua_tolstring(L, 3, size); } else luaL_error(L, "reader function must return a string"); return NULL; /* to avoid warnings */ } static int luaB_load (lua_State *L) { int status; const char *cname = luaL_optstring(L, 2, "=(load)"); luaL_checktype(L, 1, LUA_TFUNCTION); lua_settop(L, 3); /* function, eventual name, plus one reserved slot */ status = lua_load(L, generic_reader, NULL, cname); return load_aux(L, status); } static int luaB_dofile (lua_State *L) { const char *fname = luaL_optstring(L, 1, NULL); int n = lua_gettop(L); if (luaL_loadfile(L, fname) != 0) lua_error(L); lua_call(L, 0, LUA_MULTRET); return lua_gettop(L) - n; } static int luaB_assert (lua_State *L) { luaL_checkany(L, 1); if (!lua_toboolean(L, 1)) return luaL_error(L, "%s", luaL_optstring(L, 2, "assertion failed!")); return lua_gettop(L); } static int luaB_unpack (lua_State *L) { int i, e, n; luaL_checktype(L, 1, LUA_TTABLE); i = luaL_optint(L, 2, 1); e = luaL_opt(L, luaL_checkint, 3, luaL_getn(L, 1)); if (i > e) return 0; /* empty range */ n = e - i + 1; /* number of elements */ if (n <= 0 || !lua_checkstack(L, n)) /* n <= 0 means arith. overflow */ return luaL_error(L, "too many results to unpack"); lua_rawgeti(L, 1, i); /* push arg[i] (avoiding overflow problems) */ while (i++ < e) /* push arg[i + 1...e] */ lua_rawgeti(L, 1, i); return n; } static int luaB_select (lua_State *L) { int n = lua_gettop(L); if (lua_type(L, 1) == LUA_TSTRING && *lua_tostring(L, 1) == '#') { lua_pushinteger(L, n-1); return 1; } else { int i = luaL_checkint(L, 1); if (i < 0) i = n + i; else if (i > n) i = n; luaL_argcheck(L, 1 <= i, 1, "index out of range"); return n - i; } } static int luaB_pcall (lua_State *L) { int status; luaL_checkany(L, 1); status = lua_pcall(L, lua_gettop(L) - 1, LUA_MULTRET, 0); lua_pushboolean(L, (status == 0)); lua_insert(L, 1); return lua_gettop(L); /* return status + all results */ } static int luaB_xpcall (lua_State *L) { int status; luaL_checkany(L, 2); lua_settop(L, 2); lua_insert(L, 1); /* put error function under function to be called */ status = lua_pcall(L, 0, LUA_MULTRET, 1); lua_pushboolean(L, (status == 0)); lua_replace(L, 1); return lua_gettop(L); /* return status + all results */ } static int luaB_tostring (lua_State *L) { luaL_checkany(L, 1); if (luaL_callmeta(L, 1, "__tostring")) /* is there a metafield? */ return 1; /* use its value */ switch (lua_type(L, 1)) { case LUA_TNUMBER: lua_pushstring(L, lua_tostring(L, 1)); break; case LUA_TSTRING: lua_pushvalue(L, 1); break; case LUA_TBOOLEAN: lua_pushstring(L, (lua_toboolean(L, 1) ? "true" : "false")); break; case LUA_TNIL: lua_pushliteral(L, "nil"); break; default: lua_pushfstring(L, "%s: %p", luaL_typename(L, 1), lua_topointer(L, 1)); break; } return 1; } static int luaB_newproxy (lua_State *L) { lua_settop(L, 1); lua_newuserdata(L, 0); /* create proxy */ if (lua_toboolean(L, 1) == 0) return 1; /* no metatable */ else if (lua_isboolean(L, 1)) { lua_newtable(L); /* create a new metatable `m' ... */ lua_pushvalue(L, -1); /* ... and mark `m' as a valid metatable */ lua_pushboolean(L, 1); lua_rawset(L, lua_upvalueindex(1)); /* weaktable[m] = true */ } else { int validproxy = 0; /* to check if weaktable[metatable(u)] == true */ if (lua_getmetatable(L, 1)) { lua_rawget(L, lua_upvalueindex(1)); validproxy = lua_toboolean(L, -1); lua_pop(L, 1); /* remove value */ } luaL_argcheck(L, validproxy, 1, "boolean or proxy expected"); lua_getmetatable(L, 1); /* metatable is valid; get it */ } lua_setmetatable(L, 2); return 1; } static const luaL_Reg base_funcs[] = { {"assert", luaB_assert}, {"collectgarbage", luaB_collectgarbage}, {"dofile", luaB_dofile}, {"error", luaB_error}, {"gcinfo", luaB_gcinfo}, {"getfenv", luaB_getfenv}, {"getmetatable", luaB_getmetatable}, {"loadfile", luaB_loadfile}, {"load", luaB_load}, {"loadstring", luaB_loadstring}, {"next", luaB_next}, {"pcall", luaB_pcall}, {"print", luaB_print}, {"rawequal", luaB_rawequal}, {"rawget", luaB_rawget}, {"rawset", luaB_rawset}, {"select", luaB_select}, {"setfenv", luaB_setfenv}, {"setmetatable", luaB_setmetatable}, {"tonumber", luaB_tonumber}, {"tostring", luaB_tostring}, {"type", luaB_type}, {"unpack", luaB_unpack}, {"xpcall", luaB_xpcall}, {NULL, NULL} }; /* ** {====================================================== ** Coroutine library ** ======================================================= */ #define CO_RUN 0 /* running */ #define CO_SUS 1 /* suspended */ #define CO_NOR 2 /* 'normal' (it resumed another coroutine) */ #define CO_DEAD 3 static const char *const statnames[] = {"running", "suspended", "normal", "dead"}; static int costatus (lua_State *L, lua_State *co) { if (L == co) return CO_RUN; switch (lua_status(co)) { case LUA_YIELD: return CO_SUS; case 0: { lua_Debug ar; if (lua_getstack(co, 0, &ar) > 0) /* does it have frames? */ return CO_NOR; /* it is running */ else if (lua_gettop(co) == 0) return CO_DEAD; else return CO_SUS; /* initial state */ } default: /* some error occured */ return CO_DEAD; } } static int luaB_costatus (lua_State *L) { lua_State *co = lua_tothread(L, 1); luaL_argcheck(L, co, 1, "coroutine expected"); lua_pushstring(L, statnames[costatus(L, co)]); return 1; } static int auxresume (lua_State *L, lua_State *co, int narg) { int status = costatus(L, co); if (!lua_checkstack(co, narg)) luaL_error(L, "too many arguments to resume"); if (status != CO_SUS) { lua_pushfstring(L, "cannot resume %s coroutine", statnames[status]); return -1; /* error flag */ } lua_xmove(L, co, narg); lua_setlevel(L, co); status = lua_resume(co, narg); if (status == 0 || status == LUA_YIELD) { int nres = lua_gettop(co); if (!lua_checkstack(L, nres + 1)) luaL_error(L, "too many results to resume"); lua_xmove(co, L, nres); /* move yielded values */ return nres; } else { lua_xmove(co, L, 1); /* move error message */ return -1; /* error flag */ } } static int luaB_coresume (lua_State *L) { lua_State *co = lua_tothread(L, 1); int r; luaL_argcheck(L, co, 1, "coroutine expected"); r = auxresume(L, co, lua_gettop(L) - 1); if (r < 0) { lua_pushboolean(L, 0); lua_insert(L, -2); return 2; /* return false + error message */ } else { lua_pushboolean(L, 1); lua_insert(L, -(r + 1)); return r + 1; /* return true + `resume' returns */ } } static int luaB_auxwrap (lua_State *L) { lua_State *co = lua_tothread(L, lua_upvalueindex(1)); int r = auxresume(L, co, lua_gettop(L)); if (r < 0) { if (lua_isstring(L, -1)) { /* error object is a string? */ luaL_where(L, 1); /* add extra info */ lua_insert(L, -2); lua_concat(L, 2); } lua_error(L); /* propagate error */ } return r; } static int luaB_cocreate (lua_State *L) { lua_State *NL = lua_newthread(L); luaL_argcheck(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), 1, "Lua function expected"); lua_pushvalue(L, 1); /* move function to top */ lua_xmove(L, NL, 1); /* move function from L to NL */ return 1; } static int luaB_cowrap (lua_State *L) { luaB_cocreate(L); lua_pushcclosure(L, luaB_auxwrap, 1); return 1; } static int luaB_yield (lua_State *L) { return lua_yield(L, lua_gettop(L)); } static int luaB_corunning (lua_State *L) { if (lua_pushthread(L)) lua_pushnil(L); /* main thread is not a coroutine */ return 1; } static const luaL_Reg co_funcs[] = { {"create", luaB_cocreate}, {"resume", luaB_coresume}, {"running", luaB_corunning}, {"status", luaB_costatus}, {"wrap", luaB_cowrap}, {"yield", luaB_yield}, {NULL, NULL} }; /* }====================================================== */ static void auxopen (lua_State *L, const char *name, lua_CFunction f, lua_CFunction u) { lua_pushcfunction(L, u); lua_pushcclosure(L, f, 1); lua_setfield(L, -2, name); } static void base_open (lua_State *L) { /* set global _G */ lua_pushvalue(L, LUA_GLOBALSINDEX); lua_setglobal(L, "_G"); /* open lib into global table */ luaL_register(L, "_G", base_funcs); lua_pushliteral(L, LUA_VERSION); lua_setglobal(L, "_VERSION"); /* set global _VERSION */ /* `ipairs' and `pairs' need auxiliary functions as upvalues */ auxopen(L, "ipairs", luaB_ipairs, ipairsaux); auxopen(L, "pairs", luaB_pairs, luaB_next); /* `newproxy' needs a weaktable as upvalue */ lua_createtable(L, 0, 1); /* new table `w' */ lua_pushvalue(L, -1); /* `w' will be its own metatable */ lua_setmetatable(L, -2); lua_pushliteral(L, "kv"); lua_setfield(L, -2, "__mode"); /* metatable(w).__mode = "kv" */ lua_pushcclosure(L, luaB_newproxy, 1); lua_setglobal(L, "newproxy"); /* set global `newproxy' */ } LUALIB_API int luaopen_base (lua_State *L) { base_open(L); luaL_register(L, LUA_COLIBNAME, co_funcs); return 2; } genometools-1.5.1/src/external/lua-5.1.5/src/lcode.c000066400000000000000000000512621211610345200217310ustar00rootroot00000000000000/* ** $Id: lcode.c,v 2.25.1.5 2011/01/31 14:53:16 roberto Exp $ ** Code generator for Lua ** See Copyright Notice in lua.h */ #include #define lcode_c #define LUA_CORE #include "lua.h" #include "lcode.h" #include "ldebug.h" #include "ldo.h" #include "lgc.h" #include "llex.h" #include "lmem.h" #include "lobject.h" #include "lopcodes.h" #include "lparser.h" #include "ltable.h" #define hasjumps(e) ((e)->t != (e)->f) static int isnumeral(expdesc *e) { return (e->k == VKNUM && e->t == NO_JUMP && e->f == NO_JUMP); } void luaK_nil (FuncState *fs, int from, int n) { Instruction *previous; if (fs->pc > fs->lasttarget) { /* no jumps to current position? */ if (fs->pc == 0) { /* function start? */ if (from >= fs->nactvar) return; /* positions are already clean */ } else { previous = &fs->f->code[fs->pc-1]; if (GET_OPCODE(*previous) == OP_LOADNIL) { int pfrom = GETARG_A(*previous); int pto = GETARG_B(*previous); if (pfrom <= from && from <= pto+1) { /* can connect both? */ if (from+n-1 > pto) SETARG_B(*previous, from+n-1); return; } } } } luaK_codeABC(fs, OP_LOADNIL, from, from+n-1, 0); /* else no optimization */ } int luaK_jump (FuncState *fs) { int jpc = fs->jpc; /* save list of jumps to here */ int j; fs->jpc = NO_JUMP; j = luaK_codeAsBx(fs, OP_JMP, 0, NO_JUMP); luaK_concat(fs, &j, jpc); /* keep them on hold */ return j; } void luaK_ret (FuncState *fs, int first, int nret) { luaK_codeABC(fs, OP_RETURN, first, nret+1, 0); } static int condjump (FuncState *fs, OpCode op, int A, int B, int C) { luaK_codeABC(fs, op, A, B, C); return luaK_jump(fs); } static void fixjump (FuncState *fs, int pc, int dest) { Instruction *jmp = &fs->f->code[pc]; int offset = dest-(pc+1); lua_assert(dest != NO_JUMP); if (abs(offset) > MAXARG_sBx) luaX_syntaxerror(fs->ls, "control structure too long"); SETARG_sBx(*jmp, offset); } /* ** returns current `pc' and marks it as a jump target (to avoid wrong ** optimizations with consecutive instructions not in the same basic block). */ int luaK_getlabel (FuncState *fs) { fs->lasttarget = fs->pc; return fs->pc; } static int getjump (FuncState *fs, int pc) { int offset = GETARG_sBx(fs->f->code[pc]); if (offset == NO_JUMP) /* point to itself represents end of list */ return NO_JUMP; /* end of list */ else return (pc+1)+offset; /* turn offset into absolute position */ } static Instruction *getjumpcontrol (FuncState *fs, int pc) { Instruction *pi = &fs->f->code[pc]; if (pc >= 1 && testTMode(GET_OPCODE(*(pi-1)))) return pi-1; else return pi; } /* ** check whether list has any jump that do not produce a value ** (or produce an inverted value) */ static int need_value (FuncState *fs, int list) { for (; list != NO_JUMP; list = getjump(fs, list)) { Instruction i = *getjumpcontrol(fs, list); if (GET_OPCODE(i) != OP_TESTSET) return 1; } return 0; /* not found */ } static int patchtestreg (FuncState *fs, int node, int reg) { Instruction *i = getjumpcontrol(fs, node); if (GET_OPCODE(*i) != OP_TESTSET) return 0; /* cannot patch other instructions */ if (reg != NO_REG && reg != GETARG_B(*i)) SETARG_A(*i, reg); else /* no register to put value or register already has the value */ *i = CREATE_ABC(OP_TEST, GETARG_B(*i), 0, GETARG_C(*i)); return 1; } static void removevalues (FuncState *fs, int list) { for (; list != NO_JUMP; list = getjump(fs, list)) patchtestreg(fs, list, NO_REG); } static void patchlistaux (FuncState *fs, int list, int vtarget, int reg, int dtarget) { while (list != NO_JUMP) { int next = getjump(fs, list); if (patchtestreg(fs, list, reg)) fixjump(fs, list, vtarget); else fixjump(fs, list, dtarget); /* jump to default target */ list = next; } } static void dischargejpc (FuncState *fs) { patchlistaux(fs, fs->jpc, fs->pc, NO_REG, fs->pc); fs->jpc = NO_JUMP; } void luaK_patchlist (FuncState *fs, int list, int target) { if (target == fs->pc) luaK_patchtohere(fs, list); else { lua_assert(target < fs->pc); patchlistaux(fs, list, target, NO_REG, target); } } void luaK_patchtohere (FuncState *fs, int list) { luaK_getlabel(fs); luaK_concat(fs, &fs->jpc, list); } void luaK_concat (FuncState *fs, int *l1, int l2) { if (l2 == NO_JUMP) return; else if (*l1 == NO_JUMP) *l1 = l2; else { int list = *l1; int next; while ((next = getjump(fs, list)) != NO_JUMP) /* find last element */ list = next; fixjump(fs, list, l2); } } void luaK_checkstack (FuncState *fs, int n) { int newstack = fs->freereg + n; if (newstack > fs->f->maxstacksize) { if (newstack >= MAXSTACK) luaX_syntaxerror(fs->ls, "function or expression too complex"); fs->f->maxstacksize = cast_byte(newstack); } } void luaK_reserveregs (FuncState *fs, int n) { luaK_checkstack(fs, n); fs->freereg += n; } static void freereg (FuncState *fs, int reg) { if (!ISK(reg) && reg >= fs->nactvar) { fs->freereg--; lua_assert(reg == fs->freereg); } } static void freeexp (FuncState *fs, expdesc *e) { if (e->k == VNONRELOC) freereg(fs, e->u.s.info); } static int addk (FuncState *fs, TValue *k, TValue *v) { lua_State *L = fs->L; TValue *idx = luaH_set(L, fs->h, k); Proto *f = fs->f; int oldsize = f->sizek; if (ttisnumber(idx)) { lua_assert(luaO_rawequalObj(&fs->f->k[cast_int(nvalue(idx))], v)); return cast_int(nvalue(idx)); } else { /* constant not found; create a new entry */ setnvalue(idx, cast_num(fs->nk)); luaM_growvector(L, f->k, fs->nk, f->sizek, TValue, MAXARG_Bx, "constant table overflow"); while (oldsize < f->sizek) setnilvalue(&f->k[oldsize++]); setobj(L, &f->k[fs->nk], v); luaC_barrier(L, f, v); return fs->nk++; } } int luaK_stringK (FuncState *fs, TString *s) { TValue o; setsvalue(fs->L, &o, s); return addk(fs, &o, &o); } int luaK_numberK (FuncState *fs, lua_Number r) { TValue o; setnvalue(&o, r); return addk(fs, &o, &o); } static int boolK (FuncState *fs, int b) { TValue o; setbvalue(&o, b); return addk(fs, &o, &o); } static int nilK (FuncState *fs) { TValue k, v; setnilvalue(&v); /* cannot use nil as key; instead use table itself to represent nil */ sethvalue(fs->L, &k, fs->h); return addk(fs, &k, &v); } void luaK_setreturns (FuncState *fs, expdesc *e, int nresults) { if (e->k == VCALL) { /* expression is an open function call? */ SETARG_C(getcode(fs, e), nresults+1); } else if (e->k == VVARARG) { SETARG_B(getcode(fs, e), nresults+1); SETARG_A(getcode(fs, e), fs->freereg); luaK_reserveregs(fs, 1); } } void luaK_setoneret (FuncState *fs, expdesc *e) { if (e->k == VCALL) { /* expression is an open function call? */ e->k = VNONRELOC; e->u.s.info = GETARG_A(getcode(fs, e)); } else if (e->k == VVARARG) { SETARG_B(getcode(fs, e), 2); e->k = VRELOCABLE; /* can relocate its simple result */ } } void luaK_dischargevars (FuncState *fs, expdesc *e) { switch (e->k) { case VLOCAL: { e->k = VNONRELOC; break; } case VUPVAL: { e->u.s.info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->u.s.info, 0); e->k = VRELOCABLE; break; } case VGLOBAL: { e->u.s.info = luaK_codeABx(fs, OP_GETGLOBAL, 0, e->u.s.info); e->k = VRELOCABLE; break; } case VINDEXED: { freereg(fs, e->u.s.aux); freereg(fs, e->u.s.info); e->u.s.info = luaK_codeABC(fs, OP_GETTABLE, 0, e->u.s.info, e->u.s.aux); e->k = VRELOCABLE; break; } case VVARARG: case VCALL: { luaK_setoneret(fs, e); break; } default: break; /* there is one value available (somewhere) */ } } static int code_label (FuncState *fs, int A, int b, int jump) { luaK_getlabel(fs); /* those instructions may be jump targets */ return luaK_codeABC(fs, OP_LOADBOOL, A, b, jump); } static void discharge2reg (FuncState *fs, expdesc *e, int reg) { luaK_dischargevars(fs, e); switch (e->k) { case VNIL: { luaK_nil(fs, reg, 1); break; } case VFALSE: case VTRUE: { luaK_codeABC(fs, OP_LOADBOOL, reg, e->k == VTRUE, 0); break; } case VK: { luaK_codeABx(fs, OP_LOADK, reg, e->u.s.info); break; } case VKNUM: { luaK_codeABx(fs, OP_LOADK, reg, luaK_numberK(fs, e->u.nval)); break; } case VRELOCABLE: { Instruction *pc = &getcode(fs, e); SETARG_A(*pc, reg); break; } case VNONRELOC: { if (reg != e->u.s.info) luaK_codeABC(fs, OP_MOVE, reg, e->u.s.info, 0); break; } default: { lua_assert(e->k == VVOID || e->k == VJMP); return; /* nothing to do... */ } } e->u.s.info = reg; e->k = VNONRELOC; } static void discharge2anyreg (FuncState *fs, expdesc *e) { if (e->k != VNONRELOC) { luaK_reserveregs(fs, 1); discharge2reg(fs, e, fs->freereg-1); } } static void exp2reg (FuncState *fs, expdesc *e, int reg) { discharge2reg(fs, e, reg); if (e->k == VJMP) luaK_concat(fs, &e->t, e->u.s.info); /* put this jump in `t' list */ if (hasjumps(e)) { int final; /* position after whole expression */ int p_f = NO_JUMP; /* position of an eventual LOAD false */ int p_t = NO_JUMP; /* position of an eventual LOAD true */ if (need_value(fs, e->t) || need_value(fs, e->f)) { int fj = (e->k == VJMP) ? NO_JUMP : luaK_jump(fs); p_f = code_label(fs, reg, 0, 1); p_t = code_label(fs, reg, 1, 0); luaK_patchtohere(fs, fj); } final = luaK_getlabel(fs); patchlistaux(fs, e->f, final, reg, p_f); patchlistaux(fs, e->t, final, reg, p_t); } e->f = e->t = NO_JUMP; e->u.s.info = reg; e->k = VNONRELOC; } void luaK_exp2nextreg (FuncState *fs, expdesc *e) { luaK_dischargevars(fs, e); freeexp(fs, e); luaK_reserveregs(fs, 1); exp2reg(fs, e, fs->freereg - 1); } int luaK_exp2anyreg (FuncState *fs, expdesc *e) { luaK_dischargevars(fs, e); if (e->k == VNONRELOC) { if (!hasjumps(e)) return e->u.s.info; /* exp is already in a register */ if (e->u.s.info >= fs->nactvar) { /* reg. is not a local? */ exp2reg(fs, e, e->u.s.info); /* put value on it */ return e->u.s.info; } } luaK_exp2nextreg(fs, e); /* default */ return e->u.s.info; } void luaK_exp2val (FuncState *fs, expdesc *e) { if (hasjumps(e)) luaK_exp2anyreg(fs, e); else luaK_dischargevars(fs, e); } int luaK_exp2RK (FuncState *fs, expdesc *e) { luaK_exp2val(fs, e); switch (e->k) { case VKNUM: case VTRUE: case VFALSE: case VNIL: { if (fs->nk <= MAXINDEXRK) { /* constant fit in RK operand? */ e->u.s.info = (e->k == VNIL) ? nilK(fs) : (e->k == VKNUM) ? luaK_numberK(fs, e->u.nval) : boolK(fs, (e->k == VTRUE)); e->k = VK; return RKASK(e->u.s.info); } else break; } case VK: { if (e->u.s.info <= MAXINDEXRK) /* constant fit in argC? */ return RKASK(e->u.s.info); else break; } default: break; } /* not a constant in the right range: put it in a register */ return luaK_exp2anyreg(fs, e); } void luaK_storevar (FuncState *fs, expdesc *var, expdesc *ex) { switch (var->k) { case VLOCAL: { freeexp(fs, ex); exp2reg(fs, ex, var->u.s.info); return; } case VUPVAL: { int e = luaK_exp2anyreg(fs, ex); luaK_codeABC(fs, OP_SETUPVAL, e, var->u.s.info, 0); break; } case VGLOBAL: { int e = luaK_exp2anyreg(fs, ex); luaK_codeABx(fs, OP_SETGLOBAL, e, var->u.s.info); break; } case VINDEXED: { int e = luaK_exp2RK(fs, ex); luaK_codeABC(fs, OP_SETTABLE, var->u.s.info, var->u.s.aux, e); break; } default: { lua_assert(0); /* invalid var kind to store */ break; } } freeexp(fs, ex); } void luaK_self (FuncState *fs, expdesc *e, expdesc *key) { int func; luaK_exp2anyreg(fs, e); freeexp(fs, e); func = fs->freereg; luaK_reserveregs(fs, 2); luaK_codeABC(fs, OP_SELF, func, e->u.s.info, luaK_exp2RK(fs, key)); freeexp(fs, key); e->u.s.info = func; e->k = VNONRELOC; } static void invertjump (FuncState *fs, expdesc *e) { Instruction *pc = getjumpcontrol(fs, e->u.s.info); lua_assert(testTMode(GET_OPCODE(*pc)) && GET_OPCODE(*pc) != OP_TESTSET && GET_OPCODE(*pc) != OP_TEST); SETARG_A(*pc, !(GETARG_A(*pc))); } static int jumponcond (FuncState *fs, expdesc *e, int cond) { if (e->k == VRELOCABLE) { Instruction ie = getcode(fs, e); if (GET_OPCODE(ie) == OP_NOT) { fs->pc--; /* remove previous OP_NOT */ return condjump(fs, OP_TEST, GETARG_B(ie), 0, !cond); } /* else go through */ } discharge2anyreg(fs, e); freeexp(fs, e); return condjump(fs, OP_TESTSET, NO_REG, e->u.s.info, cond); } void luaK_goiftrue (FuncState *fs, expdesc *e) { int pc; /* pc of last jump */ luaK_dischargevars(fs, e); switch (e->k) { case VK: case VKNUM: case VTRUE: { pc = NO_JUMP; /* always true; do nothing */ break; } case VJMP: { invertjump(fs, e); pc = e->u.s.info; break; } default: { pc = jumponcond(fs, e, 0); break; } } luaK_concat(fs, &e->f, pc); /* insert last jump in `f' list */ luaK_patchtohere(fs, e->t); e->t = NO_JUMP; } static void luaK_goiffalse (FuncState *fs, expdesc *e) { int pc; /* pc of last jump */ luaK_dischargevars(fs, e); switch (e->k) { case VNIL: case VFALSE: { pc = NO_JUMP; /* always false; do nothing */ break; } case VJMP: { pc = e->u.s.info; break; } default: { pc = jumponcond(fs, e, 1); break; } } luaK_concat(fs, &e->t, pc); /* insert last jump in `t' list */ luaK_patchtohere(fs, e->f); e->f = NO_JUMP; } static void codenot (FuncState *fs, expdesc *e) { luaK_dischargevars(fs, e); switch (e->k) { case VNIL: case VFALSE: { e->k = VTRUE; break; } case VK: case VKNUM: case VTRUE: { e->k = VFALSE; break; } case VJMP: { invertjump(fs, e); break; } case VRELOCABLE: case VNONRELOC: { discharge2anyreg(fs, e); freeexp(fs, e); e->u.s.info = luaK_codeABC(fs, OP_NOT, 0, e->u.s.info, 0); e->k = VRELOCABLE; break; } default: { lua_assert(0); /* cannot happen */ break; } } /* interchange true and false lists */ { int temp = e->f; e->f = e->t; e->t = temp; } removevalues(fs, e->f); removevalues(fs, e->t); } void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k) { t->u.s.aux = luaK_exp2RK(fs, k); t->k = VINDEXED; } static int constfolding (OpCode op, expdesc *e1, expdesc *e2) { lua_Number v1, v2, r; if (!isnumeral(e1) || !isnumeral(e2)) return 0; v1 = e1->u.nval; v2 = e2->u.nval; switch (op) { case OP_ADD: r = luai_numadd(v1, v2); break; case OP_SUB: r = luai_numsub(v1, v2); break; case OP_MUL: r = luai_nummul(v1, v2); break; case OP_DIV: if (v2 == 0) return 0; /* do not attempt to divide by 0 */ r = luai_numdiv(v1, v2); break; case OP_MOD: if (v2 == 0) return 0; /* do not attempt to divide by 0 */ r = luai_nummod(v1, v2); break; case OP_POW: r = luai_numpow(v1, v2); break; case OP_UNM: r = luai_numunm(v1); break; case OP_LEN: return 0; /* no constant folding for 'len' */ default: lua_assert(0); r = 0; break; } if (luai_numisnan(r)) return 0; /* do not attempt to produce NaN */ e1->u.nval = r; return 1; } static void codearith (FuncState *fs, OpCode op, expdesc *e1, expdesc *e2) { if (constfolding(op, e1, e2)) return; else { int o2 = (op != OP_UNM && op != OP_LEN) ? luaK_exp2RK(fs, e2) : 0; int o1 = luaK_exp2RK(fs, e1); if (o1 > o2) { freeexp(fs, e1); freeexp(fs, e2); } else { freeexp(fs, e2); freeexp(fs, e1); } e1->u.s.info = luaK_codeABC(fs, op, 0, o1, o2); e1->k = VRELOCABLE; } } static void codecomp (FuncState *fs, OpCode op, int cond, expdesc *e1, expdesc *e2) { int o1 = luaK_exp2RK(fs, e1); int o2 = luaK_exp2RK(fs, e2); freeexp(fs, e2); freeexp(fs, e1); if (cond == 0 && op != OP_EQ) { int temp; /* exchange args to replace by `<' or `<=' */ temp = o1; o1 = o2; o2 = temp; /* o1 <==> o2 */ cond = 1; } e1->u.s.info = condjump(fs, op, cond, o1, o2); e1->k = VJMP; } void luaK_prefix (FuncState *fs, UnOpr op, expdesc *e) { expdesc e2; e2.t = e2.f = NO_JUMP; e2.k = VKNUM; e2.u.nval = 0; switch (op) { case OPR_MINUS: { if (!isnumeral(e)) luaK_exp2anyreg(fs, e); /* cannot operate on non-numeric constants */ codearith(fs, OP_UNM, e, &e2); break; } case OPR_NOT: codenot(fs, e); break; case OPR_LEN: { luaK_exp2anyreg(fs, e); /* cannot operate on constants */ codearith(fs, OP_LEN, e, &e2); break; } default: lua_assert(0); } } void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) { switch (op) { case OPR_AND: { luaK_goiftrue(fs, v); break; } case OPR_OR: { luaK_goiffalse(fs, v); break; } case OPR_CONCAT: { luaK_exp2nextreg(fs, v); /* operand must be on the `stack' */ break; } case OPR_ADD: case OPR_SUB: case OPR_MUL: case OPR_DIV: case OPR_MOD: case OPR_POW: { if (!isnumeral(v)) luaK_exp2RK(fs, v); break; } default: { luaK_exp2RK(fs, v); break; } } } void luaK_posfix (FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2) { switch (op) { case OPR_AND: { lua_assert(e1->t == NO_JUMP); /* list must be closed */ luaK_dischargevars(fs, e2); luaK_concat(fs, &e2->f, e1->f); *e1 = *e2; break; } case OPR_OR: { lua_assert(e1->f == NO_JUMP); /* list must be closed */ luaK_dischargevars(fs, e2); luaK_concat(fs, &e2->t, e1->t); *e1 = *e2; break; } case OPR_CONCAT: { luaK_exp2val(fs, e2); if (e2->k == VRELOCABLE && GET_OPCODE(getcode(fs, e2)) == OP_CONCAT) { lua_assert(e1->u.s.info == GETARG_B(getcode(fs, e2))-1); freeexp(fs, e1); SETARG_B(getcode(fs, e2), e1->u.s.info); e1->k = VRELOCABLE; e1->u.s.info = e2->u.s.info; } else { luaK_exp2nextreg(fs, e2); /* operand must be on the 'stack' */ codearith(fs, OP_CONCAT, e1, e2); } break; } case OPR_ADD: codearith(fs, OP_ADD, e1, e2); break; case OPR_SUB: codearith(fs, OP_SUB, e1, e2); break; case OPR_MUL: codearith(fs, OP_MUL, e1, e2); break; case OPR_DIV: codearith(fs, OP_DIV, e1, e2); break; case OPR_MOD: codearith(fs, OP_MOD, e1, e2); break; case OPR_POW: codearith(fs, OP_POW, e1, e2); break; case OPR_EQ: codecomp(fs, OP_EQ, 1, e1, e2); break; case OPR_NE: codecomp(fs, OP_EQ, 0, e1, e2); break; case OPR_LT: codecomp(fs, OP_LT, 1, e1, e2); break; case OPR_LE: codecomp(fs, OP_LE, 1, e1, e2); break; case OPR_GT: codecomp(fs, OP_LT, 0, e1, e2); break; case OPR_GE: codecomp(fs, OP_LE, 0, e1, e2); break; default: lua_assert(0); } } void luaK_fixline (FuncState *fs, int line) { fs->f->lineinfo[fs->pc - 1] = line; } static int luaK_code (FuncState *fs, Instruction i, int line) { Proto *f = fs->f; dischargejpc(fs); /* `pc' will change */ /* put new instruction in code array */ luaM_growvector(fs->L, f->code, fs->pc, f->sizecode, Instruction, MAX_INT, "code size overflow"); f->code[fs->pc] = i; /* save corresponding line information */ luaM_growvector(fs->L, f->lineinfo, fs->pc, f->sizelineinfo, int, MAX_INT, "code size overflow"); f->lineinfo[fs->pc] = line; return fs->pc++; } int luaK_codeABC (FuncState *fs, OpCode o, int a, int b, int c) { lua_assert(getOpMode(o) == iABC); lua_assert(getBMode(o) != OpArgN || b == 0); lua_assert(getCMode(o) != OpArgN || c == 0); return luaK_code(fs, CREATE_ABC(o, a, b, c), fs->ls->lastline); } int luaK_codeABx (FuncState *fs, OpCode o, int a, unsigned int bc) { lua_assert(getOpMode(o) == iABx || getOpMode(o) == iAsBx); lua_assert(getCMode(o) == OpArgN); return luaK_code(fs, CREATE_ABx(o, a, bc), fs->ls->lastline); } void luaK_setlist (FuncState *fs, int base, int nelems, int tostore) { int c = (nelems - 1)/LFIELDS_PER_FLUSH + 1; int b = (tostore == LUA_MULTRET) ? 0 : tostore; lua_assert(tostore != 0); if (c <= MAXARG_C) luaK_codeABC(fs, OP_SETLIST, base, b, c); else { luaK_codeABC(fs, OP_SETLIST, base, b, 0); luaK_code(fs, cast(Instruction, c), fs->ls->lastline); } fs->freereg = base + 1; /* free registers with list values */ } genometools-1.5.1/src/external/lua-5.1.5/src/lcode.h000066400000000000000000000052761211610345200217420ustar00rootroot00000000000000/* ** $Id: lcode.h,v 1.48.1.1 2007/12/27 13:02:25 roberto Exp $ ** Code generator for Lua ** See Copyright Notice in lua.h */ #ifndef lcode_h #define lcode_h #include "llex.h" #include "lobject.h" #include "lopcodes.h" #include "lparser.h" /* ** Marks the end of a patch list. It is an invalid value both as an absolute ** address, and as a list link (would link an element to itself). */ #define NO_JUMP (-1) /* ** grep "ORDER OPR" if you change these enums */ typedef enum BinOpr { OPR_ADD, OPR_SUB, OPR_MUL, OPR_DIV, OPR_MOD, OPR_POW, OPR_CONCAT, OPR_NE, OPR_EQ, OPR_LT, OPR_LE, OPR_GT, OPR_GE, OPR_AND, OPR_OR, OPR_NOBINOPR } BinOpr; typedef enum UnOpr { OPR_MINUS, OPR_NOT, OPR_LEN, OPR_NOUNOPR } UnOpr; #define getcode(fs,e) ((fs)->f->code[(e)->u.s.info]) #define luaK_codeAsBx(fs,o,A,sBx) luaK_codeABx(fs,o,A,(sBx)+MAXARG_sBx) #define luaK_setmultret(fs,e) luaK_setreturns(fs, e, LUA_MULTRET) LUAI_FUNC int luaK_codeABx (FuncState *fs, OpCode o, int A, unsigned int Bx); LUAI_FUNC int luaK_codeABC (FuncState *fs, OpCode o, int A, int B, int C); LUAI_FUNC void luaK_fixline (FuncState *fs, int line); LUAI_FUNC void luaK_nil (FuncState *fs, int from, int n); LUAI_FUNC void luaK_reserveregs (FuncState *fs, int n); LUAI_FUNC void luaK_checkstack (FuncState *fs, int n); LUAI_FUNC int luaK_stringK (FuncState *fs, TString *s); LUAI_FUNC int luaK_numberK (FuncState *fs, lua_Number r); LUAI_FUNC void luaK_dischargevars (FuncState *fs, expdesc *e); LUAI_FUNC int luaK_exp2anyreg (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_exp2nextreg (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_exp2val (FuncState *fs, expdesc *e); LUAI_FUNC int luaK_exp2RK (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_self (FuncState *fs, expdesc *e, expdesc *key); LUAI_FUNC void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k); LUAI_FUNC void luaK_goiftrue (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_storevar (FuncState *fs, expdesc *var, expdesc *e); LUAI_FUNC void luaK_setreturns (FuncState *fs, expdesc *e, int nresults); LUAI_FUNC void luaK_setoneret (FuncState *fs, expdesc *e); LUAI_FUNC int luaK_jump (FuncState *fs); LUAI_FUNC void luaK_ret (FuncState *fs, int first, int nret); LUAI_FUNC void luaK_patchlist (FuncState *fs, int list, int target); LUAI_FUNC void luaK_patchtohere (FuncState *fs, int list); LUAI_FUNC void luaK_concat (FuncState *fs, int *l1, int l2); LUAI_FUNC int luaK_getlabel (FuncState *fs); LUAI_FUNC void luaK_prefix (FuncState *fs, UnOpr op, expdesc *v); LUAI_FUNC void luaK_infix (FuncState *fs, BinOpr op, expdesc *v); LUAI_FUNC void luaK_posfix (FuncState *fs, BinOpr op, expdesc *v1, expdesc *v2); LUAI_FUNC void luaK_setlist (FuncState *fs, int base, int nelems, int tostore); #endif genometools-1.5.1/src/external/lua-5.1.5/src/ldblib.c000066400000000000000000000235541211610345200220760ustar00rootroot00000000000000/* ** $Id: ldblib.c,v 1.104.1.4 2009/08/04 18:50:18 roberto Exp $ ** Interface from Lua to its debug API ** See Copyright Notice in lua.h */ #include #include #include #define ldblib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" static int db_getregistry (lua_State *L) { lua_pushvalue(L, LUA_REGISTRYINDEX); return 1; } static int db_getmetatable (lua_State *L) { luaL_checkany(L, 1); if (!lua_getmetatable(L, 1)) { lua_pushnil(L); /* no metatable */ } return 1; } static int db_setmetatable (lua_State *L) { int t = lua_type(L, 2); luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, "nil or table expected"); lua_settop(L, 2); lua_pushboolean(L, lua_setmetatable(L, 1)); return 1; } static int db_getfenv (lua_State *L) { luaL_checkany(L, 1); lua_getfenv(L, 1); return 1; } static int db_setfenv (lua_State *L) { luaL_checktype(L, 2, LUA_TTABLE); lua_settop(L, 2); if (lua_setfenv(L, 1) == 0) luaL_error(L, LUA_QL("setfenv") " cannot change environment of given object"); return 1; } static void settabss (lua_State *L, const char *i, const char *v) { lua_pushstring(L, v); lua_setfield(L, -2, i); } static void settabsi (lua_State *L, const char *i, int v) { lua_pushinteger(L, v); lua_setfield(L, -2, i); } static lua_State *getthread (lua_State *L, int *arg) { if (lua_isthread(L, 1)) { *arg = 1; return lua_tothread(L, 1); } else { *arg = 0; return L; } } static void treatstackoption (lua_State *L, lua_State *L1, const char *fname) { if (L == L1) { lua_pushvalue(L, -2); lua_remove(L, -3); } else lua_xmove(L1, L, 1); lua_setfield(L, -2, fname); } static int db_getinfo (lua_State *L) { lua_Debug ar; int arg; lua_State *L1 = getthread(L, &arg); const char *options = luaL_optstring(L, arg+2, "flnSu"); if (lua_isnumber(L, arg+1)) { if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), &ar)) { lua_pushnil(L); /* level out of range */ return 1; } } else if (lua_isfunction(L, arg+1)) { lua_pushfstring(L, ">%s", options); options = lua_tostring(L, -1); lua_pushvalue(L, arg+1); lua_xmove(L, L1, 1); } else return luaL_argerror(L, arg+1, "function or level expected"); if (!lua_getinfo(L1, options, &ar)) return luaL_argerror(L, arg+2, "invalid option"); lua_createtable(L, 0, 2); if (strchr(options, 'S')) { settabss(L, "source", ar.source); settabss(L, "short_src", ar.short_src); settabsi(L, "linedefined", ar.linedefined); settabsi(L, "lastlinedefined", ar.lastlinedefined); settabss(L, "what", ar.what); } if (strchr(options, 'l')) settabsi(L, "currentline", ar.currentline); if (strchr(options, 'u')) settabsi(L, "nups", ar.nups); if (strchr(options, 'n')) { settabss(L, "name", ar.name); settabss(L, "namewhat", ar.namewhat); } if (strchr(options, 'L')) treatstackoption(L, L1, "activelines"); if (strchr(options, 'f')) treatstackoption(L, L1, "func"); return 1; /* return table */ } static int db_getlocal (lua_State *L) { int arg; lua_State *L1 = getthread(L, &arg); lua_Debug ar; const char *name; if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */ return luaL_argerror(L, arg+1, "level out of range"); name = lua_getlocal(L1, &ar, luaL_checkint(L, arg+2)); if (name) { lua_xmove(L1, L, 1); lua_pushstring(L, name); lua_pushvalue(L, -2); return 2; } else { lua_pushnil(L); return 1; } } static int db_setlocal (lua_State *L) { int arg; lua_State *L1 = getthread(L, &arg); lua_Debug ar; if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */ return luaL_argerror(L, arg+1, "level out of range"); luaL_checkany(L, arg+3); lua_settop(L, arg+3); lua_xmove(L, L1, 1); lua_pushstring(L, lua_setlocal(L1, &ar, luaL_checkint(L, arg+2))); return 1; } static int auxupvalue (lua_State *L, int get) { const char *name; int n = luaL_checkint(L, 2); luaL_checktype(L, 1, LUA_TFUNCTION); if (lua_iscfunction(L, 1)) return 0; /* cannot touch C upvalues from Lua */ name = get ? lua_getupvalue(L, 1, n) : lua_setupvalue(L, 1, n); if (name == NULL) return 0; lua_pushstring(L, name); lua_insert(L, -(get+1)); return get + 1; } static int db_getupvalue (lua_State *L) { return auxupvalue(L, 1); } static int db_setupvalue (lua_State *L) { luaL_checkany(L, 3); return auxupvalue(L, 0); } static const char KEY_HOOK = 'h'; static void hookf (lua_State *L, lua_Debug *ar) { static const char *const hooknames[] = {"call", "return", "line", "count", "tail return"}; lua_pushlightuserdata(L, (void *)&KEY_HOOK); lua_rawget(L, LUA_REGISTRYINDEX); lua_pushlightuserdata(L, L); lua_rawget(L, -2); if (lua_isfunction(L, -1)) { lua_pushstring(L, hooknames[(int)ar->event]); if (ar->currentline >= 0) lua_pushinteger(L, ar->currentline); else lua_pushnil(L); lua_assert(lua_getinfo(L, "lS", ar)); lua_call(L, 2, 0); } } static int makemask (const char *smask, int count) { int mask = 0; if (strchr(smask, 'c')) mask |= LUA_MASKCALL; if (strchr(smask, 'r')) mask |= LUA_MASKRET; if (strchr(smask, 'l')) mask |= LUA_MASKLINE; if (count > 0) mask |= LUA_MASKCOUNT; return mask; } static char *unmakemask (int mask, char *smask) { int i = 0; if (mask & LUA_MASKCALL) smask[i++] = 'c'; if (mask & LUA_MASKRET) smask[i++] = 'r'; if (mask & LUA_MASKLINE) smask[i++] = 'l'; smask[i] = '\0'; return smask; } static void gethooktable (lua_State *L) { lua_pushlightuserdata(L, (void *)&KEY_HOOK); lua_rawget(L, LUA_REGISTRYINDEX); if (!lua_istable(L, -1)) { lua_pop(L, 1); lua_createtable(L, 0, 1); lua_pushlightuserdata(L, (void *)&KEY_HOOK); lua_pushvalue(L, -2); lua_rawset(L, LUA_REGISTRYINDEX); } } static int db_sethook (lua_State *L) { int arg, mask, count; lua_Hook func; lua_State *L1 = getthread(L, &arg); if (lua_isnoneornil(L, arg+1)) { lua_settop(L, arg+1); func = NULL; mask = 0; count = 0; /* turn off hooks */ } else { const char *smask = luaL_checkstring(L, arg+2); luaL_checktype(L, arg+1, LUA_TFUNCTION); count = luaL_optint(L, arg+3, 0); func = hookf; mask = makemask(smask, count); } gethooktable(L); lua_pushlightuserdata(L, L1); lua_pushvalue(L, arg+1); lua_rawset(L, -3); /* set new hook */ lua_pop(L, 1); /* remove hook table */ lua_sethook(L1, func, mask, count); /* set hooks */ return 0; } static int db_gethook (lua_State *L) { int arg; lua_State *L1 = getthread(L, &arg); char buff[5]; int mask = lua_gethookmask(L1); lua_Hook hook = lua_gethook(L1); if (hook != NULL && hook != hookf) /* external hook? */ lua_pushliteral(L, "external hook"); else { gethooktable(L); lua_pushlightuserdata(L, L1); lua_rawget(L, -2); /* get hook */ lua_remove(L, -2); /* remove hook table */ } lua_pushstring(L, unmakemask(mask, buff)); lua_pushinteger(L, lua_gethookcount(L1)); return 3; } static int db_debug (lua_State *L) { for (;;) { char buffer[250]; fputs("lua_debug> ", stderr); if (fgets(buffer, sizeof(buffer), stdin) == 0 || strcmp(buffer, "cont\n") == 0) return 0; if (luaL_loadbuffer(L, buffer, strlen(buffer), "=(debug command)") || lua_pcall(L, 0, 0, 0)) { fputs(lua_tostring(L, -1), stderr); fputs("\n", stderr); } lua_settop(L, 0); /* remove eventual returns */ } } #define LEVELS1 12 /* size of the first part of the stack */ #define LEVELS2 10 /* size of the second part of the stack */ static int db_errorfb (lua_State *L) { int level; int firstpart = 1; /* still before eventual `...' */ int arg; lua_State *L1 = getthread(L, &arg); lua_Debug ar; if (lua_isnumber(L, arg+2)) { level = (int)lua_tointeger(L, arg+2); lua_pop(L, 1); } else level = (L == L1) ? 1 : 0; /* level 0 may be this own function */ if (lua_gettop(L) == arg) lua_pushliteral(L, ""); else if (!lua_isstring(L, arg+1)) return 1; /* message is not a string */ else lua_pushliteral(L, "\n"); lua_pushliteral(L, "stack traceback:"); while (lua_getstack(L1, level++, &ar)) { if (level > LEVELS1 && firstpart) { /* no more than `LEVELS2' more levels? */ if (!lua_getstack(L1, level+LEVELS2, &ar)) level--; /* keep going */ else { lua_pushliteral(L, "\n\t..."); /* too many levels */ while (lua_getstack(L1, level+LEVELS2, &ar)) /* find last levels */ level++; } firstpart = 0; continue; } lua_pushliteral(L, "\n\t"); lua_getinfo(L1, "Snl", &ar); lua_pushfstring(L, "%s:", ar.short_src); if (ar.currentline > 0) lua_pushfstring(L, "%d:", ar.currentline); if (*ar.namewhat != '\0') /* is there a name? */ lua_pushfstring(L, " in function " LUA_QS, ar.name); else { if (*ar.what == 'm') /* main? */ lua_pushfstring(L, " in main chunk"); else if (*ar.what == 'C' || *ar.what == 't') lua_pushliteral(L, " ?"); /* C function or tail call */ else lua_pushfstring(L, " in function <%s:%d>", ar.short_src, ar.linedefined); } lua_concat(L, lua_gettop(L) - arg); } lua_concat(L, lua_gettop(L) - arg); return 1; } static const luaL_Reg dblib[] = { {"debug", db_debug}, {"getfenv", db_getfenv}, {"gethook", db_gethook}, {"getinfo", db_getinfo}, {"getlocal", db_getlocal}, {"getregistry", db_getregistry}, {"getmetatable", db_getmetatable}, {"getupvalue", db_getupvalue}, {"setfenv", db_setfenv}, {"sethook", db_sethook}, {"setlocal", db_setlocal}, {"setmetatable", db_setmetatable}, {"setupvalue", db_setupvalue}, {"traceback", db_errorfb}, {NULL, NULL} }; LUALIB_API int luaopen_debug (lua_State *L) { luaL_register(L, LUA_DBLIBNAME, dblib); return 1; } genometools-1.5.1/src/external/lua-5.1.5/src/ldebug.c000066400000000000000000000407111211610345200221020ustar00rootroot00000000000000/* ** $Id: ldebug.c,v 2.29.1.6 2008/05/08 16:56:26 roberto Exp $ ** Debug Interface ** See Copyright Notice in lua.h */ #include #include #include #define ldebug_c #define LUA_CORE #include "lua.h" #include "lapi.h" #include "lcode.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lobject.h" #include "lopcodes.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #include "lvm.h" static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name); static int currentpc (lua_State *L, CallInfo *ci) { if (!isLua(ci)) return -1; /* function is not a Lua function? */ if (ci == L->ci) ci->savedpc = L->savedpc; return pcRel(ci->savedpc, ci_func(ci)->l.p); } static int currentline (lua_State *L, CallInfo *ci) { int pc = currentpc(L, ci); if (pc < 0) return -1; /* only active lua functions have current-line information */ else return lgetline(ci_func(ci)->l.p, pc); } /* ** this function can be called asynchronous (e.g. during a signal) */ LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count) { if (func == NULL || mask == 0) { /* turn off hooks? */ mask = 0; func = NULL; } L->hook = func; L->basehookcount = count; resethookcount(L); L->hookmask = cast_byte(mask); return 1; } LUA_API lua_Hook lua_gethook (lua_State *L) { return L->hook; } LUA_API int lua_gethookmask (lua_State *L) { return L->hookmask; } LUA_API int lua_gethookcount (lua_State *L) { return L->basehookcount; } LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar) { int status; CallInfo *ci; lua_lock(L); for (ci = L->ci; level > 0 && ci > L->base_ci; ci--) { level--; if (f_isLua(ci)) /* Lua function? */ level -= ci->tailcalls; /* skip lost tail calls */ } if (level == 0 && ci > L->base_ci) { /* level found? */ status = 1; ar->i_ci = cast_int(ci - L->base_ci); } else if (level < 0) { /* level is of a lost tail call? */ status = 1; ar->i_ci = 0; } else status = 0; /* no such level */ lua_unlock(L); return status; } static Proto *getluaproto (CallInfo *ci) { return (isLua(ci) ? ci_func(ci)->l.p : NULL); } static const char *findlocal (lua_State *L, CallInfo *ci, int n) { const char *name; Proto *fp = getluaproto(ci); if (fp && (name = luaF_getlocalname(fp, n, currentpc(L, ci))) != NULL) return name; /* is a local variable in a Lua function */ else { StkId limit = (ci == L->ci) ? L->top : (ci+1)->func; if (limit - ci->base >= n && n > 0) /* is 'n' inside 'ci' stack? */ return "(*temporary)"; else return NULL; } } LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n) { CallInfo *ci = L->base_ci + ar->i_ci; const char *name = findlocal(L, ci, n); lua_lock(L); if (name) luaA_pushobject(L, ci->base + (n - 1)); lua_unlock(L); return name; } LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n) { CallInfo *ci = L->base_ci + ar->i_ci; const char *name = findlocal(L, ci, n); lua_lock(L); if (name) setobjs2s(L, ci->base + (n - 1), L->top - 1); L->top--; /* pop value */ lua_unlock(L); return name; } static void funcinfo (lua_Debug *ar, Closure *cl) { if (cl->c.isC) { ar->source = "=[C]"; ar->linedefined = -1; ar->lastlinedefined = -1; ar->what = "C"; } else { ar->source = getstr(cl->l.p->source); ar->linedefined = cl->l.p->linedefined; ar->lastlinedefined = cl->l.p->lastlinedefined; ar->what = (ar->linedefined == 0) ? "main" : "Lua"; } luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); } static void info_tailcall (lua_Debug *ar) { ar->name = ar->namewhat = ""; ar->what = "tail"; ar->lastlinedefined = ar->linedefined = ar->currentline = -1; ar->source = "=(tail call)"; luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); ar->nups = 0; } static void collectvalidlines (lua_State *L, Closure *f) { if (f == NULL || f->c.isC) { setnilvalue(L->top); } else { Table *t = luaH_new(L, 0, 0); int *lineinfo = f->l.p->lineinfo; int i; for (i=0; il.p->sizelineinfo; i++) setbvalue(luaH_setnum(L, t, lineinfo[i]), 1); sethvalue(L, L->top, t); } incr_top(L); } static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar, Closure *f, CallInfo *ci) { int status = 1; if (f == NULL) { info_tailcall(ar); return status; } for (; *what; what++) { switch (*what) { case 'S': { funcinfo(ar, f); break; } case 'l': { ar->currentline = (ci) ? currentline(L, ci) : -1; break; } case 'u': { ar->nups = f->c.nupvalues; break; } case 'n': { ar->namewhat = (ci) ? getfuncname(L, ci, &ar->name) : NULL; if (ar->namewhat == NULL) { ar->namewhat = ""; /* not found */ ar->name = NULL; } break; } case 'L': case 'f': /* handled by lua_getinfo */ break; default: status = 0; /* invalid option */ } } return status; } LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) { int status; Closure *f = NULL; CallInfo *ci = NULL; lua_lock(L); if (*what == '>') { StkId func = L->top - 1; luai_apicheck(L, ttisfunction(func)); what++; /* skip the '>' */ f = clvalue(func); L->top--; /* pop function */ } else if (ar->i_ci != 0) { /* no tail call? */ ci = L->base_ci + ar->i_ci; lua_assert(ttisfunction(ci->func)); f = clvalue(ci->func); } status = auxgetinfo(L, what, ar, f, ci); if (strchr(what, 'f')) { if (f == NULL) setnilvalue(L->top); else setclvalue(L, L->top, f); incr_top(L); } if (strchr(what, 'L')) collectvalidlines(L, f); lua_unlock(L); return status; } /* ** {====================================================== ** Symbolic Execution and code checker ** ======================================================= */ #define check(x) if (!(x)) return 0; #define checkjump(pt,pc) check(0 <= pc && pc < pt->sizecode) #define checkreg(pt,reg) check((reg) < (pt)->maxstacksize) static int precheck (const Proto *pt) { check(pt->maxstacksize <= MAXSTACK); check(pt->numparams+(pt->is_vararg & VARARG_HASARG) <= pt->maxstacksize); check(!(pt->is_vararg & VARARG_NEEDSARG) || (pt->is_vararg & VARARG_HASARG)); check(pt->sizeupvalues <= pt->nups); check(pt->sizelineinfo == pt->sizecode || pt->sizelineinfo == 0); check(pt->sizecode > 0 && GET_OPCODE(pt->code[pt->sizecode-1]) == OP_RETURN); return 1; } #define checkopenop(pt,pc) luaG_checkopenop((pt)->code[(pc)+1]) int luaG_checkopenop (Instruction i) { switch (GET_OPCODE(i)) { case OP_CALL: case OP_TAILCALL: case OP_RETURN: case OP_SETLIST: { check(GETARG_B(i) == 0); return 1; } default: return 0; /* invalid instruction after an open call */ } } static int checkArgMode (const Proto *pt, int r, enum OpArgMask mode) { switch (mode) { case OpArgN: check(r == 0); break; case OpArgU: break; case OpArgR: checkreg(pt, r); break; case OpArgK: check(ISK(r) ? INDEXK(r) < pt->sizek : r < pt->maxstacksize); break; } return 1; } static Instruction symbexec (const Proto *pt, int lastpc, int reg) { int pc; int last; /* stores position of last instruction that changed `reg' */ last = pt->sizecode-1; /* points to final return (a `neutral' instruction) */ check(precheck(pt)); for (pc = 0; pc < lastpc; pc++) { Instruction i = pt->code[pc]; OpCode op = GET_OPCODE(i); int a = GETARG_A(i); int b = 0; int c = 0; check(op < NUM_OPCODES); checkreg(pt, a); switch (getOpMode(op)) { case iABC: { b = GETARG_B(i); c = GETARG_C(i); check(checkArgMode(pt, b, getBMode(op))); check(checkArgMode(pt, c, getCMode(op))); break; } case iABx: { b = GETARG_Bx(i); if (getBMode(op) == OpArgK) check(b < pt->sizek); break; } case iAsBx: { b = GETARG_sBx(i); if (getBMode(op) == OpArgR) { int dest = pc+1+b; check(0 <= dest && dest < pt->sizecode); if (dest > 0) { int j; /* check that it does not jump to a setlist count; this is tricky, because the count from a previous setlist may have the same value of an invalid setlist; so, we must go all the way back to the first of them (if any) */ for (j = 0; j < dest; j++) { Instruction d = pt->code[dest-1-j]; if (!(GET_OPCODE(d) == OP_SETLIST && GETARG_C(d) == 0)) break; } /* if 'j' is even, previous value is not a setlist (even if it looks like one) */ check((j&1) == 0); } } break; } } if (testAMode(op)) { if (a == reg) last = pc; /* change register `a' */ } if (testTMode(op)) { check(pc+2 < pt->sizecode); /* check skip */ check(GET_OPCODE(pt->code[pc+1]) == OP_JMP); } switch (op) { case OP_LOADBOOL: { if (c == 1) { /* does it jump? */ check(pc+2 < pt->sizecode); /* check its jump */ check(GET_OPCODE(pt->code[pc+1]) != OP_SETLIST || GETARG_C(pt->code[pc+1]) != 0); } break; } case OP_LOADNIL: { if (a <= reg && reg <= b) last = pc; /* set registers from `a' to `b' */ break; } case OP_GETUPVAL: case OP_SETUPVAL: { check(b < pt->nups); break; } case OP_GETGLOBAL: case OP_SETGLOBAL: { check(ttisstring(&pt->k[b])); break; } case OP_SELF: { checkreg(pt, a+1); if (reg == a+1) last = pc; break; } case OP_CONCAT: { check(b < c); /* at least two operands */ break; } case OP_TFORLOOP: { check(c >= 1); /* at least one result (control variable) */ checkreg(pt, a+2+c); /* space for results */ if (reg >= a+2) last = pc; /* affect all regs above its base */ break; } case OP_FORLOOP: case OP_FORPREP: checkreg(pt, a+3); /* go through */ case OP_JMP: { int dest = pc+1+b; /* not full check and jump is forward and do not skip `lastpc'? */ if (reg != NO_REG && pc < dest && dest <= lastpc) pc += b; /* do the jump */ break; } case OP_CALL: case OP_TAILCALL: { if (b != 0) { checkreg(pt, a+b-1); } c--; /* c = num. returns */ if (c == LUA_MULTRET) { check(checkopenop(pt, pc)); } else if (c != 0) checkreg(pt, a+c-1); if (reg >= a) last = pc; /* affect all registers above base */ break; } case OP_RETURN: { b--; /* b = num. returns */ if (b > 0) checkreg(pt, a+b-1); break; } case OP_SETLIST: { if (b > 0) checkreg(pt, a + b); if (c == 0) { pc++; check(pc < pt->sizecode - 1); } break; } case OP_CLOSURE: { int nup, j; check(b < pt->sizep); nup = pt->p[b]->nups; check(pc + nup < pt->sizecode); for (j = 1; j <= nup; j++) { OpCode op1 = GET_OPCODE(pt->code[pc + j]); check(op1 == OP_GETUPVAL || op1 == OP_MOVE); } if (reg != NO_REG) /* tracing? */ pc += nup; /* do not 'execute' these pseudo-instructions */ break; } case OP_VARARG: { check((pt->is_vararg & VARARG_ISVARARG) && !(pt->is_vararg & VARARG_NEEDSARG)); b--; if (b == LUA_MULTRET) check(checkopenop(pt, pc)); checkreg(pt, a+b-1); break; } default: break; } } return pt->code[last]; } #undef check #undef checkjump #undef checkreg /* }====================================================== */ int luaG_checkcode (const Proto *pt) { return (symbexec(pt, pt->sizecode, NO_REG) != 0); } static const char *kname (Proto *p, int c) { if (ISK(c) && ttisstring(&p->k[INDEXK(c)])) return svalue(&p->k[INDEXK(c)]); else return "?"; } static const char *getobjname (lua_State *L, CallInfo *ci, int stackpos, const char **name) { if (isLua(ci)) { /* a Lua function? */ Proto *p = ci_func(ci)->l.p; int pc = currentpc(L, ci); Instruction i; *name = luaF_getlocalname(p, stackpos+1, pc); if (*name) /* is a local? */ return "local"; i = symbexec(p, pc, stackpos); /* try symbolic execution */ lua_assert(pc != -1); switch (GET_OPCODE(i)) { case OP_GETGLOBAL: { int g = GETARG_Bx(i); /* global index */ lua_assert(ttisstring(&p->k[g])); *name = svalue(&p->k[g]); return "global"; } case OP_MOVE: { int a = GETARG_A(i); int b = GETARG_B(i); /* move from `b' to `a' */ if (b < a) return getobjname(L, ci, b, name); /* get name for `b' */ break; } case OP_GETTABLE: { int k = GETARG_C(i); /* key index */ *name = kname(p, k); return "field"; } case OP_GETUPVAL: { int u = GETARG_B(i); /* upvalue index */ *name = p->upvalues ? getstr(p->upvalues[u]) : "?"; return "upvalue"; } case OP_SELF: { int k = GETARG_C(i); /* key index */ *name = kname(p, k); return "method"; } default: break; } } return NULL; /* no useful name found */ } static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) { Instruction i; if ((isLua(ci) && ci->tailcalls > 0) || !isLua(ci - 1)) return NULL; /* calling function is not Lua (or is unknown) */ ci--; /* calling function */ i = ci_func(ci)->l.p->code[currentpc(L, ci)]; if (GET_OPCODE(i) == OP_CALL || GET_OPCODE(i) == OP_TAILCALL || GET_OPCODE(i) == OP_TFORLOOP) return getobjname(L, ci, GETARG_A(i), name); else return NULL; /* no useful name can be found */ } /* only ANSI way to check whether a pointer points to an array */ static int isinstack (CallInfo *ci, const TValue *o) { StkId p; for (p = ci->base; p < ci->top; p++) if (o == p) return 1; return 0; } void luaG_typeerror (lua_State *L, const TValue *o, const char *op) { const char *name = NULL; const char *t = luaT_typenames[ttype(o)]; const char *kind = (isinstack(L->ci, o)) ? getobjname(L, L->ci, cast_int(o - L->base), &name) : NULL; if (kind) luaG_runerror(L, "attempt to %s %s " LUA_QS " (a %s value)", op, kind, name, t); else luaG_runerror(L, "attempt to %s a %s value", op, t); } void luaG_concaterror (lua_State *L, StkId p1, StkId p2) { if (ttisstring(p1) || ttisnumber(p1)) p1 = p2; lua_assert(!ttisstring(p1) && !ttisnumber(p1)); luaG_typeerror(L, p1, "concatenate"); } void luaG_aritherror (lua_State *L, const TValue *p1, const TValue *p2) { TValue temp; if (luaV_tonumber(p1, &temp) == NULL) p2 = p1; /* first operand is wrong */ luaG_typeerror(L, p2, "perform arithmetic on"); } int luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p2) { const char *t1 = luaT_typenames[ttype(p1)]; const char *t2 = luaT_typenames[ttype(p2)]; if (t1[2] == t2[2]) luaG_runerror(L, "attempt to compare two %s values", t1); else luaG_runerror(L, "attempt to compare %s with %s", t1, t2); return 0; } static void addinfo (lua_State *L, const char *msg) { CallInfo *ci = L->ci; if (isLua(ci)) { /* is Lua code? */ char buff[LUA_IDSIZE]; /* add file:line information */ int line = currentline(L, ci); luaO_chunkid(buff, getstr(getluaproto(ci)->source), LUA_IDSIZE); luaO_pushfstring(L, "%s:%d: %s", buff, line, msg); } } void luaG_errormsg (lua_State *L) { if (L->errfunc != 0) { /* is there an error handling function? */ StkId errfunc = restorestack(L, L->errfunc); if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR); setobjs2s(L, L->top, L->top - 1); /* move argument */ setobjs2s(L, L->top - 1, errfunc); /* push function */ incr_top(L); luaD_call(L, L->top - 2, 1); /* call it */ } luaD_throw(L, LUA_ERRRUN); } void luaG_runerror (lua_State *L, const char *fmt, ...) { va_list argp; va_start(argp, fmt); addinfo(L, luaO_pushvfstring(L, fmt, argp)); va_end(argp); luaG_errormsg(L); } genometools-1.5.1/src/external/lua-5.1.5/src/ldebug.h000066400000000000000000000020461211610345200221060ustar00rootroot00000000000000/* ** $Id: ldebug.h,v 2.3.1.1 2007/12/27 13:02:25 roberto Exp $ ** Auxiliary functions from Debug Interface module ** See Copyright Notice in lua.h */ #ifndef ldebug_h #define ldebug_h #include "lstate.h" #define pcRel(pc, p) (cast(int, (pc) - (p)->code) - 1) #define lgetline(f,pc) (((f)->lineinfo) ? (f)->lineinfo[pc] : 0) #define resethookcount(L) (L->hookcount = L->basehookcount) LUAI_FUNC void luaG_typeerror (lua_State *L, const TValue *o, const char *opname); LUAI_FUNC void luaG_concaterror (lua_State *L, StkId p1, StkId p2); LUAI_FUNC void luaG_aritherror (lua_State *L, const TValue *p1, const TValue *p2); LUAI_FUNC int luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p2); LUAI_FUNC void luaG_runerror (lua_State *L, const char *fmt, ...); LUAI_FUNC void luaG_errormsg (lua_State *L); LUAI_FUNC int luaG_checkcode (const Proto *pt); LUAI_FUNC int luaG_checkopenop (Instruction i); #endif genometools-1.5.1/src/external/lua-5.1.5/src/ldo.c000066400000000000000000000350541211610345200214220ustar00rootroot00000000000000/* ** $Id: ldo.c,v 2.38.1.4 2012/01/18 02:27:10 roberto Exp $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ #include #include #include #define ldo_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lopcodes.h" #include "lparser.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #include "lundump.h" #include "lvm.h" #include "lzio.h" /* ** {====================================================== ** Error-recovery functions ** ======================================================= */ /* chain list of long jump buffers */ struct lua_longjmp { struct lua_longjmp *previous; luai_jmpbuf b; volatile int status; /* error code */ }; void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop) { switch (errcode) { case LUA_ERRMEM: { setsvalue2s(L, oldtop, luaS_newliteral(L, MEMERRMSG)); break; } case LUA_ERRERR: { setsvalue2s(L, oldtop, luaS_newliteral(L, "error in error handling")); break; } case LUA_ERRSYNTAX: case LUA_ERRRUN: { setobjs2s(L, oldtop, L->top - 1); /* error message on current top */ break; } } L->top = oldtop + 1; } static void restore_stack_limit (lua_State *L) { lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK - 1); if (L->size_ci > LUAI_MAXCALLS) { /* there was an overflow? */ int inuse = cast_int(L->ci - L->base_ci); if (inuse + 1 < LUAI_MAXCALLS) /* can `undo' overflow? */ luaD_reallocCI(L, LUAI_MAXCALLS); } } static void resetstack (lua_State *L, int status) { L->ci = L->base_ci; L->base = L->ci->base; luaF_close(L, L->base); /* close eventual pending closures */ luaD_seterrorobj(L, status, L->base); L->nCcalls = L->baseCcalls; L->allowhook = 1; restore_stack_limit(L); L->errfunc = 0; L->errorJmp = NULL; } void luaD_throw (lua_State *L, int errcode) { if (L->errorJmp) { L->errorJmp->status = errcode; LUAI_THROW(L, L->errorJmp); } else { L->status = cast_byte(errcode); if (G(L)->panic) { resetstack(L, errcode); lua_unlock(L); G(L)->panic(L); } exit(EXIT_FAILURE); } } int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) { struct lua_longjmp lj; lj.status = 0; lj.previous = L->errorJmp; /* chain new error handler */ L->errorJmp = &lj; LUAI_TRY(L, &lj, (*f)(L, ud); ); L->errorJmp = lj.previous; /* restore old error handler */ return lj.status; } /* }====================================================== */ static void correctstack (lua_State *L, TValue *oldstack) { CallInfo *ci; GCObject *up; L->top = (L->top - oldstack) + L->stack; for (up = L->openupval; up != NULL; up = up->gch.next) gco2uv(up)->v = (gco2uv(up)->v - oldstack) + L->stack; for (ci = L->base_ci; ci <= L->ci; ci++) { ci->top = (ci->top - oldstack) + L->stack; ci->base = (ci->base - oldstack) + L->stack; ci->func = (ci->func - oldstack) + L->stack; } L->base = (L->base - oldstack) + L->stack; } void luaD_reallocstack (lua_State *L, int newsize) { TValue *oldstack = L->stack; int realsize = newsize + 1 + EXTRA_STACK; lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK - 1); luaM_reallocvector(L, L->stack, L->stacksize, realsize, TValue); L->stacksize = realsize; L->stack_last = L->stack+newsize; correctstack(L, oldstack); } void luaD_reallocCI (lua_State *L, int newsize) { CallInfo *oldci = L->base_ci; luaM_reallocvector(L, L->base_ci, L->size_ci, newsize, CallInfo); L->size_ci = newsize; L->ci = (L->ci - oldci) + L->base_ci; L->end_ci = L->base_ci + L->size_ci - 1; } void luaD_growstack (lua_State *L, int n) { if (n <= L->stacksize) /* double size is enough? */ luaD_reallocstack(L, 2*L->stacksize); else luaD_reallocstack(L, L->stacksize + n); } static CallInfo *growCI (lua_State *L) { if (L->size_ci > LUAI_MAXCALLS) /* overflow while handling overflow? */ luaD_throw(L, LUA_ERRERR); else { luaD_reallocCI(L, 2*L->size_ci); if (L->size_ci > LUAI_MAXCALLS) luaG_runerror(L, "stack overflow"); } return ++L->ci; } void luaD_callhook (lua_State *L, int event, int line) { lua_Hook hook = L->hook; if (hook && L->allowhook) { ptrdiff_t top = savestack(L, L->top); ptrdiff_t ci_top = savestack(L, L->ci->top); lua_Debug ar; ar.event = event; ar.currentline = line; if (event == LUA_HOOKTAILRET) ar.i_ci = 0; /* tail call; no debug information about it */ else ar.i_ci = cast_int(L->ci - L->base_ci); luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ L->ci->top = L->top + LUA_MINSTACK; lua_assert(L->ci->top <= L->stack_last); L->allowhook = 0; /* cannot call hooks inside a hook */ lua_unlock(L); (*hook)(L, &ar); lua_lock(L); lua_assert(!L->allowhook); L->allowhook = 1; L->ci->top = restorestack(L, ci_top); L->top = restorestack(L, top); } } static StkId adjust_varargs (lua_State *L, Proto *p, int actual) { int i; int nfixargs = p->numparams; Table *htab = NULL; StkId base, fixed; for (; actual < nfixargs; ++actual) setnilvalue(L->top++); #if defined(LUA_COMPAT_VARARG) if (p->is_vararg & VARARG_NEEDSARG) { /* compat. with old-style vararg? */ int nvar = actual - nfixargs; /* number of extra arguments */ lua_assert(p->is_vararg & VARARG_HASARG); luaC_checkGC(L); luaD_checkstack(L, p->maxstacksize); htab = luaH_new(L, nvar, 1); /* create `arg' table */ for (i=0; itop - nvar + i); /* store counter in field `n' */ setnvalue(luaH_setstr(L, htab, luaS_newliteral(L, "n")), cast_num(nvar)); } #endif /* move fixed parameters to final position */ fixed = L->top - actual; /* first fixed argument */ base = L->top; /* final position of first argument */ for (i=0; itop++, fixed+i); setnilvalue(fixed+i); } /* add `arg' parameter */ if (htab) { sethvalue(L, L->top++, htab); lua_assert(iswhite(obj2gco(htab))); } return base; } static StkId tryfuncTM (lua_State *L, StkId func) { const TValue *tm = luaT_gettmbyobj(L, func, TM_CALL); StkId p; ptrdiff_t funcr = savestack(L, func); if (!ttisfunction(tm)) luaG_typeerror(L, func, "call"); /* Open a hole inside the stack at `func' */ for (p = L->top; p > func; p--) setobjs2s(L, p, p-1); incr_top(L); func = restorestack(L, funcr); /* previous call may change stack */ setobj2s(L, func, tm); /* tag method is the new function to be called */ return func; } #define inc_ci(L) \ ((L->ci == L->end_ci) ? growCI(L) : \ (condhardstacktests(luaD_reallocCI(L, L->size_ci)), ++L->ci)) int luaD_precall (lua_State *L, StkId func, int nresults) { LClosure *cl; ptrdiff_t funcr; if (!ttisfunction(func)) /* `func' is not a function? */ func = tryfuncTM(L, func); /* check the `function' tag method */ funcr = savestack(L, func); cl = &clvalue(func)->l; L->ci->savedpc = L->savedpc; if (!cl->isC) { /* Lua function? prepare its call */ CallInfo *ci; StkId st, base; Proto *p = cl->p; luaD_checkstack(L, p->maxstacksize); func = restorestack(L, funcr); if (!p->is_vararg) { /* no varargs? */ base = func + 1; if (L->top > base + p->numparams) L->top = base + p->numparams; } else { /* vararg function */ int nargs = cast_int(L->top - func) - 1; base = adjust_varargs(L, p, nargs); func = restorestack(L, funcr); /* previous call may change the stack */ } ci = inc_ci(L); /* now `enter' new function */ ci->func = func; L->base = ci->base = base; ci->top = L->base + p->maxstacksize; lua_assert(ci->top <= L->stack_last); L->savedpc = p->code; /* starting point */ ci->tailcalls = 0; ci->nresults = nresults; for (st = L->top; st < ci->top; st++) setnilvalue(st); L->top = ci->top; if (L->hookmask & LUA_MASKCALL) { L->savedpc++; /* hooks assume 'pc' is already incremented */ luaD_callhook(L, LUA_HOOKCALL, -1); L->savedpc--; /* correct 'pc' */ } return PCRLUA; } else { /* if is a C function, call it */ CallInfo *ci; int n; luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ ci = inc_ci(L); /* now `enter' new function */ ci->func = restorestack(L, funcr); L->base = ci->base = ci->func + 1; ci->top = L->top + LUA_MINSTACK; lua_assert(ci->top <= L->stack_last); ci->nresults = nresults; if (L->hookmask & LUA_MASKCALL) luaD_callhook(L, LUA_HOOKCALL, -1); lua_unlock(L); n = (*curr_func(L)->c.f)(L); /* do the actual call */ lua_lock(L); if (n < 0) /* yielding? */ return PCRYIELD; else { luaD_poscall(L, L->top - n); return PCRC; } } } static StkId callrethooks (lua_State *L, StkId firstResult) { ptrdiff_t fr = savestack(L, firstResult); /* next call may change stack */ luaD_callhook(L, LUA_HOOKRET, -1); if (f_isLua(L->ci)) { /* Lua function? */ while ((L->hookmask & LUA_MASKRET) && L->ci->tailcalls--) /* tail calls */ luaD_callhook(L, LUA_HOOKTAILRET, -1); } return restorestack(L, fr); } int luaD_poscall (lua_State *L, StkId firstResult) { StkId res; int wanted, i; CallInfo *ci; if (L->hookmask & LUA_MASKRET) firstResult = callrethooks(L, firstResult); ci = L->ci--; res = ci->func; /* res == final position of 1st result */ wanted = ci->nresults; L->base = (ci - 1)->base; /* restore base */ L->savedpc = (ci - 1)->savedpc; /* restore savedpc */ /* move results to correct place */ for (i = wanted; i != 0 && firstResult < L->top; i--) setobjs2s(L, res++, firstResult++); while (i-- > 0) setnilvalue(res++); L->top = res; return (wanted - LUA_MULTRET); /* 0 iff wanted == LUA_MULTRET */ } /* ** Call a function (C or Lua). The function to be called is at *func. ** The arguments are on the stack, right after the function. ** When returns, all the results are on the stack, starting at the original ** function position. */ void luaD_call (lua_State *L, StkId func, int nResults) { if (++L->nCcalls >= LUAI_MAXCCALLS) { if (L->nCcalls == LUAI_MAXCCALLS) luaG_runerror(L, "C stack overflow"); else if (L->nCcalls >= (LUAI_MAXCCALLS + (LUAI_MAXCCALLS>>3))) luaD_throw(L, LUA_ERRERR); /* error while handing stack error */ } if (luaD_precall(L, func, nResults) == PCRLUA) /* is a Lua function? */ luaV_execute(L, 1); /* call it */ L->nCcalls--; luaC_checkGC(L); } static void resume (lua_State *L, void *ud) { StkId firstArg = cast(StkId, ud); CallInfo *ci = L->ci; if (L->status == 0) { /* start coroutine? */ lua_assert(ci == L->base_ci && firstArg > L->base); if (luaD_precall(L, firstArg - 1, LUA_MULTRET) != PCRLUA) return; } else { /* resuming from previous yield */ lua_assert(L->status == LUA_YIELD); L->status = 0; if (!f_isLua(ci)) { /* `common' yield? */ /* finish interrupted execution of `OP_CALL' */ lua_assert(GET_OPCODE(*((ci-1)->savedpc - 1)) == OP_CALL || GET_OPCODE(*((ci-1)->savedpc - 1)) == OP_TAILCALL); if (luaD_poscall(L, firstArg)) /* complete it... */ L->top = L->ci->top; /* and correct top if not multiple results */ } else /* yielded inside a hook: just continue its execution */ L->base = L->ci->base; } luaV_execute(L, cast_int(L->ci - L->base_ci)); } static int resume_error (lua_State *L, const char *msg) { L->top = L->ci->base; setsvalue2s(L, L->top, luaS_new(L, msg)); incr_top(L); lua_unlock(L); return LUA_ERRRUN; } LUA_API int lua_resume (lua_State *L, int nargs) { int status; lua_lock(L); if (L->status != LUA_YIELD && (L->status != 0 || L->ci != L->base_ci)) return resume_error(L, "cannot resume non-suspended coroutine"); if (L->nCcalls >= LUAI_MAXCCALLS) return resume_error(L, "C stack overflow"); luai_userstateresume(L, nargs); lua_assert(L->errfunc == 0); L->baseCcalls = ++L->nCcalls; status = luaD_rawrunprotected(L, resume, L->top - nargs); if (status != 0) { /* error? */ L->status = cast_byte(status); /* mark thread as `dead' */ luaD_seterrorobj(L, status, L->top); L->ci->top = L->top; } else { lua_assert(L->nCcalls == L->baseCcalls); status = L->status; } --L->nCcalls; lua_unlock(L); return status; } LUA_API int lua_yield (lua_State *L, int nresults) { luai_userstateyield(L, nresults); lua_lock(L); if (L->nCcalls > L->baseCcalls) luaG_runerror(L, "attempt to yield across metamethod/C-call boundary"); L->base = L->top - nresults; /* protect stack slots below */ L->status = LUA_YIELD; lua_unlock(L); return -1; } int luaD_pcall (lua_State *L, Pfunc func, void *u, ptrdiff_t old_top, ptrdiff_t ef) { int status; unsigned short oldnCcalls = L->nCcalls; ptrdiff_t old_ci = saveci(L, L->ci); lu_byte old_allowhooks = L->allowhook; ptrdiff_t old_errfunc = L->errfunc; L->errfunc = ef; status = luaD_rawrunprotected(L, func, u); if (status != 0) { /* an error occurred? */ StkId oldtop = restorestack(L, old_top); luaF_close(L, oldtop); /* close eventual pending closures */ luaD_seterrorobj(L, status, oldtop); L->nCcalls = oldnCcalls; L->ci = restoreci(L, old_ci); L->base = L->ci->base; L->savedpc = L->ci->savedpc; L->allowhook = old_allowhooks; restore_stack_limit(L); } L->errfunc = old_errfunc; return status; } /* ** Execute a protected parser. */ struct SParser { /* data to `f_parser' */ ZIO *z; Mbuffer buff; /* buffer to be used by the scanner */ const char *name; }; static void f_parser (lua_State *L, void *ud) { int i; Proto *tf; Closure *cl; struct SParser *p = cast(struct SParser *, ud); int c = luaZ_lookahead(p->z); luaC_checkGC(L); tf = ((c == LUA_SIGNATURE[0]) ? luaU_undump : luaY_parser)(L, p->z, &p->buff, p->name); cl = luaF_newLclosure(L, tf->nups, hvalue(gt(L))); cl->l.p = tf; for (i = 0; i < tf->nups; i++) /* initialize eventual upvalues */ cl->l.upvals[i] = luaF_newupval(L); setclvalue(L, L->top, cl); incr_top(L); } int luaD_protectedparser (lua_State *L, ZIO *z, const char *name) { struct SParser p; int status; p.z = z; p.name = name; luaZ_initbuffer(L, &p.buff); status = luaD_pcall(L, f_parser, &p, savestack(L, L->top), L->errfunc); luaZ_freebuffer(L, &p.buff); return status; } genometools-1.5.1/src/external/lua-5.1.5/src/ldo.h000066400000000000000000000035511211610345200214240ustar00rootroot00000000000000/* ** $Id: ldo.h,v 2.7.1.1 2007/12/27 13:02:25 roberto Exp $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ #ifndef ldo_h #define ldo_h #include "lobject.h" #include "lstate.h" #include "lzio.h" #define luaD_checkstack(L,n) \ if ((char *)L->stack_last - (char *)L->top <= (n)*(int)sizeof(TValue)) \ luaD_growstack(L, n); \ else condhardstacktests(luaD_reallocstack(L, L->stacksize - EXTRA_STACK - 1)); #define incr_top(L) {luaD_checkstack(L,1); L->top++;} #define savestack(L,p) ((char *)(p) - (char *)L->stack) #define restorestack(L,n) ((TValue *)((char *)L->stack + (n))) #define saveci(L,p) ((char *)(p) - (char *)L->base_ci) #define restoreci(L,n) ((CallInfo *)((char *)L->base_ci + (n))) /* results from luaD_precall */ #define PCRLUA 0 /* initiated a call to a Lua function */ #define PCRC 1 /* did a call to a C function */ #define PCRYIELD 2 /* C funtion yielded */ /* type of protected functions, to be ran by `runprotected' */ typedef void (*Pfunc) (lua_State *L, void *ud); LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name); LUAI_FUNC void luaD_callhook (lua_State *L, int event, int line); LUAI_FUNC int luaD_precall (lua_State *L, StkId func, int nresults); LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults); LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u, ptrdiff_t oldtop, ptrdiff_t ef); LUAI_FUNC int luaD_poscall (lua_State *L, StkId firstResult); LUAI_FUNC void luaD_reallocCI (lua_State *L, int newsize); LUAI_FUNC void luaD_reallocstack (lua_State *L, int newsize); LUAI_FUNC void luaD_growstack (lua_State *L, int n); LUAI_FUNC void luaD_throw (lua_State *L, int errcode); LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud); LUAI_FUNC void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop); #endif genometools-1.5.1/src/external/lua-5.1.5/src/ldump.c000066400000000000000000000060521211610345200217610ustar00rootroot00000000000000/* ** $Id: ldump.c,v 2.8.1.1 2007/12/27 13:02:25 roberto Exp $ ** save precompiled Lua chunks ** See Copyright Notice in lua.h */ #include #define ldump_c #define LUA_CORE #include "lua.h" #include "lobject.h" #include "lstate.h" #include "lundump.h" typedef struct { lua_State* L; lua_Writer writer; void* data; int strip; int status; } DumpState; #define DumpMem(b,n,size,D) DumpBlock(b,(n)*(size),D) #define DumpVar(x,D) DumpMem(&x,1,sizeof(x),D) static void DumpBlock(const void* b, size_t size, DumpState* D) { if (D->status==0) { lua_unlock(D->L); D->status=(*D->writer)(D->L,b,size,D->data); lua_lock(D->L); } } static void DumpChar(int y, DumpState* D) { char x=(char)y; DumpVar(x,D); } static void DumpInt(int x, DumpState* D) { DumpVar(x,D); } static void DumpNumber(lua_Number x, DumpState* D) { DumpVar(x,D); } static void DumpVector(const void* b, int n, size_t size, DumpState* D) { DumpInt(n,D); DumpMem(b,n,size,D); } static void DumpString(const TString* s, DumpState* D) { if (s==NULL || getstr(s)==NULL) { size_t size=0; DumpVar(size,D); } else { size_t size=s->tsv.len+1; /* include trailing '\0' */ DumpVar(size,D); DumpBlock(getstr(s),size,D); } } #define DumpCode(f,D) DumpVector(f->code,f->sizecode,sizeof(Instruction),D) static void DumpFunction(const Proto* f, const TString* p, DumpState* D); static void DumpConstants(const Proto* f, DumpState* D) { int i,n=f->sizek; DumpInt(n,D); for (i=0; ik[i]; DumpChar(ttype(o),D); switch (ttype(o)) { case LUA_TNIL: break; case LUA_TBOOLEAN: DumpChar(bvalue(o),D); break; case LUA_TNUMBER: DumpNumber(nvalue(o),D); break; case LUA_TSTRING: DumpString(rawtsvalue(o),D); break; default: lua_assert(0); /* cannot happen */ break; } } n=f->sizep; DumpInt(n,D); for (i=0; ip[i],f->source,D); } static void DumpDebug(const Proto* f, DumpState* D) { int i,n; n= (D->strip) ? 0 : f->sizelineinfo; DumpVector(f->lineinfo,n,sizeof(int),D); n= (D->strip) ? 0 : f->sizelocvars; DumpInt(n,D); for (i=0; ilocvars[i].varname,D); DumpInt(f->locvars[i].startpc,D); DumpInt(f->locvars[i].endpc,D); } n= (D->strip) ? 0 : f->sizeupvalues; DumpInt(n,D); for (i=0; iupvalues[i],D); } static void DumpFunction(const Proto* f, const TString* p, DumpState* D) { DumpString((f->source==p || D->strip) ? NULL : f->source,D); DumpInt(f->linedefined,D); DumpInt(f->lastlinedefined,D); DumpChar(f->nups,D); DumpChar(f->numparams,D); DumpChar(f->is_vararg,D); DumpChar(f->maxstacksize,D); DumpCode(f,D); DumpConstants(f,D); DumpDebug(f,D); } static void DumpHeader(DumpState* D) { char h[LUAC_HEADERSIZE]; luaU_header(h); DumpBlock(h,LUAC_HEADERSIZE,D); } /* ** dump Lua function as precompiled chunk */ int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) { DumpState D; D.L=L; D.writer=w; D.data=data; D.strip=strip; D.status=0; DumpHeader(&D); DumpFunction(f,NULL,&D); return D.status; } genometools-1.5.1/src/external/lua-5.1.5/src/lfunc.c000066400000000000000000000110121211610345200217370ustar00rootroot00000000000000/* ** $Id: lfunc.c,v 2.12.1.2 2007/12/28 14:58:43 roberto Exp $ ** Auxiliary functions to manipulate prototypes and closures ** See Copyright Notice in lua.h */ #include #define lfunc_c #define LUA_CORE #include "lua.h" #include "lfunc.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e) { Closure *c = cast(Closure *, luaM_malloc(L, sizeCclosure(nelems))); luaC_link(L, obj2gco(c), LUA_TFUNCTION); c->c.isC = 1; c->c.env = e; c->c.nupvalues = cast_byte(nelems); return c; } Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e) { Closure *c = cast(Closure *, luaM_malloc(L, sizeLclosure(nelems))); luaC_link(L, obj2gco(c), LUA_TFUNCTION); c->l.isC = 0; c->l.env = e; c->l.nupvalues = cast_byte(nelems); while (nelems--) c->l.upvals[nelems] = NULL; return c; } UpVal *luaF_newupval (lua_State *L) { UpVal *uv = luaM_new(L, UpVal); luaC_link(L, obj2gco(uv), LUA_TUPVAL); uv->v = &uv->u.value; setnilvalue(uv->v); return uv; } UpVal *luaF_findupval (lua_State *L, StkId level) { global_State *g = G(L); GCObject **pp = &L->openupval; UpVal *p; UpVal *uv; while (*pp != NULL && (p = ngcotouv(*pp))->v >= level) { lua_assert(p->v != &p->u.value); if (p->v == level) { /* found a corresponding upvalue? */ if (isdead(g, obj2gco(p))) /* is it dead? */ changewhite(obj2gco(p)); /* ressurect it */ return p; } pp = &p->next; } uv = luaM_new(L, UpVal); /* not found: create a new one */ uv->tt = LUA_TUPVAL; uv->marked = luaC_white(g); uv->v = level; /* current value lives in the stack */ uv->next = *pp; /* chain it in the proper position */ *pp = obj2gco(uv); uv->u.l.prev = &g->uvhead; /* double link it in `uvhead' list */ uv->u.l.next = g->uvhead.u.l.next; uv->u.l.next->u.l.prev = uv; g->uvhead.u.l.next = uv; lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); return uv; } static void unlinkupval (UpVal *uv) { lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); uv->u.l.next->u.l.prev = uv->u.l.prev; /* remove from `uvhead' list */ uv->u.l.prev->u.l.next = uv->u.l.next; } void luaF_freeupval (lua_State *L, UpVal *uv) { if (uv->v != &uv->u.value) /* is it open? */ unlinkupval(uv); /* remove from open list */ luaM_free(L, uv); /* free upvalue */ } void luaF_close (lua_State *L, StkId level) { UpVal *uv; global_State *g = G(L); while (L->openupval != NULL && (uv = ngcotouv(L->openupval))->v >= level) { GCObject *o = obj2gco(uv); lua_assert(!isblack(o) && uv->v != &uv->u.value); L->openupval = uv->next; /* remove from `open' list */ if (isdead(g, o)) luaF_freeupval(L, uv); /* free upvalue */ else { unlinkupval(uv); setobj(L, &uv->u.value, uv->v); uv->v = &uv->u.value; /* now current value lives here */ luaC_linkupval(L, uv); /* link upvalue into `gcroot' list */ } } } Proto *luaF_newproto (lua_State *L) { Proto *f = luaM_new(L, Proto); luaC_link(L, obj2gco(f), LUA_TPROTO); f->k = NULL; f->sizek = 0; f->p = NULL; f->sizep = 0; f->code = NULL; f->sizecode = 0; f->sizelineinfo = 0; f->sizeupvalues = 0; f->nups = 0; f->upvalues = NULL; f->numparams = 0; f->is_vararg = 0; f->maxstacksize = 0; f->lineinfo = NULL; f->sizelocvars = 0; f->locvars = NULL; f->linedefined = 0; f->lastlinedefined = 0; f->source = NULL; return f; } void luaF_freeproto (lua_State *L, Proto *f) { luaM_freearray(L, f->code, f->sizecode, Instruction); luaM_freearray(L, f->p, f->sizep, Proto *); luaM_freearray(L, f->k, f->sizek, TValue); luaM_freearray(L, f->lineinfo, f->sizelineinfo, int); luaM_freearray(L, f->locvars, f->sizelocvars, struct LocVar); luaM_freearray(L, f->upvalues, f->sizeupvalues, TString *); luaM_free(L, f); } void luaF_freeclosure (lua_State *L, Closure *c) { int size = (c->c.isC) ? sizeCclosure(c->c.nupvalues) : sizeLclosure(c->l.nupvalues); luaM_freemem(L, c, size); } /* ** Look for n-th local variable at line `line' in function `func'. ** Returns NULL if not found. */ const char *luaF_getlocalname (const Proto *f, int local_number, int pc) { int i; for (i = 0; isizelocvars && f->locvars[i].startpc <= pc; i++) { if (pc < f->locvars[i].endpc) { /* is variable active? */ local_number--; if (local_number == 0) return getstr(f->locvars[i].varname); } } return NULL; /* not found */ } genometools-1.5.1/src/external/lua-5.1.5/src/lfunc.h000066400000000000000000000021451211610345200217530ustar00rootroot00000000000000/* ** $Id: lfunc.h,v 2.4.1.1 2007/12/27 13:02:25 roberto Exp $ ** Auxiliary functions to manipulate prototypes and closures ** See Copyright Notice in lua.h */ #ifndef lfunc_h #define lfunc_h #include "lobject.h" #define sizeCclosure(n) (cast(int, sizeof(CClosure)) + \ cast(int, sizeof(TValue)*((n)-1))) #define sizeLclosure(n) (cast(int, sizeof(LClosure)) + \ cast(int, sizeof(TValue *)*((n)-1))) LUAI_FUNC Proto *luaF_newproto (lua_State *L); LUAI_FUNC Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e); LUAI_FUNC Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e); LUAI_FUNC UpVal *luaF_newupval (lua_State *L); LUAI_FUNC UpVal *luaF_findupval (lua_State *L, StkId level); LUAI_FUNC void luaF_close (lua_State *L, StkId level); LUAI_FUNC void luaF_freeproto (lua_State *L, Proto *f); LUAI_FUNC void luaF_freeclosure (lua_State *L, Closure *c); LUAI_FUNC void luaF_freeupval (lua_State *L, UpVal *uv); LUAI_FUNC const char *luaF_getlocalname (const Proto *func, int local_number, int pc); #endif genometools-1.5.1/src/external/lua-5.1.5/src/lgc.c000066400000000000000000000471251211610345200214130ustar00rootroot00000000000000/* ** $Id: lgc.c,v 2.38.1.2 2011/03/18 18:05:38 roberto Exp $ ** Garbage Collector ** See Copyright Notice in lua.h */ #include #define lgc_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #define GCSTEPSIZE 1024u #define GCSWEEPMAX 40 #define GCSWEEPCOST 10 #define GCFINALIZECOST 100 #define maskmarks cast_byte(~(bitmask(BLACKBIT)|WHITEBITS)) #define makewhite(g,x) \ ((x)->gch.marked = cast_byte(((x)->gch.marked & maskmarks) | luaC_white(g))) #define white2gray(x) reset2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT) #define black2gray(x) resetbit((x)->gch.marked, BLACKBIT) #define stringmark(s) reset2bits((s)->tsv.marked, WHITE0BIT, WHITE1BIT) #define isfinalized(u) testbit((u)->marked, FINALIZEDBIT) #define markfinalized(u) l_setbit((u)->marked, FINALIZEDBIT) #define KEYWEAK bitmask(KEYWEAKBIT) #define VALUEWEAK bitmask(VALUEWEAKBIT) #define markvalue(g,o) { checkconsistency(o); \ if (iscollectable(o) && iswhite(gcvalue(o))) reallymarkobject(g,gcvalue(o)); } #define markobject(g,t) { if (iswhite(obj2gco(t))) \ reallymarkobject(g, obj2gco(t)); } #define setthreshold(g) (g->GCthreshold = (g->estimate/100) * g->gcpause) static void removeentry (Node *n) { lua_assert(ttisnil(gval(n))); if (iscollectable(gkey(n))) setttype(gkey(n), LUA_TDEADKEY); /* dead key; remove it */ } static void reallymarkobject (global_State *g, GCObject *o) { lua_assert(iswhite(o) && !isdead(g, o)); white2gray(o); switch (o->gch.tt) { case LUA_TSTRING: { return; } case LUA_TUSERDATA: { Table *mt = gco2u(o)->metatable; gray2black(o); /* udata are never gray */ if (mt) markobject(g, mt); markobject(g, gco2u(o)->env); return; } case LUA_TUPVAL: { UpVal *uv = gco2uv(o); markvalue(g, uv->v); if (uv->v == &uv->u.value) /* closed? */ gray2black(o); /* open upvalues are never black */ return; } case LUA_TFUNCTION: { gco2cl(o)->c.gclist = g->gray; g->gray = o; break; } case LUA_TTABLE: { gco2h(o)->gclist = g->gray; g->gray = o; break; } case LUA_TTHREAD: { gco2th(o)->gclist = g->gray; g->gray = o; break; } case LUA_TPROTO: { gco2p(o)->gclist = g->gray; g->gray = o; break; } default: lua_assert(0); } } static void marktmu (global_State *g) { GCObject *u = g->tmudata; if (u) { do { u = u->gch.next; makewhite(g, u); /* may be marked, if left from previous GC */ reallymarkobject(g, u); } while (u != g->tmudata); } } /* move `dead' udata that need finalization to list `tmudata' */ size_t luaC_separateudata (lua_State *L, int all) { global_State *g = G(L); size_t deadmem = 0; GCObject **p = &g->mainthread->next; GCObject *curr; while ((curr = *p) != NULL) { if (!(iswhite(curr) || all) || isfinalized(gco2u(curr))) p = &curr->gch.next; /* don't bother with them */ else if (fasttm(L, gco2u(curr)->metatable, TM_GC) == NULL) { markfinalized(gco2u(curr)); /* don't need finalization */ p = &curr->gch.next; } else { /* must call its gc method */ deadmem += sizeudata(gco2u(curr)); markfinalized(gco2u(curr)); *p = curr->gch.next; /* link `curr' at the end of `tmudata' list */ if (g->tmudata == NULL) /* list is empty? */ g->tmudata = curr->gch.next = curr; /* creates a circular list */ else { curr->gch.next = g->tmudata->gch.next; g->tmudata->gch.next = curr; g->tmudata = curr; } } } return deadmem; } static int traversetable (global_State *g, Table *h) { int i; int weakkey = 0; int weakvalue = 0; const TValue *mode; if (h->metatable) markobject(g, h->metatable); mode = gfasttm(g, h->metatable, TM_MODE); if (mode && ttisstring(mode)) { /* is there a weak mode? */ weakkey = (strchr(svalue(mode), 'k') != NULL); weakvalue = (strchr(svalue(mode), 'v') != NULL); if (weakkey || weakvalue) { /* is really weak? */ h->marked &= ~(KEYWEAK | VALUEWEAK); /* clear bits */ h->marked |= cast_byte((weakkey << KEYWEAKBIT) | (weakvalue << VALUEWEAKBIT)); h->gclist = g->weak; /* must be cleared after GC, ... */ g->weak = obj2gco(h); /* ... so put in the appropriate list */ } } if (weakkey && weakvalue) return 1; if (!weakvalue) { i = h->sizearray; while (i--) markvalue(g, &h->array[i]); } i = sizenode(h); while (i--) { Node *n = gnode(h, i); lua_assert(ttype(gkey(n)) != LUA_TDEADKEY || ttisnil(gval(n))); if (ttisnil(gval(n))) removeentry(n); /* remove empty entries */ else { lua_assert(!ttisnil(gkey(n))); if (!weakkey) markvalue(g, gkey(n)); if (!weakvalue) markvalue(g, gval(n)); } } return weakkey || weakvalue; } /* ** All marks are conditional because a GC may happen while the ** prototype is still being created */ static void traverseproto (global_State *g, Proto *f) { int i; if (f->source) stringmark(f->source); for (i=0; isizek; i++) /* mark literals */ markvalue(g, &f->k[i]); for (i=0; isizeupvalues; i++) { /* mark upvalue names */ if (f->upvalues[i]) stringmark(f->upvalues[i]); } for (i=0; isizep; i++) { /* mark nested protos */ if (f->p[i]) markobject(g, f->p[i]); } for (i=0; isizelocvars; i++) { /* mark local-variable names */ if (f->locvars[i].varname) stringmark(f->locvars[i].varname); } } static void traverseclosure (global_State *g, Closure *cl) { markobject(g, cl->c.env); if (cl->c.isC) { int i; for (i=0; ic.nupvalues; i++) /* mark its upvalues */ markvalue(g, &cl->c.upvalue[i]); } else { int i; lua_assert(cl->l.nupvalues == cl->l.p->nups); markobject(g, cl->l.p); for (i=0; il.nupvalues; i++) /* mark its upvalues */ markobject(g, cl->l.upvals[i]); } } static void checkstacksizes (lua_State *L, StkId max) { int ci_used = cast_int(L->ci - L->base_ci); /* number of `ci' in use */ int s_used = cast_int(max - L->stack); /* part of stack in use */ if (L->size_ci > LUAI_MAXCALLS) /* handling overflow? */ return; /* do not touch the stacks */ if (4*ci_used < L->size_ci && 2*BASIC_CI_SIZE < L->size_ci) luaD_reallocCI(L, L->size_ci/2); /* still big enough... */ condhardstacktests(luaD_reallocCI(L, ci_used + 1)); if (4*s_used < L->stacksize && 2*(BASIC_STACK_SIZE+EXTRA_STACK) < L->stacksize) luaD_reallocstack(L, L->stacksize/2); /* still big enough... */ condhardstacktests(luaD_reallocstack(L, s_used)); } static void traversestack (global_State *g, lua_State *l) { StkId o, lim; CallInfo *ci; markvalue(g, gt(l)); lim = l->top; for (ci = l->base_ci; ci <= l->ci; ci++) { lua_assert(ci->top <= l->stack_last); if (lim < ci->top) lim = ci->top; } for (o = l->stack; o < l->top; o++) markvalue(g, o); for (; o <= lim; o++) setnilvalue(o); checkstacksizes(l, lim); } /* ** traverse one gray object, turning it to black. ** Returns `quantity' traversed. */ static l_mem propagatemark (global_State *g) { GCObject *o = g->gray; lua_assert(isgray(o)); gray2black(o); switch (o->gch.tt) { case LUA_TTABLE: { Table *h = gco2h(o); g->gray = h->gclist; if (traversetable(g, h)) /* table is weak? */ black2gray(o); /* keep it gray */ return sizeof(Table) + sizeof(TValue) * h->sizearray + sizeof(Node) * sizenode(h); } case LUA_TFUNCTION: { Closure *cl = gco2cl(o); g->gray = cl->c.gclist; traverseclosure(g, cl); return (cl->c.isC) ? sizeCclosure(cl->c.nupvalues) : sizeLclosure(cl->l.nupvalues); } case LUA_TTHREAD: { lua_State *th = gco2th(o); g->gray = th->gclist; th->gclist = g->grayagain; g->grayagain = o; black2gray(o); traversestack(g, th); return sizeof(lua_State) + sizeof(TValue) * th->stacksize + sizeof(CallInfo) * th->size_ci; } case LUA_TPROTO: { Proto *p = gco2p(o); g->gray = p->gclist; traverseproto(g, p); return sizeof(Proto) + sizeof(Instruction) * p->sizecode + sizeof(Proto *) * p->sizep + sizeof(TValue) * p->sizek + sizeof(int) * p->sizelineinfo + sizeof(LocVar) * p->sizelocvars + sizeof(TString *) * p->sizeupvalues; } default: lua_assert(0); return 0; } } static size_t propagateall (global_State *g) { size_t m = 0; while (g->gray) m += propagatemark(g); return m; } /* ** The next function tells whether a key or value can be cleared from ** a weak table. Non-collectable objects are never removed from weak ** tables. Strings behave as `values', so are never removed too. for ** other objects: if really collected, cannot keep them; for userdata ** being finalized, keep them in keys, but not in values */ static int iscleared (const TValue *o, int iskey) { if (!iscollectable(o)) return 0; if (ttisstring(o)) { stringmark(rawtsvalue(o)); /* strings are `values', so are never weak */ return 0; } return iswhite(gcvalue(o)) || (ttisuserdata(o) && (!iskey && isfinalized(uvalue(o)))); } /* ** clear collected entries from weaktables */ static void cleartable (GCObject *l) { while (l) { Table *h = gco2h(l); int i = h->sizearray; lua_assert(testbit(h->marked, VALUEWEAKBIT) || testbit(h->marked, KEYWEAKBIT)); if (testbit(h->marked, VALUEWEAKBIT)) { while (i--) { TValue *o = &h->array[i]; if (iscleared(o, 0)) /* value was collected? */ setnilvalue(o); /* remove value */ } } i = sizenode(h); while (i--) { Node *n = gnode(h, i); if (!ttisnil(gval(n)) && /* non-empty entry? */ (iscleared(key2tval(n), 1) || iscleared(gval(n), 0))) { setnilvalue(gval(n)); /* remove value ... */ removeentry(n); /* remove entry from table */ } } l = h->gclist; } } static void freeobj (lua_State *L, GCObject *o) { switch (o->gch.tt) { case LUA_TPROTO: luaF_freeproto(L, gco2p(o)); break; case LUA_TFUNCTION: luaF_freeclosure(L, gco2cl(o)); break; case LUA_TUPVAL: luaF_freeupval(L, gco2uv(o)); break; case LUA_TTABLE: luaH_free(L, gco2h(o)); break; case LUA_TTHREAD: { lua_assert(gco2th(o) != L && gco2th(o) != G(L)->mainthread); luaE_freethread(L, gco2th(o)); break; } case LUA_TSTRING: { G(L)->strt.nuse--; luaM_freemem(L, o, sizestring(gco2ts(o))); break; } case LUA_TUSERDATA: { luaM_freemem(L, o, sizeudata(gco2u(o))); break; } default: lua_assert(0); } } #define sweepwholelist(L,p) sweeplist(L,p,MAX_LUMEM) static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) { GCObject *curr; global_State *g = G(L); int deadmask = otherwhite(g); while ((curr = *p) != NULL && count-- > 0) { if (curr->gch.tt == LUA_TTHREAD) /* sweep open upvalues of each thread */ sweepwholelist(L, &gco2th(curr)->openupval); if ((curr->gch.marked ^ WHITEBITS) & deadmask) { /* not dead? */ lua_assert(!isdead(g, curr) || testbit(curr->gch.marked, FIXEDBIT)); makewhite(g, curr); /* make it white (for next cycle) */ p = &curr->gch.next; } else { /* must erase `curr' */ lua_assert(isdead(g, curr) || deadmask == bitmask(SFIXEDBIT)); *p = curr->gch.next; if (curr == g->rootgc) /* is the first element of the list? */ g->rootgc = curr->gch.next; /* adjust first */ freeobj(L, curr); } } return p; } static void checkSizes (lua_State *L) { global_State *g = G(L); /* check size of string hash */ if (g->strt.nuse < cast(lu_int32, g->strt.size/4) && g->strt.size > MINSTRTABSIZE*2) luaS_resize(L, g->strt.size/2); /* table is too big */ /* check size of buffer */ if (luaZ_sizebuffer(&g->buff) > LUA_MINBUFFER*2) { /* buffer too big? */ size_t newsize = luaZ_sizebuffer(&g->buff) / 2; luaZ_resizebuffer(L, &g->buff, newsize); } } static void GCTM (lua_State *L) { global_State *g = G(L); GCObject *o = g->tmudata->gch.next; /* get first element */ Udata *udata = rawgco2u(o); const TValue *tm; /* remove udata from `tmudata' */ if (o == g->tmudata) /* last element? */ g->tmudata = NULL; else g->tmudata->gch.next = udata->uv.next; udata->uv.next = g->mainthread->next; /* return it to `root' list */ g->mainthread->next = o; makewhite(g, o); tm = fasttm(L, udata->uv.metatable, TM_GC); if (tm != NULL) { lu_byte oldah = L->allowhook; lu_mem oldt = g->GCthreshold; L->allowhook = 0; /* stop debug hooks during GC tag method */ g->GCthreshold = 2*g->totalbytes; /* avoid GC steps */ setobj2s(L, L->top, tm); setuvalue(L, L->top+1, udata); L->top += 2; luaD_call(L, L->top - 2, 0); L->allowhook = oldah; /* restore hooks */ g->GCthreshold = oldt; /* restore threshold */ } } /* ** Call all GC tag methods */ void luaC_callGCTM (lua_State *L) { while (G(L)->tmudata) GCTM(L); } void luaC_freeall (lua_State *L) { global_State *g = G(L); int i; g->currentwhite = WHITEBITS | bitmask(SFIXEDBIT); /* mask to collect all elements */ sweepwholelist(L, &g->rootgc); for (i = 0; i < g->strt.size; i++) /* free all string lists */ sweepwholelist(L, &g->strt.hash[i]); } static void markmt (global_State *g) { int i; for (i=0; imt[i]) markobject(g, g->mt[i]); } /* mark root set */ static void markroot (lua_State *L) { global_State *g = G(L); g->gray = NULL; g->grayagain = NULL; g->weak = NULL; markobject(g, g->mainthread); /* make global table be traversed before main stack */ markvalue(g, gt(g->mainthread)); markvalue(g, registry(L)); markmt(g); g->gcstate = GCSpropagate; } static void remarkupvals (global_State *g) { UpVal *uv; for (uv = g->uvhead.u.l.next; uv != &g->uvhead; uv = uv->u.l.next) { lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); if (isgray(obj2gco(uv))) markvalue(g, uv->v); } } static void atomic (lua_State *L) { global_State *g = G(L); size_t udsize; /* total size of userdata to be finalized */ /* remark occasional upvalues of (maybe) dead threads */ remarkupvals(g); /* traverse objects cautch by write barrier and by 'remarkupvals' */ propagateall(g); /* remark weak tables */ g->gray = g->weak; g->weak = NULL; lua_assert(!iswhite(obj2gco(g->mainthread))); markobject(g, L); /* mark running thread */ markmt(g); /* mark basic metatables (again) */ propagateall(g); /* remark gray again */ g->gray = g->grayagain; g->grayagain = NULL; propagateall(g); udsize = luaC_separateudata(L, 0); /* separate userdata to be finalized */ marktmu(g); /* mark `preserved' userdata */ udsize += propagateall(g); /* remark, to propagate `preserveness' */ cleartable(g->weak); /* remove collected objects from weak tables */ /* flip current white */ g->currentwhite = cast_byte(otherwhite(g)); g->sweepstrgc = 0; g->sweepgc = &g->rootgc; g->gcstate = GCSsweepstring; g->estimate = g->totalbytes - udsize; /* first estimate */ } static l_mem singlestep (lua_State *L) { global_State *g = G(L); /*lua_checkmemory(L);*/ switch (g->gcstate) { case GCSpause: { markroot(L); /* start a new collection */ return 0; } case GCSpropagate: { if (g->gray) return propagatemark(g); else { /* no more `gray' objects */ atomic(L); /* finish mark phase */ return 0; } } case GCSsweepstring: { lu_mem old = g->totalbytes; sweepwholelist(L, &g->strt.hash[g->sweepstrgc++]); if (g->sweepstrgc >= g->strt.size) /* nothing more to sweep? */ g->gcstate = GCSsweep; /* end sweep-string phase */ lua_assert(old >= g->totalbytes); g->estimate -= old - g->totalbytes; return GCSWEEPCOST; } case GCSsweep: { lu_mem old = g->totalbytes; g->sweepgc = sweeplist(L, g->sweepgc, GCSWEEPMAX); if (*g->sweepgc == NULL) { /* nothing more to sweep? */ checkSizes(L); g->gcstate = GCSfinalize; /* end sweep phase */ } lua_assert(old >= g->totalbytes); g->estimate -= old - g->totalbytes; return GCSWEEPMAX*GCSWEEPCOST; } case GCSfinalize: { if (g->tmudata) { GCTM(L); if (g->estimate > GCFINALIZECOST) g->estimate -= GCFINALIZECOST; return GCFINALIZECOST; } else { g->gcstate = GCSpause; /* end collection */ g->gcdept = 0; return 0; } } default: lua_assert(0); return 0; } } void luaC_step (lua_State *L) { global_State *g = G(L); l_mem lim = (GCSTEPSIZE/100) * g->gcstepmul; if (lim == 0) lim = (MAX_LUMEM-1)/2; /* no limit */ g->gcdept += g->totalbytes - g->GCthreshold; do { lim -= singlestep(L); if (g->gcstate == GCSpause) break; } while (lim > 0); if (g->gcstate != GCSpause) { if (g->gcdept < GCSTEPSIZE) g->GCthreshold = g->totalbytes + GCSTEPSIZE; /* - lim/g->gcstepmul;*/ else { g->gcdept -= GCSTEPSIZE; g->GCthreshold = g->totalbytes; } } else { setthreshold(g); } } void luaC_fullgc (lua_State *L) { global_State *g = G(L); if (g->gcstate <= GCSpropagate) { /* reset sweep marks to sweep all elements (returning them to white) */ g->sweepstrgc = 0; g->sweepgc = &g->rootgc; /* reset other collector lists */ g->gray = NULL; g->grayagain = NULL; g->weak = NULL; g->gcstate = GCSsweepstring; } lua_assert(g->gcstate != GCSpause && g->gcstate != GCSpropagate); /* finish any pending sweep phase */ while (g->gcstate != GCSfinalize) { lua_assert(g->gcstate == GCSsweepstring || g->gcstate == GCSsweep); singlestep(L); } markroot(L); while (g->gcstate != GCSpause) { singlestep(L); } setthreshold(g); } void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v) { global_State *g = G(L); lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o)); lua_assert(g->gcstate != GCSfinalize && g->gcstate != GCSpause); lua_assert(ttype(&o->gch) != LUA_TTABLE); /* must keep invariant? */ if (g->gcstate == GCSpropagate) reallymarkobject(g, v); /* restore invariant */ else /* don't mind */ makewhite(g, o); /* mark as white just to avoid other barriers */ } void luaC_barrierback (lua_State *L, Table *t) { global_State *g = G(L); GCObject *o = obj2gco(t); lua_assert(isblack(o) && !isdead(g, o)); lua_assert(g->gcstate != GCSfinalize && g->gcstate != GCSpause); black2gray(o); /* make table gray (again) */ t->gclist = g->grayagain; g->grayagain = o; } void luaC_link (lua_State *L, GCObject *o, lu_byte tt) { global_State *g = G(L); o->gch.next = g->rootgc; g->rootgc = o; o->gch.marked = luaC_white(g); o->gch.tt = tt; } void luaC_linkupval (lua_State *L, UpVal *uv) { global_State *g = G(L); GCObject *o = obj2gco(uv); o->gch.next = g->rootgc; /* link upvalue into `rootgc' list */ g->rootgc = o; if (isgray(o)) { if (g->gcstate == GCSpropagate) { gray2black(o); /* closed upvalues need barrier */ luaC_barrier(L, uv, uv->v); } else { /* sweep phase: sweep it (turning it into white) */ makewhite(g, o); lua_assert(g->gcstate != GCSfinalize && g->gcstate != GCSpause); } } } genometools-1.5.1/src/external/lua-5.1.5/src/lgc.h000066400000000000000000000061271211610345200214150ustar00rootroot00000000000000/* ** $Id: lgc.h,v 2.15.1.1 2007/12/27 13:02:25 roberto Exp $ ** Garbage Collector ** See Copyright Notice in lua.h */ #ifndef lgc_h #define lgc_h #include "lobject.h" /* ** Possible states of the Garbage Collector */ #define GCSpause 0 #define GCSpropagate 1 #define GCSsweepstring 2 #define GCSsweep 3 #define GCSfinalize 4 /* ** some userful bit tricks */ #define resetbits(x,m) ((x) &= cast(lu_byte, ~(m))) #define setbits(x,m) ((x) |= (m)) #define testbits(x,m) ((x) & (m)) #define bitmask(b) (1<<(b)) #define bit2mask(b1,b2) (bitmask(b1) | bitmask(b2)) #define l_setbit(x,b) setbits(x, bitmask(b)) #define resetbit(x,b) resetbits(x, bitmask(b)) #define testbit(x,b) testbits(x, bitmask(b)) #define set2bits(x,b1,b2) setbits(x, (bit2mask(b1, b2))) #define reset2bits(x,b1,b2) resetbits(x, (bit2mask(b1, b2))) #define test2bits(x,b1,b2) testbits(x, (bit2mask(b1, b2))) /* ** Layout for bit use in `marked' field: ** bit 0 - object is white (type 0) ** bit 1 - object is white (type 1) ** bit 2 - object is black ** bit 3 - for userdata: has been finalized ** bit 3 - for tables: has weak keys ** bit 4 - for tables: has weak values ** bit 5 - object is fixed (should not be collected) ** bit 6 - object is "super" fixed (only the main thread) */ #define WHITE0BIT 0 #define WHITE1BIT 1 #define BLACKBIT 2 #define FINALIZEDBIT 3 #define KEYWEAKBIT 3 #define VALUEWEAKBIT 4 #define FIXEDBIT 5 #define SFIXEDBIT 6 #define WHITEBITS bit2mask(WHITE0BIT, WHITE1BIT) #define iswhite(x) test2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT) #define isblack(x) testbit((x)->gch.marked, BLACKBIT) #define isgray(x) (!isblack(x) && !iswhite(x)) #define otherwhite(g) (g->currentwhite ^ WHITEBITS) #define isdead(g,v) ((v)->gch.marked & otherwhite(g) & WHITEBITS) #define changewhite(x) ((x)->gch.marked ^= WHITEBITS) #define gray2black(x) l_setbit((x)->gch.marked, BLACKBIT) #define valiswhite(x) (iscollectable(x) && iswhite(gcvalue(x))) #define luaC_white(g) cast(lu_byte, (g)->currentwhite & WHITEBITS) #define luaC_checkGC(L) { \ condhardstacktests(luaD_reallocstack(L, L->stacksize - EXTRA_STACK - 1)); \ if (G(L)->totalbytes >= G(L)->GCthreshold) \ luaC_step(L); } #define luaC_barrier(L,p,v) { if (valiswhite(v) && isblack(obj2gco(p))) \ luaC_barrierf(L,obj2gco(p),gcvalue(v)); } #define luaC_barriert(L,t,v) { if (valiswhite(v) && isblack(obj2gco(t))) \ luaC_barrierback(L,t); } #define luaC_objbarrier(L,p,o) \ { if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) \ luaC_barrierf(L,obj2gco(p),obj2gco(o)); } #define luaC_objbarriert(L,t,o) \ { if (iswhite(obj2gco(o)) && isblack(obj2gco(t))) luaC_barrierback(L,t); } LUAI_FUNC size_t luaC_separateudata (lua_State *L, int all); LUAI_FUNC void luaC_callGCTM (lua_State *L); LUAI_FUNC void luaC_freeall (lua_State *L); LUAI_FUNC void luaC_step (lua_State *L); LUAI_FUNC void luaC_fullgc (lua_State *L); LUAI_FUNC void luaC_link (lua_State *L, GCObject *o, lu_byte tt); LUAI_FUNC void luaC_linkupval (lua_State *L, UpVal *uv); LUAI_FUNC void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v); LUAI_FUNC void luaC_barrierback (lua_State *L, Table *t); #endif genometools-1.5.1/src/external/lua-5.1.5/src/linit.c000066400000000000000000000013751211610345200217620ustar00rootroot00000000000000/* ** $Id: linit.c,v 1.14.1.1 2007/12/27 13:02:25 roberto Exp $ ** Initialization of libraries for lua.c ** See Copyright Notice in lua.h */ #define linit_c #define LUA_LIB #include "lua.h" #include "lualib.h" #include "lauxlib.h" static const luaL_Reg lualibs[] = { {"", luaopen_base}, {LUA_LOADLIBNAME, luaopen_package}, {LUA_TABLIBNAME, luaopen_table}, {LUA_IOLIBNAME, luaopen_io}, {LUA_OSLIBNAME, luaopen_os}, {LUA_STRLIBNAME, luaopen_string}, {LUA_MATHLIBNAME, luaopen_math}, {LUA_DBLIBNAME, luaopen_debug}, {NULL, NULL} }; LUALIB_API void luaL_openlibs (lua_State *L) { const luaL_Reg *lib = lualibs; for (; lib->func; lib++) { lua_pushcfunction(L, lib->func); lua_pushstring(L, lib->name); lua_call(L, 1, 0); } } genometools-1.5.1/src/external/lua-5.1.5/src/liolib.c000066400000000000000000000322321211610345200221110ustar00rootroot00000000000000/* ** $Id: liolib.c,v 2.73.1.4 2010/05/14 15:33:51 roberto Exp $ ** Standard I/O (and system) library ** See Copyright Notice in lua.h */ #include #include #include #include #define liolib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" #define IO_INPUT 1 #define IO_OUTPUT 2 static const char *const fnames[] = {"input", "output"}; static int pushresult (lua_State *L, int i, const char *filename) { int en = errno; /* calls to Lua API may change this value */ if (i) { lua_pushboolean(L, 1); return 1; } else { lua_pushnil(L); if (filename) lua_pushfstring(L, "%s: %s", filename, strerror(en)); else lua_pushfstring(L, "%s", strerror(en)); lua_pushinteger(L, en); return 3; } } static void fileerror (lua_State *L, int arg, const char *filename) { lua_pushfstring(L, "%s: %s", filename, strerror(errno)); luaL_argerror(L, arg, lua_tostring(L, -1)); } #define tofilep(L) ((FILE **)luaL_checkudata(L, 1, LUA_FILEHANDLE)) static int io_type (lua_State *L) { void *ud; luaL_checkany(L, 1); ud = lua_touserdata(L, 1); lua_getfield(L, LUA_REGISTRYINDEX, LUA_FILEHANDLE); if (ud == NULL || !lua_getmetatable(L, 1) || !lua_rawequal(L, -2, -1)) lua_pushnil(L); /* not a file */ else if (*((FILE **)ud) == NULL) lua_pushliteral(L, "closed file"); else lua_pushliteral(L, "file"); return 1; } static FILE *tofile (lua_State *L) { FILE **f = tofilep(L); if (*f == NULL) luaL_error(L, "attempt to use a closed file"); return *f; } /* ** When creating file handles, always creates a `closed' file handle ** before opening the actual file; so, if there is a memory error, the ** file is not left opened. */ static FILE **newfile (lua_State *L) { FILE **pf = (FILE **)lua_newuserdata(L, sizeof(FILE *)); *pf = NULL; /* file handle is currently `closed' */ luaL_getmetatable(L, LUA_FILEHANDLE); lua_setmetatable(L, -2); return pf; } /* ** function to (not) close the standard files stdin, stdout, and stderr */ static int io_noclose (lua_State *L) { lua_pushnil(L); lua_pushliteral(L, "cannot close standard file"); return 2; } /* ** function to close 'popen' files */ static int io_pclose (lua_State *L) { FILE **p = tofilep(L); int ok = lua_pclose(L, *p); *p = NULL; return pushresult(L, ok, NULL); } /* ** function to close regular files */ static int io_fclose (lua_State *L) { FILE **p = tofilep(L); int ok = (fclose(*p) == 0); *p = NULL; return pushresult(L, ok, NULL); } static int aux_close (lua_State *L) { lua_getfenv(L, 1); lua_getfield(L, -1, "__close"); return (lua_tocfunction(L, -1))(L); } static int io_close (lua_State *L) { if (lua_isnone(L, 1)) lua_rawgeti(L, LUA_ENVIRONINDEX, IO_OUTPUT); tofile(L); /* make sure argument is a file */ return aux_close(L); } static int io_gc (lua_State *L) { FILE *f = *tofilep(L); /* ignore closed files */ if (f != NULL) aux_close(L); return 0; } static int io_tostring (lua_State *L) { FILE *f = *tofilep(L); if (f == NULL) lua_pushliteral(L, "file (closed)"); else lua_pushfstring(L, "file (%p)", f); return 1; } static int io_open (lua_State *L) { const char *filename = luaL_checkstring(L, 1); const char *mode = luaL_optstring(L, 2, "r"); FILE **pf = newfile(L); *pf = fopen(filename, mode); return (*pf == NULL) ? pushresult(L, 0, filename) : 1; } /* ** this function has a separated environment, which defines the ** correct __close for 'popen' files */ static int io_popen (lua_State *L) { const char *filename = luaL_checkstring(L, 1); const char *mode = luaL_optstring(L, 2, "r"); FILE **pf = newfile(L); *pf = lua_popen(L, filename, mode); return (*pf == NULL) ? pushresult(L, 0, filename) : 1; } static int io_tmpfile (lua_State *L) { FILE **pf = newfile(L); *pf = tmpfile(); return (*pf == NULL) ? pushresult(L, 0, NULL) : 1; } static FILE *getiofile (lua_State *L, int findex) { FILE *f; lua_rawgeti(L, LUA_ENVIRONINDEX, findex); f = *(FILE **)lua_touserdata(L, -1); if (f == NULL) luaL_error(L, "standard %s file is closed", fnames[findex - 1]); return f; } static int g_iofile (lua_State *L, int f, const char *mode) { if (!lua_isnoneornil(L, 1)) { const char *filename = lua_tostring(L, 1); if (filename) { FILE **pf = newfile(L); *pf = fopen(filename, mode); if (*pf == NULL) fileerror(L, 1, filename); } else { tofile(L); /* check that it's a valid file handle */ lua_pushvalue(L, 1); } lua_rawseti(L, LUA_ENVIRONINDEX, f); } /* return current value */ lua_rawgeti(L, LUA_ENVIRONINDEX, f); return 1; } static int io_input (lua_State *L) { return g_iofile(L, IO_INPUT, "r"); } static int io_output (lua_State *L) { return g_iofile(L, IO_OUTPUT, "w"); } static int io_readline (lua_State *L); static void aux_lines (lua_State *L, int idx, int toclose) { lua_pushvalue(L, idx); lua_pushboolean(L, toclose); /* close/not close file when finished */ lua_pushcclosure(L, io_readline, 2); } static int f_lines (lua_State *L) { tofile(L); /* check that it's a valid file handle */ aux_lines(L, 1, 0); return 1; } static int io_lines (lua_State *L) { if (lua_isnoneornil(L, 1)) { /* no arguments? */ /* will iterate over default input */ lua_rawgeti(L, LUA_ENVIRONINDEX, IO_INPUT); return f_lines(L); } else { const char *filename = luaL_checkstring(L, 1); FILE **pf = newfile(L); *pf = fopen(filename, "r"); if (*pf == NULL) fileerror(L, 1, filename); aux_lines(L, lua_gettop(L), 1); return 1; } } /* ** {====================================================== ** READ ** ======================================================= */ static int read_number (lua_State *L, FILE *f) { lua_Number d; if (fscanf(f, LUA_NUMBER_SCAN, &d) == 1) { lua_pushnumber(L, d); return 1; } else { lua_pushnil(L); /* "result" to be removed */ return 0; /* read fails */ } } static int test_eof (lua_State *L, FILE *f) { int c = getc(f); ungetc(c, f); lua_pushlstring(L, NULL, 0); return (c != EOF); } static int read_line (lua_State *L, FILE *f) { luaL_Buffer b; luaL_buffinit(L, &b); for (;;) { size_t l; char *p = luaL_prepbuffer(&b); if (fgets(p, LUAL_BUFFERSIZE, f) == NULL) { /* eof? */ luaL_pushresult(&b); /* close buffer */ return (lua_objlen(L, -1) > 0); /* check whether read something */ } l = strlen(p); if (l == 0 || p[l-1] != '\n') luaL_addsize(&b, l); else { luaL_addsize(&b, l - 1); /* do not include `eol' */ luaL_pushresult(&b); /* close buffer */ return 1; /* read at least an `eol' */ } } } static int read_chars (lua_State *L, FILE *f, size_t n) { size_t rlen; /* how much to read */ size_t nr; /* number of chars actually read */ luaL_Buffer b; luaL_buffinit(L, &b); rlen = LUAL_BUFFERSIZE; /* try to read that much each time */ do { char *p = luaL_prepbuffer(&b); if (rlen > n) rlen = n; /* cannot read more than asked */ nr = fread(p, sizeof(char), rlen, f); luaL_addsize(&b, nr); n -= nr; /* still have to read `n' chars */ } while (n > 0 && nr == rlen); /* until end of count or eof */ luaL_pushresult(&b); /* close buffer */ return (n == 0 || lua_objlen(L, -1) > 0); } static int g_read (lua_State *L, FILE *f, int first) { int nargs = lua_gettop(L) - 1; int success; int n; clearerr(f); if (nargs == 0) { /* no arguments? */ success = read_line(L, f); n = first+1; /* to return 1 result */ } else { /* ensure stack space for all results and for auxlib's buffer */ luaL_checkstack(L, nargs+LUA_MINSTACK, "too many arguments"); success = 1; for (n = first; nargs-- && success; n++) { if (lua_type(L, n) == LUA_TNUMBER) { size_t l = (size_t)lua_tointeger(L, n); success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l); } else { const char *p = lua_tostring(L, n); luaL_argcheck(L, p && p[0] == '*', n, "invalid option"); switch (p[1]) { case 'n': /* number */ success = read_number(L, f); break; case 'l': /* line */ success = read_line(L, f); break; case 'a': /* file */ read_chars(L, f, ~((size_t)0)); /* read MAX_SIZE_T chars */ success = 1; /* always success */ break; default: return luaL_argerror(L, n, "invalid format"); } } } } if (ferror(f)) return pushresult(L, 0, NULL); if (!success) { lua_pop(L, 1); /* remove last result */ lua_pushnil(L); /* push nil instead */ } return n - first; } static int io_read (lua_State *L) { return g_read(L, getiofile(L, IO_INPUT), 1); } static int f_read (lua_State *L) { return g_read(L, tofile(L), 2); } static int io_readline (lua_State *L) { FILE *f = *(FILE **)lua_touserdata(L, lua_upvalueindex(1)); int sucess; if (f == NULL) /* file is already closed? */ luaL_error(L, "file is already closed"); sucess = read_line(L, f); if (ferror(f)) return luaL_error(L, "%s", strerror(errno)); if (sucess) return 1; else { /* EOF */ if (lua_toboolean(L, lua_upvalueindex(2))) { /* generator created file? */ lua_settop(L, 0); lua_pushvalue(L, lua_upvalueindex(1)); aux_close(L); /* close it */ } return 0; } } /* }====================================================== */ static int g_write (lua_State *L, FILE *f, int arg) { int nargs = lua_gettop(L) - 1; int status = 1; for (; nargs--; arg++) { if (lua_type(L, arg) == LUA_TNUMBER) { /* optimization: could be done exactly as for strings */ status = status && fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0; } else { size_t l; const char *s = luaL_checklstring(L, arg, &l); status = status && (fwrite(s, sizeof(char), l, f) == l); } } return pushresult(L, status, NULL); } static int io_write (lua_State *L) { return g_write(L, getiofile(L, IO_OUTPUT), 1); } static int f_write (lua_State *L) { return g_write(L, tofile(L), 2); } static int f_seek (lua_State *L) { static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; static const char *const modenames[] = {"set", "cur", "end", NULL}; FILE *f = tofile(L); int op = luaL_checkoption(L, 2, "cur", modenames); long offset = luaL_optlong(L, 3, 0); op = fseek(f, offset, mode[op]); if (op) return pushresult(L, 0, NULL); /* error */ else { lua_pushinteger(L, ftell(f)); return 1; } } static int f_setvbuf (lua_State *L) { static const int mode[] = {_IONBF, _IOFBF, _IOLBF}; static const char *const modenames[] = {"no", "full", "line", NULL}; FILE *f = tofile(L); int op = luaL_checkoption(L, 2, NULL, modenames); lua_Integer sz = luaL_optinteger(L, 3, LUAL_BUFFERSIZE); int res = setvbuf(f, NULL, mode[op], sz); return pushresult(L, res == 0, NULL); } static int io_flush (lua_State *L) { return pushresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL); } static int f_flush (lua_State *L) { return pushresult(L, fflush(tofile(L)) == 0, NULL); } static const luaL_Reg iolib[] = { {"close", io_close}, {"flush", io_flush}, {"input", io_input}, {"lines", io_lines}, {"open", io_open}, {"output", io_output}, {"popen", io_popen}, {"read", io_read}, {"tmpfile", io_tmpfile}, {"type", io_type}, {"write", io_write}, {NULL, NULL} }; static const luaL_Reg flib[] = { {"close", io_close}, {"flush", f_flush}, {"lines", f_lines}, {"read", f_read}, {"seek", f_seek}, {"setvbuf", f_setvbuf}, {"write", f_write}, {"__gc", io_gc}, {"__tostring", io_tostring}, {NULL, NULL} }; static void createmeta (lua_State *L) { luaL_newmetatable(L, LUA_FILEHANDLE); /* create metatable for file handles */ lua_pushvalue(L, -1); /* push metatable */ lua_setfield(L, -2, "__index"); /* metatable.__index = metatable */ luaL_register(L, NULL, flib); /* file methods */ } static void createstdfile (lua_State *L, FILE *f, int k, const char *fname) { *newfile(L) = f; if (k > 0) { lua_pushvalue(L, -1); lua_rawseti(L, LUA_ENVIRONINDEX, k); } lua_pushvalue(L, -2); /* copy environment */ lua_setfenv(L, -2); /* set it */ lua_setfield(L, -3, fname); } static void newfenv (lua_State *L, lua_CFunction cls) { lua_createtable(L, 0, 1); lua_pushcfunction(L, cls); lua_setfield(L, -2, "__close"); } LUALIB_API int luaopen_io (lua_State *L) { createmeta(L); /* create (private) environment (with fields IO_INPUT, IO_OUTPUT, __close) */ newfenv(L, io_fclose); lua_replace(L, LUA_ENVIRONINDEX); /* open library */ luaL_register(L, LUA_IOLIBNAME, iolib); /* create (and set) default files */ newfenv(L, io_noclose); /* close function for default files */ createstdfile(L, stdin, IO_INPUT, "stdin"); createstdfile(L, stdout, IO_OUTPUT, "stdout"); createstdfile(L, stderr, 0, "stderr"); lua_pop(L, 1); /* pop environment for default files */ lua_getfield(L, -1, "popen"); newfenv(L, io_pclose); /* create environment for 'popen' */ lua_setfenv(L, -2); /* set fenv for 'popen' */ lua_pop(L, 1); /* pop 'popen' */ return 1; } genometools-1.5.1/src/external/lua-5.1.5/src/llex.c000066400000000000000000000303251211610345200216040ustar00rootroot00000000000000/* ** $Id: llex.c,v 2.20.1.2 2009/11/23 14:58:22 roberto Exp $ ** Lexical Analyzer ** See Copyright Notice in lua.h */ #include #include #include #define llex_c #define LUA_CORE #include "lua.h" #include "ldo.h" #include "llex.h" #include "lobject.h" #include "lparser.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "lzio.h" #define next(ls) (ls->current = zgetc(ls->z)) #define currIsNewline(ls) (ls->current == '\n' || ls->current == '\r') /* ORDER RESERVED */ const char *const luaX_tokens [] = { "and", "break", "do", "else", "elseif", "end", "false", "for", "function", "if", "in", "local", "nil", "not", "or", "repeat", "return", "then", "true", "until", "while", "..", "...", "==", ">=", "<=", "~=", "", "", "", "", NULL }; #define save_and_next(ls) (save(ls, ls->current), next(ls)) static void save (LexState *ls, int c) { Mbuffer *b = ls->buff; if (b->n + 1 > b->buffsize) { size_t newsize; if (b->buffsize >= MAX_SIZET/2) luaX_lexerror(ls, "lexical element too long", 0); newsize = b->buffsize * 2; luaZ_resizebuffer(ls->L, b, newsize); } b->buffer[b->n++] = cast(char, c); } void luaX_init (lua_State *L) { int i; for (i=0; itsv.reserved = cast_byte(i+1); /* reserved word */ } } #define MAXSRC 80 const char *luaX_token2str (LexState *ls, int token) { if (token < FIRST_RESERVED) { lua_assert(token == cast(unsigned char, token)); return (iscntrl(token)) ? luaO_pushfstring(ls->L, "char(%d)", token) : luaO_pushfstring(ls->L, "%c", token); } else return luaX_tokens[token-FIRST_RESERVED]; } static const char *txtToken (LexState *ls, int token) { switch (token) { case TK_NAME: case TK_STRING: case TK_NUMBER: save(ls, '\0'); return luaZ_buffer(ls->buff); default: return luaX_token2str(ls, token); } } void luaX_lexerror (LexState *ls, const char *msg, int token) { char buff[MAXSRC]; luaO_chunkid(buff, getstr(ls->source), MAXSRC); msg = luaO_pushfstring(ls->L, "%s:%d: %s", buff, ls->linenumber, msg); if (token) luaO_pushfstring(ls->L, "%s near " LUA_QS, msg, txtToken(ls, token)); luaD_throw(ls->L, LUA_ERRSYNTAX); } void luaX_syntaxerror (LexState *ls, const char *msg) { luaX_lexerror(ls, msg, ls->t.token); } TString *luaX_newstring (LexState *ls, const char *str, size_t l) { lua_State *L = ls->L; TString *ts = luaS_newlstr(L, str, l); TValue *o = luaH_setstr(L, ls->fs->h, ts); /* entry for `str' */ if (ttisnil(o)) { setbvalue(o, 1); /* make sure `str' will not be collected */ luaC_checkGC(L); } return ts; } static void inclinenumber (LexState *ls) { int old = ls->current; lua_assert(currIsNewline(ls)); next(ls); /* skip `\n' or `\r' */ if (currIsNewline(ls) && ls->current != old) next(ls); /* skip `\n\r' or `\r\n' */ if (++ls->linenumber >= MAX_INT) luaX_syntaxerror(ls, "chunk has too many lines"); } void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source) { ls->decpoint = '.'; ls->L = L; ls->lookahead.token = TK_EOS; /* no look-ahead token */ ls->z = z; ls->fs = NULL; ls->linenumber = 1; ls->lastline = 1; ls->source = source; luaZ_resizebuffer(ls->L, ls->buff, LUA_MINBUFFER); /* initialize buffer */ next(ls); /* read first char */ } /* ** ======================================================= ** LEXICAL ANALYZER ** ======================================================= */ static int check_next (LexState *ls, const char *set) { if (!strchr(set, ls->current)) return 0; save_and_next(ls); return 1; } static void buffreplace (LexState *ls, char from, char to) { size_t n = luaZ_bufflen(ls->buff); char *p = luaZ_buffer(ls->buff); while (n--) if (p[n] == from) p[n] = to; } static void trydecpoint (LexState *ls, SemInfo *seminfo) { /* format error: try to update decimal point separator */ struct lconv *cv = localeconv(); char old = ls->decpoint; ls->decpoint = (cv ? cv->decimal_point[0] : '.'); buffreplace(ls, old, ls->decpoint); /* try updated decimal separator */ if (!luaO_str2d(luaZ_buffer(ls->buff), &seminfo->r)) { /* format error with correct decimal point: no more options */ buffreplace(ls, ls->decpoint, '.'); /* undo change (for error message) */ luaX_lexerror(ls, "malformed number", TK_NUMBER); } } /* LUA_NUMBER */ static void read_numeral (LexState *ls, SemInfo *seminfo) { lua_assert(isdigit(ls->current)); do { save_and_next(ls); } while (isdigit(ls->current) || ls->current == '.'); if (check_next(ls, "Ee")) /* `E'? */ check_next(ls, "+-"); /* optional exponent sign */ while (isalnum(ls->current) || ls->current == '_') save_and_next(ls); save(ls, '\0'); buffreplace(ls, '.', ls->decpoint); /* follow locale for decimal point */ if (!luaO_str2d(luaZ_buffer(ls->buff), &seminfo->r)) /* format error? */ trydecpoint(ls, seminfo); /* try to update decimal point separator */ } static int skip_sep (LexState *ls) { int count = 0; int s = ls->current; lua_assert(s == '[' || s == ']'); save_and_next(ls); while (ls->current == '=') { save_and_next(ls); count++; } return (ls->current == s) ? count : (-count) - 1; } static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) { int cont = 0; (void)(cont); /* avoid warnings when `cont' is not used */ save_and_next(ls); /* skip 2nd `[' */ if (currIsNewline(ls)) /* string starts with a newline? */ inclinenumber(ls); /* skip it */ for (;;) { switch (ls->current) { case EOZ: luaX_lexerror(ls, (seminfo) ? "unfinished long string" : "unfinished long comment", TK_EOS); break; /* to avoid warnings */ #if defined(LUA_COMPAT_LSTR) case '[': { if (skip_sep(ls) == sep) { save_and_next(ls); /* skip 2nd `[' */ cont++; #if LUA_COMPAT_LSTR == 1 if (sep == 0) luaX_lexerror(ls, "nesting of [[...]] is deprecated", '['); #endif } break; } #endif case ']': { if (skip_sep(ls) == sep) { save_and_next(ls); /* skip 2nd `]' */ #if defined(LUA_COMPAT_LSTR) && LUA_COMPAT_LSTR == 2 cont--; if (sep == 0 && cont >= 0) break; #endif goto endloop; } break; } case '\n': case '\r': { save(ls, '\n'); inclinenumber(ls); if (!seminfo) luaZ_resetbuffer(ls->buff); /* avoid wasting space */ break; } default: { if (seminfo) save_and_next(ls); else next(ls); } } } endloop: if (seminfo) seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + (2 + sep), luaZ_bufflen(ls->buff) - 2*(2 + sep)); } static void read_string (LexState *ls, int del, SemInfo *seminfo) { save_and_next(ls); while (ls->current != del) { switch (ls->current) { case EOZ: luaX_lexerror(ls, "unfinished string", TK_EOS); continue; /* to avoid warnings */ case '\n': case '\r': luaX_lexerror(ls, "unfinished string", TK_STRING); continue; /* to avoid warnings */ case '\\': { int c; next(ls); /* do not save the `\' */ switch (ls->current) { case 'a': c = '\a'; break; case 'b': c = '\b'; break; case 'f': c = '\f'; break; case 'n': c = '\n'; break; case 'r': c = '\r'; break; case 't': c = '\t'; break; case 'v': c = '\v'; break; case '\n': /* go through */ case '\r': save(ls, '\n'); inclinenumber(ls); continue; case EOZ: continue; /* will raise an error next loop */ default: { if (!isdigit(ls->current)) save_and_next(ls); /* handles \\, \", \', and \? */ else { /* \xxx */ int i = 0; c = 0; do { c = 10*c + (ls->current-'0'); next(ls); } while (++i<3 && isdigit(ls->current)); if (c > UCHAR_MAX) luaX_lexerror(ls, "escape sequence too large", TK_STRING); save(ls, c); } continue; } } save(ls, c); next(ls); continue; } default: save_and_next(ls); } } save_and_next(ls); /* skip delimiter */ seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + 1, luaZ_bufflen(ls->buff) - 2); } static int llex (LexState *ls, SemInfo *seminfo) { luaZ_resetbuffer(ls->buff); for (;;) { switch (ls->current) { case '\n': case '\r': { inclinenumber(ls); continue; } case '-': { next(ls); if (ls->current != '-') return '-'; /* else is a comment */ next(ls); if (ls->current == '[') { int sep = skip_sep(ls); luaZ_resetbuffer(ls->buff); /* `skip_sep' may dirty the buffer */ if (sep >= 0) { read_long_string(ls, NULL, sep); /* long comment */ luaZ_resetbuffer(ls->buff); continue; } } /* else short comment */ while (!currIsNewline(ls) && ls->current != EOZ) next(ls); continue; } case '[': { int sep = skip_sep(ls); if (sep >= 0) { read_long_string(ls, seminfo, sep); return TK_STRING; } else if (sep == -1) return '['; else luaX_lexerror(ls, "invalid long string delimiter", TK_STRING); } case '=': { next(ls); if (ls->current != '=') return '='; else { next(ls); return TK_EQ; } } case '<': { next(ls); if (ls->current != '=') return '<'; else { next(ls); return TK_LE; } } case '>': { next(ls); if (ls->current != '=') return '>'; else { next(ls); return TK_GE; } } case '~': { next(ls); if (ls->current != '=') return '~'; else { next(ls); return TK_NE; } } case '"': case '\'': { read_string(ls, ls->current, seminfo); return TK_STRING; } case '.': { save_and_next(ls); if (check_next(ls, ".")) { if (check_next(ls, ".")) return TK_DOTS; /* ... */ else return TK_CONCAT; /* .. */ } else if (!isdigit(ls->current)) return '.'; else { read_numeral(ls, seminfo); return TK_NUMBER; } } case EOZ: { return TK_EOS; } default: { if (isspace(ls->current)) { lua_assert(!currIsNewline(ls)); next(ls); continue; } else if (isdigit(ls->current)) { read_numeral(ls, seminfo); return TK_NUMBER; } else if (isalpha(ls->current) || ls->current == '_') { /* identifier or reserved word */ TString *ts; do { save_and_next(ls); } while (isalnum(ls->current) || ls->current == '_'); ts = luaX_newstring(ls, luaZ_buffer(ls->buff), luaZ_bufflen(ls->buff)); if (ts->tsv.reserved > 0) /* reserved word? */ return ts->tsv.reserved - 1 + FIRST_RESERVED; else { seminfo->ts = ts; return TK_NAME; } } else { int c = ls->current; next(ls); return c; /* single-char tokens (+ - / ...) */ } } } } } void luaX_next (LexState *ls) { ls->lastline = ls->linenumber; if (ls->lookahead.token != TK_EOS) { /* is there a look-ahead token? */ ls->t = ls->lookahead; /* use this one */ ls->lookahead.token = TK_EOS; /* and discharge it */ } else ls->t.token = llex(ls, &ls->t.seminfo); /* read next token */ } void luaX_lookahead (LexState *ls) { lua_assert(ls->lookahead.token == TK_EOS); ls->lookahead.token = llex(ls, &ls->lookahead.seminfo); } genometools-1.5.1/src/external/lua-5.1.5/src/llex.h000066400000000000000000000042011211610345200216030ustar00rootroot00000000000000/* ** $Id: llex.h,v 1.58.1.1 2007/12/27 13:02:25 roberto Exp $ ** Lexical Analyzer ** See Copyright Notice in lua.h */ #ifndef llex_h #define llex_h #include "lobject.h" #include "lzio.h" #define FIRST_RESERVED 257 /* maximum length of a reserved word */ #define TOKEN_LEN (sizeof("function")/sizeof(char)) /* * WARNING: if you change the order of this enumeration, * grep "ORDER RESERVED" */ enum RESERVED { /* terminal symbols denoted by reserved words */ TK_AND = FIRST_RESERVED, TK_BREAK, TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION, TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT, TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE, /* other terminal symbols */ TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_NUMBER, TK_NAME, TK_STRING, TK_EOS }; /* number of reserved words */ #define NUM_RESERVED (cast(int, TK_WHILE-FIRST_RESERVED+1)) /* array with token `names' */ LUAI_DATA const char *const luaX_tokens []; typedef union { lua_Number r; TString *ts; } SemInfo; /* semantics information */ typedef struct Token { int token; SemInfo seminfo; } Token; typedef struct LexState { int current; /* current character (charint) */ int linenumber; /* input line counter */ int lastline; /* line of last token `consumed' */ Token t; /* current token */ Token lookahead; /* look ahead token */ struct FuncState *fs; /* `FuncState' is private to the parser */ struct lua_State *L; ZIO *z; /* input stream */ Mbuffer *buff; /* buffer for tokens */ TString *source; /* current source name */ char decpoint; /* locale decimal point */ } LexState; LUAI_FUNC void luaX_init (lua_State *L); LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source); LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l); LUAI_FUNC void luaX_next (LexState *ls); LUAI_FUNC void luaX_lookahead (LexState *ls); LUAI_FUNC void luaX_lexerror (LexState *ls, const char *msg, int token); LUAI_FUNC void luaX_syntaxerror (LexState *ls, const char *s); LUAI_FUNC const char *luaX_token2str (LexState *ls, int token); #endif genometools-1.5.1/src/external/lua-5.1.5/src/llimits.h000066400000000000000000000044551211610345200223270ustar00rootroot00000000000000/* ** $Id: llimits.h,v 1.69.1.1 2007/12/27 13:02:25 roberto Exp $ ** Limits, basic types, and some other `installation-dependent' definitions ** See Copyright Notice in lua.h */ #ifndef llimits_h #define llimits_h #include #include #include "lua.h" typedef LUAI_UINT32 lu_int32; typedef LUAI_UMEM lu_mem; typedef LUAI_MEM l_mem; /* chars used as small naturals (so that `char' is reserved for characters) */ typedef unsigned char lu_byte; #define MAX_SIZET ((size_t)(~(size_t)0)-2) #define MAX_LUMEM ((lu_mem)(~(lu_mem)0)-2) #define MAX_INT (INT_MAX-2) /* maximum value of an int (-2 for safety) */ /* ** conversion of pointer to integer ** this is for hashing only; there is no problem if the integer ** cannot hold the whole pointer value */ #define IntPoint(p) ((unsigned int)(lu_mem)(p)) /* type to ensure maximum alignment */ typedef LUAI_USER_ALIGNMENT_T L_Umaxalign; /* result of a `usual argument conversion' over lua_Number */ typedef LUAI_UACNUMBER l_uacNumber; /* internal assertions for in-house debugging */ #ifdef lua_assert #define check_exp(c,e) (lua_assert(c), (e)) #define api_check(l,e) lua_assert(e) #else #define lua_assert(c) ((void)0) #define check_exp(c,e) (e) #define api_check luai_apicheck #endif #ifndef UNUSED #define UNUSED(x) ((void)(x)) /* to avoid warnings */ #endif #ifndef cast #define cast(t, exp) ((t)(exp)) #endif #define cast_byte(i) cast(lu_byte, (i)) #define cast_num(i) cast(lua_Number, (i)) #define cast_int(i) cast(int, (i)) /* ** type for virtual-machine instructions ** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h) */ typedef lu_int32 Instruction; /* maximum stack for a Lua function */ #define MAXSTACK 250 /* minimum size for the string table (must be power of 2) */ #ifndef MINSTRTABSIZE #define MINSTRTABSIZE 32 #endif /* minimum size for string buffer */ #ifndef LUA_MINBUFFER #define LUA_MINBUFFER 32 #endif #ifndef lua_lock #define lua_lock(L) ((void) 0) #define lua_unlock(L) ((void) 0) #endif #ifndef luai_threadyield #define luai_threadyield(L) {lua_unlock(L); lua_lock(L);} #endif /* ** macro to control inclusion of some hard tests on stack reallocation */ #ifndef HARDSTACKTESTS #define condhardstacktests(x) ((void)0) #else #define condhardstacktests(x) x #endif #endif genometools-1.5.1/src/external/lua-5.1.5/src/lmathlib.c000066400000000000000000000133071211610345200224350ustar00rootroot00000000000000/* ** $Id: lmathlib.c,v 1.67.1.1 2007/12/27 13:02:25 roberto Exp $ ** Standard mathematical library ** See Copyright Notice in lua.h */ #include #include #define lmathlib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" #undef PI #define PI (3.14159265358979323846) #define RADIANS_PER_DEGREE (PI/180.0) static int math_abs (lua_State *L) { lua_pushnumber(L, fabs(luaL_checknumber(L, 1))); return 1; } static int math_sin (lua_State *L) { lua_pushnumber(L, sin(luaL_checknumber(L, 1))); return 1; } static int math_sinh (lua_State *L) { lua_pushnumber(L, sinh(luaL_checknumber(L, 1))); return 1; } static int math_cos (lua_State *L) { lua_pushnumber(L, cos(luaL_checknumber(L, 1))); return 1; } static int math_cosh (lua_State *L) { lua_pushnumber(L, cosh(luaL_checknumber(L, 1))); return 1; } static int math_tan (lua_State *L) { lua_pushnumber(L, tan(luaL_checknumber(L, 1))); return 1; } static int math_tanh (lua_State *L) { lua_pushnumber(L, tanh(luaL_checknumber(L, 1))); return 1; } static int math_asin (lua_State *L) { lua_pushnumber(L, asin(luaL_checknumber(L, 1))); return 1; } static int math_acos (lua_State *L) { lua_pushnumber(L, acos(luaL_checknumber(L, 1))); return 1; } static int math_atan (lua_State *L) { lua_pushnumber(L, atan(luaL_checknumber(L, 1))); return 1; } static int math_atan2 (lua_State *L) { lua_pushnumber(L, atan2(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); return 1; } static int math_ceil (lua_State *L) { lua_pushnumber(L, ceil(luaL_checknumber(L, 1))); return 1; } static int math_floor (lua_State *L) { lua_pushnumber(L, floor(luaL_checknumber(L, 1))); return 1; } static int math_fmod (lua_State *L) { lua_pushnumber(L, fmod(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); return 1; } static int math_modf (lua_State *L) { double ip; double fp = modf(luaL_checknumber(L, 1), &ip); lua_pushnumber(L, ip); lua_pushnumber(L, fp); return 2; } static int math_sqrt (lua_State *L) { lua_pushnumber(L, sqrt(luaL_checknumber(L, 1))); return 1; } static int math_pow (lua_State *L) { lua_pushnumber(L, pow(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); return 1; } static int math_log (lua_State *L) { lua_pushnumber(L, log(luaL_checknumber(L, 1))); return 1; } static int math_log10 (lua_State *L) { lua_pushnumber(L, log10(luaL_checknumber(L, 1))); return 1; } static int math_exp (lua_State *L) { lua_pushnumber(L, exp(luaL_checknumber(L, 1))); return 1; } static int math_deg (lua_State *L) { lua_pushnumber(L, luaL_checknumber(L, 1)/RADIANS_PER_DEGREE); return 1; } static int math_rad (lua_State *L) { lua_pushnumber(L, luaL_checknumber(L, 1)*RADIANS_PER_DEGREE); return 1; } static int math_frexp (lua_State *L) { int e; lua_pushnumber(L, frexp(luaL_checknumber(L, 1), &e)); lua_pushinteger(L, e); return 2; } static int math_ldexp (lua_State *L) { lua_pushnumber(L, ldexp(luaL_checknumber(L, 1), luaL_checkint(L, 2))); return 1; } static int math_min (lua_State *L) { int n = lua_gettop(L); /* number of arguments */ lua_Number dmin = luaL_checknumber(L, 1); int i; for (i=2; i<=n; i++) { lua_Number d = luaL_checknumber(L, i); if (d < dmin) dmin = d; } lua_pushnumber(L, dmin); return 1; } static int math_max (lua_State *L) { int n = lua_gettop(L); /* number of arguments */ lua_Number dmax = luaL_checknumber(L, 1); int i; for (i=2; i<=n; i++) { lua_Number d = luaL_checknumber(L, i); if (d > dmax) dmax = d; } lua_pushnumber(L, dmax); return 1; } static int math_random (lua_State *L) { /* the `%' avoids the (rare) case of r==1, and is needed also because on some systems (SunOS!) `rand()' may return a value larger than RAND_MAX */ lua_Number r = (lua_Number)(rand()%RAND_MAX) / (lua_Number)RAND_MAX; switch (lua_gettop(L)) { /* check number of arguments */ case 0: { /* no arguments */ lua_pushnumber(L, r); /* Number between 0 and 1 */ break; } case 1: { /* only upper limit */ int u = luaL_checkint(L, 1); luaL_argcheck(L, 1<=u, 1, "interval is empty"); lua_pushnumber(L, floor(r*u)+1); /* int between 1 and `u' */ break; } case 2: { /* lower and upper limits */ int l = luaL_checkint(L, 1); int u = luaL_checkint(L, 2); luaL_argcheck(L, l<=u, 2, "interval is empty"); lua_pushnumber(L, floor(r*(u-l+1))+l); /* int between `l' and `u' */ break; } default: return luaL_error(L, "wrong number of arguments"); } return 1; } static int math_randomseed (lua_State *L) { srand(luaL_checkint(L, 1)); return 0; } static const luaL_Reg mathlib[] = { {"abs", math_abs}, {"acos", math_acos}, {"asin", math_asin}, {"atan2", math_atan2}, {"atan", math_atan}, {"ceil", math_ceil}, {"cosh", math_cosh}, {"cos", math_cos}, {"deg", math_deg}, {"exp", math_exp}, {"floor", math_floor}, {"fmod", math_fmod}, {"frexp", math_frexp}, {"ldexp", math_ldexp}, {"log10", math_log10}, {"log", math_log}, {"max", math_max}, {"min", math_min}, {"modf", math_modf}, {"pow", math_pow}, {"rad", math_rad}, {"random", math_random}, {"randomseed", math_randomseed}, {"sinh", math_sinh}, {"sin", math_sin}, {"sqrt", math_sqrt}, {"tanh", math_tanh}, {"tan", math_tan}, {NULL, NULL} }; /* ** Open math library */ LUALIB_API int luaopen_math (lua_State *L) { luaL_register(L, LUA_MATHLIBNAME, mathlib); lua_pushnumber(L, PI); lua_setfield(L, -2, "pi"); lua_pushnumber(L, HUGE_VAL); lua_setfield(L, -2, "huge"); #if defined(LUA_COMPAT_MOD) lua_getfield(L, -1, "fmod"); lua_setfield(L, -2, "mod"); #endif return 1; } genometools-1.5.1/src/external/lua-5.1.5/src/lmem.c000066400000000000000000000041741211610345200215750ustar00rootroot00000000000000/* ** $Id: lmem.c,v 1.70.1.1 2007/12/27 13:02:25 roberto Exp $ ** Interface to Memory Manager ** See Copyright Notice in lua.h */ #include #define lmem_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" /* ** About the realloc function: ** void * frealloc (void *ud, void *ptr, size_t osize, size_t nsize); ** (`osize' is the old size, `nsize' is the new size) ** ** Lua ensures that (ptr == NULL) iff (osize == 0). ** ** * frealloc(ud, NULL, 0, x) creates a new block of size `x' ** ** * frealloc(ud, p, x, 0) frees the block `p' ** (in this specific case, frealloc must return NULL). ** particularly, frealloc(ud, NULL, 0, 0) does nothing ** (which is equivalent to free(NULL) in ANSI C) ** ** frealloc returns NULL if it cannot create or reallocate the area ** (any reallocation to an equal or smaller size cannot fail!) */ #define MINSIZEARRAY 4 void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elems, int limit, const char *errormsg) { void *newblock; int newsize; if (*size >= limit/2) { /* cannot double it? */ if (*size >= limit) /* cannot grow even a little? */ luaG_runerror(L, errormsg); newsize = limit; /* still have at least one free place */ } else { newsize = (*size)*2; if (newsize < MINSIZEARRAY) newsize = MINSIZEARRAY; /* minimum size */ } newblock = luaM_reallocv(L, block, *size, newsize, size_elems); *size = newsize; /* update only when everything else is OK */ return newblock; } void *luaM_toobig (lua_State *L) { luaG_runerror(L, "memory allocation error: block too big"); return NULL; /* to avoid warnings */ } /* ** generic allocation routine. */ void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) { global_State *g = G(L); lua_assert((osize == 0) == (block == NULL)); block = (*g->frealloc)(g->ud, block, osize, nsize); if (block == NULL && nsize > 0) luaD_throw(L, LUA_ERRMEM); lua_assert((nsize == 0) == (block == NULL)); g->totalbytes = (g->totalbytes - osize) + nsize; return block; } genometools-1.5.1/src/external/lua-5.1.5/src/lmem.h000066400000000000000000000027261211610345200216030ustar00rootroot00000000000000/* ** $Id: lmem.h,v 1.31.1.1 2007/12/27 13:02:25 roberto Exp $ ** Interface to Memory Manager ** See Copyright Notice in lua.h */ #ifndef lmem_h #define lmem_h #include #include "llimits.h" #include "lua.h" #define MEMERRMSG "not enough memory" #define luaM_reallocv(L,b,on,n,e) \ ((cast(size_t, (n)+1) <= MAX_SIZET/(e)) ? /* +1 to avoid warnings */ \ luaM_realloc_(L, (b), (on)*(e), (n)*(e)) : \ luaM_toobig(L)) #define luaM_freemem(L, b, s) luaM_realloc_(L, (b), (s), 0) #define luaM_free(L, b) luaM_realloc_(L, (b), sizeof(*(b)), 0) #define luaM_freearray(L, b, n, t) luaM_reallocv(L, (b), n, 0, sizeof(t)) #define luaM_malloc(L,t) luaM_realloc_(L, NULL, 0, (t)) #define luaM_new(L,t) cast(t *, luaM_malloc(L, sizeof(t))) #define luaM_newvector(L,n,t) \ cast(t *, luaM_reallocv(L, NULL, 0, n, sizeof(t))) #define luaM_growvector(L,v,nelems,size,t,limit,e) \ if ((nelems)+1 > (size)) \ ((v)=cast(t *, luaM_growaux_(L,v,&(size),sizeof(t),limit,e))) #define luaM_reallocvector(L, v,oldn,n,t) \ ((v)=cast(t *, luaM_reallocv(L, v, oldn, n, sizeof(t)))) LUAI_FUNC void *luaM_realloc_ (lua_State *L, void *block, size_t oldsize, size_t size); LUAI_FUNC void *luaM_toobig (lua_State *L); LUAI_FUNC void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elem, int limit, const char *errormsg); #endif genometools-1.5.1/src/external/lua-5.1.5/src/loadlib.c000066400000000000000000000454201211610345200222500ustar00rootroot00000000000000/* ** $Id: loadlib.c,v 1.52.1.4 2009/09/09 13:17:16 roberto Exp $ ** Dynamic library loader for Lua ** See Copyright Notice in lua.h ** ** This module contains an implementation of loadlib for Unix systems ** that have dlfcn, an implementation for Darwin (Mac OS X), an ** implementation for Windows, and a stub for other systems. */ #include #include #define loadlib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" /* prefix for open functions in C libraries */ #define LUA_POF "luaopen_" /* separator for open functions in C libraries */ #define LUA_OFSEP "_" #define LIBPREFIX "LOADLIB: " #define POF LUA_POF #define LIB_FAIL "open" /* error codes for ll_loadfunc */ #define ERRLIB 1 #define ERRFUNC 2 #define setprogdir(L) ((void)0) static void ll_unloadlib (void *lib); static void *ll_load (lua_State *L, const char *path); static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym); #if defined(LUA_DL_DLOPEN) /* ** {======================================================================== ** This is an implementation of loadlib based on the dlfcn interface. ** The dlfcn interface is available in Linux, SunOS, Solaris, IRIX, FreeBSD, ** NetBSD, AIX 4.2, HPUX 11, and probably most other Unix flavors, at least ** as an emulation layer on top of native functions. ** ========================================================================= */ #include static void ll_unloadlib (void *lib) { dlclose(lib); } static void *ll_load (lua_State *L, const char *path) { void *lib = dlopen(path, RTLD_NOW); if (lib == NULL) lua_pushstring(L, dlerror()); return lib; } static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { lua_CFunction f = (lua_CFunction)dlsym(lib, sym); if (f == NULL) lua_pushstring(L, dlerror()); return f; } /* }====================================================== */ #elif defined(LUA_DL_DLL) /* ** {====================================================================== ** This is an implementation of loadlib for Windows using native functions. ** ======================================================================= */ #include #undef setprogdir static void setprogdir (lua_State *L) { char buff[MAX_PATH + 1]; char *lb; DWORD nsize = sizeof(buff)/sizeof(char); DWORD n = GetModuleFileNameA(NULL, buff, nsize); if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL) luaL_error(L, "unable to get ModuleFileName"); else { *lb = '\0'; luaL_gsub(L, lua_tostring(L, -1), LUA_EXECDIR, buff); lua_remove(L, -2); /* remove original string */ } } static void pusherror (lua_State *L) { int error = GetLastError(); char buffer[128]; if (FormatMessageA(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, buffer, sizeof(buffer), NULL)) lua_pushstring(L, buffer); else lua_pushfstring(L, "system error %d\n", error); } static void ll_unloadlib (void *lib) { FreeLibrary((HINSTANCE)lib); } static void *ll_load (lua_State *L, const char *path) { HINSTANCE lib = LoadLibraryA(path); if (lib == NULL) pusherror(L); return lib; } static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { lua_CFunction f = (lua_CFunction)GetProcAddress((HINSTANCE)lib, sym); if (f == NULL) pusherror(L); return f; } /* }====================================================== */ #elif defined(LUA_DL_DYLD) /* ** {====================================================================== ** Native Mac OS X / Darwin Implementation ** ======================================================================= */ #include /* Mac appends a `_' before C function names */ #undef POF #define POF "_" LUA_POF static void pusherror (lua_State *L) { const char *err_str; const char *err_file; NSLinkEditErrors err; int err_num; NSLinkEditError(&err, &err_num, &err_file, &err_str); lua_pushstring(L, err_str); } static const char *errorfromcode (NSObjectFileImageReturnCode ret) { switch (ret) { case NSObjectFileImageInappropriateFile: return "file is not a bundle"; case NSObjectFileImageArch: return "library is for wrong CPU type"; case NSObjectFileImageFormat: return "bad format"; case NSObjectFileImageAccess: return "cannot access file"; case NSObjectFileImageFailure: default: return "unable to load library"; } } static void ll_unloadlib (void *lib) { NSUnLinkModule((NSModule)lib, NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES); } static void *ll_load (lua_State *L, const char *path) { NSObjectFileImage img; NSObjectFileImageReturnCode ret; /* this would be a rare case, but prevents crashing if it happens */ if(!_dyld_present()) { lua_pushliteral(L, "dyld not present"); return NULL; } ret = NSCreateObjectFileImageFromFile(path, &img); if (ret == NSObjectFileImageSuccess) { NSModule mod = NSLinkModule(img, path, NSLINKMODULE_OPTION_PRIVATE | NSLINKMODULE_OPTION_RETURN_ON_ERROR); NSDestroyObjectFileImage(img); if (mod == NULL) pusherror(L); return mod; } lua_pushstring(L, errorfromcode(ret)); return NULL; } static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { NSSymbol nss = NSLookupSymbolInModule((NSModule)lib, sym); if (nss == NULL) { lua_pushfstring(L, "symbol " LUA_QS " not found", sym); return NULL; } return (lua_CFunction)NSAddressOfSymbol(nss); } /* }====================================================== */ #else /* ** {====================================================== ** Fallback for other systems ** ======================================================= */ #undef LIB_FAIL #define LIB_FAIL "absent" #define DLMSG "dynamic libraries not enabled; check your Lua installation" static void ll_unloadlib (void *lib) { (void)lib; /* to avoid warnings */ } static void *ll_load (lua_State *L, const char *path) { (void)path; /* to avoid warnings */ lua_pushliteral(L, DLMSG); return NULL; } static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { (void)lib; (void)sym; /* to avoid warnings */ lua_pushliteral(L, DLMSG); return NULL; } /* }====================================================== */ #endif static void **ll_register (lua_State *L, const char *path) { void **plib; lua_pushfstring(L, "%s%s", LIBPREFIX, path); lua_gettable(L, LUA_REGISTRYINDEX); /* check library in registry? */ if (!lua_isnil(L, -1)) /* is there an entry? */ plib = (void **)lua_touserdata(L, -1); else { /* no entry yet; create one */ lua_pop(L, 1); plib = (void **)lua_newuserdata(L, sizeof(const void *)); *plib = NULL; luaL_getmetatable(L, "_LOADLIB"); lua_setmetatable(L, -2); lua_pushfstring(L, "%s%s", LIBPREFIX, path); lua_pushvalue(L, -2); lua_settable(L, LUA_REGISTRYINDEX); } return plib; } /* ** __gc tag method: calls library's `ll_unloadlib' function with the lib ** handle */ static int gctm (lua_State *L) { void **lib = (void **)luaL_checkudata(L, 1, "_LOADLIB"); if (*lib) ll_unloadlib(*lib); *lib = NULL; /* mark library as closed */ return 0; } static int ll_loadfunc (lua_State *L, const char *path, const char *sym) { void **reg = ll_register(L, path); if (*reg == NULL) *reg = ll_load(L, path); if (*reg == NULL) return ERRLIB; /* unable to load library */ else { lua_CFunction f = ll_sym(L, *reg, sym); if (f == NULL) return ERRFUNC; /* unable to find function */ lua_pushcfunction(L, f); return 0; /* return function */ } } static int ll_loadlib (lua_State *L) { const char *path = luaL_checkstring(L, 1); const char *init = luaL_checkstring(L, 2); int stat = ll_loadfunc(L, path, init); if (stat == 0) /* no errors? */ return 1; /* return the loaded function */ else { /* error; error message is on stack top */ lua_pushnil(L); lua_insert(L, -2); lua_pushstring(L, (stat == ERRLIB) ? LIB_FAIL : "init"); return 3; /* return nil, error message, and where */ } } /* ** {====================================================== ** 'require' function ** ======================================================= */ static int readable (const char *filename) { FILE *f = fopen(filename, "r"); /* try to open file */ if (f == NULL) return 0; /* open failed */ fclose(f); return 1; } static const char *pushnexttemplate (lua_State *L, const char *path) { const char *l; while (*path == *LUA_PATHSEP) path++; /* skip separators */ if (*path == '\0') return NULL; /* no more templates */ l = strchr(path, *LUA_PATHSEP); /* find next separator */ if (l == NULL) l = path + strlen(path); lua_pushlstring(L, path, l - path); /* template */ return l; } static const char *findfile (lua_State *L, const char *name, const char *pname) { const char *path; name = luaL_gsub(L, name, ".", LUA_DIRSEP); lua_getfield(L, LUA_ENVIRONINDEX, pname); path = lua_tostring(L, -1); if (path == NULL) luaL_error(L, LUA_QL("package.%s") " must be a string", pname); lua_pushliteral(L, ""); /* error accumulator */ while ((path = pushnexttemplate(L, path)) != NULL) { const char *filename; filename = luaL_gsub(L, lua_tostring(L, -1), LUA_PATH_MARK, name); lua_remove(L, -2); /* remove path template */ if (readable(filename)) /* does file exist and is readable? */ return filename; /* return that file name */ lua_pushfstring(L, "\n\tno file " LUA_QS, filename); lua_remove(L, -2); /* remove file name */ lua_concat(L, 2); /* add entry to possible error message */ } return NULL; /* not found */ } static void loaderror (lua_State *L, const char *filename) { luaL_error(L, "error loading module " LUA_QS " from file " LUA_QS ":\n\t%s", lua_tostring(L, 1), filename, lua_tostring(L, -1)); } static int loader_Lua (lua_State *L) { const char *filename; const char *name = luaL_checkstring(L, 1); filename = findfile(L, name, "path"); if (filename == NULL) return 1; /* library not found in this path */ if (luaL_loadfile(L, filename) != 0) loaderror(L, filename); return 1; /* library loaded successfully */ } static const char *mkfuncname (lua_State *L, const char *modname) { const char *funcname; const char *mark = strchr(modname, *LUA_IGMARK); if (mark) modname = mark + 1; funcname = luaL_gsub(L, modname, ".", LUA_OFSEP); funcname = lua_pushfstring(L, POF"%s", funcname); lua_remove(L, -2); /* remove 'gsub' result */ return funcname; } static int loader_C (lua_State *L) { const char *funcname; const char *name = luaL_checkstring(L, 1); const char *filename = findfile(L, name, "cpath"); if (filename == NULL) return 1; /* library not found in this path */ funcname = mkfuncname(L, name); if (ll_loadfunc(L, filename, funcname) != 0) loaderror(L, filename); return 1; /* library loaded successfully */ } static int loader_Croot (lua_State *L) { const char *funcname; const char *filename; const char *name = luaL_checkstring(L, 1); const char *p = strchr(name, '.'); int stat; if (p == NULL) return 0; /* is root */ lua_pushlstring(L, name, p - name); filename = findfile(L, lua_tostring(L, -1), "cpath"); if (filename == NULL) return 1; /* root not found */ funcname = mkfuncname(L, name); if ((stat = ll_loadfunc(L, filename, funcname)) != 0) { if (stat != ERRFUNC) loaderror(L, filename); /* real error */ lua_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS, name, filename); return 1; /* function not found */ } return 1; } static int loader_preload (lua_State *L) { const char *name = luaL_checkstring(L, 1); lua_getfield(L, LUA_ENVIRONINDEX, "preload"); if (!lua_istable(L, -1)) luaL_error(L, LUA_QL("package.preload") " must be a table"); lua_getfield(L, -1, name); if (lua_isnil(L, -1)) /* not found? */ lua_pushfstring(L, "\n\tno field package.preload['%s']", name); return 1; } static const int sentinel_ = 0; #define sentinel ((void *)&sentinel_) static int ll_require (lua_State *L) { const char *name = luaL_checkstring(L, 1); int i; lua_settop(L, 1); /* _LOADED table will be at index 2 */ lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); lua_getfield(L, 2, name); if (lua_toboolean(L, -1)) { /* is it there? */ if (lua_touserdata(L, -1) == sentinel) /* check loops */ luaL_error(L, "loop or previous error loading module " LUA_QS, name); return 1; /* package is already loaded */ } /* else must load it; iterate over available loaders */ lua_getfield(L, LUA_ENVIRONINDEX, "loaders"); if (!lua_istable(L, -1)) luaL_error(L, LUA_QL("package.loaders") " must be a table"); lua_pushliteral(L, ""); /* error message accumulator */ for (i=1; ; i++) { lua_rawgeti(L, -2, i); /* get a loader */ if (lua_isnil(L, -1)) luaL_error(L, "module " LUA_QS " not found:%s", name, lua_tostring(L, -2)); lua_pushstring(L, name); lua_call(L, 1, 1); /* call it */ if (lua_isfunction(L, -1)) /* did it find module? */ break; /* module loaded successfully */ else if (lua_isstring(L, -1)) /* loader returned error message? */ lua_concat(L, 2); /* accumulate it */ else lua_pop(L, 1); } lua_pushlightuserdata(L, sentinel); lua_setfield(L, 2, name); /* _LOADED[name] = sentinel */ lua_pushstring(L, name); /* pass name as argument to module */ lua_call(L, 1, 1); /* run loaded module */ if (!lua_isnil(L, -1)) /* non-nil return? */ lua_setfield(L, 2, name); /* _LOADED[name] = returned value */ lua_getfield(L, 2, name); if (lua_touserdata(L, -1) == sentinel) { /* module did not set a value? */ lua_pushboolean(L, 1); /* use true as result */ lua_pushvalue(L, -1); /* extra copy to be returned */ lua_setfield(L, 2, name); /* _LOADED[name] = true */ } return 1; } /* }====================================================== */ /* ** {====================================================== ** 'module' function ** ======================================================= */ static void setfenv (lua_State *L) { lua_Debug ar; if (lua_getstack(L, 1, &ar) == 0 || lua_getinfo(L, "f", &ar) == 0 || /* get calling function */ lua_iscfunction(L, -1)) luaL_error(L, LUA_QL("module") " not called from a Lua function"); lua_pushvalue(L, -2); lua_setfenv(L, -2); lua_pop(L, 1); } static void dooptions (lua_State *L, int n) { int i; for (i = 2; i <= n; i++) { lua_pushvalue(L, i); /* get option (a function) */ lua_pushvalue(L, -2); /* module */ lua_call(L, 1, 0); } } static void modinit (lua_State *L, const char *modname) { const char *dot; lua_pushvalue(L, -1); lua_setfield(L, -2, "_M"); /* module._M = module */ lua_pushstring(L, modname); lua_setfield(L, -2, "_NAME"); dot = strrchr(modname, '.'); /* look for last dot in module name */ if (dot == NULL) dot = modname; else dot++; /* set _PACKAGE as package name (full module name minus last part) */ lua_pushlstring(L, modname, dot - modname); lua_setfield(L, -2, "_PACKAGE"); } static int ll_module (lua_State *L) { const char *modname = luaL_checkstring(L, 1); int loaded = lua_gettop(L) + 1; /* index of _LOADED table */ lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); lua_getfield(L, loaded, modname); /* get _LOADED[modname] */ if (!lua_istable(L, -1)) { /* not found? */ lua_pop(L, 1); /* remove previous result */ /* try global variable (and create one if it does not exist) */ if (luaL_findtable(L, LUA_GLOBALSINDEX, modname, 1) != NULL) return luaL_error(L, "name conflict for module " LUA_QS, modname); lua_pushvalue(L, -1); lua_setfield(L, loaded, modname); /* _LOADED[modname] = new table */ } /* check whether table already has a _NAME field */ lua_getfield(L, -1, "_NAME"); if (!lua_isnil(L, -1)) /* is table an initialized module? */ lua_pop(L, 1); else { /* no; initialize it */ lua_pop(L, 1); modinit(L, modname); } lua_pushvalue(L, -1); setfenv(L); dooptions(L, loaded - 1); return 0; } static int ll_seeall (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); if (!lua_getmetatable(L, 1)) { lua_createtable(L, 0, 1); /* create new metatable */ lua_pushvalue(L, -1); lua_setmetatable(L, 1); } lua_pushvalue(L, LUA_GLOBALSINDEX); lua_setfield(L, -2, "__index"); /* mt.__index = _G */ return 0; } /* }====================================================== */ /* auxiliary mark (for internal use) */ #define AUXMARK "\1" static void setpath (lua_State *L, const char *fieldname, const char *envname, const char *def) { const char *path = getenv(envname); if (path == NULL) /* no environment variable? */ lua_pushstring(L, def); /* use default */ else { /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */ path = luaL_gsub(L, path, LUA_PATHSEP LUA_PATHSEP, LUA_PATHSEP AUXMARK LUA_PATHSEP); luaL_gsub(L, path, AUXMARK, def); lua_remove(L, -2); } setprogdir(L); lua_setfield(L, -2, fieldname); } static const luaL_Reg pk_funcs[] = { {"loadlib", ll_loadlib}, {"seeall", ll_seeall}, {NULL, NULL} }; static const luaL_Reg ll_funcs[] = { {"module", ll_module}, {"require", ll_require}, {NULL, NULL} }; static const lua_CFunction loaders[] = {loader_preload, loader_Lua, loader_C, loader_Croot, NULL}; LUALIB_API int luaopen_package (lua_State *L) { int i; /* create new type _LOADLIB */ luaL_newmetatable(L, "_LOADLIB"); lua_pushcfunction(L, gctm); lua_setfield(L, -2, "__gc"); /* create `package' table */ luaL_register(L, LUA_LOADLIBNAME, pk_funcs); #if defined(LUA_COMPAT_LOADLIB) lua_getfield(L, -1, "loadlib"); lua_setfield(L, LUA_GLOBALSINDEX, "loadlib"); #endif lua_pushvalue(L, -1); lua_replace(L, LUA_ENVIRONINDEX); /* create `loaders' table */ lua_createtable(L, sizeof(loaders)/sizeof(loaders[0]) - 1, 0); /* fill it with pre-defined loaders */ for (i=0; loaders[i] != NULL; i++) { lua_pushcfunction(L, loaders[i]); lua_rawseti(L, -2, i+1); } lua_setfield(L, -2, "loaders"); /* put it in field `loaders' */ setpath(L, "path", LUA_PATH, LUA_PATH_DEFAULT); /* set field `path' */ setpath(L, "cpath", LUA_CPATH, LUA_CPATH_DEFAULT); /* set field `cpath' */ /* store config information */ lua_pushliteral(L, LUA_DIRSEP "\n" LUA_PATHSEP "\n" LUA_PATH_MARK "\n" LUA_EXECDIR "\n" LUA_IGMARK); lua_setfield(L, -2, "config"); /* set field `loaded' */ luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 2); lua_setfield(L, -2, "loaded"); /* set field `preload' */ lua_newtable(L); lua_setfield(L, -2, "preload"); lua_pushvalue(L, LUA_GLOBALSINDEX); luaL_register(L, NULL, ll_funcs); /* open lib into global table */ lua_pop(L, 1); return 1; /* return 'package' table */ } genometools-1.5.1/src/external/lua-5.1.5/src/lobject.c000066400000000000000000000125721211610345200222660ustar00rootroot00000000000000/* ** $Id: lobject.c,v 2.22.1.1 2007/12/27 13:02:25 roberto Exp $ ** Some generic functions over Lua objects ** See Copyright Notice in lua.h */ #include #include #include #include #include #define lobject_c #define LUA_CORE #include "lua.h" #include "ldo.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" #include "lvm.h" const TValue luaO_nilobject_ = {{NULL}, LUA_TNIL}; /* ** converts an integer to a "floating point byte", represented as ** (eeeeexxx), where the real value is (1xxx) * 2^(eeeee - 1) if ** eeeee != 0 and (xxx) otherwise. */ int luaO_int2fb (unsigned int x) { int e = 0; /* expoent */ while (x >= 16) { x = (x+1) >> 1; e++; } if (x < 8) return x; else return ((e+1) << 3) | (cast_int(x) - 8); } /* converts back */ int luaO_fb2int (int x) { int e = (x >> 3) & 31; if (e == 0) return x; else return ((x & 7)+8) << (e - 1); } int luaO_log2 (unsigned int x) { static const lu_byte log_2[256] = { 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 }; int l = -1; while (x >= 256) { l += 8; x >>= 8; } return l + log_2[x]; } int luaO_rawequalObj (const TValue *t1, const TValue *t2) { if (ttype(t1) != ttype(t2)) return 0; else switch (ttype(t1)) { case LUA_TNIL: return 1; case LUA_TNUMBER: return luai_numeq(nvalue(t1), nvalue(t2)); case LUA_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* boolean true must be 1 !! */ case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); default: lua_assert(iscollectable(t1)); return gcvalue(t1) == gcvalue(t2); } } int luaO_str2d (const char *s, lua_Number *result) { char *endptr; *result = lua_str2number(s, &endptr); if (endptr == s) return 0; /* conversion failed */ if (*endptr == 'x' || *endptr == 'X') /* maybe an hexadecimal constant? */ *result = cast_num(strtoul(s, &endptr, 16)); if (*endptr == '\0') return 1; /* most common case */ while (isspace(cast(unsigned char, *endptr))) endptr++; if (*endptr != '\0') return 0; /* invalid trailing characters? */ return 1; } static void pushstr (lua_State *L, const char *str) { setsvalue2s(L, L->top, luaS_new(L, str)); incr_top(L); } /* this function handles only `%d', `%c', %f, %p, and `%s' formats */ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) { int n = 1; pushstr(L, ""); for (;;) { const char *e = strchr(fmt, '%'); if (e == NULL) break; setsvalue2s(L, L->top, luaS_newlstr(L, fmt, e-fmt)); incr_top(L); switch (*(e+1)) { case 's': { const char *s = va_arg(argp, char *); if (s == NULL) s = "(null)"; pushstr(L, s); break; } case 'c': { char buff[2]; buff[0] = cast(char, va_arg(argp, int)); buff[1] = '\0'; pushstr(L, buff); break; } case 'd': { setnvalue(L->top, cast_num(va_arg(argp, int))); incr_top(L); break; } case 'f': { setnvalue(L->top, cast_num(va_arg(argp, l_uacNumber))); incr_top(L); break; } case 'p': { char buff[4*sizeof(void *) + 8]; /* should be enough space for a `%p' */ sprintf(buff, "%p", va_arg(argp, void *)); pushstr(L, buff); break; } case '%': { pushstr(L, "%"); break; } default: { char buff[3]; buff[0] = '%'; buff[1] = *(e+1); buff[2] = '\0'; pushstr(L, buff); break; } } n += 2; fmt = e+2; } pushstr(L, fmt); luaV_concat(L, n+1, cast_int(L->top - L->base) - 1); L->top -= n; return svalue(L->top - 1); } const char *luaO_pushfstring (lua_State *L, const char *fmt, ...) { const char *msg; va_list argp; va_start(argp, fmt); msg = luaO_pushvfstring(L, fmt, argp); va_end(argp); return msg; } void luaO_chunkid (char *out, const char *source, size_t bufflen) { if (*source == '=') { strncpy(out, source+1, bufflen); /* remove first char */ out[bufflen-1] = '\0'; /* ensures null termination */ } else { /* out = "source", or "...source" */ if (*source == '@') { size_t l; source++; /* skip the `@' */ bufflen -= sizeof(" '...' "); l = strlen(source); strcpy(out, ""); if (l > bufflen) { source += (l-bufflen); /* get last part of file name */ strcat(out, "..."); } strcat(out, source); } else { /* out = [string "string"] */ size_t len = strcspn(source, "\n\r"); /* stop at first newline */ bufflen -= sizeof(" [string \"...\"] "); if (len > bufflen) len = bufflen; strcpy(out, "[string \""); if (source[len] != '\0') { /* must truncate? */ strncat(out, source, len); strcat(out, "..."); } else strcat(out, source); strcat(out, "\"]"); } } } genometools-1.5.1/src/external/lua-5.1.5/src/lobject.h000066400000000000000000000204661211610345200222740ustar00rootroot00000000000000/* ** $Id: lobject.h,v 2.20.1.2 2008/08/06 13:29:48 roberto Exp $ ** Type definitions for Lua objects ** See Copyright Notice in lua.h */ #ifndef lobject_h #define lobject_h #include #include "llimits.h" #include "lua.h" /* tags for values visible from Lua */ #define LAST_TAG LUA_TTHREAD #define NUM_TAGS (LAST_TAG+1) /* ** Extra tags for non-values */ #define LUA_TPROTO (LAST_TAG+1) #define LUA_TUPVAL (LAST_TAG+2) #define LUA_TDEADKEY (LAST_TAG+3) /* ** Union of all collectable objects */ typedef union GCObject GCObject; /* ** Common Header for all collectable objects (in macro form, to be ** included in other objects) */ #define CommonHeader GCObject *next; lu_byte tt; lu_byte marked /* ** Common header in struct form */ typedef struct GCheader { CommonHeader; } GCheader; /* ** Union of all Lua values */ typedef union { GCObject *gc; void *p; lua_Number n; int b; } Value; /* ** Tagged Values */ #define TValuefields Value value; int tt typedef struct lua_TValue { TValuefields; } TValue; /* Macros to test type */ #define ttisnil(o) (ttype(o) == LUA_TNIL) #define ttisnumber(o) (ttype(o) == LUA_TNUMBER) #define ttisstring(o) (ttype(o) == LUA_TSTRING) #define ttistable(o) (ttype(o) == LUA_TTABLE) #define ttisfunction(o) (ttype(o) == LUA_TFUNCTION) #define ttisboolean(o) (ttype(o) == LUA_TBOOLEAN) #define ttisuserdata(o) (ttype(o) == LUA_TUSERDATA) #define ttisthread(o) (ttype(o) == LUA_TTHREAD) #define ttislightuserdata(o) (ttype(o) == LUA_TLIGHTUSERDATA) /* Macros to access values */ #define ttype(o) ((o)->tt) #define gcvalue(o) check_exp(iscollectable(o), (o)->value.gc) #define pvalue(o) check_exp(ttislightuserdata(o), (o)->value.p) #define nvalue(o) check_exp(ttisnumber(o), (o)->value.n) #define rawtsvalue(o) check_exp(ttisstring(o), &(o)->value.gc->ts) #define tsvalue(o) (&rawtsvalue(o)->tsv) #define rawuvalue(o) check_exp(ttisuserdata(o), &(o)->value.gc->u) #define uvalue(o) (&rawuvalue(o)->uv) #define clvalue(o) check_exp(ttisfunction(o), &(o)->value.gc->cl) #define hvalue(o) check_exp(ttistable(o), &(o)->value.gc->h) #define bvalue(o) check_exp(ttisboolean(o), (o)->value.b) #define thvalue(o) check_exp(ttisthread(o), &(o)->value.gc->th) #define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0)) /* ** for internal debug only */ #define checkconsistency(obj) \ lua_assert(!iscollectable(obj) || (ttype(obj) == (obj)->value.gc->gch.tt)) #define checkliveness(g,obj) \ lua_assert(!iscollectable(obj) || \ ((ttype(obj) == (obj)->value.gc->gch.tt) && !isdead(g, (obj)->value.gc))) /* Macros to set values */ #define setnilvalue(obj) ((obj)->tt=LUA_TNIL) #define setnvalue(obj,x) \ { TValue *i_o=(obj); i_o->value.n=(x); i_o->tt=LUA_TNUMBER; } #define setpvalue(obj,x) \ { TValue *i_o=(obj); i_o->value.p=(x); i_o->tt=LUA_TLIGHTUSERDATA; } #define setbvalue(obj,x) \ { TValue *i_o=(obj); i_o->value.b=(x); i_o->tt=LUA_TBOOLEAN; } #define setsvalue(L,obj,x) \ { TValue *i_o=(obj); \ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TSTRING; \ checkliveness(G(L),i_o); } #define setuvalue(L,obj,x) \ { TValue *i_o=(obj); \ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TUSERDATA; \ checkliveness(G(L),i_o); } #define setthvalue(L,obj,x) \ { TValue *i_o=(obj); \ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTHREAD; \ checkliveness(G(L),i_o); } #define setclvalue(L,obj,x) \ { TValue *i_o=(obj); \ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TFUNCTION; \ checkliveness(G(L),i_o); } #define sethvalue(L,obj,x) \ { TValue *i_o=(obj); \ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTABLE; \ checkliveness(G(L),i_o); } #define setptvalue(L,obj,x) \ { TValue *i_o=(obj); \ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TPROTO; \ checkliveness(G(L),i_o); } #define setobj(L,obj1,obj2) \ { const TValue *o2=(obj2); TValue *o1=(obj1); \ o1->value = o2->value; o1->tt=o2->tt; \ checkliveness(G(L),o1); } /* ** different types of sets, according to destination */ /* from stack to (same) stack */ #define setobjs2s setobj /* to stack (not from same stack) */ #define setobj2s setobj #define setsvalue2s setsvalue #define sethvalue2s sethvalue #define setptvalue2s setptvalue /* from table to same table */ #define setobjt2t setobj /* to table */ #define setobj2t setobj /* to new object */ #define setobj2n setobj #define setsvalue2n setsvalue #define setttype(obj, tt) (ttype(obj) = (tt)) #define iscollectable(o) (ttype(o) >= LUA_TSTRING) typedef TValue *StkId; /* index to stack elements */ /* ** String headers for string table */ typedef union TString { L_Umaxalign dummy; /* ensures maximum alignment for strings */ struct { CommonHeader; lu_byte reserved; unsigned int hash; size_t len; } tsv; } TString; #define getstr(ts) cast(const char *, (ts) + 1) #define svalue(o) getstr(rawtsvalue(o)) typedef union Udata { L_Umaxalign dummy; /* ensures maximum alignment for `local' udata */ struct { CommonHeader; struct Table *metatable; struct Table *env; size_t len; } uv; } Udata; /* ** Function Prototypes */ typedef struct Proto { CommonHeader; TValue *k; /* constants used by the function */ Instruction *code; struct Proto **p; /* functions defined inside the function */ int *lineinfo; /* map from opcodes to source lines */ struct LocVar *locvars; /* information about local variables */ TString **upvalues; /* upvalue names */ TString *source; int sizeupvalues; int sizek; /* size of `k' */ int sizecode; int sizelineinfo; int sizep; /* size of `p' */ int sizelocvars; int linedefined; int lastlinedefined; GCObject *gclist; lu_byte nups; /* number of upvalues */ lu_byte numparams; lu_byte is_vararg; lu_byte maxstacksize; } Proto; /* masks for new-style vararg */ #define VARARG_HASARG 1 #define VARARG_ISVARARG 2 #define VARARG_NEEDSARG 4 typedef struct LocVar { TString *varname; int startpc; /* first point where variable is active */ int endpc; /* first point where variable is dead */ } LocVar; /* ** Upvalues */ typedef struct UpVal { CommonHeader; TValue *v; /* points to stack or to its own value */ union { TValue value; /* the value (when closed) */ struct { /* double linked list (when open) */ struct UpVal *prev; struct UpVal *next; } l; } u; } UpVal; /* ** Closures */ #define ClosureHeader \ CommonHeader; lu_byte isC; lu_byte nupvalues; GCObject *gclist; \ struct Table *env typedef struct CClosure { ClosureHeader; lua_CFunction f; TValue upvalue[1]; } CClosure; typedef struct LClosure { ClosureHeader; struct Proto *p; UpVal *upvals[1]; } LClosure; typedef union Closure { CClosure c; LClosure l; } Closure; #define iscfunction(o) (ttype(o) == LUA_TFUNCTION && clvalue(o)->c.isC) #define isLfunction(o) (ttype(o) == LUA_TFUNCTION && !clvalue(o)->c.isC) /* ** Tables */ typedef union TKey { struct { TValuefields; struct Node *next; /* for chaining */ } nk; TValue tvk; } TKey; typedef struct Node { TValue i_val; TKey i_key; } Node; typedef struct Table { CommonHeader; lu_byte flags; /* 1<

lsizenode)) #define luaO_nilobject (&luaO_nilobject_) LUAI_DATA const TValue luaO_nilobject_; #define ceillog2(x) (luaO_log2((x)-1) + 1) LUAI_FUNC int luaO_log2 (unsigned int x); LUAI_FUNC int luaO_int2fb (unsigned int x); LUAI_FUNC int luaO_fb2int (int x); LUAI_FUNC int luaO_rawequalObj (const TValue *t1, const TValue *t2); LUAI_FUNC int luaO_str2d (const char *s, lua_Number *result); LUAI_FUNC const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp); LUAI_FUNC const char *luaO_pushfstring (lua_State *L, const char *fmt, ...); LUAI_FUNC void luaO_chunkid (char *out, const char *source, size_t len); #endif genometools-1.5.1/src/external/lua-5.1.5/src/lopcodes.c000066400000000000000000000055041211610345200224510ustar00rootroot00000000000000/* ** $Id: lopcodes.c,v 1.37.1.1 2007/12/27 13:02:25 roberto Exp $ ** See Copyright Notice in lua.h */ #define lopcodes_c #define LUA_CORE #include "lopcodes.h" /* ORDER OP */ const char *const luaP_opnames[NUM_OPCODES+1] = { "MOVE", "LOADK", "LOADBOOL", "LOADNIL", "GETUPVAL", "GETGLOBAL", "GETTABLE", "SETGLOBAL", "SETUPVAL", "SETTABLE", "NEWTABLE", "SELF", "ADD", "SUB", "MUL", "DIV", "MOD", "POW", "UNM", "NOT", "LEN", "CONCAT", "JMP", "EQ", "LT", "LE", "TEST", "TESTSET", "CALL", "TAILCALL", "RETURN", "FORLOOP", "FORPREP", "TFORLOOP", "SETLIST", "CLOSE", "CLOSURE", "VARARG", NULL }; #define opmode(t,a,b,c,m) (((t)<<7) | ((a)<<6) | ((b)<<4) | ((c)<<2) | (m)) const lu_byte luaP_opmodes[NUM_OPCODES] = { /* T A B C mode opcode */ opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_MOVE */ ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_LOADK */ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_LOADBOOL */ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LOADNIL */ ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_GETUPVAL */ ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_GETGLOBAL */ ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_GETTABLE */ ,opmode(0, 0, OpArgK, OpArgN, iABx) /* OP_SETGLOBAL */ ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_SETUPVAL */ ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABLE */ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */ ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_ADD */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SUB */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MUL */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_DIV */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MOD */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_POW */ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LEN */ ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */ ,opmode(0, 0, OpArgR, OpArgN, iAsBx) /* OP_JMP */ ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_EQ */ ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LT */ ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LE */ ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TEST */ ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_TAILCALL */ ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_RETURN */ ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORLOOP */ ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORPREP */ ,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TFORLOOP */ ,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */ ,opmode(0, 0, OpArgN, OpArgN, iABC) /* OP_CLOSE */ ,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */ ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */ }; genometools-1.5.1/src/external/lua-5.1.5/src/lopcodes.h000066400000000000000000000176261211610345200224660ustar00rootroot00000000000000/* ** $Id: lopcodes.h,v 1.125.1.1 2007/12/27 13:02:25 roberto Exp $ ** Opcodes for Lua virtual machine ** See Copyright Notice in lua.h */ #ifndef lopcodes_h #define lopcodes_h #include "llimits.h" /*=========================================================================== We assume that instructions are unsigned numbers. All instructions have an opcode in the first 6 bits. Instructions can have the following fields: `A' : 8 bits `B' : 9 bits `C' : 9 bits `Bx' : 18 bits (`B' and `C' together) `sBx' : signed Bx A signed argument is represented in excess K; that is, the number value is the unsigned value minus K. K is exactly the maximum value for that argument (so that -max is represented by 0, and +max is represented by 2*max), which is half the maximum for the corresponding unsigned argument. ===========================================================================*/ enum OpMode {iABC, iABx, iAsBx}; /* basic instruction format */ /* ** size and position of opcode arguments. */ #define SIZE_C 9 #define SIZE_B 9 #define SIZE_Bx (SIZE_C + SIZE_B) #define SIZE_A 8 #define SIZE_OP 6 #define POS_OP 0 #define POS_A (POS_OP + SIZE_OP) #define POS_C (POS_A + SIZE_A) #define POS_B (POS_C + SIZE_C) #define POS_Bx POS_C /* ** limits for opcode arguments. ** we use (signed) int to manipulate most arguments, ** so they must fit in LUAI_BITSINT-1 bits (-1 for sign) */ #if SIZE_Bx < LUAI_BITSINT-1 #define MAXARG_Bx ((1<>1) /* `sBx' is signed */ #else #define MAXARG_Bx MAX_INT #define MAXARG_sBx MAX_INT #endif #define MAXARG_A ((1<>POS_OP) & MASK1(SIZE_OP,0))) #define SET_OPCODE(i,o) ((i) = (((i)&MASK0(SIZE_OP,POS_OP)) | \ ((cast(Instruction, o)<>POS_A) & MASK1(SIZE_A,0))) #define SETARG_A(i,u) ((i) = (((i)&MASK0(SIZE_A,POS_A)) | \ ((cast(Instruction, u)<>POS_B) & MASK1(SIZE_B,0))) #define SETARG_B(i,b) ((i) = (((i)&MASK0(SIZE_B,POS_B)) | \ ((cast(Instruction, b)<>POS_C) & MASK1(SIZE_C,0))) #define SETARG_C(i,b) ((i) = (((i)&MASK0(SIZE_C,POS_C)) | \ ((cast(Instruction, b)<>POS_Bx) & MASK1(SIZE_Bx,0))) #define SETARG_Bx(i,b) ((i) = (((i)&MASK0(SIZE_Bx,POS_Bx)) | \ ((cast(Instruction, b)< C) then pc++ */ OP_TESTSET,/* A B C if (R(B) <=> C) then R(A) := R(B) else pc++ */ OP_CALL,/* A B C R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) */ OP_TAILCALL,/* A B C return R(A)(R(A+1), ... ,R(A+B-1)) */ OP_RETURN,/* A B return R(A), ... ,R(A+B-2) (see note) */ OP_FORLOOP,/* A sBx R(A)+=R(A+2); if R(A) =) R(A)*/ OP_CLOSURE,/* A Bx R(A) := closure(KPROTO[Bx], R(A), ... ,R(A+n)) */ OP_VARARG/* A B R(A), R(A+1), ..., R(A+B-1) = vararg */ } OpCode; #define NUM_OPCODES (cast(int, OP_VARARG) + 1) /*=========================================================================== Notes: (*) In OP_CALL, if (B == 0) then B = top. C is the number of returns - 1, and can be 0: OP_CALL then sets `top' to last_result+1, so next open instruction (OP_CALL, OP_RETURN, OP_SETLIST) may use `top'. (*) In OP_VARARG, if (B == 0) then use actual number of varargs and set top (like in OP_CALL with C == 0). (*) In OP_RETURN, if (B == 0) then return up to `top' (*) In OP_SETLIST, if (B == 0) then B = `top'; if (C == 0) then next `instruction' is real C (*) For comparisons, A specifies what condition the test should accept (true or false). (*) All `skips' (pc++) assume that next instruction is a jump ===========================================================================*/ /* ** masks for instruction properties. The format is: ** bits 0-1: op mode ** bits 2-3: C arg mode ** bits 4-5: B arg mode ** bit 6: instruction set register A ** bit 7: operator is a test */ enum OpArgMask { OpArgN, /* argument is not used */ OpArgU, /* argument is used */ OpArgR, /* argument is a register or a jump offset */ OpArgK /* argument is a constant or register/constant */ }; LUAI_DATA const lu_byte luaP_opmodes[NUM_OPCODES]; #define getOpMode(m) (cast(enum OpMode, luaP_opmodes[m] & 3)) #define getBMode(m) (cast(enum OpArgMask, (luaP_opmodes[m] >> 4) & 3)) #define getCMode(m) (cast(enum OpArgMask, (luaP_opmodes[m] >> 2) & 3)) #define testAMode(m) (luaP_opmodes[m] & (1 << 6)) #define testTMode(m) (luaP_opmodes[m] & (1 << 7)) LUAI_DATA const char *const luaP_opnames[NUM_OPCODES+1]; /* opcode names */ /* number of list items to accumulate before a SETLIST instruction */ #define LFIELDS_PER_FLUSH 50 #endif genometools-1.5.1/src/external/lua-5.1.5/src/loslib.c000066400000000000000000000135501211610345200221250ustar00rootroot00000000000000/* ** $Id: loslib.c,v 1.19.1.3 2008/01/18 16:38:18 roberto Exp $ ** Standard Operating System library ** See Copyright Notice in lua.h */ #include #include #include #include #include #define loslib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" static int os_pushresult (lua_State *L, int i, const char *filename) { int en = errno; /* calls to Lua API may change this value */ if (i) { lua_pushboolean(L, 1); return 1; } else { lua_pushnil(L); lua_pushfstring(L, "%s: %s", filename, strerror(en)); lua_pushinteger(L, en); return 3; } } static int os_execute (lua_State *L) { lua_pushinteger(L, system(luaL_optstring(L, 1, NULL))); return 1; } static int os_remove (lua_State *L) { const char *filename = luaL_checkstring(L, 1); return os_pushresult(L, remove(filename) == 0, filename); } static int os_rename (lua_State *L) { const char *fromname = luaL_checkstring(L, 1); const char *toname = luaL_checkstring(L, 2); return os_pushresult(L, rename(fromname, toname) == 0, fromname); } static int os_tmpname (lua_State *L) { char buff[LUA_TMPNAMBUFSIZE]; int err; lua_tmpnam(buff, err); if (err) return luaL_error(L, "unable to generate a unique filename"); lua_pushstring(L, buff); return 1; } static int os_getenv (lua_State *L) { lua_pushstring(L, getenv(luaL_checkstring(L, 1))); /* if NULL push nil */ return 1; } static int os_clock (lua_State *L) { lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC); return 1; } /* ** {====================================================== ** Time/Date operations ** { year=%Y, month=%m, day=%d, hour=%H, min=%M, sec=%S, ** wday=%w+1, yday=%j, isdst=? } ** ======================================================= */ static void setfield (lua_State *L, const char *key, int value) { lua_pushinteger(L, value); lua_setfield(L, -2, key); } static void setboolfield (lua_State *L, const char *key, int value) { if (value < 0) /* undefined? */ return; /* does not set field */ lua_pushboolean(L, value); lua_setfield(L, -2, key); } static int getboolfield (lua_State *L, const char *key) { int res; lua_getfield(L, -1, key); res = lua_isnil(L, -1) ? -1 : lua_toboolean(L, -1); lua_pop(L, 1); return res; } static int getfield (lua_State *L, const char *key, int d) { int res; lua_getfield(L, -1, key); if (lua_isnumber(L, -1)) res = (int)lua_tointeger(L, -1); else { if (d < 0) return luaL_error(L, "field " LUA_QS " missing in date table", key); res = d; } lua_pop(L, 1); return res; } static int os_date (lua_State *L) { const char *s = luaL_optstring(L, 1, "%c"); time_t t = luaL_opt(L, (time_t)luaL_checknumber, 2, time(NULL)); struct tm *stm; if (*s == '!') { /* UTC? */ stm = gmtime(&t); s++; /* skip `!' */ } else stm = localtime(&t); if (stm == NULL) /* invalid date? */ lua_pushnil(L); else if (strcmp(s, "*t") == 0) { lua_createtable(L, 0, 9); /* 9 = number of fields */ setfield(L, "sec", stm->tm_sec); setfield(L, "min", stm->tm_min); setfield(L, "hour", stm->tm_hour); setfield(L, "day", stm->tm_mday); setfield(L, "month", stm->tm_mon+1); setfield(L, "year", stm->tm_year+1900); setfield(L, "wday", stm->tm_wday+1); setfield(L, "yday", stm->tm_yday+1); setboolfield(L, "isdst", stm->tm_isdst); } else { char cc[3]; luaL_Buffer b; cc[0] = '%'; cc[2] = '\0'; luaL_buffinit(L, &b); for (; *s; s++) { if (*s != '%' || *(s + 1) == '\0') /* no conversion specifier? */ luaL_addchar(&b, *s); else { size_t reslen; char buff[200]; /* should be big enough for any conversion result */ cc[1] = *(++s); reslen = strftime(buff, sizeof(buff), cc, stm); luaL_addlstring(&b, buff, reslen); } } luaL_pushresult(&b); } return 1; } static int os_time (lua_State *L) { time_t t; if (lua_isnoneornil(L, 1)) /* called without args? */ t = time(NULL); /* get current time */ else { struct tm ts; luaL_checktype(L, 1, LUA_TTABLE); lua_settop(L, 1); /* make sure table is at the top */ ts.tm_sec = getfield(L, "sec", 0); ts.tm_min = getfield(L, "min", 0); ts.tm_hour = getfield(L, "hour", 12); ts.tm_mday = getfield(L, "day", -1); ts.tm_mon = getfield(L, "month", -1) - 1; ts.tm_year = getfield(L, "year", -1) - 1900; ts.tm_isdst = getboolfield(L, "isdst"); t = mktime(&ts); } if (t == (time_t)(-1)) lua_pushnil(L); else lua_pushnumber(L, (lua_Number)t); return 1; } static int os_difftime (lua_State *L) { lua_pushnumber(L, difftime((time_t)(luaL_checknumber(L, 1)), (time_t)(luaL_optnumber(L, 2, 0)))); return 1; } /* }====================================================== */ static int os_setlocale (lua_State *L) { static const int cat[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME}; static const char *const catnames[] = {"all", "collate", "ctype", "monetary", "numeric", "time", NULL}; const char *l = luaL_optstring(L, 1, NULL); int op = luaL_checkoption(L, 2, "all", catnames); lua_pushstring(L, setlocale(cat[op], l)); return 1; } static int os_exit (lua_State *L) { exit(luaL_optint(L, 1, EXIT_SUCCESS)); } static const luaL_Reg syslib[] = { {"clock", os_clock}, {"date", os_date}, {"difftime", os_difftime}, {"execute", os_execute}, {"exit", os_exit}, {"getenv", os_getenv}, {"remove", os_remove}, {"rename", os_rename}, {"setlocale", os_setlocale}, {"time", os_time}, {"tmpname", os_tmpname}, {NULL, NULL} }; /* }====================================================== */ LUALIB_API int luaopen_os (lua_State *L) { luaL_register(L, LUA_OSLIBNAME, syslib); return 1; } genometools-1.5.1/src/external/lua-5.1.5/src/lparser.c000066400000000000000000001075301211610345200223130ustar00rootroot00000000000000/* ** $Id: lparser.c,v 2.42.1.4 2011/10/21 19:31:42 roberto Exp $ ** Lua Parser ** See Copyright Notice in lua.h */ #include #define lparser_c #define LUA_CORE #include "lua.h" #include "lcode.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "llex.h" #include "lmem.h" #include "lobject.h" #include "lopcodes.h" #include "lparser.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #define hasmultret(k) ((k) == VCALL || (k) == VVARARG) #define getlocvar(fs, i) ((fs)->f->locvars[(fs)->actvar[i]]) #define luaY_checklimit(fs,v,l,m) if ((v)>(l)) errorlimit(fs,l,m) /* ** nodes for block list (list of active blocks) */ typedef struct BlockCnt { struct BlockCnt *previous; /* chain */ int breaklist; /* list of jumps out of this loop */ lu_byte nactvar; /* # active locals outside the breakable structure */ lu_byte upval; /* true if some variable in the block is an upvalue */ lu_byte isbreakable; /* true if `block' is a loop */ } BlockCnt; /* ** prototypes for recursive non-terminal functions */ static void chunk (LexState *ls); static void expr (LexState *ls, expdesc *v); static void anchor_token (LexState *ls) { if (ls->t.token == TK_NAME || ls->t.token == TK_STRING) { TString *ts = ls->t.seminfo.ts; luaX_newstring(ls, getstr(ts), ts->tsv.len); } } static void error_expected (LexState *ls, int token) { luaX_syntaxerror(ls, luaO_pushfstring(ls->L, LUA_QS " expected", luaX_token2str(ls, token))); } static void errorlimit (FuncState *fs, int limit, const char *what) { const char *msg = (fs->f->linedefined == 0) ? luaO_pushfstring(fs->L, "main function has more than %d %s", limit, what) : luaO_pushfstring(fs->L, "function at line %d has more than %d %s", fs->f->linedefined, limit, what); luaX_lexerror(fs->ls, msg, 0); } static int testnext (LexState *ls, int c) { if (ls->t.token == c) { luaX_next(ls); return 1; } else return 0; } static void check (LexState *ls, int c) { if (ls->t.token != c) error_expected(ls, c); } static void checknext (LexState *ls, int c) { check(ls, c); luaX_next(ls); } #define check_condition(ls,c,msg) { if (!(c)) luaX_syntaxerror(ls, msg); } static void check_match (LexState *ls, int what, int who, int where) { if (!testnext(ls, what)) { if (where == ls->linenumber) error_expected(ls, what); else { luaX_syntaxerror(ls, luaO_pushfstring(ls->L, LUA_QS " expected (to close " LUA_QS " at line %d)", luaX_token2str(ls, what), luaX_token2str(ls, who), where)); } } } static TString *str_checkname (LexState *ls) { TString *ts; check(ls, TK_NAME); ts = ls->t.seminfo.ts; luaX_next(ls); return ts; } static void init_exp (expdesc *e, expkind k, int i) { e->f = e->t = NO_JUMP; e->k = k; e->u.s.info = i; } static void codestring (LexState *ls, expdesc *e, TString *s) { init_exp(e, VK, luaK_stringK(ls->fs, s)); } static void checkname(LexState *ls, expdesc *e) { codestring(ls, e, str_checkname(ls)); } static int registerlocalvar (LexState *ls, TString *varname) { FuncState *fs = ls->fs; Proto *f = fs->f; int oldsize = f->sizelocvars; luaM_growvector(ls->L, f->locvars, fs->nlocvars, f->sizelocvars, LocVar, SHRT_MAX, "too many local variables"); while (oldsize < f->sizelocvars) f->locvars[oldsize++].varname = NULL; f->locvars[fs->nlocvars].varname = varname; luaC_objbarrier(ls->L, f, varname); return fs->nlocvars++; } #define new_localvarliteral(ls,v,n) \ new_localvar(ls, luaX_newstring(ls, "" v, (sizeof(v)/sizeof(char))-1), n) static void new_localvar (LexState *ls, TString *name, int n) { FuncState *fs = ls->fs; luaY_checklimit(fs, fs->nactvar+n+1, LUAI_MAXVARS, "local variables"); fs->actvar[fs->nactvar+n] = cast(unsigned short, registerlocalvar(ls, name)); } static void adjustlocalvars (LexState *ls, int nvars) { FuncState *fs = ls->fs; fs->nactvar = cast_byte(fs->nactvar + nvars); for (; nvars; nvars--) { getlocvar(fs, fs->nactvar - nvars).startpc = fs->pc; } } static void removevars (LexState *ls, int tolevel) { FuncState *fs = ls->fs; while (fs->nactvar > tolevel) getlocvar(fs, --fs->nactvar).endpc = fs->pc; } static int indexupvalue (FuncState *fs, TString *name, expdesc *v) { int i; Proto *f = fs->f; int oldsize = f->sizeupvalues; for (i=0; inups; i++) { if (fs->upvalues[i].k == v->k && fs->upvalues[i].info == v->u.s.info) { lua_assert(f->upvalues[i] == name); return i; } } /* new one */ luaY_checklimit(fs, f->nups + 1, LUAI_MAXUPVALUES, "upvalues"); luaM_growvector(fs->L, f->upvalues, f->nups, f->sizeupvalues, TString *, MAX_INT, ""); while (oldsize < f->sizeupvalues) f->upvalues[oldsize++] = NULL; f->upvalues[f->nups] = name; luaC_objbarrier(fs->L, f, name); lua_assert(v->k == VLOCAL || v->k == VUPVAL); fs->upvalues[f->nups].k = cast_byte(v->k); fs->upvalues[f->nups].info = cast_byte(v->u.s.info); return f->nups++; } static int searchvar (FuncState *fs, TString *n) { int i; for (i=fs->nactvar-1; i >= 0; i--) { if (n == getlocvar(fs, i).varname) return i; } return -1; /* not found */ } static void markupval (FuncState *fs, int level) { BlockCnt *bl = fs->bl; while (bl && bl->nactvar > level) bl = bl->previous; if (bl) bl->upval = 1; } static int singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) { if (fs == NULL) { /* no more levels? */ init_exp(var, VGLOBAL, NO_REG); /* default is global variable */ return VGLOBAL; } else { int v = searchvar(fs, n); /* look up at current level */ if (v >= 0) { init_exp(var, VLOCAL, v); if (!base) markupval(fs, v); /* local will be used as an upval */ return VLOCAL; } else { /* not found at current level; try upper one */ if (singlevaraux(fs->prev, n, var, 0) == VGLOBAL) return VGLOBAL; var->u.s.info = indexupvalue(fs, n, var); /* else was LOCAL or UPVAL */ var->k = VUPVAL; /* upvalue in this level */ return VUPVAL; } } } static void singlevar (LexState *ls, expdesc *var) { TString *varname = str_checkname(ls); FuncState *fs = ls->fs; if (singlevaraux(fs, varname, var, 1) == VGLOBAL) var->u.s.info = luaK_stringK(fs, varname); /* info points to global name */ } static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *e) { FuncState *fs = ls->fs; int extra = nvars - nexps; if (hasmultret(e->k)) { extra++; /* includes call itself */ if (extra < 0) extra = 0; luaK_setreturns(fs, e, extra); /* last exp. provides the difference */ if (extra > 1) luaK_reserveregs(fs, extra-1); } else { if (e->k != VVOID) luaK_exp2nextreg(fs, e); /* close last expression */ if (extra > 0) { int reg = fs->freereg; luaK_reserveregs(fs, extra); luaK_nil(fs, reg, extra); } } } static void enterlevel (LexState *ls) { if (++ls->L->nCcalls > LUAI_MAXCCALLS) luaX_lexerror(ls, "chunk has too many syntax levels", 0); } #define leavelevel(ls) ((ls)->L->nCcalls--) static void enterblock (FuncState *fs, BlockCnt *bl, lu_byte isbreakable) { bl->breaklist = NO_JUMP; bl->isbreakable = isbreakable; bl->nactvar = fs->nactvar; bl->upval = 0; bl->previous = fs->bl; fs->bl = bl; lua_assert(fs->freereg == fs->nactvar); } static void leaveblock (FuncState *fs) { BlockCnt *bl = fs->bl; fs->bl = bl->previous; removevars(fs->ls, bl->nactvar); if (bl->upval) luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0); /* a block either controls scope or breaks (never both) */ lua_assert(!bl->isbreakable || !bl->upval); lua_assert(bl->nactvar == fs->nactvar); fs->freereg = fs->nactvar; /* free registers */ luaK_patchtohere(fs, bl->breaklist); } static void pushclosure (LexState *ls, FuncState *func, expdesc *v) { FuncState *fs = ls->fs; Proto *f = fs->f; int oldsize = f->sizep; int i; luaM_growvector(ls->L, f->p, fs->np, f->sizep, Proto *, MAXARG_Bx, "constant table overflow"); while (oldsize < f->sizep) f->p[oldsize++] = NULL; f->p[fs->np++] = func->f; luaC_objbarrier(ls->L, f, func->f); init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np-1)); for (i=0; if->nups; i++) { OpCode o = (func->upvalues[i].k == VLOCAL) ? OP_MOVE : OP_GETUPVAL; luaK_codeABC(fs, o, 0, func->upvalues[i].info, 0); } } static void open_func (LexState *ls, FuncState *fs) { lua_State *L = ls->L; Proto *f = luaF_newproto(L); fs->f = f; fs->prev = ls->fs; /* linked list of funcstates */ fs->ls = ls; fs->L = L; ls->fs = fs; fs->pc = 0; fs->lasttarget = -1; fs->jpc = NO_JUMP; fs->freereg = 0; fs->nk = 0; fs->np = 0; fs->nlocvars = 0; fs->nactvar = 0; fs->bl = NULL; f->source = ls->source; f->maxstacksize = 2; /* registers 0/1 are always valid */ fs->h = luaH_new(L, 0, 0); /* anchor table of constants and prototype (to avoid being collected) */ sethvalue2s(L, L->top, fs->h); incr_top(L); setptvalue2s(L, L->top, f); incr_top(L); } static void close_func (LexState *ls) { lua_State *L = ls->L; FuncState *fs = ls->fs; Proto *f = fs->f; removevars(ls, 0); luaK_ret(fs, 0, 0); /* final return */ luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction); f->sizecode = fs->pc; luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int); f->sizelineinfo = fs->pc; luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue); f->sizek = fs->nk; luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *); f->sizep = fs->np; luaM_reallocvector(L, f->locvars, f->sizelocvars, fs->nlocvars, LocVar); f->sizelocvars = fs->nlocvars; luaM_reallocvector(L, f->upvalues, f->sizeupvalues, f->nups, TString *); f->sizeupvalues = f->nups; lua_assert(luaG_checkcode(f)); lua_assert(fs->bl == NULL); ls->fs = fs->prev; /* last token read was anchored in defunct function; must reanchor it */ if (fs) anchor_token(ls); L->top -= 2; /* remove table and prototype from the stack */ } Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) { struct LexState lexstate; struct FuncState funcstate; lexstate.buff = buff; luaX_setinput(L, &lexstate, z, luaS_new(L, name)); open_func(&lexstate, &funcstate); funcstate.f->is_vararg = VARARG_ISVARARG; /* main func. is always vararg */ luaX_next(&lexstate); /* read first token */ chunk(&lexstate); check(&lexstate, TK_EOS); close_func(&lexstate); lua_assert(funcstate.prev == NULL); lua_assert(funcstate.f->nups == 0); lua_assert(lexstate.fs == NULL); return funcstate.f; } /*============================================================*/ /* GRAMMAR RULES */ /*============================================================*/ static void field (LexState *ls, expdesc *v) { /* field -> ['.' | ':'] NAME */ FuncState *fs = ls->fs; expdesc key; luaK_exp2anyreg(fs, v); luaX_next(ls); /* skip the dot or colon */ checkname(ls, &key); luaK_indexed(fs, v, &key); } static void yindex (LexState *ls, expdesc *v) { /* index -> '[' expr ']' */ luaX_next(ls); /* skip the '[' */ expr(ls, v); luaK_exp2val(ls->fs, v); checknext(ls, ']'); } /* ** {====================================================================== ** Rules for Constructors ** ======================================================================= */ struct ConsControl { expdesc v; /* last list item read */ expdesc *t; /* table descriptor */ int nh; /* total number of `record' elements */ int na; /* total number of array elements */ int tostore; /* number of array elements pending to be stored */ }; static void recfield (LexState *ls, struct ConsControl *cc) { /* recfield -> (NAME | `['exp1`]') = exp1 */ FuncState *fs = ls->fs; int reg = ls->fs->freereg; expdesc key, val; int rkkey; if (ls->t.token == TK_NAME) { luaY_checklimit(fs, cc->nh, MAX_INT, "items in a constructor"); checkname(ls, &key); } else /* ls->t.token == '[' */ yindex(ls, &key); cc->nh++; checknext(ls, '='); rkkey = luaK_exp2RK(fs, &key); expr(ls, &val); luaK_codeABC(fs, OP_SETTABLE, cc->t->u.s.info, rkkey, luaK_exp2RK(fs, &val)); fs->freereg = reg; /* free registers */ } static void closelistfield (FuncState *fs, struct ConsControl *cc) { if (cc->v.k == VVOID) return; /* there is no list item */ luaK_exp2nextreg(fs, &cc->v); cc->v.k = VVOID; if (cc->tostore == LFIELDS_PER_FLUSH) { luaK_setlist(fs, cc->t->u.s.info, cc->na, cc->tostore); /* flush */ cc->tostore = 0; /* no more items pending */ } } static void lastlistfield (FuncState *fs, struct ConsControl *cc) { if (cc->tostore == 0) return; if (hasmultret(cc->v.k)) { luaK_setmultret(fs, &cc->v); luaK_setlist(fs, cc->t->u.s.info, cc->na, LUA_MULTRET); cc->na--; /* do not count last expression (unknown number of elements) */ } else { if (cc->v.k != VVOID) luaK_exp2nextreg(fs, &cc->v); luaK_setlist(fs, cc->t->u.s.info, cc->na, cc->tostore); } } static void listfield (LexState *ls, struct ConsControl *cc) { expr(ls, &cc->v); luaY_checklimit(ls->fs, cc->na, MAX_INT, "items in a constructor"); cc->na++; cc->tostore++; } static void constructor (LexState *ls, expdesc *t) { /* constructor -> ?? */ FuncState *fs = ls->fs; int line = ls->linenumber; int pc = luaK_codeABC(fs, OP_NEWTABLE, 0, 0, 0); struct ConsControl cc; cc.na = cc.nh = cc.tostore = 0; cc.t = t; init_exp(t, VRELOCABLE, pc); init_exp(&cc.v, VVOID, 0); /* no value (yet) */ luaK_exp2nextreg(ls->fs, t); /* fix it at stack top (for gc) */ checknext(ls, '{'); do { lua_assert(cc.v.k == VVOID || cc.tostore > 0); if (ls->t.token == '}') break; closelistfield(fs, &cc); switch(ls->t.token) { case TK_NAME: { /* may be listfields or recfields */ luaX_lookahead(ls); if (ls->lookahead.token != '=') /* expression? */ listfield(ls, &cc); else recfield(ls, &cc); break; } case '[': { /* constructor_item -> recfield */ recfield(ls, &cc); break; } default: { /* constructor_part -> listfield */ listfield(ls, &cc); break; } } } while (testnext(ls, ',') || testnext(ls, ';')); check_match(ls, '}', '{', line); lastlistfield(fs, &cc); SETARG_B(fs->f->code[pc], luaO_int2fb(cc.na)); /* set initial array size */ SETARG_C(fs->f->code[pc], luaO_int2fb(cc.nh)); /* set initial table size */ } /* }====================================================================== */ static void parlist (LexState *ls) { /* parlist -> [ param { `,' param } ] */ FuncState *fs = ls->fs; Proto *f = fs->f; int nparams = 0; f->is_vararg = 0; if (ls->t.token != ')') { /* is `parlist' not empty? */ do { switch (ls->t.token) { case TK_NAME: { /* param -> NAME */ new_localvar(ls, str_checkname(ls), nparams++); break; } case TK_DOTS: { /* param -> `...' */ luaX_next(ls); #if defined(LUA_COMPAT_VARARG) /* use `arg' as default name */ new_localvarliteral(ls, "arg", nparams++); f->is_vararg = VARARG_HASARG | VARARG_NEEDSARG; #endif f->is_vararg |= VARARG_ISVARARG; break; } default: luaX_syntaxerror(ls, " or " LUA_QL("...") " expected"); } } while (!f->is_vararg && testnext(ls, ',')); } adjustlocalvars(ls, nparams); f->numparams = cast_byte(fs->nactvar - (f->is_vararg & VARARG_HASARG)); luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ } static void body (LexState *ls, expdesc *e, int needself, int line) { /* body -> `(' parlist `)' chunk END */ FuncState new_fs; open_func(ls, &new_fs); new_fs.f->linedefined = line; checknext(ls, '('); if (needself) { new_localvarliteral(ls, "self", 0); adjustlocalvars(ls, 1); } parlist(ls); checknext(ls, ')'); chunk(ls); new_fs.f->lastlinedefined = ls->linenumber; check_match(ls, TK_END, TK_FUNCTION, line); close_func(ls); pushclosure(ls, &new_fs, e); } static int explist1 (LexState *ls, expdesc *v) { /* explist1 -> expr { `,' expr } */ int n = 1; /* at least one expression */ expr(ls, v); while (testnext(ls, ',')) { luaK_exp2nextreg(ls->fs, v); expr(ls, v); n++; } return n; } static void funcargs (LexState *ls, expdesc *f) { FuncState *fs = ls->fs; expdesc args; int base, nparams; int line = ls->linenumber; switch (ls->t.token) { case '(': { /* funcargs -> `(' [ explist1 ] `)' */ if (line != ls->lastline) luaX_syntaxerror(ls,"ambiguous syntax (function call x new statement)"); luaX_next(ls); if (ls->t.token == ')') /* arg list is empty? */ args.k = VVOID; else { explist1(ls, &args); luaK_setmultret(fs, &args); } check_match(ls, ')', '(', line); break; } case '{': { /* funcargs -> constructor */ constructor(ls, &args); break; } case TK_STRING: { /* funcargs -> STRING */ codestring(ls, &args, ls->t.seminfo.ts); luaX_next(ls); /* must use `seminfo' before `next' */ break; } default: { luaX_syntaxerror(ls, "function arguments expected"); return; } } lua_assert(f->k == VNONRELOC); base = f->u.s.info; /* base register for call */ if (hasmultret(args.k)) nparams = LUA_MULTRET; /* open call */ else { if (args.k != VVOID) luaK_exp2nextreg(fs, &args); /* close last argument */ nparams = fs->freereg - (base+1); } init_exp(f, VCALL, luaK_codeABC(fs, OP_CALL, base, nparams+1, 2)); luaK_fixline(fs, line); fs->freereg = base+1; /* call remove function and arguments and leaves (unless changed) one result */ } /* ** {====================================================================== ** Expression parsing ** ======================================================================= */ static void prefixexp (LexState *ls, expdesc *v) { /* prefixexp -> NAME | '(' expr ')' */ switch (ls->t.token) { case '(': { int line = ls->linenumber; luaX_next(ls); expr(ls, v); check_match(ls, ')', '(', line); luaK_dischargevars(ls->fs, v); return; } case TK_NAME: { singlevar(ls, v); return; } default: { luaX_syntaxerror(ls, "unexpected symbol"); return; } } } static void primaryexp (LexState *ls, expdesc *v) { /* primaryexp -> prefixexp { `.' NAME | `[' exp `]' | `:' NAME funcargs | funcargs } */ FuncState *fs = ls->fs; prefixexp(ls, v); for (;;) { switch (ls->t.token) { case '.': { /* field */ field(ls, v); break; } case '[': { /* `[' exp1 `]' */ expdesc key; luaK_exp2anyreg(fs, v); yindex(ls, &key); luaK_indexed(fs, v, &key); break; } case ':': { /* `:' NAME funcargs */ expdesc key; luaX_next(ls); checkname(ls, &key); luaK_self(fs, v, &key); funcargs(ls, v); break; } case '(': case TK_STRING: case '{': { /* funcargs */ luaK_exp2nextreg(fs, v); funcargs(ls, v); break; } default: return; } } } static void simpleexp (LexState *ls, expdesc *v) { /* simpleexp -> NUMBER | STRING | NIL | true | false | ... | constructor | FUNCTION body | primaryexp */ switch (ls->t.token) { case TK_NUMBER: { init_exp(v, VKNUM, 0); v->u.nval = ls->t.seminfo.r; break; } case TK_STRING: { codestring(ls, v, ls->t.seminfo.ts); break; } case TK_NIL: { init_exp(v, VNIL, 0); break; } case TK_TRUE: { init_exp(v, VTRUE, 0); break; } case TK_FALSE: { init_exp(v, VFALSE, 0); break; } case TK_DOTS: { /* vararg */ FuncState *fs = ls->fs; check_condition(ls, fs->f->is_vararg, "cannot use " LUA_QL("...") " outside a vararg function"); fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */ init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); break; } case '{': { /* constructor */ constructor(ls, v); return; } case TK_FUNCTION: { luaX_next(ls); body(ls, v, 0, ls->linenumber); return; } default: { primaryexp(ls, v); return; } } luaX_next(ls); } static UnOpr getunopr (int op) { switch (op) { case TK_NOT: return OPR_NOT; case '-': return OPR_MINUS; case '#': return OPR_LEN; default: return OPR_NOUNOPR; } } static BinOpr getbinopr (int op) { switch (op) { case '+': return OPR_ADD; case '-': return OPR_SUB; case '*': return OPR_MUL; case '/': return OPR_DIV; case '%': return OPR_MOD; case '^': return OPR_POW; case TK_CONCAT: return OPR_CONCAT; case TK_NE: return OPR_NE; case TK_EQ: return OPR_EQ; case '<': return OPR_LT; case TK_LE: return OPR_LE; case '>': return OPR_GT; case TK_GE: return OPR_GE; case TK_AND: return OPR_AND; case TK_OR: return OPR_OR; default: return OPR_NOBINOPR; } } static const struct { lu_byte left; /* left priority for each binary operator */ lu_byte right; /* right priority */ } priority[] = { /* ORDER OPR */ {6, 6}, {6, 6}, {7, 7}, {7, 7}, {7, 7}, /* `+' `-' `/' `%' */ {10, 9}, {5, 4}, /* power and concat (right associative) */ {3, 3}, {3, 3}, /* equality and inequality */ {3, 3}, {3, 3}, {3, 3}, {3, 3}, /* order */ {2, 2}, {1, 1} /* logical (and/or) */ }; #define UNARY_PRIORITY 8 /* priority for unary operators */ /* ** subexpr -> (simpleexp | unop subexpr) { binop subexpr } ** where `binop' is any binary operator with a priority higher than `limit' */ static BinOpr subexpr (LexState *ls, expdesc *v, unsigned int limit) { BinOpr op; UnOpr uop; enterlevel(ls); uop = getunopr(ls->t.token); if (uop != OPR_NOUNOPR) { luaX_next(ls); subexpr(ls, v, UNARY_PRIORITY); luaK_prefix(ls->fs, uop, v); } else simpleexp(ls, v); /* expand while operators have priorities higher than `limit' */ op = getbinopr(ls->t.token); while (op != OPR_NOBINOPR && priority[op].left > limit) { expdesc v2; BinOpr nextop; luaX_next(ls); luaK_infix(ls->fs, op, v); /* read sub-expression with higher priority */ nextop = subexpr(ls, &v2, priority[op].right); luaK_posfix(ls->fs, op, v, &v2); op = nextop; } leavelevel(ls); return op; /* return first untreated operator */ } static void expr (LexState *ls, expdesc *v) { subexpr(ls, v, 0); } /* }==================================================================== */ /* ** {====================================================================== ** Rules for Statements ** ======================================================================= */ static int block_follow (int token) { switch (token) { case TK_ELSE: case TK_ELSEIF: case TK_END: case TK_UNTIL: case TK_EOS: return 1; default: return 0; } } static void block (LexState *ls) { /* block -> chunk */ FuncState *fs = ls->fs; BlockCnt bl; enterblock(fs, &bl, 0); chunk(ls); lua_assert(bl.breaklist == NO_JUMP); leaveblock(fs); } /* ** structure to chain all variables in the left-hand side of an ** assignment */ struct LHS_assign { struct LHS_assign *prev; expdesc v; /* variable (global, local, upvalue, or indexed) */ }; /* ** check whether, in an assignment to a local variable, the local variable ** is needed in a previous assignment (to a table). If so, save original ** local value in a safe place and use this safe copy in the previous ** assignment. */ static void check_conflict (LexState *ls, struct LHS_assign *lh, expdesc *v) { FuncState *fs = ls->fs; int extra = fs->freereg; /* eventual position to save local variable */ int conflict = 0; for (; lh; lh = lh->prev) { if (lh->v.k == VINDEXED) { if (lh->v.u.s.info == v->u.s.info) { /* conflict? */ conflict = 1; lh->v.u.s.info = extra; /* previous assignment will use safe copy */ } if (lh->v.u.s.aux == v->u.s.info) { /* conflict? */ conflict = 1; lh->v.u.s.aux = extra; /* previous assignment will use safe copy */ } } } if (conflict) { luaK_codeABC(fs, OP_MOVE, fs->freereg, v->u.s.info, 0); /* make copy */ luaK_reserveregs(fs, 1); } } static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) { expdesc e; check_condition(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED, "syntax error"); if (testnext(ls, ',')) { /* assignment -> `,' primaryexp assignment */ struct LHS_assign nv; nv.prev = lh; primaryexp(ls, &nv.v); if (nv.v.k == VLOCAL) check_conflict(ls, lh, &nv.v); luaY_checklimit(ls->fs, nvars, LUAI_MAXCCALLS - ls->L->nCcalls, "variables in assignment"); assignment(ls, &nv, nvars+1); } else { /* assignment -> `=' explist1 */ int nexps; checknext(ls, '='); nexps = explist1(ls, &e); if (nexps != nvars) { adjust_assign(ls, nvars, nexps, &e); if (nexps > nvars) ls->fs->freereg -= nexps - nvars; /* remove extra values */ } else { luaK_setoneret(ls->fs, &e); /* close last expression */ luaK_storevar(ls->fs, &lh->v, &e); return; /* avoid default */ } } init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */ luaK_storevar(ls->fs, &lh->v, &e); } static int cond (LexState *ls) { /* cond -> exp */ expdesc v; expr(ls, &v); /* read condition */ if (v.k == VNIL) v.k = VFALSE; /* `falses' are all equal here */ luaK_goiftrue(ls->fs, &v); return v.f; } static void breakstat (LexState *ls) { FuncState *fs = ls->fs; BlockCnt *bl = fs->bl; int upval = 0; while (bl && !bl->isbreakable) { upval |= bl->upval; bl = bl->previous; } if (!bl) luaX_syntaxerror(ls, "no loop to break"); if (upval) luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0); luaK_concat(fs, &bl->breaklist, luaK_jump(fs)); } static void whilestat (LexState *ls, int line) { /* whilestat -> WHILE cond DO block END */ FuncState *fs = ls->fs; int whileinit; int condexit; BlockCnt bl; luaX_next(ls); /* skip WHILE */ whileinit = luaK_getlabel(fs); condexit = cond(ls); enterblock(fs, &bl, 1); checknext(ls, TK_DO); block(ls); luaK_patchlist(fs, luaK_jump(fs), whileinit); check_match(ls, TK_END, TK_WHILE, line); leaveblock(fs); luaK_patchtohere(fs, condexit); /* false conditions finish the loop */ } static void repeatstat (LexState *ls, int line) { /* repeatstat -> REPEAT block UNTIL cond */ int condexit; FuncState *fs = ls->fs; int repeat_init = luaK_getlabel(fs); BlockCnt bl1, bl2; enterblock(fs, &bl1, 1); /* loop block */ enterblock(fs, &bl2, 0); /* scope block */ luaX_next(ls); /* skip REPEAT */ chunk(ls); check_match(ls, TK_UNTIL, TK_REPEAT, line); condexit = cond(ls); /* read condition (inside scope block) */ if (!bl2.upval) { /* no upvalues? */ leaveblock(fs); /* finish scope */ luaK_patchlist(ls->fs, condexit, repeat_init); /* close the loop */ } else { /* complete semantics when there are upvalues */ breakstat(ls); /* if condition then break */ luaK_patchtohere(ls->fs, condexit); /* else... */ leaveblock(fs); /* finish scope... */ luaK_patchlist(ls->fs, luaK_jump(fs), repeat_init); /* and repeat */ } leaveblock(fs); /* finish loop */ } static int exp1 (LexState *ls) { expdesc e; int k; expr(ls, &e); k = e.k; luaK_exp2nextreg(ls->fs, &e); return k; } static void forbody (LexState *ls, int base, int line, int nvars, int isnum) { /* forbody -> DO block */ BlockCnt bl; FuncState *fs = ls->fs; int prep, endfor; adjustlocalvars(ls, 3); /* control variables */ checknext(ls, TK_DO); prep = isnum ? luaK_codeAsBx(fs, OP_FORPREP, base, NO_JUMP) : luaK_jump(fs); enterblock(fs, &bl, 0); /* scope for declared variables */ adjustlocalvars(ls, nvars); luaK_reserveregs(fs, nvars); block(ls); leaveblock(fs); /* end of scope for declared variables */ luaK_patchtohere(fs, prep); endfor = (isnum) ? luaK_codeAsBx(fs, OP_FORLOOP, base, NO_JUMP) : luaK_codeABC(fs, OP_TFORLOOP, base, 0, nvars); luaK_fixline(fs, line); /* pretend that `OP_FOR' starts the loop */ luaK_patchlist(fs, (isnum ? endfor : luaK_jump(fs)), prep + 1); } static void fornum (LexState *ls, TString *varname, int line) { /* fornum -> NAME = exp1,exp1[,exp1] forbody */ FuncState *fs = ls->fs; int base = fs->freereg; new_localvarliteral(ls, "(for index)", 0); new_localvarliteral(ls, "(for limit)", 1); new_localvarliteral(ls, "(for step)", 2); new_localvar(ls, varname, 3); checknext(ls, '='); exp1(ls); /* initial value */ checknext(ls, ','); exp1(ls); /* limit */ if (testnext(ls, ',')) exp1(ls); /* optional step */ else { /* default step = 1 */ luaK_codeABx(fs, OP_LOADK, fs->freereg, luaK_numberK(fs, 1)); luaK_reserveregs(fs, 1); } forbody(ls, base, line, 1, 1); } static void forlist (LexState *ls, TString *indexname) { /* forlist -> NAME {,NAME} IN explist1 forbody */ FuncState *fs = ls->fs; expdesc e; int nvars = 0; int line; int base = fs->freereg; /* create control variables */ new_localvarliteral(ls, "(for generator)", nvars++); new_localvarliteral(ls, "(for state)", nvars++); new_localvarliteral(ls, "(for control)", nvars++); /* create declared variables */ new_localvar(ls, indexname, nvars++); while (testnext(ls, ',')) new_localvar(ls, str_checkname(ls), nvars++); checknext(ls, TK_IN); line = ls->linenumber; adjust_assign(ls, 3, explist1(ls, &e), &e); luaK_checkstack(fs, 3); /* extra space to call generator */ forbody(ls, base, line, nvars - 3, 0); } static void forstat (LexState *ls, int line) { /* forstat -> FOR (fornum | forlist) END */ FuncState *fs = ls->fs; TString *varname; BlockCnt bl; enterblock(fs, &bl, 1); /* scope for loop and control variables */ luaX_next(ls); /* skip `for' */ varname = str_checkname(ls); /* first variable name */ switch (ls->t.token) { case '=': fornum(ls, varname, line); break; case ',': case TK_IN: forlist(ls, varname); break; default: luaX_syntaxerror(ls, LUA_QL("=") " or " LUA_QL("in") " expected"); } check_match(ls, TK_END, TK_FOR, line); leaveblock(fs); /* loop scope (`break' jumps to this point) */ } static int test_then_block (LexState *ls) { /* test_then_block -> [IF | ELSEIF] cond THEN block */ int condexit; luaX_next(ls); /* skip IF or ELSEIF */ condexit = cond(ls); checknext(ls, TK_THEN); block(ls); /* `then' part */ return condexit; } static void ifstat (LexState *ls, int line) { /* ifstat -> IF cond THEN block {ELSEIF cond THEN block} [ELSE block] END */ FuncState *fs = ls->fs; int flist; int escapelist = NO_JUMP; flist = test_then_block(ls); /* IF cond THEN block */ while (ls->t.token == TK_ELSEIF) { luaK_concat(fs, &escapelist, luaK_jump(fs)); luaK_patchtohere(fs, flist); flist = test_then_block(ls); /* ELSEIF cond THEN block */ } if (ls->t.token == TK_ELSE) { luaK_concat(fs, &escapelist, luaK_jump(fs)); luaK_patchtohere(fs, flist); luaX_next(ls); /* skip ELSE (after patch, for correct line info) */ block(ls); /* `else' part */ } else luaK_concat(fs, &escapelist, flist); luaK_patchtohere(fs, escapelist); check_match(ls, TK_END, TK_IF, line); } static void localfunc (LexState *ls) { expdesc v, b; FuncState *fs = ls->fs; new_localvar(ls, str_checkname(ls), 0); init_exp(&v, VLOCAL, fs->freereg); luaK_reserveregs(fs, 1); adjustlocalvars(ls, 1); body(ls, &b, 0, ls->linenumber); luaK_storevar(fs, &v, &b); /* debug information will only see the variable after this point! */ getlocvar(fs, fs->nactvar - 1).startpc = fs->pc; } static void localstat (LexState *ls) { /* stat -> LOCAL NAME {`,' NAME} [`=' explist1] */ int nvars = 0; int nexps; expdesc e; do { new_localvar(ls, str_checkname(ls), nvars++); } while (testnext(ls, ',')); if (testnext(ls, '=')) nexps = explist1(ls, &e); else { e.k = VVOID; nexps = 0; } adjust_assign(ls, nvars, nexps, &e); adjustlocalvars(ls, nvars); } static int funcname (LexState *ls, expdesc *v) { /* funcname -> NAME {field} [`:' NAME] */ int needself = 0; singlevar(ls, v); while (ls->t.token == '.') field(ls, v); if (ls->t.token == ':') { needself = 1; field(ls, v); } return needself; } static void funcstat (LexState *ls, int line) { /* funcstat -> FUNCTION funcname body */ int needself; expdesc v, b; luaX_next(ls); /* skip FUNCTION */ needself = funcname(ls, &v); body(ls, &b, needself, line); luaK_storevar(ls->fs, &v, &b); luaK_fixline(ls->fs, line); /* definition `happens' in the first line */ } static void exprstat (LexState *ls) { /* stat -> func | assignment */ FuncState *fs = ls->fs; struct LHS_assign v; primaryexp(ls, &v.v); if (v.v.k == VCALL) /* stat -> func */ SETARG_C(getcode(fs, &v.v), 1); /* call statement uses no results */ else { /* stat -> assignment */ v.prev = NULL; assignment(ls, &v, 1); } } static void retstat (LexState *ls) { /* stat -> RETURN explist */ FuncState *fs = ls->fs; expdesc e; int first, nret; /* registers with returned values */ luaX_next(ls); /* skip RETURN */ if (block_follow(ls->t.token) || ls->t.token == ';') first = nret = 0; /* return no values */ else { nret = explist1(ls, &e); /* optional return values */ if (hasmultret(e.k)) { luaK_setmultret(fs, &e); if (e.k == VCALL && nret == 1) { /* tail call? */ SET_OPCODE(getcode(fs,&e), OP_TAILCALL); lua_assert(GETARG_A(getcode(fs,&e)) == fs->nactvar); } first = fs->nactvar; nret = LUA_MULTRET; /* return all values */ } else { if (nret == 1) /* only one single value? */ first = luaK_exp2anyreg(fs, &e); else { luaK_exp2nextreg(fs, &e); /* values must go to the `stack' */ first = fs->nactvar; /* return all `active' values */ lua_assert(nret == fs->freereg - first); } } } luaK_ret(fs, first, nret); } static int statement (LexState *ls) { int line = ls->linenumber; /* may be needed for error messages */ switch (ls->t.token) { case TK_IF: { /* stat -> ifstat */ ifstat(ls, line); return 0; } case TK_WHILE: { /* stat -> whilestat */ whilestat(ls, line); return 0; } case TK_DO: { /* stat -> DO block END */ luaX_next(ls); /* skip DO */ block(ls); check_match(ls, TK_END, TK_DO, line); return 0; } case TK_FOR: { /* stat -> forstat */ forstat(ls, line); return 0; } case TK_REPEAT: { /* stat -> repeatstat */ repeatstat(ls, line); return 0; } case TK_FUNCTION: { funcstat(ls, line); /* stat -> funcstat */ return 0; } case TK_LOCAL: { /* stat -> localstat */ luaX_next(ls); /* skip LOCAL */ if (testnext(ls, TK_FUNCTION)) /* local function? */ localfunc(ls); else localstat(ls); return 0; } case TK_RETURN: { /* stat -> retstat */ retstat(ls); return 1; /* must be last statement */ } case TK_BREAK: { /* stat -> breakstat */ luaX_next(ls); /* skip BREAK */ breakstat(ls); return 1; /* must be last statement */ } default: { exprstat(ls); return 0; /* to avoid warnings */ } } } static void chunk (LexState *ls) { /* chunk -> { stat [`;'] } */ int islast = 0; enterlevel(ls); while (!islast && !block_follow(ls->t.token)) { islast = statement(ls); testnext(ls, ';'); lua_assert(ls->fs->f->maxstacksize >= ls->fs->freereg && ls->fs->freereg >= ls->fs->nactvar); ls->fs->freereg = ls->fs->nactvar; /* free registers */ } leavelevel(ls); } /* }====================================================================== */ genometools-1.5.1/src/external/lua-5.1.5/src/lparser.h000066400000000000000000000043251211610345200223160ustar00rootroot00000000000000/* ** $Id: lparser.h,v 1.57.1.1 2007/12/27 13:02:25 roberto Exp $ ** Lua Parser ** See Copyright Notice in lua.h */ #ifndef lparser_h #define lparser_h #include "llimits.h" #include "lobject.h" #include "lzio.h" /* ** Expression descriptor */ typedef enum { VVOID, /* no value */ VNIL, VTRUE, VFALSE, VK, /* info = index of constant in `k' */ VKNUM, /* nval = numerical value */ VLOCAL, /* info = local register */ VUPVAL, /* info = index of upvalue in `upvalues' */ VGLOBAL, /* info = index of table; aux = index of global name in `k' */ VINDEXED, /* info = table register; aux = index register (or `k') */ VJMP, /* info = instruction pc */ VRELOCABLE, /* info = instruction pc */ VNONRELOC, /* info = result register */ VCALL, /* info = instruction pc */ VVARARG /* info = instruction pc */ } expkind; typedef struct expdesc { expkind k; union { struct { int info, aux; } s; lua_Number nval; } u; int t; /* patch list of `exit when true' */ int f; /* patch list of `exit when false' */ } expdesc; typedef struct upvaldesc { lu_byte k; lu_byte info; } upvaldesc; struct BlockCnt; /* defined in lparser.c */ /* state needed to generate code for a given function */ typedef struct FuncState { Proto *f; /* current function header */ Table *h; /* table to find (and reuse) elements in `k' */ struct FuncState *prev; /* enclosing function */ struct LexState *ls; /* lexical state */ struct lua_State *L; /* copy of the Lua state */ struct BlockCnt *bl; /* chain of current blocks */ int pc; /* next position to code (equivalent to `ncode') */ int lasttarget; /* `pc' of last `jump target' */ int jpc; /* list of pending jumps to `pc' */ int freereg; /* first free register */ int nk; /* number of elements in `k' */ int np; /* number of elements in `p' */ short nlocvars; /* number of elements in `locvars' */ lu_byte nactvar; /* number of active local variables */ upvaldesc upvalues[LUAI_MAXUPVALUES]; /* upvalues */ unsigned short actvar[LUAI_MAXVARS]; /* declared-variable stack */ } FuncState; LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name); #endif genometools-1.5.1/src/external/lua-5.1.5/src/lstate.c000066400000000000000000000130521211610345200221320ustar00rootroot00000000000000/* ** $Id: lstate.c,v 2.36.1.2 2008/01/03 15:20:39 roberto Exp $ ** Global State ** See Copyright Notice in lua.h */ #include #define lstate_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lgc.h" #include "llex.h" #include "lmem.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #define state_size(x) (sizeof(x) + LUAI_EXTRASPACE) #define fromstate(l) (cast(lu_byte *, (l)) - LUAI_EXTRASPACE) #define tostate(l) (cast(lua_State *, cast(lu_byte *, l) + LUAI_EXTRASPACE)) /* ** Main thread combines a thread state and the global state */ typedef struct LG { lua_State l; global_State g; } LG; static void stack_init (lua_State *L1, lua_State *L) { /* initialize CallInfo array */ L1->base_ci = luaM_newvector(L, BASIC_CI_SIZE, CallInfo); L1->ci = L1->base_ci; L1->size_ci = BASIC_CI_SIZE; L1->end_ci = L1->base_ci + L1->size_ci - 1; /* initialize stack array */ L1->stack = luaM_newvector(L, BASIC_STACK_SIZE + EXTRA_STACK, TValue); L1->stacksize = BASIC_STACK_SIZE + EXTRA_STACK; L1->top = L1->stack; L1->stack_last = L1->stack+(L1->stacksize - EXTRA_STACK)-1; /* initialize first ci */ L1->ci->func = L1->top; setnilvalue(L1->top++); /* `function' entry for this `ci' */ L1->base = L1->ci->base = L1->top; L1->ci->top = L1->top + LUA_MINSTACK; } static void freestack (lua_State *L, lua_State *L1) { luaM_freearray(L, L1->base_ci, L1->size_ci, CallInfo); luaM_freearray(L, L1->stack, L1->stacksize, TValue); } /* ** open parts that may cause memory-allocation errors */ static void f_luaopen (lua_State *L, void *ud) { global_State *g = G(L); UNUSED(ud); stack_init(L, L); /* init stack */ sethvalue(L, gt(L), luaH_new(L, 0, 2)); /* table of globals */ sethvalue(L, registry(L), luaH_new(L, 0, 2)); /* registry */ luaS_resize(L, MINSTRTABSIZE); /* initial size of string table */ luaT_init(L); luaX_init(L); luaS_fix(luaS_newliteral(L, MEMERRMSG)); g->GCthreshold = 4*g->totalbytes; } static void preinit_state (lua_State *L, global_State *g) { G(L) = g; L->stack = NULL; L->stacksize = 0; L->errorJmp = NULL; L->hook = NULL; L->hookmask = 0; L->basehookcount = 0; L->allowhook = 1; resethookcount(L); L->openupval = NULL; L->size_ci = 0; L->nCcalls = L->baseCcalls = 0; L->status = 0; L->base_ci = L->ci = NULL; L->savedpc = NULL; L->errfunc = 0; setnilvalue(gt(L)); } static void close_state (lua_State *L) { global_State *g = G(L); luaF_close(L, L->stack); /* close all upvalues for this thread */ luaC_freeall(L); /* collect all objects */ lua_assert(g->rootgc == obj2gco(L)); lua_assert(g->strt.nuse == 0); luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size, TString *); luaZ_freebuffer(L, &g->buff); freestack(L, L); lua_assert(g->totalbytes == sizeof(LG)); (*g->frealloc)(g->ud, fromstate(L), state_size(LG), 0); } lua_State *luaE_newthread (lua_State *L) { lua_State *L1 = tostate(luaM_malloc(L, state_size(lua_State))); luaC_link(L, obj2gco(L1), LUA_TTHREAD); preinit_state(L1, G(L)); stack_init(L1, L); /* init stack */ setobj2n(L, gt(L1), gt(L)); /* share table of globals */ L1->hookmask = L->hookmask; L1->basehookcount = L->basehookcount; L1->hook = L->hook; resethookcount(L1); lua_assert(iswhite(obj2gco(L1))); return L1; } void luaE_freethread (lua_State *L, lua_State *L1) { luaF_close(L1, L1->stack); /* close all upvalues for this thread */ lua_assert(L1->openupval == NULL); luai_userstatefree(L1); freestack(L, L1); luaM_freemem(L, fromstate(L1), state_size(lua_State)); } LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { int i; lua_State *L; global_State *g; void *l = (*f)(ud, NULL, 0, state_size(LG)); if (l == NULL) return NULL; L = tostate(l); g = &((LG *)L)->g; L->next = NULL; L->tt = LUA_TTHREAD; g->currentwhite = bit2mask(WHITE0BIT, FIXEDBIT); L->marked = luaC_white(g); set2bits(L->marked, FIXEDBIT, SFIXEDBIT); preinit_state(L, g); g->frealloc = f; g->ud = ud; g->mainthread = L; g->uvhead.u.l.prev = &g->uvhead; g->uvhead.u.l.next = &g->uvhead; g->GCthreshold = 0; /* mark it as unfinished state */ g->strt.size = 0; g->strt.nuse = 0; g->strt.hash = NULL; setnilvalue(registry(L)); luaZ_initbuffer(L, &g->buff); g->panic = NULL; g->gcstate = GCSpause; g->rootgc = obj2gco(L); g->sweepstrgc = 0; g->sweepgc = &g->rootgc; g->gray = NULL; g->grayagain = NULL; g->weak = NULL; g->tmudata = NULL; g->totalbytes = sizeof(LG); g->gcpause = LUAI_GCPAUSE; g->gcstepmul = LUAI_GCMUL; g->gcdept = 0; for (i=0; imt[i] = NULL; if (luaD_rawrunprotected(L, f_luaopen, NULL) != 0) { /* memory allocation error: free partial state */ close_state(L); L = NULL; } else luai_userstateopen(L); return L; } static void callallgcTM (lua_State *L, void *ud) { UNUSED(ud); luaC_callGCTM(L); /* call GC metamethods for all udata */ } LUA_API void lua_close (lua_State *L) { L = G(L)->mainthread; /* only the main thread can be closed */ lua_lock(L); luaF_close(L, L->stack); /* close all upvalues for this thread */ luaC_separateudata(L, 1); /* separate udata that have GC metamethods */ L->errfunc = 0; /* no error function during GC metamethods */ do { /* repeat until no more errors */ L->ci = L->base_ci; L->base = L->top = L->ci->base; L->nCcalls = L->baseCcalls = 0; } while (luaD_rawrunprotected(L, callallgcTM, NULL) != 0); lua_assert(G(L)->tmudata == NULL); luai_userstateclose(L); close_state(L); } genometools-1.5.1/src/external/lua-5.1.5/src/lstate.h000066400000000000000000000116231211610345200221410ustar00rootroot00000000000000/* ** $Id: lstate.h,v 2.24.1.2 2008/01/03 15:20:39 roberto Exp $ ** Global State ** See Copyright Notice in lua.h */ #ifndef lstate_h #define lstate_h #include "lua.h" #include "lobject.h" #include "ltm.h" #include "lzio.h" struct lua_longjmp; /* defined in ldo.c */ /* table of globals */ #define gt(L) (&L->l_gt) /* registry */ #define registry(L) (&G(L)->l_registry) /* extra stack space to handle TM calls and some other extras */ #define EXTRA_STACK 5 #define BASIC_CI_SIZE 8 #define BASIC_STACK_SIZE (2*LUA_MINSTACK) typedef struct stringtable { GCObject **hash; lu_int32 nuse; /* number of elements */ int size; } stringtable; /* ** informations about a call */ typedef struct CallInfo { StkId base; /* base for this function */ StkId func; /* function index in the stack */ StkId top; /* top for this function */ const Instruction *savedpc; int nresults; /* expected number of results from this function */ int tailcalls; /* number of tail calls lost under this entry */ } CallInfo; #define curr_func(L) (clvalue(L->ci->func)) #define ci_func(ci) (clvalue((ci)->func)) #define f_isLua(ci) (!ci_func(ci)->c.isC) #define isLua(ci) (ttisfunction((ci)->func) && f_isLua(ci)) /* ** `global state', shared by all threads of this state */ typedef struct global_State { stringtable strt; /* hash table for strings */ lua_Alloc frealloc; /* function to reallocate memory */ void *ud; /* auxiliary data to `frealloc' */ lu_byte currentwhite; lu_byte gcstate; /* state of garbage collector */ int sweepstrgc; /* position of sweep in `strt' */ GCObject *rootgc; /* list of all collectable objects */ GCObject **sweepgc; /* position of sweep in `rootgc' */ GCObject *gray; /* list of gray objects */ GCObject *grayagain; /* list of objects to be traversed atomically */ GCObject *weak; /* list of weak tables (to be cleared) */ GCObject *tmudata; /* last element of list of userdata to be GC */ Mbuffer buff; /* temporary buffer for string concatentation */ lu_mem GCthreshold; lu_mem totalbytes; /* number of bytes currently allocated */ lu_mem estimate; /* an estimate of number of bytes actually in use */ lu_mem gcdept; /* how much GC is `behind schedule' */ int gcpause; /* size of pause between successive GCs */ int gcstepmul; /* GC `granularity' */ lua_CFunction panic; /* to be called in unprotected errors */ TValue l_registry; struct lua_State *mainthread; UpVal uvhead; /* head of double-linked list of all open upvalues */ struct Table *mt[NUM_TAGS]; /* metatables for basic types */ TString *tmname[TM_N]; /* array with tag-method names */ } global_State; /* ** `per thread' state */ struct lua_State { CommonHeader; lu_byte status; StkId top; /* first free slot in the stack */ StkId base; /* base of current function */ global_State *l_G; CallInfo *ci; /* call info for current function */ const Instruction *savedpc; /* `savedpc' of current function */ StkId stack_last; /* last free slot in the stack */ StkId stack; /* stack base */ CallInfo *end_ci; /* points after end of ci array*/ CallInfo *base_ci; /* array of CallInfo's */ int stacksize; int size_ci; /* size of array `base_ci' */ unsigned short nCcalls; /* number of nested C calls */ unsigned short baseCcalls; /* nested C calls when resuming coroutine */ lu_byte hookmask; lu_byte allowhook; int basehookcount; int hookcount; lua_Hook hook; TValue l_gt; /* table of globals */ TValue env; /* temporary place for environments */ GCObject *openupval; /* list of open upvalues in this stack */ GCObject *gclist; struct lua_longjmp *errorJmp; /* current error recover point */ ptrdiff_t errfunc; /* current error handling function (stack index) */ }; #define G(L) (L->l_G) /* ** Union of all collectable objects */ union GCObject { GCheader gch; union TString ts; union Udata u; union Closure cl; struct Table h; struct Proto p; struct UpVal uv; struct lua_State th; /* thread */ }; /* macros to convert a GCObject into a specific value */ #define rawgco2ts(o) check_exp((o)->gch.tt == LUA_TSTRING, &((o)->ts)) #define gco2ts(o) (&rawgco2ts(o)->tsv) #define rawgco2u(o) check_exp((o)->gch.tt == LUA_TUSERDATA, &((o)->u)) #define gco2u(o) (&rawgco2u(o)->uv) #define gco2cl(o) check_exp((o)->gch.tt == LUA_TFUNCTION, &((o)->cl)) #define gco2h(o) check_exp((o)->gch.tt == LUA_TTABLE, &((o)->h)) #define gco2p(o) check_exp((o)->gch.tt == LUA_TPROTO, &((o)->p)) #define gco2uv(o) check_exp((o)->gch.tt == LUA_TUPVAL, &((o)->uv)) #define ngcotouv(o) \ check_exp((o) == NULL || (o)->gch.tt == LUA_TUPVAL, &((o)->uv)) #define gco2th(o) check_exp((o)->gch.tt == LUA_TTHREAD, &((o)->th)) /* macro to convert any Lua object into a GCObject */ #define obj2gco(v) (cast(GCObject *, (v))) LUAI_FUNC lua_State *luaE_newthread (lua_State *L); LUAI_FUNC void luaE_freethread (lua_State *L, lua_State *L1); #endif genometools-1.5.1/src/external/lua-5.1.5/src/lstring.c000066400000000000000000000060461211610345200223250ustar00rootroot00000000000000/* ** $Id: lstring.c,v 2.8.1.1 2007/12/27 13:02:25 roberto Exp $ ** String table (keeps all strings handled by Lua) ** See Copyright Notice in lua.h */ #include #define lstring_c #define LUA_CORE #include "lua.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" void luaS_resize (lua_State *L, int newsize) { GCObject **newhash; stringtable *tb; int i; if (G(L)->gcstate == GCSsweepstring) return; /* cannot resize during GC traverse */ newhash = luaM_newvector(L, newsize, GCObject *); tb = &G(L)->strt; for (i=0; isize; i++) { GCObject *p = tb->hash[i]; while (p) { /* for each node in the list */ GCObject *next = p->gch.next; /* save next */ unsigned int h = gco2ts(p)->hash; int h1 = lmod(h, newsize); /* new position */ lua_assert(cast_int(h%newsize) == lmod(h, newsize)); p->gch.next = newhash[h1]; /* chain it */ newhash[h1] = p; p = next; } } luaM_freearray(L, tb->hash, tb->size, TString *); tb->size = newsize; tb->hash = newhash; } static TString *newlstr (lua_State *L, const char *str, size_t l, unsigned int h) { TString *ts; stringtable *tb; if (l+1 > (MAX_SIZET - sizeof(TString))/sizeof(char)) luaM_toobig(L); ts = cast(TString *, luaM_malloc(L, (l+1)*sizeof(char)+sizeof(TString))); ts->tsv.len = l; ts->tsv.hash = h; ts->tsv.marked = luaC_white(G(L)); ts->tsv.tt = LUA_TSTRING; ts->tsv.reserved = 0; memcpy(ts+1, str, l*sizeof(char)); ((char *)(ts+1))[l] = '\0'; /* ending 0 */ tb = &G(L)->strt; h = lmod(h, tb->size); ts->tsv.next = tb->hash[h]; /* chain new entry */ tb->hash[h] = obj2gco(ts); tb->nuse++; if (tb->nuse > cast(lu_int32, tb->size) && tb->size <= MAX_INT/2) luaS_resize(L, tb->size*2); /* too crowded */ return ts; } TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { GCObject *o; unsigned int h = cast(unsigned int, l); /* seed */ size_t step = (l>>5)+1; /* if string is too long, don't hash all its chars */ size_t l1; for (l1=l; l1>=step; l1-=step) /* compute hash */ h = h ^ ((h<<5)+(h>>2)+cast(unsigned char, str[l1-1])); for (o = G(L)->strt.hash[lmod(h, G(L)->strt.size)]; o != NULL; o = o->gch.next) { TString *ts = rawgco2ts(o); if (ts->tsv.len == l && (memcmp(str, getstr(ts), l) == 0)) { /* string may be dead */ if (isdead(G(L), o)) changewhite(o); return ts; } } return newlstr(L, str, l, h); /* not found */ } Udata *luaS_newudata (lua_State *L, size_t s, Table *e) { Udata *u; if (s > MAX_SIZET - sizeof(Udata)) luaM_toobig(L); u = cast(Udata *, luaM_malloc(L, s + sizeof(Udata))); u->uv.marked = luaC_white(G(L)); /* is not finalized */ u->uv.tt = LUA_TUSERDATA; u->uv.len = s; u->uv.metatable = NULL; u->uv.env = e; /* chain it on udata list (after main thread) */ u->uv.next = G(L)->mainthread->next; G(L)->mainthread->next = obj2gco(u); return u; } genometools-1.5.1/src/external/lua-5.1.5/src/lstring.h000066400000000000000000000014561211610345200223320ustar00rootroot00000000000000/* ** $Id: lstring.h,v 1.43.1.1 2007/12/27 13:02:25 roberto Exp $ ** String table (keep all strings handled by Lua) ** See Copyright Notice in lua.h */ #ifndef lstring_h #define lstring_h #include "lgc.h" #include "lobject.h" #include "lstate.h" #define sizestring(s) (sizeof(union TString)+((s)->len+1)*sizeof(char)) #define sizeudata(u) (sizeof(union Udata)+(u)->len) #define luaS_new(L, s) (luaS_newlstr(L, s, strlen(s))) #define luaS_newliteral(L, s) (luaS_newlstr(L, "" s, \ (sizeof(s)/sizeof(char))-1)) #define luaS_fix(s) l_setbit((s)->tsv.marked, FIXEDBIT) LUAI_FUNC void luaS_resize (lua_State *L, int newsize); LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s, Table *e); LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l); #endif genometools-1.5.1/src/external/lua-5.1.5/src/lstrlib.c000066400000000000000000000560111211610345200223130ustar00rootroot00000000000000/* ** $Id: lstrlib.c,v 1.132.1.5 2010/05/14 15:34:19 roberto Exp $ ** Standard library for string operations and pattern-matching ** See Copyright Notice in lua.h */ #include #include #include #include #include #define lstrlib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" /* macro to `unsign' a character */ #define uchar(c) ((unsigned char)(c)) static int str_len (lua_State *L) { size_t l; luaL_checklstring(L, 1, &l); lua_pushinteger(L, l); return 1; } static ptrdiff_t posrelat (ptrdiff_t pos, size_t len) { /* relative string position: negative means back from end */ if (pos < 0) pos += (ptrdiff_t)len + 1; return (pos >= 0) ? pos : 0; } static int str_sub (lua_State *L) { size_t l; const char *s = luaL_checklstring(L, 1, &l); ptrdiff_t start = posrelat(luaL_checkinteger(L, 2), l); ptrdiff_t end = posrelat(luaL_optinteger(L, 3, -1), l); if (start < 1) start = 1; if (end > (ptrdiff_t)l) end = (ptrdiff_t)l; if (start <= end) lua_pushlstring(L, s+start-1, end-start+1); else lua_pushliteral(L, ""); return 1; } static int str_reverse (lua_State *L) { size_t l; luaL_Buffer b; const char *s = luaL_checklstring(L, 1, &l); luaL_buffinit(L, &b); while (l--) luaL_addchar(&b, s[l]); luaL_pushresult(&b); return 1; } static int str_lower (lua_State *L) { size_t l; size_t i; luaL_Buffer b; const char *s = luaL_checklstring(L, 1, &l); luaL_buffinit(L, &b); for (i=0; i 0) luaL_addlstring(&b, s, l); luaL_pushresult(&b); return 1; } static int str_byte (lua_State *L) { size_t l; const char *s = luaL_checklstring(L, 1, &l); ptrdiff_t posi = posrelat(luaL_optinteger(L, 2, 1), l); ptrdiff_t pose = posrelat(luaL_optinteger(L, 3, posi), l); int n, i; if (posi <= 0) posi = 1; if ((size_t)pose > l) pose = l; if (posi > pose) return 0; /* empty interval; return no values */ n = (int)(pose - posi + 1); if (posi + n <= pose) /* overflow? */ luaL_error(L, "string slice too long"); luaL_checkstack(L, n, "string slice too long"); for (i=0; i= ms->level || ms->capture[l].len == CAP_UNFINISHED) return luaL_error(ms->L, "invalid capture index"); return l; } static int capture_to_close (MatchState *ms) { int level = ms->level; for (level--; level>=0; level--) if (ms->capture[level].len == CAP_UNFINISHED) return level; return luaL_error(ms->L, "invalid pattern capture"); } static const char *classend (MatchState *ms, const char *p) { switch (*p++) { case L_ESC: { if (*p == '\0') luaL_error(ms->L, "malformed pattern (ends with " LUA_QL("%%") ")"); return p+1; } case '[': { if (*p == '^') p++; do { /* look for a `]' */ if (*p == '\0') luaL_error(ms->L, "malformed pattern (missing " LUA_QL("]") ")"); if (*(p++) == L_ESC && *p != '\0') p++; /* skip escapes (e.g. `%]') */ } while (*p != ']'); return p+1; } default: { return p; } } } static int match_class (int c, int cl) { int res; switch (tolower(cl)) { case 'a' : res = isalpha(c); break; case 'c' : res = iscntrl(c); break; case 'd' : res = isdigit(c); break; case 'l' : res = islower(c); break; case 'p' : res = ispunct(c); break; case 's' : res = isspace(c); break; case 'u' : res = isupper(c); break; case 'w' : res = isalnum(c); break; case 'x' : res = isxdigit(c); break; case 'z' : res = (c == 0); break; default: return (cl == c); } return (islower(cl) ? res : !res); } static int matchbracketclass (int c, const char *p, const char *ec) { int sig = 1; if (*(p+1) == '^') { sig = 0; p++; /* skip the `^' */ } while (++p < ec) { if (*p == L_ESC) { p++; if (match_class(c, uchar(*p))) return sig; } else if ((*(p+1) == '-') && (p+2 < ec)) { p+=2; if (uchar(*(p-2)) <= c && c <= uchar(*p)) return sig; } else if (uchar(*p) == c) return sig; } return !sig; } static int singlematch (int c, const char *p, const char *ep) { switch (*p) { case '.': return 1; /* matches any char */ case L_ESC: return match_class(c, uchar(*(p+1))); case '[': return matchbracketclass(c, p, ep-1); default: return (uchar(*p) == c); } } static const char *match (MatchState *ms, const char *s, const char *p); static const char *matchbalance (MatchState *ms, const char *s, const char *p) { if (*p == 0 || *(p+1) == 0) luaL_error(ms->L, "unbalanced pattern"); if (*s != *p) return NULL; else { int b = *p; int e = *(p+1); int cont = 1; while (++s < ms->src_end) { if (*s == e) { if (--cont == 0) return s+1; } else if (*s == b) cont++; } } return NULL; /* string ends out of balance */ } static const char *max_expand (MatchState *ms, const char *s, const char *p, const char *ep) { ptrdiff_t i = 0; /* counts maximum expand for item */ while ((s+i)src_end && singlematch(uchar(*(s+i)), p, ep)) i++; /* keeps trying to match with the maximum repetitions */ while (i>=0) { const char *res = match(ms, (s+i), ep+1); if (res) return res; i--; /* else didn't match; reduce 1 repetition to try again */ } return NULL; } static const char *min_expand (MatchState *ms, const char *s, const char *p, const char *ep) { for (;;) { const char *res = match(ms, s, ep+1); if (res != NULL) return res; else if (ssrc_end && singlematch(uchar(*s), p, ep)) s++; /* try with one more repetition */ else return NULL; } } static const char *start_capture (MatchState *ms, const char *s, const char *p, int what) { const char *res; int level = ms->level; if (level >= LUA_MAXCAPTURES) luaL_error(ms->L, "too many captures"); ms->capture[level].init = s; ms->capture[level].len = what; ms->level = level+1; if ((res=match(ms, s, p)) == NULL) /* match failed? */ ms->level--; /* undo capture */ return res; } static const char *end_capture (MatchState *ms, const char *s, const char *p) { int l = capture_to_close(ms); const char *res; ms->capture[l].len = s - ms->capture[l].init; /* close capture */ if ((res = match(ms, s, p)) == NULL) /* match failed? */ ms->capture[l].len = CAP_UNFINISHED; /* undo capture */ return res; } static const char *match_capture (MatchState *ms, const char *s, int l) { size_t len; l = check_capture(ms, l); len = ms->capture[l].len; if ((size_t)(ms->src_end-s) >= len && memcmp(ms->capture[l].init, s, len) == 0) return s+len; else return NULL; } static const char *match (MatchState *ms, const char *s, const char *p) { init: /* using goto's to optimize tail recursion */ switch (*p) { case '(': { /* start capture */ if (*(p+1) == ')') /* position capture? */ return start_capture(ms, s, p+2, CAP_POSITION); else return start_capture(ms, s, p+1, CAP_UNFINISHED); } case ')': { /* end capture */ return end_capture(ms, s, p+1); } case L_ESC: { switch (*(p+1)) { case 'b': { /* balanced string? */ s = matchbalance(ms, s, p+2); if (s == NULL) return NULL; p+=4; goto init; /* else return match(ms, s, p+4); */ } case 'f': { /* frontier? */ const char *ep; char previous; p += 2; if (*p != '[') luaL_error(ms->L, "missing " LUA_QL("[") " after " LUA_QL("%%f") " in pattern"); ep = classend(ms, p); /* points to what is next */ previous = (s == ms->src_init) ? '\0' : *(s-1); if (matchbracketclass(uchar(previous), p, ep-1) || !matchbracketclass(uchar(*s), p, ep-1)) return NULL; p=ep; goto init; /* else return match(ms, s, ep); */ } default: { if (isdigit(uchar(*(p+1)))) { /* capture results (%0-%9)? */ s = match_capture(ms, s, uchar(*(p+1))); if (s == NULL) return NULL; p+=2; goto init; /* else return match(ms, s, p+2) */ } goto dflt; /* case default */ } } } case '\0': { /* end of pattern */ return s; /* match succeeded */ } case '$': { if (*(p+1) == '\0') /* is the `$' the last char in pattern? */ return (s == ms->src_end) ? s : NULL; /* check end of string */ else goto dflt; } default: dflt: { /* it is a pattern item */ const char *ep = classend(ms, p); /* points to what is next */ int m = ssrc_end && singlematch(uchar(*s), p, ep); switch (*ep) { case '?': { /* optional */ const char *res; if (m && ((res=match(ms, s+1, ep+1)) != NULL)) return res; p=ep+1; goto init; /* else return match(ms, s, ep+1); */ } case '*': { /* 0 or more repetitions */ return max_expand(ms, s, p, ep); } case '+': { /* 1 or more repetitions */ return (m ? max_expand(ms, s+1, p, ep) : NULL); } case '-': { /* 0 or more repetitions (minimum) */ return min_expand(ms, s, p, ep); } default: { if (!m) return NULL; s++; p=ep; goto init; /* else return match(ms, s+1, ep); */ } } } } } static const char *lmemfind (const char *s1, size_t l1, const char *s2, size_t l2) { if (l2 == 0) return s1; /* empty strings are everywhere */ else if (l2 > l1) return NULL; /* avoids a negative `l1' */ else { const char *init; /* to search for a `*s2' inside `s1' */ l2--; /* 1st char will be checked by `memchr' */ l1 = l1-l2; /* `s2' cannot be found after that */ while (l1 > 0 && (init = (const char *)memchr(s1, *s2, l1)) != NULL) { init++; /* 1st char is already checked */ if (memcmp(init, s2+1, l2) == 0) return init-1; else { /* correct `l1' and `s1' to try again */ l1 -= init-s1; s1 = init; } } return NULL; /* not found */ } } static void push_onecapture (MatchState *ms, int i, const char *s, const char *e) { if (i >= ms->level) { if (i == 0) /* ms->level == 0, too */ lua_pushlstring(ms->L, s, e - s); /* add whole match */ else luaL_error(ms->L, "invalid capture index"); } else { ptrdiff_t l = ms->capture[i].len; if (l == CAP_UNFINISHED) luaL_error(ms->L, "unfinished capture"); if (l == CAP_POSITION) lua_pushinteger(ms->L, ms->capture[i].init - ms->src_init + 1); else lua_pushlstring(ms->L, ms->capture[i].init, l); } } static int push_captures (MatchState *ms, const char *s, const char *e) { int i; int nlevels = (ms->level == 0 && s) ? 1 : ms->level; luaL_checkstack(ms->L, nlevels, "too many captures"); for (i = 0; i < nlevels; i++) push_onecapture(ms, i, s, e); return nlevels; /* number of strings pushed */ } static int str_find_aux (lua_State *L, int find) { size_t l1, l2; const char *s = luaL_checklstring(L, 1, &l1); const char *p = luaL_checklstring(L, 2, &l2); ptrdiff_t init = posrelat(luaL_optinteger(L, 3, 1), l1) - 1; if (init < 0) init = 0; else if ((size_t)(init) > l1) init = (ptrdiff_t)l1; if (find && (lua_toboolean(L, 4) || /* explicit request? */ strpbrk(p, SPECIALS) == NULL)) { /* or no special characters? */ /* do a plain search */ const char *s2 = lmemfind(s+init, l1-init, p, l2); if (s2) { lua_pushinteger(L, s2-s+1); lua_pushinteger(L, s2-s+l2); return 2; } } else { MatchState ms; int anchor = (*p == '^') ? (p++, 1) : 0; const char *s1=s+init; ms.L = L; ms.src_init = s; ms.src_end = s+l1; do { const char *res; ms.level = 0; if ((res=match(&ms, s1, p)) != NULL) { if (find) { lua_pushinteger(L, s1-s+1); /* start */ lua_pushinteger(L, res-s); /* end */ return push_captures(&ms, NULL, 0) + 2; } else return push_captures(&ms, s1, res); } } while (s1++ < ms.src_end && !anchor); } lua_pushnil(L); /* not found */ return 1; } static int str_find (lua_State *L) { return str_find_aux(L, 1); } static int str_match (lua_State *L) { return str_find_aux(L, 0); } static int gmatch_aux (lua_State *L) { MatchState ms; size_t ls; const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls); const char *p = lua_tostring(L, lua_upvalueindex(2)); const char *src; ms.L = L; ms.src_init = s; ms.src_end = s+ls; for (src = s + (size_t)lua_tointeger(L, lua_upvalueindex(3)); src <= ms.src_end; src++) { const char *e; ms.level = 0; if ((e = match(&ms, src, p)) != NULL) { lua_Integer newstart = e-s; if (e == src) newstart++; /* empty match? go at least one position */ lua_pushinteger(L, newstart); lua_replace(L, lua_upvalueindex(3)); return push_captures(&ms, src, e); } } return 0; /* not found */ } static int gmatch (lua_State *L) { luaL_checkstring(L, 1); luaL_checkstring(L, 2); lua_settop(L, 2); lua_pushinteger(L, 0); lua_pushcclosure(L, gmatch_aux, 3); return 1; } static int gfind_nodef (lua_State *L) { return luaL_error(L, LUA_QL("string.gfind") " was renamed to " LUA_QL("string.gmatch")); } static void add_s (MatchState *ms, luaL_Buffer *b, const char *s, const char *e) { size_t l, i; const char *news = lua_tolstring(ms->L, 3, &l); for (i = 0; i < l; i++) { if (news[i] != L_ESC) luaL_addchar(b, news[i]); else { i++; /* skip ESC */ if (!isdigit(uchar(news[i]))) luaL_addchar(b, news[i]); else if (news[i] == '0') luaL_addlstring(b, s, e - s); else { push_onecapture(ms, news[i] - '1', s, e); luaL_addvalue(b); /* add capture to accumulated result */ } } } } static void add_value (MatchState *ms, luaL_Buffer *b, const char *s, const char *e) { lua_State *L = ms->L; switch (lua_type(L, 3)) { case LUA_TNUMBER: case LUA_TSTRING: { add_s(ms, b, s, e); return; } case LUA_TFUNCTION: { int n; lua_pushvalue(L, 3); n = push_captures(ms, s, e); lua_call(L, n, 1); break; } case LUA_TTABLE: { push_onecapture(ms, 0, s, e); lua_gettable(L, 3); break; } } if (!lua_toboolean(L, -1)) { /* nil or false? */ lua_pop(L, 1); lua_pushlstring(L, s, e - s); /* keep original text */ } else if (!lua_isstring(L, -1)) luaL_error(L, "invalid replacement value (a %s)", luaL_typename(L, -1)); luaL_addvalue(b); /* add result to accumulator */ } static int str_gsub (lua_State *L) { size_t srcl; const char *src = luaL_checklstring(L, 1, &srcl); const char *p = luaL_checkstring(L, 2); int tr = lua_type(L, 3); int max_s = luaL_optint(L, 4, srcl+1); int anchor = (*p == '^') ? (p++, 1) : 0; int n = 0; MatchState ms; luaL_Buffer b; luaL_argcheck(L, tr == LUA_TNUMBER || tr == LUA_TSTRING || tr == LUA_TFUNCTION || tr == LUA_TTABLE, 3, "string/function/table expected"); luaL_buffinit(L, &b); ms.L = L; ms.src_init = src; ms.src_end = src+srcl; while (n < max_s) { const char *e; ms.level = 0; e = match(&ms, src, p); if (e) { n++; add_value(&ms, &b, src, e); } if (e && e>src) /* non empty match? */ src = e; /* skip it */ else if (src < ms.src_end) luaL_addchar(&b, *src++); else break; if (anchor) break; } luaL_addlstring(&b, src, ms.src_end-src); luaL_pushresult(&b); lua_pushinteger(L, n); /* number of substitutions */ return 2; } /* }====================================================== */ /* maximum size of each formatted item (> len(format('%99.99f', -1e308))) */ #define MAX_ITEM 512 /* valid flags in a format specification */ #define FLAGS "-+ #0" /* ** maximum size of each format specification (such as '%-099.99d') ** (+10 accounts for %99.99x plus margin of error) */ #define MAX_FORMAT (sizeof(FLAGS) + sizeof(LUA_INTFRMLEN) + 10) static void addquoted (lua_State *L, luaL_Buffer *b, int arg) { size_t l; const char *s = luaL_checklstring(L, arg, &l); luaL_addchar(b, '"'); while (l--) { switch (*s) { case '"': case '\\': case '\n': { luaL_addchar(b, '\\'); luaL_addchar(b, *s); break; } case '\r': { luaL_addlstring(b, "\\r", 2); break; } case '\0': { luaL_addlstring(b, "\\000", 4); break; } default: { luaL_addchar(b, *s); break; } } s++; } luaL_addchar(b, '"'); } static const char *scanformat (lua_State *L, const char *strfrmt, char *form) { const char *p = strfrmt; while (*p != '\0' && strchr(FLAGS, *p) != NULL) p++; /* skip flags */ if ((size_t)(p - strfrmt) >= sizeof(FLAGS)) luaL_error(L, "invalid format (repeated flags)"); if (isdigit(uchar(*p))) p++; /* skip width */ if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ if (*p == '.') { p++; if (isdigit(uchar(*p))) p++; /* skip precision */ if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ } if (isdigit(uchar(*p))) luaL_error(L, "invalid format (width or precision too long)"); *(form++) = '%'; strncpy(form, strfrmt, p - strfrmt + 1); form += p - strfrmt + 1; *form = '\0'; return p; } static void addintlen (char *form) { size_t l = strlen(form); char spec = form[l - 1]; strcpy(form + l - 1, LUA_INTFRMLEN); form[l + sizeof(LUA_INTFRMLEN) - 2] = spec; form[l + sizeof(LUA_INTFRMLEN) - 1] = '\0'; } static int str_format (lua_State *L) { int top = lua_gettop(L); int arg = 1; size_t sfl; const char *strfrmt = luaL_checklstring(L, arg, &sfl); const char *strfrmt_end = strfrmt+sfl; luaL_Buffer b; luaL_buffinit(L, &b); while (strfrmt < strfrmt_end) { if (*strfrmt != L_ESC) luaL_addchar(&b, *strfrmt++); else if (*++strfrmt == L_ESC) luaL_addchar(&b, *strfrmt++); /* %% */ else { /* format item */ char form[MAX_FORMAT]; /* to store the format (`%...') */ char buff[MAX_ITEM]; /* to store the formatted item */ if (++arg > top) luaL_argerror(L, arg, "no value"); strfrmt = scanformat(L, strfrmt, form); switch (*strfrmt++) { case 'c': { sprintf(buff, form, (int)luaL_checknumber(L, arg)); break; } case 'd': case 'i': { addintlen(form); sprintf(buff, form, (LUA_INTFRM_T)luaL_checknumber(L, arg)); break; } case 'o': case 'u': case 'x': case 'X': { addintlen(form); sprintf(buff, form, (unsigned LUA_INTFRM_T)luaL_checknumber(L, arg)); break; } case 'e': case 'E': case 'f': case 'g': case 'G': { sprintf(buff, form, (double)luaL_checknumber(L, arg)); break; } case 'q': { addquoted(L, &b, arg); continue; /* skip the 'addsize' at the end */ } case 's': { size_t l; const char *s = luaL_checklstring(L, arg, &l); if (!strchr(form, '.') && l >= 100) { /* no precision and string is too long to be formatted; keep original string */ lua_pushvalue(L, arg); luaL_addvalue(&b); continue; /* skip the `addsize' at the end */ } else { sprintf(buff, form, s); break; } } default: { /* also treat cases `pnLlh' */ return luaL_error(L, "invalid option " LUA_QL("%%%c") " to " LUA_QL("format"), *(strfrmt - 1)); } } luaL_addlstring(&b, buff, strlen(buff)); } } luaL_pushresult(&b); return 1; } static const luaL_Reg strlib[] = { {"byte", str_byte}, {"char", str_char}, {"dump", str_dump}, {"find", str_find}, {"format", str_format}, {"gfind", gfind_nodef}, {"gmatch", gmatch}, {"gsub", str_gsub}, {"len", str_len}, {"lower", str_lower}, {"match", str_match}, {"rep", str_rep}, {"reverse", str_reverse}, {"sub", str_sub}, {"upper", str_upper}, {NULL, NULL} }; static void createmetatable (lua_State *L) { lua_createtable(L, 0, 1); /* create metatable for strings */ lua_pushliteral(L, ""); /* dummy string */ lua_pushvalue(L, -2); lua_setmetatable(L, -2); /* set string metatable */ lua_pop(L, 1); /* pop dummy string */ lua_pushvalue(L, -2); /* string library... */ lua_setfield(L, -2, "__index"); /* ...is the __index metamethod */ lua_pop(L, 1); /* pop metatable */ } /* ** Open string library */ LUALIB_API int luaopen_string (lua_State *L) { luaL_register(L, LUA_STRLIBNAME, strlib); #if defined(LUA_COMPAT_GFIND) lua_getfield(L, -1, "gmatch"); lua_setfield(L, -2, "gfind"); #endif createmetatable(L); return 1; } genometools-1.5.1/src/external/lua-5.1.5/src/ltable.c000066400000000000000000000376071211610345200221150ustar00rootroot00000000000000/* ** $Id: ltable.c,v 2.32.1.2 2007/12/28 15:32:23 roberto Exp $ ** Lua tables (hash) ** See Copyright Notice in lua.h */ /* ** Implementation of tables (aka arrays, objects, or hash tables). ** Tables keep its elements in two parts: an array part and a hash part. ** Non-negative integer keys are all candidates to be kept in the array ** part. The actual size of the array is the largest `n' such that at ** least half the slots between 0 and n are in use. ** Hash uses a mix of chained scatter table with Brent's variation. ** A main invariant of these tables is that, if an element is not ** in its main position (i.e. the `original' position that its hash gives ** to it), then the colliding element is in its own main position. ** Hence even when the load factor reaches 100%, performance remains good. */ #include #include #define ltable_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" #include "ltable.h" /* ** max size of array part is 2^MAXBITS */ #if LUAI_BITSINT > 26 #define MAXBITS 26 #else #define MAXBITS (LUAI_BITSINT-2) #endif #define MAXASIZE (1 << MAXBITS) #define hashpow2(t,n) (gnode(t, lmod((n), sizenode(t)))) #define hashstr(t,str) hashpow2(t, (str)->tsv.hash) #define hashboolean(t,p) hashpow2(t, p) /* ** for some types, it is better to avoid modulus by power of 2, as ** they tend to have many 2 factors. */ #define hashmod(t,n) (gnode(t, ((n) % ((sizenode(t)-1)|1)))) #define hashpointer(t,p) hashmod(t, IntPoint(p)) /* ** number of ints inside a lua_Number */ #define numints cast_int(sizeof(lua_Number)/sizeof(int)) #define dummynode (&dummynode_) static const Node dummynode_ = { {{NULL}, LUA_TNIL}, /* value */ {{{NULL}, LUA_TNIL, NULL}} /* key */ }; /* ** hash for lua_Numbers */ static Node *hashnum (const Table *t, lua_Number n) { unsigned int a[numints]; int i; if (luai_numeq(n, 0)) /* avoid problems with -0 */ return gnode(t, 0); memcpy(a, &n, sizeof(a)); for (i = 1; i < numints; i++) a[0] += a[i]; return hashmod(t, a[0]); } /* ** returns the `main' position of an element in a table (that is, the index ** of its hash value) */ static Node *mainposition (const Table *t, const TValue *key) { switch (ttype(key)) { case LUA_TNUMBER: return hashnum(t, nvalue(key)); case LUA_TSTRING: return hashstr(t, rawtsvalue(key)); case LUA_TBOOLEAN: return hashboolean(t, bvalue(key)); case LUA_TLIGHTUSERDATA: return hashpointer(t, pvalue(key)); default: return hashpointer(t, gcvalue(key)); } } /* ** returns the index for `key' if `key' is an appropriate key to live in ** the array part of the table, -1 otherwise. */ static int arrayindex (const TValue *key) { if (ttisnumber(key)) { lua_Number n = nvalue(key); int k; lua_number2int(k, n); if (luai_numeq(cast_num(k), n)) return k; } return -1; /* `key' did not match some condition */ } /* ** returns the index of a `key' for table traversals. First goes all ** elements in the array part, then elements in the hash part. The ** beginning of a traversal is signalled by -1. */ static int findindex (lua_State *L, Table *t, StkId key) { int i; if (ttisnil(key)) return -1; /* first iteration */ i = arrayindex(key); if (0 < i && i <= t->sizearray) /* is `key' inside array part? */ return i-1; /* yes; that's the index (corrected to C) */ else { Node *n = mainposition(t, key); do { /* check whether `key' is somewhere in the chain */ /* key may be dead already, but it is ok to use it in `next' */ if (luaO_rawequalObj(key2tval(n), key) || (ttype(gkey(n)) == LUA_TDEADKEY && iscollectable(key) && gcvalue(gkey(n)) == gcvalue(key))) { i = cast_int(n - gnode(t, 0)); /* key index in hash table */ /* hash elements are numbered after array ones */ return i + t->sizearray; } else n = gnext(n); } while (n); luaG_runerror(L, "invalid key to " LUA_QL("next")); /* key not found */ return 0; /* to avoid warnings */ } } int luaH_next (lua_State *L, Table *t, StkId key) { int i = findindex(L, t, key); /* find original element */ for (i++; i < t->sizearray; i++) { /* try first array part */ if (!ttisnil(&t->array[i])) { /* a non-nil value? */ setnvalue(key, cast_num(i+1)); setobj2s(L, key+1, &t->array[i]); return 1; } } for (i -= t->sizearray; i < sizenode(t); i++) { /* then hash part */ if (!ttisnil(gval(gnode(t, i)))) { /* a non-nil value? */ setobj2s(L, key, key2tval(gnode(t, i))); setobj2s(L, key+1, gval(gnode(t, i))); return 1; } } return 0; /* no more elements */ } /* ** {============================================================= ** Rehash ** ============================================================== */ static int computesizes (int nums[], int *narray) { int i; int twotoi; /* 2^i */ int a = 0; /* number of elements smaller than 2^i */ int na = 0; /* number of elements to go to array part */ int n = 0; /* optimal size for array part */ for (i = 0, twotoi = 1; twotoi/2 < *narray; i++, twotoi *= 2) { if (nums[i] > 0) { a += nums[i]; if (a > twotoi/2) { /* more than half elements present? */ n = twotoi; /* optimal size (till now) */ na = a; /* all elements smaller than n will go to array part */ } } if (a == *narray) break; /* all elements already counted */ } *narray = n; lua_assert(*narray/2 <= na && na <= *narray); return na; } static int countint (const TValue *key, int *nums) { int k = arrayindex(key); if (0 < k && k <= MAXASIZE) { /* is `key' an appropriate array index? */ nums[ceillog2(k)]++; /* count as such */ return 1; } else return 0; } static int numusearray (const Table *t, int *nums) { int lg; int ttlg; /* 2^lg */ int ause = 0; /* summation of `nums' */ int i = 1; /* count to traverse all array keys */ for (lg=0, ttlg=1; lg<=MAXBITS; lg++, ttlg*=2) { /* for each slice */ int lc = 0; /* counter */ int lim = ttlg; if (lim > t->sizearray) { lim = t->sizearray; /* adjust upper limit */ if (i > lim) break; /* no more elements to count */ } /* count elements in range (2^(lg-1), 2^lg] */ for (; i <= lim; i++) { if (!ttisnil(&t->array[i-1])) lc++; } nums[lg] += lc; ause += lc; } return ause; } static int numusehash (const Table *t, int *nums, int *pnasize) { int totaluse = 0; /* total number of elements */ int ause = 0; /* summation of `nums' */ int i = sizenode(t); while (i--) { Node *n = &t->node[i]; if (!ttisnil(gval(n))) { ause += countint(key2tval(n), nums); totaluse++; } } *pnasize += ause; return totaluse; } static void setarrayvector (lua_State *L, Table *t, int size) { int i; luaM_reallocvector(L, t->array, t->sizearray, size, TValue); for (i=t->sizearray; iarray[i]); t->sizearray = size; } static void setnodevector (lua_State *L, Table *t, int size) { int lsize; if (size == 0) { /* no elements to hash part? */ t->node = cast(Node *, dummynode); /* use common `dummynode' */ lsize = 0; } else { int i; lsize = ceillog2(size); if (lsize > MAXBITS) luaG_runerror(L, "table overflow"); size = twoto(lsize); t->node = luaM_newvector(L, size, Node); for (i=0; ilsizenode = cast_byte(lsize); t->lastfree = gnode(t, size); /* all positions are free */ } static void resize (lua_State *L, Table *t, int nasize, int nhsize) { int i; int oldasize = t->sizearray; int oldhsize = t->lsizenode; Node *nold = t->node; /* save old hash ... */ if (nasize > oldasize) /* array part must grow? */ setarrayvector(L, t, nasize); /* create new hash part with appropriate size */ setnodevector(L, t, nhsize); if (nasize < oldasize) { /* array part must shrink? */ t->sizearray = nasize; /* re-insert elements from vanishing slice */ for (i=nasize; iarray[i])) setobjt2t(L, luaH_setnum(L, t, i+1), &t->array[i]); } /* shrink array */ luaM_reallocvector(L, t->array, oldasize, nasize, TValue); } /* re-insert elements from hash part */ for (i = twoto(oldhsize) - 1; i >= 0; i--) { Node *old = nold+i; if (!ttisnil(gval(old))) setobjt2t(L, luaH_set(L, t, key2tval(old)), gval(old)); } if (nold != dummynode) luaM_freearray(L, nold, twoto(oldhsize), Node); /* free old array */ } void luaH_resizearray (lua_State *L, Table *t, int nasize) { int nsize = (t->node == dummynode) ? 0 : sizenode(t); resize(L, t, nasize, nsize); } static void rehash (lua_State *L, Table *t, const TValue *ek) { int nasize, na; int nums[MAXBITS+1]; /* nums[i] = number of keys between 2^(i-1) and 2^i */ int i; int totaluse; for (i=0; i<=MAXBITS; i++) nums[i] = 0; /* reset counts */ nasize = numusearray(t, nums); /* count keys in array part */ totaluse = nasize; /* all those keys are integer keys */ totaluse += numusehash(t, nums, &nasize); /* count keys in hash part */ /* count extra key */ nasize += countint(ek, nums); totaluse++; /* compute new size for array part */ na = computesizes(nums, &nasize); /* resize the table to new computed sizes */ resize(L, t, nasize, totaluse - na); } /* ** }============================================================= */ Table *luaH_new (lua_State *L, int narray, int nhash) { Table *t = luaM_new(L, Table); luaC_link(L, obj2gco(t), LUA_TTABLE); t->metatable = NULL; t->flags = cast_byte(~0); /* temporary values (kept only if some malloc fails) */ t->array = NULL; t->sizearray = 0; t->lsizenode = 0; t->node = cast(Node *, dummynode); setarrayvector(L, t, narray); setnodevector(L, t, nhash); return t; } void luaH_free (lua_State *L, Table *t) { if (t->node != dummynode) luaM_freearray(L, t->node, sizenode(t), Node); luaM_freearray(L, t->array, t->sizearray, TValue); luaM_free(L, t); } static Node *getfreepos (Table *t) { while (t->lastfree-- > t->node) { if (ttisnil(gkey(t->lastfree))) return t->lastfree; } return NULL; /* could not find a free place */ } /* ** inserts a new key into a hash table; first, check whether key's main ** position is free. If not, check whether colliding node is in its main ** position or not: if it is not, move colliding node to an empty place and ** put new key in its main position; otherwise (colliding node is in its main ** position), new key goes to an empty position. */ static TValue *newkey (lua_State *L, Table *t, const TValue *key) { Node *mp = mainposition(t, key); if (!ttisnil(gval(mp)) || mp == dummynode) { Node *othern; Node *n = getfreepos(t); /* get a free place */ if (n == NULL) { /* cannot find a free place? */ rehash(L, t, key); /* grow table */ return luaH_set(L, t, key); /* re-insert key into grown table */ } lua_assert(n != dummynode); othern = mainposition(t, key2tval(mp)); if (othern != mp) { /* is colliding node out of its main position? */ /* yes; move colliding node into free position */ while (gnext(othern) != mp) othern = gnext(othern); /* find previous */ gnext(othern) = n; /* redo the chain with `n' in place of `mp' */ *n = *mp; /* copy colliding node into free pos. (mp->next also goes) */ gnext(mp) = NULL; /* now `mp' is free */ setnilvalue(gval(mp)); } else { /* colliding node is in its own main position */ /* new node will go into free position */ gnext(n) = gnext(mp); /* chain new position */ gnext(mp) = n; mp = n; } } gkey(mp)->value = key->value; gkey(mp)->tt = key->tt; luaC_barriert(L, t, key); lua_assert(ttisnil(gval(mp))); return gval(mp); } /* ** search function for integers */ const TValue *luaH_getnum (Table *t, int key) { /* (1 <= key && key <= t->sizearray) */ if (cast(unsigned int, key-1) < cast(unsigned int, t->sizearray)) return &t->array[key-1]; else { lua_Number nk = cast_num(key); Node *n = hashnum(t, nk); do { /* check whether `key' is somewhere in the chain */ if (ttisnumber(gkey(n)) && luai_numeq(nvalue(gkey(n)), nk)) return gval(n); /* that's it */ else n = gnext(n); } while (n); return luaO_nilobject; } } /* ** search function for strings */ const TValue *luaH_getstr (Table *t, TString *key) { Node *n = hashstr(t, key); do { /* check whether `key' is somewhere in the chain */ if (ttisstring(gkey(n)) && rawtsvalue(gkey(n)) == key) return gval(n); /* that's it */ else n = gnext(n); } while (n); return luaO_nilobject; } /* ** main search function */ const TValue *luaH_get (Table *t, const TValue *key) { switch (ttype(key)) { case LUA_TNIL: return luaO_nilobject; case LUA_TSTRING: return luaH_getstr(t, rawtsvalue(key)); case LUA_TNUMBER: { int k; lua_Number n = nvalue(key); lua_number2int(k, n); if (luai_numeq(cast_num(k), nvalue(key))) /* index is int? */ return luaH_getnum(t, k); /* use specialized version */ /* else go through */ } default: { Node *n = mainposition(t, key); do { /* check whether `key' is somewhere in the chain */ if (luaO_rawequalObj(key2tval(n), key)) return gval(n); /* that's it */ else n = gnext(n); } while (n); return luaO_nilobject; } } } TValue *luaH_set (lua_State *L, Table *t, const TValue *key) { const TValue *p = luaH_get(t, key); t->flags = 0; if (p != luaO_nilobject) return cast(TValue *, p); else { if (ttisnil(key)) luaG_runerror(L, "table index is nil"); else if (ttisnumber(key) && luai_numisnan(nvalue(key))) luaG_runerror(L, "table index is NaN"); return newkey(L, t, key); } } TValue *luaH_setnum (lua_State *L, Table *t, int key) { const TValue *p = luaH_getnum(t, key); if (p != luaO_nilobject) return cast(TValue *, p); else { TValue k; setnvalue(&k, cast_num(key)); return newkey(L, t, &k); } } TValue *luaH_setstr (lua_State *L, Table *t, TString *key) { const TValue *p = luaH_getstr(t, key); if (p != luaO_nilobject) return cast(TValue *, p); else { TValue k; setsvalue(L, &k, key); return newkey(L, t, &k); } } static int unbound_search (Table *t, unsigned int j) { unsigned int i = j; /* i is zero or a present index */ j++; /* find `i' and `j' such that i is present and j is not */ while (!ttisnil(luaH_getnum(t, j))) { i = j; j *= 2; if (j > cast(unsigned int, MAX_INT)) { /* overflow? */ /* table was built with bad purposes: resort to linear search */ i = 1; while (!ttisnil(luaH_getnum(t, i))) i++; return i - 1; } } /* now do a binary search between them */ while (j - i > 1) { unsigned int m = (i+j)/2; if (ttisnil(luaH_getnum(t, m))) j = m; else i = m; } return i; } /* ** Try to find a boundary in table `t'. A `boundary' is an integer index ** such that t[i] is non-nil and t[i+1] is nil (and 0 if t[1] is nil). */ int luaH_getn (Table *t) { unsigned int j = t->sizearray; if (j > 0 && ttisnil(&t->array[j - 1])) { /* there is a boundary in the array part: (binary) search for it */ unsigned int i = 0; while (j - i > 1) { unsigned int m = (i+j)/2; if (ttisnil(&t->array[m - 1])) j = m; else i = m; } return i; } /* else must find a boundary in hash part */ else if (t->node == dummynode) /* hash part is empty? */ return j; /* that is easy... */ else return unbound_search(t, j); } #if defined(LUA_DEBUG) Node *luaH_mainposition (const Table *t, const TValue *key) { return mainposition(t, key); } int luaH_isdummy (Node *n) { return n == dummynode; } #endif genometools-1.5.1/src/external/lua-5.1.5/src/ltable.h000066400000000000000000000022401211610345200221030ustar00rootroot00000000000000/* ** $Id: ltable.h,v 2.10.1.1 2007/12/27 13:02:25 roberto Exp $ ** Lua tables (hash) ** See Copyright Notice in lua.h */ #ifndef ltable_h #define ltable_h #include "lobject.h" #define gnode(t,i) (&(t)->node[i]) #define gkey(n) (&(n)->i_key.nk) #define gval(n) (&(n)->i_val) #define gnext(n) ((n)->i_key.nk.next) #define key2tval(n) (&(n)->i_key.tvk) LUAI_FUNC const TValue *luaH_getnum (Table *t, int key); LUAI_FUNC TValue *luaH_setnum (lua_State *L, Table *t, int key); LUAI_FUNC const TValue *luaH_getstr (Table *t, TString *key); LUAI_FUNC TValue *luaH_setstr (lua_State *L, Table *t, TString *key); LUAI_FUNC const TValue *luaH_get (Table *t, const TValue *key); LUAI_FUNC TValue *luaH_set (lua_State *L, Table *t, const TValue *key); LUAI_FUNC Table *luaH_new (lua_State *L, int narray, int lnhash); LUAI_FUNC void luaH_resizearray (lua_State *L, Table *t, int nasize); LUAI_FUNC void luaH_free (lua_State *L, Table *t); LUAI_FUNC int luaH_next (lua_State *L, Table *t, StkId key); LUAI_FUNC int luaH_getn (Table *t); #if defined(LUA_DEBUG) LUAI_FUNC Node *luaH_mainposition (const Table *t, const TValue *key); LUAI_FUNC int luaH_isdummy (Node *n); #endif #endif genometools-1.5.1/src/external/lua-5.1.5/src/ltablib.c000066400000000000000000000162571211610345200222610ustar00rootroot00000000000000/* ** $Id: ltablib.c,v 1.38.1.3 2008/02/14 16:46:58 roberto Exp $ ** Library for Table Manipulation ** See Copyright Notice in lua.h */ #include #define ltablib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" #define aux_getn(L,n) (luaL_checktype(L, n, LUA_TTABLE), luaL_getn(L, n)) static int foreachi (lua_State *L) { int i; int n = aux_getn(L, 1); luaL_checktype(L, 2, LUA_TFUNCTION); for (i=1; i <= n; i++) { lua_pushvalue(L, 2); /* function */ lua_pushinteger(L, i); /* 1st argument */ lua_rawgeti(L, 1, i); /* 2nd argument */ lua_call(L, 2, 1); if (!lua_isnil(L, -1)) return 1; lua_pop(L, 1); /* remove nil result */ } return 0; } static int foreach (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); luaL_checktype(L, 2, LUA_TFUNCTION); lua_pushnil(L); /* first key */ while (lua_next(L, 1)) { lua_pushvalue(L, 2); /* function */ lua_pushvalue(L, -3); /* key */ lua_pushvalue(L, -3); /* value */ lua_call(L, 2, 1); if (!lua_isnil(L, -1)) return 1; lua_pop(L, 2); /* remove value and result */ } return 0; } static int maxn (lua_State *L) { lua_Number max = 0; luaL_checktype(L, 1, LUA_TTABLE); lua_pushnil(L); /* first key */ while (lua_next(L, 1)) { lua_pop(L, 1); /* remove value */ if (lua_type(L, -1) == LUA_TNUMBER) { lua_Number v = lua_tonumber(L, -1); if (v > max) max = v; } } lua_pushnumber(L, max); return 1; } static int getn (lua_State *L) { lua_pushinteger(L, aux_getn(L, 1)); return 1; } static int setn (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); #ifndef luaL_setn luaL_setn(L, 1, luaL_checkint(L, 2)); #else luaL_error(L, LUA_QL("setn") " is obsolete"); #endif lua_pushvalue(L, 1); return 1; } static int tinsert (lua_State *L) { int e = aux_getn(L, 1) + 1; /* first empty element */ int pos; /* where to insert new element */ switch (lua_gettop(L)) { case 2: { /* called with only 2 arguments */ pos = e; /* insert new element at the end */ break; } case 3: { int i; pos = luaL_checkint(L, 2); /* 2nd argument is the position */ if (pos > e) e = pos; /* `grow' array if necessary */ for (i = e; i > pos; i--) { /* move up elements */ lua_rawgeti(L, 1, i-1); lua_rawseti(L, 1, i); /* t[i] = t[i-1] */ } break; } default: { return luaL_error(L, "wrong number of arguments to " LUA_QL("insert")); } } luaL_setn(L, 1, e); /* new size */ lua_rawseti(L, 1, pos); /* t[pos] = v */ return 0; } static int tremove (lua_State *L) { int e = aux_getn(L, 1); int pos = luaL_optint(L, 2, e); if (!(1 <= pos && pos <= e)) /* position is outside bounds? */ return 0; /* nothing to remove */ luaL_setn(L, 1, e - 1); /* t.n = n-1 */ lua_rawgeti(L, 1, pos); /* result = t[pos] */ for ( ;pos= P */ while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) { if (i>u) luaL_error(L, "invalid order function for sorting"); lua_pop(L, 1); /* remove a[i] */ } /* repeat --j until a[j] <= P */ while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) { if (j #define ltm_c #define LUA_CORE #include "lua.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" const char *const luaT_typenames[] = { "nil", "boolean", "userdata", "number", "string", "table", "function", "userdata", "thread", "proto", "upval" }; void luaT_init (lua_State *L) { static const char *const luaT_eventname[] = { /* ORDER TM */ "__index", "__newindex", "__gc", "__mode", "__eq", "__add", "__sub", "__mul", "__div", "__mod", "__pow", "__unm", "__len", "__lt", "__le", "__concat", "__call" }; int i; for (i=0; itmname[i] = luaS_new(L, luaT_eventname[i]); luaS_fix(G(L)->tmname[i]); /* never collect these names */ } } /* ** function to be used with macro "fasttm": optimized for absence of ** tag methods */ const TValue *luaT_gettm (Table *events, TMS event, TString *ename) { const TValue *tm = luaH_getstr(events, ename); lua_assert(event <= TM_EQ); if (ttisnil(tm)) { /* no tag method? */ events->flags |= cast_byte(1u<metatable; break; case LUA_TUSERDATA: mt = uvalue(o)->metatable; break; default: mt = G(L)->mt[ttype(o)]; } return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject); } genometools-1.5.1/src/external/lua-5.1.5/src/ltm.h000066400000000000000000000017721211610345200214450ustar00rootroot00000000000000/* ** $Id: ltm.h,v 2.6.1.1 2007/12/27 13:02:25 roberto Exp $ ** Tag methods ** See Copyright Notice in lua.h */ #ifndef ltm_h #define ltm_h #include "lobject.h" /* * WARNING: if you change the order of this enumeration, * grep "ORDER TM" */ typedef enum { TM_INDEX, TM_NEWINDEX, TM_GC, TM_MODE, TM_EQ, /* last tag method with `fast' access */ TM_ADD, TM_SUB, TM_MUL, TM_DIV, TM_MOD, TM_POW, TM_UNM, TM_LEN, TM_LT, TM_LE, TM_CONCAT, TM_CALL, TM_N /* number of elements in the enum */ } TMS; #define gfasttm(g,et,e) ((et) == NULL ? NULL : \ ((et)->flags & (1u<<(e))) ? NULL : luaT_gettm(et, e, (g)->tmname[e])) #define fasttm(l,et,e) gfasttm(G(l), et, e) LUAI_DATA const char *const luaT_typenames[]; LUAI_FUNC const TValue *luaT_gettm (Table *events, TMS event, TString *ename); LUAI_FUNC const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event); LUAI_FUNC void luaT_init (lua_State *L); #endif genometools-1.5.1/src/external/lua-5.1.5/src/lua.c000066400000000000000000000236631211610345200214300ustar00rootroot00000000000000/* ** $Id: lua.c,v 1.160.1.2 2007/12/28 15:32:23 roberto Exp $ ** Lua stand-alone interpreter ** See Copyright Notice in lua.h */ #include #include #include #include #define lua_c #include "lua.h" #include "lauxlib.h" #include "lualib.h" static lua_State *globalL = NULL; static const char *progname = LUA_PROGNAME; static void lstop (lua_State *L, lua_Debug *ar) { (void)ar; /* unused arg. */ lua_sethook(L, NULL, 0, 0); luaL_error(L, "interrupted!"); } static void laction (int i) { signal(i, SIG_DFL); /* if another SIGINT happens before lstop, terminate process (default action) */ lua_sethook(globalL, lstop, LUA_MASKCALL | LUA_MASKRET | LUA_MASKCOUNT, 1); } static void print_usage (void) { fprintf(stderr, "usage: %s [options] [script [args]].\n" "Available options are:\n" " -e stat execute string " LUA_QL("stat") "\n" " -l name require library " LUA_QL("name") "\n" " -i enter interactive mode after executing " LUA_QL("script") "\n" " -v show version information\n" " -- stop handling options\n" " - execute stdin and stop handling options\n" , progname); fflush(stderr); } static void l_message (const char *pname, const char *msg) { if (pname) fprintf(stderr, "%s: ", pname); fprintf(stderr, "%s\n", msg); fflush(stderr); } static int report (lua_State *L, int status) { if (status && !lua_isnil(L, -1)) { const char *msg = lua_tostring(L, -1); if (msg == NULL) msg = "(error object is not a string)"; l_message(progname, msg); lua_pop(L, 1); } return status; } static int traceback (lua_State *L) { if (!lua_isstring(L, 1)) /* 'message' not a string? */ return 1; /* keep it intact */ lua_getfield(L, LUA_GLOBALSINDEX, "debug"); if (!lua_istable(L, -1)) { lua_pop(L, 1); return 1; } lua_getfield(L, -1, "traceback"); if (!lua_isfunction(L, -1)) { lua_pop(L, 2); return 1; } lua_pushvalue(L, 1); /* pass error message */ lua_pushinteger(L, 2); /* skip this function and traceback */ lua_call(L, 2, 1); /* call debug.traceback */ return 1; } static int docall (lua_State *L, int narg, int clear) { int status; int base = lua_gettop(L) - narg; /* function index */ lua_pushcfunction(L, traceback); /* push traceback function */ lua_insert(L, base); /* put it under chunk and args */ signal(SIGINT, laction); status = lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base); signal(SIGINT, SIG_DFL); lua_remove(L, base); /* remove traceback function */ /* force a complete garbage collection in case of errors */ if (status != 0) lua_gc(L, LUA_GCCOLLECT, 0); return status; } static void print_version (void) { l_message(NULL, LUA_RELEASE " " LUA_COPYRIGHT); } static int getargs (lua_State *L, char **argv, int n) { int narg; int i; int argc = 0; while (argv[argc]) argc++; /* count total number of arguments */ narg = argc - (n + 1); /* number of arguments to the script */ luaL_checkstack(L, narg + 3, "too many arguments to script"); for (i=n+1; i < argc; i++) lua_pushstring(L, argv[i]); lua_createtable(L, narg, n + 1); for (i=0; i < argc; i++) { lua_pushstring(L, argv[i]); lua_rawseti(L, -2, i - n); } return narg; } static int dofile (lua_State *L, const char *name) { int status = luaL_loadfile(L, name) || docall(L, 0, 1); return report(L, status); } static int dostring (lua_State *L, const char *s, const char *name) { int status = luaL_loadbuffer(L, s, strlen(s), name) || docall(L, 0, 1); return report(L, status); } static int dolibrary (lua_State *L, const char *name) { lua_getglobal(L, "require"); lua_pushstring(L, name); return report(L, docall(L, 1, 1)); } static const char *get_prompt (lua_State *L, int firstline) { const char *p; lua_getfield(L, LUA_GLOBALSINDEX, firstline ? "_PROMPT" : "_PROMPT2"); p = lua_tostring(L, -1); if (p == NULL) p = (firstline ? LUA_PROMPT : LUA_PROMPT2); lua_pop(L, 1); /* remove global */ return p; } static int incomplete (lua_State *L, int status) { if (status == LUA_ERRSYNTAX) { size_t lmsg; const char *msg = lua_tolstring(L, -1, &lmsg); const char *tp = msg + lmsg - (sizeof(LUA_QL("")) - 1); if (strstr(msg, LUA_QL("")) == tp) { lua_pop(L, 1); return 1; } } return 0; /* else... */ } static int pushline (lua_State *L, int firstline) { char buffer[LUA_MAXINPUT]; char *b = buffer; size_t l; const char *prmt = get_prompt(L, firstline); if (lua_readline(L, b, prmt) == 0) return 0; /* no input */ l = strlen(b); if (l > 0 && b[l-1] == '\n') /* line ends with newline? */ b[l-1] = '\0'; /* remove it */ if (firstline && b[0] == '=') /* first line starts with `=' ? */ lua_pushfstring(L, "return %s", b+1); /* change it to `return' */ else lua_pushstring(L, b); lua_freeline(L, b); return 1; } static int loadline (lua_State *L) { int status; lua_settop(L, 0); if (!pushline(L, 1)) return -1; /* no input */ for (;;) { /* repeat until gets a complete line */ status = luaL_loadbuffer(L, lua_tostring(L, 1), lua_strlen(L, 1), "=stdin"); if (!incomplete(L, status)) break; /* cannot try to add lines? */ if (!pushline(L, 0)) /* no more input? */ return -1; lua_pushliteral(L, "\n"); /* add a new line... */ lua_insert(L, -2); /* ...between the two lines */ lua_concat(L, 3); /* join them */ } lua_saveline(L, 1); lua_remove(L, 1); /* remove line */ return status; } static void dotty (lua_State *L) { int status; const char *oldprogname = progname; progname = NULL; while ((status = loadline(L)) != -1) { if (status == 0) status = docall(L, 0, 0); report(L, status); if (status == 0 && lua_gettop(L) > 0) { /* any result to print? */ lua_getglobal(L, "print"); lua_insert(L, 1); if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0) l_message(progname, lua_pushfstring(L, "error calling " LUA_QL("print") " (%s)", lua_tostring(L, -1))); } } lua_settop(L, 0); /* clear stack */ fputs("\n", stdout); fflush(stdout); progname = oldprogname; } static int handle_script (lua_State *L, char **argv, int n) { int status; const char *fname; int narg = getargs(L, argv, n); /* collect arguments */ lua_setglobal(L, "arg"); fname = argv[n]; if (strcmp(fname, "-") == 0 && strcmp(argv[n-1], "--") != 0) fname = NULL; /* stdin */ status = luaL_loadfile(L, fname); lua_insert(L, -(narg+1)); if (status == 0) status = docall(L, narg, 0); else lua_pop(L, narg); return report(L, status); } /* check that argument has no extra characters at the end */ #define notail(x) {if ((x)[2] != '\0') return -1;} static int collectargs (char **argv, int *pi, int *pv, int *pe) { int i; for (i = 1; argv[i] != NULL; i++) { if (argv[i][0] != '-') /* not an option? */ return i; switch (argv[i][1]) { /* option */ case '-': notail(argv[i]); return (argv[i+1] != NULL ? i+1 : 0); case '\0': return i; case 'i': notail(argv[i]); *pi = 1; /* go through */ case 'v': notail(argv[i]); *pv = 1; break; case 'e': *pe = 1; /* go through */ case 'l': if (argv[i][2] == '\0') { i++; if (argv[i] == NULL) return -1; } break; default: return -1; /* invalid option */ } } return 0; } static int runargs (lua_State *L, char **argv, int n) { int i; for (i = 1; i < n; i++) { if (argv[i] == NULL) continue; lua_assert(argv[i][0] == '-'); switch (argv[i][1]) { /* option */ case 'e': { const char *chunk = argv[i] + 2; if (*chunk == '\0') chunk = argv[++i]; lua_assert(chunk != NULL); if (dostring(L, chunk, "=(command line)") != 0) return 1; break; } case 'l': { const char *filename = argv[i] + 2; if (*filename == '\0') filename = argv[++i]; lua_assert(filename != NULL); if (dolibrary(L, filename)) return 1; /* stop if file fails */ break; } default: break; } } return 0; } static int handle_luainit (lua_State *L) { const char *init = getenv(LUA_INIT); if (init == NULL) return 0; /* status OK */ else if (init[0] == '@') return dofile(L, init+1); else return dostring(L, init, "=" LUA_INIT); } struct Smain { int argc; char **argv; int status; }; static int pmain (lua_State *L) { struct Smain *s = (struct Smain *)lua_touserdata(L, 1); char **argv = s->argv; int script; int has_i = 0, has_v = 0, has_e = 0; globalL = L; if (argv[0] && argv[0][0]) progname = argv[0]; lua_gc(L, LUA_GCSTOP, 0); /* stop collector during initialization */ luaL_openlibs(L); /* open libraries */ lua_gc(L, LUA_GCRESTART, 0); s->status = handle_luainit(L); if (s->status != 0) return 0; script = collectargs(argv, &has_i, &has_v, &has_e); if (script < 0) { /* invalid args? */ print_usage(); s->status = 1; return 0; } if (has_v) print_version(); s->status = runargs(L, argv, (script > 0) ? script : s->argc); if (s->status != 0) return 0; if (script) s->status = handle_script(L, argv, script); if (s->status != 0) return 0; if (has_i) dotty(L); else if (script == 0 && !has_e && !has_v) { if (lua_stdin_is_tty()) { print_version(); dotty(L); } else dofile(L, NULL); /* executes stdin as a file */ } return 0; } int main (int argc, char **argv) { int status; struct Smain s; lua_State *L = lua_open(); /* create state */ if (L == NULL) { l_message(argv[0], "cannot create state: not enough memory"); return EXIT_FAILURE; } s.argc = argc; s.argv = argv; status = lua_cpcall(L, &pmain, &s); report(L, status); lua_close(L); return (status || s.status) ? EXIT_FAILURE : EXIT_SUCCESS; } genometools-1.5.1/src/external/lua-5.1.5/src/lua.h000066400000000000000000000266501211610345200214340ustar00rootroot00000000000000/* ** $Id: lua.h,v 1.218.1.7 2012/01/13 20:36:20 roberto Exp $ ** Lua - An Extensible Extension Language ** Lua.org, PUC-Rio, Brazil (http://www.lua.org) ** See Copyright Notice at the end of this file */ #ifndef lua_h #define lua_h #include #include #include "luaconf.h" #define LUA_VERSION "Lua 5.1" #define LUA_RELEASE "Lua 5.1.5" #define LUA_VERSION_NUM 501 #define LUA_COPYRIGHT "Copyright (C) 1994-2012 Lua.org, PUC-Rio" #define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes" /* mark for precompiled code (`Lua') */ #define LUA_SIGNATURE "\033Lua" /* option for multiple returns in `lua_pcall' and `lua_call' */ #define LUA_MULTRET (-1) /* ** pseudo-indices */ #define LUA_REGISTRYINDEX (-10000) #define LUA_ENVIRONINDEX (-10001) #define LUA_GLOBALSINDEX (-10002) #define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i)) /* thread status; 0 is OK */ #define LUA_YIELD 1 #define LUA_ERRRUN 2 #define LUA_ERRSYNTAX 3 #define LUA_ERRMEM 4 #define LUA_ERRERR 5 typedef struct lua_State lua_State; typedef int (*lua_CFunction) (lua_State *L); /* ** functions that read/write blocks when loading/dumping Lua chunks */ typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud); /* ** prototype for memory-allocation functions */ typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); /* ** basic types */ #define LUA_TNONE (-1) #define LUA_TNIL 0 #define LUA_TBOOLEAN 1 #define LUA_TLIGHTUSERDATA 2 #define LUA_TNUMBER 3 #define LUA_TSTRING 4 #define LUA_TTABLE 5 #define LUA_TFUNCTION 6 #define LUA_TUSERDATA 7 #define LUA_TTHREAD 8 /* minimum Lua stack available to a C function */ #define LUA_MINSTACK 20 /* ** generic extra include file */ #if defined(LUA_USER_H) #include LUA_USER_H #endif /* type of numbers in Lua */ typedef LUA_NUMBER lua_Number; /* type for integer functions */ typedef LUA_INTEGER lua_Integer; /* ** state manipulation */ LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); LUA_API void (lua_close) (lua_State *L); LUA_API lua_State *(lua_newthread) (lua_State *L); LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); /* ** basic stack manipulation */ LUA_API int (lua_gettop) (lua_State *L); LUA_API void (lua_settop) (lua_State *L, int idx); LUA_API void (lua_pushvalue) (lua_State *L, int idx); LUA_API void (lua_remove) (lua_State *L, int idx); LUA_API void (lua_insert) (lua_State *L, int idx); LUA_API void (lua_replace) (lua_State *L, int idx); LUA_API int (lua_checkstack) (lua_State *L, int sz); LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); /* ** access functions (stack -> C) */ LUA_API int (lua_isnumber) (lua_State *L, int idx); LUA_API int (lua_isstring) (lua_State *L, int idx); LUA_API int (lua_iscfunction) (lua_State *L, int idx); LUA_API int (lua_isuserdata) (lua_State *L, int idx); LUA_API int (lua_type) (lua_State *L, int idx); LUA_API const char *(lua_typename) (lua_State *L, int tp); LUA_API int (lua_equal) (lua_State *L, int idx1, int idx2); LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2); LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx); LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx); LUA_API int (lua_toboolean) (lua_State *L, int idx); LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); LUA_API size_t (lua_objlen) (lua_State *L, int idx); LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); LUA_API void *(lua_touserdata) (lua_State *L, int idx); LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); LUA_API const void *(lua_topointer) (lua_State *L, int idx); /* ** push functions (C -> stack) */ LUA_API void (lua_pushnil) (lua_State *L); LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); LUA_API void (lua_pushlstring) (lua_State *L, const char *s, size_t l); LUA_API void (lua_pushstring) (lua_State *L, const char *s); LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, va_list argp); LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); LUA_API void (lua_pushboolean) (lua_State *L, int b); LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); LUA_API int (lua_pushthread) (lua_State *L); /* ** get functions (Lua -> stack) */ LUA_API void (lua_gettable) (lua_State *L, int idx); LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k); LUA_API void (lua_rawget) (lua_State *L, int idx); LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n); LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); LUA_API int (lua_getmetatable) (lua_State *L, int objindex); LUA_API void (lua_getfenv) (lua_State *L, int idx); /* ** set functions (stack -> Lua) */ LUA_API void (lua_settable) (lua_State *L, int idx); LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); LUA_API void (lua_rawset) (lua_State *L, int idx); LUA_API void (lua_rawseti) (lua_State *L, int idx, int n); LUA_API int (lua_setmetatable) (lua_State *L, int objindex); LUA_API int (lua_setfenv) (lua_State *L, int idx); /* ** `load' and `call' functions (load and run Lua code) */ LUA_API void (lua_call) (lua_State *L, int nargs, int nresults); LUA_API int (lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc); LUA_API int (lua_cpcall) (lua_State *L, lua_CFunction func, void *ud); LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, const char *chunkname); LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data); /* ** coroutine functions */ LUA_API int (lua_yield) (lua_State *L, int nresults); LUA_API int (lua_resume) (lua_State *L, int narg); LUA_API int (lua_status) (lua_State *L); /* ** garbage-collection function and options */ #define LUA_GCSTOP 0 #define LUA_GCRESTART 1 #define LUA_GCCOLLECT 2 #define LUA_GCCOUNT 3 #define LUA_GCCOUNTB 4 #define LUA_GCSTEP 5 #define LUA_GCSETPAUSE 6 #define LUA_GCSETSTEPMUL 7 LUA_API int (lua_gc) (lua_State *L, int what, int data); /* ** miscellaneous functions */ LUA_API int (lua_error) (lua_State *L); LUA_API int (lua_next) (lua_State *L, int idx); LUA_API void (lua_concat) (lua_State *L, int n); LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud); /* ** =============================================================== ** some useful macros ** =============================================================== */ #define lua_pop(L,n) lua_settop(L, -(n)-1) #define lua_newtable(L) lua_createtable(L, 0, 0) #define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) #define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) #define lua_strlen(L,i) lua_objlen(L, (i)) #define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) #define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) #define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) #define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) #define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) #define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) #define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) #define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) #define lua_pushliteral(L, s) \ lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) #define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, (s)) #define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s)) #define lua_tostring(L,i) lua_tolstring(L, (i), NULL) /* ** compatibility macros and functions */ #define lua_open() luaL_newstate() #define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX) #define lua_getgccount(L) lua_gc(L, LUA_GCCOUNT, 0) #define lua_Chunkreader lua_Reader #define lua_Chunkwriter lua_Writer /* hack */ LUA_API void lua_setlevel (lua_State *from, lua_State *to); /* ** {====================================================================== ** Debug API ** ======================================================================= */ /* ** Event codes */ #define LUA_HOOKCALL 0 #define LUA_HOOKRET 1 #define LUA_HOOKLINE 2 #define LUA_HOOKCOUNT 3 #define LUA_HOOKTAILRET 4 /* ** Event masks */ #define LUA_MASKCALL (1 << LUA_HOOKCALL) #define LUA_MASKRET (1 << LUA_HOOKRET) #define LUA_MASKLINE (1 << LUA_HOOKLINE) #define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) typedef struct lua_Debug lua_Debug; /* activation record */ /* Functions to be called by the debuger in specific events */ typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar); LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar); LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n); LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n); LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n); LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n); LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count); LUA_API lua_Hook lua_gethook (lua_State *L); LUA_API int lua_gethookmask (lua_State *L); LUA_API int lua_gethookcount (lua_State *L); struct lua_Debug { int event; const char *name; /* (n) */ const char *namewhat; /* (n) `global', `local', `field', `method' */ const char *what; /* (S) `Lua', `C', `main', `tail' */ const char *source; /* (S) */ int currentline; /* (l) */ int nups; /* (u) number of upvalues */ int linedefined; /* (S) */ int lastlinedefined; /* (S) */ char short_src[LUA_IDSIZE]; /* (S) */ /* private part */ int i_ci; /* active function */ }; /* }====================================================================== */ /****************************************************************************** * Copyright (C) 1994-2012 Lua.org, PUC-Rio. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ******************************************************************************/ #endif genometools-1.5.1/src/external/lua-5.1.5/src/luac.c000066400000000000000000000110651211610345200215640ustar00rootroot00000000000000/* ** $Id: luac.c,v 1.54 2006/06/02 17:37:11 lhf Exp $ ** Lua compiler (saves bytecodes to files; also list bytecodes) ** See Copyright Notice in lua.h */ #include #include #include #include #define luac_c #define LUA_CORE #include "lua.h" #include "lauxlib.h" #include "ldo.h" #include "lfunc.h" #include "lmem.h" #include "lobject.h" #include "lopcodes.h" #include "lstring.h" #include "lundump.h" #define PROGNAME "luac" /* default program name */ #define OUTPUT PROGNAME ".out" /* default output file */ static int listing=0; /* list bytecodes? */ static int dumping=1; /* dump bytecodes? */ static int stripping=0; /* strip debug information? */ static char Output[]={ OUTPUT }; /* default output file name */ static const char* output=Output; /* actual output file name */ static const char* progname=PROGNAME; /* actual program name */ static void fatal(const char* message) { fprintf(stderr,"%s: %s\n",progname,message); exit(EXIT_FAILURE); } static void cannot(const char* what) { fprintf(stderr,"%s: cannot %s %s: %s\n",progname,what,output,strerror(errno)); exit(EXIT_FAILURE); } static void usage(const char* message) { if (*message=='-') fprintf(stderr,"%s: unrecognized option " LUA_QS "\n",progname,message); else fprintf(stderr,"%s: %s\n",progname,message); fprintf(stderr, "usage: %s [options] [filenames].\n" "Available options are:\n" " - process stdin\n" " -l list\n" " -o name output to file " LUA_QL("name") " (default is \"%s\")\n" " -p parse only\n" " -s strip debug information\n" " -v show version information\n" " -- stop handling options\n", progname,Output); exit(EXIT_FAILURE); } #define IS(s) (strcmp(argv[i],s)==0) static int doargs(int argc, char* argv[]) { int i; int version=0; if (argv[0]!=NULL && *argv[0]!=0) progname=argv[0]; for (i=1; itop+(i))->l.p) static const Proto* combine(lua_State* L, int n) { if (n==1) return toproto(L,-1); else { int i,pc; Proto* f=luaF_newproto(L); setptvalue2s(L,L->top,f); incr_top(L); f->source=luaS_newliteral(L,"=(" PROGNAME ")"); f->maxstacksize=1; pc=2*n+1; f->code=luaM_newvector(L,pc,Instruction); f->sizecode=pc; f->p=luaM_newvector(L,n,Proto*); f->sizep=n; pc=0; for (i=0; ip[i]=toproto(L,i-n-1); f->code[pc++]=CREATE_ABx(OP_CLOSURE,0,i); f->code[pc++]=CREATE_ABC(OP_CALL,0,1,1); } f->code[pc++]=CREATE_ABC(OP_RETURN,0,1,0); return f; } } static int writer(lua_State* L, const void* p, size_t size, void* u) { UNUSED(L); return (fwrite(p,size,1,(FILE*)u)!=1) && (size!=0); } struct Smain { int argc; char** argv; }; static int pmain(lua_State* L) { struct Smain* s = (struct Smain*)lua_touserdata(L, 1); int argc=s->argc; char** argv=s->argv; const Proto* f; int i; if (!lua_checkstack(L,argc)) fatal("too many input files"); for (i=0; i1); if (dumping) { FILE* D= (output==NULL) ? stdout : fopen(output,"wb"); if (D==NULL) cannot("open"); lua_lock(L); luaU_dump(L,f,writer,D,stripping); lua_unlock(L); if (ferror(D)) cannot("write"); if (fclose(D)) cannot("close"); } return 0; } int main(int argc, char* argv[]) { lua_State* L; struct Smain s; int i=doargs(argc,argv); argc-=i; argv+=i; if (argc<=0) usage("no input files given"); L=lua_open(); if (L==NULL) fatal("not enough memory for state"); s.argc=argc; s.argv=argv; if (lua_cpcall(L,pmain,&s)!=0) fatal(lua_tostring(L,-1)); lua_close(L); return EXIT_SUCCESS; } genometools-1.5.1/src/external/lua-5.1.5/src/luaconf.h000066400000000000000000000534331211610345200223010ustar00rootroot00000000000000/* ** $Id: luaconf.h,v 1.82.1.7 2008/02/11 16:25:08 roberto Exp $ ** Configuration file for Lua ** See Copyright Notice in lua.h */ #ifndef lconfig_h #define lconfig_h #include #include /* ** ================================================================== ** Search for "@@" to find all configurable definitions. ** =================================================================== */ /* @@ LUA_ANSI controls the use of non-ansi features. ** CHANGE it (define it) if you want Lua to avoid the use of any ** non-ansi feature or library. */ #if defined(__STRICT_ANSI__) #define LUA_ANSI #endif #if !defined(LUA_ANSI) && defined(_WIN32) #define LUA_WIN #endif #if defined(LUA_USE_LINUX) #define LUA_USE_POSIX #define LUA_USE_DLOPEN /* needs an extra library: -ldl */ #define LUA_USE_READLINE /* needs some extra libraries */ #endif #if defined(LUA_USE_MACOSX) #define LUA_USE_POSIX #define LUA_DL_DYLD /* does not need extra library */ #endif /* @@ LUA_USE_POSIX includes all functionallity listed as X/Open System @* Interfaces Extension (XSI). ** CHANGE it (define it) if your system is XSI compatible. */ #if defined(LUA_USE_POSIX) #define LUA_USE_MKSTEMP #define LUA_USE_ISATTY #define LUA_USE_POPEN #define LUA_USE_ULONGJMP #endif /* @@ LUA_PATH and LUA_CPATH are the names of the environment variables that @* Lua check to set its paths. @@ LUA_INIT is the name of the environment variable that Lua @* checks for initialization code. ** CHANGE them if you want different names. */ #define LUA_PATH "LUA_PATH" #define LUA_CPATH "LUA_CPATH" #define LUA_INIT "LUA_INIT" /* @@ LUA_PATH_DEFAULT is the default path that Lua uses to look for @* Lua libraries. @@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for @* C libraries. ** CHANGE them if your machine has a non-conventional directory ** hierarchy or if you want to install your libraries in ** non-conventional directories. */ #if defined(_WIN32) /* ** In Windows, any exclamation mark ('!') in the path is replaced by the ** path of the directory of the executable file of the current process. */ #define LUA_LDIR "!\\lua\\" #define LUA_CDIR "!\\" #define LUA_PATH_DEFAULT \ ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua" #define LUA_CPATH_DEFAULT \ ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" #else #define LUA_ROOT "/usr/local/" #define LUA_LDIR LUA_ROOT "share/lua/5.1/" #define LUA_CDIR LUA_ROOT "lib/lua/5.1/" #define LUA_PATH_DEFAULT \ "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" #define LUA_CPATH_DEFAULT \ "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so" #endif /* @@ LUA_DIRSEP is the directory separator (for submodules). ** CHANGE it if your machine does not use "/" as the directory separator ** and is not Windows. (On Windows Lua automatically uses "\".) */ #if defined(_WIN32) #define LUA_DIRSEP "\\" #else #define LUA_DIRSEP "/" #endif /* @@ LUA_PATHSEP is the character that separates templates in a path. @@ LUA_PATH_MARK is the string that marks the substitution points in a @* template. @@ LUA_EXECDIR in a Windows path is replaced by the executable's @* directory. @@ LUA_IGMARK is a mark to ignore all before it when bulding the @* luaopen_ function name. ** CHANGE them if for some reason your system cannot use those ** characters. (E.g., if one of those characters is a common character ** in file/directory names.) Probably you do not need to change them. */ #define LUA_PATHSEP ";" #define LUA_PATH_MARK "?" #define LUA_EXECDIR "!" #define LUA_IGMARK "-" /* @@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger. ** CHANGE that if ptrdiff_t is not adequate on your machine. (On most ** machines, ptrdiff_t gives a good choice between int or long.) */ #define LUA_INTEGER ptrdiff_t /* @@ LUA_API is a mark for all core API functions. @@ LUALIB_API is a mark for all standard library functions. ** CHANGE them if you need to define those functions in some special way. ** For instance, if you want to create one Windows DLL with the core and ** the libraries, you may want to use the following definition (define ** LUA_BUILD_AS_DLL to get it). */ #if defined(LUA_BUILD_AS_DLL) #if defined(LUA_CORE) || defined(LUA_LIB) #define LUA_API __declspec(dllexport) #else #define LUA_API __declspec(dllimport) #endif #else #define LUA_API extern #endif /* more often than not the libs go together with the core */ #define LUALIB_API LUA_API /* @@ LUAI_FUNC is a mark for all extern functions that are not to be @* exported to outside modules. @@ LUAI_DATA is a mark for all extern (const) variables that are not to @* be exported to outside modules. ** CHANGE them if you need to mark them in some special way. Elf/gcc ** (versions 3.2 and later) mark them as "hidden" to optimize access ** when Lua is compiled as a shared library. */ #if defined(luaall_c) #define LUAI_FUNC static #define LUAI_DATA /* empty */ #elif defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ defined(__ELF__) #define LUAI_FUNC __attribute__((visibility("hidden"))) extern #define LUAI_DATA LUAI_FUNC #else #define LUAI_FUNC extern #define LUAI_DATA extern #endif /* @@ LUA_QL describes how error messages quote program elements. ** CHANGE it if you want a different appearance. */ #define LUA_QL(x) "'" x "'" #define LUA_QS LUA_QL("%s") /* @@ LUA_IDSIZE gives the maximum size for the description of the source @* of a function in debug information. ** CHANGE it if you want a different size. */ #define LUA_IDSIZE 60 /* ** {================================================================== ** Stand-alone configuration ** =================================================================== */ #if defined(lua_c) || defined(luaall_c) /* @@ lua_stdin_is_tty detects whether the standard input is a 'tty' (that @* is, whether we're running lua interactively). ** CHANGE it if you have a better definition for non-POSIX/non-Windows ** systems. */ #if defined(LUA_USE_ISATTY) #include #define lua_stdin_is_tty() isatty(0) #elif defined(LUA_WIN) #include #include #define lua_stdin_is_tty() _isatty(_fileno(stdin)) #else #define lua_stdin_is_tty() 1 /* assume stdin is a tty */ #endif /* @@ LUA_PROMPT is the default prompt used by stand-alone Lua. @@ LUA_PROMPT2 is the default continuation prompt used by stand-alone Lua. ** CHANGE them if you want different prompts. (You can also change the ** prompts dynamically, assigning to globals _PROMPT/_PROMPT2.) */ #define LUA_PROMPT "> " #define LUA_PROMPT2 ">> " /* @@ LUA_PROGNAME is the default name for the stand-alone Lua program. ** CHANGE it if your stand-alone interpreter has a different name and ** your system is not able to detect that name automatically. */ #define LUA_PROGNAME "lua" /* @@ LUA_MAXINPUT is the maximum length for an input line in the @* stand-alone interpreter. ** CHANGE it if you need longer lines. */ #define LUA_MAXINPUT 512 /* @@ lua_readline defines how to show a prompt and then read a line from @* the standard input. @@ lua_saveline defines how to "save" a read line in a "history". @@ lua_freeline defines how to free a line read by lua_readline. ** CHANGE them if you want to improve this functionality (e.g., by using ** GNU readline and history facilities). */ #if defined(LUA_USE_READLINE) #include #include #include #define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL) #define lua_saveline(L,idx) \ if (lua_strlen(L,idx) > 0) /* non-empty line? */ \ add_history(lua_tostring(L, idx)); /* add it to history */ #define lua_freeline(L,b) ((void)L, free(b)) #else #define lua_readline(L,b,p) \ ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \ fgets(b, LUA_MAXINPUT, stdin) != NULL) /* get line */ #define lua_saveline(L,idx) { (void)L; (void)idx; } #define lua_freeline(L,b) { (void)L; (void)b; } #endif #endif /* }================================================================== */ /* @@ LUAI_GCPAUSE defines the default pause between garbage-collector cycles @* as a percentage. ** CHANGE it if you want the GC to run faster or slower (higher values ** mean larger pauses which mean slower collection.) You can also change ** this value dynamically. */ #define LUAI_GCPAUSE 200 /* 200% (wait memory to double before next GC) */ /* @@ LUAI_GCMUL defines the default speed of garbage collection relative to @* memory allocation as a percentage. ** CHANGE it if you want to change the granularity of the garbage ** collection. (Higher values mean coarser collections. 0 represents ** infinity, where each step performs a full collection.) You can also ** change this value dynamically. */ #define LUAI_GCMUL 200 /* GC runs 'twice the speed' of memory allocation */ /* @@ LUA_COMPAT_GETN controls compatibility with old getn behavior. ** CHANGE it (define it) if you want exact compatibility with the ** behavior of setn/getn in Lua 5.0. */ #undef LUA_COMPAT_GETN /* @@ LUA_COMPAT_LOADLIB controls compatibility about global loadlib. ** CHANGE it to undefined as soon as you do not need a global 'loadlib' ** function (the function is still available as 'package.loadlib'). */ #undef LUA_COMPAT_LOADLIB /* @@ LUA_COMPAT_VARARG controls compatibility with old vararg feature. ** CHANGE it to undefined as soon as your programs use only '...' to ** access vararg parameters (instead of the old 'arg' table). */ #define LUA_COMPAT_VARARG /* @@ LUA_COMPAT_MOD controls compatibility with old math.mod function. ** CHANGE it to undefined as soon as your programs use 'math.fmod' or ** the new '%' operator instead of 'math.mod'. */ #define LUA_COMPAT_MOD /* @@ LUA_COMPAT_LSTR controls compatibility with old long string nesting @* facility. ** CHANGE it to 2 if you want the old behaviour, or undefine it to turn ** off the advisory error when nesting [[...]]. */ #define LUA_COMPAT_LSTR 1 /* @@ LUA_COMPAT_GFIND controls compatibility with old 'string.gfind' name. ** CHANGE it to undefined as soon as you rename 'string.gfind' to ** 'string.gmatch'. */ #define LUA_COMPAT_GFIND /* @@ LUA_COMPAT_OPENLIB controls compatibility with old 'luaL_openlib' @* behavior. ** CHANGE it to undefined as soon as you replace to 'luaL_register' ** your uses of 'luaL_openlib' */ #define LUA_COMPAT_OPENLIB /* @@ luai_apicheck is the assert macro used by the Lua-C API. ** CHANGE luai_apicheck if you want Lua to perform some checks in the ** parameters it gets from API calls. This may slow down the interpreter ** a bit, but may be quite useful when debugging C code that interfaces ** with Lua. A useful redefinition is to use assert.h. */ #if defined(LUA_USE_APICHECK) #include #define luai_apicheck(L,o) { (void)L; assert(o); } #else #define luai_apicheck(L,o) { (void)L; } #endif /* @@ LUAI_BITSINT defines the number of bits in an int. ** CHANGE here if Lua cannot automatically detect the number of bits of ** your machine. Probably you do not need to change this. */ /* avoid overflows in comparison */ #if INT_MAX-20 < 32760 #define LUAI_BITSINT 16 #elif INT_MAX > 2147483640L /* int has at least 32 bits */ #define LUAI_BITSINT 32 #else #error "you must define LUA_BITSINT with number of bits in an integer" #endif /* @@ LUAI_UINT32 is an unsigned integer with at least 32 bits. @@ LUAI_INT32 is an signed integer with at least 32 bits. @@ LUAI_UMEM is an unsigned integer big enough to count the total @* memory used by Lua. @@ LUAI_MEM is a signed integer big enough to count the total memory @* used by Lua. ** CHANGE here if for some weird reason the default definitions are not ** good enough for your machine. (The definitions in the 'else' ** part always works, but may waste space on machines with 64-bit ** longs.) Probably you do not need to change this. */ #if LUAI_BITSINT >= 32 #define LUAI_UINT32 unsigned int #define LUAI_INT32 int #define LUAI_MAXINT32 INT_MAX #define LUAI_UMEM size_t #define LUAI_MEM ptrdiff_t #else /* 16-bit ints */ #define LUAI_UINT32 unsigned long #define LUAI_INT32 long #define LUAI_MAXINT32 LONG_MAX #define LUAI_UMEM unsigned long #define LUAI_MEM long #endif /* @@ LUAI_MAXCALLS limits the number of nested calls. ** CHANGE it if you need really deep recursive calls. This limit is ** arbitrary; its only purpose is to stop infinite recursion before ** exhausting memory. */ #define LUAI_MAXCALLS 20000 /* @@ LUAI_MAXCSTACK limits the number of Lua stack slots that a C function @* can use. ** CHANGE it if you need lots of (Lua) stack space for your C ** functions. This limit is arbitrary; its only purpose is to stop C ** functions to consume unlimited stack space. (must be smaller than ** -LUA_REGISTRYINDEX) */ #define LUAI_MAXCSTACK 8000 /* ** {================================================================== ** CHANGE (to smaller values) the following definitions if your system ** has a small C stack. (Or you may want to change them to larger ** values if your system has a large C stack and these limits are ** too rigid for you.) Some of these constants control the size of ** stack-allocated arrays used by the compiler or the interpreter, while ** others limit the maximum number of recursive calls that the compiler ** or the interpreter can perform. Values too large may cause a C stack ** overflow for some forms of deep constructs. ** =================================================================== */ /* @@ LUAI_MAXCCALLS is the maximum depth for nested C calls (short) and @* syntactical nested non-terminals in a program. */ #define LUAI_MAXCCALLS 200 /* @@ LUAI_MAXVARS is the maximum number of local variables per function @* (must be smaller than 250). */ #define LUAI_MAXVARS 200 /* @@ LUAI_MAXUPVALUES is the maximum number of upvalues per function @* (must be smaller than 250). */ #define LUAI_MAXUPVALUES 60 /* @@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. */ #define LUAL_BUFFERSIZE BUFSIZ /* }================================================================== */ /* ** {================================================================== @@ LUA_NUMBER is the type of numbers in Lua. ** CHANGE the following definitions only if you want to build Lua ** with a number type different from double. You may also need to ** change lua_number2int & lua_number2integer. ** =================================================================== */ #define LUA_NUMBER_DOUBLE #define LUA_NUMBER double /* @@ LUAI_UACNUMBER is the result of an 'usual argument conversion' @* over a number. */ #define LUAI_UACNUMBER double /* @@ LUA_NUMBER_SCAN is the format for reading numbers. @@ LUA_NUMBER_FMT is the format for writing numbers. @@ lua_number2str converts a number to a string. @@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. @@ lua_str2number converts a string to a number. */ #define LUA_NUMBER_SCAN "%lf" #define LUA_NUMBER_FMT "%.14g" #define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) #define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ #define lua_str2number(s,p) strtod((s), (p)) /* @@ The luai_num* macros define the primitive operations over numbers. */ #if defined(LUA_CORE) #include #define luai_numadd(a,b) ((a)+(b)) #define luai_numsub(a,b) ((a)-(b)) #define luai_nummul(a,b) ((a)*(b)) #define luai_numdiv(a,b) ((a)/(b)) #define luai_nummod(a,b) ((a) - floor((a)/(b))*(b)) #define luai_numpow(a,b) (pow(a,b)) #define luai_numunm(a) (-(a)) #define luai_numeq(a,b) ((a)==(b)) #define luai_numlt(a,b) ((a)<(b)) #define luai_numle(a,b) ((a)<=(b)) #define luai_numisnan(a) (!luai_numeq((a), (a))) #endif /* @@ lua_number2int is a macro to convert lua_Number to int. @@ lua_number2integer is a macro to convert lua_Number to lua_Integer. ** CHANGE them if you know a faster way to convert a lua_Number to ** int (with any rounding method and without throwing errors) in your ** system. In Pentium machines, a naive typecast from double to int ** in C is extremely slow, so any alternative is worth trying. */ /* On a Pentium, resort to a trick */ #if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) && !defined(__SSE2__) && \ (defined(__i386) || defined (_M_IX86) || defined(__i386__)) /* On a Microsoft compiler, use assembler */ #if defined(_MSC_VER) #define lua_number2int(i,d) __asm fld d __asm fistp i #define lua_number2integer(i,n) lua_number2int(i, n) /* the next trick should work on any Pentium, but sometimes clashes with a DirectX idiosyncrasy */ #else union luai_Cast { double l_d; long l_l; }; #define lua_number2int(i,d) \ { volatile union luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; } #define lua_number2integer(i,n) lua_number2int(i, n) #endif /* this option always works, but may be slow */ #else #define lua_number2int(i,d) ((i)=(int)(d)) #define lua_number2integer(i,d) ((i)=(lua_Integer)(d)) #endif /* }================================================================== */ /* @@ LUAI_USER_ALIGNMENT_T is a type that requires maximum alignment. ** CHANGE it if your system requires alignments larger than double. (For ** instance, if your system supports long doubles and they must be ** aligned in 16-byte boundaries, then you should add long double in the ** union.) Probably you do not need to change this. */ #define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; } /* @@ LUAI_THROW/LUAI_TRY define how Lua does exception handling. ** CHANGE them if you prefer to use longjmp/setjmp even with C++ ** or if want/don't to use _longjmp/_setjmp instead of regular ** longjmp/setjmp. By default, Lua handles errors with exceptions when ** compiling as C++ code, with _longjmp/_setjmp when asked to use them, ** and with longjmp/setjmp otherwise. */ #if defined(__cplusplus) /* C++ exceptions */ #define LUAI_THROW(L,c) throw(c) #define LUAI_TRY(L,c,a) try { a } catch(...) \ { if ((c)->status == 0) (c)->status = -1; } #define luai_jmpbuf int /* dummy variable */ #elif defined(LUA_USE_ULONGJMP) /* in Unix, try _longjmp/_setjmp (more efficient) */ #define LUAI_THROW(L,c) _longjmp((c)->b, 1) #define LUAI_TRY(L,c,a) if (_setjmp((c)->b) == 0) { a } #define luai_jmpbuf jmp_buf #else /* default handling with long jumps */ #define LUAI_THROW(L,c) longjmp((c)->b, 1) #define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a } #define luai_jmpbuf jmp_buf #endif /* @@ LUA_MAXCAPTURES is the maximum number of captures that a pattern @* can do during pattern-matching. ** CHANGE it if you need more captures. This limit is arbitrary. */ #define LUA_MAXCAPTURES 32 /* @@ lua_tmpnam is the function that the OS library uses to create a @* temporary name. @@ LUA_TMPNAMBUFSIZE is the maximum size of a name created by lua_tmpnam. ** CHANGE them if you have an alternative to tmpnam (which is considered ** insecure) or if you want the original tmpnam anyway. By default, Lua ** uses tmpnam except when POSIX is available, where it uses mkstemp. */ #if defined(loslib_c) || defined(luaall_c) #if defined(LUA_USE_MKSTEMP) #include #define LUA_TMPNAMBUFSIZE 32 #define lua_tmpnam(b,e) { \ strcpy(b, "/tmp/lua_XXXXXX"); \ e = mkstemp(b); \ if (e != -1) close(e); \ e = (e == -1); } #else #define LUA_TMPNAMBUFSIZE L_tmpnam #define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); } #endif #endif /* @@ lua_popen spawns a new process connected to the current one through @* the file streams. ** CHANGE it if you have a way to implement it in your system. */ #if defined(LUA_USE_POPEN) #define lua_popen(L,c,m) ((void)L, fflush(NULL), popen(c,m)) #define lua_pclose(L,file) ((void)L, (pclose(file) != -1)) #elif defined(LUA_WIN) #define lua_popen(L,c,m) ((void)L, _popen(c,m)) #define lua_pclose(L,file) ((void)L, (_pclose(file) != -1)) #else #define lua_popen(L,c,m) ((void)((void)c, m), \ luaL_error(L, LUA_QL("popen") " not supported"), (FILE*)0) #define lua_pclose(L,file) ((void)((void)L, file), 0) #endif /* @@ LUA_DL_* define which dynamic-library system Lua should use. ** CHANGE here if Lua has problems choosing the appropriate ** dynamic-library system for your platform (either Windows' DLL, Mac's ** dyld, or Unix's dlopen). If your system is some kind of Unix, there ** is a good chance that it has dlopen, so LUA_DL_DLOPEN will work for ** it. To use dlopen you also need to adapt the src/Makefile (probably ** adding -ldl to the linker options), so Lua does not select it ** automatically. (When you change the makefile to add -ldl, you must ** also add -DLUA_USE_DLOPEN.) ** If you do not want any kind of dynamic library, undefine all these ** options. ** By default, _WIN32 gets LUA_DL_DLL and MAC OS X gets LUA_DL_DYLD. */ #if defined(LUA_USE_DLOPEN) #define LUA_DL_DLOPEN #endif #if defined(LUA_WIN) #define LUA_DL_DLL #endif /* @@ LUAI_EXTRASPACE allows you to add user-specific data in a lua_State @* (the data goes just *before* the lua_State pointer). ** CHANGE (define) this if you really need that. This value must be ** a multiple of the maximum alignment required for your machine. */ #define LUAI_EXTRASPACE 0 /* @@ luai_userstate* allow user-specific actions on threads. ** CHANGE them if you defined LUAI_EXTRASPACE and need to do something ** extra when a thread is created/deleted/resumed/yielded. */ #define luai_userstateopen(L) ((void)L) #define luai_userstateclose(L) ((void)L) #define luai_userstatethread(L,L1) ((void)L) #define luai_userstatefree(L) ((void)L) #define luai_userstateresume(L,n) ((void)L) #define luai_userstateyield(L,n) ((void)L) /* @@ LUA_INTFRMLEN is the length modifier for integer conversions @* in 'string.format'. @@ LUA_INTFRM_T is the integer type correspoding to the previous length @* modifier. ** CHANGE them if your system supports long long or does not support long. */ #if defined(LUA_USELONGLONG) #define LUA_INTFRMLEN "ll" #define LUA_INTFRM_T long long #else #define LUA_INTFRMLEN "l" #define LUA_INTFRM_T long #endif /* =================================================================== */ /* ** Local configuration. You can use this space to add your redefinitions ** without modifying the main part of the file. */ #endif genometools-1.5.1/src/external/lua-5.1.5/src/lualib.h000066400000000000000000000020021211610345200221040ustar00rootroot00000000000000/* ** $Id: lualib.h,v 1.36.1.1 2007/12/27 13:02:25 roberto Exp $ ** Lua standard libraries ** See Copyright Notice in lua.h */ #ifndef lualib_h #define lualib_h #include "lua.h" /* Key to file-handle type */ #define LUA_FILEHANDLE "FILE*" #define LUA_COLIBNAME "coroutine" LUALIB_API int (luaopen_base) (lua_State *L); #define LUA_TABLIBNAME "table" LUALIB_API int (luaopen_table) (lua_State *L); #define LUA_IOLIBNAME "io" LUALIB_API int (luaopen_io) (lua_State *L); #define LUA_OSLIBNAME "os" LUALIB_API int (luaopen_os) (lua_State *L); #define LUA_STRLIBNAME "string" LUALIB_API int (luaopen_string) (lua_State *L); #define LUA_MATHLIBNAME "math" LUALIB_API int (luaopen_math) (lua_State *L); #define LUA_DBLIBNAME "debug" LUALIB_API int (luaopen_debug) (lua_State *L); #define LUA_LOADLIBNAME "package" LUALIB_API int (luaopen_package) (lua_State *L); /* open all previous libraries */ LUALIB_API void (luaL_openlibs) (lua_State *L); #ifndef lua_assert #define lua_assert(x) ((void)0) #endif #endif genometools-1.5.1/src/external/lua-5.1.5/src/lundump.c000066400000000000000000000110251211610345200223200ustar00rootroot00000000000000/* ** $Id: lundump.c,v 2.7.1.4 2008/04/04 19:51:41 roberto Exp $ ** load precompiled Lua chunks ** See Copyright Notice in lua.h */ #include #define lundump_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lmem.h" #include "lobject.h" #include "lstring.h" #include "lundump.h" #include "lzio.h" typedef struct { lua_State* L; ZIO* Z; Mbuffer* b; const char* name; } LoadState; #ifdef LUAC_TRUST_BINARIES #define IF(c,s) #define error(S,s) #else #define IF(c,s) if (c) error(S,s) static void error(LoadState* S, const char* why) { luaO_pushfstring(S->L,"%s: %s in precompiled chunk",S->name,why); luaD_throw(S->L,LUA_ERRSYNTAX); } #endif #define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size)) #define LoadByte(S) (lu_byte)LoadChar(S) #define LoadVar(S,x) LoadMem(S,&x,1,sizeof(x)) #define LoadVector(S,b,n,size) LoadMem(S,b,n,size) static void LoadBlock(LoadState* S, void* b, size_t size) { size_t r=luaZ_read(S->Z,b,size); IF (r!=0, "unexpected end"); } static int LoadChar(LoadState* S) { char x; LoadVar(S,x); return x; } static int LoadInt(LoadState* S) { int x; LoadVar(S,x); IF (x<0, "bad integer"); return x; } static lua_Number LoadNumber(LoadState* S) { lua_Number x; LoadVar(S,x); return x; } static TString* LoadString(LoadState* S) { size_t size; LoadVar(S,size); if (size==0) return NULL; else { char* s=luaZ_openspace(S->L,S->b,size); LoadBlock(S,s,size); return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */ } } static void LoadCode(LoadState* S, Proto* f) { int n=LoadInt(S); f->code=luaM_newvector(S->L,n,Instruction); f->sizecode=n; LoadVector(S,f->code,n,sizeof(Instruction)); } static Proto* LoadFunction(LoadState* S, TString* p); static void LoadConstants(LoadState* S, Proto* f) { int i,n; n=LoadInt(S); f->k=luaM_newvector(S->L,n,TValue); f->sizek=n; for (i=0; ik[i]); for (i=0; ik[i]; int t=LoadChar(S); switch (t) { case LUA_TNIL: setnilvalue(o); break; case LUA_TBOOLEAN: setbvalue(o,LoadChar(S)!=0); break; case LUA_TNUMBER: setnvalue(o,LoadNumber(S)); break; case LUA_TSTRING: setsvalue2n(S->L,o,LoadString(S)); break; default: error(S,"bad constant"); break; } } n=LoadInt(S); f->p=luaM_newvector(S->L,n,Proto*); f->sizep=n; for (i=0; ip[i]=NULL; for (i=0; ip[i]=LoadFunction(S,f->source); } static void LoadDebug(LoadState* S, Proto* f) { int i,n; n=LoadInt(S); f->lineinfo=luaM_newvector(S->L,n,int); f->sizelineinfo=n; LoadVector(S,f->lineinfo,n,sizeof(int)); n=LoadInt(S); f->locvars=luaM_newvector(S->L,n,LocVar); f->sizelocvars=n; for (i=0; ilocvars[i].varname=NULL; for (i=0; ilocvars[i].varname=LoadString(S); f->locvars[i].startpc=LoadInt(S); f->locvars[i].endpc=LoadInt(S); } n=LoadInt(S); f->upvalues=luaM_newvector(S->L,n,TString*); f->sizeupvalues=n; for (i=0; iupvalues[i]=NULL; for (i=0; iupvalues[i]=LoadString(S); } static Proto* LoadFunction(LoadState* S, TString* p) { Proto* f; if (++S->L->nCcalls > LUAI_MAXCCALLS) error(S,"code too deep"); f=luaF_newproto(S->L); setptvalue2s(S->L,S->L->top,f); incr_top(S->L); f->source=LoadString(S); if (f->source==NULL) f->source=p; f->linedefined=LoadInt(S); f->lastlinedefined=LoadInt(S); f->nups=LoadByte(S); f->numparams=LoadByte(S); f->is_vararg=LoadByte(S); f->maxstacksize=LoadByte(S); LoadCode(S,f); LoadConstants(S,f); LoadDebug(S,f); IF (!luaG_checkcode(f), "bad code"); S->L->top--; S->L->nCcalls--; return f; } static void LoadHeader(LoadState* S) { char h[LUAC_HEADERSIZE]; char s[LUAC_HEADERSIZE]; luaU_header(h); LoadBlock(S,s,LUAC_HEADERSIZE); IF (memcmp(h,s,LUAC_HEADERSIZE)!=0, "bad header"); } /* ** load precompiled chunk */ Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name) { LoadState S; if (*name=='@' || *name=='=') S.name=name+1; else if (*name==LUA_SIGNATURE[0]) S.name="binary string"; else S.name=name; S.L=L; S.Z=Z; S.b=buff; LoadHeader(&S); return LoadFunction(&S,luaS_newliteral(L,"=?")); } /* * make header */ void luaU_header (char* h) { int x=1; memcpy(h,LUA_SIGNATURE,sizeof(LUA_SIGNATURE)-1); h+=sizeof(LUA_SIGNATURE)-1; *h++=(char)LUAC_VERSION; *h++=(char)LUAC_FORMAT; *h++=(char)*(char*)&x; /* endianness */ *h++=(char)sizeof(int); *h++=(char)sizeof(size_t); *h++=(char)sizeof(Instruction); *h++=(char)sizeof(lua_Number); *h++=(char)(((lua_Number)0.5)==0); /* is lua_Number integral? */ } genometools-1.5.1/src/external/lua-5.1.5/src/lundump.h000066400000000000000000000015721211610345200223330ustar00rootroot00000000000000/* ** $Id: lundump.h,v 1.37.1.1 2007/12/27 13:02:25 roberto Exp $ ** load precompiled Lua chunks ** See Copyright Notice in lua.h */ #ifndef lundump_h #define lundump_h #include "lobject.h" #include "lzio.h" /* load one chunk; from lundump.c */ LUAI_FUNC Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name); /* make header; from lundump.c */ LUAI_FUNC void luaU_header (char* h); /* dump one chunk; from ldump.c */ LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip); #ifdef luac_c /* print one chunk; from print.c */ LUAI_FUNC void luaU_print (const Proto* f, int full); #endif /* for header of binary files -- this is Lua 5.1 */ #define LUAC_VERSION 0x51 /* for header of binary files -- this is the official format */ #define LUAC_FORMAT 0 /* size of header of binary files */ #define LUAC_HEADERSIZE 12 #endif genometools-1.5.1/src/external/lua-5.1.5/src/lvm.c000066400000000000000000000553141211610345200214430ustar00rootroot00000000000000/* ** $Id: lvm.c,v 2.63.1.5 2011/08/17 20:43:11 roberto Exp $ ** Lua virtual machine ** See Copyright Notice in lua.h */ #include #include #include #define lvm_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lgc.h" #include "lobject.h" #include "lopcodes.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #include "lvm.h" /* limit for table tag-method chains (to avoid loops) */ #define MAXTAGLOOP 100 const TValue *luaV_tonumber (const TValue *obj, TValue *n) { lua_Number num; if (ttisnumber(obj)) return obj; if (ttisstring(obj) && luaO_str2d(svalue(obj), &num)) { setnvalue(n, num); return n; } else return NULL; } int luaV_tostring (lua_State *L, StkId obj) { if (!ttisnumber(obj)) return 0; else { char s[LUAI_MAXNUMBER2STR]; lua_Number n = nvalue(obj); lua_number2str(s, n); setsvalue2s(L, obj, luaS_new(L, s)); return 1; } } static void traceexec (lua_State *L, const Instruction *pc) { lu_byte mask = L->hookmask; const Instruction *oldpc = L->savedpc; L->savedpc = pc; if ((mask & LUA_MASKCOUNT) && L->hookcount == 0) { resethookcount(L); luaD_callhook(L, LUA_HOOKCOUNT, -1); } if (mask & LUA_MASKLINE) { Proto *p = ci_func(L->ci)->l.p; int npc = pcRel(pc, p); int newline = lgetline(p, npc); /* call linehook when enter a new function, when jump back (loop), or when enter a new line */ if (npc == 0 || pc <= oldpc || newline != lgetline(p, pcRel(oldpc, p))) luaD_callhook(L, LUA_HOOKLINE, newline); } } static void callTMres (lua_State *L, StkId res, const TValue *f, const TValue *p1, const TValue *p2) { ptrdiff_t result = savestack(L, res); setobj2s(L, L->top, f); /* push function */ setobj2s(L, L->top+1, p1); /* 1st argument */ setobj2s(L, L->top+2, p2); /* 2nd argument */ luaD_checkstack(L, 3); L->top += 3; luaD_call(L, L->top - 3, 1); res = restorestack(L, result); L->top--; setobjs2s(L, res, L->top); } static void callTM (lua_State *L, const TValue *f, const TValue *p1, const TValue *p2, const TValue *p3) { setobj2s(L, L->top, f); /* push function */ setobj2s(L, L->top+1, p1); /* 1st argument */ setobj2s(L, L->top+2, p2); /* 2nd argument */ setobj2s(L, L->top+3, p3); /* 3th argument */ luaD_checkstack(L, 4); L->top += 4; luaD_call(L, L->top - 4, 0); } void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val) { int loop; for (loop = 0; loop < MAXTAGLOOP; loop++) { const TValue *tm; if (ttistable(t)) { /* `t' is a table? */ Table *h = hvalue(t); const TValue *res = luaH_get(h, key); /* do a primitive get */ if (!ttisnil(res) || /* result is no nil? */ (tm = fasttm(L, h->metatable, TM_INDEX)) == NULL) { /* or no TM? */ setobj2s(L, val, res); return; } /* else will try the tag method */ } else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_INDEX))) luaG_typeerror(L, t, "index"); if (ttisfunction(tm)) { callTMres(L, val, tm, t, key); return; } t = tm; /* else repeat with `tm' */ } luaG_runerror(L, "loop in gettable"); } void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) { int loop; TValue temp; for (loop = 0; loop < MAXTAGLOOP; loop++) { const TValue *tm; if (ttistable(t)) { /* `t' is a table? */ Table *h = hvalue(t); TValue *oldval = luaH_set(L, h, key); /* do a primitive set */ if (!ttisnil(oldval) || /* result is no nil? */ (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */ setobj2t(L, oldval, val); h->flags = 0; luaC_barriert(L, h, val); return; } /* else will try the tag method */ } else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))) luaG_typeerror(L, t, "index"); if (ttisfunction(tm)) { callTM(L, tm, t, key, val); return; } /* else repeat with `tm' */ setobj(L, &temp, tm); /* avoid pointing inside table (may rehash) */ t = &temp; } luaG_runerror(L, "loop in settable"); } static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2, StkId res, TMS event) { const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ if (ttisnil(tm)) tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ if (ttisnil(tm)) return 0; callTMres(L, res, tm, p1, p2); return 1; } static const TValue *get_compTM (lua_State *L, Table *mt1, Table *mt2, TMS event) { const TValue *tm1 = fasttm(L, mt1, event); const TValue *tm2; if (tm1 == NULL) return NULL; /* no metamethod */ if (mt1 == mt2) return tm1; /* same metatables => same metamethods */ tm2 = fasttm(L, mt2, event); if (tm2 == NULL) return NULL; /* no metamethod */ if (luaO_rawequalObj(tm1, tm2)) /* same metamethods? */ return tm1; return NULL; } static int call_orderTM (lua_State *L, const TValue *p1, const TValue *p2, TMS event) { const TValue *tm1 = luaT_gettmbyobj(L, p1, event); const TValue *tm2; if (ttisnil(tm1)) return -1; /* no metamethod? */ tm2 = luaT_gettmbyobj(L, p2, event); if (!luaO_rawequalObj(tm1, tm2)) /* different metamethods? */ return -1; callTMres(L, L->top, tm1, p1, p2); return !l_isfalse(L->top); } static int l_strcmp (const TString *ls, const TString *rs) { const char *l = getstr(ls); size_t ll = ls->tsv.len; const char *r = getstr(rs); size_t lr = rs->tsv.len; for (;;) { int temp = strcoll(l, r); if (temp != 0) return temp; else { /* strings are equal up to a `\0' */ size_t len = strlen(l); /* index of first `\0' in both strings */ if (len == lr) /* r is finished? */ return (len == ll) ? 0 : 1; else if (len == ll) /* l is finished? */ return -1; /* l is smaller than r (because r is not finished) */ /* both strings longer than `len'; go on comparing (after the `\0') */ len++; l += len; ll -= len; r += len; lr -= len; } } } int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) { int res; if (ttype(l) != ttype(r)) return luaG_ordererror(L, l, r); else if (ttisnumber(l)) return luai_numlt(nvalue(l), nvalue(r)); else if (ttisstring(l)) return l_strcmp(rawtsvalue(l), rawtsvalue(r)) < 0; else if ((res = call_orderTM(L, l, r, TM_LT)) != -1) return res; return luaG_ordererror(L, l, r); } static int lessequal (lua_State *L, const TValue *l, const TValue *r) { int res; if (ttype(l) != ttype(r)) return luaG_ordererror(L, l, r); else if (ttisnumber(l)) return luai_numle(nvalue(l), nvalue(r)); else if (ttisstring(l)) return l_strcmp(rawtsvalue(l), rawtsvalue(r)) <= 0; else if ((res = call_orderTM(L, l, r, TM_LE)) != -1) /* first try `le' */ return res; else if ((res = call_orderTM(L, r, l, TM_LT)) != -1) /* else try `lt' */ return !res; return luaG_ordererror(L, l, r); } int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2) { const TValue *tm; lua_assert(ttype(t1) == ttype(t2)); switch (ttype(t1)) { case LUA_TNIL: return 1; case LUA_TNUMBER: return luai_numeq(nvalue(t1), nvalue(t2)); case LUA_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); case LUA_TUSERDATA: { if (uvalue(t1) == uvalue(t2)) return 1; tm = get_compTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable, TM_EQ); break; /* will try TM */ } case LUA_TTABLE: { if (hvalue(t1) == hvalue(t2)) return 1; tm = get_compTM(L, hvalue(t1)->metatable, hvalue(t2)->metatable, TM_EQ); break; /* will try TM */ } default: return gcvalue(t1) == gcvalue(t2); } if (tm == NULL) return 0; /* no TM? */ callTMres(L, L->top, tm, t1, t2); /* call TM */ return !l_isfalse(L->top); } void luaV_concat (lua_State *L, int total, int last) { do { StkId top = L->base + last + 1; int n = 2; /* number of elements handled in this pass (at least 2) */ if (!(ttisstring(top-2) || ttisnumber(top-2)) || !tostring(L, top-1)) { if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) luaG_concaterror(L, top-2, top-1); } else if (tsvalue(top-1)->len == 0) /* second op is empty? */ (void)tostring(L, top - 2); /* result is first op (as string) */ else { /* at least two string values; get as many as possible */ size_t tl = tsvalue(top-1)->len; char *buffer; int i; /* collect total length */ for (n = 1; n < total && tostring(L, top-n-1); n++) { size_t l = tsvalue(top-n-1)->len; if (l >= MAX_SIZET - tl) luaG_runerror(L, "string length overflow"); tl += l; } buffer = luaZ_openspace(L, &G(L)->buff, tl); tl = 0; for (i=n; i>0; i--) { /* concat all strings */ size_t l = tsvalue(top-i)->len; memcpy(buffer+tl, svalue(top-i), l); tl += l; } setsvalue2s(L, top-n, luaS_newlstr(L, buffer, tl)); } total -= n-1; /* got `n' strings to create 1 new */ last -= n-1; } while (total > 1); /* repeat until only 1 result left */ } static void Arith (lua_State *L, StkId ra, const TValue *rb, const TValue *rc, TMS op) { TValue tempb, tempc; const TValue *b, *c; if ((b = luaV_tonumber(rb, &tempb)) != NULL && (c = luaV_tonumber(rc, &tempc)) != NULL) { lua_Number nb = nvalue(b), nc = nvalue(c); switch (op) { case TM_ADD: setnvalue(ra, luai_numadd(nb, nc)); break; case TM_SUB: setnvalue(ra, luai_numsub(nb, nc)); break; case TM_MUL: setnvalue(ra, luai_nummul(nb, nc)); break; case TM_DIV: setnvalue(ra, luai_numdiv(nb, nc)); break; case TM_MOD: setnvalue(ra, luai_nummod(nb, nc)); break; case TM_POW: setnvalue(ra, luai_numpow(nb, nc)); break; case TM_UNM: setnvalue(ra, luai_numunm(nb)); break; default: lua_assert(0); break; } } else if (!call_binTM(L, rb, rc, ra, op)) luaG_aritherror(L, rb, rc); } /* ** some macros for common tasks in `luaV_execute' */ #define runtime_check(L, c) { if (!(c)) break; } #define RA(i) (base+GETARG_A(i)) /* to be used after possible stack reallocation */ #define RB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgR, base+GETARG_B(i)) #define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i)) #define RKB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \ ISK(GETARG_B(i)) ? k+INDEXK(GETARG_B(i)) : base+GETARG_B(i)) #define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \ ISK(GETARG_C(i)) ? k+INDEXK(GETARG_C(i)) : base+GETARG_C(i)) #define KBx(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, k+GETARG_Bx(i)) #define dojump(L,pc,i) {(pc) += (i); luai_threadyield(L);} #define Protect(x) { L->savedpc = pc; {x;}; base = L->base; } #define arith_op(op,tm) { \ TValue *rb = RKB(i); \ TValue *rc = RKC(i); \ if (ttisnumber(rb) && ttisnumber(rc)) { \ lua_Number nb = nvalue(rb), nc = nvalue(rc); \ setnvalue(ra, op(nb, nc)); \ } \ else \ Protect(Arith(L, ra, rb, rc, tm)); \ } void luaV_execute (lua_State *L, int nexeccalls) { LClosure *cl; StkId base; TValue *k; const Instruction *pc; reentry: /* entry point */ lua_assert(isLua(L->ci)); pc = L->savedpc; cl = &clvalue(L->ci->func)->l; base = L->base; k = cl->p->k; /* main loop of interpreter */ for (;;) { const Instruction i = *pc++; StkId ra; if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) { traceexec(L, pc); if (L->status == LUA_YIELD) { /* did hook yield? */ L->savedpc = pc - 1; return; } base = L->base; } /* warning!! several calls may realloc the stack and invalidate `ra' */ ra = RA(i); lua_assert(base == L->base && L->base == L->ci->base); lua_assert(base <= L->top && L->top <= L->stack + L->stacksize); lua_assert(L->top == L->ci->top || luaG_checkopenop(i)); switch (GET_OPCODE(i)) { case OP_MOVE: { setobjs2s(L, ra, RB(i)); continue; } case OP_LOADK: { setobj2s(L, ra, KBx(i)); continue; } case OP_LOADBOOL: { setbvalue(ra, GETARG_B(i)); if (GETARG_C(i)) pc++; /* skip next instruction (if C) */ continue; } case OP_LOADNIL: { TValue *rb = RB(i); do { setnilvalue(rb--); } while (rb >= ra); continue; } case OP_GETUPVAL: { int b = GETARG_B(i); setobj2s(L, ra, cl->upvals[b]->v); continue; } case OP_GETGLOBAL: { TValue g; TValue *rb = KBx(i); sethvalue(L, &g, cl->env); lua_assert(ttisstring(rb)); Protect(luaV_gettable(L, &g, rb, ra)); continue; } case OP_GETTABLE: { Protect(luaV_gettable(L, RB(i), RKC(i), ra)); continue; } case OP_SETGLOBAL: { TValue g; sethvalue(L, &g, cl->env); lua_assert(ttisstring(KBx(i))); Protect(luaV_settable(L, &g, KBx(i), ra)); continue; } case OP_SETUPVAL: { UpVal *uv = cl->upvals[GETARG_B(i)]; setobj(L, uv->v, ra); luaC_barrier(L, uv, ra); continue; } case OP_SETTABLE: { Protect(luaV_settable(L, ra, RKB(i), RKC(i))); continue; } case OP_NEWTABLE: { int b = GETARG_B(i); int c = GETARG_C(i); sethvalue(L, ra, luaH_new(L, luaO_fb2int(b), luaO_fb2int(c))); Protect(luaC_checkGC(L)); continue; } case OP_SELF: { StkId rb = RB(i); setobjs2s(L, ra+1, rb); Protect(luaV_gettable(L, rb, RKC(i), ra)); continue; } case OP_ADD: { arith_op(luai_numadd, TM_ADD); continue; } case OP_SUB: { arith_op(luai_numsub, TM_SUB); continue; } case OP_MUL: { arith_op(luai_nummul, TM_MUL); continue; } case OP_DIV: { arith_op(luai_numdiv, TM_DIV); continue; } case OP_MOD: { arith_op(luai_nummod, TM_MOD); continue; } case OP_POW: { arith_op(luai_numpow, TM_POW); continue; } case OP_UNM: { TValue *rb = RB(i); if (ttisnumber(rb)) { lua_Number nb = nvalue(rb); setnvalue(ra, luai_numunm(nb)); } else { Protect(Arith(L, ra, rb, rb, TM_UNM)); } continue; } case OP_NOT: { int res = l_isfalse(RB(i)); /* next assignment may change this value */ setbvalue(ra, res); continue; } case OP_LEN: { const TValue *rb = RB(i); switch (ttype(rb)) { case LUA_TTABLE: { setnvalue(ra, cast_num(luaH_getn(hvalue(rb)))); break; } case LUA_TSTRING: { setnvalue(ra, cast_num(tsvalue(rb)->len)); break; } default: { /* try metamethod */ Protect( if (!call_binTM(L, rb, luaO_nilobject, ra, TM_LEN)) luaG_typeerror(L, rb, "get length of"); ) } } continue; } case OP_CONCAT: { int b = GETARG_B(i); int c = GETARG_C(i); Protect(luaV_concat(L, c-b+1, c); luaC_checkGC(L)); setobjs2s(L, RA(i), base+b); continue; } case OP_JMP: { dojump(L, pc, GETARG_sBx(i)); continue; } case OP_EQ: { TValue *rb = RKB(i); TValue *rc = RKC(i); Protect( if (equalobj(L, rb, rc) == GETARG_A(i)) dojump(L, pc, GETARG_sBx(*pc)); ) pc++; continue; } case OP_LT: { Protect( if (luaV_lessthan(L, RKB(i), RKC(i)) == GETARG_A(i)) dojump(L, pc, GETARG_sBx(*pc)); ) pc++; continue; } case OP_LE: { Protect( if (lessequal(L, RKB(i), RKC(i)) == GETARG_A(i)) dojump(L, pc, GETARG_sBx(*pc)); ) pc++; continue; } case OP_TEST: { if (l_isfalse(ra) != GETARG_C(i)) dojump(L, pc, GETARG_sBx(*pc)); pc++; continue; } case OP_TESTSET: { TValue *rb = RB(i); if (l_isfalse(rb) != GETARG_C(i)) { setobjs2s(L, ra, rb); dojump(L, pc, GETARG_sBx(*pc)); } pc++; continue; } case OP_CALL: { int b = GETARG_B(i); int nresults = GETARG_C(i) - 1; if (b != 0) L->top = ra+b; /* else previous instruction set top */ L->savedpc = pc; switch (luaD_precall(L, ra, nresults)) { case PCRLUA: { nexeccalls++; goto reentry; /* restart luaV_execute over new Lua function */ } case PCRC: { /* it was a C function (`precall' called it); adjust results */ if (nresults >= 0) L->top = L->ci->top; base = L->base; continue; } default: { return; /* yield */ } } } case OP_TAILCALL: { int b = GETARG_B(i); if (b != 0) L->top = ra+b; /* else previous instruction set top */ L->savedpc = pc; lua_assert(GETARG_C(i) - 1 == LUA_MULTRET); switch (luaD_precall(L, ra, LUA_MULTRET)) { case PCRLUA: { /* tail call: put new frame in place of previous one */ CallInfo *ci = L->ci - 1; /* previous frame */ int aux; StkId func = ci->func; StkId pfunc = (ci+1)->func; /* previous function index */ if (L->openupval) luaF_close(L, ci->base); L->base = ci->base = ci->func + ((ci+1)->base - pfunc); for (aux = 0; pfunc+aux < L->top; aux++) /* move frame down */ setobjs2s(L, func+aux, pfunc+aux); ci->top = L->top = func+aux; /* correct top */ lua_assert(L->top == L->base + clvalue(func)->l.p->maxstacksize); ci->savedpc = L->savedpc; ci->tailcalls++; /* one more call lost */ L->ci--; /* remove new frame */ goto reentry; } case PCRC: { /* it was a C function (`precall' called it) */ base = L->base; continue; } default: { return; /* yield */ } } } case OP_RETURN: { int b = GETARG_B(i); if (b != 0) L->top = ra+b-1; if (L->openupval) luaF_close(L, base); L->savedpc = pc; b = luaD_poscall(L, ra); if (--nexeccalls == 0) /* was previous function running `here'? */ return; /* no: return */ else { /* yes: continue its execution */ if (b) L->top = L->ci->top; lua_assert(isLua(L->ci)); lua_assert(GET_OPCODE(*((L->ci)->savedpc - 1)) == OP_CALL); goto reentry; } } case OP_FORLOOP: { lua_Number step = nvalue(ra+2); lua_Number idx = luai_numadd(nvalue(ra), step); /* increment index */ lua_Number limit = nvalue(ra+1); if (luai_numlt(0, step) ? luai_numle(idx, limit) : luai_numle(limit, idx)) { dojump(L, pc, GETARG_sBx(i)); /* jump back */ setnvalue(ra, idx); /* update internal index... */ setnvalue(ra+3, idx); /* ...and external index */ } continue; } case OP_FORPREP: { const TValue *init = ra; const TValue *plimit = ra+1; const TValue *pstep = ra+2; L->savedpc = pc; /* next steps may throw errors */ if (!tonumber(init, ra)) luaG_runerror(L, LUA_QL("for") " initial value must be a number"); else if (!tonumber(plimit, ra+1)) luaG_runerror(L, LUA_QL("for") " limit must be a number"); else if (!tonumber(pstep, ra+2)) luaG_runerror(L, LUA_QL("for") " step must be a number"); setnvalue(ra, luai_numsub(nvalue(ra), nvalue(pstep))); dojump(L, pc, GETARG_sBx(i)); continue; } case OP_TFORLOOP: { StkId cb = ra + 3; /* call base */ setobjs2s(L, cb+2, ra+2); setobjs2s(L, cb+1, ra+1); setobjs2s(L, cb, ra); L->top = cb+3; /* func. + 2 args (state and index) */ Protect(luaD_call(L, cb, GETARG_C(i))); L->top = L->ci->top; cb = RA(i) + 3; /* previous call may change the stack */ if (!ttisnil(cb)) { /* continue loop? */ setobjs2s(L, cb-1, cb); /* save control variable */ dojump(L, pc, GETARG_sBx(*pc)); /* jump back */ } pc++; continue; } case OP_SETLIST: { int n = GETARG_B(i); int c = GETARG_C(i); int last; Table *h; if (n == 0) { n = cast_int(L->top - ra) - 1; L->top = L->ci->top; } if (c == 0) c = cast_int(*pc++); runtime_check(L, ttistable(ra)); h = hvalue(ra); last = ((c-1)*LFIELDS_PER_FLUSH) + n; if (last > h->sizearray) /* needs more space? */ luaH_resizearray(L, h, last); /* pre-alloc it at once */ for (; n > 0; n--) { TValue *val = ra+n; setobj2t(L, luaH_setnum(L, h, last--), val); luaC_barriert(L, h, val); } continue; } case OP_CLOSE: { luaF_close(L, ra); continue; } case OP_CLOSURE: { Proto *p; Closure *ncl; int nup, j; p = cl->p->p[GETARG_Bx(i)]; nup = p->nups; ncl = luaF_newLclosure(L, nup, cl->env); ncl->l.p = p; for (j=0; jl.upvals[j] = cl->upvals[GETARG_B(*pc)]; else { lua_assert(GET_OPCODE(*pc) == OP_MOVE); ncl->l.upvals[j] = luaF_findupval(L, base + GETARG_B(*pc)); } } setclvalue(L, ra, ncl); Protect(luaC_checkGC(L)); continue; } case OP_VARARG: { int b = GETARG_B(i) - 1; int j; CallInfo *ci = L->ci; int n = cast_int(ci->base - ci->func) - cl->p->numparams - 1; if (b == LUA_MULTRET) { Protect(luaD_checkstack(L, n)); ra = RA(i); /* previous call may change the stack */ b = n; L->top = ra + n; } for (j = 0; j < b; j++) { if (j < n) { setobjs2s(L, ra + j, ci->base - n + j); } else { setnilvalue(ra + j); } } continue; } } } } genometools-1.5.1/src/external/lua-5.1.5/src/lvm.h000066400000000000000000000022071211610345200214410ustar00rootroot00000000000000/* ** $Id: lvm.h,v 2.5.1.1 2007/12/27 13:02:25 roberto Exp $ ** Lua virtual machine ** See Copyright Notice in lua.h */ #ifndef lvm_h #define lvm_h #include "ldo.h" #include "lobject.h" #include "ltm.h" #define tostring(L,o) ((ttype(o) == LUA_TSTRING) || (luaV_tostring(L, o))) #define tonumber(o,n) (ttype(o) == LUA_TNUMBER || \ (((o) = luaV_tonumber(o,n)) != NULL)) #define equalobj(L,o1,o2) \ (ttype(o1) == ttype(o2) && luaV_equalval(L, o1, o2)) LUAI_FUNC int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r); LUAI_FUNC int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2); LUAI_FUNC const TValue *luaV_tonumber (const TValue *obj, TValue *n); LUAI_FUNC int luaV_tostring (lua_State *L, StkId obj); LUAI_FUNC void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val); LUAI_FUNC void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val); LUAI_FUNC void luaV_execute (lua_State *L, int nexeccalls); LUAI_FUNC void luaV_concat (lua_State *L, int total, int last); #endif genometools-1.5.1/src/external/lua-5.1.5/src/lzio.c000066400000000000000000000031341211610345200216130ustar00rootroot00000000000000/* ** $Id: lzio.c,v 1.31.1.1 2007/12/27 13:02:25 roberto Exp $ ** a generic input stream interface ** See Copyright Notice in lua.h */ #include #define lzio_c #define LUA_CORE #include "lua.h" #include "llimits.h" #include "lmem.h" #include "lstate.h" #include "lzio.h" int luaZ_fill (ZIO *z) { size_t size; lua_State *L = z->L; const char *buff; lua_unlock(L); buff = z->reader(L, z->data, &size); lua_lock(L); if (buff == NULL || size == 0) return EOZ; z->n = size - 1; z->p = buff; return char2int(*(z->p++)); } int luaZ_lookahead (ZIO *z) { if (z->n == 0) { if (luaZ_fill(z) == EOZ) return EOZ; else { z->n++; /* luaZ_fill removed first byte; put back it */ z->p--; } } return char2int(*z->p); } void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) { z->L = L; z->reader = reader; z->data = data; z->n = 0; z->p = NULL; } /* --------------------------------------------------------------- read --- */ size_t luaZ_read (ZIO *z, void *b, size_t n) { while (n) { size_t m; if (luaZ_lookahead(z) == EOZ) return n; /* return number of missing bytes */ m = (n <= z->n) ? n : z->n; /* min. between n and z->n */ memcpy(b, z->p, m); z->n -= m; z->p += m; b = (char *)b + m; n -= m; } return 0; } /* ------------------------------------------------------------------------ */ char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n) { if (n > buff->buffsize) { if (n < LUA_MINBUFFER) n = LUA_MINBUFFER; luaZ_resizebuffer(L, buff, n); } return buff->buffer; } genometools-1.5.1/src/external/lua-5.1.5/src/lzio.h000066400000000000000000000030241211610345200216160ustar00rootroot00000000000000/* ** $Id: lzio.h,v 1.21.1.1 2007/12/27 13:02:25 roberto Exp $ ** Buffered streams ** See Copyright Notice in lua.h */ #ifndef lzio_h #define lzio_h #include "lua.h" #include "lmem.h" #define EOZ (-1) /* end of stream */ typedef struct Zio ZIO; #define char2int(c) cast(int, cast(unsigned char, (c))) #define zgetc(z) (((z)->n--)>0 ? char2int(*(z)->p++) : luaZ_fill(z)) typedef struct Mbuffer { char *buffer; size_t n; size_t buffsize; } Mbuffer; #define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)->buffsize = 0) #define luaZ_buffer(buff) ((buff)->buffer) #define luaZ_sizebuffer(buff) ((buff)->buffsize) #define luaZ_bufflen(buff) ((buff)->n) #define luaZ_resetbuffer(buff) ((buff)->n = 0) #define luaZ_resizebuffer(L, buff, size) \ (luaM_reallocvector(L, (buff)->buffer, (buff)->buffsize, size, char), \ (buff)->buffsize = size) #define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0) LUAI_FUNC char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n); LUAI_FUNC void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data); LUAI_FUNC size_t luaZ_read (ZIO* z, void* b, size_t n); /* read next n bytes */ LUAI_FUNC int luaZ_lookahead (ZIO *z); /* --------- Private Part ------------------ */ struct Zio { size_t n; /* bytes still unread */ const char *p; /* current position in buffer */ lua_Reader reader; void* data; /* additional data */ lua_State *L; /* Lua state (for reader) */ }; LUAI_FUNC int luaZ_fill (ZIO *z); #endif genometools-1.5.1/src/external/lua-5.1.5/src/print.c000066400000000000000000000115211211610345200217710ustar00rootroot00000000000000/* ** $Id: print.c,v 1.55a 2006/05/31 13:30:05 lhf Exp $ ** print bytecodes ** See Copyright Notice in lua.h */ #include #include #define luac_c #define LUA_CORE #include "ldebug.h" #include "lobject.h" #include "lopcodes.h" #include "lundump.h" #define PrintFunction luaU_print #define Sizeof(x) ((int)sizeof(x)) #define VOID(p) ((const void*)(p)) static void PrintString(const TString* ts) { const char* s=getstr(ts); size_t i,n=ts->tsv.len; putchar('"'); for (i=0; ik[i]; switch (ttype(o)) { case LUA_TNIL: printf("nil"); break; case LUA_TBOOLEAN: printf(bvalue(o) ? "true" : "false"); break; case LUA_TNUMBER: printf(LUA_NUMBER_FMT,nvalue(o)); break; case LUA_TSTRING: PrintString(rawtsvalue(o)); break; default: /* cannot happen */ printf("? type=%d",ttype(o)); break; } } static void PrintCode(const Proto* f) { const Instruction* code=f->code; int pc,n=f->sizecode; for (pc=0; pc0) printf("[%d]\t",line); else printf("[-]\t"); printf("%-9s\t",luaP_opnames[o]); switch (getOpMode(o)) { case iABC: printf("%d",a); if (getBMode(o)!=OpArgN) printf(" %d",ISK(b) ? (-1-INDEXK(b)) : b); if (getCMode(o)!=OpArgN) printf(" %d",ISK(c) ? (-1-INDEXK(c)) : c); break; case iABx: if (getBMode(o)==OpArgK) printf("%d %d",a,-1-bx); else printf("%d %d",a,bx); break; case iAsBx: if (o==OP_JMP) printf("%d",sbx); else printf("%d %d",a,sbx); break; } switch (o) { case OP_LOADK: printf("\t; "); PrintConstant(f,bx); break; case OP_GETUPVAL: case OP_SETUPVAL: printf("\t; %s", (f->sizeupvalues>0) ? getstr(f->upvalues[b]) : "-"); break; case OP_GETGLOBAL: case OP_SETGLOBAL: printf("\t; %s",svalue(&f->k[bx])); break; case OP_GETTABLE: case OP_SELF: if (ISK(c)) { printf("\t; "); PrintConstant(f,INDEXK(c)); } break; case OP_SETTABLE: case OP_ADD: case OP_SUB: case OP_MUL: case OP_DIV: case OP_POW: case OP_EQ: case OP_LT: case OP_LE: if (ISK(b) || ISK(c)) { printf("\t; "); if (ISK(b)) PrintConstant(f,INDEXK(b)); else printf("-"); printf(" "); if (ISK(c)) PrintConstant(f,INDEXK(c)); else printf("-"); } break; case OP_JMP: case OP_FORLOOP: case OP_FORPREP: printf("\t; to %d",sbx+pc+2); break; case OP_CLOSURE: printf("\t; %p",VOID(f->p[bx])); break; case OP_SETLIST: if (c==0) printf("\t; %d",(int)code[++pc]); else printf("\t; %d",c); break; default: break; } printf("\n"); } } #define SS(x) (x==1)?"":"s" #define S(x) x,SS(x) static void PrintHeader(const Proto* f) { const char* s=getstr(f->source); if (*s=='@' || *s=='=') s++; else if (*s==LUA_SIGNATURE[0]) s="(bstring)"; else s="(string)"; printf("\n%s <%s:%d,%d> (%d instruction%s, %d bytes at %p)\n", (f->linedefined==0)?"main":"function",s, f->linedefined,f->lastlinedefined, S(f->sizecode),f->sizecode*Sizeof(Instruction),VOID(f)); printf("%d%s param%s, %d slot%s, %d upvalue%s, ", f->numparams,f->is_vararg?"+":"",SS(f->numparams), S(f->maxstacksize),S(f->nups)); printf("%d local%s, %d constant%s, %d function%s\n", S(f->sizelocvars),S(f->sizek),S(f->sizep)); } static void PrintConstants(const Proto* f) { int i,n=f->sizek; printf("constants (%d) for %p:\n",n,VOID(f)); for (i=0; isizelocvars; printf("locals (%d) for %p:\n",n,VOID(f)); for (i=0; ilocvars[i].varname),f->locvars[i].startpc+1,f->locvars[i].endpc+1); } } static void PrintUpvalues(const Proto* f) { int i,n=f->sizeupvalues; printf("upvalues (%d) for %p:\n",n,VOID(f)); if (f->upvalues==NULL) return; for (i=0; iupvalues[i])); } } void PrintFunction(const Proto* f, int full) { int i,n=f->sizep; PrintHeader(f); PrintCode(f); if (full) { PrintConstants(f); PrintLocals(f); PrintUpvalues(f); } for (i=0; ip[i],full); } genometools-1.5.1/src/external/lua-5.1.5/test/000077500000000000000000000000001211610345200206615ustar00rootroot00000000000000genometools-1.5.1/src/external/lua-5.1.5/test/README000066400000000000000000000022311211610345200215370ustar00rootroot00000000000000These are simple tests for Lua. Some of them contain useful code. They are meant to be run to make sure Lua is built correctly and also to be read, to see how Lua programs look. Here is a one-line summary of each program: bisect.lua bisection method for solving non-linear equations cf.lua temperature conversion table (celsius to farenheit) echo.lua echo command line arguments env.lua environment variables as automatic global variables factorial.lua factorial without recursion fib.lua fibonacci function with cache fibfor.lua fibonacci numbers with coroutines and generators globals.lua report global variable usage hello.lua the first program in every language life.lua Conway's Game of Life luac.lua bare-bones luac printf.lua an implementation of printf readonly.lua make global variables readonly sieve.lua the sieve of of Eratosthenes programmed with coroutines sort.lua two implementations of a sort function table.lua make table, grouping all data for the same item trace-calls.lua trace calls trace-globals.lua trace assigments to global variables xd.lua hex dump genometools-1.5.1/src/external/lua-5.1.5/test/bisect.lua000066400000000000000000000012051211610345200226330ustar00rootroot00000000000000-- bisection method for solving non-linear equations delta=1e-6 -- tolerance function bisect(f,a,b,fa,fb) local c=(a+b)/2 io.write(n," c=",c," a=",a," b=",b,"\n") if c==a or c==b or math.abs(a-b) posted to lua-l -- modified to use ANSI terminal escape sequences -- modified to use for instead of while local write=io.write ALIVE="" DEAD="" ALIVE="O" DEAD="-" function delay() -- NOTE: SYSTEM-DEPENDENT, adjust as necessary for i=1,10000 do end -- local i=os.clock()+1 while(os.clock() 0 do local xm1,x,xp1,xi=self.w-1,self.w,1,self.w while xi > 0 do local sum = self[ym1][xm1] + self[ym1][x] + self[ym1][xp1] + self[y][xm1] + self[y][xp1] + self[yp1][xm1] + self[yp1][x] + self[yp1][xp1] next[y][x] = ((sum==2) and self[y][x]) or ((sum==3) and 1) or 0 xm1,x,xp1,xi = x,xp1,xp1+1,xi-1 end ym1,y,yp1,yi = y,yp1,yp1+1,yi-1 end end -- output the array to screen function _CELLS:draw() local out="" -- accumulate to reduce flicker for y=1,self.h do for x=1,self.w do out=out..(((self[y][x]>0) and ALIVE) or DEAD) end out=out.."\n" end write(out) end -- constructor function CELLS(w,h) local c = ARRAY2D(w,h) c.spawn = _CELLS.spawn c.evolve = _CELLS.evolve c.draw = _CELLS.draw return c end -- -- shapes suitable for use with spawn() above -- HEART = { 1,0,1,1,0,1,1,1,1; w=3,h=3 } GLIDER = { 0,0,1,1,0,1,0,1,1; w=3,h=3 } EXPLODE = { 0,1,0,1,1,1,1,0,1,0,1,0; w=3,h=4 } FISH = { 0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0; w=5,h=4 } BUTTERFLY = { 1,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1; w=5,h=5 } -- the main routine function LIFE(w,h) -- create two arrays local thisgen = CELLS(w,h) local nextgen = CELLS(w,h) -- create some life -- about 1000 generations of fun, then a glider steady-state thisgen:spawn(GLIDER,5,4) thisgen:spawn(EXPLODE,25,10) thisgen:spawn(FISH,4,12) -- run until break local gen=1 write("\027[2J") -- ANSI clear screen while 1 do thisgen:evolve(nextgen) thisgen,nextgen = nextgen,thisgen write("\027[H") -- ANSI home cursor thisgen:draw() write("Life - generation ",gen,"\n") gen=gen+1 if gen>2000 then break end --delay() -- no delay end end LIFE(40,20) genometools-1.5.1/src/external/lua-5.1.5/test/luac.lua000066400000000000000000000003521211610345200223100ustar00rootroot00000000000000-- bare-bones luac in Lua -- usage: lua luac.lua file.lua assert(arg[1]~=nil and arg[2]==nil,"usage: lua luac.lua file.lua") f=assert(io.open("luac.out","wb")) assert(f:write(string.dump(assert(loadfile(arg[1]))))) assert(f:close()) genometools-1.5.1/src/external/lua-5.1.5/test/printf.lua000066400000000000000000000002511211610345200226640ustar00rootroot00000000000000-- an implementation of printf function printf(...) io.write(string.format(...)) end printf("Hello %s from %s on %s\n",os.getenv"USER" or "there",_VERSION,os.date()) genometools-1.5.1/src/external/lua-5.1.5/test/readonly.lua000066400000000000000000000004041211610345200231770ustar00rootroot00000000000000-- make global variables readonly local f=function (t,i) error("cannot redefine global variable `"..i.."'",2) end local g={} local G=getfenv() setmetatable(g,{__index=G,__newindex=f}) setfenv(1,g) -- an example rawset(g,"x",3) x=2 y=1 -- cannot redefine `y' genometools-1.5.1/src/external/lua-5.1.5/test/sieve.lua000066400000000000000000000014061211610345200225000ustar00rootroot00000000000000-- the sieve of of Eratosthenes programmed with coroutines -- typical usage: lua -e N=1000 sieve.lua | column -- generate all the numbers from 2 to n function gen (n) return coroutine.wrap(function () for i=2,n do coroutine.yield(i) end end) end -- filter the numbers generated by `g', removing multiples of `p' function filter (p, g) return coroutine.wrap(function () while 1 do local n = g() if n == nil then return end if math.mod(n, p) ~= 0 then coroutine.yield(n) end end end) end N=N or 1000 -- from command line x = gen(N) -- generate primes up to N while 1 do local n = x() -- pick a number until done if n == nil then break end print(n) -- must be a prime number x = filter(n, x) -- now remove its multiples end genometools-1.5.1/src/external/lua-5.1.5/test/sort.lua000066400000000000000000000027261211610345200223620ustar00rootroot00000000000000-- two implementations of a sort function -- this is an example only. Lua has now a built-in function "sort" -- extracted from Programming Pearls, page 110 function qsort(x,l,u,f) if ly end) show("after reverse selection sort",x) qsort(x,1,n,function (x,y) return x>> ",string.rep(" ",level)) if t~=nil and t.currentline>=0 then io.write(t.short_src,":",t.currentline," ") end t=debug.getinfo(2) if event=="call" then level=level+1 else level=level-1 if level<0 then level=0 end end if t.what=="main" then if event=="call" then io.write("begin ",t.short_src) else io.write("end ",t.short_src) end elseif t.what=="Lua" then -- table.foreach(t,print) io.write(event," ",t.name or "(Lua)"," <",t.linedefined,":",t.short_src,">") else io.write(event," ",t.name or "(C)"," [",t.what,"] ") end io.write("\n") end debug.sethook(hook,"cr") level=0 genometools-1.5.1/src/external/lua-5.1.5/test/trace-globals.lua000066400000000000000000000013301211610345200241000ustar00rootroot00000000000000-- trace assigments to global variables do -- a tostring that quotes strings. note the use of the original tostring. local _tostring=tostring local tostring=function(a) if type(a)=="string" then return string.format("%q",a) else return _tostring(a) end end local log=function (name,old,new) local t=debug.getinfo(3,"Sl") local line=t.currentline io.write(t.short_src) if line>=0 then io.write(":",line) end io.write(": ",name," is now ",tostring(new)," (was ",tostring(old),")","\n") end local g={} local set=function (t,name,value) log(name,g[name],value) g[name]=value end setmetatable(getfenv(),{__index=g,__newindex=set}) end -- an example a=1 b=2 a=10 b=20 b=nil b=200 print(a,b,c) genometools-1.5.1/src/external/lua-5.1.5/test/xd.lua000066400000000000000000000005541211610345200220030ustar00rootroot00000000000000-- hex dump -- usage: lua xd.lua < file local offset=0 while true do local s=io.read(16) if s==nil then return end io.write(string.format("%08X ",offset)) string.gsub(s,"(.)", function (c) io.write(string.format("%02X ",string.byte(c))) end) io.write(string.rep(" ",3*(16-string.len(s)))) io.write(" ",string.gsub(s,"%c","."),"\n") offset=offset+16 end genometools-1.5.1/src/external/luafilesystem-1.5.0/000077500000000000000000000000001211610345200220025ustar00rootroot00000000000000genometools-1.5.1/src/external/luafilesystem-1.5.0/Makefile000066400000000000000000000006071211610345200234450ustar00rootroot00000000000000# $Id: Makefile,v 1.36 2009/09/21 17:02:44 mascarenhas Exp $ T= lfs CONFIG= ./config include $(CONFIG) SRCS= src/$T.c OBJS= src/$T.o lib: src/lfs.so src/lfs.so: $(OBJS) MACOSX_DEPLOYMENT_TARGET="10.3"; export MACOSX_DEPLOYMENT_TARGET; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/lfs.so $(OBJS) install: mkdir -p $(LUA_LIBDIR) cp src/lfs.so $(LUA_LIBDIR) clean: rm -f src/lfs.so $(OBJS) genometools-1.5.1/src/external/luafilesystem-1.5.0/Makefile.win000066400000000000000000000011031211610345200242310ustar00rootroot00000000000000# $Id: Makefile.win,v 1.11 2008/05/07 19:06:37 carregal Exp $ T= lfs include config.win SRCS= src\$T.c OBJS= src\$T.obj lib: src\lfs.dll .c.obj: $(CC) /c /Fo$@ $(CFLAGS) $< src\lfs.dll: $(OBJS) link /dll /def:src\$T.def /out:src\lfs.dll $(OBJS) "$(LUA_LIB)" IF EXIST src\lfs.dll.manifest mt -manifest src\lfs.dll.manifest -outputresource:src\lfs.dll;2 install: src\lfs.dll IF NOT EXIST "$(LUA_LIBDIR)" mkdir "$(LUA_LIBDIR)" copy src\lfs.dll "$(LUA_LIBDIR)" clean: del src\lfs.dll $(OBJS) src\$T.lib src\$T.exp IF EXIST src\lfs.dll.manifest del src\lfs.dll.manifestgenometools-1.5.1/src/external/luafilesystem-1.5.0/README000066400000000000000000000040741211610345200226670ustar00rootroot00000000000000LuaFileSystem - File System Library for Lua Copyright 2003 Kepler Project http://www.keplerproject.org/luafilesystem Description ----------- LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. LuaFileSystem is free software and uses the same license as Lua 5.1 LuaRocks Installation --------------------- luarocks install luafilesystem Documentation ------------- Please check the documentation at doc/us/ for more information. History ------- Version 1.5.0 [20/Oct/2009] * added explicit next and close methods to second return value of lfs.dir (the directory object), for explicit iteration or explicit closing. * added directory locking via lfs.lock_dir function (see the manual). Version 1.4.2 [03/Feb/2009] * fixed bug [#13198] lfs.attributes(filename, 'size') overflow on files > 2 Gb again (bug report and patch by KUBO Takehiro). * fixed bug [#39794] Compile error on Solaris 10 (bug report and patch by Aaron B). * fixed compilation problems with Borland C. Version 1.4.1 [07/May/2008] * documentation review * fixed Windows compilation issues * fixed bug in the Windows tests (patch by Shmuel Zeigerman) * fixed bug [#2185] lfs.attributes(filename, 'size') overflow on files > 2 Gb Version 1.4.0 [13/Feb/2008] * added function lfs.setmode (works only in Windows systems). * lfs.attributes raises an error if attribute does not exist Version 1.3.0 [26/Oct/2007] * added function lfs.symlinkattributes (works only in non Windows systems). Version 1.2.1 [08/May/2007] * compatible only with Lua 5.1 (Lua 5.0 support was dropped) Version 1.2 [15/Mar/2006] * added optional argument to lfs.attributes * added function lfs.rmdir * bug correction on lfs.dir Version 1.1 [30/May/2005] * added function lfs.touch. Version 1.0 [21/Jan/2005] Version 1.0 Beta [10/Nov/2004] genometools-1.5.1/src/external/luafilesystem-1.5.0/config000066400000000000000000000011601211610345200231700ustar00rootroot00000000000000# Installation directories # Default installation prefix PREFIX=/usr/local # System's libraries directory (where binary libraries are installed) LUA_LIBDIR= $(PREFIX)/lib/lua/5.1 # Lua includes directory LUA_INC= $(PREFIX)/include # OS dependent LIB_OPTION= -shared #for Linux #LIB_OPTION= -bundle -undefined dynamic_lookup #for MacOS X LIBNAME= $T.so.$V # Compilation directives WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -pedantic INCS= -I$(LUA_INC) CFLAGS= $(WARN) $(INCS) CC= gcc # $Id: config,v 1.21 2007/10/27 22:42:32 carregal Exp $ genometools-1.5.1/src/external/luafilesystem-1.5.0/config.win000066400000000000000000000006111211610345200237640ustar00rootroot00000000000000# Installation directories # System's libraries directory (where binary libraries are installed) LUA_LIBDIR= "c:\lua5.1" # Lua includes directory LUA_INC= "c:\lua5.1\include" # Lua library LUA_LIB= "c:\lua5.1\lua5.1.lib" LIBNAME= $T.dll # Compilation directives WARN= /O2 INCS= /I$(LUA_INC) CFLAGS= /MD $(WARN) $(INCS) CC= cl # $Id: config.win,v 1.7 2008/03/25 17:39:29 mascarenhas Exp $ genometools-1.5.1/src/external/luafilesystem-1.5.0/doc/000077500000000000000000000000001211610345200225475ustar00rootroot00000000000000genometools-1.5.1/src/external/luafilesystem-1.5.0/doc/us/000077500000000000000000000000001211610345200231765ustar00rootroot00000000000000genometools-1.5.1/src/external/luafilesystem-1.5.0/doc/us/examples.html000066400000000000000000000057421211610345200257120ustar00rootroot00000000000000 LuaFileSystem

LuaFileSystem
File System Library for the Lua Programming Language

Examples

Directory iterator

The following example iterates over a directory and recursively lists the attributes for each file inside it.

require"lfs"

function attrdir (path)
    for file in lfs.dir(path) do
        if file ~= "." and file ~= ".." then
            local f = path..'/'..file
            print ("\t "..f)
            local attr = lfs.attributes (f)
            assert (type(attr) == "table")
            if attr.mode == "directory" then
                attrdir (f)
            else
                for name, value in pairs(attr) do
                    print (name, value)
                end
            end
        end
    end
end

attrdir (".")

Valid XHTML 1.0!

$Id: examples.html,v 1.8 2007/12/14 15:28:04 carregal Exp $

genometools-1.5.1/src/external/luafilesystem-1.5.0/doc/us/index.html000066400000000000000000000152721211610345200252020ustar00rootroot00000000000000 LuaFileSystem
LuaFileSystem
File System Library for the Lua Programming Language

Overview

LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution.

LuaFileSystem offers a portable way to access the underlying directory structure and file attributes.

LuaFileSystem is free software and uses the same license as Lua 5.1.

Status

Current version is 1.5.0. It was developed for Lua 5.1.

Download

LuaFileSystem source can be downloaded from its Github page.

History

Version 1.5.0 [20/Oct/2009]
  • Added explicit next and close methods to second return value of lfs.dir (the directory object), for explicit iteration or explicit closing.
  • Added directory locking via lfs.lock_dir function (see the manual).
  • Version 1.4.2 [03/Feb/2009]
    • fixed bug [#13198] lfs.attributes(filename, 'size') overflow on files > 2 Gb again (bug report and patch by KUBO Takehiro).
    • fixed bug [#39794] Compile error on Solaris 10 (bug report and patch by Aaron B).
    • fixed compilation problems with Borland C.
    Version 1.4.1 [07/May/2008]
    • documentation review
    • fixed Windows compilation issues
    • fixed bug in the Windows tests (patch by Shmuel Zeigerman)
    • fixed bug [#2185] lfs.attributes(filename, 'size') overflow on files > 2 Gb
    Version 1.4.0 [13/Feb/2008]
    Version 1.3.0 [26/Oct/2007]
    Version 1.2.1 [08/May/2007]
    • compatible only with Lua 5.1 (Lua 5.0 support was dropped)
    Version 1.2 [15/Mar/2006]
    Version 1.1 [30/May/2005]
    Version 1.0 [21/Jan/2005]
    Version 1.0 Beta [10/Nov/2004]

    Credits

    LuaFileSystem was designed by Roberto Ierusalimschy, André Carregal and Tomás Guisasola as part of the Kepler Project, which holds its copyright. LuaFileSystem is currently maintained by Fábio Mascarenhas.

    Contact us

    For more information please contact us. Comments are welcome!

    You can also reach other Kepler developers and users on the Kepler Project mailing list.

    Valid XHTML 1.0!

    $Id: index.html,v 1.44 2009/02/04 21:21:33 carregal Exp $

    genometools-1.5.1/src/external/luafilesystem-1.5.0/doc/us/license.html000066400000000000000000000105541211610345200255130ustar00rootroot00000000000000 LuaFileSystem
    LuaFileSystem
    File System Library for the Lua Programming Language

    License

    LuaFileSystem is free software: it can be used for both academic and commercial purposes at absolutely no cost. There are no royalties or GNU-like "copyleft" restrictions. LuaFileSystem qualifies as Open Source software. Its licenses are compatible with GPL. LuaFileSystem is not in the public domain and the Kepler Project keep its copyright. The legal details are below.

    The spirit of the license is that you are free to use LuaFileSystem for any purpose at no cost without having to ask us. The only requirement is that if you do use LuaFileSystem, then you should give us credit by including the appropriate copyright notice somewhere in your product or its documentation.

    The LuaFileSystem library is designed and implemented by Roberto Ierusalimschy, André Carregal and Tomás Guisasola. The implementation is not derived from licensed software.


    Copyright © 2003 Kepler Project.

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    Valid XHTML 1.0!

    $Id: license.html,v 1.13 2008/02/11 22:42:21 carregal Exp $

    genometools-1.5.1/src/external/luafilesystem-1.5.0/doc/us/luafilesystem.png000066400000000000000000000205271211610345200266000ustar00rootroot00000000000000PNG  IHDRL\ IDATxyXS׺ $a !*F( 8 C uV}sszm{{XmV>>sU(...y`` &&D"A4goo着*L& aaa4m``য়~zT'Өԭ[2ϟs8(,Y`0t:]R w-M Bju``D %11o(&RGB)lm-t gXŚ$ p $ǫ}||,--iQZZZRRB!:VdZFz2www dzBbx[jь(^}qJuAA{_߰溋 -$K2ng$5"5ȑqq=̈́ !!!8PZZ Rӧp8AJ`aai&${{{O>]SSrtˋH$޹s'::Ƿ\reÆ H d~ggg_ðqlzn3jȺ:ڵ|3*8p80o<]{{/:::i¨'O899!+++Ȅ_~ŋ E(.X_. Mwwwq`0b]]aVQf_HS&DY%I{{JYb͛7,@TXXrJeeeݬY˗//**"sVBdgg Hdqoo/@i $a!yllAӺuk6'|"]TTj**R(7x֑xd|244t޽d0,J58}_HHeee666o{b3ĉ}^tuu===9T*zo AB8w\ggM2@ jZڜ>.zjwsߩgN`9ք7AT*uΝ===d2d .w!7o>~DAtVVVj>|Sr ˒?8| 򆆆zLpNNN666cZ^XȿHM!8.00pʕȿ"4#h\kccؘ)뽼 Eqqy* O>TsX,V*HÇ##f(--:ݘf2 wܹtRbb"N///_p!m!P(LNNgٓ)++RR4|oootΝlpvb4Q1-[hӄsEѡ%*ҒbŊ%K WA/_ uZ`mT*2AoaK"jmC}}##JT P Ãf3]\he2IrLÉqR hƌŏ?~att9s H$LjUY^˂'O:**zG0>dRX q sӍ],-IF< -HTWWs8 r BFF\._bڶm'@R|777C_=xZի/ ڍ+B4/e^#G d|p 3i#`Eڢbhd2ݻw֭[ $W^U*QQQ6l8w\nn. !??(۷~ۍJ\TYk.nl…. _4r&,H RTdƌ_~%000&&֭[---GQJϗ;^t8۷կQ8;&.0бl D{"[nK.]!02TVe.\]۷Sud/{.0"˷oߎ-aˋ@/_LKKLHH;+(hۿviنF:~<:,]kYik;<0:~WW}Z;a1gϞmٲEԇmllmlllvaa|D{YsKd3Oϻ$aarCSD{0[XkH$:uTXXfى-{n޼RPΧ>xk ɘ`))KTꄄS /u2ׯ#W Ezz'Ov122rL?aۢ---ˆs_}xLqii Vy?_'&YFbT`mlloF"雹]wK.WMbB~ݬ_  bf_\L&;ԩX<^_& 1RS999ɓX:J;DvL0&RRGG_3$ǎE=z=,]ϳ8_^` >,VZ~z4-BHLLS`Tj=0[,\a՚Gjk,gδظq9 C_AО={F2QV<}9=<Zx+ͤH*7\Ys~Zg!9ݽ`+ 6]]SR2:Bnn 7__;]J+bXmZGc*BS|}}cccG[GxŋX`2)έ[KAϞ-s}zި;  5:2 1 666%%%ףd>tщO'*wpr$c O"׬q99xѧV˖aZ ζpvvkמ>}faad2q89sX,2JvvΝSF#=xk %£G/sӈz/WWWs\J^Z[[6mڔӓL"<{ sJO`Rү&t‰s8 A~acGFɲeQC $00p̙ 222=بK0 sBH[bbя'c̹;3)[[ۀ&Ԑ nD!gϞ-,X멫Wk~ 4F_a.96'3n۷*nxLL }0z `2EEEr omllu;%فw̚X -۷D,%]Wvvv&}}}d2p[[ Ç;;RqȨ+9$^oo>+mll֭[AË/@לI{ ݻlHG_6M&KJJtBe$f^PXbAΝ+>Y'׹lnjjjjjjkkS*AR%%%iO^.]zvbnb6p >5+Ho9 bXŋqh,4۷6>߸jx߾XMND"q8gB<37ve67izt#p'ᆆH4Q Ï=.RwjE `/A9jױ @V#^zޭb:q44/^| cxB߳A\A=% CCC*JXK$t:9))]RUPnPnGG@x^aZ#0Yee݆u9o0 #ƇC<F+O;;˯F~>?9('>]~?b`A0 +ھ*KJ=VVVZP *33B +-t:}_d1YOkNaxXqBŅ kk q8P ጱDMqqqȺX,nmmEkis0k10 +6}M7ڎcaxddD#=+"|}0-DbGĔdo)245LI> N@HL&F#7’|HxYs ¨"'/ܲe`xX嗅|S[$&h42ࠬ͆, hֱ$dd6::zu!&'D!= d!jjZg#GVhRpA u uߗڕy*Vd2zۆV)8(99Fj5, xae2ii-1N,7r9AGYpr:thҮoX_qv>jeY@@ߗ :裥ofdd@ _A@JJʳgnn k!j8>7if00 w8qUْ%n?cI׮]dQ^ нju2 =c`hHI@~XYTL}@ C&EyԺ0m Ӂ_D2@qNͤrxOpAк0CwLW\R? c-ߘ34Avvvj5p k''#id3̙=hcCDia2oٳgϞK ]].炠B \'.ˆfZ[X`âE3PMbzZ5fBVV>X{7W]P8d0Ʋu Ĺ65“du^̙3lhoh诩-*zǼ ooogXZfͬY|ӣ2= #'Nܻ4f5ۀNf8ꪵ}Coa EEE΍g3#Q{2sDīر!!?<7q-oÆYk`FEZIJr˖94pڗBC_tؓA`˖ hd2յaFDx%Cu3t:92R{Yc^٤45 c,^슥A_]]gyg!C|kVV$]? n_1ZW1wpLҺ{9=_sF_G-[v~b=}7X9Gδ]}X%Ω ^^uDN'$3]MuuaΞ-۾=C-Ǧqm[zJswAŋ]oyZT)m \og:LG4*:-b2gf_\t+g_|QpcX: SbYYYYg ; * NK%0]s:>|, 0 Ç`*̿{{_O17>zw pl6ŋwP¤RѣG6R"}>H󻬬{gάU >(',񾯲cbR>_}ȑTW2RO~r,ː!ǟbBa8* lƁAK{xx0H$E"QJJ_W~ [˻qveg˦:Gc}ػw/2][i7}yj7`x0l uvR~玎;vr$ ⋂ziaAܽ{xjku9‚VZZgޡS{{x;vv{NNF r˗ݱϡ3 =55mƍF/)33Ξ-żvRRP|*B]a&㥤ھ7|Fۍ֖2hJ>@ \,*Ǐ;**zzD"Śf̞0gE30nCMWWWW@9"v&&H6B%IGFh2@lm- KOOgXطM2]FAJSPPr[&C Ç{{~e֭x,ALF P(.\ viaxppPF3IMZ.))5k\]]'FðL&þb Tq8… }}}M;O(|>w6cg)OJ1 6qYYYmmmppV?<oÆ 1S\^|boo?w\.5D GdD"qLy@oooiiiMM7܉444TWWwtt)L  T:Ԯ*777WWWuJ,++#>>>f1Nqk.^JE###Gtx<ÍoU*X,"`p\ݖZ>M##-ɺx<;3g"H x}4Y $''T*cfO32}k~%L&S*JrѢET*5B*Täd< `SS LuaFileSystem
    LuaFileSystem
    File System Library for the Lua Programming Language

    Introduction

    LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution.

    LuaFileSystem offers a portable way to access the underlying directory structure and file attributes.

    Building

    LuaFileSystem should be built with Lua 5.1 so the language library and header files for the target version must be installed properly.

    LuaFileSystem offers a Makefile and a separate configuration file, config, which should be edited to suit your installation before running make. The file has some definitions like paths to the external libraries, compiler options and the like.

    On Windows, the C runtime used to compile LuaFileSystem must be the same runtime that Lua uses, or some LuaFileSystem functions will not work.

    Installation

    The easiest way to install LuaFileSystem is to use LuaRocks:

    luarocks install luafilesystem
    

    If you prefer to install LuaFileSystem manually, the compiled binary should be copied to a directory in your C path.

    Reference

    LuaFileSystem offers the following functions:

    lfs.attributes (filepath [, aname])
    Returns a table with the file attributes corresponding to filepath (or nil followed by an error message in case of error). If the second optional argument is given, then only the value of the named attribute is returned (this use is equivalent to lfs.attributes(filepath).aname, but the table is not created and only one attribute is retrieved from the O.S.). The attributes are described as follows; attribute mode is a string, all the others are numbers, and the time related attributes use the same time reference of os.time:
    dev
    on Unix systems, this represents the device that the inode resides on. On Windows systems, represents the drive number of the disk containing the file
    ino
    on Unix systems, this represents the inode number. On Windows systems this has no meaning
    mode
    string representing the associated protection mode (the values could be file, directory, link, socket, named pipe, char device, block device or other)
    nlink
    number of hard links to the file
    uid
    user-id of owner (Unix only, always 0 on Windows)
    gid
    group-id of owner (Unix only, always 0 on Windows)
    rdev
    on Unix systems, represents the device type, for special file inodes. On Windows systems represents the same as dev
    access
    time of last access
    modification
    time of last data modification
    change
    time of last file status change
    size
    file size, in bytes
    blocks
    block allocated for file; (Unix only)
    blksize
    optimal file system I/O blocksize; (Unix only)
    This function uses stat internally thus if the given filepath is a symbolic link, it is followed (if it points to another link the chain is followed recursively) and the information is about the file it refers to. To obtain information about the link itself, see function lfs.symlinkattributes.
    lfs.chdir (path)
    Changes the current working directory to the given path.
    Returns true in case of success or nil plus an error string.
    lfs.lock_dir(path, [seconds_stale])
    Creates a lockfile (called lockfile.lfs) in path if it does not exist and returns the lock. If the lock already exists checks it it's stale, using the second parameter (default for the second parameter is INT_MAX, which in practice means the lock will never be stale. To free the the lock call lock:free().
    In case of any errors it returns nil and the error message. In particular, if the lock exists and is not stale it returns the "File exists" message.
    lfs.currentdir ()
    Returns a string with the current working directory or nil plus an error string.
    iter, dir_obj = lfs.dir (path)
    Lua iterator over the entries of a given directory. Each time the iterator is called with dir_obj it returns a directory entry's name as a string, or nil if there are no more entries. You can also iterate by calling dir_obj:next(), and explicitly close the directory before the iteration finished with dir_obj:close(). Raises an error if path is not a directory.
    lfs.lock (filehandle, mode[, start[, length]])
    Locks a file or a part of it. This function works on open files; the file handle should be specified as the first argument. The string mode could be either r (for a read/shared lock) or w (for a write/exclusive lock). The optional arguments start and length can be used to specify a starting point and its length; both should be numbers.
    Returns true if the operation was successful; in case of error, it returns nil plus an error string.
    lfs.mkdir (dirname)
    Creates a new directory. The argument is the name of the new directory.
    Returns true if the operation was successful; in case of error, it returns nil plus an error string.
    lfs.rmdir (dirname)
    Removes an existing directory. The argument is the name of the directory.
    Returns true if the operation was successful; in case of error, it returns nil plus an error string.
    lfs.setmode (file, mode)
    Sets the writing mode for a file. The mode string can be either binary or text. Returns the previous mode string for the file. This function is only available in Windows, so you may want to make sure that lfs.setmode exists before using it.
    lfs.symlinkattributes (filepath [, aname])
    Identical to lfs.attributes except that it obtains information about the link itself (not the file it refers to). This function is not available in Windows so you may want to make sure that lfs.symlinkattributes exists before using it.
    lfs.touch (filepath [, atime [, mtime]])
    Set access and modification times of a file. This function is a bind to utime function. The first argument is the filename, the second argument (atime) is the access time, and the third argument (mtime) is the modification time. Both times are provided in seconds (which should be generated with Lua standard function os.time). If the modification time is omitted, the access time provided is used; if both times are omitted, the current time is used.
    Returns true if the operation was successful; in case of error, it returns nil plus an error string.
    lfs.unlock (filehandle[, start[, length]])
    Unlocks a file or a part of it. This function works on open files; the file handle should be specified as the first argument. The optional arguments start and length can be used to specify a starting point and its length; both should be numbers.
    Returns true if the operation was successful; in case of error, it returns nil plus an error string.

    Valid XHTML 1.0!

    $Id: manual.html,v 1.45 2009/06/03 20:53:55 mascarenhas Exp $

    genometools-1.5.1/src/external/luafilesystem-1.5.0/rockspecs/000077500000000000000000000000001211610345200237765ustar00rootroot00000000000000genometools-1.5.1/src/external/luafilesystem-1.5.0/rockspecs/luafilesystem-1.3.0-1.rockspec000066400000000000000000000013411211610345200312110ustar00rootroot00000000000000package = "LuaFileSystem" version = "1.3.0-1" source = { url = "http://luaforge.net/frs/download.php/2679/luafilesystem-1.3.0.tar.gz" } description = { summary = "File System Library for the Lua Programming Language", detailed = [[ LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. ]] } dependencies = { "lua >= 5.1" } build = { type = "make", build_variables = { LUA_INC = "$(LUA_INCDIR)", LIB_OPTION = "$(LIBFLAG)" }, install_variables = { LUA_LIBDIR = "$(LIBDIR)" } } genometools-1.5.1/src/external/luafilesystem-1.5.0/rockspecs/luafilesystem-1.4.0-1.rockspec000066400000000000000000000013411211610345200312120ustar00rootroot00000000000000package = "LuaFileSystem" version = "1.4.0-1" source = { url = "http://luaforge.net/frs/download.php/3158/luafilesystem-1.4.0.tar.gz" } description = { summary = "File System Library for the Lua Programming Language", detailed = [[ LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. ]] } dependencies = { "lua >= 5.1" } build = { type = "make", build_variables = { LUA_INC = "$(LUA_INCDIR)", LIB_OPTION = "$(LIBFLAG)" }, install_variables = { LUA_LIBDIR = "$(LIBDIR)" } } genometools-1.5.1/src/external/luafilesystem-1.5.0/rockspecs/luafilesystem-1.4.0-2.rockspec000066400000000000000000000021651211610345200312200ustar00rootroot00000000000000package = "LuaFileSystem" version = "1.4.0-2" source = { url = "http://luaforge.net/frs/download.php/3158/luafilesystem-1.4.0.tar.gz" } description = { summary = "File System Library for the Lua Programming Language", detailed = [[ LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. ]] } dependencies = { "lua >= 5.1" } build = { platforms = { unix = { type = "make", build_variables = { LIB_OPTION = "$(LIBFLAG)", CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)" } }, win32 = { type = "make", build_variables = { LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib", CFLAGS = "/MD $(CFLAGS) /I$(LUA_INCDIR)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)", LUA_DIR = "$(LUADIR)", BIN_DIR = "$(BINDIR)" } } } }genometools-1.5.1/src/external/luafilesystem-1.5.0/rockspecs/luafilesystem-1.4.1-1.rockspec000066400000000000000000000022011211610345200312070ustar00rootroot00000000000000package = "LuaFileSystem" version = "1.4.1-1" source = { url = "http://luaforge.net/frs/download.php/3345/luafilesystem-1.4.1.tar.gz", } description = { summary = "File System Library for the Lua Programming Language", detailed = [[ LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. ]] } dependencies = { "lua >= 5.1" } build = { platforms = { unix = { type = "make", build_variables = { LIB_OPTION = "$(LIBFLAG)", CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR) $(STAT64)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)" } }, win32 = { type = "make", build_variables = { LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib", CFLAGS = "/MD $(CFLAGS) /I$(LUA_INCDIR)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)", LUA_DIR = "$(LUADIR)", BIN_DIR = "$(BINDIR)" } } } } genometools-1.5.1/src/external/luafilesystem-1.5.0/rockspecs/luafilesystem-1.4.1rc1-1.rockspec000066400000000000000000000021771211610345200316310ustar00rootroot00000000000000package = "LuaFileSystem" version = "1.4.1rc1-1" source = { url = "http://luafilesystem.luaforge.net/luafilesystem-1.4.1rc1.tar.gz", } description = { summary = "File System Library for the Lua Programming Language", detailed = [[ LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. ]] } dependencies = { "lua >= 5.1" } build = { platforms = { unix = { type = "make", build_variables = { LIB_OPTION = "$(LIBFLAG)", CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR) $(STAT64)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)" } }, win32 = { type = "make", build_variables = { LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib", CFLAGS = "/MD $(CFLAGS) /I$(LUA_INCDIR)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)", LUA_DIR = "$(LUADIR)", BIN_DIR = "$(BINDIR)" } } } } genometools-1.5.1/src/external/luafilesystem-1.5.0/rockspecs/luafilesystem-1.4.2-1.rockspec000066400000000000000000000011601211610345200312130ustar00rootroot00000000000000package = "LuaFileSystem" version = "1.4.2-1" source = { url = "http://luaforge.net/frs/download.php/3931/luafilesystem-1.4.2.tar.gz", } description = { summary = "File System Library for the Lua Programming Language", detailed = [[ LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. ]] } dependencies = { "lua >= 5.1" } build = { type = "module", modules = { lfs = "src/lfs.c" } }genometools-1.5.1/src/external/luafilesystem-1.5.0/rockspecs/luafilesystem-1.5.0-1.rockspec000066400000000000000000000012571211610345200312210ustar00rootroot00000000000000package = "LuaFileSystem" version = "1.5.0-1" source = { url = "http://cloud.github.com/downloads/keplerproject/luafilesystem/luafilesystem-1.5.0.tar.gz", } description = { summary = "File System Library for the Lua Programming Language", detailed = [[ LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. ]] } dependencies = { "lua >= 5.1" } build = { type = "module", modules = { lfs = "src/lfs.c" }, copy_directories = { "doc", "tests" } } genometools-1.5.1/src/external/luafilesystem-1.5.0/rockspecs/luafilesystem-cvs-1.rockspec000066400000000000000000000022001211610345200313400ustar00rootroot00000000000000package = "LuaFileSystem" version = "cvs-1" source = { url = "cvs://:pserver:anonymous:@cvs.luaforge.net:/cvsroot/luafilesystem", cvs_tag = "HEAD" } description = { summary = "File System Library for the Lua Programming Language", detailed = [[ LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. ]] } dependencies = { "lua >= 5.1" } build = { platforms = { unix = { type = "make", build_variables = { LIB_OPTION = "$(LIBFLAG)", CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)" } }, win32 = { type = "make", build_variables = { LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib", CFLAGS = "$(CFLAGS) /I$(LUA_INCDIR)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)", LUA_DIR = "$(LUADIR)", BIN_DIR = "$(BINDIR)" } } } } genometools-1.5.1/src/external/luafilesystem-1.5.0/rockspecs/luafilesystem-cvs-2.rockspec000066400000000000000000000011331211610345200313450ustar00rootroot00000000000000package = "LuaFileSystem" version = "cvs-2" source = { url = "git://github.com/keplerproject/luafilesystem.git", } description = { summary = "File System Library for the Lua Programming Language", detailed = [[ LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. ]] } dependencies = { "lua >= 5.1" } build = { type = "module", modules = { lfs = "src/lfs.c" } } genometools-1.5.1/src/external/luafilesystem-1.5.0/src/000077500000000000000000000000001211610345200225715ustar00rootroot00000000000000genometools-1.5.1/src/external/luafilesystem-1.5.0/src/lfs.c000066400000000000000000000465371211610345200235400ustar00rootroot00000000000000/* ** LuaFileSystem ** Copyright Kepler Project 2003 (http://www.keplerproject.org/luafilesystem) ** ** File system manipulation library. ** This library offers these functions: ** lfs.attributes (filepath [, attributename]) ** lfs.chdir (path) ** lfs.currentdir () ** lfs.dir (path) ** lfs.lock (fh, mode) ** lfs.lock_dir (path) ** lfs.mkdir (path) ** lfs.rmdir (path) ** lfs.setmode (filepath, mode) ** lfs.symlinkattributes (filepath [, attributename]) -- thanks to Sam Roberts ** lfs.touch (filepath [, atime [, mtime]]) ** lfs.unlock (fh) ** ** $Id: lfs.c,v 1.61 2009/07/04 02:10:16 mascarenhas Exp $ */ #ifndef _WIN32 #ifndef _AIX #define _FILE_OFFSET_BITS 64 /* Linux, Solaris and HP-UX */ #else #define _LARGE_FILES 1 /* AIX */ #endif #endif /* #define _LARGEFILE64_SOURCE */ #include #include #include #include #include #include #ifdef _WIN32 #include #include #include #include #ifdef __BORLANDC__ #include #else #include #endif #include #else #include #include #include #include #include #endif #include "lua.h" #include "lauxlib.h" #include "lualib.h" #include "lfs.h" /* Define 'strerror' for systems that do not implement it */ #ifdef NO_STRERROR #define strerror(_) "System unable to describe the error" #endif /* Define 'getcwd' for systems that do not implement it */ #ifdef NO_GETCWD #define getcwd(p,s) NULL #define getcwd_error "Function 'getcwd' not provided by system" #else #define getcwd_error strerror(errno) #endif #define DIR_METATABLE "directory metatable" #define MAX_DIR_LENGTH 1023 typedef struct dir_data { int closed; #ifdef _WIN32 long hFile; char pattern[MAX_DIR_LENGTH+1]; #else DIR *dir; #endif } dir_data; #define LOCK_METATABLE "lock metatable" #ifdef _WIN32 #ifdef __BORLANDC__ #define lfs_setmode(L,file,m) ((void)L, setmode(_fileno(file), m)) #define STAT_STRUCT struct stati64 #else #define lfs_setmode(L,file,m) ((void)L, _setmode(_fileno(file), m)) #define STAT_STRUCT struct _stati64 #endif #define STAT_FUNC _stati64 #else #define _O_TEXT 0 #define _O_BINARY 0 #define lfs_setmode(L,file,m) ((void)((void)file,m), \ luaL_error(L, LUA_QL("setmode") " not supported on this platform"), -1) #define STAT_STRUCT struct stat #define STAT_FUNC stat #define LSTAT_FUNC lstat #endif /* ** This function changes the working (current) directory */ static int change_dir (lua_State *L) { const char *path = luaL_checkstring(L, 1); if (chdir(path)) { lua_pushnil (L); lua_pushfstring (L,"Unable to change working directory to '%s'\n%s\n", path, chdir_error); return 2; } else { lua_pushboolean (L, 1); return 1; } } /* ** This function returns the current directory ** If unable to get the current directory, it returns nil ** and a string describing the error */ static int get_dir (lua_State *L) { char *path; if ((path = getcwd(NULL, 0)) == NULL) { lua_pushnil(L); lua_pushstring(L, getcwd_error); return 2; } else { lua_pushstring(L, path); free(path); return 1; } } /* ** Check if the given element on the stack is a file and returns it. */ static FILE *check_file (lua_State *L, int idx, const char *funcname) { FILE **fh = (FILE **)luaL_checkudata (L, idx, "FILE*"); if (fh == NULL) { luaL_error (L, "%s: not a file", funcname); return 0; } else if (*fh == NULL) { luaL_error (L, "%s: closed file", funcname); return 0; } else return *fh; } /* ** */ static int _file_lock (lua_State *L, FILE *fh, const char *mode, const long start, long len, const char *funcname) { int code; #ifdef _WIN32 /* lkmode valid values are: LK_LOCK Locks the specified bytes. If the bytes cannot be locked, the program immediately tries again after 1 second. If, after 10 attempts, the bytes cannot be locked, the constant returns an error. LK_NBLCK Locks the specified bytes. If the bytes cannot be locked, the constant returns an error. LK_NBRLCK Same as _LK_NBLCK. LK_RLCK Same as _LK_LOCK. LK_UNLCK Unlocks the specified bytes, which must have been previously locked. Regions should be locked only briefly and should be unlocked before closing a file or exiting the program. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt__locking.asp */ int lkmode; switch (*mode) { case 'r': lkmode = LK_NBLCK; break; case 'w': lkmode = LK_NBLCK; break; case 'u': lkmode = LK_UNLCK; break; default : return luaL_error (L, "%s: invalid mode", funcname); } if (!len) { fseek (fh, 0L, SEEK_END); len = ftell (fh); } fseek (fh, start, SEEK_SET); #ifdef __BORLANDC__ code = locking (fileno(fh), lkmode, len); #else code = _locking (fileno(fh), lkmode, len); #endif #else struct flock f; switch (*mode) { case 'w': f.l_type = F_WRLCK; break; case 'r': f.l_type = F_RDLCK; break; case 'u': f.l_type = F_UNLCK; break; default : return luaL_error (L, "%s: invalid mode", funcname); } f.l_whence = SEEK_SET; f.l_start = (off_t)start; f.l_len = (off_t)len; code = fcntl (fileno(fh), F_SETLK, &f); #endif return (code != -1); } #ifdef _WIN32 typedef struct lfs_Lock { HANDLE fd; } lfs_Lock; static int lfs_lock_dir(lua_State *L) { size_t pathl; HANDLE fd; lfs_Lock *lock; char *ln; const char *lockfile = "/lockfile.lfs"; const char *path = luaL_checklstring(L, 1, &pathl); ln = (char*)malloc(pathl + strlen(lockfile) + 1); if(!ln) { lua_pushnil(L); lua_pushstring(L, strerror(errno)); return 2; } strcpy(ln, path); strcat(ln, lockfile); if((fd = CreateFile(ln, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, NULL)) == INVALID_HANDLE_VALUE) { int en = GetLastError(); free(ln); lua_pushnil(L); if(en == ERROR_FILE_EXISTS || en == ERROR_SHARING_VIOLATION) lua_pushstring(L, "File exists"); else lua_pushstring(L, strerror(en)); return 2; } free(ln); lock = (lfs_Lock*)lua_newuserdata(L, sizeof(lfs_Lock)); lock->fd = fd; luaL_getmetatable (L, LOCK_METATABLE); lua_setmetatable (L, -2); return 1; } static int lfs_unlock_dir(lua_State *L) { lfs_Lock *lock = luaL_checkudata(L, 1, LOCK_METATABLE); CloseHandle(lock->fd); return 0; } #else typedef struct lfs_Lock { char *ln; } lfs_Lock; static int lfs_lock_dir(lua_State *L) { lfs_Lock *lock; size_t pathl; char *ln; const char *lockfile = "/lockfile.lfs"; const char *path = luaL_checklstring(L, 1, &pathl); lock = (lfs_Lock*)lua_newuserdata(L, sizeof(lfs_Lock)); ln = (char*)malloc(pathl + strlen(lockfile) + 1); if(!ln) { lua_pushnil(L); lua_pushstring(L, strerror(errno)); return 2; } strcpy(ln, path); strcat(ln, lockfile); if(symlink("lock", ln) == -1) { free(ln); lua_pushnil(L); lua_pushstring(L, strerror(errno)); return 2; } lock->ln = ln; luaL_getmetatable (L, LOCK_METATABLE); lua_setmetatable (L, -2); return 1; } static int lfs_unlock_dir(lua_State *L) { lfs_Lock *lock = luaL_checkudata(L, 1, LOCK_METATABLE); if(lock->ln) { unlink(lock->ln); free(lock->ln); lock->ln = NULL; } return 0; } #endif #ifdef _WIN32 static int lfs_g_setmode (lua_State *L, FILE *f, int arg) { static const int mode[] = {_O_TEXT, _O_BINARY}; static const char *const modenames[] = {"text", "binary", NULL}; int op = luaL_checkoption(L, arg, NULL, modenames); int res = lfs_setmode(L, f, mode[op]); if (res != -1) { int i; lua_pushboolean(L, 1); for (i = 0; modenames[i] != NULL; i++) { if (mode[i] == res) { lua_pushstring(L, modenames[i]); goto exit; } } lua_pushnil(L); exit: return 2; } else { int en = errno; lua_pushnil(L); lua_pushfstring(L, "%s", strerror(en)); lua_pushinteger(L, en); return 3; } } #else static int lfs_g_setmode (lua_State *L, __attribute__ ((unused)) FILE *f, __attribute__ ((unused)) int arg) { lua_pushboolean(L, 0); lua_pushliteral(L, "setmode not supported on this platform"); return 2; } #endif static int lfs_f_setmode(lua_State *L) { return lfs_g_setmode(L, check_file(L, 1, "setmode"), 2); } /* ** Locks a file. ** @param #1 File handle. ** @param #2 String with lock mode ('w'rite, 'r'ead). ** @param #3 Number with start position (optional). ** @param #4 Number with length (optional). */ static int file_lock (lua_State *L) { FILE *fh = check_file (L, 1, "lock"); const char *mode = luaL_checkstring (L, 2); const long start = luaL_optlong (L, 3, 0); long len = luaL_optlong (L, 4, 0); if (_file_lock (L, fh, mode, start, len, "lock")) { lua_pushboolean (L, 1); return 1; } else { lua_pushnil (L); lua_pushfstring (L, "%s", strerror(errno)); return 2; } } /* ** Unlocks a file. ** @param #1 File handle. ** @param #2 Number with start position (optional). ** @param #3 Number with length (optional). */ static int file_unlock (lua_State *L) { FILE *fh = check_file (L, 1, "unlock"); const long start = luaL_optlong (L, 2, 0); long len = luaL_optlong (L, 3, 0); if (_file_lock (L, fh, "u", start, len, "unlock")) { lua_pushboolean (L, 1); return 1; } else { lua_pushnil (L); lua_pushfstring (L, "%s", strerror(errno)); return 2; } } static int make_dir (lua_State *L) { const char *path = luaL_checkstring (L, 1); int fail; #ifdef _WIN32 int oldmask = umask (0); fail = _mkdir (path); #else mode_t oldmask = umask( (mode_t)0 ); fail = mkdir (path, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH ); #endif if (fail) { lua_pushnil (L); lua_pushfstring (L, "%s", strerror(errno)); return 2; } umask (oldmask); lua_pushboolean (L, 1); return 1; } /* ** Removes a directory. ** @param #1 Directory path. */ static int remove_dir (lua_State *L) { const char *path = luaL_checkstring (L, 1); int fail; fail = rmdir (path); if (fail) { lua_pushnil (L); lua_pushfstring (L, "%s", strerror(errno)); return 2; } lua_pushboolean (L, 1); return 1; } /* ** Directory iterator */ static int dir_iter (lua_State *L) { #ifdef _WIN32 struct _finddata_t c_file; #else struct dirent *entry; #endif dir_data *d = (dir_data *)luaL_checkudata (L, 1, DIR_METATABLE); luaL_argcheck (L, !d->closed, 1, "closed directory"); #ifdef _WIN32 if (d->hFile == 0L) { /* first entry */ if ((d->hFile = _findfirst (d->pattern, &c_file)) == -1L) { lua_pushnil (L); lua_pushstring (L, strerror (errno)); return 2; } else { lua_pushstring (L, c_file.name); return 1; } } else { /* next entry */ if (_findnext (d->hFile, &c_file) == -1L) { /* no more entries => close directory */ _findclose (d->hFile); d->closed = 1; return 0; } else { lua_pushstring (L, c_file.name); return 1; } } #else if ((entry = readdir (d->dir)) != NULL) { lua_pushstring (L, entry->d_name); return 1; } else { /* no more entries => close directory */ closedir (d->dir); d->closed = 1; return 0; } #endif } /* ** Closes directory iterators */ static int dir_close (lua_State *L) { dir_data *d = (dir_data *)lua_touserdata (L, 1); #ifdef _WIN32 if (!d->closed && d->hFile) { _findclose (d->hFile); d->closed = 1; } #else if (!d->closed && d->dir) { closedir (d->dir); d->closed = 1; } #endif return 0; } /* ** Factory of directory iterators */ static int dir_iter_factory (lua_State *L) { const char *path = luaL_checkstring (L, 1); dir_data *d; lua_pushcfunction (L, dir_iter); d = (dir_data *) lua_newuserdata (L, sizeof(dir_data)); d->closed = 0; #ifdef _WIN32 d->hFile = 0L; luaL_getmetatable (L, DIR_METATABLE); lua_setmetatable (L, -2); if (strlen(path) > MAX_DIR_LENGTH) luaL_error (L, "path too long: %s", path); else sprintf (d->pattern, "%s/*", path); #else luaL_getmetatable (L, DIR_METATABLE); lua_setmetatable (L, -2); d->dir = opendir (path); if (d->dir == NULL) luaL_error (L, "cannot open %s: %s", path, strerror (errno)); #endif return 2; } /* ** Creates directory metatable. */ static int dir_create_meta (lua_State *L) { luaL_newmetatable (L, DIR_METATABLE); /* set its __gc field */ lua_pushstring (L, "__index"); lua_newtable(L); lua_pushstring (L, "next"); lua_pushcfunction (L, dir_iter); lua_settable(L, -3); lua_pushstring (L, "close"); lua_pushcfunction (L, dir_close); lua_settable(L, -3); lua_settable (L, -3); lua_pushstring (L, "__gc"); lua_pushcfunction (L, dir_close); lua_settable (L, -3); return 1; } /* ** Creates lock metatable. */ static int lock_create_meta (lua_State *L) { luaL_newmetatable (L, LOCK_METATABLE); /* set its __gc field */ lua_newtable(L); lua_pushcfunction(L, lfs_unlock_dir); lua_setfield(L, -2, "free"); lua_setfield(L, -2, "__index"); lua_pushcfunction(L, lfs_unlock_dir); lua_setfield(L, -2, "__gc"); return 1; } #ifdef _WIN32 #ifndef S_ISDIR #define S_ISDIR(mode) (mode&_S_IFDIR) #endif #ifndef S_ISREG #define S_ISREG(mode) (mode&_S_IFREG) #endif #ifndef S_ISLNK #define S_ISLNK(mode) (0) #endif #ifndef S_ISSOCK #define S_ISSOCK(mode) (0) #endif #ifndef S_ISFIFO #define S_ISFIFO(mode) (0) #endif #ifndef S_ISCHR #define S_ISCHR(mode) (mode&_S_IFCHR) #endif #ifndef S_ISBLK #define S_ISBLK(mode) (0) #endif #endif /* ** Convert the inode protection mode to a string. */ #ifdef _WIN32 static const char *mode2string (unsigned short mode) { #else static const char *mode2string (mode_t mode) { #endif if ( S_ISREG(mode) ) return "file"; else if ( S_ISDIR(mode) ) return "directory"; else if ( S_ISLNK(mode) ) return "link"; else if ( S_ISSOCK(mode) ) return "socket"; else if ( S_ISFIFO(mode) ) return "named pipe"; else if ( S_ISCHR(mode) ) return "char device"; else if ( S_ISBLK(mode) ) return "block device"; else return "other"; } /* ** Set access time and modification values for file */ static int file_utime (lua_State *L) { const char *file = luaL_checkstring (L, 1); struct utimbuf utb, *buf; if (lua_gettop (L) == 1) /* set to current date/time */ buf = NULL; else { utb.actime = (time_t)luaL_optnumber (L, 2, 0); utb.modtime = (time_t)luaL_optnumber (L, 3, utb.actime); buf = &utb; } if (utime (file, buf)) { lua_pushnil (L); lua_pushfstring (L, "%s", strerror (errno)); return 2; } lua_pushboolean (L, 1); return 1; } /* inode protection mode */ static void push_st_mode (lua_State *L, STAT_STRUCT *info) { lua_pushstring (L, mode2string (info->st_mode)); } /* device inode resides on */ static void push_st_dev (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, (lua_Number)info->st_dev); } /* inode's number */ static void push_st_ino (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, (lua_Number)info->st_ino); } /* number of hard links to the file */ static void push_st_nlink (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, (lua_Number)info->st_nlink); } /* user-id of owner */ static void push_st_uid (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, (lua_Number)info->st_uid); } /* group-id of owner */ static void push_st_gid (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, (lua_Number)info->st_gid); } /* device type, for special file inode */ static void push_st_rdev (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, (lua_Number)info->st_rdev); } /* time of last access */ static void push_st_atime (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, info->st_atime); } /* time of last data modification */ static void push_st_mtime (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, info->st_mtime); } /* time of last file status change */ static void push_st_ctime (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, info->st_ctime); } /* file size, in bytes */ static void push_st_size (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, (lua_Number)info->st_size); } #ifndef _WIN32 /* blocks allocated for file */ static void push_st_blocks (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, (lua_Number)info->st_blocks); } /* optimal file system I/O blocksize */ static void push_st_blksize (lua_State *L, STAT_STRUCT *info) { lua_pushnumber (L, (lua_Number)info->st_blksize); } #endif static void push_invalid (lua_State *L, STAT_STRUCT *info) { luaL_error(L, "invalid attribute name"); #ifndef _WIN32 info->st_blksize = 0; /* never reached */ #endif } typedef void (*_push_function) (lua_State *L, STAT_STRUCT *info); struct _stat_members { const char *name; _push_function push; }; struct _stat_members members[] = { { "mode", push_st_mode }, { "dev", push_st_dev }, { "ino", push_st_ino }, { "nlink", push_st_nlink }, { "uid", push_st_uid }, { "gid", push_st_gid }, { "rdev", push_st_rdev }, { "access", push_st_atime }, { "modification", push_st_mtime }, { "change", push_st_ctime }, { "size", push_st_size }, #ifndef _WIN32 { "blocks", push_st_blocks }, { "blksize", push_st_blksize }, #endif { NULL, push_invalid } }; /* ** Get file or symbolic link information */ static int _file_info_ (lua_State *L, int (*st)(const char*, STAT_STRUCT*)) { int i; STAT_STRUCT info; const char *file = luaL_checkstring (L, 1); if (st(file, &info)) { lua_pushnil (L); lua_pushfstring (L, "cannot obtain information from file `%s'", file); return 2; } if (lua_isstring (L, 2)) { int v; const char *member = lua_tostring (L, 2); if (strcmp (member, "mode") == 0) v = 0; #ifndef _WIN32 else if (strcmp (member, "blocks") == 0) v = 11; else if (strcmp (member, "blksize") == 0) v = 12; #endif else /* look for member */ for (v = 1; members[v].name; v++) if (*members[v].name == *member) break; /* push member value and return */ members[v].push (L, &info); return 1; } else if (!lua_istable (L, 2)) /* creates a table if none is given */ lua_newtable (L); /* stores all members in table on top of the stack */ for (i = 0; members[i].name; i++) { lua_pushstring (L, members[i].name); members[i].push (L, &info); lua_rawset (L, -3); } return 1; } /* ** Get file information using stat. */ static int file_info (lua_State *L) { return _file_info_ (L, STAT_FUNC); } /* ** Get symbolic link information using lstat. */ #ifndef _WIN32 static int link_info (lua_State *L) { return _file_info_ (L, LSTAT_FUNC); } #else static int link_info (lua_State *L) { lua_pushboolean(L, 0); lua_pushliteral(L, "symlinkattributes not supported on this platform"); return 2; } #endif /* ** Assumes the table is on top of the stack. */ static void set_info (lua_State *L) { lua_pushliteral (L, "_COPYRIGHT"); lua_pushliteral (L, "Copyright (C) 2003-2009 Kepler Project"); lua_settable (L, -3); lua_pushliteral (L, "_DESCRIPTION"); lua_pushliteral (L, "LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution"); lua_settable (L, -3); lua_pushliteral (L, "_VERSION"); lua_pushliteral (L, "LuaFileSystem 1.5.0"); lua_settable (L, -3); } static const struct luaL_reg fslib[] = { {"attributes", file_info}, {"chdir", change_dir}, {"currentdir", get_dir}, {"dir", dir_iter_factory}, {"lock", file_lock}, {"mkdir", make_dir}, {"rmdir", remove_dir}, {"symlinkattributes", link_info}, {"setmode", lfs_f_setmode}, {"touch", file_utime}, {"unlock", file_unlock}, {"lock_dir", lfs_lock_dir}, {NULL, NULL}, }; int luaopen_lfs (lua_State *L) { dir_create_meta (L); lock_create_meta (L); luaL_register (L, "lfs", fslib); set_info (L); return 1; } genometools-1.5.1/src/external/luafilesystem-1.5.0/src/lfs.def000066400000000000000000000001231211610345200240310ustar00rootroot00000000000000LIBRARY lfs.dll DESCRIPTION "LuaFileSystem" VERSION 1.4.2 EXPORTS luaopen_lfs genometools-1.5.1/src/external/luafilesystem-1.5.0/src/lfs.h000066400000000000000000000006241211610345200235300ustar00rootroot00000000000000/* ** LuaFileSystem ** Copyright Kepler Project 2003 (http://www.keplerproject.org/luafilesystem) ** ** $Id: lfs.h,v 1.5 2008/02/19 20:08:23 mascarenhas Exp $ */ /* Define 'chdir' for systems that do not implement it */ #ifdef NO_CHDIR #define chdir(p) (-1) #define chdir_error "Function 'chdir' not provided by system" #else #define chdir_error strerror(errno) #endif int luaopen_lfs (lua_State *L); genometools-1.5.1/src/external/luafilesystem-1.5.0/tests/000077500000000000000000000000001211610345200231445ustar00rootroot00000000000000genometools-1.5.1/src/external/luafilesystem-1.5.0/tests/test.lua000066400000000000000000000110321211610345200246230ustar00rootroot00000000000000#!/usr/local/bin/lua5.1 local tmp = "/tmp" local sep = "/" local upper = ".." require"lfs" print (lfs._VERSION) function attrdir (path) for file in lfs.dir(path) do if file ~= "." and file ~= ".." then local f = path..sep..file print ("\t=> "..f.." <=") local attr = lfs.attributes (f) assert (type(attr) == "table") if attr.mode == "directory" then attrdir (f) else for name, value in pairs(attr) do print (name, value) end end end end end -- Checking changing directories local current = assert (lfs.currentdir()) local reldir = string.gsub (current, "^.*%"..sep.."([^"..sep.."])$", "%1") assert (lfs.chdir (upper), "could not change to upper directory") assert (lfs.chdir (reldir), "could not change back to current directory") assert (lfs.currentdir() == current, "error trying to change directories") assert (lfs.chdir ("this couldn't be an actual directory") == nil, "could change to a non-existent directory") -- Changing creating and removing directories local tmpdir = current..sep.."lfs_tmp_dir" local tmpfile = tmpdir..sep.."tmp_file" -- Test for existence of a previous lfs_tmp_dir -- that may have resulted from an interrupted test execution and remove it if lfs.chdir (tmpdir) then assert (lfs.chdir (upper), "could not change to upper directory") assert (os.remove (tmpfile), "could not remove file from previous test") assert (lfs.rmdir (tmpdir), "could not remove directory from previous test") end -- tries to create a directory assert (lfs.mkdir (tmpdir), "could not make a new directory") local attrib, errmsg = lfs.attributes (tmpdir) if not attrib then error ("could not get attributes of file `"..tmpdir.."':\n"..errmsg) end local f = io.open(tmpfile, "w") f:close() -- Change access time local testdate = os.time({ year = 2007, day = 10, month = 2, hour=0}) assert (lfs.touch (tmpfile, testdate)) local new_att = assert (lfs.attributes (tmpfile)) assert (new_att.access == testdate, "could not set access time") assert (new_att.modification == testdate, "could not set modification time") -- Change access and modification time local testdate1 = os.time({ year = 2007, day = 10, month = 2, hour=0}) local testdate2 = os.time({ year = 2007, day = 11, month = 2, hour=0}) assert (lfs.touch (tmpfile, testdate2, testdate1)) local new_att = assert (lfs.attributes (tmpfile)) assert (new_att.access == testdate2, "could not set access time") assert (new_att.modification == testdate1, "could not set modification time") local res, err = lfs.symlinkattributes(tmpfile) if err ~= "symlinkattributes not supported on this platform" then -- Checking symbolic link information (does not work in Windows) assert (os.execute ("ln -s "..tmpfile.." _a_link_for_test_")) assert (lfs.attributes"_a_link_for_test_".mode == "file") assert (lfs.symlinkattributes"_a_link_for_test_".mode == "link") assert (os.remove"_a_link_for_test_") end if lfs.setmode then -- Checking text/binary modes (works only in Windows) local f = io.open(tmpfile, "w") local result, mode = lfs.setmode(f, "binary") assert((result and mode == "text") or (not result and mode == "setmode not supported on this platform")) result, mode = lfs.setmode(f, "text") assert((result and mode == "binary") or (not result and mode == "setmode not supported on this platform")) f:close() end -- Restore access time to current value assert (lfs.touch (tmpfile, attrib.access, attrib.modification)) new_att = assert (lfs.attributes (tmpfile)) assert (new_att.access == attrib.access) assert (new_att.modification == attrib.modification) -- Remove new file and directory assert (os.remove (tmpfile), "could not remove new file") assert (lfs.rmdir (tmpdir), "could not remove new directory") assert (lfs.mkdir (tmpdir..sep.."lfs_tmp_dir") == nil, "could create a directory inside a non-existent one") -- Trying to get attributes of a non-existent file assert (lfs.attributes ("this couldn't be an actual file") == nil, "could get attributes of a non-existent file") assert (type(lfs.attributes (upper)) == "table", "couldn't get attributes of upper directory") -- Stressing directory iterator count = 0 for i = 1, 4000 do for file in lfs.dir (tmp) do count = count + 1 end end -- Stressing directory iterator, explicit version count = 0 for i = 1, 4000 do local iter, dir = lfs.dir(tmp) local file = dir:next() while file do count = count + 1 file = dir:next() end assert(not pcall(dir.next, dir)) end -- directory explicit close local iter, dir = lfs.dir(tmp) dir:close() assert(not pcall(dir.next, dir)) print"Ok!" genometools-1.5.1/src/external/luafilesystem-1.5.0/vc6/000077500000000000000000000000001211610345200225005ustar00rootroot00000000000000genometools-1.5.1/src/external/luafilesystem-1.5.0/vc6/lfs.def000066400000000000000000000001141211610345200237400ustar00rootroot00000000000000LIBRARY lfs.dll DESCRIPTION "LuaFileSystem" VERSION 1.2 EXPORTS luaopen_lfs genometools-1.5.1/src/external/luafilesystem-1.5.0/vc6/luafilesystem.dsw000066400000000000000000000011431211610345200261040ustar00rootroot00000000000000Microsoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "luafilesystem_dll"=.\luafilesystem_dll.dsp - Package Owner=<4> Package=<5> {{{ begin source code control luafilesystem .. end source code control }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### genometools-1.5.1/src/external/luafilesystem-1.5.0/vc6/luafilesystem_dll.dsp000066400000000000000000000114431211610345200267340ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="luafilesystem_dll" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=luafilesystem_dll - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "luafilesystem_dll.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "luafilesystem_dll.mak" CFG="luafilesystem_dll - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "luafilesystem_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "luafilesystem_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "luafilesystem_dll" # PROP Scc_LocalPath ".." CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "luafilesystem_dll - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "../lib/vc6" # PROP Intermediate_Dir "luafilesystem_dll/Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "../../external-src/lua50/include" /I "../../compat/src" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x416 /d "NDEBUG" # ADD RSC /l 0x416 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 lua50.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"../bin/vc6/lfs.dll" /libpath:"../../external-src/lua50/lib/dll" # Begin Special Build Tool SOURCE="$(InputPath)" PostBuild_Cmds=cd ../bin/vc6 zip.exe luafilesystem-1.2-win32.zip lfs.dll # End Special Build Tool !ELSEIF "$(CFG)" == "luafilesystem_dll - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "../lib/vc6" # PROP Intermediate_Dir "luafilesystem_dll/Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../external-src/lua50/include" /I "../../compat/src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x416 /d "_DEBUG" # ADD RSC /l 0x416 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 lua50.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"../bin/vc6/lfsd.dll" /pdbtype:sept /libpath:"../../external-src/lua50/lib/dll" !ENDIF # Begin Target # Name "luafilesystem_dll - Win32 Release" # Name "luafilesystem_dll - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE="..\..\compat\src\compat-5.1.c" # End Source File # Begin Source File SOURCE=..\src\lfs.c # End Source File # Begin Source File SOURCE=.\lfs.def # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE="..\..\compat\src\compat-5.1.h" # End Source File # Begin Source File SOURCE=..\src\lfs.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project genometools-1.5.1/src/external/md5-1.1.2/000077500000000000000000000000001211610345200175775ustar00rootroot00000000000000genometools-1.5.1/src/external/md5-1.1.2/Makefile000066400000000000000000000020421211610345200212350ustar00rootroot00000000000000# $Id: Makefile,v 1.7 2007/10/11 00:02:56 carregal Exp $ CONFIG= ./config include $(CONFIG) ifeq "$(LUA_VERSION_NUM)" "500" COMPAT_O= $(COMPAT_DIR)/compat-5.1.o endif MD5_OBJS= src/md5.o src/md5lib.o $(COMPAT_O) MD5_LUAS= src/md5.lua MD5_LIBNAME = core.so DES56_OBJS= src/des56.o src/ldes56.o DES56_LIBNAME= des56.so all: src/$(MD5_LIBNAME) src/$(DES56_LIBNAME) src/$(MD5_LIBNAME) : $(MD5_OBJS) export MACOSX_DEPLOYMENT_TARGET="10.3"; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/$(MD5_LIBNAME) $(MD5_OBJS) src/$(DES56_LIBNAME) : $(DES56_OBJS) export MACOSX_DEPLOYMENT_TARGET="10.3"; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/$(DES56_LIBNAME) $(DES56_OBJS) $(COMPAT_DIR)/compat-5.1.o: $(COMPAT_DIR)/compat-5.1.c $(CC) -c $(CFLAGS) -o $@ $(COMPAT_DIR)/compat-5.1.c install: src/$(MD5_LIBNAME) src/$(DES56_LIBNAME) mkdir -p $(LUA_LIBDIR)/md5 cp src/$(MD5_LIBNAME) $(LUA_LIBDIR)/md5/core.so mkdir -p $(LUA_DIR) cp $(MD5_LUAS) $(LUA_DIR) cp src/$(DES56_LIBNAME) $(LUA_LIBDIR) clean: rm -f $(MD5_OBJS) src/$(MD5_LIBNAME) $(DES56_OBJS) src/$(DES56_LIBNAME) genometools-1.5.1/src/external/md5-1.1.2/Makefile.win000066400000000000000000000023061211610345200220340ustar00rootroot00000000000000# $Id: Makefile.win,v 1.13 2008/05/12 17:49:05 carregal Exp $ include config.win MD5_OBJS= src\md5.obj src\md5lib.obj MD5_LUAS= src\md5.lua MD5_LIBNAME = core.dll DES56_OBJS= src\des56.obj src\ldes56.obj DES56_LIBNAME= des56.dll all: src\$(MD5_LIBNAME) src\$(DES56_LIBNAME) .c.obj: $(CC) /MD /c /Fo$@ $(CFLAGS) $< src\$(MD5_LIBNAME) : $(MD5_OBJS) link /dll /def:src\md5.def /out:src\$(MD5_LIBNAME) $(MD5_OBJS) $(LUA_LIB) IF EXIST src\core.dll.manifest mt -manifest src\core.dll.manifest -outputresource:src\core.dll;2 src\$(DES56_LIBNAME) : $(DES56_OBJS) link /dll /def:src\des56.def /out:src\$(DES56_LIBNAME) $(DES56_OBJS) $(LUA_LIB) IF EXIST src\des56.dll.manifest mt -manifest src\des56.dll.manifest -outputresource:src\des56.dll;2 install: src\$(MD5_LIBNAME) src\$(DES56_LIBNAME) IF NOT EXIST "$(LUA_LIBDIR)\md5" mkdir "$(LUA_LIBDIR)\md5" copy "src\$(MD5_LIBNAME)" "$(LUA_LIBDIR)\md5\core.dll" IF NOT EXIST "$(LUA_DIR)" mkdir "$(LUA_DIR)" copy "$(MD5_LUAS)" "$(LUA_DIR)" copy "src\$(DES56_LIBNAME)" "$(LUA_LIBDIR)\" clean: FOR %i in ($(MD5_OBJS)) DO del %i FOR %i in ($(DES56_OBJS)) DO del %i del "src\$(MD5_LIBNAME)" "src\$(DES56_LIBNAME)" src\core.lib src\core.exp src\des56.lib src\des56.exp genometools-1.5.1/src/external/md5-1.1.2/README000066400000000000000000000015431211610345200204620ustar00rootroot00000000000000MD5 - Cryptographic Library for Lua Copyright 2003 PUC-Rio http://www.keplerproject.org/md5 MD5 offers basic cryptographic facilities for Lua 5.1: a hash (digest) function, a pair crypt/decrypt based on MD5 and CFB, and a pair crypt/decrypt based on DES with 56-bit keys. MD5 current version is 1.1.2. To install on Linux/OSX/BSD, please edit the config file and then call make make install The last step may require root privileges. If you are using LuaRocks you can also install MD5 with: luarocks install md5 History Version 1.1.2 [12/May/2008] * Fixed bug in 64-bit systems * Fixed the Windows makefile to accept longer directory names (patch by Alessandro Hecht and Ignacio Burgueño). Please check the documentation at /doc/us/ for more information. The DES 56 C library was implemented by Stuart Levy and uses a MIT license too (check the source)genometools-1.5.1/src/external/md5-1.1.2/config000066400000000000000000000016351211610345200207740ustar00rootroot00000000000000# Installation directories # Default prefix PREFIX = /usr/local # System's libraries directory (where binary libraries are installed) LUA_LIBDIR= $(PREFIX)/lib/lua/5.1 # System's lua directory (where Lua libraries are installed) LUA_DIR= $(PREFIX)/share/lua/5.1 # Lua includes directory LUA_INC= $(PREFIX)/include # OS dependent LIB_OPTION= -shared #for Linux #LIB_OPTION= -bundle -undefined dynamic_lookup #for MacOS X # Lua version number # (according to Lua 5.1 definition: # first version digit * 100 + second version digit # e.g. Lua 5.0.2 => 500, Lua 5.1 => 501, Lua 5.1.1 => 501) LUA_VERSION_NUM= 501 COMPAT_DIR= ../compat/src # Compilation directives WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -Wpointer-arith INCS= -I$(LUA_INC) -I$(COMPAT_DIR) CFLAGS= $(WARN) $(INCS) CC= gcc # $Id: config,v 1.6 2007/10/29 23:00:23 carregal Exp $ genometools-1.5.1/src/external/md5-1.1.2/config.win000066400000000000000000000012111211610345200215560ustar00rootroot00000000000000# Installation directories # System's libraries directory (where binary libraries are installed) LUA_LIBDIR= c:\lua5.1 # Lua directory (where Lua source libraries will be installed) # This is the LUA_PATH LUA_DIR= c:\lua5.1\lua # Lua includes directory LUA_INC= c:\lua5.1\include LUA_LIB= c:\lua5.1\lua5.1.lib # Lua version number # (according to Lua 5.1 definition: # first version digit * 100 + second version digit # e.g. Lua 5.0.2 => 500, Lua 5.1 => 501, Lua 5.1.1 => 501) LUA_VERSION_NUM= 501 # Compilation directives WARN= /O2 INCS= /I$(LUA_INC) CFLAGS= $(WARN) $(INCS) CC= cl # $Id: config.win,v 1.5 2007/07/23 20:24:23 mascarenhas Exp $ genometools-1.5.1/src/external/md5-1.1.2/configure000077500000000000000000000010301211610345200215000ustar00rootroot00000000000000#!/bin/sh if [ -f config.orig ]; then mv config.orig config fi echo "Trying to where you installed Lua..." if which lua; then lua_bin=`which lua` lua_bin_dir=`dirname $lua_bin` else lua_bin=`which lua51` lua_bin_dir=`dirname $lua_bin` fi lua_root=`dirname $lua_bin_dir` if [ $lua_root != "" ]; then echo "Lua is in $lua_root" echo "Changing config" sed -i.orig -e "s|/usr/local|$lua_root|" config echo "Now run 'make' and 'make install'" else echo "Lua not found, please install Lua (and put in your PATH)" fi genometools-1.5.1/src/external/md5-1.1.2/doc/000077500000000000000000000000001211610345200203445ustar00rootroot00000000000000genometools-1.5.1/src/external/md5-1.1.2/doc/us/000077500000000000000000000000001211610345200207735ustar00rootroot00000000000000genometools-1.5.1/src/external/md5-1.1.2/doc/us/index.html000066400000000000000000000124061211610345200227730ustar00rootroot00000000000000 MD5: Cryptographic Library for Lua
    MD5
    Cryptographic Library for Lua

    Overview

    MD5 offers basic cryptographic facilities for Lua 5.1: a hash (digest) function, a pair crypt/decrypt based on MD5 and CFB, and a pair crypt/decrypt based on DES with 56-bit keys.

    MD5 is free software and uses the same license as Lua.

    Status

    MD5 version 1.1.2 for Lua 5.1 is now available for download.

    Download

    MD5 can be downloaded in source code from its LuaForge page. If you are using LuaBinaries 5.1.x, a Windows precompiled version of MD5 can also be found at the same LuaForge page.

    You can also install MD5 using LuaRocks:

    luarocks install md5
    

    History

    Version 1.1.2 [12/May/2008]
    • Fixed bug in 64-bit systems
    • Fixed the Windows makefile to accept longer directory names (patch by Alessandro Hecht and Ignacio Burgueño).
    Version 1.1.1 [28/Nov/2007]
    • Added DES56 tests (by Mauricio Bomfim)
    • Updated DES56 source to the latest release from Stuart Levy
    Version 1.1.0 [30/Oct/2007]
    Added DES56 crypt/decrypt functions.
    Version 1.0.2 [08/May/2007]
    • Added a nmake version for Lua 5.1
    • Windows binaries for Lua 5.1.2
    Version 1.0.1 [21/Aug/2006]
    • Adapted to work with both Lua 5.0 and Lua 5.1
    • Windows binaries for Lua 5.0.3
    Version 1.0.0
    • First public version

    Credits

    MD5 was designed and implemented by Roberto Ierusalimschy and Marcela Ozório Suarez. The DES 56 C library was implemented by Stuart Levy and uses a MIT license too. The current distribution was packed by Tomás Guisasola and Fábio Mascarenhas as part of the Kepler Project.

    Contact us

    For more information please contact us. Comments are welcome!

    You can also reach other Kepler developers and users on the Kepler Project mailing list.

    Valid XHTML 1.0!

    $Id: index.html,v 1.20 2008/05/12 20:51:27 carregal Exp $

    genometools-1.5.1/src/external/md5-1.1.2/doc/us/license.html000066400000000000000000000105541211610345200233100ustar00rootroot00000000000000 MD5 License
    MD5
    Cryptographic Library for Lua

    License

    MD5 is free software: it can be used for both academic and commercial purposes at absolutely no cost. There are no royalties or GNU-like "copyleft" restrictions. MD5 qualifies as Open Source software. Its licenses are compatible with GPL. MD5 is not in the public domain and PUC-Rio keeps its copyright. The legal details are below.

    The spirit of the license is that you are free to use MD5 for any purpose at no cost without having to ask us. The only requirement is that if you do use MD5, then you should give us credit by including the appropriate copyright notice somewhere in your product or its documentation.

    MD5 was designed and implemented by Roberto Ierusalimschy and Marcela Ozório Suarez. The implementation is not derived from licensed software. The DES 56 C library was implemented by Stuart Levy and uses a MIT licence too.


    Copyright © 2003 PUC-Rio. All rights reserved.

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    Valid XHTML 1.0!

    $Id: license.html,v 1.9 2008/05/12 20:51:27 carregal Exp $

    genometools-1.5.1/src/external/md5-1.1.2/doc/us/manual.html000066400000000000000000000203771211610345200231470ustar00rootroot00000000000000 MD5: Cryptographic Library for Lua
    MD5
    Cryptographic Library for Lua

    Introduction

    MD5 offers basic cryptographic facilities for Lua 5.1: a hash (digest) function, a pair crypt/decrypt based on MD5 and CFB, and a pair crypt/decrypt based on DES with 56-bit keys.

    MD5 is free software and uses the same license as Lua.

    Building

    If you are using Unix MD5 offers a Makefile and a separate configuration file, config, which should be edited to suit the particularities of the target platform before running make. The file has some definitions like paths to the external libraries, compiler options and the like. One important definition is the Lua version, which is not obtained from the installed software.

    If you want to build MD5 on Windows MD5 offers the equivalent config.win and Makefile.win files to be used with Microsoft Visual Studio 2005.

    Installation

    The easiest way to install MD5 is to use LuaRocks:

    luarocks install md5
    

    If you prefer to install the files manually and are using Unix, the build generates two compiled binary files, core.so and des56.so. The first should be copied to a directory called md5 in your C path. Just copy the second to a directory in your Lua C path.

    Windows users can use the binary version of MD5 available at LuaForge.

    In both Unix and Windows systems the file md5.lua should be copied to a directory in your Lua path.

    Reference

    Lua API

    All MD5-based functions are registered inside a table md5.

    md5.sum (message)
    Computes the MD5 message-digest of the string message. This function takes as input a message of arbitrary length and content and returns as output a 128-bit "fingerprint" (or "message digest") of the input.
    The output is formated as a binary string with 16 characters. It is conjectured that it is computationally infeasible to produce two messages having the same message digest, or to produce any message having a given pre-specified target message digest. (see RFC 1321)
    md5.sumhexa (message)
    Similar to md5.sum, but returns its value as a string of 32 hexadecimal digits.
    md5.crypt (message, key [,seed])
    Encrypts a string, using MD5 in CFB (Cipher-feedback mode). message is an arbitrary binary string to be encrypted. key is an arbitrary binary string to be used as a key. seed is an arbitrary binary string to be used as a seed; Returns the cyphertext (as a binary string).
    If no seed is provided, the function uses the result of os.time() as a seed. It is recommended that you use different seeds for each message; the seed itself is not private, and should contain no private data, because it goes plain in the beginning of the encrypted message.
    The length of the cyphertext is the length of the message plus the length of the seed plus one.
    md5.decrypt (message, key)
    Decrypts a string. The input message must be the result of a previous call to crypt. For any msg, key, and seed, we have that
    md5.decrypt(md5.crypt(msg, key, seed), key) == msg
    md5.exor (s1, s2)
    Does a bit-a-bit exclusive or of strings s1 and s2. Both strings must have the same length, which will be also the length of the resulting string.

    The DES-based functions are registered inside a table des56.

    des56.crypt (message, key)
    Encrypts a string, using DES with a 56-bit key. message is an arbitrary binary string to be encrypted. key is an 8-byte binary string to be used as a key. Returns the cyphertext (as a binary string).
    des56.decrypt (message, key)
    Decrypts a string. The input message must be the result of a previous call to des56.crypt. For any msg and key, we have that
    des56.decrypt(des56.crypt(msg, key), key) == msg

    C API

    The following functions are declared in md5.h

    int luaopen_md5_core (lua_State *L)
    Opens the library and registers the "md5" Lua functions in the given state.
    void md5 (const char *message, long len, char *output)
    Computes the MD5 message-digest of message. len is the length of message. output is a buffer that receives the result; it must have at least 16 bytes (128 bits).

    The following function is declared in ldes56.h

    int luaopen_des56 (lua_State *L)
    Opens the library and registers the "des56" Lua functions in the given state.

    Valid XHTML 1.0!

    $Id: manual.html,v 1.14 2008/05/12 20:51:27 carregal Exp $

    genometools-1.5.1/src/external/md5-1.1.2/doc/us/md5.png000066400000000000000000000100311211610345200221610ustar00rootroot00000000000000PNG  IHDR>abKGD pHYsOO?TtEXtSoftwareESP Ghostscript 7.07IDATx]+HY K@mm(Å6)f @ NX fX &l3H^n}JK9>XWs߫Wo _.78p .78p .7] Tspc_m?sncY(X&%4zeBx+dgɭdsҵ c; `IeybIQJpΗ5c,2GPG ?_1Fv)b!Q²\ve6@`Y< 75dfBԄb6BV#pZGӁ`Y<* VЛ)9O,^`{2]K ؃},;tJ)("@6W*|bSB 97s{wXu.UJvlVq]cѾpO clp3UoIxm㇘|@B+1@uwL+]j2\{c,cm{ͥX(4{ !bRPpr8;s! r,^X.\Z!`s=bۤ_BGuz>sCsv*}C׸ z פpW2&&/` zIrTK%U!T:` Py=ǁ od$;R8J~ʧ<]C$ɗ^b|&` I9/'wVdρs9yJ]ҫ/FMBfRE$~Mm4Xt`2xNU,"e:"dJV;iY|f< `T0nI)5c,'!YBCF+&~ NHaYҢ':ש5_@#%LB@{-,!TS|@|=':U@[sh<3gKE9/{%*t3ڤ7!. 8 <5]&mE<<ۮB;>v)"~ATNiMXUuHC8t j93bh0DP 9ĄjGT !Lw  V]#? `~0岰ޢO"'1WPkzE eV{4jh#ӷ8$BAΠKoR*W2e@*t JpXs$1_.9pp󿑦ߑ$Q*WImfFQ0I.&S &߶xB` .:8ni..]* gNB{ӤpA/* V{AlhL@EM NפI46, o5>&8!4IxIam{`laD0`\j#ƪT1y4NpMNGc [I7c(meqAV5n"޵m:Q]%2RrmkP Lּa֩,F:07>{f})}0lIwe-i_4r} <]Lpڲ6 zsI2|4rm@G)dPfU14::nVPC Jo ;0۠AGi-T¼<`c-Zrh:Ub`rKU%vpȑ1=8k8 PU'6pD5 !Q,,宭Tw6wuBTi|\Y$3H!:%:u8 4۫F1 BwDyGa_b2a`%_X0_{mT誾3?`f!P̤hUߍFV,KC&q5!̞ߡYKIM*Kz]i@:]W{8P-FuɑVs{%D"+dD1)ĤϺ Q@ɦ/4eq;\z E1R[CБ $U-ل}FO@ c5k @aB chFIt -ŹkӼ̱j[ )A9DX& }#j,GhLM0% XgrL& ٛ&`#y 8l?2 'P{ 1@hT&^bNB=ҤHAݩpS=me6&@%@_\H+IYĶ6g f'M 4CU)()455߄k,7zc3#({)32~ҩ6\H &.*ȳU+3ޝcsȦX9ӫ/a #^pp;]nwq+s uIENDB`genometools-1.5.1/src/external/md5-1.1.2/rockspec/000077500000000000000000000000001211610345200214105ustar00rootroot00000000000000genometools-1.5.1/src/external/md5-1.1.2/rockspec/md5-1.1.1-1.rockspec000066400000000000000000000013071211610345200244230ustar00rootroot00000000000000package = "MD5" version = "1.1.1-1" source = { url = "http://luaforge.net/frs/download.php/2746/md5-1.1.1.tar.gz" } description = { summary = "Basic cryptographic library", detailed = [[ MD5 offers basic cryptographic facilities for Lua 5.1: a hash (digest) function, and a pair crypt/decrypt. ]], license = "MIT/X11", homepage = "http://www.keplerproject.org/md5/" } dependencies = { "lua >= 5.1" } build = { type = "make", variables = { LUA_VERSION_NUM="501", }, build_variables = { LIB_OPTION = "$(LIBFLAG)", CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)", LUA_DIR = "$(LUADIR)" } } genometools-1.5.1/src/external/md5-1.1.2/rockspec/md5-1.1.2-1.rockspec000066400000000000000000000015231211610345200244240ustar00rootroot00000000000000package = "MD5" version = "1.1.2-1" source = { url = "" } description = { summary = "Basic cryptographic library", detailed = [[ MD5 offers basic cryptographic facilities for Lua 5.1: a hash (digest) function, a pair crypt/decrypt based on MD5 and CFB, and a pair crypt/decrypt based on DES with 56-bit keys. ]], license = "MIT/X11", homepage = "http://www.keplerproject.org/md5/" } dependencies = { "lua >= 5.1" } build = { type = "make", variables = { LUA_VERSION_NUM="501", }, build_variables = { LIB_OPTION = "$(LIBFLAG)", CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)", LUA_DIR = "$(LUADIR)" }, platforms = { win32 = { build_variables = { LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib" } } } } genometools-1.5.1/src/external/md5-1.1.2/rockspec/md5-cvs-1.rockspec000066400000000000000000000015151211610345200245610ustar00rootroot00000000000000package = "MD5" version = "cvs-1" source = { cvs_tag = "HEAD", url = "cvs://:pserver:anonymous@cvs.luaforge.net:/cvsroot/md5" } description = { summary = "Basic cryptographic library", detailed = [[ MD5 offers basic cryptographic facilities for Lua 5.1: a hash (digest) function, and a pair crypt/decrypt. ]], license = "MIT/X11", homepage = "http://www.keplerproject.org/md5/" } dependencies = { "lua >= 5.1" } build = { type = "make", variables = { LUA_VERSION_NUM="501", }, build_variables = { LIB_OPTION = "$(LIBFLAG)", CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR)", }, install_variables = { LUA_LIBDIR = "$(LIBDIR)", LUA_DIR = "$(LUADIR)" }, platforms = { win32 = { build_variables = { LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib" } } } } genometools-1.5.1/src/external/md5-1.1.2/src/000077500000000000000000000000001211610345200203665ustar00rootroot00000000000000genometools-1.5.1/src/external/md5-1.1.2/src/des56.c000066400000000000000000000357521211610345200214740ustar00rootroot00000000000000 /* * Fast implementation of the DES, as described in the Federal Register, * Vol. 40, No. 52, p. 12134, March 17, 1975. * * Stuart Levy, Minnesota Supercomputer Center, April 1988. * Currently (2007) slevy@ncsa.uiuc.edu * NCSA, University of Illinois Urbana-Champaign * * Calling sequence: * * typedef unsigned long keysched[32]; * * fsetkey(key, keysched) / * Converts a DES key to a "key schedule" * / * unsigned char key[8]; * keysched *ks; * * fencrypt(block, decrypt, keysched) / * En/decrypts one 64-bit block * / * unsigned char block[8]; / * data, en/decrypted in place * / * int decrypt; / * 0=>encrypt, 1=>decrypt * / * keysched *ks; / * key schedule, as set by fsetkey * / * * Key and data block representation: * The 56-bit key (bits 1..64 including "parity" bits 8, 16, 24, ..., 64) * and the 64-bit data block (bits 1..64) * are each stored in arrays of 8 bytes. * Following the NBS numbering, the MSB has the bit number 1, so * key[0] = 128*bit1 + 64*bit2 + ... + 1*bit8, ... through * key[7] = 128*bit57 + 64*bit58 + ... + 1*bit64. * In the key, "parity" bits are not checked; their values are ignored. * */ /* =============================================================================== License des56.c is licensed under the terms of the MIT license reproduced below. This means that des56.c is free software and can be used for both academic and commercial purposes at absolutely no cost. =============================================================================== Copyright (C) 1988 Stuart Levy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "des56.h" /* * Key schedule generation. * We begin by pointlessly permuting the 56 useful key bits into * two groups of 28 bits called C and D. * bK_C and bK_D are indexed by C and D bit numbers, respectively, * and give the key bit number (1..64) which should initialize that C/D bit. * This is the "permuted choice 1" table. */ static tiny bK_C[28] = { 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, }; static tiny bK_D[28] = { 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4, }; /* * For speed, we invert these, building tables to map groups of * key bits into the corresponding C and D bits. * We represent C and D each as 28 contiguous bits right-justified in a * word, padded on the left with zeros. * If key byte `i' is said to contain bits Ki,0 (MSB) Ki,1 ... Ki,7 (LSB) * then * wC_K4[i][Ki,0 Ki,1 Ki,2 Ki,3] gives the C bits for Ki,0..3, * wD_K4[i][Ki,0 Ki,1 Ki,2 Ki,3] the corresponding D bits, * wC_K3[i][Ki,4 Ki,5 Ki,6] the C bits for Ki,4..6, * and wD_K3[i][Ki,4 Ki,5 Ki,6] the D bits for Ki,4..6. * Ki,7 is ignored since it is the nominal parity bit. * We could just use a single table for [i][Ki,0 .. Ki,6] but that * would take a lot of storage for such a rarely-used function. */ static word32 wC_K4[8][16], wC_K3[8][8]; static word32 wD_K4[8][16], wD_K3[8][8]; /* * Successive Ci and Di for the sixteen steps in the key schedule are * created by independent 28-bit left circular shifts on C and D. * The shift count varies with the step number. */ static tiny preshift[16] = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, }; /* * Each step in the key schedule is generated by selecting 48 bits * (8 groups of 6 bits) from the appropriately shifted Ci and Di. * bCD_KS, indexed by the key schedule bit number, gives the bit number * in CD (CD1 = MSB of C, CD28 = LSB of C, CD29 = MSB of D, CD56 = LSB of D) * which determines that bit of the key schedule. * Note that only C bits (1..28) appear in the first (upper) 24 bits of * the key schedule, and D bits (29..56) in the second (lower) 24 bits. * This is the "permuted-choice-2" table. */ static tiny bCD_KS[48] = { 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32, }; /* * We invert bCD_KS into a pair of tables which map groups of 4 * C or D bits into corresponding key schedule bits. * We represent each step of the key schedule as 8 groups of 8 bits, * with the 6 real bits right-justified in each 8-bit group. * hKS_C4[i][C4i+1 .. C4i+4] gives the bits in the high order (first four) * key schedule "bytes" which correspond to C bits 4i+1 .. 4i+4. * lKS_D4[i][D4i+1 .. D4i+4] gives the appropriate bits in the latter (last 4) * key schedule bytes, from the corresponding D bits. */ static word32 hKS_C4[7][16]; static word32 lKS_D4[7][16]; /* * Encryption/decryption. * Before beginning, and after ending, we perform another useless permutation * on the bits in the data block. * * The initial permutation and its inverse, final permutation * are too simple to need a table for. If we break the input I1 .. I64 into * 8-bit chunks I0,0 I0,1 ... I0,7 I1,0 I1,1 ... I7,7 * then the initial permutation sets LR as follows: * L = I7,1 I6,1 I5,1 ... I0,1 I7,3 I6,3 ... I0,3 I7,5 ... I0,5 I7,7 ... I0,7 * and * R = I7,0 I6,0 I5,0 ... I0,0 I7,2 I6,2 ... I0,2 I7,4 ... I0,4 I7,6 ... I0,6 * * If we number the bits in the final LR similarly, * L = L0,0 L0,1 ... L3,7 R = R0,0 R0,1 ... R3,7 * then the output is * O = R0,7 L0,7 R1,7 L1,7 ... R3,7 L3,7 R0,6 L0,6 ... L3,6 R0,5 ... R3,0 L3,0 * * To speed I => LR shuffling we use an array of 32-bit values indexed by * 8-bit input bytes. * wL_I8[ 0 I0,1 0 I0,3 0 I0,5 0 I0,7 ] = the corresponding L bits. * Other R and L bits are derived from wL_I8 by shifting. * * To speed LR => O shuffling, an array of 32-bit values indexed by 4-bit lumps: * wO_L4[ L0,4 L0,5 L0,6 L0,7 ] = the corresponding high-order 32 O bits. */ static word32 wL_I8[0x55 + 1]; static word32 wO_L4[16]; /* * Core of encryption/decryption. * In each key schedule stage, we: * take 8 overlapping groups of 6 bits each from R * (the NBS tabulates the bit selections in the E table, * but it's so simple we just use shifting to get the right bits) * XOR each group with the corresponding bits from the key schedule * Use the resulting 6 bits as an index into the appropriate S table * (there are 8 such tables, one per group of 6 bits) * Each S entry yields 4 bits. * The 8 groups of 4 bits are catenated into a 32-bit value. * Those 32 bits are permuted according to the P table. * Finally the permuted 32-bit value is XORed with L and becomes * the R value for the next stage, while the previous R becomes the new L. * * Here, we merge the P permutation with the S tables by making the * S entries be 32-bit masks, already suitably permuted. * Also, the bits in each six-bit group must be permuted before use as * an index into the NBS-tabulated S tables. * We rearrange entries in wPS so that natural bit order can be used. */ static word32 wPS[8][64]; static tiny P[32] = { 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25, }; static tiny S[8][64] = { { 14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7, 0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8, 4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0, 15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13, }, { 15, 1, 8,14, 6,11, 3, 4, 9, 7, 2,13,12, 0, 5,10, 3,13, 4, 7,15, 2, 8,14,12, 0, 1,10, 6, 9,11, 5, 0,14, 7,11,10, 4,13, 1, 5, 8,12, 6, 9, 3, 2,15, 13, 8,10, 1, 3,15, 4, 2,11, 6, 7,12, 0, 5,14, 9, }, { 10, 0, 9,14, 6, 3,15, 5, 1,13,12, 7,11, 4, 2, 8, 13, 7, 0, 9, 3, 4, 6,10, 2, 8, 5,14,12,11,15, 1, 13, 6, 4, 9, 8,15, 3, 0,11, 1, 2,12, 5,10,14, 7, 1,10,13, 0, 6, 9, 8, 7, 4,15,14, 3,11, 5, 2,12, }, { 7,13,14, 3, 0, 6, 9,10, 1, 2, 8, 5,11,12, 4,15, 13, 8,11, 5, 6,15, 0, 3, 4, 7, 2,12, 1,10,14, 9, 10, 6, 9, 0,12,11, 7,13,15, 1, 3,14, 5, 2, 8, 4, 3,15, 0, 6,10, 1,13, 8, 9, 4, 5,11,12, 7, 2,14, }, { 2,12, 4, 1, 7,10,11, 6, 8, 5, 3,15,13, 0,14, 9, 14,11, 2,12, 4, 7,13, 1, 5, 0,15,10, 3, 9, 8, 6, 4, 2, 1,11,10,13, 7, 8,15, 9,12, 5, 6, 3, 0,14, 11, 8,12, 7, 1,14, 2,13, 6,15, 0, 9,10, 4, 5, 3, }, { 12, 1,10,15, 9, 2, 6, 8, 0,13, 3, 4,14, 7, 5,11, 10,15, 4, 2, 7,12, 9, 5, 6, 1,13,14, 0,11, 3, 8, 9,14,15, 5, 2, 8,12, 3, 7, 0, 4,10, 1,13,11, 6, 4, 3, 2,12, 9, 5,15,10,11,14, 1, 7, 6, 0, 8,13, }, { 4,11, 2,14,15, 0, 8,13, 3,12, 9, 7, 5,10, 6, 1, 13, 0,11, 7, 4, 9, 1,10,14, 3, 5,12, 2,15, 8, 6, 1, 4,11,13,12, 3, 7,14,10,15, 6, 8, 0, 5, 9, 2, 6,11,13, 8, 1, 4,10, 7, 9, 5, 0,15,14, 2, 3,12, }, { 13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12, 7, 1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2, 7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8, 2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11, }, }; static void buildtables( void ) { register int i, j; register word32 v; word32 wC_K[64], wD_K[64]; word32 hKS_C[28], lKS_D[28]; int Smap[64]; word32 wP[32]; #if USG # define ZERO(array) memset((char *)(array), '\0', sizeof(array)) #else # if BSD # define ZERO(array) bzero((char *)(array), sizeof(array)) # else # define ZERO(array) { register word32 *p = (word32 *)(array); \ i = sizeof(array) / sizeof(*p); \ do { *p++ = 0; } while(--i > 0); \ } # endif #endif /* Invert permuted-choice-1 (key => C,D) */ ZERO(wC_K); ZERO(wD_K); v = 1; for(j = 28; --j >= 0; ) { wC_K[ bK_C[j] - 1 ] = wD_K[ bK_D[j] - 1 ] = v; v += v; /* (i.e. v <<= 1) */ } for(i = 0; i < 64; i++) { int t = 8 >> (i & 3); for(j = 0; j < 16; j++) { if(j & t) { wC_K4[i >> 3][j] |= wC_K[i]; wD_K4[i >> 3][j] |= wD_K[i]; if(j < 8) { wC_K3[i >> 3][j] |= wC_K[i + 3]; wD_K3[i >> 3][j] |= wD_K[i + 3]; } } } /* Generate the sequence 0,1,2,3, 8,9,10,11, ..., 56,57,58,59. */ if(t == 1) i += 4; } /* Invert permuted-choice-2 */ ZERO(hKS_C); ZERO(lKS_D); v = 1; for(i = 24; (i -= 6) >= 0; ) { j = i+5; do { hKS_C[ bCD_KS[j] - 1 ] = lKS_D[ bCD_KS[j+24] - 28 - 1 ] = v; v += v; /* Like v <<= 1 but may be faster */ } while(--j >= i); v <<= 2; /* Keep byte aligned */ } for(i = 0; i < 28; i++) { v = 8 >> (i & 3); for(j = 0; j < 16; j++) { if(j & v) { hKS_C4[i >> 2][j] |= hKS_C[i]; lKS_D4[i >> 2][j] |= lKS_D[i]; } } } /* Initial permutation */ for(i = 0; i <= 0x55; i++) { v = 0; if(i & 64) v = (word32) 1 << 24; if(i & 16) v |= (word32) 1 << 16; if(i & 4) v |= (word32) 1 << 8; if(i & 1) v |= 1; wL_I8[i] = v; } /* Final permutation */ for(i = 0; i < 16; i++) { v = 0; if(i & 1) v = (word32) 1 << 24; if(i & 2) v |= (word32) 1 << 16; if(i & 4) v |= (word32) 1 << 8; if(i & 8) v |= (word32) 1; wO_L4[i] = v; } /* Funny bit rearrangement on second index into S tables */ for(i = 0; i < 64; i++) { Smap[i] = (i & 0x20) | (i & 1) << 4 | (i & 0x1e) >> 1; } /* Invert permutation P into mask indexed by R bit number */ v = 1; for(i = 32; --i >= 0; ) { wP[ P[i] - 1 ] = v; v += v; } /* Build bit-mask versions of S tables, indexed in natural bit order */ for(i = 0; i < 8; i++) { for(j = 0; j < 64; j++) { int k, t; t = S[i][ Smap[j] ]; for(k = 0; k < 4; k++) { if(t & 8) wPS[i][j] |= wP[4*i + k]; t += t; } } } } void fsetkey(char key[8], keysched *ks) { register int i; register word32 C, D; static int built = 0; if(!built) { buildtables(); built = 1; } C = D = 0; for(i = 0; i < 8; i++) { register int v; v = key[i] >> 1; /* Discard "parity" bit */ C |= wC_K4[i][(v>>3) & 15] | wC_K3[i][v & 7]; D |= wD_K4[i][(v>>3) & 15] | wD_K3[i][v & 7]; } /* * C and D now hold the suitably right-justified * 28 permuted key bits each. */ for(i = 0; i < 16; i++) { #ifdef CRAY #define choice2(x, v) x[6][v&15] | x[5][(v>>4)&15] | x[4][(v>>8)&15] | \ x[3][(v>>12)&15] | x[2][(v>>16)&15] | x[1][(v>>20)&15] | \ x[0][(v>>24)&15] #else register word32 *ap; # define choice2(x, v) ( \ ap = &(x)[0][0], \ ap[16*6 + (v&15)] | \ ap[16*5 + ((v>>4)&15)] | ap[16*4 + ((v>>8)&15)] | \ ap[16*3 + ((v>>12)&15)] | ap[16*2 + ((v>>16)&15)] | \ ap[16*1 + ((v>>20)&15)] | ap[16*0 + ((v>>24)&15)] ) #endif /* 28-bit left circular shift */ C <<= preshift[i]; C = ((C >> 28) & 3) | (C & (((word32)1<<28) - 1)); ks->KS[i].h = choice2(hKS_C4, C); D <<= preshift[i]; D = ((D >> 28) & 3) | (D & (((word32)1<<28) - 1)); ks->KS[i].l = choice2(lKS_D4, D); } } void fencrypt(char block[8], int decrypt, keysched *ks) { int i; register word32 L, R; register struct keystage *ksp; register word32 *ap; /* Initial permutation */ L = R = 0; i = 7; ap = wL_I8; do { register int v; v = block[i]; /* Could optimize according to ENDIAN */ L = ap[v & 0x55] | (L << 1); R = ap[(v >> 1) & 0x55] | (R << 1); } while(--i >= 0); if(decrypt) { ksp = &ks->KS[15]; } else { ksp = &ks->KS[0]; } #ifdef CRAY # define PS(i,j) wPS[i][j] #else # define PS(i,j) ap[64*(i) + (j)] ap = &wPS[0][0]; #endif i = 16; do { register word32 k, tR; tR = (R >> 15) | (R << 17); k = ksp->h; L ^= PS(0, ((tR >> 12) ^ (k >> 24)) & 63) | PS(1, ((tR >> 8) ^ (k >> 16)) & 63) | PS(2, ((tR >> 4) ^ (k >> 8)) & 63) | PS(3, (tR ^ k) & 63); k = ksp->l; L ^= PS(4, ((R >> 11) ^ (k >> 24)) & 63) | PS(5, ((R >> 7) ^ (k >> 16)) & 63) | PS(6, ((R >> 3) ^ (k >> 8)) & 63) | PS(7, ((tR >> 16) ^ k) & 63); tR = L; L = R; R = tR; if(decrypt) ksp--; else ksp++; } while(--i > 0); { register word32 t; #ifdef CRAY # define FP(k) (wO_L4[ (L >> (k)) & 15 ] << 1 | wO_L4[ (R >> (k)) & 15 ]) #else # define FP(k) (ap[ (L >> (k)) & 15 ] << 1 | ap[ (R >> (k)) & 15 ]) ap = wO_L4; #endif t = FP(0) | (FP(8) | (FP(16) | (FP(24) << 2)) << 2) << 2; R = FP(4) | (FP(12) | (FP(20) | (FP(28) << 2)) << 2) << 2; L = t; } { register word32 t; register char *bp; bp = &block[7]; t = R; *bp = t & 255; *--bp = (t >>= 8) & 255; *--bp = (t >>= 8) & 255; *--bp = (t >> 8) & 255; t = L; *--bp = t & 255; *--bp = (t >>= 8) & 255; *--bp = (t >>= 8) & 255; *--bp = (t >> 8) & 255; } } genometools-1.5.1/src/external/md5-1.1.2/src/des56.def000066400000000000000000000001121211610345200217660ustar00rootroot00000000000000LIBRARY des56.dll DESCRIPTION "DES56" VERSION 1.1.2 EXPORTS luaopen_des56 genometools-1.5.1/src/external/md5-1.1.2/src/des56.h000066400000000000000000000055201211610345200214670ustar00rootroot00000000000000#ifndef DES56_H #define DES56_H 1 /* * Fast implementation of the DES, as described in the Federal Register, * Vol. 40, No. 52, p. 12134, March 17, 1975. * * Stuart Levy, Minnesota Supercomputer Center, April 1988. * Currently (2007) slevy@ncsa.uiuc.edu * NCSA, University of Illinois Urbana-Champaign * * Calling sequence: * * typedef unsigned long keysched[32]; * * fsetkey(key, keysched) / * Converts a DES key to a "key schedule" * / * unsigned char key[8]; * keysched *ks; * * fencrypt(block, decrypt, keysched) / * En/decrypts one 64-bit block * / * unsigned char block[8]; / * data, en/decrypted in place * / * int decrypt; / * 0=>encrypt, 1=>decrypt * / * keysched *ks; / * key schedule, as set by fsetkey * / * * Key and data block representation: * The 56-bit key (bits 1..64 including "parity" bits 8, 16, 24, ..., 64) * and the 64-bit data block (bits 1..64) * are each stored in arrays of 8 bytes. * Following the NBS numbering, the MSB has the bit number 1, so * key[0] = 128*bit1 + 64*bit2 + ... + 1*bit8, ... through * key[7] = 128*bit57 + 64*bit58 + ... + 1*bit64. * In the key, "parity" bits are not checked; their values are ignored. * */ /* =============================================================================== License des56.c is licensed under the terms of the MIT license reproduced below. This means that des56.c is free software and can be used for both academic and commercial purposes at absolutely no cost. =============================================================================== Copyright (C) 1988 Stuart Levy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ typedef unsigned long word32; typedef unsigned char tiny; typedef struct keysched { struct keystage { word32 h, l; } KS[16]; } keysched; extern void fsetkey(char key[8], keysched *ks); extern void fencrypt(char block[8], int decrypt, keysched *ks); #endif /*DES56_H*/ genometools-1.5.1/src/external/md5-1.1.2/src/ldes56.c000066400000000000000000000063461211610345200216450ustar00rootroot00000000000000#include #include #include "des56.h" #include "lua.h" #include "lauxlib.h" #include "ldes56.h" static int des56_decrypt( lua_State *L ) { char* decypheredText; keysched KS; int rel_index, abs_index; size_t cypherlen; const char *cypheredText = luaL_checklstring( L, 1, &cypherlen ); const char *key = luaL_optstring( L, 2, NULL ); int padinfo; padinfo = cypheredText[cypherlen-1]; cypherlen--; /* Aloca array */ decypheredText = (char *) malloc( (cypherlen+1) * sizeof(char)); if(decypheredText == NULL) { lua_pushstring(L, "Error decrypting file. Not enough memory."); lua_error(L); } /* Inicia decifragem */ if (key && strlen(key) >= 8) { char k[8]; int i; for (i=0; i<8; i++) k[i] = (unsigned char)key[i]; fsetkey(k, &KS); } else { lua_pushstring(L, "Error decrypting file. Invalid key."); lua_error(L); } rel_index = 0; abs_index = 0; while (abs_index < (int) cypherlen) { decypheredText[abs_index] = cypheredText[abs_index]; abs_index++; rel_index++; if( rel_index == 8 ) { rel_index = 0; fencrypt(&(decypheredText[abs_index - 8]), 1, &KS); } } decypheredText[abs_index] = 0; lua_pushlstring(L, decypheredText, (abs_index-padinfo)); free( decypheredText ); return 1; } static int des56_crypt( lua_State *L ) { char *cypheredText; keysched KS; int rel_index, pad, abs_index; size_t plainlen; const char *plainText = luaL_checklstring( L, 1, &plainlen ); const char *key = luaL_optstring( L, 2, NULL ); cypheredText = (char *) malloc( (plainlen+8) * sizeof(char)); if(cypheredText == NULL) { lua_pushstring(L, "Error encrypting file. Not enough memory."); lua_error(L); } if (key && strlen(key) >= 8) { char k[8]; int i; for (i=0; i<8; i++) k[i] = (unsigned char)key[i]; fsetkey(k, &KS); } else { lua_pushstring(L, "Error encrypting file. Invalid key."); lua_error(L); } rel_index = 0; abs_index = 0; while (abs_index < (int) plainlen) { cypheredText[abs_index] = plainText[abs_index]; abs_index++; rel_index++; if( rel_index == 8 ) { rel_index = 0; fencrypt(&(cypheredText[abs_index - 8]), 0, &KS); } } pad = 0; if(rel_index != 0) { /* Pads remaining bytes with zeroes */ while(rel_index < 8) { pad++; cypheredText[abs_index++] = 0; rel_index++; } fencrypt(&(cypheredText[abs_index - 8]), 0, &KS); } cypheredText[abs_index] = pad; lua_pushlstring( L, cypheredText, abs_index+1 ); free( cypheredText ); return 1; } /* ** Assumes the table is on top of the stack. */ static void set_info (lua_State *L) { lua_pushliteral (L, "_COPYRIGHT"); lua_pushliteral (L, "Copyright (C) 2007 PUC-Rio"); lua_settable (L, -3); lua_pushliteral (L, "_DESCRIPTION"); lua_pushliteral (L, "DES 56 cryptographic facilities for Lua"); lua_settable (L, -3); lua_pushliteral (L, "_VERSION"); lua_pushliteral (L, "DES56 1.1.2"); lua_settable (L, -3); } static const struct luaL_reg des56lib[] = { {"crypt", des56_crypt}, {"decrypt", des56_decrypt}, {NULL, NULL}, }; int luaopen_des56 (lua_State *L) { luaL_openlib (L, "des56", des56lib, 0); set_info (L); return 1; } genometools-1.5.1/src/external/md5-1.1.2/src/ldes56.h000066400000000000000000000000421211610345200216350ustar00rootroot00000000000000int luaopen_des56 (lua_State *L); genometools-1.5.1/src/external/md5-1.1.2/src/md5.c000066400000000000000000000144201211610345200212200ustar00rootroot00000000000000/** * $Id: md5.c,v 1.2 2008/03/24 20:59:12 mascarenhas Exp $ * Hash function MD5 * @author Marcela Ozorio Suarez, Roberto I. */ #include #include "md5.h" #define WORD 32 #define MASK 0xFFFFFFFF #if __STDC_VERSION__ >= 199901L #include typedef uint32_t WORD32; #else typedef unsigned int WORD32; #endif /** * md5 hash function. * @param message: aribtary string. * @param len: message length. * @param output: buffer to receive the hash value. Its size must be * (at least) HASHSIZE. */ void md5 (const char *message, long len, char *output); /* ** Realiza a rotacao no sentido horario dos bits da variavel 'D' do tipo WORD32. ** Os bits sao deslocados de 'num' posicoes */ #define rotate(D, num) (D<>(WORD-num)) /*Macros que definem operacoes relizadas pelo algoritmo md5 */ #define F(x, y, z) (((x) & (y)) | ((~(x)) & (z))) #define G(x, y, z) (((x) & (z)) | ((y) & (~(z)))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~(z)))) /*vetor de numeros utilizados pelo algoritmo md5 para embaralhar bits */ static const WORD32 T[64]={ 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 }; static void word32tobytes (const WORD32 *input, char *output) { int j = 0; while (j<4*4) { WORD32 v = *input++; output[j++] = (char)(v & 0xff); v >>= 8; output[j++] = (char)(v & 0xff); v >>= 8; output[j++] = (char)(v & 0xff); v >>= 8; output[j++] = (char)(v & 0xff); } } static void inic_digest(WORD32 *d) { d[0] = 0x67452301; d[1] = 0xEFCDAB89; d[2] = 0x98BADCFE; d[3] = 0x10325476; } /*funcao que implemeta os quatro passos principais do algoritmo MD5 */ static void digest(const WORD32 *m, WORD32 *d) { int j; /*MD5 PASSO1 */ for (j=0; j<4*4; j+=4) { d[0] = d[0]+ F(d[1], d[2], d[3])+ m[j] + T[j]; d[0]=rotate(d[0], 7); d[0]+=d[1]; d[3] = d[3]+ F(d[0], d[1], d[2])+ m[(j)+1] + T[j+1]; d[3]=rotate(d[3], 12); d[3]+=d[0]; d[2] = d[2]+ F(d[3], d[0], d[1])+ m[(j)+2] + T[j+2]; d[2]=rotate(d[2], 17); d[2]+=d[3]; d[1] = d[1]+ F(d[2], d[3], d[0])+ m[(j)+3] + T[j+3]; d[1]=rotate(d[1], 22); d[1]+=d[2]; } /*MD5 PASSO2 */ for (j=0; j<4*4; j+=4) { d[0] = d[0]+ G(d[1], d[2], d[3])+ m[(5*j+1)&0x0f] + T[(j-1)+17]; d[0] = rotate(d[0],5); d[0]+=d[1]; d[3] = d[3]+ G(d[0], d[1], d[2])+ m[((5*(j+1)+1)&0x0f)] + T[(j+0)+17]; d[3] = rotate(d[3], 9); d[3]+=d[0]; d[2] = d[2]+ G(d[3], d[0], d[1])+ m[((5*(j+2)+1)&0x0f)] + T[(j+1)+17]; d[2] = rotate(d[2], 14); d[2]+=d[3]; d[1] = d[1]+ G(d[2], d[3], d[0])+ m[((5*(j+3)+1)&0x0f)] + T[(j+2)+17]; d[1] = rotate(d[1], 20); d[1]+=d[2]; } /*MD5 PASSO3 */ for (j=0; j<4*4; j+=4) { d[0] = d[0]+ H(d[1], d[2], d[3])+ m[(3*j+5)&0x0f] + T[(j-1)+33]; d[0] = rotate(d[0], 4); d[0]+=d[1]; d[3] = d[3]+ H(d[0], d[1], d[2])+ m[(3*(j+1)+5)&0x0f] + T[(j+0)+33]; d[3] = rotate(d[3], 11); d[3]+=d[0]; d[2] = d[2]+ H(d[3], d[0], d[1])+ m[(3*(j+2)+5)&0x0f] + T[(j+1)+33]; d[2] = rotate(d[2], 16); d[2]+=d[3]; d[1] = d[1]+ H(d[2], d[3], d[0])+ m[(3*(j+3)+5)&0x0f] + T[(j+2)+33]; d[1] = rotate(d[1], 23); d[1]+=d[2]; } /*MD5 PASSO4 */ for (j=0; j<4*4; j+=4) { d[0] = d[0]+ I(d[1], d[2], d[3])+ m[(7*j)&0x0f] + T[(j-1)+49]; d[0] = rotate(d[0], 6); d[0]+=d[1]; d[3] = d[3]+ I(d[0], d[1], d[2])+ m[(7*(j+1))&0x0f] + T[(j+0)+49]; d[3] = rotate(d[3], 10); d[3]+=d[0]; d[2] = d[2]+ I(d[3], d[0], d[1])+ m[(7*(j+2))&0x0f] + T[(j+1)+49]; d[2] = rotate(d[2], 15); d[2]+=d[3]; d[1] = d[1]+ I(d[2], d[3], d[0])+ m[(7*(j+3))&0x0f] + T[(j+2)+49]; d[1] = rotate(d[1], 21); d[1]+=d[2]; } } static void bytestoword32 (WORD32 *x, const char *pt) { int i; for (i=0; i<16; i++) { int j=i*4; x[i] = (((WORD32)(unsigned char)pt[j+3] << 8 | (WORD32)(unsigned char)pt[j+2]) << 8 | (WORD32)(unsigned char)pt[j+1]) << 8 | (WORD32)(unsigned char)pt[j]; } } static void put_length(WORD32 *x, long len) { /* in bits! */ x[14] = (WORD32)((len<<3) & MASK); x[15] = (WORD32)(len>>(32-3) & 0x7); } /* ** returned status: * 0 - normal message (full 64 bytes) * 1 - enough room for 0x80, but not for message length (two 4-byte words) * 2 - enough room for 0x80 plus message length (at least 9 bytes free) */ static int converte (WORD32 *x, const char *pt, int num, int old_status) { int new_status = 0; char buff[64]; if (num<64) { memcpy(buff, pt, num); /* to avoid changing original string */ memset(buff+num, 0, 64-num); if (old_status == 0) buff[num] = '\200'; new_status = 1; pt = buff; } bytestoword32(x, pt); if (num <= (64 - 9)) new_status = 2; return new_status; } void md5 (const char *message, long len, char *output) { WORD32 d[4]; int status = 0; long i = 0; inic_digest(d); while (status != 2) { WORD32 d_old[4]; WORD32 wbuff[16]; int numbytes = (len-i >= 64) ? 64 : len-i; /*salva os valores do vetor digest*/ d_old[0]=d[0]; d_old[1]=d[1]; d_old[2]=d[2]; d_old[3]=d[3]; status = converte(wbuff, message+i, numbytes, status); if (status == 2) put_length(wbuff, len); digest(wbuff, d); d[0]+=d_old[0]; d[1]+=d_old[1]; d[2]+=d_old[2]; d[3]+=d_old[3]; i += numbytes; } word32tobytes(d, output); } genometools-1.5.1/src/external/md5-1.1.2/src/md5.def000066400000000000000000000001151211610345200215300ustar00rootroot00000000000000LIBRARY core.dll DESCRIPTION "LuaMD5" VERSION 1.1.2 EXPORTS luaopen_md5_core genometools-1.5.1/src/external/md5-1.1.2/src/md5.h000066400000000000000000000004611211610345200212250ustar00rootroot00000000000000/** * $Id: md5.h,v 1.2 2006/03/03 15:04:49 tomas Exp $ * Cryptographic module for Lua. * @author Roberto Ierusalimschy */ #ifndef md5_h #define md5_h #include #define HASHSIZE 16 void md5 (const char *message, long len, char *output); int luaopen_md5_core (lua_State *L); #endif genometools-1.5.1/src/external/md5-1.1.2/src/md5lib.c000066400000000000000000000124161211610345200217120ustar00rootroot00000000000000/** * $Id: md5lib.c,v 1.10 2008/05/12 20:51:27 carregal Exp $ * Cryptographic and Hash functions for Lua * @author Roberto Ierusalimschy */ #include #include #include #include #include #if ! defined (LUA_VERSION_NUM) || LUA_VERSION_NUM < 501 #include "compat-5.1.h" #endif #include "md5.h" /** * Hash function. Returns a hash for a given string. * @param message: arbitrary binary string. * @return A 128-bit hash string. */ static int lmd5 (lua_State *L) { char buff[16]; size_t l; const char *message = luaL_checklstring(L, 1, &l); md5(message, l, buff); lua_pushlstring(L, buff, 16L); return 1; } /** * X-Or. Does a bit-a-bit exclusive-or of two strings. * @param s1: arbitrary binary string. * @param s2: arbitrary binary string with same length as s1. * @return a binary string with same length as s1 and s2, * where each bit is the exclusive-or of the corresponding bits in s1-s2. */ static int ex_or (lua_State *L) { size_t l1, l2; const char *s1 = luaL_checklstring(L, 1, &l1); const char *s2 = luaL_checklstring(L, 2, &l2); luaL_Buffer b; luaL_argcheck( L, l1 == l2, 2, "lengths must be equal" ); luaL_buffinit(L, &b); while (l1--) luaL_putchar(&b, (*s1++)^(*s2++)); luaL_pushresult(&b); return 1; } static void checkseed (lua_State *L) { if (lua_isnone(L, 3)) { /* no seed? */ time_t tm = time(NULL); /* for `random' seed */ lua_pushlstring(L, (char *)&tm, sizeof(tm)); } } #define MAXKEY 256 #define BLOCKSIZE 16 static int initblock (lua_State *L, const char *seed, int lseed, char *block) { size_t lkey; const char *key = luaL_checklstring(L, 2, &lkey); if (lkey > MAXKEY) luaL_error(L, "key too long (> %d)", MAXKEY); memset(block, 0, BLOCKSIZE); memcpy(block, seed, lseed); memcpy(block+BLOCKSIZE, key, lkey); return (int)lkey+BLOCKSIZE; } static void codestream (lua_State *L, const char *msg, size_t lmsg, char *block, int lblock) { luaL_Buffer b; luaL_buffinit(L, &b); while (lmsg > 0) { char code[BLOCKSIZE]; int i; md5(block, lblock, code); for (i=0; i 0; i++, lmsg--) code[i] ^= *msg++; luaL_addlstring(&b, code, i); memcpy(block, code, i); /* update seed */ } luaL_pushresult(&b); } static void decodestream (lua_State *L, const char *cypher, size_t lcypher, char *block, int lblock) { luaL_Buffer b; luaL_buffinit(L, &b); while (lcypher > 0) { char code[BLOCKSIZE]; int i; md5(block, lblock, code); /* update seed */ for (i=0; i 0; i++, lcypher--) code[i] ^= *cypher++; luaL_addlstring(&b, code, i); memcpy(block, cypher-i, i); } luaL_pushresult(&b); } /** * Encrypts a string. Uses the hash function md5 in CFB (Cipher-feedback * mode). * @param message: arbitrary binary string to be encrypted. * @param key: arbitrary binary string to be used as a key. * @param [seed]: optional arbitrary binary string to be used as a seed. * if no seed is provided, the function uses the result of * time() as a seed. * @return The cyphertext (as a binary string). */ static int crypt (lua_State *L) { size_t lmsg; const char *msg = luaL_checklstring(L, 1, &lmsg); size_t lseed; const char *seed; int lblock; char block[BLOCKSIZE+MAXKEY]; checkseed(L); seed = luaL_checklstring(L, 3, &lseed); if (lseed > BLOCKSIZE) luaL_error(L, "seed too long (> %d)", BLOCKSIZE); /* put seed and seed length at the beginning of result */ block[0] = (char)lseed; memcpy(block+1, seed, lseed); lua_pushlstring(L, block, lseed+1); /* to concat with result */ lblock = initblock(L, seed, lseed, block); codestream(L, msg, lmsg, block, lblock); lua_concat(L, 2); return 1; } /** * Decrypts a string. For any message, key, and seed, we have that * decrypt(crypt(msg, key, seed), key) == msg. * @param cyphertext: message to be decrypted (this must be the result of a previous call to crypt. * @param key: arbitrary binary string to be used as a key. * @return The plaintext. */ static int decrypt (lua_State *L) { size_t lcyphertext; const char *cyphertext = luaL_checklstring(L, 1, &lcyphertext); size_t lseed = cyphertext[0]; const char *seed = cyphertext+1; int lblock; char block[BLOCKSIZE+MAXKEY]; luaL_argcheck(L, lcyphertext >= lseed+1 && lseed <= BLOCKSIZE, 1, "invalid cyphered string"); cyphertext += lseed+1; lcyphertext -= lseed+1; lblock = initblock(L, seed, lseed, block); decodestream(L, cyphertext, lcyphertext, block, lblock); return 1; } /* ** Assumes the table is on top of the stack. */ static void set_info (lua_State *L) { lua_pushliteral (L, "_COPYRIGHT"); lua_pushliteral (L, "Copyright (C) 2003 PUC-Rio"); lua_settable (L, -3); lua_pushliteral (L, "_DESCRIPTION"); lua_pushliteral (L, "Basic cryptographic facilities"); lua_settable (L, -3); lua_pushliteral (L, "_VERSION"); lua_pushliteral (L, "MD5 1.1.2"); lua_settable (L, -3); } static struct luaL_reg md5lib[] = { {"sum", lmd5}, {"exor", ex_or}, {"crypt", crypt}, {"decrypt", decrypt}, {NULL, NULL} }; int luaopen_md5_core (lua_State *L) { luaL_openlib(L, "md5.core", md5lib, 0); set_info (L); return 1; } genometools-1.5.1/src/external/md5-1.1.2/tests/000077500000000000000000000000001211610345200207415ustar00rootroot00000000000000genometools-1.5.1/src/external/md5-1.1.2/tests/DES56/000077500000000000000000000000001211610345200215275ustar00rootroot00000000000000genometools-1.5.1/src/external/md5-1.1.2/tests/DES56/Makefile000066400000000000000000000011071211610345200231660ustar00rootroot00000000000000 CFLAGS= -O6 -DUSG=0 -DBSD=0 FILES= Makefile des56.h des56.c fdemo.c ftest.c all: demo test # demo -- evaluate, test and time DES, works even on non-UNIX systems demo: fdemo ./fdemo -demo -c 1000 fdemo: fdemo.o des56.o ${CC} -o $@ $@.o des56.o # test -- evaluates DES, compares with UNIX crypt test: ftest ./ftest 4869207468657265 a820105412de3991 77129bd8c052e7 ./ftest 1.21280ac -c 5000000 -k 1000000 -C 100000 -K 100000 ftest: ftest.o des56.o ${CC} -o $@ $@.o des56.o -lcrypt dist: @tar cvf - ${FILES} clean: rm -f clean core fdemo ftest fdemo.o ftest.o des56.o genometools-1.5.1/src/external/md5-1.1.2/tests/DES56/fdemo.c000066400000000000000000000101441211610345200227650ustar00rootroot00000000000000 /* * Fast DES evaluation & benchmarking, not dependent on UNIX */ #include #include #include #include "des56.h" typedef struct { char b[8]; } chunk; char *wprint(chunk *v) { static char s[18]; register int i; register char *p; p = s; for(i = 0; i < 8; i++) { sprintf(p, "%02x", v->b[i] & 0xff); p += 2; if(i == 4-1) *p++ = '.'; } return(s); } void getv(char *s, chunk *v) { register int i, t; if(s[0] == '0' && s[1] == 'x') s += 2; /* Ignore C-style 0x prefix */ for(i = 0; i < 8; i++) { t = 0; if(*s >= '0' && *s <= '9') t = *s++ - '0'; else if(*s >= 'a' && *s <= 'f') t = *s++ - 'a' + 10; else if(*s >= 'A' && *s <= 'F') t = *s++ - 'A' + 10; t <<= 4; if(*s >= '0' && *s <= '9') t |= *s++ - '0'; else if(*s >= 'a' && *s <= 'f') t |= *s++ - 'a' + 10; else if(*s >= 'A' && *s <= 'F') t |= *s++ - 'A' + 10; v->b[i] = t; if(*s == '.' && i == 3) { s++; } } } struct demo { int decrypt; char *key, *data; char *expect; }; struct demo demos[] = { { 0, "00000000.00000000", "00000000.00000000", "8ca64de9.c1b123a7" }, { 0, "11111111.11111111", "00000000.00000000", "82e13665.b4624df5" }, { 0, "12486248.62486248", "f0e1d2c3.b4a59687", "f4682865.376f93ea" }, { 1, "12486248.62486248", "f0e1d2c3.b4a59687", "df597e0f.84fd994f" }, { 0, "1bac8107.6a39042d", "812801da.cbe98103", "d8883b2c.4a7c61dd" }, { 1, "1bac8107.6a39042d", "d8883b2c.4a7c61dd", "812801da.cbe98103" }, { 1, "fedcba98.76543210", "a68cdca9.0c9021f9", "00000000.00000000" }, { 0, "eca86420.13579bdf", "01234567.89abcdef", "a8418a54.ff97a505" }, }; void fdemo(void) { keysched KS; register struct demo *dp; chunk key, data; char *got; printf("\ Op( Key, Data to En/Decrypt) = Computed ?= Expected\n"); for(dp = demos; dp < &demos[sizeof(demos)/sizeof(*demos)]; dp++) { getv(dp->key, &key); fsetkey(key.b, &KS); getv(dp->data, &data); fencrypt(data.b, dp->decrypt, &KS); got = wprint(&data); printf("%c(%s, %s) = %s %c %s\n", "ED"[dp->decrypt], dp->key, dp->data, got, strcmp(got, dp->expect) ? '!' : '=', dp->expect); } } int main(int argc, char *argv[]) { register int i; chunk key, olddata, newdata; int decrypt = 0; int first = 1; keysched KS; if(argc <= 1) { usage: printf("\ Usage: fdemo key [ -demo ] [ -{ck} N ] [ [-{ed}] data ... ]\n\ Demonstrate and/or time fast DES routines.\n\ ``key'' and ``data'' are left-justified, 0-padded hex values <= 16 digits\n\ optionally with a `.' at the 32-bit point\n\ -demo tries a batch of values, compares fencrypt() with precomputed result\n\ -c N encrypt N times using fast DES\n\ -k N set-key N times using fast DES\n\ -e encrypt following data value(s) (default)\n\ -d decrypt following data value(s)\n"); return(1); } for(i = 1; i < argc; i++) { if(argv[i][0] == '-') { int count, n; char c, *op; /* Should use getopt but it might not be there */ c = argv[i][1]; if(c == 'e' || c == 'd') { if(strcmp(argv[i], "-demo") == 0) { fdemo(); } else { decrypt = (c == 'd'); } continue; } fsetkey(key.b, &KS); /* Make sure it's done at least once */ op = &argv[i][2]; if(*op == '\0') if((op = argv[++i]) == NULL) goto usage; count = atoi(op); if(count <= 0) count = 1; n = count; printf("Starting ...<\007"); fflush(stdout); switch(c) { case 'c': op = "fencrypt"; do fencrypt(newdata.b, 0, &KS); while(--n > 0); break; case 'k': op = "fsetkey"; do fsetkey(key.b, &KS); while(--n > 0); break; default: printf("Unknown option -%c\n", c); goto usage; } printf("\007> completed %d %s's\n", count, op); } else if(first) { getv(argv[1], &key); fsetkey(key.b, &KS); printf("key\t%s\n", wprint(&key)); first = 0; } else { getv(argv[i], &olddata); newdata = olddata; printf("%s %s => ", decrypt ? "decrypt" : "encrypt", wprint(&olddata)); fencrypt(newdata.b, decrypt, &KS); printf("%s %s => ", !decrypt ? "decrypt" : "encrypt", wprint(&newdata)); fencrypt(newdata.b, !decrypt, &KS); printf("%s\n", wprint(&newdata)); } } return(0); } genometools-1.5.1/src/external/md5-1.1.2/tests/DES56/ftest.c000066400000000000000000000107421211610345200230240ustar00rootroot00000000000000 /* * Fast DES evaluation & benchmarking for UNIX * Compares output of fencrypt()/fsetkey() with UNIX crypt()/encrypt()/setkey() * and measures speed using times(). */ #include #include #if USG #include #endif /*USG*/ #include /* for HZ */ #include #include #include "des56.h" typedef struct { char b[8]; } chunk; #ifdef CRAY # define USG 1 #endif /*CRAY*/ #ifndef USG # define USG 0 #endif /*!USG*/ #if BSD >= 43 && defined(vax) && !defined(HZ) # define HZ 100 #endif char * bprint(char b[64]) { static char s[17]; register int i; for(i = 0; i < 64; i += 4) sprintf(&s[i/4], "%1x", b[i]<<3 | b[i+1]<<2 | b[i+2]<<1 | b[i+3]); return(s); } char * wprint(chunk *v) { static char s[17]; register int i; for(i = 0; i < 8; i++) sprintf(&s[2*i], "%02x", v->b[i] & 0xff); return(s); } void getv(char *s, chunk *v) { register int i, t; if(s[0] == '0' && s[1] == 'x') s += 2; for(i = 0; i < 8; i++) { t = 0; if(*s >= '0' && *s <= '9') t = *s++ - '0'; else if(*s >= 'a' && *s <= 'f') t = *s++ - 'a' + 10; else if(*s >= 'A' && *s <= 'F') t = *s++ - 'A' + 10; t <<= 4; if(*s >= '0' && *s <= '9') t |= *s++ - '0'; else if(*s >= 'a' && *s <= 'f') t |= *s++ - 'a' + 10; else if(*s >= 'A' && *s <= 'F') t |= *s++ - 'A' + 10; v->b[i] = t; if(*s == '.') { s++; i = 4-1; } } } void expand(chunk *v, char bits[64]) { register unsigned int i; for(i = 0; i < 64; i++) bits[i] = (v->b[i/8] >> (7 - i%8)) & 1; } int main(int argc, char *argv[]) { register int i; chunk key, olddata, newdata; char bkey[64], bdata[64]; int decrypt = 0; keysched KS; if(argc < 2 || argv[1][0] == '-') { usage: printf("\ Usage: %s key [ -{ckCK} count ] [ data ... ]\n\ Demonstrate and/or time fast DES routines.\n\ ``key'' and ``data'' are left-justified, 0-padded hex values <= 16 digits\n\ By default, encrypts & decrypts each 'data' block with both fastdes and\n\ crypt() library DES routines to show equality.\n\ -c N encrypt N times using fast DES\n\ -k N set-key N times using fast DES\n\ -C N encrypt N times using library DES\n\ %s", argv[0], USG ? "" : "\ -K N set-key N times using library DES\n"); exit(1); } getv(argv[1], &key); fsetkey(key.b, &KS); expand(&key, bkey); #if USG /* System V systems don't seem to have setkey, just crypt * so we use that to set the key. */ for(i = 0; i < 8; i++) bdata[i] = (key.b[i] >> 1) | 0x80; bdata[8] = '\0'; crypt((char *)bdata, ".."); /* Key, no salt */ #else /*!USG*/ setkey(bkey); #endif /*!USG*/ printf("key\t%s\n", bprint(bkey)); for(i = 2; i < argc; i++) { if(argv[i][0] == '-') { int count, n; char c, *op; struct tms now, then; c = argv[i][1]; op = &argv[i][2]; if(*op == '\0') if((op = argv[++i]) == NULL) goto usage; count = atoi(op); if(count <= 0) count = 1; n = count; expand(&olddata, bdata); times(&now); switch(c) { case 'c': op = "fencrypt"; do fencrypt(newdata.b, 0, &KS); while(--n > 0); break; case 'k': op = "fsetkey"; do fsetkey(key.b, &KS); while(--n > 0); break; case 'C': op = "library encrypt"; do encrypt(bdata, decrypt); while(--n > 0); break; case 'K': #if USG printf("UNIX library has no setkey() function on this system\n"); continue; #else /*!USG*/ op = "library setkey"; do setkey(bkey); while(--n > 0); break; #endif /*!USG*/ default: printf("Unknown option -%c\n", c); goto usage; } times(&then); n = then.tms_utime - now.tms_utime; printf("%d %s's in %0.2f seconds (%.2f us apiece)\n", count, op, (float) n / HZ, (1.0e6 * n / (HZ * count))); } else { /* Demonstrate that it works for a particular data block. * To compare with UNIX encrypt(), we must play its game. * On BSD systems, encrypt(block, 1) is the inverse of (..., 0) * but on USG systems the second parameter is ignored and * encrypt(block, x) always encrypts. */ getv(argv[i], &olddata); newdata = olddata; printf("\tOriginal data\t\tEncrypted\t\t%s\n", USG ? "Encrypted again" : "Decrypted"); printf("fastdes\t%s", wprint(&olddata)); fencrypt(newdata.b, 0, &KS); printf("\t%s", wprint(&newdata)); fencrypt(newdata.b, USG ? 0 : 1, &KS); printf("\t%s\n", wprint(&newdata)); expand(&olddata, bdata); printf("UNIXdes\t%s", bprint(bdata)); encrypt(bdata, 0); printf("\t%s", bprint(bdata)); encrypt(bdata, USG ? 0 : 1); printf("\t%s\n", bprint(bdata)); } } exit(0); } genometools-1.5.1/src/external/md5-1.1.2/tests/test.lua000066400000000000000000000065751211610345200224400ustar00rootroot00000000000000#!/usr/local/bin/lua50 -- Testing MD5 require"md5" assert(md5.exor('', '') == '') assert(md5.exor('alo alo', '\0\0\0\0\0\0\0') == 'alo alo') local function invert (s) return md5.exor(s, string.rep('\255', string.len(s))) end x = string.rep('0123456789', 1000) assert(md5.exor(x,x) == string.rep('\0', 10000)) assert(md5.exor(x,invert(x)) == string.rep('\255', 10000)) assert(invert(invert('alo alo')) == 'alo alo') assert(invert(invert(invert('alo\0\255alo'))) == invert('alo\0\255alo')) -- test some known sums assert(md5.sumhexa("") == "d41d8cd98f00b204e9800998ecf8427e") assert(md5.sumhexa("a") == "0cc175b9c0f1b6a831c399e269772661") assert(md5.sumhexa("abc") == "900150983cd24fb0d6963f7d28e17f72") assert(md5.sumhexa("message digest") == "f96b697d7cb7938d525a2f31aaf161d0") assert(md5.sumhexa("abcdefghijklmnopqrstuvwxyz") == "c3fcd3d76192e4007dfb496cca67e13b") assert(md5.sumhexa("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") == "d174ab98d277d9f5a5611c2c9f419d9f") -- test padding borders assert(md5.sumhexa(string.rep('a',53)) == "e9e7e260dce84ffa6e0e7eb5fd9d37fc") assert(md5.sumhexa(string.rep('a',54)) == "eced9e0b81ef2bba605cbc5e2e76a1d0") assert(md5.sumhexa(string.rep('a',55)) == "ef1772b6dff9a122358552954ad0df65") assert(md5.sumhexa(string.rep('a',56)) == "3b0c8ac703f828b04c6c197006d17218") assert(md5.sumhexa(string.rep('a',57)) == "652b906d60af96844ebd21b674f35e93") assert(md5.sumhexa(string.rep('a',63)) == "b06521f39153d618550606be297466d5") assert(md5.sumhexa(string.rep('a',64)) == "014842d480b571495a4a0363793f7367") assert(md5.sumhexa(string.rep('a',65)) == "c743a45e0d2e6a95cb859adae0248435") assert(md5.sumhexa(string.rep('a',255)) == "46bc249a5a8fc5d622cf12c42c463ae0") assert(md5.sumhexa(string.rep('a',256)) == "81109eec5aa1a284fb5327b10e9c16b9") assert(md5.sumhexa( "12345678901234567890123456789012345678901234567890123456789012345678901234567890") == "57edf4a22be3c955ac49da2e2107b67a") print '+' local tolerance = 1.12 local function contchars (s) local a = {} for i=0,255 do a[string.char(i)] = 0 end for c in string.gfind(s, '.') do a[c] = a[c] + 1 end local av = string.len(s)/256 for i=0,255 do local c = string.char(i) assert(a[c] < av*tolerance and a[c] > av/tolerance, i) end end local key = 'xuxu bacana' assert(md5.decrypt(md5.crypt('', key), key) == '') assert(md5.decrypt(md5.crypt('', key, '\0\0seed\0'), key) == '') assert(md5.decrypt(md5.crypt('a', key), key) == 'a') local msg = string.rep("1233456789\0\1\2\3\0\255", 10000) local code = md5.crypt(msg, key, "seed") assert(md5.decrypt(code, key) == msg) contchars(code) assert(md5.crypt('a', 'a') ~= md5.crypt('a', 'b')) print"MD5 OK" -- Testing DES 56 require 'des56' local key = '&3g4&gs*&3' assert(des56.decrypt(des56.crypt('', key), key) == '') assert(des56.decrypt(des56.crypt('', key), key) == '') assert(des56.decrypt(des56.crypt('a', key), key) == 'a') assert(des56.decrypt(des56.crypt('1234567890', key), key) == '1234567890') local msg = string.rep("1233456789\0\1\2\3\0\255", 10000) local code = des56.crypt(msg, key) assert(des56.decrypt(code, key) == msg) assert(des56.crypt('a', '12345678') ~= des56.crypt('a', '87654321')) local ascii = "" for i = 0, 255 do ascii = ascii..string.char(i) end assert(des56.decrypt(des56.crypt(ascii, key), key) == ascii) key = string.sub(ascii, 2) assert(des56.decrypt(des56.crypt(ascii, key), key) == ascii) print"DES56 OK"genometools-1.5.1/src/external/md5-1.1.2/vc6/000077500000000000000000000000001211610345200202755ustar00rootroot00000000000000genometools-1.5.1/src/external/md5-1.1.2/vc6/md5.def000066400000000000000000000001151211610345200214370ustar00rootroot00000000000000LIBRARY core.dll DESCRIPTION "LuaMD5" VERSION 1.0.1 EXPORTS luaopen_md5_core genometools-1.5.1/src/external/md5-1.1.2/vc6/md5.dsw000066400000000000000000000011051211610345200214760ustar00rootroot00000000000000Microsoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "md5_dll"=.\md5_dll.dsp - Package Owner=<4> Package=<5> {{{ begin source code control md5 .. end source code control }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### genometools-1.5.1/src/external/md5-1.1.2/vc6/md5_dll.dsp000066400000000000000000000112361211610345200223300ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="md5_dll" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=md5_dll - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "md5_dll.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "md5_dll.mak" CFG="md5_dll - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "md5_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "md5_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "md5_dll" # PROP Scc_LocalPath ".." CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "md5_dll - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "../lib/vc6" # PROP Intermediate_Dir "md5_dll/Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "../../external-src/lua50/include" /I "../../compat/src" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x416 /d "NDEBUG" # ADD RSC /l 0x416 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 lua50.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"../bin/vc6/lib/md5/core.dll" /libpath:"../../external-src/lua50/lib/dll" # Begin Special Build Tool SOURCE="$(InputPath)" # End Special Build Tool !ELSEIF "$(CFG)" == "md5_dll - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "../lib/vc6" # PROP Intermediate_Dir "md5_dll/Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../external-src/lua50/include" /I "../../compat/src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x416 /d "_DEBUG" # ADD RSC /l 0x416 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 lua50.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"../bin/vc6/lib/md5/cored.dll" /pdbtype:sept /libpath:"../../external-src/lua50/lib/dll" !ENDIF # Begin Target # Name "md5_dll - Win32 Release" # Name "md5_dll - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE="..\..\compat\src\compat-5.1.c" # End Source File # Begin Source File SOURCE=..\src\md5.c # End Source File # Begin Source File SOURCE=.\md5.def # End Source File # Begin Source File SOURCE=..\src\md5lib.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE="..\..\compat\src\compat-5.1.h" # End Source File # Begin Source File SOURCE=..\src\md5.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project genometools-1.5.1/src/external/samtools-0.1.18/000077500000000000000000000000001211610345200210415ustar00rootroot00000000000000genometools-1.5.1/src/external/samtools-0.1.18/AUTHORS000066400000000000000000000016241211610345200221140ustar00rootroot00000000000000Heng Li from the Sanger Institute wrote most of the initial source codes of SAMtools and various converters. Bob Handsaker from the Broad Institute is a major contributor to the SAM/BAM specification. He designed and implemented the BGZF format, the underlying indexable compression format for the BAM format. BGZF does not support arithmetic between file offsets. Jue Ruan for the Beijing Genome Institute designed and implemented the RAZF format, an alternative indexable compression format. RAZF supports arithmetic between file offsets, at the cost of increased index file size and the full compatibility with gzip. RAZF is optional and only used in `faidx' for indexing RAZF compressed fasta files. Colin Hercus updated novo2sam.pl to support gapped alignment by novoalign. Petr Danecek contributed the header parsing library sam_header.c and sam2vcf.pl script and added knet support to the RAZF library. genometools-1.5.1/src/external/samtools-0.1.18/COPYING000066400000000000000000000020751211610345200221000ustar00rootroot00000000000000The MIT License Copyright (c) 2008-2009 Genome Research Ltd. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.genometools-1.5.1/src/external/samtools-0.1.18/ChangeLog000066400000000000000000006211161211610345200226220ustar00rootroot00000000000000------------------------------------------------------------------------ r925 | lh3lh3 | 2011-02-28 15:45:17 -0500 (Mon, 28 Feb 2011) | 2 lines Changed paths: M /trunk/samtools/phase.c minor changes to a heuristic rule ------------------------------------------------------------------------ r924 | lh3lh3 | 2011-02-28 15:24:04 -0500 (Mon, 28 Feb 2011) | 4 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bcftools/vcfutils.pl M /trunk/samtools/phase.c * 0.1.12-r924:126 * fixed a bug in phase (due to recent changes) * fixed a bug in vcf2fq ------------------------------------------------------------------------ r923 | lh3lh3 | 2011-02-28 12:57:39 -0500 (Mon, 28 Feb 2011) | 5 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/phase.c * put version number in bam.h * write version to BCF * in phase, change the default -q to 37 * output a little more information during phasing ------------------------------------------------------------------------ r922 | lh3lh3 | 2011-02-25 16:40:09 -0500 (Fri, 25 Feb 2011) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.tex M /trunk/samtools/bcftools/bcf2qcall.c M /trunk/samtools/bcftools/bcfutils.c M /trunk/samtools/bcftools/ld.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/vcf.c M /trunk/samtools/cut_target.c * change the order of PL/GL according to the latest VCF spec * change the type of SP to int32_t ------------------------------------------------------------------------ r921 | lh3lh3 | 2011-02-25 14:40:56 -0500 (Fri, 25 Feb 2011) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.tex update the BCF spec ------------------------------------------------------------------------ r920 | lh3lh3 | 2011-02-25 00:59:27 -0500 (Fri, 25 Feb 2011) | 2 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam_md.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c A /trunk/samtools/cut_target.c M /trunk/samtools/errmod.h M /trunk/samtools/faidx.c M /trunk/samtools/khash.h M /trunk/samtools/kstring.c M /trunk/samtools/kstring.h A /trunk/samtools/phase.c M /trunk/samtools/samtools.1 added the phase command ------------------------------------------------------------------------ r918 | lh3lh3 | 2011-02-24 10:05:54 -0500 (Thu, 24 Feb 2011) | 2 lines Changed paths: M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/prob1.h added "const" to bcf_p1_cal() ------------------------------------------------------------------------ r917 | lh3lh3 | 2011-02-24 09:36:30 -0500 (Thu, 24 Feb 2011) | 2 lines Changed paths: M /trunk/samtools/bam.c more meaningful BAM truncation message ------------------------------------------------------------------------ r916 | lh3lh3 | 2011-02-24 09:35:06 -0500 (Thu, 24 Feb 2011) | 3 lines Changed paths: M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/vcf.c * automatically fix errors in GL * output unrecognized FORMAT as "." ------------------------------------------------------------------------ r913 | lh3lh3 | 2011-02-10 22:59:47 -0500 (Thu, 10 Feb 2011) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/vcf.c finished VCF->BCF conversion ------------------------------------------------------------------------ r910 | petulda | 2011-02-03 03:13:48 -0500 (Thu, 03 Feb 2011) | 1 line Changed paths: M /trunk/samtools/bcftools/vcfutils.pl Prevent division by zero ------------------------------------------------------------------------ r909 | lh3lh3 | 2011-02-02 11:29:20 -0500 (Wed, 02 Feb 2011) | 2 lines Changed paths: M /trunk/samtools/bcftools/call1.c fixed a typo in the VCF header ------------------------------------------------------------------------ r908 | lh3lh3 | 2011-02-02 11:28:24 -0500 (Wed, 02 Feb 2011) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam_index.c * fixed an out-of-boundary bug * improved sorting order checking in index ------------------------------------------------------------------------ r907 | lh3lh3 | 2011-01-29 22:59:20 -0500 (Sat, 29 Jan 2011) | 4 lines Changed paths: M /trunk/samtools/INSTALL M /trunk/samtools/bam_tview.c M /trunk/samtools/knetfile.c * avoid a segfault when network connect fails * update INSTALL * fixed a bug in tview on big-endian by Nathan Weeks ------------------------------------------------------------------------ r903 | lh3lh3 | 2011-01-27 14:50:02 -0500 (Thu, 27 Jan 2011) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_md.c * fixed a rare memory issue in bam_md.c * fixed a bug in indel calling related to unmapped and refskip reads ------------------------------------------------------------------------ r902 | lh3lh3 | 2011-01-23 21:46:18 -0500 (Sun, 23 Jan 2011) | 2 lines Changed paths: M /trunk/samtools/bcftools/fet.c fixed two minor bugs in Fisher's exact test ------------------------------------------------------------------------ r899 | petulda | 2011-01-19 09:28:02 -0500 (Wed, 19 Jan 2011) | 1 line Changed paths: M /trunk/samtools/bcftools/vcfutils.pl Skip sites with unknown ref ------------------------------------------------------------------------ r898 | lh3lh3 | 2011-01-15 12:56:05 -0500 (Sat, 15 Jan 2011) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_md.c move bam_nt16_nt4_table[] from bam_maqcns.c to bam_md.c ------------------------------------------------------------------------ r896 | lh3lh3 | 2011-01-06 10:52:15 -0500 (Thu, 06 Jan 2011) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/bcfutils.c M /trunk/samtools/bcftools/call1.c * samtools-0.1.12-10 (r896) * allow to exclude read groups in mpileup ------------------------------------------------------------------------ r895 | lh3lh3 | 2011-01-04 11:31:29 -0500 (Tue, 04 Jan 2011) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.tex sorry. It is SP not ST ------------------------------------------------------------------------ r894 | lh3lh3 | 2011-01-04 11:29:06 -0500 (Tue, 04 Jan 2011) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.tex added ST ------------------------------------------------------------------------ r893 | petulda | 2011-01-04 06:55:56 -0500 (Tue, 04 Jan 2011) | 1 line Changed paths: M /trunk/samtools/bcftools/call1.c Fixed a typo in read_samples ------------------------------------------------------------------------ r892 | jmarshall | 2010-12-28 08:06:49 -0500 (Tue, 28 Dec 2010) | 9 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bcftools/Makefile M /trunk/samtools/examples/Makefile System libraries go *after* user libraries in link commands, because the user libraries may themselves have dependencies that are satisfied by the system libraries. It's not rocket science! This makes a difference with some linkers; or with -static or --as-needed. The examples/Makefile fix is from Charles Plessy. See also http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=606004 ------------------------------------------------------------------------ r891 | lh3lh3 | 2010-12-21 12:16:33 -0500 (Tue, 21 Dec 2010) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/bcfutils.c M /trunk/samtools/bcftools/call1.c * samtools-0.1.12-9 (r891) * allow to call SNPs from a subset of samples ------------------------------------------------------------------------ r889 | lh3lh3 | 2010-12-15 11:28:16 -0500 (Wed, 15 Dec 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bamtk.c * samtools-0.1.12-12 (r889) * set mapQ as 20 if it equals 255 ------------------------------------------------------------------------ r888 | lh3lh3 | 2010-12-14 22:41:09 -0500 (Tue, 14 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c When -B is applied to mpileup, still use paired reads only unless -A is flagged. ------------------------------------------------------------------------ r887 | lh3lh3 | 2010-12-14 22:37:05 -0500 (Tue, 14 Dec 2010) | 3 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.12-6 (r887) * added a hidden option -E to mpileup/calmd. -E triggers an alternative way to apply BAQ. ------------------------------------------------------------------------ r886 | lh3lh3 | 2010-12-14 12:51:03 -0500 (Tue, 14 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c (Arguably) improved the indel caller a tiny bit for lowCov data. ------------------------------------------------------------------------ r885 | petulda | 2010-12-14 04:55:46 -0500 (Tue, 14 Dec 2010) | 1 line Changed paths: M /trunk/samtools/bcftools/call1.c Fixed the VCF header to pass validation ------------------------------------------------------------------------ r884 | lh3lh3 | 2010-12-12 23:02:19 -0500 (Sun, 12 Dec 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/vcfutils.pl * samtools-0.1.12-4 (r884) * fixed a long-existing flaw in the INDEL calling model ------------------------------------------------------------------------ r883 | lh3lh3 | 2010-12-11 20:05:42 -0500 (Sat, 11 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcfutils.c M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/vcfutils.pl compute max SP and max GQ from sample genotypes ------------------------------------------------------------------------ r880 | lh3lh3 | 2010-12-10 10:50:54 -0500 (Fri, 10 Dec 2010) | 2 lines Changed paths: D /trunk/samtools/bcftools/bcf-fix.pl drop bcf-fix.pl as it is redundant by the latest changes ------------------------------------------------------------------------ r879 | lh3lh3 | 2010-12-10 10:50:29 -0500 (Fri, 10 Dec 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/vcf.c * fixed a minor issue in printing VCFs * write bcftools specific INFO and FORMAT in the header ------------------------------------------------------------------------ r878 | lh3lh3 | 2010-12-10 10:09:14 -0500 (Fri, 10 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/bcfutils.c M /trunk/samtools/bcftools/call1.c Make sure that the GT genotype field is the first ------------------------------------------------------------------------ r877 | lh3lh3 | 2010-12-08 17:27:05 -0500 (Wed, 08 Dec 2010) | 7 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.12-2 (r877) * allow to fine control the selection of indel candidates. The current setting is okay for lowCov and highCov with ~100 samples, but it skips too many indels for highCov with >250 samples. ------------------------------------------------------------------------ r874 | lh3lh3 | 2010-12-07 22:40:35 -0500 (Tue, 07 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bam_plcmd.c a spelling error.. ------------------------------------------------------------------------ r873 | lh3lh3 | 2010-12-07 22:39:57 -0500 (Tue, 07 Dec 2010) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.12-1 (r873) * added a switch to allow anomalous read pairs in calling ------------------------------------------------------------------------ r872 | lh3lh3 | 2010-12-07 14:43:54 -0500 (Tue, 07 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl fixed a bug in vcf2fq ------------------------------------------------------------------------ r869 | lh3lh3 | 2010-12-05 01:18:06 -0500 (Sun, 05 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bamtk.c added a warning for the Windows version ------------------------------------------------------------------------ r868 | lh3lh3 | 2010-12-05 01:05:51 -0500 (Sun, 05 Dec 2010) | 4 lines Changed paths: M /trunk/samtools/bcftools/call1.c In ksprintf(), change "%lf" and "%lg" to "%f" and "%g", respectively. According to the manual page, this change is valid. However, MinGW seems to interpret "%lf" as "%Lf". ------------------------------------------------------------------------ r867 | lh3lh3 | 2010-12-05 00:35:43 -0500 (Sun, 05 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/Makefile.mingw M /trunk/samtools/bam_aux.c bring back the windows support ------------------------------------------------------------------------ r866 | lh3lh3 | 2010-12-04 23:33:51 -0500 (Sat, 04 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bam_reheader.c M /trunk/samtools/bcftools/vcfutils.pl Fixed a compiling error when knetfile is not used. ------------------------------------------------------------------------ r865 | lh3lh3 | 2010-12-04 00:13:22 -0500 (Sat, 04 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl vcf->fastq ------------------------------------------------------------------------ r864 | lh3lh3 | 2010-12-03 17:12:30 -0500 (Fri, 03 Dec 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/prob1.h * remove "-f". Instead always compute consensus quality * increase the upper limit of quality ------------------------------------------------------------------------ r863 | lh3lh3 | 2010-12-03 15:28:15 -0500 (Fri, 03 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.c more informative error message ------------------------------------------------------------------------ r862 | lh3lh3 | 2010-12-02 16:16:08 -0500 (Thu, 02 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/NEWS M /trunk/samtools/bamtk.c Release samtools-0.1.12a ------------------------------------------------------------------------ r861 | lh3lh3 | 2010-12-02 15:55:06 -0500 (Thu, 02 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/call1.c a possible fix to DP4=0,0,0,0; have not tested, but should have no side-effect ------------------------------------------------------------------------ r859 | lh3lh3 | 2010-12-02 11:39:57 -0500 (Thu, 02 Dec 2010) | 2 lines Changed paths: M /trunk/samtools/NEWS M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 Release samtools-0.1.12 ------------------------------------------------------------------------ r858 | lh3lh3 | 2010-12-02 11:24:41 -0500 (Thu, 02 Dec 2010) | 4 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/bcf.c * samtools-0.1.11-1 (r858) * fixed a bug in mpileup which causes segfaults * bcftools: do not segfault when BCF contains errors ------------------------------------------------------------------------ r857 | lh3lh3 | 2010-11-30 23:52:50 -0500 (Tue, 30 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam_index.c fixed a memory leak in bam_fetch() ------------------------------------------------------------------------ r856 | lh3lh3 | 2010-11-26 00:07:31 -0500 (Fri, 26 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bcftools/vcfutils.pl * fixed a memory violation * added splitchr to vcfutils.pl ------------------------------------------------------------------------ r854 | lh3lh3 | 2010-11-23 09:05:08 -0500 (Tue, 23 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/ld.c fixed a typo/bug in r^2 computation ------------------------------------------------------------------------ r852 | lh3lh3 | 2010-11-21 22:20:20 -0500 (Sun, 21 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bamtk.c forget to change the version information ------------------------------------------------------------------------ r851 | lh3lh3 | 2010-11-21 22:16:52 -0500 (Sun, 21 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS M /trunk/samtools/bcftools/bcftools.1 M /trunk/samtools/samtools.1 Release samtools-0.1.11 ------------------------------------------------------------------------ r844 | lh3lh3 | 2010-11-19 23:16:08 -0500 (Fri, 19 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/prob1.h * samtools-0.1.10-9 (r844) * added the "folded" or reference-free mode for variant calling ------------------------------------------------------------------------ r843 | lh3lh3 | 2010-11-19 22:26:36 -0500 (Fri, 19 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/NEWS M /trunk/samtools/bam_sort.c In merging, if -R is specified, do not abort if the sequence dictionary is different. ------------------------------------------------------------------------ r842 | jmarshall | 2010-11-19 21:24:28 -0500 (Fri, 19 Nov 2010) | 5 lines Changed paths: M /trunk/samtools/bam_sort.c When merging BAM headers, compare the list of target reference sequences strictly (and fail/abort if there is a mismatch), but allow one list to be a prefix of the other. (i.e., check that the lists are identical up until the shorter runs out, and add the excess targets from the longer to the output.) ------------------------------------------------------------------------ r841 | lh3lh3 | 2010-11-19 14:49:27 -0500 (Fri, 19 Nov 2010) | 4 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/bam_pileup.c M /trunk/samtools/bamtk.c * samtools-0.1.10 (r841) * fixed a bug in pileup when the first CIGAR operation is D * fixed a bug in view with range query ------------------------------------------------------------------------ r840 | lh3lh3 | 2010-11-19 13:45:51 -0500 (Fri, 19 Nov 2010) | 10 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.10-4 (r840) * drop the MNP caller. It is slow while does not diliver too much benefit. Possibly I will work on it in future given more time. * there is a segfault in pileup * someone has reported segfault from view/index/sort ------------------------------------------------------------------------ r839 | lh3lh3 | 2010-11-18 17:30:11 -0500 (Thu, 18 Nov 2010) | 9 lines Changed paths: M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c * samtools-0.1.10-6 (r839) * call MNPs without realignment because it seems to me that it is not worthwhile to significantly slow down SNP calling. * the result looks quite different from the previous version. I have work to do... ------------------------------------------------------------------------ r838 | lh3lh3 | 2010-11-18 11:26:09 -0500 (Thu, 18 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/knetfile.c Apply a patch by Rob Davis, which improves fault detection. ------------------------------------------------------------------------ r836 | lh3lh3 | 2010-11-18 11:09:23 -0500 (Thu, 18 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c * samtools-r836 * initiate MNP realignment when the MNP has at least 0.2% frequency (otherwise too slow) ------------------------------------------------------------------------ r835 | lh3lh3 | 2010-11-18 00:25:13 -0500 (Thu, 18 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl * modify the filtering rule: also filter SNPs around filtered indels * added MNP filter ------------------------------------------------------------------------ r834 | lh3lh3 | 2010-11-17 23:13:52 -0500 (Wed, 17 Nov 2010) | 4 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c * samtools-0.1.10-4 (r834) * fixed a silly bug in printing MNP * restrict to at most 1 alternative allele ------------------------------------------------------------------------ r833 | lh3lh3 | 2010-11-17 21:58:58 -0500 (Wed, 17 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bamtk.c fixed a bug in printing MNPs ------------------------------------------------------------------------ r832 | lh3lh3 | 2010-11-17 21:47:20 -0500 (Wed, 17 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c minor change to how seqQ is applied ------------------------------------------------------------------------ r831 | lh3lh3 | 2010-11-17 21:41:12 -0500 (Wed, 17 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.10 (r831) * initial MNP caller ------------------------------------------------------------------------ r829 | lh3lh3 | 2010-11-16 23:14:15 -0500 (Tue, 16 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS M /trunk/samtools/bamtk.c Release samtools-0.1.10 (r829) ------------------------------------------------------------------------ r828 | lh3lh3 | 2010-11-16 20:48:49 -0500 (Tue, 16 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bamtk.c update version information: samtools-0.1.9-20 (r828) ------------------------------------------------------------------------ r827 | lh3lh3 | 2010-11-16 15:32:50 -0500 (Tue, 16 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/call1.c bcftools: allow to skip indels ------------------------------------------------------------------------ r826 | lh3lh3 | 2010-11-16 14:11:58 -0500 (Tue, 16 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam_md.c remove ZQ if both BQ and ZQ are present ------------------------------------------------------------------------ r825 | lh3lh3 | 2010-11-16 13:51:33 -0500 (Tue, 16 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 * samtools-0.1.9-18 (r825) * change the behaviour of calmd such that by default it does not change the base quality ------------------------------------------------------------------------ r824 | lh3lh3 | 2010-11-15 23:31:53 -0500 (Mon, 15 Nov 2010) | 4 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/call1.c M /trunk/samtools/samtools.1 * samtools-0.1.9-17 (r824) * added command line options to change the default parameters in indel calling * update the manual ------------------------------------------------------------------------ r823 | lh3lh3 | 2010-11-15 12:20:13 -0500 (Mon, 15 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c * samtools-0.1.9-r823 * the BQ tag is now 64 shifted, not 33 shifted ------------------------------------------------------------------------ r822 | lh3lh3 | 2010-11-15 00:30:18 -0500 (Mon, 15 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/vcfutils.pl M /trunk/samtools/misc/samtools.pl * samtools-0.1.9-16 (r822) * keep the raw depth because in indel calling, DP4 may be way off the true depth ------------------------------------------------------------------------ r821 | lh3lh3 | 2010-11-13 01:18:31 -0500 (Sat, 13 Nov 2010) | 4 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c * samtools-0.1.9-15 (r821) * calmd: write BQ * skip realignment if BQ is present ------------------------------------------------------------------------ r820 | lh3lh3 | 2010-11-13 01:08:26 -0500 (Sat, 13 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c * samtools-0.1.9-14 (r820) * penalize reads with excessive differences in indel calling ------------------------------------------------------------------------ r819 | lh3lh3 | 2010-11-12 21:36:27 -0500 (Fri, 12 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bamtk.c * samtools-0.1.9-13 (r819) * fixed a bug in pileup given refskip ------------------------------------------------------------------------ r818 | lh3lh3 | 2010-11-12 13:04:53 -0500 (Fri, 12 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c * samtools-r818 * for indel calling, do two rounds of probabilistic realignments ------------------------------------------------------------------------ r817 | lh3lh3 | 2010-11-11 20:04:07 -0500 (Thu, 11 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/vcfutils.pl * samtools-0.1.19-11 (r817) * only initiate indel calling when 0.2% of reads contain a gap ------------------------------------------------------------------------ r816 | lh3lh3 | 2010-11-11 01:22:59 -0500 (Thu, 11 Nov 2010) | 7 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c * samtools-0.1.9-10 (r816) * I know why the forward method fails. it is because of zero base qualities. when that is fixed, the forward method seems to give better results than Viterbi, as it should be. I am tired... ------------------------------------------------------------------------ r815 | lh3lh3 | 2010-11-11 00:57:15 -0500 (Thu, 11 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam2bcf_indel.c effectively revert to the viterbi version. The forward realignment gives too many false positives. ------------------------------------------------------------------------ r814 | lh3lh3 | 2010-11-11 00:18:02 -0500 (Thu, 11 Nov 2010) | 4 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_md.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.9-9 (r810) * use forward, instead of viterbi, for realignment * realignment is now quality aware ------------------------------------------------------------------------ r813 | lh3lh3 | 2010-11-10 22:45:24 -0500 (Wed, 10 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/kprobaln.c M /trunk/samtools/kprobaln.h * prepare to replace kaln with kprobaln in realignment ------------------------------------------------------------------------ r812 | lh3lh3 | 2010-11-10 17:28:50 -0500 (Wed, 10 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.c fixed a typo ------------------------------------------------------------------------ r811 | lh3lh3 | 2010-11-10 16:54:46 -0500 (Wed, 10 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.h use zlib for direct reading when BCF_LITE is in use ------------------------------------------------------------------------ r810 | lh3lh3 | 2010-11-10 16:32:13 -0500 (Wed, 10 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c * do not use reads containing too many mismatches for indel calling * fixed a trivial bug in case of multi-allelic indels ------------------------------------------------------------------------ r809 | lh3lh3 | 2010-11-10 13:23:02 -0500 (Wed, 10 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.9-8 (r809) * fixed a bug in the indel caller ------------------------------------------------------------------------ r808 | lh3lh3 | 2010-11-10 12:24:10 -0500 (Wed, 10 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/Makefile minor change to makefile ------------------------------------------------------------------------ r807 | lh3lh3 | 2010-11-10 12:10:21 -0500 (Wed, 10 Nov 2010) | 4 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/vcfutils.pl * samtools-0.1.9-8 (r807) * collect indel candidates only from specified platforms (@RG-PL) * merge varFilter and filter4vcf in vcfutils.pl ------------------------------------------------------------------------ r806 | lh3lh3 | 2010-11-09 22:05:46 -0500 (Tue, 09 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/prob1.h bcftools: compute equal-tail (Bayesian) credible interval ------------------------------------------------------------------------ r805 | lh3lh3 | 2010-11-09 16:28:39 -0500 (Tue, 09 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl added a double-hit filter to avoid overestimated indel likelihood ------------------------------------------------------------------------ r804 | lh3lh3 | 2010-11-09 14:12:06 -0500 (Tue, 09 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c * samtools-0.1.9-7 (r804) * fixed a bug in the gap caller ------------------------------------------------------------------------ r803 | lh3lh3 | 2010-11-09 10:45:33 -0500 (Tue, 09 Nov 2010) | 4 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/prob1.c * samtools-0.1.9-6 (r803) * mpileup: apply homopolymer correction when calculating GL, instead of before * bcftools: apply a different prior to indels ------------------------------------------------------------------------ r802 | lh3lh3 | 2010-11-08 23:53:15 -0500 (Mon, 08 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bamtk.c * samtools-0.1.9-5 (r802) * relax tandem penalty. this will be made a command-line option in future. ------------------------------------------------------------------------ r801 | lh3lh3 | 2010-11-08 23:35:52 -0500 (Mon, 08 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bamtk.c * samtools-0.1.9-4 (r801) * fixed a minor issue in printing indel VCF ------------------------------------------------------------------------ r800 | lh3lh3 | 2010-11-08 15:28:14 -0500 (Mon, 08 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bcftools/vcfutils.pl fixed another silly bug in mpileup's indel caller ------------------------------------------------------------------------ r799 | lh3lh3 | 2010-11-08 14:28:27 -0500 (Mon, 08 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf.c fixed a silly bug in the indel caller ------------------------------------------------------------------------ r798 | lh3lh3 | 2010-11-08 14:07:33 -0500 (Mon, 08 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/sam_view.c M /trunk/samtools/samtools.1 Incorporate patches by Marcel Martin for read counting. ------------------------------------------------------------------------ r797 | lh3lh3 | 2010-11-08 13:39:52 -0500 (Mon, 08 Nov 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.9-2 (r797) * mpileup: indel calling seems to be working ------------------------------------------------------------------------ r796 | lh3lh3 | 2010-11-08 10:54:46 -0500 (Mon, 08 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/kaln.c indel calling is apparently working, but more information needs to be collected ------------------------------------------------------------------------ r795 | lh3lh3 | 2010-11-08 00:39:18 -0500 (Mon, 08 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf_indel.c fixed a few bugs in the indel caller. Probably there are more. ------------------------------------------------------------------------ r794 | lh3lh3 | 2010-11-07 22:23:16 -0500 (Sun, 07 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam.h M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h A /trunk/samtools/bam2bcf_indel.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/kaln.c M /trunk/samtools/kaln.h prepare for the indel caller. It is not ready yet. ------------------------------------------------------------------------ r793 | lh3lh3 | 2010-11-05 11:28:23 -0400 (Fri, 05 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam_plcmd.c Revert to r790. The recent changes are not good... ------------------------------------------------------------------------ r792 | lh3lh3 | 2010-11-05 00:19:14 -0400 (Fri, 05 Nov 2010) | 6 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam_plcmd.c * this revision is UNSTABLE * indel caller seems working, but it is very insensitive and has several things I do not quite understand. ------------------------------------------------------------------------ r791 | lh3lh3 | 2010-11-04 22:58:43 -0400 (Thu, 04 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam_plcmd.c for backup. no effective changes ------------------------------------------------------------------------ r790 | lh3lh3 | 2010-11-03 15:51:24 -0400 (Wed, 03 Nov 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl M /trunk/samtools/kprobaln.c fixed a minor problem in the example coming with kprobaln.c ------------------------------------------------------------------------ r789 | lh3lh3 | 2010-11-02 15:41:27 -0400 (Tue, 02 Nov 2010) | 4 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam_md.c M /trunk/samtools/kaln.c M /trunk/samtools/kaln.h A /trunk/samtools/kprobaln.c A /trunk/samtools/kprobaln.h Separate kaln and kprobaln as I am preparing further changes. At present, the results should be identical to the previous. ------------------------------------------------------------------------ r788 | petulda | 2010-11-02 12:19:04 -0400 (Tue, 02 Nov 2010) | 1 line Changed paths: M /trunk/samtools/bam_plcmd.c Added -b option: read file names from a file ------------------------------------------------------------------------ r787 | lh3lh3 | 2010-10-29 23:17:22 -0400 (Fri, 29 Oct 2010) | 7 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_pileup.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.9-2 (r787) * Allow to set a maximum per-sample depth to reduce memory. However, BAQ computation is still applied to every read. The speed is not improved. ------------------------------------------------------------------------ r786 | lh3lh3 | 2010-10-29 12:10:40 -0400 (Fri, 29 Oct 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/vcf.c * samtools-0.1.9-1 (r786) * samtools: optionally perform exact test for each sample ------------------------------------------------------------------------ r785 | lh3lh3 | 2010-10-29 09:42:25 -0400 (Fri, 29 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bcftools/bcf.c Optionally output "DP", the individual read depth ------------------------------------------------------------------------ r784 | lh3lh3 | 2010-10-27 23:10:27 -0400 (Wed, 27 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/samtools.1 acknowledge Petr and John who have greatly contributed to the project. ------------------------------------------------------------------------ r783 | lh3lh3 | 2010-10-27 22:47:47 -0400 (Wed, 27 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 Release samtools-0.1.9 (r783) ------------------------------------------------------------------------ r782 | lh3lh3 | 2010-10-27 19:58:54 -0400 (Wed, 27 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/bam_plcmd.c fixed a silly bug in pileup ------------------------------------------------------------------------ r781 | lh3lh3 | 2010-10-27 14:39:48 -0400 (Wed, 27 Oct 2010) | 5 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 * samtools-0.1.8-22 (r781) * made BAQ the default behavior of mpileup * updated manual * in merge, force to exit given inconsistent header when "-R" is not in use. ------------------------------------------------------------------------ r780 | lh3lh3 | 2010-10-27 11:01:11 -0400 (Wed, 27 Oct 2010) | 3 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.8-21 (r780) * minor speedup to pileup ------------------------------------------------------------------------ r779 | lh3lh3 | 2010-10-27 09:58:56 -0400 (Wed, 27 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/bam_pileup.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/examples/toy.sam improve pileup a little bit ------------------------------------------------------------------------ r778 | lh3lh3 | 2010-10-27 00:14:43 -0400 (Wed, 27 Oct 2010) | 3 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_pileup.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c * samtools-0.1.8-20 (r778) * speed up pileup, although I do not know how much is the improvement ------------------------------------------------------------------------ r777 | lh3lh3 | 2010-10-26 17:26:04 -0400 (Tue, 26 Oct 2010) | 3 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_maqcns.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/examples/Makefile * samtools-0.1.8-19 (r777) * integrate mpileup features to pileup: min_baseQ, capQ, prob_realn, paired-only and biased prior ------------------------------------------------------------------------ r776 | lh3lh3 | 2010-10-26 15:27:46 -0400 (Tue, 26 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/bam_md.c remove local realignment (probabilistic realignment is still there) ------------------------------------------------------------------------ r774 | jmarshall | 2010-10-21 06:52:38 -0400 (Thu, 21 Oct 2010) | 3 lines Changed paths: M /trunk/samtools/sam_view.c Add the relevant filename or region to error messages, and cause a failure exit status where appropriate. Based on a patch provided by Marcel Martin. ------------------------------------------------------------------------ r773 | lh3lh3 | 2010-10-19 19:44:31 -0400 (Tue, 19 Oct 2010) | 3 lines Changed paths: M /trunk/samtools/examples/toy.sam M /trunk/samtools/kaln.c * Minor code changes. No real effect. * change quality to 30 in toy.sam ------------------------------------------------------------------------ r772 | lh3lh3 | 2010-10-18 23:40:13 -0400 (Mon, 18 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/examples/toy.fa M /trunk/samtools/examples/toy.sam added another toy example ------------------------------------------------------------------------ r771 | lh3lh3 | 2010-10-13 23:32:12 -0400 (Wed, 13 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/ld.c M /trunk/samtools/bcftools/vcfutils.pl improve the LD statistics ------------------------------------------------------------------------ r770 | lh3lh3 | 2010-10-12 23:49:26 -0400 (Tue, 12 Oct 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/vcfutils.pl * a minor fix to the -L option * add ldstats to vcfutils.pl ------------------------------------------------------------------------ r769 | lh3lh3 | 2010-10-12 15:51:57 -0400 (Tue, 12 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.c a minor change ------------------------------------------------------------------------ r768 | lh3lh3 | 2010-10-12 15:49:06 -0400 (Tue, 12 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/Makefile A /trunk/samtools/bcftools/ld.c forget to add the key file ------------------------------------------------------------------------ r767 | lh3lh3 | 2010-10-12 15:48:46 -0400 (Tue, 12 Oct 2010) | 4 lines Changed paths: M /trunk/samtools/bcftools/Makefile M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/vcfutils.pl * vcfutils.pl: fixed a typo in help message * added APIs: bcf_append_info() and bcf_cpy() * calculate adjacent LD ------------------------------------------------------------------------ r766 | lh3lh3 | 2010-10-11 11:06:40 -0400 (Mon, 11 Oct 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl added filter for samtools/bcftools genetated VCFs ------------------------------------------------------------------------ r765 | lh3lh3 | 2010-10-05 14:05:18 -0400 (Tue, 05 Oct 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl M /trunk/samtools/kaln.c * removed a comment line in kaln.c * vcfutils.pl fillac works when GT is not the first field ------------------------------------------------------------------------ r764 | petulda | 2010-10-05 08:59:36 -0400 (Tue, 05 Oct 2010) | 1 line Changed paths: A /trunk/samtools/bcftools/bcf-fix.pl Convert VCF output of "bcftools view -bgcv" to a valid VCF file ------------------------------------------------------------------------ r763 | lh3lh3 | 2010-10-02 22:51:03 -0400 (Sat, 02 Oct 2010) | 4 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c A /trunk/samtools/bcftools/bcftools.1 M /trunk/samtools/bcftools/call1.c M /trunk/samtools/samtools.1 * samtools-0.1.8-18 (r763) * added bcftools manual page * minor fix to mpileup and view command lines ------------------------------------------------------------------------ r762 | lh3lh3 | 2010-10-02 21:46:25 -0400 (Sat, 02 Oct 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/vcfutils.pl * vcfutils.pl qstats: calculate marginal ts/tv * allow to call genotypes at variant sites ------------------------------------------------------------------------ r761 | lh3lh3 | 2010-10-01 00:29:55 -0400 (Fri, 01 Oct 2010) | 3 lines Changed paths: M /trunk/samtools/kaln.c M /trunk/samtools/misc/HmmGlocal.java I am changing the gap open probability back to 0.001. It seems that being conservative here is a good thing... ------------------------------------------------------------------------ r760 | lh3lh3 | 2010-10-01 00:11:27 -0400 (Fri, 01 Oct 2010) | 5 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/kaln.c A /trunk/samtools/misc/HmmGlocal.java * samtools-0.1.8-17 (r760) * the default gap open penalty is too small (a typo) * added comments on hmm_realn * Java implementation ------------------------------------------------------------------------ r759 | lh3lh3 | 2010-09-30 10:12:54 -0400 (Thu, 30 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bamtk.c mark samtools-0.1.8-16 (r759) ------------------------------------------------------------------------ r758 | lh3lh3 | 2010-09-30 10:12:02 -0400 (Thu, 30 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/kaln.c round to the nearest integer ------------------------------------------------------------------------ r757 | lh3lh3 | 2010-09-28 17:16:43 -0400 (Tue, 28 Sep 2010) | 4 lines Changed paths: M /trunk/samtools/kaln.c I was trying to accelerate ka_prob_glocal() as this will be the bottleneck. After an hour, the only gain is to change division to multiplication. OK. I will stop. ------------------------------------------------------------------------ r756 | lh3lh3 | 2010-09-28 16:57:49 -0400 (Tue, 28 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/kaln.c this is interesting. multiplication is much faster than division, at least on my Mac ------------------------------------------------------------------------ r755 | lh3lh3 | 2010-09-28 16:19:13 -0400 (Tue, 28 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/kaln.c minor changes ------------------------------------------------------------------------ r754 | lh3lh3 | 2010-09-28 15:44:16 -0400 (Tue, 28 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/kaln.c prob_realn() seems working! ------------------------------------------------------------------------ r753 | lh3lh3 | 2010-09-28 12:48:23 -0400 (Tue, 28 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/kaln.c minor ------------------------------------------------------------------------ r752 | lh3lh3 | 2010-09-28 12:47:41 -0400 (Tue, 28 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/kaln.c M /trunk/samtools/kaln.h Convert phredQ to probabilities ------------------------------------------------------------------------ r751 | lh3lh3 | 2010-09-28 12:32:08 -0400 (Tue, 28 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/kaln.c M /trunk/samtools/kaln.h Implement the glocal HMM; discard the extention HMM ------------------------------------------------------------------------ r750 | lh3lh3 | 2010-09-28 00:06:11 -0400 (Tue, 28 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/kaln.c improve numerical stability ------------------------------------------------------------------------ r749 | lh3lh3 | 2010-09-27 23:27:54 -0400 (Mon, 27 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/kaln.c more comments ------------------------------------------------------------------------ r748 | lh3lh3 | 2010-09-27 23:17:16 -0400 (Mon, 27 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/kaln.c fixed a bug in banded DP ------------------------------------------------------------------------ r747 | lh3lh3 | 2010-09-27 23:05:12 -0400 (Mon, 27 Sep 2010) | 3 lines Changed paths: M /trunk/samtools/kaln.c * fixed that weird issue. * the banded version is NOT working ------------------------------------------------------------------------ r746 | lh3lh3 | 2010-09-27 22:57:05 -0400 (Mon, 27 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/kaln.c More comments. This version seems working, but something is a little weird... ------------------------------------------------------------------------ r745 | lh3lh3 | 2010-09-27 17:21:40 -0400 (Mon, 27 Sep 2010) | 6 lines Changed paths: M /trunk/samtools/kaln.c A little code cleanup. Now the forward and backback algorithms give nearly identical P(x), which means both are close to the correct forms. However, I have only tested on toy examples. Minor errors in the implementation may not be obvious. ------------------------------------------------------------------------ r744 | lh3lh3 | 2010-09-27 16:55:15 -0400 (Mon, 27 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bam_sort.c M /trunk/samtools/kaln.c M /trunk/samtools/kaln.h ... ------------------------------------------------------------------------ r743 | jmarshall | 2010-09-27 08:19:06 -0400 (Mon, 27 Sep 2010) | 6 lines Changed paths: M /trunk/samtools/bam_sort.c Abort if merge -h's INH.SAM cannot be opened, just as we abort if any of the IN#.BAM input files cannot be opened. Also propagate any error indication returned by bam_merge_core() to samtools merge's exit status. ------------------------------------------------------------------------ r741 | jmarshall | 2010-09-24 11:08:24 -0400 (Fri, 24 Sep 2010) | 5 lines Changed paths: M /trunk/samtools/bam_index.c Use bam_validate1() to detect garbage records in the event of a corrupt BAI index file that causes a bam_seek() to an invalid position. At most one record (namely, the bam_iter_read terminator) is tested per bam_fetch() call, so the cost is insignificant in the normal case. ------------------------------------------------------------------------ r740 | jmarshall | 2010-09-24 11:00:19 -0400 (Fri, 24 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam.h Add bam_validate1(). ------------------------------------------------------------------------ r739 | lh3lh3 | 2010-09-22 12:07:50 -0400 (Wed, 22 Sep 2010) | 3 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c * samtools-0.1.8-15 (r379) * allow to change capQ parameter in calmd ------------------------------------------------------------------------ r738 | jmarshall | 2010-09-22 11:15:33 -0400 (Wed, 22 Sep 2010) | 13 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/sam_view.c When bam_read1() returns an error (return value <= -2), propagate that error to bam_iter_read()'s own return value. Similarly, also propagate it up to bam_fetch()'s return value. Previously bam_fetch() always returned 0, and callers ignored its return value anyway. With this change, 0 continues to indicate success, while <= -2 (which can be written as < 0, as -1 is never returned) indicates corrupted input. bam_iter_read() ought also to propagate errors returned by bam_seek(). main_samview() can now print an error message and fail when bam_fetch() detects that a .bai index file is corrupted or otherwise does not correspond to the .bam file it is being used with. ------------------------------------------------------------------------ r737 | jmarshall | 2010-09-22 10:47:42 -0400 (Wed, 22 Sep 2010) | 3 lines Changed paths: M /trunk/samtools/bam_index.c 0 is a successful return value from bam_read1(). (In practice, it never returns 0 anyway; but all the other callers treat 0 as successful.) ------------------------------------------------------------------------ r736 | lh3lh3 | 2010-09-20 17:43:08 -0400 (Mon, 20 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_index.c M /trunk/samtools/bam_sort.c * merge files region-by-region. work on small examples but more tests are needed. ------------------------------------------------------------------------ r735 | lh3lh3 | 2010-09-20 16:56:24 -0400 (Mon, 20 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl improve qstats by checking the alleles as well ------------------------------------------------------------------------ r734 | lh3lh3 | 2010-09-17 18:12:13 -0400 (Fri, 17 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl convert UCSC SNP SQL dump to VCF ------------------------------------------------------------------------ r733 | lh3lh3 | 2010-09-17 13:02:11 -0400 (Fri, 17 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl hapmap2vcf convertor ------------------------------------------------------------------------ r732 | lh3lh3 | 2010-09-17 10:11:37 -0400 (Fri, 17 Sep 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/Makefile M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/vcf.c * added comments * VCF->BCF is not possible without knowing the sequence dictionary before hand... ------------------------------------------------------------------------ r731 | lh3lh3 | 2010-09-17 09:15:53 -0400 (Fri, 17 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/bcfutils.c M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/vcf.c * put n_smpl to "bcf1_t" to simplify API a little ------------------------------------------------------------------------ r730 | lh3lh3 | 2010-09-16 21:36:01 -0400 (Thu, 16 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/index.c fixed a bug in indexing ------------------------------------------------------------------------ r729 | lh3lh3 | 2010-09-16 16:54:48 -0400 (Thu, 16 Sep 2010) | 3 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam_md.c M /trunk/samtools/bam_pileup.c * fixed a bug in capQ * valgrind identifies a use of uninitialised value, but I have not fixed it. ------------------------------------------------------------------------ r728 | lh3lh3 | 2010-09-16 15:03:59 -0400 (Thu, 16 Sep 2010) | 3 lines Changed paths: M /trunk/samtools/bgzip.c M /trunk/samtools/razip.c * fixed a bug in razip: -c will delete the input file * copy tabix/bgzip to here ------------------------------------------------------------------------ r727 | lh3lh3 | 2010-09-16 13:45:49 -0400 (Thu, 16 Sep 2010) | 3 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.8-14 (r727) * allow to change the capQ parameter at the command line ------------------------------------------------------------------------ r726 | lh3lh3 | 2010-09-16 13:38:43 -0400 (Thu, 16 Sep 2010) | 4 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bcftools/vcfutils.pl M /trunk/samtools/misc/samtools.pl * added varFilter to vcfutils.pl * reimplement realn(). now it performs a local alignment * added cap_mapQ() to cap mapping quality when there are many substitutions ------------------------------------------------------------------------ r724 | lh3lh3 | 2010-09-15 00:18:31 -0400 (Wed, 15 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/Makefile A /trunk/samtools/bcftools/bcf2qcall.c M /trunk/samtools/bcftools/call1.c * convert BCF to QCALL input ------------------------------------------------------------------------ r723 | lh3lh3 | 2010-09-14 22:41:50 -0400 (Tue, 14 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bam_md.c dynamic band width in realignment ------------------------------------------------------------------------ r722 | lh3lh3 | 2010-09-14 22:05:32 -0400 (Tue, 14 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bam_plcmd.c fixed a bug in realignment ------------------------------------------------------------------------ r721 | lh3lh3 | 2010-09-14 20:54:09 -0400 (Tue, 14 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/prob1.c fixed a minor issue ------------------------------------------------------------------------ r720 | lh3lh3 | 2010-09-14 19:25:10 -0400 (Tue, 14 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_md.c fixed a bug in realignment ------------------------------------------------------------------------ r719 | lh3lh3 | 2010-09-14 19:18:24 -0400 (Tue, 14 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bam_plcmd.c minor changes. It is BUGGY now! ------------------------------------------------------------------------ r718 | lh3lh3 | 2010-09-14 16:32:33 -0400 (Tue, 14 Sep 2010) | 4 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bam_pileup.c M /trunk/samtools/kaln.c M /trunk/samtools/kaln.h * aggressive gapped aligner is implemented in calmd. * distinguish gap_open and gap_end_open in banded alignment * make tview accepts alignment with heading and tailing D ------------------------------------------------------------------------ r717 | jmarshall | 2010-09-14 09:04:28 -0400 (Tue, 14 Sep 2010) | 2 lines Changed paths: M /trunk/samtools Add svn:ignore properties for generated files that don't appear in "make all". ------------------------------------------------------------------------ r716 | jmarshall | 2010-09-13 08:37:53 -0400 (Mon, 13 Sep 2010) | 3 lines Changed paths: M /trunk/samtools M /trunk/samtools/bcftools M /trunk/samtools/misc Add svn:ignore properties listing the generated files. (Except for *.o, which we'll assume is in global-ignores.) ------------------------------------------------------------------------ r715 | lh3lh3 | 2010-09-08 12:53:55 -0400 (Wed, 08 Sep 2010) | 5 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/sample.c M /trunk/samtools/sample.h * samtools-0.1.8-13 (r715) * fixed a bug in identifying SM across files * bcftools: estimate heterozygosity * bcftools: allow to skip sites without reference bases ------------------------------------------------------------------------ r713 | lh3lh3 | 2010-09-03 17:19:12 -0400 (Fri, 03 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/Makefile M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/prob1.h quite a lot changes to the contrast caller, but I still feel something is missing... ------------------------------------------------------------------------ r711 | lh3lh3 | 2010-09-03 00:30:48 -0400 (Fri, 03 Sep 2010) | 4 lines Changed paths: M /trunk/samtools/bcftools/Makefile M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/vcfutils.pl * changed 3.434 to 4.343 (typo!) * fixed a bug in the contrast caller * calculate heterozygosity ------------------------------------------------------------------------ r710 | lh3lh3 | 2010-09-01 23:24:47 -0400 (Wed, 01 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/bcfutils.c M /trunk/samtools/bcftools/call1.c SNP calling from the GL field ------------------------------------------------------------------------ r709 | lh3lh3 | 2010-09-01 18:52:30 -0400 (Wed, 01 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcf.c fixed another problem ------------------------------------------------------------------------ r708 | lh3lh3 | 2010-09-01 18:31:17 -0400 (Wed, 01 Sep 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/vcf.c * fixed bugs in parsing VCF * parser now works with GT/GQ/DP/PL/GL ------------------------------------------------------------------------ r707 | lh3lh3 | 2010-09-01 15:28:29 -0400 (Wed, 01 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/Makefile M /trunk/samtools/bcftools/prob1.c Do not compile _BCF_QUAD by default ------------------------------------------------------------------------ r706 | lh3lh3 | 2010-09-01 15:21:41 -0400 (Wed, 01 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/bcfutils.c M /trunk/samtools/bcftools/call1.c Write the correct ALT and PL in the SNP calling mode. ------------------------------------------------------------------------ r705 | lh3lh3 | 2010-09-01 12:50:33 -0400 (Wed, 01 Sep 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfutils.pl more commands for my own uses ------------------------------------------------------------------------ r704 | lh3lh3 | 2010-09-01 09:26:10 -0400 (Wed, 01 Sep 2010) | 2 lines Changed paths: A /trunk/samtools/bcftools/vcfutils.pl Utilities for processing VCF ------------------------------------------------------------------------ r703 | lh3lh3 | 2010-08-31 16:44:57 -0400 (Tue, 31 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/Makefile M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/prob1.h preliminary contrast variant caller ------------------------------------------------------------------------ r702 | lh3lh3 | 2010-08-31 12:28:39 -0400 (Tue, 31 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/call1.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/prob1.h z' and z'' can be calculated ------------------------------------------------------------------------ r701 | lh3lh3 | 2010-08-31 10:20:57 -0400 (Tue, 31 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/Makefile A /trunk/samtools/bcftools/call1.c (from /trunk/samtools/bcftools/vcfout.c:699) M /trunk/samtools/bcftools/prob1.c D /trunk/samtools/bcftools/vcfout.c * rename vcfout.c as call1.c * prepare to add two-sample comparison ------------------------------------------------------------------------ r699 | lh3lh3 | 2010-08-24 15:28:16 -0400 (Tue, 24 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfout.c fixed a bug in calculating the t statistics ------------------------------------------------------------------------ r698 | lh3lh3 | 2010-08-24 14:05:50 -0400 (Tue, 24 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bamtk.c M /trunk/samtools/bcftools/kfunc.c M /trunk/samtools/bcftools/vcfout.c * samtools-0.1.8-13 (r698) * perform one-tailed t-test for baseQ, mapQ and endDist ------------------------------------------------------------------------ r697 | lh3lh3 | 2010-08-24 12:30:13 -0400 (Tue, 24 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/kfunc.c added regularized incomplete beta function ------------------------------------------------------------------------ r695 | lh3lh3 | 2010-08-23 17:36:17 -0400 (Mon, 23 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_plcmd.c change the default correlation coefficient ------------------------------------------------------------------------ r694 | lh3lh3 | 2010-08-23 14:46:52 -0400 (Mon, 23 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/vcfout.c print QUAL as floating numbers ------------------------------------------------------------------------ r693 | lh3lh3 | 2010-08-23 14:06:07 -0400 (Mon, 23 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/examples/Makefile A /trunk/samtools/sample.c A /trunk/samtools/sample.h * samtools-0.1.8-12 (r692) * group data by samples in "mpileup -g" ------------------------------------------------------------------------ r692 | lh3lh3 | 2010-08-23 10:58:53 -0400 (Mon, 23 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/Makefile D /trunk/samtools/bam_mcns.c D /trunk/samtools/bam_mcns.h M /trunk/samtools/bam_plcmd.c remove VCF output in mpileup ------------------------------------------------------------------------ r691 | lh3lh3 | 2010-08-23 10:48:20 -0400 (Mon, 23 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h * use the revised MAQ error model for mpileup * prepare to remove the independent model from mpileup ------------------------------------------------------------------------ r690 | lh3lh3 | 2010-08-20 15:46:40 -0400 (Fri, 20 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_maqcns.h M /trunk/samtools/bam_plcmd.c A /trunk/samtools/errmod.c A /trunk/samtools/errmod.h M /trunk/samtools/ksort.h added revised MAQ error model ------------------------------------------------------------------------ r689 | lh3lh3 | 2010-08-18 09:55:20 -0400 (Wed, 18 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/prob1.h M /trunk/samtools/bcftools/vcfout.c allow to read the prior from the error output. EM iteration is working. ------------------------------------------------------------------------ r688 | lh3lh3 | 2010-08-17 12:12:20 -0400 (Tue, 17 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/main.c M /trunk/samtools/bcftools/vcf.c * write a little more VCF header * concatenate BCFs ------------------------------------------------------------------------ r687 | lh3lh3 | 2010-08-16 20:53:16 -0400 (Mon, 16 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/bcf.tex use float for QUAL ------------------------------------------------------------------------ r686 | lh3lh3 | 2010-08-14 00:11:13 -0400 (Sat, 14 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/prob1.c faster for large sample size (in principle) ------------------------------------------------------------------------ r685 | lh3lh3 | 2010-08-13 23:28:31 -0400 (Fri, 13 Aug 2010) | 4 lines Changed paths: M /trunk/samtools/bcftools/prob1.c * a numerically stable method to calculate z_{jk} * currently slower than the old method but will be important for large sample size * in principle, we can speed up for large n, but have not tried ------------------------------------------------------------------------ r684 | lh3lh3 | 2010-08-11 21:58:31 -0400 (Wed, 11 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfout.c fixed an issue in parsing integer ------------------------------------------------------------------------ r683 | lh3lh3 | 2010-08-09 13:05:07 -0400 (Mon, 09 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/bcf.c do not print refname if file is converted from VCF ------------------------------------------------------------------------ r682 | lh3lh3 | 2010-08-09 12:59:47 -0400 (Mon, 09 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/vcf.c * parse PL * fixed a bug in parsing VCF ------------------------------------------------------------------------ r681 | lh3lh3 | 2010-08-09 12:49:23 -0400 (Mon, 09 Aug 2010) | 4 lines Changed paths: M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/bcfutils.c M /trunk/samtools/bcftools/main.c M /trunk/samtools/bcftools/vcf.c M /trunk/samtools/bcftools/vcfout.c M /trunk/samtools/bgzf.c M /trunk/samtools/kstring.c * fixed a bug in kstrtok@kstring.c * preliminary VCF parser (not parse everything for now) * improved view interface ------------------------------------------------------------------------ r680 | lh3lh3 | 2010-08-09 10:43:13 -0400 (Mon, 09 Aug 2010) | 4 lines Changed paths: M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/vcfout.c M /trunk/samtools/kstring.c M /trunk/samtools/kstring.h * improved kstring (added kstrtok) * removed the limit on the format string length in bcftools * use kstrtok to parse format which fixed a bug in the old code ------------------------------------------------------------------------ r679 | lh3lh3 | 2010-08-09 01:12:05 -0400 (Mon, 09 Aug 2010) | 2 lines Changed paths: A /trunk/samtools/bcftools/README M /trunk/samtools/bcftools/vcfout.c help messages ------------------------------------------------------------------------ r678 | lh3lh3 | 2010-08-09 00:01:52 -0400 (Mon, 09 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcfout.c perform single-tail test for ED4 ------------------------------------------------------------------------ r677 | lh3lh3 | 2010-08-08 23:48:35 -0400 (Sun, 08 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/Makefile M /trunk/samtools/bcftools/kfunc.c M /trunk/samtools/bcftools/vcfout.c * test depth, end distance and HWE ------------------------------------------------------------------------ r676 | lh3lh3 | 2010-08-08 02:04:15 -0400 (Sun, 08 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/kfunc.c reimplement incomplete gamma functions. no copy-paste ------------------------------------------------------------------------ r675 | lh3lh3 | 2010-08-06 22:42:54 -0400 (Fri, 06 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bcftools/fet.c M /trunk/samtools/bcftools/prob1.c M /trunk/samtools/bcftools/prob1.h M /trunk/samtools/bcftools/vcfout.c * bcftools: add HWE (no testing for now) * record end dist in a 2x2 table, not avg, std any more ------------------------------------------------------------------------ r674 | lh3lh3 | 2010-08-06 17:30:16 -0400 (Fri, 06 Aug 2010) | 3 lines Changed paths: A /trunk/samtools/bcftools/kfunc.c * Special functions: log(gamma()), erfc(), P(a,x) (incomplete gamma) * Not using Numerical Recipe due to licensing issues ------------------------------------------------------------------------ r673 | lh3lh3 | 2010-08-05 23:46:53 -0400 (Thu, 05 Aug 2010) | 2 lines Changed paths: A /trunk/samtools/bcftools/fet.c Fisher's exact test ------------------------------------------------------------------------ r672 | lh3lh3 | 2010-08-05 21:48:33 -0400 (Thu, 05 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bamtk.c M /trunk/samtools/examples/Makefile * samtools-0.1.8-11 (r672) * collect more stats for allele balance test in bcftools (not yet) ------------------------------------------------------------------------ r671 | lh3lh3 | 2010-08-05 16:17:58 -0400 (Thu, 05 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/main.c * the code base is stablized again. * I will delay the vcf parser, which is quite complicated but with little value for now ------------------------------------------------------------------------ r670 | lh3lh3 | 2010-08-05 16:03:23 -0400 (Thu, 05 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/examples/Makefile minor ------------------------------------------------------------------------ r669 | lh3lh3 | 2010-08-05 16:03:08 -0400 (Thu, 05 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcftools/vcf.c unfinished vcf parser ------------------------------------------------------------------------ r668 | lh3lh3 | 2010-08-05 15:46:40 -0400 (Thu, 05 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bcftools/Makefile M /trunk/samtools/bcftools/bcf.c M /trunk/samtools/bcftools/bcf.h M /trunk/samtools/bcftools/bcfutils.c M /trunk/samtools/bcftools/index.c M /trunk/samtools/bcftools/main.c A /trunk/samtools/bcftools/vcf.c M /trunk/samtools/bcftools/vcfout.c * added prelimiary VCF parser (not finished) * change struct a bit ------------------------------------------------------------------------ r667 | lh3lh3 | 2010-08-03 22:35:27 -0400 (Tue, 03 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bcftools/bcf.c * allow to set min base q * fixed a bug in mpileup -u ------------------------------------------------------------------------ r666 | lh3lh3 | 2010-08-03 22:08:44 -0400 (Tue, 03 Aug 2010) | 2 lines Changed paths: A /trunk/samtools/bcftools/bcf.tex spec ------------------------------------------------------------------------ r665 | lh3lh3 | 2010-08-03 21:18:57 -0400 (Tue, 03 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/examples/Makefile added more examples ------------------------------------------------------------------------ r664 | lh3lh3 | 2010-08-03 21:13:00 -0400 (Tue, 03 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bcftools/Makefile fixed compilation error ------------------------------------------------------------------------ r662 | lh3lh3 | 2010-08-03 21:04:00 -0400 (Tue, 03 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/Makefile D /trunk/samtools/bcf.c D /trunk/samtools/bcf.h A /trunk/samtools/bcftools A /trunk/samtools/bcftools/Makefile A /trunk/samtools/bcftools/bcf.c A /trunk/samtools/bcftools/bcf.h A /trunk/samtools/bcftools/bcfutils.c A /trunk/samtools/bcftools/index.c A /trunk/samtools/bcftools/main.c A /trunk/samtools/bcftools/prob1.c A /trunk/samtools/bcftools/prob1.h A /trunk/samtools/bcftools/vcfout.c move bcftools to samtools ------------------------------------------------------------------------ r660 | lh3lh3 | 2010-08-03 15:58:32 -0400 (Tue, 03 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf.c fixed another minor bug ------------------------------------------------------------------------ r658 | lh3lh3 | 2010-08-03 15:06:45 -0400 (Tue, 03 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/bcf.c * samtools-0.1.8-10 (r658) * fixed a bug in bam2bcf when the reference is N ------------------------------------------------------------------------ r657 | lh3lh3 | 2010-08-03 14:50:23 -0400 (Tue, 03 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h * fixed a bug * treat ambiguous ref base as the fifth base ------------------------------------------------------------------------ r654 | lh3lh3 | 2010-08-02 17:38:27 -0400 (Mon, 02 Aug 2010) | 2 lines Changed paths: M /trunk/bcftools/bcf.c M /trunk/samtools/bcf.c missing a column in VCF output... ------------------------------------------------------------------------ r653 | lh3lh3 | 2010-08-02 17:31:33 -0400 (Mon, 02 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcf.c fixed a memory leak ------------------------------------------------------------------------ r651 | lh3lh3 | 2010-08-02 17:27:31 -0400 (Mon, 02 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bcf.c fixed a bug in bcf reader ------------------------------------------------------------------------ r650 | lh3lh3 | 2010-08-02 17:00:41 -0400 (Mon, 02 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/bam2bcf.c fixed a bug ------------------------------------------------------------------------ r649 | lh3lh3 | 2010-08-02 16:49:35 -0400 (Mon, 02 Aug 2010) | 3 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam2bcf.c M /trunk/samtools/bam2bcf.h M /trunk/samtools/bamtk.c * samtools-0.1.8-9 (r649) * lossless representation of PL in BCF output ------------------------------------------------------------------------ r648 | lh3lh3 | 2010-08-02 16:07:25 -0400 (Mon, 02 Aug 2010) | 2 lines Changed paths: M /trunk/samtools/Makefile A /trunk/samtools/bam2bcf.c A /trunk/samtools/bam2bcf.h M /trunk/samtools/bam_plcmd.c A /trunk/samtools/bcf.c A /trunk/samtools/bcf.h Generate binary VCF ------------------------------------------------------------------------ r644 | lh3lh3 | 2010-07-28 11:59:19 -0400 (Wed, 28 Jul 2010) | 5 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bamtk.c * samtools-0.1.8-8 (r644) * mpileup becomes a little stable again * the method is slightly different, but is more theoretically correct * snp calling is O(n^2) instead of O(n^3) ------------------------------------------------------------------------ r643 | lh3lh3 | 2010-07-28 11:54:15 -0400 (Wed, 28 Jul 2010) | 3 lines Changed paths: M /trunk/samtools/bam_mcns.c * fixed a STUPID bug, which cost me a lot of time. * I am going to clean up mcns a little bit ------------------------------------------------------------------------ r642 | lh3lh3 | 2010-07-27 23:23:07 -0400 (Tue, 27 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bam_mcns.h M /trunk/samtools/bam_plcmd.c supposedly this is THE correct implementation, but more testing is needed ------------------------------------------------------------------------ r641 | lh3lh3 | 2010-07-27 22:43:39 -0400 (Tue, 27 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_mcns.c NOT ready yet. Going to make further changes... ------------------------------------------------------------------------ r639 | lh3lh3 | 2010-07-25 22:18:38 -0400 (Sun, 25 Jul 2010) | 3 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.8-7 (r639) * fixed the reference allele assignment ------------------------------------------------------------------------ r638 | lh3lh3 | 2010-07-25 12:01:26 -0400 (Sun, 25 Jul 2010) | 5 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bam_mcns.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.8-6 (r638) * skip isnan/isinf in case of float underflow * added the flat prior * fixed an issue where there are no reads supporting the reference ------------------------------------------------------------------------ r637 | lh3lh3 | 2010-07-24 14:16:27 -0400 (Sat, 24 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_plcmd.c minor changes ------------------------------------------------------------------------ r636 | lh3lh3 | 2010-07-24 14:07:27 -0400 (Sat, 24 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bam_mcns.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c minor tweaks ------------------------------------------------------------------------ r635 | lh3lh3 | 2010-07-24 01:49:49 -0400 (Sat, 24 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bam_mcns.h M /trunk/samtools/bam_plcmd.c posterior expectation FINALLY working. I am so tired... ------------------------------------------------------------------------ r633 | lh3lh3 | 2010-07-23 13:50:48 -0400 (Fri, 23 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_plcmd.c another minor fix to mpileup ------------------------------------------------------------------------ r632 | lh3lh3 | 2010-07-23 13:43:31 -0400 (Fri, 23 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_plcmd.c added the format column ------------------------------------------------------------------------ r631 | lh3lh3 | 2010-07-23 13:25:44 -0400 (Fri, 23 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bam_mcns.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c added an alternative prior ------------------------------------------------------------------------ r628 | lh3lh3 | 2010-07-23 11:48:51 -0400 (Fri, 23 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bam_mcns.h M /trunk/samtools/bam_plcmd.c calculate posterior allele frequency ------------------------------------------------------------------------ r627 | lh3lh3 | 2010-07-22 21:39:13 -0400 (Thu, 22 Jul 2010) | 3 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.8-3 (r627) * multi-sample snp calling appears to work. More tests needed. ------------------------------------------------------------------------ r626 | lh3lh3 | 2010-07-22 16:37:56 -0400 (Thu, 22 Jul 2010) | 3 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bam_mcns.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bam_tview.c * preliminary multisample SNP caller. * something looks not so right, but it largely works ------------------------------------------------------------------------ r617 | lh3lh3 | 2010-07-14 16:26:27 -0400 (Wed, 14 Jul 2010) | 3 lines Changed paths: M /trunk/samtools/bam_mcns.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.8-2 (r617) * allele frequency calculation apparently works... ------------------------------------------------------------------------ r616 | lh3lh3 | 2010-07-14 13:33:51 -0400 (Wed, 14 Jul 2010) | 3 lines Changed paths: M /trunk/samtools/Makefile A /trunk/samtools/bam_mcns.c A /trunk/samtools/bam_mcns.h M /trunk/samtools/bam_plcmd.c * added mutli-sample framework. It is not working, yet. * improved the mpileup interface ------------------------------------------------------------------------ r615 | lh3lh3 | 2010-07-13 14:50:12 -0400 (Tue, 13 Jul 2010) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/Makefile * samtools-0.1.8-1 (r615) * allow to get mpileup at required sites ------------------------------------------------------------------------ r613 | lh3lh3 | 2010-07-11 22:40:56 -0400 (Sun, 11 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 Release samtools-0.1.8 ------------------------------------------------------------------------ r612 | lh3lh3 | 2010-07-11 21:08:56 -0400 (Sun, 11 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/knetfile.c fixed a compiling issue for Windows ------------------------------------------------------------------------ r611 | lh3lh3 | 2010-07-11 20:59:15 -0400 (Sun, 11 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_sort.c fixed a bug in sorting when output to stdout (by Peter Chines) ------------------------------------------------------------------------ r610 | lh3lh3 | 2010-07-09 17:05:10 -0400 (Fri, 09 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/NEWS M /trunk/samtools/bam_plcmd.c change the command line option of pileup ------------------------------------------------------------------------ r609 | lh3lh3 | 2010-07-09 00:39:34 -0400 (Fri, 09 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam_pileup.c A /trunk/samtools/examples/toy.fa A /trunk/samtools/examples/toy.sam make pileup work with CIGAR with I/D at the beginning or in the end ------------------------------------------------------------------------ r608 | lh3lh3 | 2010-07-08 22:36:12 -0400 (Thu, 08 Jul 2010) | 3 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_maqcns.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bam_tview.c * make tview more friendly * a temporary remedy for an issue in indel calling ------------------------------------------------------------------------ r607 | lh3lh3 | 2010-07-08 14:43:52 -0400 (Thu, 08 Jul 2010) | 4 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.7-r607 * improved the genotype accuracy for indels * use the SOAPsnp model for SNP calling by default. ------------------------------------------------------------------------ r606 | lh3lh3 | 2010-07-08 01:05:19 -0400 (Thu, 08 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/misc/Makefile removed a debugging example ------------------------------------------------------------------------ r605 | lh3lh3 | 2010-07-08 01:04:09 -0400 (Thu, 08 Jul 2010) | 4 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bamtk.c * samtools-.1.7-18 (r605) * fixed an issue when a deletion and mismatch occur at the same time and the base quality is higher than 40 (if -I40). ------------------------------------------------------------------------ r604 | lh3lh3 | 2010-07-02 19:32:24 -0400 (Fri, 02 Jul 2010) | 2 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_index.c M /trunk/samtools/misc/Makefile fixed a minor bug in idxstats ------------------------------------------------------------------------ r601 | lh3lh3 | 2010-06-16 09:03:59 -0400 (Wed, 16 Jun 2010) | 2 lines Changed paths: M /trunk/samtools/bam_index.c fixed a minor bug in indexing ------------------------------------------------------------------------ r600 | lh3lh3 | 2010-06-15 10:17:53 -0400 (Tue, 15 Jun 2010) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam.c change printf() to puts in exporting ------------------------------------------------------------------------ r599 | lh3lh3 | 2010-06-13 21:41:11 -0400 (Sun, 13 Jun 2010) | 2 lines Changed paths: M /trunk/samtools/bamtk.c minor fix. No actual effect. ------------------------------------------------------------------------ r598 | lh3lh3 | 2010-06-13 21:32:45 -0400 (Sun, 13 Jun 2010) | 2 lines Changed paths: M /trunk/samtools/Makefile added Makefile targets to compile shared/dynamic library ------------------------------------------------------------------------ r596 | lh3lh3 | 2010-06-13 19:48:07 -0400 (Sun, 13 Jun 2010) | 3 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c * samtools-0.1.7-17 (r596) * also keep the number of coor-less reads in the index file ------------------------------------------------------------------------ r595 | lh3lh3 | 2010-06-13 18:54:26 -0400 (Sun, 13 Jun 2010) | 3 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c * samtools-0.1.7-16 (r595) * write additional information to bam index ------------------------------------------------------------------------ r594 | lh3lh3 | 2010-06-13 17:29:52 -0400 (Sun, 13 Jun 2010) | 2 lines Changed paths: M /trunk/samtools/bam_index.c fixed a bug for unmapped sequences in indexing ------------------------------------------------------------------------ r593 | lh3lh3 | 2010-06-12 18:11:32 -0400 (Sat, 12 Jun 2010) | 2 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_index.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/samtools.1 rename iterf as iter ------------------------------------------------------------------------ r592 | lh3lh3 | 2010-06-12 18:02:38 -0400 (Sat, 12 Jun 2010) | 4 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam_aux.c M /trunk/samtools/bam_index.c M /trunk/samtools/bam_pileup.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.7-15 (r592) * fixed a few minor memory leaks in the new pileup code * improved the functionality of mpileup ------------------------------------------------------------------------ r591 | lh3lh3 | 2010-06-12 14:09:22 -0400 (Sat, 12 Jun 2010) | 3 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_pileup.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.7-14 (r591) * elementary multi-way pileup. More testing and more functionality to be done. ------------------------------------------------------------------------ r590 | lh3lh3 | 2010-06-12 01:00:24 -0400 (Sat, 12 Jun 2010) | 3 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_pileup.c M /trunk/samtools/bamtk.c * samtools-0.1.7-13 (r590) * added mpileup APIs. No compiling errors, but not tested at all. It is late. ------------------------------------------------------------------------ r589 | lh3lh3 | 2010-06-11 22:37:09 -0400 (Fri, 11 Jun 2010) | 3 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_pileup.c M /trunk/samtools/bamtk.c * samtools-0.1.7-12 (r589) * added iterator-like APIs for pileup ------------------------------------------------------------------------ r588 | lh3lh3 | 2010-06-11 17:41:13 -0400 (Fri, 11 Jun 2010) | 3 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c * samtools-0.1.7-11 (r588) * ported a few improvements from tabix back to samtools ------------------------------------------------------------------------ r587 | lh3lh3 | 2010-06-11 17:33:16 -0400 (Fri, 11 Jun 2010) | 3 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c * samtools-0.1.7-10 (r587) * added iterator interface for bam_fetch (ported back from tabix) ------------------------------------------------------------------------ r586 | lh3lh3 | 2010-06-11 13:23:53 -0400 (Fri, 11 Jun 2010) | 3 lines Changed paths: M /trunk/samtools/Makefile A /trunk/samtools/bam_reheader.c M /trunk/samtools/bamtk.c M /trunk/samtools/bgzf.c * samtools-0.1.7-9 (r586) * added "reheader" to replace the BAM header ------------------------------------------------------------------------ r585 | lh3lh3 | 2010-06-11 12:22:06 -0400 (Fri, 11 Jun 2010) | 3 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bamtk.c M /trunk/samtools/kstring.h * samtools-0.1.7-8 (r585) * speed up "view" ------------------------------------------------------------------------ r584 | lh3lh3 | 2010-06-11 12:00:41 -0400 (Fri, 11 Jun 2010) | 4 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bamtk.c M /trunk/samtools/bgzf.c M /trunk/samtools/bgzf.h M /trunk/samtools/kstring.h M /trunk/samtools/misc/wgsim_eval.pl * samtools-0.1.7-7 (r584) * ported tabix BGZF to samtools * flush BGZF after writing the BAM header and between alignment boundaries ------------------------------------------------------------------------ r583 | petulda | 2010-06-11 11:58:20 -0400 (Fri, 11 Jun 2010) | 1 line Changed paths: A /trunk/samtools/misc/varfilter.py Initial release on behalf of Aylwyn Scally ------------------------------------------------------------------------ r561 | petulda | 2010-05-07 08:41:56 -0400 (Fri, 07 May 2010) | 1 line Changed paths: M /trunk/samtools/samtools.1 Added a note about the indels coordinates ------------------------------------------------------------------------ r551 | petulda | 2010-04-23 09:42:13 -0400 (Fri, 23 Apr 2010) | 1 line Changed paths: M /trunk/samtools/misc/sam2vcf.pl Added the possibility to print or not to print the reference allele ------------------------------------------------------------------------ r546 | petulda | 2010-04-15 04:33:55 -0400 (Thu, 15 Apr 2010) | 1 line Changed paths: M /trunk/samtools/sam_header.c More descriptive message for space separated tags ------------------------------------------------------------------------ r545 | petulda | 2010-04-14 11:44:50 -0400 (Wed, 14 Apr 2010) | 1 line Changed paths: M /trunk/samtools/misc/sam2vcf.pl Speedup with -i, no need to query the reference all the time ------------------------------------------------------------------------ r541 | petulda | 2010-03-15 10:03:51 -0400 (Mon, 15 Mar 2010) | 1 line Changed paths: M /trunk/samtools/sam_header.c Fixed the order of sequences in the header ------------------------------------------------------------------------ r540 | petulda | 2010-03-04 06:28:35 -0500 (Thu, 04 Mar 2010) | 1 line Changed paths: M /trunk/samtools/misc/sam2vcf.pl Added possibility to select indels only and fixed a bug in reporting homozygous indels. ------------------------------------------------------------------------ r539 | jmarshall | 2010-02-27 06:48:17 -0500 (Sat, 27 Feb 2010) | 4 lines Changed paths: M /trunk/samtools/bam.c Improve the invalid 'BAM\1' magic number error message, and also print it when no bytes can be read from the alleged BAM file, e.g., in the common user error case when a SAM file has accidentally been supplied. ------------------------------------------------------------------------ r538 | petulda | 2010-02-26 10:51:40 -0500 (Fri, 26 Feb 2010) | 1 line Changed paths: M /trunk/samtools/AUTHORS M /trunk/samtools/bam.h M /trunk/samtools/bam_import.c M /trunk/samtools/sam_header.c Improved efficiency of header parsing ------------------------------------------------------------------------ r537 | lh3lh3 | 2010-02-23 21:08:48 -0500 (Tue, 23 Feb 2010) | 3 lines Changed paths: M /trunk/samtools/misc/export2sam.pl Updated export2sam.pl by Chris Saunders from Illumina. ------------------------------------------------------------------------ r536 | petulda | 2010-02-17 08:32:53 -0500 (Wed, 17 Feb 2010) | 1 line Changed paths: M /trunk/samtools/misc/samtools.pl Fixed filtering of SNPs near indels. Added min indel and SNP quality filter. ------------------------------------------------------------------------ r535 | petulda | 2010-02-12 04:52:37 -0500 (Fri, 12 Feb 2010) | 1 line Changed paths: M /trunk/samtools/misc/sam2vcf.pl Print an error for pileups in simple format ------------------------------------------------------------------------ r534 | lh3lh3 | 2010-02-11 14:01:41 -0500 (Thu, 11 Feb 2010) | 2 lines Changed paths: M /trunk/samtools/bam_plcmd.c added a hidden option in pileup to output the base position (for Erin) ------------------------------------------------------------------------ r533 | petulda | 2010-02-09 10:12:14 -0500 (Tue, 09 Feb 2010) | 1 line Changed paths: M /trunk/samtools/misc/sam2vcf.pl Added possibility to specify a custom column title for the data column ------------------------------------------------------------------------ r532 | petulda | 2010-02-09 09:46:09 -0500 (Tue, 09 Feb 2010) | 1 line Changed paths: M /trunk/samtools/bam_plcmd.c Added the -d option to limit maximum depth for indels. ------------------------------------------------------------------------ r531 | petulda | 2010-02-03 07:57:27 -0500 (Wed, 03 Feb 2010) | 1 line Changed paths: M /trunk/samtools/misc/sam2vcf.pl Added VCF header ------------------------------------------------------------------------ r530 | lh3lh3 | 2010-02-01 09:13:19 -0500 (Mon, 01 Feb 2010) | 3 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/samtools.pl M /trunk/samtools/misc/wgsim.c * samtools-0.1.7-6 * fixed a bug in faidx ------------------------------------------------------------------------ r529 | jmarshall | 2010-01-11 18:51:49 -0500 (Mon, 11 Jan 2010) | 2 lines Changed paths: M /trunk/samtools/faidx.c Put the right filename in the error message. ------------------------------------------------------------------------ r528 | lh3lh3 | 2009-12-14 11:26:47 -0500 (Mon, 14 Dec 2009) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.7-5 (r528) * further add new consensus generation strategy ------------------------------------------------------------------------ r527 | petulda | 2009-12-11 12:31:05 -0500 (Fri, 11 Dec 2009) | 1 line Changed paths: M /trunk/samtools/knetfile.c Fixed a bug in knet_seek ------------------------------------------------------------------------ r526 | petulda | 2009-12-11 07:51:18 -0500 (Fri, 11 Dec 2009) | 1 line Changed paths: M /trunk/samtools/misc/sam2vcf.pl Small fix in VCF format: dot for the empty INFO field ------------------------------------------------------------------------ r525 | petulda | 2009-12-11 04:36:18 -0500 (Fri, 11 Dec 2009) | 1 line Changed paths: M /trunk/samtools/sam_header.c Allow tabs in the CO header field ------------------------------------------------------------------------ r524 | jmarshall | 2009-12-10 10:03:58 -0500 (Thu, 10 Dec 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/Makefile.mingw Depend on libbam.a rather than the phony target, so that samtools is not unnecessarily rebuilt every time. Also clean bgzip. ------------------------------------------------------------------------ r523 | jmarshall | 2009-12-10 09:45:32 -0500 (Thu, 10 Dec 2009) | 4 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/Makefile.mingw Fix a bug in compiling bgzip: this also needs knetfile.o when _USE_KNETFILE is defined. Also introduce $(KNETFILE_O) which can be set to empty to facilitate non-knet builds. ------------------------------------------------------------------------ r522 | lh3lh3 | 2009-12-01 13:02:36 -0500 (Tue, 01 Dec 2009) | 4 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/sam_view.c * samtools-0.1.7-4 (r522) * fixed a bug in "view -r" * added a new option "view -R" to read required read groups from a file ------------------------------------------------------------------------ r521 | lh3lh3 | 2009-12-01 10:00:12 -0500 (Tue, 01 Dec 2009) | 3 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c * samtools-0.1.7-3 (r521) * calmd: optionally mask matching bases as N ------------------------------------------------------------------------ r520 | lh3lh3 | 2009-12-01 09:37:17 -0500 (Tue, 01 Dec 2009) | 4 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/samtools.pl * samtools-0.1.7-2 (r520) * fixed a few issues with compilation in Windows (on behalf of John) * choose a random base as the consensus (for population genetics studies) ------------------------------------------------------------------------ r519 | jmarshall | 2009-11-30 10:53:02 -0500 (Mon, 30 Nov 2009) | 6 lines Changed paths: M /trunk/samtools/Makefile Put libraries at the end, so they can resolve references from libbam.a as well, even with old-fashioned linkers. Also use libbam.a explicitly rather than "-L. -lbam" to ensure that we get the freshly built library, not some other libbam.a lying around the system. ------------------------------------------------------------------------ r518 | jmarshall | 2009-11-30 08:44:56 -0500 (Mon, 30 Nov 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/misc/Makefile Also clean *.exe (for Cygwin users using this makefile). ------------------------------------------------------------------------ r517 | jmarshall | 2009-11-30 07:09:04 -0500 (Mon, 30 Nov 2009) | 2 lines Changed paths: M /trunk/samtools/bam_index.c Index files should be opened in binary mode, not text mode. ------------------------------------------------------------------------ r516 | lh3lh3 | 2009-11-27 15:18:59 -0500 (Fri, 27 Nov 2009) | 2 lines Changed paths: A /trunk/samtools/examples/bam2bed.c another example program ------------------------------------------------------------------------ r515 | lh3lh3 | 2009-11-27 10:44:56 -0500 (Fri, 27 Nov 2009) | 3 lines Changed paths: M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/wgsim_eval.pl M /trunk/samtools/sam.c * samtools-0.1.7-1 (r515) * report an error when .fai contains duplicated names, instead of segfault ------------------------------------------------------------------------ r514 | jmarshall | 2009-11-24 09:45:35 -0500 (Tue, 24 Nov 2009) | 2 lines Changed paths: M /trunk/samtools/bam.c Format 'c'-encoded auxiliary fields correctly, as *signed* integers. ------------------------------------------------------------------------ r513 | lh3lh3 | 2009-11-16 10:13:07 -0500 (Mon, 16 Nov 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile.mingw Update Makefile.mingw for the same reason ------------------------------------------------------------------------ r512 | lh3lh3 | 2009-11-16 10:00:08 -0500 (Mon, 16 Nov 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile Fixed a bug in compiling razip ------------------------------------------------------------------------ r510 | lh3lh3 | 2009-11-10 10:55:41 -0500 (Tue, 10 Nov 2009) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 Release samtools-0.1.7 (r510) ------------------------------------------------------------------------ r509 | lh3lh3 | 2009-11-06 09:17:09 -0500 (Fri, 06 Nov 2009) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.6-22 (r509) * forget to fix a similar problem in glfgen ------------------------------------------------------------------------ r508 | lh3lh3 | 2009-11-06 09:06:40 -0500 (Fri, 06 Nov 2009) | 3 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam_view.c * samtools-0.1.6-21 (r508) * fixed a potential bug in the indel caller towards the end of a chromosome ------------------------------------------------------------------------ r494 | lh3lh3 | 2009-10-26 11:38:00 -0400 (Mon, 26 Oct 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/sam_view.c * samtools-0.1.6-19 (r494) * allow to convert Illumina quality (64 based) to the BAM quality ------------------------------------------------------------------------ r493 | lh3lh3 | 2009-10-26 10:24:39 -0400 (Mon, 26 Oct 2009) | 4 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam.c M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c M /trunk/samtools/sam_header.c * samtools-0.1.6-18 (r493) * fixed the bugs due to improperly incorporating Petr's header parser * a little code clean up in sam_header.c ------------------------------------------------------------------------ r492 | petulda | 2009-10-24 09:43:25 -0400 (Sat, 24 Oct 2009) | 1 line Changed paths: M /trunk/samtools/sam_header.c Added sam_header_line_free call for sam_header_parse2 ------------------------------------------------------------------------ r491 | lh3lh3 | 2009-10-24 00:50:16 -0400 (Sat, 24 Oct 2009) | 3 lines Changed paths: M /trunk/samtools/sam_view.c * BUGGY VERSION * fixed a minor bug ------------------------------------------------------------------------ r490 | lh3lh3 | 2009-10-24 00:45:12 -0400 (Sat, 24 Oct 2009) | 4 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam.h M /trunk/samtools/bam_import.c M /trunk/samtools/sam.c * BUGGY VERSION * improved the interface a bit * bug unfixed ------------------------------------------------------------------------ r489 | lh3lh3 | 2009-10-24 00:41:50 -0400 (Sat, 24 Oct 2009) | 3 lines Changed paths: M /trunk/samtools/bam_import.c M /trunk/samtools/sam_header.c M /trunk/samtools/sam_header.h * BUGGY VERSION. Please NOT use it. * Fixed a minor bug, but the major bug is still there. ------------------------------------------------------------------------ r488 | lh3lh3 | 2009-10-24 00:17:10 -0400 (Sat, 24 Oct 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam.c M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c M /trunk/samtools/bam_import.c M /trunk/samtools/bam_rmdup.c M /trunk/samtools/bam_rmdupse.c M /trunk/samtools/kaln.c M /trunk/samtools/sam.c M /trunk/samtools/sam_header.c M /trunk/samtools/sam_header.h M /trunk/samtools/sam_view.c * This revision is SERIOUSLY BUGGY. Please NOT use it. * Start to incorporate header parsing from Petr Danecek ------------------------------------------------------------------------ r487 | petulda | 2009-10-23 11:44:32 -0400 (Fri, 23 Oct 2009) | 1 line Changed paths: M /trunk/samtools/sam_header.c M /trunk/samtools/sam_header.h Now possible to merge multiple HeaderDict dictionaries ------------------------------------------------------------------------ r486 | petulda | 2009-10-22 11:46:58 -0400 (Thu, 22 Oct 2009) | 1 line Changed paths: M /trunk/samtools/sam_header.c ------------------------------------------------------------------------ r485 | petulda | 2009-10-22 11:41:56 -0400 (Thu, 22 Oct 2009) | 1 line Changed paths: A /trunk/samtools/sam_header.c A /trunk/samtools/sam_header.h ------------------------------------------------------------------------ r484 | lh3lh3 | 2009-10-19 14:31:32 -0400 (Mon, 19 Oct 2009) | 5 lines Changed paths: M /trunk/samtools/bam_import.c M /trunk/samtools/bam_rmdupse.c M /trunk/samtools/bamtk.c M /trunk/samtools/examples/Makefile * samtools-0.1.6-17 (r484) * fixed a memory leak in rmdupse * fixed a bug in parsing @RG header lines * test rmdup in examples/ ------------------------------------------------------------------------ r483 | lh3lh3 | 2009-10-19 13:22:48 -0400 (Mon, 19 Oct 2009) | 4 lines Changed paths: M /trunk/samtools/bam_rmdup.c M /trunk/samtools/bam_rmdupse.c M /trunk/samtools/bamtk.c * samtools-0.1.6-16 (r483) * unify the interface of rmdup and rmdupse * a new bug found in rg2lib(). Have not been fixed yet. ------------------------------------------------------------------------ r482 | lh3lh3 | 2009-10-19 13:03:34 -0400 (Mon, 19 Oct 2009) | 4 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_rmdup.c M /trunk/samtools/bam_rmdupse.c M /trunk/samtools/bamtk.c A /trunk/samtools/klist.h * samtools-0.1.6-15 (r482) * rewrite rmdupse * rmdupse is now library aware ------------------------------------------------------------------------ r481 | lh3lh3 | 2009-10-18 00:07:21 -0400 (Sun, 18 Oct 2009) | 3 lines Changed paths: M /trunk/samtools/bam_rmdup.c M /trunk/samtools/bamtk.c * samtools-0.1.6-14 (r480) * rmdup is now RG aware ------------------------------------------------------------------------ r480 | lh3lh3 | 2009-10-17 22:05:20 -0400 (Sat, 17 Oct 2009) | 2 lines Changed paths: M /trunk/samtools/misc/samtools.pl added a small unitity to parse SRA XML files ------------------------------------------------------------------------ r479 | lh3lh3 | 2009-10-17 20:57:26 -0400 (Sat, 17 Oct 2009) | 3 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_maqcns.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c * samtools-0.1.6-13 (r479) * merge: optionally use file names as RG tags ------------------------------------------------------------------------ r478 | lh3lh3 | 2009-10-14 14:18:12 -0400 (Wed, 14 Oct 2009) | 3 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam.h M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bamtk.c M /trunk/samtools/kaln.c * samtools-0.1.6-12 (r478) * fixed a bug in the indel caller ------------------------------------------------------------------------ r477 | lh3lh3 | 2009-10-10 06:12:26 -0400 (Sat, 10 Oct 2009) | 3 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c * samtools-0.1.6-11 (r477) * fixed a bug due to recent change in bam_index.c (thank Nicole Washington for the patch) ------------------------------------------------------------------------ r476 | petulda | 2009-10-09 11:45:36 -0400 (Fri, 09 Oct 2009) | 1 line Changed paths: A /trunk/samtools/misc/sam2vcf.pl Added the sam2vcf.pl script. ------------------------------------------------------------------------ r475 | lh3lh3 | 2009-10-08 10:19:16 -0400 (Thu, 08 Oct 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam.c M /trunk/samtools/bam.h M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bamtk.c A /trunk/samtools/kaln.c A /trunk/samtools/kaln.h Unfinished modification. Please do not use this revision... ------------------------------------------------------------------------ r474 | petulda | 2009-10-08 06:39:54 -0400 (Thu, 08 Oct 2009) | 1 line Changed paths: M /trunk/samtools/knetfile.c Removed the offending knet_seek message. ------------------------------------------------------------------------ r473 | petulda | 2009-10-06 09:26:35 -0400 (Tue, 06 Oct 2009) | 1 line Changed paths: M /trunk/samtools/knetfile.c M /trunk/samtools/razf.c Bug fix - faidx on RAZF compressed files now working. ------------------------------------------------------------------------ r472 | lh3lh3 | 2009-10-02 08:42:57 -0400 (Fri, 02 Oct 2009) | 2 lines Changed paths: M /trunk/samtools/samtools.1 Clarify the meaning of a region like "chr2:1,000,000". ------------------------------------------------------------------------ r471 | lh3lh3 | 2009-10-02 05:42:19 -0400 (Fri, 02 Oct 2009) | 2 lines Changed paths: M /trunk/samtools/misc/novo2sam.pl Fixed minor bugs in novo2sam.pl (on behalf of Ken Chen and Colin Hercus) ------------------------------------------------------------------------ r470 | lh3lh3 | 2009-09-29 15:01:27 -0400 (Tue, 29 Sep 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile.mingw M /trunk/samtools/bamtk.c M /trunk/samtools/knetfile.c M /trunk/samtools/knetfile.h * samtools-0.1.6-9 (r470) * make knetfile.c compatible with MinGW (thank Martin Morgan for the patch) ------------------------------------------------------------------------ r469 | lh3lh3 | 2009-09-29 08:07:44 -0400 (Tue, 29 Sep 2009) | 3 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c * samtools-0.1.6-9 (r469) * refactor bam_fetch() for Python binding. On behalf of Leo Goodstadt. ------------------------------------------------------------------------ r468 | lh3lh3 | 2009-09-28 05:18:29 -0400 (Mon, 28 Sep 2009) | 3 lines Changed paths: M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/samtools.pl * samtools-0.1.6-7 (r468) * make merge stable ------------------------------------------------------------------------ r467 | petulda | 2009-09-28 04:51:29 -0400 (Mon, 28 Sep 2009) | 1 line Changed paths: M /trunk/samtools/bgzf.c M /trunk/samtools/bgzip.c M /trunk/samtools/razf.c M /trunk/samtools/razip.c Changed the mode for newly created files to 0666. This allows less strict permissions with umask properly set (e.g. 0002 vs. 0022). ------------------------------------------------------------------------ r466 | lh3lh3 | 2009-09-24 06:29:19 -0400 (Thu, 24 Sep 2009) | 3 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c * samtools-0.1.6-6 (r466) * do not crash calmd when some sequences are absent from the reference. ------------------------------------------------------------------------ r464 | jmarshall | 2009-09-23 06:14:32 -0400 (Wed, 23 Sep 2009) | 3 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/knetfile.c Suppress bgzf_check_EOF() messages when reading from a pipe, as there is no way to seek on a pipe and the messages always appear. ------------------------------------------------------------------------ r463 | petulda | 2009-09-16 07:05:41 -0400 (Wed, 16 Sep 2009) | 1 line Changed paths: M /trunk/samtools/knetfile.c M /trunk/samtools/razf.c A bug fix, "samtools view" is now working again. ------------------------------------------------------------------------ r462 | lh3lh3 | 2009-09-16 04:51:07 -0400 (Wed, 16 Sep 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/faidx.c M /trunk/samtools/knetfile.c M /trunk/samtools/knetfile.h M /trunk/samtools/razf.c M /trunk/samtools/razf.h * samtools-0.1.6-5 (r462) * Added knetfile support in razf and faidx (on behalf of Petr Danecek) ------------------------------------------------------------------------ r460 | lh3lh3 | 2009-09-09 07:06:22 -0400 (Wed, 09 Sep 2009) | 2 lines Changed paths: M /trunk/samtools/samtools.1 fixed a formatting issue ------------------------------------------------------------------------ r459 | lh3lh3 | 2009-09-08 18:14:08 -0400 (Tue, 08 Sep 2009) | 3 lines Changed paths: M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c * samtools-0.1.6-4 (r459) * make sort output the result to stdout when -o is in use ------------------------------------------------------------------------ r458 | lh3lh3 | 2009-09-07 05:10:28 -0400 (Mon, 07 Sep 2009) | 4 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/faidx.c M /trunk/samtools/faidx.h M /trunk/samtools/samtools.1 * samtools-0.1.6-2 (r458) * added more interface to faidx (by Nils) * updated documentation ------------------------------------------------------------------------ r457 | lh3lh3 | 2009-09-05 16:12:04 -0400 (Sat, 05 Sep 2009) | 3 lines Changed paths: M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c * samtools-0.1.6-2 (r457) * get rid of three assert() in bam_sort.c ------------------------------------------------------------------------ r456 | jmarshall | 2009-09-04 12:46:25 -0400 (Fri, 04 Sep 2009) | 3 lines Changed paths: M /trunk/samtools/razf.c Return NULL from _razf_open() (and hence razf_open()/razf_open2()) when opening the file fails. ------------------------------------------------------------------------ r453 | lh3lh3 | 2009-09-02 08:56:33 -0400 (Wed, 02 Sep 2009) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 D /trunk/samtools/source.dot Release samtools-0.1.6 ------------------------------------------------------------------------ r451 | lh3lh3 | 2009-09-02 05:44:48 -0400 (Wed, 02 Sep 2009) | 4 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bam_rmdup.c M /trunk/samtools/bam_rmdupse.c M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 * samtools-0.1.5-34 (r451) * applied the patch by John * improved the help message a little bit ------------------------------------------------------------------------ r450 | lh3lh3 | 2009-09-02 04:55:55 -0400 (Wed, 02 Sep 2009) | 3 lines Changed paths: M /trunk/samtools/bam_color.c M /trunk/samtools/bamtk.c * samtools-0.1.5-33 (r450) * fixed a bug in bam_color.c (on behalf of Nils Homer) ------------------------------------------------------------------------ r449 | lh3lh3 | 2009-08-29 15:36:41 -0400 (Sat, 29 Aug 2009) | 4 lines Changed paths: M /trunk/samtools/bam_import.c M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/samtools.pl * samtools-0.1.5-32 (r449) * fillmd: fixed a bug in modifying MD/NM tags * in import, give a warning if the read is aligned but there is no CIGAR. ------------------------------------------------------------------------ r448 | lh3lh3 | 2009-08-19 04:44:28 -0400 (Wed, 19 Aug 2009) | 3 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam_pileup.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/wgsim_eval.pl * samtools-0.1.5-31 (r448) * fixed an issue when the last CIGAR is I or D ------------------------------------------------------------------------ r447 | lh3lh3 | 2009-08-17 04:34:57 -0400 (Mon, 17 Aug 2009) | 3 lines Changed paths: M /trunk/samtools/bam_aux.c M /trunk/samtools/bamtk.c * samtools-0.1.5-30 (r447) * fixed a bug in bam_aux_get(): 'A' is not checked ------------------------------------------------------------------------ r446 | lh3lh3 | 2009-08-17 04:33:17 -0400 (Mon, 17 Aug 2009) | 2 lines Changed paths: M /trunk/samtools/bam_aux.c M /trunk/samtools/bamtk.c * ------------------------------------------------------------------------ r444 | lh3lh3 | 2009-08-11 05:02:36 -0400 (Tue, 11 Aug 2009) | 3 lines Changed paths: M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c * samtools-0.1.5-28 (r444) * bug in "merge -n" ------------------------------------------------------------------------ r443 | lh3lh3 | 2009-08-11 04:29:11 -0400 (Tue, 11 Aug 2009) | 4 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c * samtools-0.1.5-27 (r443) * SEQ and QUAL can be "*" * parse CIGAR "=" and "X" as "M" ------------------------------------------------------------------------ r442 | lh3lh3 | 2009-08-07 16:56:38 -0400 (Fri, 07 Aug 2009) | 4 lines Changed paths: M /trunk/samtools/bam_pileup.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/md5.c M /trunk/samtools/misc/md5.h M /trunk/samtools/misc/md5fa.c * samtools-0.1.5-26 (r442) * replace RSA Inc md5.* with ones under permissive lincense * fixed a bug in detecting unsorted bam in pileup ------------------------------------------------------------------------ r441 | bhandsaker | 2009-08-05 09:41:28 -0400 (Wed, 05 Aug 2009) | 2 lines Changed paths: M /trunk/samtools/bgzf.c M /trunk/samtools/bgzf.h M /trunk/samtools/bgzip.c Change copyright notices now that MIT has approved open source distribution. ------------------------------------------------------------------------ r440 | lh3lh3 | 2009-08-05 05:44:24 -0400 (Wed, 05 Aug 2009) | 3 lines Changed paths: M /trunk/samtools/bam_stat.c M /trunk/samtools/bamtk.c * samtools-0.1.5-25 (r436) * in flagstats, do not report singletons if both ends are unmapped ------------------------------------------------------------------------ r439 | lh3lh3 | 2009-08-04 17:16:51 -0400 (Tue, 04 Aug 2009) | 2 lines Changed paths: M /trunk/samtools/misc/maq2sam.c fixed a SERIOUS bug in setting 0x20 flag ------------------------------------------------------------------------ r438 | lh3lh3 | 2009-08-04 16:50:43 -0400 (Tue, 04 Aug 2009) | 2 lines Changed paths: M /trunk/samtools/misc/samtools.pl fixed two minor bugs (suggested by Tim M Storm) ------------------------------------------------------------------------ r437 | lh3lh3 | 2009-08-04 04:13:24 -0400 (Tue, 04 Aug 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/misc/samtools.pl M /trunk/samtools/sam_view.c * samtools-0.1.5-24 (r435) * fixed a typo ------------------------------------------------------------------------ r434 | lh3lh3 | 2009-08-03 05:40:42 -0400 (Mon, 03 Aug 2009) | 3 lines Changed paths: M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c * samtools-0.1.5-23 (r434) * in tview, press 'r' to show read names rather than sequences ------------------------------------------------------------------------ r433 | lh3lh3 | 2009-08-02 14:13:35 -0400 (Sun, 02 Aug 2009) | 3 lines Changed paths: M /trunk/samtools/knetfile.c * tried to fixed the buggy FTP random access in Windows. FAILED. * anyway, MinGW seems to have problem with "%lld". ------------------------------------------------------------------------ r432 | lh3lh3 | 2009-08-01 19:32:07 -0400 (Sat, 01 Aug 2009) | 5 lines Changed paths: M /trunk/samtools/Makefile.mingw M /trunk/samtools/bamtk.c M /trunk/samtools/faidx.c M /trunk/samtools/razf.c A /trunk/samtools/win32/libcurses.a A /trunk/samtools/win32/xcurses.h * samtools-0.1.5-22 (r432) * faidx: fixed compitability issue with _WIN32 * razf: fixed potential compitability issue with _WIN32 * PDCurses support in Windows ------------------------------------------------------------------------ r431 | lh3lh3 | 2009-08-01 18:34:54 -0400 (Sat, 01 Aug 2009) | 2 lines Changed paths: M /trunk/samtools/win32/libz.a replace the GnuWin32 version of libz.a with my own build with MinGW. ------------------------------------------------------------------------ r430 | lh3lh3 | 2009-08-01 18:21:07 -0400 (Sat, 01 Aug 2009) | 2 lines Changed paths: M /trunk/samtools/knetfile.c add comments ------------------------------------------------------------------------ r429 | lh3lh3 | 2009-08-01 17:41:19 -0400 (Sat, 01 Aug 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile.mingw M /trunk/samtools/bamtk.c M /trunk/samtools/knetfile.c M /trunk/samtools/knetfile.h * samtools-0.1.5-21 (r428) * knetfile.c is now compatible with mingw-winsock ------------------------------------------------------------------------ r428 | lh3lh3 | 2009-07-31 19:39:07 -0400 (Fri, 31 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile.mingw simplify MinGW Makefile ------------------------------------------------------------------------ r427 | lh3lh3 | 2009-07-31 19:30:54 -0400 (Fri, 31 Jul 2009) | 5 lines Changed paths: A /trunk/samtools/Makefile.mingw M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c A /trunk/samtools/win32 A /trunk/samtools/win32/libz.a A /trunk/samtools/win32/zconf.h A /trunk/samtools/win32/zlib.h * samtools-0.1.5-20 (r427) * MinGW support. At least SAM<->BAM conversion is working. Other functionality are not tested at the moment. * zlib headers and Windows version of libz.a are included in win32/ ------------------------------------------------------------------------ r426 | lh3lh3 | 2009-07-31 18:32:09 -0400 (Fri, 31 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/sam_view.c * samtools-0.1.5-19 (r426) * fixed a bug caused by recent modifications. Sorry. ------------------------------------------------------------------------ r425 | lh3lh3 | 2009-07-31 18:23:51 -0400 (Fri, 31 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/bgzf.c compatible with Windows binary files ------------------------------------------------------------------------ r424 | lh3lh3 | 2009-07-31 05:19:59 -0400 (Fri, 31 Jul 2009) | 5 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_maqcns.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/samtools.pl * samtools-0.1.5-18 (r423) * output additional information in pileup indel lines, for the purepose of debugging at the moment * in tview, optionally allow to treat reference skip as deletion ------------------------------------------------------------------------ r423 | lh3lh3 | 2009-07-30 17:00:36 -0400 (Thu, 30 Jul 2009) | 2 lines Changed paths: A /trunk/samtools/misc/psl2sam.pl convert BLAT psl to SAM. ------------------------------------------------------------------------ r422 | lh3lh3 | 2009-07-30 06:24:39 -0400 (Thu, 30 Jul 2009) | 6 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam.c M /trunk/samtools/bamtk.c M /trunk/samtools/bgzf.c M /trunk/samtools/bgzf.h M /trunk/samtools/knetfile.c M /trunk/samtools/sam.c M /trunk/samtools/sam_view.c * samtools-0.1.5-17 (r422) * fixed a but in knetfile.c when seek type is not SEEK_SET * write an empty BGZF block to every BGZF file * check BGZF EOF marker in bam_header_read() * update ChangeLog ------------------------------------------------------------------------ r421 | lh3lh3 | 2009-07-30 05:03:39 -0400 (Thu, 30 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/bam_import.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/samtools.pl M /trunk/samtools/sam.c M /trunk/samtools/sam.h M /trunk/samtools/sam_view.c * samtools-0.1.5-16 (r421) * in view and pileup, load header from FASTA index if the input is SAM. ------------------------------------------------------------------------ r420 | lh3lh3 | 2009-07-29 04:18:55 -0400 (Wed, 29 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/misc/maq2sam.c do not set "read 1" if reads are not mapped in the PE mode of maq ------------------------------------------------------------------------ r419 | lh3lh3 | 2009-07-28 04:52:33 -0400 (Tue, 28 Jul 2009) | 5 lines Changed paths: M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/samtools.pl M /trunk/samtools/misc/wgsim_eval.pl * samtools-0.1.5-15 (r419) * in sam_open(), return NULL when the file cannot be opened. * make wgsim_eval.pl more robust to imperfect SAM * add "unique" command to samtools.pl ------------------------------------------------------------------------ r418 | lh3lh3 | 2009-07-24 09:04:19 -0400 (Fri, 24 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/misc/wgsim_eval.pl skip @header lines in SAM ------------------------------------------------------------------------ r417 | lh3lh3 | 2009-07-24 07:42:38 -0400 (Fri, 24 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/sam_view.c * samtools-0.1.5-14 (r417) * more help in "samtools view" due to the recent changes. ------------------------------------------------------------------------ r416 | lh3lh3 | 2009-07-24 07:34:30 -0400 (Fri, 24 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam.h M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c M /trunk/samtools/sam.h M /trunk/samtools/sam_view.c * samtools-0.1.5-17 (r416) * support import/export SAM with string tags ------------------------------------------------------------------------ r415 | lh3lh3 | 2009-07-24 06:39:26 -0400 (Fri, 24 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam.h M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c M /trunk/samtools/sam.h M /trunk/samtools/sam_view.c * samtools-0.1.5-12 (r415) * FLAG now can be in HEX ------------------------------------------------------------------------ r414 | lh3lh3 | 2009-07-22 17:03:49 -0400 (Wed, 22 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/kstring.h fixed a compiling error (thank Ken for fixing it) ------------------------------------------------------------------------ r412 | lh3lh3 | 2009-07-21 17:19:40 -0400 (Tue, 21 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/kstring.c M /trunk/samtools/kstring.h Implemented Boyer-Moore search in the kstring library. ------------------------------------------------------------------------ r409 | lh3lh3 | 2009-07-17 12:10:20 -0400 (Fri, 17 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/bam_index.c do not include knetfile.h when _USE_KNETFILE is not defined ------------------------------------------------------------------------ r408 | lh3lh3 | 2009-07-17 10:29:21 -0400 (Fri, 17 Jul 2009) | 5 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c M /trunk/samtools/bgzf.c * samtools-0.1.5-11 (r408) * force to overwirte existing MD if it is different from the one calculated from fillmd. * bgzf.c: improved the compatibility with Windows headers ------------------------------------------------------------------------ r407 | lh3lh3 | 2009-07-17 09:46:56 -0400 (Fri, 17 Jul 2009) | 5 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam.h * samtools-0.1.5-10 (r407) * implemented bam_aux_del() to remove a tag * fillmd: generate the NM tag * fillmd: cmd interface improvement ------------------------------------------------------------------------ r406 | lh3lh3 | 2009-07-16 18:30:40 -0400 (Thu, 16 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile Sorry. The old Makefile is for PDCurses... ------------------------------------------------------------------------ r405 | lh3lh3 | 2009-07-16 18:30:11 -0400 (Thu, 16 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c * samtools-0.1.5-9 (r405) * improved the compatibility with PDCurses a little bit ------------------------------------------------------------------------ r404 | lh3lh3 | 2009-07-16 18:23:52 -0400 (Thu, 16 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c * samtools-0.1.5-8 (r404) * compatible with PDCurses ------------------------------------------------------------------------ r403 | lh3lh3 | 2009-07-16 17:39:39 -0400 (Thu, 16 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/kseq.h * samtools-0.1.5-7 (r403) * fixed a bug in kseq.h for binary files (text files are fine) ------------------------------------------------------------------------ r402 | lh3lh3 | 2009-07-16 06:49:53 -0400 (Thu, 16 Jul 2009) | 4 lines Changed paths: M /trunk/samtools/bam_import.c M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c M /trunk/samtools/bgzf.c * samtools-0.1.5-6 (r402) * fixed compiling error when "-D_USE_NETFILE" is not applied * improve portability to MinGW ------------------------------------------------------------------------ r398 | lh3lh3 | 2009-07-13 05:21:36 -0400 (Mon, 13 Jul 2009) | 3 lines Changed paths: A /trunk/bam-lite/bam.h (from /trunk/samtools/bam.h:395) A /trunk/bam-lite/bam_lite.c (from /trunk/samtools/bam_lite.c:395) D /trunk/samtools/bam_lite.c * move bam_lite.c to bam-lite * copy bam.h to bam-lite ------------------------------------------------------------------------ r395 | lh3lh3 | 2009-07-13 05:12:57 -0400 (Mon, 13 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_lite.c M /trunk/samtools/bam_lpileup.c M /trunk/samtools/bam_pileup.c M /trunk/samtools/bamtk.c * samtools-0.1.5-5 (r395) * added bam_pileup_file() and removed bam_lpileup_file() ------------------------------------------------------------------------ r394 | lh3lh3 | 2009-07-12 19:35:10 -0400 (Sun, 12 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/knetfile.c M /trunk/samtools/knetfile.h * samtools-0.1.5-4 (r394) * http_proxy support in knetfile library (check http_proxy ENV) ------------------------------------------------------------------------ r393 | lh3lh3 | 2009-07-12 18:57:07 -0400 (Sun, 12 Jul 2009) | 5 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c M /trunk/samtools/knetfile.c M /trunk/samtools/knetfile.h * samtools-0.1.5-3 (r393) * knetfile now supports HTTP (no proxy at the moment) * fixed a potential issue in knetfile on opening ordinary file, although I have not seen the sideeffect so far. ------------------------------------------------------------------------ r392 | lh3lh3 | 2009-07-12 13:50:55 -0400 (Sun, 12 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/samtools.1 Remove the warning in tview ------------------------------------------------------------------------ r391 | lh3lh3 | 2009-07-12 13:42:43 -0400 (Sun, 12 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c * samtools-0.1.5-2 (r391) * do not show a blank screen when no reads mapped ------------------------------------------------------------------------ r390 | lh3lh3 | 2009-07-09 09:01:42 -0400 (Thu, 09 Jul 2009) | 4 lines Changed paths: M /trunk/samtools/bam.h A /trunk/samtools/bam_lite.c M /trunk/samtools/bamtk.c * samtools-0.1.5-1 (r390) * removed useless _IOLIB in bam.h. This should cause no change at all. * added bam_lite.c for light-weight BAM reading ------------------------------------------------------------------------ r385 | lh3lh3 | 2009-07-07 11:53:29 -0400 (Tue, 07 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/knetfile.c Release samtools-0.1.5c (fixed a bug in piping) ------------------------------------------------------------------------ r383 | lh3lh3 | 2009-07-07 06:39:55 -0400 (Tue, 07 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c Release samtools-0.1.5b (BUG! so embarrassing!) ------------------------------------------------------------------------ r381 | lh3lh3 | 2009-07-07 06:20:06 -0400 (Tue, 07 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c M /trunk/samtools/bamtk.c Release samtools-0.1.5a (for compatibility with Bio::DB::Sam) ------------------------------------------------------------------------ r373 | lh3lh3 | 2009-07-07 05:26:57 -0400 (Tue, 07 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 Release samtools-0.1.5 ------------------------------------------------------------------------ r372 | lh3lh3 | 2009-07-07 04:49:27 -0400 (Tue, 07 Jul 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c * samtools-0.1.4-23 (r372) * keep header text if "view -t" is used (by Gerton) ------------------------------------------------------------------------ r371 | lh3lh3 | 2009-07-06 20:13:32 -0400 (Mon, 06 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/samtools.1 update documentation ------------------------------------------------------------------------ r370 | bhandsaker | 2009-07-02 17:24:34 -0400 (Thu, 02 Jul 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile Introduced LIBPATH variable so this could be overridden to allow samtools to build correct at the Broad. ------------------------------------------------------------------------ r369 | lh3lh3 | 2009-07-02 08:36:53 -0400 (Thu, 02 Jul 2009) | 4 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam_aux.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.4-22 (r369) * in pileup, optionally print E2 and U2 * remove the debugging code in bam_aux_get() (Drat!) ------------------------------------------------------------------------ r368 | lh3lh3 | 2009-07-02 06:32:26 -0400 (Thu, 02 Jul 2009) | 6 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c M /trunk/samtools/bam_index.c M /trunk/samtools/bam_lpileup.c M /trunk/samtools/bam_md.c M /trunk/samtools/bam_pileup.c M /trunk/samtools/bam_rmdup.c M /trunk/samtools/bam_stat.c M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c M /trunk/samtools/faidx.c M /trunk/samtools/faidx.h M /trunk/samtools/glf.c * samtools-0.1.4-21 (r368) * propagate errors rather than exit or complain assertion failure. Assertion should be only used for checking internal bugs, but not for external input inconsistency. I was just a bit lazy. * small memory leak may be present on failure, though ------------------------------------------------------------------------ r367 | lh3lh3 | 2009-06-30 11:18:42 -0400 (Tue, 30 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/knetfile.c reduce the chance of blocking in FTP connection ------------------------------------------------------------------------ r366 | lh3lh3 | 2009-06-30 10:35:21 -0400 (Tue, 30 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/knetfile.c minor changes to knetfile: invalid fd equals -1 rather than 0 ------------------------------------------------------------------------ r365 | lh3lh3 | 2009-06-30 09:04:30 -0400 (Tue, 30 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c M /trunk/samtools/knetfile.c M /trunk/samtools/knetfile.h * samtools-0.1.4-20 (r365) * download the BAM index file if it is not found in the current working directory. ------------------------------------------------------------------------ r364 | lh3lh3 | 2009-06-30 07:39:07 -0400 (Tue, 30 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/knetfile.c * samtools-0.1.4-19 (r364) * knetfile: report error when the file is not present on FTP ------------------------------------------------------------------------ r363 | lh3lh3 | 2009-06-29 18:23:32 -0400 (Mon, 29 Jun 2009) | 4 lines Changed paths: M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c M /trunk/samtools/bgzf.c M /trunk/samtools/bgzf.h M /trunk/samtools/knetfile.c M /trunk/samtools/knetfile.h * samtools-0.1.4-18 (r363) * knetfile: do not trigger network communication in FTP seek (lazy seek) * bgzf: cache recent blocks (disabled by default) ------------------------------------------------------------------------ r362 | lh3lh3 | 2009-06-25 16:04:34 -0400 (Thu, 25 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/bgzf.c write changelog ------------------------------------------------------------------------ r361 | lh3lh3 | 2009-06-25 16:03:10 -0400 (Thu, 25 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c * samtools-0.1.4-17 (r361) * if a file is given on FTP, search locally for the BAM index ------------------------------------------------------------------------ r360 | lh3lh3 | 2009-06-25 15:44:52 -0400 (Thu, 25 Jun 2009) | 5 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam_import.c M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c M /trunk/samtools/bgzf.c M /trunk/samtools/bgzf.h M /trunk/samtools/knetfile.c M /trunk/samtools/knetfile.h * samtools-0.1.4-16 (r360) * report more information in index when the input is not sorted * change the behaviour of knet_seek() such that it returns 0 on success * support knetfile library in BGZF ------------------------------------------------------------------------ r359 | lh3lh3 | 2009-06-25 12:10:55 -0400 (Thu, 25 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/knetfile.c M /trunk/samtools/knetfile.h fixed bugs in knetfile.* ------------------------------------------------------------------------ r358 | lh3lh3 | 2009-06-25 08:53:19 -0400 (Thu, 25 Jun 2009) | 2 lines Changed paths: A /trunk/samtools/knetfile.h this is the header file ------------------------------------------------------------------------ r357 | lh3lh3 | 2009-06-25 08:52:03 -0400 (Thu, 25 Jun 2009) | 3 lines Changed paths: A /trunk/samtools/knetfile.c * open a file at FTP * preliminary version ------------------------------------------------------------------------ r354 | lh3lh3 | 2009-06-24 09:02:25 -0400 (Wed, 24 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bamtk.c * samtools-0.1.4-15 (r354) * fixed a memory leak in bam_view1(), although samtools is not using this routine. ------------------------------------------------------------------------ r351 | lh3lh3 | 2009-06-17 19:16:26 -0400 (Wed, 17 Jun 2009) | 4 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/faidx.c * samtools-0.1.4-13 (r351) * make faidx more tolerant to empty lines right before or after > lines * hope this does not introduce new bugs... ------------------------------------------------------------------------ r350 | lh3lh3 | 2009-06-16 09:37:01 -0400 (Tue, 16 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.4-13 (r350) * fixed a small memory leak in pileup, caused by recent modifications ------------------------------------------------------------------------ r347 | lh3lh3 | 2009-06-13 16:20:49 -0400 (Sat, 13 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam_view.c * samtools-0.1.4-12 (r347) * added `-S' to pileup, similar to `view -S' ------------------------------------------------------------------------ r346 | lh3lh3 | 2009-06-13 12:52:31 -0400 (Sat, 13 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bamtk.c M /trunk/samtools/sam_view.c M /trunk/samtools/samtools.1 * samtools-0.1.4-11 (r346) * allow to select a read group at view command-line ------------------------------------------------------------------------ r344 | lh3lh3 | 2009-06-13 09:06:24 -0400 (Sat, 13 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/examples/calDepth.c added more comments ------------------------------------------------------------------------ r343 | lh3lh3 | 2009-06-13 09:01:22 -0400 (Sat, 13 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/examples/calDepth.c nothing really ------------------------------------------------------------------------ r342 | lh3lh3 | 2009-06-13 08:58:48 -0400 (Sat, 13 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/examples/Makefile A /trunk/samtools/examples/calDepth.c added an example of calculating read depth ------------------------------------------------------------------------ r341 | lh3lh3 | 2009-06-13 08:00:08 -0400 (Sat, 13 Jun 2009) | 6 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c A /trunk/samtools/bam_color.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bam_sort.c M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c M /trunk/samtools/sam.h * samtools-0.1.4-10 (r341) * only include key APIs in libbam.a * move color-specific routines to bam_color.c * update documentations * remove the support of -q in pileup ------------------------------------------------------------------------ r340 | lh3lh3 | 2009-06-13 06:17:14 -0400 (Sat, 13 Jun 2009) | 6 lines Changed paths: M /trunk/samtools/INSTALL M /trunk/samtools/Makefile M /trunk/samtools/bam_aux.c M /trunk/samtools/bam_import.c M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c M /trunk/samtools/razf.c M /trunk/samtools/sam_view.c * samtools-0.1.4-9 (r340) * added a warning to razf.c if zlib<1.2.2.1 * fixed a compilation warning * fixed a segfault caused by @RG parsing * detect NCURSES in bam_tview.c ------------------------------------------------------------------------ r339 | lh3lh3 | 2009-06-13 05:35:19 -0400 (Sat, 13 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/INSTALL update INSTALL ------------------------------------------------------------------------ r338 | lh3lh3 | 2009-06-12 19:15:24 -0400 (Fri, 12 Jun 2009) | 4 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c M /trunk/samtools/kstring.h M /trunk/samtools/sam.c M /trunk/samtools/sam_view.c * samtools-0.1.4-8 (r338) * parse the @RG header lines and allow to choose library at the "samtools view" command line ------------------------------------------------------------------------ r337 | lh3lh3 | 2009-06-12 16:25:50 -0400 (Fri, 12 Jun 2009) | 4 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/bgzf.c M /trunk/samtools/bgzf.h M /trunk/samtools/sam.c M /trunk/samtools/sam_view.c * samtools-0.1.4-7 (r337) * bgzf.c: support mode string "wu": uncompressed output * "samtools view" support "-u" command-line option ------------------------------------------------------------------------ r336 | lh3lh3 | 2009-06-12 12:20:12 -0400 (Fri, 12 Jun 2009) | 5 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/misc/Makefile M /trunk/samtools/razf.c M /trunk/samtools/razf.h M /trunk/samtools/razip.c * no changes to samtools itself * remove zlib source codes * make RAZF reading compatible with old version of zlib * on old version of zlib, writing is not available ------------------------------------------------------------------------ r335 | lh3lh3 | 2009-06-12 11:47:33 -0400 (Fri, 12 Jun 2009) | 2 lines Changed paths: D /trunk/samtools/zlib remove zlib for simplification... ------------------------------------------------------------------------ r334 | lh3lh3 | 2009-06-12 10:43:36 -0400 (Fri, 12 Jun 2009) | 5 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c M /trunk/samtools/bamtk.c * samtools-0.1.4-6 (r334) * do not export bam_aux_get_core() for Bio::DB::Sam because it has already been implemented in that. * this version works with the latest Bio::DB::Sam (20090612) ------------------------------------------------------------------------ r333 | lh3lh3 | 2009-06-12 10:33:42 -0400 (Fri, 12 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/ChangeLog update ChangeLog ------------------------------------------------------------------------ r332 | lh3lh3 | 2009-06-12 10:21:21 -0400 (Fri, 12 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/AUTHORS M /trunk/samtools/Makefile M /trunk/samtools/misc/Makefile fixed minor things in Makefile ------------------------------------------------------------------------ r331 | lh3lh3 | 2009-06-12 10:07:05 -0400 (Fri, 12 Jun 2009) | 4 lines Changed paths: M /trunk/samtools/bamtk.c * samtools-0.1.4-5 (r3310 * no change to samtools itself. Version number is increased to reflect the changes in the Makefile building system. ------------------------------------------------------------------------ r330 | lh3lh3 | 2009-06-12 10:03:38 -0400 (Fri, 12 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/AUTHORS D /trunk/samtools/README update information... ------------------------------------------------------------------------ r329 | lh3lh3 | 2009-06-12 09:52:21 -0400 (Fri, 12 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/misc/novo2sam.pl * updated novoalign converter by Colin Hercus et al. * this version works with indels ------------------------------------------------------------------------ r328 | lh3lh3 | 2009-06-12 09:50:53 -0400 (Fri, 12 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/INSTALL M /trunk/samtools/Makefile M /trunk/samtools/misc/Makefile M /trunk/samtools/zlib/Makefile * update Makefile * update INSTALL instruction ------------------------------------------------------------------------ r327 | lh3lh3 | 2009-06-12 09:18:29 -0400 (Fri, 12 Jun 2009) | 4 lines Changed paths: A /trunk/samtools/Makefile (from /trunk/samtools/Makefile.generic:325) D /trunk/samtools/Makefile.am D /trunk/samtools/Makefile.generic D /trunk/samtools/Makefile.lite D /trunk/samtools/autogen.sh D /trunk/samtools/cleanup.sh D /trunk/samtools/configure.ac A /trunk/samtools/misc/Makefile (from /trunk/samtools/misc/Makefile.generic:305) D /trunk/samtools/misc/Makefile.am D /trunk/samtools/misc/Makefile.generic M /trunk/samtools/razf.c A /trunk/samtools/zlib A /trunk/samtools/zlib/Makefile A /trunk/samtools/zlib/adler32.c A /trunk/samtools/zlib/compress.c A /trunk/samtools/zlib/crc32.c A /trunk/samtools/zlib/crc32.h A /trunk/samtools/zlib/deflate.c A /trunk/samtools/zlib/deflate.h A /trunk/samtools/zlib/gzio.c A /trunk/samtools/zlib/infback.c A /trunk/samtools/zlib/inffast.c A /trunk/samtools/zlib/inffast.h A /trunk/samtools/zlib/inffixed.h A /trunk/samtools/zlib/inflate.c A /trunk/samtools/zlib/inflate.h A /trunk/samtools/zlib/inftrees.c A /trunk/samtools/zlib/inftrees.h A /trunk/samtools/zlib/trees.c A /trunk/samtools/zlib/trees.h A /trunk/samtools/zlib/uncompr.c A /trunk/samtools/zlib/zconf.h A /trunk/samtools/zlib/zlib.h A /trunk/samtools/zlib/zutil.c A /trunk/samtools/zlib/zutil.h D /trunk/samtools/zutil.h * added zlib-1.2.3 as razip requires that * prepare to changed back to the Makefile building system * unfinished! (will be soon) ------------------------------------------------------------------------ r326 | lh3lh3 | 2009-06-12 09:12:03 -0400 (Fri, 12 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/misc/samtools.pl Unfinished ------------------------------------------------------------------------ r325 | lh3lh3 | 2009-06-10 11:27:59 -0400 (Wed, 10 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bamtk.c * samtools-0.1.4-4 (r325) * further avoid wrong consensus calls in repetitive regions. ------------------------------------------------------------------------ r324 | lh3lh3 | 2009-06-10 10:56:17 -0400 (Wed, 10 Jun 2009) | 4 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c M /trunk/samtools/sam.h * samtools-0.1.4-3 (r324) * make maqcns generate the correct call in repetitive regions. * allow filtering on mapQ at the pileup command line ------------------------------------------------------------------------ r323 | lh3lh3 | 2009-06-10 05:04:21 -0400 (Wed, 10 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/misc/samtools.pl * samtools.pl-0.3.2 (r322) * indels and SNPs use different mapping quality threshold ------------------------------------------------------------------------ r322 | lh3lh3 | 2009-06-10 05:03:22 -0400 (Wed, 10 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/misc/export2sam.pl fixed a typo ------------------------------------------------------------------------ r321 | lh3lh3 | 2009-06-09 04:21:48 -0400 (Tue, 09 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/misc/samtools.pl just typo. no real change ------------------------------------------------------------------------ r320 | lh3lh3 | 2009-06-08 09:32:51 -0400 (Mon, 08 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/misc/samtools.pl a little bit code cleanup ------------------------------------------------------------------------ r319 | lh3lh3 | 2009-06-08 09:22:33 -0400 (Mon, 08 Jun 2009) | 4 lines Changed paths: M /trunk/samtools/misc/samtools.pl * samtools.pl-0.3.1 * change default parameters * optionally print filtered variants ------------------------------------------------------------------------ r318 | lh3lh3 | 2009-06-08 09:14:26 -0400 (Mon, 08 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/misc/samtools.pl * samtools.pl-0.3.0 * combine snpFilter and indelFilter ------------------------------------------------------------------------ r317 | lh3lh3 | 2009-06-08 06:31:42 -0400 (Mon, 08 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/misc/samtools.pl * samtools.pl-0.2.3 * change a default parameter ------------------------------------------------------------------------ r316 | lh3lh3 | 2009-06-08 06:11:06 -0400 (Mon, 08 Jun 2009) | 5 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_maqcns.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c * samtools-0.1.4-2 (r316) * pileup: cap mapping quality at 60 (by default) * pileup: always calculate RMS mapq * pileup: allow to output variant sites only ------------------------------------------------------------------------ r312 | lh3lh3 | 2009-06-04 08:01:10 -0400 (Thu, 04 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/misc/samtools.pl * samtools.pl-0.2.2 * added pileup2fq ------------------------------------------------------------------------ r311 | lh3lh3 | 2009-06-03 04:40:40 -0400 (Wed, 03 Jun 2009) | 2 lines Changed paths: M /trunk/samtools/misc/samtools.pl * in snpFilter, suppress non-SNP sites ------------------------------------------------------------------------ r310 | lh3lh3 | 2009-06-01 09:35:13 -0400 (Mon, 01 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/misc/samtools.pl * samtools.pl-0.2.1 * fixed a typo ------------------------------------------------------------------------ r309 | lh3lh3 | 2009-06-01 09:04:39 -0400 (Mon, 01 Jun 2009) | 3 lines Changed paths: M /trunk/samtools/misc/samtools.pl * samtools.pl-0.2.0 * snpFilter ------------------------------------------------------------------------ r306 | lh3lh3 | 2009-05-28 06:49:35 -0400 (Thu, 28 May 2009) | 3 lines Changed paths: M /trunk/samtools/bgzf.c * minor changes to bgzf: return NULL if fd == -1 * suggested by {kdj,jm18}@sanger.ac.uk ------------------------------------------------------------------------ r305 | lh3lh3 | 2009-05-28 06:16:08 -0400 (Thu, 28 May 2009) | 2 lines Changed paths: A /trunk/samtools/misc/interpolate_sam.pl Script for paired-end pileup, contributed by Stephen Montgomery. ------------------------------------------------------------------------ r304 | lh3lh3 | 2009-05-28 06:08:49 -0400 (Thu, 28 May 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c * samtools-0.1.4-1 (r304) * fixed a minor bug in printing headers ------------------------------------------------------------------------ r297 | lh3lh3 | 2009-05-21 11:06:16 -0400 (Thu, 21 May 2009) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/maq2sam.c M /trunk/samtools/samtools.1 Release samtools-0.1.4 ------------------------------------------------------------------------ r296 | lh3lh3 | 2009-05-21 07:53:14 -0400 (Thu, 21 May 2009) | 3 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bamtk.c * samtools-0.1.3-24 (r296) * another similar bug in the indel caller ------------------------------------------------------------------------ r295 | lh3lh3 | 2009-05-21 07:50:28 -0400 (Thu, 21 May 2009) | 3 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bamtk.c * samtools-0.1.3-23 (r295) * fixed a critical bug in the indel caller ------------------------------------------------------------------------ r294 | lh3lh3 | 2009-05-20 08:00:20 -0400 (Wed, 20 May 2009) | 2 lines Changed paths: M /trunk/samtools/bam_stat.c added a missing header file ------------------------------------------------------------------------ r293 | lh3lh3 | 2009-05-19 18:44:25 -0400 (Tue, 19 May 2009) | 3 lines Changed paths: M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c * samtools-0.1.3-22 (r293) * open tview in the dot-view mode by default ------------------------------------------------------------------------ r292 | lh3lh3 | 2009-05-18 16:01:23 -0400 (Mon, 18 May 2009) | 6 lines Changed paths: M /trunk/samtools/samtools.1 Added a note to the manual. Currently SAMtools used unaligned words in several places. Although this does not cause bus errors to me, it may affect portability. Please see the "Bus error" wiki page for more information. Also thank James Bonfields for pointing this out. ------------------------------------------------------------------------ r286 | lh3lh3 | 2009-05-14 10:23:13 -0400 (Thu, 14 May 2009) | 3 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c M /trunk/samtools/bamtk.c * samtools-0.1.3-21 (286) * declare bam_aux_get_core() in bam.h ------------------------------------------------------------------------ r276 | lh3lh3 | 2009-05-13 05:07:55 -0400 (Wed, 13 May 2009) | 5 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c * samtools-0.1.3-20 (r276) * remove bam1_t::hash again. We need to modify the Perl API anyway to make it work with the latest SVN. * As is suggested by Tim, scan "{base}.bai" and "{base}.bam.bai" for index ------------------------------------------------------------------------ r275 | lh3lh3 | 2009-05-12 16:14:10 -0400 (Tue, 12 May 2009) | 4 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam.h M /trunk/samtools/bamtk.c * samtools-0.1.3-19 (r275) * a minor change to the bam1_t struct: added back "void *hash" for the backward compatibility with Bio::DB::Sam ------------------------------------------------------------------------ r273 | lh3lh3 | 2009-05-12 09:28:39 -0400 (Tue, 12 May 2009) | 3 lines Changed paths: M /trunk/samtools/bam_rmdupse.c M /trunk/samtools/bamtk.c * samtools-0.1.3-18 (r273) * rmdupse: do not remove unmapped reads ------------------------------------------------------------------------ r272 | lh3lh3 | 2009-05-12 09:20:00 -0400 (Tue, 12 May 2009) | 2 lines Changed paths: M /trunk/samtools/bam_rmdupse.c change a parameter. It does nothing ------------------------------------------------------------------------ r271 | lh3lh3 | 2009-05-12 09:17:58 -0400 (Tue, 12 May 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile.am M /trunk/samtools/Makefile.generic M /trunk/samtools/Makefile.lite A /trunk/samtools/bam_rmdupse.c M /trunk/samtools/bamtk.c M /trunk/samtools/configure.ac * samtools-0.1.3-17 (r271) * added 'rmdupse' command ------------------------------------------------------------------------ r267 | lh3lh3 | 2009-05-05 17:31:41 -0400 (Tue, 05 May 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/sam_view.c * samtools-0.1.3-16 (r267) * in sam_view.c, changed g_flag_on based on the suggestion by Angie Hinrichs ------------------------------------------------------------------------ r266 | lh3lh3 | 2009-05-05 17:23:27 -0400 (Tue, 05 May 2009) | 3 lines Changed paths: M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c * samtools-0.1.3-15 (r266) * report an error if a non-* reference is present while @SQ is absent ------------------------------------------------------------------------ r265 | lh3lh3 | 2009-05-05 17:09:00 -0400 (Tue, 05 May 2009) | 3 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c M /trunk/samtools/sam_view.c * samtools-0.1.3-14 (r262) * make samopen() recognize @SQ header lines ------------------------------------------------------------------------ r261 | lh3lh3 | 2009-05-05 10:10:30 -0400 (Tue, 05 May 2009) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/bgzf.c M /trunk/samtools/sam.c M /trunk/samtools/sam_view.c * samtools-0.1.3-13 (r260) * report error for file I/O error ------------------------------------------------------------------------ r260 | lh3lh3 | 2009-05-05 10:01:16 -0400 (Tue, 05 May 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile.am update Makefile.am ------------------------------------------------------------------------ r259 | lh3lh3 | 2009-05-05 09:52:25 -0400 (Tue, 05 May 2009) | 3 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_pileup.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/sam.c M /trunk/samtools/sam.h * samtools-0.1.3-12 (r259) * use the new I/O interface in pileup ------------------------------------------------------------------------ r258 | lh3lh3 | 2009-05-05 09:33:22 -0400 (Tue, 05 May 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile.generic M /trunk/samtools/Makefile.lite M /trunk/samtools/bam.c M /trunk/samtools/bam.h M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c A /trunk/samtools/sam.c A /trunk/samtools/sam.h A /trunk/samtools/sam_view.c * samtools-0.1.3-11 (r258) * unify the interface to BAM and SAM I/O ------------------------------------------------------------------------ r257 | lh3lh3 | 2009-05-05 04:53:35 -0400 (Tue, 05 May 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile.lite M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.3-10 (r257) * allow hex with "pileup -m" ------------------------------------------------------------------------ r256 | lh3lh3 | 2009-05-04 14:16:50 -0400 (Mon, 04 May 2009) | 4 lines Changed paths: M /trunk/samtools/bam_lpileup.c M /trunk/samtools/bamtk.c * samtools-0.1.3-9 (r256) * fixed a bug in bam_lpileup.c * I do not know if this also fixes the bug causing assertion failure in the tview ------------------------------------------------------------------------ r251 | lh3lh3 | 2009-04-28 08:53:23 -0400 (Tue, 28 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam_pileup.c M /trunk/samtools/bamtk.c * samtools-0.1.3-8 (r251) * fixed a bug when there are reads without coordinates ------------------------------------------------------------------------ r250 | lh3lh3 | 2009-04-28 08:43:33 -0400 (Tue, 28 Apr 2009) | 2 lines Changed paths: A /trunk/samtools/AUTHORS A /trunk/samtools/README M /trunk/samtools/cleanup.sh added missing files ------------------------------------------------------------------------ r249 | lh3lh3 | 2009-04-28 08:37:16 -0400 (Tue, 28 Apr 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile.generic M /trunk/samtools/Makefile.lite M /trunk/samtools/configure.ac M /trunk/samtools/misc/Makefile.generic improve large file support in compilation ------------------------------------------------------------------------ r248 | lh3lh3 | 2009-04-28 08:33:24 -0400 (Tue, 28 Apr 2009) | 2 lines Changed paths: M /trunk/samtools/INSTALL update INSTALL ------------------------------------------------------------------------ r247 | lh3lh3 | 2009-04-28 08:28:50 -0400 (Tue, 28 Apr 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile.am M /trunk/samtools/autogen.sh M /trunk/samtools/cleanup.sh M /trunk/samtools/configure.ac A /trunk/samtools/misc/Makefile.am fixed various issues about the GNU building scripts ------------------------------------------------------------------------ r246 | lh3lh3 | 2009-04-28 08:10:23 -0400 (Tue, 28 Apr 2009) | 4 lines Changed paths: M /trunk/samtools/ChangeLog D /trunk/samtools/Makefile A /trunk/samtools/Makefile.am A /trunk/samtools/Makefile.generic A /trunk/samtools/autogen.sh M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c A /trunk/samtools/cleanup.sh A /trunk/samtools/configure.ac D /trunk/samtools/misc/Makefile A /trunk/samtools/misc/Makefile.generic (from /trunk/samtools/misc/Makefile:245) * samtools-0.1.3-7 (r246) * incorporated revisions from Nils Homer * enhanced support of displaying color-space reads ------------------------------------------------------------------------ r244 | lh3lh3 | 2009-04-25 06:49:40 -0400 (Sat, 25 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c * samtools-0.1.3-6 (r244) * fixed segfault for unmapped reads ------------------------------------------------------------------------ r243 | lh3lh3 | 2009-04-24 16:27:26 -0400 (Fri, 24 Apr 2009) | 5 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c * samtools-0.1.3-5 (r243) * fixed a long existing bug which may cause memory leak * check MD * consensus calling now works with "=", but indel calling not ------------------------------------------------------------------------ r242 | lh3lh3 | 2009-04-24 15:44:46 -0400 (Fri, 24 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam_md.c M /trunk/samtools/bamtk.c * samtools-0.1.3-4 (r242) * fixed a memory leak ------------------------------------------------------------------------ r240 | lh3lh3 | 2009-04-24 11:40:18 -0400 (Fri, 24 Apr 2009) | 5 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/Makefile.lite M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c A /trunk/samtools/bam_md.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.3-3 (r240) * generate MD tag * generate "=" bases * the plain pileup now support "=" bases, but consensus calling and glfgen may fail ------------------------------------------------------------------------ r239 | lh3lh3 | 2009-04-24 07:08:20 -0400 (Fri, 24 Apr 2009) | 5 lines Changed paths: M /trunk/samtools/bam.h M /trunk/samtools/bam_aux.c M /trunk/samtools/bamtk.c * samtools-0.1.3-2 (r239) * fixed bugs in bam_aux.c (these functions nevered used by samtools) * removed bam_aux_init()/bam_aux_destroy() * added tagview for testing bam_aux ------------------------------------------------------------------------ r235 | lh3lh3 | 2009-04-21 18:17:39 -0400 (Tue, 21 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam_pileup.c M /trunk/samtools/bamtk.c * samtools-0.1.3-1 * fixed a bug in pileup: the first read in a chromosome may not be printed ------------------------------------------------------------------------ r232 | lh3lh3 | 2009-04-16 10:25:43 -0400 (Thu, 16 Apr 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile.lite a missing file in Makefile.lite ------------------------------------------------------------------------ r227 | lh3lh3 | 2009-04-15 17:02:53 -0400 (Wed, 15 Apr 2009) | 2 lines Changed paths: M /trunk/samtools/NEWS M /trunk/samtools/bamtk.c Release samtools-0.1.3 ------------------------------------------------------------------------ r223 | lh3lh3 | 2009-04-15 09:31:32 -0400 (Wed, 15 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.2-28 * make samtools more robust to weird input such as empty file ------------------------------------------------------------------------ r222 | lh3lh3 | 2009-04-15 09:05:33 -0400 (Wed, 15 Apr 2009) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS M /trunk/samtools/samtools.1 prepare for release 0.1.3 ------------------------------------------------------------------------ r221 | lh3lh3 | 2009-04-15 08:32:14 -0400 (Wed, 15 Apr 2009) | 2 lines Changed paths: A /trunk/samtools/misc/blast2sam.pl convert NCBI-BLASTN to SAM ------------------------------------------------------------------------ r220 | lh3lh3 | 2009-04-15 08:18:19 -0400 (Wed, 15 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam_lpileup.c M /trunk/samtools/bamtk.c * samtools-0.1.2-27 * fixed a small memory leak in tview ------------------------------------------------------------------------ r219 | lh3lh3 | 2009-04-15 08:00:08 -0400 (Wed, 15 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam_rmdup.c M /trunk/samtools/bamtk.c * samtools-0.1.2-26 * fixed a bug in rmdup when there are unmapped reads ------------------------------------------------------------------------ r218 | lh3lh3 | 2009-04-14 17:28:58 -0400 (Tue, 14 Apr 2009) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS proposed NEWS for the new release (have not yet) ------------------------------------------------------------------------ r216 | lh3lh3 | 2009-04-14 17:10:46 -0400 (Tue, 14 Apr 2009) | 4 lines Changed paths: M /trunk/samtools/misc/samtools.pl * samtools.pl-0.1.1 * improve indelFilter to avoid filtering true indels. The new filter relies on the new pileup indel line implemented in samtools-0.1.2-25 ------------------------------------------------------------------------ r215 | lh3lh3 | 2009-04-14 17:04:19 -0400 (Tue, 14 Apr 2009) | 4 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 * samtools-0.1.2-25 * change the pileup indel line to shows the number of alignments actually containing indels ------------------------------------------------------------------------ r211 | lh3lh3 | 2009-04-13 07:07:13 -0400 (Mon, 13 Apr 2009) | 2 lines Changed paths: M /trunk/samtools/ChangeLog update ChangeLog from "svn log" ------------------------------------------------------------------------ r210 | lh3lh3 | 2009-04-12 15:57:05 -0400 (Sun, 12 Apr 2009) | 4 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam_import.c M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c M /trunk/samtools/kseq.h * samtools-0.1.2-24 * in merge, gives a warning rather than error if the target sequence length is different * allow empty header ------------------------------------------------------------------------ r209 | lh3lh3 | 2009-04-12 15:32:44 -0400 (Sun, 12 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam.c M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c * samtools-0.1.2-23 * recognize '*' at the QUAL field ------------------------------------------------------------------------ r208 | lh3lh3 | 2009-04-12 15:08:02 -0400 (Sun, 12 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam_import.c M /trunk/samtools/bamtk.c M /trunk/samtools/kseq.h * samtools-0.1.2-22 * the field separater is TAB only, now ------------------------------------------------------------------------ r207 | lh3lh3 | 2009-04-08 10:18:03 -0400 (Wed, 08 Apr 2009) | 2 lines Changed paths: M /trunk/samtools/examples/ex1.sam.gz * fixed the problem in the example alignment due to the bug in fixmate ------------------------------------------------------------------------ r206 | lh3lh3 | 2009-04-08 10:15:05 -0400 (Wed, 08 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam_mate.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/soap2sam.pl * samtools-0.1.2-21 * fixed a nasty bug in `fixmate' ------------------------------------------------------------------------ r205 | lh3lh3 | 2009-04-08 05:57:08 -0400 (Wed, 08 Apr 2009) | 2 lines Changed paths: M /trunk/samtools/misc/bowtie2sam.pl M /trunk/samtools/misc/soap2sam.pl M /trunk/samtools/misc/wgsim_eval.pl make the script robust to the bugs in SOAP-2.1.7 ------------------------------------------------------------------------ r200 | lh3lh3 | 2009-04-02 10:14:56 -0400 (Thu, 02 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bam_stat.c M /trunk/samtools/bamtk.c * samtools-0.1.2-20 * check if file is truncated in flagstat ------------------------------------------------------------------------ r199 | lh3lh3 | 2009-04-02 10:09:10 -0400 (Thu, 02 Apr 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c * samtools-0.1.2-19 * print the header if requested ------------------------------------------------------------------------ r193 | lh3lh3 | 2009-03-27 11:09:50 -0400 (Fri, 27 Mar 2009) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.2-18 * fixed a minor bug reported by Nils Homer ------------------------------------------------------------------------ r185 | lh3lh3 | 2009-03-24 07:50:32 -0400 (Tue, 24 Mar 2009) | 2 lines Changed paths: A /trunk/samtools/Makefile (from /trunk/samtools/Makefile.std:184) D /trunk/samtools/Makefile.std A /trunk/samtools/misc/Makefile (from /trunk/samtools/misc/Makefile.std:184) D /trunk/samtools/misc/Makefile.std rename Makefile.std as Makefile. GNU building systerm is not ready and may take some time... ------------------------------------------------------------------------ r184 | lh3lh3 | 2009-03-24 06:36:38 -0400 (Tue, 24 Mar 2009) | 4 lines Changed paths: D /trunk/samtools/Makefile A /trunk/samtools/Makefile.std (from /trunk/samtools/Makefile:183) M /trunk/samtools/bam_sort.c M /trunk/samtools/bam_tview.c M /trunk/samtools/bamtk.c D /trunk/samtools/misc/Makefile A /trunk/samtools/misc/Makefile.std (from /trunk/samtools/misc/Makefile:182) M /trunk/samtools/samtools.1 * samtools-0.1.2-17 * incorporating Nils' changes * rename Makefile to Makefile.std and prepare to add the GNU building systerms (also by Nils) ------------------------------------------------------------------------ r183 | lh3lh3 | 2009-03-24 06:30:23 -0400 (Tue, 24 Mar 2009) | 4 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam_import.c M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_maqcns.h M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/kseq.h A /trunk/samtools/kstring.c A /trunk/samtools/kstring.h * samtools-0.1.2-16 * made pileup take a list of proposed indels. An insertion is N at the moment. * added my kstring library for a bit complex parsing of the position list. ------------------------------------------------------------------------ r169 | lh3lh3 | 2009-03-12 09:40:14 -0400 (Thu, 12 Mar 2009) | 3 lines Changed paths: M /trunk/samtools/misc/soap2sam.pl * soap2sam.pl-0.1.2 * more robust to truncated soap output ------------------------------------------------------------------------ r168 | lh3lh3 | 2009-03-11 06:49:00 -0400 (Wed, 11 Mar 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile.lite added bam_stat.o to Makefile.lite ------------------------------------------------------------------------ r167 | lh3lh3 | 2009-03-10 18:11:31 -0400 (Tue, 10 Mar 2009) | 3 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bamtk.c * samtools-0.1.2-15 * generate RMS of mapQ instead of max mapQ ------------------------------------------------------------------------ r166 | lh3lh3 | 2009-03-10 18:06:45 -0400 (Tue, 10 Mar 2009) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/glf.c M /trunk/samtools/glf.h M /trunk/samtools/misc/Makefile * samtools-0.1.2-14 * implemented GLFv3 ------------------------------------------------------------------------ r159 | lh3lh3 | 2009-03-03 06:26:08 -0500 (Tue, 03 Mar 2009) | 3 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * samtools-0.1.2-13 * fixed a minor bug in displaying pileup ------------------------------------------------------------------------ r158 | lh3lh3 | 2009-03-03 06:24:16 -0500 (Tue, 03 Mar 2009) | 3 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bamtk.c * samtools-0.1.2-12 * optionally print SAM header ------------------------------------------------------------------------ r153 | lh3lh3 | 2009-03-02 05:45:28 -0500 (Mon, 02 Mar 2009) | 3 lines Changed paths: M /trunk/samtools/bamtk.c M /trunk/samtools/glf.c * samtools-0.1.2-11 * use "GLF\3" as the magic for GLFv3 files ------------------------------------------------------------------------ r152 | lh3lh3 | 2009-03-02 05:39:09 -0500 (Mon, 02 Mar 2009) | 5 lines Changed paths: M /trunk/samtools/Makefile M /trunk/samtools/bam_import.c M /trunk/samtools/bam_index.c M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c M /trunk/samtools/glf.c M /trunk/samtools/glf.h * samtools-0.1.2-10 * fixed a bug in import: core.bin is undefined for unmapped reads * this bug can be alleviated (not completely solved) in bam_index.c * update to GLFv3: pos is changed to offset for better compression ------------------------------------------------------------------------ r151 | lh3lh3 | 2009-03-01 10:18:43 -0500 (Sun, 01 Mar 2009) | 3 lines Changed paths: M /trunk/samtools/misc/wgsim.c * wgsim-0.2.3 * fixed a bug in simulating indels ------------------------------------------------------------------------ r145 | lh3lh3 | 2009-02-26 14:43:57 -0500 (Thu, 26 Feb 2009) | 4 lines Changed paths: M /trunk/samtools/misc/wgsim.c * wgsim-0.2.2 * allow to print mismatch information as fastq comment. MAQ does not like long read names. ------------------------------------------------------------------------ r141 | lh3lh3 | 2009-02-26 09:53:03 -0500 (Thu, 26 Feb 2009) | 6 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/misc/wgsim.c M /trunk/samtools/misc/wgsim_eval.pl * wgsim-0.2.1 * fixed a bug about color read coordinates * fixed a bug in read names * wgsim_eval.pl-0.1.3 * make the script work with color reads ------------------------------------------------------------------------ r140 | lh3lh3 | 2009-02-26 09:02:57 -0500 (Thu, 26 Feb 2009) | 2 lines Changed paths: M /trunk/samtools/misc/Makefile M /trunk/samtools/misc/wgsim.c * wgsim: added a note ------------------------------------------------------------------------ r139 | lh3lh3 | 2009-02-26 06:39:08 -0500 (Thu, 26 Feb 2009) | 7 lines Changed paths: M /trunk/samtools/misc/wgsim.c M /trunk/samtools/misc/wgsim_eval.pl * wgsim-0.2.0 * considerable code clean up * print number of substitutions/indels/errors on each read * potentially support SOLiD simulation, though not tested at the moment * wgsim_eval.pl-0.1.2 * change in accordant with wgsim ------------------------------------------------------------------------ r129 | lh3lh3 | 2009-02-18 17:23:27 -0500 (Wed, 18 Feb 2009) | 3 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c * samtools-0.1.2-9 * fixed a bug in bam_fetch, caused by completely contained adjacent chunks ------------------------------------------------------------------------ r128 | bhandsaker | 2009-02-18 14:06:57 -0500 (Wed, 18 Feb 2009) | 2 lines Changed paths: M /trunk/samtools/bamtk.c Fix annoying segv when invalid region specified. ------------------------------------------------------------------------ r127 | lh3lh3 | 2009-02-17 05:49:55 -0500 (Tue, 17 Feb 2009) | 2 lines Changed paths: D /trunk/samtools/misc/indel_filter.pl A /trunk/samtools/misc/samtools.pl * move indel_filter.pl to samtools.pl ------------------------------------------------------------------------ r126 | lh3lh3 | 2009-02-14 16:22:30 -0500 (Sat, 14 Feb 2009) | 3 lines Changed paths: M /trunk/samtools/bam_mate.c M /trunk/samtools/bamtk.c * samtools-0.1.2-7 * fixed a bug in fixmate: SE reads are flagged as BAM_FMUNMAP ------------------------------------------------------------------------ r125 | lh3lh3 | 2009-02-13 04:54:45 -0500 (Fri, 13 Feb 2009) | 3 lines Changed paths: M /trunk/samtools/bam_stat.c M /trunk/samtools/bamtk.c * samtools-0.1.2-7 * fixed a minor bug in flagstat ------------------------------------------------------------------------ r124 | lh3lh3 | 2009-02-12 06:15:32 -0500 (Thu, 12 Feb 2009) | 3 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bamtk.c M /trunk/samtools/misc/indel_filter.pl * samtools-0.1.2-6 * improve indel caller by setting maximum window size ------------------------------------------------------------------------ r123 | lh3lh3 | 2009-02-12 05:30:29 -0500 (Thu, 12 Feb 2009) | 2 lines Changed paths: M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bamtk.c * output max mapping quality in indel line ------------------------------------------------------------------------ r122 | lh3lh3 | 2009-02-11 05:59:10 -0500 (Wed, 11 Feb 2009) | 2 lines Changed paths: M /trunk/samtools/misc/maq2sam.c fixed a bug in generating tag AM ------------------------------------------------------------------------ r121 | lh3lh3 | 2009-02-03 05:43:11 -0500 (Tue, 03 Feb 2009) | 2 lines Changed paths: M /trunk/samtools/bam_index.c M /trunk/samtools/bamtk.c fixed a potential memory problem in indexing ------------------------------------------------------------------------ r120 | bhandsaker | 2009-02-02 10:52:52 -0500 (Mon, 02 Feb 2009) | 2 lines Changed paths: M /trunk/samtools/Makefile Pass LIBS to recursive targets to facilitate building at Broad. ------------------------------------------------------------------------ r119 | lh3lh3 | 2009-02-02 05:12:15 -0500 (Mon, 02 Feb 2009) | 4 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/bam_plcmd.c M /trunk/samtools/bam_stat.c M /trunk/samtools/bamtk.c * samtools-0.1.2-3 * fixed a bug in generating GLFv2 for indels * improve flagstat report a little bit ------------------------------------------------------------------------ r118 | lh3lh3 | 2009-01-29 07:33:23 -0500 (Thu, 29 Jan 2009) | 3 lines Changed paths: M /trunk/samtools/Makefile A /trunk/samtools/bam_stat.c M /trunk/samtools/bamtk.c * samtools-0.1.2-1 * added flagstat command ------------------------------------------------------------------------ r116 | lh3lh3 | 2009-01-28 08:31:12 -0500 (Wed, 28 Jan 2009) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/NEWS M /trunk/samtools/bamtk.c M /trunk/samtools/samtools.1 Release SAMtools-0.1.2 ------------------------------------------------------------------------ r115 | lh3lh3 | 2009-01-28 07:54:08 -0500 (Wed, 28 Jan 2009) | 2 lines Changed paths: A /trunk/samtools/misc/indel_filter.pl Script for filtering indel results ------------------------------------------------------------------------ r114 | lh3lh3 | 2009-01-25 06:45:37 -0500 (Sun, 25 Jan 2009) | 2 lines Changed paths: A /trunk/samtools/misc/zoom2sam.pl convert ZOOM to SAM ------------------------------------------------------------------------ r113 | lh3lh3 | 2009-01-24 09:25:07 -0500 (Sat, 24 Jan 2009) | 2 lines Changed paths: A /trunk/samtools/misc/novo2sam.pl add a script to convert novo alignment to SAM ------------------------------------------------------------------------ r112 | lh3lh3 | 2009-01-23 15:57:39 -0500 (Fri, 23 Jan 2009) | 2 lines Changed paths: M /trunk/samtools/ChangeLog M /trunk/samtools/ChangeLog.old M /trunk/samtools/samtools.1 update documentation and ChangeLog ------------------------------------------------------------------------ r111 | lh3lh3 | 2009-01-23 14:22:59 -0500 (Fri, 23 Jan 2009) | 3 lines Changed paths: M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c * samtools-0.1.1-19 * fixed a bug in "merge" command line ------------------------------------------------------------------------ r110 | lh3lh3 | 2009-01-22 10:36:48 -0500 (Thu, 22 Jan 2009) | 3 lines Changed paths: M /trunk/samtools/misc/Makefile A /trunk/samtools/misc/bowtie2sam.pl (from /branches/dev/samtools/misc/bowtie2sam.pl:108) M /trunk/samtools/misc/export2sam.pl A /trunk/samtools/misc/soap2sam.pl (from /branches/dev/samtools/misc/soap2sam.pl:108) A /trunk/samtools/misc/wgsim.c (from /branches/dev/samtools/misc/wgsim.c:108) A /trunk/samtools/misc/wgsim_eval.pl (from /branches/dev/samtools/misc/wgsim_eval.pl:108) * merge from branches/dev/ * all future development will happen here ------------------------------------------------------------------------ r109 | lh3lh3 | 2009-01-22 10:14:27 -0500 (Thu, 22 Jan 2009) | 3 lines Changed paths: M /trunk/samtools/COPYING M /trunk/samtools/ChangeLog A /trunk/samtools/INSTALL (from /branches/dev/samtools/INSTALL:108) M /trunk/samtools/Makefile A /trunk/samtools/Makefile.lite (from /branches/dev/samtools/Makefile.lite:108) M /trunk/samtools/bam.c M /trunk/samtools/bam.h M /trunk/samtools/bam_import.c M /trunk/samtools/bam_index.c M /trunk/samtools/bam_lpileup.c M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_maqcns.h A /trunk/samtools/bam_mate.c (from /branches/dev/samtools/bam_mate.c:108) M /trunk/samtools/bam_pileup.c M /trunk/samtools/bam_plcmd.c A /trunk/samtools/bam_rmdup.c (from /branches/dev/samtools/bam_rmdup.c:108) M /trunk/samtools/bam_sort.c M /trunk/samtools/bamtk.c M /trunk/samtools/bgzf.h M /trunk/samtools/examples/00README.txt A /trunk/samtools/examples/Makefile (from /branches/dev/samtools/examples/Makefile:108) D /trunk/samtools/examples/ex1.fa.fai M /trunk/samtools/examples/ex1.sam.gz M /trunk/samtools/faidx.c A /trunk/samtools/glf.c (from /branches/dev/samtools/glf.c:108) M /trunk/samtools/glf.h M /trunk/samtools/misc/Makefile M /trunk/samtools/misc/maq2sam.c M /trunk/samtools/razf.c M /trunk/samtools/source.dot * Merge from branches/dev/ * all future development will happen here at trunk/ ------------------------------------------------------------------------ r79 | bhandsaker | 2009-01-07 16:42:15 -0500 (Wed, 07 Jan 2009) | 2 lines Changed paths: M /trunk/samtools/bam_maqcns.c M /trunk/samtools/bam_tview.c Fix problem with compiling without curses. ------------------------------------------------------------------------ r63 | lh3lh3 | 2008-12-22 10:58:02 -0500 (Mon, 22 Dec 2008) | 2 lines Changed paths: A /trunk/samtools (from /branches/dev/samtools:62) Create trunk copy ------------------------------------------------------------------------ r62 | lh3lh3 | 2008-12-22 10:55:13 -0500 (Mon, 22 Dec 2008) | 2 lines Changed paths: A /branches/dev/samtools/NEWS M /branches/dev/samtools/bamtk.c M /branches/dev/samtools/samtools.1 Release samtools-0.1.1 ------------------------------------------------------------------------ r61 | lh3lh3 | 2008-12-22 10:46:08 -0500 (Mon, 22 Dec 2008) | 10 lines Changed paths: M /branches/dev/samtools/bam_aux.c M /branches/dev/samtools/bam_index.c M /branches/dev/samtools/bam_plcmd.c M /branches/dev/samtools/bam_tview.c M /branches/dev/samtools/bamtk.c M /branches/dev/samtools/razf.c M /branches/dev/samtools/samtools.1 * samtools-0.1.0-66 * fixed a bug in razf.c: reset z_eof when razf_seek() is called * fixed a memory leak in parsing a region * changed pileup a little bit when -s is in use: output ^ and $ * when a bam is not indexed, output more meaningful error message * fixed a bug in indexing for small alignment * fixed a bug in the viewer when we come to the end of a reference file * updated documentation * prepare to release 0.1.1 ------------------------------------------------------------------------ r60 | lh3lh3 | 2008-12-22 10:10:16 -0500 (Mon, 22 Dec 2008) | 2 lines Changed paths: A /branches/dev/samtools/examples A /branches/dev/samtools/examples/00README.txt A /branches/dev/samtools/examples/ex1.fa A /branches/dev/samtools/examples/ex1.fa.fai A /branches/dev/samtools/examples/ex1.sam.gz example ------------------------------------------------------------------------ r59 | lh3lh3 | 2008-12-22 04:38:15 -0500 (Mon, 22 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/ChangeLog update ChangeLog ------------------------------------------------------------------------ r58 | lh3lh3 | 2008-12-20 18:06:00 -0500 (Sat, 20 Dec 2008) | 3 lines Changed paths: M /branches/dev/samtools/misc/export2sam.pl * added comments * fixed several bugs ------------------------------------------------------------------------ r57 | lh3lh3 | 2008-12-20 10:44:20 -0500 (Sat, 20 Dec 2008) | 2 lines Changed paths: A /branches/dev/samtools/misc/export2sam.pl convert Export format to SAM; not thoroughly tested ------------------------------------------------------------------------ r56 | lh3lh3 | 2008-12-19 17:13:28 -0500 (Fri, 19 Dec 2008) | 6 lines Changed paths: M /branches/dev/samtools/bam_import.c M /branches/dev/samtools/bam_plcmd.c M /branches/dev/samtools/bam_tview.c M /branches/dev/samtools/bamtk.c A /branches/dev/samtools/source.dot * samtools-0.1.0-65 * pileup: generate maq-like simple output * pileup: allow to output pileup at required sites * source.dot: source file relationship graph * tview: fixed a minor bug ------------------------------------------------------------------------ r55 | lh3lh3 | 2008-12-19 15:10:26 -0500 (Fri, 19 Dec 2008) | 2 lines Changed paths: D /branches/dev/samtools/misc/all2sam.pl remove all2sam.pl ------------------------------------------------------------------------ r54 | lh3lh3 | 2008-12-16 17:34:25 -0500 (Tue, 16 Dec 2008) | 2 lines Changed paths: A /branches/dev/samtools/COPYING M /branches/dev/samtools/bam.h M /branches/dev/samtools/faidx.h M /branches/dev/samtools/khash.h M /branches/dev/samtools/kseq.h M /branches/dev/samtools/ksort.h M /branches/dev/samtools/samtools.1 Added copyright information and a bit more documentation. No code change. ------------------------------------------------------------------------ r53 | lh3lh3 | 2008-12-16 08:40:18 -0500 (Tue, 16 Dec 2008) | 3 lines Changed paths: M /branches/dev/samtools/bam.c M /branches/dev/samtools/bam.h M /branches/dev/samtools/bam_index.c M /branches/dev/samtools/bam_maqcns.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-64 * improved efficiency of the indel caller for spliced alignments ------------------------------------------------------------------------ r52 | lh3lh3 | 2008-12-16 05:28:20 -0500 (Tue, 16 Dec 2008) | 3 lines Changed paths: M /branches/dev/samtools/bam.c M /branches/dev/samtools/bam.h M /branches/dev/samtools/bam_aux.c M /branches/dev/samtools/bam_index.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-63 * a bit code cleanup: reduce the dependency between source files ------------------------------------------------------------------------ r51 | lh3lh3 | 2008-12-15 09:29:32 -0500 (Mon, 15 Dec 2008) | 3 lines Changed paths: M /branches/dev/samtools/bam_maqcns.c M /branches/dev/samtools/bam_plcmd.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-62 * fixed a memory leak ------------------------------------------------------------------------ r50 | lh3lh3 | 2008-12-15 09:00:13 -0500 (Mon, 15 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/ChangeLog M /branches/dev/samtools/bam.h M /branches/dev/samtools/samtools.1 update documentation, ChangeLog and a comment ------------------------------------------------------------------------ r49 | lh3lh3 | 2008-12-15 08:36:43 -0500 (Mon, 15 Dec 2008) | 6 lines Changed paths: M /branches/dev/samtools/Makefile M /branches/dev/samtools/bam.h M /branches/dev/samtools/bam_maqcns.c M /branches/dev/samtools/bam_maqcns.h M /branches/dev/samtools/bam_pileup.c A /branches/dev/samtools/bam_plcmd.c M /branches/dev/samtools/bamtk.c M /branches/dev/samtools/samtools.1 * samtools-0.1.0-61 * moved pileup command to a separate source file * added indel caller * added bam_cal_segend(). (NOT WORKING for spliced alignment!!!) * updated documentation ------------------------------------------------------------------------ r48 | lh3lh3 | 2008-12-12 08:55:36 -0500 (Fri, 12 Dec 2008) | 3 lines Changed paths: M /branches/dev/samtools/bam_maqcns.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-60 * fixed another bug in maqcns when there is a nearby deletion ------------------------------------------------------------------------ r47 | lh3lh3 | 2008-12-12 08:42:16 -0500 (Fri, 12 Dec 2008) | 5 lines Changed paths: M /branches/dev/samtools/bam_maqcns.c M /branches/dev/samtools/bam_pileup.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-59 * pileup: outputing consensus is now optional * fixed a bug in glfgen. This bug also exists in maq's glfgen. However, I am not quite sure why the previous version may have problem. ------------------------------------------------------------------------ r46 | lh3lh3 | 2008-12-12 06:44:56 -0500 (Fri, 12 Dec 2008) | 6 lines Changed paths: M /branches/dev/samtools/bam_pileup.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-58 * add maq consensus to pileup. However, I will move this part to a new command as strictly speaking, consensus callin is not part of pileup, and imposing it would make it harder to generate for other language bindings. ------------------------------------------------------------------------ r45 | bhandsaker | 2008-12-11 15:43:56 -0500 (Thu, 11 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/bgzf.c Fix bug in tell() after reads that consume to the exact end of a block. ------------------------------------------------------------------------ r44 | lh3lh3 | 2008-12-11 04:36:53 -0500 (Thu, 11 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/samtools.1 update manual ------------------------------------------------------------------------ r43 | lh3lh3 | 2008-12-11 04:25:36 -0500 (Thu, 11 Dec 2008) | 4 lines Changed paths: M /branches/dev/samtools/bam_import.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-57 * fixed a bug in parser when there is auxiliary fields * made the parser a bit more robust ------------------------------------------------------------------------ r42 | lh3lh3 | 2008-12-10 09:57:29 -0500 (Wed, 10 Dec 2008) | 5 lines Changed paths: M /branches/dev/samtools/bam_index.c M /branches/dev/samtools/bamtk.c M /branches/dev/samtools/bgzf.c * samtools-0.1.0-56 * fixed a bug in bgzf (only reading is affected) * fixed a typo in bam_index.c * in bam_index.c, check potential bugs in the underlying I/O library ------------------------------------------------------------------------ r41 | lh3lh3 | 2008-12-10 07:53:08 -0500 (Wed, 10 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/samtools.1 update manual ------------------------------------------------------------------------ r40 | lh3lh3 | 2008-12-10 06:52:10 -0500 (Wed, 10 Dec 2008) | 5 lines Changed paths: M /branches/dev/samtools/bam.h M /branches/dev/samtools/bam_pileup.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-55 * tried to make pileup work with clipping (previously not), though NOT tested * removed -v from pileup * made pileup take the reference sequence ------------------------------------------------------------------------ r39 | lh3lh3 | 2008-12-09 06:59:28 -0500 (Tue, 09 Dec 2008) | 4 lines Changed paths: M /branches/dev/samtools/bam_import.c M /branches/dev/samtools/bamtk.c M /branches/dev/samtools/samtools.1 * samtools-0.1.0-54 * in parser, recognize "=", rather than ",", as a match * in parser, correctl parse "=" at the MRNM field. ------------------------------------------------------------------------ r38 | lh3lh3 | 2008-12-09 06:39:07 -0500 (Tue, 09 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/misc/maq2sam.c fixed a bug in handling maq flag 64 and 192 ------------------------------------------------------------------------ r37 | lh3lh3 | 2008-12-09 04:53:46 -0500 (Tue, 09 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/misc/md5fa.c also calculate unordered md5sum check ------------------------------------------------------------------------ r36 | lh3lh3 | 2008-12-09 04:46:21 -0500 (Tue, 09 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/misc/md5fa.c fixed a minor bug when there are space in the sequence ------------------------------------------------------------------------ r35 | lh3lh3 | 2008-12-09 04:40:45 -0500 (Tue, 09 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/misc/md5fa.c fixed a potential memory leak ------------------------------------------------------------------------ r34 | lh3lh3 | 2008-12-08 09:52:17 -0500 (Mon, 08 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/bam_import.c M /branches/dev/samtools/bam_index.c M /branches/dev/samtools/bamtk.c * fixed a bug in import: bin is wrongly calculated ------------------------------------------------------------------------ r33 | lh3lh3 | 2008-12-08 09:08:01 -0500 (Mon, 08 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/misc/all2sam.pl nothing, really ------------------------------------------------------------------------ r32 | lh3lh3 | 2008-12-08 07:56:02 -0500 (Mon, 08 Dec 2008) | 3 lines Changed paths: M /branches/dev/samtools/Makefile M /branches/dev/samtools/kseq.h M /branches/dev/samtools/misc/Makefile A /branches/dev/samtools/misc/md5.c A /branches/dev/samtools/misc/md5.h A /branches/dev/samtools/misc/md5fa.c * fixed two warnings in kseq.h * added md5sum utilities ------------------------------------------------------------------------ r31 | lh3lh3 | 2008-12-08 06:35:29 -0500 (Mon, 08 Dec 2008) | 5 lines Changed paths: M /branches/dev/samtools/Makefile M /branches/dev/samtools/bam_import.c M /branches/dev/samtools/bamtk.c A /branches/dev/samtools/kseq.h D /branches/dev/samtools/kstream.h * samtools-0.1.0-52 * replace kstream with kseq. kseq is a superset of kstream. I need the extra functions in kseq.h. * also compile stand-alone faidx ------------------------------------------------------------------------ r30 | lh3lh3 | 2008-12-08 06:17:04 -0500 (Mon, 08 Dec 2008) | 3 lines Changed paths: M /branches/dev/samtools/bam.h M /branches/dev/samtools/bam_sort.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-51 * sorting by read names is available ------------------------------------------------------------------------ r29 | lh3lh3 | 2008-12-08 05:29:02 -0500 (Mon, 08 Dec 2008) | 3 lines Changed paths: M /branches/dev/samtools/bam.c M /branches/dev/samtools/bam.h M /branches/dev/samtools/bam_import.c M /branches/dev/samtools/bam_maqcns.c M /branches/dev/samtools/bam_pileup.c M /branches/dev/samtools/bam_sort.c M /branches/dev/samtools/bam_tview.c M /branches/dev/samtools/bamtk.c M /branches/dev/samtools/misc/maq2sam.c * samtools-0.1.0-50 * format change to meet the latest specification ------------------------------------------------------------------------ r28 | lh3lh3 | 2008-12-04 11:09:21 -0500 (Thu, 04 Dec 2008) | 3 lines Changed paths: M /branches/dev/samtools/bam_maqcns.c M /branches/dev/samtools/misc/maq2sam.c * minor change in maqcns: special care when n==0 * change maq2sam to meet the latest specification ------------------------------------------------------------------------ r27 | lh3lh3 | 2008-12-04 10:55:44 -0500 (Thu, 04 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/razf.c M /branches/dev/samtools/razf.h considerable code clean up in razf ------------------------------------------------------------------------ r26 | lh3lh3 | 2008-12-04 10:08:18 -0500 (Thu, 04 Dec 2008) | 2 lines Changed paths: M /branches/dev/samtools/ChangeLog M /branches/dev/samtools/Makefile M /branches/dev/samtools/faidx.c make RAZF optional in faidx.c ------------------------------------------------------------------------ r25 | lh3lh3 | 2008-12-01 10:27:22 -0500 (Mon, 01 Dec 2008) | 3 lines Changed paths: M /branches/dev/samtools/Makefile M /branches/dev/samtools/bam.h M /branches/dev/samtools/bam_aux.c M /branches/dev/samtools/bamtk.c M /branches/dev/samtools/samtools.1 * samtools-0.1.0-49 * added routines for retrieving aux data, NOT TESTED YET! ------------------------------------------------------------------------ r24 | lh3lh3 | 2008-12-01 09:29:43 -0500 (Mon, 01 Dec 2008) | 5 lines Changed paths: M /branches/dev/samtools/bam.c M /branches/dev/samtools/bam_import.c M /branches/dev/samtools/bam_maqcns.c M /branches/dev/samtools/bamtk.c M /branches/dev/samtools/bgzf.c M /branches/dev/samtools/samtools.1 * samtools-0.1.0-48 * bgzf: fixed a potential integer overflow on 32-it machines * maqcns: set the minimum combined quality as 0 * supporting hex strings ------------------------------------------------------------------------ r23 | lh3lh3 | 2008-11-27 12:14:37 -0500 (Thu, 27 Nov 2008) | 3 lines Changed paths: M /branches/dev/samtools/bam_maqcns.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-47 * fixed the bug in maqcns ------------------------------------------------------------------------ r22 | lh3lh3 | 2008-11-27 12:08:11 -0500 (Thu, 27 Nov 2008) | 3 lines Changed paths: M /branches/dev/samtools/Makefile M /branches/dev/samtools/bam.h A /branches/dev/samtools/bam_maqcns.c A /branches/dev/samtools/bam_maqcns.h M /branches/dev/samtools/bam_tview.c M /branches/dev/samtools/bamtk.c A /branches/dev/samtools/glf.h * samtools-0.1.0-46 * add MAQ consensus caller, currently BUGGY! ------------------------------------------------------------------------ r21 | lh3lh3 | 2008-11-27 08:51:28 -0500 (Thu, 27 Nov 2008) | 4 lines Changed paths: M /branches/dev/samtools/bam_pileup.c M /branches/dev/samtools/bam_tview.c M /branches/dev/samtools/bamtk.c * samtools-0.1.0-45 * tview: display padded alignment (but not P operation) * better coordinates and reference sequence ------------------------------------------------------------------------ r19 | lh3lh3 | 2008-11-27 04:26:05 -0500 (Thu, 27 Nov 2008) | 2 lines Changed paths: A /branches/dev/samtools/ChangeLog new ChangeLog ------------------------------------------------------------------------ r18 | lh3lh3 | 2008-11-27 04:24:45 -0500 (Thu, 27 Nov 2008) | 3 lines Changed paths: D /branches/dev/samtools/ChangeLog A /branches/dev/samtools/ChangeLog.old (from /branches/dev/samtools/ChangeLog:6) Rename ChangeLog to ChangeLog.old. This old ChangeLog is generated from the log of my personal SVN repository. ------------------------------------------------------------------------ r17 | lh3lh3 | 2008-11-27 04:22:55 -0500 (Thu, 27 Nov 2008) | 6 lines Changed paths: M /branches/dev/samtools/Makefile M /branches/dev/samtools/bamtk.c M /branches/dev/samtools/bgzf.c * samtools-0.1.0-44 * declare fseeko and ftello as some Linux may not do this by default and missing these declarations will make bgzf buggy * get rid of some harmless warings * use BGZF by default, now ------------------------------------------------------------------------ r16 | lh3lh3 | 2008-11-26 16:19:11 -0500 (Wed, 26 Nov 2008) | 4 lines Changed paths: M /branches/dev/samtools/bam_index.c M /branches/dev/samtools/bamtk.c M /branches/dev/samtools/razf.c * samtools-0.1.0-43 * fixed a bug in razf_read() * give more warnings when the file is truncated (or due to bugs in I/O library) ------------------------------------------------------------------------ r15 | lh3lh3 | 2008-11-26 15:41:39 -0500 (Wed, 26 Nov 2008) | 2 lines Changed paths: M /branches/dev/samtools/bgzf.c fixed a bug in bgzf.c at the end of the file ------------------------------------------------------------------------ r14 | lh3lh3 | 2008-11-26 12:05:18 -0500 (Wed, 26 Nov 2008) | 4 lines Changed paths: M /branches/dev/samtools/bamtk.c * samtools-0.1.0-42 * a lot happened to RAZF, although samtools itself is untouched. Better also update the version number anyway to avoid confusion ------------------------------------------------------------------------ r13 | lh3lh3 | 2008-11-26 12:03:48 -0500 (Wed, 26 Nov 2008) | 2 lines Changed paths: M /branches/dev/samtools/razf.c a change from Jue, but I think it should not matter ------------------------------------------------------------------------ r12 | lh3lh3 | 2008-11-26 11:48:14 -0500 (Wed, 26 Nov 2008) | 3 lines Changed paths: M /branches/dev/samtools/razf.c fixed a potential bug in razf. However, it seems still buggy, just rarely happens, very rarely. ------------------------------------------------------------------------ r11 | lh3lh3 | 2008-11-26 09:02:56 -0500 (Wed, 26 Nov 2008) | 2 lines Changed paths: M /branches/dev/samtools/razf.c fixed a bug in razf, with the help of Jue ------------------------------------------------------------------------ r10 | lh3lh3 | 2008-11-26 06:55:32 -0500 (Wed, 26 Nov 2008) | 2 lines Changed paths: M /branches/dev/samtools/bam_index.c remove a comment ------------------------------------------------------------------------ r9 | lh3lh3 | 2008-11-26 06:37:05 -0500 (Wed, 26 Nov 2008) | 2 lines Changed paths: M /branches/dev/samtools/Makefile M /branches/dev/samtools/bam.h M /branches/dev/samtools/razf.c M /branches/dev/samtools/razf.h * Jue has updated razf to realize Bob's scheme ------------------------------------------------------------------------ r7 | lh3lh3 | 2008-11-25 15:37:37 -0500 (Tue, 25 Nov 2008) | 2 lines Changed paths: A /branches/dev/samtools/samtools.1 the manual page ------------------------------------------------------------------------ r6 | lh3lh3 | 2008-11-25 15:37:16 -0500 (Tue, 25 Nov 2008) | 3 lines Changed paths: A /branches/dev/samtools/ChangeLog A /branches/dev/samtools/Makefile A /branches/dev/samtools/bam.c A /branches/dev/samtools/bam.h A /branches/dev/samtools/bam_aux.c A /branches/dev/samtools/bam_endian.h A /branches/dev/samtools/bam_import.c A /branches/dev/samtools/bam_index.c A /branches/dev/samtools/bam_lpileup.c A /branches/dev/samtools/bam_pileup.c A /branches/dev/samtools/bam_sort.c A /branches/dev/samtools/bam_tview.c A /branches/dev/samtools/bamtk.c A /branches/dev/samtools/bgzf.c A /branches/dev/samtools/bgzf.h A /branches/dev/samtools/bgzip.c A /branches/dev/samtools/faidx.c A /branches/dev/samtools/faidx.h A /branches/dev/samtools/khash.h A /branches/dev/samtools/ksort.h A /branches/dev/samtools/kstream.h A /branches/dev/samtools/misc A /branches/dev/samtools/misc/Makefile A /branches/dev/samtools/misc/all2sam.pl A /branches/dev/samtools/misc/maq2sam.c A /branches/dev/samtools/razf.c A /branches/dev/samtools/razf.h A /branches/dev/samtools/razip.c A /branches/dev/samtools/zutil.h The initial version of samtools, replicated from my local SVN repository. The current version is: 0.1.0-42. All future development will happen here. ------------------------------------------------------------------------ r5 | lh3lh3 | 2008-11-25 15:30:49 -0500 (Tue, 25 Nov 2008) | 2 lines Changed paths: A /branches/dev/samtools samtools (C version) ------------------------------------------------------------------------ genometools-1.5.1/src/external/samtools-0.1.18/INSTALL000066400000000000000000000022601211610345200220720ustar00rootroot00000000000000System Requirements =================== SAMtools depends on the zlib library . Version 1.2.3+ is preferred and with 1.2.3+ you can compile razip and use it to compress a FASTA file. SAMtools' faidx is able to index a razip-compressed FASTA file to save diskspace. Older zlib also works with SAMtools, but razip cannot be compiled. The text-based viewer (tview) requires the GNU ncurses library , which comes with Mac OS X and most of the modern Linux/Unix distributions. If you do not have this library installed, you can still compile the rest of SAMtools by manually changing: `-D_CURSES_LIB=1' to `-D_CURSES_LIB=0' at the line starting with `DFLAGS=', and comment out the line starting with `LIBCURSES='. Compilation =========== Type `make' to compile samtools. If you have zlib >= 1.2.2.1, you can compile razip with `make razip'. Installation ============ Copy `samtools', `bcftools/bcftools' and other executables/scripts in `misc' to a location you want (e.g. a directory in your $PATH). You may also copy `samtools.1' and `bcftools/bcftools.1' to a directory in your $MANPATH such that the `man' command may find the manual. genometools-1.5.1/src/external/samtools-0.1.18/Makefile000066400000000000000000000052701211610345200225050ustar00rootroot00000000000000CC= gcc CFLAGS= -g -Wall -O2 -fPIC #-m64 #-arch ppc DFLAGS= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_USE_KNETFILE -D_CURSES_LIB=1 KNETFILE_O= knetfile.o LOBJS= bgzf.o kstring.o bam_aux.o bam.o bam_import.o sam.o bam_index.o \ bam_pileup.o bam_lpileup.o bam_md.o razf.o faidx.o bedidx.o \ $(KNETFILE_O) bam_sort.o sam_header.o bam_reheader.o kprobaln.o bam_cat.o AOBJS= bam_tview.o bam_plcmd.o sam_view.o \ bam_rmdup.o bam_rmdupse.o bam_mate.o bam_stat.o bam_color.o \ bamtk.o kaln.o bam2bcf.o bam2bcf_indel.o errmod.o sample.o \ cut_target.o phase.o bam2depth.o PROG= samtools INCLUDES= -I. SUBDIRS= . bcftools misc LIBPATH= LIBCURSES= -lncurses # -lXCurses .SUFFIXES:.c .o .c.o: $(CC) -c $(CFLAGS) $(DFLAGS) $(INCLUDES) $< -o $@ all-recur lib-recur clean-recur cleanlocal-recur install-recur: @target=`echo $@ | sed s/-recur//`; \ wdir=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ cd $$subdir; \ $(MAKE) CC="$(CC)" DFLAGS="$(DFLAGS)" CFLAGS="$(CFLAGS)" \ INCLUDES="$(INCLUDES)" LIBPATH="$(LIBPATH)" $$target || exit 1; \ cd $$wdir; \ done; all:$(PROG) .PHONY:all lib clean cleanlocal .PHONY:all-recur lib-recur clean-recur cleanlocal-recur install-recur lib:libbam.a libbam.a:$(LOBJS) $(AR) -csru $@ $(LOBJS) samtools:lib-recur $(AOBJS) $(CC) $(CFLAGS) -o $@ $(AOBJS) -Lbcftools $(LIBPATH) libbam.a -lbcf $(LIBCURSES) -lm -lz razip:razip.o razf.o $(KNETFILE_O) $(CC) $(CFLAGS) -o $@ razf.o razip.o $(KNETFILE_O) -lz bgzip:bgzip.o bgzf.o $(KNETFILE_O) $(CC) $(CFLAGS) -o $@ bgzf.o bgzip.o $(KNETFILE_O) -lz razip.o:razf.h bam.o:bam.h razf.h bam_endian.h kstring.h sam_header.h sam.o:sam.h bam.h bam_import.o:bam.h kseq.h khash.h razf.h bam_pileup.o:bam.h razf.h ksort.h bam_plcmd.o:bam.h faidx.h bcftools/bcf.h bam2bcf.h bam_index.o:bam.h khash.h ksort.h razf.h bam_endian.h bam_lpileup.o:bam.h ksort.h bam_tview.o:bam.h faidx.h bam_sort.o:bam.h ksort.h razf.h bam_md.o:bam.h faidx.h sam_header.o:sam_header.h khash.h bcf.o:bcftools/bcf.h bam2bcf.o:bam2bcf.h errmod.h bcftools/bcf.h bam2bcf_indel.o:bam2bcf.h errmod.o:errmod.h phase.o:bam.h khash.h ksort.h bamtk.o:bam.h faidx.o:faidx.h razf.h khash.h faidx_main.o:faidx.h razf.h libbam.1.dylib-local:$(LOBJS) libtool -dynamic $(LOBJS) -o libbam.1.dylib -lc -lz libbam.so.1-local:$(LOBJS) $(CC) -shared -Wl,-soname,libbam.so -o libbam.so.1 $(LOBJS) -lc -lz dylib: @$(MAKE) cleanlocal; \ case `uname` in \ Linux) $(MAKE) CFLAGS="$(CFLAGS) -fPIC" libbam.so.1-local;; \ Darwin) $(MAKE) CFLAGS="$(CFLAGS) -fPIC" libbam.1.dylib-local;; \ *) echo 'Unknown OS';; \ esac cleanlocal: rm -fr gmon.out *.o a.out *.exe *.dSYM razip bgzip $(PROG) *~ *.a *.so.* *.so *.dylib clean:cleanlocal-recur genometools-1.5.1/src/external/samtools-0.1.18/Makefile.mingw000066400000000000000000000040541211610345200236240ustar00rootroot00000000000000CC= gcc.exe AR= ar.exe CFLAGS= -g -Wall -O2 DFLAGS= -D_USE_KNETFILE -D_CURSES_LIB=2 KNETFILE_O= knetfile.o LOBJS= bgzf.o kstring.o bam_aux.o bam.o bam_import.o sam.o bam_index.o \ bam_pileup.o bam_lpileup.o bam_md.o razf.o faidx.o \ $(KNETFILE_O) bam_sort.o sam_header.o bam_reheader.o kprobaln.o bedidx.o AOBJS= bam_tview.o bam_plcmd.o sam_view.o \ bam_rmdup.o bam_rmdupse.o bam_mate.o bam_stat.o bam_color.o \ bamtk.o kaln.o bam2bcf.o bam2bcf_indel.o errmod.o sample.o \ cut_target.o phase.o bam_cat.o bam2depth.o BCFOBJS= bcftools/bcf.o bcftools/fet.o bcftools/bcf2qcall.o bcftools/bcfutils.o \ bcftools/call1.o bcftools/index.o bcftools/kfunc.o bcftools/em.o \ bcftools/kmin.o bcftools/prob1.o bcftools/vcf.o bcftools/mut.o PROG= samtools.exe bcftools.exe INCLUDES= -I. -Iwin32 SUBDIRS= . LIBPATH= .SUFFIXES:.c .o .c.o: $(CC) -c $(CFLAGS) $(DFLAGS) $(INCLUDES) $< -o $@ all:$(PROG) .PHONY:all lib clean cleanlocal .PHONY:all-recur lib-recur clean-recur cleanlocal-recur install-recur lib:libbam.a libbam.a:$(LOBJS) $(AR) -cru $@ $(LOBJS) samtools.exe:$(AOBJS) libbam.a $(BCFOBJS) $(CC) $(CFLAGS) -o $@ $(AOBJS) $(BCFOBJS) $(LIBPATH) -lm -L. -lbam -Lwin32 -lz -lcurses -lws2_32 bcftools.exe:$(BCFOBJS) bcftools/main.o kstring.o bgzf.o knetfile.o bedidx.o $(CC) $(CFLAGS) -o $@ $(BCFOBJS) bcftools/main.o kstring.o bgzf.o knetfile.o bedidx.o -lm -Lwin32 -lz -lws2_32 razip.o:razf.h bam.o:bam.h razf.h bam_endian.h kstring.h sam_header.h sam.o:sam.h bam.h bam_import.o:bam.h kseq.h khash.h razf.h bam_pileup.o:bam.h razf.h ksort.h bam_plcmd.o:bam.h faidx.h bcftools/bcf.h bam2bcf.h bam_index.o:bam.h khash.h ksort.h razf.h bam_endian.h bam_lpileup.o:bam.h ksort.h bam_tview.o:bam.h faidx.h bam_sort.o:bam.h ksort.h razf.h bam_md.o:bam.h faidx.h sam_header.o:sam_header.h khash.h bcf.o:bcftools/bcf.h bam2bcf.o:bam2bcf.h errmod.h bcftools/bcf.h bam2bcf_indel.o:bam2bcf.h errmod.o:errmod.h faidx.o:faidx.h razf.h khash.h faidx_main.o:faidx.h razf.h clean: rm -fr gmon.out *.o a.out *.exe *.dSYM razip bgzip $(PROG) *~ *.a *.so.* *.so *.dylib genometools-1.5.1/src/external/samtools-0.1.18/NEWS000066400000000000000000000654251211610345200215540ustar00rootroot00000000000000Beta Release 0.1.18 (2 September, 2011) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Notable changes in samtools: * Support the new =/X CIGAR operators (by Peter Cock). * Allow to subsample BAM while keeping the pairing intact (view -s). * Implemented variant distance bias as a new filter (by Petr Danecek). * Bugfix: huge memory usage during indexing * Bugfix: use of uninitialized variable in mpileup (rare) * Bugfix: wrong BAQ probability (rare) Notable changes in bcftools: * Support indel in the contrast caller. * Bugfix: LRT2=nan in rare cases (0.1.18: 2 September 2011, r982:295) Beta Release 0.1.17 (6 July, 2011) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ With the maturity of `mpileup' and the lack of update in the `pileup' command, the `pileup' command is now formally dropped. Most of the pileup functionality, such as outputting mapping quality and read positions, have been added `mpileup'. Since this release, `bcftools view' is able to perform contrast SNP calling (option -T) for discovering de novo and/or somatic mutations between a pair of samples or in a family trio. Potential mutations are scored by a log likelihood ratio, which is very simple in math, but should be comparable to more sophisticated methods. Note that getting the score is only the very first step. A lot more need to be done to reduce systematical errors due to mapping and reference errors and structural variations. Other notable changes in samtools: * Improved sorting order checking during indexing. * Improved region parsing. Colons in reference sequence names are parsed properly. * Fixed an issue where mpileup does not apply BAQ for the first few reads when a region is specified. * Fixed an issue where `faidx' does not work with FASTA files with long lines. * Bugfix: wrong SP genotype information in the BCF output. Other notable changes in bcftools: * Output the ML esitmate of the allele count. * Added the HWE plus F<0 filter to varFilter. For multiple samples, it effectively filters false heterozygous calls around centromeres. * For association mapping, perform both 1-degree and 2-degree test. The 2-degree test is conservative but more robust to HWE violation. (0.1.17: 6 July 2011, r973:277) Beta Release 0.1.16 (21 April, 2011) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Notable changes in samtools: * Support the new SAM/BAM type `B' in the latest SAM spec v1.4. * When the output file of `samtools merge' exists, do not overwrite it unless a new command-line option `-f' is applied. * Bugfix: BED support is not working when the input BED is not sorted. * Bugfix: some reads without coordinates but given on the reverse strand are lost in merging. Notable changes in bcftools: * Code cleanup: separated max-likelihood inference and Bayesian inference. * Test Hardy-Weinberg equilibrium with a likelihood-ratio test. * Provided another association test P-value by likelihood-ratio test. * Use Brent's method to estimate the site allele frequency when EM converges slowly. The resulting ML estimate of allele frequnecy is more accurate. * Added the `ldpair' command, which computes r^2 between SNP pairs given in an input file. Also, the `pileup' command, which has been deprecated by `mpileup' since version 0.1.10, will be dropped in the next release. The old `pileup' command is substandard and causing a lot of confusion. (0.1.16: 21 April 2011, r963:234) Beta Release 0.1.15 (10 April, 2011) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Noteable changes: * Allow to perform variant calling or to extract information in multiple regions specified by a BED file (`samtools mpileup -l', `samtools view -L' and `bcftools view -l'). * Added the `depth' command to samtools to compute the per-base depth with a simpler interface. File `bam2depth.c', which implements this command, is the recommended example on how to use the mpileup APIs. * Estimate genotype frequencies with ML; perform chi^2 based Hardy-Weinberg test using this estimate. * For `samtools view', when `-R' is specified, drop read groups in the header that are not contained in the specified file. * For `samtools flagstat', separate QC-pass and QC-fail reads. * Improved the command line help of `samtools mpileup' and `bcftools view'. * Use a global variable to control the verbose level of samtools stderr output. Nonetheless, it has not been full utilized. * Fixed an issue in association test which may report false associations, possibly due to floating point underflow. (0.1.15: 10 April 2011, r949:203) Beta release 0.1.14 (21 March, 2011) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This release implements a method for testing associations for case-control data. The method does not call genotypes but instead sums over all genotype configurations to compute a chi^2 based test statistics. It can be potentially applied to comparing a pair of samples (e.g. a tumor-normal pair), but this has not been evaluated on real data. Another new feature is to make X chromosome variant calls when female and male samples are both present. The user needs to provide a file indicating the ploidy of each sample (see also manual bcftools/bcftools.1). Other notable changes: * Added `bcftools view -F' to parse BCF files generated by samtools r921 or older which encodes PL in a different way. * Changed the behavior of `bcftools view -s'. Now when a list of samples is provided, the samples in the output will be reordered to match the ordering in the sample list. This change is mainly designed for association test. * Sped up `bcftools view -v' for target sequencing given thousands of samples. Also added a new option `view -d' to skip loci where only a few samples are covered by reads. * Dropped HWE test. This feature has never been implemented properly. An EM should be much better. To be implemented in future. * Added the `cat' command to samtools. This command concatenate BAMs with identical sequence dictionaries in an efficient way. Modified from bam_cat.c written by Chris Saunders. * Added `samtools view -1' to write BAMs at a low compression level but twice faster to create. The `sort' command generates temporary files at a low compression level as well. * Added `samtools mpileup -6' to accept "BAM" with Illumina 1.3+ quality strings (strictly speaking, such a file is not BAM). * Added `samtools mpileup -L' to skip INDEL calling in regions with excessively high coverage. Such regions dramatically slow down mpileup. * Updated `misc/export2sam.pl', provided by Chris Saunders from Illumina Inc. (0.1.14: 21 March 2011, r933:170) Beta release 0.1.13 (1 March, 2011) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The most important though largely invisible modification is the change of the order of genotypes in the PL VCF/BCF tag. This is to conform the upcoming VCF spec v4.1. The change means that 0.1.13 is not backward compatible with VCF/BCF generated by samtools older than r921 inclusive. VCF/BCF generated by the new samtools will contain a line `##fileformat=VCFv4.1' as well as the samtools version number. Single Individual Haplotyping (SIH) is added as an experimental feature. It originally aims to produce haploid consensus from fosmid pool sequencing, but also works with short-read data. For short reads, phased blocks are usually too short to be useful in many applications, but they can help to rule out part of SNPs close to INDELs or between copies of CNVs. Other notable changes in samtools: * Construct per-sample consensus to reduce the effect of nearby SNPs in INDEL calling. This reduces the power but improves specificity. * Improved sorting order checking in indexing. Now indexing is the preferred way to check if a BAM is sorted. * Added a switch `-E' to mpileup and calmd. This option uses an alternative way to apply BAQ, which increases sensistivity, especially to MNPs, at the cost of a little loss in specificity. * Added `mpileup -A' to allow to use reads in anomalous pairs in SNP calling. * Added `mpileup -m' to allow fine control of the collection of INDEL candidates. * Added `mpileup -S' to compute per-sample strand bias P-value. * Added `mpileup -G' to exclude read groups in variant calling. * Fixed segfault in indel calling related to unmapped and refskip reads. * Fixed an integer overflow in INDEL calling. This bug produces wrong INDEL genotypes for longer short INDELs, typically over 10bp. * Fixed a bug in tview on big-endian machines. * Fixed a very rare memory issue in bam_md.c * Fixed an out-of-boundary bug in mpileup when the read base is `N'. * Fixed a compiling error when the knetfile library is not used. Fixed a library compiling error due to the lack of bam_nt16_nt4_table[] table. Suppress a compiling warning related to the latest zlib. Other notable changes in bcftools: * Updated the BCF spec. * Added the `FQ' VCF INFO field, which gives the phred-scaled probability of all samples being the same (identical to the reference or all homozygous variants). Option `view -f' has been dropped. * Implementated of "vcfutils.pl vcf2fq" to generate a consensus sequence similar to "samtools.pl pileup2fq". * Make sure the GT FORMAT field is always the first FORMAT to conform the VCF spec. Drop bcf-fix.pl. * Output bcftools specific INFO and FORMAT in the VCF header. * Added `view -s' to call variants from a subset of samples. * Properly convert VCF to BCF with a user provided sequence dictionary. Nonetheless, custom fields are still unparsed and will be stored as a missing value. * Fixed a minor bug in Fisher's exact test; the results are rarely changed. (0.1.13: 1 March 2011, r926:134) Beta release 0.1.12a (2 December, 2010) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is another bug fix release: * Fixed a memory violation in mpileup, which causes segfault. Release 0.1.9 and above are affected. * Fixed a memory violation in the indel caller, which does not causes segfault, but may potentially affect deletion calls in an unexpected way. Release 0.1.10 and above are affected. * Fixed a bug in computing r-square in bcftools. Few are using this functionality and it only has minor effect. * Fixed a memory leak in bam_fetch(). * Fixed a bug in writing meta information to the BAM index for the last sequence. This bug is invisible to most users, but it is a bug anyway. * Fixed a bug in bcftools which causes false "DP4=0,0,0,0" annotations. (0.1.12: 2 December 2010, r862) Beta release 0.1.11 (21 November, 2010) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is mainly a bug fix release: * Fixed a bug in random retrieval (since 0.1.8). It occurs when reads are retrieved from a small region containing no reads. * Fixed a bug in pileup (since 0.1.9). The bug causes an assertion failure when the first CIGAR operation is a deletion. * Improved fault tolerence in remote access. One minor feature has been implemented in bcftools: * Added a reference-free variant calling mode. In this mode, a site is regarded as a variat iff the sample(s) contains two or more alleles; the meaning of the QUAL field in the VCF output is changed accordingly. Effectively, the reference allele is irrelevant to the result in the new mode, although the reference sequence has to be used in realignment when SAMtools computes genotype likelihoods. In addition, since 0.1.10, the `pileup' command has been deprecated by `mpileup' which is more powerful and more accurate. The `pileup' command will not be removed in the next few releases, but new features will not be added. (0.1.11: 21 November 2010, r851) Beta Release 0.1.10 (16 November, 2010) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This release is featured as the first major improvement to the indel caller. The method is similar to the old one implemented in the pileup command, but the details are handled more carefully both in theory and in practice. As a result, the new indel caller usually gives more accurate indel calls, though at the cost of sensitivity. The caller is implemented in the mpileup command and is invoked by default. It works with multiple samples. Other notable changes: * With the -r option, the calmd command writes the difference between the original base quality and the BAQ capped base quality at the BQ tag but does not modify the base quality. Please use -Ar to overwrite the original base quality (the 0.1.9 behavior). * Allow to set a maximum per-sample read depth to reduce memory. In 0.1.9, most of memory is wasted for the ultra high read depth in some regions (e.g. the chr1 centromere). * Optionally write per-sample read depth and per-sample strand bias P-value. * Compute equal-tail (Bayesian) credible interval of site allele frequency at the CI95 VCF annotation. * Merged the vcfutils.pl varFilter and filter4vcf for better SNP/indel filtering. (0.1.10: 16 November 2010, r829) Beta Release 0.1.9 (27 October, 2010) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This release is featured as the first major improvement to the samtools' SNP caller. It comes with a revised MAQ error model, the support of multi-sample SNP calling and the computation of base alignment quality (BAQ). The revised MAQ error model is based on the original model. It solves an issue of miscalling SNPs in repetitive regions. Althought such SNPs can usually be filtered at a later step, they mess up unfiltered calls. This is a theoretical flaw in the original model. The revised MAQ model deprecates the orginal MAQ model and the simplified SOAPsnp model. Multi-sample SNP calling is separated in two steps. The first is done by samtools mpileup and the second by a new program, bcftools, which is included in the samtools source code tree. Multi-sample SNP calling also works for single sample and has the advantage of enabling more powerful filtration. It is likely to deprecate pileup in future once a proper indel calling method is implemented. BAQ is the Phred-scaled probability of a read base being wrongly aligned. Capping base quality by BAQ has been shown to be very effective in suppressing false SNPs caused by misalignments around indels or in low-complexity regions with acceptable compromise on computation time. This strategy is highly recommended and can be used with other SNP callers as well. In addition to the three major improvements, other notable changes are: * Changes to the pileup format. A reference skip (the N CIGAR operator) is shown as '<' or '>' depending on the strand. Tview is also changed accordingly. * Accelerated pileup. The plain pileup is about 50% faster. * Regional merge. The merge command now accepts a new option to merge files in a specified region. * Fixed a bug in bgzip and razip which causes source files to be deleted even if option -c is applied. * In APIs, propogate errors to downstream callers and make samtools return non-zero values once errors occur. (0.1.9: 27 October 2010, r783) Beta Release 0.1.8 (11 July, 2010) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Notable functional changes: * Added the `reheader' command which replaces a BAM header with a new header. This command is much faster than replacing header by BAM->SAM->BAM conversions. * Added the `mpileup' command which computes the pileup of multiple alignments. * The `index' command now stores the number of mapped and unmapped reads in the index file. This information can be retrieved quickly by the new `idxstats' command. * By default, pileup used the SOAPsnp model for SNP calling. This avoids the floating overflow in the MAQ model which leads to spurious calls in repetitive regions, although these calls will be immediately filtered by varFilter. * The `tview' command now correctly handles CIGARs like 7I10M and 10M1P1I10M which cause assertion failure in earlier versions. * Tview accepts a region like `=10,000' where `=' stands for the current sequence name. This saves typing for long sequence names. * Added the `-d' option to `pileup' which avoids slow indel calling in ultradeep regions by subsampling reads locally. * Added the `-R' option to `view' which retrieves alignments in read groups listed in the specified file. Performance improvements: * The BAM->SAM conversion is up to twice faster, depending on the characteristic of the input. * Parsing SAM headers with a lot of reference sequences is now much faster. * The number of lseek() calls per query is reduced when the query region contains no read alignments. Bug fixes: * Fixed an issue in the indel caller that leads to miscall of indels. Note that this solution may not work well when the sequencing indel error rate is higher than the rate of SNPs. * Fixed another issue in the indel caller which may lead to incorrect genotype. * Fixed a bug in `sort' when option `-o' is applied. * Fixed a bug in `view -r'. APIs and other changes: * Added iterator interfaces to random access and pileup. The callback interfaces directly call the iterator interfaces. * The BGZF blocks holding the BAM header are indepedent of alignment BGZF blocks. Alignment records shorter than 64kB is guaranteed to be fully contained in one BGZF block. This change is fully compatible with the old version of samtools/picard. Changes in other utilities: * Updated export2sam.pl by Chris Saunders. * Improved the sam2vcf.pl script. * Added a Python version of varfilter.py by Aylwyn Scally. (0.1.8: 11 July 2010, r613) Beta Release 0.1.7 (10 November, 2009) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Notable changes: * Improved the indel caller in complex scenariors, in particular for long reads. The indel caller is now able to make reasonable indel calls from Craig Venter capillary reads. * Rewrote single-end duplicate removal with improved performance. Paired-end reads are not touched. * Duplicate removal is now library aware. Samtools remove potential PCR/optical dupliates inside a library rather than across libraries. * SAM header is now fully parsed, although this functionality is not used in merging and so on. * In samtools merge, optionally take the input file name as RG-ID and attach the RG tag to each alignment. * Added FTP support in the RAZF library. RAZF-compressed reference sequence can be retrieved remotely. * Improved network support for Win32. * Samtools sort and merge are now stable. Changes in other utilities: * Implemented sam2vcf.pl that converts the pileup format to the VCF format. * This release of samtools is known to work with the latest Bio-Samtools Perl module. (0.1.7: 10 November 2009, r510) Beta Release 0.1.6 (2 September, 2009) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Notable changes: * In tview, do not show a blank screen when no reads mapped to the corresponding region. * Implemented native HTTP support in the BGZF library. Samtools is now able to directly open a BAM file on HTTP. HTTP proxy is also supported via the "http_proxy" environmental variable. * Samtools is now compitable with the MinGW (win32) compiler and the PDCurses library. * The calmd (or fillmd) command now calculates the NM tag and replaces MD tags if they are wrong. * The view command now recognizes and optionally prints FLAG in HEXs or strings to make a SAM file more friendly to human eyes. This is a samtools-C extension, not implemented in Picard for the time being. Please type `samtools view -?' for more information. * BAM files now have an end-of-file (EOF) marker to facilitate truncation detection. A warning will be given if an on-disk BAM file does not have this marker. The warning will be seen on BAM files generated by an older version of samtools. It does NO harm. * New key bindings in tview: `r' to show read names and `s' to show reference skip (N operation) as deletions. * Fixed a bug in `samtools merge -n'. * Samtools merge now optionally copies the header of a user specified SAM file to the resultant BAM output. * Samtools pileup/tview works with a CIGAR with the first or the last operation is an indel. * Fixed a bug in bam_aux_get(). Changes in other utilies: * Fixed wrong FLAG in maq2sam. (0.1.6: 2 September 2009, r453) Beta Release 0.1.5 (7 July, 2009) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Notable changes: * Support opening a BAM alignment on FTP. Users can now use "tview" to view alignments at the NCBI ftp site. Please read manual for more information. * In library, propagate errors rather than exit or complain assertion failure. * Simplified the building system and fixed compiling errors caused by zlib<1.2.2.1. * Fixed an issue about lost header information when a SAM is imported with "view -t". * Implemented "samtool.pl varFilter" which filters both SNPs and short indels. This command replaces "indelFilter". * Implemented "samtools.pl pileup2fq" to generate FASTQ consensus from pileup output. * In pileup, cap mapping quality at 60. This helps filtering when different aligners are in use. * In pileup, allow to output variant sites only. * Made pileup generate correct calls in repetitive region. At the same time, I am considering to implement a simplified model in SOAPsnp, although this has not happened yet. * In view, added '-u' option to output BAM without compression. This option is preferred when the output is piped to other commands. * In view, added '-l' and '-r' to get the alignments for one library or read group. The "@RG" header lines are now partially parsed. * Do not include command line utilities to libbam.a. * Fixed memory leaks in pileup and bam_view1(). * Made faidx more tolerant to empty lines right before or after FASTA > lines. Changes in other utilities: * Updated novo2sam.pl by Colin Hercus, the key developer of novoalign. This release involves several modifications to the key code base which may potentially introduce new bugs even though we have tried to minimize this by testing on several examples. Please let us know if you catch bugs. (0.1.5: 7 July 2009, r373) Beta Release 0.1.4 (21 May, 2009) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Notable changes: * Added the 'rmdupse' command: removing duplicates for SE reads. * Fixed a critical bug in the indel caller: clipped alignments are not processed correctly. * Fixed a bug in the tview: gapped alignment may be incorrectly displayed. * Unified the interface to BAM and SAM I/O. This is done by implementing a wrapper on top of the old APIs and therefore old APIs are still valid. The new I/O APIs also recognize the @SQ header lines. * Generate the MD tag. * Generate "=" bases. However, the indel caller will not work when "=" bases are present. * Enhanced support of color-read display (by Nils Homer). * Implemented the GNU building system. However, currently the building system does not generate libbam.a. We will improve this later. For the time being, `make -f Makefile.generic' is preferred. * Fixed a minor bug in pileup: the first read in a chromosome may be skipped. * Fixed bugs in bam_aux.c. These bugs do not affect other components as they were not used previously. * Output the 'SM' tag from maq2sam. (0.1.4: 21 May 2009, r297) Beta Release 0.1.3 (15 April, 2009) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Notable changes in SAMtools: * SAMtools is more consistent with the specification: a) '*' in the QUAL field is allowed; b) the field separator is TAB only and SPACE is treated as a character in a field; c) empty header is allowed. * Implemented GLFv3 support in pileup. * Fixed a severe bug in fixmate: strand information is wrongly overwritten. * Fixed a bug in alignment retrieval: alignments bridging n*16384bp are not correctly retrieved sometimes. * Fixed a bug in rmdup: segfault if unmapped reads are present. * Move indel_filter.pl to samtools.pl and improved the filtering by checking the actual number of alignments containing indels. The indel pileup line is also changed a little to make this filtration easier. * Fixed a minor bug in indexing: the bin number of an unmapped read is wrongly calculated. * Added `flagstat' command to show statistics on the FLAG field. * Improved indel caller by setting the maximum window size in local realignment. Changes in other utilities: * Fixed a bug in maq2sam: a tag name is obsolete. * Improvement to wgsim: a) added support for SOLiD read simulation; b) show the number of substitutions/indels/errors in read name; c) considerable code clean up. * Various converters: improved functionality in general. * Updated the example SAM due to the previous bug in fixmate. (0.1.3: 15 April 2009, r227) Beta Release 0.1.2 (28 January, 2008) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Notable changes in SAMtools: * Implemented a Bayesian indel caller. The new caller generate scores and genotype and is potentially more accurate than Maq's indel caller. The pileup format is also changed accordingly. * Implemented rmdup command: remove potential PCR duplicates. Note that this command ONLY works for FR orientation and requires ISIZE is correctly set. * Added fixmate command: fill in mate coordinates, ISIZE and mate related flags from a name-sorted alignment. * Fixed a bug in indexing: reads bridging 16x kbp were not retrieved. * Allow to select reads shown in the pileup output with a mask. * Generate GLFv2 from pileup. * Added two more flags for flagging PCR/optical duplicates and for QC failure. * Fixed a bug in sort command: name sorting for large alignment did not work. * Allow to completely disable RAZF (using Makefile.lite) as some people have problem to compile it. * Fixed a bug in import command when there are reads without coordinates. * Fixed a bug in tview: clipping broke the alignment viewer. * Fixed a compiling error when _NO_CURSES is applied. * Fixed a bug in merge command. Changes in other utilities: * Added wgsim, a paired-end reads simulator. Wgsim was adapted from maq's reads simulator. Colin Hercus further improved it to allow longer indels. * Added wgsim_eval.pl, a script that evaluates the accuracy of alignment on reads generated by wgsim. * Added soap2sam.pl, a SOAP2->SAM converter. This converter does not work properly when multiple hits are output. * Added bowtie2sam.pl, a Bowtie->SAM converter. Only the top hit will be retained when multiple hits are present. * Fixed a bug in export2sam.pl for QC reads. * Support RG tag at MAQ->SAM converter. * Added novo2sam.pl, a NovoAlign->SAM converter. Multiple hits and indel are not properly handled, though. * Added zoom2sam.pl, a ZOOM->SAM converter. It only works with the default Illumina output. (0.1.2: 28 January 2008; r116) Beta Release 0.1.1 (22 December, 2008) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The is the first public release of samtools. For more information, please check the manual page `samtools.1' and the samtools website http://samtools.sourceforge.net genometools-1.5.1/src/external/samtools-0.1.18/bam.c000066400000000000000000000271541211610345200217550ustar00rootroot00000000000000#include #include #include #include #include "bam.h" #include "bam_endian.h" #include "kstring.h" #include "sam_header.h" int bam_is_be = 0, bam_verbose = 2; char *bam_flag2char_table = "pPuUrR12sfd\0\0\0\0\0"; /************************** * CIGAR related routines * **************************/ uint32_t bam_calend(const bam1_core_t *c, const uint32_t *cigar) { uint32_t k, end; end = c->pos; for (k = 0; k < c->n_cigar; ++k) { int op = cigar[k] & BAM_CIGAR_MASK; if (op == BAM_CMATCH || op == BAM_CDEL || op == BAM_CREF_SKIP) end += cigar[k] >> BAM_CIGAR_SHIFT; } return end; } int32_t bam_cigar2qlen(const bam1_core_t *c, const uint32_t *cigar) { uint32_t k; int32_t l = 0; for (k = 0; k < c->n_cigar; ++k) { int op = cigar[k] & BAM_CIGAR_MASK; if (op == BAM_CMATCH || op == BAM_CINS || op == BAM_CSOFT_CLIP || op == BAM_CEQUAL || op == BAM_CDIFF) l += cigar[k] >> BAM_CIGAR_SHIFT; } return l; } /******************** * BAM I/O routines * ********************/ bam_header_t *bam_header_init() { bam_is_be = bam_is_big_endian(); return (bam_header_t*)calloc(1, sizeof(bam_header_t)); } void bam_header_destroy(bam_header_t *header) { int32_t i; extern void bam_destroy_header_hash(bam_header_t *header); if (header == 0) return; if (header->target_name) { for (i = 0; i < header->n_targets; ++i) free(header->target_name[i]); free(header->target_name); free(header->target_len); } free(header->text); if (header->dict) sam_header_free(header->dict); if (header->rg2lib) sam_tbl_destroy(header->rg2lib); bam_destroy_header_hash(header); free(header); } bam_header_t *bam_header_read(bamFile fp) { bam_header_t *header; char buf[4]; int magic_len; int32_t i = 1, name_len; // check EOF i = bgzf_check_EOF(fp); if (i < 0) { // If the file is a pipe, checking the EOF marker will *always* fail // with ESPIPE. Suppress the error message in this case. if (errno != ESPIPE) perror("[bam_header_read] bgzf_check_EOF"); } else if (i == 0) fprintf(stderr, "[bam_header_read] EOF marker is absent. The input is probably truncated.\n"); // read "BAM1" magic_len = bam_read(fp, buf, 4); if (magic_len != 4 || strncmp(buf, "BAM\001", 4) != 0) { fprintf(stderr, "[bam_header_read] invalid BAM binary header (this is not a BAM file).\n"); return 0; } header = bam_header_init(); // read plain text and the number of reference sequences bam_read(fp, &header->l_text, 4); if (bam_is_be) bam_swap_endian_4p(&header->l_text); header->text = (char*)calloc(header->l_text + 1, 1); bam_read(fp, header->text, header->l_text); bam_read(fp, &header->n_targets, 4); if (bam_is_be) bam_swap_endian_4p(&header->n_targets); // read reference sequence names and lengths header->target_name = (char**)calloc(header->n_targets, sizeof(char*)); header->target_len = (uint32_t*)calloc(header->n_targets, 4); for (i = 0; i != header->n_targets; ++i) { bam_read(fp, &name_len, 4); if (bam_is_be) bam_swap_endian_4p(&name_len); header->target_name[i] = (char*)calloc(name_len, 1); bam_read(fp, header->target_name[i], name_len); bam_read(fp, &header->target_len[i], 4); if (bam_is_be) bam_swap_endian_4p(&header->target_len[i]); } return header; } int bam_header_write(bamFile fp, const bam_header_t *header) { char buf[4]; int32_t i, name_len, x; // write "BAM1" strncpy(buf, "BAM\001", 4); bam_write(fp, buf, 4); // write plain text and the number of reference sequences if (bam_is_be) { x = bam_swap_endian_4(header->l_text); bam_write(fp, &x, 4); if (header->l_text) bam_write(fp, header->text, header->l_text); x = bam_swap_endian_4(header->n_targets); bam_write(fp, &x, 4); } else { bam_write(fp, &header->l_text, 4); if (header->l_text) bam_write(fp, header->text, header->l_text); bam_write(fp, &header->n_targets, 4); } // write sequence names and lengths for (i = 0; i != header->n_targets; ++i) { char *p = header->target_name[i]; name_len = strlen(p) + 1; if (bam_is_be) { x = bam_swap_endian_4(name_len); bam_write(fp, &x, 4); } else bam_write(fp, &name_len, 4); bam_write(fp, p, name_len); if (bam_is_be) { x = bam_swap_endian_4(header->target_len[i]); bam_write(fp, &x, 4); } else bam_write(fp, &header->target_len[i], 4); } bgzf_flush(fp); return 0; } static void swap_endian_data(const bam1_core_t *c, int data_len, uint8_t *data) { uint8_t *s; uint32_t i, *cigar = (uint32_t*)(data + c->l_qname); s = data + c->n_cigar*4 + c->l_qname + c->l_qseq + (c->l_qseq + 1)/2; for (i = 0; i < c->n_cigar; ++i) bam_swap_endian_4p(&cigar[i]); while (s < data + data_len) { uint8_t type; s += 2; // skip key type = toupper(*s); ++s; // skip type if (type == 'C' || type == 'A') ++s; else if (type == 'S') { bam_swap_endian_2p(s); s += 2; } else if (type == 'I' || type == 'F') { bam_swap_endian_4p(s); s += 4; } else if (type == 'D') { bam_swap_endian_8p(s); s += 8; } else if (type == 'Z' || type == 'H') { while (*s) ++s; ++s; } else if (type == 'B') { int32_t n, Bsize = bam_aux_type2size(*s); memcpy(&n, s + 1, 4); if (1 == Bsize) { } else if (2 == Bsize) { for (i = 0; i < n; i += 2) bam_swap_endian_2p(s + 5 + i); } else if (4 == Bsize) { for (i = 0; i < n; i += 4) bam_swap_endian_4p(s + 5 + i); } bam_swap_endian_4p(s+1); } } } int bam_read1(bamFile fp, bam1_t *b) { bam1_core_t *c = &b->core; int32_t block_len, ret, i; uint32_t x[8]; assert(BAM_CORE_SIZE == 32); if ((ret = bam_read(fp, &block_len, 4)) != 4) { if (ret == 0) return -1; // normal end-of-file else return -2; // truncated } if (bam_read(fp, x, BAM_CORE_SIZE) != BAM_CORE_SIZE) return -3; if (bam_is_be) { bam_swap_endian_4p(&block_len); for (i = 0; i < 8; ++i) bam_swap_endian_4p(x + i); } c->tid = x[0]; c->pos = x[1]; c->bin = x[2]>>16; c->qual = x[2]>>8&0xff; c->l_qname = x[2]&0xff; c->flag = x[3]>>16; c->n_cigar = x[3]&0xffff; c->l_qseq = x[4]; c->mtid = x[5]; c->mpos = x[6]; c->isize = x[7]; b->data_len = block_len - BAM_CORE_SIZE; if (b->m_data < b->data_len) { b->m_data = b->data_len; kroundup32(b->m_data); b->data = (uint8_t*)realloc(b->data, b->m_data); } if (bam_read(fp, b->data, b->data_len) != b->data_len) return -4; b->l_aux = b->data_len - c->n_cigar * 4 - c->l_qname - c->l_qseq - (c->l_qseq+1)/2; if (bam_is_be) swap_endian_data(c, b->data_len, b->data); return 4 + block_len; } inline int bam_write1_core(bamFile fp, const bam1_core_t *c, int data_len, uint8_t *data) { uint32_t x[8], block_len = data_len + BAM_CORE_SIZE, y; int i; assert(BAM_CORE_SIZE == 32); x[0] = c->tid; x[1] = c->pos; x[2] = (uint32_t)c->bin<<16 | c->qual<<8 | c->l_qname; x[3] = (uint32_t)c->flag<<16 | c->n_cigar; x[4] = c->l_qseq; x[5] = c->mtid; x[6] = c->mpos; x[7] = c->isize; bgzf_flush_try(fp, 4 + block_len); if (bam_is_be) { for (i = 0; i < 8; ++i) bam_swap_endian_4p(x + i); y = block_len; bam_write(fp, bam_swap_endian_4p(&y), 4); swap_endian_data(c, data_len, data); } else bam_write(fp, &block_len, 4); bam_write(fp, x, BAM_CORE_SIZE); bam_write(fp, data, data_len); if (bam_is_be) swap_endian_data(c, data_len, data); return 4 + block_len; } int bam_write1(bamFile fp, const bam1_t *b) { return bam_write1_core(fp, &b->core, b->data_len, b->data); } char *bam_format1_core(const bam_header_t *header, const bam1_t *b, int of) { uint8_t *s = bam1_seq(b), *t = bam1_qual(b); int i; const bam1_core_t *c = &b->core; kstring_t str; str.l = str.m = 0; str.s = 0; kputsn(bam1_qname(b), c->l_qname-1, &str); kputc('\t', &str); if (of == BAM_OFDEC) { kputw(c->flag, &str); kputc('\t', &str); } else if (of == BAM_OFHEX) ksprintf(&str, "0x%x\t", c->flag); else { // BAM_OFSTR for (i = 0; i < 16; ++i) if ((c->flag & 1<tid < 0) kputsn("*\t", 2, &str); else { if (header) kputs(header->target_name[c->tid] , &str); else kputw(c->tid, &str); kputc('\t', &str); } kputw(c->pos + 1, &str); kputc('\t', &str); kputw(c->qual, &str); kputc('\t', &str); if (c->n_cigar == 0) kputc('*', &str); else { for (i = 0; i < c->n_cigar; ++i) { kputw(bam1_cigar(b)[i]>>BAM_CIGAR_SHIFT, &str); kputc("MIDNSHP=X"[bam1_cigar(b)[i]&BAM_CIGAR_MASK], &str); } } kputc('\t', &str); if (c->mtid < 0) kputsn("*\t", 2, &str); else if (c->mtid == c->tid) kputsn("=\t", 2, &str); else { if (header) kputs(header->target_name[c->mtid], &str); else kputw(c->mtid, &str); kputc('\t', &str); } kputw(c->mpos + 1, &str); kputc('\t', &str); kputw(c->isize, &str); kputc('\t', &str); if (c->l_qseq) { for (i = 0; i < c->l_qseq; ++i) kputc(bam_nt16_rev_table[bam1_seqi(s, i)], &str); kputc('\t', &str); if (t[0] == 0xff) kputc('*', &str); else for (i = 0; i < c->l_qseq; ++i) kputc(t[i] + 33, &str); } else kputsn("*\t*", 3, &str); s = bam1_aux(b); while (s < b->data + b->data_len) { uint8_t type, key[2]; key[0] = s[0]; key[1] = s[1]; s += 2; type = *s; ++s; kputc('\t', &str); kputsn((char*)key, 2, &str); kputc(':', &str); if (type == 'A') { kputsn("A:", 2, &str); kputc(*s, &str); ++s; } else if (type == 'C') { kputsn("i:", 2, &str); kputw(*s, &str); ++s; } else if (type == 'c') { kputsn("i:", 2, &str); kputw(*(int8_t*)s, &str); ++s; } else if (type == 'S') { kputsn("i:", 2, &str); kputw(*(uint16_t*)s, &str); s += 2; } else if (type == 's') { kputsn("i:", 2, &str); kputw(*(int16_t*)s, &str); s += 2; } else if (type == 'I') { kputsn("i:", 2, &str); kputuw(*(uint32_t*)s, &str); s += 4; } else if (type == 'i') { kputsn("i:", 2, &str); kputw(*(int32_t*)s, &str); s += 4; } else if (type == 'f') { ksprintf(&str, "f:%g", *(float*)s); s += 4; } else if (type == 'd') { ksprintf(&str, "d:%lg", *(double*)s); s += 8; } else if (type == 'Z' || type == 'H') { kputc(type, &str); kputc(':', &str); while (*s) kputc(*s++, &str); ++s; } else if (type == 'B') { uint8_t sub_type = *(s++); int32_t n; memcpy(&n, s, 4); s += 4; // no point to the start of the array kputc(type, &str); kputc(':', &str); kputc(sub_type, &str); // write the typing for (i = 0; i < n; ++i) { kputc(',', &str); if ('c' == sub_type || 'c' == sub_type) { kputw(*(int8_t*)s, &str); ++s; } else if ('C' == sub_type) { kputw(*(uint8_t*)s, &str); ++s; } else if ('s' == sub_type) { kputw(*(int16_t*)s, &str); s += 2; } else if ('S' == sub_type) { kputw(*(uint16_t*)s, &str); s += 2; } else if ('i' == sub_type) { kputw(*(int32_t*)s, &str); s += 4; } else if ('I' == sub_type) { kputuw(*(uint32_t*)s, &str); s += 4; } else if ('f' == sub_type) { ksprintf(&str, "%g", *(float*)s); s += 4; } } } } return str.s; } char *bam_format1(const bam_header_t *header, const bam1_t *b) { return bam_format1_core(header, b, BAM_OFDEC); } void bam_view1(const bam_header_t *header, const bam1_t *b) { char *s = bam_format1(header, b); puts(s); free(s); } int bam_validate1(const bam_header_t *header, const bam1_t *b) { char *s; if (b->core.tid < -1 || b->core.mtid < -1) return 0; if (header && (b->core.tid >= header->n_targets || b->core.mtid >= header->n_targets)) return 0; if (b->data_len < b->core.l_qname) return 0; s = memchr(bam1_qname(b), '\0', b->core.l_qname); if (s != &bam1_qname(b)[b->core.l_qname-1]) return 0; // FIXME: Other fields could also be checked, especially the auxiliary data return 1; } // FIXME: we should also check the LB tag associated with each alignment const char *bam_get_library(bam_header_t *h, const bam1_t *b) { const uint8_t *rg; if (h->dict == 0) h->dict = sam_header_parse2(h->text); if (h->rg2lib == 0) h->rg2lib = sam_header2tbl(h->dict, "RG", "ID", "LB"); rg = bam_aux_get(b, "RG"); return (rg == 0)? 0 : sam_tbl_get(h->rg2lib, (const char*)(rg + 1)); } genometools-1.5.1/src/external/samtools-0.1.18/bam.h000066400000000000000000000603231211610345200217550ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008-2010 Genome Research Ltd (GRL). Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Contact: Heng Li */ #ifndef BAM_BAM_H #define BAM_BAM_H /*! @header BAM library provides I/O and various operations on manipulating files in the BAM (Binary Alignment/Mapping) or SAM (Sequence Alignment/Map) format. It now supports importing from or exporting to SAM, sorting, merging, generating pileup, and quickly retrieval of reads overlapped with a specified region. @copyright Genome Research Ltd. */ #define BAM_VERSION "0.1.18 (r982:295)" #include #include #include #include #ifndef BAM_LITE #define BAM_VIRTUAL_OFFSET16 #include "bgzf.h" /*! @abstract BAM file handler */ typedef BGZF *bamFile; #define bam_open(fn, mode) bgzf_open(fn, mode) #define bam_dopen(fd, mode) bgzf_fdopen(fd, mode) #define bam_close(fp) bgzf_close(fp) #define bam_read(fp, buf, size) bgzf_read(fp, buf, size) #define bam_write(fp, buf, size) bgzf_write(fp, buf, size) #define bam_tell(fp) bgzf_tell(fp) #define bam_seek(fp, pos, dir) bgzf_seek(fp, pos, dir) #else #define BAM_TRUE_OFFSET #ifndef S_SPLINT_S #include #endif typedef gzFile bamFile; #define bam_open(fn, mode) gzopen(fn, mode) #define bam_dopen(fd, mode) gzdopen(fd, mode) #define bam_close(fp) gzclose(fp) #define bam_read(fp, buf, size) gzread(fp, buf, size) /* no bam_write/bam_tell/bam_seek() here */ #endif /*@ignore@*/ /*! @typedef @abstract Structure for the alignment header. @field n_targets number of reference sequences @field target_name names of the reference sequences @field target_len lengths of the referene sequences @field dict header dictionary @field hash hash table for fast name lookup @field rg2lib hash table for @RG-ID -> LB lookup @field l_text length of the plain text in the header @field text plain text @discussion Field hash points to null by default. It is a private member. */ typedef struct { int32_t n_targets; char **target_name; uint32_t *target_len; void *dict, *hash, *rg2lib; size_t l_text, n_text; char *text; } bam_header_t; /*! @abstract the read is paired in sequencing, no matter whether it is mapped in a pair */ #define BAM_FPAIRED 1 /*! @abstract the read is mapped in a proper pair */ #define BAM_FPROPER_PAIR 2 /*! @abstract the read itself is unmapped; conflictive with BAM_FPROPER_PAIR */ #define BAM_FUNMAP 4 /*! @abstract the mate is unmapped */ #define BAM_FMUNMAP 8 /*! @abstract the read is mapped to the reverse strand */ #define BAM_FREVERSE 16 /*! @abstract the mate is mapped to the reverse strand */ #define BAM_FMREVERSE 32 /*! @abstract this is read1 */ #define BAM_FREAD1 64 /*! @abstract this is read2 */ #define BAM_FREAD2 128 /*! @abstract not primary alignment */ #define BAM_FSECONDARY 256 /*! @abstract QC failure */ #define BAM_FQCFAIL 512 /*! @abstract optical or PCR duplicate */ #define BAM_FDUP 1024 #define BAM_OFDEC 0 #define BAM_OFHEX 1 #define BAM_OFSTR 2 /*! @abstract defautl mask for pileup */ #define BAM_DEF_MASK (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) #define BAM_CORE_SIZE sizeof(bam1_core_t) /** * Describing how CIGAR operation/length is packed in a 32-bit integer. */ #define BAM_CIGAR_SHIFT 4 #define BAM_CIGAR_MASK ((1 << BAM_CIGAR_SHIFT) - 1) /* CIGAR operations. */ /*! @abstract CIGAR: M = match or mismatch*/ #define BAM_CMATCH 0 /*! @abstract CIGAR: I = insertion to the reference */ #define BAM_CINS 1 /*! @abstract CIGAR: D = deletion from the reference */ #define BAM_CDEL 2 /*! @abstract CIGAR: N = skip on the reference (e.g. spliced alignment) */ #define BAM_CREF_SKIP 3 /*! @abstract CIGAR: S = clip on the read with clipped sequence present in qseq */ #define BAM_CSOFT_CLIP 4 /*! @abstract CIGAR: H = clip on the read with clipped sequence trimmed off */ #define BAM_CHARD_CLIP 5 /*! @abstract CIGAR: P = padding */ #define BAM_CPAD 6 /*! @abstract CIGAR: equals = match */ #define BAM_CEQUAL 7 /*! @abstract CIGAR: X = mismatch */ #define BAM_CDIFF 8 /*! @typedef @abstract Structure for core alignment information. @field tid chromosome ID, defined by bam_header_t @field pos 0-based leftmost coordinate @field strand strand; 0 for forward and 1 otherwise @field bin bin calculated by bam_reg2bin() @field qual mapping quality @field l_qname length of the query name @field flag bitwise flag @field n_cigar number of CIGAR operations @field l_qseq length of the query sequence (read) */ typedef struct { int32_t tid; int32_t pos; uint32_t bin:16, qual:8, l_qname:8; uint32_t flag:16, n_cigar:16; int32_t l_qseq; int32_t mtid; int32_t mpos; int32_t isize; } bam1_core_t; /*! @typedef @abstract Structure for one alignment. @field core core information about the alignment @field l_aux length of auxiliary data @field data_len current length of bam1_t::data @field m_data maximum length of bam1_t::data @field data all variable-length data, concatenated; structure: cigar-qname-seq-qual-aux @discussion Notes: 1. qname is zero tailing and core.l_qname includes the tailing '\0'. 2. l_qseq is calculated from the total length of an alignment block on reading or from CIGAR. */ typedef struct { bam1_core_t core; int l_aux, data_len, m_data; uint8_t *data; } bam1_t; typedef struct __bam_iter_t *bam_iter_t; #define bam1_strand(b) (((b)->core.flag&BAM_FREVERSE) != 0) #define bam1_mstrand(b) (((b)->core.flag&BAM_FMREVERSE) != 0) /*! @function @abstract Get the CIGAR array @param b pointer to an alignment @return pointer to the CIGAR array @discussion In the CIGAR array, each element is a 32-bit integer. The lower 4 bits gives a CIGAR operation and the higher 28 bits keep the length of a CIGAR. */ #define bam1_cigar(b) ((uint32_t*)((b)->data + (b)->core.l_qname)) /*! @function @abstract Get the name of the query @param b pointer to an alignment @return pointer to the name string, null terminated */ #define bam1_qname(b) ((char*)((b)->data)) /*! @function @abstract Get query sequence @param b pointer to an alignment @return pointer to sequence @discussion Each base is encoded in 4 bits: 1 for A, 2 for C, 4 for G, 8 for T and 15 for N. Two bases are packed in one byte with the base at the higher 4 bits having smaller coordinate on the read. It is recommended to use bam1_seqi() macro to get the base. */ #define bam1_seq(b) ((b)->data + (b)->core.n_cigar*4 + (b)->core.l_qname) /*! @function @abstract Get query quality @param b pointer to an alignment @return pointer to quality string */ #define bam1_qual(b) ((b)->data + (b)->core.n_cigar*4 + (b)->core.l_qname + (((b)->core.l_qseq + 1)>>1)) /*! @function @abstract Get a base on read @param s Query sequence returned by bam1_seq() @param i The i-th position, 0-based @return 4-bit integer representing the base. */ #define bam1_seqi(s, i) ((s)[(i)/2] >> 4*(1-(i)%2) & 0xf) /*! @function @abstract Get query sequence and quality @param b pointer to an alignment @return pointer to the concatenated auxiliary data */ #define bam1_aux(b) ((b)->data + (b)->core.n_cigar*4 + (b)->core.l_qname + (b)->core.l_qseq + ((b)->core.l_qseq + 1)/2) #ifndef kroundup32 /*! @function @abstract Round an integer to the next closest power-2 integer. @param x integer to be rounded (in place) @discussion x will be modified. */ #define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) #endif /*! @abstract Whether the machine is big-endian; modified only in bam_header_init(). */ extern int bam_is_be; /*! @abstract Verbose level between 0 and 3; 0 is supposed to disable all debugging information, though this may not have been implemented. */ extern int bam_verbose; /*! @abstract Table for converting a nucleotide character to the 4-bit encoding. */ extern unsigned char bam_nt16_table[256]; /*! @abstract Table for converting a 4-bit encoded nucleotide to a letter. */ extern char *bam_nt16_rev_table; extern char bam_nt16_nt4_table[]; #ifdef __cplusplus extern "C" { #endif /********************* * Low-level SAM I/O * *********************/ /*! @abstract TAM file handler */ typedef struct __tamFile_t *tamFile; /*! @abstract Open a SAM file for reading, either uncompressed or compressed by gzip/zlib. @param fn SAM file name @return SAM file handler */ tamFile sam_open(const char *fn); /*! @abstract Close a SAM file handler @param fp SAM file handler */ void sam_close(tamFile fp); /*! @abstract Read one alignment from a SAM file handler @param fp SAM file handler @param header header information (ordered names of chromosomes) @param b read alignment; all members in b will be updated @return 0 if successful; otherwise negative */ int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b); /*! @abstract Read header information from a TAB-delimited list file. @param fn_list file name for the list @return a pointer to the header structure @discussion Each line in this file consists of chromosome name and the length of chromosome. */ bam_header_t *sam_header_read2(const char *fn_list); /*! @abstract Read header from a SAM file (if present) @param fp SAM file handler @return pointer to header struct; 0 if no @SQ lines available */ bam_header_t *sam_header_read(tamFile fp); /*! @abstract Parse @SQ lines a update a header struct @param h pointer to the header struct to be updated @return number of target sequences @discussion bam_header_t::{n_targets,target_len,target_name} will be destroyed in the first place. */ int sam_header_parse(bam_header_t *h); int32_t bam_get_tid(const bam_header_t *header, const char *seq_name); /*! @abstract Parse @RG lines a update a header struct @param h pointer to the header struct to be updated @return number of @RG lines @discussion bam_header_t::rg2lib will be destroyed in the first place. */ int sam_header_parse_rg(bam_header_t *h); #define sam_write1(header, b) bam_view1(header, b) /******************************** * APIs for string dictionaries * ********************************/ int bam_strmap_put(void *strmap, const char *rg, const char *lib); const char *bam_strmap_get(const void *strmap, const char *rg); void *bam_strmap_dup(const void*); void *bam_strmap_init(); void bam_strmap_destroy(void *strmap); /********************* * Low-level BAM I/O * *********************/ /*! @abstract Initialize a header structure. @return the pointer to the header structure @discussion This function also modifies the global variable bam_is_be. */ bam_header_t *bam_header_init(); /*! @abstract Destroy a header structure. @param header pointer to the header */ void bam_header_destroy(bam_header_t *header); /*! @abstract Read a header structure from BAM. @param fp BAM file handler, opened by bam_open() @return pointer to the header structure @discussion The file position indicator must be placed at the beginning of the file. Upon success, the position indicator will be set at the start of the first alignment. */ bam_header_t *bam_header_read(bamFile fp); /*! @abstract Write a header structure to BAM. @param fp BAM file handler @param header pointer to the header structure @return always 0 currently */ int bam_header_write(bamFile fp, const bam_header_t *header); /*! @abstract Read an alignment from BAM. @param fp BAM file handler @param b read alignment; all members are updated. @return number of bytes read from the file @discussion The file position indicator must be placed right before an alignment. Upon success, this function will set the position indicator to the start of the next alignment. This function is not affected by the machine endianness. */ int bam_read1(bamFile fp, bam1_t *b); /*! @abstract Write an alignment to BAM. @param fp BAM file handler @param c pointer to the bam1_core_t structure @param data_len total length of variable size data related to the alignment @param data pointer to the concatenated data @return number of bytes written to the file @discussion This function is not affected by the machine endianness. */ int bam_write1_core(bamFile fp, const bam1_core_t *c, int data_len, uint8_t *data); /*! @abstract Write an alignment to BAM. @param fp BAM file handler @param b alignment to write @return number of bytes written to the file @abstract It is equivalent to: bam_write1_core(fp, &b->core, b->data_len, b->data) */ int bam_write1(bamFile fp, const bam1_t *b); /*! @function @abstract Initiate a pointer to bam1_t struct */ #define bam_init1() ((bam1_t*)calloc((size_t) 1, sizeof(bam1_t))) /*! @function @abstract Free the memory allocated for an alignment. @param b pointer to an alignment */ #define bam_destroy1(b) do { \ if (b!=NULL) { free((b)->data); free(b); } \ } while (0==1) /*! @abstract Format a BAM record in the SAM format @param header pointer to the header structure @param b alignment to print @return a pointer to the SAM string */ char *bam_format1(const bam_header_t *header, const bam1_t *b); char *bam_format1_core(const bam_header_t *header, const bam1_t *b, int of); /*! @abstract Check whether a BAM record is plausibly valid @param header associated header structure, or NULL if unavailable @param b alignment to validate @return 0 if the alignment is invalid; non-zero otherwise @discussion Simple consistency check of some of the fields of the alignment record. If the header is provided, several additional checks are made. Not all fields are checked, so a non-zero result is not a guarantee that the record is valid. However it is usually good enough to detect when bam_seek() has been called with a virtual file offset that is not the offset of an alignment record. */ int bam_validate1(const bam_header_t *header, const bam1_t *b); const char *bam_get_library(bam_header_t *header, const bam1_t *b); /*************** * pileup APIs * ***************/ /*! @typedef @abstract Structure for one alignment covering the pileup position. @field b pointer to the alignment @field qpos position of the read base at the pileup site, 0-based @field indel indel length; 0 for no indel, positive for ins and negative for del @field is_del 1 iff the base on the padded read is a deletion @field level the level of the read in the "viewer" mode @discussion See also bam_plbuf_push() and bam_lplbuf_push(). The difference between the two functions is that the former does not set bam_pileup1_t::level, while the later does. Level helps the implementation of alignment viewers, but calculating this has some overhead. */ typedef struct { bam1_t *b; int32_t qpos; int indel, level; uint32_t is_del:1, is_head:1, is_tail:1, is_refskip:1, aux:28; } bam_pileup1_t; typedef int (*bam_plp_auto_f)(void *data, bam1_t *b); struct __bam_plp_t; typedef struct __bam_plp_t *bam_plp_t; bam_plp_t bam_plp_init(bam_plp_auto_f func, void *data); int bam_plp_push(bam_plp_t iter, const bam1_t *b); const bam_pileup1_t *bam_plp_next(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp); const bam_pileup1_t *bam_plp_auto(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp); void bam_plp_set_mask(bam_plp_t iter, int mask); void bam_plp_set_maxcnt(bam_plp_t iter, int maxcnt); void bam_plp_reset(bam_plp_t iter); void bam_plp_destroy(bam_plp_t iter); struct __bam_mplp_t; typedef struct __bam_mplp_t *bam_mplp_t; bam_mplp_t bam_mplp_init(int n, bam_plp_auto_f func, void **data); void bam_mplp_destroy(bam_mplp_t iter); void bam_mplp_set_maxcnt(bam_mplp_t iter, int maxcnt); int bam_mplp_auto(bam_mplp_t iter, int *_tid, int *_pos, int *n_plp, const bam_pileup1_t **plp); /*! @typedef @abstract Type of function to be called by bam_plbuf_push(). @param tid chromosome ID as is defined in the header @param pos start coordinate of the alignment, 0-based @param n number of elements in pl array @param pl array of alignments @param data user provided data @discussion See also bam_plbuf_push(), bam_plbuf_init() and bam_pileup1_t. */ typedef int (*bam_pileup_f)(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data); typedef struct { bam_plp_t iter; bam_pileup_f func; void *data; } bam_plbuf_t; void bam_plbuf_set_mask(bam_plbuf_t *buf, int mask); void bam_plbuf_reset(bam_plbuf_t *buf); bam_plbuf_t *bam_plbuf_init(bam_pileup_f func, void *data); void bam_plbuf_destroy(bam_plbuf_t *buf); int bam_plbuf_push(const bam1_t *b, bam_plbuf_t *buf); int bam_pileup_file(bamFile fp, int mask, bam_pileup_f func, void *func_data); struct __bam_lplbuf_t; typedef struct __bam_lplbuf_t bam_lplbuf_t; void bam_lplbuf_reset(bam_lplbuf_t *buf); /*! @abstract bam_plbuf_init() equivalent with level calculated. */ bam_lplbuf_t *bam_lplbuf_init(bam_pileup_f func, void *data); /*! @abstract bam_plbuf_destroy() equivalent with level calculated. */ void bam_lplbuf_destroy(bam_lplbuf_t *tv); /*! @abstract bam_plbuf_push() equivalent with level calculated. */ int bam_lplbuf_push(const bam1_t *b, bam_lplbuf_t *buf); /********************* * BAM indexing APIs * *********************/ struct __bam_index_t; typedef struct __bam_index_t bam_index_t; /*! @abstract Build index for a BAM file. @discussion Index file "fn.bai" will be created. @param fn name of the BAM file @return always 0 currently */ int bam_index_build(const char *fn); /*! @abstract Load index from file "fn.bai". @param fn name of the BAM file (NOT the index file) @return pointer to the index structure */ bam_index_t *bam_index_load(const char *fn); /*! @abstract Destroy an index structure. @param idx pointer to the index structure */ void bam_index_destroy(bam_index_t *idx); /*! @typedef @abstract Type of function to be called by bam_fetch(). @param b the alignment @param data user provided data */ typedef int (*bam_fetch_f)(const bam1_t *b, void *data); /*! @abstract Retrieve the alignments that are overlapped with the specified region. @discussion A user defined function will be called for each retrieved alignment ordered by its start position. @param fp BAM file handler @param idx pointer to the alignment index @param tid chromosome ID as is defined in the header @param beg start coordinate, 0-based @param end end coordinate, 0-based @param data user provided data (will be transferred to func) @param func user defined function */ int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func); bam_iter_t bam_iter_query(const bam_index_t *idx, int tid, int beg, int end); int bam_iter_read(bamFile fp, bam_iter_t iter, bam1_t *b); void bam_iter_destroy(bam_iter_t iter); /*! @abstract Parse a region in the format: "chr2:100,000-200,000". @discussion bam_header_t::hash will be initialized if empty. @param header pointer to the header structure @param str string to be parsed @param ref_id the returned chromosome ID @param begin the returned start coordinate @param end the returned end coordinate @return 0 on success; -1 on failure */ int bam_parse_region(bam_header_t *header, const char *str, int *ref_id, int *begin, int *end); /************************** * APIs for optional tags * **************************/ /*! @abstract Retrieve data of a tag @param b pointer to an alignment struct @param tag two-character tag to be retrieved @return pointer to the type and data. The first character is the type that can be 'iIsScCdfAZH'. @discussion Use bam_aux2?() series to convert the returned data to the corresponding type. */ uint8_t *bam_aux_get(const bam1_t *b, const char tag[2]); int32_t bam_aux2i(const uint8_t *s); float bam_aux2f(const uint8_t *s); double bam_aux2d(const uint8_t *s); char bam_aux2A(const uint8_t *s); char *bam_aux2Z(const uint8_t *s); int bam_aux_del(bam1_t *b, uint8_t *s); void bam_aux_append(bam1_t *b, const char tag[2], char type, int len, uint8_t *data); uint8_t *bam_aux_get_core(bam1_t *b, const char tag[2]); // an alias of bam_aux_get() /***************** * Miscellaneous * *****************/ /*! @abstract Calculate the rightmost coordinate of an alignment on the reference genome. @param c pointer to the bam1_core_t structure @param cigar the corresponding CIGAR array (from bam1_t::cigar) @return the rightmost coordinate, 0-based */ uint32_t bam_calend(const bam1_core_t *c, const uint32_t *cigar); /*! @abstract Calculate the length of the query sequence from CIGAR. @param c pointer to the bam1_core_t structure @param cigar the corresponding CIGAR array (from bam1_t::cigar) @return length of the query sequence */ int32_t bam_cigar2qlen(const bam1_core_t *c, const uint32_t *cigar); #ifdef __cplusplus } #endif /*! @abstract Calculate the minimum bin that contains a region [beg,end). @param beg start of the region, 0-based @param end end of the region, 0-based @return bin */ static inline int bam_reg2bin(uint32_t beg, uint32_t end) { --end; if (beg>>14 == end>>14) return 4681 + (beg>>14); if (beg>>17 == end>>17) return 585 + (beg>>17); if (beg>>20 == end>>20) return 73 + (beg>>20); if (beg>>23 == end>>23) return 9 + (beg>>23); if (beg>>26 == end>>26) return 1 + (beg>>26); return 0; } /*! @abstract Copy an alignment @param bdst destination alignment struct @param bsrc source alignment struct @return pointer to the destination alignment struct */ static inline bam1_t *bam_copy1(bam1_t *bdst, const bam1_t *bsrc) { uint8_t *data = bdst->data; int m_data = bdst->m_data; // backup data and m_data if (m_data < bsrc->data_len) { // double the capacity m_data = bsrc->data_len; kroundup32(m_data); data = (uint8_t*)realloc(data, m_data); } memcpy(data, bsrc->data, bsrc->data_len); // copy var-len data *bdst = *bsrc; // copy the rest // restore the backup bdst->m_data = m_data; bdst->data = data; return bdst; } /*! @abstract Duplicate an alignment @param src source alignment struct @return pointer to the destination alignment struct */ static inline bam1_t *bam_dup1(const bam1_t *src) { bam1_t *b; b = bam_init1(); *b = *src; b->m_data = b->data_len; b->data = (uint8_t*)calloc(b->data_len, 1); memcpy(b->data, src->data, b->data_len); return b; } static inline int bam_aux_type2size(int x) { if (x == 'C' || x == 'c' || x == 'A') return 1; else if (x == 'S' || x == 's') return 2; else if (x == 'I' || x == 'i' || x == 'f') return 4; else return 0; } /*@end@*/ #endif genometools-1.5.1/src/external/samtools-0.1.18/bam2bcf.c000066400000000000000000000244111211610345200225030ustar00rootroot00000000000000#include #include #include "bam.h" #include "kstring.h" #include "bam2bcf.h" #include "errmod.h" #include "bcftools/bcf.h" extern void ks_introsort_uint32_t(size_t n, uint32_t a[]); #define CALL_ETA 0.03f #define CALL_MAX 256 #define CALL_DEFTHETA 0.83f #define DEF_MAPQ 20 #define CAP_DIST 25 bcf_callaux_t *bcf_call_init(double theta, int min_baseQ) { bcf_callaux_t *bca; if (theta <= 0.) theta = CALL_DEFTHETA; bca = calloc(1, sizeof(bcf_callaux_t)); bca->capQ = 60; bca->openQ = 40; bca->extQ = 20; bca->tandemQ = 100; bca->min_baseQ = min_baseQ; bca->e = errmod_init(1. - theta); bca->min_frac = 0.002; bca->min_support = 1; return bca; } void bcf_call_destroy(bcf_callaux_t *bca) { if (bca == 0) return; errmod_destroy(bca->e); free(bca->bases); free(bca->inscns); free(bca); } /* ref_base is the 4-bit representation of the reference base. It is * negative if we are looking at an indel. */ int bcf_call_glfgen(int _n, const bam_pileup1_t *pl, int ref_base, bcf_callaux_t *bca, bcf_callret1_t *r) { static int *var_pos = NULL, nvar_pos = 0; int i, n, ref4, is_indel, ori_depth = 0; memset(r, 0, sizeof(bcf_callret1_t)); if (ref_base >= 0) { ref4 = bam_nt16_nt4_table[ref_base]; is_indel = 0; } else ref4 = 4, is_indel = 1; if (_n == 0) return -1; // enlarge the bases array if necessary if (bca->max_bases < _n) { bca->max_bases = _n; kroundup32(bca->max_bases); bca->bases = (uint16_t*)realloc(bca->bases, 2 * bca->max_bases); } // fill the bases array memset(r, 0, sizeof(bcf_callret1_t)); for (i = n = 0; i < _n; ++i) { const bam_pileup1_t *p = pl + i; int q, b, mapQ, baseQ, is_diff, min_dist, seqQ; // set base if (p->is_del || p->is_refskip || (p->b->core.flag&BAM_FUNMAP)) continue; ++ori_depth; baseQ = q = is_indel? p->aux&0xff : (int)bam1_qual(p->b)[p->qpos]; // base/indel quality seqQ = is_indel? (p->aux>>8&0xff) : 99; if (q < bca->min_baseQ) continue; if (q > seqQ) q = seqQ; mapQ = p->b->core.qual < 255? p->b->core.qual : DEF_MAPQ; // special case for mapQ==255 mapQ = mapQ < bca->capQ? mapQ : bca->capQ; if (q > mapQ) q = mapQ; if (q > 63) q = 63; if (q < 4) q = 4; if (!is_indel) { b = bam1_seqi(bam1_seq(p->b), p->qpos); // base b = bam_nt16_nt4_table[b? b : ref_base]; // b is the 2-bit base is_diff = (ref4 < 4 && b == ref4)? 0 : 1; } else { b = p->aux>>16&0x3f; is_diff = (b != 0); } bca->bases[n++] = q<<5 | (int)bam1_strand(p->b)<<4 | b; // collect annotations if (b < 4) r->qsum[b] += q; ++r->anno[0<<2|is_diff<<1|bam1_strand(p->b)]; min_dist = p->b->core.l_qseq - 1 - p->qpos; if (min_dist > p->qpos) min_dist = p->qpos; if (min_dist > CAP_DIST) min_dist = CAP_DIST; r->anno[1<<2|is_diff<<1|0] += baseQ; r->anno[1<<2|is_diff<<1|1] += baseQ * baseQ; r->anno[2<<2|is_diff<<1|0] += mapQ; r->anno[2<<2|is_diff<<1|1] += mapQ * mapQ; r->anno[3<<2|is_diff<<1|0] += min_dist; r->anno[3<<2|is_diff<<1|1] += min_dist * min_dist; } r->depth = n; r->ori_depth = ori_depth; // glfgen errmod_cal(bca->e, n, 5, bca->bases, r->p); // Calculate the Variant Distance Bias (make it optional?) if ( nvar_pos < _n ) { nvar_pos = _n; var_pos = realloc(var_pos,sizeof(int)*nvar_pos); } int alt_dp=0, read_len=0; for (i=0; i<_n; i++) { const bam_pileup1_t *p = pl + i; if ( bam1_seqi(bam1_seq(p->b),p->qpos) == ref_base ) continue; var_pos[alt_dp] = p->qpos; if ( (bam1_cigar(p->b)[0]&BAM_CIGAR_MASK)==4 ) var_pos[alt_dp] -= bam1_cigar(p->b)[0]>>BAM_CIGAR_SHIFT; alt_dp++; read_len += p->b->core.l_qseq; } float mvd=0; int j; n=0; for (i=0; imvd[0] = n ? mvd/n : 0; r->mvd[1] = alt_dp; r->mvd[2] = alt_dp ? read_len/alt_dp : 0; return r->depth; } void calc_vdb(int n, const bcf_callret1_t *calls, bcf_call_t *call) { // Variant distance bias. Samples merged by means of DP-weighted average. float weight=0, tot_prob=0; int i; for (i=0; i2*mu ? 0 : sin(mvd*3.14/2/mu) / (4*mu/3.14); } else { // Scaled gaussian curve, crude approximation, but behaves well. Using fixed depth for bigger depths. if ( dp>5 ) dp = 5; float sigma2 = (read_len/1.9/(dp+1)) * (read_len/1.9/(dp+1)); float norm = 1.125*sqrt(2*3.14*sigma2); float mu = read_len/2.9; if ( mvd < mu ) prob = exp(-(mvd-mu)*(mvd-mu)/2/sigma2)/norm; else prob = exp(-(mvd-mu)*(mvd-mu)/3.125/sigma2)/norm; } //fprintf(stderr,"dp=%d mvd=%d read_len=%d -> prob=%f\n", dp,mvd,read_len,prob); tot_prob += prob*dp; weight += dp; } tot_prob = weight ? tot_prob/weight : 1; //fprintf(stderr,"prob=%f\n", tot_prob); call->vdb = tot_prob; } int bcf_call_combine(int n, const bcf_callret1_t *calls, int ref_base /*4-bit*/, bcf_call_t *call) { int ref4, i, j, qsum[4]; int64_t tmp; if (ref_base >= 0) { call->ori_ref = ref4 = bam_nt16_nt4_table[ref_base]; if (ref4 > 4) ref4 = 4; } else call->ori_ref = -1, ref4 = 0; // calculate qsum memset(qsum, 0, 4 * sizeof(int)); for (i = 0; i < n; ++i) for (j = 0; j < 4; ++j) qsum[j] += calls[i].qsum[j]; for (j = 0; j < 4; ++j) qsum[j] = qsum[j] << 2 | j; // find the top 2 alleles for (i = 1; i < 4; ++i) // insertion sort for (j = i; j > 0 && qsum[j] < qsum[j-1]; --j) tmp = qsum[j], qsum[j] = qsum[j-1], qsum[j-1] = tmp; // set the reference allele and alternative allele(s) for (i = 0; i < 5; ++i) call->a[i] = -1; call->unseen = -1; call->a[0] = ref4; for (i = 3, j = 1; i >= 0; --i) { if ((qsum[i]&3) != ref4) { if (qsum[i]>>2 != 0) call->a[j++] = qsum[i]&3; else break; } } if (ref_base >= 0) { // for SNPs, find the "unseen" base if (((ref4 < 4 && j < 4) || (ref4 == 4 && j < 5)) && i >= 0) call->unseen = j, call->a[j++] = qsum[i]&3; call->n_alleles = j; } else { call->n_alleles = j; if (call->n_alleles == 1) return -1; // no reliable supporting read. stop doing anything } // set the PL array if (call->n < n) { call->n = n; call->PL = realloc(call->PL, 15 * n); } { int x, g[15], z; double sum_min = 0.; x = call->n_alleles * (call->n_alleles + 1) / 2; // get the possible genotypes for (i = z = 0; i < call->n_alleles; ++i) for (j = 0; j <= i; ++j) g[z++] = call->a[j] * 5 + call->a[i]; for (i = 0; i < n; ++i) { uint8_t *PL = call->PL + x * i; const bcf_callret1_t *r = calls + i; float min = 1e37; for (j = 0; j < x; ++j) if (min > r->p[g[j]]) min = r->p[g[j]]; sum_min += min; for (j = 0; j < x; ++j) { int y; y = (int)(r->p[g[j]] - min + .499); if (y > 255) y = 255; PL[j] = y; } } // if (ref_base < 0) fprintf(stderr, "%d,%d,%f,%d\n", call->n_alleles, x, sum_min, call->unseen); call->shift = (int)(sum_min + .499); } // combine annotations memset(call->anno, 0, 16 * sizeof(int)); for (i = call->depth = call->ori_depth = 0, tmp = 0; i < n; ++i) { call->depth += calls[i].depth; call->ori_depth += calls[i].ori_depth; for (j = 0; j < 16; ++j) call->anno[j] += calls[i].anno[j]; } calc_vdb(n, calls, call); return 0; } int bcf_call2bcf(int tid, int pos, bcf_call_t *bc, bcf1_t *b, bcf_callret1_t *bcr, int is_SP, const bcf_callaux_t *bca, const char *ref) { extern double kt_fisher_exact(int n11, int n12, int n21, int n22, double *_left, double *_right, double *two); kstring_t s; int i, j; b->n_smpl = bc->n; b->tid = tid; b->pos = pos; b->qual = 0; s.s = b->str; s.m = b->m_str; s.l = 0; kputc('\0', &s); if (bc->ori_ref < 0) { // an indel // write REF kputc(ref[pos], &s); for (j = 0; j < bca->indelreg; ++j) kputc(ref[pos+1+j], &s); kputc('\0', &s); // write ALT kputc(ref[pos], &s); for (i = 1; i < 4; ++i) { if (bc->a[i] < 0) break; if (i > 1) { kputc(',', &s); kputc(ref[pos], &s); } if (bca->indel_types[bc->a[i]] < 0) { // deletion for (j = -bca->indel_types[bc->a[i]]; j < bca->indelreg; ++j) kputc(ref[pos+1+j], &s); } else { // insertion; cannot be a reference unless a bug char *inscns = &bca->inscns[bc->a[i] * bca->maxins]; for (j = 0; j < bca->indel_types[bc->a[i]]; ++j) kputc("ACGTN"[(int)inscns[j]], &s); for (j = 0; j < bca->indelreg; ++j) kputc(ref[pos+1+j], &s); } } kputc('\0', &s); } else { // a SNP kputc("ACGTN"[bc->ori_ref], &s); kputc('\0', &s); for (i = 1; i < 5; ++i) { if (bc->a[i] < 0) break; if (i > 1) kputc(',', &s); kputc(bc->unseen == i? 'X' : "ACGT"[bc->a[i]], &s); } kputc('\0', &s); } kputc('\0', &s); // INFO if (bc->ori_ref < 0) kputs("INDEL;", &s); kputs("DP=", &s); kputw(bc->ori_depth, &s); kputs(";I16=", &s); for (i = 0; i < 16; ++i) { if (i) kputc(',', &s); kputw(bc->anno[i], &s); } if ( bc->vdb!=1 ) { ksprintf(&s, ";VDB=%.4f", bc->vdb); } kputc('\0', &s); // FMT kputs("PL", &s); if (bcr) { kputs(":DP", &s); if (is_SP) kputs(":SP", &s); } kputc('\0', &s); b->m_str = s.m; b->str = s.s; b->l_str = s.l; bcf_sync(b); memcpy(b->gi[0].data, bc->PL, b->gi[0].len * bc->n); if (bcr) { uint16_t *dp = (uint16_t*)b->gi[1].data; int32_t *sp = is_SP? b->gi[2].data : 0; for (i = 0; i < bc->n; ++i) { bcf_callret1_t *p = bcr + i; dp[i] = p->depth < 0xffff? p->depth : 0xffff; if (is_SP) { if (p->anno[0] + p->anno[1] < 2 || p->anno[2] + p->anno[3] < 2 || p->anno[0] + p->anno[2] < 2 || p->anno[1] + p->anno[3] < 2) { sp[i] = 0; } else { double left, right, two; int x; kt_fisher_exact(p->anno[0], p->anno[1], p->anno[2], p->anno[3], &left, &right, &two); x = (int)(-4.343 * log(two) + .499); if (x > 255) x = 255; sp[i] = x; } } } } return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bam2bcf.h000066400000000000000000000030311211610345200225030ustar00rootroot00000000000000#ifndef BAM2BCF_H #define BAM2BCF_H #include #include "errmod.h" #include "bcftools/bcf.h" #define B2B_INDEL_NULL 10000 typedef struct __bcf_callaux_t { int capQ, min_baseQ; int openQ, extQ, tandemQ; // for indels int min_support; // for collecting indel candidates double min_frac; // for collecting indel candidates // for internal uses int max_bases; int indel_types[4]; int maxins, indelreg; char *inscns; uint16_t *bases; errmod_t *e; void *rghash; } bcf_callaux_t; typedef struct { int depth, ori_depth, qsum[4]; int anno[16]; float p[25]; int mvd[3]; // mean variant distance, number of variant reads, average read length } bcf_callret1_t; typedef struct { int a[5]; // alleles: ref, alt, alt2, alt3 int n, n_alleles, shift, ori_ref, unseen; int anno[16], depth, ori_depth; uint8_t *PL; float vdb; // variant distance bias } bcf_call_t; #ifdef __cplusplus extern "C" { #endif bcf_callaux_t *bcf_call_init(double theta, int min_baseQ); void bcf_call_destroy(bcf_callaux_t *bca); int bcf_call_glfgen(int _n, const bam_pileup1_t *pl, int ref_base, bcf_callaux_t *bca, bcf_callret1_t *r); int bcf_call_combine(int n, const bcf_callret1_t *calls, int ref_base /*4-bit*/, bcf_call_t *call); int bcf_call2bcf(int tid, int pos, bcf_call_t *bc, bcf1_t *b, bcf_callret1_t *bcr, int is_SP, const bcf_callaux_t *bca, const char *ref); int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref, const void *rghash); #ifdef __cplusplus } #endif #endif genometools-1.5.1/src/external/samtools-0.1.18/bam2bcf_indel.c000066400000000000000000000414201211610345200236550ustar00rootroot00000000000000#include #include #include #include "bam.h" #include "bam2bcf.h" #include "kaln.h" #include "kprobaln.h" #include "khash.h" KHASH_SET_INIT_STR(rg) #include "ksort.h" KSORT_INIT_GENERIC(uint32_t) #define MINUS_CONST 0x10000000 #define INDEL_WINDOW_SIZE 50 void *bcf_call_add_rg(void *_hash, const char *hdtext, const char *list) { const char *s, *p, *q, *r, *t; khash_t(rg) *hash; if (list == 0 || hdtext == 0) return _hash; if (_hash == 0) _hash = kh_init(rg); hash = (khash_t(rg)*)_hash; if ((s = strstr(hdtext, "@RG\t")) == 0) return hash; do { t = strstr(s + 4, "@RG\t"); // the next @RG if ((p = strstr(s, "\tID:")) != 0) p += 4; if ((q = strstr(s, "\tPL:")) != 0) q += 4; if (p && q && (t == 0 || (p < t && q < t))) { // ID and PL are both present int lp, lq; char *x; for (r = p; *r && *r != '\t' && *r != '\n'; ++r); lp = r - p; for (r = q; *r && *r != '\t' && *r != '\n'; ++r); lq = r - q; x = calloc((lp > lq? lp : lq) + 1, 1); for (r = q; *r && *r != '\t' && *r != '\n'; ++r) x[r-q] = *r; if (strstr(list, x)) { // insert ID to the hash table khint_t k; int ret; for (r = p; *r && *r != '\t' && *r != '\n'; ++r) x[r-p] = *r; x[r-p] = 0; k = kh_get(rg, hash, x); if (k == kh_end(hash)) k = kh_put(rg, hash, x, &ret); else free(x); } else free(x); } s = t; } while (s); return hash; } void bcf_call_del_rghash(void *_hash) { khint_t k; khash_t(rg) *hash = (khash_t(rg)*)_hash; if (hash == 0) return; for (k = kh_begin(hash); k < kh_end(hash); ++k) if (kh_exist(hash, k)) free((char*)kh_key(hash, k)); kh_destroy(rg, hash); } static int tpos2qpos(const bam1_core_t *c, const uint32_t *cigar, int32_t tpos, int is_left, int32_t *_tpos) { int k, x = c->pos, y = 0, last_y = 0; *_tpos = c->pos; for (k = 0; k < c->n_cigar; ++k) { int op = cigar[k] & BAM_CIGAR_MASK; int l = cigar[k] >> BAM_CIGAR_SHIFT; if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { if (c->pos > tpos) return y; if (x + l > tpos) { *_tpos = tpos; return y + (tpos - x); } x += l; y += l; last_y = y; } else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; else if (op == BAM_CDEL || op == BAM_CREF_SKIP) { if (x + l > tpos) { *_tpos = is_left? x : x + l; return y; } x += l; } } *_tpos = x; return last_y; } // FIXME: check if the inserted sequence is consistent with the homopolymer run // l is the relative gap length and l_run is the length of the homopolymer on the reference static inline int est_seqQ(const bcf_callaux_t *bca, int l, int l_run) { int q, qh; q = bca->openQ + bca->extQ * (abs(l) - 1); qh = l_run >= 3? (int)(bca->tandemQ * (double)abs(l) / l_run + .499) : 1000; return q < qh? q : qh; } static inline int est_indelreg(int pos, const char *ref, int l, char *ins4) { int i, j, max = 0, max_i = pos, score = 0; l = abs(l); for (i = pos + 1, j = 0; ref[i]; ++i, ++j) { if (ins4) score += (toupper(ref[i]) != "ACGTN"[(int)ins4[j%l]])? -10 : 1; else score += (toupper(ref[i]) != toupper(ref[pos+1+j%l]))? -10 : 1; if (score < 0) break; if (max < score) max = score, max_i = i; } return max_i - pos; } int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref, const void *rghash) { int i, s, j, k, t, n_types, *types, max_rd_len, left, right, max_ins, *score1, *score2, max_ref2; int N, K, l_run, ref_type, n_alt; char *inscns = 0, *ref2, *query, **ref_sample; khash_t(rg) *hash = (khash_t(rg)*)rghash; if (ref == 0 || bca == 0) return -1; // mark filtered reads if (rghash) { N = 0; for (s = N = 0; s < n; ++s) { for (i = 0; i < n_plp[s]; ++i) { bam_pileup1_t *p = plp[s] + i; const uint8_t *rg = bam_aux_get(p->b, "RG"); p->aux = 1; // filtered by default if (rg) { khint_t k = kh_get(rg, hash, (const char*)(rg + 1)); if (k != kh_end(hash)) p->aux = 0, ++N; // not filtered } } } if (N == 0) return -1; // no reads left } // determine if there is a gap for (s = N = 0; s < n; ++s) { for (i = 0; i < n_plp[s]; ++i) if (plp[s][i].indel != 0) break; if (i < n_plp[s]) break; } if (s == n) return -1; // there is no indel at this position. for (s = N = 0; s < n; ++s) N += n_plp[s]; // N is the total number of reads { // find out how many types of indels are present int m, n_alt = 0, n_tot = 0; uint32_t *aux; aux = calloc(N + 1, 4); m = max_rd_len = 0; aux[m++] = MINUS_CONST; // zero indel is always a type for (s = 0; s < n; ++s) { for (i = 0; i < n_plp[s]; ++i) { const bam_pileup1_t *p = plp[s] + i; if (rghash == 0 || p->aux == 0) { ++n_tot; if (p->indel != 0) { ++n_alt; aux[m++] = MINUS_CONST + p->indel; } } j = bam_cigar2qlen(&p->b->core, bam1_cigar(p->b)); if (j > max_rd_len) max_rd_len = j; } } ks_introsort(uint32_t, m, aux); // squeeze out identical types for (i = 1, n_types = 1; i < m; ++i) if (aux[i] != aux[i-1]) ++n_types; if (n_types == 1 || (double)n_alt / n_tot < bca->min_frac || n_alt < bca->min_support) { // then skip free(aux); return -1; } if (n_types >= 64) { free(aux); if (bam_verbose >= 2) fprintf(stderr, "[%s] excessive INDEL alleles at position %d. Skip the position.\n", __func__, pos + 1); return -1; } types = (int*)calloc(n_types, sizeof(int)); t = 0; types[t++] = aux[0] - MINUS_CONST; for (i = 1; i < m; ++i) if (aux[i] != aux[i-1]) types[t++] = aux[i] - MINUS_CONST; free(aux); for (t = 0; t < n_types; ++t) if (types[t] == 0) break; ref_type = t; // the index of the reference type (0) } { // calculate left and right boundary left = pos > INDEL_WINDOW_SIZE? pos - INDEL_WINDOW_SIZE : 0; right = pos + INDEL_WINDOW_SIZE; if (types[0] < 0) right -= types[0]; // in case the alignments stand out the reference for (i = pos; i < right; ++i) if (ref[i] == 0) break; right = i; } /* The following block fixes a long-existing flaw in the INDEL * calling model: the interference of nearby SNPs. However, it also * reduces the power because sometimes, substitutions caused by * indels are not distinguishable from true mutations. Multiple * sequence realignment helps to increase the power. */ { // construct per-sample consensus int L = right - left + 1, max_i, max2_i; uint32_t *cns, max, max2; char *ref0, *r; ref_sample = calloc(n, sizeof(void*)); cns = calloc(L, 4); ref0 = calloc(L, 1); for (i = 0; i < right - left; ++i) ref0[i] = bam_nt16_table[(int)ref[i+left]]; for (s = 0; s < n; ++s) { r = ref_sample[s] = calloc(L, 1); memset(cns, 0, sizeof(int) * L); // collect ref and non-ref counts for (i = 0; i < n_plp[s]; ++i) { bam_pileup1_t *p = plp[s] + i; bam1_t *b = p->b; uint32_t *cigar = bam1_cigar(b); uint8_t *seq = bam1_seq(b); int x = b->core.pos, y = 0; for (k = 0; k < b->core.n_cigar; ++k) { int op = cigar[k]&0xf; int j, l = cigar[k]>>4; if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { for (j = 0; j < l; ++j) if (x + j >= left && x + j < right) cns[x+j-left] += (bam1_seqi(seq, y+j) == ref0[x+j-left])? 1 : 0x10000; x += l; y += l; } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) x += l; else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; } } // determine the consensus for (i = 0; i < right - left; ++i) r[i] = ref0[i]; max = max2 = 0; max_i = max2_i = -1; for (i = 0; i < right - left; ++i) { if (cns[i]>>16 >= max>>16) max2 = max, max2_i = max_i, max = cns[i], max_i = i; else if (cns[i]>>16 >= max2>>16) max2 = cns[i], max2_i = i; } if ((double)(max&0xffff) / ((max&0xffff) + (max>>16)) >= 0.7) max_i = -1; if ((double)(max2&0xffff) / ((max2&0xffff) + (max2>>16)) >= 0.7) max2_i = -1; if (max_i >= 0) r[max_i] = 15; if (max2_i >= 0) r[max2_i] = 15; // for (i = 0; i < right - left; ++i) fputc("=ACMGRSVTWYHKDBN"[(int)r[i]], stderr); fputc('\n', stderr); } free(ref0); free(cns); } { // the length of the homopolymer run around the current position int c = bam_nt16_table[(int)ref[pos + 1]]; if (c == 15) l_run = 1; else { for (i = pos + 2; ref[i]; ++i) if (bam_nt16_table[(int)ref[i]] != c) break; l_run = i; for (i = pos; i >= 0; --i) if (bam_nt16_table[(int)ref[i]] != c) break; l_run -= i + 1; } } // construct the consensus sequence max_ins = types[n_types - 1]; // max_ins is at least 0 if (max_ins > 0) { int *inscns_aux = calloc(4 * n_types * max_ins, sizeof(int)); // count the number of occurrences of each base at each position for each type of insertion for (t = 0; t < n_types; ++t) { if (types[t] > 0) { for (s = 0; s < n; ++s) { for (i = 0; i < n_plp[s]; ++i) { bam_pileup1_t *p = plp[s] + i; if (p->indel == types[t]) { uint8_t *seq = bam1_seq(p->b); for (k = 1; k <= p->indel; ++k) { int c = bam_nt16_nt4_table[bam1_seqi(seq, p->qpos + k)]; if (c < 4) ++inscns_aux[(t*max_ins+(k-1))*4 + c]; } } } } } } // use the majority rule to construct the consensus inscns = calloc(n_types * max_ins, 1); for (t = 0; t < n_types; ++t) { for (j = 0; j < types[t]; ++j) { int max = 0, max_k = -1, *ia = &inscns_aux[(t*max_ins+j)*4]; for (k = 0; k < 4; ++k) if (ia[k] > max) max = ia[k], max_k = k; inscns[t*max_ins + j] = max? max_k : 4; } } free(inscns_aux); } // compute the likelihood given each type of indel for each read max_ref2 = right - left + 2 + 2 * (max_ins > -types[0]? max_ins : -types[0]); ref2 = calloc(max_ref2, 1); query = calloc(right - left + max_rd_len + max_ins + 2, 1); score1 = calloc(N * n_types, sizeof(int)); score2 = calloc(N * n_types, sizeof(int)); bca->indelreg = 0; for (t = 0; t < n_types; ++t) { int l, ir; kpa_par_t apf1 = { 1e-4, 1e-2, 10 }, apf2 = { 1e-6, 1e-3, 10 }; apf1.bw = apf2.bw = abs(types[t]) + 3; // compute indelreg if (types[t] == 0) ir = 0; else if (types[t] > 0) ir = est_indelreg(pos, ref, types[t], &inscns[t*max_ins]); else ir = est_indelreg(pos, ref, -types[t], 0); if (ir > bca->indelreg) bca->indelreg = ir; // fprintf(stderr, "%d, %d, %d\n", pos, types[t], ir); // realignment for (s = K = 0; s < n; ++s) { // write ref2 for (k = 0, j = left; j <= pos; ++j) ref2[k++] = bam_nt16_nt4_table[(int)ref_sample[s][j-left]]; if (types[t] <= 0) j += -types[t]; else for (l = 0; l < types[t]; ++l) ref2[k++] = inscns[t*max_ins + l]; for (; j < right && ref[j]; ++j) ref2[k++] = bam_nt16_nt4_table[(int)ref_sample[s][j-left]]; for (; k < max_ref2; ++k) ref2[k] = 4; if (j < right) right = j; // align each read to ref2 for (i = 0; i < n_plp[s]; ++i, ++K) { bam_pileup1_t *p = plp[s] + i; int qbeg, qend, tbeg, tend, sc, kk; uint8_t *seq = bam1_seq(p->b); uint32_t *cigar = bam1_cigar(p->b); if (p->b->core.flag&4) continue; // unmapped reads // FIXME: the following loop should be better moved outside; nonetheless, realignment should be much slower anyway. for (kk = 0; kk < p->b->core.n_cigar; ++kk) if ((cigar[kk]&BAM_CIGAR_MASK) == BAM_CREF_SKIP) break; if (kk < p->b->core.n_cigar) continue; // FIXME: the following skips soft clips, but using them may be more sensitive. // determine the start and end of sequences for alignment qbeg = tpos2qpos(&p->b->core, bam1_cigar(p->b), left, 0, &tbeg); qend = tpos2qpos(&p->b->core, bam1_cigar(p->b), right, 1, &tend); if (types[t] < 0) { int l = -types[t]; tbeg = tbeg - l > left? tbeg - l : left; } // write the query sequence for (l = qbeg; l < qend; ++l) query[l - qbeg] = bam_nt16_nt4_table[bam1_seqi(seq, l)]; { // do realignment; this is the bottleneck const uint8_t *qual = bam1_qual(p->b), *bq; uint8_t *qq; qq = calloc(qend - qbeg, 1); bq = (uint8_t*)bam_aux_get(p->b, "ZQ"); if (bq) ++bq; // skip type for (l = qbeg; l < qend; ++l) { qq[l - qbeg] = bq? qual[l] + (bq[l] - 64) : qual[l]; if (qq[l - qbeg] > 30) qq[l - qbeg] = 30; if (qq[l - qbeg] < 7) qq[l - qbeg] = 7; } sc = kpa_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]), (uint8_t*)query, qend - qbeg, qq, &apf1, 0, 0); l = (int)(100. * sc / (qend - qbeg) + .499); // used for adjusting indelQ below if (l > 255) l = 255; score1[K*n_types + t] = score2[K*n_types + t] = sc<<8 | l; if (sc > 5) { sc = kpa_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]), (uint8_t*)query, qend - qbeg, qq, &apf2, 0, 0); l = (int)(100. * sc / (qend - qbeg) + .499); if (l > 255) l = 255; score2[K*n_types + t] = sc<<8 | l; } free(qq); } /* for (l = 0; l < tend - tbeg + abs(types[t]); ++l) fputc("ACGTN"[(int)ref2[tbeg-left+l]], stderr); fputc('\n', stderr); for (l = 0; l < qend - qbeg; ++l) fputc("ACGTN"[(int)query[l]], stderr); fputc('\n', stderr); fprintf(stderr, "pos=%d type=%d read=%d:%d name=%s qbeg=%d tbeg=%d score=%d\n", pos, types[t], s, i, bam1_qname(p->b), qbeg, tbeg, sc); */ } } } free(ref2); free(query); { // compute indelQ int *sc, tmp, *sumq; sc = alloca(n_types * sizeof(int)); sumq = alloca(n_types * sizeof(int)); memset(sumq, 0, sizeof(int) * n_types); for (s = K = 0; s < n; ++s) { for (i = 0; i < n_plp[s]; ++i, ++K) { bam_pileup1_t *p = plp[s] + i; int *sct = &score1[K*n_types], indelQ1, indelQ2, seqQ, indelQ; for (t = 0; t < n_types; ++t) sc[t] = sct[t]<<6 | t; for (t = 1; t < n_types; ++t) // insertion sort for (j = t; j > 0 && sc[j] < sc[j-1]; --j) tmp = sc[j], sc[j] = sc[j-1], sc[j-1] = tmp; /* errmod_cal() assumes that if the call is wrong, the * likelihoods of other events are equal. This is about * right for substitutions, but is not desired for * indels. To reuse errmod_cal(), I have to make * compromise for multi-allelic indels. */ if ((sc[0]&0x3f) == ref_type) { indelQ1 = (sc[1]>>14) - (sc[0]>>14); seqQ = est_seqQ(bca, types[sc[1]&0x3f], l_run); } else { for (t = 0; t < n_types; ++t) // look for the reference type if ((sc[t]&0x3f) == ref_type) break; indelQ1 = (sc[t]>>14) - (sc[0]>>14); seqQ = est_seqQ(bca, types[sc[0]&0x3f], l_run); } tmp = sc[0]>>6 & 0xff; indelQ1 = tmp > 111? 0 : (int)((1. - tmp/111.) * indelQ1 + .499); // reduce indelQ sct = &score2[K*n_types]; for (t = 0; t < n_types; ++t) sc[t] = sct[t]<<6 | t; for (t = 1; t < n_types; ++t) // insertion sort for (j = t; j > 0 && sc[j] < sc[j-1]; --j) tmp = sc[j], sc[j] = sc[j-1], sc[j-1] = tmp; if ((sc[0]&0x3f) == ref_type) { indelQ2 = (sc[1]>>14) - (sc[0]>>14); } else { for (t = 0; t < n_types; ++t) // look for the reference type if ((sc[t]&0x3f) == ref_type) break; indelQ2 = (sc[t]>>14) - (sc[0]>>14); } tmp = sc[0]>>6 & 0xff; indelQ2 = tmp > 111? 0 : (int)((1. - tmp/111.) * indelQ2 + .499); // pick the smaller between indelQ1 and indelQ2 indelQ = indelQ1 < indelQ2? indelQ1 : indelQ2; if (indelQ > 255) indelQ = 255; if (seqQ > 255) seqQ = 255; p->aux = (sc[0]&0x3f)<<16 | seqQ<<8 | indelQ; // use 22 bits in total sumq[sc[0]&0x3f] += indelQ < seqQ? indelQ : seqQ; // fprintf(stderr, "pos=%d read=%d:%d name=%s call=%d indelQ=%d seqQ=%d\n", pos, s, i, bam1_qname(p->b), types[sc[0]&0x3f], indelQ, seqQ); } } // determine bca->indel_types[] and bca->inscns bca->maxins = max_ins; bca->inscns = realloc(bca->inscns, bca->maxins * 4); for (t = 0; t < n_types; ++t) sumq[t] = sumq[t]<<6 | t; for (t = 1; t < n_types; ++t) // insertion sort for (j = t; j > 0 && sumq[j] > sumq[j-1]; --j) tmp = sumq[j], sumq[j] = sumq[j-1], sumq[j-1] = tmp; for (t = 0; t < n_types; ++t) // look for the reference type if ((sumq[t]&0x3f) == ref_type) break; if (t) { // then move the reference type to the first tmp = sumq[t]; for (; t > 0; --t) sumq[t] = sumq[t-1]; sumq[0] = tmp; } for (t = 0; t < 4; ++t) bca->indel_types[t] = B2B_INDEL_NULL; for (t = 0; t < 4 && t < n_types; ++t) { bca->indel_types[t] = types[sumq[t]&0x3f]; memcpy(&bca->inscns[t * bca->maxins], &inscns[(sumq[t]&0x3f) * max_ins], bca->maxins); } // update p->aux for (s = n_alt = 0; s < n; ++s) { for (i = 0; i < n_plp[s]; ++i) { bam_pileup1_t *p = plp[s] + i; int x = types[p->aux>>16&0x3f]; for (j = 0; j < 4; ++j) if (x == bca->indel_types[j]) break; p->aux = j<<16 | (j == 4? 0 : (p->aux&0xffff)); if ((p->aux>>16&0x3f) > 0) ++n_alt; // fprintf(stderr, "X pos=%d read=%d:%d name=%s call=%d type=%d q=%d seqQ=%d\n", pos, s, i, bam1_qname(p->b), p->aux>>16&63, bca->indel_types[p->aux>>16&63], p->aux&0xff, p->aux>>8&0xff); } } } free(score1); free(score2); // free for (i = 0; i < n; ++i) free(ref_sample[i]); free(ref_sample); free(types); free(inscns); return n_alt > 0? 0 : -1; } genometools-1.5.1/src/external/samtools-0.1.18/bam2depth.c000066400000000000000000000107061211610345200230570ustar00rootroot00000000000000/* This program demonstrates how to generate pileup from multiple BAMs * simutaneously, to achieve random access and to use the BED interface. * To compile this program separately, you may: * * gcc -g -O2 -Wall -o bam2depth -D_MAIN_BAM2DEPTH bam2depth.c -L. -lbam -lz */ #include #include #include #include #include "bam.h" typedef struct { // auxiliary data structure bamFile fp; // the file handler bam_iter_t iter; // NULL if a region not specified int min_mapQ; // mapQ filter } aux_t; void *bed_read(const char *fn); // read a BED or position list file void bed_destroy(void *_h); // destroy the BED data structure int bed_overlap(const void *_h, const char *chr, int beg, int end); // test if chr:beg-end overlaps // This function reads a BAM alignment from one BAM file. static int read_bam(void *data, bam1_t *b) // read level filters better go here to avoid pileup { aux_t *aux = (aux_t*)data; // data in fact is a pointer to an auxiliary structure int ret = aux->iter? bam_iter_read(aux->fp, aux->iter, b) : bam_read1(aux->fp, b); if ((int)b->core.qual < aux->min_mapQ) b->core.flag |= BAM_FUNMAP; return ret; } #ifdef _MAIN_BAM2DEPTH int main(int argc, char *argv[]) #else int main_depth(int argc, char *argv[]) #endif { int i, n, tid, beg, end, pos, *n_plp, baseQ = 0, mapQ = 0; const bam_pileup1_t **plp; char *reg = 0; // specified region void *bed = 0; // BED data structure bam_header_t *h = 0; // BAM header of the 1st input aux_t **data; bam_mplp_t mplp; // parse the command line while ((n = getopt(argc, argv, "r:b:q:Q:")) >= 0) { switch (n) { case 'r': reg = strdup(optarg); break; // parsing a region requires a BAM header case 'b': bed = bed_read(optarg); break; // BED or position list file can be parsed now case 'q': baseQ = atoi(optarg); break; // base quality threshold case 'Q': mapQ = atoi(optarg); break; // mapping quality threshold } } if (optind == argc) { fprintf(stderr, "Usage: bam2depth [-r reg] [-q baseQthres] [-Q mapQthres] [-b in.bed] [...]\n"); return 1; } // initialize the auxiliary data structures n = argc - optind; // the number of BAMs on the command line data = calloc(n, sizeof(void*)); // data[i] for the i-th input beg = 0; end = 1<<30; tid = -1; // set the default region for (i = 0; i < n; ++i) { bam_header_t *htmp; data[i] = calloc(1, sizeof(aux_t)); data[i]->fp = bam_open(argv[optind+i], "r"); // open BAM data[i]->min_mapQ = mapQ; // set the mapQ filter htmp = bam_header_read(data[i]->fp); // read the BAM header if (i == 0) { h = htmp; // keep the header of the 1st BAM if (reg) bam_parse_region(h, reg, &tid, &beg, &end); // also parse the region } else bam_header_destroy(htmp); // if not the 1st BAM, trash the header if (tid >= 0) { // if a region is specified and parsed successfully bam_index_t *idx = bam_index_load(argv[optind+i]); // load the index data[i]->iter = bam_iter_query(idx, tid, beg, end); // set the iterator bam_index_destroy(idx); // the index is not needed any more; phase out of the memory } } // the core multi-pileup loop mplp = bam_mplp_init(n, read_bam, (void**)data); // initialization n_plp = calloc(n, sizeof(int)); // n_plp[i] is the number of covering reads from the i-th BAM plp = calloc(n, sizeof(void*)); // plp[i] points to the array of covering reads (internal in mplp) while (bam_mplp_auto(mplp, &tid, &pos, n_plp, plp) > 0) { // come to the next covered position if (pos < beg || pos >= end) continue; // out of range; skip if (bed && bed_overlap(bed, h->target_name[tid], pos, pos + 1) == 0) continue; // not in BED; skip fputs(h->target_name[tid], stdout); printf("\t%d", pos+1); // a customized printf() would be faster for (i = 0; i < n; ++i) { // base level filters have to go here int j, m = 0; for (j = 0; j < n_plp[i]; ++j) { const bam_pileup1_t *p = plp[i] + j; // DON'T modfity plp[][] unless you really know if (p->is_del || p->is_refskip) ++m; // having dels or refskips at tid:pos else if (bam1_qual(p->b)[p->qpos] < baseQ) ++m; // low base quality } printf("\t%d", n_plp[i] - m); // this the depth to output } putchar('\n'); } free(n_plp); free(plp); bam_mplp_destroy(mplp); bam_header_destroy(h); for (i = 0; i < n; ++i) { bam_close(data[i]->fp); if (data[i]->iter) bam_iter_destroy(data[i]->iter); free(data[i]); } free(data); free(reg); if (bed) bed_destroy(bed); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bam_aux.c000066400000000000000000000116111211610345200226210ustar00rootroot00000000000000#include #include "bam.h" #include "khash.h" typedef char *str_p; KHASH_MAP_INIT_STR(s, int) KHASH_MAP_INIT_STR(r2l, str_p) void bam_aux_append(bam1_t *b, const char tag[2], char type, int len, uint8_t *data) { int ori_len = b->data_len; b->data_len += 3 + len; b->l_aux += 3 + len; if (b->m_data < b->data_len) { b->m_data = b->data_len; kroundup32(b->m_data); b->data = (uint8_t*)realloc(b->data, b->m_data); } b->data[ori_len] = tag[0]; b->data[ori_len + 1] = tag[1]; b->data[ori_len + 2] = type; memcpy(b->data + ori_len + 3, data, len); } uint8_t *bam_aux_get_core(bam1_t *b, const char tag[2]) { return bam_aux_get(b, tag); } #define __skip_tag(s) do { \ int type = toupper(*(s)); \ ++(s); \ if (type == 'Z' || type == 'H') { while (*(s)) ++(s); ++(s); } \ else if (type == 'B') (s) += 5 + bam_aux_type2size(*(s)) * (*(int32_t*)((s)+1)); \ else (s) += bam_aux_type2size(type); \ } while(0) uint8_t *bam_aux_get(const bam1_t *b, const char tag[2]) { uint8_t *s; int y = tag[0]<<8 | tag[1]; s = bam1_aux(b); while (s < b->data + b->data_len) { int x = (int)s[0]<<8 | s[1]; s += 2; if (x == y) return s; __skip_tag(s); } return 0; } // s MUST BE returned by bam_aux_get() int bam_aux_del(bam1_t *b, uint8_t *s) { uint8_t *p, *aux; aux = bam1_aux(b); p = s - 2; __skip_tag(s); memmove(p, s, b->l_aux - (s - aux)); b->data_len -= s - p; b->l_aux -= s - p; return 0; } int bam_aux_drop_other(bam1_t *b, uint8_t *s) { if (s) { uint8_t *p, *aux; aux = bam1_aux(b); p = s - 2; __skip_tag(s); memmove(aux, p, s - p); b->data_len -= b->l_aux - (s - p); b->l_aux = s - p; } else { b->data_len -= b->l_aux; b->l_aux = 0; } return 0; } void bam_init_header_hash(bam_header_t *header) { if (header->hash == 0) { int ret, i; khiter_t iter; khash_t(s) *h; header->hash = h = kh_init(s); for (i = 0; i < header->n_targets; ++i) { iter = kh_put(s, h, header->target_name[i], &ret); kh_value(h, iter) = i; } } } void bam_destroy_header_hash(bam_header_t *header) { if (header->hash) kh_destroy(s, (khash_t(s)*)header->hash); } int32_t bam_get_tid(const bam_header_t *header, const char *seq_name) { khint_t k; khash_t(s) *h = (khash_t(s)*)header->hash; k = kh_get(s, h, seq_name); return k == kh_end(h)? -1 : kh_value(h, k); } int bam_parse_region(bam_header_t *header, const char *str, int *ref_id, int *beg, int *end) { char *s; int i, l, k, name_end; khiter_t iter; khash_t(s) *h; bam_init_header_hash(header); h = (khash_t(s)*)header->hash; *ref_id = *beg = *end = -1; name_end = l = strlen(str); s = (char*)malloc(l+1); // remove space for (i = k = 0; i < l; ++i) if (!isspace(str[i])) s[k++] = str[i]; s[k] = 0; l = k; // determine the sequence name for (i = l - 1; i >= 0; --i) if (s[i] == ':') break; // look for colon from the end if (i >= 0) name_end = i; if (name_end < l) { // check if this is really the end int n_hyphen = 0; for (i = name_end + 1; i < l; ++i) { if (s[i] == '-') ++n_hyphen; else if (!isdigit(s[i]) && s[i] != ',') break; } if (i < l || n_hyphen > 1) name_end = l; // malformated region string; then take str as the name s[name_end] = 0; iter = kh_get(s, h, s); if (iter == kh_end(h)) { // cannot find the sequence name iter = kh_get(s, h, str); // try str as the name if (iter == kh_end(h)) { if (bam_verbose >= 2) fprintf(stderr, "[%s] fail to determine the sequence name.\n", __func__); free(s); return -1; } else s[name_end] = ':', name_end = l; } } else iter = kh_get(s, h, str); *ref_id = kh_val(h, iter); // parse the interval if (name_end < l) { for (i = k = name_end + 1; i < l; ++i) if (s[i] != ',') s[k++] = s[i]; s[k] = 0; *beg = atoi(s + name_end + 1); for (i = name_end + 1; i != k; ++i) if (s[i] == '-') break; *end = i < k? atoi(s + i + 1) : 1<<29; if (*beg > 0) --*beg; } else *beg = 0, *end = 1<<29; free(s); return *beg <= *end? 0 : -1; } int32_t bam_aux2i(const uint8_t *s) { int type; if (s == 0) return 0; type = *s++; if (type == 'c') return (int32_t)*(int8_t*)s; else if (type == 'C') return (int32_t)*(uint8_t*)s; else if (type == 's') return (int32_t)*(int16_t*)s; else if (type == 'S') return (int32_t)*(uint16_t*)s; else if (type == 'i' || type == 'I') return *(int32_t*)s; else return 0; } float bam_aux2f(const uint8_t *s) { int type; type = *s++; if (s == 0) return 0.0; if (type == 'f') return *(float*)s; else return 0.0; } double bam_aux2d(const uint8_t *s) { int type; type = *s++; if (s == 0) return 0.0; if (type == 'd') return *(double*)s; else return 0.0; } char bam_aux2A(const uint8_t *s) { int type; type = *s++; if (s == 0) return 0; if (type == 'A') return *(char*)s; else return 0; } char *bam_aux2Z(const uint8_t *s) { int type; type = *s++; if (s == 0) return 0; if (type == 'Z' || type == 'H') return (char*)s; else return 0; } #ifdef _WIN32 double drand48() { return (double)rand() / RAND_MAX; } #endif genometools-1.5.1/src/external/samtools-0.1.18/bam_cat.c000066400000000000000000000132401211610345200225730ustar00rootroot00000000000000/* bam_cat -- efficiently concatenates bam files bam_cat can be used to concatenate BAM files. Under special circumstances, it can be used as an alternative to 'samtools merge' to concatenate multiple sorted files into a single sorted file. For this to work each file must be sorted, and the sorted files must be given as command line arguments in order such that the final read in file i is less than or equal to the first read in file i+1. This code is derived from the bam_reheader function in samtools 0.1.8 and modified to perform concatenation by Chris Saunders on behalf of Illumina. ########## License: The MIT License Original SAMtools work copyright (c) 2008-2009 Genome Research Ltd. Modified SAMtools work copyright (c) 2010 Illumina, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* makefile: """ CC=gcc CFLAGS+=-g -Wall -O2 -D_FILE_OFFSET_BITS=64 -D_USE_KNETFILE -I$(SAMTOOLS_DIR) LDFLAGS+=-L$(SAMTOOLS_DIR) LDLIBS+=-lbam -lz all:bam_cat """ */ #include #include #include #include "bgzf.h" #include "bam.h" #define BUF_SIZE 0x10000 #define GZIPID1 31 #define GZIPID2 139 #define BGZF_EMPTY_BLOCK_SIZE 28 int bam_cat(int nfn, char * const *fn, const bam_header_t *h, const char* outbam) { BGZF *fp; FILE* fp_file; uint8_t *buf; uint8_t ebuf[BGZF_EMPTY_BLOCK_SIZE]; const int es=BGZF_EMPTY_BLOCK_SIZE; int i; fp = strcmp(outbam, "-")? bgzf_open(outbam, "w") : bgzf_fdopen(fileno(stdout), "w"); if (fp == 0) { fprintf(stderr, "[%s] ERROR: fail to open output file '%s'.\n", __func__, outbam); return 1; } if (h) bam_header_write(fp, h); buf = (uint8_t*) malloc(BUF_SIZE); for(i = 0; i < nfn; ++i){ BGZF *in; bam_header_t *old; int len,j; in = strcmp(fn[i], "-")? bam_open(fn[i], "r") : bam_dopen(fileno(stdin), "r"); if (in == 0) { fprintf(stderr, "[%s] ERROR: fail to open file '%s'.\n", __func__, fn[i]); return -1; } if (in->open_mode != 'r') return -1; old = bam_header_read(in); if (h == 0 && i == 0) bam_header_write(fp, old); if (in->block_offset < in->block_length) { bgzf_write(fp, in->uncompressed_block + in->block_offset, in->block_length - in->block_offset); bgzf_flush(fp); } j=0; #ifdef _USE_KNETFILE fp_file=fp->x.fpw; while ((len = knet_read(in->x.fpr, buf, BUF_SIZE)) > 0) { #else fp_file=fp->file; while (!feof(in->file) && (len = fread(buf, 1, BUF_SIZE, in->file)) > 0) { #endif if(len= 0) { switch (c) { case 'h': { tamFile fph = sam_open(optarg); if (fph == 0) { fprintf(stderr, "[%s] ERROR: fail to read the header from '%s'.\n", __func__, argv[1]); return 1; } h = sam_header_read(fph); sam_close(fph); break; } case 'o': outfn = strdup(optarg); break; } } if (argc - optind < 2) { fprintf(stderr, "Usage: samtools cat [-h header.sam] [-o out.bam] [...]\n"); return 1; } ret = bam_cat(argc - optind, argv + optind, h, outfn? outfn : "-"); free(outfn); return ret; } genometools-1.5.1/src/external/samtools-0.1.18/bam_color.c000066400000000000000000000053631211610345200231510ustar00rootroot00000000000000#include #include "bam.h" /*! @abstract Get the color encoding the previous and current base @param b pointer to an alignment @param i The i-th position, 0-based @return color @discussion Returns 0 no color information is found. */ char bam_aux_getCSi(bam1_t *b, int i) { uint8_t *c = bam_aux_get(b, "CS"); char *cs = NULL; // return the base if the tag was not found if(0 == c) return 0; cs = bam_aux2Z(c); // adjust for strandedness and leading adaptor if(bam1_strand(b)) i = strlen(cs) - 1 - i; else i++; return cs[i]; } /*! @abstract Get the color quality of the color encoding the previous and current base @param b pointer to an alignment @param i The i-th position, 0-based @return color quality @discussion Returns 0 no color information is found. */ char bam_aux_getCQi(bam1_t *b, int i) { uint8_t *c = bam_aux_get(b, "CQ"); char *cq = NULL; // return the base if the tag was not found if(0 == c) return 0; cq = bam_aux2Z(c); // adjust for strandedness if(bam1_strand(b)) i = strlen(cq) - 1 - i; return cq[i]; } char bam_aux_nt2int(char a) { switch(toupper(a)) { case 'A': return 0; break; case 'C': return 1; break; case 'G': return 2; break; case 'T': return 3; break; default: return 4; break; } } char bam_aux_ntnt2cs(char a, char b) { a = bam_aux_nt2int(a); b = bam_aux_nt2int(b); if(4 == a || 4 == b) return '4'; return "0123"[(int)(a ^ b)]; } /*! @abstract Get the color error profile at the give position @param b pointer to an alignment @return the original color if the color was an error, '-' (dash) otherwise @discussion Returns 0 no color information is found. */ char bam_aux_getCEi(bam1_t *b, int i) { int cs_i; uint8_t *c = bam_aux_get(b, "CS"); char *cs = NULL; char prev_b, cur_b; char cur_color, cor_color; // return the base if the tag was not found if(0 == c) return 0; cs = bam_aux2Z(c); // adjust for strandedness and leading adaptor if(bam1_strand(b)) { //reverse strand cs_i = strlen(cs) - 1 - i; // get current color cur_color = cs[cs_i]; // get previous base. Note: must rc adaptor prev_b = (cs_i == 1) ? "TGCAN"[(int)bam_aux_nt2int(cs[0])] : bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i+1)]; // get current base cur_b = bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i)]; } else { cs_i=i+1; // get current color cur_color = cs[cs_i]; // get previous base prev_b = (0 == i) ? cs[0] : bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i-1)]; // get current base cur_b = bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i)]; } // corrected color cor_color = bam_aux_ntnt2cs(prev_b, cur_b); if(cur_color == cor_color) { return '-'; } else { return cur_color; } } genometools-1.5.1/src/external/samtools-0.1.18/bam_endian.h000066400000000000000000000020501211610345200232640ustar00rootroot00000000000000#ifndef BAM_ENDIAN_H #define BAM_ENDIAN_H #include static inline int bam_is_big_endian() { long one= 1; return !(*((char *)(&one))); } static inline uint16_t bam_swap_endian_2(uint16_t v) { return (uint16_t)(((v & 0x00FF00FFU) << 8) | ((v & 0xFF00FF00U) >> 8)); } static inline void *bam_swap_endian_2p(void *x) { *(uint16_t*)x = bam_swap_endian_2(*(uint16_t*)x); return x; } static inline uint32_t bam_swap_endian_4(uint32_t v) { v = ((v & 0x0000FFFFU) << 16) | (v >> 16); return ((v & 0x00FF00FFU) << 8) | ((v & 0xFF00FF00U) >> 8); } static inline void *bam_swap_endian_4p(void *x) { *(uint32_t*)x = bam_swap_endian_4(*(uint32_t*)x); return x; } static inline uint64_t bam_swap_endian_8(uint64_t v) { v = ((v & 0x00000000FFFFFFFFLLU) << 32) | (v >> 32); v = ((v & 0x0000FFFF0000FFFFLLU) << 16) | ((v & 0xFFFF0000FFFF0000LLU) >> 16); return ((v & 0x00FF00FF00FF00FFLLU) << 8) | ((v & 0xFF00FF00FF00FF00LLU) >> 8); } static inline void *bam_swap_endian_8p(void *x) { *(uint64_t*)x = bam_swap_endian_8(*(uint64_t*)x); return x; } #endif genometools-1.5.1/src/external/samtools-0.1.18/bam_import.c000066400000000000000000000377501211610345200233520ustar00rootroot00000000000000#include #include #include #include #include #include #include #ifdef _WIN32 #include #endif #include "kstring.h" #include "bam.h" #include "sam_header.h" #include "kseq.h" #include "khash.h" KSTREAM_INIT(gzFile, gzread, 16384) KHASH_MAP_INIT_STR(ref, uint64_t) void bam_init_header_hash(bam_header_t *header); void bam_destroy_header_hash(bam_header_t *header); int32_t bam_get_tid(const bam_header_t *header, const char *seq_name); unsigned char bam_nt16_table[256] = { 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 1, 2, 4, 8, 15,15,15,15, 15,15,15,15, 15, 0 /*=*/,15,15, 15, 1,14, 2, 13,15,15, 4, 11,15,15,12, 15, 3,15,15, 15,15, 5, 6, 8,15, 7, 9, 15,10,15,15, 15,15,15,15, 15, 1,14, 2, 13,15,15, 4, 11,15,15,12, 15, 3,15,15, 15,15, 5, 6, 8,15, 7, 9, 15,10,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15 }; unsigned short bam_char2flag_table[256] = { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,BAM_FREAD1,BAM_FREAD2,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, BAM_FPROPER_PAIR,0,BAM_FMREVERSE,0, 0,BAM_FMUNMAP,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, BAM_FDUP,0,BAM_FQCFAIL,0, 0,0,0,0, 0,0,0,0, BAM_FPAIRED,0,BAM_FREVERSE,BAM_FSECONDARY, 0,BAM_FUNMAP,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }; char *bam_nt16_rev_table = "=ACMGRSVTWYHKDBN"; struct __tamFile_t { gzFile fp; kstream_t *ks; kstring_t *str; uint64_t n_lines; int is_first; }; char **__bam_get_lines(const char *fn, int *_n) // for bam_plcmd.c only { char **list = 0, *s; int n = 0, dret, m = 0; gzFile fp = (strcmp(fn, "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(fn, "r"); kstream_t *ks; kstring_t *str; str = (kstring_t*)calloc(1, sizeof(kstring_t)); ks = ks_init(fp); while (ks_getuntil(ks, '\n', str, &dret) > 0) { if (n == m) { m = m? m << 1 : 16; list = (char**)realloc(list, m * sizeof(char*)); } if (str->s[str->l-1] == '\r') str->s[--str->l] = '\0'; s = list[n++] = (char*)calloc(str->l + 1, 1); strcpy(s, str->s); } ks_destroy(ks); gzclose(fp); free(str->s); free(str); *_n = n; return list; } static bam_header_t *hash2header(const kh_ref_t *hash) { bam_header_t *header; khiter_t k; header = bam_header_init(); header->n_targets = kh_size(hash); header->target_name = (char**)calloc(kh_size(hash), sizeof(char*)); header->target_len = (uint32_t*)calloc(kh_size(hash), 4); for (k = kh_begin(hash); k != kh_end(hash); ++k) { if (kh_exist(hash, k)) { int i = (int)kh_value(hash, k); header->target_name[i] = (char*)kh_key(hash, k); header->target_len[i] = kh_value(hash, k)>>32; } } bam_init_header_hash(header); return header; } bam_header_t *sam_header_read2(const char *fn) { bam_header_t *header; int c, dret, ret, error = 0; gzFile fp; kstream_t *ks; kstring_t *str; kh_ref_t *hash; khiter_t k; if (fn == 0) return 0; fp = (strcmp(fn, "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(fn, "r"); if (fp == 0) return 0; hash = kh_init(ref); ks = ks_init(fp); str = (kstring_t*)calloc(1, sizeof(kstring_t)); while (ks_getuntil(ks, 0, str, &dret) > 0) { char *s = strdup(str->s); int len, i; i = kh_size(hash); ks_getuntil(ks, 0, str, &dret); len = atoi(str->s); k = kh_put(ref, hash, s, &ret); if (ret == 0) { fprintf(stderr, "[sam_header_read2] duplicated sequence name: %s\n", s); error = 1; } kh_value(hash, k) = (uint64_t)len<<32 | i; if (dret != '\n') while ((c = ks_getc(ks)) != '\n' && c != -1); } ks_destroy(ks); gzclose(fp); free(str->s); free(str); fprintf(stderr, "[sam_header_read2] %d sequences loaded.\n", kh_size(hash)); if (error) return 0; header = hash2header(hash); kh_destroy(ref, hash); return header; } static inline uint8_t *alloc_data(bam1_t *b, int size) { if (b->m_data < size) { b->m_data = size; kroundup32(b->m_data); b->data = (uint8_t*)realloc(b->data, b->m_data); } return b->data; } static inline void parse_error(int64_t n_lines, const char * __restrict msg) { fprintf(stderr, "Parse error at line %lld: %s\n", (long long)n_lines, msg); abort(); } static inline void append_text(bam_header_t *header, kstring_t *str) { size_t x = header->l_text, y = header->l_text + str->l + 2; // 2 = 1 byte dret + 1 byte null kroundup32(x); kroundup32(y); if (x < y) { header->n_text = y; header->text = (char*)realloc(header->text, y); if ( !header->text ) { fprintf(stderr,"realloc failed to alloc %ld bytes\n", y); abort(); } } // Sanity check if ( header->l_text+str->l+1 >= header->n_text ) { fprintf(stderr,"append_text FIXME: %ld>=%ld, x=%ld,y=%ld\n", header->l_text+str->l+1,header->n_text,x,y); abort(); } strncpy(header->text + header->l_text, str->s, str->l+1); // we cannot use strcpy() here. header->l_text += str->l + 1; header->text[header->l_text] = 0; } int sam_header_parse(bam_header_t *h) { char **tmp; int i; free(h->target_len); free(h->target_name); h->n_targets = 0; h->target_len = 0; h->target_name = 0; if (h->l_text < 3) return 0; if (h->dict == 0) h->dict = sam_header_parse2(h->text); tmp = sam_header2list(h->dict, "SQ", "SN", &h->n_targets); if (h->n_targets == 0) return 0; h->target_name = calloc(h->n_targets, sizeof(void*)); for (i = 0; i < h->n_targets; ++i) h->target_name[i] = strdup(tmp[i]); free(tmp); tmp = sam_header2list(h->dict, "SQ", "LN", &h->n_targets); h->target_len = calloc(h->n_targets, 4); for (i = 0; i < h->n_targets; ++i) h->target_len[i] = atoi(tmp[i]); free(tmp); return h->n_targets; } bam_header_t *sam_header_read(tamFile fp) { int ret, dret; bam_header_t *header = bam_header_init(); kstring_t *str = fp->str; while ((ret = ks_getuntil(fp->ks, KS_SEP_TAB, str, &dret)) >= 0 && str->s[0] == '@') { // skip header str->s[str->l] = dret; // note that str->s is NOT null terminated!! append_text(header, str); if (dret != '\n') { ret = ks_getuntil(fp->ks, '\n', str, &dret); str->s[str->l] = '\n'; // NOT null terminated!! append_text(header, str); } ++fp->n_lines; } sam_header_parse(header); bam_init_header_hash(header); fp->is_first = 1; return header; } int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b) { int ret, doff, doff0, dret, z = 0; bam1_core_t *c = &b->core; kstring_t *str = fp->str; kstream_t *ks = fp->ks; if (fp->is_first) { fp->is_first = 0; ret = str->l; } else { do { // special consideration for empty lines ret = ks_getuntil(fp->ks, KS_SEP_TAB, str, &dret); if (ret >= 0) z += str->l + 1; } while (ret == 0); } if (ret < 0) return -1; ++fp->n_lines; doff = 0; { // name c->l_qname = strlen(str->s) + 1; memcpy(alloc_data(b, doff + c->l_qname) + doff, str->s, c->l_qname); doff += c->l_qname; } { // flag long flag; char *s; ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; flag = strtol((char*)str->s, &s, 0); if (*s) { // not the end of the string flag = 0; for (s = str->s; *s; ++s) flag |= bam_char2flag_table[(int)*s]; } c->flag = flag; } { // tid, pos, qual ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->tid = bam_get_tid(header, str->s); if (c->tid < 0 && strcmp(str->s, "*")) { if (header->n_targets == 0) { fprintf(stderr, "[sam_read1] missing header? Abort!\n"); exit(1); } else fprintf(stderr, "[sam_read1] reference '%s' is recognized as '*'.\n", str->s); } ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->pos = isdigit(str->s[0])? atoi(str->s) - 1 : -1; ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->qual = isdigit(str->s[0])? atoi(str->s) : 0; if (ret < 0) return -2; } { // cigar char *s, *t; int i, op; long x; c->n_cigar = 0; if (ks_getuntil(ks, KS_SEP_TAB, str, &dret) < 0) return -3; z += str->l + 1; if (str->s[0] != '*') { for (s = str->s; *s; ++s) { if ((isalpha(*s)) || (*s=='=')) ++c->n_cigar; else if (!isdigit(*s)) parse_error(fp->n_lines, "invalid CIGAR character"); } b->data = alloc_data(b, doff + c->n_cigar * 4); for (i = 0, s = str->s; i != c->n_cigar; ++i) { x = strtol(s, &t, 10); op = toupper(*t); if (op == 'M') op = BAM_CMATCH; else if (op == 'I') op = BAM_CINS; else if (op == 'D') op = BAM_CDEL; else if (op == 'N') op = BAM_CREF_SKIP; else if (op == 'S') op = BAM_CSOFT_CLIP; else if (op == 'H') op = BAM_CHARD_CLIP; else if (op == 'P') op = BAM_CPAD; else if (op == '=') op = BAM_CEQUAL; else if (op == 'X') op = BAM_CDIFF; else parse_error(fp->n_lines, "invalid CIGAR operation"); s = t + 1; bam1_cigar(b)[i] = x << BAM_CIGAR_SHIFT | op; } if (*s) parse_error(fp->n_lines, "unmatched CIGAR operation"); c->bin = bam_reg2bin(c->pos, bam_calend(c, bam1_cigar(b))); doff += c->n_cigar * 4; } else { if (!(c->flag&BAM_FUNMAP)) { fprintf(stderr, "Parse warning at line %lld: mapped sequence without CIGAR\n", (long long)fp->n_lines); c->flag |= BAM_FUNMAP; } c->bin = bam_reg2bin(c->pos, c->pos + 1); } } { // mtid, mpos, isize ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->mtid = strcmp(str->s, "=")? bam_get_tid(header, str->s) : c->tid; ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->mpos = isdigit(str->s[0])? atoi(str->s) - 1 : -1; ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->isize = (str->s[0] == '-' || isdigit(str->s[0]))? atoi(str->s) : 0; if (ret < 0) return -4; } { // seq and qual int i; uint8_t *p = 0; if (ks_getuntil(ks, KS_SEP_TAB, str, &dret) < 0) return -5; // seq z += str->l + 1; if (strcmp(str->s, "*")) { c->l_qseq = strlen(str->s); if (c->n_cigar && c->l_qseq != (int32_t)bam_cigar2qlen(c, bam1_cigar(b))) { fprintf(stderr, "Line %ld, sequence length %i vs %i from CIGAR\n", (long)fp->n_lines, c->l_qseq, (int32_t)bam_cigar2qlen(c, bam1_cigar(b))); parse_error(fp->n_lines, "CIGAR and sequence length are inconsistent"); } p = (uint8_t*)alloc_data(b, doff + c->l_qseq + (c->l_qseq+1)/2) + doff; memset(p, 0, (c->l_qseq+1)/2); for (i = 0; i < c->l_qseq; ++i) p[i/2] |= bam_nt16_table[(int)str->s[i]] << 4*(1-i%2); } else c->l_qseq = 0; if (ks_getuntil(ks, KS_SEP_TAB, str, &dret) < 0) return -6; // qual z += str->l + 1; if (strcmp(str->s, "*") && c->l_qseq != strlen(str->s)) parse_error(fp->n_lines, "sequence and quality are inconsistent"); p += (c->l_qseq+1)/2; if (strcmp(str->s, "*") == 0) for (i = 0; i < c->l_qseq; ++i) p[i] = 0xff; else for (i = 0; i < c->l_qseq; ++i) p[i] = str->s[i] - 33; doff += c->l_qseq + (c->l_qseq+1)/2; } doff0 = doff; if (dret != '\n' && dret != '\r') { // aux while (ks_getuntil(ks, KS_SEP_TAB, str, &dret) >= 0) { uint8_t *s, type, key[2]; z += str->l + 1; if (str->l < 6 || str->s[2] != ':' || str->s[4] != ':') parse_error(fp->n_lines, "missing colon in auxiliary data"); key[0] = str->s[0]; key[1] = str->s[1]; type = str->s[3]; s = alloc_data(b, doff + 3) + doff; s[0] = key[0]; s[1] = key[1]; s += 2; doff += 2; if (type == 'A' || type == 'a' || type == 'c' || type == 'C') { // c and C for backward compatibility s = alloc_data(b, doff + 2) + doff; *s++ = 'A'; *s = str->s[5]; doff += 2; } else if (type == 'I' || type == 'i') { long long x; s = alloc_data(b, doff + 5) + doff; x = (long long)atoll(str->s + 5); if (x < 0) { if (x >= -127) { *s++ = 'c'; *(int8_t*)s = (int8_t)x; s += 1; doff += 2; } else if (x >= -32767) { *s++ = 's'; *(int16_t*)s = (int16_t)x; s += 2; doff += 3; } else { *s++ = 'i'; *(int32_t*)s = (int32_t)x; s += 4; doff += 5; if (x < -2147483648ll) fprintf(stderr, "Parse warning at line %lld: integer %lld is out of range.", (long long)fp->n_lines, x); } } else { if (x <= 255) { *s++ = 'C'; *s++ = (uint8_t)x; doff += 2; } else if (x <= 65535) { *s++ = 'S'; *(uint16_t*)s = (uint16_t)x; s += 2; doff += 3; } else { *s++ = 'I'; *(uint32_t*)s = (uint32_t)x; s += 4; doff += 5; if (x > 4294967295ll) fprintf(stderr, "Parse warning at line %lld: integer %lld is out of range.", (long long)fp->n_lines, x); } } } else if (type == 'f') { s = alloc_data(b, doff + 5) + doff; *s++ = 'f'; *(float*)s = (float)atof(str->s + 5); s += 4; doff += 5; } else if (type == 'd') { s = alloc_data(b, doff + 9) + doff; *s++ = 'd'; *(float*)s = (float)atof(str->s + 9); s += 8; doff += 9; } else if (type == 'Z' || type == 'H') { int size = 1 + (str->l - 5) + 1; if (type == 'H') { // check whether the hex string is valid int i; if ((str->l - 5) % 2 == 1) parse_error(fp->n_lines, "length of the hex string not even"); for (i = 0; i < str->l - 5; ++i) { int c = toupper(str->s[5 + i]); if (!((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F'))) parse_error(fp->n_lines, "invalid hex character"); } } s = alloc_data(b, doff + size) + doff; *s++ = type; memcpy(s, str->s + 5, str->l - 5); s[str->l - 5] = 0; doff += size; } else if (type == 'B') { int32_t n = 0, Bsize, k = 0, size; char *p; if (str->l < 8) parse_error(fp->n_lines, "too few values in aux type B"); Bsize = bam_aux_type2size(str->s[5]); // the size of each element for (p = (char*)str->s + 6; *p; ++p) // count the number of elements in the array if (*p == ',') ++n; p = str->s + 7; // now p points to the first number in the array size = 6 + Bsize * n; // total number of bytes allocated to this tag s = alloc_data(b, doff + 6 * Bsize * n) + doff; // allocate memory *s++ = 'B'; *s++ = str->s[5]; memcpy(s, &n, 4); s += 4; // write the number of elements if (str->s[5] == 'c') while (p < str->s + str->l) ((int8_t*)s)[k++] = (int8_t)strtol(p, &p, 0), ++p; else if (str->s[5] == 'C') while (p < str->s + str->l) ((uint8_t*)s)[k++] = (uint8_t)strtol(p, &p, 0), ++p; else if (str->s[5] == 's') while (p < str->s + str->l) ((int16_t*)s)[k++] = (int16_t)strtol(p, &p, 0), ++p; // FIXME: avoid unaligned memory else if (str->s[5] == 'S') while (p < str->s + str->l) ((uint16_t*)s)[k++] = (uint16_t)strtol(p, &p, 0), ++p; else if (str->s[5] == 'i') while (p < str->s + str->l) ((int32_t*)s)[k++] = (int32_t)strtol(p, &p, 0), ++p; else if (str->s[5] == 'I') while (p < str->s + str->l) ((uint32_t*)s)[k++] = (uint32_t)strtol(p, &p, 0), ++p; else if (str->s[5] == 'f') while (p < str->s + str->l) ((float*)s)[k++] = (float)strtod(p, &p), ++p; else parse_error(fp->n_lines, "unrecognized array type"); s += Bsize * n; doff += size; } else parse_error(fp->n_lines, "unrecognized type"); if (dret == '\n' || dret == '\r') break; } } b->l_aux = doff - doff0; b->data_len = doff; return z; } tamFile sam_open(const char *fn) { tamFile fp; gzFile gzfp = (strcmp(fn, "-") == 0)? gzdopen(fileno(stdin), "rb") : gzopen(fn, "rb"); if (gzfp == 0) return 0; fp = (tamFile)calloc(1, sizeof(struct __tamFile_t)); fp->str = (kstring_t*)calloc(1, sizeof(kstring_t)); fp->fp = gzfp; fp->ks = ks_init(fp->fp); return fp; } void sam_close(tamFile fp) { if (fp) { ks_destroy(fp->ks); gzclose(fp->fp); free(fp->str->s); free(fp->str); free(fp); } } genometools-1.5.1/src/external/samtools-0.1.18/bam_index.c000066400000000000000000000515341211610345200231430ustar00rootroot00000000000000#include #include #include "bam.h" #include "khash.h" #include "ksort.h" #include "bam_endian.h" #ifdef _USE_KNETFILE #include "knetfile.h" #endif /*! @header Alignment indexing. Before indexing, BAM must be sorted based on the leftmost coordinate of alignments. In indexing, BAM uses two indices: a UCSC binning index and a simple linear index. The binning index is efficient for alignments spanning long distance, while the auxiliary linear index helps to reduce unnecessary seek calls especially for short alignments. The UCSC binning scheme was suggested by Richard Durbin and Lincoln Stein and is explained by Kent et al. (2002). In this scheme, each bin represents a contiguous genomic region which can be fully contained in another bin; each alignment is associated with a bin which represents the smallest region containing the entire alignment. The binning scheme is essentially another representation of R-tree. A distinct bin uniquely corresponds to a distinct internal node in a R-tree. Bin A is a child of Bin B if region A is contained in B. In BAM, each bin may span 2^29, 2^26, 2^23, 2^20, 2^17 or 2^14 bp. Bin 0 spans a 512Mbp region, bins 1-8 span 64Mbp, 9-72 8Mbp, 73-584 1Mbp, 585-4680 128Kbp and bins 4681-37449 span 16Kbp regions. If we want to find the alignments overlapped with a region [rbeg,rend), we need to calculate the list of bins that may be overlapped the region and test the alignments in the bins to confirm the overlaps. If the specified region is short, typically only a few alignments in six bins need to be retrieved. The overlapping alignments can be quickly fetched. */ #define BAM_MIN_CHUNK_GAP 32768 // 1<<14 is the size of minimum bin. #define BAM_LIDX_SHIFT 14 #define BAM_MAX_BIN 37450 // =(8^6-1)/7+1 typedef struct { uint64_t u, v; } pair64_t; #define pair64_lt(a,b) ((a).u < (b).u) KSORT_INIT(off, pair64_t, pair64_lt) typedef struct { uint32_t m, n; pair64_t *list; } bam_binlist_t; typedef struct { int32_t n, m; uint64_t *offset; } bam_lidx_t; KHASH_MAP_INIT_INT(i, bam_binlist_t) struct __bam_index_t { int32_t n; uint64_t n_no_coor; // unmapped reads without coordinate khash_t(i) **index; bam_lidx_t *index2; }; // requirement: len <= LEN_MASK static inline void insert_offset(khash_t(i) *h, int bin, uint64_t beg, uint64_t end) { khint_t k; bam_binlist_t *l; int ret; k = kh_put(i, h, bin, &ret); l = &kh_value(h, k); if (ret) { // not present l->m = 1; l->n = 0; l->list = (pair64_t*)calloc(l->m, 16); } if (l->n == l->m) { l->m <<= 1; l->list = (pair64_t*)realloc(l->list, l->m * 16); } l->list[l->n].u = beg; l->list[l->n++].v = end; } static inline void insert_offset2(bam_lidx_t *index2, bam1_t *b, uint64_t offset) { int i, beg, end; beg = b->core.pos >> BAM_LIDX_SHIFT; end = (bam_calend(&b->core, bam1_cigar(b)) - 1) >> BAM_LIDX_SHIFT; if (index2->m < end + 1) { int old_m = index2->m; index2->m = end + 1; kroundup32(index2->m); index2->offset = (uint64_t*)realloc(index2->offset, index2->m * 8); memset(index2->offset + old_m, 0, 8 * (index2->m - old_m)); } if (beg == end) { if (index2->offset[beg] == 0) index2->offset[beg] = offset; } else { for (i = beg; i <= end; ++i) if (index2->offset[i] == 0) index2->offset[i] = offset; } index2->n = end + 1; } static void merge_chunks(bam_index_t *idx) { #if defined(BAM_TRUE_OFFSET) || defined(BAM_VIRTUAL_OFFSET16) khash_t(i) *index; int i, l, m; khint_t k; for (i = 0; i < idx->n; ++i) { index = idx->index[i]; for (k = kh_begin(index); k != kh_end(index); ++k) { bam_binlist_t *p; if (!kh_exist(index, k) || kh_key(index, k) == BAM_MAX_BIN) continue; p = &kh_value(index, k); m = 0; for (l = 1; l < p->n; ++l) { #ifdef BAM_TRUE_OFFSET if (p->list[m].v + BAM_MIN_CHUNK_GAP > p->list[l].u) p->list[m].v = p->list[l].v; #else if (p->list[m].v>>16 == p->list[l].u>>16) p->list[m].v = p->list[l].v; #endif else p->list[++m] = p->list[l]; } // ~for(l) p->n = m + 1; } // ~for(k) } // ~for(i) #endif // defined(BAM_TRUE_OFFSET) || defined(BAM_BGZF) } static void fill_missing(bam_index_t *idx) { int i, j; for (i = 0; i < idx->n; ++i) { bam_lidx_t *idx2 = &idx->index2[i]; for (j = 1; j < idx2->n; ++j) if (idx2->offset[j] == 0) idx2->offset[j] = idx2->offset[j-1]; } } bam_index_t *bam_index_core(bamFile fp) { bam1_t *b; bam_header_t *h; int i, ret; bam_index_t *idx; uint32_t last_bin, save_bin; int32_t last_coor, last_tid, save_tid; bam1_core_t *c; uint64_t save_off, last_off, n_mapped, n_unmapped, off_beg, off_end, n_no_coor; idx = (bam_index_t*)calloc(1, sizeof(bam_index_t)); b = (bam1_t*)calloc(1, sizeof(bam1_t)); h = bam_header_read(fp); c = &b->core; idx->n = h->n_targets; bam_header_destroy(h); idx->index = (khash_t(i)**)calloc(idx->n, sizeof(void*)); for (i = 0; i < idx->n; ++i) idx->index[i] = kh_init(i); idx->index2 = (bam_lidx_t*)calloc(idx->n, sizeof(bam_lidx_t)); save_bin = save_tid = last_tid = last_bin = 0xffffffffu; save_off = last_off = bam_tell(fp); last_coor = 0xffffffffu; n_mapped = n_unmapped = n_no_coor = off_end = 0; off_beg = off_end = bam_tell(fp); while ((ret = bam_read1(fp, b)) >= 0) { if (c->tid < 0) ++n_no_coor; if (last_tid < c->tid || (last_tid >= 0 && c->tid < 0)) { // change of chromosomes last_tid = c->tid; last_bin = 0xffffffffu; } else if ((uint32_t)last_tid > (uint32_t)c->tid) { fprintf(stderr, "[bam_index_core] the alignment is not sorted (%s): %d-th chr > %d-th chr\n", bam1_qname(b), last_tid+1, c->tid+1); return NULL; } else if ((int32_t)c->tid >= 0 && last_coor > c->pos) { fprintf(stderr, "[bam_index_core] the alignment is not sorted (%s): %u > %u in %d-th chr\n", bam1_qname(b), last_coor, c->pos, c->tid+1); return NULL; } if (c->tid >= 0 && !(c->flag & BAM_FUNMAP)) insert_offset2(&idx->index2[b->core.tid], b, last_off); if (c->bin != last_bin) { // then possibly write the binning index if (save_bin != 0xffffffffu) // save_bin==0xffffffffu only happens to the first record insert_offset(idx->index[save_tid], save_bin, save_off, last_off); if (last_bin == 0xffffffffu && save_tid != 0xffffffffu) { // write the meta element off_end = last_off; insert_offset(idx->index[save_tid], BAM_MAX_BIN, off_beg, off_end); insert_offset(idx->index[save_tid], BAM_MAX_BIN, n_mapped, n_unmapped); n_mapped = n_unmapped = 0; off_beg = off_end; } save_off = last_off; save_bin = last_bin = c->bin; save_tid = c->tid; if (save_tid < 0) break; } if (bam_tell(fp) <= last_off) { fprintf(stderr, "[bam_index_core] bug in BGZF/RAZF: %llx < %llx\n", (unsigned long long)bam_tell(fp), (unsigned long long)last_off); return NULL; } if (c->flag & BAM_FUNMAP) ++n_unmapped; else ++n_mapped; last_off = bam_tell(fp); last_coor = b->core.pos; } if (save_tid >= 0) { insert_offset(idx->index[save_tid], save_bin, save_off, bam_tell(fp)); insert_offset(idx->index[save_tid], BAM_MAX_BIN, off_beg, bam_tell(fp)); insert_offset(idx->index[save_tid], BAM_MAX_BIN, n_mapped, n_unmapped); } merge_chunks(idx); fill_missing(idx); if (ret >= 0) { while ((ret = bam_read1(fp, b)) >= 0) { ++n_no_coor; if (c->tid >= 0 && n_no_coor) { fprintf(stderr, "[bam_index_core] the alignment is not sorted: reads without coordinates prior to reads with coordinates.\n"); return NULL; } } } if (ret < -1) fprintf(stderr, "[bam_index_core] truncated file? Continue anyway. (%d)\n", ret); free(b->data); free(b); idx->n_no_coor = n_no_coor; return idx; } void bam_index_destroy(bam_index_t *idx) { khint_t k; int i; if (idx == 0) return; for (i = 0; i < idx->n; ++i) { khash_t(i) *index = idx->index[i]; bam_lidx_t *index2 = idx->index2 + i; for (k = kh_begin(index); k != kh_end(index); ++k) { if (kh_exist(index, k)) free(kh_value(index, k).list); } kh_destroy(i, index); free(index2->offset); } free(idx->index); free(idx->index2); free(idx); } void bam_index_save(const bam_index_t *idx, FILE *fp) { int32_t i, size; khint_t k; fwrite("BAI\1", 1, 4, fp); if (bam_is_be) { uint32_t x = idx->n; fwrite(bam_swap_endian_4p(&x), 4, 1, fp); } else fwrite(&idx->n, 4, 1, fp); for (i = 0; i < idx->n; ++i) { khash_t(i) *index = idx->index[i]; bam_lidx_t *index2 = idx->index2 + i; // write binning index size = kh_size(index); if (bam_is_be) { // big endian uint32_t x = size; fwrite(bam_swap_endian_4p(&x), 4, 1, fp); } else fwrite(&size, 4, 1, fp); for (k = kh_begin(index); k != kh_end(index); ++k) { if (kh_exist(index, k)) { bam_binlist_t *p = &kh_value(index, k); if (bam_is_be) { // big endian uint32_t x; x = kh_key(index, k); fwrite(bam_swap_endian_4p(&x), 4, 1, fp); x = p->n; fwrite(bam_swap_endian_4p(&x), 4, 1, fp); for (x = 0; (int)x < p->n; ++x) { bam_swap_endian_8p(&p->list[x].u); bam_swap_endian_8p(&p->list[x].v); } fwrite(p->list, 16, p->n, fp); for (x = 0; (int)x < p->n; ++x) { bam_swap_endian_8p(&p->list[x].u); bam_swap_endian_8p(&p->list[x].v); } } else { fwrite(&kh_key(index, k), 4, 1, fp); fwrite(&p->n, 4, 1, fp); fwrite(p->list, 16, p->n, fp); } } } // write linear index (index2) if (bam_is_be) { int x = index2->n; fwrite(bam_swap_endian_4p(&x), 4, 1, fp); } else fwrite(&index2->n, 4, 1, fp); if (bam_is_be) { // big endian int x; for (x = 0; (int)x < index2->n; ++x) bam_swap_endian_8p(&index2->offset[x]); fwrite(index2->offset, 8, index2->n, fp); for (x = 0; (int)x < index2->n; ++x) bam_swap_endian_8p(&index2->offset[x]); } else fwrite(index2->offset, 8, index2->n, fp); } { // write the number of reads coor-less records. uint64_t x = idx->n_no_coor; if (bam_is_be) bam_swap_endian_8p(&x); fwrite(&x, 8, 1, fp); } fflush(fp); } static bam_index_t *bam_index_load_core(FILE *fp) { int i; char magic[4]; bam_index_t *idx; if (fp == 0) { fprintf(stderr, "[bam_index_load_core] fail to load index.\n"); return 0; } fread(magic, 1, 4, fp); if (strncmp(magic, "BAI\1", 4)) { fprintf(stderr, "[bam_index_load] wrong magic number.\n"); fclose(fp); return 0; } idx = (bam_index_t*)calloc(1, sizeof(bam_index_t)); fread(&idx->n, 4, 1, fp); if (bam_is_be) bam_swap_endian_4p(&idx->n); idx->index = (khash_t(i)**)calloc(idx->n, sizeof(void*)); idx->index2 = (bam_lidx_t*)calloc(idx->n, sizeof(bam_lidx_t)); for (i = 0; i < idx->n; ++i) { khash_t(i) *index; bam_lidx_t *index2 = idx->index2 + i; uint32_t key, size; khint_t k; int j, ret; bam_binlist_t *p; index = idx->index[i] = kh_init(i); // load binning index fread(&size, 4, 1, fp); if (bam_is_be) bam_swap_endian_4p(&size); for (j = 0; j < (int)size; ++j) { fread(&key, 4, 1, fp); if (bam_is_be) bam_swap_endian_4p(&key); k = kh_put(i, index, key, &ret); p = &kh_value(index, k); fread(&p->n, 4, 1, fp); if (bam_is_be) bam_swap_endian_4p(&p->n); p->m = p->n; p->list = (pair64_t*)malloc(p->m * 16); fread(p->list, 16, p->n, fp); if (bam_is_be) { int x; for (x = 0; x < p->n; ++x) { bam_swap_endian_8p(&p->list[x].u); bam_swap_endian_8p(&p->list[x].v); } } } // load linear index fread(&index2->n, 4, 1, fp); if (bam_is_be) bam_swap_endian_4p(&index2->n); index2->m = index2->n; index2->offset = (uint64_t*)calloc(index2->m, 8); fread(index2->offset, index2->n, 8, fp); if (bam_is_be) for (j = 0; j < index2->n; ++j) bam_swap_endian_8p(&index2->offset[j]); } if (fread(&idx->n_no_coor, 8, 1, fp) == 0) idx->n_no_coor = 0; if (bam_is_be) bam_swap_endian_8p(&idx->n_no_coor); return idx; } bam_index_t *bam_index_load_local(const char *_fn) { FILE *fp; char *fnidx, *fn; if (strstr(_fn, "ftp://") == _fn || strstr(_fn, "http://") == _fn) { const char *p; int l = strlen(_fn); for (p = _fn + l - 1; p >= _fn; --p) if (*p == '/') break; fn = strdup(p + 1); } else fn = strdup(_fn); fnidx = (char*)calloc(strlen(fn) + 5, 1); strcpy(fnidx, fn); strcat(fnidx, ".bai"); fp = fopen(fnidx, "rb"); if (fp == 0) { // try "{base}.bai" char *s = strstr(fn, "bam"); if (s == fn + strlen(fn) - 3) { strcpy(fnidx, fn); fnidx[strlen(fn)-1] = 'i'; fp = fopen(fnidx, "rb"); } } free(fnidx); free(fn); if (fp) { bam_index_t *idx = bam_index_load_core(fp); fclose(fp); return idx; } else return 0; } #ifdef _USE_KNETFILE static void download_from_remote(const char *url) { const int buf_size = 1 * 1024 * 1024; char *fn; FILE *fp; uint8_t *buf; knetFile *fp_remote; int l; if (strstr(url, "ftp://") != url && strstr(url, "http://") != url) return; l = strlen(url); for (fn = (char*)url + l - 1; fn >= url; --fn) if (*fn == '/') break; ++fn; // fn now points to the file name fp_remote = knet_open(url, "r"); if (fp_remote == 0) { fprintf(stderr, "[download_from_remote] fail to open remote file.\n"); return; } if ((fp = fopen(fn, "wb")) == 0) { fprintf(stderr, "[download_from_remote] fail to create file in the working directory.\n"); knet_close(fp_remote); return; } buf = (uint8_t*)calloc(buf_size, 1); while ((l = knet_read(fp_remote, buf, buf_size)) != 0) fwrite(buf, 1, l, fp); free(buf); fclose(fp); knet_close(fp_remote); } #else static void download_from_remote(const char *url) { return; } #endif bam_index_t *bam_index_load(const char *fn) { bam_index_t *idx; idx = bam_index_load_local(fn); if (idx == 0 && (strstr(fn, "ftp://") == fn || strstr(fn, "http://") == fn)) { char *fnidx = calloc(strlen(fn) + 5, 1); strcat(strcpy(fnidx, fn), ".bai"); fprintf(stderr, "[bam_index_load] attempting to download the remote index file.\n"); download_from_remote(fnidx); idx = bam_index_load_local(fn); } if (idx == 0) fprintf(stderr, "[bam_index_load] fail to load BAM index.\n"); return idx; } int bam_index_build2(const char *fn, const char *_fnidx) { char *fnidx; FILE *fpidx; bamFile fp; bam_index_t *idx; if ((fp = bam_open(fn, "r")) == 0) { fprintf(stderr, "[bam_index_build2] fail to open the BAM file.\n"); return -1; } idx = bam_index_core(fp); bam_close(fp); if(idx == 0) { fprintf(stderr, "[bam_index_build2] fail to index the BAM file.\n"); return -1; } if (_fnidx == 0) { fnidx = (char*)calloc(strlen(fn) + 5, 1); strcpy(fnidx, fn); strcat(fnidx, ".bai"); } else fnidx = strdup(_fnidx); fpidx = fopen(fnidx, "wb"); if (fpidx == 0) { fprintf(stderr, "[bam_index_build2] fail to create the index file.\n"); free(fnidx); return -1; } bam_index_save(idx, fpidx); bam_index_destroy(idx); fclose(fpidx); free(fnidx); return 0; } int bam_index_build(const char *fn) { return bam_index_build2(fn, 0); } int bam_index(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "Usage: samtools index [out.index]\n"); return 1; } if (argc >= 3) bam_index_build2(argv[1], argv[2]); else bam_index_build(argv[1]); return 0; } int bam_idxstats(int argc, char *argv[]) { bam_index_t *idx; bam_header_t *header; bamFile fp; int i; if (argc < 2) { fprintf(stderr, "Usage: samtools idxstats \n"); return 1; } fp = bam_open(argv[1], "r"); if (fp == 0) { fprintf(stderr, "[%s] fail to open BAM.\n", __func__); return 1; } header = bam_header_read(fp); bam_close(fp); idx = bam_index_load(argv[1]); if (idx == 0) { fprintf(stderr, "[%s] fail to load the index.\n", __func__); return 1; } for (i = 0; i < idx->n; ++i) { khint_t k; khash_t(i) *h = idx->index[i]; printf("%s\t%d", header->target_name[i], header->target_len[i]); k = kh_get(i, h, BAM_MAX_BIN); if (k != kh_end(h)) printf("\t%llu\t%llu", (long long)kh_val(h, k).list[1].u, (long long)kh_val(h, k).list[1].v); else printf("\t0\t0"); putchar('\n'); } printf("*\t0\t0\t%llu\n", (long long)idx->n_no_coor); bam_header_destroy(header); bam_index_destroy(idx); return 0; } static inline int reg2bins(uint32_t beg, uint32_t end, uint16_t list[BAM_MAX_BIN]) { int i = 0, k; if (beg >= end) return 0; if (end >= 1u<<29) end = 1u<<29; --end; list[i++] = 0; for (k = 1 + (beg>>26); k <= 1 + (end>>26); ++k) list[i++] = k; for (k = 9 + (beg>>23); k <= 9 + (end>>23); ++k) list[i++] = k; for (k = 73 + (beg>>20); k <= 73 + (end>>20); ++k) list[i++] = k; for (k = 585 + (beg>>17); k <= 585 + (end>>17); ++k) list[i++] = k; for (k = 4681 + (beg>>14); k <= 4681 + (end>>14); ++k) list[i++] = k; return i; } static inline int is_overlap(uint32_t beg, uint32_t end, const bam1_t *b) { uint32_t rbeg = b->core.pos; uint32_t rend = b->core.n_cigar? bam_calend(&b->core, bam1_cigar(b)) : b->core.pos + 1; return (rend > beg && rbeg < end); } struct __bam_iter_t { int from_first; // read from the first record; no random access int tid, beg, end, n_off, i, finished; uint64_t curr_off; pair64_t *off; }; // bam_fetch helper function retrieves bam_iter_t bam_iter_query(const bam_index_t *idx, int tid, int beg, int end) { uint16_t *bins; int i, n_bins, n_off; pair64_t *off; khint_t k; khash_t(i) *index; uint64_t min_off; bam_iter_t iter = 0; if (beg < 0) beg = 0; if (end < beg) return 0; // initialize iter iter = calloc(1, sizeof(struct __bam_iter_t)); iter->tid = tid, iter->beg = beg, iter->end = end; iter->i = -1; // bins = (uint16_t*)calloc(BAM_MAX_BIN, 2); n_bins = reg2bins(beg, end, bins); index = idx->index[tid]; if (idx->index2[tid].n > 0) { min_off = (beg>>BAM_LIDX_SHIFT >= idx->index2[tid].n)? idx->index2[tid].offset[idx->index2[tid].n-1] : idx->index2[tid].offset[beg>>BAM_LIDX_SHIFT]; if (min_off == 0) { // improvement for index files built by tabix prior to 0.1.4 int n = beg>>BAM_LIDX_SHIFT; if (n > idx->index2[tid].n) n = idx->index2[tid].n; for (i = n - 1; i >= 0; --i) if (idx->index2[tid].offset[i] != 0) break; if (i >= 0) min_off = idx->index2[tid].offset[i]; } } else min_off = 0; // tabix 0.1.2 may produce such index files for (i = n_off = 0; i < n_bins; ++i) { if ((k = kh_get(i, index, bins[i])) != kh_end(index)) n_off += kh_value(index, k).n; } if (n_off == 0) { free(bins); return iter; } off = (pair64_t*)calloc(n_off, 16); for (i = n_off = 0; i < n_bins; ++i) { if ((k = kh_get(i, index, bins[i])) != kh_end(index)) { int j; bam_binlist_t *p = &kh_value(index, k); for (j = 0; j < p->n; ++j) if (p->list[j].v > min_off) off[n_off++] = p->list[j]; } } free(bins); if (n_off == 0) { free(off); return iter; } { bam1_t *b = (bam1_t*)calloc(1, sizeof(bam1_t)); int l; ks_introsort(off, n_off, off); // resolve completely contained adjacent blocks for (i = 1, l = 0; i < n_off; ++i) if (off[l].v < off[i].v) off[++l] = off[i]; n_off = l + 1; // resolve overlaps between adjacent blocks; this may happen due to the merge in indexing for (i = 1; i < n_off; ++i) if (off[i-1].v >= off[i].u) off[i-1].v = off[i].u; { // merge adjacent blocks #if defined(BAM_TRUE_OFFSET) || defined(BAM_VIRTUAL_OFFSET16) for (i = 1, l = 0; i < n_off; ++i) { #ifdef BAM_TRUE_OFFSET if (off[l].v + BAM_MIN_CHUNK_GAP > off[i].u) off[l].v = off[i].v; #else if (off[l].v>>16 == off[i].u>>16) off[l].v = off[i].v; #endif else off[++l] = off[i]; } n_off = l + 1; #endif } bam_destroy1(b); } iter->n_off = n_off; iter->off = off; return iter; } pair64_t *get_chunk_coordinates(const bam_index_t *idx, int tid, int beg, int end, int *cnt_off) { // for pysam compatibility bam_iter_t iter; pair64_t *off; iter = bam_iter_query(idx, tid, beg, end); off = iter->off; *cnt_off = iter->n_off; free(iter); return off; } void bam_iter_destroy(bam_iter_t iter) { if (iter) { free(iter->off); free(iter); } } int bam_iter_read(bamFile fp, bam_iter_t iter, bam1_t *b) { int ret; if (iter && iter->finished) return -1; if (iter == 0 || iter->from_first) { ret = bam_read1(fp, b); if (ret < 0 && iter) iter->finished = 1; return ret; } if (iter->off == 0) return -1; for (;;) { if (iter->curr_off == 0 || iter->curr_off >= iter->off[iter->i].v) { // then jump to the next chunk if (iter->i == iter->n_off - 1) { ret = -1; break; } // no more chunks if (iter->i >= 0) assert(iter->curr_off == iter->off[iter->i].v); // otherwise bug if (iter->i < 0 || iter->off[iter->i].v != iter->off[iter->i+1].u) { // not adjacent chunks; then seek bam_seek(fp, iter->off[iter->i+1].u, SEEK_SET); iter->curr_off = bam_tell(fp); } ++iter->i; } if ((ret = bam_read1(fp, b)) >= 0) { iter->curr_off = bam_tell(fp); if (b->core.tid != iter->tid || b->core.pos >= iter->end) { // no need to proceed ret = bam_validate1(NULL, b)? -1 : -5; // determine whether end of region or error break; } else if (is_overlap(iter->beg, iter->end, b)) return ret; } else break; // end of file or error } iter->finished = 1; return ret; } int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func) { int ret; bam_iter_t iter; bam1_t *b; b = bam_init1(); iter = bam_iter_query(idx, tid, beg, end); while ((ret = bam_iter_read(fp, iter, b)) >= 0) func(b, data); bam_iter_destroy(iter); bam_destroy1(b); return (ret == -1)? 0 : ret; } genometools-1.5.1/src/external/samtools-0.1.18/bam_lpileup.c000066400000000000000000000115601211610345200235010ustar00rootroot00000000000000#include #include #include #include "bam.h" #include "ksort.h" #define TV_GAP 2 typedef struct __freenode_t { uint32_t level:28, cnt:4; struct __freenode_t *next; } freenode_t, *freenode_p; #define freenode_lt(a,b) ((a)->cnt < (b)->cnt || ((a)->cnt == (b)->cnt && (a)->level < (b)->level)) KSORT_INIT(node, freenode_p, freenode_lt) /* Memory pool, similar to the one in bam_pileup.c */ typedef struct { int cnt, n, max; freenode_t **buf; } mempool_t; static mempool_t *mp_init() { return (mempool_t*)calloc(1, sizeof(mempool_t)); } static void mp_destroy(mempool_t *mp) { int k; for (k = 0; k < mp->n; ++k) free(mp->buf[k]); free(mp->buf); free(mp); } static inline freenode_t *mp_alloc(mempool_t *mp) { ++mp->cnt; if (mp->n == 0) return (freenode_t*)calloc(1, sizeof(freenode_t)); else return mp->buf[--mp->n]; } static inline void mp_free(mempool_t *mp, freenode_t *p) { --mp->cnt; p->next = 0; p->cnt = TV_GAP; if (mp->n == mp->max) { mp->max = mp->max? mp->max<<1 : 256; mp->buf = (freenode_t**)realloc(mp->buf, sizeof(freenode_t*) * mp->max); } mp->buf[mp->n++] = p; } /* core part */ struct __bam_lplbuf_t { int max, n_cur, n_pre; int max_level, *cur_level, *pre_level; mempool_t *mp; freenode_t **aux, *head, *tail; int n_nodes, m_aux; bam_pileup_f func; void *user_data; bam_plbuf_t *plbuf; }; void bam_lplbuf_reset(bam_lplbuf_t *buf) { freenode_t *p, *q; bam_plbuf_reset(buf->plbuf); for (p = buf->head; p->next;) { q = p->next; mp_free(buf->mp, p); p = q; } buf->head = buf->tail; buf->max_level = 0; buf->n_cur = buf->n_pre = 0; buf->n_nodes = 0; } static int tview_func(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data) { bam_lplbuf_t *tv = (bam_lplbuf_t*)data; freenode_t *p; int i, l, max_level; // allocate memory if necessary if (tv->max < n) { // enlarge tv->max = n; kroundup32(tv->max); tv->cur_level = (int*)realloc(tv->cur_level, sizeof(int) * tv->max); tv->pre_level = (int*)realloc(tv->pre_level, sizeof(int) * tv->max); } tv->n_cur = n; // update cnt for (p = tv->head; p->next; p = p->next) if (p->cnt > 0) --p->cnt; // calculate cur_level[] max_level = 0; for (i = l = 0; i < n; ++i) { const bam_pileup1_t *p = pl + i; if (p->is_head) { if (tv->head->next && tv->head->cnt == 0) { // then take a free slot freenode_t *p = tv->head->next; tv->cur_level[i] = tv->head->level; mp_free(tv->mp, tv->head); tv->head = p; --tv->n_nodes; } else tv->cur_level[i] = ++tv->max_level; } else { tv->cur_level[i] = tv->pre_level[l++]; if (p->is_tail) { // then return a free slot tv->tail->level = tv->cur_level[i]; tv->tail->next = mp_alloc(tv->mp); tv->tail = tv->tail->next; ++tv->n_nodes; } } if (tv->cur_level[i] > max_level) max_level = tv->cur_level[i]; ((bam_pileup1_t*)p)->level = tv->cur_level[i]; } assert(l == tv->n_pre); tv->func(tid, pos, n, pl, tv->user_data); // sort the linked list if (tv->n_nodes) { freenode_t *q; if (tv->n_nodes + 1 > tv->m_aux) { // enlarge tv->m_aux = tv->n_nodes + 1; kroundup32(tv->m_aux); tv->aux = (freenode_t**)realloc(tv->aux, sizeof(void*) * tv->m_aux); } for (p = tv->head, i = l = 0; p->next;) { if (p->level > max_level) { // then discard this entry q = p->next; mp_free(tv->mp, p); p = q; } else { tv->aux[i++] = p; p = p->next; } } tv->aux[i] = tv->tail; // add a proper tail for the loop below tv->n_nodes = i; if (tv->n_nodes) { ks_introsort(node, tv->n_nodes, tv->aux); for (i = 0; i < tv->n_nodes; ++i) tv->aux[i]->next = tv->aux[i+1]; tv->head = tv->aux[0]; } else tv->head = tv->tail; } // clean up tv->max_level = max_level; memcpy(tv->pre_level, tv->cur_level, tv->n_cur * 4); // squeeze out terminated levels for (i = l = 0; i < n; ++i) { const bam_pileup1_t *p = pl + i; if (!p->is_tail) tv->pre_level[l++] = tv->pre_level[i]; } tv->n_pre = l; /* fprintf(stderr, "%d\t", pos+1); for (i = 0; i < n; ++i) { const bam_pileup1_t *p = pl + i; if (p->is_head) fprintf(stderr, "^"); if (p->is_tail) fprintf(stderr, "$"); fprintf(stderr, "%d,", p->level); } fprintf(stderr, "\n"); */ return 0; } bam_lplbuf_t *bam_lplbuf_init(bam_pileup_f func, void *data) { bam_lplbuf_t *tv; tv = (bam_lplbuf_t*)calloc(1, sizeof(bam_lplbuf_t)); tv->mp = mp_init(); tv->head = tv->tail = mp_alloc(tv->mp); tv->func = func; tv->user_data = data; tv->plbuf = bam_plbuf_init(tview_func, tv); return (bam_lplbuf_t*)tv; } void bam_lplbuf_destroy(bam_lplbuf_t *tv) { freenode_t *p, *q; free(tv->cur_level); free(tv->pre_level); bam_plbuf_destroy(tv->plbuf); free(tv->aux); for (p = tv->head; p->next;) { q = p->next; mp_free(tv->mp, p); p = q; } mp_free(tv->mp, p); assert(tv->mp->cnt == 0); mp_destroy(tv->mp); free(tv); } int bam_lplbuf_push(const bam1_t *b, bam_lplbuf_t *tv) { return bam_plbuf_push(b, tv->plbuf); } genometools-1.5.1/src/external/samtools-0.1.18/bam_mate.c000066400000000000000000000047541211610345200227640ustar00rootroot00000000000000#include #include #include "bam.h" // currently, this function ONLY works if each read has one hit void bam_mating_core(bamFile in, bamFile out) { bam_header_t *header; bam1_t *b[2]; int curr, has_prev; header = bam_header_read(in); bam_header_write(out, header); b[0] = bam_init1(); b[1] = bam_init1(); curr = 0; has_prev = 0; while (bam_read1(in, b[curr]) >= 0) { bam1_t *cur = b[curr], *pre = b[1-curr]; if (has_prev) { if (strcmp(bam1_qname(cur), bam1_qname(pre)) == 0) { // identical pair name cur->core.mtid = pre->core.tid; cur->core.mpos = pre->core.pos; pre->core.mtid = cur->core.tid; pre->core.mpos = cur->core.pos; if (pre->core.tid == cur->core.tid && !(cur->core.flag&(BAM_FUNMAP|BAM_FMUNMAP)) && !(pre->core.flag&(BAM_FUNMAP|BAM_FMUNMAP))) { uint32_t cur5, pre5; cur5 = (cur->core.flag&BAM_FREVERSE)? bam_calend(&cur->core, bam1_cigar(cur)) : cur->core.pos; pre5 = (pre->core.flag&BAM_FREVERSE)? bam_calend(&pre->core, bam1_cigar(pre)) : pre->core.pos; cur->core.isize = pre5 - cur5; pre->core.isize = cur5 - pre5; } else cur->core.isize = pre->core.isize = 0; if (pre->core.flag&BAM_FREVERSE) cur->core.flag |= BAM_FMREVERSE; else cur->core.flag &= ~BAM_FMREVERSE; if (cur->core.flag&BAM_FREVERSE) pre->core.flag |= BAM_FMREVERSE; else pre->core.flag &= ~BAM_FMREVERSE; if (cur->core.flag & BAM_FUNMAP) { pre->core.flag |= BAM_FMUNMAP; pre->core.flag &= ~BAM_FPROPER_PAIR; } if (pre->core.flag & BAM_FUNMAP) { cur->core.flag |= BAM_FMUNMAP; cur->core.flag &= ~BAM_FPROPER_PAIR; } bam_write1(out, pre); bam_write1(out, cur); has_prev = 0; } else { // unpaired or singleton pre->core.mtid = -1; pre->core.mpos = -1; pre->core.isize = 0; if (pre->core.flag & BAM_FPAIRED) { pre->core.flag |= BAM_FMUNMAP; pre->core.flag &= ~BAM_FMREVERSE & ~BAM_FPROPER_PAIR; } bam_write1(out, pre); } } else has_prev = 1; curr = 1 - curr; } if (has_prev) bam_write1(out, b[1-curr]); bam_header_destroy(header); bam_destroy1(b[0]); bam_destroy1(b[1]); } int bam_mating(int argc, char *argv[]) { bamFile in, out; if (argc < 3) { fprintf(stderr, "samtools fixmate \n"); return 1; } in = (strcmp(argv[1], "-") == 0)? bam_dopen(fileno(stdin), "r") : bam_open(argv[1], "r"); out = (strcmp(argv[2], "-") == 0)? bam_dopen(fileno(stdout), "w") : bam_open(argv[2], "w"); bam_mating_core(in, out); bam_close(in); bam_close(out); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bam_md.c000066400000000000000000000310701211610345200224250ustar00rootroot00000000000000#include #include #include #include #include #include "faidx.h" #include "sam.h" #include "kstring.h" #include "kaln.h" #include "kprobaln.h" #define USE_EQUAL 1 #define DROP_TAG 2 #define BIN_QUAL 4 #define UPDATE_NM 8 #define UPDATE_MD 16 #define HASH_QNM 32 char bam_nt16_nt4_table[] = { 4, 0, 1, 4, 2, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4 }; int bam_aux_drop_other(bam1_t *b, uint8_t *s); void bam_fillmd1_core(bam1_t *b, char *ref, int flag, int max_nm) { uint8_t *seq = bam1_seq(b); uint32_t *cigar = bam1_cigar(b); bam1_core_t *c = &b->core; int i, x, y, u = 0; kstring_t *str; int32_t old_nm_i = -1, nm = 0; str = (kstring_t*)calloc(1, sizeof(kstring_t)); for (i = y = 0, x = c->pos; i < c->n_cigar; ++i) { int j, l = cigar[i]>>4, op = cigar[i]&0xf; if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { for (j = 0; j < l; ++j) { int z = y + j; int c1 = bam1_seqi(seq, z), c2 = bam_nt16_table[(int)ref[x+j]]; if (ref[x+j] == 0) break; // out of boundary if ((c1 == c2 && c1 != 15 && c2 != 15) || c1 == 0) { // a match if (flag&USE_EQUAL) seq[z/2] &= (z&1)? 0xf0 : 0x0f; ++u; } else { kputw(u, str); kputc(ref[x+j], str); u = 0; ++nm; } } if (j < l) break; x += l; y += l; } else if (op == BAM_CDEL) { kputw(u, str); kputc('^', str); for (j = 0; j < l; ++j) { if (ref[x+j] == 0) break; kputc(ref[x+j], str); } u = 0; if (j < l) break; x += l; nm += l; } else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) { y += l; if (op == BAM_CINS) nm += l; } else if (op == BAM_CREF_SKIP) { x += l; } } kputw(u, str); // apply max_nm if (max_nm > 0 && nm >= max_nm) { for (i = y = 0, x = c->pos; i < c->n_cigar; ++i) { int j, l = cigar[i]>>4, op = cigar[i]&0xf; if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { for (j = 0; j < l; ++j) { int z = y + j; int c1 = bam1_seqi(seq, z), c2 = bam_nt16_table[(int)ref[x+j]]; if (ref[x+j] == 0) break; // out of boundary if ((c1 == c2 && c1 != 15 && c2 != 15) || c1 == 0) { // a match seq[z/2] |= (z&1)? 0x0f : 0xf0; bam1_qual(b)[z] = 0; } } if (j < l) break; x += l; y += l; } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) x += l; else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; } } // update NM if (flag & UPDATE_NM) { uint8_t *old_nm = bam_aux_get(b, "NM"); if (c->flag & BAM_FUNMAP) return; if (old_nm) old_nm_i = bam_aux2i(old_nm); if (!old_nm) bam_aux_append(b, "NM", 'i', 4, (uint8_t*)&nm); else if (nm != old_nm_i) { fprintf(stderr, "[bam_fillmd1] different NM for read '%s': %d -> %d\n", bam1_qname(b), old_nm_i, nm); bam_aux_del(b, old_nm); bam_aux_append(b, "NM", 'i', 4, (uint8_t*)&nm); } } // update MD if (flag & UPDATE_MD) { uint8_t *old_md = bam_aux_get(b, "MD"); if (c->flag & BAM_FUNMAP) return; if (!old_md) bam_aux_append(b, "MD", 'Z', str->l + 1, (uint8_t*)str->s); else { int is_diff = 0; if (strlen((char*)old_md+1) == str->l) { for (i = 0; i < str->l; ++i) if (toupper(old_md[i+1]) != toupper(str->s[i])) break; if (i < str->l) is_diff = 1; } else is_diff = 1; if (is_diff) { fprintf(stderr, "[bam_fillmd1] different MD for read '%s': '%s' -> '%s'\n", bam1_qname(b), old_md+1, str->s); bam_aux_del(b, old_md); bam_aux_append(b, "MD", 'Z', str->l + 1, (uint8_t*)str->s); } } } // drop all tags but RG if (flag&DROP_TAG) { uint8_t *q = bam_aux_get(b, "RG"); bam_aux_drop_other(b, q); } // reduce the resolution of base quality if (flag&BIN_QUAL) { uint8_t *qual = bam1_qual(b); for (i = 0; i < b->core.l_qseq; ++i) if (qual[i] >= 3) qual[i] = qual[i]/10*10 + 7; } free(str->s); free(str); } void bam_fillmd1(bam1_t *b, char *ref, int flag) { bam_fillmd1_core(b, ref, flag, 0); } int bam_cap_mapQ(bam1_t *b, char *ref, int thres) { uint8_t *seq = bam1_seq(b), *qual = bam1_qual(b); uint32_t *cigar = bam1_cigar(b); bam1_core_t *c = &b->core; int i, x, y, mm, q, len, clip_l, clip_q; double t; if (thres < 0) thres = 40; // set the default mm = q = len = clip_l = clip_q = 0; for (i = y = 0, x = c->pos; i < c->n_cigar; ++i) { int j, l = cigar[i]>>4, op = cigar[i]&0xf; if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { for (j = 0; j < l; ++j) { int z = y + j; int c1 = bam1_seqi(seq, z), c2 = bam_nt16_table[(int)ref[x+j]]; if (ref[x+j] == 0) break; // out of boundary if (c2 != 15 && c1 != 15 && qual[z] >= 13) { // not ambiguous ++len; if (c1 && c1 != c2 && qual[z] >= 13) { // mismatch ++mm; q += qual[z] > 33? 33 : qual[z]; } } } if (j < l) break; x += l; y += l; len += l; } else if (op == BAM_CDEL) { for (j = 0; j < l; ++j) if (ref[x+j] == 0) break; if (j < l) break; x += l; } else if (op == BAM_CSOFT_CLIP) { for (j = 0; j < l; ++j) clip_q += qual[y+j]; clip_l += l; y += l; } else if (op == BAM_CHARD_CLIP) { clip_q += 13 * l; clip_l += l; } else if (op == BAM_CINS) y += l; else if (op == BAM_CREF_SKIP) x += l; } for (i = 0, t = 1; i < mm; ++i) t *= (double)len / (i+1); t = q - 4.343 * log(t) + clip_q / 5.; if (t > thres) return -1; if (t < 0) t = 0; t = sqrt((thres - t) / thres) * thres; // fprintf(stderr, "%s %lf %d\n", bam1_qname(b), t, q); return (int)(t + .499); } int bam_prob_realn_core(bam1_t *b, const char *ref, int flag) { int k, i, bw, x, y, yb, ye, xb, xe, apply_baq = flag&1, extend_baq = flag>>1&1; uint32_t *cigar = bam1_cigar(b); bam1_core_t *c = &b->core; kpa_par_t conf = kpa_par_def; uint8_t *bq = 0, *zq = 0, *qual = bam1_qual(b); if ((c->flag & BAM_FUNMAP) || b->core.l_qseq == 0) return -1; // do nothing // test if BQ or ZQ is present if ((bq = bam_aux_get(b, "BQ")) != 0) ++bq; if ((zq = bam_aux_get(b, "ZQ")) != 0 && *zq == 'Z') ++zq; if (bq && zq) { // remove the ZQ tag bam_aux_del(b, zq-1); zq = 0; } if (bq || zq) { if ((apply_baq && zq) || (!apply_baq && bq)) return -3; // in both cases, do nothing if (bq && apply_baq) { // then convert BQ to ZQ for (i = 0; i < c->l_qseq; ++i) qual[i] = qual[i] + 64 < bq[i]? 0 : qual[i] - ((int)bq[i] - 64); *(bq - 3) = 'Z'; } else if (zq && !apply_baq) { // then convert ZQ to BQ for (i = 0; i < c->l_qseq; ++i) qual[i] += (int)zq[i] - 64; *(zq - 3) = 'B'; } return 0; } // find the start and end of the alignment x = c->pos, y = 0, yb = ye = xb = xe = -1; for (k = 0; k < c->n_cigar; ++k) { int op, l; op = cigar[k]&0xf; l = cigar[k]>>4; if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { if (yb < 0) yb = y; if (xb < 0) xb = x; ye = y + l; xe = x + l; x += l; y += l; } else if (op == BAM_CSOFT_CLIP || op == BAM_CINS) y += l; else if (op == BAM_CDEL) x += l; else if (op == BAM_CREF_SKIP) return -1; // do nothing if there is a reference skip } // set bandwidth and the start and the end bw = 7; if (abs((xe - xb) - (ye - yb)) > bw) bw = abs((xe - xb) - (ye - yb)) + 3; conf.bw = bw; xb -= yb + bw/2; if (xb < 0) xb = 0; xe += c->l_qseq - ye + bw/2; if (xe - xb - c->l_qseq > bw) xb += (xe - xb - c->l_qseq - bw) / 2, xe -= (xe - xb - c->l_qseq - bw) / 2; { // glocal uint8_t *s, *r, *q, *seq = bam1_seq(b), *bq; int *state; bq = calloc(c->l_qseq + 1, 1); memcpy(bq, qual, c->l_qseq); s = calloc(c->l_qseq, 1); for (i = 0; i < c->l_qseq; ++i) s[i] = bam_nt16_nt4_table[bam1_seqi(seq, i)]; r = calloc(xe - xb, 1); for (i = xb; i < xe; ++i) { if (ref[i] == 0) { xe = i; break; } r[i-xb] = bam_nt16_nt4_table[bam_nt16_table[(int)ref[i]]]; } state = calloc(c->l_qseq, sizeof(int)); q = calloc(c->l_qseq, 1); kpa_glocal(r, xe-xb, s, c->l_qseq, qual, &conf, state, q); if (!extend_baq) { // in this block, bq[] is capped by base quality qual[] for (k = 0, x = c->pos, y = 0; k < c->n_cigar; ++k) { int op = cigar[k]&0xf, l = cigar[k]>>4; if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { for (i = y; i < y + l; ++i) { if ((state[i]&3) != 0 || state[i]>>2 != x - xb + (i - y)) bq[i] = 0; else bq[i] = bq[i] < q[i]? bq[i] : q[i]; } x += l; y += l; } else if (op == BAM_CSOFT_CLIP || op == BAM_CINS) y += l; else if (op == BAM_CDEL) x += l; } for (i = 0; i < c->l_qseq; ++i) bq[i] = qual[i] - bq[i] + 64; // finalize BQ } else { // in this block, bq[] is BAQ that can be larger than qual[] (different from the above!) uint8_t *left, *rght; left = calloc(c->l_qseq, 1); rght = calloc(c->l_qseq, 1); for (k = 0, x = c->pos, y = 0; k < c->n_cigar; ++k) { int op = cigar[k]&0xf, l = cigar[k]>>4; if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { for (i = y; i < y + l; ++i) bq[i] = ((state[i]&3) != 0 || state[i]>>2 != x - xb + (i - y))? 0 : q[i]; for (left[y] = bq[y], i = y + 1; i < y + l; ++i) left[i] = bq[i] > left[i-1]? bq[i] : left[i-1]; for (rght[y+l-1] = bq[y+l-1], i = y + l - 2; i >= y; --i) rght[i] = bq[i] > rght[i+1]? bq[i] : rght[i+1]; for (i = y; i < y + l; ++i) bq[i] = left[i] < rght[i]? left[i] : rght[i]; x += l; y += l; } else if (op == BAM_CSOFT_CLIP || op == BAM_CINS) y += l; else if (op == BAM_CDEL) x += l; } for (i = 0; i < c->l_qseq; ++i) bq[i] = 64 + (qual[i] <= bq[i]? 0 : qual[i] - bq[i]); // finalize BQ free(left); free(rght); } if (apply_baq) { for (i = 0; i < c->l_qseq; ++i) qual[i] -= bq[i] - 64; // modify qual bam_aux_append(b, "ZQ", 'Z', c->l_qseq + 1, bq); } else bam_aux_append(b, "BQ", 'Z', c->l_qseq + 1, bq); free(bq); free(s); free(r); free(q); free(state); } return 0; } int bam_prob_realn(bam1_t *b, const char *ref) { return bam_prob_realn_core(b, ref, 1); } int bam_fillmd(int argc, char *argv[]) { int c, flt_flag, tid = -2, ret, len, is_bam_out, is_sam_in, is_uncompressed, max_nm, is_realn, capQ, baq_flag; samfile_t *fp, *fpout = 0; faidx_t *fai; char *ref = 0, mode_w[8], mode_r[8]; bam1_t *b; flt_flag = UPDATE_NM | UPDATE_MD; is_bam_out = is_sam_in = is_uncompressed = is_realn = max_nm = capQ = baq_flag = 0; mode_w[0] = mode_r[0] = 0; strcpy(mode_r, "r"); strcpy(mode_w, "w"); while ((c = getopt(argc, argv, "EqreuNhbSC:n:Ad")) >= 0) { switch (c) { case 'r': is_realn = 1; break; case 'e': flt_flag |= USE_EQUAL; break; case 'd': flt_flag |= DROP_TAG; break; case 'q': flt_flag |= BIN_QUAL; break; case 'h': flt_flag |= HASH_QNM; break; case 'N': flt_flag &= ~(UPDATE_MD|UPDATE_NM); break; case 'b': is_bam_out = 1; break; case 'u': is_uncompressed = is_bam_out = 1; break; case 'S': is_sam_in = 1; break; case 'n': max_nm = atoi(optarg); break; case 'C': capQ = atoi(optarg); break; case 'A': baq_flag |= 1; break; case 'E': baq_flag |= 2; break; default: fprintf(stderr, "[bam_fillmd] unrecognized option '-%c'\n", c); return 1; } } if (!is_sam_in) strcat(mode_r, "b"); if (is_bam_out) strcat(mode_w, "b"); else strcat(mode_w, "h"); if (is_uncompressed) strcat(mode_w, "u"); if (optind + 1 >= argc) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: samtools fillmd [-eubrS] \n\n"); fprintf(stderr, "Options: -e change identical bases to '='\n"); fprintf(stderr, " -u uncompressed BAM output (for piping)\n"); fprintf(stderr, " -b compressed BAM output\n"); fprintf(stderr, " -S the input is SAM with header\n"); fprintf(stderr, " -A modify the quality string\n"); fprintf(stderr, " -r compute the BQ tag (without -A) or cap baseQ by BAQ (with -A)\n"); fprintf(stderr, " -E extended BAQ for better sensitivity but lower specificity\n\n"); return 1; } fp = samopen(argv[optind], mode_r, 0); if (fp == 0) return 1; if (is_sam_in && (fp->header == 0 || fp->header->n_targets == 0)) { fprintf(stderr, "[bam_fillmd] input SAM does not have header. Abort!\n"); return 1; } fpout = samopen("-", mode_w, fp->header); fai = fai_load(argv[optind+1]); b = bam_init1(); while ((ret = samread(fp, b)) >= 0) { if (b->core.tid >= 0) { if (tid != b->core.tid) { free(ref); ref = fai_fetch(fai, fp->header->target_name[b->core.tid], &len); tid = b->core.tid; if (ref == 0) fprintf(stderr, "[bam_fillmd] fail to find sequence '%s' in the reference.\n", fp->header->target_name[tid]); } if (is_realn) bam_prob_realn_core(b, ref, baq_flag); if (capQ > 10) { int q = bam_cap_mapQ(b, ref, capQ); if (b->core.qual > q) b->core.qual = q; } if (ref) bam_fillmd1_core(b, ref, flt_flag, max_nm); } samwrite(fpout, b); } bam_destroy1(b); free(ref); fai_destroy(fai); samclose(fp); samclose(fpout); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bam_pileup.c000066400000000000000000000312321211610345200233230ustar00rootroot00000000000000#include #include #include #include #include "sam.h" typedef struct { int k, x, y, end; } cstate_t; static cstate_t g_cstate_null = { -1, 0, 0, 0 }; typedef struct __linkbuf_t { bam1_t b; uint32_t beg, end; cstate_t s; struct __linkbuf_t *next; } lbnode_t; /* --- BEGIN: Memory pool */ typedef struct { int cnt, n, max; lbnode_t **buf; } mempool_t; static mempool_t *mp_init() { mempool_t *mp; mp = (mempool_t*)calloc(1, sizeof(mempool_t)); return mp; } static void mp_destroy(mempool_t *mp) { int k; for (k = 0; k < mp->n; ++k) { free(mp->buf[k]->b.data); free(mp->buf[k]); } free(mp->buf); free(mp); } static inline lbnode_t *mp_alloc(mempool_t *mp) { ++mp->cnt; if (mp->n == 0) return (lbnode_t*)calloc(1, sizeof(lbnode_t)); else return mp->buf[--mp->n]; } static inline void mp_free(mempool_t *mp, lbnode_t *p) { --mp->cnt; p->next = 0; // clear lbnode_t::next here if (mp->n == mp->max) { mp->max = mp->max? mp->max<<1 : 256; mp->buf = (lbnode_t**)realloc(mp->buf, sizeof(lbnode_t*) * mp->max); } mp->buf[mp->n++] = p; } /* --- END: Memory pool */ /* --- BEGIN: Auxiliary functions */ /* s->k: the index of the CIGAR operator that has just been processed. s->x: the reference coordinate of the start of s->k s->y: the query coordiante of the start of s->k */ static inline int resolve_cigar2(bam_pileup1_t *p, uint32_t pos, cstate_t *s) { #define _cop(c) ((c)&BAM_CIGAR_MASK) #define _cln(c) ((c)>>BAM_CIGAR_SHIFT) bam1_t *b = p->b; bam1_core_t *c = &b->core; uint32_t *cigar = bam1_cigar(b); int k, is_head = 0; // determine the current CIGAR operation // fprintf(stderr, "%s\tpos=%d\tend=%d\t(%d,%d,%d)\n", bam1_qname(b), pos, s->end, s->k, s->x, s->y); if (s->k == -1) { // never processed is_head = 1; if (c->n_cigar == 1) { // just one operation, save a loop if (_cop(cigar[0]) == BAM_CMATCH || _cop(cigar[0]) == BAM_CEQUAL || _cop(cigar[0]) == BAM_CDIFF) s->k = 0, s->x = c->pos, s->y = 0; } else { // find the first match or deletion for (k = 0, s->x = c->pos, s->y = 0; k < c->n_cigar; ++k) { int op = _cop(cigar[k]); int l = _cln(cigar[k]); if (op == BAM_CMATCH || op == BAM_CDEL || op == BAM_CEQUAL || op == BAM_CDIFF) break; else if (op == BAM_CREF_SKIP) s->x += l; else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) s->y += l; } assert(k < c->n_cigar); s->k = k; } } else { // the read has been processed before int op, l = _cln(cigar[s->k]); if (pos - s->x >= l) { // jump to the next operation assert(s->k < c->n_cigar); // otherwise a bug: this function should not be called in this case op = _cop(cigar[s->k+1]); if (op == BAM_CMATCH || op == BAM_CDEL || op == BAM_CREF_SKIP || op == BAM_CEQUAL || op == BAM_CDIFF) { // jump to the next without a loop if (_cop(cigar[s->k]) == BAM_CMATCH|| _cop(cigar[s->k]) == BAM_CEQUAL || _cop(cigar[s->k]) == BAM_CDIFF) s->y += l; s->x += l; ++s->k; } else { // find the next M/D/N/=/X if (_cop(cigar[s->k]) == BAM_CMATCH|| _cop(cigar[s->k]) == BAM_CEQUAL || _cop(cigar[s->k]) == BAM_CDIFF) s->y += l; s->x += l; for (k = s->k + 1; k < c->n_cigar; ++k) { op = _cop(cigar[k]), l = _cln(cigar[k]); if (op == BAM_CMATCH || op == BAM_CDEL || op == BAM_CREF_SKIP || op == BAM_CEQUAL || op == BAM_CDIFF) break; else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) s->y += l; } s->k = k; } assert(s->k < c->n_cigar); // otherwise a bug } // else, do nothing } { // collect pileup information int op, l; op = _cop(cigar[s->k]); l = _cln(cigar[s->k]); p->is_del = p->indel = p->is_refskip = 0; if (s->x + l - 1 == pos && s->k + 1 < c->n_cigar) { // peek the next operation int op2 = _cop(cigar[s->k+1]); int l2 = _cln(cigar[s->k+1]); if (op2 == BAM_CDEL) p->indel = -(int)l2; else if (op2 == BAM_CINS) p->indel = l2; else if (op2 == BAM_CPAD && s->k + 2 < c->n_cigar) { // no working for adjacent padding int l3 = 0; for (k = s->k + 2; k < c->n_cigar; ++k) { op2 = _cop(cigar[k]); l2 = _cln(cigar[k]); if (op2 == BAM_CINS) l3 += l2; else if (op2 == BAM_CDEL || op2 == BAM_CMATCH || op2 == BAM_CREF_SKIP || op2 == BAM_CEQUAL || op2 == BAM_CDIFF) break; } if (l3 > 0) p->indel = l3; } } if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { p->qpos = s->y + (pos - s->x); } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) { p->is_del = 1; p->qpos = s->y; // FIXME: distinguish D and N!!!!! p->is_refskip = (op == BAM_CREF_SKIP); } // cannot be other operations; otherwise a bug p->is_head = (pos == c->pos); p->is_tail = (pos == s->end); } return 1; } /* --- END: Auxiliary functions */ /******************* * pileup iterator * *******************/ struct __bam_plp_t { mempool_t *mp; lbnode_t *head, *tail, *dummy; int32_t tid, pos, max_tid, max_pos; int is_eof, flag_mask, max_plp, error, maxcnt; bam_pileup1_t *plp; // for the "auto" interface only bam1_t *b; bam_plp_auto_f func; void *data; }; bam_plp_t bam_plp_init(bam_plp_auto_f func, void *data) { bam_plp_t iter; iter = calloc(1, sizeof(struct __bam_plp_t)); iter->mp = mp_init(); iter->head = iter->tail = mp_alloc(iter->mp); iter->dummy = mp_alloc(iter->mp); iter->max_tid = iter->max_pos = -1; iter->flag_mask = BAM_DEF_MASK; iter->maxcnt = 8000; if (func) { iter->func = func; iter->data = data; iter->b = bam_init1(); } return iter; } void bam_plp_destroy(bam_plp_t iter) { mp_free(iter->mp, iter->dummy); mp_free(iter->mp, iter->head); if (iter->mp->cnt != 0) fprintf(stderr, "[bam_plp_destroy] memory leak: %d. Continue anyway.\n", iter->mp->cnt); mp_destroy(iter->mp); if (iter->b) bam_destroy1(iter->b); free(iter->plp); free(iter); } const bam_pileup1_t *bam_plp_next(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp) { if (iter->error) { *_n_plp = -1; return 0; } *_n_plp = 0; if (iter->is_eof && iter->head->next == 0) return 0; while (iter->is_eof || iter->max_tid > iter->tid || (iter->max_tid == iter->tid && iter->max_pos > iter->pos)) { int n_plp = 0; lbnode_t *p, *q; // write iter->plp at iter->pos iter->dummy->next = iter->head; for (p = iter->head, q = iter->dummy; p->next; q = p, p = p->next) { if (p->b.core.tid < iter->tid || (p->b.core.tid == iter->tid && p->end <= iter->pos)) { // then remove q->next = p->next; mp_free(iter->mp, p); p = q; } else if (p->b.core.tid == iter->tid && p->beg <= iter->pos) { // here: p->end > pos; then add to pileup if (n_plp == iter->max_plp) { // then double the capacity iter->max_plp = iter->max_plp? iter->max_plp<<1 : 256; iter->plp = (bam_pileup1_t*)realloc(iter->plp, sizeof(bam_pileup1_t) * iter->max_plp); } iter->plp[n_plp].b = &p->b; if (resolve_cigar2(iter->plp + n_plp, iter->pos, &p->s)) ++n_plp; // actually always true... } } iter->head = iter->dummy->next; // dummy->next may be changed *_n_plp = n_plp; *_tid = iter->tid; *_pos = iter->pos; // update iter->tid and iter->pos if (iter->head->next) { if (iter->tid > iter->head->b.core.tid) { fprintf(stderr, "[%s] unsorted input. Pileup aborts.\n", __func__); iter->error = 1; *_n_plp = -1; return 0; } } if (iter->tid < iter->head->b.core.tid) { // come to a new reference sequence iter->tid = iter->head->b.core.tid; iter->pos = iter->head->beg; // jump to the next reference } else if (iter->pos < iter->head->beg) { // here: tid == head->b.core.tid iter->pos = iter->head->beg; // jump to the next position } else ++iter->pos; // scan contiguously // return if (n_plp) return iter->plp; if (iter->is_eof && iter->head->next == 0) break; } return 0; } int bam_plp_push(bam_plp_t iter, const bam1_t *b) { if (iter->error) return -1; if (b) { if (b->core.tid < 0) return 0; if (b->core.flag & iter->flag_mask) return 0; if (iter->tid == b->core.tid && iter->pos == b->core.pos && iter->mp->cnt > iter->maxcnt) return 0; bam_copy1(&iter->tail->b, b); iter->tail->beg = b->core.pos; iter->tail->end = bam_calend(&b->core, bam1_cigar(b)); iter->tail->s = g_cstate_null; iter->tail->s.end = iter->tail->end - 1; // initialize cstate_t if (b->core.tid < iter->max_tid) { fprintf(stderr, "[bam_pileup_core] the input is not sorted (chromosomes out of order)\n"); iter->error = 1; return -1; } if ((b->core.tid == iter->max_tid) && (iter->tail->beg < iter->max_pos)) { fprintf(stderr, "[bam_pileup_core] the input is not sorted (reads out of order)\n"); iter->error = 1; return -1; } iter->max_tid = b->core.tid; iter->max_pos = iter->tail->beg; if (iter->tail->end > iter->pos || iter->tail->b.core.tid > iter->tid) { iter->tail->next = mp_alloc(iter->mp); iter->tail = iter->tail->next; } } else iter->is_eof = 1; return 0; } const bam_pileup1_t *bam_plp_auto(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp) { const bam_pileup1_t *plp; if (iter->func == 0 || iter->error) { *_n_plp = -1; return 0; } if ((plp = bam_plp_next(iter, _tid, _pos, _n_plp)) != 0) return plp; else { // no pileup line can be obtained; read alignments *_n_plp = 0; if (iter->is_eof) return 0; while (iter->func(iter->data, iter->b) >= 0) { if (bam_plp_push(iter, iter->b) < 0) { *_n_plp = -1; return 0; } if ((plp = bam_plp_next(iter, _tid, _pos, _n_plp)) != 0) return plp; // otherwise no pileup line can be returned; read the next alignment. } bam_plp_push(iter, 0); if ((plp = bam_plp_next(iter, _tid, _pos, _n_plp)) != 0) return plp; return 0; } } void bam_plp_reset(bam_plp_t iter) { lbnode_t *p, *q; iter->max_tid = iter->max_pos = -1; iter->tid = iter->pos = 0; iter->is_eof = 0; for (p = iter->head; p->next;) { q = p->next; mp_free(iter->mp, p); p = q; } iter->head = iter->tail; } void bam_plp_set_mask(bam_plp_t iter, int mask) { iter->flag_mask = mask < 0? BAM_DEF_MASK : (BAM_FUNMAP | mask); } void bam_plp_set_maxcnt(bam_plp_t iter, int maxcnt) { iter->maxcnt = maxcnt; } /***************** * callback APIs * *****************/ int bam_pileup_file(bamFile fp, int mask, bam_pileup_f func, void *func_data) { bam_plbuf_t *buf; int ret; bam1_t *b; b = bam_init1(); buf = bam_plbuf_init(func, func_data); bam_plbuf_set_mask(buf, mask); while ((ret = bam_read1(fp, b)) >= 0) bam_plbuf_push(b, buf); bam_plbuf_push(0, buf); bam_plbuf_destroy(buf); bam_destroy1(b); return 0; } void bam_plbuf_set_mask(bam_plbuf_t *buf, int mask) { bam_plp_set_mask(buf->iter, mask); } void bam_plbuf_reset(bam_plbuf_t *buf) { bam_plp_reset(buf->iter); } bam_plbuf_t *bam_plbuf_init(bam_pileup_f func, void *data) { bam_plbuf_t *buf; buf = calloc(1, sizeof(bam_plbuf_t)); buf->iter = bam_plp_init(0, 0); buf->func = func; buf->data = data; return buf; } void bam_plbuf_destroy(bam_plbuf_t *buf) { bam_plp_destroy(buf->iter); free(buf); } int bam_plbuf_push(const bam1_t *b, bam_plbuf_t *buf) { int ret, n_plp, tid, pos; const bam_pileup1_t *plp; ret = bam_plp_push(buf->iter, b); if (ret < 0) return ret; while ((plp = bam_plp_next(buf->iter, &tid, &pos, &n_plp)) != 0) buf->func(tid, pos, n_plp, plp, buf->data); return 0; } /*********** * mpileup * ***********/ struct __bam_mplp_t { int n; uint64_t min, *pos; bam_plp_t *iter; int *n_plp; const bam_pileup1_t **plp; }; bam_mplp_t bam_mplp_init(int n, bam_plp_auto_f func, void **data) { int i; bam_mplp_t iter; iter = calloc(1, sizeof(struct __bam_mplp_t)); iter->pos = calloc(n, 8); iter->n_plp = calloc(n, sizeof(int)); iter->plp = calloc(n, sizeof(void*)); iter->iter = calloc(n, sizeof(void*)); iter->n = n; iter->min = (uint64_t)-1; for (i = 0; i < n; ++i) { iter->iter[i] = bam_plp_init(func, data[i]); iter->pos[i] = iter->min; } return iter; } void bam_mplp_set_maxcnt(bam_mplp_t iter, int maxcnt) { int i; for (i = 0; i < iter->n; ++i) iter->iter[i]->maxcnt = maxcnt; } void bam_mplp_destroy(bam_mplp_t iter) { int i; for (i = 0; i < iter->n; ++i) bam_plp_destroy(iter->iter[i]); free(iter->iter); free(iter->pos); free(iter->n_plp); free(iter->plp); free(iter); } int bam_mplp_auto(bam_mplp_t iter, int *_tid, int *_pos, int *n_plp, const bam_pileup1_t **plp) { int i, ret = 0; uint64_t new_min = (uint64_t)-1; for (i = 0; i < iter->n; ++i) { if (iter->pos[i] == iter->min) { int tid, pos; iter->plp[i] = bam_plp_auto(iter->iter[i], &tid, &pos, &iter->n_plp[i]); iter->pos[i] = (uint64_t)tid<<32 | pos; } if (iter->plp[i] && iter->pos[i] < new_min) new_min = iter->pos[i]; } iter->min = new_min; if (new_min == (uint64_t)-1) return 0; *_tid = new_min>>32; *_pos = (uint32_t)new_min; for (i = 0; i < iter->n; ++i) { if (iter->pos[i] == iter->min) { // FIXME: valgrind reports "uninitialised value(s) at this line" n_plp[i] = iter->n_plp[i], plp[i] = iter->plp[i]; ++ret; } else n_plp[i] = 0, plp[i] = 0; } return ret; } genometools-1.5.1/src/external/samtools-0.1.18/bam_plcmd.c000066400000000000000000000461501211610345200231310ustar00rootroot00000000000000#include #include #include #include #include #include #include "sam.h" #include "faidx.h" #include "kstring.h" static inline int printw(int c, FILE *fp) { char buf[16]; int l, x; if (c == 0) return fputc('0', fp); for (l = 0, x = c < 0? -c : c; x > 0; x /= 10) buf[l++] = x%10 + '0'; if (c < 0) buf[l++] = '-'; buf[l] = 0; for (x = 0; x < l/2; ++x) { int y = buf[x]; buf[x] = buf[l-1-x]; buf[l-1-x] = y; } fputs(buf, fp); return 0; } static inline void pileup_seq(const bam_pileup1_t *p, int pos, int ref_len, const char *ref) { int j; if (p->is_head) { putchar('^'); putchar(p->b->core.qual > 93? 126 : p->b->core.qual + 33); } if (!p->is_del) { int c = bam_nt16_rev_table[bam1_seqi(bam1_seq(p->b), p->qpos)]; if (ref) { int rb = pos < ref_len? ref[pos] : 'N'; if (c == '=' || bam_nt16_table[c] == bam_nt16_table[rb]) c = bam1_strand(p->b)? ',' : '.'; else c = bam1_strand(p->b)? tolower(c) : toupper(c); } else { if (c == '=') c = bam1_strand(p->b)? ',' : '.'; else c = bam1_strand(p->b)? tolower(c) : toupper(c); } putchar(c); } else putchar(p->is_refskip? (bam1_strand(p->b)? '<' : '>') : '*'); if (p->indel > 0) { putchar('+'); printw(p->indel, stdout); for (j = 1; j <= p->indel; ++j) { int c = bam_nt16_rev_table[bam1_seqi(bam1_seq(p->b), p->qpos + j)]; putchar(bam1_strand(p->b)? tolower(c) : toupper(c)); } } else if (p->indel < 0) { printw(p->indel, stdout); for (j = 1; j <= -p->indel; ++j) { int c = (ref && (int)pos+j < ref_len)? ref[pos+j] : 'N'; putchar(bam1_strand(p->b)? tolower(c) : toupper(c)); } } if (p->is_tail) putchar('$'); } #include #include "bam2bcf.h" #include "sample.h" #define MPLP_GLF 0x10 #define MPLP_NO_COMP 0x20 #define MPLP_NO_ORPHAN 0x40 #define MPLP_REALN 0x80 #define MPLP_FMT_DP 0x100 #define MPLP_FMT_SP 0x200 #define MPLP_NO_INDEL 0x400 #define MPLP_EXT_BAQ 0x800 #define MPLP_ILLUMINA13 0x1000 #define MPLP_IGNORE_RG 0x2000 #define MPLP_PRINT_POS 0x4000 #define MPLP_PRINT_MAPQ 0x8000 void *bed_read(const char *fn); void bed_destroy(void *_h); int bed_overlap(const void *_h, const char *chr, int beg, int end); typedef struct { int max_mq, min_mq, flag, min_baseQ, capQ_thres, max_depth, max_indel_depth; int openQ, extQ, tandemQ, min_support; // for indels double min_frac; // for indels char *reg, *pl_list; faidx_t *fai; void *bed, *rghash; } mplp_conf_t; typedef struct { bamFile fp; bam_iter_t iter; bam_header_t *h; int ref_id; char *ref; const mplp_conf_t *conf; } mplp_aux_t; typedef struct { int n; int *n_plp, *m_plp; bam_pileup1_t **plp; } mplp_pileup_t; static int mplp_func(void *data, bam1_t *b) { extern int bam_realn(bam1_t *b, const char *ref); extern int bam_prob_realn_core(bam1_t *b, const char *ref, int); extern int bam_cap_mapQ(bam1_t *b, char *ref, int thres); mplp_aux_t *ma = (mplp_aux_t*)data; int ret, skip = 0; do { int has_ref; ret = ma->iter? bam_iter_read(ma->fp, ma->iter, b) : bam_read1(ma->fp, b); if (ret < 0) break; if (b->core.tid < 0 || (b->core.flag&BAM_FUNMAP)) { // exclude unmapped reads skip = 1; continue; } if (ma->conf->bed) { // test overlap skip = !bed_overlap(ma->conf->bed, ma->h->target_name[b->core.tid], b->core.pos, bam_calend(&b->core, bam1_cigar(b))); if (skip) continue; } if (ma->conf->rghash) { // exclude read groups uint8_t *rg = bam_aux_get(b, "RG"); skip = (rg && bcf_str2id(ma->conf->rghash, (const char*)(rg+1)) >= 0); if (skip) continue; } if (ma->conf->flag & MPLP_ILLUMINA13) { int i; uint8_t *qual = bam1_qual(b); for (i = 0; i < b->core.l_qseq; ++i) qual[i] = qual[i] > 31? qual[i] - 31 : 0; } has_ref = (ma->ref && ma->ref_id == b->core.tid)? 1 : 0; skip = 0; if (has_ref && (ma->conf->flag&MPLP_REALN)) bam_prob_realn_core(b, ma->ref, (ma->conf->flag & MPLP_EXT_BAQ)? 3 : 1); if (has_ref && ma->conf->capQ_thres > 10) { int q = bam_cap_mapQ(b, ma->ref, ma->conf->capQ_thres); if (q < 0) skip = 1; else if (b->core.qual > q) b->core.qual = q; } else if (b->core.qual < ma->conf->min_mq) skip = 1; else if ((ma->conf->flag&MPLP_NO_ORPHAN) && (b->core.flag&1) && !(b->core.flag&2)) skip = 1; } while (skip); return ret; } static void group_smpl(mplp_pileup_t *m, bam_sample_t *sm, kstring_t *buf, int n, char *const*fn, int *n_plp, const bam_pileup1_t **plp, int ignore_rg) { int i, j; memset(m->n_plp, 0, m->n * sizeof(int)); for (i = 0; i < n; ++i) { for (j = 0; j < n_plp[i]; ++j) { const bam_pileup1_t *p = plp[i] + j; uint8_t *q; int id = -1; q = ignore_rg? 0 : bam_aux_get(p->b, "RG"); if (q) id = bam_smpl_rg2smid(sm, fn[i], (char*)q+1, buf); if (id < 0) id = bam_smpl_rg2smid(sm, fn[i], 0, buf); if (id < 0 || id >= m->n) { assert(q); // otherwise a bug fprintf(stderr, "[%s] Read group %s used in file %s but absent from the header or an alignment missing read group.\n", __func__, (char*)q+1, fn[i]); exit(1); } if (m->n_plp[id] == m->m_plp[id]) { m->m_plp[id] = m->m_plp[id]? m->m_plp[id]<<1 : 8; m->plp[id] = realloc(m->plp[id], sizeof(bam_pileup1_t) * m->m_plp[id]); } m->plp[id][m->n_plp[id]++] = *p; } } } static int mpileup(mplp_conf_t *conf, int n, char **fn) { extern void *bcf_call_add_rg(void *rghash, const char *hdtext, const char *list); extern void bcf_call_del_rghash(void *rghash); mplp_aux_t **data; int i, tid, pos, *n_plp, tid0 = -1, beg0 = 0, end0 = 1u<<29, ref_len, ref_tid = -1, max_depth, max_indel_depth; const bam_pileup1_t **plp; bam_mplp_t iter; bam_header_t *h = 0; char *ref; void *rghash = 0; bcf_callaux_t *bca = 0; bcf_callret1_t *bcr = 0; bcf_call_t bc; bcf_t *bp = 0; bcf_hdr_t *bh = 0; bam_sample_t *sm = 0; kstring_t buf; mplp_pileup_t gplp; memset(&gplp, 0, sizeof(mplp_pileup_t)); memset(&buf, 0, sizeof(kstring_t)); memset(&bc, 0, sizeof(bcf_call_t)); data = calloc(n, sizeof(void*)); plp = calloc(n, sizeof(void*)); n_plp = calloc(n, sizeof(int*)); sm = bam_smpl_init(); // read the header and initialize data for (i = 0; i < n; ++i) { bam_header_t *h_tmp; data[i] = calloc(1, sizeof(mplp_aux_t)); data[i]->fp = strcmp(fn[i], "-") == 0? bam_dopen(fileno(stdin), "r") : bam_open(fn[i], "r"); data[i]->conf = conf; h_tmp = bam_header_read(data[i]->fp); data[i]->h = i? h : h_tmp; // for i==0, "h" has not been set yet bam_smpl_add(sm, fn[i], (conf->flag&MPLP_IGNORE_RG)? 0 : h_tmp->text); rghash = bcf_call_add_rg(rghash, h_tmp->text, conf->pl_list); if (conf->reg) { int beg, end; bam_index_t *idx; idx = bam_index_load(fn[i]); if (idx == 0) { fprintf(stderr, "[%s] fail to load index for %d-th input.\n", __func__, i+1); exit(1); } if (bam_parse_region(h_tmp, conf->reg, &tid, &beg, &end) < 0) { fprintf(stderr, "[%s] malformatted region or wrong seqname for %d-th input.\n", __func__, i+1); exit(1); } if (i == 0) tid0 = tid, beg0 = beg, end0 = end; data[i]->iter = bam_iter_query(idx, tid, beg, end); bam_index_destroy(idx); } if (i == 0) h = h_tmp; else { // FIXME: to check consistency bam_header_destroy(h_tmp); } } gplp.n = sm->n; gplp.n_plp = calloc(sm->n, sizeof(int)); gplp.m_plp = calloc(sm->n, sizeof(int)); gplp.plp = calloc(sm->n, sizeof(void*)); fprintf(stderr, "[%s] %d samples in %d input files\n", __func__, sm->n, n); // write the VCF header if (conf->flag & MPLP_GLF) { kstring_t s; bh = calloc(1, sizeof(bcf_hdr_t)); s.l = s.m = 0; s.s = 0; bp = bcf_open("-", (conf->flag&MPLP_NO_COMP)? "wu" : "w"); for (i = 0; i < h->n_targets; ++i) { kputs(h->target_name[i], &s); kputc('\0', &s); } bh->l_nm = s.l; bh->name = malloc(s.l); memcpy(bh->name, s.s, s.l); s.l = 0; for (i = 0; i < sm->n; ++i) { kputs(sm->smpl[i], &s); kputc('\0', &s); } bh->l_smpl = s.l; bh->sname = malloc(s.l); memcpy(bh->sname, s.s, s.l); bh->txt = malloc(strlen(BAM_VERSION) + 64); bh->l_txt = 1 + sprintf(bh->txt, "##samtoolsVersion=%s\n", BAM_VERSION); free(s.s); bcf_hdr_sync(bh); bcf_hdr_write(bp, bh); bca = bcf_call_init(-1., conf->min_baseQ); bcr = calloc(sm->n, sizeof(bcf_callret1_t)); bca->rghash = rghash; bca->openQ = conf->openQ, bca->extQ = conf->extQ, bca->tandemQ = conf->tandemQ; bca->min_frac = conf->min_frac; bca->min_support = conf->min_support; } if (tid0 >= 0 && conf->fai) { // region is set ref = faidx_fetch_seq(conf->fai, h->target_name[tid0], 0, 0x7fffffff, &ref_len); ref_tid = tid0; for (i = 0; i < n; ++i) data[i]->ref = ref, data[i]->ref_id = tid0; } else ref_tid = -1, ref = 0; iter = bam_mplp_init(n, mplp_func, (void**)data); max_depth = conf->max_depth; if (max_depth * sm->n > 1<<20) fprintf(stderr, "(%s) Max depth is above 1M. Potential memory hog!\n", __func__); if (max_depth * sm->n < 8000) { max_depth = 8000 / sm->n; fprintf(stderr, "<%s> Set max per-file depth to %d\n", __func__, max_depth); } max_indel_depth = conf->max_indel_depth * sm->n; bam_mplp_set_maxcnt(iter, max_depth); while (bam_mplp_auto(iter, &tid, &pos, n_plp, plp) > 0) { if (conf->reg && (pos < beg0 || pos >= end0)) continue; // out of the region requested if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, h->target_name[tid], pos, pos+1)) continue; if (tid != ref_tid) { free(ref); ref = 0; if (conf->fai) ref = faidx_fetch_seq(conf->fai, h->target_name[tid], 0, 0x7fffffff, &ref_len); for (i = 0; i < n; ++i) data[i]->ref = ref, data[i]->ref_id = tid; ref_tid = tid; } if (conf->flag & MPLP_GLF) { int total_depth, _ref0, ref16; bcf1_t *b = calloc(1, sizeof(bcf1_t)); for (i = total_depth = 0; i < n; ++i) total_depth += n_plp[i]; group_smpl(&gplp, sm, &buf, n, fn, n_plp, plp, conf->flag & MPLP_IGNORE_RG); _ref0 = (ref && pos < ref_len)? ref[pos] : 'N'; ref16 = bam_nt16_table[_ref0]; for (i = 0; i < gplp.n; ++i) bcf_call_glfgen(gplp.n_plp[i], gplp.plp[i], ref16, bca, bcr + i); bcf_call_combine(gplp.n, bcr, ref16, &bc); bcf_call2bcf(tid, pos, &bc, b, (conf->flag&(MPLP_FMT_DP|MPLP_FMT_SP))? bcr : 0, (conf->flag&MPLP_FMT_SP), 0, 0); bcf_write(bp, bh, b); bcf_destroy(b); // call indels if (!(conf->flag&MPLP_NO_INDEL) && total_depth < max_indel_depth && bcf_call_gap_prep(gplp.n, gplp.n_plp, gplp.plp, pos, bca, ref, rghash) >= 0) { for (i = 0; i < gplp.n; ++i) bcf_call_glfgen(gplp.n_plp[i], gplp.plp[i], -1, bca, bcr + i); if (bcf_call_combine(gplp.n, bcr, -1, &bc) >= 0) { b = calloc(1, sizeof(bcf1_t)); bcf_call2bcf(tid, pos, &bc, b, (conf->flag&(MPLP_FMT_DP|MPLP_FMT_SP))? bcr : 0, (conf->flag&MPLP_FMT_SP), bca, ref); bcf_write(bp, bh, b); bcf_destroy(b); } } } else { printf("%s\t%d\t%c", h->target_name[tid], pos + 1, (ref && pos < ref_len)? ref[pos] : 'N'); for (i = 0; i < n; ++i) { int j; printf("\t%d\t", n_plp[i]); if (n_plp[i] == 0) { printf("*\t*"); // FIXME: printf() is very slow... if (conf->flag & MPLP_PRINT_POS) printf("\t*"); } else { for (j = 0; j < n_plp[i]; ++j) pileup_seq(plp[i] + j, pos, ref_len, ref); putchar('\t'); for (j = 0; j < n_plp[i]; ++j) { const bam_pileup1_t *p = plp[i] + j; int c = bam1_qual(p->b)[p->qpos] + 33; if (c > 126) c = 126; putchar(c); } if (conf->flag & MPLP_PRINT_MAPQ) { putchar('\t'); for (j = 0; j < n_plp[i]; ++j) { int c = plp[i][j].b->core.qual + 33; if (c > 126) c = 126; putchar(c); } } if (conf->flag & MPLP_PRINT_POS) { putchar('\t'); for (j = 0; j < n_plp[i]; ++j) { if (j > 0) putchar(','); printf("%d", plp[i][j].qpos + 1); // FIXME: printf() is very slow... } } } } putchar('\n'); } } bcf_close(bp); bam_smpl_destroy(sm); free(buf.s); for (i = 0; i < gplp.n; ++i) free(gplp.plp[i]); free(gplp.plp); free(gplp.n_plp); free(gplp.m_plp); bcf_call_del_rghash(rghash); bcf_hdr_destroy(bh); bcf_call_destroy(bca); free(bc.PL); free(bcr); bam_mplp_destroy(iter); bam_header_destroy(h); for (i = 0; i < n; ++i) { bam_close(data[i]->fp); if (data[i]->iter) bam_iter_destroy(data[i]->iter); free(data[i]); } free(data); free(plp); free(ref); free(n_plp); return 0; } #define MAX_PATH_LEN 1024 static int read_file_list(const char *file_list,int *n,char **argv[]) { char buf[MAX_PATH_LEN]; int len, nfiles; char **files; FILE *fh = fopen(file_list,"r"); if ( !fh ) { fprintf(stderr,"%s: %s\n", file_list,strerror(errno)); return 1; } // Speed is not an issue here, determine the number of files by reading the file twice nfiles = 0; while ( fgets(buf,MAX_PATH_LEN,fh) ) nfiles++; if ( fseek(fh, 0L, SEEK_SET) ) { fprintf(stderr,"%s: %s\n", file_list,strerror(errno)); return 1; } files = calloc(nfiles,sizeof(char*)); nfiles = 0; while ( fgets(buf,MAX_PATH_LEN,fh) ) { len = strlen(buf); while ( len>0 && isspace(buf[len-1]) ) len--; if ( !len ) continue; files[nfiles] = malloc(sizeof(char)*(len+1)); strncpy(files[nfiles],buf,len); files[nfiles][len] = 0; nfiles++; } fclose(fh); if ( !nfiles ) { fprintf(stderr,"No files read from %s\n", file_list); return 1; } *argv = files; *n = nfiles; return 0; } #undef MAX_PATH_LEN int bam_mpileup(int argc, char *argv[]) { int c; const char *file_list = NULL; char **fn = NULL; int nfiles = 0, use_orphan = 0; mplp_conf_t mplp; memset(&mplp, 0, sizeof(mplp_conf_t)); #define MPLP_PRINT_POS 0x4000 mplp.max_mq = 60; mplp.min_baseQ = 13; mplp.capQ_thres = 0; mplp.max_depth = 250; mplp.max_indel_depth = 250; mplp.openQ = 40; mplp.extQ = 20; mplp.tandemQ = 100; mplp.min_frac = 0.002; mplp.min_support = 1; mplp.flag = MPLP_NO_ORPHAN | MPLP_REALN; while ((c = getopt(argc, argv, "Agf:r:l:M:q:Q:uaRC:BDSd:L:b:P:o:e:h:Im:F:EG:6Os")) >= 0) { switch (c) { case 'f': mplp.fai = fai_load(optarg); if (mplp.fai == 0) return 1; break; case 'd': mplp.max_depth = atoi(optarg); break; case 'r': mplp.reg = strdup(optarg); break; case 'l': mplp.bed = bed_read(optarg); break; case 'P': mplp.pl_list = strdup(optarg); break; case 'g': mplp.flag |= MPLP_GLF; break; case 'u': mplp.flag |= MPLP_NO_COMP | MPLP_GLF; break; case 'a': mplp.flag |= MPLP_NO_ORPHAN | MPLP_REALN; break; case 'B': mplp.flag &= ~MPLP_REALN; break; case 'D': mplp.flag |= MPLP_FMT_DP; break; case 'S': mplp.flag |= MPLP_FMT_SP; break; case 'I': mplp.flag |= MPLP_NO_INDEL; break; case 'E': mplp.flag |= MPLP_EXT_BAQ; break; case '6': mplp.flag |= MPLP_ILLUMINA13; break; case 'R': mplp.flag |= MPLP_IGNORE_RG; break; case 's': mplp.flag |= MPLP_PRINT_MAPQ; break; case 'O': mplp.flag |= MPLP_PRINT_POS; break; case 'C': mplp.capQ_thres = atoi(optarg); break; case 'M': mplp.max_mq = atoi(optarg); break; case 'q': mplp.min_mq = atoi(optarg); break; case 'Q': mplp.min_baseQ = atoi(optarg); break; case 'b': file_list = optarg; break; case 'o': mplp.openQ = atoi(optarg); break; case 'e': mplp.extQ = atoi(optarg); break; case 'h': mplp.tandemQ = atoi(optarg); break; case 'A': use_orphan = 1; break; case 'F': mplp.min_frac = atof(optarg); break; case 'm': mplp.min_support = atoi(optarg); break; case 'L': mplp.max_indel_depth = atoi(optarg); break; case 'G': { FILE *fp_rg; char buf[1024]; mplp.rghash = bcf_str2id_init(); if ((fp_rg = fopen(optarg, "r")) == 0) fprintf(stderr, "(%s) Fail to open file %s. Continue anyway.\n", __func__, optarg); while (!feof(fp_rg) && fscanf(fp_rg, "%s", buf) > 0) // this is not a good style, but forgive me... bcf_str2id_add(mplp.rghash, strdup(buf)); fclose(fp_rg); } break; } } if (use_orphan) mplp.flag &= ~MPLP_NO_ORPHAN; if (argc == 1) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: samtools mpileup [options] in1.bam [in2.bam [...]]\n\n"); fprintf(stderr, "Input options:\n\n"); fprintf(stderr, " -6 assume the quality is in the Illumina-1.3+ encoding\n"); fprintf(stderr, " -A count anomalous read pairs\n"); fprintf(stderr, " -B disable BAQ computation\n"); fprintf(stderr, " -b FILE list of input BAM files [null]\n"); fprintf(stderr, " -C INT parameter for adjusting mapQ; 0 to disable [0]\n"); fprintf(stderr, " -d INT max per-BAM depth to avoid excessive memory usage [%d]\n", mplp.max_depth); fprintf(stderr, " -E extended BAQ for higher sensitivity but lower specificity\n"); fprintf(stderr, " -f FILE faidx indexed reference sequence file [null]\n"); fprintf(stderr, " -G FILE exclude read groups listed in FILE [null]\n"); fprintf(stderr, " -l FILE list of positions (chr pos) or regions (BED) [null]\n"); fprintf(stderr, " -M INT cap mapping quality at INT [%d]\n", mplp.max_mq); fprintf(stderr, " -r STR region in which pileup is generated [null]\n"); fprintf(stderr, " -R ignore RG tags\n"); fprintf(stderr, " -q INT skip alignments with mapQ smaller than INT [%d]\n", mplp.min_mq); fprintf(stderr, " -Q INT skip bases with baseQ/BAQ smaller than INT [%d]\n", mplp.min_baseQ); fprintf(stderr, "\nOutput options:\n\n"); fprintf(stderr, " -D output per-sample DP in BCF (require -g/-u)\n"); fprintf(stderr, " -g generate BCF output (genotype likelihoods)\n"); fprintf(stderr, " -O output base positions on reads (disabled by -g/-u)\n"); fprintf(stderr, " -s output mapping quality (disabled by -g/-u)\n"); fprintf(stderr, " -S output per-sample strand bias P-value in BCF (require -g/-u)\n"); fprintf(stderr, " -u generate uncompress BCF output\n"); fprintf(stderr, "\nSNP/INDEL genotype likelihoods options (effective with `-g' or `-u'):\n\n"); fprintf(stderr, " -e INT Phred-scaled gap extension seq error probability [%d]\n", mplp.extQ); fprintf(stderr, " -F FLOAT minimum fraction of gapped reads for candidates [%g]\n", mplp.min_frac); fprintf(stderr, " -h INT coefficient for homopolymer errors [%d]\n", mplp.tandemQ); fprintf(stderr, " -I do not perform indel calling\n"); fprintf(stderr, " -L INT max per-sample depth for INDEL calling [%d]\n", mplp.max_indel_depth); fprintf(stderr, " -m INT minimum gapped reads for indel candidates [%d]\n", mplp.min_support); fprintf(stderr, " -o INT Phred-scaled gap open sequencing error probability [%d]\n", mplp.openQ); fprintf(stderr, " -P STR comma separated list of platforms for indels [all]\n"); fprintf(stderr, "\n"); fprintf(stderr, "Notes: Assuming diploid individuals.\n\n"); return 1; } if (file_list) { if ( read_file_list(file_list,&nfiles,&fn) ) return 1; mpileup(&mplp,nfiles,fn); for (c=0; c #include #include "bgzf.h" #include "bam.h" #define BUF_SIZE 0x10000 int bam_reheader(BGZF *in, const bam_header_t *h, int fd) { BGZF *fp; bam_header_t *old; int len; uint8_t *buf; if (in->open_mode != 'r') return -1; buf = malloc(BUF_SIZE); old = bam_header_read(in); fp = bgzf_fdopen(fd, "w"); bam_header_write(fp, h); if (in->block_offset < in->block_length) { bgzf_write(fp, in->uncompressed_block + in->block_offset, in->block_length - in->block_offset); bgzf_flush(fp); } #ifdef _USE_KNETFILE while ((len = knet_read(in->x.fpr, buf, BUF_SIZE)) > 0) fwrite(buf, 1, len, fp->x.fpw); #else while (!feof(in->file) && (len = fread(buf, 1, BUF_SIZE, in->file)) > 0) fwrite(buf, 1, len, fp->file); #endif free(buf); fp->block_offset = in->block_offset = 0; bgzf_close(fp); return 0; } int main_reheader(int argc, char *argv[]) { bam_header_t *h; BGZF *in; if (argc != 3) { fprintf(stderr, "Usage: samtools reheader \n"); return 1; } { // read the header tamFile fph = sam_open(argv[1]); if (fph == 0) { fprintf(stderr, "[%s] fail to read the header from %s.\n", __func__, argv[1]); return 1; } h = sam_header_read(fph); sam_close(fph); } in = strcmp(argv[2], "-")? bam_open(argv[2], "r") : bam_dopen(fileno(stdin), "r"); if (in == 0) { fprintf(stderr, "[%s] fail to open file %s.\n", __func__, argv[2]); return 1; } bam_reheader(in, h, fileno(stdout)); bgzf_close(in); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bam_rmdup.c000066400000000000000000000127771211610345200231710ustar00rootroot00000000000000#include #include #include #include #include #include "sam.h" typedef bam1_t *bam1_p; #include "khash.h" KHASH_SET_INIT_STR(name) KHASH_MAP_INIT_INT64(pos, bam1_p) #define BUFFER_SIZE 0x40000 typedef struct { uint64_t n_checked, n_removed; khash_t(pos) *best_hash; } lib_aux_t; KHASH_MAP_INIT_STR(lib, lib_aux_t) typedef struct { int n, max; bam1_t **a; } tmp_stack_t; static inline void stack_insert(tmp_stack_t *stack, bam1_t *b) { if (stack->n == stack->max) { stack->max = stack->max? stack->max<<1 : 0x10000; stack->a = (bam1_t**)realloc(stack->a, sizeof(bam1_t*) * stack->max); } stack->a[stack->n++] = b; } static inline void dump_best(tmp_stack_t *stack, samfile_t *out) { int i; for (i = 0; i != stack->n; ++i) { samwrite(out, stack->a[i]); bam_destroy1(stack->a[i]); } stack->n = 0; } static void clear_del_set(khash_t(name) *del_set) { khint_t k; for (k = kh_begin(del_set); k < kh_end(del_set); ++k) if (kh_exist(del_set, k)) free((char*)kh_key(del_set, k)); kh_clear(name, del_set); } static lib_aux_t *get_aux(khash_t(lib) *aux, const char *lib) { khint_t k = kh_get(lib, aux, lib); if (k == kh_end(aux)) { int ret; char *p = strdup(lib); lib_aux_t *q; k = kh_put(lib, aux, p, &ret); q = &kh_val(aux, k); q->n_checked = q->n_removed = 0; q->best_hash = kh_init(pos); return q; } else return &kh_val(aux, k); } static void clear_best(khash_t(lib) *aux, int max) { khint_t k; for (k = kh_begin(aux); k != kh_end(aux); ++k) { if (kh_exist(aux, k)) { lib_aux_t *q = &kh_val(aux, k); if (kh_size(q->best_hash) >= max) kh_clear(pos, q->best_hash); } } } static inline int sum_qual(const bam1_t *b) { int i, q; uint8_t *qual = bam1_qual(b); for (i = q = 0; i < b->core.l_qseq; ++i) q += qual[i]; return q; } void bam_rmdup_core(samfile_t *in, samfile_t *out) { bam1_t *b; int last_tid = -1, last_pos = -1; tmp_stack_t stack; khint_t k; khash_t(lib) *aux; khash_t(name) *del_set; aux = kh_init(lib); del_set = kh_init(name); b = bam_init1(); memset(&stack, 0, sizeof(tmp_stack_t)); kh_resize(name, del_set, 4 * BUFFER_SIZE); while (samread(in, b) >= 0) { bam1_core_t *c = &b->core; if (c->tid != last_tid || last_pos != c->pos) { dump_best(&stack, out); // write the result clear_best(aux, BUFFER_SIZE); if (c->tid != last_tid) { clear_best(aux, 0); if (kh_size(del_set)) { // check fprintf(stderr, "[bam_rmdup_core] %llu unmatched pairs\n", (long long)kh_size(del_set)); clear_del_set(del_set); } if ((int)c->tid == -1) { // append unmapped reads samwrite(out, b); while (samread(in, b) >= 0) samwrite(out, b); break; } last_tid = c->tid; fprintf(stderr, "[bam_rmdup_core] processing reference %s...\n", in->header->target_name[c->tid]); } } if (!(c->flag&BAM_FPAIRED) || (c->flag&(BAM_FUNMAP|BAM_FMUNMAP)) || (c->mtid >= 0 && c->tid != c->mtid)) { samwrite(out, b); } else if (c->isize > 0) { // paired, head uint64_t key = (uint64_t)c->pos<<32 | c->isize; const char *lib; lib_aux_t *q; int ret; lib = bam_get_library(in->header, b); q = lib? get_aux(aux, lib) : get_aux(aux, "\t"); ++q->n_checked; k = kh_put(pos, q->best_hash, key, &ret); if (ret == 0) { // found in best_hash bam1_t *p = kh_val(q->best_hash, k); ++q->n_removed; if (sum_qual(p) < sum_qual(b)) { // the current alignment is better; this can be accelerated in principle kh_put(name, del_set, strdup(bam1_qname(p)), &ret); // p will be removed bam_copy1(p, b); // replaced as b } else kh_put(name, del_set, strdup(bam1_qname(b)), &ret); // b will be removed if (ret == 0) fprintf(stderr, "[bam_rmdup_core] inconsistent BAM file for pair '%s'. Continue anyway.\n", bam1_qname(b)); } else { // not found in best_hash kh_val(q->best_hash, k) = bam_dup1(b); stack_insert(&stack, kh_val(q->best_hash, k)); } } else { // paired, tail k = kh_get(name, del_set, bam1_qname(b)); if (k != kh_end(del_set)) { free((char*)kh_key(del_set, k)); kh_del(name, del_set, k); } else samwrite(out, b); } last_pos = c->pos; } for (k = kh_begin(aux); k != kh_end(aux); ++k) { if (kh_exist(aux, k)) { lib_aux_t *q = &kh_val(aux, k); dump_best(&stack, out); fprintf(stderr, "[bam_rmdup_core] %lld / %lld = %.4lf in library '%s'\n", (long long)q->n_removed, (long long)q->n_checked, (double)q->n_removed/q->n_checked, kh_key(aux, k)); kh_destroy(pos, q->best_hash); free((char*)kh_key(aux, k)); } } kh_destroy(lib, aux); clear_del_set(del_set); kh_destroy(name, del_set); free(stack.a); bam_destroy1(b); } void bam_rmdupse_core(samfile_t *in, samfile_t *out, int force_se); int bam_rmdup(int argc, char *argv[]) { int c, is_se = 0, force_se = 0; samfile_t *in, *out; while ((c = getopt(argc, argv, "sS")) >= 0) { switch (c) { case 's': is_se = 1; break; case 'S': force_se = is_se = 1; break; } } if (optind + 2 > argc) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: samtools rmdup [-sS] \n\n"); fprintf(stderr, "Option: -s rmdup for SE reads\n"); fprintf(stderr, " -S treat PE reads as SE in rmdup (force -s)\n\n"); return 1; } in = samopen(argv[optind], "rb", 0); out = samopen(argv[optind+1], "wb", in->header); if (in == 0 || out == 0) { fprintf(stderr, "[bam_rmdup] fail to read/write input files\n"); return 1; } if (is_se) bam_rmdupse_core(in, out, force_se); else bam_rmdup_core(in, out); samclose(in); samclose(out); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bam_rmdupse.c000066400000000000000000000100371211610345200235040ustar00rootroot00000000000000#include #include "sam.h" #include "khash.h" #include "klist.h" #define QUEUE_CLEAR_SIZE 0x100000 #define MAX_POS 0x7fffffff typedef struct { int endpos; uint32_t score:31, discarded:1; bam1_t *b; } elem_t, *elem_p; #define __free_elem(p) bam_destroy1((p)->data.b) KLIST_INIT(q, elem_t, __free_elem) typedef klist_t(q) queue_t; KHASH_MAP_INIT_INT(best, elem_p) typedef khash_t(best) besthash_t; typedef struct { uint64_t n_checked, n_removed; besthash_t *left, *rght; } lib_aux_t; KHASH_MAP_INIT_STR(lib, lib_aux_t) static lib_aux_t *get_aux(khash_t(lib) *aux, const char *lib) { khint_t k = kh_get(lib, aux, lib); if (k == kh_end(aux)) { int ret; char *p = strdup(lib); lib_aux_t *q; k = kh_put(lib, aux, p, &ret); q = &kh_val(aux, k); q->left = kh_init(best); q->rght = kh_init(best); q->n_checked = q->n_removed = 0; return q; } else return &kh_val(aux, k); } static inline int sum_qual(const bam1_t *b) { int i, q; uint8_t *qual = bam1_qual(b); for (i = q = 0; i < b->core.l_qseq; ++i) q += qual[i]; return q; } static inline elem_t *push_queue(queue_t *queue, const bam1_t *b, int endpos, int score) { elem_t *p = kl_pushp(q, queue); p->discarded = 0; p->endpos = endpos; p->score = score; if (p->b == 0) p->b = bam_init1(); bam_copy1(p->b, b); return p; } static void clear_besthash(besthash_t *h, int32_t pos) { khint_t k; for (k = kh_begin(h); k != kh_end(h); ++k) if (kh_exist(h, k) && kh_val(h, k)->endpos <= pos) kh_del(best, h, k); } static void dump_alignment(samfile_t *out, queue_t *queue, int32_t pos, khash_t(lib) *h) { if (queue->size > QUEUE_CLEAR_SIZE || pos == MAX_POS) { khint_t k; while (1) { elem_t *q; if (queue->head == queue->tail) break; q = &kl_val(queue->head); if (q->discarded) { q->b->data_len = 0; kl_shift(q, queue, 0); continue; } if ((q->b->core.flag&BAM_FREVERSE) && q->endpos > pos) break; samwrite(out, q->b); q->b->data_len = 0; kl_shift(q, queue, 0); } for (k = kh_begin(h); k != kh_end(h); ++k) { if (kh_exist(h, k)) { clear_besthash(kh_val(h, k).left, pos); clear_besthash(kh_val(h, k).rght, pos); } } } } void bam_rmdupse_core(samfile_t *in, samfile_t *out, int force_se) { bam1_t *b; queue_t *queue; khint_t k; int last_tid = -2; khash_t(lib) *aux; aux = kh_init(lib); b = bam_init1(); queue = kl_init(q); while (samread(in, b) >= 0) { bam1_core_t *c = &b->core; int endpos = bam_calend(c, bam1_cigar(b)); int score = sum_qual(b); if (last_tid != c->tid) { if (last_tid >= 0) dump_alignment(out, queue, MAX_POS, aux); last_tid = c->tid; } else dump_alignment(out, queue, c->pos, aux); if ((c->flag&BAM_FUNMAP) || ((c->flag&BAM_FPAIRED) && !force_se)) { push_queue(queue, b, endpos, score); } else { const char *lib; lib_aux_t *q; besthash_t *h; uint32_t key; int ret; lib = bam_get_library(in->header, b); q = lib? get_aux(aux, lib) : get_aux(aux, "\t"); ++q->n_checked; h = (c->flag&BAM_FREVERSE)? q->rght : q->left; key = (c->flag&BAM_FREVERSE)? endpos : c->pos; k = kh_put(best, h, key, &ret); if (ret == 0) { // in the hash table elem_t *p = kh_val(h, k); ++q->n_removed; if (p->score < score) { if (c->flag&BAM_FREVERSE) { // mark "discarded" and push the queue p->discarded = 1; kh_val(h, k) = push_queue(queue, b, endpos, score); } else { // replace p->score = score; p->endpos = endpos; bam_copy1(p->b, b); } } // otherwise, discard the alignment } else kh_val(h, k) = push_queue(queue, b, endpos, score); } } dump_alignment(out, queue, MAX_POS, aux); for (k = kh_begin(aux); k != kh_end(aux); ++k) { if (kh_exist(aux, k)) { lib_aux_t *q = &kh_val(aux, k); fprintf(stderr, "[bam_rmdupse_core] %lld / %lld = %.4lf in library '%s'\n", (long long)q->n_removed, (long long)q->n_checked, (double)q->n_removed/q->n_checked, kh_key(aux, k)); kh_destroy(best, q->left); kh_destroy(best, q->rght); free((char*)kh_key(aux, k)); } } kh_destroy(lib, aux); bam_destroy1(b); kl_destroy(q, queue); } genometools-1.5.1/src/external/samtools-0.1.18/bam_sort.c000066400000000000000000000326041211610345200230200ustar00rootroot00000000000000#include #include #include #include #include #include #include #include "bam.h" #include "ksort.h" static int g_is_by_qname = 0; static inline int strnum_cmp(const char *a, const char *b) { char *pa, *pb; pa = (char*)a; pb = (char*)b; while (*pa && *pb) { if (isdigit(*pa) && isdigit(*pb)) { long ai, bi; ai = strtol(pa, &pa, 10); bi = strtol(pb, &pb, 10); if (ai != bi) return aibi? 1 : 0; } else { if (*pa != *pb) break; ++pa; ++pb; } } if (*pa == *pb) return (pa-a) < (pb-b)? -1 : (pa-a) > (pb-b)? 1 : 0; return *pa<*pb? -1 : *pa>*pb? 1 : 0; } #define HEAP_EMPTY 0xffffffffffffffffull typedef struct { int i; uint64_t pos, idx; bam1_t *b; } heap1_t; #define __pos_cmp(a, b) ((a).pos > (b).pos || ((a).pos == (b).pos && ((a).i > (b).i || ((a).i == (b).i && (a).idx > (b).idx)))) static inline int heap_lt(const heap1_t a, const heap1_t b) { if (g_is_by_qname) { int t; if (a.b == 0 || b.b == 0) return a.b == 0? 1 : 0; t = strnum_cmp(bam1_qname(a.b), bam1_qname(b.b)); return (t > 0 || (t == 0 && __pos_cmp(a, b))); } else return __pos_cmp(a, b); } KSORT_INIT(heap, heap1_t, heap_lt) static void swap_header_targets(bam_header_t *h1, bam_header_t *h2) { bam_header_t t; t.n_targets = h1->n_targets, h1->n_targets = h2->n_targets, h2->n_targets = t.n_targets; t.target_name = h1->target_name, h1->target_name = h2->target_name, h2->target_name = t.target_name; t.target_len = h1->target_len, h1->target_len = h2->target_len, h2->target_len = t.target_len; } static void swap_header_text(bam_header_t *h1, bam_header_t *h2) { int tempi; char *temps; tempi = h1->l_text, h1->l_text = h2->l_text, h2->l_text = tempi; temps = h1->text, h1->text = h2->text, h2->text = temps; } #define MERGE_RG 1 #define MERGE_UNCOMP 2 #define MERGE_LEVEL1 4 #define MERGE_FORCE 8 /*! @abstract Merge multiple sorted BAM. @param is_by_qname whether to sort by query name @param out output BAM file name @param headers name of SAM file from which to copy '@' header lines, or NULL to copy them from the first file to be merged @param n number of files to be merged @param fn names of files to be merged @discussion Padding information may NOT correctly maintained. This function is NOT thread safe. */ int bam_merge_core(int by_qname, const char *out, const char *headers, int n, char * const *fn, int flag, const char *reg) { bamFile fpout, *fp; heap1_t *heap; bam_header_t *hout = 0; bam_header_t *hheaders = NULL; int i, j, *RG_len = 0; uint64_t idx = 0; char **RG = 0; bam_iter_t *iter = 0; if (headers) { tamFile fpheaders = sam_open(headers); if (fpheaders == 0) { const char *message = strerror(errno); fprintf(stderr, "[bam_merge_core] cannot open '%s': %s\n", headers, message); return -1; } hheaders = sam_header_read(fpheaders); sam_close(fpheaders); } g_is_by_qname = by_qname; fp = (bamFile*)calloc(n, sizeof(bamFile)); heap = (heap1_t*)calloc(n, sizeof(heap1_t)); iter = (bam_iter_t*)calloc(n, sizeof(bam_iter_t)); // prepare RG tag if (flag & MERGE_RG) { RG = (char**)calloc(n, sizeof(void*)); RG_len = (int*)calloc(n, sizeof(int)); for (i = 0; i != n; ++i) { int l = strlen(fn[i]); const char *s = fn[i]; if (l > 4 && strcmp(s + l - 4, ".bam") == 0) l -= 4; for (j = l - 1; j >= 0; --j) if (s[j] == '/') break; ++j; l -= j; RG[i] = calloc(l + 1, 1); RG_len[i] = l; strncpy(RG[i], s + j, l); } } // read the first for (i = 0; i != n; ++i) { bam_header_t *hin; fp[i] = bam_open(fn[i], "r"); if (fp[i] == 0) { int j; fprintf(stderr, "[bam_merge_core] fail to open file %s\n", fn[i]); for (j = 0; j < i; ++j) bam_close(fp[j]); free(fp); free(heap); // FIXME: possible memory leak return -1; } hin = bam_header_read(fp[i]); if (i == 0) { // the first BAM hout = hin; } else { // validate multiple baf int min_n_targets = hout->n_targets; if (hin->n_targets < min_n_targets) min_n_targets = hin->n_targets; for (j = 0; j < min_n_targets; ++j) if (strcmp(hout->target_name[j], hin->target_name[j]) != 0) { fprintf(stderr, "[bam_merge_core] different target sequence name: '%s' != '%s' in file '%s'\n", hout->target_name[j], hin->target_name[j], fn[i]); return -1; } // If this input file has additional target reference sequences, // add them to the headers to be output if (hin->n_targets > hout->n_targets) { swap_header_targets(hout, hin); // FIXME Possibly we should also create @SQ text headers // for the newly added reference sequences } bam_header_destroy(hin); } } if (hheaders) { // If the text headers to be swapped in include any @SQ headers, // check that they are consistent with the existing binary list // of reference information. if (hheaders->n_targets > 0) { if (hout->n_targets != hheaders->n_targets) { fprintf(stderr, "[bam_merge_core] number of @SQ headers in '%s' differs from number of target sequences\n", headers); if (!reg) return -1; } for (j = 0; j < hout->n_targets; ++j) if (strcmp(hout->target_name[j], hheaders->target_name[j]) != 0) { fprintf(stderr, "[bam_merge_core] @SQ header '%s' in '%s' differs from target sequence\n", hheaders->target_name[j], headers); if (!reg) return -1; } } swap_header_text(hout, hheaders); bam_header_destroy(hheaders); } if (reg) { int tid, beg, end; if (bam_parse_region(hout, reg, &tid, &beg, &end) < 0) { fprintf(stderr, "[%s] Malformated region string or undefined reference name\n", __func__); return -1; } for (i = 0; i < n; ++i) { bam_index_t *idx; idx = bam_index_load(fn[i]); iter[i] = bam_iter_query(idx, tid, beg, end); bam_index_destroy(idx); } } for (i = 0; i < n; ++i) { heap1_t *h = heap + i; h->i = i; h->b = (bam1_t*)calloc(1, sizeof(bam1_t)); if (bam_iter_read(fp[i], iter[i], h->b) >= 0) { h->pos = ((uint64_t)h->b->core.tid<<32) | (uint32_t)((int32_t)h->b->core.pos+1)<<1 | bam1_strand(h->b); h->idx = idx++; } else h->pos = HEAP_EMPTY; } if (flag & MERGE_UNCOMP) fpout = strcmp(out, "-")? bam_open(out, "wu") : bam_dopen(fileno(stdout), "wu"); else if (flag & MERGE_LEVEL1) fpout = strcmp(out, "-")? bam_open(out, "w1") : bam_dopen(fileno(stdout), "w1"); else fpout = strcmp(out, "-")? bam_open(out, "w") : bam_dopen(fileno(stdout), "w"); if (fpout == 0) { fprintf(stderr, "[%s] fail to create the output file.\n", __func__); return -1; } bam_header_write(fpout, hout); bam_header_destroy(hout); ks_heapmake(heap, n, heap); while (heap->pos != HEAP_EMPTY) { bam1_t *b = heap->b; if (flag & MERGE_RG) { uint8_t *rg = bam_aux_get(b, "RG"); if (rg) bam_aux_del(b, rg); bam_aux_append(b, "RG", 'Z', RG_len[heap->i] + 1, (uint8_t*)RG[heap->i]); } bam_write1_core(fpout, &b->core, b->data_len, b->data); if ((j = bam_iter_read(fp[heap->i], iter[heap->i], b)) >= 0) { heap->pos = ((uint64_t)b->core.tid<<32) | (uint32_t)((int)b->core.pos+1)<<1 | bam1_strand(b); heap->idx = idx++; } else if (j == -1) { heap->pos = HEAP_EMPTY; free(heap->b->data); free(heap->b); heap->b = 0; } else fprintf(stderr, "[bam_merge_core] '%s' is truncated. Continue anyway.\n", fn[heap->i]); ks_heapadjust(heap, 0, n, heap); } if (flag & MERGE_RG) { for (i = 0; i != n; ++i) free(RG[i]); free(RG); free(RG_len); } for (i = 0; i != n; ++i) { bam_iter_destroy(iter[i]); bam_close(fp[i]); } bam_close(fpout); free(fp); free(heap); free(iter); return 0; } int bam_merge(int argc, char *argv[]) { int c, is_by_qname = 0, flag = 0, ret = 0; char *fn_headers = NULL, *reg = 0; while ((c = getopt(argc, argv, "h:nru1R:f")) >= 0) { switch (c) { case 'r': flag |= MERGE_RG; break; case 'f': flag |= MERGE_FORCE; break; case 'h': fn_headers = strdup(optarg); break; case 'n': is_by_qname = 1; break; case '1': flag |= MERGE_LEVEL1; break; case 'u': flag |= MERGE_UNCOMP; break; case 'R': reg = strdup(optarg); break; } } if (optind + 2 >= argc) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: samtools merge [-nr] [-h inh.sam] [...]\n\n"); fprintf(stderr, "Options: -n sort by read names\n"); fprintf(stderr, " -r attach RG tag (inferred from file names)\n"); fprintf(stderr, " -u uncompressed BAM output\n"); fprintf(stderr, " -f overwrite the output BAM if exist\n"); fprintf(stderr, " -1 compress level 1\n"); fprintf(stderr, " -R STR merge file in the specified region STR [all]\n"); fprintf(stderr, " -h FILE copy the header in FILE to [in1.bam]\n\n"); fprintf(stderr, "Note: Samtools' merge does not reconstruct the @RG dictionary in the header. Users\n"); fprintf(stderr, " must provide the correct header with -h, or uses Picard which properly maintains\n"); fprintf(stderr, " the header dictionary in merging.\n\n"); return 1; } if (!(flag & MERGE_FORCE) && strcmp(argv[optind], "-")) { FILE *fp = fopen(argv[optind], "rb"); if (fp != NULL) { fclose(fp); fprintf(stderr, "[%s] File '%s' exists. Please apply '-f' to overwrite. Abort.\n", __func__, argv[optind]); return 1; } } if (bam_merge_core(is_by_qname, argv[optind], fn_headers, argc - optind - 1, argv + optind + 1, flag, reg) < 0) ret = 1; free(reg); free(fn_headers); return ret; } typedef bam1_t *bam1_p; static inline int bam1_lt(const bam1_p a, const bam1_p b) { if (g_is_by_qname) { int t = strnum_cmp(bam1_qname(a), bam1_qname(b)); return (t < 0 || (t == 0 && (((uint64_t)a->core.tid<<32|(a->core.pos+1)) < ((uint64_t)b->core.tid<<32|(b->core.pos+1))))); } else return (((uint64_t)a->core.tid<<32|(a->core.pos+1)) < ((uint64_t)b->core.tid<<32|(b->core.pos+1))); } KSORT_INIT(sort, bam1_p, bam1_lt) static void sort_blocks(int n, int k, bam1_p *buf, const char *prefix, const bam_header_t *h, int is_stdout) { char *name, mode[3]; int i; bamFile fp; ks_mergesort(sort, k, buf, 0); name = (char*)calloc(strlen(prefix) + 20, 1); if (n >= 0) { sprintf(name, "%s.%.4d.bam", prefix, n); strcpy(mode, "w1"); } else { sprintf(name, "%s.bam", prefix); strcpy(mode, "w"); } fp = is_stdout? bam_dopen(fileno(stdout), mode) : bam_open(name, mode); if (fp == 0) { fprintf(stderr, "[sort_blocks] fail to create file %s.\n", name); free(name); // FIXME: possible memory leak return; } free(name); bam_header_write(fp, h); for (i = 0; i < k; ++i) bam_write1_core(fp, &buf[i]->core, buf[i]->data_len, buf[i]->data); bam_close(fp); } /*! @abstract Sort an unsorted BAM file based on the chromosome order and the leftmost position of an alignment @param is_by_qname whether to sort by query name @param fn name of the file to be sorted @param prefix prefix of the output and the temporary files; upon sucessess, prefix.bam will be written. @param max_mem approxiate maximum memory (very inaccurate) @discussion It may create multiple temporary subalignment files and then merge them by calling bam_merge_core(). This function is NOT thread safe. */ void bam_sort_core_ext(int is_by_qname, const char *fn, const char *prefix, size_t max_mem, int is_stdout) { int n, ret, k, i; size_t mem; bam_header_t *header; bamFile fp; bam1_t *b, **buf; g_is_by_qname = is_by_qname; n = k = 0; mem = 0; fp = strcmp(fn, "-")? bam_open(fn, "r") : bam_dopen(fileno(stdin), "r"); if (fp == 0) { fprintf(stderr, "[bam_sort_core] fail to open file %s\n", fn); return; } header = bam_header_read(fp); buf = (bam1_t**)calloc(max_mem / BAM_CORE_SIZE, sizeof(bam1_t*)); // write sub files for (;;) { if (buf[k] == 0) buf[k] = (bam1_t*)calloc(1, sizeof(bam1_t)); b = buf[k]; if ((ret = bam_read1(fp, b)) < 0) break; mem += ret; ++k; if (mem >= max_mem) { sort_blocks(n++, k, buf, prefix, header, 0); mem = 0; k = 0; } } if (ret != -1) fprintf(stderr, "[bam_sort_core] truncated file. Continue anyway.\n"); if (n == 0) sort_blocks(-1, k, buf, prefix, header, is_stdout); else { // then merge char **fns, *fnout; fprintf(stderr, "[bam_sort_core] merging from %d files...\n", n+1); sort_blocks(n++, k, buf, prefix, header, 0); fnout = (char*)calloc(strlen(prefix) + 20, 1); if (is_stdout) sprintf(fnout, "-"); else sprintf(fnout, "%s.bam", prefix); fns = (char**)calloc(n, sizeof(char*)); for (i = 0; i < n; ++i) { fns[i] = (char*)calloc(strlen(prefix) + 20, 1); sprintf(fns[i], "%s.%.4d.bam", prefix, i); } bam_merge_core(is_by_qname, fnout, 0, n, fns, 0, 0); free(fnout); for (i = 0; i < n; ++i) { unlink(fns[i]); free(fns[i]); } free(fns); } for (k = 0; k < max_mem / BAM_CORE_SIZE; ++k) { if (buf[k]) { free(buf[k]->data); free(buf[k]); } } free(buf); bam_header_destroy(header); bam_close(fp); } void bam_sort_core(int is_by_qname, const char *fn, const char *prefix, size_t max_mem) { bam_sort_core_ext(is_by_qname, fn, prefix, max_mem, 0); } int bam_sort(int argc, char *argv[]) { size_t max_mem = 500000000; int c, is_by_qname = 0, is_stdout = 0; while ((c = getopt(argc, argv, "nom:")) >= 0) { switch (c) { case 'o': is_stdout = 1; break; case 'n': is_by_qname = 1; break; case 'm': max_mem = atol(optarg); break; } } if (optind + 2 > argc) { fprintf(stderr, "Usage: samtools sort [-on] [-m ] \n"); return 1; } bam_sort_core_ext(is_by_qname, argv[optind], argv[optind+1], max_mem, is_stdout); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bam_stat.c000066400000000000000000000062021211610345200227770ustar00rootroot00000000000000#include #include #include "bam.h" typedef struct { long long n_reads[2], n_mapped[2], n_pair_all[2], n_pair_map[2], n_pair_good[2]; long long n_sgltn[2], n_read1[2], n_read2[2]; long long n_dup[2]; long long n_diffchr[2], n_diffhigh[2]; } bam_flagstat_t; #define flagstat_loop(s, c) do { \ int w = ((c)->flag & BAM_FQCFAIL)? 1 : 0; \ ++(s)->n_reads[w]; \ if ((c)->flag & BAM_FPAIRED) { \ ++(s)->n_pair_all[w]; \ if ((c)->flag & BAM_FPROPER_PAIR) ++(s)->n_pair_good[w]; \ if ((c)->flag & BAM_FREAD1) ++(s)->n_read1[w]; \ if ((c)->flag & BAM_FREAD2) ++(s)->n_read2[w]; \ if (((c)->flag & BAM_FMUNMAP) && !((c)->flag & BAM_FUNMAP)) ++(s)->n_sgltn[w]; \ if (!((c)->flag & BAM_FUNMAP) && !((c)->flag & BAM_FMUNMAP)) { \ ++(s)->n_pair_map[w]; \ if ((c)->mtid != (c)->tid) { \ ++(s)->n_diffchr[w]; \ if ((c)->qual >= 5) ++(s)->n_diffhigh[w]; \ } \ } \ } \ if (!((c)->flag & BAM_FUNMAP)) ++(s)->n_mapped[w]; \ if ((c)->flag & BAM_FDUP) ++(s)->n_dup[w]; \ } while (0) bam_flagstat_t *bam_flagstat_core(bamFile fp) { bam_flagstat_t *s; bam1_t *b; bam1_core_t *c; int ret; s = (bam_flagstat_t*)calloc(1, sizeof(bam_flagstat_t)); b = bam_init1(); c = &b->core; while ((ret = bam_read1(fp, b)) >= 0) flagstat_loop(s, c); bam_destroy1(b); if (ret != -1) fprintf(stderr, "[bam_flagstat_core] Truncated file? Continue anyway.\n"); return s; } int bam_flagstat(int argc, char *argv[]) { bamFile fp; bam_header_t *header; bam_flagstat_t *s; if (argc == optind) { fprintf(stderr, "Usage: samtools flagstat \n"); return 1; } fp = strcmp(argv[optind], "-")? bam_open(argv[optind], "r") : bam_dopen(fileno(stdin), "r"); assert(fp); header = bam_header_read(fp); s = bam_flagstat_core(fp); printf("%lld + %lld in total (QC-passed reads + QC-failed reads)\n", s->n_reads[0], s->n_reads[1]); printf("%lld + %lld duplicates\n", s->n_dup[0], s->n_dup[1]); printf("%lld + %lld mapped (%.2f%%:%.2f%%)\n", s->n_mapped[0], s->n_mapped[1], (float)s->n_mapped[0] / s->n_reads[0] * 100.0, (float)s->n_mapped[1] / s->n_reads[1] * 100.0); printf("%lld + %lld paired in sequencing\n", s->n_pair_all[0], s->n_pair_all[1]); printf("%lld + %lld read1\n", s->n_read1[0], s->n_read1[1]); printf("%lld + %lld read2\n", s->n_read2[0], s->n_read2[1]); printf("%lld + %lld properly paired (%.2f%%:%.2f%%)\n", s->n_pair_good[0], s->n_pair_good[1], (float)s->n_pair_good[0] / s->n_pair_all[0] * 100.0, (float)s->n_pair_good[1] / s->n_pair_all[1] * 100.0); printf("%lld + %lld with itself and mate mapped\n", s->n_pair_map[0], s->n_pair_map[1]); printf("%lld + %lld singletons (%.2f%%:%.2f%%)\n", s->n_sgltn[0], s->n_sgltn[1], (float)s->n_sgltn[0] / s->n_pair_all[0] * 100.0, (float)s->n_sgltn[1] / s->n_pair_all[1] * 100.0); printf("%lld + %lld with mate mapped to a different chr\n", s->n_diffchr[0], s->n_diffchr[1]); printf("%lld + %lld with mate mapped to a different chr (mapQ>=5)\n", s->n_diffhigh[0], s->n_diffhigh[1]); free(s); bam_header_destroy(header); bam_close(fp); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bam_tview.c000066400000000000000000000324371211610345200231730ustar00rootroot00000000000000#undef _HAVE_CURSES #if _CURSES_LIB == 0 #elif _CURSES_LIB == 1 #include #ifndef NCURSES_VERSION #warning "_CURSES_LIB=1 but NCURSES_VERSION not defined; tview is NOT compiled" #else #define _HAVE_CURSES #endif #elif _CURSES_LIB == 2 #include #define _HAVE_CURSES #else #warning "_CURSES_LIB is not 0, 1 or 2; tview is NOT compiled" #endif #ifdef _HAVE_CURSES #include #include #include #include #include "bam.h" #include "faidx.h" #include "bam2bcf.h" char bam_aux_getCEi(bam1_t *b, int i); char bam_aux_getCSi(bam1_t *b, int i); char bam_aux_getCQi(bam1_t *b, int i); #define TV_MIN_ALNROW 2 #define TV_MAX_GOTO 40 #define TV_LOW_MAPQ 10 #define TV_COLOR_MAPQ 0 #define TV_COLOR_BASEQ 1 #define TV_COLOR_NUCL 2 #define TV_COLOR_COL 3 #define TV_COLOR_COLQ 4 #define TV_BASE_NUCL 0 #define TV_BASE_COLOR_SPACE 1 typedef struct { int mrow, mcol; WINDOW *wgoto, *whelp; bam_index_t *idx; bam_lplbuf_t *lplbuf; bam_header_t *header; bamFile fp; int curr_tid, left_pos; faidx_t *fai; bcf_callaux_t *bca; int ccol, last_pos, row_shift, base_for, color_for, is_dot, l_ref, ins, no_skip, show_name; char *ref; } tview_t; int tv_pl_func(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data) { extern unsigned char bam_nt16_table[256]; tview_t *tv = (tview_t*)data; int i, j, c, rb, attr, max_ins = 0; uint32_t call = 0; if (pos < tv->left_pos || tv->ccol > tv->mcol) return 0; // out of screen // print referece rb = (tv->ref && pos - tv->left_pos < tv->l_ref)? tv->ref[pos - tv->left_pos] : 'N'; for (i = tv->last_pos + 1; i < pos; ++i) { if (i%10 == 0 && tv->mcol - tv->ccol >= 10) mvprintw(0, tv->ccol, "%-d", i+1); c = tv->ref? tv->ref[i - tv->left_pos] : 'N'; mvaddch(1, tv->ccol++, c); } if (pos%10 == 0 && tv->mcol - tv->ccol >= 10) mvprintw(0, tv->ccol, "%-d", pos+1); { // call consensus bcf_callret1_t bcr; int qsum[4], a1, a2, tmp; double p[3], prior = 30; bcf_call_glfgen(n, pl, bam_nt16_table[rb], tv->bca, &bcr); for (i = 0; i < 4; ++i) qsum[i] = bcr.qsum[i]<<2 | i; for (i = 1; i < 4; ++i) // insertion sort for (j = i; j > 0 && qsum[j] > qsum[j-1]; --j) tmp = qsum[j], qsum[j] = qsum[j-1], qsum[j-1] = tmp; a1 = qsum[0]&3; a2 = qsum[1]&3; p[0] = bcr.p[a1*5+a1]; p[1] = bcr.p[a1*5+a2] + prior; p[2] = bcr.p[a2*5+a2]; if ("ACGT"[a1] != toupper(rb)) p[0] += prior + 3; if ("ACGT"[a2] != toupper(rb)) p[2] += prior + 3; if (p[0] < p[1] && p[0] < p[2]) call = (1<>16&0xf]; i = (call&0xffff)/10+1; if (i > 4) i = 4; attr |= COLOR_PAIR(i); if (c == toupper(rb)) c = '.'; attron(attr); mvaddch(2, tv->ccol, c); attroff(attr); if(tv->ins) { // calculate maximum insert for (i = 0; i < n; ++i) { const bam_pileup1_t *p = pl + i; if (p->indel > 0 && max_ins < p->indel) max_ins = p->indel; } } // core loop for (j = 0; j <= max_ins; ++j) { for (i = 0; i < n; ++i) { const bam_pileup1_t *p = pl + i; int row = TV_MIN_ALNROW + p->level - tv->row_shift; if (j == 0) { if (!p->is_del) { if (tv->base_for == TV_BASE_COLOR_SPACE && (c = bam_aux_getCSi(p->b, p->qpos))) { c = bam_aux_getCSi(p->b, p->qpos); // assume that if we found one color, we will be able to get the color error if (tv->is_dot && '-' == bam_aux_getCEi(p->b, p->qpos)) c = bam1_strand(p->b)? ',' : '.'; } else { if (tv->show_name) { char *name = bam1_qname(p->b); c = (p->qpos + 1 >= p->b->core.l_qname)? ' ' : name[p->qpos]; } else { c = bam_nt16_rev_table[bam1_seqi(bam1_seq(p->b), p->qpos)]; if (tv->is_dot && toupper(c) == toupper(rb)) c = bam1_strand(p->b)? ',' : '.'; } } } else c = p->is_refskip? (bam1_strand(p->b)? '<' : '>') : '*'; } else { // padding if (j > p->indel) c = '*'; else { // insertion if (tv->base_for == TV_BASE_NUCL) { if (tv->show_name) { char *name = bam1_qname(p->b); c = (p->qpos + j + 1 >= p->b->core.l_qname)? ' ' : name[p->qpos + j]; } else { c = bam_nt16_rev_table[bam1_seqi(bam1_seq(p->b), p->qpos + j)]; if (j == 0 && tv->is_dot && toupper(c) == toupper(rb)) c = bam1_strand(p->b)? ',' : '.'; } } else { c = bam_aux_getCSi(p->b, p->qpos + j); if (tv->is_dot && '-' == bam_aux_getCEi(p->b, p->qpos + j)) c = bam1_strand(p->b)? ',' : '.'; } } } if (row > TV_MIN_ALNROW && row < tv->mrow) { int x; attr = 0; if (((p->b->core.flag&BAM_FPAIRED) && !(p->b->core.flag&BAM_FPROPER_PAIR)) || (p->b->core.flag & BAM_FSECONDARY)) attr |= A_UNDERLINE; if (tv->color_for == TV_COLOR_BASEQ) { x = bam1_qual(p->b)[p->qpos]/10 + 1; if (x > 4) x = 4; attr |= COLOR_PAIR(x); } else if (tv->color_for == TV_COLOR_MAPQ) { x = p->b->core.qual/10 + 1; if (x > 4) x = 4; attr |= COLOR_PAIR(x); } else if (tv->color_for == TV_COLOR_NUCL) { x = bam_nt16_nt4_table[bam1_seqi(bam1_seq(p->b), p->qpos)] + 5; attr |= COLOR_PAIR(x); } else if(tv->color_for == TV_COLOR_COL) { x = 0; switch(bam_aux_getCSi(p->b, p->qpos)) { case '0': x = 0; break; case '1': x = 1; break; case '2': x = 2; break; case '3': x = 3; break; case '4': x = 4; break; default: x = bam_nt16_nt4_table[bam1_seqi(bam1_seq(p->b), p->qpos)]; break; } x+=5; attr |= COLOR_PAIR(x); } else if(tv->color_for == TV_COLOR_COLQ) { x = bam_aux_getCQi(p->b, p->qpos); if(0 == x) x = bam1_qual(p->b)[p->qpos]; x = x/10 + 1; if (x > 4) x = 4; attr |= COLOR_PAIR(x); } attron(attr); mvaddch(row, tv->ccol, bam1_strand(p->b)? tolower(c) : toupper(c)); attroff(attr); } } c = j? '*' : rb; if (c == '*') { attr = COLOR_PAIR(8); attron(attr); mvaddch(1, tv->ccol++, c); attroff(attr); } else mvaddch(1, tv->ccol++, c); } tv->last_pos = pos; return 0; } tview_t *tv_init(const char *fn, const char *fn_fa) { tview_t *tv = (tview_t*)calloc(1, sizeof(tview_t)); tv->is_dot = 1; tv->fp = bam_open(fn, "r"); bgzf_set_cache_size(tv->fp, 8 * 1024 *1024); assert(tv->fp); tv->header = bam_header_read(tv->fp); tv->idx = bam_index_load(fn); if (tv->idx == 0) exit(1); tv->lplbuf = bam_lplbuf_init(tv_pl_func, tv); if (fn_fa) tv->fai = fai_load(fn_fa); tv->bca = bcf_call_init(0.83, 13); tv->ins = 1; initscr(); keypad(stdscr, TRUE); clear(); noecho(); cbreak(); tv->mrow = 24; tv->mcol = 80; getmaxyx(stdscr, tv->mrow, tv->mcol); tv->wgoto = newwin(3, TV_MAX_GOTO + 10, 10, 5); tv->whelp = newwin(29, 40, 5, 5); tv->color_for = TV_COLOR_MAPQ; start_color(); init_pair(1, COLOR_BLUE, COLOR_BLACK); init_pair(2, COLOR_GREEN, COLOR_BLACK); init_pair(3, COLOR_YELLOW, COLOR_BLACK); init_pair(4, COLOR_WHITE, COLOR_BLACK); init_pair(5, COLOR_GREEN, COLOR_BLACK); init_pair(6, COLOR_CYAN, COLOR_BLACK); init_pair(7, COLOR_YELLOW, COLOR_BLACK); init_pair(8, COLOR_RED, COLOR_BLACK); init_pair(9, COLOR_BLUE, COLOR_BLACK); return tv; } void tv_destroy(tview_t *tv) { delwin(tv->wgoto); delwin(tv->whelp); endwin(); bam_lplbuf_destroy(tv->lplbuf); bcf_call_destroy(tv->bca); bam_index_destroy(tv->idx); if (tv->fai) fai_destroy(tv->fai); free(tv->ref); bam_header_destroy(tv->header); bam_close(tv->fp); free(tv); } int tv_fetch_func(const bam1_t *b, void *data) { tview_t *tv = (tview_t*)data; if (tv->no_skip) { uint32_t *cigar = bam1_cigar(b); // this is cheating... int i; for (i = 0; i core.n_cigar; ++i) { if ((cigar[i]&0xf) == BAM_CREF_SKIP) cigar[i] = cigar[i]>>4<<4 | BAM_CDEL; } } bam_lplbuf_push(b, tv->lplbuf); return 0; } int tv_draw_aln(tview_t *tv, int tid, int pos) { // reset clear(); tv->curr_tid = tid; tv->left_pos = pos; tv->last_pos = tv->left_pos - 1; tv->ccol = 0; // print ref and consensus if (tv->fai) { char *str; if (tv->ref) free(tv->ref); str = (char*)calloc(strlen(tv->header->target_name[tv->curr_tid]) + 30, 1); sprintf(str, "%s:%d-%d", tv->header->target_name[tv->curr_tid], tv->left_pos + 1, tv->left_pos + tv->mcol); tv->ref = fai_fetch(tv->fai, str, &tv->l_ref); free(str); } // draw aln bam_lplbuf_reset(tv->lplbuf); bam_fetch(tv->fp, tv->idx, tv->curr_tid, tv->left_pos, tv->left_pos + tv->mcol, tv, tv_fetch_func); bam_lplbuf_push(0, tv->lplbuf); while (tv->ccol < tv->mcol) { int pos = tv->last_pos + 1; if (pos%10 == 0 && tv->mcol - tv->ccol >= 10) mvprintw(0, tv->ccol, "%-d", pos+1); mvaddch(1, tv->ccol++, (tv->ref && pos < tv->l_ref)? tv->ref[pos - tv->left_pos] : 'N'); ++tv->last_pos; } return 0; } static void tv_win_goto(tview_t *tv, int *tid, int *pos) { char str[256], *p; int i, l = 0; wborder(tv->wgoto, '|', '|', '-', '-', '+', '+', '+', '+'); mvwprintw(tv->wgoto, 1, 2, "Goto: "); for (;;) { int c = wgetch(tv->wgoto); wrefresh(tv->wgoto); if (c == KEY_BACKSPACE || c == '\010' || c == '\177') { --l; } else if (c == KEY_ENTER || c == '\012' || c == '\015') { int _tid = -1, _beg, _end; if (str[0] == '=') { _beg = strtol(str+1, &p, 10) - 1; if (_beg > 0) { *pos = _beg; return; } } else { bam_parse_region(tv->header, str, &_tid, &_beg, &_end); if (_tid >= 0) { *tid = _tid; *pos = _beg; return; } } } else if (isgraph(c)) { if (l < TV_MAX_GOTO) str[l++] = c; } else if (c == '\027') l = 0; else if (c == '\033') return; str[l] = '\0'; for (i = 0; i < TV_MAX_GOTO; ++i) mvwaddch(tv->wgoto, 1, 8 + i, ' '); mvwprintw(tv->wgoto, 1, 8, "%s", str); } } static void tv_win_help(tview_t *tv) { int r = 1; WINDOW *win = tv->whelp; wborder(win, '|', '|', '-', '-', '+', '+', '+', '+'); mvwprintw(win, r++, 2, " -=- Help -=- "); r++; mvwprintw(win, r++, 2, "? This window"); mvwprintw(win, r++, 2, "Arrows Small scroll movement"); mvwprintw(win, r++, 2, "h,j,k,l Small scroll movement"); mvwprintw(win, r++, 2, "H,J,K,L Large scroll movement"); mvwprintw(win, r++, 2, "ctrl-H Scroll 1k left"); mvwprintw(win, r++, 2, "ctrl-L Scroll 1k right"); mvwprintw(win, r++, 2, "space Scroll one screen"); mvwprintw(win, r++, 2, "backspace Scroll back one screen"); mvwprintw(win, r++, 2, "g Go to specific location"); mvwprintw(win, r++, 2, "m Color for mapping qual"); mvwprintw(win, r++, 2, "n Color for nucleotide"); mvwprintw(win, r++, 2, "b Color for base quality"); mvwprintw(win, r++, 2, "c Color for cs color"); mvwprintw(win, r++, 2, "z Color for cs qual"); mvwprintw(win, r++, 2, ". Toggle on/off dot view"); mvwprintw(win, r++, 2, "s Toggle on/off ref skip"); mvwprintw(win, r++, 2, "r Toggle on/off rd name"); mvwprintw(win, r++, 2, "N Turn on nt view"); mvwprintw(win, r++, 2, "C Turn on cs view"); mvwprintw(win, r++, 2, "i Toggle on/off ins"); mvwprintw(win, r++, 2, "q Exit"); r++; mvwprintw(win, r++, 2, "Underline: Secondary or orphan"); mvwprintw(win, r++, 2, "Blue: 0-9 Green: 10-19"); mvwprintw(win, r++, 2, "Yellow: 20-29 White: >=30"); wrefresh(win); wgetch(win); } void tv_loop(tview_t *tv) { int tid, pos; tid = tv->curr_tid; pos = tv->left_pos; while (1) { int c = getch(); switch (c) { case '?': tv_win_help(tv); break; case '\033': case 'q': goto end_loop; case '/': case 'g': tv_win_goto(tv, &tid, &pos); break; case 'm': tv->color_for = TV_COLOR_MAPQ; break; case 'b': tv->color_for = TV_COLOR_BASEQ; break; case 'n': tv->color_for = TV_COLOR_NUCL; break; case 'c': tv->color_for = TV_COLOR_COL; break; case 'z': tv->color_for = TV_COLOR_COLQ; break; case 's': tv->no_skip = !tv->no_skip; break; case 'r': tv->show_name = !tv->show_name; break; case KEY_LEFT: case 'h': --pos; break; case KEY_RIGHT: case 'l': ++pos; break; case KEY_SLEFT: case 'H': pos -= 20; break; case KEY_SRIGHT: case 'L': pos += 20; break; case '.': tv->is_dot = !tv->is_dot; break; case 'N': tv->base_for = TV_BASE_NUCL; break; case 'C': tv->base_for = TV_BASE_COLOR_SPACE; break; case 'i': tv->ins = !tv->ins; break; case '\010': pos -= 1000; break; case '\014': pos += 1000; break; case ' ': pos += tv->mcol; break; case KEY_UP: case 'j': --tv->row_shift; break; case KEY_DOWN: case 'k': ++tv->row_shift; break; case KEY_BACKSPACE: case '\177': pos -= tv->mcol; break; case KEY_RESIZE: getmaxyx(stdscr, tv->mrow, tv->mcol); break; default: continue; } if (pos < 0) pos = 0; if (tv->row_shift < 0) tv->row_shift = 0; tv_draw_aln(tv, tid, pos); } end_loop: return; } int bam_tview_main(int argc, char *argv[]) { tview_t *tv; if (argc == 1) { fprintf(stderr, "Usage: bamtk tview [ref.fasta]\n"); return 1; } tv = tv_init(argv[1], (argc == 2)? 0 : argv[2]); tv_draw_aln(tv, 0, 0); tv_loop(tv); tv_destroy(tv); return 0; } #else // #ifdef _HAVE_CURSES #include #warning "No curses library is available; tview is disabled." int bam_tview_main(int argc, char *argv[]) { fprintf(stderr, "[bam_tview_main] The ncurses library is unavailable; tview is not compiled.\n"); return 1; } #endif // #ifdef _HAVE_CURSES genometools-1.5.1/src/external/samtools-0.1.18/bamtk.c000066400000000000000000000111441211610345200223040ustar00rootroot00000000000000#include #include #include #include #include "bam.h" #ifdef _USE_KNETFILE #include "knetfile.h" #endif int bam_taf2baf(int argc, char *argv[]); int bam_mpileup(int argc, char *argv[]); int bam_merge(int argc, char *argv[]); int bam_index(int argc, char *argv[]); int bam_sort(int argc, char *argv[]); int bam_tview_main(int argc, char *argv[]); int bam_mating(int argc, char *argv[]); int bam_rmdup(int argc, char *argv[]); int bam_flagstat(int argc, char *argv[]); int bam_fillmd(int argc, char *argv[]); int bam_idxstats(int argc, char *argv[]); int main_samview(int argc, char *argv[]); int main_import(int argc, char *argv[]); int main_reheader(int argc, char *argv[]); int main_cut_target(int argc, char *argv[]); int main_phase(int argc, char *argv[]); int main_cat(int argc, char *argv[]); int main_depth(int argc, char *argv[]); int main_bam2fq(int argc, char *argv[]); int faidx_main(int argc, char *argv[]); static int usage() { fprintf(stderr, "\n"); fprintf(stderr, "Program: samtools (Tools for alignments in the SAM format)\n"); fprintf(stderr, "Version: %s\n\n", BAM_VERSION); fprintf(stderr, "Usage: samtools [options]\n\n"); fprintf(stderr, "Command: view SAM<->BAM conversion\n"); fprintf(stderr, " sort sort alignment file\n"); fprintf(stderr, " mpileup multi-way pileup\n"); fprintf(stderr, " depth compute the depth\n"); fprintf(stderr, " faidx index/extract FASTA\n"); #if _CURSES_LIB != 0 fprintf(stderr, " tview text alignment viewer\n"); #endif fprintf(stderr, " index index alignment\n"); fprintf(stderr, " idxstats BAM index stats (r595 or later)\n"); fprintf(stderr, " fixmate fix mate information\n"); fprintf(stderr, " flagstat simple stats\n"); fprintf(stderr, " calmd recalculate MD/NM tags and '=' bases\n"); fprintf(stderr, " merge merge sorted alignments\n"); fprintf(stderr, " rmdup remove PCR duplicates\n"); fprintf(stderr, " reheader replace BAM header\n"); fprintf(stderr, " cat concatenate BAMs\n"); fprintf(stderr, " targetcut cut fosmid regions (for fosmid pool only)\n"); fprintf(stderr, " phase phase heterozygotes\n"); fprintf(stderr, "\n"); #ifdef _WIN32 fprintf(stderr, "\ Note: The Windows version of SAMtools is mainly designed for read-only\n\ operations, such as viewing the alignments and generating the pileup.\n\ Binary files generated by the Windows version may be buggy.\n\n"); #endif return 1; } int main(int argc, char *argv[]) { #ifdef _WIN32 setmode(fileno(stdout), O_BINARY); setmode(fileno(stdin), O_BINARY); #ifdef _USE_KNETFILE knet_win32_init(); #endif #endif if (argc < 2) return usage(); if (strcmp(argv[1], "view") == 0) return main_samview(argc-1, argv+1); else if (strcmp(argv[1], "import") == 0) return main_import(argc-1, argv+1); else if (strcmp(argv[1], "mpileup") == 0) return bam_mpileup(argc-1, argv+1); else if (strcmp(argv[1], "merge") == 0) return bam_merge(argc-1, argv+1); else if (strcmp(argv[1], "sort") == 0) return bam_sort(argc-1, argv+1); else if (strcmp(argv[1], "index") == 0) return bam_index(argc-1, argv+1); else if (strcmp(argv[1], "idxstats") == 0) return bam_idxstats(argc-1, argv+1); else if (strcmp(argv[1], "faidx") == 0) return faidx_main(argc-1, argv+1); else if (strcmp(argv[1], "fixmate") == 0) return bam_mating(argc-1, argv+1); else if (strcmp(argv[1], "rmdup") == 0) return bam_rmdup(argc-1, argv+1); else if (strcmp(argv[1], "flagstat") == 0) return bam_flagstat(argc-1, argv+1); else if (strcmp(argv[1], "calmd") == 0) return bam_fillmd(argc-1, argv+1); else if (strcmp(argv[1], "fillmd") == 0) return bam_fillmd(argc-1, argv+1); else if (strcmp(argv[1], "reheader") == 0) return main_reheader(argc-1, argv+1); else if (strcmp(argv[1], "cat") == 0) return main_cat(argc-1, argv+1); else if (strcmp(argv[1], "targetcut") == 0) return main_cut_target(argc-1, argv+1); else if (strcmp(argv[1], "phase") == 0) return main_phase(argc-1, argv+1); else if (strcmp(argv[1], "depth") == 0) return main_depth(argc-1, argv+1); else if (strcmp(argv[1], "bam2fq") == 0) return main_bam2fq(argc-1, argv+1); else if (strcmp(argv[1], "pileup") == 0) { fprintf(stderr, "[main] The `pileup' command has been removed. Please use `mpileup' instead.\n"); return 1; } #if _CURSES_LIB != 0 else if (strcmp(argv[1], "tview") == 0) return bam_tview_main(argc-1, argv+1); #endif else { fprintf(stderr, "[main] unrecognized command '%s'\n", argv[1]); return 1; } return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/000077500000000000000000000000001211610345200226545ustar00rootroot00000000000000genometools-1.5.1/src/external/samtools-0.1.18/bcftools/Makefile000066400000000000000000000023061211610345200243150ustar00rootroot00000000000000CC= gcc CFLAGS= -g -Wall -O2 #-m64 #-arch ppc DFLAGS= -D_FILE_OFFSET_BITS=64 -D_USE_KNETFILE LOBJS= bcf.o vcf.o bcfutils.o prob1.o em.o kfunc.o kmin.o index.o fet.o mut.o bcf2qcall.o OMISC= .. AOBJS= call1.o main.o $(OMISC)/kstring.o $(OMISC)/bgzf.o $(OMISC)/knetfile.o $(OMISC)/bedidx.o PROG= bcftools INCLUDES= SUBDIRS= . .SUFFIXES:.c .o .c.o: $(CC) -c $(CFLAGS) $(DFLAGS) -I.. $(INCLUDES) $< -o $@ all-recur lib-recur clean-recur cleanlocal-recur install-recur: @target=`echo $@ | sed s/-recur//`; \ wdir=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ cd $$subdir; \ $(MAKE) CC="$(CC)" DFLAGS="$(DFLAGS)" CFLAGS="$(CFLAGS)" \ INCLUDES="$(INCLUDES)" LIBPATH="$(LIBPATH)" $$target || exit 1; \ cd $$wdir; \ done; all:$(PROG) lib:libbcf.a libbcf.a:$(LOBJS) $(AR) -csru $@ $(LOBJS) bcftools:lib $(AOBJS) $(CC) $(CFLAGS) -o $@ $(AOBJS) -L. $(LIBPATH) -lbcf -lm -lz bcf.o:bcf.h vcf.o:bcf.h index.o:bcf.h bcfutils.o:bcf.h prob1.o:prob1.h bcf.h call1.o:prob1.h bcf.h bcf2qcall.o:bcf.h main.o:bcf.h bcf.pdf:bcf.tex pdflatex bcf cleanlocal: rm -fr gmon.out *.o a.out *.dSYM $(PROG) *~ *.a bcf.aux bcf.log bcf.pdf *.class libbcf.*.dylib libbcf.so* clean:cleanlocal-recur genometools-1.5.1/src/external/samtools-0.1.18/bcftools/README000066400000000000000000000036561211610345200235460ustar00rootroot00000000000000The view command of bcftools calls variants, tests Hardy-Weinberg equilibrium (HWE), tests allele balances and estimates allele frequency. This command calls a site as a potential variant if P(ref|D,F) is below 0.9 (controlled by the -p option), where D is data and F is the prior allele frequency spectrum (AFS). The view command performs two types of allele balance tests, both based on Fisher's exact test for 2x2 contingency tables with the row variable being reference allele or not. In the first table, the column variable is strand. Two-tail P-value is taken. We test if variant bases tend to come from one strand. In the second table, the column variable is whether a base appears in the first or the last 11bp of the read. One-tail P-value is taken. We test if variant bases tend to occur towards the end of reads, which is usually an indication of misalignment. Site allele frequency is estimated in two ways. In the first way, the frequency is esimated as \argmax_f P(D|f) under the assumption of HWE. Prior AFS is not used. In the second way, the frequency is estimated as the posterior expectation of allele counts \sum_k kP(k|D,F), dividied by the total number of haplotypes. HWE is not assumed, but the estimate depends on the prior AFS. The two estimates largely agree when the signal is strong, but may differ greatly on weak sites as in this case, the prior plays an important role. To test HWE, we calculate the posterior distribution of genotypes (ref-hom, het and alt-hom). Chi-square test is performed. It is worth noting that the model used here is prior dependent and assumes HWE, which is different from both models for allele frequency estimate. The new model actually yields a third estimate of site allele frequency. The estimate allele frequency spectrum is printed to stderr per 64k sites. The estimate is in fact only the first round of a EM procedure. The second model (not the model for HWE testing) is used to estimate the AFS.genometools-1.5.1/src/external/samtools-0.1.18/bcftools/bcf.c000066400000000000000000000204171211610345200235560ustar00rootroot00000000000000#include #include #include #include "kstring.h" #include "bcf.h" bcf_t *bcf_open(const char *fn, const char *mode) { bcf_t *b; b = calloc(1, sizeof(bcf_t)); if (strchr(mode, 'w')) { b->fp = strcmp(fn, "-")? bgzf_open(fn, mode) : bgzf_fdopen(fileno(stdout), mode); } else { b->fp = strcmp(fn, "-")? bgzf_open(fn, mode) : bgzf_fdopen(fileno(stdin), mode); } #ifndef BCF_LITE b->fp->owned_file = 1; #endif return b; } int bcf_close(bcf_t *b) { int ret; if (b == 0) return 0; ret = bgzf_close(b->fp); free(b); return ret; } int bcf_hdr_write(bcf_t *b, const bcf_hdr_t *h) { if (b == 0 || h == 0) return -1; bgzf_write(b->fp, "BCF\4", 4); bgzf_write(b->fp, &h->l_nm, 4); bgzf_write(b->fp, h->name, h->l_nm); bgzf_write(b->fp, &h->l_smpl, 4); bgzf_write(b->fp, h->sname, h->l_smpl); bgzf_write(b->fp, &h->l_txt, 4); bgzf_write(b->fp, h->txt, h->l_txt); bgzf_flush(b->fp); return 16 + h->l_nm + h->l_smpl + h->l_txt; } bcf_hdr_t *bcf_hdr_read(bcf_t *b) { uint8_t magic[4]; bcf_hdr_t *h; if (b == 0) return 0; h = calloc(1, sizeof(bcf_hdr_t)); bgzf_read(b->fp, magic, 4); bgzf_read(b->fp, &h->l_nm, 4); h->name = malloc(h->l_nm); bgzf_read(b->fp, h->name, h->l_nm); bgzf_read(b->fp, &h->l_smpl, 4); h->sname = malloc(h->l_smpl); bgzf_read(b->fp, h->sname, h->l_smpl); bgzf_read(b->fp, &h->l_txt, 4); h->txt = malloc(h->l_txt); bgzf_read(b->fp, h->txt, h->l_txt); bcf_hdr_sync(h); return h; } void bcf_hdr_destroy(bcf_hdr_t *h) { if (h == 0) return; free(h->name); free(h->sname); free(h->txt); free(h->ns); free(h->sns); free(h); } static inline char **cnt_null(int l, char *str, int *_n) { int n = 0; char *p, **list; *_n = 0; if (l == 0 || str == 0) return 0; for (p = str; p != str + l; ++p) if (*p == 0) ++n; *_n = n; list = calloc(n, sizeof(void*)); list[0] = str; for (p = str, n = 1; p < str + l - 1; ++p) if (*p == 0) list[n++] = p + 1; return list; } int bcf_hdr_sync(bcf_hdr_t *b) { if (b == 0) return -1; if (b->ns) free(b->ns); if (b->sns) free(b->sns); if (b->l_nm) b->ns = cnt_null(b->l_nm, b->name, &b->n_ref); else b->ns = 0, b->n_ref = 0; b->sns = cnt_null(b->l_smpl, b->sname, &b->n_smpl); return 0; } int bcf_sync(bcf1_t *b) { char *p, *tmp[5]; int i, n, n_smpl = b->n_smpl; ks_tokaux_t aux; // set ref, alt, flt, info, fmt b->ref = b->alt = b->flt = b->info = b->fmt = 0; for (p = b->str, n = 0; p < b->str + b->l_str; ++p) { if (*p == 0 && p+1 != b->str + b->l_str) { if (n == 5) { ++n; break; } else tmp[n++] = p + 1; } } if (n != 5) { fprintf(stderr, "[%s] incorrect number of fields (%d != 5) at %d:%d\n", __func__, n, b->tid, b->pos); return -1; } b->ref = tmp[0]; b->alt = tmp[1]; b->flt = tmp[2]; b->info = tmp[3]; b->fmt = tmp[4]; // set n_alleles if (*b->alt == 0) b->n_alleles = 1; else { for (p = b->alt, n = 1; *p; ++p) if (*p == ',') ++n; b->n_alleles = n + 1; } // set n_gi and gi[i].fmt for (p = b->fmt, n = 1; *p; ++p) if (*p == ':') ++n; if (n > b->m_gi) { int old_m = b->m_gi; b->m_gi = n; kroundup32(b->m_gi); b->gi = realloc(b->gi, b->m_gi * sizeof(bcf_ginfo_t)); memset(b->gi + old_m, 0, (b->m_gi - old_m) * sizeof(bcf_ginfo_t)); } b->n_gi = n; for (p = kstrtok(b->fmt, ":", &aux), n = 0; p; p = kstrtok(0, 0, &aux)) b->gi[n++].fmt = bcf_str2int(p, aux.p - p); // set gi[i].len for (i = 0; i < b->n_gi; ++i) { if (b->gi[i].fmt == bcf_str2int("PL", 2)) { b->gi[i].len = b->n_alleles * (b->n_alleles + 1) / 2; } else if (b->gi[i].fmt == bcf_str2int("DP", 2) || b->gi[i].fmt == bcf_str2int("HQ", 2)) { b->gi[i].len = 2; } else if (b->gi[i].fmt == bcf_str2int("GQ", 2) || b->gi[i].fmt == bcf_str2int("GT", 2)) { b->gi[i].len = 1; } else if (b->gi[i].fmt == bcf_str2int("SP", 2)) { b->gi[i].len = 4; } else if (b->gi[i].fmt == bcf_str2int("GL", 2)) { b->gi[i].len = b->n_alleles * (b->n_alleles + 1) / 2 * 4; } b->gi[i].data = realloc(b->gi[i].data, n_smpl * b->gi[i].len); } return 0; } int bcf_write(bcf_t *bp, const bcf_hdr_t *h, const bcf1_t *b) { int i, l = 0; if (b == 0) return -1; bgzf_write(bp->fp, &b->tid, 4); bgzf_write(bp->fp, &b->pos, 4); bgzf_write(bp->fp, &b->qual, 4); bgzf_write(bp->fp, &b->l_str, 4); bgzf_write(bp->fp, b->str, b->l_str); l = 12 + b->l_str; for (i = 0; i < b->n_gi; ++i) { bgzf_write(bp->fp, b->gi[i].data, b->gi[i].len * h->n_smpl); l += b->gi[i].len * h->n_smpl; } return l; } int bcf_read(bcf_t *bp, const bcf_hdr_t *h, bcf1_t *b) { int i, l = 0; if (b == 0) return -1; if (bgzf_read(bp->fp, &b->tid, 4) == 0) return -1; b->n_smpl = h->n_smpl; bgzf_read(bp->fp, &b->pos, 4); bgzf_read(bp->fp, &b->qual, 4); bgzf_read(bp->fp, &b->l_str, 4); if (b->l_str > b->m_str) { b->m_str = b->l_str; kroundup32(b->m_str); b->str = realloc(b->str, b->m_str); } bgzf_read(bp->fp, b->str, b->l_str); l = 12 + b->l_str; if (bcf_sync(b) < 0) return -2; for (i = 0; i < b->n_gi; ++i) { bgzf_read(bp->fp, b->gi[i].data, b->gi[i].len * h->n_smpl); l += b->gi[i].len * h->n_smpl; } return l; } int bcf_destroy(bcf1_t *b) { int i; if (b == 0) return -1; free(b->str); for (i = 0; i < b->m_gi; ++i) free(b->gi[i].data); free(b->gi); free(b); return 0; } static inline void fmt_str(const char *p, kstring_t *s) { if (*p == 0) kputc('.', s); else kputs(p, s); } void bcf_fmt_core(const bcf_hdr_t *h, bcf1_t *b, kstring_t *s) { int i, j, x; s->l = 0; if (h->n_ref) kputs(h->ns[b->tid], s); else kputw(b->tid, s); kputc('\t', s); kputw(b->pos + 1, s); kputc('\t', s); fmt_str(b->str, s); kputc('\t', s); fmt_str(b->ref, s); kputc('\t', s); fmt_str(b->alt, s); kputc('\t', s); ksprintf(s, "%.3g", b->qual); kputc('\t', s); fmt_str(b->flt, s); kputc('\t', s); fmt_str(b->info, s); if (b->fmt[0]) { kputc('\t', s); fmt_str(b->fmt, s); } x = b->n_alleles * (b->n_alleles + 1) / 2; if (b->n_gi == 0) return; for (j = 0; j < h->n_smpl; ++j) { kputc('\t', s); for (i = 0; i < b->n_gi; ++i) { if (i) kputc(':', s); if (b->gi[i].fmt == bcf_str2int("PL", 2)) { uint8_t *d = (uint8_t*)b->gi[i].data + j * x; int k; for (k = 0; k < x; ++k) { if (k > 0) kputc(',', s); kputw(d[k], s); } } else if (b->gi[i].fmt == bcf_str2int("DP", 2)) { kputw(((uint16_t*)b->gi[i].data)[j], s); } else if (b->gi[i].fmt == bcf_str2int("GQ", 2)) { kputw(((uint8_t*)b->gi[i].data)[j], s); } else if (b->gi[i].fmt == bcf_str2int("SP", 2)) { kputw(((int32_t*)b->gi[i].data)[j], s); } else if (b->gi[i].fmt == bcf_str2int("GT", 2)) { int y = ((uint8_t*)b->gi[i].data)[j]; if (y>>7&1) { kputsn("./.", 3, s); } else { kputc('0' + (y>>3&7), s); kputc("/|"[y>>6&1], s); kputc('0' + (y&7), s); } } else if (b->gi[i].fmt == bcf_str2int("GL", 2)) { float *d = (float*)b->gi[i].data + j * x; int k; //printf("- %lx\n", d); for (k = 0; k < x; ++k) { if (k > 0) kputc(',', s); ksprintf(s, "%.2f", d[k]); } } else kputc('.', s); // custom fields } } } char *bcf_fmt(const bcf_hdr_t *h, bcf1_t *b) { kstring_t s; s.l = s.m = 0; s.s = 0; bcf_fmt_core(h, b, &s); return s.s; } int bcf_append_info(bcf1_t *b, const char *info, int l) { int shift = b->fmt - b->str; int l_fmt = b->l_str - shift; char *ori = b->str; if (b->l_str + l > b->m_str) { // enlarge if necessary b->m_str = b->l_str + l; kroundup32(b->m_str); b->str = realloc(b->str, b->m_str); } memmove(b->str + shift + l, b->str + shift, l_fmt); // move the FORMAT field memcpy(b->str + shift - 1, info, l); // append to the INFO field b->str[shift + l - 1] = '\0'; b->fmt = b->str + shift + l; b->l_str += l; if (ori != b->str) bcf_sync(b); // synchronize when realloc changes the pointer return 0; } int bcf_cpy(bcf1_t *r, const bcf1_t *b) { char *t1 = r->str; bcf_ginfo_t *t2 = r->gi; int i, t3 = r->m_str, t4 = r->m_gi; *r = *b; r->str = t1; r->gi = t2; r->m_str = t3; r->m_gi = t4; if (r->m_str < b->m_str) { r->m_str = b->m_str; r->str = realloc(r->str, r->m_str); } memcpy(r->str, b->str, r->m_str); bcf_sync(r); // calling bcf_sync() is simple but inefficient for (i = 0; i < r->n_gi; ++i) memcpy(r->gi[i].data, b->gi[i].data, r->n_smpl * r->gi[i].len); return 0; } int bcf_is_indel(const bcf1_t *b) { char *p; if (strlen(b->ref) > 1) return 1; for (p = b->alt; *p; ++p) if (*p != ',' && p[1] != ',' && p[1] != '\0') return 1; return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/bcf.h000066400000000000000000000153051211610345200235630ustar00rootroot00000000000000/* The MIT License Copyright (c) 2010 Broad Institute Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Contact: Heng Li */ #ifndef BCF_H #define BCF_H #define BCF_VERSION "0.1.17-dev (r973:277)" #include #include #ifndef BCF_LITE #include "bgzf.h" typedef BGZF *bcfFile; #else typedef gzFile bcfFile; #define bgzf_open(fn, mode) gzopen(fn, mode) #define bgzf_fdopen(fd, mode) gzdopen(fd, mode) #define bgzf_close(fp) gzclose(fp) #define bgzf_read(fp, buf, len) gzread(fp, buf, len) #define bgzf_write(fp, buf, len) #define bgzf_flush(fp) #endif /* A member in the structs below is said to "primary" if its content cannot be inferred from other members in any of structs below; a member is said to be "derived" if its content can be derived from other members. For example, bcf1_t::str is primary as this comes from the input data, while bcf1_t::info is derived as it can always be correctly set if we know bcf1_t::str. Derived members are for quick access to the content and must be synchronized with the primary data. */ typedef struct { uint32_t fmt; // format of the block, set by bcf_str2int(). int len; // length of data for each individual void *data; // concatenated data // derived info: fmt, len (<-bcf1_t::fmt) } bcf_ginfo_t; typedef struct { int32_t tid, pos; // refID and 0-based position int32_t l_str, m_str; // length and the allocated size of ->str float qual; // SNP quality char *str; // concatenated string of variable length strings in VCF (from col.2 to col.7) char *ref, *alt, *flt, *info, *fmt; // they all point to ->str; no memory allocation int n_gi, m_gi; // number and the allocated size of geno fields bcf_ginfo_t *gi; // array of geno fields int n_alleles, n_smpl; // number of alleles and samples // derived info: ref, alt, flt, info, fmt (<-str), n_gi (<-fmt), n_alleles (<-alt), n_smpl (<-bcf_hdr_t::n_smpl) } bcf1_t; typedef struct { int32_t n_ref, n_smpl; // number of reference sequences and samples int32_t l_nm; // length of concatenated sequence names; 0 padded int32_t l_smpl; // length of concatenated sample names; 0 padded int32_t l_txt; // length of header text (lines started with ##) char *name, *sname, *txt; // concatenated sequence names, sample names and header text char **ns, **sns; // array of sequence and sample names; point to name and sname, respectively // derived info: n_ref (<-name), n_smpl (<-sname), ns (<-name), sns (<-sname) } bcf_hdr_t; typedef struct { int is_vcf; // if the file in operation is a VCF void *v; // auxillary data structure for VCF bcfFile fp; // file handler for BCF } bcf_t; struct __bcf_idx_t; typedef struct __bcf_idx_t bcf_idx_t; #ifdef __cplusplus extern "C" { #endif // open a BCF file; for BCF file only bcf_t *bcf_open(const char *fn, const char *mode); // close file int bcf_close(bcf_t *b); // read one record from BCF; return -1 on end-of-file, and <-1 for errors int bcf_read(bcf_t *bp, const bcf_hdr_t *h, bcf1_t *b); // call this function if b->str is changed int bcf_sync(bcf1_t *b); // write a BCF record int bcf_write(bcf_t *bp, const bcf_hdr_t *h, const bcf1_t *b); // read the BCF header; BCF only bcf_hdr_t *bcf_hdr_read(bcf_t *b); // write the BCF header int bcf_hdr_write(bcf_t *b, const bcf_hdr_t *h); // set bcf_hdr_t::ns and bcf_hdr_t::sns int bcf_hdr_sync(bcf_hdr_t *b); // destroy the header void bcf_hdr_destroy(bcf_hdr_t *h); // destroy a record int bcf_destroy(bcf1_t *b); // BCF->VCF conversion char *bcf_fmt(const bcf_hdr_t *h, bcf1_t *b); // append more info int bcf_append_info(bcf1_t *b, const char *info, int l); // copy int bcf_cpy(bcf1_t *r, const bcf1_t *b); // open a VCF or BCF file if "b" is set in "mode" bcf_t *vcf_open(const char *fn, const char *mode); // close a VCF/BCF file int vcf_close(bcf_t *bp); // read the VCF/BCF header bcf_hdr_t *vcf_hdr_read(bcf_t *bp); // read the sequence dictionary from a separate file; required for VCF->BCF conversion int vcf_dictread(bcf_t *bp, bcf_hdr_t *h, const char *fn); // read a VCF/BCF record; return -1 on end-of-file and <-1 for errors int vcf_read(bcf_t *bp, bcf_hdr_t *h, bcf1_t *b); // write the VCF header int vcf_hdr_write(bcf_t *bp, const bcf_hdr_t *h); // write a VCF record int vcf_write(bcf_t *bp, bcf_hdr_t *h, bcf1_t *b); // keep the first n alleles and discard the rest int bcf_shrink_alt(bcf1_t *b, int n); // convert GL to PL int bcf_gl2pl(bcf1_t *b); // if the site is an indel int bcf_is_indel(const bcf1_t *b); bcf_hdr_t *bcf_hdr_subsam(const bcf_hdr_t *h0, int n, char *const* samples, int *list); int bcf_subsam(int n_smpl, int *list, bcf1_t *b); // move GT to the first FORMAT field int bcf_fix_gt(bcf1_t *b); // update PL generated by old samtools int bcf_fix_pl(bcf1_t *b); // convert PL to GLF-like 10-likelihood GL int bcf_gl10(const bcf1_t *b, uint8_t *gl); // convert up to 4 INDEL alleles to GLF-like 10-likelihood GL int bcf_gl10_indel(const bcf1_t *b, uint8_t *gl); // string hash table void *bcf_build_refhash(bcf_hdr_t *h); void bcf_str2id_destroy(void *_hash); void bcf_str2id_thorough_destroy(void *_hash); int bcf_str2id_add(void *_hash, const char *str); int bcf_str2id(void *_hash, const char *str); void *bcf_str2id_init(); // indexing related functions int bcf_idx_build(const char *fn); uint64_t bcf_idx_query(const bcf_idx_t *idx, int tid, int beg); int bcf_parse_region(void *str2id, const char *str, int *tid, int *begin, int *end); bcf_idx_t *bcf_idx_load(const char *fn); void bcf_idx_destroy(bcf_idx_t *idx); #ifdef __cplusplus } #endif static inline uint32_t bcf_str2int(const char *str, int l) { int i; uint32_t x = 0; for (i = 0; i < l && i < 4; ++i) { if (str[i] == 0) return x; x = x<<8 | str[i]; } return x; } #endif genometools-1.5.1/src/external/samtools-0.1.18/bcftools/bcf.tex000066400000000000000000000101711211610345200241300ustar00rootroot00000000000000\documentclass[10pt,pdftex]{article} \usepackage{color} \definecolor{gray}{rgb}{0.7,0.7,0.7} \setlength{\topmargin}{0.0cm} \setlength{\textheight}{21.5cm} \setlength{\oddsidemargin}{0cm} \setlength{\textwidth}{16.5cm} \setlength{\columnsep}{0.6cm} \begin{document} \begin{center} \begin{tabular}{|l|l|l|l|l|} \hline \multicolumn{2}{|c|}{\bf Field} & \multicolumn{1}{c|}{\bf Descrption} & \multicolumn{1}{c|}{\bf Type} & \multicolumn{1}{c|}{\bf Value} \\\hline\hline \multicolumn{2}{|l|}{\sf magic} & Magic string & {\tt char[4]} & {\tt BCF\char92 4} \\\hline \multicolumn{2}{|l|}{\sf l\_seqnm} & Length of concatenated sequence names & {\tt int32\_t} & \\\hline \multicolumn{2}{|l|}{\sf seqnm} & Concatenated names, {\tt NULL} padded & {\tt char[{\sf l\_seqnm}]} & \\\hline \multicolumn{2}{|l|}{\sf l\_smpl} & Length of concatenated sample names & {\tt int32\_t} & \\\hline \multicolumn{2}{|l|}{\sf smpl} & Concatenated sample names & {\tt char[{\sf l\_smpl}]} & \\\hline \multicolumn{2}{|l|}{\sf l\_meta} & Length of the meta text (double-hash lines)& {\tt int32\_t} & \\\hline \multicolumn{2}{|l|}{\sf meta} & Meta text, {\tt NULL} terminated & {\tt char[{\sf l\_meta}]} & \\\hline \multicolumn{5}{|c|}{\it \color{gray}{List of records until the end of the file}}\\\cline{2-5} & {\sf seq\_id} & Reference sequence ID & {\tt int32\_t} & \\\cline{2-5} & {\sf pos} & Position & {\tt int32\_t} & \\\cline{2-5} & {\sf qual} & Variant quality & {\tt float} & \\\cline{2-5} & {\sf l\_str} & Length of {\sf str} & {\tt int32\_t} & \\\cline{2-5} & {\sf str} & {\tt ID+REF+ALT+FILTER+INFO+FORMAT}, {\tt NULL} padded & {\tt char[{\sf l\_str}]} &\\\cline{2-5} & \multicolumn{4}{c|}{Blocks of data; \#blocks and formats defined by {\tt FORMAT} (table below)}\\ \hline \end{tabular} \end{center} \begin{center} \begin{tabular}{clp{9cm}} \hline \multicolumn{1}{l}{\bf Field} & \multicolumn{1}{l}{\bf Type} & \multicolumn{1}{l}{\bf Description} \\\hline {\tt DP} & {\tt uint16\_t[n]} & Read depth \\ {\tt GL} & {\tt float[n*G]} & Log10 likelihood of data; $G=\frac{A(A+1)}{2}$, $A=\#\{alleles\}$\\ {\tt GT} & {\tt uint8\_t[n]} & {\tt missing\char60\char60 7 | phased\char60\char60 6 | allele1\char60\char60 3 | allele2} \\ {\tt \_GT} & {\tt uint8\_t+uint8\_t[n*P]} & {Generic GT; the first int equals the max ploidy $P$. If the highest bit is set, the allele is not present (e.g. due to different ploidy between samples).} \\ {\tt GQ} & {\tt uint8\_t[n]} & {Genotype quality}\\ {\tt HQ} & {\tt uint8\_t[n*2]} & {Haplotype quality}\\ {\tt \_HQ} & {\tt uint8\_t+uint8\_t[n*P]} & {Generic HQ}\\ {\tt IBD} & {\tt uint32\_t[n*2]} & {IBD}\\ {\tt \_IBD} & {\tt uint8\_t+uint32\_t[n*P]} & {Generic IBD}\\ {\tt PL} & {\tt uint8\_t[n*G]} & {Phred-scaled likelihood of data}\\ {\tt PS} & {\tt uint32\_t[n]} & {Phase set}\\ %{\tt SP} & {\tt uint8\_t[n]} & {Strand bias P-value (bcftools only)}\\ \emph{Integer} & {\tt int32\_t[n*X]} & {Fix-sized custom Integer; $X$ defined in the header}\\ \emph{Numeric} & {\tt double[n*X]} & {Fix-sized custom Numeric}\\ \emph{String} & {\tt uint32\_t+char*} & {\tt NULL} padded concat. strings (int equals to the length) \\ \hline \end{tabular} \end{center} \begin{itemize} \item A BCF file is in the {\tt BGZF} format. \item All multi-byte numbers are little-endian. \item In a string, a missing value `.' is an empty C string ``{\tt \char92 0}'' (not ``{\tt .\char92 0}'') \item For {\tt GL} and {\tt PL}, likelihoods of genotypes appear in the order of alleles in {\tt REF} and then {\tt ALT}. For example, if {\tt REF=C}, {\tt ALT=T,A}, likelihoods appear in the order of {\tt CC,CT,TT,CA,TA,AA} (NB: the ordering is different from the one in the original BCF proposal). \item Predefined {\tt FORMAT} fields can be missing from VCF headers, but custom {\tt FORMAT} fields are required to be explicitly defined in the headers. \item A {\tt FORMAT} field with its name starting with `{\tt \_}' is specific to BCF only. It gives an alternative binary representation of the corresponding VCF field, in case the default representation is unable to keep the genotype information, for example, when the ploidy is not 2 or there are more than 8 alleles. \end{itemize} \end{document} genometools-1.5.1/src/external/samtools-0.1.18/bcftools/bcf2qcall.c000066400000000000000000000057241211610345200246610ustar00rootroot00000000000000#include #include #include #include #include "bcf.h" static int8_t nt4_table[256] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 /*'-'*/, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, -1, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, -1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; static int read_I16(bcf1_t *b, int anno[16]) { char *p; int i; if ((p = strstr(b->info, "I16=")) == 0) return -1; p += 4; for (i = 0; i < 16; ++i) { anno[i] = strtol(p, &p, 10); if (anno[i] == 0 && (errno == EINVAL || errno == ERANGE)) return -2; ++p; } return 0; } int bcf_2qcall(bcf_hdr_t *h, bcf1_t *b) { int a[4], k, g[10], l, map[4], k1, j, i, i0, anno[16], dp, mq, d_rest; char *s; if (b->ref[1] != 0 || b->n_alleles > 4) return -1; // ref is not a single base for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == bcf_str2int("PL", 2)) break; if (i == b->n_gi) return -1; // no PL if (read_I16(b, anno) != 0) return -1; // no I16; FIXME: can be improved d_rest = dp = anno[0] + anno[1] + anno[2] + anno[3]; if (dp == 0) return -1; // depth is zero mq = (int)(sqrt((double)(anno[9] + anno[11]) / dp) + .499); i0 = i; a[0] = nt4_table[(int)b->ref[0]]; if (a[0] > 3) return -1; // ref is not A/C/G/T a[1] = a[2] = a[3] = -2; // -1 has a special meaning if (b->alt[0] == 0) return -1; // no alternate allele map[0] = map[1] = map[2] = map[3] = -2; map[a[0]] = 0; for (k = 0, s = b->alt, k1 = -1; k < 3 && *s; ++k, s += 2) { if (s[1] != ',' && s[1] != 0) return -1; // ALT is not single base a[k+1] = nt4_table[(int)*s]; if (a[k+1] >= 0) map[a[k+1]] = k+1; else k1 = k+1; if (s[1] == 0) break; } for (k = 0; k < 4; ++k) if (map[k] < 0) map[k] = k1; for (i = 0; i < h->n_smpl; ++i) { int d; uint8_t *p = b->gi[i0].data + i * b->gi[i0].len; for (j = 0; j < b->gi[i0].len; ++j) if (p[j]) break; d = (int)((double)d_rest / (h->n_smpl - i) + .499); if (d == 0) d = 1; if (j == b->gi[i0].len) d = 0; d_rest -= d; for (k = j = 0; k < 4; ++k) { for (l = k; l < 4; ++l) { int t, x = map[k], y = map[l]; if (x > y) t = x, x = y, y = t; // swap g[j++] = p[y * (y+1) / 2 + x]; } } printf("%s\t%d\t%c", h->ns[b->tid], b->pos+1, *b->ref); printf("\t%d\t%d\t0", d, mq); for (j = 0; j < 10; ++j) printf("\t%d", g[j]); printf("\t%s\n", h->sns[i]); } return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/bcfutils.c000066400000000000000000000237661211610345200246510ustar00rootroot00000000000000#include #include #include "bcf.h" #include "kstring.h" #include "khash.h" KHASH_MAP_INIT_STR(str2id, int) #ifdef _WIN32 #define srand48(x) srand(x) #define drand48() ((double)rand() / RAND_MAX) #endif // FIXME: valgrind report a memory leak in this function. Probably it does not get deallocated... void *bcf_build_refhash(bcf_hdr_t *h) { khash_t(str2id) *hash; int i, ret; hash = kh_init(str2id); for (i = 0; i < h->n_ref; ++i) { khint_t k; k = kh_put(str2id, hash, h->ns[i], &ret); // FIXME: check ret kh_val(hash, k) = i; } return hash; } void *bcf_str2id_init() { return kh_init(str2id); } void bcf_str2id_destroy(void *_hash) { khash_t(str2id) *hash = (khash_t(str2id)*)_hash; if (hash) kh_destroy(str2id, hash); // Note that strings are not freed. } void bcf_str2id_thorough_destroy(void *_hash) { khash_t(str2id) *hash = (khash_t(str2id)*)_hash; khint_t k; if (hash == 0) return; for (k = 0; k < kh_end(hash); ++k) if (kh_exist(hash, k)) free((char*)kh_key(hash, k)); kh_destroy(str2id, hash); } int bcf_str2id(void *_hash, const char *str) { khash_t(str2id) *hash = (khash_t(str2id)*)_hash; khint_t k; if (!hash) return -1; k = kh_get(str2id, hash, str); return k == kh_end(hash)? -1 : kh_val(hash, k); } int bcf_str2id_add(void *_hash, const char *str) { khint_t k; int ret; khash_t(str2id) *hash = (khash_t(str2id)*)_hash; if (!hash) return -1; k = kh_put(str2id, hash, str, &ret); if (ret == 0) return kh_val(hash, k); kh_val(hash, k) = kh_size(hash) - 1; return kh_val(hash, k); } int bcf_shrink_alt(bcf1_t *b, int n) { char *p; int i, j, k, n_smpl = b->n_smpl; if (b->n_alleles <= n) return -1; // update ALT if (n > 1) { for (p = b->alt, k = 1; *p; ++p) if (*p == ',' && ++k == n) break; *p = '\0'; } else p = b->alt, *p = '\0'; ++p; memmove(p, b->flt, b->str + b->l_str - b->flt); b->l_str -= b->flt - p; // update PL for (i = 0; i < b->n_gi; ++i) { bcf_ginfo_t *g = b->gi + i; if (g->fmt == bcf_str2int("PL", 2)) { int l, x = b->n_alleles * (b->n_alleles + 1) / 2; uint8_t *d = (uint8_t*)g->data; g->len = n * (n + 1) / 2; for (l = k = 0; l < n_smpl; ++l) { uint8_t *dl = d + l * x; for (j = 0; j < g->len; ++j) d[k++] = dl[j]; } } // FIXME: to add GL } b->n_alleles = n; bcf_sync(b); return 0; } int bcf_gl2pl(bcf1_t *b) { char *p; int i, n_smpl = b->n_smpl; bcf_ginfo_t *g; float *d0; uint8_t *d1; if (strstr(b->fmt, "PL")) return -1; if ((p = strstr(b->fmt, "GL")) == 0) return -1; *p = 'P'; for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == bcf_str2int("GL", 2)) break; g = b->gi + i; g->fmt = bcf_str2int("PL", 2); g->len /= 4; // 4 == sizeof(float) d0 = (float*)g->data; d1 = (uint8_t*)g->data; for (i = 0; i < n_smpl * g->len; ++i) { int x = (int)(-10. * d0[i] + .499); if (x > 255) x = 255; if (x < 0) x = 0; d1[i] = x; } return 0; } /* FIXME: this function will fail given AB:GTX:GT. BCFtools never * produces such FMT, but others may do. */ int bcf_fix_gt(bcf1_t *b) { char *s; int i; uint32_t tmp; bcf_ginfo_t gt; // check the presence of the GT FMT if ((s = strstr(b->fmt, ":GT")) == 0) return 0; // no GT or GT is already the first if (s[3] != '\0' && s[3] != ':') return 0; // :GTX in fact tmp = bcf_str2int("GT", 2); for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == tmp) break; if (i == b->n_gi) return 0; // no GT in b->gi; probably a bug... gt = b->gi[i]; // move GT to the first for (; i > 0; --i) b->gi[i] = b->gi[i-1]; b->gi[0] = gt; memmove(b->fmt + 3, b->fmt, s + 1 - b->fmt); b->fmt[0] = 'G'; b->fmt[1] = 'T'; b->fmt[2] = ':'; return 0; } int bcf_fix_pl(bcf1_t *b) { int i; uint32_t tmp; uint8_t *PL, *swap; bcf_ginfo_t *gi; // pinpoint PL tmp = bcf_str2int("PL", 2); for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == tmp) break; if (i == b->n_gi) return 0; // prepare gi = b->gi + i; PL = (uint8_t*)gi->data; swap = alloca(gi->len); // loop through individuals for (i = 0; i < b->n_smpl; ++i) { int k, l, x; uint8_t *PLi = PL + i * gi->len; memcpy(swap, PLi, gi->len); for (k = x = 0; k < b->n_alleles; ++k) for (l = k; l < b->n_alleles; ++l) PLi[l*(l+1)/2 + k] = swap[x++]; } return 0; } int bcf_smpl_covered(const bcf1_t *b) { int i, j, n = 0; uint32_t tmp; bcf_ginfo_t *gi; // pinpoint PL tmp = bcf_str2int("PL", 2); for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == tmp) break; if (i == b->n_gi) return 0; // count how many samples having PL!=[0..0] gi = b->gi + i; for (i = 0; i < b->n_smpl; ++i) { uint8_t *PLi = ((uint8_t*)gi->data) + i * gi->len; for (j = 0; j < gi->len; ++j) if (PLi[j]) break; if (j < gi->len) ++n; } return n; } static void *locate_field(const bcf1_t *b, const char *fmt, int l) { int i; uint32_t tmp; tmp = bcf_str2int(fmt, l); for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == tmp) break; return i == b->n_gi? 0 : b->gi[i].data; } int bcf_anno_max(bcf1_t *b) { int k, max_gq, max_sp, n_het; kstring_t str; uint8_t *gt, *gq; int32_t *sp; max_gq = max_sp = n_het = 0; gt = locate_field(b, "GT", 2); if (gt == 0) return -1; gq = locate_field(b, "GQ", 2); sp = locate_field(b, "SP", 2); if (sp) for (k = 0; k < b->n_smpl; ++k) if (gt[k]&0x3f) max_sp = max_sp > (int)sp[k]? max_sp : sp[k]; if (gq) for (k = 0; k < b->n_smpl; ++k) if (gt[k]&0x3f) max_gq = max_gq > (int)gq[k]? max_gq : gq[k]; for (k = 0; k < b->n_smpl; ++k) { int a1, a2; a1 = gt[k]&7; a2 = gt[k]>>3&7; if ((!a1 && a2) || (!a2 && a1)) { // a het if (gq == 0) ++n_het; else if (gq[k] >= 20) ++n_het; } } if (n_het) max_sp -= (int)(4.343 * log(n_het) + .499); if (max_sp < 0) max_sp = 0; memset(&str, 0, sizeof(kstring_t)); if (*b->info) kputc(';', &str); ksprintf(&str, "MXSP=%d;MXGQ=%d", max_sp, max_gq); bcf_append_info(b, str.s, str.l); free(str.s); return 0; } // FIXME: only data are shuffled; the header is NOT int bcf_shuffle(bcf1_t *b, int seed) { int i, j, *a; if (seed > 0) srand48(seed); a = malloc(b->n_smpl * sizeof(int)); for (i = 0; i < b->n_smpl; ++i) a[i] = i; for (i = b->n_smpl; i > 1; --i) { int tmp; j = (int)(drand48() * i); tmp = a[j]; a[j] = a[i-1]; a[i-1] = tmp; } for (j = 0; j < b->n_gi; ++j) { bcf_ginfo_t *gi = b->gi + j; uint8_t *swap, *data = (uint8_t*)gi->data; swap = malloc(gi->len * b->n_smpl); for (i = 0; i < b->n_smpl; ++i) memcpy(swap + gi->len * a[i], data + gi->len * i, gi->len); free(gi->data); gi->data = swap; } free(a); return 0; } bcf_hdr_t *bcf_hdr_subsam(const bcf_hdr_t *h0, int n, char *const* samples, int *list) { int i, ret, j; khint_t k; bcf_hdr_t *h; khash_t(str2id) *hash; kstring_t s; s.l = s.m = 0; s.s = 0; hash = kh_init(str2id); for (i = 0; i < h0->n_smpl; ++i) { k = kh_put(str2id, hash, h0->sns[i], &ret); kh_val(hash, k) = i; } for (i = j = 0; i < n; ++i) { k = kh_get(str2id, hash, samples[i]); if (k != kh_end(hash)) { list[j++] = kh_val(hash, k); kputs(samples[i], &s); kputc('\0', &s); } } if (j < n) fprintf(stderr, "<%s> %d samples in the list but not in BCF.", __func__, n - j); kh_destroy(str2id, hash); h = calloc(1, sizeof(bcf_hdr_t)); *h = *h0; h->ns = 0; h->sns = 0; h->name = malloc(h->l_nm); memcpy(h->name, h0->name, h->l_nm); h->txt = calloc(1, h->l_txt + 1); memcpy(h->txt, h0->txt, h->l_txt); h->l_smpl = s.l; h->sname = s.s; bcf_hdr_sync(h); return h; } int bcf_subsam(int n_smpl, int *list, bcf1_t *b) { int i, j; for (j = 0; j < b->n_gi; ++j) { bcf_ginfo_t *gi = b->gi + j; uint8_t *swap; swap = malloc(gi->len * b->n_smpl); for (i = 0; i < n_smpl; ++i) memcpy(swap + i * gi->len, (uint8_t*)gi->data + list[i] * gi->len, gi->len); free(gi->data); gi->data = swap; } b->n_smpl = n_smpl; return 0; } static int8_t nt4_table[128] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 /*'-'*/, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, -1, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, -1, 4, 4, 4, 4, 4, 4, 4 }; int bcf_gl10(const bcf1_t *b, uint8_t *gl) { int a[4], k, l, map[4], k1, j, i; const bcf_ginfo_t *PL; char *s; if (b->ref[1] != 0 || b->n_alleles > 4) return -1; // ref is not a single base or >4 alleles for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == bcf_str2int("PL", 2)) break; if (i == b->n_gi) return -1; // no PL PL = b->gi + i; a[0] = nt4_table[(int)b->ref[0]]; if (a[0] > 3 || a[0] < 0) return -1; // ref is not A/C/G/T a[1] = a[2] = a[3] = -2; // -1 has a special meaning if (b->alt[0] == 0) return -1; // no alternate allele map[0] = map[1] = map[2] = map[3] = -2; map[a[0]] = 0; for (k = 0, s = b->alt, k1 = -1; k < 3 && *s; ++k, s += 2) { if (s[1] != ',' && s[1] != 0) return -1; // ALT is not single base a[k+1] = nt4_table[(int)*s]; if (a[k+1] >= 0) map[a[k+1]] = k+1; else k1 = k + 1; if (s[1] == 0) break; // the end of the ALT string } for (k = 0; k < 4; ++k) if (map[k] < 0) map[k] = k1; for (i = 0; i < b->n_smpl; ++i) { const uint8_t *p = PL->data + i * PL->len; // the PL for the i-th individual uint8_t *g = gl + 10 * i; for (k = j = 0; k < 4; ++k) { for (l = k; l < 4; ++l) { int t, x = map[k], y = map[l]; if (x > y) t = x, x = y, y = t; // make sure x is the smaller g[j++] = p[y * (y+1) / 2 + x]; } } } return 0; } int bcf_gl10_indel(const bcf1_t *b, uint8_t *gl) { int k, l, j, i; const bcf_ginfo_t *PL; if (b->alt[0] == 0) return -1; // no alternate allele for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == bcf_str2int("PL", 2)) break; if (i == b->n_gi) return -1; // no PL PL = b->gi + i; for (i = 0; i < b->n_smpl; ++i) { const uint8_t *p = PL->data + i * PL->len; // the PL for the i-th individual uint8_t *g = gl + 10 * i; for (k = j = 0; k < 4; ++k) { for (l = k; l < 4; ++l) { int t, x = k, y = l; if (x > y) t = x, x = y, y = t; // make sure x is the smaller x = y * (y+1) / 2 + x; g[j++] = x < PL->len? p[x] : 255; } } } return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/call1.c000066400000000000000000000556121211610345200240250ustar00rootroot00000000000000#include #include #include #include #include #include "bcf.h" #include "prob1.h" #include "kstring.h" #include "time.h" #ifdef _WIN32 #define srand48(x) srand(x) #define lrand48() rand() #endif #include "kseq.h" KSTREAM_INIT(gzFile, gzread, 16384) #define VC_NO_GENO 2 #define VC_BCFOUT 4 #define VC_CALL 8 #define VC_VARONLY 16 #define VC_VCFIN 32 #define VC_UNCOMP 64 #define VC_KEEPALT 256 #define VC_ACGT_ONLY 512 #define VC_QCALL 1024 #define VC_CALL_GT 2048 #define VC_ADJLD 4096 #define VC_NO_INDEL 8192 #define VC_ANNO_MAX 16384 #define VC_FIX_PL 32768 #define VC_EM 0x10000 #define VC_PAIRCALL 0x20000 #define VC_QCNT 0x40000 typedef struct { int flag, prior_type, n1, n_sub, *sublist, n_perm; uint32_t *trio_aux; char *prior_file, **subsam, *fn_dict; uint8_t *ploidy; double theta, pref, indel_frac, min_perm_p, min_smpl_frac, min_lrt; void *bed; } viewconf_t; void *bed_read(const char *fn); void bed_destroy(void *_h); int bed_overlap(const void *_h, const char *chr, int beg, int end); typedef struct { double p[4]; int mq, depth, is_tested, d[4]; } anno16_t; static double ttest(int n1, int n2, int a[4]) { extern double kf_betai(double a, double b, double x); double t, v, u1, u2; if (n1 == 0 || n2 == 0 || n1 + n2 < 3) return 1.0; u1 = (double)a[0] / n1; u2 = (double)a[2] / n2; if (u1 <= u2) return 1.; t = (u1 - u2) / sqrt(((a[1] - n1 * u1 * u1) + (a[3] - n2 * u2 * u2)) / (n1 + n2 - 2) * (1./n1 + 1./n2)); v = n1 + n2 - 2; // printf("%d,%d,%d,%d,%lf,%lf,%lf\n", a[0], a[1], a[2], a[3], t, u1, u2); return t < 0.? 1. : .5 * kf_betai(.5*v, .5, v/(v+t*t)); } static int test16_core(int anno[16], anno16_t *a) { extern double kt_fisher_exact(int n11, int n12, int n21, int n22, double *_left, double *_right, double *two); double left, right; int i; a->p[0] = a->p[1] = a->p[2] = a->p[3] = 1.; memcpy(a->d, anno, 4 * sizeof(int)); a->depth = anno[0] + anno[1] + anno[2] + anno[3]; a->is_tested = (anno[0] + anno[1] > 0 && anno[2] + anno[3] > 0); if (a->depth == 0) return -1; a->mq = (int)(sqrt((anno[9] + anno[11]) / a->depth) + .499); kt_fisher_exact(anno[0], anno[1], anno[2], anno[3], &left, &right, &a->p[0]); for (i = 1; i < 4; ++i) a->p[i] = ttest(anno[0] + anno[1], anno[2] + anno[3], anno+4*i); return 0; } static int test16(bcf1_t *b, anno16_t *a) { char *p; int i, anno[16]; a->p[0] = a->p[1] = a->p[2] = a->p[3] = 1.; a->d[0] = a->d[1] = a->d[2] = a->d[3] = 0.; a->mq = a->depth = a->is_tested = 0; if ((p = strstr(b->info, "I16=")) == 0) return -1; p += 4; for (i = 0; i < 16; ++i) { errno = 0; anno[i] = strtol(p, &p, 10); if (anno[i] == 0 && (errno == EINVAL || errno == ERANGE)) return -2; ++p; } return test16_core(anno, a); } static void rm_info(bcf1_t *b, const char *key) { char *p, *q; if ((p = strstr(b->info, key)) == 0) return; for (q = p; *q && *q != ';'; ++q); if (p > b->info && *(p-1) == ';') --p; memmove(p, q, b->l_str - (q - b->str)); b->l_str -= q - p; bcf_sync(b); } static int update_bcf1(bcf1_t *b, const bcf_p1aux_t *pa, const bcf_p1rst_t *pr, double pref, int flag, double em[10], int cons_llr, int64_t cons_gt) { kstring_t s; int has_I16, is_var; double fq, r; anno16_t a; has_I16 = test16(b, &a) >= 0? 1 : 0; rm_info(b, "I16="); // FIXME: probably this function has a bug. If I move it below, I16 will not be removed! memset(&s, 0, sizeof(kstring_t)); kputc('\0', &s); kputs(b->ref, &s); kputc('\0', &s); kputs(b->alt, &s); kputc('\0', &s); kputc('\0', &s); kputs(b->info, &s); if (b->info[0]) kputc(';', &s); { // print EM if (em[0] >= 0) ksprintf(&s, "AF1=%.4g", 1 - em[0]); if (em[4] >= 0 && em[4] <= 0.05) ksprintf(&s, ";G3=%.4g,%.4g,%.4g;HWE=%.3g", em[3], em[2], em[1], em[4]); if (em[5] >= 0 && em[6] >= 0) ksprintf(&s, ";AF2=%.4g,%.4g", 1 - em[5], 1 - em[6]); if (em[7] >= 0) ksprintf(&s, ";LRT=%.3g", em[7]); if (em[8] >= 0) ksprintf(&s, ";LRT2=%.3g", em[8]); } if (cons_llr > 0) { ksprintf(&s, ";CLR=%d", cons_llr); if (cons_gt > 0) ksprintf(&s, ";UGT=%c%c%c;CGT=%c%c%c", cons_gt&0xff, cons_gt>>8&0xff, cons_gt>>16&0xff, cons_gt>>32&0xff, cons_gt>>40&0xff, cons_gt>>48&0xff); } if (pr == 0) { // if pr is unset, return kputc('\0', &s); kputs(b->fmt, &s); kputc('\0', &s); free(b->str); b->m_str = s.m; b->l_str = s.l; b->str = s.s; bcf_sync(b); return 1; } is_var = (pr->p_ref < pref); r = is_var? pr->p_ref : pr->p_var; // ksprintf(&s, ";CI95=%.4g,%.4g", pr->cil, pr->cih); // FIXME: when EM is not used, ";" should be omitted! ksprintf(&s, ";AC1=%d", pr->ac); if (has_I16) ksprintf(&s, ";DP4=%d,%d,%d,%d;MQ=%d", a.d[0], a.d[1], a.d[2], a.d[3], a.mq); fq = pr->p_ref_folded < 0.5? -4.343 * log(pr->p_ref_folded) : 4.343 * log(pr->p_var_folded); if (fq < -999) fq = -999; if (fq > 999) fq = 999; ksprintf(&s, ";FQ=%.3g", fq); if (pr->cmp[0] >= 0.) { // two sample groups int i, q[3]; for (i = 1; i < 3; ++i) { double x = pr->cmp[i] + pr->cmp[0]/2.; q[i] = x == 0? 255 : (int)(-4.343 * log(x) + .499); if (q[i] > 255) q[i] = 255; } if (pr->perm_rank >= 0) ksprintf(&s, ";PR=%d", pr->perm_rank); // ksprintf(&s, ";LRT3=%.3g", pr->lrt); ksprintf(&s, ";PCHI2=%.3g;PC2=%d,%d", q[1], q[2], pr->p_chi2); } if (has_I16 && a.is_tested) ksprintf(&s, ";PV4=%.2g,%.2g,%.2g,%.2g", a.p[0], a.p[1], a.p[2], a.p[3]); kputc('\0', &s); kputs(b->fmt, &s); kputc('\0', &s); free(b->str); b->m_str = s.m; b->l_str = s.l; b->str = s.s; b->qual = r < 1e-100? 999 : -4.343 * log(r); if (b->qual > 999) b->qual = 999; bcf_sync(b); if (!is_var) bcf_shrink_alt(b, 1); else if (!(flag&VC_KEEPALT)) bcf_shrink_alt(b, pr->rank0 < 2? 2 : pr->rank0+1); if (is_var && (flag&VC_CALL_GT)) { // call individual genotype int i, x, old_n_gi = b->n_gi; s.m = b->m_str; s.l = b->l_str - 1; s.s = b->str; kputs(":GT:GQ", &s); kputc('\0', &s); b->m_str = s.m; b->l_str = s.l; b->str = s.s; bcf_sync(b); for (i = 0; i < b->n_smpl; ++i) { x = bcf_p1_call_gt(pa, pr->f_exp, i); ((uint8_t*)b->gi[old_n_gi].data)[i] = (x&3) == 0? 1<<3|1 : (x&3) == 1? 1 : 0; ((uint8_t*)b->gi[old_n_gi+1].data)[i] = x>>2; } } return is_var; } static char **read_samples(const char *fn, int *_n) { gzFile fp; kstream_t *ks; kstring_t s; int dret, n = 0, max = 0; char **sam = 0; *_n = 0; s.l = s.m = 0; s.s = 0; fp = gzopen(fn, "r"); if (fp == 0) return 0; // fail to open file ks = ks_init(fp); while (ks_getuntil(ks, 0, &s, &dret) >= 0) { int l; if (max == n) { max = max? max<<1 : 4; sam = realloc(sam, sizeof(void*)*max); } l = s.l; sam[n] = malloc(s.l + 2); strcpy(sam[n], s.s); sam[n][l+1] = 2; // by default, diploid if (dret != '\n') { if (ks_getuntil(ks, 0, &s, &dret) >= 0) { // read ploidy, 1 or 2 int x = (int)s.s[0] - '0'; if (x == 1 || x == 2) sam[n][l+1] = x; else fprintf(stderr, "(%s) ploidy can only be 1 or 2; assume diploid\n", __func__); } if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); } ++n; } ks_destroy(ks); gzclose(fp); free(s.s); *_n = n; return sam; } static void write_header(bcf_hdr_t *h) { kstring_t str; str.l = h->l_txt? h->l_txt - 1 : 0; str.m = str.l + 1; str.s = h->txt; if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); // if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##INFO=\n", &str); if (!strstr(str.s, "##FORMAT=\n", &str); if (!strstr(str.s, "##FORMAT=\n", &str); if (!strstr(str.s, "##FORMAT=\n", &str); if (!strstr(str.s, "##FORMAT=\n", &str); if (!strstr(str.s, "##FORMAT=\n", &str); if (!strstr(str.s, "##FORMAT=\n", &str); h->l_txt = str.l + 1; h->txt = str.s; } double bcf_pair_freq(const bcf1_t *b0, const bcf1_t *b1, double f[4]); int bcfview(int argc, char *argv[]) { extern int bcf_2qcall(bcf_hdr_t *h, bcf1_t *b); extern void bcf_p1_indel_prior(bcf_p1aux_t *ma, double x); extern int bcf_fix_gt(bcf1_t *b); extern int bcf_anno_max(bcf1_t *b); extern int bcf_shuffle(bcf1_t *b, int seed); extern uint32_t *bcf_trio_prep(int is_x, int is_son); extern int bcf_trio_call(uint32_t *prep, const bcf1_t *b, int *llr, int64_t *gt); extern int bcf_pair_call(const bcf1_t *b); extern int bcf_min_diff(const bcf1_t *b); bcf_t *bp, *bout = 0; bcf1_t *b, *blast; int c, *seeds = 0; uint64_t n_processed = 0, qcnt[256]; viewconf_t vc; bcf_p1aux_t *p1 = 0; bcf_hdr_t *hin, *hout; int tid, begin, end; char moder[4], modew[4]; tid = begin = end = -1; memset(&vc, 0, sizeof(viewconf_t)); vc.prior_type = vc.n1 = -1; vc.theta = 1e-3; vc.pref = 0.5; vc.indel_frac = -1.; vc.n_perm = 0; vc.min_perm_p = 0.01; vc.min_smpl_frac = 0; vc.min_lrt = 1; memset(qcnt, 0, 8 * 256); while ((c = getopt(argc, argv, "FN1:l:cC:eHAGvbSuP:t:p:QgLi:IMs:D:U:X:d:T:Y")) >= 0) { switch (c) { case '1': vc.n1 = atoi(optarg); break; case 'l': vc.bed = bed_read(optarg); break; case 'D': vc.fn_dict = strdup(optarg); break; case 'F': vc.flag |= VC_FIX_PL; break; case 'N': vc.flag |= VC_ACGT_ONLY; break; case 'G': vc.flag |= VC_NO_GENO; break; case 'A': vc.flag |= VC_KEEPALT; break; case 'b': vc.flag |= VC_BCFOUT; break; case 'S': vc.flag |= VC_VCFIN; break; case 'c': vc.flag |= VC_CALL; break; case 'e': vc.flag |= VC_EM; break; case 'v': vc.flag |= VC_VARONLY | VC_CALL; break; case 'u': vc.flag |= VC_UNCOMP | VC_BCFOUT; break; case 'g': vc.flag |= VC_CALL_GT | VC_CALL; break; case 'I': vc.flag |= VC_NO_INDEL; break; case 'M': vc.flag |= VC_ANNO_MAX; break; case 'Y': vc.flag |= VC_QCNT; break; case 't': vc.theta = atof(optarg); break; case 'p': vc.pref = atof(optarg); break; case 'i': vc.indel_frac = atof(optarg); break; case 'Q': vc.flag |= VC_QCALL; break; case 'L': vc.flag |= VC_ADJLD; break; case 'U': vc.n_perm = atoi(optarg); break; case 'C': vc.min_lrt = atof(optarg); break; case 'X': vc.min_perm_p = atof(optarg); break; case 'd': vc.min_smpl_frac = atof(optarg); break; case 's': vc.subsam = read_samples(optarg, &vc.n_sub); vc.ploidy = calloc(vc.n_sub + 1, 1); for (tid = 0; tid < vc.n_sub; ++tid) vc.ploidy[tid] = vc.subsam[tid][strlen(vc.subsam[tid]) + 1]; tid = -1; break; case 'T': if (strcmp(optarg, "trioauto") == 0) vc.trio_aux = bcf_trio_prep(0, 0); else if (strcmp(optarg, "trioxd") == 0) vc.trio_aux = bcf_trio_prep(1, 0); else if (strcmp(optarg, "trioxs") == 0) vc.trio_aux = bcf_trio_prep(1, 1); else if (strcmp(optarg, "pair") == 0) vc.flag |= VC_PAIRCALL; else { fprintf(stderr, "[%s] Option '-T' can only take value trioauto, trioxd or trioxs.\n", __func__); return 1; } break; case 'P': if (strcmp(optarg, "full") == 0) vc.prior_type = MC_PTYPE_FULL; else if (strcmp(optarg, "cond2") == 0) vc.prior_type = MC_PTYPE_COND2; else if (strcmp(optarg, "flat") == 0) vc.prior_type = MC_PTYPE_FLAT; else vc.prior_file = strdup(optarg); break; } } if (argc == optind) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: bcftools view [options] [reg]\n\n"); fprintf(stderr, "Input/output options:\n\n"); fprintf(stderr, " -A keep all possible alternate alleles at variant sites\n"); fprintf(stderr, " -b output BCF instead of VCF\n"); fprintf(stderr, " -D FILE sequence dictionary for VCF->BCF conversion [null]\n"); fprintf(stderr, " -F PL generated by r921 or before (which generate old ordering)\n"); fprintf(stderr, " -G suppress all individual genotype information\n"); fprintf(stderr, " -l FILE list of sites (chr pos) or regions (BED) to output [all sites]\n"); fprintf(stderr, " -L calculate LD for adjacent sites\n"); fprintf(stderr, " -N skip sites where REF is not A/C/G/T\n"); fprintf(stderr, " -Q output the QCALL likelihood format\n"); fprintf(stderr, " -s FILE list of samples to use [all samples]\n"); fprintf(stderr, " -S input is VCF\n"); fprintf(stderr, " -u uncompressed BCF output (force -b)\n"); fprintf(stderr, "\nConsensus/variant calling options:\n\n"); fprintf(stderr, " -c SNP calling (force -e)\n"); fprintf(stderr, " -d FLOAT skip loci where less than FLOAT fraction of samples covered [0]\n"); fprintf(stderr, " -e likelihood based analyses\n"); fprintf(stderr, " -g call genotypes at variant sites (force -c)\n"); fprintf(stderr, " -i FLOAT indel-to-substitution ratio [%.4g]\n", vc.indel_frac); fprintf(stderr, " -I skip indels\n"); fprintf(stderr, " -p FLOAT variant if P(ref|D)BCF conversion please specify the sequence dictionary with -D\n", __func__); return 1; } if (vc.n1 <= 0) vc.n_perm = 0; // TODO: give a warning here! if (vc.n_perm > 0) { seeds = malloc(vc.n_perm * sizeof(int)); srand48(time(0)); for (c = 0; c < vc.n_perm; ++c) seeds[c] = lrand48(); } b = calloc(1, sizeof(bcf1_t)); blast = calloc(1, sizeof(bcf1_t)); strcpy(moder, "r"); if (!(vc.flag & VC_VCFIN)) strcat(moder, "b"); strcpy(modew, "w"); if (vc.flag & VC_BCFOUT) strcat(modew, "b"); if (vc.flag & VC_UNCOMP) strcat(modew, "u"); bp = vcf_open(argv[optind], moder); hin = hout = vcf_hdr_read(bp); if (vc.fn_dict && (vc.flag & VC_VCFIN)) vcf_dictread(bp, hin, vc.fn_dict); bout = vcf_open("-", modew); if (!(vc.flag & VC_QCALL)) { if (vc.n_sub) { vc.sublist = calloc(vc.n_sub, sizeof(int)); hout = bcf_hdr_subsam(hin, vc.n_sub, vc.subsam, vc.sublist); } if (vc.flag & VC_CALL) write_header(hout); vcf_hdr_write(bout, hout); } if (vc.flag & VC_CALL) { p1 = bcf_p1_init(hout->n_smpl, vc.ploidy); if (vc.prior_file) { if (bcf_p1_read_prior(p1, vc.prior_file) < 0) { fprintf(stderr, "[%s] fail to read the prior AFS.\n", __func__); return 1; } } else bcf_p1_init_prior(p1, vc.prior_type, vc.theta); if (vc.n1 > 0 && vc.min_lrt > 0.) { // set n1 bcf_p1_set_n1(p1, vc.n1); bcf_p1_init_subprior(p1, vc.prior_type, vc.theta); } if (vc.indel_frac > 0.) bcf_p1_indel_prior(p1, vc.indel_frac); // otherwise use the default indel_frac } if (optind + 1 < argc && !(vc.flag&VC_VCFIN)) { void *str2id = bcf_build_refhash(hout); if (bcf_parse_region(str2id, argv[optind+1], &tid, &begin, &end) >= 0) { bcf_idx_t *idx; idx = bcf_idx_load(argv[optind]); if (idx) { uint64_t off; off = bcf_idx_query(idx, tid, begin); if (off == 0) { fprintf(stderr, "[%s] no records in the query region.\n", __func__); return 1; // FIXME: a lot of memory leaks... } bgzf_seek(bp->fp, off, SEEK_SET); bcf_idx_destroy(idx); } } } while (vcf_read(bp, hin, b) > 0) { int is_indel, cons_llr = -1; int64_t cons_gt = -1; double em[10]; if ((vc.flag & VC_VARONLY) && strcmp(b->alt, "X") == 0) continue; if ((vc.flag & VC_VARONLY) && vc.min_smpl_frac > 0.) { extern int bcf_smpl_covered(const bcf1_t *b); int n = bcf_smpl_covered(b); if ((double)n / b->n_smpl < vc.min_smpl_frac) continue; } if (vc.n_sub) bcf_subsam(vc.n_sub, vc.sublist, b); if (vc.flag & VC_FIX_PL) bcf_fix_pl(b); is_indel = bcf_is_indel(b); if ((vc.flag & VC_NO_INDEL) && is_indel) continue; if ((vc.flag & VC_ACGT_ONLY) && !is_indel) { int x; if (b->ref[0] == 0 || b->ref[1] != 0) continue; x = toupper(b->ref[0]); if (x != 'A' && x != 'C' && x != 'G' && x != 'T') continue; } if (vc.bed && !bed_overlap(vc.bed, hin->ns[b->tid], b->pos, b->pos + strlen(b->ref))) continue; if (tid >= 0) { int l = strlen(b->ref); l = b->pos + (l > 0? l : 1); if (b->tid != tid || b->pos >= end) break; if (!(l > begin && end > b->pos)) continue; } ++n_processed; if ((vc.flag & VC_QCNT) && !is_indel) { // summarize the difference int x = bcf_min_diff(b); if (x > 255) x = 255; if (x >= 0) ++qcnt[x]; } if (vc.flag & VC_QCALL) { // output QCALL format; STOP here bcf_2qcall(hout, b); continue; } if (vc.trio_aux) // do trio calling bcf_trio_call(vc.trio_aux, b, &cons_llr, &cons_gt); else if (vc.flag & VC_PAIRCALL) cons_llr = bcf_pair_call(b); if (vc.flag & (VC_CALL|VC_ADJLD|VC_EM)) bcf_gl2pl(b); if (vc.flag & VC_EM) bcf_em1(b, vc.n1, 0x1ff, em); else { int i; for (i = 0; i < 9; ++i) em[i] = -1.; } if (vc.flag & VC_CALL) { // call variants bcf_p1rst_t pr; int calret = bcf_p1_cal(b, (em[7] >= 0 && em[7] < vc.min_lrt), p1, &pr); if (n_processed % 100000 == 0) { fprintf(stderr, "[%s] %ld sites processed.\n", __func__, (long)n_processed); bcf_p1_dump_afs(p1); } if (pr.p_ref >= vc.pref && (vc.flag & VC_VARONLY)) continue; if (vc.n_perm && vc.n1 > 0 && pr.p_chi2 < vc.min_perm_p) { // permutation test bcf_p1rst_t r; int i, n = 0; for (i = 0; i < vc.n_perm; ++i) { #ifdef BCF_PERM_LRT // LRT based permutation is much faster but less robust to artifacts double x[10]; bcf_shuffle(b, seeds[i]); bcf_em1(b, vc.n1, 1<<7, x); if (x[7] < em[7]) ++n; #else bcf_shuffle(b, seeds[i]); bcf_p1_cal(b, 1, p1, &r); if (pr.p_chi2 >= r.p_chi2) ++n; #endif } pr.perm_rank = n; } if (calret >= 0) update_bcf1(b, p1, &pr, vc.pref, vc.flag, em, cons_llr, cons_gt); } else if (vc.flag & VC_EM) update_bcf1(b, 0, 0, 0, vc.flag, em, cons_llr, cons_gt); if (vc.flag & VC_ADJLD) { // compute LD double f[4], r2; if ((r2 = bcf_pair_freq(blast, b, f)) >= 0) { kstring_t s; s.m = s.l = 0; s.s = 0; if (*b->info) kputc(';', &s); ksprintf(&s, "NEIR=%.3f;NEIF4=%.3f,%.3f,%.3f,%.3f", r2, f[0], f[1], f[2], f[3]); bcf_append_info(b, s.s, s.l); free(s.s); } bcf_cpy(blast, b); } if (vc.flag & VC_ANNO_MAX) bcf_anno_max(b); if (vc.flag & VC_NO_GENO) { // do not output GENO fields b->n_gi = 0; b->fmt[0] = '\0'; b->l_str = b->fmt - b->str + 1; } else bcf_fix_gt(b); vcf_write(bout, hout, b); } if (vc.prior_file) free(vc.prior_file); if (vc.flag & VC_CALL) bcf_p1_dump_afs(p1); if (hin != hout) bcf_hdr_destroy(hout); bcf_hdr_destroy(hin); bcf_destroy(b); bcf_destroy(blast); vcf_close(bp); vcf_close(bout); if (vc.fn_dict) free(vc.fn_dict); if (vc.ploidy) free(vc.ploidy); if (vc.trio_aux) free(vc.trio_aux); if (vc.n_sub) { int i; for (i = 0; i < vc.n_sub; ++i) free(vc.subsam[i]); free(vc.subsam); free(vc.sublist); } if (vc.bed) bed_destroy(vc.bed); if (vc.flag & VC_QCNT) for (c = 0; c < 256; ++c) fprintf(stderr, "QT\t%d\t%lld\n", c, (long long)qcnt[c]); if (seeds) free(seeds); if (p1) bcf_p1_destroy(p1); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/em.c000066400000000000000000000214311211610345200234220ustar00rootroot00000000000000#include #include #include #include "bcf.h" #include "kmin.h" static double g_q2p[256]; #define ITER_MAX 50 #define ITER_TRY 10 #define EPS 1e-5 extern double kf_gammaq(double, double); /* Generic routines */ // get the 3 genotype likelihoods static double *get_pdg3(const bcf1_t *b) { double *pdg; const uint8_t *PL = 0; int i, PL_len = 0; // initialize g_q2p if necessary if (g_q2p[0] == 0.) for (i = 0; i < 256; ++i) g_q2p[i] = pow(10., -i / 10.); // set PL and PL_len for (i = 0; i < b->n_gi; ++i) { if (b->gi[i].fmt == bcf_str2int("PL", 2)) { PL = (const uint8_t*)b->gi[i].data; PL_len = b->gi[i].len; break; } } if (i == b->n_gi) return 0; // no PL // fill pdg pdg = malloc(3 * b->n_smpl * sizeof(double)); for (i = 0; i < b->n_smpl; ++i) { const uint8_t *pi = PL + i * PL_len; double *p = pdg + i * 3; p[0] = g_q2p[pi[2]]; p[1] = g_q2p[pi[1]]; p[2] = g_q2p[pi[0]]; } return pdg; } // estimate site allele frequency in a very naive and inaccurate way static double est_freq(int n, const double *pdg) { int i, gcnt[3], tmp1; // get a rough estimate of the genotype frequency gcnt[0] = gcnt[1] = gcnt[2] = 0; for (i = 0; i < n; ++i) { const double *p = pdg + i * 3; if (p[0] != 1. || p[1] != 1. || p[2] != 1.) { int which = p[0] > p[1]? 0 : 1; which = p[which] > p[2]? which : 2; ++gcnt[which]; } } tmp1 = gcnt[0] + gcnt[1] + gcnt[2]; return (tmp1 == 0)? -1.0 : (.5 * gcnt[1] + gcnt[2]) / tmp1; } /* Single-locus EM */ typedef struct { int beg, end; const double *pdg; } minaux1_t; static double prob1(double f, void *data) { minaux1_t *a = (minaux1_t*)data; double p = 1., l = 0., f3[3]; int i; // printf("brent %lg\n", f); if (f < 0 || f > 1) return 1e300; f3[0] = (1.-f)*(1.-f); f3[1] = 2.*f*(1.-f); f3[2] = f*f; for (i = a->beg; i < a->end; ++i) { const double *pdg = a->pdg + i * 3; p *= pdg[0] * f3[0] + pdg[1] * f3[1] + pdg[2] * f3[2]; if (p < 1e-200) l -= log(p), p = 1.; } return l - log(p); } // one EM iteration for allele frequency estimate static double freq_iter(double *f, const double *_pdg, int beg, int end) { double f0 = *f, f3[3], err; int i; // printf("em %lg\n", *f); f3[0] = (1.-f0)*(1.-f0); f3[1] = 2.*f0*(1.-f0); f3[2] = f0*f0; for (i = beg, f0 = 0.; i < end; ++i) { const double *pdg = _pdg + i * 3; f0 += (pdg[1] * f3[1] + 2. * pdg[2] * f3[2]) / (pdg[0] * f3[0] + pdg[1] * f3[1] + pdg[2] * f3[2]); } f0 /= (end - beg) * 2; err = fabs(f0 - *f); *f = f0; return err; } /* The following function combines EM and Brent's method. When the signal from * the data is strong, EM is faster but sometimes, EM may converge very slowly. * When this happens, we switch to Brent's method. The idea is learned from * Rasmus Nielsen. */ static double freqml(double f0, int beg, int end, const double *pdg) { int i; double f; for (i = 0, f = f0; i < ITER_TRY; ++i) if (freq_iter(&f, pdg, beg, end) < EPS) break; if (i == ITER_TRY) { // haven't converged yet; try Brent's method minaux1_t a; a.beg = beg; a.end = end; a.pdg = pdg; kmin_brent(prob1, f0 == f? .5*f0 : f0, f, (void*)&a, EPS, &f); } return f; } // one EM iteration for genotype frequency estimate static double g3_iter(double g[3], const double *_pdg, int beg, int end) { double err, gg[3]; int i; gg[0] = gg[1] = gg[2] = 0.; // printf("%lg,%lg,%lg\n", g[0], g[1], g[2]); for (i = beg; i < end; ++i) { double sum, tmp[3]; const double *pdg = _pdg + i * 3; tmp[0] = pdg[0] * g[0]; tmp[1] = pdg[1] * g[1]; tmp[2] = pdg[2] * g[2]; sum = (tmp[0] + tmp[1] + tmp[2]) * (end - beg); gg[0] += tmp[0] / sum; gg[1] += tmp[1] / sum; gg[2] += tmp[2] / sum; } err = fabs(gg[0] - g[0]) > fabs(gg[1] - g[1])? fabs(gg[0] - g[0]) : fabs(gg[1] - g[1]); err = err > fabs(gg[2] - g[2])? err : fabs(gg[2] - g[2]); g[0] = gg[0]; g[1] = gg[1]; g[2] = gg[2]; return err; } // perform likelihood ratio test static double lk_ratio_test(int n, int n1, const double *pdg, double f3[3][3]) { double r; int i; for (i = 0, r = 1.; i < n1; ++i) { const double *p = pdg + i * 3; r *= (p[0] * f3[1][0] + p[1] * f3[1][1] + p[2] * f3[1][2]) / (p[0] * f3[0][0] + p[1] * f3[0][1] + p[2] * f3[0][2]); } for (; i < n; ++i) { const double *p = pdg + i * 3; r *= (p[0] * f3[2][0] + p[1] * f3[2][1] + p[2] * f3[2][2]) / (p[0] * f3[0][0] + p[1] * f3[0][1] + p[2] * f3[0][2]); } return r; } // x[0]: ref frequency // x[1..3]: alt-alt, alt-ref, ref-ref frequenc // x[4]: HWE P-value // x[5..6]: group1 freq, group2 freq // x[7]: 1-degree P-value // x[8]: 2-degree P-value int bcf_em1(const bcf1_t *b, int n1, int flag, double x[10]) { double *pdg; int i, n, n2; if (b->n_alleles < 2) return -1; // one allele only // initialization if (n1 < 0 || n1 > b->n_smpl) n1 = 0; if (flag & 1<<7) flag |= 7<<5; // compute group freq if LRT is required if (flag & 0xf<<1) flag |= 0xf<<1; n = b->n_smpl; n2 = n - n1; pdg = get_pdg3(b); if (pdg == 0) return -1; for (i = 0; i < 10; ++i) x[i] = -1.; // set to negative { if ((x[0] = est_freq(n, pdg)) < 0.) { free(pdg); return -1; // no data } x[0] = freqml(x[0], 0, n, pdg); } if (flag & (0xf<<1|3<<8)) { // estimate the genotype frequency and test HWE double *g = x + 1, f3[3], r; f3[0] = g[0] = (1 - x[0]) * (1 - x[0]); f3[1] = g[1] = 2 * x[0] * (1 - x[0]); f3[2] = g[2] = x[0] * x[0]; for (i = 0; i < ITER_MAX; ++i) if (g3_iter(g, pdg, 0, n) < EPS) break; // Hardy-Weinberg equilibrium (HWE) for (i = 0, r = 1.; i < n; ++i) { double *p = pdg + i * 3; r *= (p[0] * g[0] + p[1] * g[1] + p[2] * g[2]) / (p[0] * f3[0] + p[1] * f3[1] + p[2] * f3[2]); } x[4] = kf_gammaq(.5, log(r)); } if ((flag & 7<<5) && n1 > 0 && n1 < n) { // group frequency x[5] = freqml(x[0], 0, n1, pdg); x[6] = freqml(x[0], n1, n, pdg); } if ((flag & 1<<7) && n1 > 0 && n1 < n) { // 1-degree P-value double f[3], f3[3][3], tmp; f[0] = x[0]; f[1] = x[5]; f[2] = x[6]; for (i = 0; i < 3; ++i) f3[i][0] = (1-f[i])*(1-f[i]), f3[i][1] = 2*f[i]*(1-f[i]), f3[i][2] = f[i]*f[i]; tmp = log(lk_ratio_test(n, n1, pdg, f3)); if (tmp < 0) tmp = 0; x[7] = kf_gammaq(.5, tmp); } if ((flag & 3<<8) && n1 > 0 && n1 < n) { // 2-degree P-value double g[3][3], tmp; for (i = 0; i < 3; ++i) memcpy(g[i], x + 1, 3 * sizeof(double)); for (i = 0; i < ITER_MAX; ++i) if (g3_iter(g[1], pdg, 0, n1) < EPS) break; for (i = 0; i < ITER_MAX; ++i) if (g3_iter(g[2], pdg, n1, n) < EPS) break; tmp = log(lk_ratio_test(n, n1, pdg, g)); if (tmp < 0) tmp = 0; x[8] = kf_gammaq(1., tmp); } // free free(pdg); return 0; } /* Two-locus EM (LD) */ #define _G1(h, k) ((h>>1&1) + (k>>1&1)) #define _G2(h, k) ((h&1) + (k&1)) // 0: the previous site; 1: the current site static int pair_freq_iter(int n, double *pdg[2], double f[4]) { double ff[4]; int i, k, h; // printf("%lf,%lf,%lf,%lf\n", f[0], f[1], f[2], f[3]); memset(ff, 0, 4 * sizeof(double)); for (i = 0; i < n; ++i) { double *p[2], sum, tmp; p[0] = pdg[0] + i * 3; p[1] = pdg[1] + i * 3; for (k = 0, sum = 0.; k < 4; ++k) for (h = 0; h < 4; ++h) sum += f[k] * f[h] * p[0][_G1(k,h)] * p[1][_G2(k,h)]; for (k = 0; k < 4; ++k) { tmp = f[0] * (p[0][_G1(0,k)] * p[1][_G2(0,k)] + p[0][_G1(k,0)] * p[1][_G2(k,0)]) + f[1] * (p[0][_G1(1,k)] * p[1][_G2(1,k)] + p[0][_G1(k,1)] * p[1][_G2(k,1)]) + f[2] * (p[0][_G1(2,k)] * p[1][_G2(2,k)] + p[0][_G1(k,2)] * p[1][_G2(k,2)]) + f[3] * (p[0][_G1(3,k)] * p[1][_G2(3,k)] + p[0][_G1(k,3)] * p[1][_G2(k,3)]); ff[k] += f[k] * tmp / sum; } } for (k = 0; k < 4; ++k) f[k] = ff[k] / (2 * n); return 0; } double bcf_pair_freq(const bcf1_t *b0, const bcf1_t *b1, double f[4]) { const bcf1_t *b[2]; int i, j, n_smpl; double *pdg[2], flast[4], r, f0[2]; // initialize others if (b0->n_smpl != b1->n_smpl) return -1; // different number of samples n_smpl = b0->n_smpl; b[0] = b0; b[1] = b1; f[0] = f[1] = f[2] = f[3] = -1.; if (b[0]->n_alleles < 2 || b[1]->n_alleles < 2) return -1; // one allele only pdg[0] = get_pdg3(b0); pdg[1] = get_pdg3(b1); if (pdg[0] == 0 || pdg[1] == 0) { free(pdg[0]); free(pdg[1]); return -1; } // set the initial value f0[0] = est_freq(n_smpl, pdg[0]); f0[1] = est_freq(n_smpl, pdg[1]); f[0] = (1 - f0[0]) * (1 - f0[1]); f[3] = f0[0] * f0[1]; f[1] = (1 - f0[0]) * f0[1]; f[2] = f0[0] * (1 - f0[1]); // iteration for (j = 0; j < ITER_MAX; ++j) { double eps = 0; memcpy(flast, f, 4 * sizeof(double)); pair_freq_iter(n_smpl, pdg, f); for (i = 0; i < 4; ++i) { double x = fabs(f[i] - flast[i]); if (x > eps) eps = x; } if (eps < EPS) break; } // free free(pdg[0]); free(pdg[1]); { // calculate r^2 double p[2], q[2], D; p[0] = f[0] + f[1]; q[0] = 1 - p[0]; p[1] = f[0] + f[2]; q[1] = 1 - p[1]; D = f[0] * f[3] - f[1] * f[2]; r = sqrt(D * D / (p[0] * p[1] * q[0] * q[1])); // printf("R(%lf,%lf,%lf,%lf)=%lf\n", f[0], f[1], f[2], f[3], r); if (isnan(r)) r = -1.; } return r; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/fet.c000066400000000000000000000060621211610345200236020ustar00rootroot00000000000000#include #include /* This program is implemented with ideas from this web page: * * http://www.langsrud.com/fisher.htm */ // log\binom{n}{k} static double lbinom(int n, int k) { if (k == 0 || n == k) return 0; return lgamma(n+1) - lgamma(k+1) - lgamma(n-k+1); } // n11 n12 | n1_ // n21 n22 | n2_ //-----------+---- // n_1 n_2 | n // hypergeometric distribution static double hypergeo(int n11, int n1_, int n_1, int n) { return exp(lbinom(n1_, n11) + lbinom(n-n1_, n_1-n11) - lbinom(n, n_1)); } typedef struct { int n11, n1_, n_1, n; double p; } hgacc_t; // incremental version of hypergenometric distribution static double hypergeo_acc(int n11, int n1_, int n_1, int n, hgacc_t *aux) { if (n1_ || n_1 || n) { aux->n11 = n11; aux->n1_ = n1_; aux->n_1 = n_1; aux->n = n; } else { // then only n11 changed; the rest fixed if (n11%11 && n11 + aux->n - aux->n1_ - aux->n_1) { if (n11 == aux->n11 + 1) { // incremental aux->p *= (double)(aux->n1_ - aux->n11) / n11 * (aux->n_1 - aux->n11) / (n11 + aux->n - aux->n1_ - aux->n_1); aux->n11 = n11; return aux->p; } if (n11 == aux->n11 - 1) { // incremental aux->p *= (double)aux->n11 / (aux->n1_ - n11) * (aux->n11 + aux->n - aux->n1_ - aux->n_1) / (aux->n_1 - n11); aux->n11 = n11; return aux->p; } } aux->n11 = n11; } aux->p = hypergeo(aux->n11, aux->n1_, aux->n_1, aux->n); return aux->p; } double kt_fisher_exact(int n11, int n12, int n21, int n22, double *_left, double *_right, double *two) { int i, j, max, min; double p, q, left, right; hgacc_t aux; int n1_, n_1, n; n1_ = n11 + n12; n_1 = n11 + n21; n = n11 + n12 + n21 + n22; // calculate n1_, n_1 and n max = (n_1 < n1_) ? n_1 : n1_; // max n11, for right tail min = n1_ + n_1 - n; if (min < 0) min = 0; // min n11, for left tail *two = *_left = *_right = 1.; if (min == max) return 1.; // no need to do test q = hypergeo_acc(n11, n1_, n_1, n, &aux); // the probability of the current table // left tail p = hypergeo_acc(min, 0, 0, 0, &aux); for (left = 0., i = min + 1; p < 0.99999999 * q; ++i) // loop until underflow left += p, p = hypergeo_acc(i, 0, 0, 0, &aux); --i; if (p < 1.00000001 * q) left += p; else --i; // right tail p = hypergeo_acc(max, 0, 0, 0, &aux); for (right = 0., j = max - 1; p < 0.99999999 * q; --j) // loop until underflow right += p, p = hypergeo_acc(j, 0, 0, 0, &aux); ++j; if (p < 1.00000001 * q) right += p; else ++j; // two-tail *two = left + right; if (*two > 1.) *two = 1.; // adjust left and right if (abs(i - n11) < abs(j - n11)) right = 1. - left + q; else left = 1.0 - right + q; *_left = left; *_right = right; return q; } #ifdef FET_MAIN #include int main(int argc, char *argv[]) { char id[1024]; int n11, n12, n21, n22; double left, right, twotail, prob; while (scanf("%s%d%d%d%d", id, &n11, &n12, &n21, &n22) == 5) { prob = kt_fisher_exact(n11, n12, n21, n22, &left, &right, &twotail); printf("%s\t%d\t%d\t%d\t%d\t%.6g\t%.6g\t%.6g\t%.6g\n", id, n11, n12, n21, n22, prob, left, right, twotail); } return 0; } #endif genometools-1.5.1/src/external/samtools-0.1.18/bcftools/index.c000066400000000000000000000200421211610345200241250ustar00rootroot00000000000000#include #include #include #include "bam_endian.h" #include "kstring.h" #include "bcf.h" #ifdef _USE_KNETFILE #include "knetfile.h" #endif #define TAD_LIDX_SHIFT 13 typedef struct { int32_t n, m; uint64_t *offset; } bcf_lidx_t; struct __bcf_idx_t { int32_t n; bcf_lidx_t *index2; }; /************ * indexing * ************/ static inline void insert_offset2(bcf_lidx_t *index2, int _beg, int _end, uint64_t offset) { int i, beg, end; beg = _beg >> TAD_LIDX_SHIFT; end = (_end - 1) >> TAD_LIDX_SHIFT; if (index2->m < end + 1) { int old_m = index2->m; index2->m = end + 1; kroundup32(index2->m); index2->offset = (uint64_t*)realloc(index2->offset, index2->m * 8); memset(index2->offset + old_m, 0, 8 * (index2->m - old_m)); } if (beg == end) { if (index2->offset[beg] == 0) index2->offset[beg] = offset; } else { for (i = beg; i <= end; ++i) if (index2->offset[i] == 0) index2->offset[i] = offset; } if (index2->n < end + 1) index2->n = end + 1; } bcf_idx_t *bcf_idx_core(bcf_t *bp, bcf_hdr_t *h) { bcf_idx_t *idx; int32_t last_coor, last_tid; uint64_t last_off; kstring_t *str; BGZF *fp = bp->fp; bcf1_t *b; int ret; b = calloc(1, sizeof(bcf1_t)); str = calloc(1, sizeof(kstring_t)); idx = (bcf_idx_t*)calloc(1, sizeof(bcf_idx_t)); idx->n = h->n_ref; idx->index2 = calloc(h->n_ref, sizeof(bcf_lidx_t)); last_tid = 0xffffffffu; last_off = bgzf_tell(fp); last_coor = 0xffffffffu; while ((ret = bcf_read(bp, h, b)) > 0) { int end, tmp; if (last_tid != b->tid) { // change of chromosomes last_tid = b->tid; } else if (last_coor > b->pos) { fprintf(stderr, "[bcf_idx_core] the input is out of order\n"); free(str->s); free(str); free(idx); bcf_destroy(b); return 0; } tmp = strlen(b->ref); end = b->pos + (tmp > 0? tmp : 1); insert_offset2(&idx->index2[b->tid], b->pos, end, last_off); last_off = bgzf_tell(fp); last_coor = b->pos; } free(str->s); free(str); bcf_destroy(b); return idx; } void bcf_idx_destroy(bcf_idx_t *idx) { int i; if (idx == 0) return; for (i = 0; i < idx->n; ++i) free(idx->index2[i].offset); free(idx->index2); free(idx); } /****************** * index file I/O * ******************/ void bcf_idx_save(const bcf_idx_t *idx, BGZF *fp) { int32_t i, ti_is_be; ti_is_be = bam_is_big_endian(); bgzf_write(fp, "BCI\4", 4); if (ti_is_be) { uint32_t x = idx->n; bgzf_write(fp, bam_swap_endian_4p(&x), 4); } else bgzf_write(fp, &idx->n, 4); for (i = 0; i < idx->n; ++i) { bcf_lidx_t *index2 = idx->index2 + i; // write linear index (index2) if (ti_is_be) { int x = index2->n; bgzf_write(fp, bam_swap_endian_4p(&x), 4); } else bgzf_write(fp, &index2->n, 4); if (ti_is_be) { // big endian int x; for (x = 0; (int)x < index2->n; ++x) bam_swap_endian_8p(&index2->offset[x]); bgzf_write(fp, index2->offset, 8 * index2->n); for (x = 0; (int)x < index2->n; ++x) bam_swap_endian_8p(&index2->offset[x]); } else bgzf_write(fp, index2->offset, 8 * index2->n); } } static bcf_idx_t *bcf_idx_load_core(BGZF *fp) { int i, ti_is_be; char magic[4]; bcf_idx_t *idx; ti_is_be = bam_is_big_endian(); if (fp == 0) { fprintf(stderr, "[%s] fail to load index.\n", __func__); return 0; } bgzf_read(fp, magic, 4); if (strncmp(magic, "BCI\4", 4)) { fprintf(stderr, "[%s] wrong magic number.\n", __func__); return 0; } idx = (bcf_idx_t*)calloc(1, sizeof(bcf_idx_t)); bgzf_read(fp, &idx->n, 4); if (ti_is_be) bam_swap_endian_4p(&idx->n); idx->index2 = (bcf_lidx_t*)calloc(idx->n, sizeof(bcf_lidx_t)); for (i = 0; i < idx->n; ++i) { bcf_lidx_t *index2 = idx->index2 + i; int j; bgzf_read(fp, &index2->n, 4); if (ti_is_be) bam_swap_endian_4p(&index2->n); index2->m = index2->n; index2->offset = (uint64_t*)calloc(index2->m, 8); bgzf_read(fp, index2->offset, index2->n * 8); if (ti_is_be) for (j = 0; j < index2->n; ++j) bam_swap_endian_8p(&index2->offset[j]); } return idx; } bcf_idx_t *bcf_idx_load_local(const char *fnidx) { BGZF *fp; fp = bgzf_open(fnidx, "r"); if (fp) { bcf_idx_t *idx = bcf_idx_load_core(fp); bgzf_close(fp); return idx; } else return 0; } #ifdef _USE_KNETFILE static void download_from_remote(const char *url) { const int buf_size = 1 * 1024 * 1024; char *fn; FILE *fp; uint8_t *buf; knetFile *fp_remote; int l; if (strstr(url, "ftp://") != url && strstr(url, "http://") != url) return; l = strlen(url); for (fn = (char*)url + l - 1; fn >= url; --fn) if (*fn == '/') break; ++fn; // fn now points to the file name fp_remote = knet_open(url, "r"); if (fp_remote == 0) { fprintf(stderr, "[download_from_remote] fail to open remote file.\n"); return; } if ((fp = fopen(fn, "w")) == 0) { fprintf(stderr, "[download_from_remote] fail to create file in the working directory.\n"); knet_close(fp_remote); return; } buf = (uint8_t*)calloc(buf_size, 1); while ((l = knet_read(fp_remote, buf, buf_size)) != 0) fwrite(buf, 1, l, fp); free(buf); fclose(fp); knet_close(fp_remote); } #else static void download_from_remote(const char *url) { return; } #endif static char *get_local_version(const char *fn) { struct stat sbuf; char *fnidx = (char*)calloc(strlen(fn) + 5, 1); strcat(strcpy(fnidx, fn), ".bci"); if ((strstr(fnidx, "ftp://") == fnidx || strstr(fnidx, "http://") == fnidx)) { char *p, *url; int l = strlen(fnidx); for (p = fnidx + l - 1; p >= fnidx; --p) if (*p == '/') break; url = fnidx; fnidx = strdup(p + 1); if (stat(fnidx, &sbuf) == 0) { free(url); return fnidx; } fprintf(stderr, "[%s] downloading the index file...\n", __func__); download_from_remote(url); free(url); } if (stat(fnidx, &sbuf) == 0) return fnidx; free(fnidx); return 0; } bcf_idx_t *bcf_idx_load(const char *fn) { bcf_idx_t *idx; char *fname = get_local_version(fn); if (fname == 0) return 0; idx = bcf_idx_load_local(fname); free(fname); return idx; } int bcf_idx_build2(const char *fn, const char *_fnidx) { char *fnidx; BGZF *fpidx; bcf_t *bp; bcf_idx_t *idx; bcf_hdr_t *h; if ((bp = bcf_open(fn, "r")) == 0) { fprintf(stderr, "[bcf_idx_build2] fail to open the BAM file.\n"); return -1; } h = bcf_hdr_read(bp); idx = bcf_idx_core(bp, h); bcf_close(bp); if (_fnidx == 0) { fnidx = (char*)calloc(strlen(fn) + 5, 1); strcpy(fnidx, fn); strcat(fnidx, ".bci"); } else fnidx = strdup(_fnidx); fpidx = bgzf_open(fnidx, "w"); if (fpidx == 0) { fprintf(stderr, "[bcf_idx_build2] fail to create the index file.\n"); free(fnidx); return -1; } bcf_idx_save(idx, fpidx); bcf_idx_destroy(idx); bgzf_close(fpidx); free(fnidx); return 0; } int bcf_idx_build(const char *fn) { return bcf_idx_build2(fn, 0); } /******************************************** * parse a region in the format chr:beg-end * ********************************************/ int bcf_parse_region(void *str2id, const char *str, int *tid, int *begin, int *end) { char *s, *p; int i, l, k; l = strlen(str); p = s = (char*)malloc(l+1); /* squeeze out "," */ for (i = k = 0; i != l; ++i) if (str[i] != ',' && !isspace(str[i])) s[k++] = str[i]; s[k] = 0; for (i = 0; i != k; ++i) if (s[i] == ':') break; s[i] = 0; if ((*tid = bcf_str2id(str2id, s)) < 0) { free(s); return -1; } if (i == k) { /* dump the whole sequence */ *begin = 0; *end = 1<<29; free(s); return 0; } for (p = s + i + 1; i != k; ++i) if (s[i] == '-') break; *begin = atoi(p); if (i < k) { p = s + i + 1; *end = atoi(p); } else *end = 1<<29; if (*begin > 0) --*begin; free(s); if (*begin > *end) return -1; return 0; } /******************************* * retrieve a specified region * *******************************/ uint64_t bcf_idx_query(const bcf_idx_t *idx, int tid, int beg) { uint64_t min_off, *offset; int i; if (beg < 0) beg = 0; offset = idx->index2[tid].offset; for (i = beg>>TAD_LIDX_SHIFT; i < idx->index2[tid].n && offset[i] == 0; ++i); min_off = (i == idx->index2[tid].n)? offset[idx->index2[tid].n-1] : offset[i]; return min_off; } int bcf_main_index(int argc, char *argv[]) { if (argc == 1) { fprintf(stderr, "Usage: bcftools index \n"); return 1; } bcf_idx_build(argv[1]); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/kfunc.c000066400000000000000000000115401211610345200241270ustar00rootroot00000000000000#include /* Log gamma function * \log{\Gamma(z)} * AS245, 2nd algorithm, http://lib.stat.cmu.edu/apstat/245 */ double kf_lgamma(double z) { double x = 0; x += 0.1659470187408462e-06 / (z+7); x += 0.9934937113930748e-05 / (z+6); x -= 0.1385710331296526 / (z+5); x += 12.50734324009056 / (z+4); x -= 176.6150291498386 / (z+3); x += 771.3234287757674 / (z+2); x -= 1259.139216722289 / (z+1); x += 676.5203681218835 / z; x += 0.9999999999995183; return log(x) - 5.58106146679532777 - z + (z-0.5) * log(z+6.5); } /* complementary error function * \frac{2}{\sqrt{\pi}} \int_x^{\infty} e^{-t^2} dt * AS66, 2nd algorithm, http://lib.stat.cmu.edu/apstat/66 */ double kf_erfc(double x) { const double p0 = 220.2068679123761; const double p1 = 221.2135961699311; const double p2 = 112.0792914978709; const double p3 = 33.912866078383; const double p4 = 6.37396220353165; const double p5 = .7003830644436881; const double p6 = .03526249659989109; const double q0 = 440.4137358247522; const double q1 = 793.8265125199484; const double q2 = 637.3336333788311; const double q3 = 296.5642487796737; const double q4 = 86.78073220294608; const double q5 = 16.06417757920695; const double q6 = 1.755667163182642; const double q7 = .08838834764831844; double expntl, z, p; z = fabs(x) * M_SQRT2; if (z > 37.) return x > 0.? 0. : 2.; expntl = exp(z * z * - .5); if (z < 10. / M_SQRT2) // for small z p = expntl * ((((((p6 * z + p5) * z + p4) * z + p3) * z + p2) * z + p1) * z + p0) / (((((((q7 * z + q6) * z + q5) * z + q4) * z + q3) * z + q2) * z + q1) * z + q0); else p = expntl / 2.506628274631001 / (z + 1. / (z + 2. / (z + 3. / (z + 4. / (z + .65))))); return x > 0.? 2. * p : 2. * (1. - p); } /* The following computes regularized incomplete gamma functions. * Formulas are taken from Wiki, with additional input from Numerical * Recipes in C (for modified Lentz's algorithm) and AS245 * (http://lib.stat.cmu.edu/apstat/245). * * A good online calculator is available at: * * http://www.danielsoper.com/statcalc/calc23.aspx * * It calculates upper incomplete gamma function, which equals * kf_gammaq(s,z)*tgamma(s). */ #define KF_GAMMA_EPS 1e-14 #define KF_TINY 1e-290 // regularized lower incomplete gamma function, by series expansion static double _kf_gammap(double s, double z) { double sum, x; int k; for (k = 1, sum = x = 1.; k < 100; ++k) { sum += (x *= z / (s + k)); if (x / sum < KF_GAMMA_EPS) break; } return exp(s * log(z) - z - kf_lgamma(s + 1.) + log(sum)); } // regularized upper incomplete gamma function, by continued fraction static double _kf_gammaq(double s, double z) { int j; double C, D, f; f = 1. + z - s; C = f; D = 0.; // Modified Lentz's algorithm for computing continued fraction // See Numerical Recipes in C, 2nd edition, section 5.2 for (j = 1; j < 100; ++j) { double a = j * (s - j), b = (j<<1) + 1 + z - s, d; D = b + a * D; if (D < KF_TINY) D = KF_TINY; C = b + a / C; if (C < KF_TINY) C = KF_TINY; D = 1. / D; d = C * D; f *= d; if (fabs(d - 1.) < KF_GAMMA_EPS) break; } return exp(s * log(z) - z - kf_lgamma(s) - log(f)); } double kf_gammap(double s, double z) { return z <= 1. || z < s? _kf_gammap(s, z) : 1. - _kf_gammaq(s, z); } double kf_gammaq(double s, double z) { return z <= 1. || z < s? 1. - _kf_gammap(s, z) : _kf_gammaq(s, z); } /* Regularized incomplete beta function. The method is taken from * Numerical Recipe in C, 2nd edition, section 6.4. The following web * page calculates the incomplete beta function, which equals * kf_betai(a,b,x) * gamma(a) * gamma(b) / gamma(a+b): * * http://www.danielsoper.com/statcalc/calc36.aspx */ static double kf_betai_aux(double a, double b, double x) { double C, D, f; int j; if (x == 0.) return 0.; if (x == 1.) return 1.; f = 1.; C = f; D = 0.; // Modified Lentz's algorithm for computing continued fraction for (j = 1; j < 200; ++j) { double aa, d; int m = j>>1; aa = (j&1)? -(a + m) * (a + b + m) * x / ((a + 2*m) * (a + 2*m + 1)) : m * (b - m) * x / ((a + 2*m - 1) * (a + 2*m)); D = 1. + aa * D; if (D < KF_TINY) D = KF_TINY; C = 1. + aa / C; if (C < KF_TINY) C = KF_TINY; D = 1. / D; d = C * D; f *= d; if (fabs(d - 1.) < KF_GAMMA_EPS) break; } return exp(kf_lgamma(a+b) - kf_lgamma(a) - kf_lgamma(b) + a * log(x) + b * log(1.-x)) / a / f; } double kf_betai(double a, double b, double x) { return x < (a + 1.) / (a + b + 2.)? kf_betai_aux(a, b, x) : 1. - kf_betai_aux(b, a, 1. - x); } #ifdef KF_MAIN #include int main(int argc, char *argv[]) { double x = 5.5, y = 3; double a, b; printf("erfc(%lg): %lg, %lg\n", x, erfc(x), kf_erfc(x)); printf("upper-gamma(%lg,%lg): %lg\n", x, y, kf_gammaq(y, x)*tgamma(y)); a = 2; b = 2; x = 0.5; printf("incomplete-beta(%lg,%lg,%lg): %lg\n", a, b, x, kf_betai(a, b, x) / exp(kf_lgamma(a+b) - kf_lgamma(a) - kf_lgamma(b))); return 0; } #endif genometools-1.5.1/src/external/samtools-0.1.18/bcftools/kmin.c000066400000000000000000000161451211610345200237650ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008, 2010 by Attractive Chaos Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Hooke-Jeeves algorithm for nonlinear minimization Based on the pseudocodes by Bell and Pike (CACM 9(9):684-685), and the revision by Tomlin and Smith (CACM 12(11):637-638). Both of the papers are comments on Kaupe's Algorithm 178 "Direct Search" (ACM 6(6):313-314). The original algorithm was designed by Hooke and Jeeves (ACM 8:212-229). This program is further revised according to Johnson's implementation at Netlib (opt/hooke.c). Hooke-Jeeves algorithm is very simple and it works quite well on a few examples. However, it might fail to converge due to its heuristic nature. A possible improvement, as is suggested by Johnson, may be to choose a small r at the beginning to quickly approach to the minimum and a large r at later step to hit the minimum. */ #include #include #include #include "kmin.h" static double __kmin_hj_aux(kmin_f func, int n, double *x1, void *data, double fx1, double *dx, int *n_calls) { int k, j = *n_calls; double ftmp; for (k = 0; k != n; ++k) { x1[k] += dx[k]; ftmp = func(n, x1, data); ++j; if (ftmp < fx1) fx1 = ftmp; else { /* search the opposite direction */ dx[k] = 0.0 - dx[k]; x1[k] += dx[k] + dx[k]; ftmp = func(n, x1, data); ++j; if (ftmp < fx1) fx1 = ftmp; else x1[k] -= dx[k]; /* back to the original x[k] */ } } *n_calls = j; return fx1; /* here: fx1=f(n,x1) */ } double kmin_hj(kmin_f func, int n, double *x, void *data, double r, double eps, int max_calls) { double fx, fx1, *x1, *dx, radius; int k, n_calls = 0; x1 = (double*)calloc(n, sizeof(double)); dx = (double*)calloc(n, sizeof(double)); for (k = 0; k != n; ++k) { /* initial directions, based on MGJ */ dx[k] = fabs(x[k]) * r; if (dx[k] == 0) dx[k] = r; } radius = r; fx1 = fx = func(n, x, data); ++n_calls; for (;;) { memcpy(x1, x, n * sizeof(double)); /* x1 = x */ fx1 = __kmin_hj_aux(func, n, x1, data, fx, dx, &n_calls); while (fx1 < fx) { for (k = 0; k != n; ++k) { double t = x[k]; dx[k] = x1[k] > x[k]? fabs(dx[k]) : 0.0 - fabs(dx[k]); x[k] = x1[k]; x1[k] = x1[k] + x1[k] - t; } fx = fx1; if (n_calls >= max_calls) break; fx1 = func(n, x1, data); ++n_calls; fx1 = __kmin_hj_aux(func, n, x1, data, fx1, dx, &n_calls); if (fx1 >= fx) break; for (k = 0; k != n; ++k) if (fabs(x1[k] - x[k]) > .5 * fabs(dx[k])) break; if (k == n) break; } if (radius >= eps) { if (n_calls >= max_calls) break; radius *= r; for (k = 0; k != n; ++k) dx[k] *= r; } else break; /* converge */ } free(x1); free(dx); return fx1; } // I copied this function somewhere several years ago with some of my modifications, but I forgot the source. double kmin_brent(kmin1_f func, double a, double b, void *data, double tol, double *xmin) { double bound, u, r, q, fu, tmp, fa, fb, fc, c; const double gold1 = 1.6180339887; const double gold2 = 0.3819660113; const double tiny = 1e-20; const int max_iter = 100; double e, d, w, v, mid, tol1, tol2, p, eold, fv, fw; int iter; fa = func(a, data); fb = func(b, data); if (fb > fa) { // swap, such that f(a) > f(b) tmp = a; a = b; b = tmp; tmp = fa; fa = fb; fb = tmp; } c = b + gold1 * (b - a), fc = func(c, data); // golden section extrapolation while (fb > fc) { bound = b + 100.0 * (c - b); // the farthest point where we want to go r = (b - a) * (fb - fc); q = (b - c) * (fb - fa); if (fabs(q - r) < tiny) { // avoid 0 denominator tmp = q > r? tiny : 0.0 - tiny; } else tmp = q - r; u = b - ((b - c) * q - (b - a) * r) / (2.0 * tmp); // u is the parabolic extrapolation point if ((b > u && u > c) || (b < u && u < c)) { // u lies between b and c fu = func(u, data); if (fu < fc) { // (b,u,c) bracket the minimum a = b; b = u; fa = fb; fb = fu; break; } else if (fu > fb) { // (a,b,u) bracket the minimum c = u; fc = fu; break; } u = c + gold1 * (c - b); fu = func(u, data); // golden section extrapolation } else if ((c > u && u > bound) || (c < u && u < bound)) { // u lies between c and bound fu = func(u, data); if (fu < fc) { // fb > fc > fu b = c; c = u; u = c + gold1 * (c - b); fb = fc; fc = fu; fu = func(u, data); } else { // (b,c,u) bracket the minimum a = b; b = c; c = u; fa = fb; fb = fc; fc = fu; break; } } else if ((u > bound && bound > c) || (u < bound && bound < c)) { // u goes beyond the bound u = bound; fu = func(u, data); } else { // u goes the other way around, use golden section extrapolation u = c + gold1 * (c - b); fu = func(u, data); } a = b; b = c; c = u; fa = fb; fb = fc; fc = fu; } if (a > c) u = a, a = c, c = u; // swap // now, afb and fb tol1) { // related to parabolic interpolation r = (b - w) * (fb - fv); q = (b - v) * (fb - fw); p = (b - v) * q - (b - w) * r; q = 2.0 * (q - r); if (q > 0.0) p = 0.0 - p; else q = 0.0 - q; eold = e; e = d; if (fabs(p) >= fabs(0.5 * q * eold) || p <= q * (a - b) || p >= q * (c - b)) { d = gold2 * (e = (b >= mid ? a - b : c - b)); } else { d = p / q; u = b + d; // actual parabolic interpolation happens here if (u - a < tol2 || c - u < tol2) d = (mid > b)? tol1 : 0.0 - tol1; } } else d = gold2 * (e = (b >= mid ? a - b : c - b)); // golden section interpolation u = fabs(d) >= tol1 ? b + d : b + (d > 0.0? tol1 : -tol1); fu = func(u, data); if (fu <= fb) { // u is the minimum point so far if (u >= b) a = b; else c = b; v = w; w = b; b = u; fv = fw; fw = fb; fb = fu; } else { // adjust (a,c) and (u,v,w) if (u < b) a = u; else c = u; if (fu <= fw || w == b) { v = w; w = u; fv = fw; fw = fu; } else if (fu <= fv || v == b || v == w) { v = u; fv = fu; } } } *xmin = b; return fb; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/kmin.h000066400000000000000000000031231211610345200237620ustar00rootroot00000000000000/* Copyright (c) 2008, 2010 by Attractive Chaos Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef KMIN_H #define KMIN_H #define KMIN_RADIUS 0.5 #define KMIN_EPS 1e-7 #define KMIN_MAXCALL 50000 typedef double (*kmin_f)(int, double*, void*); typedef double (*kmin1_f)(double, void*); #ifdef __cplusplus extern "C" { #endif double kmin_hj(kmin_f func, int n, double *x, void *data, double r, double eps, int max_calls); double kmin_brent(kmin1_f func, double a, double b, void *data, double tol, double *xmin); #ifdef __cplusplus } #endif #endif genometools-1.5.1/src/external/samtools-0.1.18/bcftools/main.c000066400000000000000000000120201211610345200237370ustar00rootroot00000000000000#include #include #include #include #include "bcf.h" #include "kseq.h" KSTREAM_INIT(gzFile, gzread, 0x10000) int bcfview(int argc, char *argv[]); int bcf_main_index(int argc, char *argv[]); #define BUF_SIZE 0x10000 int bcf_cat(int n, char * const *fn) { int i; bcf_t *out; uint8_t *buf; buf = malloc(BUF_SIZE); out = bcf_open("-", "w"); for (i = 0; i < n; ++i) { bcf_t *in; bcf_hdr_t *h; off_t end; struct stat s; in = bcf_open(fn[i], "r"); h = bcf_hdr_read(in); if (i == 0) bcf_hdr_write(out, h); bcf_hdr_destroy(h); #ifdef _USE_KNETFILE fstat(knet_fileno(in->fp->x.fpr), &s); end = s.st_size - 28; while (knet_tell(in->fp->x.fpr) < end) { int size = knet_tell(in->fp->x.fpr) + BUF_SIZE < end? BUF_SIZE : end - knet_tell(in->fp->x.fpr); knet_read(in->fp->x.fpr, buf, size); fwrite(buf, 1, size, out->fp->x.fpw); } #else abort(); // FIXME: not implemented #endif bcf_close(in); } bcf_close(out); free(buf); return 0; } extern double bcf_pair_freq(const bcf1_t *b0, const bcf1_t *b1, double f[4]); int bcf_main_ldpair(int argc, char *argv[]) { bcf_t *fp; bcf_hdr_t *h; bcf1_t *b0, *b1; bcf_idx_t *idx; kstring_t str; void *str2id; gzFile fplist; kstream_t *ks; int dret, lineno = 0; if (argc < 3) { fprintf(stderr, "Usage: bcftools ldpair \n"); return 1; } fplist = gzopen(argv[2], "rb"); ks = ks_init(fplist); memset(&str, 0, sizeof(kstring_t)); fp = bcf_open(argv[1], "rb"); h = bcf_hdr_read(fp); str2id = bcf_build_refhash(h); idx = bcf_idx_load(argv[1]); if (idx == 0) { fprintf(stderr, "[%s] No bcf index is found. Abort!\n", __func__); return 1; } b0 = calloc(1, sizeof(bcf1_t)); b1 = calloc(1, sizeof(bcf1_t)); while (ks_getuntil(ks, '\n', &str, &dret) >= 0) { char *p, *q; int k; int tid0 = -1, tid1 = -1, pos0 = -1, pos1 = -1; ++lineno; for (p = q = str.s, k = 0; *p; ++p) { if (*p == ' ' || *p == '\t') { *p = '\0'; if (k == 0) tid0 = bcf_str2id(str2id, q); else if (k == 1) pos0 = atoi(q) - 1; else if (k == 2) tid1 = strcmp(q, "=")? bcf_str2id(str2id, q) : tid0; else if (k == 3) pos1 = atoi(q) - 1; q = p + 1; ++k; } } if (k == 3) pos1 = atoi(q) - 1; if (tid0 >= 0 && tid1 >= 0 && pos0 >= 0 && pos1 >= 0) { uint64_t off; double r, f[4]; off = bcf_idx_query(idx, tid0, pos0); bgzf_seek(fp->fp, off, SEEK_SET); while (bcf_read(fp, h, b0) >= 0 && b0->pos != pos0); off = bcf_idx_query(idx, tid1, pos1); bgzf_seek(fp->fp, off, SEEK_SET); while (bcf_read(fp, h, b1) >= 0 && b1->pos != pos1); r = bcf_pair_freq(b0, b1, f); r *= r; printf("%s\t%d\t%s\t%d\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\n", h->ns[tid0], pos0+1, h->ns[tid1], pos1+1, r, f[0], f[1], f[2], f[3]); } //else fprintf(stderr, "[%s] Parse error at line %d.\n", __func__, lineno); } bcf_destroy(b0); bcf_destroy(b1); bcf_idx_destroy(idx); bcf_str2id_destroy(str2id); bcf_hdr_destroy(h); bcf_close(fp); free(str.s); ks_destroy(ks); gzclose(fplist); return 0; } int bcf_main_ld(int argc, char *argv[]) { bcf_t *fp; bcf_hdr_t *h; bcf1_t **b, *b0; int i, j, m, n; double f[4]; if (argc == 1) { fprintf(stderr, "Usage: bcftools ld \n"); return 1; } fp = bcf_open(argv[1], "rb"); h = bcf_hdr_read(fp); // read the entire BCF m = n = 0; b = 0; b0 = calloc(1, sizeof(bcf1_t)); while (bcf_read(fp, h, b0) >= 0) { if (m == n) { m = m? m<<1 : 16; b = realloc(b, sizeof(void*) * m); } b[n] = calloc(1, sizeof(bcf1_t)); bcf_cpy(b[n++], b0); } bcf_destroy(b0); // compute pair-wise r^2 printf("%d\n", n); // the number of loci for (i = 0; i < n; ++i) { printf("%s:%d", h->ns[b[i]->tid], b[i]->pos + 1); for (j = 0; j < i; ++j) { double r = bcf_pair_freq(b[i], b[j], f); printf("\t%.3f", r*r); } printf("\t1.000\n"); } // free for (i = 0; i < n; ++i) bcf_destroy(b[i]); free(b); bcf_hdr_destroy(h); bcf_close(fp); return 0; } int main(int argc, char *argv[]) { if (argc == 1) { fprintf(stderr, "\n"); fprintf(stderr, "Program: bcftools (Tools for data in the VCF/BCF formats)\n"); fprintf(stderr, "Version: %s\n\n", BCF_VERSION); fprintf(stderr, "Usage: bcftools \n\n"); fprintf(stderr, "Command: view print, extract, convert and call SNPs from BCF\n"); fprintf(stderr, " index index BCF\n"); fprintf(stderr, " cat concatenate BCFs\n"); fprintf(stderr, " ld compute all-pair r^2\n"); fprintf(stderr, " ldpair compute r^2 between requested pairs\n"); fprintf(stderr, "\n"); return 1; } if (strcmp(argv[1], "view") == 0) return bcfview(argc-1, argv+1); else if (strcmp(argv[1], "index") == 0) return bcf_main_index(argc-1, argv+1); else if (strcmp(argv[1], "ld") == 0) return bcf_main_ld(argc-1, argv+1); else if (strcmp(argv[1], "ldpair") == 0) return bcf_main_ldpair(argc-1, argv+1); else if (strcmp(argv[1], "cat") == 0) return bcf_cat(argc-2, argv+2); // cat is different ... else { fprintf(stderr, "[main] Unrecognized command.\n"); return 1; } return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/mut.c000066400000000000000000000073501211610345200236320ustar00rootroot00000000000000#include #include #include "bcf.h" #define MAX_GENO 359 int8_t seq_bitcnt[] = { 4, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 }; char *seq_nt16rev = "XACMGRSVTWYHKDBN"; uint32_t *bcf_trio_prep(int is_x, int is_son) { int i, j, k, n, map[10]; uint32_t *ret; ret = calloc(MAX_GENO, 4); for (i = 0, k = 0; i < 4; ++i) for (j = i; j < 4; ++j) map[k++] = 1<n_smpl != 3) return -1; // not a trio for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == bcf_str2int("PL", 2)) break; if (i == b->n_gi) return -1; // no PL gl10 = alloca(10 * b->n_smpl); if (bcf_gl10(b, gl10) < 0) { if (bcf_gl10_indel(b, gl10) < 0) return -1; } PL = b->gi + i; for (i = 0, k = 0; i < 4; ++i) for (j = i; j < 4; ++j) map[k++] = seq_nt16rev[1<data)[j * PL->len] != 0) break; if (j < 3) { // we need to go through the complex procedure uint8_t *g[3]; int minc = 1<<30, minc_j = -1, minf = 0, gtf = 0, gtc = 0; g[0] = gl10; g[1] = gl10 + 10; g[2] = gl10 + 20; for (j = 1; j <= (int)prep[0]; ++j) { // compute LK with constraint int sum = g[0][prep[j]&0xff] + g[1][prep[j]>>8&0xff] + g[2][prep[j]>>16&0xff]; if (sum < minc) minc = sum, minc_j = j; } gtc |= map[prep[minc_j]&0xff]; gtc |= map[prep[minc_j]>>8&0xff]<<8; gtc |= map[prep[minc_j]>>16]<<16; for (j = 0; j < 3; ++j) { // compute LK without constraint int min = 1<<30, min_k = -1; for (k = 0; k < 10; ++k) if (g[j][k] < min) min = g[j][k], min_k = k; gtf |= map[min_k]<<(j*8); minf += min; } *llr = minc - minf; *gt = (int64_t)gtc<<32 | gtf; } else *llr = 0, *gt = -1; return 0; } int bcf_pair_call(const bcf1_t *b) { int i, j, k; const bcf_ginfo_t *PL; if (b->n_smpl != 2) return -1; // not a pair for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == bcf_str2int("PL", 2)) break; if (i == b->n_gi) return -1; // no PL PL = b->gi + i; for (j = 0; j < 2; ++j) // check if ref hom is the most probable in all members if (((uint8_t*)PL->data)[j * PL->len] != 0) break; if (j < 2) { // we need to go through the complex procedure uint8_t *g[2]; int minc = 1<<30, minf = 0; g[0] = PL->data; g[1] = (uint8_t*)PL->data + PL->len; for (j = 0; j < PL->len; ++j) // compute LK with constraint minc = minc < g[0][j] + g[1][j]? minc : g[0][j] + g[1][j]; for (j = 0; j < 2; ++j) { // compute LK without constraint int min = 1<<30; for (k = 0; k < PL->len; ++k) min = min < g[j][k]? min : g[j][k]; minf += min; } return minc - minf; } else return 0; } int bcf_min_diff(const bcf1_t *b) { int i, min = 1<<30; const bcf_ginfo_t *PL; for (i = 0; i < b->n_gi; ++i) if (b->gi[i].fmt == bcf_str2int("PL", 2)) break; if (i == b->n_gi) return -1; // no PL PL = b->gi + i; for (i = 0; i < b->n_smpl; ++i) { int m1, m2, j; const uint8_t *p = (uint8_t*)PL->data; m1 = m2 = 1<<30; for (j = 0; j < PL->len; ++j) { if ((int)p[j] < m1) m2 = m1, m1 = p[j]; else if ((int)p[j] < m2) m2 = p[j]; } min = min < m2 - m1? min : m2 - m1; } return min; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/prob1.c000066400000000000000000000436511211610345200240540ustar00rootroot00000000000000#include #include #include #include #include #include #include "prob1.h" #include "kseq.h" KSTREAM_INIT(gzFile, gzread, 16384) #define MC_MAX_EM_ITER 16 #define MC_EM_EPS 1e-5 #define MC_DEF_INDEL 0.15 unsigned char seq_nt4_table[256] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 /*'-'*/, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; struct __bcf_p1aux_t { int n, M, n1, is_indel; uint8_t *ploidy; // haploid or diploid ONLY double *q2p, *pdg; // pdg -> P(D|g) double *phi, *phi_indel; double *z, *zswap; // aux for afs double *z1, *z2, *phi1, *phi2; // only calculated when n1 is set double **hg; // hypergeometric distribution double *lf; // log factorial double t, t1, t2; double *afs, *afs1; // afs: accumulative AFS; afs1: site posterior distribution const uint8_t *PL; // point to PL int PL_len; }; void bcf_p1_indel_prior(bcf_p1aux_t *ma, double x) { int i; for (i = 0; i < ma->M; ++i) ma->phi_indel[i] = ma->phi[i] * x; ma->phi_indel[ma->M] = 1. - ma->phi[ma->M] * x; } static void init_prior(int type, double theta, int M, double *phi) { int i; if (type == MC_PTYPE_COND2) { for (i = 0; i <= M; ++i) phi[i] = 2. * (i + 1) / (M + 1) / (M + 2); } else if (type == MC_PTYPE_FLAT) { for (i = 0; i <= M; ++i) phi[i] = 1. / (M + 1); } else { double sum; for (i = 0, sum = 0.; i < M; ++i) sum += (phi[i] = theta / (M - i)); phi[M] = 1. - sum; } } void bcf_p1_init_prior(bcf_p1aux_t *ma, int type, double theta) { init_prior(type, theta, ma->M, ma->phi); bcf_p1_indel_prior(ma, MC_DEF_INDEL); } void bcf_p1_init_subprior(bcf_p1aux_t *ma, int type, double theta) { if (ma->n1 <= 0 || ma->n1 >= ma->M) return; init_prior(type, theta, 2*ma->n1, ma->phi1); init_prior(type, theta, 2*(ma->n - ma->n1), ma->phi2); } int bcf_p1_read_prior(bcf_p1aux_t *ma, const char *fn) { gzFile fp; kstring_t s; kstream_t *ks; long double sum; int dret, k; memset(&s, 0, sizeof(kstring_t)); fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); ks = ks_init(fp); memset(ma->phi, 0, sizeof(double) * (ma->M + 1)); while (ks_getuntil(ks, '\n', &s, &dret) >= 0) { if (strstr(s.s, "[afs] ") == s.s) { char *p = s.s + 6; for (k = 0; k <= ma->M; ++k) { int x; double y; x = strtol(p, &p, 10); if (x != k && (errno == EINVAL || errno == ERANGE)) return -1; ++p; y = strtod(p, &p); if (y == 0. && (errno == EINVAL || errno == ERANGE)) return -1; ma->phi[ma->M - k] += y; } } } ks_destroy(ks); gzclose(fp); free(s.s); for (sum = 0., k = 0; k <= ma->M; ++k) sum += ma->phi[k]; fprintf(stderr, "[prior]"); for (k = 0; k <= ma->M; ++k) ma->phi[k] /= sum; for (k = 0; k <= ma->M; ++k) fprintf(stderr, " %d:%.3lg", k, ma->phi[ma->M - k]); fputc('\n', stderr); for (sum = 0., k = 1; k < ma->M; ++k) sum += ma->phi[ma->M - k] * (2.* k * (ma->M - k) / ma->M / (ma->M - 1)); fprintf(stderr, "[%s] heterozygosity=%lf, ", __func__, (double)sum); for (sum = 0., k = 1; k <= ma->M; ++k) sum += k * ma->phi[ma->M - k] / ma->M; fprintf(stderr, "theta=%lf\n", (double)sum); bcf_p1_indel_prior(ma, MC_DEF_INDEL); return 0; } bcf_p1aux_t *bcf_p1_init(int n, uint8_t *ploidy) { bcf_p1aux_t *ma; int i; ma = calloc(1, sizeof(bcf_p1aux_t)); ma->n1 = -1; ma->n = n; ma->M = 2 * n; if (ploidy) { ma->ploidy = malloc(n); memcpy(ma->ploidy, ploidy, n); for (i = 0, ma->M = 0; i < n; ++i) ma->M += ploidy[i]; if (ma->M == 2 * n) { free(ma->ploidy); ma->ploidy = 0; } } ma->q2p = calloc(256, sizeof(double)); ma->pdg = calloc(3 * ma->n, sizeof(double)); ma->phi = calloc(ma->M + 1, sizeof(double)); ma->phi_indel = calloc(ma->M + 1, sizeof(double)); ma->phi1 = calloc(ma->M + 1, sizeof(double)); ma->phi2 = calloc(ma->M + 1, sizeof(double)); ma->z = calloc(ma->M + 1, sizeof(double)); ma->zswap = calloc(ma->M + 1, sizeof(double)); ma->z1 = calloc(ma->M + 1, sizeof(double)); // actually we do not need this large ma->z2 = calloc(ma->M + 1, sizeof(double)); ma->afs = calloc(ma->M + 1, sizeof(double)); ma->afs1 = calloc(ma->M + 1, sizeof(double)); ma->lf = calloc(ma->M + 1, sizeof(double)); for (i = 0; i < 256; ++i) ma->q2p[i] = pow(10., -i / 10.); for (i = 0; i <= ma->M; ++i) ma->lf[i] = lgamma(i + 1); bcf_p1_init_prior(ma, MC_PTYPE_FULL, 1e-3); // the simplest prior return ma; } int bcf_p1_set_n1(bcf_p1aux_t *b, int n1) { if (n1 == 0 || n1 >= b->n) return -1; if (b->M != b->n * 2) { fprintf(stderr, "[%s] unable to set `n1' when there are haploid samples.\n", __func__); return -1; } b->n1 = n1; return 0; } void bcf_p1_destroy(bcf_p1aux_t *ma) { if (ma) { int k; free(ma->lf); if (ma->hg && ma->n1 > 0) { for (k = 0; k <= 2*ma->n1; ++k) free(ma->hg[k]); free(ma->hg); } free(ma->ploidy); free(ma->q2p); free(ma->pdg); free(ma->phi); free(ma->phi_indel); free(ma->phi1); free(ma->phi2); free(ma->z); free(ma->zswap); free(ma->z1); free(ma->z2); free(ma->afs); free(ma->afs1); free(ma); } } static int cal_pdg(const bcf1_t *b, bcf_p1aux_t *ma) { int i, j; long *p, tmp; p = alloca(b->n_alleles * sizeof(long)); memset(p, 0, sizeof(long) * b->n_alleles); for (j = 0; j < ma->n; ++j) { const uint8_t *pi = ma->PL + j * ma->PL_len; double *pdg = ma->pdg + j * 3; pdg[0] = ma->q2p[pi[2]]; pdg[1] = ma->q2p[pi[1]]; pdg[2] = ma->q2p[pi[0]]; for (i = 0; i < b->n_alleles; ++i) p[i] += (int)pi[(i+1)*(i+2)/2-1]; } for (i = 0; i < b->n_alleles; ++i) p[i] = p[i]<<4 | i; for (i = 1; i < b->n_alleles; ++i) // insertion sort for (j = i; j > 0 && p[j] < p[j-1]; --j) tmp = p[j], p[j] = p[j-1], p[j-1] = tmp; for (i = b->n_alleles - 1; i >= 0; --i) if ((p[i]&0xf) == 0) break; return i; } int bcf_p1_call_gt(const bcf_p1aux_t *ma, double f0, int k) { double sum, g[3]; double max, f3[3], *pdg = ma->pdg + k * 3; int q, i, max_i, ploidy; ploidy = ma->ploidy? ma->ploidy[k] : 2; if (ploidy == 2) { f3[0] = (1.-f0)*(1.-f0); f3[1] = 2.*f0*(1.-f0); f3[2] = f0*f0; } else { f3[0] = 1. - f0; f3[1] = 0; f3[2] = f0; } for (i = 0, sum = 0.; i < 3; ++i) sum += (g[i] = pdg[i] * f3[i]); for (i = 0, max = -1., max_i = 0; i < 3; ++i) { g[i] /= sum; if (g[i] > max) max = g[i], max_i = i; } max = 1. - max; if (max < 1e-308) max = 1e-308; q = (int)(-4.343 * log(max) + .499); if (q > 99) q = 99; return q<<2|max_i; } #define TINY 1e-20 static void mc_cal_y_core(bcf_p1aux_t *ma, int beg) { double *z[2], *tmp, *pdg; int _j, last_min, last_max; assert(beg == 0 || ma->M == ma->n*2); z[0] = ma->z; z[1] = ma->zswap; pdg = ma->pdg; memset(z[0], 0, sizeof(double) * (ma->M + 1)); memset(z[1], 0, sizeof(double) * (ma->M + 1)); z[0][0] = 1.; last_min = last_max = 0; ma->t = 0.; if (ma->M == ma->n * 2) { int M = 0; for (_j = beg; _j < ma->n; ++_j) { int k, j = _j - beg, _min = last_min, _max = last_max, M0; double p[3], sum; M0 = M; M += 2; pdg = ma->pdg + _j * 3; p[0] = pdg[0]; p[1] = 2. * pdg[1]; p[2] = pdg[2]; for (; _min < _max && z[0][_min] < TINY; ++_min) z[0][_min] = z[1][_min] = 0.; for (; _max > _min && z[0][_max] < TINY; --_max) z[0][_max] = z[1][_max] = 0.; _max += 2; if (_min == 0) k = 0, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k]; if (_min <= 1) k = 1, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1]; for (k = _min < 2? 2 : _min; k <= _max; ++k) z[1][k] = (M0-k+1)*(M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1] + k*(k-1)* p[2] * z[0][k-2]; for (k = _min, sum = 0.; k <= _max; ++k) sum += z[1][k]; ma->t += log(sum / (M * (M - 1.))); for (k = _min; k <= _max; ++k) z[1][k] /= sum; if (_min >= 1) z[1][_min-1] = 0.; if (_min >= 2) z[1][_min-2] = 0.; if (j < ma->n - 1) z[1][_max+1] = z[1][_max+2] = 0.; if (_j == ma->n1 - 1) { // set pop1; ma->n1==-1 when unset ma->t1 = ma->t; memcpy(ma->z1, z[1], sizeof(double) * (ma->n1 * 2 + 1)); } tmp = z[0]; z[0] = z[1]; z[1] = tmp; last_min = _min; last_max = _max; } //for (_j = 0; _j < last_min; ++_j) z[0][_j] = 0.; // TODO: are these necessary? //for (_j = last_max + 1; _j < ma->M; ++_j) z[0][_j] = 0.; } else { // this block is very similar to the block above; these two might be merged in future int j, M = 0; for (j = 0; j < ma->n; ++j) { int k, M0, _min = last_min, _max = last_max; double p[3], sum; pdg = ma->pdg + j * 3; for (; _min < _max && z[0][_min] < TINY; ++_min) z[0][_min] = z[1][_min] = 0.; for (; _max > _min && z[0][_max] < TINY; --_max) z[0][_max] = z[1][_max] = 0.; M0 = M; M += ma->ploidy[j]; if (ma->ploidy[j] == 1) { p[0] = pdg[0]; p[1] = pdg[2]; _max++; if (_min == 0) k = 0, z[1][k] = (M0+1-k) * p[0] * z[0][k]; for (k = _min < 1? 1 : _min; k <= _max; ++k) z[1][k] = (M0+1-k) * p[0] * z[0][k] + k * p[1] * z[0][k-1]; for (k = _min, sum = 0.; k <= _max; ++k) sum += z[1][k]; ma->t += log(sum / M); for (k = _min; k <= _max; ++k) z[1][k] /= sum; if (_min >= 1) z[1][_min-1] = 0.; if (j < ma->n - 1) z[1][_max+1] = 0.; } else if (ma->ploidy[j] == 2) { p[0] = pdg[0]; p[1] = 2 * pdg[1]; p[2] = pdg[2]; _max += 2; if (_min == 0) k = 0, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k]; if (_min <= 1) k = 1, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1]; for (k = _min < 2? 2 : _min; k <= _max; ++k) z[1][k] = (M0-k+1)*(M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1] + k*(k-1)* p[2] * z[0][k-2]; for (k = _min, sum = 0.; k <= _max; ++k) sum += z[1][k]; ma->t += log(sum / (M * (M - 1.))); for (k = _min; k <= _max; ++k) z[1][k] /= sum; if (_min >= 1) z[1][_min-1] = 0.; if (_min >= 2) z[1][_min-2] = 0.; if (j < ma->n - 1) z[1][_max+1] = z[1][_max+2] = 0.; } tmp = z[0]; z[0] = z[1]; z[1] = tmp; last_min = _min; last_max = _max; } } if (z[0] != ma->z) memcpy(ma->z, z[0], sizeof(double) * (ma->M + 1)); } static void mc_cal_y(bcf_p1aux_t *ma) { if (ma->n1 > 0 && ma->n1 < ma->n && ma->M == ma->n * 2) { // NB: ma->n1 is ineffective when there are haploid samples int k; long double x; memset(ma->z1, 0, sizeof(double) * (2 * ma->n1 + 1)); memset(ma->z2, 0, sizeof(double) * (2 * (ma->n - ma->n1) + 1)); ma->t1 = ma->t2 = 0.; mc_cal_y_core(ma, ma->n1); ma->t2 = ma->t; memcpy(ma->z2, ma->z, sizeof(double) * (2 * (ma->n - ma->n1) + 1)); mc_cal_y_core(ma, 0); // rescale z x = expl(ma->t - (ma->t1 + ma->t2)); for (k = 0; k <= ma->M; ++k) ma->z[k] *= x; } else mc_cal_y_core(ma, 0); } #define CONTRAST_TINY 1e-30 extern double kf_gammaq(double s, double z); // incomplete gamma function for chi^2 test static inline double chi2_test(int a, int b, int c, int d) { double x, z; x = (double)(a+b) * (c+d) * (b+d) * (a+c); if (x == 0.) return 1; z = a * d - b * c; return kf_gammaq(.5, .5 * z * z * (a+b+c+d) / x); } // chi2=(a+b+c+d)(ad-bc)^2/[(a+b)(c+d)(a+c)(b+d)] static inline double contrast2_aux(const bcf_p1aux_t *p1, double sum, int k1, int k2, double x[3]) { double p = p1->phi[k1+k2] * p1->z1[k1] * p1->z2[k2] / sum * p1->hg[k1][k2]; int n1 = p1->n1, n2 = p1->n - p1->n1; if (p < CONTRAST_TINY) return -1; if (.5*k1/n1 < .5*k2/n2) x[1] += p; else if (.5*k1/n1 > .5*k2/n2) x[2] += p; else x[0] += p; return p * chi2_test(k1, k2, (n1<<1) - k1, (n2<<1) - k2); } static double contrast2(bcf_p1aux_t *p1, double ret[3]) { int k, k1, k2, k10, k20, n1, n2; double sum; // get n1 and n2 n1 = p1->n1; n2 = p1->n - p1->n1; if (n1 <= 0 || n2 <= 0) return 0.; if (p1->hg == 0) { // initialize the hypergeometric distribution /* NB: the hg matrix may take a lot of memory when there are many samples. There is a way to avoid precomputing this matrix, but it is slower and quite intricate. The following computation in this block can be accelerated with a similar strategy, but perhaps this is not a serious concern for now. */ double tmp = lgamma(2*(n1+n2)+1) - (lgamma(2*n1+1) + lgamma(2*n2+1)); p1->hg = calloc(2*n1+1, sizeof(void*)); for (k1 = 0; k1 <= 2*n1; ++k1) { p1->hg[k1] = calloc(2*n2+1, sizeof(double)); for (k2 = 0; k2 <= 2*n2; ++k2) p1->hg[k1][k2] = exp(lgamma(k1+k2+1) + lgamma(p1->M-k1-k2+1) - (lgamma(k1+1) + lgamma(k2+1) + lgamma(2*n1-k1+1) + lgamma(2*n2-k2+1) + tmp)); } } { // compute long double suml = 0; for (k = 0; k <= p1->M; ++k) suml += p1->phi[k] * p1->z[k]; sum = suml; } { // get the max k1 and k2 double max; int max_k; for (k = 0, max = 0, max_k = -1; k <= 2*n1; ++k) { double x = p1->phi1[k] * p1->z1[k]; if (x > max) max = x, max_k = k; } k10 = max_k; for (k = 0, max = 0, max_k = -1; k <= 2*n2; ++k) { double x = p1->phi2[k] * p1->z2[k]; if (x > max) max = x, max_k = k; } k20 = max_k; } { // We can do the following with one nested loop, but that is an O(N^2) thing. The following code block is much faster for large N. double x[3], y; long double z = 0., L[2]; x[0] = x[1] = x[2] = 0; L[0] = L[1] = 0; for (k1 = k10; k1 >= 0; --k1) { for (k2 = k20; k2 >= 0; --k2) { if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; else z += y; } for (k2 = k20 + 1; k2 <= 2*n2; ++k2) { if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; else z += y; } } ret[0] = x[0]; ret[1] = x[1]; ret[2] = x[2]; x[0] = x[1] = x[2] = 0; for (k1 = k10 + 1; k1 <= 2*n1; ++k1) { for (k2 = k20; k2 >= 0; --k2) { if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; else z += y; } for (k2 = k20 + 1; k2 <= 2*n2; ++k2) { if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; else z += y; } } ret[0] += x[0]; ret[1] += x[1]; ret[2] += x[2]; if (ret[0] + ret[1] + ret[2] < 0.95) { // in case of bad things happened ret[0] = ret[1] = ret[2] = 0; L[0] = L[1] = 0; for (k1 = 0, z = 0.; k1 <= 2*n1; ++k1) for (k2 = 0; k2 <= 2*n2; ++k2) if ((y = contrast2_aux(p1, sum, k1, k2, ret)) >= 0) z += y; if (ret[0] + ret[1] + ret[2] < 0.95) // It seems that this may be caused by floating point errors. I do not really understand why... z = 1.0, ret[0] = ret[1] = ret[2] = 1./3; } return (double)z; } } static double mc_cal_afs(bcf_p1aux_t *ma, double *p_ref_folded, double *p_var_folded) { int k; long double sum = 0., sum2; double *phi = ma->is_indel? ma->phi_indel : ma->phi; memset(ma->afs1, 0, sizeof(double) * (ma->M + 1)); mc_cal_y(ma); // compute AFS for (k = 0, sum = 0.; k <= ma->M; ++k) sum += (long double)phi[k] * ma->z[k]; for (k = 0; k <= ma->M; ++k) { ma->afs1[k] = phi[k] * ma->z[k] / sum; if (isnan(ma->afs1[k]) || isinf(ma->afs1[k])) return -1.; } // compute folded variant probability for (k = 0, sum = 0.; k <= ma->M; ++k) sum += (long double)(phi[k] + phi[ma->M - k]) / 2. * ma->z[k]; for (k = 1, sum2 = 0.; k < ma->M; ++k) sum2 += (long double)(phi[k] + phi[ma->M - k]) / 2. * ma->z[k]; *p_var_folded = sum2 / sum; *p_ref_folded = (phi[k] + phi[ma->M - k]) / 2. * (ma->z[ma->M] + ma->z[0]) / sum; // the expected frequency for (k = 0, sum = 0.; k <= ma->M; ++k) { ma->afs[k] += ma->afs1[k]; sum += k * ma->afs1[k]; } return sum / ma->M; } int bcf_p1_cal(const bcf1_t *b, int do_contrast, bcf_p1aux_t *ma, bcf_p1rst_t *rst) { int i, k; long double sum = 0.; ma->is_indel = bcf_is_indel(b); rst->perm_rank = -1; // set PL and PL_len for (i = 0; i < b->n_gi; ++i) { if (b->gi[i].fmt == bcf_str2int("PL", 2)) { ma->PL = (uint8_t*)b->gi[i].data; ma->PL_len = b->gi[i].len; break; } } if (i == b->n_gi) return -1; // no PL if (b->n_alleles < 2) return -1; // FIXME: find a better solution // rst->rank0 = cal_pdg(b, ma); rst->f_exp = mc_cal_afs(ma, &rst->p_ref_folded, &rst->p_var_folded); rst->p_ref = ma->afs1[ma->M]; for (k = 0, sum = 0.; k < ma->M; ++k) sum += ma->afs1[k]; rst->p_var = (double)sum; { // compute the allele count double max = -1; rst->ac = -1; for (k = 0; k <= ma->M; ++k) if (max < ma->z[k]) max = ma->z[k], rst->ac = k; rst->ac = ma->M - rst->ac; } // calculate f_flat and f_em for (k = 0, sum = 0.; k <= ma->M; ++k) sum += (long double)ma->z[k]; rst->f_flat = 0.; for (k = 0; k <= ma->M; ++k) { double p = ma->z[k] / sum; rst->f_flat += k * p; } rst->f_flat /= ma->M; { // estimate equal-tail credible interval (95% level) int l, h; double p; for (i = 0, p = 0.; i <= ma->M; ++i) if (p + ma->afs1[i] > 0.025) break; else p += ma->afs1[i]; l = i; for (i = ma->M, p = 0.; i >= 0; --i) if (p + ma->afs1[i] > 0.025) break; else p += ma->afs1[i]; h = i; rst->cil = (double)(ma->M - h) / ma->M; rst->cih = (double)(ma->M - l) / ma->M; } if (ma->n1 > 0) { // compute LRT double max0, max1, max2; for (k = 0, max0 = -1; k <= ma->M; ++k) if (max0 < ma->z[k]) max0 = ma->z[k]; for (k = 0, max1 = -1; k <= ma->n1 * 2; ++k) if (max1 < ma->z1[k]) max1 = ma->z1[k]; for (k = 0, max2 = -1; k <= ma->M - ma->n1 * 2; ++k) if (max2 < ma->z2[k]) max2 = ma->z2[k]; rst->lrt = log(max1 * max2 / max0); rst->lrt = rst->lrt < 0? 1 : kf_gammaq(.5, rst->lrt); } else rst->lrt = -1.0; rst->cmp[0] = rst->cmp[1] = rst->cmp[2] = rst->p_chi2 = -1.0; if (do_contrast && rst->p_var > 0.5) // skip contrast2() if the locus is a strong non-variant rst->p_chi2 = contrast2(ma, rst->cmp); return 0; } void bcf_p1_dump_afs(bcf_p1aux_t *ma) { int k; fprintf(stderr, "[afs]"); for (k = 0; k <= ma->M; ++k) fprintf(stderr, " %d:%.3lf", k, ma->afs[ma->M - k]); fprintf(stderr, "\n"); memset(ma->afs, 0, sizeof(double) * (ma->M + 1)); } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/prob1.h000066400000000000000000000023141211610345200240500ustar00rootroot00000000000000#ifndef BCF_PROB1_H #define BCF_PROB1_H #include "bcf.h" struct __bcf_p1aux_t; typedef struct __bcf_p1aux_t bcf_p1aux_t; typedef struct { int rank0, perm_rank; // NB: perm_rank is always set to -1 by bcf_p1_cal() int ac; // ML alternative allele count double f_exp, f_flat, p_ref_folded, p_ref, p_var_folded, p_var; double cil, cih; double cmp[3], p_chi2, lrt; // used by contrast2() } bcf_p1rst_t; #define MC_PTYPE_FULL 1 #define MC_PTYPE_COND2 2 #define MC_PTYPE_FLAT 3 #ifdef __cplusplus extern "C" { #endif bcf_p1aux_t *bcf_p1_init(int n, uint8_t *ploidy); void bcf_p1_init_prior(bcf_p1aux_t *ma, int type, double theta); void bcf_p1_init_subprior(bcf_p1aux_t *ma, int type, double theta); void bcf_p1_destroy(bcf_p1aux_t *ma); int bcf_p1_cal(const bcf1_t *b, int do_contrast, bcf_p1aux_t *ma, bcf_p1rst_t *rst); int bcf_p1_call_gt(const bcf_p1aux_t *ma, double f0, int k); void bcf_p1_dump_afs(bcf_p1aux_t *ma); int bcf_p1_read_prior(bcf_p1aux_t *ma, const char *fn); int bcf_p1_set_n1(bcf_p1aux_t *b, int n1); void bcf_p1_set_folded(bcf_p1aux_t *p1a); // only effective when set_n1() is not called int bcf_em1(const bcf1_t *b, int n1, int flag, double x[10]); #ifdef __cplusplus } #endif #endif genometools-1.5.1/src/external/samtools-0.1.18/bcftools/vcf.c000066400000000000000000000153171211610345200236050ustar00rootroot00000000000000#include #include #include #include #include "bcf.h" #include "kstring.h" #include "kseq.h" KSTREAM_INIT(gzFile, gzread, 4096) typedef struct { gzFile fp; FILE *fpout; kstream_t *ks; void *refhash; kstring_t line; int max_ref; } vcf_t; bcf_hdr_t *vcf_hdr_read(bcf_t *bp) { kstring_t meta, smpl; int dret; vcf_t *v; bcf_hdr_t *h; if (!bp->is_vcf) return bcf_hdr_read(bp); h = calloc(1, sizeof(bcf_hdr_t)); v = (vcf_t*)bp->v; v->line.l = 0; memset(&meta, 0, sizeof(kstring_t)); memset(&smpl, 0, sizeof(kstring_t)); while (ks_getuntil(v->ks, '\n', &v->line, &dret) >= 0) { if (v->line.l < 2) continue; if (v->line.s[0] != '#') return 0; // no sample line if (v->line.s[0] == '#' && v->line.s[1] == '#') { kputsn(v->line.s, v->line.l, &meta); kputc('\n', &meta); } else if (v->line.s[0] == '#') { int k; ks_tokaux_t aux; char *p; for (p = kstrtok(v->line.s, "\t\n", &aux), k = 0; p; p = kstrtok(0, 0, &aux), ++k) { if (k >= 9) { kputsn(p, aux.p - p, &smpl); kputc('\0', &smpl); } } break; } } kputc('\0', &meta); h->name = 0; h->sname = smpl.s; h->l_smpl = smpl.l; h->txt = meta.s; h->l_txt = meta.l; bcf_hdr_sync(h); return h; } bcf_t *vcf_open(const char *fn, const char *mode) { bcf_t *bp; vcf_t *v; if (strchr(mode, 'b')) return bcf_open(fn, mode); bp = calloc(1, sizeof(bcf_t)); v = calloc(1, sizeof(vcf_t)); bp->is_vcf = 1; bp->v = v; v->refhash = bcf_str2id_init(); if (strchr(mode, 'r')) { v->fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); v->ks = ks_init(v->fp); } else if (strchr(mode, 'w')) v->fpout = strcmp(fn, "-")? fopen(fn, "w") : stdout; return bp; } int vcf_dictread(bcf_t *bp, bcf_hdr_t *h, const char *fn) { vcf_t *v; gzFile fp; kstream_t *ks; kstring_t s, rn; int dret; if (bp == 0) return -1; if (!bp->is_vcf) return 0; s.l = s.m = 0; s.s = 0; rn.m = rn.l = h->l_nm; rn.s = h->name; v = (vcf_t*)bp->v; fp = gzopen(fn, "r"); ks = ks_init(fp); while (ks_getuntil(ks, 0, &s, &dret) >= 0) { bcf_str2id_add(v->refhash, strdup(s.s)); kputs(s.s, &rn); kputc('\0', &rn); if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); } ks_destroy(ks); gzclose(fp); h->l_nm = rn.l; h->name = rn.s; bcf_hdr_sync(h); free(s.s); return 0; } int vcf_close(bcf_t *bp) { vcf_t *v; if (bp == 0) return -1; if (!bp->is_vcf) return bcf_close(bp); v = (vcf_t*)bp->v; if (v->fp) { ks_destroy(v->ks); gzclose(v->fp); } if (v->fpout) fclose(v->fpout); free(v->line.s); bcf_str2id_thorough_destroy(v->refhash); free(v); free(bp); return 0; } int vcf_hdr_write(bcf_t *bp, const bcf_hdr_t *h) { vcf_t *v = (vcf_t*)bp->v; int i, has_ver = 0; if (!bp->is_vcf) return bcf_hdr_write(bp, h); if (h->l_txt > 0) { if (strstr(h->txt, "##fileformat=")) has_ver = 1; if (has_ver == 0) fprintf(v->fpout, "##fileformat=VCFv4.1\n"); fwrite(h->txt, 1, h->l_txt - 1, v->fpout); } if (h->l_txt == 0) fprintf(v->fpout, "##fileformat=VCFv4.1\n"); fprintf(v->fpout, "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT"); for (i = 0; i < h->n_smpl; ++i) fprintf(v->fpout, "\t%s", h->sns[i]); fputc('\n', v->fpout); return 0; } int vcf_write(bcf_t *bp, bcf_hdr_t *h, bcf1_t *b) { vcf_t *v = (vcf_t*)bp->v; extern void bcf_fmt_core(const bcf_hdr_t *h, bcf1_t *b, kstring_t *s); if (!bp->is_vcf) return bcf_write(bp, h, b); bcf_fmt_core(h, b, &v->line); fwrite(v->line.s, 1, v->line.l, v->fpout); fputc('\n', v->fpout); return v->line.l + 1; } int vcf_read(bcf_t *bp, bcf_hdr_t *h, bcf1_t *b) { int dret, k, i, sync = 0; vcf_t *v = (vcf_t*)bp->v; char *p, *q; kstring_t str, rn; ks_tokaux_t aux, a2; if (!bp->is_vcf) return bcf_read(bp, h, b); v->line.l = 0; str.l = 0; str.m = b->m_str; str.s = b->str; rn.l = rn.m = h->l_nm; rn.s = h->name; if (ks_getuntil(v->ks, '\n', &v->line, &dret) < 0) return -1; b->n_smpl = h->n_smpl; for (p = kstrtok(v->line.s, "\t", &aux), k = 0; p; p = kstrtok(0, 0, &aux), ++k) { *(char*)aux.p = 0; if (k == 0) { // ref int tid = bcf_str2id(v->refhash, p); if (tid < 0) { tid = bcf_str2id_add(v->refhash, strdup(p)); kputs(p, &rn); kputc('\0', &rn); sync = 1; } b->tid = tid; } else if (k == 1) { // pos b->pos = atoi(p) - 1; } else if (k == 5) { // qual b->qual = (p[0] >= '0' && p[0] <= '9')? atof(p) : 0; } else if (k <= 8) { // variable length strings kputs(p, &str); kputc('\0', &str); b->l_str = str.l; b->m_str = str.m; b->str = str.s; if (k == 8) bcf_sync(b); } else { // k > 9 if (strncmp(p, "./.", 3) == 0) { for (i = 0; i < b->n_gi; ++i) { if (b->gi[i].fmt == bcf_str2int("GT", 2)) { ((uint8_t*)b->gi[i].data)[k-9] = 1<<7; } else if (b->gi[i].fmt == bcf_str2int("GQ", 2)) { ((uint8_t*)b->gi[i].data)[k-9] = 0; } else if (b->gi[i].fmt == bcf_str2int("SP", 2)) { ((int32_t*)b->gi[i].data)[k-9] = 0; } else if (b->gi[i].fmt == bcf_str2int("DP", 2)) { ((uint16_t*)b->gi[i].data)[k-9] = 0; } else if (b->gi[i].fmt == bcf_str2int("PL", 2)) { int y = b->n_alleles * (b->n_alleles + 1) / 2; memset((uint8_t*)b->gi[i].data + (k - 9) * y, 0, y); } else if (b->gi[i].fmt == bcf_str2int("GL", 2)) { int y = b->n_alleles * (b->n_alleles + 1) / 2; memset((float*)b->gi[i].data + (k - 9) * y, 0, y * 4); } } goto endblock; } for (q = kstrtok(p, ":", &a2), i = 0; q && i < b->n_gi; q = kstrtok(0, 0, &a2), ++i) { if (b->gi[i].fmt == bcf_str2int("GT", 2)) { ((uint8_t*)b->gi[i].data)[k-9] = (q[0] - '0')<<3 | (q[2] - '0') | (q[1] == '/'? 0 : 1) << 6; } else if (b->gi[i].fmt == bcf_str2int("GQ", 2)) { double _x = strtod(q, &q); int x = (int)(_x + .499); if (x > 255) x = 255; ((uint8_t*)b->gi[i].data)[k-9] = x; } else if (b->gi[i].fmt == bcf_str2int("SP", 2)) { int x = strtol(q, &q, 10); if (x > 0xffff) x = 0xffff; ((uint32_t*)b->gi[i].data)[k-9] = x; } else if (b->gi[i].fmt == bcf_str2int("DP", 2)) { int x = strtol(q, &q, 10); if (x > 0xffff) x = 0xffff; ((uint16_t*)b->gi[i].data)[k-9] = x; } else if (b->gi[i].fmt == bcf_str2int("PL", 2)) { int x, y, j; uint8_t *data = (uint8_t*)b->gi[i].data; y = b->n_alleles * (b->n_alleles + 1) / 2; for (j = 0; j < y; ++j) { x = strtol(q, &q, 10); if (x > 255) x = 255; data[(k-9) * y + j] = x; ++q; } } else if (b->gi[i].fmt == bcf_str2int("GL", 2)) { int j, y; float x, *data = (float*)b->gi[i].data; y = b->n_alleles * (b->n_alleles + 1) / 2; for (j = 0; j < y; ++j) { x = strtod(q, &q); data[(k-9) * y + j] = x > 0? -x/10. : x; ++q; } } } endblock: i = i; } } h->l_nm = rn.l; h->name = rn.s; if (sync) bcf_hdr_sync(h); return v->line.l + 1; } genometools-1.5.1/src/external/samtools-0.1.18/bcftools/vcfutils.pl000077500000000000000000000365331211610345200250650ustar00rootroot00000000000000#!/usr/bin/perl -w # Author: lh3 use strict; use warnings; use Getopt::Std; &main; exit; sub main { &usage if (@ARGV < 1); my $command = shift(@ARGV); my %func = (subsam=>\&subsam, listsam=>\&listsam, fillac=>\&fillac, qstats=>\&qstats, varFilter=>\&varFilter, hapmap2vcf=>\&hapmap2vcf, ucscsnp2vcf=>\&ucscsnp2vcf, filter4vcf=>\&varFilter, ldstats=>\&ldstats, gapstats=>\&gapstats, splitchr=>\&splitchr, vcf2fq=>\&vcf2fq); die("Unknown command \"$command\".\n") if (!defined($func{$command})); &{$func{$command}}; } sub splitchr { my %opts = (l=>5000000); getopts('l:', \%opts); my $l = $opts{l}; die(qq/Usage: vcfutils.pl splitchr [-l $opts{l}] \n/) if (@ARGV == 0 && -t STDIN); while (<>) { my @t = split; my $last = 0; for (my $i = 0; $i < $t[1];) { my $e = ($t[1] - $i) / $l < 1.1? $t[1] : $i + $l; print "$t[0]:".($i+1)."-$e\n"; $i = $e; } } } sub subsam { die(qq/Usage: vcfutils.pl subsam [samples]\n/) if (@ARGV == 0); my ($fh, %h); my $fn = shift(@ARGV); my @col; open($fh, ($fn =~ /\.gz$/)? "gzip -dc $fn |" : $fn) || die; $h{$_} = 1 for (@ARGV); while (<$fh>) { if (/^##/) { print; } elsif (/^#/) { my @t = split; my @s = @t[0..8]; # all fixed fields + FORMAT for (9 .. $#t) { if ($h{$t[$_]}) { push(@s, $t[$_]); push(@col, $_); } } pop(@s) if (@s == 9); # no sample selected; remove the FORMAT field print join("\t", @s), "\n"; } else { my @t = split; if (@col == 0) { print join("\t", @t[0..7]), "\n"; } else { print join("\t", @t[0..8], map {$t[$_]} @col), "\n"; } } } close($fh); } sub listsam { die(qq/Usage: vcfutils.pl listsam \n/) if (@ARGV == 0 && -t STDIN); while (<>) { if (/^#/ && !/^##/) { my @t = split; print join("\n", @t[9..$#t]), "\n"; exit; } } } sub fillac { die(qq/Usage: vcfutils.pl fillac \n\nNote: The GT field MUST BE present and always appear as the first field.\n/) if (@ARGV == 0 && -t STDIN); while (<>) { if (/^#/) { print; } else { my @t = split; my @c = (0, 0); my $n = 0; my $s = -1; @_ = split(":", $t[8]); for (0 .. $#_) { if ($_[$_] eq 'GT') { $s = $_; last; } } if ($s < 0) { print join("\t", @t), "\n"; next; } for (9 .. $#t) { if ($t[$_] =~ /^0,0,0/) { } elsif ($t[$_] =~ /^([^\s:]+:){$s}(\d+).(\d+)/) { ++$c[$2]; ++$c[$3]; $n += 2; } } my $AC = "AC=" . join("\t", @c[1..$#c]) . ";AN=$n"; my $info = $t[7]; $info =~ s/(;?)AC=(\d+)//; $info =~ s/(;?)AN=(\d+)//; if ($info eq '.') { $info = $AC; } else { $info .= ";$AC"; } $t[7] = $info; print join("\t", @t), "\n"; } } } sub ldstats { my %opts = (t=>0.9); getopts('t:', \%opts); die("Usage: vcfutils.pl ldstats [-t $opts{t}] \n") if (@ARGV == 0 && -t STDIN); my $cutoff = $opts{t}; my ($last, $lastchr) = (0x7fffffff, ''); my ($x, $y, $n) = (0, 0, 0); while (<>) { if (/^([^#\s]+)\s(\d+)/) { my ($chr, $pos) = ($1, $2); if (/NEIR=([\d\.]+)/) { ++$n; ++$y, $x += $pos - $last if ($lastchr eq $chr && $pos > $last && $1 > $cutoff); } $last = $pos; $lastchr = $chr; } } print "Number of SNP intervals in strong LD (r > $opts{t}): $y\n"; print "Fraction: ", $y/$n, "\n"; print "Length: $x\n"; } sub qstats { my %opts = (r=>'', s=>0.02, v=>undef); getopts('r:s:v', \%opts); die("Usage: vcfutils.pl qstats [-r ref.vcf] \n Note: This command discards indels. Output: QUAL #non-indel #SNPs #transitions #joint ts/tv #joint/#ref #joint/#non-indel \n") if (@ARGV == 0 && -t STDIN); my %ts = (AG=>1, GA=>1, CT=>1, TC=>1); my %h = (); my $is_vcf = defined($opts{v})? 1 : 0; if ($opts{r}) { # read the reference positions my $fh; open($fh, $opts{r}) || die; while (<$fh>) { next if (/^#/); if ($is_vcf) { my @t = split; $h{$t[0],$t[1]} = $t[4]; } else { $h{$1,$2} = 1 if (/^(\S+)\s+(\d+)/); } } close($fh); } my $hsize = scalar(keys %h); my @a; while (<>) { next if (/^#/); my @t = split; next if (length($t[3]) != 1 || uc($t[3]) eq 'N'); $t[3] = uc($t[3]); $t[4] = uc($t[4]); my @s = split(',', $t[4]); $t[5] = 3 if ($t[5] eq '.' || $t[5] < 0); next if (length($s[0]) != 1); my $hit; if ($is_vcf) { $hit = 0; my $aa = $h{$t[0],$t[1]}; if (defined($aa)) { my @aaa = split(",", $aa); for (@aaa) { $hit = 1 if ($_ eq $s[0]); } } } else { $hit = defined($h{$t[0],$t[1]})? 1 : 0; } push(@a, [$t[5], ($t[4] eq '.' || $t[4] eq $t[3])? 0 : 1, $ts{$t[3].$s[0]}? 1 : 0, $hit]); } push(@a, [-1, 0, 0, 0]); # end marker die("[qstats] No SNP data!\n") if (@a == 0); @a = sort {$b->[0]<=>$a->[0]} @a; my $next = $opts{s}; my $last = $a[0]; my @c = (0, 0, 0, 0); my @lc; $lc[1] = $lc[2] = 0; for my $p (@a) { if ($p->[0] == -1 || ($p->[0] != $last && $c[0]/@a > $next)) { my @x; $x[0] = sprintf("%.4f", $c[1]-$c[2]? $c[2] / ($c[1] - $c[2]) : 100); $x[1] = sprintf("%.4f", $hsize? $c[3] / $hsize : 0); $x[2] = sprintf("%.4f", $c[3] / $c[1]); my $a = $c[1] - $lc[1]; my $b = $c[2] - $lc[2]; $x[3] = sprintf("%.4f", $a-$b? $b / ($a-$b) : 100); print join("\t", $last, @c, @x), "\n"; $next = $c[0]/@a + $opts{s}; $lc[1] = $c[1]; $lc[2] = $c[2]; } ++$c[0]; $c[1] += $p->[1]; $c[2] += $p->[2]; $c[3] += $p->[3]; $last = $p->[0]; } } sub varFilter { my %opts = (d=>2, D=>10000000, a=>2, W=>10, Q=>10, w=>3, p=>undef, 1=>1e-4, 2=>1e-100, 3=>0, 4=>1e-4, G=>0, S=>1000, e=>1e-4); getopts('pd:D:W:Q:w:a:1:2:3:4:G:S:e:', \%opts); die(qq/ Usage: vcfutils.pl varFilter [options] Options: -Q INT minimum RMS mapping quality for SNPs [$opts{Q}] -d INT minimum read depth [$opts{d}] -D INT maximum read depth [$opts{D}] -a INT minimum number of alternate bases [$opts{a}] -w INT SNP within INT bp around a gap to be filtered [$opts{w}] -W INT window size for filtering adjacent gaps [$opts{W}] -1 FLOAT min P-value for strand bias (given PV4) [$opts{1}] -2 FLOAT min P-value for baseQ bias [$opts{2}] -3 FLOAT min P-value for mapQ bias [$opts{3}] -4 FLOAT min P-value for end distance bias [$opts{4}] -e FLOAT min P-value for HWE (plus F<0) [$opts{e}] -p print filtered variants Note: Some of the filters rely on annotations generated by SAMtools\/BCFtools. \n/) if (@ARGV == 0 && -t STDIN); # calculate the window size my ($ol, $ow) = ($opts{W}, $opts{w}); my $max_dist = $ol > $ow? $ol : $ow; # the core loop my @staging; # (indel_filtering_score, flt_tag, indel_span; chr, pos, ...) while (<>) { my @t = split; if (/^#/) { print; next; } next if ($t[4] eq '.'); # skip non-var sites next if ($t[3] eq 'N'); # skip sites with unknown ref ('N') # check if the site is a SNP my $type = 1; # SNP if (length($t[3]) > 1) { $type = 2; # MNP my @s = split(',', $t[4]); for (@s) { $type = 3 if (length != length($t[3])); } } else { my @s = split(',', $t[4]); for (@s) { $type = 3 if (length > 1); } } # clear the out-of-range elements while (@staging) { # Still on the same chromosome and the first element's window still affects this position? last if ($staging[0][3] eq $t[0] && $staging[0][4] + $staging[0][2] + $max_dist >= $t[1]); varFilter_aux(shift(@staging), $opts{p}); # calling a function is a bit slower, not much } my $flt = 0; # parse annotations my ($dp, $mq, $dp_alt) = (-1, -1, -1); if ($t[7] =~ /DP4=(\d+),(\d+),(\d+),(\d+)/i) { $dp = $1 + $2 + $3 + $4; $dp_alt = $3 + $4; } if ($t[7] =~ /DP=(\d+)/i) { $dp = $1; } $mq = $1 if ($t[7] =~ /MQ=(\d+)/i); # the depth and mapQ filter if ($dp >= 0) { if ($dp < $opts{d}) { $flt = 2; } elsif ($dp > $opts{D}) { $flt = 3; } } $flt = 4 if ($dp_alt >= 0 && $dp_alt < $opts{a}); $flt = 1 if ($flt == 0 && $mq >= 0 && $mq < $opts{Q}); $flt = 7 if ($flt == 0 && /PV4=([^,]+),([^,]+),([^,]+),([^,;\t]+)/ && ($1<$opts{1} || $2<$opts{2} || $3<$opts{3} || $4<$opts{4})); $flt = 8 if ($flt == 0 && ((/MXGQ=(\d+)/ && $1 < $opts{G}) || (/MXSP=(\d+)/ && $1 >= $opts{S}))); # HWE filter if ($t[7] =~ /G3=([^;,]+),([^;,]+),([^;,]+).*HWE=([^;,]+)/ && $4 < $opts{e}) { my $p = 2*$1 + $2; my $f = ($p > 0 && $p < 1)? 1 - $2 / ($p * (1-$p)) : 0; $flt = 9 if ($f < 0); } my $score = $t[5] * 100 + $dp_alt; my $rlen = length($t[3]) - 1; # $indel_score<0 for SNPs if ($flt == 0) { if ($type == 3) { # an indel # filtering SNPs and MNPs for my $x (@staging) { next if (($x->[0]&3) == 3 || $x->[1] || $x->[4] + $x->[2] + $ow < $t[1]); $x->[1] = 5; } # check the staging list for indel filtering for my $x (@staging) { next if (($x->[0]&3) != 3 || $x->[1] || $x->[4] + $x->[2] + $ol < $t[1]); if ($x->[0]>>2 < $score) { $x->[1] = 6; } else { $flt = 6; last; } } } else { # SNP or MNP for my $x (@staging) { next if (($x->[0]&3) != 3 || $x->[4] + $x->[2] + $ow < $t[1]); if ($x->[4] + length($x->[7]) - 1 == $t[1] && substr($x->[7], -1, 1) eq substr($t[4], 0, 1) && length($x->[7]) - length($x->[6]) == 1) { $x->[1] = 5; } else { $flt = 5; } last; } # check MNP for my $x (@staging) { next if (($x->[0]&3) == 3 || $x->[4] + $x->[2] < $t[1]); if ($x->[0]>>2 < $score) { $x->[1] = 8; } else { $flt = 8; last; } } } } push(@staging, [$score<<2|$type, $flt, $rlen, @t]); } # output the last few elements in the staging list while (@staging) { varFilter_aux(shift @staging, $opts{p}); } } sub varFilter_aux { my ($first, $is_print) = @_; if ($first->[1] == 0) { print join("\t", @$first[3 .. @$first-1]), "\n"; } elsif ($is_print) { print STDERR join("\t", substr("UQdDaGgPMS", $first->[1], 1), @$first[3 .. @$first-1]), "\n"; } } sub gapstats { my (@c0, @c1); $c0[$_] = $c1[$_] = 0 for (0 .. 10000); while (<>) { next if (/^#/); my @t = split; next if (length($t[3]) == 1 && $t[4] =~ /^[A-Za-z](,[A-Za-z])*$/); # not an indel my @s = split(',', $t[4]); for my $x (@s) { my $l = length($x) - length($t[3]) + 5000; if ($x =~ /^-/) { $l = -(length($x) - 1) + 5000; } elsif ($x =~ /^\+/) { $l = length($x) - 1 + 5000; } $c0[$l] += 1 / @s; } } for (my $i = 0; $i < 10000; ++$i) { next if ($c0[$i] == 0); $c1[0] += $c0[$i]; $c1[1] += $c0[$i] if (($i-5000)%3 == 0); printf("C\t%d\t%.2f\n", ($i-5000), $c0[$i]); } printf("3\t%d\t%d\t%.3f\n", $c1[0], $c1[1], $c1[1]/$c1[0]); } sub ucscsnp2vcf { die("Usage: vcfutils.pl \n") if (@ARGV == 0 && -t STDIN); print "##fileformat=VCFv4.0\n"; print join("\t", "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO"), "\n"; while (<>) { my @t = split("\t"); my $indel = ($t[9] =~ /^[ACGT](\/[ACGT])+$/)? 0 : 1; my $pos = $t[2] + 1; my @alt; push(@alt, $t[7]); if ($t[6] eq '-') { $t[9] = reverse($t[9]); $t[9] =~ tr/ACGTRYMKWSNacgtrymkwsn/TGCAYRKMWSNtgcayrkmwsn/; } my @a = split("/", $t[9]); for (@a) { push(@alt, $_) if ($_ ne $alt[0]); } if ($indel) { --$pos; for (0 .. $#alt) { $alt[$_] =~ tr/-//d; $alt[$_] = "N$alt[$_]"; } } my $ref = shift(@alt); my $af = $t[13] > 0? ";AF=$t[13]" : ''; my $valid = ($t[12] eq 'unknown')? '' : ";valid=$t[12]"; my $info = "molType=$t[10];class=$t[11]$valid$af"; print join("\t", $t[1], $pos, $t[4], $ref, join(",", @alt), 0, '.', $info), "\n"; } } sub hapmap2vcf { die("Usage: vcfutils.pl \n") if (@ARGV == 0); my $fn = shift(@ARGV); # parse UCSC SNP warn("Parsing UCSC SNPs...\n"); my ($fh, %map); open($fh, ($fn =~ /\.gz$/)? "gzip -dc $fn |" : $fn) || die; while (<$fh>) { my @t = split; next if ($t[3] - $t[2] != 1); # not SNP @{$map{$t[4]}} = @t[1,3,7]; } close($fh); # write VCF warn("Writing VCF...\n"); print "##fileformat=VCFv4.0\n"; while (<>) { my @t = split; if ($t[0] eq 'rs#') { # the first line print join("\t", "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT", @t[11..$#t]), "\n"; } else { next unless ($map{$t[0]}); next if (length($t[1]) != 3); # skip non-SNPs my $a = \@{$map{$t[0]}}; my $ref = $a->[2]; my @u = split('/', $t[1]); if ($u[1] eq $ref) { $u[1] = $u[0]; $u[0] = $ref; } elsif ($u[0] ne $ref) { next; } my $alt = $u[1]; my %w; $w{$u[0]} = 0; $w{$u[1]} = 1; my @s = (@$a[0,1], $t[0], $ref, $alt, 0, '.', '.', 'GT'); my $is_tri = 0; for (@t[11..$#t]) { if ($_ eq 'NN') { push(@s, './.'); } else { my @a = ($w{substr($_,0,1)}, $w{substr($_,1,1)}); if (!defined($a[0]) || !defined($a[1])) { $is_tri = 1; last; } push(@s, "$a[0]/$a[1]"); } } next if ($is_tri); print join("\t", @s), "\n"; } } } sub vcf2fq { my %opts = (d=>3, D=>100000, Q=>10, l=>5); getopts('d:D:Q:l:', \%opts); die(qq/ Usage: vcfutils.pl vcf2fq [options] Options: -d INT minimum depth [$opts{d}] -D INT maximum depth [$opts{D}] -Q INT min RMS mapQ [$opts{Q}] -l INT INDEL filtering window [$opts{l}] \n/) if (@ARGV == 0 && -t STDIN); my ($last_chr, $seq, $qual, $last_pos, @gaps); my $_Q = $opts{Q}; my $_d = $opts{d}; my $_D = $opts{D}; my %het = (AC=>'M', AG=>'R', AT=>'W', CA=>'M', CG=>'S', CT=>'Y', GA=>'R', GC=>'S', GT=>'K', TA=>'W', TC=>'Y', TG=>'K'); $last_chr = ''; while (<>) { next if (/^#/); my @t = split; if ($last_chr ne $t[0]) { &v2q_post_process($last_chr, \$seq, \$qual, \@gaps, $opts{l}) if ($last_chr); ($last_chr, $last_pos) = ($t[0], 0); $seq = $qual = ''; @gaps = (); } die("[vcf2fq] unsorted input\n") if ($t[1] - $last_pos < 0); if ($t[1] - $last_pos > 1) { $seq .= 'n' x ($t[1] - $last_pos - 1); $qual .= '!' x ($t[1] - $last_pos - 1); } if (length($t[3]) == 1 && $t[7] !~ /INDEL/ && $t[4] =~ /^([A-Za-z.])(,[A-Za-z])*$/) { # a SNP or reference my ($ref, $alt) = ($t[3], $1); my ($b, $q); $q = $1 if ($t[7] =~ /FQ=(-?[\d\.]+)/); if ($q < 0) { $_ = ($t[7] =~ /AF1=([\d\.]+)/)? $1 : 0; $b = ($_ < .5 || $alt eq '.')? $ref : $alt; $q = -$q; } else { $b = $het{"$ref$alt"}; $b ||= 'N'; } $b = lc($b); $b = uc($b) if (($t[7] =~ /MQ=(\d+)/ && $1 >= $_Q) && ($t[7] =~ /DP=(\d+)/ && $1 >= $_d && $1 <= $_D)); $q = int($q + 33 + .499); $q = chr($q <= 126? $q : 126); $seq .= $b; $qual .= $q; } elsif ($t[4] ne '.') { # an INDEL push(@gaps, [$t[1], length($t[3])]); } $last_pos = $t[1]; } &v2q_post_process($last_chr, \$seq, \$qual, \@gaps, $opts{l}); } sub v2q_post_process { my ($chr, $seq, $qual, $gaps, $l) = @_; for my $g (@$gaps) { my $beg = $g->[0] > $l? $g->[0] - $l : 0; my $end = $g->[0] + $g->[1] + $l; $end = length($$seq) if ($end > length($$seq)); substr($$seq, $beg, $end - $beg) = lc(substr($$seq, $beg, $end - $beg)); } print "\@$chr\n"; &v2q_print_str($seq); print "+\n"; &v2q_print_str($qual); } sub v2q_print_str { my ($s) = @_; my $l = length($$s); for (my $i = 0; $i < $l; $i += 60) { print substr($$s, $i, 60), "\n"; } } sub usage { die(qq/ Usage: vcfutils.pl []\n Command: subsam get a subset of samples listsam list the samples fillac fill the allele count field qstats SNP stats stratified by QUAL hapmap2vcf convert the hapmap format to VCF ucscsnp2vcf convert UCSC SNP SQL dump to VCF varFilter filtering short variants (*) vcf2fq VCF->fastq (**) Notes: Commands with description endting with (*) may need bcftools specific annotations. \n/); } genometools-1.5.1/src/external/samtools-0.1.18/bedidx.c000066400000000000000000000074521211610345200224540ustar00rootroot00000000000000#include #include #include #include #include #ifdef _WIN32 #define drand48() ((double)rand() / RAND_MAX) #endif #include "ksort.h" KSORT_INIT_GENERIC(uint64_t) #include "kseq.h" KSTREAM_INIT(gzFile, gzread, 8192) typedef struct { int n, m; uint64_t *a; int *idx; } bed_reglist_t; #include "khash.h" KHASH_MAP_INIT_STR(reg, bed_reglist_t) #define LIDX_SHIFT 13 typedef kh_reg_t reghash_t; int *bed_index_core(int n, uint64_t *a, int *n_idx) { int i, j, m, *idx; m = *n_idx = 0; idx = 0; for (i = 0; i < n; ++i) { int beg, end; beg = a[i]>>32 >> LIDX_SHIFT; end = ((uint32_t)a[i]) >> LIDX_SHIFT; if (m < end + 1) { int oldm = m; m = end + 1; kroundup32(m); idx = realloc(idx, m * sizeof(int)); for (j = oldm; j < m; ++j) idx[j] = -1; } if (beg == end) { if (idx[beg] < 0) idx[beg] = i; } else { for (j = beg; j <= end; ++j) if (idx[j] < 0) idx[j] = i; } *n_idx = end + 1; } return idx; } void bed_index(void *_h) { reghash_t *h = (reghash_t*)_h; khint_t k; for (k = 0; k < kh_end(h); ++k) { if (kh_exist(h, k)) { bed_reglist_t *p = &kh_val(h, k); if (p->idx) free(p->idx); ks_introsort(uint64_t, p->n, p->a); p->idx = bed_index_core(p->n, p->a, &p->m); } } } int bed_overlap_core(const bed_reglist_t *p, int beg, int end) { int i, min_off; if (p->n == 0) return 0; min_off = (beg>>LIDX_SHIFT >= p->n)? p->idx[p->n-1] : p->idx[beg>>LIDX_SHIFT]; if (min_off < 0) { // TODO: this block can be improved, but speed should not matter too much here int n = beg>>LIDX_SHIFT; if (n > p->n) n = p->n; for (i = n - 1; i >= 0; --i) if (p->idx[i] >= 0) break; min_off = i >= 0? p->idx[i] : 0; } for (i = min_off; i < p->n; ++i) { if ((int)(p->a[i]>>32) >= end) break; // out of range; no need to proceed if ((int32_t)p->a[i] > beg && (int32_t)(p->a[i]>>32) < end) return 1; // find the overlap; return } return 0; } int bed_overlap(const void *_h, const char *chr, int beg, int end) { const reghash_t *h = (const reghash_t*)_h; khint_t k; if (!h) return 0; k = kh_get(reg, h, chr); if (k == kh_end(h)) return 0; return bed_overlap_core(&kh_val(h, k), beg, end); } void *bed_read(const char *fn) { reghash_t *h = kh_init(reg); gzFile fp; kstream_t *ks; int dret; kstring_t *str; // read the list fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); if (fp == 0) return 0; str = calloc(1, sizeof(kstring_t)); ks = ks_init(fp); while (ks_getuntil(ks, 0, str, &dret) >= 0) { // read the chr name int beg = -1, end = -1; bed_reglist_t *p; khint_t k = kh_get(reg, h, str->s); if (k == kh_end(h)) { // absent from the hash table int ret; char *s = strdup(str->s); k = kh_put(reg, h, s, &ret); memset(&kh_val(h, k), 0, sizeof(bed_reglist_t)); } p = &kh_val(h, k); if (dret != '\n') { // if the lines has other characters if (ks_getuntil(ks, 0, str, &dret) > 0 && isdigit(str->s[0])) { beg = atoi(str->s); // begin if (dret != '\n') { if (ks_getuntil(ks, 0, str, &dret) > 0 && isdigit(str->s[0])) { end = atoi(str->s); // end if (end < beg) end = -1; } } } } if (dret != '\n') while ((dret = ks_getc(ks)) > 0 && dret != '\n'); // skip the rest of the line if (end < 0 && beg > 0) end = beg, beg = beg - 1; // if there is only one column if (beg >= 0 && end > beg) { if (p->n == p->m) { p->m = p->m? p->m<<1 : 4; p->a = realloc(p->a, p->m * 8); } p->a[p->n++] = (uint64_t)beg<<32 | end; } } ks_destroy(ks); gzclose(fp); free(str->s); free(str); bed_index(h); return h; } void bed_destroy(void *_h) { reghash_t *h = (reghash_t*)_h; khint_t k; for (k = 0; k < kh_end(h); ++k) { if (kh_exist(h, k)) { free(kh_val(h, k).a); free(kh_val(h, k).idx); free((char*)kh_key(h, k)); } } kh_destroy(reg, h); } genometools-1.5.1/src/external/samtools-0.1.18/bgzf.c000066400000000000000000000467731211610345200221560ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008 Broad Institute / Massachusetts Institute of Technology Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* 2009-06-29 by lh3: cache recent uncompressed blocks. 2009-06-25 by lh3: optionally use my knetfile library to access file on a FTP. 2009-06-12 by lh3: support a mode string like "wu" where 'u' for uncompressed output */ #include #include #include #include #include #include #include #include "bgzf.h" #include "khash.h" typedef struct { int size; uint8_t *block; int64_t end_offset; } cache_t; KHASH_MAP_INIT_INT64(cache, cache_t) #if defined(_WIN32) || defined(_MSC_VER) #define ftello(fp) ftell(fp) #define fseeko(fp, offset, whence) fseek(fp, offset, whence) #else extern off_t ftello(FILE *stream); extern int fseeko(FILE *stream, off_t offset, int whence); #endif typedef int8_t bgzf_byte_t; static const int DEFAULT_BLOCK_SIZE = 64 * 1024; static const int MAX_BLOCK_SIZE = 64 * 1024; static const int BLOCK_HEADER_LENGTH = 18; static const int BLOCK_FOOTER_LENGTH = 8; static const int GZIP_ID1 = 31; static const int GZIP_ID2 = 139; static const int CM_DEFLATE = 8; static const int FLG_FEXTRA = 4; static const int OS_UNKNOWN = 255; static const int BGZF_ID1 = 66; // 'B' static const int BGZF_ID2 = 67; // 'C' static const int BGZF_LEN = 2; static const int BGZF_XLEN = 6; // BGZF_LEN+4 static const int GZIP_WINDOW_BITS = -15; // no zlib header static const int Z_DEFAULT_MEM_LEVEL = 8; inline void static packInt16(uint8_t* buffer, uint16_t value) { buffer[0] = value; buffer[1] = value >> 8; } inline int static unpackInt16(const uint8_t* buffer) { return (buffer[0] | (buffer[1] << 8)); } inline void static packInt32(uint8_t* buffer, uint32_t value) { buffer[0] = value; buffer[1] = value >> 8; buffer[2] = value >> 16; buffer[3] = value >> 24; } static inline int bgzf_min(int x, int y) { return (x < y) ? x : y; } static void report_error(BGZF* fp, const char* message) { fp->error = message; } int bgzf_check_bgzf(const char *fn) { BGZF *fp; uint8_t buf[10],magic[10]="\037\213\010\4\0\0\0\0\0\377"; int n; if ((fp = bgzf_open(fn, "r")) == 0) { fprintf(stderr, "[bgzf_check_bgzf] failed to open the file: %s\n",fn); return -1; } #ifdef _USE_KNETFILE n = knet_read(fp->x.fpr, buf, 10); #else n = fread(buf, 1, 10, fp->file); #endif bgzf_close(fp); if ( n!=10 ) return -1; if ( !memcmp(magic, buf, 10) ) return 1; return 0; } static BGZF *bgzf_read_init() { BGZF *fp; fp = calloc(1, sizeof(BGZF)); fp->uncompressed_block_size = MAX_BLOCK_SIZE; fp->uncompressed_block = malloc(MAX_BLOCK_SIZE); fp->compressed_block_size = MAX_BLOCK_SIZE; fp->compressed_block = malloc(MAX_BLOCK_SIZE); fp->cache_size = 0; fp->cache = kh_init(cache); return fp; } static BGZF* open_read(int fd) { #ifdef _USE_KNETFILE knetFile *file = knet_dopen(fd, "r"); #else FILE* file = fdopen(fd, "r"); #endif BGZF* fp; if (file == 0) return 0; fp = bgzf_read_init(); fp->file_descriptor = fd; fp->open_mode = 'r'; #ifdef _USE_KNETFILE fp->x.fpr = file; #else fp->file = file; #endif return fp; } static BGZF* open_write(int fd, int compress_level) // compress_level==-1 for the default level { FILE* file = fdopen(fd, "w"); BGZF* fp; if (file == 0) return 0; fp = malloc(sizeof(BGZF)); fp->file_descriptor = fd; fp->open_mode = 'w'; fp->owned_file = 0; fp->compress_level = compress_level < 0? Z_DEFAULT_COMPRESSION : compress_level; // Z_DEFAULT_COMPRESSION==-1 if (fp->compress_level > 9) fp->compress_level = Z_DEFAULT_COMPRESSION; #ifdef _USE_KNETFILE fp->x.fpw = file; #else fp->file = file; #endif fp->uncompressed_block_size = DEFAULT_BLOCK_SIZE; fp->uncompressed_block = NULL; fp->compressed_block_size = MAX_BLOCK_SIZE; fp->compressed_block = malloc(MAX_BLOCK_SIZE); fp->block_address = 0; fp->block_offset = 0; fp->block_length = 0; fp->error = NULL; return fp; } BGZF* bgzf_open(const char* __restrict path, const char* __restrict mode) { BGZF* fp = NULL; if (strchr(mode, 'r') || strchr(mode, 'R')) { /* The reading mode is preferred. */ #ifdef _USE_KNETFILE knetFile *file = knet_open(path, mode); if (file == 0) return 0; fp = bgzf_read_init(); fp->file_descriptor = -1; fp->open_mode = 'r'; fp->x.fpr = file; #else int fd, oflag = O_RDONLY; #ifdef _WIN32 oflag |= O_BINARY; #endif fd = open(path, oflag); if (fd == -1) return 0; fp = open_read(fd); #endif } else if (strchr(mode, 'w') || strchr(mode, 'W')) { int fd, compress_level = -1, oflag = O_WRONLY | O_CREAT | O_TRUNC; #ifdef _WIN32 oflag |= O_BINARY; #endif fd = open(path, oflag, 0666); if (fd == -1) return 0; { // set compress_level int i; for (i = 0; mode[i]; ++i) if (mode[i] >= '0' && mode[i] <= '9') break; if (mode[i]) compress_level = (int)mode[i] - '0'; if (strchr(mode, 'u')) compress_level = 0; } fp = open_write(fd, compress_level); } if (fp != NULL) fp->owned_file = 1; return fp; } BGZF* bgzf_fdopen(int fd, const char * __restrict mode) { if (fd == -1) return 0; if (mode[0] == 'r' || mode[0] == 'R') { return open_read(fd); } else if (mode[0] == 'w' || mode[0] == 'W') { int i, compress_level = -1; for (i = 0; mode[i]; ++i) if (mode[i] >= '0' && mode[i] <= '9') break; if (mode[i]) compress_level = (int)mode[i] - '0'; if (strchr(mode, 'u')) compress_level = 0; return open_write(fd, compress_level); } else { return NULL; } } static int deflate_block(BGZF* fp, int block_length) { // Deflate the block in fp->uncompressed_block into fp->compressed_block. // Also adds an extra field that stores the compressed block length. bgzf_byte_t* buffer = fp->compressed_block; int buffer_size = fp->compressed_block_size; // Init gzip header buffer[0] = GZIP_ID1; buffer[1] = GZIP_ID2; buffer[2] = CM_DEFLATE; buffer[3] = FLG_FEXTRA; buffer[4] = 0; // mtime buffer[5] = 0; buffer[6] = 0; buffer[7] = 0; buffer[8] = 0; buffer[9] = OS_UNKNOWN; buffer[10] = BGZF_XLEN; buffer[11] = 0; buffer[12] = BGZF_ID1; buffer[13] = BGZF_ID2; buffer[14] = BGZF_LEN; buffer[15] = 0; buffer[16] = 0; // placeholder for block length buffer[17] = 0; // loop to retry for blocks that do not compress enough int input_length = block_length; int compressed_length = 0; while (1) { z_stream zs; zs.zalloc = NULL; zs.zfree = NULL; zs.next_in = fp->uncompressed_block; zs.avail_in = input_length; zs.next_out = (void*)&buffer[BLOCK_HEADER_LENGTH]; zs.avail_out = buffer_size - BLOCK_HEADER_LENGTH - BLOCK_FOOTER_LENGTH; int status = deflateInit2(&zs, fp->compress_level, Z_DEFLATED, GZIP_WINDOW_BITS, Z_DEFAULT_MEM_LEVEL, Z_DEFAULT_STRATEGY); if (status != Z_OK) { report_error(fp, "deflate init failed"); return -1; } status = deflate(&zs, Z_FINISH); if (status != Z_STREAM_END) { deflateEnd(&zs); if (status == Z_OK) { // Not enough space in buffer. // Can happen in the rare case the input doesn't compress enough. // Reduce the amount of input until it fits. input_length -= 1024; if (input_length <= 0) { // should never happen report_error(fp, "input reduction failed"); return -1; } continue; } report_error(fp, "deflate failed"); return -1; } status = deflateEnd(&zs); if (status != Z_OK) { report_error(fp, "deflate end failed"); return -1; } compressed_length = zs.total_out; compressed_length += BLOCK_HEADER_LENGTH + BLOCK_FOOTER_LENGTH; if (compressed_length > MAX_BLOCK_SIZE) { // should never happen report_error(fp, "deflate overflow"); return -1; } break; } packInt16((uint8_t*)&buffer[16], compressed_length-1); uint32_t crc = crc32(0L, NULL, 0L); crc = crc32(crc, fp->uncompressed_block, input_length); packInt32((uint8_t*)&buffer[compressed_length-8], crc); packInt32((uint8_t*)&buffer[compressed_length-4], input_length); int remaining = block_length - input_length; if (remaining > 0) { if (remaining > input_length) { // should never happen (check so we can use memcpy) report_error(fp, "remainder too large"); return -1; } memcpy(fp->uncompressed_block, fp->uncompressed_block + input_length, remaining); } fp->block_offset = remaining; return compressed_length; } static int inflate_block(BGZF* fp, int block_length) { // Inflate the block in fp->compressed_block into fp->uncompressed_block z_stream zs; int status; zs.zalloc = NULL; zs.zfree = NULL; zs.next_in = fp->compressed_block + 18; zs.avail_in = block_length - 16; zs.next_out = fp->uncompressed_block; zs.avail_out = fp->uncompressed_block_size; status = inflateInit2(&zs, GZIP_WINDOW_BITS); if (status != Z_OK) { report_error(fp, "inflate init failed"); return -1; } status = inflate(&zs, Z_FINISH); if (status != Z_STREAM_END) { inflateEnd(&zs); report_error(fp, "inflate failed"); return -1; } status = inflateEnd(&zs); if (status != Z_OK) { report_error(fp, "inflate failed"); return -1; } return zs.total_out; } static int check_header(const bgzf_byte_t* header) { return (header[0] == GZIP_ID1 && header[1] == (bgzf_byte_t) GZIP_ID2 && header[2] == Z_DEFLATED && (header[3] & FLG_FEXTRA) != 0 && unpackInt16((uint8_t*)&header[10]) == BGZF_XLEN && header[12] == BGZF_ID1 && header[13] == BGZF_ID2 && unpackInt16((uint8_t*)&header[14]) == BGZF_LEN); } static void free_cache(BGZF *fp) { khint_t k; khash_t(cache) *h = (khash_t(cache)*)fp->cache; if (fp->open_mode != 'r') return; for (k = kh_begin(h); k < kh_end(h); ++k) if (kh_exist(h, k)) free(kh_val(h, k).block); kh_destroy(cache, h); } static int load_block_from_cache(BGZF *fp, int64_t block_address) { khint_t k; cache_t *p; khash_t(cache) *h = (khash_t(cache)*)fp->cache; k = kh_get(cache, h, block_address); if (k == kh_end(h)) return 0; p = &kh_val(h, k); if (fp->block_length != 0) fp->block_offset = 0; fp->block_address = block_address; fp->block_length = p->size; memcpy(fp->uncompressed_block, p->block, MAX_BLOCK_SIZE); #ifdef _USE_KNETFILE knet_seek(fp->x.fpr, p->end_offset, SEEK_SET); #else fseeko(fp->file, p->end_offset, SEEK_SET); #endif return p->size; } static void cache_block(BGZF *fp, int size) { int ret; khint_t k; cache_t *p; khash_t(cache) *h = (khash_t(cache)*)fp->cache; if (MAX_BLOCK_SIZE >= fp->cache_size) return; if ((kh_size(h) + 1) * MAX_BLOCK_SIZE > fp->cache_size) { /* A better way would be to remove the oldest block in the * cache, but here we remove a random one for simplicity. This * should not have a big impact on performance. */ for (k = kh_begin(h); k < kh_end(h); ++k) if (kh_exist(h, k)) break; if (k < kh_end(h)) { free(kh_val(h, k).block); kh_del(cache, h, k); } } k = kh_put(cache, h, fp->block_address, &ret); if (ret == 0) return; // if this happens, a bug! p = &kh_val(h, k); p->size = fp->block_length; p->end_offset = fp->block_address + size; p->block = malloc(MAX_BLOCK_SIZE); memcpy(kh_val(h, k).block, fp->uncompressed_block, MAX_BLOCK_SIZE); } int bgzf_read_block(BGZF* fp) { bgzf_byte_t header[BLOCK_HEADER_LENGTH]; int count, size = 0, block_length, remaining; #ifdef _USE_KNETFILE int64_t block_address = knet_tell(fp->x.fpr); if (load_block_from_cache(fp, block_address)) return 0; count = knet_read(fp->x.fpr, header, sizeof(header)); #else int64_t block_address = ftello(fp->file); if (load_block_from_cache(fp, block_address)) return 0; count = fread(header, 1, sizeof(header), fp->file); #endif if (count == 0) { fp->block_length = 0; return 0; } size = count; if (count != sizeof(header)) { report_error(fp, "read failed"); return -1; } if (!check_header(header)) { report_error(fp, "invalid block header"); return -1; } block_length = unpackInt16((uint8_t*)&header[16]) + 1; bgzf_byte_t* compressed_block = (bgzf_byte_t*) fp->compressed_block; memcpy(compressed_block, header, BLOCK_HEADER_LENGTH); remaining = block_length - BLOCK_HEADER_LENGTH; #ifdef _USE_KNETFILE count = knet_read(fp->x.fpr, &compressed_block[BLOCK_HEADER_LENGTH], remaining); #else count = fread(&compressed_block[BLOCK_HEADER_LENGTH], 1, remaining, fp->file); #endif if (count != remaining) { report_error(fp, "read failed"); return -1; } size += count; count = inflate_block(fp, block_length); if (count < 0) return -1; if (fp->block_length != 0) { // Do not reset offset if this read follows a seek. fp->block_offset = 0; } fp->block_address = block_address; fp->block_length = count; cache_block(fp, size); return 0; } int bgzf_read(BGZF* fp, void* data, int length) { if (length <= 0) { return 0; } if (fp->open_mode != 'r') { report_error(fp, "file not open for reading"); return -1; } int bytes_read = 0; bgzf_byte_t* output = data; while (bytes_read < length) { int copy_length, available = fp->block_length - fp->block_offset; bgzf_byte_t *buffer; if (available <= 0) { if (bgzf_read_block(fp) != 0) { return -1; } available = fp->block_length - fp->block_offset; if (available <= 0) { break; } } copy_length = bgzf_min(length-bytes_read, available); buffer = fp->uncompressed_block; memcpy(output, buffer + fp->block_offset, copy_length); fp->block_offset += copy_length; output += copy_length; bytes_read += copy_length; } if (fp->block_offset == fp->block_length) { #ifdef _USE_KNETFILE fp->block_address = knet_tell(fp->x.fpr); #else fp->block_address = ftello(fp->file); #endif fp->block_offset = 0; fp->block_length = 0; } return bytes_read; } int bgzf_flush(BGZF* fp) { while (fp->block_offset > 0) { int count, block_length; block_length = deflate_block(fp, fp->block_offset); if (block_length < 0) return -1; #ifdef _USE_KNETFILE count = fwrite(fp->compressed_block, 1, block_length, fp->x.fpw); #else count = fwrite(fp->compressed_block, 1, block_length, fp->file); #endif if (count != block_length) { report_error(fp, "write failed"); return -1; } fp->block_address += block_length; } return 0; } int bgzf_flush_try(BGZF *fp, int size) { if (fp->block_offset + size > fp->uncompressed_block_size) return bgzf_flush(fp); return -1; } int bgzf_write(BGZF* fp, const void* data, int length) { const bgzf_byte_t *input = data; int block_length, bytes_written; if (fp->open_mode != 'w') { report_error(fp, "file not open for writing"); return -1; } if (fp->uncompressed_block == NULL) fp->uncompressed_block = malloc(fp->uncompressed_block_size); input = data; block_length = fp->uncompressed_block_size; bytes_written = 0; while (bytes_written < length) { int copy_length = bgzf_min(block_length - fp->block_offset, length - bytes_written); bgzf_byte_t* buffer = fp->uncompressed_block; memcpy(buffer + fp->block_offset, input, copy_length); fp->block_offset += copy_length; input += copy_length; bytes_written += copy_length; if (fp->block_offset == block_length) { if (bgzf_flush(fp) != 0) { break; } } } return bytes_written; } int bgzf_close(BGZF* fp) { if (fp->open_mode == 'w') { if (bgzf_flush(fp) != 0) return -1; { // add an empty block int count, block_length = deflate_block(fp, 0); #ifdef _USE_KNETFILE count = fwrite(fp->compressed_block, 1, block_length, fp->x.fpw); #else count = fwrite(fp->compressed_block, 1, block_length, fp->file); #endif } #ifdef _USE_KNETFILE if (fflush(fp->x.fpw) != 0) { #else if (fflush(fp->file) != 0) { #endif report_error(fp, "flush failed"); return -1; } } if (fp->owned_file) { #ifdef _USE_KNETFILE int ret; if (fp->open_mode == 'w') ret = fclose(fp->x.fpw); else ret = knet_close(fp->x.fpr); if (ret != 0) return -1; #else if (fclose(fp->file) != 0) return -1; #endif } free(fp->uncompressed_block); free(fp->compressed_block); free_cache(fp); free(fp); return 0; } void bgzf_set_cache_size(BGZF *fp, int cache_size) { if (fp) fp->cache_size = cache_size; } int bgzf_check_EOF(BGZF *fp) { static uint8_t magic[28] = "\037\213\010\4\0\0\0\0\0\377\6\0\102\103\2\0\033\0\3\0\0\0\0\0\0\0\0\0"; uint8_t buf[28]; off_t offset; #ifdef _USE_KNETFILE offset = knet_tell(fp->x.fpr); if (knet_seek(fp->x.fpr, -28, SEEK_END) != 0) return -1; knet_read(fp->x.fpr, buf, 28); knet_seek(fp->x.fpr, offset, SEEK_SET); #else offset = ftello(fp->file); if (fseeko(fp->file, -28, SEEK_END) != 0) return -1; fread(buf, 1, 28, fp->file); fseeko(fp->file, offset, SEEK_SET); #endif return (memcmp(magic, buf, 28) == 0)? 1 : 0; } int64_t bgzf_seek(BGZF* fp, int64_t pos, int where) { int block_offset; int64_t block_address; if (fp->open_mode != 'r') { report_error(fp, "file not open for read"); return -1; } if (where != SEEK_SET) { report_error(fp, "unimplemented seek option"); return -1; } block_offset = pos & 0xFFFF; block_address = (pos >> 16) & 0xFFFFFFFFFFFFLL; #ifdef _USE_KNETFILE if (knet_seek(fp->x.fpr, block_address, SEEK_SET) != 0) { #else if (fseeko(fp->file, block_address, SEEK_SET) != 0) { #endif report_error(fp, "seek failed"); return -1; } fp->block_length = 0; // indicates current block is not loaded fp->block_address = block_address; fp->block_offset = block_offset; return 0; } genometools-1.5.1/src/external/samtools-0.1.18/bgzf.h000066400000000000000000000113331211610345200221430ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008 Broad Institute / Massachusetts Institute of Technology Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef __BGZF_H #define __BGZF_H #include #include #ifndef S_SPLINT_S #include #endif #ifdef _USE_KNETFILE #include "knetfile.h" #endif //typedef int8_t bool; /*@ignore@*/ typedef struct { int file_descriptor; char open_mode; // 'r' or 'w' int16_t owned_file, compress_level; #ifdef _USE_KNETFILE union { knetFile *fpr; FILE *fpw; } x; #else FILE* file; #endif int uncompressed_block_size; int compressed_block_size; void* uncompressed_block; void* compressed_block; int64_t block_address; int block_length; int block_offset; int cache_size; const char* error; void *cache; // a pointer to a hash table } BGZF; #ifdef __cplusplus extern "C" { #endif /* * Open an existing file descriptor for reading or writing. * Mode must be either "r" or "w". * A subsequent bgzf_close will not close the file descriptor. * Returns null on error. */ #ifdef S_SPLINT_S BGZF* bgzf_fdopen(int fd, const char* mode); #else BGZF* bgzf_fdopen(int fd, const char* __restrict mode); #endif /* * Open the specified file for reading or writing. * Mode must be either "r" or "w". * Returns null on error. */ #ifdef S_SPLINT_S BGZF* bgzf_open(const char* path, const char* mode); #else BGZF* bgzf_open(const char* path, const char* __restrict mode); #endif /* * Close the BGZ file and free all associated resources. * Does not close the underlying file descriptor if created with bgzf_fdopen. * Returns zero on success, -1 on error. */ int bgzf_close(BGZF* fp); /* * Read up to length bytes from the file storing into data. * Returns the number of bytes actually read. * Returns zero on end of file. * Returns -1 on error. */ int bgzf_read(BGZF* fp, void* data, int length); /* * Write length bytes from data to the file. * Returns the number of bytes written. * Returns -1 on error. */ int bgzf_write(BGZF* fp, const void* data, int length); /* * Return a virtual file pointer to the current location in the file. * No interpetation of the value should be made, other than a subsequent * call to bgzf_seek can be used to position the file at the same point. * Return value is non-negative on success. * Returns -1 on error. */ #define bgzf_tell(fp) ((fp->block_address << 16) | (fp->block_offset & 0xFFFF)) /* * Set the file to read from the location specified by pos, which must * be a value previously returned by bgzf_tell for this file (but not * necessarily one returned by this file handle). * The where argument must be SEEK_SET. * Seeking on a file opened for write is not supported. * Returns zero on success, -1 on error. */ int64_t bgzf_seek(BGZF* fp, int64_t pos, int where); /* * Set the cache size. Zero to disable. By default, caching is * disabled. The recommended cache size for frequent random access is * about 8M bytes. */ void bgzf_set_cache_size(BGZF *fp, int cache_size); int bgzf_check_EOF(BGZF *fp); int bgzf_read_block(BGZF* fp); int bgzf_flush(BGZF* fp); int bgzf_flush_try(BGZF *fp, int size); int bgzf_check_bgzf(const char *fn); #ifdef __cplusplus } #endif static inline int bgzf_getc(BGZF *fp) { int c; if (fp->block_offset >= fp->block_length) { if (bgzf_read_block(fp) != 0) return -2; /* error */ if (fp->block_length == 0) return -1; /* end-of-file */ } c = ((unsigned char*)fp->uncompressed_block)[fp->block_offset++]; if (fp->block_offset == fp->block_length) { #ifdef _USE_KNETFILE fp->block_address = knet_tell(fp->x.fpr); #else fp->block_address = ftello(fp->file); #endif fp->block_offset = 0; fp->block_length = 0; } return c; } /*@end@*/ #endif genometools-1.5.1/src/external/samtools-0.1.18/bgzip.c000066400000000000000000000134171211610345200223260ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008 Broad Institute / Massachusetts Institute of Technology Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include #include #include #include #include #include #include "bgzf.h" static const int WINDOW_SIZE = 64 * 1024; static int bgzip_main_usage() { fprintf(stderr, "\n"); fprintf(stderr, "Usage: bgzip [options] [file] ...\n\n"); fprintf(stderr, "Options: -c write on standard output, keep original files unchanged\n"); fprintf(stderr, " -d decompress\n"); fprintf(stderr, " -f overwrite files without asking\n"); fprintf(stderr, " -b INT decompress at virtual file pointer INT\n"); fprintf(stderr, " -s INT decompress INT bytes in the uncompressed file\n"); fprintf(stderr, " -h give this help\n"); fprintf(stderr, "\n"); return 1; } static int write_open(const char *fn, int is_forced) { int fd = -1; char c; if (!is_forced) { if ((fd = open(fn, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0666)) < 0 && errno == EEXIST) { fprintf(stderr, "[bgzip] %s already exists; do you wish to overwrite (y or n)? ", fn); scanf("%c", &c); if (c != 'Y' && c != 'y') { fprintf(stderr, "[bgzip] not overwritten\n"); exit(1); } } } if (fd < 0) { if ((fd = open(fn, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0) { fprintf(stderr, "[bgzip] %s: Fail to write\n", fn); exit(1); } } return fd; } static void fail(BGZF* fp) { fprintf(stderr, "Error: %s\n", fp->error); exit(1); } int main(int argc, char **argv) { int c, compress, pstdout, is_forced; BGZF *fp; void *buffer; long start, end, size; compress = 1; pstdout = 0; start = 0; size = -1; end = -1; is_forced = 0; while((c = getopt(argc, argv, "cdhfb:s:")) >= 0){ switch(c){ case 'h': return bgzip_main_usage(); case 'd': compress = 0; break; case 'c': pstdout = 1; break; case 'b': start = atol(optarg); break; case 's': size = atol(optarg); break; case 'f': is_forced = 1; break; } } if (size >= 0) end = start + size; if (end >= 0 && end < start) { fprintf(stderr, "[bgzip] Illegal region: [%ld, %ld]\n", start, end); return 1; } if (compress == 1) { struct stat sbuf; int f_src = fileno(stdin); int f_dst = fileno(stdout); if ( argc>optind ) { if ( stat(argv[optind],&sbuf)<0 ) { fprintf(stderr, "[bgzip] %s: %s\n", strerror(errno), argv[optind]); return 1; } if ((f_src = open(argv[optind], O_RDONLY)) < 0) { fprintf(stderr, "[bgzip] %s: %s\n", strerror(errno), argv[optind]); return 1; } if (pstdout) f_dst = fileno(stdout); else { char *name = malloc(strlen(argv[optind]) + 5); strcpy(name, argv[optind]); strcat(name, ".gz"); f_dst = write_open(name, is_forced); if (f_dst < 0) return 1; free(name); } } else if (!pstdout && isatty(fileno((FILE *)stdout)) ) return bgzip_main_usage(); fp = bgzf_fdopen(f_dst, "w"); buffer = malloc(WINDOW_SIZE); while ((c = read(f_src, buffer, WINDOW_SIZE)) > 0) if (bgzf_write(fp, buffer, c) < 0) fail(fp); // f_dst will be closed here if (bgzf_close(fp) < 0) fail(fp); if (argc > optind && !pstdout) unlink(argv[optind]); free(buffer); close(f_src); return 0; } else { struct stat sbuf; int f_dst; if ( argc>optind ) { if ( stat(argv[optind],&sbuf)<0 ) { fprintf(stderr, "[bgzip] %s: %s\n", strerror(errno), argv[optind]); return 1; } char *name; int len = strlen(argv[optind]); if ( strcmp(argv[optind]+len-3,".gz") ) { fprintf(stderr, "[bgzip] %s: unknown suffix -- ignored\n", argv[optind]); return 1; } fp = bgzf_open(argv[optind], "r"); if (fp == NULL) { fprintf(stderr, "[bgzip] Could not open file: %s\n", argv[optind]); return 1; } if (pstdout) { f_dst = fileno(stdout); } else { name = strdup(argv[optind]); name[strlen(name) - 3] = '\0'; f_dst = write_open(name, is_forced); free(name); } } else if (!pstdout && isatty(fileno((FILE *)stdin)) ) return bgzip_main_usage(); else { f_dst = fileno(stdout); fp = bgzf_fdopen(fileno(stdin), "r"); if (fp == NULL) { fprintf(stderr, "[bgzip] Could not read from stdin: %s\n", strerror(errno)); return 1; } } buffer = malloc(WINDOW_SIZE); if (bgzf_seek(fp, start, SEEK_SET) < 0) fail(fp); while (1) { if (end < 0) c = bgzf_read(fp, buffer, WINDOW_SIZE); else c = bgzf_read(fp, buffer, (end - start > WINDOW_SIZE)? WINDOW_SIZE:(end - start)); if (c == 0) break; if (c < 0) fail(fp); start += c; write(f_dst, buffer, c); if (end >= 0 && start >= end) break; } free(buffer); if (bgzf_close(fp) < 0) fail(fp); if (!pstdout) unlink(argv[optind]); return 0; } } genometools-1.5.1/src/external/samtools-0.1.18/cut_target.c000066400000000000000000000130431211610345200233470ustar00rootroot00000000000000#include #include #include #include "bam.h" #include "errmod.h" #include "faidx.h" #define ERR_DEP 0.83f typedef struct { int e[2][3], p[2][2]; } score_param_t; /* Note that although the two matrics have 10 parameters in total, only 4 * (probably 3) are free. Changing the scoring matrices in a sort of symmetric * way will not change the result. */ static score_param_t g_param = { {{0,0,0},{-4,1,6}}, {{0,-14000}, {0,0}} }; typedef struct { int min_baseQ, tid, max_bases; uint16_t *bases; bamFile fp; bam_header_t *h; char *ref; faidx_t *fai; errmod_t *em; } ct_t; static uint16_t gencns(ct_t *g, int n, const bam_pileup1_t *plp) { int i, j, ret, tmp, k, sum[4], qual; float q[16]; if (n > g->max_bases) { // enlarge g->bases g->max_bases = n; kroundup32(g->max_bases); g->bases = realloc(g->bases, g->max_bases * 2); } for (i = k = 0; i < n; ++i) { const bam_pileup1_t *p = plp + i; uint8_t *seq; int q, baseQ, b; if (p->is_refskip || p->is_del) continue; baseQ = bam1_qual(p->b)[p->qpos]; if (baseQ < g->min_baseQ) continue; seq = bam1_seq(p->b); b = bam_nt16_nt4_table[bam1_seqi(seq, p->qpos)]; if (b > 3) continue; q = baseQ < p->b->core.qual? baseQ : p->b->core.qual; if (q < 4) q = 4; if (q > 63) q = 63; g->bases[k++] = q<<5 | bam1_strand(p->b)<<4 | b; } if (k == 0) return 0; errmod_cal(g->em, k, 4, g->bases, q); for (i = 0; i < 4; ++i) sum[i] = (int)(q[i<<2|i] + .499) << 2 | i; for (i = 1; i < 4; ++i) // insertion sort for (j = i; j > 0 && sum[j] < sum[j-1]; --j) tmp = sum[j], sum[j] = sum[j-1], sum[j-1] = tmp; qual = (sum[1]>>2) - (sum[0]>>2); k = k < 256? k : 255; ret = (qual < 63? qual : 63) << 2 | (sum[0]&3); return ret<<8|k; } static void process_cns(bam_header_t *h, int tid, int l, uint16_t *cns) { int i, f[2][2], *prev, *curr, *swap_tmp, s; uint8_t *b; // backtrack array b = calloc(l, 1); f[0][0] = f[0][1] = 0; prev = f[0]; curr = f[1]; // fill the backtrack matrix for (i = 0; i < l; ++i) { int c = (cns[i] == 0)? 0 : (cns[i]>>8 == 0)? 1 : 2; int tmp0, tmp1; // compute f[0] tmp0 = prev[0] + g_param.e[0][c] + g_param.p[0][0]; // (s[i+1],s[i])=(0,0) tmp1 = prev[1] + g_param.e[0][c] + g_param.p[1][0]; // (0,1) if (tmp0 > tmp1) curr[0] = tmp0, b[i] = 0; else curr[0] = tmp1, b[i] = 1; // compute f[1] tmp0 = prev[0] + g_param.e[1][c] + g_param.p[0][1]; // (s[i+1],s[i])=(1,0) tmp1 = prev[1] + g_param.e[1][c] + g_param.p[1][1]; // (1,1) if (tmp0 > tmp1) curr[1] = tmp0, b[i] |= 0<<1; else curr[1] = tmp1, b[i] |= 1<<1; // swap swap_tmp = prev; prev = curr; curr = swap_tmp; } // backtrack s = prev[0] > prev[1]? 0 : 1; for (i = l - 1; i > 0; --i) { b[i] |= s<<2; s = b[i]>>s&1; } // print for (i = 0, s = -1; i <= l; ++i) { if (i == l || ((b[i]>>2&3) == 0 && s >= 0)) { if (s >= 0) { int j; printf("%s:%d-%d\t0\t%s\t%d\t60\t%dM\t*\t0\t0\t", h->target_name[tid], s+1, i, h->target_name[tid], s+1, i-s); for (j = s; j < i; ++j) { int c = cns[j]>>8; if (c == 0) putchar('N'); else putchar("ACGT"[c&3]); } putchar('\t'); for (j = s; j < i; ++j) putchar(33 + (cns[j]>>8>>2)); putchar('\n'); } //if (s >= 0) printf("%s\t%d\t%d\t%d\n", h->target_name[tid], s, i, i - s); s = -1; } else if ((b[i]>>2&3) && s < 0) s = i; } free(b); } static int read_aln(void *data, bam1_t *b) { extern int bam_prob_realn_core(bam1_t *b, const char *ref, int flag); ct_t *g = (ct_t*)data; int ret, len; ret = bam_read1(g->fp, b); if (ret >= 0 && g->fai && b->core.tid >= 0 && (b->core.flag&4) == 0) { if (b->core.tid != g->tid) { // then load the sequence free(g->ref); g->ref = fai_fetch(g->fai, g->h->target_name[b->core.tid], &len); g->tid = b->core.tid; } bam_prob_realn_core(b, g->ref, 1<<1|1); } return ret; } int main_cut_target(int argc, char *argv[]) { int c, tid, pos, n, lasttid = -1, lastpos = -1, l, max_l; const bam_pileup1_t *p; bam_plp_t plp; uint16_t *cns; ct_t g; memset(&g, 0, sizeof(ct_t)); g.min_baseQ = 13; g.tid = -1; while ((c = getopt(argc, argv, "f:Q:i:o:0:1:2:")) >= 0) { switch (c) { case 'Q': g.min_baseQ = atoi(optarg); break; // quality cutoff case 'i': g_param.p[0][1] = -atoi(optarg); break; // 0->1 transition (in) PENALTY case '0': g_param.e[1][0] = atoi(optarg); break; // emission SCORE case '1': g_param.e[1][1] = atoi(optarg); break; case '2': g_param.e[1][2] = atoi(optarg); break; case 'f': g.fai = fai_load(optarg); if (g.fai == 0) fprintf(stderr, "[%s] fail to load the fasta index.\n", __func__); break; } } if (argc == optind) { fprintf(stderr, "Usage: samtools targetcut [-Q minQ] [-i inPen] [-0 em0] [-1 em1] [-2 em2] [-f ref] \n"); return 1; } l = max_l = 0; cns = 0; g.fp = strcmp(argv[optind], "-")? bam_open(argv[optind], "r") : bam_dopen(fileno(stdin), "r"); g.h = bam_header_read(g.fp); g.em = errmod_init(1 - ERR_DEP); plp = bam_plp_init(read_aln, &g); while ((p = bam_plp_auto(plp, &tid, &pos, &n)) != 0) { if (tid < 0) break; if (tid != lasttid) { // change of chromosome if (cns) process_cns(g.h, lasttid, l, cns); if (max_l < g.h->target_len[tid]) { max_l = g.h->target_len[tid]; kroundup32(max_l); cns = realloc(cns, max_l * 2); } l = g.h->target_len[tid]; memset(cns, 0, max_l * 2); lasttid = tid; } cns[pos] = gencns(&g, n, p); lastpos = pos; } process_cns(g.h, lasttid, l, cns); free(cns); bam_header_destroy(g.h); bam_plp_destroy(plp); bam_close(g.fp); if (g.fai) { fai_destroy(g.fai); free(g.ref); } errmod_destroy(g.em); free(g.bases); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/errmod.c000066400000000000000000000066351211610345200225070ustar00rootroot00000000000000#include #include "errmod.h" #include "ksort.h" KSORT_INIT_GENERIC(uint16_t) typedef struct __errmod_coef_t { double *fk, *beta, *lhet; } errmod_coef_t; typedef struct { double fsum[16], bsum[16]; uint32_t c[16]; } call_aux_t; static errmod_coef_t *cal_coef(double depcorr, double eta) { int k, n, q; long double sum, sum1; double *lC; errmod_coef_t *ec; ec = calloc(1, sizeof(errmod_coef_t)); // initialize ->fk ec->fk = (double*)calloc(256, sizeof(double)); ec->fk[0] = 1.0; for (n = 1; n != 256; ++n) ec->fk[n] = pow(1. - depcorr, n) * (1.0 - eta) + eta; // initialize ->coef ec->beta = (double*)calloc(256 * 256 * 64, sizeof(double)); lC = (double*)calloc(256 * 256, sizeof(double)); for (n = 1; n != 256; ++n) { double lgn = lgamma(n+1); for (k = 1; k <= n; ++k) lC[n<<8|k] = lgn - lgamma(k+1) - lgamma(n-k+1); } for (q = 1; q != 64; ++q) { double e = pow(10.0, -q/10.0); double le = log(e); double le1 = log(1.0 - e); for (n = 1; n <= 255; ++n) { double *beta = ec->beta + (q<<16|n<<8); sum1 = sum = 0.0; for (k = n; k >= 0; --k, sum1 = sum) { sum = sum1 + expl(lC[n<<8|k] + k*le + (n-k)*le1); beta[k] = -10. / M_LN10 * logl(sum1 / sum); } } } // initialize ->lhet ec->lhet = (double*)calloc(256 * 256, sizeof(double)); for (n = 0; n < 256; ++n) for (k = 0; k < 256; ++k) ec->lhet[n<<8|k] = lC[n<<8|k] - M_LN2 * n; free(lC); return ec; } errmod_t *errmod_init(float depcorr) { errmod_t *em; em = (errmod_t*)calloc(1, sizeof(errmod_t)); em->depcorr = depcorr; em->coef = cal_coef(depcorr, 0.03); return em; } void errmod_destroy(errmod_t *em) { if (em == 0) return; free(em->coef->lhet); free(em->coef->fk); free(em->coef->beta); free(em->coef); free(em); } // qual:6, strand:1, base:4 int errmod_cal(const errmod_t *em, int n, int m, uint16_t *bases, float *q) { call_aux_t aux; int i, j, k, w[32]; if (m > m) return -1; memset(q, 0, m * m * sizeof(float)); if (n == 0) return 0; // calculate aux.esum and aux.fsum if (n > 255) { // then sample 255 bases ks_shuffle(uint16_t, n, bases); n = 255; } ks_introsort(uint16_t, n, bases); memset(w, 0, 32 * sizeof(int)); memset(&aux, 0, sizeof(call_aux_t)); for (j = n - 1; j >= 0; --j) { // calculate esum and fsum uint16_t b = bases[j]; int q = b>>5 < 4? 4 : b>>5; if (q > 63) q = 63; k = b&0x1f; aux.fsum[k&0xf] += em->coef->fk[w[k]]; aux.bsum[k&0xf] += em->coef->fk[w[k]] * em->coef->beta[q<<16|n<<8|aux.c[k&0xf]]; ++aux.c[k&0xf]; ++w[k]; } // generate likelihood for (j = 0; j != m; ++j) { float tmp1, tmp3; int tmp2, bar_e; // homozygous for (k = 0, tmp1 = tmp3 = 0.0, tmp2 = 0; k != m; ++k) { if (k == j) continue; tmp1 += aux.bsum[k]; tmp2 += aux.c[k]; tmp3 += aux.fsum[k]; } if (tmp2) { bar_e = (int)(tmp1 / tmp3 + 0.499); if (bar_e > 63) bar_e = 63; q[j*m+j] = tmp1; } // heterozygous for (k = j + 1; k < m; ++k) { int cjk = aux.c[j] + aux.c[k]; for (i = 0, tmp2 = 0, tmp1 = tmp3 = 0.0; i < m; ++i) { if (i == j || i == k) continue; tmp1 += aux.bsum[i]; tmp2 += aux.c[i]; tmp3 += aux.fsum[i]; } if (tmp2) { bar_e = (int)(tmp1 / tmp3 + 0.499); if (bar_e > 63) bar_e = 63; q[j*m+k] = q[k*m+j] = -4.343 * em->coef->lhet[cjk<<8|aux.c[k]] + tmp1; } else q[j*m+k] = q[k*m+j] = -4.343 * em->coef->lhet[cjk<<8|aux.c[k]]; // all the bases are either j or k } for (k = 0; k != m; ++k) if (q[j*m+k] < 0.0) q[j*m+k] = 0.0; } return 0; } genometools-1.5.1/src/external/samtools-0.1.18/errmod.h000066400000000000000000000006721211610345200225070ustar00rootroot00000000000000#ifndef ERRMOD_H #define ERRMOD_H #include struct __errmod_coef_t; typedef struct { double depcorr; struct __errmod_coef_t *coef; } errmod_t; errmod_t *errmod_init(float depcorr); void errmod_destroy(errmod_t *em); /* n: number of bases m: maximum base bases[i]: qual:6, strand:1, base:4 q[i*m+j]: phred-scaled likelihood of (i,j) */ int errmod_cal(const errmod_t *em, int n, int m, uint16_t *bases, float *q); #endif genometools-1.5.1/src/external/samtools-0.1.18/examples/000077500000000000000000000000001211610345200226575ustar00rootroot00000000000000genometools-1.5.1/src/external/samtools-0.1.18/examples/00README.txt000066400000000000000000000015661211610345200245250ustar00rootroot00000000000000File ex1.fa contains two sequences cut from the human genome build36. They were exatracted with command: samtools faidx human_b36.fa 2:2043966-2045540 20:67967-69550 Sequence names were changed manually for simplicity. File ex1.sam.gz contains MAQ alignments exatracted with: (samtools view NA18507_maq.bam 2:2044001-2045500; samtools view NA18507_maq.bam 20:68001-69500) and processed with `samtools fixmate' to make it self-consistent as a standalone alignment. To try samtools, you may run the following commands: samtools faidx ex1.fa # index the reference FASTA samtools import ex1.fa.fai ex1.sam.gz ex1.bam # SAM->BAM samtools index ex1.bam # index BAM samtools tview ex1.bam ex1.fa # view alignment samtools pileup -cf ex1.fa ex1.bam # pileup and consensus samtools pileup -cf ex1.fa -t ex1.fa.fai ex1.sam.gz genometools-1.5.1/src/external/samtools-0.1.18/examples/Makefile000066400000000000000000000036571211610345200243320ustar00rootroot00000000000000all:../libbam.a ../samtools ../bcftools/bcftools \ ex1.glf ex1.pileup.gz ex1.bam.bai ex1f-rmduppe.bam ex1f-rmdupse.bam ex1.glfview.gz ex1.bcf calDepth @echo; echo \# You can now launch the viewer with: \'samtools tview ex1.bam ex1.fa\'; echo; ex1.fa.fai:ex1.fa ../samtools faidx ex1.fa ex1.bam:ex1.sam.gz ex1.fa.fai ../samtools import ex1.fa.fai ex1.sam.gz ex1.bam ex1.bam.bai:ex1.bam ../samtools index ex1.bam ex1.pileup.gz:ex1.bam ex1.fa ../samtools mpileup -cf ex1.fa ex1.bam | gzip > ex1.pileup.gz ex1.glf:ex1.bam ex1.fa ../samtools mpileup -gf ex1.fa ex1.bam > ex1.glf ex1.glfview.gz:ex1.glf ../samtools glfview ex1.glf | gzip > ex1.glfview.gz ex1a.bam:ex1.bam ../samtools view -h ex1.bam | awk 'BEGIN{FS=OFS="\t"}{if(/^@/)print;else{$$1=$$1"a";print}}' | ../samtools view -bS - > $@ ex1b.bam:ex1.bam ../samtools view -h ex1.bam | awk 'BEGIN{FS=OFS="\t"}{if(/^@/)print;else{$$1=$$1"b";print}}' | ../samtools view -bS - > $@ ex1f.rg: (echo "@RG ID:ex1 LB:ex1 SM:ex1"; echo "@RG ID:ex1a LB:ex1 SM:ex1"; echo "@RG ID:ex1b LB:ex1b SM:ex1b") > $@ ex1f.bam:ex1.bam ex1a.bam ex1b.bam ex1f.rg ../samtools merge -rh ex1f.rg $@ ex1.bam ex1a.bam ex1b.bam ex1f-rmduppe.bam:ex1f.bam ../samtools rmdup ex1f.bam $@ ex1f-rmdupse.bam:ex1f.bam ../samtools rmdup -S ex1f.bam $@ ex1.bcf:ex1.bam ex1.fa.fai ../samtools mpileup -gf ex1.fa ex1.bam > $@ ../bcftools/bcftools: (cd ../bcftools; make bcftools) ../samtools: (cd ..; make samtools) ../libbam.a: (cd ..; make libbam.a) calDepth:../libbam.a calDepth.c gcc -g -Wall -O2 -I.. calDepth.c -o $@ -L.. -lbam -lm -lz clean: rm -fr *.bam *.bai *.glf* *.fai *.pileup* *~ calDepth *.dSYM ex1*.rg ex1.bcf # ../samtools pileup ex1.bam|perl -ape '$_=$F[4];s/(\d+)(??{".{$1}"})|\^.//g;@_=(tr/A-Z//,tr/a-z//);$_=join("\t",@F[0,1],@_)."\n"' # ../samtools pileup -cf ex1.fa ex1.bam|perl -ape '$_=$F[8];s/\^.//g;s/(\d+)(??{".{$1}"})|\^.//g;@_=(tr/A-Za-z//,tr/,.//);$_=join("\t",@F[0,1],@_)."\n"' genometools-1.5.1/src/external/samtools-0.1.18/examples/bam2bed.c000066400000000000000000000026241211610345200243230ustar00rootroot00000000000000#include #include "sam.h" static int fetch_func(const bam1_t *b, void *data) { samfile_t *fp = (samfile_t*)data; uint32_t *cigar = bam1_cigar(b); const bam1_core_t *c = &b->core; int i, l; if (b->core.tid < 0) return 0; for (i = l = 0; i < c->n_cigar; ++i) { int op = cigar[i]&0xf; if (op == BAM_CMATCH || op == BAM_CDEL || op == BAM_CREF_SKIP) l += cigar[i]>>4; } printf("%s\t%d\t%d\t%s\t%d\t%c\n", fp->header->target_name[c->tid], c->pos, c->pos + l, bam1_qname(b), c->qual, (c->flag&BAM_FREVERSE)? '-' : '+'); return 0; } int main(int argc, char *argv[]) { samfile_t *fp; if (argc == 1) { fprintf(stderr, "Usage: bam2bed [region]\n"); return 1; } if ((fp = samopen(argv[1], "rb", 0)) == 0) { fprintf(stderr, "bam2bed: Fail to open BAM file %s\n", argv[1]); return 1; } if (argc == 2) { /* if a region is not specified */ bam1_t *b = bam_init1(); while (samread(fp, b) >= 0) fetch_func(b, fp); bam_destroy1(b); } else { int ref, beg, end; bam_index_t *idx; if ((idx = bam_index_load(argv[1])) == 0) { fprintf(stderr, "bam2bed: BAM indexing file is not available.\n"); return 1; } bam_parse_region(fp->header, argv[2], &ref, &beg, &end); if (ref < 0) { fprintf(stderr, "bam2bed: Invalid region %s\n", argv[2]); return 1; } bam_fetch(fp->x.bam, idx, ref, beg, end, fp, fetch_func); bam_index_destroy(idx); } samclose(fp); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/examples/calDepth.c000066400000000000000000000032411211610345200245470ustar00rootroot00000000000000#include #include "sam.h" typedef struct { int beg, end; samfile_t *in; } tmpstruct_t; // callback for bam_fetch() static int fetch_func(const bam1_t *b, void *data) { bam_plbuf_t *buf = (bam_plbuf_t*)data; bam_plbuf_push(b, buf); return 0; } // callback for bam_plbuf_init() static int pileup_func(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data) { tmpstruct_t *tmp = (tmpstruct_t*)data; if ((int)pos >= tmp->beg && (int)pos < tmp->end) printf("%s\t%d\t%d\n", tmp->in->header->target_name[tid], pos + 1, n); return 0; } int main(int argc, char *argv[]) { tmpstruct_t tmp; if (argc == 1) { fprintf(stderr, "Usage: calDepth [region]\n"); return 1; } tmp.beg = 0; tmp.end = 0x7fffffff; tmp.in = samopen(argv[1], "rb", 0); if (tmp.in == 0) { fprintf(stderr, "Fail to open BAM file %s\n", argv[1]); return 1; } if (argc == 2) { // if a region is not specified sampileup(tmp.in, -1, pileup_func, &tmp); } else { int ref; bam_index_t *idx; bam_plbuf_t *buf; idx = bam_index_load(argv[1]); // load BAM index if (idx == 0) { fprintf(stderr, "BAM indexing file is not available.\n"); return 1; } bam_parse_region(tmp.in->header, argv[2], &ref, &tmp.beg, &tmp.end); // parse the region if (ref < 0) { fprintf(stderr, "Invalid region %s\n", argv[2]); return 1; } buf = bam_plbuf_init(pileup_func, &tmp); // initialize pileup bam_fetch(tmp.in->x.bam, idx, ref, tmp.beg, tmp.end, buf, fetch_func); bam_plbuf_push(0, buf); // finalize pileup bam_index_destroy(idx); bam_plbuf_destroy(buf); } samclose(tmp.in); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/examples/ex1.fa000066400000000000000000000062311211610345200236660ustar00rootroot00000000000000>seq1 CACTAGTGGCTCATTGTAAATGTGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGCT GTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTGGCTGAGGGGTGCAGAGCCGAGTCAC GGGGTTGCCAGCACAGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTGGCAAGCTAGAG TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTAATGAAAACTATATTTATGCTATTC AGTTCTAAATATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAA CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAGTTACC AAATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGATGCCCT CTTCTTCCAAAGATGAAACGCGTAACTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA ATGGACCTGTGATATCTGGATTCTGGGAAATTCTTCATCCTGGACCCTGAGAGATTCTGC AGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAGCCATCACAATGAAC AACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCAACCTCATACACACAC ATGGTTTAGGGGTATAATACCTCTACATGGCTGATTATGAAAACAATGTTCCCCAGATAC CATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTCT TTTGGCATTTGCCTTCAGACCCTACACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTT TCCCATCATGAAGCACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT GCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAAT ACATGAGATTATTAGGAAATGCTTTACTGTCATAACTATGAAGAGACTATTGCCAGATGA ACCACACATTAATACTATGTTTCTTATCTGCACATTACTACCCTGCAATTAATATAATTG TGTCCATGTACACACGCTGTCCTATGTACTTATCATGACTCTATCCCAAATTCCCAATTA CGTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAG TCTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGC TTGGGCTGTAATGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCATCTCTTGTAATCTC TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTCTG TTTCTTTGTTTGATTTGGTGGAAGACATAATCCCACGCTTCCTATGGAAAGGTTGTTGGG AGATTTTTAATGATTCCTCAATGTTAAAATGTCTATTTTTGTCTTGACACCCAACTAATA TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTC TCCCTCGTCTTCTTA >seq2 TTCAAATGAACTTCTGTAATTGAAAAATTCATTTAAGAAATTACAAAATATAGTTGAAAG CTCTAACAATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCT TATGAATTAACCCAGTCAGACAAAAATAAAGAAAAAAATTTTAAAAATGAACAGAGCTTT CAAGAAGTATGAGATTATGTAAAGTAACTGAACCTATGAGTCACAGGTATTCCTGAGGAA AAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT AGTCTTGCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC ATTGCAAGACAGACTTCATCAAGATATGTAGTCATCAGACTATCTAAAGTCAACATGAAG GAAAAAAATTCTAAAATCAGCAAGAGAAAAGCATACAGTCATCTATAAAGGAAATCCCAT CAGAATAACAATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAAGAGATTGGATCTAATT TTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGTTATGCCCTGCTAAACTA AGCATCATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGATA ATTCATCATCACTAAACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT TAAAGTTCAATACTCACCATCATAAATACACACAAAAGTACAAAACTCACAGGTTTTATA AAACAATTGAGACTACAGAGCAACTAGGTAAAAAATTAACATTACAACAGGAACAAAACC TCATATATCAATATTAACTTTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAGATATA GATTGGCAGAACAGATTTAAAAACATGAACTAACTATATGCTGTTTACAAGAAACTCATT AATAAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAAACCA AATGAGAGAAGGAGTAGCTATACTTATATCAGATAAAGCACACTTTAAATCAACAACAGT AAAATAAAACAAAGGAGGTCATCATACAATGATAAAAAGATCAATTCAGCAAGAAGATAT AACCATCCTACTAAATACATATGCACCTAACACAAGACTACCCAGATTCATAAAACAAAT ACTACTAGACCTAAGAGGGATGAGAAATTACCTAATTGGTACAATGTACAATATTCTGAT GATGGTTACACTAAAAGCCCATACTTTACTGCTACTCAATATATCCATGTAACAAATCTG CGCTTGTACTTCTAAATCTATAAAAAAATTAAAATTTAACAAAAGTAAATAAAACACATA GCTAAAACTAAAAAAGCAAAAACAAAAACTATGCTAAGTATTGGTAAAGATGTGGGGAAA AAAGTAAACTCTCAAATATTGCTAGTGGGAGTATAAATTGTTTTCCACTTTGGAAAACAA TTTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTTTGCATGC CAGAAAAAAATATTTACAGTAACT genometools-1.5.1/src/external/samtools-0.1.18/examples/ex1.sam.gz000066400000000000000000003376051211610345200245130ustar00rootroot00000000000000I\ɎJv]ѩL%,lKёl?g^2qItyJ8Nj5cX?dBF yChuKL1xs=?wmAhuA8>P7n{\e)gƲsc M! pB<9SUIH.D>L B"[t{+`̠ROmeDGQ>ݶu HzQp:p2Jim<9zgֲ {H~Rײ?LY 0_j\LE#0*BR)D{)LnGXm ⟅Zz9r1 W1W-ZSpQhHD^Vg }ç cŻⵆߩ/r4$ks8zfr1JFIb:3^EMtPUKr1l7"Y5!EcL2O~16#,b48PR0SisA ފ^K5Vgw>rR%au Vπ2 Q0rwWz 'f +[rDQltw@dL_Dr .^dgݳ ῀jf'n q'B7;%z x=ĴibL>!xz,/QG@pzQ1vD(-^kOФv.dyj]WR6m^9aj7uHsj2Jls5Rzt[=)LJwJWd2 i%HAشQv%D`DU2#R,-z6oHIj T=-O;}[VS&mk?~ӽ+w_^_uߜP0}Fێ| utB:$4$/M$t㎍; Ln/7Q{rFy&!K-᫛R=гT3˺3w00S _,ڡhInQm`m5x10PvԠ9hq%w{6W7QN2G.!_糟5)je'0=`j!}0/{){7"9?ϕ6rJ#CJ yL;gPРj!5N1Lnⷷv9J 41!bOx$}DWX-Sp"QJA)iϹ)b:~>?s M@n Ixҋܪx. ־J^L%T mC8n|Xd0'+rr%|rbZXx>iJ=ԓa|Sfv sޜ*fs⤮ :,J7 iy$%DGk*U"o] XE6嵠~dM6$mRayܭvOLPƶpܒtգ.ɒQ/)9QzGˠ299nLE/@H`P_4~PuciUL.* HR6ͧh,6<>M OiOsΙ-šC. CFPEvGLi4SeckmkO}N64 cZR=PD]f@QR̞H MCJ/x^.b24cI,0y646̧|\d-FQ& ^~v-׌r2%i:|V<Rm]~.SVg">ccl՟v>=*+= whl$<#΢LyEh ^I`xϮWKSeDHX8]/8PnB!1 ch4c0Gcl17±:Amy!9$:)M/OidG(ctSsP\~zRV9RH'hf}Bܠ~I=AIC$%reu\1zڂBG 隗X;"hXU.;shdQЛ&z54G2WFC&OR]h@JU^$&N;@Vn=_~^ċ+3#/]rG9;7yt 0aKi cݰ}x뗫CK[\(5wk@N{z _ r&nhryuEغH>B4D Vy0ܟ`r_涊c gՍo|+Ot;O{Few&FDP\K@?x\v]<OGLRZ*1re:NDі=0C*U;2^-Z#m3,Ey(m۵l3 "oԦxlXe=27(mI r(xʅ̷tmibE/ed `#ab-srb:bYc|`ܡyEiQ wp6TXeQL8Wټ y'f07JBm暯.@փNՓנoMhI9xpB0~.7sAC :ҶsTgxhýO}\qy܆Cw}''4)aNg^%ri|IJrʍ"`\]ʕe\x(6 %WjAhDԲլSP%00H:a3D\odkP6 ;w wul_/ -̝4`aG[̛/=H$=@T5|*mXz:X'tn]u;Zp6 2޺&Af"&Dۜ`YIX؄b$^YmTX[6i g6io6ke~: UuFƘF}pZ=Q:&NQ-J;p> \\wNF p09u s&Zg>劬|R}urX;S-y[%MuuO )/uIS=HTfR9_-z0 SV 4%(dy>8W6`Ngz_8 |d#hE~"Gڐc]y ]yvޙ<7 Os$/Aw"O[?02"{&=M!uP)RyC9NbIrOuߕgNr|m(P}ZU6ҢS;RNzuyXܧЊ9PƖgw%5wKyHOI0&eD=B 7yѽ@{B?S|Kܫ'=Cm~ur R^NmcxlBSǃA6C}ͬT'pwp͗YT;0)K,כֿpu[͉ӫ$ɧ󋿤so6IzlCl&1cRs2y[rUVrZTZBi?ֺv|tT.*J:DA>ժ~iSG!{ t'Rݾ-ۂ'*woxt RX&QnI뮢]{"ON}Hk6mTVnh4HyA1VMf-nզlenyY.~/}3u:CTvڅD9LA$3zIuPߐ3I?Ps^+qNm-]8 c υ& 'y yHضᬖ$.6AB#ҡLyj2ܖA¤}vEm܅s/[i{{LSiʑr'J'fﴁsej@0?SN iL9Ҳr'#Sf4!q4id^7,>QZ`YH=L) t$IwpJ.&ߞ勅S;>|U~FD &|m/k架/owɹrLthKiGZ5W_xI#qOx )ˍԕsw:N&ǔxAA;TɌTfBiʜ>l%t6R:}V5m^&KɍZhꎎ\\STxE~uدXA1Xv!7y0%O:\;,ba0]>X?Ϳ Z KN^6npW ;xϖ#בa𚏱8`$&/닮+ݟr 0|3%e9UkcpV6=3.Eu[j v_ӯ9jnw5+@݃߹KV:Gx}l^l޳ H$CU$rsdš`ˎn,Ai!l};%\<1ˏ8W.g]وi~yhJ7GImKHD.6`:z91.! )95'GmuN>hEAO="# 8p# JoU /~b_zyb+2 6+9F@1*|d&*9Ƭ[{1f`#jY):azBxv#\ƯZ} x`ˉJw"?ᛍZ h&gooԣ])X\ |EǓyϮe <"-Hf9Lɭ`(\iza@I,Z'Lӕaw}iO@m89,|'pF7.= @( vŜ~0:v.:-yL&8j7^kjE,qYfXfwaSzo痗g%Gn g%`=<ͨx Cd!4P9v.e8Fp( އ]d#D3?`E-ObS%5-P5ZMZoKfA;m@E!C]@3L_ǃ17d~se.NjYgܥAɿɹo.<.CjGxYa̻Kf$'h`vuuTh \F.BsTVy\=Vȿ'۽l5#~u ow*עN~=CclJqxc8;zRI`A'ףГu(%f;C0"Jzz6!R)9dF w4.]RG@>si1wl[Lj4GU y |B\o0e\,~RFeKŧV5EVߗ ughA7=.Zzm0}N^T.f!R;:$FK@RoFki\0⽲L|h= ӻέG1<<gjecք8Z:-$AOG ~W:/ϟ#QY )x~֟l9:1(O_|p~6?8OSpiޅ;$b~}G@N_B4HxG4)L^q&~~P~(%rWVF[zKcPOd۶u3&BOq=>U*DXJEB3瞏 ImRrڷyWN|XSJ=huK|swP-इi̕,^9I#]!UAkc k9);.ӲR7x"<2dݵJ)*&ֶ8~92FJix )}SeM3VHWG*#Ca{C~`8Ҩ;[((9ii.idڵe wLo?MɺR6c(@#]9D~T3(sr];o/}MSzvͭSъmʒ@'_!ZeƉ%d}t 3{?R}ч,|tnD^P<\f \$CڅzysyԬ. ݧ1d|4Am$lTI"Eݒ~4+wD:vFhEߍ3r,4@V[/IW_%Ծkp%#Bl*,z63֣I{hΊ.??Ǽž"{ 'T.cV|D3ۭf+\&qhHxp.i$"/yeNt Mk.3|M{I;.Miԩ 3rqJV|϶XKײaAl-iY,.츭MOEd@p 6 E^2=s&uж} |f-􎡤*JR#OMR|M"oY` 69̾1w.KV.EsRAF%7`Z(8*ݥӹ`yw6F ;#^rV?sUOyo9Gyʇɭ(?(m_=H'*BH b\"q4>ݻ4SDGn5qJ5(O'Kqs!ՌֈEٻQ Y2QT.({يBIOs{9yN0ּ!3V—ΊrjQfD˽WTlSX~_b)></ ѩT2|v[fF}Jm&U{vN/.jTº*̢*5NZ6мe3ZD)aコS;'eE0(|hgmeMf-IlHjDv3V{涝0^6 Vb3er2Exͻ;{VNqs|dM+[r"uE5Oې /tCOt:^1-mB¸ް*p2^5{4)kM5Q` _&Өby=W;:WO"wgI~[ڀY+gbe%gB<OZ>un90kZgM)BL휗*+bf TS^m8fwoLV|֝M|+Y 0{CT%*1ۤ7:<yx Ȗ&VׯxC+u&/̌oR Tӆ4B0I$~󛿬ջNӚZ'R{h+=鞩-ɧLmY?M>ΘO%FU"yrӔד,pPF>Z~ Oi |_TgqMh6ā"t^p 4Ji3نa~ԯEhx09IRTJ.G Ui*xOUy2Ch1u\YbhmN~/Hil;m:LƊD{$Cwz>>V:91ьEr7YIyۏr'ʈcrSp/MY%#jv @O5m1_NXi{GN~ ;lFAUN'](cV[Q,ǔ";߷Hb_.z:2pcυ8TI&iV "KM኿OęF7ѩTV񷾕~|D Tg0T~<p oB~Ъ >48+`gtLQG5)zh#hd|>b{۔s]OpHv-(|CMqJ-k`eyuh(icyuzI?QΗ x~"u^.rŦqg@ihltBRG >r(DEVq;z72q7jXpW@/Az4v}댜L9#[RXш]R|Fd2[<)T1pCs4ZXg$}{% wsȖ wJqࡺH='[.éG[\N$6iESƙM~쎤*SH- 5$kO0\d ʒ_.g5|4CEzSC^ ω:dw%Uc[4dys_XB7 ]_&N( 1D"@~5 oPcxz^SΧW)[R*azKMK#a>Ͷ:`%!ȃ/"rlSDq[|Kp : P%m%ɦm׹/εm􅐹h["N+rK%{G!xsqb|1ݓGyF,v9DRD W^ͣp0%FY4i-UgԍZIF ]^d\a0b |?@W -;DD˯~専-md; 6,8tu:9a-U[H&Iv;sb' 2`wҹJUT0]me$`hBTEE˯ |Dsy@)% 6*rT-5;ag q@cI_C8M*O{&Q C2%0 e4vxv_4 e VC&bT\@tQy%e\<)L"w*t928s9ZJ^B OkY[[t zlgF jC*!$}Rn)F?uY4A-:DϕZM"ίT[6FQr.{D PrK"o1M3j#)ڞM0pIO\8#Uff{1zM^ː&^7*ܦ"Tl9g\˓Fb.0cux\DF>B\ʘYuAoXm ^dc^~HBlh꠲6X#`{?;{˴pN,*i]X' rf`!$0trHaҀ Gpͻ(:]~:NA;?,V%rn0vƯI,c6<7}JK:]6]Ь~% ?mj&bAcv3E 5Nkm-X"Ӓzh}{ߤ2 ?R}#m_[o‘L@ACk(cnPǐ}oz3IO8ΡjtCxcB+֌؄W,hroQHfF[g"07%|GH8zev JCcL9sMW9_WSjQNX ^ ;ʫ=1H@.g?%V/r#k&)jX3GD|& stsC69sCqzb9svyD%˲]njʉvW552q6y}g贯=VQtjIBzhhM@_܎;%'cC [+`svMmSm◷sv|o]F|P cʇwH3z1|t"SW!c6%69uH3v\^ZY3kFy~SqFs:ɒOK%|)n{Sy!QXΏE-@ܬͼC vtHDNKB *,\mK>4ȂNC" E:NDPӏ6V&`uz^%V%+ţJ#\G&YKܷTbqR "FO@ZZZ#ZJ=C"Su+GmD0i;~9#<_'HЎa w"ѥFioL?hcQ(/7Zke+:Ac )/.weg0W9Ve$d2|1ieO.hPl l-Cg/Amm(# L`Z(Y*К14Ĥl:sbKdpy7p91uSP*=ߗY0(I-. oh`yUAQYXNFlwp?MIjZ{nJdIŻ7_RE,mL1) '=!YJnpfp:NG XՋ!sXGجiQJ^&|!J =[(Mp8 $L剎R|sGaFrtV&DzP©nEohF'v^XS^ %=CpdY1*RmYxL2e$%/u|7&yU*t@O29M% YP{ƥjOPVqm!<|]]!} _Թ/UҤ\~3ޮ<'?= e 8=x9Tqr_UN- vq4K\Kϐu،'[~wH: 5y]?zyIŽ * .uh-VuEI=\PBAH2e(D(V oC} S(r+Y i!:<[7H_*Ra&^#`e.96?zYۨV UcfG:{CmA)er}` yFsԅ%yBgf&A|V跛݊Ӧ^/7qoKIIзC$N֣"HDu!<6"Pk߲i،٬k%>o`prNFECM-We1-G v`CіC+YJOfŃzPUbd"Ix2N!d ' @HzlCpWѣGz٦{Q䷽OMYq~/4 }@4ɁPfM8]M':H"D9Hgşݘoox}v&}L ֟0wY]n_4?e۩lU@л͒qruG6m`[]gO ,Os}1TbLGFs@m)'_ʽv󓠍I( '8Z{iI̜ۖ f?-=[C_AuR#Jw~mJR5[{ *A8{"p y<尓"m/3)#긺)> 3T:#1;yd0K% =KƙyMs~wAn]dWY!tKl'ni8]J[@$zﺦ#iPq&`ҳHlATh9>Ӛ wpRi:*^OJ4k/˪ `_nv)MlE<7ύJOTXa,> #ٛh;A-M%5(v栂Kb,һ,S{ڏg|Oӭ@ gT_>LP*bM7Mi(8@b@W~i5K ZoGa;˔dj{X'7LZE3AYb_KygoPt)UC+4EQ5(s̤LULm?*Q!6M΢C_luEg1|B6RQ: 7b4[DKdc{YPttHu[Fc qA-+f+t[9P&]GZ= PhMT "7j,ޭbw [F6 Uԍ]?w%Iwn9N[(s);vx_'z $I>;ê GQg fj٤gbv' RI|9UiY mqiIHsc{fqf5#Pm[Y2^mUmr~1XڏѨrc @ĩ*-ZuU(1GUwbQi\)ЏڊqLVtBLE]t3cއY.j4Ls1t*M96 šKr"ڴX-N4*.F _Ur,cmiF٦,ı2TX ])fY`w>8؏/G2/|.=b'.Ĵ9_tr9Ee Y].zsM{9nGI n1io_?P HpCX4zHXаQaZmЄ+̳fOZ!A7;Ro zJ6 X;CwT\ P V}*{ZUs䫱b=ү3h{ڪ t9ߦ?&šddwϩU}vQش}i *3QS'Ɖnnw4a߬ŊN^U~uk4~fPFlA%7POh$0" ?;$I^[(RQ?%`($[boJL$H# *OPk&Hw]ɬ5i$ցejKa1fUN Z#8\F_Hu,Zюsz3CzNꥉo8'A?=߻oWiQ%v>9U$F@΀oL!3RtE=HH6֭TZ^5%,k`%D(M-&Z@{(|>Z)2 y/<ܭiy ̟ ӷqЃsqj_ƳLJkcG'?&ɀZrNO~[{kPC:+g+j9PgKBז~| =k:?Zx ױk )dh7yn?ݟV" ew^<\{yֽK4ˑWisMLJ jdb Q@R.O#Ʒ[[C {z]K\i PAHu^,Sv]Bdl rruu66 _Ooy_2JJ1Gm(, aj3=Mwۧve.\ =x0‰4Q! Gaz` $;1!itu}qO3S7}işnD}})QU{*wBV0H=Mi0AzlһNN/}74eQd8 ɇ2PU{eKf)AЁؓ~)Zv}n1H1p:-Ūq+hQ'k{Tr[/G.nӇGyRy+:gڥ˛X ԻVqRoA_͟RtW;I&&7|㣜]|ڽnT;A >#';WB *tWÔ;8e (>+ NNGhlWAKTB U5&I` S0oy }Bް"#Rho?omIb/2Qt7E4өѽ($kAHP Z~5GҪ7/zՄflٕg/m`fg/Nh@ANJak*FfZe} R@ C}L)ʮ"(NZRR[~>|D 7[#ols aUڷ%yGrOw0- TU@)FƯu,o|OY*Z~ &H0sF@`y 8MRbV'$<;jL̃PN 399ydrl8WE0K;/('^g[D c  8JPҵg5䱐 _1ˋs:MK)<0Nj+:&UIIGTBlq(׷=`dA@;Kƙ ZFH]$>I#PgAߦ)LJ\g2LhQ-w? 7-ݎȖ.F9{}2L*0WD5IÔhɊl=fK>(y:^9:p=+^h9p)PM"VN+=ě.ҫEBO߹޾lMe?Md$A՛(pH5QJl:.82Ȍ0 ID6-2Cnuܭ#D |Ji֦ yњi))EDlm/9Pz!ٻNcژH9H#%P;D42!4E" KG%aU˫v."e';ʙT<$bxo{T2 W 5%ipFAQiVbO|}C<窵+ dLw]Q 3$M}'ʃ׫^Nɰx5mO-Df))}pcdƥ U/Tgl uRɁamzj@J]Z 3YWTˮhP;hͮVL\zX\8xv e|>uIH4?L"ԔS(gISW{݃A׽#ӄv65: ?%g}dҢezڭ UT-_(:3LZ{`MJZ HֵM W)}x㱔C]Kk~WU4AQw(,uvkTķK8ڻ/$/D1[ r Y-[ȩ^ןi˂r֊_t\TL)G7q>bm-RTMq:/@~,pڠ!G*qNPG_! K`5Uj-_~k(R[O)skiPS4~{9ՠg]4#]x ο#aȲX!W`n&9M7^VJ >fJ;êvZKۨ7cd&R(*kDKJOqNCur;Cjs*!;^+NA |]^r*|pVՙV+n7  T*_McAIo:.`C V QI[ KI';үj1g`1Lt};>1 =Vuf۫s$X[jbPZ*,Nk%aH龋h&J$:_neODh:T)ǫ{$U&hgç,+)L& ަړ*X6յHF,1.ad?PӅg3iڣ`׻Zȓ"ZbpnXWҤ"9~|N'Mj@P''L2-5ƼD(޴ {%k6g3PfW~^z՘zպ;RD0e^@;fKUw[~) )iqFLvȡn )`(xƹyJHsArJ3TbP)g2)\.f^eV9Ref9g}[{W󧛍(hC>unk%YVikʀ;/%d*tK%2iwDOKT9J|Š8%U +ӎٻ~{Sमћ[M6"Mu,=Q^Qp>G)`df.LV| Jʓ+gE_aHeJ4aєeWi*N36MGyGo;K& 'K0&I[0$HdrQ꼆(5A~~f{9HXWrXl*/VƜHK buh#q+:}Qmjvݸ2  {JxA;al 盚5qGW \,HGah[b*~vם'X (Tt zW9X:;;a$NG;2'І:Bp 1ta!&2dbLuq8FuE9,S4DuyW逻'''eA]!luYP㿽}~y~=??_/ b3G,>l(ʢLRn4KQ?Hэ}_)\)o_*gh?rw_^_^_^om!j]Ý20Gg Vqr$zOy?ct mΠaQNj}U^Rbjœiͨʋy7Ȗ?5qCLJ5s`kNaJ!Dz|`qOk!x]Rֵ">XqoKGP Cڛl3H_H^g1)94 Wp!Nq[j _;:fU3]^ATXӪKE1(\ B%W&xtd$ ܮ} ? GqZz[\xH݀%.hWhZLBO7M&f-Mxcr 1KjpGCF|/w> >mϻ|ŧmmߞnZ} זZ*EĹq>$vh~}bKύ8G;Hֲ&eaMflHDl:n_$g8x)^M6w3LHRV7P_< r#ɀk ȁbW x7N ӝ56QUjB ߼4M"vqPJqg\hNŧ̰x/ ߧx:C?ԡKmGL0vTI6OvVճt7j]vyPcfco6^3؜fxa஧1ޗ)iCҖg#]j~U9Ј)sJ >O*R^JYΓT?9Y >JmR|[+z;ZMuZTHP+&uj2o# XZ;k]HƅNH4-oDxAXϵ9( OFtZN,٦3VSyKC{$V܀#:m_'b+3v5Fog9(~Jv~"5E}9)s}y5Urvk8P4`S p:yfs`U} t/C^lSÔ=7H.K[b&tt忙,6X}l9ISʀ"fY G/ CYRƄ<ˉf_Ց%CE"jN6S's C^䏓K ߓ|n/F)ٶ{ 7g-m>F_`CP]Q~tê&sM;yYIJ'I|$(GʶnΌ(5O7֯Tk J80{ԏ#tSo 32J+W4IJ! U@iq>TU?1+Rq/J Pͧs̻sjT]%C RMsZs^ntTxiKmHW{y~_PHZ!rrd.TǓP.Z o:B_үo4W4#OXYQ؏;HM"G84A8qm;F;Er7(y=pg侈6>?VsT_"\-]ΐ{.wYF-.gяm, >18#V FncXl6%X\D.]w@jD:,. ѳo)Bj~CvЈnSxPWM)%잛|^jeS K5o,n4+RuqRwF'/M"OZqm$i|Tr~=πVz _kN rƦ LO: oS'= _Noinexs[bbѧh$sH\,Pl?qSїRwq᡽>`TzMyaB "D=bp0FV%0%ȯDkI4T`r*"H5aP os(oipQG뢝jfg |`D逾پ }h7^';I(SXr:m~i%6WiɊ.!xYjzA|X\SiI)0; 9#?R  ~lBl=$$!Hӽ, #Xr[s ҉ӃoѴXc-) Dex>hq%t4swd,gE.&ίEMz=@~A_7ړ6TV4gW@Yɲ͞s ݧdAk&?(d<͘YS]#?\hZ&CeFf uno^ lfӟq GA^#Np.,t0)+$Љw "}rW&Fu"Zk]r"%l;@%q @ܞ2ҘS_٬='VRx׊wH^`j^fi3kOUiL"Nw贈?U;r= UHMwHG(/(KКyTD- EPODaCH뭺jΨ2]p~gqR{CH?6oI\&n qkN Ximђ} UU ^>c47y@[)ПP 4j^D*<~`m'}^rE9D7p'>tqHs5p 逇 qhH}b*͡^u֌ض`dU@5C}՝  1`9g-XRY'b4+>d=[q9潹o;x6(SavZ;NDCDd0}{{"ðt{ϗ&eG'zMOAZw|/pd2̟ƽzl)L 'מ4?iCw^$f^uޞ]Sph&4u̅zCJ;yW(s8]v;|-jD zp#V49[S"-;Ҵ91L[0PƳ`i(+T镲&}2-3HNp~3osnmi, J{tڢ.),;_R{vHI8ʏɢpsQ[r/R t34_}IʜͿƼIbϵГP#@pK"f4`(yR„毉H4z[7xMEc%1Py*N)e_L2n=safjRm:yC7y` F:z4Nl3#؂Ib<|`:M8j&ڛ)T0Ȧ.S'gf6?M{T'Jj4*oJ[KLy0nژaKS fBR濅(+=Jl빗/[=~5sF@}z^Q:$^ cdˡ5fz2L46d0J#߶MX.BtF2OgG{CL+VhA g@ &D ղe\6c ?{ غ mI=SYTz 2$z|u i5HjP4, ڱ\z e%+wh{aAw{N1Q@@G0=Ll4;wgL<.~tf<)zRvWWh3>WҶtt2AB^mV4U醦 I,%쪪eD`ȩw2~gÉ׉zћ{aYO\ה(7/Ѫ6%3Qb/#z,)'BY,,nxzМFjs͠#[?)ő`J0^D3^ZSIu ]"]wX i={/ BfIJf(OZ?s*e;"yvo=M] up;z`OCbNeG[ N7r(wn>}{\t&͎:atEQ= Uzέ :oY]sv6d,gޥ`>]##ZEGrpƉqҢ눿Jq>аGJH abt̨aUN 'Vr1pY=ݔq]{U;@BYR熰, " i[G{_ŵbش [ԟ<ԟf4EENɀ?g˹y'NkRB( p_u̮g q!$"Ĝvk"V[ߌo {Os"UШ&"xly7 ))D~492鶎xiFN igv>#Q(HE,"QHDn gZ-IS|zjⓥ}2uF۶.0K(ݕ7,(&IS#D ]ODXݕ74Z~DψAu]tT˛U;A$'6@'kF* JPi% A ^{}G~/6!]gguJ^Ǜ|?UTTyљ 󤉜޿D~}8NEPI wp'd ËjHq(ŝrۤrl6?9?ɐcFSUHwc?8+ r|AuLz7fQ³}fm밴Ia1ӡhQ=Lٔ&\Ĕ^uC -r9$E>xuFH,!ܫd5 (Д'Ѽ %ߥ))Zwcɗ,PB֝8zSmWt9Ccw{\I2IH|H3MTrHŒ& TENe0qH7.oocB>\ s\Cr=d G`c"Nt!1z}dp@Zm9t()I‘zȨ@* #mglvBa |NrR>n I*aGt_/ &I+ɫj3MjiIk6? /g))-))nFAE8حpbg/ؖt&|pJ@{ڌX\^ih盜{2; j&Jh8|o7F|m* '7+0nnPۋi3P4{ }dYW=e6Srw! |W j.yK>כۥ'4y4QMJbÑv`KT!9^Ldd p*StD0y}W|OXGgr]#8z(.{ᕙ/YM?B\(nqgdi4d_diyȒup]RfL)ʖudOOUz$z*t@fm[t<|ؓS2O~z3T7T (eLr]xΩT5N9`D҉0$~B4w-@r|'Yusy˷m*= ,l8Q.H~LEM]>- rWSڷID:E#.]T2TIn[qjlj*(*KޫWɽ*GY]Ŕ9}fvާ'N'̘:ځ{}Zǣ"?@MCPF^|<03ଽIr_@7,fNy#LːQiu=KLmFY^Oj,B^˴\K2^O=Ia6J8L7f^za ϘǂdkF3ጎ$iFX{zh Gg<)+S (T8ÊjL~ͭzn&@W4&Q[iR4^=q{#l) }ا 8uoRizB?4!WS~m0g)vHFc!#M9ՈeJooQckl0W's Xُ>a?GMGl)"߻R};v[o'gҁ"9/H`6wz3!@’FT:o0;H w`z ]-4,HK-{^=2z59}7H4M"9ubd'7&P+uV]詝&9v<},ƗSw(ҭ`P[U4-%0;ڞOcYӛeRFr>݁|9`qO0Q}wYߓ[\]Ⱦy)O֯<=lʣ%??K8 8m;Q 4k6f*{sJ0Y|1=ͩˑĚ%>Sbi;f߇he^S箓?"):ߝW>B=1-.WjM}ȸ3ڍ=W2:Gک+.{mkÀ֚5׃: e/wuAmr-"*Udh h*_4&'=.#"-MD9zjI]Q]A AILFC*6KsI+7l9u/`YgC)X._JwcwcM;}KAāB2ίfK(w۫ rG=B;BelKWBTQUIؒrva /K{̹%%@( D)UmPGvnI㝗t^F4@;*6mUBLG#n SW (Il4 t \rPwc onnq^KfOwj GGHe@DU@_#|?n35h'+=Xݑ]puT/*QSI0Ey0w5y~}LfzI֑R#|#.rB%kcz:,hח)b蔟 >:Eߙ!Y>RWMrH'W"؞ ¾9:lxC ܣXTGfTI2eTrz=-H0* 2e_ !gn3TFԘcW-MBxD,ёyR?ET q%HZd3mF^xW$+S&&BDfR"4hwZx ۂB]K,cWa 提b=uȁR_Х=k|{sq>b8N-&Aɮ鴵!W;HswѺeߙu /hAMrs { $7J{FEur"g莙tsԿiLϝ&a$kSM=m&lM mBȄvk/z;?/8n۫noݽHV4e攖s'OL:۷qe|q zL}p##Ήq1_)~K-e{ss܏&N‰L-8sa ܤOӟԇd7zcxF6ıS\L/ԝ~ث2loC!,T҄hɄC*d릌0e`v׾V vuQׂLo"$8GoC\'`̽O/YXb_Ek !21da҂:OD_ҲZX`#C&gEK;&w ^-)%_Šd +|DuKn/izj9q7/iYBt'ɺ$UohMa~.vsVӹhoRVI$kf=3h (O@UZbJIoޔU&¯G i䗠Evs0/@| TNdjO*3R2ꪑ{i4`W-QjE!Х@WpjL_Ψ'Ջ1iFZ?B JWwꪈ1==Pd`*䥲iיַT =Sti@ĵUv;g,M%2>Ԝ0Ҥ "RFtъ4Rm"ߴOQX(FO)ؿ|U"j6r׉HoKc|CVsL')]|o^ Ro>I2rz ぷiXJT×UefZH'*DWTw_w 'yPTHDHJF5# XVx(^ 2T}=U4Eq.8Ky9JP^$ 4"qW;ɀЗ`+8 t/(R#ƪi)B;mMdN[a%y]ݏ Wө$7ĵVMaӃ* s:;cy ؒeQ.̎2BG1qk~z /BNx%rIW I8RKDݢ~fhѽm`^k$DP^%%*`Ob]SٶyE)2u꘼#$e63@e½jbf\Gy>.[7^u`F(4Q^Hq)U$[ ${gI.68(h@cZ6jѓ0ݦ2b-ϲgTE~Ä.S7̕2nH9E1!v}A;rS+"@8*AӴxRmJ5Θv{Kd*gRH.@paYK5sHӰ{yQA'1iUIى %HHR>zP|MȄHDS=mѥSY>*iJHZ?܋ԋmr!Dvge9G@Et Zb-Ѥw E}22$07Al{jRke\+OFp=tAݛoFCM#7&1U.h+DldI|m\%2\lu{%4Q*jk?[Ĺ%מLfca]EPGGuJVo7a6^0oےZzO?*MREuA(>qxm^B #gM. rʸkW֘(R9J)}RnyQZr_j2ӆKGFzjbe!^UwT1D/Z<↪7DPx4cL(٦Yr&V;&5)eT2TU bA&%{$IH;C:5Hеk ϣjO|2fֈ$S̗TNSC0SDy2}ʿSSEQU%K Q<@ []z>h&2T$wxD7=Q U@ch&7p9:o)Ju>p+g$8e]<` ՘Gy"C i͛OD+"}tNS\tFٛU^}/P7_Jj38O5~N0(ZS:SvDK}݇H@Z /)I9 3H? ?,鷻~Vֽ߬XY1ۛiտ6 )X5yT @٪zwlQtn8^'@Ю~jB;+/>~@qK .8=F% պsB(&:J uGY=S/+U}EJ%Tb˨*#%3߻,%N`Գ.j,@W"'X- XNV5`/+\mi`ROzxV <\_[ѭD&Rx9JPNA &wau$X]}K@?Y-J2#upH˭ F;-(4Ȧioa30 U5u(ϣ壝&IϋTFOx6=4 *Bk~>Q+~8--<"Û٢,REI_6G^}bó5Hߑ+28tM4րw)q2Dےmjkwݟ ɔC:TnTUmCۿ'׼wZQ3=TE*D @o/pHQʃH9)ufN9$Zңv6Eѩy~H?"m/Qp !{*U gbg%ʳ8H2?IEy)J7@|'뻞_k+s_E }VMGJ܍1]umJTaIZYꄉsWzK˙>_iNU3zT|0p]8gCJ|fBכq+32ݾ 7Lpݭ_?, );(u&9p*|-w3H<@ґFuUQŤEP5 K2;V_ރ =Qz{F$A'BB]*Px̷p|b7MD˄ǒ7Ȓ2 S?\ У)sZǴ|$(s^D{hLBo+zn:51eN:3s#ZˑJf~E@dCܬpZ䤏hNˏ"JyYؾ(S5>Ѥ_7( ztm˯UFgHw9*gw0/N]׍G@ywz#ά*_zxqx'?_Ai_j'U)ijKz}@ݍ]եoHzf^HP]ʫ }[^Q}WXJT(ӮivdV T&yggt~^ZpRHG0=_R"~@ tTwUM=UMo'Bn݇+k {~esaE^aY#t_Uo"A4ROPMrzg$`%^6/R?dVܫYtoZϋ[Ԩҧ|2nIoȫ{>ռ Ba**(G4r?D=%&˿Jau¹P[dSx615o U;}tezT⮉l+ *蠍MTICd)g+M0~jݠԙ 3V -\^`7ĞwQ;gEDeu0X!{<к!$4N`™oČiE7T/KGicHS.5YԾv̾;Λ/U+m<  O|#J^b@E+ʏ !YIM|$u9|pbw),iF_~f^tQ9!>aC/v@ h=4Uy40݁$vb(cu o@.;Ҋt7 !*4WF%M{P͝P 09/']ΧTRLQ1叿hd5sZ3V?wN;HRXk aR !x@$d=iA+}C*8.0Q,a+IGPU}|~(5AMHu*nߨ] {QA) >![D nː' N4x9b7.b--xZz+0봜:=АGrb%@B%hdRinaO>H\/R+lilF˭ J &ti:)U~MA֔z?:%&aU- 8U-)rI/'#OIaxh@ÒjN^BZ5幒xv3Pg{Nr$oA:vWcU}d'QR!!hN 'k :)<@ܮ#ކ=tD5 K򛟖Щ l+8Qr~IB[h7K>-8]4u9~ 'Ej" Hy`rV h'wS[E ӻ.aHu>DSf;| REQ4(l š:,53tk;aUrr },dj^r)1LxRL.7eEu^&81A_usSͳ]Pйi4[|:i hE~C*D {= 췑%x4~ }`C=J/;Gk4MWM0aEhhy$-tD-!B,iI"J`w@KaUdPyohKHO}au*[7ڑ*1Ïc{}"xf ]UM,U|xG읥rg֚)Ϥx./4Opo/lSXɳ"ڐ)oBb|𤜘XD )GҕT>I9UB߱"YOЂ,nyY|"}ηm$ ”4KJ:F+<=ڙؓG7wT=LJYii}v*Rv_dY"tܼJ,=Jgq}aCRȘ.:JQfjʎڊ<'$yz@ ;(kGw+Bw (#=_vޑ֎Oy}seZ*ۀrڽѕk_~RyJRpq@ZC9ԘTTvf٦lUyZz+*FS¥(tܢfi 62MzhH)*О>BT!9%e>:׿DI!j1ͣ+V}L+_OݗLMMF#4 Vo V0zGgٳC ky*]q;a*w2<Мj!ET.2ԍ>ifRXKOJ)>vިAޔrjGSS:*|:D/REe'm*Ӱ~v" T5>P@@ h3+1K{s~|ʸ,YZts"1;b! u-Ϗ(OT{uKʢik8MUD<@]Z&N*zK=}ySPd5V/ivzM>Jc˅&{ՙҷL\ۖV5}g@~_'ݳeYUB迀 Ǣs$;/ dgִvdZ71{Ԟt~Ih+Z~TS{㜪Hx(=neΫ?)Ro%AghWXe"rSejejkR j{_ D4IϨZs=nIzt?Xo|L/mrXcGHs}zNAE~V:‚`$uKzZcA`TPݭzB*\:Z~QEiʈۯ:='ϣqۭ{ϔIijH/k SAv1O5MFdoF4ԡ*e]H@l8/-cс+WzG;DR:1_ճꫫNs5 ʃيUO(UD |:I { >P qQ+:BHYb_20tk2D }.^ 4h{eaERaMiG)゙h{q{zTI aHChYctQ2 WXuyN\@?*HzT`}s?G؈瓦mΪVeU-zp8 m()ʃU-g+h!voQ4̭AL}J$agl@jJPia;0~|픒R)rYɆ"b&k6"T8+<>S;ݩLCMa$hkY-u/0juMprrHkUEIO*wS,>(a4Tp^ ~wq_%ψݱ<%Q(4~5u3ETOTgÒrqRIo).c_ j;zS^x EO)1 ֭io缭7F ܞm&{{uWln{%|GxaQ5Y.k7PMo4oAI@Վh$ eK >J%ǝ GMԺ>iE mA*hv|cFNS'447Xn\@S&8,B#^6ѻ9.6tcFB%|a,0,%?@KPHA_1]r =%Rflͬ}̭tu:TZܣ`e-t@s YuU,Ltʵ Py2f+7 YF35֓BnKPlѝoh{_ȪXe-,!FW@PG@RsL"l%nSTg꽻[HߵWineT+ K@ḺZcM 驠?iCtNOWx 'V ޚE@\APsV7~4Z쾥EJGA2eV*B3 fW^ 7W%~d~Qє4&&/Jp*Ө2CyeJ1FmE)&Bý'."B2C'둞Ҧl0!%tIB*R;nwa^)I`ҝWC_ߜϲ%&hGӒTQR} CyE(U4\{e֊672ukXEܿ,NzٯiRmhghzLjf>sSwZp=)Q u\:o0~4fS5;UZ g+é2F9gR/:%sVRWiis\L;h@19֭͛!v4K8d̶-+![ƭԏJ qb:UAD=_W> Lު/ E[7j5WO8o$PFX{bS7xhewj|iyZk,/ h8Am ieLb )H+||I,eXL 2o,YX+TD/S8/b@xUY=[RQx j[s?+1>y~X6&VBesicZTmE0`n0s, 'Ӈ`/LC)At\Sy([UDPiIH 5cvv- Cl)n~.}+x <(nx۝2F^'Q&0OrZjC88K݀:@rvKGk:r$2+$9ŭDt!z[绿@1{KBPFƨx1p5hg*.~Y`AI ͫ߻Sۿ37Az 5.tR0TIVH< 4n(ԓe?ҦWf:113KC`zls{~~noooPxV/jw< t9V%"e5.L1 Xb\X=iJ>Y:Ӗѷ&%)qZwmw%8@o&p>ϋm Ơ :b !gқסq/rVں'Ub8 oh+b=+W"}V;Xiy`6L1HqsRw%MdY5 ~tP:v5N%seTx.>T })cҢ=VBU AWƷI[e9 =- Uϛ-MxY6txg աy )kCW`qI⴯j^Á>;42eΌȨ^"2Á~7~q<=ݥe o_1*I&rVAlh"hlEH\)?3/H9?<>Hb{eWWcPi~yFO~[L-T s!-Y01r-ڷ+ _qM]B7 Āp@S::q PmbˮU&S>uk8a%H.`^-TB|3Q b1.u 젌prg{@лVP5 j q*6}R,A 4 =-k, om=;y2&,ccƣS{!$Ɋ7az?WqFjrSPlB hoqƶW7M +"wODH"[Lw+$wF(hm݊)RJuUmoW6(?Z`X/"'z›r5vIfbt1T::ps~ ZXgu݃n szm͍ԻM~aZLS ~rr;" Z/g"c;ѬsՁ&9ÊTFj#Fq;w^a:*{`K//0kqF{ 5@EvX$ipEIBHqvͯ/q9 WucŽB"Cޕ^+ge!:ۇ!Ɓ8K0*S&/;>Vp@*x)h = @xwtG;;wJBm}b]Ou=[te(xخi+M@Y鍪վa\nm9FyO*}|,6؍0V^X~&8ohҺ 6na*[6;~rg(2,0hA;hc,G<"L?ƞ{"N:ƚw:/_K*Bc|t.d6DS[98'Ec!&OkL oz!v?X4^ Oə- yJ#UWA=\JPQQ^CtOk hGWM*<@U,]@"#R#Pf3ڽ9}/„Jo?q6>rN\U.àf+%(^7Crsxh^YcoJe+_8ǚR1<ρA G}hћrǬ]l:=/Hz)Zp cVL4#rpjN)]!&R5]Ҕj TQtםlkȒP|iy;C٣̯a1mB MuWZ6QER.k}O=,CYD3?"DŽ֐p]>h.huT@_$n!vOe qW-I *ީ!T`L?hDr|*vmdcgΆdn \|P 9E'1t~HBcKdУkE뻰O l2k|…ۣbA=i29]baXQX?x2P_`O@&.犏x ;?0_Һ\AQ)bsX yhNw[Ί^iXI{/4oh@nT2`S%6G$ϊvZz"gZs'ַm?たэaߟ Mr@ur RXh jVgOc /'B-D DO% !~,32Dtp&C&r^4!UrTI+:ͽ%g.\l(s@]t ~.M,CKjz!MA9t= XOLDwsG =yz8h)4c)$Z 'A}2cU<C>s~@14-!{== R(ѓB{fG7[̴SiK.:paZl4J.RpdoWny ,=`?}:a'SO~5#n$H^I:Q HڍF'D״UJ gz8y|ͷ|̱2!lFT9I߶Yv?Lǎ;}8C-/)ҝIuOq]S7D%eyжpzDC4m$_-)K|{1]׍ia2*sV HM =Q=_$8/5&ƧA2*VWtЫ8sh捲SEDv8 ToVs=ܔ_HG)uVJ[𩑚նs1S{7 0OyF5oxMiuX"=jGRUP+pdjA?4p>kƝ5LY5Y6EJA'dDO[YFCa{r(rQumz#P"rzOS۸Ӂb rQ+5*h^5sn@m, ΪF#'FJ{s_@񷃖Yu\T~\tI<'4 ,CD)1VZ~ɀtG˭;ENIfKN?`K`s8y+N$RR~7_uo uQiGM-zz:ڈN+R~OW݇FT<o3U,"x Ba{8#FWv~<#2A]QTωcSg{%..nD1h  &l \_#t琀j (ijߍOjx݉iMUA5Eq, NoW<;jwL<A*UPx)HXx!7;߯jA"e EUD㆔#9~x9)f8OY࣒$ F`i¢W=\f@{ E~jJNu(f)vj'A}Z, RչWK[Qa[˳$ ,w"c5x!Prh^+ *;jB3cĘ$:%.--2*hg0t5NK};]D ^OQ:g ?8wp;U4.H?FJ}]38}[|"S kgJ`@dxX"C l$j;v 8<dS~ﻶ)Ē^CUH+pz@)iёC4$<_ZߏwO ~*EB:En0d|vTI=(TRtE7hfLꕝ/ê#Ve_ZcvrZ|;͙ ۦ JGfHl1BWK.$t`P鳕[Dߟ7Me_p|{YS9,cF7e.jvtPߌ~f]cæ:y `)yw_)OKݪzT 8V.Rg^d:r*v/P|z`uQaF#,u]JEy^jNkm%{!AkjiRZ^p%y-"tv[K6ڝISUH}A"<2'X 2,[e7? +@*ȐV%V9I,9|]+SmuHm+MHg&H2uV`.霢̤0vb?GH9jL 9p Ӿ^8fZ5+<7H޳j:)6@%WM7K~(Lti0ѹTP/' (GW wXNq{xPICK1ʅ2$S^1̾1vv=oXƊ0c Mgg/1%T>\aQf=a'x;[_` s?"=+]DUVHUaC%Ѩrl֥"y[` '-a`#a\|`E5Ӛm5yC#D1^zĢܹ}!Rn^5gqaEZCHԋ6n=3Miuj_}`U+1jlU.i9xo^/" Te~pL]0+lE 1Vx|!;Sxw?nh5dUٵ^'>ǭq$&QYNd8Rsܗ2ߦK۾t֟𫞦n\60j~­(5Tebj3.kF_錿~~Im#+3S2#]R~EWw^^f۾@.{\bjC+R".OaA#g:Cjw?!=GRR3N+k\_Soynܴ>;X t#ܡrfpf T#I&.Pj{Hv"՚P1 8֖e^޶zòVy/kn,ZsMY9.'1z/۔ҲAYq:h"y2RZ_Кz8%~ᯪ6џ̒R1MwtvuYK%gk*{e.hG*N#R/j{=DCxJNij??=\M A9?W?KQjẘܭk .`<^.Zbh(/E^ N [[Xi*@7K@Pw#-D1O=?EݹTC:z}WgV9r kv #[ϫz:Sa'@IS"/` .:IU4)*p@΁bP[ٷ[V5Fꇟ*.~~z^@kک %D&4ws,ekGO.iV!dOiwPE06xYEN7($r ed1 _s7IC RUHR=55J_է}f N| $5v;.U'TK`E*9eZJXwR֭lPP")T8wx+)vPY2MCcm~Y޹g6eΑF*L{v~Kib6/RgkȍآF{5S{UQ:hr^/;p40~@aW)@&m'y@g0P{?Y-1`qdCci%~HP#r)rs} L,7z2Y[,!_m+.`XC-+vVvW B֭4  z_=HrY{Oʗ6*Sc_ˉn [v~/xrՓbj0 s1QX`>ꌖ&}{|e[-w1rnҺ⼖fH8aS a;WKw?CF.e %.1-Έ͗5 Д~7n6Ta=׬cᬊ4Ar=^K%ȉ`-)Mfhs4B?U0p61<ǓB|IXE<"yPR=XyFƢ yZx?{͖®+'+xaKM[\P)fQlbzi56--p"pq[8-hv^Na:yfmǖ>Cc!0yz}16K/|EC, jǴ)f^Ѹ(vt=5C]+)"a) # ѤTMg堥Va1 AE.=u5FW oA #v!fg? ctBRȕ`5<˟$D q=pAju.{~me@;KP$Yo q&~ >$4ǩK//ITks).a84bE\{koar-B<H ]^`i zOl}'eWqz#Ϟ;A~'-Vi]D*Z+Bs h(`" g*˻^]b3Crh }]{ L`@պKoF]0,* Я+~L YBƇk\- :ώip[6ܥ cP%> emR=Ah"݅ò{lilE  ֙);4*rY5<1d׫vy^#/]GN4j3zwQ˵p~So\ FPU4^^qn6]9@T%In^z9J+QzN]9`J=$RK?O xI#ٱ}NK8#rL3C xƹmCmnXe+pֵn*oF8)0 9l:x*6Y&bPk 4ѕTDJj/l)t19}R,vSlhnk((}Sw>e!}ަ+lei4"x"SE# cJj,,qW%Cͻ[[PEGY/}Og3C'9 a$*`RrwRG+Kע{fާ߆o`]>mnA\$Z8yBI)2eAAj/ˮm1s:(<u D8BL;`X`D0Ux= ܝ%u@'ѣ\uә !۶)dw`)f1] NcŜK֟Ͷ)f d%͊1uZM,z3rEYM$$Qf($\Qwq981otsk?]Yt d\8LmV 1?:3?}8W]F8ݻkk-Ϲ.{w^\_:"?@nBPn!`;V@ɬф}sZ4M2G4s {%W! ~%2 2tqꦈ+}0U4WM2Q4{!6YAq0;`F8qz}Oi\&@ƖNnmGfe%zw,mNH iiPqji6zZ*a1r'qhCYoGFR * g`[S>-[P#3Ԯ$:cEPJ تzeI-(CjQYfZ7Gk<1@Jm0Z8*`VaYK|U+4br2{ _w3ۑF֝8 $s xLSœ|iJfO[Q(C1*'pI\M <UR~jl|}K]nrHPҊ^ 3fo.R ʷzZ S^@ع.RuZZ˖6S+R=\<ǽcriC=NkSnq{C@źX[a.&{+|}y@c(Ku5P3 3< =v#bhG{z|%$B ǻ)13UF4^Mw`~̻^ZH_9 %~KIi#zfL:Su Sy봬M_CR>+((F!"5C5FFHI"&ógxY\oދk Kżgܭ}L/).YE' Lnz1 hEhWzW TjupZ:'%sjk/Zi݋Qt k ưϊqg/HMeۈ0[߻XJ܃%mhNi!e'{砶_4j(*Y~%J)|wd8ƓDz(mM2CPfPP{*xg8&P!{lg}v|BGRMJuh)īCwP/hHA|L3{R]ޡ#vg"op/!% cV)l`‘/>Ҟ߼~?+Y\<vȌĒ?.jMҲ&mmGoU0/Gn 99y{Ӗʟp]z88t>zh:CI ^'_?P\R{JY؀>l{㉳OVCk{|5YF@G_P[e0<׹ʹ|{pYĘ#e~[˃I @K< Q`C1#H>PCsRS2{Apl ^Iin>fz}{~))>h^S~yX~\eyyڟϲ! &d:5I&!6~'EAzg?QSө|lSvXUmc:ꅴG?sAvt>K8(lz@_UTQ.lRU5'_=9x+}cɧ"NM?xuR8gkdzp|"|d==#RcҙI^기ѩ![mMDh"_b2Fxu‡xK]x݃LȐ")q3?+UyV?7ۜ#G5K9_ˁt熲m^V?>%J?DtDS.+4_,Aro33#؛ }.z&S;JHj6 .JzAӿ"8=ϟ9=Շ5%)[?%J"]E} Gi}%9z$T-J0+eXqFjf.&P{ݶ@Z7Jw/f1iOGdaT%& _(ԵZ7i&bjEbc/Hb=)@PEi羚F .$CgX6^S}ؗ5 _]υ~MoQ-Q7tpmVj;SV蛧lQ*]ցlDaw`=+k(m$ZWr vGlY--9ZlQSqmɥKIPŗ^Kн&WhY~3? {J~cF?IZ2ɉ)ѶblQRp@IUG]g#^kdk]=4U,}=mw@w~1M v|ڣrDiMաwuEL􈶄D'{&푂$GНmu_Q?;zh:t鶴2|vܦy`$2Fy) hN@j=ϽRJRb3ź*bh*i"k)yRT:9bJgW?0ç[;d:¼v+- Ep[RWٖ:^aPs1Λ1UKlU[4YI潲n0)۱KeOŀu4cB'2t8TNXʭnFl|CU2@ Z; j֯DMeHR|F8D mj#Ka(YM!1j kޠ_ݡ١ĥ}ϚmK)oF1Ǻ7 LhNmOQ_Pr;Q]_ Erp;/[w G;x opwDɧB;d?g ,c^H0*\~Zf1SfPbXAblAP\tD~ ,Z^,ɪUwxWCc7?Sd%w$'LSџr&)a`.q,%䆒2ARVΙi1W)!=XúQ+wJ8Y*ݒ/y,ٮZ$ssF?t2r(ب!2 ۶̭' z2J⾽BY%Y$UtV&9T†pweQ&(w|Ĕ)!050e<ϫ &^"<=GJӼMp8ϋ7$b:_tԉr>[sNS8wM #;Feo~ REj4[Q\k"nGVZfx>&i yKG <#  ͕Pnsw_Q{g逖aP]zbs&e}g8ywo|ܷcP Kqh#v .:`*3R.!Hɫ rwN:^ sE,{7 OӪմp'mi"mxsK a`,$eN>7ZL.gK1L|簻Z=Fφlʳ6QbCeH&'1%Z ɦ2+!¼ H"]{3!sZ"ƃ;hqRW${!i+ c^KzݭiKUZa@c<+"xU qT|P4гG6To"1'D|Σ. ͯ/^N]FzdsB8Nʇu8)r+gKFƙzp'YՑU.<Ӧr]s̖U {pa!TkQn=MV{2L%ѶNs @g ˷ԥJwgev[8TCNfa!KP& B%?žMtFd(nꤻH̹ܹC~4S?^7s@߅,[cgInҵͿN-;M!nhwNes'u-wJ'v_~㗧"82<8  9g{7\ ?:VuS(n!2 %˗ЛebVT݌qZq~{6AHcςKztR2:5x.lABi~/;,)7)߈vez-K(~֌i3}\(EHokzuMv@ԕVW>.<Tp[^f_kmN*!&Z$57$Pzi eWNԆf:K}|VLl0?e zHU9H:maQgژ2aM EZ\&)?dų+Z[>\:CyZ2YԹj蹸 -p0fҵ "WF8;g> >OK]RL$A skgisQ0 8yKs6ޓ^M)*gl#6RA?WSUb?LoO5JC+ C@|??wHĒ;WʪJsU\&Km-KNДQ6ӬoE%TAzF%h=dn SխmAĥAfܝV3:+C Nٔa&N͸/n+.`81:ϨI!+߽ϥ;:CKj*~5E"e5˲B6eq!Dm|`XDG4ݚ/A})H\~e5/ϋ,0&L,ZZGi d[IH6(ks N?(z!" PeiaXsʵPL;{a6DS糊er/J1ژu~ U$wWO^'B,5N|D7$"I=/-*ߨۍU\'&*J"0QN).ewpS1B0Jsk*hA]qSjFC{>XjsL%}YtnQl9j#_TUU9N뵗 )ws|9J+ 2d$NԨPZj۟ZHZR]W\c/^l=eGO9hn+7M +WjVYM1m/{ԟ\mHҚWJ!soag~y]zJ2M.,ַVZ2 Z -,ӈL N眴iPQ=h/)]`? bv%+ǥPAAw>0kinH]4Q~f̯ sFϦ=g,gkpRly~jw2Y~5@uW@ߋF], gT-^ޅ?/h7;ف}(Д@Z||!57iQ4Cc00[eRT~>IbXѢ$i΅{JJ*YP@"}l-yMIj=` .4&.ߣeܭWͨǪңWL_ kO9 m =7/T:hdcSHSv(]xfH4./hFv>]rHڂ]e:Y:P~I> ̫vEeb0꽺 gcv~3n=5@-J@@޳>n{q5ȉh-6$߂v`<|~$%x*D#&P Ϛ ]GI+˹HvMt΁ 8P #Lj|a192vӎ  ͗% YXΜl:;zMQg2JPvb,}-YAXw^M`urȅTTT3~A]eGXT5}ur&<߼"{IS #uBOvN]| FJ4juA/h(P:Y(u-8K8˹A14޳bah_Q dťaMAJٮ!.ִK ڐ%jIEOJP"Xsw2a<9ާ&ZC>tS|@\o|#*iYY0ݱ٠O@J c:EPj r_OuoVdl9U')ndv\TzCK2k #U%PGG]MێMSA??j߅??Pg 86$%v^2~"ey!.UZߑ_-2V߮]tz8nx@*ۨ٤xPOR, r3%"YC]7VSOxsp;b6TP\XJH1ڏr8Qw9пXtOz:$ѵ`=IDyᩀy(֍rȖr !tXC 1f WeׇrN) 5I)vPYcQ =D=}2IuSg=סtb v~$|8SMUqBδqYF$^ 0=4gO:.; }wK1t:f>t\N|/ FTb,|{5 syJa_ )vӋq`trHyF w G2ܸߣnǃ )ɷژ iC;2ja5vjy7K ce^{2:pRu,:YFeK[ړ$-o} 1-|gj4Tt"E ׭۲z411cE` .dDž7'_5?u?5Wq)][4u KN,<ч m+&< yg+b,F)3n\n=}8[i:jt ݓABBЬ,|XQf(gEOO9gkE(!ѧW!R|#%#SQɚ5N0T;9|.]d_\܆2qցtkR3h9q~m-pbmo;d >gZu< 諥{~hlH8TTyDHʪɆmK-u*zV_EǪdhl05|_!^kމ];P'545G[`;<2 Hr*Zmji љ4NƗбGhq@ v'˫3Q7M| 1/= M\L1ՃnKm Db`&~LԭY eVĖF`;۠|HLU upanHZ/~7ּ,1=)Gcr*FbU'$`kleY N ^u|{ßkNqE{(b1ᬎ9eoFDjtoF[K?klaO}]0`q/0aI=()yn/N*fzKx*iD___0ob1\;K9ZuiKjVϔ$tWfWD# 3v߫l^%Hæ^_O[ji>sWlOﴈlCgIJc~9^;1f[6(W^lJs)'grOBdm:rFagpb?{ 4V?xDW4%ßH{(4)ku)iJ,5Zr̀GEU5Д;Rvr\ *%M( ]"cm ܾxLd0cڪ 0,嵍%!S OR e} -I~k[ByY+qcruMհQo3<=).R@ }LZ1 b\BDm%H‰2;'&~1c4_FKBU뮬uM/zIKMeÂz%HO1:CPYVSO8S֋|"aj24\ƃ&@N|OqYaSN'=Bmh+Z+;fLPs٧6%%+%/xIsX&ӵPEݸqʲUiMMŚepϴ]~)&/ _/a|~gw6tq ì%t* 5_^+zK 5ğMs( .)O XMo~2|߈Ձ2A N.m,^p<YZH|Ae1Sa_NUO@*"E~-IsĪˮH?VP]n%?uh).9uvVܼ)Qv /${:E<"A~טڝ^)QgiİTN: >hc4|]xSOsd|?JAC-I껊q_r"L{?Er0d%tHnli03$x8'.{tSI \~-OreiAQJU ll4;ؕ9VAx`<떮"*ߩy<<㺘CҳA1ɒVL[K= әZ;%";%uig$鬺*zŻ@S*W6 ?rGQ31hAq'ϩ6sn\i{z!]K{*DV qn)E  pJ8='ߩs4š'w \'Ad01&kZۂ0羔x?:L>f&Ъ=DKC7WDž5$PrybL+gT&ӓKc7hG7RC-qiSv~3Ht&hj}*dsS1M~k=k#W9K6:KN~"z)C* TpnMQ_+?u{P@/JwKهJߪ6ǔxq>,\ ǥh;ߴ-… zi Z0ԅ)+=Io=8[ .ᓥTgKjޯ*E}h =WIBǨe:&OpAİ#]5 /F56/@%@>?BzvHC3 zr^|[z%~ԳZ0͕|YBz-3m}۴c+&g\=ץhݳ^H/,R BƇ zCՙ[˵_#N-N{jނzriS/,{@۫8ʈD6|I2SHäGYHl=)tsj:Ziӹ%~E=]H=$fFD&BqMIyX<RIՁB؆wQ&Sg6:>H0?qJc69bh?g۴ŕ?y-ȵeIo D[-<{7jmM2qYv`9O<)@*"w1B 5&JNBڟw@tPk&͉9h ࿑@3aNn:yݞSm Y=iѯ@w :RQ}xB? Wpi:]ey^ߐ{^iId'ߞxwCJtbiTɓT|';/+\4 O<=wg+>mP~~aF˱fIoH] Ht7oct| |Q5yl 2ܸ4ЧVm {5ש䶁*LhFG'D49-  i\d5/u};<~攵gI!AqߪX ٶn .pyt%#xBNfts5]mH^$_y AЗZF O#hx/y0BS?`d^}~|򝣛R Y&iO&gG4M&ш^7࿩K5?I Og()}z]Iٸw>_.k*Ռ|c@us(`T>~\x{^  evXEx2Ā; JZ-S,a:M?NݞUc4BP- Ia;;w[ JNt@x_.68g:]hRhUB\&T(߇OfQFg_`YT-a>&4MH.cɸ/=C7s5>R;f~Bed t`SaPC,=hPڌu KO욡ecRJ=< =xNCeܡ X4B7%%-ׄ.yPBMQ]V%J}M-F`r9L1lJg82q'S^)/MtF GT"s(_mpyB&{ īKHQ-D:УOZzCg&6$:Gm#-@Ci3KW&_T ]:s%Z*ʥ >|sǜwT!ɾ\y$qYMiRKƬfx#<,  m(2q0OgDof3,z.?A9!ӊW@X}7hK\oRUU.`U1x%AD-T~D'=o9EMGՊ7*^`١\ȹ}ǃCUKR -bH"uA^u'AzhEjxfPǘ+׈sΓ\D@'YXݱkʱ3EU-@  {uդS!%Ž}k/iZO݀)ZJY!Ã*-<}uqg>S1XgT,:~ef0^\eFQHπތtcp׉^! ke[蓉pœJfG_Ո6߫_@k(VI̺@|ng?ScF_j^'K35@05gЂs_%b&JT[qd4̟0Y9?H@9f!_{<6C*c  vUbɤKzJ3<E=uc~1xzo~BBhe:Sup6Q=# (^a`x=ou1|R;iBg>5;)`zğM"lBI>' 9ü([8"8ΰht~k{]ʧ lAP1o1j }oڂ^ TL|(թL\h/p5Zn}h˜z ܚ4ؖ&tjL_W/0?5f\)jUw|kɋ6mc$㢛4o@yHS+N c= imDa(0"SRvќ;YQI"YJߐ[9/hStK;~#\yUtM,ojTq?çt:e=A\&0  qB=,LSu{ۧä1yzn{ |$r*E9N _{o/'x;PQiW!Nu]o˅A33oZ5-_I 4u6= Xuwtqv:/5埃1ˡң֧0  ;4Df?Ԁ~:W,VwTsF&-n0XcXb=-Bo8yefT m`I}7 _M9홀wj>?iW4eϓtO,1S;` xn/R;( IH;1j ŝvnX'&ccph_&̛tn#=8|v~7j[p7s#vL>~G@l;[3rD|G~fKPcK 5k1QΡEKVQX-b悶,Bhuq2y;&m ! #@}J۟JVѮ⩏[>rI'WIs:tReClJoo_ |0厘Gaw1rF1詃(ޝRӿFoXY~)Eq:!Ƨw)#:DU%+V5MDܥXsb!*6i<-wUftjRK@3{qT\S?^,9?RXy6;<8ВGS;OP7 \Ŋ+jfXx|,U$rX:br)FH<"i}v7Oq bKϩMnSV& EP,=4 s 4-|hAC:&03t0ΰxϠ\!5HZtH"=a溤y3t+qxV\E8X szRwgjWM9%$tuύAȞě>8V1h_D^lp@eIMc3Jszz+P,rsC%t0GT0Ec916kx"JF)MCI+ XK˯'] ]8vԣ@ZݡÜD =锍[@ DN$JPMЛqmʣPҋ4"fD#H }wGz%m,E%Ab !2Ĉ.SnSr.g̍P7(:Է:J3Ղ]͒2 @gu$l1U;rfs_~D9M?s(9v }4UD[cјm [t{@y}_7NO(Fwq(U$n2VbMd 1dHnRNRSPբORL#)?ڱSSY,<) R5kosEܻ(?q01G |Ml0v\d`&i% m4=Q~-\k>zB.']H:ȼKZ0+g~[}h{YNNQY;4^PMB.ziW>ɧ~I63gG&z5Up4k8n KP$O]gFK308eр鷭 )"xZTx ң#T%]ǠM=. xTu VTucLܺNwY͵?dR ub{G)՗<&hg.A *oue\Y:E$P`NXQYn.NuyP_ ƦíwBj x]L+v(xS+^ yu)+uE9}=<P+F/)A3{.]ÞEs \gt8>A򛃄5nf % stC$kڐNpxuwkWINR feCТzH]A[pFogX啼5WqA W1\93<7i?8&n>gRNE&OC\xBG'_7 ju^?f]ENL/C8uXxc@U&սK EH'(q(uK/VŢԢ˅Ds0Ϝ_N\[9gVlk?t uE \wC .dPt[E *j7d4O+C(4==^&=EX(#%E' :R)5Oc>MPhS"lP dץx+#ɺ[Uwh" !cST˩")[? A,1A9R-@gH7YIdAZ~$p>=>[} EW`)/Hj"dNNC\˜}tB\jtP˷  LyQ|oɒZ=#G1u(t7 Stozdt7t )rdH=WIN;aFtDAO “XlL A7W[RL)$@ȑbKϐ:=mz~RmE[sRF<r]_r%RC' mXK%Nk*C]x}w_oaE:݈S y\MA{E3熭NQ%8)2htB Eh Хxm0TRRWwT z(nN3y&v17dK0RD*KDqR'-s% nש&rG@scu%E5\c @*driBX6\NKj6_Y֯C}%nu%ec_#/V/e RKuE#Vk.:k rIT6!hcdʓ#͇ /=֒6mT.'M3ci#Ko4Deҷ5?lƛWK7v}$mbP7h2s8'[1/L=uO=#nrL*=8lp~bRoqO-#{qg_|-pZuJ!.jQjO&ub7S3)+Σ.bp:supDfɝ'e5 ]] 3OnnGT3hڧS>{ N6I!ң[4v& Z\ GsV3pCqes<-ZJd.h$J @ }kx)^ҫYT=ehQ%xn2(65%I^>Q?=u4ws Mn^c1Pa!WbJLJ{d/^OZ(`$⧺wi ~|{|\$|gliug湳G2cob {UM={Ι rVY]Jԑ5hP{ZTo^T8Ҧ-J"Q_O>.C}iS<RꙚ3@D{©;J$[0͸17A$*,JM䳸^ \nPW\Qz2pO}`߸=OTI $POcOh~謹;@)Jmfu5%;AObP 28ϤvnNAx_٤l5Hfw@z1IFmjC!Gn\BܷaX{J9h}b@)䩝OSOk01m:pjB/ B$ǩIkù] tAJA2v:z hQ{j)ns]"&F聋igϩfj 2=;:t(j?$IsKZ>Ó[W[zvte/n{ratPTbzehaP)ޠWA[4 T@pL \Qфs54M_=/ R U-~Ix?|_^M-f8v~>}RIZߤW销R&*Oλ<UW}A0?Ɂ ?}x~1:i[[7.!V)1((4b)>#]n^M&9 آ>OykٿSU3W>e#PĴ/dfD!S ꍬ+#M Yfn Lk.\(.uW!o+H5*@S a cIyp/OBanRBBċi60{RVc Z;B-$($2Ӯ<g~xj>)0ȣ,n&˞k;>5]sp>dz5' =1Y pȴa/4 8_jW5uzB 8ayFi1nx܄k{BñH_7%@?,'(>Ǭ>| ~2ms-Pw+Ԣst<+4ZI>${M[dfa:?f3ӷ+(L=V,y$QAk`]'UPVDLFT'I+*>.$ͳ,$srO].|v8놶#V!~ah,G&;. ĬtHRR9Llaxg{؜9HL@d)%wNF ^-;Y]1lQ5:ZNbOw @R³uw|) m@&P@4c(ubm=N M }RZ?_=$3-E㶜$Hfau{)N@:m;8e]TЃ^᭸I$,d`(_5.FAx %R+ڀ^+wg߁h8q4SUmT1Ukg;bao8[-7NJ|iPBo w-M~4~_F xsm`۔@'!qwoHUMMm1dʎ';tXkg*/Cvj0u7||KԿ| RSBc_+bkH*eFqu,OŢ/J Y9եo\^ ίrw/t]x$>M6k(FaN%=J T>~{UeaPd~q{NC:@:Yu^ /"{t0I(zxY\1VҢ%pDyPُV]ERuF<#7o٥v<з ?+ۚ6.{b|ywYa"& @6[Mp*KUm7NDmoTDtSdŻϩ@%TC|)#<M ]j[6o;DW| N| mIV9VzZ7;amG' YQHZ4;4(ƞүsЀvWʔnՒ^TM#2r͢xQ90W}SK>oB!T%I b Ev[Иy/;B:+A޲ y׉*q;) 30"𷟓 I2-PCtG~HǏ?{uZ;0==TݑIΗM8Rڳe癔ٜRf(͜MSj%M"q"iC}̢|ZC4s$7t2 qiB9τ]BOC|,bB;$oRertpMՠ{b8~l$J[{h ˝S>}O _ǧy:]y% Y̥QSì5Mvs}a0kz4Fo:pRpZǩKH8NjQA7]kfߢu_6Un~ߚYni9OԬI2#YP3B0 5$nڀ wuq-@}0Rp٪I:E{4rtM:R&er][ {TQ1MH1kPUz֚$2 k pF 1ds_#z;>:ơآb<\fYؘ/n:&<a :i<,gQ6Q?z208t?UzPn `&oE5_5o` L%" 'K@ur^% 8tfBh>̪"_KV __+<˷(&PG-rJ )RJw˳_u&,^ ƥG|Qvcd9f!,,J#Msw8|<YƖ;W%2y\|Õ VSbŨ&] =͋ܛ.Ҹu_>p[.v=do iyC8\ꖵ]*(󽤕JP8225>H̹wNz>Ǹ5 bOfE}(e8* GհW]T]U'nU~9FLb`4A[9]ӆ2Sz:9RkVH*qZj`_"mrICs } K4"keI,lZ!y @ !dR~y"$28iֿVj[rK-MML4wGh]4\i ?2TI@gt>-5K@Fn+rN0X/ְ\F)]/|W|H{(\^ƻAGY5u#0[ P7<İ\/tH=Fw^C {ٞ|(.Q~Gv.;w.H);ɤ<*} BG!>M3 E+9Ɯ =O/m_|VEtm| O ʳ2هF Mip)1mu8sW;qSA 3 KI Kb$%)(M 7e}kg*K}2WtxM8SJ(e|yƐJG4ho mǣ._Q_QLC>=8lo|z[{уv\+ H]/_jH}ao^U7@inHӰA ICؓJ\=J֊q1ᔵqGѴR}k>)F5Vj5a^(t8StFO+WP~xkؔU~/f G~y9LVs$=6Fō|↦v#9MsI 9'6Qk4R p!ȭI &y3rZLh>32nUY" :T!iA#\M!P̀w7M8ki>zN@!B$4y&|:-J~ǶbSZ?ќԬWKJD=>` ;kˬ1*y溏k|Mi.5J5U/!] &_blUHPjev{t潭(h瑊d-hm g!Gn)K:a{.sIԔ= iϐ{ɢ'9dDTIv"Kюeo mǦ:1B7kzEz|pEMCvo+X37#MYUH҄r嚀p~U-Z~~ήZRCz֨Eςa & ̽_qvmGČY٫4~dsWoH:3oR9Dȏi>H2p٥lIP~~=vRkpoPptq1~9IRR$!}!7ӖQAYL1??p $UJioEشJNTqWާ:OwW(=sdҊ_MQfuOz'g>¦taI?N .|Ǥg<0iq:_CCKG /rדdui!eY웺,T\x"x{cԈn`r~t8m]Dž^ +u&گUZ1XeV'}q_E,47se 5 }pʆ}lGXWr/HƢ&Wn%;m.Iuy ^&h)alz [Re)9z48l4ij[۴+B)Z4s>b/2ƈi:W%|y~i[6d fLʫ(L}P?IyX"?RGQVSE_AF0DcF8m/N=z! /W'NEҐIm<(n-b مS|`U1GgHbK\)WP6`/ =s_D rxŕ ֙[߫鲕ϑQP.iL./PAf)g%` G*ͺX<7y+`$kBu#k틵WKGIA3ƪ k-{#T @]#]m@!ܢ)aѢ* Iar)m|K )T>B@/|x̛^P6mJ P9{\EYNx.-fkx~kŞه?W[IOUҜL% {GlUr=(篝EpF*kSS/NPG-θl|OIy ގUJejR[Ժ^V>nytJ0I Bݐjι__1^Oƹ7!=JB=$T 8U"h^~0ϣB85z/>kĦqlGyg%AtŞ FLgݥ.\^tuScd#>g]ڸhNPw{~yhzH@8IռD]W~p~rVX.Cy~eRKCx!a4mS2&UuMt[wGzer^}~}_4>cfT03ݻft$su֧9룄bTE5׆+Tr22U`t@9^}԰ӣTe]_\FJ"4--Cr\I d.1A>wަf(3 O8_4+^{W:rNBCe 6er6s>MCtl5_|ej0PD"9)@Ji*[onw;XCyEuhe!((N_#I!vR3]L-1un (Ҭ$8@42O]9Ky'rMh1k4pi$q84ר VvM\ 7AV O8\*;ρަhǍ2 f1aZ`X/U՜ɞ}Z}R6F}c`u)z"kF~?l$vLZo+} 82 y1SI dJ)|=J, Q˄/v577GKǻfd9Bn.t7 P 8i|A~Y>FjTa6LH ?g:z-$OC7"ͭ 0um ăX>n,E֍qESɠ68$Bu&[BPj,CV7̙+y?AKr\*YZ7&]<q{`֖ͻUed.4b˖Ov͡MnTY齦nyY UA˞Sr&D1sw[3ul.M3]d l]ǒ֚e i|_gN\cZˉˉ/xF:睥J2ulwFFܘFG >*A_ JJS5_Om Eǟ*o1`C 4g=X2Q: pmx!׳! ﮟ=`2:5bf\ڻSjUq7^ryw;זFױ !@ :'&[Жu-yTΏZȊ2 'h珛5ZSh纷1lE܍4%.Jhma^խ0N@8ψn/k|VpFMAukwM0Ac]Öm]Wq N b݃0ݹHoK+1}%/66кtqpsXe32P{O`۸%x' YyUnyxhUX|ޯuoojvTrOZ/ 6eD4#$+:M$_$2I%l%Ea_ z{};`^\ʦ8}i\IU /u07i{>Rfyxڐ;U'"ܽook2Ⱦqۊ£H쉻4c1/Dtd`=f]0.P$ \>o֯v2`\1 2@mëQk %_qh[&A=a9W mp ¤I aܹv wX^T׀Y !P_:܏f}޵n SBt}҃Zl>) [d~;Hoݍ co;OI< 7Z]jĎÐH6 +̶lXt M"Ԛ )da$o+k?R* n>;\z ,Bb9̫:ӄts4Bga }2*nÁFGlHT8ڭ4r_9`߱bM+6iZ8FZb?rB:vʜO[gg=$`xFj VZ0d5M2<2x2Kxx#%ߛ2v C1dxSbLoKA,=z\۪G={I)gcis3'Rbu*-I xEj֠yxgPCTR<oi&nP{]j.N;a@3bW=Er\3ZD 1:+uu-3}D6aU`h`W !tɷT+cxK!+-6G$;Ӷg]绿{w9ǠgH M85 O7ո>2+hq1 rZMvL-}Al=@ m_|?}~>q>F/z|4䣟,qN:ZZdl[48~ L pH{g)pZC.diG*4 si됧t[ߚ#ǤYM;BPrpn0pjMk{r!LY璺VN ?]iFIj8ˢ@M-@鶜$~'b 49vILIM2:((ёdf2 tɓ:E9>p`@c{nO|&ݣISG0iY?4eakUڰmwO"u*|2.;qOӅ+(bGewi(n^ІMwŋ$R:Αo5Swb4( _7n}Hi腾'{/E*:Ac7@i+Npic2"-OW?˖Pq@nTm ShƟ_jO:t2y)Hq'&n{9QUr}<\*z^_f#ֶmpc/}G:#=ȗH쩅T Mڀ¿eu6> S̕gOTDPh9pz^C SSz͊wS ΧG0y 6)N=S]H :\wO@)E]*?_DP]@ gKL=I'0% H_$(rݭnu4o*RƑ#Hfytʌuwaiunoǵ.&߁|G+6AHԞ:e<.%@) fZ1̢[Tn[uaLÔ=Afjf !=m?q bK},Ѩ곢@6qxVPksv*N׿0i{ArJ@s~:RRЃt9||~ T'ӈ<.&oxt~`qTdW?& qSǥj$ 44;}i%;Rzs[d=3l:!ϑߥ>&{0?(W\{P$b[H5N?UqIUn> MǙFewMC4>?=4Cϳ5yrnS4*Wx^wji5lT.ǁ+}*>/~fΒT|(>l@/{liBZq̤?UP1|b>b' 4 qWo(b\ Kk nk=T{1er#g7sSgs[3=39J"&߄sx%`i4֮4 vϑʕ;_N/a;nRS&IRggM/=IA6TuI BJrY @gs?SzALr|BZ dk5o{geMOʏ[DwuQïs}oYǙ^p$MguvInwK+؛t쿦Z!?؃G2hpDEi :挀A[ 4ҙjIMuNEso_g,ppE vlӤ.oU4ƭŦgࢸP6͊EهW9/$ (c=}y%`JSԑOhI7pq$g^,jZc'7(.LAVGU85dw`8SI7П:1X+lŒiæa|]bR)FTo_=<}5cRfUo"P*5 ~jֆRG/h͘H}}}ɖ }4q'B̄6luy߀`R3-Q-wխZk*|){{D*6"yLl !]zGGW E_ӫxFĶl鏚[~ hV)$T(!C4he X4M @;8¹1տ9JyﭢdZgXzkvo^yX;N`)(Ah+ꋔ#>~x?M8PkƊk${~& Bu |yyy~~y>O[b袭u%}iuK=6 X75zkjؓ񑓌o K/:?o '_WG!W[A6 ZOCgef_R}IdxP jtFg*:0aoُѰh8#!YTe1;|DMDv GQyPm{K'n, 5)A%=mrD+V D|UA/F0 @#f|(択"KJTz@vKj|H ojF*څܹR' Mb!PQ_m-ݭ&7~{uRMi'^ n)6ͫnʼnh@|JMXM#_P2>㤯7QPݡiroexL+g+ nΜѯ۰IZ&[:a)&ӡ&s\M,?Wi$NH9\hpM>տ[0}69=Jl̪$XA2b2i[_)"gm  ?d/Z. ;']%:f'qO%SmLaж *D%6ϤUÊfF rՔd1lљ⩻49(tR .TcƗObx(Ƌ ,YDFF3PM7H壝!Vl/咾5>#s#:LKaŭw M0+Mp,KXR+xz5 Vݽ^)Px{FIR0۶ s}h )hW;T;ˡS;-9w;DY1rGDMu>a>>aK%E3'zKp ڈ3OV H@P9:F[&Fˋ-Rbܽ~4[7"kxi(eB"k5zj՟4K<(A$d]M}Oe޲kOM6»Kc_H=7$Տ4%43/$&%*mlF_}Ih =OCK#W\1"s_q~:w/(.kQBInRܿxŰWq/?qA|F\ ~u:-?6I_/6;whxpj8Yl`Mcw0-_i.֛`8-eJa~}}9?ٙ9Fb?cxgSN8bIkWсeu|֮-gt)evggb5VK)-:3{̧*;QOe*_IP_{M@Ll~'%OEHR_7ڽOF1 niKs"e&yo}6m*RӮ_|xPRLSьn$GѻKAy5QYL-&>H0R0Kr4?)*lK0+ԀېYz o|/ɼ(*韣<1a#_x>k_n|^'*sNooSJMw%/ u?ad0㫿fG uw4ѫӈ_7@S$ȍ*(WPw-~S3?L8zH*ibU'avo(D3*kAVQFtG9)MTS96Bi^0;Y16M@ך|S8B_:{L΃FMPsܡR2VFЅ+qTIᔚ)oUY}ԏHLх_NfRnAzH=ۢ ˛M'utHaf·*b "f]Q61)x\Cd!pC3,K)'coY}[1[,ۜ] Tn7pިe]2w!#x d&-jE)2QM:HYRhY!=Xg<&n[$M$zSsn*3PNmm xoٔiVqr6lTN~)Q=H1/|I6dsdOP6D+%~>;{&MWj֞,ݥܨ.ԩӼGgE6nW>!pHt@Sel?x$tI"e=+58&i|#Z 8G0~ kf<wǨ'J9iMޤ%;f*zQE<[I 1hSV61s2/2_Aly궃pL6Is{h*@G_BєzjH4Wq5WEED`P(`sw0CD\C'I jc ƼΪv-8kѫTG닊x)\ݟ!-0" u:` bq~d|4,Ę{zJrDgAxҮq<#̓M&M{cSYSJ6* v!`7`/՟=kXNWR3q2.oz%o tKja ײ%' פ %#s Y@OvAO |cJɃBGv {nko:Ljp.툸4{9PW [&m)Ґ^E>q٠ΧDN*Lv9|r˴X"Е|J`U͡^IG8Z>#IǦ j56t]&U0RE84;d8/˗Y?_܂M6u8zMi&v͜eC1ϫoK@8$6,eKҫ_.{M}2-@yMLMSA9%Gꨭؕ>7LJXΡ GAnp])ߎtߍv(0k׋7(AD $c4iTLb5tah#H|'^2;z8#3HIQ2IDbԖ+sK6L Qj^Mth7-HOsVgAXxZ`(6UHA ͩZaʯ⒒5 r-HM r7arAm#1cN>NMM&O94O|w 1(4=_p^˴zZKwX%[!u6GtlхZTF5s,GєQɈšYY3[Lfu>/QJC%i~Ɛ u7+ ?;T8!cPp|B0(XW:4;y茔xX)GH?_|mOԒjR>נ^_}&NSQm)aK/xg{û#2_Vp$& U7`?Snn=ģd*[jrh:x#&9\*A==)KpO CI$'w۩K3H< rd HohfX],+P/wlfm Cz:k285KzhgKv^wgP"$Ԁa,4a;5qzER19dgR!sOΓ҂55#NҬ@׸ >#%hrnF2#?MP,UcHU~ro&Ă-MʴURI+0L9=C<~z']]7?>U E0Itu&E5-k~nk٢MP{<$ k ^&4u7s Nf*JAn9R:@$8:ƥX"e}qnsο?K92# ʝSP(ţGv8ɢΔCз01JxG@Ḧr?3m/{?ُ@ԓ1م0@0eqDA,ye<ʣfϳ4rMѭOw֩Qjeq~?LMC2Sx@C$OTA]ԣU6E >~d(EW\vW Ru:Ѓs3y՟s>kO:@fSLZ!=綬-Mjv6^f0GI! Qysn-I w6T#. 4&IP*" r@M~3"8 5WsMZu;uk:FVO \M[ulXP}a8|19 Fk sN"LmJoP_*m,^]b,{ճT[>Xe$_:}^K%(qcPHʝAaIn(u' ? W)SJTЃV M)sn̶Q7 &(c^X՛٪.!oAr6@yHm\T~яw*:ծ UH2M_ !44 u#IZ"CZ / f߾W e:TyhN^N,B@MtR]e*tVXw6;F(HTXqh8QUo "Wqh͊ҒSJW[X1@A6Kti{ÖMbjr5J=S OA ⳊjzcMj8\_¨~{Bll4 xW0=?u_4 fS&φـ63^Ij>y9l 2BfuK9!. Ϥ}ޟEr0vzdI{7+A+ȃw@(v@\V뾗=5H\i8YcsjEza ;:_CnL]l쁸}iD[bAMwj q66㘭]U/X5O`G\X qYs-?QZbQ\ӉU ,2Ի&lKu`\_S!Y u# 4UY h.ߩE&es=vϦfb,kQZ#dRv{W}Z.*FuhHpBy9msꩺVyOT -:h8^CMaV OꃢIsHKٮhd|*Oj:ZTa!;tH}^tk4矛e_(*?&'JTVH/AC)LU4|[!u|L-S:}qr>*P⹏զ =Չ؀:jB8n:zzzE∦j?c${q6? )஢O]ɵ}g Y-}#R=1?q`xyt?6qW\3J 'mMZ'uWܛ8g<2[ ]b]*Wɳq֧mα灂zVH[ ̆tө Sx;g{ j@$;XjN펯%שQ/1EpSVHVFs4͍ŇKQC"jMaO&?DHuc]>W& sWWno>wٯVMbbhI G$,^Y<_ٔ\ZRzhk ]؛&wzBEoǎ|碹#e%s¢z2q!?N jIhE}|{1K>no"M4XRB[[?x~u{+@1қez;9.J۴ƌ5۠G`3MԴj[\0dXOj U06^+g-̕EoRNޢI)Ϲ\p2B>?_^Ms="kU{JW惘Ŧ1PRG^v Yg\oRAj5?fAZ$a UH&-?[?^]w>uiSԩULMClHmIAK\|.^P3< ee%Z)^'Mk%zss=:Zx~=eORC`yCW6Ց%9S1bB&n 6.j{#oiWU" ?O~TZBmԲR% zl}S O{%] n(cM ) ci Qҍӹ/+Q*e RTUkjU HOi2h/ZQ ֵ4P@5t…~*>+Nxӏr[ۓ}3ƥ%=ZfG}I_frj_ |lQd HO0?IYE`-etuV7 LFti8t&򪹶A2&ЀQ/i .Od~YGJcXS?OT+E3F eX!(](4"|Ӧ)BX`sXc[͟?|ҮdyLfOcHJݭq-]- J7bȠЂt$S)*Ȟ^($O@ڿw|{6 PBhйtfwp~nq~dK?w=O*q'˩MJcO ?>x/gis_JPKHEM-TAԗD^JI}GKvKO3Fw8N rSR՞E>KޙG3 ը< Y}k@|Ꞣ)Ijh\U i48 =c'OU%ŦO([3 <{*kM4X^[P MPOr?X~Ceg0DzHR ĩ:x>KgHGI~@lr&:Lab]OMj0 $BeZiC_qVv -7T{@bku~]e+i拀l &XT1 ;?:z҆V$Mʅ@EiԹ:eu1CG!/?Xs߿ds "RbǷ7lx軄~m6 )yzEA6کm+jEHҺej Ms;egp@OQH #p~M8W8nhWH JRufM(jKOQ *)G͔ %ԫ&S؇p 9V DPS44*@C.6ʆxHBIïZ$WG*"PU+x\y !θzRPuܛz*~ĞX4WFb<5GXKժM11_TX'DqT۫ ˎ d,TNɊU%蓯1BEe8:y6+1H@Bz94zhMp6e,;@SJYIGjM.;`;UӴQ%5pY qoAKooG9{m+1 >PO(."ҸYBjUշGv7,#MEjP{V"R`"wy5`^9)&Uϥc$4h*a=%$Qi*x)=ڠTӰ"O$qxJjDOHu Nzr%Qt)gS %l]Ŋf`Vmȴ:CلDd晴Som? Pc9+V;ɨ/^Iun[{bA*0/8|n4Xpk @" zOd#*5MPeZ˔Z4 oEU˯k}>I hLJWMj_-@IT(_AWVa:`)R~ҐgMsCQ VjDG|/'4Ƒw>*ZBj_Qcƞ1#r۪J֤HLhe'5a=D5dTS@aъ*)HdRj)h *L\SZ}f WtuZrjjJ VʃO;@o̪=iec|(ܓWR%_%4[ H#&ڦJb仔s驖@'_xK -dE{0$jsb.UD>!IR@>!)T!i–Lb+~UL B- x|XaX_(/"jM a~zrg/G8&CuᏀ\KQ]SdZtS }[}Q )oS#t}(}T[/x눚ԓj@h*f"mlGHhLI:(Op~߆Y}'?}t#P}Es*=>HB a: HO /~['U Ȓ'ԺY;_M?)H) ^D& EmLɓՔJS4G })|r~ /*-i͊OBV!.*~u),ZNC⿚z>g۴䗀"+z"Y)~AňӖ$BQ2+`$gDJH țT7A-2ghMt5т!:]tx^”ICH@GpQ(])NH 2U͚-cmݭR5c^}h0嵸 çRBT [tLP'6-?$zm:񯿴B TuA@Йr }%mn=̈́$\ZJQ6VSijB it"M7Mnս OkJ6R IѕRJ)4s͍}4"_׾MFӁ;UB9kPEiSӄY[`I1 . I-͢d{b 4>/U_)Zާs\ܰ38zuy8}{<4y=(i!PKּ>LKZ(s#n$ie۲?m h\iCRv(?BY?F}z{%Z}?oHW~ew;dC&lT`:u"-EhmQCB@ɨI->iSZ ߢ'n7L9E&[:cH+)I;>^0u#5!hHyjwE/zhDI.?(=9kRDyKLq; T9's7hc{Ɨ MP]Pi5ҡ.|JOy+4z& y *?]^R3Tt:^%_jL.'đWiʤZR(Dsi ķ?f`x( CI)*^ԩ/GP9rJ5* )*NFi\4ɩլgr{[l\ISW^3vʳPɮ9x!VYt#5!=ߓ}eПJ6OK.T(4 AB+C\?mRcUJIsVƠ==<6S~Ns "*_UMmL2k$GeQNE$HQytG s(%]=ޱrJԋ^G},}x$l!麸 VwfR[?37djL7 B2mkxq@x-c`6#ϓYW, hGo]"e˷bg-Hd[’>Oy *;29e|OP6|V.kӥ PF~Vj]XVMOԨR0>d.$RI5ǽڝUK)렟\a$YȞ?fAlͪoU)Os]m *K}P kZ:\"XCD!x ä:S{pgWU$ZLPD7Ao'I5m}•[=  r.scگIZSsRUQV eRN5߷MMhÖ xfj h,bJ};M546{}JACJ=+Ԟ|ύڦ7WX[I?9j{O{`:º* $ċY.]9REͦ gC6ztjuUAT E2yYu&j6RLmiAU8Cĉ{zXtgzX_?T |'Y䥛ԎWԐdFruKPA=$KKY uEU7Ҡl# MZ$b:|lQ4][Lv]Qm(׏2Y@4H YK\u@@ܮԖLmS l䁠'R$`þNQ }uƬVD]D`A]*vIC]5@ID P5QUjlXpuq*F:}4(֓Ч@E]8WT 0[tieD^ _/s[HhƲZ#\)S[ xNL_<$Y_W,K/@ T{W(G+ V~PtBI}z?=5Ff*ުRDF Hy\J4zqq䭾 Q!o-Г̍Z.AUyO$d 㿕. P"iIrU7o~=*Ru5]2+2څBq6H"z|LJ=Fz MXTB+G{KqzHV&?s]\z6i oŖyBwE zU#Z &nK+X4)& @bOYtЃݫJJvGS*W {ac_C`Sj~%ܠM jR s&Nm@y{8ϣLLoҨeZBpꆪg((*GئMV-[?lʒ>^3v/DҸԆcr)J ĬgoDJ})9̕_"qr+dISG":U|rgԭ\*"{,(A'*B`/i4÷Ot@V_"Bmw|u Vu jø/O_3,nS^ln\o7Qpd"эN`1teɚO?^':(rh+j +mVe s{|Wo-bةdVJ! iinxv7U$ՎtJd%lEW ub- ^ ŕ$UX41_ЅhB[OT's0 HwMXJtu?۞ʓ P ,@}2MVq_r8=)FPq)Rm~:WW04DkwVCY׼"xc$Sڕx5EWv~1D`})q]- aUTpT c-@\CMܨ_:{Ĭ}Q7/U8T^ \SI|Fu )3o }io^B+J]ӻ|ZZ݈0DD_MaRܦJ ZY50U;pz FIUJ䕂c;|?C+AlU* (8]a?\gF=iӮGEL]*"<d:֯[}O;{(%Zs٪-:pfg RX7Uǣk%ŻIݭ %s! UXN\'ѥ0뷳۽:}.gY1T3#JY{*V09 ӓSo 4*jZJ~ajUC c `%HE[n3*~Z/ʱ HW@s1]>}w /)d H 1\jjUݨ;S)U2Ẍq 4*m>[`xzd[ I0A\ c8ݨ;PK<(.ީ[2~hA9itr=C?{c]gq{5R1|^ ~!/O󌿾VR/a-OoO}َAZOьj&, VIaЙ=(!!A#%؎IЄQr NIwh_Lc1~2sEqG+zF]N/p#f\W~JY"BihcwMP|Ss޷ӈl*$*J2j%: wGt{P)*){5#'Pqޞs|@C_̨T{uN=| / h٧jU ;mNޙ{CY%(ӑ\GE* vUj åDU-ׁ.!ۧ^%b OHTVDA(hTARƓ<ߪDS֑BU;M]FgoGxEQ _P%_틋u͚if-%`%6ϧ`$QQjP =V&Q*RzU7k$z jI]ZE( )*ׁ,4aaCPohKI!iP ;VAzSQIӦg&N]ޣ5cDicVS귕]۔ԩxUB% O/ah:GɈ %ܶZ3S7t_T<)MZ)OpZ*P]诼 dٯ%K/K'̀nR~_!YA@o@l ҆16t {*+pw!ɘG_5/5nUU$=byZ.pfu)d Z*}P?zq'TȮu/T:B gE5~IʍtJ$6^NjW-QL3a˦_ %~-S4kRU ėo۰ED(((]6eZx njmOJJCtE&PTNhw0o!KGţWMC:EOWh GUUXE }=;j`S5u|!)BV$=e{k(YÔ,s]4ї_z:5=uS]PlRG$:PIO3ns~Ojӧ!V^t"Hc?`5z"w[Ԧ{5'?`d]eJ+!Smc/'Nǻ#nQ*{r%FHFW1*zy9tOxX:*~*}ީާ[vCR\tS;jz5eO4~,'^(B>biRl:cj3 A2~eBXc҄痽hR%74|yӉxq!u 5lEyEOf4XЬI?Uc\ƨt۟*( 1ޝTVMٿ +f=&\K.+S~X_\PzJ4ju1MkxH4VVȢ(7a,pFܱJP]aUheBFSѕSſgzN`?c%x}(2&J9 6K/xi(U'h:1mZĪ$sN'_u=Sy9n@tS.:ZϤgV&MfK?BH|lnXSskL bj})% LcrV0<7LO:$F*iQbJe|ďqJcJ:孯wAYVIWګHV ԱU<+ju \U8J҄&Q*%VQU*MiX!qYGzWI$zPƯue'Rb{sd"n Qk((-يCnŏ)piү# V_QXr! viZ;* k ZR% `S1&_tpߏA_>>rGϤ?")PZu+UIﳺS^S;UTttܱXC:Oo[2?q..*oyc$<UKZD9Tq*PU` Pzʫ ZZ$}ݾ2^4MA TWpV]GR[5BQ)`w_Kj^<ْR_ܧ \&z0k@Myui,|m[_A?Eǟ^Fʫv{7UrFPbQPFvn֯ϬRʂ?}KYc i \1j _| Tt=zO >jJLC@TʕpY\,ɱjH GhT%H.]U 15iSː"Y2e uoS䓨 )gCeH @O~AӨ &{er9œob|DT:ĭT!j/|8aRHuJm:.&4?O]/r u 59JLjWҞ5̮<:&T2L[;qA|IeI߆)~(\QN5Νwuҭ[=t_fPT&*NQtudϷ[5U-4F|Mq]iR|iC}oj6jYtJ^S[=񨶛`Ϯciz*٪}DlBݳ@?WM$E1arV1+ԑ>g}6kCteatK=MtLvU#V.H̠*Fw5+бxgU$w-/T˞_v_U8^^K/OX&ЮDeT+yWRΏ!Ĩ8ǂ:9)9#)TE⋔*]1*%T y R<Ÿ B.GO[|Ɠ?,.PvZD*zМpѾ 厰^cG|V ULXCsr^g_I43 :I@k=9Ç˾E3-jP'S}}uIZ_6>M)8MK8J)e"qJ)1:"X;<1wci J:h+[0Q+%*T96h7ӲDOcO@tRI j>vCm5]MGK67kW6M022_UnS^a6-*cd*ДxS eJ5PIESw)[xOaS]|p GygͼŢ+,&s4/A,;ӓ"XQ9XECśKM7Y8+& c_SIQSe`o$k$ uߔaOKց׽l;UDiq_cƼS% V3Wd6pA6X,hPWvݎ]Zp1Ub<|[{S5jZu`n6\{^(VTunTMj+C?̺+Q)(\kY6M{,ќ2榕7YrKzWv-^47Bm0]xmšo$)l T `jNmZ'9jMJ`@]ws |bH}tR:e<82G r9ZLL .ַKȰҬ:[vV{;^>Bq J`{s#ƉQk-oC?quXuC#OO'vC7^;#B]QPĥTwo:P( jm{:l`VUw0jcVw]!OWض5v ܪg]?DŪB.jlA~ SR>'!#jD5˰ȠKM ,@*<{-{\mű;V&rvh:0r3&di1 3C^ȩ?0/5\3Dl`~ğ5^qYbGTiғA1c?_ߟ.pX4L%KuV .?E0Mx3]`ߒ```2̳Y| tc/ Xs]@C5yۛqZ-3HNIȷGQϠ&fx&kV9$ )/Ҙ?>s;uNʝ`$ԱС8CYvv;Mh|_R2j%]٦s q|-Ͳo^[%9u낻y Wo,?Y+itGbI95][)D/1'0y4/<f"8}yA ^C+&M Of 2z_GxheLCT0)pwԜ,LI0xIbW*eq $|i"sG750.I_A(JB:S_3ۙ삌{9"]}8 4(uu>NDׯ =ɾ NniGaxY*IcP?gq>hl^^ǟuLǯ-Œbx[0GO,BfT]yM;@rU.5y;4aWq߼?{ ٙz'z70?"qPJMHoL[zRxRu`̭8:LSC[RߖfZoڢ |ϓ*z:PagzTg_ϳ^U_ů-$# b;k1|O=20( \0sv7>'׾ #xE`ώŴcG\'Oz^B|oz= TO6Gr2u5*4BA{!N(M$ck5tQO_"q]j?o6"k>N_`0SeԍXeܲA}Of ro{\d)v5!˕dp$4X̳8]6{{zQ/mK JOYrdœg~&Xj˂Mڳ&B|17y~7Ѽ r_!'6$.i0O~ktlOMrH!%J5?!"\J;pUn Ndl"N;Mh7L]DOVrWw\4!7ҲpKrޖs0r}U?t xlF~34nJ`!?{rvjㅳ4:PS9Or'gT:rKD9E}(UU&6܍1)BOƦlo_J_K;dNHveG29ȝN򟯙fI!A:98u?}M4nF"Ůԥ38IyyޞusjW/ҹ>ä6I$Ot~;;>Q!8KCA2^փEdO[i+|WwJ< &Q]?<3d~Wm_Z_IK/Fnڢ,l27 (Gz\fUWB>genometools-1.5.1/src/external/samtools-0.1.18/examples/toy.fa000066400000000000000000000001421211610345200237770ustar00rootroot00000000000000>ref AGCATGTTAGATAAGATAGCTGTGCTAGTAGGCAGTCAGCGCCAT >ref2 aggttttataaaacaattaagtctacagagcaactacgcg genometools-1.5.1/src/external/samtools-0.1.18/examples/toy.sam000066400000000000000000000014221211610345200241730ustar00rootroot00000000000000@SQ SN:ref LN:45 @SQ SN:ref2 LN:40 r001 163 ref 7 30 8M4I4M1D3M = 37 39 TTAGATAAAGAGGATACTG * XX:B:S,12561,2,20,112 r002 0 ref 9 30 1S2I6M1P1I1P1I4M2I * 0 0 AAAAGATAAGGGATAAA * r003 0 ref 9 30 5H6M * 0 0 AGCTAA * r004 0 ref 16 30 6M14N1I5M * 0 0 ATAGCTCTCAGC * r003 16 ref 29 30 6H5M * 0 0 TAGGC * r001 83 ref 37 30 9M = 7 -39 CAGCGCCAT * x1 0 ref2 1 30 20M * 0 0 aggttttataaaacaaataa ???????????????????? x2 0 ref2 2 30 21M * 0 0 ggttttataaaacaaataatt ????????????????????? x3 0 ref2 6 30 9M4I13M * 0 0 ttataaaacAAATaattaagtctaca ?????????????????????????? x4 0 ref2 10 30 25M * 0 0 CaaaTaattaagtctacagagcaac ????????????????????????? x5 0 ref2 12 30 24M * 0 0 aaTaattaagtctacagagcaact ???????????????????????? x6 0 ref2 14 30 23M * 0 0 Taattaagtctacagagcaacta ??????????????????????? genometools-1.5.1/src/external/samtools-0.1.18/faidx.c000066400000000000000000000250201211610345200222770ustar00rootroot00000000000000#include #include #include #include #include #include "faidx.h" #include "khash.h" typedef struct { int32_t line_len, line_blen; int64_t len; uint64_t offset; } faidx1_t; KHASH_MAP_INIT_STR(s, faidx1_t) #ifndef _NO_RAZF #include "razf.h" #else #ifdef _WIN32 #define ftello(fp) ftell(fp) #define fseeko(fp, offset, whence) fseek(fp, offset, whence) #else extern off_t ftello(FILE *stream); extern int fseeko(FILE *stream, off_t offset, int whence); #endif #define RAZF FILE #define razf_read(fp, buf, size) fread(buf, 1, size, fp) #define razf_open(fn, mode) fopen(fn, mode) #define razf_close(fp) fclose(fp) #define razf_seek(fp, offset, whence) fseeko(fp, offset, whence) #define razf_tell(fp) ftello(fp) #endif #ifdef _USE_KNETFILE #include "knetfile.h" #endif struct __faidx_t { RAZF *rz; int n, m; char **name; khash_t(s) *hash; }; #ifndef kroundup32 #define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) #endif static inline void fai_insert_index(faidx_t *idx, const char *name, int len, int line_len, int line_blen, uint64_t offset) { khint_t k; int ret; faidx1_t t; if (idx->n == idx->m) { idx->m = idx->m? idx->m<<1 : 16; idx->name = (char**)realloc(idx->name, sizeof(void*) * idx->m); } idx->name[idx->n] = strdup(name); k = kh_put(s, idx->hash, idx->name[idx->n], &ret); t.len = len; t.line_len = line_len; t.line_blen = line_blen; t.offset = offset; kh_value(idx->hash, k) = t; ++idx->n; } faidx_t *fai_build_core(RAZF *rz) { char c, *name; int l_name, m_name, ret; int line_len, line_blen, state; int l1, l2; faidx_t *idx; uint64_t offset; int64_t len; idx = (faidx_t*)calloc(1, sizeof(faidx_t)); idx->hash = kh_init(s); name = 0; l_name = m_name = 0; len = line_len = line_blen = -1; state = 0; l1 = l2 = -1; offset = 0; while (razf_read(rz, &c, 1)) { if (c == '\n') { // an empty line if (state == 1) { offset = razf_tell(rz); continue; } else if ((state == 0 && len < 0) || state == 2) continue; } if (c == '>') { // fasta header if (len >= 0) fai_insert_index(idx, name, len, line_len, line_blen, offset); l_name = 0; while ((ret = razf_read(rz, &c, 1)) != 0 && !isspace(c)) { if (m_name < l_name + 2) { m_name = l_name + 2; kroundup32(m_name); name = (char*)realloc(name, m_name); } name[l_name++] = c; } name[l_name] = '\0'; if (ret == 0) { fprintf(stderr, "[fai_build_core] the last entry has no sequence\n"); free(name); fai_destroy(idx); return 0; } if (c != '\n') while (razf_read(rz, &c, 1) && c != '\n'); state = 1; len = 0; offset = razf_tell(rz); } else { if (state == 3) { fprintf(stderr, "[fai_build_core] inlined empty line is not allowed in sequence '%s'.\n", name); free(name); fai_destroy(idx); return 0; } if (state == 2) state = 3; l1 = l2 = 0; do { ++l1; if (isgraph(c)) ++l2; } while ((ret = razf_read(rz, &c, 1)) && c != '\n'); if (state == 3 && l2) { fprintf(stderr, "[fai_build_core] different line length in sequence '%s'.\n", name); free(name); fai_destroy(idx); return 0; } ++l1; len += l2; if (state == 1) line_len = l1, line_blen = l2, state = 0; else if (state == 0) { if (l1 != line_len || l2 != line_blen) state = 2; } } } fai_insert_index(idx, name, len, line_len, line_blen, offset); free(name); return idx; } void fai_save(const faidx_t *fai, FILE *fp) { khint_t k; int i; for (i = 0; i < fai->n; ++i) { faidx1_t x; k = kh_get(s, fai->hash, fai->name[i]); x = kh_value(fai->hash, k); #ifdef _WIN32 fprintf(fp, "%s\t%d\t%ld\t%d\t%d\n", fai->name[i], (int)x.len, (long)x.offset, (int)x.line_blen, (int)x.line_len); #else fprintf(fp, "%s\t%d\t%lld\t%d\t%d\n", fai->name[i], (int)x.len, (long long)x.offset, (int)x.line_blen, (int)x.line_len); #endif } } faidx_t *fai_read(FILE *fp) { faidx_t *fai; char *buf, *p; int len, line_len, line_blen; #ifdef _WIN32 long offset; #else long long offset; #endif fai = (faidx_t*)calloc(1, sizeof(faidx_t)); fai->hash = kh_init(s); buf = (char*)calloc(0x10000, 1); while (!feof(fp) && fgets(buf, 0x10000, fp)) { for (p = buf; *p && isgraph(*p); ++p); *p = 0; ++p; #ifdef _WIN32 sscanf(p, "%d%ld%d%d", &len, &offset, &line_blen, &line_len); #else sscanf(p, "%d%lld%d%d", &len, &offset, &line_blen, &line_len); #endif fai_insert_index(fai, buf, len, line_len, line_blen, offset); } free(buf); return fai; } void fai_destroy(faidx_t *fai) { int i; for (i = 0; i < fai->n; ++i) free(fai->name[i]); free(fai->name); kh_destroy(s, fai->hash); if (fai->rz) razf_close(fai->rz); free(fai); } int fai_build(const char *fn) { char *str; RAZF *rz; FILE *fp; faidx_t *fai; str = (char*)calloc(strlen(fn) + 5, 1); sprintf(str, "%s.fai", fn); rz = razf_open(fn, "r"); if (rz == 0) { fprintf(stderr, "[fai_build] fail to open the FASTA file %s\n",fn); free(str); return -1; } fai = fai_build_core(rz); razf_close(rz); fp = fopen(str, "wb"); if (fp == 0) { fprintf(stderr, "[fai_build] fail to write FASTA index %s\n",str); fai_destroy(fai); free(str); return -1; } fai_save(fai, fp); fclose(fp); free(str); fai_destroy(fai); return 0; } #ifdef _USE_KNETFILE FILE *download_and_open(const char *fn) { const int buf_size = 1 * 1024 * 1024; uint8_t *buf; FILE *fp; knetFile *fp_remote; const char *url = fn; const char *p; int l = strlen(fn); for (p = fn + l - 1; p >= fn; --p) if (*p == '/') break; fn = p + 1; // First try to open a local copy fp = fopen(fn, "r"); if (fp) return fp; // If failed, download from remote and open fp_remote = knet_open(url, "rb"); if (fp_remote == 0) { fprintf(stderr, "[download_from_remote] fail to open remote file %s\n",url); return NULL; } if ((fp = fopen(fn, "wb")) == 0) { fprintf(stderr, "[download_from_remote] fail to create file in the working directory %s\n",fn); knet_close(fp_remote); return NULL; } buf = (uint8_t*)calloc(buf_size, 1); while ((l = knet_read(fp_remote, buf, buf_size)) != 0) fwrite(buf, 1, l, fp); free(buf); fclose(fp); knet_close(fp_remote); return fopen(fn, "r"); } #endif faidx_t *fai_load(const char *fn) { char *str; FILE *fp; faidx_t *fai; str = (char*)calloc(strlen(fn) + 5, 1); sprintf(str, "%s.fai", fn); #ifdef _USE_KNETFILE if (strstr(fn, "ftp://") == fn || strstr(fn, "http://") == fn) { fp = download_and_open(str); if ( !fp ) { fprintf(stderr, "[fai_load] failed to open remote FASTA index %s\n", str); free(str); return 0; } } else #endif fp = fopen(str, "rb"); if (fp == 0) { fprintf(stderr, "[fai_load] build FASTA index.\n"); fai_build(fn); fp = fopen(str, "rb"); if (fp == 0) { fprintf(stderr, "[fai_load] fail to open FASTA index.\n"); free(str); return 0; } } fai = fai_read(fp); fclose(fp); fai->rz = razf_open(fn, "rb"); free(str); if (fai->rz == 0) { fprintf(stderr, "[fai_load] fail to open FASTA file.\n"); return 0; } return fai; } char *fai_fetch(const faidx_t *fai, const char *str, int *len) { char *s, c; int i, l, k, name_end; khiter_t iter; faidx1_t val; khash_t(s) *h; int beg, end; beg = end = -1; h = fai->hash; name_end = l = strlen(str); s = (char*)malloc(l+1); // remove space for (i = k = 0; i < l; ++i) if (!isspace(str[i])) s[k++] = str[i]; s[k] = 0; l = k; // determine the sequence name for (i = l - 1; i >= 0; --i) if (s[i] == ':') break; // look for colon from the end if (i >= 0) name_end = i; if (name_end < l) { // check if this is really the end int n_hyphen = 0; for (i = name_end + 1; i < l; ++i) { if (s[i] == '-') ++n_hyphen; else if (!isdigit(s[i]) && s[i] != ',') break; } if (i < l || n_hyphen > 1) name_end = l; // malformated region string; then take str as the name s[name_end] = 0; iter = kh_get(s, h, s); if (iter == kh_end(h)) { // cannot find the sequence name iter = kh_get(s, h, str); // try str as the name if (iter == kh_end(h)) { *len = 0; free(s); return 0; } else s[name_end] = ':', name_end = l; } } else iter = kh_get(s, h, str); val = kh_value(h, iter); // parse the interval if (name_end < l) { for (i = k = name_end + 1; i < l; ++i) if (s[i] != ',') s[k++] = s[i]; s[k] = 0; beg = atoi(s + name_end + 1); for (i = name_end + 1; i != k; ++i) if (s[i] == '-') break; end = i < k? atoi(s + i + 1) : val.len; if (beg > 0) --beg; } else beg = 0, end = val.len; if (beg >= val.len) beg = val.len; if (end >= val.len) end = val.len; if (beg > end) beg = end; free(s); // now retrieve the sequence l = 0; s = (char*)malloc(end - beg + 2); razf_seek(fai->rz, val.offset + beg / val.line_blen * val.line_len + beg % val.line_blen, SEEK_SET); while (razf_read(fai->rz, &c, 1) == 1 && l < end - beg && !fai->rz->z_err) if (isgraph(c)) s[l++] = c; s[l] = '\0'; *len = l; return s; } int faidx_main(int argc, char *argv[]) { if (argc == 1) { fprintf(stderr, "Usage: faidx [ [...]]\n"); return 1; } else { if (argc == 2) fai_build(argv[1]); else { int i, j, k, l; char *s; faidx_t *fai; fai = fai_load(argv[1]); if (fai == 0) return 1; for (i = 2; i != argc; ++i) { printf(">%s\n", argv[i]); s = fai_fetch(fai, argv[i], &l); for (j = 0; j < l; j += 60) { for (k = 0; k < 60 && k < l - j; ++k) putchar(s[j + k]); putchar('\n'); } free(s); } fai_destroy(fai); } } return 0; } int faidx_fetch_nseq(const faidx_t *fai) { return fai->n; } char *faidx_fetch_seq(const faidx_t *fai, char *c_name, int p_beg_i, int p_end_i, int *len) { int l; char c; khiter_t iter; faidx1_t val; char *seq=NULL; // Adjust position iter = kh_get(s, fai->hash, c_name); if(iter == kh_end(fai->hash)) return 0; val = kh_value(fai->hash, iter); if(p_end_i < p_beg_i) p_beg_i = p_end_i; if(p_beg_i < 0) p_beg_i = 0; else if(val.len <= p_beg_i) p_beg_i = val.len - 1; if(p_end_i < 0) p_end_i = 0; else if(val.len <= p_end_i) p_end_i = val.len - 1; // Now retrieve the sequence l = 0; seq = (char*)malloc(p_end_i - p_beg_i + 2); razf_seek(fai->rz, val.offset + p_beg_i / val.line_blen * val.line_len + p_beg_i % val.line_blen, SEEK_SET); while (razf_read(fai->rz, &c, 1) == 1 && l < p_end_i - p_beg_i + 1) if (isgraph(c)) seq[l++] = c; seq[l] = '\0'; *len = l; return seq; } #ifdef FAIDX_MAIN int main(int argc, char *argv[]) { return faidx_main(argc, argv); } #endif genometools-1.5.1/src/external/samtools-0.1.18/faidx.h000066400000000000000000000061641211610345200223140ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008 Genome Research Ltd (GRL). Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Contact: Heng Li */ #ifndef FAIDX_H #define FAIDX_H /*! @header Index FASTA files and extract subsequence. @copyright The Wellcome Trust Sanger Institute. */ struct __faidx_t; typedef struct __faidx_t faidx_t; #ifdef __cplusplus extern "C" { #endif /*! @abstract Build index for a FASTA or razip compressed FASTA file. @param fn FASTA file name @return 0 on success; or -1 on failure @discussion File "fn.fai" will be generated. */ int fai_build(const char *fn); /*! @abstract Distroy a faidx_t struct. @param fai Pointer to the struct to be destroyed */ void fai_destroy(faidx_t *fai); /*! @abstract Load index from "fn.fai". @param fn File name of the FASTA file */ faidx_t *fai_load(const char *fn); /*! @abstract Fetch the sequence in a region. @param fai Pointer to the faidx_t struct @param reg Region in the format "chr2:20,000-30,000" @param len Length of the region @return Pointer to the sequence; null on failure @discussion The returned sequence is allocated by malloc family and should be destroyed by end users by calling free() on it. */ char *fai_fetch(const faidx_t *fai, const char *reg, int *len); /*! @abstract Fetch the number of sequences. @param fai Pointer to the faidx_t struct @return The number of sequences */ int faidx_fetch_nseq(const faidx_t *fai); /*! @abstract Fetch the sequence in a region. @param fai Pointer to the faidx_t struct @param c_name Region name @param p_beg_i Beginning position number (zero-based) @param p_end_i End position number (zero-based) @param len Length of the region @return Pointer to the sequence; null on failure @discussion The returned sequence is allocated by malloc family and should be destroyed by end users by calling free() on it. */ char *faidx_fetch_seq(const faidx_t *fai, char *c_name, int p_beg_i, int p_end_i, int *len); #ifdef __cplusplus } #endif #endif genometools-1.5.1/src/external/samtools-0.1.18/kaln.c000066400000000000000000000355761211610345200221520ustar00rootroot00000000000000/* The MIT License Copyright (c) 2003-2006, 2008, 2009, by Heng Li Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include #include #include #include "kaln.h" #define FROM_M 0 #define FROM_I 1 #define FROM_D 2 typedef struct { int i, j; unsigned char ctype; } path_t; int aln_sm_blosum62[] = { /* A R N D C Q E G H I L K M F P S T W Y V * X */ 4,-1,-2,-2, 0,-1,-1, 0,-2,-1,-1,-1,-1,-2,-1, 1, 0,-3,-2, 0,-4, 0, -1, 5, 0,-2,-3, 1, 0,-2, 0,-3,-2, 2,-1,-3,-2,-1,-1,-3,-2,-3,-4,-1, -2, 0, 6, 1,-3, 0, 0, 0, 1,-3,-3, 0,-2,-3,-2, 1, 0,-4,-2,-3,-4,-1, -2,-2, 1, 6,-3, 0, 2,-1,-1,-3,-4,-1,-3,-3,-1, 0,-1,-4,-3,-3,-4,-1, 0,-3,-3,-3, 9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-4,-2, -1, 1, 0, 0,-3, 5, 2,-2, 0,-3,-2, 1, 0,-3,-1, 0,-1,-2,-1,-2,-4,-1, -1, 0, 0, 2,-4, 2, 5,-2, 0,-3,-3, 1,-2,-3,-1, 0,-1,-3,-2,-2,-4,-1, 0,-2, 0,-1,-3,-2,-2, 6,-2,-4,-4,-2,-3,-3,-2, 0,-2,-2,-3,-3,-4,-1, -2, 0, 1,-1,-3, 0, 0,-2, 8,-3,-3,-1,-2,-1,-2,-1,-2,-2, 2,-3,-4,-1, -1,-3,-3,-3,-1,-3,-3,-4,-3, 4, 2,-3, 1, 0,-3,-2,-1,-3,-1, 3,-4,-1, -1,-2,-3,-4,-1,-2,-3,-4,-3, 2, 4,-2, 2, 0,-3,-2,-1,-2,-1, 1,-4,-1, -1, 2, 0,-1,-3, 1, 1,-2,-1,-3,-2, 5,-1,-3,-1, 0,-1,-3,-2,-2,-4,-1, -1,-1,-2,-3,-1, 0,-2,-3,-2, 1, 2,-1, 5, 0,-2,-1,-1,-1,-1, 1,-4,-1, -2,-3,-3,-3,-2,-3,-3,-3,-1, 0, 0,-3, 0, 6,-4,-2,-2, 1, 3,-1,-4,-1, -1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4, 7,-1,-1,-4,-3,-2,-4,-2, 1,-1, 1, 0,-1, 0, 0, 0,-1,-2,-2, 0,-1,-2,-1, 4, 1,-3,-2,-2,-4, 0, 0,-1, 0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1, 1, 5,-2,-2, 0,-4, 0, -3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1, 1,-4,-3,-2,11, 2,-3,-4,-2, -2,-2,-2,-3,-2,-1,-2,-3, 2,-1,-1,-2,-1, 3,-3,-2,-2, 2, 7,-1,-4,-1, 0,-3,-3,-3,-1,-2,-2,-3,-3, 3, 1,-2, 1,-1,-2,-2, 0,-3,-1, 4,-4,-1, -4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4, 1,-4, 0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2, 0, 0,-2,-1,-1,-4,-1 }; int aln_sm_blast[] = { 1, -3, -3, -3, -2, -3, 1, -3, -3, -2, -3, -3, 1, -3, -2, -3, -3, -3, 1, -2, -2, -2, -2, -2, -2 }; int aln_sm_qual[] = { 0, -23, -23, -23, 0, -23, 0, -23, -23, 0, -23, -23, 0, -23, 0, -23, -23, -23, 0, 0, 0, 0, 0, 0, 0 }; ka_param_t ka_param_blast = { 5, 2, 5, 2, aln_sm_blast, 5, 50 }; ka_param_t ka_param_aa2aa = { 10, 2, 10, 2, aln_sm_blosum62, 22, 50 }; ka_param2_t ka_param2_qual = { 37, 11, 37, 11, 37, 11, 0, 0, aln_sm_qual, 5, 50 }; static uint32_t *ka_path2cigar32(const path_t *path, int path_len, int *n_cigar) { int i, n; uint32_t *cigar; unsigned char last_type; if (path_len == 0 || path == 0) { *n_cigar = 0; return 0; } last_type = path->ctype; for (i = n = 1; i < path_len; ++i) { if (last_type != path[i].ctype) ++n; last_type = path[i].ctype; } *n_cigar = n; cigar = (uint32_t*)calloc(*n_cigar, 4); cigar[0] = 1u << 4 | path[path_len-1].ctype; last_type = path[path_len-1].ctype; for (i = path_len - 2, n = 0; i >= 0; --i) { if (path[i].ctype == last_type) cigar[n] += 1u << 4; else { cigar[++n] = 1u << 4 | path[i].ctype; last_type = path[i].ctype; } } return cigar; } /***************************/ /* START OF common_align.c */ /***************************/ #define SET_INF(s) (s).M = (s).I = (s).D = MINOR_INF; #define set_M(MM, cur, p, sc) \ { \ if ((p)->M >= (p)->I) { \ if ((p)->M >= (p)->D) { \ (MM) = (p)->M + (sc); (cur)->Mt = FROM_M; \ } else { \ (MM) = (p)->D + (sc); (cur)->Mt = FROM_D; \ } \ } else { \ if ((p)->I > (p)->D) { \ (MM) = (p)->I + (sc); (cur)->Mt = FROM_I; \ } else { \ (MM) = (p)->D + (sc); (cur)->Mt = FROM_D; \ } \ } \ } #define set_I(II, cur, p) \ { \ if ((p)->M - gap_open > (p)->I) { \ (cur)->It = FROM_M; \ (II) = (p)->M - gap_open - gap_ext; \ } else { \ (cur)->It = FROM_I; \ (II) = (p)->I - gap_ext; \ } \ } #define set_end_I(II, cur, p) \ { \ if (gap_end_ext >= 0) { \ if ((p)->M - gap_end_open > (p)->I) { \ (cur)->It = FROM_M; \ (II) = (p)->M - gap_end_open - gap_end_ext; \ } else { \ (cur)->It = FROM_I; \ (II) = (p)->I - gap_end_ext; \ } \ } else set_I(II, cur, p); \ } #define set_D(DD, cur, p) \ { \ if ((p)->M - gap_open > (p)->D) { \ (cur)->Dt = FROM_M; \ (DD) = (p)->M - gap_open - gap_ext; \ } else { \ (cur)->Dt = FROM_D; \ (DD) = (p)->D - gap_ext; \ } \ } #define set_end_D(DD, cur, p) \ { \ if (gap_end_ext >= 0) { \ if ((p)->M - gap_end_open > (p)->D) { \ (cur)->Dt = FROM_M; \ (DD) = (p)->M - gap_end_open - gap_end_ext; \ } else { \ (cur)->Dt = FROM_D; \ (DD) = (p)->D - gap_end_ext; \ } \ } else set_D(DD, cur, p); \ } typedef struct { uint8_t Mt:3, It:2, Dt:3; } dpcell_t; typedef struct { int M, I, D; } dpscore_t; /*************************** * banded global alignment * ***************************/ uint32_t *ka_global_core(uint8_t *seq1, int len1, uint8_t *seq2, int len2, const ka_param_t *ap, int *_score, int *n_cigar) { int i, j; dpcell_t **dpcell, *q; dpscore_t *curr, *last, *s; int b1, b2, tmp_end; int *mat, end, max = 0; uint8_t type, ctype; uint32_t *cigar = 0; int gap_open, gap_ext, gap_end_open, gap_end_ext, b; int *score_matrix, N_MATRIX_ROW; /* initialize some align-related parameters. just for compatibility */ gap_open = ap->gap_open; gap_ext = ap->gap_ext; gap_end_open = ap->gap_end_open; gap_end_ext = ap->gap_end_ext; b = ap->band_width; score_matrix = ap->matrix; N_MATRIX_ROW = ap->row; if (n_cigar) *n_cigar = 0; if (len1 == 0 || len2 == 0) return 0; /* calculate b1 and b2 */ if (len1 > len2) { b1 = len1 - len2 + b; b2 = b; } else { b1 = b; b2 = len2 - len1 + b; } if (b1 > len1) b1 = len1; if (b2 > len2) b2 = len2; --seq1; --seq2; /* allocate memory */ end = (b1 + b2 <= len1)? (b1 + b2 + 1) : (len1 + 1); dpcell = (dpcell_t**)malloc(sizeof(dpcell_t*) * (len2 + 1)); for (j = 0; j <= len2; ++j) dpcell[j] = (dpcell_t*)malloc(sizeof(dpcell_t) * end); for (j = b2 + 1; j <= len2; ++j) dpcell[j] -= j - b2; curr = (dpscore_t*)malloc(sizeof(dpscore_t) * (len1 + 1)); last = (dpscore_t*)malloc(sizeof(dpscore_t) * (len1 + 1)); /* set first row */ SET_INF(*curr); curr->M = 0; for (i = 1, s = curr + 1; i < b1; ++i, ++s) { SET_INF(*s); set_end_D(s->D, dpcell[0] + i, s - 1); } s = curr; curr = last; last = s; /* core dynamic programming, part 1 */ tmp_end = (b2 < len2)? b2 : len2 - 1; for (j = 1; j <= tmp_end; ++j) { q = dpcell[j]; s = curr; SET_INF(*s); set_end_I(s->I, q, last); end = (j + b1 <= len1 + 1)? (j + b1 - 1) : len1; mat = score_matrix + seq2[j] * N_MATRIX_ROW; ++s; ++q; for (i = 1; i != end; ++i, ++s, ++q) { set_M(s->M, q, last + i - 1, mat[seq1[i]]); /* this will change s->M ! */ set_I(s->I, q, last + i); set_D(s->D, q, s - 1); } set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_D(s->D, q, s - 1); if (j + b1 - 1 > len1) { /* bug fixed, 040227 */ set_end_I(s->I, q, last + i); } else s->I = MINOR_INF; s = curr; curr = last; last = s; } /* last row for part 1, use set_end_D() instead of set_D() */ if (j == len2 && b2 != len2 - 1) { q = dpcell[j]; s = curr; SET_INF(*s); set_end_I(s->I, q, last); end = (j + b1 <= len1 + 1)? (j + b1 - 1) : len1; mat = score_matrix + seq2[j] * N_MATRIX_ROW; ++s; ++q; for (i = 1; i != end; ++i, ++s, ++q) { set_M(s->M, q, last + i - 1, mat[seq1[i]]); /* this will change s->M ! */ set_I(s->I, q, last + i); set_end_D(s->D, q, s - 1); } set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_end_D(s->D, q, s - 1); if (j + b1 - 1 > len1) { /* bug fixed, 040227 */ set_end_I(s->I, q, last + i); } else s->I = MINOR_INF; s = curr; curr = last; last = s; ++j; } /* core dynamic programming, part 2 */ for (; j <= len2 - b2 + 1; ++j) { SET_INF(curr[j - b2]); mat = score_matrix + seq2[j] * N_MATRIX_ROW; end = j + b1 - 1; for (i = j - b2 + 1, q = dpcell[j] + i, s = curr + i; i != end; ++i, ++s, ++q) { set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_I(s->I, q, last + i); set_D(s->D, q, s - 1); } set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_D(s->D, q, s - 1); s->I = MINOR_INF; s = curr; curr = last; last = s; } /* core dynamic programming, part 3 */ for (; j < len2; ++j) { SET_INF(curr[j - b2]); mat = score_matrix + seq2[j] * N_MATRIX_ROW; for (i = j - b2 + 1, q = dpcell[j] + i, s = curr + i; i < len1; ++i, ++s, ++q) { set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_I(s->I, q, last + i); set_D(s->D, q, s - 1); } set_M(s->M, q, last + len1 - 1, mat[seq1[i]]); set_end_I(s->I, q, last + i); set_D(s->D, q, s - 1); s = curr; curr = last; last = s; } /* last row */ if (j == len2) { SET_INF(curr[j - b2]); mat = score_matrix + seq2[j] * N_MATRIX_ROW; for (i = j - b2 + 1, q = dpcell[j] + i, s = curr + i; i < len1; ++i, ++s, ++q) { set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_I(s->I, q, last + i); set_end_D(s->D, q, s - 1); } set_M(s->M, q, last + len1 - 1, mat[seq1[i]]); set_end_I(s->I, q, last + i); set_end_D(s->D, q, s - 1); s = curr; curr = last; last = s; } *_score = last[len1].M; if (n_cigar) { /* backtrace */ path_t *p, *path = (path_t*)malloc(sizeof(path_t) * (len1 + len2 + 2)); i = len1; j = len2; q = dpcell[j] + i; s = last + len1; max = s->M; type = q->Mt; ctype = FROM_M; if (s->I > max) { max = s->I; type = q->It; ctype = FROM_I; } if (s->D > max) { max = s->D; type = q->Dt; ctype = FROM_D; } p = path; p->ctype = ctype; p->i = i; p->j = j; /* bug fixed 040408 */ ++p; do { switch (ctype) { case FROM_M: --i; --j; break; case FROM_I: --j; break; case FROM_D: --i; break; } q = dpcell[j] + i; ctype = type; switch (type) { case FROM_M: type = q->Mt; break; case FROM_I: type = q->It; break; case FROM_D: type = q->Dt; break; } p->ctype = ctype; p->i = i; p->j = j; ++p; } while (i || j); cigar = ka_path2cigar32(path, p - path - 1, n_cigar); free(path); } /* free memory */ for (j = b2 + 1; j <= len2; ++j) dpcell[j] += j - b2; for (j = 0; j <= len2; ++j) free(dpcell[j]); free(dpcell); free(curr); free(last); return cigar; } typedef struct { int M, I, D; } score_aux_t; #define MINUS_INF -0x40000000 // matrix: len2 rows and len1 columns int ka_global_score(const uint8_t *_seq1, int len1, const uint8_t *_seq2, int len2, const ka_param2_t *ap) { #define __score_aux(_p, _q0, _sc, _io, _ie, _do, _de) { \ int t1, t2; \ score_aux_t *_q; \ _q = _q0; \ _p->M = _q->M >= _q->I? _q->M : _q->I; \ _p->M = _p->M >= _q->D? _p->M : _q->D; \ _p->M += (_sc); \ ++_q; t1 = _q->M - _io - _ie; t2 = _q->I - _ie; _p->I = t1 >= t2? t1 : t2; \ _q = _p-1; t1 = _q->M - _do - _de; t2 = _q->D - _de; _p->D = t1 >= t2? t1 : t2; \ } int i, j, bw, scmat_size = ap->row, *scmat = ap->matrix, ret; const uint8_t *seq1, *seq2; score_aux_t *curr, *last, *swap; bw = abs(len1 - len2) + ap->band_width; i = len1 > len2? len1 : len2; if (bw > i + 1) bw = i + 1; seq1 = _seq1 - 1; seq2 = _seq2 - 1; curr = calloc(len1 + 2, sizeof(score_aux_t)); last = calloc(len1 + 2, sizeof(score_aux_t)); { // the zero-th row int x, end = len1; score_aux_t *p; j = 0; x = j + bw; end = len1 < x? len1 : x; // band end p = curr; p->M = 0; p->I = p->D = MINUS_INF; for (i = 1, p = &curr[1]; i <= end; ++i, ++p) p->M = p->I = MINUS_INF, p->D = -(ap->edo + ap->ede * i); p->M = p->I = p->D = MINUS_INF; swap = curr; curr = last; last = swap; } for (j = 1; j < len2; ++j) { int x, beg = 0, end = len1, *scrow, col_end; score_aux_t *p; x = j - bw; beg = 0 > x? 0 : x; // band start x = j + bw; end = len1 < x? len1 : x; // band end if (beg == 0) { // from zero-th column p = curr; p->M = p->D = MINUS_INF; p->I = -(ap->eio + ap->eie * j); ++beg; // then beg = 1 } scrow = scmat + seq2[j] * scmat_size; if (end == len1) col_end = 1, --end; else col_end = 0; for (i = beg, p = &curr[beg]; i <= end; ++i, ++p) __score_aux(p, &last[i-1], scrow[(int)seq1[i]], ap->iio, ap->iie, ap->ido, ap->ide); if (col_end) { __score_aux(p, &last[i-1], scrow[(int)seq1[i]], ap->eio, ap->eie, ap->ido, ap->ide); ++p; } p->M = p->I = p->D = MINUS_INF; // for (i = 0; i <= len1; ++i) printf("(%d,%d,%d) ", curr[i].M, curr[i].I, curr[i].D); putchar('\n'); swap = curr; curr = last; last = swap; } { // the last row int x, beg = 0, *scrow; score_aux_t *p; j = len2; x = j - bw; beg = 0 > x? 0 : x; // band start if (beg == 0) { // from zero-th column p = curr; p->M = p->D = MINUS_INF; p->I = -(ap->eio + ap->eie * j); ++beg; // then beg = 1 } scrow = scmat + seq2[j] * scmat_size; for (i = beg, p = &curr[beg]; i < len1; ++i, ++p) __score_aux(p, &last[i-1], scrow[(int)seq1[i]], ap->iio, ap->iie, ap->edo, ap->ede); __score_aux(p, &last[i-1], scrow[(int)seq1[i]], ap->eio, ap->eie, ap->edo, ap->ede); // for (i = 0; i <= len1; ++i) printf("(%d,%d,%d) ", curr[i].M, curr[i].I, curr[i].D); putchar('\n'); } ret = curr[len1].M >= curr[len1].I? curr[len1].M : curr[len1].I; ret = ret >= curr[len1].D? ret : curr[len1].D; free(curr); free(last); return ret; } #ifdef _MAIN int main(int argc, char *argv[]) { // int len1 = 35, len2 = 35; // uint8_t *seq1 = (uint8_t*)"\0\0\3\3\2\0\0\0\1\0\2\1\2\1\3\2\3\3\3\0\2\3\2\1\1\3\3\3\2\3\3\1\0\0\1"; // uint8_t *seq2 = (uint8_t*)"\0\0\3\3\2\0\0\0\1\0\2\1\2\1\3\2\3\3\3\0\2\3\2\1\1\3\3\3\2\3\3\1\0\1\0"; int len1 = 4, len2 = 4; uint8_t *seq1 = (uint8_t*)"\1\0\0\1"; uint8_t *seq2 = (uint8_t*)"\1\0\1\0"; int sc; // ka_global_core(seq1, 2, seq2, 1, &ka_param_qual, &sc, 0); sc = ka_global_score(seq1, len1, seq2, len2, &ka_param2_qual); printf("%d\n", sc); return 0; } #endif genometools-1.5.1/src/external/samtools-0.1.18/kaln.h000066400000000000000000000040301211610345200221340ustar00rootroot00000000000000/* The MIT License Copyright (c) 2003-2006, 2008, 2009 by Heng Li Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LH3_KALN_H_ #define LH3_KALN_H_ #include #define MINOR_INF -1073741823 typedef struct { int gap_open; int gap_ext; int gap_end_open; int gap_end_ext; int *matrix; int row; int band_width; } ka_param_t; typedef struct { int iio, iie, ido, ide; int eio, eie, edo, ede; int *matrix; int row; int band_width; } ka_param2_t; #ifdef __cplusplus extern "C" { #endif uint32_t *ka_global_core(uint8_t *seq1, int len1, uint8_t *seq2, int len2, const ka_param_t *ap, int *_score, int *n_cigar); int ka_global_score(const uint8_t *_seq1, int len1, const uint8_t *_seq2, int len2, const ka_param2_t *ap); #ifdef __cplusplus } #endif extern ka_param_t ka_param_blast; /* = { 5, 2, 5, 2, aln_sm_blast, 5, 50 }; */ extern ka_param_t ka_param_qual; // only use this for global alignment!!! extern ka_param2_t ka_param2_qual; // only use this for global alignment!!! #endif genometools-1.5.1/src/external/samtools-0.1.18/khash.h000066400000000000000000000426271211610345200223230ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008, 2009, 2011 by Attractive Chaos Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* An example: #include "khash.h" KHASH_MAP_INIT_INT(32, char) int main() { int ret, is_missing; khiter_t k; khash_t(32) *h = kh_init(32); k = kh_put(32, h, 5, &ret); if (!ret) kh_del(32, h, k); kh_value(h, k) = 10; k = kh_get(32, h, 10); is_missing = (k == kh_end(h)); k = kh_get(32, h, 5); kh_del(32, h, k); for (k = kh_begin(h); k != kh_end(h); ++k) if (kh_exist(h, k)) kh_value(h, k) = 1; kh_destroy(32, h); return 0; } */ /* 2011-02-14 (0.2.5): * Allow to declare global functions. 2009-09-26 (0.2.4): * Improve portability 2008-09-19 (0.2.3): * Corrected the example * Improved interfaces 2008-09-11 (0.2.2): * Improved speed a little in kh_put() 2008-09-10 (0.2.1): * Added kh_clear() * Fixed a compiling error 2008-09-02 (0.2.0): * Changed to token concatenation which increases flexibility. 2008-08-31 (0.1.2): * Fixed a bug in kh_get(), which has not been tested previously. 2008-08-31 (0.1.1): * Added destructor */ #ifndef __AC_KHASH_H #define __AC_KHASH_H /*! @header Generic hash table library. @copyright Heng Li */ #define AC_VERSION_KHASH_H "0.2.5" #include #include #include /* compipler specific configuration */ #if UINT_MAX == 0xffffffffu typedef unsigned int khint32_t; #elif ULONG_MAX == 0xffffffffu typedef unsigned long khint32_t; #endif #if ULONG_MAX == ULLONG_MAX typedef unsigned long khint64_t; #else typedef unsigned long long khint64_t; #endif #ifdef _MSC_VER #define inline __inline #endif typedef khint32_t khint_t; typedef khint_t khiter_t; #define __ac_HASH_PRIME_SIZE 32 static const khint32_t __ac_prime_list[__ac_HASH_PRIME_SIZE] = { 0ul, 3ul, 11ul, 23ul, 53ul, 97ul, 193ul, 389ul, 769ul, 1543ul, 3079ul, 6151ul, 12289ul, 24593ul, 49157ul, 98317ul, 196613ul, 393241ul, 786433ul, 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul, 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul, 1610612741ul, 3221225473ul, 4294967291ul }; #define __ac_isempty(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&2) #define __ac_isdel(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&1) #define __ac_iseither(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&3) #define __ac_set_isdel_false(flag, i) (flag[i>>4]&=~(1ul<<((i&0xfU)<<1))) #define __ac_set_isempty_false(flag, i) (flag[i>>4]&=~(2ul<<((i&0xfU)<<1))) #define __ac_set_isboth_false(flag, i) (flag[i>>4]&=~(3ul<<((i&0xfU)<<1))) #define __ac_set_isdel_true(flag, i) (flag[i>>4]|=1ul<<((i&0xfU)<<1)) static const double __ac_HASH_UPPER = 0.77; #define KHASH_DECLARE(name, khkey_t, khval_t) \ typedef struct { \ khint_t n_buckets, size, n_occupied, upper_bound; \ khint32_t *flags; \ khkey_t *keys; \ khval_t *vals; \ } kh_##name##_t; \ extern kh_##name##_t *kh_init_##name(); \ extern void kh_destroy_##name(kh_##name##_t *h); \ extern void kh_clear_##name(kh_##name##_t *h); \ extern khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key); \ extern void kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \ extern khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret); \ extern void kh_del_##name(kh_##name##_t *h, khint_t x); #define KHASH_INIT2(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ typedef struct { \ khint_t n_buckets, size, n_occupied, upper_bound; \ khint32_t *flags; \ khkey_t *keys; \ khval_t *vals; \ } kh_##name##_t; \ SCOPE kh_##name##_t *kh_init_##name() { \ return (kh_##name##_t*)calloc(1, sizeof(kh_##name##_t)); \ } \ SCOPE void kh_destroy_##name(kh_##name##_t *h) \ { \ if (h) { \ free(h->keys); free(h->flags); \ free(h->vals); \ free(h); \ } \ } \ SCOPE void kh_clear_##name(kh_##name##_t *h) \ { \ if (h && h->flags) { \ memset(h->flags, 0xaa, ((h->n_buckets>>4) + 1) * sizeof(khint32_t)); \ h->size = h->n_occupied = 0; \ } \ } \ SCOPE khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key) \ { \ if (h->n_buckets) { \ khint_t inc, k, i, last; \ k = __hash_func(key); i = k % h->n_buckets; \ inc = 1 + k % (h->n_buckets - 1); last = i; \ while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \ if (i + inc >= h->n_buckets) i = i + inc - h->n_buckets; \ else i += inc; \ if (i == last) return h->n_buckets; \ } \ return __ac_iseither(h->flags, i)? h->n_buckets : i; \ } else return 0; \ } \ SCOPE void kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets) \ { \ khint32_t *new_flags = 0; \ khint_t j = 1; \ { \ khint_t t = __ac_HASH_PRIME_SIZE - 1; \ while (__ac_prime_list[t] > new_n_buckets) --t; \ new_n_buckets = __ac_prime_list[t+1]; \ if (h->size >= (khint_t)(new_n_buckets * __ac_HASH_UPPER + 0.5)) j = 0; \ else { \ new_flags = (khint32_t*)malloc(((new_n_buckets>>4) + 1) * sizeof(khint32_t)); \ memset(new_flags, 0xaa, ((new_n_buckets>>4) + 1) * sizeof(khint32_t)); \ if (h->n_buckets < new_n_buckets) { \ h->keys = (khkey_t*)realloc(h->keys, new_n_buckets * sizeof(khkey_t)); \ if (kh_is_map) \ h->vals = (khval_t*)realloc(h->vals, new_n_buckets * sizeof(khval_t)); \ } \ } \ } \ if (j) { \ for (j = 0; j != h->n_buckets; ++j) { \ if (__ac_iseither(h->flags, j) == 0) { \ khkey_t key = h->keys[j]; \ khval_t val; \ if (kh_is_map) val = h->vals[j]; \ __ac_set_isdel_true(h->flags, j); \ while (1) { \ khint_t inc, k, i; \ k = __hash_func(key); \ i = k % new_n_buckets; \ inc = 1 + k % (new_n_buckets - 1); \ while (!__ac_isempty(new_flags, i)) { \ if (i + inc >= new_n_buckets) i = i + inc - new_n_buckets; \ else i += inc; \ } \ __ac_set_isempty_false(new_flags, i); \ if (i < h->n_buckets && __ac_iseither(h->flags, i) == 0) { \ { khkey_t tmp = h->keys[i]; h->keys[i] = key; key = tmp; } \ if (kh_is_map) { khval_t tmp = h->vals[i]; h->vals[i] = val; val = tmp; } \ __ac_set_isdel_true(h->flags, i); \ } else { \ h->keys[i] = key; \ if (kh_is_map) h->vals[i] = val; \ break; \ } \ } \ } \ } \ if (h->n_buckets > new_n_buckets) { \ h->keys = (khkey_t*)realloc(h->keys, new_n_buckets * sizeof(khkey_t)); \ if (kh_is_map) \ h->vals = (khval_t*)realloc(h->vals, new_n_buckets * sizeof(khval_t)); \ } \ free(h->flags); \ h->flags = new_flags; \ h->n_buckets = new_n_buckets; \ h->n_occupied = h->size; \ h->upper_bound = (khint_t)(h->n_buckets * __ac_HASH_UPPER + 0.5); \ } \ } \ SCOPE khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret) \ { \ khint_t x; \ if (h->n_occupied >= h->upper_bound) { \ if (h->n_buckets > (h->size<<1)) kh_resize_##name(h, h->n_buckets - 1); \ else kh_resize_##name(h, h->n_buckets + 1); \ } \ { \ khint_t inc, k, i, site, last; \ x = site = h->n_buckets; k = __hash_func(key); i = k % h->n_buckets; \ if (__ac_isempty(h->flags, i)) x = i; \ else { \ inc = 1 + k % (h->n_buckets - 1); last = i; \ while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \ if (__ac_isdel(h->flags, i)) site = i; \ if (i + inc >= h->n_buckets) i = i + inc - h->n_buckets; \ else i += inc; \ if (i == last) { x = site; break; } \ } \ if (x == h->n_buckets) { \ if (__ac_isempty(h->flags, i) && site != h->n_buckets) x = site; \ else x = i; \ } \ } \ } \ if (__ac_isempty(h->flags, x)) { \ h->keys[x] = key; \ __ac_set_isboth_false(h->flags, x); \ ++h->size; ++h->n_occupied; \ *ret = 1; \ } else if (__ac_isdel(h->flags, x)) { \ h->keys[x] = key; \ __ac_set_isboth_false(h->flags, x); \ ++h->size; \ *ret = 2; \ } else *ret = 0; \ return x; \ } \ SCOPE void kh_del_##name(kh_##name##_t *h, khint_t x) \ { \ if (x != h->n_buckets && !__ac_iseither(h->flags, x)) { \ __ac_set_isdel_true(h->flags, x); \ --h->size; \ } \ } #define KHASH_INIT(name, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ KHASH_INIT2(name, static inline, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) /* --- BEGIN OF HASH FUNCTIONS --- */ /*! @function @abstract Integer hash function @param key The integer [khint32_t] @return The hash value [khint_t] */ #define kh_int_hash_func(key) (khint32_t)(key) /*! @function @abstract Integer comparison function */ #define kh_int_hash_equal(a, b) ((a) == (b)) /*! @function @abstract 64-bit integer hash function @param key The integer [khint64_t] @return The hash value [khint_t] */ #define kh_int64_hash_func(key) (khint32_t)((key)>>33^(key)^(key)<<11) /*! @function @abstract 64-bit integer comparison function */ #define kh_int64_hash_equal(a, b) ((a) == (b)) /*! @function @abstract const char* hash function @param s Pointer to a null terminated string @return The hash value */ static inline khint_t __ac_X31_hash_string(const char *s) { khint_t h = *s; if (h) for (++s ; *s; ++s) h = (h << 5) - h + *s; return h; } /*! @function @abstract Another interface to const char* hash function @param key Pointer to a null terminated string [const char*] @return The hash value [khint_t] */ #define kh_str_hash_func(key) __ac_X31_hash_string(key) /*! @function @abstract Const char* comparison function */ #define kh_str_hash_equal(a, b) (strcmp(a, b) == 0) /* --- END OF HASH FUNCTIONS --- */ /* Other necessary macros... */ /*! @abstract Type of the hash table. @param name Name of the hash table [symbol] */ #define khash_t(name) kh_##name##_t /*! @function @abstract Initiate a hash table. @param name Name of the hash table [symbol] @return Pointer to the hash table [khash_t(name)*] */ #define kh_init(name) kh_init_##name() /*! @function @abstract Destroy a hash table. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] */ #define kh_destroy(name, h) kh_destroy_##name(h) /*! @function @abstract Reset a hash table without deallocating memory. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] */ #define kh_clear(name, h) kh_clear_##name(h) /*! @function @abstract Resize a hash table. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] @param s New size [khint_t] */ #define kh_resize(name, h, s) kh_resize_##name(h, s) /*! @function @abstract Insert a key to the hash table. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] @param k Key [type of keys] @param r Extra return code: 0 if the key is present in the hash table; 1 if the bucket is empty (never used); 2 if the element in the bucket has been deleted [int*] @return Iterator to the inserted element [khint_t] */ #define kh_put(name, h, k, r) kh_put_##name(h, k, r) /*! @function @abstract Retrieve a key from the hash table. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] @param k Key [type of keys] @return Iterator to the found element, or kh_end(h) is the element is absent [khint_t] */ #define kh_get(name, h, k) kh_get_##name(h, k) /*! @function @abstract Remove a key from the hash table. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] @param k Iterator to the element to be deleted [khint_t] */ #define kh_del(name, h, k) kh_del_##name(h, k) /*! @function @abstract Test whether a bucket contains data. @param h Pointer to the hash table [khash_t(name)*] @param x Iterator to the bucket [khint_t] @return 1 if containing data; 0 otherwise [int] */ #define kh_exist(h, x) (!__ac_iseither((h)->flags, (x))) /*! @function @abstract Get key given an iterator @param h Pointer to the hash table [khash_t(name)*] @param x Iterator to the bucket [khint_t] @return Key [type of keys] */ #define kh_key(h, x) ((h)->keys[x]) /*! @function @abstract Get value given an iterator @param h Pointer to the hash table [khash_t(name)*] @param x Iterator to the bucket [khint_t] @return Value [type of values] @discussion For hash sets, calling this results in segfault. */ #define kh_val(h, x) ((h)->vals[x]) /*! @function @abstract Alias of kh_val() */ #define kh_value(h, x) ((h)->vals[x]) /*! @function @abstract Get the start iterator @param h Pointer to the hash table [khash_t(name)*] @return The start iterator [khint_t] */ #define kh_begin(h) (khint_t)(0) /*! @function @abstract Get the end iterator @param h Pointer to the hash table [khash_t(name)*] @return The end iterator [khint_t] */ #define kh_end(h) ((h)->n_buckets) /*! @function @abstract Get the number of elements in the hash table @param h Pointer to the hash table [khash_t(name)*] @return Number of elements in the hash table [khint_t] */ #define kh_size(h) ((h)->size) /*! @function @abstract Get the number of buckets in the hash table @param h Pointer to the hash table [khash_t(name)*] @return Number of buckets in the hash table [khint_t] */ #define kh_n_buckets(h) ((h)->n_buckets) /* More conenient interfaces */ /*! @function @abstract Instantiate a hash set containing integer keys @param name Name of the hash table [symbol] */ #define KHASH_SET_INIT_INT(name) \ KHASH_INIT(name, khint32_t, char, 0, kh_int_hash_func, kh_int_hash_equal) /*! @function @abstract Instantiate a hash map containing integer keys @param name Name of the hash table [symbol] @param khval_t Type of values [type] */ #define KHASH_MAP_INIT_INT(name, khval_t) \ KHASH_INIT(name, khint32_t, khval_t, 1, kh_int_hash_func, kh_int_hash_equal) /*! @function @abstract Instantiate a hash map containing 64-bit integer keys @param name Name of the hash table [symbol] */ #define KHASH_SET_INIT_INT64(name) \ KHASH_INIT(name, khint64_t, char, 0, kh_int64_hash_func, kh_int64_hash_equal) /*! @function @abstract Instantiate a hash map containing 64-bit integer keys @param name Name of the hash table [symbol] @param khval_t Type of values [type] */ #define KHASH_MAP_INIT_INT64(name, khval_t) \ KHASH_INIT(name, khint64_t, khval_t, 1, kh_int64_hash_func, kh_int64_hash_equal) typedef const char *kh_cstr_t; /*! @function @abstract Instantiate a hash map containing const char* keys @param name Name of the hash table [symbol] */ #define KHASH_SET_INIT_STR(name) \ KHASH_INIT(name, kh_cstr_t, char, 0, kh_str_hash_func, kh_str_hash_equal) /*! @function @abstract Instantiate a hash map containing const char* keys @param name Name of the hash table [symbol] @param khval_t Type of values [type] */ #define KHASH_MAP_INIT_STR(name, khval_t) \ KHASH_INIT(name, kh_cstr_t, khval_t, 1, kh_str_hash_func, kh_str_hash_equal) #endif /* __AC_KHASH_H */ genometools-1.5.1/src/external/samtools-0.1.18/klist.h000066400000000000000000000066201211610345200223440ustar00rootroot00000000000000#ifndef _LH3_KLIST_H #define _LH3_KLIST_H #include #define KMEMPOOL_INIT(name, kmptype_t, kmpfree_f) \ typedef struct { \ size_t cnt, n, max; \ kmptype_t **buf; \ } kmp_##name##_t; \ static inline kmp_##name##_t *kmp_init_##name() { \ return calloc(1, sizeof(kmp_##name##_t)); \ } \ static inline void kmp_destroy_##name(kmp_##name##_t *mp) { \ size_t k; \ for (k = 0; k < mp->n; ++k) { \ kmpfree_f(mp->buf[k]); free(mp->buf[k]); \ } \ free(mp->buf); free(mp); \ } \ static inline kmptype_t *kmp_alloc_##name(kmp_##name##_t *mp) { \ ++mp->cnt; \ if (mp->n == 0) return calloc(1, sizeof(kmptype_t)); \ return mp->buf[--mp->n]; \ } \ static inline void kmp_free_##name(kmp_##name##_t *mp, kmptype_t *p) { \ --mp->cnt; \ if (mp->n == mp->max) { \ mp->max = mp->max? mp->max<<1 : 16; \ mp->buf = realloc(mp->buf, sizeof(void*) * mp->max); \ } \ mp->buf[mp->n++] = p; \ } #define kmempool_t(name) kmp_##name##_t #define kmp_init(name) kmp_init_##name() #define kmp_destroy(name, mp) kmp_destroy_##name(mp) #define kmp_alloc(name, mp) kmp_alloc_##name(mp) #define kmp_free(name, mp, p) kmp_free_##name(mp, p) #define KLIST_INIT(name, kltype_t, kmpfree_t) \ struct __kl1_##name { \ kltype_t data; \ struct __kl1_##name *next; \ }; \ typedef struct __kl1_##name kl1_##name; \ KMEMPOOL_INIT(name, kl1_##name, kmpfree_t) \ typedef struct { \ kl1_##name *head, *tail; \ kmp_##name##_t *mp; \ size_t size; \ } kl_##name##_t; \ static inline kl_##name##_t *kl_init_##name() { \ kl_##name##_t *kl = calloc(1, sizeof(kl_##name##_t)); \ kl->mp = kmp_init(name); \ kl->head = kl->tail = kmp_alloc(name, kl->mp); \ kl->head->next = 0; \ return kl; \ } \ static inline void kl_destroy_##name(kl_##name##_t *kl) { \ kl1_##name *p; \ for (p = kl->head; p != kl->tail; p = p->next) \ kmp_free(name, kl->mp, p); \ kmp_free(name, kl->mp, p); \ kmp_destroy(name, kl->mp); \ free(kl); \ } \ static inline kltype_t *kl_pushp_##name(kl_##name##_t *kl) { \ kl1_##name *q, *p = kmp_alloc(name, kl->mp); \ q = kl->tail; p->next = 0; kl->tail->next = p; kl->tail = p; \ ++kl->size; \ return &q->data; \ } \ static inline int kl_shift_##name(kl_##name##_t *kl, kltype_t *d) { \ kl1_##name *p; \ if (kl->head->next == 0) return -1; \ --kl->size; \ p = kl->head; kl->head = kl->head->next; \ if (d) *d = p->data; \ kmp_free(name, kl->mp, p); \ return 0; \ } #define kliter_t(name) kl1_##name #define klist_t(name) kl_##name##_t #define kl_val(iter) ((iter)->data) #define kl_next(iter) ((iter)->next) #define kl_begin(kl) ((kl)->head) #define kl_end(kl) ((kl)->tail) #define kl_init(name) kl_init_##name() #define kl_destroy(name, kl) kl_destroy_##name(kl) #define kl_pushp(name, kl) kl_pushp_##name(kl) #define kl_shift(name, kl, d) kl_shift_##name(kl, d) #endif genometools-1.5.1/src/external/samtools-0.1.18/knetfile.c000066400000000000000000000436341211610345200230200ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008 by Genome Research Ltd (GRL). 2010 by Attractive Chaos Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Probably I will not do socket programming in the next few years and therefore I decide to heavily annotate this file, for Linux and Windows as well. -ac */ #include #include #include #include #include #include #include #include #ifndef _WIN32 #include #include #include #endif #include "knetfile.h" /* In winsock.h, the type of a socket is SOCKET, which is: "typedef * u_int SOCKET". An invalid SOCKET is: "(SOCKET)(~0)", or signed * integer -1. In knetfile.c, I use "int" for socket type * throughout. This should be improved to avoid confusion. * * In Linux/Mac, recv() and read() do almost the same thing. You can see * in the header file that netread() is simply an alias of read(). In * Windows, however, they are different and using recv() is mandatory. */ /* This function tests if the file handler is ready for reading (or * writing if is_read==0). */ static int socket_wait(int fd, int is_read) { fd_set fds, *fdr = 0, *fdw = 0; struct timeval tv; int ret; tv.tv_sec = 5; tv.tv_usec = 0; // 5 seconds time out FD_ZERO(&fds); FD_SET(fd, &fds); if (is_read) fdr = &fds; else fdw = &fds; ret = select(fd+1, fdr, fdw, 0, &tv); #ifndef _WIN32 if (ret == -1) perror("select"); #else if (ret == 0) fprintf(stderr, "select time-out\n"); else if (ret == SOCKET_ERROR) fprintf(stderr, "select: %d\n", WSAGetLastError()); #endif return ret; } #ifndef _WIN32 /* This function does not work with Windows due to the lack of * getaddrinfo() in winsock. It is addapted from an example in "Beej's * Guide to Network Programming" (http://beej.us/guide/bgnet/). */ static int socket_connect(const char *host, const char *port) { #define __err_connect(func) do { perror(func); freeaddrinfo(res); return -1; } while (0) int on = 1, fd; struct linger lng = { 0, 0 }; struct addrinfo hints, *res = 0; memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; /* In Unix/Mac, getaddrinfo() is the most convenient way to get * server information. */ if (getaddrinfo(host, port, &hints, &res) != 0) __err_connect("getaddrinfo"); if ((fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1) __err_connect("socket"); /* The following two setsockopt() are used by ftplib * (http://nbpfaus.net/~pfau/ftplib/). I am not sure if they * necessary. */ if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) __err_connect("setsockopt"); if (setsockopt(fd, SOL_SOCKET, SO_LINGER, &lng, sizeof(lng)) == -1) __err_connect("setsockopt"); if (connect(fd, res->ai_addr, res->ai_addrlen) != 0) __err_connect("connect"); freeaddrinfo(res); return fd; } #else /* MinGW's printf has problem with "%lld" */ char *int64tostr(char *buf, int64_t x) { int cnt; int i = 0; do { buf[i++] = '0' + x % 10; x /= 10; } while (x); buf[i] = 0; for (cnt = i, i = 0; i < cnt/2; ++i) { int c = buf[i]; buf[i] = buf[cnt-i-1]; buf[cnt-i-1] = c; } return buf; } int64_t strtoint64(const char *buf) { int64_t x; for (x = 0; *buf != '\0'; ++buf) x = x * 10 + ((int64_t) *buf - 48); return x; } /* In windows, the first thing is to establish the TCP connection. */ int knet_win32_init() { WSADATA wsaData; return WSAStartup(MAKEWORD(2, 2), &wsaData); } void knet_win32_destroy() { WSACleanup(); } /* A slightly modfied version of the following function also works on * Mac (and presummably Linux). However, this function is not stable on * my Mac. It sometimes works fine but sometimes does not. Therefore for * non-Windows OS, I do not use this one. */ static SOCKET socket_connect(const char *host, const char *port) { #define __err_connect(func) \ do { \ fprintf(stderr, "%s: %d\n", func, WSAGetLastError()); \ return -1; \ } while (0) int on = 1; SOCKET fd; struct linger lng = { 0, 0 }; struct sockaddr_in server; struct hostent *hp = 0; // open socket if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) __err_connect("socket"); if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on)) == -1) __err_connect("setsockopt"); if (setsockopt(fd, SOL_SOCKET, SO_LINGER, (char*)&lng, sizeof(lng)) == -1) __err_connect("setsockopt"); // get host info if (isalpha(host[0])) hp = gethostbyname(host); else { struct in_addr addr; addr.s_addr = inet_addr(host); hp = gethostbyaddr((char*)&addr, 4, AF_INET); } if (hp == 0) __err_connect("gethost"); // connect server.sin_addr.s_addr = *((unsigned long*)hp->h_addr); server.sin_family= AF_INET; server.sin_port = htons(atoi(port)); if (connect(fd, (struct sockaddr*)&server, sizeof(server)) != 0) __err_connect("connect"); // freehostent(hp); // strangely in MSDN, hp is NOT freed (memory leak?!) return fd; } #endif static off_t my_netread(int fd, void *buf, off_t len) { off_t rest = len, curr, l = 0; /* recv() and read() may not read the required length of data with * one call. They have to be called repeatedly. */ while (rest) { if (socket_wait(fd, 1) <= 0) break; // socket is not ready for reading curr = netread(fd, buf + l, rest); /* According to the glibc manual, section 13.2, a zero returned * value indicates end-of-file (EOF), which should mean that * read() will not return zero if EOF has not been met but data * are not immediately available. */ if (curr == 0) break; l += curr; rest -= curr; } return l; } /************************* * FTP specific routines * *************************/ static int kftp_get_response(knetFile *ftp) { #ifndef _WIN32 unsigned char c; #else char c; #endif int n = 0; char *p; if (socket_wait(ftp->ctrl_fd, 1) <= 0) return 0; while (netread(ftp->ctrl_fd, &c, 1)) { // FIXME: this is *VERY BAD* for unbuffered I/O //fputc(c, stderr); if (n >= ftp->max_response) { ftp->max_response = ftp->max_response? ftp->max_response<<1 : 256; ftp->response = realloc(ftp->response, ftp->max_response); } ftp->response[n++] = c; if (c == '\n') { if (n >= 4 && isdigit(ftp->response[0]) && isdigit(ftp->response[1]) && isdigit(ftp->response[2]) && ftp->response[3] != '-') break; n = 0; continue; } } if (n < 2) return -1; ftp->response[n-2] = 0; return strtol(ftp->response, &p, 0); } static int kftp_send_cmd(knetFile *ftp, const char *cmd, int is_get) { if (socket_wait(ftp->ctrl_fd, 0) <= 0) return -1; // socket is not ready for writing netwrite(ftp->ctrl_fd, cmd, strlen(cmd)); return is_get? kftp_get_response(ftp) : 0; } static int kftp_pasv_prep(knetFile *ftp) { char *p; int v[6]; kftp_send_cmd(ftp, "PASV\r\n", 1); for (p = ftp->response; *p && *p != '('; ++p); if (*p != '(') return -1; ++p; sscanf(p, "%d,%d,%d,%d,%d,%d", &v[0], &v[1], &v[2], &v[3], &v[4], &v[5]); memcpy(ftp->pasv_ip, v, 4 * sizeof(int)); ftp->pasv_port = (v[4]<<8&0xff00) + v[5]; return 0; } static int kftp_pasv_connect(knetFile *ftp) { char host[80], port[10]; if (ftp->pasv_port == 0) { fprintf(stderr, "[kftp_pasv_connect] kftp_pasv_prep() is not called before hand.\n"); return -1; } sprintf(host, "%d.%d.%d.%d", ftp->pasv_ip[0], ftp->pasv_ip[1], ftp->pasv_ip[2], ftp->pasv_ip[3]); sprintf(port, "%d", ftp->pasv_port); ftp->fd = socket_connect(host, port); if (ftp->fd == -1) return -1; return 0; } int kftp_connect(knetFile *ftp) { ftp->ctrl_fd = socket_connect(ftp->host, ftp->port); if (ftp->ctrl_fd == -1) return -1; kftp_get_response(ftp); kftp_send_cmd(ftp, "USER anonymous\r\n", 1); kftp_send_cmd(ftp, "PASS kftp@\r\n", 1); kftp_send_cmd(ftp, "TYPE I\r\n", 1); return 0; } int kftp_reconnect(knetFile *ftp) { if (ftp->ctrl_fd != -1) { netclose(ftp->ctrl_fd); ftp->ctrl_fd = -1; } netclose(ftp->fd); ftp->fd = -1; return kftp_connect(ftp); } // initialize ->type, ->host, ->retr and ->size knetFile *kftp_parse_url(const char *fn, const char *mode) { knetFile *fp; char *p; int l; if (strstr(fn, "ftp://") != fn) return 0; for (p = (char*)fn + 6; *p && *p != '/'; ++p); if (*p != '/') return 0; l = p - fn - 6; fp = calloc(1, sizeof(knetFile)); fp->type = KNF_TYPE_FTP; fp->fd = -1; /* the Linux/Mac version of socket_connect() also recognizes a port * like "ftp", but the Windows version does not. */ fp->port = strdup("21"); fp->host = calloc(l + 1, 1); if (strchr(mode, 'c')) fp->no_reconnect = 1; strncpy(fp->host, fn + 6, l); fp->retr = calloc(strlen(p) + 8, 1); sprintf(fp->retr, "RETR %s\r\n", p); fp->size_cmd = calloc(strlen(p) + 8, 1); sprintf(fp->size_cmd, "SIZE %s\r\n", p); fp->seek_offset = 0; return fp; } // place ->fd at offset off int kftp_connect_file(knetFile *fp) { int ret; long long file_size; if (fp->fd != -1) { netclose(fp->fd); if (fp->no_reconnect) kftp_get_response(fp); } kftp_pasv_prep(fp); kftp_send_cmd(fp, fp->size_cmd, 1); #ifndef _WIN32 if ( sscanf(fp->response,"%*d %lld", &file_size) != 1 ) { fprintf(stderr,"[kftp_connect_file] %s\n", fp->response); return -1; } #else const char *p = fp->response; while (*p != ' ') ++p; while (*p < '0' || *p > '9') ++p; file_size = strtoint64(p); #endif fp->file_size = file_size; if (fp->offset>=0) { char tmp[32]; #ifndef _WIN32 sprintf(tmp, "REST %lld\r\n", (long long)fp->offset); #else strcpy(tmp, "REST "); int64tostr(tmp + 5, fp->offset); strcat(tmp, "\r\n"); #endif kftp_send_cmd(fp, tmp, 1); } kftp_send_cmd(fp, fp->retr, 0); kftp_pasv_connect(fp); ret = kftp_get_response(fp); if (ret != 150) { fprintf(stderr, "[kftp_connect_file] %s\n", fp->response); netclose(fp->fd); fp->fd = -1; return -1; } fp->is_ready = 1; return 0; } /************************** * HTTP specific routines * **************************/ knetFile *khttp_parse_url(const char *fn, const char *mode) { knetFile *fp; char *p, *proxy, *q; int l; if (strstr(fn, "http://") != fn) return 0; // set ->http_host for (p = (char*)fn + 7; *p && *p != '/'; ++p); l = p - fn - 7; fp = calloc(1, sizeof(knetFile)); fp->http_host = calloc(l + 1, 1); strncpy(fp->http_host, fn + 7, l); fp->http_host[l] = 0; for (q = fp->http_host; *q && *q != ':'; ++q); if (*q == ':') *q++ = 0; // get http_proxy proxy = getenv("http_proxy"); // set ->host, ->port and ->path if (proxy == 0) { fp->host = strdup(fp->http_host); // when there is no proxy, server name is identical to http_host name. fp->port = strdup(*q? q : "80"); fp->path = strdup(*p? p : "/"); } else { fp->host = (strstr(proxy, "http://") == proxy)? strdup(proxy + 7) : strdup(proxy); for (q = fp->host; *q && *q != ':'; ++q); if (*q == ':') *q++ = 0; fp->port = strdup(*q? q : "80"); fp->path = strdup(fn); } fp->type = KNF_TYPE_HTTP; fp->ctrl_fd = fp->fd = -1; fp->seek_offset = 0; return fp; } int khttp_connect_file(knetFile *fp) { int ret, l = 0; char *buf, *p; if (fp->fd != -1) netclose(fp->fd); fp->fd = socket_connect(fp->host, fp->port); buf = calloc(0x10000, 1); // FIXME: I am lazy... But in principle, 64KB should be large enough. l += sprintf(buf + l, "GET %s HTTP/1.0\r\nHost: %s\r\n", fp->path, fp->http_host); l += sprintf(buf + l, "Range: bytes=%lld-\r\n", (long long)fp->offset); l += sprintf(buf + l, "\r\n"); netwrite(fp->fd, buf, l); l = 0; while (netread(fp->fd, buf + l, 1)) { // read HTTP header; FIXME: bad efficiency if (buf[l] == '\n' && l >= 3) if (strncmp(buf + l - 3, "\r\n\r\n", 4) == 0) break; ++l; } buf[l] = 0; if (l < 14) { // prematured header netclose(fp->fd); fp->fd = -1; return -1; } ret = strtol(buf + 8, &p, 0); // HTTP return code if (ret == 200 && fp->offset>0) { // 200 (complete result); then skip beginning of the file off_t rest = fp->offset; while (rest) { off_t l = rest < 0x10000? rest : 0x10000; rest -= my_netread(fp->fd, buf, l); } } else if (ret != 206 && ret != 200) { free(buf); fprintf(stderr, "[khttp_connect_file] fail to open file (HTTP code: %d).\n", ret); netclose(fp->fd); fp->fd = -1; return -1; } free(buf); fp->is_ready = 1; return 0; } /******************** * Generic routines * ********************/ knetFile *knet_open(const char *fn, const char *mode) { knetFile *fp = 0; if (mode[0] != 'r') { fprintf(stderr, "[kftp_open] only mode \"r\" is supported.\n"); return 0; } if (strstr(fn, "ftp://") == fn) { fp = kftp_parse_url(fn, mode); if (fp == 0) return 0; if (kftp_connect(fp) == -1) { knet_close(fp); return 0; } kftp_connect_file(fp); } else if (strstr(fn, "http://") == fn) { fp = khttp_parse_url(fn, mode); if (fp == 0) return 0; khttp_connect_file(fp); } else { // local file #ifdef _WIN32 /* In windows, O_BINARY is necessary. In Linux/Mac, O_BINARY may * be undefined on some systems, although it is defined on my * Mac and the Linux I have tested on. */ int fd = open(fn, O_RDONLY | O_BINARY); #else int fd = open(fn, O_RDONLY); #endif if (fd == -1) { perror("open"); return 0; } fp = (knetFile*)calloc(1, sizeof(knetFile)); fp->type = KNF_TYPE_LOCAL; fp->fd = fd; fp->ctrl_fd = -1; } if (fp && fp->fd == -1) { knet_close(fp); return 0; } return fp; } knetFile *knet_dopen(int fd, const char *mode) { knetFile *fp = (knetFile*)calloc(1, sizeof(knetFile)); fp->type = KNF_TYPE_LOCAL; fp->fd = fd; return fp; } off_t knet_read(knetFile *fp, void *buf, off_t len) { off_t l = 0; if (fp->fd == -1) return 0; if (fp->type == KNF_TYPE_FTP) { if (fp->is_ready == 0) { if (!fp->no_reconnect) kftp_reconnect(fp); kftp_connect_file(fp); } } else if (fp->type == KNF_TYPE_HTTP) { if (fp->is_ready == 0) khttp_connect_file(fp); } if (fp->type == KNF_TYPE_LOCAL) { // on Windows, the following block is necessary; not on UNIX off_t rest = len, curr; while (rest) { do { curr = read(fp->fd, buf + l, rest); } while (curr < 0 && EINTR == errno); if (curr < 0) return -1; if (curr == 0) break; l += curr; rest -= curr; } } else l = my_netread(fp->fd, buf, len); fp->offset += l; return l; } off_t knet_seek(knetFile *fp, int64_t off, int whence) { if (whence == SEEK_SET && off == fp->offset) return 0; if (fp->type == KNF_TYPE_LOCAL) { /* Be aware that lseek() returns the offset after seeking, * while fseek() returns zero on success. */ off_t offset = lseek(fp->fd, off, whence); if (offset == -1) { // Be silent, it is OK for knet_seek to fail when the file is streamed // fprintf(stderr,"[knet_seek] %s\n", strerror(errno)); return -1; } fp->offset = offset; return 0; } else if (fp->type == KNF_TYPE_FTP) { if (whence==SEEK_CUR) fp->offset += off; else if (whence==SEEK_SET) fp->offset = off; else if ( whence==SEEK_END) fp->offset = fp->file_size+off; fp->is_ready = 0; return 0; } else if (fp->type == KNF_TYPE_HTTP) { if (whence == SEEK_END) { // FIXME: can we allow SEEK_END in future? fprintf(stderr, "[knet_seek] SEEK_END is not supported for HTTP. Offset is unchanged.\n"); errno = ESPIPE; return -1; } if (whence==SEEK_CUR) fp->offset += off; else if (whence==SEEK_SET) fp->offset = off; fp->is_ready = 0; return 0; } errno = EINVAL; fprintf(stderr,"[knet_seek] %s\n", strerror(errno)); return -1; } int knet_close(knetFile *fp) { if (fp == 0) return 0; if (fp->ctrl_fd != -1) netclose(fp->ctrl_fd); // FTP specific if (fp->fd != -1) { /* On Linux/Mac, netclose() is an alias of close(), but on * Windows, it is an alias of closesocket(). */ if (fp->type == KNF_TYPE_LOCAL) close(fp->fd); else netclose(fp->fd); } free(fp->host); free(fp->port); free(fp->response); free(fp->retr); // FTP specific free(fp->path); free(fp->http_host); // HTTP specific free(fp); return 0; } #ifdef KNETFILE_MAIN int main(void) { char *buf; knetFile *fp; int type = 4, l; #ifdef _WIN32 knet_win32_init(); #endif buf = calloc(0x100000, 1); if (type == 0) { fp = knet_open("knetfile.c", "r"); knet_seek(fp, 1000, SEEK_SET); } else if (type == 1) { // NCBI FTP, large file fp = knet_open("ftp://ftp.ncbi.nih.gov/1000genomes/ftp/data/NA12878/alignment/NA12878.chrom6.SLX.SRP000032.2009_06.bam", "r"); knet_seek(fp, 2500000000ll, SEEK_SET); l = knet_read(fp, buf, 255); } else if (type == 2) { fp = knet_open("ftp://ftp.sanger.ac.uk/pub4/treefam/tmp/index.shtml", "r"); knet_seek(fp, 1000, SEEK_SET); } else if (type == 3) { fp = knet_open("http://www.sanger.ac.uk/Users/lh3/index.shtml", "r"); knet_seek(fp, 1000, SEEK_SET); } else if (type == 4) { fp = knet_open("http://www.sanger.ac.uk/Users/lh3/ex1.bam", "r"); knet_read(fp, buf, 10000); knet_seek(fp, 20000, SEEK_SET); knet_seek(fp, 10000, SEEK_SET); l = knet_read(fp, buf+10000, 10000000) + 10000; } if (type != 4 && type != 1) { knet_read(fp, buf, 255); buf[255] = 0; printf("%s\n", buf); } else write(fileno(stdout), buf, l); knet_close(fp); free(buf); return 0; } #endif genometools-1.5.1/src/external/samtools-0.1.18/knetfile.h000066400000000000000000000031131211610345200230110ustar00rootroot00000000000000#ifndef KNETFILE_H #define KNETFILE_H #include #include #ifndef _WIN32 #define netread(fd, ptr, len) read(fd, ptr, len) #define netwrite(fd, ptr, len) write(fd, ptr, len) #define netclose(fd) close(fd) #else #include #define netread(fd, ptr, len) recv(fd, ptr, len, 0) #define netwrite(fd, ptr, len) send(fd, ptr, len, 0) #define netclose(fd) closesocket(fd) #endif // FIXME: currently I/O is unbuffered #define KNF_TYPE_LOCAL 1 #define KNF_TYPE_FTP 2 #define KNF_TYPE_HTTP 3 typedef struct knetFile_s { int type, fd; int64_t offset; char *host, *port; // the following are for FTP only int ctrl_fd, pasv_ip[4], pasv_port, max_response, no_reconnect, is_ready; char *response, *retr, *size_cmd; int64_t seek_offset; // for lazy seek int64_t file_size; // the following are for HTTP only char *path, *http_host; } knetFile; #define knet_tell(fp) ((fp)->offset) #define knet_fileno(fp) ((fp)->fd) #ifdef __cplusplus extern "C" { #endif #ifdef _WIN32 int knet_win32_init(); void knet_win32_destroy(); #endif knetFile *knet_open(const char *fn, const char *mode); /* This only works with local files. */ knetFile *knet_dopen(int fd, const char *mode); /* If ->is_ready==0, this routine updates ->fd; otherwise, it simply reads from ->fd. */ off_t knet_read(knetFile *fp, void *buf, off_t len); /* This routine only sets ->offset and ->is_ready=0. It does not communicate with the FTP server. */ off_t knet_seek(knetFile *fp, int64_t off, int whence); int knet_close(knetFile *fp); #ifdef __cplusplus } #endif #endif genometools-1.5.1/src/external/samtools-0.1.18/kprobaln.c000066400000000000000000000244201211610345200230170ustar00rootroot00000000000000/* The MIT License Copyright (c) 2003-2006, 2008-2010, by Heng Li Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include #include #include #include "kprobaln.h" /***************************************** * Probabilistic banded glocal alignment * *****************************************/ #define EI .25 #define EM .33333333333 static float g_qual2prob[256]; #define set_u(u, b, i, k) { int x=(i)-(b); x=x>0?x:0; (u)=((k)-x+1)*3; } kpa_par_t kpa_par_def = { 0.001, 0.1, 10 }; kpa_par_t kpa_par_alt = { 0.0001, 0.01, 10 }; /* The topology of the profile HMM: /\ /\ /\ /\ I[1] I[k-1] I[k] I[L] ^ \ \ ^ \ ^ \ \ ^ | \ \ | \ | \ \ | M[0] M[1] -> ... -> M[k-1] -> M[k] -> ... -> M[L] M[L+1] \ \/ \/ \/ / \ /\ /\ /\ / -> D[k-1] -> D[k] -> M[0] points to every {M,I}[k] and every {M,I}[k] points M[L+1]. On input, _ref is the reference sequence and _query is the query sequence. Both are sequences of 0/1/2/3/4 where 4 stands for an ambiguous residue. iqual is the base quality. c sets the gap open probability, gap extension probability and band width. On output, state and q are arrays of length l_query. The higher 30 bits give the reference position the query base is matched to and the lower two bits can be 0 (an alignment match) or 1 (an insertion). q[i] gives the phred scaled posterior probability of state[i] being wrong. */ int kpa_glocal(const uint8_t *_ref, int l_ref, const uint8_t *_query, int l_query, const uint8_t *iqual, const kpa_par_t *c, int *state, uint8_t *q) { double **f, **b = 0, *s, m[9], sI, sM, bI, bM, pb; float *qual, *_qual; const uint8_t *ref, *query; int bw, bw2, i, k, is_diff = 0, is_backward = 1, Pr; /*** initialization ***/ is_backward = state && q? 1 : 0; ref = _ref - 1; query = _query - 1; // change to 1-based coordinate bw = l_ref > l_query? l_ref : l_query; if (bw > c->bw) bw = c->bw; if (bw < abs(l_ref - l_query)) bw = abs(l_ref - l_query); bw2 = bw * 2 + 1; // allocate the forward and backward matrices f[][] and b[][] and the scaling array s[] f = calloc(l_query+1, sizeof(void*)); if (is_backward) b = calloc(l_query+1, sizeof(void*)); for (i = 0; i <= l_query; ++i) { f[i] = calloc(bw2 * 3 + 6, sizeof(double)); // FIXME: this is over-allocated for very short seqs if (is_backward) b[i] = calloc(bw2 * 3 + 6, sizeof(double)); } s = calloc(l_query+2, sizeof(double)); // s[] is the scaling factor to avoid underflow // initialize qual _qual = calloc(l_query, sizeof(float)); if (g_qual2prob[0] == 0) for (i = 0; i < 256; ++i) g_qual2prob[i] = pow(10, -i/10.); for (i = 0; i < l_query; ++i) _qual[i] = g_qual2prob[iqual? iqual[i] : 30]; qual = _qual - 1; // initialize transition probability sM = sI = 1. / (2 * l_query + 2); // the value here seems not to affect results; FIXME: need proof m[0*3+0] = (1 - c->d - c->d) * (1 - sM); m[0*3+1] = m[0*3+2] = c->d * (1 - sM); m[1*3+0] = (1 - c->e) * (1 - sI); m[1*3+1] = c->e * (1 - sI); m[1*3+2] = 0.; m[2*3+0] = 1 - c->e; m[2*3+1] = 0.; m[2*3+2] = c->e; bM = (1 - c->d) / l_ref; bI = c->d / l_ref; // (bM+bI)*l_ref==1 /*** forward ***/ // f[0] set_u(k, bw, 0, 0); f[0][k] = s[0] = 1.; { // f[1] double *fi = f[1], sum; int beg = 1, end = l_ref < bw + 1? l_ref : bw + 1, _beg, _end; for (k = beg, sum = 0.; k <= end; ++k) { int u; double e = (ref[k] > 3 || query[1] > 3)? 1. : ref[k] == query[1]? 1. - qual[1] : qual[1] * EM; set_u(u, bw, 1, k); fi[u+0] = e * bM; fi[u+1] = EI * bI; sum += fi[u] + fi[u+1]; } // rescale s[1] = sum; set_u(_beg, bw, 1, beg); set_u(_end, bw, 1, end); _end += 2; for (k = _beg; k <= _end; ++k) fi[k] /= sum; } // f[2..l_query] for (i = 2; i <= l_query; ++i) { double *fi = f[i], *fi1 = f[i-1], sum, qli = qual[i]; int beg = 1, end = l_ref, x, _beg, _end; uint8_t qyi = query[i]; x = i - bw; beg = beg > x? beg : x; // band start x = i + bw; end = end < x? end : x; // band end for (k = beg, sum = 0.; k <= end; ++k) { int u, v11, v01, v10; double e; e = (ref[k] > 3 || qyi > 3)? 1. : ref[k] == qyi? 1. - qli : qli * EM; set_u(u, bw, i, k); set_u(v11, bw, i-1, k-1); set_u(v10, bw, i-1, k); set_u(v01, bw, i, k-1); fi[u+0] = e * (m[0] * fi1[v11+0] + m[3] * fi1[v11+1] + m[6] * fi1[v11+2]); fi[u+1] = EI * (m[1] * fi1[v10+0] + m[4] * fi1[v10+1]); fi[u+2] = m[2] * fi[v01+0] + m[8] * fi[v01+2]; sum += fi[u] + fi[u+1] + fi[u+2]; // fprintf(stderr, "F (%d,%d;%d): %lg,%lg,%lg\n", i, k, u, fi[u], fi[u+1], fi[u+2]); // DEBUG } // rescale s[i] = sum; set_u(_beg, bw, i, beg); set_u(_end, bw, i, end); _end += 2; for (k = _beg, sum = 1./sum; k <= _end; ++k) fi[k] *= sum; } { // f[l_query+1] double sum; for (k = 1, sum = 0.; k <= l_ref; ++k) { int u; set_u(u, bw, l_query, k); if (u < 3 || u >= bw2*3+3) continue; sum += f[l_query][u+0] * sM + f[l_query][u+1] * sI; } s[l_query+1] = sum; // the last scaling factor } { // compute likelihood double p = 1., Pr1 = 0.; for (i = 0; i <= l_query + 1; ++i) { p *= s[i]; if (p < 1e-100) Pr1 += -4.343 * log(p), p = 1.; } Pr1 += -4.343 * log(p * l_ref * l_query); Pr = (int)(Pr1 + .499); if (!is_backward) { // skip backward and MAP for (i = 0; i <= l_query; ++i) free(f[i]); free(f); free(s); free(_qual); return Pr; } } /*** backward ***/ // b[l_query] (b[l_query+1][0]=1 and thus \tilde{b}[][]=1/s[l_query+1]; this is where s[l_query+1] comes from) for (k = 1; k <= l_ref; ++k) { int u; double *bi = b[l_query]; set_u(u, bw, l_query, k); if (u < 3 || u >= bw2*3+3) continue; bi[u+0] = sM / s[l_query] / s[l_query+1]; bi[u+1] = sI / s[l_query] / s[l_query+1]; } // b[l_query-1..1] for (i = l_query - 1; i >= 1; --i) { int beg = 1, end = l_ref, x, _beg, _end; double *bi = b[i], *bi1 = b[i+1], y = (i > 1), qli1 = qual[i+1]; uint8_t qyi1 = query[i+1]; x = i - bw; beg = beg > x? beg : x; x = i + bw; end = end < x? end : x; for (k = end; k >= beg; --k) { int u, v11, v01, v10; double e; set_u(u, bw, i, k); set_u(v11, bw, i+1, k+1); set_u(v10, bw, i+1, k); set_u(v01, bw, i, k+1); e = (k >= l_ref? 0 : (ref[k+1] > 3 || qyi1 > 3)? 1. : ref[k+1] == qyi1? 1. - qli1 : qli1 * EM) * bi1[v11]; bi[u+0] = e * m[0] + EI * m[1] * bi1[v10+1] + m[2] * bi[v01+2]; // bi1[v11] has been foled into e. bi[u+1] = e * m[3] + EI * m[4] * bi1[v10+1]; bi[u+2] = (e * m[6] + m[8] * bi[v01+2]) * y; // fprintf(stderr, "B (%d,%d;%d): %lg,%lg,%lg\n", i, k, u, bi[u], bi[u+1], bi[u+2]); // DEBUG } // rescale set_u(_beg, bw, i, beg); set_u(_end, bw, i, end); _end += 2; for (k = _beg, y = 1./s[i]; k <= _end; ++k) bi[k] *= y; } { // b[0] int beg = 1, end = l_ref < bw + 1? l_ref : bw + 1; double sum = 0.; for (k = end; k >= beg; --k) { int u; double e = (ref[k] > 3 || query[1] > 3)? 1. : ref[k] == query[1]? 1. - qual[1] : qual[1] * EM; set_u(u, bw, 1, k); if (u < 3 || u >= bw2*3+3) continue; sum += e * b[1][u+0] * bM + EI * b[1][u+1] * bI; } set_u(k, bw, 0, 0); pb = b[0][k] = sum / s[0]; // if everything works as is expected, pb == 1.0 } is_diff = fabs(pb - 1.) > 1e-7? 1 : 0; /*** MAP ***/ for (i = 1; i <= l_query; ++i) { double sum = 0., *fi = f[i], *bi = b[i], max = 0.; int beg = 1, end = l_ref, x, max_k = -1; x = i - bw; beg = beg > x? beg : x; x = i + bw; end = end < x? end : x; for (k = beg; k <= end; ++k) { int u; double z; set_u(u, bw, i, k); z = fi[u+0] * bi[u+0]; if (z > max) max = z, max_k = (k-1)<<2 | 0; sum += z; z = fi[u+1] * bi[u+1]; if (z > max) max = z, max_k = (k-1)<<2 | 1; sum += z; } max /= sum; sum *= s[i]; // if everything works as is expected, sum == 1.0 if (state) state[i-1] = max_k; if (q) k = (int)(-4.343 * log(1. - max) + .499), q[i-1] = k > 100? 99 : k; #ifdef _MAIN fprintf(stderr, "(%.10lg,%.10lg) (%d,%d:%c,%c:%d) %lg\n", pb, sum, i-1, max_k>>2, "ACGT"[query[i]], "ACGT"[ref[(max_k>>2)+1]], max_k&3, max); // DEBUG #endif } /*** free ***/ for (i = 0; i <= l_query; ++i) { free(f[i]); free(b[i]); } free(f); free(b); free(s); free(_qual); return Pr; } #ifdef _MAIN #include int main(int argc, char *argv[]) { uint8_t conv[256], *iqual, *ref, *query; int c, l_ref, l_query, i, q = 30, b = 10, P; while ((c = getopt(argc, argv, "b:q:")) >= 0) { switch (c) { case 'b': b = atoi(optarg); break; case 'q': q = atoi(optarg); break; } } if (optind + 2 > argc) { fprintf(stderr, "Usage: %s [-q %d] [-b %d] \n", argv[0], q, b); // example: acttc attc return 1; } memset(conv, 4, 256); conv['a'] = conv['A'] = 0; conv['c'] = conv['C'] = 1; conv['g'] = conv['G'] = 2; conv['t'] = conv['T'] = 3; ref = (uint8_t*)argv[optind]; query = (uint8_t*)argv[optind+1]; l_ref = strlen((char*)ref); l_query = strlen((char*)query); for (i = 0; i < l_ref; ++i) ref[i] = conv[ref[i]]; for (i = 0; i < l_query; ++i) query[i] = conv[query[i]]; iqual = malloc(l_query); memset(iqual, q, l_query); kpa_par_def.bw = b; P = kpa_glocal(ref, l_ref, query, l_query, iqual, &kpa_par_alt, 0, 0); fprintf(stderr, "%d\n", P); free(iqual); return 0; } #endif genometools-1.5.1/src/external/samtools-0.1.18/kprobaln.h000066400000000000000000000030401211610345200230170ustar00rootroot00000000000000/* The MIT License Copyright (c) 2003-2006, 2008, 2009 by Heng Li Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LH3_KPROBALN_H_ #define LH3_KPROBALN_H_ #include typedef struct { float d, e; int bw; } kpa_par_t; #ifdef __cplusplus extern "C" { #endif int kpa_glocal(const uint8_t *_ref, int l_ref, const uint8_t *_query, int l_query, const uint8_t *iqual, const kpa_par_t *c, int *state, uint8_t *q); #ifdef __cplusplus } #endif extern kpa_par_t kpa_par_def, kpa_par_alt; #endif genometools-1.5.1/src/external/samtools-0.1.18/kseq.h000066400000000000000000000201121211610345200221510ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008, 2009, 2011 Attractive Chaos Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Last Modified: 18AUG2011 */ #ifndef AC_KSEQ_H #define AC_KSEQ_H #include #include #include #define KS_SEP_SPACE 0 // isspace(): \t, \n, \v, \f, \r #define KS_SEP_TAB 1 // isspace() && !' ' #define KS_SEP_MAX 1 #define __KS_TYPE(type_t) \ typedef struct __kstream_t { \ unsigned char *buf; \ int begin, end, is_eof; \ type_t f; \ } kstream_t; #define ks_eof(ks) ((ks)->is_eof && (ks)->begin >= (ks)->end) #define ks_rewind(ks) ((ks)->is_eof = (ks)->begin = (ks)->end = 0) #define __KS_BASIC(type_t, __bufsize) \ static inline kstream_t *ks_init(type_t f) \ { \ kstream_t *ks = (kstream_t*)calloc(1, sizeof(kstream_t)); \ ks->f = f; \ ks->buf = malloc(__bufsize); \ return ks; \ } \ static inline void ks_destroy(kstream_t *ks) \ { \ if (ks) { \ free(ks->buf); \ free(ks); \ } \ } #define __KS_GETC(__read, __bufsize) \ static inline int ks_getc(kstream_t *ks) \ { \ if (ks->is_eof && ks->begin >= ks->end) return -1; \ if (ks->begin >= ks->end) { \ ks->begin = 0; \ ks->end = __read(ks->f, ks->buf, __bufsize); \ if (ks->end < __bufsize) ks->is_eof = 1; \ if (ks->end == 0) return -1; \ } \ return (int)ks->buf[ks->begin++]; \ } #ifndef KSTRING_T #define KSTRING_T kstring_t typedef struct __kstring_t { size_t l, m; char *s; } kstring_t; #endif #ifndef kroundup32 #define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) #endif #define __KS_GETUNTIL(__read, __bufsize) \ static int ks_getuntil2(kstream_t *ks, int delimiter, kstring_t *str, int *dret, int append) \ { \ if (dret) *dret = 0; \ str->l = append? str->l : 0; \ if (ks->begin >= ks->end && ks->is_eof) return -1; \ for (;;) { \ int i; \ if (ks->begin >= ks->end) { \ if (!ks->is_eof) { \ ks->begin = 0; \ ks->end = __read(ks->f, ks->buf, __bufsize); \ if (ks->end < __bufsize) ks->is_eof = 1; \ if (ks->end == 0) break; \ } else break; \ } \ if (delimiter > KS_SEP_MAX) { \ for (i = ks->begin; i < ks->end; ++i) \ if (ks->buf[i] == delimiter) break; \ } else if (delimiter == KS_SEP_SPACE) { \ for (i = ks->begin; i < ks->end; ++i) \ if (isspace(ks->buf[i])) break; \ } else if (delimiter == KS_SEP_TAB) { \ for (i = ks->begin; i < ks->end; ++i) \ if (isspace(ks->buf[i]) && ks->buf[i] != ' ') break; \ } else i = 0; /* never come to here! */ \ if (str->m - str->l < i - ks->begin + 1) { \ str->m = str->l + (i - ks->begin) + 1; \ kroundup32(str->m); \ str->s = (char*)realloc(str->s, str->m); \ } \ memcpy(str->s + str->l, ks->buf + ks->begin, i - ks->begin); \ str->l = str->l + (i - ks->begin); \ ks->begin = i + 1; \ if (i < ks->end) { \ if (dret) *dret = ks->buf[i]; \ break; \ } \ } \ if (str->s == 0) { \ str->m = 1; \ str->s = (char*)calloc(1, 1); \ } \ str->s[str->l] = '\0'; \ return str->l; \ } \ static inline int ks_getuntil(kstream_t *ks, int delimiter, kstring_t *str, int *dret) \ { return ks_getuntil2(ks, delimiter, str, dret, 0); } #define KSTREAM_INIT(type_t, __read, __bufsize) \ __KS_TYPE(type_t) \ __KS_BASIC(type_t, __bufsize) \ __KS_GETC(__read, __bufsize) \ __KS_GETUNTIL(__read, __bufsize) #define __KSEQ_BASIC(type_t) \ static inline kseq_t *kseq_init(type_t fd) \ { \ kseq_t *s = (kseq_t*)calloc(1, sizeof(kseq_t)); \ s->f = ks_init(fd); \ return s; \ } \ static inline void kseq_rewind(kseq_t *ks) \ { \ ks->last_char = 0; \ ks->f->is_eof = ks->f->begin = ks->f->end = 0; \ } \ static inline void kseq_destroy(kseq_t *ks) \ { \ if (!ks) return; \ free(ks->name.s); free(ks->comment.s); free(ks->seq.s); free(ks->qual.s); \ ks_destroy(ks->f); \ free(ks); \ } /* Return value: >=0 length of the sequence (normal) -1 end-of-file -2 truncated quality string */ #define __KSEQ_READ \ static int kseq_read(kseq_t *seq) \ { \ int c; \ kstream_t *ks = seq->f; \ if (seq->last_char == 0) { /* then jump to the next header line */ \ while ((c = ks_getc(ks)) != -1 && c != '>' && c != '@'); \ if (c == -1) return -1; /* end of file */ \ seq->last_char = c; \ } /* else: the first header char has been read in the previous call */ \ seq->comment.l = seq->seq.l = seq->qual.l = 0; /* reset all members */ \ if (ks_getuntil(ks, 0, &seq->name, &c) < 0) return -1; /* normal exit: EOF */ \ if (c != '\n') ks_getuntil(ks, '\n', &seq->comment, 0); /* read FASTA/Q comment */ \ if (seq->seq.s == 0) { /* we can do this in the loop below, but that is slower */ \ seq->seq.m = 256; \ seq->seq.s = (char*)malloc(seq->seq.m); \ } \ while ((c = ks_getc(ks)) != -1 && c != '>' && c != '+' && c != '@') { \ seq->seq.s[seq->seq.l++] = c; /* this is safe: we always have enough space for 1 char */ \ ks_getuntil2(ks, '\n', &seq->seq, 0, 1); /* read the rest of the line */ \ } \ if (c == '>' || c == '@') seq->last_char = c; /* the first header char has been read */ \ if (seq->seq.l + 1 >= seq->seq.m) { /* seq->seq.s[seq->seq.l] below may be out of boundary */ \ seq->seq.m = seq->seq.l + 2; \ kroundup32(seq->seq.m); /* rounded to the next closest 2^k */ \ seq->seq.s = (char*)realloc(seq->seq.s, seq->seq.m); \ } \ seq->seq.s[seq->seq.l] = 0; /* null terminated string */ \ if (c != '+') return seq->seq.l; /* FASTA */ \ if (seq->qual.m < seq->seq.m) { /* allocate memory for qual in case insufficient */ \ seq->qual.m = seq->seq.m; \ seq->qual.s = (char*)realloc(seq->qual.s, seq->qual.m); \ } \ while ((c = ks_getc(ks)) != -1 && c != '\n'); /* skip the rest of '+' line */ \ if (c == -1) return -2; /* error: no quality string */ \ while (ks_getuntil2(ks, '\n', &seq->qual, 0, 1) >= 0 && seq->qual.l < seq->seq.l); \ seq->last_char = 0; /* we have not come to the next header line */ \ if (seq->seq.l != seq->qual.l) return -2; /* error: qual string is of a different length */ \ return seq->seq.l; \ } #define __KSEQ_TYPE(type_t) \ typedef struct { \ kstring_t name, comment, seq, qual; \ int last_char; \ kstream_t *f; \ } kseq_t; #define KSEQ_INIT(type_t, __read) \ KSTREAM_INIT(type_t, __read, 16384) \ __KSEQ_TYPE(type_t) \ __KSEQ_BASIC(type_t) \ __KSEQ_READ #endif genometools-1.5.1/src/external/samtools-0.1.18/ksort.h000066400000000000000000000234531211610345200223630ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008 Genome Research Ltd (GRL). Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Contact: Heng Li */ /* 2008-11-16 (0.1.4): * Fixed a bug in introsort() that happens in rare cases. 2008-11-05 (0.1.3): * Fixed a bug in introsort() for complex comparisons. * Fixed a bug in mergesort(). The previous version is not stable. 2008-09-15 (0.1.2): * Accelerated introsort. On my Mac (not on another Linux machine), my implementation is as fast as std::sort on random input. * Added combsort and in introsort, switch to combsort if the recursion is too deep. 2008-09-13 (0.1.1): * Added k-small algorithm 2008-09-05 (0.1.0): * Initial version */ #ifndef AC_KSORT_H #define AC_KSORT_H #include #include typedef struct { void *left, *right; int depth; } ks_isort_stack_t; #define KSORT_SWAP(type_t, a, b) { register type_t t=(a); (a)=(b); (b)=t; } #define KSORT_INIT(name, type_t, __sort_lt) \ void ks_mergesort_##name(size_t n, type_t array[], type_t temp[]) \ { \ type_t *a2[2], *a, *b; \ int curr, shift; \ \ a2[0] = array; \ a2[1] = temp? temp : (type_t*)malloc(sizeof(type_t) * n); \ for (curr = 0, shift = 0; (1ul<> 1) - 1; i != (size_t)(-1); --i) \ ks_heapadjust_##name(i, lsize, l); \ } \ void ks_heapsort_##name(size_t lsize, type_t l[]) \ { \ size_t i; \ for (i = lsize - 1; i > 0; --i) { \ type_t tmp; \ tmp = *l; *l = l[i]; l[i] = tmp; ks_heapadjust_##name(0, i, l); \ } \ } \ inline void __ks_insertsort_##name(type_t *s, type_t *t) \ { \ type_t *i, *j, swap_tmp; \ for (i = s + 1; i < t; ++i) \ for (j = i; j > s && __sort_lt(*j, *(j-1)); --j) { \ swap_tmp = *j; *j = *(j-1); *(j-1) = swap_tmp; \ } \ } \ void ks_combsort_##name(size_t n, type_t a[]) \ { \ const double shrink_factor = 1.2473309501039786540366528676643; \ int do_swap; \ size_t gap = n; \ type_t tmp, *i, *j; \ do { \ if (gap > 2) { \ gap = (size_t)(gap / shrink_factor); \ if (gap == 9 || gap == 10) gap = 11; \ } \ do_swap = 0; \ for (i = a; i < a + n - gap; ++i) { \ j = i + gap; \ if (__sort_lt(*j, *i)) { \ tmp = *i; *i = *j; *j = tmp; \ do_swap = 1; \ } \ } \ } while (do_swap || gap > 2); \ if (gap != 1) __ks_insertsort_##name(a, a + n); \ } \ void ks_introsort_##name(size_t n, type_t a[]) \ { \ int d; \ ks_isort_stack_t *top, *stack; \ type_t rp, swap_tmp; \ type_t *s, *t, *i, *j, *k; \ \ if (n < 1) return; \ else if (n == 2) { \ if (__sort_lt(a[1], a[0])) { swap_tmp = a[0]; a[0] = a[1]; a[1] = swap_tmp; } \ return; \ } \ for (d = 2; 1ul<>1) + 1; \ if (__sort_lt(*k, *i)) { \ if (__sort_lt(*k, *j)) k = j; \ } else k = __sort_lt(*j, *i)? i : j; \ rp = *k; \ if (k != t) { swap_tmp = *k; *k = *t; *t = swap_tmp; } \ for (;;) { \ do ++i; while (__sort_lt(*i, rp)); \ do --j; while (i <= j && __sort_lt(rp, *j)); \ if (j <= i) break; \ swap_tmp = *i; *i = *j; *j = swap_tmp; \ } \ swap_tmp = *i; *i = *t; *t = swap_tmp; \ if (i-s > t-i) { \ if (i-s > 16) { top->left = s; top->right = i-1; top->depth = d; ++top; } \ s = t-i > 16? i+1 : t; \ } else { \ if (t-i > 16) { top->left = i+1; top->right = t; top->depth = d; ++top; } \ t = i-s > 16? i-1 : s; \ } \ } else { \ if (top == stack) { \ free(stack); \ __ks_insertsort_##name(a, a+n); \ return; \ } else { --top; s = (type_t*)top->left; t = (type_t*)top->right; d = top->depth; } \ } \ } \ } \ /* This function is adapted from: http://ndevilla.free.fr/median/ */ \ /* 0 <= kk < n */ \ type_t ks_ksmall_##name(size_t n, type_t arr[], size_t kk) \ { \ type_t *low, *high, *k, *ll, *hh, *mid; \ low = arr; high = arr + n - 1; k = arr + kk; \ for (;;) { \ if (high <= low) return *k; \ if (high == low + 1) { \ if (__sort_lt(*high, *low)) KSORT_SWAP(type_t, *low, *high); \ return *k; \ } \ mid = low + (high - low) / 2; \ if (__sort_lt(*high, *mid)) KSORT_SWAP(type_t, *mid, *high); \ if (__sort_lt(*high, *low)) KSORT_SWAP(type_t, *low, *high); \ if (__sort_lt(*low, *mid)) KSORT_SWAP(type_t, *mid, *low); \ KSORT_SWAP(type_t, *mid, *(low+1)); \ ll = low + 1; hh = high; \ for (;;) { \ do ++ll; while (__sort_lt(*ll, *low)); \ do --hh; while (__sort_lt(*low, *hh)); \ if (hh < ll) break; \ KSORT_SWAP(type_t, *ll, *hh); \ } \ KSORT_SWAP(type_t, *low, *hh); \ if (hh <= k) low = ll; \ if (hh >= k) high = hh - 1; \ } \ } \ void ks_shuffle_##name(size_t n, type_t a[]) \ { \ int i, j; \ for (i = n; i > 1; --i) { \ type_t tmp; \ j = (int)(drand48() * i); \ tmp = a[j]; a[j] = a[i-1]; a[i-1] = tmp; \ } \ } #define ks_mergesort(name, n, a, t) ks_mergesort_##name(n, a, t) #define ks_introsort(name, n, a) ks_introsort_##name(n, a) #define ks_combsort(name, n, a) ks_combsort_##name(n, a) #define ks_heapsort(name, n, a) ks_heapsort_##name(n, a) #define ks_heapmake(name, n, a) ks_heapmake_##name(n, a) #define ks_heapadjust(name, i, n, a) ks_heapadjust_##name(i, n, a) #define ks_ksmall(name, n, a, k) ks_ksmall_##name(n, a, k) #define ks_shuffle(name, n, a) ks_shuffle_##name(n, a) #define ks_lt_generic(a, b) ((a) < (b)) #define ks_lt_str(a, b) (strcmp((a), (b)) < 0) typedef const char *ksstr_t; #define KSORT_INIT_GENERIC(type_t) KSORT_INIT(type_t, type_t, ks_lt_generic) #define KSORT_INIT_STR KSORT_INIT(str, ksstr_t, ks_lt_str) #endif genometools-1.5.1/src/external/samtools-0.1.18/kstring.c000066400000000000000000000124001211610345200226630ustar00rootroot00000000000000#include #include #include #include #include #include "kstring.h" int ksprintf(kstring_t *s, const char *fmt, ...) { va_list ap; int l; va_start(ap, fmt); l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap); // This line does not work with glibc 2.0. See `man snprintf'. va_end(ap); if (l + 1 > s->m - s->l) { s->m = s->l + l + 2; kroundup32(s->m); s->s = (char*)realloc(s->s, s->m); va_start(ap, fmt); l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap); } va_end(ap); s->l += l; return l; } char *kstrtok(const char *str, const char *sep, ks_tokaux_t *aux) { const char *p, *start; if (sep) { // set up the table if (str == 0 && (aux->tab[0]&1)) return 0; // no need to set up if we have finished aux->finished = 0; if (sep[1]) { aux->sep = -1; aux->tab[0] = aux->tab[1] = aux->tab[2] = aux->tab[3] = 0; for (p = sep; *p; ++p) aux->tab[*p>>6] |= 1ull<<(*p&0x3f); } else aux->sep = sep[0]; } if (aux->finished) return 0; else if (str) aux->p = str - 1, aux->finished = 0; if (aux->sep < 0) { for (p = start = aux->p + 1; *p; ++p) if (aux->tab[*p>>6]>>(*p&0x3f)&1) break; } else { for (p = start = aux->p + 1; *p; ++p) if (*p == aux->sep) break; } aux->p = p; // end of token if (*p == 0) aux->finished = 1; // no more tokens return (char*)start; } // s MUST BE a null terminated string; l = strlen(s) int ksplit_core(char *s, int delimiter, int *_max, int **_offsets) { int i, n, max, last_char, last_start, *offsets, l; n = 0; max = *_max; offsets = *_offsets; l = strlen(s); #define __ksplit_aux do { \ if (_offsets) { \ s[i] = 0; \ if (n == max) { \ max = max? max<<1 : 2; \ offsets = (int*)realloc(offsets, sizeof(int) * max); \ } \ offsets[n++] = last_start; \ } else ++n; \ } while (0) for (i = 0, last_char = last_start = 0; i <= l; ++i) { if (delimiter == 0) { if (isspace(s[i]) || s[i] == 0) { if (isgraph(last_char)) __ksplit_aux; // the end of a field } else { if (isspace(last_char) || last_char == 0) last_start = i; } } else { if (s[i] == delimiter || s[i] == 0) { if (last_char != 0 && last_char != delimiter) __ksplit_aux; // the end of a field } else { if (last_char == delimiter || last_char == 0) last_start = i; } } last_char = s[i]; } *_max = max; *_offsets = offsets; return n; } /********************** * Boyer-Moore search * **********************/ typedef unsigned char ubyte_t; // reference: http://www-igm.univ-mlv.fr/~lecroq/string/node14.html static int *ksBM_prep(const ubyte_t *pat, int m) { int i, *suff, *prep, *bmGs, *bmBc; prep = calloc(m + 256, sizeof(int)); bmGs = prep; bmBc = prep + m; { // preBmBc() for (i = 0; i < 256; ++i) bmBc[i] = m; for (i = 0; i < m - 1; ++i) bmBc[pat[i]] = m - i - 1; } suff = calloc(m, sizeof(int)); { // suffixes() int f = 0, g; suff[m - 1] = m; g = m - 1; for (i = m - 2; i >= 0; --i) { if (i > g && suff[i + m - 1 - f] < i - g) suff[i] = suff[i + m - 1 - f]; else { if (i < g) g = i; f = i; while (g >= 0 && pat[g] == pat[g + m - 1 - f]) --g; suff[i] = f - g; } } } { // preBmGs() int j = 0; for (i = 0; i < m; ++i) bmGs[i] = m; for (i = m - 1; i >= 0; --i) if (suff[i] == i + 1) for (; j < m - 1 - i; ++j) if (bmGs[j] == m) bmGs[j] = m - 1 - i; for (i = 0; i <= m - 2; ++i) bmGs[m - 1 - suff[i]] = m - 1 - i; } free(suff); return prep; } void *kmemmem(const void *_str, int n, const void *_pat, int m, int **_prep) { int i, j, *prep = 0, *bmGs, *bmBc; const ubyte_t *str, *pat; str = (const ubyte_t*)_str; pat = (const ubyte_t*)_pat; prep = (_prep == 0 || *_prep == 0)? ksBM_prep(pat, m) : *_prep; if (_prep && *_prep == 0) *_prep = prep; bmGs = prep; bmBc = prep + m; j = 0; while (j <= n - m) { for (i = m - 1; i >= 0 && pat[i] == str[i+j]; --i); if (i >= 0) { int max = bmBc[str[i+j]] - m + 1 + i; if (max < bmGs[i]) max = bmGs[i]; j += max; } else return (void*)(str + j); } if (_prep == 0) free(prep); return 0; } char *kstrstr(const char *str, const char *pat, int **_prep) { return (char*)kmemmem(str, strlen(str), pat, strlen(pat), _prep); } char *kstrnstr(const char *str, const char *pat, int n, int **_prep) { return (char*)kmemmem(str, n, pat, strlen(pat), _prep); } /*********************** * The main() function * ***********************/ #ifdef KSTRING_MAIN #include int main() { kstring_t *s; int *fields, n, i; ks_tokaux_t aux; char *p; s = (kstring_t*)calloc(1, sizeof(kstring_t)); // test ksprintf() ksprintf(s, " abcdefg: %d ", 100); printf("'%s'\n", s->s); // test ksplit() fields = ksplit(s, 0, &n); for (i = 0; i < n; ++i) printf("field[%d] = '%s'\n", i, s->s + fields[i]); // test kstrtok() s->l = 0; for (p = kstrtok("ab:cde:fg/hij::k", ":/", &aux); p; p = kstrtok(0, 0, &aux)) { kputsn(p, aux.p - p, s); kputc('\n', s); } printf("%s", s->s); // free free(s->s); free(s); free(fields); { static char *str = "abcdefgcdgcagtcakcdcd"; static char *pat = "cd"; char *ret, *s = str; int *prep = 0; while ((ret = kstrstr(s, pat, &prep)) != 0) { printf("match: %s\n", ret); s = ret + prep[0]; } free(prep); } return 0; } #endif genometools-1.5.1/src/external/samtools-0.1.18/kstring.h000066400000000000000000000051451211610345200227000ustar00rootroot00000000000000#ifndef KSTRING_H #define KSTRING_H #include #include #include #ifndef kroundup32 #define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) #endif #ifndef KSTRING_T #define KSTRING_T kstring_t typedef struct __kstring_t { size_t l, m; char *s; } kstring_t; #endif typedef struct { uint64_t tab[4]; int sep, finished; const char *p; // end of the current token } ks_tokaux_t; #ifdef __cplusplus extern "C" { #endif int ksprintf(kstring_t *s, const char *fmt, ...); int ksplit_core(char *s, int delimiter, int *_max, int **_offsets); char *kstrstr(const char *str, const char *pat, int **_prep); char *kstrnstr(const char *str, const char *pat, int n, int **_prep); void *kmemmem(const void *_str, int n, const void *_pat, int m, int **_prep); /* kstrtok() is similar to strtok_r() except that str is not * modified and both str and sep can be NULL. For efficiency, it is * actually recommended to set both to NULL in the subsequent calls * if sep is not changed. */ char *kstrtok(const char *str, const char *sep, ks_tokaux_t *aux); #ifdef __cplusplus } #endif static inline int kputsn(const char *p, int l, kstring_t *s) { if (s->l + l + 1 >= s->m) { s->m = s->l + l + 2; kroundup32(s->m); s->s = (char*)realloc(s->s, s->m); } memcpy(s->s + s->l, p, l); s->l += l; s->s[s->l] = 0; return l; } static inline int kputs(const char *p, kstring_t *s) { return kputsn(p, strlen(p), s); } static inline int kputc(int c, kstring_t *s) { if (s->l + 1 >= s->m) { s->m = s->l + 2; kroundup32(s->m); s->s = (char*)realloc(s->s, s->m); } s->s[s->l++] = c; s->s[s->l] = 0; return c; } static inline int kputw(int c, kstring_t *s) { char buf[16]; int l, x; if (c == 0) return kputc('0', s); for (l = 0, x = c < 0? -c : c; x > 0; x /= 10) buf[l++] = x%10 + '0'; if (c < 0) buf[l++] = '-'; if (s->l + l + 1 >= s->m) { s->m = s->l + l + 2; kroundup32(s->m); s->s = (char*)realloc(s->s, s->m); } for (x = l - 1; x >= 0; --x) s->s[s->l++] = buf[x]; s->s[s->l] = 0; return 0; } static inline int kputuw(unsigned c, kstring_t *s) { char buf[16]; int l, i; unsigned x; if (c == 0) return kputc('0', s); for (l = 0, x = c; x > 0; x /= 10) buf[l++] = x%10 + '0'; if (s->l + l + 1 >= s->m) { s->m = s->l + l + 2; kroundup32(s->m); s->s = (char*)realloc(s->s, s->m); } for (i = l - 1; i >= 0; --i) s->s[s->l++] = buf[i]; s->s[s->l] = 0; return 0; } static inline int *ksplit(kstring_t *s, int delimiter, int *n) { int max = 0, *offsets = 0; *n = ksplit_core(s->s, delimiter, &max, &offsets); return offsets; } #endif genometools-1.5.1/src/external/samtools-0.1.18/misc/000077500000000000000000000000001211610345200217745ustar00rootroot00000000000000genometools-1.5.1/src/external/samtools-0.1.18/misc/HmmGlocal.java000066400000000000000000000150741211610345200245110ustar00rootroot00000000000000import java.io.*; import java.lang.*; public class HmmGlocal { private double[] qual2prob; private double cd, ce; // gap open probility [1e-3], gap extension probability [0.1] private int cb; // band width [7] public HmmGlocal(final double d, final double e, final int b) { cd = d; ce = e; cb = b; qual2prob = new double[256]; for (int i = 0; i < 256; ++i) qual2prob[i] = Math.pow(10, -i/10.); } private static int set_u(final int b, final int i, final int k) { int x = i - b; x = x > 0? x : 0; return (k + 1 - x) * 3; } public int hmm_glocal(final byte[] _ref, final byte[] _query, final byte[] _iqual, int[] state, byte[] q) { int i, k; /*** initialization ***/ // change coordinates int l_ref = _ref.length; byte[] ref = new byte[l_ref+1]; for (i = 0; i < l_ref; ++i) ref[i+1] = _ref[i]; // FIXME: this is silly... int l_query = _query.length; byte[] query = new byte[l_query+1]; double[] qual = new double[l_query+1]; for (i = 0; i < l_query; ++i) { query[i+1] = _query[i]; qual[i+1] = qual2prob[_iqual[i]]; } // set band width int bw2, bw = l_ref > l_query? l_ref : l_query; if (bw > cb) bw = cb; if (bw < Math.abs(l_ref - l_query)) bw = Math.abs(l_ref - l_query); bw2 = bw * 2 + 1; // allocate the forward and backward matrices f[][] and b[][] and the scaling array s[] double[][] f = new double[l_query+1][bw2*3 + 6]; double[][] b = new double[l_query+1][bw2*3 + 6]; double[] s = new double[l_query+2]; // initialize transition probabilities double sM, sI, bM, bI; sM = sI = 1. / (2 * l_query + 2); bM = (1 - cd) / l_query; bI = cd / l_query; // (bM+bI)*l_query==1 double[] m = new double[9]; m[0*3+0] = (1 - cd - cd) * (1 - sM); m[0*3+1] = m[0*3+2] = cd * (1 - sM); m[1*3+0] = (1 - ce) * (1 - sI); m[1*3+1] = ce * (1 - sI); m[1*3+2] = 0.; m[2*3+0] = 1 - ce; m[2*3+1] = 0.; m[2*3+2] = ce; /*** forward ***/ // f[0] f[0][set_u(bw, 0, 0)] = s[0] = 1.; { // f[1] double[] fi = f[1]; double sum; int beg = 1, end = l_ref < bw + 1? l_ref : bw + 1, _beg, _end; for (k = beg, sum = 0.; k <= end; ++k) { int u; double e = (ref[k] > 3 || query[1] > 3)? 1. : ref[k] == query[1]? 1. - qual[1] : qual[1] / 3.; u = set_u(bw, 1, k); fi[u+0] = e * bM; fi[u+1] = .25 * bI; sum += fi[u] + fi[u+1]; } // rescale s[1] = sum; _beg = set_u(bw, 1, beg); _end = set_u(bw, 1, end); _end += 2; for (k = _beg; k <= _end; ++k) fi[k] /= sum; } // f[2..l_query] for (i = 2; i <= l_query; ++i) { double[] fi = f[i], fi1 = f[i-1]; double sum, qli = qual[i]; int beg = 1, end = l_ref, x, _beg, _end; byte qyi = query[i]; x = i - bw; beg = beg > x? beg : x; // band start x = i + bw; end = end < x? end : x; // band end for (k = beg, sum = 0.; k <= end; ++k) { int u, v11, v01, v10; double e; e = (ref[k] > 3 || qyi > 3)? 1. : ref[k] == qyi? 1. - qli : qli / 3.; u = set_u(bw, i, k); v11 = set_u(bw, i-1, k-1); v10 = set_u(bw, i-1, k); v01 = set_u(bw, i, k-1); fi[u+0] = e * (m[0] * fi1[v11+0] + m[3] * fi1[v11+1] + m[6] * fi1[v11+2]); fi[u+1] = .25 * (m[1] * fi1[v10+0] + m[4] * fi1[v10+1]); fi[u+2] = m[2] * fi[v01+0] + m[8] * fi[v01+2]; sum += fi[u] + fi[u+1] + fi[u+2]; //System.out.println("("+i+","+k+";"+u+"): "+fi[u]+","+fi[u+1]+","+fi[u+2]); } // rescale s[i] = sum; _beg = set_u(bw, i, beg); _end = set_u(bw, i, end); _end += 2; for (k = _beg, sum = 1./sum; k <= _end; ++k) fi[k] *= sum; } { // f[l_query+1] double sum; for (k = 1, sum = 0.; k <= l_ref; ++k) { int u = set_u(bw, l_query, k); if (u < 3 || u >= bw2*3+3) continue; sum += f[l_query][u+0] * sM + f[l_query][u+1] * sI; } s[l_query+1] = sum; // the last scaling factor } /*** backward ***/ // b[l_query] (b[l_query+1][0]=1 and thus \tilde{b}[][]=1/s[l_query+1]; this is where s[l_query+1] comes from) for (k = 1; k <= l_ref; ++k) { int u = set_u(bw, l_query, k); double[] bi = b[l_query]; if (u < 3 || u >= bw2*3+3) continue; bi[u+0] = sM / s[l_query] / s[l_query+1]; bi[u+1] = sI / s[l_query] / s[l_query+1]; } // b[l_query-1..1] for (i = l_query - 1; i >= 1; --i) { int beg = 1, end = l_ref, x, _beg, _end; double[] bi = b[i], bi1 = b[i+1]; double y = (i > 1)? 1. : 0., qli1 = qual[i+1]; byte qyi1 = query[i+1]; x = i - bw; beg = beg > x? beg : x; x = i + bw; end = end < x? end : x; for (k = end; k >= beg; --k) { int u, v11, v01, v10; double e; u = set_u(bw, i, k); v11 = set_u(bw, i+1, k+1); v10 = set_u(bw, i+1, k); v01 = set_u(bw, i, k+1); e = (k >= l_ref? 0 : (ref[k+1] > 3 || qyi1 > 3)? 1. : ref[k+1] == qyi1? 1. - qli1 : qli1 / 3.) * bi1[v11]; bi[u+0] = e * m[0] + .25 * m[1] * bi1[v10+1] + m[2] * bi[v01+2]; // bi1[v11] has been foled into e. bi[u+1] = e * m[3] + .25 * m[4] * bi1[v10+1]; bi[u+2] = (e * m[6] + m[8] * bi[v01+2]) * y; } // rescale _beg = set_u(bw, i, beg); _end = set_u(bw, i, end); _end += 2; for (k = _beg, y = 1./s[i]; k <= _end; ++k) bi[k] *= y; } double pb; { // b[0] int beg = 1, end = l_ref < bw + 1? l_ref : bw + 1; double sum = 0.; for (k = end; k >= beg; --k) { int u = set_u(bw, 1, k); double e = (ref[k] > 3 || query[1] > 3)? 1. : ref[k] == query[1]? 1. - qual[1] : qual[1] / 3.; if (u < 3 || u >= bw2*3+3) continue; sum += e * b[1][u+0] * bM + .25 * b[1][u+1] * bI; } pb = b[0][set_u(bw, 0, 0)] = sum / s[0]; // if everything works as is expected, pb == 1.0 } int is_diff = Math.abs(pb - 1.) > 1e-7? 1 : 0; /*** MAP ***/ for (i = 1; i <= l_query; ++i) { double sum = 0., max = 0.; double[] fi = f[i], bi = b[i]; int beg = 1, end = l_ref, x, max_k = -1; x = i - bw; beg = beg > x? beg : x; x = i + bw; end = end < x? end : x; for (k = beg; k <= end; ++k) { int u = set_u(bw, i, k); double z; sum += (z = fi[u+0] * bi[u+0]); if (z > max) { max = z; max_k = (k-1)<<2 | 0; } sum += (z = fi[u+1] * bi[u+1]); if (z > max) { max = z; max_k = (k-1)<<2 | 1; } } max /= sum; sum *= s[i]; // if everything works as is expected, sum == 1.0 if (state != null) state[i-1] = max_k; if (q != null) { k = (int)(-4.343 * Math.log(1. - max) + .499); q[i-1] = (byte)(k > 100? 99 : k); } //System.out.println("("+pb+","+sum+")"+" ("+(i-1)+","+(max_k>>2)+","+(max_k&3)+","+max+")"); } return 0; } public static void main(String[] args) { byte[] ref = {'\0', '\1', '\3', '\3', '\1'}; byte[] query = {'\0', '\3', '\3', '\1'}; byte[] qual = new byte[4]; qual[0] = qual[1] = qual[2] = qual[3] = (byte)20; HmmGlocal hg = new HmmGlocal(1e-3, 0.1, 7); hg.hmm_glocal(ref, query, qual, null, null); } }genometools-1.5.1/src/external/samtools-0.1.18/misc/Makefile000066400000000000000000000025641211610345200234430ustar00rootroot00000000000000CC= gcc CXX= g++ CFLAGS= -g -Wall -O2 #-m64 #-arch ppc CXXFLAGS= $(CFLAGS) DFLAGS= -D_FILE_OFFSET_BITS=64 OBJS= PROG= md5sum-lite md5fa maq2sam-short maq2sam-long wgsim seqtk INCLUDES= -I.. SUBDIRS= . .SUFFIXES:.c .o .c.o: $(CC) -c $(CFLAGS) $(DFLAGS) $(INCLUDES) $< -o $@ all:$(PROG) lib-recur all-recur clean-recur cleanlocal-recur install-recur: @target=`echo $@ | sed s/-recur//`; \ wdir=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ cd $$subdir; \ $(MAKE) CC="$(CC)" DFLAGS="$(DFLAGS)" CFLAGS="$(CFLAGS)" \ INCLUDES="$(INCLUDES)" $$target || exit 1; \ cd $$wdir; \ done; lib: seqtk:seqtk.o $(CC) $(CFLAGS) -o $@ seqtk.o -lm -lz wgsim:wgsim.o $(CC) $(CFLAGS) -o $@ wgsim.o -lm -lz md5fa:md5.o md5fa.o md5.h ../kseq.h $(CC) $(CFLAGS) -o $@ md5.o md5fa.o -lz md5sum-lite:md5sum-lite.o $(CC) $(CFLAGS) -o $@ md5sum-lite.o md5sum-lite.o:md5.c md5.h $(CC) -c $(CFLAGS) -DMD5SUM_MAIN -o $@ md5.c maq2sam-short:maq2sam.c $(CC) $(CFLAGS) -o $@ maq2sam.c -lz maq2sam-long:maq2sam.c $(CC) $(CFLAGS) -DMAQ_LONGREADS -o $@ maq2sam.c -lz md5fa.o:md5.h md5fa.c $(CC) $(CFLAGS) -c -I.. -o $@ md5fa.c seqtk.o:seqtk.c ../khash.h ../kseq.h $(CC) $(CFLAGS) -c -I.. -o $@ seqtk.c wgsim.o:wgsim.c ../kseq.h $(CC) $(CFLAGS) -c -I.. -o $@ wgsim.c cleanlocal: rm -fr gmon.out *.o a.out *.exe *.dSYM $(PROG) *~ *.a clean:cleanlocal-recur genometools-1.5.1/src/external/samtools-0.1.18/misc/blast2sam.pl000077500000000000000000000045571211610345200242370ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use warnings; use Getopt::Std; &blast2sam; sub blast2sam { my %opts = (); getopts('s', \%opts); die("Usage: blast2sam.pl \n") if (-t STDIN && @ARGV == 0); my ($qlen, $slen, $q, $s, $qbeg, $qend, @sam, @cigar, @cmaux, $show_seq); $show_seq = defined($opts{s}); @sam = (); @sam[0,4,6..8,10] = ('', 255, '*', 0, 0, '*'); while (<>) { if (@cigar && (/^Query=/ || /Score =.*bits.*Expect/)) { # print &blast_print_sam(\@sam, \@cigar, \@cmaux, $qlen - $qend); @cigar = (); } if (/^Query= (\S+)/) { $sam[0] = $1; } elsif (/\((\S+)\s+letters\)/) { $qlen = $1; $qlen =~ s/,//g; } elsif (/^>(\S+)/) { $sam[2] = $1; } elsif (/Length = (\d+)/) { $slen = $1; } elsif (/Score =\s+(\S+) bits.+Expect(\(\d+\))? = (\S+)/) { # the start of an alignment block my ($as, $ev) = (int($1 + .499), $3); $ev = "1$ev" if ($ev =~ /^e/); @sam[1,3,9,11,12] = (0, 0, '', "AS:i:$as", "EV:Z:$ev"); @cigar = (); $qbeg = 0; @cmaux = (0, 0, 0, ''); } elsif (/Strand = (\S+) \/ (\S+)/) { $sam[1] |= 0x10 if ($2 eq 'Minus'); } elsif (/Query\:\s(\d+)\s*(\S+)\s(\d+)/) { $q = $2; unless ($qbeg) { $qbeg = $1; push(@cigar, ($1-1) . "H") if ($1 > 1); } $qend = $3; if ($show_seq) { my $x = $q; $x =~ s/-//g; $sam[9] .= $x; } } elsif (/Sbjct\:\s(\d+)\s*(\S+)\s(\d+)/) { $s = $2; if ($sam[1] & 0x10) { $sam[3] = $3; } else { $sam[3] = $1 unless ($sam[3]); } &aln2cm(\@cigar, \$q, \$s, \@cmaux); } } &blast_print_sam(\@sam, \@cigar, \@cmaux, $qlen - $qend); } sub blast_print_sam { my ($sam, $cigar, $cmaux, $qrest) = @_; push(@$cigar, $cmaux->[1] . substr("MDI", $cmaux->[0], 1)); push(@$cigar, $qrest . 'H') if ($qrest); if ($sam->[1] & 0x10) { @$cigar = reverse(@$cigar); $sam->[9] = reverse($sam->[9]); $sam->[9] =~ tr/atgcrymkswATGCRYMKSW/tacgyrkmswTACGYRKMSW/; } $sam->[9] = '*' if (!$sam->[9]); $sam->[5] = join('', @$cigar); print join("\t", @$sam), "\n"; } sub aln2cm { my ($cigar, $q, $s, $cmaux) = @_; my $l = length($$q); for (my $i = 0; $i < $l; ++$i) { my $op; # set $op if (substr($$q, $i, 1) eq '-') { $op = 2; } elsif (substr($$s, $i, 1) eq '-') { $op = 1; } else { $op = 0; } # for CIGAR if ($cmaux->[0] == $op) { ++$cmaux->[1]; } else { push(@$cigar, $cmaux->[1] . substr("MDI", $cmaux->[0], 1)); $cmaux->[0] = $op; $cmaux->[1] = 1; } } } genometools-1.5.1/src/external/samtools-0.1.18/misc/bowtie2sam.pl000077500000000000000000000041001211610345200244030ustar00rootroot00000000000000#!/usr/bin/perl -w # Contact: lh3 # Version: 0.1.1 use strict; use warnings; use Getopt::Std; &bowtie2sam; exit; sub bowtie2sam { my %opts = (); die("Usage: bowtie2sam.pl \n") if (@ARGV == 0 && -t STDIN); # core loop my (@s, $last, @staging, $k, $best_s, $subbest_s, $best_k); $last = ''; while (<>) { my ($name, $nm) = &bowtie2sam_aux($_, \@s); # read_name, number of mismatches if ($name eq $last) { # I do not know whether the multiple hits are ordered on the # number of mismatches. I assume they are not and so I have to # keep all these multiple hits in memory. @{$staging[$k]} = @s; if ($best_s > $nm) { $subbest_s = $best_s; $best_s = $nm; $best_k = $k; } elsif ($subbest_s > $nm) { $subbest_s = $nm; } ++$k; } else { if ($last) { if ($best_s == $subbest_s) { $staging[$best_k][4] = 0; } elsif ($subbest_s - $best_s == 1) { $staging[$best_k][4] = 15 if ($staging[$best_k][4] > 15); } print join("\t", @{$staging[$best_k]}), "\n"; } $k = 1; $best_s = $nm; $subbest_s = 1000; $best_k = 0; @{$staging[0]} = @s; $last = $name; } } print join("\t", @{$staging[$best_k]}), "\n" if ($best_k >= 0); } sub bowtie2sam_aux { my ($line, $s) = @_; chomp($line); my @t = split("\t", $line); my $ret; @$s = (); # read name $s->[0] = $ret = $t[0]; $s->[0] =~ s/\/[12]$//g; # initial flag (will be updated later) $s->[1] = 0; # read & quality $s->[9] = $t[4]; $s->[10] = $t[5]; # cigar $s->[5] = length($s->[9]) . "M"; # coor $s->[2] = $t[2]; $s->[3] = $t[3] + 1; $s->[1] |= 0x10 if ($t[1] eq '-'); # mapQ $s->[4] = $t[6] == 0? 25 : 0; # mate coordinate $s->[6] = '*'; $s->[7] = $s->[8] = 0; # aux my $nm = @t - 7; push(@$s, "NM:i:" . (@t-7)); push(@$s, "X$nm:i:" . ($t[6]+1)); my $md = ''; if ($t[7]) { $_ = $t[7]; my $a = 0; while (/(\d+):[ACGTN]>([ACGTN])/gi) { my ($y, $z) = ($1, $2); $md .= (int($y)-$a) . $z; $a += $y - $a + 1; } $md .= length($s->[9]) - $a; } else { $md = length($s->[9]); } push(@$s, "MD:Z:$md"); return ($ret, $nm); } genometools-1.5.1/src/external/samtools-0.1.18/misc/export2sam.pl000077500000000000000000000442141211610345200244450ustar00rootroot00000000000000#!/usr/bin/env perl # # # export2sam.pl converts GERALD export files to SAM format. # # # ########## License: # # The MIT License # # Original SAMtools work copyright (c) 2008-2009 Genome Research Ltd. # Modified SAMtools work copyright (c) 2010 Illumina, Inc. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # # # # ########## ChangeLog: # # Version: 2.3.1 (18MAR2011) # # - Restore file '-' as stdin input. # # Version: 2.3.0 (24JAN2011) # # - Add support for export reserved chromosome name "CONTROL", # which is translated to optional field "XC:Z:CONTROL". # - Check for ".gz" file extension on export files and open # these as gzip pipes when the extension is found. # # Version: 2.2.0 (16NOV2010) # # - Remove any leading zeros in export fields: RUNNO,LANE,TILE,X,Y # - For export records with reserved chromosome name identifiers # "QC" and "RM", add the optional field "XC:Z:QC" or "XC:Z:RM" # to the SAM record, so that these cases can be distinguished # from other unmatched reads. # # Version: 2.1.0 (21SEP2010) # # - Additional export record error checking. # - Convert export records with chromomsome value of "RM" to unmapped # SAM records. # # Version: 2.0.0 (15FEB2010) # # Script updated by Illumina in conjunction with CASAVA 1.7.0 # release. # # Major changes are as follows: # - The CIGAR string has been updated to include all gaps from # ELANDv2 alignments. # - The ELAND single read alignment score is always stored in the # optional "SM" field and the ELAND paired read alignment score # is stored in the optional "AS" field when it exists. # - The MAPQ value is set to the higher of the two alignment scores, # but no greater than 254, i.e. min(254,max(SM,AS)) # - The SAM "proper pair" bit (0x0002) is now set for read pairs # meeting ELAND's expected orientation and insert size criteria. # - The default quality score translation is set for export files # which contain Phread+64 quality values. An option, # "--qlogodds", has been added to translate quality values from # the Solexa+64 format used in export files prior to Pipeline # 1.3 # - The export match descriptor is now reverse-complemented when # necessary such that it always corresponds to the forward # strand of the reference, to be consistent with other # information in the SAM record. It is now written to the # optional 'XD' field (rather than 'MD') to acknowledge its # minor differences from the samtools match descriptor (see # additional detail below). # - An option, "--nofilter", has been added to include reads which # have failed primary analysis quality filtration. Such reads # will have the corresponding SAM flag bit (0x0200) set. # - Labels in the export 'contig' field are preserved by setting # RNAME to "$export_chromosome/$export_contig" when the contig # label exists. # # # Contact: lh3 # Version: 0.1.2 (03JAN2009) # # # ########## Known Conversion Limitations: # # - Export records for reads that map to a position < 1 (allowed # in export format), are converted to unmapped reads in the SAM # record. # - Export records contain the reserved chromosome names: "NM", # "QC","RM" and "CONTROL". "NM" indicates that the aligner could # not map the read to the reference sequence set. "QC" means that # the aligner did not attempt to map the read due to some # technical limitation. "RM" means that the read mapped to a set # of 'contaminant' sequences specified in GERALD's RNA-seq # workflow. "CONTROL" means that the read is a control. All of # these alignment types are collapsed to the single unmapped # alignment state in the SAM record, but the optional SAM "XC" # field is used to record the original reserved chromosome name of # the read for all but the "NM" case. # - The export match descriptor is slightly different than the # samtools match descriptor. For this reason it is stored in the # optional SAM field 'XD' (and not 'MD'). Note that the export # match descriptor differs from the samtools version in two # respects: (1) indels are explicitly closed with the '$' # character and (2) insertions must be enumerated in the match # descriptor. For example a 35-base read with a two-base insertion # is described as: 20^2$14 # # # my $version = "2.3.1"; use strict; use warnings; use Getopt::Long; use File::Spec; use List::Util qw(min max); use constant { EXPORT_MACHINE => 0, EXPORT_RUNNO => 1, EXPORT_LANE => 2, EXPORT_TILE => 3, EXPORT_X => 4, EXPORT_Y => 5, EXPORT_INDEX => 6, EXPORT_READNO => 7, EXPORT_READ => 8, EXPORT_QUAL => 9, EXPORT_CHROM => 10, EXPORT_CONTIG => 11, EXPORT_POS => 12, EXPORT_STRAND => 13, EXPORT_MD => 14, EXPORT_SEMAP => 15, EXPORT_PEMAP => 16, EXPORT_PASSFILT => 21, EXPORT_SIZE => 22, }; use constant { SAM_QNAME => 0, SAM_FLAG => 1, SAM_RNAME => 2, SAM_POS => 3, SAM_MAPQ => 4, SAM_CIGAR => 5, SAM_MRNM => 6, SAM_MPOS => 7, SAM_ISIZE => 8, SAM_SEQ => 9, SAM_QUAL => 10, }; # function prototypes for Richard's code sub match_desc_to_cigar($); sub match_desc_frag_length($); sub reverse_compl_match_descriptor($); sub write_header($;$;$); &export2sam; exit; sub export2sam { my $cmdline = $0 . " " . join(" ",@ARGV); my $arg_count = scalar @ARGV; my $progname = (File::Spec->splitpath($0))[2]; my $is_logodds_qvals = 0; # if true, assume files contain logodds (i.e. "solexa") quality values my $is_nofilter = 0; my $read1file; my $read2file; my $print_version = 0; my $help = 0; my $result = GetOptions( "qlogodds" => \$is_logodds_qvals, "nofilter" => \$is_nofilter, "read1=s" => \$read1file, "read2=s" => \$read2file, "version" => \$print_version, "help" => \$help ); my $usage = <) { $export_line_count++; my (@s1, @s2); &export2sam_aux($_, $export_line_count, \@s1, \@conv_table, $is_paired, 1, $is_nofilter); if ($is_paired) { my $read2line = <$fh2>; if(not $read2line){ die("\nERROR: read1 and read2 export files do not contain the same number of reads.\n Extra reads observed in read1 file at line no: $export_line_count.\n\n"); } &export2sam_aux($read2line, $export_line_count, \@s2, \@conv_table, $is_paired, 2, $is_nofilter); if (@s1 && @s2) { # then set mate coordinate if($s1[SAM_QNAME] ne $s2[SAM_QNAME]){ die("\nERROR: Non-paired reads in export files on line: $export_line_count.\n Read1: $_ Read2: $read2line\n"); } my $isize = 0; if ($s1[SAM_RNAME] ne '*' && $s1[SAM_RNAME] eq $s2[SAM_RNAME]) { # then calculate $isize my $x1 = ($s1[SAM_FLAG] & 0x10)? $s1[SAM_POS] + length($s1[SAM_SEQ]) : $s1[SAM_POS]; my $x2 = ($s2[SAM_FLAG] & 0x10)? $s2[SAM_POS] + length($s2[SAM_SEQ]) : $s2[SAM_POS]; $isize = $x2 - $x1; } foreach ([\@s1,\@s2,$isize],[\@s2,\@s1,-$isize]){ my ($sa,$sb,$is) = @{$_}; if ($sb->[SAM_RNAME] ne '*') { $sa->[SAM_MRNM] = ($sb->[SAM_RNAME] eq $sa->[SAM_RNAME]) ? "=" : $sb->[SAM_RNAME]; $sa->[SAM_MPOS] = $sb->[SAM_POS]; $sa->[SAM_ISIZE] = $is; $sa->[SAM_FLAG] |= 0x20 if ($sb->[SAM_FLAG] & 0x10); } else { $sa->[SAM_FLAG] |= 0x8; } } } } print join("\t", @s1), "\n" if (@s1); print join("\t", @s2), "\n" if (@s2 && $is_paired); } close($fh1); if($is_paired) { while(my $read2line = <$fh2>){ $export_line_count++; die("\nERROR: read1 and read2 export files do not contain the same number of reads.\n Extra reads observed in read2 file at line no: $export_line_count.\n\n"); } close($fh2); } } sub export2sam_aux { my ($line, $line_no, $s, $ct, $is_paired, $read_no, $is_nofilter) = @_; chomp($line); my @t = split("\t", $line); if(scalar(@t) < EXPORT_SIZE) { my $msg="\nERROR: Unexpected number of fields in export record on line $line_no of read$read_no export file. Found " . scalar(@t) . " fields but expected " . EXPORT_SIZE . ".\n"; $msg.="\t...erroneous export record:\n" . $line . "\n\n"; die($msg); } @$s = (); my $isPassFilt = ($t[EXPORT_PASSFILT] eq 'Y'); return if(not ($isPassFilt or $is_nofilter)); # read name my $samQnamePrefix = $t[EXPORT_MACHINE] . (($t[EXPORT_RUNNO] ne "") ? "_" . int($t[EXPORT_RUNNO]) : ""); $s->[SAM_QNAME] = join(':', $samQnamePrefix, int($t[EXPORT_LANE]), int($t[EXPORT_TILE]), int($t[EXPORT_X]), int($t[EXPORT_Y])); # initial flag (will be updated later) $s->[SAM_FLAG] = 0; if($is_paired) { if($t[EXPORT_READNO] != $read_no){ die("\nERROR: read$read_no export file contains record with read number: " .$t[EXPORT_READNO] . " on line: $line_no\n\n"); } $s->[SAM_FLAG] |= 1 | 1<<(5 + $read_no); } $s->[SAM_FLAG] |= 0x200 if (not $isPassFilt); # read & quality my $is_export_rev = ($t[EXPORT_STRAND] eq 'R'); if ($is_export_rev) { # then reverse the sequence and quality $s->[SAM_SEQ] = reverse($t[EXPORT_READ]); $s->[SAM_SEQ] =~ tr/ACGTacgt/TGCAtgca/; $s->[SAM_QUAL] = reverse($t[EXPORT_QUAL]); } else { $s->[SAM_SEQ] = $t[EXPORT_READ]; $s->[SAM_QUAL] = $t[EXPORT_QUAL]; } my @convqual = (); foreach (unpack('C*', $s->[SAM_QUAL])){ my $val=$ct->[$_]; if(not defined $val){ my $msg="\nERROR: can't interpret export quality value: " . $_ . " in read$read_no export file, line: $line_no\n"; if( $_ < 64 ) { $msg .= " Use --qlogodds flag to translate logodds (solexa) quality values.\n"; } die($msg . "\n"); } push @convqual,$val; } $s->[SAM_QUAL] = pack('C*',@convqual); # change coding # coor my $has_coor = 0; $s->[SAM_RNAME] = "*"; if (($t[EXPORT_CHROM] eq 'NM') or ($t[EXPORT_CHROM] eq 'QC') or ($t[EXPORT_CHROM] eq 'RM') or ($t[EXPORT_CHROM] eq 'CONTROL')) { $s->[SAM_FLAG] |= 0x4; # unmapped push(@$s,"XC:Z:".$t[EXPORT_CHROM]) if($t[EXPORT_CHROM] ne 'NM'); } elsif ($t[EXPORT_CHROM] =~ /(\d+):(\d+):(\d+)/) { $s->[SAM_FLAG] |= 0x4; # TODO: should I set BAM_FUNMAP in this case? push(@$s, "H0:i:$1", "H1:i:$2", "H2:i:$3") } elsif ($t[EXPORT_POS] < 1) { $s->[SAM_FLAG] |= 0x4; # unmapped } else { $s->[SAM_RNAME] = $t[EXPORT_CHROM]; $s->[SAM_RNAME] .= "/" . $t[EXPORT_CONTIG] if($t[EXPORT_CONTIG] ne ''); $has_coor = 1; } $s->[SAM_POS] = $has_coor? $t[EXPORT_POS] : 0; # print STDERR "t[14] = " . $t[14] . "\n"; my $matchDesc = ''; $s->[SAM_CIGAR] = "*"; if($has_coor){ $matchDesc = ($is_export_rev) ? reverse_compl_match_descriptor($t[EXPORT_MD]) : $t[EXPORT_MD]; if($matchDesc =~ /\^/){ # construct CIGAR string using Richard's function $s->[SAM_CIGAR] = match_desc_to_cigar($matchDesc); # indel processing } else { $s->[SAM_CIGAR] = length($s->[SAM_SEQ]) . "M"; } } # print STDERR "cigar_string = $cigar_string\n"; $s->[SAM_FLAG] |= 0x10 if ($has_coor && $is_export_rev); if($has_coor){ my $semap = ($t[EXPORT_SEMAP] ne '') ? $t[EXPORT_SEMAP] : 0; my $pemap = 0; if($is_paired) { $pemap = ($t[EXPORT_PEMAP] ne '') ? $t[EXPORT_PEMAP] : 0; # set `proper pair' bit if non-blank, non-zero PE alignment score: $s->[SAM_FLAG] |= 0x02 if ($pemap > 0); } $s->[SAM_MAPQ] = min(254,max($semap,$pemap)); } else { $s->[SAM_MAPQ] = 0; } # mate coordinate $s->[SAM_MRNM] = '*'; $s->[SAM_MPOS] = 0; $s->[SAM_ISIZE] = 0; # aux push(@$s, "BC:Z:$t[EXPORT_INDEX]") if ($t[EXPORT_INDEX]); if($has_coor){ # The export match descriptor differs slightly from the samtools match descriptor. # In order for the converted SAM files to be as compliant as possible, # we put the export match descriptor in optional field 'XD' rather than 'MD': push(@$s, "XD:Z:$matchDesc"); push(@$s, "SM:i:$t[EXPORT_SEMAP]") if ($t[EXPORT_SEMAP] ne ''); push(@$s, "AS:i:$t[EXPORT_PEMAP]") if ($is_paired and ($t[EXPORT_PEMAP] ne '')); } } # # the following code is taken from Richard Shaw's sorted2sam.pl file # sub reverse_compl_match_descriptor($) { # print "\nREVERSING THE MATCH DESCRIPTOR!\n"; my ($match_desc) = @_; my $rev_compl_match_desc = reverse($match_desc); $rev_compl_match_desc =~ tr/ACGT\^\$/TGCA\$\^/; # Unreverse the digits of numbers. $rev_compl_match_desc = join('', map {($_ =~ /\d+/) ? join('', reverse(split('', $_))) : $_} split(/(\d+)/, $rev_compl_match_desc)); return $rev_compl_match_desc; } sub match_desc_to_cigar($) { my ($match_desc) = @_; my @match_desc_parts = split(/(\^.*?\$)/, $match_desc); my $cigar_str = ''; my $cigar_del_ch = 'D'; my $cigar_ins_ch = 'I'; my $cigar_match_ch = 'M'; foreach my $match_desc_part (@match_desc_parts) { next if (!$match_desc_part); if ($match_desc_part =~ /^\^([ACGTN]+)\$$/) { # Deletion $cigar_str .= (length($1) . $cigar_del_ch); } elsif ($match_desc_part =~ /^\^(\d+)\$$/) { # Insertion $cigar_str .= ($1 . $cigar_ins_ch); } else { $cigar_str .= (match_desc_frag_length($match_desc_part) . $cigar_match_ch); } } return $cigar_str; } #------------------------------------------------------------------------------ sub match_desc_frag_length($) { my ($match_desc_str) = @_; my $len = 0; my @match_desc_fields = split(/([ACGTN]+)/, $match_desc_str); foreach my $match_desc_field (@match_desc_fields) { next if ($match_desc_field eq ''); $len += (($match_desc_field =~ /(\d+)/) ? $1 : length($match_desc_field)); } return $len; } # argument holds the command line sub write_header($;$;$) { my ($progname,$version,$cl) = @_; my $complete_header = ""; $complete_header .= "\@PG\tID:$progname\tVN:$version\tCL:$cl\n"; return $complete_header; } genometools-1.5.1/src/external/samtools-0.1.18/misc/interpolate_sam.pl000077500000000000000000000116041211610345200255240ustar00rootroot00000000000000#!/usr/bin/perl use strict; ###Builds interpolated pileup from SAM file ##@description counts bases between paired ends and piles up single end reads. ##@output, uses a #header for the RNAME and then the number of reads per base ##@author sm8@sanger.ac.uk, Stephen B. Montgomery ##@caveats ##Requires RNAME to have format as per example ## chromosome:NCBI36:18:1:76117153:1 ## supercontig::NT_113883:1:137703:1 ## clone::AC138827.3:1:149397:1 ##Expects simple CIGAR characters, M, I and D ##Expects SAM file to be sorted. ##Expects 0x0010 to mark second read in PE file (as has been the observed case from MAQ output) (important for line 77) ##Verify and read in SAM file my $sam_file = $ARGV[0]; if(!defined($sam_file)) { die("No sam file defined on arg 1"); } unless(-f $sam_file) { die("Sam file does not exist: $sam_file"); } open(SAM, $sam_file) || die("Cannot open sam file"); ##Globals my $current_location = ""; ##Current RNAME being processed my $current_size = 0; ##Size of sequence region being processed my $current_position = 1; ##Current base being processed my $open = 0; ##Number of open reads (PE reads that have not been closed) my %close = (); ##Hash of closing positions, when the current_position gets to this position it subtracts the ##contained value from those open and deletes the indexed position from the hash while (my $line = ) { my @tokens = split /\t/, $line; if ($current_location ne $tokens[2]) { ##Start a new sequence region for (my $i = $current_position; $i <= $current_size; $i++) { ##Close the previous sequence region if (defined($close{$i})) { $open = $open - $close{$i}; delete $close{$i}; } print $open . "\n"; } if ($current_location ne "") { print "\n"; } ##Initiate a new sequence region my @location_tokens = split /:/, $tokens[2]; $current_position = 1; $current_location = $tokens[2]; $current_size = $location_tokens[4]; $open = 0; %close = (); print "#" . $tokens[2] . "\n"; ##Print pileup to just before the first read (will be 0) for (my $current_position = 1; $current_position < $tokens[3]; $current_position++) { print $open . "\n"; } $current_position = $tokens[3]; } else { ##Sequence region already open if ($tokens[3] > $current_position) { ##If the new read's position is greater than the current position ##cycle through to catch up to the current position for (my $i = $current_position; $i < $tokens[3]; $i++) { if (defined($close{$i})) { $open = $open - $close{$i}; delete $close{$i}; } print $open . "\n"; } $current_position = $tokens[3]; } } $open++; ##Increment the number of open reads if (($tokens[1] & 0x0080 || $tokens[1] & 0x0040) && $tokens[1] & 0x0010 && $tokens[1] & 0x0002) { ##if second read of mate pair, add close condition $open--; my $parsed_cig = &parseCigar($tokens[5]); my $seq_region_end = $tokens[3] + $parsed_cig->{'M'} + $parsed_cig->{'D'} - 1; if (!defined($close{$seq_region_end + 1})) { $close{$seq_region_end + 1} = 0; } $close{$seq_region_end + 1} = $close{$seq_region_end + 1} + 1; } elsif (!($tokens[1] & 0x0001) || !($tokens[1] & 0x0002)) { ##if unpaired, add close condition my $parsed_cig = &parseCigar($tokens[5]); my $seq_region_end = $tokens[3] + $parsed_cig->{'M'} + $parsed_cig->{'D'} - 1; if (!defined($close{$seq_region_end + 1})) { $close{$seq_region_end + 1} = 0; } $close{$seq_region_end + 1} = $close{$seq_region_end + 1} + 1; } else { #do nothing } } for (my $i = $current_position; $i <= $current_size; $i++) { ##Finish up the last sequence region if (defined($close{$i})) { $open = $open - $close{$i}; delete $close{$i}; } print $open . "\n"; } print "\n"; close(SAM); exit(0); ##reads and tokenizes simple cigarline sub parseCigar() { my $cigar_line = shift; $cigar_line =~ s/([0-9]*[A-Z]{1})/$1\t/g; my @cigar_tokens = split /\t/, $cigar_line; my %parsed = ('M' => 0, 'I' => 0, 'D' => 0); my @events = (); for(my $i = 0; $i < scalar(@cigar_tokens); $i++) { if ($cigar_tokens[$i] =~ /([0-9]+)([A-Z]{1})/g) { if (!defined($parsed{$2})) { $parsed{$2} = 0; } my $nt = $2; if ($nt ne "M" && $nt ne "D" && $nt ne "I") { $nt = "M"; } $parsed{$nt} += $1; my %event_el = ("t" => $nt, "n" => $1); push @events, \%event_el; } } $parsed{'events'} = \@events; return \%parsed; } genometools-1.5.1/src/external/samtools-0.1.18/misc/maq2sam.c000066400000000000000000000107651211610345200235120ustar00rootroot00000000000000#include #include #include #include #include #include #define PACKAGE_VERSION "r439" //#define MAQ_LONGREADS #ifdef MAQ_LONGREADS # define MAX_READLEN 128 #else # define MAX_READLEN 64 #endif #define MAX_NAMELEN 36 #define MAQMAP_FORMAT_OLD 0 #define MAQMAP_FORMAT_NEW -1 #define PAIRFLAG_FF 0x01 #define PAIRFLAG_FR 0x02 #define PAIRFLAG_RF 0x04 #define PAIRFLAG_RR 0x08 #define PAIRFLAG_PAIRED 0x10 #define PAIRFLAG_DIFFCHR 0x20 #define PAIRFLAG_NOMATCH 0x40 #define PAIRFLAG_SW 0x80 typedef struct { uint8_t seq[MAX_READLEN]; /* the last base is the single-end mapping quality. */ uint8_t size, map_qual, info1, info2, c[2], flag, alt_qual; uint32_t seqid, pos; int dist; char name[MAX_NAMELEN]; } maqmap1_t; typedef struct { int format, n_ref; char **ref_name; uint64_t n_mapped_reads; maqmap1_t *mapped_reads; } maqmap_t; maqmap_t *maq_new_maqmap() { maqmap_t *mm = (maqmap_t*)calloc(1, sizeof(maqmap_t)); mm->format = MAQMAP_FORMAT_NEW; return mm; } void maq_delete_maqmap(maqmap_t *mm) { int i; if (mm == 0) return; for (i = 0; i < mm->n_ref; ++i) free(mm->ref_name[i]); free(mm->ref_name); free(mm->mapped_reads); free(mm); } maqmap_t *maqmap_read_header(gzFile fp) { maqmap_t *mm; int k, len; mm = maq_new_maqmap(); gzread(fp, &mm->format, sizeof(int)); if (mm->format != MAQMAP_FORMAT_NEW) { if (mm->format > 0) { fprintf(stderr, "** Obsolete map format is detected. Please use 'mapass2maq' command to convert the format.\n"); exit(3); } assert(mm->format == MAQMAP_FORMAT_NEW); } gzread(fp, &mm->n_ref, sizeof(int)); mm->ref_name = (char**)calloc(mm->n_ref, sizeof(char*)); for (k = 0; k != mm->n_ref; ++k) { gzread(fp, &len, sizeof(int)); mm->ref_name[k] = (char*)malloc(len * sizeof(char)); gzread(fp, mm->ref_name[k], len); } /* read number of mapped reads */ gzread(fp, &mm->n_mapped_reads, sizeof(uint64_t)); return mm; } void maq2tam_core(gzFile fp, const char *rg) { maqmap_t *mm; maqmap1_t mm1, *m1; int ret; m1 = &mm1; mm = maqmap_read_header(fp); while ((ret = gzread(fp, m1, sizeof(maqmap1_t))) == sizeof(maqmap1_t)) { int j, flag = 0, se_mapq = m1->seq[MAX_READLEN-1]; if (m1->flag) flag |= 1; if ((m1->flag&PAIRFLAG_PAIRED) || ((m1->flag&PAIRFLAG_SW) && m1->flag != 192)) flag |= 2; if (m1->flag == 192) flag |= 4; if (m1->flag == 64) flag |= 8; if (m1->pos&1) flag |= 0x10; if ((flag&1) && m1->dist != 0) { int c; if (m1->dist > 0) { if (m1->flag&(PAIRFLAG_FF|PAIRFLAG_RF)) c = 0; else if (m1->flag&(PAIRFLAG_FR|PAIRFLAG_RR)) c = 1; else c = m1->pos&1; } else { if (m1->flag&(PAIRFLAG_FF|PAIRFLAG_FR)) c = 0; else if (m1->flag&(PAIRFLAG_RF|PAIRFLAG_RR)) c = 1; else c = m1->pos&1; } if (c) flag |= 0x20; } if (m1->flag) { int l = strlen(m1->name); if (m1->name[l-2] == '/') { flag |= (m1->name[l-1] == '1')? 0x40 : 0x80; m1->name[l-2] = '\0'; } } printf("%s\t%d\t", m1->name, flag); printf("%s\t%d\t", mm->ref_name[m1->seqid], (m1->pos>>1)+1); if (m1->flag == 130) { int c = (int8_t)m1->seq[MAX_READLEN-1]; printf("%d\t", m1->alt_qual); if (c == 0) printf("%dM\t", m1->size); else { if (c > 0) printf("%dM%dI%dM\t", m1->map_qual, c, m1->size - m1->map_qual - c); else printf("%dM%dD%dM\t", m1->map_qual, -c, m1->size - m1->map_qual); } se_mapq = 0; // zero SE mapQ for reads aligned by SW } else { if (flag&4) printf("0\t*\t"); else printf("%d\t%dM\t", m1->map_qual, m1->size); } printf("*\t0\t%d\t", m1->dist); for (j = 0; j != m1->size; ++j) { if (m1->seq[j] == 0) putchar('N'); else putchar("ACGT"[m1->seq[j]>>6&3]); } putchar('\t'); for (j = 0; j != m1->size; ++j) putchar((m1->seq[j]&0x3f) + 33); putchar('\t'); if (rg) printf("RG:Z:%s\t", rg); if (flag&4) { // unmapped printf("MF:i:%d\n", m1->flag); } else { printf("MF:i:%d\t", m1->flag); if (m1->flag) printf("AM:i:%d\tSM:i:%d\t", m1->alt_qual, se_mapq); printf("NM:i:%d\tUQ:i:%d\tH0:i:%d\tH1:i:%d\n", m1->info1&0xf, m1->info2, m1->c[0], m1->c[1]); } } if (ret > 0) fprintf(stderr, "Truncated! Continue anyway.\n"); maq_delete_maqmap(mm); } int main(int argc, char *argv[]) { gzFile fp; if (argc == 1) { fprintf(stderr, "Version: %s\n", PACKAGE_VERSION); fprintf(stderr, "Usage: maq2sam []\n"); return 1; } fp = strcmp(argv[1], "-")? gzopen(argv[1], "r") : gzdopen(fileno(stdin), "r"); maq2tam_core(fp, argc > 2? argv[2] : 0); gzclose(fp); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/misc/md5.c000066400000000000000000000215631211610345200226340ustar00rootroot00000000000000/* * This code implements the MD5 message-digest algorithm. * The algorithm is due to Ron Rivest. This code was * written by Colin Plumb in 1993, no copyright is claimed. * This code is in the public domain; do with it what you wish. * * Equivalent code is available from RSA Data Security, Inc. * This code has been tested against that, and is equivalent, * except that you don't need to include two pages of legalese * with every copy. * * To compute the message digest of a chunk of bytes, declare an * MD5Context structure, pass it to MD5Init, call MD5Update as * needed on buffers full of bytes, and then call MD5Final, which * will fill a supplied 16-byte array with the digest. */ /* Brutally hacked by John Walker back from ANSI C to K&R (no prototypes) to maintain the tradition that Netfone will compile with Sun's original "cc". */ #include #include "md5.h" #ifndef HIGHFIRST #define byteReverse(buf, len) /* Nothing */ #else /* * Note: this code is harmless on little-endian machines. */ void byteReverse(buf, longs) unsigned char *buf; unsigned longs; { uint32_t t; do { t = (uint32_t) ((unsigned) buf[3] << 8 | buf[2]) << 16 | ((unsigned) buf[1] << 8 | buf[0]); *(uint32_t *) buf = t; buf += 4; } while (--longs); } #endif void MD5Transform(uint32_t buf[4], uint32_t in[16]); /* * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious * initialization constants. */ void MD5Init(ctx) struct MD5Context *ctx; { ctx->buf[0] = 0x67452301; ctx->buf[1] = 0xefcdab89; ctx->buf[2] = 0x98badcfe; ctx->buf[3] = 0x10325476; ctx->bits[0] = 0; ctx->bits[1] = 0; } /* * Update context to reflect the concatenation of another buffer full * of bytes. */ void MD5Update(ctx, buf, len) struct MD5Context *ctx; unsigned char *buf; unsigned len; { uint32_t t; /* Update bitcount */ t = ctx->bits[0]; if ((ctx->bits[0] = t + ((uint32_t) len << 3)) < t) ctx->bits[1]++; /* Carry from low to high */ ctx->bits[1] += len >> 29; t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ /* Handle any leading odd-sized chunks */ if (t) { unsigned char *p = (unsigned char *) ctx->in + t; t = 64 - t; if (len < t) { memcpy(p, buf, len); return; } memcpy(p, buf, t); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32_t *) ctx->in); buf += t; len -= t; } /* Process data in 64-byte chunks */ while (len >= 64) { memcpy(ctx->in, buf, 64); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32_t *) ctx->in); buf += 64; len -= 64; } /* Handle any remaining bytes of data. */ memcpy(ctx->in, buf, len); } /* * Final wrapup - pad to 64-byte boundary with the bit pattern * 1 0* (64-bit count of bits processed, MSB-first) */ void MD5Final(digest, ctx) unsigned char digest[16]; struct MD5Context *ctx; { unsigned count; unsigned char *p; /* Compute number of bytes mod 64 */ count = (ctx->bits[0] >> 3) & 0x3F; /* Set the first char of padding to 0x80. This is safe since there is always at least one byte free */ p = ctx->in + count; *p++ = 0x80; /* Bytes of padding needed to make 64 bytes */ count = 64 - 1 - count; /* Pad out to 56 mod 64 */ if (count < 8) { /* Two lots of padding: Pad the first block to 64 bytes */ memset(p, 0, count); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32_t *) ctx->in); /* Now fill the next block with 56 bytes */ memset(ctx->in, 0, 56); } else { /* Pad block to 56 bytes */ memset(p, 0, count - 8); } byteReverse(ctx->in, 14); /* Append length in bits and transform */ ((uint32_t *) ctx->in)[14] = ctx->bits[0]; ((uint32_t *) ctx->in)[15] = ctx->bits[1]; MD5Transform(ctx->buf, (uint32_t *) ctx->in); byteReverse((unsigned char *) ctx->buf, 4); memcpy(digest, ctx->buf, 16); memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ } /* The four core functions - F1 is optimized somewhat */ /* #define F1(x, y, z) (x & y | ~x & z) */ #define F1(x, y, z) (z ^ (x & (y ^ z))) #define F2(x, y, z) F1(z, x, y) #define F3(x, y, z) (x ^ y ^ z) #define F4(x, y, z) (y ^ (x | ~z)) /* This is the central step in the MD5 algorithm. */ #define MD5STEP(f, w, x, y, z, data, s) \ ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) /* * The core of the MD5 algorithm, this alters an existing MD5 hash to * reflect the addition of 16 longwords of new data. MD5Update blocks * the data and converts bytes into longwords for this routine. */ void MD5Transform(buf, in) uint32_t buf[4]; uint32_t in[16]; { register uint32_t a, b, c, d; a = buf[0]; b = buf[1]; c = buf[2]; d = buf[3]; MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); buf[0] += a; buf[1] += b; buf[2] += c; buf[3] += d; } /* lh3: the following code is added by me */ #ifdef MD5SUM_MAIN #include #include #include #define HEX_STR "0123456789abcdef" static void md5_one(const char *fn) { unsigned char buf[4096], digest[16]; MD5_CTX md5; int l; FILE *fp; fp = strcmp(fn, "-")? fopen(fn, "r") : stdin; if (fp == 0) { fprintf(stderr, "md5sum: %s: No such file or directory\n", fn); exit(1); } MD5Init(&md5); while ((l = fread(buf, 1, 4096, fp)) > 0) MD5Update(&md5, buf, l); MD5Final(digest, &md5); if (fp != stdin) fclose(fp); for (l = 0; l < 16; ++l) printf("%c%c", HEX_STR[digest[l]>>4&0xf], HEX_STR[digest[l]&0xf]); printf(" %s\n", fn); } int main(int argc, char *argv[]) { int i; if (argc == 1) md5_one("-"); else for (i = 1; i < argc; ++i) md5_one(argv[i]); return 0; } #endif genometools-1.5.1/src/external/samtools-0.1.18/misc/md5.h000066400000000000000000000032451211610345200226360ustar00rootroot00000000000000/* This file is adapted from a program in this page: http://www.fourmilab.ch/md5/ The original source code does not work on 64-bit machines due to the wrong typedef "uint32". I also added prototypes. -lh3 */ #ifndef MD5_H #define MD5_H /* The following tests optimise behaviour on little-endian machines, where there is no need to reverse the byte order of 32 bit words in the MD5 computation. By default, HIGHFIRST is defined, which indicates we're running on a big-endian (most significant byte first) machine, on which the byteReverse function in md5.c must be invoked. However, byteReverse is coded in such a way that it is an identity function when run on a little-endian machine, so calling it on such a platform causes no harm apart from wasting time. If the platform is known to be little-endian, we speed things up by undefining HIGHFIRST, which defines byteReverse as a null macro. Doing things in this manner insures we work on new platforms regardless of their byte order. */ #define HIGHFIRST #if __LITTLE_ENDIAN__ != 0 #undef HIGHFIRST #endif #include struct MD5Context { uint32_t buf[4]; uint32_t bits[2]; unsigned char in[64]; }; void MD5Init(struct MD5Context *ctx); void MD5Update(struct MD5Context *ctx, unsigned char *buf, unsigned len); void MD5Final(unsigned char digest[16], struct MD5Context *ctx); /* * This is needed to make RSAREF happy on some MS-DOS compilers. */ typedef struct MD5Context MD5_CTX; /* Define CHECK_HARDWARE_PROPERTIES to have main,c verify byte order and uint32_t settings. */ #define CHECK_HARDWARE_PROPERTIES #endif /* !MD5_H */ genometools-1.5.1/src/external/samtools-0.1.18/misc/md5fa.c000066400000000000000000000030161211610345200231340ustar00rootroot00000000000000#include #include #include "md5.h" #include "kseq.h" #define HEX_STR "0123456789abcdef" KSEQ_INIT(gzFile, gzread) static void md5_one(const char *fn) { MD5_CTX md5_one, md5_all; int l, i, k; gzFile fp; kseq_t *seq; unsigned char unordered[16], digest[16]; for (l = 0; l < 16; ++l) unordered[l] = 0; fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); if (fp == 0) { fprintf(stderr, "md5fa: %s: No such file or directory\n", fn); exit(1); } MD5Init(&md5_all); seq = kseq_init(fp); while ((l = kseq_read(seq)) >= 0) { for (i = k = 0; i < seq->seq.l; ++i) { if (islower(seq->seq.s[i])) seq->seq.s[k++] = toupper(seq->seq.s[i]); else if (isupper(seq->seq.s[i])) seq->seq.s[k++] = seq->seq.s[i]; } MD5Init(&md5_one); MD5Update(&md5_one, (unsigned char*)seq->seq.s, k); MD5Final(digest, &md5_one); for (l = 0; l < 16; ++l) { printf("%c%c", HEX_STR[digest[l]>>4&0xf], HEX_STR[digest[l]&0xf]); unordered[l] ^= digest[l]; } printf(" %s %s\n", fn, seq->name.s); MD5Update(&md5_all, (unsigned char*)seq->seq.s, k); } MD5Final(digest, &md5_all); kseq_destroy(seq); for (l = 0; l < 16; ++l) printf("%c%c", HEX_STR[digest[l]>>4&0xf], HEX_STR[digest[l]&0xf]); printf(" %s >ordered\n", fn); for (l = 0; l < 16; ++l) printf("%c%c", HEX_STR[unordered[l]>>4&0xf], HEX_STR[unordered[l]&0xf]); printf(" %s >unordered\n", fn); } int main(int argc, char *argv[]) { int i; if (argc == 1) md5_one("-"); else for (i = 1; i < argc; ++i) md5_one(argv[i]); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/misc/novo2sam.pl000077500000000000000000000135451211610345200241100ustar00rootroot00000000000000#!/usr/bin/perl -w # Contact: lh3 # Version: 0.1.3 #Modified by Zayed Albertyn(zayed.albertyn@gmail.com) & Colin Hercus(colin@novocraft.com) #use strict; #use warnings; use Data::Dumper; use Getopt::Std; &novo2sam; exit; sub mating { my ($s1, $s2) = @_; my $isize = 0; if ($s1->[2] ne '*' && $s1->[2] eq $s2->[2]) { # then calculate $isize my $x1 = ($s1->[1] & 0x10)? $s1->[3] + length($s1->[9]) : $s1->[3]; my $x2 = ($s2->[1] & 0x10)? $s2->[3] + length($s2->[9]) : $s2->[3]; $isize = $x2 - $x1; } # update mate coordinate if ($s2->[2] ne '*') { @$s1[6..8] = (($s2->[2] eq $s1->[2])? "=" : $s2->[2], $s2->[3], $isize); $s1->[1] |= 0x20 if ($s2->[1] & 0x10); } else { $s1->[1] |= 0x8; } if ($s1->[2] ne '*') { @$s2[6..8] = (($s1->[2] eq $s2->[2])? "=" : $s1->[2], $s1->[3], -$isize); $s2->[1] |= 0x20 if ($s1->[1] & 0x10); } else { $s2->[1] |= 0x8; } } sub novo2sam { my %opts = (); getopts("p", \%opts); die("Usage: novo2sam.pl [-p] \n") if (@ARGV == 0); my $is_paired = defined($opts{p}); # core loop my @s1 = (); my @s2 = (); my ($s_last, $s_curr) = (\@s1, \@s2); while (<>) { next if (/^#/); next if (/(QC|NM)\s*$/ || /(R\s+\d+)\s*$/); &novo2sam_aux($_, $s_curr, $is_paired); if (@$s_last != 0 && $s_last->[0] eq $s_curr->[0]) { &mating($s_last, $s_curr); print join("\t", @$s_last), "\n"; print join("\t", @$s_curr), "\n"; @$s_last = (); @$s_curr = (); } else { print join("\t", @$s_last), "\n" if (@$s_last != 0); my $s = $s_last; $s_last = $s_curr; $s_curr = $s; } } print join("\t", @$s_last), "\n" if (@$s_last != 0); } sub novo2sam_aux { my ($line, $s, $is_paired) = @_; chomp($line); my @t = split(/\s+/, $line); my @variations = @t[13 .. $#t]; @$s = (); return if ($t[4] ne 'U'); my $len = length($t[2]); # read name $s->[0] = substr($t[0], 1); $s->[0] =~ s/\/[12]$//g; # initial flag (will be updated later) $s->[1] = 0; $s->[1] |= 1 | 1<<($t[1] eq 'L'? 6 : 7); $s->[1] |= 2 if ($t[10] eq '.'); # read & quality if ($t[9] eq 'R') { $s->[9] = reverse($t[2]); $s->[10] = reverse($t[3]); $s->[9] =~ tr/ACGTRYMKWSNacgtrymkwsn/TGCAYRKMWSNtgcayrkmwsn/; } else { $s->[9] = $t[2]; $s->[10] = $t[3]; } # cigar my $cigarstring =""; if (scalar @variations ==0 ) { $s->[5] = $len . "M"; # IMPORTANT: this cigar is not correct for gapped alignment } else { #convert to correct CIGAR my $tmpstr = join" ",@variations ; if ( $tmpstr=~ /\+|\-/ ) { $cigarstring = cigar_method($line,\@variations,$len); $s->[5]=$cigarstring; } else { $s->[5]=$len. "M"; } } # coor $s->[2] = substr($t[7], 1); $s->[3] = $t[8]; $s->[1] |= 0x10 if ($t[9] eq 'R'); # mapQ $s->[4] = $t[5] > $t[6]? $t[5] : $t[6]; # mate coordinate $s->[6] = '*'; $s->[7] = $s->[8] = 0; # aux push(@$s, "NM:i:".(@t-13)); my $md = ''; $md = mdtag($md,$line,\@variations,$len); push(@$s, "MD:Z:$md"); } sub mdtag { my $oldmd = shift; my $line = shift; my $ref =shift; my $rdlen = shift; my @variations = @$ref; my $string=""; my $mdtag=""; my $t=1; my $q=1; my $deleteflag=0; my $len =0; foreach $string (@variations) { my ($indeltype,$insert) = indeltype($string); if ($indeltype eq "+") { $len = length ($insert); $q+=$len; next; } my $pos = $1 if $string =~ /^(\d+)/; $len = $pos - $t; if ($len !=0 || ($deleteflag eq 1 && $indeltype eq ">")) { $mdtag.=$len; } $t+=$len; $q+=$len; if ($indeltype eq ">") { $mdtag.=$insert; $deleteflag=0; $t+=1; $q+=1; } if ($indeltype eq "-") { my $deletedbase = $2 if $string =~ /(\d+)\-([A-Za-z]+)/; if ($deleteflag == 0 ) { $mdtag.="^"; } $mdtag.=$deletedbase; $deleteflag=1; $t+=1; } } $len = $rdlen - $q + 1; if ($len > 0) { $mdtag.="$len"; } # print "In:$line\n"; # print "MD: OLD => NEW\nMD: $oldmd => $mdtag\n\n"; return $mdtag; } sub indeltype { my $string = shift; my $insert=""; my $indeltype; if ($string =~ /([A-Za-z]+)\>/) { $indeltype=">"; $insert=$1; } elsif ($string =~ /\-/) { $indeltype="-"; } elsif ($string =~ /\+([A-Za-z]+)/) { $indeltype="+"; $insert=$1; } return ($indeltype,$insert); } sub cigar_method { my $line = shift; my $ref =shift; my $rdlen = shift; my @variations = @$ref; my $string=""; my $type=""; my $t =1; my $q=1; my $indeltype=""; my $cigar= ""; my $insert = ""; my $len=0; my @cig=(); foreach $string (@variations) { next if $string =~ />/; my $pos = $1 if $string =~ /^(\d+)/; if ($string =~ /\+([A-Za-z]+)/) { $indeltype="+"; $insert = $1; }elsif ($string =~ /\-([A-Za-z]+)/) { $indeltype="-"; $insert = $1; } #print "$pos $indeltype $insert $t $q\n"; $len = $pos - $t; if ( $len > 0) { $cigar.=$len."M"; push(@cig,$len."M"); } $t+=$len; $q+=$len; if ($indeltype eq "-") { $cigar.="D"; push(@cig,"D"); $t++; } if ($indeltype eq "+") { $len = length ($insert); if ($len == 1) { $cigar.="I"; push(@cig,"I"); } if ($len > 1) { $cigar.=$len."I"; push(@cig,$len."I") } $q+=$len; } $insert=""; } $len= $rdlen - $q + 1; if ($len > 0) { $cigar.=$len."M"; push(@cig,$len."M"); } $cigar = newcigar($cigar,'D'); $cigar = newcigar($cigar,'I'); #print "$line\n"; #print "c CIGAR:\t$cigar\n\n"; return $cigar; } sub newcigar { my $cigar = shift; my $char = shift; my $new = ""; my $copy = $cigar; #print "$cigar\n"; $copy =~ s/^($char+)/$1;/g; #print "$copy\n"; $copy =~ s/([^0-9$char])($char+)/$1;$2;/g; #print "$copy\n"; my @parts = split(/;/,$copy); my $el=""; foreach $el (@parts) { #print "$el\n"; if ($el =~ /^$char+$/) { $new.=length($el).$char; }else { $new.=$el; } } return $new; } genometools-1.5.1/src/external/samtools-0.1.18/misc/psl2sam.pl000077500000000000000000000037461211610345200237270ustar00rootroot00000000000000#!/usr/bin/perl -w # Author: lh3 # This script calculates a score using the BLAST scoring # system. However, I am not sure how to count gap opens and gap # extensions. It seems to me that column 5-8 are not what I am # after. This script counts gaps from the last three columns. It does # not generate reference skip (N) in the CIGAR as it is not easy to # directly tell which gaps correspond to introns. use strict; use warnings; use Getopt::Std; my %opts = (a=>1, b=>3, q=>5, r=>2); getopts('a:b:q:r:', \%opts); die("Usage: psl2sam.pl [-a $opts{a}] [-b $opts{b}] [-q $opts{q}] [-r $opts{r}] \n") if (@ARGV == 0 && -t STDIN); my @stack; my $last = ''; my ($a, $b, $q, $r) = ($opts{a}, $opts{b}, $opts{q}, $opts{r}); while (<>) { next unless (/^\d/); my @t = split; my @s; my $cigar = ''; if ($t[8] eq '-') { my $tmp = $t[11]; $t[11] = $t[10] - $t[12]; $t[12] = $t[10] - $tmp; } @s[0..4] = ($t[9], (($t[8] eq '+')? 0 : 16), $t[13], $t[15]+1, 0); @s[6..10] = ('*', 0, 0, '*', '*'); $cigar .= $t[11].'H' if ($t[11]); # 5'-end clipping my @x = split(',', $t[18]); my @y = split(',', $t[19]); my @z = split(',', $t[20]); my ($y0, $z0) = ($y[0], $z[0]); my ($gap_open, $gap_ext) = (0, 0, 0); for (1 .. $t[17]-1) { my $ly = $y[$_] - $y[$_-1] - $x[$_-1]; my $lz = $z[$_] - $z[$_-1] - $x[$_-1]; if ($ly < $lz) { # del: the reference gap is longer ++$gap_open; $gap_ext += $lz - $ly; $cigar .= ($y[$_] - $y0) . 'M'; $cigar .= ($lz - $ly) . 'D'; ($y0, $z0) = ($y[$_], $z[$_]); } elsif ($lz < $ly) { # ins: the query gap is longer ++$gap_open; $gap_ext += $ly - $lz; $cigar .= ($z[$_] - $z0) . 'M'; $cigar .= ($ly - $lz) . 'I'; ($y0, $z0) = ($y[$_], $z[$_]); } } $cigar .= ($t[12] - $y0) . 'M'; $cigar .= ($t[10] - $t[12]).'H' if ($t[10] != $t[12]); # 3'-end clipping $s[5] = $cigar; my $score = $a * $t[0] - $b * $t[1] - $q * $gap_open - $r * $gap_ext; $score = 0 if ($score < 0); $s[11] = "AS:i:$score"; print join("\t", @s), "\n"; } genometools-1.5.1/src/external/samtools-0.1.18/misc/sam2vcf.pl000077500000000000000000000173111211610345200237000ustar00rootroot00000000000000#!/usr/bin/perl -w # # VCF specs: http://www.1000genomes.org/wiki/doku.php?id=1000_genomes:analysis:vcf3.3 # # Contact: pd3@sanger # Version: 2010-04-23 use strict; use warnings; use Carp; my $opts = parse_params(); do_pileup_to_vcf($opts); exit; #--------------- sub error { my (@msg) = @_; if ( scalar @msg ) { croak(@msg); } die "Usage: sam2vcf.pl [OPTIONS] < in.pileup > out.vcf\n", "Options:\n", " -h, -?, --help This help message.\n", " -i, --indels-only Ignore SNPs.\n", " -r, --refseq The reference sequence, required when indels are present.\n", " -R, --keep-ref Print reference alleles as well.\n", " -s, --snps-only Ignore indels.\n", " -t, --column-title The column title.\n", "\n"; } sub parse_params { my %opts = (); $opts{fh_in} = *STDIN; $opts{fh_out} = *STDOUT; while (my $arg=shift(@ARGV)) { if ( $arg eq '-R' || $arg eq '--keep-ref' ) { $opts{keep_ref}=1; next; } if ( $arg eq '-r' || $arg eq '--refseq' ) { $opts{refseq}=shift(@ARGV); next; } if ( $arg eq '-t' || $arg eq '--column-title' ) { $opts{title}=shift(@ARGV); next; } if ( $arg eq '-s' || $arg eq '--snps-only' ) { $opts{snps_only}=1; next; } if ( $arg eq '-i' || $arg eq '--indels-only' ) { $opts{indels_only}=1; next; } if ( $arg eq '-?' || $arg eq '-h' || $arg eq '--help' ) { error(); } error("Unknown parameter \"$arg\". Run -h for help.\n"); } return \%opts; } sub iupac_to_gtype { my ($ref,$base) = @_; my %iupac = ( 'K' => ['G','T'], 'M' => ['A','C'], 'S' => ['C','G'], 'R' => ['A','G'], 'W' => ['A','T'], 'Y' => ['C','T'], ); if ( !exists($iupac{$base}) ) { if ( $base ne 'A' && $base ne 'C' && $base ne 'G' && $base ne 'T' ) { error("FIXME: what is this [$base]?\n"); } if ( $ref eq $base ) { return ('.','0/0'); } return ($base,'1/1'); } my $gt = $iupac{$base}; if ( $$gt[0] eq $ref ) { return ($$gt[1],'0/1'); } elsif ( $$gt[1] eq $ref ) { return ($$gt[0],'0/1'); } return ("$$gt[0],$$gt[1]",'1/2'); } sub parse_indel { my ($cons) = @_; if ( $cons=~/^-/ ) { my $len = length($'); return "D$len"; } elsif ( $cons=~/^\+/ ) { return "I$'"; } elsif ( $cons eq '*' ) { return undef; } error("FIXME: could not parse [$cons]\n"); } # An example of the pileup format: # 1 3000011 C C 32 0 98 1 ^~, A # 1 3002155 * +T/+T 53 119 52 5 +T * 4 1 0 # 1 3003094 * -TT/-TT 31 164 60 11 -TT * 5 6 0 # 1 3073986 * */-AAAAAAAAAAAAAA 3 3 45 9 * -AAAAAAAAAAAAAA 7 2 0 # sub do_pileup_to_vcf { my ($opts) = @_; my $fh_in = $$opts{fh_in}; my $fh_out = $$opts{fh_out}; my ($prev_chr,$prev_pos,$prev_ref); my $refseq; my $ignore_indels = $$opts{snps_only} ? 1 : 0; my $ignore_snps = $$opts{indels_only} ? 1 : 0; my $keep_ref = $$opts{keep_ref} ? 1 : 0; my $title = exists($$opts{title}) ? $$opts{title} : 'data'; print $fh_out qq[##fileformat=VCFv3.3\n], qq[##INFO=DP,1,Integer,"Total Depth"\n], qq[##FORMAT=GT,1,String,"Genotype"\n], qq[##FORMAT=GQ,1,Integer,"Genotype Quality"\n], qq[##FORMAT=DP,1,Integer,"Read Depth"\n], qq[#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT\t$title\n] ; while (my $line=<$fh_in>) { chomp($line); my (@items) = split(/\t/,$line); if ( scalar @items<8 ) { error("\nToo few columns, does not look like output of 'samtools pileup -c': $line\n"); } my ($chr,$pos,$ref,$cons,$cons_qual,$snp_qual,$rms_qual,$depth,$a1,$a2) = @items; $ref = uc($ref); $cons = uc($cons); my ($alt,$gt); if ( $ref eq '*' ) { # An indel is involved. if ( $ignore_indels ) { $prev_ref = $ref; $prev_pos = $pos; $prev_chr = $chr; next; } if (!defined $prev_chr || $chr ne $prev_chr || $pos ne $prev_pos) { if ( !$$opts{refseq} ) { error("Cannot do indels without the reference.\n"); } if ( !$refseq ) { $refseq = Fasta->new(file=>$$opts{refseq}); } $ref = $refseq->get_base($chr,$pos); $ref = uc($ref); } else { $ref = $prev_ref; } # One of the alleles can be a reference and it can come in arbitrary order. In some # cases */* can be encountered. In such a case, look in the additional columns. my ($al1,$al2) = split(m{/},$cons); if ( $al1 eq $al2 && $al1 eq '*' ) { $al1=$a1; $al2=$a2; } my $alt1 = parse_indel($al1); my $alt2 = parse_indel($al2); if ( !$alt1 && !$alt2 ) { error("FIXME: could not parse indel:\n", $line); } if ( !$alt1 ) { $alt=$alt2; $gt='0/1'; } elsif ( !$alt2 ) { $alt=$alt1; $gt='0/1'; } elsif ( $alt1 eq $alt2 ) { $alt="$alt1"; $gt='1/1'; } else { $alt="$alt1,$alt2"; $gt='1/2'; } } else { if ( $ignore_snps || (!$keep_ref && $ref eq $cons) ) { $prev_ref = $ref; $prev_pos = $pos; $prev_chr = $chr; next; } # SNP ($alt,$gt) = iupac_to_gtype($ref,$cons); } print $fh_out "$chr\t$pos\t.\t$ref\t$alt\t$snp_qual\t0\tDP=$depth\tGT:GQ:DP\t$gt:$cons_qual:$depth\n"; $prev_ref = $ref; $prev_pos = $pos; $prev_chr = $chr; } } #------------- Fasta -------------------- # # Uses samtools to get a requested base from a fasta file. For efficiency, preloads # a chunk to memory. The size of the cached sequence can be controlled by the 'size' # parameter. # package Fasta; use strict; use warnings; use Carp; sub Fasta::new { my ($class,@args) = @_; my $self = {@args}; bless $self, ref($class) || $class; if ( !$$self{file} ) { $self->throw(qq[Missing the parameter "file"\n]); } $$self{chr} = undef; $$self{from} = undef; $$self{to} = undef; if ( !$$self{size} ) { $$self{size}=10_000_000; } bless $self, ref($class) || $class; return $self; } sub read_chunk { my ($self,$chr,$pos) = @_; my $to = $pos + $$self{size}; my $cmd = "samtools faidx $$self{file} $chr:$pos-$to"; my @out = `$cmd`; if ( $? ) { $self->throw("$cmd: $!"); } my $line = shift(@out); if ( !($line=~/^>$chr:(\d+)-(\d+)/) ) { $self->throw("Could not parse: $line"); } $$self{chr} = $chr; $$self{from} = $1; $$self{to} = $2; my $chunk = ''; while ($line=shift(@out)) { chomp($line); $chunk .= $line; } $$self{chunk} = $chunk; return; } sub get_base { my ($self,$chr,$pos) = @_; if ( !$$self{chr} || $chr ne $$self{chr} || $pos<$$self{from} || $pos>$$self{to} ) { $self->read_chunk($chr,$pos); } my $idx = $pos - $$self{from}; return substr($$self{chunk},$idx,1); } sub throw { my ($self,@msg) = @_; croak(@msg); } genometools-1.5.1/src/external/samtools-0.1.18/misc/samtools.pl000077500000000000000000000337331211610345200242060ustar00rootroot00000000000000#!/usr/bin/perl -w # Author: lh3 use strict; use warnings; use Getopt::Std; my $version = '0.3.3'; &usage if (@ARGV < 1); my $command = shift(@ARGV); my %func = (showALEN=>\&showALEN, pileup2fq=>\&pileup2fq, varFilter=>\&varFilter, plp2vcf=>\&plp2vcf, unique=>\&unique, uniqcmp=>\&uniqcmp, sra2hdr=>\&sra2hdr, sam2fq=>\&sam2fq); die("Unknown command \"$command\".\n") if (!defined($func{$command})); &{$func{$command}}; exit(0); # # showALEN # sub showALEN { die(qq/Usage: samtools.pl showALEN \n/) if (@ARGV == 0 && -t STDIN); while (<>) { my @t = split; next if (/^\@/ || @t < 11); my $l = 0; $_ = $t[5]; s/(\d+)[MI]/$l+=$1/eg; print join("\t", @t[0..5]), "\t$l\t", join("\t", @t[6..$#t]), "\n"; } } # # varFilter # # # Filtration code: # # d low depth # D high depth # W too many SNPs in a window (SNP only) # G close to a high-quality indel (SNP only) # Q low RMS mapping quality (SNP only) # g close to another indel with higher quality (indel only) # s low SNP quality (SNP only) # i low indel quality (indel only) sub varFilter { my %opts = (d=>3, D=>100, l=>30, Q=>25, q=>10, G=>25, s=>100, w=>10, W=>10, N=>2, p=>undef, S=>'', i=>''); getopts('pq:d:D:l:Q:w:W:N:G:S:i:', \%opts); die(qq/ Usage: samtools.pl varFilter [options] Options: -Q INT minimum RMS mapping quality for SNPs [$opts{Q}] -q INT minimum RMS mapping quality for gaps [$opts{q}] -d INT minimum read depth [$opts{d}] -D INT maximum read depth [$opts{D}] -S INT minimum SNP quality [$opts{S}] -i INT minimum indel quality [$opts{i}] -G INT min indel score for nearby SNP filtering [$opts{G}] -w INT SNP within INT bp around a gap to be filtered [$opts{w}] -W INT window size for filtering dense SNPs [$opts{W}] -N INT max number of SNPs in a window [$opts{N}] -l INT window size for filtering adjacent gaps [$opts{l}] -p print filtered variants \n/) if (@ARGV == 0 && -t STDIN); # calculate the window size my ($ol, $ow, $oW) = ($opts{l}, $opts{w}, $opts{W}); my $max_dist = $ol > $ow? $ol : $ow; $max_dist = $oW if ($max_dist < $oW); # the core loop my @staging; # (indel_filtering_score, flt_tag) while (<>) { my @t = split; next if (uc($t[2]) eq uc($t[3]) || $t[3] eq '*/*'); # skip non-var sites # clear the out-of-range elements while (@staging) { # Still on the same chromosome and the first element's window still affects this position? last if ($staging[0][3] eq $t[0] && $staging[0][4] + $staging[0][2] + $max_dist >= $t[1]); varFilter_aux(shift(@staging), $opts{p}); # calling a function is a bit slower, not much } my ($flt, $score) = (0, -1); # first a simple filter if ($t[7] < $opts{d}) { $flt = 2; } elsif ($t[7] > $opts{D}) { $flt = 3; } if ($t[2] eq '*') { # an indel if ($opts{i} && $opts{i}>$t[5]) { $flt = 8; } } elsif ($opts{S} && $opts{S}>$t[5]) { $flt = 7; } # SNP # site dependent filters my $len=0; if ($flt == 0) { if ($t[2] eq '*') { # an indel # If deletion, remember the length of the deletion my ($a,$b) = split(m{/},$t[3]); my $alen = length($a) - 1; my $blen = length($b) - 1; if ( $alen>$blen ) { if ( substr($a,0,1) eq '-' ) { $len=$alen; } } elsif ( substr($b,0,1) eq '-' ) { $len=$blen; } $flt = 1 if ($t[6] < $opts{q}); # filtering SNPs if ($t[5] >= $opts{G}) { for my $x (@staging) { # Is it a SNP and is it outside the SNP filter window? next if ($x->[0] >= 0 || $x->[4] + $x->[2] + $ow < $t[1]); $x->[1] = 5 if ($x->[1] == 0); } } # calculate the filtering score (different from indel quality) $score = $t[5]; $score += $opts{s} * $t[10] if ($t[8] ne '*'); $score += $opts{s} * $t[11] if ($t[9] ne '*'); # check the staging list for indel filtering for my $x (@staging) { # Is it a SNP and is it outside the gap filter window next if ($x->[0] < 0 || $x->[4] + $x->[2] + $ol < $t[1]); if ($x->[0] < $score) { $x->[1] = 6; } else { $flt = 6; last; } } } else { # a SNP $flt = 1 if ($t[6] < $opts{Q}); # check adjacent SNPs my $k = 1; for my $x (@staging) { ++$k if ($x->[0] < 0 && $x->[4] + $x->[2] + $oW >= $t[1] && ($x->[1] == 0 || $x->[1] == 4 || $x->[1] == 5)); } # filtering is necessary if ($k > $opts{N}) { $flt = 4; for my $x (@staging) { $x->[1] = 4 if ($x->[0] < 0 && $x->[4] + $x->[2] + $oW >= $t[1] && $x->[1] == 0); } } else { # then check gap filter for my $x (@staging) { next if ($x->[0] < 0 || $x->[4] + $x->[2] + $ow < $t[1]); if ($x->[0] >= $opts{G}) { $flt = 5; last; } } } } } push(@staging, [$score, $flt, $len, @t]); } # output the last few elements in the staging list while (@staging) { varFilter_aux(shift @staging, $opts{p}); } } sub varFilter_aux { my ($first, $is_print) = @_; if ($first->[1] == 0) { print join("\t", @$first[3 .. @$first-1]), "\n"; } elsif ($is_print) { print STDERR join("\t", substr("UQdDWGgsiX", $first->[1], 1), @$first[3 .. @$first-1]), "\n"; } } # # pileup2fq # sub pileup2fq { my %opts = (d=>3, D=>255, Q=>25, G=>25, l=>10); getopts('d:D:Q:G:l:', \%opts); die(qq/ Usage: samtools.pl pileup2fq [options] Options: -d INT minimum depth [$opts{d}] -D INT maximum depth [$opts{D}] -Q INT min RMS mapQ [$opts{Q}] -G INT minimum indel score [$opts{G}] -l INT indel filter winsize [$opts{l}]\n /) if (@ARGV == 0 && -t STDIN); my ($last_chr, $seq, $qual, @gaps, $last_pos); my $_Q = $opts{Q}; my $_d = $opts{d}; my $_D = $opts{D}; $last_chr = ''; while (<>) { my @t = split; if ($last_chr ne $t[0]) { &p2q_post_process($last_chr, \$seq, \$qual, \@gaps, $opts{l}) if ($last_chr); $last_chr = $t[0]; $last_pos = 0; $seq = ''; $qual = ''; @gaps = (); } if ($t[1] - $last_pos != 1) { $seq .= 'n' x ($t[1] - $last_pos - 1); $qual .= '!' x ($t[1] - $last_pos - 1); } if ($t[2] eq '*') { push(@gaps, $t[1]) if ($t[5] >= $opts{G}); } else { $seq .= ($t[6] >= $_Q && $t[7] >= $_d && $t[7] <= $_D)? uc($t[3]) : lc($t[3]); my $q = $t[4] + 33; $q = 126 if ($q > 126); $qual .= chr($q); } $last_pos = $t[1]; } &p2q_post_process($last_chr, \$seq, \$qual, \@gaps, $opts{l}); } sub p2q_post_process { my ($chr, $seq, $qual, $gaps, $l) = @_; &p2q_filter_gaps($seq, $gaps, $l); print "\@$chr\n"; &p2q_print_str($seq); print "+\n"; &p2q_print_str($qual); } sub p2q_filter_gaps { my ($seq, $gaps, $l) = @_; for my $g (@$gaps) { my $x = $g > $l? $g - $l : 0; substr($$seq, $x, $l + $l) = lc(substr($$seq, $x, $l + $l)); } } sub p2q_print_str { my ($s) = @_; my $l = length($$s); for (my $i = 0; $i < $l; $i += 60) { print substr($$s, $i, 60), "\n"; } } # # sam2fq # sub sam2fq { my %opts = (n=>20, p=>''); getopts('n:p:', \%opts); die("Usage: samtools.pl sam2fq [-n 20] [-p ] \n") if (@ARGV == 0 && -t STDIN); if ($opts{p} && $opts{n} > 1) { my $pre = $opts{p}; my @fh; for (0 .. $opts{n}-1) { open($fh[$_], sprintf("| gzip > $pre.%.3d.fq.gz", $_)) || die; } my $i = 0; while (<>) { next if (/^@/); chomp; my @t = split("\t"); next if ($t[9] eq '*'); my ($name, $seq, $qual); if ($t[1] & 16) { # reverse strand $seq = reverse($t[9]); $qual = reverse($t[10]); $seq =~ tr/ACGTacgt/TGCAtgca/; } else { ($seq, $qual) = @t[9,10]; } $name = $t[0]; $name .= "/1" if ($t[1] & 0x40); $name .= "/2" if ($t[1] & 0x80); print {$fh[$i]} "\@$name\n$seq\n"; if ($qual ne '*') { print {$fh[$i]} "+\n$qual\n"; } $i = 0 if (++$i == $opts{n}); } close($fh[$_]) for (0 .. $opts{n}-1); } else { die("To be implemented.\n"); } } # # sra2hdr # # This subroutine does not use an XML parser. It requires that the SRA # XML files are properly formated. sub sra2hdr { my %opts = (); getopts('', \%opts); die("Usage: samtools.pl sra2hdr \n") if (@ARGV == 0); my $pre = $ARGV[0]; my $fh; # read sample my $sample = 'UNKNOWN'; open($fh, "$pre.sample.xml") || die; while (<$fh>) { $sample = $1 if (/) { if (/\s*(\S+)\s*<\/LIBRARY_NAME>/i) { $exp2lib{$exp} = $1; } } close($fh); # read run my ($run, @fn); open($fh, "$pre.run.xml") || die; while (<$fh>) { if (//i) { if (@fn == 1) { print STDERR "$fn[0]\t$run\n"; } else { for (0 .. $#fn) { print STDERR "$fn[$_]\t$run", "_", $_+1, "\n"; } } } } close($fh); } # # unique # sub unique { my %opts = (f=>250.0, q=>5, r=>2, a=>1, b=>3); getopts('Qf:q:r:a:b:m', \%opts); die("Usage: samtools.pl unique [-f $opts{f}] \n") if (@ARGV == 0 && -t STDIN); my $last = ''; my $recal_Q = !defined($opts{Q}); my $multi_only = defined($opts{m}); my @a; while (<>) { my $score = -1; print $_ if (/^\@/); $score = $1 if (/AS:i:(\d+)/); my @t = split("\t"); next if (@t < 11); if ($score < 0) { # AS tag is unavailable my $cigar = $t[5]; my ($mm, $go, $ge) = (0, 0, 0); $cigar =~ s/(\d+)[ID]/++$go,$ge+=$1/eg; $cigar = $t[5]; $cigar =~ s/(\d+)M/$mm+=$1/eg; $score = $mm * $opts{a} - $go * $opts{q} - $ge * $opts{r}; # no mismatches... } $score = 1 if ($score < 1); if ($t[0] ne $last) { &unique_aux(\@a, $opts{f}, $recal_Q, $multi_only) if (@a); $last = $t[0]; } push(@a, [$score, \@t]); } &unique_aux(\@a, $opts{f}, $recal_Q, $multi_only) if (@a); } sub unique_aux { my ($a, $fac, $is_recal, $multi_only) = @_; my ($max, $max2, $max_i) = (0, 0, -1); for (my $i = 0; $i < @$a; ++$i) { if ($a->[$i][0] > $max) { $max2 = $max; $max = $a->[$i][0]; $max_i = $i; } elsif ($a->[$i][0] > $max2) { $max2 = $a->[$i][0]; } } if ($is_recal) { if (!$multi_only || @$a > 1) { my $q = int($fac * ($max - $max2) / $max + .499); $q = 250 if ($q > 250); $a->[$max_i][1][4] = $q < 250? $q : 250; } } print join("\t", @{$a->[$max_i][1]}); @$a = (); } # # uniqcmp: compare two SAM files # sub uniqcmp { my %opts = (q=>10, s=>100); getopts('pq:s:', \%opts); die("Usage: samtools.pl uniqcmp \n") if (@ARGV < 2); my ($fh, %a); warn("[uniqcmp] read the first file...\n"); &uniqcmp_aux($ARGV[0], \%a, 0); warn("[uniqcmp] read the second file...\n"); &uniqcmp_aux($ARGV[1], \%a, 1); warn("[uniqcmp] stats...\n"); my @cnt; $cnt[$_] = 0 for (0..9); for my $x (keys %a) { my $p = $a{$x}; my $z; if (defined($p->[0]) && defined($p->[1])) { $z = ($p->[0][0] == $p->[1][0] && $p->[0][1] eq $p->[1][1] && abs($p->[0][2] - $p->[1][2]) < $opts{s})? 0 : 1; if ($p->[0][3] >= $opts{q} && $p->[1][3] >= $opts{q}) { ++$cnt[$z*3+0]; } elsif ($p->[0][3] >= $opts{q}) { ++$cnt[$z*3+1]; } elsif ($p->[1][3] >= $opts{q}) { ++$cnt[$z*3+2]; } print STDERR "$x\t$p->[0][1]:$p->[0][2]\t$p->[0][3]\t$p->[0][4]\t$p->[1][1]:$p->[1][2]\t$p->[1][3]\t$p->[1][4]\t", $p->[0][5]-$p->[1][5], "\n" if ($z && defined($opts{p}) && ($p->[0][3] >= $opts{q} || $p->[1][3] >= $opts{q})); } elsif (defined($p->[0])) { ++$cnt[$p->[0][3]>=$opts{q}? 6 : 7]; print STDERR "$x\t$p->[0][1]:$p->[0][2]\t$p->[0][3]\t$p->[0][4]\t*\t0\t*\t", $p->[0][5], "\n" if (defined($opts{p}) && $p->[0][3] >= $opts{q}); } else { print STDERR "$x\t*\t0\t*\t$p->[1][1]:$p->[1][2]\t$p->[1][3]\t$p->[1][4]\t", -$p->[1][5], "\n" if (defined($opts{p}) && $p->[1][3] >= $opts{q}); ++$cnt[$p->[1][3]>=$opts{q}? 8 : 9]; } } print "Consistent (high, high): $cnt[0]\n"; print "Consistent (high, low ): $cnt[1]\n"; print "Consistent (low , high): $cnt[2]\n"; print "Inconsistent (high, high): $cnt[3]\n"; print "Inconsistent (high, low ): $cnt[4]\n"; print "Inconsistent (low , high): $cnt[5]\n"; print "Second missing (high): $cnt[6]\n"; print "Second missing (low ): $cnt[7]\n"; print "First missing (high): $cnt[8]\n"; print "First missing (low ): $cnt[9]\n"; } sub uniqcmp_aux { my ($fn, $a, $which) = @_; my $fh; $fn = "samtools view $fn |" if ($fn =~ /\.bam/); open($fh, $fn) || die; while (<$fh>) { my @t = split; next if (@t < 11); # my $l = ($t[5] =~ /^(\d+)S/)? $1 : 0; my $l = 0; my ($x, $nm) = (0, 0); $nm = $1 if (/NM:i:(\d+)/); $_ = $t[5]; s/(\d+)[MI]/$x+=$1/eg; @{$a->{$t[0]}[$which]} = (($t[1]&0x10)? 1 : 0, $t[2], $t[3]-$l, $t[4], "$x:$nm", $x - 4 * $nm); } close($fh); } sub plp2vcf { while (<>) { my @t = split; next if ($t[3] eq '*/*'); if ($t[2] eq '*') { # indel my @s = split("/", $t[3]); my (@a, @b); my ($ref, $alt); for (@s) { next if ($_ eq '*'); if (/^-/) { push(@a, 'N'.substr($_, 1)); push(@b, 'N'); } elsif (/^\+/) { push(@a, 'N'); push(@b, 'N'.substr($_, 1)); } } if ($a[0] && $a[1]) { if (length($a[0]) < length($a[1])) { $ref = $a[1]; $alt = ($b[0] . ('N' x (length($a[1]) - length($a[0])))) . ",$b[1]"; } elsif (length($a[0]) > length($a[1])) { $ref = $a[0]; $alt = ($b[1] . ('N' x (length($a[0]) - length($a[1])))) . ",$b[0]"; } else { $ref = $a[0]; $alt = ($b[0] eq $b[1])? $b[0] : "$b[0],$b[1]"; } } else { $ref = $a[0]; $alt = $b[0]; } print join("\t", @t[0,1], '.', $ref, $alt, $t[5], '.', '.'), "\n"; } else { # SNP } } } # # Usage # sub usage { die(qq/ Program: samtools.pl (helper script for SAMtools) Version: $version Contact: Heng Li \n Usage: samtools.pl []\n Command: varFilter filtering SNPs and short indels pileup2fq generate fastq from `pileup -c' showALEN print alignment length (ALEN) following CIGAR \n/); } genometools-1.5.1/src/external/samtools-0.1.18/misc/seqtk.c000066400000000000000000000550461211610345200233010ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include "kseq.h" KSEQ_INIT(gzFile, gzread) typedef struct { int n, m; uint64_t *a; } reglist_t; #include "khash.h" KHASH_MAP_INIT_STR(reg, reglist_t) typedef kh_reg_t reghash_t; reghash_t *stk_reg_read(const char *fn) { reghash_t *h = kh_init(reg); gzFile fp; kstream_t *ks; int dret; kstring_t *str; // read the list str = calloc(1, sizeof(kstring_t)); fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); ks = ks_init(fp); while (ks_getuntil(ks, 0, str, &dret) >= 0) { int beg = -1, end = -1; reglist_t *p; khint_t k = kh_get(reg, h, str->s); if (k == kh_end(h)) { int ret; char *s = strdup(str->s); k = kh_put(reg, h, s, &ret); memset(&kh_val(h, k), 0, sizeof(reglist_t)); } p = &kh_val(h, k); if (dret != '\n') { if (ks_getuntil(ks, 0, str, &dret) > 0 && isdigit(str->s[0])) { beg = atoi(str->s); if (dret != '\n') { if (ks_getuntil(ks, 0, str, &dret) > 0 && isdigit(str->s[0])) { end = atoi(str->s); if (end < 0) end = -1; } } } } // skip the rest of the line if (dret != '\n') while ((dret = ks_getc(ks)) > 0 && dret != '\n'); if (end < 0 && beg > 0) end = beg, beg = beg - 1; // if there is only one column if (beg < 0) beg = 0, end = INT_MAX; if (p->n == p->m) { p->m = p->m? p->m<<1 : 4; p->a = realloc(p->a, p->m * 8); } p->a[p->n++] = (uint64_t)beg<<32 | end; } ks_destroy(ks); gzclose(fp); free(str->s); free(str); return h; } void stk_reg_destroy(reghash_t *h) { khint_t k; for (k = 0; k < kh_end(h); ++k) { if (kh_exist(h, k)) { free(kh_val(h, k).a); free((char*)kh_key(h, k)); } } kh_destroy(reg, h); } /* constant table */ unsigned char seq_nt16_table[256] = { 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15 /*'-'*/,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15, 1,14, 2, 13,15,15, 4, 11,15,15,12, 15, 3,15,15, 15,15, 5, 6, 8,15, 7, 9, 0,10,15,15, 15,15,15,15, 15, 1,14, 2, 13,15,15, 4, 11,15,15,12, 15, 3,15,15, 15,15, 5, 6, 8,15, 7, 9, 0,10,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15 }; char *seq_nt16_rev_table = "XACMGRSVTWYHKDBN"; unsigned char seq_nt16to4_table[] = { 4, 0, 1, 4, 2, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4 }; int bitcnt_table[] = { 4, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 }; /* composition */ int stk_comp(int argc, char *argv[]) { gzFile fp; kseq_t *seq; int l, c, upper_only = 0; reghash_t *h = 0; reglist_t dummy; while ((c = getopt(argc, argv, "ur:")) >= 0) { switch (c) { case 'u': upper_only = 1; break; case 'r': h = stk_reg_read(optarg); break; } } if (argc == optind) { fprintf(stderr, "Usage: seqtk comp [-u] [-r in.bed] \n\n"); fprintf(stderr, "Output format: chr, length, #A, #C, #G, #T, #2, #3, #4, #CpG, #tv, #ts, #CpG-ts\n"); return 1; } fp = (strcmp(argv[optind], "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(argv[optind], "r"); seq = kseq_init(fp); dummy.n= dummy.m = 1; dummy.a = calloc(1, 8); while ((l = kseq_read(seq)) >= 0) { int i, k; reglist_t *p = 0; if (h) { khint_t k = kh_get(reg, h, seq->name.s); if (k != kh_end(h)) p = &kh_val(h, k); } else { p = &dummy; dummy.a[0] = l; } for (k = 0; p && k < p->n; ++k) { int beg = p->a[k]>>32, end = p->a[k]&0xffffffff; int la, lb, lc, na, nb, nc, cnt[11]; if (beg > 0) la = seq->seq.s[beg-1], lb = seq_nt16_table[la], lc = bitcnt_table[lb]; else la = 'a', lb = -1, lc = 0; na = seq->seq.s[beg]; nb = seq_nt16_table[na]; nc = bitcnt_table[nb]; memset(cnt, 0, 11 * sizeof(int)); for (i = beg; i < end; ++i) { int is_CpG = 0, a, b, c; a = na; b = nb; c = nc; na = seq->seq.s[i+1]; nb = seq_nt16_table[na]; nc = bitcnt_table[nb]; if (b == 2 || b == 10) { // C or Y if (nb == 4 || nb == 5) is_CpG = 1; } else if (b == 4 || b == 5) { // G or R if (lb == 2 || lb == 10) is_CpG = 1; } if (upper_only == 0 || isupper(a)) { if (c > 1) ++cnt[c+2]; if (c == 1) ++cnt[seq_nt16to4_table[b]]; if (b == 10 || b == 5) ++cnt[9]; else if (c == 2) { ++cnt[8]; } if (is_CpG) { ++cnt[7]; if (b == 10 || b == 5) ++cnt[10]; } } la = a; lb = b; lc = c; } if (h) printf("%s\t%d\t%d", seq->name.s, beg, end); else printf("%s\t%d", seq->name.s, l); for (i = 0; i < 11; ++i) printf("\t%d", cnt[i]); putchar('\n'); } fflush(stdout); } free(dummy.a); kseq_destroy(seq); gzclose(fp); return 0; } int stk_randbase(int argc, char *argv[]) { gzFile fp; kseq_t *seq; int l; if (argc == 1) { fprintf(stderr, "Usage: seqtk randbase \n"); return 1; } fp = (strcmp(argv[1], "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(argv[1], "r"); seq = kseq_init(fp); while ((l = kseq_read(seq)) >= 0) { int i; printf(">%s", seq->name.s); for (i = 0; i < l; ++i) { int c, b, a, j, k, m; b = seq->seq.s[i]; c = seq_nt16_table[b]; a = bitcnt_table[c]; if (a == 2) { m = (drand48() < 0.5); for (j = k = 0; j < 4; ++j) { if ((1<seq.s[i] = islower(b)? "acgt"[j] : "ACGT"[j]; } if (i%60 == 0) putchar('\n'); putchar(seq->seq.s[i]); } putchar('\n'); } kseq_destroy(seq); gzclose(fp); return 0; } int stk_hety(int argc, char *argv[]) { gzFile fp; kseq_t *seq; int l, c, win_size = 50000, n_start = 5, win_step, is_lower_mask = 0; char *buf; uint32_t cnt[3]; if (argc == 1) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: seqtk hety [options] \n\n"); fprintf(stderr, "Options: -w INT window size [%d]\n", win_size); fprintf(stderr, " -t INT # start positions in a window [%d]\n", n_start); fprintf(stderr, " -m treat lowercases as masked\n"); fprintf(stderr, "\n"); return 1; } while ((c = getopt(argc, argv, "w:t:m")) >= 0) { switch (c) { case 'w': win_size = atoi(optarg); break; case 't': n_start = atoi(optarg); break; case 'm': is_lower_mask = 1; break; } } fp = (strcmp(argv[optind], "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(argv[optind], "r"); seq = kseq_init(fp); win_step = win_size / n_start; buf = calloc(win_size, 1); while ((l = kseq_read(seq)) >= 0) { int x, i, y, z, next = 0; cnt[0] = cnt[1] = cnt[2] = 0; for (i = 0; i <= l; ++i) { if ((i >= win_size && i % win_step == 0) || i == l) { if (i == l && l >= win_size) { for (y = l - win_size; y < next; ++y) --cnt[(int)buf[y % win_size]]; } if (cnt[1] + cnt[2] > 0) printf("%s\t%d\t%d\t%.2lf\t%d\t%d\n", seq->name.s, next, i, (double)cnt[2] / (cnt[1] + cnt[2]) * win_size, cnt[1] + cnt[2], cnt[2]); next = i; } if (i < l) { y = i % win_size; c = seq->seq.s[i]; if (is_lower_mask && islower(c)) c = 'N'; c = seq_nt16_table[c]; x = bitcnt_table[c]; if (i >= win_size) --cnt[(int)buf[y]]; buf[y] = z = x > 2? 0 : x == 2? 2 : 1; ++cnt[z]; } } } free(buf); kseq_destroy(seq); gzclose(fp); return 0; } /* fq2fa */ int stk_fq2fa(int argc, char *argv[]) { gzFile fp; kseq_t *seq; char *buf; int l, i, c, qual_thres = 0, linelen = 60; while ((c = getopt(argc, argv, "q:l:")) >= 0) { switch (c) { case 'q': qual_thres = atoi(optarg); break; case 'l': linelen = atoi(optarg); break; } } if (argc == optind) { fprintf(stderr, "Usage: seqtk fq2fa [-q qualThres=0] [-l lineLen=60] \n"); return 1; } buf = linelen > 0? malloc(linelen + 1) : 0; fp = strcmp(argv[optind], "-")? gzopen(argv[optind], "r") : gzdopen(fileno(stdin), "r"); seq = kseq_init(fp); while ((l = kseq_read(seq)) >= 0) { if (seq->qual.l && qual_thres > 0) { for (i = 0; i < l; ++i) if (seq->qual.s[i] - 33 < qual_thres) seq->seq.s[i] = tolower(seq->seq.s[i]); } putchar('>'); if (seq->comment.l) { fputs(seq->name.s, stdout); putchar(' '); puts(seq->comment.s); } else puts(seq->name.s); if (buf) { // multi-line for (i = 0; i < l; i += linelen) { int x = i + linelen < l? linelen : l - i; memcpy(buf, seq->seq.s + i, x); buf[x] = 0; puts(buf); } } else puts(seq->seq.s); } free(buf); kseq_destroy(seq); gzclose(fp); return 0; } int stk_maskseq(int argc, char *argv[]) { khash_t(reg) *h = kh_init(reg); gzFile fp; kseq_t *seq; int l, i, j, c, is_complement = 0, is_lower = 0; khint_t k; while ((c = getopt(argc, argv, "cl")) >= 0) { switch (c) { case 'c': is_complement = 1; break; case 'l': is_lower = 1; break; } } if (argc - optind < 2) { fprintf(stderr, "Usage: seqtk maskseq [-cl] \n\n"); fprintf(stderr, "Options: -c mask the complement regions\n"); fprintf(stderr, " -l soft mask (to lower cases)\n"); return 1; } h = stk_reg_read(argv[optind+1]); // maskseq fp = strcmp(argv[optind], "-")? gzopen(argv[optind], "r") : gzdopen(fileno(stdin), "r"); seq = kseq_init(fp); while ((l = kseq_read(seq)) >= 0) { k = kh_get(reg, h, seq->name.s); if (k == kh_end(h)) { // not found in the hash table if (is_complement) { for (j = 0; j < l; ++j) seq->seq.s[j] = is_lower? tolower(seq->seq.s[j]) : 'N'; } } else { reglist_t *p = &kh_val(h, k); if (!is_complement) { for (i = 0; i < p->n; ++i) { int beg = p->a[i]>>32, end = p->a[i]; if (beg >= seq->seq.l) { fprintf(stderr, "[maskseq] start position >= the sequence length.\n"); continue; } if (end >= seq->seq.l) end = seq->seq.l; if (is_lower) for (j = beg; j < end; ++j) seq->seq.s[j] = tolower(seq->seq.s[j]); else for (j = beg; j < end; ++j) seq->seq.s[j] = 'N'; } } else { int8_t *mask = calloc(seq->seq.l, 1); for (i = 0; i < p->n; ++i) { int beg = p->a[i]>>32, end = p->a[i]; if (end >= seq->seq.l) end = seq->seq.l; for (j = beg; j < end; ++j) mask[j] = 1; } for (j = 0; j < l; ++j) if (mask[j] == 0) seq->seq.s[j] = is_lower? tolower(seq->seq.s[j]) : 'N'; free(mask); } } printf(">%s", seq->name.s); for (j = 0; j < seq->seq.l; ++j) { if (j%60 == 0) putchar('\n'); putchar(seq->seq.s[j]); } putchar('\n'); } // free kseq_destroy(seq); gzclose(fp); stk_reg_destroy(h); return 0; } /* subseq */ int stk_subseq(int argc, char *argv[]) { khash_t(reg) *h = kh_init(reg); gzFile fp; kseq_t *seq; int l, i, j, c, is_tab = 0; khint_t k; while ((c = getopt(argc, argv, "t")) >= 0) { switch (c) { case 't': is_tab = 1; break; } } if (optind + 2 > argc) { fprintf(stderr, "Usage: seqtk subseq [-t] \n\n"); fprintf(stderr, "Note: Use 'samtools faidx' if only a few regions are intended.\n"); return 1; } h = stk_reg_read(argv[optind+1]); // subseq fp = strcmp(argv[optind], "-")? gzopen(argv[optind], "r") : gzdopen(fileno(stdin), "r"); seq = kseq_init(fp); while ((l = kseq_read(seq)) >= 0) { reglist_t *p; k = kh_get(reg, h, seq->name.s); if (k == kh_end(h)) continue; p = &kh_val(h, k); for (i = 0; i < p->n; ++i) { int beg = p->a[i]>>32, end = p->a[i]; if (beg >= seq->seq.l) { fprintf(stderr, "[subseq] %s: %d >= %ld\n", seq->name.s, beg, seq->seq.l); continue; } if (end > seq->seq.l) end = seq->seq.l; if (is_tab == 0) { printf("%c%s", seq->qual.l == seq->seq.l? '@' : '>', seq->name.s); if (end == INT_MAX) { if (beg) printf(":%d", beg+1); } else printf(":%d-%d", beg+1, end); } else printf("%s\t%d\t", seq->name.s, beg + 1); if (end > seq->seq.l) end = seq->seq.l; for (j = 0; j < end - beg; ++j) { if (is_tab == 0 && j % 60 == 0) putchar('\n'); putchar(seq->seq.s[j + beg]); } putchar('\n'); if (seq->qual.l != seq->seq.l || is_tab) continue; printf("+"); for (j = 0; j < end - beg; ++j) { if (j % 60 == 0) putchar('\n'); putchar(seq->qual.s[j + beg]); } putchar('\n'); } } // free kseq_destroy(seq); gzclose(fp); stk_reg_destroy(h); return 0; } /* mergefa */ int stk_mergefa(int argc, char *argv[]) { gzFile fp[2]; kseq_t *seq[2]; int i, l, c, is_intersect = 0, is_haploid = 0, qual = 0, is_mask = 0; while ((c = getopt(argc, argv, "himq:")) >= 0) { switch (c) { case 'i': is_intersect = 1; break; case 'h': is_haploid = 1; break; case 'm': is_mask = 1; break; case 'q': qual = atoi(optarg); break; } } if (is_mask && is_intersect) { fprintf(stderr, "[%s] `-i' and `-h' cannot be applied at the same time.\n", __func__); return 1; } if (optind + 2 > argc) { fprintf(stderr, "\nUsage: seqtk mergefa [options] \n\n"); fprintf(stderr, "Options: -q INT quality threshold [0]\n"); fprintf(stderr, " -i take intersection\n"); fprintf(stderr, " -m convert to lowercase when one of the input base is N.\n"); fprintf(stderr, " -h suppress hets in the input\n\n"); return 1; } for (i = 0; i < 2; ++i) { fp[i] = strcmp(argv[optind+i], "-")? gzopen(argv[optind+i], "r") : gzdopen(fileno(stdin), "r"); seq[i] = kseq_init(fp[i]); } while (kseq_read(seq[0]) >= 0) { int min_l, c[2], is_upper; kseq_read(seq[1]); if (strcmp(seq[0]->name.s, seq[1]->name.s)) fprintf(stderr, "[%s] Different sequence names: %s != %s\n", __func__, seq[0]->name.s, seq[1]->name.s); if (seq[0]->seq.l != seq[1]->seq.l) fprintf(stderr, "[%s] Unequal sequence length: %ld != %ld\n", __func__, seq[0]->seq.l, seq[1]->seq.l); min_l = seq[0]->seq.l < seq[1]->seq.l? seq[0]->seq.l : seq[1]->seq.l; printf(">%s", seq[0]->name.s); for (l = 0; l < min_l; ++l) { c[0] = seq[0]->seq.s[l]; c[1] = seq[1]->seq.s[l]; if (seq[0]->qual.l && seq[0]->qual.s[l] - 33 < qual) c[0] = tolower(c[0]); if (seq[1]->qual.l && seq[1]->qual.s[l] - 33 < qual) c[1] = tolower(c[1]); if (is_intersect) is_upper = (isupper(c[0]) || isupper(c[1]))? 1 : 0; else if (is_mask) is_upper = (isupper(c[0]) || isupper(c[1]))? 1 : 0; else is_upper = (isupper(c[0]) && isupper(c[1]))? 1 : 0; c[0] = seq_nt16_table[c[0]]; c[1] = seq_nt16_table[c[1]]; if (c[0] == 0) c[0] = 15; if (c[1] == 0) c[1] = 15; if (is_haploid && (bitcnt_table[c[0]] > 1 || bitcnt_table[c[1]] > 1)) is_upper = 0; if (is_intersect) { c[0] = c[0] & c[1]; if (c[0] == 0) is_upper = 0; } else if (is_mask) { if (c[0] == 15 || c[1] == 15) is_upper = 0; c[0] = c[0] & c[1]; if (c[0] == 0) is_upper = 0; } else c[0] = c[0] | c[1]; c[0] = seq_nt16_rev_table[c[0]]; if (!is_upper) c[0] = tolower(c[0]); if (l%60 == 0) putchar('\n'); putchar(c[0]); } putchar('\n'); } return 0; } int stk_famask(int argc, char *argv[]) { gzFile fp[2]; kseq_t *seq[2]; int i, l; if (argc < 3) { fprintf(stderr, "Usage: seqtk famask \n"); return 1; } for (i = 0; i < 2; ++i) { fp[i] = strcmp(argv[optind+i], "-")? gzopen(argv[optind+i], "r") : gzdopen(fileno(stdin), "r"); seq[i] = kseq_init(fp[i]); } while (kseq_read(seq[0]) >= 0) { int min_l, c[2]; kseq_read(seq[1]); if (strcmp(seq[0]->name.s, seq[1]->name.s)) fprintf(stderr, "[%s] Different sequence names: %s != %s\n", __func__, seq[0]->name.s, seq[1]->name.s); if (seq[0]->seq.l != seq[1]->seq.l) fprintf(stderr, "[%s] Unequal sequence length: %ld != %ld\n", __func__, seq[0]->seq.l, seq[1]->seq.l); min_l = seq[0]->seq.l < seq[1]->seq.l? seq[0]->seq.l : seq[1]->seq.l; printf(">%s", seq[0]->name.s); for (l = 0; l < min_l; ++l) { c[0] = seq[0]->seq.s[l]; c[1] = seq[1]->seq.s[l]; if (c[1] == 'x') c[0] = tolower(c[0]); else if (c[1] != 'X') c[0] = c[1]; if (l%60 == 0) putchar('\n'); putchar(c[0]); } putchar('\n'); } return 0; } int stk_mutfa(int argc, char *argv[]) { khash_t(reg) *h = kh_init(reg); gzFile fp; kseq_t *seq; kstream_t *ks; int l, i, dret; kstring_t *str; khint_t k; if (argc < 3) { fprintf(stderr, "Usage: seqtk mutfa \n\n"); fprintf(stderr, "Note: contains at least four columns per line which are:\n"); fprintf(stderr, " 'chr 1-based-pos any base-changed-to'.\n"); return 1; } // read the list str = calloc(1, sizeof(kstring_t)); fp = strcmp(argv[2], "-")? gzopen(argv[2], "r") : gzdopen(fileno(stdin), "r"); ks = ks_init(fp); while (ks_getuntil(ks, 0, str, &dret) >= 0) { char *s = strdup(str->s); int beg = 0, ret; reglist_t *p; k = kh_get(reg, h, s); if (k == kh_end(h)) { k = kh_put(reg, h, s, &ret); memset(&kh_val(h, k), 0, sizeof(reglist_t)); } p = &kh_val(h, k); if (ks_getuntil(ks, 0, str, &dret) > 0) beg = atol(str->s) - 1; // 2nd col ks_getuntil(ks, 0, str, &dret); // 3rd col ks_getuntil(ks, 0, str, &dret); // 4th col // skip the rest of the line if (dret != '\n') while ((dret = ks_getc(ks)) > 0 && dret != '\n'); if (isalpha(str->s[0]) && str->l == 1) { if (p->n == p->m) { p->m = p->m? p->m<<1 : 4; p->a = realloc(p->a, p->m * 8); } p->a[p->n++] = (uint64_t)beg<<32 | str->s[0]; } } ks_destroy(ks); gzclose(fp); free(str->s); free(str); // mutfa fp = strcmp(argv[1], "-")? gzopen(argv[1], "r") : gzdopen(fileno(stdin), "r"); seq = kseq_init(fp); while ((l = kseq_read(seq)) >= 0) { reglist_t *p; k = kh_get(reg, h, seq->name.s); if (k != kh_end(h)) { p = &kh_val(h, k); for (i = 0; i < p->n; ++i) { int beg = p->a[i]>>32; if (beg < seq->seq.l) seq->seq.s[beg] = (int)p->a[i]; } } printf(">%s", seq->name.s); for (i = 0; i < l; ++i) { if (i%60 == 0) putchar('\n'); putchar(seq->seq.s[i]); } putchar('\n'); } // free kseq_destroy(seq); gzclose(fp); for (k = 0; k < kh_end(h); ++k) { if (kh_exist(h, k)) { free(kh_val(h, k).a); free((char*)kh_key(h, k)); } } kh_destroy(reg, h); return 0; } int stk_listhet(int argc, char *argv[]) { gzFile fp; kseq_t *seq; int i, l; if (argc == 1) { fprintf(stderr, "Usage: seqtk listhet \n"); return 1; } fp = (strcmp(argv[1], "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(argv[1], "r"); seq = kseq_init(fp); while ((l = kseq_read(seq)) >= 0) { for (i = 0; i < l; ++i) { int b = seq->seq.s[i]; if (bitcnt_table[seq_nt16_table[b]] == 2) printf("%s\t%d\t%c\n", seq->name.s, i+1, b); } } kseq_destroy(seq); gzclose(fp); return 0; } /* cutN */ static int cutN_min_N_tract = 1000; static int cutN_nonN_penalty = 10; static int find_next_cut(const kseq_t *ks, int k, int *begin, int *end) { int i, b, e; while (k < ks->seq.l) { if (seq_nt16_table[(int)ks->seq.s[k]] == 15) { int score, max; score = 0; e = max = -1; for (i = k; i < ks->seq.l && score >= 0; ++i) { /* forward */ if (seq_nt16_table[(int)ks->seq.s[i]] == 15) ++score; else score -= cutN_nonN_penalty; if (score > max) max = score, e = i; } score = 0; b = max = -1; for (i = e; i >= 0 && score >= 0; --i) { /* backward */ if (seq_nt16_table[(int)ks->seq.s[i]] == 15) ++score; else score -= cutN_nonN_penalty; if (score > max) max = score, b = i; } if (e + 1 - b >= cutN_min_N_tract) { *begin = b; *end = e + 1; return *end; } k = e + 1; } else ++k; } return -1; } static void print_seq(FILE *fpout, const kseq_t *ks, int begin, int end) { int i; if (begin >= end) return; // FIXME: why may this happen? Understand it! fprintf(fpout, ">%s:%d-%d", ks->name.s, begin+1, end); for (i = begin; i < end && i < ks->seq.l; ++i) { if ((i - begin)%60 == 0) fputc('\n', fpout); fputc(ks->seq.s[i], fpout); } fputc('\n', fpout); } int stk_cutN(int argc, char *argv[]) { int c, l, gap_only = 0; gzFile fp; kseq_t *ks; while ((c = getopt(argc, argv, "n:p:g")) >= 0) { switch (c) { case 'n': cutN_min_N_tract = atoi(optarg); break; case 'p': cutN_nonN_penalty = atoi(optarg); break; case 'g': gap_only = 1; break; default: return 1; } } if (argc == optind) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: seqtk cutN [options] \n\n"); fprintf(stderr, "Options: -n INT min size of N tract [%d]\n", cutN_min_N_tract); fprintf(stderr, " -p INT penalty for a non-N [%d]\n", cutN_nonN_penalty); fprintf(stderr, " -g print gaps only, no sequence\n\n"); return 1; } fp = (strcmp(argv[optind], "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(argv[optind], "r"); ks = kseq_init(fp); while ((l = kseq_read(ks)) >= 0) { int k = 0, begin = 0, end = 0; while (find_next_cut(ks, k, &begin, &end) >= 0) { if (begin != 0) { if (gap_only) printf("%s\t%d\t%d\n", ks->name.s, begin, end); else print_seq(stdout, ks, k, begin); } k = end; } if (!gap_only) print_seq(stdout, ks, k, l); } kseq_destroy(ks); gzclose(fp); return 0; } /* main function */ static int usage() { fprintf(stderr, "\n"); fprintf(stderr, "Usage: seqtk \n\n"); fprintf(stderr, "Command: comp get the nucleotide composite of FASTA/Q\n"); fprintf(stderr, " hety regional heterozygosity\n"); fprintf(stderr, " fq2fa convert FASTQ to FASTA\n"); fprintf(stderr, " subseq extract subsequences from FASTA/Q\n"); fprintf(stderr, " maskseq mask sequences\n"); fprintf(stderr, " mutfa point mutate FASTA at specified positions\n"); fprintf(stderr, " mergefa merge two FASTA/Q files\n"); fprintf(stderr, " randbase choose a random base from hets\n"); fprintf(stderr, " cutN cut sequence at long N\n"); fprintf(stderr, " listhet extract the position of each het\n"); fprintf(stderr, "\n"); return 1; } int main(int argc, char *argv[]) { if (argc == 1) return usage(); if (strcmp(argv[1], "comp") == 0) stk_comp(argc-1, argv+1); else if (strcmp(argv[1], "hety") == 0) stk_hety(argc-1, argv+1); else if (strcmp(argv[1], "fq2fa") == 0) stk_fq2fa(argc-1, argv+1); else if (strcmp(argv[1], "subseq") == 0) stk_subseq(argc-1, argv+1); else if (strcmp(argv[1], "maskseq") == 0) stk_maskseq(argc-1, argv+1); else if (strcmp(argv[1], "mutfa") == 0) stk_mutfa(argc-1, argv+1); else if (strcmp(argv[1], "mergefa") == 0) stk_mergefa(argc-1, argv+1); else if (strcmp(argv[1], "randbase") == 0) stk_randbase(argc-1, argv+1); else if (strcmp(argv[1], "cutN") == 0) stk_cutN(argc-1, argv+1); else if (strcmp(argv[1], "listhet") == 0) stk_listhet(argc-1, argv+1); else if (strcmp(argv[1], "famask") == 0) stk_famask(argc-1, argv+1); else { fprintf(stderr, "[main] unrecognized commad '%s'. Abort!\n", argv[1]); return 1; } return 0; } genometools-1.5.1/src/external/samtools-0.1.18/misc/soap2sam.pl000077500000000000000000000052101211610345200240570ustar00rootroot00000000000000#!/usr/bin/perl -w # Contact: lh3 # Version: 0.1.1 use strict; use warnings; use Getopt::Std; &soap2sam; exit; sub mating { my ($s1, $s2) = @_; my $isize = 0; if ($s1->[2] ne '*' && $s1->[2] eq $s2->[2]) { # then calculate $isize my $x1 = ($s1->[1] & 0x10)? $s1->[3] + length($s1->[9]) : $s1->[3]; my $x2 = ($s2->[1] & 0x10)? $s2->[3] + length($s2->[9]) : $s2->[3]; $isize = $x2 - $x1; } # update mate coordinate if ($s2->[2] ne '*') { @$s1[6..8] = (($s2->[2] eq $s1->[2])? "=" : $s2->[2], $s2->[3], $isize); $s1->[1] |= 0x20 if ($s2->[1] & 0x10); } else { $s1->[1] |= 0x8; } if ($s1->[2] ne '*') { @$s2[6..8] = (($s1->[2] eq $s2->[2])? "=" : $s1->[2], $s1->[3], -$isize); $s2->[1] |= 0x20 if ($s1->[1] & 0x10); } else { $s2->[1] |= 0x8; } } sub soap2sam { my %opts = (); getopts("p", \%opts); die("Usage: soap2sam.pl [-p] \n") if (@ARGV == 0 && -t STDIN); my $is_paired = defined($opts{p}); # core loop my @s1 = (); my @s2 = (); my ($s_last, $s_curr) = (\@s1, \@s2); while (<>) { s/[\177-\377]|[\000-\010]|[\012-\040]//g; next if (&soap2sam_aux($_, $s_curr, $is_paired) < 0); if (@$s_last != 0 && $s_last->[0] eq $s_curr->[0]) { &mating($s_last, $s_curr); print join("\t", @$s_last), "\n"; print join("\t", @$s_curr), "\n"; @$s_last = (); @$s_curr = (); } else { print join("\t", @$s_last), "\n" if (@$s_last != 0); my $s = $s_last; $s_last = $s_curr; $s_curr = $s; } } print join("\t", @$s_last), "\n" if (@$s_last != 0); } sub soap2sam_aux { my ($line, $s, $is_paired) = @_; chomp($line); my @t = split(/\s+/, $line); return -1 if (@t < 9 || $line =~ /^\s/ || !$t[0]); @$s = (); # fix SOAP-2.1.x bugs @t = @t[0..2,4..$#t] unless ($t[3] =~ /^\d+$/); # read name $s->[0] = $t[0]; $s->[0] =~ s/\/[12]$//g; # initial flag (will be updated later) $s->[1] = 0; $s->[1] |= 1 | 1<<($t[4] eq 'a'? 6 : 7); $s->[1] |= 2 if ($is_paired); # read & quality $s->[9] = $t[1]; $s->[10] = (length($t[2]) > length($t[1]))? substr($t[2], 0, length($t[1])) : $t[2]; # cigar $s->[5] = length($s->[9]) . "M"; # coor $s->[2] = $t[7]; $s->[3] = $t[8]; $s->[1] |= 0x10 if ($t[6] eq '-'); # mapQ $s->[4] = $t[3] == 1? 30 : 0; # mate coordinate $s->[6] = '*'; $s->[7] = $s->[8] = 0; # aux push(@$s, "NM:i:$t[9]"); my $md = ''; if ($t[9]) { my @x; for (10 .. $#t) { push(@x, sprintf("%.3d,$1", $2)) if ($t[$_] =~ /^([ACGT])->(\d+)/i); } @x = sort(@x); my $a = 0; for (@x) { my ($y, $z) = split(","); $md .= (int($y)-$a) . $z; $a += $y - $a + 1; } $md .= length($t[1]) - $a; } else { $md = length($t[1]); } push(@$s, "MD:Z:$md"); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/misc/varfilter.py000077500000000000000000000132271211610345200243540ustar00rootroot00000000000000#!/software/bin/python # Author: lh3, converted to python and modified to add -C option by Aylwyn Scally # # About: # varfilter.py is a port of Heng's samtools.pl varFilter script into # python, with an additional -C INT option. This option sets a minimum # consensus score, above which the script will output a pileup line # wherever it _could have_ called a variant, even if none is actually # called (i.e. hom-ref positions). This is important if you want to # subsequently merge the calls with those for another individual to get a # synoptic view of calls at each site. Without this option, and in all # other respects, it behaves like samtools.pl varFilter. # # Aylwyn Scally as6@sanger.ac.uk # Filtration code: # # C low CNS quality (hom-ref only) # d low depth # D high depth # W too many SNPs in a window (SNP only) # G close to a high-quality indel (SNP only) # Q low RMS mapping quality (SNP only) # g close to another indel with higher quality (indel only) # s low SNP quality (SNP only) # i low indel quality (indel only) import sys import getopt def usage(): print '''usage: varfilter.py [options] [cns-pileup] Options: -Q INT minimum RMS mapping quality for SNPs -q INT minimum RMS mapping quality for gaps -d INT minimum read depth -D INT maximum read depth -S INT minimum SNP quality -i INT minimum indel quality -C INT minimum consensus quality for hom-ref sites -G INT min indel score for nearby SNP filtering -w INT SNP within INT bp around a gap to be filtered -W INT window size for filtering dense SNPs -N INT max number of SNPs in a window -l INT window size for filtering adjacent gaps -p print filtered variants''' def varFilter_aux(first, is_print): try: if first[1] == 0: sys.stdout.write("\t".join(first[4:]) + "\n") elif is_print: sys.stderr.write("\t".join(["UQdDWGgsiCX"[first[1]]] + first[4:]) + "\n") except IOError: sys.exit() mindepth = 3 maxdepth = 100 gapgapwin = 30 minsnpmapq = 25 mingapmapq = 10 minindelscore = 25 scorefactor = 100 snpgapwin = 10 densesnpwin = 10 densesnps = 2 printfilt = False minsnpq = 0 minindelq = 0 mincnsq = 0 try: options, args = getopt.gnu_getopt(sys.argv[1:], 'pq:d:D:l:Q:w:W:N:G:S:i:C:', []) except getopt.GetoptError: usage() sys.exit(2) for (oflag, oarg) in options: if oflag == '-d': mindepth = int(oarg) if oflag == '-D': maxdepth = int(oarg) if oflag == '-l': gapgapwin = int(oarg) if oflag == '-Q': minsnpmapq = int(oarg) if oflag == '-q': mingapmapq = int(oarg) if oflag == '-G': minindelscore = int(oarg) if oflag == '-s': scorefactor = int(oarg) if oflag == '-w': snpgapwin = int(oarg) if oflag == '-W': densesnpwin = int(oarg) if oflag == '-C': mincnsq = int(oarg) if oflag == '-N': densesnps = int(oarg) if oflag == '-p': printfilt = True if oflag == '-S': minsnpq = int(oarg) if oflag == '-i': minindelq = int(oarg) if len(args) < 1: inp = sys.stdin else: inp = open(args[0]) # calculate the window size max_dist = max(gapgapwin, snpgapwin, densesnpwin) staging = [] for t in (line.strip().split() for line in inp): (flt, score) = (0, -1) # non-var sites if t[3] == '*/*': continue is_snp = t[2].upper() != t[3].upper() if not (is_snp or mincnsq): continue # clear the out-of-range elements while staging: # Still on the same chromosome and the first element's window still affects this position? if staging[0][4] == t[0] and int(staging[0][5]) + staging[0][2] + max_dist >= int(t[1]): break varFilter_aux(staging.pop(0), printfilt) # first a simple filter if int(t[7]) < mindepth: flt = 2 elif int(t[7]) > maxdepth: flt = 3 if t[2] == '*': # an indel if minindelq and minindelq > int(t[5]): flt = 8 elif is_snp: if minsnpq and minsnpq> int(t[5]): flt = 7 else: if mincnsq and mincnsq > int(t[4]): flt = 9 # site dependent filters dlen = 0 if flt == 0: if t[2] == '*': # an indel # If deletion, remember the length of the deletion (a,b) = t[3].split('/') alen = len(a) - 1 blen = len(b) - 1 if alen>blen: if a[0] == '-': dlen=alen elif b[0] == '-': dlen=blen if int(t[6]) < mingapmapq: flt = 1 # filtering SNPs if int(t[5]) >= minindelscore: for x in (y for y in staging if y[3]): # Is it a SNP and is it outside the SNP filter window? if x[0] >= 0 or int(x[5]) + x[2] + snpgapwin < int(t[1]): continue if x[1] == 0: x[1] = 5 # calculate the filtering score (different from indel quality) score = int(t[5]) if t[8] != '*': score += scorefactor * int(t[10]) if t[9] != '*': score += scorefactor * int(t[11]) # check the staging list for indel filtering for x in (y for y in staging if y[3]): # Is it a SNP and is it outside the gap filter window if x[0] < 0 or int(x[5]) + x[2] + gapgapwin < int(t[1]): continue if x[0] < score: x[1] = 6 else: flt = 6 break else: # a SNP or hom-ref if int(t[6]) < minsnpmapq: flt = 1 # check adjacent SNPs k = 1 for x in (y for y in staging if y[3]): if x[0] < 0 and int(x[5]) + x[2] + densesnpwin >= int(t[1]) and (x[1] == 0 or x[1] == 4 or x[1] == 5): k += 1 # filtering is necessary if k > densesnps: flt = 4 for x in (y for y in staging if y[3]): if x[0] < 0 and int(x[5]) + x[2] + densesnpwin >= int(t[1]) and x[1] == 0: x[1] = 4 else: # then check gap filter for x in (y for y in staging if y[3]): if x[0] < 0 or int(x[5]) + x[2] + snpgapwin < int(t[1]): continue if x[0] >= minindelscore: flt = 5 break staging.append([score, flt, dlen, is_snp] + t) # output the last few elements in the staging list while staging: varFilter_aux(staging.pop(0), printfilt) genometools-1.5.1/src/external/samtools-0.1.18/misc/wgsim.c000066400000000000000000000340731211610345200232750ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008 Genome Research Ltd (GRL). 2011 Heng Li Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* This program is separated from maq's read simulator with Colin * Hercus' modification to allow longer indels. */ #include #include #include #include #include #include #include #include #include #include #include "kseq.h" KSEQ_INIT(gzFile, gzread) #define PACKAGE_VERSION "0.3.0" const uint8_t nst_nt4_table[256] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5 /*'-'*/, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; /* Simple normal random number generator, copied from genran.c */ double ran_normal() { static int iset = 0; static double gset; double fac, rsq, v1, v2; if (iset == 0) { do { v1 = 2.0 * drand48() - 1.0; v2 = 2.0 * drand48() - 1.0; rsq = v1 * v1 + v2 * v2; } while (rsq >= 1.0 || rsq == 0.0); fac = sqrt(-2.0 * log(rsq) / rsq); gset = v1 * fac; iset = 1; return v2 * fac; } else { iset = 0; return gset; } } /* wgsim */ enum muttype_t {NOCHANGE = 0, INSERT = 0x1000, SUBSTITUTE = 0xe000, DELETE = 0xf000}; typedef unsigned short mut_t; static mut_t mutmsk = (mut_t)0xf000; typedef struct { int l, m; /* length and maximum buffer size */ mut_t *s; /* sequence */ } mutseq_t; static double ERR_RATE = 0.02; static double MUT_RATE = 0.001; static double INDEL_FRAC = 0.15; static double INDEL_EXTEND = 0.3; static double MAX_N_RATIO = 0.1; void wgsim_mut_diref(const kseq_t *ks, int is_hap, mutseq_t *hap1, mutseq_t *hap2) { int i, deleting = 0; mutseq_t *ret[2]; ret[0] = hap1; ret[1] = hap2; ret[0]->l = ks->seq.l; ret[1]->l = ks->seq.l; ret[0]->m = ks->seq.m; ret[1]->m = ks->seq.m; ret[0]->s = (mut_t *)calloc(ks->seq.m, sizeof(mut_t)); ret[1]->s = (mut_t *)calloc(ks->seq.m, sizeof(mut_t)); for (i = 0; i != ks->seq.l; ++i) { int c; c = ret[0]->s[i] = ret[1]->s[i] = (mut_t)nst_nt4_table[(int)ks->seq.s[i]]; if (deleting) { if (drand48() < INDEL_EXTEND) { if (deleting & 1) ret[0]->s[i] |= DELETE; if (deleting & 2) ret[1]->s[i] |= DELETE; continue; } else deleting = 0; } if (c < 4 && drand48() < MUT_RATE) { // mutation if (drand48() >= INDEL_FRAC) { // substitution double r = drand48(); c = (c + (int)(r * 3.0 + 1)) & 3; if (is_hap || drand48() < 0.333333) { // hom ret[0]->s[i] = ret[1]->s[i] = SUBSTITUTE|c; } else { // het ret[drand48()<0.5?0:1]->s[i] = SUBSTITUTE|c; } } else { // indel if (drand48() < 0.5) { // deletion if (is_hap || drand48() < 0.333333) { // hom-del ret[0]->s[i] = ret[1]->s[i] = DELETE; deleting = 3; } else { // het-del deleting = drand48()<0.5?1:2; ret[deleting-1]->s[i] = DELETE; } } else { // insertion int num_ins = 0, ins = 0; do { num_ins++; ins = (ins << 2) | (int)(drand48() * 4.0); } while (num_ins < 4 && drand48() < INDEL_EXTEND); if (is_hap || drand48() < 0.333333) { // hom-ins ret[0]->s[i] = ret[1]->s[i] = (num_ins << 12) | (ins << 4) | c; } else { // het-ins ret[drand48()<0.5?0:1]->s[i] = (num_ins << 12) | (ins << 4) | c; } } } } } } void wgsim_print_mutref(const char *name, const kseq_t *ks, mutseq_t *hap1, mutseq_t *hap2) { int i; for (i = 0; i != ks->seq.l; ++i) { int c[3]; c[0] = nst_nt4_table[(int)ks->seq.s[i]]; c[1] = hap1->s[i]; c[2] = hap2->s[i]; if (c[0] >= 4) continue; if ((c[1] & mutmsk) != NOCHANGE || (c[2] & mutmsk) != NOCHANGE) { printf("%s\t%d\t", name, i+1); if (c[1] == c[2]) { // hom if ((c[1]&mutmsk) == SUBSTITUTE) { // substitution printf("%c\t%c\t-\n", "ACGTN"[c[0]], "ACGTN"[c[1]&0xf]); } else if ((c[1]&mutmsk) == DELETE) { // del printf("%c\t-\t-\n", "ACGTN"[c[0]]); } else if (((c[1] & mutmsk) >> 12) <= 5) { // ins printf("-\t"); int n = (c[1]&mutmsk) >> 12, ins = c[1] >> 4; while (n > 0) { putchar("ACGTN"[ins & 0x3]); ins >>= 2; n--; } printf("\t-\n"); } else assert(0); } else { // het if ((c[1]&mutmsk) == SUBSTITUTE || (c[2]&mutmsk) == SUBSTITUTE) { // substitution printf("%c\t%c\t+\n", "ACGTN"[c[0]], "XACMGRSVTWYHKDBN"[1<<(c[1]&0x3)|1<<(c[2]&0x3)]); } else if ((c[1]&mutmsk) == DELETE) { printf("%c\t-\t+\n", "ACGTN"[c[0]]); } else if ((c[2]&mutmsk) == DELETE) { printf("%c\t-\t+\n", "ACGTN"[c[0]]); } else if (((c[1] & mutmsk) >> 12) <= 4) { // ins1 printf("-\t"); int n = (c[1]&mutmsk) >> 12, ins = c[1] >> 4; while (n > 0) { putchar("ACGTN"[ins & 0x3]); ins >>= 2; n--; } printf("\t+\n"); } else if (((c[2] & mutmsk) >> 12) <= 5) { // ins2 printf("-\t"); int n = (c[2]&mutmsk) >> 12, ins = c[2] >> 4; while (n > 0) { putchar("ACGTN"[ins & 0x3]); ins >>= 2; n--; } printf("\t+\n"); } else assert(0); } } } } void wgsim_core(FILE *fpout1, FILE *fpout2, const char *fn, int is_hap, uint64_t N, int dist, int std_dev, int size_l, int size_r) { kseq_t *ks; mutseq_t rseq[2]; gzFile fp_fa; uint64_t tot_len, ii; int i, l, n_ref; char *qstr; int size[2], Q, max_size; uint8_t *tmp_seq[2]; mut_t *target; l = size_l > size_r? size_l : size_r; qstr = (char*)calloc(l+1, 1); tmp_seq[0] = (uint8_t*)calloc(l+2, 1); tmp_seq[1] = (uint8_t*)calloc(l+2, 1); size[0] = size_l; size[1] = size_r; max_size = size_l > size_r? size_l : size_r; Q = (ERR_RATE == 0.0)? 'I' : (int)(-10.0 * log(ERR_RATE) / log(10.0) + 0.499) + 33; fp_fa = gzopen(fn, "r"); ks = kseq_init(fp_fa); tot_len = n_ref = 0; fprintf(stderr, "[%s] calculating the total length of the reference sequence...\n", __func__); while ((l = kseq_read(ks)) >= 0) { tot_len += l; ++n_ref; } fprintf(stderr, "[%s] %d sequences, total length: %llu\n", __func__, n_ref, (long long)tot_len); kseq_destroy(ks); gzclose(fp_fa); fp_fa = gzopen(fn, "r"); ks = kseq_init(fp_fa); while ((l = kseq_read(ks)) >= 0) { uint64_t n_pairs = (uint64_t)((long double)l / tot_len * N + 0.5); if (l < dist + 3 * std_dev) { fprintf(stderr, "[%s] skip sequence '%s' as it is shorter than %d!\n", __func__, ks->name.s, dist + 3 * std_dev); continue; } // generate mutations and print them out wgsim_mut_diref(ks, is_hap, rseq, rseq+1); wgsim_print_mutref(ks->name.s, ks, rseq, rseq+1); for (ii = 0; ii != n_pairs; ++ii) { // the core loop double ran; int d, pos, s[2], is_flip = 0; int n_sub[2], n_indel[2], n_err[2], ext_coor[2], j, k; FILE *fpo[2]; do { // avoid boundary failure ran = ran_normal(); ran = ran * std_dev + dist; d = (int)(ran + 0.5); d = d > max_size? d : max_size; pos = (int)((l - d + 1) * drand48()); } while (pos < 0 || pos >= ks->seq.l || pos + d - 1 >= ks->seq.l); // flip or not if (drand48() < 0.5) { fpo[0] = fpout1; fpo[1] = fpout2; s[0] = size[0]; s[1] = size[1]; } else { fpo[1] = fpout1; fpo[0] = fpout2; s[1] = size[0]; s[0] = size[1]; is_flip = 1; } // generate the read sequences target = rseq[drand48()<0.5?0:1].s; // haplotype from which the reads are generated n_sub[0] = n_sub[1] = n_indel[0] = n_indel[1] = n_err[0] = n_err[1] = 0; #define __gen_read(x, start, iter) do { \ for (i = (start), k = 0, ext_coor[x] = -10; i >= 0 && i < ks->seq.l && k < s[x]; iter) { \ int c = target[i], mut_type = c & mutmsk; \ if (ext_coor[x] < 0) { \ if (mut_type != NOCHANGE && mut_type != SUBSTITUTE) continue; \ ext_coor[x] = i; \ } \ if (mut_type == DELETE) ++n_indel[x]; \ else if (mut_type == NOCHANGE || mut_type == SUBSTITUTE) { \ tmp_seq[x][k++] = c & 0xf; \ if (mut_type == SUBSTITUTE) ++n_sub[x]; \ } else { \ int n, ins; \ ++n_indel[x]; \ tmp_seq[x][k++] = c & 0xf; \ for (n = mut_type>>12, ins = c>>4; n > 0 && k < s[x]; --n, ins >>= 2) \ tmp_seq[x][k++] = ins & 0x3; \ } \ } \ if (k != s[x]) ext_coor[x] = -10; \ } while (0) __gen_read(0, pos, ++i); __gen_read(1, pos + d - 1, --i); for (k = 0; k < s[1]; ++k) tmp_seq[1][k] = tmp_seq[1][k] < 4? 3 - tmp_seq[1][k] : 4; // complement if (ext_coor[0] < 0 || ext_coor[1] < 0) { // fail to generate the read(s) --ii; continue; } // generate sequencing errors for (j = 0; j < 2; ++j) { int n_n = 0; for (i = 0; i < s[j]; ++i) { int c = tmp_seq[j][i]; if (c >= 4) { // actually c should be never larger than 4 if everything is correct c = 4; ++n_n; } else if (drand48() < ERR_RATE) { // c = (c + (int)(drand48() * 3.0 + 1)) & 3; // random sequencing errors c = (c + 1) & 3; // recurrent sequencing errors ++n_err[j]; } tmp_seq[j][i] = c; } if ((double)n_n / s[j] > MAX_N_RATIO) break; } if (j < 2) { // too many ambiguous bases on one of the reads --ii; continue; } // print for (j = 0; j < 2; ++j) { for (i = 0; i < s[j]; ++i) qstr[i] = Q; qstr[i] = 0; fprintf(fpo[j], "@%s_%u_%u_%d:%d:%d_%d:%d:%d_%llx/%d\n", ks->name.s, ext_coor[0]+1, ext_coor[1]+1, n_err[0], n_sub[0], n_indel[0], n_err[1], n_sub[1], n_indel[1], (long long)ii, j==0? is_flip+1 : 2-is_flip); for (i = 0; i < s[j]; ++i) fputc("ACGTN"[(int)tmp_seq[j][i]], fpo[j]); fprintf(fpo[j], "\n+\n%s\n", qstr); } } free(rseq[0].s); free(rseq[1].s); } kseq_destroy(ks); gzclose(fp_fa); free(qstr); free(tmp_seq[0]); free(tmp_seq[1]); } static int simu_usage() { fprintf(stderr, "\n"); fprintf(stderr, "Program: wgsim (short read simulator)\n"); fprintf(stderr, "Version: %s\n", PACKAGE_VERSION); fprintf(stderr, "Contact: Heng Li \n\n"); fprintf(stderr, "Usage: wgsim [options] \n\n"); fprintf(stderr, "Options: -e FLOAT base error rate [%.3f]\n", ERR_RATE); fprintf(stderr, " -d INT outer distance between the two ends [500]\n"); fprintf(stderr, " -s INT standard deviation [50]\n"); fprintf(stderr, " -N INT number of read pairs [1000000]\n"); fprintf(stderr, " -1 INT length of the first read [70]\n"); fprintf(stderr, " -2 INT length of the second read [70]\n"); fprintf(stderr, " -r FLOAT rate of mutations [%.4f]\n", MUT_RATE); fprintf(stderr, " -R FLOAT fraction of indels [%.2f]\n", INDEL_FRAC); fprintf(stderr, " -X FLOAT probability an indel is extended [%.2f]\n", INDEL_EXTEND); fprintf(stderr, " -S INT seed for random generator [-1]\n"); fprintf(stderr, " -h haplotype mode\n"); fprintf(stderr, "\n"); return 1; } int main(int argc, char *argv[]) { int64_t N; int dist, std_dev, c, size_l, size_r, is_hap = 0; FILE *fpout1, *fpout2; int seed = -1; N = 1000000; dist = 500; std_dev = 50; size_l = size_r = 70; while ((c = getopt(argc, argv, "e:d:s:N:1:2:r:R:hX:S:")) >= 0) { switch (c) { case 'd': dist = atoi(optarg); break; case 's': std_dev = atoi(optarg); break; case 'N': N = atoi(optarg); break; case '1': size_l = atoi(optarg); break; case '2': size_r = atoi(optarg); break; case 'e': ERR_RATE = atof(optarg); break; case 'r': MUT_RATE = atof(optarg); break; case 'R': INDEL_FRAC = atof(optarg); break; case 'X': INDEL_EXTEND = atof(optarg); break; case 'S': seed = atoi(optarg); break; case 'h': is_hap = 1; break; } } if (argc - optind < 3) return simu_usage(); fpout1 = fopen(argv[optind+1], "w"); fpout2 = fopen(argv[optind+2], "w"); if (!fpout1 || !fpout2) { fprintf(stderr, "[wgsim] file open error\n"); return 1; } srand48(seed > 0? seed : time(0)); wgsim_core(fpout1, fpout2, argv[optind], is_hap, N, dist, std_dev, size_l, size_r); fclose(fpout1); fclose(fpout2); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/misc/wgsim_eval.pl000077500000000000000000000052511211610345200244740ustar00rootroot00000000000000#!/usr/bin/perl -w # Contact: lh3 # Version: 0.1.5 use strict; use warnings; use Getopt::Std; &wgsim_eval; exit; sub wgsim_eval { my %opts = (g=>5); getopts('pcag:', \%opts); die("Usage: wgsim_eval.pl [-pca] [-g $opts{g}] \n") if (@ARGV == 0 && -t STDIN); my (@c0, @c1, %fnfp); my ($max_q, $flag) = (0, 0); my $gap = $opts{g}; $flag |= 1 if (defined $opts{p}); $flag |= 2 if (defined $opts{c}); while (<>) { next if (/^\@/); my @t = split("\t"); next if (@t < 11); my $line = $_; my ($q, $is_correct, $chr, $left, $rght) = (int($t[4]/10), 1, $t[2], $t[3], $t[3]); $max_q = $q if ($q > $max_q); # right coordinate $_ = $t[5]; s/(\d+)[MDN]/$rght+=$1,'x'/eg; --$rght; # correct for soft clipping my ($left0, $rght0) = ($left, $rght); $left -= $1 if (/^(\d+)[SH]/); $rght += $1 if (/(\d+)[SH]$/); $left0 -= $1 if (/(\d+)[SH]$/); $rght0 += $1 if (/^(\d+)[SH]/); # skip unmapped reads next if (($t[1]&0x4) || $chr eq '*'); # parse read name and check if ($t[0] =~ /^(\S+)_(\d+)_(\d+)_/) { if ($1 ne $chr) { # different chr $is_correct = 0; } else { if ($flag & 2) { if (($t[1]&0x40) && !($t[1]&0x10)) { # F3, forward $is_correct = 0 if (abs($2 - $left) > $gap && abs($2 - $left0) > $gap); } elsif (($t[1]&0x40) && ($t[1]&0x10)) { # F3, reverse $is_correct = 0 if (abs($3 - $rght) > $gap && abs($3 - $rght0) > $gap); } elsif (($t[1]&0x80) && !($t[1]&0x10)) { # R3, forward $is_correct = 0 if (abs($3 - $left) > $gap && abs($3 - $left0) > $gap); } else { # R3, reverse $is_correct = 0 if (abs($2 - $rght) > $gap && abs($3 - $rght0) > $gap); } } else { if ($t[1] & 0x10) { # reverse $is_correct = 0 if (abs($3 - $rght) > $gap && abs($3 - $rght0) > $gap); # in case of indels that are close to the end of a reads } else { $is_correct = 0 if (abs($2 - $left) > $gap && abs($2 - $left0) > $gap); } } } } else { warn("[wgsim_eval] read '$t[0]' was not generated by wgsim?\n"); next; } ++$c0[$q]; ++$c1[$q] unless ($is_correct); @{$fnfp{$t[4]}} = (0, 0) unless (defined $fnfp{$t[4]}); ++$fnfp{$t[4]}[0]; ++$fnfp{$t[4]}[1] unless ($is_correct); print STDERR $line if (($flag&1) && !$is_correct && $q > 0); } # print my ($cc0, $cc1) = (0, 0); if (!defined($opts{a})) { for (my $i = $max_q; $i >= 0; --$i) { $c0[$i] = 0 unless (defined $c0[$i]); $c1[$i] = 0 unless (defined $c1[$i]); $cc0 += $c0[$i]; $cc1 += $c1[$i]; printf("%.2dx %12d / %-12d %12d %.3e\n", $i, $c1[$i], $c0[$i], $cc0, $cc1/$cc0) if ($cc0); } } else { for (reverse(sort {$a<=>$b} (keys %fnfp))) { next if ($_ == 0); $cc0 += $fnfp{$_}[0]; $cc1 += $fnfp{$_}[1]; print join("\t", $_, $cc0, $cc1), "\n"; } } } genometools-1.5.1/src/external/samtools-0.1.18/misc/zoom2sam.pl000077500000000000000000000045351211610345200241120ustar00rootroot00000000000000#!/usr/bin/perl -w # Contact: lh3 # Version: 0.1.0 use strict; use warnings; use Getopt::Std; &zoom2sam; exit; sub mating { my ($s1, $s2) = @_; my $isize = 0; if ($s1->[2] ne '*' && $s1->[2] eq $s2->[2]) { # then calculate $isize my $x1 = ($s1->[1] & 0x10)? $s1->[3] + length($s1->[9]) : $s1->[3]; my $x2 = ($s2->[1] & 0x10)? $s2->[3] + length($s2->[9]) : $s2->[3]; $isize = $x2 - $x1; } # update mate coordinate if ($s2->[2] ne '*') { @$s1[6..8] = (($s2->[2] eq $s1->[2])? "=" : $s2->[2], $s2->[3], $isize); $s1->[1] |= 0x20 if ($s2->[1] & 0x10); } else { $s1->[1] |= 0x8; } if ($s1->[2] ne '*') { @$s2[6..8] = (($s1->[2] eq $s2->[2])? "=" : $s1->[2], $s1->[3], -$isize); $s2->[1] |= 0x20 if ($s1->[1] & 0x10); } else { $s2->[1] |= 0x8; } } sub zoom2sam { my %opts = (); getopts("p", \%opts); die("Usage: zoom2sam.pl [-p] Warnings: This script only supports the default Illumina outputs.\n") if (@ARGV < 2); my $is_paired = defined($opts{p}); my $len = shift(@ARGV); # core loop my @s1 = (); my @s2 = (); my ($s_last, $s_curr) = (\@s1, \@s2); while (<>) { &zoom2sam_aux($_, $s_curr, $is_paired, $len); if (@$s_last != 0 && $s_last->[0] eq $s_curr->[0]) { &mating($s_last, $s_curr); print join("\t", @$s_last), "\n"; print join("\t", @$s_curr), "\n"; @$s_last = (); @$s_curr = (); } else { print join("\t", @$s_last), "\n" if (@$s_last != 0); my $s = $s_last; $s_last = $s_curr; $s_curr = $s; } } print join("\t", @$s_last), "\n" if (@$s_last != 0); } sub zoom2sam_aux { my ($line, $s, $is_paired, $len) = @_; chomp($line); my @t = split("\t", $line); @$s = (); # read name $s->[0] = $t[0]; # initial flag (will be updated later) $s->[1] = 0; $s->[1] |= 1 | 1<<6 if ($s->[0] =~ /_F$/); $s->[1] |= 1 | 1<<7 if ($s->[0] =~ /_R$/); $s->[1] |= 2 if ($is_paired); # read & quality $s->[9] = "*"; $s->[10] = "*"; # cigar $s->[5] = $len . "M"; # coor my @s = split(/\s+/, $t[1]); $s->[2] = $s[0]; $t[1] =~ /:(\d+)$/; $s->[3] = $1 + 1; if ($s->[0] =~ /_[FR]$/) { my $u = ($s->[0] =~ /_F$/)? 1 : 0; my $w = ($t[2] eq '+')? 1 : 0; $s->[1] |= 0x10 if ($u ^ $w); $s->[0] =~ s/_[FR]$//; } else { $s->[1] |= 0x10 if ($t[2] eq '-'); } # mapQ $s->[4] = 30; # mate coordinate $s->[6] = '*'; $s->[7] = $s->[8] = 0; # aux push(@$s, "NM:i:$t[3]"); } genometools-1.5.1/src/external/samtools-0.1.18/phase.c000066400000000000000000000505231211610345200223120ustar00rootroot00000000000000#include #include #include #include #include #include #include "bam.h" #include "errmod.h" #include "kseq.h" KSTREAM_INIT(gzFile, gzread, 16384) #define MAX_VARS 256 #define FLIP_PENALTY 2 #define FLIP_THRES 4 #define MASK_THRES 3 #define FLAG_FIX_CHIMERA 0x1 #define FLAG_LIST_EXCL 0x4 #define FLAG_DROP_AMBI 0x8 typedef struct { // configurations, initialized in the main function int flag, k, min_baseQ, min_varLOD, max_depth; // other global variables int vpos_shift; bamFile fp; char *pre; bamFile out[3]; // alignment queue int n, m; bam1_t **b; } phaseg_t; typedef struct { int8_t seq[MAX_VARS]; // TODO: change to dynamic memory allocation! int vpos, beg, end; uint32_t vlen:16, single:1, flip:1, phase:1, phased:1, ambig:1; uint32_t in:16, out:16; // in-phase and out-phase } frag_t, *frag_p; #define rseq_lt(a,b) ((a)->vpos < (b)->vpos) #include "khash.h" KHASH_SET_INIT_INT64(set64) KHASH_MAP_INIT_INT64(64, frag_t) typedef khash_t(64) nseq_t; #include "ksort.h" KSORT_INIT(rseq, frag_p, rseq_lt) static char nt16_nt4_table[] = { 4, 0, 1, 4, 2, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4 }; static inline uint64_t X31_hash_string(const char *s) { uint64_t h = *s; if (h) for (++s ; *s; ++s) h = (h << 5) - h + *s; return h; } static void count1(int l, const uint8_t *seq, int *cnt) { int i, j, n_ambi; uint32_t z, x; if (seq[l-1] == 0) return; // do nothing is the last base is ambiguous for (i = n_ambi = 0; i < l; ++i) // collect ambiguous bases if (seq[i] == 0) ++n_ambi; if (l - n_ambi <= 1) return; // only one SNP for (x = 0; x < 1u<>j&1; ++j; } z = z<<1 | c; } ++cnt[z]; } } static int **count_all(int l, int vpos, nseq_t *hash) { khint_t k; int i, j, **cnt; uint8_t *seq; seq = calloc(l, 1); cnt = calloc(vpos, sizeof(void*)); for (i = 0; i < vpos; ++i) cnt[i] = calloc(1<vpos >= vpos || f->single) continue; // out of region; or singleton if (f->vlen == 1) { // such reads should be flagged as deleted previously if everything is right f->single = 1; continue; } for (j = 1; j < f->vlen; ++j) { for (i = 0; i < l; ++i) seq[i] = j < l - 1 - i? 0 : f->seq[j - (l - 1 - i)]; count1(l, seq, cnt[f->vpos + j]); } } } free(seq); return cnt; } // phasing static int8_t *dynaprog(int l, int vpos, int **w) { int *f[2], *curr, *prev, max, i; int8_t **b, *h = 0; uint32_t x, z = 1u<<(l-1), mask = (1u<>1; y1 = xc>>1; c0 = prev[y0] + wi[x] + wi[xc]; c1 = prev[y1] + wi[x] + wi[xc]; if (c0 > c1) bi[x] = 0, curr[x] = c0; else bi[x] = 1, curr[x] = c1; } tmp = prev; prev = curr; curr = tmp; // swap } { // backtrack uint32_t max_x = 0; int which = 0; h = calloc(vpos, 1); for (x = 0, max = 0, max_x = 0; x < z; ++x) if (prev[x] > max) max = prev[x], max_x = x; for (i = vpos - 1, x = max_x; i >= 0; --i) { h[i] = which? (~x&1) : (x&1); which = b[i][x]? !which : which; x = b[i][x]? (~x&mask)>>1 : x>>1; } } // free for (i = 0; i < vpos; ++i) free(b[i]); free(f[0]); free(f[1]); free(b); return h; } // phase each fragment static uint64_t *fragphase(int vpos, const int8_t *path, nseq_t *hash, int flip) { khint_t k; uint64_t *pcnt; uint32_t *left, *rght, max; left = rght = 0; max = 0; pcnt = calloc(vpos, 8); for (k = 0; k < kh_end(hash); ++k) { if (kh_exist(hash, k)) { int i, c[2]; frag_t *f = &kh_val(hash, k); if (f->vpos >= vpos) continue; // get the phase c[0] = c[1] = 0; for (i = 0; i < f->vlen; ++i) { if (f->seq[i] == 0) continue; ++c[f->seq[i] == path[f->vpos + i] + 1? 0 : 1]; } f->phase = c[0] > c[1]? 0 : 1; f->in = c[f->phase]; f->out = c[1 - f->phase]; f->phased = f->in == f->out? 0 : 1; f->ambig = (f->in && f->out && f->out < 3 && f->in <= f->out + 1)? 1 : 0; // fix chimera f->flip = 0; if (flip && c[0] >= 3 && c[1] >= 3) { int sum[2], m, mi, md; if (f->vlen > max) { // enlarge the array max = f->vlen; kroundup32(max); left = realloc(left, max * 4); rght = realloc(rght, max * 4); } for (i = 0, sum[0] = sum[1] = 0; i < f->vlen; ++i) { // get left counts if (f->seq[i]) { int c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; ++sum[c == path[f->vpos + i]? 0 : 1]; } left[i] = sum[1]<<16 | sum[0]; } for (i = f->vlen - 1, sum[0] = sum[1] = 0; i >= 0; --i) { // get right counts if (f->seq[i]) { int c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; ++sum[c == path[f->vpos + i]? 0 : 1]; } rght[i] = sum[1]<<16 | sum[0]; } // find the best flip point for (i = m = 0, mi = -1, md = -1; i < f->vlen - 1; ++i) { int a[2]; a[0] = (left[i]&0xffff) + (rght[i+1]>>16&0xffff) - (rght[i+1]&0xffff) * FLIP_PENALTY; a[1] = (left[i]>>16&0xffff) + (rght[i+1]&0xffff) - (rght[i+1]>>16&0xffff) * FLIP_PENALTY; if (a[0] > a[1]) { if (a[0] > m) m = a[0], md = 0, mi = i; } else { if (a[1] > m) m = a[1], md = 1, mi = i; } } if (m - c[0] >= FLIP_THRES && m - c[1] >= FLIP_THRES) { // then flip f->flip = 1; if (md == 0) { // flip the tail for (i = mi + 1; i < f->vlen; ++i) if (f->seq[i] == 1) f->seq[i] = 2; else if (f->seq[i] == 2) f->seq[i] = 1; } else { // flip the head for (i = 0; i <= mi; ++i) if (f->seq[i] == 1) f->seq[i] = 2; else if (f->seq[i] == 2) f->seq[i] = 1; } } } // update pcnt[] if (!f->single) { for (i = 0; i < f->vlen; ++i) { int c; if (f->seq[i] == 0) continue; c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; if (c == path[f->vpos + i]) { if (f->phase == 0) ++pcnt[f->vpos + i]; else pcnt[f->vpos + i] += 1ull<<32; } else { if (f->phase == 0) pcnt[f->vpos + i] += 1<<16; else pcnt[f->vpos + i] += 1ull<<48; } } } } } free(left); free(rght); return pcnt; } static uint64_t *genmask(int vpos, const uint64_t *pcnt, int *_n) { int i, max = 0, max_i = -1, m = 0, n = 0, beg = 0, score = 0; uint64_t *list = 0; for (i = 0; i < vpos; ++i) { uint64_t x = pcnt[i]; int c[4], pre = score, s; c[0] = x&0xffff; c[1] = x>>16&0xffff; c[2] = x>>32&0xffff; c[3] = x>>48&0xffff; s = (c[1] + c[3] == 0)? -(c[0] + c[2]) : (c[1] + c[3] - 1); if (c[3] > c[2]) s += c[3] - c[2]; if (c[1] > c[0]) s += c[1] - c[0]; score += s; if (score < 0) score = 0; if (pre == 0 && score > 0) beg = i; // change from zero to non-zero if ((i == vpos - 1 || score == 0) && max >= MASK_THRES) { if (n == m) { m = m? m<<1 : 4; list = realloc(list, m * 8); } list[n++] = (uint64_t)beg<<32 | max_i; i = max_i; // reset i to max_i score = 0; } else if (score > max) max = score, max_i = i; if (score == 0) max = 0; } *_n = n; return list; } // trim heading and tailing ambiguous bases; mark deleted and remove sequence static int clean_seqs(int vpos, nseq_t *hash) { khint_t k; int ret = 0; for (k = 0; k < kh_end(hash); ++k) { if (kh_exist(hash, k)) { frag_t *f = &kh_val(hash, k); int beg, end, i; if (f->vpos >= vpos) { ret = 1; continue; } for (i = 0; i < f->vlen; ++i) if (f->seq[i] != 0) break; beg = i; for (i = f->vlen - 1; i >= 0; --i) if (f->seq[i] != 0) break; end = i + 1; if (end - beg <= 0) kh_del(64, hash, k); else { if (beg != 0) memmove(f->seq, f->seq + beg, end - beg); f->vpos += beg; f->vlen = end - beg; f->single = f->vlen == 1? 1 : 0; } } } return ret; } static void dump_aln(phaseg_t *g, int min_pos, const nseq_t *hash) { int i, is_flip, drop_ambi; drop_ambi = g->flag & FLAG_DROP_AMBI; is_flip = (drand48() < 0.5); for (i = 0; i < g->n; ++i) { int end, which; uint64_t key; khint_t k; bam1_t *b = g->b[i]; key = X31_hash_string(bam1_qname(b)); end = bam_calend(&b->core, bam1_cigar(b)); if (end > min_pos) break; k = kh_get(64, hash, key); if (k == kh_end(hash)) which = 3; else { frag_t *f = &kh_val(hash, k); if (f->ambig) which = drop_ambi? 2 : 3; else if (f->phased && f->flip) which = 2; else if (f->phased == 0) which = 3; else { // phased and not flipped char c = 'Y'; which = f->phase; bam_aux_append(b, "ZP", 'A', 1, (uint8_t*)&c); } if (which < 2 && is_flip) which = 1 - which; // increase the randomness } if (which == 3) which = (drand48() < 0.5); bam_write1(g->out[which], b); bam_destroy1(b); g->b[i] = 0; } memmove(g->b, g->b + i, (g->n - i) * sizeof(void*)); g->n -= i; } static int phase(phaseg_t *g, const char *chr, int vpos, uint64_t *cns, nseq_t *hash) { int i, j, n_seqs = kh_size(hash), n_masked = 0, min_pos; khint_t k; frag_t **seqs; int8_t *path, *sitemask; uint64_t *pcnt, *regmask; if (vpos == 0) return 0; i = clean_seqs(vpos, hash); // i is true if hash has an element with its vpos >= vpos min_pos = i? cns[vpos]>>32 : 0x7fffffff; if (vpos == 1) { printf("PS\t%s\t%d\t%d\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[0]>>32) + 1); printf("M0\t%s\t%d\t%d\t%c\t%c\t%d\t0\t0\t0\t0\n//\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[0]>>32) + 1, "ACGTX"[cns[0]&3], "ACGTX"[cns[0]>>16&3], g->vpos_shift + 1); for (k = 0; k < kh_end(hash); ++k) { if (kh_exist(hash, k)) { frag_t *f = &kh_val(hash, k); if (f->vpos) continue; f->flip = 0; if (f->seq[0] == 0) f->phased = 0; else f->phased = 1, f->phase = f->seq[0] - 1; } } dump_aln(g, min_pos, hash); ++g->vpos_shift; return 1; } { // phase int **cnt; uint64_t *mask; printf("PS\t%s\t%d\t%d\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[vpos-1]>>32) + 1); sitemask = calloc(vpos, 1); cnt = count_all(g->k, vpos, hash); path = dynaprog(g->k, vpos, cnt); for (i = 0; i < vpos; ++i) free(cnt[i]); free(cnt); pcnt = fragphase(vpos, path, hash, 0); // do not fix chimeras when masking mask = genmask(vpos, pcnt, &n_masked); regmask = calloc(n_masked, 8); for (i = 0; i < n_masked; ++i) { regmask[i] = cns[mask[i]>>32]>>32<<32 | cns[(uint32_t)mask[i]]>>32; for (j = mask[i]>>32; j <= (int32_t)mask[i]; ++j) sitemask[j] = 1; } free(mask); if (g->flag & FLAG_FIX_CHIMERA) { free(pcnt); pcnt = fragphase(vpos, path, hash, 1); } } for (i = 0; i < n_masked; ++i) printf("FL\t%s\t%d\t%d\n", chr, (int)(regmask[i]>>32) + 1, (int)regmask[i] + 1); for (i = 0; i < vpos; ++i) { uint64_t x = pcnt[i]; int8_t c[2]; c[0] = (cns[i]&0xffff)>>2 == 0? 4 : (cns[i]&3); c[1] = (cns[i]>>16&0xffff)>>2 == 0? 4 : (cns[i]>>16&3); printf("M%d\t%s\t%d\t%d\t%c\t%c\t%d\t%d\t%d\t%d\t%d\n", sitemask[i]+1, chr, (int)(cns[0]>>32) + 1, (int)(cns[i]>>32) + 1, "ACGTX"[c[path[i]]], "ACGTX"[c[1-path[i]]], i + g->vpos_shift + 1, (int)(x&0xffff), (int)(x>>16&0xffff), (int)(x>>32&0xffff), (int)(x>>48&0xffff)); } free(path); free(pcnt); free(regmask); free(sitemask); seqs = calloc(n_seqs, sizeof(void*)); for (k = 0, i = 0; k < kh_end(hash); ++k) if (kh_exist(hash, k) && kh_val(hash, k).vpos < vpos && !kh_val(hash, k).single) seqs[i++] = &kh_val(hash, k); n_seqs = i; ks_introsort_rseq(n_seqs, seqs); for (i = 0; i < n_seqs; ++i) { frag_t *f = seqs[i]; printf("EV\t0\t%s\t%d\t40\t%dM\t*\t0\t0\t", chr, f->vpos + 1 + g->vpos_shift, f->vlen); for (j = 0; j < f->vlen; ++j) { uint32_t c = cns[f->vpos + j]; if (f->seq[j] == 0) putchar('N'); else putchar("ACGT"[f->seq[j] == 1? (c&3) : (c>>16&3)]); } printf("\t*\tYP:i:%d\tYF:i:%d\tYI:i:%d\tYO:i:%d\tYS:i:%d\n", f->phase, f->flip, f->in, f->out, f->beg+1); } free(seqs); printf("//\n"); fflush(stdout); g->vpos_shift += vpos; dump_aln(g, min_pos, hash); return vpos; } static void update_vpos(int vpos, nseq_t *hash) { khint_t k; for (k = 0; k < kh_end(hash); ++k) { if (kh_exist(hash, k)) { frag_t *f = &kh_val(hash, k); if (f->vpos < vpos) kh_del(64, hash, k); // TODO: if frag_t::seq is allocated dynamically, free it else f->vpos -= vpos; } } } static nseq_t *shrink_hash(nseq_t *hash) // TODO: to implement { return hash; } static int readaln(void *data, bam1_t *b) { phaseg_t *g = (phaseg_t*)data; int ret; ret = bam_read1(g->fp, b); if (ret < 0) return ret; if (!(b->core.flag & (BAM_FUNMAP|BAM_FSECONDARY|BAM_FQCFAIL|BAM_FDUP)) && g->pre) { if (g->n == g->m) { g->m = g->m? g->m<<1 : 16; g->b = realloc(g->b, g->m * sizeof(void*)); } g->b[g->n++] = bam_dup1(b); } return ret; } static khash_t(set64) *loadpos(const char *fn, bam_header_t *h) { gzFile fp; kstream_t *ks; int ret, dret; kstring_t *str; khash_t(set64) *hash; hash = kh_init(set64); str = calloc(1, sizeof(kstring_t)); fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); ks = ks_init(fp); while (ks_getuntil(ks, 0, str, &dret) >= 0) { int tid = bam_get_tid(h, str->s); if (tid >= 0 && dret != '\n') { if (ks_getuntil(ks, 0, str, &dret) >= 0) { uint64_t x = (uint64_t)tid<<32 | (atoi(str->s) - 1); kh_put(set64, hash, x, &ret); } else break; } if (dret != '\n') while ((dret = ks_getc(ks)) > 0 && dret != '\n'); if (dret < 0) break; } ks_destroy(ks); gzclose(fp); free(str->s); free(str); return hash; } static int gl2cns(float q[16]) { int i, j, min_ij; float min, min2; min = min2 = 1e30; min_ij = -1; for (i = 0; i < 4; ++i) { for (j = i; j < 4; ++j) { if (q[i<<2|j] < min) min_ij = i<<2|j, min2 = min, min = q[i<<2|j]; else if (q[i<<2|j] < min2) min2 = q[i<<2|j]; } } return (min_ij>>2&3) == (min_ij&3)? 0 : 1<<18 | (min_ij>>2&3)<<16 | (min_ij&3) | (int)(min2 - min + .499) << 2; } int main_phase(int argc, char *argv[]) { extern void bam_init_header_hash(bam_header_t *header); int c, tid, pos, vpos = 0, n, lasttid = -1, max_vpos = 0; const bam_pileup1_t *plp; bam_plp_t iter; bam_header_t *h; nseq_t *seqs; uint64_t *cns = 0; phaseg_t g; char *fn_list = 0; khash_t(set64) *set = 0; errmod_t *em; uint16_t *bases; memset(&g, 0, sizeof(phaseg_t)); g.flag = FLAG_FIX_CHIMERA; g.min_varLOD = 37; g.k = 13; g.min_baseQ = 13; g.max_depth = 256; while ((c = getopt(argc, argv, "Q:eFq:k:b:l:D:A:")) >= 0) { switch (c) { case 'D': g.max_depth = atoi(optarg); break; case 'q': g.min_varLOD = atoi(optarg); break; case 'Q': g.min_baseQ = atoi(optarg); break; case 'k': g.k = atoi(optarg); break; case 'F': g.flag &= ~FLAG_FIX_CHIMERA; break; case 'e': g.flag |= FLAG_LIST_EXCL; break; case 'A': g.flag |= FLAG_DROP_AMBI; break; case 'b': g.pre = strdup(optarg); break; case 'l': fn_list = strdup(optarg); break; } } if (argc == optind) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: samtools phase [options] \n\n"); fprintf(stderr, "Options: -k INT block length [%d]\n", g.k); fprintf(stderr, " -b STR prefix of BAMs to output [null]\n"); fprintf(stderr, " -q INT min het phred-LOD [%d]\n", g.min_varLOD); fprintf(stderr, " -Q INT min base quality in het calling [%d]\n", g.min_baseQ); fprintf(stderr, " -D INT max read depth [%d]\n", g.max_depth); // fprintf(stderr, " -l FILE list of sites to phase [null]\n"); fprintf(stderr, " -F do not attempt to fix chimeras\n"); fprintf(stderr, " -A drop reads with ambiguous phase\n"); // fprintf(stderr, " -e do not discover SNPs (effective with -l)\n"); fprintf(stderr, "\n"); return 1; } g.fp = strcmp(argv[optind], "-")? bam_open(argv[optind], "r") : bam_dopen(fileno(stdin), "r"); h = bam_header_read(g.fp); if (fn_list) { // read the list of sites to phase bam_init_header_hash(h); set = loadpos(fn_list, h); free(fn_list); } else g.flag &= ~FLAG_LIST_EXCL; if (g.pre) { // open BAMs to write char *s = malloc(strlen(g.pre) + 20); strcpy(s, g.pre); strcat(s, ".0.bam"); g.out[0] = bam_open(s, "w"); strcpy(s, g.pre); strcat(s, ".1.bam"); g.out[1] = bam_open(s, "w"); strcpy(s, g.pre); strcat(s, ".chimera.bam"); g.out[2] = bam_open(s, "w"); for (c = 0; c <= 2; ++c) bam_header_write(g.out[c], h); free(s); } iter = bam_plp_init(readaln, &g); g.vpos_shift = 0; seqs = kh_init(64); em = errmod_init(1. - 0.83); bases = calloc(g.max_depth, 2); printf("CC\n"); printf("CC\tDescriptions:\nCC\n"); printf("CC\t CC comments\n"); printf("CC\t PS start of a phase set\n"); printf("CC\t FL filtered region\n"); printf("CC\t M[012] markers; 0 for singletons, 1 for phased and 2 for filtered\n"); printf("CC\t EV supporting reads; SAM format\n"); printf("CC\t // end of a phase set\nCC\n"); printf("CC\tFormats of PS, FL and M[012] lines (1-based coordinates):\nCC\n"); printf("CC\t PS chr phaseSetStart phaseSetEnd\n"); printf("CC\t FL chr filterStart filterEnd\n"); printf("CC\t M? chr PS pos allele0 allele1 hetIndex #supports0 #errors0 #supp1 #err1\n"); printf("CC\nCC\n"); fflush(stdout); while ((plp = bam_plp_auto(iter, &tid, &pos, &n)) != 0) { int i, k, c, tmp, dophase = 1, in_set = 0; float q[16]; if (tid < 0) break; if (tid != lasttid) { // change of chromosome g.vpos_shift = 0; if (lasttid >= 0) { seqs = shrink_hash(seqs); phase(&g, h->target_name[lasttid], vpos, cns, seqs); update_vpos(0x7fffffff, seqs); } lasttid = tid; vpos = 0; } if (set && kh_get(set64, set, (uint64_t)tid<<32 | pos) != kh_end(set)) in_set = 1; if (n > g.max_depth) continue; // do not proceed if the depth is too high // fill the bases array and check if there is a variant for (i = k = 0; i < n; ++i) { const bam_pileup1_t *p = plp + i; uint8_t *seq; int q, baseQ, b; if (p->is_del || p->is_refskip) continue; baseQ = bam1_qual(p->b)[p->qpos]; if (baseQ < g.min_baseQ) continue; seq = bam1_seq(p->b); b = bam_nt16_nt4_table[bam1_seqi(seq, p->qpos)]; if (b > 3) continue; q = baseQ < p->b->core.qual? baseQ : p->b->core.qual; if (q < 4) q = 4; if (q > 63) q = 63; bases[k++] = q<<5 | (int)bam1_strand(p->b)<<4 | b; } if (k == 0) continue; errmod_cal(em, k, 4, bases, q); // compute genotype likelihood c = gl2cns(q); // get the consensus // tell if to proceed if (set && (g.flag&FLAG_LIST_EXCL) && !in_set) continue; // not in the list if (!in_set && (c&0xffff)>>2 < g.min_varLOD) continue; // not a variant // add the variant if (vpos == max_vpos) { max_vpos = max_vpos? max_vpos<<1 : 128; cns = realloc(cns, max_vpos * 8); } cns[vpos] = (uint64_t)pos<<32 | c; for (i = 0; i < n; ++i) { const bam_pileup1_t *p = plp + i; uint64_t key; khint_t k; uint8_t *seq = bam1_seq(p->b); frag_t *f; if (p->is_del || p->is_refskip) continue; if (p->b->core.qual == 0) continue; // get the base code c = nt16_nt4_table[(int)bam1_seqi(seq, p->qpos)]; if (c == (cns[vpos]&3)) c = 1; else if (c == (cns[vpos]>>16&3)) c = 2; else c = 0; // write to seqs key = X31_hash_string(bam1_qname(p->b)); k = kh_put(64, seqs, key, &tmp); f = &kh_val(seqs, k); if (tmp == 0) { // present in the hash table if (vpos - f->vpos + 1 < MAX_VARS) { f->vlen = vpos - f->vpos + 1; f->seq[f->vlen-1] = c; f->end = bam_calend(&p->b->core, bam1_cigar(p->b)); } dophase = 0; } else { // absent memset(f->seq, 0, MAX_VARS); f->beg = p->b->core.pos; f->end = bam_calend(&p->b->core, bam1_cigar(p->b)); f->vpos = vpos, f->vlen = 1, f->seq[0] = c, f->single = f->phased = f->flip = f->ambig = 0; } } if (dophase) { seqs = shrink_hash(seqs); phase(&g, h->target_name[tid], vpos, cns, seqs); update_vpos(vpos, seqs); cns[0] = cns[vpos]; vpos = 0; } ++vpos; } if (tid >= 0) phase(&g, h->target_name[tid], vpos, cns, seqs); bam_header_destroy(h); bam_plp_destroy(iter); bam_close(g.fp); kh_destroy(64, seqs); kh_destroy(set64, set); free(cns); errmod_destroy(em); free(bases); if (g.pre) { for (c = 0; c <= 2; ++c) bam_close(g.out[c]); free(g.pre); free(g.b); } return 0; } genometools-1.5.1/src/external/samtools-0.1.18/razf.c000066400000000000000000000574271211610345200221660ustar00rootroot00000000000000/* * RAZF : Random Access compressed(Z) File * Version: 1.0 * Release Date: 2008-10-27 * * Copyright 2008, Jue Ruan , Heng Li * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. */ #ifndef _NO_RAZF #include #include #include #include #include #include "razf.h" #if ZLIB_VERNUM < 0x1221 struct _gz_header_s { int text; uLong time; int xflags; int os; Bytef *extra; uInt extra_len; uInt extra_max; Bytef *name; uInt name_max; Bytef *comment; uInt comm_max; int hcrc; int done; }; #warning "zlib < 1.2.2.1; RAZF writing is disabled." #endif #define DEF_MEM_LEVEL 8 static inline uint32_t byte_swap_4(uint32_t v){ v = ((v & 0x0000FFFFU) << 16) | (v >> 16); return ((v & 0x00FF00FFU) << 8) | ((v & 0xFF00FF00U) >> 8); } static inline uint64_t byte_swap_8(uint64_t v){ v = ((v & 0x00000000FFFFFFFFLLU) << 32) | (v >> 32); v = ((v & 0x0000FFFF0000FFFFLLU) << 16) | ((v & 0xFFFF0000FFFF0000LLU) >> 16); return ((v & 0x00FF00FF00FF00FFLLU) << 8) | ((v & 0xFF00FF00FF00FF00LLU) >> 8); } static inline int is_big_endian(){ int x = 0x01; char *c = (char*)&x; return (c[0] != 0x01); } #ifndef _RZ_READONLY static void add_zindex(RAZF *rz, int64_t in, int64_t out){ if(rz->index->size == rz->index->cap){ rz->index->cap = rz->index->cap * 1.5 + 2; rz->index->cell_offsets = realloc(rz->index->cell_offsets, sizeof(int) * rz->index->cap); rz->index->bin_offsets = realloc(rz->index->bin_offsets, sizeof(int64_t) * (rz->index->cap/RZ_BIN_SIZE + 1)); } if(rz->index->size % RZ_BIN_SIZE == 0) rz->index->bin_offsets[rz->index->size / RZ_BIN_SIZE] = out; rz->index->cell_offsets[rz->index->size] = out - rz->index->bin_offsets[rz->index->size / RZ_BIN_SIZE]; rz->index->size ++; } static void save_zindex(RAZF *rz, int fd){ int32_t i, v32; int is_be; is_be = is_big_endian(); if(is_be) write(fd, &rz->index->size, sizeof(int)); else { v32 = byte_swap_4((uint32_t)rz->index->size); write(fd, &v32, sizeof(uint32_t)); } v32 = rz->index->size / RZ_BIN_SIZE + 1; if(!is_be){ for(i=0;iindex->bin_offsets[i] = byte_swap_8((uint64_t)rz->index->bin_offsets[i]); for(i=0;iindex->size;i++) rz->index->cell_offsets[i] = byte_swap_4((uint32_t)rz->index->cell_offsets[i]); } write(fd, rz->index->bin_offsets, sizeof(int64_t) * v32); write(fd, rz->index->cell_offsets, sizeof(int32_t) * rz->index->size); } #endif #ifdef _USE_KNETFILE static void load_zindex(RAZF *rz, knetFile *fp){ #else static void load_zindex(RAZF *rz, int fd){ #endif int32_t i, v32; int is_be; if(!rz->load_index) return; if(rz->index == NULL) rz->index = malloc(sizeof(ZBlockIndex)); is_be = is_big_endian(); #ifdef _USE_KNETFILE knet_read(fp, &rz->index->size, sizeof(int)); #else read(fd, &rz->index->size, sizeof(int)); #endif if(!is_be) rz->index->size = byte_swap_4((uint32_t)rz->index->size); rz->index->cap = rz->index->size; v32 = rz->index->size / RZ_BIN_SIZE + 1; rz->index->bin_offsets = malloc(sizeof(int64_t) * v32); #ifdef _USE_KNETFILE knet_read(fp, rz->index->bin_offsets, sizeof(int64_t) * v32); #else read(fd, rz->index->bin_offsets, sizeof(int64_t) * v32); #endif rz->index->cell_offsets = malloc(sizeof(int) * rz->index->size); #ifdef _USE_KNETFILE knet_read(fp, rz->index->cell_offsets, sizeof(int) * rz->index->size); #else read(fd, rz->index->cell_offsets, sizeof(int) * rz->index->size); #endif if(!is_be){ for(i=0;iindex->bin_offsets[i] = byte_swap_8((uint64_t)rz->index->bin_offsets[i]); for(i=0;iindex->size;i++) rz->index->cell_offsets[i] = byte_swap_4((uint32_t)rz->index->cell_offsets[i]); } } #ifdef _RZ_READONLY static RAZF* razf_open_w(int fd) { fprintf(stderr, "[razf_open_w] Writing is not available with zlib ver < 1.2.2.1\n"); return 0; } #else static RAZF* razf_open_w(int fd){ RAZF *rz; #ifdef _WIN32 setmode(fd, O_BINARY); #endif rz = calloc(1, sizeof(RAZF)); rz->mode = 'w'; #ifdef _USE_KNETFILE rz->x.fpw = fd; #else rz->filedes = fd; #endif rz->stream = calloc(sizeof(z_stream), 1); rz->inbuf = malloc(RZ_BUFFER_SIZE); rz->outbuf = malloc(RZ_BUFFER_SIZE); rz->index = calloc(sizeof(ZBlockIndex), 1); deflateInit2(rz->stream, RZ_COMPRESS_LEVEL, Z_DEFLATED, WINDOW_BITS + 16, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); rz->stream->avail_out = RZ_BUFFER_SIZE; rz->stream->next_out = rz->outbuf; rz->header = calloc(sizeof(gz_header), 1); rz->header->os = 0x03; //Unix rz->header->text = 0; rz->header->time = 0; rz->header->extra = malloc(7); strncpy((char*)rz->header->extra, "RAZF", 4); rz->header->extra[4] = 1; // obsolete field // block size = RZ_BLOCK_SIZE, Big-Endian rz->header->extra[5] = RZ_BLOCK_SIZE >> 8; rz->header->extra[6] = RZ_BLOCK_SIZE & 0xFF; rz->header->extra_len = 7; rz->header->name = rz->header->comment = 0; rz->header->hcrc = 0; deflateSetHeader(rz->stream, rz->header); rz->block_pos = rz->block_off = 0; return rz; } static void _razf_write(RAZF* rz, const void *data, int size){ int tout; rz->stream->avail_in = size; rz->stream->next_in = (void*)data; while(1){ tout = rz->stream->avail_out; deflate(rz->stream, Z_NO_FLUSH); rz->out += tout - rz->stream->avail_out; if(rz->stream->avail_out) break; #ifdef _USE_KNETFILE write(rz->x.fpw, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); #else write(rz->filedes, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); #endif rz->stream->avail_out = RZ_BUFFER_SIZE; rz->stream->next_out = rz->outbuf; if(rz->stream->avail_in == 0) break; }; rz->in += size - rz->stream->avail_in; rz->block_off += size - rz->stream->avail_in; } static void razf_flush(RAZF *rz){ uint32_t tout; if(rz->buf_len){ _razf_write(rz, rz->inbuf, rz->buf_len); rz->buf_off = rz->buf_len = 0; } if(rz->stream->avail_out){ #ifdef _USE_KNETFILE write(rz->x.fpw, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); #else write(rz->filedes, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); #endif rz->stream->avail_out = RZ_BUFFER_SIZE; rz->stream->next_out = rz->outbuf; } while(1){ tout = rz->stream->avail_out; deflate(rz->stream, Z_FULL_FLUSH); rz->out += tout - rz->stream->avail_out; if(rz->stream->avail_out == 0){ #ifdef _USE_KNETFILE write(rz->x.fpw, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); #else write(rz->filedes, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); #endif rz->stream->avail_out = RZ_BUFFER_SIZE; rz->stream->next_out = rz->outbuf; } else break; } rz->block_pos = rz->out; rz->block_off = 0; } static void razf_end_flush(RAZF *rz){ uint32_t tout; if(rz->buf_len){ _razf_write(rz, rz->inbuf, rz->buf_len); rz->buf_off = rz->buf_len = 0; } while(1){ tout = rz->stream->avail_out; deflate(rz->stream, Z_FINISH); rz->out += tout - rz->stream->avail_out; if(rz->stream->avail_out < RZ_BUFFER_SIZE){ #ifdef _USE_KNETFILE write(rz->x.fpw, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); #else write(rz->filedes, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); #endif rz->stream->avail_out = RZ_BUFFER_SIZE; rz->stream->next_out = rz->outbuf; } else break; } } static void _razf_buffered_write(RAZF *rz, const void *data, int size){ int i, n; while(1){ if(rz->buf_len == RZ_BUFFER_SIZE){ _razf_write(rz, rz->inbuf, rz->buf_len); rz->buf_len = 0; } if(size + rz->buf_len < RZ_BUFFER_SIZE){ for(i=0;iinbuf + rz->buf_len)[i] = ((char*)data)[i]; rz->buf_len += size; return; } else { n = RZ_BUFFER_SIZE - rz->buf_len; for(i=0;iinbuf + rz->buf_len)[i] = ((char*)data)[i]; size -= n; data += n; rz->buf_len += n; } } } int razf_write(RAZF* rz, const void *data, int size){ int ori_size, n; int64_t next_block; ori_size = size; next_block = ((rz->in / RZ_BLOCK_SIZE) + 1) * RZ_BLOCK_SIZE; while(rz->in + rz->buf_len + size >= next_block){ n = next_block - rz->in - rz->buf_len; _razf_buffered_write(rz, data, n); data += n; size -= n; razf_flush(rz); add_zindex(rz, rz->in, rz->out); next_block = ((rz->in / RZ_BLOCK_SIZE) + 1) * RZ_BLOCK_SIZE; } _razf_buffered_write(rz, data, size); return ori_size; } #endif /* gzip flag byte */ #define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ #define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ #define ORIG_NAME 0x08 /* bit 3 set: original file name present */ #define COMMENT 0x10 /* bit 4 set: file comment present */ #define RESERVED 0xE0 /* bits 5..7: reserved */ static int _read_gz_header(unsigned char *data, int size, int *extra_off, int *extra_len){ int method, flags, n, len; if(size < 2) return 0; if(data[0] != 0x1f || data[1] != 0x8b) return 0; if(size < 4) return 0; method = data[2]; flags = data[3]; if(method != Z_DEFLATED || (flags & RESERVED)) return 0; n = 4 + 6; // Skip 6 bytes *extra_off = n + 2; *extra_len = 0; if(flags & EXTRA_FIELD){ if(size < n + 2) return 0; len = ((int)data[n + 1] << 8) | data[n]; n += 2; *extra_off = n; while(len){ if(n >= size) return 0; n ++; len --; } *extra_len = n - (*extra_off); } if(flags & ORIG_NAME) while(n < size && data[n++]); if(flags & COMMENT) while(n < size && data[n++]); if(flags & HEAD_CRC){ if(n + 2 > size) return 0; n += 2; } return n; } #ifdef _USE_KNETFILE static RAZF* razf_open_r(knetFile *fp, int _load_index){ #else static RAZF* razf_open_r(int fd, int _load_index){ #endif RAZF *rz; int ext_off, ext_len; int n, is_be, ret; int64_t end; unsigned char c[] = "RAZF"; rz = calloc(1, sizeof(RAZF)); rz->mode = 'r'; #ifdef _USE_KNETFILE rz->x.fpr = fp; #else #ifdef _WIN32 setmode(fd, O_BINARY); #endif rz->filedes = fd; #endif rz->stream = calloc(sizeof(z_stream), 1); rz->inbuf = malloc(RZ_BUFFER_SIZE); rz->outbuf = malloc(RZ_BUFFER_SIZE); rz->end = rz->src_end = 0x7FFFFFFFFFFFFFFFLL; #ifdef _USE_KNETFILE n = knet_read(rz->x.fpr, rz->inbuf, RZ_BUFFER_SIZE); #else n = read(rz->filedes, rz->inbuf, RZ_BUFFER_SIZE); #endif ret = _read_gz_header(rz->inbuf, n, &ext_off, &ext_len); if(ret == 0){ PLAIN_FILE: rz->in = n; rz->file_type = FILE_TYPE_PLAIN; memcpy(rz->outbuf, rz->inbuf, n); rz->buf_len = n; free(rz->stream); rz->stream = NULL; return rz; } rz->header_size = ret; ret = inflateInit2(rz->stream, -WINDOW_BITS); if(ret != Z_OK){ inflateEnd(rz->stream); goto PLAIN_FILE;} rz->stream->avail_in = n - rz->header_size; rz->stream->next_in = rz->inbuf + rz->header_size; rz->stream->avail_out = RZ_BUFFER_SIZE; rz->stream->next_out = rz->outbuf; rz->file_type = FILE_TYPE_GZ; rz->in = rz->header_size; rz->block_pos = rz->header_size; rz->next_block_pos = rz->header_size; rz->block_off = 0; if(ext_len < 7 || memcmp(rz->inbuf + ext_off, c, 4) != 0) return rz; if(((((unsigned char*)rz->inbuf)[ext_off + 5] << 8) | ((unsigned char*)rz->inbuf)[ext_off + 6]) != RZ_BLOCK_SIZE){ fprintf(stderr, " -- WARNING: RZ_BLOCK_SIZE is not %d, treat source as gz file. in %s -- %s:%d --\n", RZ_BLOCK_SIZE, __FUNCTION__, __FILE__, __LINE__); return rz; } rz->load_index = _load_index; rz->file_type = FILE_TYPE_RZ; #ifdef _USE_KNETFILE if(knet_seek(fp, -16, SEEK_END) == -1){ #else if(lseek(fd, -16, SEEK_END) == -1){ #endif UNSEEKABLE: rz->seekable = 0; rz->index = NULL; rz->src_end = rz->end = 0x7FFFFFFFFFFFFFFFLL; } else { is_be = is_big_endian(); rz->seekable = 1; #ifdef _USE_KNETFILE knet_read(fp, &end, sizeof(int64_t)); #else read(fd, &end, sizeof(int64_t)); #endif if(!is_be) rz->src_end = (int64_t)byte_swap_8((uint64_t)end); else rz->src_end = end; #ifdef _USE_KNETFILE knet_read(fp, &end, sizeof(int64_t)); #else read(fd, &end, sizeof(int64_t)); #endif if(!is_be) rz->end = (int64_t)byte_swap_8((uint64_t)end); else rz->end = end; if(n > rz->end){ rz->stream->avail_in -= n - rz->end; n = rz->end; } if(rz->end > rz->src_end){ #ifdef _USE_KNETFILE knet_seek(fp, rz->in, SEEK_SET); #else lseek(fd, rz->in, SEEK_SET); #endif goto UNSEEKABLE; } #ifdef _USE_KNETFILE knet_seek(fp, rz->end, SEEK_SET); if(knet_tell(fp) != rz->end){ knet_seek(fp, rz->in, SEEK_SET); #else if(lseek(fd, rz->end, SEEK_SET) != rz->end){ lseek(fd, rz->in, SEEK_SET); #endif goto UNSEEKABLE; } #ifdef _USE_KNETFILE load_zindex(rz, fp); knet_seek(fp, n, SEEK_SET); #else load_zindex(rz, fd); lseek(fd, n, SEEK_SET); #endif } return rz; } #ifdef _USE_KNETFILE RAZF* razf_dopen(int fd, const char *mode){ if (strstr(mode, "r")) fprintf(stderr,"[razf_dopen] implement me\n"); else if(strstr(mode, "w")) return razf_open_w(fd); return NULL; } RAZF* razf_dopen2(int fd, const char *mode) { fprintf(stderr,"[razf_dopen2] implement me\n"); return NULL; } #else RAZF* razf_dopen(int fd, const char *mode){ if(strstr(mode, "r")) return razf_open_r(fd, 1); else if(strstr(mode, "w")) return razf_open_w(fd); else return NULL; } RAZF* razf_dopen2(int fd, const char *mode) { if(strstr(mode, "r")) return razf_open_r(fd, 0); else if(strstr(mode, "w")) return razf_open_w(fd); else return NULL; } #endif static inline RAZF* _razf_open(const char *filename, const char *mode, int _load_index){ int fd; RAZF *rz; if(strstr(mode, "r")){ #ifdef _USE_KNETFILE knetFile *fd = knet_open(filename, "r"); if (fd == 0) { fprintf(stderr, "[_razf_open] fail to open %s\n", filename); return NULL; } #else #ifdef _WIN32 fd = open(filename, O_RDONLY | O_BINARY); #else fd = open(filename, O_RDONLY); #endif #endif if(fd < 0) return NULL; rz = razf_open_r(fd, _load_index); } else if(strstr(mode, "w")){ #ifdef _WIN32 fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666); #else fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666); #endif if(fd < 0) return NULL; rz = razf_open_w(fd); } else return NULL; return rz; } RAZF* razf_open(const char *filename, const char *mode){ return _razf_open(filename, mode, 1); } RAZF* razf_open2(const char *filename, const char *mode){ return _razf_open(filename, mode, 0); } int razf_get_data_size(RAZF *rz, int64_t *u_size, int64_t *c_size){ int64_t n; if(rz->mode != 'r' && rz->mode != 'R') return 0; switch(rz->file_type){ case FILE_TYPE_PLAIN: if(rz->end == 0x7fffffffffffffffLL){ #ifdef _USE_KNETFILE if(knet_seek(rz->x.fpr, 0, SEEK_CUR) == -1) return 0; n = knet_tell(rz->x.fpr); knet_seek(rz->x.fpr, 0, SEEK_END); rz->end = knet_tell(rz->x.fpr); knet_seek(rz->x.fpr, n, SEEK_SET); #else if((n = lseek(rz->filedes, 0, SEEK_CUR)) == -1) return 0; rz->end = lseek(rz->filedes, 0, SEEK_END); lseek(rz->filedes, n, SEEK_SET); #endif } *u_size = *c_size = rz->end; return 1; case FILE_TYPE_GZ: return 0; case FILE_TYPE_RZ: if(rz->src_end == rz->end) return 0; *u_size = rz->src_end; *c_size = rz->end; return 1; default: return 0; } } static int _razf_read(RAZF* rz, void *data, int size){ int ret, tin; if(rz->z_eof || rz->z_err) return 0; if (rz->file_type == FILE_TYPE_PLAIN) { #ifdef _USE_KNETFILE ret = knet_read(rz->x.fpr, data, size); #else ret = read(rz->filedes, data, size); #endif if (ret == 0) rz->z_eof = 1; return ret; } rz->stream->avail_out = size; rz->stream->next_out = data; while(rz->stream->avail_out){ if(rz->stream->avail_in == 0){ if(rz->in >= rz->end){ rz->z_eof = 1; break; } if(rz->end - rz->in < RZ_BUFFER_SIZE){ #ifdef _USE_KNETFILE rz->stream->avail_in = knet_read(rz->x.fpr, rz->inbuf, rz->end -rz->in); #else rz->stream->avail_in = read(rz->filedes, rz->inbuf, rz->end -rz->in); #endif } else { #ifdef _USE_KNETFILE rz->stream->avail_in = knet_read(rz->x.fpr, rz->inbuf, RZ_BUFFER_SIZE); #else rz->stream->avail_in = read(rz->filedes, rz->inbuf, RZ_BUFFER_SIZE); #endif } if(rz->stream->avail_in == 0){ rz->z_eof = 1; break; } rz->stream->next_in = rz->inbuf; } tin = rz->stream->avail_in; ret = inflate(rz->stream, Z_BLOCK); rz->in += tin - rz->stream->avail_in; if(ret == Z_NEED_DICT || ret == Z_MEM_ERROR || ret == Z_DATA_ERROR){ fprintf(stderr, "[_razf_read] inflate error: %d %s (at %s:%d)\n", ret, rz->stream->msg ? rz->stream->msg : "", __FILE__, __LINE__); rz->z_err = 1; break; } if(ret == Z_STREAM_END){ rz->z_eof = 1; break; } if ((rz->stream->data_type&128) && !(rz->stream->data_type&64)){ rz->buf_flush = 1; rz->next_block_pos = rz->in; break; } } return size - rz->stream->avail_out; } int razf_read(RAZF *rz, void *data, int size){ int ori_size, i; ori_size = size; while(size > 0){ if(rz->buf_len){ if(size < rz->buf_len){ for(i=0;ioutbuf + rz->buf_off)[i]; rz->buf_off += size; rz->buf_len -= size; data += size; rz->block_off += size; size = 0; break; } else { for(i=0;ibuf_len;i++) ((char*)data)[i] = ((char*)rz->outbuf + rz->buf_off)[i]; data += rz->buf_len; size -= rz->buf_len; rz->block_off += rz->buf_len; rz->buf_off = 0; rz->buf_len = 0; if(rz->buf_flush){ rz->block_pos = rz->next_block_pos; rz->block_off = 0; rz->buf_flush = 0; } } } else if(rz->buf_flush){ rz->block_pos = rz->next_block_pos; rz->block_off = 0; rz->buf_flush = 0; } if(rz->buf_flush) continue; rz->buf_len = _razf_read(rz, rz->outbuf, RZ_BUFFER_SIZE); if(rz->z_eof && rz->buf_len == 0) break; } rz->out += ori_size - size; return ori_size - size; } int razf_skip(RAZF* rz, int size){ int ori_size; ori_size = size; while(size > 0){ if(rz->buf_len){ if(size < rz->buf_len){ rz->buf_off += size; rz->buf_len -= size; rz->block_off += size; size = 0; break; } else { size -= rz->buf_len; rz->buf_off = 0; rz->buf_len = 0; rz->block_off += rz->buf_len; if(rz->buf_flush){ rz->block_pos = rz->next_block_pos; rz->block_off = 0; rz->buf_flush = 0; } } } else if(rz->buf_flush){ rz->block_pos = rz->next_block_pos; rz->block_off = 0; rz->buf_flush = 0; } if(rz->buf_flush) continue; rz->buf_len = _razf_read(rz, rz->outbuf, RZ_BUFFER_SIZE); if(rz->z_eof || rz->z_err) break; } rz->out += ori_size - size; return ori_size - size; } static void _razf_reset_read(RAZF *rz, int64_t in, int64_t out){ #ifdef _USE_KNETFILE knet_seek(rz->x.fpr, in, SEEK_SET); #else lseek(rz->filedes, in, SEEK_SET); #endif rz->in = in; rz->out = out; rz->block_pos = in; rz->next_block_pos = in; rz->block_off = 0; rz->buf_flush = 0; rz->z_eof = rz->z_err = 0; inflateReset(rz->stream); rz->stream->avail_in = 0; rz->buf_off = rz->buf_len = 0; } int64_t razf_jump(RAZF *rz, int64_t block_start, int block_offset){ int64_t pos; rz->z_eof = 0; if(rz->file_type == FILE_TYPE_PLAIN){ rz->buf_off = rz->buf_len = 0; pos = block_start + block_offset; #ifdef _USE_KNETFILE knet_seek(rz->x.fpr, pos, SEEK_SET); pos = knet_tell(rz->x.fpr); #else pos = lseek(rz->filedes, pos, SEEK_SET); #endif rz->out = rz->in = pos; return pos; } if(block_start == rz->block_pos && block_offset >= rz->block_off) { block_offset -= rz->block_off; goto SKIP; // Needn't reset inflate } if(block_start == 0) block_start = rz->header_size; // Automaticly revist wrong block_start _razf_reset_read(rz, block_start, 0); SKIP: if(block_offset) razf_skip(rz, block_offset); return rz->block_off; } int64_t razf_seek(RAZF* rz, int64_t pos, int where){ int64_t idx; int64_t seek_pos, new_out; rz->z_eof = 0; if (where == SEEK_CUR) pos += rz->out; else if (where == SEEK_END) pos += rz->src_end; if(rz->file_type == FILE_TYPE_PLAIN){ #ifdef _USE_KNETFILE knet_seek(rz->x.fpr, pos, SEEK_SET); seek_pos = knet_tell(rz->x.fpr); #else seek_pos = lseek(rz->filedes, pos, SEEK_SET); #endif rz->buf_off = rz->buf_len = 0; rz->out = rz->in = seek_pos; return seek_pos; } else if(rz->file_type == FILE_TYPE_GZ){ if(pos >= rz->out) goto SKIP; return rz->out; } if(pos == rz->out) return pos; if(pos > rz->src_end) return rz->out; if(!rz->seekable || !rz->load_index){ if(pos >= rz->out) goto SKIP; } idx = pos / RZ_BLOCK_SIZE - 1; seek_pos = (idx < 0)? rz->header_size:(rz->index->cell_offsets[idx] + rz->index->bin_offsets[idx / RZ_BIN_SIZE]); new_out = (idx + 1) * RZ_BLOCK_SIZE; if(pos > rz->out && new_out <= rz->out) goto SKIP; _razf_reset_read(rz, seek_pos, new_out); SKIP: razf_skip(rz, (int)(pos - rz->out)); return rz->out; } uint64_t razf_tell2(RAZF *rz) { /* if (rz->load_index) { int64_t idx, seek_pos; idx = rz->out / RZ_BLOCK_SIZE - 1; seek_pos = (idx < 0)? rz->header_size:(rz->index->cell_offsets[idx] + rz->index->bin_offsets[idx / RZ_BIN_SIZE]); if (seek_pos != rz->block_pos || rz->out%RZ_BLOCK_SIZE != rz->block_off) fprintf(stderr, "[razf_tell2] inconsistent block offset: (%lld, %lld) != (%lld, %lld)\n", (long long)seek_pos, (long long)rz->out%RZ_BLOCK_SIZE, (long long)rz->block_pos, (long long) rz->block_off); } */ return (uint64_t)rz->block_pos<<16 | (rz->block_off&0xffff); } int64_t razf_seek2(RAZF *rz, uint64_t voffset, int where) { if (where != SEEK_SET) return -1; return razf_jump(rz, voffset>>16, voffset&0xffff); } void razf_close(RAZF *rz){ if(rz->mode == 'w'){ #ifndef _RZ_READONLY razf_end_flush(rz); deflateEnd(rz->stream); #ifdef _USE_KNETFILE save_zindex(rz, rz->x.fpw); if(is_big_endian()){ write(rz->x.fpw, &rz->in, sizeof(int64_t)); write(rz->x.fpw, &rz->out, sizeof(int64_t)); } else { uint64_t v64 = byte_swap_8((uint64_t)rz->in); write(rz->x.fpw, &v64, sizeof(int64_t)); v64 = byte_swap_8((uint64_t)rz->out); write(rz->x.fpw, &v64, sizeof(int64_t)); } #else save_zindex(rz, rz->filedes); if(is_big_endian()){ write(rz->filedes, &rz->in, sizeof(int64_t)); write(rz->filedes, &rz->out, sizeof(int64_t)); } else { uint64_t v64 = byte_swap_8((uint64_t)rz->in); write(rz->filedes, &v64, sizeof(int64_t)); v64 = byte_swap_8((uint64_t)rz->out); write(rz->filedes, &v64, sizeof(int64_t)); } #endif #endif } else if(rz->mode == 'r'){ if(rz->stream) inflateEnd(rz->stream); } if(rz->inbuf) free(rz->inbuf); if(rz->outbuf) free(rz->outbuf); if(rz->header){ free(rz->header->extra); free(rz->header->name); free(rz->header->comment); free(rz->header); } if(rz->index){ free(rz->index->bin_offsets); free(rz->index->cell_offsets); free(rz->index); } free(rz->stream); #ifdef _USE_KNETFILE if (rz->mode == 'r') knet_close(rz->x.fpr); if (rz->mode == 'w') close(rz->x.fpw); #else close(rz->filedes); #endif free(rz); } #endif genometools-1.5.1/src/external/samtools-0.1.18/razf.h000066400000000000000000000100511211610345200221510ustar00rootroot00000000000000 /*- * RAZF : Random Access compressed(Z) File * Version: 1.0 * Release Date: 2008-10-27 * * Copyright 2008, Jue Ruan , Heng Li * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. */ #ifndef __RAZF_RJ_H #define __RAZF_RJ_H #include #include #include "zlib.h" #ifdef _USE_KNETFILE #include "knetfile.h" #endif #if ZLIB_VERNUM < 0x1221 #define _RZ_READONLY struct _gz_header_s; typedef struct _gz_header_s _gz_header; #define gz_header _gz_header #endif #define WINDOW_BITS 15 #ifndef RZ_BLOCK_SIZE #define RZ_BLOCK_SIZE (1<mode from HEAD to TYPE after call inflateReset */ int buf_off, buf_len; int z_err, z_eof; int seekable; /* Indice where the source is seekable */ int load_index; /* set has_index to 0 in mode 'w', then index will be discarded */ } RAZF; #ifdef __cplusplus extern "C" { #endif RAZF* razf_dopen(int data_fd, const char *mode); RAZF *razf_open(const char *fn, const char *mode); int razf_write(RAZF* rz, const void *data, int size); int razf_read(RAZF* rz, void *data, int size); int64_t razf_seek(RAZF* rz, int64_t pos, int where); void razf_close(RAZF* rz); #define razf_tell(rz) ((rz)->out) RAZF* razf_open2(const char *filename, const char *mode); RAZF* razf_dopen2(int fd, const char *mode); uint64_t razf_tell2(RAZF *rz); int64_t razf_seek2(RAZF *rz, uint64_t voffset, int where); #ifdef __cplusplus } #endif #endif genometools-1.5.1/src/external/samtools-0.1.18/razip.c000066400000000000000000000100161211610345200223300ustar00rootroot00000000000000#include #include #include #include #include #include #include "razf.h" #define WINDOW_SIZE 4096 static int razf_main_usage() { printf("\n"); printf("Usage: razip [options] [file] ...\n\n"); printf("Options: -c write on standard output, keep original files unchanged\n"); printf(" -d decompress\n"); printf(" -l list compressed file contents\n"); printf(" -b INT decompress at INT position in the uncompressed file\n"); printf(" -s INT decompress INT bytes in the uncompressed file\n"); printf(" -h give this help\n"); printf("\n"); return 0; } static int write_open(const char *fn, int is_forced) { int fd = -1; char c; if (!is_forced) { if ((fd = open(fn, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0666)) < 0 && errno == EEXIST) { printf("razip: %s already exists; do you wish to overwrite (y or n)? ", fn); scanf("%c", &c); if (c != 'Y' && c != 'y') { printf("razip: not overwritten\n"); exit(1); } } } if (fd < 0) { if ((fd = open(fn, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0) { fprintf(stderr, "razip: %s: Fail to write\n", fn); exit(1); } } return fd; } int main(int argc, char **argv) { int c, compress, pstdout, is_forced; RAZF *rz; void *buffer; long start, end, size; compress = 1; pstdout = 0; start = 0; size = -1; end = -1; is_forced = 0; while((c = getopt(argc, argv, "cdlhfb:s:")) >= 0){ switch(c){ case 'h': return razf_main_usage(); case 'd': compress = 0; break; case 'c': pstdout = 1; break; case 'l': compress = 2; break; case 'b': start = atol(optarg); break; case 's': size = atol(optarg); break; case 'f': is_forced = 1; break; } } if (size >= 0) end = start + size; if(end >= 0 && end < start){ fprintf(stderr, " -- Illegal region: [%ld, %ld] --\n", start, end); return 1; } if(compress == 1){ int f_src, f_dst = -1; if(argc > optind){ if((f_src = open(argv[optind], O_RDONLY)) < 0){ fprintf(stderr, " -- Cannot open file: %s --\n", argv[optind]); return 1; } if(pstdout){ f_dst = fileno(stdout); } else { char *name = malloc(sizeof(strlen(argv[optind]) + 5)); strcpy(name, argv[optind]); strcat(name, ".rz"); f_dst = write_open(name, is_forced); if (f_dst < 0) return 1; free(name); } } else if(pstdout){ f_src = fileno(stdin); f_dst = fileno(stdout); } else return razf_main_usage(); rz = razf_dopen(f_dst, "w"); buffer = malloc(WINDOW_SIZE); while((c = read(f_src, buffer, WINDOW_SIZE)) > 0) razf_write(rz, buffer, c); razf_close(rz); // f_dst will be closed here if (argc > optind && !pstdout) unlink(argv[optind]); free(buffer); close(f_src); return 0; } else { if(argc <= optind) return razf_main_usage(); if(compress == 2){ rz = razf_open(argv[optind], "r"); if(rz->file_type == FILE_TYPE_RZ) { printf("%20s%20s%7s %s\n", "compressed", "uncompressed", "ratio", "name"); printf("%20lld%20lld%6.1f%% %s\n", (long long)rz->end, (long long)rz->src_end, rz->end * 100.0f / rz->src_end, argv[optind]); } else fprintf(stdout, "%s is not a regular rz file\n", argv[optind]); } else { int f_dst; if (argc > optind && !pstdout) { char *name; if (strstr(argv[optind], ".rz") - argv[optind] != strlen(argv[optind]) - 3) { printf("razip: %s: unknown suffix -- ignored\n", argv[optind]); return 1; } name = strdup(argv[optind]); name[strlen(name) - 3] = '\0'; f_dst = write_open(name, is_forced); free(name); } else f_dst = fileno(stdout); rz = razf_open(argv[optind], "r"); buffer = malloc(WINDOW_SIZE); razf_seek(rz, start, SEEK_SET); while(1){ if(end < 0) c = razf_read(rz, buffer, WINDOW_SIZE); else c = razf_read(rz, buffer, (end - start > WINDOW_SIZE)? WINDOW_SIZE:(end - start)); if(c <= 0) break; start += c; write(f_dst, buffer, c); if(end >= 0 && start >= end) break; } free(buffer); if (!pstdout) unlink(argv[optind]); } razf_close(rz); return 0; } } genometools-1.5.1/src/external/samtools-0.1.18/sam.c000066400000000000000000000133731211610345200217740ustar00rootroot00000000000000#include #include #include "faidx.h" #include "sam.h" #define TYPE_BAM 1 #define TYPE_READ 2 bam_header_t *bam_header_dup(const bam_header_t *h0) { bam_header_t *h; int i; h = bam_header_init(); *h = *h0; h->hash = h->dict = h->rg2lib = 0; h->text = (char*)calloc(h->l_text + 1, 1); memcpy(h->text, h0->text, h->l_text); h->target_len = (uint32_t*)calloc(h->n_targets, 4); h->target_name = (char**)calloc(h->n_targets, sizeof(void*)); for (i = 0; i < h->n_targets; ++i) { h->target_len[i] = h0->target_len[i]; h->target_name[i] = strdup(h0->target_name[i]); } return h; } static void append_header_text(bam_header_t *header, char* text, int len) { int x = header->l_text + 1; int y = header->l_text + len + 1; // 1 byte null if (text == 0) return; kroundup32(x); kroundup32(y); if (x < y) header->text = (char*)realloc(header->text, y); strncpy(header->text + header->l_text, text, len); // we cannot use strcpy() here. header->l_text += len; header->text[header->l_text] = 0; } samfile_t *samopen(const char *fn, const char *mode, const void *aux) { samfile_t *fp; fp = (samfile_t*)calloc(1, sizeof(samfile_t)); if (strchr(mode, 'r')) { // read fp->type |= TYPE_READ; if (strchr(mode, 'b')) { // binary fp->type |= TYPE_BAM; fp->x.bam = strcmp(fn, "-")? bam_open(fn, "r") : bam_dopen(fileno(stdin), "r"); if (fp->x.bam == 0) goto open_err_ret; fp->header = bam_header_read(fp->x.bam); } else { // text fp->x.tamr = sam_open(fn); if (fp->x.tamr == 0) goto open_err_ret; fp->header = sam_header_read(fp->x.tamr); if (fp->header->n_targets == 0) { // no @SQ fields if (aux) { // check if aux is present bam_header_t *textheader = fp->header; fp->header = sam_header_read2((const char*)aux); if (fp->header == 0) goto open_err_ret; append_header_text(fp->header, textheader->text, textheader->l_text); bam_header_destroy(textheader); } if (fp->header->n_targets == 0 && bam_verbose >= 1) fprintf(stderr, "[samopen] no @SQ lines in the header.\n"); } else if (bam_verbose >= 2) fprintf(stderr, "[samopen] SAM header is present: %d sequences.\n", fp->header->n_targets); } } else if (strchr(mode, 'w')) { // write fp->header = bam_header_dup((const bam_header_t*)aux); if (strchr(mode, 'b')) { // binary char bmode[3]; int i, compress_level = -1; for (i = 0; mode[i]; ++i) if (mode[i] >= '0' && mode[i] <= '9') break; if (mode[i]) compress_level = mode[i] - '0'; if (strchr(mode, 'u')) compress_level = 0; bmode[0] = 'w'; bmode[1] = compress_level < 0? 0 : compress_level + '0'; bmode[2] = 0; fp->type |= TYPE_BAM; fp->x.bam = strcmp(fn, "-")? bam_open(fn, bmode) : bam_dopen(fileno(stdout), bmode); if (fp->x.bam == 0) goto open_err_ret; bam_header_write(fp->x.bam, fp->header); } else { // text // open file fp->x.tamw = strcmp(fn, "-")? fopen(fn, "w") : stdout; if (fp->x.tamr == 0) goto open_err_ret; if (strchr(mode, 'X')) fp->type |= BAM_OFSTR<<2; else if (strchr(mode, 'x')) fp->type |= BAM_OFHEX<<2; else fp->type |= BAM_OFDEC<<2; // write header if (strchr(mode, 'h')) { int i; bam_header_t *alt; // parse the header text alt = bam_header_init(); alt->l_text = fp->header->l_text; alt->text = fp->header->text; sam_header_parse(alt); alt->l_text = 0; alt->text = 0; // check if there are @SQ lines in the header fwrite(fp->header->text, 1, fp->header->l_text, fp->x.tamw); // FIXME: better to skip the trailing NULL if (alt->n_targets) { // then write the header text without dumping ->target_{name,len} if (alt->n_targets != fp->header->n_targets && bam_verbose >= 1) fprintf(stderr, "[samopen] inconsistent number of target sequences. Output the text header.\n"); } else { // then dump ->target_{name,len} for (i = 0; i < fp->header->n_targets; ++i) fprintf(fp->x.tamw, "@SQ\tSN:%s\tLN:%d\n", fp->header->target_name[i], fp->header->target_len[i]); } bam_header_destroy(alt); } } } return fp; open_err_ret: free(fp); return 0; } void samclose(samfile_t *fp) { if (fp == 0) return; if (fp->header) bam_header_destroy(fp->header); if (fp->type & TYPE_BAM) bam_close(fp->x.bam); else if (fp->type & TYPE_READ) sam_close(fp->x.tamr); else fclose(fp->x.tamw); free(fp); } int samread(samfile_t *fp, bam1_t *b) { if (fp == 0 || !(fp->type & TYPE_READ)) return -1; // not open for reading if (fp->type & TYPE_BAM) return bam_read1(fp->x.bam, b); else return sam_read1(fp->x.tamr, fp->header, b); } int samwrite(samfile_t *fp, const bam1_t *b) { if (fp == 0 || (fp->type & TYPE_READ)) return -1; // not open for writing if (fp->type & TYPE_BAM) return bam_write1(fp->x.bam, b); else { char *s = bam_format1_core(fp->header, b, fp->type>>2&3); int l = strlen(s); fputs(s, fp->x.tamw); fputc('\n', fp->x.tamw); free(s); return l + 1; } } int sampileup(samfile_t *fp, int mask, bam_pileup_f func, void *func_data) { bam_plbuf_t *buf; int ret; bam1_t *b; b = bam_init1(); buf = bam_plbuf_init(func, func_data); bam_plbuf_set_mask(buf, mask); while ((ret = samread(fp, b)) >= 0) bam_plbuf_push(b, buf); bam_plbuf_push(0, buf); bam_plbuf_destroy(buf); bam_destroy1(b); return 0; } char *samfaipath(const char *fn_ref) { char *fn_list = 0; if (fn_ref == 0) return 0; fn_list = calloc(strlen(fn_ref) + 5, 1); strcat(strcpy(fn_list, fn_ref), ".fai"); if (access(fn_list, R_OK) == -1) { // fn_list is unreadable if (access(fn_ref, R_OK) == -1) { fprintf(stderr, "[samfaipath] fail to read file %s.\n", fn_ref); } else { if (bam_verbose >= 3) fprintf(stderr, "[samfaipath] build FASTA index...\n"); if (fai_build(fn_ref) == -1) { fprintf(stderr, "[samfaipath] fail to build FASTA index.\n"); free(fn_list); fn_list = 0; } } } return fn_list; } genometools-1.5.1/src/external/samtools-0.1.18/sam.h000066400000000000000000000051301211610345200217710ustar00rootroot00000000000000#ifndef BAM_SAM_H #define BAM_SAM_H #include "bam.h" /*! @header This file provides higher level of I/O routines and unifies the APIs for SAM and BAM formats. These APIs are more convenient and recommended. @copyright Genome Research Ltd. */ /*@ignore@*/ /*! @typedef @abstract SAM/BAM file handler @field type type of the handler; bit 1 for BAM, 2 for reading and bit 3-4 for flag format @field bam BAM file handler; valid if (type&1) == 1 @field tamr SAM file handler for reading; valid if type == 2 @field tamw SAM file handler for writing; valid if type == 0 @field header header struct */ typedef struct { int type; union { tamFile tamr; bamFile bam; FILE *tamw; } x; bam_header_t *header; } samfile_t; #ifdef __cplusplus extern "C" { #endif /*! @abstract Open a SAM/BAM file @param fn SAM/BAM file name; "-" is recognized as stdin (for reading) or stdout (for writing). @param mode open mode /[rw](b?)(u?)(h?)([xX]?)/: 'r' for reading, 'w' for writing, 'b' for BAM I/O, 'u' for uncompressed BAM output, 'h' for outputing header in SAM, 'x' for HEX flag and 'X' for string flag. If 'b' present, it must immediately follow 'r' or 'w'. Valid modes are "r", "w", "wh", "wx", "whx", "wX", "whX", "rb", "wb" and "wbu" exclusively. @param aux auxiliary data; if mode[0]=='w', aux points to bam_header_t; if strcmp(mode, "rb")!=0 and @SQ header lines in SAM are absent, aux points the file name of the list of the reference; aux is not used otherwise. If @SQ header lines are present in SAM, aux is not used, either. @return SAM/BAM file handler */ samfile_t *samopen(const char *fn, const char *mode, const void *aux); /*! @abstract Close a SAM/BAM handler @param fp file handler to be closed */ void samclose(samfile_t *fp); /*! @abstract Read one alignment @param fp file handler @param b alignment @return bytes read */ int samread(samfile_t *fp, bam1_t *b); /*! @abstract Write one alignment @param fp file handler @param b alignment @return bytes written */ int samwrite(samfile_t *fp, const bam1_t *b); /*! @abstract Get the pileup for a whole alignment file @param fp file handler @param mask mask transferred to bam_plbuf_set_mask() @param func user defined function called in the pileup process #param data user provided data for func() */ int sampileup(samfile_t *fp, int mask, bam_pileup_f func, void *data); char *samfaipath(const char *fn_ref); #ifdef __cplusplus } #endif /*@end@*/ #endif genometools-1.5.1/src/external/samtools-0.1.18/sam_header.c000066400000000000000000000454721211610345200233110ustar00rootroot00000000000000#include "sam_header.h" #include #include #include #include #include #include "khash.h" KHASH_MAP_INIT_STR(str, const char *) struct _HeaderList { struct _HeaderList *last; // Hack: Used and maintained only by list_append_to_end. Maintained in the root node only. struct _HeaderList *next; void *data; }; typedef struct _HeaderList list_t; typedef list_t HeaderDict; typedef struct { char key[2]; char *value; } HeaderTag; typedef struct { char type[2]; list_t *tags; } HeaderLine; const char *o_hd_tags[] = {"SO","GO",NULL}; const char *r_hd_tags[] = {"VN",NULL}; const char *o_sq_tags[] = {"AS","M5","UR","SP",NULL}; const char *r_sq_tags[] = {"SN","LN",NULL}; const char *u_sq_tags[] = {"SN",NULL}; const char *o_rg_tags[] = {"CN","DS","DT","FO","KS","LB","PG","PI","PL","PU","SM",NULL}; const char *r_rg_tags[] = {"ID",NULL}; const char *u_rg_tags[] = {"ID",NULL}; const char *o_pg_tags[] = {"VN","CL",NULL}; const char *r_pg_tags[] = {"ID",NULL}; const char *types[] = {"HD","SQ","RG","PG","CO",NULL}; const char **optional_tags[] = {o_hd_tags,o_sq_tags,o_rg_tags,o_pg_tags,NULL,NULL}; const char **required_tags[] = {r_hd_tags,r_sq_tags,r_rg_tags,r_pg_tags,NULL,NULL}; const char **unique_tags[] = {NULL, u_sq_tags,u_rg_tags,NULL,NULL,NULL}; static void debug(const char *format, ...) { va_list ap; va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); } #if 0 // Replaced by list_append_to_end static list_t *list_prepend(list_t *root, void *data) { list_t *l = malloc(sizeof(list_t)); l->next = root; l->data = data; return l; } #endif // Relies on the root->last being correct. Do not use with the other list_* // routines unless they are fixed to modify root->last as well. static list_t *list_append_to_end(list_t *root, void *data) { list_t *l = malloc(sizeof(list_t)); l->last = l; l->next = NULL; l->data = data; if ( !root ) return l; root->last->next = l; root->last = l; return root; } static list_t *list_append(list_t *root, void *data) { list_t *l = root; while (l && l->next) l = l->next; if ( l ) { l->next = malloc(sizeof(list_t)); l = l->next; } else { l = malloc(sizeof(list_t)); root = l; } l->data = data; l->next = NULL; return root; } static void list_free(list_t *root) { list_t *l = root; while (root) { l = root; root = root->next; free(l); } } // Look for a tag "XY" in a predefined const char *[] array. static int tag_exists(const char *tag, const char **tags) { int itag=0; if ( !tags ) return -1; while ( tags[itag] ) { if ( tags[itag][0]==tag[0] && tags[itag][1]==tag[1] ) return itag; itag++; } return -1; } // Mimics the behaviour of getline, except it returns pointer to the next chunk of the text // or NULL if everything has been read. The lineptr should be freed by the caller. The // newline character is stripped. static const char *nextline(char **lineptr, size_t *n, const char *text) { int len; const char *to = text; if ( !*to ) return NULL; while ( *to && *to!='\n' && *to!='\r' ) to++; len = to - text + 1; if ( *to ) { // Advance the pointer for the next call if ( *to=='\n' ) to++; else if ( *to=='\r' && *(to+1)=='\n' ) to+=2; } if ( !len ) return to; if ( !*lineptr ) { *lineptr = malloc(len); *n = len; } else if ( *nkey[0] = name[0]; tag->key[1] = name[1]; tag->value = malloc(len+1); memcpy(tag->value,value_from,len+1); tag->value[len] = 0; return tag; } static HeaderTag *header_line_has_tag(HeaderLine *hline, const char *key) { list_t *tags = hline->tags; while (tags) { HeaderTag *tag = tags->data; if ( tag->key[0]==key[0] && tag->key[1]==key[1] ) return tag; tags = tags->next; } return NULL; } // Return codes: // 0 .. different types or unique tags differ or conflicting tags, cannot be merged // 1 .. all tags identical -> no need to merge, drop one // 2 .. the unique tags match and there are some conflicting tags (same tag, different value) -> error, cannot be merged nor duplicated // 3 .. there are some missing complementary tags and no unique conflict -> can be merged into a single line static int sam_header_compare_lines(HeaderLine *hline1, HeaderLine *hline2) { HeaderTag *t1, *t2; if ( hline1->type[0]!=hline2->type[0] || hline1->type[1]!=hline2->type[1] ) return 0; int itype = tag_exists(hline1->type,types); if ( itype==-1 ) { debug("[sam_header_compare_lines] Unknown type [%c%c]\n", hline1->type[0],hline1->type[1]); return -1; // FIXME (lh3): error; I do not know how this will be handled in Petr's code } if ( unique_tags[itype] ) { t1 = header_line_has_tag(hline1,unique_tags[itype][0]); t2 = header_line_has_tag(hline2,unique_tags[itype][0]); if ( !t1 || !t2 ) // this should never happen, the unique tags are required return 2; if ( strcmp(t1->value,t2->value) ) return 0; // the unique tags differ, cannot be merged } if ( !required_tags[itype] && !optional_tags[itype] ) { t1 = hline1->tags->data; t2 = hline2->tags->data; if ( !strcmp(t1->value,t2->value) ) return 1; // identical comments return 0; } int missing=0, itag=0; while ( required_tags[itype] && required_tags[itype][itag] ) { t1 = header_line_has_tag(hline1,required_tags[itype][itag]); t2 = header_line_has_tag(hline2,required_tags[itype][itag]); if ( !t1 && !t2 ) return 2; // this should never happen else if ( !t1 || !t2 ) missing = 1; // there is some tag missing in one of the hlines else if ( strcmp(t1->value,t2->value) ) { if ( unique_tags[itype] ) return 2; // the lines have a matching unique tag but have a conflicting tag return 0; // the lines contain conflicting tags, cannot be merged } itag++; } itag = 0; while ( optional_tags[itype] && optional_tags[itype][itag] ) { t1 = header_line_has_tag(hline1,optional_tags[itype][itag]); t2 = header_line_has_tag(hline2,optional_tags[itype][itag]); if ( !t1 && !t2 ) { itag++; continue; } if ( !t1 || !t2 ) missing = 1; // there is some tag missing in one of the hlines else if ( strcmp(t1->value,t2->value) ) { if ( unique_tags[itype] ) return 2; // the lines have a matching unique tag but have a conflicting tag return 0; // the lines contain conflicting tags, cannot be merged } itag++; } if ( missing ) return 3; // there are some missing complementary tags with no conflicts, can be merged return 1; } static HeaderLine *sam_header_line_clone(const HeaderLine *hline) { list_t *tags; HeaderLine *out = malloc(sizeof(HeaderLine)); out->type[0] = hline->type[0]; out->type[1] = hline->type[1]; out->tags = NULL; tags = hline->tags; while (tags) { HeaderTag *old = tags->data; HeaderTag *new = malloc(sizeof(HeaderTag)); new->key[0] = old->key[0]; new->key[1] = old->key[1]; new->value = strdup(old->value); out->tags = list_append(out->tags, new); tags = tags->next; } return out; } static int sam_header_line_merge_with(HeaderLine *out_hline, const HeaderLine *tmpl_hline) { list_t *tmpl_tags; if ( out_hline->type[0]!=tmpl_hline->type[0] || out_hline->type[1]!=tmpl_hline->type[1] ) return 0; tmpl_tags = tmpl_hline->tags; while (tmpl_tags) { HeaderTag *tmpl_tag = tmpl_tags->data; HeaderTag *out_tag = header_line_has_tag(out_hline, tmpl_tag->key); if ( !out_tag ) { HeaderTag *tag = malloc(sizeof(HeaderTag)); tag->key[0] = tmpl_tag->key[0]; tag->key[1] = tmpl_tag->key[1]; tag->value = strdup(tmpl_tag->value); out_hline->tags = list_append(out_hline->tags,tag); } tmpl_tags = tmpl_tags->next; } return 1; } static HeaderLine *sam_header_line_parse(const char *headerLine) { HeaderLine *hline; HeaderTag *tag; const char *from, *to; from = headerLine; if ( *from != '@' ) { debug("[sam_header_line_parse] expected '@', got [%s]\n", headerLine); return 0; } to = ++from; while (*to && *to!='\t') to++; if ( to-from != 2 ) { debug("[sam_header_line_parse] expected '@XY', got [%s]\nHint: The header tags must be tab-separated.\n", headerLine); return 0; } hline = malloc(sizeof(HeaderLine)); hline->type[0] = from[0]; hline->type[1] = from[1]; hline->tags = NULL; int itype = tag_exists(hline->type, types); from = to; while (*to && *to=='\t') to++; if ( to-from != 1 ) { debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from)); return 0; } from = to; while (*from) { while (*to && *to!='\t') to++; if ( !required_tags[itype] && !optional_tags[itype] ) { // CO is a special case, it can contain anything, including tabs if ( *to ) { to++; continue; } tag = new_tag(" ",from,to-1); } else tag = new_tag(from,from+3,to-1); if ( header_line_has_tag(hline,tag->key) ) debug("The tag '%c%c' present (at least) twice on line [%s]\n", tag->key[0],tag->key[1], headerLine); hline->tags = list_append(hline->tags, tag); from = to; while (*to && *to=='\t') to++; if ( *to && to-from != 1 ) { debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from)); return 0; } from = to; } return hline; } // Must be of an existing type, all tags must be recognised and all required tags must be present static int sam_header_line_validate(HeaderLine *hline) { list_t *tags; HeaderTag *tag; int itype, itag; // Is the type correct? itype = tag_exists(hline->type, types); if ( itype==-1 ) { debug("The type [%c%c] not recognised.\n", hline->type[0],hline->type[1]); return 0; } // Has all required tags? itag = 0; while ( required_tags[itype] && required_tags[itype][itag] ) { if ( !header_line_has_tag(hline,required_tags[itype][itag]) ) { debug("The tag [%c%c] required for [%c%c] not present.\n", required_tags[itype][itag][0],required_tags[itype][itag][1], hline->type[0],hline->type[1]); return 0; } itag++; } // Are all tags recognised? tags = hline->tags; while ( tags ) { tag = tags->data; if ( !tag_exists(tag->key,required_tags[itype]) && !tag_exists(tag->key,optional_tags[itype]) ) { debug("Unknown tag [%c%c] for [%c%c].\n", tag->key[0],tag->key[1], hline->type[0],hline->type[1]); return 0; } tags = tags->next; } return 1; } static void print_header_line(FILE *fp, HeaderLine *hline) { list_t *tags = hline->tags; HeaderTag *tag; fprintf(fp, "@%c%c", hline->type[0],hline->type[1]); while (tags) { tag = tags->data; fprintf(fp, "\t"); if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) fprintf(fp, "%c%c:", tag->key[0],tag->key[1]); fprintf(fp, "%s", tag->value); tags = tags->next; } fprintf(fp,"\n"); } static void sam_header_line_free(HeaderLine *hline) { list_t *tags = hline->tags; while (tags) { HeaderTag *tag = tags->data; free(tag->value); free(tag); tags = tags->next; } list_free(hline->tags); free(hline); } void sam_header_free(void *_header) { HeaderDict *header = (HeaderDict*)_header; list_t *hlines = header; while (hlines) { sam_header_line_free(hlines->data); hlines = hlines->next; } list_free(header); } HeaderDict *sam_header_clone(const HeaderDict *dict) { HeaderDict *out = NULL; while (dict) { HeaderLine *hline = dict->data; out = list_append(out, sam_header_line_clone(hline)); dict = dict->next; } return out; } // Returns a newly allocated string char *sam_header_write(const void *_header) { const HeaderDict *header = (const HeaderDict*)_header; char *out = NULL; int len=0, nout=0; const list_t *hlines; // Calculate the length of the string to allocate hlines = header; while (hlines) { len += 4; // @XY and \n HeaderLine *hline = hlines->data; list_t *tags = hline->tags; while (tags) { HeaderTag *tag = tags->data; len += strlen(tag->value) + 1; // \t if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) len += strlen(tag->value) + 3; // XY: tags = tags->next; } hlines = hlines->next; } nout = 0; out = malloc(len+1); hlines = header; while (hlines) { HeaderLine *hline = hlines->data; nout += sprintf(out+nout,"@%c%c",hline->type[0],hline->type[1]); list_t *tags = hline->tags; while (tags) { HeaderTag *tag = tags->data; nout += sprintf(out+nout,"\t"); if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) nout += sprintf(out+nout,"%c%c:", tag->key[0],tag->key[1]); nout += sprintf(out+nout,"%s", tag->value); tags = tags->next; } hlines = hlines->next; nout += sprintf(out+nout,"\n"); } out[len] = 0; return out; } void *sam_header_parse2(const char *headerText) { list_t *hlines = NULL; HeaderLine *hline; const char *text; char *buf=NULL; size_t nbuf = 0; int tovalidate = 0; if ( !headerText ) return 0; text = headerText; while ( (text=nextline(&buf, &nbuf, text)) ) { hline = sam_header_line_parse(buf); if ( hline && (!tovalidate || sam_header_line_validate(hline)) ) // With too many (~250,000) reference sequences the header parsing was too slow with list_append. hlines = list_append_to_end(hlines, hline); else { if (hline) sam_header_line_free(hline); sam_header_free(hlines); if ( buf ) free(buf); return NULL; } } if ( buf ) free(buf); return hlines; } void *sam_header2tbl(const void *_dict, char type[2], char key_tag[2], char value_tag[2]) { const HeaderDict *dict = (const HeaderDict*)_dict; const list_t *l = dict; khash_t(str) *tbl = kh_init(str); khiter_t k; int ret; if (_dict == 0) return tbl; // return an empty (not null) hash table while (l) { HeaderLine *hline = l->data; if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) { l = l->next; continue; } HeaderTag *key, *value; key = header_line_has_tag(hline,key_tag); value = header_line_has_tag(hline,value_tag); if ( !key || !value ) { l = l->next; continue; } k = kh_get(str, tbl, key->value); if ( k != kh_end(tbl) ) debug("[sam_header_lookup_table] They key %s not unique.\n", key->value); k = kh_put(str, tbl, key->value, &ret); kh_value(tbl, k) = value->value; l = l->next; } return tbl; } char **sam_header2list(const void *_dict, char type[2], char key_tag[2], int *_n) { const HeaderDict *dict = (const HeaderDict*)_dict; const list_t *l = dict; int max, n; char **ret; ret = 0; *_n = max = n = 0; while (l) { HeaderLine *hline = l->data; if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) { l = l->next; continue; } HeaderTag *key; key = header_line_has_tag(hline,key_tag); if ( !key ) { l = l->next; continue; } if (n == max) { max = max? max<<1 : 4; ret = realloc(ret, max * sizeof(void*)); } ret[n++] = key->value; l = l->next; } *_n = n; return ret; } const char *sam_tbl_get(void *h, const char *key) { khash_t(str) *tbl = (khash_t(str)*)h; khint_t k; k = kh_get(str, tbl, key); return k == kh_end(tbl)? 0 : kh_val(tbl, k); } int sam_tbl_size(void *h) { khash_t(str) *tbl = (khash_t(str)*)h; return h? kh_size(tbl) : 0; } void sam_tbl_destroy(void *h) { khash_t(str) *tbl = (khash_t(str)*)h; kh_destroy(str, tbl); } void *sam_header_merge(int n, const void **_dicts) { const HeaderDict **dicts = (const HeaderDict**)_dicts; HeaderDict *out_dict; int idict, status; if ( n<2 ) return NULL; out_dict = sam_header_clone(dicts[0]); for (idict=1; idictdata, out_hlines->data); if ( status==0 ) { out_hlines = out_hlines->next; continue; } if ( status==2 ) { print_header_line(stderr,tmpl_hlines->data); print_header_line(stderr,out_hlines->data); debug("Conflicting lines, cannot merge the headers.\n"); return 0; } if ( status==3 ) sam_header_line_merge_with(out_hlines->data, tmpl_hlines->data); inserted = 1; break; } if ( !inserted ) out_dict = list_append(out_dict, sam_header_line_clone(tmpl_hlines->data)); tmpl_hlines = tmpl_hlines->next; } } return out_dict; } genometools-1.5.1/src/external/samtools-0.1.18/sam_header.h000066400000000000000000000012031211610345200232760ustar00rootroot00000000000000#ifndef __SAM_HEADER_H__ #define __SAM_HEADER_H__ #ifdef __cplusplus extern "C" { #endif void *sam_header_parse2(const char *headerText); void *sam_header_merge(int n, const void **dicts); void sam_header_free(void *header); char *sam_header_write(const void *headerDict); // returns a newly allocated string char **sam_header2list(const void *_dict, char type[2], char key_tag[2], int *_n); void *sam_header2tbl(const void *dict, char type[2], char key_tag[2], char value_tag[2]); const char *sam_tbl_get(void *h, const char *key); int sam_tbl_size(void *h); void sam_tbl_destroy(void *h); #ifdef __cplusplus } #endif #endif genometools-1.5.1/src/external/samtools-0.1.18/sam_view.c000066400000000000000000000324221211610345200230220ustar00rootroot00000000000000#include #include #include #include #include #include "sam_header.h" #include "sam.h" #include "faidx.h" #include "kstring.h" #include "khash.h" KHASH_SET_INIT_STR(rg) // When counting records instead of printing them, // data passed to the bam_fetch callback is encapsulated in this struct. typedef struct { bam_header_t *header; int *count; } count_func_data_t; typedef khash_t(rg) *rghash_t; // FIXME: we'd better use no global variables... static rghash_t g_rghash = 0; static int g_min_mapQ = 0, g_flag_on = 0, g_flag_off = 0; static float g_subsam = -1; static char *g_library, *g_rg; static void *g_bed; void *bed_read(const char *fn); void bed_destroy(void *_h); int bed_overlap(const void *_h, const char *chr, int beg, int end); static inline int __g_skip_aln(const bam_header_t *h, const bam1_t *b) { if (b->core.qual < g_min_mapQ || ((b->core.flag & g_flag_on) != g_flag_on) || (b->core.flag & g_flag_off)) return 1; if (g_bed && b->core.tid >= 0 && !bed_overlap(g_bed, h->target_name[b->core.tid], b->core.pos, bam_calend(&b->core, bam1_cigar(b)))) return 1; if (g_subsam > 0.) { int x = (int)(g_subsam + .499); uint32_t k = __ac_X31_hash_string(bam1_qname(b)) + x; if (k%1024 / 1024.0 >= g_subsam - x) return 1; } if (g_rg || g_rghash) { uint8_t *s = bam_aux_get(b, "RG"); if (s) { if (g_rg) return (strcmp(g_rg, (char*)(s + 1)) == 0)? 0 : 1; if (g_rghash) { khint_t k = kh_get(rg, g_rghash, (char*)(s + 1)); return (k != kh_end(g_rghash))? 0 : 1; } } } if (g_library) { const char *p = bam_get_library((bam_header_t*)h, b); return (p && strcmp(p, g_library) == 0)? 0 : 1; } return 0; } static char *drop_rg(char *hdtxt, rghash_t h, int *len) { char *p = hdtxt, *q, *r, *s; kstring_t str; memset(&str, 0, sizeof(kstring_t)); while (1) { int toprint = 0; q = strchr(p, '\n'); if (q == 0) q = p + strlen(p); if (q - p < 3) break; // the line is too short; then stop if (strncmp(p, "@RG\t", 4) == 0) { int c; khint_t k; if ((r = strstr(p, "\tID:")) != 0) { r += 4; for (s = r; *s != '\0' && *s != '\n' && *s != '\t'; ++s); c = *s; *s = '\0'; k = kh_get(rg, h, r); *s = c; if (k != kh_end(h)) toprint = 1; } } else toprint = 1; if (toprint) { kputsn(p, q - p, &str); kputc('\n', &str); } p = q + 1; } *len = str.l; return str.s; } // callback function for bam_fetch() that prints nonskipped records static int view_func(const bam1_t *b, void *data) { if (!__g_skip_aln(((samfile_t*)data)->header, b)) samwrite((samfile_t*)data, b); return 0; } // callback function for bam_fetch() that counts nonskipped records static int count_func(const bam1_t *b, void *data) { if (!__g_skip_aln(((count_func_data_t*)data)->header, b)) { (*((count_func_data_t*)data)->count)++; } return 0; } static int usage(int is_long_help); int main_samview(int argc, char *argv[]) { int c, is_header = 0, is_header_only = 0, is_bamin = 1, ret = 0, compress_level = -1, is_bamout = 0, is_count = 0; int of_type = BAM_OFDEC, is_long_help = 0; int count = 0; samfile_t *in = 0, *out = 0; char in_mode[5], out_mode[5], *fn_out = 0, *fn_list = 0, *fn_ref = 0, *fn_rg = 0; /* parse command-line options */ strcpy(in_mode, "r"); strcpy(out_mode, "w"); while ((c = getopt(argc, argv, "Sbct:h1Ho:q:f:F:ul:r:xX?T:R:L:s:")) >= 0) { switch (c) { case 's': g_subsam = atof(optarg); break; case 'c': is_count = 1; break; case 'S': is_bamin = 0; break; case 'b': is_bamout = 1; break; case 't': fn_list = strdup(optarg); is_bamin = 0; break; case 'h': is_header = 1; break; case 'H': is_header_only = 1; break; case 'o': fn_out = strdup(optarg); break; case 'f': g_flag_on = strtol(optarg, 0, 0); break; case 'F': g_flag_off = strtol(optarg, 0, 0); break; case 'q': g_min_mapQ = atoi(optarg); break; case 'u': compress_level = 0; break; case '1': compress_level = 1; break; case 'l': g_library = strdup(optarg); break; case 'L': g_bed = bed_read(optarg); break; case 'r': g_rg = strdup(optarg); break; case 'R': fn_rg = strdup(optarg); break; case 'x': of_type = BAM_OFHEX; break; case 'X': of_type = BAM_OFSTR; break; case '?': is_long_help = 1; break; case 'T': fn_ref = strdup(optarg); is_bamin = 0; break; default: return usage(is_long_help); } } if (compress_level >= 0) is_bamout = 1; if (is_header_only) is_header = 1; if (is_bamout) strcat(out_mode, "b"); else { if (of_type == BAM_OFHEX) strcat(out_mode, "x"); else if (of_type == BAM_OFSTR) strcat(out_mode, "X"); } if (is_bamin) strcat(in_mode, "b"); if (is_header) strcat(out_mode, "h"); if (compress_level >= 0) { char tmp[2]; tmp[0] = compress_level + '0'; tmp[1] = '\0'; strcat(out_mode, tmp); } if (argc == optind) return usage(is_long_help); // potential memory leak... // read the list of read groups if (fn_rg) { FILE *fp_rg; char buf[1024]; int ret; g_rghash = kh_init(rg); fp_rg = fopen(fn_rg, "r"); while (!feof(fp_rg) && fscanf(fp_rg, "%s", buf) > 0) // this is not a good style, but bear me... kh_put(rg, g_rghash, strdup(buf), &ret); // we'd better check duplicates... fclose(fp_rg); } // generate the fn_list if necessary if (fn_list == 0 && fn_ref) fn_list = samfaipath(fn_ref); // open file handlers if ((in = samopen(argv[optind], in_mode, fn_list)) == 0) { fprintf(stderr, "[main_samview] fail to open \"%s\" for reading.\n", argv[optind]); ret = 1; goto view_end; } if (in->header == 0) { fprintf(stderr, "[main_samview] fail to read the header from \"%s\".\n", argv[optind]); ret = 1; goto view_end; } if (g_rghash) { // FIXME: I do not know what "bam_header_t::n_text" is for... char *tmp; int l; tmp = drop_rg(in->header->text, g_rghash, &l); free(in->header->text); in->header->text = tmp; in->header->l_text = l; } if (!is_count && (out = samopen(fn_out? fn_out : "-", out_mode, in->header)) == 0) { fprintf(stderr, "[main_samview] fail to open \"%s\" for writing.\n", fn_out? fn_out : "standard output"); ret = 1; goto view_end; } if (is_header_only) goto view_end; // no need to print alignments if (argc == optind + 1) { // convert/print the entire file bam1_t *b = bam_init1(); int r; while ((r = samread(in, b)) >= 0) { // read one alignment from `in' if (!__g_skip_aln(in->header, b)) { if (!is_count) samwrite(out, b); // write the alignment to `out' count++; } } if (r < -1) { fprintf(stderr, "[main_samview] truncated file.\n"); ret = 1; } bam_destroy1(b); } else { // retrieve alignments in specified regions int i; bam_index_t *idx = 0; if (is_bamin) idx = bam_index_load(argv[optind]); // load BAM index if (idx == 0) { // index is unavailable fprintf(stderr, "[main_samview] random alignment retrieval only works for indexed BAM files.\n"); ret = 1; goto view_end; } for (i = optind + 1; i < argc; ++i) { int tid, beg, end, result; bam_parse_region(in->header, argv[i], &tid, &beg, &end); // parse a region in the format like `chr2:100-200' if (tid < 0) { // reference name is not found fprintf(stderr, "[main_samview] region \"%s\" specifies an unknown reference name. Continue anyway.\n", argv[i]); continue; } // fetch alignments if (is_count) { count_func_data_t count_data = { in->header, &count }; result = bam_fetch(in->x.bam, idx, tid, beg, end, &count_data, count_func); } else result = bam_fetch(in->x.bam, idx, tid, beg, end, out, view_func); if (result < 0) { fprintf(stderr, "[main_samview] retrieval of region \"%s\" failed due to truncated file or corrupt BAM index file\n", argv[i]); ret = 1; break; } } bam_index_destroy(idx); // destroy the BAM index } view_end: if (is_count && ret == 0) { printf("%d\n", count); } // close files, free and return free(fn_list); free(fn_ref); free(fn_out); free(g_library); free(g_rg); free(fn_rg); if (g_bed) bed_destroy(g_bed); if (g_rghash) { khint_t k; for (k = 0; k < kh_end(g_rghash); ++k) if (kh_exist(g_rghash, k)) free((char*)kh_key(g_rghash, k)); kh_destroy(rg, g_rghash); } samclose(in); if (!is_count) samclose(out); return ret; } static int usage(int is_long_help) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: samtools view [options] | [region1 [...]]\n\n"); fprintf(stderr, "Options: -b output BAM\n"); fprintf(stderr, " -h print header for the SAM output\n"); fprintf(stderr, " -H print header only (no alignments)\n"); fprintf(stderr, " -S input is SAM\n"); fprintf(stderr, " -u uncompressed BAM output (force -b)\n"); fprintf(stderr, " -1 fast compression (force -b)\n"); fprintf(stderr, " -x output FLAG in HEX (samtools-C specific)\n"); fprintf(stderr, " -X output FLAG in string (samtools-C specific)\n"); fprintf(stderr, " -c print only the count of matching records\n"); fprintf(stderr, " -L FILE output alignments overlapping the input BED FILE [null]\n"); fprintf(stderr, " -t FILE list of reference names and lengths (force -S) [null]\n"); fprintf(stderr, " -T FILE reference sequence file (force -S) [null]\n"); fprintf(stderr, " -o FILE output file name [stdout]\n"); fprintf(stderr, " -R FILE list of read groups to be outputted [null]\n"); fprintf(stderr, " -f INT required flag, 0 for unset [0]\n"); fprintf(stderr, " -F INT filtering flag, 0 for unset [0]\n"); fprintf(stderr, " -q INT minimum mapping quality [0]\n"); fprintf(stderr, " -l STR only output reads in library STR [null]\n"); fprintf(stderr, " -r STR only output reads in read group STR [null]\n"); fprintf(stderr, " -s FLOAT fraction of templates to subsample; integer part as seed [-1]\n"); fprintf(stderr, " -? longer help\n"); fprintf(stderr, "\n"); if (is_long_help) fprintf(stderr, "Notes:\n\ \n\ 1. By default, this command assumes the file on the command line is in\n\ the BAM format and it prints the alignments in SAM. If `-t' is\n\ applied, the input file is assumed to be in the SAM format. The\n\ file supplied with `-t' is SPACE/TAB delimited with the first two\n\ fields of each line consisting of the reference name and the\n\ corresponding sequence length. The `.fai' file generated by `faidx'\n\ can be used here. This file may be empty if reads are unaligned.\n\ \n\ 2. SAM->BAM conversion: `samtools view -bT ref.fa in.sam.gz'.\n\ \n\ 3. BAM->SAM conversion: `samtools view in.bam'.\n\ \n\ 4. A region should be presented in one of the following formats:\n\ `chr1', `chr2:1,000' and `chr3:1000-2,000'. When a region is\n\ specified, the input alignment file must be an indexed BAM file.\n\ \n\ 5. Option `-u' is preferred over `-b' when the output is piped to\n\ another samtools command.\n\ \n\ 6. In a string FLAG, each character represents one bit with\n\ p=0x1 (paired), P=0x2 (properly paired), u=0x4 (unmapped),\n\ U=0x8 (mate unmapped), r=0x10 (reverse), R=0x20 (mate reverse)\n\ 1=0x40 (first), 2=0x80 (second), s=0x100 (not primary), \n\ f=0x200 (failure) and d=0x400 (duplicate). Note that `-x' and\n\ `-X' are samtools-C specific. Picard and older samtools do not\n\ support HEX or string flags.\n\ \n"); return 1; } int main_import(int argc, char *argv[]) { int argc2, ret; char **argv2; if (argc != 4) { fprintf(stderr, "Usage: bamtk import \n"); return 1; } argc2 = 6; argv2 = calloc(6, sizeof(char*)); argv2[0] = "import", argv2[1] = "-o", argv2[2] = argv[3], argv2[3] = "-bt", argv2[4] = argv[1], argv2[5] = argv[2]; ret = main_samview(argc2, argv2); free(argv2); return ret; } int8_t seq_comp_table[16] = { 0, 8, 4, 12, 2, 10, 9, 14, 1, 6, 5, 13, 3, 11, 7, 15 }; int main_bam2fq(int argc, char *argv[]) { bamFile fp; bam_header_t *h; bam1_t *b; int8_t *buf; int max_buf; if (argc == 1) { fprintf(stderr, "Usage: samtools bam2fq \n"); return 1; } fp = strcmp(argv[1], "-")? bam_open(argv[1], "r") : bam_dopen(fileno(stdin), "r"); if (fp == 0) return 1; h = bam_header_read(fp); b = bam_init1(); buf = 0; max_buf = 0; while (bam_read1(fp, b) >= 0) { int i, qlen = b->core.l_qseq; uint8_t *seq; putchar('@'); fputs(bam1_qname(b), stdout); if ((b->core.flag & 0x40) && !(b->core.flag & 0x80)) puts("/1"); else if ((b->core.flag & 0x80) && !(b->core.flag & 0x40)) puts("/2"); else putchar('\n'); if (max_buf < qlen + 1) { max_buf = qlen + 1; kroundup32(max_buf); buf = realloc(buf, max_buf); } buf[qlen] = 0; seq = bam1_seq(b); for (i = 0; i < qlen; ++i) buf[i] = bam1_seqi(seq, i); if (b->core.flag & 16) { // reverse complement for (i = 0; i < qlen>>1; ++i) { int8_t t = seq_comp_table[buf[qlen - 1 - i]]; buf[qlen - 1 - i] = seq_comp_table[buf[i]]; buf[i] = t; } if (qlen&1) buf[i] = seq_comp_table[buf[i]]; } for (i = 0; i < qlen; ++i) buf[i] = bam_nt16_rev_table[buf[i]]; puts((char*)buf); puts("+"); seq = bam1_qual(b); for (i = 0; i < qlen; ++i) buf[i] = 33 + seq[i]; if (b->core.flag & 16) { // reverse for (i = 0; i < qlen>>1; ++i) { int8_t t = buf[qlen - 1 - i]; buf[qlen - 1 - i] = buf[i]; buf[i] = t; } } puts((char*)buf); } free(buf); bam_destroy1(b); bam_header_destroy(h); bam_close(fp); return 0; } genometools-1.5.1/src/external/samtools-0.1.18/sample.c000066400000000000000000000056501211610345200224740ustar00rootroot00000000000000#include #include #include "sample.h" #include "khash.h" KHASH_MAP_INIT_STR(sm, int) bam_sample_t *bam_smpl_init(void) { bam_sample_t *s; s = calloc(1, sizeof(bam_sample_t)); s->rg2smid = kh_init(sm); s->sm2id = kh_init(sm); return s; } void bam_smpl_destroy(bam_sample_t *sm) { int i; khint_t k; khash_t(sm) *rg2smid = (khash_t(sm)*)sm->rg2smid; if (sm == 0) return; for (i = 0; i < sm->n; ++i) free(sm->smpl[i]); free(sm->smpl); for (k = kh_begin(rg2smid); k != kh_end(rg2smid); ++k) if (kh_exist(rg2smid, k)) free((char*)kh_key(rg2smid, k)); kh_destroy(sm, sm->rg2smid); kh_destroy(sm, sm->sm2id); free(sm); } static void add_pair(bam_sample_t *sm, khash_t(sm) *sm2id, const char *key, const char *val) { khint_t k_rg, k_sm; int ret; khash_t(sm) *rg2smid = (khash_t(sm)*)sm->rg2smid; k_rg = kh_get(sm, rg2smid, key); if (k_rg != kh_end(rg2smid)) return; // duplicated @RG-ID k_rg = kh_put(sm, rg2smid, strdup(key), &ret); k_sm = kh_get(sm, sm2id, val); if (k_sm == kh_end(sm2id)) { // absent if (sm->n == sm->m) { sm->m = sm->m? sm->m<<1 : 1; sm->smpl = realloc(sm->smpl, sizeof(void*) * sm->m); } sm->smpl[sm->n] = strdup(val); k_sm = kh_put(sm, sm2id, sm->smpl[sm->n], &ret); kh_val(sm2id, k_sm) = sm->n++; } kh_val(rg2smid, k_rg) = kh_val(sm2id, k_sm); } int bam_smpl_add(bam_sample_t *sm, const char *fn, const char *txt) { const char *p = txt, *q, *r; kstring_t buf, first_sm; int n = 0; khash_t(sm) *sm2id = (khash_t(sm)*)sm->sm2id; if (txt == 0) { add_pair(sm, sm2id, fn, fn); return 0; } memset(&buf, 0, sizeof(kstring_t)); memset(&first_sm, 0, sizeof(kstring_t)); while ((q = strstr(p, "@RG")) != 0) { p = q + 3; r = q = 0; if ((q = strstr(p, "\tID:")) != 0) q += 4; if ((r = strstr(p, "\tSM:")) != 0) r += 4; if (r && q) { char *u, *v; int oq, or; for (u = (char*)q; *u && *u != '\t' && *u != '\n'; ++u); for (v = (char*)r; *v && *v != '\t' && *v != '\n'; ++v); oq = *u; or = *v; *u = *v = '\0'; buf.l = 0; kputs(fn, &buf); kputc('/', &buf); kputs(q, &buf); add_pair(sm, sm2id, buf.s, r); if ( !first_sm.s ) kputs(r,&first_sm); *u = oq; *v = or; } else break; p = q > r? q : r; ++n; } if (n == 0) add_pair(sm, sm2id, fn, fn); // If there is only one RG tag present in the header and reads are not annotated, don't refuse to work but // use the tag instead. else if ( n==1 && first_sm.s ) add_pair(sm,sm2id,fn,first_sm.s); if ( first_sm.s ) free(first_sm.s); // add_pair(sm, sm2id, fn, fn); free(buf.s); return 0; } int bam_smpl_rg2smid(const bam_sample_t *sm, const char *fn, const char *rg, kstring_t *str) { khint_t k; khash_t(sm) *rg2smid = (khash_t(sm)*)sm->rg2smid; if (rg) { str->l = 0; kputs(fn, str); kputc('/', str); kputs(rg, str); k = kh_get(sm, rg2smid, str->s); } else k = kh_get(sm, rg2smid, fn); return k == kh_end(rg2smid)? -1 : kh_val(rg2smid, k); } genometools-1.5.1/src/external/samtools-0.1.18/sample.h000066400000000000000000000006141211610345200224740ustar00rootroot00000000000000#ifndef BAM_SAMPLE_H #define BAM_SAMPLE_H #include "kstring.h" typedef struct { int n, m; char **smpl; void *rg2smid, *sm2id; } bam_sample_t; bam_sample_t *bam_smpl_init(void); int bam_smpl_add(bam_sample_t *sm, const char *abs, const char *txt); int bam_smpl_rg2smid(const bam_sample_t *sm, const char *fn, const char *rg, kstring_t *str); void bam_smpl_destroy(bam_sample_t *sm); #endif genometools-1.5.1/src/external/samtools-0.1.18/win32/000077500000000000000000000000001211610345200220035ustar00rootroot00000000000000genometools-1.5.1/src/external/samtools-0.1.18/win32/xcurses.h000066400000000000000000001413731211610345200236610ustar00rootroot00000000000000/* Public Domain Curses */ /* $Id: curses.h,v 1.295 2008/07/15 17:13:25 wmcbrine Exp $ */ /*----------------------------------------------------------------------* * PDCurses * *----------------------------------------------------------------------*/ #ifndef __PDCURSES__ #define __PDCURSES__ 1 /*man-start************************************************************** PDCurses definitions list: (Only define those needed) XCURSES True if compiling for X11. PDC_RGB True if you want to use RGB color definitions (Red = 1, Green = 2, Blue = 4) instead of BGR. PDC_WIDE True if building wide-character support. PDC_DLL_BUILD True if building a Win32 DLL. NCURSES_MOUSE_VERSION Use the ncurses mouse API instead of PDCurses' traditional mouse API. PDCurses portable platform definitions list: PDC_BUILD Defines API build version. PDCURSES Enables access to PDCurses-only routines. XOPEN Always true. SYSVcurses True if you are compiling for SYSV portability. BSDcurses True if you are compiling for BSD portability. **man-end****************************************************************/ #define PDC_BUILD 3401 #define PDCURSES 1 /* PDCurses-only routines */ #define XOPEN 1 /* X/Open Curses routines */ #define SYSVcurses 1 /* System V Curses routines */ #define BSDcurses 1 /* BSD Curses routines */ #define CHTYPE_LONG 1 /* size of chtype; long */ /*----------------------------------------------------------------------*/ #include #include #include /* Required by X/Open usage below */ #ifdef PDC_WIDE # include #endif #if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS) extern "C" { # define bool _bool #endif /*---------------------------------------------------------------------- * * PDCurses Manifest Constants * */ #ifndef FALSE # define FALSE 0 #endif #ifndef TRUE # define TRUE 1 #endif #ifndef NULL # define NULL (void *)0 #endif #ifndef ERR # define ERR (-1) #endif #ifndef OK # define OK 0 #endif /*---------------------------------------------------------------------- * * PDCurses Type Declarations * */ typedef unsigned char bool; /* PDCurses Boolean type */ #ifdef CHTYPE_LONG # if _LP64 typedef unsigned int chtype; # else typedef unsigned long chtype; /* 16-bit attr + 16-bit char */ # endif #else typedef unsigned short chtype; /* 8-bit attr + 8-bit char */ #endif #ifdef PDC_WIDE typedef chtype cchar_t; #endif typedef chtype attr_t; /*---------------------------------------------------------------------- * * PDCurses Mouse Interface -- SYSVR4, with extensions * */ typedef struct { int x; /* absolute column, 0 based, measured in characters */ int y; /* absolute row, 0 based, measured in characters */ short button[3]; /* state of each button */ int changes; /* flags indicating what has changed with the mouse */ } MOUSE_STATUS; #define BUTTON_RELEASED 0x0000 #define BUTTON_PRESSED 0x0001 #define BUTTON_CLICKED 0x0002 #define BUTTON_DOUBLE_CLICKED 0x0003 #define BUTTON_TRIPLE_CLICKED 0x0004 #define BUTTON_MOVED 0x0005 /* PDCurses */ #define WHEEL_SCROLLED 0x0006 /* PDCurses */ #define BUTTON_ACTION_MASK 0x0007 /* PDCurses */ #define PDC_BUTTON_SHIFT 0x0008 /* PDCurses */ #define PDC_BUTTON_CONTROL 0x0010 /* PDCurses */ #define PDC_BUTTON_ALT 0x0020 /* PDCurses */ #define BUTTON_MODIFIER_MASK 0x0038 /* PDCurses */ #define MOUSE_X_POS (Mouse_status.x) #define MOUSE_Y_POS (Mouse_status.y) /* * Bits associated with the .changes field: * 3 2 1 0 * 210987654321098765432109876543210 * 1 <- button 1 has changed * 10 <- button 2 has changed * 100 <- button 3 has changed * 1000 <- mouse has moved * 10000 <- mouse position report * 100000 <- mouse wheel up * 1000000 <- mouse wheel down */ #define PDC_MOUSE_MOVED 0x0008 #define PDC_MOUSE_POSITION 0x0010 #define PDC_MOUSE_WHEEL_UP 0x0020 #define PDC_MOUSE_WHEEL_DOWN 0x0040 #define A_BUTTON_CHANGED (Mouse_status.changes & 7) #define MOUSE_MOVED (Mouse_status.changes & PDC_MOUSE_MOVED) #define MOUSE_POS_REPORT (Mouse_status.changes & PDC_MOUSE_POSITION) #define BUTTON_CHANGED(x) (Mouse_status.changes & (1 << ((x) - 1))) #define BUTTON_STATUS(x) (Mouse_status.button[(x) - 1]) #define MOUSE_WHEEL_UP (Mouse_status.changes & PDC_MOUSE_WHEEL_UP) #define MOUSE_WHEEL_DOWN (Mouse_status.changes & PDC_MOUSE_WHEEL_DOWN) /* mouse bit-masks */ #define BUTTON1_RELEASED 0x00000001L #define BUTTON1_PRESSED 0x00000002L #define BUTTON1_CLICKED 0x00000004L #define BUTTON1_DOUBLE_CLICKED 0x00000008L #define BUTTON1_TRIPLE_CLICKED 0x00000010L #define BUTTON1_MOVED 0x00000010L /* PDCurses */ #define BUTTON2_RELEASED 0x00000020L #define BUTTON2_PRESSED 0x00000040L #define BUTTON2_CLICKED 0x00000080L #define BUTTON2_DOUBLE_CLICKED 0x00000100L #define BUTTON2_TRIPLE_CLICKED 0x00000200L #define BUTTON2_MOVED 0x00000200L /* PDCurses */ #define BUTTON3_RELEASED 0x00000400L #define BUTTON3_PRESSED 0x00000800L #define BUTTON3_CLICKED 0x00001000L #define BUTTON3_DOUBLE_CLICKED 0x00002000L #define BUTTON3_TRIPLE_CLICKED 0x00004000L #define BUTTON3_MOVED 0x00004000L /* PDCurses */ /* For the ncurses-compatible functions only, BUTTON4_PRESSED and BUTTON5_PRESSED are returned for mouse scroll wheel up and down; otherwise PDCurses doesn't support buttons 4 and 5 */ #define BUTTON4_RELEASED 0x00008000L #define BUTTON4_PRESSED 0x00010000L #define BUTTON4_CLICKED 0x00020000L #define BUTTON4_DOUBLE_CLICKED 0x00040000L #define BUTTON4_TRIPLE_CLICKED 0x00080000L #define BUTTON5_RELEASED 0x00100000L #define BUTTON5_PRESSED 0x00200000L #define BUTTON5_CLICKED 0x00400000L #define BUTTON5_DOUBLE_CLICKED 0x00800000L #define BUTTON5_TRIPLE_CLICKED 0x01000000L #define MOUSE_WHEEL_SCROLL 0x02000000L /* PDCurses */ #define BUTTON_MODIFIER_SHIFT 0x04000000L /* PDCurses */ #define BUTTON_MODIFIER_CONTROL 0x08000000L /* PDCurses */ #define BUTTON_MODIFIER_ALT 0x10000000L /* PDCurses */ #define ALL_MOUSE_EVENTS 0x1fffffffL #define REPORT_MOUSE_POSITION 0x20000000L /* ncurses mouse interface */ typedef unsigned long mmask_t; typedef struct { short id; /* unused, always 0 */ int x, y, z; /* x, y same as MOUSE_STATUS; z unused */ mmask_t bstate; /* equivalent to changes + button[], but in the same format as used for mousemask() */ } MEVENT; #ifdef NCURSES_MOUSE_VERSION # define BUTTON_SHIFT BUTTON_MODIFIER_SHIFT # define BUTTON_CONTROL BUTTON_MODIFIER_CONTROL # define BUTTON_CTRL BUTTON_MODIFIER_CONTROL # define BUTTON_ALT BUTTON_MODIFIER_ALT #else # define BUTTON_SHIFT PDC_BUTTON_SHIFT # define BUTTON_CONTROL PDC_BUTTON_CONTROL # define BUTTON_ALT PDC_BUTTON_ALT #endif /*---------------------------------------------------------------------- * * PDCurses Structure Definitions * */ typedef struct _win /* definition of a window */ { int _cury; /* current pseudo-cursor */ int _curx; int _maxy; /* max window coordinates */ int _maxx; int _begy; /* origin on screen */ int _begx; int _flags; /* window properties */ chtype _attrs; /* standard attributes and colors */ chtype _bkgd; /* background, normally blank */ bool _clear; /* causes clear at next refresh */ bool _leaveit; /* leaves cursor where it is */ bool _scroll; /* allows window scrolling */ bool _nodelay; /* input character wait flag */ bool _immed; /* immediate update flag */ bool _sync; /* synchronise window ancestors */ bool _use_keypad; /* flags keypad key mode active */ chtype **_y; /* pointer to line pointer array */ int *_firstch; /* first changed character in line */ int *_lastch; /* last changed character in line */ int _tmarg; /* top of scrolling region */ int _bmarg; /* bottom of scrolling region */ int _delayms; /* milliseconds of delay for getch() */ int _parx, _pary; /* coords relative to parent (0,0) */ struct _win *_parent; /* subwin's pointer to parent win */ } WINDOW; /* Avoid using the SCREEN struct directly -- use the corresponding functions if possible. This struct may eventually be made private. */ typedef struct { bool alive; /* if initscr() called, and not endwin() */ bool autocr; /* if cr -> lf */ bool cbreak; /* if terminal unbuffered */ bool echo; /* if terminal echo */ bool raw_inp; /* raw input mode (v. cooked input) */ bool raw_out; /* raw output mode (7 v. 8 bits) */ bool audible; /* FALSE if the bell is visual */ bool mono; /* TRUE if current screen is mono */ bool resized; /* TRUE if TERM has been resized */ bool orig_attr; /* TRUE if we have the original colors */ short orig_fore; /* original screen foreground color */ short orig_back; /* original screen foreground color */ int cursrow; /* position of physical cursor */ int curscol; /* position of physical cursor */ int visibility; /* visibility of cursor */ int orig_cursor; /* original cursor size */ int lines; /* new value for LINES */ int cols; /* new value for COLS */ unsigned long _trap_mbe; /* trap these mouse button events */ unsigned long _map_mbe_to_key; /* map mouse buttons to slk */ int mouse_wait; /* time to wait (in ms) for a button release after a press, in order to count it as a click */ int slklines; /* lines in use by slk_init() */ WINDOW *slk_winptr; /* window for slk */ int linesrippedoff; /* lines ripped off via ripoffline() */ int linesrippedoffontop; /* lines ripped off on top via ripoffline() */ int delaytenths; /* 1/10ths second to wait block getch() for */ bool _preserve; /* TRUE if screen background to be preserved */ int _restore; /* specifies if screen background to be restored, and how */ bool save_key_modifiers; /* TRUE if each key modifiers saved with each key press */ bool return_key_modifiers; /* TRUE if modifier keys are returned as "real" keys */ bool key_code; /* TRUE if last key is a special key; used internally by get_wch() */ #ifdef XCURSES int XcurscrSize; /* size of Xcurscr shared memory block */ bool sb_on; int sb_viewport_y; int sb_viewport_x; int sb_total_y; int sb_total_x; int sb_cur_y; int sb_cur_x; #endif short line_color; /* color of line attributes - default -1 */ } SCREEN; /*---------------------------------------------------------------------- * * PDCurses External Variables * */ #ifdef PDC_DLL_BUILD # ifdef CURSES_LIBRARY # define PDCEX __declspec(dllexport) extern # else # define PDCEX __declspec(dllimport) # endif #else # define PDCEX extern #endif PDCEX int LINES; /* terminal height */ PDCEX int COLS; /* terminal width */ PDCEX WINDOW *stdscr; /* the default screen window */ PDCEX WINDOW *curscr; /* the current screen image */ PDCEX SCREEN *SP; /* curses variables */ PDCEX MOUSE_STATUS Mouse_status; PDCEX int COLORS; PDCEX int COLOR_PAIRS; PDCEX int TABSIZE; PDCEX chtype acs_map[]; /* alternate character set map */ PDCEX char ttytype[]; /* terminal name/description */ /*man-start************************************************************** PDCurses Text Attributes ======================== Originally, PDCurses used a short (16 bits) for its chtype. To include color, a number of things had to be sacrificed from the strict Unix and System V support. The main problem was fitting all character attributes and color into an unsigned char (all 8 bits!). Today, PDCurses by default uses a long (32 bits) for its chtype, as in System V. The short chtype is still available, by undefining CHTYPE_LONG and rebuilding the library. The following is the structure of a win->_attrs chtype: short form: ------------------------------------------------- |15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| ------------------------------------------------- color number | attrs | character eg 'a' The available non-color attributes are bold, reverse and blink. Others have no effect. The high order char is an index into an array of physical colors (defined in color.c) -- 32 foreground/background color pairs (5 bits) plus 3 bits for other attributes. long form: ---------------------------------------------------------------------------- |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|..| 3| 2| 1| 0| ---------------------------------------------------------------------------- color number | modifiers | character eg 'a' The available non-color attributes are bold, underline, invisible, right-line, left-line, protect, reverse and blink. 256 color pairs (8 bits), 8 bits for other attributes, and 16 bits for character data. **man-end****************************************************************/ /*** Video attribute macros ***/ #define A_NORMAL (chtype)0 #ifdef CHTYPE_LONG # define A_ALTCHARSET (chtype)0x00010000 # define A_RIGHTLINE (chtype)0x00020000 # define A_LEFTLINE (chtype)0x00040000 # define A_INVIS (chtype)0x00080000 # define A_UNDERLINE (chtype)0x00100000 # define A_REVERSE (chtype)0x00200000 # define A_BLINK (chtype)0x00400000 # define A_BOLD (chtype)0x00800000 # define A_ATTRIBUTES (chtype)0xffff0000 # define A_CHARTEXT (chtype)0x0000ffff # define A_COLOR (chtype)0xff000000 # define A_ITALIC A_INVIS # define A_PROTECT (A_UNDERLINE | A_LEFTLINE | A_RIGHTLINE) # define PDC_ATTR_SHIFT 19 # define PDC_COLOR_SHIFT 24 #else # define A_BOLD (chtype)0x0100 /* X/Open */ # define A_REVERSE (chtype)0x0200 /* X/Open */ # define A_BLINK (chtype)0x0400 /* X/Open */ # define A_ATTRIBUTES (chtype)0xff00 /* X/Open */ # define A_CHARTEXT (chtype)0x00ff /* X/Open */ # define A_COLOR (chtype)0xf800 /* System V */ # define A_ALTCHARSET A_NORMAL /* X/Open */ # define A_PROTECT A_NORMAL /* X/Open */ # define A_UNDERLINE A_NORMAL /* X/Open */ # define A_LEFTLINE A_NORMAL # define A_RIGHTLINE A_NORMAL # define A_ITALIC A_NORMAL # define A_INVIS A_NORMAL # define PDC_ATTR_SHIFT 8 # define PDC_COLOR_SHIFT 11 #endif #define A_STANDOUT (A_REVERSE | A_BOLD) /* X/Open */ #define A_DIM A_NORMAL #define CHR_MSK A_CHARTEXT /* Obsolete */ #define ATR_MSK A_ATTRIBUTES /* Obsolete */ #define ATR_NRM A_NORMAL /* Obsolete */ /* For use with attr_t -- X/Open says, "these shall be distinct", so this is a non-conforming implementation. */ #define WA_ALTCHARSET A_ALTCHARSET #define WA_BLINK A_BLINK #define WA_BOLD A_BOLD #define WA_DIM A_DIM #define WA_INVIS A_INVIS #define WA_LEFT A_LEFTLINE #define WA_PROTECT A_PROTECT #define WA_REVERSE A_REVERSE #define WA_RIGHT A_RIGHTLINE #define WA_STANDOUT A_STANDOUT #define WA_UNDERLINE A_UNDERLINE #define WA_HORIZONTAL A_NORMAL #define WA_LOW A_NORMAL #define WA_TOP A_NORMAL #define WA_VERTICAL A_NORMAL /*** Alternate character set macros ***/ /* 'w' = 32-bit chtype; acs_map[] index | A_ALTCHARSET 'n' = 16-bit chtype; it gets the fallback set because no bit is available for A_ALTCHARSET */ #ifdef CHTYPE_LONG # define ACS_PICK(w, n) ((chtype)w | A_ALTCHARSET) #else # define ACS_PICK(w, n) ((chtype)n) #endif /* VT100-compatible symbols -- box chars */ #define ACS_ULCORNER ACS_PICK('l', '+') #define ACS_LLCORNER ACS_PICK('m', '+') #define ACS_URCORNER ACS_PICK('k', '+') #define ACS_LRCORNER ACS_PICK('j', '+') #define ACS_RTEE ACS_PICK('u', '+') #define ACS_LTEE ACS_PICK('t', '+') #define ACS_BTEE ACS_PICK('v', '+') #define ACS_TTEE ACS_PICK('w', '+') #define ACS_HLINE ACS_PICK('q', '-') #define ACS_VLINE ACS_PICK('x', '|') #define ACS_PLUS ACS_PICK('n', '+') /* VT100-compatible symbols -- other */ #define ACS_S1 ACS_PICK('o', '-') #define ACS_S9 ACS_PICK('s', '_') #define ACS_DIAMOND ACS_PICK('`', '+') #define ACS_CKBOARD ACS_PICK('a', ':') #define ACS_DEGREE ACS_PICK('f', '\'') #define ACS_PLMINUS ACS_PICK('g', '#') #define ACS_BULLET ACS_PICK('~', 'o') /* Teletype 5410v1 symbols -- these are defined in SysV curses, but are not well-supported by most terminals. Stick to VT100 characters for optimum portability. */ #define ACS_LARROW ACS_PICK(',', '<') #define ACS_RARROW ACS_PICK('+', '>') #define ACS_DARROW ACS_PICK('.', 'v') #define ACS_UARROW ACS_PICK('-', '^') #define ACS_BOARD ACS_PICK('h', '#') #define ACS_LANTERN ACS_PICK('i', '*') #define ACS_BLOCK ACS_PICK('0', '#') /* That goes double for these -- undocumented SysV symbols. Don't use them. */ #define ACS_S3 ACS_PICK('p', '-') #define ACS_S7 ACS_PICK('r', '-') #define ACS_LEQUAL ACS_PICK('y', '<') #define ACS_GEQUAL ACS_PICK('z', '>') #define ACS_PI ACS_PICK('{', 'n') #define ACS_NEQUAL ACS_PICK('|', '+') #define ACS_STERLING ACS_PICK('}', 'L') /* Box char aliases */ #define ACS_BSSB ACS_ULCORNER #define ACS_SSBB ACS_LLCORNER #define ACS_BBSS ACS_URCORNER #define ACS_SBBS ACS_LRCORNER #define ACS_SBSS ACS_RTEE #define ACS_SSSB ACS_LTEE #define ACS_SSBS ACS_BTEE #define ACS_BSSS ACS_TTEE #define ACS_BSBS ACS_HLINE #define ACS_SBSB ACS_VLINE #define ACS_SSSS ACS_PLUS /* cchar_t aliases */ #ifdef PDC_WIDE # define WACS_ULCORNER (&(acs_map['l'])) # define WACS_LLCORNER (&(acs_map['m'])) # define WACS_URCORNER (&(acs_map['k'])) # define WACS_LRCORNER (&(acs_map['j'])) # define WACS_RTEE (&(acs_map['u'])) # define WACS_LTEE (&(acs_map['t'])) # define WACS_BTEE (&(acs_map['v'])) # define WACS_TTEE (&(acs_map['w'])) # define WACS_HLINE (&(acs_map['q'])) # define WACS_VLINE (&(acs_map['x'])) # define WACS_PLUS (&(acs_map['n'])) # define WACS_S1 (&(acs_map['o'])) # define WACS_S9 (&(acs_map['s'])) # define WACS_DIAMOND (&(acs_map['`'])) # define WACS_CKBOARD (&(acs_map['a'])) # define WACS_DEGREE (&(acs_map['f'])) # define WACS_PLMINUS (&(acs_map['g'])) # define WACS_BULLET (&(acs_map['~'])) # define WACS_LARROW (&(acs_map[','])) # define WACS_RARROW (&(acs_map['+'])) # define WACS_DARROW (&(acs_map['.'])) # define WACS_UARROW (&(acs_map['-'])) # define WACS_BOARD (&(acs_map['h'])) # define WACS_LANTERN (&(acs_map['i'])) # define WACS_BLOCK (&(acs_map['0'])) # define WACS_S3 (&(acs_map['p'])) # define WACS_S7 (&(acs_map['r'])) # define WACS_LEQUAL (&(acs_map['y'])) # define WACS_GEQUAL (&(acs_map['z'])) # define WACS_PI (&(acs_map['{'])) # define WACS_NEQUAL (&(acs_map['|'])) # define WACS_STERLING (&(acs_map['}'])) # define WACS_BSSB WACS_ULCORNER # define WACS_SSBB WACS_LLCORNER # define WACS_BBSS WACS_URCORNER # define WACS_SBBS WACS_LRCORNER # define WACS_SBSS WACS_RTEE # define WACS_SSSB WACS_LTEE # define WACS_SSBS WACS_BTEE # define WACS_BSSS WACS_TTEE # define WACS_BSBS WACS_HLINE # define WACS_SBSB WACS_VLINE # define WACS_SSSS WACS_PLUS #endif /*** Color macros ***/ #define COLOR_BLACK 0 #ifdef PDC_RGB /* RGB */ # define COLOR_RED 1 # define COLOR_GREEN 2 # define COLOR_BLUE 4 #else /* BGR */ # define COLOR_BLUE 1 # define COLOR_GREEN 2 # define COLOR_RED 4 #endif #define COLOR_CYAN (COLOR_BLUE | COLOR_GREEN) #define COLOR_MAGENTA (COLOR_RED | COLOR_BLUE) #define COLOR_YELLOW (COLOR_RED | COLOR_GREEN) #define COLOR_WHITE 7 /*---------------------------------------------------------------------- * * Function and Keypad Key Definitions. * Many are just for compatibility. * */ #define KEY_CODE_YES 0x100 /* If get_wch() gives a key code */ #define KEY_BREAK 0x101 /* Not on PC KBD */ #define KEY_DOWN 0x102 /* Down arrow key */ #define KEY_UP 0x103 /* Up arrow key */ #define KEY_LEFT 0x104 /* Left arrow key */ #define KEY_RIGHT 0x105 /* Right arrow key */ #define KEY_HOME 0x106 /* home key */ #define KEY_BACKSPACE 0x107 /* not on pc */ #define KEY_F0 0x108 /* function keys; 64 reserved */ #define KEY_DL 0x148 /* delete line */ #define KEY_IL 0x149 /* insert line */ #define KEY_DC 0x14a /* delete character */ #define KEY_IC 0x14b /* insert char or enter ins mode */ #define KEY_EIC 0x14c /* exit insert char mode */ #define KEY_CLEAR 0x14d /* clear screen */ #define KEY_EOS 0x14e /* clear to end of screen */ #define KEY_EOL 0x14f /* clear to end of line */ #define KEY_SF 0x150 /* scroll 1 line forward */ #define KEY_SR 0x151 /* scroll 1 line back (reverse) */ #define KEY_NPAGE 0x152 /* next page */ #define KEY_PPAGE 0x153 /* previous page */ #define KEY_STAB 0x154 /* set tab */ #define KEY_CTAB 0x155 /* clear tab */ #define KEY_CATAB 0x156 /* clear all tabs */ #define KEY_ENTER 0x157 /* enter or send (unreliable) */ #define KEY_SRESET 0x158 /* soft/reset (partial/unreliable) */ #define KEY_RESET 0x159 /* reset/hard reset (unreliable) */ #define KEY_PRINT 0x15a /* print/copy */ #define KEY_LL 0x15b /* home down/bottom (lower left) */ #define KEY_ABORT 0x15c /* abort/terminate key (any) */ #define KEY_SHELP 0x15d /* short help */ #define KEY_LHELP 0x15e /* long help */ #define KEY_BTAB 0x15f /* Back tab key */ #define KEY_BEG 0x160 /* beg(inning) key */ #define KEY_CANCEL 0x161 /* cancel key */ #define KEY_CLOSE 0x162 /* close key */ #define KEY_COMMAND 0x163 /* cmd (command) key */ #define KEY_COPY 0x164 /* copy key */ #define KEY_CREATE 0x165 /* create key */ #define KEY_END 0x166 /* end key */ #define KEY_EXIT 0x167 /* exit key */ #define KEY_FIND 0x168 /* find key */ #define KEY_HELP 0x169 /* help key */ #define KEY_MARK 0x16a /* mark key */ #define KEY_MESSAGE 0x16b /* message key */ #define KEY_MOVE 0x16c /* move key */ #define KEY_NEXT 0x16d /* next object key */ #define KEY_OPEN 0x16e /* open key */ #define KEY_OPTIONS 0x16f /* options key */ #define KEY_PREVIOUS 0x170 /* previous object key */ #define KEY_REDO 0x171 /* redo key */ #define KEY_REFERENCE 0x172 /* ref(erence) key */ #define KEY_REFRESH 0x173 /* refresh key */ #define KEY_REPLACE 0x174 /* replace key */ #define KEY_RESTART 0x175 /* restart key */ #define KEY_RESUME 0x176 /* resume key */ #define KEY_SAVE 0x177 /* save key */ #define KEY_SBEG 0x178 /* shifted beginning key */ #define KEY_SCANCEL 0x179 /* shifted cancel key */ #define KEY_SCOMMAND 0x17a /* shifted command key */ #define KEY_SCOPY 0x17b /* shifted copy key */ #define KEY_SCREATE 0x17c /* shifted create key */ #define KEY_SDC 0x17d /* shifted delete char key */ #define KEY_SDL 0x17e /* shifted delete line key */ #define KEY_SELECT 0x17f /* select key */ #define KEY_SEND 0x180 /* shifted end key */ #define KEY_SEOL 0x181 /* shifted clear line key */ #define KEY_SEXIT 0x182 /* shifted exit key */ #define KEY_SFIND 0x183 /* shifted find key */ #define KEY_SHOME 0x184 /* shifted home key */ #define KEY_SIC 0x185 /* shifted input key */ #define KEY_SLEFT 0x187 /* shifted left arrow key */ #define KEY_SMESSAGE 0x188 /* shifted message key */ #define KEY_SMOVE 0x189 /* shifted move key */ #define KEY_SNEXT 0x18a /* shifted next key */ #define KEY_SOPTIONS 0x18b /* shifted options key */ #define KEY_SPREVIOUS 0x18c /* shifted prev key */ #define KEY_SPRINT 0x18d /* shifted print key */ #define KEY_SREDO 0x18e /* shifted redo key */ #define KEY_SREPLACE 0x18f /* shifted replace key */ #define KEY_SRIGHT 0x190 /* shifted right arrow */ #define KEY_SRSUME 0x191 /* shifted resume key */ #define KEY_SSAVE 0x192 /* shifted save key */ #define KEY_SSUSPEND 0x193 /* shifted suspend key */ #define KEY_SUNDO 0x194 /* shifted undo key */ #define KEY_SUSPEND 0x195 /* suspend key */ #define KEY_UNDO 0x196 /* undo key */ /* PDCurses-specific key definitions -- PC only */ #define ALT_0 0x197 #define ALT_1 0x198 #define ALT_2 0x199 #define ALT_3 0x19a #define ALT_4 0x19b #define ALT_5 0x19c #define ALT_6 0x19d #define ALT_7 0x19e #define ALT_8 0x19f #define ALT_9 0x1a0 #define ALT_A 0x1a1 #define ALT_B 0x1a2 #define ALT_C 0x1a3 #define ALT_D 0x1a4 #define ALT_E 0x1a5 #define ALT_F 0x1a6 #define ALT_G 0x1a7 #define ALT_H 0x1a8 #define ALT_I 0x1a9 #define ALT_J 0x1aa #define ALT_K 0x1ab #define ALT_L 0x1ac #define ALT_M 0x1ad #define ALT_N 0x1ae #define ALT_O 0x1af #define ALT_P 0x1b0 #define ALT_Q 0x1b1 #define ALT_R 0x1b2 #define ALT_S 0x1b3 #define ALT_T 0x1b4 #define ALT_U 0x1b5 #define ALT_V 0x1b6 #define ALT_W 0x1b7 #define ALT_X 0x1b8 #define ALT_Y 0x1b9 #define ALT_Z 0x1ba #define CTL_LEFT 0x1bb /* Control-Left-Arrow */ #define CTL_RIGHT 0x1bc #define CTL_PGUP 0x1bd #define CTL_PGDN 0x1be #define CTL_HOME 0x1bf #define CTL_END 0x1c0 #define KEY_A1 0x1c1 /* upper left on Virtual keypad */ #define KEY_A2 0x1c2 /* upper middle on Virt. keypad */ #define KEY_A3 0x1c3 /* upper right on Vir. keypad */ #define KEY_B1 0x1c4 /* middle left on Virt. keypad */ #define KEY_B2 0x1c5 /* center on Virt. keypad */ #define KEY_B3 0x1c6 /* middle right on Vir. keypad */ #define KEY_C1 0x1c7 /* lower left on Virt. keypad */ #define KEY_C2 0x1c8 /* lower middle on Virt. keypad */ #define KEY_C3 0x1c9 /* lower right on Vir. keypad */ #define PADSLASH 0x1ca /* slash on keypad */ #define PADENTER 0x1cb /* enter on keypad */ #define CTL_PADENTER 0x1cc /* ctl-enter on keypad */ #define ALT_PADENTER 0x1cd /* alt-enter on keypad */ #define PADSTOP 0x1ce /* stop on keypad */ #define PADSTAR 0x1cf /* star on keypad */ #define PADMINUS 0x1d0 /* minus on keypad */ #define PADPLUS 0x1d1 /* plus on keypad */ #define CTL_PADSTOP 0x1d2 /* ctl-stop on keypad */ #define CTL_PADCENTER 0x1d3 /* ctl-enter on keypad */ #define CTL_PADPLUS 0x1d4 /* ctl-plus on keypad */ #define CTL_PADMINUS 0x1d5 /* ctl-minus on keypad */ #define CTL_PADSLASH 0x1d6 /* ctl-slash on keypad */ #define CTL_PADSTAR 0x1d7 /* ctl-star on keypad */ #define ALT_PADPLUS 0x1d8 /* alt-plus on keypad */ #define ALT_PADMINUS 0x1d9 /* alt-minus on keypad */ #define ALT_PADSLASH 0x1da /* alt-slash on keypad */ #define ALT_PADSTAR 0x1db /* alt-star on keypad */ #define ALT_PADSTOP 0x1dc /* alt-stop on keypad */ #define CTL_INS 0x1dd /* ctl-insert */ #define ALT_DEL 0x1de /* alt-delete */ #define ALT_INS 0x1df /* alt-insert */ #define CTL_UP 0x1e0 /* ctl-up arrow */ #define CTL_DOWN 0x1e1 /* ctl-down arrow */ #define CTL_TAB 0x1e2 /* ctl-tab */ #define ALT_TAB 0x1e3 #define ALT_MINUS 0x1e4 #define ALT_EQUAL 0x1e5 #define ALT_HOME 0x1e6 #define ALT_PGUP 0x1e7 #define ALT_PGDN 0x1e8 #define ALT_END 0x1e9 #define ALT_UP 0x1ea /* alt-up arrow */ #define ALT_DOWN 0x1eb /* alt-down arrow */ #define ALT_RIGHT 0x1ec /* alt-right arrow */ #define ALT_LEFT 0x1ed /* alt-left arrow */ #define ALT_ENTER 0x1ee /* alt-enter */ #define ALT_ESC 0x1ef /* alt-escape */ #define ALT_BQUOTE 0x1f0 /* alt-back quote */ #define ALT_LBRACKET 0x1f1 /* alt-left bracket */ #define ALT_RBRACKET 0x1f2 /* alt-right bracket */ #define ALT_SEMICOLON 0x1f3 /* alt-semi-colon */ #define ALT_FQUOTE 0x1f4 /* alt-forward quote */ #define ALT_COMMA 0x1f5 /* alt-comma */ #define ALT_STOP 0x1f6 /* alt-stop */ #define ALT_FSLASH 0x1f7 /* alt-forward slash */ #define ALT_BKSP 0x1f8 /* alt-backspace */ #define CTL_BKSP 0x1f9 /* ctl-backspace */ #define PAD0 0x1fa /* keypad 0 */ #define CTL_PAD0 0x1fb /* ctl-keypad 0 */ #define CTL_PAD1 0x1fc #define CTL_PAD2 0x1fd #define CTL_PAD3 0x1fe #define CTL_PAD4 0x1ff #define CTL_PAD5 0x200 #define CTL_PAD6 0x201 #define CTL_PAD7 0x202 #define CTL_PAD8 0x203 #define CTL_PAD9 0x204 #define ALT_PAD0 0x205 /* alt-keypad 0 */ #define ALT_PAD1 0x206 #define ALT_PAD2 0x207 #define ALT_PAD3 0x208 #define ALT_PAD4 0x209 #define ALT_PAD5 0x20a #define ALT_PAD6 0x20b #define ALT_PAD7 0x20c #define ALT_PAD8 0x20d #define ALT_PAD9 0x20e #define CTL_DEL 0x20f /* clt-delete */ #define ALT_BSLASH 0x210 /* alt-back slash */ #define CTL_ENTER 0x211 /* ctl-enter */ #define SHF_PADENTER 0x212 /* shift-enter on keypad */ #define SHF_PADSLASH 0x213 /* shift-slash on keypad */ #define SHF_PADSTAR 0x214 /* shift-star on keypad */ #define SHF_PADPLUS 0x215 /* shift-plus on keypad */ #define SHF_PADMINUS 0x216 /* shift-minus on keypad */ #define SHF_UP 0x217 /* shift-up on keypad */ #define SHF_DOWN 0x218 /* shift-down on keypad */ #define SHF_IC 0x219 /* shift-insert on keypad */ #define SHF_DC 0x21a /* shift-delete on keypad */ #define KEY_MOUSE 0x21b /* "mouse" key */ #define KEY_SHIFT_L 0x21c /* Left-shift */ #define KEY_SHIFT_R 0x21d /* Right-shift */ #define KEY_CONTROL_L 0x21e /* Left-control */ #define KEY_CONTROL_R 0x21f /* Right-control */ #define KEY_ALT_L 0x220 /* Left-alt */ #define KEY_ALT_R 0x221 /* Right-alt */ #define KEY_RESIZE 0x222 /* Window resize */ #define KEY_SUP 0x223 /* Shifted up arrow */ #define KEY_SDOWN 0x224 /* Shifted down arrow */ #define KEY_MIN KEY_BREAK /* Minimum curses key value */ #define KEY_MAX KEY_SDOWN /* Maximum curses key */ #define KEY_F(n) (KEY_F0 + (n)) /*---------------------------------------------------------------------- * * PDCurses Function Declarations * */ /* Standard */ int addch(const chtype); int addchnstr(const chtype *, int); int addchstr(const chtype *); int addnstr(const char *, int); int addstr(const char *); int attroff(chtype); int attron(chtype); int attrset(chtype); int attr_get(attr_t *, short *, void *); int attr_off(attr_t, void *); int attr_on(attr_t, void *); int attr_set(attr_t, short, void *); int baudrate(void); int beep(void); int bkgd(chtype); void bkgdset(chtype); int border(chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype); int box(WINDOW *, chtype, chtype); bool can_change_color(void); int cbreak(void); int chgat(int, attr_t, short, const void *); int clearok(WINDOW *, bool); int clear(void); int clrtobot(void); int clrtoeol(void); int color_content(short, short *, short *, short *); int color_set(short, void *); int copywin(const WINDOW *, WINDOW *, int, int, int, int, int, int, int); int curs_set(int); int def_prog_mode(void); int def_shell_mode(void); int delay_output(int); int delch(void); int deleteln(void); void delscreen(SCREEN *); int delwin(WINDOW *); WINDOW *derwin(WINDOW *, int, int, int, int); int doupdate(void); WINDOW *dupwin(WINDOW *); int echochar(const chtype); int echo(void); int endwin(void); char erasechar(void); int erase(void); void filter(void); int flash(void); int flushinp(void); chtype getbkgd(WINDOW *); int getnstr(char *, int); int getstr(char *); WINDOW *getwin(FILE *); int halfdelay(int); bool has_colors(void); bool has_ic(void); bool has_il(void); int hline(chtype, int); void idcok(WINDOW *, bool); int idlok(WINDOW *, bool); void immedok(WINDOW *, bool); int inchnstr(chtype *, int); int inchstr(chtype *); chtype inch(void); int init_color(short, short, short, short); int init_pair(short, short, short); WINDOW *initscr(void); int innstr(char *, int); int insch(chtype); int insdelln(int); int insertln(void); int insnstr(const char *, int); int insstr(const char *); int instr(char *); int intrflush(WINDOW *, bool); bool isendwin(void); bool is_linetouched(WINDOW *, int); bool is_wintouched(WINDOW *); char *keyname(int); int keypad(WINDOW *, bool); char killchar(void); int leaveok(WINDOW *, bool); char *longname(void); int meta(WINDOW *, bool); int move(int, int); int mvaddch(int, int, const chtype); int mvaddchnstr(int, int, const chtype *, int); int mvaddchstr(int, int, const chtype *); int mvaddnstr(int, int, const char *, int); int mvaddstr(int, int, const char *); int mvchgat(int, int, int, attr_t, short, const void *); int mvcur(int, int, int, int); int mvdelch(int, int); int mvderwin(WINDOW *, int, int); int mvgetch(int, int); int mvgetnstr(int, int, char *, int); int mvgetstr(int, int, char *); int mvhline(int, int, chtype, int); chtype mvinch(int, int); int mvinchnstr(int, int, chtype *, int); int mvinchstr(int, int, chtype *); int mvinnstr(int, int, char *, int); int mvinsch(int, int, chtype); int mvinsnstr(int, int, const char *, int); int mvinsstr(int, int, const char *); int mvinstr(int, int, char *); int mvprintw(int, int, const char *, ...); int mvscanw(int, int, const char *, ...); int mvvline(int, int, chtype, int); int mvwaddchnstr(WINDOW *, int, int, const chtype *, int); int mvwaddchstr(WINDOW *, int, int, const chtype *); int mvwaddch(WINDOW *, int, int, const chtype); int mvwaddnstr(WINDOW *, int, int, const char *, int); int mvwaddstr(WINDOW *, int, int, const char *); int mvwchgat(WINDOW *, int, int, int, attr_t, short, const void *); int mvwdelch(WINDOW *, int, int); int mvwgetch(WINDOW *, int, int); int mvwgetnstr(WINDOW *, int, int, char *, int); int mvwgetstr(WINDOW *, int, int, char *); int mvwhline(WINDOW *, int, int, chtype, int); int mvwinchnstr(WINDOW *, int, int, chtype *, int); int mvwinchstr(WINDOW *, int, int, chtype *); chtype mvwinch(WINDOW *, int, int); int mvwinnstr(WINDOW *, int, int, char *, int); int mvwinsch(WINDOW *, int, int, chtype); int mvwinsnstr(WINDOW *, int, int, const char *, int); int mvwinsstr(WINDOW *, int, int, const char *); int mvwinstr(WINDOW *, int, int, char *); int mvwin(WINDOW *, int, int); int mvwprintw(WINDOW *, int, int, const char *, ...); int mvwscanw(WINDOW *, int, int, const char *, ...); int mvwvline(WINDOW *, int, int, chtype, int); int napms(int); WINDOW *newpad(int, int); SCREEN *newterm(const char *, FILE *, FILE *); WINDOW *newwin(int, int, int, int); int nl(void); int nocbreak(void); int nodelay(WINDOW *, bool); int noecho(void); int nonl(void); void noqiflush(void); int noraw(void); int notimeout(WINDOW *, bool); int overlay(const WINDOW *, WINDOW *); int overwrite(const WINDOW *, WINDOW *); int pair_content(short, short *, short *); int pechochar(WINDOW *, chtype); int pnoutrefresh(WINDOW *, int, int, int, int, int, int); int prefresh(WINDOW *, int, int, int, int, int, int); int printw(const char *, ...); int putwin(WINDOW *, FILE *); void qiflush(void); int raw(void); int redrawwin(WINDOW *); int refresh(void); int reset_prog_mode(void); int reset_shell_mode(void); int resetty(void); int ripoffline(int, int (*)(WINDOW *, int)); int savetty(void); int scanw(const char *, ...); int scr_dump(const char *); int scr_init(const char *); int scr_restore(const char *); int scr_set(const char *); int scrl(int); int scroll(WINDOW *); int scrollok(WINDOW *, bool); SCREEN *set_term(SCREEN *); int setscrreg(int, int); int slk_attroff(const chtype); int slk_attr_off(const attr_t, void *); int slk_attron(const chtype); int slk_attr_on(const attr_t, void *); int slk_attrset(const chtype); int slk_attr_set(const attr_t, short, void *); int slk_clear(void); int slk_color(short); int slk_init(int); char *slk_label(int); int slk_noutrefresh(void); int slk_refresh(void); int slk_restore(void); int slk_set(int, const char *, int); int slk_touch(void); int standend(void); int standout(void); int start_color(void); WINDOW *subpad(WINDOW *, int, int, int, int); WINDOW *subwin(WINDOW *, int, int, int, int); int syncok(WINDOW *, bool); chtype termattrs(void); attr_t term_attrs(void); char *termname(void); void timeout(int); int touchline(WINDOW *, int, int); int touchwin(WINDOW *); int typeahead(int); int untouchwin(WINDOW *); void use_env(bool); int vidattr(chtype); int vid_attr(attr_t, short, void *); int vidputs(chtype, int (*)(int)); int vid_puts(attr_t, short, void *, int (*)(int)); int vline(chtype, int); int vw_printw(WINDOW *, const char *, va_list); int vwprintw(WINDOW *, const char *, va_list); int vw_scanw(WINDOW *, const char *, va_list); int vwscanw(WINDOW *, const char *, va_list); int waddchnstr(WINDOW *, const chtype *, int); int waddchstr(WINDOW *, const chtype *); int waddch(WINDOW *, const chtype); int waddnstr(WINDOW *, const char *, int); int waddstr(WINDOW *, const char *); int wattroff(WINDOW *, chtype); int wattron(WINDOW *, chtype); int wattrset(WINDOW *, chtype); int wattr_get(WINDOW *, attr_t *, short *, void *); int wattr_off(WINDOW *, attr_t, void *); int wattr_on(WINDOW *, attr_t, void *); int wattr_set(WINDOW *, attr_t, short, void *); void wbkgdset(WINDOW *, chtype); int wbkgd(WINDOW *, chtype); int wborder(WINDOW *, chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype); int wchgat(WINDOW *, int, attr_t, short, const void *); int wclear(WINDOW *); int wclrtobot(WINDOW *); int wclrtoeol(WINDOW *); int wcolor_set(WINDOW *, short, void *); void wcursyncup(WINDOW *); int wdelch(WINDOW *); int wdeleteln(WINDOW *); int wechochar(WINDOW *, const chtype); int werase(WINDOW *); int wgetch(WINDOW *); int wgetnstr(WINDOW *, char *, int); int wgetstr(WINDOW *, char *); int whline(WINDOW *, chtype, int); int winchnstr(WINDOW *, chtype *, int); int winchstr(WINDOW *, chtype *); chtype winch(WINDOW *); int winnstr(WINDOW *, char *, int); int winsch(WINDOW *, chtype); int winsdelln(WINDOW *, int); int winsertln(WINDOW *); int winsnstr(WINDOW *, const char *, int); int winsstr(WINDOW *, const char *); int winstr(WINDOW *, char *); int wmove(WINDOW *, int, int); int wnoutrefresh(WINDOW *); int wprintw(WINDOW *, const char *, ...); int wredrawln(WINDOW *, int, int); int wrefresh(WINDOW *); int wscanw(WINDOW *, const char *, ...); int wscrl(WINDOW *, int); int wsetscrreg(WINDOW *, int, int); int wstandend(WINDOW *); int wstandout(WINDOW *); void wsyncdown(WINDOW *); void wsyncup(WINDOW *); void wtimeout(WINDOW *, int); int wtouchln(WINDOW *, int, int, int); int wvline(WINDOW *, chtype, int); /* Wide-character functions */ #ifdef PDC_WIDE int addnwstr(const wchar_t *, int); int addwstr(const wchar_t *); int add_wch(const cchar_t *); int add_wchnstr(const cchar_t *, int); int add_wchstr(const cchar_t *); int border_set(const cchar_t *, const cchar_t *, const cchar_t *, const cchar_t *, const cchar_t *, const cchar_t *, const cchar_t *, const cchar_t *); int box_set(WINDOW *, const cchar_t *, const cchar_t *); int echo_wchar(const cchar_t *); int erasewchar(wchar_t *); int getbkgrnd(cchar_t *); int getcchar(const cchar_t *, wchar_t *, attr_t *, short *, void *); int getn_wstr(wint_t *, int); int get_wch(wint_t *); int get_wstr(wint_t *); int hline_set(const cchar_t *, int); int innwstr(wchar_t *, int); int ins_nwstr(const wchar_t *, int); int ins_wch(const cchar_t *); int ins_wstr(const wchar_t *); int inwstr(wchar_t *); int in_wch(cchar_t *); int in_wchnstr(cchar_t *, int); int in_wchstr(cchar_t *); char *key_name(wchar_t); int killwchar(wchar_t *); int mvaddnwstr(int, int, const wchar_t *, int); int mvaddwstr(int, int, const wchar_t *); int mvadd_wch(int, int, const cchar_t *); int mvadd_wchnstr(int, int, const cchar_t *, int); int mvadd_wchstr(int, int, const cchar_t *); int mvgetn_wstr(int, int, wint_t *, int); int mvget_wch(int, int, wint_t *); int mvget_wstr(int, int, wint_t *); int mvhline_set(int, int, const cchar_t *, int); int mvinnwstr(int, int, wchar_t *, int); int mvins_nwstr(int, int, const wchar_t *, int); int mvins_wch(int, int, const cchar_t *); int mvins_wstr(int, int, const wchar_t *); int mvinwstr(int, int, wchar_t *); int mvin_wch(int, int, cchar_t *); int mvin_wchnstr(int, int, cchar_t *, int); int mvin_wchstr(int, int, cchar_t *); int mvvline_set(int, int, const cchar_t *, int); int mvwaddnwstr(WINDOW *, int, int, const wchar_t *, int); int mvwaddwstr(WINDOW *, int, int, const wchar_t *); int mvwadd_wch(WINDOW *, int, int, const cchar_t *); int mvwadd_wchnstr(WINDOW *, int, int, const cchar_t *, int); int mvwadd_wchstr(WINDOW *, int, int, const cchar_t *); int mvwgetn_wstr(WINDOW *, int, int, wint_t *, int); int mvwget_wch(WINDOW *, int, int, wint_t *); int mvwget_wstr(WINDOW *, int, int, wint_t *); int mvwhline_set(WINDOW *, int, int, const cchar_t *, int); int mvwinnwstr(WINDOW *, int, int, wchar_t *, int); int mvwins_nwstr(WINDOW *, int, int, const wchar_t *, int); int mvwins_wch(WINDOW *, int, int, const cchar_t *); int mvwins_wstr(WINDOW *, int, int, const wchar_t *); int mvwin_wch(WINDOW *, int, int, cchar_t *); int mvwin_wchnstr(WINDOW *, int, int, cchar_t *, int); int mvwin_wchstr(WINDOW *, int, int, cchar_t *); int mvwinwstr(WINDOW *, int, int, wchar_t *); int mvwvline_set(WINDOW *, int, int, const cchar_t *, int); int pecho_wchar(WINDOW *, const cchar_t*); int setcchar(cchar_t*, const wchar_t*, const attr_t, short, const void*); int slk_wset(int, const wchar_t *, int); int unget_wch(const wchar_t); int vline_set(const cchar_t *, int); int waddnwstr(WINDOW *, const wchar_t *, int); int waddwstr(WINDOW *, const wchar_t *); int wadd_wch(WINDOW *, const cchar_t *); int wadd_wchnstr(WINDOW *, const cchar_t *, int); int wadd_wchstr(WINDOW *, const cchar_t *); int wbkgrnd(WINDOW *, const cchar_t *); void wbkgrndset(WINDOW *, const cchar_t *); int wborder_set(WINDOW *, const cchar_t *, const cchar_t *, const cchar_t *, const cchar_t *, const cchar_t *, const cchar_t *, const cchar_t *, const cchar_t *); int wecho_wchar(WINDOW *, const cchar_t *); int wgetbkgrnd(WINDOW *, cchar_t *); int wgetn_wstr(WINDOW *, wint_t *, int); int wget_wch(WINDOW *, wint_t *); int wget_wstr(WINDOW *, wint_t *); int whline_set(WINDOW *, const cchar_t *, int); int winnwstr(WINDOW *, wchar_t *, int); int wins_nwstr(WINDOW *, const wchar_t *, int); int wins_wch(WINDOW *, const cchar_t *); int wins_wstr(WINDOW *, const wchar_t *); int winwstr(WINDOW *, wchar_t *); int win_wch(WINDOW *, cchar_t *); int win_wchnstr(WINDOW *, cchar_t *, int); int win_wchstr(WINDOW *, cchar_t *); wchar_t *wunctrl(cchar_t *); int wvline_set(WINDOW *, const cchar_t *, int); #endif /* Quasi-standard */ chtype getattrs(WINDOW *); int getbegx(WINDOW *); int getbegy(WINDOW *); int getmaxx(WINDOW *); int getmaxy(WINDOW *); int getparx(WINDOW *); int getpary(WINDOW *); int getcurx(WINDOW *); int getcury(WINDOW *); void traceoff(void); void traceon(void); char *unctrl(chtype); int crmode(void); int nocrmode(void); int draino(int); int resetterm(void); int fixterm(void); int saveterm(void); int setsyx(int, int); int mouse_set(unsigned long); int mouse_on(unsigned long); int mouse_off(unsigned long); int request_mouse_pos(void); int map_button(unsigned long); void wmouse_position(WINDOW *, int *, int *); unsigned long getmouse(void); unsigned long getbmap(void); /* ncurses */ int assume_default_colors(int, int); const char *curses_version(void); bool has_key(int); int use_default_colors(void); int wresize(WINDOW *, int, int); int mouseinterval(int); mmask_t mousemask(mmask_t, mmask_t *); bool mouse_trafo(int *, int *, bool); int nc_getmouse(MEVENT *); int ungetmouse(MEVENT *); bool wenclose(const WINDOW *, int, int); bool wmouse_trafo(const WINDOW *, int *, int *, bool); /* PDCurses */ int addrawch(chtype); int insrawch(chtype); bool is_termresized(void); int mvaddrawch(int, int, chtype); int mvdeleteln(int, int); int mvinsertln(int, int); int mvinsrawch(int, int, chtype); int mvwaddrawch(WINDOW *, int, int, chtype); int mvwdeleteln(WINDOW *, int, int); int mvwinsertln(WINDOW *, int, int); int mvwinsrawch(WINDOW *, int, int, chtype); int raw_output(bool); int resize_term(int, int); WINDOW *resize_window(WINDOW *, int, int); int waddrawch(WINDOW *, chtype); int winsrawch(WINDOW *, chtype); char wordchar(void); #ifdef PDC_WIDE wchar_t *slk_wlabel(int); #endif void PDC_debug(const char *, ...); int PDC_ungetch(int); int PDC_set_blink(bool); int PDC_set_line_color(short); void PDC_set_title(const char *); int PDC_clearclipboard(void); int PDC_freeclipboard(char *); int PDC_getclipboard(char **, long *); int PDC_setclipboard(const char *, long); unsigned long PDC_get_input_fd(void); unsigned long PDC_get_key_modifiers(void); int PDC_return_key_modifiers(bool); int PDC_save_key_modifiers(bool); #ifdef XCURSES WINDOW *Xinitscr(int, char **); void XCursesExit(void); int sb_init(void); int sb_set_horz(int, int, int); int sb_set_vert(int, int, int); int sb_get_horz(int *, int *, int *); int sb_get_vert(int *, int *, int *); int sb_refresh(void); #endif /*** Functions defined as macros ***/ /* getch() and ungetch() conflict with some DOS libraries */ #define getch() wgetch(stdscr) #define ungetch(ch) PDC_ungetch(ch) #define COLOR_PAIR(n) (((chtype)(n) << PDC_COLOR_SHIFT) & A_COLOR) #define PAIR_NUMBER(n) (((n) & A_COLOR) >> PDC_COLOR_SHIFT) /* These will _only_ work as macros */ #define getbegyx(w, y, x) (y = getbegy(w), x = getbegx(w)) #define getmaxyx(w, y, x) (y = getmaxy(w), x = getmaxx(w)) #define getparyx(w, y, x) (y = getpary(w), x = getparx(w)) #define getyx(w, y, x) (y = getcury(w), x = getcurx(w)) #define getsyx(y, x) { if (curscr->_leaveit) (y)=(x)=-1; \ else getyx(curscr,(y),(x)); } #ifdef NCURSES_MOUSE_VERSION # define getmouse(x) nc_getmouse(x) #endif /* return codes from PDC_getclipboard() and PDC_setclipboard() calls */ #define PDC_CLIP_SUCCESS 0 #define PDC_CLIP_ACCESS_ERROR 1 #define PDC_CLIP_EMPTY 2 #define PDC_CLIP_MEMORY_ERROR 3 /* PDCurses key modifier masks */ #define PDC_KEY_MODIFIER_SHIFT 1 #define PDC_KEY_MODIFIER_CONTROL 2 #define PDC_KEY_MODIFIER_ALT 4 #define PDC_KEY_MODIFIER_NUMLOCK 8 #if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS) # undef bool } #endif #endif /* __PDCURSES__ */ genometools-1.5.1/src/external/samtools-0.1.18/win32/zconf.h000066400000000000000000000225101211610345200232730ustar00rootroot00000000000000/* zconf.h -- configuration of the zlib compression library * Copyright (C) 1995-2005 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id$ */ #ifndef ZCONF_H #define ZCONF_H /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. */ #ifdef Z_PREFIX # define deflateInit_ z_deflateInit_ # define deflate z_deflate # define deflateEnd z_deflateEnd # define inflateInit_ z_inflateInit_ # define inflate z_inflate # define inflateEnd z_inflateEnd # define deflateInit2_ z_deflateInit2_ # define deflateSetDictionary z_deflateSetDictionary # define deflateCopy z_deflateCopy # define deflateReset z_deflateReset # define deflateParams z_deflateParams # define deflateBound z_deflateBound # define deflatePrime z_deflatePrime # define inflateInit2_ z_inflateInit2_ # define inflateSetDictionary z_inflateSetDictionary # define inflateSync z_inflateSync # define inflateSyncPoint z_inflateSyncPoint # define inflateCopy z_inflateCopy # define inflateReset z_inflateReset # define inflateBack z_inflateBack # define inflateBackEnd z_inflateBackEnd # define compress z_compress # define compress2 z_compress2 # define compressBound z_compressBound # define uncompress z_uncompress # define adler32 z_adler32 # define crc32 z_crc32 # define get_crc_table z_get_crc_table # define zError z_zError # define alloc_func z_alloc_func # define free_func z_free_func # define in_func z_in_func # define out_func z_out_func # define Byte z_Byte # define uInt z_uInt # define uLong z_uLong # define Bytef z_Bytef # define charf z_charf # define intf z_intf # define uIntf z_uIntf # define uLongf z_uLongf # define voidpf z_voidpf # define voidp z_voidp #endif #if defined(__MSDOS__) && !defined(MSDOS) # define MSDOS #endif #if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) # define OS2 #endif #if defined(_WINDOWS) && !defined(WINDOWS) # define WINDOWS #endif #if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) # ifndef WIN32 # define WIN32 # endif #endif #if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) # if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) # ifndef SYS16BIT # define SYS16BIT # endif # endif #endif /* * Compile with -DMAXSEG_64K if the alloc function cannot allocate more * than 64k bytes at a time (needed on systems with 16-bit int). */ #ifdef SYS16BIT # define MAXSEG_64K #endif #ifdef MSDOS # define UNALIGNED_OK #endif #ifdef __STDC_VERSION__ # ifndef STDC # define STDC # endif # if __STDC_VERSION__ >= 199901L # ifndef STDC99 # define STDC99 # endif # endif #endif #if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) # define STDC #endif #if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) # define STDC #endif #if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) # define STDC #endif #if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) # define STDC #endif #if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ # define STDC #endif #ifndef STDC # ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ # define const /* note: need a more gentle solution here */ # endif #endif /* Some Mac compilers merge all .h files incorrectly: */ #if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) # define NO_DUMMY_DECL #endif /* Maximum value for memLevel in deflateInit2 */ #ifndef MAX_MEM_LEVEL # ifdef MAXSEG_64K # define MAX_MEM_LEVEL 8 # else # define MAX_MEM_LEVEL 9 # endif #endif /* Maximum value for windowBits in deflateInit2 and inflateInit2. * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files * created by gzip. (Files created by minigzip can still be extracted by * gzip.) */ #ifndef MAX_WBITS # define MAX_WBITS 15 /* 32K LZ77 window */ #endif /* The memory requirements for deflate are (in bytes): (1 << (windowBits+2)) + (1 << (memLevel+9)) that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) plus a few kilobytes for small objects. For example, if you want to reduce the default memory requirements from 256K to 128K, compile with make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" Of course this will generally degrade compression (there's no free lunch). The memory requirements for inflate are (in bytes) 1 << windowBits that is, 32K for windowBits=15 (default value) plus a few kilobytes for small objects. */ /* Type declarations */ #ifndef OF /* function prototypes */ # ifdef STDC # define OF(args) args # else # define OF(args) () # endif #endif /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, * just define FAR to be empty. */ #ifdef SYS16BIT # if defined(M_I86SM) || defined(M_I86MM) /* MSC small or medium model */ # define SMALL_MEDIUM # ifdef _MSC_VER # define FAR _far # else # define FAR far # endif # endif # if (defined(__SMALL__) || defined(__MEDIUM__)) /* Turbo C small or medium model */ # define SMALL_MEDIUM # ifdef __BORLANDC__ # define FAR _far # else # define FAR far # endif # endif #endif #if defined(WINDOWS) || defined(WIN32) /* If building or using zlib as a DLL, define ZLIB_DLL. * This is not mandatory, but it offers a little performance increase. */ # ifdef ZLIB_DLL # if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) # ifdef ZLIB_INTERNAL # define ZEXTERN extern __declspec(dllexport) # else # define ZEXTERN extern __declspec(dllimport) # endif # endif # endif /* ZLIB_DLL */ /* If building or using zlib with the WINAPI/WINAPIV calling convention, * define ZLIB_WINAPI. * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. */ # ifdef ZLIB_WINAPI # ifdef FAR # undef FAR # endif # include /* No need for _export, use ZLIB.DEF instead. */ /* For complete Windows compatibility, use WINAPI, not __stdcall. */ # define ZEXPORT WINAPI # ifdef WIN32 # define ZEXPORTVA WINAPIV # else # define ZEXPORTVA FAR CDECL # endif # endif #endif #if defined (__BEOS__) # ifdef ZLIB_DLL # ifdef ZLIB_INTERNAL # define ZEXPORT __declspec(dllexport) # define ZEXPORTVA __declspec(dllexport) # else # define ZEXPORT __declspec(dllimport) # define ZEXPORTVA __declspec(dllimport) # endif # endif #endif #ifndef ZEXTERN # define ZEXTERN extern #endif #ifndef ZEXPORT # define ZEXPORT #endif #ifndef ZEXPORTVA # define ZEXPORTVA #endif #ifndef FAR # define FAR #endif #if !defined(__MACTYPES__) typedef unsigned char Byte; /* 8 bits */ #endif typedef unsigned int uInt; /* 16 bits or more */ typedef unsigned long uLong; /* 32 bits or more */ #ifdef SMALL_MEDIUM /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ # define Bytef Byte FAR #else typedef Byte FAR Bytef; #endif typedef char FAR charf; typedef int FAR intf; typedef uInt FAR uIntf; typedef uLong FAR uLongf; #ifdef STDC typedef void const *voidpc; typedef void FAR *voidpf; typedef void *voidp; #else typedef Byte const *voidpc; typedef Byte FAR *voidpf; typedef Byte *voidp; #endif #if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ # include /* for off_t */ # include /* for SEEK_* and off_t */ # ifdef VMS # include /* for off_t */ # endif # define z_off_t off_t #endif #ifndef SEEK_SET # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif #ifndef z_off_t # define z_off_t long #endif #if defined(__OS400__) # define NO_vsnprintf #endif #if defined(__MVS__) # define NO_vsnprintf # ifdef FAR # undef FAR # endif #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) # pragma map(deflateInit_,"DEIN") # pragma map(deflateInit2_,"DEIN2") # pragma map(deflateEnd,"DEEND") # pragma map(deflateBound,"DEBND") # pragma map(inflateInit_,"ININ") # pragma map(inflateInit2_,"ININ2") # pragma map(inflateEnd,"INEND") # pragma map(inflateSync,"INSY") # pragma map(inflateSetDictionary,"INSEDI") # pragma map(compressBound,"CMBND") # pragma map(inflate_table,"INTABL") # pragma map(inflate_fast,"INFA") # pragma map(inflate_copyright,"INCOPY") #endif #endif /* ZCONF_H */ genometools-1.5.1/src/external/samtools-0.1.18/win32/zlib.h000066400000000000000000002012141211610345200231140ustar00rootroot00000000000000/* zlib.h -- interface of the 'zlib' general purpose compression library version 1.2.3, July 18th, 2005 Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). */ #ifndef ZLIB_H #define ZLIB_H #include "zconf.h" #ifdef __cplusplus extern "C" { #endif #define ZLIB_VERSION "1.2.3" #define ZLIB_VERNUM 0x1230 /* The 'zlib' compression library provides in-memory compression and decompression functions, including integrity checks of the uncompressed data. This version of the library supports only one compression method (deflation) but other algorithms will be added later and will have the same stream interface. Compression can be done in a single step if the buffers are large enough (for example if an input file is mmap'ed), or can be done by repeated calls of the compression function. In the latter case, the application must provide more input and/or consume the output (providing more output space) before each call. The compressed data format used by default by the in-memory functions is the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped around a deflate stream, which is itself documented in RFC 1951. The library also supports reading and writing files in gzip (.gz) format with an interface similar to that of stdio using the functions that start with "gz". The gzip format is different from the zlib format. gzip is a gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. This library can optionally read and write gzip streams in memory as well. The zlib format was designed to be compact and fast for use in memory and on communications channels. The gzip format was designed for single- file compression on file systems, has a larger header than zlib to maintain directory information, and uses a different, slower check method than zlib. The library does not install any signal handler. The decoder checks the consistency of the compressed data, so the library should never crash even in case of corrupted input. */ typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); typedef void (*free_func) OF((voidpf opaque, voidpf address)); struct internal_state; typedef struct z_stream_s { Bytef *next_in; /* next input byte */ uInt avail_in; /* number of bytes available at next_in */ uLong total_in; /* total nb of input bytes read so far */ Bytef *next_out; /* next output byte should be put there */ uInt avail_out; /* remaining free space at next_out */ uLong total_out; /* total nb of bytes output so far */ char *msg; /* last error message, NULL if no error */ struct internal_state FAR *state; /* not visible by applications */ alloc_func zalloc; /* used to allocate the internal state */ free_func zfree; /* used to free the internal state */ voidpf opaque; /* private data object passed to zalloc and zfree */ int data_type; /* best guess about the data type: binary or text */ uLong adler; /* adler32 value of the uncompressed data */ uLong reserved; /* reserved for future use */ } z_stream; typedef z_stream FAR *z_streamp; /* gzip header information passed to and from zlib routines. See RFC 1952 for more details on the meanings of these fields. */ typedef struct gz_header_s { int text; /* true if compressed data believed to be text */ uLong time; /* modification time */ int xflags; /* extra flags (not used when writing a gzip file) */ int os; /* operating system */ Bytef *extra; /* pointer to extra field or Z_NULL if none */ uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ uInt extra_max; /* space at extra (only when reading header) */ Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ uInt name_max; /* space at name (only when reading header) */ Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ uInt comm_max; /* space at comment (only when reading header) */ int hcrc; /* true if there was or will be a header crc */ int done; /* true when done reading gzip header (not used when writing a gzip file) */ } gz_header; typedef gz_header FAR *gz_headerp; /* The application must update next_in and avail_in when avail_in has dropped to zero. It must update next_out and avail_out when avail_out has dropped to zero. The application must initialize zalloc, zfree and opaque before calling the init function. All other fields are set by the compression library and must not be updated by the application. The opaque value provided by the application will be passed as the first parameter for calls of zalloc and zfree. This can be useful for custom memory management. The compression library attaches no meaning to the opaque value. zalloc must return Z_NULL if there is not enough memory for the object. If zlib is used in a multi-threaded application, zalloc and zfree must be thread safe. On 16-bit systems, the functions zalloc and zfree must be able to allocate exactly 65536 bytes, but will not be required to allocate more than this if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers returned by zalloc for objects of exactly 65536 bytes *must* have their offset normalized to zero. The default allocation function provided by this library ensures this (see zutil.c). To reduce memory requirements and avoid any allocation of 64K objects, at the expense of compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). The fields total_in and total_out can be used for statistics or progress reports. After compression, total_in holds the total size of the uncompressed data and may be saved for use in the decompressor (particularly if the decompressor wants to decompress everything in a single step). */ /* constants */ #define Z_NO_FLUSH 0 #define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ #define Z_SYNC_FLUSH 2 #define Z_FULL_FLUSH 3 #define Z_FINISH 4 #define Z_BLOCK 5 /* Allowed flush values; see deflate() and inflate() below for details */ #define Z_OK 0 #define Z_STREAM_END 1 #define Z_NEED_DICT 2 #define Z_ERRNO (-1) #define Z_STREAM_ERROR (-2) #define Z_DATA_ERROR (-3) #define Z_MEM_ERROR (-4) #define Z_BUF_ERROR (-5) #define Z_VERSION_ERROR (-6) /* Return codes for the compression/decompression functions. Negative * values are errors, positive values are used for special but normal events. */ #define Z_NO_COMPRESSION 0 #define Z_BEST_SPEED 1 #define Z_BEST_COMPRESSION 9 #define Z_DEFAULT_COMPRESSION (-1) /* compression levels */ #define Z_FILTERED 1 #define Z_HUFFMAN_ONLY 2 #define Z_RLE 3 #define Z_FIXED 4 #define Z_DEFAULT_STRATEGY 0 /* compression strategy; see deflateInit2() below for details */ #define Z_BINARY 0 #define Z_TEXT 1 #define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ #define Z_UNKNOWN 2 /* Possible values of the data_type field (though see inflate()) */ #define Z_DEFLATED 8 /* The deflate compression method (the only one supported in this version) */ #define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ #define zlib_version zlibVersion() /* for compatibility with versions < 1.0.2 */ /* basic functions */ ZEXTERN const char * ZEXPORT zlibVersion OF((void)); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. If the first character differs, the library code actually used is not compatible with the zlib.h header file used by the application. This check is automatically made by deflateInit and inflateInit. */ /* ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); Initializes the internal stream state for compression. The fields zalloc, zfree and opaque must be initialized before by the caller. If zalloc and zfree are set to Z_NULL, deflateInit updates them to use default allocation functions. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION requests a default compromise between speed and compression (currently equivalent to level 6). deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if level is not a valid compression level, Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible with the version assumed by the caller (ZLIB_VERSION). msg is set to null if there is no error message. deflateInit does not perform any compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); /* deflate compresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce some output latency (reading input without producing any output) except when forced to flush. The detailed semantics are as follows. deflate performs one or both of the following actions: - Compress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in and avail_in are updated and processing will resume at this point for the next call of deflate(). - Provide more output starting at next_out and update next_out and avail_out accordingly. This action is forced if the parameter flush is non zero. Forcing flush frequently degrades the compression ratio, so this parameter should be set only when necessary (in interactive applications). Some output may be provided even if flush is not set. Before the call of deflate(), the application should ensure that at least one of the actions is possible, by providing more input and/or consuming more output, and updating avail_in or avail_out accordingly; avail_out should never be zero before the call. The application can consume the compressed output when it wants, for example when the output buffer is full (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to decide how much data to accumualte before producing output, in order to maximize compression. If the parameter flush is set to Z_SYNC_FLUSH, all pending output is flushed to the output buffer and the output is aligned on a byte boundary, so that the decompressor can get all input data available so far. (In particular avail_in is zero after the call if enough output space has been provided before the call.) Flushing may degrade compression for some compression algorithms and so it should be used only when necessary. If flush is set to Z_FULL_FLUSH, all output is flushed as with Z_SYNC_FLUSH, and the compression state is reset so that decompression can restart from this point if previous compressed data has been damaged or if random access is desired. Using Z_FULL_FLUSH too often can seriously degrade compression. If deflate returns with avail_out == 0, this function must be called again with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that avail_out is greater than six to avoid repeated flush markers due to avail_out == 0 on return. If the parameter flush is set to Z_FINISH, pending input is processed, pending output is flushed and deflate returns with Z_STREAM_END if there was enough output space; if deflate returns with Z_OK, this function must be called again with Z_FINISH and more output space (updated avail_out) but no more input data, until it returns with Z_STREAM_END or an error. After deflate has returned Z_STREAM_END, the only possible operations on the stream are deflateReset or deflateEnd. Z_FINISH can be used immediately after deflateInit if all the compression is to be done in a single step. In this case, avail_out must be at least the value returned by deflateBound (see below). If deflate does not return Z_STREAM_END, then it must be called again as described above. deflate() sets strm->adler to the adler32 checksum of all input read so far (that is, total_in bytes). deflate() may update strm->data_type if it can make a good guess about the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered binary. This field is only for information purposes and does not affect the compression algorithm in any manner. deflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if all input has been consumed and all output has been produced (only when flush is set to Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and deflate() can be called again with more input and more output space to continue compressing. */ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending output. deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent, Z_DATA_ERROR if the stream was freed prematurely (some input or output was discarded). In the error case, msg may be set but then points to a static string (which must not be deallocated). */ /* ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. If next_in is not Z_NULL and avail_in is large enough (the exact value depends on the compression method), inflateInit determines the compression method from the zlib header and allocates all data structures accordingly; otherwise the allocation will be deferred to the first call of inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to use default allocation functions. inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the version assumed by the caller. msg is set to null if there is no error message. inflateInit does not perform any decompression apart from reading the zlib header if present: this will be done by inflate(). (So next_in and avail_in may be modified, but next_out and avail_out are unchanged.) */ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); /* inflate decompresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce some output latency (reading input without producing any output) except when forced to flush. The detailed semantics are as follows. inflate performs one or both of the following actions: - Decompress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in is updated and processing will resume at this point for the next call of inflate(). - Provide more output starting at next_out and update next_out and avail_out accordingly. inflate() provides as much output as possible, until there is no more input data or no more space in the output buffer (see below about the flush parameter). Before the call of inflate(), the application should ensure that at least one of the actions is possible, by providing more input and/or consuming more output, and updating the next_* and avail_* values accordingly. The application can consume the uncompressed output when it wants, for example when the output buffer is full (avail_out == 0), or after each call of inflate(). If inflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much output as possible to the output buffer. Z_BLOCK requests that inflate() stop if and when it gets to the next deflate block boundary. When decoding the zlib or gzip format, this will cause inflate() to return immediately after the header and before the first block. When doing a raw inflate, inflate() will go ahead and process the first block, and will return when it gets to the end of that block, or when it runs out of data. The Z_BLOCK option assists in appending to or combining deflate streams. Also to assist in this, on return inflate() will set strm->data_type to the number of unused bits in the last byte taken from strm->next_in, plus 64 if inflate() is currently decoding the last block in the deflate stream, plus 128 if inflate() returned immediately after decoding an end-of-block code or decoding the complete header up to just before the first byte of the deflate stream. The end-of-block will not be indicated until all of the uncompressed data from that block has been written to strm->next_out. The number of unused bits may in general be greater than seven, except when bit 7 of data_type is set, in which case the number of unused bits will be less than eight. inflate() should normally be called until it returns Z_STREAM_END or an error. However if all decompression is to be performed in a single step (a single call of inflate), the parameter flush should be set to Z_FINISH. In this case all pending input is processed and all pending output is flushed; avail_out must be large enough to hold all the uncompressed data. (The size of the uncompressed data may have been saved by the compressor for this purpose.) The next operation on this stream must be inflateEnd to deallocate the decompression state. The use of Z_FINISH is never required, but can be used to inform inflate that a faster approach may be used for the single inflate() call. In this implementation, inflate() always flushes as much output as possible to the output buffer, and always uses the faster approach on the first call. So the only effect of the flush parameter in this implementation is on the return value of inflate(), as noted below, or when it returns early because Z_BLOCK is used. If a preset dictionary is needed after this call (see inflateSetDictionary below), inflate sets strm->adler to the adler32 checksum of the dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise it sets strm->adler to the adler32 checksum of all output produced so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described below. At the end of the stream, inflate() checks that its computed adler32 checksum is equal to that saved by the compressor and returns Z_STREAM_END only if the checksum is correct. inflate() will decompress and check either zlib-wrapped or gzip-wrapped deflate data. The header type is detected automatically. Any information contained in the gzip header is not retained, so applications that need that information should instead use raw inflate, see inflateInit2() below, or inflateBack() and perform their own processing of the gzip header and trailer. inflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if the end of the compressed data has been reached and all uncompressed output has been produced, Z_NEED_DICT if a preset dictionary is needed at this point, Z_DATA_ERROR if the input data was corrupted (input stream not conforming to the zlib format or incorrect check value), Z_STREAM_ERROR if the stream structure was inconsistent (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if no progress is possible or if there was not enough room in the output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and inflate() can be called again with more input and more output space to continue decompressing. If Z_DATA_ERROR is returned, the application may then call inflateSync() to look for a good compression block if a partial recovery of the data is desired. */ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending output. inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent. In the error case, msg may be set but then points to a static string (which must not be deallocated). */ /* Advanced functions */ /* The following functions are needed only in some special applications. */ /* ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy)); This is another version of deflateInit with more compression options. The fields next_in, zalloc, zfree and opaque must be initialized before by the caller. The method parameter is the compression method. It must be Z_DEFLATED in this version of the library. The windowBits parameter is the base two logarithm of the window size (the size of the history buffer). It should be in the range 8..15 for this version of the library. Larger values of this parameter result in better compression at the expense of memory usage. The default value is 15 if deflateInit is used instead. windowBits can also be -8..-15 for raw deflate. In this case, -windowBits determines the window size. deflate() will then generate raw deflate data with no zlib header or trailer, and will not compute an adler32 check value. windowBits can also be greater than 15 for optional gzip encoding. Add 16 to windowBits to write a simple gzip header and trailer around the compressed data instead of a zlib wrapper. The gzip header will have no file name, no extra data, no comment, no modification time (set to zero), no header crc, and the operating system will be set to 255 (unknown). If a gzip stream is being written, strm->adler is a crc32 instead of an adler32. The memLevel parameter specifies how much memory should be allocated for the internal compression state. memLevel=1 uses minimum memory but is slow and reduces compression ratio; memLevel=9 uses maximum memory for optimal speed. The default value is 8. See zconf.h for total memory usage as a function of windowBits and memLevel. The strategy parameter is used to tune the compression algorithm. Use the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no string match), or Z_RLE to limit match distances to one (run-length encoding). Filtered data consists mostly of small values with a somewhat random distribution. In this case, the compression algorithm is tuned to compress them better. The effect of Z_FILTERED is to force more Huffman coding and less string matching; it is somewhat intermediate between Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy parameter only affects the compression ratio but not the correctness of the compressed output even if it is not set appropriately. Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler decoder for special applications. deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid method). msg is set to null if there is no error message. deflateInit2 does not perform any compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, const Bytef *dictionary, uInt dictLength)); /* Initializes the compression dictionary from the given byte sequence without producing any compressed output. This function must be called immediately after deflateInit, deflateInit2 or deflateReset, before any call of deflate. The compressor and decompressor must use exactly the same dictionary (see inflateSetDictionary). The dictionary should consist of strings (byte sequences) that are likely to be encountered later in the data to be compressed, with the most commonly used strings preferably put towards the end of the dictionary. Using a dictionary is most useful when the data to be compressed is short and can be predicted with good accuracy; the data can then be compressed better than with the default empty dictionary. Depending on the size of the compression data structures selected by deflateInit or deflateInit2, a part of the dictionary may in effect be discarded, for example if the dictionary is larger than the window size in deflate or deflate2. Thus the strings most likely to be useful should be put at the end of the dictionary, not at the front. In addition, the current implementation of deflate will use at most the window size minus 262 bytes of the provided dictionary. Upon return of this function, strm->adler is set to the adler32 value of the dictionary; the decompressor may later use this value to determine which dictionary has been used by the compressor. (The adler32 value applies to the whole dictionary even if only a subset of the dictionary is actually used by the compressor.) If a raw deflate was requested, then the adler32 value is not computed and strm->adler is not set. deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a parameter is invalid (such as NULL dictionary) or the stream state is inconsistent (for example if deflate has already been called for this stream or if the compression method is bsort). deflateSetDictionary does not perform any compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, z_streamp source)); /* Sets the destination stream as a complete copy of the source stream. This function can be useful when several compression strategies will be tried, for example when there are several ways of pre-processing the input data with a filter. The streams that will be discarded should then be freed by calling deflateEnd. Note that deflateCopy duplicates the internal compression state which can be quite large, so this strategy is slow and can consume lots of memory. deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc being NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); /* This function is equivalent to deflateEnd followed by deflateInit, but does not free and reallocate all the internal compression state. The stream will keep the same compression level and any other attributes that may have been set by deflateInit2. deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being NULL). */ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, int level, int strategy)); /* Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2. This can be used to switch between compression and straight copy of the input data, or to switch to a different kind of input data requiring a different strategy. If the compression level is changed, the input available so far is compressed with the old level (and may be flushed); the new level will take effect only at the next call of deflate(). Before the call of deflateParams, the stream state must be set as for a call of deflate(), since the currently available input may have to be compressed and flushed. In particular, strm->avail_out must be non-zero. deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if strm->avail_out was zero. */ ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, int good_length, int max_lazy, int nice_length, int max_chain)); /* Fine tune deflate's internal compression parameters. This should only be used by someone who understands the algorithm used by zlib's deflate for searching for the best matching string, and even then only by the most fanatic optimizer trying to squeeze out the last compressed bit for their specific input data. Read the deflate.c source code for the meaning of the max_lazy, good_length, nice_length, and max_chain parameters. deflateTune() can be called after deflateInit() or deflateInit2(), and returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. */ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, uLong sourceLen)); /* deflateBound() returns an upper bound on the compressed size after deflation of sourceLen bytes. It must be called after deflateInit() or deflateInit2(). This would be used to allocate an output buffer for deflation in a single pass, and so would be called before deflate(). */ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, int bits, int value)); /* deflatePrime() inserts bits in the deflate output stream. The intent is that this function is used to start off the deflate output with the bits leftover from a previous deflate stream when appending to it. As such, this function can only be used for raw deflate, and must be used before the first deflate() call after a deflateInit2() or deflateReset(). bits must be less than or equal to 16, and that many of the least significant bits of value will be inserted in the output. deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, gz_headerp head)); /* deflateSetHeader() provides gzip header information for when a gzip stream is requested by deflateInit2(). deflateSetHeader() may be called after deflateInit2() or deflateReset() and before the first call of deflate(). The text, time, os, extra field, name, and comment information in the provided gz_header structure are written to the gzip header (xflag is ignored -- the extra flags are set according to the compression level). The caller must assure that, if not Z_NULL, name and comment are terminated with a zero byte, and that if extra is not Z_NULL, that extra_len bytes are available there. If hcrc is true, a gzip header crc is included. Note that the current versions of the command-line version of gzip (up through version 1.3.x) do not support header crc's, and will report that it is a "multi-part gzip file" and give up. If deflateSetHeader is not used, the default gzip header has text false, the time set to zero, and os set to 255, with no extra, name, or comment fields. The gzip header is returned to the default state by deflateReset(). deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ /* ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, int windowBits)); This is another version of inflateInit with an extra parameter. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. The windowBits parameter is the base two logarithm of the maximum window size (the size of the history buffer). It should be in the range 8..15 for this version of the library. The default value is 15 if inflateInit is used instead. windowBits must be greater than or equal to the windowBits value provided to deflateInit2() while compressing, or it must be equal to 15 if deflateInit2() was not used. If a compressed stream with a larger window size is given as input, inflate() will return with the error code Z_DATA_ERROR instead of trying to allocate a larger window. windowBits can also be -8..-15 for raw inflate. In this case, -windowBits determines the window size. inflate() will then process raw deflate data, not looking for a zlib or gzip header, not generating a check value, and not looking for any check values for comparison at the end of the stream. This is for use with other formats that use the deflate compressed data format such as zip. Those formats provide their own check values. If a custom format is developed using the raw deflate format for compressed data, it is recommended that a check value such as an adler32 or a crc32 be applied to the uncompressed data as is done in the zlib, gzip, and zip formats. For most applications, the zlib format should be used as is. Note that comments above on the use in deflateInit2() applies to the magnitude of windowBits. windowBits can also be greater than 15 for optional gzip decoding. Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection, or add 16 to decode only the gzip format (the zlib format will return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a crc32 instead of an adler32. inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg is set to null if there is no error message. inflateInit2 does not perform any decompression apart from reading the zlib header if present: this will be done by inflate(). (So next_in and avail_in may be modified, but next_out and avail_out are unchanged.) */ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, const Bytef *dictionary, uInt dictLength)); /* Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate, if that call returned Z_NEED_DICT. The dictionary chosen by the compressor can be determined from the adler32 value returned by that call of inflate. The compressor and decompressor must use exactly the same dictionary (see deflateSetDictionary). For raw inflate, this function can be called immediately after inflateInit2() or inflateReset() and before any call of inflate() to set the dictionary. The application must insure that the dictionary that was used for compression is provided. inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a parameter is invalid (such as NULL dictionary) or the stream state is inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the expected one (incorrect adler32 value). inflateSetDictionary does not perform any decompression: this will be done by subsequent calls of inflate(). */ ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); /* Skips invalid compressed data until a full flush point (see above the description of deflate with Z_FULL_FLUSH) can be found, or until all available input is skipped. No output is provided. inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. In the success case, the application may save the current current value of total_in which indicates where valid compressed data was found. In the error case, the application may repeatedly call inflateSync, providing more input each time, until success or end of the input data. */ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, z_streamp source)); /* Sets the destination stream as a complete copy of the source stream. This function can be useful when randomly accessing a large stream. The first pass through the stream can periodically record the inflate state, allowing restarting inflate at those points when randomly accessing the stream. inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc being NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); /* This function is equivalent to inflateEnd followed by inflateInit, but does not free and reallocate all the internal decompression state. The stream will keep attributes that may have been set by inflateInit2. inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being NULL). */ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, int bits, int value)); /* This function inserts bits in the inflate input stream. The intent is that this function is used to start inflating at a bit position in the middle of a byte. The provided bits will be used before any bytes are used from next_in. This function should only be used with raw inflate, and should be used before the first inflate() call after inflateInit2() or inflateReset(). bits must be less than or equal to 16, and that many of the least significant bits of value will be inserted in the input. inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, gz_headerp head)); /* inflateGetHeader() requests that gzip header information be stored in the provided gz_header structure. inflateGetHeader() may be called after inflateInit2() or inflateReset(), and before the first call of inflate(). As inflate() processes the gzip stream, head->done is zero until the header is completed, at which time head->done is set to one. If a zlib stream is being decoded, then head->done is set to -1 to indicate that there will be no gzip header information forthcoming. Note that Z_BLOCK can be used to force inflate() to return immediately after header processing is complete and before any actual data is decompressed. The text, time, xflags, and os fields are filled in with the gzip header contents. hcrc is set to true if there is a header CRC. (The header CRC was valid if done is set to one.) If extra is not Z_NULL, then extra_max contains the maximum number of bytes to write to extra. Once done is true, extra_len contains the actual extra field length, and extra contains the extra field, or that field truncated if extra_max is less than extra_len. If name is not Z_NULL, then up to name_max characters are written there, terminated with a zero unless the length is greater than name_max. If comment is not Z_NULL, then up to comm_max characters are written there, terminated with a zero unless the length is greater than comm_max. When any of extra, name, or comment are not Z_NULL and the respective field is not present in the header, then that field is set to Z_NULL to signal its absence. This allows the use of deflateSetHeader() with the returned structure to duplicate the header. However if those fields are set to allocated memory, then the application will need to save those pointers elsewhere so that they can be eventually freed. If inflateGetHeader is not used, then the header information is simply discarded. The header is always checked for validity, including the header CRC if present. inflateReset() will reset the process to discard the header information. The application would need to call inflateGetHeader() again to retrieve the header from the next gzip stream. inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ /* ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, unsigned char FAR *window)); Initialize the internal stream state for decompression using inflateBack() calls. The fields zalloc, zfree and opaque in strm must be initialized before the call. If zalloc and zfree are Z_NULL, then the default library- derived memory allocation routines are used. windowBits is the base two logarithm of the window size, in the range 8..15. window is a caller supplied buffer of that size. Except for special applications where it is assured that deflate was used with small window sizes, windowBits must be 15 and a 32K byte window must be supplied to be able to decompress general deflate streams. See inflateBack() for the usage of these routines. inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of the paramaters are invalid, Z_MEM_ERROR if the internal state could not be allocated, or Z_VERSION_ERROR if the version of the library does not match the version of the header file. */ typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, in_func in, void FAR *in_desc, out_func out, void FAR *out_desc)); /* inflateBack() does a raw inflate with a single call using a call-back interface for input and output. This is more efficient than inflate() for file i/o applications in that it avoids copying between the output and the sliding window by simply making the window itself the output buffer. This function trusts the application to not change the output buffer passed by the output function, at least until inflateBack() returns. inflateBackInit() must be called first to allocate the internal state and to initialize the state with the user-provided window buffer. inflateBack() may then be used multiple times to inflate a complete, raw deflate stream with each call. inflateBackEnd() is then called to free the allocated state. A raw deflate stream is one with no zlib or gzip header or trailer. This routine would normally be used in a utility that reads zip or gzip files and writes out uncompressed files. The utility would decode the header and process the trailer on its own, hence this routine expects only the raw deflate stream to decompress. This is different from the normal behavior of inflate(), which expects either a zlib or gzip header and trailer around the deflate stream. inflateBack() uses two subroutines supplied by the caller that are then called by inflateBack() for input and output. inflateBack() calls those routines until it reads a complete deflate stream and writes out all of the uncompressed data, or until it encounters an error. The function's parameters and return types are defined above in the in_func and out_func typedefs. inflateBack() will call in(in_desc, &buf) which should return the number of bytes of provided input, and a pointer to that input in buf. If there is no input available, in() must return zero--buf is ignored in that case--and inflateBack() will return a buffer error. inflateBack() will call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() should return zero on success, or non-zero on failure. If out() returns non-zero, inflateBack() will return with an error. Neither in() nor out() are permitted to change the contents of the window provided to inflateBackInit(), which is also the buffer that out() uses to write from. The length written by out() will be at most the window size. Any non-zero amount of input may be provided by in(). For convenience, inflateBack() can be provided input on the first call by setting strm->next_in and strm->avail_in. If that input is exhausted, then in() will be called. Therefore strm->next_in must be initialized before calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in must also be initialized, and then if strm->avail_in is not zero, input will initially be taken from strm->next_in[0 .. strm->avail_in - 1]. The in_desc and out_desc parameters of inflateBack() is passed as the first parameter of in() and out() respectively when they are called. These descriptors can be optionally used to pass any information that the caller- supplied in() and out() functions need to do their job. On return, inflateBack() will set strm->next_in and strm->avail_in to pass back any unused input that was provided by the last in() call. The return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR if in() or out() returned an error, Z_DATA_ERROR if there was a format error in the deflate stream (in which case strm->msg is set to indicate the nature of the error), or Z_STREAM_ERROR if the stream was not properly initialized. In the case of Z_BUF_ERROR, an input or output error can be distinguished using strm->next_in which will be Z_NULL only if in() returned an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to out() returning non-zero. (in() will always be called before out(), so strm->next_in is assured to be defined if out() returns non-zero.) Note that inflateBack() cannot return Z_OK. */ ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); /* All memory allocated by inflateBackInit() is freed. inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream state was inconsistent. */ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); /* Return flags indicating compile-time options. Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: 1.0: size of uInt 3.2: size of uLong 5.4: size of voidpf (pointer) 7.6: size of z_off_t Compiler, assembler, and debug options: 8: DEBUG 9: ASMV or ASMINF -- use ASM code 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention 11: 0 (reserved) One-time table building (smaller code, but not thread-safe if true): 12: BUILDFIXED -- build static block decoding tables when needed 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed 14,15: 0 (reserved) Library content (indicates missing functionality): 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking deflate code when not needed) 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect and decode gzip streams (to avoid linking crc code) 18-19: 0 (reserved) Operation variations (changes in library functionality): 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate 21: FASTEST -- deflate algorithm with only one, lowest compression level 22,23: 0 (reserved) The sprintf variant used by gzprintf (zero is best): 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! 26: 0 = returns value, 1 = void -- 1 means inferred string length returned Remainder: 27-31: 0 (reserved) */ /* utility functions */ /* The following utility functions are implemented on top of the basic stream-oriented functions. To simplify the interface, some default options are assumed (compression level and memory usage, standard memory allocation functions). The source code of these utility functions can easily be modified if you need special options. */ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least the value returned by compressBound(sourceLen). Upon exit, destLen is the actual size of the compressed buffer. This function can be used to compress a whole file at once if the input file is mmap'ed. compress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer. */ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level)); /* Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least the value returned by compressBound(sourceLen). Upon exit, destLen is the actual size of the compressed buffer. compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); /* compressBound() returns an upper bound on the compressed size after compress() or compress2() on sourceLen bytes. It would be used before a compress() or compress2() call to allocate the destination buffer. */ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be large enough to hold the entire uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some mechanism outside the scope of this compression library.) Upon exit, destLen is the actual size of the compressed buffer. This function can be used to decompress a whole file at once if the input file is mmap'ed. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. */ typedef voidp gzFile; ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); /* Opens a gzip (.gz) file for reading or writing. The mode parameter is as in fopen ("rb" or "wb") but can also include a compression level ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman only compression as in "wb1h", or 'R' for run-length encoding as in "wb1R". (See the description of deflateInit2 for more information about the strategy parameter.) gzopen can be used to read a file which is not in gzip format; in this case gzread will directly read from the file without decompression. gzopen returns NULL if the file could not be opened or if there was insufficient memory to allocate the (de)compression state; errno can be checked to distinguish the two cases (if errno is zero, the zlib error is Z_MEM_ERROR). */ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); /* gzdopen() associates a gzFile with the file descriptor fd. File descriptors are obtained from calls like open, dup, creat, pipe or fileno (in the file has been previously opened with fopen). The mode parameter is as in gzopen. The next call of gzclose on the returned gzFile will also close the file descriptor fd, just like fclose(fdopen(fd), mode) closes the file descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). gzdopen returns NULL if there was insufficient memory to allocate the (de)compression state. */ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); /* Dynamically update the compression level or strategy. See the description of deflateInit2 for the meaning of these parameters. gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not opened for writing. */ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); /* Reads the given number of uncompressed bytes from the compressed file. If the input file was not in gzip format, gzread copies the given number of bytes into the buffer. gzread returns the number of uncompressed bytes actually read (0 for end of file, -1 for error). */ ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); /* Writes the given number of uncompressed bytes into the compressed file. gzwrite returns the number of uncompressed bytes actually written (0 in case of error). */ ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); /* Converts, formats, and writes the args to the compressed file under control of the format string, as in fprintf. gzprintf returns the number of uncompressed bytes actually written (0 in case of error). The number of uncompressed bytes written is limited to 4095. The caller should assure that this limit is not exceeded. If it is exceeded, then gzprintf() will return return an error (0) with nothing written. In this case, there may also be a buffer overflow with unpredictable consequences, which is possible only if zlib was compiled with the insecure functions sprintf() or vsprintf() because the secure snprintf() or vsnprintf() functions were not available. */ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); /* Writes the given null-terminated string to the compressed file, excluding the terminating null character. gzputs returns the number of characters written, or -1 in case of error. */ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); /* Reads bytes from the compressed file until len-1 characters are read, or a newline character is read and transferred to buf, or an end-of-file condition is encountered. The string is then terminated with a null character. gzgets returns buf, or Z_NULL in case of error. */ ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); /* Writes c, converted to an unsigned char, into the compressed file. gzputc returns the value that was written, or -1 in case of error. */ ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); /* Reads one byte from the compressed file. gzgetc returns this byte or -1 in case of end of file or error. */ ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); /* Push one character back onto the stream to be read again later. Only one character of push-back is allowed. gzungetc() returns the character pushed, or -1 on failure. gzungetc() will fail if a character has been pushed but not read yet, or if c is -1. The pushed character will be discarded if the stream is repositioned with gzseek() or gzrewind(). */ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); /* Flushes all pending output into the compressed file. The parameter flush is as in the deflate() function. The return value is the zlib error number (see function gzerror below). gzflush returns Z_OK if the flush parameter is Z_FINISH and all output could be flushed. gzflush should be called only when strictly necessary because it can degrade compression. */ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, z_off_t offset, int whence)); /* Sets the starting position for the next gzread or gzwrite on the given compressed file. The offset represents a number of bytes in the uncompressed data stream. The whence parameter is defined as in lseek(2); the value SEEK_END is not supported. If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek then compresses a sequence of zeroes up to the new starting position. gzseek returns the resulting offset location as measured in bytes from the beginning of the uncompressed stream, or -1 in case of error, in particular if the file is opened for writing and the new starting position would be before the current position. */ ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); /* Rewinds the given file. This function is supported only for reading. gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) */ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); /* Returns the starting position for the next gzread or gzwrite on the given compressed file. This position represents a number of bytes in the uncompressed data stream. gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) */ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); /* Returns 1 when EOF has previously been detected reading the given input stream, otherwise zero. */ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); /* Returns 1 if file is being read directly without decompression, otherwise zero. */ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); /* Flushes all pending output if necessary, closes the compressed file and deallocates all the (de)compression state. The return value is the zlib error number (see function gzerror below). */ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); /* Returns the error message for the last error which occurred on the given compressed file. errnum is set to zlib error number. If an error occurred in the file system and not in the compression library, errnum is set to Z_ERRNO and the application may consult errno to get the exact error code. */ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); /* Clears the error and end-of-file flags for file. This is analogous to the clearerr() function in stdio. This is useful for continuing to read a gzip file that is being written concurrently. */ /* checksum functions */ /* These functions are not related to compression but are exported anyway because they might be useful in applications using the compression library. */ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and return the updated checksum. If buf is NULL, this function returns the required initial value for the checksum. An Adler-32 checksum is almost as reliable as a CRC32 but can be computed much faster. Usage example: uLong adler = adler32(0L, Z_NULL, 0); while (read_buffer(buffer, length) != EOF) { adler = adler32(adler, buffer, length); } if (adler != original_adler) error(); */ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, z_off_t len2)); /* Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. */ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); /* Update a running CRC-32 with the bytes buf[0..len-1] and return the updated CRC-32. If buf is NULL, this function returns the required initial value for the for the crc. Pre- and post-conditioning (one's complement) is performed within this function so it shouldn't be done by the application. Usage example: uLong crc = crc32(0L, Z_NULL, 0); while (read_buffer(buffer, length) != EOF) { crc = crc32(crc, buffer, length); } if (crc != original_crc) error(); */ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); /* Combine two CRC-32 check values into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, CRC-32 check values were calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and len2. */ /* various hacks, don't look :) */ /* deflateInit and inflateInit are macros to allow checking the zlib version * and the compiler's view of z_stream: */ ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, const char *version, int stream_size)); ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, const char *version, int stream_size)); ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size)); ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, const char *version, int stream_size)); ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, unsigned char FAR *window, const char *version, int stream_size)); #define deflateInit(strm, level) \ deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) #define inflateInit(strm) \ inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) #define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ (strategy), ZLIB_VERSION, sizeof(z_stream)) #define inflateInit2(strm, windowBits) \ inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) #define inflateBackInit(strm, windowBits, window) \ inflateBackInit_((strm), (windowBits), (window), \ ZLIB_VERSION, sizeof(z_stream)) #if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) struct internal_state {int dummy;}; /* hack for buggy compilers */ #endif ZEXTERN const char * ZEXPORT zError OF((int)); ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); #ifdef __cplusplus } #endif #endif /* ZLIB_H */ genometools-1.5.1/src/external/sqlite-3.7.10/000077500000000000000000000000001211610345200205025ustar00rootroot00000000000000genometools-1.5.1/src/external/sqlite-3.7.10/sqlite3.c000066400000000000000000217457161211610345200222610ustar00rootroot00000000000000/****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite ** version 3.7.10. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements ** of 5% or more are commonly seen when SQLite is compiled as a single ** translation unit. ** ** This file is all you need to compile SQLite. To use SQLite in other ** programs, you need this file and the "sqlite3.h" header file that defines ** the programming interface to the SQLite library. (If you do not have ** the "sqlite3.h" header file at hand, you will find a copy embedded within ** the text of this file. Search for "Begin file sqlite3.h" to find the start ** of the embedded sqlite3.h header file.) Additional code files may be needed ** if you want a wrapper to interface SQLite with your choice of programming ** language. The code for the "sqlite3" command-line shell is also in a ** separate file. This file contains only code for the core SQLite library. */ #define SQLITE_CORE 1 #define SQLITE_AMALGAMATION 1 #ifndef SQLITE_PRIVATE # define SQLITE_PRIVATE static #endif #ifndef SQLITE_API # define SQLITE_API #endif /************** Begin file sqliteInt.h ***************************************/ /* ** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** Internal interface definitions for SQLite. ** */ #ifndef _SQLITEINT_H_ #define _SQLITEINT_H_ /* ** These #defines should enable >2GB file support on POSIX if the ** underlying operating system supports it. If the OS lacks ** large file support, or if the OS is windows, these should be no-ops. ** ** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any ** system #includes. Hence, this block of code must be the very first ** code in all source files. ** ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch ** on the compiler command line. This is necessary if you are compiling ** on a recent machine (ex: Red Hat 7.2) but you want your code to work ** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 ** without this option, LFS is enable. But LFS does not exist in the kernel ** in Red Hat 6.0, so the code won't work. Hence, for maximum binary ** portability you should omit LFS. ** ** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. */ #ifndef SQLITE_DISABLE_LFS # define _LARGE_FILE 1 # ifndef _FILE_OFFSET_BITS # define _FILE_OFFSET_BITS 64 # endif # define _LARGEFILE_SOURCE 1 #endif /* ** Include the configuration header output by 'configure' if we're using the ** autoconf-based build */ #ifdef _HAVE_SQLITE_CONFIG_H #include "config.h" #endif /************** Include sqliteLimit.h in the middle of sqliteInt.h ***********/ /************** Begin file sqliteLimit.h *************************************/ /* ** 2007 May 7 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** ** This file defines various limits of what SQLite can process. */ /* ** The maximum length of a TEXT or BLOB in bytes. This also ** limits the size of a row in a table or index. ** ** The hard limit is the ability of a 32-bit signed integer ** to count the size: 2^31-1 or 2147483647. */ #ifndef SQLITE_MAX_LENGTH # define SQLITE_MAX_LENGTH 1000000000 #endif /* ** This is the maximum number of ** ** * Columns in a table ** * Columns in an index ** * Columns in a view ** * Terms in the SET clause of an UPDATE statement ** * Terms in the result set of a SELECT statement ** * Terms in the GROUP BY or ORDER BY clauses of a SELECT statement. ** * Terms in the VALUES clause of an INSERT statement ** ** The hard upper limit here is 32676. Most database people will ** tell you that in a well-normalized database, you usually should ** not have more than a dozen or so columns in any table. And if ** that is the case, there is no point in having more than a few ** dozen values in any of the other situations described above. */ #ifndef SQLITE_MAX_COLUMN # define SQLITE_MAX_COLUMN 2000 #endif /* ** The maximum length of a single SQL statement in bytes. ** ** It used to be the case that setting this value to zero would ** turn the limit off. That is no longer true. It is not possible ** to turn this limit off. */ #ifndef SQLITE_MAX_SQL_LENGTH # define SQLITE_MAX_SQL_LENGTH 1000000000 #endif /* ** The maximum depth of an expression tree. This is limited to ** some extent by SQLITE_MAX_SQL_LENGTH. But sometime you might ** want to place more severe limits on the complexity of an ** expression. ** ** A value of 0 used to mean that the limit was not enforced. ** But that is no longer true. The limit is now strictly enforced ** at all times. */ #ifndef SQLITE_MAX_EXPR_DEPTH # define SQLITE_MAX_EXPR_DEPTH 1000 #endif /* ** The maximum number of terms in a compound SELECT statement. ** The code generator for compound SELECT statements does one ** level of recursion for each term. A stack overflow can result ** if the number of terms is too large. In practice, most SQL ** never has more than 3 or 4 terms. Use a value of 0 to disable ** any limit on the number of terms in a compount SELECT. */ #ifndef SQLITE_MAX_COMPOUND_SELECT # define SQLITE_MAX_COMPOUND_SELECT 500 #endif /* ** The maximum number of opcodes in a VDBE program. ** Not currently enforced. */ #ifndef SQLITE_MAX_VDBE_OP # define SQLITE_MAX_VDBE_OP 25000 #endif /* ** The maximum number of arguments to an SQL function. */ #ifndef SQLITE_MAX_FUNCTION_ARG # define SQLITE_MAX_FUNCTION_ARG 127 #endif /* ** The maximum number of in-memory pages to use for the main database ** table and for temporary tables. The SQLITE_DEFAULT_CACHE_SIZE */ #ifndef SQLITE_DEFAULT_CACHE_SIZE # define SQLITE_DEFAULT_CACHE_SIZE 2000 #endif #ifndef SQLITE_DEFAULT_TEMP_CACHE_SIZE # define SQLITE_DEFAULT_TEMP_CACHE_SIZE 500 #endif /* ** The default number of frames to accumulate in the log file before ** checkpointing the database in WAL mode. */ #ifndef SQLITE_DEFAULT_WAL_AUTOCHECKPOINT # define SQLITE_DEFAULT_WAL_AUTOCHECKPOINT 1000 #endif /* ** The maximum number of attached databases. This must be between 0 ** and 62. The upper bound on 62 is because a 64-bit integer bitmap ** is used internally to track attached databases. */ #ifndef SQLITE_MAX_ATTACHED # define SQLITE_MAX_ATTACHED 10 #endif /* ** The maximum value of a ?nnn wildcard that the parser will accept. */ #ifndef SQLITE_MAX_VARIABLE_NUMBER # define SQLITE_MAX_VARIABLE_NUMBER 999 #endif /* Maximum page size. The upper bound on this value is 65536. This a limit ** imposed by the use of 16-bit offsets within each page. ** ** Earlier versions of SQLite allowed the user to change this value at ** compile time. This is no longer permitted, on the grounds that it creates ** a library that is technically incompatible with an SQLite library ** compiled with a different limit. If a process operating on a database ** with a page-size of 65536 bytes crashes, then an instance of SQLite ** compiled with the default page-size limit will not be able to rollback ** the aborted transaction. This could lead to database corruption. */ #ifdef SQLITE_MAX_PAGE_SIZE # undef SQLITE_MAX_PAGE_SIZE #endif #define SQLITE_MAX_PAGE_SIZE 65536 /* ** The default size of a database page. */ #ifndef SQLITE_DEFAULT_PAGE_SIZE # define SQLITE_DEFAULT_PAGE_SIZE 1024 #endif #if SQLITE_DEFAULT_PAGE_SIZE>SQLITE_MAX_PAGE_SIZE # undef SQLITE_DEFAULT_PAGE_SIZE # define SQLITE_DEFAULT_PAGE_SIZE SQLITE_MAX_PAGE_SIZE #endif /* ** Ordinarily, if no value is explicitly provided, SQLite creates databases ** with page size SQLITE_DEFAULT_PAGE_SIZE. However, based on certain ** device characteristics (sector-size and atomic write() support), ** SQLite may choose a larger value. This constant is the maximum value ** SQLite will choose on its own. */ #ifndef SQLITE_MAX_DEFAULT_PAGE_SIZE # define SQLITE_MAX_DEFAULT_PAGE_SIZE 8192 #endif #if SQLITE_MAX_DEFAULT_PAGE_SIZE>SQLITE_MAX_PAGE_SIZE # undef SQLITE_MAX_DEFAULT_PAGE_SIZE # define SQLITE_MAX_DEFAULT_PAGE_SIZE SQLITE_MAX_PAGE_SIZE #endif /* ** Maximum number of pages in one database file. ** ** This is really just the default value for the max_page_count pragma. ** This value can be lowered (or raised) at run-time using that the ** max_page_count macro. */ #ifndef SQLITE_MAX_PAGE_COUNT # define SQLITE_MAX_PAGE_COUNT 1073741823 #endif /* ** Maximum length (in bytes) of the pattern in a LIKE or GLOB ** operator. */ #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH # define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000 #endif /* ** Maximum depth of recursion for triggers. ** ** A value of 1 means that a trigger program will not be able to itself ** fire any triggers. A value of 0 means that no trigger programs at all ** may be executed. */ #ifndef SQLITE_MAX_TRIGGER_DEPTH # define SQLITE_MAX_TRIGGER_DEPTH 1000 #endif /************** End of sqliteLimit.h *****************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ /* Disable nuisance warnings on Borland compilers */ #if defined(__BORLANDC__) #pragma warn -rch /* unreachable code */ #pragma warn -ccc /* Condition is always true or false */ #pragma warn -aus /* Assigned value is never used */ #pragma warn -csu /* Comparing signed and unsigned */ #pragma warn -spa /* Suspicious pointer arithmetic */ #endif /* Needed for various definitions... */ #ifndef _GNU_SOURCE # define _GNU_SOURCE #endif /* ** Include standard header files as necessary */ #ifdef HAVE_STDINT_H #include #endif #ifdef HAVE_INTTYPES_H #include #endif /* ** The following macros are used to cast pointers to integers and ** integers to pointers. The way you do this varies from one compiler ** to the next, so we have developed the following set of #if statements ** to generate appropriate macros for a wide range of compilers. ** ** The correct "ANSI" way to do this is to use the intptr_t type. ** Unfortunately, that typedef is not available on all compilers, or ** if it is available, it requires an #include of specific headers ** that vary from one machine to the next. ** ** Ticket #3860: The llvm-gcc-4.2 compiler from Apple chokes on ** the ((void*)&((char*)0)[X]) construct. But MSVC chokes on ((void*)(X)). ** So we have to define the macros in different ways depending on the ** compiler. */ #if defined(__PTRDIFF_TYPE__) /* This case should work for GCC */ # define SQLITE_INT_TO_PTR(X) ((void*)(__PTRDIFF_TYPE__)(X)) # define SQLITE_PTR_TO_INT(X) ((int)(__PTRDIFF_TYPE__)(X)) #elif !defined(__GNUC__) /* Works for compilers other than LLVM */ # define SQLITE_INT_TO_PTR(X) ((void*)&((char*)0)[X]) # define SQLITE_PTR_TO_INT(X) ((int)(((char*)X)-(char*)0)) #elif defined(HAVE_STDINT_H) /* Use this case if we have ANSI headers */ # define SQLITE_INT_TO_PTR(X) ((void*)(intptr_t)(X)) # define SQLITE_PTR_TO_INT(X) ((int)(intptr_t)(X)) #else /* Generates a warning - but it always works */ # define SQLITE_INT_TO_PTR(X) ((void*)(X)) # define SQLITE_PTR_TO_INT(X) ((int)(X)) #endif /* ** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2. ** 0 means mutexes are permanently disable and the library is never ** threadsafe. 1 means the library is serialized which is the highest ** level of threadsafety. 2 means the libary is multithreaded - multiple ** threads can use SQLite as long as no two threads try to use the same ** database connection at the same time. ** ** Older versions of SQLite used an optional THREADSAFE macro. ** We support that for legacy. */ #if !defined(SQLITE_THREADSAFE) #if defined(THREADSAFE) # define SQLITE_THREADSAFE THREADSAFE #else # define SQLITE_THREADSAFE 1 /* IMP: R-07272-22309 */ #endif #endif /* ** Powersafe overwrite is on by default. But can be turned off using ** the -DSQLITE_POWERSAFE_OVERWRITE=0 command-line option. */ #ifndef SQLITE_POWERSAFE_OVERWRITE # define SQLITE_POWERSAFE_OVERWRITE 1 #endif /* ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1. ** It determines whether or not the features related to ** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can ** be overridden at runtime using the sqlite3_config() API. */ #if !defined(SQLITE_DEFAULT_MEMSTATUS) # define SQLITE_DEFAULT_MEMSTATUS 1 #endif /* ** Exactly one of the following macros must be defined in order to ** specify which memory allocation subsystem to use. ** ** SQLITE_SYSTEM_MALLOC // Use normal system malloc() ** SQLITE_WIN32_MALLOC // Use Win32 native heap API ** SQLITE_MEMDEBUG // Debugging version of system malloc() ** ** On Windows, if the SQLITE_WIN32_MALLOC_VALIDATE macro is defined and the ** assert() macro is enabled, each call into the Win32 native heap subsystem ** will cause HeapValidate to be called. If heap validation should fail, an ** assertion will be triggered. ** ** (Historical note: There used to be several other options, but we've ** pared it down to just these three.) ** ** If none of the above are defined, then set SQLITE_SYSTEM_MALLOC as ** the default. */ #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_WIN32_MALLOC)+defined(SQLITE_MEMDEBUG)>1 # error "At most one of the following compile-time configuration options\ is allows: SQLITE_SYSTEM_MALLOC, SQLITE_WIN32_MALLOC, SQLITE_MEMDEBUG" #endif #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_WIN32_MALLOC)+defined(SQLITE_MEMDEBUG)==0 # define SQLITE_SYSTEM_MALLOC 1 #endif /* ** If SQLITE_MALLOC_SOFT_LIMIT is not zero, then try to keep the ** sizes of memory allocations below this value where possible. */ #if !defined(SQLITE_MALLOC_SOFT_LIMIT) # define SQLITE_MALLOC_SOFT_LIMIT 1024 #endif /* ** We need to define _XOPEN_SOURCE as follows in order to enable ** recursive mutexes on most Unix systems. But Mac OS X is different. ** The _XOPEN_SOURCE define causes problems for Mac OS X we are told, ** so it is omitted there. See ticket #2673. ** ** Later we learn that _XOPEN_SOURCE is poorly or incorrectly ** implemented on some systems. So we avoid defining it at all ** if it is already defined or if it is unneeded because we are ** not doing a threadsafe build. Ticket #2681. ** ** See also ticket #2741. */ #if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) && SQLITE_THREADSAFE # define _XOPEN_SOURCE 500 /* Needed to enable pthread recursive mutexes */ #endif /* ** The TCL headers are only needed when compiling the TCL bindings. */ #if defined(SQLITE_TCL) || defined(TCLSH) # include #endif /* ** Many people are failing to set -DNDEBUG=1 when compiling SQLite. ** Setting NDEBUG makes the code smaller and run faster. So the following ** lines are added to automatically set NDEBUG unless the -DSQLITE_DEBUG=1 ** option is set. Thus NDEBUG becomes an opt-in rather than an opt-out ** feature. */ #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) # define NDEBUG 1 #endif /* ** The testcase() macro is used to aid in coverage testing. When ** doing coverage testing, the condition inside the argument to ** testcase() must be evaluated both true and false in order to ** get full branch coverage. The testcase() macro is inserted ** to help ensure adequate test coverage in places where simple ** condition/decision coverage is inadequate. For example, testcase() ** can be used to make sure boundary values are tested. For ** bitmask tests, testcase() can be used to make sure each bit ** is significant and used at least once. On switch statements ** where multiple cases go to the same block of code, testcase() ** can insure that all cases are evaluated. ** */ #ifdef SQLITE_COVERAGE_TEST SQLITE_PRIVATE void sqlite3Coverage(int); # define testcase(X) if( X ){ sqlite3Coverage(__LINE__); } #else # define testcase(X) #endif /* ** The TESTONLY macro is used to enclose variable declarations or ** other bits of code that are needed to support the arguments ** within testcase() and assert() macros. */ #if !defined(NDEBUG) || defined(SQLITE_COVERAGE_TEST) # define TESTONLY(X) X #else # define TESTONLY(X) #endif /* ** Sometimes we need a small amount of code such as a variable initialization ** to setup for a later assert() statement. We do not want this code to ** appear when assert() is disabled. The following macro is therefore ** used to contain that setup code. The "VVA" acronym stands for ** "Verification, Validation, and Accreditation". In other words, the ** code within VVA_ONLY() will only run during verification processes. */ #ifndef NDEBUG # define VVA_ONLY(X) X #else # define VVA_ONLY(X) #endif /* ** The ALWAYS and NEVER macros surround boolean expressions which ** are intended to always be true or false, respectively. Such ** expressions could be omitted from the code completely. But they ** are included in a few cases in order to enhance the resilience ** of SQLite to unexpected behavior - to make the code "self-healing" ** or "ductile" rather than being "brittle" and crashing at the first ** hint of unplanned behavior. ** ** In other words, ALWAYS and NEVER are added for defensive code. ** ** When doing coverage testing ALWAYS and NEVER are hard-coded to ** be true and false so that the unreachable code then specify will ** not be counted as untested code. */ #if defined(SQLITE_COVERAGE_TEST) # define ALWAYS(X) (1) # define NEVER(X) (0) #elif !defined(NDEBUG) # define ALWAYS(X) ((X)?1:(assert(0),0)) # define NEVER(X) ((X)?(assert(0),1):0) #else # define ALWAYS(X) (X) # define NEVER(X) (X) #endif /* ** Return true (non-zero) if the input is a integer that is too large ** to fit in 32-bits. This macro is used inside of various testcase() ** macros to verify that we have tested SQLite for large-file support. */ #define IS_BIG_INT(X) (((X)&~(i64)0xffffffff)!=0) /* ** The macro unlikely() is a hint that surrounds a boolean ** expression that is usually false. Macro likely() surrounds ** a boolean expression that is usually true. GCC is able to ** use these hints to generate better code, sometimes. */ #if defined(__GNUC__) && 0 # define likely(X) __builtin_expect((X),1) # define unlikely(X) __builtin_expect((X),0) #else # define likely(X) !!(X) # define unlikely(X) !!(X) #endif /************** Include sqlite3.h in the middle of sqliteInt.h ***************/ /************** Begin file sqlite3.h *****************************************/ /* ** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This header file defines the interface that the SQLite library ** presents to client programs. If a C-function, structure, datatype, ** or constant definition does not appear in this file, then it is ** not a published API of SQLite, is subject to change without ** notice, and should not be referenced by programs that use SQLite. ** ** Some of the definitions that are in this file are marked as ** "experimental". Experimental interfaces are normally new ** features recently added to SQLite. We do not anticipate changes ** to experimental interfaces but reserve the right to make minor changes ** if experience from use "in the wild" suggest such changes are prudent. ** ** The official C-language API documentation for SQLite is derived ** from comments in this file. This file is the authoritative source ** on how SQLite interfaces are suppose to operate. ** ** The name of this file under configuration management is "sqlite.h.in". ** The makefile makes some minor changes to this file (such as inserting ** the version number) and changes its name to "sqlite3.h" as ** part of the build process. */ #ifndef _SQLITE3_H_ #define _SQLITE3_H_ #include /* Needed for the definition of va_list */ /* ** Make sure we can call this stuff from C++. */ #if 0 extern "C" { #endif /* ** Add the ability to override 'extern' */ #ifndef SQLITE_EXTERN # define SQLITE_EXTERN extern #endif #ifndef SQLITE_API # define SQLITE_API #endif /* ** These no-op macros are used in front of interfaces to mark those ** interfaces as either deprecated or experimental. New applications ** should not use deprecated interfaces - they are support for backwards ** compatibility only. Application writers should be aware that ** experimental interfaces are subject to change in point releases. ** ** These macros used to resolve to various kinds of compiler magic that ** would generate warning messages when they were used. But that ** compiler magic ended up generating such a flurry of bug reports ** that we have taken it all out and gone back to using simple ** noop macros. */ #define SQLITE_DEPRECATED #define SQLITE_EXPERIMENTAL /* ** Ensure these symbols were not defined by some previous header file. */ #ifdef SQLITE_VERSION # undef SQLITE_VERSION #endif #ifdef SQLITE_VERSION_NUMBER # undef SQLITE_VERSION_NUMBER #endif /* ** CAPI3REF: Compile-Time Library Version Numbers ** ** ^(The [SQLITE_VERSION] C preprocessor macro in the sqlite3.h header ** evaluates to a string literal that is the SQLite version in the ** format "X.Y.Z" where X is the major version number (always 3 for ** SQLite3) and Y is the minor version number and Z is the release number.)^ ** ^(The [SQLITE_VERSION_NUMBER] C preprocessor macro resolves to an integer ** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same ** numbers used in [SQLITE_VERSION].)^ ** The SQLITE_VERSION_NUMBER for any given release of SQLite will also ** be larger than the release from which it is derived. Either Y will ** be held constant and Z will be incremented or else Y will be incremented ** and Z will be reset to zero. ** ** Since version 3.6.18, SQLite source code has been stored in the ** Fossil configuration management ** system. ^The SQLITE_SOURCE_ID macro evaluates to ** a string which identifies a particular check-in of SQLite ** within its configuration management system. ^The SQLITE_SOURCE_ID ** string contains the date and time of the check-in (UTC) and an SHA1 ** hash of the entire source tree. ** ** See also: [sqlite3_libversion()], ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ #define SQLITE_VERSION "3.7.10" #define SQLITE_VERSION_NUMBER 3007010 #define SQLITE_SOURCE_ID "2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204" /* ** CAPI3REF: Run-Time Library Version Numbers ** KEYWORDS: sqlite3_version, sqlite3_sourceid ** ** These interfaces provide the same information as the [SQLITE_VERSION], ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros ** but are associated with the library instead of the header file. ^(Cautious ** programmers might include assert() statements in their application to ** verify that values returned by these interfaces match the macros in ** the header, and thus insure that the application is ** compiled with matching library and header files. ** **
    ** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
    ** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
    ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
    ** 
    )^ ** ** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION] ** macro. ^The sqlite3_libversion() function returns a pointer to the ** to the sqlite3_version[] string constant. The sqlite3_libversion() ** function is provided for use in DLLs since DLL users usually do not have ** direct access to string constants within the DLL. ^The ** sqlite3_libversion_number() function returns an integer equal to ** [SQLITE_VERSION_NUMBER]. ^The sqlite3_sourceid() function returns ** a pointer to a string constant whose value is the same as the ** [SQLITE_SOURCE_ID] C preprocessor macro. ** ** See also: [sqlite_version()] and [sqlite_source_id()]. */ SQLITE_API const char sqlite3_version[] = SQLITE_VERSION; SQLITE_API const char *sqlite3_libversion(void); SQLITE_API const char *sqlite3_sourceid(void); SQLITE_API int sqlite3_libversion_number(void); /* ** CAPI3REF: Run-Time Library Compilation Options Diagnostics ** ** ^The sqlite3_compileoption_used() function returns 0 or 1 ** indicating whether the specified option was defined at ** compile time. ^The SQLITE_ prefix may be omitted from the ** option name passed to sqlite3_compileoption_used(). ** ** ^The sqlite3_compileoption_get() function allows iterating ** over the list of options that were defined at compile time by ** returning the N-th compile time option string. ^If N is out of range, ** sqlite3_compileoption_get() returns a NULL pointer. ^The SQLITE_ ** prefix is omitted from any strings returned by ** sqlite3_compileoption_get(). ** ** ^Support for the diagnostic functions sqlite3_compileoption_used() ** and sqlite3_compileoption_get() may be omitted by specifying the ** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time. ** ** See also: SQL functions [sqlite_compileoption_used()] and ** [sqlite_compileoption_get()] and the [compile_options pragma]. */ #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS SQLITE_API int sqlite3_compileoption_used(const char *zOptName); SQLITE_API const char *sqlite3_compileoption_get(int N); #endif /* ** CAPI3REF: Test To See If The Library Is Threadsafe ** ** ^The sqlite3_threadsafe() function returns zero if and only if ** SQLite was compiled with mutexing code omitted due to the ** [SQLITE_THREADSAFE] compile-time option being set to 0. ** ** SQLite can be compiled with or without mutexes. When ** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes ** are enabled and SQLite is threadsafe. When the ** [SQLITE_THREADSAFE] macro is 0, ** the mutexes are omitted. Without the mutexes, it is not safe ** to use SQLite concurrently from more than one thread. ** ** Enabling mutexes incurs a measurable performance penalty. ** So if speed is of utmost importance, it makes sense to disable ** the mutexes. But for maximum safety, mutexes should be enabled. ** ^The default behavior is for mutexes to be enabled. ** ** This interface can be used by an application to make sure that the ** version of SQLite that it is linking against was compiled with ** the desired setting of the [SQLITE_THREADSAFE] macro. ** ** This interface only reports on the compile-time mutex setting ** of the [SQLITE_THREADSAFE] flag. If SQLite is compiled with ** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but ** can be fully or partially disabled using a call to [sqlite3_config()] ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD], ** or [SQLITE_CONFIG_MUTEX]. ^(The return value of the ** sqlite3_threadsafe() function shows only the compile-time setting of ** thread safety, not any run-time changes to that setting made by ** sqlite3_config(). In other words, the return value from sqlite3_threadsafe() ** is unchanged by calls to sqlite3_config().)^ ** ** See the [threading mode] documentation for additional information. */ SQLITE_API int sqlite3_threadsafe(void); /* ** CAPI3REF: Database Connection Handle ** KEYWORDS: {database connection} {database connections} ** ** Each open SQLite database is represented by a pointer to an instance of ** the opaque structure named "sqlite3". It is useful to think of an sqlite3 ** pointer as an object. The [sqlite3_open()], [sqlite3_open16()], and ** [sqlite3_open_v2()] interfaces are its constructors, and [sqlite3_close()] ** is its destructor. There are many other interfaces (such as ** [sqlite3_prepare_v2()], [sqlite3_create_function()], and ** [sqlite3_busy_timeout()] to name but three) that are methods on an ** sqlite3 object. */ typedef struct sqlite3 sqlite3; /* ** CAPI3REF: 64-Bit Integer Types ** KEYWORDS: sqlite_int64 sqlite_uint64 ** ** Because there is no cross-platform way to specify 64-bit integer types ** SQLite includes typedefs for 64-bit signed and unsigned integers. ** ** The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions. ** The sqlite_int64 and sqlite_uint64 types are supported for backwards ** compatibility only. ** ** ^The sqlite3_int64 and sqlite_int64 types can store integer values ** between -9223372036854775808 and +9223372036854775807 inclusive. ^The ** sqlite3_uint64 and sqlite_uint64 types can store integer values ** between 0 and +18446744073709551615 inclusive. */ #ifdef SQLITE_INT64_TYPE typedef SQLITE_INT64_TYPE sqlite_int64; typedef unsigned SQLITE_INT64_TYPE sqlite_uint64; #elif defined(_MSC_VER) || defined(__BORLANDC__) typedef __int64 sqlite_int64; typedef unsigned __int64 sqlite_uint64; #else typedef long long int sqlite_int64; typedef unsigned long long int sqlite_uint64; #endif typedef sqlite_int64 sqlite3_int64; typedef sqlite_uint64 sqlite3_uint64; /* ** If compiling for a processor that lacks floating point support, ** substitute integer for floating-point. */ #ifdef SQLITE_OMIT_FLOATING_POINT # define double sqlite3_int64 #endif /* ** CAPI3REF: Closing A Database Connection ** ** ^The sqlite3_close() routine is the destructor for the [sqlite3] object. ** ^Calls to sqlite3_close() return SQLITE_OK if the [sqlite3] object is ** successfully destroyed and all associated resources are deallocated. ** ** Applications must [sqlite3_finalize | finalize] all [prepared statements] ** and [sqlite3_blob_close | close] all [BLOB handles] associated with ** the [sqlite3] object prior to attempting to close the object. ^If ** sqlite3_close() is called on a [database connection] that still has ** outstanding [prepared statements] or [BLOB handles], then it returns ** SQLITE_BUSY. ** ** ^If [sqlite3_close()] is invoked while a transaction is open, ** the transaction is automatically rolled back. ** ** The C parameter to [sqlite3_close(C)] must be either a NULL ** pointer or an [sqlite3] object pointer obtained ** from [sqlite3_open()], [sqlite3_open16()], or ** [sqlite3_open_v2()], and not previously closed. ** ^Calling sqlite3_close() with a NULL pointer argument is a ** harmless no-op. */ SQLITE_API int sqlite3_close(sqlite3 *); /* ** The type for a callback function. ** This is legacy and deprecated. It is included for historical ** compatibility and is not documented. */ typedef int (*sqlite3_callback)(void*,int,char**, char**); /* ** CAPI3REF: One-Step Query Execution Interface ** ** The sqlite3_exec() interface is a convenience wrapper around ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()], ** that allows an application to run multiple statements of SQL ** without having to use a lot of C code. ** ** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded, ** semicolon-separate SQL statements passed into its 2nd argument, ** in the context of the [database connection] passed in as its 1st ** argument. ^If the callback function of the 3rd argument to ** sqlite3_exec() is not NULL, then it is invoked for each result row ** coming out of the evaluated SQL statements. ^The 4th argument to ** sqlite3_exec() is relayed through to the 1st argument of each ** callback invocation. ^If the callback pointer to sqlite3_exec() ** is NULL, then no callback is ever invoked and result rows are ** ignored. ** ** ^If an error occurs while evaluating the SQL statements passed into ** sqlite3_exec(), then execution of the current statement stops and ** subsequent statements are skipped. ^If the 5th parameter to sqlite3_exec() ** is not NULL then any error message is written into memory obtained ** from [sqlite3_malloc()] and passed back through the 5th parameter. ** To avoid memory leaks, the application should invoke [sqlite3_free()] ** on error message strings returned through the 5th parameter of ** of sqlite3_exec() after the error message string is no longer needed. ** ^If the 5th parameter to sqlite3_exec() is not NULL and no errors ** occur, then sqlite3_exec() sets the pointer in its 5th parameter to ** NULL before returning. ** ** ^If an sqlite3_exec() callback returns non-zero, the sqlite3_exec() ** routine returns SQLITE_ABORT without invoking the callback again and ** without running any subsequent SQL statements. ** ** ^The 2nd argument to the sqlite3_exec() callback function is the ** number of columns in the result. ^The 3rd argument to the sqlite3_exec() ** callback is an array of pointers to strings obtained as if from ** [sqlite3_column_text()], one for each column. ^If an element of a ** result row is NULL then the corresponding string pointer for the ** sqlite3_exec() callback is a NULL pointer. ^The 4th argument to the ** sqlite3_exec() callback is an array of pointers to strings where each ** entry represents the name of corresponding result column as obtained ** from [sqlite3_column_name()]. ** ** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer ** to an empty string, or a pointer that contains only whitespace and/or ** SQL comments, then no SQL statements are evaluated and the database ** is not changed. ** ** Restrictions: ** **
      **
    • The application must insure that the 1st parameter to sqlite3_exec() ** is a valid and open [database connection]. **
    • The application must not close [database connection] specified by ** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running. **
    • The application must not modify the SQL statement text passed into ** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running. **
    */ SQLITE_API int sqlite3_exec( sqlite3*, /* An open database */ const char *sql, /* SQL to be evaluated */ int (*callback)(void*,int,char**,char**), /* Callback function */ void *, /* 1st argument to callback */ char **errmsg /* Error msg written here */ ); /* ** CAPI3REF: Result Codes ** KEYWORDS: SQLITE_OK {error code} {error codes} ** KEYWORDS: {result code} {result codes} ** ** Many SQLite functions return an integer result code from the set shown ** here in order to indicate success or failure. ** ** New error codes may be added in future versions of SQLite. ** ** See also: [SQLITE_IOERR_READ | extended result codes], ** [sqlite3_vtab_on_conflict()] [SQLITE_ROLLBACK | result codes]. */ #define SQLITE_OK 0 /* Successful result */ /* beginning-of-error-codes */ #define SQLITE_ERROR 1 /* SQL error or missing database */ #define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */ #define SQLITE_PERM 3 /* Access permission denied */ #define SQLITE_ABORT 4 /* Callback routine requested an abort */ #define SQLITE_BUSY 5 /* The database file is locked */ #define SQLITE_LOCKED 6 /* A table in the database is locked */ #define SQLITE_NOMEM 7 /* A malloc() failed */ #define SQLITE_READONLY 8 /* Attempt to write a readonly database */ #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ #define SQLITE_CORRUPT 11 /* The database disk image is malformed */ #define SQLITE_NOTFOUND 12 /* Unknown opcode in sqlite3_file_control() */ #define SQLITE_FULL 13 /* Insertion failed because database is full */ #define SQLITE_CANTOPEN 14 /* Unable to open the database file */ #define SQLITE_PROTOCOL 15 /* Database lock protocol error */ #define SQLITE_EMPTY 16 /* Database is empty */ #define SQLITE_SCHEMA 17 /* The database schema changed */ #define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */ #define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */ #define SQLITE_MISMATCH 20 /* Data type mismatch */ #define SQLITE_MISUSE 21 /* Library used incorrectly */ #define SQLITE_NOLFS 22 /* Uses OS features not supported on host */ #define SQLITE_AUTH 23 /* Authorization denied */ #define SQLITE_FORMAT 24 /* Auxiliary database format error */ #define SQLITE_RANGE 25 /* 2nd parameter to sqlite3_bind out of range */ #define SQLITE_NOTADB 26 /* File opened that is not a database file */ #define SQLITE_ROW 100 /* sqlite3_step() has another row ready */ #define SQLITE_DONE 101 /* sqlite3_step() has finished executing */ /* end-of-error-codes */ /* ** CAPI3REF: Extended Result Codes ** KEYWORDS: {extended error code} {extended error codes} ** KEYWORDS: {extended result code} {extended result codes} ** ** In its default configuration, SQLite API routines return one of 26 integer ** [SQLITE_OK | result codes]. However, experience has shown that many of ** these result codes are too coarse-grained. They do not provide as ** much information about problems as programmers might like. In an effort to ** address this, newer versions of SQLite (version 3.3.8 and later) include ** support for additional result codes that provide more detailed information ** about errors. The extended result codes are enabled or disabled ** on a per database connection basis using the ** [sqlite3_extended_result_codes()] API. ** ** Some of the available extended result codes are listed here. ** One may expect the number of extended result codes will be expand ** over time. Software that uses extended result codes should expect ** to see new result codes in future releases of SQLite. ** ** The SQLITE_OK result code will never be extended. It will always ** be exactly zero. */ #define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8)) #define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8)) #define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8)) #define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4<<8)) #define SQLITE_IOERR_DIR_FSYNC (SQLITE_IOERR | (5<<8)) #define SQLITE_IOERR_TRUNCATE (SQLITE_IOERR | (6<<8)) #define SQLITE_IOERR_FSTAT (SQLITE_IOERR | (7<<8)) #define SQLITE_IOERR_UNLOCK (SQLITE_IOERR | (8<<8)) #define SQLITE_IOERR_RDLOCK (SQLITE_IOERR | (9<<8)) #define SQLITE_IOERR_DELETE (SQLITE_IOERR | (10<<8)) #define SQLITE_IOERR_BLOCKED (SQLITE_IOERR | (11<<8)) #define SQLITE_IOERR_NOMEM (SQLITE_IOERR | (12<<8)) #define SQLITE_IOERR_ACCESS (SQLITE_IOERR | (13<<8)) #define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14<<8)) #define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15<<8)) #define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16<<8)) #define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17<<8)) #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) #define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8)) #define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8)) #define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8)) /* ** CAPI3REF: Flags For File Open Operations ** ** These bit values are intended for use in the ** 3rd parameter to the [sqlite3_open_v2()] interface and ** in the 4th parameter to the [sqlite3_vfs.xOpen] method. */ #define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */ #define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS only */ #define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS only */ #define SQLITE_OPEN_URI 0x00000040 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS only */ #define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS only */ #define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS only */ #define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 /* VFS only */ #define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 /* VFS only */ #define SQLITE_OPEN_SUBJOURNAL 0x00002000 /* VFS only */ #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS only */ #define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_WAL 0x00080000 /* VFS only */ /* Reserved: 0x00F00000 */ /* ** CAPI3REF: Device Characteristics ** ** The xDeviceCharacteristics method of the [sqlite3_io_methods] ** object returns an integer which is a vector of the these ** bit values expressing I/O characteristics of the mass storage ** device that holds the file that the [sqlite3_io_methods] ** refers to. ** ** The SQLITE_IOCAP_ATOMIC property means that all writes of ** any size are atomic. The SQLITE_IOCAP_ATOMICnnn values ** mean that writes of blocks that are nnn bytes in size and ** are aligned to an address which is an integer multiple of ** nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means ** that when data is appended to a file, the data is appended ** first then the size of the file is extended, never the other ** way around. The SQLITE_IOCAP_SEQUENTIAL property means that ** information is written to disk in the same order as calls ** to xWrite(). The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that ** after reboot following a crash or power loss, the only bytes in a ** file that were written at the application level might have changed ** and that adjacent bytes, even bytes within the same sector are ** guaranteed to be unchanged. */ #define SQLITE_IOCAP_ATOMIC 0x00000001 #define SQLITE_IOCAP_ATOMIC512 0x00000002 #define SQLITE_IOCAP_ATOMIC1K 0x00000004 #define SQLITE_IOCAP_ATOMIC2K 0x00000008 #define SQLITE_IOCAP_ATOMIC4K 0x00000010 #define SQLITE_IOCAP_ATOMIC8K 0x00000020 #define SQLITE_IOCAP_ATOMIC16K 0x00000040 #define SQLITE_IOCAP_ATOMIC32K 0x00000080 #define SQLITE_IOCAP_ATOMIC64K 0x00000100 #define SQLITE_IOCAP_SAFE_APPEND 0x00000200 #define SQLITE_IOCAP_SEQUENTIAL 0x00000400 #define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800 #define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000 /* ** CAPI3REF: File Locking Levels ** ** SQLite uses one of these integer values as the second ** argument to calls it makes to the xLock() and xUnlock() methods ** of an [sqlite3_io_methods] object. */ #define SQLITE_LOCK_NONE 0 #define SQLITE_LOCK_SHARED 1 #define SQLITE_LOCK_RESERVED 2 #define SQLITE_LOCK_PENDING 3 #define SQLITE_LOCK_EXCLUSIVE 4 /* ** CAPI3REF: Synchronization Type Flags ** ** When SQLite invokes the xSync() method of an ** [sqlite3_io_methods] object it uses a combination of ** these integer values as the second argument. ** ** When the SQLITE_SYNC_DATAONLY flag is used, it means that the ** sync operation only needs to flush data to mass storage. Inode ** information need not be flushed. If the lower four bits of the flag ** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics. ** If the lower four bits equal SQLITE_SYNC_FULL, that means ** to use Mac OS X style fullsync instead of fsync(). ** ** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags ** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL ** settings. The [synchronous pragma] determines when calls to the ** xSync VFS method occur and applies uniformly across all platforms. ** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how ** energetic or rigorous or forceful the sync operations are and ** only make a difference on Mac OSX for the default SQLite code. ** (Third-party VFS implementations might also make the distinction ** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the ** operating systems natively supported by SQLite, only Mac OSX ** cares about the difference.) */ #define SQLITE_SYNC_NORMAL 0x00002 #define SQLITE_SYNC_FULL 0x00003 #define SQLITE_SYNC_DATAONLY 0x00010 /* ** CAPI3REF: OS Interface Open File Handle ** ** An [sqlite3_file] object represents an open file in the ** [sqlite3_vfs | OS interface layer]. Individual OS interface ** implementations will ** want to subclass this object by appending additional fields ** for their own use. The pMethods entry is a pointer to an ** [sqlite3_io_methods] object that defines methods for performing ** I/O operations on the open file. */ typedef struct sqlite3_file sqlite3_file; struct sqlite3_file { const struct sqlite3_io_methods *pMethods; /* Methods for an open file */ }; /* ** CAPI3REF: OS Interface File Virtual Methods Object ** ** Every file opened by the [sqlite3_vfs.xOpen] method populates an ** [sqlite3_file] object (or, more commonly, a subclass of the ** [sqlite3_file] object) with a pointer to an instance of this object. ** This object defines the methods used to perform various operations ** against the open file represented by the [sqlite3_file] object. ** ** If the [sqlite3_vfs.xOpen] method sets the sqlite3_file.pMethods element ** to a non-NULL pointer, then the sqlite3_io_methods.xClose method ** may be invoked even if the [sqlite3_vfs.xOpen] reported that it failed. The ** only way to prevent a call to xClose following a failed [sqlite3_vfs.xOpen] ** is for the [sqlite3_vfs.xOpen] to set the sqlite3_file.pMethods element ** to NULL. ** ** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or ** [SQLITE_SYNC_FULL]. The first choice is the normal fsync(). ** The second choice is a Mac OS X style fullsync. The [SQLITE_SYNC_DATAONLY] ** flag may be ORed in to indicate that only the data of the file ** and not its inode needs to be synced. ** ** The integer values to xLock() and xUnlock() are one of **
      **
    • [SQLITE_LOCK_NONE], **
    • [SQLITE_LOCK_SHARED], **
    • [SQLITE_LOCK_RESERVED], **
    • [SQLITE_LOCK_PENDING], or **
    • [SQLITE_LOCK_EXCLUSIVE]. **
    ** xLock() increases the lock. xUnlock() decreases the lock. ** The xCheckReservedLock() method checks whether any database connection, ** either in this process or in some other process, is holding a RESERVED, ** PENDING, or EXCLUSIVE lock on the file. It returns true ** if such a lock exists and false otherwise. ** ** The xFileControl() method is a generic interface that allows custom ** VFS implementations to directly control an open file using the ** [sqlite3_file_control()] interface. The second "op" argument is an ** integer opcode. The third argument is a generic pointer intended to ** point to a structure that may contain arguments or space in which to ** write return values. Potential uses for xFileControl() might be ** functions to enable blocking locks with timeouts, to change the ** locking strategy (for example to use dot-file locks), to inquire ** about the status of a lock, or to break stale locks. The SQLite ** core reserves all opcodes less than 100 for its own use. ** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available. ** Applications that define a custom xFileControl method should use opcodes ** greater than 100 to avoid conflicts. VFS implementations should ** return [SQLITE_NOTFOUND] for file control opcodes that they do not ** recognize. ** ** The xSectorSize() method returns the sector size of the ** device that underlies the file. The sector size is the ** minimum write that can be performed without disturbing ** other bytes in the file. The xDeviceCharacteristics() ** method returns a bit vector describing behaviors of the ** underlying device: ** **
      **
    • [SQLITE_IOCAP_ATOMIC] **
    • [SQLITE_IOCAP_ATOMIC512] **
    • [SQLITE_IOCAP_ATOMIC1K] **
    • [SQLITE_IOCAP_ATOMIC2K] **
    • [SQLITE_IOCAP_ATOMIC4K] **
    • [SQLITE_IOCAP_ATOMIC8K] **
    • [SQLITE_IOCAP_ATOMIC16K] **
    • [SQLITE_IOCAP_ATOMIC32K] **
    • [SQLITE_IOCAP_ATOMIC64K] **
    • [SQLITE_IOCAP_SAFE_APPEND] **
    • [SQLITE_IOCAP_SEQUENTIAL] **
    ** ** The SQLITE_IOCAP_ATOMIC property means that all writes of ** any size are atomic. The SQLITE_IOCAP_ATOMICnnn values ** mean that writes of blocks that are nnn bytes in size and ** are aligned to an address which is an integer multiple of ** nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means ** that when data is appended to a file, the data is appended ** first then the size of the file is extended, never the other ** way around. The SQLITE_IOCAP_SEQUENTIAL property means that ** information is written to disk in the same order as calls ** to xWrite(). ** ** If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill ** in the unread portions of the buffer with zeros. A VFS that ** fails to zero-fill short reads might seem to work. However, ** failure to zero-fill short reads will eventually lead to ** database corruption. */ typedef struct sqlite3_io_methods sqlite3_io_methods; struct sqlite3_io_methods { int iVersion; int (*xClose)(sqlite3_file*); int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst); int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst); int (*xTruncate)(sqlite3_file*, sqlite3_int64 size); int (*xSync)(sqlite3_file*, int flags); int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize); int (*xLock)(sqlite3_file*, int); int (*xUnlock)(sqlite3_file*, int); int (*xCheckReservedLock)(sqlite3_file*, int *pResOut); int (*xFileControl)(sqlite3_file*, int op, void *pArg); int (*xSectorSize)(sqlite3_file*); int (*xDeviceCharacteristics)(sqlite3_file*); /* Methods above are valid for version 1 */ int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**); int (*xShmLock)(sqlite3_file*, int offset, int n, int flags); void (*xShmBarrier)(sqlite3_file*); int (*xShmUnmap)(sqlite3_file*, int deleteFlag); /* Methods above are valid for version 2 */ /* Additional methods may be added in future releases */ }; /* ** CAPI3REF: Standard File Control Opcodes ** ** These integer constants are opcodes for the xFileControl method ** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()] ** interface. ** ** The [SQLITE_FCNTL_LOCKSTATE] opcode is used for debugging. This ** opcode causes the xFileControl method to write the current state of ** the lock (one of [SQLITE_LOCK_NONE], [SQLITE_LOCK_SHARED], ** [SQLITE_LOCK_RESERVED], [SQLITE_LOCK_PENDING], or [SQLITE_LOCK_EXCLUSIVE]) ** into an integer that the pArg argument points to. This capability ** is used during testing and only needs to be supported when SQLITE_TEST ** is defined. ** ** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS ** layer a hint of how large the database file will grow to be during the ** current transaction. This hint is not guaranteed to be accurate but it ** is often close. The underlying VFS might choose to preallocate database ** file space based on this hint in order to help writes to the database ** file run faster. ** ** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS ** extends and truncates the database file in chunks of a size specified ** by the user. The fourth argument to [sqlite3_file_control()] should ** point to an integer (type int) containing the new chunk-size to use ** for the nominated database. Allocating database file space in large ** chunks (say 1MB at a time), may reduce file-system fragmentation and ** improve performance on some systems. ** ** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer ** to the [sqlite3_file] object associated with a particular database ** connection. See the [sqlite3_file_control()] documentation for ** additional information. ** ** ^(The [SQLITE_FCNTL_SYNC_OMITTED] opcode is generated internally by ** SQLite and sent to all VFSes in place of a call to the xSync method ** when the database connection has [PRAGMA synchronous] set to OFF.)^ ** Some specialized VFSes need this signal in order to operate correctly ** when [PRAGMA synchronous | PRAGMA synchronous=OFF] is set, but most ** VFSes do not need this signal and should silently ignore this opcode. ** Applications should not call [sqlite3_file_control()] with this ** opcode as doing so may disrupt the operation of the specialized VFSes ** that do require it. ** ** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic ** retry counts and intervals for certain disk I/O operations for the ** windows [VFS] in order to provide robustness in the presence of ** anti-virus programs. By default, the windows VFS will retry file read, ** file write, and file delete operations up to 10 times, with a delay ** of 25 milliseconds before the first retry and with the delay increasing ** by an additional 25 milliseconds with each subsequent retry. This ** opcode allows these two values (10 retries and 25 milliseconds of delay) ** to be adjusted. The values are changed for all database connections ** within the same process. The argument is a pointer to an array of two ** integers where the first integer i the new retry count and the second ** integer is the delay. If either integer is negative, then the setting ** is not changed but instead the prior value of that setting is written ** into the array entry, allowing the current retry settings to be ** interrogated. The zDbName parameter is ignored. ** ** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the ** persistent [WAL | Write AHead Log] setting. By default, the auxiliary ** write ahead log and shared memory files used for transaction control ** are automatically deleted when the latest connection to the database ** closes. Setting persistent WAL mode causes those files to persist after ** close. Persisting the files is useful when other processes that do not ** have write permission on the directory containing the database file want ** to read the database file, as the WAL and shared memory files must exist ** in order for the database to be readable. The fourth parameter to ** [sqlite3_file_control()] for this opcode should be a pointer to an integer. ** That integer is 0 to disable persistent WAL mode or 1 to enable persistent ** WAL mode. If the integer is -1, then it is overwritten with the current ** WAL persistence setting. ** ** ^The [SQLITE_FCNTL_POWERSAFE_OVERWRITE] opcode is used to set or query the ** persistent "powersafe-overwrite" or "PSOW" setting. The PSOW setting ** determines the [SQLITE_IOCAP_POWERSAFE_OVERWRITE] bit of the ** xDeviceCharacteristics methods. The fourth parameter to ** [sqlite3_file_control()] for this opcode should be a pointer to an integer. ** That integer is 0 to disable zero-damage mode or 1 to enable zero-damage ** mode. If the integer is -1, then it is overwritten with the current ** zero-damage mode setting. ** ** ^The [SQLITE_FCNTL_OVERWRITE] opcode is invoked by SQLite after opening ** a write transaction to indicate that, unless it is rolled back for some ** reason, the entire database file will be overwritten by the current ** transaction. This is used by VACUUM operations. ** ** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of ** all [VFSes] in the VFS stack. The names are of all VFS shims and the ** final bottom-level VFS are written into memory obtained from ** [sqlite3_malloc()] and the result is stored in the char* variable ** that the fourth parameter of [sqlite3_file_control()] points to. ** The caller is responsible for freeing the memory when done. As with ** all file-control actions, there is no guarantee that this will actually ** do anything. Callers should initialize the char* variable to a NULL ** pointer in case this file-control is not implemented. This file-control ** is intended for diagnostic use only. */ #define SQLITE_FCNTL_LOCKSTATE 1 #define SQLITE_GET_LOCKPROXYFILE 2 #define SQLITE_SET_LOCKPROXYFILE 3 #define SQLITE_LAST_ERRNO 4 #define SQLITE_FCNTL_SIZE_HINT 5 #define SQLITE_FCNTL_CHUNK_SIZE 6 #define SQLITE_FCNTL_FILE_POINTER 7 #define SQLITE_FCNTL_SYNC_OMITTED 8 #define SQLITE_FCNTL_WIN32_AV_RETRY 9 #define SQLITE_FCNTL_PERSIST_WAL 10 #define SQLITE_FCNTL_OVERWRITE 11 #define SQLITE_FCNTL_VFSNAME 12 #define SQLITE_FCNTL_POWERSAFE_OVERWRITE 13 /* ** CAPI3REF: Mutex Handle ** ** The mutex module within SQLite defines [sqlite3_mutex] to be an ** abstract type for a mutex object. The SQLite core never looks ** at the internal representation of an [sqlite3_mutex]. It only ** deals with pointers to the [sqlite3_mutex] object. ** ** Mutexes are created using [sqlite3_mutex_alloc()]. */ typedef struct sqlite3_mutex sqlite3_mutex; /* ** CAPI3REF: OS Interface Object ** ** An instance of the sqlite3_vfs object defines the interface between ** the SQLite core and the underlying operating system. The "vfs" ** in the name of the object stands for "virtual file system". See ** the [VFS | VFS documentation] for further information. ** ** The value of the iVersion field is initially 1 but may be larger in ** future versions of SQLite. Additional fields may be appended to this ** object when the iVersion value is increased. Note that the structure ** of the sqlite3_vfs object changes in the transaction between ** SQLite version 3.5.9 and 3.6.0 and yet the iVersion field was not ** modified. ** ** The szOsFile field is the size of the subclassed [sqlite3_file] ** structure used by this VFS. mxPathname is the maximum length of ** a pathname in this VFS. ** ** Registered sqlite3_vfs objects are kept on a linked list formed by ** the pNext pointer. The [sqlite3_vfs_register()] ** and [sqlite3_vfs_unregister()] interfaces manage this list ** in a thread-safe way. The [sqlite3_vfs_find()] interface ** searches the list. Neither the application code nor the VFS ** implementation should use the pNext pointer. ** ** The pNext field is the only field in the sqlite3_vfs ** structure that SQLite will ever modify. SQLite will only access ** or modify this field while holding a particular static mutex. ** The application should never modify anything within the sqlite3_vfs ** object once the object has been registered. ** ** The zName field holds the name of the VFS module. The name must ** be unique across all VFS modules. ** ** [[sqlite3_vfs.xOpen]] ** ^SQLite guarantees that the zFilename parameter to xOpen ** is either a NULL pointer or string obtained ** from xFullPathname() with an optional suffix added. ** ^If a suffix is added to the zFilename parameter, it will ** consist of a single "-" character followed by no more than ** 11 alphanumeric and/or "-" characters. ** ^SQLite further guarantees that ** the string will be valid and unchanged until xClose() is ** called. Because of the previous sentence, ** the [sqlite3_file] can safely store a pointer to the ** filename if it needs to remember the filename for some reason. ** If the zFilename parameter to xOpen is a NULL pointer then xOpen ** must invent its own temporary name for the file. ^Whenever the ** xFilename parameter is NULL it will also be the case that the ** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE]. ** ** The flags argument to xOpen() includes all bits set in ** the flags argument to [sqlite3_open_v2()]. Or if [sqlite3_open()] ** or [sqlite3_open16()] is used, then flags includes at least ** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]. ** If xOpen() opens a file read-only then it sets *pOutFlags to ** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set. ** ** ^(SQLite will also add one of the following flags to the xOpen() ** call, depending on the object being opened: ** **
      **
    • [SQLITE_OPEN_MAIN_DB] **
    • [SQLITE_OPEN_MAIN_JOURNAL] **
    • [SQLITE_OPEN_TEMP_DB] **
    • [SQLITE_OPEN_TEMP_JOURNAL] **
    • [SQLITE_OPEN_TRANSIENT_DB] **
    • [SQLITE_OPEN_SUBJOURNAL] **
    • [SQLITE_OPEN_MASTER_JOURNAL] **
    • [SQLITE_OPEN_WAL] **
    )^ ** ** The file I/O implementation can use the object type flags to ** change the way it deals with files. For example, an application ** that does not care about crash recovery or rollback might make ** the open of a journal file a no-op. Writes to this journal would ** also be no-ops, and any attempt to read the journal would return ** SQLITE_IOERR. Or the implementation might recognize that a database ** file will be doing page-aligned sector reads and writes in a random ** order and set up its I/O subsystem accordingly. ** ** SQLite might also add one of the following flags to the xOpen method: ** **
      **
    • [SQLITE_OPEN_DELETEONCLOSE] **
    • [SQLITE_OPEN_EXCLUSIVE] **
    ** ** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be ** deleted when it is closed. ^The [SQLITE_OPEN_DELETEONCLOSE] ** will be set for TEMP databases and their journals, transient ** databases, and subjournals. ** ** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction ** with the [SQLITE_OPEN_CREATE] flag, which are both directly ** analogous to the O_EXCL and O_CREAT flags of the POSIX open() ** API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the ** SQLITE_OPEN_CREATE, is used to indicate that file should always ** be created, and that it is an error if it already exists. ** It is not used to indicate the file should be opened ** for exclusive access. ** ** ^At least szOsFile bytes of memory are allocated by SQLite ** to hold the [sqlite3_file] structure passed as the third ** argument to xOpen. The xOpen method does not have to ** allocate the structure; it should just fill it in. Note that ** the xOpen method must set the sqlite3_file.pMethods to either ** a valid [sqlite3_io_methods] object or to NULL. xOpen must do ** this even if the open fails. SQLite expects that the sqlite3_file.pMethods ** element will be valid after xOpen returns regardless of the success ** or failure of the xOpen call. ** ** [[sqlite3_vfs.xAccess]] ** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS] ** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to ** test whether a file is readable and writable, or [SQLITE_ACCESS_READ] ** to test whether a file is at least readable. The file can be a ** directory. ** ** ^SQLite will always allocate at least mxPathname+1 bytes for the ** output buffer xFullPathname. The exact size of the output buffer ** is also passed as a parameter to both methods. If the output buffer ** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is ** handled as a fatal error by SQLite, vfs implementations should endeavor ** to prevent this by setting mxPathname to a sufficiently large value. ** ** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64() ** interfaces are not strictly a part of the filesystem, but they are ** included in the VFS structure for completeness. ** The xRandomness() function attempts to return nBytes bytes ** of good-quality randomness into zOut. The return value is ** the actual number of bytes of randomness obtained. ** The xSleep() method causes the calling thread to sleep for at ** least the number of microseconds given. ^The xCurrentTime() ** method returns a Julian Day Number for the current date and time as ** a floating point value. ** ^The xCurrentTimeInt64() method returns, as an integer, the Julian ** Day Number multiplied by 86400000 (the number of milliseconds in ** a 24-hour day). ** ^SQLite will use the xCurrentTimeInt64() method to get the current ** date and time if that method is available (if iVersion is 2 or ** greater and the function pointer is not NULL) and will fall back ** to xCurrentTime() if xCurrentTimeInt64() is unavailable. ** ** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces ** are not used by the SQLite core. These optional interfaces are provided ** by some VFSes to facilitate testing of the VFS code. By overriding ** system calls with functions under its control, a test program can ** simulate faults and error conditions that would otherwise be difficult ** or impossible to induce. The set of system calls that can be overridden ** varies from one VFS to another, and from one version of the same VFS to the ** next. Applications that use these interfaces must be prepared for any ** or all of these interfaces to be NULL or for their behavior to change ** from one release to the next. Applications must not attempt to access ** any of these methods if the iVersion of the VFS is less than 3. */ typedef struct sqlite3_vfs sqlite3_vfs; typedef void (*sqlite3_syscall_ptr)(void); struct sqlite3_vfs { int iVersion; /* Structure version number (currently 3) */ int szOsFile; /* Size of subclassed sqlite3_file */ int mxPathname; /* Maximum file pathname length */ sqlite3_vfs *pNext; /* Next registered VFS */ const char *zName; /* Name of this virtual file system */ void *pAppData; /* Pointer to application-specific data */ int (*xOpen)(sqlite3_vfs*, const char *zName, sqlite3_file*, int flags, int *pOutFlags); int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir); int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut); int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut); void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename); void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg); void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void); void (*xDlClose)(sqlite3_vfs*, void*); int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut); int (*xSleep)(sqlite3_vfs*, int microseconds); int (*xCurrentTime)(sqlite3_vfs*, double*); int (*xGetLastError)(sqlite3_vfs*, int, char *); /* ** The methods above are in version 1 of the sqlite_vfs object ** definition. Those that follow are added in version 2 or later */ int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*); /* ** The methods above are in versions 1 and 2 of the sqlite_vfs object. ** Those below are for version 3 and greater. */ int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr); sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName); const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName); /* ** The methods above are in versions 1 through 3 of the sqlite_vfs object. ** New fields may be appended in figure versions. The iVersion ** value will increment whenever this happens. */ }; /* ** CAPI3REF: Flags for the xAccess VFS method ** ** These integer constants can be used as the third parameter to ** the xAccess method of an [sqlite3_vfs] object. They determine ** what kind of permissions the xAccess method is looking for. ** With SQLITE_ACCESS_EXISTS, the xAccess method ** simply checks whether the file exists. ** With SQLITE_ACCESS_READWRITE, the xAccess method ** checks whether the named directory is both readable and writable ** (in other words, if files can be added, removed, and renamed within ** the directory). ** The SQLITE_ACCESS_READWRITE constant is currently used only by the ** [temp_store_directory pragma], though this could change in a future ** release of SQLite. ** With SQLITE_ACCESS_READ, the xAccess method ** checks whether the file is readable. The SQLITE_ACCESS_READ constant is ** currently unused, though it might be used in a future release of ** SQLite. */ #define SQLITE_ACCESS_EXISTS 0 #define SQLITE_ACCESS_READWRITE 1 /* Used by PRAGMA temp_store_directory */ #define SQLITE_ACCESS_READ 2 /* Unused */ /* ** CAPI3REF: Flags for the xShmLock VFS method ** ** These integer constants define the various locking operations ** allowed by the xShmLock method of [sqlite3_io_methods]. The ** following are the only legal combinations of flags to the ** xShmLock method: ** **
      **
    • SQLITE_SHM_LOCK | SQLITE_SHM_SHARED **
    • SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE **
    • SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED **
    • SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE **
    ** ** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as ** was given no the corresponding lock. ** ** The xShmLock method can transition between unlocked and SHARED or ** between unlocked and EXCLUSIVE. It cannot transition between SHARED ** and EXCLUSIVE. */ #define SQLITE_SHM_UNLOCK 1 #define SQLITE_SHM_LOCK 2 #define SQLITE_SHM_SHARED 4 #define SQLITE_SHM_EXCLUSIVE 8 /* ** CAPI3REF: Maximum xShmLock index ** ** The xShmLock method on [sqlite3_io_methods] may use values ** between 0 and this upper bound as its "offset" argument. ** The SQLite core will never attempt to acquire or release a ** lock outside of this range */ #define SQLITE_SHM_NLOCK 8 /* ** CAPI3REF: Initialize The SQLite Library ** ** ^The sqlite3_initialize() routine initializes the ** SQLite library. ^The sqlite3_shutdown() routine ** deallocates any resources that were allocated by sqlite3_initialize(). ** These routines are designed to aid in process initialization and ** shutdown on embedded systems. Workstation applications using ** SQLite normally do not need to invoke either of these routines. ** ** A call to sqlite3_initialize() is an "effective" call if it is ** the first time sqlite3_initialize() is invoked during the lifetime of ** the process, or if it is the first time sqlite3_initialize() is invoked ** following a call to sqlite3_shutdown(). ^(Only an effective call ** of sqlite3_initialize() does any initialization. All other calls ** are harmless no-ops.)^ ** ** A call to sqlite3_shutdown() is an "effective" call if it is the first ** call to sqlite3_shutdown() since the last sqlite3_initialize(). ^(Only ** an effective call to sqlite3_shutdown() does any deinitialization. ** All other valid calls to sqlite3_shutdown() are harmless no-ops.)^ ** ** The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown() ** is not. The sqlite3_shutdown() interface must only be called from a ** single thread. All open [database connections] must be closed and all ** other SQLite resources must be deallocated prior to invoking ** sqlite3_shutdown(). ** ** Among other things, ^sqlite3_initialize() will invoke ** sqlite3_os_init(). Similarly, ^sqlite3_shutdown() ** will invoke sqlite3_os_end(). ** ** ^The sqlite3_initialize() routine returns [SQLITE_OK] on success. ** ^If for some reason, sqlite3_initialize() is unable to initialize ** the library (perhaps it is unable to allocate a needed resource such ** as a mutex) it returns an [error code] other than [SQLITE_OK]. ** ** ^The sqlite3_initialize() routine is called internally by many other ** SQLite interfaces so that an application usually does not need to ** invoke sqlite3_initialize() directly. For example, [sqlite3_open()] ** calls sqlite3_initialize() so the SQLite library will be automatically ** initialized when [sqlite3_open()] is called if it has not be initialized ** already. ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT] ** compile-time option, then the automatic calls to sqlite3_initialize() ** are omitted and the application must call sqlite3_initialize() directly ** prior to using any other SQLite interface. For maximum portability, ** it is recommended that applications always invoke sqlite3_initialize() ** directly prior to using any other SQLite interface. Future releases ** of SQLite may require this. In other words, the behavior exhibited ** when SQLite is compiled with [SQLITE_OMIT_AUTOINIT] might become the ** default behavior in some future release of SQLite. ** ** The sqlite3_os_init() routine does operating-system specific ** initialization of the SQLite library. The sqlite3_os_end() ** routine undoes the effect of sqlite3_os_init(). Typical tasks ** performed by these routines include allocation or deallocation ** of static resources, initialization of global variables, ** setting up a default [sqlite3_vfs] module, or setting up ** a default configuration using [sqlite3_config()]. ** ** The application should never invoke either sqlite3_os_init() ** or sqlite3_os_end() directly. The application should only invoke ** sqlite3_initialize() and sqlite3_shutdown(). The sqlite3_os_init() ** interface is called automatically by sqlite3_initialize() and ** sqlite3_os_end() is called by sqlite3_shutdown(). Appropriate ** implementations for sqlite3_os_init() and sqlite3_os_end() ** are built into SQLite when it is compiled for Unix, Windows, or OS/2. ** When [custom builds | built for other platforms] ** (using the [SQLITE_OS_OTHER=1] compile-time ** option) the application must supply a suitable implementation for ** sqlite3_os_init() and sqlite3_os_end(). An application-supplied ** implementation of sqlite3_os_init() or sqlite3_os_end() ** must return [SQLITE_OK] on success and some other [error code] upon ** failure. */ SQLITE_API int sqlite3_initialize(void); SQLITE_API int sqlite3_shutdown(void); SQLITE_API int sqlite3_os_init(void); SQLITE_API int sqlite3_os_end(void); /* ** CAPI3REF: Configuring The SQLite Library ** ** The sqlite3_config() interface is used to make global configuration ** changes to SQLite in order to tune SQLite to the specific needs of ** the application. The default configuration is recommended for most ** applications and so this routine is usually not necessary. It is ** provided to support rare applications with unusual needs. ** ** The sqlite3_config() interface is not threadsafe. The application ** must insure that no other SQLite interfaces are invoked by other ** threads while sqlite3_config() is running. Furthermore, sqlite3_config() ** may only be invoked prior to library initialization using ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()]. ** ^If sqlite3_config() is called after [sqlite3_initialize()] and before ** [sqlite3_shutdown()] then it will return SQLITE_MISUSE. ** Note, however, that ^sqlite3_config() can be called as part of the ** implementation of an application-defined [sqlite3_os_init()]. ** ** The first argument to sqlite3_config() is an integer ** [configuration option] that determines ** what property of SQLite is to be configured. Subsequent arguments ** vary depending on the [configuration option] ** in the first argument. ** ** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK]. ** ^If the option is unknown or SQLite is unable to set the option ** then this routine returns a non-zero [error code]. */ SQLITE_API int sqlite3_config(int, ...); /* ** CAPI3REF: Configure database connections ** ** The sqlite3_db_config() interface is used to make configuration ** changes to a [database connection]. The interface is similar to ** [sqlite3_config()] except that the changes apply to a single ** [database connection] (specified in the first argument). ** ** The second argument to sqlite3_db_config(D,V,...) is the ** [SQLITE_DBCONFIG_LOOKASIDE | configuration verb] - an integer code ** that indicates what aspect of the [database connection] is being configured. ** Subsequent arguments vary depending on the configuration verb. ** ** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if ** the call is considered successful. */ SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...); /* ** CAPI3REF: Memory Allocation Routines ** ** An instance of this object defines the interface between SQLite ** and low-level memory allocation routines. ** ** This object is used in only one place in the SQLite interface. ** A pointer to an instance of this object is the argument to ** [sqlite3_config()] when the configuration option is ** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC]. ** By creating an instance of this object ** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC]) ** during configuration, an application can specify an alternative ** memory allocation subsystem for SQLite to use for all of its ** dynamic memory needs. ** ** Note that SQLite comes with several [built-in memory allocators] ** that are perfectly adequate for the overwhelming majority of applications ** and that this object is only useful to a tiny minority of applications ** with specialized memory allocation requirements. This object is ** also used during testing of SQLite in order to specify an alternative ** memory allocator that simulates memory out-of-memory conditions in ** order to verify that SQLite recovers gracefully from such ** conditions. ** ** The xMalloc, xRealloc, and xFree methods must work like the ** malloc(), realloc() and free() functions from the standard C library. ** ^SQLite guarantees that the second argument to ** xRealloc is always a value returned by a prior call to xRoundup. ** ** xSize should return the allocated size of a memory allocation ** previously obtained from xMalloc or xRealloc. The allocated size ** is always at least as big as the requested size but may be larger. ** ** The xRoundup method returns what would be the allocated size of ** a memory allocation given a particular requested size. Most memory ** allocators round up memory allocations at least to the next multiple ** of 8. Some allocators round up to a larger multiple or to a power of 2. ** Every memory allocation request coming in through [sqlite3_malloc()] ** or [sqlite3_realloc()] first calls xRoundup. If xRoundup returns 0, ** that causes the corresponding memory allocation to fail. ** ** The xInit method initializes the memory allocator. (For example, ** it might allocate any require mutexes or initialize internal data ** structures. The xShutdown method is invoked (indirectly) by ** [sqlite3_shutdown()] and should deallocate any resources acquired ** by xInit. The pAppData pointer is used as the only parameter to ** xInit and xShutdown. ** ** SQLite holds the [SQLITE_MUTEX_STATIC_MASTER] mutex when it invokes ** the xInit method, so the xInit method need not be threadsafe. The ** xShutdown method is only called from [sqlite3_shutdown()] so it does ** not need to be threadsafe either. For all other methods, SQLite ** holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the ** [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which ** it is by default) and so the methods are automatically serialized. ** However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other ** methods must be threadsafe or else make their own arrangements for ** serialization. ** ** SQLite will never invoke xInit() more than once without an intervening ** call to xShutdown(). */ typedef struct sqlite3_mem_methods sqlite3_mem_methods; struct sqlite3_mem_methods { void *(*xMalloc)(int); /* Memory allocation function */ void (*xFree)(void*); /* Free a prior allocation */ void *(*xRealloc)(void*,int); /* Resize an allocation */ int (*xSize)(void*); /* Return the size of an allocation */ int (*xRoundup)(int); /* Round up request size to allocation size */ int (*xInit)(void*); /* Initialize the memory allocator */ void (*xShutdown)(void*); /* Deinitialize the memory allocator */ void *pAppData; /* Argument to xInit() and xShutdown() */ }; /* ** CAPI3REF: Configuration Options ** KEYWORDS: {configuration option} ** ** These constants are the available integer configuration options that ** can be passed as the first argument to the [sqlite3_config()] interface. ** ** New configuration options may be added in future releases of SQLite. ** Existing configuration options might be discontinued. Applications ** should check the return code from [sqlite3_config()] to make sure that ** the call worked. The [sqlite3_config()] interface will return a ** non-zero [error code] if a discontinued or unsupported configuration option ** is invoked. ** **
    ** [[SQLITE_CONFIG_SINGLETHREAD]]
    SQLITE_CONFIG_SINGLETHREAD
    **
    There are no arguments to this option. ^This option sets the ** [threading mode] to Single-thread. In other words, it disables ** all mutexing and puts SQLite into a mode where it can only be used ** by a single thread. ^If SQLite is compiled with ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then ** it is not possible to change the [threading mode] from its default ** value of Single-thread and so [sqlite3_config()] will return ** [SQLITE_ERROR] if called with the SQLITE_CONFIG_SINGLETHREAD ** configuration option.
    ** ** [[SQLITE_CONFIG_MULTITHREAD]]
    SQLITE_CONFIG_MULTITHREAD
    **
    There are no arguments to this option. ^This option sets the ** [threading mode] to Multi-thread. In other words, it disables ** mutexing on [database connection] and [prepared statement] objects. ** The application is responsible for serializing access to ** [database connections] and [prepared statements]. But other mutexes ** are enabled so that SQLite will be safe to use in a multi-threaded ** environment as long as no two threads attempt to use the same ** [database connection] at the same time. ^If SQLite is compiled with ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then ** it is not possible to set the Multi-thread [threading mode] and ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the ** SQLITE_CONFIG_MULTITHREAD configuration option.
    ** ** [[SQLITE_CONFIG_SERIALIZED]]
    SQLITE_CONFIG_SERIALIZED
    **
    There are no arguments to this option. ^This option sets the ** [threading mode] to Serialized. In other words, this option enables ** all mutexes including the recursive ** mutexes on [database connection] and [prepared statement] objects. ** In this mode (which is the default when SQLite is compiled with ** [SQLITE_THREADSAFE=1]) the SQLite library will itself serialize access ** to [database connections] and [prepared statements] so that the ** application is free to use the same [database connection] or the ** same [prepared statement] in different threads at the same time. ** ^If SQLite is compiled with ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then ** it is not possible to set the Serialized [threading mode] and ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the ** SQLITE_CONFIG_SERIALIZED configuration option.
    ** ** [[SQLITE_CONFIG_MALLOC]]
    SQLITE_CONFIG_MALLOC
    **
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mem_methods] structure. The argument specifies ** alternative low-level memory allocation routines to be used in place of ** the memory allocation routines built into SQLite.)^ ^SQLite makes ** its own private copy of the content of the [sqlite3_mem_methods] structure ** before the [sqlite3_config()] call returns.
    ** ** [[SQLITE_CONFIG_GETMALLOC]]
    SQLITE_CONFIG_GETMALLOC
    **
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods] ** structure is filled with the currently defined memory allocation routines.)^ ** This option can be used to overload the default memory allocation ** routines with a wrapper that simulations memory allocation failure or ** tracks memory usage, for example.
    ** ** [[SQLITE_CONFIG_MEMSTATUS]]
    SQLITE_CONFIG_MEMSTATUS
    **
    ^This option takes single argument of type int, interpreted as a ** boolean, which enables or disables the collection of memory allocation ** statistics. ^(When memory allocation statistics are disabled, the ** following SQLite interfaces become non-operational: **
      **
    • [sqlite3_memory_used()] **
    • [sqlite3_memory_highwater()] **
    • [sqlite3_soft_heap_limit64()] **
    • [sqlite3_status()] **
    )^ ** ^Memory allocation statistics are enabled by default unless SQLite is ** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory ** allocation statistics are disabled by default. **
    ** ** [[SQLITE_CONFIG_SCRATCH]]
    SQLITE_CONFIG_SCRATCH
    **
    ^This option specifies a static memory buffer that SQLite can use for ** scratch memory. There are three arguments: A pointer an 8-byte ** aligned memory buffer from which the scratch allocations will be ** drawn, the size of each scratch allocation (sz), ** and the maximum number of scratch allocations (N). The sz ** argument must be a multiple of 16. ** The first argument must be a pointer to an 8-byte aligned buffer ** of at least sz*N bytes of memory. ** ^SQLite will use no more than two scratch buffers per thread. So ** N should be set to twice the expected maximum number of threads. ** ^SQLite will never require a scratch buffer that is more than 6 ** times the database page size. ^If SQLite needs needs additional ** scratch memory beyond what is provided by this configuration option, then ** [sqlite3_malloc()] will be used to obtain the memory needed.
    ** ** [[SQLITE_CONFIG_PAGECACHE]]
    SQLITE_CONFIG_PAGECACHE
    **
    ^This option specifies a static memory buffer that SQLite can use for ** the database page cache with the default page cache implementation. ** This configuration should not be used if an application-define page ** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option. ** There are three arguments to this option: A pointer to 8-byte aligned ** memory, the size of each page buffer (sz), and the number of pages (N). ** The sz argument should be the size of the largest database page ** (a power of two between 512 and 32768) plus a little extra for each ** page header. ^The page header size is 20 to 40 bytes depending on ** the host architecture. ^It is harmless, apart from the wasted memory, ** to make sz a little too large. The first ** argument should point to an allocation of at least sz*N bytes of memory. ** ^SQLite will use the memory provided by the first argument to satisfy its ** memory needs for the first N pages that it adds to cache. ^If additional ** page cache memory is needed beyond what is provided by this option, then ** SQLite goes to [sqlite3_malloc()] for the additional storage space. ** The pointer in the first argument must ** be aligned to an 8-byte boundary or subsequent behavior of SQLite ** will be undefined.
    ** ** [[SQLITE_CONFIG_HEAP]]
    SQLITE_CONFIG_HEAP
    **
    ^This option specifies a static memory buffer that SQLite will use ** for all of its dynamic memory allocation needs beyond those provided ** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE]. ** There are three arguments: An 8-byte aligned pointer to the memory, ** the number of bytes in the memory buffer, and the minimum allocation size. ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts ** to using its default memory allocator (the system malloc() implementation), ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the ** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or ** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory ** allocator is engaged to handle all of SQLites memory allocation needs. ** The first pointer (the memory pointer) must be aligned to an 8-byte ** boundary or subsequent behavior of SQLite will be undefined. ** The minimum allocation size is capped at 2**12. Reasonable values ** for the minimum allocation size are 2**5 through 2**8.
    ** ** [[SQLITE_CONFIG_MUTEX]]
    SQLITE_CONFIG_MUTEX
    **
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mutex_methods] structure. The argument specifies ** alternative low-level mutex routines to be used in place ** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the ** content of the [sqlite3_mutex_methods] structure before the call to ** [sqlite3_config()] returns. ^If SQLite is compiled with ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then ** the entire mutexing subsystem is omitted from the build and hence calls to ** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will ** return [SQLITE_ERROR].
    ** ** [[SQLITE_CONFIG_GETMUTEX]]
    SQLITE_CONFIG_GETMUTEX
    **
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mutex_methods] structure. The ** [sqlite3_mutex_methods] ** structure is filled with the currently defined mutex routines.)^ ** This option can be used to overload the default mutex allocation ** routines with a wrapper used to track mutex usage for performance ** profiling or testing, for example. ^If SQLite is compiled with ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then ** the entire mutexing subsystem is omitted from the build and hence calls to ** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will ** return [SQLITE_ERROR].
    ** ** [[SQLITE_CONFIG_LOOKASIDE]]
    SQLITE_CONFIG_LOOKASIDE
    **
    ^(This option takes two arguments that determine the default ** memory allocation for the lookaside memory allocator on each ** [database connection]. The first argument is the ** size of each lookaside buffer slot and the second is the number of ** slots allocated to each database connection.)^ ^(This option sets the ** default lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE] ** verb to [sqlite3_db_config()] can be used to change the lookaside ** configuration on individual connections.)^
    ** ** [[SQLITE_CONFIG_PCACHE2]]
    SQLITE_CONFIG_PCACHE2
    **
    ^(This option takes a single argument which is a pointer to ** an [sqlite3_pcache_methods2] object. This object specifies the interface ** to a custom page cache implementation.)^ ^SQLite makes a copy of the ** object and uses it for page cache memory allocations.
    ** ** [[SQLITE_CONFIG_GETPCACHE2]]
    SQLITE_CONFIG_GETPCACHE2
    **
    ^(This option takes a single argument which is a pointer to an ** [sqlite3_pcache_methods2] object. SQLite copies of the current ** page cache implementation into that object.)^
    ** ** [[SQLITE_CONFIG_LOG]]
    SQLITE_CONFIG_LOG
    **
    ^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a ** function with a call signature of void(*)(void*,int,const char*), ** and a pointer to void. ^If the function pointer is not NULL, it is ** invoked by [sqlite3_log()] to process each logging event. ^If the ** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op. ** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is ** passed through as the first parameter to the application-defined logger ** function whenever that function is invoked. ^The second parameter to ** the logger function is a copy of the first parameter to the corresponding ** [sqlite3_log()] call and is intended to be a [result code] or an ** [extended result code]. ^The third parameter passed to the logger is ** log message after formatting via [sqlite3_snprintf()]. ** The SQLite logging interface is not reentrant; the logger function ** supplied by the application must not invoke any SQLite interface. ** In a multi-threaded application, the application-defined logger ** function must be threadsafe.
    ** ** [[SQLITE_CONFIG_URI]]
    SQLITE_CONFIG_URI **
    This option takes a single argument of type int. If non-zero, then ** URI handling is globally enabled. If the parameter is zero, then URI handling ** is globally disabled. If URI handling is globally enabled, all filenames ** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or ** specified as part of [ATTACH] commands are interpreted as URIs, regardless ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database ** connection is opened. If it is globally disabled, filenames are ** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the ** database connection is opened. By default, URI handling is globally ** disabled. The default value may be changed by compiling with the ** [SQLITE_USE_URI] symbol defined. ** ** [[SQLITE_CONFIG_PCACHE]] [[SQLITE_CONFIG_GETPCACHE]] **
    SQLITE_CONFIG_PCACHE and SQLITE_CONFNIG_GETPCACHE **
    These options are obsolete and should not be used by new code. ** They are retained for backwards compatibility but are now no-ops. **
    */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ #define SQLITE_CONFIG_SERIALIZED 3 /* nil */ #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ #define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */ #define SQLITE_CONFIG_SCRATCH 6 /* void*, int sz, int N */ #define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */ #define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ #define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ #define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ #define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ #define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ #define SQLITE_CONFIG_PCACHE 14 /* no-op */ #define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ #define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ #define SQLITE_CONFIG_URI 17 /* int */ #define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ #define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ /* ** CAPI3REF: Database Connection Configuration Options ** ** These constants are the available integer configuration options that ** can be passed as the second argument to the [sqlite3_db_config()] interface. ** ** New configuration options may be added in future releases of SQLite. ** Existing configuration options might be discontinued. Applications ** should check the return code from [sqlite3_db_config()] to make sure that ** the call worked. ^The [sqlite3_db_config()] interface will return a ** non-zero [error code] if a discontinued or unsupported configuration option ** is invoked. ** **
    **
    SQLITE_DBCONFIG_LOOKASIDE
    **
    ^This option takes three additional arguments that determine the ** [lookaside memory allocator] configuration for the [database connection]. ** ^The first argument (the third parameter to [sqlite3_db_config()] is a ** pointer to a memory buffer to use for lookaside memory. ** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb ** may be NULL in which case SQLite will allocate the ** lookaside buffer itself using [sqlite3_malloc()]. ^The second argument is the ** size of each lookaside buffer slot. ^The third argument is the number of ** slots. The size of the buffer in the first argument must be greater than ** or equal to the product of the second and third arguments. The buffer ** must be aligned to an 8-byte boundary. ^If the second argument to ** SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally ** rounded down to the next smaller multiple of 8. ^(The lookaside memory ** configuration for a database connection can only be changed when that ** connection is not currently using lookaside memory, or in other words ** when the "current value" returned by ** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero. ** Any attempt to change the lookaside memory configuration when lookaside ** memory is in use leaves the configuration unchanged and returns ** [SQLITE_BUSY].)^
    ** **
    SQLITE_DBCONFIG_ENABLE_FKEY
    **
    ^This option is used to enable or disable the enforcement of ** [foreign key constraints]. There should be two additional arguments. ** The first argument is an integer which is 0 to disable FK enforcement, ** positive to enable FK enforcement or negative to leave FK enforcement ** unchanged. The second parameter is a pointer to an integer into which ** is written 0 or 1 to indicate whether FK enforcement is off or on ** following this call. The second parameter may be a NULL pointer, in ** which case the FK enforcement setting is not reported back.
    ** **
    SQLITE_DBCONFIG_ENABLE_TRIGGER
    **
    ^This option is used to enable or disable [CREATE TRIGGER | triggers]. ** There should be two additional arguments. ** The first argument is an integer which is 0 to disable triggers, ** positive to enable triggers or negative to leave the setting unchanged. ** The second parameter is a pointer to an integer into which ** is written 0 or 1 to indicate whether triggers are disabled or enabled ** following this call. The second parameter may be a NULL pointer, in ** which case the trigger setting is not reported back.
    ** **
    */ #define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */ #define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */ /* ** CAPI3REF: Enable Or Disable Extended Result Codes ** ** ^The sqlite3_extended_result_codes() routine enables or disables the ** [extended result codes] feature of SQLite. ^The extended result ** codes are disabled by default for historical compatibility. */ SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); /* ** CAPI3REF: Last Insert Rowid ** ** ^Each entry in an SQLite table has a unique 64-bit signed ** integer key called the [ROWID | "rowid"]. ^The rowid is always available ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those ** names are not also used by explicitly declared columns. ^If ** the table has a column of type [INTEGER PRIMARY KEY] then that column ** is another alias for the rowid. ** ** ^This routine returns the [rowid] of the most recent ** successful [INSERT] into the database from the [database connection] ** in the first argument. ^As of SQLite version 3.7.7, this routines ** records the last insert rowid of both ordinary tables and [virtual tables]. ** ^If no successful [INSERT]s ** have ever occurred on that database connection, zero is returned. ** ** ^(If an [INSERT] occurs within a trigger or within a [virtual table] ** method, then this routine will return the [rowid] of the inserted ** row as long as the trigger or virtual table method is running. ** But once the trigger or virtual table method ends, the value returned ** by this routine reverts to what it was before the trigger or virtual ** table method began.)^ ** ** ^An [INSERT] that fails due to a constraint violation is not a ** successful [INSERT] and does not change the value returned by this ** routine. ^Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK, ** and INSERT OR ABORT make no changes to the return value of this ** routine when their insertion fails. ^(When INSERT OR REPLACE ** encounters a constraint violation, it does not fail. The ** INSERT continues to completion after deleting rows that caused ** the constraint problem so INSERT OR REPLACE will always change ** the return value of this interface.)^ ** ** ^For the purposes of this routine, an [INSERT] is considered to ** be successful even if it is subsequently rolled back. ** ** This function is accessible to SQL statements via the ** [last_insert_rowid() SQL function]. ** ** If a separate thread performs a new [INSERT] on the same ** database connection while the [sqlite3_last_insert_rowid()] ** function is running and thus changes the last insert [rowid], ** then the value returned by [sqlite3_last_insert_rowid()] is ** unpredictable and might not equal either the old or the new ** last insert [rowid]. */ SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); /* ** CAPI3REF: Count The Number Of Rows Modified ** ** ^This function returns the number of database rows that were changed ** or inserted or deleted by the most recently completed SQL statement ** on the [database connection] specified by the first parameter. ** ^(Only changes that are directly specified by the [INSERT], [UPDATE], ** or [DELETE] statement are counted. Auxiliary changes caused by ** triggers or [foreign key actions] are not counted.)^ Use the ** [sqlite3_total_changes()] function to find the total number of changes ** including changes caused by triggers and foreign key actions. ** ** ^Changes to a view that are simulated by an [INSTEAD OF trigger] ** are not counted. Only real table changes are counted. ** ** ^(A "row change" is a change to a single row of a single table ** caused by an INSERT, DELETE, or UPDATE statement. Rows that ** are changed as side effects of [REPLACE] constraint resolution, ** rollback, ABORT processing, [DROP TABLE], or by any other ** mechanisms do not count as direct row changes.)^ ** ** A "trigger context" is a scope of execution that begins and ** ends with the script of a [CREATE TRIGGER | trigger]. ** Most SQL statements are ** evaluated outside of any trigger. This is the "top level" ** trigger context. If a trigger fires from the top level, a ** new trigger context is entered for the duration of that one ** trigger. Subtriggers create subcontexts for their duration. ** ** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does ** not create a new trigger context. ** ** ^This function returns the number of direct row changes in the ** most recent INSERT, UPDATE, or DELETE statement within the same ** trigger context. ** ** ^Thus, when called from the top level, this function returns the ** number of changes in the most recent INSERT, UPDATE, or DELETE ** that also occurred at the top level. ^(Within the body of a trigger, ** the sqlite3_changes() interface can be called to find the number of ** changes in the most recently completed INSERT, UPDATE, or DELETE ** statement within the body of the same trigger. ** However, the number returned does not include changes ** caused by subtriggers since those have their own context.)^ ** ** See also the [sqlite3_total_changes()] interface, the ** [count_changes pragma], and the [changes() SQL function]. ** ** If a separate thread makes changes on the same database connection ** while [sqlite3_changes()] is running then the value returned ** is unpredictable and not meaningful. */ SQLITE_API int sqlite3_changes(sqlite3*); /* ** CAPI3REF: Total Number Of Rows Modified ** ** ^This function returns the number of row changes caused by [INSERT], ** [UPDATE] or [DELETE] statements since the [database connection] was opened. ** ^(The count returned by sqlite3_total_changes() includes all changes ** from all [CREATE TRIGGER | trigger] contexts and changes made by ** [foreign key actions]. However, ** the count does not include changes used to implement [REPLACE] constraints, ** do rollbacks or ABORT processing, or [DROP TABLE] processing. The ** count does not include rows of views that fire an [INSTEAD OF trigger], ** though if the INSTEAD OF trigger makes changes of its own, those changes ** are counted.)^ ** ^The sqlite3_total_changes() function counts the changes as soon as ** the statement that makes them is completed (when the statement handle ** is passed to [sqlite3_reset()] or [sqlite3_finalize()]). ** ** See also the [sqlite3_changes()] interface, the ** [count_changes pragma], and the [total_changes() SQL function]. ** ** If a separate thread makes changes on the same database connection ** while [sqlite3_total_changes()] is running then the value ** returned is unpredictable and not meaningful. */ SQLITE_API int sqlite3_total_changes(sqlite3*); /* ** CAPI3REF: Interrupt A Long-Running Query ** ** ^This function causes any pending database operation to abort and ** return at its earliest opportunity. This routine is typically ** called in response to a user action such as pressing "Cancel" ** or Ctrl-C where the user wants a long query operation to halt ** immediately. ** ** ^It is safe to call this routine from a thread different from the ** thread that is currently running the database operation. But it ** is not safe to call this routine with a [database connection] that ** is closed or might close before sqlite3_interrupt() returns. ** ** ^If an SQL operation is very nearly finished at the time when ** sqlite3_interrupt() is called, then it might not have an opportunity ** to be interrupted and might continue to completion. ** ** ^An SQL operation that is interrupted will return [SQLITE_INTERRUPT]. ** ^If the interrupted SQL operation is an INSERT, UPDATE, or DELETE ** that is inside an explicit transaction, then the entire transaction ** will be rolled back automatically. ** ** ^The sqlite3_interrupt(D) call is in effect until all currently running ** SQL statements on [database connection] D complete. ^Any new SQL statements ** that are started after the sqlite3_interrupt() call and before the ** running statements reaches zero are interrupted as if they had been ** running prior to the sqlite3_interrupt() call. ^New SQL statements ** that are started after the running statement count reaches zero are ** not effected by the sqlite3_interrupt(). ** ^A call to sqlite3_interrupt(D) that occurs when there are no running ** SQL statements is a no-op and has no effect on SQL statements ** that are started after the sqlite3_interrupt() call returns. ** ** If the database connection closes while [sqlite3_interrupt()] ** is running then bad things will likely happen. */ SQLITE_API void sqlite3_interrupt(sqlite3*); /* ** CAPI3REF: Determine If An SQL Statement Is Complete ** ** These routines are useful during command-line input to determine if the ** currently entered text seems to form a complete SQL statement or ** if additional input is needed before sending the text into ** SQLite for parsing. ^These routines return 1 if the input string ** appears to be a complete SQL statement. ^A statement is judged to be ** complete if it ends with a semicolon token and is not a prefix of a ** well-formed CREATE TRIGGER statement. ^Semicolons that are embedded within ** string literals or quoted identifier names or comments are not ** independent tokens (they are part of the token in which they are ** embedded) and thus do not count as a statement terminator. ^Whitespace ** and comments that follow the final semicolon are ignored. ** ** ^These routines return 0 if the statement is incomplete. ^If a ** memory allocation fails, then SQLITE_NOMEM is returned. ** ** ^These routines do not parse the SQL statements thus ** will not detect syntactically incorrect SQL. ** ** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior ** to invoking sqlite3_complete16() then sqlite3_initialize() is invoked ** automatically by sqlite3_complete16(). If that initialization fails, ** then the return value from sqlite3_complete16() will be non-zero ** regardless of whether or not the input SQL is complete.)^ ** ** The input to [sqlite3_complete()] must be a zero-terminated ** UTF-8 string. ** ** The input to [sqlite3_complete16()] must be a zero-terminated ** UTF-16 string in native byte order. */ SQLITE_API int sqlite3_complete(const char *sql); SQLITE_API int sqlite3_complete16(const void *sql); /* ** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors ** ** ^This routine sets a callback function that might be invoked whenever ** an attempt is made to open a database table that another thread ** or process has locked. ** ** ^If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] ** is returned immediately upon encountering the lock. ^If the busy callback ** is not NULL, then the callback might be invoked with two arguments. ** ** ^The first argument to the busy handler is a copy of the void* pointer which ** is the third argument to sqlite3_busy_handler(). ^The second argument to ** the busy handler callback is the number of times that the busy handler has ** been invoked for this locking event. ^If the ** busy callback returns 0, then no additional attempts are made to ** access the database and [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] is returned. ** ^If the callback returns non-zero, then another attempt ** is made to open the database for reading and the cycle repeats. ** ** The presence of a busy handler does not guarantee that it will be invoked ** when there is lock contention. ^If SQLite determines that invoking the busy ** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY] ** or [SQLITE_IOERR_BLOCKED] instead of invoking the busy handler. ** Consider a scenario where one process is holding a read lock that ** it is trying to promote to a reserved lock and ** a second process is holding a reserved lock that it is trying ** to promote to an exclusive lock. The first process cannot proceed ** because it is blocked by the second and the second process cannot ** proceed because it is blocked by the first. If both processes ** invoke the busy handlers, neither will make any progress. Therefore, ** SQLite returns [SQLITE_BUSY] for the first process, hoping that this ** will induce the first process to release its read lock and allow ** the second process to proceed. ** ** ^The default busy callback is NULL. ** ** ^The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED] ** when SQLite is in the middle of a large transaction where all the ** changes will not fit into the in-memory cache. SQLite will ** already hold a RESERVED lock on the database file, but it needs ** to promote this lock to EXCLUSIVE so that it can spill cache ** pages into the database file without harm to concurrent ** readers. ^If it is unable to promote the lock, then the in-memory ** cache will be left in an inconsistent state and so the error ** code is promoted from the relatively benign [SQLITE_BUSY] to ** the more severe [SQLITE_IOERR_BLOCKED]. ^This error code promotion ** forces an automatic rollback of the changes. See the ** ** CorruptionFollowingBusyError wiki page for a discussion of why ** this is important. ** ** ^(There can only be a single busy handler defined for each ** [database connection]. Setting a new busy handler clears any ** previously set handler.)^ ^Note that calling [sqlite3_busy_timeout()] ** will also set or clear the busy handler. ** ** The busy callback should not take any actions which modify the ** database connection that invoked the busy handler. Any such actions ** result in undefined behavior. ** ** A busy handler must not close the database connection ** or [prepared statement] that invoked the busy handler. */ SQLITE_API int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*); /* ** CAPI3REF: Set A Busy Timeout ** ** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps ** for a specified amount of time when a table is locked. ^The handler ** will sleep multiple times until at least "ms" milliseconds of sleeping ** have accumulated. ^After at least "ms" milliseconds of sleeping, ** the handler returns 0 which causes [sqlite3_step()] to return ** [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED]. ** ** ^Calling this routine with an argument less than or equal to zero ** turns off all busy handlers. ** ** ^(There can only be a single busy handler for a particular ** [database connection] any any given moment. If another busy handler ** was defined (using [sqlite3_busy_handler()]) prior to calling ** this routine, that other busy handler is cleared.)^ */ SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms); /* ** CAPI3REF: Convenience Routines For Running Queries ** ** This is a legacy interface that is preserved for backwards compatibility. ** Use of this interface is not recommended. ** ** Definition: A result table is memory data structure created by the ** [sqlite3_get_table()] interface. A result table records the ** complete query results from one or more queries. ** ** The table conceptually has a number of rows and columns. But ** these numbers are not part of the result table itself. These ** numbers are obtained separately. Let N be the number of rows ** and M be the number of columns. ** ** A result table is an array of pointers to zero-terminated UTF-8 strings. ** There are (N+1)*M elements in the array. The first M pointers point ** to zero-terminated strings that contain the names of the columns. ** The remaining entries all point to query results. NULL values result ** in NULL pointers. All other values are in their UTF-8 zero-terminated ** string representation as returned by [sqlite3_column_text()]. ** ** A result table might consist of one or more memory allocations. ** It is not safe to pass a result table directly to [sqlite3_free()]. ** A result table should be deallocated using [sqlite3_free_table()]. ** ** ^(As an example of the result table format, suppose a query result ** is as follows: ** **
    **        Name        | Age
    **        -----------------------
    **        Alice       | 43
    **        Bob         | 28
    **        Cindy       | 21
    ** 
    ** ** There are two column (M==2) and three rows (N==3). Thus the ** result table has 8 entries. Suppose the result table is stored ** in an array names azResult. Then azResult holds this content: ** **
    **        azResult[0] = "Name";
    **        azResult[1] = "Age";
    **        azResult[2] = "Alice";
    **        azResult[3] = "43";
    **        azResult[4] = "Bob";
    **        azResult[5] = "28";
    **        azResult[6] = "Cindy";
    **        azResult[7] = "21";
    ** 
    )^ ** ** ^The sqlite3_get_table() function evaluates one or more ** semicolon-separated SQL statements in the zero-terminated UTF-8 ** string of its 2nd parameter and returns a result table to the ** pointer given in its 3rd parameter. ** ** After the application has finished with the result from sqlite3_get_table(), ** it must pass the result table pointer to sqlite3_free_table() in order to ** release the memory that was malloced. Because of the way the ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling ** function must not try to call [sqlite3_free()] directly. Only ** [sqlite3_free_table()] is able to release the memory properly and safely. ** ** The sqlite3_get_table() interface is implemented as a wrapper around ** [sqlite3_exec()]. The sqlite3_get_table() routine does not have access ** to any internal data structures of SQLite. It uses only the public ** interface defined here. As a consequence, errors that occur in the ** wrapper layer outside of the internal [sqlite3_exec()] call are not ** reflected in subsequent calls to [sqlite3_errcode()] or ** [sqlite3_errmsg()]. */ SQLITE_API int sqlite3_get_table( sqlite3 *db, /* An open database */ const char *zSql, /* SQL to be evaluated */ char ***pazResult, /* Results of the query */ int *pnRow, /* Number of result rows written here */ int *pnColumn, /* Number of result columns written here */ char **pzErrmsg /* Error msg written here */ ); SQLITE_API void sqlite3_free_table(char **result); /* ** CAPI3REF: Formatted String Printing Functions ** ** These routines are work-alikes of the "printf()" family of functions ** from the standard C library. ** ** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their ** results into memory obtained from [sqlite3_malloc()]. ** The strings returned by these two routines should be ** released by [sqlite3_free()]. ^Both routines return a ** NULL pointer if [sqlite3_malloc()] is unable to allocate enough ** memory to hold the resulting string. ** ** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from ** the standard C library. The result is written into the ** buffer supplied as the second parameter whose size is given by ** the first parameter. Note that the order of the ** first two parameters is reversed from snprintf().)^ This is an ** historical accident that cannot be fixed without breaking ** backwards compatibility. ^(Note also that sqlite3_snprintf() ** returns a pointer to its buffer instead of the number of ** characters actually written into the buffer.)^ We admit that ** the number of characters written would be a more useful return ** value but we cannot change the implementation of sqlite3_snprintf() ** now without breaking compatibility. ** ** ^As long as the buffer size is greater than zero, sqlite3_snprintf() ** guarantees that the buffer is always zero-terminated. ^The first ** parameter "n" is the total size of the buffer, including space for ** the zero terminator. So the longest string that can be completely ** written will be n-1 characters. ** ** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf(). ** ** These routines all implement some additional formatting ** options that are useful for constructing SQL statements. ** All of the usual printf() formatting options apply. In addition, there ** is are "%q", "%Q", and "%z" options. ** ** ^(The %q option works like %s in that it substitutes a nul-terminated ** string from the argument list. But %q also doubles every '\'' character. ** %q is designed for use inside a string literal.)^ By doubling each '\'' ** character it escapes that character and allows it to be inserted into ** the string. ** ** For example, assume the string variable zText contains text as follows: ** **
    **  char *zText = "It's a happy day!";
    ** 
    ** ** One can use this text in an SQL statement as follows: ** **
    **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES('%q')", zText);
    **  sqlite3_exec(db, zSQL, 0, 0, 0);
    **  sqlite3_free(zSQL);
    ** 
    ** ** Because the %q format string is used, the '\'' character in zText ** is escaped and the SQL generated is as follows: ** **
    **  INSERT INTO table1 VALUES('It''s a happy day!')
    ** 
    ** ** This is correct. Had we used %s instead of %q, the generated SQL ** would have looked like this: ** **
    **  INSERT INTO table1 VALUES('It's a happy day!');
    ** 
    ** ** This second example is an SQL syntax error. As a general rule you should ** always use %q instead of %s when inserting text into a string literal. ** ** ^(The %Q option works like %q except it also adds single quotes around ** the outside of the total string. Additionally, if the parameter in the ** argument list is a NULL pointer, %Q substitutes the text "NULL" (without ** single quotes).)^ So, for example, one could say: ** **
    **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText);
    **  sqlite3_exec(db, zSQL, 0, 0, 0);
    **  sqlite3_free(zSQL);
    ** 
    ** ** The code above will render a correct SQL statement in the zSQL ** variable even if the zText variable is a NULL pointer. ** ** ^(The "%z" formatting option works like "%s" but with the ** addition that after the string has been read and copied into ** the result, [sqlite3_free()] is called on the input string.)^ */ SQLITE_API char *sqlite3_mprintf(const char*,...); SQLITE_API char *sqlite3_vmprintf(const char*, va_list); SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...); SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list); /* ** CAPI3REF: Memory Allocation Subsystem ** ** The SQLite core uses these three routines for all of its own ** internal memory allocation needs. "Core" in the previous sentence ** does not include operating-system specific VFS implementation. The ** Windows VFS uses native malloc() and free() for some operations. ** ** ^The sqlite3_malloc() routine returns a pointer to a block ** of memory at least N bytes in length, where N is the parameter. ** ^If sqlite3_malloc() is unable to obtain sufficient free ** memory, it returns a NULL pointer. ^If the parameter N to ** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns ** a NULL pointer. ** ** ^Calling sqlite3_free() with a pointer previously returned ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so ** that it might be reused. ^The sqlite3_free() routine is ** a no-op if is called with a NULL pointer. Passing a NULL pointer ** to sqlite3_free() is harmless. After being freed, memory ** should neither be read nor written. Even reading previously freed ** memory might result in a segmentation fault or other severe error. ** Memory corruption, a segmentation fault, or other severe error ** might result if sqlite3_free() is called with a non-NULL pointer that ** was not obtained from sqlite3_malloc() or sqlite3_realloc(). ** ** ^(The sqlite3_realloc() interface attempts to resize a ** prior memory allocation to be at least N bytes, where N is the ** second parameter. The memory allocation to be resized is the first ** parameter.)^ ^ If the first parameter to sqlite3_realloc() ** is a NULL pointer then its behavior is identical to calling ** sqlite3_malloc(N) where N is the second parameter to sqlite3_realloc(). ** ^If the second parameter to sqlite3_realloc() is zero or ** negative then the behavior is exactly the same as calling ** sqlite3_free(P) where P is the first parameter to sqlite3_realloc(). ** ^sqlite3_realloc() returns a pointer to a memory allocation ** of at least N bytes in size or NULL if sufficient memory is unavailable. ** ^If M is the size of the prior allocation, then min(N,M) bytes ** of the prior allocation are copied into the beginning of buffer returned ** by sqlite3_realloc() and the prior allocation is freed. ** ^If sqlite3_realloc() returns NULL, then the prior allocation ** is not freed. ** ** ^The memory returned by sqlite3_malloc() and sqlite3_realloc() ** is always aligned to at least an 8 byte boundary, or to a ** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time ** option is used. ** ** In SQLite version 3.5.0 and 3.5.1, it was possible to define ** the SQLITE_OMIT_MEMORY_ALLOCATION which would cause the built-in ** implementation of these routines to be omitted. That capability ** is no longer provided. Only built-in memory allocators can be used. ** ** The Windows OS interface layer calls ** the system malloc() and free() directly when converting ** filenames between the UTF-8 encoding used by SQLite ** and whatever filename encoding is used by the particular Windows ** installation. Memory allocation errors are detected, but ** they are reported back as [SQLITE_CANTOPEN] or ** [SQLITE_IOERR] rather than [SQLITE_NOMEM]. ** ** The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()] ** must be either NULL or else pointers obtained from a prior ** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have ** not yet been released. ** ** The application must not read or write any part of ** a block of memory after it has been released using ** [sqlite3_free()] or [sqlite3_realloc()]. */ SQLITE_API void *sqlite3_malloc(int); SQLITE_API void *sqlite3_realloc(void*, int); SQLITE_API void sqlite3_free(void*); /* ** CAPI3REF: Memory Allocator Statistics ** ** SQLite provides these two interfaces for reporting on the status ** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()] ** routines, which form the built-in memory allocation subsystem. ** ** ^The [sqlite3_memory_used()] routine returns the number of bytes ** of memory currently outstanding (malloced but not freed). ** ^The [sqlite3_memory_highwater()] routine returns the maximum ** value of [sqlite3_memory_used()] since the high-water mark ** was last reset. ^The values returned by [sqlite3_memory_used()] and ** [sqlite3_memory_highwater()] include any overhead ** added by SQLite in its implementation of [sqlite3_malloc()], ** but not overhead added by the any underlying system library ** routines that [sqlite3_malloc()] may call. ** ** ^The memory high-water mark is reset to the current value of ** [sqlite3_memory_used()] if and only if the parameter to ** [sqlite3_memory_highwater()] is true. ^The value returned ** by [sqlite3_memory_highwater(1)] is the high-water mark ** prior to the reset. */ SQLITE_API sqlite3_int64 sqlite3_memory_used(void); SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag); /* ** CAPI3REF: Pseudo-Random Number Generator ** ** SQLite contains a high-quality pseudo-random number generator (PRNG) used to ** select random [ROWID | ROWIDs] when inserting new records into a table that ** already uses the largest possible [ROWID]. The PRNG is also used for ** the build-in random() and randomblob() SQL functions. This interface allows ** applications to access the same PRNG for other purposes. ** ** ^A call to this routine stores N bytes of randomness into buffer P. ** ** ^The first time this routine is invoked (either internally or by ** the application) the PRNG is seeded using randomness obtained ** from the xRandomness method of the default [sqlite3_vfs] object. ** ^On all subsequent invocations, the pseudo-randomness is generated ** internally and without recourse to the [sqlite3_vfs] xRandomness ** method. */ SQLITE_API void sqlite3_randomness(int N, void *P); /* ** CAPI3REF: Compile-Time Authorization Callbacks ** ** ^This routine registers an authorizer callback with a particular ** [database connection], supplied in the first argument. ** ^The authorizer callback is invoked as SQL statements are being compiled ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()], ** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()]. ^At various ** points during the compilation process, as logic is being created ** to perform various actions, the authorizer callback is invoked to ** see if those actions are allowed. ^The authorizer callback should ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the ** specific action but allow the SQL statement to continue to be ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be ** rejected with an error. ^If the authorizer callback returns ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY] ** then the [sqlite3_prepare_v2()] or equivalent call that triggered ** the authorizer will fail with an error message. ** ** When the callback returns [SQLITE_OK], that means the operation ** requested is ok. ^When the callback returns [SQLITE_DENY], the ** [sqlite3_prepare_v2()] or equivalent call that triggered the ** authorizer will fail with an error message explaining that ** access is denied. ** ** ^The first parameter to the authorizer callback is a copy of the third ** parameter to the sqlite3_set_authorizer() interface. ^The second parameter ** to the callback is an integer [SQLITE_COPY | action code] that specifies ** the particular action to be authorized. ^The third through sixth parameters ** to the callback are zero-terminated strings that contain additional ** details about the action to be authorized. ** ** ^If the action code is [SQLITE_READ] ** and the callback returns [SQLITE_IGNORE] then the ** [prepared statement] statement is constructed to substitute ** a NULL value in place of the table column that would have ** been read if [SQLITE_OK] had been returned. The [SQLITE_IGNORE] ** return can be used to deny an untrusted user access to individual ** columns of a table. ** ^If the action code is [SQLITE_DELETE] and the callback returns ** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the ** [truncate optimization] is disabled and all rows are deleted individually. ** ** An authorizer is used when [sqlite3_prepare | preparing] ** SQL statements from an untrusted source, to ensure that the SQL statements ** do not try to access data they are not allowed to see, or that they do not ** try to execute malicious statements that damage the database. For ** example, an application may allow a user to enter arbitrary ** SQL queries for evaluation by a database. But the application does ** not want the user to be able to make arbitrary changes to the ** database. An authorizer could then be put in place while the ** user-entered SQL is being [sqlite3_prepare | prepared] that ** disallows everything except [SELECT] statements. ** ** Applications that need to process SQL from untrusted sources ** might also consider lowering resource limits using [sqlite3_limit()] ** and limiting database size using the [max_page_count] [PRAGMA] ** in addition to using an authorizer. ** ** ^(Only a single authorizer can be in place on a database connection ** at a time. Each call to sqlite3_set_authorizer overrides the ** previous call.)^ ^Disable the authorizer by installing a NULL callback. ** The authorizer is disabled by default. ** ** The authorizer callback must not do anything that will modify ** the database connection that invoked the authorizer callback. ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** ** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the ** statement might be re-prepared during [sqlite3_step()] due to a ** schema change. Hence, the application should ensure that the ** correct authorizer callback remains in place during the [sqlite3_step()]. ** ** ^Note that the authorizer callback is invoked only during ** [sqlite3_prepare()] or its variants. Authorization is not ** performed during statement evaluation in [sqlite3_step()], unless ** as stated in the previous paragraph, sqlite3_step() invokes ** sqlite3_prepare_v2() to reprepare a statement after a schema change. */ SQLITE_API int sqlite3_set_authorizer( sqlite3*, int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), void *pUserData ); /* ** CAPI3REF: Authorizer Return Codes ** ** The [sqlite3_set_authorizer | authorizer callback function] must ** return either [SQLITE_OK] or one of these two constants in order ** to signal SQLite whether or not the action is permitted. See the ** [sqlite3_set_authorizer | authorizer documentation] for additional ** information. ** ** Note that SQLITE_IGNORE is also used as a [SQLITE_ROLLBACK | return code] ** from the [sqlite3_vtab_on_conflict()] interface. */ #define SQLITE_DENY 1 /* Abort the SQL statement with an error */ #define SQLITE_IGNORE 2 /* Don't allow access, but don't generate an error */ /* ** CAPI3REF: Authorizer Action Codes ** ** The [sqlite3_set_authorizer()] interface registers a callback function ** that is invoked to authorize certain SQL statement actions. The ** second parameter to the callback is an integer code that specifies ** what action is being authorized. These are the integer action codes that ** the authorizer callback may be passed. ** ** These action code values signify what kind of operation is to be ** authorized. The 3rd and 4th parameters to the authorization ** callback function will be parameters or NULL depending on which of these ** codes is used as the second parameter. ^(The 5th parameter to the ** authorizer callback is the name of the database ("main", "temp", ** etc.) if applicable.)^ ^The 6th parameter to the authorizer callback ** is the name of the inner-most trigger or view that is responsible for ** the access attempt or NULL if this access attempt is directly from ** top-level SQL code. */ /******************************************* 3rd ************ 4th ***********/ #define SQLITE_CREATE_INDEX 1 /* Index Name Table Name */ #define SQLITE_CREATE_TABLE 2 /* Table Name NULL */ #define SQLITE_CREATE_TEMP_INDEX 3 /* Index Name Table Name */ #define SQLITE_CREATE_TEMP_TABLE 4 /* Table Name NULL */ #define SQLITE_CREATE_TEMP_TRIGGER 5 /* Trigger Name Table Name */ #define SQLITE_CREATE_TEMP_VIEW 6 /* View Name NULL */ #define SQLITE_CREATE_TRIGGER 7 /* Trigger Name Table Name */ #define SQLITE_CREATE_VIEW 8 /* View Name NULL */ #define SQLITE_DELETE 9 /* Table Name NULL */ #define SQLITE_DROP_INDEX 10 /* Index Name Table Name */ #define SQLITE_DROP_TABLE 11 /* Table Name NULL */ #define SQLITE_DROP_TEMP_INDEX 12 /* Index Name Table Name */ #define SQLITE_DROP_TEMP_TABLE 13 /* Table Name NULL */ #define SQLITE_DROP_TEMP_TRIGGER 14 /* Trigger Name Table Name */ #define SQLITE_DROP_TEMP_VIEW 15 /* View Name NULL */ #define SQLITE_DROP_TRIGGER 16 /* Trigger Name Table Name */ #define SQLITE_DROP_VIEW 17 /* View Name NULL */ #define SQLITE_INSERT 18 /* Table Name NULL */ #define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */ #define SQLITE_READ 20 /* Table Name Column Name */ #define SQLITE_SELECT 21 /* NULL NULL */ #define SQLITE_TRANSACTION 22 /* Operation NULL */ #define SQLITE_UPDATE 23 /* Table Name Column Name */ #define SQLITE_ATTACH 24 /* Filename NULL */ #define SQLITE_DETACH 25 /* Database Name NULL */ #define SQLITE_ALTER_TABLE 26 /* Database Name Table Name */ #define SQLITE_REINDEX 27 /* Index Name NULL */ #define SQLITE_ANALYZE 28 /* Table Name NULL */ #define SQLITE_CREATE_VTABLE 29 /* Table Name Module Name */ #define SQLITE_DROP_VTABLE 30 /* Table Name Module Name */ #define SQLITE_FUNCTION 31 /* NULL Function Name */ #define SQLITE_SAVEPOINT 32 /* Operation Savepoint Name */ #define SQLITE_COPY 0 /* No longer used */ /* ** CAPI3REF: Tracing And Profiling Functions ** ** These routines register callback functions that can be used for ** tracing and profiling the execution of SQL statements. ** ** ^The callback function registered by sqlite3_trace() is invoked at ** various times when an SQL statement is being run by [sqlite3_step()]. ** ^The sqlite3_trace() callback is invoked with a UTF-8 rendering of the ** SQL statement text as the statement first begins executing. ** ^(Additional sqlite3_trace() callbacks might occur ** as each triggered subprogram is entered. The callbacks for triggers ** contain a UTF-8 SQL comment that identifies the trigger.)^ ** ** ^The callback function registered by sqlite3_profile() is invoked ** as each SQL statement finishes. ^The profile callback contains ** the original statement text and an estimate of wall-clock time ** of how long that statement took to run. ^The profile callback ** time is in units of nanoseconds, however the current implementation ** is only capable of millisecond resolution so the six least significant ** digits in the time are meaningless. Future versions of SQLite ** might provide greater resolution on the profiler callback. The ** sqlite3_profile() function is considered experimental and is ** subject to change in future versions of SQLite. */ SQLITE_API void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*); SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*, void(*xProfile)(void*,const char*,sqlite3_uint64), void*); /* ** CAPI3REF: Query Progress Callbacks ** ** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback ** function X to be invoked periodically during long running calls to ** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for ** database connection D. An example use for this ** interface is to keep a GUI updated during a large query. ** ** ^The parameter P is passed through as the only parameter to the ** callback function X. ^The parameter N is the number of ** [virtual machine instructions] that are evaluated between successive ** invocations of the callback X. ** ** ^Only a single progress handler may be defined at one time per ** [database connection]; setting a new progress handler cancels the ** old one. ^Setting parameter X to NULL disables the progress handler. ** ^The progress handler is also disabled by setting N to a value less ** than 1. ** ** ^If the progress callback returns non-zero, the operation is ** interrupted. This feature can be used to implement a ** "Cancel" button on a GUI progress dialog box. ** ** The progress handler callback must not do anything that will modify ** the database connection that invoked the progress handler. ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** */ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); /* ** CAPI3REF: Opening A New Database Connection ** ** ^These routines open an SQLite database file as specified by the ** filename argument. ^The filename argument is interpreted as UTF-8 for ** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte ** order for sqlite3_open16(). ^(A [database connection] handle is usually ** returned in *ppDb, even if an error occurs. The only exception is that ** if SQLite is unable to allocate memory to hold the [sqlite3] object, ** a NULL will be written into *ppDb instead of a pointer to the [sqlite3] ** object.)^ ^(If the database is opened (and/or created) successfully, then ** [SQLITE_OK] is returned. Otherwise an [error code] is returned.)^ ^The ** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain ** an English language description of the error following a failure of any ** of the sqlite3_open() routines. ** ** ^The default encoding for the database will be UTF-8 if ** sqlite3_open() or sqlite3_open_v2() is called and ** UTF-16 in the native byte order if sqlite3_open16() is used. ** ** Whether or not an error occurs when it is opened, resources ** associated with the [database connection] handle should be released by ** passing it to [sqlite3_close()] when it is no longer required. ** ** The sqlite3_open_v2() interface works like sqlite3_open() ** except that it accepts two additional parameters for additional control ** over the new database connection. ^(The flags parameter to ** sqlite3_open_v2() can take one of ** the following three values, optionally combined with the ** [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX], [SQLITE_OPEN_SHAREDCACHE], ** [SQLITE_OPEN_PRIVATECACHE], and/or [SQLITE_OPEN_URI] flags:)^ ** **
    ** ^(
    [SQLITE_OPEN_READONLY]
    **
    The database is opened in read-only mode. If the database does not ** already exist, an error is returned.
    )^ ** ** ^(
    [SQLITE_OPEN_READWRITE]
    **
    The database is opened for reading and writing if possible, or reading ** only if the file is write protected by the operating system. In either ** case the database must already exist, otherwise an error is returned.
    )^ ** ** ^(
    [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]
    **
    The database is opened for reading and writing, and is created if ** it does not already exist. This is the behavior that is always used for ** sqlite3_open() and sqlite3_open16().
    )^ **
    ** ** If the 3rd parameter to sqlite3_open_v2() is not one of the ** combinations shown above optionally combined with other ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] ** then the behavior is undefined. ** ** ^If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection ** opens in the multi-thread [threading mode] as long as the single-thread ** mode has not been set at compile-time or start-time. ^If the ** [SQLITE_OPEN_FULLMUTEX] flag is set then the database connection opens ** in the serialized [threading mode] unless single-thread was ** previously selected at compile-time or start-time. ** ^The [SQLITE_OPEN_SHAREDCACHE] flag causes the database connection to be ** eligible to use [shared cache mode], regardless of whether or not shared ** cache is enabled using [sqlite3_enable_shared_cache()]. ^The ** [SQLITE_OPEN_PRIVATECACHE] flag causes the database connection to not ** participate in [shared cache mode] even if it is enabled. ** ** ^The fourth parameter to sqlite3_open_v2() is the name of the ** [sqlite3_vfs] object that defines the operating system interface that ** the new database connection should use. ^If the fourth parameter is ** a NULL pointer then the default [sqlite3_vfs] object is used. ** ** ^If the filename is ":memory:", then a private, temporary in-memory database ** is created for the connection. ^This in-memory database will vanish when ** the database connection is closed. Future versions of SQLite might ** make use of additional special filenames that begin with the ":" character. ** It is recommended that when a database filename actually does begin with ** a ":" character you should prefix the filename with a pathname such as ** "./" to avoid ambiguity. ** ** ^If the filename is an empty string, then a private, temporary ** on-disk database will be created. ^This private database will be ** automatically deleted as soon as the database connection is closed. ** ** [[URI filenames in sqlite3_open()]]

    URI Filenames

    ** ** ^If [URI filename] interpretation is enabled, and the filename argument ** begins with "file:", then the filename is interpreted as a URI. ^URI ** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is ** set in the fourth argument to sqlite3_open_v2(), or if it has ** been enabled globally using the [SQLITE_CONFIG_URI] option with the ** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option. ** As of SQLite version 3.7.7, URI filename interpretation is turned off ** by default, but future releases of SQLite might enable URI filename ** interpretation by default. See "[URI filenames]" for additional ** information. ** ** URI filenames are parsed according to RFC 3986. ^If the URI contains an ** authority, then it must be either an empty string or the string ** "localhost". ^If the authority is not an empty string or "localhost", an ** error is returned to the caller. ^The fragment component of a URI, if ** present, is ignored. ** ** ^SQLite uses the path component of the URI as the name of the disk file ** which contains the database. ^If the path begins with a '/' character, ** then it is interpreted as an absolute path. ^If the path does not begin ** with a '/' (meaning that the authority section is omitted from the URI) ** then the path is interpreted as a relative path. ** ^On windows, the first component of an absolute path ** is a drive specification (e.g. "C:"). ** ** [[core URI query parameters]] ** The query component of a URI may contain parameters that are interpreted ** either by SQLite itself, or by a [VFS | custom VFS implementation]. ** SQLite interprets the following three query parameters: ** **
      **
    • vfs: ^The "vfs" parameter may be used to specify the name of ** a VFS object that provides the operating system interface that should ** be used to access the database file on disk. ^If this option is set to ** an empty string the default VFS object is used. ^Specifying an unknown ** VFS is an error. ^If sqlite3_open_v2() is used and the vfs option is ** present, then the VFS specified by the option takes precedence over ** the value passed as the fourth parameter to sqlite3_open_v2(). ** **
    • mode: ^(The mode parameter may be set to either "ro", "rw" or ** "rwc". Attempting to set it to any other value is an error)^. ** ^If "ro" is specified, then the database is opened for read-only ** access, just as if the [SQLITE_OPEN_READONLY] flag had been set in the ** third argument to sqlite3_prepare_v2(). ^If the mode option is set to ** "rw", then the database is opened for read-write (but not create) ** access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had ** been set. ^Value "rwc" is equivalent to setting both ** SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE. ^If sqlite3_open_v2() is ** used, it is an error to specify a value for the mode parameter that is ** less restrictive than that specified by the flags passed as the third ** parameter. ** **
    • cache: ^The cache parameter may be set to either "shared" or ** "private". ^Setting it to "shared" is equivalent to setting the ** SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to ** sqlite3_open_v2(). ^Setting the cache parameter to "private" is ** equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit. ** ^If sqlite3_open_v2() is used and the "cache" parameter is present in ** a URI filename, its value overrides any behaviour requested by setting ** SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag. **
    ** ** ^Specifying an unknown parameter in the query component of a URI is not an ** error. Future versions of SQLite might understand additional query ** parameters. See "[query parameters with special meaning to SQLite]" for ** additional information. ** ** [[URI filename examples]]

    URI filename examples

    ** ** **
    URI filenames Results **
    file:data.db ** Open the file "data.db" in the current directory. **
    file:/home/fred/data.db
    ** file:///home/fred/data.db
    ** file://localhost/home/fred/data.db
    ** Open the database file "/home/fred/data.db". **
    file://darkstar/home/fred/data.db ** An error. "darkstar" is not a recognized authority. **
    ** file:///C:/Documents%20and%20Settings/fred/Desktop/data.db ** Windows only: Open the file "data.db" on fred's desktop on drive ** C:. Note that the %20 escaping in this example is not strictly ** necessary - space characters can be used literally ** in URI filenames. **
    file:data.db?mode=ro&cache=private ** Open file "data.db" in the current directory for read-only access. ** Regardless of whether or not shared-cache mode is enabled by ** default, use a private cache. **
    file:/home/fred/data.db?vfs=unix-nolock ** Open file "/home/fred/data.db". Use the special VFS "unix-nolock". **
    file:data.db?mode=readonly ** An error. "readonly" is not a valid option for the "mode" parameter. **
    ** ** ^URI hexadecimal escape sequences (%HH) are supported within the path and ** query components of a URI. A hexadecimal escape sequence consists of a ** percent sign - "%" - followed by exactly two hexadecimal digits ** specifying an octet value. ^Before the path or query components of a ** URI filename are interpreted, they are encoded using UTF-8 and all ** hexadecimal escape sequences replaced by a single byte containing the ** corresponding octet. If this process generates an invalid UTF-8 encoding, ** the results are undefined. ** ** Note to Windows users: The encoding used for the filename argument ** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever ** codepage is currently defined. Filenames containing international ** characters must be converted to UTF-8 prior to passing them into ** sqlite3_open() or sqlite3_open_v2(). */ SQLITE_API int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); SQLITE_API int sqlite3_open16( const void *filename, /* Database filename (UTF-16) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); SQLITE_API int sqlite3_open_v2( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb, /* OUT: SQLite db handle */ int flags, /* Flags */ const char *zVfs /* Name of VFS module to use */ ); /* ** CAPI3REF: Obtain Values For URI Parameters ** ** These are utility routines, useful to VFS implementations, that check ** to see if a database file was a URI that contained a specific query ** parameter, and if so obtains the value of that query parameter. ** ** If F is the database filename pointer passed into the xOpen() method of ** a VFS implementation when the flags parameter to xOpen() has one or ** more of the [SQLITE_OPEN_URI] or [SQLITE_OPEN_MAIN_DB] bits set and ** P is the name of the query parameter, then ** sqlite3_uri_parameter(F,P) returns the value of the P ** parameter if it exists or a NULL pointer if P does not appear as a ** query parameter on F. If P is a query parameter of F ** has no explicit value, then sqlite3_uri_parameter(F,P) returns ** a pointer to an empty string. ** ** The sqlite3_uri_boolean(F,P,B) routine assumes that P is a boolean ** parameter and returns true (1) or false (0) according to the value ** of P. The value of P is true if it is "yes" or "true" or "on" or ** a non-zero number and is false otherwise. If P is not a query parameter ** on F then sqlite3_uri_boolean(F,P,B) returns (B!=0). ** ** The sqlite3_uri_int64(F,P,D) routine converts the value of P into a ** 64-bit signed integer and returns that integer, or D if P does not ** exist. If the value of P is something other than an integer, then ** zero is returned. ** ** If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and ** sqlite3_uri_boolean(F,P,B) returns B. If F is not a NULL pointer and ** is not a database file pathname pointer that SQLite passed into the xOpen ** VFS method, then the behavior of this routine is undefined and probably ** undesirable. */ SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam); SQLITE_API int sqlite3_uri_boolean(const char *zFile, const char *zParam, int bDefault); SQLITE_API sqlite3_int64 sqlite3_uri_int64(const char*, const char*, sqlite3_int64); /* ** CAPI3REF: Error Codes And Messages ** ** ^The sqlite3_errcode() interface returns the numeric [result code] or ** [extended result code] for the most recent failed sqlite3_* API call ** associated with a [database connection]. If a prior API call failed ** but the most recent API call succeeded, the return value from ** sqlite3_errcode() is undefined. ^The sqlite3_extended_errcode() ** interface is the same except that it always returns the ** [extended result code] even when extended result codes are ** disabled. ** ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language ** text that describes the error, as either UTF-8 or UTF-16 respectively. ** ^(Memory to hold the error message string is managed internally. ** The application does not need to worry about freeing the result. ** However, the error string might be overwritten or deallocated by ** subsequent calls to other SQLite interface functions.)^ ** ** When the serialized [threading mode] is in use, it might be the ** case that a second error occurs on a separate thread in between ** the time of the first error and the call to these interfaces. ** When that happens, the second error will be reported since these ** interfaces always report the most recent result. To avoid ** this, each thread can obtain exclusive use of the [database connection] D ** by invoking [sqlite3_mutex_enter]([sqlite3_db_mutex](D)) before beginning ** to use D and invoking [sqlite3_mutex_leave]([sqlite3_db_mutex](D)) after ** all calls to the interfaces listed here are completed. ** ** If an interface fails with SQLITE_MISUSE, that means the interface ** was invoked incorrectly by the application. In that case, the ** error code and message may or may not be set. */ SQLITE_API int sqlite3_errcode(sqlite3 *db); SQLITE_API int sqlite3_extended_errcode(sqlite3 *db); SQLITE_API const char *sqlite3_errmsg(sqlite3*); SQLITE_API const void *sqlite3_errmsg16(sqlite3*); /* ** CAPI3REF: SQL Statement Object ** KEYWORDS: {prepared statement} {prepared statements} ** ** An instance of this object represents a single SQL statement. ** This object is variously known as a "prepared statement" or a ** "compiled SQL statement" or simply as a "statement". ** ** The life of a statement object goes something like this: ** **
      **
    1. Create the object using [sqlite3_prepare_v2()] or a related ** function. **
    2. Bind values to [host parameters] using the sqlite3_bind_*() ** interfaces. **
    3. Run the SQL by calling [sqlite3_step()] one or more times. **
    4. Reset the statement using [sqlite3_reset()] then go back ** to step 2. Do this zero or more times. **
    5. Destroy the object using [sqlite3_finalize()]. **
    ** ** Refer to documentation on individual methods above for additional ** information. */ typedef struct sqlite3_stmt sqlite3_stmt; /* ** CAPI3REF: Run-time Limits ** ** ^(This interface allows the size of various constructs to be limited ** on a connection by connection basis. The first parameter is the ** [database connection] whose limit is to be set or queried. The ** second parameter is one of the [limit categories] that define a ** class of constructs to be size limited. The third parameter is the ** new limit for that construct.)^ ** ** ^If the new limit is a negative number, the limit is unchanged. ** ^(For each limit category SQLITE_LIMIT_NAME there is a ** [limits | hard upper bound] ** set at compile-time by a C preprocessor macro called ** [limits | SQLITE_MAX_NAME]. ** (The "_LIMIT_" in the name is changed to "_MAX_".))^ ** ^Attempts to increase a limit above its hard upper bound are ** silently truncated to the hard upper bound. ** ** ^Regardless of whether or not the limit was changed, the ** [sqlite3_limit()] interface returns the prior value of the limit. ** ^Hence, to find the current value of a limit without changing it, ** simply invoke this interface with the third parameter set to -1. ** ** Run-time limits are intended for use in applications that manage ** both their own internal database and also databases that are controlled ** by untrusted external sources. An example application might be a ** web browser that has its own databases for storing history and ** separate databases controlled by JavaScript applications downloaded ** off the Internet. The internal databases can be given the ** large, default limits. Databases managed by external sources can ** be given much smaller limits designed to prevent a denial of service ** attack. Developers might also want to use the [sqlite3_set_authorizer()] ** interface to further control untrusted SQL. The size of the database ** created by an untrusted script can be contained using the ** [max_page_count] [PRAGMA]. ** ** New run-time limit categories may be added in future releases. */ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); /* ** CAPI3REF: Run-Time Limit Categories ** KEYWORDS: {limit category} {*limit categories} ** ** These constants define various performance limits ** that can be lowered at run-time using [sqlite3_limit()]. ** The synopsis of the meanings of the various limits is shown below. ** Additional information is available at [limits | Limits in SQLite]. ** **
    ** [[SQLITE_LIMIT_LENGTH]] ^(
    SQLITE_LIMIT_LENGTH
    **
    The maximum size of any string or BLOB or table row, in bytes.
    )^ ** ** [[SQLITE_LIMIT_SQL_LENGTH]] ^(
    SQLITE_LIMIT_SQL_LENGTH
    **
    The maximum length of an SQL statement, in bytes.
    )^ ** ** [[SQLITE_LIMIT_COLUMN]] ^(
    SQLITE_LIMIT_COLUMN
    **
    The maximum number of columns in a table definition or in the ** result set of a [SELECT] or the maximum number of columns in an index ** or in an ORDER BY or GROUP BY clause.
    )^ ** ** [[SQLITE_LIMIT_EXPR_DEPTH]] ^(
    SQLITE_LIMIT_EXPR_DEPTH
    **
    The maximum depth of the parse tree on any expression.
    )^ ** ** [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(
    SQLITE_LIMIT_COMPOUND_SELECT
    **
    The maximum number of terms in a compound SELECT statement.
    )^ ** ** [[SQLITE_LIMIT_VDBE_OP]] ^(
    SQLITE_LIMIT_VDBE_OP
    **
    The maximum number of instructions in a virtual machine program ** used to implement an SQL statement. This limit is not currently ** enforced, though that might be added in some future release of ** SQLite.
    )^ ** ** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(
    SQLITE_LIMIT_FUNCTION_ARG
    **
    The maximum number of arguments on a function.
    )^ ** ** [[SQLITE_LIMIT_ATTACHED]] ^(
    SQLITE_LIMIT_ATTACHED
    **
    The maximum number of [ATTACH | attached databases].)^
    ** ** [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]] ** ^(
    SQLITE_LIMIT_LIKE_PATTERN_LENGTH
    **
    The maximum length of the pattern argument to the [LIKE] or ** [GLOB] operators.
    )^ ** ** [[SQLITE_LIMIT_VARIABLE_NUMBER]] ** ^(
    SQLITE_LIMIT_VARIABLE_NUMBER
    **
    The maximum index number of any [parameter] in an SQL statement.)^ ** ** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(
    SQLITE_LIMIT_TRIGGER_DEPTH
    **
    The maximum depth of recursion for triggers.
    )^ **
    */ #define SQLITE_LIMIT_LENGTH 0 #define SQLITE_LIMIT_SQL_LENGTH 1 #define SQLITE_LIMIT_COLUMN 2 #define SQLITE_LIMIT_EXPR_DEPTH 3 #define SQLITE_LIMIT_COMPOUND_SELECT 4 #define SQLITE_LIMIT_VDBE_OP 5 #define SQLITE_LIMIT_FUNCTION_ARG 6 #define SQLITE_LIMIT_ATTACHED 7 #define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8 #define SQLITE_LIMIT_VARIABLE_NUMBER 9 #define SQLITE_LIMIT_TRIGGER_DEPTH 10 /* ** CAPI3REF: Compiling An SQL Statement ** KEYWORDS: {SQL statement compiler} ** ** To execute an SQL query, it must first be compiled into a byte-code ** program using one of these routines. ** ** The first argument, "db", is a [database connection] obtained from a ** prior successful call to [sqlite3_open()], [sqlite3_open_v2()] or ** [sqlite3_open16()]. The database connection must not have been closed. ** ** The second argument, "zSql", is the statement to be compiled, encoded ** as either UTF-8 or UTF-16. The sqlite3_prepare() and sqlite3_prepare_v2() ** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2() ** use UTF-16. ** ** ^If the nByte argument is less than zero, then zSql is read up to the ** first zero terminator. ^If nByte is non-negative, then it is the maximum ** number of bytes read from zSql. ^When nByte is non-negative, the ** zSql string ends at either the first '\000' or '\u0000' character or ** the nByte-th byte, whichever comes first. If the caller knows ** that the supplied string is nul-terminated, then there is a small ** performance advantage to be gained by passing an nByte parameter that ** is equal to the number of bytes in the input string including ** the nul-terminator bytes as this saves SQLite from having to ** make a copy of the input string. ** ** ^If pzTail is not NULL then *pzTail is made to point to the first byte ** past the end of the first SQL statement in zSql. These routines only ** compile the first statement in zSql, so *pzTail is left pointing to ** what remains uncompiled. ** ** ^*ppStmt is left pointing to a compiled [prepared statement] that can be ** executed using [sqlite3_step()]. ^If there is an error, *ppStmt is set ** to NULL. ^If the input text contains no SQL (if the input is an empty ** string or a comment) then *ppStmt is set to NULL. ** The calling procedure is responsible for deleting the compiled ** SQL statement using [sqlite3_finalize()] after it has finished with it. ** ppStmt may not be NULL. ** ** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK]; ** otherwise an [error code] is returned. ** ** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are ** recommended for all new programs. The two older interfaces are retained ** for backwards compatibility, but their use is discouraged. ** ^In the "v2" interfaces, the prepared statement ** that is returned (the [sqlite3_stmt] object) contains a copy of the ** original SQL text. This causes the [sqlite3_step()] interface to ** behave differently in three ways: ** **
      **
    1. ** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it ** always used to do, [sqlite3_step()] will automatically recompile the SQL ** statement and try to run it again. **
    2. ** **
    3. ** ^When an error occurs, [sqlite3_step()] will return one of the detailed ** [error codes] or [extended error codes]. ^The legacy behavior was that ** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code ** and the application would have to make a second call to [sqlite3_reset()] ** in order to find the underlying cause of the problem. With the "v2" prepare ** interfaces, the underlying reason for the error is returned immediately. **
    4. ** **
    5. ** ^If the specific value bound to [parameter | host parameter] in the ** WHERE clause might influence the choice of query plan for a statement, ** then the statement will be automatically recompiled, as if there had been ** a schema change, on the first [sqlite3_step()] call following any change ** to the [sqlite3_bind_text | bindings] of that [parameter]. ** ^The specific value of WHERE-clause [parameter] might influence the ** choice of query plan if the parameter is the left-hand side of a [LIKE] ** or [GLOB] operator or if the parameter is compared to an indexed column ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled. ** the **
    6. **
    */ SQLITE_API int sqlite3_prepare( sqlite3 *db, /* Database handle */ const char *zSql, /* SQL statement, UTF-8 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const char **pzTail /* OUT: Pointer to unused portion of zSql */ ); SQLITE_API int sqlite3_prepare_v2( sqlite3 *db, /* Database handle */ const char *zSql, /* SQL statement, UTF-8 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const char **pzTail /* OUT: Pointer to unused portion of zSql */ ); SQLITE_API int sqlite3_prepare16( sqlite3 *db, /* Database handle */ const void *zSql, /* SQL statement, UTF-16 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const void **pzTail /* OUT: Pointer to unused portion of zSql */ ); SQLITE_API int sqlite3_prepare16_v2( sqlite3 *db, /* Database handle */ const void *zSql, /* SQL statement, UTF-16 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const void **pzTail /* OUT: Pointer to unused portion of zSql */ ); /* ** CAPI3REF: Retrieving Statement SQL ** ** ^This interface can be used to retrieve a saved copy of the original ** SQL text used to create a [prepared statement] if that statement was ** compiled using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()]. */ SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt); /* ** CAPI3REF: Determine If An SQL Statement Writes The Database ** ** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if ** and only if the [prepared statement] X makes no direct changes to ** the content of the database file. ** ** Note that [application-defined SQL functions] or ** [virtual tables] might change the database indirectly as a side effect. ** ^(For example, if an application defines a function "eval()" that ** calls [sqlite3_exec()], then the following SQL statement would ** change the database file through side-effects: ** **
    **    SELECT eval('DELETE FROM t1') FROM t2;
    ** 
    ** ** But because the [SELECT] statement does not change the database file ** directly, sqlite3_stmt_readonly() would still return true.)^ ** ** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK], ** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true, ** since the statements themselves do not actually modify the database but ** rather they control the timing of when other statements modify the ** database. ^The [ATTACH] and [DETACH] statements also cause ** sqlite3_stmt_readonly() to return true since, while those statements ** change the configuration of a database connection, they do not make ** changes to the content of the database files on disk. */ SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt); /* ** CAPI3REF: Determine If A Prepared Statement Has Been Reset ** ** ^The sqlite3_stmt_busy(S) interface returns true (non-zero) if the ** [prepared statement] S has been stepped at least once using ** [sqlite3_step(S)] but has not run to completion and/or has not ** been reset using [sqlite3_reset(S)]. ^The sqlite3_stmt_busy(S) ** interface returns false if S is a NULL pointer. If S is not a ** NULL pointer and is not a pointer to a valid [prepared statement] ** object, then the behavior is undefined and probably undesirable. ** ** This interface can be used in combination [sqlite3_next_stmt()] ** to locate all prepared statements associated with a database ** connection that are in need of being reset. This can be used, ** for example, in diagnostic routines to search for prepared ** statements that are holding a transaction open. */ SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*); /* ** CAPI3REF: Dynamically Typed Value Object ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value} ** ** SQLite uses the sqlite3_value object to represent all values ** that can be stored in a database table. SQLite uses dynamic typing ** for the values it stores. ^Values stored in sqlite3_value objects ** can be integers, floating point values, strings, BLOBs, or NULL. ** ** An sqlite3_value object may be either "protected" or "unprotected". ** Some interfaces require a protected sqlite3_value. Other interfaces ** will accept either a protected or an unprotected sqlite3_value. ** Every interface that accepts sqlite3_value arguments specifies ** whether or not it requires a protected sqlite3_value. ** ** The terms "protected" and "unprotected" refer to whether or not ** a mutex is held. An internal mutex is held for a protected ** sqlite3_value object but no mutex is held for an unprotected ** sqlite3_value object. If SQLite is compiled to be single-threaded ** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0) ** or if SQLite is run in one of reduced mutex modes ** [SQLITE_CONFIG_SINGLETHREAD] or [SQLITE_CONFIG_MULTITHREAD] ** then there is no distinction between protected and unprotected ** sqlite3_value objects and they can be used interchangeably. However, ** for maximum code portability it is recommended that applications ** still make the distinction between protected and unprotected ** sqlite3_value objects even when not strictly required. ** ** ^The sqlite3_value objects that are passed as parameters into the ** implementation of [application-defined SQL functions] are protected. ** ^The sqlite3_value object returned by ** [sqlite3_column_value()] is unprotected. ** Unprotected sqlite3_value objects may only be used with ** [sqlite3_result_value()] and [sqlite3_bind_value()]. ** The [sqlite3_value_blob | sqlite3_value_type()] family of ** interfaces require protected sqlite3_value objects. */ typedef struct Mem sqlite3_value; /* ** CAPI3REF: SQL Function Context Object ** ** The context in which an SQL function executes is stored in an ** sqlite3_context object. ^A pointer to an sqlite3_context object ** is always first parameter to [application-defined SQL functions]. ** The application-defined SQL function implementation will pass this ** pointer through into calls to [sqlite3_result_int | sqlite3_result()], ** [sqlite3_aggregate_context()], [sqlite3_user_data()], ** [sqlite3_context_db_handle()], [sqlite3_get_auxdata()], ** and/or [sqlite3_set_auxdata()]. */ typedef struct sqlite3_context sqlite3_context; /* ** CAPI3REF: Binding Values To Prepared Statements ** KEYWORDS: {host parameter} {host parameters} {host parameter name} ** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding} ** ** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants, ** literals may be replaced by a [parameter] that matches one of following ** templates: ** **
      **
    • ? **
    • ?NNN **
    • :VVV **
    • @VVV **
    • $VVV **
    ** ** In the templates above, NNN represents an integer literal, ** and VVV represents an alphanumeric identifier.)^ ^The values of these ** parameters (also called "host parameter names" or "SQL parameters") ** can be set using the sqlite3_bind_*() routines defined here. ** ** ^The first argument to the sqlite3_bind_*() routines is always ** a pointer to the [sqlite3_stmt] object returned from ** [sqlite3_prepare_v2()] or its variants. ** ** ^The second argument is the index of the SQL parameter to be set. ** ^The leftmost SQL parameter has an index of 1. ^When the same named ** SQL parameter is used more than once, second and subsequent ** occurrences have the same index as the first occurrence. ** ^The index for named parameters can be looked up using the ** [sqlite3_bind_parameter_index()] API if desired. ^The index ** for "?NNN" parameters is the value of NNN. ** ^The NNN value must be between 1 and the [sqlite3_limit()] ** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 999). ** ** ^The third argument is the value to bind to the parameter. ** ** ^(In those routines that have a fourth argument, its value is the ** number of bytes in the parameter. To be clear: the value is the ** number of bytes in the value, not the number of characters.)^ ** ^If the fourth parameter is negative, the length of the string is ** the number of bytes up to the first zero terminator. ** If a non-negative fourth parameter is provided to sqlite3_bind_text() ** or sqlite3_bind_text16() then that parameter must be the byte offset ** where the NUL terminator would occur assuming the string were NUL ** terminated. If any NUL characters occur at byte offsets less than ** the value of the fourth parameter then the resulting string value will ** contain embedded NULs. The result of expressions involving strings ** with embedded NULs is undefined. ** ** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or ** string after SQLite has finished with it. ^The destructor is called ** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(), ** sqlite3_bind_text(), or sqlite3_bind_text16() fails. ** ^If the fifth argument is ** the special value [SQLITE_STATIC], then SQLite assumes that the ** information is in static, unmanaged space and does not need to be freed. ** ^If the fifth argument has the value [SQLITE_TRANSIENT], then ** SQLite makes its own private copy of the data immediately, before ** the sqlite3_bind_*() routine returns. ** ** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that ** is filled with zeroes. ^A zeroblob uses a fixed amount of memory ** (just an integer to hold its size) while it is being processed. ** Zeroblobs are intended to serve as placeholders for BLOBs whose ** content is later written using ** [sqlite3_blob_open | incremental BLOB I/O] routines. ** ^A negative value for the zeroblob results in a zero-length BLOB. ** ** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer ** for the [prepared statement] or with a prepared statement for which ** [sqlite3_step()] has been called more recently than [sqlite3_reset()], ** then the call will return [SQLITE_MISUSE]. If any sqlite3_bind_() ** routine is passed a [prepared statement] that has been finalized, the ** result is undefined and probably harmful. ** ** ^Bindings are not cleared by the [sqlite3_reset()] routine. ** ^Unbound parameters are interpreted as NULL. ** ** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an ** [error code] if anything goes wrong. ** ^[SQLITE_RANGE] is returned if the parameter ** index is out of range. ^[SQLITE_NOMEM] is returned if malloc() fails. ** ** See also: [sqlite3_bind_parameter_count()], ** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()]. */ SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double); SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int); SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64); SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int); SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*)); SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*)); SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); /* ** CAPI3REF: Number Of SQL Parameters ** ** ^This routine can be used to find the number of [SQL parameters] ** in a [prepared statement]. SQL parameters are tokens of the ** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as ** placeholders for values that are [sqlite3_bind_blob | bound] ** to the parameters at a later time. ** ** ^(This routine actually returns the index of the largest (rightmost) ** parameter. For all forms except ?NNN, this will correspond to the ** number of unique parameters. If parameters of the ?NNN form are used, ** there may be gaps in the list.)^ ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_name()], and ** [sqlite3_bind_parameter_index()]. */ SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*); /* ** CAPI3REF: Name Of A Host Parameter ** ** ^The sqlite3_bind_parameter_name(P,N) interface returns ** the name of the N-th [SQL parameter] in the [prepared statement] P. ** ^(SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA" ** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA" ** respectively. ** In other words, the initial ":" or "$" or "@" or "?" ** is included as part of the name.)^ ** ^Parameters of the form "?" without a following integer have no name ** and are referred to as "nameless" or "anonymous parameters". ** ** ^The first host parameter has an index of 1, not 0. ** ** ^If the value N is out of range or if the N-th parameter is ** nameless, then NULL is returned. ^The returned string is ** always in UTF-8 encoding even if the named parameter was ** originally specified as UTF-16 in [sqlite3_prepare16()] or ** [sqlite3_prepare16_v2()]. ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_count()], and ** [sqlite3_bind_parameter_index()]. */ SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int); /* ** CAPI3REF: Index Of A Parameter With A Given Name ** ** ^Return the index of an SQL parameter given its name. ^The ** index value returned is suitable for use as the second ** parameter to [sqlite3_bind_blob|sqlite3_bind()]. ^A zero ** is returned if no matching parameter is found. ^The parameter ** name must be given in UTF-8 even if the original statement ** was prepared from UTF-16 text using [sqlite3_prepare16_v2()]. ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_count()], and ** [sqlite3_bind_parameter_index()]. */ SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName); /* ** CAPI3REF: Reset All Bindings On A Prepared Statement ** ** ^Contrary to the intuition of many, [sqlite3_reset()] does not reset ** the [sqlite3_bind_blob | bindings] on a [prepared statement]. ** ^Use this routine to reset all host parameters to NULL. */ SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*); /* ** CAPI3REF: Number Of Columns In A Result Set ** ** ^Return the number of columns in the result set returned by the ** [prepared statement]. ^This routine returns 0 if pStmt is an SQL ** statement that does not return data (for example an [UPDATE]). ** ** See also: [sqlite3_data_count()] */ SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt); /* ** CAPI3REF: Column Names In A Result Set ** ** ^These routines return the name assigned to a particular column ** in the result set of a [SELECT] statement. ^The sqlite3_column_name() ** interface returns a pointer to a zero-terminated UTF-8 string ** and sqlite3_column_name16() returns a pointer to a zero-terminated ** UTF-16 string. ^The first parameter is the [prepared statement] ** that implements the [SELECT] statement. ^The second parameter is the ** column number. ^The leftmost column is number 0. ** ** ^The returned string pointer is valid until either the [prepared statement] ** is destroyed by [sqlite3_finalize()] or until the statement is automatically ** reprepared by the first call to [sqlite3_step()] for a particular run ** or until the next call to ** sqlite3_column_name() or sqlite3_column_name16() on the same column. ** ** ^If sqlite3_malloc() fails during the processing of either routine ** (for example during a conversion from UTF-8 to UTF-16) then a ** NULL pointer is returned. ** ** ^The name of a result column is the value of the "AS" clause for ** that column, if there is an AS clause. If there is no AS clause ** then the name of the column is unspecified and may change from ** one release of SQLite to the next. */ SQLITE_API const char *sqlite3_column_name(sqlite3_stmt*, int N); SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N); /* ** CAPI3REF: Source Of Data In A Query Result ** ** ^These routines provide a means to determine the database, table, and ** table column that is the origin of a particular result column in ** [SELECT] statement. ** ^The name of the database or table or column can be returned as ** either a UTF-8 or UTF-16 string. ^The _database_ routines return ** the database name, the _table_ routines return the table name, and ** the origin_ routines return the column name. ** ^The returned string is valid until the [prepared statement] is destroyed ** using [sqlite3_finalize()] or until the statement is automatically ** reprepared by the first call to [sqlite3_step()] for a particular run ** or until the same information is requested ** again in a different encoding. ** ** ^The names returned are the original un-aliased names of the ** database, table, and column. ** ** ^The first argument to these interfaces is a [prepared statement]. ** ^These functions return information about the Nth result column returned by ** the statement, where N is the second function argument. ** ^The left-most column is column 0 for these routines. ** ** ^If the Nth column returned by the statement is an expression or ** subquery and is not a column value, then all of these functions return ** NULL. ^These routine might also return NULL if a memory allocation error ** occurs. ^Otherwise, they return the name of the attached database, table, ** or column that query result column was extracted from. ** ** ^As with all other SQLite APIs, those whose names end with "16" return ** UTF-16 encoded strings and the other functions return UTF-8. ** ** ^These APIs are only available if the library was compiled with the ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol. ** ** If two or more threads call one or more of these routines against the same ** prepared statement and column at the same time then the results are ** undefined. ** ** If two or more threads call one or more ** [sqlite3_column_database_name | column metadata interfaces] ** for the same [prepared statement] and result column ** at the same time then the results are undefined. */ SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt*,int); SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt*,int); SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt*,int); SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt*,int); SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt*,int); SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int); /* ** CAPI3REF: Declared Datatype Of A Query Result ** ** ^(The first parameter is a [prepared statement]. ** If this statement is a [SELECT] statement and the Nth column of the ** returned result set of that [SELECT] is a table column (not an ** expression or subquery) then the declared type of the table ** column is returned.)^ ^If the Nth column of the result set is an ** expression or subquery, then a NULL pointer is returned. ** ^The returned string is always UTF-8 encoded. ** ** ^(For example, given the database schema: ** ** CREATE TABLE t1(c1 VARIANT); ** ** and the following statement to be compiled: ** ** SELECT c1 + 1, c1 FROM t1; ** ** this routine would return the string "VARIANT" for the second result ** column (i==1), and a NULL pointer for the first result column (i==0).)^ ** ** ^SQLite uses dynamic run-time typing. ^So just because a column ** is declared to contain a particular type does not mean that the ** data stored in that column is of the declared type. SQLite is ** strongly typed, but the typing is dynamic not static. ^Type ** is associated with individual values, not with the containers ** used to hold those values. */ SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt*,int); SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); /* ** CAPI3REF: Evaluate An SQL Statement ** ** After a [prepared statement] has been prepared using either ** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy ** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function ** must be called one or more times to evaluate the statement. ** ** The details of the behavior of the sqlite3_step() interface depend ** on whether the statement was prepared using the newer "v2" interface ** [sqlite3_prepare_v2()] and [sqlite3_prepare16_v2()] or the older legacy ** interface [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the ** new "v2" interface is recommended for new applications but the legacy ** interface will continue to be supported. ** ** ^In the legacy interface, the return value will be either [SQLITE_BUSY], ** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE]. ** ^With the "v2" interface, any of the other [result codes] or ** [extended result codes] might be returned as well. ** ** ^[SQLITE_BUSY] means that the database engine was unable to acquire the ** database locks it needs to do its job. ^If the statement is a [COMMIT] ** or occurs outside of an explicit transaction, then you can retry the ** statement. If the statement is not a [COMMIT] and occurs within an ** explicit transaction then you should rollback the transaction before ** continuing. ** ** ^[SQLITE_DONE] means that the statement has finished executing ** successfully. sqlite3_step() should not be called again on this virtual ** machine without first calling [sqlite3_reset()] to reset the virtual ** machine back to its initial state. ** ** ^If the SQL statement being executed returns any data, then [SQLITE_ROW] ** is returned each time a new row of data is ready for processing by the ** caller. The values may be accessed using the [column access functions]. ** sqlite3_step() is called again to retrieve the next row of data. ** ** ^[SQLITE_ERROR] means that a run-time error (such as a constraint ** violation) has occurred. sqlite3_step() should not be called again on ** the VM. More information may be found by calling [sqlite3_errmsg()]. ** ^With the legacy interface, a more specific error code (for example, ** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth) ** can be obtained by calling [sqlite3_reset()] on the ** [prepared statement]. ^In the "v2" interface, ** the more specific error code is returned directly by sqlite3_step(). ** ** [SQLITE_MISUSE] means that the this routine was called inappropriately. ** Perhaps it was called on a [prepared statement] that has ** already been [sqlite3_finalize | finalized] or on one that had ** previously returned [SQLITE_ERROR] or [SQLITE_DONE]. Or it could ** be the case that the same database connection is being used by two or ** more threads at the same moment in time. ** ** For all versions of SQLite up to and including 3.6.23.1, a call to ** [sqlite3_reset()] was required after sqlite3_step() returned anything ** other than [SQLITE_ROW] before any subsequent invocation of ** sqlite3_step(). Failure to reset the prepared statement using ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from ** sqlite3_step(). But after version 3.6.23.1, sqlite3_step() began ** calling [sqlite3_reset()] automatically in this circumstance rather ** than returning [SQLITE_MISUSE]. This is not considered a compatibility ** break because any application that ever receives an SQLITE_MISUSE error ** is broken by definition. The [SQLITE_OMIT_AUTORESET] compile-time option ** can be used to restore the legacy behavior. ** ** Goofy Interface Alert: In the legacy interface, the sqlite3_step() ** API always returns a generic error code, [SQLITE_ERROR], following any ** error other than [SQLITE_BUSY] and [SQLITE_MISUSE]. You must call ** [sqlite3_reset()] or [sqlite3_finalize()] in order to find one of the ** specific [error codes] that better describes the error. ** We admit that this is a goofy design. The problem has been fixed ** with the "v2" interface. If you prepare all of your SQL statements ** using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] instead ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces, ** then the more specific [error codes] are returned directly ** by sqlite3_step(). The use of the "v2" interface is recommended. */ SQLITE_API int sqlite3_step(sqlite3_stmt*); /* ** CAPI3REF: Number of columns in a result set ** ** ^The sqlite3_data_count(P) interface returns the number of columns in the ** current row of the result set of [prepared statement] P. ** ^If prepared statement P does not have results ready to return ** (via calls to the [sqlite3_column_int | sqlite3_column_*()] of ** interfaces) then sqlite3_data_count(P) returns 0. ** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer. ** ^The sqlite3_data_count(P) routine returns 0 if the previous call to ** [sqlite3_step](P) returned [SQLITE_DONE]. ^The sqlite3_data_count(P) ** will return non-zero if previous call to [sqlite3_step](P) returned ** [SQLITE_ROW], except in the case of the [PRAGMA incremental_vacuum] ** where it always returns zero since each step of that multi-step ** pragma returns 0 columns of data. ** ** See also: [sqlite3_column_count()] */ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); /* ** CAPI3REF: Fundamental Datatypes ** KEYWORDS: SQLITE_TEXT ** ** ^(Every value in SQLite has one of five fundamental datatypes: ** **
      **
    • 64-bit signed integer **
    • 64-bit IEEE floating point number **
    • string **
    • BLOB **
    • NULL **
    )^ ** ** These constants are codes for each of those types. ** ** Note that the SQLITE_TEXT constant was also used in SQLite version 2 ** for a completely different meaning. Software that links against both ** SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not ** SQLITE_TEXT. */ #define SQLITE_INTEGER 1 #define SQLITE_FLOAT 2 #define SQLITE_BLOB 4 #define SQLITE_NULL 5 #ifdef SQLITE_TEXT # undef SQLITE_TEXT #else # define SQLITE_TEXT 3 #endif #define SQLITE3_TEXT 3 /* ** CAPI3REF: Result Values From A Query ** KEYWORDS: {column access functions} ** ** These routines form the "result set" interface. ** ** ^These routines return information about a single column of the current ** result row of a query. ^In every case the first argument is a pointer ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*] ** that was returned from [sqlite3_prepare_v2()] or one of its variants) ** and the second argument is the index of the column for which information ** should be returned. ^The leftmost column of the result set has the index 0. ** ^The number of columns in the result can be determined using ** [sqlite3_column_count()]. ** ** If the SQL statement does not currently point to a valid row, or if the ** column index is out of range, the result is undefined. ** These routines may only be called when the most recent call to ** [sqlite3_step()] has returned [SQLITE_ROW] and neither ** [sqlite3_reset()] nor [sqlite3_finalize()] have been called subsequently. ** If any of these routines are called after [sqlite3_reset()] or ** [sqlite3_finalize()] or after [sqlite3_step()] has returned ** something other than [SQLITE_ROW], the results are undefined. ** If [sqlite3_step()] or [sqlite3_reset()] or [sqlite3_finalize()] ** are called from a different thread while any of these routines ** are pending, then the results are undefined. ** ** ^The sqlite3_column_type() routine returns the ** [SQLITE_INTEGER | datatype code] for the initial data type ** of the result column. ^The returned value is one of [SQLITE_INTEGER], ** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. The value ** returned by sqlite3_column_type() is only meaningful if no type ** conversions have occurred as described below. After a type conversion, ** the value returned by sqlite3_column_type() is undefined. Future ** versions of SQLite may change the behavior of sqlite3_column_type() ** following a type conversion. ** ** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() ** routine returns the number of bytes in that BLOB or string. ** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts ** the string to UTF-8 and then returns the number of bytes. ** ^If the result is a numeric value then sqlite3_column_bytes() uses ** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns ** the number of bytes in that string. ** ^If the result is NULL, then sqlite3_column_bytes() returns zero. ** ** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16() ** routine returns the number of bytes in that BLOB or string. ** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts ** the string to UTF-16 and then returns the number of bytes. ** ^If the result is a numeric value then sqlite3_column_bytes16() uses ** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns ** the number of bytes in that string. ** ^If the result is NULL, then sqlite3_column_bytes16() returns zero. ** ** ^The values returned by [sqlite3_column_bytes()] and ** [sqlite3_column_bytes16()] do not include the zero terminators at the end ** of the string. ^For clarity: the values returned by ** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of ** bytes in the string, not the number of characters. ** ** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(), ** even empty strings, are always zero-terminated. ^The return ** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer. ** ** ^The object returned by [sqlite3_column_value()] is an ** [unprotected sqlite3_value] object. An unprotected sqlite3_value object ** may only be used with [sqlite3_bind_value()] and [sqlite3_result_value()]. ** If the [unprotected sqlite3_value] object returned by ** [sqlite3_column_value()] is used in any other way, including calls ** to routines like [sqlite3_value_int()], [sqlite3_value_text()], ** or [sqlite3_value_bytes()], then the behavior is undefined. ** ** These routines attempt to convert the value where appropriate. ^For ** example, if the internal representation is FLOAT and a text result ** is requested, [sqlite3_snprintf()] is used internally to perform the ** conversion automatically. ^(The following table details the conversions ** that are applied: ** **
    ** **
    Internal
    Type
    Requested
    Type
    Conversion ** **
    NULL INTEGER Result is 0 **
    NULL FLOAT Result is 0.0 **
    NULL TEXT Result is NULL pointer **
    NULL BLOB Result is NULL pointer **
    INTEGER FLOAT Convert from integer to float **
    INTEGER TEXT ASCII rendering of the integer **
    INTEGER BLOB Same as INTEGER->TEXT **
    FLOAT INTEGER Convert from float to integer **
    FLOAT TEXT ASCII rendering of the float **
    FLOAT BLOB Same as FLOAT->TEXT **
    TEXT INTEGER Use atoi() **
    TEXT FLOAT Use atof() **
    TEXT BLOB No change **
    BLOB INTEGER Convert to TEXT then use atoi() **
    BLOB FLOAT Convert to TEXT then use atof() **
    BLOB TEXT Add a zero terminator if needed **
    **
    )^ ** ** The table above makes reference to standard C library functions atoi() ** and atof(). SQLite does not really use these functions. It has its ** own equivalent internal routines. The atoi() and atof() names are ** used in the table for brevity and because they are familiar to most ** C programmers. ** ** Note that when type conversions occur, pointers returned by prior ** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or ** sqlite3_column_text16() may be invalidated. ** Type conversions and pointer invalidations might occur ** in the following cases: ** **
      **
    • The initial content is a BLOB and sqlite3_column_text() or ** sqlite3_column_text16() is called. A zero-terminator might ** need to be added to the string.
    • **
    • The initial content is UTF-8 text and sqlite3_column_bytes16() or ** sqlite3_column_text16() is called. The content must be converted ** to UTF-16.
    • **
    • The initial content is UTF-16 text and sqlite3_column_bytes() or ** sqlite3_column_text() is called. The content must be converted ** to UTF-8.
    • **
    ** ** ^Conversions between UTF-16be and UTF-16le are always done in place and do ** not invalidate a prior pointer, though of course the content of the buffer ** that the prior pointer references will have been modified. Other kinds ** of conversion are done in place when it is possible, but sometimes they ** are not possible and in those cases prior pointers are invalidated. ** ** The safest and easiest to remember policy is to invoke these routines ** in one of the following ways: ** **
      **
    • sqlite3_column_text() followed by sqlite3_column_bytes()
    • **
    • sqlite3_column_blob() followed by sqlite3_column_bytes()
    • **
    • sqlite3_column_text16() followed by sqlite3_column_bytes16()
    • **
    ** ** In other words, you should call sqlite3_column_text(), ** sqlite3_column_blob(), or sqlite3_column_text16() first to force the result ** into the desired format, then invoke sqlite3_column_bytes() or ** sqlite3_column_bytes16() to find the size of the result. Do not mix calls ** to sqlite3_column_text() or sqlite3_column_blob() with calls to ** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16() ** with calls to sqlite3_column_bytes(). ** ** ^The pointers returned are valid until a type conversion occurs as ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or ** [sqlite3_finalize()] is called. ^The memory space used to hold strings ** and BLOBs is freed automatically. Do not pass the pointers returned ** [sqlite3_column_blob()], [sqlite3_column_text()], etc. into ** [sqlite3_free()]. ** ** ^(If a memory allocation error occurs during the evaluation of any ** of these routines, a default value is returned. The default value ** is either the integer 0, the floating point number 0.0, or a NULL ** pointer. Subsequent calls to [sqlite3_errcode()] will return ** [SQLITE_NOMEM].)^ */ SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol); SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol); SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol); SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); /* ** CAPI3REF: Destroy A Prepared Statement Object ** ** ^The sqlite3_finalize() function is called to delete a [prepared statement]. ** ^If the most recent evaluation of the statement encountered no errors ** or if the statement is never been evaluated, then sqlite3_finalize() returns ** SQLITE_OK. ^If the most recent evaluation of statement S failed, then ** sqlite3_finalize(S) returns the appropriate [error code] or ** [extended error code]. ** ** ^The sqlite3_finalize(S) routine can be called at any point during ** the life cycle of [prepared statement] S: ** before statement S is ever evaluated, after ** one or more calls to [sqlite3_reset()], or after any call ** to [sqlite3_step()] regardless of whether or not the statement has ** completed execution. ** ** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op. ** ** The application must finalize every [prepared statement] in order to avoid ** resource leaks. It is a grievous error for the application to try to use ** a prepared statement after it has been finalized. Any use of a prepared ** statement after it has been finalized can result in undefined and ** undesirable behavior such as segfaults and heap corruption. */ SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); /* ** CAPI3REF: Reset A Prepared Statement Object ** ** The sqlite3_reset() function is called to reset a [prepared statement] ** object back to its initial state, ready to be re-executed. ** ^Any SQL statement variables that had values bound to them using ** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values. ** Use [sqlite3_clear_bindings()] to reset the bindings. ** ** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S ** back to the beginning of its program. ** ** ^If the most recent call to [sqlite3_step(S)] for the ** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE], ** or if [sqlite3_step(S)] has never before been called on S, ** then [sqlite3_reset(S)] returns [SQLITE_OK]. ** ** ^If the most recent call to [sqlite3_step(S)] for the ** [prepared statement] S indicated an error, then ** [sqlite3_reset(S)] returns an appropriate [error code]. ** ** ^The [sqlite3_reset(S)] interface does not change the values ** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S. */ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt); /* ** CAPI3REF: Create Or Redefine SQL Functions ** KEYWORDS: {function creation routines} ** KEYWORDS: {application-defined SQL function} ** KEYWORDS: {application-defined SQL functions} ** ** ^These functions (collectively known as "function creation routines") ** are used to add SQL functions or aggregates or to redefine the behavior ** of existing SQL functions or aggregates. The only differences between ** these routines are the text encoding expected for ** the second parameter (the name of the function being created) ** and the presence or absence of a destructor callback for ** the application data pointer. ** ** ^The first parameter is the [database connection] to which the SQL ** function is to be added. ^If an application uses more than one database ** connection then application-defined SQL functions must be added ** to each database connection separately. ** ** ^The second parameter is the name of the SQL function to be created or ** redefined. ^The length of the name is limited to 255 bytes in a UTF-8 ** representation, exclusive of the zero-terminator. ^Note that the name ** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes. ** ^Any attempt to create a function with a longer name ** will result in [SQLITE_MISUSE] being returned. ** ** ^The third parameter (nArg) ** is the number of arguments that the SQL function or ** aggregate takes. ^If this parameter is -1, then the SQL function or ** aggregate may take any number of arguments between 0 and the limit ** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]). If the third ** parameter is less than -1 or greater than 127 then the behavior is ** undefined. ** ** ^The fourth parameter, eTextRep, specifies what ** [SQLITE_UTF8 | text encoding] this SQL function prefers for ** its parameters. Every SQL function implementation must be able to work ** with UTF-8, UTF-16le, or UTF-16be. But some implementations may be ** more efficient with one encoding than another. ^An application may ** invoke sqlite3_create_function() or sqlite3_create_function16() multiple ** times with the same function but with different values of eTextRep. ** ^When multiple implementations of the same function are available, SQLite ** will pick the one that involves the least amount of data conversion. ** If there is only a single implementation which does not care what text ** encoding is used, then the fourth argument should be [SQLITE_ANY]. ** ** ^(The fifth parameter is an arbitrary pointer. The implementation of the ** function can gain access to this pointer using [sqlite3_user_data()].)^ ** ** ^The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are ** pointers to C-language functions that implement the SQL function or ** aggregate. ^A scalar SQL function requires an implementation of the xFunc ** callback only; NULL pointers must be passed as the xStep and xFinal ** parameters. ^An aggregate SQL function requires an implementation of xStep ** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing ** SQL function or aggregate, pass NULL pointers for all three function ** callbacks. ** ** ^(If the ninth parameter to sqlite3_create_function_v2() is not NULL, ** then it is destructor for the application data pointer. ** The destructor is invoked when the function is deleted, either by being ** overloaded or when the database connection closes.)^ ** ^The destructor is also invoked if the call to ** sqlite3_create_function_v2() fails. ** ^When the destructor callback of the tenth parameter is invoked, it ** is passed a single argument which is a copy of the application data ** pointer which was the fifth parameter to sqlite3_create_function_v2(). ** ** ^It is permitted to register multiple implementations of the same ** functions with the same name but with either differing numbers of ** arguments or differing preferred text encodings. ^SQLite will use ** the implementation that most closely matches the way in which the ** SQL function is used. ^A function implementation with a non-negative ** nArg parameter is a better match than a function implementation with ** a negative nArg. ^A function where the preferred text encoding ** matches the database encoding is a better ** match than a function where the encoding is different. ** ^A function where the encoding difference is between UTF16le and UTF16be ** is a closer match than a function where the encoding difference is ** between UTF8 and UTF16. ** ** ^Built-in functions may be overloaded by new application-defined functions. ** ** ^An application-defined function is permitted to call other ** SQLite interfaces. However, such calls must not ** close the database connection nor finalize or reset the prepared ** statement in which the function is running. */ SQLITE_API int sqlite3_create_function( sqlite3 *db, const char *zFunctionName, int nArg, int eTextRep, void *pApp, void (*xFunc)(sqlite3_context*,int,sqlite3_value**), void (*xStep)(sqlite3_context*,int,sqlite3_value**), void (*xFinal)(sqlite3_context*) ); SQLITE_API int sqlite3_create_function16( sqlite3 *db, const void *zFunctionName, int nArg, int eTextRep, void *pApp, void (*xFunc)(sqlite3_context*,int,sqlite3_value**), void (*xStep)(sqlite3_context*,int,sqlite3_value**), void (*xFinal)(sqlite3_context*) ); SQLITE_API int sqlite3_create_function_v2( sqlite3 *db, const char *zFunctionName, int nArg, int eTextRep, void *pApp, void (*xFunc)(sqlite3_context*,int,sqlite3_value**), void (*xStep)(sqlite3_context*,int,sqlite3_value**), void (*xFinal)(sqlite3_context*), void(*xDestroy)(void*) ); /* ** CAPI3REF: Text Encodings ** ** These constant define integer codes that represent the various ** text encodings supported by SQLite. */ #define SQLITE_UTF8 1 #define SQLITE_UTF16LE 2 #define SQLITE_UTF16BE 3 #define SQLITE_UTF16 4 /* Use native byte order */ #define SQLITE_ANY 5 /* sqlite3_create_function only */ #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */ /* ** CAPI3REF: Deprecated Functions ** DEPRECATED ** ** These functions are [deprecated]. In order to maintain ** backwards compatibility with older code, these functions continue ** to be supported. However, new applications should avoid ** the use of these functions. To help encourage people to avoid ** using these functions, we are not going to tell you what they do. */ #ifndef SQLITE_OMIT_DEPRECATED SQLITE_API SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*); SQLITE_API SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*); SQLITE_API SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*); SQLITE_API SQLITE_DEPRECATED int sqlite3_global_recover(void); SQLITE_API SQLITE_DEPRECATED void sqlite3_thread_cleanup(void); SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void*,sqlite3_int64); #endif /* ** CAPI3REF: Obtaining SQL Function Parameter Values ** ** The C-language implementation of SQL functions and aggregates uses ** this set of interface routines to access the parameter values on ** the function or aggregate. ** ** The xFunc (for scalar functions) or xStep (for aggregates) parameters ** to [sqlite3_create_function()] and [sqlite3_create_function16()] ** define callbacks that implement the SQL functions and aggregates. ** The 3rd parameter to these callbacks is an array of pointers to ** [protected sqlite3_value] objects. There is one [sqlite3_value] object for ** each parameter to the SQL function. These routines are used to ** extract values from the [sqlite3_value] objects. ** ** These routines work only with [protected sqlite3_value] objects. ** Any attempt to use these routines on an [unprotected sqlite3_value] ** object results in undefined behavior. ** ** ^These routines work just like the corresponding [column access functions] ** except that these routines take a single [protected sqlite3_value] object ** pointer instead of a [sqlite3_stmt*] pointer and an integer column number. ** ** ^The sqlite3_value_text16() interface extracts a UTF-16 string ** in the native byte-order of the host machine. ^The ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces ** extract UTF-16 strings as big-endian and little-endian respectively. ** ** ^(The sqlite3_value_numeric_type() interface attempts to apply ** numeric affinity to the value. This means that an attempt is ** made to convert the value to an integer or floating point. If ** such a conversion is possible without loss of information (in other ** words, if the value is a string that looks like a number) ** then the conversion is performed. Otherwise no conversion occurs. ** The [SQLITE_INTEGER | datatype] after conversion is returned.)^ ** ** Please pay particular attention to the fact that the pointer returned ** from [sqlite3_value_blob()], [sqlite3_value_text()], or ** [sqlite3_value_text16()] can be invalidated by a subsequent call to ** [sqlite3_value_bytes()], [sqlite3_value_bytes16()], [sqlite3_value_text()], ** or [sqlite3_value_text16()]. ** ** These routines must be called from the same thread as ** the SQL function that supplied the [sqlite3_value*] parameters. */ SQLITE_API const void *sqlite3_value_blob(sqlite3_value*); SQLITE_API int sqlite3_value_bytes(sqlite3_value*); SQLITE_API int sqlite3_value_bytes16(sqlite3_value*); SQLITE_API double sqlite3_value_double(sqlite3_value*); SQLITE_API int sqlite3_value_int(sqlite3_value*); SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*); SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*); SQLITE_API const void *sqlite3_value_text16(sqlite3_value*); SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*); SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*); SQLITE_API int sqlite3_value_type(sqlite3_value*); SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); /* ** CAPI3REF: Obtain Aggregate Function Context ** ** Implementations of aggregate SQL functions use this ** routine to allocate memory for storing their state. ** ** ^The first time the sqlite3_aggregate_context(C,N) routine is called ** for a particular aggregate function, SQLite ** allocates N of memory, zeroes out that memory, and returns a pointer ** to the new memory. ^On second and subsequent calls to ** sqlite3_aggregate_context() for the same aggregate function instance, ** the same buffer is returned. Sqlite3_aggregate_context() is normally ** called once for each invocation of the xStep callback and then one ** last time when the xFinal callback is invoked. ^(When no rows match ** an aggregate query, the xStep() callback of the aggregate function ** implementation is never called and xFinal() is called exactly once. ** In those cases, sqlite3_aggregate_context() might be called for the ** first time from within xFinal().)^ ** ** ^The sqlite3_aggregate_context(C,N) routine returns a NULL pointer if N is ** less than or equal to zero or if a memory allocate error occurs. ** ** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is ** determined by the N parameter on first successful call. Changing the ** value of N in subsequent call to sqlite3_aggregate_context() within ** the same aggregate function instance will not resize the memory ** allocation.)^ ** ** ^SQLite automatically frees the memory allocated by ** sqlite3_aggregate_context() when the aggregate query concludes. ** ** The first parameter must be a copy of the ** [sqlite3_context | SQL function context] that is the first parameter ** to the xStep or xFinal callback routine that implements the aggregate ** function. ** ** This routine must be called from the same thread in which ** the aggregate SQL function is running. */ SQLITE_API void *sqlite3_aggregate_context(sqlite3_context*, int nBytes); /* ** CAPI3REF: User Data For Functions ** ** ^The sqlite3_user_data() interface returns a copy of ** the pointer that was the pUserData parameter (the 5th parameter) ** of the [sqlite3_create_function()] ** and [sqlite3_create_function16()] routines that originally ** registered the application defined function. ** ** This routine must be called from the same thread in which ** the application-defined function is running. */ SQLITE_API void *sqlite3_user_data(sqlite3_context*); /* ** CAPI3REF: Database Connection For Functions ** ** ^The sqlite3_context_db_handle() interface returns a copy of ** the pointer to the [database connection] (the 1st parameter) ** of the [sqlite3_create_function()] ** and [sqlite3_create_function16()] routines that originally ** registered the application defined function. */ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); /* ** CAPI3REF: Function Auxiliary Data ** ** The following two functions may be used by scalar SQL functions to ** associate metadata with argument values. If the same value is passed to ** multiple invocations of the same SQL function during query execution, under ** some circumstances the associated metadata may be preserved. This may ** be used, for example, to add a regular-expression matching scalar ** function. The compiled version of the regular expression is stored as ** metadata associated with the SQL value passed as the regular expression ** pattern. The compiled regular expression can be reused on multiple ** invocations of the same function so that the original pattern string ** does not need to be recompiled on each invocation. ** ** ^The sqlite3_get_auxdata() interface returns a pointer to the metadata ** associated by the sqlite3_set_auxdata() function with the Nth argument ** value to the application-defined function. ^If no metadata has been ever ** been set for the Nth argument of the function, or if the corresponding ** function parameter has changed since the meta-data was set, ** then sqlite3_get_auxdata() returns a NULL pointer. ** ** ^The sqlite3_set_auxdata() interface saves the metadata ** pointed to by its 3rd parameter as the metadata for the N-th ** argument of the application-defined function. Subsequent ** calls to sqlite3_get_auxdata() might return this data, if it has ** not been destroyed. ** ^If it is not NULL, SQLite will invoke the destructor ** function given by the 4th parameter to sqlite3_set_auxdata() on ** the metadata when the corresponding function parameter changes ** or when the SQL statement completes, whichever comes first. ** ** SQLite is free to call the destructor and drop metadata on any ** parameter of any function at any time. ^The only guarantee is that ** the destructor will be called before the metadata is dropped. ** ** ^(In practice, metadata is preserved between function calls for ** expressions that are constant at compile time. This includes literal ** values and [parameters].)^ ** ** These routines must be called from the same thread in which ** the SQL function is running. */ SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N); SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*)); /* ** CAPI3REF: Constants Defining Special Destructor Behavior ** ** These are special values for the destructor that is passed in as the ** final argument to routines like [sqlite3_result_blob()]. ^If the destructor ** argument is SQLITE_STATIC, it means that the content pointer is constant ** and will never change. It does not need to be destroyed. ^The ** SQLITE_TRANSIENT value means that the content will likely change in ** the near future and that SQLite should make its own private copy of ** the content before returning. ** ** The typedef is necessary to work around problems in certain ** C++ compilers. See ticket #2191. */ typedef void (*sqlite3_destructor_type)(void*); #define SQLITE_STATIC ((sqlite3_destructor_type)0) #define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1) /* ** CAPI3REF: Setting The Result Of An SQL Function ** ** These routines are used by the xFunc or xFinal callbacks that ** implement SQL functions and aggregates. See ** [sqlite3_create_function()] and [sqlite3_create_function16()] ** for additional information. ** ** These functions work very much like the [parameter binding] family of ** functions used to bind values to host parameters in prepared statements. ** Refer to the [SQL parameter] documentation for additional information. ** ** ^The sqlite3_result_blob() interface sets the result from ** an application-defined function to be the BLOB whose content is pointed ** to by the second parameter and which is N bytes long where N is the ** third parameter. ** ** ^The sqlite3_result_zeroblob() interfaces set the result of ** the application-defined function to be a BLOB containing all zero ** bytes and N bytes in size, where N is the value of the 2nd parameter. ** ** ^The sqlite3_result_double() interface sets the result from ** an application-defined function to be a floating point value specified ** by its 2nd argument. ** ** ^The sqlite3_result_error() and sqlite3_result_error16() functions ** cause the implemented SQL function to throw an exception. ** ^SQLite uses the string pointed to by the ** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16() ** as the text of an error message. ^SQLite interprets the error ** message string from sqlite3_result_error() as UTF-8. ^SQLite ** interprets the string from sqlite3_result_error16() as UTF-16 in native ** byte order. ^If the third parameter to sqlite3_result_error() ** or sqlite3_result_error16() is negative then SQLite takes as the error ** message all text up through the first zero character. ** ^If the third parameter to sqlite3_result_error() or ** sqlite3_result_error16() is non-negative then SQLite takes that many ** bytes (not characters) from the 2nd parameter as the error message. ** ^The sqlite3_result_error() and sqlite3_result_error16() ** routines make a private copy of the error message text before ** they return. Hence, the calling function can deallocate or ** modify the text after they return without harm. ** ^The sqlite3_result_error_code() function changes the error code ** returned by SQLite as a result of an error in a function. ^By default, ** the error code is SQLITE_ERROR. ^A subsequent call to sqlite3_result_error() ** or sqlite3_result_error16() resets the error code to SQLITE_ERROR. ** ** ^The sqlite3_result_toobig() interface causes SQLite to throw an error ** indicating that a string or BLOB is too long to represent. ** ** ^The sqlite3_result_nomem() interface causes SQLite to throw an error ** indicating that a memory allocation failed. ** ** ^The sqlite3_result_int() interface sets the return value ** of the application-defined function to be the 32-bit signed integer ** value given in the 2nd argument. ** ^The sqlite3_result_int64() interface sets the return value ** of the application-defined function to be the 64-bit signed integer ** value given in the 2nd argument. ** ** ^The sqlite3_result_null() interface sets the return value ** of the application-defined function to be NULL. ** ** ^The sqlite3_result_text(), sqlite3_result_text16(), ** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces ** set the return value of the application-defined function to be ** a text string which is represented as UTF-8, UTF-16 native byte order, ** UTF-16 little endian, or UTF-16 big endian, respectively. ** ^SQLite takes the text result from the application from ** the 2nd parameter of the sqlite3_result_text* interfaces. ** ^If the 3rd parameter to the sqlite3_result_text* interfaces ** is negative, then SQLite takes result text from the 2nd parameter ** through the first zero character. ** ^If the 3rd parameter to the sqlite3_result_text* interfaces ** is non-negative, then as many bytes (not characters) of the text ** pointed to by the 2nd parameter are taken as the application-defined ** function result. If the 3rd parameter is non-negative, then it ** must be the byte offset into the string where the NUL terminator would ** appear if the string where NUL terminated. If any NUL characters occur ** in the string at a byte offset that is less than the value of the 3rd ** parameter, then the resulting string will contain embedded NULs and the ** result of expressions operating on strings with embedded NULs is undefined. ** ^If the 4th parameter to the sqlite3_result_text* interfaces ** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that ** function as the destructor on the text or BLOB result when it has ** finished using that result. ** ^If the 4th parameter to the sqlite3_result_text* interfaces or to ** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite ** assumes that the text or BLOB result is in constant space and does not ** copy the content of the parameter nor call a destructor on the content ** when it has finished using that result. ** ^If the 4th parameter to the sqlite3_result_text* interfaces ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT ** then SQLite makes a copy of the result into space obtained from ** from [sqlite3_malloc()] before it returns. ** ** ^The sqlite3_result_value() interface sets the result of ** the application-defined function to be a copy the ** [unprotected sqlite3_value] object specified by the 2nd parameter. ^The ** sqlite3_result_value() interface makes a copy of the [sqlite3_value] ** so that the [sqlite3_value] specified in the parameter may change or ** be deallocated after sqlite3_result_value() returns without harm. ** ^A [protected sqlite3_value] object may always be used where an ** [unprotected sqlite3_value] object is required, so either ** kind of [sqlite3_value] object can be used with this interface. ** ** If these routines are called from within the different thread ** than the one containing the application-defined function that received ** the [sqlite3_context] pointer, the results are undefined. */ SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); SQLITE_API void sqlite3_result_double(sqlite3_context*, double); SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int); SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int); SQLITE_API void sqlite3_result_error_toobig(sqlite3_context*); SQLITE_API void sqlite3_result_error_nomem(sqlite3_context*); SQLITE_API void sqlite3_result_error_code(sqlite3_context*, int); SQLITE_API void sqlite3_result_int(sqlite3_context*, int); SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64); SQLITE_API void sqlite3_result_null(sqlite3_context*); SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*)); SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*)); SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*)); SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*)); SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*); SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n); /* ** CAPI3REF: Define New Collating Sequences ** ** ^These functions add, remove, or modify a [collation] associated ** with the [database connection] specified as the first argument. ** ** ^The name of the collation is a UTF-8 string ** for sqlite3_create_collation() and sqlite3_create_collation_v2() ** and a UTF-16 string in native byte order for sqlite3_create_collation16(). ** ^Collation names that compare equal according to [sqlite3_strnicmp()] are ** considered to be the same name. ** ** ^(The third argument (eTextRep) must be one of the constants: **
      **
    • [SQLITE_UTF8], **
    • [SQLITE_UTF16LE], **
    • [SQLITE_UTF16BE], **
    • [SQLITE_UTF16], or **
    • [SQLITE_UTF16_ALIGNED]. **
    )^ ** ^The eTextRep argument determines the encoding of strings passed ** to the collating function callback, xCallback. ** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep ** force strings to be UTF16 with native byte order. ** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin ** on an even byte address. ** ** ^The fourth argument, pArg, is an application data pointer that is passed ** through as the first argument to the collating function callback. ** ** ^The fifth argument, xCallback, is a pointer to the collating function. ** ^Multiple collating functions can be registered using the same name but ** with different eTextRep parameters and SQLite will use whichever ** function requires the least amount of data transformation. ** ^If the xCallback argument is NULL then the collating function is ** deleted. ^When all collating functions having the same name are deleted, ** that collation is no longer usable. ** ** ^The collating function callback is invoked with a copy of the pArg ** application data pointer and with two strings in the encoding specified ** by the eTextRep argument. The collating function must return an ** integer that is negative, zero, or positive ** if the first string is less than, equal to, or greater than the second, ** respectively. A collating function must always return the same answer ** given the same inputs. If two or more collating functions are registered ** to the same collation name (using different eTextRep values) then all ** must give an equivalent answer when invoked with equivalent strings. ** The collating function must obey the following properties for all ** strings A, B, and C: ** **
      **
    1. If A==B then B==A. **
    2. If A==B and B==C then A==C. **
    3. If A<B THEN B>A. **
    4. If A<B and B<C then A<C. **
    ** ** If a collating function fails any of the above constraints and that ** collating function is registered and used, then the behavior of SQLite ** is undefined. ** ** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation() ** with the addition that the xDestroy callback is invoked on pArg when ** the collating function is deleted. ** ^Collating functions are deleted when they are overridden by later ** calls to the collation creation functions or when the ** [database connection] is closed using [sqlite3_close()]. ** ** ^The xDestroy callback is not called if the ** sqlite3_create_collation_v2() function fails. Applications that invoke ** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should ** check the return code and dispose of the application data pointer ** themselves rather than expecting SQLite to deal with it for them. ** This is different from every other SQLite interface. The inconsistency ** is unfortunate but cannot be changed without breaking backwards ** compatibility. ** ** See also: [sqlite3_collation_needed()] and [sqlite3_collation_needed16()]. */ SQLITE_API int sqlite3_create_collation( sqlite3*, const char *zName, int eTextRep, void *pArg, int(*xCompare)(void*,int,const void*,int,const void*) ); SQLITE_API int sqlite3_create_collation_v2( sqlite3*, const char *zName, int eTextRep, void *pArg, int(*xCompare)(void*,int,const void*,int,const void*), void(*xDestroy)(void*) ); SQLITE_API int sqlite3_create_collation16( sqlite3*, const void *zName, int eTextRep, void *pArg, int(*xCompare)(void*,int,const void*,int,const void*) ); /* ** CAPI3REF: Collation Needed Callbacks ** ** ^To avoid having to register all collation sequences before a database ** can be used, a single callback function may be registered with the ** [database connection] to be invoked whenever an undefined collation ** sequence is required. ** ** ^If the function is registered using the sqlite3_collation_needed() API, ** then it is passed the names of undefined collation sequences as strings ** encoded in UTF-8. ^If sqlite3_collation_needed16() is used, ** the names are passed as UTF-16 in machine native byte order. ** ^A call to either function replaces the existing collation-needed callback. ** ** ^(When the callback is invoked, the first argument passed is a copy ** of the second argument to sqlite3_collation_needed() or ** sqlite3_collation_needed16(). The second argument is the database ** connection. The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE], ** or [SQLITE_UTF16LE], indicating the most desirable form of the collation ** sequence function required. The fourth parameter is the name of the ** required collation sequence.)^ ** ** The callback function should register the desired collation using ** [sqlite3_create_collation()], [sqlite3_create_collation16()], or ** [sqlite3_create_collation_v2()]. */ SQLITE_API int sqlite3_collation_needed( sqlite3*, void*, void(*)(void*,sqlite3*,int eTextRep,const char*) ); SQLITE_API int sqlite3_collation_needed16( sqlite3*, void*, void(*)(void*,sqlite3*,int eTextRep,const void*) ); #ifdef SQLITE_HAS_CODEC /* ** Specify the key for an encrypted database. This routine should be ** called right after sqlite3_open(). ** ** The code to implement this API is not available in the public release ** of SQLite. */ SQLITE_API int sqlite3_key( sqlite3 *db, /* Database to be rekeyed */ const void *pKey, int nKey /* The key */ ); /* ** Change the key on an open database. If the current database is not ** encrypted, this routine will encrypt it. If pNew==0 or nNew==0, the ** database is decrypted. ** ** The code to implement this API is not available in the public release ** of SQLite. */ SQLITE_API int sqlite3_rekey( sqlite3 *db, /* Database to be rekeyed */ const void *pKey, int nKey /* The new key */ ); /* ** Specify the activation key for a SEE database. Unless ** activated, none of the SEE routines will work. */ SQLITE_API void sqlite3_activate_see( const char *zPassPhrase /* Activation phrase */ ); #endif #ifdef SQLITE_ENABLE_CEROD /* ** Specify the activation key for a CEROD database. Unless ** activated, none of the CEROD routines will work. */ SQLITE_API void sqlite3_activate_cerod( const char *zPassPhrase /* Activation phrase */ ); #endif /* ** CAPI3REF: Suspend Execution For A Short Time ** ** The sqlite3_sleep() function causes the current thread to suspend execution ** for at least a number of milliseconds specified in its parameter. ** ** If the operating system does not support sleep requests with ** millisecond time resolution, then the time will be rounded up to ** the nearest second. The number of milliseconds of sleep actually ** requested from the operating system is returned. ** ** ^SQLite implements this interface by calling the xSleep() ** method of the default [sqlite3_vfs] object. If the xSleep() method ** of the default VFS is not implemented correctly, or not implemented at ** all, then the behavior of sqlite3_sleep() may deviate from the description ** in the previous paragraphs. */ SQLITE_API int sqlite3_sleep(int); /* ** CAPI3REF: Name Of The Folder Holding Temporary Files ** ** ^(If this global variable is made to point to a string which is ** the name of a folder (a.k.a. directory), then all temporary files ** created by SQLite when using a built-in [sqlite3_vfs | VFS] ** will be placed in that directory.)^ ^If this variable ** is a NULL pointer, then SQLite performs a search for an appropriate ** temporary file directory. ** ** It is not safe to read or modify this variable in more than one ** thread at a time. It is not safe to read or modify this variable ** if a [database connection] is being used at the same time in a separate ** thread. ** It is intended that this variable be set once ** as part of process initialization and before any SQLite interface ** routines have been called and that this variable remain unchanged ** thereafter. ** ** ^The [temp_store_directory pragma] may modify this variable and cause ** it to point to memory obtained from [sqlite3_malloc]. ^Furthermore, ** the [temp_store_directory pragma] always assumes that any string ** that this variable points to is held in memory obtained from ** [sqlite3_malloc] and the pragma may attempt to free that memory ** using [sqlite3_free]. ** Hence, if this variable is modified directly, either it should be ** made NULL or made to point to memory obtained from [sqlite3_malloc] ** or else the use of the [temp_store_directory pragma] should be avoided. */ SQLITE_API char *sqlite3_temp_directory; /* ** CAPI3REF: Test For Auto-Commit Mode ** KEYWORDS: {autocommit mode} ** ** ^The sqlite3_get_autocommit() interface returns non-zero or ** zero if the given database connection is or is not in autocommit mode, ** respectively. ^Autocommit mode is on by default. ** ^Autocommit mode is disabled by a [BEGIN] statement. ** ^Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK]. ** ** If certain kinds of errors occur on a statement within a multi-statement ** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR], ** [SQLITE_NOMEM], [SQLITE_BUSY], and [SQLITE_INTERRUPT]) then the ** transaction might be rolled back automatically. The only way to ** find out whether SQLite automatically rolled back the transaction after ** an error is to use this function. ** ** If another thread changes the autocommit status of the database ** connection while this routine is running, then the return value ** is undefined. */ SQLITE_API int sqlite3_get_autocommit(sqlite3*); /* ** CAPI3REF: Find The Database Handle Of A Prepared Statement ** ** ^The sqlite3_db_handle interface returns the [database connection] handle ** to which a [prepared statement] belongs. ^The [database connection] ** returned by sqlite3_db_handle is the same [database connection] ** that was the first argument ** to the [sqlite3_prepare_v2()] call (or its variants) that was used to ** create the statement in the first place. */ SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*); /* ** CAPI3REF: Return The Filename For A Database Connection ** ** ^The sqlite3_db_filename(D,N) interface returns a pointer to a filename ** associated with database N of connection D. ^The main database file ** has the name "main". If there is no attached database N on the database ** connection D, or if database N is a temporary or in-memory database, then ** a NULL pointer is returned. ** ** ^The filename returned by this function is the output of the ** xFullPathname method of the [VFS]. ^In other words, the filename ** will be an absolute pathname, even if the filename used ** to open the database originally was a URI or relative pathname. */ SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName); /* ** CAPI3REF: Find the next prepared statement ** ** ^This interface returns a pointer to the next [prepared statement] after ** pStmt associated with the [database connection] pDb. ^If pStmt is NULL ** then this interface returns a pointer to the first prepared statement ** associated with the database connection pDb. ^If no prepared statement ** satisfies the conditions of this routine, it returns NULL. ** ** The [database connection] pointer D in a call to ** [sqlite3_next_stmt(D,S)] must refer to an open database ** connection and in particular must not be a NULL pointer. */ SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt); /* ** CAPI3REF: Commit And Rollback Notification Callbacks ** ** ^The sqlite3_commit_hook() interface registers a callback ** function to be invoked whenever a transaction is [COMMIT | committed]. ** ^Any callback set by a previous call to sqlite3_commit_hook() ** for the same database connection is overridden. ** ^The sqlite3_rollback_hook() interface registers a callback ** function to be invoked whenever a transaction is [ROLLBACK | rolled back]. ** ^Any callback set by a previous call to sqlite3_rollback_hook() ** for the same database connection is overridden. ** ^The pArg argument is passed through to the callback. ** ^If the callback on a commit hook function returns non-zero, ** then the commit is converted into a rollback. ** ** ^The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions ** return the P argument from the previous call of the same function ** on the same [database connection] D, or NULL for ** the first call for each function on D. ** ** The commit and rollback hook callbacks are not reentrant. ** The callback implementation must not do anything that will modify ** the database connection that invoked the callback. Any actions ** to modify the database connection must be deferred until after the ** completion of the [sqlite3_step()] call that triggered the commit ** or rollback hook in the first place. ** Note that running any other SQL statements, including SELECT statements, ** or merely calling [sqlite3_prepare_v2()] and [sqlite3_step()] will modify ** the database connections for the meaning of "modify" in this paragraph. ** ** ^Registering a NULL function disables the callback. ** ** ^When the commit hook callback routine returns zero, the [COMMIT] ** operation is allowed to continue normally. ^If the commit hook ** returns non-zero, then the [COMMIT] is converted into a [ROLLBACK]. ** ^The rollback hook is invoked on a rollback that results from a commit ** hook returning non-zero, just as it would be with any other rollback. ** ** ^For the purposes of this API, a transaction is said to have been ** rolled back if an explicit "ROLLBACK" statement is executed, or ** an error or constraint causes an implicit rollback to occur. ** ^The rollback callback is not invoked if a transaction is ** automatically rolled back because the database connection is closed. ** ** See also the [sqlite3_update_hook()] interface. */ SQLITE_API void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*); SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); /* ** CAPI3REF: Data Change Notification Callbacks ** ** ^The sqlite3_update_hook() interface registers a callback function ** with the [database connection] identified by the first argument ** to be invoked whenever a row is updated, inserted or deleted. ** ^Any callback set by a previous call to this function ** for the same database connection is overridden. ** ** ^The second argument is a pointer to the function to invoke when a ** row is updated, inserted or deleted. ** ^The first argument to the callback is a copy of the third argument ** to sqlite3_update_hook(). ** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE], ** or [SQLITE_UPDATE], depending on the operation that caused the callback ** to be invoked. ** ^The third and fourth arguments to the callback contain pointers to the ** database and table name containing the affected row. ** ^The final callback parameter is the [rowid] of the row. ** ^In the case of an update, this is the [rowid] after the update takes place. ** ** ^(The update hook is not invoked when internal system tables are ** modified (i.e. sqlite_master and sqlite_sequence).)^ ** ** ^In the current implementation, the update hook ** is not invoked when duplication rows are deleted because of an ** [ON CONFLICT | ON CONFLICT REPLACE] clause. ^Nor is the update hook ** invoked when rows are deleted using the [truncate optimization]. ** The exceptions defined in this paragraph might change in a future ** release of SQLite. ** ** The update hook implementation must not do anything that will modify ** the database connection that invoked the update hook. Any actions ** to modify the database connection must be deferred until after the ** completion of the [sqlite3_step()] call that triggered the update hook. ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** ** ^The sqlite3_update_hook(D,C,P) function ** returns the P argument from the previous call ** on the same [database connection] D, or NULL for ** the first call on D. ** ** See also the [sqlite3_commit_hook()] and [sqlite3_rollback_hook()] ** interfaces. */ SQLITE_API void *sqlite3_update_hook( sqlite3*, void(*)(void *,int ,char const *,char const *,sqlite3_int64), void* ); /* ** CAPI3REF: Enable Or Disable Shared Pager Cache ** KEYWORDS: {shared cache} ** ** ^(This routine enables or disables the sharing of the database cache ** and schema data structures between [database connection | connections] ** to the same database. Sharing is enabled if the argument is true ** and disabled if the argument is false.)^ ** ** ^Cache sharing is enabled and disabled for an entire process. ** This is a change as of SQLite version 3.5.0. In prior versions of SQLite, ** sharing was enabled or disabled for each thread separately. ** ** ^(The cache sharing mode set by this interface effects all subsequent ** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()]. ** Existing database connections continue use the sharing mode ** that was in effect at the time they were opened.)^ ** ** ^(This routine returns [SQLITE_OK] if shared cache was enabled or disabled ** successfully. An [error code] is returned otherwise.)^ ** ** ^Shared cache is disabled by default. But this might change in ** future releases of SQLite. Applications that care about shared ** cache setting should set it explicitly. ** ** See Also: [SQLite Shared-Cache Mode] */ SQLITE_API int sqlite3_enable_shared_cache(int); /* ** CAPI3REF: Attempt To Free Heap Memory ** ** ^The sqlite3_release_memory() interface attempts to free N bytes ** of heap memory by deallocating non-essential memory allocations ** held by the database library. Memory used to cache database ** pages to improve performance is an example of non-essential memory. ** ^sqlite3_release_memory() returns the number of bytes actually freed, ** which might be more or less than the amount requested. ** ^The sqlite3_release_memory() routine is a no-op returning zero ** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT]. ** ** See also: [sqlite3_db_release_memory()] */ SQLITE_API int sqlite3_release_memory(int); /* ** CAPI3REF: Free Memory Used By A Database Connection ** ** ^The sqlite3_db_release_memory(D) interface attempts to free as much heap ** memory as possible from database connection D. Unlike the ** [sqlite3_release_memory()] interface, this interface is effect even ** when then [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is ** omitted. ** ** See also: [sqlite3_release_memory()] */ SQLITE_API int sqlite3_db_release_memory(sqlite3*); /* ** CAPI3REF: Impose A Limit On Heap Size ** ** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the ** soft limit on the amount of heap memory that may be allocated by SQLite. ** ^SQLite strives to keep heap memory utilization below the soft heap ** limit by reducing the number of pages held in the page cache ** as heap memory usages approaches the limit. ** ^The soft heap limit is "soft" because even though SQLite strives to stay ** below the limit, it will exceed the limit rather than generate ** an [SQLITE_NOMEM] error. In other words, the soft heap limit ** is advisory only. ** ** ^The return value from sqlite3_soft_heap_limit64() is the size of ** the soft heap limit prior to the call, or negative in the case of an ** error. ^If the argument N is negative ** then no change is made to the soft heap limit. Hence, the current ** size of the soft heap limit can be determined by invoking ** sqlite3_soft_heap_limit64() with a negative argument. ** ** ^If the argument N is zero then the soft heap limit is disabled. ** ** ^(The soft heap limit is not enforced in the current implementation ** if one or more of following conditions are true: ** **
      **
    • The soft heap limit is set to zero. **
    • Memory accounting is disabled using a combination of the ** [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and ** the [SQLITE_DEFAULT_MEMSTATUS] compile-time option. **
    • An alternative page cache implementation is specified using ** [sqlite3_config]([SQLITE_CONFIG_PCACHE2],...). **
    • The page cache allocates from its own memory pool supplied ** by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than ** from the heap. **
    )^ ** ** Beginning with SQLite version 3.7.3, the soft heap limit is enforced ** regardless of whether or not the [SQLITE_ENABLE_MEMORY_MANAGEMENT] ** compile-time option is invoked. With [SQLITE_ENABLE_MEMORY_MANAGEMENT], ** the soft heap limit is enforced on every memory allocation. Without ** [SQLITE_ENABLE_MEMORY_MANAGEMENT], the soft heap limit is only enforced ** when memory is allocated by the page cache. Testing suggests that because ** the page cache is the predominate memory user in SQLite, most ** applications will achieve adequate soft heap limit enforcement without ** the use of [SQLITE_ENABLE_MEMORY_MANAGEMENT]. ** ** The circumstances under which SQLite will enforce the soft heap limit may ** changes in future releases of SQLite. */ SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N); /* ** CAPI3REF: Deprecated Soft Heap Limit Interface ** DEPRECATED ** ** This is a deprecated version of the [sqlite3_soft_heap_limit64()] ** interface. This routine is provided for historical compatibility ** only. All new applications should use the ** [sqlite3_soft_heap_limit64()] interface rather than this one. */ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); /* ** CAPI3REF: Extract Metadata About A Column Of A Table ** ** ^This routine returns metadata about a specific column of a specific ** database table accessible using the [database connection] handle ** passed as the first function argument. ** ** ^The column is identified by the second, third and fourth parameters to ** this function. ^The second parameter is either the name of the database ** (i.e. "main", "temp", or an attached database) containing the specified ** table or NULL. ^If it is NULL, then all attached databases are searched ** for the table using the same algorithm used by the database engine to ** resolve unqualified table references. ** ** ^The third and fourth parameters to this function are the table and column ** name of the desired column, respectively. Neither of these parameters ** may be NULL. ** ** ^Metadata is returned by writing to the memory locations passed as the 5th ** and subsequent parameters to this function. ^Any of these arguments may be ** NULL, in which case the corresponding element of metadata is omitted. ** ** ^(
    ** **
    Parameter Output
    Type
    Description ** **
    5th const char* Data type **
    6th const char* Name of default collation sequence **
    7th int True if column has a NOT NULL constraint **
    8th int True if column is part of the PRIMARY KEY **
    9th int True if column is [AUTOINCREMENT] **
    **
    )^ ** ** ^The memory pointed to by the character pointers returned for the ** declaration type and collation sequence is valid only until the next ** call to any SQLite API function. ** ** ^If the specified table is actually a view, an [error code] is returned. ** ** ^If the specified column is "rowid", "oid" or "_rowid_" and an ** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output ** parameters are set for the explicitly declared column. ^(If there is no ** explicitly declared [INTEGER PRIMARY KEY] column, then the output ** parameters are set as follows: ** **
    **     data type: "INTEGER"
    **     collation sequence: "BINARY"
    **     not null: 0
    **     primary key: 1
    **     auto increment: 0
    ** 
    )^ ** ** ^(This function may load one or more schemas from database files. If an ** error occurs during this process, or if the requested table or column ** cannot be found, an [error code] is returned and an error message left ** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^ ** ** ^This API is only available if the library was compiled with the ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined. */ SQLITE_API int sqlite3_table_column_metadata( sqlite3 *db, /* Connection handle */ const char *zDbName, /* Database name or NULL */ const char *zTableName, /* Table name */ const char *zColumnName, /* Column name */ char const **pzDataType, /* OUTPUT: Declared data type */ char const **pzCollSeq, /* OUTPUT: Collation sequence name */ int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */ int *pPrimaryKey, /* OUTPUT: True if column part of PK */ int *pAutoinc /* OUTPUT: True if column is auto-increment */ ); /* ** CAPI3REF: Load An Extension ** ** ^This interface loads an SQLite extension library from the named file. ** ** ^The sqlite3_load_extension() interface attempts to load an ** SQLite extension library contained in the file zFile. ** ** ^The entry point is zProc. ** ^zProc may be 0, in which case the name of the entry point ** defaults to "sqlite3_extension_init". ** ^The sqlite3_load_extension() interface returns ** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong. ** ^If an error occurs and pzErrMsg is not 0, then the ** [sqlite3_load_extension()] interface shall attempt to ** fill *pzErrMsg with error message text stored in memory ** obtained from [sqlite3_malloc()]. The calling function ** should free this memory by calling [sqlite3_free()]. ** ** ^Extension loading must be enabled using ** [sqlite3_enable_load_extension()] prior to calling this API, ** otherwise an error will be returned. ** ** See also the [load_extension() SQL function]. */ SQLITE_API int sqlite3_load_extension( sqlite3 *db, /* Load the extension into this database connection */ const char *zFile, /* Name of the shared library containing extension */ const char *zProc, /* Entry point. Derived from zFile if 0 */ char **pzErrMsg /* Put error message here if not 0 */ ); /* ** CAPI3REF: Enable Or Disable Extension Loading ** ** ^So as not to open security holes in older applications that are ** unprepared to deal with extension loading, and as a means of disabling ** extension loading while evaluating user-entered SQL, the following API ** is provided to turn the [sqlite3_load_extension()] mechanism on and off. ** ** ^Extension loading is off by default. See ticket #1863. ** ^Call the sqlite3_enable_load_extension() routine with onoff==1 ** to turn extension loading on and call it with onoff==0 to turn ** it back off again. */ SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff); /* ** CAPI3REF: Automatically Load Statically Linked Extensions ** ** ^This interface causes the xEntryPoint() function to be invoked for ** each new [database connection] that is created. The idea here is that ** xEntryPoint() is the entry point for a statically linked SQLite extension ** that is to be automatically loaded into all new database connections. ** ** ^(Even though the function prototype shows that xEntryPoint() takes ** no arguments and returns void, SQLite invokes xEntryPoint() with three ** arguments and expects and integer result as if the signature of the ** entry point where as follows: ** **
    **    int xEntryPoint(
    **      sqlite3 *db,
    **      const char **pzErrMsg,
    **      const struct sqlite3_api_routines *pThunk
    **    );
    ** 
    )^ ** ** If the xEntryPoint routine encounters an error, it should make *pzErrMsg ** point to an appropriate error message (obtained from [sqlite3_mprintf()]) ** and return an appropriate [error code]. ^SQLite ensures that *pzErrMsg ** is NULL before calling the xEntryPoint(). ^SQLite will invoke ** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns. ^If any ** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()], ** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail. ** ** ^Calling sqlite3_auto_extension(X) with an entry point X that is already ** on the list of automatic extensions is a harmless no-op. ^No entry point ** will be called more than once for each database connection that is opened. ** ** See also: [sqlite3_reset_auto_extension()]. */ SQLITE_API int sqlite3_auto_extension(void (*xEntryPoint)(void)); /* ** CAPI3REF: Reset Automatic Extension Loading ** ** ^This interface disables all automatic extensions previously ** registered using [sqlite3_auto_extension()]. */ SQLITE_API void sqlite3_reset_auto_extension(void); /* ** The interface to the virtual-table mechanism is currently considered ** to be experimental. The interface might change in incompatible ways. ** If this is a problem for you, do not use the interface at this time. ** ** When the virtual-table mechanism stabilizes, we will declare the ** interface fixed, support it indefinitely, and remove this comment. */ /* ** Structures used by the virtual table interface */ typedef struct sqlite3_vtab sqlite3_vtab; typedef struct sqlite3_index_info sqlite3_index_info; typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor; typedef struct sqlite3_module sqlite3_module; /* ** CAPI3REF: Virtual Table Object ** KEYWORDS: sqlite3_module {virtual table module} ** ** This structure, sometimes called a "virtual table module", ** defines the implementation of a [virtual tables]. ** This structure consists mostly of methods for the module. ** ** ^A virtual table module is created by filling in a persistent ** instance of this structure and passing a pointer to that instance ** to [sqlite3_create_module()] or [sqlite3_create_module_v2()]. ** ^The registration remains valid until it is replaced by a different ** module or until the [database connection] closes. The content ** of this structure must not change while it is registered with ** any database connection. */ struct sqlite3_module { int iVersion; int (*xCreate)(sqlite3*, void *pAux, int argc, const char *const*argv, sqlite3_vtab **ppVTab, char**); int (*xConnect)(sqlite3*, void *pAux, int argc, const char *const*argv, sqlite3_vtab **ppVTab, char**); int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*); int (*xDisconnect)(sqlite3_vtab *pVTab); int (*xDestroy)(sqlite3_vtab *pVTab); int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor); int (*xClose)(sqlite3_vtab_cursor*); int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr, int argc, sqlite3_value **argv); int (*xNext)(sqlite3_vtab_cursor*); int (*xEof)(sqlite3_vtab_cursor*); int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int); int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid); int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *); int (*xBegin)(sqlite3_vtab *pVTab); int (*xSync)(sqlite3_vtab *pVTab); int (*xCommit)(sqlite3_vtab *pVTab); int (*xRollback)(sqlite3_vtab *pVTab); int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName, void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), void **ppArg); int (*xRename)(sqlite3_vtab *pVtab, const char *zNew); /* The methods above are in version 1 of the sqlite_module object. Those ** below are for version 2 and greater. */ int (*xSavepoint)(sqlite3_vtab *pVTab, int); int (*xRelease)(sqlite3_vtab *pVTab, int); int (*xRollbackTo)(sqlite3_vtab *pVTab, int); }; /* ** CAPI3REF: Virtual Table Indexing Information ** KEYWORDS: sqlite3_index_info ** ** The sqlite3_index_info structure and its substructures is used as part ** of the [virtual table] interface to ** pass information into and receive the reply from the [xBestIndex] ** method of a [virtual table module]. The fields under **Inputs** are the ** inputs to xBestIndex and are read-only. xBestIndex inserts its ** results into the **Outputs** fields. ** ** ^(The aConstraint[] array records WHERE clause constraints of the form: ** **
    column OP expr
    ** ** where OP is =, <, <=, >, or >=.)^ ^(The particular operator is ** stored in aConstraint[].op using one of the ** [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^ ** ^(The index of the column is stored in ** aConstraint[].iColumn.)^ ^(aConstraint[].usable is TRUE if the ** expr on the right-hand side can be evaluated (and thus the constraint ** is usable) and false if it cannot.)^ ** ** ^The optimizer automatically inverts terms of the form "expr OP column" ** and makes other simplifications to the WHERE clause in an attempt to ** get as many WHERE clause terms into the form shown above as possible. ** ^The aConstraint[] array only reports WHERE clause terms that are ** relevant to the particular virtual table being queried. ** ** ^Information about the ORDER BY clause is stored in aOrderBy[]. ** ^Each term of aOrderBy records a column of the ORDER BY clause. ** ** The [xBestIndex] method must fill aConstraintUsage[] with information ** about what parameters to pass to xFilter. ^If argvIndex>0 then ** the right-hand side of the corresponding aConstraint[] is evaluated ** and becomes the argvIndex-th entry in argv. ^(If aConstraintUsage[].omit ** is true, then the constraint is assumed to be fully handled by the ** virtual table and is not checked again by SQLite.)^ ** ** ^The idxNum and idxPtr values are recorded and passed into the ** [xFilter] method. ** ^[sqlite3_free()] is used to free idxPtr if and only if ** needToFreeIdxPtr is true. ** ** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in ** the correct order to satisfy the ORDER BY clause so that no separate ** sorting step is required. ** ** ^The estimatedCost value is an estimate of the cost of doing the ** particular lookup. A full scan of a table with N entries should have ** a cost of N. A binary search of a table of N entries should have a ** cost of approximately log(N). */ struct sqlite3_index_info { /* Inputs */ int nConstraint; /* Number of entries in aConstraint */ struct sqlite3_index_constraint { int iColumn; /* Column on left-hand side of constraint */ unsigned char op; /* Constraint operator */ unsigned char usable; /* True if this constraint is usable */ int iTermOffset; /* Used internally - xBestIndex should ignore */ } *aConstraint; /* Table of WHERE clause constraints */ int nOrderBy; /* Number of terms in the ORDER BY clause */ struct sqlite3_index_orderby { int iColumn; /* Column number */ unsigned char desc; /* True for DESC. False for ASC. */ } *aOrderBy; /* The ORDER BY clause */ /* Outputs */ struct sqlite3_index_constraint_usage { int argvIndex; /* if >0, constraint is part of argv to xFilter */ unsigned char omit; /* Do not code a test for this constraint */ } *aConstraintUsage; int idxNum; /* Number used to identify the index */ char *idxStr; /* String, possibly obtained from sqlite3_malloc */ int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */ int orderByConsumed; /* True if output is already ordered */ double estimatedCost; /* Estimated cost of using this index */ }; /* ** CAPI3REF: Virtual Table Constraint Operator Codes ** ** These macros defined the allowed values for the ** [sqlite3_index_info].aConstraint[].op field. Each value represents ** an operator that is part of a constraint term in the wHERE clause of ** a query that uses a [virtual table]. */ #define SQLITE_INDEX_CONSTRAINT_EQ 2 #define SQLITE_INDEX_CONSTRAINT_GT 4 #define SQLITE_INDEX_CONSTRAINT_LE 8 #define SQLITE_INDEX_CONSTRAINT_LT 16 #define SQLITE_INDEX_CONSTRAINT_GE 32 #define SQLITE_INDEX_CONSTRAINT_MATCH 64 /* ** CAPI3REF: Register A Virtual Table Implementation ** ** ^These routines are used to register a new [virtual table module] name. ** ^Module names must be registered before ** creating a new [virtual table] using the module and before using a ** preexisting [virtual table] for the module. ** ** ^The module name is registered on the [database connection] specified ** by the first parameter. ^The name of the module is given by the ** second parameter. ^The third parameter is a pointer to ** the implementation of the [virtual table module]. ^The fourth ** parameter is an arbitrary client data pointer that is passed through ** into the [xCreate] and [xConnect] methods of the virtual table module ** when a new virtual table is be being created or reinitialized. ** ** ^The sqlite3_create_module_v2() interface has a fifth parameter which ** is a pointer to a destructor for the pClientData. ^SQLite will ** invoke the destructor function (if it is not NULL) when SQLite ** no longer needs the pClientData pointer. ^The destructor will also ** be invoked if the call to sqlite3_create_module_v2() fails. ** ^The sqlite3_create_module() ** interface is equivalent to sqlite3_create_module_v2() with a NULL ** destructor. */ SQLITE_API int sqlite3_create_module( sqlite3 *db, /* SQLite connection to register module with */ const char *zName, /* Name of the module */ const sqlite3_module *p, /* Methods for the module */ void *pClientData /* Client data for xCreate/xConnect */ ); SQLITE_API int sqlite3_create_module_v2( sqlite3 *db, /* SQLite connection to register module with */ const char *zName, /* Name of the module */ const sqlite3_module *p, /* Methods for the module */ void *pClientData, /* Client data for xCreate/xConnect */ void(*xDestroy)(void*) /* Module destructor function */ ); /* ** CAPI3REF: Virtual Table Instance Object ** KEYWORDS: sqlite3_vtab ** ** Every [virtual table module] implementation uses a subclass ** of this object to describe a particular instance ** of the [virtual table]. Each subclass will ** be tailored to the specific needs of the module implementation. ** The purpose of this superclass is to define certain fields that are ** common to all module implementations. ** ** ^Virtual tables methods can set an error message by assigning a ** string obtained from [sqlite3_mprintf()] to zErrMsg. The method should ** take care that any prior string is freed by a call to [sqlite3_free()] ** prior to assigning a new string to zErrMsg. ^After the error message ** is delivered up to the client application, the string will be automatically ** freed by sqlite3_free() and the zErrMsg field will be zeroed. */ struct sqlite3_vtab { const sqlite3_module *pModule; /* The module for this virtual table */ int nRef; /* NO LONGER USED */ char *zErrMsg; /* Error message from sqlite3_mprintf() */ /* Virtual table implementations will typically add additional fields */ }; /* ** CAPI3REF: Virtual Table Cursor Object ** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor} ** ** Every [virtual table module] implementation uses a subclass of the ** following structure to describe cursors that point into the ** [virtual table] and are used ** to loop through the virtual table. Cursors are created using the ** [sqlite3_module.xOpen | xOpen] method of the module and are destroyed ** by the [sqlite3_module.xClose | xClose] method. Cursors are used ** by the [xFilter], [xNext], [xEof], [xColumn], and [xRowid] methods ** of the module. Each module implementation will define ** the content of a cursor structure to suit its own needs. ** ** This superclass exists in order to define fields of the cursor that ** are common to all implementations. */ struct sqlite3_vtab_cursor { sqlite3_vtab *pVtab; /* Virtual table of this cursor */ /* Virtual table implementations will typically add additional fields */ }; /* ** CAPI3REF: Declare The Schema Of A Virtual Table ** ** ^The [xCreate] and [xConnect] methods of a ** [virtual table module] call this interface ** to declare the format (the names and datatypes of the columns) of ** the virtual tables they implement. */ SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL); /* ** CAPI3REF: Overload A Function For A Virtual Table ** ** ^(Virtual tables can provide alternative implementations of functions ** using the [xFindFunction] method of the [virtual table module]. ** But global versions of those functions ** must exist in order to be overloaded.)^ ** ** ^(This API makes sure a global version of a function with a particular ** name and number of parameters exists. If no such function exists ** before this API is called, a new function is created.)^ ^The implementation ** of the new function always causes an exception to be thrown. So ** the new function is not good for anything by itself. Its only ** purpose is to be a placeholder function that can be overloaded ** by a [virtual table]. */ SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); /* ** The interface to the virtual-table mechanism defined above (back up ** to a comment remarkably similar to this one) is currently considered ** to be experimental. The interface might change in incompatible ways. ** If this is a problem for you, do not use the interface at this time. ** ** When the virtual-table mechanism stabilizes, we will declare the ** interface fixed, support it indefinitely, and remove this comment. */ /* ** CAPI3REF: A Handle To An Open BLOB ** KEYWORDS: {BLOB handle} {BLOB handles} ** ** An instance of this object represents an open BLOB on which ** [sqlite3_blob_open | incremental BLOB I/O] can be performed. ** ^Objects of this type are created by [sqlite3_blob_open()] ** and destroyed by [sqlite3_blob_close()]. ** ^The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces ** can be used to read or write small subsections of the BLOB. ** ^The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes. */ typedef struct sqlite3_blob sqlite3_blob; /* ** CAPI3REF: Open A BLOB For Incremental I/O ** ** ^(This interfaces opens a [BLOB handle | handle] to the BLOB located ** in row iRow, column zColumn, table zTable in database zDb; ** in other words, the same BLOB that would be selected by: ** **
    **     SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
    ** 
    )^ ** ** ^If the flags parameter is non-zero, then the BLOB is opened for read ** and write access. ^If it is zero, the BLOB is opened for read access. ** ^It is not possible to open a column that is part of an index or primary ** key for writing. ^If [foreign key constraints] are enabled, it is ** not possible to open a column that is part of a [child key] for writing. ** ** ^Note that the database name is not the filename that contains ** the database but rather the symbolic name of the database that ** appears after the AS keyword when the database is connected using [ATTACH]. ** ^For the main database file, the database name is "main". ** ^For TEMP tables, the database name is "temp". ** ** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written ** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set ** to be a null pointer.)^ ** ^This function sets the [database connection] error code and message ** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related ** functions. ^Note that the *ppBlob variable is always initialized in a ** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob ** regardless of the success or failure of this routine. ** ** ^(If the row that a BLOB handle points to is modified by an ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects ** then the BLOB handle is marked as "expired". ** This is true if any column of the row is changed, even a column ** other than the one the BLOB handle is open on.)^ ** ^Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for ** an expired BLOB handle fail with a return code of [SQLITE_ABORT]. ** ^(Changes written into a BLOB prior to the BLOB expiring are not ** rolled back by the expiration of the BLOB. Such changes will eventually ** commit if the transaction continues to completion.)^ ** ** ^Use the [sqlite3_blob_bytes()] interface to determine the size of ** the opened blob. ^The size of a blob may not be changed by this ** interface. Use the [UPDATE] SQL command to change the size of a ** blob. ** ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces ** and the built-in [zeroblob] SQL function can be used, if desired, ** to create an empty, zero-filled blob in which to read or write using ** this interface. ** ** To avoid a resource leak, every open [BLOB handle] should eventually ** be released by a call to [sqlite3_blob_close()]. */ SQLITE_API int sqlite3_blob_open( sqlite3*, const char *zDb, const char *zTable, const char *zColumn, sqlite3_int64 iRow, int flags, sqlite3_blob **ppBlob ); /* ** CAPI3REF: Move a BLOB Handle to a New Row ** ** ^This function is used to move an existing blob handle so that it points ** to a different row of the same database table. ^The new row is identified ** by the rowid value passed as the second argument. Only the row can be ** changed. ^The database, table and column on which the blob handle is open ** remain the same. Moving an existing blob handle to a new row can be ** faster than closing the existing handle and opening a new one. ** ** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] - ** it must exist and there must be either a blob or text value stored in ** the nominated column.)^ ^If the new row is not present in the table, or if ** it does not contain a blob or text value, or if another error occurs, an ** SQLite error code is returned and the blob handle is considered aborted. ** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or ** [sqlite3_blob_reopen()] on an aborted blob handle immediately return ** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle ** always returns zero. ** ** ^This function sets the database handle error code and message. */ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64); /* ** CAPI3REF: Close A BLOB Handle ** ** ^Closes an open [BLOB handle]. ** ** ^Closing a BLOB shall cause the current transaction to commit ** if there are no other BLOBs, no pending prepared statements, and the ** database connection is in [autocommit mode]. ** ^If any writes were made to the BLOB, they might be held in cache ** until the close operation if they will fit. ** ** ^(Closing the BLOB often forces the changes ** out to disk and so if any I/O errors occur, they will likely occur ** at the time when the BLOB is closed. Any errors that occur during ** closing are reported as a non-zero return value.)^ ** ** ^(The BLOB is closed unconditionally. Even if this routine returns ** an error code, the BLOB is still closed.)^ ** ** ^Calling this routine with a null pointer (such as would be returned ** by a failed call to [sqlite3_blob_open()]) is a harmless no-op. */ SQLITE_API int sqlite3_blob_close(sqlite3_blob *); /* ** CAPI3REF: Return The Size Of An Open BLOB ** ** ^Returns the size in bytes of the BLOB accessible via the ** successfully opened [BLOB handle] in its only argument. ^The ** incremental blob I/O routines can only read or overwriting existing ** blob content; they cannot change the size of a blob. ** ** This routine only works on a [BLOB handle] which has been created ** by a prior successful call to [sqlite3_blob_open()] and which has not ** been closed by [sqlite3_blob_close()]. Passing any other pointer in ** to this routine results in undefined and probably undesirable behavior. */ SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *); /* ** CAPI3REF: Read Data From A BLOB Incrementally ** ** ^(This function is used to read data from an open [BLOB handle] into a ** caller-supplied buffer. N bytes of data are copied into buffer Z ** from the open BLOB, starting at offset iOffset.)^ ** ** ^If offset iOffset is less than N bytes from the end of the BLOB, ** [SQLITE_ERROR] is returned and no data is read. ^If N or iOffset is ** less than zero, [SQLITE_ERROR] is returned and no data is read. ** ^The size of the blob (and hence the maximum value of N+iOffset) ** can be determined using the [sqlite3_blob_bytes()] interface. ** ** ^An attempt to read from an expired [BLOB handle] fails with an ** error code of [SQLITE_ABORT]. ** ** ^(On success, sqlite3_blob_read() returns SQLITE_OK. ** Otherwise, an [error code] or an [extended error code] is returned.)^ ** ** This routine only works on a [BLOB handle] which has been created ** by a prior successful call to [sqlite3_blob_open()] and which has not ** been closed by [sqlite3_blob_close()]. Passing any other pointer in ** to this routine results in undefined and probably undesirable behavior. ** ** See also: [sqlite3_blob_write()]. */ SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); /* ** CAPI3REF: Write Data Into A BLOB Incrementally ** ** ^This function is used to write data into an open [BLOB handle] from a ** caller-supplied buffer. ^N bytes of data are copied from the buffer Z ** into the open BLOB, starting at offset iOffset. ** ** ^If the [BLOB handle] passed as the first argument was not opened for ** writing (the flags parameter to [sqlite3_blob_open()] was zero), ** this function returns [SQLITE_READONLY]. ** ** ^This function may only modify the contents of the BLOB; it is ** not possible to increase the size of a BLOB using this API. ** ^If offset iOffset is less than N bytes from the end of the BLOB, ** [SQLITE_ERROR] is returned and no data is written. ^If N is ** less than zero [SQLITE_ERROR] is returned and no data is written. ** The size of the BLOB (and hence the maximum value of N+iOffset) ** can be determined using the [sqlite3_blob_bytes()] interface. ** ** ^An attempt to write to an expired [BLOB handle] fails with an ** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred ** before the [BLOB handle] expired are not rolled back by the ** expiration of the handle, though of course those changes might ** have been overwritten by the statement that expired the BLOB handle ** or by other independent statements. ** ** ^(On success, sqlite3_blob_write() returns SQLITE_OK. ** Otherwise, an [error code] or an [extended error code] is returned.)^ ** ** This routine only works on a [BLOB handle] which has been created ** by a prior successful call to [sqlite3_blob_open()] and which has not ** been closed by [sqlite3_blob_close()]. Passing any other pointer in ** to this routine results in undefined and probably undesirable behavior. ** ** See also: [sqlite3_blob_read()]. */ SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); /* ** CAPI3REF: Virtual File System Objects ** ** A virtual filesystem (VFS) is an [sqlite3_vfs] object ** that SQLite uses to interact ** with the underlying operating system. Most SQLite builds come with a ** single default VFS that is appropriate for the host computer. ** New VFSes can be registered and existing VFSes can be unregistered. ** The following interfaces are provided. ** ** ^The sqlite3_vfs_find() interface returns a pointer to a VFS given its name. ** ^Names are case sensitive. ** ^Names are zero-terminated UTF-8 strings. ** ^If there is no match, a NULL pointer is returned. ** ^If zVfsName is NULL then the default VFS is returned. ** ** ^New VFSes are registered with sqlite3_vfs_register(). ** ^Each new VFS becomes the default VFS if the makeDflt flag is set. ** ^The same VFS can be registered multiple times without injury. ** ^To make an existing VFS into the default VFS, register it again ** with the makeDflt flag set. If two different VFSes with the ** same name are registered, the behavior is undefined. If a ** VFS is registered with a name that is NULL or an empty string, ** then the behavior is undefined. ** ** ^Unregister a VFS with the sqlite3_vfs_unregister() interface. ** ^(If the default VFS is unregistered, another VFS is chosen as ** the default. The choice for the new VFS is arbitrary.)^ */ SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName); SQLITE_API int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt); SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); /* ** CAPI3REF: Mutexes ** ** The SQLite core uses these routines for thread ** synchronization. Though they are intended for internal ** use by SQLite, code that links against SQLite is ** permitted to use any of these routines. ** ** The SQLite source code contains multiple implementations ** of these mutex routines. An appropriate implementation ** is selected automatically at compile-time. ^(The following ** implementations are available in the SQLite core: ** **
      **
    • SQLITE_MUTEX_OS2 **
    • SQLITE_MUTEX_PTHREADS **
    • SQLITE_MUTEX_W32 **
    • SQLITE_MUTEX_NOOP **
    )^ ** ** ^The SQLITE_MUTEX_NOOP implementation is a set of routines ** that does no real locking and is appropriate for use in ** a single-threaded application. ^The SQLITE_MUTEX_OS2, ** SQLITE_MUTEX_PTHREADS, and SQLITE_MUTEX_W32 implementations ** are appropriate for use on OS/2, Unix, and Windows. ** ** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex ** implementation is included with the library. In this case the ** application must supply a custom mutex implementation using the ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function ** before calling sqlite3_initialize() or any other public sqlite3_ ** function that calls sqlite3_initialize().)^ ** ** ^The sqlite3_mutex_alloc() routine allocates a new ** mutex and returns a pointer to it. ^If it returns NULL ** that means that a mutex could not be allocated. ^SQLite ** will unwind its stack and return an error. ^(The argument ** to sqlite3_mutex_alloc() is one of these integer constants: ** **
      **
    • SQLITE_MUTEX_FAST **
    • SQLITE_MUTEX_RECURSIVE **
    • SQLITE_MUTEX_STATIC_MASTER **
    • SQLITE_MUTEX_STATIC_MEM **
    • SQLITE_MUTEX_STATIC_MEM2 **
    • SQLITE_MUTEX_STATIC_PRNG **
    • SQLITE_MUTEX_STATIC_LRU **
    • SQLITE_MUTEX_STATIC_LRU2 **
    )^ ** ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) ** cause sqlite3_mutex_alloc() to create ** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE ** is used but not necessarily so when SQLITE_MUTEX_FAST is used. ** The mutex implementation does not need to make a distinction ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does ** not want to. ^SQLite will only request a recursive mutex in ** cases where it really needs one. ^If a faster non-recursive mutex ** implementation is available on the host platform, the mutex subsystem ** might return such a mutex in response to SQLITE_MUTEX_FAST. ** ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return ** a pointer to a static preexisting mutex. ^Six static mutexes are ** used by the current version of SQLite. Future versions of SQLite ** may add additional static mutexes. Static mutexes are for internal ** use by SQLite only. Applications that use SQLite mutexes should ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or ** SQLITE_MUTEX_RECURSIVE. ** ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc() ** returns a different mutex on every call. ^But for the static ** mutex types, the same mutex is returned on every call that has ** the same type number. ** ** ^The sqlite3_mutex_free() routine deallocates a previously ** allocated dynamic mutex. ^SQLite is careful to deallocate every ** dynamic mutex that it allocates. The dynamic mutexes must not be in ** use when they are deallocated. Attempting to deallocate a static ** mutex results in undefined behavior. ^SQLite never deallocates ** a static mutex. ** ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt ** to enter a mutex. ^If another thread is already within the mutex, ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return ** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK] ** upon successful entry. ^(Mutexes created using ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread. ** In such cases the, ** mutex must be exited an equal number of times before another thread ** can enter.)^ ^(If the same thread tries to enter any other ** kind of mutex more than once, the behavior is undefined. ** SQLite will never exhibit ** such behavior in its own use of mutexes.)^ ** ** ^(Some systems (for example, Windows 95) do not support the operation ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() ** will always return SQLITE_BUSY. The SQLite core only ever uses ** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^ ** ** ^The sqlite3_mutex_leave() routine exits a mutex that was ** previously entered by the same thread. ^(The behavior ** is undefined if the mutex is not currently entered by the ** calling thread or is not currently allocated. SQLite will ** never do either.)^ ** ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or ** sqlite3_mutex_leave() is a NULL pointer, then all three routines ** behave as no-ops. ** ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()]. */ SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int); SQLITE_API void sqlite3_mutex_free(sqlite3_mutex*); SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex*); SQLITE_API int sqlite3_mutex_try(sqlite3_mutex*); SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); /* ** CAPI3REF: Mutex Methods Object ** ** An instance of this structure defines the low-level routines ** used to allocate and use mutexes. ** ** Usually, the default mutex implementations provided by SQLite are ** sufficient, however the user has the option of substituting a custom ** implementation for specialized deployments or systems for which SQLite ** does not provide a suitable implementation. In this case, the user ** creates and populates an instance of this structure to pass ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option. ** Additionally, an instance of this structure can be used as an ** output variable when querying the system for the current mutex ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option. ** ** ^The xMutexInit method defined by this structure is invoked as ** part of system initialization by the sqlite3_initialize() function. ** ^The xMutexInit routine is called by SQLite exactly once for each ** effective call to [sqlite3_initialize()]. ** ** ^The xMutexEnd method defined by this structure is invoked as ** part of system shutdown by the sqlite3_shutdown() function. The ** implementation of this method is expected to release all outstanding ** resources obtained by the mutex methods implementation, especially ** those obtained by the xMutexInit method. ^The xMutexEnd() ** interface is invoked exactly once for each call to [sqlite3_shutdown()]. ** ** ^(The remaining seven methods defined by this structure (xMutexAlloc, ** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and ** xMutexNotheld) implement the following interfaces (respectively): ** **
      **
    • [sqlite3_mutex_alloc()]
    • **
    • [sqlite3_mutex_free()]
    • **
    • [sqlite3_mutex_enter()]
    • **
    • [sqlite3_mutex_try()]
    • **
    • [sqlite3_mutex_leave()]
    • **
    • [sqlite3_mutex_held()]
    • **
    • [sqlite3_mutex_notheld()]
    • **
    )^ ** ** The only difference is that the public sqlite3_XXX functions enumerated ** above silently ignore any invocations that pass a NULL pointer instead ** of a valid mutex handle. The implementations of the methods defined ** by this structure are not required to handle this case, the results ** of passing a NULL pointer instead of a valid mutex handle are undefined ** (i.e. it is acceptable to provide an implementation that segfaults if ** it is passed a NULL pointer). ** ** The xMutexInit() method must be threadsafe. ^It must be harmless to ** invoke xMutexInit() multiple times within the same process and without ** intervening calls to xMutexEnd(). Second and subsequent calls to ** xMutexInit() must be no-ops. ** ** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()] ** and its associates). ^Similarly, xMutexAlloc() must not use SQLite memory ** allocation for a static mutex. ^However xMutexAlloc() may use SQLite ** memory allocation for a fast or recursive mutex. ** ** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is ** called, but only if the prior call to xMutexInit returned SQLITE_OK. ** If xMutexInit fails in any way, it is expected to clean up after itself ** prior to returning. */ typedef struct sqlite3_mutex_methods sqlite3_mutex_methods; struct sqlite3_mutex_methods { int (*xMutexInit)(void); int (*xMutexEnd)(void); sqlite3_mutex *(*xMutexAlloc)(int); void (*xMutexFree)(sqlite3_mutex *); void (*xMutexEnter)(sqlite3_mutex *); int (*xMutexTry)(sqlite3_mutex *); void (*xMutexLeave)(sqlite3_mutex *); int (*xMutexHeld)(sqlite3_mutex *); int (*xMutexNotheld)(sqlite3_mutex *); }; /* ** CAPI3REF: Mutex Verification Routines ** ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines ** are intended for use inside assert() statements. ^The SQLite core ** never uses these routines except inside an assert() and applications ** are advised to follow the lead of the core. ^The SQLite core only ** provides implementations for these routines when it is compiled ** with the SQLITE_DEBUG flag. ^External mutex implementations ** are only required to provide these routines if SQLITE_DEBUG is ** defined and if NDEBUG is not defined. ** ** ^These routines should return true if the mutex in their argument ** is held or not held, respectively, by the calling thread. ** ** ^The implementation is not required to provide versions of these ** routines that actually work. If the implementation does not provide working ** versions of these routines, it should at least provide stubs that always ** return true so that one does not get spurious assertion failures. ** ** ^If the argument to sqlite3_mutex_held() is a NULL pointer then ** the routine should return 1. This seems counter-intuitive since ** clearly the mutex cannot be held if it does not exist. But ** the reason the mutex does not exist is because the build is not ** using mutexes. And we do not want the assert() containing the ** call to sqlite3_mutex_held() to fail, so a non-zero return is ** the appropriate thing to do. ^The sqlite3_mutex_notheld() ** interface should also return 1 when given a NULL pointer. */ #ifndef NDEBUG SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*); SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*); #endif /* ** CAPI3REF: Mutex Types ** ** The [sqlite3_mutex_alloc()] interface takes a single argument ** which is one of these integer constants. ** ** The set of static mutexes may change from one SQLite release to the ** next. Applications that override the built-in mutex logic must be ** prepared to accommodate additional static mutexes. */ #define SQLITE_MUTEX_FAST 0 #define SQLITE_MUTEX_RECURSIVE 1 #define SQLITE_MUTEX_STATIC_MASTER 2 #define SQLITE_MUTEX_STATIC_MEM 3 /* sqlite3_malloc() */ #define SQLITE_MUTEX_STATIC_MEM2 4 /* NOT USED */ #define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */ #define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_random() */ #define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */ #define SQLITE_MUTEX_STATIC_LRU2 7 /* NOT USED */ #define SQLITE_MUTEX_STATIC_PMEM 7 /* sqlite3PageMalloc() */ /* ** CAPI3REF: Retrieve the mutex for a database connection ** ** ^This interface returns a pointer the [sqlite3_mutex] object that ** serializes access to the [database connection] given in the argument ** when the [threading mode] is Serialized. ** ^If the [threading mode] is Single-thread or Multi-thread then this ** routine returns a NULL pointer. */ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*); /* ** CAPI3REF: Low-Level Control Of Database Files ** ** ^The [sqlite3_file_control()] interface makes a direct call to the ** xFileControl method for the [sqlite3_io_methods] object associated ** with a particular database identified by the second argument. ^The ** name of the database is "main" for the main database or "temp" for the ** TEMP database, or the name that appears after the AS keyword for ** databases that are added using the [ATTACH] SQL command. ** ^A NULL pointer can be used in place of "main" to refer to the ** main database file. ** ^The third and fourth parameters to this routine ** are passed directly through to the second and third parameters of ** the xFileControl method. ^The return value of the xFileControl ** method becomes the return value of this routine. ** ** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes ** a pointer to the underlying [sqlite3_file] object to be written into ** the space pointed to by the 4th parameter. ^The SQLITE_FCNTL_FILE_POINTER ** case is a short-circuit path which does not actually invoke the ** underlying sqlite3_io_methods.xFileControl method. ** ** ^If the second parameter (zDbName) does not match the name of any ** open database file, then SQLITE_ERROR is returned. ^This error ** code is not remembered and will not be recalled by [sqlite3_errcode()] ** or [sqlite3_errmsg()]. The underlying xFileControl method might ** also return SQLITE_ERROR. There is no way to distinguish between ** an incorrect zDbName and an SQLITE_ERROR return from the underlying ** xFileControl method. ** ** See also: [SQLITE_FCNTL_LOCKSTATE] */ SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*); /* ** CAPI3REF: Testing Interface ** ** ^The sqlite3_test_control() interface is used to read out internal ** state of SQLite and to inject faults into SQLite for testing ** purposes. ^The first parameter is an operation code that determines ** the number, meaning, and operation of all subsequent parameters. ** ** This interface is not for use by applications. It exists solely ** for verifying the correct operation of the SQLite library. Depending ** on how the SQLite library is compiled, this interface might not exist. ** ** The details of the operation codes, their meanings, the parameters ** they take, and what they do are all subject to change without notice. ** Unlike most of the SQLite API, this function is not guaranteed to ** operate consistently from one release to the next. */ SQLITE_API int sqlite3_test_control(int op, ...); /* ** CAPI3REF: Testing Interface Operation Codes ** ** These constants are the valid operation code parameters used ** as the first argument to [sqlite3_test_control()]. ** ** These parameters and their meanings are subject to change ** without notice. These values are for testing purposes only. ** Applications should not use any of these parameters or the ** [sqlite3_test_control()] interface. */ #define SQLITE_TESTCTRL_FIRST 5 #define SQLITE_TESTCTRL_PRNG_SAVE 5 #define SQLITE_TESTCTRL_PRNG_RESTORE 6 #define SQLITE_TESTCTRL_PRNG_RESET 7 #define SQLITE_TESTCTRL_BITVEC_TEST 8 #define SQLITE_TESTCTRL_FAULT_INSTALL 9 #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10 #define SQLITE_TESTCTRL_PENDING_BYTE 11 #define SQLITE_TESTCTRL_ASSERT 12 #define SQLITE_TESTCTRL_ALWAYS 13 #define SQLITE_TESTCTRL_RESERVE 14 #define SQLITE_TESTCTRL_OPTIMIZATIONS 15 #define SQLITE_TESTCTRL_ISKEYWORD 16 #define SQLITE_TESTCTRL_SCRATCHMALLOC 17 #define SQLITE_TESTCTRL_LOCALTIME_FAULT 18 #define SQLITE_TESTCTRL_EXPLAIN_STMT 19 #define SQLITE_TESTCTRL_LAST 19 /* ** CAPI3REF: SQLite Runtime Status ** ** ^This interface is used to retrieve runtime status information ** about the performance of SQLite, and optionally to reset various ** highwater marks. ^The first argument is an integer code for ** the specific parameter to measure. ^(Recognized integer codes ** are of the form [status parameters | SQLITE_STATUS_...].)^ ** ^The current value of the parameter is returned into *pCurrent. ** ^The highest recorded value is returned in *pHighwater. ^If the ** resetFlag is true, then the highest record value is reset after ** *pHighwater is written. ^(Some parameters do not record the highest ** value. For those parameters ** nothing is written into *pHighwater and the resetFlag is ignored.)^ ** ^(Other parameters record only the highwater mark and not the current ** value. For these latter parameters nothing is written into *pCurrent.)^ ** ** ^The sqlite3_status() routine returns SQLITE_OK on success and a ** non-zero [error code] on failure. ** ** This routine is threadsafe but is not atomic. This routine can be ** called while other threads are running the same or different SQLite ** interfaces. However the values returned in *pCurrent and ** *pHighwater reflect the status of SQLite at different points in time ** and it is possible that another thread might change the parameter ** in between the times when *pCurrent and *pHighwater are written. ** ** See also: [sqlite3_db_status()] */ SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag); /* ** CAPI3REF: Status Parameters ** KEYWORDS: {status parameters} ** ** These integer constants designate various run-time status parameters ** that can be returned by [sqlite3_status()]. ** **
    ** [[SQLITE_STATUS_MEMORY_USED]] ^(
    SQLITE_STATUS_MEMORY_USED
    **
    This parameter is the current amount of memory checked out ** using [sqlite3_malloc()], either directly or indirectly. The ** figure includes calls made to [sqlite3_malloc()] by the application ** and internal memory usage by the SQLite library. Scratch memory ** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in ** this parameter. The amount returned is the sum of the allocation ** sizes as reported by the xSize method in [sqlite3_mem_methods].
    )^ ** ** [[SQLITE_STATUS_MALLOC_SIZE]] ^(
    SQLITE_STATUS_MALLOC_SIZE
    **
    This parameter records the largest memory allocation request ** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their ** internal equivalents). Only the value returned in the ** *pHighwater parameter to [sqlite3_status()] is of interest. ** The value written into the *pCurrent parameter is undefined.
    )^ ** ** [[SQLITE_STATUS_MALLOC_COUNT]] ^(
    SQLITE_STATUS_MALLOC_COUNT
    **
    This parameter records the number of separate memory allocations ** currently checked out.
    )^ ** ** [[SQLITE_STATUS_PAGECACHE_USED]] ^(
    SQLITE_STATUS_PAGECACHE_USED
    **
    This parameter returns the number of pages used out of the ** [pagecache memory allocator] that was configured using ** [SQLITE_CONFIG_PAGECACHE]. The ** value returned is in pages, not in bytes.
    )^ ** ** [[SQLITE_STATUS_PAGECACHE_OVERFLOW]] ** ^(
    SQLITE_STATUS_PAGECACHE_OVERFLOW
    **
    This parameter returns the number of bytes of page cache ** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE] ** buffer and where forced to overflow to [sqlite3_malloc()]. The ** returned value includes allocations that overflowed because they ** where too large (they were larger than the "sz" parameter to ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because ** no space was left in the page cache.
    )^ ** ** [[SQLITE_STATUS_PAGECACHE_SIZE]] ^(
    SQLITE_STATUS_PAGECACHE_SIZE
    **
    This parameter records the largest memory allocation request ** handed to [pagecache memory allocator]. Only the value returned in the ** *pHighwater parameter to [sqlite3_status()] is of interest. ** The value written into the *pCurrent parameter is undefined.
    )^ ** ** [[SQLITE_STATUS_SCRATCH_USED]] ^(
    SQLITE_STATUS_SCRATCH_USED
    **
    This parameter returns the number of allocations used out of the ** [scratch memory allocator] configured using ** [SQLITE_CONFIG_SCRATCH]. The value returned is in allocations, not ** in bytes. Since a single thread may only have one scratch allocation ** outstanding at time, this parameter also reports the number of threads ** using scratch memory at the same time.
    )^ ** ** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(
    SQLITE_STATUS_SCRATCH_OVERFLOW
    **
    This parameter returns the number of bytes of scratch memory ** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH] ** buffer and where forced to overflow to [sqlite3_malloc()]. The values ** returned include overflows because the requested allocation was too ** larger (that is, because the requested allocation was larger than the ** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer ** slots were available. **
    )^ ** ** [[SQLITE_STATUS_SCRATCH_SIZE]] ^(
    SQLITE_STATUS_SCRATCH_SIZE
    **
    This parameter records the largest memory allocation request ** handed to [scratch memory allocator]. Only the value returned in the ** *pHighwater parameter to [sqlite3_status()] is of interest. ** The value written into the *pCurrent parameter is undefined.
    )^ ** ** [[SQLITE_STATUS_PARSER_STACK]] ^(
    SQLITE_STATUS_PARSER_STACK
    **
    This parameter records the deepest parser stack. It is only ** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].
    )^ **
    ** ** New status parameters may be added from time to time. */ #define SQLITE_STATUS_MEMORY_USED 0 #define SQLITE_STATUS_PAGECACHE_USED 1 #define SQLITE_STATUS_PAGECACHE_OVERFLOW 2 #define SQLITE_STATUS_SCRATCH_USED 3 #define SQLITE_STATUS_SCRATCH_OVERFLOW 4 #define SQLITE_STATUS_MALLOC_SIZE 5 #define SQLITE_STATUS_PARSER_STACK 6 #define SQLITE_STATUS_PAGECACHE_SIZE 7 #define SQLITE_STATUS_SCRATCH_SIZE 8 #define SQLITE_STATUS_MALLOC_COUNT 9 /* ** CAPI3REF: Database Connection Status ** ** ^This interface is used to retrieve runtime status information ** about a single [database connection]. ^The first argument is the ** database connection object to be interrogated. ^The second argument ** is an integer constant, taken from the set of ** [SQLITE_DBSTATUS options], that ** determines the parameter to interrogate. The set of ** [SQLITE_DBSTATUS options] is likely ** to grow in future releases of SQLite. ** ** ^The current value of the requested parameter is written into *pCur ** and the highest instantaneous value is written into *pHiwtr. ^If ** the resetFlg is true, then the highest instantaneous value is ** reset back down to the current value. ** ** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a ** non-zero [error code] on failure. ** ** See also: [sqlite3_status()] and [sqlite3_stmt_status()]. */ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); /* ** CAPI3REF: Status Parameters for database connections ** KEYWORDS: {SQLITE_DBSTATUS options} ** ** These constants are the available integer "verbs" that can be passed as ** the second argument to the [sqlite3_db_status()] interface. ** ** New verbs may be added in future releases of SQLite. Existing verbs ** might be discontinued. Applications should check the return code from ** [sqlite3_db_status()] to make sure that the call worked. ** The [sqlite3_db_status()] interface will return a non-zero error code ** if a discontinued or unsupported verb is invoked. ** **
    ** [[SQLITE_DBSTATUS_LOOKASIDE_USED]] ^(
    SQLITE_DBSTATUS_LOOKASIDE_USED
    **
    This parameter returns the number of lookaside memory slots currently ** checked out.
    )^ ** ** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(
    SQLITE_DBSTATUS_LOOKASIDE_HIT
    **
    This parameter returns the number malloc attempts that were ** satisfied using lookaside memory. Only the high-water value is meaningful; ** the current value is always zero.)^ ** ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]] ** ^(
    SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE
    **
    This parameter returns the number malloc attempts that might have ** been satisfied using lookaside memory but failed due to the amount of ** memory requested being larger than the lookaside slot size. ** Only the high-water value is meaningful; ** the current value is always zero.)^ ** ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]] ** ^(
    SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL
    **
    This parameter returns the number malloc attempts that might have ** been satisfied using lookaside memory but failed due to all lookaside ** memory already being in use. ** Only the high-water value is meaningful; ** the current value is always zero.)^ ** ** [[SQLITE_DBSTATUS_CACHE_USED]] ^(
    SQLITE_DBSTATUS_CACHE_USED
    **
    This parameter returns the approximate number of of bytes of heap ** memory used by all pager caches associated with the database connection.)^ ** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0. ** ** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(
    SQLITE_DBSTATUS_SCHEMA_USED
    **
    This parameter returns the approximate number of of bytes of heap ** memory used to store the schema for all databases associated ** with the connection - main, temp, and any [ATTACH]-ed databases.)^ ** ^The full amount of memory used by the schemas is reported, even if the ** schema memory is shared with other database connections due to ** [shared cache mode] being enabled. ** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0. ** ** [[SQLITE_DBSTATUS_STMT_USED]] ^(
    SQLITE_DBSTATUS_STMT_USED
    **
    This parameter returns the approximate number of of bytes of heap ** and lookaside memory used by all prepared statements associated with ** the database connection.)^ ** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0. **
    ** ** [[SQLITE_DBSTATUS_CACHE_HIT]] ^(
    SQLITE_DBSTATUS_CACHE_HIT
    **
    This parameter returns the number of pager cache hits that have ** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT ** is always 0. **
    ** ** [[SQLITE_DBSTATUS_CACHE_MISS]] ^(
    SQLITE_DBSTATUS_CACHE_MISS
    **
    This parameter returns the number of pager cache misses that have ** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS ** is always 0. **
    **
    */ #define SQLITE_DBSTATUS_LOOKASIDE_USED 0 #define SQLITE_DBSTATUS_CACHE_USED 1 #define SQLITE_DBSTATUS_SCHEMA_USED 2 #define SQLITE_DBSTATUS_STMT_USED 3 #define SQLITE_DBSTATUS_LOOKASIDE_HIT 4 #define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5 #define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6 #define SQLITE_DBSTATUS_CACHE_HIT 7 #define SQLITE_DBSTATUS_CACHE_MISS 8 #define SQLITE_DBSTATUS_MAX 8 /* Largest defined DBSTATUS */ /* ** CAPI3REF: Prepared Statement Status ** ** ^(Each prepared statement maintains various ** [SQLITE_STMTSTATUS counters] that measure the number ** of times it has performed specific operations.)^ These counters can ** be used to monitor the performance characteristics of the prepared ** statements. For example, if the number of table steps greatly exceeds ** the number of table searches or result rows, that would tend to indicate ** that the prepared statement is using a full table scan rather than ** an index. ** ** ^(This interface is used to retrieve and reset counter values from ** a [prepared statement]. The first argument is the prepared statement ** object to be interrogated. The second argument ** is an integer code for a specific [SQLITE_STMTSTATUS counter] ** to be interrogated.)^ ** ^The current value of the requested counter is returned. ** ^If the resetFlg is true, then the counter is reset to zero after this ** interface call returns. ** ** See also: [sqlite3_status()] and [sqlite3_db_status()]. */ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); /* ** CAPI3REF: Status Parameters for prepared statements ** KEYWORDS: {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters} ** ** These preprocessor macros define integer codes that name counter ** values associated with the [sqlite3_stmt_status()] interface. ** The meanings of the various counters are as follows: ** **
    ** [[SQLITE_STMTSTATUS_FULLSCAN_STEP]]
    SQLITE_STMTSTATUS_FULLSCAN_STEP
    **
    ^This is the number of times that SQLite has stepped forward in ** a table as part of a full table scan. Large numbers for this counter ** may indicate opportunities for performance improvement through ** careful use of indices.
    ** ** [[SQLITE_STMTSTATUS_SORT]]
    SQLITE_STMTSTATUS_SORT
    **
    ^This is the number of sort operations that have occurred. ** A non-zero value in this counter may indicate an opportunity to ** improvement performance through careful use of indices.
    ** ** [[SQLITE_STMTSTATUS_AUTOINDEX]]
    SQLITE_STMTSTATUS_AUTOINDEX
    **
    ^This is the number of rows inserted into transient indices that ** were created automatically in order to help joins run faster. ** A non-zero value in this counter may indicate an opportunity to ** improvement performance by adding permanent indices that do not ** need to be reinitialized each time the statement is run.
    **
    */ #define SQLITE_STMTSTATUS_FULLSCAN_STEP 1 #define SQLITE_STMTSTATUS_SORT 2 #define SQLITE_STMTSTATUS_AUTOINDEX 3 /* ** CAPI3REF: Custom Page Cache Object ** ** The sqlite3_pcache type is opaque. It is implemented by ** the pluggable module. The SQLite core has no knowledge of ** its size or internal structure and never deals with the ** sqlite3_pcache object except by holding and passing pointers ** to the object. ** ** See [sqlite3_pcache_methods2] for additional information. */ typedef struct sqlite3_pcache sqlite3_pcache; /* ** CAPI3REF: Custom Page Cache Object ** ** The sqlite3_pcache_page object represents a single page in the ** page cache. The page cache will allocate instances of this ** object. Various methods of the page cache use pointers to instances ** of this object as parameters or as their return value. ** ** See [sqlite3_pcache_methods2] for additional information. */ typedef struct sqlite3_pcache_page sqlite3_pcache_page; struct sqlite3_pcache_page { void *pBuf; /* The content of the page */ void *pExtra; /* Extra information associated with the page */ }; /* ** CAPI3REF: Application Defined Page Cache. ** KEYWORDS: {page cache} ** ** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE2], ...) interface can ** register an alternative page cache implementation by passing in an ** instance of the sqlite3_pcache_methods2 structure.)^ ** In many applications, most of the heap memory allocated by ** SQLite is used for the page cache. ** By implementing a ** custom page cache using this API, an application can better control ** the amount of memory consumed by SQLite, the way in which ** that memory is allocated and released, and the policies used to ** determine exactly which parts of a database file are cached and for ** how long. ** ** The alternative page cache mechanism is an ** extreme measure that is only needed by the most demanding applications. ** The built-in page cache is recommended for most uses. ** ** ^(The contents of the sqlite3_pcache_methods2 structure are copied to an ** internal buffer by SQLite within the call to [sqlite3_config]. Hence ** the application may discard the parameter after the call to ** [sqlite3_config()] returns.)^ ** ** [[the xInit() page cache method]] ** ^(The xInit() method is called once for each effective ** call to [sqlite3_initialize()])^ ** (usually only once during the lifetime of the process). ^(The xInit() ** method is passed a copy of the sqlite3_pcache_methods2.pArg value.)^ ** The intent of the xInit() method is to set up global data structures ** required by the custom page cache implementation. ** ^(If the xInit() method is NULL, then the ** built-in default page cache is used instead of the application defined ** page cache.)^ ** ** [[the xShutdown() page cache method]] ** ^The xShutdown() method is called by [sqlite3_shutdown()]. ** It can be used to clean up ** any outstanding resources before process shutdown, if required. ** ^The xShutdown() method may be NULL. ** ** ^SQLite automatically serializes calls to the xInit method, ** so the xInit method need not be threadsafe. ^The ** xShutdown method is only called from [sqlite3_shutdown()] so it does ** not need to be threadsafe either. All other methods must be threadsafe ** in multithreaded applications. ** ** ^SQLite will never invoke xInit() more than once without an intervening ** call to xShutdown(). ** ** [[the xCreate() page cache methods]] ** ^SQLite invokes the xCreate() method to construct a new cache instance. ** SQLite will typically create one cache instance for each open database file, ** though this is not guaranteed. ^The ** first parameter, szPage, is the size in bytes of the pages that must ** be allocated by the cache. ^szPage will always a power of two. ^The ** second parameter szExtra is a number of bytes of extra storage ** associated with each page cache entry. ^The szExtra parameter will ** a number less than 250. SQLite will use the ** extra szExtra bytes on each page to store metadata about the underlying ** database page on disk. The value passed into szExtra depends ** on the SQLite version, the target platform, and how SQLite was compiled. ** ^The third argument to xCreate(), bPurgeable, is true if the cache being ** created will be used to cache database pages of a file stored on disk, or ** false if it is used for an in-memory database. The cache implementation ** does not have to do anything special based with the value of bPurgeable; ** it is purely advisory. ^On a cache where bPurgeable is false, SQLite will ** never invoke xUnpin() except to deliberately delete a page. ** ^In other words, calls to xUnpin() on a cache with bPurgeable set to ** false will always have the "discard" flag set to true. ** ^Hence, a cache created with bPurgeable false will ** never contain any unpinned pages. ** ** [[the xCachesize() page cache method]] ** ^(The xCachesize() method may be called at any time by SQLite to set the ** suggested maximum cache-size (number of pages stored by) the cache ** instance passed as the first argument. This is the value configured using ** the SQLite "[PRAGMA cache_size]" command.)^ As with the bPurgeable ** parameter, the implementation is not required to do anything with this ** value; it is advisory only. ** ** [[the xPagecount() page cache methods]] ** The xPagecount() method must return the number of pages currently ** stored in the cache, both pinned and unpinned. ** ** [[the xFetch() page cache methods]] ** The xFetch() method locates a page in the cache and returns a pointer to ** an sqlite3_pcache_page object associated with that page, or a NULL pointer. ** The pBuf element of the returned sqlite3_pcache_page object will be a ** pointer to a buffer of szPage bytes used to store the content of a ** single database page. The pExtra element of sqlite3_pcache_page will be ** a pointer to the szExtra bytes of extra storage that SQLite has requested ** for each entry in the page cache. ** ** The page to be fetched is determined by the key. ^The minimum key value ** is 1. After it has been retrieved using xFetch, the page is considered ** to be "pinned". ** ** If the requested page is already in the page cache, then the page cache ** implementation must return a pointer to the page buffer with its content ** intact. If the requested page is not already in the cache, then the ** cache implementation should use the value of the createFlag ** parameter to help it determined what action to take: ** ** **
    createFlag Behaviour when page is not already in cache **
    0 Do not allocate a new page. Return NULL. **
    1 Allocate a new page if it easy and convenient to do so. ** Otherwise return NULL. **
    2 Make every effort to allocate a new page. Only return ** NULL if allocating a new page is effectively impossible. **
    ** ** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite ** will only use a createFlag of 2 after a prior call with a createFlag of 1 ** failed.)^ In between the to xFetch() calls, SQLite may ** attempt to unpin one or more cache pages by spilling the content of ** pinned pages to disk and synching the operating system disk cache. ** ** [[the xUnpin() page cache method]] ** ^xUnpin() is called by SQLite with a pointer to a currently pinned page ** as its second argument. If the third parameter, discard, is non-zero, ** then the page must be evicted from the cache. ** ^If the discard parameter is ** zero, then the page may be discarded or retained at the discretion of ** page cache implementation. ^The page cache implementation ** may choose to evict unpinned pages at any time. ** ** The cache must not perform any reference counting. A single ** call to xUnpin() unpins the page regardless of the number of prior calls ** to xFetch(). ** ** [[the xRekey() page cache methods]] ** The xRekey() method is used to change the key value associated with the ** page passed as the second argument. If the cache ** previously contains an entry associated with newKey, it must be ** discarded. ^Any prior cache entry associated with newKey is guaranteed not ** to be pinned. ** ** When SQLite calls the xTruncate() method, the cache must discard all ** existing cache entries with page numbers (keys) greater than or equal ** to the value of the iLimit parameter passed to xTruncate(). If any ** of these pages are pinned, they are implicitly unpinned, meaning that ** they can be safely discarded. ** ** [[the xDestroy() page cache method]] ** ^The xDestroy() method is used to delete a cache allocated by xCreate(). ** All resources associated with the specified cache should be freed. ^After ** calling the xDestroy() method, SQLite considers the [sqlite3_pcache*] ** handle invalid, and will not use it with any other sqlite3_pcache_methods2 ** functions. ** ** [[the xShrink() page cache method]] ** ^SQLite invokes the xShrink() method when it wants the page cache to ** free up as much of heap memory as possible. The page cache implementation ** is not obligated to free any memory, but well-behaved implementations should ** do their best. */ typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2; struct sqlite3_pcache_methods2 { int iVersion; void *pArg; int (*xInit)(void*); void (*xShutdown)(void*); sqlite3_pcache *(*xCreate)(int szPage, int szExtra, int bPurgeable); void (*xCachesize)(sqlite3_pcache*, int nCachesize); int (*xPagecount)(sqlite3_pcache*); sqlite3_pcache_page *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag); void (*xUnpin)(sqlite3_pcache*, sqlite3_pcache_page*, int discard); void (*xRekey)(sqlite3_pcache*, sqlite3_pcache_page*, unsigned oldKey, unsigned newKey); void (*xTruncate)(sqlite3_pcache*, unsigned iLimit); void (*xDestroy)(sqlite3_pcache*); void (*xShrink)(sqlite3_pcache*); }; /* ** This is the obsolete pcache_methods object that has now been replaced ** by sqlite3_pcache_methods2. This object is not used by SQLite. It is ** retained in the header file for backwards compatibility only. */ typedef struct sqlite3_pcache_methods sqlite3_pcache_methods; struct sqlite3_pcache_methods { void *pArg; int (*xInit)(void*); void (*xShutdown)(void*); sqlite3_pcache *(*xCreate)(int szPage, int bPurgeable); void (*xCachesize)(sqlite3_pcache*, int nCachesize); int (*xPagecount)(sqlite3_pcache*); void *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag); void (*xUnpin)(sqlite3_pcache*, void*, int discard); void (*xRekey)(sqlite3_pcache*, void*, unsigned oldKey, unsigned newKey); void (*xTruncate)(sqlite3_pcache*, unsigned iLimit); void (*xDestroy)(sqlite3_pcache*); }; /* ** CAPI3REF: Online Backup Object ** ** The sqlite3_backup object records state information about an ongoing ** online backup operation. ^The sqlite3_backup object is created by ** a call to [sqlite3_backup_init()] and is destroyed by a call to ** [sqlite3_backup_finish()]. ** ** See Also: [Using the SQLite Online Backup API] */ typedef struct sqlite3_backup sqlite3_backup; /* ** CAPI3REF: Online Backup API. ** ** The backup API copies the content of one database into another. ** It is useful either for creating backups of databases or ** for copying in-memory databases to or from persistent files. ** ** See Also: [Using the SQLite Online Backup API] ** ** ^SQLite holds a write transaction open on the destination database file ** for the duration of the backup operation. ** ^The source database is read-locked only while it is being read; ** it is not locked continuously for the entire backup operation. ** ^Thus, the backup may be performed on a live source database without ** preventing other database connections from ** reading or writing to the source database while the backup is underway. ** ** ^(To perform a backup operation: **
      **
    1. sqlite3_backup_init() is called once to initialize the ** backup, **
    2. sqlite3_backup_step() is called one or more times to transfer ** the data between the two databases, and finally **
    3. sqlite3_backup_finish() is called to release all resources ** associated with the backup operation. **
    )^ ** There should be exactly one call to sqlite3_backup_finish() for each ** successful call to sqlite3_backup_init(). ** ** [[sqlite3_backup_init()]] sqlite3_backup_init() ** ** ^The D and N arguments to sqlite3_backup_init(D,N,S,M) are the ** [database connection] associated with the destination database ** and the database name, respectively. ** ^The database name is "main" for the main database, "temp" for the ** temporary database, or the name specified after the AS keyword in ** an [ATTACH] statement for an attached database. ** ^The S and M arguments passed to ** sqlite3_backup_init(D,N,S,M) identify the [database connection] ** and database name of the source database, respectively. ** ^The source and destination [database connections] (parameters S and D) ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with ** an error. ** ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is ** returned and an error code and error message are stored in the ** destination [database connection] D. ** ^The error code and message for the failed call to sqlite3_backup_init() ** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or ** [sqlite3_errmsg16()] functions. ** ^A successful call to sqlite3_backup_init() returns a pointer to an ** [sqlite3_backup] object. ** ^The [sqlite3_backup] object may be used with the sqlite3_backup_step() and ** sqlite3_backup_finish() functions to perform the specified backup ** operation. ** ** [[sqlite3_backup_step()]] sqlite3_backup_step() ** ** ^Function sqlite3_backup_step(B,N) will copy up to N pages between ** the source and destination databases specified by [sqlite3_backup] object B. ** ^If N is negative, all remaining source pages are copied. ** ^If sqlite3_backup_step(B,N) successfully copies N pages and there ** are still more pages to be copied, then the function returns [SQLITE_OK]. ** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages ** from source to destination, then it returns [SQLITE_DONE]. ** ^If an error occurs while running sqlite3_backup_step(B,N), ** then an [error code] is returned. ^As well as [SQLITE_OK] and ** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY], ** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code. ** ** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if **
      **
    1. the destination database was opened read-only, or **
    2. the destination database is using write-ahead-log journaling ** and the destination and source page sizes differ, or **
    3. the destination database is an in-memory database and the ** destination and source page sizes differ. **
    )^ ** ** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then ** the [sqlite3_busy_handler | busy-handler function] ** is invoked (if one is specified). ^If the ** busy-handler returns non-zero before the lock is available, then ** [SQLITE_BUSY] is returned to the caller. ^In this case the call to ** sqlite3_backup_step() can be retried later. ^If the source ** [database connection] ** is being used to write to the source database when sqlite3_backup_step() ** is called, then [SQLITE_LOCKED] is returned immediately. ^Again, in this ** case the call to sqlite3_backup_step() can be retried later on. ^(If ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or ** [SQLITE_READONLY] is returned, then ** there is no point in retrying the call to sqlite3_backup_step(). These ** errors are considered fatal.)^ The application must accept ** that the backup operation has failed and pass the backup operation handle ** to the sqlite3_backup_finish() to release associated resources. ** ** ^The first call to sqlite3_backup_step() obtains an exclusive lock ** on the destination file. ^The exclusive lock is not released until either ** sqlite3_backup_finish() is called or the backup operation is complete ** and sqlite3_backup_step() returns [SQLITE_DONE]. ^Every call to ** sqlite3_backup_step() obtains a [shared lock] on the source database that ** lasts for the duration of the sqlite3_backup_step() call. ** ^Because the source database is not locked between calls to ** sqlite3_backup_step(), the source database may be modified mid-way ** through the backup process. ^If the source database is modified by an ** external process or via a database connection other than the one being ** used by the backup operation, then the backup will be automatically ** restarted by the next call to sqlite3_backup_step(). ^If the source ** database is modified by the using the same database connection as is used ** by the backup operation, then the backup database is automatically ** updated at the same time. ** ** [[sqlite3_backup_finish()]] sqlite3_backup_finish() ** ** When sqlite3_backup_step() has returned [SQLITE_DONE], or when the ** application wishes to abandon the backup operation, the application ** should destroy the [sqlite3_backup] by passing it to sqlite3_backup_finish(). ** ^The sqlite3_backup_finish() interfaces releases all ** resources associated with the [sqlite3_backup] object. ** ^If sqlite3_backup_step() has not yet returned [SQLITE_DONE], then any ** active write-transaction on the destination database is rolled back. ** The [sqlite3_backup] object is invalid ** and may not be used following a call to sqlite3_backup_finish(). ** ** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no ** sqlite3_backup_step() errors occurred, regardless or whether or not ** sqlite3_backup_step() completed. ** ^If an out-of-memory condition or IO error occurred during any prior ** sqlite3_backup_step() call on the same [sqlite3_backup] object, then ** sqlite3_backup_finish() returns the corresponding [error code]. ** ** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step() ** is not a permanent error and does not affect the return value of ** sqlite3_backup_finish(). ** ** [[sqlite3_backup__remaining()]] [[sqlite3_backup_pagecount()]] ** sqlite3_backup_remaining() and sqlite3_backup_pagecount() ** ** ^Each call to sqlite3_backup_step() sets two values inside ** the [sqlite3_backup] object: the number of pages still to be backed ** up and the total number of pages in the source database file. ** The sqlite3_backup_remaining() and sqlite3_backup_pagecount() interfaces ** retrieve these two values, respectively. ** ** ^The values returned by these functions are only updated by ** sqlite3_backup_step(). ^If the source database is modified during a backup ** operation, then the values are not updated to account for any extra ** pages that need to be updated or the size of the source database file ** changing. ** ** Concurrent Usage of Database Handles ** ** ^The source [database connection] may be used by the application for other ** purposes while a backup operation is underway or being initialized. ** ^If SQLite is compiled and configured to support threadsafe database ** connections, then the source database connection may be used concurrently ** from within other threads. ** ** However, the application must guarantee that the destination ** [database connection] is not passed to any other API (by any thread) after ** sqlite3_backup_init() is called and before the corresponding call to ** sqlite3_backup_finish(). SQLite does not currently check to see ** if the application incorrectly accesses the destination [database connection] ** and so no error code is reported, but the operations may malfunction ** nevertheless. Use of the destination database connection while a ** backup is in progress might also also cause a mutex deadlock. ** ** If running in [shared cache mode], the application must ** guarantee that the shared cache used by the destination database ** is not accessed while the backup is running. In practice this means ** that the application must guarantee that the disk file being ** backed up to is not accessed by any connection within the process, ** not just the specific connection that was passed to sqlite3_backup_init(). ** ** The [sqlite3_backup] object itself is partially threadsafe. Multiple ** threads may safely make multiple concurrent calls to sqlite3_backup_step(). ** However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount() ** APIs are not strictly speaking threadsafe. If they are invoked at the ** same time as another thread is invoking sqlite3_backup_step() it is ** possible that they return invalid values. */ SQLITE_API sqlite3_backup *sqlite3_backup_init( sqlite3 *pDest, /* Destination database handle */ const char *zDestName, /* Destination database name */ sqlite3 *pSource, /* Source database handle */ const char *zSourceName /* Source database name */ ); SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage); SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p); SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p); SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); /* ** CAPI3REF: Unlock Notification ** ** ^When running in shared-cache mode, a database operation may fail with ** an [SQLITE_LOCKED] error if the required locks on the shared-cache or ** individual tables within the shared-cache cannot be obtained. See ** [SQLite Shared-Cache Mode] for a description of shared-cache locking. ** ^This API may be used to register a callback that SQLite will invoke ** when the connection currently holding the required lock relinquishes it. ** ^This API is only available if the library was compiled with the ** [SQLITE_ENABLE_UNLOCK_NOTIFY] C-preprocessor symbol defined. ** ** See Also: [Using the SQLite Unlock Notification Feature]. ** ** ^Shared-cache locks are released when a database connection concludes ** its current transaction, either by committing it or rolling it back. ** ** ^When a connection (known as the blocked connection) fails to obtain a ** shared-cache lock and SQLITE_LOCKED is returned to the caller, the ** identity of the database connection (the blocking connection) that ** has locked the required resource is stored internally. ^After an ** application receives an SQLITE_LOCKED error, it may call the ** sqlite3_unlock_notify() method with the blocked connection handle as ** the first argument to register for a callback that will be invoked ** when the blocking connections current transaction is concluded. ^The ** callback is invoked from within the [sqlite3_step] or [sqlite3_close] ** call that concludes the blocking connections transaction. ** ** ^(If sqlite3_unlock_notify() is called in a multi-threaded application, ** there is a chance that the blocking connection will have already ** concluded its transaction by the time sqlite3_unlock_notify() is invoked. ** If this happens, then the specified callback is invoked immediately, ** from within the call to sqlite3_unlock_notify().)^ ** ** ^If the blocked connection is attempting to obtain a write-lock on a ** shared-cache table, and more than one other connection currently holds ** a read-lock on the same table, then SQLite arbitrarily selects one of ** the other connections to use as the blocking connection. ** ** ^(There may be at most one unlock-notify callback registered by a ** blocked connection. If sqlite3_unlock_notify() is called when the ** blocked connection already has a registered unlock-notify callback, ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is ** called with a NULL pointer as its second argument, then any existing ** unlock-notify callback is canceled. ^The blocked connections ** unlock-notify callback may also be canceled by closing the blocked ** connection using [sqlite3_close()]. ** ** The unlock-notify callback is not reentrant. If an application invokes ** any sqlite3_xxx API functions from within an unlock-notify callback, a ** crash or deadlock may be the result. ** ** ^Unless deadlock is detected (see below), sqlite3_unlock_notify() always ** returns SQLITE_OK. ** ** Callback Invocation Details ** ** When an unlock-notify callback is registered, the application provides a ** single void* pointer that is passed to the callback when it is invoked. ** However, the signature of the callback function allows SQLite to pass ** it an array of void* context pointers. The first argument passed to ** an unlock-notify callback is a pointer to an array of void* pointers, ** and the second is the number of entries in the array. ** ** When a blocking connections transaction is concluded, there may be ** more than one blocked connection that has registered for an unlock-notify ** callback. ^If two or more such blocked connections have specified the ** same callback function, then instead of invoking the callback function ** multiple times, it is invoked once with the set of void* context pointers ** specified by the blocked connections bundled together into an array. ** This gives the application an opportunity to prioritize any actions ** related to the set of unblocked database connections. ** ** Deadlock Detection ** ** Assuming that after registering for an unlock-notify callback a ** database waits for the callback to be issued before taking any further ** action (a reasonable assumption), then using this API may cause the ** application to deadlock. For example, if connection X is waiting for ** connection Y's transaction to be concluded, and similarly connection ** Y is waiting on connection X's transaction, then neither connection ** will proceed and the system may remain deadlocked indefinitely. ** ** To avoid this scenario, the sqlite3_unlock_notify() performs deadlock ** detection. ^If a given call to sqlite3_unlock_notify() would put the ** system in a deadlocked state, then SQLITE_LOCKED is returned and no ** unlock-notify callback is registered. The system is said to be in ** a deadlocked state if connection A has registered for an unlock-notify ** callback on the conclusion of connection B's transaction, and connection ** B has itself registered for an unlock-notify callback when connection ** A's transaction is concluded. ^Indirect deadlock is also detected, so ** the system is also considered to be deadlocked if connection B has ** registered for an unlock-notify callback on the conclusion of connection ** C's transaction, where connection C is waiting on connection A. ^Any ** number of levels of indirection are allowed. ** ** The "DROP TABLE" Exception ** ** When a call to [sqlite3_step()] returns SQLITE_LOCKED, it is almost ** always appropriate to call sqlite3_unlock_notify(). There is however, ** one exception. When executing a "DROP TABLE" or "DROP INDEX" statement, ** SQLite checks if there are any currently executing SELECT statements ** that belong to the same connection. If there are, SQLITE_LOCKED is ** returned. In this case there is no "blocking connection", so invoking ** sqlite3_unlock_notify() results in the unlock-notify callback being ** invoked immediately. If the application then re-attempts the "DROP TABLE" ** or "DROP INDEX" query, an infinite loop might be the result. ** ** One way around this problem is to check the extended error code returned ** by an sqlite3_step() call. ^(If there is a blocking connection, then the ** extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in ** the special "DROP TABLE/INDEX" case, the extended error code is just ** SQLITE_LOCKED.)^ */ SQLITE_API int sqlite3_unlock_notify( sqlite3 *pBlocked, /* Waiting connection */ void (*xNotify)(void **apArg, int nArg), /* Callback function to invoke */ void *pNotifyArg /* Argument to pass to xNotify */ ); /* ** CAPI3REF: String Comparison ** ** ^The [sqlite3_strnicmp()] API allows applications and extensions to ** compare the contents of two buffers containing UTF-8 strings in a ** case-independent fashion, using the same definition of case independence ** that SQLite uses internally when comparing identifiers. */ SQLITE_API int sqlite3_strnicmp(const char *, const char *, int); /* ** CAPI3REF: Error Logging Interface ** ** ^The [sqlite3_log()] interface writes a message into the error log ** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()]. ** ^If logging is enabled, the zFormat string and subsequent arguments are ** used with [sqlite3_snprintf()] to generate the final output string. ** ** The sqlite3_log() interface is intended for use by extensions such as ** virtual tables, collating functions, and SQL functions. While there is ** nothing to prevent an application from calling sqlite3_log(), doing so ** is considered bad form. ** ** The zFormat string must not be NULL. ** ** To avoid deadlocks and other threading problems, the sqlite3_log() routine ** will not use dynamically allocated memory. The log message is stored in ** a fixed-length buffer on the stack. If the log message is longer than ** a few hundred characters, it will be truncated to the length of the ** buffer. */ SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); /* ** CAPI3REF: Write-Ahead Log Commit Hook ** ** ^The [sqlite3_wal_hook()] function is used to register a callback that ** will be invoked each time a database connection commits data to a ** [write-ahead log] (i.e. whenever a transaction is committed in ** [journal_mode | journal_mode=WAL mode]). ** ** ^The callback is invoked by SQLite after the commit has taken place and ** the associated write-lock on the database released, so the implementation ** may read, write or [checkpoint] the database as required. ** ** ^The first parameter passed to the callback function when it is invoked ** is a copy of the third parameter passed to sqlite3_wal_hook() when ** registering the callback. ^The second is a copy of the database handle. ** ^The third parameter is the name of the database that was written to - ** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter ** is the number of pages currently in the write-ahead log file, ** including those that were just committed. ** ** The callback function should normally return [SQLITE_OK]. ^If an error ** code is returned, that error will propagate back up through the ** SQLite code base to cause the statement that provoked the callback ** to report an error, though the commit will have still occurred. If the ** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value ** that does not correspond to any valid SQLite error code, the results ** are undefined. ** ** A single database handle may have at most a single write-ahead log callback ** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any ** previously registered write-ahead log callback. ^Note that the ** [sqlite3_wal_autocheckpoint()] interface and the ** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will ** those overwrite any prior [sqlite3_wal_hook()] settings. */ SQLITE_API void *sqlite3_wal_hook( sqlite3*, int(*)(void *,sqlite3*,const char*,int), void* ); /* ** CAPI3REF: Configure an auto-checkpoint ** ** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around ** [sqlite3_wal_hook()] that causes any database on [database connection] D ** to automatically [checkpoint] ** after committing a transaction if there are N or ** more frames in the [write-ahead log] file. ^Passing zero or ** a negative value as the nFrame parameter disables automatic ** checkpoints entirely. ** ** ^The callback registered by this function replaces any existing callback ** registered using [sqlite3_wal_hook()]. ^Likewise, registering a callback ** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism ** configured by this function. ** ** ^The [wal_autocheckpoint pragma] can be used to invoke this interface ** from SQL. ** ** ^Every new [database connection] defaults to having the auto-checkpoint ** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT] ** pages. The use of this interface ** is only necessary if the default setting is found to be suboptimal ** for a particular application. */ SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N); /* ** CAPI3REF: Checkpoint a database ** ** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X ** on [database connection] D to be [checkpointed]. ^If X is NULL or an ** empty string, then a checkpoint is run on all databases of ** connection D. ^If the database connection D is not in ** [WAL | write-ahead log mode] then this interface is a harmless no-op. ** ** ^The [wal_checkpoint pragma] can be used to invoke this interface ** from SQL. ^The [sqlite3_wal_autocheckpoint()] interface and the ** [wal_autocheckpoint pragma] can be used to cause this interface to be ** run whenever the WAL reaches a certain size threshold. ** ** See also: [sqlite3_wal_checkpoint_v2()] */ SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb); /* ** CAPI3REF: Checkpoint a database ** ** Run a checkpoint operation on WAL database zDb attached to database ** handle db. The specific operation is determined by the value of the ** eMode parameter: ** **
    **
    SQLITE_CHECKPOINT_PASSIVE
    ** Checkpoint as many frames as possible without waiting for any database ** readers or writers to finish. Sync the db file if all frames in the log ** are checkpointed. This mode is the same as calling ** sqlite3_wal_checkpoint(). The busy-handler callback is never invoked. ** **
    SQLITE_CHECKPOINT_FULL
    ** This mode blocks (calls the busy-handler callback) until there is no ** database writer and all readers are reading from the most recent database ** snapshot. It then checkpoints all frames in the log file and syncs the ** database file. This call blocks database writers while it is running, ** but not database readers. ** **
    SQLITE_CHECKPOINT_RESTART
    ** This mode works the same way as SQLITE_CHECKPOINT_FULL, except after ** checkpointing the log file it blocks (calls the busy-handler callback) ** until all readers are reading from the database file only. This ensures ** that the next client to write to the database file restarts the log file ** from the beginning. This call blocks database writers while it is running, ** but not database readers. **
    ** ** If pnLog is not NULL, then *pnLog is set to the total number of frames in ** the log file before returning. If pnCkpt is not NULL, then *pnCkpt is set to ** the total number of checkpointed frames (including any that were already ** checkpointed when this function is called). *pnLog and *pnCkpt may be ** populated even if sqlite3_wal_checkpoint_v2() returns other than SQLITE_OK. ** If no values are available because of an error, they are both set to -1 ** before returning to communicate this to the caller. ** ** All calls obtain an exclusive "checkpoint" lock on the database file. If ** any other process is running a checkpoint operation at the same time, the ** lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a ** busy-handler configured, it will not be invoked in this case. ** ** The SQLITE_CHECKPOINT_FULL and RESTART modes also obtain the exclusive ** "writer" lock on the database file. If the writer lock cannot be obtained ** immediately, and a busy-handler is configured, it is invoked and the writer ** lock retried until either the busy-handler returns 0 or the lock is ** successfully obtained. The busy-handler is also invoked while waiting for ** database readers as described above. If the busy-handler returns 0 before ** the writer lock is obtained or while waiting for database readers, the ** checkpoint operation proceeds from that point in the same way as ** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible ** without blocking any further. SQLITE_BUSY is returned in this case. ** ** If parameter zDb is NULL or points to a zero length string, then the ** specified operation is attempted on all WAL databases. In this case the ** values written to output parameters *pnLog and *pnCkpt are undefined. If ** an SQLITE_BUSY error is encountered when processing one or more of the ** attached WAL databases, the operation is still attempted on any remaining ** attached databases and SQLITE_BUSY is returned to the caller. If any other ** error occurs while processing an attached database, processing is abandoned ** and the error code returned to the caller immediately. If no error ** (SQLITE_BUSY or otherwise) is encountered while processing the attached ** databases, SQLITE_OK is returned. ** ** If database zDb is the name of an attached database that is not in WAL ** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If ** zDb is not NULL (or a zero length string) and is not the name of any ** attached database, SQLITE_ERROR is returned to the caller. */ SQLITE_API int sqlite3_wal_checkpoint_v2( sqlite3 *db, /* Database handle */ const char *zDb, /* Name of attached database (or NULL) */ int eMode, /* SQLITE_CHECKPOINT_* value */ int *pnLog, /* OUT: Size of WAL log in frames */ int *pnCkpt /* OUT: Total number of frames checkpointed */ ); /* ** CAPI3REF: Checkpoint operation parameters ** ** These constants can be used as the 3rd parameter to ** [sqlite3_wal_checkpoint_v2()]. See the [sqlite3_wal_checkpoint_v2()] ** documentation for additional information about the meaning and use of ** each of these values. */ #define SQLITE_CHECKPOINT_PASSIVE 0 #define SQLITE_CHECKPOINT_FULL 1 #define SQLITE_CHECKPOINT_RESTART 2 /* ** CAPI3REF: Virtual Table Interface Configuration ** ** This function may be called by either the [xConnect] or [xCreate] method ** of a [virtual table] implementation to configure ** various facets of the virtual table interface. ** ** If this interface is invoked outside the context of an xConnect or ** xCreate virtual table method then the behavior is undefined. ** ** At present, there is only one option that may be configured using ** this function. (See [SQLITE_VTAB_CONSTRAINT_SUPPORT].) Further options ** may be added in the future. */ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); /* ** CAPI3REF: Virtual Table Configuration Options ** ** These macros define the various options to the ** [sqlite3_vtab_config()] interface that [virtual table] implementations ** can use to customize and optimize their behavior. ** **
    **
    SQLITE_VTAB_CONSTRAINT_SUPPORT **
    Calls of the form ** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported, ** where X is an integer. If X is zero, then the [virtual table] whose ** [xCreate] or [xConnect] method invoked [sqlite3_vtab_config()] does not ** support constraints. In this configuration (which is the default) if ** a call to the [xUpdate] method returns [SQLITE_CONSTRAINT], then the entire ** statement is rolled back as if [ON CONFLICT | OR ABORT] had been ** specified as part of the users SQL statement, regardless of the actual ** ON CONFLICT mode specified. ** ** If X is non-zero, then the virtual table implementation guarantees ** that if [xUpdate] returns [SQLITE_CONSTRAINT], it will do so before ** any modifications to internal or persistent data structures have been made. ** If the [ON CONFLICT] mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite ** is able to roll back a statement or database transaction, and abandon ** or continue processing the current SQL statement as appropriate. ** If the ON CONFLICT mode is REPLACE and the [xUpdate] method returns ** [SQLITE_CONSTRAINT], SQLite handles this as if the ON CONFLICT mode ** had been ABORT. ** ** Virtual table implementations that are required to handle OR REPLACE ** must do so within the [xUpdate] method. If a call to the ** [sqlite3_vtab_on_conflict()] function indicates that the current ON ** CONFLICT policy is REPLACE, the virtual table implementation should ** silently replace the appropriate rows within the xUpdate callback and ** return SQLITE_OK. Or, if this is not possible, it may return ** SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT ** constraint handling. **
    */ #define SQLITE_VTAB_CONSTRAINT_SUPPORT 1 /* ** CAPI3REF: Determine The Virtual Table Conflict Policy ** ** This function may only be called from within a call to the [xUpdate] method ** of a [virtual table] implementation for an INSERT or UPDATE operation. ^The ** value returned is one of [SQLITE_ROLLBACK], [SQLITE_IGNORE], [SQLITE_FAIL], ** [SQLITE_ABORT], or [SQLITE_REPLACE], according to the [ON CONFLICT] mode ** of the SQL statement that triggered the call to the [xUpdate] method of the ** [virtual table]. */ SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *); /* ** CAPI3REF: Conflict resolution modes ** ** These constants are returned by [sqlite3_vtab_on_conflict()] to ** inform a [virtual table] implementation what the [ON CONFLICT] mode ** is for the SQL statement being evaluated. ** ** Note that the [SQLITE_IGNORE] constant is also used as a potential ** return value from the [sqlite3_set_authorizer()] callback and that ** [SQLITE_ABORT] is also a [result code]. */ #define SQLITE_ROLLBACK 1 /* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */ #define SQLITE_FAIL 3 /* #define SQLITE_ABORT 4 // Also an error code */ #define SQLITE_REPLACE 5 /* ** Undo the hack that converts floating point types to integer for ** builds on processors without floating point support. */ #ifdef SQLITE_OMIT_FLOATING_POINT # undef double #endif #if 0 } /* End of the 'extern "C"' block */ #endif #endif /* ** 2010 August 30 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* */ #ifndef _SQLITE3RTREE_H_ #define _SQLITE3RTREE_H_ #if 0 extern "C" { #endif typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry; /* ** Register a geometry callback named zGeom that can be used as part of an ** R-Tree geometry query as follows: ** ** SELECT ... FROM WHERE MATCH $zGeom(... params ...) */ SQLITE_API int sqlite3_rtree_geometry_callback( sqlite3 *db, const char *zGeom, int (*xGeom)(sqlite3_rtree_geometry *, int nCoord, double *aCoord, int *pRes), void *pContext ); /* ** A pointer to a structure of the following type is passed as the first ** argument to callbacks registered using rtree_geometry_callback(). */ struct sqlite3_rtree_geometry { void *pContext; /* Copy of pContext passed to s_r_g_c() */ int nParam; /* Size of array aParam[] */ double *aParam; /* Parameters passed to SQL geom function */ void *pUser; /* Callback implementation user data */ void (*xDelUser)(void *); /* Called by SQLite to clean up pUser */ }; #if 0 } /* end of the 'extern "C"' block */ #endif #endif /* ifndef _SQLITE3RTREE_H_ */ /************** End of sqlite3.h *********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ /************** Include hash.h in the middle of sqliteInt.h ******************/ /************** Begin file hash.h ********************************************/ /* ** 2001 September 22 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This is the header file for the generic hash-table implemenation ** used in SQLite. */ #ifndef _SQLITE_HASH_H_ #define _SQLITE_HASH_H_ /* Forward declarations of structures. */ typedef struct Hash Hash; typedef struct HashElem HashElem; /* A complete hash table is an instance of the following structure. ** The internals of this structure are intended to be opaque -- client ** code should not attempt to access or modify the fields of this structure ** directly. Change this structure only by using the routines below. ** However, some of the "procedures" and "functions" for modifying and ** accessing this structure are really macros, so we can't really make ** this structure opaque. ** ** All elements of the hash table are on a single doubly-linked list. ** Hash.first points to the head of this list. ** ** There are Hash.htsize buckets. Each bucket points to a spot in ** the global doubly-linked list. The contents of the bucket are the ** element pointed to plus the next _ht.count-1 elements in the list. ** ** Hash.htsize and Hash.ht may be zero. In that case lookup is done ** by a linear search of the global list. For small tables, the ** Hash.ht table is never allocated because if there are few elements ** in the table, it is faster to do a linear search than to manage ** the hash table. */ struct Hash { unsigned int htsize; /* Number of buckets in the hash table */ unsigned int count; /* Number of entries in this table */ HashElem *first; /* The first element of the array */ struct _ht { /* the hash table */ int count; /* Number of entries with this hash */ HashElem *chain; /* Pointer to first entry with this hash */ } *ht; }; /* Each element in the hash table is an instance of the following ** structure. All elements are stored on a single doubly-linked list. ** ** Again, this structure is intended to be opaque, but it can't really ** be opaque because it is used by macros. */ struct HashElem { HashElem *next, *prev; /* Next and previous elements in the table */ void *data; /* Data associated with this element */ const char *pKey; int nKey; /* Key associated with this element */ }; /* ** Access routines. To delete, insert a NULL pointer. */ SQLITE_PRIVATE void sqlite3HashInit(Hash*); SQLITE_PRIVATE void *sqlite3HashInsert(Hash*, const char *pKey, int nKey, void *pData); SQLITE_PRIVATE void *sqlite3HashFind(const Hash*, const char *pKey, int nKey); SQLITE_PRIVATE void sqlite3HashClear(Hash*); /* ** Macros for looping over all elements of a hash table. The idiom is ** like this: ** ** Hash h; ** HashElem *p; ** ... ** for(p=sqliteHashFirst(&h); p; p=sqliteHashNext(p)){ ** SomeStructure *pData = sqliteHashData(p); ** // do something with pData ** } */ #define sqliteHashFirst(H) ((H)->first) #define sqliteHashNext(E) ((E)->next) #define sqliteHashData(E) ((E)->data) /* #define sqliteHashKey(E) ((E)->pKey) // NOT USED */ /* #define sqliteHashKeysize(E) ((E)->nKey) // NOT USED */ /* ** Number of entries in a hash table */ /* #define sqliteHashCount(H) ((H)->count) // NOT USED */ #endif /* _SQLITE_HASH_H_ */ /************** End of hash.h ************************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ /************** Include parse.h in the middle of sqliteInt.h *****************/ /************** Begin file parse.h *******************************************/ #define TK_SEMI 1 #define TK_EXPLAIN 2 #define TK_QUERY 3 #define TK_PLAN 4 #define TK_BEGIN 5 #define TK_TRANSACTION 6 #define TK_DEFERRED 7 #define TK_IMMEDIATE 8 #define TK_EXCLUSIVE 9 #define TK_COMMIT 10 #define TK_END 11 #define TK_ROLLBACK 12 #define TK_SAVEPOINT 13 #define TK_RELEASE 14 #define TK_TO 15 #define TK_TABLE 16 #define TK_CREATE 17 #define TK_IF 18 #define TK_NOT 19 #define TK_EXISTS 20 #define TK_TEMP 21 #define TK_LP 22 #define TK_RP 23 #define TK_AS 24 #define TK_COMMA 25 #define TK_ID 26 #define TK_INDEXED 27 #define TK_ABORT 28 #define TK_ACTION 29 #define TK_AFTER 30 #define TK_ANALYZE 31 #define TK_ASC 32 #define TK_ATTACH 33 #define TK_BEFORE 34 #define TK_BY 35 #define TK_CASCADE 36 #define TK_CAST 37 #define TK_COLUMNKW 38 #define TK_CONFLICT 39 #define TK_DATABASE 40 #define TK_DESC 41 #define TK_DETACH 42 #define TK_EACH 43 #define TK_FAIL 44 #define TK_FOR 45 #define TK_IGNORE 46 #define TK_INITIALLY 47 #define TK_INSTEAD 48 #define TK_LIKE_KW 49 #define TK_MATCH 50 #define TK_NO 51 #define TK_KEY 52 #define TK_OF 53 #define TK_OFFSET 54 #define TK_PRAGMA 55 #define TK_RAISE 56 #define TK_REPLACE 57 #define TK_RESTRICT 58 #define TK_ROW 59 #define TK_TRIGGER 60 #define TK_VACUUM 61 #define TK_VIEW 62 #define TK_VIRTUAL 63 #define TK_REINDEX 64 #define TK_RENAME 65 #define TK_CTIME_KW 66 #define TK_ANY 67 #define TK_OR 68 #define TK_AND 69 #define TK_IS 70 #define TK_BETWEEN 71 #define TK_IN 72 #define TK_ISNULL 73 #define TK_NOTNULL 74 #define TK_NE 75 #define TK_EQ 76 #define TK_GT 77 #define TK_LE 78 #define TK_LT 79 #define TK_GE 80 #define TK_ESCAPE 81 #define TK_BITAND 82 #define TK_BITOR 83 #define TK_LSHIFT 84 #define TK_RSHIFT 85 #define TK_PLUS 86 #define TK_MINUS 87 #define TK_STAR 88 #define TK_SLASH 89 #define TK_REM 90 #define TK_CONCAT 91 #define TK_COLLATE 92 #define TK_BITNOT 93 #define TK_STRING 94 #define TK_JOIN_KW 95 #define TK_CONSTRAINT 96 #define TK_DEFAULT 97 #define TK_NULL 98 #define TK_PRIMARY 99 #define TK_UNIQUE 100 #define TK_CHECK 101 #define TK_REFERENCES 102 #define TK_AUTOINCR 103 #define TK_ON 104 #define TK_INSERT 105 #define TK_DELETE 106 #define TK_UPDATE 107 #define TK_SET 108 #define TK_DEFERRABLE 109 #define TK_FOREIGN 110 #define TK_DROP 111 #define TK_UNION 112 #define TK_ALL 113 #define TK_EXCEPT 114 #define TK_INTERSECT 115 #define TK_SELECT 116 #define TK_DISTINCT 117 #define TK_DOT 118 #define TK_FROM 119 #define TK_JOIN 120 #define TK_USING 121 #define TK_ORDER 122 #define TK_GROUP 123 #define TK_HAVING 124 #define TK_LIMIT 125 #define TK_WHERE 126 #define TK_INTO 127 #define TK_VALUES 128 #define TK_INTEGER 129 #define TK_FLOAT 130 #define TK_BLOB 131 #define TK_REGISTER 132 #define TK_VARIABLE 133 #define TK_CASE 134 #define TK_WHEN 135 #define TK_THEN 136 #define TK_ELSE 137 #define TK_INDEX 138 #define TK_ALTER 139 #define TK_ADD 140 #define TK_TO_TEXT 141 #define TK_TO_BLOB 142 #define TK_TO_NUMERIC 143 #define TK_TO_INT 144 #define TK_TO_REAL 145 #define TK_ISNOT 146 #define TK_END_OF_FILE 147 #define TK_ILLEGAL 148 #define TK_SPACE 149 #define TK_UNCLOSED_STRING 150 #define TK_FUNCTION 151 #define TK_COLUMN 152 #define TK_AGG_FUNCTION 153 #define TK_AGG_COLUMN 154 #define TK_CONST_FUNC 155 #define TK_UMINUS 156 #define TK_UPLUS 157 /************** End of parse.h ***********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ #include #include #include #include #include /* ** If compiling for a processor that lacks floating point support, ** substitute integer for floating-point */ #ifdef SQLITE_OMIT_FLOATING_POINT # define double sqlite_int64 # define float sqlite_int64 # define LONGDOUBLE_TYPE sqlite_int64 # ifndef SQLITE_BIG_DBL # define SQLITE_BIG_DBL (((sqlite3_int64)1)<<50) # endif # define SQLITE_OMIT_DATETIME_FUNCS 1 # define SQLITE_OMIT_TRACE 1 # undef SQLITE_MIXED_ENDIAN_64BIT_FLOAT # undef SQLITE_HAVE_ISNAN #endif #ifndef SQLITE_BIG_DBL # define SQLITE_BIG_DBL (1e99) #endif /* ** OMIT_TEMPDB is set to 1 if SQLITE_OMIT_TEMPDB is defined, or 0 ** afterward. Having this macro allows us to cause the C compiler ** to omit code used by TEMP tables without messy #ifndef statements. */ #ifdef SQLITE_OMIT_TEMPDB #define OMIT_TEMPDB 1 #else #define OMIT_TEMPDB 0 #endif /* ** The "file format" number is an integer that is incremented whenever ** the VDBE-level file format changes. The following macros define the ** the default file format for new databases and the maximum file format ** that the library can read. */ #define SQLITE_MAX_FILE_FORMAT 4 #ifndef SQLITE_DEFAULT_FILE_FORMAT # define SQLITE_DEFAULT_FILE_FORMAT 4 #endif /* ** Determine whether triggers are recursive by default. This can be ** changed at run-time using a pragma. */ #ifndef SQLITE_DEFAULT_RECURSIVE_TRIGGERS # define SQLITE_DEFAULT_RECURSIVE_TRIGGERS 0 #endif /* ** Provide a default value for SQLITE_TEMP_STORE in case it is not specified ** on the command-line */ #ifndef SQLITE_TEMP_STORE # define SQLITE_TEMP_STORE 1 #endif /* ** GCC does not define the offsetof() macro so we'll have to do it ** ourselves. */ #ifndef offsetof #define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD)) #endif /* ** Check to see if this machine uses EBCDIC. (Yes, believe it or ** not, there are still machines out there that use EBCDIC.) */ #if 'A' == '\301' # define SQLITE_EBCDIC 1 #else # define SQLITE_ASCII 1 #endif /* ** Integers of known sizes. These typedefs might change for architectures ** where the sizes very. Preprocessor macros are available so that the ** types can be conveniently redefined at compile-type. Like this: ** ** cc '-DUINTPTR_TYPE=long long int' ... */ #ifndef UINT32_TYPE # ifdef HAVE_UINT32_T # define UINT32_TYPE uint32_t # else # define UINT32_TYPE unsigned int # endif #endif #ifndef UINT16_TYPE # ifdef HAVE_UINT16_T # define UINT16_TYPE uint16_t # else # define UINT16_TYPE unsigned short int # endif #endif #ifndef INT16_TYPE # ifdef HAVE_INT16_T # define INT16_TYPE int16_t # else # define INT16_TYPE short int # endif #endif #ifndef UINT8_TYPE # ifdef HAVE_UINT8_T # define UINT8_TYPE uint8_t # else # define UINT8_TYPE unsigned char # endif #endif #ifndef INT8_TYPE # ifdef HAVE_INT8_T # define INT8_TYPE int8_t # else # define INT8_TYPE signed char # endif #endif #ifndef LONGDOUBLE_TYPE # define LONGDOUBLE_TYPE long double #endif typedef sqlite_int64 i64; /* 8-byte signed integer */ typedef sqlite_uint64 u64; /* 8-byte unsigned integer */ typedef UINT32_TYPE u32; /* 4-byte unsigned integer */ typedef UINT16_TYPE u16; /* 2-byte unsigned integer */ typedef INT16_TYPE i16; /* 2-byte signed integer */ typedef UINT8_TYPE u8; /* 1-byte unsigned integer */ typedef INT8_TYPE i8; /* 1-byte signed integer */ /* ** SQLITE_MAX_U32 is a u64 constant that is the maximum u64 value ** that can be stored in a u32 without loss of data. The value ** is 0x00000000ffffffff. But because of quirks of some compilers, we ** have to specify the value in the less intuitive manner shown: */ #define SQLITE_MAX_U32 ((((u64)1)<<32)-1) /* ** The datatype used to store estimates of the number of rows in a ** table or index. This is an unsigned integer type. For 99.9% of ** the world, a 32-bit integer is sufficient. But a 64-bit integer ** can be used at compile-time if desired. */ #ifdef SQLITE_64BIT_STATS typedef u64 tRowcnt; /* 64-bit only if requested at compile-time */ #else typedef u32 tRowcnt; /* 32-bit is the default */ #endif /* ** Macros to determine whether the machine is big or little endian, ** evaluated at runtime. */ #ifdef SQLITE_AMALGAMATION SQLITE_PRIVATE const int sqlite3one = 1; #else SQLITE_PRIVATE const int sqlite3one; #endif #if defined(i386) || defined(__i386__) || defined(_M_IX86)\ || defined(__x86_64) || defined(__x86_64__) # define SQLITE_BIGENDIAN 0 # define SQLITE_LITTLEENDIAN 1 # define SQLITE_UTF16NATIVE SQLITE_UTF16LE #else # define SQLITE_BIGENDIAN (*(char *)(&sqlite3one)==0) # define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1) # define SQLITE_UTF16NATIVE (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE) #endif /* ** Constants for the largest and smallest possible 64-bit signed integers. ** These macros are designed to work correctly on both 32-bit and 64-bit ** compilers. */ #define LARGEST_INT64 (0xffffffff|(((i64)0x7fffffff)<<32)) #define SMALLEST_INT64 (((i64)-1) - LARGEST_INT64) /* ** Round up a number to the next larger multiple of 8. This is used ** to force 8-byte alignment on 64-bit architectures. */ #define ROUND8(x) (((x)+7)&~7) /* ** Round down to the nearest multiple of 8 */ #define ROUNDDOWN8(x) ((x)&~7) /* ** Assert that the pointer X is aligned to an 8-byte boundary. This ** macro is used only within assert() to verify that the code gets ** all alignment restrictions correct. ** ** Except, if SQLITE_4_BYTE_ALIGNED_MALLOC is defined, then the ** underlying malloc() implemention might return us 4-byte aligned ** pointers. In that case, only verify 4-byte alignment. */ #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC # define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&3)==0) #else # define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&7)==0) #endif /* ** An instance of the following structure is used to store the busy-handler ** callback for a given sqlite handle. ** ** The sqlite.busyHandler member of the sqlite struct contains the busy ** callback for the database handle. Each pager opened via the sqlite ** handle is passed a pointer to sqlite.busyHandler. The busy-handler ** callback is currently invoked only from within pager.c. */ typedef struct BusyHandler BusyHandler; struct BusyHandler { int (*xFunc)(void *,int); /* The busy callback */ void *pArg; /* First arg to busy callback */ int nBusy; /* Incremented with each busy call */ }; /* ** Name of the master database table. The master database table ** is a special table that holds the names and attributes of all ** user tables and indices. */ #define MASTER_NAME "sqlite_master" #define TEMP_MASTER_NAME "sqlite_temp_master" /* ** The root-page of the master database table. */ #define MASTER_ROOT 1 /* ** The name of the schema table. */ #define SCHEMA_TABLE(x) ((!OMIT_TEMPDB)&&(x==1)?TEMP_MASTER_NAME:MASTER_NAME) /* ** A convenience macro that returns the number of elements in ** an array. */ #define ArraySize(X) ((int)(sizeof(X)/sizeof(X[0]))) /* ** The following value as a destructor means to use sqlite3DbFree(). ** This is an internal extension to SQLITE_STATIC and SQLITE_TRANSIENT. */ #define SQLITE_DYNAMIC ((sqlite3_destructor_type)sqlite3DbFree) /* ** When SQLITE_OMIT_WSD is defined, it means that the target platform does ** not support Writable Static Data (WSD) such as global and static variables. ** All variables must either be on the stack or dynamically allocated from ** the heap. When WSD is unsupported, the variable declarations scattered ** throughout the SQLite code must become constants instead. The SQLITE_WSD ** macro is used for this purpose. And instead of referencing the variable ** directly, we use its constant as a key to lookup the run-time allocated ** buffer that holds real variable. The constant is also the initializer ** for the run-time allocated buffer. ** ** In the usual case where WSD is supported, the SQLITE_WSD and GLOBAL ** macros become no-ops and have zero performance impact. */ #ifdef SQLITE_OMIT_WSD #define SQLITE_WSD const #define GLOBAL(t,v) (*(t*)sqlite3_wsd_find((void*)&(v), sizeof(v))) #define sqlite3GlobalConfig GLOBAL(struct Sqlite3Config, sqlite3Config) SQLITE_API int sqlite3_wsd_init(int N, int J); SQLITE_API void *sqlite3_wsd_find(void *K, int L); #else #define SQLITE_WSD #define GLOBAL(t,v) v #define sqlite3GlobalConfig sqlite3Config #endif /* ** The following macros are used to suppress compiler warnings and to ** make it clear to human readers when a function parameter is deliberately ** left unused within the body of a function. This usually happens when ** a function is called via a function pointer. For example the ** implementation of an SQL aggregate step callback may not use the ** parameter indicating the number of arguments passed to the aggregate, ** if it knows that this is enforced elsewhere. ** ** When a function parameter is not used at all within the body of a function, ** it is generally named "NotUsed" or "NotUsed2" to make things even clearer. ** However, these macros may also be used to suppress warnings related to ** parameters that may or may not be used depending on compilation options. ** For example those parameters only used in assert() statements. In these ** cases the parameters are named as per the usual conventions. */ #define UNUSED_PARAMETER(x) (void)(x) #define UNUSED_PARAMETER2(x,y) UNUSED_PARAMETER(x),UNUSED_PARAMETER(y) /* ** Forward references to structures */ typedef struct AggInfo AggInfo; typedef struct AuthContext AuthContext; typedef struct AutoincInfo AutoincInfo; typedef struct Bitvec Bitvec; typedef struct CollSeq CollSeq; typedef struct Column Column; typedef struct Db Db; typedef struct Schema Schema; typedef struct Expr Expr; typedef struct ExprList ExprList; typedef struct ExprSpan ExprSpan; typedef struct FKey FKey; typedef struct FuncDestructor FuncDestructor; typedef struct FuncDef FuncDef; typedef struct FuncDefHash FuncDefHash; typedef struct IdList IdList; typedef struct Index Index; typedef struct IndexSample IndexSample; typedef struct KeyClass KeyClass; typedef struct KeyInfo KeyInfo; typedef struct Lookaside Lookaside; typedef struct LookasideSlot LookasideSlot; typedef struct Module Module; typedef struct NameContext NameContext; typedef struct Parse Parse; typedef struct RowSet RowSet; typedef struct Savepoint Savepoint; typedef struct Select Select; typedef struct SrcList SrcList; typedef struct StrAccum StrAccum; typedef struct Table Table; typedef struct TableLock TableLock; typedef struct Token Token; typedef struct Trigger Trigger; typedef struct TriggerPrg TriggerPrg; typedef struct TriggerStep TriggerStep; typedef struct UnpackedRecord UnpackedRecord; typedef struct VTable VTable; typedef struct VtabCtx VtabCtx; typedef struct Walker Walker; typedef struct WherePlan WherePlan; typedef struct WhereInfo WhereInfo; typedef struct WhereLevel WhereLevel; /* ** Defer sourcing vdbe.h and btree.h until after the "u8" and ** "BusyHandler" typedefs. vdbe.h also requires a few of the opaque ** pointer types (i.e. FuncDef) defined above. */ /************** Include btree.h in the middle of sqliteInt.h *****************/ /************** Begin file btree.h *******************************************/ /* ** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This header file defines the interface that the sqlite B-Tree file ** subsystem. See comments in the source code for a detailed description ** of what each interface routine does. */ #ifndef _BTREE_H_ #define _BTREE_H_ /* TODO: This definition is just included so other modules compile. It ** needs to be revisited. */ #define SQLITE_N_BTREE_META 10 /* ** If defined as non-zero, auto-vacuum is enabled by default. Otherwise ** it must be turned on for each database using "PRAGMA auto_vacuum = 1". */ #ifndef SQLITE_DEFAULT_AUTOVACUUM #define SQLITE_DEFAULT_AUTOVACUUM 0 #endif #define BTREE_AUTOVACUUM_NONE 0 /* Do not do auto-vacuum */ #define BTREE_AUTOVACUUM_FULL 1 /* Do full auto-vacuum */ #define BTREE_AUTOVACUUM_INCR 2 /* Incremental vacuum */ /* ** Forward declarations of structure */ typedef struct Btree Btree; typedef struct BtCursor BtCursor; typedef struct BtShared BtShared; SQLITE_PRIVATE int sqlite3BtreeOpen( sqlite3_vfs *pVfs, /* VFS to use with this b-tree */ const char *zFilename, /* Name of database file to open */ sqlite3 *db, /* Associated database connection */ Btree **ppBtree, /* Return open Btree* here */ int flags, /* Flags */ int vfsFlags /* Flags passed through to VFS open */ ); /* The flags parameter to sqlite3BtreeOpen can be the bitwise or of the ** following values. ** ** NOTE: These values must match the corresponding PAGER_ values in ** pager.h. */ #define BTREE_OMIT_JOURNAL 1 /* Do not create or use a rollback journal */ #define BTREE_NO_READLOCK 2 /* Omit readlocks on readonly files */ #define BTREE_MEMORY 4 /* This is an in-memory DB */ #define BTREE_SINGLE 8 /* The file contains at most 1 b-tree */ #define BTREE_UNORDERED 16 /* Use of a hash implementation is OK */ SQLITE_PRIVATE int sqlite3BtreeClose(Btree*); SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree*,int); SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int,int); SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree*); SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int nPagesize, int nReserve, int eFix); SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree*); SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree*,int); SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree*); SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree*,int); SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree*); SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *, int); SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *); SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree*,int); SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster); SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree*, int); SQLITE_PRIVATE int sqlite3BtreeCommit(Btree*); SQLITE_PRIVATE int sqlite3BtreeRollback(Btree*); SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree*,int); SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree*, int*, int flags); SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree*); SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree*); SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree*); SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *, int, void(*)(void *)); SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *pBtree); SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *pBtree, int iTab, u8 isWriteLock); SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *, int, int); SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *); SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *); SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *, Btree *); SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *); /* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR ** of the flags shown below. ** ** Every SQLite table must have either BTREE_INTKEY or BTREE_BLOBKEY set. ** With BTREE_INTKEY, the table key is a 64-bit integer and arbitrary data ** is stored in the leaves. (BTREE_INTKEY is used for SQL tables.) With ** BTREE_BLOBKEY, the key is an arbitrary BLOB and no content is stored ** anywhere - the key is the content. (BTREE_BLOBKEY is used for SQL ** indices.) */ #define BTREE_INTKEY 1 /* Table has only 64-bit signed integer keys */ #define BTREE_BLOBKEY 2 /* Table has keys only - no data */ SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree*, int, int*); SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree*, int, int*); SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree*, int); SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *pBtree, int idx, u32 *pValue); SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value); /* ** The second parameter to sqlite3BtreeGetMeta or sqlite3BtreeUpdateMeta ** should be one of the following values. The integer values are assigned ** to constants so that the offset of the corresponding field in an ** SQLite database header may be found using the following formula: ** ** offset = 36 + (idx * 4) ** ** For example, the free-page-count field is located at byte offset 36 of ** the database file header. The incr-vacuum-flag field is located at ** byte offset 64 (== 36+4*7). */ #define BTREE_FREE_PAGE_COUNT 0 #define BTREE_SCHEMA_VERSION 1 #define BTREE_FILE_FORMAT 2 #define BTREE_DEFAULT_CACHE_SIZE 3 #define BTREE_LARGEST_ROOT_PAGE 4 #define BTREE_TEXT_ENCODING 5 #define BTREE_USER_VERSION 6 #define BTREE_INCR_VACUUM 7 SQLITE_PRIVATE int sqlite3BtreeCursor( Btree*, /* BTree containing table to open */ int iTable, /* Index of root page */ int wrFlag, /* 1 for writing. 0 for read-only */ struct KeyInfo*, /* First argument to compare function */ BtCursor *pCursor /* Space to write cursor structure */ ); SQLITE_PRIVATE int sqlite3BtreeCursorSize(void); SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor*); SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor*); SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( BtCursor*, UnpackedRecord *pUnKey, i64 intKey, int bias, int *pRes ); SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor*, int*); SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor*); SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const void *pKey, i64 nKey, const void *pData, int nData, int nZero, int bias, int seekResult); SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*); SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor*, i64 *pSize); SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*); SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor*, int *pAmt); SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor*, int *pAmt); SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor*, u32 *pSize); SQLITE_PRIVATE int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*); SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor*, sqlite3_int64); SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor*); SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(Btree*, int *aRoot, int nRoot, int, int*); SQLITE_PRIVATE struct Pager *sqlite3BtreePager(Btree*); SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*); SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *); SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *); SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion); #ifndef NDEBUG SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*); #endif #ifndef SQLITE_OMIT_BTREECOUNT SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *, i64 *); #endif #ifdef SQLITE_TEST SQLITE_PRIVATE int sqlite3BtreeCursorInfo(BtCursor*, int*, int); SQLITE_PRIVATE void sqlite3BtreeCursorList(Btree*); #endif #ifndef SQLITE_OMIT_WAL SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree*, int, int *, int *); #endif /* ** If we are not using shared cache, then there is no need to ** use mutexes to access the BtShared structures. So make the ** Enter and Leave procedures no-ops. */ #ifndef SQLITE_OMIT_SHARED_CACHE SQLITE_PRIVATE void sqlite3BtreeEnter(Btree*); SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3*); #else # define sqlite3BtreeEnter(X) # define sqlite3BtreeEnterAll(X) #endif #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE SQLITE_PRIVATE int sqlite3BtreeSharable(Btree*); SQLITE_PRIVATE void sqlite3BtreeLeave(Btree*); SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor*); SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor*); SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3*); #ifndef NDEBUG /* These routines are used inside assert() statements only. */ SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree*); SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3*); SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3*,int,Schema*); #endif #else # define sqlite3BtreeSharable(X) 0 # define sqlite3BtreeLeave(X) # define sqlite3BtreeEnterCursor(X) # define sqlite3BtreeLeaveCursor(X) # define sqlite3BtreeLeaveAll(X) # define sqlite3BtreeHoldsMutex(X) 1 # define sqlite3BtreeHoldsAllMutexes(X) 1 # define sqlite3SchemaMutexHeld(X,Y,Z) 1 #endif #endif /* _BTREE_H_ */ /************** End of btree.h ***********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ /************** Include vdbe.h in the middle of sqliteInt.h ******************/ /************** Begin file vdbe.h ********************************************/ /* ** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** Header file for the Virtual DataBase Engine (VDBE) ** ** This header defines the interface to the virtual database engine ** or VDBE. The VDBE implements an abstract machine that runs a ** simple program to access and modify the underlying database. */ #ifndef _SQLITE_VDBE_H_ #define _SQLITE_VDBE_H_ /* #include */ /* ** A single VDBE is an opaque structure named "Vdbe". Only routines ** in the source file sqliteVdbe.c are allowed to see the insides ** of this structure. */ typedef struct Vdbe Vdbe; /* ** The names of the following types declared in vdbeInt.h are required ** for the VdbeOp definition. */ typedef struct VdbeFunc VdbeFunc; typedef struct Mem Mem; typedef struct SubProgram SubProgram; /* ** A single instruction of the virtual machine has an opcode ** and as many as three operands. The instruction is recorded ** as an instance of the following structure: */ struct VdbeOp { u8 opcode; /* What operation to perform */ signed char p4type; /* One of the P4_xxx constants for p4 */ u8 opflags; /* Mask of the OPFLG_* flags in opcodes.h */ u8 p5; /* Fifth parameter is an unsigned character */ int p1; /* First operand */ int p2; /* Second parameter (often the jump destination) */ int p3; /* The third parameter */ union { /* fourth parameter */ int i; /* Integer value if p4type==P4_INT32 */ void *p; /* Generic pointer */ char *z; /* Pointer to data for string (char array) types */ i64 *pI64; /* Used when p4type is P4_INT64 */ double *pReal; /* Used when p4type is P4_REAL */ FuncDef *pFunc; /* Used when p4type is P4_FUNCDEF */ VdbeFunc *pVdbeFunc; /* Used when p4type is P4_VDBEFUNC */ CollSeq *pColl; /* Used when p4type is P4_COLLSEQ */ Mem *pMem; /* Used when p4type is P4_MEM */ VTable *pVtab; /* Used when p4type is P4_VTAB */ KeyInfo *pKeyInfo; /* Used when p4type is P4_KEYINFO */ int *ai; /* Used when p4type is P4_INTARRAY */ SubProgram *pProgram; /* Used when p4type is P4_SUBPROGRAM */ int (*xAdvance)(BtCursor *, int *); } p4; #ifdef SQLITE_DEBUG char *zComment; /* Comment to improve readability */ #endif #ifdef VDBE_PROFILE int cnt; /* Number of times this instruction was executed */ u64 cycles; /* Total time spent executing this instruction */ #endif }; typedef struct VdbeOp VdbeOp; /* ** A sub-routine used to implement a trigger program. */ struct SubProgram { VdbeOp *aOp; /* Array of opcodes for sub-program */ int nOp; /* Elements in aOp[] */ int nMem; /* Number of memory cells required */ int nCsr; /* Number of cursors required */ int nOnce; /* Number of OP_Once instructions */ void *token; /* id that may be used to recursive triggers */ SubProgram *pNext; /* Next sub-program already visited */ }; /* ** A smaller version of VdbeOp used for the VdbeAddOpList() function because ** it takes up less space. */ struct VdbeOpList { u8 opcode; /* What operation to perform */ signed char p1; /* First operand */ signed char p2; /* Second parameter (often the jump destination) */ signed char p3; /* Third parameter */ }; typedef struct VdbeOpList VdbeOpList; /* ** Allowed values of VdbeOp.p4type */ #define P4_NOTUSED 0 /* The P4 parameter is not used */ #define P4_DYNAMIC (-1) /* Pointer to a string obtained from sqliteMalloc() */ #define P4_STATIC (-2) /* Pointer to a static string */ #define P4_COLLSEQ (-4) /* P4 is a pointer to a CollSeq structure */ #define P4_FUNCDEF (-5) /* P4 is a pointer to a FuncDef structure */ #define P4_KEYINFO (-6) /* P4 is a pointer to a KeyInfo structure */ #define P4_VDBEFUNC (-7) /* P4 is a pointer to a VdbeFunc structure */ #define P4_MEM (-8) /* P4 is a pointer to a Mem* structure */ #define P4_TRANSIENT 0 /* P4 is a pointer to a transient string */ #define P4_VTAB (-10) /* P4 is a pointer to an sqlite3_vtab structure */ #define P4_MPRINTF (-11) /* P4 is a string obtained from sqlite3_mprintf() */ #define P4_REAL (-12) /* P4 is a 64-bit floating point value */ #define P4_INT64 (-13) /* P4 is a 64-bit signed integer */ #define P4_INT32 (-14) /* P4 is a 32-bit signed integer */ #define P4_INTARRAY (-15) /* P4 is a vector of 32-bit integers */ #define P4_SUBPROGRAM (-18) /* P4 is a pointer to a SubProgram structure */ #define P4_ADVANCE (-19) /* P4 is a pointer to BtreeNext() or BtreePrev() */ /* When adding a P4 argument using P4_KEYINFO, a copy of the KeyInfo structure ** is made. That copy is freed when the Vdbe is finalized. But if the ** argument is P4_KEYINFO_HANDOFF, the passed in pointer is used. It still ** gets freed when the Vdbe is finalized so it still should be obtained ** from a single sqliteMalloc(). But no copy is made and the calling ** function should *not* try to free the KeyInfo. */ #define P4_KEYINFO_HANDOFF (-16) #define P4_KEYINFO_STATIC (-17) /* ** The Vdbe.aColName array contains 5n Mem structures, where n is the ** number of columns of data returned by the statement. */ #define COLNAME_NAME 0 #define COLNAME_DECLTYPE 1 #define COLNAME_DATABASE 2 #define COLNAME_TABLE 3 #define COLNAME_COLUMN 4 #ifdef SQLITE_ENABLE_COLUMN_METADATA # define COLNAME_N 5 /* Number of COLNAME_xxx symbols */ #else # ifdef SQLITE_OMIT_DECLTYPE # define COLNAME_N 1 /* Store only the name */ # else # define COLNAME_N 2 /* Store the name and decltype */ # endif #endif /* ** The following macro converts a relative address in the p2 field ** of a VdbeOp structure into a negative number so that ** sqlite3VdbeAddOpList() knows that the address is relative. Calling ** the macro again restores the address. */ #define ADDR(X) (-1-(X)) /* ** The makefile scans the vdbe.c source file and creates the "opcodes.h" ** header file that defines a number for each opcode used by the VDBE. */ /************** Include opcodes.h in the middle of vdbe.h ********************/ /************** Begin file opcodes.h *****************************************/ /* Automatically generated. Do not edit */ /* See the mkopcodeh.awk script for details */ #define OP_Goto 1 #define OP_Gosub 2 #define OP_Return 3 #define OP_Yield 4 #define OP_HaltIfNull 5 #define OP_Halt 6 #define OP_Integer 7 #define OP_Int64 8 #define OP_Real 130 /* same as TK_FLOAT */ #define OP_String8 94 /* same as TK_STRING */ #define OP_String 9 #define OP_Null 10 #define OP_Blob 11 #define OP_Variable 12 #define OP_Move 13 #define OP_Copy 14 #define OP_SCopy 15 #define OP_ResultRow 16 #define OP_Concat 91 /* same as TK_CONCAT */ #define OP_Add 86 /* same as TK_PLUS */ #define OP_Subtract 87 /* same as TK_MINUS */ #define OP_Multiply 88 /* same as TK_STAR */ #define OP_Divide 89 /* same as TK_SLASH */ #define OP_Remainder 90 /* same as TK_REM */ #define OP_CollSeq 17 #define OP_Function 18 #define OP_BitAnd 82 /* same as TK_BITAND */ #define OP_BitOr 83 /* same as TK_BITOR */ #define OP_ShiftLeft 84 /* same as TK_LSHIFT */ #define OP_ShiftRight 85 /* same as TK_RSHIFT */ #define OP_AddImm 20 #define OP_MustBeInt 21 #define OP_RealAffinity 22 #define OP_ToText 141 /* same as TK_TO_TEXT */ #define OP_ToBlob 142 /* same as TK_TO_BLOB */ #define OP_ToNumeric 143 /* same as TK_TO_NUMERIC*/ #define OP_ToInt 144 /* same as TK_TO_INT */ #define OP_ToReal 145 /* same as TK_TO_REAL */ #define OP_Eq 76 /* same as TK_EQ */ #define OP_Ne 75 /* same as TK_NE */ #define OP_Lt 79 /* same as TK_LT */ #define OP_Le 78 /* same as TK_LE */ #define OP_Gt 77 /* same as TK_GT */ #define OP_Ge 80 /* same as TK_GE */ #define OP_Permutation 23 #define OP_Compare 24 #define OP_Jump 25 #define OP_And 69 /* same as TK_AND */ #define OP_Or 68 /* same as TK_OR */ #define OP_Not 19 /* same as TK_NOT */ #define OP_BitNot 93 /* same as TK_BITNOT */ #define OP_Once 26 #define OP_If 27 #define OP_IfNot 28 #define OP_IsNull 73 /* same as TK_ISNULL */ #define OP_NotNull 74 /* same as TK_NOTNULL */ #define OP_Column 29 #define OP_Affinity 30 #define OP_MakeRecord 31 #define OP_Count 32 #define OP_Savepoint 33 #define OP_AutoCommit 34 #define OP_Transaction 35 #define OP_ReadCookie 36 #define OP_SetCookie 37 #define OP_VerifyCookie 38 #define OP_OpenRead 39 #define OP_OpenWrite 40 #define OP_OpenAutoindex 41 #define OP_OpenEphemeral 42 #define OP_SorterOpen 43 #define OP_OpenPseudo 44 #define OP_Close 45 #define OP_SeekLt 46 #define OP_SeekLe 47 #define OP_SeekGe 48 #define OP_SeekGt 49 #define OP_Seek 50 #define OP_NotFound 51 #define OP_Found 52 #define OP_IsUnique 53 #define OP_NotExists 54 #define OP_Sequence 55 #define OP_NewRowid 56 #define OP_Insert 57 #define OP_InsertInt 58 #define OP_Delete 59 #define OP_ResetCount 60 #define OP_SorterCompare 61 #define OP_SorterData 62 #define OP_RowKey 63 #define OP_RowData 64 #define OP_Rowid 65 #define OP_NullRow 66 #define OP_Last 67 #define OP_SorterSort 70 #define OP_Sort 71 #define OP_Rewind 72 #define OP_SorterNext 81 #define OP_Prev 92 #define OP_Next 95 #define OP_SorterInsert 96 #define OP_IdxInsert 97 #define OP_IdxDelete 98 #define OP_IdxRowid 99 #define OP_IdxLT 100 #define OP_IdxGE 101 #define OP_Destroy 102 #define OP_Clear 103 #define OP_CreateIndex 104 #define OP_CreateTable 105 #define OP_ParseSchema 106 #define OP_LoadAnalysis 107 #define OP_DropTable 108 #define OP_DropIndex 109 #define OP_DropTrigger 110 #define OP_IntegrityCk 111 #define OP_RowSetAdd 112 #define OP_RowSetRead 113 #define OP_RowSetTest 114 #define OP_Program 115 #define OP_Param 116 #define OP_FkCounter 117 #define OP_FkIfZero 118 #define OP_MemMax 119 #define OP_IfPos 120 #define OP_IfNeg 121 #define OP_IfZero 122 #define OP_AggStep 123 #define OP_AggFinal 124 #define OP_Checkpoint 125 #define OP_JournalMode 126 #define OP_Vacuum 127 #define OP_IncrVacuum 128 #define OP_Expire 129 #define OP_TableLock 131 #define OP_VBegin 132 #define OP_VCreate 133 #define OP_VDestroy 134 #define OP_VOpen 135 #define OP_VFilter 136 #define OP_VColumn 137 #define OP_VNext 138 #define OP_VRename 139 #define OP_VUpdate 140 #define OP_Pagecount 146 #define OP_MaxPgcnt 147 #define OP_Trace 148 #define OP_Noop 149 #define OP_Explain 150 /* Properties such as "out2" or "jump" that are specified in ** comments following the "case" for each opcode in the vdbe.c ** are encoded into bitvectors as follows: */ #define OPFLG_JUMP 0x0001 /* jump: P2 holds jmp target */ #define OPFLG_OUT2_PRERELEASE 0x0002 /* out2-prerelease: */ #define OPFLG_IN1 0x0004 /* in1: P1 is an input */ #define OPFLG_IN2 0x0008 /* in2: P2 is an input */ #define OPFLG_IN3 0x0010 /* in3: P3 is an input */ #define OPFLG_OUT2 0x0020 /* out2: P2 is an output */ #define OPFLG_OUT3 0x0040 /* out3: P3 is an output */ #define OPFLG_INITIALIZER {\ /* 0 */ 0x00, 0x01, 0x01, 0x04, 0x04, 0x10, 0x00, 0x02,\ /* 8 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x24, 0x24,\ /* 16 */ 0x00, 0x00, 0x00, 0x24, 0x04, 0x05, 0x04, 0x00,\ /* 24 */ 0x00, 0x01, 0x01, 0x05, 0x05, 0x00, 0x00, 0x00,\ /* 32 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00,\ /* 40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,\ /* 48 */ 0x11, 0x11, 0x08, 0x11, 0x11, 0x11, 0x11, 0x02,\ /* 56 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ /* 64 */ 0x00, 0x02, 0x00, 0x01, 0x4c, 0x4c, 0x01, 0x01,\ /* 72 */ 0x01, 0x05, 0x05, 0x15, 0x15, 0x15, 0x15, 0x15,\ /* 80 */ 0x15, 0x01, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,\ /* 88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x01, 0x24, 0x02, 0x01,\ /* 96 */ 0x08, 0x08, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00,\ /* 104 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ /* 112 */ 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01, 0x08,\ /* 120 */ 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00,\ /* 128 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,\ /* 136 */ 0x01, 0x00, 0x01, 0x00, 0x00, 0x04, 0x04, 0x04,\ /* 144 */ 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00,} /************** End of opcodes.h *********************************************/ /************** Continuing where we left off in vdbe.h ***********************/ /* ** Prototypes for the VDBE interface. See comments on the implementation ** for a description of what each of these routines does. */ SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3*); SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe*,int); SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe*,int,int); SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe*,int,int,int); SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe*,int,int,int,int); SQLITE_PRIVATE int sqlite3VdbeAddOp4(Vdbe*,int,int,int,int,const char *zP4,int); SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(Vdbe*,int,int,int,int,int); SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp); SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe*,int,char*); SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, u32 addr, int P1); SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, u32 addr, int P2); SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, u32 addr, int P3); SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe*, u8 P5); SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe*, int addr); SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe*, int addr); SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N); SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int); SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int); SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3*,Vdbe*); SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*); SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe*, int); SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe*); #ifdef SQLITE_DEBUG SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *, int); SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe*,FILE*); #endif SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe*); SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe*,int); SQLITE_PRIVATE int sqlite3VdbeSetColName(Vdbe*, int, int, const char *, void(*)(void*)); SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe*); SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, int); SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe*,Vdbe*); SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*); SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe*, int, u8); SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe*, int); #ifndef SQLITE_OMIT_TRACE SQLITE_PRIVATE char *sqlite3VdbeExpandSql(Vdbe*, const char*); #endif SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,UnpackedRecord*); SQLITE_PRIVATE int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*); SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(KeyInfo *, char *, int, char **); #ifndef SQLITE_OMIT_TRIGGER SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *); #endif #ifndef NDEBUG SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe*, const char*, ...); # define VdbeComment(X) sqlite3VdbeComment X SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe*, const char*, ...); # define VdbeNoopComment(X) sqlite3VdbeNoopComment X #else # define VdbeComment(X) # define VdbeNoopComment(X) #endif #endif /************** End of vdbe.h ************************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ /************** Include pager.h in the middle of sqliteInt.h *****************/ /************** Begin file pager.h *******************************************/ /* ** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This header file defines the interface that the sqlite page cache ** subsystem. The page cache subsystem reads and writes a file a page ** at a time and provides a journal for rollback. */ #ifndef _PAGER_H_ #define _PAGER_H_ /* ** Default maximum size for persistent journal files. A negative ** value means no limit. This value may be overridden using the ** sqlite3PagerJournalSizeLimit() API. See also "PRAGMA journal_size_limit". */ #ifndef SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT #define SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT -1 #endif /* ** The type used to represent a page number. The first page in a file ** is called page 1. 0 is used to represent "not a page". */ typedef u32 Pgno; /* ** Each open file is managed by a separate instance of the "Pager" structure. */ typedef struct Pager Pager; /* ** Handle type for pages. */ typedef struct PgHdr DbPage; /* ** Page number PAGER_MJ_PGNO is never used in an SQLite database (it is ** reserved for working around a windows/posix incompatibility). It is ** used in the journal to signify that the remainder of the journal file ** is devoted to storing a master journal name - there are no more pages to ** roll back. See comments for function writeMasterJournal() in pager.c ** for details. */ #define PAGER_MJ_PGNO(x) ((Pgno)((PENDING_BYTE/((x)->pageSize))+1)) /* ** Allowed values for the flags parameter to sqlite3PagerOpen(). ** ** NOTE: These values must match the corresponding BTREE_ values in btree.h. */ #define PAGER_OMIT_JOURNAL 0x0001 /* Do not use a rollback journal */ #define PAGER_NO_READLOCK 0x0002 /* Omit readlocks on readonly files */ #define PAGER_MEMORY 0x0004 /* In-memory database */ /* ** Valid values for the second argument to sqlite3PagerLockingMode(). */ #define PAGER_LOCKINGMODE_QUERY -1 #define PAGER_LOCKINGMODE_NORMAL 0 #define PAGER_LOCKINGMODE_EXCLUSIVE 1 /* ** Numeric constants that encode the journalmode. */ #define PAGER_JOURNALMODE_QUERY (-1) /* Query the value of journalmode */ #define PAGER_JOURNALMODE_DELETE 0 /* Commit by deleting journal file */ #define PAGER_JOURNALMODE_PERSIST 1 /* Commit by zeroing journal header */ #define PAGER_JOURNALMODE_OFF 2 /* Journal omitted. */ #define PAGER_JOURNALMODE_TRUNCATE 3 /* Commit by truncating journal */ #define PAGER_JOURNALMODE_MEMORY 4 /* In-memory journal file */ #define PAGER_JOURNALMODE_WAL 5 /* Use write-ahead logging */ /* ** The remainder of this file contains the declarations of the functions ** that make up the Pager sub-system API. See source code comments for ** a detailed description of each routine. */ /* Open and close a Pager connection. */ SQLITE_PRIVATE int sqlite3PagerOpen( sqlite3_vfs*, Pager **ppPager, const char*, int, int, int, void(*)(DbPage*) ); SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager); SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager*, int, unsigned char*); /* Functions used to configure a Pager object. */ SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *); SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager*, u32*, int); SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager*, int); SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager*, int); SQLITE_PRIVATE void sqlite3PagerShrink(Pager*); SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager*,int,int,int); SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *, int); SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *, int); SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager*); SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager*); SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *, i64); SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager*); /* Functions used to obtain and release page references. */ SQLITE_PRIVATE int sqlite3PagerAcquire(Pager *pPager, Pgno pgno, DbPage **ppPage, int clrFlag); #define sqlite3PagerGet(A,B,C) sqlite3PagerAcquire(A,B,C,0) SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno); SQLITE_PRIVATE void sqlite3PagerRef(DbPage*); SQLITE_PRIVATE void sqlite3PagerUnref(DbPage*); /* Operations on page references. */ SQLITE_PRIVATE int sqlite3PagerWrite(DbPage*); SQLITE_PRIVATE void sqlite3PagerDontWrite(DbPage*); SQLITE_PRIVATE int sqlite3PagerMovepage(Pager*,DbPage*,Pgno,int); SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage*); SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *); SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *); /* Functions used to manage pager transactions and savepoints. */ SQLITE_PRIVATE void sqlite3PagerPagecount(Pager*, int*); SQLITE_PRIVATE int sqlite3PagerBegin(Pager*, int exFlag, int); SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(Pager*,const char *zMaster, int); SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager*); SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager); SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager*); SQLITE_PRIVATE int sqlite3PagerRollback(Pager*); SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int n); SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint); SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager); SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int, int*, int*); SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager); SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager); SQLITE_PRIVATE int sqlite3PagerOpenWal(Pager *pPager, int *pisOpen); SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager); /* Functions used to query pager state and configuration. */ SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager*); SQLITE_PRIVATE int sqlite3PagerRefcount(Pager*); SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager*); SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager*); SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager*); SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager*); SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager*); SQLITE_PRIVATE int sqlite3PagerNosync(Pager*); SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager*); SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager*); SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *, int, int, int *); SQLITE_PRIVATE void sqlite3PagerClearCache(Pager *); /* Functions used to truncate the database file. */ SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno); #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL) SQLITE_PRIVATE void *sqlite3PagerCodec(DbPage *); #endif /* Functions to support testing and debugging. */ #if !defined(NDEBUG) || defined(SQLITE_TEST) SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage*); SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage*); #endif #ifdef SQLITE_TEST SQLITE_PRIVATE int *sqlite3PagerStats(Pager*); SQLITE_PRIVATE void sqlite3PagerRefdump(Pager*); void disable_simulated_io_errors(void); void enable_simulated_io_errors(void); #else # define disable_simulated_io_errors() # define enable_simulated_io_errors() #endif #endif /* _PAGER_H_ */ /************** End of pager.h ***********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ /************** Include pcache.h in the middle of sqliteInt.h ****************/ /************** Begin file pcache.h ******************************************/ /* ** 2008 August 05 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This header file defines the interface that the sqlite page cache ** subsystem. */ #ifndef _PCACHE_H_ typedef struct PgHdr PgHdr; typedef struct PCache PCache; /* ** Every page in the cache is controlled by an instance of the following ** structure. */ struct PgHdr { sqlite3_pcache_page *pPage; /* Pcache object page handle */ void *pData; /* Page data */ void *pExtra; /* Extra content */ PgHdr *pDirty; /* Transient list of dirty pages */ Pgno pgno; /* Page number for this page */ Pager *pPager; /* The pager this page is part of */ #ifdef SQLITE_CHECK_PAGES u32 pageHash; /* Hash of page content */ #endif u16 flags; /* PGHDR flags defined below */ /********************************************************************** ** Elements above are public. All that follows is private to pcache.c ** and should not be accessed by other modules. */ i16 nRef; /* Number of users of this page */ PCache *pCache; /* Cache that owns this page */ PgHdr *pDirtyNext; /* Next element in list of dirty pages */ PgHdr *pDirtyPrev; /* Previous element in list of dirty pages */ }; /* Bit values for PgHdr.flags */ #define PGHDR_DIRTY 0x002 /* Page has changed */ #define PGHDR_NEED_SYNC 0x004 /* Fsync the rollback journal before ** writing this page to the database */ #define PGHDR_NEED_READ 0x008 /* Content is unread */ #define PGHDR_REUSE_UNLIKELY 0x010 /* A hint that reuse is unlikely */ #define PGHDR_DONT_WRITE 0x020 /* Do not write content to disk */ /* Initialize and shutdown the page cache subsystem */ SQLITE_PRIVATE int sqlite3PcacheInitialize(void); SQLITE_PRIVATE void sqlite3PcacheShutdown(void); /* Page cache buffer management: ** These routines implement SQLITE_CONFIG_PAGECACHE. */ SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *, int sz, int n); /* Create a new pager cache. ** Under memory stress, invoke xStress to try to make pages clean. ** Only clean and unpinned pages can be reclaimed. */ SQLITE_PRIVATE void sqlite3PcacheOpen( int szPage, /* Size of every page */ int szExtra, /* Extra space associated with each page */ int bPurgeable, /* True if pages are on backing store */ int (*xStress)(void*, PgHdr*), /* Call to try to make pages clean */ void *pStress, /* Argument to xStress */ PCache *pToInit /* Preallocated space for the PCache */ ); /* Modify the page-size after the cache has been created. */ SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *, int); /* Return the size in bytes of a PCache object. Used to preallocate ** storage space. */ SQLITE_PRIVATE int sqlite3PcacheSize(void); /* One release per successful fetch. Page is pinned until released. ** Reference counted. */ SQLITE_PRIVATE int sqlite3PcacheFetch(PCache*, Pgno, int createFlag, PgHdr**); SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr*); SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr*); /* Remove page from cache */ SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr*); /* Make sure page is marked dirty */ SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr*); /* Mark a single page as clean */ SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache*); /* Mark all dirty list pages as clean */ /* Change a page number. Used by incr-vacuum. */ SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr*, Pgno); /* Remove all pages with pgno>x. Reset the cache if x==0 */ SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache*, Pgno x); /* Get a list of all dirty pages in the cache, sorted by page number */ SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache*); /* Reset and close the cache object */ SQLITE_PRIVATE void sqlite3PcacheClose(PCache*); /* Clear flags from pages of the page cache */ SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *); /* Discard the contents of the cache */ SQLITE_PRIVATE void sqlite3PcacheClear(PCache*); /* Return the total number of outstanding page references */ SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache*); /* Increment the reference count of an existing page */ SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr*); SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr*); /* Return the total number of pages stored in the cache */ SQLITE_PRIVATE int sqlite3PcachePagecount(PCache*); #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG) /* Iterate through all dirty pages currently stored in the cache. This ** interface is only available if SQLITE_CHECK_PAGES is defined when the ** library is built. */ SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *)); #endif /* Set and get the suggested cache-size for the specified pager-cache. ** ** If no global maximum is configured, then the system attempts to limit ** the total number of pages cached by purgeable pager-caches to the sum ** of the suggested cache-sizes. */ SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *, int); #ifdef SQLITE_TEST SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *); #endif /* Free up as much memory as possible from the page cache */ SQLITE_PRIVATE void sqlite3PcacheShrink(PCache*); #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT /* Try to return memory used by the pcache module to the main memory heap */ SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int); #endif #ifdef SQLITE_TEST SQLITE_PRIVATE void sqlite3PcacheStats(int*,int*,int*,int*); #endif SQLITE_PRIVATE void sqlite3PCacheSetDefault(void); #endif /* _PCACHE_H_ */ /************** End of pcache.h **********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ /************** Include os.h in the middle of sqliteInt.h ********************/ /************** Begin file os.h **********************************************/ /* ** 2001 September 16 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ****************************************************************************** ** ** This header file (together with is companion C source-code file ** "os.c") attempt to abstract the underlying operating system so that ** the SQLite library will work on both POSIX and windows systems. ** ** This header file is #include-ed by sqliteInt.h and thus ends up ** being included by every source file. */ #ifndef _SQLITE_OS_H_ #define _SQLITE_OS_H_ /* ** Figure out if we are dealing with Unix, Windows, or some other ** operating system. After the following block of preprocess macros, ** all of SQLITE_OS_UNIX, SQLITE_OS_WIN, SQLITE_OS_OS2, and SQLITE_OS_OTHER ** will defined to either 1 or 0. One of the four will be 1. The other ** three will be 0. */ #if defined(SQLITE_OS_OTHER) # if SQLITE_OS_OTHER==1 # undef SQLITE_OS_UNIX # define SQLITE_OS_UNIX 0 # undef SQLITE_OS_WIN # define SQLITE_OS_WIN 0 # undef SQLITE_OS_OS2 # define SQLITE_OS_OS2 0 # else # undef SQLITE_OS_OTHER # endif #endif #if !defined(SQLITE_OS_UNIX) && !defined(SQLITE_OS_OTHER) # define SQLITE_OS_OTHER 0 # ifndef SQLITE_OS_WIN # if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__) # define SQLITE_OS_WIN 1 # define SQLITE_OS_UNIX 0 # define SQLITE_OS_OS2 0 # elif defined(__EMX__) || defined(_OS2) || defined(OS2) || defined(_OS2_) || defined(__OS2__) # define SQLITE_OS_WIN 0 # define SQLITE_OS_UNIX 0 # define SQLITE_OS_OS2 1 # else # define SQLITE_OS_WIN 0 # define SQLITE_OS_UNIX 1 # define SQLITE_OS_OS2 0 # endif # else # define SQLITE_OS_UNIX 0 # define SQLITE_OS_OS2 0 # endif #else # ifndef SQLITE_OS_WIN # define SQLITE_OS_WIN 0 # endif #endif /* ** Define the maximum size of a temporary filename */ #if SQLITE_OS_WIN # include # define SQLITE_TEMPNAME_SIZE (MAX_PATH+50) #elif SQLITE_OS_OS2 # if (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 3) && defined(OS2_HIGH_MEMORY) # include /* has to be included before os2.h for linking to work */ # endif # define INCL_DOSDATETIME # define INCL_DOSFILEMGR # define INCL_DOSERRORS # define INCL_DOSMISC # define INCL_DOSPROCESS # define INCL_DOSMODULEMGR # define INCL_DOSSEMAPHORES # include # include # define SQLITE_TEMPNAME_SIZE (CCHMAXPATHCOMP) #else # define SQLITE_TEMPNAME_SIZE 200 #endif /* ** Determine if we are dealing with Windows NT. */ #if defined(_WIN32_WINNT) # define SQLITE_OS_WINNT 1 #else # define SQLITE_OS_WINNT 0 #endif /* ** Determine if we are dealing with WindowsCE - which has a much ** reduced API. */ #if defined(_WIN32_WCE) # define SQLITE_OS_WINCE 1 #else # define SQLITE_OS_WINCE 0 #endif /* If the SET_FULLSYNC macro is not defined above, then make it ** a no-op */ #ifndef SET_FULLSYNC # define SET_FULLSYNC(x,y) #endif /* ** The default size of a disk sector */ #ifndef SQLITE_DEFAULT_SECTOR_SIZE # define SQLITE_DEFAULT_SECTOR_SIZE 4096 #endif /* ** Temporary files are named starting with this prefix followed by 16 random ** alphanumeric characters, and no file extension. They are stored in the ** OS's standard temporary file directory, and are deleted prior to exit. ** If sqlite is being embedded in another program, you may wish to change the ** prefix to reflect your program's name, so that if your program exits ** prematurely, old temporary files can be easily identified. This can be done ** using -DSQLITE_TEMP_FILE_PREFIX=myprefix_ on the compiler command line. ** ** 2006-10-31: The default prefix used to be "sqlite_". But then ** Mcafee started using SQLite in their anti-virus product and it ** started putting files with the "sqlite" name in the c:/temp folder. ** This annoyed many windows users. Those users would then do a ** Google search for "sqlite", find the telephone numbers of the ** developers and call to wake them up at night and complain. ** For this reason, the default name prefix is changed to be "sqlite" ** spelled backwards. So the temp files are still identified, but ** anybody smart enough to figure out the code is also likely smart ** enough to know that calling the developer will not help get rid ** of the file. */ #ifndef SQLITE_TEMP_FILE_PREFIX # define SQLITE_TEMP_FILE_PREFIX "etilqs_" #endif /* ** The following values may be passed as the second argument to ** sqlite3OsLock(). The various locks exhibit the following semantics: ** ** SHARED: Any number of processes may hold a SHARED lock simultaneously. ** RESERVED: A single process may hold a RESERVED lock on a file at ** any time. Other processes may hold and obtain new SHARED locks. ** PENDING: A single process may hold a PENDING lock on a file at ** any one time. Existing SHARED locks may persist, but no new ** SHARED locks may be obtained by other processes. ** EXCLUSIVE: An EXCLUSIVE lock precludes all other locks. ** ** PENDING_LOCK may not be passed directly to sqlite3OsLock(). Instead, a ** process that requests an EXCLUSIVE lock may actually obtain a PENDING ** lock. This can be upgraded to an EXCLUSIVE lock by a subsequent call to ** sqlite3OsLock(). */ #define NO_LOCK 0 #define SHARED_LOCK 1 #define RESERVED_LOCK 2 #define PENDING_LOCK 3 #define EXCLUSIVE_LOCK 4 /* ** File Locking Notes: (Mostly about windows but also some info for Unix) ** ** We cannot use LockFileEx() or UnlockFileEx() on Win95/98/ME because ** those functions are not available. So we use only LockFile() and ** UnlockFile(). ** ** LockFile() prevents not just writing but also reading by other processes. ** A SHARED_LOCK is obtained by locking a single randomly-chosen ** byte out of a specific range of bytes. The lock byte is obtained at ** random so two separate readers can probably access the file at the ** same time, unless they are unlucky and choose the same lock byte. ** An EXCLUSIVE_LOCK is obtained by locking all bytes in the range. ** There can only be one writer. A RESERVED_LOCK is obtained by locking ** a single byte of the file that is designated as the reserved lock byte. ** A PENDING_LOCK is obtained by locking a designated byte different from ** the RESERVED_LOCK byte. ** ** On WinNT/2K/XP systems, LockFileEx() and UnlockFileEx() are available, ** which means we can use reader/writer locks. When reader/writer locks ** are used, the lock is placed on the same range of bytes that is used ** for probabilistic locking in Win95/98/ME. Hence, the locking scheme ** will support two or more Win95 readers or two or more WinNT readers. ** But a single Win95 reader will lock out all WinNT readers and a single ** WinNT reader will lock out all other Win95 readers. ** ** The following #defines specify the range of bytes used for locking. ** SHARED_SIZE is the number of bytes available in the pool from which ** a random byte is selected for a shared lock. The pool of bytes for ** shared locks begins at SHARED_FIRST. ** ** The same locking strategy and ** byte ranges are used for Unix. This leaves open the possiblity of having ** clients on win95, winNT, and unix all talking to the same shared file ** and all locking correctly. To do so would require that samba (or whatever ** tool is being used for file sharing) implements locks correctly between ** windows and unix. I'm guessing that isn't likely to happen, but by ** using the same locking range we are at least open to the possibility. ** ** Locking in windows is manditory. For this reason, we cannot store ** actual data in the bytes used for locking. The pager never allocates ** the pages involved in locking therefore. SHARED_SIZE is selected so ** that all locks will fit on a single page even at the minimum page size. ** PENDING_BYTE defines the beginning of the locks. By default PENDING_BYTE ** is set high so that we don't have to allocate an unused page except ** for very large databases. But one should test the page skipping logic ** by setting PENDING_BYTE low and running the entire regression suite. ** ** Changing the value of PENDING_BYTE results in a subtly incompatible ** file format. Depending on how it is changed, you might not notice ** the incompatibility right away, even running a full regression test. ** The default location of PENDING_BYTE is the first byte past the ** 1GB boundary. ** */ #ifdef SQLITE_OMIT_WSD # define PENDING_BYTE (0x40000000) #else # define PENDING_BYTE sqlite3PendingByte #endif #define RESERVED_BYTE (PENDING_BYTE+1) #define SHARED_FIRST (PENDING_BYTE+2) #define SHARED_SIZE 510 /* ** Wrapper around OS specific sqlite3_os_init() function. */ SQLITE_PRIVATE int sqlite3OsInit(void); /* ** Functions for accessing sqlite3_file methods */ SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file*); SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file*, void*, int amt, i64 offset); SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file*, const void*, int amt, i64 offset); SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file*, i64 size); SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file*, int); SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file*, i64 *pSize); SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file*, int); SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file*, int); SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut); SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file*,int,void*); SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file*,int,void*); #define SQLITE_FCNTL_DB_UNCHANGED 0xca093fa0 SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id); SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id); SQLITE_PRIVATE int sqlite3OsShmMap(sqlite3_file *,int,int,int,void volatile **); SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int, int, int); SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id); SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int); /* ** Functions for accessing sqlite3_vfs methods */ SQLITE_PRIVATE int sqlite3OsOpen(sqlite3_vfs *, const char *, sqlite3_file*, int, int *); SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *, const char *, int); SQLITE_PRIVATE int sqlite3OsAccess(sqlite3_vfs *, const char *, int, int *pResOut); SQLITE_PRIVATE int sqlite3OsFullPathname(sqlite3_vfs *, const char *, int, char *); #ifndef SQLITE_OMIT_LOAD_EXTENSION SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *, const char *); SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *, int, char *); SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void); SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *, void *); #endif /* SQLITE_OMIT_LOAD_EXTENSION */ SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *, int, char *); SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *, int); SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *, sqlite3_int64*); /* ** Convenience functions for opening and closing files using ** sqlite3_malloc() to obtain space for the file-handle structure. */ SQLITE_PRIVATE int sqlite3OsOpenMalloc(sqlite3_vfs *, const char *, sqlite3_file **, int,int*); SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *); #endif /* _SQLITE_OS_H_ */ /************** End of os.h **************************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ /************** Include mutex.h in the middle of sqliteInt.h *****************/ /************** Begin file mutex.h *******************************************/ /* ** 2007 August 28 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** ** This file contains the common header for all mutex implementations. ** The sqliteInt.h header #includes this file so that it is available ** to all source files. We break it out in an effort to keep the code ** better organized. ** ** NOTE: source files should *not* #include this header file directly. ** Source files should #include the sqliteInt.h file and let that file ** include this one indirectly. */ /* ** Figure out what version of the code to use. The choices are ** ** SQLITE_MUTEX_OMIT No mutex logic. Not even stubs. The ** mutexes implemention cannot be overridden ** at start-time. ** ** SQLITE_MUTEX_NOOP For single-threaded applications. No ** mutual exclusion is provided. But this ** implementation can be overridden at ** start-time. ** ** SQLITE_MUTEX_PTHREADS For multi-threaded applications on Unix. ** ** SQLITE_MUTEX_W32 For multi-threaded applications on Win32. ** ** SQLITE_MUTEX_OS2 For multi-threaded applications on OS/2. */ #if !SQLITE_THREADSAFE # define SQLITE_MUTEX_OMIT #endif #if SQLITE_THREADSAFE && !defined(SQLITE_MUTEX_NOOP) # if SQLITE_OS_UNIX # define SQLITE_MUTEX_PTHREADS # elif SQLITE_OS_WIN # define SQLITE_MUTEX_W32 # elif SQLITE_OS_OS2 # define SQLITE_MUTEX_OS2 # else # define SQLITE_MUTEX_NOOP # endif #endif #ifdef SQLITE_MUTEX_OMIT /* ** If this is a no-op implementation, implement everything as macros. */ #define sqlite3_mutex_alloc(X) ((sqlite3_mutex*)8) #define sqlite3_mutex_free(X) #define sqlite3_mutex_enter(X) #define sqlite3_mutex_try(X) SQLITE_OK #define sqlite3_mutex_leave(X) #define sqlite3_mutex_held(X) ((void)(X),1) #define sqlite3_mutex_notheld(X) ((void)(X),1) #define sqlite3MutexAlloc(X) ((sqlite3_mutex*)8) #define sqlite3MutexInit() SQLITE_OK #define sqlite3MutexEnd() #define MUTEX_LOGIC(X) #else #define MUTEX_LOGIC(X) X #endif /* defined(SQLITE_MUTEX_OMIT) */ /************** End of mutex.h ***********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ /* ** Each database file to be accessed by the system is an instance ** of the following structure. There are normally two of these structures ** in the sqlite.aDb[] array. aDb[0] is the main database file and ** aDb[1] is the database file used to hold temporary tables. Additional ** databases may be attached. */ struct Db { char *zName; /* Name of this database */ Btree *pBt; /* The B*Tree structure for this database file */ u8 inTrans; /* 0: not writable. 1: Transaction. 2: Checkpoint */ u8 safety_level; /* How aggressive at syncing data to disk */ Schema *pSchema; /* Pointer to database schema (possibly shared) */ }; /* ** An instance of the following structure stores a database schema. ** ** Most Schema objects are associated with a Btree. The exception is ** the Schema for the TEMP databaes (sqlite3.aDb[1]) which is free-standing. ** In shared cache mode, a single Schema object can be shared by multiple ** Btrees that refer to the same underlying BtShared object. ** ** Schema objects are automatically deallocated when the last Btree that ** references them is destroyed. The TEMP Schema is manually freed by ** sqlite3_close(). * ** A thread must be holding a mutex on the corresponding Btree in order ** to access Schema content. This implies that the thread must also be ** holding a mutex on the sqlite3 connection pointer that owns the Btree. ** For a TEMP Schema, only the connection mutex is required. */ struct Schema { int schema_cookie; /* Database schema version number for this file */ int iGeneration; /* Generation counter. Incremented with each change */ Hash tblHash; /* All tables indexed by name */ Hash idxHash; /* All (named) indices indexed by name */ Hash trigHash; /* All triggers indexed by name */ Hash fkeyHash; /* All foreign keys by referenced table name */ Table *pSeqTab; /* The sqlite_sequence table used by AUTOINCREMENT */ u8 file_format; /* Schema format version for this file */ u8 enc; /* Text encoding used by this database */ u16 flags; /* Flags associated with this schema */ int cache_size; /* Number of pages to use in the cache */ }; /* ** These macros can be used to test, set, or clear bits in the ** Db.pSchema->flags field. */ #define DbHasProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))==(P)) #define DbHasAnyProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))!=0) #define DbSetProperty(D,I,P) (D)->aDb[I].pSchema->flags|=(P) #define DbClearProperty(D,I,P) (D)->aDb[I].pSchema->flags&=~(P) /* ** Allowed values for the DB.pSchema->flags field. ** ** The DB_SchemaLoaded flag is set after the database schema has been ** read into internal hash tables. ** ** DB_UnresetViews means that one or more views have column names that ** have been filled out. If the schema changes, these column names might ** changes and so the view will need to be reset. */ #define DB_SchemaLoaded 0x0001 /* The schema has been loaded */ #define DB_UnresetViews 0x0002 /* Some views have defined column names */ #define DB_Empty 0x0004 /* The file is empty (length 0 bytes) */ /* ** The number of different kinds of things that can be limited ** using the sqlite3_limit() interface. */ #define SQLITE_N_LIMIT (SQLITE_LIMIT_TRIGGER_DEPTH+1) /* ** Lookaside malloc is a set of fixed-size buffers that can be used ** to satisfy small transient memory allocation requests for objects ** associated with a particular database connection. The use of ** lookaside malloc provides a significant performance enhancement ** (approx 10%) by avoiding numerous malloc/free requests while parsing ** SQL statements. ** ** The Lookaside structure holds configuration information about the ** lookaside malloc subsystem. Each available memory allocation in ** the lookaside subsystem is stored on a linked list of LookasideSlot ** objects. ** ** Lookaside allocations are only allowed for objects that are associated ** with a particular database connection. Hence, schema information cannot ** be stored in lookaside because in shared cache mode the schema information ** is shared by multiple database connections. Therefore, while parsing ** schema information, the Lookaside.bEnabled flag is cleared so that ** lookaside allocations are not used to construct the schema objects. */ struct Lookaside { u16 sz; /* Size of each buffer in bytes */ u8 bEnabled; /* False to disable new lookaside allocations */ u8 bMalloced; /* True if pStart obtained from sqlite3_malloc() */ int nOut; /* Number of buffers currently checked out */ int mxOut; /* Highwater mark for nOut */ int anStat[3]; /* 0: hits. 1: size misses. 2: full misses */ LookasideSlot *pFree; /* List of available buffers */ void *pStart; /* First byte of available memory space */ void *pEnd; /* First byte past end of available space */ }; struct LookasideSlot { LookasideSlot *pNext; /* Next buffer in the list of free buffers */ }; /* ** A hash table for function definitions. ** ** Hash each FuncDef structure into one of the FuncDefHash.a[] slots. ** Collisions are on the FuncDef.pHash chain. */ struct FuncDefHash { FuncDef *a[23]; /* Hash table for functions */ }; /* ** Each database connection is an instance of the following structure. ** ** The sqlite.lastRowid records the last insert rowid generated by an ** insert statement. Inserts on views do not affect its value. Each ** trigger has its own context, so that lastRowid can be updated inside ** triggers as usual. The previous value will be restored once the trigger ** exits. Upon entering a before or instead of trigger, lastRowid is no ** longer (since after version 2.8.12) reset to -1. ** ** The sqlite.nChange does not count changes within triggers and keeps no ** context. It is reset at start of sqlite3_exec. ** The sqlite.lsChange represents the number of changes made by the last ** insert, update, or delete statement. It remains constant throughout the ** length of a statement and is then updated by OP_SetCounts. It keeps a ** context stack just like lastRowid so that the count of changes ** within a trigger is not seen outside the trigger. Changes to views do not ** affect the value of lsChange. ** The sqlite.csChange keeps track of the number of current changes (since ** the last statement) and is used to update sqlite_lsChange. ** ** The member variables sqlite.errCode, sqlite.zErrMsg and sqlite.zErrMsg16 ** store the most recent error code and, if applicable, string. The ** internal function sqlite3Error() is used to set these variables ** consistently. */ struct sqlite3 { sqlite3_vfs *pVfs; /* OS Interface */ int nDb; /* Number of backends currently in use */ Db *aDb; /* All backends */ int flags; /* Miscellaneous flags. See below */ unsigned int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */ int errCode; /* Most recent error code (SQLITE_*) */ int errMask; /* & result codes with this before returning */ u8 autoCommit; /* The auto-commit flag. */ u8 temp_store; /* 1: file 2: memory 0: default */ u8 mallocFailed; /* True if we have seen a malloc failure */ u8 dfltLockMode; /* Default locking-mode for attached dbs */ signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */ u8 suppressErr; /* Do not issue error messages if true */ u8 vtabOnConflict; /* Value to return for s3_vtab_on_conflict() */ int nextPagesize; /* Pagesize after VACUUM if >0 */ int nTable; /* Number of tables in the database */ CollSeq *pDfltColl; /* The default collating sequence (BINARY) */ i64 lastRowid; /* ROWID of most recent insert (see above) */ u32 magic; /* Magic number for detect library misuse */ int nChange; /* Value returned by sqlite3_changes() */ int nTotalChange; /* Value returned by sqlite3_total_changes() */ sqlite3_mutex *mutex; /* Connection mutex */ int aLimit[SQLITE_N_LIMIT]; /* Limits */ struct sqlite3InitInfo { /* Information used during initialization */ int iDb; /* When back is being initialized */ int newTnum; /* Rootpage of table being initialized */ u8 busy; /* TRUE if currently initializing */ u8 orphanTrigger; /* Last statement is orphaned TEMP trigger */ } init; int nExtension; /* Number of loaded extensions */ void **aExtension; /* Array of shared library handles */ struct Vdbe *pVdbe; /* List of active virtual machines */ int activeVdbeCnt; /* Number of VDBEs currently executing */ int writeVdbeCnt; /* Number of active VDBEs that are writing */ int vdbeExecCnt; /* Number of nested calls to VdbeExec() */ void (*xTrace)(void*,const char*); /* Trace function */ void *pTraceArg; /* Argument to the trace function */ void (*xProfile)(void*,const char*,u64); /* Profiling function */ void *pProfileArg; /* Argument to profile function */ void *pCommitArg; /* Argument to xCommitCallback() */ int (*xCommitCallback)(void*); /* Invoked at every commit. */ void *pRollbackArg; /* Argument to xRollbackCallback() */ void (*xRollbackCallback)(void*); /* Invoked at every commit. */ void *pUpdateArg; void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64); #ifndef SQLITE_OMIT_WAL int (*xWalCallback)(void *, sqlite3 *, const char *, int); void *pWalArg; #endif void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*); void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*); void *pCollNeededArg; sqlite3_value *pErr; /* Most recent error message */ char *zErrMsg; /* Most recent error message (UTF-8 encoded) */ char *zErrMsg16; /* Most recent error message (UTF-16 encoded) */ union { volatile int isInterrupted; /* True if sqlite3_interrupt has been called */ double notUsed1; /* Spacer */ } u1; Lookaside lookaside; /* Lookaside malloc configuration */ #ifndef SQLITE_OMIT_AUTHORIZATION int (*xAuth)(void*,int,const char*,const char*,const char*,const char*); /* Access authorization function */ void *pAuthArg; /* 1st argument to the access auth function */ #endif #ifndef SQLITE_OMIT_PROGRESS_CALLBACK int (*xProgress)(void *); /* The progress callback */ void *pProgressArg; /* Argument to the progress callback */ int nProgressOps; /* Number of opcodes for progress callback */ #endif #ifndef SQLITE_OMIT_VIRTUALTABLE Hash aModule; /* populated by sqlite3_create_module() */ VtabCtx *pVtabCtx; /* Context for active vtab connect/create */ VTable **aVTrans; /* Virtual tables with open transactions */ int nVTrans; /* Allocated size of aVTrans */ VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */ #endif FuncDefHash aFunc; /* Hash table of connection functions */ Hash aCollSeq; /* All collating sequences */ BusyHandler busyHandler; /* Busy callback */ int busyTimeout; /* Busy handler timeout, in msec */ Db aDbStatic[2]; /* Static space for the 2 default backends */ Savepoint *pSavepoint; /* List of active savepoints */ int nSavepoint; /* Number of non-transaction savepoints */ int nStatement; /* Number of nested statement-transactions */ u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */ i64 nDeferredCons; /* Net deferred constraints this transaction. */ int *pnBytesFreed; /* If not NULL, increment this in DbFree() */ #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY /* The following variables are all protected by the STATIC_MASTER ** mutex, not by sqlite3.mutex. They are used by code in notify.c. ** ** When X.pUnlockConnection==Y, that means that X is waiting for Y to ** unlock so that it can proceed. ** ** When X.pBlockingConnection==Y, that means that something that X tried ** tried to do recently failed with an SQLITE_LOCKED error due to locks ** held by Y. */ sqlite3 *pBlockingConnection; /* Connection that caused SQLITE_LOCKED */ sqlite3 *pUnlockConnection; /* Connection to watch for unlock */ void *pUnlockArg; /* Argument to xUnlockNotify */ void (*xUnlockNotify)(void **, int); /* Unlock notify callback */ sqlite3 *pNextBlocked; /* Next in list of all blocked connections */ #endif }; /* ** A macro to discover the encoding of a database. */ #define ENC(db) ((db)->aDb[0].pSchema->enc) /* ** Possible values for the sqlite3.flags. */ #define SQLITE_VdbeTrace 0x00000100 /* True to trace VDBE execution */ #define SQLITE_InternChanges 0x00000200 /* Uncommitted Hash table changes */ #define SQLITE_FullColNames 0x00000400 /* Show full column names on SELECT */ #define SQLITE_ShortColNames 0x00000800 /* Show short columns names */ #define SQLITE_CountRows 0x00001000 /* Count rows changed by INSERT, */ /* DELETE, or UPDATE and return */ /* the count using a callback. */ #define SQLITE_NullCallback 0x00002000 /* Invoke the callback once if the */ /* result set is empty */ #define SQLITE_SqlTrace 0x00004000 /* Debug print SQL as it executes */ #define SQLITE_VdbeListing 0x00008000 /* Debug listings of VDBE programs */ #define SQLITE_WriteSchema 0x00010000 /* OK to update SQLITE_MASTER */ #define SQLITE_NoReadlock 0x00020000 /* Readlocks are omitted when ** accessing read-only databases */ #define SQLITE_IgnoreChecks 0x00040000 /* Do not enforce check constraints */ #define SQLITE_ReadUncommitted 0x0080000 /* For shared-cache mode */ #define SQLITE_LegacyFileFmt 0x00100000 /* Create new databases in format 1 */ #define SQLITE_FullFSync 0x00200000 /* Use full fsync on the backend */ #define SQLITE_CkptFullFSync 0x00400000 /* Use full fsync for checkpoint */ #define SQLITE_RecoveryMode 0x00800000 /* Ignore schema errors */ #define SQLITE_ReverseOrder 0x01000000 /* Reverse unordered SELECTs */ #define SQLITE_RecTriggers 0x02000000 /* Enable recursive triggers */ #define SQLITE_ForeignKeys 0x04000000 /* Enforce foreign key constraints */ #define SQLITE_AutoIndex 0x08000000 /* Enable automatic indexes */ #define SQLITE_PreferBuiltin 0x10000000 /* Preference to built-in funcs */ #define SQLITE_LoadExtension 0x20000000 /* Enable load_extension */ #define SQLITE_EnableTrigger 0x40000000 /* True to enable triggers */ /* ** Bits of the sqlite3.flags field that are used by the ** sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS,...) interface. ** These must be the low-order bits of the flags field. */ #define SQLITE_QueryFlattener 0x01 /* Disable query flattening */ #define SQLITE_ColumnCache 0x02 /* Disable the column cache */ #define SQLITE_IndexSort 0x04 /* Disable indexes for sorting */ #define SQLITE_IndexSearch 0x08 /* Disable indexes for searching */ #define SQLITE_IndexCover 0x10 /* Disable index covering table */ #define SQLITE_GroupByOrder 0x20 /* Disable GROUPBY cover of ORDERBY */ #define SQLITE_FactorOutConst 0x40 /* Disable factoring out constants */ #define SQLITE_IdxRealAsInt 0x80 /* Store REAL as INT in indices */ #define SQLITE_DistinctOpt 0x80 /* DISTINCT using indexes */ #define SQLITE_OptMask 0xff /* Mask of all disablable opts */ /* ** Possible values for the sqlite.magic field. ** The numbers are obtained at random and have no special meaning, other ** than being distinct from one another. */ #define SQLITE_MAGIC_OPEN 0xa029a697 /* Database is open */ #define SQLITE_MAGIC_CLOSED 0x9f3c2d33 /* Database is closed */ #define SQLITE_MAGIC_SICK 0x4b771290 /* Error and awaiting close */ #define SQLITE_MAGIC_BUSY 0xf03b7906 /* Database currently in use */ #define SQLITE_MAGIC_ERROR 0xb5357930 /* An SQLITE_MISUSE error occurred */ /* ** Each SQL function is defined by an instance of the following ** structure. A pointer to this structure is stored in the sqlite.aFunc ** hash table. When multiple functions have the same name, the hash table ** points to a linked list of these structures. */ struct FuncDef { i16 nArg; /* Number of arguments. -1 means unlimited */ u8 iPrefEnc; /* Preferred text encoding (SQLITE_UTF8, 16LE, 16BE) */ u8 flags; /* Some combination of SQLITE_FUNC_* */ void *pUserData; /* User data parameter */ FuncDef *pNext; /* Next function with same name */ void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */ void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */ void (*xFinalize)(sqlite3_context*); /* Aggregate finalizer */ char *zName; /* SQL name of the function. */ FuncDef *pHash; /* Next with a different name but the same hash */ FuncDestructor *pDestructor; /* Reference counted destructor function */ }; /* ** This structure encapsulates a user-function destructor callback (as ** configured using create_function_v2()) and a reference counter. When ** create_function_v2() is called to create a function with a destructor, ** a single object of this type is allocated. FuncDestructor.nRef is set to ** the number of FuncDef objects created (either 1 or 3, depending on whether ** or not the specified encoding is SQLITE_ANY). The FuncDef.pDestructor ** member of each of the new FuncDef objects is set to point to the allocated ** FuncDestructor. ** ** Thereafter, when one of the FuncDef objects is deleted, the reference ** count on this object is decremented. When it reaches 0, the destructor ** is invoked and the FuncDestructor structure freed. */ struct FuncDestructor { int nRef; void (*xDestroy)(void *); void *pUserData; }; /* ** Possible values for FuncDef.flags */ #define SQLITE_FUNC_LIKE 0x01 /* Candidate for the LIKE optimization */ #define SQLITE_FUNC_CASE 0x02 /* Case-sensitive LIKE-type function */ #define SQLITE_FUNC_EPHEM 0x04 /* Ephemeral. Delete with VDBE */ #define SQLITE_FUNC_NEEDCOLL 0x08 /* sqlite3GetFuncCollSeq() might be called */ #define SQLITE_FUNC_PRIVATE 0x10 /* Allowed for internal use only */ #define SQLITE_FUNC_COUNT 0x20 /* Built-in count(*) aggregate */ #define SQLITE_FUNC_COALESCE 0x40 /* Built-in coalesce() or ifnull() function */ /* ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are ** used to create the initializers for the FuncDef structures. ** ** FUNCTION(zName, nArg, iArg, bNC, xFunc) ** Used to create a scalar function definition of a function zName ** implemented by C function xFunc that accepts nArg arguments. The ** value passed as iArg is cast to a (void*) and made available ** as the user-data (sqlite3_user_data()) for the function. If ** argument bNC is true, then the SQLITE_FUNC_NEEDCOLL flag is set. ** ** AGGREGATE(zName, nArg, iArg, bNC, xStep, xFinal) ** Used to create an aggregate function definition implemented by ** the C functions xStep and xFinal. The first four parameters ** are interpreted in the same way as the first 4 parameters to ** FUNCTION(). ** ** LIKEFUNC(zName, nArg, pArg, flags) ** Used to create a scalar function definition of a function zName ** that accepts nArg arguments and is implemented by a call to C ** function likeFunc. Argument pArg is cast to a (void *) and made ** available as the function user-data (sqlite3_user_data()). The ** FuncDef.flags variable is set to the value passed as the flags ** parameter. */ #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \ {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \ SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0} #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \ {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \ pArg, 0, xFunc, 0, 0, #zName, 0, 0} #define LIKEFUNC(zName, nArg, arg, flags) \ {nArg, SQLITE_UTF8, flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0} #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \ {nArg, SQLITE_UTF8, nc*SQLITE_FUNC_NEEDCOLL, \ SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0} /* ** All current savepoints are stored in a linked list starting at ** sqlite3.pSavepoint. The first element in the list is the most recently ** opened savepoint. Savepoints are added to the list by the vdbe ** OP_Savepoint instruction. */ struct Savepoint { char *zName; /* Savepoint name (nul-terminated) */ i64 nDeferredCons; /* Number of deferred fk violations */ Savepoint *pNext; /* Parent savepoint (if any) */ }; /* ** The following are used as the second parameter to sqlite3Savepoint(), ** and as the P1 argument to the OP_Savepoint instruction. */ #define SAVEPOINT_BEGIN 0 #define SAVEPOINT_RELEASE 1 #define SAVEPOINT_ROLLBACK 2 /* ** Each SQLite module (virtual table definition) is defined by an ** instance of the following structure, stored in the sqlite3.aModule ** hash table. */ struct Module { const sqlite3_module *pModule; /* Callback pointers */ const char *zName; /* Name passed to create_module() */ void *pAux; /* pAux passed to create_module() */ void (*xDestroy)(void *); /* Module destructor function */ }; /* ** information about each column of an SQL table is held in an instance ** of this structure. */ struct Column { char *zName; /* Name of this column */ Expr *pDflt; /* Default value of this column */ char *zDflt; /* Original text of the default value */ char *zType; /* Data type for this column */ char *zColl; /* Collating sequence. If NULL, use the default */ u8 notNull; /* True if there is a NOT NULL constraint */ u8 isPrimKey; /* True if this column is part of the PRIMARY KEY */ char affinity; /* One of the SQLITE_AFF_... values */ #ifndef SQLITE_OMIT_VIRTUALTABLE u8 isHidden; /* True if this column is 'hidden' */ #endif }; /* ** A "Collating Sequence" is defined by an instance of the following ** structure. Conceptually, a collating sequence consists of a name and ** a comparison routine that defines the order of that sequence. ** ** There may two separate implementations of the collation function, one ** that processes text in UTF-8 encoding (CollSeq.xCmp) and another that ** processes text encoded in UTF-16 (CollSeq.xCmp16), using the machine ** native byte order. When a collation sequence is invoked, SQLite selects ** the version that will require the least expensive encoding ** translations, if any. ** ** The CollSeq.pUser member variable is an extra parameter that passed in ** as the first argument to the UTF-8 comparison function, xCmp. ** CollSeq.pUser16 is the equivalent for the UTF-16 comparison function, ** xCmp16. ** ** If both CollSeq.xCmp and CollSeq.xCmp16 are NULL, it means that the ** collating sequence is undefined. Indices built on an undefined ** collating sequence may not be read or written. */ struct CollSeq { char *zName; /* Name of the collating sequence, UTF-8 encoded */ u8 enc; /* Text encoding handled by xCmp() */ void *pUser; /* First argument to xCmp() */ int (*xCmp)(void*,int, const void*, int, const void*); void (*xDel)(void*); /* Destructor for pUser */ }; /* ** A sort order can be either ASC or DESC. */ #define SQLITE_SO_ASC 0 /* Sort in ascending order */ #define SQLITE_SO_DESC 1 /* Sort in ascending order */ /* ** Column affinity types. ** ** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and ** 't' for SQLITE_AFF_TEXT. But we can save a little space and improve ** the speed a little by numbering the values consecutively. ** ** But rather than start with 0 or 1, we begin with 'a'. That way, ** when multiple affinity types are concatenated into a string and ** used as the P4 operand, they will be more readable. ** ** Note also that the numeric types are grouped together so that testing ** for a numeric type is a single comparison. */ #define SQLITE_AFF_TEXT 'a' #define SQLITE_AFF_NONE 'b' #define SQLITE_AFF_NUMERIC 'c' #define SQLITE_AFF_INTEGER 'd' #define SQLITE_AFF_REAL 'e' #define sqlite3IsNumericAffinity(X) ((X)>=SQLITE_AFF_NUMERIC) /* ** The SQLITE_AFF_MASK values masks off the significant bits of an ** affinity value. */ #define SQLITE_AFF_MASK 0x67 /* ** Additional bit values that can be ORed with an affinity without ** changing the affinity. */ #define SQLITE_JUMPIFNULL 0x08 /* jumps if either operand is NULL */ #define SQLITE_STOREP2 0x10 /* Store result in reg[P2] rather than jump */ #define SQLITE_NULLEQ 0x80 /* NULL=NULL */ /* ** An object of this type is created for each virtual table present in ** the database schema. ** ** If the database schema is shared, then there is one instance of this ** structure for each database connection (sqlite3*) that uses the shared ** schema. This is because each database connection requires its own unique ** instance of the sqlite3_vtab* handle used to access the virtual table ** implementation. sqlite3_vtab* handles can not be shared between ** database connections, even when the rest of the in-memory database ** schema is shared, as the implementation often stores the database ** connection handle passed to it via the xConnect() or xCreate() method ** during initialization internally. This database connection handle may ** then be used by the virtual table implementation to access real tables ** within the database. So that they appear as part of the callers ** transaction, these accesses need to be made via the same database ** connection as that used to execute SQL operations on the virtual table. ** ** All VTable objects that correspond to a single table in a shared ** database schema are initially stored in a linked-list pointed to by ** the Table.pVTable member variable of the corresponding Table object. ** When an sqlite3_prepare() operation is required to access the virtual ** table, it searches the list for the VTable that corresponds to the ** database connection doing the preparing so as to use the correct ** sqlite3_vtab* handle in the compiled query. ** ** When an in-memory Table object is deleted (for example when the ** schema is being reloaded for some reason), the VTable objects are not ** deleted and the sqlite3_vtab* handles are not xDisconnect()ed ** immediately. Instead, they are moved from the Table.pVTable list to ** another linked list headed by the sqlite3.pDisconnect member of the ** corresponding sqlite3 structure. They are then deleted/xDisconnected ** next time a statement is prepared using said sqlite3*. This is done ** to avoid deadlock issues involving multiple sqlite3.mutex mutexes. ** Refer to comments above function sqlite3VtabUnlockList() for an ** explanation as to why it is safe to add an entry to an sqlite3.pDisconnect ** list without holding the corresponding sqlite3.mutex mutex. ** ** The memory for objects of this type is always allocated by ** sqlite3DbMalloc(), using the connection handle stored in VTable.db as ** the first argument. */ struct VTable { sqlite3 *db; /* Database connection associated with this table */ Module *pMod; /* Pointer to module implementation */ sqlite3_vtab *pVtab; /* Pointer to vtab instance */ int nRef; /* Number of pointers to this structure */ u8 bConstraint; /* True if constraints are supported */ int iSavepoint; /* Depth of the SAVEPOINT stack */ VTable *pNext; /* Next in linked list (see above) */ }; /* ** Each SQL table is represented in memory by an instance of the ** following structure. ** ** Table.zName is the name of the table. The case of the original ** CREATE TABLE statement is stored, but case is not significant for ** comparisons. ** ** Table.nCol is the number of columns in this table. Table.aCol is a ** pointer to an array of Column structures, one for each column. ** ** If the table has an INTEGER PRIMARY KEY, then Table.iPKey is the index of ** the column that is that key. Otherwise Table.iPKey is negative. Note ** that the datatype of the PRIMARY KEY must be INTEGER for this field to ** be set. An INTEGER PRIMARY KEY is used as the rowid for each row of ** the table. If a table has no INTEGER PRIMARY KEY, then a random rowid ** is generated for each row of the table. TF_HasPrimaryKey is set if ** the table has any PRIMARY KEY, INTEGER or otherwise. ** ** Table.tnum is the page number for the root BTree page of the table in the ** database file. If Table.iDb is the index of the database table backend ** in sqlite.aDb[]. 0 is for the main database and 1 is for the file that ** holds temporary tables and indices. If TF_Ephemeral is set ** then the table is stored in a file that is automatically deleted ** when the VDBE cursor to the table is closed. In this case Table.tnum ** refers VDBE cursor number that holds the table open, not to the root ** page number. Transient tables are used to hold the results of a ** sub-query that appears instead of a real table name in the FROM clause ** of a SELECT statement. */ struct Table { char *zName; /* Name of the table or view */ int iPKey; /* If not negative, use aCol[iPKey] as the primary key */ int nCol; /* Number of columns in this table */ Column *aCol; /* Information about each column */ Index *pIndex; /* List of SQL indexes on this table. */ int tnum; /* Root BTree node for this table (see note above) */ tRowcnt nRowEst; /* Estimated rows in table - from sqlite_stat1 table */ Select *pSelect; /* NULL for tables. Points to definition if a view. */ u16 nRef; /* Number of pointers to this Table */ u8 tabFlags; /* Mask of TF_* values */ u8 keyConf; /* What to do in case of uniqueness conflict on iPKey */ FKey *pFKey; /* Linked list of all foreign keys in this table */ char *zColAff; /* String defining the affinity of each column */ #ifndef SQLITE_OMIT_CHECK Expr *pCheck; /* The AND of all CHECK constraints */ #endif #ifndef SQLITE_OMIT_ALTERTABLE int addColOffset; /* Offset in CREATE TABLE stmt to add a new column */ #endif #ifndef SQLITE_OMIT_VIRTUALTABLE VTable *pVTable; /* List of VTable objects. */ int nModuleArg; /* Number of arguments to the module */ char **azModuleArg; /* Text of all module args. [0] is module name */ #endif Trigger *pTrigger; /* List of triggers stored in pSchema */ Schema *pSchema; /* Schema that contains this table */ Table *pNextZombie; /* Next on the Parse.pZombieTab list */ }; /* ** Allowed values for Tabe.tabFlags. */ #define TF_Readonly 0x01 /* Read-only system table */ #define TF_Ephemeral 0x02 /* An ephemeral table */ #define TF_HasPrimaryKey 0x04 /* Table has a primary key */ #define TF_Autoincrement 0x08 /* Integer primary key is autoincrement */ #define TF_Virtual 0x10 /* Is a virtual table */ #define TF_NeedMetadata 0x20 /* aCol[].zType and aCol[].pColl missing */ /* ** Test to see whether or not a table is a virtual table. This is ** done as a macro so that it will be optimized out when virtual ** table support is omitted from the build. */ #ifndef SQLITE_OMIT_VIRTUALTABLE # define IsVirtual(X) (((X)->tabFlags & TF_Virtual)!=0) # define IsHiddenColumn(X) ((X)->isHidden) #else # define IsVirtual(X) 0 # define IsHiddenColumn(X) 0 #endif /* ** Each foreign key constraint is an instance of the following structure. ** ** A foreign key is associated with two tables. The "from" table is ** the table that contains the REFERENCES clause that creates the foreign ** key. The "to" table is the table that is named in the REFERENCES clause. ** Consider this example: ** ** CREATE TABLE ex1( ** a INTEGER PRIMARY KEY, ** b INTEGER CONSTRAINT fk1 REFERENCES ex2(x) ** ); ** ** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2". ** ** Each REFERENCES clause generates an instance of the following structure ** which is attached to the from-table. The to-table need not exist when ** the from-table is created. The existence of the to-table is not checked. */ struct FKey { Table *pFrom; /* Table containing the REFERENCES clause (aka: Child) */ FKey *pNextFrom; /* Next foreign key in pFrom */ char *zTo; /* Name of table that the key points to (aka: Parent) */ FKey *pNextTo; /* Next foreign key on table named zTo */ FKey *pPrevTo; /* Previous foreign key on table named zTo */ int nCol; /* Number of columns in this key */ /* EV: R-30323-21917 */ u8 isDeferred; /* True if constraint checking is deferred till COMMIT */ u8 aAction[2]; /* ON DELETE and ON UPDATE actions, respectively */ Trigger *apTrigger[2]; /* Triggers for aAction[] actions */ struct sColMap { /* Mapping of columns in pFrom to columns in zTo */ int iFrom; /* Index of column in pFrom */ char *zCol; /* Name of column in zTo. If 0 use PRIMARY KEY */ } aCol[1]; /* One entry for each of nCol column s */ }; /* ** SQLite supports many different ways to resolve a constraint ** error. ROLLBACK processing means that a constraint violation ** causes the operation in process to fail and for the current transaction ** to be rolled back. ABORT processing means the operation in process ** fails and any prior changes from that one operation are backed out, ** but the transaction is not rolled back. FAIL processing means that ** the operation in progress stops and returns an error code. But prior ** changes due to the same operation are not backed out and no rollback ** occurs. IGNORE means that the particular row that caused the constraint ** error is not inserted or updated. Processing continues and no error ** is returned. REPLACE means that preexisting database rows that caused ** a UNIQUE constraint violation are removed so that the new insert or ** update can proceed. Processing continues and no error is reported. ** ** RESTRICT, SETNULL, and CASCADE actions apply only to foreign keys. ** RESTRICT is the same as ABORT for IMMEDIATE foreign keys and the ** same as ROLLBACK for DEFERRED keys. SETNULL means that the foreign ** key is set to NULL. CASCADE means that a DELETE or UPDATE of the ** referenced table row is propagated into the row that holds the ** foreign key. ** ** The following symbolic values are used to record which type ** of action to take. */ #define OE_None 0 /* There is no constraint to check */ #define OE_Rollback 1 /* Fail the operation and rollback the transaction */ #define OE_Abort 2 /* Back out changes but do no rollback transaction */ #define OE_Fail 3 /* Stop the operation but leave all prior changes */ #define OE_Ignore 4 /* Ignore the error. Do not do the INSERT or UPDATE */ #define OE_Replace 5 /* Delete existing record, then do INSERT or UPDATE */ #define OE_Restrict 6 /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */ #define OE_SetNull 7 /* Set the foreign key value to NULL */ #define OE_SetDflt 8 /* Set the foreign key value to its default */ #define OE_Cascade 9 /* Cascade the changes */ #define OE_Default 99 /* Do whatever the default action is */ /* ** An instance of the following structure is passed as the first ** argument to sqlite3VdbeKeyCompare and is used to control the ** comparison of the two index keys. */ struct KeyInfo { sqlite3 *db; /* The database connection */ u8 enc; /* Text encoding - one of the SQLITE_UTF* values */ u16 nField; /* Number of entries in aColl[] */ u8 *aSortOrder; /* Sort order for each column. May be NULL */ CollSeq *aColl[1]; /* Collating sequence for each term of the key */ }; /* ** An instance of the following structure holds information about a ** single index record that has already been parsed out into individual ** values. ** ** A record is an object that contains one or more fields of data. ** Records are used to store the content of a table row and to store ** the key of an index. A blob encoding of a record is created by ** the OP_MakeRecord opcode of the VDBE and is disassembled by the ** OP_Column opcode. ** ** This structure holds a record that has already been disassembled ** into its constituent fields. */ struct UnpackedRecord { KeyInfo *pKeyInfo; /* Collation and sort-order information */ u16 nField; /* Number of entries in apMem[] */ u8 flags; /* Boolean settings. UNPACKED_... below */ i64 rowid; /* Used by UNPACKED_PREFIX_SEARCH */ Mem *aMem; /* Values */ }; /* ** Allowed values of UnpackedRecord.flags */ #define UNPACKED_INCRKEY 0x01 /* Make this key an epsilon larger */ #define UNPACKED_PREFIX_MATCH 0x02 /* A prefix match is considered OK */ #define UNPACKED_PREFIX_SEARCH 0x04 /* Ignore final (rowid) field */ /* ** Each SQL index is represented in memory by an ** instance of the following structure. ** ** The columns of the table that are to be indexed are described ** by the aiColumn[] field of this structure. For example, suppose ** we have the following table and index: ** ** CREATE TABLE Ex1(c1 int, c2 int, c3 text); ** CREATE INDEX Ex2 ON Ex1(c3,c1); ** ** In the Table structure describing Ex1, nCol==3 because there are ** three columns in the table. In the Index structure describing ** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed. ** The value of aiColumn is {2, 0}. aiColumn[0]==2 because the ** first column to be indexed (c3) has an index of 2 in Ex1.aCol[]. ** The second column to be indexed (c1) has an index of 0 in ** Ex1.aCol[], hence Ex2.aiColumn[1]==0. ** ** The Index.onError field determines whether or not the indexed columns ** must be unique and what to do if they are not. When Index.onError=OE_None, ** it means this is not a unique index. Otherwise it is a unique index ** and the value of Index.onError indicate the which conflict resolution ** algorithm to employ whenever an attempt is made to insert a non-unique ** element. */ struct Index { char *zName; /* Name of this index */ int nColumn; /* Number of columns in the table used by this index */ int *aiColumn; /* Which columns are used by this index. 1st is 0 */ tRowcnt *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */ Table *pTable; /* The SQL table being indexed */ int tnum; /* Page containing root of this index in database file */ u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */ u8 autoIndex; /* True if is automatically created (ex: by UNIQUE) */ u8 bUnordered; /* Use this index for == or IN queries only */ char *zColAff; /* String defining the affinity of each column */ Index *pNext; /* The next index associated with the same table */ Schema *pSchema; /* Schema containing this index */ u8 *aSortOrder; /* Array of size Index.nColumn. True==DESC, False==ASC */ char **azColl; /* Array of collation sequence names for index */ #ifdef SQLITE_ENABLE_STAT3 int nSample; /* Number of elements in aSample[] */ tRowcnt avgEq; /* Average nEq value for key values not in aSample */ IndexSample *aSample; /* Samples of the left-most key */ #endif }; /* ** Each sample stored in the sqlite_stat3 table is represented in memory ** using a structure of this type. See documentation at the top of the ** analyze.c source file for additional information. */ struct IndexSample { union { char *z; /* Value if eType is SQLITE_TEXT or SQLITE_BLOB */ double r; /* Value if eType is SQLITE_FLOAT */ i64 i; /* Value if eType is SQLITE_INTEGER */ } u; u8 eType; /* SQLITE_NULL, SQLITE_INTEGER ... etc. */ int nByte; /* Size in byte of text or blob. */ tRowcnt nEq; /* Est. number of rows where the key equals this sample */ tRowcnt nLt; /* Est. number of rows where key is less than this sample */ tRowcnt nDLt; /* Est. number of distinct keys less than this sample */ }; /* ** Each token coming out of the lexer is an instance of ** this structure. Tokens are also used as part of an expression. ** ** Note if Token.z==0 then Token.dyn and Token.n are undefined and ** may contain random values. Do not make any assumptions about Token.dyn ** and Token.n when Token.z==0. */ struct Token { const char *z; /* Text of the token. Not NULL-terminated! */ unsigned int n; /* Number of characters in this token */ }; /* ** An instance of this structure contains information needed to generate ** code for a SELECT that contains aggregate functions. ** ** If Expr.op==TK_AGG_COLUMN or TK_AGG_FUNCTION then Expr.pAggInfo is a ** pointer to this structure. The Expr.iColumn field is the index in ** AggInfo.aCol[] or AggInfo.aFunc[] of information needed to generate ** code for that node. ** ** AggInfo.pGroupBy and AggInfo.aFunc.pExpr point to fields within the ** original Select structure that describes the SELECT statement. These ** fields do not need to be freed when deallocating the AggInfo structure. */ struct AggInfo { u8 directMode; /* Direct rendering mode means take data directly ** from source tables rather than from accumulators */ u8 useSortingIdx; /* In direct mode, reference the sorting index rather ** than the source table */ int sortingIdx; /* Cursor number of the sorting index */ int sortingIdxPTab; /* Cursor number of pseudo-table */ ExprList *pGroupBy; /* The group by clause */ int nSortingColumn; /* Number of columns in the sorting index */ struct AggInfo_col { /* For each column used in source tables */ Table *pTab; /* Source table */ int iTable; /* Cursor number of the source table */ int iColumn; /* Column number within the source table */ int iSorterColumn; /* Column number in the sorting index */ int iMem; /* Memory location that acts as accumulator */ Expr *pExpr; /* The original expression */ } *aCol; int nColumn; /* Number of used entries in aCol[] */ int nColumnAlloc; /* Number of slots allocated for aCol[] */ int nAccumulator; /* Number of columns that show through to the output. ** Additional columns are used only as parameters to ** aggregate functions */ struct AggInfo_func { /* For each aggregate function */ Expr *pExpr; /* Expression encoding the function */ FuncDef *pFunc; /* The aggregate function implementation */ int iMem; /* Memory location that acts as accumulator */ int iDistinct; /* Ephemeral table used to enforce DISTINCT */ } *aFunc; int nFunc; /* Number of entries in aFunc[] */ int nFuncAlloc; /* Number of slots allocated for aFunc[] */ }; /* ** The datatype ynVar is a signed integer, either 16-bit or 32-bit. ** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater ** than 32767 we have to make it 32-bit. 16-bit is preferred because ** it uses less memory in the Expr object, which is a big memory user ** in systems with lots of prepared statements. And few applications ** need more than about 10 or 20 variables. But some extreme users want ** to have prepared statements with over 32767 variables, and for them ** the option is available (at compile-time). */ #if SQLITE_MAX_VARIABLE_NUMBER<=32767 typedef i16 ynVar; #else typedef int ynVar; #endif /* ** Each node of an expression in the parse tree is an instance ** of this structure. ** ** Expr.op is the opcode. The integer parser token codes are reused ** as opcodes here. For example, the parser defines TK_GE to be an integer ** code representing the ">=" operator. This same integer code is reused ** to represent the greater-than-or-equal-to operator in the expression ** tree. ** ** If the expression is an SQL literal (TK_INTEGER, TK_FLOAT, TK_BLOB, ** or TK_STRING), then Expr.token contains the text of the SQL literal. If ** the expression is a variable (TK_VARIABLE), then Expr.token contains the ** variable name. Finally, if the expression is an SQL function (TK_FUNCTION), ** then Expr.token contains the name of the function. ** ** Expr.pRight and Expr.pLeft are the left and right subexpressions of a ** binary operator. Either or both may be NULL. ** ** Expr.x.pList is a list of arguments if the expression is an SQL function, ** a CASE expression or an IN expression of the form " IN (, ...)". ** Expr.x.pSelect is used if the expression is a sub-select or an expression of ** the form " IN (SELECT ...)". If the EP_xIsSelect bit is set in the ** Expr.flags mask, then Expr.x.pSelect is valid. Otherwise, Expr.x.pList is ** valid. ** ** An expression of the form ID or ID.ID refers to a column in a table. ** For such expressions, Expr.op is set to TK_COLUMN and Expr.iTable is ** the integer cursor number of a VDBE cursor pointing to that table and ** Expr.iColumn is the column number for the specific column. If the ** expression is used as a result in an aggregate SELECT, then the ** value is also stored in the Expr.iAgg column in the aggregate so that ** it can be accessed after all aggregates are computed. ** ** If the expression is an unbound variable marker (a question mark ** character '?' in the original SQL) then the Expr.iTable holds the index ** number for that variable. ** ** If the expression is a subquery then Expr.iColumn holds an integer ** register number containing the result of the subquery. If the ** subquery gives a constant result, then iTable is -1. If the subquery ** gives a different answer at different times during statement processing ** then iTable is the address of a subroutine that computes the subquery. ** ** If the Expr is of type OP_Column, and the table it is selecting from ** is a disk table or the "old.*" pseudo-table, then pTab points to the ** corresponding table definition. ** ** ALLOCATION NOTES: ** ** Expr objects can use a lot of memory space in database schema. To ** help reduce memory requirements, sometimes an Expr object will be ** truncated. And to reduce the number of memory allocations, sometimes ** two or more Expr objects will be stored in a single memory allocation, ** together with Expr.zToken strings. ** ** If the EP_Reduced and EP_TokenOnly flags are set when ** an Expr object is truncated. When EP_Reduced is set, then all ** the child Expr objects in the Expr.pLeft and Expr.pRight subtrees ** are contained within the same memory allocation. Note, however, that ** the subtrees in Expr.x.pList or Expr.x.pSelect are always separately ** allocated, regardless of whether or not EP_Reduced is set. */ struct Expr { u8 op; /* Operation performed by this node */ char affinity; /* The affinity of the column or 0 if not a column */ u16 flags; /* Various flags. EP_* See below */ union { char *zToken; /* Token value. Zero terminated and dequoted */ int iValue; /* Non-negative integer value if EP_IntValue */ } u; /* If the EP_TokenOnly flag is set in the Expr.flags mask, then no ** space is allocated for the fields below this point. An attempt to ** access them will result in a segfault or malfunction. *********************************************************************/ Expr *pLeft; /* Left subnode */ Expr *pRight; /* Right subnode */ union { ExprList *pList; /* Function arguments or in " IN ( IN ( and save them in the array . */ void gth_region_factory_save(GthRegionFactory *region_factory, GtArray *nodes, GthInput *input); GtStr* gth_region_factory_get_seqid(GthRegionFactory*, unsigned long filenum, unsigned long seqnum); long gth_region_factory_offset(GthRegionFactory*, unsigned long filenum, unsigned long seqnum); #endif genometools-1.5.1/src/gth/run_header.c000066400000000000000000000146541211610345200177070ustar00rootroot00000000000000/* Copyright (c) 2003-2010 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/cstr_array.h" #include "gth/indent.h" #include "gth/showbool.h" #include "gth/time.h" #include "gth/call_info.h" #include "gth/gthspeciestab.h" #include "gth/run_header.h" #include "gt_config.h" /* The name of the splice site models. */ #define SPLICE_SITE_MODEL_NAME "Bayesian" /* The name of the generic species */ #define GENERIC_SPECIES_NAME "generic" static void show_overall_reference_type(GthAlphatype overallalphatype, unsigned int indentlevel, GtFile *outfp) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, ""); switch (overallalphatype) { case DNA_ALPHA: gt_file_xprintf(outfp, "ESTcDNA"); break; case PROTEIN_ALPHA: gt_file_xprintf(outfp, "Protein"); break; case MIXED_ALPHA: gt_file_xprintf(outfp, "Mixed"); break; default: gt_assert(0); } gt_file_xprintf(outfp, "\n"); } static void show_xml_run_header(GthCallInfo *call_info, GthInput *input, const char *timestring, const char *gth_version, unsigned int indentlevel, const char **args) { GtFile *outfp = call_info->out->outfp; unsigned long i; gth_indent(outfp, indentlevel); if (call_info->intermediate) { gt_file_xprintf(outfp, "
    \n"); } else { gt_file_xprintf(outfp, "
    \n"); } /* at least one genomic file defined */ gt_assert(gth_input_num_of_gen_files(input)); /* at least one reference file defined */ gt_assert(gth_input_num_of_ref_files(input)); /* show a readable version of GthCallInfo. That is, it is shown with wich parameters the program was called */ indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_version, GT_BUILT, timestring); /* show genomic file names */ gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; for (i = 0; i < gth_input_num_of_gen_files(input); i++) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%s\n", gth_input_get_genomic_filename(input, i)); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); /* show reference file names */ gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; for (i = 0; i < gth_input_num_of_ref_files(input); i++) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_input_get_reference_filename(input, i), gth_input_get_alphatype(input, i) == DNA_ALPHA ? "ESTcDNA" : "Protein"); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", SPLICE_SITE_MODEL_NAME, call_info->speciesnum == NUMOFSPECIES ? GENERIC_SPECIES_NAME : speciestab[call_info->speciesnum]); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; /* output name of BSSM file */ gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_input_bssmfilename(input)); /* output name of scorematrix */ gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gt_str_get(call_info->scorematrixfile)); /* output searchmode */ gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", GTH_SHOWBOOL(gth_input_forward(input)), GTH_SHOWBOOL(gth_input_reverse(input))); /* output arguments as comment */ gt_file_xprintf(outfp, "\n"); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); show_overall_reference_type(gth_input_overall_alphatype(input), indentlevel, outfp); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "
    \n"); } void gth_run_header_show(GthCallInfo *call_info, GthInput *input, const char *gth_version, unsigned int indentlevel, const char **args) { char *timestring; GtFile *outfp = call_info->out->outfp; /* determine time */ timestring = gth_get_time(); /* output XML header */ if (call_info->out->xmlout) { show_xml_run_header(call_info, input, timestring, gth_version, indentlevel, args); } else if (!call_info->out->gff3out) { gt_file_xprintf(outfp, "%c GenomeThreader %s (%s)\n", COMMENTCHAR, gth_version, GT_BUILT); gt_file_xprintf(outfp, "%c Date run: %s\n", COMMENTCHAR, timestring); gt_file_xprintf(outfp, "%c Arguments: ", COMMENTCHAR); gt_cstr_array_show_genfile(args, outfp); } /* free */ gt_free(timestring); } genometools-1.5.1/src/gth/run_header.h000066400000000000000000000021601211610345200177010ustar00rootroot00000000000000/* Copyright (c) 2003-2010 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RUN_HEADER_H #define RUN_HEADER_H #include "gth/stat.h" /* output the run header in plain or XML format */ void gth_run_header_show(GthCallInfo*, GthInput*, const char *gth_version, unsigned int indentlevel, const char **args); #endif genometools-1.5.1/src/gth/sa.c000066400000000000000000001275351211610345200162010ustar00rootroot00000000000000/* Copyright (c) 2003-2012 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/mathsupport.h" #include "core/md5_seqid.h" #include "core/safearith.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "extended/gff3_escaping.h" #include "gth/default.h" #include "gth/sa.h" #include "gth/txt_sa_visitor.h" #define SA_DELIMITERLINECHAR '*' #define CALCPOLYATAILWINDOW 50 #define MINIMUMPOLYATAILLENGTH 10 /* Keep in sync with gth_sas_are_equal()! */ struct GthSA { GthBacktracePath *backtrace_path; /* the edit operations */ unsigned long gen_total_length, /* total length of the genomic sequence */ gen_offset, /* offset of the genomic sequence where this SA refers to */ ref_total_length, /* total length of reference sequence */ gen_file_num, /* genomic file number */ gen_seq_num, /* genomic sequence number */ ref_file_num, /* reference file number */ ref_seq_num; /* reference sequence number */ GtStr *gen_id, /* contains id of genomic sequence */ *ref_id, /* contains id of reference sequence */ *gen_md5, /* contains MD5 of genomic sequence, if necessary */ *ref_md5, /* contains MD5 of reference sequence, if necessary */ *gen_desc, /* contains description of genomic sequence, if necessary */ *ref_desc; /* contains description of reference sequence, if necessary */ bool gen_strand_forward, /* equals true, iff the alignment relates to the forward strand of the genomic sequence */ ref_strand_forward; /* equals true, iff the alignment relates to the forward strand of the reference sequence */ GtArray *exons, /* contains the information about all exons */ *introns; /* contains the information about all introns */ GtRange polyAtailpos; /* (GS2 = ppa), contains the positions of the poly-A tail in the reference sequence. Iff both positions are equal to zero, no poly-A tail could be determined. */ GthFlt alignmentscore, /* the score of the alignment (GS2 = simscore) */ coverage; /* coverage of the genomic DNA or cDNA segment, whichever is highest (GS2 = cvrge) */ bool genomic_cov_is_highest; /* (GS2 = no equivalent) */ unsigned long cumlen_scored_exons, /* cumulative length of scored exons (GS2 = mlgth) */ call_number; /* the consecutive number of successful DP calls. not really usefull, only for compatibility with GS2 */ GtStr *gff3_target_attribute; }; GthSA* gth_sa_new(void) { GthSA *sa; /* allocating space */ sa = gt_calloc(1, sizeof *sa); /* initialize strings */ sa->gen_id = gt_str_new(); sa->ref_id = gt_str_new(); /* initialize all arrays */ sa->backtrace_path = gth_backtrace_path_new(GT_UNDEF_ULONG, GT_UNDEF_ULONG, 0, /* ref_dp_start */ GT_UNDEF_ULONG); sa->exons = gt_array_new(sizeof (Exoninfo)); sa->introns = gt_array_new(sizeof (Introninfo)); return sa; } GthSA* gth_sa_new_and_set(bool gen_strand_forward, bool ref_strand_forward, GthInput *input, unsigned long gen_file_num, unsigned long gen_seq_num, unsigned long ref_file_num, unsigned long ref_seq_num, unsigned long call_number, unsigned long gen_total_length, unsigned long gen_offset, unsigned long ref_total_length) { GthSA *sa; /* alloc and init of arrays */ sa = gth_sa_new(); /* setting the strand directions */ sa->gen_strand_forward = gen_strand_forward; sa->ref_strand_forward = ref_strand_forward; /* saving sequence ids */ gth_input_save_gen_id(input, sa->gen_id, gen_file_num, gen_seq_num); gth_input_save_ref_id(input, sa->ref_id, ref_file_num, ref_seq_num); /* saving MD5s, if necessary */ gth_input_save_gen_md5(input, &sa->gen_md5, gen_file_num, gen_seq_num); gth_input_save_ref_md5(input, &sa->ref_md5, ref_file_num, ref_seq_num); /* saving descriptions, if necessary */ gth_input_save_gen_desc(input, &sa->gen_desc, gen_file_num, gen_seq_num); gth_input_save_ref_desc(input, &sa->ref_desc, ref_file_num, ref_seq_num); /* save the consecutive call number */ sa->call_number = call_number; /* save total length of genomic sequence */ sa->gen_total_length = gen_total_length; /* save genomic offset */ sa->gen_offset = gen_offset; /* save total length of reference sequence */ sa->ref_total_length = ref_total_length; gth_backtrace_path_set_ref_dp_length(sa->backtrace_path, ref_total_length); /* save file and sequence numbers */ sa->gen_file_num = gen_file_num; sa->gen_seq_num = gen_seq_num; sa->ref_file_num = ref_file_num; sa->ref_seq_num = ref_seq_num; return sa; } void gth_sa_set(GthSA *sa, GthAlphatype ref_alphatype, unsigned long gen_dp_start, unsigned long gen_dp_length) { gth_backtrace_path_set_gen_dp_start(sa->backtrace_path, gen_dp_start); gth_backtrace_path_set_gen_dp_length(sa->backtrace_path, gen_dp_length); gth_sa_set_score(sa, 0.0); gth_sa_set_coverage(sa, 0.0); gth_sa_set_highest_cov(sa, true); gth_sa_set_cumlen_scored_exons(sa, 0); /* reset edit operations */ gth_backtrace_path_reset(sa->backtrace_path); gth_backtrace_path_set_alphatype(sa->backtrace_path, ref_alphatype); /* reset arrays */ gt_array_reset(sa->exons); gt_array_reset(sa->introns); } void gth_sa_set_gen_dp_length(GthSA *sa, unsigned long gen_dp_length) { gt_assert(sa); gth_backtrace_path_set_gen_dp_length(sa->backtrace_path, gen_dp_length); } void gth_sa_delete(GthSA *sa) { if (!sa) return; gth_backtrace_path_delete(sa->backtrace_path); gt_array_delete(sa->exons); gt_array_delete(sa->introns); gt_str_delete(sa->gen_id); gt_str_delete(sa->ref_id); gt_str_delete(sa->gen_md5); gt_str_delete(sa->ref_md5); gt_str_delete(sa->gen_desc); gt_str_delete(sa->ref_desc); gt_str_delete(sa->gff3_target_attribute); gt_free(sa); } void gth_sa_show_exons(const GthSA *sa, GtFile *outfp) { Exoninfo *exoninfo; unsigned long i; gt_assert(sa); for (i = 0; i < gt_array_size(sa->exons); i++) { exoninfo = (Exoninfo*) gt_array_get(sa->exons, i); gt_file_xprintf(outfp, "(%lu,%lu)", exoninfo->leftgenomicexonborder, exoninfo->rightgenomicexonborder); } gt_file_xfputc('\n', outfp); } void gth_sa_get_exons(const GthSA *sa, GtArray *ranges) { Exoninfo *exoninfo; unsigned long i; GtRange range; gt_assert(sa && ranges); for (i = 0; i < gt_array_size(sa->exons); i++) { exoninfo = gt_array_get(sa->exons, i); range.start = exoninfo->leftgenomicexonborder; range.end = exoninfo->rightgenomicexonborder; gt_array_add(ranges, range); } } #ifndef NDEBUG bool gth_sa_exons_are_forward_and_consecutive(const GthSA *sa) { GtArray *ranges; gt_assert(sa); ranges = gt_array_new(sizeof (GtRange)); gth_sa_get_exons(sa, ranges); if (!gt_ranges_are_consecutive(ranges)) { gt_array_delete(ranges); return false; } gt_array_delete(ranges); return true; } #endif GtRange gth_sa_range_forward(const GthSA *sa) { GtRange range; unsigned long leftgenomicborder, rightgenomicborder; gt_assert(sa); leftgenomicborder = ((Exoninfo*) gt_array_get_first(sa->exons)) ->leftgenomicexonborder; rightgenomicborder = ((Exoninfo*) gt_array_get_last(sa->exons)) ->rightgenomicexonborder; if (sa->gen_strand_forward) { range.start = leftgenomicborder; range.end = rightgenomicborder; } else { /* genomic offset is defined */ gt_assert(sa->gen_offset != GT_UNDEF_ULONG); range.start = sa->gen_total_length - 1 - (rightgenomicborder - sa->gen_offset) + sa->gen_offset; range.end = sa->gen_total_length - 1 - (leftgenomicborder - sa->gen_offset) + sa->gen_offset; } return range; } GtRange gth_sa_range_actual(const GthSA *sa) { GtRange range; gt_assert(sa); range.start = ((Exoninfo*) gt_array_get_first(sa->exons)) ->leftgenomicexonborder; range.end = ((Exoninfo*) gt_array_get_last(sa->exons)) ->rightgenomicexonborder; return range; } GthFlt gth_sa_average_splice_site_prob(const GthSA *sa) { unsigned long i, numofintrons; GthFlt averagepdpa = 0.0; Introninfo *introninfo; gt_assert(sa); numofintrons = gt_array_size(sa->introns); if (numofintrons > 0) { for (i = 0; i < numofintrons; i++) { introninfo = gt_array_get(sa->introns, i); averagepdpa += introninfo->donorsiteprobability; averagepdpa += introninfo->acceptorsiteprobability; } averagepdpa /= (2 * numofintrons); } return averagepdpa; } bool gth_sa_is_poor(const GthSA *sa, GthFlt minaveragessp) { unsigned long num_of_introns; GthFlt averagepdpa; gt_assert(sa); num_of_introns = gt_array_size(sa->introns); averagepdpa = gth_sa_average_splice_site_prob(sa); if (num_of_introns == 0 && sa->polyAtailpos.start > sa->polyAtailpos.end) return true; if (num_of_introns == 1 && averagepdpa < (GthFlt) (1.5 * minaveragessp)) { return true; } if (num_of_introns > 1 && averagepdpa < minaveragessp) return true; return false; } bool gth_sa_B_is_better_than_A(const GthSA *saA, const GthSA *saB) { GthFlt firstaveragepdpa, secondaveragepdpa; gt_assert(saA && saB); firstaveragepdpa = gth_sa_average_splice_site_prob(saA); secondaveragepdpa = gth_sa_average_splice_site_prob(saB); if (gt_array_size(saA->introns) == 0 || (gt_array_size(saB->introns) > 0 && secondaveragepdpa > firstaveragepdpa)) { return true; } else return false; } unsigned long gth_sa_left_genomic_exon_border(const GthSA *sa, unsigned long exon) { Exoninfo *exoninfo; gt_assert(sa); exoninfo = gth_sa_get_exon(sa, exon); return SHOWGENPOS(sa->gen_strand_forward, sa->gen_total_length, sa->gen_offset, exoninfo->leftgenomicexonborder); } unsigned long gth_sa_right_genomic_exon_border(const GthSA *sa, unsigned long exon) { Exoninfo *exoninfo; gt_assert(sa); exoninfo = gth_sa_get_exon(sa, exon); return SHOWGENPOS(sa->gen_strand_forward, sa->gen_total_length, sa->gen_offset, exoninfo->rightgenomicexonborder); } double gth_sa_exon_score(const GthSA *sa, unsigned long exon) { Exoninfo *exoninfo; gt_assert(sa); exoninfo = gth_sa_get_exon(sa, exon); return exoninfo->exonscore; } GtRange gth_sa_donor_site_range(const GthSA *sa, unsigned long intron) { GtRange range; gt_assert(sa); range.start = gth_sa_left_intron_border(sa, intron); range.end = range.start + 1; return range; } GtRange gth_sa_acceptor_site_range(const GthSA *sa, unsigned long intron) { GtRange range; gt_assert(sa); range.end = gth_sa_right_intron_border(sa, intron); range.start = range.end - 1; return range; } float gth_sa_donor_site_prob(const GthSA *sa, unsigned long intron) { float prob; gt_assert(sa); prob = ((Introninfo*) gt_array_get(sa->introns, intron)) ->donorsiteprobability; if (0.0005 > prob) /* return only three positions after decimal point */ return 0.0; return prob; } float gth_sa_acceptor_site_prob(const GthSA *sa, unsigned long intron) { float prob; gt_assert(sa); prob = ((Introninfo*) gt_array_get(sa->introns, intron)) ->acceptorsiteprobability; if (0.0005 > prob) /* return only three positions after decimal point */ return 0.0; return prob; } unsigned long gth_sa_genomic_exon_length(const GthSA *sa, unsigned long exon) { Exoninfo *exoninfo; gt_assert(sa); exoninfo = gth_sa_get_exon(sa, exon); return exoninfo->rightgenomicexonborder - exoninfo->leftgenomicexonborder + 1; } unsigned long gth_sa_left_intron_border(const GthSA *sa, unsigned long intron) { Exoninfo *exoninfo; gt_assert(sa); exoninfo = gth_sa_get_exon(sa, intron); return SHOWGENPOS(sa->gen_strand_forward, sa->gen_total_length, sa->gen_offset, exoninfo->rightgenomicexonborder + 1); } unsigned long gth_sa_right_intron_border(const GthSA *sa, unsigned long intron) { Exoninfo *exoninfo; gt_assert(sa); exoninfo = gth_sa_get_exon(sa, intron + 1); return SHOWGENPOS(sa->gen_strand_forward, sa->gen_total_length, sa->gen_offset, exoninfo->leftgenomicexonborder - 1); } unsigned long gth_sa_intron_length(const GthSA *sa, unsigned long intron) { Exoninfo *left_exon, *right_exon; gt_assert(sa); left_exon = gth_sa_get_exon(sa, intron); right_exon = gth_sa_get_exon(sa, intron + 1); return right_exon->leftgenomicexonborder - left_exon->rightgenomicexonborder - 1; } GthBacktracePath* gth_sa_backtrace_path(const GthSA *sa) { gt_assert(sa); return sa->backtrace_path; } Editoperation* gth_sa_get_editoperations(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_get(sa->backtrace_path); } unsigned long gth_sa_get_editoperations_length(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_length(sa->backtrace_path); } unsigned long gth_sa_indelcount(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_indelcount(sa->backtrace_path); } unsigned long gth_sa_gen_dp_length(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_gen_dp_length(sa->backtrace_path); } unsigned long gth_sa_gen_total_length(const GthSA *sa) { gt_assert(sa); return sa->gen_total_length; } void gth_sa_set_gen_total_length(GthSA *sa, unsigned long gen_total_length) { gt_assert(sa); sa->gen_total_length = gen_total_length; } unsigned long gth_sa_gen_offset(const GthSA *sa) { gt_assert(sa); return sa->gen_offset; } void gth_sa_set_gen_offset(GthSA *sa, unsigned long gen_offset) { gt_assert(sa); sa->gen_offset = gen_offset; } unsigned long gth_sa_ref_total_length(const GthSA *sa) { gt_assert(sa); return sa->ref_total_length; } void gth_sa_set_ref_total_length(GthSA *sa, unsigned long reflen) { gt_assert(sa); sa->ref_total_length = reflen; /* XXX: ??? */ gth_backtrace_path_set_ref_dp_length(sa->backtrace_path, reflen); } unsigned long gth_sa_gen_dp_start(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_gen_dp_start(sa->backtrace_path); } unsigned long gth_sa_gen_dp_start_show(const GthSA *sa) { gt_assert(sa); return SHOWGENPOS(sa->gen_strand_forward, sa->gen_total_length, sa->gen_offset, gth_backtrace_path_gen_dp_start(sa->backtrace_path)); } void gth_sa_set_gen_dp_start(GthSA *sa, unsigned long gen_dp_start) { gt_assert(sa); gth_backtrace_path_set_gen_dp_start(sa->backtrace_path, gen_dp_start); } unsigned long gth_sa_gen_dp_end(const GthSA *sa) { gt_assert(sa); return gth_sa_gen_dp_start(sa) + gth_sa_gen_dp_length(sa) - 1; } unsigned long gth_sa_gen_dp_end_show(const GthSA *sa) { gt_assert(sa); return SHOWGENPOS(sa->gen_strand_forward, sa->gen_total_length, sa->gen_offset, gth_sa_gen_dp_start(sa) + gth_sa_gen_dp_length(sa) - 1); } unsigned long gth_sa_gen_file_num(const GthSA *sa) { gt_assert(sa); return sa->gen_file_num; } void gth_sa_set_gen_file_num(GthSA *sa, unsigned long filenum) { gt_assert(sa); sa->gen_file_num = filenum; } unsigned long gth_sa_gen_seq_num(const GthSA *sa) { gt_assert(sa); return sa->gen_seq_num; } void gth_sa_set_gen_seq_num(GthSA *sa, unsigned long seqnum) { gt_assert(sa); sa->gen_seq_num = seqnum; } unsigned long gth_sa_ref_file_num(const GthSA *sa) { gt_assert(sa); return sa->ref_file_num; } void gth_sa_set_ref_file_num(GthSA *sa, unsigned long filenum) { gt_assert(sa); sa->ref_file_num = filenum; } unsigned long gth_sa_ref_seq_num(const GthSA *sa) { gt_assert(sa); return sa->ref_seq_num; } void gth_sa_set_ref_seq_num(GthSA *sa, unsigned long seqnum) { gt_assert(sa); sa->ref_seq_num = seqnum; } const char* gth_sa_gen_id(const GthSA *sa) { gt_assert(sa); return gt_str_get(sa->gen_id); } GtStr* gth_sa_gen_id_str(const GthSA *sa) { gt_assert(sa); return sa->gen_id; } void gth_sa_set_gen_id(GthSA *sa, const char *id) { gt_assert(sa); gt_str_set(sa->gen_id, id); } const char* gth_sa_ref_id(const GthSA *sa) { gt_assert(sa); return gt_str_get(sa->ref_id); } GtStr* gth_sa_ref_id_str(const GthSA *sa) { gt_assert(sa); return sa->ref_id; } void gth_sa_set_ref_id(GthSA *sa, const char *id) { gt_assert(sa); gt_str_set(sa->ref_id, id); } GtStr* gth_sa_gen_md5(const GthSA *sa) { gt_assert(sa && sa->gen_md5); return sa->gen_md5; } GtStr* gth_sa_ref_md5(const GthSA *sa) { gt_assert(sa && sa->ref_md5); return sa->ref_md5; } GtStr* gth_sa_gen_desc(const GthSA *sa) { gt_assert(sa && sa->gen_desc); return sa->gen_desc; } GtStr* gth_sa_ref_desc(const GthSA *sa) { gt_assert(sa && sa->ref_desc); return sa->ref_desc; } GtStrand gth_sa_gen_strand(const GthSA *sa) { gt_assert(sa); return sa->gen_strand_forward ? GT_STRAND_FORWARD : GT_STRAND_REVERSE; } bool gth_sa_gen_strand_forward(const GthSA *sa) { gt_assert(sa); return sa->gen_strand_forward; } char gth_sa_gen_strand_char(const GthSA *sa) { gt_assert(sa); return SHOWSTRAND(sa->gen_strand_forward); } void gth_sa_set_gen_strand(GthSA *sa, bool forward) { gt_assert(sa); sa->gen_strand_forward = forward; } bool gth_sa_ref_strand_forward(const GthSA *sa) { gt_assert(sa); return sa->ref_strand_forward; } char gth_sa_ref_strand_char(const GthSA *sa) { gt_assert(sa); return SHOWSTRAND(sa->ref_strand_forward); } void gth_sa_set_ref_strand(GthSA *sa, bool forward) { gt_assert(sa); sa->ref_strand_forward = forward; } unsigned long gth_sa_genomiccutoff_start(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_genomiccutoff_start(sa->backtrace_path); } unsigned long gth_sa_referencecutoff_start(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_referencecutoff_start(sa->backtrace_path); } unsigned long gth_sa_eopcutoff_start(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_eopcutoff_start(sa->backtrace_path); } unsigned long gth_sa_genomiccutoff_end(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_genomiccutoff_end(sa->backtrace_path); } unsigned long gth_sa_referencecutoff_end(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_referencecutoff_end(sa->backtrace_path); } unsigned long gth_sa_eopcutoff_end(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_eopcutoff_end(sa->backtrace_path); } void gth_sa_set_cutoffs_start(GthSA *sa, Cutoffs *cutoffs) { gt_assert(sa && cutoffs); gth_backtrace_path_set_cutoffs_start(sa->backtrace_path, cutoffs); } void gth_sa_set_cutoffs_end(GthSA *sa, Cutoffs *cutoffs) { gt_assert(sa && cutoffs); gth_backtrace_path_set_cutoffs_end(sa->backtrace_path, cutoffs); } GthAlphatype gth_sa_alphatype(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_alphatype(sa->backtrace_path); } const char* gth_sa_alphastring(const GthSA *sa) { gt_assert(sa); return gth_sa_alphatype(sa) == DNA_ALPHA ? "cDNA" : "Protein"; } void gth_sa_set_alphatype(GthSA *sa, GthAlphatype alphatype) { gt_assert(sa); gth_backtrace_path_set_alphatype(sa->backtrace_path, alphatype); } Exoninfo* gth_sa_get_exon(const GthSA *sa, unsigned long exon) { gt_assert(sa && sa->exons); gt_assert(exon < gt_array_size(sa->exons)); return gt_array_get(sa->exons, exon); } void gth_sa_add_exon(GthSA *sa, Exoninfo *exoninfo) { gt_assert(sa && exoninfo); gt_array_add(sa->exons, *exoninfo); } unsigned long gth_sa_num_of_exons(const GthSA *sa) { gt_assert(sa && sa->exons); return gt_array_size(sa->exons); } Introninfo* gth_sa_get_intron(const GthSA *sa, unsigned long intron) { gt_assert(sa && sa->introns); gt_assert(intron < gt_array_size(sa->exons)); return gt_array_get(sa->introns, intron); } void gth_sa_add_intron(GthSA *sa, Introninfo *introninfo) { gt_assert(sa && introninfo); gt_array_add(sa->introns, *introninfo); } unsigned long gth_sa_num_of_introns(const GthSA *sa) { gt_assert(sa && sa->introns); return gt_array_size(sa->introns); } void gth_sa_calc_polyAtailpos(GthSA *sa, const unsigned char *ref_seq_tran, GtAlphabet *ref_alphabet) { unsigned long ppa, mma, rightreferenceborder, referencelength; long i, leftreferenceborder; sa->polyAtailpos.start = 0; sa->polyAtailpos.end = 0; ppa = mma = 0; rightreferenceborder = ((Exoninfo*) gt_array_get_last(sa->exons)) ->rightreferenceexonborder; leftreferenceborder = ((Exoninfo*) gt_array_get_first(sa->exons)) ->leftreferenceexonborder; /* setting i */ referencelength = gth_sa_ref_total_length(sa); if ((rightreferenceborder + 1) >= (referencelength - 1 - CALCPOLYATAILWINDOW)) { i = gt_safe_cast2long(rightreferenceborder + 1); } else { if (referencelength < 1 + CALCPOLYATAILWINDOW) i = 0; else i = referencelength - 1 - CALCPOLYATAILWINDOW; } for (/* i already set */; i < gt_safe_cast2long(referencelength); i++) { if (ref_seq_tran[i] == gt_alphabet_encode(ref_alphabet, 'A')) ppa++; else { if (ppa > 0 && mma < 1) { mma++; continue; } else { if (ppa >= MINIMUMPOLYATAILLENGTH) break; else { ppa = mma = 0; continue; } } } } if (ppa >= MINIMUMPOLYATAILLENGTH) { sa->polyAtailpos.start = gt_safe_cast2ulong(i - ppa - mma); sa->polyAtailpos.end = i - 1; } else { ppa = mma = 0; /* setting i */ if ((leftreferenceborder - 1) <= CALCPOLYATAILWINDOW) i = leftreferenceborder - 1; else i = CALCPOLYATAILWINDOW - 1; for (/* i already set */; i >= 0; i--) { if (ref_seq_tran[i] == gt_alphabet_encode(ref_alphabet, 'T')) ppa++; else { if (ppa > 0 && mma < 1) { mma++; continue; } else { if (ppa >= MINIMUMPOLYATAILLENGTH) break; else { ppa = mma = 0; continue; } } } } if (ppa >= MINIMUMPOLYATAILLENGTH) { sa->polyAtailpos.start = gt_safe_cast2ulong(i + ppa + mma); sa->polyAtailpos.end = i + 1; } } } unsigned long gth_sa_polyAtail_start(const GthSA *sa) { gt_assert(sa); return sa->polyAtailpos.start; } unsigned long gth_sa_polyAtail_stop(const GthSA *sa) { gt_assert(sa); return sa->polyAtailpos.end; } void gth_sa_set_polyAtail_start(GthSA *sa, unsigned long start) { gt_assert(sa); sa->polyAtailpos.start = start; } void gth_sa_set_polyAtail_stop(GthSA *sa, unsigned long stop) { gt_assert(sa); sa->polyAtailpos.end = stop; } GthFlt gth_sa_score(const GthSA *sa) { gt_assert(sa); return sa->alignmentscore; } void gth_sa_set_score(GthSA *sa, GthFlt score) { gt_assert(sa); sa->alignmentscore = score; } GthFlt gth_sa_coverage(const GthSA *sa) { gt_assert(sa); return sa->coverage; } void gth_sa_set_coverage(GthSA *sa, GthFlt coverage) { gt_assert(sa); sa->coverage = coverage; } bool gth_sa_genomic_cov_is_highest(const GthSA *sa) { gt_assert(sa); return sa->genomic_cov_is_highest; } char gth_sa_coverage_char(const GthSA *sa) { gt_assert(sa); if (gth_sa_genomic_cov_is_highest(sa)) return 'G'; else { if (gth_sa_alphatype(sa) == DNA_ALPHA) return 'C'; else return 'P'; } } void gth_sa_set_highest_cov(GthSA *sa, bool genomic) { gt_assert(sa); sa->genomic_cov_is_highest = genomic; } unsigned long gth_sa_cumlen_scored_exons(const GthSA *sa) { gt_assert(sa); return sa->cumlen_scored_exons; } void gth_sa_set_cumlen_scored_exons(GthSA *sa, unsigned long cumlen) { gt_assert(sa); sa->cumlen_scored_exons = cumlen; } unsigned long gth_sa_call_number(const GthSA *sa) { gt_assert(sa); return sa->call_number; } static void set_gff3_target_attribute(GthSA *sa, bool md5ids) { gt_assert(sa && !sa->gff3_target_attribute); sa->gff3_target_attribute = gt_str_new(); if (md5ids) { gt_assert(sa->ref_md5); gt_str_append_cstr(sa->gff3_target_attribute, GT_MD5_SEQID_PREFIX); gt_str_append_str(sa->gff3_target_attribute, sa->ref_md5); gt_str_append_char(sa->gff3_target_attribute, ':'); } gt_gff3_escape(sa->gff3_target_attribute, gt_str_get(sa->ref_id), gt_str_length(sa->ref_id)); gt_str_append_char(sa->gff3_target_attribute, ' '); gt_str_append_ulong(sa->gff3_target_attribute, gth_sa_referencecutoff_start(sa) + 1); /* XXX: use reference dpstartpos */ gt_str_append_char(sa->gff3_target_attribute, ' '); gt_str_append_ulong(sa->gff3_target_attribute, gth_sa_ref_total_length(sa) - /* XXX */ gth_sa_referencecutoff_end(sa)); gt_str_append_char(sa->gff3_target_attribute, ' '); if (sa->ref_strand_forward) { gt_str_append_char(sa->gff3_target_attribute, GT_STRAND_CHARS[GT_STRAND_FORWARD]); } else { gt_str_append_char(sa->gff3_target_attribute, GT_STRAND_CHARS[GT_STRAND_REVERSE]); } } const char* gth_sa_gff3_target_attribute(GthSA *sa, bool md5ids) { gt_assert(sa); if (!sa->gff3_target_attribute && (md5ids || gt_str_length(sa->ref_id))) set_gff3_target_attribute(sa, md5ids); return gt_str_get(sa->gff3_target_attribute); } void gth_sa_determine_cutoffs(GthSA *sa, GthCutoffmode leadcutoffsmode, GthCutoffmode termcutoffsmode, unsigned long cutoffsminexonlen) { gt_assert(sa); gth_backtrace_path_determine_cutoffs(sa->backtrace_path, leadcutoffsmode, termcutoffsmode, cutoffsminexonlen); } void gth_sa_cutoff_start(GthSA *sa) { gt_assert(sa); gth_backtrace_path_cutoff_start(sa->backtrace_path); } void gth_sa_cutoff_end(GthSA *sa) { gt_assert(sa); gth_backtrace_path_cutoff_end(sa->backtrace_path); } void gth_sa_cutoff_walked_path(GthSA *sa, const GthPathWalker *pw, bool showeops, GtFile *outfp) { gt_assert(sa && pw); gth_backtrace_path_cutoff_walked_path(sa->backtrace_path, pw, showeops, outfp); } void gth_sa_prepend(GthSA *sa, const GthBacktracePath *eops) { gt_assert(sa && eops); gth_backtrace_path_prepend(sa->backtrace_path, eops); } void gth_sa_append(GthSA *sa, const GthBacktracePath *eops) { gt_assert(sa && eops); gth_backtrace_path_append(sa->backtrace_path, eops); } void gth_sa_remove_zero_base_exons(GthSA *sa, GthStat *stat) { gt_assert(sa); gth_backtrace_path_remove_zero_base_exons(sa->backtrace_path, stat); } bool gth_sa_contains_no_zero_base_exons(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_contains_no_zero_base_exons(sa->backtrace_path); } void gth_sa_echo_genomic_description(const GthSA *sa, GthInput *input, GtFile *outfp) { gt_assert(sa && input); gth_input_echo_genomic_description(input, sa->gen_file_num, sa->gen_seq_num, outfp); } void gth_sa_echo_reference_description(const GthSA *sa, GthInput *input, GtFile *outfp) { gt_assert(sa && input); gth_input_echo_reference_description(input, sa->ref_file_num, sa->ref_seq_num, outfp); } void gth_sa_echo_reference_sequence(const GthSA *sa, GthInput *input, bool format, GtFile *outfp) { gt_assert(sa && input); gth_input_echo_reference_sequence(input, format, sa->ref_file_num, sa->ref_seq_num, sa->ref_strand_forward, outfp); } void gth_sa_echo_alignment(const GthSA *sa, unsigned long showintronmaxlen, unsigned long translationtable, bool wildcardimplosion, GthInput *input, GtFile *outfp) { unsigned long genomicstartcutoff, genomicendcutoff, genomictotalcutoff, referencestartcutoff, referenceendcutoff, referencetotalcutoff; bool reverse_subject_pos = false; const unsigned char *gen_seq_orig, *ref_seq_orig; GthSeqCon *ref_seq_con; GtAlphabet *ref_alphabet; gt_assert(sa && input); /* only for cosmetic reasons */ genomicstartcutoff = gth_sa_genomiccutoff_start(sa); genomicendcutoff = gth_sa_genomiccutoff_end(sa); genomictotalcutoff = genomicstartcutoff + genomicendcutoff; referencestartcutoff = gth_sa_referencecutoff_start(sa); referenceendcutoff = gth_sa_referencecutoff_end(sa); referencetotalcutoff = referencestartcutoff + referenceendcutoff; /* make sure that the correct files are loaded */ gth_input_load_reference_file(input, gth_sa_ref_file_num(sa), false); ref_seq_con = gth_input_current_ref_seq_con(input); ref_alphabet = gth_input_current_ref_alphabet(input); /* If the reverse complement of the genomic DNA is considered, this opition is needed for correct output of the genomic sequence positions by the function showalignmentgeneric() */ if (!gth_sa_gen_strand_forward(sa)) reverse_subject_pos = true; /* get genomic sequence */ gen_seq_orig = gth_input_original_genomic_sequence(input, sa->gen_file_num, sa->gen_strand_forward) + gth_sa_gen_dp_start(sa); /* get reference sequence */ if (gth_sa_ref_strand_forward(sa)) { ref_seq_orig = gth_seq_con_get_orig_seq(ref_seq_con, gth_sa_ref_seq_num(sa)); } else { ref_seq_orig = gth_seq_con_get_orig_seq_rc(ref_seq_con, gth_sa_ref_seq_num(sa)); } switch (gth_sa_alphatype(sa)) { case DNA_ALPHA: gthshowalignmentdna(outfp,ALIGNMENTLINEWIDTH, gth_sa_get_editoperations(sa), gth_sa_get_editoperations_length(sa), gth_sa_indelcount(sa), gen_seq_orig + genomicstartcutoff, gth_sa_gen_dp_length(sa) - genomictotalcutoff, ref_seq_orig + referencestartcutoff, gth_sa_ref_total_length(sa) - referencetotalcutoff, gth_sa_gen_dp_start(sa) + genomicstartcutoff - gth_sa_gen_offset(sa), referencestartcutoff, gth_sa_gen_total_length(sa), showintronmaxlen, ref_alphabet, reverse_subject_pos, wildcardimplosion); break; case PROTEIN_ALPHA: gthshowalignmentprotein(outfp, ALIGNMENTLINEWIDTH, gth_sa_get_editoperations(sa), gth_sa_get_editoperations_length(sa), gth_sa_indelcount(sa), gen_seq_orig + genomicstartcutoff, gth_sa_gen_dp_length(sa) - genomictotalcutoff, ref_seq_orig + referencestartcutoff, gth_sa_ref_total_length(sa) - referencetotalcutoff, gth_sa_gen_dp_start(sa) + genomicstartcutoff - gth_sa_gen_offset(sa), referencestartcutoff, gth_sa_gen_total_length(sa), showintronmaxlen, ref_alphabet, translationtable, gth_input_score_matrix(input), gth_input_score_matrix_alpha(input), reverse_subject_pos, wildcardimplosion); break; default: gt_assert(0); } } unsigned long gth_sa_get_alignment_lines(const GthSA *sa, unsigned char **first_line, unsigned char **second_line, unsigned char **third_line, unsigned long translationtable, GthInput *input) { unsigned long genomicstartcutoff, genomicendcutoff, genomictotalcutoff, referencestartcutoff, referenceendcutoff, referencetotalcutoff; GT_UNUSED bool reverse_subject_pos = false; gt_assert(sa && first_line && second_line && third_line && input); /* only for cosmetic reasons */ genomicstartcutoff = gth_sa_genomiccutoff_start(sa); genomicendcutoff = gth_sa_genomiccutoff_end(sa); genomictotalcutoff = genomicstartcutoff + genomicendcutoff; referencestartcutoff = gth_sa_referencecutoff_start(sa); referenceendcutoff = gth_sa_referencecutoff_end(sa); referencetotalcutoff = referencestartcutoff + referenceendcutoff; /* sequences */ unsigned char *gen_seq_orig, *ref_seq_orig; unsigned long cols = 0; GthSeqCon *ref_seq_con; /* make sure that the correct files are loaded */ gth_input_load_reference_file(input, gth_sa_ref_file_num(sa), false); ref_seq_con = gth_input_current_ref_seq_con(input); /* If the reverse complement of the genomic DNA is considered, this opition is needed for correct output of the genomic sequence positions by the function showalignmentgeneric() */ if (!gth_sa_gen_strand_forward(sa)) reverse_subject_pos = true; /* get genomic sequence */ gen_seq_orig = (unsigned char*) gth_input_original_genomic_sequence(input, gth_sa_gen_file_num(sa), gth_sa_gen_strand_forward(sa)) + gth_sa_gen_dp_start(sa); /* get reference sequence */ if (gth_sa_ref_strand_forward(sa)) { ref_seq_orig = gth_seq_con_get_orig_seq(ref_seq_con, gth_sa_ref_seq_num(sa)); } else { ref_seq_orig = gth_seq_con_get_orig_seq_rc(ref_seq_con, gth_sa_ref_seq_num(sa)); } switch (gth_sa_alphatype(sa)) { case DNA_ALPHA: /* compute the two alignment lines */ cols = gthfillthetwoalignmentlines(first_line, second_line, gen_seq_orig + genomicstartcutoff, gth_sa_gen_dp_length(sa) - genomictotalcutoff, ref_seq_orig + referencestartcutoff, gth_sa_ref_total_length(sa) - referencetotalcutoff, gth_sa_get_editoperations(sa), gth_sa_get_editoperations_length(sa), 0, /* linewidth not important here */ 0, /* no short introns here */ NULL,/* therefore no shortintroninfo */ gth_sa_indelcount(sa)); *third_line = NULL; break; case PROTEIN_ALPHA: /* compute the three alignment lines */ cols = gthfillthethreealignmentlines(first_line, second_line, third_line, gth_sa_get_editoperations(sa), gth_sa_get_editoperations_length(sa), gth_sa_indelcount(sa), gen_seq_orig + genomicstartcutoff, gth_sa_gen_dp_length(sa) - genomictotalcutoff, ref_seq_orig + referencestartcutoff, gth_sa_ref_total_length(sa) - referencetotalcutoff, translationtable); break; default: gt_assert(0); } return cols; } bool gth_sa_is_valid(const GthSA *sa) { gt_assert(sa); return gth_backtrace_path_is_valid(sa->backtrace_path); } void gth_sa_show(GthSA *sa, GthInput *input, GtFile *outfp) { GthSAVisitor *sa_visitor; gt_assert(sa && input); gth_input_load_genomic_file(input, sa->gen_file_num, false); gth_input_load_reference_file(input, sa->ref_file_num, false); sa_visitor = gth_txt_sa_visitor_new(input, GTH_DEFAULT_GS2OUT, GTH_DEFAULT_DPMININTRONLENGTH, 6, /* XXX */ GTH_DEFAULT_SHOWINTRONMAXLEN, GTH_DEFAULT_TRANSLATIONTABLE, GTH_DEFAULT_SHOWSEQNUMS, outfp); gth_sa_visitor_visit_sa(sa_visitor, sa); gth_sa_visitor_delete(sa_visitor); } void gth_sa_save_ref_md5(GthSA *sa, GthInput *input) { gt_assert(sa && input); gth_input_save_ref_md5(input, &sa->ref_md5, sa->ref_file_num, sa->ref_seq_num); } bool gth_sas_are_equal(const GthSA *saA, const GthSA *saB) { Exoninfo *exoninfoA, *exoninfoB; Introninfo *introninfoA, *introninfoB; unsigned long i; /* compare element 0 */ if (gth_sa_alphatype(saA) != gth_sa_alphatype(saB)) return false; /* compare element 1 */ if (gth_backtrace_path_length(saA->backtrace_path) != gth_backtrace_path_length(saB->backtrace_path)) { return false; } for (i = 0; i < gth_backtrace_path_length(saA->backtrace_path); i++) { if (((Editoperation*) gth_backtrace_path_get(saA->backtrace_path))[i] != ((Editoperation*) gth_backtrace_path_get(saB->backtrace_path))[i]) { return false; } } /* element 2 has been removed (indelcount) */ /* compare element 3 */ if (gth_sa_gen_dp_length(saA) != gth_sa_gen_dp_length(saB)) return false; /* compare element 4 */ if (saA->gen_total_length != saB->gen_total_length) return false; /* compare element 5 */ if (saA->gen_offset != saB->gen_offset) return false; /* compare element 6 */ if (gth_sa_ref_total_length(saA) != gth_sa_ref_total_length(saB)) return false; /* compare element 7 */ if (gth_sa_gen_dp_start(saA) != gth_sa_gen_dp_start(saB)) return false; /* element 8 has been removed (gen_dp_end) */ /* compare element 9 */ if (saA->gen_file_num != saB->gen_file_num) return false; /* compare element 10 */ if (saA->gen_seq_num != saB->gen_seq_num) return false; /* compare element 11 */ if (saA->ref_file_num != saB->ref_file_num) return false; /* compare element 12 */ if (saA->ref_seq_num != saB->ref_seq_num) return false; /* compare element 13 */ if (gt_str_cmp(saA->gen_id, saB->gen_id)) return false; /* compare element 14 */ if (gt_str_cmp(saA->ref_id, saB->ref_id)) return false; /* compare element 15 */ if (saA->gen_strand_forward != saB->gen_strand_forward) return false; /* compare element 16 */ if (saA->ref_strand_forward != saB->ref_strand_forward) return false; /* compare element 17 */ if (gth_sa_genomiccutoff_start(saA) != gth_sa_genomiccutoff_start(saB)) return false; if (gth_sa_referencecutoff_start(saA) != gth_sa_referencecutoff_start(saB)) return false; if (gth_sa_eopcutoff_start(saA) != gth_sa_eopcutoff_start(saB)) return false; if (gth_sa_genomiccutoff_end(saA) != gth_sa_genomiccutoff_end(saB)) return false; if (gth_sa_referencecutoff_end(saA) != gth_sa_referencecutoff_end(saB)) return false; if (gth_sa_eopcutoff_end(saA) != gth_sa_eopcutoff_end(saB)) return false; /* compare element 18 */ if (gt_array_size(saA->exons) != gt_array_size(saB->exons)) return false; for (i = 0; i < gt_array_size(saA->exons); i++) { exoninfoA = (Exoninfo*) gt_array_get(saA->exons, i); exoninfoB = (Exoninfo*) gt_array_get(saB->exons, i); if (exoninfoA->leftgenomicexonborder != exoninfoB->leftgenomicexonborder) return false; if (exoninfoA->rightgenomicexonborder != exoninfoB->rightgenomicexonborder) return false; if (exoninfoA->leftreferenceexonborder != exoninfoB->leftreferenceexonborder) { return false; } if (exoninfoA->rightreferenceexonborder != exoninfoB->rightreferenceexonborder) { return false; } if (!gt_double_equals_double(exoninfoA->exonscore, exoninfoB->exonscore)) { return false; } } /* compare element 19 */ if (gt_array_size(saA->introns) != gt_array_size(saB->introns)) return false; for (i = 0; i < gt_array_size(saA->introns); i++) { introninfoA = (Introninfo*) gt_array_get(saA->introns, i); introninfoB = (Introninfo*) gt_array_get(saB->introns, i); if (!gt_double_equals_double(introninfoA->donorsiteprobability, introninfoB->donorsiteprobability)) { return false; } if (!gt_double_equals_double(introninfoA->acceptorsiteprobability, introninfoB->acceptorsiteprobability)) { return false; } if (!gt_double_equals_double(introninfoA->donorsitescore, introninfoB->donorsitescore)) { return false; } if (!gt_double_equals_double(introninfoA->acceptorsitescore, introninfoB->acceptorsitescore)) { return false; } } /* compare element 20 */ if (saA->polyAtailpos.start != saB->polyAtailpos.start) return false; if (saA->polyAtailpos.end != saB->polyAtailpos.end) return false; /* compare element 21 */ if (saA->alignmentscore != saB->alignmentscore) return false; /* compare element 22 */ if (saA->coverage != saB->coverage) return false; /* compare element 23 */ if (saA->genomic_cov_is_highest != saB->genomic_cov_is_highest) return false; /* compare element 24 */ if (saA->cumlen_scored_exons != saB->cumlen_scored_exons) return false; return true; } genometools-1.5.1/src/gth/sa.h000066400000000000000000000324421211610345200161760ustar00rootroot00000000000000/* Copyright (c) 2003-2009 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SA_H #define SA_H #include "core/array.h" #include "core/error.h" #include "core/file.h" #include "core/str.h" #include "core/strand.h" #include "gth/backtrace_path.h" #include "gth/bssm_param.h" #include "gth/gthalphatype.h" #include "gth/input.h" #include "gth/stat.h" /* This splice site score is used for protein spliced alignments, because for them no splice site scores are computed. */ #define UNDEFINED_SPLICE_SITE_SCORE -1.0 /* This struct represents an exon. Thereby, the DNA positions always refer to the actual strand. Terminology: A DNA position can refer to the forward strand and to the actual strand. In the case that the considered position lies on the forward strand these are the same. In the case that the considered position lies on the reverse complement strand the following relation holds: pos_referring_to_actual_strand == total_genomic_length - 1 - pos_referring_to_forward_strand */ typedef struct { unsigned long leftgenomicexonborder, /* the borders of the exons in the */ rightgenomicexonborder, /* genomic sequence */ leftreferenceexonborder, /* the borders of the exons in the */ rightreferenceexonborder; /* reference sequence */ GthDbl exonscore; /* = exnscr */ } Exoninfo; typedef struct { GthFlt donorsiteprobability, /* (GS = itrscr) */ acceptorsiteprobability; /* (GS = itrscr) */ GthDbl donorsitescore, /* (GS = no equivalent) */ acceptorsitescore; /* (GS = no equivalent) */ } Introninfo; /* The following structure bundles all information necessary to represent a spliced alignment. Keep in sync with gth_sas_are_equal()! */ typedef struct GthSA GthSA; /* create a new spliced alignment (sa) */ GthSA* gth_sa_new(void); /* create a new sa and set the sequence ids and strand directions */ GthSA* gth_sa_new_and_set(bool gen_strand_forward, bool ref_strand_forward, GthInput *input, unsigned long gen_file_num, unsigned long gen_seq_num, unsigned long ref_file_num, unsigned long ref_seq_num, unsigned long call_number, unsigned long gen_total_length, unsigned long gen_offset, unsigned long ref_total_length); void gth_sa_set(GthSA*, GthAlphatype ref_alphatype, unsigned long gen_dp_start, unsigned long gen_dp_length); void gth_sa_set_gen_dp_length(GthSA*, unsigned long gen_dp_length); void gth_sa_delete(GthSA*); void gth_sa_show_exons(const GthSA*, GtFile*); void gth_sa_get_exons(const GthSA*, GtArray *ranges); bool gth_sa_exons_are_forward_and_consecutive(const GthSA*); /* returns the genomic range of referring to the forward strand. */ GtRange gth_sa_range_forward(const GthSA *sa); /* returns the genomic range of referring to the actual strand */ GtRange gth_sa_range_actual(const GthSA *sa); /* Returns the average splice site probability of spliced alignment . That is, the average probability of all donor and acceptor sites. If the spliced alignment contains no introns the average splice site probability is zero. */ GthFlt gth_sa_average_splice_site_prob(const GthSA *sa); /* A spliced alignment is ``poor'' if one of the following statements holds: - The number of introns equals zero and the polyA tail of the cDNA/EST is at the start of the spliced alignment - The number of introns equals one and the average splice site probability is less than 1.5 times the minimum average splice site probability . - The number of introns is greater than one and the average splice site probability is less than the minimum average splice site probability , which can be changed by a command line option (see manual). */ bool gth_sa_is_poor(const GthSA *sa, GthFlt minaveragessp); /* Consider two spliced alignments and . Spliced alignment is ``better'' than spliced alignment if at least one of the following statements holds: - has no introns. - has at least one intron and the average splice site probability of is greater than the average splice site probability of . */ bool gth_sa_B_is_better_than_A(const GthSA *saA, const GthSA *saB); /* Returns the left genomic exon border for of (referring to the foward strand). */ unsigned long gth_sa_left_genomic_exon_border(const GthSA*, unsigned long exon); /* Returns the right genomic exon border for of (referring to the foward strand). */ unsigned long gth_sa_right_genomic_exon_border(const GthSA*, unsigned long exon); double gth_sa_exon_score(const GthSA*, unsigned long exon); GtRange gth_sa_donor_site_range(const GthSA*, unsigned long intron); GtRange gth_sa_acceptor_site_range(const GthSA*, unsigned long intron); /* Return donor site probablity with three positions after decimal point. */ float gth_sa_donor_site_prob(const GthSA*, unsigned long intron); /* Return acceptor site probablity with three positions after decimal point. */ float gth_sa_acceptor_site_prob(const GthSA*, unsigned long intron); unsigned long gth_sa_genomic_exon_length(const GthSA*, unsigned long exon); unsigned long gth_sa_left_intron_border(const GthSA*, unsigned long intron); unsigned long gth_sa_right_intron_border(const GthSA*, unsigned long intron); unsigned long gth_sa_intron_length(const GthSA *, unsigned long intron); /* XXX */ GthBacktracePath* gth_sa_backtrace_path(const GthSA*); Editoperation* gth_sa_get_editoperations(const GthSA*); unsigned long gth_sa_get_editoperations_length(const GthSA*); unsigned long gth_sa_indelcount(const GthSA*); unsigned long gth_sa_gen_dp_length(const GthSA*); unsigned long gth_sa_gen_total_length(const GthSA*); void gth_sa_set_gen_total_length(GthSA*, unsigned long); unsigned long gth_sa_gen_offset(const GthSA*); void gth_sa_set_gen_offset(GthSA*, unsigned long); unsigned long gth_sa_ref_total_length(const GthSA*); void gth_sa_set_ref_total_length(GthSA*, unsigned long); unsigned long gth_sa_gen_dp_start(const GthSA*); unsigned long gth_sa_gen_dp_start_show(const GthSA*); void gth_sa_set_gen_dp_start(GthSA*, unsigned long); unsigned long gth_sa_gen_dp_end(const GthSA*); unsigned long gth_sa_gen_dp_end_show(const GthSA*); unsigned long gth_sa_gen_file_num(const GthSA*); void gth_sa_set_gen_file_num(GthSA*, unsigned long); unsigned long gth_sa_gen_seq_num(const GthSA*); void gth_sa_set_gen_seq_num(GthSA*, unsigned long); unsigned long gth_sa_ref_file_num(const GthSA*); void gth_sa_set_ref_file_num(GthSA*, unsigned long); unsigned long gth_sa_ref_seq_num(const GthSA*); void gth_sa_set_ref_seq_num(GthSA*, unsigned long); const char* gth_sa_gen_id(const GthSA*); GtStr* gth_sa_gen_id_str(const GthSA*); void gth_sa_set_gen_id(GthSA*, const char*); const char* gth_sa_ref_id(const GthSA*); GtStr* gth_sa_ref_id_str(const GthSA*); void gth_sa_set_ref_id(GthSA*, const char*); GtStr* gth_sa_gen_md5(const GthSA*); GtStr* gth_sa_ref_md5(const GthSA*); GtStr* gth_sa_gen_desc(const GthSA*); GtStr* gth_sa_ref_desc(const GthSA*); GtStrand gth_sa_gen_strand(const GthSA*); bool gth_sa_gen_strand_forward(const GthSA*); char gth_sa_gen_strand_char(const GthSA*); void gth_sa_set_gen_strand(GthSA*, bool forward); bool gth_sa_ref_strand_forward(const GthSA*); char gth_sa_ref_strand_char(const GthSA*); void gth_sa_set_ref_strand(GthSA*, bool forward); unsigned long gth_sa_genomiccutoff_start(const GthSA*); unsigned long gth_sa_referencecutoff_start(const GthSA*); unsigned long gth_sa_eopcutoff_start(const GthSA*); unsigned long gth_sa_genomiccutoff_end(const GthSA*); unsigned long gth_sa_referencecutoff_end(const GthSA*); unsigned long gth_sa_eopcutoff_end(const GthSA*); void gth_sa_set_cutoffs_start(GthSA*, Cutoffs*); void gth_sa_set_cutoffs_end(GthSA*, Cutoffs*); GthAlphatype gth_sa_alphatype(const GthSA*); const char* gth_sa_alphastring(const GthSA*); void gth_sa_set_alphatype(GthSA*, GthAlphatype); Exoninfo* gth_sa_get_exon(const GthSA*, unsigned long); void gth_sa_add_exon(GthSA*, Exoninfo*); unsigned long gth_sa_num_of_exons(const GthSA*); Introninfo* gth_sa_get_intron(const GthSA*, unsigned long); void gth_sa_add_intron(GthSA*, Introninfo*); unsigned long gth_sa_num_of_introns(const GthSA*); void gth_sa_calc_polyAtailpos(GthSA*, const unsigned char *ref_seq_tran, GtAlphabet *ref_alpha); unsigned long gth_sa_polyAtail_start(const GthSA*); unsigned long gth_sa_polyAtail_stop(const GthSA*); void gth_sa_set_polyAtail_start(GthSA*, unsigned long); void gth_sa_set_polyAtail_stop(GthSA*, unsigned long); GthFlt gth_sa_score(const GthSA*); void gth_sa_set_score(GthSA*, GthFlt); GthFlt gth_sa_coverage(const GthSA*); void gth_sa_set_coverage(GthSA*, GthFlt); bool gth_sa_genomic_cov_is_highest(const GthSA*); char gth_sa_coverage_char(const GthSA*); void gth_sa_set_highest_cov(GthSA*, bool genomic); unsigned long gth_sa_cumlen_scored_exons(const GthSA*); void gth_sa_set_cumlen_scored_exons(GthSA*, unsigned long); unsigned long gth_sa_call_number(const GthSA*); const char* gth_sa_gff3_target_attribute(GthSA*, bool md5ids); void gth_sa_determine_cutoffs(GthSA*, GthCutoffmode leadcutoffsmode, GthCutoffmode termcutoffsmode, unsigned long cutoffsminexonlen); void gth_sa_cutoff_start(GthSA*); void gth_sa_cutoff_end(GthSA*); void gth_sa_cutoff_walked_path(GthSA*, const GthPathWalker*, bool showeops, GtFile*); void gth_sa_prepend(GthSA*, const GthBacktracePath*); void gth_sa_append(GthSA*, const GthBacktracePath*); void gth_sa_remove_zero_base_exons(GthSA*, GthStat *stat); bool gth_sa_contains_no_zero_base_exons(const GthSA*); void gth_sa_echo_genomic_description(const GthSA*, GthInput*, GtFile*); void gth_sa_echo_reference_description(const GthSA*, GthInput*, GtFile*); void gth_sa_echo_reference_sequence(const GthSA*, GthInput*, bool format, GtFile*); void gth_sa_echo_alignment(const GthSA *sa, unsigned long showintronmaxlen, unsigned long translationtable, bool wildcardimplosion, GthInput *input, GtFile *outfp); /* Fills the alignment lines ( and for DNA alignments and , , and for protein alignments). */ unsigned long gth_sa_get_alignment_lines(const GthSA *sa, unsigned char **first_line, unsigned char **second_line, unsigned char **third_line, unsigned long translationtable, GthInput *input); bool gth_sa_is_valid(const GthSA*); void gth_sa_show(GthSA*, GthInput*, GtFile*); void gth_sa_save_ref_md5(GthSA*, GthInput*); bool gth_sas_are_equal(const GthSA*, const GthSA*); #endif genometools-1.5.1/src/gth/sa_cmp.c000066400000000000000000000051731211610345200170310ustar00rootroot00000000000000/* Copyright (c) 2003-2011 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "gth/sa.h" #include "gth/sa_cmp.h" /* is different from gt_range_compare()! */ static int compare_ranges(GtRange *rangeA, GtRange *rangeB) { if ((rangeA->start == rangeB->start) && (rangeA->end == rangeB->end)) return 0; if ((rangeA->start < rangeB->start) || ((rangeA->start == rangeB->start) && (rangeA->end > rangeB->end))) { return -1; /* rangeA '<' rangeB */ } return 1; /* rangeA '>' rangeB */ } /* The following function compares two spliced alignments according to their genomic positions. Thereby, the positions refering to the forward strand are considered. */ int gth_sa_cmp_genomic_forward(const void *dataA, const void *dataB) { GthSA *saA = (GthSA*) dataA; GthSA *saB = (GthSA*) dataB; GtRange rangeA, rangeB; /* genomic file number comparison */ if (gth_sa_gen_file_num(saA) < gth_sa_gen_file_num(saB)) return -1; /* saA '<' saB */ else if (gth_sa_gen_file_num(saA) > gth_sa_gen_file_num(saB)) return 1; /* saA '>' saB */ rangeA = gth_sa_range_forward(saA); rangeB = gth_sa_range_forward(saB); return compare_ranges(&rangeA, &rangeB); } /* The following function compares two spliced alignments pointers according to their genomic positions. Thereby, the positions refering to the actual strand are considered. */ int gth_sa_cmp_genomic_actual(const void *dataA, const void *dataB) { GthSA *saA= *(GthSA**) dataA; GthSA *saB= *(GthSA**) dataB; GtRange rangeA, rangeB; /* genomic file number comparison */ if (gth_sa_gen_file_num(saA) < gth_sa_gen_file_num(saB)) return -1; /* saA '<' saB */ else if (gth_sa_gen_file_num(saA) > gth_sa_gen_file_num(saB)) return 1; /* saA '>' saB */ rangeA = gth_sa_range_actual(saA); rangeB = gth_sa_range_actual(saB); return compare_ranges(&rangeA, &rangeB); } genometools-1.5.1/src/gth/sa_cmp.h000066400000000000000000000020271211610345200170310ustar00rootroot00000000000000/* Copyright (c) 2003-2011 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SA_CMP_H #define SA_CMP_H int gth_sa_cmp_genomic_forward(const void *dataA, const void *dataB); int gth_sa_cmp_genomic_actual(const void *dataA, const void *dataB); #endif genometools-1.5.1/src/gth/sa_collection.c000066400000000000000000000460001211610345200203770ustar00rootroot00000000000000/* Copyright (c) 2003-2011 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "extended/rbtree.h" #include "gth/sa_cmp.h" #include "gth/sa_collection.h" /* The following structure contains binary search trees of spliced alignments. They contain the same elements, but ordered according to different criteria. The tree rooted at contains the spliced alignments primarily ordered according to their left genomic position (as the linked list in GS2). Thereby, the genomic positions always refer to the forward strand (in contrary to the rest of the program, where genomic positions always refer to the actual strand). The elements of the tree rooted at are primarily ordered according to their reference ids. This tree is used to ensure that no alignment which ``spans'' another alignment (according to the function span_check()) is inserted into the trees. */ struct GthSACollection { GthDuplicateCheck duplicate_check; GtRBTree *rootlist, *rootEST; bool contains_sa; }; typedef enum { NOSPAN = 0, DISCARD, REPLACE, NUMOFSPANACTIONS } Spancheck; /* The following function checks if one of the two GthSA structures spans the other. This is checked on the basis of the left and right genomic border. If is included in , DISCARD is returned. The other way around REPLACE is returned. If none of the both spans the other NOSPAN is returned; */ static Spancheck span_check(GthSA *saA, GthSA *saB) { GtRange rangeA, rangeB; rangeA = gth_sa_range_forward(saA); rangeB = gth_sa_range_forward(saB); if ((rangeA.start <= rangeB.start) && (rangeA.end >= rangeB.end)) { /* discard saB */ return DISCARD; } if ((rangeA.start >= rangeB.start) && (rangeA.end <= rangeB.end)) { /* replace saA by saB */ return REPLACE; } return NOSPAN; } static int compare_strands(bool strandsignA, bool strandsignB) { if (strandsignA && !strandsignB) return -1; if (!strandsignA && strandsignB) return 1; return 0; } /* This function is used to check if the tree rooted at contains an alignment with the same ids and strand orientations. But the tree is ordered according to the function compare_duplicate_and_genomic_pos() given below. */ static int compare_duplicate(const void* dataA, const void* dataB, void *cmpinfo) { int rval; GthSA *saA = (GthSA*) dataA; GthSA *saB = (GthSA*) dataB; GthDuplicateCheck duplicate_check = *(GthDuplicateCheck*) cmpinfo; gt_assert(duplicate_check && duplicate_check != GTH_DC_NONE); if (duplicate_check == GTH_DC_ID && (rval = gt_str_cmp(gth_sa_gen_id_str(saA), gth_sa_gen_id_str(saB)))) { return rval; } if ((duplicate_check == GTH_DC_DESC || duplicate_check == GTH_DC_BOTH) && (rval = gt_str_cmp(gth_sa_gen_desc(saA), gth_sa_gen_desc(saB)))) { return rval; } if ((duplicate_check == GTH_DC_SEQ || duplicate_check == GTH_DC_BOTH) && (rval = gt_str_cmp(gth_sa_gen_md5(saA), gth_sa_gen_md5(saB)))) { return rval; } if ((rval = compare_strands(gth_sa_gen_strand_forward(saA), gth_sa_gen_strand_forward(saB)))) { return rval; } if (duplicate_check == GTH_DC_ID && (rval = gt_str_cmp(gth_sa_ref_id_str(saA), gth_sa_ref_id_str(saB)))) { return rval; } if ((duplicate_check == GTH_DC_DESC || duplicate_check == GTH_DC_BOTH) && (rval = gt_str_cmp(gth_sa_ref_desc(saA), gth_sa_ref_desc(saB)))) { return rval; } if ((duplicate_check == GTH_DC_SEQ || duplicate_check == GTH_DC_BOTH) && (rval = gt_str_cmp(gth_sa_ref_md5(saA), gth_sa_ref_md5(saB)))) { return rval; } if ((rval = compare_strands(gth_sa_ref_strand_forward(saA), gth_sa_ref_strand_forward(saB)))) { return rval; } return 0; } /* This function is used as ordering for the tree rooted at . */ static int compare_duplicate_and_genomic_pos(const void* dataA, const void* dataB, void *cmpinfo) { int rval; if ((rval = compare_duplicate(dataA, dataB, cmpinfo))) return rval; return gth_sa_cmp_genomic_forward(dataA, dataB); } /* The following function is used as ordering for the tree rooted at . */ static int compare_sa(const void *dataA, const void *dataB, void *cmpinfo) { GthSA *saA = (GthSA*) dataA; GthSA *saB = (GthSA*) dataB; GtRange rangeA, rangeB; GthDuplicateCheck duplicate_check = *(GthDuplicateCheck*) cmpinfo; if (saA == saB) return 0; rangeA = gth_sa_range_forward(saA); rangeB = gth_sa_range_forward(saB); if (duplicate_check != GTH_DC_NONE && !compare_duplicate(saA, saB, cmpinfo)) { Spancheck action = span_check(saA, saB); if (action == DISCARD) return 0; gt_assert(action != REPLACE); } /* genomic file number comparison */ if (gth_sa_gen_file_num(saA) < gth_sa_gen_file_num(saB)) return -1; if (gth_sa_gen_file_num(saA) > gth_sa_gen_file_num(saB)) return 1; /* genomic file numbers are equal, compare ranges */ if ((rangeA.start < rangeB.start) || ((rangeA.start == rangeB.start) && (rangeA.end > rangeB.end))) { /* saA '<' saB */ return -1; } else if (rangeA.start == rangeB.start && rangeA.end == rangeB.end) { int rval; /* some additional sorting criteria for the case when the two ranges are the same, this helps preventing ``random'' order of spliced alignments in a parallelized run */ if (gth_sa_score(saA) < gth_sa_score(saB)) return -1; if (gth_sa_score(saA) > gth_sa_score(saB)) return 1; if (gth_sa_cumlen_scored_exons(saA) < gth_sa_cumlen_scored_exons(saB)) return -1; if (gth_sa_cumlen_scored_exons(saA) > gth_sa_cumlen_scored_exons(saB)) return 1; if (gth_sa_gen_strand_forward(saA) < gth_sa_gen_strand_forward(saB)) return -1; if (gth_sa_gen_strand_forward(saA) > gth_sa_gen_strand_forward(saB)) return 1; if (gth_sa_ref_strand_forward(saA) < gth_sa_ref_strand_forward(saB)) return -1; if (gth_sa_ref_strand_forward(saA) > gth_sa_ref_strand_forward(saB)) return 1; if ((rval = gt_str_cmp(gth_sa_ref_id_str(saA), gth_sa_ref_id_str(saB)))) return rval; if (gth_sa_call_number(saA) < gth_sa_call_number(saB)) return -1; if (gth_sa_call_number(saA) > gth_sa_call_number(saB)) return 1; if (gth_sa_ref_file_num(saA) < gth_sa_ref_file_num(saB)) return -1; if (gth_sa_ref_file_num(saA) > gth_sa_ref_file_num(saB)) return 1; if (gth_sa_ref_seq_num(saA) < gth_sa_ref_seq_num(saB)) return -1; if (gth_sa_ref_seq_num(saA) > gth_sa_ref_seq_num(saB)) return 1; gt_assert(0); } /* saA '>' saB */ return 1; } static void insert_alignment(GthSACollection *sa_collection, GthSA *saB, bool use_rootEST) { GT_UNUSED GthSA *saA = NULL; bool nodecreated; gt_assert(sa_collection && saB); /* insert spliced alignment into tree rooted at */ saA = (GthSA*) gt_rbtree_search_with_cmp(sa_collection->rootlist, saB, compare_sa, &sa_collection->duplicate_check, &nodecreated); /* insertion into binary tree succeeded */ gt_assert(saA && nodecreated); if (use_rootEST) { /* insert spliced alignment into tree rooted at */ saA = (GthSA*) gt_rbtree_search_with_cmp(sa_collection->rootEST, saB, compare_duplicate_and_genomic_pos, &sa_collection->duplicate_check, &nodecreated); /* insertion into binary tree succeeded */ gt_assert(saA && nodecreated); } } GthSACollection* gth_sa_collection_new(GthDuplicateCheck duplicate_check) { GthSACollection *sa_collection= gt_calloc(1, sizeof *sa_collection); sa_collection->duplicate_check = duplicate_check; sa_collection->rootlist = gt_rbtree_new(compare_sa, (GtFree) gth_sa_delete, &sa_collection->duplicate_check); sa_collection->rootEST = gt_rbtree_new(compare_duplicate_and_genomic_pos, NULL, &sa_collection->duplicate_check); return sa_collection; } bool gth_sa_collection_insert_sa(GthSACollection *sa_collection, GthSA *saB, GthSAFilter *sa_filter, GthStat *stat) { GthSA *saA = NULL, *spliced_alignmentptr = NULL, *satodel; Spancheck action; GtArray *alignmentstodelete; bool discard = false, replace = false; unsigned long i; /* filter */ if (sa_filter) { if (gth_sa_filter_filter_sa(sa_filter, saB)) { /* discard saB. returning false to indicate that no element has been inserted */ return false; } } if (sa_collection->duplicate_check != GTH_DC_NONE) { saA = (GthSA*) gt_rbtree_find_with_cmp(sa_collection->rootEST, saB, compare_duplicate, &sa_collection->duplicate_check); } if (saA == NULL) { /* no alignment with the same ids and strand orientations is in the tree or the duplicate check has been disabled, insert saB into both trees. */ insert_alignment(sa_collection, saB, sa_collection->duplicate_check != GTH_DC_NONE); } else { /* one or more alignments with the same ids and strand orientations exist in the tree. check if one of them spans the new alignment. */ alignmentstodelete = gt_array_new(sizeof (GthSA*)); /* check the actual one */ action = span_check(saA, saB); switch (action) { case NOSPAN: /* nothing to do */ break; case DISCARD: discard = true; break; case REPLACE: replace = true; gt_array_add(alignmentstodelete, saA); break; default: gt_assert(0); } /* going to the left */ spliced_alignmentptr = gt_rbtree_previous_key(sa_collection->rootEST, saA, compare_duplicate_and_genomic_pos, &sa_collection->duplicate_check); while ((spliced_alignmentptr) && (!compare_duplicate(saB, spliced_alignmentptr, &sa_collection->duplicate_check))) { /* spliced_alignmentptr has the same ids and strand orientations: check if it spans saB */ action = span_check(spliced_alignmentptr, saB); switch (action) { case NOSPAN: /* nothing to do */ break; case DISCARD: discard = true; break; case REPLACE: replace = true; gt_array_add(alignmentstodelete, spliced_alignmentptr); break; default: gt_assert(0); } /* retrieving next alignment */ spliced_alignmentptr = gt_rbtree_previous_key(sa_collection->rootEST, spliced_alignmentptr, compare_duplicate_and_genomic_pos, &sa_collection->duplicate_check); } /* going to right */ spliced_alignmentptr = gt_rbtree_next_key(sa_collection->rootEST, saA, compare_duplicate_and_genomic_pos, &sa_collection->duplicate_check); while ((spliced_alignmentptr) && (!compare_duplicate(saB, spliced_alignmentptr, &sa_collection->duplicate_check))) { /* spliced_alignmentptr has the same ids and strand orientations: check if it spans saB */ action = span_check(spliced_alignmentptr, saB); switch (action) { case NOSPAN: /* nothing to do */ break; case DISCARD: discard = true; break; case REPLACE: replace = true; gt_array_add(alignmentstodelete, spliced_alignmentptr); break; default: gt_assert(0); } /* retrieving next alignment */ spliced_alignmentptr = gt_rbtree_next_key(sa_collection->rootEST, spliced_alignmentptr, compare_duplicate_and_genomic_pos, &sa_collection->duplicate_check); } /* DISCARD and REPLACE are not true at the same time */ gt_assert(!(discard && replace)); if (discard) { gt_assert(saA); /* saB will be discarded returning false to indicate that no element has been inserted */ gt_array_delete(alignmentstodelete); return false; } if (replace) { /* deleting all alignments which need to be replaced by saA */ for (i = 0; i < gt_array_size(alignmentstodelete); i++) { satodel = *(GthSA**) gt_array_get(alignmentstodelete, i); (void) gt_rbtree_erase(sa_collection->rootEST, satodel); (void) gt_rbtree_erase(sa_collection->rootlist, satodel); } } /* free */ gt_array_delete(alignmentstodelete); /* insert saB */ gt_assert(sa_collection->duplicate_check != GTH_DC_NONE); insert_alignment(sa_collection, saB, true); } /* returning true to indicate that an element has been inserted */ if (stat) gth_stat_increment_numofSAs(stat); sa_collection->contains_sa = true; return true; } static int storealignmentptr(void* data, GtRBTreeContext which, GT_UNUSED unsigned long depth, void *actinfo) { GthSA *sa = (GthSA*) data; GtArray *alignments = (GtArray*) actinfo; switch (which) { case GT_RBTREE_PREORDER: case GT_RBTREE_ENDORDER: break; case GT_RBTREE_POSTORDER: case GT_RBTREE_LEAF: gt_array_add(alignments, sa); break; default: gt_assert(0); } return 0; } /* The following function traverses the tree of alignments in and returns all alignment pointers in the array. */ static GtArray* sa_collection_get_alignments(const GthSACollection *sa_collection) { GtArray *alignments = gt_array_new(sizeof (GthSA*)); GT_UNUSED int had_err; /* traverse the tree */ had_err = gt_rbtree_walk(sa_collection->rootlist, storealignmentptr, alignments); gt_assert(!had_err); /* storealignmentptr() is sane */ return alignments; } bool gth_sa_collections_are_equal(const GthSACollection *sa_collectionA, const GthSACollection *sa_collectionB) { GtArray *alignments_from_A, *alignments_from_B; unsigned long i; /* compute arrays of SAs from the trees */ alignments_from_A = sa_collection_get_alignments(sa_collectionA); alignments_from_B = sa_collection_get_alignments(sa_collectionB); /* check if both arrays have the same size */ if (gt_array_size(alignments_from_A) != gt_array_size(alignments_from_B)) { gt_array_delete(alignments_from_A); gt_array_delete(alignments_from_B); return false; } /* both arrays have the same size -> compare the individual SAs */ for (i = 0; i < gt_array_size(alignments_from_A); i++) { if (!gth_sas_are_equal(*(GthSA**) gt_array_get(alignments_from_A, i), *(GthSA**) gt_array_get(alignments_from_B, i))) { gt_array_delete(alignments_from_A); gt_array_delete(alignments_from_B); return false; } } /* free space */ gt_array_delete(alignments_from_A); gt_array_delete(alignments_from_B); return true; } bool gth_sa_collection_contains_sa(const GthSACollection *sa_collection) { gt_assert(sa_collection); return sa_collection->contains_sa; } void gth_sa_collection_traverse(const GthSACollection *sa_collection, GthSAVisitor *sa_visitor, GthInput *input) { GthSACollectionIterator *iterator; unsigned long num_of_sas = 0; GthSA *sa; gt_assert(sa_collection && sa_visitor && input); gth_sa_visitor_preface(sa_visitor); iterator = gth_sa_collection_iterator_new(sa_collection); while ((sa = gth_sa_collection_iterator_next(iterator))) { gth_input_load_genomic_file(input, gth_sa_gen_file_num(sa), false); gth_input_load_reference_file(input, gth_sa_ref_file_num(sa), false); gth_sa_visitor_visit_sa(sa_visitor, sa); num_of_sas++; } gth_sa_collection_iterator_delete(iterator); gth_sa_visitor_trailer(sa_visitor, num_of_sas); } void gth_sa_collection_set_md5s(GthSACollection *sa_collection, GthInput *input) { gt_assert(sa_collection && input); if (gth_input_md5ids(input)) { GthSACollectionIterator *iterator; GthSA *sa; iterator = gth_sa_collection_iterator_new(sa_collection); while ((sa = gth_sa_collection_iterator_next(iterator))) { gth_input_load_genomic_file(input, gth_sa_gen_file_num(sa), false); gth_input_load_reference_file(input, gth_sa_ref_file_num(sa), false); gth_sa_save_ref_md5(sa, input); } gth_sa_collection_iterator_delete(iterator); } } void gth_sa_collection_delete(GthSACollection *sa_collection) { if (!sa_collection) return; gt_rbtree_delete(sa_collection->rootlist); /* for the second tree no free function is needed, because all elements have been freed already by the previous redblacktreedestroy() */ gt_rbtree_delete(sa_collection->rootEST); gt_free(sa_collection); } struct GthSACollectionIterator { GtArray *alignments; unsigned long counter; }; GthSACollectionIterator* gth_sa_collection_iterator_new(const GthSACollection *sa_collection) { GthSACollectionIterator *iterator; gt_assert(sa_collection); iterator = gt_malloc(sizeof *iterator); iterator->alignments = sa_collection_get_alignments(sa_collection); iterator->counter = 0; return iterator; } GthSA* gth_sa_collection_iterator_next(GthSACollectionIterator *iterator) { gt_assert(iterator); if (iterator->counter < gt_array_size(iterator->alignments)) return *(GthSA**) gt_array_get(iterator->alignments, iterator->counter++); return NULL; } void gth_sa_collection_iterator_delete(GthSACollectionIterator *iterator) { if (!iterator) return; gt_array_delete(iterator->alignments); gt_free(iterator); } genometools-1.5.1/src/gth/sa_collection.h000066400000000000000000000051021211610345200204020ustar00rootroot00000000000000/* Copyright (c) 2003-2011 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SA_COLLECTION_H #define SA_COLLECTION_H #include "gth/call_info.h" #include "gth/input.h" #include "gth/sa_visitor.h" #include "gth/stat.h" typedef struct GthSACollection GthSACollection; GthSACollection* gth_sa_collection_new(GthDuplicateCheck duplicate_check); /* Returns true, if has passed the and has been inserted into , otherwise false is returned. is optional. */ bool gth_sa_collection_insert_sa(GthSACollection*, GthSA *sa, GthSAFilter *sa_filter, GthStat *stat); /* Checks if the given two spliced alignment collections are equal. They are equal if they contain exactly the same spliced alignments. */ bool gth_sa_collections_are_equal(const GthSACollection*, const GthSACollection*); /* Returns true if contains at least on spliced alignment, false otherwise. */ bool gth_sa_collection_contains_sa(const GthSACollection*); void gth_sa_collection_traverse(const GthSACollection*, GthSAVisitor*, GthInput*); void gth_sa_collection_set_md5s(GthSACollection*, GthInput*); void gth_sa_collection_delete(GthSACollection*); typedef struct GthSACollectionIterator GthSACollectionIterator; GthSACollectionIterator* gth_sa_collection_iterator_new(const GthSACollection*); GthSA* gth_sa_collection_iterator_next( GthSACollectionIterator*); void gth_sa_collection_iterator_delete( GthSACollectionIterator*); #endif genometools-1.5.1/src/gth/sa_filter.c000066400000000000000000000146771211610345200175500ustar00rootroot00000000000000/* Copyright (c) 2005-2010 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "gth/default.h" #include "gth/sa_filter.h" #define MINALIGNMENTSCORE_OPT_CSTR "minalignmentscore" #define MAXALIGNMENTSCORE_OPT_CSTR "maxalignmentscore" #define MINCOVERAGE_OPT_CSTR "mincoverage" #define MAXCOVERAGE_OPT_CSTR "maxcoverage" struct GthSAFilter { double min_alignmentscore, max_alignmentscore, min_coverage, max_coverage; }; GthSAFilter* gth_sa_filter_new(void) { GthSAFilter *sa_filter; sa_filter = gt_malloc(sizeof (GthSAFilter)); sa_filter->min_alignmentscore = GTH_DEFAULT_MIN_ALIGNMENTSCORE; sa_filter->max_alignmentscore = GTH_DEFAULT_MAX_ALIGNMENTSCORE; sa_filter->min_coverage = GTH_DEFAULT_MIN_COVERAGE; sa_filter->max_coverage = GTH_DEFAULT_MAX_COVERAGE; return sa_filter; } static int sa_filter_check_arguments(void *data, GtError *err) { GthSAFilter *sa_filter= (GthSAFilter*) data; int had_err = 0; gt_error_check(err); gt_assert(sa_filter); if (sa_filter->min_alignmentscore > sa_filter->max_alignmentscore) { gt_error_set(err, "argument \"%.2f\" to option -%s must be smaller or " "equal than argument \"%.2f\" to option -%s", sa_filter->min_alignmentscore, MINALIGNMENTSCORE_OPT_CSTR, sa_filter->max_alignmentscore, MAXALIGNMENTSCORE_OPT_CSTR); had_err = -1; } if (!had_err && sa_filter->min_coverage > sa_filter->max_coverage) { gt_error_set(err, "argument \"%.2f\" to option -%s must be smaller or " "equal than argument \"%.2f\" to option -%s", sa_filter->min_coverage, MINCOVERAGE_OPT_CSTR, sa_filter->max_coverage, MAXCOVERAGE_OPT_CSTR); had_err = -1; } return had_err; } void gth_sa_filter_register_options(GtOptionParser *op, GthSAFilter *sa_filter, bool extended_options) { GtOption *o; gt_assert(sa_filter && op); /* -minalignmentscore */ o = gt_option_new_double_min_max(MINALIGNMENTSCORE_OPT_CSTR, "set the " "minimum alignment score for spliced " "alignments to be included into the set of " "spliced alignments", &sa_filter->min_alignmentscore, GTH_DEFAULT_MIN_ALIGNMENTSCORE, GTH_DEFAULT_MIN_ALIGNMENTSCORE, GTH_DEFAULT_MAX_ALIGNMENTSCORE); if (extended_options) gt_option_is_extended_option(o); gt_option_parser_add_option(op, o); /* -maxalignmentscore */ o = gt_option_new_double_min_max(MAXALIGNMENTSCORE_OPT_CSTR, "set the " "maximum alignment score for spliced " "alignments to be included into the set of " "spliced alignments", &sa_filter->max_alignmentscore, GTH_DEFAULT_MAX_ALIGNMENTSCORE, GTH_DEFAULT_MIN_ALIGNMENTSCORE, GTH_DEFAULT_MAX_ALIGNMENTSCORE); if (extended_options) gt_option_is_extended_option(o); gt_option_parser_add_option(op, o); /* -mincoverage */ o = gt_option_new_double_min_max(MINCOVERAGE_OPT_CSTR, "set the minimum " "coverage for spliced alignments to be " "included into the set of spliced " "alignments", &sa_filter->min_coverage, GTH_DEFAULT_MIN_COVERAGE, GTH_DEFAULT_MIN_COVERAGE, GTH_DEFAULT_MAX_COVERAGE); if (extended_options) gt_option_is_extended_option(o); gt_option_parser_add_option(op, o); /* -maxcoverage */ o = gt_option_new_double_min_max(MAXCOVERAGE_OPT_CSTR, "set the maximum " "coverage for spliced alignments to be " "included into the set of spliced " "alignments", &sa_filter->max_coverage, GTH_DEFAULT_MAX_COVERAGE, GTH_DEFAULT_MIN_COVERAGE, GTH_DEFAULT_MAX_COVERAGE); if (extended_options) gt_option_is_extended_option(o); gt_option_parser_add_option(op, o); /* register hooks to check the arguments after the option parsing */ gt_option_parser_register_hook(op, sa_filter_check_arguments, sa_filter); } bool gth_sa_filter_filter_sa(const GthSAFilter *sa_filter, GthSA *sa) { gt_assert(sa_filter && sa); /* alignment score is larger or equal then default min value */ gt_assert(gth_sa_score(sa) >= GTH_DEFAULT_MIN_ALIGNMENTSCORE); /* alignment score is smaller or equal then default max value */ gt_assert(gth_sa_score(sa) <= GTH_DEFAULT_MAX_ALIGNMENTSCORE); /* coverage is larger or equal then default min value */ gt_assert(gth_sa_coverage(sa) >= GTH_DEFAULT_MIN_COVERAGE); /* coverage score is smaller or equal then default max value */ gt_assert(gth_sa_coverage(sa) <= GTH_DEFAULT_MAX_COVERAGE); /* filter */ if (gth_sa_score(sa) < sa_filter->min_alignmentscore || gth_sa_score(sa) > sa_filter->max_alignmentscore || gth_sa_coverage(sa) < sa_filter->min_coverage || gth_sa_coverage(sa) > sa_filter->max_coverage) { return true; } return false; } void gth_sa_filter_delete(GthSAFilter *sa_filter) { if (!sa_filter) return; gt_free(sa_filter); } genometools-1.5.1/src/gth/sa_filter.h000066400000000000000000000024731211610345200175440ustar00rootroot00000000000000/* Copyright (c) 2005-2009 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SA_FILTER_H #define SA_FILTER_H #include "core/option_api.h" #include "gth/sa.h" /* a filter for spliced alignments */ typedef struct GthSAFilter GthSAFilter; GthSAFilter* gth_sa_filter_new(void); void gth_sa_filter_register_options(GtOptionParser*, GthSAFilter*, bool extended_options); bool gth_sa_filter_filter_sa(const GthSAFilter*, GthSA*); void gth_sa_filter_delete(GthSAFilter*); #endif genometools-1.5.1/src/gth/sa_visitor.c000066400000000000000000000036621211610345200177520ustar00rootroot00000000000000/* Copyright (c) 2008-2011 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "gth/sa_visitor_rep.h" GthSAVisitor* gth_sa_visitor_create(const GthSAVisitorClass *savc) { GthSAVisitor *sav; gt_assert(savc && savc->size); sav = gt_calloc(1, savc->size); sav->c_class = savc; return sav; } void* gth_sa_visitor_cast(GT_UNUSED const GthSAVisitorClass *savc, GthSAVisitor *sav) { gt_assert(savc && sav && sav->c_class == savc); return sav; } void gth_sa_visitor_preface(GthSAVisitor *sav) { gt_assert(sav && sav->c_class); if (sav->c_class->preface) sav->c_class->preface(sav); } void gth_sa_visitor_visit_sa(GthSAVisitor *sav, GthSA *sa) { gt_assert(sav && sa && sav->c_class && sav->c_class->visit_sa); sav->c_class->visit_sa(sav, sa); } void gth_sa_visitor_trailer(GthSAVisitor *sav, unsigned long num_of_sas) { gt_assert(sav && sav->c_class); if (sav->c_class->trailer) sav->c_class->trailer(sav, num_of_sas); } void gth_sa_visitor_delete(GthSAVisitor *sav) { if (!sav) return; gt_assert(sav->c_class); if (sav->c_class->free) sav->c_class->free(sav); gt_free(sav); } genometools-1.5.1/src/gth/sa_visitor.h000066400000000000000000000024141211610345200177510ustar00rootroot00000000000000/* Copyright (c) 2008-2011 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SA_VISITOR_H #define SA_VISITOR_H #include "gth/sa.h" /* the ``spliced alignment visitor'' interface */ typedef struct GthSAVisitorClass GthSAVisitorClass; typedef struct GthSAVisitor GthSAVisitor; void gth_sa_visitor_preface(GthSAVisitor*); void gth_sa_visitor_visit_sa(GthSAVisitor*, GthSA*); void gth_sa_visitor_trailer(GthSAVisitor*, unsigned long num_of_sas); void gth_sa_visitor_delete(GthSAVisitor*); #endif genometools-1.5.1/src/gth/sa_visitor_rep.h000066400000000000000000000026121211610345200206170ustar00rootroot00000000000000/* Copyright (c) 2008-2011 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SA_VISITOR_REP_H #define SA_VISITOR_REP_H #include "gth/sa_visitor.h" /* the ``spliced alignment visitor'' interface */ struct GthSAVisitorClass { size_t size; void (*free)(GthSAVisitor*); void (*preface)(GthSAVisitor*); void (*visit_sa)(GthSAVisitor*, GthSA*); void (*trailer)(GthSAVisitor*, unsigned long num_of_sas); }; struct GthSAVisitor { const GthSAVisitorClass *c_class; }; GthSAVisitor* gth_sa_visitor_create(const GthSAVisitorClass*); void* gth_sa_visitor_cast(const GthSAVisitorClass*, GthSAVisitor*); #endif genometools-1.5.1/src/gth/seq_con.c000066400000000000000000000154561211610345200172230ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/class_alloc.h" #include "core/ma_api.h" #include "core/unused_api.h" #include "gth/seq_con_rep.h" struct GthSeqConClass { size_t size; GthSeqConDemandOrigSeqFunc demand_orig_seq; GthSeqConGetOrigSeqFunc get_orig_seq; GthSeqConGetTranSeqFunc get_tran_seq; GthSeqConGetOrigSeqRCFunc get_orig_seq_rc; GthSeqConGetTranSeqRCFunc get_tran_seq_rc; GthSeqConGetDescriptionFunc get_description; GthSeqConEchoDescriptionFunc echo_description; GthSeqConNumOfSeqsFunc num_of_seqs; GthSeqConTotalLengthFunc total_length; GthSeqConGetRangeFunc get_range; GthSeqConGetAlphabetFunc get_alphabet; GthSeqConFreeFunc free; }; const GthSeqConClass* gth_seq_con_class_new(size_t size, GthSeqConDemandOrigSeqFunc demand_orig_seq, GthSeqConGetOrigSeqFunc get_orig_seq, GthSeqConGetTranSeqFunc get_tran_seq, GthSeqConGetOrigSeqRCFunc get_orig_seq_rc, GthSeqConGetTranSeqRCFunc get_tran_seq_rc, GthSeqConGetDescriptionFunc get_description, GthSeqConEchoDescriptionFunc echo_description, GthSeqConNumOfSeqsFunc num_of_seqs, GthSeqConTotalLengthFunc total_length, GthSeqConGetRangeFunc get_range, GthSeqConGetAlphabetFunc get_alphabet, GthSeqConFreeFunc free) { GthSeqConClass *c_class = gt_class_alloc(sizeof *c_class); c_class->size = size; c_class->demand_orig_seq = demand_orig_seq; c_class->get_orig_seq = get_orig_seq; c_class->get_tran_seq = get_tran_seq; c_class->get_orig_seq_rc = get_orig_seq_rc; c_class->get_tran_seq_rc = get_tran_seq_rc; c_class->get_description = get_description; c_class->echo_description = echo_description; c_class->num_of_seqs = num_of_seqs; c_class->total_length = total_length; c_class->get_range = get_range; c_class->get_alphabet = get_alphabet; c_class->free = free; return c_class; } GthSeqCon* gth_seq_con_create(const GthSeqConClass *scc) { GthSeqCon *sc; gt_assert(scc && scc->size); sc = gt_calloc(1, scc->size); sc->c_class = scc; sc->pvt = NULL; /* XXX */ return sc; } void* gth_seq_con_cast(GT_UNUSED const GthSeqConClass *scc, GthSeqCon *sc) { gt_assert(scc && sc && sc->c_class == scc); return sc; } void gth_seq_con_delete(GthSeqCon *sc) { if (!sc) return; if (sc->c_class->free) sc->c_class->free(sc); gt_free(sc->pvt); gt_free(sc); } void gth_seq_con_demand_orig_seq(GthSeqCon *seq_con) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->demand_orig_seq); seq_con->c_class->demand_orig_seq(seq_con); } GtUchar* gth_seq_con_get_orig_seq(GthSeqCon *seq_con, unsigned long seq_num) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->get_orig_seq); return seq_con->c_class->get_orig_seq(seq_con, seq_num); } GtUchar* gth_seq_con_get_tran_seq(GthSeqCon *seq_con, unsigned long seq_num) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->get_tran_seq); return seq_con->c_class->get_tran_seq(seq_con, seq_num); } GtUchar* gth_seq_con_get_orig_seq_rc(GthSeqCon *seq_con, unsigned long seq_num) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->get_orig_seq_rc); return seq_con->c_class->get_orig_seq_rc(seq_con, seq_num); } GtUchar* gth_seq_con_get_tran_seq_rc(GthSeqCon *seq_con, unsigned long seq_num) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->get_tran_seq_rc); return seq_con->c_class->get_tran_seq_rc(seq_con, seq_num); } void gth_seq_con_get_description(GthSeqCon *seq_con, unsigned long seq_num, GtStr *desc) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->get_description); seq_con->c_class->get_description(seq_con, seq_num, desc); } void gth_seq_con_echo_description(GthSeqCon *seq_con, unsigned long seq_num, GtFile *outfp) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->echo_description); seq_con->c_class->echo_description(seq_con, seq_num, outfp); } unsigned long gth_seq_con_num_of_seqs(GthSeqCon *seq_con) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->num_of_seqs); return seq_con->c_class->num_of_seqs(seq_con); } unsigned long gth_seq_con_total_length(GthSeqCon *seq_con) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->total_length); return seq_con->c_class->total_length(seq_con); } GtRange gth_seq_con_get_range(GthSeqCon *seq_con, unsigned long seq_num) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->get_range); return seq_con->c_class->get_range(seq_con, seq_num); } GtRange gth_seq_con_get_relative_range(GthSeqCon *seq_con, unsigned long seq_num) { GtRange relative_range, range; gt_assert(seq_con); gt_assert(seq_num < gth_seq_con_num_of_seqs(seq_con)); range = gth_seq_con_get_range(seq_con, seq_num); relative_range.start = 0; relative_range.end = range.end - range.start; return relative_range; } unsigned long gth_seq_con_get_length(GthSeqCon *seq_con, unsigned long seq_num) { GtRange range; gt_assert(seq_con); range = gth_seq_con_get_range(seq_con, seq_num); return gt_range_length(&range); } GtAlphabet* gth_seq_con_get_alphabet(GthSeqCon *seq_con) { gt_assert(seq_con && seq_con->c_class && seq_con->c_class->get_alphabet); return seq_con->c_class->get_alphabet(seq_con); } genometools-1.5.1/src/gth/seq_con.h000066400000000000000000000052071211610345200172210ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SEQ_CON_H #define SEQ_CON_H #include "core/alphabet.h" #include "core/file.h" #include "core/range.h" #include "core/str_api.h" #include "core/types_api.h" /* The sequence container class */ typedef struct GthSeqConClass GthSeqConClass; typedef struct GthSeqCon GthSeqCon; typedef GthSeqCon* (*GthSeqConConstructor)(const char *indexname, bool assign_rc, bool orig_seq, bool tran_seq); void gth_seq_con_delete(GthSeqCon*); void gth_seq_con_demand_orig_seq(GthSeqCon *seq_con); GtUchar* gth_seq_con_get_orig_seq(GthSeqCon *seq_con, unsigned long seq_num); GtUchar* gth_seq_con_get_tran_seq(GthSeqCon *seq_con, unsigned long seq_num); GtUchar* gth_seq_con_get_orig_seq_rc(GthSeqCon *seq_con, unsigned long seq_num); GtUchar* gth_seq_con_get_tran_seq_rc(GthSeqCon *seq_con, unsigned long seq_num); void gth_seq_con_get_description(GthSeqCon *seq_con, unsigned long seq_num, GtStr *desc); void gth_seq_con_echo_description(GthSeqCon *seq_con, unsigned long seq_num, GtFile *outfp); unsigned long gth_seq_con_num_of_seqs(GthSeqCon *seq_con); unsigned long gth_seq_con_total_length(GthSeqCon *seq_con); GtRange gth_seq_con_get_range(GthSeqCon *seq_con, unsigned long seq_num); GtRange gth_seq_con_get_relative_range(GthSeqCon *seq_con, unsigned long seq_num); unsigned long gth_seq_con_get_length(GthSeqCon *seq_con, unsigned long seq_num); GtAlphabet* gth_seq_con_get_alphabet(GthSeqCon *seq_con); #endif genometools-1.5.1/src/gth/seq_con_rep.h000066400000000000000000000073671211610345200201000ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SEQ_CON_REP_H #define SEQ_CON_REP_H #include "gth/seq_con.h" typedef void (*GthSeqConDemandOrigSeqFunc)(GthSeqCon*); typedef GtUchar* (*GthSeqConGetOrigSeqFunc)(GthSeqCon*, unsigned long seq_num); typedef GtUchar* (*GthSeqConGetTranSeqFunc)(GthSeqCon*, unsigned long seq_num); typedef GtUchar* (*GthSeqConGetOrigSeqRCFunc)(GthSeqCon*, unsigned long seq_num); typedef GtUchar* (*GthSeqConGetTranSeqRCFunc)(GthSeqCon*, unsigned long seq_num); typedef void (*GthSeqConGetDescriptionFunc)(GthSeqCon*, unsigned long seq_num, GtStr *desc); typedef void (*GthSeqConEchoDescriptionFunc)(GthSeqCon*, unsigned long seq_num, GtFile *outfp); typedef unsigned long (*GthSeqConNumOfSeqsFunc)(GthSeqCon*); typedef unsigned long (*GthSeqConTotalLengthFunc)(GthSeqCon*); typedef GtRange (*GthSeqConGetRangeFunc)(GthSeqCon*, unsigned long seq_num); typedef GtAlphabet* (*GthSeqConGetAlphabetFunc)(GthSeqCon*); typedef void (*GthSeqConFreeFunc)(GthSeqCon*); typedef struct GthSeqConMembers GthSeqConMembers; struct GthSeqCon { const GthSeqConClass *c_class; GthSeqConMembers *pvt; }; const GthSeqConClass* gth_seq_con_class_new(size_t size, GthSeqConDemandOrigSeqFunc demand_orig_seq, GthSeqConGetOrigSeqFunc get_orig_seq, GthSeqConGetTranSeqFunc get_tran_seq, GthSeqConGetOrigSeqRCFunc get_orig_seq_rc, GthSeqConGetTranSeqRCFunc get_tran_seq_rc, GthSeqConGetDescriptionFunc get_description, GthSeqConEchoDescriptionFunc echo_description, GthSeqConNumOfSeqsFunc num_of_seqs, GthSeqConTotalLengthFunc total_length, GthSeqConGetRangeFunc get_range, GthSeqConGetAlphabetFunc get_alphabet, GthSeqConFreeFunc free); GthSeqCon* gth_seq_con_create(const GthSeqConClass*); void* gth_seq_con_cast(const GthSeqConClass*, GthSeqCon*); #endif genometools-1.5.1/src/gth/showbool.h000066400000000000000000000015611211610345200174250ustar00rootroot00000000000000/* Copyright (c) 2009 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SHOWBOOL_H #define SHOWBOOL_H #define GTH_SHOWBOOL(B) ((B) ? "True" : "False") #endif genometools-1.5.1/src/gth/similarity_filter.c000066400000000000000000001176341211610345200213300ustar00rootroot00000000000000/* Copyright (c) 2003-2011 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/trans_table.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "gth/chaining.h" #include "gth/gtherror.h" #include "gth/gthxml.h" #include "gth/intermediate.h" #include "gth/proc_sa_collection.h" #include "gth/similarity_filter.h" #define UNSUCCESSFULALIGNMENTSCORE 0.0 #define SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE 160 #define ICDELTASTRINGLENGTH 40 #define SHOW_COMPUTE_MATCHES_STATUS_BUF_SIZE 160 typedef struct { unsigned long call_number; bool significant_match_found, max_call_number_reached, stop_amino_acid_warning; } GthMatchInfo; static void show_matrix_calculation_status(GthShowVerbose showverbose, bool gen_strand_forward, bool ref_strand_forward, bool introncutout, unsigned long chainctr, unsigned long num_of_chains, unsigned long icdelta, unsigned long gen_file_num, unsigned long num_of_gen_files, unsigned long ref_file_num, unsigned long num_of_ref_files, bool directmatches, bool verboseseqs, const char *gen_id, const char *ref_id) { char buf[SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE], icdeltastring[ICDELTASTRINGLENGTH]; GT_UNUSED int rval; if (introncutout) { rval = snprintf(icdeltastring, ICDELTASTRINGLENGTH, ", icdelta=%lu", icdelta); /* buffer icdeltastring[ICDELTASTRINGLENGTH] is large enough */ gt_assert(rval < ICDELTASTRINGLENGTH); } if (num_of_gen_files == 1 && num_of_ref_files == 1) { rval = snprintf(buf, SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE, "d=%c, compute spliced alignment, genseq=%c, " "chain=%lu/%lu, refseq=%c%s", SHOWSTRAND(directmatches), SHOWSTRAND(gen_strand_forward), chainctr + 1, num_of_chains, SHOWSTRAND(ref_strand_forward), introncutout ? icdeltastring : ""); } else { rval = snprintf(buf, SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE, "gf=%lu/%lu, d=%c, rf=%lu/%lu, compute spliced alignment, " "gs=%c, chain=%lu/%lu, rs=%c%s", gen_file_num + 1, num_of_gen_files, SHOWSTRAND(directmatches), ref_file_num + 1, num_of_ref_files, SHOWSTRAND(gen_strand_forward), chainctr + 1, num_of_chains, SHOWSTRAND(ref_strand_forward), introncutout ? icdeltastring : ""); } /* buf[SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE] is large enough */ gt_assert(rval < SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE); showverbose(buf); if (verboseseqs) { rval = snprintf(buf, SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE, "genomicid=%s, referenceid=%s", gen_id, ref_id); /* buf[SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE] is large enough */ gt_assert(rval < SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE); showverbose(buf); } } static int callsahmt(bool call_dna_dp, GthSA *sa, bool forward, unsigned long gen_file_num, unsigned long ref_file_num, GthChain *raw_chain, unsigned long gen_total_length, unsigned long gen_offset, const GtRange *gen_seq_bounds, const GtRange *gen_seq_bounds_rc, const unsigned char *ref_seq_tran, const unsigned char *ref_seq_orig, unsigned long ref_total_length, unsigned long ref_offset, GthInput *input, Introncutoutinfo *introncutoutinfo, GthStat *stat, unsigned long chainctr, unsigned long num_of_chains, unsigned long translationtable, bool directmatches, bool proteinexonpenal, GthSpliceSiteModel *splice_site_model, GthDPOptionsCore *dp_options_core, GthDPOptionsEST *dp_options_est, GthDPOptionsPostpro *dp_options_postpro, GthDNACompletePathMatrixJT dna_complete_path_matrix_jt, GthProteinCompletePathMatrixJT protein_complete_path_matrix_jt, GthOutput *out) { int rval; GthChain *actual_chain, *contracted_chain, *used_chain; unsigned long icdelta = introncutoutinfo->icinitialdelta, iciterations = introncutoutinfo->iciterations; bool useintroncutout = introncutoutinfo->introncutout; /* initially useintron is set to the value of introncutoutinfo->introncutout, if the automatic intron cutotu technique is acitvated it can be set to true if an matrix allocation error (ERROR_MATRIX_ALLOCATION_FAILED) occurs */ gt_assert(sa); actual_chain = gth_chain_new(); contracted_chain = gth_chain_new(); for (;;) { /* reset actualDPrange; */ gt_array_set_size(actual_chain->forwardranges, 0); gt_array_set_size(actual_chain->reverseranges, 0); /* copy raw chain to actual chain */ gth_chain_copy(actual_chain, raw_chain); /* shorten potential introns and compute spliced sequence, if the intron cutout technique is used */ if (useintroncutout) { /* shorten potential introns */ gth_chain_shorten_introns(actual_chain, icdelta, introncutoutinfo->icminremintronlength, gen_total_length, gen_offset, out->comments, out->outfp); } else gth_chain_contract(contracted_chain, actual_chain); if (out->showverbose) { show_matrix_calculation_status(out->showverbose, forward, gth_sa_ref_strand_forward(sa), useintroncutout, chainctr, num_of_chains, icdelta, gen_file_num, gth_input_num_of_gen_files(input), ref_file_num, gth_input_num_of_ref_files(input), directmatches, out->verboseseqs, gth_sa_gen_id(sa), gth_sa_ref_id(sa)); } /* allocate space for DP parameter */ if (out->comments) { gt_file_xprintf(out->outfp, "%c alloc space for DP param " "(genomicid=%s, referenceid=%s)\n", COMMENTCHAR, gth_sa_gen_id(sa), gth_sa_ref_id(sa)); } used_chain = useintroncutout ? actual_chain : contracted_chain; /* The variable 'forward' denotes the genomic strand on which the DP is applied. */ if (forward) { if (call_dna_dp) { rval = gth_align_dna(sa, used_chain->forwardranges, gth_input_current_gen_seq_tran(input), gth_input_current_gen_seq_orig(input), ref_seq_tran, ref_seq_orig, ref_total_length, gth_input_current_gen_alphabet(input), gth_input_current_ref_alphabet(input), useintroncutout, introncutoutinfo->autoicmaxmatrixsize, out->showeops, out->comments, out->gs2out, gen_seq_bounds, splice_site_model, dp_options_core, dp_options_est, dp_options_postpro, dna_complete_path_matrix_jt, raw_chain->forward_jump_table, ref_offset, stat, out->outfp); } else { /* call_protein_dp */ rval = gth_align_protein(sa, used_chain->forwardranges, gth_input_current_gen_seq_tran(input), ref_seq_tran, ref_seq_orig, ref_total_length, gth_input_current_gen_alphabet(input), gth_input_current_ref_alphabet(input), input, useintroncutout, introncutoutinfo->autoicmaxmatrixsize, proteinexonpenal, out->showeops, out->comments, out->gs2out, translationtable, gen_seq_bounds, splice_site_model, dp_options_core, dp_options_postpro, protein_complete_path_matrix_jt, raw_chain->forward_jump_table, ref_offset, stat, out->outfp); } } else { /* the DP is called with the revers positions specifiers */ if (call_dna_dp) { rval = gth_align_dna(sa, used_chain->reverseranges, gth_input_current_gen_seq_tran_rc(input), gth_input_current_gen_seq_orig_rc(input), ref_seq_tran, ref_seq_orig, ref_total_length, gth_input_current_gen_alphabet(input), gth_input_current_ref_alphabet(input), useintroncutout, introncutoutinfo->autoicmaxmatrixsize, out->showeops, out->comments, out->gs2out, gen_seq_bounds_rc, splice_site_model, dp_options_core, dp_options_est, dp_options_postpro, dna_complete_path_matrix_jt, raw_chain->reverse_jump_table, ref_offset, stat, out->outfp); } else { /* call_protein_dp */ rval = gth_align_protein(sa, used_chain->reverseranges, gth_input_current_gen_seq_tran_rc(input), ref_seq_tran, ref_seq_orig, ref_total_length, gth_input_current_gen_alphabet(input), gth_input_current_ref_alphabet(input), input, useintroncutout, introncutoutinfo->autoicmaxmatrixsize, proteinexonpenal, out->showeops, out->comments, out->gs2out, translationtable, gen_seq_bounds, splice_site_model, dp_options_core, dp_options_postpro, protein_complete_path_matrix_jt, raw_chain->reverse_jump_table, ref_offset, stat, out->outfp); } } if (rval == GTH_ERROR_DP_PARAMETER_ALLOCATION_FAILED) return GTH_ERROR_DP_PARAMETER_ALLOCATION_FAILED; /* handling of special error codes ERROR_CUTOUT_NOT_IN_INTRON and ERROR_MATRIX_ALLOCATION_FAILED from DP the only possible special error code given back by this function is ERROR_SA_COULD_NOT_BE_DETERMINED */ #ifndef NDEBUG if (!useintroncutout) gt_assert(rval != GTH_ERROR_CUTOUT_NOT_IN_INTRON); #endif if (useintroncutout && rval == GTH_ERROR_CUTOUT_NOT_IN_INTRON) { /* the intron cutout technique failed -> increase counter */ gth_stat_increment_numofunsuccessfulintroncutoutDPs(stat); if (--iciterations > 0) { /* if an iterations is left, increase icdelta, decrease the remaining iterations, and continue the while-loop */ icdelta += introncutoutinfo->icdeltaincrease; continue; } else { /* no iteration left, discard SA */ gth_stat_increment_numofundeterminedSAs(stat); gth_chain_delete(actual_chain); gth_chain_delete(contracted_chain); return GTH_ERROR_SA_COULD_NOT_BE_DETERMINED; } } else if (rval == GTH_ERROR_MATRIX_ALLOCATION_FAILED) { if (introncutoutinfo->autoicmaxmatrixsize > 0 && !useintroncutout) { /* if the automatic intron cutout technique is enabled and a ``normal'' DP returned with the matrix allocation error, set useintroncutout, increase counter, and continue */ if (out->showverbose) { out->showverbose("matrix allocation failed, use intron cutout " "technique"); } gth_stat_increment_numofautointroncutoutcalls(stat); useintroncutout = true; continue; } else { /* otherwise increase relevant statistics, free space and return with error */ gth_stat_increment_numoffailedmatrixallocations(stat); gth_stat_increment_numofundeterminedSAs(stat); gth_chain_delete(actual_chain); gth_chain_delete(contracted_chain); return GTH_ERROR_SA_COULD_NOT_BE_DETERMINED; } } else if (rval) /* ``normal'' DP */ return -1; break; } #if 0 if (out->comments) { gt_file_xprintf(out->outfp, "%c this SA has been computed:\n", COMMENTCHAR); gth_sa_show(sa, input, out->outfp); } #endif /* free */ gth_chain_delete(actual_chain); gth_chain_delete(contracted_chain); return 0; } /* the following function saves by inserting it into and sets to true, if the insertion was successful */ static void save_sa(GthSACollection *sa_collection, GthSA *sa, GthSAFilter *sa_filter, GthMatchInfo *match_info, GthStat *stat) { if (!gth_sa_collection_insert_sa(sa_collection, sa, sa_filter, stat)) { /* unsuccessful insertion; discard sa */ gth_sa_delete(sa); match_info->call_number--; } else { /* else successful insertion */ match_info->significant_match_found = true; } } static bool isunsuccessfulalignment(GthSA *sa, bool comments, GtFile *outfp) { if (gth_sa_score(sa) <= UNSUCCESSFULALIGNMENTSCORE) { if (comments) gt_file_xprintf(outfp, "%c discard alignment\n", COMMENTCHAR); return true; } return false; } static int call_dna_DP(bool directmatches, GthCallInfo *call_info, GthInput *input, GthStat *stat, GthSACollection *sa_collection, GthSA *saA, unsigned long gen_file_num, unsigned long ref_file_num, unsigned long gen_total_length, unsigned long gen_offset, const GtRange *gen_seq_bounds, const GtRange *gen_seq_bounds_rc, unsigned long ref_total_length, unsigned long ref_offset, unsigned long chainctr, unsigned long num_of_chains, GthMatchInfo *match_info, const unsigned char *ref_seq_tran, const unsigned char *ref_seq_orig, const unsigned char *ref_seq_tran_rc, const unsigned char *ref_seq_orig_rc, GthChain *chain, GthDNACompletePathMatrixJT dna_complete_path_matrix_jt, GthProteinCompletePathMatrixJT protein_complete_path_matrix_jt) { int rval; bool bothstrandsanalyzed, firstdp = true, GT_UNUSED gs2outdirectmatches = directmatches; GthSA *saB = NULL; GtFile *outfp = call_info->out->outfp; if (directmatches ? gth_input_forward(input) : gth_input_reverse(input)) { /* calculate alignment */ rval = callsahmt(true, saA, directmatches, gen_file_num, ref_file_num, chain, gen_total_length, gen_offset, gen_seq_bounds, gen_seq_bounds_rc, ref_seq_tran, ref_seq_orig, ref_total_length, ref_offset, input, &call_info->simfilterparam.introncutoutinfo, stat, chainctr, num_of_chains, call_info->translationtable, directmatches, call_info->proteinexonpenal, call_info->splice_site_model, call_info->dp_options_core, call_info->dp_options_est, call_info->dp_options_postpro, dna_complete_path_matrix_jt, protein_complete_path_matrix_jt, call_info->out); if (rval && rval != GTH_ERROR_SA_COULD_NOT_BE_DETERMINED) { /* ^ this error is treated below */ return rval; } firstdp = false; bothstrandsanalyzed = gth_input_both(input); if (rval == GTH_ERROR_SA_COULD_NOT_BE_DETERMINED || isunsuccessfulalignment(saA, call_info->out->comments, outfp)) { match_info->call_number--; /* if the spliced alignment was unsuccessful, it is deleted and the next hit is considered. */ gth_sa_delete(saA); return 0; /* continue */ } /* if not both strands are analyzed, we can save this alignment now. Otherwise we have to calculate the alignment to the other strand first and then save the better one. */ if (!bothstrandsanalyzed) save_sa(sa_collection, saA, call_info->sa_filter, match_info, stat); } if (directmatches ? gth_input_reverse(input) : gth_input_forward(input)) { if ((firstdp || gth_sa_is_poor(saA, call_info->minaveragessp)) && !call_info->cdnaforwardonly) { if (firstdp) { /* space for first alignment is already allocated, bu we have to change the direction of the genomic and the reference strand */ gth_sa_set_gen_strand(saA, !directmatches); gth_sa_set_ref_strand(saA, false); } else { /* allocating space for second alignment */ saB = gth_sa_new_and_set(!directmatches, false, input, chain->gen_file_num, chain->gen_seq_num, chain->ref_file_num, chain->ref_seq_num, match_info->call_number, gen_total_length, gen_offset, ref_total_length); } /* setting gs2outdirectmatches (for compatibility) */ gs2outdirectmatches = (bool) !directmatches; /* calculate alignment */ rval = callsahmt(true, firstdp ? saA : saB, !directmatches, gen_file_num, ref_file_num, chain, gen_total_length, gen_offset, gen_seq_bounds, gen_seq_bounds_rc, ref_seq_tran_rc, ref_seq_orig_rc, ref_total_length, ref_offset, input, &call_info->simfilterparam.introncutoutinfo, stat, chainctr, num_of_chains, call_info->translationtable, directmatches, call_info->proteinexonpenal, call_info->splice_site_model, call_info->dp_options_core, call_info->dp_options_est, call_info->dp_options_postpro, dna_complete_path_matrix_jt, protein_complete_path_matrix_jt, call_info->out); if (rval && rval != GTH_ERROR_SA_COULD_NOT_BE_DETERMINED) { /* ^ this error is treated below */ return rval; } if (firstdp) { if (rval == GTH_ERROR_SA_COULD_NOT_BE_DETERMINED || isunsuccessfulalignment(saA, call_info->out->comments, outfp)) { /* for compatibility with GS2 */ /* XXX: makes no sense. Possibly only if -gs2out is used. */ match_info->significant_match_found= true; /* if the spliced alignment was unsuccessful, it is deleted and the next hit is considered. */ gth_sa_delete(saA); return 0; /* continue */ } save_sa(sa_collection, saA, call_info->sa_filter, match_info, stat); } else /* !firstdp */ { if (rval == GTH_ERROR_SA_COULD_NOT_BE_DETERMINED || isunsuccessfulalignment(saB, call_info->out->comments, outfp) || !gth_sa_B_is_better_than_A(saA, saB)) { /* insert first SA */ save_sa(sa_collection, saA, call_info->sa_filter, match_info, stat); /* discard second SA */ gth_sa_delete(saB); } else { /* insert second SA */ save_sa(sa_collection, saB, call_info->sa_filter, match_info, stat); /* free first SA */ gth_sa_delete(saA); } } } else save_sa(sa_collection, saA, call_info->sa_filter, match_info, stat); } return 0; } static int call_protein_DP(bool directmatches, GthCallInfo *call_info, GthInput *input, GthStat *stat, GthSACollection *sa_collection, GthSA *saA, unsigned long gen_file_num, unsigned long ref_file_num, unsigned long gen_total_length, unsigned long gen_offset, const GtRange *gen_seq_bounds, const GtRange *gen_seq_bounds_rc, unsigned long ref_total_length, unsigned long ref_offset, unsigned long chainctr, unsigned long num_of_chains, GthMatchInfo *match_info, const unsigned char *ref_seq_tran, const unsigned char *ref_seq_orig, GthChain *chain, GthDNACompletePathMatrixJT dna_complete_path_matrix_jt, GthProteinCompletePathMatrixJT protein_complete_path_matrix_jt) { GtFile *outfp = call_info->out->outfp; int rval; #ifndef NDEBUG /* strand is in searchmode */ if (directmatches) gt_assert(gth_input_forward(input)); else gt_assert(gth_input_reverse(input)); #endif /* calculate alignment */ rval = callsahmt(false, saA, directmatches, gen_file_num, ref_file_num, chain, gen_total_length, gen_offset, gen_seq_bounds, gen_seq_bounds_rc, ref_seq_tran, ref_seq_orig, ref_total_length, ref_offset, input, &call_info->simfilterparam.introncutoutinfo, stat, chainctr, num_of_chains, call_info->translationtable, directmatches, call_info->proteinexonpenal, call_info->splice_site_model, call_info->dp_options_core, call_info->dp_options_est, call_info->dp_options_postpro, dna_complete_path_matrix_jt, protein_complete_path_matrix_jt, call_info->out); if (rval && rval != GTH_ERROR_SA_COULD_NOT_BE_DETERMINED) { /* ^ this error is treated below */ return rval; } if (rval == GTH_ERROR_SA_COULD_NOT_BE_DETERMINED || isunsuccessfulalignment(saA, call_info->out->comments, outfp)) { match_info->call_number--; /* if the spliced alignment was unsuccessful, it is deleted and the next hit is considered. */ gth_sa_delete(saA); /* continue */ return 0; } /* we can save the alignment now */ save_sa(sa_collection, saA, call_info->sa_filter, match_info, stat); return 0; } static void show_no_match_line(GthAlphatype overallalphatype, GtFile *outfp) { gt_file_xprintf(outfp, "\nNo significant "); switch (overallalphatype) { case DNA_ALPHA: gt_file_xprintf(outfp, "EST"); break; case PROTEIN_ALPHA: gt_file_xprintf(outfp, "protein"); break; default: gt_assert(0); } gt_file_xprintf(outfp, " matches were found.\n"); } static GthChainCollection* match_and_chain(GthCallInfo *call_info, GthInput *input, GthStat *stat, unsigned long gen_file_num, unsigned long ref_file_num, bool directmatches, GthMatchInfo *match_info, const GthPlugins *plugins) { GtFile *outfp = call_info->out->outfp; GthChainCollection *chain_collection = gth_chain_collection_new(); /* compute the chains */ gth_chaining(chain_collection, gen_file_num, ref_file_num, call_info, input, stat, directmatches, plugins); /* update statistics */ gth_stat_increase_numofchains(stat, gth_chain_collection_size(chain_collection)); /* stop after chaining phase */ if (call_info->simfilterparam.stopafterchaining) { gth_chain_collection_delete(chain_collection); return NULL; } if (call_info->out->showverbose) call_info->out->showverbose("calculate spliced alignment for every chain"); if (!gth_chain_collection_size(chain_collection)) { /* no matches found -> return */ if (!call_info->out->xmlout && !call_info->out->gff3out && !directmatches && !match_info->significant_match_found) { show_no_match_line(gth_input_get_alphatype(input, ref_file_num), outfp); } gth_chain_collection_delete(chain_collection); return NULL; } return chain_collection; } static int calc_spliced_alignments(GthSACollection *sa_collection, GthChainCollection *chain_collection, GthCallInfo *call_info, GthInput *input, GthStat *stat, unsigned long gen_file_num, unsigned long ref_file_num, bool directmatches, GthMatchInfo *match_info, GthDNACompletePathMatrixJT dna_complete_path_matrix_jt, GthProteinCompletePathMatrixJT protein_complete_path_matrix_jt) { const unsigned char *ref_seq_tran, *ref_seq_orig, *ref_seq_tran_rc = NULL, *ref_seq_orig_rc = NULL; unsigned long chainctr, gen_offset = GT_UNDEF_ULONG, gen_total_length, ref_total_length; GtFile *outfp = call_info->out->outfp; GtRange gen_seq_bounds, gen_seq_bounds_rc; bool refseqisdna; GthChain *chain; GtRange range; GthSA *saA; int rval; gt_assert(sa_collection && chain_collection); refseqisdna = gth_input_ref_file_is_dna(input, ref_file_num); for (chainctr = 0; chainctr < gth_chain_collection_size(chain_collection); chainctr++) { chain = gth_chain_collection_get(chain_collection, chainctr); if (++match_info->call_number > call_info->firstalshown && call_info->firstalshown > 0) { if (!(call_info->out->xmlout || call_info->out->gff3out)) gt_file_xfputc('\n', outfp); else if (call_info->out->xmlout) gt_file_xprintf(outfp, "\n"); match_info->max_call_number_reached = true; break; /* break out of loop */ } /* compute considered genomic regions if not set by -frompos */ if (!gth_input_use_substring_spec(input)) { gen_seq_bounds = gth_input_get_genomic_range(input, chain->gen_file_num, chain->gen_seq_num); gen_total_length = gt_range_length(&gen_seq_bounds); gen_offset = gen_seq_bounds.start; gen_seq_bounds_rc = gen_seq_bounds; } else { /* genomic multiseq contains exactly one sequence */ gt_assert(gth_input_num_of_gen_seqs(input, chain->gen_file_num) == 1); gen_total_length = gth_input_genomic_file_total_length(input, chain ->gen_file_num); gen_seq_bounds.start = gth_input_genomic_substring_from(input); gen_seq_bounds.end = gth_input_genomic_substring_to(input); gen_offset = 0; gen_seq_bounds_rc.start = gen_total_length - 1 - gen_seq_bounds.end; gen_seq_bounds_rc.end = gen_total_length - 1 - gen_seq_bounds.start; } /* "retrieving" the reference sequence */ range = gth_input_get_reference_range(input, chain->ref_file_num, chain->ref_seq_num); ref_seq_tran = gth_input_current_ref_seq_tran(input) + range.start; ref_seq_orig = gth_input_current_ref_seq_orig(input) + range.start; if (refseqisdna) { ref_seq_tran_rc = gth_input_current_ref_seq_tran_rc(input) + range.start; ref_seq_orig_rc = gth_input_current_ref_seq_orig_rc(input) + range.start; } ref_total_length = range.end - range.start + 1; /* check if protein sequences have a stop amino acid */ if (!refseqisdna && !match_info->stop_amino_acid_warning && ref_seq_orig[ref_total_length - 1] != GT_STOP_AMINO) { GtStr *ref_id = gt_str_new(); gth_input_save_ref_id(input, ref_id, chain->ref_file_num, chain->ref_seq_num); gt_warning("protein sequence '%s' (#%lu in file %s) does not end with a " "stop amino acid ('%c'). If it is not a protein fragment you " "should add a stop amino acid to improve the prediction. " "For example with `gt seqtransform -addstopaminos` (see " "http://genometools.org for details).", gt_str_get(ref_id), chain->ref_seq_num, gth_input_get_reference_filename(input, chain->ref_file_num), GT_STOP_AMINO); match_info->stop_amino_acid_warning = true; gt_str_delete(ref_id); } /* allocating space for alignment */ saA = gth_sa_new_and_set(directmatches, true, input, chain->gen_file_num, chain->gen_seq_num, chain->ref_file_num, chain->ref_seq_num, match_info->call_number, gen_total_length, gen_offset, ref_total_length); /* extend the DP borders to the left and to the right */ gth_chain_extend_borders(chain, &gen_seq_bounds, &gen_seq_bounds_rc, gen_total_length, gen_offset); /* From here on the dp positions always refer to the forward strand of the genomic DNA. */ /* call the Dynamic Programming */ if (refseqisdna) { rval = call_dna_DP(directmatches, call_info, input, stat, sa_collection, saA, gen_file_num, ref_file_num, gen_total_length, gen_offset, &gen_seq_bounds, &gen_seq_bounds_rc, ref_total_length, range.start, chainctr, gth_chain_collection_size(chain_collection), match_info, ref_seq_tran, ref_seq_orig, ref_seq_tran_rc, ref_seq_orig_rc, chain, dna_complete_path_matrix_jt, protein_complete_path_matrix_jt); } else { rval = call_protein_DP(directmatches, call_info, input, stat, sa_collection, saA, gen_file_num, ref_file_num, gen_total_length, gen_offset, &gen_seq_bounds, &gen_seq_bounds_rc, ref_total_length, range.start, chainctr, gth_chain_collection_size(chain_collection), match_info, ref_seq_tran, ref_seq_orig, chain, dna_complete_path_matrix_jt, protein_complete_path_matrix_jt); } /* check return value */ if (rval == GTH_ERROR_DP_PARAMETER_ALLOCATION_FAILED) { /* statistics bookkeeping */ gth_stat_increment_numoffailedDPparameterallocations(stat); gth_stat_increment_numofundeterminedSAs(stat); /* free space */ gth_sa_delete(saA); match_info->call_number--; continue; /* continue with the next DP range */ } else if (rval) return -1; } if (!call_info->out->xmlout && !call_info->out->gff3out && !directmatches && !match_info->significant_match_found && match_info->call_number <= call_info->firstalshown) { show_no_match_line(gth_input_get_alphatype(input, ref_file_num), outfp); } return 0; } static void show_compute_matches_status(bool direct, GthShowVerbose showverbose, unsigned long gen_file_num, unsigned long num_of_gen_files, unsigned long ref_file_num, unsigned long num_of_ref_files) { char buf[SHOW_COMPUTE_MATCHES_STATUS_BUF_SIZE]; GT_UNUSED int rval; gt_assert(num_of_gen_files && num_of_ref_files ); if (num_of_gen_files == 1 && num_of_ref_files == 1) { if (direct) showverbose("compute direct matches"); else showverbose("compute palindromic matches"); } else { if (direct) { rval = snprintf(buf, SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE, "compute direct matches for genomic file (gf) %lu/%lu " "and reference file (rf) %lu/%lu", gen_file_num + 1, num_of_gen_files, ref_file_num + 1, num_of_ref_files); } else { rval = snprintf(buf, SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE, "compute palindromic matches for genomic file (gf) " "%lu/%lu and reference file (rf) %lu/%lu", gen_file_num + 1, num_of_gen_files, ref_file_num + 1, num_of_ref_files); } /* buf[SHOW_COMPUTE_MATCHES_STATUS_BUF_SIZE] is large enough */ gt_assert(rval < SHOW_MATRIX_CALCULATION_STATUS_BUF_SIZE); showverbose(buf); } } static int compute_sa_collection(GthSACollection *sa_collection, GthCallInfo *call_info, GthInput *input, GthStat *stat, const GthPlugins *plugins) { GthChainCollection *chain_collection; GthMatchInfo match_info; unsigned long g, r; int rval = 0; match_info.call_number = 0; match_info.significant_match_found = false; match_info.max_call_number_reached = false; match_info.stop_amino_acid_warning = false; for (g = 0; g < gth_input_num_of_gen_files(input); g++) { for (r = 0; r < gth_input_num_of_ref_files(input); r++) { if (gth_input_get_alphatype(input, r) == DNA_ALPHA || gth_input_forward(input)) { if (call_info->out->showverbose) { show_compute_matches_status(true, call_info->out->showverbose, g, gth_input_num_of_gen_files(input), r, gth_input_num_of_ref_files(input)); } /* compute direct matches */ chain_collection = match_and_chain(call_info, input, stat, g, r, true, &match_info, plugins); if (chain_collection) { rval = calc_spliced_alignments(sa_collection, chain_collection, call_info, input, stat, g, r, true, &match_info, plugins->dna_complete_path_matrix_jt, plugins ->protein_complete_path_matrix_jt); gth_chain_collection_delete(chain_collection); if (rval) break; } } if (match_info.max_call_number_reached) break; if (gth_input_get_alphatype(input, r) == DNA_ALPHA || gth_input_reverse(input)) { if (call_info->out->showverbose) { show_compute_matches_status(false, call_info->out->showverbose, g, gth_input_num_of_gen_files(input), r, gth_input_num_of_ref_files(input)); } /* compute reverse complemented (palindromic) matches */ chain_collection = match_and_chain(call_info, input, stat, g, r, false, &match_info, plugins); if (chain_collection) { rval = calc_spliced_alignments(sa_collection, chain_collection, call_info, input, stat, g, r, false, &match_info, plugins->dna_complete_path_matrix_jt, plugins ->protein_complete_path_matrix_jt); gth_chain_collection_delete(chain_collection); if (rval) break; } if (match_info.max_call_number_reached) break; } } } return rval; } int gth_similarity_filter(GthCallInfo *call_info, GthInput *input, GthStat *stat, unsigned int indentlevel, const GthPlugins *plugins, GT_UNUSED GtError *err) { GthSACollection *sa_collection; /* stores the calculated spliced alignments */ gt_error_check(err); /* initialization */ sa_collection = gth_sa_collection_new(call_info->duplicate_check); /* compute the spliced alignments */ if (compute_sa_collection(sa_collection, call_info, input, stat, plugins)) { gth_sa_collection_delete(sa_collection); return -1; } /* process the alignments */ gth_proc_sa_collection(sa_collection, call_info, input, stat, indentlevel); /* show XML trailer */ if (call_info->out->xmlout) { gth_xml_show_trailer(call_info->intermediate, call_info->out->outfp); } /* output statistics */ if (!call_info->out->gff3out) gth_stat_show(stat, true, call_info->out->xmlout, call_info->out->outfp); #ifndef NDEBUG if (call_info->intermediate && call_info->out->outputfile) { /* intermediate output equals tree of alignments */ gt_assert(gth_intermediate_output_is_correct(call_info->out->outputfile, sa_collection, input, &call_info->out->outfp, err)); } #endif /* free spliced alignment collection */ gth_sa_collection_delete(sa_collection); return 0; } genometools-1.5.1/src/gth/similarity_filter.h000066400000000000000000000022031211610345200213160ustar00rootroot00000000000000/* Copyright (c) 2003-2009 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SIMILARITY_FILTER_H #define SIMILARITY_FILTER_H #include "gth/plugins.h" #include "gth/stat.h" int gth_similarity_filter(GthCallInfo*, GthInput*, GthStat*, unsigned int indentlevel, const GthPlugins *plugins, GtError*); #endif genometools-1.5.1/src/gth/splice_site_model.c000066400000000000000000000101571211610345200212500ustar00rootroot00000000000000/* Copyright (c) 2005-2010 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma_api.h" #include "gth/default.h" #include "gth/bssm_param.h" #include "gth/splice_site_model_rep.h" #define SET_PROB_VALUE(V, PROB) \ ssm->V = PROB; \ ssm->log_##V = (GthFlt) log(PROB); \ ssm->log1minus_##V = (GthFlt) log(1.0 - (PROB)) GthSpliceSiteModel* gth_splice_site_model_new(void) { GthSpliceSiteModel *ssm = gt_malloc(sizeof *ssm); ssm->useU12intronmodel = !GTH_DEFAULT_DISABLEU12INTRONMODEL; SET_PROB_VALUE(genericGTdonorprob, GTH_DEFAULT_GENERIC_GT_DONORPROB); SET_PROB_VALUE(nongenericGTdonorprob, GTH_DEFAULT_NONGENERIC_GT_DONORPROB); SET_PROB_VALUE(genericGCdonorprob, GTH_DEFAULT_GENERIC_GC_DONORPROB); SET_PROB_VALUE(nongenericGCdonorprob, GTH_DEFAULT_NONGENERIC_GC_DONORPROB); SET_PROB_VALUE(genericATdonorprob, GTH_DEFAULT_GENERIC_AT_DONORPROB); SET_PROB_VALUE(nongenericATdonorprob, GTH_DEFAULT_NONGENERIC_AT_DONORPROB); SET_PROB_VALUE(genericAGacceptorprob, GTH_DEFAULT_GENERIC_AG_ACCEPTORPROB); SET_PROB_VALUE(nongenericAGacceptorprob, GTH_DEFAULT_NONGENERIC_AG_ACCEPTORPROB); SET_PROB_VALUE(genericACacceptorprob, GTH_DEFAULT_GENERIC_AC_ACCEPTORPROB); SET_PROB_VALUE(nongenericACacceptorprob, GTH_DEFAULT_NONGENERIC_AC_ACCEPTORPROB); SET_PROB_VALUE(genericothersplicesitep, GTH_DEFAULT_GENERIC_OTHERSPLICESITEPROB); SET_PROB_VALUE(nongenericothersplicesitep, GTH_DEFAULT_NONGENERIC_OTHERSPLICESITEPROB); gth_splice_site_model_set_U12typedonorprob(ssm, GTH_DEFAULT_U12_TYPEDONORPROB); gth_splice_site_model_set_U12typedonorprob_one_mismatch(ssm, GTH_DEFAULT_U12_TYPEDONORPROBONEMISMATCH); ssm->bssm_param = NULL; return ssm; } void gth_splice_site_model_delete(GthSpliceSiteModel *ssm) { if (!ssm) return; gth_bssm_param_delete(ssm->bssm_param); gt_free(ssm); } int gth_splice_site_model_load_bssm(GthSpliceSiteModel *ssm, const char *bssmfile, GtError *err) { GtStr *bssmfilename; int had_err = 0; gt_error_check(err); gt_assert(ssm && bssmfile && strlen(bssmfile)); if (ssm->bssm_param) { gth_bssm_param_delete(ssm->bssm_param); ssm->bssm_param = NULL; } bssmfilename = gt_str_new(); gt_str_append_cstr(bssmfilename, bssmfile); gt_str_append_char(bssmfilename, '.'); gt_str_append_cstr(bssmfilename, BSSMFILEENDING); if (!(ssm->bssm_param = gth_bssm_param_load(gt_str_get(bssmfilename), err))) had_err = -1; gt_str_delete(bssmfilename); return had_err; } void gth_splice_site_model_U12intronmodel_set_usage(GthSpliceSiteModel *ssm, bool useU12intronmodel) { ssm->useU12intronmodel = useU12intronmodel; } void gth_splice_site_model_set_U12typedonorprob(GthSpliceSiteModel *ssm, GthFlt prob) { SET_PROB_VALUE(U12typedonorprob, prob); } void gth_splice_site_model_set_U12typedonorprob_one_mismatch(GthSpliceSiteModel *ssm, GthFlt prob) { SET_PROB_VALUE(U12typedonorprobonemismatch, prob); } genometools-1.5.1/src/gth/splice_site_model.h000066400000000000000000000037651211610345200212640ustar00rootroot00000000000000/* Copyright (c) 2005-2009 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SPLICE_SITE_MODEL_H #define SPLICE_SITE_MODEL_H #include "core/error.h" /* generic splice site model */ typedef struct GthSpliceSiteModel GthSpliceSiteModel; GthSpliceSiteModel* gth_splice_site_model_new(void); void gth_splice_site_model_delete(GthSpliceSiteModel*); int gth_splice_site_model_load_bssm(GthSpliceSiteModel*, const char *bssmfile, GtError*); void gth_splice_site_model_U12intronmodel_set_usage( GthSpliceSiteModel*, bool useU12intronmodel); void gth_splice_site_model_set_U12typedonorprob( GthSpliceSiteModel*, GthFlt prob); void gth_splice_site_model_set_U12typedonorprob_one_mismatch( GthSpliceSiteModel*, GthFlt prob); #endif genometools-1.5.1/src/gth/splice_site_model_rep.h000066400000000000000000000066261211610345200221310ustar00rootroot00000000000000/* Copyright (c) 2005-2009 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SPLICE_SITE_MODEL_REP_H #define SPLICE_SITE_MODEL_REP_H #include "gth/splice_site_model.h" struct GthSpliceSiteModel { /* the probabilities */ GthFlt genericGTdonorprob, /* generic prob. of GT donor */ nongenericGTdonorprob, /* non-generic prob. of GT donor */ genericGCdonorprob, /* generic prob. of GC donor */ nongenericGCdonorprob, /* non-generic prob. of GC donor */ genericATdonorprob, /* generic prob. of AT donor */ nongenericATdonorprob, /* non-generic prob. of AT donor */ genericAGacceptorprob, /* generic prob. of AG acceptor */ nongenericAGacceptorprob, /* non-generic prob. of AG acceptor */ genericACacceptorprob, /* generic prob. of AC acceptor */ nongenericACacceptorprob, /* non-generic prob. of AC acceptor */ genericothersplicesitep, /* generic prob. of other sp. sites */ nongenericothersplicesitep; /* non-generic prob. of other sp. sites */ bool useU12intronmodel; /* enable U12 intron model */ GthFlt U12typedonorprob, /* prob. of U12-type donor */ U12typedonorprobonemismatch; /* prob. of U12-type donor with 1 mismatch */ /* the precomputed log values */ GthFlt log_genericGTdonorprob, log1minus_genericGTdonorprob, log_nongenericGTdonorprob, log1minus_nongenericGTdonorprob, log_genericGCdonorprob, log1minus_genericGCdonorprob, log_nongenericGCdonorprob, log1minus_nongenericGCdonorprob, log_genericATdonorprob, log1minus_genericATdonorprob, log_nongenericATdonorprob, log1minus_nongenericATdonorprob, log_genericAGacceptorprob, log1minus_genericAGacceptorprob, log_nongenericAGacceptorprob, log1minus_nongenericAGacceptorprob, log_genericACacceptorprob, log1minus_genericACacceptorprob, log_nongenericACacceptorprob, log1minus_nongenericACacceptorprob, log_genericothersplicesitep, log1minus_genericothersplicesitep, log_nongenericothersplicesitep, log1minus_nongenericothersplicesitep, log_U12typedonorprob, log1minus_U12typedonorprob, log_U12typedonorprobonemismatch, log1minus_U12typedonorprobonemismatch; GthBSSMParam *bssm_param; /* contains bssm parameters or is NULL, if generic parameters are used. */ }; #endif genometools-1.5.1/src/gth/spliced_seq.c000066400000000000000000000132771211610345200200660ustar00rootroot00000000000000/* Copyright (c) 2004-2009 Gordon Gremme Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/range.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "gth/gthoutput.h" #include "gth/spliced_seq.h" static void fillsplicedseq(unsigned char *splicedseq, const unsigned char *origseq, GtArray *ranges) { const unsigned char *genomicptr; unsigned long i; gt_assert(ranges); for (i = 0; i < gt_array_size(ranges); i++) { for (genomicptr = origseq + ((GtRange*) gt_array_get(ranges, i))->start; genomicptr <= origseq + ((GtRange*) gt_array_get(ranges, i))->end; *splicedseq++ = *genomicptr++); } } static void computepositionmapping(unsigned long *positionmapping, GtArray *ranges, GT_UNUSED unsigned long splicedseqlen) { unsigned long i, rangecounter, templatepos = 0; for (rangecounter = 0; rangecounter < gt_array_size(ranges); rangecounter++) { for (i = ((GtRange*) gt_array_get(ranges, rangecounter))->start; i <= ((GtRange*) gt_array_get(ranges, rangecounter))->end; i++) { positionmapping[templatepos++] = i; } } gt_assert(templatepos == splicedseqlen); } GthSplicedSeq* gth_spliced_seq_new(const unsigned char *sequence, GtArray *ranges) { GthSplicedSeq *spliced_seq = gt_malloc(sizeof *spliced_seq); gt_assert(sequence && ranges); spliced_seq->origseq = sequence; spliced_seq->ranges = ranges; gt_assert(gt_ranges_are_consecutive(ranges)); /* save total length of ranges */ spliced_seq->splicedseqlen = gt_ranges_total_length(ranges); /* allocate space */ spliced_seq->splicedseq = gt_malloc(sizeof (unsigned char) * spliced_seq->splicedseqlen); spliced_seq->positionmapping = gt_malloc(sizeof (unsigned long) * spliced_seq->splicedseqlen); /* processing */ fillsplicedseq(spliced_seq->splicedseq, spliced_seq->origseq, spliced_seq->ranges); /* compute position mapping */ computepositionmapping(spliced_seq->positionmapping, spliced_seq->ranges, spliced_seq->splicedseqlen); return spliced_seq; } GthSplicedSeq* gth_spliced_seq_new_with_comments(const unsigned char *sequence, GtArray *ranges, bool comments, GtFile *outfp) { GthSplicedSeq *spliced_seq; gt_assert(sequence && ranges); spliced_seq = gth_spliced_seq_new(sequence, ranges); gt_assert(spliced_seq); if (comments) { double fraction = ((double) spliced_seq->splicedseqlen / (double) gt_ranges_spanned_length(ranges)) * 100.0; /* fraction is valid percent value */ gt_assert(fraction >= 0.0 && fraction <= 100.0); gt_file_xprintf(outfp, "%c spliced sequence is %.2f%% of original sequence\n", COMMENTCHAR, fraction); } return spliced_seq; } void gth_spliced_seq_delete(GthSplicedSeq *spliced_seq) { if (!spliced_seq) return; gt_free(spliced_seq->splicedseq); gt_free(spliced_seq->positionmapping); gt_free(spliced_seq); } bool gth_spliced_seq_pos_is_border(const GthSplicedSeq *spliced_seq, unsigned long position) { gt_assert(spliced_seq); /* position is legal */ gt_assert(position < spliced_seq->splicedseqlen); if ((position + 1 < spliced_seq->splicedseqlen) && (spliced_seq->positionmapping[position] + 1 != spliced_seq->positionmapping[position+1])) { return true; } return false; } unsigned long gth_spliced_seq_border_length(const GthSplicedSeq *spliced_seq, unsigned long position) { gt_assert(gth_spliced_seq_pos_is_border(spliced_seq, position)); return spliced_seq->positionmapping[position+1] - spliced_seq->positionmapping[position] - 1; } unsigned long gth_spliced_seq_num_of_borders(const GthSplicedSeq *spliced_seq) { unsigned long i, borders = 0; gt_assert(spliced_seq); for (i = 0; i < spliced_seq->splicedseqlen; i++) { if (gth_spliced_seq_pos_is_border(spliced_seq, i)) borders++; } return borders; } static int cmpulong(const void *u1, const void *u2) { return *(unsigned long*) u1 - *(unsigned long*) u2; } unsigned long gth_spliced_seq_orig_to_spliced_pos(const GthSplicedSeq *spliced_seq, unsigned long orig_pos) { unsigned long *splicedposptr ; gt_assert(spliced_seq); splicedposptr = bsearch(&orig_pos, spliced_seq->positionmapping, spliced_seq->splicedseqlen, sizeof (unsigned long), cmpulong); if (splicedposptr) return splicedposptr - spliced_seq->positionmapping; return GT_UNDEF_ULONG; } genometools-1.5.1/src/gth/spliced_seq.h000066400000000000000000000050431211610345200200630ustar00rootroot00000000000000/* Copyright (c) 2004-2009 Gordon Gremme Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SPLICED_SEQ_H #define SPLICED_SEQ_H #include "core/array_api.h" #include "core/file.h" typedef struct { GtArray *ranges; /* the ranges of the genomic sequence which have been used for processing */ const unsigned char *origseq; /* the original sequence */ unsigned char *splicedseq;/* the processed sequence */ unsigned long splicedseqlen, /* the length of the processed sequence */ *positionmapping; /* maps the positions on the spliced sequence back to the original sequence */ } GthSplicedSeq; GthSplicedSeq* gth_spliced_seq_new(const unsigned char *sequence, GtArray *ranges); GthSplicedSeq* gth_spliced_seq_new_with_comments(const unsigned char *sequence, GtArray *ranges, bool comments, GtFile *outfp); void gth_spliced_seq_delete(GthSplicedSeq*); bool gth_spliced_seq_pos_is_border(const GthSplicedSeq*, unsigned long position); unsigned long gth_spliced_seq_border_length(const GthSplicedSeq*, unsigned long position); unsigned long gth_spliced_seq_num_of_borders(const GthSplicedSeq*); /* The following function computes the spliced sequence position of a given original position of a position mapping of length via binary search. */ unsigned long gth_spliced_seq_orig_to_spliced_pos(const GthSplicedSeq*, unsigned long orig_pos); #endif genometools-1.5.1/src/gth/stat.c000066400000000000000000000367271211610345200165530ustar00rootroot00000000000000/* Copyright (c) 2004-2010 Gordon Gremme Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma_api.h" #include "core/safearith.h" #include "gth/default.h" #include "gth/gthoutput.h" #include "gth/time.h" #include "gth/stat.h" #define INFOCHAR\ if (!stat->gthfilestat_mode) { \ gt_file_xprintf(outfp, "%c ", COMMENTCHAR); \ } struct GthStat { bool exondistri, /* compute/output exon length distribution */ introndistri, /* compute/output intron length distribution */ matchnumdistri, /* compute/output match number distribution */ refseqcovdistri, /* compute/output reference sequence coverage distribution */ sa_stats, /* compute/output spliced alignment statistics (e.g., alignment score and coverage distributions) */ gthfilestat_mode; /* modify output for gthfilestat */ unsigned long numofchains, /* total number of computed chains */ numofremovedzerobaseexons, /* see function replacezerobaseexons() for explanation */ numofautointroncutoutcalls, /* number of times when the intron cutout technique was used automatically */ numofunsuccessfulintroncutoutDPs, /* corresponds to ERROR_CUTOUT_NOT_IN_INTRON */ numoffailedDPparameterallocations,/* correspoinds to ERROR_DP_PARAMETER_ALLOCATION_FAILED */ numoffailedmatrixallocations, /* corresponds to ERROR_MATRIX_ALLOCATION_FAILED */ numofundeterminedSAs, /* corresponds to ERROR_SA_COULD_NOT_BE_DETERMINED */ numoffilteredpolyAtailmatches, /* the number of filtered out matches which represent a matching poly(A) tail */ /* memory statistics */ numofSAs, /* number of computed SAs */ numofPGLs_stored, /* number of stored PGLs */ totalsizeofbacktracematricesinMB, numofbacktracematrixallocations; /* distributions */ GtDiscDistri *exondistribution, *introndistribution, *matchnumdistribution, *refseqcoveragedistribution, *sa_alignment_score_distribution, *sa_coverage_distribution; }; GthStat *gth_stat_new(void) { GthStat *stat; stat = gt_malloc(sizeof (GthStat)); stat->exondistri = GTH_DEFAULT_EXONDISTRI; stat->introndistri = GTH_DEFAULT_INTRONDISTRI; stat->matchnumdistri = GTH_DEFAULT_MATCHNUMDISTRI; stat->refseqcovdistri = GTH_DEFAULT_REFSEQCOVDISTRI; stat->sa_stats = false; stat->gthfilestat_mode = false; stat->numofchains = 0; stat->numofremovedzerobaseexons = 0; stat->numofautointroncutoutcalls = 0; stat->numofunsuccessfulintroncutoutDPs = 0; stat->numoffailedDPparameterallocations = 0; stat->numoffailedmatrixallocations = 0; stat->numofundeterminedSAs = 0; stat->numoffilteredpolyAtailmatches = 0; /* init variables for memory statistics */ stat->numofSAs = 0; stat->numofPGLs_stored = 0; stat->totalsizeofbacktracematricesinMB = 0; stat->numofbacktracematrixallocations = 0; /* init distributions */ stat->exondistribution = gt_disc_distri_new(); stat->introndistribution = gt_disc_distri_new(); stat->matchnumdistribution = gt_disc_distri_new(); stat->refseqcoveragedistribution = gt_disc_distri_new(); stat->sa_alignment_score_distribution = gt_disc_distri_new(); stat->sa_coverage_distribution = gt_disc_distri_new(); return stat; } void gth_stat_enable_exondistri(GthStat *stat) { gt_assert(stat); stat->exondistri = true; } void gth_stat_enable_introndistri(GthStat *stat) { gt_assert(stat); stat->introndistri= true; } void gth_stat_enable_matchnumdistri(GthStat *stat) { gt_assert(stat); stat->matchnumdistri = true; } void gth_stat_enable_refseqcovdistri(GthStat *stat) { gt_assert(stat); stat->refseqcovdistri = true; } void gth_stat_enable_sa_stats(GthStat *stat) { gt_assert(stat); stat->sa_stats = true; } void gth_stat_enable_gthfilestat_mode(GthStat *stat) { gt_assert(stat); stat->gthfilestat_mode= true; } void gth_stat_increment_numofunsuccessfulintroncutoutDPs(GthStat *stat) { gt_assert(stat); stat->numofunsuccessfulintroncutoutDPs++; } void gth_stat_increment_numofundeterminedSAs(GthStat *stat) { gt_assert(stat); stat->numofundeterminedSAs++; } void gth_stat_increment_numofautointroncutoutcalls(GthStat *stat) { gt_assert(stat); stat->numofautointroncutoutcalls++; } void gth_stat_increment_numoffailedmatrixallocations(GthStat *stat) { gt_assert(stat); stat->numoffailedmatrixallocations++; } void gth_stat_increment_numoffailedDPparameterallocations(GthStat *stat) { gt_assert(stat); stat->numoffailedDPparameterallocations++; } void gth_stat_increment_numofbacktracematrixallocations(GthStat *stat) { gt_assert(stat); stat->numofbacktracematrixallocations++; } void gth_stat_increment_numofremovedzerobaseexons(GthStat *stat) { gt_assert(stat); stat->numofremovedzerobaseexons++; } void gth_stat_increment_numofSAs(GthStat *stat) { gt_assert(stat); stat->numofSAs++; } void gth_stat_increase_numofchains(GthStat *stat, unsigned long addend) { gt_assert(stat); stat->numofchains += addend; } void gth_stat_increase_totalsizeofbacktracematricesinMB(GthStat *stat, unsigned long addend) { gt_assert(stat); gt_safe_add(stat->totalsizeofbacktracematricesinMB, stat->totalsizeofbacktracematricesinMB, addend); } void gth_stat_increase_numofPGLs_stored(GthStat *stat, unsigned long addend) { gt_assert(stat); stat->numofPGLs_stored += addend; } unsigned long gth_stat_get_numofSAs(GthStat *stat) { gt_assert(stat); return stat->numofSAs; } bool gth_stat_get_exondistri(GthStat *stat) { gt_assert(stat); return stat->exondistri; } bool gth_stat_get_introndistri(GthStat *stat) { gt_assert(stat); return stat->introndistri; } GtDiscDistri* gth_stat_get_exondistribution(GthStat *stat) { gt_assert(stat); return stat->exondistribution; } GtDiscDistri* gth_stat_get_introndistribution(GthStat *stat) { gt_assert(stat); return stat->introndistribution; } bool gth_stat_get_matchnumdistri(GthStat *stat) { gt_assert(stat); return stat->matchnumdistri; } bool gth_stat_get_refseqcovdistri(GthStat *stat) { gt_assert(stat); return stat->refseqcovdistri; } void gth_stat_add_to_matchnumdistri(GthStat *stat, unsigned long data) { gt_assert(stat); if (stat->matchnumdistri) gt_disc_distri_add(stat->matchnumdistribution, data); } void gth_stat_add_to_refseqcovdistri(GthStat *stat, unsigned long data) { gt_assert(stat); if (stat->refseqcovdistri) gt_disc_distri_add(stat->refseqcoveragedistribution, data); } void gth_stat_add_to_sa_alignment_score_distri(GthStat *stat, unsigned long data) { gt_assert(stat); if (stat->sa_stats) gt_disc_distri_add(stat->sa_alignment_score_distribution, data); } void gth_stat_add_to_sa_coverage_distri(GthStat *stat, unsigned long data) { gt_assert(stat); if (stat->sa_stats) gt_disc_distri_add(stat->sa_coverage_distribution, data); } static void outputgeneralstatistics(GthStat *stat, bool show_full_stats, GtFile *outfp) { gt_assert(stat); if (show_full_stats) { gt_file_xprintf(outfp, "%c general statistics:\n", COMMENTCHAR); switch (stat->numofchains) { case 0: gt_file_xprintf(outfp, "%c no chain has been computed\n", COMMENTCHAR); break; case 1: gt_file_xprintf(outfp, "%c 1 chain has been computed\n", COMMENTCHAR); break; default: gt_file_xprintf(outfp, "%c %lu chains have been computed\n", COMMENTCHAR, stat->numofchains); } } } static void outputmemorystatistics(GthStat *stat, bool show_full_stats, GtFile *outfp) { gt_assert(stat); /* SA memory statistics */ INFOCHAR; gt_file_xprintf(outfp, "memory statistics:\n"); INFOCHAR; gt_file_xprintf(outfp, "%lu spliced alignments have been stored\n", stat->numofSAs); /* PGL memory statistics */ INFOCHAR; gt_file_xprintf(outfp, "%lu predicted gene locations have been stored\n", stat->numofPGLs_stored); /* DP memory statistics */ if (show_full_stats) { gt_file_xprintf(outfp, "%c %lu megabytes was the average size of the backtrace matrix\n", COMMENTCHAR, (stat->numofbacktracematrixallocations > 0 ? stat->totalsizeofbacktracematricesinMB / stat->numofbacktracematrixallocations : 0)); switch (stat->numofbacktracematrixallocations) { case 0: gt_file_xprintf(outfp, "%c no backtrace matrix has been allocated\n", COMMENTCHAR); break; case 1: gt_file_xprintf(outfp, "%c 1 backtrace matrix has been allocated\n", COMMENTCHAR); break; default: gt_file_xprintf(outfp,"%c %lu backtrace matrices have been " "allocated\n", COMMENTCHAR, stat->numofbacktracematrixallocations); } } } void gth_stat_show(GthStat *stat, bool show_full_stats, bool xmlout, GtFile *outfp) { char *timestring; gt_assert(stat); /* begin XML comment */ if (xmlout) gt_file_xprintf(outfp, "\n"); } void gth_stat_delete(GthStat *stat) { if (!stat) return; gt_disc_distri_delete(stat->exondistribution); gt_disc_distri_delete(stat->introndistribution); gt_disc_distri_delete(stat->matchnumdistribution); gt_disc_distri_delete(stat->refseqcoveragedistribution); gt_disc_distri_delete(stat->sa_alignment_score_distribution); gt_disc_distri_delete(stat->sa_coverage_distribution); gt_free(stat); } genometools-1.5.1/src/gth/stat.h000066400000000000000000000061521211610345200165450ustar00rootroot00000000000000/* Copyright (c) 2004-2009 Gordon Gremme Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef STAT_H #define STAT_H #include #include "core/disc_distri_api.h" #include "core/error.h" /* stores all kinds of gth related statistical information */ typedef struct GthStat GthStat; GthStat* gth_stat_new(void); void gth_stat_enable_exondistri(GthStat*); void gth_stat_enable_introndistri(GthStat*); void gth_stat_enable_matchnumdistri(GthStat*); void gth_stat_enable_refseqcovdistri(GthStat*); void gth_stat_enable_sa_stats(GthStat*); void gth_stat_enable_gthfilestat_mode(GthStat*); void gth_stat_increment_numofunsuccessfulintroncutoutDPs(GthStat*); void gth_stat_increment_numofundeterminedSAs(GthStat*); void gth_stat_increment_numofautointroncutoutcalls(GthStat*); void gth_stat_increment_numoffailedmatrixallocations(GthStat*); void gth_stat_increment_numoffailedDPparameterallocations(GthStat*); void gth_stat_increment_numofbacktracematrixallocations(GthStat*); void gth_stat_increment_numofremovedzerobaseexons(GthStat*); void gth_stat_increment_numofSAs(GthStat*); void gth_stat_increase_numofchains(GthStat*, unsigned long); void gth_stat_increase_totalsizeofbacktracematricesinMB(GthStat*, unsigned long); void gth_stat_increase_numofPGLs_stored(GthStat*, unsigned long); unsigned long gth_stat_get_numofSAs(GthStat*); bool gth_stat_get_exondistri(GthStat*); bool gth_stat_get_introndistri(GthStat*); GtDiscDistri* gth_stat_get_exondistribution(GthStat*); GtDiscDistri* gth_stat_get_introndistribution(GthStat*); bool gth_stat_get_matchnumdistri(GthStat*); bool gth_stat_get_refseqcovdistri(GthStat*); void gth_stat_add_to_matchnumdistri(GthStat*, unsigned long); void gth_stat_add_to_refseqcovdistri(GthStat*, unsigned long); void gth_stat_add_to_sa_alignment_score_distri(GthStat*, unsigned long); void gth_stat_add_to_sa_coverage_distri(GthStat*, unsigned long); void gth_stat_show(GthStat*, bool show_full_stats, bool xmlout, GtFile*); void gth_stat_delete(GthStat*); #endif genometools-1.5.1/src/gth/time.c000066400000000000000000000033301211610345200165160ustar00rootroot00000000000000/* Copyright (c) 2005-2009 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "core/unused_api.h" #include "gth/time.h" #define TIMESTRINGLENGTH 80 char* gth_get_time(void) { time_t utime; char *timestring; GT_UNUSED int rval; /* determine timestring */ if (time(&utime) < 0) { timestring = gt_malloc(sizeof (char) * TIMESTRINGLENGTH); rval = snprintf(timestring, (size_t) TIMESTRINGLENGTH, "%s", "time not available"); gt_assert(rval < TIMESTRINGLENGTH); return timestring; } timestring = gt_malloc(sizeof (char) * TIMESTRINGLENGTH); if (strftime(timestring, (size_t) TIMESTRINGLENGTH, "%Y-%m-%d %H:%M:%S", localtime(&utime)) == 0) { rval = snprintf(timestring, (size_t) TIMESTRINGLENGTH, "%s", "problem with time conversion"); gt_assert(rval < TIMESTRINGLENGTH); return timestring; } return timestring; } genometools-1.5.1/src/gth/time.h000066400000000000000000000016421211610345200165270ustar00rootroot00000000000000/* Copyright (c) 2005-2009 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TIME_H #define TIME_H char* gth_get_time(void); #endif genometools-1.5.1/src/gth/txt_pgl_visitor.c000066400000000000000000000232721211610345200210270ustar00rootroot00000000000000/* Copyright (c) 2004-2011 Gordon Gremme Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/undef_api.h" #include "gth/indent.h" #include "gth/gthtrans.h" #include "gth/pgl_visitor_rep.h" #include "gth/txt_pgl_visitor.h" #define PGLS_DELIMITERCHAR '-' #define PGL_DELIMITERLINECHAR '*' struct GthTxtPGLVisitor { const GthPGLVisitor parent_instance; GthInput *input; unsigned long translationtable; unsigned int indentlevel; GthOutput *out; }; #define txt_pgl_visitor_cast(GV)\ gth_pgl_visitor_cast(gth_txt_pgl_visitor_class(), GV) static void outputAGSline(const GthAGS *ags, unsigned long agsnum, GtFile *outfp) { GthExonAGS *exon; unsigned long i; gt_file_xprintf(outfp, "AGS-%lu (", agsnum + OUTPUTOFFSET); for (i = 0; i < gth_ags_num_of_exons(ags); i++) { exon = gth_ags_get_exon(ags, i); if (i > 0) gt_file_xfputc(',', outfp); gt_file_xprintf(outfp, "%lu %lu", SHOWGENPOSAGS(exon->range.start), SHOWGENPOSAGS(exon->range.end)); } gt_file_xprintf(outfp, ")\n"); } static void outputSCRline(const GthAGS *ags, GtFile *outfp) { GthSpliceSiteProb *splicesiteprob; unsigned long i; gt_file_xprintf(outfp, "SCR ("); for (i = 0; i < gt_array_size(ags->exons) - 1; i++) { splicesiteprob = (GthSpliceSiteProb*) gt_array_get(ags->splicesiteprobs, i); gt_file_xprintf(outfp, "e %5.3f d %5.3f a %5.3f,", ((GthExonAGS*) gt_array_get(ags->exons, i))->score, splicesiteprob->donorsiteprob, splicesiteprob->acceptorsiteprob); } gt_file_xprintf(outfp, "e %5.3f)\n", ((GthExonAGS*) gt_array_get(ags->exons, i))->score); gt_file_xfputc('\n', outfp); } static void output_exon_intron_lines(const GthAGS *ags, int widthforgenpos, GtFile *outfp) { GthSpliceSiteProb *splicesiteprob; GthExonAGS *exon; unsigned long i, leftexonborder, rightexonborder, exonlength, leftintronborder = GT_UNDEF_ULONG, rightintronborder, intronlength; GthDbl exonscore; GthFlt donorsiteprob, acceptorsiteprob; for (i = 0; i < gt_array_size(ags->exons); i++) { exon = (GthExonAGS*) gt_array_get(ags->exons, i); leftexonborder = exon->range.start; rightexonborder = exon->range.end; exonlength = rightexonborder - leftexonborder + 1; exonscore = exon->score; if (i > 0) { rightintronborder = leftexonborder - 1; intronlength = rightintronborder - leftintronborder + 1; splicesiteprob = (GthSpliceSiteProb*) gt_array_get(ags->splicesiteprobs, i-1); donorsiteprob = splicesiteprob->donorsiteprob; acceptorsiteprob = splicesiteprob->acceptorsiteprob; /* output intron */ gt_file_xprintf(outfp," Intron %2lu %*lu %*lu (%4lu n); " "Pd: %5.3f Pa: %5.3f\n", i - 1 + OUTPUTOFFSET, widthforgenpos, SHOWGENPOSAGS(leftintronborder), widthforgenpos, SHOWGENPOSAGS(rightintronborder), intronlength, donorsiteprob, acceptorsiteprob); } leftintronborder = rightexonborder + 1; /* output exon */ gt_file_xprintf(outfp, " Exon %2lu %*lu %*lu (%4lu n); score: %5.3f\n", i + OUTPUTOFFSET, widthforgenpos, SHOWGENPOSAGS(leftexonborder), widthforgenpos, SHOWGENPOSAGS(rightexonborder), exonlength, exonscore); } gt_file_xfputc('\n', outfp); } static void outputPGSlines(GtArray *alignments, GtFile *outfp) { unsigned long i, j; GthSA *sa; for (i = 0; i < gt_array_size(alignments); i++) { sa = *(GthSA**) gt_array_get(alignments, i); gt_file_xprintf(outfp, " PGS ("); for (j = 0; j < gth_sa_num_of_exons(sa); j++) { if (j > 0) gt_file_xfputc(',', outfp); gt_file_xprintf(outfp, "%lu %lu", gth_sa_left_genomic_exon_border(sa, j), gth_sa_right_genomic_exon_border(sa, j)); } gt_file_xprintf(outfp, ")\t%s%c\n", gth_sa_ref_id(sa), gth_sa_ref_strand_char(sa)); } gt_file_xfputc('\n', outfp); } static void show_ags(const GthAGS *ags, unsigned long pglnum, unsigned long agsnum, unsigned long translationtable, GthInput *input, unsigned int indentlevel, GthOutput *out) { GtFile *outfp = out->outfp; /* output AGS line */ outputAGSline(ags, agsnum, out->outfp); /* output SCR line */ outputSCRline(ags, out->outfp); /* output exon/intron lines */ output_exon_intron_lines(ags, out->widthforgenpos, out->outfp); /* output PGS lines */ outputPGSlines(ags->alignments, out->outfp); /* output 3-phase translation */ gt_outputtranslationandorf(pglnum, ags, agsnum, translationtable, input, indentlevel, out); /* output three final newlines */ gt_file_xprintf(outfp, "\n\n\n"); } static void show_pgl(GthPGL *pgl, unsigned long pglnum, unsigned long translationtable, GthInput *input, unsigned int indentlevel, GthOutput *out) { unsigned long i; GtFile *outfp = out->outfp; gt_assert(!out->gff3out); if (out->xmlout) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", pglnum + OUTPUTOFFSET, SHOWSTRAND(gth_pgl_is_forward(pgl)), SHOWGENPOS(gth_pgl_is_forward(pgl), gth_pgl_total_length(pgl), gth_pgl_genomic_offset(pgl), pgl->maxrange.start), SHOWGENPOS(gth_pgl_is_forward(pgl), gth_pgl_total_length(pgl), gth_pgl_genomic_offset(pgl), pgl->maxrange.end)); } else { gt_file_xprintf(outfp, "PGL %3lu (%c strand): %lu %lu", pglnum + OUTPUTOFFSET, SHOWSTRAND(gth_pgl_is_forward(pgl)), SHOWGENPOS(gth_pgl_is_forward(pgl), gth_pgl_total_length(pgl), gth_pgl_genomic_offset(pgl), pgl->maxrange.start), SHOWGENPOS(gth_pgl_is_forward(pgl), gth_pgl_total_length(pgl), gth_pgl_genomic_offset(pgl), pgl->maxrange.end)); if (out->pglgentemplate) gt_file_xprintf(outfp, " (genomic template '%s')", gth_pgl_gen_id(pgl)); gt_file_xfputc('\n', outfp); } for (i = 0; i < gt_array_size(pgl->assemblies); i++) { show_ags(gth_pgl_get_ags(pgl, i), pglnum, i, translationtable, input, indentlevel, out); } if (out->xmlout) { indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } } static void txt_pgl_visitor_preface(GthPGLVisitor *pgl_visitor, unsigned long num_of_pgls) { unsigned long i; GthTxtPGLVisitor *visitor = txt_pgl_visitor_cast(pgl_visitor); for (i = 0; i < DELIMITERLINELENGTH; i++) gt_file_xfputc(PGLS_DELIMITERCHAR, visitor->out->outfp); gt_file_xprintf(visitor->out->outfp, "\n\n"); gt_file_xprintf(visitor->out->outfp, "Predicted gene locations (%lu):\n\n\n", num_of_pgls); } static void txt_pgl_visitor_visit_pgl(GthPGLVisitor *pgl_visitor, GthPGL *pgl, unsigned long pglnum) { GthTxtPGLVisitor *visitor = txt_pgl_visitor_cast(pgl_visitor); gt_assert(pgl); show_pgl(pgl, pglnum, visitor->translationtable, visitor->input, visitor->indentlevel, visitor->out); } const GthPGLVisitorClass* gth_txt_pgl_visitor_class() { static const GthPGLVisitorClass pglvc = { sizeof (GthTxtPGLVisitor), NULL, txt_pgl_visitor_preface, NULL, txt_pgl_visitor_visit_pgl, NULL }; return &pglvc; } GthPGLVisitor* gth_txt_pgl_visitor_new(GthInput *input, unsigned long translationtable, unsigned int indentlevel, GthOutput *out) { GthPGLVisitor *pgl_visitor = gth_pgl_visitor_create(gth_txt_pgl_visitor_class()); GthTxtPGLVisitor *visitor = txt_pgl_visitor_cast(pgl_visitor); visitor->input = input; visitor->translationtable = translationtable; visitor->indentlevel = indentlevel; visitor->out = out; return pgl_visitor; } genometools-1.5.1/src/gth/txt_pgl_visitor.h000066400000000000000000000027121211610345200210300ustar00rootroot00000000000000/* Copyright (c) 2008-2009 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TXT_PGL_VISITOR_H #define TXT_PGL_VISITOR_H #include "gth/input.h" #include "gth/pgl_visitor.h" /* implements the ``spliced alignment visitor'' interface */ typedef struct GthTxtPGLVisitor GthTxtPGLVisitor; const GthPGLVisitorClass* gth_txt_pgl_visitor_class(void); GthPGLVisitor* gth_txt_pgl_visitor_new(GthInput*, unsigned long translationtable, unsigned int indentlevel, GthOutput*); #endif genometools-1.5.1/src/gth/txt_sa_visitor.c000066400000000000000000000277521211610345200206570ustar00rootroot00000000000000/* Copyright (c) 2004-2009 Gordon Gremme Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/undef_api.h" #include "gth/sa_visitor_rep.h" #include "gth/txt_sa_visitor.h" #define SA_DELIMITERLINECHAR '*' struct GthTxtSAVisitor { const GthSAVisitor parent_instance; GthInput *input; bool gs2out, showseqnums; unsigned long minintronlength, widthforgenpos, showintronmaxlen, translationtable; GtFile *outfp; }; #define txt_sa_visitor_cast(GV)\ gth_sa_visitor_cast(gth_txt_sa_visitor_class(), GV) static void showgthreferenceinformation(GthSA *sa, GthInput *input, bool showseqnums, GtFile *outfp) { gt_assert(gth_sa_ref_file_num(sa) != GT_UNDEF_ULONG); switch (gth_sa_alphatype(sa)) { case DNA_ALPHA: gt_file_xprintf(outfp, "EST Sequence: file=%s, strand=%c, description=", gth_input_get_reference_filename(input, gth_sa_ref_file_num(sa)), gth_sa_ref_strand_char(sa)); break; case PROTEIN_ALPHA: gt_file_xprintf(outfp, "Protein Sequence: file=%s, description=", gth_input_get_reference_filename(input, gth_sa_ref_file_num(sa))); break; default: gt_assert(0); } gth_sa_echo_reference_description(sa, input, outfp); if (showseqnums) gt_file_xprintf(outfp, ", seqnum=%lu", gth_sa_ref_seq_num(sa)); gt_file_xfputc('\n', outfp); gt_file_xfputc('\n', outfp); } static void showgs2referenceinformation(GthSA *sa, GtFile *outfp) { gt_file_xprintf(outfp, "EST sequence %4lu %cstrand (File: %s%c)\n\n", gth_sa_call_number(sa), gth_sa_ref_strand_char(sa), gth_sa_ref_id(sa), gth_sa_ref_strand_char(sa)); } static void showgthgenomicinformation(GthSA *sa, GthInput *input, bool showseqnums, GtFile *outfp) { gt_assert(gth_sa_gen_file_num(sa) != GT_UNDEF_ULONG); gt_file_xprintf(outfp, "Genomic Template: file=%s, strand=%c, from=%lu, " "to=%lu, description=", gth_input_get_genomic_filename(input, gth_sa_gen_file_num(sa)), gth_sa_gen_strand_char(sa), gth_sa_gen_dp_start_show(sa), gth_sa_gen_dp_end_show(sa)); gth_sa_echo_genomic_description(sa, input, outfp); if (showseqnums) gt_file_xprintf(outfp, ", seqnum=%lu", gth_sa_gen_seq_num(sa)); gt_file_xfputc('\n', outfp); gt_file_xfputc('\n', outfp); } /* The following function prints a PPA line, which shows the start and end position of the poly-A tail in the cDNA (iff a poly-A tail could be determined). */ static void showppaline(GthSA *sa, GtFile *outfp) { if (gth_sa_polyAtail_start(sa) || gth_sa_polyAtail_stop(sa)) { gt_file_xprintf(outfp, " PPA cDNA %6lu %6lu\n", gth_sa_polyAtail_start(sa) + OUTPUTOFFSET, gth_sa_polyAtail_stop(sa) + OUTPUTOFFSET); } } /* The following function prints the "classic" GeneSeqer2 MATCH line */ static void showmatchline(GthSA *sa, GtFile *outfp) { gt_file_xprintf(outfp, "MATCH\t%s%c\t%s%c\t%5.3f\t%lu\t%5.3f\t%c\n", gth_sa_gen_id(sa), gth_sa_gen_strand_char(sa), gth_sa_ref_id(sa), gth_sa_ref_strand_char(sa), gth_sa_score(sa), gth_sa_cumlen_scored_exons(sa), gth_sa_coverage(sa), gth_sa_coverage_char(sa)); } /* The following function prints the "classic" GeneSeqer2 PGS line */ static void showpgsline(GthSA *sa, GtFile *outfp) { unsigned long i, numofexons; gt_assert(sa); numofexons = gth_sa_num_of_exons(sa); gt_file_xprintf(outfp, "PGS_%s%c_%s%c\t(", gth_sa_gen_id(sa), gth_sa_gen_strand_char(sa), gth_sa_ref_id(sa), gth_sa_ref_strand_char(sa)); for (i = 0; i < numofexons; i++) { gt_file_xprintf(outfp, "%lu %lu", gth_sa_left_genomic_exon_border(sa, i), gth_sa_right_genomic_exon_border(sa, i)); if (i == numofexons - 1) gt_file_xprintf(outfp, ")\n\n"); else gt_file_xfputc(',', outfp); } } static void showalignmentheader(GthSA *sa, bool gs2out, int widthforgenpos, unsigned long minintronlength, GtFile *outfp) { unsigned long i, leftreferenceexonborder, rightreferenceexonborder, referenceexonlength; GthDbl exonscore, donorsitescore, acceptorsitescore; GthFlt donorsiteprobability, acceptorsiteprobability; Exoninfo *exoninfo; Introninfo *introninfo; gt_file_xprintf(outfp, "Predicted gene structure"); if (gs2out) { gt_file_xprintf(outfp, " (within gDNA segment %lu to %lu):\n", gth_sa_gen_dp_start_show(sa), gth_sa_gen_dp_end_show(sa)); } else gt_file_xprintf(outfp, ":\n"); gt_file_xfputc('\n', outfp); for (i = 0; i < gth_sa_num_of_exons(sa); i++) { exoninfo = gth_sa_get_exon(sa, i); leftreferenceexonborder = exoninfo->leftreferenceexonborder; rightreferenceexonborder = exoninfo->rightreferenceexonborder; referenceexonlength = rightreferenceexonborder - leftreferenceexonborder + 1; exonscore = exoninfo->exonscore; if (i > 0) { introninfo = gth_sa_get_intron(sa, i-1); donorsiteprobability = introninfo->donorsiteprobability; donorsitescore = introninfo->donorsitescore; acceptorsiteprobability = introninfo->acceptorsiteprobability; acceptorsitescore = introninfo->acceptorsitescore; gt_file_xprintf(outfp, " Intron %2lu %*lu %*lu (%4lu n); ", i - 1 + OUTPUTOFFSET, widthforgenpos, gth_sa_left_intron_border(sa, i-1), widthforgenpos, gth_sa_right_intron_border(sa, i-1), gth_sa_intron_length(sa, i-1)); gt_file_xprintf(outfp, "Pd: %5.3f ", donorsiteprobability); if (gth_sa_alphatype(sa) == DNA_ALPHA) { if (donorsitescore == 0.0) gt_file_xprintf(outfp, "(s: 0), "); else gt_file_xprintf(outfp, "(s: %4.2f), ", donorsitescore); } else gt_file_xprintf(outfp, " "); gt_file_xprintf(outfp, "Pa: %5.3f ", acceptorsiteprobability); if (gth_sa_alphatype(sa) == DNA_ALPHA) { if (acceptorsitescore == 0.0) gt_file_xprintf(outfp, "(s: 0)"); else gt_file_xprintf(outfp, "(s: %4.2f)", acceptorsitescore); } /* if the intron is shorter or equal than the minimum intron length two question marks are shown at the end of the line */ if (gth_sa_intron_length(sa, i-1) <= minintronlength) gt_file_xprintf(outfp, " ??"); gt_file_xfputc('\n', outfp); } gt_file_xprintf(outfp, " Exon %2lu %*lu %*lu (%4lu n); %s %6lu %6lu (%4lu %s); " "score: %5.3f\n", i + OUTPUTOFFSET, widthforgenpos, gth_sa_left_genomic_exon_border(sa, i), widthforgenpos, gth_sa_right_genomic_exon_border(sa, i), gth_sa_genomic_exon_length(sa, i), gth_sa_alphastring(sa), leftreferenceexonborder + OUTPUTOFFSET, rightreferenceexonborder + OUTPUTOFFSET, referenceexonlength, gth_sa_alphatype(sa) == DNA_ALPHA ? "n" : "aa", exonscore); } /* showing PPA line (if an poly-A tail was determined) */ if (gth_sa_alphatype(sa) == DNA_ALPHA) showppaline(sa, outfp); gt_file_xfputc('\n', outfp); /* showing MATCH line */ showmatchline(sa, outfp); /* showing PGS line */ showpgsline(sa, outfp); } static void showdelimiterline(GtFile *outfp) { unsigned long i; for (i = 0; i < DELIMITERLINELENGTH; i++) gt_file_xfputc(SA_DELIMITERLINECHAR, outfp); gt_file_xfputc('\n', outfp); } static void show_spliced_alignment(GthSA *sa, GthInput *input, bool gs2out, unsigned long minintronlength, unsigned long widthforgenpos, unsigned long showintronmaxlen, unsigned long translationtable, bool showseqnums, GtFile *outfp) { bool wildcardimplosion = false; showdelimiterline(outfp); if (gs2out) { /* all wildcards (N,S,Y,W,R,K,V,B,D,H,M) will be replaced by the wildcard N makes only sense for a DNA alphabet */ wildcardimplosion = true; showgs2referenceinformation(sa, outfp); gth_sa_echo_reference_sequence(sa, input, true, outfp); } else { showgthreferenceinformation(sa, input, showseqnums, outfp); gth_sa_echo_reference_sequence(sa, input, true, outfp); showgthgenomicinformation(sa, input, showseqnums, outfp); } showalignmentheader(sa, gs2out, widthforgenpos, minintronlength, outfp); gt_file_xprintf(outfp, "Alignment (genomic DNA sequence = upper lines):\n\n"); gth_sa_echo_alignment(sa, showintronmaxlen, translationtable, wildcardimplosion, input, outfp); } static void txt_sa_visitor_visit_sa(GthSAVisitor *sa_visitor, GthSA *sa) { GthTxtSAVisitor *visitor = txt_sa_visitor_cast(sa_visitor); gt_assert(sa); show_spliced_alignment(sa, visitor->input, visitor->gs2out, visitor->minintronlength, visitor->widthforgenpos, visitor->showintronmaxlen, visitor->translationtable, visitor->showseqnums, visitor->outfp); } const GthSAVisitorClass* gth_txt_sa_visitor_class() { static const GthSAVisitorClass savc = { sizeof (GthTxtSAVisitor), NULL, NULL, txt_sa_visitor_visit_sa, NULL }; return &savc; } GthSAVisitor* gth_txt_sa_visitor_new(GthInput *input, bool gs2out, unsigned long minintronlength, unsigned long widthforgenpos, unsigned long showintronmaxlen, unsigned long translationtable, bool showseqnums, GtFile *outfp) { GthSAVisitor *sa_visitor = gth_sa_visitor_create(gth_txt_sa_visitor_class()); GthTxtSAVisitor *visitor = txt_sa_visitor_cast(sa_visitor); visitor->input = input; visitor->gs2out = gs2out; visitor->minintronlength = minintronlength; visitor->widthforgenpos = widthforgenpos; visitor->showintronmaxlen = showintronmaxlen; visitor->translationtable = translationtable; visitor->showseqnums = showseqnums; visitor->outfp = outfp; return sa_visitor; } genometools-1.5.1/src/gth/txt_sa_visitor.h000066400000000000000000000032561211610345200206550ustar00rootroot00000000000000/* Copyright (c) 2008-2009 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TXT_SA_VISITOR_H #define TXT_SA_VISITOR_H #include "gth/sa_visitor.h" #include "gth/input.h" /* implements the ``spliced alignment visitor'' interface */ typedef struct GthTxtSAVisitor GthTxtSAVisitor; const GthSAVisitorClass* gth_txt_sa_visitor_class(void); GthSAVisitor* gth_txt_sa_visitor_new(GthInput*, bool gs2out, unsigned long minintronlength, unsigned long widthforgenpos, unsigned long showintronmaxlen, unsigned long translationtable, bool showseqnums, GtFile *outfp); #endif genometools-1.5.1/src/gth/xml_final_sa_visitor.c000066400000000000000000000427531211610345200220070ustar00rootroot00000000000000/* Copyright (c) 2004-2011 Gordon Gremme Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/chardef.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "gth/indent.h" #include "gth/sa_visitor_rep.h" #include "gth/xml_final_sa_visitor.h" struct GthXMLFinalSAVisitor { const GthSAVisitor parent_instance; unsigned long minintronlength, translationtable; GthInput *input; unsigned int indentlevel; GtFile *outfp; }; #define xml_final_sa_visitor_cast(GV)\ gth_sa_visitor_cast(gth_xml_final_sa_visitor_class(), GV) static void xml_showgthreferenceinformation(GthSA *sa, GthInput *input, unsigned int indentlevel, GtFile *outfp) { gt_assert(gth_sa_ref_file_num(sa) != GT_UNDEF_ULONG); gth_indent(outfp, indentlevel); switch (gth_sa_alphatype(sa)) { case DNA_ALPHA: gt_file_xprintf(outfp, "\n"); } static void xml_showgthgenomicinformation(GthSA *sa, GthInput *input, unsigned int indentlevel, GtFile *outfp) { gt_assert(gth_sa_gen_file_num(sa) != GT_UNDEF_ULONG); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } /* The following function prints a PPA line, which shows the start and end position of the poly-A tail in the cDNA (iff a poly-A tail could be determined). */ static void xml_showppaline(GthSA *sa, unsigned int indentlevel, GtFile *outfp) { if (gth_sa_polyAtail_start(sa) || gth_sa_polyAtail_stop(sa)) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_sa_polyAtail_start(sa) + OUTPUTOFFSET, gth_sa_polyAtail_stop(sa) + OUTPUTOFFSET); } } /* The following function prints the "classic" GeneSeqer2 MATCH line */ static void xml_showmatchline(GthSA *sa, unsigned int indentlevel, GtFile *outfp) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_sa_ref_id(sa), gth_sa_ref_strand_char(sa)); } else gt_file_xprintf(outfp, "ref_id=\"%s\">\n", gth_sa_ref_id(sa)); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%.3f\n", gth_sa_score(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu" "\n", gth_sa_cumlen_scored_exons(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } /* The following function prints the "classic" GeneSeqer2 PGS line */ static void xml_showpgsline(GthSA *sa, unsigned int indentlevel, GtFile *outfp) { unsigned long i, numofexons; gt_assert(sa); numofexons = gth_sa_num_of_exons(sa); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_sa_gen_id(sa), gth_sa_gen_strand_char(sa)); gth_indent(outfp, indentlevel); if (gth_sa_alphatype(sa) == DNA_ALPHA) { gt_file_xprintf(outfp, "\n", gth_sa_ref_id(sa), gth_sa_ref_strand_char(sa)); } else { gt_file_xprintf(outfp, "\n", gth_sa_ref_id(sa)); } gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; for (i = 0; i < numofexons; i++) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_sa_left_genomic_exon_border(sa, i), gth_sa_right_genomic_exon_border(sa, i)); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } static void xml_showalignmentheader(GthSA *sa, unsigned long minintronlength, unsigned int indentlevel, GtFile *outfp) { unsigned long i, leftreferenceexonborder, rightreferenceexonborder, referenceexonlength; GthDbl exonscore, donorsitescore, acceptorsitescore; GthFlt donorsiteprobability, acceptorsiteprobability; Exoninfo *exoninfo; Introninfo *introninfo; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; for (i = 0; i < gth_sa_num_of_exons(sa); i++) { exoninfo = gth_sa_get_exon(sa, i); leftreferenceexonborder = exoninfo->leftreferenceexonborder; rightreferenceexonborder = exoninfo->rightreferenceexonborder; referenceexonlength = rightreferenceexonborder - leftreferenceexonborder + 1; exonscore = exoninfo->exonscore; if (i > 0) { introninfo = gth_sa_get_intron(sa, i-1); donorsiteprobability = introninfo->donorsiteprobability; donorsitescore = introninfo->donorsitescore; acceptorsiteprobability = introninfo->acceptorsiteprobability; acceptorsitescore = introninfo->acceptorsitescore; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", i - 1 + OUTPUTOFFSET); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_sa_left_intron_border(sa, i-1), gth_sa_right_intron_border(sa, i-1), gth_sa_intron_length(sa, i-1)); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); /* if the intron is shorter or equal than the minimal intron length an additional tag is shown */ if (gth_sa_intron_length(sa, i-1) <= minintronlength) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", i + OUTPUTOFFSET); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_sa_left_genomic_exon_border(sa, i), gth_sa_right_genomic_exon_border(sa, i), gth_sa_genomic_exon_length(sa, i)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_sa_alphastring(sa), leftreferenceexonborder + OUTPUTOFFSET , rightreferenceexonborder + OUTPUTOFFSET , referenceexonlength, exonscore); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); /* showing PPA line (if an poly-A tail was determined) */ if (gth_sa_alphatype(sa) == DNA_ALPHA) xml_showppaline(sa, indentlevel, outfp); /* showing MATCH line */ xml_showmatchline(sa, indentlevel, outfp); /* showing PGS line */ xml_showpgsline(sa, indentlevel, outfp); } static void showconcreteline(const unsigned char *alignmentline, unsigned long cols, GtFile *outfp) { unsigned long i; for (i = 0; i < cols; i++) { switch (alignmentline[i]) { case ABSTRACTGAPSYMBOL: gt_file_xfputc(CONCRETEGAPSYMBOL, outfp); break; case ABSTRACTINTRONSYMBOL: gt_file_xfputc(CONCRETEINTRONSYMBOL, outfp); break; default: gt_file_xfputc(alignmentline[i], outfp); } } } static void xml_final_show_spliced_alignment(GthSA *sa, GthInput *input, unsigned long minintronlength, unsigned long translationtable, unsigned int indentlevel, GtFile *outfp) { unsigned char *first_line, *second_line, *third_line; GT_UNUSED bool reverse_subject_pos = false; unsigned long cols; gt_assert(sa && input); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; /* If the reverse complement of the genomic DNA is considered, this opition is needed for correct output of the genomic sequence positions by the function showalignmentgeneric() */ if (!gth_sa_gen_strand_forward(sa)) reverse_subject_pos = true; xml_showgthreferenceinformation(sa, input, indentlevel, outfp); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, ""); gth_sa_echo_reference_sequence(sa, input, false, outfp); gt_file_xprintf(outfp, "\n"); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); xml_showgthgenomicinformation(sa, input, indentlevel, outfp); xml_showalignmentheader(sa, minintronlength, indentlevel, outfp); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); /* compute the alignment lines */ cols = gth_sa_get_alignment_lines(sa, &first_line, &second_line, &third_line, translationtable, input); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, ""); showconcreteline(first_line, cols, outfp); gt_file_xprintf(outfp, "\n"); gth_indent(outfp, indentlevel); switch (gth_sa_alphatype(sa)) { case DNA_ALPHA: gt_file_xprintf(outfp, ""); showconcreteline(second_line, cols, outfp); gt_file_xprintf(outfp, "\n"); break; case PROTEIN_ALPHA: gt_file_xprintf(outfp, ""); showconcreteline(second_line, cols, outfp); gt_file_xprintf(outfp, "\n"); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, ""); showconcreteline(third_line, cols, outfp); gt_file_xprintf(outfp, "\n"); break; default: gt_assert(0); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); /* free */ gt_free(first_line); gt_free(second_line); gt_free(third_line); } static void xml_final_sa_visitor_preface(GthSAVisitor *sa_visitor) { GthXMLFinalSAVisitor *visitor = xml_final_sa_visitor_cast(sa_visitor); gth_indent(visitor->outfp, visitor->indentlevel); gt_file_xprintf(visitor->outfp, "\n"); } static void xml_final_sa_visitor_visit_sa(GthSAVisitor *sa_visitor, GthSA *sa) { GthXMLFinalSAVisitor *visitor = xml_final_sa_visitor_cast(sa_visitor); gt_assert(sa); xml_final_show_spliced_alignment(sa, visitor->input, visitor->minintronlength, visitor->translationtable, visitor->indentlevel, visitor->outfp); } static void xml_final_sa_visitor_trailer(GthSAVisitor *sa_visitor, unsigned long num_of_sas) { GthXMLFinalSAVisitor *visitor = xml_final_sa_visitor_cast(sa_visitor); visitor->indentlevel++; gth_indent(visitor->outfp, visitor->indentlevel); gt_file_xprintf(visitor->outfp, "%lu" "\n", num_of_sas); gth_indent(visitor->outfp, visitor->indentlevel); gt_file_xprintf(visitor->outfp, "\n"); visitor->indentlevel--; } const GthSAVisitorClass* gth_xml_final_sa_visitor_class() { static const GthSAVisitorClass savc = { sizeof (GthXMLFinalSAVisitor), NULL, xml_final_sa_visitor_preface, xml_final_sa_visitor_visit_sa, xml_final_sa_visitor_trailer }; return &savc; } GthSAVisitor* gth_xml_final_sa_visitor_new(GthInput *input, unsigned long minintronlength, unsigned long translationtable, unsigned int indentlevel, GtFile *outfp) { GthSAVisitor *sa_visitor = gth_sa_visitor_create(gth_xml_final_sa_visitor_class()); GthXMLFinalSAVisitor *visitor = xml_final_sa_visitor_cast(sa_visitor); visitor->input = input; visitor->minintronlength = minintronlength; visitor->translationtable = translationtable; visitor->indentlevel = indentlevel; visitor->outfp = outfp; return sa_visitor; } genometools-1.5.1/src/gth/xml_final_sa_visitor.h000066400000000000000000000032011211610345200217750ustar00rootroot00000000000000/* Copyright (c) 2008-2009 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef XML_FINAL_SA_VISITOR_H #define XML_FINAL_SA_VISITOR_H #include "gth/input.h" #include "gth/sa_visitor.h" /* implements the ``spliced alignment visitor'' interface */ typedef struct GthXMLFinalSAVisitor GthXMLFinalSAVisitor; const GthSAVisitorClass* gth_xml_final_sa_visitor_class(void); GthSAVisitor* gth_xml_final_sa_visitor_new(GthInput*, unsigned long minintronlength, unsigned long translationtable, unsigned int indentlevel, GtFile *outfp); #endif genometools-1.5.1/src/gth/xml_inter_sa_visitor.c000066400000000000000000000321741211610345200220330ustar00rootroot00000000000000/* Copyright (c) 2004-2009 Gordon Gremme Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "gth/indent.h" #include "gth/showbool.h" #include "gth/intermediate.h" #include "gth/sa_visitor_rep.h" #include "gth/xml_inter_sa_visitor.h" #define PRECISION 16 struct GthXMLInterSAVisitor { const GthSAVisitor parent_instance; GthInput *input; unsigned int indentlevel; GtFile *outfp; }; #define xml_inter_sa_visitor_cast(GV)\ gth_sa_visitor_cast(gth_xml_inter_sa_visitor_class(), GV) static void showgenomicfilename(GthSA *sa, GthInput *input, unsigned int indentlevel, GtFile *outfp) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%s\n", gth_input_get_genomic_filename(input, gth_sa_gen_file_num(sa))); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%s\n", GTH_UNDEFINED_HASH); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } static void showreferencefilename(GthSA *sa, GthInput *input, unsigned int indentlevel, GtFile *outfp) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%s\n", gth_input_get_reference_filename(input, gth_sa_ref_file_num(sa))); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%s\n", GTH_UNDEFINED_HASH); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } static void showalignmentcutoffs(GthSA *sa, unsigned int indentlevel, GtFile *outfp) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_genomiccutoff_start(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_referencecutoff_start(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_eopcutoff_start(sa)); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_genomiccutoff_end(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_referencecutoff_end(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_eopcutoff_end(sa)); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } static void showexons(GthSA *sa, unsigned int indentlevel, GtFile *outfp) { Exoninfo *exoninfo; unsigned long i; for (i = 0; i < gth_sa_num_of_exons(sa); i++) { exoninfo = gth_sa_get_exon(sa, i); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", exoninfo->leftgenomicexonborder); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", exoninfo->rightgenomicexonborder); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", exoninfo->leftreferenceexonborder); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", exoninfo->rightreferenceexonborder); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%.*f\n", PRECISION, exoninfo->exonscore); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } } static void showintrons(GthSA *sa, bool dnaalpha, unsigned int indentlevel, GtFile *outfp) { Introninfo *introninfo; unsigned long i; for (i = 0; i < gth_sa_num_of_introns(sa); i++) { introninfo = gth_sa_get_intron(sa, i); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%.*f\n", PRECISION, introninfo->donorsiteprobability); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%.*f\n", PRECISION, introninfo->acceptorsiteprobability); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%.*f\n", PRECISION, dnaalpha ? introninfo->donorsitescore : UNDEFINED_SPLICE_SITE_SCORE); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%.*f\n", PRECISION, dnaalpha ? introninfo->acceptorsitescore : UNDEFINED_SPLICE_SITE_SCORE); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } } static void showpolyAtailpos(GthSA *sa, unsigned int indentlevel, GtFile *outfp) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_polyAtail_start(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_polyAtail_stop(sa)); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } static void xml_inter_show_spliced_alignment(GthSA *sa, GthInput *input, unsigned int indentlevel, GtFile *outfp) { bool dnaalpha = true; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, ""); switch (gth_sa_alphatype(sa)) { case DNA_ALPHA: gt_file_xprintf(outfp, "DNA_ALPHA"); break; case PROTEIN_ALPHA: gt_file_xprintf(outfp, "PROTEIN_ALPHA"); dnaalpha = false; break; default: gt_assert(0); } gt_file_xprintf(outfp, "\n"); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_backtrace_path_show_complete(gth_sa_backtrace_path(sa), true, indentlevel, outfp); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_indelcount(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_gen_dp_length(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_gen_total_length(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_gen_offset(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_ref_total_length(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_gen_dp_start(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_gen_dp_end(sa)); showgenomicfilename(sa, input, indentlevel, outfp); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_gen_seq_num(sa)); showreferencefilename(sa, input, indentlevel, outfp); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu\n", gth_sa_ref_seq_num(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%s\n", gth_sa_gen_id(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%s\n", gth_sa_ref_id(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%s\n", GTH_SHOWBOOL(gth_sa_gen_strand_forward(sa))); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%s\n", GTH_SHOWBOOL(gth_sa_ref_strand_forward(sa))); showalignmentcutoffs(sa, indentlevel, outfp); showexons(sa, indentlevel, outfp); showintrons(sa, dnaalpha, indentlevel, outfp); showpolyAtailpos(sa, indentlevel, outfp); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%.*f\n", PRECISION, gth_sa_score(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%.*f\n", PRECISION, gth_sa_coverage(sa)); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%s" "\n", GTH_SHOWBOOL(gth_sa_genomic_cov_is_highest(sa))); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "%lu" "\n", gth_sa_cumlen_scored_exons(sa)); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } static void xml_inter_sa_visitor_visit_sa(GthSAVisitor *sa_visitor, GthSA *sa) { GthXMLInterSAVisitor *visitor = xml_inter_sa_visitor_cast(sa_visitor); gt_assert(sa); xml_inter_show_spliced_alignment(sa, visitor->input, visitor->indentlevel, visitor->outfp); } const GthSAVisitorClass* gth_xml_inter_sa_visitor_class() { static const GthSAVisitorClass savc = { sizeof (GthXMLInterSAVisitor), NULL, NULL, xml_inter_sa_visitor_visit_sa, NULL }; return &savc; } GthSAVisitor* gth_xml_inter_sa_visitor_new(GthInput *input, unsigned int indentlevel, GtFile *outfp) { GthSAVisitor *sa_visitor = gth_sa_visitor_create(gth_xml_inter_sa_visitor_class()); GthXMLInterSAVisitor *visitor = xml_inter_sa_visitor_cast(sa_visitor); visitor->input = input; visitor->indentlevel = indentlevel; visitor->outfp = outfp; return sa_visitor; } void gth_xml_inter_sa_visitor_set_outfp(GthSAVisitor *sa_visitor, GtFile *outfp) { GthXMLInterSAVisitor *visitor = xml_inter_sa_visitor_cast(sa_visitor); visitor->outfp = outfp; } genometools-1.5.1/src/gth/xml_inter_sa_visitor.h000066400000000000000000000027441211610345200220400ustar00rootroot00000000000000/* Copyright (c) 2008-2009 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef XML_INTER_SA_VISITOR_H #define XML_INTER_SA_VISITOR_H #include "gth/sa_visitor.h" /* implements the ``spliced alignment visitor'' interface */ typedef struct GthXMLInterSAVisitor GthXMLInterSAVisitor; const GthSAVisitorClass* gth_xml_inter_sa_visitor_class(void); GthSAVisitor* gth_xml_inter_sa_visitor_new(GthInput*, unsigned int indentlevel, GtFile *outfp); void gth_xml_inter_sa_visitor_set_outfp(GthSAVisitor*, GtFile*); #endif genometools-1.5.1/src/gth/xml_pgl_visitor.c000066400000000000000000000277701211610345200210170ustar00rootroot00000000000000/* Copyright (c) 2004-2009 Gordon Gremme Copyright (c) 2004-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/undef_api.h" #include "core/unused_api.h" #include "gth/indent.h" #include "gth/gthtrans.h" #include "gth/pgl_visitor_rep.h" #include "gth/xml_pgl_visitor.h" struct GthXMLPGLVisitor { const GthPGLVisitor parent_instance; GthInput *input; unsigned long translationtable; unsigned int indentlevel; GthOutput *out; }; #define xml_pgl_visitor_cast(GV)\ gth_pgl_visitor_cast(gth_xml_pgl_visitor_class(), GV) static void xml_outputAGSline(const GthAGS *ags, unsigned long agsnum, unsigned int indentlevel, GtFile *outfp) { GthExonAGS *exon; unsigned long i; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", agsnum + OUTPUTOFFSET); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; for (i = 0; i < gth_ags_num_of_exons(ags); i++) { exon = gth_ags_get_exon(ags, i); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", SHOWGENPOSAGS(exon->range.start), SHOWGENPOSAGS(exon->range.end)); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } static void xml_outputSCRline(const GthAGS *ags, unsigned int indentlevel, GtFile *outfp) { GthSpliceSiteProb *splicesiteprob; unsigned long i; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; for (i = 0; i < gt_array_size(ags->exons) - 1; i++) { splicesiteprob = (GthSpliceSiteProb*) gt_array_get(ags->splicesiteprobs, i); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", splicesiteprob->donorsiteprob, splicesiteprob->acceptorsiteprob, ((GthExonAGS*) gt_array_get(ags->exons, i))->score); } gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", ((GthExonAGS*) gt_array_get(ags->exons, i))->score); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } static void xml_output_exon_intron_lines(const GthAGS *ags, unsigned int indentlevel, GtFile *outfp) { GthSpliceSiteProb *splicesiteprob; GthExonAGS *exon; unsigned long i, leftexonborder, rightexonborder, exonlength, leftintronborder = GT_UNDEF_ULONG, rightintronborder, intronlength; GthDbl exonscore; GthFlt donorsiteprob, acceptorsiteprob; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; for (i = 0; i < gt_array_size(ags->exons); i++) { exon = (GthExonAGS*) gt_array_get(ags->exons, i); leftexonborder = exon->range.start; rightexonborder = exon->range.end; exonlength = rightexonborder - leftexonborder + 1; exonscore = exon->score; if (i > 0) { rightintronborder = leftexonborder - 1; intronlength = rightintronborder - leftintronborder + 1; splicesiteprob = (GthSpliceSiteProb*) gt_array_get(ags->splicesiteprobs, i-1); donorsiteprob = splicesiteprob->donorsiteprob; acceptorsiteprob = splicesiteprob->acceptorsiteprob; /* output intron */ gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", i - 1 + OUTPUTOFFSET, donorsiteprob, acceptorsiteprob); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", SHOWGENPOSAGS(leftintronborder), SHOWGENPOSAGS(rightintronborder), intronlength); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } leftintronborder = rightexonborder + 1; /* output exon */ gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", i + OUTPUTOFFSET, exonscore); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", SHOWGENPOSAGS(leftexonborder), SHOWGENPOSAGS(rightexonborder), exonlength); indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } static void xml_outputPGSlines(GtArray *alignments, unsigned int indentlevel, GtFile *outfp) { unsigned long i, j; GthSA *sa; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; for (i = 0; i < gt_array_size(alignments); i++) { sa = *(GthSA**) gt_array_get(alignments, i); gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); indentlevel++; for (j = 0; j < gth_sa_num_of_exons(sa); j++) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n", gth_sa_left_genomic_exon_border(sa, j), gth_sa_right_genomic_exon_border(sa, j)); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); gth_indent(outfp, indentlevel); if (gth_sa_alphatype(sa) == DNA_ALPHA) { gt_file_xprintf(outfp, "\n", gth_sa_ref_id(sa), gth_sa_ref_strand_char(sa)); } else { gt_file_xprintf(outfp, "\n", gth_sa_ref_id(sa)); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "\n"); } static void xml_show_ags(const GthAGS *ags, unsigned long pglnum, unsigned long agsnum, unsigned long translationtable, GthInput *input, unsigned int indentlevel, GthOutput *out) { gth_indent(out->outfp, indentlevel); gt_file_xprintf(out->outfp, "\n"); indentlevel++; /* output AGS line */ xml_outputAGSline(ags, agsnum, indentlevel, out->outfp); /* output SCR line */ xml_outputSCRline(ags, indentlevel, out->outfp); /* output exon/intron lines */ xml_output_exon_intron_lines(ags, indentlevel, out->outfp); /* output PGS lines */ xml_outputPGSlines(ags->alignments, indentlevel, out->outfp); /* output 3-phase translation */ gt_outputtranslationandorf(pglnum, ags, agsnum, translationtable, input, indentlevel, out); indentlevel--; gth_indent(out->outfp, indentlevel); gt_file_xprintf(out->outfp, "\n"); } static void xml_show_pgl(GthPGL *pgl, unsigned long pglnum, unsigned long translationtable, GthInput *input, unsigned int indentlevel, GthOutput *out) { unsigned long i; gth_indent(out->outfp, indentlevel); gt_file_xprintf(out->outfp, "\n"); indentlevel++; gth_indent(out->outfp, indentlevel); gt_file_xprintf(out->outfp, "\n", pglnum + OUTPUTOFFSET, SHOWSTRAND(gth_pgl_is_forward(pgl)), SHOWGENPOS(gth_pgl_is_forward(pgl), gth_pgl_total_length(pgl), gth_pgl_genomic_offset(pgl), pgl->maxrange.start), SHOWGENPOS(gth_pgl_is_forward(pgl), gth_pgl_total_length(pgl), gth_pgl_genomic_offset(pgl), pgl->maxrange.end)); for (i = 0; i < gth_pgl_num_of_ags(pgl); i++) { xml_show_ags(gth_pgl_get_ags(pgl, i), pglnum, i, translationtable, input, indentlevel, out); } indentlevel--; gth_indent(out->outfp, indentlevel); gt_file_xprintf(out->outfp, "\n"); } static void xml_pgl_visitor_preface(GthPGLVisitor *pgl_visitor, GT_UNUSED unsigned long num_of_pgls) { GthXMLPGLVisitor *visitor = xml_pgl_visitor_cast(pgl_visitor); gth_indent(visitor->out->outfp, visitor->indentlevel); gt_file_xprintf(visitor->out->outfp, "\n"); } static void xml_pgl_visitor_visit_pgl(GthPGLVisitor *pgl_visitor, GthPGL *pgl, unsigned long pglnum) { GthXMLPGLVisitor *visitor = xml_pgl_visitor_cast(pgl_visitor); gt_assert(pgl); xml_show_pgl(pgl, pglnum, visitor->translationtable, visitor->input, visitor->indentlevel, visitor->out); } static void xml_pgl_visitor_trailer(GthPGLVisitor *pgl_visitor) { GthXMLPGLVisitor *visitor = xml_pgl_visitor_cast(pgl_visitor); gth_indent(visitor->out->outfp, visitor->indentlevel); gt_file_xprintf(visitor->out->outfp, "\n"); } const GthPGLVisitorClass* gth_xml_pgl_visitor_class() { static const GthPGLVisitorClass pglvc = { sizeof (GthXMLPGLVisitor), NULL, xml_pgl_visitor_preface, NULL, xml_pgl_visitor_visit_pgl, xml_pgl_visitor_trailer }; return &pglvc; } GthPGLVisitor* gth_xml_pgl_visitor_new(GthInput *input, unsigned long translationtable, unsigned int indentlevel, GthOutput *out) { GthPGLVisitor *pgl_visitor = gth_pgl_visitor_create(gth_xml_pgl_visitor_class()); GthXMLPGLVisitor *visitor = xml_pgl_visitor_cast(pgl_visitor); visitor->input = input; visitor->translationtable = translationtable; visitor->indentlevel = indentlevel; visitor->out = out; return pgl_visitor; } genometools-1.5.1/src/gth/xml_pgl_visitor.h000066400000000000000000000027121211610345200210110ustar00rootroot00000000000000/* Copyright (c) 2008-2009 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef XML_PGL_VISITOR_H #define XML_PGL_VISITOR_H #include "gth/input.h" #include "gth/pgl_visitor.h" /* implements the ``spliced alignment visitor'' interface */ typedef struct GthXMLPGLVisitor GthXMLPGLVisitor; const GthPGLVisitorClass* gth_xml_pgl_visitor_class(void); GthPGLVisitor* gth_xml_pgl_visitor_new(GthInput*, unsigned long translationtable, unsigned int indentlevel, GthOutput*); #endif genometools-1.5.1/src/gtlua/000077500000000000000000000000001211610345200157475ustar00rootroot00000000000000genometools-1.5.1/src/gtlua/alphabet_lua.c000066400000000000000000000111021211610345200205270ustar00rootroot00000000000000 /* Copyright (c) 2007-2009 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "lauxlib.h" #include "core/alphabet.h" #include "extended/luahelper.h" #include "gtlua/alphabet_lua.h" static int alphabet_lua_new_protein(lua_State *L) { GtAlphabet **alpha; gt_assert(L); alpha = lua_newuserdata(L, sizeof *alpha); gt_assert(alpha); *alpha = gt_alphabet_new_protein(); gt_assert(*alpha); luaL_getmetatable(L, ALPHABET_METATABLE); lua_setmetatable(L, -2); return 1; } static int alphabet_lua_new_empty(lua_State *L) { GtAlphabet **alpha; gt_assert(L); alpha = lua_newuserdata(L, sizeof *alpha); gt_assert(alpha); *alpha = gt_alphabet_new_empty(); gt_assert(*alpha); luaL_getmetatable(L, ALPHABET_METATABLE); lua_setmetatable(L, -2); return 1; } static int alphabet_lua_new_dna(lua_State *L) { GtAlphabet **alpha; gt_assert(L); alpha = lua_newuserdata(L, sizeof *alpha); gt_assert(alpha); *alpha = gt_alphabet_new_dna(); gt_assert(*alpha); luaL_getmetatable(L, ALPHABET_METATABLE); lua_setmetatable(L, -2); return 1; } static int alphabet_lua_add_mapping(lua_State *L) { GtAlphabet **alpha; const char *characters; alpha = check_alphabet(L, 1); characters = luaL_checkstring(L, 2); luaL_argcheck(L, strlen(characters), 2, "mapping must contain at least one character"); gt_alphabet_add_mapping(*alpha, characters); return 0; } static int alphabet_lua_add_wildcard(lua_State *L) { GtAlphabet **alpha; const char *wildcard; alpha = check_alphabet(L, 1); wildcard = luaL_checkstring(L, 2); luaL_argcheck(L, strlen(wildcard) == 1, 2, "wildcard string must have length 0"); gt_alphabet_add_wildcard(*alpha, wildcard[0]); return 0; } static int alphabet_lua_decode(lua_State *L) { GtAlphabet **alpha; unsigned int code; char character; alpha = check_alphabet(L, 1); code = luaL_checkinteger(L, 2); /* XXX: too restrictive, does not consider wildcards */ luaL_argcheck(L, code < gt_alphabet_size(*alpha), 2, "invalid code"); character = gt_alphabet_decode(*alpha, code); lua_pushlstring(L, &character, 1); return 1; } static int alphabet_lua_size(lua_State *L) { GtAlphabet **alpha; unsigned int size; alpha = check_alphabet(L, 1); size = gt_alphabet_size(*alpha); lua_pushinteger(L, size); return 1; } static int alphabet_lua_delete(lua_State *L) { GtAlphabet **alpha; alpha = check_alphabet(L, 1); gt_alphabet_delete(*alpha); return 0; } static const struct luaL_Reg alphabet_lib_f [] = { { "alphabet_new_dna", alphabet_lua_new_dna }, { "alphabet_new_protein", alphabet_lua_new_protein }, { "alphabet_new_empty", alphabet_lua_new_empty }, { NULL, NULL } }; static const struct luaL_Reg alphabet_lib_m [] = { { "add_mapping", alphabet_lua_add_mapping }, { "add_wildcard", alphabet_lua_add_wildcard }, { "decode", alphabet_lua_decode }, { "size", alphabet_lua_size }, { NULL, NULL } }; int gt_lua_open_alphabet(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, ALPHABET_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, alphabet_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, alphabet_lib_m); lua_pop(L, 1); luaL_register(L, "gt", alphabet_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } void gt_lua_alphabet_push(lua_State *L, GtAlphabet *alpha) { GtAlphabet **alphaptr; gt_assert(L && alpha); alphaptr = lua_newuserdata(L, sizeof (*alphaptr)); *alphaptr = alpha; luaL_getmetatable(L, ALPHABET_METATABLE); lua_setmetatable(L, -2); } genometools-1.5.1/src/gtlua/alphabet_lua.h000066400000000000000000000036741211610345200205530ustar00rootroot00000000000000/* Copyright (c) 2007-2009 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ALPHABET_LUA_H #define ALPHABET_LUA_H #include "lua.h" #include "core/alphabet.h" /* exports the Alphabet class to Lua: -- Return a new protein alphabet. function alphabet_new_protein() -- Return a new DNA alphabet. function alphabet_new_dna() -- Return an empty alphabet. function alphabet_new_empty() -- Add the mapping of all given to the given . -- The first character is the result of subsequent calls. function alphabet:add_mapping(characters) -- Add to . function alphabet:add_wildcard(characters) -- Return a string containing the decoded character of the number. function alphabet:decode(code) -- Return the size of as a number. function alphabet:size() */ int gt_lua_open_alphabet(lua_State*); /* Push a to Lua, takes ownership! */ void gt_lua_alphabet_push(lua_State*, GtAlphabet*); #define ALPHABET_METATABLE "GenomeTools.alphabet" #define check_alphabet(L, POS) \ (GtAlphabet**) luaL_checkudata(L, POS, ALPHABET_METATABLE) #endif genometools-1.5.1/src/gtlua/annotationsketch_lua.c000066400000000000000000000025411211610345200223320ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "gtlua/canvas_lua.h" #include "gtlua/diagram_lua.h" #include "gtlua/image_info_lua.h" #include "gtlua/layout_lua.h" #include "gtlua/annotationsketch_lua.h" int gt_lua_open_annotationsketch(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif gt_lua_open_canvas(L); gt_lua_open_diagram(L); gt_lua_open_imageinfo(L); gt_lua_open_layout(L); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/annotationsketch_lua.h000066400000000000000000000017501211610345200223400ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ANNOTATIONSKETCH_LUA_H #define ANNOTATIONSKETCH_LUA_H #include "lua.h" int gt_lua_open_annotationsketch(lua_State*); #endif genometools-1.5.1/src/gtlua/bittab_lua.c000066400000000000000000000102701211610345200202210ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "core/bittab.h" #include "core/error.h" #include "extended/luahelper.h" #include "gtlua/bittab_lua.h" #include "gtlua/gtcore_lua.h" #define BITTAB_METATABLE "GenomeTools.bittab" #define check_bittab(L, POS) \ (GtBittab**) luaL_checkudata(L, POS, BITTAB_METATABLE) static int bittab_lua_new(lua_State *L) { long num_of_bits; GtBittab **bittab; gt_assert(L); num_of_bits = luaL_checklong(L, 1); luaL_argcheck(L, num_of_bits > 0, 1, "must be > 0"); bittab = lua_newuserdata(L, sizeof (GtBittab*)); gt_assert(bittab); *bittab = gt_bittab_new(num_of_bits); luaL_getmetatable(L, BITTAB_METATABLE); lua_setmetatable(L, -2); return 1; } static void get_bittab_and_bit(lua_State *L, GtBittab ***bittab, long *bit) { *bittab = check_bittab(L, 1); *bit = luaL_checklong(L, 2); luaL_argcheck(L, *bit >= 0, 2, "bit number too small"); luaL_argcheck(L, *bit < gt_bittab_size(**bittab), 2, "bit number too large"); } static void get_two_bittabs(lua_State *L, GtBittab ***bt1, GtBittab ***bt2) { *bt1 = check_bittab(L, 1); *bt2 = check_bittab(L, 2); luaL_argcheck(L, gt_bittab_size(**bt1) == gt_bittab_size(**bt2), 1, "bittabs have different sizes"); } static int bittab_lua_set_bit(lua_State *L) { GtBittab **bittab; long bit; get_bittab_and_bit(L, &bittab, &bit); gt_bittab_set_bit(*bittab, bit); return 0; } static int bittab_lua_unset_bit(lua_State *L) { GtBittab **bittab; long bit; get_bittab_and_bit(L, &bittab, &bit); gt_bittab_unset_bit(*bittab, bit); return 0; } static int bittab_lua_complement(lua_State *L) { GtBittab **dest, **src; get_two_bittabs(L, &dest, &src); gt_bittab_complement(*dest, *src); return 0; } static int bittab_lua_equal(lua_State *L) { GtBittab **dest, **src; get_two_bittabs(L, &dest, &src); gt_bittab_equal(*dest, *src); return 0; } static int bittab_lua_and_equal(lua_State *L) { GtBittab **dest, **src; get_two_bittabs(L, &dest, &src); gt_bittab_and_equal(*dest, *src); return 0; } static int bittab_lua_bit_is_set(lua_State *L) { GtBittab **bittab; long bit; get_bittab_and_bit(L, &bittab, &bit); lua_pushboolean(L, gt_bittab_bit_is_set(*bittab, bit)); return 1; } static int bittab_lua_delete(lua_State *L) { GtBittab **bittab; bittab = check_bittab(L, 1); gt_bittab_delete(*bittab); return 0; } static const struct luaL_Reg bittab_lib_f [] = { { "bittab_new", bittab_lua_new }, { NULL, NULL } }; static const struct luaL_Reg bittab_lib_m [] = { { "set_bit", bittab_lua_set_bit }, { "unset_bit", bittab_lua_unset_bit }, { "complement", bittab_lua_complement }, { "equal", bittab_lua_equal}, { "and_equal", bittab_lua_and_equal}, { "bit_is_set", bittab_lua_bit_is_set}, { NULL, NULL } }; int gt_lua_open_bittab(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, BITTAB_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, bittab_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, bittab_lib_m); lua_pop(L, 1); luaL_register(L, "gt", bittab_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/bittab_lua.h000066400000000000000000000033211211610345200202250ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef BITTAB_LUA_H #define BITTAB_LUA_H #include "lua.h" /* exports the Bittab class to Lua: -- Returns a bittab with many bits. function bittab_new(num_of_bits) -- Set in . function bittab:set_bit(bit) -- Unset in . function bittab:unset_bit(bit) -- Store the complement of bittab in . -- and must have the same size. function bittab:complement(src) -- Set equal to bittab . -- and must have the same size. function bittab:equal(src) -- Set equal to the bitwise AND of and . -- and must have the same size. function bittab:and_equal(src) -- Returns true if is set in , false otherwise. function bittab:bit_is_set(bit) */ int gt_lua_open_bittab(lua_State*); #endif genometools-1.5.1/src/gtlua/canvas_lua.c000066400000000000000000000102161211610345200202270ustar00rootroot00000000000000/* Copyright (c) 2008 Sascha Steinbiss Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef WITHOUT_CAIRO #include "lauxlib.h" #include "annotationsketch/canvas_cairo_file.h" #include "annotationsketch/luastyle.h" #include "core/error.h" #include "extended/luahelper.h" #include "gtlua/canvas_lua.h" #include "gtlua/image_info_lua.h" static int canvas_cairo_file_lua_new_generic(lua_State *L, GtGraphicsOutType t) { GtCanvas **canvas; GtImageInfo **ii; unsigned int width, height; GtError *err; GtStyle *style; width = luaL_checkint(L, 1); height = luaL_checkint(L, 2); /* create canvas */ style = gt_lua_get_style_from_registry(L); canvas = lua_newuserdata(L, sizeof (GtCanvas*)); gt_assert(canvas); /* if a imageinfo object is passed, it must be correct type */ if (lua_isnil(L, 3)) { err = gt_error_new(); *canvas = gt_canvas_cairo_file_new(style, t, width, height, NULL, err); } else { ii = check_imageinfo(L, 3); err = gt_error_new(); *canvas = gt_canvas_cairo_file_new(style, t, width, height, *ii, err); } if (gt_error_is_set(err)) return gt_lua_error(L, err); gt_error_delete(err); luaL_getmetatable(L, CANVAS_METATABLE); lua_setmetatable(L, -2); return 1; } static int canvas_cairo_file_lua_new_pdf(lua_State *L) { return canvas_cairo_file_lua_new_generic(L, GT_GRAPHICS_PDF); } static int canvas_cairo_file_lua_new_png(lua_State *L) { return canvas_cairo_file_lua_new_generic(L, GT_GRAPHICS_PNG); } static int canvas_cairo_file_lua_new_svg(lua_State *L) { return canvas_cairo_file_lua_new_generic(L, GT_GRAPHICS_SVG); } static int canvas_cairo_file_lua_new_ps(lua_State *L) { return canvas_cairo_file_lua_new_generic(L, GT_GRAPHICS_PS); } static int canvas_cairo_file_lua_to_file(lua_State *L) { GtCanvas **canvas; GtCanvasCairoFile *ccf = NULL; GtError *err; const char *fn; int had_err = 0; canvas = check_canvas(L, 1); ccf = canvas_cairo_file_try_cast(*canvas); luaL_argcheck(L, ccf, 1, "must be a CanvasCairoFile object"); fn = luaL_checkstring(L, 2); gt_assert(canvas); err = gt_error_new(); had_err = gt_canvas_cairo_file_to_file(ccf, fn, err); if (had_err) return gt_lua_error(L, err); gt_error_delete(err); return 0; } static int canvas_lua_delete(lua_State *L) { GtCanvas **canvas; canvas = check_canvas(L, 1); gt_canvas_delete(*canvas); return 0; } static const struct luaL_Reg canvas_lib_f [] = { { "canvas_cairo_file_new_png", canvas_cairo_file_lua_new_png }, { "canvas_cairo_file_new_pdf", canvas_cairo_file_lua_new_pdf }, { "canvas_cairo_file_new_ps", canvas_cairo_file_lua_new_ps }, { "canvas_cairo_file_new_svg", canvas_cairo_file_lua_new_svg }, { NULL, NULL } }; static const struct luaL_Reg canvas_lib_m [] = { { "to_file", canvas_cairo_file_lua_to_file }, { NULL, NULL } }; int gt_lua_open_canvas(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, CANVAS_METATABLE); lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, canvas_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, canvas_lib_m); lua_pop(L, 1); luaL_register(L, "gt", canvas_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } #endif genometools-1.5.1/src/gtlua/canvas_lua.h000066400000000000000000000046711211610345200202440ustar00rootroot00000000000000/* Copyright (c) 2008 Sascha Steinbiss Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef CANVAS_LUA_H #define CANVAS_LUA_H #include "lua.h" /* exports the Canvas class to Lua: -- Return a Canvas object which acts as a PNG drawing surface of -- width to be passed to rendering functions as a visitor. -- An object is filled with coordinate information if given. -- If not needed, pass nil as . function canvas_cairo_file_new_png(width, imageinfo) -- Return a Canvas object which acts as a PDF drawing surface of -- width to be passed to rendering functions as a visitor. -- An object is filled with coordinate information if given. function canvas_cairo_file_new_pdf(width, imageinfo) -- Return a Canvas object which acts as a PS drawing surface of -- width to be passed to rendering functions as a visitor. -- An object is filled with coordinate information if given. function canvas_cairo_file_new_ps(width, imageinfo) -- Return a Canvas object which acts as a SVG drawing surface of -- width to be passed to rendering functions as a visitor. -- An object is filled with coordinate information if given. function canvas_cairo_file_new_svg(width, imageinfo) -- Creates an image file with the given which contains the -- contents of the canvas (only for objects created with -- ). function canvas:to_file(filename) */ int gt_lua_open_canvas(lua_State*); #define CANVAS_METATABLE "GenomeTools.canvas" #define check_canvas(L, POS) \ (GtCanvas**) luaL_checkudata(L, POS, CANVAS_METATABLE) #endif genometools-1.5.1/src/gtlua/cds_stream_lua.c000066400000000000000000000042211211610345200210770ustar00rootroot00000000000000/* Copyright (c) 2010 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "extended/cds_stream_api.h" #include "extended/luahelper.h" #include "gtlua/cds_stream_lua.h" #include "gtlua/genome_stream_lua.h" #include "gtlua/region_mapping_lua.h" static int cds_stream_lua_new(lua_State *L) { GtNodeStream **cds_stream, **in_stream; GtRegionMapping **region_mapping; in_stream = check_genome_stream(L, 1); region_mapping = check_region_mapping(L, 2); cds_stream = lua_newuserdata(L, sizeof (GtNodeStream*)); gt_assert(cds_stream); *cds_stream = gt_cds_stream_new(*in_stream, gt_region_mapping_ref(*region_mapping), 1, /* XXX */ "gtscript", true, /* XXX */ true, /* XXX */ false /* XXX */); luaL_getmetatable(L, GENOME_STREAM_METATABLE); lua_setmetatable(L, -2); return 1; } static const struct luaL_Reg cds_stream_lib_f [] = { { "cds_stream_new", cds_stream_lua_new }, { NULL, NULL } }; int gt_lua_open_cds_stream(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_register(L, "gt", cds_stream_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/cds_stream_lua.h000066400000000000000000000027261211610345200211140ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef CDS_STREAM_LUA_H #define CDS_STREAM_LUA_H #include "lua.h" /* exports the CDSStream class (which implements the GtNodeStream) interface to Lua: -- Returns a new CDS (coding sequence) stream object (a genome stream) which -- uses genome stream as input. -- The CDS stream adds CDS features to exon features in . -- The given is used to map the sequence regions given in -- to the actual sequence files necessary for computing the -- coding sequences. function cds_stream_new(in_stream, region_mapping) */ int gt_lua_open_cds_stream(lua_State*); #endif genometools-1.5.1/src/gtlua/csa_stream_lua.c000066400000000000000000000036571211610345200211100ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "extended/csa_stream_api.h" #include "extended/luahelper.h" #include "gtlua/genome_stream_lua.h" #include "gtlua/csa_stream_lua.h" static int csa_stream_lua_new(lua_State *L) { GtNodeStream **csa_stream, **in_stream; long join_length; in_stream = check_genome_stream(L, 1); if (lua_gettop(L) >= 2) { join_length = luaL_checklong(L, 2); luaL_argcheck(L, join_length >= 0, 2, "must be >= 0"); } else join_length = GT_DEFAULT_JOIN_LENGTH; csa_stream = lua_newuserdata(L, sizeof (GtNodeStream*)); gt_assert(csa_stream); *csa_stream = gt_csa_stream_new(*in_stream, join_length); luaL_getmetatable(L, GENOME_STREAM_METATABLE); lua_setmetatable(L, -2); return 1; } static const struct luaL_Reg csa_stream_lib_f [] = { { "csa_stream_new", csa_stream_lua_new }, { NULL, NULL } }; int gt_lua_open_csa_stream(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_register(L, "gt", csa_stream_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/csa_stream_lua.h000066400000000000000000000026621211610345200211100ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef CSA_STREAM_LUA_H #define CSA_STREAM_LUA_H #include "lua.h" /* exports the CSAStream class (which implements the GtNodeStream) interface to Lua: -- Returns a new CSA (consensus spliced alignment) stream object (a genome -- stream) which uses genome stream as input. -- The CSA stream replaces spliced alignments with computed consensus spliced -- alignments. -- The optional parameters sets the length for the spliced alignment -- clustering (default: 300). function csa_stream_new(in_stream, join) */ int gt_lua_open_csa_stream(lua_State*); #endif genometools-1.5.1/src/gtlua/diagram_lua.c000066400000000000000000000122451211610345200203640ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef WITHOUT_CAIRO #include "lauxlib.h" #include "annotationsketch/canvas.h" #include "annotationsketch/diagram.h" #include "extended/feature_index.h" #include "annotationsketch/luastyle.h" #include "core/error.h" #include "extended/luahelper.h" #include "gtlua/canvas_lua.h" #include "gtlua/diagram_lua.h" #include "gtlua/feature_index_lua.h" #include "gtlua/genome_node_lua.h" #include "gtlua/range_lua.h" #include "core/unused_api.h" static int diagram_lua_new(lua_State *L) { GtDiagram **diagram; GtFeatureIndex **feature_index; GtRange *range; GtError *err; const char *seqid; GtStyle *style; bool has_seqid; /* get feature index */ feature_index = check_feature_index(L, 1); /* get seqid */ seqid = luaL_checkstring(L, 2); err = gt_error_new(); if (gt_feature_index_has_seqid(*feature_index, &has_seqid, seqid, err)) return gt_lua_error(L, err); gt_error_delete(err); luaL_argcheck(L, has_seqid, 2, "feature index does not contain the given sequence id"); /* get range */ range = check_range(L, 3); /* create diagram */ style = gt_lua_get_style_from_registry(L); diagram = lua_newuserdata(L, sizeof (GtDiagram*)); gt_assert(diagram); err = gt_error_new(); *diagram = gt_diagram_new(*feature_index, seqid, range, style, err); if (gt_error_is_set(err)) return gt_lua_error(L, err); gt_error_delete(err); luaL_getmetatable(L, DIAGRAM_METATABLE); lua_setmetatable(L, -2); return 1; } static GtArray* genome_node_table_to_array(lua_State *L) { lua_Integer i = 1; GtArray *nodes; GtGenomeNode **gn; GT_UNUSED const char *msg; bool error; /* make sure we got a table as first argument */ luaL_checktype(L, 1, LUA_TTABLE); /* traverse table and save the ranges */ nodes = gt_array_new(sizeof (GtGenomeNode*)); lua_pushinteger(L, i); lua_gettable(L, 1); while (!lua_isnil(L, -1)) { error = false; gn = lua_touserdata(L, -1); if (gn && lua_getmetatable(L, -1)) { lua_getfield(L, LUA_REGISTRYINDEX, GENOME_NODE_METATABLE); if (lua_rawequal(L, -1, -2)) { lua_pop(L, 2); /* remove both metatables */ gt_array_add(nodes, *gn); } else error = true; } else error = true; if (error) { /* we have a non-GenomeNode in the table */ msg = lua_pushfstring(L, "expected %s as type of table entry %d", GENOME_NODE_METATABLE, i); gt_array_delete(nodes); lua_error(L); } i++; lua_pop(L, 1); /* pop last result */ lua_pushinteger(L, i); lua_gettable(L, 1); } return nodes; } static int diagram_lua_new_from_array(lua_State *L) { GtDiagram **diagram; GtArray *nodes; GtRange range; GtStyle *style; /* get array */ nodes = genome_node_table_to_array(L); /* get range */ range.start = luaL_checklong(L, 2); range.end = luaL_checklong(L, 3); luaL_argcheck(L, range.start > 0, 2, "must be > 0"); luaL_argcheck(L, range.end > 0, 3, "must be > 0"); luaL_argcheck(L, range.start <= range.end, 2, "must be <= endpos"); /* create diagram */ style = gt_lua_get_style_from_registry(L); diagram = lua_newuserdata(L, sizeof (GtDiagram*)); gt_assert(diagram); *diagram = gt_diagram_new_from_array(nodes, &range, style); gt_array_delete(nodes); luaL_getmetatable(L, DIAGRAM_METATABLE); lua_setmetatable(L, -2); return 1; } static int diagram_lua_delete(lua_State *L) { GtDiagram **diagram; diagram = check_diagram(L, 1); gt_diagram_delete(*diagram); return 0; } static const struct luaL_Reg diagram_lib_f [] = { { "diagram_new", diagram_lua_new }, { "diagram_new_from_array", diagram_lua_new_from_array }, { NULL, NULL } }; static const struct luaL_Reg diagram_lib_m [] = { { NULL, NULL } }; int gt_lua_open_diagram(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, DIAGRAM_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, diagram_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, diagram_lib_m); lua_pop(L, 1); luaL_register(L, "gt", diagram_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } #endif genometools-1.5.1/src/gtlua/diagram_lua.h000066400000000000000000000031631211610345200203700ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef DIAGRAM_LUA_H #define DIAGRAM_LUA_H #include "lua.h" /* exports the Diagram class to Lua: -- Return a diagram object which contains the genome nodes given in -- in the given of the sequence region with sequence -- ID . function diagram_new(feature_index, range, seqid) -- Return a diagram object which contains the genome nodes given in -- . The range from to determines the visible -- region and should include the nodes in . function diagram_new_from_array(array, startpos, endpos) */ int gt_lua_open_diagram(lua_State*); #define DIAGRAM_METATABLE "GenomeTools.diagram" #define check_diagram(L, POS) \ (GtDiagram**) luaL_checkudata(L, POS, DIAGRAM_METATABLE) #endif genometools-1.5.1/src/gtlua/encseq_lua.c000066400000000000000000000734711211610345200202460ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "lauxlib.h" #include "core/error.h" #include "core/ma.h" #include "core/str_array.h" #include "core/unused_api.h" #include "extended/luahelper.h" #include "gtlua/alphabet_lua.h" #include "gtlua/encseq_lua.h" #include "gtlua/gtcore_lua.h" #define ENCSEQ_BUFFER_METATABLE "GenomeTools.encseq_buffer" /* GtEncseqReader */ typedef struct { unsigned char *buf; unsigned long length; } GtEncseqExtractedBuffer; static void gt_lua_encseq_reader_push(lua_State *L, GtEncseqReader *reader) { GtEncseqReader **readerptr; readerptr = lua_newuserdata(L, sizeof (GtEncseqReader*)); *readerptr = reader; luaL_getmetatable(L, ENCSEQ_READER_METATABLE); lua_setmetatable(L, -2); } static int encseq_reader_lua_next_encoded_char(lua_State *L) { GtEncseqReader **reader; unsigned char cc; reader = check_encseq_reader(L, 1); cc = gt_encseq_reader_next_encoded_char(*reader); lua_pushnumber(L, cc); return 1; } static int encseq_reader_lua_next_decoded_char(lua_State *L) { GtEncseqReader **reader; char cc; reader = check_encseq_reader(L, 1); cc = gt_encseq_reader_next_decoded_char(*reader); lua_pushlstring(L, &cc, sizeof (char)); return 1; } static int encseq_reader_lua_delete(lua_State *L) { GtEncseqReader **reader; reader = check_encseq_reader(L, 1); gt_encseq_reader_delete(*reader); return 0; } static int encseq_reader_lua_reinit_with_readmode(lua_State *L) { GtEncseq **encseq; GtEncseqReader **reader; unsigned long startpos; GtReadmode readmode; reader = check_encseq_reader(L, 1); encseq = check_encseq(L, 2); readmode = luaL_checknumber(L, 3); startpos = luaL_checknumber(L, 4); luaL_argcheck(L, startpos < gt_encseq_total_length(*encseq), 4, "cannot exceed total length of encoded sequence"); gt_encseq_reader_reinit_with_readmode(*reader, *encseq, readmode, startpos); return 0; } /* GtEncseq */ static int encseq_lua_total_length(lua_State *L) { GtEncseq **encseq; encseq = check_encseq(L, 1); lua_pushnumber(L, gt_encseq_total_length(*encseq)); return 1; } static int encseq_lua_num_of_sequences(lua_State *L) { GtEncseq **encseq; encseq = check_encseq(L, 1); lua_pushnumber(L, gt_encseq_num_of_sequences(*encseq)); return 1; } static int encseq_lua_get_encoded_char(lua_State *L) { GtEncseq **encseq; unsigned long pos; int readmode; unsigned char cc; encseq = check_encseq(L, 1); pos = luaL_checknumber(L, 2); readmode = luaL_checknumber(L, 3); luaL_argcheck(L, pos < gt_encseq_total_length(*encseq), 2, "cannot exceed total length of encoded sequence"); cc = gt_encseq_get_encoded_char(*encseq, pos, readmode); lua_pushnumber(L, cc); return 1; } static int encseq_lua_get_decoded_char(lua_State *L) { GtEncseq **encseq; unsigned long pos; int readmode; char cc; encseq = check_encseq(L, 1); pos = luaL_checknumber(L, 2); readmode = luaL_checknumber(L, 3); luaL_argcheck(L, pos < gt_encseq_total_length(*encseq), 2, "cannot exceed total length of encoded sequence"); cc = gt_encseq_get_decoded_char(*encseq, pos, readmode); lua_pushlstring(L, &cc, sizeof (char)); return 1; } static inline void push_values_as_table(lua_State *L, unsigned char *buf, unsigned long length) { unsigned long i; gt_assert(buf && length > 0); lua_newtable(L); for (i = 0; i < length; i++) { /* lua_pushinteger(L, i+1); */ /* in Lua we index from 1 on */ lua_pushinteger(L, buf[i]); lua_rawseti(L, -2, i+1); } } static int encseq_lua_push_buffer(lua_State *L, unsigned char *arr, unsigned long len) { GtEncseqExtractedBuffer** buf; buf = lua_newuserdata(L, sizeof (GtEncseqExtractedBuffer*)); gt_assert(buf); *buf = gt_malloc(sizeof (GtEncseqExtractedBuffer)); gt_assert(*buf); (*buf)->buf = arr; (*buf)->length = len; luaL_getmetatable(L, ENCSEQ_BUFFER_METATABLE); lua_setmetatable(L, -2); return 1; } static int encseq_lua_index_buffer(lua_State *L) { GtEncseqExtractedBuffer **buf = luaL_checkudata(L, 1, ENCSEQ_BUFFER_METATABLE); unsigned long num = luaL_checknumber(L, 2); luaL_argcheck(L, num <= (*buf)->length, 2, "must be inside extracted substring"); lua_pushinteger(L, ((*buf)->buf)[num-1]); return 1; } static int encseq_lua_delete_buffer(lua_State *L) { GtEncseqExtractedBuffer **buf = luaL_checkudata(L, 1, ENCSEQ_BUFFER_METATABLE); gt_free((*buf)->buf); gt_free(*buf); return 0; } static int encseq_lua_extract_encoded(lua_State *L) { GtEncseq **encseq; unsigned long from, to; unsigned char *string; encseq = check_encseq(L, 1); from = luaL_checknumber(L, 2); to = luaL_checknumber(L, 3); luaL_argcheck(L, from <= to, 2, "must be <= range endposition"); luaL_argcheck(L, to < gt_encseq_total_length(*encseq), 3, "cannot exceed total length of encoded sequence"); string = gt_malloc((to - from + 1) * sizeof (unsigned char)); gt_encseq_extract_encoded(*encseq, string, from, to); encseq_lua_push_buffer(L, string, (to - from + 1)); return 1; } static int encseq_lua_extract_decoded(lua_State *L) { GtEncseq **encseq; unsigned long from, to; char *string; encseq = check_encseq(L, 1); from = luaL_checknumber(L, 2); to = luaL_checknumber(L, 3); luaL_argcheck(L, from <= to, 2, "must be <= range endposition"); luaL_argcheck(L, to < gt_encseq_total_length(*encseq), 3, "cannot exceed total length of encoded sequence"); string = gt_malloc((to - from + 1) * sizeof (char)); gt_encseq_extract_decoded(*encseq, string, from, to); lua_pushlstring(L, string, (to - from + 1)); gt_free(string); return 1; } static int encseq_lua_seqlength(lua_State *L) { GtEncseq **encseq; unsigned long pos; encseq = check_encseq(L, 1); pos = luaL_checknumber(L, 2); luaL_argcheck(L, pos < gt_encseq_num_of_sequences(*encseq), 2, "cannot exceed number of sequences"); lua_pushnumber(L, gt_encseq_seqlength(*encseq, pos)); return 1; } static int encseq_lua_seqstartpos(lua_State *L) { GtEncseq **encseq; unsigned long pos; encseq = check_encseq(L, 1); pos = luaL_checknumber(L, 2); luaL_argcheck(L, pos < gt_encseq_num_of_sequences(*encseq), 2, "cannot exceed number of sequences"); lua_pushnumber(L, gt_encseq_seqstartpos(*encseq, pos)); return 1; } static int encseq_lua_seqnum(lua_State *L) { GtEncseq **encseq; unsigned long pos; encseq = check_encseq(L, 1); pos = luaL_checknumber(L, 2); luaL_argcheck(L, pos < gt_encseq_total_length(*encseq), 2, "cannot exceed total length of encoded sequence"); lua_pushnumber(L, gt_encseq_seqnum(*encseq, pos)); return 1; } static int encseq_lua_has_multiseq_support(lua_State *L) { GtEncseq **encseq; encseq = check_encseq(L, 1); lua_pushboolean(L, gt_encseq_has_multiseq_support(*encseq)); return 1; } static int encseq_lua_has_description_support(lua_State *L) { GtEncseq **encseq; encseq = check_encseq(L, 1); lua_pushboolean(L, gt_encseq_has_description_support(*encseq)); return 1; } static int encseq_lua_description(lua_State *L) { GtEncseq **encseq; unsigned long seqno, desclen; const char *string; encseq = check_encseq(L, 1); seqno = luaL_checknumber(L, 2); luaL_argcheck(L, seqno < gt_encseq_num_of_sequences(*encseq), 2, "cannot exceed number of sequences"); string = gt_encseq_description(*encseq, &desclen, seqno); lua_pushlstring(L, string, desclen); return 1; } static int encseq_lua_num_of_files(lua_State *L) { GtEncseq **encseq; encseq = check_encseq(L, 1); lua_pushnumber(L, gt_encseq_num_of_files(*encseq)); return 1; } static int encseq_lua_effective_filelength(lua_State *L) { GtEncseq **encseq; unsigned long fileno; encseq = check_encseq(L, 1); fileno = luaL_checknumber(L, 2); luaL_argcheck(L, fileno < gt_encseq_num_of_files(*encseq), 2, "cannot exceed number of files"); lua_pushnumber(L, gt_encseq_effective_filelength(*encseq, fileno)); return 1; } static int encseq_lua_filestartpos(lua_State *L) { GtEncseq **encseq; unsigned long fileno; encseq = check_encseq(L, 1); fileno = luaL_checknumber(L, 2); luaL_argcheck(L, fileno < gt_encseq_num_of_files(*encseq), 2, "cannot exceed number of files"); lua_pushnumber(L, gt_encseq_filestartpos(*encseq, fileno)); return 1; } static int encseq_lua_filenum(lua_State *L) { GtEncseq **encseq; unsigned long pos; encseq = check_encseq(L, 1); pos = luaL_checknumber(L, 2); luaL_argcheck(L, pos < gt_encseq_total_length(*encseq), 2, "cannot exceed total length of encoded sequence"); lua_pushnumber(L, gt_encseq_filenum(*encseq, pos)); return 1; } static int encseq_lua_filenames(lua_State *L) { GtEncseq **encseq; const GtStrArray *filenames; unsigned long i; encseq = check_encseq(L, 1); filenames = gt_encseq_filenames(*encseq); lua_newtable(L); for (i = 0; i < gt_str_array_size(filenames); i++) { lua_pushinteger(L, i+1); /* in Lua we index from 1 on */ lua_pushstring(L, gt_str_array_get(filenames, i)); lua_rawset(L, -3); } return 1; } static int encseq_lua_alphabet(lua_State *L) { GtEncseq **encseq; GtAlphabet *alpha; encseq = check_encseq(L, 1); gt_assert(*encseq); alpha = gt_alphabet_ref(gt_encseq_alphabet(*encseq)); gt_lua_alphabet_push(L, alpha); return 1; } static int encseq_lua_mirror(lua_State *L) { GtEncseq **encseq; GtError *err = gt_error_new(); encseq = check_encseq(L, 1); gt_assert(*encseq); luaL_argcheck(L, !gt_encseq_is_mirrored(*encseq), 1, "is already mirrored"); if (gt_encseq_mirror(*encseq, err) != 0) gt_lua_error(L, err); gt_error_delete(err); return 0; } static int encseq_lua_unmirror(lua_State *L) { GtEncseq **encseq; encseq = check_encseq(L, 1); gt_assert(*encseq); luaL_argcheck(L, gt_encseq_is_mirrored(*encseq), 1, "is not mirrored"); gt_encseq_unmirror(*encseq); return 0; } static int encseq_lua_is_mirrored(lua_State *L) { GtEncseq **encseq; encseq = check_encseq(L, 1); gt_assert(*encseq); lua_pushboolean(L, gt_encseq_is_mirrored(*encseq)); return 1; } static int encseq_lua_create_reader_with_readmode(lua_State *L) { GtEncseq **encseq; GtEncseqReader *reader; unsigned long startpos; GtReadmode readmode; encseq = check_encseq(L, 1); readmode = luaL_checknumber(L, 2); startpos = luaL_checknumber(L, 3); luaL_argcheck(L, startpos < gt_encseq_total_length(*encseq), 3, "cannot exceed total length of encoded sequence"); reader = gt_encseq_create_reader_with_readmode(*encseq, readmode, startpos); gt_assert(reader); gt_lua_encseq_reader_push(L, reader); return 1; } static int encseq_lua_delete(lua_State *L) { GtEncseq **encseq; encseq = check_encseq(L, 1); gt_encseq_delete(*encseq); return 0; } /* GtEncseqEncoder */ static int encseq_encoder_lua_new(lua_State *L) { GtEncseqEncoder **encoder; encoder = lua_newuserdata(L, sizeof (GtEncseqEncoder*)); gt_assert(encoder); *encoder = gt_encseq_encoder_new(); gt_assert(*encoder); luaL_getmetatable(L, ENCSEQ_ENCODER_METATABLE); lua_setmetatable(L, -2); return 1; } static int encseq_encoder_lua_use_representation(lua_State *L) { GtEncseqEncoder **encoder; const char *repr; GtError *err; encoder = check_encseq_encoder(L, 1); repr = luaL_checkstring(L, 2); gt_assert(*encoder); err = gt_error_new(); if (gt_encseq_encoder_use_representation(*encoder, repr, err) != 0) gt_lua_error(L, err); gt_error_delete(err); return 0; } static int encseq_encoder_lua_representation(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); lua_pushstring(L, gt_str_get(gt_encseq_encoder_representation(*encoder))); return 1; } static int encseq_encoder_lua_use_symbolmap_file(lua_State *L) { GtEncseqEncoder **encoder; const char *smapfile; GtError *err; encoder = check_encseq_encoder(L, 1); smapfile = luaL_checkstring(L, 2); gt_assert(*encoder); err = gt_error_new(); if (gt_encseq_encoder_use_symbolmap_file(*encoder, smapfile, err) != 0) gt_lua_error(L, err); gt_error_delete(err); return 0; } static int encseq_encoder_lua_symbolmap_file(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); lua_pushstring(L, gt_encseq_encoder_symbolmap_file(*encoder)); return 1; } static int encseq_encoder_lua_enable_description_support(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); gt_encseq_encoder_enable_description_support(*encoder); return 0; } static int encseq_encoder_lua_disable_description_support(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); gt_encseq_encoder_disable_description_support(*encoder); return 0; } static int encseq_encoder_lua_enable_multiseq_support(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); gt_encseq_encoder_enable_multiseq_support(*encoder); return 0; } static int encseq_encoder_lua_disable_multiseq_support(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); gt_encseq_encoder_disable_multiseq_support(*encoder); return 0; } static int encseq_encoder_lua_enable_lossless_support(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); gt_encseq_encoder_enable_lossless_support(*encoder); return 0; } static int encseq_encoder_lua_disable_lossless_support(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); gt_encseq_encoder_disable_lossless_support(*encoder); return 0; } static int encseq_encoder_lua_set_input_dna(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); gt_encseq_encoder_set_input_dna(*encoder); return 0; } static int encseq_encoder_lua_is_input_dna(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); lua_pushboolean(L, gt_encseq_encoder_is_input_dna(*encoder)); return 1; } static int encseq_encoder_lua_set_input_protein(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); gt_encseq_encoder_set_input_protein(*encoder); return 0; } static int encseq_encoder_lua_is_input_protein(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_assert(*encoder); lua_pushboolean(L, gt_encseq_encoder_is_input_protein(*encoder)); return 1; } static int encseq_encoder_lua_encode(lua_State *L) { GtEncseqEncoder **encoder; GtStrArray *seqfiles = gt_str_array_new(); GtError *err; const char *indexname; encoder = check_encseq_encoder(L, 1); err = gt_error_new(); if (gt_lua_get_table_as_strarray(L, 2, seqfiles, err) != 0) { gt_str_array_delete(seqfiles); gt_lua_error(L, err); } indexname = luaL_checkstring(L, 3); gt_assert(*encoder); if (gt_encseq_encoder_encode(*encoder, seqfiles, indexname, err) != 0) { gt_str_array_delete(seqfiles); gt_lua_error(L, err); } gt_str_array_delete(seqfiles); gt_error_delete(err); return 0; } static int encseq_encoder_lua_delete(lua_State *L) { GtEncseqEncoder **encoder; encoder = check_encseq_encoder(L, 1); gt_encseq_encoder_delete(*encoder); return 0; } /* GtEncseqLoader */ static int encseq_loader_lua_new(lua_State *L) { GtEncseqLoader **loader; loader = lua_newuserdata(L, sizeof (GtEncseqLoader*)); gt_assert(loader); *loader = gt_encseq_loader_new(); gt_assert(*loader); luaL_getmetatable(L, ENCSEQ_LOADER_METATABLE); lua_setmetatable(L, -2); return 1; } static int encseq_loader_lua_enable_autosupport(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_enable_autosupport(*loader); return 0; } static int encseq_loader_lua_disable_autosupport(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_disable_autosupport(*loader); return 0; } static int encseq_loader_lua_require_description_support(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_require_description_support(*loader); return 0; } static int encseq_loader_lua_drop_description_support(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_drop_description_support(*loader); return 0; } static int encseq_loader_lua_require_multiseq_support(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_require_multiseq_support(*loader); return 0; } static int encseq_loader_lua_drop_multiseq_support(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_drop_multiseq_support(*loader); return 0; } static int encseq_loader_lua_require_lossless_support(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_require_lossless_support(*loader); return 0; } static int encseq_loader_lua_drop_lossless_support(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_drop_lossless_support(*loader); return 0; } static int encseq_loader_lua_mirror(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_mirror(*loader); return 0; } static int encseq_loader_lua_do_not_mirror(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_do_not_mirror(*loader); return 0; } static int encseq_loader_lua_load(lua_State *L) { GtEncseqLoader **loader; const char *indexname; GtError *err = gt_error_new(); GtEncseq *encseq; loader = check_encseq_loader(L, 1); indexname = luaL_checkstring(L, 2); gt_assert(*loader); encseq = gt_encseq_loader_load(*loader, indexname, err); if (encseq == NULL) gt_lua_error(L, err); else { gt_lua_encseq_push(L, encseq); } gt_error_delete(err); return 1; } static int encseq_loader_lua_delete(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_encseq_loader_delete(*loader); return 0; } /* GtEncseqBuilder */ static int encseq_builder_lua_new(lua_State *L) { GtEncseqBuilder **builder; GtAlphabet **alpha; builder = lua_newuserdata(L, sizeof (GtEncseqBuilder*)); alpha = check_alphabet(L, 1); gt_assert(builder && *alpha); *builder = gt_encseq_builder_new(*alpha); gt_assert(*builder); luaL_getmetatable(L, ENCSEQ_BUILDER_METATABLE); lua_setmetatable(L, -2); return 1; } static int encseq_builder_lua_enable_description_support(lua_State *L) { GtEncseqBuilder **builder; builder = check_encseq_builder(L, 1); gt_assert(*builder); gt_encseq_builder_enable_description_support(*builder); return 0; } static int encseq_builder_lua_disable_description_support(lua_State *L) { GtEncseqBuilder **builder; builder = check_encseq_builder(L, 1); gt_assert(*builder); gt_encseq_builder_disable_description_support(*builder); return 0; } static int encseq_builder_lua_enable_multiseq_support(lua_State *L) { GtEncseqBuilder **builder; builder = check_encseq_builder(L, 1); gt_assert(*builder); gt_encseq_builder_enable_multiseq_support(*builder); return 0; } static int encseq_builder_lua_disable_multiseq_support(lua_State *L) { GtEncseqBuilder **builder; builder = check_encseq_builder(L, 1); gt_assert(*builder); gt_encseq_builder_disable_multiseq_support(*builder); return 0; } static int encseq_builder_lua_add_str(lua_State *L) { GtEncseqBuilder **builder; const char *str, *desc; builder = check_encseq_builder(L, 1); str = luaL_checkstring(L, 2); if (lua_isnil(L, 3)) desc = ""; else desc = luaL_checkstring(L, 3); gt_assert(*builder); gt_encseq_builder_add_cstr(*builder, str, strlen(str), desc); return 0; } static inline int gt_lua_get_table_as_uchararray(lua_State *L, int index, unsigned char **outarray, unsigned long *arrlen, GtError *err) { int had_err = 0, val; unsigned long i; unsigned char *arr; if (!lua_istable(L, index)) { gt_error_set(err, "argument is not a table"); return -1; } *arrlen = lua_objlen(L, index); arr = gt_malloc(*arrlen * sizeof (unsigned char)); for (i = 1; i <= *arrlen; i++) { lua_rawgeti(L, index, i); if (!lua_isnumber(L, -1)) { had_err = -1; gt_error_set(err, "input contains non-numeric value"); break; } if (!had_err && (val = lua_tointeger(L, -1)) > UCHAR_MAX) { had_err = -1; gt_error_set(err, "input contains oversized encoded value"); } if (!had_err) arr[i-1] = (unsigned char) val; lua_pop(L, 1); } *outarray = arr; return 0; } static int encseq_builder_lua_add_encoded(lua_State *L) { GtEncseqBuilder **builder; const char *desc; unsigned char *arr = NULL; unsigned long arrlen = 0; GtError *err; builder = check_encseq_builder(L, 1); err = gt_error_new(); if (gt_lua_get_table_as_uchararray(L, 2, &arr, &arrlen, err) != 0) { gt_lua_error(L, err); } if (lua_isnil(L, 3)) desc = ""; else desc = luaL_checkstring(L, 3); gt_assert(*builder); gt_encseq_builder_add_encoded_own(*builder, arr, arrlen, desc); gt_free(arr); gt_error_delete(err); return 0; } static int encseq_builder_lua_reset(lua_State *L) { GtEncseqBuilder **builder; builder = check_encseq_builder(L, 1); gt_encseq_builder_reset(*builder); return 0; } static int encseq_builder_lua_build(lua_State *L) { GtEncseqBuilder **builder; GtEncseq *encseq; GtError *err; builder = check_encseq_builder(L, 1); err = gt_error_new(); encseq = gt_encseq_builder_build(*builder, err); if (encseq == NULL) { gt_lua_error(L, err); } else gt_lua_encseq_push(L, encseq); gt_error_delete(err); return 1; } static int encseq_builder_lua_delete(lua_State *L) { GtEncseqBuilder **builder; builder = check_encseq_builder(L, 1); gt_encseq_builder_delete(*builder); return 0; } static const struct luaL_Reg encseq_lib_f [] = { { "encseq_encoder_new", encseq_encoder_lua_new }, { "encseq_loader_new", encseq_loader_lua_new }, { "encseq_builder_new", encseq_builder_lua_new }, { NULL, NULL } }; static const struct luaL_Reg encseq_reader_lib_m [] = { { "next_encoded_char", encseq_reader_lua_next_encoded_char }, { "next_decoded_char", encseq_reader_lua_next_decoded_char }, { "reinit_with_readmode", encseq_reader_lua_reinit_with_readmode }, { NULL, NULL } }; static const struct luaL_Reg encseq_encoder_lib_m [] = { { "use_representation", encseq_encoder_lua_use_representation }, { "representation", encseq_encoder_lua_representation }, { "use_symbolmap_file", encseq_encoder_lua_use_symbolmap_file }, { "symbolmap_file", encseq_encoder_lua_symbolmap_file }, { "enable_description_support", encseq_encoder_lua_enable_description_support }, { "disable_description_support", encseq_encoder_lua_disable_description_support }, { "enable_multiseq_support", encseq_encoder_lua_enable_multiseq_support }, { "disable_multiseq_support", encseq_encoder_lua_disable_multiseq_support }, { "enable_lossless_support", encseq_encoder_lua_enable_lossless_support }, { "disable_lossless_support", encseq_encoder_lua_disable_lossless_support }, { "set_input_dna", encseq_encoder_lua_set_input_dna }, { "is_input_dna", encseq_encoder_lua_is_input_dna }, { "set_input_protein", encseq_encoder_lua_set_input_protein }, { "is_input_protein", encseq_encoder_lua_is_input_protein }, { "encode", encseq_encoder_lua_encode }, { NULL, NULL } }; static const struct luaL_Reg encseq_loader_lib_m [] = { { "enable_autosupport", encseq_loader_lua_enable_autosupport }, { "disable_autosupport", encseq_loader_lua_disable_autosupport }, { "require_description_support", encseq_loader_lua_require_description_support }, { "drop_description_support", encseq_loader_lua_drop_description_support }, { "require_multiseq_support", encseq_loader_lua_require_multiseq_support }, { "drop_multiseq_support", encseq_loader_lua_drop_multiseq_support }, { "require_lossless_support", encseq_loader_lua_require_lossless_support }, { "drop_lossless_support", encseq_loader_lua_drop_lossless_support }, { "mirror", encseq_loader_lua_mirror }, { "do_not_mirror", encseq_loader_lua_do_not_mirror }, { "load", encseq_loader_lua_load }, { NULL, NULL } }; static const struct luaL_Reg encseq_builder_lib_m [] = { { "enable_description_support", encseq_builder_lua_enable_description_support }, { "disable_description_support", encseq_builder_lua_disable_description_support }, { "enable_multiseq_support", encseq_builder_lua_enable_multiseq_support }, { "disable_multiseq_support", encseq_builder_lua_disable_multiseq_support }, { "add_string", encseq_builder_lua_add_str }, { "add_encoded", encseq_builder_lua_add_encoded }, { "build", encseq_builder_lua_build }, { "reset", encseq_builder_lua_reset }, { NULL, NULL } }; static const struct luaL_Reg encseq_lib_m [] = { { "total_length", encseq_lua_total_length }, { "num_of_sequences", encseq_lua_num_of_sequences }, { "get_encoded_char", encseq_lua_get_encoded_char }, { "get_decoded_char", encseq_lua_get_decoded_char }, { "create_reader_with_readmode", encseq_lua_create_reader_with_readmode }, { "extract_encoded", encseq_lua_extract_encoded }, { "extract_decoded", encseq_lua_extract_decoded }, { "seqlength", encseq_lua_seqlength }, { "seqstartpos", encseq_lua_seqstartpos }, { "seqnum", encseq_lua_seqnum }, { "has_multiseq_support", encseq_lua_has_multiseq_support }, { "has_description_support", encseq_lua_has_description_support }, { "description", encseq_lua_description }, { "filenames", encseq_lua_filenames }, { "num_of_files", encseq_lua_num_of_files }, { "effective_filelength", encseq_lua_effective_filelength }, { "filestartpos", encseq_lua_filestartpos }, { "filenum", encseq_lua_filenum }, { "alphabet", encseq_lua_alphabet }, { "mirror", encseq_lua_mirror }, { "unmirror", encseq_lua_unmirror }, { "is_mirrored", encseq_lua_is_mirrored }, { NULL, NULL } }; int gt_lua_open_encseq(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, ENCSEQ_METATABLE); lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); lua_pushstring(L, "__gc"); lua_pushcfunction(L, encseq_lua_delete); lua_settable(L, -3); luaL_register(L, NULL, encseq_lib_m); gt_lua_export_metatable(L, ENCSEQ_METATABLE); luaL_newmetatable(L, ENCSEQ_BUFFER_METATABLE); lua_pushcfunction(L, encseq_lua_index_buffer); lua_setfield(L, -2, "__index"); lua_pushstring(L, "__gc"); lua_pushcfunction(L, encseq_lua_delete_buffer); lua_settable(L, -3); lua_pop(L, 1); luaL_newmetatable(L, ENCSEQ_READER_METATABLE); lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); lua_pushstring(L, "__gc"); lua_pushcfunction(L, encseq_reader_lua_delete); lua_settable(L, -3); luaL_register(L, NULL, encseq_reader_lib_m); gt_lua_export_metatable(L, ENCSEQ_READER_METATABLE); luaL_newmetatable(L, ENCSEQ_ENCODER_METATABLE); lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); lua_pushstring(L, "__gc"); lua_pushcfunction(L, encseq_encoder_lua_delete); lua_settable(L, -3); luaL_register(L, NULL, encseq_encoder_lib_m); gt_lua_export_metatable(L, ENCSEQ_ENCODER_METATABLE); luaL_newmetatable(L, ENCSEQ_LOADER_METATABLE); lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); lua_pushstring(L, "__gc"); lua_pushcfunction(L, encseq_loader_lua_delete); lua_settable(L, -3); luaL_register(L, NULL, encseq_loader_lib_m); gt_lua_export_metatable(L, ENCSEQ_LOADER_METATABLE); luaL_newmetatable(L, ENCSEQ_BUILDER_METATABLE); lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); lua_pushstring(L, "__gc"); lua_pushcfunction(L, encseq_builder_lua_delete); lua_settable(L, -3); luaL_register(L, NULL, encseq_builder_lib_m); gt_lua_export_metatable(L, ENCSEQ_BUILDER_METATABLE); luaL_register(L, "gt", encseq_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } void gt_lua_encseq_push(lua_State *L, GtEncseq *encseq) { GtEncseq **encseqptr; gt_assert(L); encseqptr = lua_newuserdata(L, sizeof (GtEncseq*)); *encseqptr = encseq; luaL_getmetatable(L, ENCSEQ_METATABLE); lua_setmetatable(L, -2); } genometools-1.5.1/src/gtlua/encseq_lua.h000066400000000000000000000040221211610345200202350ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ENCSEQ_LUA_H #define ENCSEQ_LUA_H #include "lua.h" #include "core/encseq_api.h" /* exports the Encseq class to Lua: (XXX: document me) -- Returns a XXX with XXX. function ...(...) */ int gt_lua_open_encseq(lua_State*); /* Push a to Lua, takes ownership! */ void gt_lua_encseq_push(lua_State*, GtEncseq*); #define ENCSEQ_METATABLE "GenomeTools.encseq" #define check_encseq(L, POS) \ (GtEncseq**) luaL_checkudata(L, POS, ENCSEQ_METATABLE) #define ENCSEQ_ENCODER_METATABLE "GenomeTools.encseq_encoder" #define check_encseq_encoder(L, POS) \ (GtEncseqEncoder**) luaL_checkudata(L, POS, ENCSEQ_ENCODER_METATABLE) #define ENCSEQ_LOADER_METATABLE "GenomeTools.encseq_loader" #define check_encseq_loader(L, POS) \ (GtEncseqLoader**) luaL_checkudata(L, POS, ENCSEQ_LOADER_METATABLE) #define ENCSEQ_BUILDER_METATABLE "GenomeTools.encseq_builder" #define check_encseq_builder(L, POS) \ (GtEncseqBuilder**) luaL_checkudata(L, POS, ENCSEQ_BUILDER_METATABLE) #define ENCSEQ_READER_METATABLE "GenomeTools.encseq_reader" #define check_encseq_reader(L, POS) \ (GtEncseqReader**) luaL_checkudata(L, POS, ENCSEQ_READER_METATABLE) #endif genometools-1.5.1/src/gtlua/feature_index_lua.c000066400000000000000000000203741211610345200216040ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "core/unused_api.h" #include "core/ma.h" #include "extended/feature_index_memory_api.h" #include "extended/feature_node.h" #include "extended/luahelper.h" #include "gtlua/feature_index_lua.h" #include "gtlua/genome_node_lua.h" #include "gtlua/range_lua.h" static int feature_index_memory_lua_new(lua_State *L) { GtFeatureIndex **feature_index; feature_index = lua_newuserdata(L, sizeof (GtFeatureIndex*)); gt_assert(feature_index); *feature_index = gt_feature_index_memory_new(); luaL_getmetatable(L, FEATURE_INDEX_METATABLE); lua_setmetatable(L, -2); return 1; } static int feature_index_lua_add_region_node(lua_State *L) { GtFeatureIndex **fi; GtGenomeNode **gn; GtRegionNode *rn; GtError *err; gt_assert(L); fi = check_feature_index(L, 1); gn = check_genome_node(L, 2); rn = gt_region_node_try_cast(*gn); luaL_argcheck(L, rn, 2, "not a region node"); err = gt_error_new(); if (gt_feature_index_add_region_node(*fi, rn, err)) return gt_lua_error(L, err); gt_error_delete(err); return 0; } static int feature_index_lua_add_gff3file(lua_State *L) { GtFeatureIndex **fi; const char *filename; GtError *err; gt_assert(L); fi = check_feature_index(L, 1); filename = luaL_checkstring(L, 2); err = gt_error_new(); if (gt_feature_index_add_gff3file(*fi, filename, err)) return gt_lua_error(L, err); gt_error_delete(err); return 0; } static int feature_index_lua_add_feature_node(lua_State *L) { GtFeatureIndex **fi; GtGenomeNode **gn; GtFeatureNode *fn; GtStr *seqid; GtError *err; bool has_seqid; gt_assert(L); fi = check_feature_index(L, 1); gn = check_genome_node(L, 2); fn = gt_feature_node_cast(*gn); luaL_argcheck(L, fn, 2, "not a feature node"); seqid = gt_genome_node_get_seqid(*gn); luaL_argcheck(L, seqid, 2, "feature does not have a sequence id"); err = gt_error_new(); if (gt_feature_index_has_seqid(*fi, &has_seqid, gt_str_get(seqid), err)) return gt_lua_error(L, err); gt_error_delete(err); luaL_argcheck(L, has_seqid, 2, "feature index does not contain corresponding sequence region"); err = gt_error_new(); if (gt_feature_index_add_feature_node(*fi, fn, err)) return gt_lua_error(L, err); gt_error_delete(err); return 0; } static void push_features_as_table(lua_State *L, GtArray *features) { unsigned long i; if (features && gt_array_size(features)) { /* push table containing feature references onto the stack */ lua_newtable(L); for (i = 0; i < gt_array_size(features); i++) { lua_pushinteger(L, i+1); /* in Lua we index from 1 on */ gt_lua_genome_node_push(L, gt_genome_node_ref(*(GtGenomeNode**) gt_array_get(features, i))); lua_rawset(L, -3); } } else lua_pushnil(L); } static int feature_index_lua_get_features_for_seqid(lua_State *L) { GtFeatureIndex **feature_index; const char *seqid; GtArray *features; GtError *err; feature_index = check_feature_index(L, 1); seqid = luaL_checkstring(L, 2); err = gt_error_new(); features = gt_feature_index_get_features_for_seqid(*feature_index, seqid, err); if (!features) return gt_lua_error(L, err); gt_error_delete(err); push_features_as_table(L, features); gt_array_delete(features); return 1; } static int feature_index_lua_get_features_for_range(lua_State *L) { GtFeatureIndex **feature_index; const char *seqid; GtRange *range; GtError *err; bool has_seqid; GtArray *features; GT_UNUSED int had_err; feature_index = check_feature_index(L, 1); seqid = luaL_checkstring(L, 2); err = gt_error_new(); if (gt_feature_index_has_seqid(*feature_index, &has_seqid, seqid, err)) return gt_lua_error(L, err); gt_error_delete(err); luaL_argcheck(L, has_seqid, 2, "feature_index does not contain seqid"); range = check_range(L, 3); features = gt_array_new(sizeof (GtGenomeNode*)); err = gt_error_new(); had_err = gt_feature_index_get_features_for_range(*feature_index, features, seqid, range, err); if (had_err) return gt_lua_error(L, err); gt_error_delete(err); push_features_as_table(L, features); gt_array_delete(features); return 1; } static int feature_index_lua_get_first_seqid(lua_State *L) { GtFeatureIndex **feature_index; char *seqid; GtError *err; feature_index = check_feature_index(L, 1); err = gt_error_new(); seqid = gt_feature_index_get_first_seqid(*feature_index, err); if (gt_error_is_set(err)) return gt_lua_error(L, err); gt_error_delete(err); if (seqid) { lua_pushstring(L, seqid); gt_free(seqid); } else lua_pushnil(L); return 1; } static int feature_index_lua_get_seqids(lua_State *L) { GtFeatureIndex **feature_index; GtStrArray *seqids; GtError *err; feature_index = check_feature_index(L, 1); err = gt_error_new(); seqids = gt_feature_index_get_seqids(*feature_index, err); if (!seqids) return gt_lua_error(L, err); gt_error_delete(err); /* push table containing sequence ids onto the stack */ gt_lua_push_strarray_as_table(L, seqids); gt_str_array_delete(seqids); return 1; } static int feature_index_lua_get_range_for_seqid(lua_State *L) { GtFeatureIndex **feature_index; const char *seqid; GtError *err; GtRange range; bool has_seqid; feature_index = check_feature_index(L, 1); seqid = luaL_checkstring(L, 2); err = gt_error_new(); if (gt_feature_index_has_seqid(*feature_index, &has_seqid, seqid, err)) return gt_lua_error(L, err); gt_error_delete(err); luaL_argcheck(L, has_seqid, 2, "feature_index does not contain seqid"); err = gt_error_new(); if (gt_feature_index_get_range_for_seqid(*feature_index, &range, seqid, err)) return gt_lua_error(L, err); gt_error_delete(err); return gt_lua_range_push(L, range); } static int feature_index_lua_delete(lua_State *L) { GtFeatureIndex **feature_index = check_feature_index(L, 1); gt_feature_index_delete(*feature_index); return 0; } static const struct luaL_Reg feature_index_lib_f [] = { { "feature_index_memory_new", feature_index_memory_lua_new }, { NULL, NULL } }; static const struct luaL_Reg feature_index_lib_m [] = { { "add_region_node", feature_index_lua_add_region_node }, { "add_feature_node", feature_index_lua_add_feature_node }, { "add_gff3file", feature_index_lua_add_gff3file }, { "get_features_for_seqid", feature_index_lua_get_features_for_seqid }, { "get_features_for_range", feature_index_lua_get_features_for_range }, { "get_first_seqid", feature_index_lua_get_first_seqid }, { "get_seqids", feature_index_lua_get_seqids }, { "get_range_for_seqid", feature_index_lua_get_range_for_seqid }, { NULL, NULL } }; int gt_lua_open_feature_index(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, FEATURE_INDEX_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, feature_index_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, feature_index_lib_m); gt_lua_export_metatable(L, FEATURE_INDEX_METATABLE); luaL_register(L, "gt", feature_index_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/feature_index_lua.h000066400000000000000000000045331211610345200216100ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FEATURE_INDEX_LUA_H #define FEATURE_INDEX_LUA_H #include "lua.h" /* exports the FeatureIndex class to Lua: -- Returns a new FeatureIndex object storing the index in memory. function feature_index_memory_new() -- Add all features from all sequence regions contained in to -- . function feature_index:add_gff3file(gff3file) -- Add to . function feature_index:add_region_node(region_node) -- Add to , implicitly creating sequence -- region if not present before. function feature_index:add_feature_node(feature_node) -- Returns the feature nodes for sequence ID in an array. function feature_index:get_features_for_seqid(seqid) -- Returns the genome features for sequence ID within in an -- array. function feature_index:get_features_for_range(seqid, range) -- Returns the first sequence ID stored in . function feature_index:get_first_seqid() -- Returns an array containins all sequence IDs stored in . function feature_index:get_seqids() -- Returns the range covered by features of sequence ID in -- . function feature_index:get_range_for_seqid(seqid) */ int gt_lua_open_feature_index(lua_State*); #define FEATURE_INDEX_METATABLE "GenomeTools.feature_index" #define check_feature_index(L, POS) \ (GtFeatureIndex**) luaL_checkudata(L, POS, FEATURE_INDEX_METATABLE) #endif genometools-1.5.1/src/gtlua/feature_node_iterator_lua.c000066400000000000000000000071611211610345200233320ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "extended/feature_node_iterator_api.h" #include "gtlua/genome_node_lua.h" #include "gtlua/feature_node_iterator_lua.h" #define GENOME_NODE_ITERATOR_METATABLE "GenomeTools_genome.node_iterator" #define check_gt_feature_node_iterator(L, POS) \ (GtFeatureNodeIterator**) \ luaL_checkudata(L, POS, GENOME_NODE_ITERATOR_METATABLE) static int feature_node_iterator_lua_new(lua_State *L) { GtFeatureNodeIterator **fni; GtFeatureNode **fn; gt_assert(L); fn = (GtFeatureNode**) check_genome_node(L, 1); fni = lua_newuserdata(L, sizeof (GtFeatureNodeIterator*)); gt_assert(fni); *fni = gt_feature_node_iterator_new(*fn); luaL_getmetatable(L, GENOME_NODE_ITERATOR_METATABLE); lua_setmetatable(L, -2); return 1; } static int feature_node_iterator_lua_new_direct(lua_State *L) { GtFeatureNodeIterator **fni; GtFeatureNode **fn; gt_assert(L); fn = (GtFeatureNode**) check_genome_node(L, 1); fni = lua_newuserdata(L, sizeof (GtFeatureNodeIterator*)); gt_assert(fni); *fni = gt_feature_node_iterator_new_direct(*fn); luaL_getmetatable(L, GENOME_NODE_ITERATOR_METATABLE); lua_setmetatable(L, -2); return 1; } static int feature_node_iterator_lua_next(lua_State *L) { GtFeatureNodeIterator **fni; GtFeatureNode *fn; fni = check_gt_feature_node_iterator(L, 1); fn = gt_feature_node_iterator_next(*fni); if (fn) gt_lua_genome_node_push(L, gt_genome_node_ref((GtGenomeNode*) fn)); else lua_pushnil(L); return 1; } static int feature_node_iterator_lua_delete(lua_State *L) { GtFeatureNodeIterator **gt_feature_node_iterator; gt_feature_node_iterator = check_gt_feature_node_iterator(L, 1); gt_feature_node_iterator_delete(*gt_feature_node_iterator); return 0; } static const struct luaL_Reg feature_node_iterator_lib_f [] = { { "feature_node_iterator_new", feature_node_iterator_lua_new }, { "feature_node_iterator_new_direct", feature_node_iterator_lua_new_direct }, { NULL, NULL } }; static const struct luaL_Reg feature_node_iterator_lib_m [] = { { "next", feature_node_iterator_lua_next }, { NULL, NULL } }; int gt_lua_open_feature_node_iterator(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, GENOME_NODE_ITERATOR_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, feature_node_iterator_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, feature_node_iterator_lib_m); lua_pop(L, 1); luaL_register(L, "gt", feature_node_iterator_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/feature_node_iterator_lua.h000066400000000000000000000030331211610345200233310ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FEATURE_NODE_ITERATOR_LUA_H #define FEATURE_NODE_ITERATOR_LUA_H #include "lua.h" /* exports the GenomeNodeIterator class to Lua: -- Returns a new genome node iterator which performs a depth-first traversel -- of (including itself). function feature_node_iterator_new(genome_node) -- Returns a noew genome node iterator wich iterates over all direct children -- of (without itself). function feature_node_iterator_new_direct(genome_node) -- Returns the next genome node for or nil. function feature_node_iterator:next() */ int gt_lua_open_feature_node_iterator(lua_State*); #endif genometools-1.5.1/src/gtlua/feature_stream_lua.c000066400000000000000000000036221211610345200217650ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "extended/feature_stream_api.h" #include "extended/luahelper.h" #include "gtlua/genome_stream_lua.h" #include "gtlua/feature_index_lua.h" #include "gtlua/feature_stream_lua.h" static int feature_stream_lua_new(lua_State *L) { GtNodeStream **feature_stream, **in_stream; GtFeatureIndex **feature_index; feature_stream = lua_newuserdata(L, sizeof (GtNodeStream*)); gt_assert(feature_stream); in_stream = check_genome_stream(L, 1); feature_index = check_feature_index(L, 2); *feature_stream = gt_feature_stream_new(*in_stream, *feature_index); luaL_getmetatable(L, GENOME_STREAM_METATABLE); lua_setmetatable(L, -2); return 1; } static const struct luaL_Reg feature_stream_lib_f [] = { { "feature_stream_new", feature_stream_lua_new }, { NULL, NULL } }; int gt_lua_open_feature_stream(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_register(L, "gt", feature_stream_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/feature_stream_lua.h000066400000000000000000000025711211610345200217740ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FEATURE_STREAM_LUA_H #define FEATURE_STREAM_LUA_H #include "lua.h" /* exports the FeatureStream class (which implements the GtNodeStream) interface to Lua: -- Returns a new feature stream object (a genome stream) over -- which uses the genome stream as input. -- That is, all genome nodes which are pulled through the feature stream are -- added to the . function feature_stream_new(in_stream, feature_index) */ int gt_lua_open_feature_stream(lua_State*); #endif genometools-1.5.1/src/gtlua/feature_visitor_lua.c000066400000000000000000000035351211610345200221740ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "extended/feature_visitor.h" #include "extended/luahelper.h" #include "gtlua/feature_index_lua.h" #include "gtlua/feature_visitor_lua.h" #include "gtlua/genome_visitor_lua.h" static int feature_visitor_lua_new(lua_State *L) { GtNodeVisitor **feature_visitor; GtFeatureIndex **feature_index; feature_visitor = lua_newuserdata(L, sizeof (GtNodeVisitor*)); gt_assert(feature_visitor); feature_index = check_feature_index(L, 1); *feature_visitor = gt_feature_visitor_new(*feature_index); luaL_getmetatable(L, GENOME_VISITOR_METATABLE); lua_setmetatable(L, -2); return 1; } static const struct luaL_Reg feature_visitor_lib_f [] = { { "feature_visitor_new", feature_visitor_lua_new }, { NULL, NULL } }; int gt_lua_open_feature_visitor(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_register(L, "gt", feature_visitor_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/feature_visitor_lua.h000066400000000000000000000024501211610345200221740ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FEATURE_VISITOR_LUA_H #define FEATURE_VISITOR_LUA_H #include "lua.h" /* exports the FeatureVisitor class (which implements the GtNodeVisitor) interface to Lua: -- Returns a new feature visitor object over . That is, all -- genome nodes which are visited by the feature visitor are added to the -- . function feature_visitor_new(feature_index) */ int gt_lua_open_feature_visitor(lua_State*); #endif genometools-1.5.1/src/gtlua/genome_node_lua.c000066400000000000000000000274651211610345200212510ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "core/assert_api.h" #include "extended/extract_feature_sequence.h" #include "extended/genome_node.h" #include "extended/gff3_output.h" #include "extended/luahelper.h" #include "gtlua/genome_node_lua.h" #include "gtlua/genome_visitor_lua.h" #include "gtlua/gt_lua.h" #include "gtlua/range_lua.h" #include "gtlua/region_mapping_lua.h" static int feature_node_lua_new(lua_State *L) { GtGenomeNode **gf; unsigned long startpos, endpos; GtStrand strand; const char *seqid, *type, *strand_str; size_t length; GtStr *seqid_str; gt_assert(L); /* get/check parameters */ seqid = luaL_checkstring(L, 1); type = luaL_checkstring(L, 2); startpos = luaL_checklong(L, 3); endpos = luaL_checklong(L, 4); luaL_argcheck(L, startpos > 0, 3, "must be > 0"); luaL_argcheck(L, endpos > 0, 4, "must be > 0"); luaL_argcheck(L, startpos <= endpos, 3, "must be <= endpos"); strand_str = luaL_checklstring(L, 5, &length); luaL_argcheck(L, length == 1, 5, "strand string must have length 1"); luaL_argcheck(L, (strand = gt_strand_get(strand_str[0])) != GT_NUM_OF_STRAND_TYPES, 5, "invalid strand"); /* construct object */ gf = lua_newuserdata(L, sizeof (GtGenomeNode*)); seqid_str = gt_str_new_cstr(seqid); *gf = gt_feature_node_new(seqid_str, type, startpos, endpos, strand); gt_str_delete(seqid_str); gt_assert(*gf); luaL_getmetatable(L, GENOME_NODE_METATABLE); lua_setmetatable(L, -2); return 1; } static int sequence_region_lua_new(lua_State *L) { GtGenomeNode **rn; unsigned long startpos, endpos; const char *seqid; GtStr *seqid_str; gt_assert(L); /* get_check parameters */ seqid = luaL_checkstring(L, 1); startpos = luaL_checklong(L, 2); endpos = luaL_checklong(L, 3); luaL_argcheck(L, startpos > 0, 2, "must be > 0"); luaL_argcheck(L, endpos > 0, 3, "must be > 0"); luaL_argcheck(L, startpos <= endpos, 2, "must be <= endpos"); /* construct object */ rn = lua_newuserdata(L, sizeof (GtGenomeNode*)); seqid_str = gt_str_new_cstr(seqid); *rn = gt_region_node_new(seqid_str, startpos, endpos); gt_str_delete(seqid_str); gt_assert(*rn); luaL_getmetatable(L, GENOME_NODE_METATABLE); lua_setmetatable(L, -2); return 1; } static int genome_node_lua_get_filename(lua_State *L) { GtGenomeNode **gn = check_genome_node(L, 1); lua_pushstring(L, gt_genome_node_get_filename(*gn)); return 1; } static int genome_node_lua_get_range(lua_State *L) { GtGenomeNode **gn = check_genome_node(L, 1); return gt_lua_range_push(L, gt_genome_node_get_range(*gn)); } static int genome_node_lua_get_seqid(lua_State *L) { GtStr *seqid; GtGenomeNode **gn = check_genome_node(L, 1); if ((seqid = gt_genome_node_get_seqid(*gn))) lua_pushstring(L, gt_str_get(seqid)); else lua_pushnil(L); return 1; } static int feature_node_lua_get_strand(lua_State *L) { GtGenomeNode **gn = check_genome_node(L, 1); GtFeatureNode *fn; char strand_char[2]; /* make sure we get a feature node */ fn = gt_feature_node_try_cast(*gn); luaL_argcheck(L, fn, 1, "not a feature node"); strand_char[0] = GT_STRAND_CHARS[gt_feature_node_get_strand(fn)]; strand_char[1] = '\0'; lua_pushstring(L, strand_char); return 1; } static int feature_node_lua_get_source(lua_State *L) { GtGenomeNode **gn = check_genome_node(L, 1); GtFeatureNode *fn; /* make sure we get a feature node */ fn = gt_feature_node_try_cast(*gn); luaL_argcheck(L, fn, 1, "not a feature node"); lua_pushstring(L, gt_feature_node_get_source(fn)); return 1; } static int feature_node_lua_get_score(lua_State *L) { GtGenomeNode **gn = check_genome_node(L, 1); GtFeatureNode *fn; /* make sure we get a feature node */ fn = gt_feature_node_try_cast(*gn); luaL_argcheck(L, fn, 1, "not a feature node"); if (gt_feature_node_score_is_defined(fn)) lua_pushnumber(L, gt_feature_node_get_score(fn)); else lua_pushnil(L); return 1; } static int feature_node_lua_get_attribute(lua_State *L) { GtGenomeNode **gn = check_genome_node(L, 1); const char *attr = NULL, *attrval = NULL; attr = luaL_checkstring(L, 2); GtFeatureNode *fn; /* make sure we get a feature node */ fn = gt_feature_node_try_cast(*gn); luaL_argcheck(L, fn, 1, "not a feature node"); attrval = gt_feature_node_get_attribute(fn, attr); if (attrval) lua_pushstring(L, attrval); else lua_pushnil(L); return 1; } static int feature_node_lua_get_exons(lua_State *L) { GtGenomeNode **gn = check_genome_node(L, 1); GtArray *exons = gt_array_new(sizeof (GtGenomeNode*)); unsigned long i = 0; GtFeatureNode *fn; /* make sure we get a feature node */ fn = gt_feature_node_try_cast(*gn); luaL_argcheck(L, fn, 1, "not a feature node"); gt_feature_node_get_exons(fn, exons); lua_newtable(L); for (i = 0; i < gt_array_size(exons); i++) { lua_pushnumber(L, i+1); gt_lua_genome_node_push(L, (GtGenomeNode*) gt_genome_node_ref(*(GtGenomeNode**) gt_array_get(exons, i))); lua_rawset(L, -3); } gt_array_delete(exons); return 1; } static int feature_node_lua_set_source(lua_State *L) { const char *source; GtStr *source_str; GtGenomeNode **gn = check_genome_node(L, 1); GtFeatureNode *fn; /* make sure we get a feature node */ fn = gt_feature_node_try_cast(*gn); luaL_argcheck(L, fn, 1, "not a feature node"); source = luaL_checkstring(L, 2); source_str = gt_str_new_cstr(source); gt_feature_node_set_source(fn, source_str); gt_str_delete(source_str); return 0; } static int genome_node_lua_accept(lua_State *L) { GtGenomeNode **gn; GtNodeVisitor **gv; GtError *err; gn = check_genome_node(L, 1); gv = check_genome_visitor(L, 2); err = gt_error_new(); if (gt_genome_node_accept(*gn, *gv, err)) return gt_lua_error(L, err); gt_error_delete(err); return 0; } static int genome_node_lua_add_child(lua_State *L) { GtGenomeNode **parent, **child; GtFeatureNode *pf, *cf; parent = check_genome_node(L, 1); child = check_genome_node(L, 2); pf = gt_feature_node_try_cast(*parent); luaL_argcheck(L, pf, 1, "not a feature node"); cf = gt_feature_node_try_cast(*child); luaL_argcheck(L, cf, 2, "not a feature node"); gt_feature_node_add_child(pf, (GtFeatureNode*) gt_genome_node_ref((GtGenomeNode*) cf)); return 0; } static int genome_node_lua_mark(lua_State *L) { GtGenomeNode **gn = check_genome_node(L, 1); gt_feature_node_mark(gt_feature_node_cast(*gn)); return 0; } static int genome_node_lua_is_marked(lua_State *L) { GtGenomeNode **gn = check_genome_node(L, 1); lua_pushboolean(L, gt_feature_node_is_marked(gt_feature_node_cast(*gn))); return 1; } static int genome_node_lua_contains_marked(lua_State *L) { GtGenomeNode **gn; gn = check_genome_node(L, 1); lua_pushboolean(L, gt_feature_node_contains_marked(gt_feature_node_cast(*gn))); return 1; } static int feature_node_lua_output_leading(lua_State *L) { GtGenomeNode **gn; GtFeatureNode *fn; gn = check_genome_node(L, 1); /* make sure we get a feature node */ fn = gt_feature_node_try_cast(*gn); luaL_argcheck(L, fn, 1, "not a feature node"); gt_gff3_output_leading(fn, NULL); return 0; } static int feature_node_lua_get_type(lua_State *L) { GtGenomeNode **gn; GtFeatureNode *fn; gn = check_genome_node(L, 1); /* make sure we get a feature node */ fn = gt_feature_node_try_cast(*gn); luaL_argcheck(L, fn, 1, "not a feature node"); lua_pushstring(L, gt_feature_node_get_type(fn)); return 1; } static int feature_node_lua_extract_sequence(lua_State *L) { GtGenomeNode **gn; GtFeatureNode *fn; const char *type; bool join; GtRegionMapping **region_mapping; GtStr *sequence; GtError *err; gn = check_genome_node(L, 1); /* make sure we get a feature node */ fn = gt_feature_node_try_cast(*gn); luaL_argcheck(L, fn, 1, "not a feature node"); type = luaL_checkstring(L, 2); join = lua_toboolean(L, 3); region_mapping = check_region_mapping(L, 4); err = gt_error_new(); sequence = gt_str_new(); if (gt_extract_feature_sequence(sequence, *gn, type, join, NULL, NULL, *region_mapping, err)) { gt_str_delete(sequence); return gt_lua_error(L, err); } if (gt_str_length(sequence)) lua_pushstring(L, gt_str_get(sequence)); else lua_pushnil(L); gt_str_delete(sequence); gt_error_delete(err); return 1; } static int feature_node_lua_remove_leaf(lua_State *L) { GtGenomeNode **parent, **leaf; GtFeatureNode *pf, *lf; parent = check_genome_node(L, 1); leaf = check_genome_node(L, 2); pf = gt_feature_node_try_cast(*parent); luaL_argcheck(L, pf, 1, "not a feature node"); lf = gt_feature_node_try_cast(*leaf); luaL_argcheck(L, lf, 2, "not a feature node"); gt_feature_node_remove_leaf(pf, lf); gt_genome_node_delete((GtGenomeNode*) lf); return 0; } static int genome_node_lua_delete(lua_State *L) { GtGenomeNode **gn; gn = check_genome_node(L, 1); gt_genome_node_delete(*gn); return 0; } static const struct luaL_Reg genome_node_lib_f [] = { { "feature_node_new", feature_node_lua_new }, { "region_node_new", sequence_region_lua_new }, { NULL, NULL } }; static const struct luaL_Reg genome_node_lib_m [] = { { "get_filename", genome_node_lua_get_filename }, { "get_range", genome_node_lua_get_range }, { "get_seqid", genome_node_lua_get_seqid }, { "get_strand", feature_node_lua_get_strand }, { "get_source", feature_node_lua_get_source }, { "set_source", feature_node_lua_set_source }, { "get_score", feature_node_lua_get_score }, { "get_attribute", feature_node_lua_get_attribute }, { "get_exons", feature_node_lua_get_exons }, { "accept", genome_node_lua_accept }, { "add_child", genome_node_lua_add_child }, { "mark", genome_node_lua_mark }, { "is_marked", genome_node_lua_is_marked }, { "contains_marked", genome_node_lua_contains_marked }, { "output_leading", feature_node_lua_output_leading }, { "get_type", feature_node_lua_get_type }, { "extract_sequence", feature_node_lua_extract_sequence }, { "remove_leaf", feature_node_lua_remove_leaf }, { NULL, NULL } }; int gt_lua_open_genome_node(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, GENOME_NODE_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, genome_node_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, genome_node_lib_m); gt_lua_export_metatable(L, GENOME_NODE_METATABLE); luaL_register(L, "gt", genome_node_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } void gt_lua_genome_node_push(lua_State *L, GtGenomeNode *gn) { GtGenomeNode **gn_lua; gt_assert(L && gn); gn_lua = lua_newuserdata(L, sizeof (GtGenomeNode**)); *gn_lua = gn; luaL_getmetatable(L, GENOME_NODE_METATABLE); lua_setmetatable(L, -2); } genometools-1.5.1/src/gtlua/genome_node_lua.h000066400000000000000000000073141211610345200212450ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GENOME_NODE_LUA_H #define GENOME_NODE_LUA_H #include "lua.h" #include "extended/genome_node.h" /* exports the GenomeNode interface and its implementors to Lua: -- Returns the filename of . function genome_node:get_filename() -- Returns the range of . function genome_node:get_range() -- Returns the sequence id of . function genome_node:get_seqid() -- Accept . function genome_node:accept(genome_visitor) -- Make the parent of . function genome_node:is_part_of_genome_node(child_node) -- Mark . function genome_node:mark() -- Returns true if is marked, false otherwise. function genome_node:is_marked() -- Returns true if contains a marked node, false otherwise. function genome_node:contains_marked() */ /* exports the FeatureNode class to Lua: -- Create a new feature node on sequence with ID and type -- which lies from to on strand . -- and always refer to the forward strand, therefore -- has to bo smaller or equal than . function feature_node_new(seqid, type, startpos, endpos, strand) -- Returns the strand of . function feature_node:get_strand() -- Returns the source of . function feature_node:get_source() -- Returns the score of . function feature_node:get_score() -- Returns the attribute of . function feature_node:get_attribute(attrib) -- Returns an array containing the exons of . function feature_node:get_exons() -- Set the source of to . function feature_node:set_source(source) -- Show leading part of GFF3 output for function feature_node:output_leading() -- Return type of as string. function feature_node:get_type() -- Extract the sequence of . -- If is false and has type the sequence is -- returned (using to get it). -- If is true and has children of type their -- joined sequences are returned. -- If none of the above applies nil is returned. function feature_node:extract_sequence(type, join, region_mapping) */ /* exports the RegionNode class to Lua: -- Returns a new region node for sequence id spanning . function region_node_new(seqid, range) */ int gt_lua_open_genome_node(lua_State*); /* Push a to Lua, takes ownership! */ void gt_lua_genome_node_push(lua_State*, GtGenomeNode*); #define GENOME_NODE_METATABLE "GenomeTools.genome_node" #define check_genome_node(L, POS) \ (GtGenomeNode**) luaL_checkudata(L, POS, GENOME_NODE_METATABLE) #endif genometools-1.5.1/src/gtlua/genome_stream_lua.c000066400000000000000000000067071211610345200216130ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "core/fileutils_api.h" #include "extended/node_stream_api.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/luahelper.h" #include "gtlua/genome_node_lua.h" #include "gtlua/genome_stream_lua.h" static int gff3_in_stream_lua_new_sorted(lua_State *L) { GtNodeStream **gs; const char *filename; gt_assert(L); /* get/check parameters */ filename = luaL_checkstring(L, 1); luaL_argcheck(L, gt_file_exists(filename), 1, "file does not exist"); /* construct object */ gs = lua_newuserdata(L, sizeof (GtNodeStream*)); *gs = gt_gff3_in_stream_new_sorted(filename); gt_assert(*gs); luaL_getmetatable(L, GENOME_STREAM_METATABLE); lua_setmetatable(L, -2); return 1; } static int gff3_out_stream_lua_new(lua_State *L) { GtNodeStream **out_stream, **in_stream = check_genome_stream(L, 1); gt_assert(L); /* construct object */ out_stream = lua_newuserdata(L, sizeof (GtNodeStream*)); *out_stream = gt_gff3_out_stream_new(*in_stream, NULL); gt_assert(*out_stream); luaL_getmetatable(L, GENOME_STREAM_METATABLE); lua_setmetatable(L, -2); return 1; } static int gt_node_stream_lua_next_tree(lua_State *L) { GtNodeStream **gs = check_genome_stream(L, 1); GtGenomeNode *gn; GtError *err = gt_error_new(); if (gt_node_stream_next(*gs, &gn, err)) return gt_lua_error(L, err); /* handle error */ else if (gn) gt_lua_genome_node_push(L, gn); else lua_pushnil(L); gt_error_delete(err); return 1; } static int gt_node_stream_lua_delete(lua_State *L) { GtNodeStream **gs = check_genome_stream(L, 1); gt_node_stream_delete(*gs); return 0; } static const struct luaL_Reg gt_node_stream_lib_f [] = { { "gff3_in_stream_new_sorted", gff3_in_stream_lua_new_sorted }, { "gff3_out_stream_new", gff3_out_stream_lua_new }, { NULL, NULL } }; static const struct luaL_Reg gt_node_stream_lib_m [] = { { "next_tree", gt_node_stream_lua_next_tree }, { NULL, NULL } }; int gt_lua_open_genome_stream(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, GENOME_STREAM_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, gt_node_stream_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, gt_node_stream_lib_m); lua_pop(L, 1); luaL_register(L, "gt", gt_node_stream_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/genome_stream_lua.h000066400000000000000000000033071211610345200216110ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GENOME_STREAM_LUA_H #define GENOME_STREAM_LUA_H #include "lua.h" /* exports the GenomeStream interface and its implementors to Lua: -- Returns the next genome node for or nil. function genome_stream:next_tree() */ /* exports the GFF3InStream class to Lua: -- Returns a new GFF3 input stream object for . The file -- has to be a sorted GFF3 file. function gff3_in_stream_new_sorted(filename) */ /* exports the GFF3OutStream class to Lua: -- Returns a new GFF3 output stream which pulls its features from -- . function gff3_out_stream_new(genome_stream) */ int gt_lua_open_genome_stream(lua_State*); #define GENOME_STREAM_METATABLE "GenomeTools.genome_stream" #define check_genome_stream(L, POS) \ (GtNodeStream**) luaL_checkudata(L, POS, GENOME_STREAM_METATABLE) #endif genometools-1.5.1/src/gtlua/genome_visitor_lua.c000066400000000000000000000042271211610345200220120ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "extended/gff3_visitor_api.h" #include "extended/luahelper.h" #include "gtlua/genome_visitor_lua.h" static int gff3_visitor_lua_new(lua_State *L) { GtNodeVisitor **gv; gt_assert(L); /* construct object */ gv = lua_newuserdata(L, sizeof (GtNodeVisitor*)); *gv = gt_gff3_visitor_new(NULL); gt_assert(*gv); luaL_getmetatable(L, GENOME_VISITOR_METATABLE); lua_setmetatable(L, -2); return 1; } static int gt_node_visitor_lua_delete(lua_State *L) { GtNodeVisitor **gv = check_genome_visitor(L, 1); gt_node_visitor_delete(*gv); return 0; } static const struct luaL_Reg gt_node_visitor_lib_f [] = { { "gff3_visitor_new", gff3_visitor_lua_new }, { NULL, NULL } }; int gt_lua_open_genome_visitor(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, GENOME_VISITOR_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, gt_node_visitor_lua_delete); lua_settable(L, -3); lua_pop(L, 1); /* register functions */ luaL_register(L, "gt", gt_node_visitor_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/genome_visitor_lua.h000066400000000000000000000025161211610345200220160ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GENOME_VISITOR_LUA_H #define GENOME_VISITOR_LUA_H #include "lua.h" /* exports the GtNodeVisitor interface and its implementors to Lua: */ /* exports the GFF3Visitor class to Lua: -- Returns a new GFF3 visitor. function gff3_visitor_new() */ int gt_lua_open_genome_visitor(lua_State*); #define GENOME_VISITOR_METATABLE "GenomeTools.genome_visitor" #define check_genome_visitor(L, POS) \ (GtNodeVisitor**) luaL_checkudata(L, POS, GENOME_VISITOR_METATABLE) #endif genometools-1.5.1/src/gtlua/gt_lua.c000066400000000000000000000026241211610345200173720ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "gtlua/gtcore_lua.h" #include "gtlua/gtext_lua.h" #include "gtlua/gt_lua.h" #ifndef WITHOUT_CAIRO #include "gtlua/annotationsketch_lua.h" #endif int gt_lua_open_lib(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif gt_lua_open_core(L); /* open core */ gt_lua_open_extended(L); /* open extended */ #ifndef WITHOUT_CAIRO gt_lua_open_annotationsketch(L); /* open annotationsketch */ #endif gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/gt_lua.h000066400000000000000000000020021211610345200173650ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_LUA_H #define GT_LUA_H #include "lua.h" /* Open GenomeTools library in Lua state . */ int gt_lua_open_lib(lua_State *L); #endif genometools-1.5.1/src/gtlua/gtcore_lua.c000066400000000000000000000030051211610345200202350ustar00rootroot00000000000000/* Copyright (c) 2007-2009 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "gtlua/alphabet_lua.h" #include "gtlua/bittab_lua.h" #include "gtlua/encseq_lua.h" #include "gtlua/gtcore_lua.h" #include "gtlua/mathsupport_lua.h" #include "gtlua/range_lua.h" #include "gtlua/score_matrix_lua.h" #include "gtlua/translate_lua.h" int gt_lua_open_core(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif gt_lua_open_alphabet(L); gt_lua_open_bittab(L); gt_lua_open_encseq(L); gt_lua_open_mathsupport(L); gt_lua_open_range(L); gt_lua_open_score_matrix(L); gt_lua_open_translate(L); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/gtcore_lua.h000066400000000000000000000017101211610345200202430ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GTCORE_LUA_H #define GTCORE_LUA_H #include "lua.h" int gt_lua_open_core(lua_State*); #endif genometools-1.5.1/src/gtlua/gtext_lua.c000066400000000000000000000035601211610345200201130ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "gtlua/cds_stream_lua.h" #include "gtlua/csa_stream_lua.h" #include "gtlua/feature_index_lua.h" #include "gtlua/feature_node_iterator_lua.h" #include "gtlua/feature_stream_lua.h" #include "gtlua/feature_visitor_lua.h" #include "gtlua/genome_node_lua.h" #include "gtlua/genome_stream_lua.h" #include "gtlua/genome_visitor_lua.h" #include "gtlua/gtext_lua.h" #include "gtlua/region_mapping_lua.h" #include "gtlua/stream_evaluator_lua.h" int gt_lua_open_extended(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif gt_lua_open_cds_stream(L); gt_lua_open_csa_stream(L); gt_lua_open_feature_index(L); gt_lua_open_feature_node_iterator(L); gt_lua_open_feature_stream(L); gt_lua_open_feature_visitor(L); gt_lua_open_genome_node(L); gt_lua_open_genome_stream(L); gt_lua_open_genome_visitor(L); gt_lua_open_region_mapping(L); gt_lua_open_stream_evaluator(L); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/gtext_lua.h000066400000000000000000000017121211610345200201150ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GTEXT_LUA_H #define GTEXT_LUA_H #include "lua.h" int gt_lua_open_extended(lua_State*); #endif genometools-1.5.1/src/gtlua/image_info_lua.c000066400000000000000000000107111211610345200210510ustar00rootroot00000000000000/* Copyright (c) 2008 Sascha Steinbiss Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef WITHOUT_CAIRO #include #include #include "lauxlib.h" #include "annotationsketch/image_info.h" #include "annotationsketch/rec_map.h" #include "core/error.h" #include "extended/luahelper.h" #include "gtlua/genome_node_lua.h" #include "gtlua/image_info_lua.h" static int imageinfo_lua_new(lua_State *L) { GtImageInfo **ii; ii = lua_newuserdata(L, sizeof (GtImageInfo*)); gt_assert(ii); *ii = gt_image_info_new(); luaL_getmetatable(L, IMAGEINFO_METATABLE); lua_setmetatable(L, -2); return 1; } static int imageinfo_lua_get_height(lua_State *L) { GtImageInfo **ii; unsigned long height; GtError *err = NULL; ii = check_imageinfo(L, 1); gt_assert(ii); height = gt_image_info_get_height(*ii); if (height > DBL_MAX) { err = gt_error_new(); gt_error_set(err, "image height exceeds %f!", DBL_MAX); return gt_lua_error(L, err); } else lua_pushnumber(L, (double) height); gt_error_delete(err); return 0; } static int imageinfo_lua_num_of_recmaps(lua_State *L) { GtImageInfo **ii; unsigned long nof_rm; GtError *err = NULL; ii = check_imageinfo(L, 1); gt_assert(ii); nof_rm = gt_image_info_num_of_rec_maps(*ii); if (nof_rm > DBL_MAX) { err = gt_error_new(); gt_error_set(err, "number of recmaps exceeds %f!", DBL_MAX); return gt_lua_error(L, err); } else lua_pushnumber(L, (double) nof_rm); gt_error_delete(err); return 0; } static void push_recmap_as_table(lua_State *L, const GtRecMap *rm) { gt_assert(rm); lua_newtable(L); lua_pushstring(L, "nw_x"); lua_pushnumber(L, gt_rec_map_get_northwest_x(rm)); lua_rawset(L, -3); lua_pushstring(L, "nw_y"); lua_pushnumber(L, gt_rec_map_get_northwest_y(rm)); lua_rawset(L, -3); lua_pushstring(L, "se_x"); lua_pushnumber(L, gt_rec_map_get_southeast_x(rm)); lua_rawset(L, -3); lua_pushstring(L, "se_y"); lua_pushnumber(L, gt_rec_map_get_southeast_y(rm)); lua_rawset(L, -3); lua_pushstring(L, "feature_ref"); gt_lua_genome_node_push(L, gt_genome_node_ref((GtGenomeNode*) gt_rec_map_get_genome_feature(rm))); lua_rawset(L, -3); } static int imageinfo_lua_recmaps_as_table(lua_State *L) { GtImageInfo **ii; unsigned long num, i; ii = check_imageinfo(L, 1); gt_assert(ii); num = gt_image_info_num_of_rec_maps(*ii); if (num>0) { lua_newtable(L); for (i=0;i Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef IMAGE_INFO_LUA_H #define IMAGE_INFO_LUA_H #include "lua.h" /* exports the Imageinfo class to Lua: -- returns a new ImageInfo object. function imageinfo_new() -- returns an array of tables with the fields "nw_x","nw_y","se_x","se_y" and -- "feature_ref" with the top left and bottom right coordinates in pixels or -- points and a GenomeNode reference per element drawn. function imageinfo:get_recmaps() */ int gt_lua_open_imageinfo(lua_State*); #define IMAGEINFO_METATABLE "GenomeTools.imageinfo" #define check_imageinfo(L, POS) \ (GtImageInfo**) luaL_checkudata(L, POS, IMAGEINFO_METATABLE) #endif genometools-1.5.1/src/gtlua/layout_lua.c000066400000000000000000000066331211610345200203010ustar00rootroot00000000000000/* Copyright (c) 2008-2010 Sascha Steinbiss Copyright (c) 2008-2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef WITHOUT_CAIRO #include "lauxlib.h" #include "annotationsketch/diagram.h" #include "annotationsketch/layout.h" #include "annotationsketch/luastyle.h" #include "core/error.h" #include "extended/luahelper.h" #include "gtlua/canvas_lua.h" #include "gtlua/diagram_lua.h" #include "gtlua/layout_lua.h" static int layout_lua_new(lua_State *L) { GtLayout **layout; GtDiagram **diagram; unsigned int width; GtStyle *style; GtError *err; diagram = check_diagram(L, 1); width = luaL_checkint(L, 2); /* create layout */ style = gt_lua_get_style_from_registry(L); layout = lua_newuserdata(L, sizeof (GtLayout*)); gt_assert(layout); err = gt_error_new(); *layout = gt_layout_new(*diagram, width, style, err); if (gt_error_is_set(err)) return gt_lua_error(L, err); gt_error_delete(err); luaL_getmetatable(L, LAYOUT_METATABLE); lua_setmetatable(L, -2); return 1; } static int layout_lua_sketch(lua_State *L) { GtLayout **layout; GtCanvas **canvas; GtError *err; int had_err = 0; layout = check_layout(L, 1); canvas = check_canvas(L, 2); err = gt_error_new(); had_err = gt_layout_sketch(*layout, *canvas, err); if (had_err < 0) return gt_lua_error(L, err); gt_error_delete(err); return 0; } static int layout_lua_get_height(lua_State *L) { GtLayout **layout; GtError *err; int had_err = 0; unsigned long height; layout = check_layout(L, 1); err = gt_error_new(); had_err = gt_layout_get_height(*layout, &height, err); lua_pushnumber(L, height); if (had_err < 0) return gt_lua_error(L, err); gt_error_delete(err); return 1; } static int layout_lua_delete(lua_State *L) { GtLayout **layout; layout = check_layout(L, 1); gt_layout_delete(*layout); return 0; } static const struct luaL_Reg layout_lib_f [] = { { "layout_new", layout_lua_new }, { NULL, NULL } }; static const struct luaL_Reg layout_lib_m [] = { { "sketch", layout_lua_sketch }, { "get_height", layout_lua_get_height }, { NULL, NULL } }; int gt_lua_open_layout(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, LAYOUT_METATABLE); lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, layout_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, layout_lib_m); lua_pop(L, 1); luaL_register(L, "gt", layout_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } #endif genometools-1.5.1/src/gtlua/layout_lua.h000066400000000000000000000027301211610345200203000ustar00rootroot00000000000000/* Copyright (c) 2008 Sascha Steinbiss Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LAYOUT_LUA_H #define LAYOUT_LUA_H #include "lua.h" /* exports the Layout class to Lua: -- Return a Layout object which represents a layout of the content of -- with width . function layout_new(diagram, width) -- Return the height of the resulting . function layout:get_height(layout) -- Draw the content of the on a given . function layout:sketch(layout, canvas) */ int gt_lua_open_layout(lua_State*); #define LAYOUT_METATABLE "GenomeTools.layout" #define check_layout(L, POS) \ (GtLayout**) luaL_checkudata(L, POS, LAYOUT_METATABLE) #endif genometools-1.5.1/src/gtlua/mathsupport_lua.c000066400000000000000000000027301211610345200213440ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "core/mathsupport.h" #include "gtlua/mathsupport_lua.h" static int gt_lua_mathsupport_rand_max(lua_State *L) { unsigned long max = luaL_checknumber(L, 1); lua_pushnumber(L, gt_rand_max(max)); return 1; } static const struct luaL_Reg mathsupport_lib_f [] = { { "rand_max", gt_lua_mathsupport_rand_max }, { NULL, NULL } }; int gt_lua_open_mathsupport(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_register(L, "gt", mathsupport_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/mathsupport_lua.h000066400000000000000000000021201211610345200213420ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MATHSUPPORT_LUA_H #define MATHSUPPORT_LUA_H #include "lua.h" /* exports the mathsupport module to Lua: -- Returns a random number between 0 and . function rand_max(val) */ int gt_lua_open_mathsupport(lua_State*); #endif genometools-1.5.1/src/gtlua/range_lua.c000066400000000000000000000117471211610345200200620ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "extended/luahelper.h" #include "gtlua/range_lua.h" #include "core/unused_api.h" static int range_lua_new(lua_State *L) { unsigned long startpos, endpos; GtRange *range; startpos = luaL_checklong(L, 1); endpos = luaL_checklong(L, 2); luaL_argcheck(L, startpos > 0, 1, "must be > 0"); luaL_argcheck(L, endpos > 0, 2, "must be > 0"); luaL_argcheck(L, startpos <= endpos, 1, "must be <= endpos"); range = lua_newuserdata(L, sizeof (GtRange)); range->start = startpos; range->end = endpos; luaL_getmetatable(L, RANGE_METATABLE); lua_setmetatable(L, -2); return 1; } static int range_lua_get_start(lua_State *L) { GtRange *range = check_range(L, 1); lua_pushinteger(L, range->start); return 1; } static int range_lua_get_end(lua_State *L) { GtRange *range = check_range(L, 1); lua_pushinteger(L, range->end); return 1; } static int range_lua_overlap(lua_State *L) { GtRange *range_a, *range_b; range_a = check_range(L, 1); range_b = check_range(L, 2); lua_pushboolean(L, gt_range_overlap(range_a, range_b)); return 1; } static GtArray* range_table_to_array(lua_State *L) { lua_Integer i = 1; GtArray *ranges; GtRange *range; GT_UNUSED const char *msg; bool error; /* make sure we got a table as first argument */ luaL_checktype(L, 1, LUA_TTABLE); /* traverse table and save the ranges */ ranges = gt_array_new(sizeof (GtRange)); lua_pushinteger(L, i); lua_gettable(L, 1); while (!lua_isnil(L, -1)) { error = false; range = lua_touserdata(L, -1); if (range && lua_getmetatable(L, -1)) { lua_getfield(L, LUA_REGISTRYINDEX, RANGE_METATABLE); if (lua_rawequal(L, -1, -2)) { lua_pop(L, 2); /* remove both metatables */ gt_array_add(ranges, *range); } else error = true; } else error = true; if (error) { /* we have a non range in the table */ msg = lua_pushfstring(L, "expected %s as type of table entry %d", RANGE_METATABLE, i); gt_array_delete(ranges); lua_error(L); } i++; lua_pop(L, 1); /* pop last result */ lua_pushinteger(L, i); lua_gettable(L, 1); } return ranges; } static void push_range_array_as_table(lua_State *L, GtArray *ranges) { unsigned long i; if (ranges && gt_array_size(ranges)) { lua_newtable(L); for (i = 0; i < gt_array_size(ranges); i++) { lua_pushinteger(L, i+1); /* in Lua we index from 1 on */ gt_lua_range_push(L, *(GtRange*) gt_array_get(ranges, i)); lua_rawset(L, -3); } } else lua_pushnil(L); } static int ranges_lua_sort(lua_State *L) { GtArray *ranges; ranges = range_table_to_array(L); gt_ranges_sort(ranges); push_range_array_as_table(L, ranges); gt_array_delete(ranges); return 1; } static int ranges_lua_are_sorted(lua_State *L) { GtArray *ranges; bool are_sorted; ranges = range_table_to_array(L); are_sorted = gt_ranges_are_sorted(ranges); gt_array_delete(ranges); lua_pushboolean(L, are_sorted); return 1; } static const struct luaL_Reg range_lib_f [] = { { "range_new", range_lua_new }, { "ranges_sort", ranges_lua_sort}, { "ranges_are_sorted", ranges_lua_are_sorted}, { NULL, NULL } }; static const struct luaL_Reg range_lib_m [] = { { "get_start", range_lua_get_start}, { "get_end", range_lua_get_end}, { "overlap", range_lua_overlap}, { NULL, NULL } }; int gt_lua_open_range(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, RANGE_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* register functions */ luaL_register(L, NULL, range_lib_m); gt_lua_export_metatable(L, RANGE_METATABLE); luaL_register(L, "gt", range_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } int gt_lua_range_push(lua_State *L, GtRange inrange) { GtRange *outrange; gt_assert(L); outrange = lua_newuserdata(L, sizeof (GtRange)); *outrange = inrange; luaL_getmetatable(L, RANGE_METATABLE); lua_setmetatable(L, -2); return 1; } genometools-1.5.1/src/gtlua/range_lua.h000066400000000000000000000036401211610345200200600ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RANGE_LUA_H #define RANGE_LUA_H #include "lua.h" #include "core/range.h" /* exports the Range class to Lua: -- Returns a new range object with start and end . -- must be smaller or equal than . function range_new(startpos, endpos) -- Returns start of . function range:get_start() -- Returns end of . function range:get_end() -- Returns true if and overlap, false otherwise. function range:overlap(other_range) -- Returns an array containing the ranges from array in sorted -- order. function ranges_sort(range_array) -- Returns true if the ranges in array are sorted, false -- otherwise. function ranges_are_sorted(range_array) */ int gt_lua_open_range(lua_State*); /* push a GtRange to Lua, returns 1 (number of elements pushed) */ int gt_lua_range_push(lua_State*, GtRange); #define RANGE_METATABLE "GenomeTools.range" #define check_range(L, POS) \ (GtRange*) luaL_checkudata(L, POS, RANGE_METATABLE) #endif genometools-1.5.1/src/gtlua/region_mapping_lua.c000066400000000000000000000050651211610345200217600ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "extended/luahelper.h" #include "extended/region_mapping_api.h" #include "gtlua/region_mapping_lua.h" #include "gtlua/gtcore_lua.h" static int region_mapping_lua_new_seqfile(lua_State *L) { const char *seqfilename; GtStrArray *seqfile; GtRegionMapping **region_mapping; gt_assert(L); seqfilename = luaL_checkstring(L, 1); region_mapping = lua_newuserdata(L, sizeof (GtRegionMapping*)); gt_assert(region_mapping); seqfile = gt_str_array_new(); gt_str_array_add_cstr(seqfile, seqfilename); /* XXX: make second and third parameter available */ *region_mapping = gt_region_mapping_new_seqfiles(seqfile, false, false); gt_str_array_delete(seqfile); luaL_getmetatable(L, REGION_MAPPING_METATABLE); lua_setmetatable(L, -2); return 1; } static int region_mapping_lua_delete(lua_State *L) { GtRegionMapping **region_mapping; region_mapping = check_region_mapping(L, 1); gt_region_mapping_delete(*region_mapping); return 0; } static const struct luaL_Reg region_mapping_lib_f [] = { { "region_mapping_new_seqfile", region_mapping_lua_new_seqfile }, { NULL, NULL } }; int gt_lua_open_region_mapping(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, REGION_MAPPING_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, region_mapping_lua_delete); lua_settable(L, -3); lua_pop(L, 1); /* register functions */ luaL_register(L, "gt", region_mapping_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/region_mapping_lua.h000066400000000000000000000025111211610345200217560ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef REGION_MAPPING_LUA_H #define REGION_MAPPING_LUA_H #include "lua.h" /* exports the RegionMapping class to Lua: -- Returns a new region mapping which maps everything onto sequence file -- . function region_mapping_new_seqfile(seqfile) */ int gt_lua_open_region_mapping(lua_State*); #define REGION_MAPPING_METATABLE "GenomeTools.region_mapping" #define check_region_mapping(L, POS) \ (GtRegionMapping**) luaL_checkudata(L, POS, REGION_MAPPING_METATABLE) #endif genometools-1.5.1/src/gtlua/score_matrix_lua.c000066400000000000000000000105561211610345200214620ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "core/score_matrix.h" #include "extended/luahelper.h" #include "gtlua/alphabet_lua.h" #include "gtlua/score_matrix_lua.h" #define SCOREMATRIX_METATABLE "GenomeTools.score_matrix" #define check_score_matrix(L, POS) \ (GtScoreMatrix**) luaL_checkudata(L, POS, SCOREMATRIX_METATABLE) static int score_matrix_lua_new_read_protein(lua_State *L) { GtScoreMatrix **sm; const char *path; GtError *err; gt_assert(L); path = luaL_checkstring(L, 1); sm = lua_newuserdata(L, sizeof (GtScoreMatrix*)); gt_assert(sm); err = gt_error_new(); if (!(*sm = gt_score_matrix_new_read_protein(path, err))) return gt_lua_error(L, err); /* handle error */ gt_error_delete(err); gt_assert(*sm); luaL_getmetatable(L, SCOREMATRIX_METATABLE); lua_setmetatable(L, -2); return 1; } static int score_matrix_lua_new_read(lua_State *L) { GtScoreMatrix **sm; GtAlphabet **alpha; const char *path; GtError *err; gt_assert(L); path = luaL_checkstring(L, 1); alpha = check_alphabet(L, 2); sm = lua_newuserdata(L, sizeof (GtScoreMatrix*)); gt_assert(sm); err = gt_error_new(); if (!(*sm = gt_score_matrix_new_read(path, *alpha, err))) return gt_lua_error(L, err); /* handle error */ gt_error_delete(err); gt_assert(*sm); luaL_getmetatable(L, SCOREMATRIX_METATABLE); lua_setmetatable(L, -2); return 1; } static int score_matrix_lua_get_dimension(lua_State *L) { GtScoreMatrix **sm; unsigned int dimension; sm = check_score_matrix(L, 1); dimension = gt_score_matrix_get_dimension(*sm); lua_pushinteger(L, dimension); return 1; } static int score_matrix_lua_get_score(lua_State *L) { GtScoreMatrix **sm; int idx1, idx2; int score; sm = check_score_matrix(L, 1); idx1 = luaL_checkint(L, 2); idx2 = luaL_checkint(L, 3); luaL_argcheck(L, idx1 >= 0, 2, "idx1 too small"); luaL_argcheck(L, idx2 >= 0, 3, "idx2 too small"); luaL_argcheck(L, idx1 < gt_score_matrix_get_dimension(*sm), 2, "idx1 too large"); luaL_argcheck(L, idx2 < gt_score_matrix_get_dimension(*sm), 3, "idx2 too large"); score = gt_score_matrix_get_score(*sm, idx1, idx2); lua_pushinteger(L, score); return 1; } static int score_matrix_lua_show(lua_State *L) { GtScoreMatrix **sm; sm = check_score_matrix(L, 1); gt_score_matrix_show(*sm, stdout); return 0; } static int score_matrix_lua_delete(lua_State *L) { GtScoreMatrix **sm; sm = check_score_matrix(L, 1); gt_score_matrix_delete(*sm); return 0; } static const struct luaL_Reg score_matrix_lib_f [] = { { "score_matrix_new_read_protein", score_matrix_lua_new_read_protein }, { "score_matrix_new_read", score_matrix_lua_new_read}, { NULL, NULL } }; static const struct luaL_Reg score_matrix_lib_m [] = { { "get_dimension", score_matrix_lua_get_dimension }, { "get_score", score_matrix_lua_get_score }, { "show", score_matrix_lua_show }, { NULL, NULL } }; int gt_lua_open_score_matrix(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, SCOREMATRIX_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, score_matrix_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, score_matrix_lib_m); lua_pop(L, 1); luaL_register(L, "gt", score_matrix_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/score_matrix_lua.h000066400000000000000000000030461211610345200214630ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SCORE_MATRIX_LUA_H #define SCORE_MATRIX_LUA_H #include "lua.h" /* exports the ScoreMatrix class to Lua: -- Returns a new protein score matrix object which has been read from file -- . function score_matrix_new_read_protein(path) -- Read in score matrix from over given and return it. function score_matrix_new_read(path, alphabet) -- Returns the dimension of the as number. function score_matrix:get_dimension() -- Returns the score for , as number. function score_matrix:get_score(idx1, idx2) -- Show on stdout. function score_matrix:show() */ int gt_lua_open_score_matrix(lua_State*); #endif genometools-1.5.1/src/gtlua/stream_evaluator_lua.c000066400000000000000000000074561211610345200223450ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "core/error.h" #include "extended/luahelper.h" #include "extended/stream_evaluator.h" #include "gtlua/genome_stream_lua.h" #include "gtlua/genome_visitor_lua.h" #include "gtlua/gtext_lua.h" #include "gtlua/stream_evaluator_lua.h" #define STREAM_EVALUATOR_METATABLE "GenomeTools.stream_evaluator" #define check_stream_evaluator(L) \ (GtStreamEvaluator**) luaL_checkudata(L, 1, STREAM_EVALUATOR_METATABLE) static int stream_evaluator_lua_new(lua_State *L) { GtStreamEvaluator **stream_evaluator; GtNodeStream **reality_stream, **prediction_stream; reality_stream = check_genome_stream(L, 1); prediction_stream = check_genome_stream(L, 2); stream_evaluator = lua_newuserdata(L, sizeof (GtStreamEvaluator*)); *stream_evaluator = gt_stream_evaluator_new(*reality_stream, *prediction_stream, true, false, 0); luaL_getmetatable(L, STREAM_EVALUATOR_METATABLE); lua_setmetatable(L, -2); return 1; } static int stream_evaluator_lua_evaluate(lua_State *L) { GtStreamEvaluator **stream_evaluator; GtNodeVisitor **genome_visitor; GtError *err; stream_evaluator = check_stream_evaluator(L); if (lua_gettop(L) >= 2) { genome_visitor = check_genome_visitor(L, 2); } else genome_visitor = NULL; err = gt_error_new(); if (gt_stream_evaluator_evaluate(*stream_evaluator, false, false, false, genome_visitor ? *genome_visitor : NULL, err)) { return gt_lua_error(L, err); } gt_error_delete(err); return 0; } static int stream_evaluator_lua_show(lua_State *L) { GtStreamEvaluator **stream_evaluator = check_stream_evaluator(L); gt_stream_evaluator_show(*stream_evaluator, NULL); return 0; } static int stream_evaluator_lua_delete(lua_State *L) { GtStreamEvaluator **stream_evaluator; stream_evaluator = check_stream_evaluator(L); gt_stream_evaluator_delete(*stream_evaluator); return 0; } static const struct luaL_Reg stream_evaluator_lib_f [] = { { "stream_evaluator_new", stream_evaluator_lua_new }, { NULL, NULL } }; static const struct luaL_Reg stream_evaluator_lib_m [] = { { "evaluate", stream_evaluator_lua_evaluate }, { "show", stream_evaluator_lua_show }, { NULL, NULL } }; int gt_lua_open_stream_evaluator(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_newmetatable(L, STREAM_EVALUATOR_METATABLE); /* metatable.__index = metatable */ lua_pushvalue(L, -1); /* duplicate the metatable */ lua_setfield(L, -2, "__index"); /* set its _gc field */ lua_pushstring(L, "__gc"); lua_pushcfunction(L, stream_evaluator_lua_delete); lua_settable(L, -3); /* register functions */ luaL_register(L, NULL, stream_evaluator_lib_m); lua_pop(L, 1); luaL_register(L, "gt", stream_evaluator_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/stream_evaluator_lua.h000066400000000000000000000027321211610345200223420ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef STREAM_EVALUATOR_LUA_H #define STREAM_EVALUATOR_LUA_H #include "lua.h" /* exports the StreamEvaluator class to Lua: -- Returns a new stream evaluator object for the two genome streams -- and . function stream_evaluator_new(reality_stream, prediction_stream) -- Run evaluation of . All evaluated features are visited -- by the optional . function stream_evaluator:evaluate(genome_visitor) -- Show result of on stdout. function stream_evaluator:show() */ int gt_lua_open_stream_evaluator(lua_State*); #endif genometools-1.5.1/src/gtlua/translate_lua.c000066400000000000000000000041471211610345200207570ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "lauxlib.h" #include "core/codon_iterator_simple_api.h" #include "core/translator.h" #include "gtlua/translate_lua.h" static int translate_dna_lua(lua_State *L) { GtStr *protein; GtTranslator *tr; int rval; char translated; unsigned int frame; const char *dna = luaL_checkstring(L, 1); protein = gt_str_new(); GtCodonIterator *ci = gt_codon_iterator_simple_new(dna, strlen(dna), NULL); tr = gt_translator_new(ci); rval = gt_translator_next(tr, &translated, &frame, NULL); while (!rval && translated) { gt_str_append_char(protein, translated); rval = gt_translator_next(tr, &translated, &frame, NULL); } lua_pushstring(L, gt_str_get(protein)); gt_str_delete(protein); gt_translator_delete(tr); gt_codon_iterator_delete(ci); return 1; } static const struct luaL_Reg translate_lib_f [] = { { "translate_dna", translate_dna_lua }, { NULL, NULL } }; int gt_lua_open_translate(lua_State *L) { #ifndef NDEBUG int stack_size; #endif gt_assert(L); #ifndef NDEBUG stack_size = lua_gettop(L); #endif luaL_register(L, "gt", translate_lib_f); lua_pop(L, 1); gt_assert(lua_gettop(L) == stack_size); return 1; } genometools-1.5.1/src/gtlua/translate_lua.h000066400000000000000000000020641211610345200207600ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TRANSLATE_LUA_H #define TRANSLATE_LUA_H #include "lua.h" /* exports the translate module to Lua: -- Returns translated . function translate_dna(dna) */ int gt_lua_open_translate(lua_State*); #endif genometools-1.5.1/src/gtr.c000066400000000000000000000302421211610345200155740ustar00rootroot00000000000000/* Copyright (c) 2003-2011 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "gtr.h" #include "gtt.h" #include "interactive.h" #include "lua.h" #include "lauxlib.h" #include "lualib.h" #include "lfs.h" #include "lpeg.h" #include "md5.h" #include "ldes56.h" #include "core/cstr_array.h" #include "core/ensure.h" #include "core/fa.h" #include "core/fileutils_api.h" #include "core/gtdatapath.h" #include "core/log.h" #include "core/ma.h" #include "core/thread_api.h" #include "core/unit_testing.h" #include "core/versionfunc.h" #include "core/xansi_api.h" #include "core/yarandom.h" #include "extended/gtdatahelp.h" #include "extended/luahelper.h" #include "extended/toolbox.h" #include "gtlua/gt_lua.h" #ifndef WITHOUT_CAIRO #include "annotationsketch/luastyle.h" #include "annotationsketch/style.h" #endif struct GtR { bool test, interactive, debug, check64bit; unsigned int seed; GtStr *debugfp, *testspacepeak; GtToolbox *tools; GtHashmap *unit_tests; GtStr *test_only; lua_State *L; #ifndef WITHOUT_CAIRO GtStyle *style; #endif FILE *logfp; }; GtR* gtr_new(GtError *err) { GtR *gtr; int had_err = 0; #ifndef WITHOUT_CAIRO GtStr *style_file = NULL; #endif gtr = gt_calloc(1, sizeof (GtR)); gtr->debugfp = gt_str_new(); gtr->testspacepeak = gt_str_new(); gtr->test_only = gt_str_new(); gtr->L = luaL_newstate(); if (!gtr->L) { gt_error_set(err, "out of memory (cannot create new lua state)"); had_err = -1; } if (!had_err) { luaL_openlibs(gtr->L); /* open the standard libraries */ gt_lua_open_lib(gtr->L); /* open the GenomeTools library */ lua_pushcfunction(gtr->L, luaopen_lpeg); lua_pushstring(gtr->L, "lpeg"); lua_call(gtr->L, 1, 0); /* open LPeg library */ lua_pushcfunction(gtr->L, luaopen_md5_core); lua_pushstring(gtr->L, "md5"); lua_call(gtr->L, 1, 0); /* open MD5 library */ lua_pushcfunction(gtr->L, luaopen_lfs); lua_pushstring(gtr->L, "lfs"); lua_call(gtr->L, 1, 0); /* open Lua filesystem */ lua_pushcfunction(gtr->L, luaopen_des56); lua_pushstring(gtr->L, "des56"); lua_call(gtr->L, 1, 0); /* open DES56 library */ had_err = gt_lua_set_modules_path(gtr->L, err); } #ifndef WITHOUT_CAIRO if (!had_err) { lua_settop(gtr->L, 0); if (!(gtr->style = gt_style_new_with_state(gtr->L))) had_err = -1; } if (!had_err) { if (!(style_file = gt_get_gtdata_path(gt_error_get_progname(err), err))) had_err = -1; } if (!had_err) { gt_str_append_cstr(style_file, "/sketch/default.style"); if (gt_file_exists(gt_str_get(style_file))) { if (gt_style_load_file(gtr->style, gt_str_get(style_file), err)) had_err = -1; else gt_lua_put_style_in_registry(gtr->L, gtr->style); } } gt_str_delete(style_file); #endif if (had_err) { gt_free(gtr); return NULL; } return gtr; } static int show_gtr_help(const char *progname, void *data, GtError *err) { int had_err; had_err = gt_toolbox_show(progname, data, err); if (!had_err) had_err = gt_gtdata_show_help(progname, NULL, err); return had_err; } GtOPrval gtr_parse(GtR *gtr, int *parsed_args, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOption *o, *only_option, *debug_option, *debugfp_option; GtOPrval oprval; gt_error_check(err); gt_assert(gtr); op = gt_option_parser_new("[option ...] [tool | script] [argument ...]", "The GenomeTools (gt) genome analysis system " "(http://genometools.org)."); gt_option_parser_set_comment_func(op, show_gtr_help, gtr->tools); o = gt_option_new_bool("i", "enter interactive mode after executing 'tool' or " "'script'", >r->interactive, false); gt_option_hide_default(o); gt_option_parser_add_option(op, o); o = gt_option_new_uint_min("j", "set number of parallel threads used at once", >_jobs, 1, 1); gt_option_is_development_option(o); gt_option_parser_add_option(op, o); o = gt_option_new_bool("test", "perform unit tests and exit", >r->test, false); gt_option_hide_default(o); gt_option_parser_add_option(op, o); only_option = gt_option_new_string("only", "perform single unit test " "(requires -test)", gtr->test_only, ""); gt_option_imply(only_option, o); gt_option_is_development_option(only_option); gt_option_hide_default(only_option); gt_option_parser_add_option(op, only_option); debug_option = gt_option_new_debug(>r->debug); gt_option_parser_add_option(op, debug_option); debugfp_option = gt_option_new_string("debugfp", "set file pointer for debugging output\n" "use ``stdout'' for standard output\n" "use ``stderr'' for standard error\n" "or any other string to use the " "corresponding file (will be overwritten " "without warning!)", gtr->debugfp, "stderr"); gt_option_is_development_option(debugfp_option); gt_option_parser_add_option(op, debugfp_option); gt_option_imply(debugfp_option, debug_option); o = gt_option_new_uint("seed", "set seed for random number generator manually\n" "0 generates a seed from current time and process id", >r->seed, 0); gt_option_is_development_option(o); gt_option_parser_add_option(op, o); o = gt_option_new_bool("64bit", "exit with code 0 if this is a 64bit binary, " "with 1 otherwise", >r->check64bit, false); gt_option_is_development_option(o); gt_option_parser_add_option(op, o); o = gt_option_new_filename("testspacepeak", "alloc 64 MB and mmap the given " "file", gtr->testspacepeak); gt_option_is_development_option(o); gt_option_parser_add_option(op, o); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } void gtr_register_components(GtR *gtr) { gt_assert(gtr); /* add tools */ gt_toolbox_delete(gtr->tools); gtr->tools = gtt_tools(); /* add unit tests */ gt_hashmap_delete(gtr->unit_tests); gtr->unit_tests = gtt_unit_tests(); } static int check64bit(void) { if (sizeof (unsigned long) == 8) return EXIT_SUCCESS; return EXIT_FAILURE; } static int run_tests(GtR *gtr, GtError *err) { int test_err = 0, had_err = 0; char* key; void* value; gt_error_check(err); gt_assert(gtr); /* The following type assumptions are made in the GenomeTools library. */ gt_ensure(had_err, sizeof (char) == 1); gt_ensure(had_err, sizeof (unsigned char) == 1); gt_ensure(had_err, sizeof (short) == 2); gt_ensure(had_err, sizeof (unsigned short) == 2); gt_ensure(had_err, sizeof (int) == 4); gt_ensure(had_err, sizeof (unsigned int) == 4); gt_ensure(had_err, sizeof (long) == 4 || sizeof (long) == 8); gt_ensure(had_err, sizeof (unsigned long) == 4 || sizeof (unsigned long) == 8); gt_ensure(had_err, sizeof (unsigned long) >= sizeof (size_t)); gt_ensure(had_err, sizeof (long long) == 8); gt_ensure(had_err, sizeof (unsigned long long) == 8); /* show seed */ printf("seed=%u\n", gtr->seed); gt_hashmap_unit_test(err); if (gtr->unit_tests) { if (gt_str_length(gtr->test_only) > 0) { key = gt_str_get(gtr->test_only); value = gt_hashmap_get(gtr->unit_tests, key); if (value) { had_err = gt_unit_test_run(key, value, &test_err, err); gt_assert(!had_err); /* cannot happen, gt_unit_test_run() is sane */ } else { gt_error_set(err, "Test \"%s\" not found", key); return EXIT_FAILURE; } } else { had_err = gt_hashmap_foreach_in_key_order(gtr->unit_tests, gt_unit_test_run, &test_err, err); gt_assert(!had_err); /* cannot happen, gt_unit_test_run() is sane */ } } if (test_err) return EXIT_FAILURE; return EXIT_SUCCESS; } static void enable_logging(const char *debugfp, FILE **logfp) { gt_log_enable(); if (!strcmp(debugfp, "stdout")) gt_log_set_fp(stdout); else if (!strcmp(debugfp, "stderr")) gt_log_set_fp(stderr); else { *logfp = gt_fa_xfopen(debugfp, "w"); gt_log_set_fp(*logfp); } } int gtr_run(GtR *gtr, int argc, const char **argv, GtError *err) { GtToolfunc toolfunc; GtTool *tool = NULL; char **nargv = NULL; void *mem, *map; int had_err = 0; gt_error_check(err); gt_assert(gtr); if (gtr->debug) enable_logging(gt_str_get(gtr->debugfp), >r->logfp); gtr->seed = gt_ya_rand_init(gtr->seed); gt_log_log("seed=%u", gtr->seed); if (gtr->check64bit) return check64bit(); if (gtr->test) return run_tests(gtr, err); if (gt_str_length(gtr->testspacepeak)) { mem = gt_malloc(1 << 26); /* alloc 64 MB */; map = gt_fa_xmmap_read(gt_str_get(gtr->testspacepeak), NULL); gt_fa_xmunmap(map); gt_free(mem); } if (argc == 0 && !gtr->interactive) { gt_error_set(err, "neither tool nor script specified; option -help lists " "possible tools"); had_err = -1; } if (!had_err && argc) { if (!gtr->tools || !gt_toolbox_has_tool(gtr->tools, argv[0])) { /* no tool found -> try to open script */ if (gt_file_exists(argv[0])) { /* run script */ nargv = gt_cstr_array_prefix_first(argv, gt_error_get_progname(err)); gt_lua_set_arg(gtr->L, nargv[0], (const char**) nargv+1); if (luaL_dofile(gtr->L, argv[0])) { /* error */ gt_assert(lua_isstring(gtr->L, -1)); /* error message on top */ gt_error_set(err, "could not execute script %s", lua_tostring(gtr->L, -1)); had_err = -1; lua_pop(gtr->L, 1); /* pop error message */ } } else { /* neither tool nor script found */ gt_error_set(err, "neither tool nor script '%s' found; option -help " "lists possible tools", argv[0]); had_err = -1; } } else { /* run tool */ if (!(toolfunc = gt_toolbox_get(gtr->tools, argv[0]))) { tool = gt_toolbox_get_tool(gtr->tools, argv[0]); gt_assert(tool); } nargv = gt_cstr_array_prefix_first(argv, gt_error_get_progname(err)); gt_error_set_progname(err, nargv[0]); if (toolfunc) had_err = toolfunc(argc, (const char**) nargv, err); else had_err = gt_tool_run(tool, argc, (const char**) nargv, err); } } gt_cstr_array_delete(nargv); if (!had_err && gtr->interactive) { gt_showshortversion(gt_error_get_progname(err)); gt_lua_set_arg(gtr->L, gt_error_get_progname(err), argv); run_interactive_lua_interpreter(gtr->L); } if (had_err) return EXIT_FAILURE; return EXIT_SUCCESS; } void gtr_delete(GtR *gtr) { if (!gtr) return; gt_fa_fclose(gtr->logfp); gt_str_delete(gtr->testspacepeak); gt_str_delete(gtr->debugfp); gt_str_delete(gtr->test_only); gt_toolbox_delete(gtr->tools); gt_hashmap_delete(gtr->unit_tests); if (gtr->L) lua_close(gtr->L); #ifndef WITHOUT_CAIRO gt_style_delete_without_state(gtr->style); #endif gt_free(gtr); } genometools-1.5.1/src/gtr.h000066400000000000000000000024531211610345200156040ustar00rootroot00000000000000/* Copyright (c) 2003-2011 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GTR_H #define GTR_H #include #include "core/init_api.h" #include "core/error.h" #include "core/option_api.h" /* The GenomeTools runtime (gtr) */ typedef struct GtR GtR; GtR* gtr_new(GtError*); GtOPrval gtr_parse(GtR*, int *parsed_args, int argc, const char **argv, GtError*); void gtr_register_components(GtR*); int gtr_run(GtR*, int argc, const char **argv, GtError*); void gtr_delete(GtR*); #endif genometools-1.5.1/src/gtt.c000066400000000000000000000405401211610345200156000ustar00rootroot00000000000000/* Copyright (c) 2003-2013 Gordon Gremme Copyright (c) 2003-2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "gtt.h" #include "core/alphabet.h" #include "core/array.h" #include "core/array2dim_api.h" #include "core/array2dim_sparse.h" #include "core/array3dim.h" #include "core/basename_api.h" #include "core/bitpackarray.h" #include "core/bitpackstring.h" #include "core/bittab.h" #include "core/bsearch.h" #include "core/codon_iterator_encseq_api.h" #include "core/codon_iterator_simple_api.h" #include "core/colorspace.h" #include "core/combinatorics.h" #include "core/compact_ulong_store.h" #include "core/countingsort.h" #include "core/cstr.h" #include "core/cstr_table.h" #include "core/desc_buffer.h" #include "core/disc_distri_api.h" #include "core/dlist.h" #include "core/dyn_bittab.h" #include "core/encseq.h" #include "core/grep_api.h" #include "core/hashmap.h" #include "core/hashtable.h" #include "core/interval_tree.h" #include "core/mathsupport.h" #include "core/md5_seqid.h" #include "core/quality.h" #include "core/queue.h" #include "core/sequence_buffer.h" #include "core/splitter.h" #include "core/symbol.h" #include "core/tokenizer.h" #include "core/translator.h" #include "extended/alignment.h" #include "extended/anno_db_gfflike_api.h" #include "extended/elias_gamma.h" #include "extended/encdesc.h" #include "extended/evaluator.h" #include "extended/feature_index.h" #include "extended/feature_index_memory.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "extended/genome_node.h" #include "extended/gff3_escaping.h" #include "extended/golomb.h" #include "extended/hmm.h" #include "extended/huffcode.h" #include "extended/luaserialize.h" #include "extended/popcount_tab.h" #include "extended/ranked_list.h" #include "extended/rbtree.h" #include "extended/rmq.h" #include "extended/splicedseq.h" #include "extended/string_matching.h" #include "extended/tag_value_map.h" #include "extended/uint64hashtable.h" #include "ltr/gt_ltrclustering.h" #include "ltr/gt_ltrdigest.h" #include "ltr/gt_ltrharvest.h" #include "ltr/ltrelement.h" #include "ltr/pbs.h" #include "ltr/ppt.h" #include "match/rdj-spmlist.h" #include "match/rdj-strgraph.h" #include "match/shu-encseq-gc.h" #include "tools/gt_bed_to_gff3.h" #include "tools/gt_cds.h" #include "tools/gt_chain2dim.h" #include "tools/gt_chseqids.h" #include "tools/gt_clean.h" #include "tools/gt_compreads.h" #include "tools/gt_congruence.h" #include "tools/gt_convertseq.h" #include "tools/gt_csa.h" #include "tools/gt_dev.h" #include "tools/gt_dot.h" #include "tools/gt_dupfeat.h" #include "tools/gt_encseq.h" #include "tools/gt_encseq2spm.h" #include "tools/gt_eval.h" #include "tools/gt_extractfeat.h" #include "tools/gt_extractseq.h" #include "tools/gt_featureindex.h" #include "tools/gt_fingerprint.h" #include "tools/gt_genomediff.h" #include "tools/gt_gff3.h" #include "tools/gt_gff3_to_gtf.h" #include "tools/gt_gff3validator.h" #include "tools/gt_gtf_to_gff3.h" #include "tools/gt_hop.h" #include "tools/gt_id_to_md5.h" #include "tools/gt_interfeat.h" #include "tools/gt_matchtool.h" #include "tools/gt_matstat.h" #include "tools/gt_maxpairs.h" #include "tools/gt_md5_to_id.h" #include "tools/gt_merge.h" #include "tools/gt_mergefeat.h" #include "tools/gt_mgth.h" #include "tools/gt_mkfeatureindex.h" #include "tools/gt_mkfmindex.h" #include "tools/gt_mmapandread.h" #include "tools/gt_orffinder.h" #include "tools/gt_packedindex.h" #include "tools/gt_prebwt.h" #include "tools/gt_readjoiner.h" #include "tools/gt_script_filter.h" #include "tools/gt_select.h" #include "tools/gt_seq.h" #include "tools/gt_seqfilter.h" #include "tools/gt_seqids.h" #include "tools/gt_seqmutate.h" #include "tools/gt_seqorder.h" #include "tools/gt_seqstat.h" #include "tools/gt_seqtransform.h" #include "tools/gt_seqtranslate.h" #include "tools/gt_sequniq.h" #include "tools/gt_shredder.h" #include "tools/gt_shulen.h" #include "tools/gt_simreads.h" #include "tools/gt_snpper.h" #include "tools/gt_splicesiteinfo.h" #include "tools/gt_splitfasta.h" #include "tools/gt_stat.h" #include "tools/gt_suffixerator.h" #include "tools/gt_tagerator.h" #include "tools/gt_tallymer.h" #include "tools/gt_template.h" #include "tools/gt_uniq.h" #include "tools/gt_uniquesub.h" #ifndef WITHOUT_CAIRO #include "annotationsketch/block.h" #include "annotationsketch/diagram.h" #include "annotationsketch/gt_sketch.h" #include "annotationsketch/gt_sketch_page.h" #include "annotationsketch/image_info.h" #include "annotationsketch/rec_map.h" #include "annotationsketch/style.h" #include "annotationsketch/track.h" #endif GtToolbox* gtt_tools(void) { GtToolbox *tools = gt_toolbox_new(); /* add tools */ gt_toolbox_add_tool(tools, "orffinder", gt_orffinder()); gt_toolbox_add(tools, "chseqids", gt_chseqids); gt_toolbox_add(tools, "clean", gt_clean); gt_toolbox_add(tools, "convertseq", gt_convertseq); gt_toolbox_add(tools, "matstat", gt_matstat); gt_toolbox_add(tools, "merge", gt_merge); gt_toolbox_add(tools, "mgth", gt_mgth); gt_toolbox_add(tools, "mkfmindex", gt_mkfmindex); gt_toolbox_add(tools, "mmapandread", gt_mmapandread); gt_toolbox_add(tools, "seqstat", gt_seqstat); gt_toolbox_add(tools, "suffixerator", gt_suffixerator); gt_toolbox_add(tools, "uniquesub", gt_uniquesub); gt_toolbox_add_hidden_tool(tools, "dev", gt_dev()); gt_toolbox_add_hidden_tool(tools, "filter", gt_select()); /* hidden "link from the mutate to the seqmutate tool for backward compatibility */ gt_toolbox_add_hidden_tool(tools, "mutate", gt_seqmutate()); gt_toolbox_add_hidden_tool(tools, "template", gt_template()); gt_toolbox_add_tool(tools, "bed_to_gff3", gt_bed_to_gff3()); gt_toolbox_add_tool(tools, "cds", gt_cds()); gt_toolbox_add_tool(tools, "chain2dim", gt_chain2dim()); gt_toolbox_add_tool(tools, "compreads", gt_compreads()); gt_toolbox_add_tool(tools, "congruence", gt_congruence()); gt_toolbox_add_tool(tools, "csa", gt_csa()); gt_toolbox_add_tool(tools, "dot", gt_dot()); gt_toolbox_add_tool(tools, "dupfeat", gt_dupfeat()); gt_toolbox_add_tool(tools, "encseq", gt_encseq()); gt_toolbox_add_tool(tools, "encseq2spm", gt_encseq2spm()); gt_toolbox_add_tool(tools, "eval", gt_eval()); gt_toolbox_add_tool(tools, "extractfeat", gt_extractfeat()); gt_toolbox_add_tool(tools, "extractseq", gt_extractseq()); gt_toolbox_add_tool(tools, "featureindex", gt_featureindex()); gt_toolbox_add_tool(tools, "fingerprint", gt_fingerprint()); gt_toolbox_add_tool(tools, "genomediff", gt_genomediff()); gt_toolbox_add_tool(tools, "gff3", gt_gff3()); gt_toolbox_add_tool(tools, "gff3_to_gtf", gt_gff3_to_gtf()); gt_toolbox_add_tool(tools, "gff3validator", gt_gff3validator()); gt_toolbox_add_tool(tools, "gtf_to_gff3", gt_gtf_to_gff3()); gt_toolbox_add_tool(tools, "hop", gt_hop()); gt_toolbox_add_tool(tools, "id_to_md5", gt_id_to_md5()); gt_toolbox_add_tool(tools, "interfeat", gt_interfeat()); gt_toolbox_add_tool(tools, "ltrclustering", gt_ltrclustering()); gt_toolbox_add_tool(tools, "ltrdigest", gt_ltrdigest()); gt_toolbox_add_tool(tools, "ltrharvest", gt_ltrharvest()); gt_toolbox_add_tool(tools, "matchtool", gt_matchtool()); gt_toolbox_add_tool(tools, "md5_to_id", gt_md5_to_id()); gt_toolbox_add_tool(tools, "mergefeat", gt_mergefeat()); gt_toolbox_add_tool(tools, "mkfeatureindex", gt_mkfeatureindex()); gt_toolbox_add_tool(tools, "packedindex", gt_packedindex()); gt_toolbox_add_tool(tools, "prebwt", gt_prebwt()); gt_toolbox_add_tool(tools, "readjoiner", gt_readjoiner()); gt_toolbox_add_tool(tools, "repfind", gt_repfind()); gt_toolbox_add_tool(tools, "scriptfilter", gt_script_filter()); gt_toolbox_add_tool(tools, "select", gt_select()); gt_toolbox_add_tool(tools, "seq", gt_seq()); gt_toolbox_add_tool(tools, "seqfilter", gt_seqfilter()); gt_toolbox_add_tool(tools, "seqids", gt_seqids()); gt_toolbox_add_tool(tools, "seqmutate", gt_seqmutate()); gt_toolbox_add_tool(tools, "seqorder", gt_seqorder()); gt_toolbox_add_tool(tools, "seqtransform", gt_seqtransform()); gt_toolbox_add_tool(tools, "seqtranslate", gt_seqtranslate()); gt_toolbox_add_tool(tools, "sequniq", gt_sequniq()); gt_toolbox_add_tool(tools, "shredder", gt_shredder()); gt_toolbox_add_tool(tools, "shulengthdist", gt_shulengthdist()); gt_toolbox_add_tool(tools, "simreads", gt_simreads()); gt_toolbox_add_tool(tools, "snpper", gt_snpper()); gt_toolbox_add_tool(tools, "splicesiteinfo", gt_splicesiteinfo()); gt_toolbox_add_tool(tools, "splitfasta", gt_splitfasta()); gt_toolbox_add_tool(tools, "stat", gt_stat()); gt_toolbox_add_tool(tools, "tagerator", gt_tagerator()); gt_toolbox_add_tool(tools, "tallymer", gt_tallymer()); gt_toolbox_add_tool(tools, "uniq", gt_uniq()); #ifndef WITHOUT_CAIRO gt_toolbox_add(tools, "sketch", gt_sketch); gt_toolbox_add_tool(tools, "sketch_page", gt_sketch_page()); #endif return tools; } GtHashmap* gtt_unit_tests(void) { GtHashmap *unit_tests = gt_hashmap_new(GT_HASH_STRING, NULL, NULL); /* add unit tests */ gt_hashmap_add(unit_tests, "compactulongstore class", gt_compact_ulong_store_unit_test); gt_hashmap_add(unit_tests, "alphabet class", gt_alphabet_unit_test); gt_hashmap_add(unit_tests, "alignment class", gt_alignment_unit_test); gt_hashmap_add(unit_tests, "array class", gt_array_unit_test); gt_hashmap_add(unit_tests, "array example", gt_array_example); gt_hashmap_add(unit_tests, "array2dim example", gt_array2dim_example); gt_hashmap_add(unit_tests, "array2dim sparse example", gt_array2dim_sparse_example); gt_hashmap_add(unit_tests, "array3dim example", gt_array3dim_example); gt_hashmap_add(unit_tests, "basename module", gt_basename_unit_test); gt_hashmap_add(unit_tests, "bit pack array class", gt_bitpackarray_unit_test); gt_hashmap_add(unit_tests, "bit pack string module", gt_bitPackString_unit_test); gt_hashmap_add(unit_tests, "bittab class", gt_bittab_unit_test); gt_hashmap_add(unit_tests, "bittab example", gt_bittab_example); gt_hashmap_add(unit_tests, "bsearch module", gt_bsearch_unit_test); gt_hashmap_add(unit_tests, "codon iterator class, simple", gt_codon_iterator_simple_unit_test); gt_hashmap_add(unit_tests, "codon iterator class, encoded", gt_codon_iterator_encseq_unit_test); gt_hashmap_add(unit_tests, "color space module", gt_colorspace_unit_test); gt_hashmap_add(unit_tests, "combinatorics", gt_combinatorics_unit_test); gt_hashmap_add(unit_tests, "countingsort module", gt_countingsort_unit_test); gt_hashmap_add(unit_tests, "cstr module", gt_cstr_unit_test); gt_hashmap_add(unit_tests, "cstr table class", gt_cstr_table_unit_test); gt_hashmap_add(unit_tests, "description buffer class", gt_desc_buffer_unit_test); gt_hashmap_add(unit_tests, "disc distri class", gt_disc_distri_unit_test); gt_hashmap_add(unit_tests, "dlist class", gt_dlist_unit_test); gt_hashmap_add(unit_tests, "dlist example", gt_dlist_example); gt_hashmap_add(unit_tests, "dynamic bittab class", gt_dyn_bittab_unit_test); gt_hashmap_add(unit_tests, "elias gamma class", gt_elias_gamma_unit_test); gt_hashmap_add(unit_tests, "encdesc class", gt_encdesc_unit_test); gt_hashmap_add(unit_tests, "encseq builder class", gt_encseq_builder_unit_test); gt_hashmap_add(unit_tests, "encseq gc module", gt_encseq_gc_unit_test); gt_hashmap_add(unit_tests, "evaluator class", gt_evaluator_unit_test); gt_hashmap_add(unit_tests, "feature node iterator example", gt_feature_node_iterator_example); gt_hashmap_add(unit_tests, "feature node class", gt_feature_node_unit_test); gt_hashmap_add(unit_tests, "genome node class", gt_genome_node_unit_test); gt_hashmap_add(unit_tests, "gff3 escaping module", gt_gff3_escaping_unit_test); gt_hashmap_add(unit_tests, "grep module", gt_grep_unit_test); gt_hashmap_add(unit_tests, "golomb class", gt_golomb_unit_test); gt_hashmap_add(unit_tests, "hashmap class", gt_hashmap_unit_test); gt_hashmap_add(unit_tests, "hashtable class", gt_hashtable_unit_test); gt_hashmap_add(unit_tests, "hmm class", gt_hmm_unit_test); gt_hashmap_add(unit_tests, "huffman coding class", gt_huffman_unit_test); gt_hashmap_add(unit_tests, "interval tree class", gt_interval_tree_unit_test); gt_hashmap_add(unit_tests, "Lua serializer module", gt_lua_serializer_unit_test); gt_hashmap_add(unit_tests, "ltrelement module", gt_ltrelement_unit_test); gt_hashmap_add(unit_tests, "mathsupport module", gt_mathsupport_unit_test); gt_hashmap_add(unit_tests, "memory allocator module", gt_ma_unit_test); gt_hashmap_add(unit_tests, "MD5 seqid module", gt_md5_seqid_unit_test); gt_hashmap_add(unit_tests, "rdj: suffix-prefix matches list module", gt_spmlist_unit_test); gt_hashmap_add(unit_tests, "PBS finder module", gt_pbs_unit_test); gt_hashmap_add(unit_tests, "PPT finder module", gt_ppt_unit_test); gt_hashmap_add(unit_tests, "popcount sorted tab", gt_popcount_tab_unit_test); gt_hashmap_add(unit_tests, "quality module", gt_quality_unit_test); gt_hashmap_add(unit_tests, "queue class", gt_queue_unit_test); gt_hashmap_add(unit_tests, "range class", gt_range_unit_test); gt_hashmap_add(unit_tests, "ranked list class", gt_ranked_list_unit_test); gt_hashmap_add(unit_tests, "red-black tree class", gt_rbtree_unit_test); gt_hashmap_add(unit_tests, "range minimum query class", gt_rmq_unit_test); gt_hashmap_add(unit_tests, "rdj: string graph class", gt_strgraph_unit_test); gt_hashmap_add(unit_tests, "red-black tree class", gt_rbtree_unit_test); gt_hashmap_add(unit_tests, "safearith example", gt_safearith_example); gt_hashmap_add(unit_tests, "safearith module", gt_safearith_unit_test); gt_hashmap_add(unit_tests, "sequence buffer class", gt_sequence_buffer_unit_test); gt_hashmap_add(unit_tests, "splicedseq class", gt_splicedseq_unit_test); gt_hashmap_add(unit_tests, "splitter class", gt_splitter_unit_test); gt_hashmap_add(unit_tests, "string class", gt_str_unit_test); gt_hashmap_add(unit_tests, "string matching module", gt_string_matching_unit_test); gt_hashmap_add(unit_tests, "symbol module", gt_symbol_unit_test); gt_hashmap_add(unit_tests, "tag value map class", gt_tag_value_map_unit_test); gt_hashmap_add(unit_tests, "tag value map example", gt_tag_value_map_example); gt_hashmap_add(unit_tests, "tokenizer class", gt_tokenizer_unit_test); gt_hashmap_add(unit_tests, "translator class", gt_translator_unit_test); gt_hashmap_add(unit_tests, "uint64hashtable", gt_uint64hashtable_unit_test); #ifndef WITHOUT_CAIRO gt_hashmap_add(unit_tests, "block class", gt_block_unit_test); gt_hashmap_add(unit_tests, "diagram class", gt_diagram_unit_test); gt_hashmap_add(unit_tests, "style class", gt_style_unit_test); gt_hashmap_add(unit_tests, "element class", gt_element_unit_test); gt_hashmap_add(unit_tests, "memory feature index class", gt_feature_index_memory_unit_test); gt_hashmap_add(unit_tests, "database feature index class (GFF-like)", gt_anno_db_gfflike_unit_test); gt_hashmap_add(unit_tests, "imageinfo class", gt_image_info_unit_test); gt_hashmap_add(unit_tests, "line class", gt_line_unit_test); gt_hashmap_add(unit_tests, "track class", gt_track_unit_test); #endif return unit_tests; } genometools-1.5.1/src/gtt.h000066400000000000000000000022231211610345200156010ustar00rootroot00000000000000/* Copyright (c) 2003-2007 Gordon Gremme Copyright (c) 2003-2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GTT_H #define GTT_H #include "core/fptr_api.h" #include "core/hashmap.h" #include "extended/toolbox.h" /* The GenomeTools toolbox (gtt) module */ GtToolbox* gtt_tools(void); /* return all GenomeTools tools */ GtHashmap* gtt_unit_tests(void); /* return all GenomeTools unit tests */ #endif genometools-1.5.1/src/interactive.c000066400000000000000000000147251211610345200173250ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* This interactive Lua interpreter was heavily inspired by the original Lua interpreter (lua.c), therefore the copyright notice in lua.h also applies. */ #include #include #include #include #include "interactive.h" #include "lauxlib.h" #include "libtecla.h" #include "core/assert_api.h" #include "core/cstr_api.h" #include "core/ma.h" #include "core/unused_api.h" static lua_State *globalL = NULL; static void lstop(lua_State *L, GT_UNUSED lua_Debug *ar) { lua_sethook(L, NULL, 0, 0); luaL_error(L, "interrupted!"); } static void laction (int i) { signal(i, SIG_DFL); /* if another SIGINT happens before lstop, terminate process (default action) */ lua_sethook(globalL, lstop, LUA_MASKCALL | LUA_MASKRET | LUA_MASKCOUNT, 1); } static int report(lua_State *L, int status) { if (status && !lua_isnil(L, -1)) { const char *msg = lua_tostring(L, -1); if (msg == NULL) msg = "(error object is not a string)"; fprintf(stderr, "%s\n", msg); fflush(stderr); lua_pop(L, 1); } return status; } static int traceback(lua_State *L) { lua_getfield(L, LUA_GLOBALSINDEX, "debug"); if (!lua_istable(L, -1)) { lua_pop(L, 1); return 1; } lua_getfield(L, -1, "traceback"); if (!lua_isfunction(L, -1)) { lua_pop(L, 2); return 1; } lua_pushvalue(L, 1); /* pass error message */ lua_pushinteger(L, 2); /* skip this function and traceback */ lua_call(L, 2, 1); /* call debug.traceback */ return 1; } static int docall(lua_State *L, int narg, int clear) { int status; int base = lua_gettop(L) - narg; /* function index */ lua_pushcfunction(L, traceback); /* push traceback function */ lua_insert(L, base); /* put it under chunk and args */ signal(SIGINT, laction); status = lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base); signal(SIGINT, SIG_DFL); lua_remove(L, base); /* remove traceback function */ /* force a complete garbage collection in case of errors */ if (status != 0) lua_gc(L, LUA_GCCOLLECT, 0); return status; } static const char* get_prompt(lua_State *L, bool firstline) { const char *p; lua_getfield(L, LUA_GLOBALSINDEX, firstline ? "_PROMPT" : "_PROMPT2"); p = lua_tostring(L, -1); if (p == NULL) p = (firstline ? "> " : ">> "); lua_pop(L, 1); /* remove global */ return p; } static int incomplete(lua_State *L, int status) { if (status == LUA_ERRSYNTAX) { size_t lmsg; const char *msg = lua_tolstring(L, -1, &lmsg); const char *tp = msg + lmsg - (sizeof (LUA_QL("")) - 1); if (strstr(msg, LUA_QL("")) == tp) { lua_pop(L, 1); return 1; } } return 0; /* else... */ } static int pushline(lua_State *L, bool firstline, GT_UNUSED GetLine *gl) { char buffer[BUFSIZ]; char *b = buffer; size_t l; const char *prmt = get_prompt(L, firstline); #ifdef CURSES if (!(b = gl_get_line(gl, prmt, NULL, 0))) return 0; /* no input */ #else b = buffer; /* use static buffer */ fputs(prmt, stdout); fflush(stdout);/* show prompt */ if (!fgets(b, BUFSIZ, stdin)) /* get line */ return 0; /* no input */ #endif l = strlen(b); if (l > 0 && b[l-1] == '\n') /* line ends with newline? */ b[l-1] = '\0'; /* remove it */ if (firstline && b[0] == '=') /* first line starts with `=' ? */ lua_pushfstring(L, "return %s", b+1); /* change it to `return' */ else lua_pushstring(L, b); return 1; } static int loadline(lua_State *L, GetLine *gl) { int status; lua_settop(L, 0); if (!pushline(L, true, gl)) return -1; /* no input */ for (;;) { /* repeat until gets a complete line */ status = luaL_loadbuffer(L, lua_tostring(L, 1), lua_strlen(L, 1), "=stdin"); if (!incomplete(L, status)) break; /* cannot try to add lines? */ if (!pushline(L, false, gl)) /* no more input? */ return -1; lua_pushliteral(L, "\n"); /* add a new line... */ lua_insert(L, -2); /* ...between the two lines */ lua_concat(L, 3); /* join them */ } #ifdef CURSES if (lua_strlen(L, 1) > 0) { /* non-empty line? */ char *line; GT_UNUSED int rval; /* save complete line in history */ line = gt_cstr_dup(lua_tostring(L, 1)); gt_cstr_rep(line, '\n', ' '); /* replace all newlines in with blanks, because otherwise gl_append_history() would truncate at the first newline */ rval = gl_append_history(gl, line); gt_assert(!rval); gt_free(line); } lua_remove(L, 1); /* remove line */ #endif return status; } static void dotty(lua_State *L, GetLine *gl) { int status; while ((status = loadline(L, gl)) != -1) { if (status == 0) status = docall(L, 0, 0); report(L, status); if (status == 0 && lua_gettop(L) > 0) { /* any result to print? */ lua_getglobal(L, "print"); lua_insert(L, 1); if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0) fprintf(stderr, "%s\n", lua_pushfstring(L, "error calling " LUA_QL("print") " (%s)", lua_tostring(L, -1))); fflush(stderr); } } lua_settop(L, 0); /* clear stack */ fputs("\n", stdout); fflush(stdout); } void run_interactive_lua_interpreter(lua_State *L) { #ifdef CURSES GetLine *gl; gl = new_GetLine(2048, 8096); gl_automatic_history(gl, 0); /* disable automatic history saving, we save complete input lines explicitly */ if (!gl) { fprintf(stderr, "cannot create GetLine object\n"); exit(EXIT_FAILURE); } #endif globalL = L; /* for signal handling */ #ifdef CURSES dotty(L, gl); del_GetLine(gl); #else dotty(L, NULL); #endif } genometools-1.5.1/src/interactive.h000066400000000000000000000017201211610345200173210ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef INTERACTIVE_H #define INTERACTIVE_H #include "lua.h" void run_interactive_lua_interpreter(lua_State*); #endif genometools-1.5.1/src/ltr/000077500000000000000000000000001211610345200154345ustar00rootroot00000000000000genometools-1.5.1/src/ltr/gt_ltrclustering.c000066400000000000000000000151521211610345200211770ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Kastens Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/ma.h" #include "core/output_file_api.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "ltr/ltr_cluster_stream.h" #include "ltr/ltr_classify_stream.h" #include "ltr/gt_ltrclustering.h" typedef struct { GtFile *outfp; GtOutputFileInfo *ofi; GtStr *file_prefix; unsigned long psmall, plarge; double xdrop, identity; int wordsize; } GtLTRClusteringArguments; static void* gt_ltrclustering_arguments_new(void) { GtLTRClusteringArguments *arguments = gt_calloc((size_t) 1, sizeof (*arguments)); arguments->ofi = gt_output_file_info_new(); arguments->file_prefix = gt_str_new(); return arguments; } static void gt_ltrclustering_arguments_delete(void *tool_arguments) { GtLTRClusteringArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->file_prefix); gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_ltrclustering_option_parser_new(void *tool_arguments) { GtLTRClusteringArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] indexname [GFF3_file ...]", "Cluster features of LTRs."); /* -psmall */ option = gt_option_new_ulong_min_max("psmall", "specify how many percent of" " the smaller sequence a match needs to" " cover in order to cluster the two" " sequences of the match.", &arguments->psmall, 0, 0, 100UL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); /* -plarge */ option = gt_option_new_ulong_min_max("plarge", "specify how many percent of" " the larger sequence a match needs to" " cover in order to cluster the two" " sequences of the match.", &arguments->plarge, 0, 0, 100UL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_min_args(op, 1U); return op; } static int gt_ltrclustering_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtLTRClusteringArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream = NULL, *last_stream = NULL, *ltr_cluster_stream = NULL, *ltr_classify_stream = NULL, *gff3_out_stream = NULL; GtEncseqLoader *el; GtEncseq *encseq; int had_err = 0, arg = parsed_args; const char *indexname = argv[arg]; gt_error_check(err); gt_assert(arguments); arg++; el = gt_encseq_loader_new(); encseq = gt_encseq_loader_load(el, indexname, err); if (!encseq) had_err = -1; if (!had_err) { last_stream = gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - arg, argv + arg); last_stream = ltr_cluster_stream = gt_ltr_cluster_stream_new(last_stream, encseq, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, 10, GT_UNDEF_INT, GT_UNDEF_INT, arguments->plarge, arguments->psmall, NULL, err); last_stream = ltr_classify_stream = gt_ltr_classify_stream_new(last_stream, NULL, NULL, NULL, NULL, err); if (!ltr_classify_stream) had_err = -1; else last_stream = gff3_out_stream = gt_gff3_out_stream_new(last_stream, arguments->outfp); } if (!had_err) had_err = gt_node_stream_pull(last_stream, err); gt_node_stream_delete(ltr_classify_stream); gt_node_stream_delete(ltr_cluster_stream); gt_node_stream_delete(gff3_in_stream); gt_node_stream_delete(gff3_out_stream); gt_encseq_loader_delete(el); gt_encseq_delete(encseq); return had_err; } GtTool* gt_ltrclustering(void) { return gt_tool_new(gt_ltrclustering_arguments_new, gt_ltrclustering_arguments_delete, gt_ltrclustering_option_parser_new, NULL, gt_ltrclustering_runner); } genometools-1.5.1/src/ltr/gt_ltrclustering.h000066400000000000000000000017741211610345200212110ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Kastens Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_LTRCLUSTERING_H #define GT_LTRCLUSTERING_H #include "core/tool_api.h" /* the ltrclustering tool */ GtTool* gt_ltrclustering(void); #endif genometools-1.5.1/src/ltr/gt_ltrdigest.c000066400000000000000000000465701211610345200203070ustar00rootroot00000000000000/* Copyright (c) 2008-2010 Sascha Steinbiss Copyright (c) 2008-2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #endif #include #include "core/fileutils_api.h" #include "core/log.h" #include "core/logger.h" #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/safearith.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "ltr/gt_ltrdigest.h" #include "ltr/ltrdigest_def.h" #include "ltr/ltrdigest_stream.h" #include "ltr/ltrfileout_stream.h" #include "core/encseq.h" typedef struct GtLTRdigestOptions { GtPBSOptions pbs_opts; GtPPTOptions ppt_opts; #ifdef HAVE_HMMER GtPdomOptions pdom_opts; #endif GtStr *trna_lib, *prefix, *cutoffs; bool verbose; GtOutputFileInfo *ofi; GtFile *outfp; unsigned long nthreads; unsigned int seqnamelen; } GtLTRdigestOptions; static void* gt_ltrdigest_arguments_new(void) { GtLTRdigestOptions *arguments = gt_calloc((size_t) 1, sizeof *arguments); memset(arguments, 0, sizeof *arguments); #ifdef HAVE_HMMER arguments->pdom_opts.hmm_files = gt_str_array_new(); #endif arguments->trna_lib = gt_str_new(); arguments->prefix = gt_str_new(); arguments->cutoffs = gt_str_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_ltrdigest_arguments_delete(void *tool_arguments) { GtLTRdigestOptions *arguments = tool_arguments; if (!arguments) return; #ifdef HAVE_HMMER gt_str_array_delete(arguments->pdom_opts.hmm_files); #endif gt_str_delete(arguments->trna_lib); gt_str_delete(arguments->prefix); gt_str_delete(arguments->cutoffs); gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_ltrdigest_option_parser_new(void *tool_arguments) { GtLTRdigestOptions *arguments = tool_arguments; GtOptionParser *op; GtOption *o, *ot, *oto; #ifdef HAVE_HMMER GtOption *oh, *oc, *oeval; static const char *cutoffs[] = {"NONE", "GA", "TC", NULL}; #endif static GtRange pptlen_defaults = { 8UL, 30UL}, uboxlen_defaults = { 3UL, 30UL}, pbsalilen_defaults = {11UL, 30UL}, pbsoffsetlen_defaults = { 0UL, 5UL}, pbstrnaoffsetlen_defaults = { 0UL, 5UL}; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] gff3_file indexname", "Identifies and annotates sequence features in LTR " "retrotransposon candidates."); /* Output files */ oto = gt_option_new_string("outfileprefix", "prefix for output files (e.g. 'foo' will create " "files called 'foo_*.csv' and 'foo_*.fas')\n" "Omit this option for GFF3 output only.", arguments->prefix, NULL); gt_option_parser_add_option(op, oto); gt_option_hide_default(oto); o = gt_option_new_uint("seqnamelen", "set maximal length of sequence names in FASTA headers" " (e.g. for clustalw or similar tools)", &arguments->seqnamelen, 20U); gt_option_parser_add_option(op, o); /* PPT search options */ o = gt_option_new_range("pptlen", "required PPT length range", &arguments->ppt_opts.ppt_len, &pptlen_defaults); gt_option_parser_add_option(op, o); o = gt_option_new_range("uboxlen", "required U-box length range", &arguments->ppt_opts.ubox_len, &uboxlen_defaults); gt_option_parser_add_option(op, o); o = gt_option_new_uint("uboxdist", "allowed U-box distance range from PPT", &arguments->ppt_opts.max_ubox_dist, 0); gt_option_parser_add_option(op, o); o = gt_option_new_uint("pptradius", "radius around beginning of 3' LTR " "to search for PPT", &arguments->ppt_opts.radius, 30U); gt_option_parser_add_option(op, o); o = gt_option_new_probability("pptrprob", "purine emission probability inside PPT", &arguments->ppt_opts.ppt_purine_prob, PPT_PURINE_PROB); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); o = gt_option_new_probability("pptyprob", "pyrimidine emission probability inside PPT", &arguments->ppt_opts.ppt_pyrimidine_prob, PPT_PYRIMIDINE_PROB); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); o = gt_option_new_probability("pptgprob", "background G emission probability outside PPT", &arguments->ppt_opts.bkg_g_prob, BKG_G_PROB); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); o = gt_option_new_probability("pptcprob", "background C emission probability outside PPT", &arguments->ppt_opts.bkg_c_prob, BKG_C_PROB); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); o = gt_option_new_probability("pptaprob", "background A emission probability outside PPT", &arguments->ppt_opts.bkg_a_prob, BKG_A_PROB); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); o = gt_option_new_probability("ppttprob", "background T emission probability outside PPT", &arguments->ppt_opts.bkg_t_prob, BKG_T_PROB); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); o = gt_option_new_probability("pptuprob", "U/T emission probability inside U-box", &arguments->ppt_opts.ubox_u_prob, UBOX_U_PROB); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); /* PBS search options */ ot = gt_option_new_filename("trnas", "tRNA library in multiple FASTA format for PBS " "detection\n" "Omit this option to disable PBS search.", arguments->trna_lib); gt_option_parser_add_option(op, ot); gt_option_hide_default(ot); o = gt_option_new_range("pbsalilen", "required PBS/tRNA alignment length range", &arguments->pbs_opts.alilen, &pbsalilen_defaults); gt_option_parser_add_option(op, o); gt_option_imply(o, ot); o = gt_option_new_range("pbsoffset", "allowed PBS offset from LTR boundary range", &arguments->pbs_opts.offsetlen, &pbsoffsetlen_defaults); gt_option_parser_add_option(op, o); gt_option_imply(o, ot); o = gt_option_new_range("pbstrnaoffset", "allowed PBS/tRNA 3' end alignment offset range", &arguments->pbs_opts.trnaoffsetlen, &pbstrnaoffsetlen_defaults); gt_option_parser_add_option(op, o); gt_option_imply(o, ot); o = gt_option_new_uint("pbsmaxedist", "maximal allowed PBS/tRNA alignment unit " "edit distance", &arguments->pbs_opts.max_edist, 1U); gt_option_parser_add_option(op, o); gt_option_imply(o, ot); o = gt_option_new_uint("pbsradius", "radius around end of 5' LTR " "to search for PBS", &arguments->pbs_opts.radius, 30U); gt_option_parser_add_option(op, o); gt_option_imply(o, ot); /* Protein domain search options */ #ifdef HAVE_HMMER oh = gt_option_new_filename_array("hmms", "profile HMM models for domain detection " "(separate by spaces, finish with --) in " "HMMER3 format\n" "Omit this option to disable pHMM search.", arguments->pdom_opts.hmm_files); gt_option_parser_add_option(op, oh); oeval = gt_option_new_probability("pdomevalcutoff", "global E-value cutoff for pHMM search\n" "default 1E-6", &arguments->pdom_opts.evalue_cutoff, 0.000001); gt_option_parser_add_option(op, oeval); gt_option_is_extended_option(oeval); gt_option_hide_default(oeval); gt_option_imply(oeval, oh); oc = gt_option_new_choice("pdomcutoff", "model-specific score cutoff\n" "choose from TC (trusted cutoff) | " "GA (gathering cutoff) | " "NONE (no cutoffs)", arguments->cutoffs, cutoffs[0], cutoffs); gt_option_parser_add_option(op, oc); gt_option_is_extended_option(oeval); gt_option_imply(oeval, oh); o = gt_option_new_bool("aliout", "output pHMM to amino acid sequence alignments", &arguments->pdom_opts.write_alignments, false); gt_option_parser_add_option(op, o); gt_option_imply(o, oh); gt_option_imply(o, oto); o = gt_option_new_bool("aaout", "output amino acid sequences for protein domain " "hits", &arguments->pdom_opts.write_aaseqs, false); gt_option_parser_add_option(op, o); gt_option_imply(o, oh); gt_option_imply(o, oto); o = gt_option_new_bool("allchains", "output features from all chains and unchained " "features, labeled with chain numbers", &arguments->pdom_opts.output_all_chains, false); gt_option_parser_add_option(op, o); gt_option_imply(o, oh); o = gt_option_new_uint("maxgaplen", "maximal allowed gap size between fragments (in amino " "acids) when chaining pHMM hits for a protein domain", &arguments->pdom_opts.chain_max_gap_length, 50); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); gt_option_imply(o, oh); o = gt_option_new_ulong("threads", "DEPRECATED, only included for compatibility reasons!" " Use the -j parameter of the 'gt' call instead.", &arguments->nthreads, 0); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); #endif /* Extended PBS options */ o = gt_option_new_int("pbsmatchscore", "match score for PBS/tRNA alignments", &arguments->pbs_opts.ali_score_match, 5); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); gt_option_imply(o, ot); o = gt_option_new_int("pbsmismatchscore", "mismatch score for PBS/tRNA alignments", &arguments->pbs_opts.ali_score_mismatch, -10); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); gt_option_imply(o, ot); o = gt_option_new_int("pbsinsertionscore", "insertion score for PBS/tRNA alignments", &arguments->pbs_opts.ali_score_insertion, -20); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); gt_option_imply(o, ot); o = gt_option_new_int("pbsdeletionscore", "deletion score for PBS/tRNA alignments", &arguments->pbs_opts.ali_score_deletion, -20); gt_option_parser_add_option(op, o); gt_option_is_extended_option(o); gt_option_imply(o, ot); /* verbosity */ o = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, o); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_min_max_args(op, 2U, 2U); return op; } int gt_ltrdigest_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError* err) { GtLTRdigestOptions *arguments = tool_arguments; int had_err = 0; if (arguments->nthreads > 0) { gt_warning("The '-threads' option is deprecated. Please use the '-j'" "option of the 'gt' call instead, e.g.:\n" " gt -j %lu ltrdigest ...", arguments->nthreads); } /* -trnas */ if (!had_err && arguments->trna_lib && gt_str_length(arguments->trna_lib) > 0) { if (!gt_file_exists(gt_str_get(arguments->trna_lib))) { gt_error_set(err, "File '%s' does not exist!", gt_str_get(arguments->trna_lib)); had_err = -1; } } if (!had_err) { GtHMM *hmm; GtAlphabet *alpha; alpha = gt_alphabet_new_dna(); hmm = gt_ppt_hmm_new(alpha, &arguments->ppt_opts); if (!hmm) { gt_error_set(err, "PPT HMM parameters are not valid!"); had_err = -1; } else gt_hmm_delete(hmm); gt_alphabet_delete(alpha); } return had_err; } static int gt_ltrdigest_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtLTRdigestOptions *arguments = tool_arguments; GtNodeStream *gff3_in_stream = NULL, *gff3_out_stream = NULL, *ltrdigest_stream = NULL, *tab_out_stream = NULL, *last_stream = NULL; int had_err = 0, tests_to_run = 0, arg = parsed_args; const char *indexname = argv[arg+1]; GtLogger *logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); GtEncseqLoader *el; GtEncseq *encseq; gt_error_check(err); gt_assert(arguments); /* Set sequence encoder options. Defaults are ok. */ el = gt_encseq_loader_new(); gt_encseq_loader_set_logger(el, logger); /* Open sequence file */ encseq = gt_encseq_loader_load(el, indexname, err); if (!encseq) had_err = -1; /* Always search for PPT. */ tests_to_run |= GT_LTRDIGEST_RUN_PPT; /* Open tRNA library if given. */ if (!had_err && arguments->trna_lib && gt_str_length(arguments->trna_lib) > 0) { tests_to_run |= GT_LTRDIGEST_RUN_PBS; arguments->pbs_opts.trna_lib = gt_bioseq_new(gt_str_get(arguments->trna_lib), err); if (gt_error_is_set(err)) had_err = -1; } #ifdef HAVE_HMMER /* Open HMMER files if given. */ if (!had_err && gt_str_array_size(arguments->pdom_opts.hmm_files) > 0) { tests_to_run |= GT_LTRDIGEST_RUN_PDOM; if (!strcmp(gt_str_get(arguments->cutoffs), "GA")) { arguments->pdom_opts.cutoff = GT_PHMM_CUTOFF_GA; } else if (!strcmp(gt_str_get(arguments->cutoffs), "TC")) { arguments->pdom_opts.cutoff = GT_PHMM_CUTOFF_TC; } else if (!strcmp(gt_str_get(arguments->cutoffs), "NONE")) { arguments->pdom_opts.cutoff = GT_PHMM_CUTOFF_NONE; } else { gt_error_set(err, "invalid cutoff setting!"); had_err = -1; } } #endif if (!had_err) { /* set up stream flow * ------------------*/ last_stream = gff3_in_stream = gt_gff3_in_stream_new_sorted(argv[arg]); last_stream = ltrdigest_stream = gt_ltrdigest_stream_new(last_stream, tests_to_run, encseq, &arguments->pbs_opts, &arguments->ppt_opts, #ifdef HAVE_HMMER &arguments->pdom_opts, #endif err); if (!ltrdigest_stream) had_err = -1; } if (!had_err) { /* attach tabular output stream, if requested */ if (gt_str_length(arguments->prefix) > 0) { last_stream = tab_out_stream = gt_ltr_fileout_stream_new(last_stream, tests_to_run, encseq, gt_str_get(arguments->prefix), &arguments->ppt_opts, &arguments->pbs_opts, #ifdef HAVE_HMMER &arguments->pdom_opts, #endif gt_str_get(arguments->trna_lib), argv[arg+1], argv[arg], arguments->seqnamelen, err); #ifdef HAVE_HMMER if (arguments->pdom_opts.write_alignments) gt_ltr_fileout_stream_enable_pdom_alignment_output(tab_out_stream); if (arguments->pdom_opts.write_aaseqs) gt_ltr_fileout_stream_enable_aa_sequence_output(tab_out_stream); #endif } last_stream = gff3_out_stream = gt_gff3_out_stream_new(last_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(last_stream, err); } gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(ltrdigest_stream); if (tab_out_stream != NULL) gt_node_stream_delete(tab_out_stream); gt_node_stream_delete(gff3_in_stream); gt_encseq_loader_delete(el); gt_encseq_delete(encseq); encseq = NULL; gt_bioseq_delete(arguments->pbs_opts.trna_lib); gt_logger_delete(logger); return had_err; } GtTool* gt_ltrdigest(void) { return gt_tool_new(gt_ltrdigest_arguments_new, gt_ltrdigest_arguments_delete, gt_ltrdigest_option_parser_new, gt_ltrdigest_arguments_check, gt_ltrdigest_runner); } genometools-1.5.1/src/ltr/gt_ltrdigest.h000066400000000000000000000017451211610345200203070ustar00rootroot00000000000000/* Copyright (c) 2008 Sascha Steinbiss Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_LTRDIGEST_H #define GT_LTRDIGEST_H #include "core/tool_api.h" /* the LTRdigest tool */ GtTool* gt_ltrdigest(void); #endif genometools-1.5.1/src/ltr/gt_ltrharvest.c000066400000000000000000000617071211610345200205030ustar00rootroot00000000000000/* Copyright (c) 2010-2012 Sascha Steinbiss Copyright (c) 2007 David Ellinghaus Copyright (c) 2007-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "core/option_api.h" #include "core/unused_api.h" #include "core/output_file_api.h" #include "core/undef_api.h" #include "core/versionfunc.h" #include "extended/genome_node.h" #include "extended/gff3_out_stream_api.h" #include "ltr/ltr_four_char_motif.h" #include "ltr/ltrharvest_stream.h" #include "ltr/ltrharvest_fasta_out_stream.h" #include "ltr/ltrharvest_tabout_stream.h" #include "ltr/ltrharvest_tabout_visitor.h" #include "ltr/gt_ltrharvest.h" typedef struct { GtOutputFileInfo *ofi; GtFile *outfp; GtStr *str_indexname, *str_motif, *str_overlaps, *str_fastaoutputfilename, *str_fastaoutputfilenameinnerregion, *str_gff3filename; GtRange searchrange; unsigned long minseedlength, minltrlength, maxltrlength, mindistance, maxdistance, numofboundaries, offset; double similaritythreshold; int xdropbelowscore; GtXdropArbitraryscores arbitscores; unsigned int minlengthTSD, maxlengthTSD, allowedmismatches; unsigned int vicinity; bool bestoverlaps, nooverlaps, fastaoutput, fastaoutputinnerregion, gff3output, longoutput, scan, verbosemode; GtOption *optionmotif, *optionmotifmis, *optionoverlaps, *optionout, *optionoutinner, *optiongff3; GtLTRFourCharMotif *motif; } LTRharvestArguments; static void gt_ltrharvest_showopts(const LTRharvestArguments *lo) { printf("# user defined options and values:\n"); if (lo->verbosemode) { printf("# verbosemode: On\n"); } else { printf("# verbosemode: Off\n"); } printf("# indexname: %s\n", gt_str_get(lo->str_indexname)); if (lo->fastaoutput) { printf("# outputfile: %s\n", gt_str_get(lo->str_fastaoutputfilename)); } if (lo->fastaoutputinnerregion) { printf("# outputfile inner region: %s\n", gt_str_get(lo->str_fastaoutputfilenameinnerregion)); } if (lo->gff3output) { printf("# outputfile gff3 format: %s\n", gt_str_get(lo->str_gff3filename)); } printf("# xdropbelowscore: %d\n", lo->xdropbelowscore); printf("# similaritythreshold: %.2f\n", lo->similaritythreshold); printf("# minseedlength: %lu\n", lo->minseedlength); printf("# matchscore: %d\n", lo->arbitscores.mat); printf("# mismatchscore: %d\n", lo->arbitscores.mis); printf("# insertionscore: %d\n", lo->arbitscores.ins); printf("# deletionscore: %d\n", lo->arbitscores.del); printf("# minLTRlength: %lu\n", lo->minltrlength); printf("# maxLTRlength: %lu\n", lo->maxltrlength); printf("# minLTRdistance: %lu\n", lo->mindistance); printf("# maxLTRdistance: %lu\n", lo->maxdistance); if (lo->nooverlaps) { printf("# overlaps: no\n"); } else { if (lo->bestoverlaps) { printf("# overlaps: best\n"); } else { printf("# overlaps: all\n"); } } printf("# minTSDlength: %u\n", lo->minlengthTSD); printf("# maxTSDlength: %u\n", lo->maxlengthTSD); printf("# palindromic motif: %s\n", gt_str_get(lo->str_motif)); printf("# motifmismatchesallowed: %u\n", lo->allowedmismatches); printf("# vicinity: %u nt\n", lo->vicinity); if (lo->searchrange.start != 0 || lo->searchrange.end != 0) { printf("# ltrsearchseqrange=(%lu,%lu)\n", lo->searchrange.start, lo->searchrange.end); } } static void* gt_ltrharvest_arguments_new(void) { LTRharvestArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); arguments->str_motif = gt_str_new(); arguments->str_overlaps = gt_str_new(); arguments->str_indexname = gt_str_new(); arguments->str_fastaoutputfilename = gt_str_new(); arguments->str_fastaoutputfilenameinnerregion = gt_str_new(); arguments->str_gff3filename = gt_str_new(); arguments->motif = gt_calloc((size_t) 1, sizeof (GtLTRFourCharMotif)); return arguments; } static void gt_ltrharvest_arguments_delete(void *tool_arguments) { LTRharvestArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_str_delete(arguments->str_motif); gt_str_delete(arguments->str_overlaps); gt_str_delete(arguments->str_indexname); gt_str_delete(arguments->str_fastaoutputfilename); gt_str_delete(arguments->str_fastaoutputfilenameinnerregion); gt_str_delete(arguments->str_gff3filename); gt_option_delete(arguments->optiongff3); gt_option_delete(arguments->optionoutinner); gt_option_delete(arguments->optionout); gt_option_delete(arguments->optionmotif); gt_option_delete(arguments->optionmotifmis); gt_option_delete(arguments->optionoverlaps); gt_free(arguments->motif); gt_free(arguments); } static GtOptionParser* gt_ltrharvest_option_parser_new(void *tool_arguments) { LTRharvestArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *optionindex, *optionltrsearchseqrange, *optionseed, *optionminlenltr, *optionmaxlenltr, *optionmindistltr, *optionmaxdistltr, *optionmintsd, *optionmaxtsd, *optionsimilar, *optionmotif, *optionmotifmis, *optionvic, *optionoverlaps, *optionxdrop, *optionmat, *optionmis, *optionins, *optiondel, *optionv, *optionoffset, *optionlongoutput, *optionout, *optionoutinner, *optiongff3, *optionscan; GtRange default_ltrsearchseqrange = {0,0}; static const char *overlaps[] = { "best", /* the default */ "no", "all", NULL }; gt_assert(arguments); op = gt_option_parser_new("[option ...] -index ", "Predict LTR retrotransposons."); /* -index */ optionindex = gt_option_new_string("index", "specify the name of the enhanced suffix " "array index (mandatory)", arguments->str_indexname, NULL); gt_option_is_mandatory(optionindex); gt_option_parser_add_option(op, optionindex); /* -range */ optionltrsearchseqrange = gt_option_new_range("range", "specify range in the input sequence(s) in which LTR " "pairs are searched", &arguments->searchrange, &default_ltrsearchseqrange); gt_option_parser_add_option(op, optionltrsearchseqrange); /* -seed */ optionseed = gt_option_new_ulong_min("seed", "specify minimum seed length for" " exact repeats", &arguments->minseedlength, 30UL, 1UL); gt_option_parser_add_option(op, optionseed); /* -minlenltr */ optionminlenltr = gt_option_new_ulong_min_max("minlenltr", "specify minimum length for each LTR", &arguments->minltrlength, 100UL, 1UL, GT_UNDEF_ULONG); gt_option_parser_add_option(op, optionminlenltr); /* -maxlenltr */ optionmaxlenltr = gt_option_new_ulong_min_max("maxlenltr", "specify maximum length for each LTR", &arguments->maxltrlength, 1000UL, 1UL, GT_UNDEF_ULONG); gt_option_parser_add_option(op, optionmaxlenltr); /* -mindistltr */ optionmindistltr = gt_option_new_ulong_min_max("mindistltr", "specify minimum distance of " "LTR startpositions", &arguments->mindistance, 1000UL, 1UL, GT_UNDEF_ULONG); gt_option_parser_add_option(op, optionmindistltr); /* -maxdistltr */ optionmaxdistltr = gt_option_new_ulong_min_max("maxdistltr", "specify maximum distance of " "LTR startpositions", &arguments->maxdistance, 15000UL, 1UL, GT_UNDEF_ULONG); gt_option_parser_add_option(op, optionmaxdistltr); /* -similar */ optionsimilar = gt_option_new_double_min_max("similar", "specify similaritythreshold in " "range [1..100%]", &arguments->similaritythreshold, (double) 85.0, (double) 0.0, 100.0); gt_option_parser_add_option(op, optionsimilar); /* -mintsd */ optionmintsd = gt_option_new_uint_min_max("mintsd", "specify minimum length for each TSD", &arguments->minlengthTSD, 4U, 0, GT_UNDEF_UINT); gt_option_parser_add_option(op, optionmintsd); /* -maxtsd */ optionmaxtsd = gt_option_new_uint_min_max("maxtsd", "specify maximum length for each TSD", &arguments->maxlengthTSD, 20U, 0, GT_UNDEF_UINT); gt_option_parser_add_option(op, optionmaxtsd); optionmotif = gt_option_new_string("motif", "specify 2 nucleotides startmotif + " "2 nucleotides endmotif: ****", arguments->str_motif, NULL); gt_option_parser_add_option(op, optionmotif); arguments->optionmotif = gt_option_ref(optionmotif); /* -motifmis */ optionmotifmis = gt_option_new_uint_min_max("motifmis", "specify maximum number of " "mismatches in motif [0,3]", &arguments->allowedmismatches, 4U, 0, 3U); gt_option_parser_add_option(op, optionmotifmis); arguments->optionmotifmis = gt_option_ref(optionmotifmis); /* -vic */ optionvic = gt_option_new_uint_min_max("vic", "specify the number of nucleotides (to the left and " "to the right) that will be searched " "for TSDs and/or motifs around 5' and 3' boundary " "of predicted LTR retrotransposons", &arguments->vicinity, 60U, 1U, 500U); gt_option_parser_add_option(op, optionvic); /* -overlaps */ optionoverlaps = gt_option_new_choice("overlaps", "specify no|best|all", arguments->str_overlaps, overlaps[0], overlaps); gt_option_parser_add_option(op, optionoverlaps); arguments->optionoverlaps = gt_option_ref(optionoverlaps); /* -xdrop */ optionxdrop = gt_option_new_int_min("xdrop", "specify xdropbelowscore for extension-alignment", &arguments->xdropbelowscore, 5, 0); gt_option_parser_add_option(op, optionxdrop); /* -mat */ optionmat = gt_option_new_int_min("mat", "specify matchscore for extension-alignment", &arguments->arbitscores.mat, 2, 1); gt_option_parser_add_option(op, optionmat); /* -mis */ optionmis = gt_option_new_int_max("mis", "specify mismatchscore for extension-alignment", &arguments->arbitscores.mis, -2, -1); gt_option_parser_add_option(op, optionmis); /* -ins */ optionins = gt_option_new_int_max("ins", "specify insertionscore for extension-alignment", &arguments->arbitscores.ins, -3, -1); gt_option_parser_add_option(op, optionins); /* -del */ optiondel = gt_option_new_int_max("del", "specify deletionscore for extension-alignment", &arguments->arbitscores.del, -3, -1); gt_option_parser_add_option(op, optiondel); /* -v */ optionv = gt_option_new_bool("v", "verbose mode", &arguments->verbosemode, false); gt_option_parser_add_option(op, optionv); /* -longoutput */ optionlongoutput = gt_option_new_bool("longoutput", "additional motif/TSD output", &arguments->longoutput, false); gt_option_parser_add_option(op, optionlongoutput); /* -out */ arguments->fastaoutput = false; optionout = gt_option_new_string("out", "specify FASTA outputfilename", arguments->str_fastaoutputfilename, NULL); gt_option_parser_add_option(op, optionout); arguments->optionout = gt_option_ref(optionout); /* -outinner */ arguments->fastaoutputinnerregion = false; optionoutinner = gt_option_new_string("outinner", "specify FASTA outputfilename for inner regions", arguments->str_fastaoutputfilenameinnerregion, NULL); gt_option_parser_add_option(op, optionoutinner); arguments->optionoutinner = gt_option_ref(optionoutinner); /* -gff3 */ arguments->gff3output = false; optiongff3 = gt_option_new_string("gff3", "specify GFF3 outputfilename", arguments->str_gff3filename, NULL); gt_option_parser_add_option(op, optiongff3); arguments->optiongff3 = gt_option_ref(optiongff3); /* -offset */ optionoffset = gt_option_new_ulong("offset", "offset added to GFF3 coordinates", &arguments->offset, 0UL); gt_option_parser_add_option(op, optionoffset); gt_option_is_extended_option(optionoffset); /* -scan */ optionscan = gt_option_new_bool("scan", "scan the index sequentially instead of " "mapping it into memory entirely", &arguments->scan, true); gt_option_parser_add_option(op, optionscan); gt_option_is_extended_option(optionscan); /* implications */ gt_option_imply(optionmaxtsd, optionmintsd); gt_option_imply(optionmotifmis, optionmotif); gt_option_imply_either_2(optionlongoutput, optionmintsd, optionmotif); gt_option_parser_refer_to_manual(op); /* gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); */ return op; } static int gt_ltrharvest_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError *err) { LTRharvestArguments *arguments = tool_arguments; int had_err = 0; /* init */ arguments->motif->firstleft = (GtUchar) 't'; arguments->motif->secondleft = (GtUchar) 'g'; arguments->motif->firstright = (GtUchar) 'c'; arguments->motif->secondright = (GtUchar) 'a'; arguments->motif->allowedmismatches = arguments->allowedmismatches; if (gt_option_is_set(arguments->optionmotif)) { if (gt_str_length(arguments->str_motif) != 4UL) { gt_error_set(err, "argument of -motif has not exactly 4 characters"); had_err = -1; } if (!had_err) { arguments->motif->firstleft = (GtUchar) gt_str_get(arguments->str_motif)[0]; arguments->motif->secondleft = (GtUchar) gt_str_get(arguments->str_motif)[1]; arguments->motif->firstright = (GtUchar) gt_str_get(arguments->str_motif)[2]; arguments->motif->secondright = (GtUchar) gt_str_get(arguments->str_motif)[3]; /* default if motif specified */ if (!gt_option_is_set(arguments->optionmotifmis)) { arguments->motif->allowedmismatches = 0; arguments->allowedmismatches = 0; } } } if (!had_err) { if (gt_option_is_set(arguments->optionoverlaps)) { if (strcmp(gt_str_get(arguments->str_overlaps), "no") == 0) { arguments->bestoverlaps = false; arguments->nooverlaps = true; } else if (strcmp(gt_str_get(arguments->str_overlaps), "best") == 0 ) { arguments->bestoverlaps = true; arguments->nooverlaps = false; } else if (strcmp(gt_str_get(arguments->str_overlaps), "all") == 0 ) { arguments->bestoverlaps = false; arguments->nooverlaps = false; } else { gt_assert(0); /* cannot happen */ } } else { /* default is "best" */ arguments->bestoverlaps = true; /* take best prediction if overlap occurs, default */ arguments->nooverlaps = false; /* overlapping predictions (not) allowed*/ } /* if FASTA output is set */ if (gt_option_is_set(arguments->optionout)) { arguments->fastaoutput = true; } /* if FASTA output inner region is set */ if (gt_option_is_set(arguments->optionoutinner)) { arguments->fastaoutputinnerregion = true; } /* if GFF3 output is set */ if (gt_option_is_set(arguments->optiongff3)) { arguments->gff3output = true; } } return had_err; } static void gt_ltrharvest_showargsline(int argc, const char **argv) { int i; gt_assert(argv && argc >= 1); printf("# args="); for (i=1; istr_indexname, arguments->searchrange, arguments->minseedlength, arguments->minltrlength, arguments->maxltrlength, arguments->mindistance, arguments->maxdistance, arguments->similaritythreshold, arguments->xdropbelowscore, arguments->arbitscores, arguments->motif, arguments->verbosemode, arguments->nooverlaps, arguments->bestoverlaps, arguments->scan, arguments->offset, arguments->minlengthTSD, arguments->maxlengthTSD, (unsigned long) arguments->vicinity, err); if (ltrh_stream == NULL) return -1; last_stream = ltrh_stream; encseq = gt_ltrharvest_stream_get_encseq(ltrh_stream); /* set visitors according to output parameter */ if (!had_err && arguments->longoutput) { tabout_visitor = gt_ltrharvest_tabout_visitor_new_longoutput(encseq); } else { tabout_visitor = gt_ltrharvest_tabout_visitor_new(); } /* create tabular output stream (traditional LTRharvest format) */ tabout_stream = gt_ltrharvest_tabout_stream_new(last_stream, tabout_visitor); last_stream = tabout_stream; /* attach GFF3 output stream if requested */ if (!had_err && arguments->gff3output) { gff3file = gt_file_open(GT_FILE_MODE_UNCOMPRESSED, gt_str_get(arguments->str_gff3filename), "w+", err); if (gff3file == NULL) { had_err = -1; } else { gff3_out_stream = gt_gff3_out_stream_new(last_stream, gff3file); last_stream = gff3_out_stream; } } /* attach FASTA output stream if requested */ if (!had_err && arguments->fastaoutput) { fastaoutfile = gt_file_open(GT_FILE_MODE_UNCOMPRESSED, gt_str_get(arguments->str_fastaoutputfilename), "w+", err); if (fastaoutfile == NULL) { had_err = -1; } else { fasta_out_stream = gt_ltrharvest_fasta_out_stream_new(last_stream, false, encseq, 60UL, fastaoutfile); last_stream = fasta_out_stream; } } /* attach FASTA inner region output stream if requested */ if (!had_err && arguments->fastaoutputinnerregion) { fastainneroutfile = gt_file_open(GT_FILE_MODE_UNCOMPRESSED, gt_str_get(arguments->str_fastaoutputfilenameinnerregion), "w+", err); if (fastainneroutfile == NULL) { had_err = -1; } else { fasta_inner_out_stream = gt_ltrharvest_fasta_out_stream_new(last_stream, true, encseq, 60UL, fastainneroutfile); last_stream = fasta_inner_out_stream; } } /* output arguments line */ gt_ltrharvest_showargsline(argc, argv); /* show long parameters */ if (arguments->verbosemode) gt_ltrharvest_showopts(arguments); /* print tabular output header */ if (!had_err) { if (arguments->longoutput) { gt_ltrharvest_tabout_stream_printlongheader(arguments->minlengthTSD > 1U, arguments->allowedmismatches < 4U); } else { gt_ltrharvest_tabout_stream_printshortheader(); } } /* pull the features through the stream and free them afterwards */ if (!had_err) had_err = gt_node_stream_pull(last_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(tabout_stream); gt_node_stream_delete(fasta_out_stream); gt_node_stream_delete(fasta_inner_out_stream); gt_node_stream_delete(ltrh_stream); if (gff3file != NULL) gt_file_delete(gff3file); if (fastaoutfile != NULL) gt_file_delete(fastaoutfile); if (fastainneroutfile != NULL) gt_file_delete(fastainneroutfile); return had_err; } GtTool* gt_ltrharvest(void) { return gt_tool_new(gt_ltrharvest_arguments_new, gt_ltrharvest_arguments_delete, gt_ltrharvest_option_parser_new, gt_ltrharvest_arguments_check, gt_ltrharvest_runner); } genometools-1.5.1/src/ltr/gt_ltrharvest.h000066400000000000000000000017511211610345200205010ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_LTRHARVEST_H #define GT_LTRHARVEST_H #include "core/tool_api.h" /* the LTRharvest tool */ GtTool* gt_ltrharvest(void); #endif genometools-1.5.1/src/ltr/ltr_classify_stream.c000066400000000000000000000344741211610345200216650ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Kastens Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/array.h" #include "core/bittab.h" #include "core/class_alloc_lock.h" #include "core/ma.h" #include "core/cstr_api.h" #include "core/hashmap.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "extended/feature_type.h" #include "extended/genome_node.h" #include "ltr/ltr_classify_stream.h" struct GtLTRClassifyStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; GtArray *nodes; GtHashmap *features; const char *famprefix; char **current_state; bool first_next; unsigned long next_index, *progress; }; #define gt_ltr_classify_stream_cast(CS)\ gt_node_stream_cast(gt_ltr_classify_stream_class(), CS); static bool ltr_candidates_compatible(GtGenomeNode *candidate1, GtGenomeNode *candidate2, GtHashmap *features, GT_UNUSED GtError *err) { GtGenomeNode *candidate; GtFeatureNode *curnode1, *curnode2; GtFeatureNodeIterator *fni1, *fni2; GtHashmap *fnmap; const char *clid1, *clid2, *fnt; bool compatible = false, seen_a = false, first_ltr = true; unsigned long clnum1, clnum2; gt_error_check(err); gt_assert(candidate1 && candidate2); fni1 = gt_feature_node_iterator_new((GtFeatureNode*) candidate1); curnode1 = gt_feature_node_iterator_next(fni1); fni2 = gt_feature_node_iterator_new((GtFeatureNode*) candidate2); curnode2 = gt_feature_node_iterator_next(fni2); if (gt_feature_node_number_of_children(curnode1) <= gt_feature_node_number_of_children(curnode2)) { gt_feature_node_iterator_delete(fni2); candidate = candidate2; } else { gt_feature_node_iterator_delete(fni1); fni1 = fni2; candidate = candidate1; } fnmap = (GtHashmap*) gt_genome_node_get_user_data(candidate, "fnmap"); while ((curnode1 = gt_feature_node_iterator_next(fni1)) != NULL) { fnt = gt_feature_node_get_type(curnode1); if ((strcmp(fnt, gt_ft_LTR_retrotransposon) == 0)) continue; else if (strcmp(fnt, gt_ft_long_terminal_repeat) == 0) { if (first_ltr) { fnt = "lLTR"; first_ltr = false; } else fnt = "rLTR"; } else if (strcmp(fnt, gt_ft_protein_match) == 0) { fnt = gt_feature_node_get_attribute(curnode1, "name"); } if (!fnt) continue; if (features != NULL) if (gt_hashmap_get(features, fnt) == NULL) continue; curnode2 = (GtFeatureNode*) gt_hashmap_get(fnmap, fnt); if (curnode2 != NULL) { clid1 = gt_feature_node_get_attribute(curnode1, "clid"); if (clid1 != NULL) (void) sscanf(clid1, "%lu", &clnum1); else clnum1 = GT_UNDEF_ULONG; clid2 = gt_feature_node_get_attribute(curnode2, "clid"); if (clid2 != NULL) (void) sscanf(clid2, "%lu", &clnum2); else clnum2 = GT_UNDEF_ULONG; if (clnum1 == clnum2) { if ((clnum1 != GT_UNDEF_ULONG) && (clnum2 != GT_UNDEF_ULONG)) seen_a = true; compatible = true; } else if ((clnum1 == GT_UNDEF_ULONG && clnum2 != GT_UNDEF_ULONG) || (clnum1 != GT_UNDEF_ULONG && clnum2 == GT_UNDEF_ULONG)) compatible = true; else if (clnum1 != clnum2) { compatible = false; break; } } } gt_feature_node_iterator_delete(fni1); return (compatible && seen_a); } static bool ltr_group_compatible(GtArray *candidates, GtGenomeNode *candidate1, GtBittab *group, GtHashmap *features, GtError *err) { GtArray *group_member; GtGenomeNode *candidate2; bool compatible = true; unsigned long i, index; gt_assert(candidates && candidate1 && group); gt_error_check(err); group_member = gt_array_new(sizeof(unsigned long)); gt_bittab_get_all_bitnums(group, group_member); for (i = 0; i < gt_array_size(group_member); i++) { index = *(unsigned long*) gt_array_get(group_member, i); candidate2 = *(GtGenomeNode**) gt_array_get(candidates, index); if (!(compatible = ltr_candidates_compatible(candidate1, candidate2, features, err))) break; } gt_array_delete(group_member); return compatible; } static int check_ambiguous_candidates(GtArray *candidates, GtArray *groups, GtHashmap *features, unsigned long *progress, GtError *err) { GtGenomeNode *candidate; GtBittab *group; GtArray *compat_groups; int had_err = 0; unsigned long i, j; gt_error_check(err); gt_assert(candidates && groups); for (i = 0; i < gt_array_size(candidates); i++) { candidate = *(GtGenomeNode**) gt_array_get(candidates, i); if (gt_feature_node_try_cast(candidate) == NULL) continue; compat_groups = gt_array_new(sizeof(GtBittab*)); for (j = 0; j < gt_array_size(groups); j++) { group = *(GtBittab**) gt_array_get(groups, j); if (ltr_group_compatible(candidates, candidate, group, features, err)) gt_array_add(compat_groups, group); } if (gt_array_size(compat_groups) > 1UL) { for (j = 0; j < gt_array_size(groups); j++) { group = *(GtBittab**) gt_array_get(groups, j); gt_bittab_unset_bit(group, i); if (gt_bittab_count_set_bits(group) == 0) gt_array_rem(groups, j); } } gt_array_delete(compat_groups); if (progress != NULL) *progress = *progress + 1; } return had_err; } static int annotate_nodes(GtArray *candidates, GtArray *groups, const char *famprefix, GtError *err) { GtArray *group_member; GtBittab *group; GtFeatureNode *curnode; GtFeatureNodeIterator *fni = NULL; GtGenomeNode *gn; int had_err = 0; unsigned long i, j, index, famno = 0; gt_assert(candidates && groups); gt_error_check(err); for (i = 0; i < gt_array_size(groups); i++) { group = *(GtBittab**) gt_array_get(groups, i); group_member = gt_array_new(sizeof(unsigned long)); gt_bittab_get_all_bitnums(group, group_member); if (gt_array_size(group_member) < 2UL) { gt_array_delete(group_member); continue; } for (j = 0; j < gt_array_size(group_member); j++) { index = *(unsigned long*) gt_array_get(group_member, j); gn = *(GtGenomeNode**) gt_array_get(candidates, index); fni = gt_feature_node_iterator_new((GtFeatureNode*) gn); curnode = gt_feature_node_iterator_next(fni); if (strcmp(gt_feature_node_get_type(curnode), gt_ft_repeat_region) == 0) { char fam[BUFSIZ]; if (famprefix != NULL) (void) snprintf(fam, BUFSIZ, "%s%lu", famprefix, famno); else (void) snprintf(fam, BUFSIZ, "ltrfam_%lu", famno); gt_feature_node_set_attribute(curnode, "ltrfam", fam); } else { gt_feature_node_iterator_delete(fni); gt_error_set(err, "repeat_region is not root node"); had_err = -1; break; } gt_feature_node_iterator_delete(fni); } gt_array_delete(group_member); if (had_err) break; famno++; } return had_err; } static void delete_hash(void *hash) { gt_hashmap_delete((GtHashmap*) hash); } static void add_fnmap_to_candidates(GtArray *candidates) { GtGenomeNode *gn; GtFeatureNode *curnode; GtFeatureNodeIterator *fni; GtHashmap *fnmap; bool first_ltr; const char *fnt; unsigned long i; for (i = 0; i < gt_array_size(candidates); i++) { gn = *(GtGenomeNode**) gt_array_get(candidates, i); if (gt_feature_node_try_cast(gn) == NULL) continue; first_ltr = true; fnmap = gt_hashmap_new(GT_HASH_STRING, gt_free_func, NULL); fni = gt_feature_node_iterator_new((GtFeatureNode*) gn); while ((curnode = gt_feature_node_iterator_next(fni)) != NULL) { fnt = gt_feature_node_get_type(curnode); if ((strcmp(fnt, gt_ft_repeat_region) == 0) || (strcmp(fnt, gt_ft_LTR_retrotransposon) == 0)) continue; else if (strcmp(fnt, gt_ft_long_terminal_repeat) == 0) { if (first_ltr) { fnt = "lLTR"; first_ltr = false; } else fnt = "rLTR"; } else if (strcmp(fnt, gt_ft_protein_match) == 0) fnt = gt_feature_node_get_attribute(curnode, "name"); if (!fnt) continue; gt_hashmap_add(fnmap, (void*) gt_cstr_dup(fnt), (void*) curnode); } gt_genome_node_add_user_data(gn, "fnmap", (void*) fnmap, delete_hash); gt_feature_node_iterator_delete(fni); fni = NULL; } } static void remove_fnmap_from_candidates(GtArray *candidates) { GtGenomeNode *gn; unsigned long i; for (i = 0; i < gt_array_size(candidates); i++) { gn = *(GtGenomeNode**) gt_array_get(candidates, i); if (gt_feature_node_try_cast(gn) == NULL) continue; gt_genome_node_release_user_data(gn, "fnmap"); } } static int classify_ltrs(GtArray *candidates, GtHashmap *features, const char *famprefix, char **current_state, unsigned long *progress, GtError *err) { GtBittab *group, *new_group; GtArray *groups; GtGenomeNode *candidate; bool sorted; int had_err = 0; unsigned long i, j, num_of_cands; gt_error_check(err); gt_assert(candidates); add_fnmap_to_candidates(candidates); num_of_cands = gt_array_size(candidates); groups = gt_array_new(sizeof(GtBittab*)); if (current_state != NULL) { gt_free(*current_state); *current_state = gt_cstr_dup("Assigning candidates to families"); } for (i = 0; i < num_of_cands; i++) { sorted = false; candidate = *(GtGenomeNode**) gt_array_get(candidates, i); if (gt_feature_node_try_cast(candidate) == NULL) continue; for (j = 0; j < gt_array_size(groups); j++) { group = *(GtBittab**) gt_array_get(groups, j); if (!sorted && ltr_group_compatible(candidates, candidate, group, features, err)) { gt_bittab_set_bit(group, i); sorted = true; break; } } if (!sorted) { new_group = gt_bittab_new(num_of_cands); gt_bittab_set_bit(new_group, i); gt_array_add(groups, new_group); } if (progress != NULL) *progress = *progress + 1; } if (current_state != NULL) { gt_free(*current_state); *current_state = gt_cstr_dup("Checking for ambiguity"); } had_err = check_ambiguous_candidates(candidates, groups, features, progress, err); if (!had_err) had_err = annotate_nodes(candidates, groups, famprefix, err); for (i = 0; i < gt_array_size(groups); i++) { gt_bittab_delete(*(GtBittab**) gt_array_get(groups, i)); } gt_array_delete(groups); remove_fnmap_from_candidates(candidates); return had_err; } static int gt_ltr_classify_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtLTRClassifyStream *lcs; GtGenomeNode *ref_gn; int had_err = 0; gt_error_check(err); lcs = gt_ltr_classify_stream_cast(ns); if (lcs->first_next) { while (!(had_err = gt_node_stream_next(lcs->in_stream, gn, err)) && *gn) { gt_assert(*gn && !had_err); ref_gn = gt_genome_node_ref(*gn); gt_array_add(lcs->nodes, ref_gn); } if (!had_err) had_err = classify_ltrs(lcs->nodes, lcs->features, lcs->famprefix, lcs->current_state, lcs->progress, err); if (!had_err) { *gn = *(GtGenomeNode**) gt_array_get(lcs->nodes, lcs->next_index); lcs->next_index++; lcs->first_next = false; return 0; } } else { if (lcs->next_index >= gt_array_size(lcs->nodes)) *gn = NULL; else { *gn = *(GtGenomeNode**) gt_array_get(lcs->nodes, lcs->next_index); lcs->next_index++; } return 0; } return had_err; } static void gt_ltr_classify_stream_free(GtNodeStream *ns) { unsigned long i; GtLTRClassifyStream *lcs = gt_ltr_classify_stream_cast(ns); for (i = 0; i < gt_array_size(lcs->nodes); i++) gt_genome_node_delete(*(GtGenomeNode**) gt_array_get(lcs->nodes, i)); gt_array_delete(lcs->nodes); gt_node_stream_delete(lcs->in_stream); } const GtNodeStreamClass* gt_ltr_classify_stream_class(void) { static const GtNodeStreamClass *nsc; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof(GtLTRClassifyStream), gt_ltr_classify_stream_free, gt_ltr_classify_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_ltr_classify_stream_new(GtNodeStream *in_stream, GtHashmap *features, const char *famprefix, char **current_state, unsigned long *progress, GT_UNUSED GtError *err) { GtNodeStream *ns; GtLTRClassifyStream *lcs; ns = gt_node_stream_create(gt_ltr_classify_stream_class(), false); lcs = gt_ltr_classify_stream_cast(ns); lcs->in_stream = gt_node_stream_ref(in_stream); lcs->nodes = gt_array_new(sizeof(GtGenomeNode*)); lcs->features = features; lcs->first_next = true; lcs->next_index = 0; lcs->famprefix = famprefix; lcs->progress = progress; lcs->current_state = current_state; return ns; } genometools-1.5.1/src/ltr/ltr_classify_stream.h000066400000000000000000000020201211610345200216500ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Kastens Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTR_CLASSIFY_STREAM_H #define LTR_CLASSIFY_STREAM_H #include "ltr/ltr_classify_stream_api.h" const GtNodeStreamClass* gt_ltr_classify_stream_class(void); #endif genometools-1.5.1/src/ltr/ltr_classify_stream_api.h000066400000000000000000000027041211610345200225120ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Kastens Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTR_CLASSIFY_STREAM_API_H #define LTR_CLASSIFY_STREAM_API_H #include "core/error_api.h" #include "core/hashmap_api.h" #include "extended/node_stream_api.h" typedef struct GtLTRClassifyStream GtLTRClassifyStream; GtNodeStream* gt_ltr_classify_stream_new(GtNodeStream *in_stream, GtHashmap *features, const char *famprefix, char **current_state, unsigned long *progress, GtError *err); #endif genometools-1.5.1/src/ltr/ltr_cluster_prepare_seq_visitor.c000066400000000000000000000224351211610345200243150ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/array.h" #include "core/class_alloc_lock.h" #include "core/cstr_api.h" #include "core/encseq_api.h" #include "core/hashmap.h" #include "core/log.h" #include "core/str_api.h" #include "core/str_array.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "extended/feature_type.h" #include "extended/node_visitor_api.h" #include "ltr/ltr_cluster_prepare_seq_visitor.h" struct GtLTRClusterPrepareSeqVisitor { const GtNodeVisitor parent_instance; GtEncseq *src_encseq; GtHashmap *feat_to_encseq, *encseq_builders; GtStrArray *feat_to_encseq_keys; }; static int extract_feature_seq(GtEncseqBuilder *b, const char *header, GtStr *seqid, GtEncseq *encseq, GtRange range, GT_UNUSED const char *fnt, GtError *err) { char *buffer; int had_err = 0; unsigned long seqnum, startpos; (void) sscanf(gt_str_get(seqid), "seq%lu", &seqnum); if (seqnum >= gt_encseq_num_of_sequences(encseq)) { gt_error_set(err, "annotation encountered for sequence %lu, but the " "supplied encoded sequence only contains sequences " "0-%lu", seqnum, gt_encseq_num_of_sequences(encseq)-1); had_err = -1; } if (!had_err) { buffer = gt_calloc((size_t) gt_range_length(&range) + 1, sizeof (char)); startpos = gt_encseq_seqstartpos(encseq, seqnum); gt_encseq_extract_decoded(encseq, buffer, startpos + range.start, startpos + range.end); gt_encseq_builder_add_cstr(b, buffer, gt_range_length(&range), header); gt_free(buffer); } return had_err; } static int gt_ltr_cluster_prepare_seq_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GtError *err) { GtLTRClusterPrepareSeqVisitor *lcv; GtFeatureNode *curnode; GtFeatureNodeIterator *fni; GtStr *seqid = NULL; const char *fnt; char buffer[BUFSIZ]; int had_err = 0; bool first_ltr = true; gt_error_check(err); lcv = gt_ltr_cluster_prepare_seq_visitor_cast(nv); gt_assert(lcv); gt_error_check(err); fni = gt_feature_node_iterator_new(fn); while (!had_err && (curnode = gt_feature_node_iterator_next(fni))) { GtFile *file = NULL; fnt = gt_feature_node_get_type(curnode); if (strcmp(fnt, gt_ft_repeat_region) == 0) { const char *rid; unsigned long id; seqid = gt_genome_node_get_seqid((GtGenomeNode*) curnode); rid = gt_feature_node_get_attribute(curnode, "ID"); (void) sscanf(rid, "repeat_region%lu", &id); (void) snprintf(buffer, BUFSIZ, "%s_%lu", gt_str_get(seqid), id); } else if (strcmp(fnt, gt_ft_protein_match) == 0) { GtRange range; const char *attr; GtEncseqBuilder *eb; char header[BUFSIZ]; attr = gt_feature_node_get_attribute(curnode, "name"); if (!attr) continue; range = gt_genome_node_get_range((GtGenomeNode*) curnode); (void) snprintf(header, BUFSIZ, "%s_%lu_%lu", buffer, range.start, range.end); if (!gt_hashmap_get(lcv->encseq_builders, attr)) { eb = gt_encseq_builder_new(gt_encseq_alphabet(lcv->src_encseq)); gt_encseq_builder_create_ssp_tab(eb); gt_encseq_builder_create_sds_tab(eb); gt_encseq_builder_create_des_tab(eb); gt_hashmap_add(lcv->encseq_builders, gt_cstr_dup(attr), eb); gt_log_log("builder %p added for feature %s", eb, attr); gt_str_array_add_cstr(lcv->feat_to_encseq_keys, attr); } else { eb = (GtEncseqBuilder*) gt_hashmap_get(lcv->encseq_builders, attr); } had_err = extract_feature_seq(eb, header, seqid, lcv->src_encseq, range, fnt, err); gt_file_delete(file); } else if (strcmp(fnt, gt_ft_LTR_retrotransposon) == 0) continue; else { char *tmp; GtRange range; GtEncseqBuilder *eb; char header[BUFSIZ]; /* XXX: use GtStr for safety */ if (strcmp(fnt, gt_ft_long_terminal_repeat) == 0) { if (first_ltr) { tmp = gt_cstr_dup("lLTR"); first_ltr = false; } else tmp = gt_cstr_dup("rLTR"); } else tmp = gt_cstr_dup(fnt); range = gt_genome_node_get_range((GtGenomeNode*) curnode); if ((range.end - range.start + 1) < 10UL) { gt_free(tmp); continue; } (void) snprintf(header, BUFSIZ, "%s_%lu_%lu", buffer, range.start, range.end); if (!gt_hashmap_get(lcv->encseq_builders, tmp)) { eb = gt_encseq_builder_new(gt_encseq_alphabet(lcv->src_encseq)); gt_encseq_builder_create_ssp_tab(eb); gt_encseq_builder_create_sds_tab(eb); gt_encseq_builder_create_des_tab(eb); gt_hashmap_add(lcv->encseq_builders, gt_cstr_dup(tmp), eb); gt_str_array_add_cstr(lcv->feat_to_encseq_keys, tmp); } else { eb = (GtEncseqBuilder*) gt_hashmap_get(lcv->encseq_builders, tmp); } had_err = extract_feature_seq(eb, header, seqid, lcv->src_encseq, range, fnt, err); gt_free(tmp); gt_file_delete(file); } } gt_feature_node_iterator_delete(fni); return had_err; } void gt_ltr_cluster_prepare_seq_visitor_free(GtNodeVisitor *v) { GtLTRClusterPrepareSeqVisitor *lcv; lcv = gt_ltr_cluster_prepare_seq_visitor_cast(v); gt_encseq_delete(lcv->src_encseq); gt_str_array_delete(lcv->feat_to_encseq_keys); gt_hashmap_delete(lcv->feat_to_encseq); gt_hashmap_delete(lcv->encseq_builders); } const GtNodeVisitorClass* gt_ltr_cluster_prepare_seq_visitor_class(void) { static const GtNodeVisitorClass *nvc; gt_class_alloc_lock_enter(); if (!nvc) { nvc = gt_node_visitor_class_new(sizeof(GtLTRClusterPrepareSeqVisitor), gt_ltr_cluster_prepare_seq_visitor_free, NULL, gt_ltr_cluster_prepare_seq_visitor_feature_node, NULL, NULL, NULL); } gt_class_alloc_lock_leave(); return nvc; } GtNodeVisitor* gt_ltr_cluster_prepare_seq_visitor_new(GtEncseq *encseq, GT_UNUSED GtError *err) { GtNodeVisitor *nv; GtLTRClusterPrepareSeqVisitor *lcv; nv = gt_node_visitor_create(gt_ltr_cluster_prepare_seq_visitor_class()); lcv = gt_ltr_cluster_prepare_seq_visitor_cast(nv); gt_assert(lcv); lcv->src_encseq = gt_encseq_ref(encseq); lcv->feat_to_encseq = NULL; lcv->encseq_builders = gt_hashmap_new(GT_HASH_STRING, gt_free_func, (GtFree) gt_encseq_builder_delete); lcv->feat_to_encseq_keys = gt_str_array_new(); return nv; } int gt_ltr_cluster_prepare_seq_finish_encseqs(void *key, void *value, void *data, GtError *err) { GtLTRClusterPrepareSeqVisitor *v = (GtLTRClusterPrepareSeqVisitor*) data; GtEncseqBuilder *eb = (GtEncseqBuilder*) value; GtEncseq *encseq; int had_err = 0; const char *feature = (const char*) key; gt_assert(key && value); gt_error_check(err); encseq = gt_encseq_builder_build(eb, err); if (!encseq) had_err = -1; if (!had_err) { if (!v->feat_to_encseq) { v->feat_to_encseq = gt_hashmap_new(GT_HASH_STRING, gt_free_func, (GtFree) gt_encseq_delete); } gt_assert(!gt_hashmap_get(v->feat_to_encseq, feature)); gt_hashmap_add(v->feat_to_encseq, gt_cstr_dup(feature), encseq); gt_log_log("added encseq %p to hash for feature %s", encseq, feature); } return had_err; } GtHashmap* gt_ltr_cluster_prepare_seq_visitor_get_encseqs( GtLTRClusterPrepareSeqVisitor *v) { gt_assert(v && v->encseq_builders); gt_log_log("finishing encseqs"); if (!v->feat_to_encseq) { gt_log_log("starting..."); (void) gt_hashmap_foreach(v->encseq_builders, gt_ltr_cluster_prepare_seq_finish_encseqs, v, NULL); } return gt_hashmap_ref(v->feat_to_encseq); } GtStrArray* gt_ltr_cluster_prepare_seq_visitor_get_features( GtLTRClusterPrepareSeqVisitor *v) { gt_assert(v && v->feat_to_encseq_keys); return gt_str_array_ref(v->feat_to_encseq_keys); } genometools-1.5.1/src/ltr/ltr_cluster_prepare_seq_visitor.h000066400000000000000000000036611211610345200243220ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTR_CLUSTER_PREPARE_SEQ_VISITOR_H #define LTR_CLUSTER_PREPARE_SEQ_VISITOR_H /* implements the ''node visitor'' interface */ typedef struct GtLTRClusterPrepareSeqVisitor GtLTRClusterPrepareSeqVisitor; #include "core/array.h" #include "core/encseq.h" #include "core/str_array.h" #include "extended/node_visitor.h" const GtNodeVisitorClass* gt_ltr_cluster_prepare_seq_visitor_class(void); GtNodeVisitor* gt_ltr_cluster_prepare_seq_visitor_new(GtEncseq *encseq, GtError *err); GtHashmap* gt_ltr_cluster_prepare_seq_visitor_get_encseqs( GtLTRClusterPrepareSeqVisitor *v); GtStrArray* gt_ltr_cluster_prepare_seq_visitor_get_features( GtLTRClusterPrepareSeqVisitor *v); #define gt_ltr_cluster_prepare_seq_visitor_cast(NV)\ gt_node_visitor_cast(gt_ltr_cluster_prepare_seq_visitor_class(), NV) #define gt_ltr_cluster_prepare_seq_visitor_try_cast(NV)\ gt_node_visitor_try_cast(gt_ltr_cluster_prepare_seq_visitor_class(), NV) #endif genometools-1.5.1/src/ltr/ltr_cluster_stream.c000066400000000000000000000501411211610345200215160ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Kastens Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/array.h" #include "core/class_alloc_lock.h" #include "core/cstr_api.h" #include "core/encseq.h" #include "core/hashmap.h" #include "core/log.h" #include "core/ma.h" #include "core/str_array.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "extended/clustered_set.h" #include "extended/clustered_set_uf.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "extended/feature_type.h" #include "extended/node_stream_api.h" #include "extended/match.h" #include "extended/match_iterator_api.h" #include "extended/match_iterator_last.h" #include "extended/match_iterator_open.h" #include "ltr/ltr_cluster_stream.h" #include "ltr/ltr_cluster_prepare_seq_visitor.h" #include "match/sfx-run.h" struct GtLTRClusterStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; GtLTRClusterPrepareSeqVisitor *lcv; GtArray *nodes; GtHashmap *feat_to_encseq; GtStrArray *feat_to_encseq_keys; bool first_next; unsigned long psmall, plarge, next_index; int match_score, mismatch_cost, gap_open_cost, gap_ext_cost, xdrop, ydrop, zdrop, mscoregapped, mscoregapless, k; char **current_state; }; #define gt_ltr_cluster_stream_cast(CS)\ gt_node_stream_cast(gt_ltr_cluster_stream_class(), CS); typedef struct GtMatchReference { unsigned long startpos, matchnum; } GtMatchReference; typedef struct GtMatchEdge { unsigned long matchnum0, matchnum1; unsigned long gap_size; unsigned long edist; unsigned long minlength; } GtMatchEdge; typedef struct GtMatchEdgeTable { GtArray *edges; unsigned long num_of_edges; } GtMatchEdgeTable; #define STORECLUSTEREDGEG(I, J, VALUE)\ matchedge.matchnum0 = I;\ matchedge.matchnum1 = J;\ matchedge.gap_size = VALUE;\ gt_array_add(matchedgetab.edges, matchedge);\ matchedgetab.num_of_edges++ #define STORECLUSTEREDGEED(I, J, ML, ED)\ matchedge.matchnum0 = I;\ matchedge.matchnum1 = J;\ matchedge.minlength = ML;\ matchedge.edist = ED;\ gt_array_add(matchedgetab.edges, matchedge);\ matchedgetab.num_of_edges++ static int cmpmatchreferences(const void *dataA, const void *dataB) { GtMatchReference *mrefA = (GtMatchReference*) dataA; GtMatchReference *mrefB = (GtMatchReference*) dataB; if (mrefA->startpos < mrefB->startpos) return -1; if (mrefA->startpos > mrefB->startpos) return 1; return 0; } static GtMatchReference* gt_mirror_and_sort_matches(GtArray *matches) { GtMatchReference *mref; GtMatch *match; GtRange rng_seq1, rng_seq2; unsigned long i, j; mref = gt_calloc((size_t) (gt_array_size(matches) * 2), sizeof (GtMatchReference)); for (i = 0, j = 0; i < gt_array_size(matches); i++, j+=2) { match = *(GtMatch**) gt_array_get(matches, i); gt_match_get_range_seq1(match, &rng_seq1); gt_match_get_range_seq2(match, &rng_seq2); mref[j].startpos = rng_seq1.start; mref[j].matchnum = i; mref[j+1].startpos = rng_seq2.start; mref[j+1].matchnum = i; } qsort (mref, (size_t) (2 * gt_array_size(matches)), sizeof (GtMatchReference), cmpmatchreferences); return mref; } static int gt_cluster_matches(GtClusteredSet *cs, GtMatchEdgeTable *matchedgetab, GtError *err) { unsigned long i; for (i = 0; i < matchedgetab->num_of_edges; i++) { if (gt_clustered_set_merge_clusters(cs, ((GtMatchEdge*)(gt_array_get(matchedgetab->edges, i)))->matchnum0, ((GtMatchEdge*)(gt_array_get(matchedgetab->edges, i)))->matchnum1, err) != 0) { return -1; } } return 0; } static int cluster_sequences(GtArray *matches, GtClusteredSet *cs, GtHashmap *seqdesc2seqnum, unsigned int psmall, unsigned int plarge, GtEncseq *encseq, GtError *err) { GtMatch *match; GtMatchEdgeTable matchedgetab; GtMatchEdge matchedge; GtRange rng_seq1, rng_seq2; int had_err = 0; unsigned long i, lsmall, llarge, matchlen1, matchlen2, num_of_seq, seqnum1 = 0, seqnum2 = 0; const char *seqid; num_of_seq = gt_encseq_num_of_sequences(encseq); gt_assert(matches && cs && seqdesc2seqnum && encseq); if (gt_clustered_set_num_of_elements(cs, err) != num_of_seq) { had_err = -1; gt_error_set(err, "number of sequences (%lu) unequals number of elements in" " clustered set (%lu)", num_of_seq, gt_clustered_set_num_of_elements(cs, err)); } if (!had_err) { matchedgetab.edges = gt_array_new(sizeof (GtMatchEdge)); matchedgetab.num_of_edges = 0; for (i = 0; i < gt_array_size(matches); i++) { match = *(GtMatch**) gt_array_get(matches, i); gt_match_get_range_seq1(match, &rng_seq1); gt_match_get_range_seq2(match, &rng_seq2); matchlen1 = gt_range_length(&rng_seq1); matchlen2 = gt_range_length(&rng_seq2); seqid = gt_match_get_seqid1(match); if (gt_hashmap_get(seqdesc2seqnum, (void*) seqid) != NULL) seqnum1 = ((unsigned long) gt_hashmap_get(seqdesc2seqnum, seqid)) - 1; else { had_err = -1; gt_error_set(err, "key %s not found", seqid); } seqid = gt_match_get_seqid2(match); if (!had_err && gt_hashmap_get(seqdesc2seqnum, (void*) seqid) != NULL) seqnum2 = ((unsigned long) gt_hashmap_get(seqdesc2seqnum, seqid)) - 1; else { had_err = -1; gt_error_set(err, "key %s not found", seqid); } if (!had_err) { if (gt_encseq_seqlength(encseq, seqnum1) > gt_encseq_seqlength(encseq, seqnum2)) { llarge = gt_encseq_seqlength(encseq, seqnum1); lsmall = gt_encseq_seqlength(encseq, seqnum2); } else { lsmall = gt_encseq_seqlength(encseq, seqnum1); llarge = gt_encseq_seqlength(encseq, seqnum2); } if (((llarge * plarge)/100 <= matchlen1) && ((lsmall * psmall)/100 <= matchlen1) && ((llarge * plarge)/100 <= matchlen2) && ((lsmall * psmall)/100 <= matchlen2)) { if (seqnum1 != seqnum2) { matchedge.matchnum0 = seqnum1; matchedge.matchnum1 = seqnum2; gt_array_add(matchedgetab.edges, matchedge); matchedgetab.num_of_edges++; } } } } } if (!had_err) if (gt_cluster_matches(cs, &matchedgetab, err) != 0) had_err = -1; if (!had_err) gt_array_delete(matchedgetab.edges); return had_err; } GT_UNUSED static int gt_cluster_matches_gap(GtArray *matches, GtClusteredSet *cs, unsigned long max_gap_size, GtError *err) { GtMatchReference *mref; GtMatchEdgeTable matchedgetab; GtMatchEdge matchedge; GtMatch *match; GtRange range; unsigned long i, j, gap_size = 0, length = 0; unsigned long num_of_matches; int had_err; num_of_matches = gt_array_size(matches); if (gt_clustered_set_num_of_elements(cs, err) != num_of_matches) { had_err = -1; gt_error_set(err, "number of matches (%lu) unequals number of elements in" "clustered set (%lu)", num_of_matches, gt_clustered_set_num_of_elements(cs, err)); } if (!had_err) { matchedgetab.edges = gt_array_new(sizeof (GtMatchEdge)); matchedgetab.num_of_edges = 0; mref = gt_mirror_and_sort_matches(matches); for (i = 0; i < (2 * (num_of_matches) - 1); i++) { for (j = i + 1; j < (2 * num_of_matches); j++) { match = *(GtMatch**) gt_array_get(matches, mref[i].matchnum); gt_match_get_range_seq1(match, &range); length = gt_range_length(&range); gap_size = mref[j].startpos - mref[i].startpos + length; if (gap_size > max_gap_size) break; if (mref[i].matchnum != mref[j].matchnum) { STORECLUSTEREDGEG(mref[i].matchnum, mref[j].matchnum, gap_size); } } } if (gt_cluster_matches(cs, &matchedgetab, err) != 0) had_err = -1; gt_array_delete(matchedgetab.edges); gt_free(mref); } return had_err; } static void free_hash(void *elem) { gt_free(elem); } static int cluster_annotate_nodes(GtClusteredSet *cs, GtEncseq *encseq, const char *feature, GtArray *nodes, GtError *err) { GtFeatureNodeIterator *fni; GtFeatureNode *curnode = NULL, *tmp; GtClusteredSetIterator *csi = NULL; GtGenomeNode *gn; GtHashmap *desc2node; GtStr *seqid = NULL; int had_err = 0; unsigned long num_of_clusters, i, elm; const char *fnt = NULL; char buffer[BUFSIZ], *real_feature; gt_error_check(err); if ((strcmp(feature, "lLTR") == 0) || (strcmp(feature, "rLTR") == 0)) real_feature = gt_cstr_dup(gt_ft_long_terminal_repeat); else real_feature = gt_cstr_dup(feature); desc2node = gt_hashmap_new(GT_HASH_STRING, free_hash, NULL); for (i = 0; i < gt_array_size(nodes); i++) { gn = *(GtGenomeNode**) gt_array_get(nodes, i); if (gt_feature_node_try_cast(gn) == NULL) continue; fni = gt_feature_node_iterator_new((GtFeatureNode*) gn); while ((curnode = gt_feature_node_iterator_next(fni)) != NULL) { char header[BUFSIZ]; fnt = gt_feature_node_get_type(curnode); if (strcmp(fnt, gt_ft_repeat_region) == 0) { const char *rid; unsigned long id; seqid = gt_genome_node_get_seqid((GtGenomeNode*) curnode); rid = gt_feature_node_get_attribute(curnode, "ID"); (void) sscanf(rid, "repeat_region%lu", &id); (void) snprintf(buffer, BUFSIZ, "%s_%lu", gt_str_get(seqid), id); } else if (strcmp(fnt, gt_ft_protein_match) == 0) { GtRange range; const char *attr; attr = gt_feature_node_get_attribute(curnode, "name"); if (!attr) continue; if (strcmp(feature, attr) != 0) continue; range = gt_genome_node_get_range((GtGenomeNode*) curnode); if ((range.end - range.start + 1) < 10UL) continue; (void) snprintf(header, BUFSIZ, "%s_%lu_%lu", buffer, range.start, range.end); gt_hashmap_add(desc2node, (void*) gt_cstr_dup(header), (void*) curnode); } else if (strcmp(fnt, real_feature) == 0) { GtRange range; range = gt_genome_node_get_range((GtGenomeNode*) curnode); if ((range.end - range.start + 1) < 10UL) continue; (void) snprintf(header, BUFSIZ, "%s_%lu_%lu", buffer, range.start, range.end); gt_hashmap_add(desc2node, (void*) gt_cstr_dup(header), (void*) curnode); } } gt_feature_node_iterator_delete(fni); } gt_free(real_feature); num_of_clusters = gt_clustered_set_num_of_clusters(cs, err); for (i = 0; i < num_of_clusters; i++) { csi = gt_clustered_set_get_iterator(cs, i ,err); if (csi != NULL) { while (!had_err && (gt_clustered_set_iterator_next(csi, &elm, err) != GT_CLUSTERED_SET_ITERATOR_STATUS_END)) { char clid[BUFSIZ]; const char *encseqdesc; char *encseqid; unsigned long desclen; encseqdesc = gt_encseq_description(encseq, &desclen, elm); encseqid = gt_calloc((size_t) (desclen + 1), sizeof (char)); (void) strncpy(encseqid, encseqdesc, (size_t) desclen); encseqid[desclen] = '\0'; tmp = (GtFeatureNode*) gt_hashmap_get(desc2node, (void*) encseqid); (void) snprintf(clid, BUFSIZ, "%lu", i); gt_feature_node_set_attribute(tmp, "clid", clid); gt_free(encseqid); } } gt_clustered_set_iterator_delete(csi, err); csi = NULL; } gt_hashmap_delete(desc2node); return had_err; } static int process_feature(GtLTRClusterStream *lcs, const char *feature, GtError *err) { GtArray *matches; GtMatchIterator *mi = NULL; GtMatch *match = NULL; GtMatchIteratorStatus status; GtEncseq *encseq; unsigned long i; int had_err = 0; if (lcs->current_state != NULL) { char tmp[BUFSIZ]; gt_free(*lcs->current_state); (void) snprintf(tmp, BUFSIZ, "Clustering feature: %s", feature); *lcs->current_state = gt_cstr_dup(tmp); } matches = gt_array_new(sizeof(GtMatch*)); encseq = (GtEncseq*) gt_hashmap_get(lcs->feat_to_encseq, feature); gt_log_log("found encseq %p for feature %s", encseq, feature); if (!had_err) { mi = gt_match_iterator_last_new(encseq, encseq, lcs->match_score, lcs->mismatch_cost, lcs->gap_open_cost, lcs->gap_ext_cost, lcs->xdrop, lcs->ydrop, lcs->zdrop, lcs->k, lcs->mscoregapped, lcs->mscoregapless, err); if (mi != NULL) { while ((status = gt_match_iterator_next(mi, &match, err)) != GT_MATCHER_STATUS_END) { if (status == GT_MATCHER_STATUS_OK) { gt_array_add(matches, match); } else { gt_assert(status == GT_MATCHER_STATUS_ERROR); had_err = -1; break; } } } else had_err = -1; } if (!had_err) { GtClusteredSet *cs; GtHashmap *seqdesc2seqnum; GtMatch *tmp_match; const char *description; char *output; unsigned long desclen, num_of_seq; seqdesc2seqnum = gt_hashmap_new(GT_HASH_STRING, free_hash, NULL); num_of_seq = gt_encseq_num_of_sequences(encseq); for (i = 0; i < num_of_seq; i++) { description = gt_encseq_description(encseq, &desclen, i); output = gt_calloc((size_t) (desclen + 1), sizeof (char)); strncpy(output, description, (size_t) desclen); output[desclen] = '\0'; gt_hashmap_add(seqdesc2seqnum, (void*) gt_cstr_dup(output), (void*) (i + 1)); gt_free(output); } cs = gt_clustered_set_union_find_new(num_of_seq, err); if (cs != NULL) { if (cluster_sequences(matches, cs, seqdesc2seqnum, (unsigned) lcs->psmall, (unsigned) lcs->plarge, encseq, err) != 0) { had_err = -1; } if (!had_err) { (void) cluster_annotate_nodes(cs, encseq, feature, lcs->nodes, err); } } else had_err = -1; for (i = 0; i < gt_array_size(matches); i++) { tmp_match = *(GtMatch**) gt_array_get(matches, i); gt_match_delete(tmp_match); } gt_array_delete(matches); matches = NULL; gt_hashmap_delete(seqdesc2seqnum); gt_clustered_set_delete(cs, err); } gt_match_iterator_delete(mi); return had_err; } static int gt_ltr_cluster_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtLTRClusterStream *lcs; GtGenomeNode *ref_gn; int had_err = 0; unsigned long i = 0; gt_error_check(err); lcs = gt_ltr_cluster_stream_cast(ns); if (lcs->first_next) { while (!(had_err = gt_node_stream_next(lcs->in_stream, gn, err)) && *gn) { gt_assert(*gn && !had_err); ref_gn = gt_genome_node_ref(*gn); gt_array_add(lcs->nodes, ref_gn); had_err = gt_genome_node_accept(*gn, (GtNodeVisitor*) lcs->lcv, err); if (had_err) { gt_genome_node_delete(*gn); *gn = NULL; break; } } lcs->feat_to_encseq = gt_ltr_cluster_prepare_seq_visitor_get_encseqs(lcs->lcv); lcs->feat_to_encseq_keys = gt_ltr_cluster_prepare_seq_visitor_get_features(lcs->lcv); if (!had_err) { for (i = 0; i < gt_str_array_size(lcs->feat_to_encseq_keys); i++) { had_err = process_feature(lcs, gt_str_array_get(lcs->feat_to_encseq_keys, i), err); if (had_err) break; } } if (!had_err) { *gn = *(GtGenomeNode**) gt_array_get(lcs->nodes, lcs->next_index); lcs->next_index++; lcs->first_next = false; return 0; } } else { if (lcs->next_index >= gt_array_size(lcs->nodes)) *gn = NULL; else { *gn = *(GtGenomeNode**) gt_array_get(lcs->nodes, lcs->next_index); lcs->next_index++; } return 0; } return had_err; } static void gt_ltr_cluster_stream_free(GtNodeStream *ns) { unsigned long i; GtLTRClusterStream *lcs = gt_ltr_cluster_stream_cast(ns); gt_node_visitor_delete((GtNodeVisitor*) lcs->lcv); gt_hashmap_delete(lcs->feat_to_encseq); gt_str_array_delete(lcs->feat_to_encseq_keys); for (i = 0; i < gt_array_size(lcs->nodes); i++) gt_genome_node_delete(*(GtGenomeNode**) gt_array_get(lcs->nodes, i)); gt_array_delete(lcs->nodes); gt_node_stream_delete(lcs->in_stream); } const GtNodeStreamClass* gt_ltr_cluster_stream_class(void) { static const GtNodeStreamClass *nsc; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof(GtLTRClusterStream), gt_ltr_cluster_stream_free, gt_ltr_cluster_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_ltr_cluster_stream_new(GtNodeStream *in_stream, GtEncseq *encseq, int match_score, int mismatch_cost, int gap_open_cost, int gap_ext_cost, int xdrop, int ydrop, int zdrop, int k, int mscoregapped, int mscoregapless, unsigned long plarge, unsigned long psmall, char **current_state, GtError *err) { GtNodeStream *ns; GtLTRClusterStream *lcs; ns = gt_node_stream_create(gt_ltr_cluster_stream_class(), false); lcs = gt_ltr_cluster_stream_cast(ns); lcs->in_stream = gt_node_stream_ref(in_stream); lcs->feat_to_encseq = NULL; lcs->feat_to_encseq_keys = NULL; lcs->nodes = gt_array_new(sizeof(GtGenomeNode*)); lcs->lcv = gt_ltr_cluster_prepare_seq_visitor_cast( gt_ltr_cluster_prepare_seq_visitor_new(encseq, err)); lcs->first_next = true; lcs->next_index = 0; lcs->match_score = match_score; lcs->mismatch_cost = mismatch_cost; lcs->gap_open_cost = gap_open_cost; lcs->gap_ext_cost = gap_ext_cost; lcs->xdrop = xdrop; lcs->ydrop = ydrop; lcs->zdrop = zdrop; lcs->mscoregapped = mscoregapped; lcs->mscoregapless = mscoregapless; lcs->k = k; lcs->plarge = plarge; lcs->psmall = psmall; lcs->current_state = current_state; return ns; } genometools-1.5.1/src/ltr/ltr_cluster_stream.h000066400000000000000000000020141211610345200215170ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Kastens Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTR_CLUSTER_STREAM_H #define LTR_CLUSTER_STREAM_H #include "ltr/ltr_cluster_stream_api.h" const GtNodeStreamClass* gt_ltr_cluster_stream_class(void); #endif genometools-1.5.1/src/ltr/ltr_cluster_stream_api.h000066400000000000000000000041361211610345200223570ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Kastens Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTR_CLUSTER_STREAM_API_H #define LTR_CLUSTER_STREAM_API_H #include "core/encseq_api.h" #include "core/error_api.h" #include "extended/node_stream_api.h" typedef struct GtLTRClusterStream GtLTRClusterStream; /* Implements the interface. annotates all LTR features with cluster IDs, based on matches. */ GtNodeStream* gt_ltr_cluster_stream_new(GtNodeStream *in_stream, GtEncseq *encseq, int match_score, int mismatch_cost, int gap_open_cost, int gap_ext_cost, int xdrop, int ydrop, int zdrop, int k, int mscoregapped, int mscoregapless, unsigned long plarge, unsigned long psmall, char **current_state, GtError *err); #endif genometools-1.5.1/src/ltr/ltr_four_char_motif.c000066400000000000000000000062611211610345200216340ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2007 David Ellinghaus Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "ltr/ltr_four_char_motif.h" /* test the motif and encode the characters by using alpha */ int gt_ltr_four_char_motif_encode (GtLTRFourCharMotif *motif, const GtEncseq *encseq, GtError *err) { const GtUchar *symbolmap; GtUchar c_tab[UCHAR_MAX+1]; unsigned int i; symbolmap = gt_alphabet_symbolmap(gt_encseq_alphabet(encseq)); if ( symbolmap[(unsigned int)motif->firstleft] == (GtUchar) UNDEFCHAR) { gt_error_set(err,"Illegal nucleotide character %c " "as argument to option -motif", motif->firstleft); return -1; } if ( symbolmap[(unsigned int)motif->secondleft] == (GtUchar) UNDEFCHAR ) { gt_error_set(err,"Illegal nucleotide character %c " "as argument to option -motif", motif->secondleft); return -1; } if ( symbolmap[(unsigned int)motif->firstright] == (GtUchar) UNDEFCHAR ) { gt_error_set(err,"Illegal nucleotide character %c " "as argument to option -motif", motif->firstright); return -1; } if ( symbolmap[(unsigned int)motif->secondright] == (GtUchar) UNDEFCHAR ) { gt_error_set(err,"Illegal nucleotide character %c " "as argument to option -motif", motif->secondright); return -1; } for (i=0; i<=(unsigned int) UCHAR_MAX; i++) { c_tab[i] = (GtUchar) UNDEFCHAR; } /* define complementary symbols */ c_tab[symbolmap['a']] = symbolmap['t']; c_tab[symbolmap['c']] = symbolmap['g']; c_tab[symbolmap['g']] = symbolmap['c']; c_tab[symbolmap['t']] = symbolmap['a']; /* if motif is not palindromic */ if ( (c_tab[symbolmap[(unsigned int)motif->firstleft]] != c_tab[c_tab[symbolmap[(unsigned int)motif->secondright]]]) || (c_tab[symbolmap[(unsigned int)motif->secondleft]] != c_tab[c_tab[symbolmap[(unsigned int)motif->firstright]]]) ) { gt_error_set(err, "Illegal motif, motif not palindromic"); return -1; } /* encode the symbols */ motif->firstleft = symbolmap[(unsigned int)motif->firstleft]; motif->secondleft = symbolmap[(unsigned int)motif->secondleft]; motif->firstright = symbolmap[(unsigned int)motif->firstright]; motif->secondright = symbolmap[(unsigned int)motif->secondright]; return 0; } genometools-1.5.1/src/ltr/ltr_four_char_motif.h000066400000000000000000000031531211610345200216360ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2007 David Ellinghaus Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTR_FOUR_CHAR_MOTIF_H #define LTR_FOUR_CHAR_MOTIF_H #include "core/chardef.h" #include "core/encseq_api.h" typedef struct { GtStr *str_motif; GtUchar firstleft, /* first character of left motif instance */ secondleft, /* second character of left motif instance */ firstright, /* first character of right motif instance */ secondright; /* second character of right motif instance */ unsigned int allowedmismatches; /* number of allowed mismatches */ } GtLTRFourCharMotif; int gt_ltr_four_char_motif_encode (GtLTRFourCharMotif *motif, const GtEncseq *encseq, GtError *err); #endif genometools-1.5.1/src/ltr/ltr_orf_annotator_stream.c000066400000000000000000000066311211610345200227150ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/class_alloc_lock.h" #include "core/hashmap_api.h" #include "extended/feature_type.h" #include "extended/orf_finder_stream.h" #include "ltr/ltr_orf_annotator_stream_api.h" struct GtLTRORFAnnotatorStream { const GtNodeStream parent_instance; GtNodeStream *orf_stream; unsigned long *progress_loc; GtHashmap *types; }; const GtNodeStreamClass* gt_ltr_orf_annotator_stream_class(void); #define ltr_orf_annotator_stream_cast(NS)\ gt_node_stream_cast(gt_ltr_orf_annotator_stream_class(), NS) static int ltr_orf_annotator_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtLTRORFAnnotatorStream *bs; gt_error_check(err); bs = ltr_orf_annotator_stream_cast(ns); if (bs->progress_loc != NULL) (*bs->progress_loc)++; return gt_node_stream_next(bs->orf_stream, gn, err); } static void ltr_orf_annotator_stream_free(GtNodeStream *ns) { GtLTRORFAnnotatorStream *bs = ltr_orf_annotator_stream_cast(ns); gt_hashmap_delete(bs->types); gt_node_stream_delete(bs->orf_stream); } const GtNodeStreamClass* gt_ltr_orf_annotator_stream_class(void) { static const GtNodeStreamClass *nsc = NULL; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtLTRORFAnnotatorStream), ltr_orf_annotator_stream_free, ltr_orf_annotator_stream_next); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_ltr_orf_annotator_stream_new(GtNodeStream *in_stream, GtEncseq *encseq, unsigned int min, unsigned int max, bool all, GtError *err) { GtLTRORFAnnotatorStream *bs; GtNodeStream *ns; gt_assert(in_stream); ns = gt_node_stream_create(gt_ltr_orf_annotator_stream_class(), false); bs = ltr_orf_annotator_stream_cast(ns); bs->types = gt_hashmap_new(GT_HASH_STRING, NULL, NULL); bs->progress_loc = NULL; gt_hashmap_add(bs->types, gt_ft_LTR_retrotransposon, (void*) 1); bs->orf_stream = gt_orf_finder_stream_new(in_stream, encseq, bs->types, min, max, all, err); return ns; } void gt_ltr_orf_annotator_stream_set_progress_location( GtLTRORFAnnotatorStream *s, unsigned long *loc) { gt_assert(s); s->progress_loc = loc; } genometools-1.5.1/src/ltr/ltr_orf_annotator_stream_api.h000066400000000000000000000033321211610345200235460ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTR_ORF_ANNOTATOR_STREAM_API_H #define LTR_ORF_ANNOTATOR_STREAM_API_H #include "core/encseq_api.h" #include "core/error_api.h" #include "extended/node_stream_api.h" /* implements the ``node stream'' interface */ typedef struct GtLTRORFAnnotatorStream GtLTRORFAnnotatorStream; GtNodeStream* gt_ltr_orf_annotator_stream_new(GtNodeStream *in_stream, GtEncseq *encseq, unsigned int min, unsigned int max, bool all, GtError *err); void gt_ltr_orf_annotator_stream_set_progress_location( GtLTRORFAnnotatorStream*, unsigned long*); #endif genometools-1.5.1/src/ltr/ltr_refseq_match_stream.c000066400000000000000000000352221211610345200225010ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Kastens Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/array.h" #include "core/class_alloc_lock.h" #include "core/cstr_api.h" #include "core/encseq.h" #include "core/fasta.h" #include "core/hashmap.h" #include "core/ma.h" #include "core/str.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "extended/node_stream_api.h" #include "extended/match.h" #include "extended/match_blast.h" #include "extended/match_iterator_api.h" #include "extended/match_iterator_blast.h" #include "ltr/ltr_refseq_match_stream.h" #define ATTR_FLCAND "flcand" #define ATTR_LTRFAM "ltrfam" #define ATTR_TARGET "target" #define ATTR_PARAMS "params" #define NEW_FN_TYPE "nucleotide_match" #define GT_BLAST_PATH_ENV "GT_BLAST_PATH" struct GtLTRRefseqMatchStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; GtArray *nodes; GtHashmap *header_to_fn; const char *indexname, *refseq_file, *seq_file, *source; unsigned long params_id, next_index; bool first_next, dust, flcands; int word_size, gapopen, gapextend, penalty, reward, num_threads; double evalue, xdrop, identity, min_ali_len_perc; const char *moreblast; }; #define gt_ltr_refseq_match_stream_cast(GS)\ gt_node_stream_cast(gt_ltr_refseq_match_stream_class(), GS); static void gt_ltr_refseq_match_stream_free_hash_elem(void *elem) { gt_free(elem); } static int gt_ltr_refseq_match_stream_extract_sequences( GtLTRRefseqMatchStream *rms, unsigned long *n_to_check, GtError *err) { GtStr *seqid; GtGenomeNode *gn; GtFeatureNode *curnode; GtFeatureNodeIterator *fni; GtRange range; GtFile *outfp; GtEncseqLoader *el = NULL; GtEncseq *encseq = NULL; char *buffer, header[BUFSIZ]; const char *attr; int had_err = 0; unsigned long i, seqnum, startpos; gt_assert(rms); gt_error_check(err); outfp = gt_file_new(rms->seq_file, "w", err); if (!outfp) had_err = -1; if (!had_err) { el = gt_encseq_loader_new(); encseq = gt_encseq_loader_load(el, rms->indexname, err); if (!encseq) had_err = -1; } if (!had_err) { for (i = 0; i < gt_array_size(rms->nodes); i++) { gn = *(GtGenomeNode**) gt_array_get(rms->nodes, i); fni = gt_feature_node_iterator_new((GtFeatureNode*) gn); curnode = gt_feature_node_iterator_next(fni); seqid = gt_genome_node_get_seqid((GtGenomeNode*) curnode); range = gt_genome_node_get_range((GtGenomeNode*) curnode); if (rms->flcands) { attr = gt_feature_node_get_attribute(curnode, ATTR_FLCAND); if (!attr) { gt_feature_node_iterator_delete(fni); continue; } } attr = gt_feature_node_get_attribute(curnode, ATTR_LTRFAM); if (attr != NULL) (void) snprintf(header, BUFSIZ, "%s_%s_%lu_%lu", attr, gt_str_get(seqid), range.start, range.end); else (void) snprintf(header, BUFSIZ, "%s_%lu_%lu", gt_str_get(seqid), range.start, range.end); gt_cstr_rep(header, ' ', '+'); gt_hashmap_add(rms->header_to_fn, (void*) gt_cstr_dup(header), (void*) curnode); (void) sscanf(gt_str_get(seqid), "seq%lu", &seqnum); buffer = gt_calloc((size_t) gt_range_length(&range) + 1, sizeof (char)); startpos = gt_encseq_seqstartpos(encseq, seqnum); gt_encseq_extract_decoded(encseq, buffer, startpos + range.start - 1, startpos + range.end - 1); (*n_to_check)++; gt_fasta_show_entry(header, buffer, gt_range_length(&range), 50UL, outfp); gt_free(buffer); gt_feature_node_iterator_delete(fni); } gt_file_delete(outfp); } return had_err; } static GtStrand gt_ltr_refseq_match_stream_determine_strand(GtMatchDirection d, GtFeatureNode *fn) { gt_assert(fn); if (gt_feature_node_get_strand(fn) == GT_STRAND_REVERSE) { if (d == GT_MATCH_DIRECT) return GT_STRAND_REVERSE; else return GT_STRAND_FORWARD; } else { if (d == GT_MATCH_REVERSE) return GT_STRAND_REVERSE; else return GT_STRAND_FORWARD; } } static void gt_ltr_refseq_match_stream_add_match_to_fn( GtLTRRefseqMatchStream *rms, GtMatch *match, GT_UNUSED GtError *err) { GtStr *seq; GtFeatureNode *fn; GtGenomeNode *new_node; GtMatchDirection dir; GtStrand str; GtRange fn_range, match_range1, match_range2; char target[BUFSIZ], *tmp, *tmp2, buf[BUFSIZ]; const char *seqid1, *seqid2; unsigned long ali_length, fn_length, min_ali_length; double similarity; gt_assert(rms && match); gt_error_check(err); seqid1 = gt_match_get_seqid1(match); seqid2 = gt_match_get_seqid2(match); fn = (GtFeatureNode*) gt_hashmap_get(rms->header_to_fn, (void*) seqid1); fn_length = gt_genome_node_get_length((GtGenomeNode*) fn); fn_range = gt_genome_node_get_range((GtGenomeNode*) fn); min_ali_length = (unsigned long) ((rms->min_ali_len_perc / 100.0) * fn_length); ali_length = gt_match_blast_get_align_length((GtMatchBlast*) match); if (ali_length < min_ali_length) { gt_match_delete(match); return; } gt_match_get_range_seq1(match, &match_range1); gt_match_get_range_seq2(match, &match_range2); seq = gt_genome_node_get_seqid((GtGenomeNode*) fn); dir = gt_match_get_direction(match); str = gt_ltr_refseq_match_stream_determine_strand(dir, fn); similarity = gt_match_blast_get_similarity((GtMatchBlast*) match); new_node = gt_feature_node_new(seq, NEW_FN_TYPE, fn_range.start + match_range1.start, fn_range.start + match_range1.end, str); (void) snprintf(buf, BUFSIZ, "%.2f", similarity); gt_feature_node_set_attribute((GtFeatureNode*) new_node, "identity", buf); gt_feature_node_set_source((GtFeatureNode*) new_node, gt_str_new_cstr(rms->source)); if (rms->params_id != GT_UNDEF_ULONG) { char params_id[BUFSIZ]; (void) snprintf(params_id, BUFSIZ, "%lu", rms->params_id); gt_feature_node_set_attribute((GtFeatureNode*) new_node, ATTR_PARAMS, params_id); } tmp = gt_cstr_dup(seqid2); tmp2 = strtok(tmp, " "); if (tmp2 != NULL) { GtStr *tmpstr = NULL; tmpstr = gt_str_new_cstr(gt_cstr_dup(tmp2)); gt_free(tmp2); while ((tmp2 = strtok(NULL, " ")) != NULL) { gt_str_append_cstr(tmpstr, "%20"); gt_str_append_cstr(tmpstr, gt_cstr_dup(tmp2)); gt_free(tmp2); } (void) snprintf(target, BUFSIZ, "%s %lu %lu", gt_str_get(tmpstr), match_range2.start, match_range2.end); gt_str_delete(tmpstr); } else (void) snprintf(target, BUFSIZ, "%s %lu %lu", seqid2, match_range2.start, match_range2.end); gt_feature_node_set_attribute((GtFeatureNode*) new_node, ATTR_TARGET, target); gt_feature_node_add_child(fn, (GtFeatureNode*) new_node); gt_match_delete(match); } static int gt_ltr_refseq_match_stream_refseq_match(GtLTRRefseqMatchStream *rms, GtError *err) { GtMatchIterator *mi = NULL; GtMatch *match = NULL; GtMatchIteratorStatus status; char makeblastdb_call[BUFSIZ], *env = NULL; int had_err = 0; gt_assert(rms); gt_error_check(err); env = getenv(GT_BLAST_PATH_ENV); if (env != NULL) (void) snprintf(makeblastdb_call, BUFSIZ, "%s/makeblastdb -in %s -dbtype nucl -logfile " "makeblastdb.txt", env, rms->refseq_file); else (void) snprintf(makeblastdb_call, BUFSIZ, "makeblastdb -in %s -dbtype nucl -logfile " "makeblastdb.txt", rms->refseq_file); had_err = system(makeblastdb_call); if (!had_err) { mi = gt_match_iterator_blastn_process_new(rms->seq_file, rms->refseq_file, rms->evalue, rms->dust, rms->word_size, rms->gapopen, rms->gapextend, rms->penalty, rms->reward, rms->identity, rms->num_threads, rms->xdrop, rms->moreblast, err); if (mi != NULL) { if ((status = gt_match_iterator_next(mi, &match, err)) != GT_MATCHER_STATUS_OK) { gt_error_set(err, "Could not run BLASTN."); had_err = -1; } else { gt_ltr_refseq_match_stream_add_match_to_fn(rms, match, err); while ((status = gt_match_iterator_next(mi, &match, err)) != GT_MATCHER_STATUS_END) { if (status == GT_MATCHER_STATUS_OK) { gt_ltr_refseq_match_stream_add_match_to_fn(rms, match, err); } else had_err = -1; } } } else had_err = -1; } else gt_error_set(err, "Could not run makeblastdb."); return had_err; } static int gt_ltr_refseq_match_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtLTRRefseqMatchStream *rms; GtGenomeNode *ref_gn; int had_err = 0; unsigned long n_to_check = 0; gt_error_check(err); rms = gt_ltr_refseq_match_stream_cast(ns); if (rms->first_next) { while (!(had_err = gt_node_stream_next(rms->in_stream, gn, err)) && *gn) { gt_assert(*gn && !had_err); ref_gn = gt_genome_node_ref(*gn); gt_array_add(rms->nodes, ref_gn); } if (!had_err) had_err = gt_ltr_refseq_match_stream_extract_sequences(rms, &n_to_check, err); if (n_to_check > 0) { if (!had_err) had_err = gt_ltr_refseq_match_stream_refseq_match(rms, err); if (!had_err) { *gn = *(GtGenomeNode**) gt_array_get(rms->nodes, rms->next_index); rms->next_index++; rms->first_next = false; return 0; } } } else { if (rms->next_index >= gt_array_size(rms->nodes)) *gn = NULL; else { *gn = *(GtGenomeNode**) gt_array_get(rms->nodes, rms->next_index); rms->next_index++; } return 0; } return had_err; } static void gt_ltr_refseq_match_stream_free(GtNodeStream *gs) { GtLTRRefseqMatchStream *rms = gt_ltr_refseq_match_stream_cast(gs); gt_hashmap_delete(rms->header_to_fn); gt_node_stream_delete(rms->in_stream); } const GtNodeStreamClass* gt_ltr_refseq_match_stream_class(void) { static const GtNodeStreamClass *gsc = NULL; gt_class_alloc_lock_enter(); if (!gsc) { gsc = gt_node_stream_class_new(sizeof (GtLTRRefseqMatchStream), gt_ltr_refseq_match_stream_free, gt_ltr_refseq_match_stream_next); } gt_class_alloc_lock_leave(); return gsc; } GtNodeStream* gt_ltr_refseq_match_stream_new(GtNodeStream *in_stream, const char *indexname, const char *refseq_file, const char *seq_file, double evalue, bool dust, int word_size, int gapopen, int gapextend, int penalty, int reward, int num_threads, double xdrop, double identity, const char *moreblast, bool flcands, double min_ali_len_perc, unsigned long params_id, const char *source, GT_UNUSED GtError *err) { GtNodeStream *gs; GtLTRRefseqMatchStream *rms; gs = gt_node_stream_create(gt_ltr_refseq_match_stream_class(), false); rms = gt_ltr_refseq_match_stream_cast(gs); rms->in_stream = gt_node_stream_ref(in_stream); rms->nodes = gt_array_new(sizeof(GtGenomeNode*)); rms->first_next = true; rms->params_id = params_id; rms->next_index = 0; rms->header_to_fn = gt_hashmap_new(GT_HASH_STRING, gt_ltr_refseq_match_stream_free_hash_elem, NULL); rms->indexname = indexname; rms->refseq_file = refseq_file; rms->seq_file = seq_file; rms->evalue = evalue; rms->dust = dust; rms->word_size = word_size; rms->gapopen = gapopen; rms->gapextend = gapextend; rms->penalty = penalty; rms->reward = reward; rms->num_threads = num_threads; rms->xdrop = xdrop; rms->identity = identity; rms->moreblast = moreblast; rms->flcands = flcands; rms->source = source; rms->min_ali_len_perc = min_ali_len_perc; return gs; } genometools-1.5.1/src/ltr/ltr_refseq_match_stream.h000066400000000000000000000020401211610345200224760ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Kastens Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTR_REFSEQ_MATCH_STREAM_H #define LTR_REFSEQ_MATCH_STREAM_H #include "ltr/ltr_refseq_match_stream_api.h" const GtNodeStreamClass* gt_ltr_refseq_match_stream_class(void); #endif genometools-1.5.1/src/ltr/ltr_refseq_match_stream_api.h000066400000000000000000000051551211610345200233410ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Kastens Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTR_REFSEQ_MATCH_STREAM_API_H #define LTR_REFSEQ_MATCH_STREAM_API_H #include "core/error_api.h" #include "extended/node_stream_api.h" typedef struct GtLTRRefseqMatchStream GtLTRRefseqMatchStream; /* Implements the interface. extracts the sequences for each and matches them against a given set of reference sequences (). If a match is found the associated will be extended by a new of type 'nucleotide_match' */ GtNodeStream* gt_ltr_refseq_match_stream_new(GtNodeStream *in_stream, const char *indexname, const char *refseq_file, const char *seq_file, double evalue, bool dust, int word_size, int gapopen, int gapextend, int penalty, int reward, int num_threads, double xdrop, double identity, const char *moreblast, bool flcands, double min_ali_len_perc, unsigned long params_id, const char *source, GtError *err); #endif genometools-1.5.1/src/ltr/ltr_visitor.c000066400000000000000000000104721211610345200201640ustar00rootroot00000000000000/* Copyright (c) 2008 Sascha Steinbiss Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/class_alloc_lock.h" #include "core/cstr_api.h" #include "core/hashmap.h" #include "core/ma.h" #include "core/range.h" #include "core/unused_api.h" #include "extended/feature_type.h" #include "extended/node_visitor_api.h" #include "extended/region_node.h" #include "ltr/ltr_visitor.h" struct GtLTRVisitor { const GtNodeVisitor parent_instance; GtLTRElement *element; }; #define gt_ltr_visitor_cast(GV)\ gt_node_visitor_cast(gt_ltr_visitor_class(), GV) static int gt_ltr_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GT_UNUSED GtError *err) { GtLTRVisitor *lv; GtRange node_range; GtArray *pdomarr = NULL; const char *pfamname; const char *fnt; lv = gt_ltr_visitor_cast(nv); gt_assert(lv); gt_error_check(err); fnt = gt_feature_node_get_type(fn); if (strcmp(fnt, gt_ft_LTR_retrotransposon) == 0) { lv->element->mainnode = fn; } else if (strcmp(fnt, gt_ft_long_terminal_repeat) == 0) { if (lv->element->leftLTR == NULL) { node_range = gt_genome_node_get_range((GtGenomeNode*) fn); lv->element->leftLTR = fn; /* compensate for 1-based node coords */ lv->element->leftLTR_5 = node_range.start - 1; lv->element->leftLTR_3 = node_range.end - 1; } else { node_range = gt_genome_node_get_range((GtGenomeNode*) fn); lv->element->rightLTR = fn; /* compensate for 1-based node coords */ lv->element->rightLTR_5 = node_range.start - 1; lv->element->rightLTR_3 = node_range.end - 1; } } else if (strcmp(fnt, gt_ft_target_site_duplication) == 0) { if (lv->element->leftTSD == NULL) { lv->element->leftTSD = fn; } else { lv->element->rightTSD = fn; } } else if (strcmp(fnt, gt_ft_RR_tract) == 0) { if (lv->element->ppt == NULL) { lv->element->ppt = fn; } } else if (strcmp(fnt, gt_ft_primer_binding_site) == 0) { if (lv->element->pbs == NULL) { lv->element->pbs = fn; } } else if (strcmp(fnt, gt_ft_protein_match) == 0) { if (!lv->element->pdoms) { lv->element->pdoms = gt_hashmap_new(GT_HASH_STRING, gt_free_func, (GtFree) gt_array_delete); } pfamname = gt_feature_node_get_attribute(fn, "name"); if (!(pdomarr = (GtArray*) gt_hashmap_get(lv->element->pdoms, pfamname))) { char *pfamcpy = gt_cstr_dup(pfamname); pdomarr = gt_array_new(sizeof (GtFeatureNode*)); gt_hashmap_add(lv->element->pdoms, pfamcpy, pdomarr); if (lv->element->pdomorder != NULL) gt_array_add(lv->element->pdomorder, pfamcpy); } gt_array_add(pdomarr, fn); } return 0; } const GtNodeVisitorClass* gt_ltr_visitor_class(void) { static const GtNodeVisitorClass *nvc = NULL; gt_class_alloc_lock_enter(); if (!nvc) { nvc = gt_node_visitor_class_new(sizeof (GtLTRVisitor), NULL, NULL, gt_ltr_visitor_feature_node, NULL, NULL, NULL); } gt_class_alloc_lock_leave(); return nvc; } GtNodeVisitor* gt_ltr_visitor_new(GtLTRElement *element) { GtNodeVisitor *nv; GtLTRVisitor *lv; gt_assert(element); nv = gt_node_visitor_create(gt_ltr_visitor_class()); lv = gt_ltr_visitor_cast(nv); lv->element = element; gt_assert(lv); return nv; } genometools-1.5.1/src/ltr/ltr_visitor.h000066400000000000000000000025461211610345200201740ustar00rootroot00000000000000/* Copyright (c) 2008 Sascha Steinbiss Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTR_VISITOR_H #define LTR_VISITOR_H /* Implements the interface. */ typedef struct GtLTRVisitor GtLTRVisitor; #include "extended/node_visitor.h" #include "ltr/ltrelement.h" const GtNodeVisitorClass* gt_ltr_visitor_class(void); GtNodeVisitor* gt_ltr_visitor_new(GtLTRElement *element); #define gt_ltr_visitor_cast(GV)\ gt_node_visitor_cast(gt_ltr_visitor_class(), GV) #define gt_ltr_visitor_try_cast(GV)\ gt_node_visitor_try_cast(gt_ltr_visitor_class(), GV) #endif genometools-1.5.1/src/ltr/ltrdigest_def.h000066400000000000000000000021671211610345200204320ustar00rootroot00000000000000/* Copyright (c) 2008 Sascha Steinbiss Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTRDIGEST_DEF_H #define LTRDIGEST_DEF_H #include "ltr/pbs.h" #include "ltr/ppt.h" #include "ltr/pdom.h" enum GtLTRdigestRunScans { GT_LTRDIGEST_RUN_PPT = 0x1, GT_LTRDIGEST_RUN_PBS = 0x2, GT_LTRDIGEST_RUN_PDOM = 0x4 }; #define GT_LTRDIGEST_TAG "LTRdigest" #endif genometools-1.5.1/src/ltr/ltrdigest_stream.c000066400000000000000000000455061211610345200211660ustar00rootroot00000000000000/* Copyright (c) 2008-2009 Sascha Steinbiss Copyright (c) 2008-2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/class_alloc_lock.h" #include "core/log.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/range.h" #include "core/str.h" #include "core/unused_api.h" #include "extended/node_stream_api.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "extended/reverse_api.h" #include "ltr/ltrdigest_def.h" #include "ltr/ltrdigest_stream.h" #include "ltr/ltr_visitor.h" struct GtLTRdigestStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; GtEncseq *encseq; GtPBSOptions *pbs_opts; GtPPTOptions *ppt_opts; #ifdef HAVE_HMMER GtPdomFinder *pdf; GtPdomOptions *pdom_opts; #endif GtLTRVisitor *lv; GtStr *ltrdigest_tag; int tests_to_run; GtLTRElement element; }; #define GT_ALIWIDTH 60 #define gt_ltrdigest_stream_cast(GS)\ gt_node_stream_cast(gt_ltrdigest_stream_class(), GS) #ifdef HAVE_HMMER static int pdom_hit_attach_gff3(GtPdomModel *model, GtPdomModelHit *hit, void *data, GT_UNUSED GtError *err) { unsigned long i; GtRange rng; GtLTRdigestStream *ls = (GtLTRdigestStream *) data; GtStrand strand; gt_assert(model && hit); strand = gt_pdom_model_hit_get_best_strand(hit); /* do not use the hits on the non-predicted strand -- maybe identify nested elements ? */ if (strand != gt_feature_node_get_strand(ls->element.mainnode)) return 0; for (i=0;ipdom_opts->output_all_chains) { gf = gt_feature_node_new(gt_genome_node_get_seqid((GtGenomeNode*) ls->element.mainnode), gt_ft_protein_match, rng.start, rng.end, strand); gt_genome_node_add_user_data((GtGenomeNode*) gf, "pdom_alignment", alignmentstring, (GtFree) gt_str_delete); gt_genome_node_add_user_data((GtGenomeNode*) gf, "pdom_aaseq", aastring, (GtFree) gt_str_delete); gt_feature_node_set_source((GtFeatureNode*) gf, ls->ltrdigest_tag); gt_feature_node_set_score((GtFeatureNode*) gf, gt_pdom_single_hit_get_evalue(singlehit)); gt_feature_node_set_phase((GtFeatureNode*) gf, frame); if (gt_pdom_model_get_name(model)) { gt_feature_node_add_attribute((GtFeatureNode*) gf, "name", gt_pdom_model_get_name(model)); } if (gt_pdom_model_get_acc(model)) { gt_feature_node_add_attribute((GtFeatureNode*) gf, "id", gt_pdom_model_get_acc(model)); } if (gt_pdom_single_hit_is_chained(singlehit) && ls->pdom_opts->output_all_chains) { GtStr *buffer; unsigned long i; GtArray *chains = gt_pdom_single_hit_get_chains(singlehit); gt_assert(chains != NULL); buffer = gt_str_new(); for (i = 0; i < gt_array_size(chains); i++) { gt_str_append_cstr(buffer, gt_pdom_model_get_name(model)); gt_str_append_char(buffer, ':'); gt_str_append_ulong(buffer, *(unsigned long*) gt_array_get(chains, i)); if (i != gt_array_size(chains) - 1) { gt_str_append_char(buffer, ','); } } gt_feature_node_add_attribute((GtFeatureNode*) gf, "chains", gt_str_get(buffer)); gt_str_delete(buffer); } gt_feature_node_add_child(ls->element.mainnode, (GtFeatureNode*) gf); } } return 0; } #endif static void pbs_attach_results_to_gff3(GtPBSResults *results, GtLTRElement *element, GtStrand *canonical_strand, GtStr *tag) { GtRange pbs_range; GtGenomeNode *gf; unsigned long i = 0; char buffer[BUFSIZ]; GtPBSHit* hit = gt_pbs_results_get_ranked_hit(results, i++); if (*canonical_strand == GT_STRAND_UNKNOWN) *canonical_strand = gt_pbs_hit_get_strand(hit); else { /* do we have to satisfy a strand constraint? * then find best-scoring PBS on the given canonical strand */ while (gt_pbs_hit_get_strand(hit) != *canonical_strand && i < gt_pbs_results_get_number_of_hits(results)) { gt_log_log("dropping PBS because of nonconsistent strand: %s\n", gt_feature_node_get_attribute(element->mainnode, "ID")); hit = gt_pbs_results_get_ranked_hit(results, i++); } /* if there is none, do not report a PBS */ if (gt_pbs_hit_get_strand(hit) != *canonical_strand) return; } pbs_range = gt_pbs_hit_get_coords(hit); pbs_range.start++; pbs_range.end++; /* GFF3 is 1-based */ gf = gt_feature_node_new(gt_genome_node_get_seqid((GtGenomeNode*) element->mainnode), gt_ft_primer_binding_site, pbs_range.start, pbs_range.end, gt_pbs_hit_get_strand(hit)); gt_feature_node_set_source((GtFeatureNode*) gf, tag); gt_feature_node_set_score((GtFeatureNode*) gf, (float) gt_pbs_hit_get_score(hit)); if (gt_pbs_hit_get_trna(hit) != NULL) { gt_feature_node_add_attribute((GtFeatureNode*) gf, "trna", gt_pbs_hit_get_trna(hit)); } gt_feature_node_set_strand(element->mainnode, gt_pbs_hit_get_strand(hit)); (void) snprintf(buffer, BUFSIZ-1, "%lu", gt_pbs_hit_get_tstart(hit)); gt_feature_node_add_attribute((GtFeatureNode*) gf, "trnaoffset", buffer); (void) snprintf(buffer, BUFSIZ-1, "%lu", gt_pbs_hit_get_offset(hit)); gt_feature_node_add_attribute((GtFeatureNode*) gf, "pbsoffset", buffer); (void) snprintf(buffer, BUFSIZ-1, "%lu", gt_pbs_hit_get_edist(hit)); gt_feature_node_add_attribute((GtFeatureNode*) gf, "edist", buffer); gt_feature_node_add_child(element->mainnode, (GtFeatureNode*) gf); } static void ppt_attach_results_to_gff3(GtPPTResults *results, GtLTRElement *element, GtStrand *canonical_strand, GtStr *tag) { GtRange ppt_range; unsigned long i = 0; GtGenomeNode *gf; GtPPTHit *hit = gt_ppt_results_get_ranked_hit(results, i++), *ubox; if (*canonical_strand == GT_STRAND_UNKNOWN) *canonical_strand = gt_ppt_hit_get_strand(hit); else { /* find best-scoring PPT on the given canonical strand */ while (gt_ppt_hit_get_strand(hit) != *canonical_strand && i < gt_ppt_results_get_number_of_hits(results)) { gt_log_log("dropping PPT because of nonconsistent strand: %s\n", gt_feature_node_get_attribute(element->mainnode, "ID")); hit = gt_ppt_results_get_ranked_hit(results, i++); } /* if there is none, do not report a PPT */ if (gt_ppt_hit_get_strand(hit) != *canonical_strand) return; } ppt_range = gt_ppt_hit_get_coords(hit); ppt_range.start++; ppt_range.end++; /* GFF3 is 1-based */ gf = gt_feature_node_new(gt_genome_node_get_seqid((GtGenomeNode*) element->mainnode), gt_ft_RR_tract, ppt_range.start, ppt_range.end, gt_ppt_hit_get_strand(hit)); gt_feature_node_set_source((GtFeatureNode*) gf, tag); gt_feature_node_set_strand(element->mainnode, gt_ppt_hit_get_strand(hit)); gt_feature_node_add_child(element->mainnode, (GtFeatureNode*) gf); if ((ubox = gt_ppt_hit_get_ubox(hit)) != NULL) { GtRange ubox_range = gt_ppt_hit_get_coords(ubox); ubox_range.start++; ubox_range.end++; gf = gt_feature_node_new(gt_genome_node_get_seqid((GtGenomeNode*) element->mainnode), gt_ft_U_box, ubox_range.start, ubox_range.end, gt_ppt_hit_get_strand(ubox)); gt_feature_node_set_source((GtFeatureNode*) gf, tag); gt_feature_node_set_strand(element->mainnode, gt_ppt_hit_get_strand(ubox)); gt_feature_node_add_child(element->mainnode, (GtFeatureNode*) gf); } } static int run_ltrdigest(GtLTRElement *element, char *seq, GtLTRdigestStream *ls, #ifdef HAVE_HMMER GtError *err) #else GT_UNUSED GtError *err) #endif { int had_err = 0; char *rev_seq; unsigned long seqlen = gt_ltrelement_length(element); GtStrand canonical_strand = GT_STRAND_UNKNOWN; /* create reverse strand sequence */ rev_seq = gt_calloc((size_t) seqlen+1, sizeof (char)); memcpy(rev_seq, seq, sizeof (char) * seqlen); had_err = gt_reverse_complement(rev_seq, seqlen, err); if (!had_err) { #ifdef HAVE_HMMER /* Protein domain finding * ----------------------*/ if (ls->tests_to_run & GT_LTRDIGEST_RUN_PDOM) { GtPdomResults *pdom_results = NULL; if (!ls->pdf) { gt_error_set(err, "No PdomFinder object found -- " "how could that happen?"); had_err = -1; } else { pdom_results = gt_pdom_finder_find(ls->pdf, (const char*) seq, (const char*) rev_seq, element, err); if (!pdom_results) { had_err = -1; } else { if (pdom_results && !gt_pdom_results_empty(pdom_results)) { /* determine most likely strand from protein domain results */ if (gt_double_compare( gt_pdom_results_get_combined_evalue_fwd(pdom_results), gt_pdom_results_get_combined_evalue_rev(pdom_results)) < 0) canonical_strand = GT_STRAND_FORWARD; else canonical_strand = GT_STRAND_REVERSE; gt_feature_node_set_strand(ls->element.mainnode, canonical_strand); /* create nodes for protein match annotations */ (void) gt_pdom_results_foreach_domain_hit(pdom_results, pdom_hit_attach_gff3, ls, err); } gt_pdom_results_delete(pdom_results); } } } #endif /* PPT finding * -----------*/ if (ls->tests_to_run & GT_LTRDIGEST_RUN_PPT) { GtPPTResults *ppt_results = NULL; ppt_results = gt_ppt_find((const char*) seq, (const char*) rev_seq, element, ls->ppt_opts); if (gt_ppt_results_get_number_of_hits(ppt_results) > 0) { ppt_attach_results_to_gff3(ppt_results, element, &canonical_strand, ls->ltrdigest_tag); } gt_ppt_results_delete(ppt_results); } /* PBS finding * ----------- */ if (ls->tests_to_run & GT_LTRDIGEST_RUN_PBS) { GtPBSResults *pbs_results = NULL; pbs_results = gt_pbs_find((const char*) seq, (const char*) rev_seq, element, ls->pbs_opts, err); if (gt_pbs_results_get_number_of_hits(pbs_results) > 0) { pbs_attach_results_to_gff3(pbs_results, element, &canonical_strand, ls->ltrdigest_tag); } gt_pbs_results_delete(pbs_results); } } gt_free(rev_seq); return had_err; } static int gt_ltrdigest_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtLTRdigestStream *ls; GtFeatureNode *fn; int had_err; gt_error_check(err); ls = gt_ltrdigest_stream_cast(ns); /* initialize this element */ memset(&ls->element, 0, sizeof (GtLTRElement)); /* get annotations from parser */ had_err = gt_node_stream_next(ls->in_stream, gn, err); if (!had_err && *gn) { GtFeatureNodeIterator *gni; GtFeatureNode *mygn; /* only process feature nodes */ if (!(fn = gt_feature_node_try_cast(*gn))) return 0; /* fill LTRElement structure from GFF3 subgraph */ gni = gt_feature_node_iterator_new(fn); for (mygn = fn; mygn != NULL; mygn = gt_feature_node_iterator_next(gni)) (void) gt_genome_node_accept((GtGenomeNode*) mygn, (GtNodeVisitor*) ls->lv, err); gt_feature_node_iterator_delete(gni); } if (ls->element.mainnode != NULL) { unsigned long seqid; const char *sreg; char *seq; sreg = gt_str_get(gt_genome_node_get_seqid((GtGenomeNode*) ls->element.mainnode)); /* we assume that this is the correct numbering! */ if (!sscanf(sreg,"seq%lu", &seqid)) { gt_error_set(err, "Feature '%s' on line %u has invalid region identifier," "must be 'seqX' with X being a sequence number, but was " "'%s'!", gt_feature_node_get_attribute(ls->element.mainnode, "ID"), gt_genome_node_get_line_number((GtGenomeNode*) ls->element.mainnode), gt_str_get(gt_genome_node_get_seqid((GtGenomeNode*) ls->element.mainnode))); had_err = -1; } if (!had_err) { if (seqid > gt_encseq_num_of_sequences(ls->encseq)-1) { gt_error_set(err, "Sequence region number exceeds number of sequences " "in encoded sequence file: 'seq%lu'!", seqid); had_err = -1; } } if (!had_err) { GtUchar *symbolstring; unsigned long length, seqstartpos, seqlength; const GtAlphabet *alpha; seqstartpos = gt_encseq_seqstartpos(ls->encseq, seqid); seqlength = gt_encseq_seqlength(ls->encseq, seqid); if (ls->element.rightLTR_3 <= seqlength) { alpha = gt_encseq_alphabet(ls->encseq); length = gt_ltrelement_length(&ls->element); seq = gt_malloc((size_t) (length+1) * sizeof (char)); symbolstring = gt_malloc((size_t) (length+1) * sizeof (GtUchar)); gt_encseq_extract_encoded(ls->encseq, symbolstring, seqstartpos + (ls->element.leftLTR_5), seqstartpos + (ls->element.leftLTR_5) + length - 1); gt_alphabet_decode_seq_to_cstr(alpha, seq, symbolstring, length); gt_free(symbolstring); /* run LTRdigest core routine */ had_err = run_ltrdigest(&ls->element, seq, ls, err); gt_free(seq); } else { /* do not process elements whose positions exceed sequence boundaries (obviously annotation and sequence do not match!) */ gt_error_set(err, "Element '%s' exceeds sequence boundaries! (%lu > %lu)", gt_feature_node_get_attribute(ls->element.mainnode, "ID"), ls->element.rightLTR_3, seqlength); had_err = -1; } } } if (had_err) { gt_genome_node_delete(*gn); *gn = NULL; } return had_err; } static void gt_ltrdigest_stream_free(GtNodeStream *ns) { GtLTRdigestStream *ls = gt_ltrdigest_stream_cast(ns); gt_node_visitor_delete((GtNodeVisitor*) ls->lv); gt_str_delete(ls->ltrdigest_tag); gt_node_stream_delete(ls->in_stream); #ifdef HAVE_HMMER gt_pdom_finder_delete(ls->pdf); #endif } const GtNodeStreamClass* gt_ltrdigest_stream_class(void) { static const GtNodeStreamClass *nsc; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtLTRdigestStream), gt_ltrdigest_stream_free, gt_ltrdigest_stream_next ); } gt_class_alloc_lock_leave(); return nsc; } GtNodeStream* gt_ltrdigest_stream_new(GtNodeStream *in_stream, int tests_to_run, GtEncseq *encseq, GtPBSOptions *pbs_opts, GtPPTOptions *ppt_opts, #ifdef HAVE_HMMER GtPdomOptions *pdom_opts, GtError *err) #else GT_UNUSED GtError *err) #endif { GtNodeStream *ns; GtLTRdigestStream *ls; ns = gt_node_stream_create(gt_ltrdigest_stream_class(), true); ls = gt_ltrdigest_stream_cast(ns); ls->in_stream = gt_node_stream_ref(in_stream); ls->ppt_opts = ppt_opts; ls->pbs_opts = pbs_opts; #ifdef HAVE_HMMER ls->pdom_opts = pdom_opts; ls->pdf = gt_pdom_finder_new(ls->pdom_opts->hmm_files, ls->pdom_opts->evalue_cutoff, ls->pdom_opts->chain_max_gap_length, ls->pdom_opts->cutoff, err); #endif ls->tests_to_run = tests_to_run; ls->encseq = encseq; ls->ltrdigest_tag = gt_str_new_cstr(GT_LTRDIGEST_TAG); ls->lv = (GtLTRVisitor*) gt_ltr_visitor_new(&ls->element); #ifdef HAVE_HMMER if (!ls->pdf) { /* An error occurred, do not return a stream. We assume that the error message has been set. */ gt_node_stream_delete(ns); return NULL; } else #endif return ns; } genometools-1.5.1/src/ltr/ltrdigest_stream.h000066400000000000000000000032631211610345200211650ustar00rootroot00000000000000/* Copyright (c) 2008-2009 Sascha Steinbiss Copyright (c) 2008-2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTRDIGEST_STREAM_H #define LTRDIGEST_STREAM_H #include "core/error_api.h" #include "extended/node_stream_api.h" #include "ltr/pbs.h" #include "ltr/ppt.h" #ifdef HAVE_HMMER #include "ltr/pdom.h" #endif #include "core/encseq.h" /* implements the ``node stream'' interface */ typedef struct GtLTRdigestStream GtLTRdigestStream; const GtNodeStreamClass* gt_ltrdigest_stream_class(void); GtNodeStream* gt_ltrdigest_stream_new(GtNodeStream *in_stream, int tests_to_run, GtEncseq *encseq, GtPBSOptions *pbs_opts, GtPPTOptions *ppt_opts, #ifdef HAVE_HMMER GtPdomOptions *pdom_opts, #endif GtError *err); #endif genometools-1.5.1/src/ltr/ltrelement.c000066400000000000000000000123311211610345200177530ustar00rootroot00000000000000/* Copyright (c) 2008-2010 Sascha Steinbiss Copyright (c) 2008-2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/alphabet.h" #include "core/cstr_api.h" #include "core/ensure.h" #include "core/ma.h" #include "core/minmax.h" #include "extended/reverse_api.h" #include "ltr/ltrelement.h" unsigned long gt_ltrelement_length(GtLTRElement *e) { gt_assert(e && (e->leftLTR_3 >= e->leftLTR_5)); return e->rightLTR_3 - e->leftLTR_5 + 1; } unsigned long gt_ltrelement_leftltrlen(GtLTRElement *e) { gt_assert(e && (e->leftLTR_3 >= e->leftLTR_5)); return e->leftLTR_3-e->leftLTR_5 + 1; } char* gt_ltrelement_get_sequence(unsigned long start, unsigned long end, GtStrand strand, GtEncseq *seq, unsigned long seqstartpos, GtError *err) { char *out; int had_err = 0; GtUchar *symbolstring; const GtAlphabet *alpha; GtEncseqReader *esr; unsigned long len, i; gt_assert(seq && end >= start); gt_error_check(err); alpha = gt_encseq_alphabet(seq); len = end - start + 1; out = gt_malloc((size_t) (len + 1) * sizeof (char)); symbolstring = gt_malloc((size_t) (len + 1) * sizeof (GtUchar)); esr = gt_encseq_create_reader_with_readmode(seq, GT_READMODE_FORWARD, seqstartpos + start); for (i=0;irightLTR_3 >= e->rightLTR_5)); return e->rightLTR_3 - e->rightLTR_5 + 1; } int gt_ltrelement_format_description(GtLTRElement *e, unsigned int seqnamelen, char *buf, size_t buflen) { int ret; char tmpstr[BUFSIZ]; gt_assert(buf && e); (void) snprintf(tmpstr, MIN(BUFSIZ, (size_t) seqnamelen+1), "%s", e->seqid); tmpstr[seqnamelen+1] = '\0'; gt_cstr_rep(tmpstr, ' ', '_'); ret = snprintf(buf, buflen, "%s_%lu_%lu", tmpstr, e->leftLTR_5+1, e->rightLTR_3+1); return ret; } int gt_ltrelement_unit_test(GtError *err) { int had_err = 0; GtLTRElement element; char tmp[BUFSIZ]; const char *fullseq = "aaaaaaaaaaaaaaaaaaaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "acatactaggatgctagaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatataggatcctaaggctac" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "aaaaaaaaaaaaaaaaaaaa"; gt_error_check(err); /* check left LTR */ element.leftLTR_5 = 20UL; element.leftLTR_3 = 119UL; gt_ensure(had_err, gt_ltrelement_leftltrlen(&element) == 100UL); memset(tmp, 0, BUFSIZ); memcpy(tmp, fullseq + (element.leftLTR_5 * sizeof (char)), (size_t) (element.leftLTR_3 - element.leftLTR_5+ 1) * sizeof (char)); gt_ensure(had_err, strcmp(tmp, "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcg" "aatatagcactgcatttcgaatatagtttcgaatatagcactgcattt" "cgaa" ) == 0); /* check right LTR */ element.rightLTR_5 = 520UL; element.rightLTR_3 = 619UL; gt_ensure(had_err, gt_ltrelement_rightltrlen(&element) == 100UL); memset(tmp, 0, BUFSIZ); memcpy(tmp, fullseq + (element.rightLTR_5 * sizeof (char)), (size_t) (element.rightLTR_3 - element.rightLTR_5+ 1) * sizeof (char)); gt_ensure(had_err, strcmp(tmp, "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcg" "aatatagcactgcatttcgaatatagtttcgaatatagcactgcattt" "cgaa" ) == 0); return had_err; } genometools-1.5.1/src/ltr/ltrelement.h000066400000000000000000000045561211610345200177720ustar00rootroot00000000000000/* Copyright (c) 2008-2009 Sascha Steinbiss Copyright (c) 2008-2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTRELEMENT_H #define LTRELEMENT_H #include "core/error.h" #include "core/hashmap.h" #include "core/range.h" #include "core/seq.h" #include "core/strand.h" #include "extended/feature_node.h" #include "core/encseq.h" enum GtOffset { GT_OFFSET_END_LEFT_LTR, GT_OFFSET_END_RIGHT_LTR, GT_OFFSET_BEGIN_RIGHT_LTR, GT_OFFSET_BEGIN_LEFT_LTR }; typedef struct GtLTRElement { unsigned long leftLTR_3, leftLTR_5, rightLTR_3, rightLTR_5; GtFeatureNode *mainnode, *leftLTR, *rightLTR, *leftTSD, *rightTSD, *ppt, *pbs; char *seqid; GtArray *pdomorder; GtHashmap *pdoms; } GtLTRElement; unsigned long gt_ltrelement_length(GtLTRElement *e); char* gt_ltrelement_get_sequence(unsigned long start, unsigned long end, GtStrand strand, GtEncseq *seq, unsigned long seqstartpos, GtError *err); unsigned long gt_ltrelement_leftltrlen(GtLTRElement *e); unsigned long gt_ltrelement_rightltrlen(GtLTRElement *e); int gt_ltrelement_format_description(GtLTRElement *e, unsigned int seqnamelen, char *buf, size_t buflen); int gt_ltrelement_unit_test(GtError *err); #endif genometools-1.5.1/src/ltr/ltrfileout_stream.c000066400000000000000000000653031211610345200213530ustar00rootroot00000000000000/* Copyright (c) 2008-2010 Sascha Steinbiss Copyright (c) 2008-2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #include #endif #include #include #include "core/class_alloc_lock.h" #include "core/cstr_api.h" #include "core/fasta.h" #include "core/hashmap.h" #include "core/ma.h" #include "core/minmax.h" #include "core/range.h" #include "core/str.h" #include "core/unused_api.h" #include "extended/node_stream_api.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "ltr/ltrfileout_stream.h" #include "ltr/ltr_visitor.h" #define GT_FSWIDTH 60UL #define GT_MAXFILENAMELEN 256 #define GT_MAXFASTAHEADER 256 struct GtLTRFileOutStream { const GtNodeStream parent_instance; GtNodeStream *in_stream; GtEncseq *encseq; const char *fileprefix; GtFile *metadata_file, *tabout_file, *pbsout_file, *pptout_file, *ltr5out_file, *ltr3out_file, *elemout_file; GtHashmap *pdomout_files, *pdomali_files, *pdomaa_files; GtLTRVisitor *lv; int tests_to_run; unsigned int seqnamelen; GtLTRElement element; bool write_pdom_alignments, write_pdom_aaseqs; }; #define gt_ltr_fileout_stream_cast(GS)\ gt_node_stream_cast(gt_ltr_fileout_stream_class(), GS) static int write_pdom(GtLTRFileOutStream *ls, GtArray *pdoms, const char *pdomname, GtEncseq *seq, unsigned long startpos, char *desc, GtError *err) { int had_err = 0; GtFile *seqfile = NULL, *alifile = NULL, *aafile = NULL; unsigned long i = 0, seq_length = 0; GtStr *pdom_seq, *pdom_aaseq; gt_error_check(err); pdom_seq = gt_str_new(); pdom_aaseq = gt_str_new(); /* get protein domain output file */ seqfile = (GtFile*) gt_hashmap_get(ls->pdomout_files, pdomname); if (seqfile == NULL) { /* no file opened for this domain yet, do it */ char buffer[GT_MAXFILENAMELEN]; (void) snprintf(buffer, (size_t) (GT_MAXFILENAMELEN-1), "%s_pdom_%s.fas", ls->fileprefix, pdomname); seqfile = gt_file_xopen(buffer, "w+"); gt_hashmap_add(ls->pdomout_files, gt_cstr_dup(pdomname), seqfile); } /* get protein alignment output file */ if (ls->write_pdom_alignments) { alifile = (GtFile*) gt_hashmap_get(ls->pdomali_files, pdomname); if (alifile == NULL) { /* no file opened for this domain yet, do it */ char buffer[GT_MAXFILENAMELEN]; (void) snprintf(buffer, (size_t) (GT_MAXFILENAMELEN-1), "%s_pdom_%s.ali", ls->fileprefix, pdomname); alifile = gt_file_xopen(buffer, "w+"); gt_hashmap_add(ls->pdomali_files, gt_cstr_dup(pdomname), alifile); } } /* get amino acid sequence output file */ if (ls->write_pdom_aaseqs) { aafile = (GtFile*) gt_hashmap_get(ls->pdomaa_files, pdomname); if (aafile == NULL) { /* no file opened for this domain yet, do it */ char buffer[GT_MAXFILENAMELEN]; (void) snprintf(buffer, (size_t) (GT_MAXFILENAMELEN-1), "%s_pdom_%s_aa.fas", ls->fileprefix, pdomname); aafile = gt_file_xopen(buffer, "w+"); gt_hashmap_add(ls->pdomaa_files, gt_cstr_dup(pdomname), aafile); } } if (gt_array_size(pdoms) > 1UL) { for (i=1UL; i= 0); } if (gt_feature_node_get_strand(*(GtFeatureNode**) gt_array_get(pdoms, 0UL)) == GT_STRAND_REVERSE) { gt_array_reverse(pdoms); } } /* output protein domain data */ for (i=0;iwrite_pdom_alignments && ali) { char buf[BUFSIZ]; /* write away alignment */ (void) snprintf(buf, BUFSIZ-1, "Protein domain alignment in translated " "sequence for candidate\n'%s':\n\n", desc); gt_file_xwrite(alifile, buf, (size_t) strlen(buf) * sizeof (char)); gt_file_xwrite(alifile, gt_str_get(ali), (size_t) gt_str_length(ali) * sizeof (char)); gt_file_xwrite(alifile, "---\n\n", 5 * sizeof (char)); } if (ls->write_pdom_aaseqs && aaseq) { /* append amino acid sequence */ gt_str_append_str(pdom_aaseq, aaseq); } gt_genome_node_release_user_data((GtGenomeNode*) fn, "pdom_alignment"); gt_genome_node_release_user_data((GtGenomeNode*) fn, "pdom_aaseq"); seq_length += gt_range_length(&pdom_rng); gt_free(tmpstr); } if (!had_err) { gt_fasta_show_entry(desc, gt_str_get(pdom_seq), seq_length, GT_FSWIDTH, seqfile); if (ls->write_pdom_aaseqs) { gt_fasta_show_entry(desc, gt_str_get(pdom_aaseq), gt_str_length(pdom_aaseq), GT_FSWIDTH, aafile); } } gt_str_delete(pdom_seq); gt_str_delete(pdom_aaseq); return had_err; } int gt_ltrfileout_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { GtLTRFileOutStream *ls; GtFeatureNode *fn; GtRange lltr_rng, rltr_rng, rng, ppt_rng, pbs_rng; char *ppt_seq, *pbs_seq; int had_err; unsigned long i=0; gt_error_check(err); ls = gt_ltr_fileout_stream_cast(ns); /* initialize this element */ memset(&ls->element, 0, sizeof (GtLTRElement)); /* get annotations from parser */ had_err = gt_node_stream_next(ls->in_stream, gn, err); if (!had_err && *gn) { GtFeatureNodeIterator* gni; GtFeatureNode *mygn; /* only process feature nodes */ if (!(fn = gt_feature_node_try_cast(*gn))) return 0; ls->element.pdomorder = gt_array_new(sizeof (const char*)); /* fill LTRElement structure from GFF3 subgraph */ gni = gt_feature_node_iterator_new(fn); for (mygn = fn; mygn != NULL; mygn = gt_feature_node_iterator_next(gni)) (void) gt_genome_node_accept((GtGenomeNode*) mygn, (GtNodeVisitor*) ls->lv, err); gt_feature_node_iterator_delete(gni); } if (ls->element.mainnode != NULL) { unsigned long seqnr, seqid_len, seqstartpos; GT_UNUSED unsigned long seqlength; char *outseq, desc[GT_MAXFASTAHEADER]; GtRange ltr3_rng, ltr5_rng; GT_UNUSED GtRange elemrng; /* find sequence in GtEncseq */ const char *sreg = gt_str_get(gt_genome_node_get_seqid((GtGenomeNode*) ls->element.mainnode)); (void) sscanf(sreg,"seq%lu", &seqnr); elemrng = gt_genome_node_get_range((GtGenomeNode*) ls->element.mainnode); seqstartpos = gt_encseq_seqstartpos(ls->encseq, seqnr); seqlength = gt_encseq_seqlength(ls->encseq, seqnr); ls->element.seqid = gt_calloc((size_t) ls->seqnamelen+1, sizeof (char)); (void) snprintf(ls->element.seqid, MIN((size_t) seqid_len, (size_t) ls->seqnamelen)+1, "%s", gt_encseq_description(ls->encseq, &seqid_len, seqnr)); gt_cstr_rep(ls->element.seqid, ' ', '_'); if (seqid_len > (unsigned long) ls->seqnamelen) ls->element.seqid[ls->seqnamelen] = '\0'; (void) gt_ltrelement_format_description(&ls->element, ls->seqnamelen, desc, (size_t) (GT_MAXFASTAHEADER-1)); /* output basic retrotransposon data */ lltr_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.leftLTR); rltr_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.rightLTR); rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.mainnode); gt_file_xprintf(ls->tabout_file, "%lu\t%lu\t%lu\t%s\t%lu\t%lu\t%lu\t%lu\t%lu\t%lu\t", rng.start, rng.end, gt_ltrelement_length(&ls->element), ls->element.seqid, lltr_rng.start, lltr_rng.end, gt_ltrelement_leftltrlen(&ls->element), rltr_rng.start, rltr_rng.end, gt_ltrelement_rightltrlen(&ls->element)); /* output TSDs */ if (ls->element.leftTSD != NULL) { GtRange tsd_rng; GtStrand tsd_strand; char *tsd_seq; tsd_strand = gt_feature_node_get_strand(ls->element.leftTSD); tsd_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.leftTSD); tsd_seq = gt_ltrelement_get_sequence(tsd_rng.start-1, tsd_rng.end-1, tsd_strand, ls->encseq, seqstartpos, err); gt_file_xprintf(ls->tabout_file, "%lu\t%lu\t%s\t", tsd_rng.start, tsd_rng.end, tsd_seq); gt_free((char*) tsd_seq); } else gt_file_xprintf(ls->tabout_file, "\t\t\t"); if (ls->element.rightTSD != NULL) { GtRange tsd_rng; GtStrand tsd_strand; char *tsd_seq; tsd_strand = gt_feature_node_get_strand(ls->element.rightTSD); tsd_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.rightTSD); tsd_seq = gt_ltrelement_get_sequence(tsd_rng.start-1, tsd_rng.end-1, tsd_strand, ls->encseq, seqstartpos, err); gt_file_xprintf(ls->tabout_file, "%lu\t%lu\t%s\t", tsd_rng.start, tsd_rng.end, tsd_seq); gt_free((char*) tsd_seq); } else gt_file_xprintf(ls->tabout_file, "\t\t\t"); /* output PPT */ if (ls->element.ppt != NULL) { GtStrand ppt_strand; ppt_strand = gt_feature_node_get_strand(ls->element.ppt); ppt_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.ppt); ppt_seq = gt_ltrelement_get_sequence(ppt_rng.start-1, ppt_rng.end-1, ppt_strand, ls->encseq, seqstartpos, err); gt_fasta_show_entry(desc, ppt_seq, gt_range_length(&ppt_rng), GT_FSWIDTH, ls->pptout_file); gt_file_xprintf(ls->tabout_file, "%lu\t%lu\t%s\t%c\t%d\t", ppt_rng.start, ppt_rng.end, ppt_seq, GT_STRAND_CHARS[ppt_strand], (ppt_strand == GT_STRAND_FORWARD ? abs((int) (rltr_rng.start - ppt_rng.end)) : abs((int) (lltr_rng.end - ppt_rng.start)))); gt_free((char*) ppt_seq); } else gt_file_xprintf(ls->tabout_file, "\t\t\t\t\t"); /* output PBS */ if (ls->element.pbs != NULL) { GtStrand pbs_strand; pbs_strand = gt_feature_node_get_strand(ls->element.pbs); pbs_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.pbs); pbs_seq = gt_ltrelement_get_sequence(pbs_rng.start-1, pbs_rng.end-1, pbs_strand, ls->encseq, seqstartpos, err); gt_fasta_show_entry(desc, pbs_seq, gt_range_length(&pbs_rng), GT_FSWIDTH, ls->pbsout_file); gt_file_xprintf(ls->tabout_file, "%lu\t%lu\t%c\t%s\t%s\t%s\t%s\t%s\t", pbs_rng.start, pbs_rng.end, GT_STRAND_CHARS[pbs_strand], gt_feature_node_get_attribute(ls->element.pbs, "trna"), pbs_seq, gt_feature_node_get_attribute(ls->element.pbs, "pbsoffset"), gt_feature_node_get_attribute(ls->element.pbs, "trnaoffset"), gt_feature_node_get_attribute(ls->element.pbs, "edist")); gt_free((char*) pbs_seq); } else gt_file_xprintf(ls->tabout_file, "\t\t\t\t\t\t\t\t"); /* output protein domains */ if (ls->element.pdoms != NULL) { GtStr *pdomorderstr = gt_str_new(); for (i=0;ielement.pdomorder);i++) { const char* key = *(const char**) gt_array_get(ls->element.pdomorder, i); GtArray *entry = (GtArray*) gt_hashmap_get(ls->element.pdoms, key); (void) write_pdom(ls, entry, key, ls->encseq, seqstartpos, desc, err); } if (GT_STRAND_REVERSE == gt_feature_node_get_strand(ls->element.mainnode)) gt_array_reverse(ls->element.pdomorder); for (i=0;ielement.pdomorder);i++) { const char* name = *(const char**) gt_array_get(ls->element.pdomorder, i); gt_str_append_cstr(pdomorderstr, name); if (i != gt_array_size(ls->element.pdomorder)-1) gt_str_append_cstr(pdomorderstr, "/"); } gt_file_xprintf(ls->tabout_file, "%s", gt_str_get(pdomorderstr)); gt_str_delete(pdomorderstr); } /* output LTRs (we just expect them to exist) */ switch (gt_feature_node_get_strand(ls->element.mainnode)) { case GT_STRAND_REVERSE: ltr5_rng = rltr_rng; ltr3_rng = lltr_rng; break; case GT_STRAND_FORWARD: default: ltr5_rng = lltr_rng; ltr3_rng = rltr_rng; break; } outseq = gt_ltrelement_get_sequence(ltr5_rng.start-1, ltr5_rng.end-1, gt_feature_node_get_strand(ls->element.mainnode), ls->encseq, seqstartpos, err); gt_fasta_show_entry(desc, outseq, gt_range_length(<r5_rng), GT_FSWIDTH, ls->ltr5out_file); gt_free(outseq); outseq = gt_ltrelement_get_sequence(rng.start-1, rng.end-1, gt_feature_node_get_strand(ls->element.mainnode), ls->encseq, seqstartpos, err); gt_fasta_show_entry(desc, outseq, gt_range_length(&rng), GT_FSWIDTH, ls->elemout_file); gt_free(outseq); /* output complete oriented element */ outseq = gt_ltrelement_get_sequence(ltr3_rng.start-1, ltr3_rng.end-1, gt_feature_node_get_strand(ls->element.mainnode), ls->encseq, seqstartpos, err); gt_fasta_show_entry(desc, outseq, gt_range_length(<r3_rng), GT_FSWIDTH, ls->ltr3out_file); gt_free(outseq); gt_file_xprintf(ls->tabout_file, "\n"); } gt_hashmap_delete(ls->element.pdoms); gt_array_delete(ls->element.pdomorder); gt_free(ls->element.seqid); return had_err; } static void write_metadata(GtFile *metadata_file, int tests_to_run, GtPPTOptions *ppt_opts, GtPBSOptions *pbs_opts, #ifdef HAVE_HMMER GtPdomOptions *pdom_opts, #endif const char *trnafilename, const char *seqfilename, const char *gfffilename) { int buflen = 1024; char *buffer; buffer = gt_calloc((size_t) (buflen+1), sizeof (char)); /* get working directory */ while (getcwd(buffer, (size_t) buflen) == NULL) { buflen += 1024; buffer = gt_realloc(buffer, (buflen+1) * sizeof (char)); } gt_assert(buffer && strlen(buffer) > 0); /* append working dir to relative paths if necessary */ if (seqfilename[0] != '/') gt_file_xprintf(metadata_file, "Sequence file used\t%s/%s\n", buffer, seqfilename); else gt_file_xprintf(metadata_file, "Sequence file used\t%s\n", seqfilename); if (gfffilename[0] != '/') gt_file_xprintf(metadata_file, "GFF3 input used\t%s/%s\n", buffer, gfffilename); else gt_file_xprintf(metadata_file, "GFF3 input used\t%s\n", gfffilename); if (tests_to_run & GT_LTRDIGEST_RUN_PPT) { gt_file_xprintf(metadata_file, "PPT length\t%lu-%lunt\t8-30nt\n", ppt_opts->ppt_len.start, ppt_opts->ppt_len.end); gt_file_xprintf(metadata_file, "U-box length\t%lu-%lunt\t3-30nt\n", ppt_opts->ubox_len.start, ppt_opts->ubox_len.end); gt_file_xprintf(metadata_file, "PPT search radius\t%u\t30\n", ppt_opts->radius); } if (tests_to_run & GT_LTRDIGEST_RUN_PBS) { if (trnafilename[0] != '/') gt_file_xprintf(metadata_file, "tRNA library for PBS detection\t%s/%s\n", buffer, trnafilename); else gt_file_xprintf(metadata_file, "tRNA library for PBS detection\t%s\n", trnafilename); gt_file_xprintf(metadata_file, "allowed PBS/tRNA alignment length" " range\t%lu-%lunt\t11-30nt\n", pbs_opts->alilen.start, pbs_opts->alilen.end); gt_file_xprintf(metadata_file, "PBS/tRNA maximum unit edit distance\t%u\t1\n", pbs_opts->max_edist); gt_file_xprintf(metadata_file, "allowed PBS offset from 5' LTR range" "\t%lu-%lunt\t0-5nt\n", pbs_opts->offsetlen.start, pbs_opts->offsetlen.end); gt_file_xprintf(metadata_file, "allowed PBS offset from 3' tRNA end" " range\t%lu-%lunt\t0-5nt\n", pbs_opts->trnaoffsetlen.start, pbs_opts->trnaoffsetlen.end); gt_file_xprintf(metadata_file, "PBS search radius\t%d\t30\n", pbs_opts->radius); } #ifdef HAVE_HMMER if (tests_to_run & GT_LTRDIGEST_RUN_PDOM) { unsigned long i; gt_file_xprintf(metadata_file, "Protein domain models\t%lu (", gt_str_array_size(pdom_opts->hmm_files)); for (i=0;ihmm_files);i++) { gt_file_xprintf(metadata_file, "%s", gt_str_array_get(pdom_opts->hmm_files, i)); if (i != gt_str_array_size(pdom_opts->hmm_files)-1) gt_file_xprintf(metadata_file, ", "); } gt_file_xprintf(metadata_file, ")\n"); gt_file_xprintf(metadata_file, "pHMM e-value cutoff \t%g\t%g\n", pdom_opts->evalue_cutoff, 0.000001); gt_file_xprintf(metadata_file, "maximal allowed gap length between fragments to chain" " \t%u\t%u\n", pdom_opts->chain_max_gap_length, 50); } #endif gt_file_xprintf(metadata_file, "\n"); gt_free(buffer); } void gt_ltrfileout_stream_free(GtNodeStream *ns) { GtLTRFileOutStream *ls = gt_ltr_fileout_stream_cast(ns); if (ls->tabout_file != NULL) gt_file_delete(ls->tabout_file); if (ls->metadata_file != NULL) gt_file_delete(ls->metadata_file); if (ls->pbsout_file != NULL) gt_file_delete(ls->pbsout_file); if (ls->pptout_file != NULL) gt_file_delete(ls->pptout_file); if (ls->ltr5out_file != NULL) gt_file_delete(ls->ltr5out_file); if (ls->ltr3out_file != NULL) gt_file_delete(ls->ltr3out_file); if (ls->elemout_file != NULL) gt_file_delete(ls->elemout_file); gt_hashmap_delete(ls->pdomout_files); gt_hashmap_delete(ls->pdomali_files); gt_hashmap_delete(ls->pdomaa_files); gt_node_visitor_delete((GtNodeVisitor*) ls->lv); gt_node_stream_delete(ls->in_stream); } const GtNodeStreamClass* gt_ltr_fileout_stream_class(void) { static const GtNodeStreamClass *nsc; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtLTRFileOutStream), gt_ltrfileout_stream_free, gt_ltrfileout_stream_next ); } gt_class_alloc_lock_leave(); return nsc; } void gt_ltr_fileout_stream_enable_pdom_alignment_output(GtNodeStream *ns) { GtLTRFileOutStream *ls; gt_assert(ns); ls = gt_ltr_fileout_stream_cast(ns); ls->write_pdom_alignments = true; } void gt_ltr_fileout_stream_enable_aa_sequence_output(GtNodeStream *ns) { GtLTRFileOutStream *ls; gt_assert(ns); ls = gt_ltr_fileout_stream_cast(ns); ls->write_pdom_aaseqs = true; } GtNodeStream* gt_ltr_fileout_stream_new(GtNodeStream *in_stream, int tests_to_run, GtEncseq *encseq, char *file_prefix, GtPPTOptions *ppt_opts, GtPBSOptions *pbs_opts, #ifdef HAVE_HMMER GtPdomOptions *pdom_opts, #endif const char *trnafilename, const char *seqfilename, const char *gfffilename, unsigned int seqnamelen, GtError* err) { GtNodeStream *ns; GtLTRFileOutStream *ls; char fn[GT_MAXFILENAMELEN]; gt_error_check(err); gt_assert(file_prefix && in_stream && encseq && ppt_opts && pbs_opts #ifdef HAVE_HMMER && pdom_opts #endif ); ns = gt_node_stream_create(gt_ltr_fileout_stream_class(), true); ls = gt_ltr_fileout_stream_cast(ns); /* ref GFF input stream and sequences*/ ls->in_stream = gt_node_stream_ref(in_stream); ls->encseq = encseq; ls->tests_to_run = tests_to_run; ls->seqnamelen = seqnamelen; ls->write_pdom_alignments = false; ls->write_pdom_aaseqs = false; /* open outfiles */ ls->fileprefix = file_prefix; (void) snprintf(fn, (size_t) (GT_MAXFILENAMELEN-1), "%s_tabout.csv", file_prefix); ls->tabout_file = gt_file_open(GT_FILE_MODE_UNCOMPRESSED, fn, "w+", err); if (tests_to_run & GT_LTRDIGEST_RUN_PPT) { (void) snprintf(fn, (size_t) (GT_MAXFILENAMELEN-1), "%s_ppt.fas", file_prefix); ls->pptout_file = gt_file_open(GT_FILE_MODE_UNCOMPRESSED, fn, "w+", err); } if (tests_to_run & GT_LTRDIGEST_RUN_PBS) { (void) snprintf(fn, (size_t) (GT_MAXFILENAMELEN-1), "%s_pbs.fas", file_prefix); ls->pbsout_file = gt_file_open(GT_FILE_MODE_UNCOMPRESSED, fn, "w+", err); } (void) snprintf(fn, (size_t) (GT_MAXFILENAMELEN-1), "%s_5ltr.fas", file_prefix); ls->ltr5out_file = gt_file_open(GT_FILE_MODE_UNCOMPRESSED, fn, "w+", err); (void) snprintf(fn, (size_t) (GT_MAXFILENAMELEN-1), "%s_3ltr.fas", file_prefix); ls->ltr3out_file = gt_file_open(GT_FILE_MODE_UNCOMPRESSED, fn, "w+", err); (void) snprintf(fn, (size_t) (GT_MAXFILENAMELEN-1), "%s_complete.fas", file_prefix); ls->elemout_file = gt_file_open(GT_FILE_MODE_UNCOMPRESSED, fn, "w+", err); (void) snprintf(fn, (size_t) (GT_MAXFILENAMELEN-1), "%s_conditions.csv", file_prefix); ls->metadata_file = gt_file_open(GT_FILE_MODE_UNCOMPRESSED, fn, "w+", err); /* create hashmaps to hold protein domain output files */ ls->pdomout_files = gt_hashmap_new(GT_HASH_STRING, gt_free_func, (GtFree) gt_file_delete); ls->pdomali_files = gt_hashmap_new(GT_HASH_STRING, gt_free_func, (GtFree) gt_file_delete); ls->pdomaa_files = gt_hashmap_new(GT_HASH_STRING, gt_free_func, (GtFree) gt_file_delete); /* log run conditions in file */ write_metadata(ls->metadata_file, tests_to_run, ppt_opts, pbs_opts, #ifdef HAVE_HMMER pdom_opts, #endif trnafilename, seqfilename, gfffilename); /* print tabular outfile headline */ gt_file_xprintf(ls->tabout_file, "element start\telement end\telement length\tsequence\t" "lLTR start\tlLTR end\tlLTR length\t" "rLTR start\trLTR end\trLTR length\t" "lTSD start\tlTSD end\tlTSD motif\t" "rTSD start\trTSD end\trTSD motif\t" "PPT start\tPPT end\tPPT motif\tPPT strand\tPPT offset"); gt_file_xprintf(ls->tabout_file, "\tPBS start\tPBS end\tPBS strand\ttRNA\ttRNA motif\tPBS offset\t" "tRNA offset\tPBS/tRNA edist"); #ifdef HAVE_HMMER gt_file_xprintf(ls->tabout_file, "\tProtein domain hits"); #endif gt_file_xprintf(ls->tabout_file, "\n"); /* create visitor */ ls->lv = (GtLTRVisitor*) gt_ltr_visitor_new(&ls->element); return ns; } genometools-1.5.1/src/ltr/ltrfileout_stream.h000066400000000000000000000041521211610345200213530ustar00rootroot00000000000000/* Copyright (c) 2008-2009 Sascha Steinbiss Copyright (c) 2008-2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTRFILEOUT_STREAM_H #define LTRFILEOUT_STREAM_H #include "core/bioseq.h" #include "extended/node_stream_api.h" #include "ltr/ltrdigest_def.h" #include "core/encseq.h" /* implements the ``node_stream'' interface */ typedef struct GtLTRFileOutStream GtLTRFileOutStream; const GtNodeStreamClass* gt_ltr_fileout_stream_class(void); GtNodeStream* gt_ltr_fileout_stream_new(GtNodeStream *in_stream, int tests_to_run, GtEncseq *encseq, char *file_prefix, GtPPTOptions *ppt_opts, GtPBSOptions *pbs_opts, #ifdef HAVE_HMMER GtPdomOptions *pdom_opts, #endif const char *trnafilename, const char *seqfilename, const char *gfffilename, unsigned int seqnamelen, GtError *err); void gt_ltr_fileout_stream_enable_pdom_alignment_output(GtNodeStream*); void gt_ltr_fileout_stream_enable_aa_sequence_output(GtNodeStream*); #endif genometools-1.5.1/src/ltr/ltrharvest_fasta_out_stream.c000066400000000000000000000030521211610345200234160ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/unused_api.h" #include "extended/node_visitor_api.h" #include "extended/visitor_stream_api.h" #include "ltr/ltrharvest_fasta_out_stream.h" #include "ltr/ltrharvest_fasta_out_visitor.h" GtNodeStream* gt_ltrharvest_fasta_out_stream_new(GtNodeStream *in_stream, bool inner, const GtEncseq *encseq, unsigned long width, GtFile *outfp) { GtNodeVisitor *nv; nv = gt_ltrharvest_fasta_out_visitor_new(encseq, inner, width, outfp); return gt_visitor_stream_new(in_stream, nv); } genometools-1.5.1/src/ltr/ltrharvest_fasta_out_stream.h000066400000000000000000000025001211610345200234200ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTRHARVEST_FASTA_OUT_STREAM_H #define LTRHARVEST_FASTA_OUT_STREAM_H #include #include "core/encseq_api.h" #include "core/file_api.h" #include "extended/node_stream_api.h" GtNodeStream* gt_ltrharvest_fasta_out_stream_new(GtNodeStream*, bool inner, const GtEncseq *encseq, unsigned long width, GtFile *outfp); #endif genometools-1.5.1/src/ltr/ltrharvest_fasta_out_visitor.c000066400000000000000000000152301211610345200236230ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/array_api.h" #include "core/class_alloc_lock.h" #include "core/cstr_api.h" #include "core/encseq_api.h" #include "core/fasta.h" #include "core/ma.h" #include "core/parseutils.h" #include "core/range.h" #include "core/str_api.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "extended/node_visitor_api.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "extended/feature_type.h" #include "ltr/ltrharvest_fasta_out_visitor.h" struct GtLTRharvestFastaOutVisitor { const GtNodeVisitor parent_instance; GtFile* outfp; unsigned long width; bool inner; const GtEncseq *encseq; }; #define gt_ltrharvest_fasta_out_visitor_cast(GV)\ gt_node_visitor_cast(gt_ltrharvest_fasta_out_visitor_class(), GV) static int gt_ltrharvest_fasta_out_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GT_UNUSED GtError *err) { GtLTRharvestFastaOutVisitor *lv; GtFeatureNodeIterator *fni; GtFeatureNode *curnode = NULL, *leftltr = NULL, *rightltr = NULL, *ltr_retrotrans = NULL; int had_err = 0, added_ltr = 0; GtRange rng, outrng; unsigned long seqnum = GT_UNDEF_ULONG; const char *fnt; lv = gt_ltrharvest_fasta_out_visitor_cast(nv); gt_assert(lv); gt_error_check(err); /* traverse annotation subgraph and collect info */ fni = gt_feature_node_iterator_new(fn); while (!had_err && (curnode = gt_feature_node_iterator_next(fni))) { fnt = gt_feature_node_get_type(curnode); if (strcmp(fnt, gt_ft_LTR_retrotransposon) == 0) { const char *val; ltr_retrotrans = curnode; val = gt_feature_node_get_attribute(curnode, "seq_number"); if (val == NULL) { gt_error_set(err, "missing attribute \"seq_number\""); had_err = -1; } if (!had_err) { (void) gt_parse_ulong(&seqnum, val); } } if (strcmp(fnt, gt_ft_long_terminal_repeat) == 0) { switch (added_ltr) { case 0: leftltr = curnode; break; case 1: rightltr = curnode; break; default: gt_error_set(err, "invalid number of LTR annotations: more than 2"); had_err = -1; } added_ltr++; } } gt_feature_node_iterator_delete(fni); /* check for invalid annotations */ if (!had_err && (!leftltr || !rightltr)) { gt_error_set(err, "missing LTR annotations"); had_err = -1; } /* determine sequence interval to output */ if (lv->inner) { gt_assert(leftltr && rightltr); rng = gt_genome_node_get_range((GtGenomeNode*) leftltr); outrng.start = rng.end + 1; rng = gt_genome_node_get_range((GtGenomeNode*) rightltr); outrng.end = rng.start - 1; } else { gt_assert(ltr_retrotrans); rng = gt_genome_node_get_range((GtGenomeNode*) ltr_retrotrans); outrng = rng; } /* output FASTA sequences */ if (!had_err && ltr_retrotrans != NULL) { if (outrng.start < outrng.end) { char *buf; const char *seqdesc; GtStr *desc; unsigned long startpos, seqdesclen; gt_assert(seqnum != GT_UNDEF_ULONG && seqnum < gt_encseq_num_of_sequences(lv->encseq)); seqdesc = gt_encseq_description(lv->encseq, &seqdesclen, seqnum); desc = gt_str_new(); gt_str_append_cstr_nt(desc, seqdesc, seqdesclen); gt_str_append_cstr(desc, " (dbseq-nr "); gt_str_append_ulong(desc, seqnum); gt_str_append_cstr(desc, ") ["); gt_str_append_ulong(desc, outrng.start); gt_str_append_cstr(desc, ","); gt_str_append_ulong(desc, outrng.end); gt_str_append_cstr(desc, "]"); buf = gt_calloc((size_t) gt_range_length(&outrng) + 1, sizeof (char)); startpos = gt_encseq_seqstartpos(lv->encseq, seqnum); gt_encseq_extract_decoded(lv->encseq, buf, startpos + outrng.start - 1, startpos + outrng.end - 1); gt_fasta_show_entry(gt_str_get(desc), buf, gt_range_length(&outrng), lv->width, lv->outfp); gt_free(buf); gt_str_delete(desc); } else { GtRange rootrng; rootrng = gt_genome_node_get_range((GtGenomeNode*) ltr_retrotrans); gt_warning("trying to output empty%s sequence for candidate at " "%lu-%lu on sequence %lu", (lv->inner ? " inner" : ""), rootrng.start, rootrng.end, seqnum); } } return had_err; } const GtNodeVisitorClass* gt_ltrharvest_fasta_out_visitor_class(void) { static const GtNodeVisitorClass *nvc = NULL; gt_class_alloc_lock_enter(); if (!nvc) { nvc = gt_node_visitor_class_new(sizeof (GtLTRharvestFastaOutVisitor), NULL, NULL, gt_ltrharvest_fasta_out_visitor_feature_node, NULL, NULL, NULL); } gt_class_alloc_lock_leave(); return nvc; } GtNodeVisitor* gt_ltrharvest_fasta_out_visitor_new(const GtEncseq *encseq, bool inner, unsigned long width, GtFile *outfp) { GtNodeVisitor *nv; GtLTRharvestFastaOutVisitor *lv; gt_assert(encseq && outfp); nv = gt_node_visitor_create(gt_ltrharvest_fasta_out_visitor_class()); lv = gt_ltrharvest_fasta_out_visitor_cast(nv); gt_assert(lv); lv->inner = inner; lv->outfp = outfp; lv->width = width; lv->encseq = encseq; return nv; } genometools-1.5.1/src/ltr/ltrharvest_fasta_out_visitor.h000066400000000000000000000031171211610345200236310ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTRHARVEST_FASTA_OUT_VISITOR_H #define LTRHARVEST_FASTA_OUT_VISITOR_H #include "core/encseq_api.h" #include "core/file.h" #include "extended/node_visitor.h" /* Implements the interface. */ typedef struct GtLTRharvestFastaOutVisitor GtLTRharvestFastaOutVisitor; const GtNodeVisitorClass* gt_ltrharvest_fasta_out_visitor_class(void); GtNodeVisitor* gt_ltrharvest_fasta_out_visitor_new(const GtEncseq *encseq, bool inner, unsigned long width, GtFile *outfp); #endif genometools-1.5.1/src/ltr/ltrharvest_stream.c000066400000000000000000001655361211610345200213710ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Sascha Steinbiss Copyright (c) 2007 David Ellinghaus Copyright (c) 2007-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include "core/array_api.h" #include "core/arraydef.h" #include "core/assert_api.h" #include "core/class_alloc_lock.h" #include "core/encseq_api.h" #include "core/error_api.h" #include "core/log.h" #include "core/mathsupport.h" #include "core/minmax.h" #include "core/str_api.h" #include "core/types_api.h" #include "core/undef_api.h" #include "extended/feature_type.h" #include "extended/genome_node.h" #include "extended/node_stream_api.h" #include "match/esa-seqread.h" #include "match/esa-maxpairs.h" #include "match/esa-mmsearch.h" #include "match/greedyedist.h" #include "match/xdrop.h" #include "ltr/ltrharvest_stream.h" #define GT_LTRHARVEST_NAME "LTRharvest" typedef struct { unsigned long pos1, /* first position of maximal repeat (seed) */ offset, /* second position = pos1 + offset */ len, /* length of maximal repeat */ contignumber; /* number of contig for this repeat */ } Repeat; GT_DECLAREARRAYSTRUCT(Repeat); /* The datatype RepeatInfo stores all maximal repeats (seeds) and */ /* information about the length and distance constraints. */ typedef struct { GtArrayRepeat repeats; /* array of maximal repeats (seeds) */ unsigned long lmin, /* minimum allowed length of a LTR */ lmax, /* maximum allowed length of a LTR */ dmin, /* minimum distance between LTRs */ dmax; /* maximum distance between LTRs, this values is determined as the minimum of the corresponding option value and the maximum length of any sequence in the encseq */ GtRange ltrsearchseqrange; /* if start and end are 0, then no range */ } RepeatInfo; /* The datatype SubRepeatInfo stores information about the maximal repeats */ /* for the TSD detection. */ typedef struct { GtArrayRepeat repeats; /* array of maximal repeats for TSDs */ unsigned long tsd_lmin, /* minimal length of TSD */ tsd_lmax, /* maximal length of TSD */ offset1, /* offset1 for absolute position 1 in sequence */ offset2; /* offset2 for absolute position 2 in sequence */ /* pos1 < pos2 */ } SubRepeatInfo; typedef struct { unsigned long contignumber, /* ordinal number of sequence in encseq */ leftLTR_5, /* 5' boundary of left LTR */ leftLTR_3, /* 3' boundary of left LTR */ rightLTR_5, /* 5' boundary of right LTR */ rightLTR_3, /* 3' boundary of right LTR */ lenleftTSD, lenrightTSD; bool tsd, /* If true, then TSDs exist. */ motif_near_tsd, /* If true, then motif near the TSD exists. */ motif_far_tsd, /* If true, then motif at the inner borders of LTRs exist. */ lengthdistconstraint, /* If true, length and distance constraints are satisfied */ skipped; /* if skipped then because of an overlap with a higher similarity prediction or because of "overlap=no" option */ double similarity; /* similarity value of LTRs */ } LTRboundaries; GT_DECLAREARRAYSTRUCT(LTRboundaries); typedef enum { GT_LTRHARVEST_STREAM_STATE_START, GT_LTRHARVEST_STREAM_STATE_REGIONS, GT_LTRHARVEST_STREAM_STATE_COMMENTS, GT_LTRHARVEST_STREAM_STATE_FEATURES } GtLTRharvestStreamState; struct GtLTRharvestStream { const GtNodeStream parent_instance; RepeatInfo repeatinfo; GtStr *str_indexname; unsigned long minseedlength; double similaritythreshold; int xdropbelowscore; GtXdropArbitraryscores arbitscores; unsigned int allowedmismatches; GtLTRFourCharMotif *motif; unsigned long offset; unsigned int minlengthTSD, maxlengthTSD; unsigned long numofboundaries; unsigned long vicinityforcorrectboundaries; unsigned long prevseqnum; const LTRboundaries **bdptrtab; GtArrayLTRboundaries arrayLTRboundaries; const GtEncseq *encseq; Sequentialsuffixarrayreader *ssar; bool verbosemode; bool nooverlaps; bool bestoverlaps; unsigned long cur_elem_index; GtLTRharvestStreamState state; }; #define gt_ltrharvest_stream_cast(GS)\ gt_node_stream_cast(gt_ltrharvest_stream_class(), GS); static int bdptrcompare(const void *a, const void *b) { const LTRboundaries **bda, **bdb; bda = (const LTRboundaries **) a; bdb = (const LTRboundaries **) b; if ((*bda)->contignumber < (*bdb)->contignumber) { return -1; } if ((*bda)->contignumber > (*bdb)->contignumber) { return 1; } if ((*bda)->leftLTR_5 < (*bdb)->leftLTR_5) { return -1; } if ((*bda)->leftLTR_5 > (*bdb)->leftLTR_5) { return 1; } return 0; } static int gt_simpleexactselfmatchstore(void *info, const GtEncseq *encseq, unsigned long len, unsigned long pos1, unsigned long pos2, GT_UNUSED GtError *err) { unsigned long distance; RepeatInfo *repeatinfo = (RepeatInfo *) info; gt_error_check(err); if (pos1 > pos2) { unsigned long tmp = pos1; pos1 = pos2; pos2 = tmp; } if (repeatinfo->ltrsearchseqrange.start > 0 || repeatinfo->ltrsearchseqrange.end > 0) { if (pos1 < repeatinfo->ltrsearchseqrange.start || pos2 + len - 1 > repeatinfo->ltrsearchseqrange.end) { return 0; } } distance = pos2 - pos1; /*test maximal length of candidate pair and distance constraints*/ if (len <= repeatinfo->lmax && repeatinfo->dmin <= distance && distance <= repeatinfo->dmax) { const unsigned long seqnum1 = gt_encseq_seqnum(encseq,pos1); const unsigned long seqnum2 = gt_encseq_seqnum(encseq,pos2); if (seqnum1 == seqnum2) { Repeat *nextfreerepeatptr; GT_GETNEXTFREEINARRAY(nextfreerepeatptr,&repeatinfo->repeats,Repeat,32); nextfreerepeatptr->pos1 = pos1; nextfreerepeatptr->offset = distance; nextfreerepeatptr->len = len; nextfreerepeatptr->contignumber = seqnum1; } } return 0; } static int gt_subsimpleexactselfmatchstore(void *info, GT_UNUSED const GtEncseq *encseq, const GtQuerymatch *querymatch, GT_UNUSED const GtUchar *query, GT_UNUSED unsigned long query_totallength, GT_UNUSED GtError *err) { Repeat *nextfreerepeatptr; SubRepeatInfo *sri = (SubRepeatInfo *) info; GT_GETNEXTFREEINARRAY (nextfreerepeatptr, &sri->repeats, Repeat, 10); nextfreerepeatptr->pos1 = sri->offset1 + gt_querymatch_dbstart(querymatch); nextfreerepeatptr->offset = sri->offset2 + gt_querymatch_querystart(querymatch) - (sri->offset1 + gt_querymatch_dbstart(querymatch)); nextfreerepeatptr->len = gt_querymatch_querylen(querymatch); return 0; } /* XXX: better directly sort the ArrayLTRboundaries */ static const LTRboundaries **sortedltrboundaries(unsigned long *numofboundaries, const GtArrayLTRboundaries *ltr) { unsigned long countboundaries = 0, nextfill = 0; const LTRboundaries *bd, **bdptrtab; for (bd = ltr->spaceLTRboundaries; bd < ltr->spaceLTRboundaries + ltr->nextfreeLTRboundaries; bd++) { if (!bd->skipped) { countboundaries++; } } bdptrtab = gt_malloc(sizeof (LTRboundaries *) * countboundaries); nextfill = 0; for (bd = ltr->spaceLTRboundaries; bd < ltr->spaceLTRboundaries + ltr->nextfreeLTRboundaries; bd++) { if (!bd->skipped) { bdptrtab[nextfill++] = bd; } } qsort(bdptrtab,(size_t) countboundaries, sizeof (LTRboundaries *), bdptrcompare); *numofboundaries = countboundaries; return bdptrtab; } typedef struct { unsigned int left, right; } LTRMotifmismatches; /* The following function searches for TSDs and/or a specified palindromic motif at the 5'-border of left LTR and 3'-border of right LTR. Thereby, all maximal repeats from the vicinity are processed one after another to find the TSD with the minimum deviation with regard to the boundary position from the x-drop alignment. If also a motif is searched, a simple motif check at the boundaries of the TSDs is performed. */ static void searchforbestTSDandormotifatborders(const SubRepeatInfo *subrepeatinfo, const GtLTRharvestStream *lo, LTRboundaries *boundaries, LTRMotifmismatches *mismatches) { unsigned long motifpos1, motifpos2, back, forward, oldleftLTR_5 = boundaries->leftLTR_5, oldrightLTR_3 = boundaries->rightLTR_3, difffromoldboundary1 = 0, difffromoldboundary2 = 0; LTRMotifmismatches tmp_mm; unsigned int hitcounter = 0; Repeat *rep; if (subrepeatinfo->repeats.nextfreeRepeat > 0) { boundaries->tsd = true; } boundaries->motif_near_tsd = false; for (rep = subrepeatinfo->repeats.spaceRepeat; rep < subrepeatinfo->repeats.spaceRepeat + subrepeatinfo->repeats.nextfreeRepeat; rep++) { /* motifpos1 is the first position after the left repeat */ motifpos1 = rep->pos1 + rep->len; /* motifpos2 is two positions before the right repeat */ motifpos2 = rep->pos1 + rep->offset - 2; for (back = 0; back < rep->len - subrepeatinfo->tsd_lmin + 1; back++) { for (forward = 0; forward < rep->len - subrepeatinfo->tsd_lmin + 1 - back; forward++) { tmp_mm.left = tmp_mm.right = 0; if (gt_encseq_get_encoded_char(/* Random access */ lo->encseq, motifpos1 - back, GT_READMODE_FORWARD) != lo->motif->firstleft) { tmp_mm.left++; } if (gt_encseq_get_encoded_char(/* Random access */ lo->encseq, motifpos1 + 1 - back, GT_READMODE_FORWARD) != lo->motif->secondleft) { tmp_mm.left++; } if (gt_encseq_get_encoded_char(/* Random access */ lo->encseq, motifpos2 + forward, GT_READMODE_FORWARD) != lo->motif->firstright) { tmp_mm.right++; } if (gt_encseq_get_encoded_char(/* Random access */ lo->encseq, motifpos2 + 1 + forward, GT_READMODE_FORWARD) != lo->motif->secondright) { tmp_mm.right++; } if (tmp_mm.left <= lo->motif->allowedmismatches && tmp_mm.right <= lo->motif->allowedmismatches) { const unsigned long tsd_len = rep->len - back - forward; /* TSD length not too big */ if (tsd_len <= subrepeatinfo->tsd_lmax) { if (!boundaries->motif_near_tsd) { unsigned long max, min; /* save number of mismatches */ *mismatches = tmp_mm; /* adjust boundaries */ boundaries->motif_near_tsd = true; boundaries->leftLTR_5 = motifpos1 - back; boundaries->rightLTR_3 = motifpos2 + 1 + forward; /* store TSD length */ boundaries->lenleftTSD = boundaries->lenrightTSD = tsd_len; max = MAX(oldleftLTR_5, boundaries->leftLTR_5); min = MIN(oldleftLTR_5, boundaries->leftLTR_5); difffromoldboundary1 = max - min; max = MAX(oldrightLTR_3, boundaries->rightLTR_3); min = MIN(oldrightLTR_3, boundaries->rightLTR_3); difffromoldboundary2 = max - min; hitcounter++; } else { unsigned long max, min, difffromnewboundary1, difffromnewboundary2; /* test if hit is nearer to old boundaries than previous hit */ max = MAX(oldleftLTR_5, motifpos1 - back); min = MIN(oldleftLTR_5, motifpos1 - back); difffromnewboundary1 = max - min; max = MAX(oldrightLTR_3, motifpos2 + 1 + forward); min = MIN(oldrightLTR_3, motifpos2 + 1 + forward); difffromnewboundary2 = max - min; if (difffromnewboundary1 + difffromnewboundary2 < difffromoldboundary1 + difffromoldboundary2) { /* save number of mismatches */ *mismatches = tmp_mm; /* adjust boundaries */ boundaries->leftLTR_5 = motifpos1 - back; boundaries->rightLTR_3 = motifpos2 + 1 + forward; /* store TSD length */ boundaries->lenleftTSD = boundaries->lenrightTSD = tsd_len; difffromoldboundary1 = difffromnewboundary1; difffromoldboundary2 = difffromnewboundary2; hitcounter++; } } } } } } } } /* The following function searches only for a specified palindromic motif at the 5'-border of left LTR and 3'-border of right LTR. */ static void searchformotifonlyborders(const GtLTRharvestStream *lo, LTRboundaries *boundaries, unsigned long startleftLTR, unsigned long endleftLTR, unsigned long startrightLTR, unsigned long endrightLTR, LTRMotifmismatches *motifmismatches) { bool motif1 = false, motif2 = false; LTRMotifmismatches tmp_mm; unsigned int motifmismatches_frombestmatch = 0; unsigned long idx, oldleftLTR_5 = boundaries->leftLTR_5, oldrightLTR_3 = boundaries->rightLTR_3, difffromoldboundary = 0; /**** search for left motif around leftLTR_5 ****/ for (idx = startleftLTR; idx < endleftLTR; idx++) { tmp_mm.left = 0; if (gt_encseq_get_encoded_char(/* XXX */ lo->encseq, idx, GT_READMODE_FORWARD) != lo->motif->firstleft) { tmp_mm.left++; } if (gt_encseq_get_encoded_char(/* XXX */ lo->encseq, idx+1, GT_READMODE_FORWARD) != lo->motif->secondleft) { tmp_mm.left++; } if (tmp_mm.left + motifmismatches->left <= lo->motif->allowedmismatches) { /* first hit */ if (!motif1) { unsigned long max, min; motifmismatches_frombestmatch = tmp_mm.left; boundaries->leftLTR_5 = idx; motif1 = true; max = MAX(oldleftLTR_5, boundaries->leftLTR_5); min = MIN(oldleftLTR_5, boundaries->leftLTR_5); difffromoldboundary = max - min; } else /* next hit */ { unsigned long maxval, minval, difffromnewboundary; /* test if hit is nearer to old boundaries than previous hit */ maxval = MAX(oldleftLTR_5, idx); minval = MIN(oldleftLTR_5, idx); difffromnewboundary = maxval - minval; if (difffromnewboundary < difffromoldboundary) { motifmismatches_frombestmatch = tmp_mm.left; boundaries->leftLTR_5 = idx; difffromoldboundary = difffromnewboundary; } } } } motifmismatches->left += motifmismatches_frombestmatch; motifmismatches_frombestmatch = 0; for (idx = startrightLTR + 1; idx <= endrightLTR; idx++) { tmp_mm.right = 0; if (gt_encseq_get_encoded_char(/* XXX */ lo->encseq, idx, GT_READMODE_FORWARD) != lo->motif->secondright) { tmp_mm.right++; } if (gt_encseq_get_encoded_char(/* XXX */ lo->encseq,idx-1, GT_READMODE_FORWARD) != lo->motif->firstright) { tmp_mm.right++; } if (tmp_mm.right + motifmismatches->right <= lo->motif->allowedmismatches) { /* first hit */ if (!motif2) { unsigned long max, min; motifmismatches_frombestmatch = tmp_mm.right; boundaries->rightLTR_3 = idx; motif2 = true; max = MAX(oldrightLTR_3, boundaries->rightLTR_3); min = MIN(oldrightLTR_3, boundaries->rightLTR_3); difffromoldboundary = max - min; } else /* next hit */ { unsigned long maxval, minval, difffromnewboundary; /* test if hit is nearer to old boundaries than previous hit */ maxval = MAX(oldrightLTR_3, idx); minval = MIN(oldrightLTR_3, idx); difffromnewboundary = maxval - minval; if (difffromnewboundary < difffromoldboundary) { motifmismatches_frombestmatch = tmp_mm.right; boundaries->rightLTR_3 = idx; difffromoldboundary = difffromnewboundary; } } } } motifmismatches->right += motifmismatches_frombestmatch; if (motif1 && motif2) { boundaries->motif_near_tsd = true; } else { boundaries->motif_near_tsd = false; } } /* The following function searches for a specified palindromic motif at the 3'-border of left LTR and the 5'-border of right LTR. */ static void searchformotifonlyinside(const GtLTRharvestStream *lo, LTRboundaries *boundaries, LTRMotifmismatches *motifmismatches) { bool motif1 = false, motif2 = false; unsigned long startleftLTR, endleftLTR, startrightLTR, endrightLTR, oldleftLTR_3 = boundaries->leftLTR_3, oldrightLTR_5 = boundaries->rightLTR_5, difffromoldboundary = 0, idx; LTRMotifmismatches tmp_mm; unsigned int motifmismatches_frombestmatch = 0; /** vicinity of 3'-border of left LTR **/ /* do not align over 5'border of left LTR, in case of need decrease alignment length */ if ((boundaries->leftLTR_3 < lo->vicinityforcorrectboundaries) || (startleftLTR = boundaries->leftLTR_3 - lo->vicinityforcorrectboundaries + 1) < boundaries->leftLTR_5 + 2) { startleftLTR = boundaries->leftLTR_5 + 2; } /* do not align over 5'-border of right LTR */ if ((endleftLTR = boundaries->leftLTR_3 + lo->vicinityforcorrectboundaries - 1) > boundaries->rightLTR_5 - 1) { endleftLTR = boundaries->rightLTR_5 - 1; } /** vicinity of 5'-border of right LTR **/ /* do not align over 3'-border of left LTR */ if ((startrightLTR = boundaries->rightLTR_5 - lo->vicinityforcorrectboundaries + 1) < boundaries->leftLTR_3 + 1) { startrightLTR = boundaries->leftLTR_3 + 1; } /* do not align over 3'border of right LTR */ if ((endrightLTR = boundaries->rightLTR_5 + lo->vicinityforcorrectboundaries - 1) > boundaries->rightLTR_3 - 2) { endrightLTR = boundaries->rightLTR_3 - 2; } /**** search for right motif around leftLTR_3 ****/ for (idx = startleftLTR + 1; idx <= endleftLTR; idx++) { tmp_mm.left = 0; if (gt_encseq_get_encoded_char(/* XXX */ lo->encseq, idx, GT_READMODE_FORWARD) != lo->motif->secondright) { tmp_mm.left++; } if (gt_encseq_get_encoded_char(/* XXX */ lo->encseq, idx-1, GT_READMODE_FORWARD) != lo->motif->firstright) { tmp_mm.left++; } if (tmp_mm.left + motifmismatches->left <= lo->motif->allowedmismatches) { /* first hit */ if (!motif1) { unsigned long maxval, minval; motifmismatches_frombestmatch = tmp_mm.left; boundaries->leftLTR_3 = idx; motif1 = true; maxval = MAX(oldleftLTR_3, boundaries->leftLTR_3); minval = MIN(oldleftLTR_3, boundaries->leftLTR_3); difffromoldboundary = maxval - minval; } else /* next hit */ { unsigned long maxval, minval, difffromnewboundary; /* test if hit is nearer to old boundaries than previous hit */ maxval = MAX(oldleftLTR_3, idx); minval = MIN(oldleftLTR_3, idx); difffromnewboundary = maxval - minval; if (difffromnewboundary < difffromoldboundary) { motifmismatches_frombestmatch = tmp_mm.left; boundaries->leftLTR_3 = idx; difffromoldboundary = difffromnewboundary; } } } } motifmismatches->left += motifmismatches_frombestmatch; motifmismatches_frombestmatch = 0; /**** search for left motif around rightLTR_5 ****/ for (idx = startrightLTR ; idx < endrightLTR; idx++) { tmp_mm.right = 0; if (gt_encseq_get_encoded_char(/* XXX */ lo->encseq, idx, GT_READMODE_FORWARD) != lo->motif->firstleft) { tmp_mm.right++; } if (gt_encseq_get_encoded_char(/* XXX */ lo->encseq, idx+1, GT_READMODE_FORWARD) != lo->motif->secondleft) { tmp_mm.right++; } if (tmp_mm.right + motifmismatches->right <= lo->motif->allowedmismatches) { /* first hit */ if (!motif2) { unsigned long maxval, minval; motifmismatches_frombestmatch = tmp_mm.right; boundaries->rightLTR_5 = idx; motif2 = true; maxval = MAX(oldrightLTR_5, boundaries->rightLTR_5); minval = MIN(oldrightLTR_5, boundaries->rightLTR_5); difffromoldboundary = maxval - minval; } else /* next hit */ { unsigned long maxval, minval, difffromnewboundary; /* test if hit is nearer to old boundaries than previous hit */ maxval = MAX(oldrightLTR_5, idx); minval = MIN(oldrightLTR_5, idx); difffromnewboundary = maxval - minval; if (difffromnewboundary < difffromoldboundary) { motifmismatches_frombestmatch = tmp_mm.right; boundaries->rightLTR_5 = idx; difffromoldboundary = difffromnewboundary; } } } } motifmismatches->right += motifmismatches_frombestmatch; if (motif1 && motif2) { boundaries->motif_far_tsd = true; } else { boundaries->motif_far_tsd = false; } } /* The following function searches for TSDs and/or a specified palindromic motif at the 5'-border of left LTR and 3'-border of right LTR. */ static int searchforTSDandorMotifoutside( const GtLTRharvestStream *lo, LTRboundaries *boundaries, LTRMotifmismatches *motifmismatches, GtError *err) { unsigned long startleftLTR, endleftLTR, startrightLTR, endrightLTR, leftlen, rightlen, sequenceendpos, seqstartpos, seqlength; SubRepeatInfo subrepeatinfo; bool haserr = false; gt_error_check(err); /* check border cases */ /* vicinity of 5'-border of left LTR */ seqstartpos = gt_encseq_seqstartpos(lo->encseq, boundaries->contignumber); seqlength = gt_encseq_seqlength(lo->encseq, boundaries->contignumber); if (boundaries->contignumber == 0) { /* do not align over left sequence boundary, in case of need decrease alignment length */ if (boundaries->leftLTR_5 < lo->vicinityforcorrectboundaries) { startleftLTR = seqstartpos; } else { startleftLTR = boundaries->leftLTR_5 - lo->vicinityforcorrectboundaries; } } else { /* do not align over left separator symbol in case of need decrease alignment length */ if (boundaries->leftLTR_5 < lo->vicinityforcorrectboundaries) { startleftLTR = seqstartpos; } else { startleftLTR = boundaries->leftLTR_5 - lo->vicinityforcorrectboundaries; if (startleftLTR < seqstartpos && boundaries->leftLTR_5 >= seqstartpos) { startleftLTR = seqstartpos; } } } /* do not align over 3'-border of left LTR */ endleftLTR = boundaries->leftLTR_5 + lo->vicinityforcorrectboundaries; if (endleftLTR > boundaries->leftLTR_3 - 2) /* -2 because of possible motif */ { endleftLTR = boundaries->leftLTR_3 - 2; } leftlen = endleftLTR - startleftLTR + 1; /* vicinity of 3'-border of right LTR do not align over 5'border of right LTR */ startrightLTR = boundaries->rightLTR_3 - lo->vicinityforcorrectboundaries; if (startrightLTR < boundaries->rightLTR_5 + 2) /* +2 for possible motif */ { startrightLTR = boundaries->rightLTR_5 + 2; } sequenceendpos = seqstartpos + seqlength - 1; /* do not align into next sequence in case of need decrease alignment length */ endrightLTR = boundaries->rightLTR_3 + lo->vicinityforcorrectboundaries; if (endrightLTR > sequenceendpos && boundaries->rightLTR_3 <= sequenceendpos) { endrightLTR = sequenceendpos; } rightlen = endrightLTR - startrightLTR + 1; /* now, search for correct boundaries */ /* search for TSDs and/or motif */ if (lo->minlengthTSD > 1U) { GtUchar *dbseq = gt_malloc(sizeof (*dbseq) * leftlen), *query = gt_malloc(sizeof (*query) * rightlen); gt_encseq_extract_encoded(lo->encseq,dbseq,startleftLTR,endleftLTR); gt_encseq_extract_encoded(lo->encseq,query,startrightLTR,endrightLTR); GT_INITARRAY(&subrepeatinfo.repeats, Repeat); subrepeatinfo.tsd_lmin = (unsigned long) lo->minlengthTSD; subrepeatinfo.tsd_lmax = (unsigned long) lo->maxlengthTSD; gt_assert(startleftLTR < startrightLTR); subrepeatinfo.offset1 = startleftLTR; subrepeatinfo.offset2 = startrightLTR; if (gt_sarrquerysubstringmatch(dbseq, leftlen, query, rightlen, lo->minlengthTSD, gt_encseq_alphabet(lo->encseq), gt_subsimpleexactselfmatchstore, &subrepeatinfo, NULL, err) != 0) { haserr = true; } gt_free(dbseq); gt_free(query); if (!haserr) { searchforbestTSDandormotifatborders(&subrepeatinfo, lo, boundaries, motifmismatches); } GT_FREEARRAY (&subrepeatinfo.repeats, Repeat); } else /* no search for TSDs, search for motif only */ { searchformotifonlyborders(lo, boundaries, startleftLTR, endleftLTR, startrightLTR, endrightLTR, motifmismatches); } return haserr ? -1 : 0; } /* The following function searches for TSD and/or a specified palindromic motif at the borders of left LTR and the right LTR, respectively. */ static int gt_findcorrectboundaries(const GtLTRharvestStream *lo, LTRboundaries *boundaries, GtError *err) { LTRMotifmismatches motifmismatches; gt_error_check(err); gt_log_log("searching for correct boundaries in vicinity...\n"); /* first: 5'-border of left LTR and 3'-border of right LTR */ motifmismatches.left = motifmismatches.right = 0; if (searchforTSDandorMotifoutside(lo, boundaries, &motifmismatches, err) != 0) { return -1; } /* second: 3'-border of left LTR and 5'-border of right LTR */ if (lo->motif->allowedmismatches < 4U) { gt_log_log("second: searching for motif only around 3'border of left LTR " "and 5'-border of right LTR...\n"); searchformotifonlyinside(lo,boundaries,&motifmismatches); } return 0; } static bool checklengthanddistanceconstraints(LTRboundaries *boundaries, const RepeatInfo *repeatinfo) { unsigned long ulen, vlen, dist_between_LTRs; ulen = boundaries->leftLTR_3 - boundaries->leftLTR_5 + 1; vlen = boundaries->rightLTR_3 - boundaries->rightLTR_5 + 1; dist_between_LTRs = boundaries->rightLTR_5 - boundaries->leftLTR_5; if (ulen > repeatinfo->lmax || vlen > repeatinfo->lmax || ulen < repeatinfo->lmin || vlen < repeatinfo->lmin || dist_between_LTRs > repeatinfo->dmax || dist_between_LTRs < repeatinfo->dmin || boundaries->leftLTR_3 >= boundaries->rightLTR_5) { boundaries->lengthdistconstraint = false; boundaries->similarity = 0.0; return false; } else { boundaries->lengthdistconstraint = true; return true; } } static void adjustboundariesfromXdropextension(GtXdropbest xdropbest_left, GtXdropbest xdropbest_right, unsigned long seed1_startpos, unsigned long seed2_startpos, unsigned long seed1_endpos, unsigned long seed2_endpos, LTRboundaries *boundaries) { /* left alignment */ boundaries->leftLTR_5 = seed1_startpos - xdropbest_left.ivalue; boundaries->rightLTR_5 = seed2_startpos - xdropbest_left.jvalue; /* right alignment */ boundaries->leftLTR_3 = seed1_endpos + xdropbest_right.ivalue; boundaries->rightLTR_3 = seed2_endpos + xdropbest_right.jvalue; } /* The following function applies the filter algorithms one after another to all candidate pairs. */ static int gt_searchforLTRs(GtLTRharvestStream *lo, GtArrayLTRboundaries *arrayLTRboundaries, GtError *err) { GtXdropresources *xdropresources; GtXdropbest xdropbest_left, xdropbest_right; #undef GT_GREEDY_BUFFER #ifdef GT_GREEDY_BUFFER unsigned long maxulen = 0, maxvlen = 0; GtUchar *useq = NULL, *vseq = NULL; #endif GtSeqabstract *sa_useq = gt_seqabstract_new_empty(), *sa_vseq = gt_seqabstract_new_empty(); unsigned long edist; Repeat *repeatptr; LTRboundaries *boundaries; GtFrontResource *frontresource = gt_frontresource_new(100UL); bool haserr = false; gt_error_check(err); xdropresources = gt_xdrop_resources_new(&lo->arbitscores); for (repeatptr = lo->repeatinfo.repeats.spaceRepeat; repeatptr < lo->repeatinfo.repeats.spaceRepeat + lo->repeatinfo.repeats.nextfreeRepeat; repeatptr++) { unsigned long alilen, ulen, vlen, seqend, seqstart = gt_encseq_seqstartpos(lo->encseq, repeatptr->contignumber); seqend = seqstart + gt_encseq_seqlength(lo->encseq, repeatptr->contignumber); gt_assert(lo->repeatinfo.lmax >= repeatptr->len); alilen = lo->repeatinfo.lmax - repeatptr->len; /**** left (reverse) xdrop alignment ****/ if (repeatptr->pos1 > 0) { gt_assert(seqstart <= repeatptr->pos1); if (alilen <= repeatptr->pos1 - seqstart) { gt_seqabstract_reinit_encseq(sa_useq,lo->encseq,alilen,0); gt_seqabstract_reinit_encseq(sa_vseq,lo->encseq,alilen,0); } else { gt_seqabstract_reinit_encseq(sa_useq,lo->encseq, repeatptr->pos1 - seqstart,0); gt_seqabstract_reinit_encseq(sa_vseq,lo->encseq, repeatptr->pos1 + repeatptr->offset - seqstart,0); } gt_evalxdroparbitscoresextend(false, &xdropbest_left, xdropresources, sa_useq, sa_vseq, repeatptr->pos1, repeatptr->pos1 + repeatptr->offset, (GtXdropscore) lo->xdropbelowscore); } else { xdropbest_left.ivalue = 0; xdropbest_left.jvalue = 0; xdropbest_left.score = 0; } if (repeatptr->pos1 + repeatptr->len > 0) { gt_assert(seqend >= repeatptr->pos1 + repeatptr->offset + repeatptr->len); if (alilen <= seqend - (repeatptr->pos1 + repeatptr->offset + repeatptr->len)) { gt_seqabstract_reinit_encseq(sa_useq,lo->encseq,alilen,0); gt_seqabstract_reinit_encseq(sa_vseq,lo->encseq,alilen,0); } else { gt_seqabstract_reinit_encseq(sa_useq,lo->encseq, seqend - (repeatptr->pos1+repeatptr->len), 0); gt_seqabstract_reinit_encseq(sa_vseq,lo->encseq, seqend - (repeatptr->pos1 + repeatptr->offset + repeatptr->len),0); } gt_evalxdroparbitscoresextend(true, &xdropbest_right, xdropresources, sa_useq, sa_vseq, repeatptr->pos1 + repeatptr->len, repeatptr->pos1 + repeatptr->offset + repeatptr->len, (GtXdropscore) lo->xdropbelowscore); } else { xdropbest_right.ivalue = 0; xdropbest_right.jvalue = 0; xdropbest_right.score = 0; } GT_GETNEXTFREEINARRAY(boundaries,arrayLTRboundaries,LTRboundaries,5); boundaries->contignumber = repeatptr->contignumber; boundaries->leftLTR_5 = 0; boundaries->leftLTR_3 = 0; boundaries->rightLTR_5 = 0; boundaries->rightLTR_3 = 0; boundaries->lenleftTSD = 0; boundaries->lenrightTSD = 0; boundaries->tsd = false; boundaries->motif_near_tsd = false; boundaries->motif_far_tsd = false; boundaries->skipped = false; boundaries->similarity = 0.0; /* store new boundaries-positions in boundaries */ adjustboundariesfromXdropextension( xdropbest_left, xdropbest_right, repeatptr->pos1, /*seed1 startpos*/ repeatptr->pos1 + repeatptr->offset, /*seed2 startpos*/ repeatptr->pos1 + repeatptr->len - 1, /*seed1 endpos*/ repeatptr->pos1 + repeatptr->offset + repeatptr->len - 1, /*seed2 endpos*/ boundaries); /* if search for motif and/or TSD */ if (lo->motif->allowedmismatches < 4U || lo->minlengthTSD > 1U) { if (gt_findcorrectboundaries(lo, boundaries, err) != 0) { haserr = true; break; } /* if search for TSDs and (not) motif */ if (boundaries->tsd && (lo->motif->allowedmismatches >= 4U || (boundaries->motif_near_tsd && boundaries->motif_far_tsd))) { /* predicted as full LTR-pair, keep it */ } else { /* if search for motif only (and not TSD) */ if (lo->minlengthTSD <= 1U && boundaries->motif_near_tsd && boundaries->motif_far_tsd) { /* predicted as full LTR-pair, keep it */ } else { /* delete this LTR-pair candidate */ arrayLTRboundaries->nextfreeLTRboundaries--; continue; } } } /* check length and distance constraints again */ if (!checklengthanddistanceconstraints(boundaries, &lo->repeatinfo)) { /* delete this LTR-pair candidate */ arrayLTRboundaries->nextfreeLTRboundaries--; continue; } /* check similarity from candidate pair copy LTR sequences for greedyunitedist function */ ulen = boundaries->leftLTR_3 - boundaries->leftLTR_5 + 1; vlen = boundaries->rightLTR_3 - boundaries->rightLTR_5 + 1; #ifdef GT_GREEDY_BUFFER if (ulen > maxulen) { maxulen = ulen; useq = gt_realloc(useq, sizeof (*useq) * maxulen); } if (vlen > maxvlen) { maxvlen = vlen; vseq = gt_realloc(vseq, sizeof (*vseq) * maxvlen); } gt_encseq_extract_encoded(lo->encseq, useq, boundaries->leftLTR_5, boundaries->leftLTR_3); gt_encseq_extract_encoded(lo->encseq, vseq, boundaries->rightLTR_5, boundaries->rightLTR_3); gt_seqabstract_reinit_ptr(sa_useq,useq,ulen,0); gt_seqabstract_reinit_ptr(sa_vseq,vseq,vlen,0); #else gt_seqabstract_reinit_encseq(sa_useq,lo->encseq,ulen,boundaries->leftLTR_5); gt_seqabstract_reinit_encseq(sa_vseq,lo->encseq,vlen, boundaries->rightLTR_5); #endif edist = greedyunitedist(frontresource,sa_useq,sa_vseq); /* determine similarity */ boundaries->similarity = 100.0 * (1.0 - (double) edist/MAX(ulen,vlen)); if (gt_double_smaller_double(boundaries->similarity, lo->similaritythreshold)) { /* delete this LTR-pair candidate */ arrayLTRboundaries->nextfreeLTRboundaries--; } } #ifdef GT_GREEDY_BUFFER FREESPACE(useq); FREESPACE(vseq); #endif gt_xdrop_resources_delete(xdropresources); gt_seqabstract_delete(sa_useq); gt_seqabstract_delete(sa_vseq); gt_frontresource_delete(frontresource); return haserr ? -1 : 0; } /* The following function removes exact duplicates from the array of predicted LTR elements. Exact duplicates occur when different seeds are extended to same boundary coordinates. */ static void gt_removeduplicates(GtArrayLTRboundaries *arrayLTRboundaries) { unsigned long i, j; unsigned long startpos_i, endpos_i, startpos_j, endpos_j; LTRboundaries *boundaries_i, *boundaries_j; for (i = 0; i < arrayLTRboundaries->nextfreeLTRboundaries; i++) { boundaries_i = &(arrayLTRboundaries->spaceLTRboundaries[i]); if (boundaries_i->skipped) { continue; } startpos_i = boundaries_i->leftLTR_5; endpos_i = boundaries_i->rightLTR_3; for (j = i + 1; j < arrayLTRboundaries->nextfreeLTRboundaries; j++) { boundaries_j = &(arrayLTRboundaries->spaceLTRboundaries[j]); if (boundaries_j->skipped) { continue; } startpos_j = boundaries_j->leftLTR_5; endpos_j = boundaries_j->rightLTR_3; if (startpos_i == startpos_j && endpos_i == endpos_j) { boundaries_j->skipped = true; } } } } /* The following function removes overlaps and deletes the prediction with a lower similarity value. If "nooverlapallowed" is set, then all overlapping predictions are deleted completely. */ static void gt_removeoverlapswithlowersimilarity( GtArrayLTRboundaries *arrayLTRboundaries, bool nooverlapallowed) { unsigned long i, j; unsigned long startpos_i, endpos_i, startpos_j, endpos_j; LTRboundaries *boundaries_i, *boundaries_j; for (i = 0; i < arrayLTRboundaries->nextfreeLTRboundaries; i++) { boundaries_i = &(arrayLTRboundaries->spaceLTRboundaries[i]); if (boundaries_i->skipped) { continue; } startpos_i = boundaries_i->leftLTR_5; endpos_i = boundaries_i->rightLTR_3; for (j = i + 1; j < arrayLTRboundaries->nextfreeLTRboundaries; j++) { boundaries_j = &(arrayLTRboundaries->spaceLTRboundaries[j]); if (boundaries_j->skipped) { continue; } startpos_j = boundaries_j->leftLTR_5; endpos_j = boundaries_j->rightLTR_3; /* if overlap */ if (!((endpos_i < startpos_j) || (endpos_j < startpos_i))) { if (nooverlapallowed) { /* All predictions in a cluster will be deleted. */ /* take min(startpos_i, startpos_j) */ if (startpos_j < startpos_i) { startpos_i = startpos_j; } /* take max(endpos_i, endpos_j) */ if (endpos_i < endpos_j) { endpos_i = endpos_j; } /* delete both predictions */ boundaries_i->skipped = true; boundaries_j->skipped = true; } else { /* take prediction with higher similarity */ if (boundaries_i->similarity >= boundaries_j->similarity) { boundaries_j->skipped = true; } else { boundaries_i->skipped = true; break; } } } } } } static int gt_ltrharvest_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err) { int had_err = 0; GtLTRharvestStream *ltrh_stream = gt_ltrharvest_stream_cast(ns); gt_error_check(err); /* LTRharvest run */ if (ltrh_stream->state == GT_LTRHARVEST_STREAM_STATE_START) { GT_INITARRAY(<rh_stream->repeatinfo.repeats, Repeat); ltrh_stream->prevseqnum = GT_UNDEF_ULONG; if (!had_err && gt_enumeratemaxpairs(ltrh_stream->ssar, ltrh_stream->encseq, gt_readmodeSequentialsuffixarrayreader(ltrh_stream->ssar), (unsigned int) ltrh_stream->minseedlength, gt_simpleexactselfmatchstore, <rh_stream->repeatinfo, err) != 0) { had_err = -1; } /* apply the filter algorithms */ if (!had_err && gt_searchforLTRs(ltrh_stream, <rh_stream->arrayLTRboundaries, err) != 0) { had_err = -1; } /* not needed any longer */ GT_FREEARRAY(<rh_stream->repeatinfo.repeats, Repeat); /* remove exact duplicates */ if (!had_err) { gt_removeduplicates(<rh_stream->arrayLTRboundaries); } /* remove overlapping predictions if desired */ if (!had_err && (ltrh_stream->nooverlaps || ltrh_stream->bestoverlaps)) { gt_removeoverlapswithlowersimilarity(<rh_stream->arrayLTRboundaries, ltrh_stream->nooverlaps); } /* sort elements */ if (!had_err) { ltrh_stream->bdptrtab = sortedltrboundaries(<rh_stream->numofboundaries, <rh_stream->arrayLTRboundaries); } ltrh_stream->state = GT_LTRHARVEST_STREAM_STATE_REGIONS; } /* first stream out the region nodes */ if (!had_err && ltrh_stream->state == GT_LTRHARVEST_STREAM_STATE_REGIONS) { bool skip = false; if (ltrh_stream->cur_elem_index < ltrh_stream->numofboundaries) { unsigned long seqnum, seqlength; GtGenomeNode *rn; GtStr *seqid; seqnum = ltrh_stream->bdptrtab[ltrh_stream->cur_elem_index]->contignumber; if (ltrh_stream->prevseqnum == GT_UNDEF_ULONG) { ltrh_stream->prevseqnum = seqnum; } else { while (ltrh_stream->prevseqnum == seqnum) { ltrh_stream->cur_elem_index++; if (ltrh_stream->cur_elem_index >= ltrh_stream->numofboundaries) { skip = true; break; } seqnum = ltrh_stream->bdptrtab[ltrh_stream->cur_elem_index]->contignumber; } } if (!skip) { ltrh_stream->prevseqnum = seqnum; seqlength = gt_encseq_seqlength(ltrh_stream->encseq, seqnum); seqid = gt_str_new_cstr("seq"); gt_str_append_ulong(seqid, seqnum); rn = gt_region_node_new(seqid, 1 + ltrh_stream->offset, seqlength + ltrh_stream->offset); gt_str_delete(seqid); *gn = rn; ltrh_stream->cur_elem_index++; } else { ltrh_stream->cur_elem_index = 0; ltrh_stream->state = GT_LTRHARVEST_STREAM_STATE_COMMENTS; *gn = NULL; } } else { ltrh_stream->cur_elem_index = 0; ltrh_stream->state = GT_LTRHARVEST_STREAM_STATE_COMMENTS; *gn = NULL; } } /* then stream out the comment nodes */ if (!had_err && ltrh_stream->state == GT_LTRHARVEST_STREAM_STATE_COMMENTS) { bool skip = false; if (ltrh_stream->cur_elem_index < ltrh_stream->numofboundaries) { const char *desc; char buf[BUFSIZ]; unsigned long desclen, seqnum; GtGenomeNode *cn; seqnum = ltrh_stream->bdptrtab[ltrh_stream->cur_elem_index]->contignumber; if (ltrh_stream->prevseqnum == GT_UNDEF_ULONG) { ltrh_stream->prevseqnum = seqnum; } else { while (ltrh_stream->prevseqnum == seqnum) { ltrh_stream->cur_elem_index++; if (ltrh_stream->cur_elem_index >= ltrh_stream->numofboundaries) { skip = true; break; } seqnum = ltrh_stream->bdptrtab[ltrh_stream->cur_elem_index]->contignumber; } } if (!skip) { ltrh_stream->prevseqnum = seqnum; desc = gt_encseq_description(ltrh_stream->encseq, &desclen, seqnum); (void) strncpy(buf, desc, (size_t) (desclen * sizeof (char))); buf[desclen] = '\0'; cn = gt_comment_node_new(buf); *gn = cn; ltrh_stream->cur_elem_index++; } else { ltrh_stream->cur_elem_index = 0; ltrh_stream->state = GT_LTRHARVEST_STREAM_STATE_FEATURES; *gn = NULL; } } else { ltrh_stream->cur_elem_index = 0; ltrh_stream->state = GT_LTRHARVEST_STREAM_STATE_FEATURES; *gn = NULL; } } /* finally, stream out the features */ if (!had_err && ltrh_stream->state == GT_LTRHARVEST_STREAM_STATE_FEATURES) { if (ltrh_stream->cur_elem_index < ltrh_stream->numofboundaries) { GtStr *seqid, *source; char buf[BUFSIZ]; GtGenomeNode *node, *parent; const LTRboundaries *elem = (ltrh_stream->bdptrtab[ltrh_stream->cur_elem_index]); unsigned long seqstartpos; seqstartpos = gt_encseq_seqstartpos(ltrh_stream->encseq, elem->contignumber); seqid = gt_str_new_cstr("seq"); source = gt_str_new_cstr(GT_LTRHARVEST_NAME); gt_str_append_ulong(seqid, elem->contignumber); /* repeat_region */ node = gt_feature_node_new(seqid, gt_ft_repeat_region, elem->leftLTR_5 - seqstartpos + 1 - elem->lenleftTSD + ltrh_stream->offset, elem->rightLTR_3 - seqstartpos + 1 + elem->lenrightTSD + ltrh_stream->offset, GT_STRAND_UNKNOWN); gt_feature_node_set_source((GtFeatureNode*) node, source); *gn = node; parent = node; if (ltrh_stream->motif->allowedmismatches < 4U) { node = gt_feature_node_new(seqid, gt_ft_inverted_repeat, elem->leftLTR_5 - seqstartpos + 1 + ltrh_stream->offset, elem->leftLTR_5 - seqstartpos + 2 + ltrh_stream->offset, GT_STRAND_UNKNOWN); gt_feature_node_set_source((GtFeatureNode*) node, source); gt_feature_node_add_child((GtFeatureNode*) parent, (GtFeatureNode*) node); node = gt_feature_node_new(seqid, gt_ft_inverted_repeat, elem->leftLTR_3 - seqstartpos + ltrh_stream->offset, elem->leftLTR_3 - seqstartpos + 1 + ltrh_stream->offset, GT_STRAND_UNKNOWN); gt_feature_node_set_source((GtFeatureNode*) node, source); gt_feature_node_add_child((GtFeatureNode*) parent, (GtFeatureNode*) node); node = gt_feature_node_new(seqid, gt_ft_inverted_repeat, elem->rightLTR_5 - seqstartpos + 1 + ltrh_stream->offset, elem->rightLTR_5 - seqstartpos + 2 + ltrh_stream->offset, GT_STRAND_UNKNOWN); gt_feature_node_set_source((GtFeatureNode*) node, source); gt_feature_node_add_child((GtFeatureNode*) parent, (GtFeatureNode*) node); node = gt_feature_node_new(seqid, gt_ft_inverted_repeat, elem->rightLTR_3 - seqstartpos + ltrh_stream->offset, elem->rightLTR_3 - seqstartpos + 1 + ltrh_stream->offset, GT_STRAND_UNKNOWN); gt_feature_node_set_source((GtFeatureNode*) node, source); gt_feature_node_add_child((GtFeatureNode*) parent, (GtFeatureNode*) node); } /* target_site_duplication */ if (ltrh_stream->minlengthTSD > 1U) { node = gt_feature_node_new(seqid, gt_ft_target_site_duplication, elem->leftLTR_5 - seqstartpos + 1 - elem->lenleftTSD + ltrh_stream->offset, elem->leftLTR_5 - seqstartpos + ltrh_stream->offset, GT_STRAND_UNKNOWN); gt_feature_node_set_source((GtFeatureNode*) node, source); gt_feature_node_add_child((GtFeatureNode*) parent, (GtFeatureNode*) node); node = gt_feature_node_new(seqid, gt_ft_target_site_duplication, elem->rightLTR_3 - seqstartpos + 2 + ltrh_stream->offset, elem->rightLTR_3 - seqstartpos + 1 + elem->lenrightTSD + ltrh_stream->offset, GT_STRAND_UNKNOWN); gt_feature_node_set_source((GtFeatureNode*) node, source); gt_feature_node_add_child((GtFeatureNode*) parent, (GtFeatureNode*) node); } /* LTR_retrotransposon */ node = gt_feature_node_new(seqid, gt_ft_LTR_retrotransposon, elem->leftLTR_5 - seqstartpos + 1 + ltrh_stream->offset, elem->rightLTR_3 - seqstartpos + 1 + ltrh_stream->offset, GT_STRAND_UNKNOWN); gt_feature_node_set_source((GtFeatureNode*) node, source); (void) snprintf(buf, BUFSIZ-1, "%.2f", elem->similarity); gt_feature_node_set_attribute((GtFeatureNode*) node, "ltr_similarity", buf); (void) snprintf(buf, BUFSIZ-1, "%lu", elem->contignumber); gt_feature_node_set_attribute((GtFeatureNode*) node, "seq_number", buf); gt_feature_node_add_child((GtFeatureNode*) parent, (GtFeatureNode*) node); parent = node; /* long_terminal_repeat */ node = gt_feature_node_new(seqid, gt_ft_long_terminal_repeat, elem->leftLTR_5 - seqstartpos + 1 + ltrh_stream->offset, elem->leftLTR_3 - seqstartpos + 1 + ltrh_stream->offset, GT_STRAND_UNKNOWN); gt_feature_node_set_source((GtFeatureNode*) node, source); gt_feature_node_add_child((GtFeatureNode*) parent, (GtFeatureNode*) node); node = gt_feature_node_new(seqid, gt_ft_long_terminal_repeat, elem->rightLTR_5 - seqstartpos + 1 + ltrh_stream->offset, elem->rightLTR_3 - seqstartpos + 1 + ltrh_stream->offset, GT_STRAND_UNKNOWN); gt_feature_node_set_source((GtFeatureNode*) node, source); gt_feature_node_add_child((GtFeatureNode*) parent, (GtFeatureNode*) node); gt_str_delete(seqid); gt_str_delete(source); ltrh_stream->cur_elem_index++; } else { *gn = NULL; } } return had_err; } static void gt_ltrharvest_stream_free(GtNodeStream *ns) { GtLTRharvestStream *ltrh_stream = gt_ltrharvest_stream_cast(ns); GT_FREEARRAY(<rh_stream->arrayLTRboundaries, LTRboundaries); if (ltrh_stream->ssar != NULL) gt_freeSequentialsuffixarrayreader(<rh_stream->ssar); if (ltrh_stream->bdptrtab != NULL) gt_free(ltrh_stream->bdptrtab); } const GtNodeStreamClass* gt_ltrharvest_stream_class(void) { static const GtNodeStreamClass *nsc = NULL; gt_class_alloc_lock_enter(); if (!nsc) { nsc = gt_node_stream_class_new(sizeof (GtLTRharvestStream), gt_ltrharvest_stream_free, gt_ltrharvest_stream_next); } gt_class_alloc_lock_leave(); return nsc; } const GtEncseq* gt_ltrharvest_stream_get_encseq(GtNodeStream *ltrh_stream) { GtLTRharvestStream *stream; gt_assert(ltrh_stream != NULL); stream = gt_ltrharvest_stream_cast(ltrh_stream); return stream->encseq; } GtNodeStream* gt_ltrharvest_stream_new(GtStr *str_indexname, GtRange searchrange, unsigned long minseedlength, unsigned long minltrlength, unsigned long maxltrlength, unsigned long mindistance, unsigned long maxdistance, double similaritythreshold, int xdropbelowscore, GtXdropArbitraryscores arbitscores, GtLTRFourCharMotif *motif, bool verbosemode, bool nooverlaps, bool bestoverlaps, bool scan, unsigned long offset, unsigned int minlengthTSD, unsigned int maxlengthTSD, unsigned long vicinity, GtError *err) { int had_err = 0; unsigned long max_contiglength; GtNodeStream *ns = gt_node_stream_create(gt_ltrharvest_stream_class(), false); GtLTRharvestStream *ltrh_stream = gt_ltrharvest_stream_cast(ns); ltrh_stream->str_indexname = str_indexname; ltrh_stream->minseedlength = minseedlength; ltrh_stream->similaritythreshold = similaritythreshold; ltrh_stream->xdropbelowscore = xdropbelowscore; ltrh_stream->arbitscores = arbitscores; ltrh_stream->motif = motif; ltrh_stream->verbosemode = verbosemode; ltrh_stream->offset = offset; ltrh_stream->repeatinfo.ltrsearchseqrange = searchrange; ltrh_stream->minlengthTSD = minlengthTSD; ltrh_stream->maxlengthTSD = maxlengthTSD; ltrh_stream->nooverlaps = nooverlaps; ltrh_stream->bestoverlaps = bestoverlaps; ltrh_stream->vicinityforcorrectboundaries = vicinity; ltrh_stream->cur_elem_index = 0; ltrh_stream->state = GT_LTRHARVEST_STREAM_STATE_START; /* init array for maximal repeats */ GT_INITARRAY(<rh_stream->arrayLTRboundaries, LTRboundaries); ltrh_stream->ssar = gt_newSequentialsuffixarrayreaderfromfile(gt_str_get(str_indexname), SARR_LCPTAB | SARR_SUFTAB | SARR_ESQTAB | SARR_DESTAB | SARR_SSPTAB | SARR_SDSTAB, scan ? SEQ_scan : SEQ_mappedboth, NULL, err); if (ltrh_stream->ssar == NULL) { gt_node_stream_delete(ns); return NULL; } /* get encseq associated with suffix array */ ltrh_stream->encseq = gt_encseqSequentialsuffixarrayreader(ltrh_stream->ssar); max_contiglength = gt_encseq_max_seq_length(ltrh_stream->encseq); ltrh_stream->repeatinfo.dmax = MIN(maxdistance,max_contiglength); ltrh_stream->repeatinfo.dmin = mindistance; ltrh_stream->repeatinfo.lmin = minltrlength; ltrh_stream->repeatinfo.lmax = maxltrlength; /* encode motif according to encseq alphabet */ had_err = gt_ltr_four_char_motif_encode(motif, ltrh_stream->encseq, err); if (had_err) { gt_node_stream_delete(ns); return NULL; } return had_err ? NULL : ns; } genometools-1.5.1/src/ltr/ltrharvest_stream.h000066400000000000000000000047301211610345200213620ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTRHARVEST_STREAM_H #define LTRHARVEST_STREAM_H #include "match/xdrop.h" #include "extended/node_stream_api.h" #include "ltr/ltr_four_char_motif.h" /* implements the ``genome stream'' interface */ typedef struct GtLTRharvestStream GtLTRharvestStream; const GtNodeStreamClass* gt_ltrharvest_stream_class(void); GtNodeStream* gt_ltrharvest_stream_new(GtStr *str_indexname, GtRange searchrange, unsigned long minseedlength, unsigned long minltrlength, unsigned long maxltrlength, unsigned long mindistance, unsigned long maxdistance, double similaritythreshold, int xdropbelowscore, GtXdropArbitraryscores arbitscores, GtLTRFourCharMotif *motif, bool verbosemode, bool nooverlaps, bool bestoverlaps, bool scan, unsigned long offset, unsigned int minlengthTSD, unsigned int maxlengthTSD, unsigned long vicinity, GtError *err); const GtEncseq* gt_ltrharvest_stream_get_encseq(GtNodeStream *ltrh_stream); #endif genometools-1.5.1/src/ltr/ltrharvest_tabout_stream.c000066400000000000000000000051541211610345200227340ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "extended/visitor_stream_api.h" #include "ltr/ltrharvest_tabout_stream.h" #include "ltr/ltrharvest_tabout_visitor.h" GtNodeStream* gt_ltrharvest_tabout_stream_new(GtNodeStream *in_stream, GtNodeVisitor *v) { return gt_visitor_stream_new(in_stream, v); } void gt_ltrharvest_tabout_stream_printshortheader(void) { printf("# predictions are reported in the following way\n"); printf("# s(ret) e(ret) l(ret) s(lLTR) e(lLTR) l(lLTR)" " s(rLTR) e(rLTR) l(rLTR) sim(LTRs) seq-nr \n"); printf("# where:\n"); printf("# s = starting position\n"); printf("# e = ending position\n"); printf("# l = length\n"); printf("# ret = LTR-retrotransposon\n"); printf("# lLTR = left LTR\n"); printf("# rLTR = right LTR\n"); printf("# sim = similarity\n"); printf("# seq-nr = sequence number\n"); } void gt_ltrharvest_tabout_stream_printlongheader(bool withtsd, bool withmotif) { printf("# predictions are reported in the following way\n"); printf("# s(ret) e(ret) l(ret) "); printf("s(lLTR) e(lLTR) l(lLTR)"); if (withtsd) { printf(" TSD l(TSD)"); } if (withmotif) { printf(" m(lLTR)"); } printf(" s(rLTR) e(rLTR) l(rLTR)"); if (withtsd) { printf(" TSD l(TSD)"); } if (withmotif) { printf(" m(rLTR)"); } printf(" sim(LTRs)"); printf(" seq-nr"); printf("\n# where:\n"); printf("# s = starting position\n"); printf("# e = ending position\n"); printf("# l = length\n"); if (withmotif) { printf("# m = motif\n"); } printf("# ret = LTR-retrotransposon\n"); printf("# lLTR = left LTR\n"); printf("# rLTR = right LTR\n"); if (withtsd) { printf("# TSD = target site duplication\n"); } printf("# sim = similarity\n"); printf("# seq-nr = sequence number\n"); } genometools-1.5.1/src/ltr/ltrharvest_tabout_stream.h000066400000000000000000000025641211610345200227430ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTRHARVEST_TABOUT_STREAM_H #define LTRHARVEST_TABOUT_STREAM_H #include "extended/node_stream_api.h" #include "extended/node_visitor_api.h" /* Takes ownership of . */ GtNodeStream* gt_ltrharvest_tabout_stream_new(GtNodeStream *in_stream, GtNodeVisitor *v); void gt_ltrharvest_tabout_stream_printshortheader(void); void gt_ltrharvest_tabout_stream_printlongheader(bool withtsd, bool withmotif); #endif genometools-1.5.1/src/ltr/ltrharvest_tabout_visitor.c000066400000000000000000000226201211610345200231350ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/array_api.h" #include "core/class_alloc_lock.h" #include "core/cstr_api.h" #include "core/encseq_api.h" #include "core/ma.h" #include "core/parseutils.h" #include "core/range.h" #include "core/str_api.h" #include "core/unused_api.h" #include "extended/node_visitor_api.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "extended/feature_type.h" #include "ltr/ltrharvest_tabout_visitor.h" struct GtLTRharvestTaboutVisitor { const GtNodeVisitor parent_instance; bool longoutput; const GtEncseq *encseq; }; #define gt_ltrharvest_tabout_visitor_cast(GV)\ gt_node_visitor_cast(gt_ltrharvest_tabout_visitor_class(), GV) static inline void gt_ltrharvest_tabout_visitor_seq4feat(GtLTRharvestTaboutVisitor *nv, GtFeatureNode *fn, GtStr *out, unsigned long seqnum) { char *buf; GtRange rng; unsigned long startpos; gt_assert(nv && fn && out); rng = gt_genome_node_get_range((GtGenomeNode*) fn); buf = gt_calloc((size_t) (gt_range_length(&rng)+1), sizeof (char)); startpos = gt_encseq_seqstartpos(nv->encseq, seqnum); gt_encseq_extract_decoded(nv->encseq, buf, startpos + rng.start - 1, startpos + rng.end - 1); gt_str_append_cstr(out, buf); gt_free(buf); } static int gt_ltrharvest_tabout_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GT_UNUSED GtError *err) { GtLTRharvestTaboutVisitor *lv; GtFeatureNodeIterator *fni; GtFeatureNode *curnode = NULL, *leftltr = NULL, *rightltr = NULL, *ltr_retrotrans = NULL, *lefttsd = NULL, *righttsd = NULL, *leftmotif_5 = NULL, *leftmotif_3 = NULL, *rightmotif_5 = NULL, *rightmotif_3 = NULL; int had_err = 0, added_motifs = 0, added_tsd = 0, added_ltr = 0; GtStr *line; GtRange rng; bool no_element = false; unsigned long seqnum = 0; const char *fnt; char buf[BUFSIZ]; lv = gt_ltrharvest_tabout_visitor_cast(nv); gt_assert(lv); gt_error_check(err); line = gt_str_new(); /* traverse annotation subgraph and collect info */ fni = gt_feature_node_iterator_new(fn); while (!had_err && (curnode = gt_feature_node_iterator_next(fni))) { fnt = gt_feature_node_get_type(curnode); if (strcmp(fnt, gt_ft_LTR_retrotransposon) == 0) { const char *val; ltr_retrotrans = curnode; val = gt_feature_node_get_attribute(curnode, "seq_number"); if (val == NULL) { gt_error_set(err, "missing attribute \"seq_number\""); had_err = -1; } if (!had_err) { (void) gt_parse_ulong(&seqnum, val); } } if (strcmp(fnt, gt_ft_long_terminal_repeat) == 0) { switch (added_ltr) { case 0: leftltr = curnode; break; case 1: rightltr = curnode; break; default: gt_error_set(err, "invalid number of LTR annotations: more than 2"); had_err = -1; } added_ltr++; } if (strcmp(fnt, gt_ft_inverted_repeat) == 0) { switch (added_motifs) { case 0: leftmotif_5 = curnode; break; case 1: leftmotif_3 = curnode; break; case 2: rightmotif_5 = curnode; break; case 3: rightmotif_3 = curnode; break; default: gt_error_set(err, "invalid number of motif annotations: more than 4"); had_err = -1; break; } added_motifs++; } if (strcmp(fnt, gt_ft_target_site_duplication) == 0) { switch (added_tsd) { case 0: lefttsd = curnode; break; case 1: righttsd = curnode; break; default: gt_error_set(err, "invalid number of TSD annotations: more than 2"); had_err = -1; } added_tsd++; } } gt_feature_node_iterator_delete(fni); /* check for invalid annotations */ if (!had_err && (!leftltr || !rightltr)) { gt_error_set(err, "missing LTR annotations"); had_err = -1; } if (lv->longoutput) { if (!had_err && added_motifs > 0 && added_motifs != 4) { gt_error_set(err, "invalid number of motif annotations, != 4"); had_err = -1; } if (!had_err && added_tsd > 0 && added_tsd != 2) { gt_error_set(err, "invalid number of TSD annotations, != 2"); had_err = -1; } } /* output in tabular format */ if (!had_err) { if (ltr_retrotrans != NULL) { /* whole element */ rng = gt_genome_node_get_range((GtGenomeNode*) ltr_retrotrans); (void) snprintf(buf, BUFSIZ-1, "%lu %lu %lu ", rng.start, rng.end, gt_range_length(&rng)); gt_str_append_cstr(line, buf); } else { no_element = true; } } if (!had_err && !no_element) { /* left LTR */ rng = gt_genome_node_get_range((GtGenomeNode*) leftltr); (void) snprintf(buf, BUFSIZ-1, "%lu %lu %lu ", rng.start, rng.end, gt_range_length(&rng)); gt_str_append_cstr(line, buf); /* left TSD */ if (lv->longoutput && added_tsd > 0 ) { gt_assert(lefttsd); gt_ltrharvest_tabout_visitor_seq4feat(lv, lefttsd, line, seqnum); gt_str_append_cstr(line, " "); rng = gt_genome_node_get_range((GtGenomeNode*) lefttsd); gt_str_append_ulong(line, gt_range_length(&rng)); gt_str_append_cstr(line, " "); } /* left motif */ if (lv->longoutput && added_motifs > 0 ) { gt_assert(leftmotif_5 && leftmotif_3); gt_ltrharvest_tabout_visitor_seq4feat(lv, leftmotif_5, line, seqnum); gt_str_append_cstr(line, ".."); gt_ltrharvest_tabout_visitor_seq4feat(lv, leftmotif_3, line, seqnum); gt_str_append_cstr(line, " "); } /* right LTR */ rng = gt_genome_node_get_range((GtGenomeNode*) rightltr); (void) snprintf(buf, BUFSIZ-1, "%lu %lu %lu ", rng.start, rng.end, gt_range_length(&rng)); gt_str_append_cstr(line, buf); /* right TSD */ if (lv->longoutput && added_tsd > 0 ) { gt_assert(righttsd); gt_ltrharvest_tabout_visitor_seq4feat(lv, righttsd, line, seqnum); gt_str_append_cstr(line, " "); rng = gt_genome_node_get_range((GtGenomeNode*) righttsd); gt_str_append_ulong(line, gt_range_length(&rng)); gt_str_append_cstr(line, " "); } /* right motif */ if (lv->longoutput && added_motifs > 0 ) { gt_assert(rightmotif_5 && rightmotif_3); gt_ltrharvest_tabout_visitor_seq4feat(lv, rightmotif_5, line, seqnum); gt_str_append_cstr(line, ".."); gt_ltrharvest_tabout_visitor_seq4feat(lv, rightmotif_3, line, seqnum); gt_str_append_cstr(line, " "); } gt_str_append_cstr(line, gt_feature_node_get_attribute(ltr_retrotrans, "ltr_similarity")); gt_str_append_cstr(line, " "); gt_str_append_ulong(line, seqnum); printf("%s\n", gt_str_get(line)); } gt_str_delete(line); return had_err; } const GtNodeVisitorClass* gt_ltrharvest_tabout_visitor_class(void) { static const GtNodeVisitorClass *nvc = NULL; gt_class_alloc_lock_enter(); if (!nvc) { nvc = gt_node_visitor_class_new(sizeof (GtLTRharvestTaboutVisitor), NULL, NULL, gt_ltrharvest_tabout_visitor_feature_node, NULL, NULL, NULL); } gt_class_alloc_lock_leave(); return nvc; } GtNodeVisitor* gt_ltrharvest_tabout_visitor_new(void) { GtNodeVisitor *nv; GtLTRharvestTaboutVisitor *lv; nv = gt_node_visitor_create(gt_ltrharvest_tabout_visitor_class()); lv = gt_ltrharvest_tabout_visitor_cast(nv); gt_assert(lv); lv->longoutput = false; lv->encseq = NULL; return nv; } GtNodeVisitor* gt_ltrharvest_tabout_visitor_new_longoutput(const GtEncseq *encseq) { GtNodeVisitor *nv; GtLTRharvestTaboutVisitor *lv; gt_assert(encseq); nv = gt_node_visitor_create(gt_ltrharvest_tabout_visitor_class()); lv = gt_ltrharvest_tabout_visitor_cast(nv); gt_assert(lv); lv->longoutput = true; lv->encseq = encseq; return nv; } genometools-1.5.1/src/ltr/ltrharvest_tabout_visitor.h000066400000000000000000000026021211610345200231400ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LTRHARVEST_TABOUT_VISITOR_H #define LTRHARVEST_TABOUT_VISITOR_H /* Implements the interface. */ typedef struct GtLTRharvestTaboutVisitor GtLTRharvestTaboutVisitor; #include "core/encseq_api.h" #include "extended/node_visitor.h" const GtNodeVisitorClass* gt_ltrharvest_tabout_visitor_class(void); GtNodeVisitor* gt_ltrharvest_tabout_visitor_new(void); GtNodeVisitor* gt_ltrharvest_tabout_visitor_new_longoutput( const GtEncseq *encseq); #endif genometools-1.5.1/src/ltr/pbs.c000066400000000000000000000351451211610345200163740ustar00rootroot00000000000000/* Copyright (c) 2008-2009 Sascha Steinbiss Copyright (c) 2008-2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "core/mathsupport.h" #include "core/minmax.h" #include "core/xansi_api.h" #include "core/array.h" #include "core/bioseq.h" #include "core/ensure.h" #include "core/fa.h" #include "core/fileutils_api.h" #include "extended/reverse_api.h" #include "extended/swalign.h" #include "ltr/pbs.h" struct GtPBSHit { unsigned long start, end, edist, offset, tstart, alilen; GtStrand strand; double score; const char *trna; GtPBSResults *res; }; struct GtPBSResults { GtArray *hits; GtLTRElement *elem; GtPBSOptions *opts; }; static GtPBSHit* gt_pbs_hit_new(unsigned long alilen, GtStrand strand, const char *tRNA, unsigned long tstart, unsigned long start, unsigned long end, unsigned long offset, unsigned long edist, double score, GtPBSResults *r) { GtPBSHit *hit = gt_malloc(sizeof (GtPBSHit)); hit->alilen = alilen; hit->strand = strand; hit->trna = tRNA; hit->tstart = tstart; hit->start = start; hit->end = end; hit->offset = offset; hit->edist = edist; hit->score = score; hit->res = r; return hit; } static GtPBSResults* gt_pbs_results_new(GtLTRElement *elem, GtPBSOptions *opts) { GtPBSResults *res = gt_calloc((size_t) 1, sizeof (GtPBSResults)); res->elem = elem; res->opts = opts; res->hits = gt_array_new(sizeof (GtPBSHit*)); return res; } GtRange gt_pbs_hit_get_coords(const GtPBSHit *h) { GtRange rng; gt_assert(h && h->end >= h->start); rng.start = h->start; rng.end = h->end; switch (h->strand) { case GT_STRAND_FORWARD: default: rng.start = h->res->elem->leftLTR_3 + 1 - h->res->opts->radius + rng.start; rng.end = rng.start + (h->end - h->start); break; case GT_STRAND_REVERSE: rng.end = h->res->elem->rightLTR_5 - 1 + h->res->opts->radius - rng.start; rng.start = rng.end - (h->end - h->start); break; } gt_assert(gt_range_length(&rng) == (h->end - h->start + 1)); return rng; } unsigned long gt_pbs_hit_get_offset(const GtPBSHit *h) { gt_assert(h); return h->offset; } double gt_pbs_hit_get_score(const GtPBSHit *h) { gt_assert(h); return h->score; } unsigned long gt_pbs_hit_get_edist(const GtPBSHit *h) { gt_assert(h); return h->edist; } const char* gt_pbs_hit_get_trna(const GtPBSHit *h) { gt_assert(h); return h->trna; } unsigned long gt_pbs_hit_get_tstart(const GtPBSHit *h) { gt_assert(h); return h->tstart; } GtStrand gt_pbs_hit_get_strand(const GtPBSHit *h) { gt_assert(h); return h->strand; } unsigned long gt_pbs_hit_get_alignment_length(const GtPBSHit *h) { gt_assert(h); return h->alilen; } unsigned long gt_pbs_results_get_number_of_hits(const GtPBSResults *r) { gt_assert(r); return gt_array_size(r->hits); } GtPBSHit* gt_pbs_results_get_ranked_hit(const GtPBSResults *r, unsigned long i) { gt_assert(r); return *(GtPBSHit**) gt_array_get(r->hits, i); } static GtScoreFunction* gt_dna_scorefunc_new(GtAlphabet *a, int match, int mismatch, int insertion, int deletion) { GtScoreMatrix *sm = gt_score_matrix_new(a); GtScoreFunction *sf = gt_score_function_new(sm, insertion, deletion); unsigned int m,n; for (m=0;m nr2) { return nr1 - nr2; } else { return nr2 - nr1; } } static void gt_pbs_add_hit(GtArray *hitlist, GtAlignment *ali, GtPBSOptions *o, unsigned long trna_seqlen, const char *desc, GtStrand strand, GtPBSResults *r) { unsigned long dist; GtPBSHit *hit; unsigned long offset, alilen; GtRange urange, vrange; gt_assert(hitlist && desc); if (!ali) return; gt_assert(ali); dist = gt_alignment_eval(ali); urange = gt_alignment_get_urange(ali); vrange = gt_alignment_get_vrange(ali); offset = gt_ulongabs((unsigned long) o->radius, urange.start); alilen = gt_ulongabs(urange.end, urange.start)+1; if (dist <= (unsigned long) o->max_edist && offset <= o->offsetlen.end && offset >= o->offsetlen.start && alilen <= o->alilen.end && alilen >= o->alilen.start && vrange.start <= o->trnaoffsetlen.end && vrange.start >= o->trnaoffsetlen.start) { hit = gt_pbs_hit_new(alilen, strand, desc, vrange.start, urange.start, urange.end, offset, dist, gt_pbs_score_func(dist, offset, urange.end-urange.start+1, trna_seqlen, vrange.start), r); gt_array_add(hitlist, hit); } } static int gt_pbs_hit_compare(const void *h1, const void *h2) { GtPBSHit *hp1 = *(GtPBSHit**) h1; GtPBSHit *hp2 = *(GtPBSHit**) h2; return (gt_double_compare(hp2->score, hp1->score)); } GtPBSResults* gt_pbs_find(const char *seq, const char *rev_seq, GtLTRElement *element, GtPBSOptions *o, GtError *err) { GtSeq *seq_forward, *seq_rev; GtPBSResults *results; unsigned long j; GtAlignment *ali; GtAlphabet *a = gt_alphabet_new_dna(); GtScoreFunction *sf = gt_dna_scorefunc_new(a, o->ali_score_match, o->ali_score_mismatch, o->ali_score_insertion, o->ali_score_deletion); gt_assert(seq && rev_seq && sf && a && element); results = gt_pbs_results_new(element, o); seq_forward = gt_seq_new(seq + (gt_ltrelement_leftltrlen(element)) - (o->radius), (unsigned long) (2*o->radius + 1), a); seq_rev = gt_seq_new(rev_seq + (gt_ltrelement_rightltrlen(element)) - (o->radius), (unsigned long) (2*o->radius + 1), a); for (j=0;jtrna_lib);j++) { GtSeq *trna_seq, *trna_from3; char *trna_from3_full; unsigned long trna_seqlen; trna_seq = gt_bioseq_get_seq(o->trna_lib, j); trna_seqlen = gt_seq_length(trna_seq); trna_from3_full = gt_calloc((size_t) trna_seqlen, sizeof (char)); memcpy(trna_from3_full, gt_seq_get_orig(trna_seq), sizeof (char)*trna_seqlen); (void) gt_reverse_complement(trna_from3_full, trna_seqlen, err); trna_from3 = gt_seq_new_own(trna_from3_full, trna_seqlen, a); ali = gt_swalign(seq_forward, trna_from3, sf); gt_pbs_add_hit(results->hits, ali, o, trna_seqlen, gt_seq_get_description(trna_seq), GT_STRAND_FORWARD, results); gt_alignment_delete(ali); ali = gt_swalign(seq_rev, trna_from3, sf); gt_pbs_add_hit(results->hits, ali, o, trna_seqlen, gt_seq_get_description(trna_seq), GT_STRAND_REVERSE, results); gt_alignment_delete(ali); gt_seq_delete(trna_seq); gt_seq_delete(trna_from3); } gt_seq_delete(seq_forward); gt_seq_delete(seq_rev); gt_score_function_delete(sf); gt_alphabet_delete(a); gt_array_sort(results->hits, gt_pbs_hit_compare); return results; } void gt_pbs_results_delete(GtPBSResults *results) { unsigned long i; if (!results) return; if (results->hits != NULL) { for (i=0;ihits);i++) { GtPBSHit *hit = *(GtPBSHit**) gt_array_get(results->hits, i); gt_free(hit); } gt_array_delete(results->hits); } gt_free(results); } int gt_pbs_unit_test(GtError *err) { int had_err = 0; GtLTRElement element; GtPBSOptions o; GtStr *tmpfilename; FILE *tmpfp; GtPBSResults *res; GtPBSHit *hit; double score1, score2; GtRange rng; char *rev_seq, *seq, tmp[BUFSIZ]; const char *fullseq = "aaaaaaaaaaaaaaaaaaaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "acatactaggatgctag" /* <- PBS forward */ "aatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatag" /* PBS reverse -> */ "gatcctaaggctac" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "aaaaaaaaaaaaaaaaaaaa"; /* notice previous errors */ gt_error_check(err); /* create temporary tRNA library file */ tmpfilename = gt_str_new(); tmpfp = gt_xtmpfp(tmpfilename); fprintf(tmpfp, ">test1\nccccccccccccccctagcatcctagtatgtccc\n" ">test2\ncccccccccgatcctagggctaccctttc\n"); gt_fa_xfclose(tmpfp); gt_ensure(had_err, gt_file_exists(gt_str_get(tmpfilename))); /* setup testing parameters */ o.radius = 30U; o.max_edist = 1U; o.alilen.start = 11UL; o.alilen.end = 30UL; o.offsetlen.start = 0UL; o.offsetlen.end = 5UL; o.trnaoffsetlen.start = 0UL; o.trnaoffsetlen.end = 40UL; o.ali_score_match = 5; o.ali_score_mismatch = -10; o.ali_score_insertion = o.ali_score_deletion = -20; o.trna_lib = gt_bioseq_new(gt_str_get(tmpfilename), err); gt_ensure(had_err, gt_bioseq_number_of_sequences(o.trna_lib) == 2UL); element.leftLTR_5 = 20UL; element.leftLTR_3 = 119UL; element.rightLTR_5 = 520UL; element.rightLTR_3 = 619UL; /* setup sequences */ seq = gt_malloc((size_t) 600 * sizeof (char)); rev_seq = gt_malloc((size_t) 600 * sizeof (char)); memcpy(seq, fullseq + 20, (size_t) 600); memcpy(rev_seq, fullseq + 20, (size_t) 600); gt_ensure(had_err, !gt_reverse_complement(rev_seq, (unsigned long) 600, NULL)); /* try to find PBS in sequences */ res = gt_pbs_find(seq, rev_seq, &element, &o, err); gt_ensure(had_err, res != NULL); gt_ensure(had_err, gt_pbs_results_get_number_of_hits(res) == 2UL); /* check first hit on forward strand */ hit = gt_pbs_results_get_ranked_hit(res, 0UL); gt_ensure(had_err, hit != NULL); gt_ensure(had_err, gt_pbs_hit_get_alignment_length(hit) == 17UL); gt_ensure(had_err, gt_pbs_hit_get_edist(hit) == 0UL); gt_ensure(had_err, gt_pbs_hit_get_offset(hit) == 0UL); gt_ensure(had_err, gt_pbs_hit_get_tstart(hit) == 3UL); gt_ensure(had_err, strcmp(gt_pbs_hit_get_trna(hit), "test1") == 0); rng = gt_pbs_hit_get_coords(hit); gt_ensure(had_err, rng.start == 120UL); gt_ensure(had_err, rng.end == 136UL); score1 = gt_pbs_hit_get_score(hit); gt_ensure(had_err, gt_pbs_hit_get_strand(hit) == GT_STRAND_FORWARD); memset(tmp, 0, BUFSIZ-1); memcpy(tmp, fullseq + (rng.start * sizeof (char)), (size_t) ((rng.end - rng.start + 1) * sizeof (char))); gt_ensure(had_err, strcmp(tmp, "acatactaggatgctag" ) == 0); /* check second hit on reverse strand */ hit = gt_pbs_results_get_ranked_hit(res, 1UL); gt_ensure(had_err, hit != NULL); gt_ensure(had_err, gt_pbs_hit_get_alignment_length(hit) == 14UL); gt_ensure(had_err, gt_pbs_hit_get_edist(hit) == 1UL); gt_ensure(had_err, gt_pbs_hit_get_offset(hit) == 0UL); gt_ensure(had_err, gt_pbs_hit_get_tstart(hit) == 6UL); gt_ensure(had_err, strcmp(gt_pbs_hit_get_trna(hit), "test2") == 0); rng = gt_pbs_hit_get_coords(hit); gt_ensure(had_err, rng.start == 506UL); gt_ensure(had_err, rng.end == 519UL); score2 = gt_pbs_hit_get_score(hit); gt_ensure(had_err, gt_double_compare(score1, score2) > 0); gt_ensure(had_err, gt_pbs_hit_get_strand(hit) == GT_STRAND_REVERSE); memset(tmp, 0, BUFSIZ-1); memcpy(tmp, fullseq + (rng.start * sizeof (char)), (size_t) ((rng.end - rng.start + 1) * sizeof (char))); gt_ensure(had_err, strcmp(tmp, "gatcctaaggctac" ) == 0); /* clean up */ gt_xremove(gt_str_get(tmpfilename)); gt_ensure(had_err, !gt_file_exists(gt_str_get(tmpfilename))); gt_str_delete(tmpfilename); gt_bioseq_delete(o.trna_lib); gt_free(rev_seq); gt_free(seq); gt_pbs_results_delete(res); return had_err; } genometools-1.5.1/src/ltr/pbs.h000066400000000000000000000046201211610345200163730ustar00rootroot00000000000000/* Copyright (c) 2008 Sascha Steinbiss Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef PBS_H #define PBS_H #include "core/undef_api.h" #include "core/bioseq.h" #include "core/dlist.h" #include "core/seq.h" #include "core/strand.h" #include "core/score_function.h" #include "extended/alignment.h" #include "ltr/ltrelement.h" typedef struct GtPBSOptions { unsigned int radius, max_edist; GtRange alilen, offsetlen, trnaoffsetlen; int ali_score_match, ali_score_mismatch, ali_score_insertion, ali_score_deletion; GtBioseq *trna_lib; } GtPBSOptions; typedef struct GtPBSHit GtPBSHit; typedef struct GtPBSResults GtPBSResults; GtPBSResults* gt_pbs_find(const char *seq, const char *rev_seq, GtLTRElement *element, GtPBSOptions *o, GtError *err); GtRange gt_pbs_hit_get_coords(const GtPBSHit*); GtStrand gt_pbs_hit_get_strand(const GtPBSHit*); double gt_pbs_hit_get_score(const GtPBSHit*); unsigned long gt_pbs_hit_get_edist(const GtPBSHit*); unsigned long gt_pbs_hit_get_offset(const GtPBSHit*); unsigned long gt_pbs_hit_get_tstart(const GtPBSHit*); const char* gt_pbs_hit_get_trna(const GtPBSHit*); unsigned long gt_pbs_hit_get_alignment_length(const GtPBSHit*); unsigned long gt_pbs_results_get_number_of_hits(const GtPBSResults*); GtPBSHit* gt_pbs_results_get_ranked_hit(const GtPBSResults*, unsigned long); void gt_pbs_results_delete(GtPBSResults*); int gt_pbs_unit_test(GtError*); #endif genometools-1.5.1/src/ltr/pdom.c000066400000000000000000001015501211610345200165410ustar00rootroot00000000000000/* Copyright (c) 2008-2010 Sascha Steinbiss Copyright (c) 2008-2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_HMMER #include #include #include #include #include #include #include "core/codon_api.h" #include "core/codon_iterator_simple_api.h" #include "core/log.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/minmax.h" #include "core/thread_api.h" #include "core/translator.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "extended/globalchaining.h" #include "extended/reverse_api.h" #include "ltr/pdom.h" /* HMMER3 related includes */ #include "p7_config.h" #include "easel.h" #include "esl_alphabet.h" #include "esl_getopts.h" #include "esl_sq.h" #include "esl_ssi.h" #include "esl_sqio.h" #include "esl_stopwatch.h" #include "p7_config.h" #ifdef HMMER_THREADS #include "esl_threads.h" #include "esl_workqueue.h" #endif #include "hmmer.h" struct GtPdomFinder { GtStrArray *hmm_files; GtArray *models; GtLTRElement *elem; ESL_GETOPTS *getopts; double glob_eval_cutoff; bool reportall; unsigned int chain_max_gap_length; }; struct GtPdomModel { P7_HMM *model; ESL_ALPHABET *abc; unsigned long reference_count; }; struct GtPdomSingleHit { GtPhase phase; GtRange range; GtStr *aa_seq_model, *mline, *aa_seq_matched; double eval; bool chained; GtPdomModelHit *mhit; unsigned long reference_count; GtArray *chains; }; struct GtPdomModelHit { P7_TOPHITS *hits_fwd, *hits_rev; GtStrand strand; GtArray *members; unsigned long reference_count; GtLTRElement *elem; }; struct GtPdomResults { GtHashmap *domains; double combined_e_value_fwd, combined_e_value_rev; bool empty; }; typedef struct GtPdomDomainTraverseInfo { GtPdomIteratorFunc func; void *data; } GtPdomDomainTraverseInfo; typedef struct GtPdomSharedMem { GtPdomFinder *gpf; unsigned long next_hmm; GtArray *hmms; GtStr **fwd, **rev; GtPdomResults *results; GtMutex *in_lock, *out_lock; } GtPdomSharedMem; /* --------------- GtPdomSingleHit ---------------------------------- */ #define gt_pdom_isgap(c) ((c) == ' ' || (c) == '.' || (c) == '_' \ || (c) == '-' || (c) == '~') void gt_pdom_single_hit_format_alignment(const GtPdomSingleHit *sh, unsigned long width, GtStr *dest) { unsigned long pos, match_start, match_end, i, len, modellen, matchlen; char *buffer, cpbuf[BUFSIZ]; const char *model, *mline, *matched; gt_assert(sh && width > 0 && dest && width < BUFSIZ); buffer = gt_calloc(width+1, sizeof (char)); model = gt_str_get(sh->aa_seq_model); mline = gt_str_get(sh->mline); matched = gt_str_get(sh->aa_seq_matched); gt_str_reset(dest); modellen = gt_str_length(sh->aa_seq_model); matchlen = gt_str_length(sh->aa_seq_matched); len = MAX(modellen, matchlen); match_end = sh->range.start - 1; if (width > len) width = len; for (pos = 0; pos + width < len; pos += width) { match_start = match_end + 1; for (i = pos; i < pos + width && matched[i] != '\0'; i++) if (!gt_pdom_isgap(matched[i])) match_end++; strncpy(buffer, model+pos, width); snprintf(cpbuf, BUFSIZ, "%6s %s\n", " ", buffer); gt_str_append_cstr(dest, cpbuf); strncpy(buffer, mline+pos, width); snprintf(cpbuf, BUFSIZ, "%6s %s\n", " ", buffer); gt_str_append_cstr(dest, cpbuf); strncpy(buffer, matched+pos, width); snprintf(cpbuf, BUFSIZ, "%6lu %s %6lu\n\n", match_start, buffer, match_end); gt_str_append_cstr(dest, cpbuf); } if (pos < len) { unsigned long rest_len; rest_len = len - pos; match_start = match_end + 1; for (i = pos; i < len && matched[i] != '\0'; i++) if (!gt_pdom_isgap(matched[i])) match_end++; strncpy(buffer, model+pos, rest_len); buffer[rest_len]='\0'; snprintf(cpbuf, BUFSIZ, "%6s %s\n", " ", buffer); gt_str_append_cstr(dest, cpbuf); strncpy(buffer, mline+pos, rest_len); snprintf(cpbuf, BUFSIZ, "%6s %s\n", " ", buffer); gt_str_append_cstr(dest, cpbuf); strncpy(buffer, matched+pos, rest_len); snprintf(cpbuf, BUFSIZ, "%6lu %s %6lu\n\n", match_start, buffer, match_end); gt_str_append_cstr(dest, cpbuf); } gt_free(buffer); } void gt_pdom_single_hit_get_aaseq(const GtPdomSingleHit *sh, GtStr *dest) { const char *matched; unsigned long i; gt_assert(sh && dest); gt_str_reset(dest); matched = gt_str_get(sh->aa_seq_matched); for (i = 0; i < gt_str_length(sh->aa_seq_matched); i++) { if (!gt_pdom_isgap(matched[i])) { /* replace stop codons by 'X'es */ if (matched[i] == '*') { gt_str_append_char(dest, 'X'); } else { gt_str_append_char(dest, toupper(matched[i])); } } } } static GtPdomSingleHit* gt_pdom_single_hit_new(P7_DOMAIN *singlehit, GtPdomModelHit *mhit) { GtPdomSingleHit *hit; gt_assert(singlehit && singlehit->ad); hit = gt_calloc(1, sizeof (GtPdomSingleHit)); hit->phase = gt_phase_get(singlehit->ad->sqname[0]); hit->range.start = singlehit->ad->sqfrom-1; hit->range.end = singlehit->ad->sqto-1; gt_log_log("create single hit %lu-%lu", hit->range.start, hit->range.end); gt_assert(gt_range_length(&(hit->range)) > 0); hit->mhit = mhit; hit->eval = singlehit->pvalue; if (singlehit->ad && singlehit->ad->aseq) hit->aa_seq_matched = gt_str_new_cstr(singlehit->ad->aseq); if (singlehit->ad && singlehit->ad->model) hit->aa_seq_model = gt_str_new_cstr(singlehit->ad->model); if (singlehit->ad && singlehit->ad->mline) hit->mline = gt_str_new_cstr(singlehit->ad->mline); gt_assert(hit->range.start <= hit->range.end); hit->chains = gt_array_new(sizeof (unsigned long)); hit->chained = false; return hit; } GtPdomSingleHit* gt_pdom_single_hit_ref(GtPdomSingleHit *sh) { gt_assert(sh); sh->reference_count++; return sh; } GtPhase gt_pdom_single_hit_get_phase(const GtPdomSingleHit *singlehit) { gt_assert(singlehit); return singlehit->phase; } GtRange gt_pdom_single_hit_get_range(const GtPdomSingleHit *singlehit) { GtRange retrng; gt_assert(singlehit); switch (singlehit->mhit->strand) { case GT_STRAND_FORWARD: default: retrng.start = singlehit->mhit->elem->leftLTR_5 + (singlehit->range.start) * GT_CODON_LENGTH + (unsigned long) singlehit->phase; retrng.end = retrng.start + (gt_range_length(&singlehit->range) - 1) * GT_CODON_LENGTH; break; case GT_STRAND_REVERSE: retrng.start = singlehit->mhit->elem->rightLTR_3 - (singlehit->range.end+1) * GT_CODON_LENGTH - (unsigned long) singlehit->phase; retrng.end = retrng.start + (gt_range_length(&singlehit->range) - 1) * GT_CODON_LENGTH; break; } gt_log_log("range: (%lu-%lu, phase %d) -> %lu-%lu (len %lu) strand: %c\n", singlehit->range.start, singlehit->range.end, singlehit->phase, retrng.start, retrng.end, gt_range_length(&retrng), GT_STRAND_CHARS[singlehit->mhit->strand]); return retrng; } double gt_pdom_single_hit_get_evalue(const GtPdomSingleHit *singlehit) { gt_assert(singlehit); return singlehit->eval; } void gt_pdom_single_hit_set_chained(GtPdomSingleHit *singlehit, unsigned long cno) { gt_assert(singlehit); gt_array_add(singlehit->chains, cno); gt_log_log("adding single hit %lu-%lu to chain %lu", singlehit->range.start, singlehit->range.end, cno); singlehit->chained = true; } bool gt_pdom_single_hit_is_chained(GtPdomSingleHit *singlehit) { gt_assert(singlehit); return singlehit->chained; } GtArray* gt_pdom_single_hit_get_chains(GtPdomSingleHit *singlehit) { gt_assert(singlehit); return singlehit->chains; } void gt_pdom_single_hit_delete(void *value) { GtPdomSingleHit *sh; if (!value) return; sh = (GtPdomSingleHit*) value; if (sh->reference_count) { sh->reference_count--; return; } gt_str_delete(sh->aa_seq_matched); gt_str_delete(sh->aa_seq_model); gt_str_delete(sh->mline); gt_array_delete(sh->chains); gt_free(sh); } /* --------------- GtPdomModelHit ---------------------------------- */ static GtPdomModelHit* gt_pdom_model_hit_new(GtLTRElement *elem) { GtPdomModelHit *hit; hit = gt_calloc(1, sizeof (GtPdomModelHit)); hit->hits_fwd = p7_tophits_Create(); hit->hits_rev = p7_tophits_Create(); hit->strand = GT_STRAND_UNKNOWN; hit->elem = elem; hit->members = gt_array_new(sizeof (GtPdomSingleHit*)); return hit; } GtPdomModelHit *gt_pdom_model_hit_ref(GtPdomModelHit *mh) { gt_assert(mh); mh->reference_count++; return mh; } void gt_pdom_model_hit_add_single_hit(GtPdomModelHit *mh, GtPdomSingleHit *sh) { gt_assert(mh && mh->members && sh); gt_array_add(mh->members, sh); } GtStrand gt_pdom_model_hit_get_best_strand(const GtPdomModelHit *h) { gt_assert(h); return h->strand; } unsigned long gt_pdom_model_hit_num_of_single_hits(const GtPdomModelHit *h) { gt_assert(h); return gt_array_size(h->members); } GtPdomSingleHit* gt_pdom_model_hit_single_hit(const GtPdomModelHit *h, unsigned long nth) { gt_assert(h); return *(GtPdomSingleHit**) gt_array_get(h->members, nth); } void gt_pdom_model_hit_delete(void *value) { GtPdomModelHit *hit; if (!value) return; hit = (GtPdomModelHit*) value; if (hit->reference_count) { hit->reference_count--; return; } if (hit->hits_fwd) p7_tophits_Destroy(hit->hits_fwd); if (hit->hits_rev) p7_tophits_Destroy(hit->hits_rev); if (hit->members) { unsigned long i; for (i=0;imembers);i++) { gt_pdom_single_hit_delete(*(GtPdomSingleHit**) gt_array_get(hit->members, i)); } gt_array_delete(hit->members); } gt_free(hit); } /* --------------- GtPdomModel ------------------------------------ */ static GtPdomModel* gt_pdom_model_new(P7_HMM *model) { GtPdomModel *newmodel; gt_assert(model); newmodel = gt_calloc(1, sizeof (GtPdomModel)); newmodel->model = model; return newmodel; } GtPdomModel *gt_pdom_model_ref(GtPdomModel *m) { gt_assert(m); m->reference_count++; return m; } const char* gt_pdom_model_get_name(const GtPdomModel *model) { gt_assert(model); return model->model->name; } const char* gt_pdom_model_get_acc(const GtPdomModel *model) { gt_assert(model); return model->model->acc; } void gt_pdom_model_delete(void *value) { GtPdomModel *model; if (!value) return; model = (GtPdomModel*) value; if (model->reference_count) { model->reference_count--; return; } if (model->abc) esl_alphabet_Destroy(model->abc); p7_hmm_Destroy(model->model); gt_free(model); } /* --------------- GtPdomResults ---------------------------------- */ static GtPdomResults* gt_pdom_results_new(void) { GtPdomResults *res; res = gt_calloc(1, sizeof (GtPdomResults)); res->domains = gt_hashmap_new(GT_HASH_DIRECT, gt_pdom_model_delete, gt_pdom_model_hit_delete); res->empty = TRUE; res->combined_e_value_fwd = res->combined_e_value_rev = 0.0; return res; } bool gt_pdom_results_empty(GtPdomResults *res) { gt_assert(res); return res->empty; } double gt_pdom_results_get_combined_evalue_fwd(GtPdomResults *result) { gt_assert(result); return result->combined_e_value_fwd; } double gt_pdom_results_get_combined_evalue_rev(GtPdomResults *result) { gt_assert(result); return result->combined_e_value_rev; } void gt_pdom_results_delete(GtPdomResults *res) { if (!res) return; gt_hashmap_delete(res->domains); gt_free(res); } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ static int visit_domain(void *key, void *value, void *data, GT_UNUSED GtError *err) { GtPdomModel *model = (GtPdomModel *) key; GtPdomModelHit *hit = (GtPdomModelHit*) value; GtPdomDomainTraverseInfo *info = (GtPdomDomainTraverseInfo*) data; return info->func(model, hit, info->data, err); } int gt_pdom_results_foreach_domain_hit(GtPdomResults *results, GtPdomIteratorFunc func, void *data, GtError *err) { GtPdomDomainTraverseInfo info; info.func = func; info.data = data; return gt_hashmap_foreach(results->domains, visit_domain, &info, err); } static inline void gt_hmmer_search(P7_PIPELINE *pli, char *in_seq, ESL_ALPHABET *abc, P7_OPROFILE *om, P7_BG *bg, char *seqdesc, P7_TOPHITS *hits, GT_UNUSED GtMutex *lock) { ESL_SQ *sq = NULL; /* create and encode sequence */ sq = esl_sq_CreateFrom(seqdesc, in_seq, "\0", "\0", NULL); esl_sq_Digitize(abc, sq); /* configure for new sequence */ p7_pli_NewSeq(pli, sq); p7_bg_SetLength(bg, sq->n); p7_oprofile_ReconfigLength(om, sq->n); /* process this sequence */ p7_Pipeline(pli, om, bg, sq, hits); /* cleanup */ esl_sq_Destroy(sq); /* XXX: reuse me? */ p7_pipeline_Reuse(pli); } static void chainproc(GtChain *c, GtFragment *f, GT_UNUSED unsigned long nof_frags, GT_UNUSED unsigned long gap_length, void *data) { unsigned long i, *chainno = (unsigned long*) data; gt_log_log("resulting chain has %ld GtFragments, score %ld", gt_chain_size(c), gt_chain_get_score(c)); for (i = 0; i < gt_chain_size(c); i++) { GtFragment frag; frag = f[gt_chain_get_fragnum(c, i)]; gt_log_log("(%lu %lu) (%lu %lu)", frag.startpos1, frag.endpos1, frag.startpos2, frag.endpos2); gt_pdom_single_hit_set_chained((GtPdomSingleHit*) frag.data, *chainno); } (*chainno)++; gt_log_log("\n"); } static int gt_fragcmp(const void *frag1, const void *frag2) { GtFragment *f1 = (GtFragment*) frag1; GtFragment *f2 = (GtFragment*) frag2; if (f1->startpos2 == f2->startpos2) return 0; else return (f1->startpos2 < f2->startpos2 ? -1 : 1); } static void* gt_pdom_per_domain_worker_thread(void *data) { GtPdomSharedMem *shared; GtPdomModel *hmm; P7_PIPELINE *pli; P7_TOPHITS *hits = NULL; bool best_fwd = TRUE; GtFragment *frags; GtPdomModelHit *hit; shared = (GtPdomSharedMem*) data; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_OPROFILE *om = NULL; for (;;) { unsigned long h = 0, d = 0, nof_domains = 0; P7_DOMAIN *lastdom = NULL; gt_mutex_lock(shared->in_lock); /* Have all HMMs been distributed? If so, we are done here. */ if (shared->next_hmm == gt_array_size(shared->gpf->models)) { gt_mutex_unlock(shared->in_lock); return NULL; } /* Get work from HMM list */ hmm = *(GtPdomModel**) gt_array_get(shared->gpf->models, shared->next_hmm); shared->next_hmm++; /* work claimed, release input */ gt_mutex_unlock(shared->in_lock); /* prepare HMM for searching */ pli = p7_pipeline_Create(shared->gpf->getopts, hmm->model->M, 400, p7_SEARCH_SEQS); bg = p7_bg_Create(hmm->abc); gm = p7_profile_Create(hmm->model->M, hmm->abc); om = p7_oprofile_Create(hmm->model->M, hmm->abc); p7_ProfileConfig(hmm->model, bg, gm, 400, p7_LOCAL); p7_oprofile_Convert(gm, om); p7_pli_NewModel(pli, om, bg); hit = gt_pdom_model_hit_new(shared->gpf->elem); gt_hmmer_search(pli, gt_str_get(shared->fwd[0]), hmm->abc, om, bg, "0+", hit->hits_fwd, shared->out_lock); gt_hmmer_search(pli, gt_str_get(shared->fwd[1]), hmm->abc, om, bg, "1+", hit->hits_fwd, shared->out_lock); gt_hmmer_search(pli, gt_str_get(shared->fwd[2]), hmm->abc, om, bg, "2+", hit->hits_fwd, shared->out_lock); gt_hmmer_search(pli, gt_str_get(shared->rev[0]), hmm->abc, om, bg, "0-", hit->hits_rev, shared->out_lock); gt_hmmer_search(pli, gt_str_get(shared->rev[1]), hmm->abc, om, bg, "1-", hit->hits_rev, shared->out_lock); gt_hmmer_search(pli, gt_str_get(shared->rev[2]), hmm->abc, om, bg, "2-", hit->hits_rev, shared->out_lock); p7_tophits_Sort(hit->hits_fwd); p7_tophits_Sort(hit->hits_rev); p7_tophits_Threshold(hit->hits_fwd, pli); p7_tophits_Threshold(hit->hits_rev, pli); p7_pipeline_Destroy(pli); p7_oprofile_Destroy(om); p7_profile_Destroy(gm); p7_bg_Destroy(bg); /* check if there were any hits */ if (hit->hits_fwd->nreported > 0 || hit->hits_rev->nreported > 0) { gt_log_log("N: %llu/%llu, nreported: %llu/%llu, nincluded: %llu/%llu", (unsigned long long) hit->hits_fwd->N, (unsigned long long) hit->hits_rev->N, (unsigned long long) hit->hits_fwd->nreported, (unsigned long long) hit->hits_rev->nreported, (unsigned long long) hit->hits_fwd->nincluded, (unsigned long long) hit->hits_rev->nincluded); shared->results->empty = FALSE; if (hit->hits_fwd->nreported > 0) { if (hit->hits_rev->nreported > 0) { if (gt_double_compare(hit->hits_fwd->hit[0]->score, hit->hits_rev->hit[0]->score) < 0) best_fwd = FALSE; } else best_fwd = TRUE; } else best_fwd = FALSE; /* determine best-scoring strand */ hits = (best_fwd ? hit->hits_fwd : hit->hits_rev); gt_assert(hits); /* determine number of domain hits, track single domain hits */ for (h = 0; h < hits->N; h++) { if (hits->hit[h]->flags & p7_IS_REPORTED) { for (d = 0; d < hits->hit[h]->ndom; d++) { if (hits->hit[h]->dcl[d].is_reported) { nof_domains++; lastdom = &(hits->hit[h]->dcl[d]); gt_log_log("domain %s, from: %lu, to %lu, on %s (%lu/%d)", hits->hit[h]->dcl[d].ad->hmmname, hits->hit[h]->dcl[d].ad->sqfrom, hits->hit[h]->dcl[d].ad->sqto, hits->hit[h]->dcl[d].ad->sqname, d+1, hits->hit[h]->ndom); } } } } /* no need to chain if there is only one domain hit */ if (nof_domains > 1) { unsigned long i = 0; gt_log_log("nof_domains: %lu", nof_domains); /* create GtFragment set for chaining */ frags = (GtFragment*) gt_calloc(nof_domains, sizeof (GtFragment)); for (h = 0; h < hits->N; h++) { if (hits->hit[h]->flags & p7_IS_REPORTED) { for (d = 0; d < hits->hit[h]->ndom; d++) { if (hits->hit[h]->dcl[d].is_reported) { P7_DOMAIN *dom = &(hits->hit[h]->dcl[d]); GtPdomSingleHit *sh = gt_pdom_single_hit_new(dom, hit); gt_pdom_model_hit_add_single_hit(hit, sh); frags[i].startpos1 = dom->ad->hmmfrom; frags[i].endpos1 = dom->ad->hmmto; frags[i].startpos2 = dom->ad->sqfrom; frags[i].endpos2 = dom->ad->sqto; /* let weight(f) be targetlength(f) multiplied by bitscore(f) */ frags[i].weight = (dom->ad->sqto - dom->ad->sqfrom + 1) * dom->bitscore; frags[i].data = sh; i++; } } } } /* sort GtFragments by position */ qsort(frags, nof_domains, sizeof (GtFragment), gt_fragcmp); for (i=0;igpf->chain_max_gap_length, chainproc, &chainno); gt_free(frags); } else { /* single domain hit, no chaining necessary */ if (lastdom != NULL) { GtPdomSingleHit *sh; sh = gt_pdom_single_hit_new(lastdom, hit); gt_pdom_model_hit_add_single_hit(hit, sh); gt_pdom_single_hit_set_chained(sh, 0UL); } } /* Lock results, we want to write to the result hashtable */ gt_mutex_lock(shared->out_lock); /* register results */ gt_hashmap_add(shared->results->domains, gt_pdom_model_ref(hmm), hit); if (best_fwd) { shared->results->combined_e_value_fwd += log(hit->hits_fwd->hit[0]->pvalue); hit->strand = GT_STRAND_FORWARD; } else { shared->results->combined_e_value_rev += log(hit->hits_rev->hit[0]->pvalue); hit->strand = GT_STRAND_REVERSE; } /* unlock results */ gt_mutex_unlock(shared->out_lock); } else gt_pdom_model_hit_delete(hit); } } static void gt_pdom_run_threads(GtArray *hmms, GtStr **fwd, GtStr **rev, GtPdomResults *results, GtPdomFinder *gpf) { GtPdomSharedMem *shared; gt_assert(hmms && fwd && rev && results && gpf); shared = gt_calloc(1, sizeof (GtPdomSharedMem)); shared->hmms = hmms; shared->fwd = fwd; shared->rev = rev; shared->next_hmm = 0; shared->results = results; shared->gpf = gpf; shared->in_lock = gt_mutex_new(); shared->out_lock = gt_mutex_new(); gt_multithread(gt_pdom_per_domain_worker_thread, shared, NULL); gt_mutex_delete(shared->in_lock); gt_mutex_delete(shared->out_lock); gt_free(shared); } GtPdomResults* gt_pdom_finder_find(GtPdomFinder *gpf, const char *seq, const char *rev_seq, GtLTRElement *element, GtError *err) { GtStr *fwd[3], *rev[3]; char translated; unsigned long seqlen; GtCodonIterator *ci; GtPdomResults *results = NULL; GtTranslatorStatus status; GtTranslator *tr; int i, had_err = 0; unsigned int frame; gt_assert(seq && rev_seq && strlen(seq) == strlen(rev_seq) && element); gt_error_check(err); seqlen = gt_ltrelement_length(element); gpf->elem = element; results = gt_pdom_results_new(); for (i=0;i<3;i++) { fwd[i] = gt_str_new(); rev[i] = gt_str_new(); } ci = gt_codon_iterator_simple_new(seq, seqlen, NULL); gt_assert(ci); tr = gt_translator_new(ci); /* create translations */ status = gt_translator_next(tr, &translated, &frame, err); while (status == GT_TRANSLATOR_OK && translated) { gt_str_append_char(fwd[frame], translated); status = gt_translator_next(tr, &translated, &frame, NULL); } if (status == GT_TRANSLATOR_ERROR) had_err = -1; if (!had_err) { gt_codon_iterator_delete(ci); ci = gt_codon_iterator_simple_new(rev_seq, seqlen, NULL); gt_translator_set_codon_iterator(tr, ci); status = gt_translator_next(tr, &translated, &frame, err); while (status == GT_TRANSLATOR_OK && translated) { gt_str_append_char(rev[frame], translated); status = gt_translator_next(tr, &translated, &frame, NULL); } if (status == GT_TRANSLATOR_ERROR) had_err = -1; } if (!had_err) { for (i=0;i<3;i++) { gt_assert(gt_str_length(fwd[i]) == (seqlen - i) / 3); gt_assert(gt_str_length(rev[i]) == (seqlen - i) / 3); } /* start worker threads */ gt_pdom_run_threads(gpf->models, fwd, rev, results, gpf); } for (i=0;i<3;i++) { gt_str_delete(fwd[i]); gt_str_delete(rev[i]); } gt_codon_iterator_delete(ci); gt_translator_delete(tr); return results; } /* --------------- GtPdomFinder ------------------------------------- */ static int gt_pdom_finder_load_files(GtPdomFinder *gpf, GtStrArray *files, GtError *err) { int had_err = 0; GtPdomModel *gpm = NULL; unsigned long i; gt_assert(gpf && files && err); for (i=0;iabc = abc; if (had_err) { if (hmmfp) p7_hmmfile_Close(hmmfp); break; } } if (!had_err) { gt_log_log("HMM file '%s' loaded.", hmmfile); gt_array_add(gpf->models, gpm); } if (hmmfp) p7_hmmfile_Close(hmmfp); } return had_err; } static void gt_pdom_clear_hmms(GtArray *hmms) { unsigned long i; if (!hmms) return; for (i=0;i0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "E-value cutoff for reporting significant sequence hits", 0 }, { "-T", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "bit score cutoff for reporting significant sequence hits", 0 }, { "-Z", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of comparisons done, for E-value calculation", 0 }, { "--domE", eslARG_REAL,"1000.0", NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "E-value cutoff for reporting individual domains", 0 }, { "--domT", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, "--cut_ga,--cut_nc,--cut_tc", "bit score cutoff for reporting individual domains", 0 }, { "--domZ", eslARG_REAL, FALSE, NULL, "x>0", NULL, NULL, NULL, "set # of significant seqs, for domain E-value calculation", 0 }, { "--cut_ga", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--seqE,--seqT,--domE,--domT", "use GA gathering threshold bit score cutoffs in ", 0 }, { "--cut_nc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--seqE,--seqT,--domE,--domT", "use NC noise threshold bit score cutoffs in ", 0 }, { "--cut_tc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--seqE,--seqT,--domE,--domT", "use TC trusted threshold bit score cutoffs in ", 0 }, { "--max", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, "--F1,--F2,--F3", "Turn all heuristic filters off (less speed, more power)", 0 }, { "--F1", eslARG_REAL, "0.02", NULL, NULL, NULL, NULL, "--max", "Stage 1 (MSV) threshold: promote hits w/ P <= F1", 0 }, { "--F2", eslARG_REAL, "1e-3", NULL, NULL, NULL, NULL, "--max", "Stage 2 (Vit) threshold: promote hits w/ P <= F2", 0 }, { "--F3", eslARG_REAL, "1e-5", NULL, NULL, NULL, NULL, "--max", "Stage 3 (Fwd) threshold: promote hits w/ P <= F3", 0 }, { "--nobias", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, "--max", "turn off composition bias filter", 0 }, { "--nonull2", eslARG_NONE, NULL, NULL, NULL, NULL, NULL, NULL, "turn off biased composition score corrections", 0 }, { "--incE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, NULL, "consider sequences <= this E-value threshold as significant", 5 }, { "--incdomE", eslARG_REAL, "0.01", NULL, "x>0", NULL, NULL, NULL, "consider domains <= this E-value threshold as significant", 5 }, { "--incT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, NULL, "consider sequences >= this score threshold as significant", 5 }, { "--incdomT", eslARG_REAL, FALSE, NULL, NULL, NULL, NULL, NULL, "consider domains >= this score threshold as significant", 5 }, { "--seed", eslARG_INT, "42", NULL, "n>=0", NULL, NULL, NULL, "set RNG seed to (if 0: one-time arbitrary seed)", 0 }, { "--acc", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "output target accessions instead of names if possible", 0 }, { "--noali", eslARG_NONE, FALSE, NULL, NULL, NULL, NULL, NULL, "don't output alignments, so output is smaller", 2 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; GtPdomFinder* gt_pdom_finder_new(GtStrArray *hmmfiles, double eval_cutoff, unsigned int chain_max_gap_length, GtPdomCutoff cutoff, GtError *err) { int had_err = 0; GtPdomFinder *gpf; GtStr *cmd; /* for HMMER3 parameterization, we need to construct a virtual command line for Easel to parse, see below */ gt_assert(hmmfiles && err); gpf = gt_calloc(1, sizeof (GtPdomFinder)); gpf->getopts = esl_getopts_Create(gt_pdom_hmmer3_options); gpf->hmm_files = gt_str_array_ref(hmmfiles); gpf->chain_max_gap_length = chain_max_gap_length; gpf->models = gt_array_new(sizeof (struct GtPdomModel*)); gpf->glob_eval_cutoff = eval_cutoff; had_err = gt_pdom_finder_load_files(gpf, hmmfiles, err); if (!had_err) { cmd = gt_str_new_cstr("--noali "); switch (cutoff) { case GT_PHMM_CUTOFF_GA: gt_str_append_cstr(cmd, "--cut_ga "); break; case GT_PHMM_CUTOFF_TC: gt_str_append_cstr(cmd, "--cut_tc "); break; case GT_PHMM_CUTOFF_NONE: gt_str_append_cstr(cmd, "-E "); gt_str_append_double(cmd, eval_cutoff, 100); gt_str_append_cstr(cmd, " "); break; } had_err = esl_opt_ProcessSpoof(gpf->getopts, gt_str_get(cmd)); gt_str_delete(cmd); } p7_FLogsumInit(); if (had_err) { gt_pdom_clear_hmms(gpf->models); gt_str_array_delete(gpf->hmm_files); gt_free(gpf); return NULL; } else return gpf; } void gt_pdom_finder_delete(GtPdomFinder *gpf) { if (!gpf) return; gt_pdom_clear_hmms(gpf->models); if (gpf->getopts) esl_getopts_Destroy(gpf->getopts); gt_str_array_delete(gpf->hmm_files); gt_free(gpf); } #endif genometools-1.5.1/src/ltr/pdom.h000066400000000000000000000110171211610345200165440ustar00rootroot00000000000000/* Copyright (c) 2008-2010 Sascha Steinbiss Copyright (c) 2008-2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef PDOM_H #define PDOM_H #ifdef HAVE_HMMER #include "core/array.h" #include "core/error.h" #include "core/hashmap.h" #include "core/strand.h" #include "core/str_array.h" #include "ltr/ltrelement.h" typedef enum { GT_PHMM_CUTOFF_TC, GT_PHMM_CUTOFF_GA, GT_PHMM_CUTOFF_NONE } GtPdomCutoff; typedef struct GtPdomOptions { double evalue_cutoff; GtStrArray *hmm_files; unsigned int chain_max_gap_length; bool write_alignments, write_aaseqs, output_all_chains; GtPdomCutoff cutoff; } GtPdomOptions; typedef struct GtPdomFinder GtPdomFinder; typedef struct GtPdomModel GtPdomModel; typedef struct GtPdomSingleHit GtPdomSingleHit; typedef struct GtPdomModelHit GtPdomModelHit; typedef struct GtPdomResults GtPdomResults; typedef int (*GtPdomIteratorFunc)(GtPdomModel *model, GtPdomModelHit *hit, void *data, GtError*); /* acts as a factory for GtPdomResults */ GtPdomFinder* gt_pdom_finder_new(GtStrArray *hmmfiles, double eval_cutoff, unsigned int chain_max_gap_length, GtPdomCutoff cutoff, GtError*); unsigned int gt_pdom_finder_get_nof_threads(const GtPdomFinder*); unsigned int gt_pdom_finder_get_max_gap_length(const GtPdomFinder*); double gt_pdom_finder_get_eval_cutoff(const GtPdomFinder*); GtStrArray* gt_pdom_finder_get_model_filenames(const GtPdomFinder*); unsigned long gt_pdom_finder_get_number_of_models(const GtPdomFinder*); GtPdomModel* gt_pdom_finder_get_model(const GtPdomModel*, unsigned long); GtPdomResults* gt_pdom_finder_find(GtPdomFinder*, const char *seq, const char *rev_seq, GtLTRElement*, GtError *err); void gt_pdom_finder_delete(GtPdomFinder*); /* holds results for all models */ int gt_pdom_results_foreach_domain_hit(GtPdomResults*, GtPdomIteratorFunc, void*, GtError*); bool gt_pdom_results_empty(GtPdomResults*); double gt_pdom_results_get_combined_evalue_fwd(GtPdomResults*); double gt_pdom_results_get_combined_evalue_rev(GtPdomResults*); void gt_pdom_results_delete(GtPdomResults*); /* holds information about a single domain model */ const char* gt_pdom_model_get_name(const GtPdomModel*); const char* gt_pdom_model_get_acc(const GtPdomModel*); /* holds hits for a single domain model */ unsigned long gt_pdom_model_hit_num_of_single_hits(const GtPdomModelHit*); GtPdomSingleHit* gt_pdom_model_hit_single_hit(const GtPdomModelHit*, unsigned long i); GtStrand gt_pdom_model_hit_get_best_strand(const GtPdomModelHit*); /* holds information about an individual hit */ GtPhase gt_pdom_single_hit_get_phase(const GtPdomSingleHit*); GtRange gt_pdom_single_hit_get_range(const GtPdomSingleHit*); double gt_pdom_single_hit_get_evalue(const GtPdomSingleHit*); void gt_pdom_single_hit_format_alignment(const GtPdomSingleHit*, unsigned long width, GtStr *dest); void gt_pdom_single_hit_get_aaseq(const GtPdomSingleHit*, GtStr *dest); bool gt_pdom_single_hit_is_chained(GtPdomSingleHit *singlehit); GtArray* gt_pdom_single_hit_get_chains(GtPdomSingleHit *singlehit); #endif #endif genometools-1.5.1/src/ltr/ppt.c000066400000000000000000000431001211610345200164010ustar00rootroot00000000000000/* Copyright (c) 2008-2011 Sascha Steinbiss Copyright (c) 2008-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ensure.h" #include "core/log.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/minmax.h" #include "core/xansi_api.h" #include "core/array.h" #include "extended/reverse_api.h" #include "ltr/ppt.h" /* This enumeration defines the states in the PPT detection HMM. */ typedef enum { PPT_IN, PPT_OUT, PPT_UBOX, PPT_N, PPT_NOF_STATES } GtPPTStates; struct GtPPTHit { GtRange rng; double score; GtPPTStates state; GtPPTHit *ubox; GtStrand strand; GtPPTResults *res; }; struct GtPPTResults { GtArray *hits; GtLTRElement *elem; GtPPTOptions *opts; }; static GtPPTResults* gt_ppt_results_new(GtLTRElement *elem, GtPPTOptions *opts) { GtPPTResults *res = gt_calloc((size_t) 1, sizeof (GtPPTResults)); res->elem = elem; res->opts = opts; res->hits = gt_array_new(sizeof (GtPPTHit*)); return res; } static GtPPTHit* gt_ppt_hit_new(GtStrand strand, GtPPTResults *r) { GtPPTHit *h = gt_calloc((size_t) 1, sizeof (GtPPTHit)); gt_assert(h); h->strand = strand; h->res = r; h->score = 0.0; return h; } GtRange gt_ppt_hit_get_coords(const GtPPTHit *h) { GtRange rng; gt_assert(h); rng.start = h->rng.start; rng.end = h->rng.end; switch (h->strand) { case GT_STRAND_FORWARD: default: rng.start = h->res->elem->rightLTR_5 - 1 - h->res->opts->radius + rng.start; rng.end = rng.start + (gt_range_length(&h->rng) - 1); break; case GT_STRAND_REVERSE: rng.end = h->res->elem->leftLTR_3 + 1 + h->res->opts->radius - rng.start; rng.start = rng.end - (gt_range_length(&h->rng) - 1); break; } gt_assert(gt_range_length(&rng) == gt_range_length(&h->rng)); return rng; } GtPPTHit* gt_ppt_hit_get_ubox(const GtPPTHit *h) { gt_assert(h); return h->ubox; } GtStrand gt_ppt_hit_get_strand(const GtPPTHit *h) { gt_assert(h); return h->strand; } unsigned long gt_ppt_results_get_number_of_hits(GtPPTResults *r) { gt_assert(r); return gt_array_size(r->hits); } GtPPTHit* gt_ppt_results_get_ranked_hit(GtPPTResults *r, unsigned long i) { gt_assert(r); return *(GtPPTHit**) gt_array_get(r->hits, i); } GtHMM* gt_ppt_hmm_new(const GtAlphabet *alpha, GtPPTOptions *opts) { GtHMM *hmm; double non_u_prob = 0.0; gt_assert(alpha); hmm = gt_hmm_new((unsigned int) PPT_NOF_STATES, gt_alphabet_size(alpha)); /* set emission probabilities */ gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_OUT, (unsigned int) gt_alphabet_encode(alpha, 'G'), opts->bkg_g_prob); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_OUT, (unsigned int) gt_alphabet_encode(alpha, 'A'), opts->bkg_a_prob); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_OUT, (unsigned int) gt_alphabet_encode(alpha, 'C'), opts->bkg_c_prob); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_OUT, (unsigned int) gt_alphabet_encode(alpha, 'T'), opts->bkg_t_prob); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_IN, (unsigned int) gt_alphabet_encode(alpha, 'G'), opts->ppt_purine_prob/2); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_IN, (unsigned int) gt_alphabet_encode(alpha, 'A'), opts->ppt_purine_prob/2); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_IN, (unsigned int) gt_alphabet_encode(alpha, 'C'), opts->ppt_pyrimidine_prob/2); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_IN, (unsigned int) gt_alphabet_encode(alpha, 'T'), opts->ppt_pyrimidine_prob/2); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_UBOX, (unsigned int) gt_alphabet_encode(alpha, 'T'), opts->ubox_u_prob); /* calculate non-U probabilities (still uniform, may be optimised) */ non_u_prob = (1.0 - (opts->ubox_u_prob)) / ((double) 3); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_UBOX, (unsigned int) gt_alphabet_encode(alpha, 'G'), non_u_prob); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_UBOX, (unsigned int) gt_alphabet_encode(alpha, 'A'), non_u_prob); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_UBOX, (unsigned int) gt_alphabet_encode(alpha, 'C'), non_u_prob); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_N, (unsigned int) gt_alphabet_encode(alpha, 'G'), 0.00); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_N, (unsigned int) gt_alphabet_encode(alpha, 'A'), 0.00); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_N, (unsigned int) gt_alphabet_encode(alpha, 'C'), 0.00); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_N, (unsigned int) gt_alphabet_encode(alpha, 'T'), 0.00); gt_hmm_set_emission_probability(hmm, (unsigned int) PPT_N, (unsigned int) gt_alphabet_encode(alpha, 'N'), 1.00); /* set transition probabilities */ gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_OUT, (unsigned int) PPT_IN, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_OUT, (unsigned int) PPT_N, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_OUT, (unsigned int) PPT_UBOX, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_UBOX, (unsigned int) PPT_OUT, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_UBOX, (unsigned int) PPT_N, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_UBOX, (unsigned int) PPT_IN, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_IN, (unsigned int) PPT_UBOX, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_IN, (unsigned int) PPT_OUT, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_IN, (unsigned int) PPT_N, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_N, (unsigned int) PPT_UBOX, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_N, (unsigned int) PPT_OUT, 0.05); gt_hmm_set_transition_probability(hmm, (unsigned int) PPT_N, (unsigned int) PPT_IN, 0.05); gt_hmm_set_missing_transition_probabilities(hmm); if (!gt_hmm_is_valid(hmm)) { gt_hmm_delete(hmm); return NULL; } else return hmm; } static inline double gt_ppt_score(unsigned long radius, unsigned long end) { double ret; unsigned long r2; r2 = radius * radius; ret = ((double) r2 - pow(fabs((double) radius - (double) end), 2.0))/(double) r2; return ret; } static int gt_ppt_hit_cmp(const void *h1, const void *h2) { GtPPTHit* ph1 = *(GtPPTHit**) h1; GtPPTHit* ph2 = *(GtPPTHit**) h2; gt_assert(h1 && h2); return gt_double_compare(ph2->score, ph1->score); } static bool gt_ubox_ok(GtPPTHit *hit, GtRange uboxlen) { gt_assert(hit); return (hit->state == PPT_UBOX && hit->rng.end-hit->rng.start+1 >= uboxlen.start && hit->rng.end-hit->rng.start+1 <= uboxlen.end); } static bool gt_ppt_ok(GtPPTHit *hit, GtRange pptlen) { gt_assert(hit); return (hit->state == PPT_IN && hit->rng.end-hit->rng.start+1 >= pptlen.start && hit->rng.end-hit->rng.start+1 <= pptlen.end); } static void gt_group_hits(unsigned int *decoded, GtPPTResults *results, unsigned long radius, GT_UNUSED const char *seq, GtStrand strand) { GtPPTHit *cur_hit = NULL, *potential_ubox = NULL; unsigned long i = 0; gt_assert(decoded && results && strand != GT_STRAND_UNKNOWN); /* group hits into stretches */ cur_hit = gt_ppt_hit_new(strand, results); for (i = 0; i < 2 * radius - 1; i++) { cur_hit->state = (GtPPTStates) decoded[i]; cur_hit->rng.end = i; if (decoded[i+1] != decoded[i] || i + 2 == 2 * radius) { switch (cur_hit->state) { case PPT_UBOX: if (gt_ubox_ok(cur_hit, results->opts->ubox_len)) { if (potential_ubox != NULL) { gt_free(potential_ubox); potential_ubox = NULL; } potential_ubox = cur_hit; cur_hit = NULL; } else { gt_free(cur_hit); cur_hit = NULL; } break; case PPT_IN: if (gt_ppt_ok(cur_hit, results->opts->ppt_len)) { cur_hit->score = gt_ppt_score(radius, cur_hit->rng.end); gt_array_add(results->hits, cur_hit); if (potential_ubox != NULL) { if (cur_hit->rng.start - potential_ubox->rng.end <= (unsigned long) results->opts->max_ubox_dist) { /* this PPT has a U-box, handle accordingly */ cur_hit->ubox = potential_ubox; } else { gt_free(potential_ubox); } potential_ubox = NULL; } cur_hit = NULL; } else { if (potential_ubox != NULL) { gt_free(potential_ubox); potential_ubox = NULL; } gt_free(cur_hit); cur_hit = NULL; } break; default: if (potential_ubox != NULL) { gt_free(potential_ubox); potential_ubox = NULL; } gt_free(cur_hit); cur_hit = NULL; break; } if (i+2!=2*radius) { /* we assume that the current hit has been processed */ gt_assert(cur_hit == NULL); cur_hit = gt_ppt_hit_new(strand, results); cur_hit->rng.start = i+1; } } } if (cur_hit != NULL) cur_hit->rng.end++; gt_free(potential_ubox); } GtPPTResults* gt_ppt_find(const char *seq, const char *rev_seq, GtLTRElement *element, GtPPTOptions *o) { unsigned int *encoded_seq=NULL, *decoded=NULL; GtAlphabet *alpha; GtHMM *hmm; GtPPTResults *results = NULL; unsigned long i = 0, radius = 0, seqlen = gt_ltrelement_length(element), ltrlen = 0; gt_assert(seq && rev_seq && element && o); results = gt_ppt_results_new(element, o); alpha = gt_alphabet_new_dna(); hmm = gt_ppt_hmm_new(alpha, o); /* do PPT finding on forward strand * -------------------------------- */ ltrlen = gt_ltrelement_rightltrlen(element); /* make sure that we do not cross the LTR boundary */ radius = MIN((unsigned long) o->radius, ltrlen-1); /* encode sequence */ encoded_seq = gt_malloc(sizeof (unsigned int) * seqlen); for (i=0;iradius, ltrlen-1); /* encode sequence */ for (i=0;ihits, gt_ppt_hit_cmp); gt_free(encoded_seq); gt_free(decoded); gt_alphabet_delete(alpha); gt_hmm_delete(hmm); return results; } void gt_ppt_results_delete(GtPPTResults *results) { unsigned long i; if (results == NULL) return; if (results->hits != NULL) { for (i=0;ihits);i++) { GtPPTHit * hit = *(GtPPTHit**) gt_array_get(results->hits,i); if (hit->ubox != NULL) gt_free(hit->ubox); gt_free(hit); } gt_array_delete(results->hits); } gt_free(results); } int gt_ppt_unit_test(GtError *err) { int had_err = 0; GtPPTOptions o; GtPPTResults *rs; GtPPTHit *h; GtLTRElement element; GtRange rng; char *rev_seq, *seq, tmp[BUFSIZ]; const char *fullseq = "aaaaaaaaaaaaaaaaaaaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "aaag" "tcttctttct" /* <- PPT reverse */ "aaaaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatttt" /* PPT forward -> */ "gggatagggggag" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "tatagcactgcatttcgaatatagtttcgaatatagcactgcatttcgaa" "aaaaaaaaaaaaaaaaaaaa"; seq = gt_malloc(600 * sizeof (char)); rev_seq = gt_malloc(600 * sizeof (char)); memcpy(seq, fullseq + 20, (size_t) 600); memcpy(rev_seq, fullseq + 20, (size_t) 600); gt_ensure(had_err, !gt_reverse_complement(rev_seq, 600UL, err)); element.leftLTR_5 = 20UL; element.leftLTR_3 = 119UL; element.rightLTR_5 = 520UL; element.rightLTR_3 = 619UL; /* run PPT finding */ memset(&o, 0, sizeof (GtPPTOptions)); o.ppt_len.start = 5UL; o.ppt_len.end = 15UL; o.ubox_len.start = 2UL; o.ubox_len.end = 15UL; o.radius = 30U; o.ppt_pyrimidine_prob = PPT_PYRIMIDINE_PROB; o.ppt_purine_prob = PPT_PURINE_PROB; o.bkg_a_prob = BKG_A_PROB; o.bkg_g_prob = BKG_G_PROB; o.bkg_t_prob = BKG_T_PROB; o.bkg_c_prob = BKG_C_PROB; o.ubox_u_prob = UBOX_U_PROB; rs = gt_ppt_find(seq, rev_seq, &element, &o); gt_ensure(had_err, gt_ppt_results_get_number_of_hits(rs) == 2UL); h = gt_ppt_results_get_ranked_hit(rs, 0); gt_ensure(had_err, h); rng = gt_ppt_hit_get_coords(h); gt_ensure(had_err, rng.start == 507UL); gt_ensure(had_err, rng.end == 519UL); memset(tmp, 0, BUFSIZ); memcpy(tmp, fullseq + (rng.start * sizeof (char)), (size_t) ((rng.end - rng.start + 1) * sizeof (char))); gt_ensure(had_err, strcmp(tmp, "gggatagggggag" ) == 0); h = gt_ppt_results_get_ranked_hit(rs, 1UL); gt_ensure(had_err, h); rng = gt_ppt_hit_get_coords(h); gt_ensure(had_err, rng.start == 124UL); gt_ensure(had_err, rng.end == 133UL); memset(tmp, 0, BUFSIZ); memcpy(tmp, fullseq + (rng.start * sizeof (char)), (size_t) ((rng.end - rng.start + 1) * sizeof (char))); gt_ensure(had_err, strcmp(tmp, "tcttctttct" ) == 0); gt_free(rev_seq); gt_free(seq); gt_ppt_results_delete(rs); return had_err; } genometools-1.5.1/src/ltr/ppt.h000066400000000000000000000044331211610345200164140ustar00rootroot00000000000000/* Copyright (c) 2008-2011 Sascha Steinbiss Copyright (c) 2008-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef PPT_H #define PPT_H #include "core/alphabet.h" #include "core/range.h" #include "core/strand.h" #include "core/undef_api.h" #include "extended/hmm.h" #include "ltr/ltrelement.h" #define PPT_PURINE_PROB 0.97 #define PPT_PYRIMIDINE_PROB 0.03 #define BKG_A_PROB 0.25 #define BKG_C_PROB 0.25 #define BKG_G_PROB 0.25 #define BKG_T_PROB 0.25 #define UBOX_U_PROB 0.91 typedef struct { GtRange ppt_len, ubox_len; double ppt_pyrimidine_prob, ppt_purine_prob, bkg_a_prob, bkg_g_prob, bkg_t_prob, bkg_c_prob, ubox_u_prob; unsigned int radius, max_ubox_dist; } GtPPTOptions; typedef struct GtPPTHit GtPPTHit; typedef struct GtPPTResults GtPPTResults; GtHMM* gt_ppt_hmm_new(const GtAlphabet *alpha, GtPPTOptions *opts); GtPPTResults* gt_ppt_find(const char *seq, const char *rev_seq, GtLTRElement *element, GtPPTOptions*); GtRange gt_ppt_hit_get_coords(const GtPPTHit*); GtPPTHit* gt_ppt_hit_get_ubox(const GtPPTHit*); GtStrand gt_ppt_hit_get_strand(const GtPPTHit*); unsigned long gt_ppt_results_get_number_of_hits(GtPPTResults*); GtPPTHit* gt_ppt_results_get_ranked_hit(GtPPTResults*, unsigned long); void gt_ppt_results_delete(GtPPTResults*); int gt_ppt_unit_test(GtError*); #endif genometools-1.5.1/src/lualib.c000066400000000000000000000012121211610345200162430ustar00rootroot00000000000000/* * lualib.c -- Lua core and libraries in a single file */ #define luaall_c #include "lapi.c" #include "lcode.c" #include "ldebug.c" #include "ldo.c" #include "ldump.c" #include "lfunc.c" #include "lgc.c" #include "llex.c" #include "lmem.c" #include "lobject.c" #include "lopcodes.c" #include "lparser.c" #include "lstate.c" #include "lstring.c" #include "ltable.c" #include "ltm.c" #include "lundump.c" #include "lvm.c" #include "lzio.c" #include "lauxlib.c" #include "lbaselib.c" #include "ldblib.c" #include "liolib.c" #include "linit.c" #include "lmathlib.c" #include "loadlib.c" #include "loslib.c" #include "lstrlib.c" #include "ltablib.c" genometools-1.5.1/src/match/000077500000000000000000000000001211610345200157275ustar00rootroot00000000000000genometools-1.5.1/src/match/absdfstrans-def.h000066400000000000000000000020011211610345200211370ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ABSDFSTRANS_DEF_H #define ABSDFSTRANS_DEF_H typedef struct AbstractDfstransformer AbstractDfstransformer; typedef struct Limdfsconstinfo Limdfsconstinfo; #endif genometools-1.5.1/src/match/absdfstrans-imp.h000066400000000000000000000071041211610345200211770ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ABSDFSTRANS_IMP_H #define ABSDFSTRANS_IMP_H #include "core/defined-types.h" #include "absdfstrans-def.h" #include "procmatch.h" typedef unsigned long Aliasdfsstate; #define DECLAREPTRDFSSTATE(V)\ Aliasdfsstate * V #undef SKDEBUG typedef enum { Limdfssuccess, /* success of traversal */ Limdfscontinue, /* no success, but still have the chance to find result */ Limdfsstop /* no success possible */ } Limdfsstatus; typedef struct { Limdfsstatus status; unsigned long pprefixlen, /* only defined if limdfsstatus = Limdfssuccess */ distance; /* only defined if limdfsstatus = Limdfssuccess */ } Limdfsresult; struct AbstractDfstransformer { size_t sizeofdfsstate; Limdfsconstinfo *(*allocatedfsconstinfo)(unsigned int alphasize); void (*initdfsconstinfo)(Limdfsconstinfo *dfsconstinfo, unsigned int alphasize, ...); void (*extractdfsconstinfo)(Processresult processresult, void *processinfo, const void *patterninfo, Limdfsconstinfo *dfsconstinfo); void (*freedfsconstinfo)(Limdfsconstinfo **dfsconstinfo); void (*initrootLimdfsstate)(DECLAREPTRDFSSTATE(aliasstate), Limdfsconstinfo *dfsconstinfo); void (*initLimdfsstackelem)(DECLAREPTRDFSSTATE(aliasstate)); void (*freeLimdfsstackelem)(DECLAREPTRDFSSTATE(aliasstate)); void (*copyLimdfsstate)(DECLAREPTRDFSSTATE(deststate), const DECLAREPTRDFSSTATE(srcstate), Limdfsconstinfo *dfsconstinfo); void (*fullmatchLimdfsstate)(Limdfsresult *limdfsresult, DECLAREPTRDFSSTATE(aliascolumn), unsigned long left, unsigned long right, unsigned long width, unsigned long currentdepth, Limdfsconstinfo *dfsconstinfo); void (*nextLimdfsstate)(const Limdfsconstinfo *dfsconstinfo, DECLAREPTRDFSSTATE(aliasoutstate), unsigned long currentdepth, GtUchar currentchar, const DECLAREPTRDFSSTATE(aliasinstate)); void (*inplacenextLimdfsstate)(const Limdfsconstinfo *dfsconstinfo, DECLAREPTRDFSSTATE(aliasstate), unsigned long currentdepth, GtUchar currentchar); #ifdef SKDEBUG void (*showLimdfsstate)(const DECLAREPTRDFSSTATE(aliasstate), unsigned long currentdepth, const Limdfsconstinfo *dfsconstinfo); #endif }; #endif genometools-1.5.1/src/match/apmeoveridx.c000066400000000000000000000320541211610345200204220ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/types_api.h" #include "core/unused_api.h" #include "core/ma_api.h" #include "core/encseq.h" #include "core/defined-types.h" #include "apmeoveridx.h" #include "absdfstrans-imp.h" #include "initeqsvec.h" #define UNDEFMAXLEQK (mti->patternlength+1) #define SUCCESSMAXLEQK mti->patternlength typedef struct { unsigned long Pv, /* the plus-vector for Myers Algorithm */ Mv, /* the minus-vector for Myers Algorithm */ maxleqk; /* \(\max\{i\in[0,m]\mid D(i)\leq k\}\) where \(m\) is the length of the pattern, \(k\) is the distance threshold, and \(D\) is the current distance column */ unsigned long lastdistvalue; /* the score for the given depth */ } ApmeoveridxLimdfsstate; typedef struct { bool skpp; unsigned long maxintervalwidth, patternlength, maxdistance, *eqsvector; } ApmeoveridxLimdfsconstinfo; #ifdef SKDEBUG static void showmaxleqvalue(FILE *fp,unsigned long maxleqk, const Limdfsconstinfo *mti) { if (maxleqk == UNDEFMAXLEQK) { fprintf(fp,"undefined"); } else { fprintf(fp,"%lu",maxleqk); } } static void apme_showLimdfsstate(const DECLAREPTRDFSSTATE(aliascol), unsigned long currentdepth, const Limdfsconstinfo *mt) { const ApmeoveridxLimdfsstate *col = (const ApmeoveridxLimdfsstate *) aliascol; const ApmeoveridxLimdfsconstinfo *mti = (const ApmeoveridxLimdfsconstinfo *) mt; if (col->maxleqk == UNDEFMAXLEQK) { printf("[]"); } else { unsigned long idx, backmask, score = currentdepth; printf("[%lu",score); for (idx=1UL, backmask = 1UL; idx<=col->maxleqk; idx++, backmask <<= 1) { if (col->Pv & backmask) { score++; } else { if (col->Mv & backmask) { score--; } } printf(",%lu",score); } printf("] with maxleqk=%lu",col->maxleqk); } } static void verifycolumnvalues(const Limdfsconstinfo *mt, const Limdfsstate *acol, unsigned long startscore) { unsigned long idx, score, minscore, mask, bfmaxleqk; const ApmeoveridxLimdfsstate *col = (const ApmeoveridxLimdfsstate *) acol; const ApmeoveridxLimdfsconstinfo *mti = (const ApmeoveridxLimdfsconstinfo *) mt; if (startscore <= mti->maxdistance) { bfmaxleqk = 0; minscore = startscore; } else { bfmaxleqk = UNDEFMAXLEQK; minscore = 0; } score = startscore; for (idx=1UL, mask = 1UL; idx <= mti->patternlength; idx++, mask <<= 1) { if (col->Pv & mask) { score++; } else { if (col->Mv & mask) { score--; } } if (score <= mti->maxdistance) { bfmaxleqk = idx; minscore = score; } } if (bfmaxleqk != col->maxleqk) { fprintf(stderr,"correct maxleqk = "); showmaxleqvalue(stderr,bfmaxleqk,mti); fprintf(stderr," != "); showmaxleqvalue(stderr,col->maxleqk,mti); fprintf(stderr," = col->maxleqk\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } if (bfmaxleqk != UNDEFMAXLEQK && minscore != col->lastdistvalue) { fprintf(stderr,"correct score = %lu != %lu = col->score\n", minscore, col->lastdistvalue); exit(GT_EXIT_PROGRAMMING_ERROR); } } #endif static void apme_initdfsconstinfo(Limdfsconstinfo *mt, unsigned int alphasize, ...) /* Variable argument list is as follows: unsigned int alphasize const GtUchar *pattern, unsigned long patternlength, unsigned long maxdistance, unsigned long maxintervalwidth, bool skpp */ { va_list ap; const GtUchar *pattern; ApmeoveridxLimdfsconstinfo *mti = (ApmeoveridxLimdfsconstinfo *) mt; va_start(ap,alphasize); pattern = va_arg(ap, const GtUchar *); mti->patternlength = va_arg(ap, unsigned long); mti->maxdistance = va_arg(ap, unsigned long); mti->maxintervalwidth = va_arg(ap, unsigned long); mti->skpp = (bool) va_arg(ap, int); va_end(ap); gt_assert(mti->maxdistance < mti->patternlength); gt_initeqsvector(mti->eqsvector,(unsigned long) alphasize, pattern,mti->patternlength); } static Limdfsconstinfo *apme_allocatedfsconstinfo(unsigned int alphasize) { ApmeoveridxLimdfsconstinfo *mti = gt_malloc(sizeof (ApmeoveridxLimdfsconstinfo)); mti->eqsvector = gt_malloc(sizeof (*mti->eqsvector) * alphasize); return (Limdfsconstinfo*) mti; } static void apme_freedfsconstinfo(Limdfsconstinfo **mtptr) { ApmeoveridxLimdfsconstinfo **mtiptr = (ApmeoveridxLimdfsconstinfo **) mtptr; gt_free((*mtiptr)->eqsvector); gt_free(*mtiptr); *mtiptr = NULL; } static void apme_initLimdfsstate(DECLAREPTRDFSSTATE(aliascolumn), Limdfsconstinfo *mt) { ApmeoveridxLimdfsstate *column = (ApmeoveridxLimdfsstate *) aliascolumn; ApmeoveridxLimdfsconstinfo *mti = (ApmeoveridxLimdfsconstinfo *) mt; column->Mv = 0UL; if (mti->skpp) { column->Pv = 0UL; /* first column consists of 0 => skip pattern prefix */ column->maxleqk = mti->patternlength; column->lastdistvalue = 0; } else { column->Pv = ~0UL; /* first column: 0 1 2 ... m */ column->maxleqk = mti->maxdistance; column->lastdistvalue = mti->maxdistance; } } static void apme_fullmatchLimdfsstate(Limdfsresult *limdfsresult, DECLAREPTRDFSSTATE(aliascolumn), GT_UNUSED unsigned long leftbound, GT_UNUSED unsigned long rightbound, unsigned long width, GT_UNUSED unsigned long currentdepth, Limdfsconstinfo *mt) { ApmeoveridxLimdfsstate *col = (ApmeoveridxLimdfsstate *) aliascolumn; ApmeoveridxLimdfsconstinfo *mti = (ApmeoveridxLimdfsconstinfo *) mt; if (col->maxleqk == UNDEFMAXLEQK) { limdfsresult->status = Limdfsstop; /* stop depth first traversal */ return; } if (mti->maxintervalwidth == 0 || width == (unsigned long) 1) { if (col->maxleqk == SUCCESSMAXLEQK) { /* success with match of length plen */ limdfsresult->status = Limdfssuccess; limdfsresult->pprefixlen = mti->patternlength; limdfsresult->distance = col->lastdistvalue; return; } } else { if (width <= (unsigned long) mti->maxintervalwidth) { /* success with match of length maxleqk */ gt_assert(col->maxleqk > 0); limdfsresult->status = Limdfssuccess; limdfsresult->pprefixlen = col->maxleqk; limdfsresult->distance = col->lastdistvalue; return; } } /* continue with depth first traversal */ limdfsresult->status = Limdfscontinue; } static void apme_nextLimdfsstate(const Limdfsconstinfo *mt, DECLAREPTRDFSSTATE(aliasoutcol), GT_UNUSED unsigned long currentdepth, GtUchar currentchar, const DECLAREPTRDFSSTATE(aliasincol)) { unsigned long Eq = 0, Xv, Xh, Ph, Mh, /* as in Myers Paper */ backmask, /* only one bit is on */ idx, /* a counter */ score; /* current score */ ApmeoveridxLimdfsstate *outcol = (ApmeoveridxLimdfsstate *) aliasoutcol; const ApmeoveridxLimdfsstate *incol = (const ApmeoveridxLimdfsstate *) aliasincol; const ApmeoveridxLimdfsconstinfo *mti = (const ApmeoveridxLimdfsconstinfo *) mt; gt_assert(incol->maxleqk != UNDEFMAXLEQK); gt_assert(mti->maxintervalwidth > 0 || incol->maxleqk != SUCCESSMAXLEQK); gt_assert(currentchar != (GtUchar) SEPARATOR); if (currentchar != (GtUchar) WILDCARD) { Eq = mti->eqsvector[(unsigned long) currentchar]; } Xv = Eq | incol->Mv; Xh = (((Eq & incol->Pv) + incol->Pv) ^ incol->Pv) | Eq; Ph = incol->Mv | ~ (Xh | incol->Pv); Mh = incol->Pv & Xh; Ph = (Ph << 1) | 1UL; outcol->Pv = (Mh << 1) | ~ (Xv | Ph); outcol->Mv = Ph & Xv; backmask = 1UL << incol->maxleqk; if (Eq & backmask || Mh & backmask) { outcol->maxleqk = incol->maxleqk + 1UL; outcol->lastdistvalue = incol->lastdistvalue; } else { if (Ph & backmask) { score = mti->maxdistance+1; outcol->maxleqk = UNDEFMAXLEQK; if (incol->maxleqk > 0) { for (idx = incol->maxleqk - 1, backmask >>= 1; /* Nothing */; backmask >>= 1) { if (outcol->Pv & backmask) { score--; if (score <= mti->maxdistance) { outcol->maxleqk = idx; outcol->lastdistvalue = score; break; } } else { if (outcol->Mv & backmask) { score++; } } if (idx > 0) { idx--; } else { break; } } } } else { outcol->maxleqk = incol->maxleqk; outcol->lastdistvalue = incol->lastdistvalue; } } #ifdef SKDEBUG verifycolumnvalues(mti,outcol,currentdepth); #endif } static void apme_inplacenextLimdfsstate(const Limdfsconstinfo *mt, DECLAREPTRDFSSTATE(aliascol), GT_UNUSED unsigned long currentdepth, GtUchar currentchar) { unsigned long Eq = 0, Xv, Xh, Ph, Mh, /* as in Myers Paper */ backmask, /* only one bit is on */ idx, /* a counter */ score; /* current score */ ApmeoveridxLimdfsstate *col = (ApmeoveridxLimdfsstate *) aliascol; const ApmeoveridxLimdfsconstinfo *mti = (const ApmeoveridxLimdfsconstinfo *) mt; gt_assert(col->maxleqk != UNDEFMAXLEQK); gt_assert(mti->maxintervalwidth > 0 || col->maxleqk != SUCCESSMAXLEQK); if (currentchar != (GtUchar) WILDCARD) { Eq = mti->eqsvector[(unsigned long) currentchar]; } Xv = Eq | col->Mv; Xh = (((Eq & col->Pv) + col->Pv) ^ col->Pv) | Eq; Ph = col->Mv | ~ (Xh | col->Pv); Mh = col->Pv & Xh; Ph = (Ph << 1) | 1UL; col->Pv = (Mh << 1) | ~ (Xv | Ph); col->Mv = Ph & Xv; backmask = 1UL << col->maxleqk; if (Eq & backmask || Mh & backmask) { col->maxleqk++; } else { if (Ph & backmask) { unsigned long tmpmaxleqk = UNDEFMAXLEQK; score = mti->maxdistance+1; if (col->maxleqk > 0) { for (idx = col->maxleqk - 1, backmask >>= 1; /* Nothing */; backmask >>= 1) { if (col->Pv & backmask) { score--; if (score <= mti->maxdistance) { tmpmaxleqk = idx; col->lastdistvalue = score; break; } } else { if (col->Mv & backmask) { score++; } } if (idx > 0) { idx--; } else { break; } } } col->maxleqk = tmpmaxleqk; } } } const AbstractDfstransformer *gt_apme_AbstractDfstransformer(void) { static const AbstractDfstransformer apme_adfst = { sizeof (ApmeoveridxLimdfsstate), apme_allocatedfsconstinfo, apme_initdfsconstinfo, NULL, /* no extractdfsconstinfo */ apme_freedfsconstinfo, apme_initLimdfsstate, NULL, NULL, NULL, apme_fullmatchLimdfsstate, apme_nextLimdfsstate, apme_inplacenextLimdfsstate, #ifdef SKDEBUG apme_showLimdfsstate, #endif }; return &apme_adfst; } genometools-1.5.1/src/match/apmeoveridx.h000066400000000000000000000017531211610345200204310ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef APMEOVERIDX_H #define APMEOVERIDX_H #include "absdfstrans-def.h" const AbstractDfstransformer *gt_apme_AbstractDfstransformer(void); #endif genometools-1.5.1/src/match/asqg_writer.c000066400000000000000000000106611211610345200204260ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "core/log_api.h" #include "match/asqg_writer.h" struct GtAsqgWriter { GtFile *file; const GtEncseq *encseq; }; GtAsqgWriter* gt_asqg_writer_new(GtFile *file, const GtEncseq *encseq) { GtAsqgWriter *aw; aw = gt_malloc(sizeof (*aw)); aw->file = file; aw->encseq = encseq; return aw; } int gt_asqg_writer_show_header(GtAsqgWriter *aw, float erate, unsigned long minlen, const char *inputfilename, bool has_containments, bool has_transitives, GT_UNUSED GtError *err) { gt_assert(aw != NULL); gt_file_xprintf(aw->file, "HT\tVN:i:%lu\tER:f:%g\tOL:i:%lu\tIN:Z:%s\tCN:i:%c\tTE:i:%c\n", GT_ASQG_VERSION, erate, minlen, inputfilename, has_containments ? '1' : '0', has_transitives ? '1' : '0'); return 0; } static inline void gt_asqg_writer_show_vertex_line(GtFile *file, unsigned long seqnum, const char *sequence, bool subsequence) { gt_file_xprintf(file, "VT\t%lu\t%s\tSS:i:%c\n", seqnum, sequence, subsequence ? '1' : '0'); } int gt_asqg_writer_show_vertices(GtAsqgWriter *aw, GT_UNUSED GtError *err) { const GtTwobitencoding *nextencoded; GtTwobitencoding code = 0; unsigned long seqnum = 0, nofseqs = gt_encseq_num_of_sequences(aw->encseq), pos = 0, next_stop, i, tlen = gt_encseq_total_length(aw->encseq), charsincode = 0; char *seqbuffer; bool last_seq = false; const char code2char[] = "acgt"; gt_assert(aw != NULL); seqbuffer = gt_malloc(sizeof (*seqbuffer) * (gt_encseq_max_seq_length(aw->encseq) + 1UL)); nextencoded = gt_encseq_twobitencoding_export(aw->encseq); i = 0; while (!last_seq) { if (seqnum + 1UL == nofseqs) { last_seq = true; next_stop = tlen - 1UL; } else next_stop = gt_encseq_seqstartpos(aw->encseq, seqnum + 1UL) - 1UL; for (/**/; i < next_stop; i++) { if (charsincode == 0) { code = *(nextencoded++); charsincode = (unsigned long)GT_UNITSIN2BITENC; } seqbuffer[pos++] = code2char[code >> ((--charsincode) << 1) & 3]; } seqbuffer[pos] = '\0'; gt_asqg_writer_show_vertex_line(aw->file, seqnum, seqbuffer, false); pos = 0; /* consume separator */ i++; if (charsincode == 0) { code = *(nextencoded++); charsincode = (unsigned long)GT_UNITSIN2BITENC; } charsincode--; seqnum++; } gt_free(seqbuffer); return 0; } static inline void gt_asqg_writer_show_edge_line(GtFile *file, unsigned long seqnum1, unsigned long seqnum2, unsigned long start1, unsigned long end1, unsigned long seqlen1, unsigned long start2, unsigned long end2, unsigned long seqlen2, bool revcompl, unsigned long edist) { gt_file_xprintf(file, "ED\t%lu %lu %lu %lu %lu %lu %lu %lu %c %lu\n", seqnum1, seqnum2, start1, end1, seqlen1, start2, end2, seqlen2, revcompl ? '1' : '0', edist); } void gt_spmproc_show_asgq(unsigned long suffix_readnum, unsigned long prefix_readnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *asqg_writer) { GtAsqgWriter *aw = asqg_writer; const unsigned long sl1 = gt_encseq_seqlength(aw->encseq, suffix_readnum), sl2 = gt_encseq_seqlength(aw->encseq, prefix_readnum); gt_asqg_writer_show_edge_line(aw->file, suffix_readnum, prefix_readnum, suffixseq_direct ? sl1 - length : 0, suffixseq_direct ? sl1 - 1UL : length - 1UL, sl1, prefixseq_direct ? 0 : sl2 - length, prefixseq_direct ? length - 1UL : sl2 - 1UL, sl2, !suffixseq_direct || !prefixseq_direct, 0); } void gt_asqg_writer_delete(GtAsqgWriter *aw) { gt_free(aw); } genometools-1.5.1/src/match/asqg_writer.h000066400000000000000000000055611211610345200204360ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ASQG_WRITER_H #define ASQG_WRITER_H #include "core/file.h" #include "core/encseq.h" #include "core/error.h" /* The class allows to write string graph information in the ASQG format of SGA (Simpsons and Durbin, 2012). */ typedef struct GtAsqgWriter GtAsqgWriter; /* is the supported version of the asqg format. */ #define GT_ASQG_VERSION 1UL /* Creates a new object, using for output and as source of information. */ GtAsqgWriter* gt_asqg_writer_new(GtFile *file, const GtEncseq *encseq); /* Writes the header using the provided information: is the minimal match length, is a string to use as input filename, the error rate, shall be true, if containments are present, shall be true, if transitive edges are present. Returns 0 on success, -1 on error and sets . */ int gt_asqg_writer_show_header(GtAsqgWriter *aw, float erate, unsigned long minlen, const char *inputfilename, bool has_containments, bool has_transitives, GtError *err); /* Writes the vertices. Returns 0 on success, -1 on error and sets . */ int gt_asqg_writer_show_vertices(GtAsqgWriter *aw, GtError *err); /* Writes an edge using Readjoiner SPM information. */ void gt_spmproc_show_asgq(unsigned long suffix_readnum, unsigned long prefix_readnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *asqg_writer); /* Deletes a object. */ void gt_asqg_writer_delete(GtAsqgWriter *aw); #endif genometools-1.5.1/src/match/bcktab.c000066400000000000000000001266011211610345200173270ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Stefan Kurtz Copyright (c) 2007-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #include #include #include #include #endif #include "core/fa.h" #include "core/chardef.h" #include "core/error.h" #include "core/format64.h" #include "core/mapspec.h" #include "core/mathsupport.h" #include "core/minmax.h" #include "core/safecast-gen.h" #include "core/spacecalc.h" #include "core/str.h" #include "core/types_api.h" #include "core/unused_api.h" #include "bcktab.h" #include "esa-fileend.h" #include "intcode-def.h" #include "initbasepower.h" #include "sfx-maprange.h" #include "stamp.h" #define GT_FROMCODE2SPECIALCODE(CODE,NUMOFCHARS)\ (((NUMOFCHARS) == 4U)\ ? ((CODE) >> 2)\ : (((CODE) - ((NUMOFCHARS)-1)) / (NUMOFCHARS))) typedef struct { unsigned long nonspecialsmaxbucketsize, specialsmaxbucketsize, maxbucketsize; } GtMaxbucketinfo; struct GtBcktab { GtLeftborder leftborder; uint32_t *uintcountspecialcodes, **uintdistpfxidx; unsigned long *ulongcountspecialcodes, **ulongdistpfxidx, sizeofrep, pagesize, numofdistpfxidxcounters; unsigned int prefixlength, numofchars, optimalnumofbits; GtCodetype numofallcodes, numofspecialcodes, **multimappower, *basepower, *filltable; GtUchar *qgrambuffer; GtMaxbucketinfo maxbucketinfo; bool allocated, withspecialsuffixes, useulong; void *mappedptr; GtSfxmappedrange *mappedleftborder, *mappedcountspecialcodes; }; void gt_bcktab_leftborder_assign(GtLeftborder *lb,GtCodetype code, unsigned long value) { gt_assert(lb != NULL); if (lb->ulongbounds != NULL) { lb->ulongbounds[code] = value; } else { gt_assert(value <= (unsigned long) UINT_MAX); gt_assert(lb->uintbounds != NULL); lb->uintbounds[code] = (uint32_t) value; } } unsigned long gt_bcktab_get_leftborder(const GtBcktab *bcktab,GtCodetype code) { gt_assert(bcktab != NULL); if (bcktab->leftborder.ulongbounds != NULL) { return bcktab->leftborder.ulongbounds[code]; } gt_assert(bcktab->leftborder.uintbounds != NULL); return (unsigned long) bcktab->leftborder.uintbounds[code]; } static unsigned long gt_bcktab_distpfxidx_get(const GtBcktab *bcktab, unsigned int prefixindex, GtCodetype ordercode) { if (bcktab->ulongdistpfxidx != NULL) { return bcktab->ulongdistpfxidx[prefixindex][ordercode]; } gt_assert(bcktab->uintdistpfxidx != NULL); return (unsigned long) bcktab->uintdistpfxidx[prefixindex][ordercode]; } static void gt_bcktab_distpfxidx_increment(const GtBcktab *bcktab, unsigned int prefixindex, GtCodetype ordercode) { if (bcktab->ulongdistpfxidx != NULL) { bcktab->ulongdistpfxidx[prefixindex][ordercode]++; } else { gt_assert(bcktab->uintdistpfxidx != NULL); bcktab->uintdistpfxidx[prefixindex][ordercode]++; } } static unsigned long gt_bcktab_transformcode(unsigned long code, const void *data) { unsigned int numofchars, *numofcharptr = (unsigned int *) data; numofchars = *numofcharptr; if (code >= (unsigned long) (numofchars - 1)) { return GT_FROMCODE2SPECIALCODE(code,numofchars); } else { return 0; } } static void gt_bcktab_transform_minmax_code(unsigned long *mincode, unsigned long *maxcode, const void *data) { *mincode = gt_bcktab_transformcode(*mincode,data); *maxcode = gt_bcktab_transformcode(*maxcode,data); } void gt_bcktab_storetmp(GtBcktab *bcktab) { if (bcktab->useulong) { gt_Sfxmappedrange_storetmp_ulong(bcktab->mappedleftborder, &bcktab->leftborder.ulongbounds, true); if (bcktab->withspecialsuffixes) { gt_Sfxmappedrange_storetmp_ulong(bcktab->mappedcountspecialcodes, &bcktab->ulongcountspecialcodes, true); } } else { gt_Sfxmappedrange_storetmp_uint32(bcktab->mappedleftborder, &bcktab->leftborder.uintbounds, true); if (bcktab->withspecialsuffixes) { gt_Sfxmappedrange_storetmp_uint32(bcktab->mappedcountspecialcodes, &bcktab->uintcountspecialcodes, true); } } } void gt_bcktab_maprange_lb_cs(GtSfxmappedrangelist *sfxmrlist,GtBcktab *bcktab) { bcktab->mappedleftborder = gt_Sfxmappedrange_new("leftborder", bcktab->numofallcodes+1, bcktab->useulong ? GtSfxunsignedlong : GtSfxuint32_t, NULL, NULL); gt_Sfxmappedrangelist_add(sfxmrlist,bcktab->mappedleftborder); if (bcktab->withspecialsuffixes) { bcktab->mappedcountspecialcodes = gt_Sfxmappedrange_new("countspecialcodes", bcktab->numofspecialcodes, bcktab->useulong ? GtSfxunsignedlong : GtSfxuint32_t, gt_bcktab_transform_minmax_code, &bcktab->numofchars); gt_Sfxmappedrangelist_add(sfxmrlist,bcktab->mappedcountspecialcodes); } } void gt_bcktab_assignboundsforpart(GtBcktab *bcktab, GtCodetype mincode, GtCodetype maxcode) { void *tmpleftborder; tmpleftborder = gt_Sfxmappedrange_map(bcktab->mappedleftborder, mincode, maxcode); if (bcktab->useulong) { bcktab->leftborder.ulongbounds = (unsigned long *) tmpleftborder; } else { bcktab->leftborder.uintbounds = (uint32_t *) tmpleftborder; } if (bcktab->withspecialsuffixes) { void *tmpspecialcodes; tmpspecialcodes = gt_Sfxmappedrange_map(bcktab->mappedcountspecialcodes, mincode, maxcode); if (bcktab->useulong) { bcktab->ulongcountspecialcodes = (unsigned long *) tmpspecialcodes; } else { bcktab->uintcountspecialcodes = (uint32_t *) tmpspecialcodes; } } } static unsigned long gt_bcktab_numofdistpfxidxcounters( const GtCodetype *basepower, unsigned int prefixlength) { if (prefixlength > 2U) { unsigned long numofcounters = 0; unsigned int idx; for (idx=1U; idx < prefixlength-1; idx++) { numofcounters += basepower[idx]; } return numofcounters; } return 0; } static bool gt_bcktab_useulong(unsigned long maxvalue) { return maxvalue <= (unsigned long) UINT_MAX ? false : true; } static uint64_t gt_bcktab_sizeoftable_generic(unsigned int prefixlength, unsigned long numofallcodes, unsigned long numofspecialcodes, bool useulong, const GtCodetype *basepower, bool countdistpfxidx, bool withspecialsuffixes) { uint64_t sizeoftable; size_t sizeofbasetype; sizeofbasetype = useulong ? sizeof (unsigned long) : sizeof (uint32_t); sizeoftable = (uint64_t) sizeofbasetype * (uint64_t) (numofallcodes + 1); if (withspecialsuffixes) { sizeoftable += sizeofbasetype * (uint64_t) numofspecialcodes; if (countdistpfxidx) { sizeoftable += (uint64_t) sizeofbasetype * gt_bcktab_numofdistpfxidxcounters(basepower, prefixlength); } } return sizeoftable; } uint64_t gt_bcktab_sizeoftable(unsigned int numofchars, unsigned int prefixlength, unsigned long maxvalue, bool withspecialsuffixes) { unsigned long numofallcodes, numofspecialcodes; uint64_t sizeofbuckettable; GtCodetype *basepower; if (withspecialsuffixes) { if (prefixlength >= 2U) { basepower = gt_initbasepower(numofchars,prefixlength-2); } else { basepower = NULL; } numofspecialcodes = gt_power_for_small_exponents(numofchars,prefixlength-1); } else { basepower = NULL; numofspecialcodes = 0; } numofallcodes = gt_power_for_small_exponents(numofchars,prefixlength); sizeofbuckettable = gt_bcktab_sizeoftable_generic(prefixlength, numofallcodes, numofspecialcodes, gt_bcktab_useulong(maxvalue), basepower, true, withspecialsuffixes); gt_free(basepower); return sizeofbuckettable; } unsigned long gt_bcktab_sizeofworkspace(unsigned int prefixlength) { size_t size = sizeof (GtCodetype) * (prefixlength+1); size += sizeof (GtCodetype) * prefixlength; size += sizeof (GtBcktab); size += prefixlength; return (unsigned long) size; } static void ulong_setdistpfxidxptrs(unsigned long **ulongdistpfxidx, unsigned long *ptr, const GtCodetype *basepower, unsigned int prefixlength) { unsigned int idx; ulongdistpfxidx[0] = ptr; for (idx=1U; idxwithspecialsuffixes); if (prefixlength > 2U) { if (bcktab->numofdistpfxidxcounters > 0) { unsigned long *ulongcounters; uint32_t *uintcounters; size_t allocsize; if (bcktab->useulong) { bcktab->ulongdistpfxidx = gt_malloc(sizeof (void *) * (prefixlength-1)); allocsize = sizeof (*ulongcounters) * bcktab->numofdistpfxidxcounters; ulongcounters = gt_malloc(allocsize); memset(ulongcounters,0,allocsize); ulong_setdistpfxidxptrs(bcktab->ulongdistpfxidx,ulongcounters, bcktab->basepower,prefixlength); } else { bcktab->uintdistpfxidx = gt_malloc(sizeof (void *) * (prefixlength-1)); allocsize = sizeof (*uintcounters) * bcktab->numofdistpfxidxcounters; uintcounters = gt_malloc(allocsize); memset(uintcounters,0,allocsize); uint_setdistpfxidxptrs(bcktab->uintdistpfxidx,uintcounters, bcktab->basepower,prefixlength); } gt_logger_log(logger,"sizeof (distpfxidx)=%lu bytes", (unsigned long) allocsize); } } } static GtBcktab *gt_bcktab_new_withinit(unsigned int numofchars, unsigned int prefixlength, unsigned long maxvalue, bool withspecialsuffixes) { GtBcktab *bcktab; uint64_t sizeofrep_uint64_t; bcktab = gt_malloc(sizeof *bcktab); bcktab->mappedptr = NULL; bcktab->mappedleftborder = NULL; bcktab->leftborder.ulongbounds = NULL; bcktab->leftborder.uintbounds = NULL; bcktab->mappedcountspecialcodes = NULL; bcktab->ulongcountspecialcodes = NULL; bcktab->uintcountspecialcodes = NULL; bcktab->ulongdistpfxidx = NULL; bcktab->uintdistpfxidx = NULL; bcktab->prefixlength = prefixlength; bcktab->withspecialsuffixes = withspecialsuffixes; bcktab->basepower = gt_initbasepower(numofchars,prefixlength); bcktab->numofchars = numofchars; bcktab->numofdistpfxidxcounters = gt_bcktab_numofdistpfxidxcounters(bcktab->basepower,prefixlength); bcktab->filltable = gt_initfilltable(numofchars,prefixlength); bcktab->numofallcodes = bcktab->basepower[prefixlength]; bcktab->numofspecialcodes = bcktab->basepower[prefixlength-1]; bcktab->multimappower = gt_initmultimappower(numofchars,prefixlength); bcktab->pagesize = (unsigned long) sysconf((int) _SC_PAGESIZE); bcktab->useulong = gt_bcktab_useulong(maxvalue); gt_assert(bcktab->pagesize % sizeof (unsigned long) == 0); bcktab->allocated = false; bcktab->qgrambuffer = gt_malloc(sizeof (*bcktab->qgrambuffer) * prefixlength); sizeofrep_uint64_t = gt_bcktab_sizeoftable_generic( prefixlength, bcktab->numofallcodes, bcktab->numofspecialcodes, bcktab->useulong, bcktab->basepower, true, withspecialsuffixes); bcktab->sizeofrep = CALLCASTFUNC(uint64_t,unsigned_long,sizeofrep_uint64_t); return bcktab; } GtBcktab *gt_bcktab_new(unsigned int numofchars, unsigned int prefixlength, unsigned long maxvalue, bool storespecialcodes, bool withspecialsuffixes, GtLogger *logger, GtError *err) { GtBcktab *bcktab; bool haserr = false; bcktab = gt_bcktab_new_withinit(numofchars,prefixlength,maxvalue, withspecialsuffixes); bcktab->allocated = true; if (storespecialcodes && bcktab->numofallcodes > 0 && bcktab->numofallcodes-1 > (unsigned long) MAXCODEVALUE) { gt_error_set(err,"alphasize^prefixlength-1 = " FormatGtCodetype " does not fit into %u" " bits: choose smaller value for prefixlength", bcktab->numofallcodes-1, CODEBITS); haserr = true; } if (!haserr) { size_t allocsize_bounds, allocsize_countspecialcodes = 0; if (bcktab->useulong) { allocsize_bounds = sizeof (*bcktab->leftborder.ulongbounds) * (bcktab->numofallcodes+1); bcktab->leftborder.ulongbounds = gt_malloc(allocsize_bounds); memset(bcktab->leftborder.ulongbounds,0,allocsize_bounds); if (withspecialsuffixes) { allocsize_countspecialcodes = sizeof (*bcktab->ulongcountspecialcodes) * bcktab->numofspecialcodes; bcktab->ulongcountspecialcodes = gt_malloc(allocsize_countspecialcodes); memset(bcktab->ulongcountspecialcodes,0,allocsize_countspecialcodes); } } else { allocsize_bounds = sizeof (*bcktab->leftborder.uintbounds) * (bcktab->numofallcodes+1); bcktab->leftborder.uintbounds = gt_malloc(allocsize_bounds); memset(bcktab->leftborder.uintbounds,0,allocsize_bounds); if (withspecialsuffixes) { allocsize_countspecialcodes = sizeof (*bcktab->uintcountspecialcodes) * bcktab->numofspecialcodes; bcktab->uintcountspecialcodes = gt_malloc(allocsize_countspecialcodes); memset(bcktab->uintcountspecialcodes,0,allocsize_countspecialcodes); } } gt_logger_log(logger,"sizeof (leftborder)=%lu bytes", (unsigned long) allocsize_bounds); if (withspecialsuffixes) { gt_logger_log(logger,"sizeof (countspecialcodes)=%lu bytes", (unsigned long) allocsize_countspecialcodes); allocdistpfxidxcounts(bcktab,prefixlength,logger); } gt_logger_log(logger,"sizeof (bcktab)=" Formatuint64_t " bytes", PRINTuint64_tcast(gt_bcktab_sizeoftable(numofchars, prefixlength, maxvalue, withspecialsuffixes))); } if (haserr) { gt_bcktab_delete(bcktab); return NULL; } return bcktab; } static void assignbcktabmapspecification(GtMapspec *mapspec, void *data, bool writemode) { GtBcktab *bcktab = (GtBcktab *) data; if (bcktab->useulong) { gt_mapspec_add_ulong(mapspec, bcktab->leftborder.ulongbounds, (unsigned long) (bcktab->numofallcodes+1)); } else { gt_mapspec_add_uint32(mapspec, bcktab->leftborder.uintbounds, (unsigned long) (bcktab->numofallcodes+1)); } if (bcktab->withspecialsuffixes) { if (bcktab->useulong) { gt_mapspec_add_ulong(mapspec, bcktab->ulongcountspecialcodes, (unsigned long) bcktab->numofspecialcodes); } else { gt_mapspec_add_uint32(mapspec, bcktab->uintcountspecialcodes, (unsigned long) bcktab->numofspecialcodes); } if (bcktab->numofdistpfxidxcounters > 0) { if (!writemode) { if (bcktab->useulong) { bcktab->ulongdistpfxidx = gt_malloc(sizeof (void *) * (bcktab->prefixlength-1)); } else { bcktab->uintdistpfxidx = gt_malloc(sizeof (void *) * (bcktab->prefixlength-1)); } } if (bcktab->useulong) { gt_mapspec_add_ulong(mapspec, bcktab->ulongdistpfxidx[0], bcktab->numofdistpfxidxcounters); } else { gt_mapspec_add_uint32(mapspec, bcktab->uintdistpfxidx[0], bcktab->numofdistpfxidxcounters); } } } } int gt_bcktab_flush_to_file(FILE *fp,const GtBcktab *bcktab,GtError *err) { gt_error_check(err); return gt_mapspec_write(assignbcktabmapspecification, fp, (GtBcktab *) bcktab, bcktab->sizeofrep, err); } static int fillbcktabmapspecstartptr(GtBcktab *bcktab, const char *indexname, GtError *err) { bool haserr = false; GtStr *tmpfilename; gt_error_check(err); tmpfilename = gt_str_new_cstr(indexname); gt_str_append_cstr(tmpfilename,BCKTABSUFFIX); if (gt_mapspec_read(assignbcktabmapspecification, bcktab, tmpfilename, bcktab->sizeofrep, &bcktab->mappedptr, err) != 0) { haserr = true; } gt_str_delete(tmpfilename); return haserr ? -1 : 0; } #define CHECKCOUNTSPECIALCODES #ifdef CHECKCOUNTSPECIALCODES static unsigned long fromcode2countspecialcodes(GtCodetype code, const GtBcktab *bcktab) { if (code >= bcktab->filltable[bcktab->prefixlength-1]) { GtCodetype ordercode = code - bcktab->filltable[bcktab->prefixlength-1]; GtCodetype divisor = bcktab->filltable[bcktab->prefixlength-1] + 1; if (ordercode % divisor == 0) { ordercode /= divisor; if (bcktab->ulongcountspecialcodes != NULL) { return bcktab->ulongcountspecialcodes[ordercode]; } else { gt_assert(bcktab->uintcountspecialcodes != NULL); return (unsigned long) bcktab->uintcountspecialcodes[ordercode]; } } } return 0; } static void pfxidxpartialsums(unsigned long *count, GtCodetype code, const GtBcktab *bcktab) { unsigned int prefixindex; unsigned long sum = 0, specialsinbucket; GtCodetype ordercode, divisor; memset(count,0,sizeof (*count) * (size_t) bcktab->prefixlength); for (prefixindex=bcktab->prefixlength-2; prefixindex>=1U; prefixindex--) { if (code >= bcktab->filltable[prefixindex]) { ordercode = code - bcktab->filltable[prefixindex]; divisor = bcktab->filltable[prefixindex] + 1; if (ordercode % divisor == 0) { ordercode /= divisor; count[prefixindex] = gt_bcktab_distpfxidx_get(bcktab,prefixindex-1,ordercode); sum += count[prefixindex]; } } else { break; } } specialsinbucket = fromcode2countspecialcodes(code,bcktab); gt_assert(sum <= specialsinbucket); count[bcktab->prefixlength-1] = specialsinbucket - sum; if (bcktab->prefixlength > 2U) { for (prefixindex = bcktab->prefixlength-2; prefixindex>=1U; prefixindex--) { count[prefixindex] += count[prefixindex+1]; } #ifndef NDEBUG if (specialsinbucket != count[1]) { fprintf(stderr,"code " FormatGtCodetype ": sum = %lu != %lu = count[1]\n", code,sum,count[1]); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif } } void gt_bcktab_checkcountspecialcodes(const GtBcktab *bcktab) { GtCodetype code; unsigned long *count; if (bcktab->prefixlength >= 2U) { count = gt_malloc(sizeof (*count) * bcktab->prefixlength); for (code=0; codenumofallcodes; code++) { pfxidxpartialsums(count, code, bcktab); } gt_free(count); } } #endif GtBcktab *gt_bcktab_map(const char *indexname, unsigned int numofchars, unsigned int prefixlength, unsigned long maxvalue, bool withspecialsuffixes, GtError *err) { GtBcktab *bcktab; bcktab = gt_bcktab_new_withinit(numofchars,prefixlength,maxvalue, withspecialsuffixes); bcktab->allocated = false; if (fillbcktabmapspecstartptr(bcktab, indexname, err) != 0) { gt_bcktab_delete(bcktab); return NULL; } if (withspecialsuffixes) { if (bcktab->ulongdistpfxidx != NULL) { ulong_setdistpfxidxptrs(bcktab->ulongdistpfxidx, bcktab->ulongdistpfxidx[0], bcktab->basepower,bcktab->prefixlength); } else { if (bcktab->uintdistpfxidx != NULL) { uint_setdistpfxidxptrs(bcktab->uintdistpfxidx, bcktab->uintdistpfxidx[0], bcktab->basepower,bcktab->prefixlength); } } #ifdef CHECKCOUNTSPECIALCODES gt_bcktab_checkcountspecialcodes(bcktab); #endif } return bcktab; } void gt_bcktab_show(const GtBcktab *bcktab) { unsigned int prefixindex; for (prefixindex=1U; prefixindex < bcktab->prefixlength-1; prefixindex++) { GtCodetype code; unsigned long sum = 0, value; for (code = 0; code < bcktab->basepower[prefixindex]; code++) { value = gt_bcktab_distpfxidx_get(bcktab,prefixindex-1,code); sum += value; printf("distpfxidx[%u][%lu]=%lu\n",prefixindex,code,value); } printf("sum %lu\n",sum); } } void gt_bcktab_leftborder_show(const GtBcktab *bcktab) { GtCodetype idx; for (idx=0; idxnumofallcodes; idx++) { printf("leftborder[" FormatGtCodetype "]=%lu\n",idx, gt_bcktab_get_leftborder(bcktab,idx)); } } int gt_bcktab_remap_all(GtBcktab *bcktab,GtError *err) { bool haserr = false; void *tmp; if (bcktab->mappedleftborder != NULL) { tmp = gt_Sfxmappedrange_map_entire(bcktab->mappedleftborder,err); if (bcktab->useulong) { bcktab->leftborder.ulongbounds = (unsigned long *) tmp; if (bcktab->leftborder.ulongbounds == NULL) { haserr = true; } } else { bcktab->leftborder.uintbounds = (uint32_t *) tmp; if (bcktab->leftborder.uintbounds == NULL) { haserr = true; } } } if (!haserr && bcktab->withspecialsuffixes && bcktab->mappedcountspecialcodes != NULL) { tmp = gt_Sfxmappedrange_map_entire(bcktab->mappedcountspecialcodes,err); if (bcktab->useulong) { bcktab->ulongcountspecialcodes = (unsigned long *) tmp; if (bcktab->ulongcountspecialcodes == NULL) { gt_fa_xmunmap(bcktab->leftborder.ulongbounds); haserr = true; } } else { bcktab->uintcountspecialcodes = (uint32_t *) tmp; if (bcktab->uintcountspecialcodes == NULL) { gt_fa_xmunmap(bcktab->leftborder.uintbounds); haserr = true; } } } return haserr ? -1 : 0; } void gt_bcktab_delete(GtBcktab *bcktab) { if (bcktab == NULL) { return; } /*showbcktab(bcktabptr);*/ if (bcktab->allocated) { gt_Sfxmappedrange_delete(bcktab->mappedleftborder); bcktab->mappedleftborder = NULL; gt_Sfxmappedrange_delete(bcktab->mappedcountspecialcodes); bcktab->mappedcountspecialcodes = NULL; gt_free(bcktab->ulongcountspecialcodes); gt_free(bcktab->uintcountspecialcodes); gt_free(bcktab->leftborder.ulongbounds); gt_free(bcktab->leftborder.uintbounds); if (bcktab->ulongdistpfxidx != NULL) { gt_free(bcktab->ulongdistpfxidx[0]); } if (bcktab->uintdistpfxidx != NULL) { gt_free(bcktab->uintdistpfxidx[0]); } } else { gt_assert(bcktab->mappedleftborder == NULL); gt_assert(bcktab->mappedcountspecialcodes == NULL); if (bcktab->mappedptr != NULL) { gt_fa_xmunmap(bcktab->mappedptr); } bcktab->mappedptr = NULL; if (bcktab->ulongdistpfxidx != NULL) { bcktab->ulongdistpfxidx[0] = NULL; } if (bcktab->uintdistpfxidx != NULL) { bcktab->uintdistpfxidx[0] = NULL; } } bcktab->leftborder.ulongbounds = NULL; bcktab->leftborder.uintbounds = NULL; bcktab->ulongcountspecialcodes = NULL; bcktab->uintcountspecialcodes = NULL; gt_free(bcktab->ulongdistpfxidx); bcktab->ulongdistpfxidx = NULL; gt_free(bcktab->uintdistpfxidx); bcktab->uintdistpfxidx = NULL; gt_multimappower_delete(bcktab->multimappower); gt_free(bcktab->filltable); bcktab->filltable = NULL; gt_free(bcktab->basepower); bcktab->basepower = NULL; gt_free(bcktab->qgrambuffer); bcktab->qgrambuffer = NULL; gt_free(bcktab); } void gt_bcktab_updatespecials(GtBcktab *bcktab, GtCodetype code, unsigned int prefixindex) { GtCodetype specialcode; gt_assert(prefixindex > 0); gt_assert(prefixindex <= bcktab->prefixlength); gt_assert(code < bcktab->numofallcodes); if (prefixindex < bcktab->prefixlength-1) { GtCodetype ordercode = (code - bcktab->filltable[prefixindex])/ (bcktab->filltable[prefixindex]+1); gt_bcktab_distpfxidx_increment(bcktab,prefixindex-1,ordercode); } gt_assert(code >= (GtCodetype) (bcktab->numofchars-1)); specialcode = GT_FROMCODE2SPECIALCODE(code,bcktab->numofchars); if (bcktab->ulongcountspecialcodes != NULL) { bcktab->ulongcountspecialcodes[specialcode]++; } else { gt_assert(bcktab->uintcountspecialcodes != NULL); bcktab->uintcountspecialcodes[specialcode]++; } } /* The following function is not used anymore */ void gt_bcktab_addfinalspecials(GtBcktab *bcktab, unsigned long specialcharacters) { if (bcktab->withspecialsuffixes) { GtCodetype specialcode; gt_assert(bcktab->filltable[0] >= (GtCodetype) (bcktab->numofchars-1)); specialcode = GT_FROMCODE2SPECIALCODE(bcktab->filltable[0], bcktab->numofchars); if (bcktab->ulongcountspecialcodes != NULL) { bcktab->ulongcountspecialcodes[specialcode] += (unsigned long) (specialcharacters + 1); } else { gt_assert(bcktab->uintcountspecialcodes != NULL); bcktab->uintcountspecialcodes[specialcode] += (uint32_t) (specialcharacters + 1); } } } unsigned int gt_bcktab_calcboundsparts(GtBucketspecification *bucketspec, const GtBcktab *bcktab, GtCodetype code, GtCodetype maxcode, unsigned long totalwidth, unsigned int rightchar) { bucketspec->left = gt_bcktab_get_leftborder(bcktab,code); if (code < maxcode) { unsigned long nextleftborder = gt_bcktab_get_leftborder(bcktab,code+1); if (nextleftborder > 0) { bucketspec->nonspecialsinbucket = nextleftborder - bucketspec->left; } else { bucketspec->nonspecialsinbucket = 0; } } else { gt_assert(totalwidth >= bucketspec->left); bucketspec->nonspecialsinbucket = (unsigned long) (totalwidth - bucketspec->left); } if (bcktab->withspecialsuffixes && rightchar == bcktab->numofchars - 1) { GtCodetype specialcode; gt_assert(code >= (GtCodetype) (bcktab->numofchars-1)); specialcode = GT_FROMCODE2SPECIALCODE(code,bcktab->numofchars); if (bcktab->ulongcountspecialcodes != NULL) { bucketspec->specialsinbucket = bcktab->ulongcountspecialcodes[specialcode]; } else { gt_assert(bcktab->uintcountspecialcodes != NULL); bucketspec->specialsinbucket = (unsigned long) bcktab->uintcountspecialcodes[specialcode]; } if (bucketspec->nonspecialsinbucket >= bucketspec->specialsinbucket) { bucketspec->nonspecialsinbucket -= bucketspec->specialsinbucket; } else { bucketspec->nonspecialsinbucket = 0; } } else { bucketspec->specialsinbucket = 0; } return (rightchar < bcktab->numofchars - 1) ? (rightchar + 1) : 0; } void gt_bcktab_calcboundaries(GtBucketspecification *bucketspec, const GtBcktab *bcktab, GtCodetype code) { gt_assert(code != bcktab->numofallcodes); (void) gt_bcktab_calcboundsparts(bucketspec, bcktab, code, bcktab->numofallcodes, /*codewithspecialsuffixes ? (unsigned int) (code % bcktab->numofchars) : 0); } unsigned long gt_bcktab_calcrightbounds(const GtBcktab *bcktab, GtCodetype code, GtCodetype maxcode, unsigned long totalwidth) { return code < maxcode ? gt_bcktab_get_leftborder(bcktab,code+1) : totalwidth; } GtCodetype gt_bcktab_codedownscale(const GtBcktab *bcktab, GtCodetype code, unsigned int prefixindex, unsigned int maxprefixlen) { unsigned int remain; code -= bcktab->filltable[maxprefixlen]; remain = maxprefixlen-prefixindex; code %= (bcktab->filltable[remain]+1); code *= bcktab->basepower[remain]; code += bcktab->filltable[prefixindex]; return code; } void gt_bcktab_determinemaxsize(GtBcktab *bcktab, GtCodetype mincode, GtCodetype maxcode, unsigned long partwidth) { unsigned int rightchar = (unsigned int) (mincode % bcktab->numofchars); GtBucketspecification bucketspec; GtCodetype code; #ifdef SKDEBUG printf("mincode=%lu,maxcode=%lu,partwidth=%lu,totallength=%lu\n", (unsigned long) mincode,(unsigned long) maxcode, partwidth,totallength); #endif bcktab->maxbucketinfo.specialsmaxbucketsize = 1UL; bcktab->maxbucketinfo.nonspecialsmaxbucketsize = 1UL; bcktab->maxbucketinfo.maxbucketsize = 1UL; for (code = mincode; code <= maxcode; code++) { rightchar = gt_bcktab_calcboundsparts(&bucketspec, bcktab, code, maxcode, partwidth, rightchar); if (bucketspec.nonspecialsinbucket > bcktab->maxbucketinfo.nonspecialsmaxbucketsize) { bcktab->maxbucketinfo.nonspecialsmaxbucketsize = bucketspec.nonspecialsinbucket; } if (bucketspec.specialsinbucket > bcktab->maxbucketinfo.specialsmaxbucketsize) { bcktab->maxbucketinfo.specialsmaxbucketsize = bucketspec.specialsinbucket; } if (bucketspec.nonspecialsinbucket + bucketspec.specialsinbucket > bcktab->maxbucketinfo.maxbucketsize) { bcktab->maxbucketinfo.maxbucketsize = bucketspec.nonspecialsinbucket + bucketspec.specialsinbucket; } } /* gt_logger_log(logger,"maxbucket (specials)=%lu", bcktab->maxbucketinfo.specialsmaxbucketsize); gt_logger_log(logger,"maxbucket (nonspecials)=%lu", bcktab->maxbucketinfo.nonspecialsmaxbucketsize); gt_logger_log(logger,"maxbucket (all)=%lu", bcktab->maxbucketinfo.maxbucketsize); */ } unsigned long gt_bcktab_nonspecialsmaxsize(const GtBcktab *bcktab) { return bcktab->maxbucketinfo.nonspecialsmaxbucketsize; } unsigned int gt_bcktab_prefixlength(const GtBcktab *bcktab) { return bcktab->prefixlength; } unsigned int gt_bcktab_singletonmaxprefixindex(const GtBcktab *bcktab, GtCodetype code) { if (bcktab->prefixlength > 2U) { GtCodetype ordercode, divisor; unsigned int prefixindex; for (prefixindex=bcktab->prefixlength-2; prefixindex>=1U; prefixindex--) { if (code >= bcktab->filltable[prefixindex]) { ordercode = code - bcktab->filltable[prefixindex]; divisor = bcktab->filltable[prefixindex] + 1; if (ordercode % divisor == 0) { ordercode /= divisor; if (gt_bcktab_distpfxidx_get(bcktab,prefixindex-1,ordercode) > 0) { return prefixindex; } } } else { break; } } } return bcktab->prefixlength-1; } /* The following function is not used */ unsigned long gt_bcktab_distpfxidxpartialsums(const GtBcktab *bcktab, GtCodetype code, unsigned int lowerbound) { GtCodetype ordercode, divisor; unsigned long sum = 0; unsigned int prefixindex; for (prefixindex=bcktab->prefixlength-2; prefixindex>lowerbound; prefixindex--) { if (code >= bcktab->filltable[prefixindex]) { ordercode = code - bcktab->filltable[prefixindex]; divisor = bcktab->filltable[prefixindex] + 1; if (ordercode % divisor == 0) { ordercode /= divisor; sum += gt_bcktab_distpfxidx_get(bcktab,prefixindex-1,ordercode); } } else { break; } } return sum; } unsigned int gt_bcktab_pfxidx2lcpvalues_uint8(unsigned int *minprefixindex, uint8_t *smalllcpvalues, unsigned long specialsinbucket, const GtBcktab *bcktab, GtCodetype code) { unsigned int prefixindex, maxprefixindex = 0; unsigned long idx, value, insertpos; GtCodetype ordercode, divisor; gt_assert(smalllcpvalues != NULL); *minprefixindex = bcktab->prefixlength; insertpos = specialsinbucket; for (prefixindex=1U; prefixindexprefixlength-1; prefixindex++) { if (code >= bcktab->filltable[prefixindex]) { ordercode = code - bcktab->filltable[prefixindex]; divisor = bcktab->filltable[prefixindex] + 1; if (ordercode % divisor == 0) { ordercode /= divisor; value = gt_bcktab_distpfxidx_get(bcktab,prefixindex-1,ordercode); if (value > 0) { maxprefixindex = prefixindex; if (*minprefixindex > prefixindex) { *minprefixindex = prefixindex; } for (idx=0; idx < value; idx++) { gt_assert(insertpos > 0); smalllcpvalues[--insertpos] = (uint8_t) prefixindex; } } } } } if (insertpos > 0) { maxprefixindex = bcktab->prefixlength-1; if (*minprefixindex == bcktab->prefixlength) { *minprefixindex = bcktab->prefixlength-1; } while (insertpos > 0) { smalllcpvalues[--insertpos] = (uint8_t) (bcktab->prefixlength-1); } } return maxprefixindex; } unsigned int gt_bcktab_pfxidx2lcpvalues_Lcpvaluetype( unsigned int *minprefixindex, GtLcpvaluetype *bucketoflcpvalues, unsigned long specialsinbucket, const GtBcktab *bcktab, GtCodetype code) { unsigned int prefixindex, maxprefixindex = 0; unsigned long idx, value, insertpos; GtCodetype ordercode, divisor; gt_assert(bucketoflcpvalues != NULL); *minprefixindex = bcktab->prefixlength; insertpos = specialsinbucket; for (prefixindex=1U; prefixindexprefixlength-1; prefixindex++) { if (code >= bcktab->filltable[prefixindex]) { ordercode = code - bcktab->filltable[prefixindex]; divisor = bcktab->filltable[prefixindex] + 1; if (ordercode % divisor == 0) { ordercode /= divisor; value = gt_bcktab_distpfxidx_get(bcktab,prefixindex-1,ordercode); if (value > 0) { maxprefixindex = prefixindex; if (*minprefixindex > prefixindex) { *minprefixindex = prefixindex; } for (idx=0; idx < value; idx++) { gt_assert(insertpos > 0); bucketoflcpvalues[--insertpos] = (GtLcpvaluetype) prefixindex; } } } } } if (insertpos > 0) { maxprefixindex = bcktab->prefixlength-1; if (*minprefixindex == bcktab->prefixlength) { *minprefixindex = bcktab->prefixlength-1; } while (insertpos > 0) { bucketoflcpvalues[--insertpos] = (GtLcpvaluetype) (bcktab->prefixlength-1); } } return maxprefixindex; } const GtCodetype **gt_bcktab_multimappower(const GtBcktab *bcktab) { return (const GtCodetype **) bcktab->multimappower; } GtCodetype gt_bcktab_filltable(const GtBcktab *bcktab,unsigned int idx) { return bcktab->filltable[idx]; } GtLeftborder *gt_bcktab_leftborder(GtBcktab *bcktab) { return &bcktab->leftborder; } GtCodetype gt_bcktab_numofallcodes(const GtBcktab *bcktab) { return bcktab->numofallcodes; } unsigned long gt_bcktab_leftborderpartialsums( unsigned long *saved_bucketswithoutwholeleaf, unsigned long *numofsuffixestosort, GtBcktab *bcktab) { unsigned long code, largestbucketsize, sumbuckets, saved = 0, currentsize; gt_assert(bcktab->numofallcodes > 0); largestbucketsize = sumbuckets = gt_bcktab_get_leftborder(bcktab,0); for (code = 1UL; code < bcktab->numofallcodes; code++) { currentsize = gt_bcktab_get_leftborder(bcktab,code); sumbuckets += currentsize; if (largestbucketsize < currentsize) { largestbucketsize = currentsize; } gt_bcktab_leftborder_assign(&bcktab->leftborder,code,sumbuckets); } gt_bcktab_leftborder_assign(&bcktab->leftborder,bcktab->numofallcodes, sumbuckets); if (saved_bucketswithoutwholeleaf != NULL) { *saved_bucketswithoutwholeleaf = saved; } if (numofsuffixestosort != NULL) { *numofsuffixestosort = sumbuckets; } return largestbucketsize; } size_t gt_bcktab_sizeforlcpvalues(const GtBcktab *bcktab) { size_t sizespeciallcps, sizelcps; sizespeciallcps = sizeof (uint8_t) * bcktab->maxbucketinfo.specialsmaxbucketsize; sizelcps = sizeof (unsigned long) * gt_bcktab_nonspecialsmaxsize(bcktab); return MAX(sizelcps,sizespeciallcps); } unsigned long gt_bcktab_maxbucketsize(const GtBcktab *bcktab) { return bcktab->maxbucketinfo.maxbucketsize; } GtCodetype gt_bcktab_findfirstlarger(const GtBcktab *bcktab, unsigned long suftaboffset) { GtCodetype left = 0, right = bcktab->numofallcodes, mid, found = bcktab->numofallcodes; unsigned long midval; while (left+1 < right) { mid = GT_DIV2(left+right); midval = gt_bcktab_get_leftborder(bcktab,mid); if (suftaboffset == midval) { return mid; } if (suftaboffset < midval) { found = mid; right = mid - 1; } else { left = mid + 1; } } return found; } #ifdef SKDEBUG #include "qgram2code.h" void gt_bcktab_consistencyofsuffix(int line, const GtEncseq *encseq, GtReadmode readmode, const GtBcktab *bcktab, const Suffixwithcode *suffix) { unsigned int idx, firstspecial = bcktab->prefixlength, gramfirstspecial; GtCodetype qgramcode = 0; unsigned long totallength; GtUchar cc = 0; totallength = gt_encseq_total_length(encseq); for (idx=0; idxprefixlength; idx++) { if (suffix->startpos + idx >= totallength) { firstspecial = idx; break; } cc = gt_encseq_get_encoded_char(encseq,suffix->startpos + idx, readmode); if (ISSPECIAL(cc)) { firstspecial = idx; break; } bcktab->qgrambuffer[idx] = cc; } for (idx=firstspecial; idxprefixlength; idx++) { bcktab->qgrambuffer[idx] = (GtUchar) (bcktab->numofchars-1); } gramfirstspecial = qgram2code(&qgramcode, (const GtCodetype **) bcktab->multimappower, bcktab->prefixlength, bcktab->qgrambuffer); gt_assert(gramfirstspecial == bcktab->prefixlength); gt_assert(qgramcode == suffix->code); if (firstspecial != suffix->prefixindex) { fprintf(stderr,"line %d: code=%u: ",line,suffix->code); fprintf(stderr,"firstspecial = %u != %u = suffix->prefixindex\n", firstspecial,suffix->prefixindex); exit(GT_EXIT_PROGRAMMING_ERROR); } } #endif genometools-1.5.1/src/match/bcktab.h000066400000000000000000000170001211610345200173240ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Stefan Kurtz Copyright (c) 2007-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef BCKTAB_H #define BCKTAB_H #include #include "core/error.h" #include "core/intbits.h" #include "core/codetype.h" #include "core/logger_api.h" #include "sfx-maprange.h" #ifdef GT_LONGLCPVALUES typedef unsigned long GtLcpvaluetype; #define GT_LCPVALUE_MAX ULONG_MAX #else typedef uint32_t GtLcpvaluetype; #define GT_LCPVALUE_MAX UINT32_MAX #endif typedef struct { unsigned long left, nonspecialsinbucket, specialsinbucket; } GtBucketspecification; typedef struct { uint32_t *uintbounds; unsigned long *ulongbounds; } GtLeftborder; typedef struct GtBcktab GtBcktab; /*@unused@*/ static inline void gt_bcktab_leftborder_addcode(GtLeftborder *lb, GtCodetype code) { gt_assert(lb != NULL); if (lb->ulongbounds != NULL) { lb->ulongbounds[code]++; } else { gt_assert(lb->uintbounds[code] < (uint32_t) UINT_MAX); lb->uintbounds[code]++; } } /*@unused@*/ static inline unsigned long gt_bcktab_leftborder_insertionindex( GtLeftborder *lb, GtCodetype code) { gt_assert(lb != NULL); if (lb->ulongbounds != NULL) { return --lb->ulongbounds[code]; } gt_assert(lb->uintbounds != NULL); return (unsigned long) --lb->uintbounds[code]; } void gt_bcktab_leftborder_assign(GtLeftborder *lb,GtCodetype code, unsigned long value); unsigned long gt_bcktab_get_leftborder(const GtBcktab *bcktab,GtCodetype code); GtBcktab *gt_bcktab_map(const char *indexname, unsigned int numofchars, unsigned int prefixlength, unsigned long maxvalue, bool withspecialsuffixes, GtError *err); void gt_bcktab_assignboundsforpart(GtBcktab *bcktab, GtCodetype mincode, GtCodetype maxcode); int gt_bcktab_remap_all(GtBcktab *bcktab,GtError *err); void gt_bcktab_delete(GtBcktab *bcktab); GtBcktab *gt_bcktab_new(unsigned int numofchars, unsigned int prefixlength, unsigned long maxvalue, bool storespecialcodes, bool withspecialsuffixes, GtLogger *logger, GtError *err); void gt_bcktab_updatespecials(GtBcktab *bcktab, GtCodetype code, unsigned int prefixindex); GtCodetype gt_bcktab_codedownscale(const GtBcktab *bcktab, GtCodetype code, unsigned int prefixindex, unsigned int maxprefixlen); int gt_bcktab_flush_to_file(FILE *fp,const GtBcktab *bcktab,GtError *err); void gt_bcktab_storetmp(GtBcktab *bcktab); void gt_bcktab_maprange_lb_cs(GtSfxmappedrangelist *sfxmrlist,GtBcktab *bcktab); unsigned int gt_bcktab_calcboundsparts(GtBucketspecification *bucketspec, const GtBcktab *bcktab, GtCodetype code, GtCodetype maxcode, unsigned long totalwidth, unsigned int rightchar); unsigned long gt_bcktab_calcrightbounds(const GtBcktab *bcktab, GtCodetype code, GtCodetype maxcode, unsigned long totalwidth); unsigned long gt_bcktab_distpfxidxpartialsums(const GtBcktab *bcktab, GtCodetype code, unsigned int lowerbound); void gt_bcktab_calcboundaries(GtBucketspecification *bucketspec, const GtBcktab *bcktab, GtCodetype code); void gt_bcktab_determinemaxsize(GtBcktab *bcktab, const GtCodetype mincode, const GtCodetype maxcode, unsigned long partwidth); unsigned int gt_bcktab_singletonmaxprefixindex(const GtBcktab *bcktab, GtCodetype code); unsigned int gt_bcktab_pfxidx2lcpvalues_uint8(unsigned int *minprefixindex, uint8_t *smalllcpvalues, unsigned long specialsinbucket, const GtBcktab *bcktab, GtCodetype code); unsigned int gt_bcktab_pfxidx2lcpvalues_Lcpvaluetype( unsigned int *minprefixindex, GtLcpvaluetype *bucketoflcpvalues, unsigned long specialsinbucket, const GtBcktab *bcktab, GtCodetype code); const GtCodetype **gt_bcktab_multimappower(const GtBcktab *bcktab); GtCodetype gt_bcktab_filltable(const GtBcktab *bcktab,unsigned int idx); GtLeftborder *gt_bcktab_leftborder(GtBcktab *bcktab); GtCodetype gt_bcktab_numofallcodes(const GtBcktab *bcktab); uint64_t gt_bcktab_sizeoftable(unsigned int numofchars, unsigned int prefixlength, unsigned long maxvalue, bool withspecialsuffixes); unsigned long gt_bcktab_sizeofworkspace(unsigned int prefixlength); unsigned int gt_bcktab_prefixlength(const GtBcktab *bcktab); unsigned long gt_bcktab_leftborderpartialsums( unsigned long *saved_bucketswithoutwholeleaf, unsigned long *numofsuffixestosort, GtBcktab *bcktab); size_t gt_bcktab_sizeforlcpvalues(const GtBcktab *bcktab); unsigned long gt_bcktab_maxbucketsize(const GtBcktab *bcktab); unsigned long gt_bcktab_nonspecialsmaxsize(const GtBcktab *bcktab); void gt_bcktab_leftborder_show(const GtBcktab *bcktab); GtCodetype gt_bcktab_findfirstlarger(const GtBcktab *bcktab, unsigned long suftaboffset); #ifdef SKDEBUG void gt_bcktab_checkcountspecialcodes(const GtBcktab *bcktab); void gt_bcktab_consistencyofsuffix(int line, const GtEncseq *encseq, GtReadmode readmode, const GtBcktab *bcktab, const Suffixwithcode *suffix); #endif #endif genometools-1.5.1/src/match/cgr_spacedseed.c000066400000000000000000000204221211610345200210260ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "core/ma_api.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "cgr_spacedseed.h" #include "sarr-def.h" #include "core/intbits.h" #include "idx-limdfs.h" #include "absdfstrans-def.h" #include "spaced-seeds.h" #include "iter-window.h" #include "esa-map.h" typedef struct { unsigned long seedwidth, numofonepositions; unsigned char *onepositions; GtBitsequence seedbitvector; } Spacedseed; static Spacedseed *spacedseed_new(const char *seedstring, GtError *err) { Spacedseed *spse; unsigned long idx, fillindex; bool haserr = false; spse = gt_malloc(sizeof (*spse)); spse->seedwidth = spse->numofonepositions = 0; spse->seedbitvector = 0; spse->onepositions = NULL; for (idx = 0; seedstring[idx] != '\0'; idx++) { if (spse->seedwidth == (unsigned long) GT_INTWORDSIZE) { gt_error_set(err,"space seed cannot be longer than %u", (unsigned int) GT_INTWORDSIZE); haserr = true; break; } spse->seedwidth++; if (seedstring[idx] == '1') { spse->numofonepositions++; spse->seedbitvector |= GT_ITHBIT(idx); } } if (!haserr) { spse->onepositions = gt_malloc(sizeof (*spse->onepositions) * spse->numofonepositions); for (fillindex = 0, idx = 0; seedstring[idx] != '\0'; idx++) { if (seedstring[idx] == '1') { spse->onepositions[fillindex++] = (unsigned char) idx; } } } if (haserr) { gt_free(spse); return NULL; } return spse; } static void spacedseed_delete(Spacedseed *spse) { gt_free(spse->onepositions); gt_free(spse); } static void singlewindowmatchspacedseed(Limdfsresources *limdfsresources, const AbstractDfstransformer *dfst, const GtUchar *qptr, const Spacedseed *spse) { gt_indexbasedspacedseeds(limdfsresources, qptr, spse->seedbitvector, spse->seedwidth, dfst); } static void singlequerymatchspacedseed(Limdfsresources *limdfsresources, const AbstractDfstransformer *dfst, const GtUchar *query, unsigned long querylen, const Spacedseed *spse) { const GtUchar *qptr; unsigned long offset, skipvalue; if (spse->seedwidth > querylen) { return; } qptr = query; offset = 0; while (qptr <= query + querylen - spse->seedwidth) { skipvalue = containsspecialbytestring(qptr,offset,spse->seedwidth); if (skipvalue == spse->seedwidth) { offset = spse->seedwidth-1; singlewindowmatchspacedseed(limdfsresources,dfst,qptr,spse); qptr++; } else { offset = 0; qptr += (skipvalue+1); } } } static void cgr_showmatch(GT_UNUSED void *processinfo, const GtIdxMatch *match) { printf("%lu\t",match->dblen); printf("%lu\n",match->dbstartpos); } #ifdef WITHONLINE static void onlinespacedseedsearch(const GtEncseq *encseq, const Spacedseed *spse, const GtUchar *qptr,qp) { Windowiterator *wit; const GtUchar *buffer; unsigned long currentpos, totallength; unsigned long firstpos, windowschecked = 0; Bitsequence bitmask; bool matched; totallength = gt_encseq_total_length(encseq); wit = gt_windowiterator_new(encseq,spse->seedwidth,0,totallength); while (true) { buffer = gt_windowiterator_next(¤tpos,&firstpos,wit); if (buffer != NULL) { bitmask = FIRSTBIT; matched = true; for (idx=0; idx < spse->seedwidth; idx++) { if ((spse->seedbitvector & bitmask) && qptr[idx] != buffer[idx]) { matched = false; break; } bitmask >>= 1; } if (matched) { } } else { break; } } gt_windowiterator_delete(wit); } #endif int gt_matchspacedseed(bool withesa, bool docompare, const char *inputindex, const GtStrArray *queryfilenames, bool verbose, GtError *err) { Genericindex *genericindex = NULL; bool haserr = false; Spacedseed *spse; GtLogger *logger; logger = gt_logger_new(verbose, GT_LOGGER_DEFLT_PREFIX, stdout); /* spse = spacedseed_new("11011011000011011",err); */ spse = spacedseed_new("111001001001010111",err); if (spse == NULL) { haserr = true; } if (!haserr) { genericindex = genericindex_new(inputindex,withesa, withesa && docompare,false,false, 0,logger,err); if (genericindex == NULL) { haserr = true; } } if (!haserr && docompare) { gt_assert(genericindex != NULL); gt_assert(spse != NULL); /* iteroverallwords(genericindex->suffixarray->encseq,spse->seedwidth, 0,gt_encseq_total_length(genericindex->suffixarray->encseq)); iteroverallwords2(genericindex->suffixarray->encseq,spse->seedwidth, 0, gt_encseq_total_length(genericindex->suffixarray->encseq)); */ } if (!haserr) { GtSeqIterator *seqit; const GtUchar *query; unsigned long querylen; char *desc = NULL; uint64_t unitnum; int retval; Limdfsresources *limdfsresources = NULL; const AbstractDfstransformer *dfst; const GtEncseq *encseq; dfst = gt_spse_AbstractDfstransformer(); gt_assert(genericindex != NULL); limdfsresources = gt_newLimdfsresources(genericindex, true, 0, (unsigned long) GT_INTWORDSIZE, false, /* keepexpandedonstack */ cgr_showmatch, NULL, /* processmatch info */ NULL, /* processresult */ NULL, /* processresult info */ dfst); encseq = genericindex_getencseq(genericindex); seqit = gt_seq_iterator_sequence_buffer_new(queryfilenames, err); if (!seqit) haserr = true; if (!haserr) { GtAlphabet *a = gt_encseq_alphabet(encseq); gt_seq_iterator_set_symbolmap(seqit, gt_alphabet_symbolmap(a)); for (unitnum = 0; /* Nothing */; unitnum++) { retval = gt_seq_iterator_next(seqit, &query, &querylen, &desc, err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } singlequerymatchspacedseed(limdfsresources, dfst, query, querylen, spse); } if (limdfsresources != NULL) { gt_freeLimdfsresources(&limdfsresources,dfst); } gt_seq_iterator_delete(seqit); } } genericindex_delete(genericindex); spacedseed_delete(spse); gt_logger_delete(logger); return haserr ? -1 : 0; } genometools-1.5.1/src/match/cgr_spacedseed.h000066400000000000000000000023501211610345200210330ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef CGR_SPACEDSEED_H #define CGR_SPACEDSEED_H #include #include "core/str.h" #include "core/str_array_api.h" #include "core/error_api.h" int gt_matchspacedseed(bool withesa, bool docompare, const char *inputindex, const GtStrArray *queryfilenames, bool verbose, GtError *err); #endif genometools-1.5.1/src/match/chain2dim.c000066400000000000000000001645261211610345200177470ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/error_api.h" #include "core/minmax.h" #include "core/mathsupport.h" /* for gt_double_equals_double */ #include "core/unused_api.h" #include "core/ma.h" #include "core/arraydef.h" #include "core/logger.h" #include "extended/rbtree.h" #include "extended/ranked_list.h" #include "chain2dim.h" #include "prsqualint.h" /* The basic information required for each match is stored in a structure of the following type. The user has to specify those components which are tagged `user defined'. The chaining algorithms computes the remaining components tagged 'compute' in chain. */ typedef struct { GtChain2Dimpostype startpos[2], /* start of matches in the 2 dimensions, userdef */ endpos[2]; /* end of matches in the 2 dimensions, userdef */ unsigned long firstinchain, /* first element in chain, computed for all chainkinds but only used for local chaining */ previousinchain; /* previous index in chain, compute */ GtChain2Dimscoretype weight, /* weight of match, user defined */ initialgap, /* gap to start of sequences, user defined */ terminalgap, /* gap to last positions of match, user defined */ score; /* score of highest scoreing chain ending here, compute */ } Matchchaininfo; struct GtChain2Dimmatchtable { Matchchaininfo *matches; GtChain2Dimscoretype largestdim0, largestdim1; unsigned long nextfree, allocated, /* not NULL only for GLOBALCHAININGALLCHAINS */ allprevious, *previouscount, *previousbound, *previoustab; }; /* The following type defines the possible kinds of chaining. The mode can be one of the two following values. */ typedef enum { GLOBALCHAINING, /* global chaining without gap costs */ GLOBALCHAININGWITHGAPCOST, /* global chaining with L1 gap costs */ GLOBALCHAININGWITHOVERLAPS, /* chaining with overlaps */ GLOBALCHAININGALLCHAINS, /* global chaining with output of all chains */ LOCALCHAININGMAX, /* local chaining; one maximum is reported */ LOCALCHAININGTHRESHOLD, /* local chaining; all chains >= minscore */ LOCALCHAININGBEST, /* local chaining; k best local chains */ LOCALCHAININGPERCENTAWAY /* local chaining; percent away from best */ } GtChain2Dimkind; static bool chain2dim_chainkind_global(GtChain2Dimkind chainkind) { return (chainkind == GLOBALCHAINING || chainkind == GLOBALCHAININGWITHGAPCOST || chainkind == GLOBALCHAININGWITHOVERLAPS || chainkind == GLOBALCHAININGALLCHAINS) ? true : false; } /* The following type defines the chain mode consisting of a chainkind. If chainkind = LOCALCHAININGTHRESHOLD, then an additional component minimumscore is used. If chainkind = LOCALCHAININGBEST, then an additional component howmanybest is used. If chainkind = LOCALCHAININGPERCENTAWAY, then an additional component percentawayfrombest is defined */ struct GtChain2Dimmode { GtChain2Dimkind chainkind; GtChain2Dimpostype maxgapwidth; /* 0 if undefined or otherwise maximal width of gap */ GtChain2Dimscoretype minimumscore; /* only defined if chainkind = LOCALCHAININGTHRESHOLD */ unsigned long howmanybest, /* only defined if chainkind = LOCALCHAININGBEST */ percentawayfrombest; /* only defined if chainkind = LOCALCHAININGPERCENTAWAY */ }; typedef unsigned long GtChain2Dimref; GT_DECLAREARRAYSTRUCT(GtChain2Dimref); /* A chain consists of an array of references to chained matches. These refer to an array of matchchaininfos. */ struct GtChain2Dim { GtArrayGtChain2Dimref chainedmatches; GtChain2Dimscoretype scoreofchain; bool storedinreverseorder; }; GtChain2Dimmatchtable *gt_chain_matchtable_new(unsigned long numberofmatches) { GtChain2Dimmatchtable *matchtable = gt_malloc(sizeof (*matchtable)); matchtable->matches = gt_malloc(sizeof (*matchtable->matches) * numberofmatches); matchtable->nextfree = 0; matchtable->allocated = numberofmatches; matchtable->largestdim0 = matchtable->largestdim1 = 0; matchtable->previouscount = NULL; matchtable->previousbound = NULL; matchtable->previoustab = NULL; matchtable->allprevious = 0; return matchtable; } void gt_chain_matchtable_delete(GtChain2Dimmatchtable *matchtable) { if (matchtable != NULL) { gt_free(matchtable->matches); gt_free(matchtable->previouscount); gt_free(matchtable->previousbound); gt_free(matchtable->previoustab); gt_free(matchtable); } } void gt_chain_matchtable_empty(GtChain2Dimmatchtable *matchtable) { gt_assert(matchtable != NULL); matchtable->largestdim0 = matchtable->largestdim1 = 0; matchtable->nextfree = 0; } void gt_chain_matchtable_add(GtChain2Dimmatchtable *matchtable, const GtChain2Dimmatchvalues *inmatch) { Matchchaininfo *matchchaininfo; gt_assert(matchtable->nextfree < matchtable->allocated); gt_assert(inmatch->startpos[0] <= inmatch->endpos[0]); gt_assert(inmatch->startpos[1] <= inmatch->endpos[1]); matchchaininfo = matchtable->matches + matchtable->nextfree++; matchchaininfo->startpos[0] = inmatch->startpos[0]; matchchaininfo->startpos[1] = inmatch->startpos[1]; matchchaininfo->endpos[0] = inmatch->endpos[0]; matchchaininfo->endpos[1] = inmatch->endpos[1]; matchchaininfo->weight = inmatch->weight; if (matchtable->largestdim0 < (GtChain2Dimscoretype) inmatch->endpos[0]) { matchtable->largestdim0 = (GtChain2Dimscoretype) inmatch->endpos[0]; } if (matchtable->largestdim1 < (GtChain2Dimscoretype) inmatch->endpos[1]) { matchtable->largestdim1 = (GtChain2Dimscoretype) inmatch->endpos[1]; } } void gt_chain_fillthegapvalues(GtChain2Dimmatchtable *matchtable) { Matchchaininfo *fiptr; for (fiptr = matchtable->matches; fiptr < matchtable->matches + matchtable->nextfree; fiptr++) { fiptr->initialgap = (GtChain2Dimscoretype) (fiptr->startpos[0] + fiptr->startpos[1]); fiptr->terminalgap = (GtChain2Dimscoretype) (matchtable->largestdim0 - fiptr->endpos[0] + matchtable->largestdim1 - fiptr->endpos[1]); } } void gt_chain_applyweight(double weightfactor, GtChain2Dimmatchtable *matchtable) { if (!gt_double_equals_double(weightfactor, 1.0)) { Matchchaininfo *fiptr; for (fiptr = matchtable->matches; fiptr < matchtable->matches + matchtable->nextfree; fiptr++) { fiptr->weight *= weightfactor; } } } #define MAKEENDPOINT(FID) (FID) #define FRAGIDENT(FRAG) ((FRAG)->fpident) #define GT_CHAIN2DIM_UNDEFPREVIOUS matchtable->nextfree #define GT_CHAIN2DIM_GETSTOREDSTARTPOINT(DIM,IDX)\ matchtable->matches[IDX].startpos[DIM] #define GT_CHAIN2DIM_GETSTOREDENDPOINT(DIM,IDX)\ matchtable->matches[IDX].endpos[DIM] #define GT_CHAIN2DIM_INITIALGAP(IDX)\ matchtable->matches[IDX].initialgap #define GT_CHAIN2DIM_TERMINALGAP(IDX)\ matchtable->matches[IDX].terminalgap typedef GtChain2Dimscoretype (*GtChain2Dimgapcostfunction)( const GtChain2Dimmatchtable *, unsigned long, unsigned long); typedef struct { unsigned long fpident; GtChain2Dimpostype fpposition; } GtChain2DimMatchpoint; typedef struct { GtRBTree *dictroot; unsigned long *endpointperm; } GtChain2DimMatchstore; typedef struct { GtChain2Dimscoretype maxscore; unsigned long maxmatchnum; bool defined; } GtChain2DimMaxmatchvalue; /* The component isavailable is used to (1) indicate that some score is already stored (when generating the classes) (2) indicate that the class representative has not yet been processed further (after generation) */ typedef struct { bool isavailable; GtChain2Dimscoretype score; } GtChain2DimBestofclass; static bool gt_chain2dim_overlapping(const GtChain2Dimmatchtable *matchtable, unsigned long i, unsigned long j) { return (GT_CHAIN2DIM_GETSTOREDENDPOINT(0,i) >= GT_CHAIN2DIM_GETSTOREDSTARTPOINT(0,j) || GT_CHAIN2DIM_GETSTOREDENDPOINT(1,i) >= GT_CHAIN2DIM_GETSTOREDSTARTPOINT(1,j)) ? true : false; } static bool gt_chain2dim_colinear(const GtChain2Dimmatchtable *matchtable, int dim, unsigned long i, unsigned long j) { return (GT_CHAIN2DIM_GETSTOREDENDPOINT(dim,i) < GT_CHAIN2DIM_GETSTOREDSTARTPOINT(dim,j)) ? true : false; } static bool gt_chain2dim_ovl_colinear(const GtChain2Dimmatchtable *matchtable, unsigned long i, unsigned long j) { return (GT_CHAIN2DIM_GETSTOREDSTARTPOINT(0, i) < GT_CHAIN2DIM_GETSTOREDSTARTPOINT(0, j) && GT_CHAIN2DIM_GETSTOREDENDPOINT(0, i) < GT_CHAIN2DIM_GETSTOREDENDPOINT(0, j) && GT_CHAIN2DIM_GETSTOREDSTARTPOINT(1, i) < GT_CHAIN2DIM_GETSTOREDSTARTPOINT(1, j) && GT_CHAIN2DIM_GETSTOREDENDPOINT(1, i) < GT_CHAIN2DIM_GETSTOREDENDPOINT(1, j)) ? true : false; } static GtChain2Dimscoretype gapcostL1(const GtChain2Dimmatchtable *matchtable, unsigned long i, unsigned long j) { return (GtChain2Dimscoretype) ((GT_CHAIN2DIM_GETSTOREDSTARTPOINT(0,j) - GT_CHAIN2DIM_GETSTOREDENDPOINT(0,i)) + (GT_CHAIN2DIM_GETSTOREDSTARTPOINT(1,j) - GT_CHAIN2DIM_GETSTOREDENDPOINT(1,i))); } static GtChain2Dimscoretype gt_chain2dim_overlapcost( const GtChain2Dimmatchtable *matchtable, unsigned long i, unsigned long j) { GtChain2Dimpostype overlaplength = 0; /* add overlap in first dimension */ if (GT_CHAIN2DIM_GETSTOREDSTARTPOINT(0, j) <= GT_CHAIN2DIM_GETSTOREDENDPOINT(0, i)) { overlaplength += GT_CHAIN2DIM_GETSTOREDENDPOINT(0, i) - GT_CHAIN2DIM_GETSTOREDSTARTPOINT(0, j) + 1; } /* add overlap in second dimension */ if (GT_CHAIN2DIM_GETSTOREDSTARTPOINT(1, j) <= GT_CHAIN2DIM_GETSTOREDENDPOINT(1, i)) { overlaplength += GT_CHAIN2DIM_GETSTOREDENDPOINT(1, i) - GT_CHAIN2DIM_GETSTOREDSTARTPOINT(1, j) + 1; } return (GtChain2Dimscoretype) overlaplength; } /* The Chebychev distance for two qhits h=(i,j) and h'=(i',j') is defined as: max{|i'-i-q|,|j'-j-q|}, whereas i+q-1 is the end point in i-dimension of match 1 and j+q-1 is the end point in j-dimension of match 1. In using the match specific end points, other than fixed values for q, following function generalizes to MEMs as well. */ static GtChain2Dimscoretype gapcostCc(const GtChain2Dimmatchtable *matchtable, unsigned long i,unsigned long j) { GtChain2Dimpostype value1, value2; gt_assert(GT_CHAIN2DIM_GETSTOREDSTARTPOINT(0,j) > GT_CHAIN2DIM_GETSTOREDENDPOINT(0,i) && GT_CHAIN2DIM_GETSTOREDSTARTPOINT(1,j) > GT_CHAIN2DIM_GETSTOREDENDPOINT(1,i)); value1 = GT_CHAIN2DIM_GETSTOREDSTARTPOINT(0,j) - GT_CHAIN2DIM_GETSTOREDENDPOINT(0,i) - 1, value2 = GT_CHAIN2DIM_GETSTOREDSTARTPOINT(1,j) - GT_CHAIN2DIM_GETSTOREDENDPOINT(1,i) - 1; return (GtChain2Dimscoretype) MAX(value1,value2); } #define GT_MINARRAYSPACE(A,TYPE,MINLEN)\ do {\ if ((MINLEN) >= (A)->allocated##TYPE)\ {\ (A)->allocated##TYPE = MINLEN;\ (A)->space##TYPE = gt_realloc_mem((A)->space##TYPE,\ sizeof (TYPE) *\ (A)->allocated##TYPE,\ __FILE__, __LINE__);\ }\ gt_assert((A)->space##TYPE != NULL);\ } while (false) static void gt_chain2dim_chainingboundarycases(const GtChain2Dimmode *chainmode, GtChain2Dim *chain, const GtChain2Dimmatchtable *matchtable) { chain->storedinreverseorder = false; if (matchtable->nextfree == 0) { chain->scoreofchain = 0; chain->chainedmatches.nextfreeGtChain2Dimref = 0; } else { if (matchtable->nextfree == 1UL) { chain->scoreofchain = matchtable->matches[0].weight; if (chainmode->chainkind == GLOBALCHAININGWITHGAPCOST) { chain->scoreofchain -= (GT_CHAIN2DIM_INITIALGAP(0) + GT_CHAIN2DIM_TERMINALGAP(0)); } chain->chainedmatches.nextfreeGtChain2Dimref = 0; GT_STOREINARRAY(&chain->chainedmatches,GtChain2Dimref,32UL,0); } } } static void gt_chain2dim_retrace_previousinchain(GtChain2Dim *chain, const GtChain2Dimmatchtable *matchtable, unsigned long retracestart) { unsigned long matchnum, lengthofchain; chain->storedinreverseorder = false; for (lengthofchain = 0, matchnum = retracestart; matchnum != GT_CHAIN2DIM_UNDEFPREVIOUS; lengthofchain++) { /* Use previousinchain */ matchnum = matchtable->matches[matchnum].previousinchain; } GT_MINARRAYSPACE(&chain->chainedmatches,GtChain2Dimref,lengthofchain); chain->chainedmatches.nextfreeGtChain2Dimref = lengthofchain; for (matchnum = retracestart; matchnum != GT_CHAIN2DIM_UNDEFPREVIOUS; /* Use previousinchain */ matchnum = matchtable->matches[matchnum].previousinchain) { gt_assert(lengthofchain > 0); lengthofchain--; chain->chainedmatches.spaceGtChain2Dimref[lengthofchain] = matchnum; } gt_assert(lengthofchain == 0); } typedef struct { unsigned long level, son; } GtChain2DimEdgelevel; GT_DECLAREARRAYSTRUCT(GtChain2DimEdgelevel); static void gt_chain2dim_nd_retrace_allprevious( GtArrayGtChain2DimEdgelevel *stack, GtChain2Dim *chain, const GtChain2Dimmatchtable *matchtable, unsigned long retracestart, GtChain2Dimprocessor chainprocessor, void *cpinfo) { unsigned long idx; GtChain2DimEdgelevel *el; if (matchtable->previouscount[retracestart] == 0) { return; } gt_assert(stack->nextfreeGtChain2DimEdgelevel == 0); chain->storedinreverseorder = true; GT_MINARRAYSPACE(&chain->chainedmatches,GtChain2Dimref,32UL); chain->chainedmatches.spaceGtChain2Dimref[0] = retracestart; chain->chainedmatches.nextfreeGtChain2Dimref = 1UL; for (idx = matchtable->previousbound[retracestart]; idx < matchtable->previousbound[retracestart] + matchtable->previouscount[retracestart]; idx++) { if (matchtable->previoustab[idx] != GT_CHAIN2DIM_UNDEFPREVIOUS) { GT_GETNEXTFREEINARRAY(el,stack,GtChain2DimEdgelevel,32UL); el->level = 1UL; el->son = matchtable->previoustab[idx]; } } while (stack->nextfreeGtChain2DimEdgelevel > 0) { GtChain2DimEdgelevel father = stack->spaceGtChain2DimEdgelevel[--stack->nextfreeGtChain2DimEdgelevel]; GT_MINARRAYSPACE(&chain->chainedmatches,GtChain2Dimref,father.level + 1); chain->chainedmatches.spaceGtChain2Dimref[father.level] = father.son; chain->chainedmatches.nextfreeGtChain2Dimref = father.level + 1; if (matchtable->previouscount[father.son] == 0) { chainprocessor(cpinfo,matchtable,chain); } else { for (idx = matchtable->previousbound[father.son]; idx < matchtable->previousbound[father.son] + matchtable->previouscount[father.son]; idx++) { if (matchtable->previoustab[idx] != GT_CHAIN2DIM_UNDEFPREVIOUS) { GT_GETNEXTFREEINARRAY(el,stack,GtChain2DimEdgelevel,32UL); el->level = father.level + 1; el->son = matchtable->previoustab[idx]; } } } } } static bool gt_chain2dim_checkmaxgapwidth(const GtChain2Dimmatchtable *matchtable, GtChain2Dimpostype maxgapwidth, unsigned long leftmatch, unsigned long rightmatch) { GtChain2Dimpostype gapwidth, startpoint, endpoint; startpoint = GT_CHAIN2DIM_GETSTOREDSTARTPOINT(0,rightmatch); endpoint = GT_CHAIN2DIM_GETSTOREDENDPOINT(0,leftmatch); if (startpoint <= endpoint) { gapwidth = 0; } else { gapwidth = startpoint - endpoint - 1; } if (gapwidth > maxgapwidth) { return false; } startpoint = GT_CHAIN2DIM_GETSTOREDSTARTPOINT(1,rightmatch); endpoint = GT_CHAIN2DIM_GETSTOREDENDPOINT(1,leftmatch); if (startpoint <= endpoint) { gapwidth = 0; } else { gapwidth = startpoint - endpoint - 1; } if (gapwidth > maxgapwidth) { return false; } return true; } static void gt_chain2dim_bruteforcechainingscores( const GtChain2Dimmode *chainmode, GtChain2Dimmatchtable *matchtable, GtChain2Dimgapcostfunction chaingapcostfunction) { if (matchtable->nextfree > 1UL) { unsigned long rightmatch; matchtable->matches[0].firstinchain = 0; matchtable->matches[0].previousinchain = GT_CHAIN2DIM_UNDEFPREVIOUS; matchtable->matches[0].score = matchtable->matches[0].weight; if (chainmode->chainkind == GLOBALCHAININGWITHGAPCOST) { matchtable->matches[0].score -= (GT_CHAIN2DIM_INITIALGAP(0) + GT_CHAIN2DIM_TERMINALGAP(0)); } for (rightmatch=1Ul; rightmatchnextfree; rightmatch++) { const GtChain2Dimscoretype weightright = matchtable->matches[rightmatch].weight; unsigned long leftmatch; GtChain2DimMaxmatchvalue localmaxmatch; localmaxmatch.defined = false; localmaxmatch.maxscore = 0; localmaxmatch.maxmatchnum = 0; for (leftmatch=0; leftmatchmaxgapwidth != 0 && !gt_chain2dim_checkmaxgapwidth(matchtable,chainmode->maxgapwidth, leftmatch,rightmatch)) { combinable = false; } else { if (chainmode->chainkind == GLOBALCHAININGWITHOVERLAPS) { combinable = gt_chain2dim_ovl_colinear(matchtable,leftmatch, rightmatch); } else { if (gt_chain2dim_overlapping(matchtable,leftmatch,rightmatch)) { combinable = false; } else { combinable = true; } } } if (combinable) { GtChain2Dimscoretype score = matchtable->matches[leftmatch].score; unsigned long previous; if (chainmode->chainkind == GLOBALCHAINING) { /* process chainkinds without gap costs */ score += weightright; previous = leftmatch; } else { score -= chaingapcostfunction(matchtable,leftmatch,rightmatch); if (chainmode->chainkind == GLOBALCHAININGWITHGAPCOST) { score += (weightright + GT_CHAIN2DIM_TERMINALGAP(leftmatch) - GT_CHAIN2DIM_TERMINALGAP(rightmatch)); previous = leftmatch; } else { if (score > 0) { score += weightright; previous = leftmatch; } else { score = weightright; previous = GT_CHAIN2DIM_UNDEFPREVIOUS; } } } if (!localmaxmatch.defined || localmaxmatch.maxscore < score) { localmaxmatch.maxscore = score; localmaxmatch.maxmatchnum = previous; localmaxmatch.defined = true; } } } if (localmaxmatch.defined) { matchtable->matches[rightmatch].previousinchain = localmaxmatch.maxmatchnum; if (localmaxmatch.maxmatchnum == GT_CHAIN2DIM_UNDEFPREVIOUS) { matchtable->matches[rightmatch].firstinchain = rightmatch; } else { matchtable->matches[rightmatch].firstinchain = matchtable->matches[localmaxmatch.maxmatchnum].firstinchain; } matchtable->matches[rightmatch].score = localmaxmatch.maxscore; } else { matchtable->matches[rightmatch].previousinchain = GT_CHAIN2DIM_UNDEFPREVIOUS; matchtable->matches[rightmatch].firstinchain = rightmatch; matchtable->matches[rightmatch].score = weightright; if (chainmode->chainkind == GLOBALCHAININGWITHGAPCOST) { matchtable->matches[rightmatch].score -= (GT_CHAIN2DIM_INITIALGAP(rightmatch) + GT_CHAIN2DIM_TERMINALGAP(rightmatch)); } } } } } static void gt_chain2dim_ndbfchainscores(GtChain2Dimmatchtable *matchtable) { if (matchtable->nextfree > 1UL) { unsigned long rightmatch; matchtable->matches[0].firstinchain = 0; matchtable->matches[0].previousinchain = GT_CHAIN2DIM_UNDEFPREVIOUS; matchtable->matches[0].score = matchtable->matches[0].weight; matchtable->previouscount = gt_malloc(sizeof (*matchtable->previouscount) * matchtable->nextfree); matchtable->previousbound = gt_malloc(sizeof (*matchtable->previousbound) * matchtable->nextfree); matchtable->previouscount[0] = 0; for (rightmatch=1Ul; rightmatchnextfree; rightmatch++) { const GtChain2Dimscoretype weightright = matchtable->matches[rightmatch].weight; unsigned long leftmatch; GtChain2DimMaxmatchvalue localmaxmatch; unsigned long previouswithbestscore; localmaxmatch.defined = false; localmaxmatch.maxscore = 0; localmaxmatch.maxmatchnum = 0; previouswithbestscore = 0; for (leftmatch=0; leftmatchmatches[leftmatch].score; unsigned long previous; if (score > 0) { score += weightright; previous = leftmatch; } else { score = weightright; previous = GT_CHAIN2DIM_UNDEFPREVIOUS; } if (!localmaxmatch.defined) { localmaxmatch.maxscore = score; localmaxmatch.maxmatchnum = previous; localmaxmatch.defined = true; previouswithbestscore = 1UL; } else { if (localmaxmatch.maxscore < score) { localmaxmatch.maxscore = score; localmaxmatch.maxmatchnum = previous; previouswithbestscore = 1UL; } else { if (localmaxmatch.maxscore == score) { previouswithbestscore++; } } } } } if (localmaxmatch.defined) { gt_assert(previouswithbestscore > 0); matchtable->matches[rightmatch].previousinchain = localmaxmatch.maxmatchnum; matchtable->matches[rightmatch].score = localmaxmatch.maxscore; matchtable->previouscount[rightmatch] = previouswithbestscore; } else { matchtable->matches[rightmatch].previousinchain = GT_CHAIN2DIM_UNDEFPREVIOUS; matchtable->matches[rightmatch].score = weightright; matchtable->previouscount[rightmatch] = 0; } } matchtable->previousbound[0] = matchtable->previouscount[0]; for (rightmatch=1UL; rightmatchnextfree; rightmatch++) { matchtable->previousbound[rightmatch] = matchtable->previousbound[rightmatch-1] + matchtable->previouscount[rightmatch]; } matchtable->allprevious = matchtable->previousbound[matchtable->nextfree-1]; matchtable->previoustab = gt_malloc(sizeof (*matchtable->previoustab) * matchtable->allprevious); for (rightmatch=1Ul; rightmatchnextfree; rightmatch++) { const GtChain2Dimscoretype weightright = matchtable->matches[rightmatch].weight; unsigned long leftmatch; if (matchtable->previouscount[rightmatch] == 0) { continue; } for (leftmatch=0; leftmatchmatches[leftmatch].score; unsigned long previous; if (score > 0) { score += weightright; previous = leftmatch; } else { score = weightright; previous = GT_CHAIN2DIM_UNDEFPREVIOUS; } if (score == matchtable->matches[rightmatch].score) { gt_assert(matchtable->previousbound[rightmatch] > 0); matchtable->previoustab[--matchtable->previousbound[rightmatch]] = previous; } } } } } } /* The following function compares match points. These are end points of matches in dimension 2. If the match points are identical, then the order is undefined. */ static int gt_chain2dim_cmpendMatchpoint2(const void* keya, const void* keyb, GT_UNUSED void *info) { if (((GtChain2DimMatchpoint *) keya)->fpposition < ((GtChain2DimMatchpoint *) keyb)->fpposition) { return -1; } if (((GtChain2DimMatchpoint *) keya)->fpposition > ((GtChain2DimMatchpoint *) keyb)->fpposition) { return 1; } if (FRAGIDENT((GtChain2DimMatchpoint *) keya) < FRAGIDENT((GtChain2DimMatchpoint *) keyb)) { return -1; } if (FRAGIDENT((GtChain2DimMatchpoint *) keya) > FRAGIDENT((GtChain2DimMatchpoint *) keyb)) { return 1; } return 0; } static GtChain2Dimscoretype gt_chain2dim_evalpriority(bool addterminal, const GtChain2Dimmatchtable *matchtable, unsigned long matchnum) { if (addterminal) { return matchtable->matches[matchnum].score - GT_CHAIN2DIM_TERMINALGAP(matchnum); } return matchtable->matches[matchnum].score; } static void gt_chain2dim_insertintodict(bool addterminal, const GtChain2Dimmatchtable *matchtable, GtChain2DimMatchstore *matchstore, GtChain2DimMatchpoint *qmatch2) { GtChain2DimMatchpoint *retval2; bool nodecreated; retval2 = (GtChain2DimMatchpoint *) gt_rbtree_search(matchstore->dictroot, qmatch2, &nodecreated); gt_assert(retval2 != NULL); if (!nodecreated) { if (gt_chain2dim_evalpriority(addterminal,matchtable,FRAGIDENT(retval2)) < gt_chain2dim_evalpriority(addterminal,matchtable,FRAGIDENT(qmatch2))) { gt_assert(retval2->fpposition == qmatch2->fpposition); retval2->fpident = qmatch2->fpident; } } } static void gt_chain2dim_activatematchpoint(bool addterminal, const GtChain2Dimmatchtable *matchtable, GtChain2DimMatchstore *matchstore, GtChain2DimMatchpoint *qmatch2) { GtChain2DimMatchpoint *tmp2; GtChain2Dimscoretype qpriority; qpriority = gt_chain2dim_evalpriority(addterminal,matchtable, FRAGIDENT(qmatch2)); tmp2 = (GtChain2DimMatchpoint *) gt_rbtree_previous_equal_key( matchstore->dictroot, qmatch2, gt_chain2dim_cmpendMatchpoint2, NULL); if (tmp2 == NULL || qpriority > gt_chain2dim_evalpriority(addterminal,matchtable, FRAGIDENT(tmp2))) { gt_chain2dim_insertintodict(addterminal,matchtable,matchstore,qmatch2); while (true) { tmp2 = (GtChain2DimMatchpoint *) gt_rbtree_next_key( matchstore->dictroot, qmatch2, gt_chain2dim_cmpendMatchpoint2, NULL); if (tmp2 == NULL || qpriority <= gt_chain2dim_evalpriority(addterminal,matchtable, FRAGIDENT(tmp2))) { break; } if (gt_rbtree_erase(matchstore->dictroot, tmp2) != 0) { fprintf(stderr,"cannot delete successor node\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } } } else { gt_free(qmatch2); } } static void gt_chain2dim_evalmatchscore(const GtChain2Dimmode *chainmode, GtChain2Dimmatchtable *matchtable, GtChain2DimMatchstore *matchstore, bool gapsL1, unsigned long matchpointident, unsigned int presortdim) { unsigned long previous; GtChain2Dimpostype startpos2; GtChain2DimMatchpoint *qmatch2; GtChain2Dimscoretype score; startpos2 = GT_CHAIN2DIM_GETSTOREDSTARTPOINT(1-presortdim,matchpointident); if (startpos2 == 0) { qmatch2 = NULL; } else { GtChain2DimMatchpoint keymatch2; keymatch2.fpposition = startpos2 - 1; /* it is a start position */ keymatch2.fpident = MAKEENDPOINT(matchpointident); /* but considered as endpoint */ qmatch2 = (GtChain2DimMatchpoint *) gt_rbtree_previous_equal_key( matchstore->dictroot, &keymatch2, gt_chain2dim_cmpendMatchpoint2, NULL); if (qmatch2 != NULL) { if (chainmode->maxgapwidth != 0 && !gt_chain2dim_checkmaxgapwidth(matchtable, chainmode->maxgapwidth, FRAGIDENT(qmatch2), matchpointident)) { qmatch2 = NULL; } } } if (qmatch2 == NULL) { score = matchtable->matches[matchpointident].weight; if (chainmode->chainkind == GLOBALCHAININGWITHGAPCOST) { score -= GT_CHAIN2DIM_INITIALGAP(matchpointident); } previous = GT_CHAIN2DIM_UNDEFPREVIOUS; } else { score = matchtable->matches[FRAGIDENT(qmatch2)].score; if (chainmode->chainkind == GLOBALCHAINING) { score += matchtable->matches[matchpointident].weight; previous = FRAGIDENT(qmatch2); } else { GtChain2Dimscoretype tmpgc; if (gapsL1) { tmpgc = gapcostL1(matchtable,FRAGIDENT(qmatch2),matchpointident); } else { tmpgc = gapcostCc(matchtable,FRAGIDENT(qmatch2),matchpointident); } if (chainmode->chainkind == GLOBALCHAININGWITHGAPCOST || score > tmpgc) { score += (matchtable->matches[matchpointident].weight - tmpgc); previous = FRAGIDENT(qmatch2); } else { score = matchtable->matches[matchpointident].weight; previous = GT_CHAIN2DIM_UNDEFPREVIOUS; } } } matchtable->matches[matchpointident].score = score; matchtable->matches[matchpointident].previousinchain = previous; if (previous == GT_CHAIN2DIM_UNDEFPREVIOUS) { matchtable->matches[matchpointident].firstinchain = matchpointident; } else { matchtable->matches[matchpointident].firstinchain = matchtable->matches[previous].firstinchain; } } static bool gt_chain2dim_isrightmaximal_chain( const GtChain2Dimmatchtable *matchtable, unsigned long currentmatch) { if (currentmatch == matchtable->nextfree - 1) { return true; } /* Use previousinchain */ if (matchtable->matches[currentmatch+1].previousinchain != currentmatch) { return true; } if (matchtable->matches[currentmatch+1].score < matchtable->matches[currentmatch].score) { return true; } return false; } /* The following function is called only for local chaining. As it is the only function which accesses firstinchain, this component is used only for local chaining */ static GtChain2DimBestofclass *gt_chain2dim_local_getclassrep( GtChain2DimBestofclass *chainequivalenceclasses, const GtChain2Dimmatchtable *matchtable, unsigned long matchnum) { return chainequivalenceclasses + matchtable->matches[matchnum].firstinchain; } /* The following function is called for local chaining only. */ static void gt_chain2dim_local_determineequivreps( GtChain2DimBestofclass *chainequivalenceclasses, const GtChain2Dimmatchtable *matchtable) { unsigned long matchnum; GtChain2DimBestofclass *classptr, *classrep; for (classptr = chainequivalenceclasses; classptr < chainequivalenceclasses + matchtable->nextfree; classptr++) { classptr->isavailable = false; } for (matchnum=0; matchnumnextfree; matchnum++) { if (gt_chain2dim_isrightmaximal_chain(matchtable,matchnum)) { classrep = gt_chain2dim_local_getclassrep(chainequivalenceclasses, matchtable,matchnum); if (!classrep->isavailable || classrep->score < matchtable->matches[matchnum].score) { classrep->score = matchtable->matches[matchnum].score; classrep->isavailable = true; } } } } static bool gt_chain2dim_retrievemaximalscore(GtChain2Dimscoretype *maxscore, const GtChain2Dimmode *chainmode, const GtChain2Dimmatchtable *matchtable) { unsigned long matchnum; GtChain2Dimscoretype tgap; bool maxscoredefined = false; *maxscore = 0; for (matchnum=0; matchnumnextfree; matchnum++) { if (gt_chain2dim_isrightmaximal_chain(matchtable,matchnum)) { if (chainmode->chainkind == GLOBALCHAININGWITHGAPCOST) { tgap = GT_CHAIN2DIM_TERMINALGAP(matchnum); } else { tgap = 0; } if (!maxscoredefined || *maxscore < matchtable->matches[matchnum].score - tgap) { *maxscore = matchtable->matches[matchnum].score - tgap; maxscoredefined = true; } } } return maxscoredefined; } static int comparescores(const void *key1, const void *key2, GT_UNUSED void *info) { if (*((GtChain2Dimscoretype *) key1) < *(((GtChain2Dimscoretype *) key2))) { return -1; } if (*((GtChain2Dimscoretype *) key1) > *(((GtChain2Dimscoretype *) key2))) { return 1; } return 0; } /* The following function is called for local chaining only. */ static void retrieve_local_chainbestscores(bool *minscoredefined, GtChain2Dimscoretype *minscore, const GtChain2Dimmatchtable *matchtable, unsigned long howmanybest) { unsigned long idx, matchnum = 0; GtChain2Dimscoretype *scores; GtRankedList *dictbestmatches; void *minkey; scores = gt_malloc(sizeof (*scores) * matchtable->nextfree); dictbestmatches = gt_ranked_list_new(howmanybest,comparescores,NULL,NULL); for (idx=0; idxnextfree; idx++) { if (gt_chain2dim_isrightmaximal_chain(matchtable,idx)) { scores[matchnum] = matchtable->matches[idx].score; gt_ranked_list_insert(dictbestmatches, (void *) (scores + matchnum)); matchnum++; } } if (matchnum == 0) { *minscoredefined = false; } else { minkey = gt_ranked_list_last(dictbestmatches); gt_assert(minkey != NULL); *minscore = *((GtChain2Dimscoretype *) minkey); *minscoredefined = true; } gt_ranked_list_delete(dictbestmatches); gt_free(scores); } static void gt_chain2dim_retrievechainthreshold( const GtChain2Dimmode *chainmode, GtChain2Dimmatchtable *matchtable, GtChain2Dim *chain, GtChain2Dimscoretype minscore, GtChain2DimBestofclass *chainequivalenceclasses, GtChain2Dimprocessor chainprocessor, void *cpinfo) { unsigned long matchnum; GtArrayGtChain2DimEdgelevel stack; GT_INITARRAY(&stack,GtChain2DimEdgelevel); for (matchnum=0; matchnum < matchtable->nextfree; matchnum++) { if (gt_chain2dim_isrightmaximal_chain(matchtable,matchnum)) { GtChain2Dimscoretype tgap; if (chainmode->chainkind == GLOBALCHAININGWITHGAPCOST) { tgap = GT_CHAIN2DIM_TERMINALGAP(matchnum); } else { tgap = 0; } if (matchtable->matches[matchnum].score - tgap >= minscore) { if (chainequivalenceclasses != NULL) { GtChain2DimBestofclass *classrep = gt_chain2dim_local_getclassrep(chainequivalenceclasses, matchtable,matchnum); gt_assert(classrep != NULL && !chain2dim_chainkind_global(chainmode->chainkind)); if (classrep->isavailable && classrep->score == matchtable->matches[matchnum].score - tgap) { chain->scoreofchain = classrep->score; classrep->isavailable = false; gt_chain2dim_retrace_previousinchain(chain, matchtable, matchnum); chainprocessor(cpinfo,matchtable,chain); } } else { chain->scoreofchain = matchtable->matches[matchnum].score - tgap; if (chainmode->chainkind != GLOBALCHAININGALLCHAINS) { gt_chain2dim_retrace_previousinchain(chain, matchtable, matchnum); chainprocessor(cpinfo,matchtable,chain); } else { gt_chain2dim_nd_retrace_allprevious(&stack,chain, matchtable, matchnum,chainprocessor, cpinfo); } } } } } GT_FREEARRAY(&stack,GtChain2DimEdgelevel); } static int comparestartandend(const Matchchaininfo *sortedstartpoints, const Matchchaininfo *sortedendpoints, unsigned int presortdim) { if (sortedstartpoints->startpos[presortdim] < sortedendpoints->endpos[presortdim]) { return -1; } if (sortedstartpoints->startpos[presortdim] > sortedendpoints->endpos[presortdim]) { return 1; } return -1; } static GtChain2DimMatchpoint *makeactivationpoint( const GtChain2Dimmatchtable *matchtable, unsigned long fpident, unsigned int postsortdim) { GtChain2DimMatchpoint *fpptr; fpptr = gt_malloc(sizeof (*fpptr)); gt_assert(fpptr != NULL); fpptr->fpident = MAKEENDPOINT(fpident); fpptr->fpposition = GT_CHAIN2DIM_GETSTOREDENDPOINT(postsortdim,fpident); return fpptr; } static void mergestartandendpoints(const GtChain2Dimmode *chainmode, GtChain2Dimmatchtable *matchtable, GtChain2DimMatchstore *matchstore, bool gapsL1, unsigned int presortdim) { unsigned long xidx, startcount, endcount; const unsigned int postsortdim = 1U - presortdim; bool addterminal = (chainmode->chainkind == GLOBALCHAINING) ? false : true; matchstore->dictroot = gt_rbtree_new(gt_chain2dim_cmpendMatchpoint2, gt_free_func, NULL); for (xidx = 0, startcount = 0, endcount = 0; startcount < matchtable->nextfree && endcount < matchtable->nextfree; xidx++) { if (comparestartandend(matchtable->matches + startcount, matchtable->matches + matchstore->endpointperm[endcount], presortdim) < 0) { gt_chain2dim_evalmatchscore(chainmode, matchtable, matchstore, gapsL1, startcount, presortdim); startcount++; } else { gt_chain2dim_activatematchpoint(addterminal,matchtable,matchstore, makeactivationpoint(matchtable, matchstore-> endpointperm[endcount], postsortdim)); endcount++; } } while (startcount < matchtable->nextfree) { gt_chain2dim_evalmatchscore(chainmode, matchtable, matchstore, gapsL1, startcount, presortdim); startcount++; xidx++; } while (endcount < matchtable->nextfree) { gt_chain2dim_activatematchpoint(addterminal,matchtable,matchstore, makeactivationpoint(matchtable, matchstore-> endpointperm[endcount], postsortdim)); endcount++; xidx++; } } static unsigned int gt_chain2dim_findmaximalscores( const GtChain2Dimmode *chainmode, GtChain2Dim *chain, GtChain2Dimmatchtable *matchtable, GtChain2DimMatchstore *matchstore, GtChain2Dimprocessor chainprocessor, bool withequivclasses, void *cpinfo, GtLogger *logger) { unsigned long matchnum; GtChain2Dimscoretype minscore = 0; GtChain2DimMatchpoint *maxpoint; GtChain2DimBestofclass *chainequivalenceclasses; unsigned int retval; bool minscoredefined = false; if (withequivclasses && !chain2dim_chainkind_global(chainmode->chainkind)) { chainequivalenceclasses = gt_malloc(sizeof (*chainequivalenceclasses) * matchtable->nextfree); gt_chain2dim_local_determineequivreps(chainequivalenceclasses, matchtable); } else { chainequivalenceclasses = NULL; } switch (chainmode->chainkind) { case GLOBALCHAINING: maxpoint = gt_rbtree_maximum_key(matchstore->dictroot); gt_assert(maxpoint != NULL); matchnum = FRAGIDENT(maxpoint); minscore = matchtable->matches[matchnum].score; minscoredefined = true; break; case GLOBALCHAININGWITHGAPCOST: case GLOBALCHAININGWITHOVERLAPS: case GLOBALCHAININGALLCHAINS: case LOCALCHAININGMAX: minscoredefined = gt_chain2dim_retrievemaximalscore(&minscore,chainmode,matchtable); break; case LOCALCHAININGTHRESHOLD: minscore = chainmode->minimumscore; minscoredefined = true; break; case LOCALCHAININGBEST: retrieve_local_chainbestscores(&minscoredefined, &minscore, matchtable, chainmode->howmanybest); break; case LOCALCHAININGPERCENTAWAY: minscoredefined = gt_chain2dim_retrievemaximalscore(&minscore,chainmode,matchtable); if (minscoredefined) { minscore = (GtChain2Dimscoretype) ((double) minscore * (1.0 - (double) chainmode->percentawayfrombest/100.0)); } break; default: fprintf(stderr,"chainkind = %d not valid\n", (int) chainmode->chainkind); exit(GT_EXIT_PROGRAMMING_ERROR); } if (minscoredefined) { gt_logger_log(logger, "compute %soptimal %s chains with score >= %ld", chainmode->chainkind == GLOBALCHAININGALLCHAINS ? "all " : "", chain2dim_chainkind_global(chainmode->chainkind) ? "global" : "local", minscore); gt_chain2dim_retrievechainthreshold(chainmode, matchtable, chain, minscore, chainequivalenceclasses, chainprocessor, cpinfo); retval = 0; } else { retval = 1U; } if (chainequivalenceclasses != NULL) { gt_free(chainequivalenceclasses); } return retval; } static void makesortedendpointpermutation(unsigned long *perm, GtChain2Dimmatchtable *matchtable, unsigned int presortdim) { unsigned long temp, *iptr, *jptr, i, moves = 0; for (i = 0; i < matchtable->nextfree; i++) { perm[i] = i; } for (iptr = perm + 1UL; iptr < perm + matchtable->nextfree; iptr++) { for (jptr = iptr; jptr > perm; jptr--) { if (GT_CHAIN2DIM_GETSTOREDENDPOINT(presortdim,*(jptr-1)) <= GT_CHAIN2DIM_GETSTOREDENDPOINT(presortdim,*jptr)) { break; } temp = *(jptr-1); *(jptr-1) = *jptr; *jptr = temp; moves++; } } } static void fastchainingscores(const GtChain2Dimmode *chainmode, GtChain2Dimmatchtable *matchtable, GtChain2DimMatchstore *matchstore, unsigned int presortdim, bool gapsL1) { matchstore->endpointperm = gt_malloc(sizeof (*matchstore->endpointperm) * matchtable->nextfree); makesortedendpointpermutation(matchstore->endpointperm, matchtable, presortdim); mergestartandendpoints(chainmode, matchtable, matchstore, gapsL1, presortdim); gt_free(matchstore->endpointperm); } static GtChain2Dimgapcostfunction assignchaingapcostfunction( GtChain2Dimkind chainkind, bool gapsL1) { if (chainkind == GLOBALCHAININGWITHOVERLAPS) { return gt_chain2dim_overlapcost; } if (chainkind != GLOBALCHAININGALLCHAINS && chainkind != GLOBALCHAINING) { if (gapsL1) { return gapcostL1; } return gapcostCc; } return NULL; } /*EE The following function implements the different kinds of chaining algorithms for global and local chaining. The mode is specified by \texttt{chainmode}. There are \texttt{numofmatches} many matches, each specified in an array \texttt{matchtable} points to. \texttt{chain} is the array in which a chain is stored. However, do not further process a chain. Just use INITARRAY(&chain.chainedmatches,Uint) to initialize it before calling \textttt{fastchaining} and FREEARRAY(&chain.chainedmatches,Uint) to free the space after calling \textttt{fastchaining}. The function \texttt{chainprocessor} processes each chain found, and \texttt{cpinfo} is used as the first argument in each call to \texttt{chainprocessor}. The function returns 0 upon success and otherwise, if an error occurs. Finally \texttt{gt_logger_log} is applied to each status message generated during the execution of \texttt{fastchaining}. If \texttt{gt_logger_log} is \texttt{NULL}, then nothing is generated and shown. */ void gt_chain_fastchaining(const GtChain2Dimmode *chainmode, GtChain2Dim *chain, GtChain2Dimmatchtable *matchtable, bool gapsL1, unsigned int presortdim, bool withequivclasses, GtChain2Dimprocessor chainprocessor, void *cpinfo, GtLogger *logger) { GT_UNUSED unsigned int retval; GtChain2Dimgapcostfunction chaingapcostfunction; gt_assert(presortdim <= 1U); chaingapcostfunction = assignchaingapcostfunction(chainmode->chainkind,gapsL1); if (matchtable->nextfree > 1UL) { GtChain2DimMatchstore matchstore; gt_logger_log(logger,"compute chain scores"); if (chainmode->chainkind == GLOBALCHAININGWITHOVERLAPS) { gt_chain2dim_bruteforcechainingscores(chainmode,matchtable, chaingapcostfunction); } else { if (chainmode->chainkind == GLOBALCHAININGALLCHAINS) { gt_chain2dim_ndbfchainscores(matchtable); } else { fastchainingscores(chainmode, matchtable, &matchstore, presortdim, gapsL1); } } gt_logger_log(logger,"retrieve optimal chains"); retval = gt_chain2dim_findmaximalscores(chainmode, chain, matchtable, &matchstore, chainprocessor, withequivclasses, cpinfo, logger); if (chainmode->chainkind != GLOBALCHAININGWITHOVERLAPS && chainmode->chainkind != GLOBALCHAININGALLCHAINS) { gt_rbtree_delete(matchstore.dictroot); } } else { gt_chain2dim_chainingboundarycases(chainmode, chain, matchtable); chainprocessor(cpinfo,matchtable,chain); retval = 0; } /* retval is not reported. */ } static int cmpMatchchaininfo0(const void *keya,const void *keyb) { if (((const Matchchaininfo *) keya)->startpos[0] < ((const Matchchaininfo *) keyb)->startpos[0]) { return -1; } if (((const Matchchaininfo *) keya)->startpos[0] > ((const Matchchaininfo *) keyb)->startpos[0]) { return 1; } return 0; } static int cmpMatchchaininfo1(const void *keya,const void *keyb) { if (((const Matchchaininfo *) keya)->startpos[1] < ((const Matchchaininfo *) keyb)->startpos[1]) { return -1; } if (((const Matchchaininfo *) keya)->startpos[1] > ((const Matchchaininfo *) keyb)->startpos[1]) { return 1; } return 0; } typedef int (*Qsortcomparefunction)(const void *,const void *); void gt_chain_possiblysortmatches(GtLogger *logger, GtChain2Dimmatchtable *matchtable, unsigned int presortdim) { if (matchtable->nextfree > 1UL) { Qsortcomparefunction qsortcomparefunction; Matchchaininfo *fptr; bool matchesaresorted = true; gt_assert(presortdim <= 1U); qsortcomparefunction = (presortdim == 0) ? cmpMatchchaininfo0 : cmpMatchchaininfo1; for (fptr = matchtable->matches; fptr < matchtable->matches + matchtable->nextfree - 1; fptr++) { if (qsortcomparefunction((const void *) fptr, (const void *) (fptr+1)) == 1) { matchesaresorted = false; break; } } if (!matchesaresorted) { gt_logger_log(logger,"input matches are not yet sorted => sort them"); qsort(matchtable->matches,(size_t) matchtable->nextfree, sizeof (*matchtable->matches),qsortcomparefunction); } else { gt_logger_log(logger,"matches are already sorted w.r.t. dimension %u", presortdim); } } } static int parselocalchainingparameter(GtChain2Dimmode *chainmode, const char *option, const char *lparam, GtError *err) { Qualifiedinteger *qualint; qualint = gt_parsequalifiedinteger(option,lparam,err); if (qualint == NULL) { return -1; } switch (qualint->qualtag) { case Qualbestof: chainmode->chainkind = LOCALCHAININGBEST; chainmode->howmanybest = qualint->integervalue; break; case Qualpercentaway: chainmode->chainkind = LOCALCHAININGPERCENTAWAY; chainmode->percentawayfrombest = qualint->integervalue; break; case Qualabsolute: chainmode->chainkind = LOCALCHAININGTHRESHOLD; chainmode->minimumscore = (GtChain2Dimscoretype) qualint->integervalue; break; } gt_free(qualint); return 0; } static int parseglobalchainingparameter(GtChain2Dimmode *chainmode, const char *option, const char *gparam, GtError *err) { if (strcmp(gparam,GT_CHAIN2DIM_GAPCOSTSWITCH) == 0) { chainmode->chainkind = GLOBALCHAININGWITHGAPCOST; return 0; } if (strcmp(gparam,GT_CHAIN2DIM_OVERLAPSWITCH) == 0) { chainmode->chainkind = GLOBALCHAININGWITHOVERLAPS; return 0; } if (strcmp(gparam,GT_CHAIN2DIM_ALLSWITCH) == 0) { chainmode->chainkind = GLOBALCHAININGALLCHAINS; return 0; } if (err != NULL) { gt_error_set(err,"argument of option -%s must be %s or %s: ", option, GT_CHAIN2DIM_GAPCOSTSWITCH, GT_CHAIN2DIM_OVERLAPSWITCH); } else { fprintf(stderr,"argument of option -%s must be %s or %s: ", option, GT_CHAIN2DIM_GAPCOSTSWITCH, GT_CHAIN2DIM_OVERLAPSWITCH); } return -1; } GtChain2Dimmode *gt_chain_chainmode_new(unsigned long maxgap, bool globalset, const char *globalargs, bool localset, const char *localargs, GtError *err) { GtChain2Dimmode *chainmode; bool haserr = false; gt_assert(!(globalset && localset)); chainmode = gt_malloc(sizeof (*chainmode)); chainmode->chainkind = GLOBALCHAINING; chainmode->maxgapwidth = (GtChain2Dimpostype) maxgap; if (localset) { if (localargs == NULL) { chainmode->chainkind = LOCALCHAININGMAX; } else { if (parselocalchainingparameter(chainmode, "local", localargs, err) != 0) { haserr = true; } } } if (globalset) { if (globalargs == NULL) { chainmode->chainkind = GLOBALCHAINING; } else { if (parseglobalchainingparameter(chainmode, "global", globalargs, err) != 0) { haserr = true; } } } if (haserr) { gt_free(chainmode); return NULL; } return chainmode; } void gt_chain_chainmode_delete(GtChain2Dimmode *chainmode) { if (chainmode != NULL) { gt_free(chainmode); } } GtChain2Dim *gt_chain_chain_new(void) { GtChain2Dim *chain; chain = gt_malloc(sizeof (*chain)); GT_INITARRAY(&chain->chainedmatches,GtChain2Dimref); return chain; } void gt_chain_chain_delete(GtChain2Dim *chain) { if (chain != NULL) { GT_FREEARRAY(&chain->chainedmatches,GtChain2Dimref); gt_free(chain); } } GtChain2Dimscoretype gt_chain_chainscore(const GtChain2Dim *chain) { return chain->scoreofchain; } unsigned long gt_chain_chainlength(const GtChain2Dim *chain) { return chain->chainedmatches.nextfreeGtChain2Dimref; } bool gt_chain_storedinreverseorder(const GtChain2Dim *chain) { return chain->storedinreverseorder; } void gt_chain_extractchainelem(GtChain2Dimmatchvalues *value, const GtChain2Dimmatchtable *matchtable, const GtChain2Dim *chain,unsigned long idx) { const Matchchaininfo *fiptr; gt_assert(idx < gt_chain_chainlength(chain) && chain->chainedmatches.spaceGtChain2Dimref[idx] < matchtable->nextfree); fiptr = matchtable->matches + chain->chainedmatches.spaceGtChain2Dimref[idx]; value->startpos[0] = fiptr->startpos[0]; value->startpos[1] = fiptr->startpos[1]; value->endpos[0] = fiptr->endpos[0]; value->endpos[1] = fiptr->endpos[1]; value->weight = fiptr->weight; } void gt_chain_printchainelem(FILE *outfp,const GtChain2Dimmatchvalues *value) { fprintf(outfp, "%lu %lu %lu %lu" " %ld\n",value->startpos[0], value->endpos[0], value->startpos[1], value->endpos[1], value->weight); } genometools-1.5.1/src/match/chain2dim.h000066400000000000000000000135001211610345200177350ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef CHAIN2DIM_H #define CHAIN2DIM_H #include "core/error_api.h" #include "core/logger.h" /* The following string is used to trigger the usage of gap costs for global chaining. */ #define GT_CHAIN2DIM_GAPCOSTSWITCH "gc" /* The following string is used to trigger the use of a chaining algorithm allowing for overlaps between the hits. */ #define GT_CHAIN2DIM_OVERLAPSWITCH "ov" #define GT_CHAIN2DIM_ALLSWITCH "all" /* the followin type is used for the position values in the matches to be chained */ typedef unsigned long GtChain2Dimpostype; /* the following type is used for scores of chains */ typedef long GtChain2Dimscoretype; /* the anonymous type for a chain */ typedef struct GtChain2Dim GtChain2Dim; /* the anonymous type for a table storing the matches */ typedef struct GtChain2Dimmatchtable GtChain2Dimmatchtable; /* the following type is used for relevant values to output for a chained frgament */ typedef struct { GtChain2Dimpostype startpos[2], /* start of matches in the 2 dimensions, userdef */ endpos[2]; /* end of matches in the 2 dimensions, userdef */ GtChain2Dimscoretype weight; /* weight of match, user defined */ } GtChain2Dimmatchvalues; /* the type of function to report chains. */ typedef void (*GtChain2Dimprocessor)(void *, const GtChain2Dimmatchtable *, const GtChain2Dim *); /* the type of value describing how to chain */ typedef struct GtChain2Dimmode GtChain2Dimmode; /* the constructor for tables of matches */ GtChain2Dimmatchtable *gt_chain_matchtable_new(unsigned long numberofmatches); /* the destructor for tables of matches */ void gt_chain_matchtable_delete(GtChain2Dimmatchtable *matchtable); /* the function for emptying a table of matches, without freeing the space */ void gt_chain_matchtable_empty(GtChain2Dimmatchtable *matchtable); /* the following function adds the relevant values describing a match */ void gt_chain_matchtable_add(GtChain2Dimmatchtable *matchtable, const GtChain2Dimmatchvalues *inmatch); /* the following functions reads a file describing matches in open format. It returns the corresponding table of matches. */ GtChain2Dimmatchtable *gt_chain_analyzeopenformatfile(double weightfactor, const char *matchfile, GtError *err); /* the function to fill the gap values for all matches */ void gt_chain_fillthegapvalues(GtChain2Dimmatchtable *matchtable); /* function to apply an additional weight to the elements to be chained */ void gt_chain_applyweight(double weightfactor, GtChain2Dimmatchtable *matchtable); /* the function to sort an array of matches */ void gt_chain_possiblysortmatches(GtLogger *logger, GtChain2Dimmatchtable *matchtable, unsigned int presortdim); /* the constructor for chainmode objects. Use err = NULL to print error messages to stderr. */ GtChain2Dimmode *gt_chain_chainmode_new(unsigned long maxgap, bool globalset, const char *globalargs, bool localset, const char *localargs, GtError *err); /* the destructor for chainmode objects */ void gt_chain_chainmode_delete(GtChain2Dimmode *chainmode); /* the constructor for chains */ GtChain2Dim *gt_chain_chain_new(void); /* the descructor for chains */ void gt_chain_chain_delete(GtChain2Dim *chain); /* the function to perform the fast chaining algorithms */ void gt_chain_fastchaining(const GtChain2Dimmode *chainmode, GtChain2Dim *chain, GtChain2Dimmatchtable *matchtable, bool gapsL1, unsigned int presortdim, bool withequivclasses, GtChain2Dimprocessor chainprocessor, void *cpinfo, GtLogger *logger); /* obtain the score of a chain */ GtChain2Dimscoretype gt_chain_chainscore(const GtChain2Dim *chain); /* obtain the length of a chain */ unsigned long gt_chain_chainlength(const GtChain2Dim *chain); /* return true iff chain is stored in reverse order */ bool gt_chain_storedinreverseorder(const GtChain2Dim *chain); /* store the values of element idx in given chain in the first parameter */ void gt_chain_extractchainelem(GtChain2Dimmatchvalues *value, const GtChain2Dimmatchtable *matchtable, const GtChain2Dim *chain, unsigned long idx); /* print a chain element to the given file pointer */ void gt_chain_printchainelem(FILE *outfp,const GtChain2Dimmatchvalues *value); #endif genometools-1.5.1/src/match/chainofin.c000066400000000000000000000071301211610345200200320ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #endif #include "core/fa.h" #include "core/error_api.h" #include "chain2dim.h" #define READNUMS 5 #define CANNOTPARSELINE(S)\ gt_error_set(err,"matchfile \"%s\", line %lu, column %lu: %s",\ matchfile,linenum+1,countcolumns+1,S) static int numberoflinesinfile(unsigned long *linenum, const char *filename, GtError *err) { FILE *fp; int cc; fp = gt_fa_fopen(filename,"r",err); *linenum = 0; if (fp == NULL) { return -1; } while ((cc = getc(fp)) != EOF) { if (cc == '\n') { (*linenum)++; } } gt_fa_fclose(fp); return 0; } GtChain2Dimmatchtable *gt_chain_analyzeopenformatfile(double weightfactor, const char *matchfile, GtError *err) { GtChain2Dimmatchtable *matchtable; unsigned long linenum; long storeinteger[READNUMS]; FILE *matchfp; bool haserr = false; GtChain2Dimmatchvalues fragment; if (numberoflinesinfile(&linenum,matchfile,err) != 0) { return NULL; } matchfp = gt_fa_fopen(matchfile,"r",err); if (matchfp == NULL) { return NULL; } matchtable = gt_chain_matchtable_new(linenum); for (linenum = 0; fscanf(matchfp,"%ld %ld %ld %ld %ld\n", &storeinteger[0], &storeinteger[1], &storeinteger[2], &storeinteger[3], &storeinteger[4]) == READNUMS; linenum++) { unsigned long countcolumns; for (countcolumns = 0; countcolumns < (unsigned long) (READNUMS-1); countcolumns++) { if (storeinteger[countcolumns] < 0) { CANNOTPARSELINE("non-negative integer expected"); haserr = true; } } if (storeinteger[0] > storeinteger[1]) { CANNOTPARSELINE("startpos1 <= endpos1 expected"); haserr = true; break; } if (storeinteger[2] > storeinteger[3]) { CANNOTPARSELINE("startpos2 <= endpos2 expected"); haserr = true; break; } fragment.startpos[0] = (GtChain2Dimpostype) storeinteger[0]; fragment.endpos[0] = (GtChain2Dimpostype) storeinteger[1]; fragment.startpos[1] = (GtChain2Dimpostype) storeinteger[2]; fragment.endpos[1] = (GtChain2Dimpostype) storeinteger[3]; fragment.weight = (GtChain2Dimscoretype) (weightfactor * (double) storeinteger[4]); gt_chain_matchtable_add(matchtable,&fragment); /*gt_chain_printchainelem(stdout,&fragment); */ } gt_fa_fclose(matchfp); if (haserr) { gt_chain_matchtable_delete(matchtable); return NULL; } gt_chain_fillthegapvalues(matchtable); return matchtable; } genometools-1.5.1/src/match/cutendpfx.c000066400000000000000000000074671211610345200201110ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/chardef.h" #include "core/codetype.h" #include "core/types_api.h" #include "core/unused_api.h" #include "core/ma_api.h" #include "bcktab.h" #include "cutendpfx.h" struct Bucketenumerator { const GtBcktab *bcktab; /* only need multimappower and filltable */ unsigned int prefixlength, demandprefixlength; GtBucketspecification bucketspec; GtCodetype currentcode, lastcode; }; static inline unsigned int prefixqgram2code(GtCodetype *code, const GtCodetype **multimappower, unsigned int qvalue, unsigned int qvalueprefix, const GtUchar *qgram) { int i; GtCodetype tmpcode = 0; GtUchar a; gt_assert(qvalueprefix > 0); gt_assert(qvalue > qvalueprefix); for (i = (int) (qvalueprefix-1); i>=0; i--) { a = qgram[i]; if (ISSPECIAL(a)) { return (unsigned int) i; } tmpcode += multimappower[i][a]; } *code = tmpcode; return qvalue; } Bucketenumerator *gt_newbucketenumerator(const GtBcktab *bcktab, unsigned int prefixlength, const GtUchar *demandprefix, unsigned int demandprefixlength) { Bucketenumerator *bucketenumerator; GT_UNUSED unsigned int firstspecial; bucketenumerator = gt_malloc(sizeof *bucketenumerator); bucketenumerator->bcktab = bcktab; bucketenumerator->prefixlength = prefixlength; bucketenumerator->demandprefixlength = demandprefixlength; firstspecial = prefixqgram2code(&bucketenumerator->currentcode, gt_bcktab_multimappower(bcktab), prefixlength, demandprefixlength, demandprefix); gt_assert(firstspecial == prefixlength); bucketenumerator->lastcode = bucketenumerator->currentcode + gt_bcktab_filltable(bcktab,demandprefixlength); return bucketenumerator; } bool gt_nextbucketenumerator(Lcpinterval *itv, Bucketenumerator *bucketenumerator) { while (true) { if (bucketenumerator->currentcode > bucketenumerator->lastcode) { break; } gt_bcktab_calcboundaries(&bucketenumerator->bucketspec, bucketenumerator->bcktab, bucketenumerator->currentcode); bucketenumerator->currentcode++; if (bucketenumerator->bucketspec.nonspecialsinbucket > 0) { itv->left = bucketenumerator->bucketspec.left; itv->right = itv->left + bucketenumerator->bucketspec.nonspecialsinbucket - 1; itv->offset = (unsigned long) bucketenumerator->demandprefixlength; return true; } } return false; } void gt_freebucketenumerator(Bucketenumerator *bucketenumerator) { gt_free(bucketenumerator); } genometools-1.5.1/src/match/cutendpfx.h000066400000000000000000000030111211610345200200730ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef CUTENDPFX_H #define CUTENDPFX_H #include #include #include #include "core/types_api.h" #include "lcpinterval.h" #include "bcktab.h" typedef struct Bucketenumerator Bucketenumerator; Bucketenumerator *gt_newbucketenumerator(const GtBcktab *bcktab, unsigned int prefixlength, const GtUchar *demandprefix, unsigned int demandprefixlength); bool gt_nextbucketenumerator(Lcpinterval *itv, Bucketenumerator *bucketenumerator); void gt_freebucketenumerator(Bucketenumerator *bucketenumerator); #endif genometools-1.5.1/src/match/dataalign.h000066400000000000000000000026151211610345200200300ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef DATAALIGN_H #define DATAALIGN_H #include #include "core/minmax.h" /* * functionality to layout data at correct alignment (=> fewer * individual mallocs) */ enum { MAX_ALIGN_REQUIREMENT = 8, MIN_ALIGN_REQUREMENT = 4, }; static inline unsigned long long roundUp(unsigned long long v, unsigned long multipleOf) { return v - v%multipleOf + multipleOf * (v%multipleOf?1:0); } static inline size_t offsetAlign(size_t offset, size_t sizeOfVal2Align) { size_t alignBase = MAX(MIN_ALIGN_REQUREMENT, MIN(sizeOfVal2Align, MAX_ALIGN_REQUIREMENT)); return roundUp(offset, alignBase); } #endif genometools-1.5.1/src/match/dist-short.c000066400000000000000000000131621211610345200201760ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/assert_api.h" #include "core/types_api.h" #include "core/chardef.h" #include "core/encseq.h" #include "core/defined-types.h" #include "initeqsvec.h" #include "dist-short.h" #define DECLARELOCALVARS\ unsigned long Pv = ~0UL,\ Mv = 0,\ Eq,\ Xv,\ Xh,\ Ph,\ Mh,\ Ebit = (1UL << (ulen-1)),\ distval = ulen #define COMPUTENEWDIST(CC)\ gt_assert((CC) != (GtUchar) SEPARATOR);\ if ((CC) != (GtUchar) WILDCARD)\ {\ Eq = eqsvector[(unsigned long) (CC)];\ } else\ {\ Eq = 0;\ }\ Xv = Eq | Mv;\ Xh = (((Eq & Pv) + Pv) ^ Pv) | Eq;\ Ph = Mv | ~ (Xh | Pv);\ Mh = Pv & Xh;\ if (Ph & Ebit)\ {\ distval++;\ } else\ {\ if (Mh & Ebit)\ {\ distval--;\ }\ }\ /*\ the original version of Myers included the statement\ Ph <<= 1. As an effect, the first element of each column\ was 0. We add a 1 to the shifted Ph vector. As a consequence,\ we obtain an increment by 1 in the first column.\ */\ Ph = (Ph << 1) | 1UL;\ Pv = (Mh << 1) | ~ (Xv | Ph);\ Mv = Ph & Xv unsigned long gt_distanceofshortstringsbytearray(unsigned long *eqsvector, unsigned int alphasize, const GtUchar *useq, unsigned long ulen, const GtUchar *vseq, unsigned long vlen) { DECLARELOCALVARS; const GtUchar *vptr; gt_initeqsvector(eqsvector,(unsigned long) alphasize,useq,ulen); for (vptr = vseq; vptr < vseq + vlen; vptr++) { COMPUTENEWDIST(*vptr); } return distval; } unsigned long gt_distanceofshortstringsencseq(unsigned long *eqsvector, unsigned int alphasize, const GtUchar *useq, unsigned long ulen, const GtEncseq *encseq, unsigned long vstartpos, unsigned long vlen) { DECLARELOCALVARS; GtUchar cc; unsigned long pos; gt_initeqsvector(eqsvector,(unsigned long) alphasize,useq,ulen); for (pos = vstartpos; pos < vstartpos + vlen; pos++) { cc = gt_encseq_get_encoded_char(encseq,pos,GT_READMODE_FORWARD); COMPUTENEWDIST(cc); } return distval; } unsigned long gt_reversesuffixmatch(unsigned long *eqsvector, unsigned int alphasize, const GtUchar *useq, unsigned long ulen, const GtUchar *vseq, unsigned long vlen, unsigned long maxdistance) { DECLARELOCALVARS; const GtUchar *vptr; gt_initeqsvectorrev(eqsvector,(unsigned long) alphasize,useq,ulen); gt_assert(maxdistance > 0); for (vptr = vseq + vlen - 1; vptr >= vseq; vptr--) { COMPUTENEWDIST(*vptr); if (distval <= maxdistance) { break; } } /* gt_assert(distval <= maxdistance); */ return (unsigned long) (vseq + vlen - vptr); } Definedunsignedlong gt_forwardprefixmatch(const GtEncseq *encseq, unsigned int alphasize, unsigned long startpos, bool nowildcards, unsigned long *eqsvector, const GtUchar *useq, unsigned long ulen, unsigned long maxdistance) { DECLARELOCALVARS; unsigned long pos, totallength = gt_encseq_total_length(encseq); GtUchar cc; Definedunsignedlong result; gt_initeqsvector(eqsvector,(unsigned long) alphasize,useq,ulen); gt_assert(maxdistance > 0); for (pos = startpos; /* Nothing */; pos++) { gt_assert(pos - startpos <= (unsigned long) (ulen + maxdistance)); cc = gt_encseq_get_encoded_char(encseq,pos,GT_READMODE_FORWARD); if (nowildcards && cc == (GtUchar) WILDCARD) { result.defined = false; result.valueunsignedlong = 0; return result; } COMPUTENEWDIST(cc); if (distval <= maxdistance || pos == totallength-1) { break; } } result.defined = true; result.valueunsignedlong = (unsigned long) (pos - startpos + 1); return result; } genometools-1.5.1/src/match/dist-short.h000066400000000000000000000052421211610345200202030ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef DIST_SHORT_H #define DIST_SHORT_H #include "core/defined-types.h" #include "core/encseq_api.h" #include "core/types_api.h" unsigned long gt_distanceofshortstringsbytearray(unsigned long *eqsvector, unsigned int alphasize, const GtUchar *useq, unsigned long ulen, const GtUchar *vseq, unsigned long vlen); unsigned long gt_distanceofshortstringsencseq(unsigned long *eqsvector, unsigned int alphasize, const GtUchar *useq, unsigned long ulen, const GtEncseq *encseq, unsigned long vstartpos, unsigned long vlen); unsigned long gt_reversesuffixmatch(unsigned long *eqsvector, unsigned int alphasize, const GtUchar *useq, unsigned long ulen, const GtUchar *vseq, unsigned long vlen, unsigned long maxdistance); Definedunsignedlong gt_forwardprefixmatch(const GtEncseq *encseq, unsigned int alphasize, unsigned long startpos, bool nowildcards, unsigned long *eqsvector, const GtUchar *useq, unsigned long ulen, unsigned long maxdistance); #endif genometools-1.5.1/src/match/echoseq.c000066400000000000000000000117601211610345200175270ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/alphabet.h" #include "core/assert_api.h" #include "core/chardef.h" #include "core/error.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "core/encseq.h" void gt_symbolstring2fasta(FILE *fpout, const char *desc, const GtAlphabet *alpha, const GtUchar *w, unsigned long wlen, unsigned long width) { unsigned long i, j; GtUchar currentchar; gt_assert(width > 0); if (desc == NULL) { fprintf(fpout,">\n"); } else { fprintf(fpout,">%s\n",desc); } for (i = 0, j = 0; ; i++) { currentchar = w[i]; if (currentchar == (GtUchar) SEPARATOR) { fprintf(fpout,"\n>\n"); j = 0; } else { gt_alphabet_echo_pretty_symbol(alpha,fpout,currentchar); } if (i == wlen - 1) { fprintf(fpout,"\n"); break; } if (currentchar != (GtUchar) SEPARATOR) { j++; if (j >= width) { fprintf(fpout,"\n"); j = 0; } } } } void gt_encseq2symbolstring(FILE *fpout, const GtEncseq *encseq, GtReadmode readmode, unsigned long start, unsigned long wlen, unsigned long width) { unsigned long j, idx, lastpos; GtUchar currentchar; GtEncseqReader *esr; const GtAlphabet *alpha; esr = gt_encseq_create_reader_with_readmode(encseq, readmode, start); gt_assert(width > 0); lastpos = start + wlen - 1; alpha = gt_encseq_alphabet(encseq); for (idx = start, j = 0; /* Nothing */ ; idx++) { currentchar = gt_encseq_reader_next_encoded_char(esr); if (currentchar == (GtUchar) SEPARATOR) { fprintf(fpout,"\n>\n"); j = 0; } else { gt_alphabet_echo_pretty_symbol(alpha,fpout,currentchar); } if (idx == lastpos) { fprintf(fpout,"\n"); break; } if (currentchar != (GtUchar) SEPARATOR) { j++; if (j >= width) { fprintf(fpout,"\n"); j = 0; } } } gt_encseq_reader_delete(esr); } void gt_fprintfencseq(FILE *fpout, const GtEncseq *encseq, unsigned long start, unsigned long wlen) { unsigned long idx; GtUchar currentchar; const GtAlphabet *alpha; alpha = gt_encseq_alphabet(encseq); for (idx = start; idx < start + wlen; idx++) { currentchar = gt_encseq_get_encoded_char(encseq, idx, GT_READMODE_FORWARD); gt_assert(ISNOTSPECIAL(currentchar)); gt_alphabet_echo_pretty_symbol(alpha,fpout,currentchar); } } void gt_encseq2fastaoutput(FILE *fpout, const char *desc, const GtEncseq *encseq, GtReadmode readmode, unsigned long start, unsigned long wlen, unsigned long width) { gt_assert(width > 0); if (desc == NULL) { fprintf(fpout,">\n"); } else { fprintf(fpout,">%s\n",desc); } gt_encseq2symbolstring(fpout, encseq, readmode, start, wlen, width); } int gt_echodescriptionandsequence(const GtStrArray *filenametab,GtError *err) { GtSeqIterator *seqit; char *desc = NULL; const GtUchar *sequence; unsigned long seqlen; bool haserr = false; int retval; seqit = gt_seq_iterator_sequence_buffer_new(filenametab, err); if (!seqit) return -1; while (true) { retval = gt_seq_iterator_next(seqit, &sequence, &seqlen, &desc, err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } gt_symbolstring2fasta(stdout,desc,NULL,sequence,seqlen,70UL); } gt_seq_iterator_delete(seqit); return haserr ? -1 : 0; } genometools-1.5.1/src/match/echoseq.h000066400000000000000000000041751211610345200175360ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ECHOSEQ_H #define ECHOSEQ_H #include #include "core/alphabet.h" #include "core/error_api.h" #include "core/types_api.h" #include "core/str_array_api.h" #include "core/readmode.h" #include "core/encseq.h" void gt_symbolstring2fasta(FILE *fpout, const char *desc, const GtAlphabet *alpha, const GtUchar *w, unsigned long wlen, unsigned long width); void gt_encseq2symbolstring(FILE *fpout, const GtEncseq *encseq, GtReadmode readmode, unsigned long start, unsigned long wlen, unsigned long width); void gt_fprintfencseq(FILE *fpout, const GtEncseq *encseq, unsigned long start, unsigned long wlen); void gt_encseq2fastaoutput(FILE *fpout, const char *desc, const GtEncseq *encseq, GtReadmode readmode, unsigned long start, unsigned long wlen, unsigned long width); int gt_echodescriptionandsequence(const GtStrArray *filenametab,GtError *err); #endif genometools-1.5.1/src/match/eis-bitpackseqpos.h000066400000000000000000000054741211610345200215400ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BITPACKSEQPOS_H #define EIS_BITPACKSEQPOS_H /** * @file eis-bitpackseqpos.h * @brief Defines appropriate width routines for storing and retrieving * unsigned long values in/from BitString. */ #include "core/bitpackstring.h" #ifndef _LP64 /** retrieve unsigned long from BitString */ #define gt_bsGetUlong gt_bsGetUInt32 /** store unsigned long in BitString */ #define gt_bsStoreUlong gt_bsStoreUInt32 /** read back array of unsigned long values in BitString */ #define gt_bsGetUniformUlongArray gt_bsGetUniformUInt32Array /** read back array of unsigned long values in BitString */ #define gt_bsGetUniformUlongArrayAdd gt_bsGetUniformUInt32ArrayAdd /** read back array of unsigned long values in BitString */ #define gt_bsGetNonUniformUlongArray gt_bsGetNonUniformUInt32Array /** read back array of unsigned long values in BitString */ #define gt_bsGetNonUniformUlongArrayAdd gt_bsGetNonUniformUInt32ArrayAdd /** store array of unsigned long values in BitString */ #define gt_bsStoreUniformUlongArray gt_bsStoreUniformUInt32Array /** how many bits are required to store given unsigned long value */ #define requiredUlongBits gt_requiredUInt32Bits #else /** retrieve unsigned long from BitString */ #define gt_bsGetUlong gt_bsGetUInt64 /** store unsigned long in BitString */ #define gt_bsStoreUlong gt_bsStoreUInt64 /** read back array of unsigned long values in BitString */ #define gt_bsGetUniformUlongArray gt_bsGetUniformUInt64Array /** read back array of unsigned long values in BitString */ #define gt_bsGetUniformUlongArrayAdd gt_bsGetUniformUInt64ArrayAdd /** read back array of unsigned long values in BitString */ #define gt_bsGetNonUniformUlongArray gt_bsGetNonUniformUInt64Array /** read back array of unsigned long values in BitString */ #define gt_bsGetNonUniformUlongArrayAdd gt_bsGetNonUniformUInt64ArrayAdd /** store array of unsigned long values in BitString */ #define gt_bsStoreUniformUlongArray gt_bsStoreUniformUInt64Array /** how many bits are required to store given unsigned long value */ #define requiredUlongBits gt_requiredUInt64Bits #endif #endif genometools-1.5.1/src/match/eis-blockcomp-construct.h000066400000000000000000000042601211610345200226530ustar00rootroot00000000000000/* Copyright (C) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BLOCKCOMP_CONSTRUCT_H #define EIS_BLOCKCOMP_CONSTRUCT_H #include "match/eis-encidxseq.h" /** * @param alphabet ownership of alphabet is transferred to the sequence * index produced unless NULL is returned */ EISeq * gt_newGenBlockEncIdxSeq(unsigned long totalLen, const char *projectName, MRAEnc *alphabet, const struct seqStats *stats, SeqDataReader BWTGenerator, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err); /** * @brief Load previously written block encoded sequence * representation. * @param alphabet * @param totalLen * Caution: ownership of alphabet changes to returned index. * @param projectName base name of corresponding suffixerator project * @param features select optional in-memory data structures for speed-up * @param err genometools error object reference * @return new encoded indexed sequence object reference */ EISeq * gt_loadBlockEncIdxSeqGen(MRAEnc *alphabet, const char *projectName, int features, GtError *err); #endif genometools-1.5.1/src/match/eis-blockcomp-param.c000066400000000000000000000026451211610345200217270ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/option_api.h" #include "match/eis-blockcomp-param.h" #include "match/eis-encidxseq.h" void gt_registerBlockEncOptions(GtOptionParser *op, struct blockEncParams *paramOutput) { GtOption *option; option = gt_option_new_uint_min("bsize", "specify size of blocks", ¶mOutput->blockSize, 8U, 1U); gt_option_parser_add_option(op, option); option = gt_option_new_uint_min("blbuck", "specify number of blocks per " "bucket", ¶mOutput->bucketBlocks, 8U, 1U); gt_option_parser_add_option(op, option); } genometools-1.5.1/src/match/eis-blockcomp-param.h000066400000000000000000000025541211610345200217330ustar00rootroot00000000000000/* Copyright (c) 2007,2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BLOCKCOMP_PARAM_H #define EIS_BLOCKCOMP_PARAM_H /** * @file eis-blockcomp-param.h * @brief Call gt_registerBlockEncOptions to add options for construction * of a block-compressed index to the option parser. */ #include "core/option_api.h" #include "match/eis-encidxseq.h" /** * @brief Add options for construction of a block-compressed index to * the option parser. * @param op * @param paramOutput user provided values will be stored here * @param err */ void gt_registerBlockEncOptions(GtOptionParser *op, struct blockEncParams *paramOutput); #endif genometools-1.5.1/src/match/eis-blockcomp.c000066400000000000000000003121351211610345200206270ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /** * \file eis-blockcomp.c * \brief Methods to build block-compressed representation of indexed * sequence and answer queries on said representation. * \author Thomas Jahns */ /* * TODO: * - normalize use of seqIdx variable naming (seq, bseq etc.) */ #include #include #include #include #ifndef S_SPLINT_S #include #endif #include #include "core/assert_api.h" #include "core/bitpackstring.h" #include "match/dataalign.h" #include "core/error.h" #include "core/fa.h" #include "core/log.h" #include "core/minmax.h" #include "core/str.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "eis-blockcomp-construct.h" #include "match/eis-bitpackseqpos.h" #include "match/eis-encidxseq.h" #include "match/eis-encidxseq-priv.h" #include "match/eis-seqranges.h" #include "match/eis-seqblocktranslate.h" #include "match/eis-seqdatasrc.h" struct onDiskBlockCompIdx { FILE *idxFP; /**< used for writing the index and * if an mmap of the whole index * isn't possible also for reading */ GtStr *idxFN; /**< stores the filename of idxFP */ char *idxMMap; /**< if mmapping of the constant- and * variable-width strings succeeded, * stores the base of the * corresponding memory mapped file * portion */ off_t cwDataPos, /**< constant width data of the index */ varDataPos, /**< variable width part */ rangeEncPos; /**< in-file position of special * symbol representation */ }; /** * mode in which to encode a range of the alphabet */ enum rangeStoreMode { DIRECT_SYM_ENCODE, /**< direct sequence encoding (not implemented) */ BLOCK_COMPOSITION_INCLUDE, /**< encode as two bitstrings, one * containing a sequence of constant * width composition indices, one * containing a sequence of variable * width permutation indices */ REGIONS_LIST, /**< encode as linear list of sequence regions */ }; struct blockCompositionSeq { struct encIdxSeq baseClass; struct onDiskBlockCompIdx externalData; struct compList compositionTable; struct seqRangeList *rangeEncs; struct extHeaderPos *extHeaderPos; size_t numExtHeaders; BitOffset maxVarExtBitsPerBucket, cwExtBitsPerBucket; /* maxVarBitsPerBucket, cwBits */ MRAEnc *blockMapAlphabet, *rangeMapAlphabet; int *modes; unsigned bucketBlocks, blockSize, callBackDataOffsetBits, bitsPerUlong, bitsPerVarDiskOffset; AlphabetRangeSize blockMapAlphabetSize; Symbol blockEncFallback, rangeEncFallback; int numModes; unsigned *partialSymSumBits, *partialSymSumBitsSums, symSumBits; }; static inline size_t blockEncIdxSeqHeaderLength(const struct blockCompositionSeq *seqIdx, size_t numExtHeaders, const uint32_t *extHeaderSizes); static int openOnDiskData(const char *projectName, struct onDiskBlockCompIdx *idx, char *mode, GtError *err); static void initOnDiskBlockCompIdx(struct onDiskBlockCompIdx *idx, size_t headerLen, off_t cwLen); static void destructOnDiskBlockCompIdx(struct onDiskBlockCompIdx *idx); static size_t writeIdxHeader(struct blockCompositionSeq *seqIdx, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, GtError *err); static inline int tryMMapOfIndex(struct onDiskBlockCompIdx *idxData); static const struct encIdxSeqClass blockCompositionSeqClass; static inline struct blockCompositionSeq * encIdxSeq2blockCompositionSeq(struct encIdxSeq *seq) { gt_assert(seq && seq->classInfo == &blockCompositionSeqClass); return (struct blockCompositionSeq *)((char *)seq - offsetof(struct blockCompositionSeq, baseClass)); } static inline struct encIdxSeq * blockCompositionSeq2encIdxSeq(struct blockCompositionSeq *seq) { gt_assert(seq); return &(seq->baseClass); } static inline const struct blockCompositionSeq * constEncIdxSeq2blockCompositionSeq(const struct encIdxSeq *seq) { gt_assert(seq && seq->classInfo == &blockCompositionSeqClass); return (struct blockCompositionSeq *)((char *)seq - offsetof(struct blockCompositionSeq, baseClass)); } static inline const struct encIdxSeq * constBlockCompositionSeq2encIdxSeq(const struct blockCompositionSeq *seq) { gt_assert(seq); return &(seq->baseClass); } struct appendState { BitString compCache, permCache; BitOffset compCacheLen, permCacheLen, cwMemPos, varMemPos, varDiskOffset; off_t cwDiskOffset; unsigned varMemOldBits, cwMemOldBits; }; static inline void initAppendState(struct appendState *aState, const struct blockCompositionSeq *seqIdx); static void destructAppendState(struct appendState *aState); static inline void append2IdxOutput(struct appendState *state, PermCompIndex permCompIdx[2], unsigned bitsOfCompositionIdx, unsigned bitsOfPermutationIdx); static BitOffset appendCallBackOutput(struct appendState *state, const struct blockCompositionSeq *seqIdx, bitInsertFunc biFunc, unsigned long start, unsigned long len, unsigned callBackDataOffsetBits, void *cbState); typedef unsigned long partialSymSum; static inline partialSymSum * newPartialSymSums(AlphabetRangeSize alphabetSize); static inline void deletePartialSymSums(partialSymSum *sums); static inline void addBlock2PartialSymSums(partialSymSum *sums, const Symbol *block, unsigned blockSize); static inline void copyPartialSymSums(AlphabetRangeSize alphabetSize, partialSymSum *dest, const partialSymSum *src); static inline unsigned long numBuckets(unsigned long seqLen, size_t bucketLen); static inline off_t cwSize(const struct blockCompositionSeq *seqIdx); static inline BitOffset vwBits(unsigned long seqLen, unsigned blockSize, unsigned bucketBlocks, unsigned maxPermIdxBits, varExtBitsEstimator biVarBits, void *cbState, struct varBitsEstimate *extVarBitsUpperBound); static void addRangeEncodedSyms(struct seqRangeList *rangeList, const Symbol *block, unsigned blockSize, unsigned long blockNum, const MRAEnc *alphabet, int selection, const int *rangeSel); static int updateIdxOutput(struct blockCompositionSeq *seqIdx, struct appendState *aState, const partialSymSum *buck); static int finalizeIdxOutput(struct blockCompositionSeq *seqIdx, struct appendState *state); static inline void symSumBitsDefaultSetup(struct blockCompositionSeq *seqIdx); #define newBlockEncIdxSeqErrRet() \ do { \ if (newSeqIdx->externalData.idxFP) \ destructOnDiskBlockCompIdx(&newSeqIdx->externalData); \ if (newSeqIdx->compositionTable.bitsPerCount) \ gt_destructCompositionList(&newSeqIdx->compositionTable); \ if (newSeqIdx->rangeEncs) \ gt_deleteSeqRangeList(newSeqIdx->rangeEncs); \ if (newSeqIdx->extHeaderPos) \ gt_free(newSeqIdx->extHeaderPos); \ if (newSeqIdx->partialSymSumBits) \ gt_free(newSeqIdx->partialSymSumBits); \ if (newSeqIdx->extHeaderPos) \ gt_free(newSeqIdx->extHeaderPos); \ if (newSeqIdx) gt_free(newSeqIdx); \ if (modesCopy) \ gt_free(modesCopy); \ if (blockMapAlphabet) gt_MRAEncDelete(blockMapAlphabet); \ if (rangeMapAlphabet) gt_MRAEncDelete(rangeMapAlphabet); \ return NULL; \ } while (0) static void addBlock2OutputBuffer( struct blockCompositionSeq *newSeqIdx, partialSymSum *buck, unsigned long blockNum, Symbol *block, unsigned blockSize, const MRAEnc *alphabet, const int *modes, const MRAEnc *blockMapAlphabet, AlphabetRangeSize blockMapAlphabetSize, BitString permCompBSPreAlloc, unsigned *compositionPreAlloc, unsigned compositionIdxBits, struct appendState *aState) { PermCompIndex permCompIdx[2]; unsigned significantPermIdxBits; /* a. update superbucket table */ addBlock2PartialSymSums(buck, block, blockSize); /* b. add ranges of differently encoded symbols to * corresponding representation */ addRangeEncodedSyms(newSeqIdx->rangeEncs, block, blockSize, blockNum, alphabet, REGIONS_LIST, modes); /* c. add to table of composition/permutation indices */ gt_MRAEncSymbolsTransform(blockMapAlphabet, block, blockSize); /* FIXME control remapping */ /* currently invalid characters in input can seriously break this */ gt_block2IndexPair(&newSeqIdx->compositionTable, blockSize, blockMapAlphabetSize, block, permCompIdx, &significantPermIdxBits, permCompBSPreAlloc, compositionPreAlloc); append2IdxOutput(aState, permCompIdx, compositionIdxBits, significantPermIdxBits); } static int writeOutputBuffer(struct blockCompositionSeq *newSeqIdx, struct appendState *aState, bitInsertFunc biFunc, unsigned long lastUpdatePos, size_t bucketLen, unsigned callBackDataOffsetBits, void *cbState, const partialSymSum *buckLast) { if (biFunc) if (appendCallBackOutput(aState, newSeqIdx, biFunc, lastUpdatePos, bucketLen, callBackDataOffsetBits, cbState) == (BitOffset)-1) { perror("error condition while writing block-compressed" " index data"); return -1; } if (!updateIdxOutput(newSeqIdx, aState, buckLast)) { perror("error condition while writing block-compressed" " index data"); return -1; } return 1; } #define newBlockEncIdxSeqLoopErr() \ destructAppendState(&aState); \ deletePartialSymSums(buck); \ deletePartialSymSums(buckLast); \ gt_free(compositionPreAlloc); \ gt_free(permCompBSPreAlloc); \ gt_free(block); \ break EISeq * gt_newGenBlockEncIdxSeq(unsigned long totalLen, const char *projectName, MRAEnc *alphabet, const struct seqStats *stats, SeqDataReader BWTGenerator, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err) { struct blockCompositionSeq *newSeqIdx = NULL; AlphabetRangeSize blockMapAlphabetSize, totalAlphabetSize; size_t regionsEstimate=totalLen / 100; MRAEnc *blockMapAlphabet = NULL, *rangeMapAlphabet = NULL; BitOffset bitsPerComposition, bitsPerPermutation; unsigned compositionIdxBits, callBackDataOffsetBits, blockSize = params->encParams.blockEnc.blockSize, bucketBlocks = params->encParams.blockEnc.bucketBlocks; size_t bucketLen = (size_t)bucketBlocks * blockSize; int *modesCopy = NULL; struct varBitsEstimate biMaxExtSize; enum rangeStoreMode modes[] = { BLOCK_COMPOSITION_INCLUDE, REGIONS_LIST }; gt_assert(projectName); gt_assert(params->encType == BWT_ON_BLOCK_ENC); gt_assert(blockSize > 0); gt_assert((biFunc && biVarBits) || (biFunc == NULL && biVarBits == NULL)); gt_error_check(err); newSeqIdx = gt_calloc(sizeof (struct blockCompositionSeq), 1); newSeqIdx->bucketBlocks = bucketBlocks; newSeqIdx->bitsPerUlong = requiredUlongBits((newSeqIdx->baseClass.seqLen = totalLen) - 1); newSeqIdx->baseClass.alphabet = alphabet; { size_t range, numAlphabetRanges = newSeqIdx->numModes = MRAEncGetNumRanges(alphabet); totalAlphabetSize = gt_MRAEncGetSize(alphabet); blockMapAlphabetSize = 0; newSeqIdx->modes = modesCopy = gt_malloc(sizeof (int) * numAlphabetRanges); for (range = 0; range < numAlphabetRanges; ++range) { modesCopy[range] = modes[range]; switch (modes[range]) { case BLOCK_COMPOSITION_INCLUDE: blockMapAlphabetSize += MRAEncGetRangeSize(alphabet, range); break; case DIRECT_SYM_ENCODE: /*< OUTLOOK: insert proper code to process ranges * to improve orthogonality */ break; case REGIONS_LIST: /*< OUTLOOK: insert proper code to process ranges * to improve orthogonality */ break; default: gt_log_log("Invalid encoding request.\n"); newBlockEncIdxSeqErrRet(); break; } } newSeqIdx->blockMapAlphabetSize = blockMapAlphabetSize; newSeqIdx->blockMapAlphabet = blockMapAlphabet = gt_MRAEncSecondaryMapping(alphabet, BLOCK_COMPOSITION_INCLUDE, modesCopy, newSeqIdx->blockEncFallback = 0); newSeqIdx->rangeMapAlphabet = rangeMapAlphabet = gt_MRAEncSecondaryMapping(alphabet, REGIONS_LIST, modesCopy, newSeqIdx->rangeEncFallback = 0); gt_assert(gt_MRAEncGetSize(blockMapAlphabet) == blockMapAlphabetSize); gt_assert(gt_MRAEncGetSize(rangeMapAlphabet) == totalAlphabetSize - blockMapAlphabetSize); } newSeqIdx->partialSymSumBits = gt_malloc(sizeof (newSeqIdx->partialSymSumBits[0]) * blockMapAlphabetSize * 2); newSeqIdx->partialSymSumBitsSums = newSeqIdx->partialSymSumBits + blockMapAlphabetSize; if (stats) { unsigned long *symCounts; symCounts = gt_malloc(sizeof (symCounts[0]) * blockMapAlphabetSize); switch (stats->sourceAlphaType) { case sourceUInt8: memset(symCounts, 0, sizeof (symCounts[0]) * blockMapAlphabetSize); { Symbol eSym, bSym; unsigned i; for (i = 0; i <= UINT8_MAX; ++i) if (gt_MRAEncSymbolIsInSelectedRanges( alphabet, eSym = MRAEncMapSymbol(alphabet, i), BLOCK_COMPOSITION_INCLUDE, modesCopy) && ((bSym = MRAEncMapSymbol(blockMapAlphabet, eSym)) < blockMapAlphabetSize)) symCounts[bSym] += stats->symbolDistributionTable[i]; #ifdef EIS_DEBUG for (i = 0; i < blockMapAlphabetSize; ++i) { gt_log_log("symCount[%"PRIuSymbol"]=%lu\n", (Symbol) i, stats->symbolDistributionTable[i]); } #endif /* EIS_DEBUG */ if (blockMapAlphabetSize) { newSeqIdx->partialSymSumBitsSums[0] = 0; newSeqIdx->partialSymSumBits[0] = requiredUlongBits(symCounts[0]); for (i = 1; i < blockMapAlphabetSize; ++i) { newSeqIdx->partialSymSumBitsSums[i] = newSeqIdx->partialSymSumBitsSums[i - 1] + newSeqIdx->partialSymSumBits[i - 1]; newSeqIdx->partialSymSumBits[i] = requiredUlongBits(symCounts[i]); } #ifdef EIS_DEBUG for (i = 0; i < blockMapAlphabetSize; ++i) { gt_log_log("bitsPerSymSum[%"PRIuSymbol"]=%u\n", (Symbol)i, newSeqIdx->partialSymSumBits[i]); } #endif /* EIS_DEBUG */ newSeqIdx->symSumBits = newSeqIdx->partialSymSumBitsSums[blockMapAlphabetSize - 1] + newSeqIdx->partialSymSumBits[blockMapAlphabetSize - 1]; #ifdef EIS_DEBUG gt_log_log("symSumBits total: %u\n", newSeqIdx->symSumBits); #endif /* EIS_DEBUG */ } } /* count special characters to estimate number of regions required */ { Symbol eSym, rSym; unsigned long regionSymCount = 0; AlphabetRangeSize rangeMapAlphabetSize = gt_MRAEncGetSize(rangeMapAlphabet); unsigned i; for (i = 0; i <= UINT8_MAX; ++i) if (gt_MRAEncSymbolIsInSelectedRanges( alphabet, eSym = MRAEncMapSymbol(alphabet, i), REGIONS_LIST, modesCopy) && ((rSym = MRAEncMapSymbol(rangeMapAlphabet, eSym)) < rangeMapAlphabetSize)) regionSymCount += stats->symbolDistributionTable[i]; regionsEstimate = regionSymCount/20; #ifdef EIS_DEBUG gt_log_log("Expected %lu symbols to encode in regions.\n", regionSymCount); #endif } break; default: symSumBitsDefaultSetup(newSeqIdx); } gt_free(symCounts); } else { symSumBitsDefaultSetup(newSeqIdx); } { int regionFeatures = SRL_NO_FEATURES; if (params->EISFeatureSet & EIS_FEATURE_REGION_SUMS) regionFeatures |= SRL_PARTIAL_SYMBOL_SUMS; newSeqIdx->rangeEncs = gt_newSeqRangeList(regionsEstimate, rangeMapAlphabet, regionFeatures); } newSeqIdx->baseClass.classInfo = &blockCompositionSeqClass; if (!gt_initCompositionList(&newSeqIdx->compositionTable, blockSize, blockMapAlphabetSize)) { gt_error_set(err, "Insufficient memory for selected block size %u and " "alphabet size %u, try smaller block size?\n", blockSize, blockMapAlphabetSize); newBlockEncIdxSeqErrRet(); } bitsPerComposition = newSeqIdx->compositionTable.bitsPerCount * blockMapAlphabetSize; compositionIdxBits = newSeqIdx->compositionTable.compositionIdxBits; bitsPerPermutation = newSeqIdx->compositionTable.bitsPerSymbol * blockSize; newSeqIdx->blockSize = blockSize; newSeqIdx->cwExtBitsPerBucket = cwExtBitsPerPos * bucketLen; newSeqIdx->callBackDataOffsetBits = callBackDataOffsetBits = biFunc ? gt_requiredUInt64Bits(newSeqIdx->compositionTable.maxPermIdxBits * bucketBlocks) : 0; { BitOffset maxVarBitsTotal = vwBits(totalLen, blockSize, bucketBlocks, newSeqIdx->compositionTable.maxPermIdxBits, biVarBits, cbState, &biMaxExtSize); newSeqIdx->bitsPerVarDiskOffset = gt_requiredUInt64Bits(maxVarBitsTotal); } newSeqIdx->maxVarExtBitsPerBucket = biMaxExtSize.maxBitsPerBucket; { size_t headerLen = blockEncIdxSeqHeaderLength(newSeqIdx, numExtHeaders, extHeaderSizes); if (!openOnDiskData(projectName, &newSeqIdx->externalData, "wb+",err)) newBlockEncIdxSeqErrRet(); initOnDiskBlockCompIdx(&newSeqIdx->externalData, headerLen, cwSize(newSeqIdx)); } /* At this point everything should be ready to receive the actual sequence * information, steps: */ { int hadGtError = 0; do { { Symbol *block; unsigned *compositionPreAlloc; BitString permCompBSPreAlloc; partialSymSum *buck, *buckLast; block = gt_malloc(sizeof (Symbol) * blockSize); compositionPreAlloc = gt_malloc(sizeof (compositionPreAlloc[0]) * blockMapAlphabetSize); permCompBSPreAlloc = gt_malloc(bitElemsAllocSize(bitsPerComposition + bitsPerPermutation) * sizeof (BitElem)); buck = newPartialSymSums(totalAlphabetSize); buckLast = newPartialSymSums(totalAlphabetSize); /* 2. read block sized chunks from bwttab and suffix array */ { unsigned long numFullBlocks = totalLen / blockSize, blockNum, lastUpdatePos = 0; /* pos == totalLen - symbolsLeft */ struct appendState aState; initAppendState(&aState, newSeqIdx); blockNum = 0; while (blockNum < numFullBlocks) { size_t readResult; /* 3. for each chunk: */ readResult = SDRRead(BWTGenerator, block, blockSize); if (readResult != blockSize) { hadGtError = 1; perror("error condition while reading index data"); break; } gt_MRAEncSymbolsTransform(alphabet, block, blockSize); addBlock2OutputBuffer(newSeqIdx, buck, blockNum, block, blockSize, alphabet, modesCopy, blockMapAlphabet, blockMapAlphabetSize, permCompBSPreAlloc, compositionPreAlloc, compositionIdxBits, &aState); /* update on-disk structure */ if (!((++blockNum) % bucketBlocks)) { unsigned long pos = blockNum * blockSize; if (writeOutputBuffer(newSeqIdx, &aState, biFunc, lastUpdatePos, bucketLen, callBackDataOffsetBits, cbState, buckLast) < 0) { hadGtError = 1; break; } /* update retained data */ copyPartialSymSums(totalAlphabetSize, buckLast, buck); lastUpdatePos = pos; } } /* handle last chunk */ if (!hadGtError) { unsigned long symbolsLeft = totalLen % blockSize; if (symbolsLeft) { size_t readResult; readResult = SDRRead(BWTGenerator, block, symbolsLeft); if (readResult < symbolsLeft) { hadGtError = 1; perror("error condition while reading index data"); newBlockEncIdxSeqLoopErr(); } else { gt_MRAEncSymbolsTransform(alphabet, block, symbolsLeft); memset(block + symbolsLeft, 0, sizeof (Symbol) * (blockSize - symbolsLeft)); addBlock2OutputBuffer(newSeqIdx, buck, blockNum, block, blockSize, alphabet, modesCopy, blockMapAlphabet, blockMapAlphabetSize, permCompBSPreAlloc, compositionPreAlloc, compositionIdxBits, &aState); } } if (lastUpdatePos <= totalLen) { /* one bucket still unfinished */ if (writeOutputBuffer(newSeqIdx, &aState, biFunc, lastUpdatePos, totalLen - lastUpdatePos, callBackDataOffsetBits, cbState, buckLast) < 0) { hadGtError = 1; break; } } if (!finalizeIdxOutput(newSeqIdx, &aState)) { hadGtError = 1; perror("error condition while writing block-compressed" " index data"); newBlockEncIdxSeqLoopErr(); } if (!writeIdxHeader(newSeqIdx, numExtHeaders, headerIDs, extHeaderSizes, extHeaderCallbacks, headerCBData, err)) { hadGtError = 1; perror("error condition while writing block-compressed" " index header"); newBlockEncIdxSeqLoopErr(); } if (fflush(newSeqIdx->externalData.idxFP)) { hadGtError = 1; perror("error condition while writing block-compressed" " index header"); newBlockEncIdxSeqLoopErr(); } tryMMapOfIndex(&newSeqIdx->externalData); } if (hadGtError) { newBlockEncIdxSeqLoopErr(); } /* 4. dealloc resources no longer required */ destructAppendState(&aState); deletePartialSymSums(buck); deletePartialSymSums(buckLast); } /* 4. dealloc resources no longer required */ gt_free(compositionPreAlloc); gt_free(permCompBSPreAlloc); gt_free(block); } } while (0); /* close bwttab and suffix array */ if (hadGtError) newBlockEncIdxSeqErrRet(); } return &(newSeqIdx->baseClass); } static void deleteBlockEncIdxSeq(struct encIdxSeq *seq) { struct blockCompositionSeq *bseq; gt_assert(seq && seq->classInfo == &blockCompositionSeqClass); bseq = encIdxSeq2blockCompositionSeq(seq); gt_free(bseq->extHeaderPos); gt_free(bseq->partialSymSumBits); destructOnDiskBlockCompIdx(&bseq->externalData); gt_destructCompositionList(&bseq->compositionTable); gt_MRAEncDelete(bseq->baseClass.alphabet); gt_MRAEncDelete(bseq->rangeMapAlphabet); gt_MRAEncDelete(bseq->blockMapAlphabet); gt_deleteSeqRangeList(bseq->rangeEncs); gt_free(bseq->modes); gt_free(bseq); } #define USE_SBLOCK_CACHE static inline int seqIdxUsesMMap(const struct blockCompositionSeq *seqIdx) { return seqIdx->externalData.idxMMap != NULL; } /** * Since the sequence represented in the form of blocks is incomplete * without the information in corresponding regions, a superBlock * struct stores only information for the strings of composition and * permutation indices. The cwData string is prepended by partial * symbol sums and offsets in the global variable width string. Also * appended to the indices is extra information inserted by the * callback functions on index creation. */ struct superBlock { unsigned varDataMemBase, cwIdxMemBase; BitString varData, cwData; }; static inline size_t superBlockCWMaxReadSize(const struct blockCompositionSeq *seqIdx); static inline size_t superBlockVarMaxReadSize(const struct blockCompositionSeq *seqIdx); static inline BitOffset superBlockCWBits(const struct blockCompositionSeq *seqIdx); static inline size_t superBlockMemSize(const struct blockCompositionSeq *seqIdx) { if (seqIdxUsesMMap(seqIdx)) { return sizeof (struct superBlock); } else { size_t offset; offset = offsetAlign(sizeof (struct superBlock), sizeof (BitElem)); offset = offsetAlign(offset + superBlockCWMaxReadSize(seqIdx), sizeof (BitElem)); offset += superBlockVarMaxReadSize(seqIdx); return offsetAlign(offset, MAX_ALIGN_REQUIREMENT); } } static inline void initEmptySuperBlock(struct superBlock *sBlock, const struct blockCompositionSeq *seqIdx) { if (!seqIdxUsesMMap(seqIdx)) { size_t offset; sBlock->cwData = (BitString) ((char *)sBlock + (offset = offsetAlign(sizeof (*sBlock), sizeof (BitElem)))); sBlock->varData = (BitString) ((char *)sBlock + (offset = offsetAlign(offset + superBlockCWMaxReadSize(seqIdx), sizeof (BitElem)))); } } static struct superBlock * newEmptySuperBlock(const struct blockCompositionSeq *seqIdx) { struct superBlock *sBlock; sBlock = gt_malloc(superBlockMemSize(seqIdx)); initEmptySuperBlock(sBlock, seqIdx); return sBlock; } static void deleteSuperBlock(struct superBlock *sBlock) { gt_free(sBlock); } static inline void symSumBitsDefaultSetup(struct blockCompositionSeq *seqIdx) { unsigned i; AlphabetRangeSize blockMapAlphabetSize = seqIdx->blockMapAlphabetSize; seqIdx->partialSymSumBitsSums[0] = 0; seqIdx->partialSymSumBits[0] = seqIdx->bitsPerUlong; for (i = 1; i < blockMapAlphabetSize; ++i) seqIdx->partialSymSumBitsSums[i] = seqIdx->partialSymSumBitsSums[i - 1] + (seqIdx->partialSymSumBits[i] = seqIdx->bitsPerUlong); seqIdx->symSumBits = blockMapAlphabetSize * seqIdx->bitsPerUlong; #ifdef EIS_DEBUG gt_log_log("symSumBits=%u, blockMapAlphabetSize=%u\n", seqIdx->symSumBits, seqIdx->blockMapAlphabetSize); #endif gt_assert(seqIdx->partialSymSumBitsSums[i - 1] + seqIdx->bitsPerUlong == seqIdx->symSumBits); } static inline unsigned long sBlockGetPartialSymSum(struct superBlock *sBlock, Symbol sym, const struct blockCompositionSeq *seqIdx) { return gt_bsGetUlong(sBlock->cwData, seqIdx->partialSymSumBitsSums[sym] + sBlock->cwIdxMemBase, seqIdx->partialSymSumBits[sym]); } static inline void sBlockGetPartialSymSums(struct superBlock *sBlock, const struct blockCompositionSeq *seqIdx, unsigned long *sums) { gt_bsGetNonUniformUlongArray( sBlock->cwData, sBlock->cwIdxMemBase, seqIdx->blockMapAlphabetSize, seqIdx->symSumBits, seqIdx->partialSymSumBits, #ifdef _LP64 (uint64_t*) sums); #else (uint32_t*) sums); #endif } static inline BitOffset cwPreVarIdxBits(const struct blockCompositionSeq *seqIdx) { return seqIdx->symSumBits; } static inline BitOffset sBlockGetVarIdxOffset(const struct superBlock *sBlock, const struct blockCompositionSeq *seqIdx) { BitOffset offset = cwPreVarIdxBits(seqIdx) + sBlock->cwIdxMemBase; return gt_bsGetUInt64(sBlock->cwData, offset, seqIdx->bitsPerVarDiskOffset); } static inline BitOffset cwPreCBOffsetBits(const struct blockCompositionSeq *seqIdx) { BitOffset offset = cwPreVarIdxBits(seqIdx) + seqIdx->bitsPerVarDiskOffset; return offset; } static inline BitOffset cwPreCompIdxBits(const struct blockCompositionSeq *seqIdx) { BitOffset offset = cwPreCBOffsetBits(seqIdx) + seqIdx->callBackDataOffsetBits; return offset; } static inline BitOffset sBlockGetCompIdxOffset(const struct superBlock *sBlock, const struct blockCompositionSeq *seqIdx, unsigned compIdxNum) { BitOffset offset = sBlock->cwIdxMemBase + cwPreCompIdxBits(seqIdx) + compIdxNum * seqIdx->compositionTable.compositionIdxBits; return offset; } static inline BitOffset cwPreCWExtBits(const struct blockCompositionSeq *seqIdx) { BitOffset offset = cwPreCompIdxBits(seqIdx) + seqIdx->bucketBlocks * seqIdx->compositionTable.compositionIdxBits; return offset; } static inline BitOffset sBlockCWExtBitsOffset(const struct superBlock *sBlock, const struct blockCompositionSeq *seqIdx) { BitOffset offset = cwPreCWExtBits(seqIdx) + sBlock->cwIdxMemBase; return offset; } static inline BitOffset sBlockGetcbOffsetOffset(const struct superBlock *sBlock, const struct blockCompositionSeq *seqIdx) { BitOffset offset = cwPreCBOffsetBits(seqIdx) + sBlock->cwIdxMemBase; return offset; } static inline BitOffset sBlockGetcbOffset(const struct superBlock *sBlock, const struct blockCompositionSeq *seqIdx) { BitOffset offset = sBlockGetcbOffsetOffset(sBlock, seqIdx); return gt_bsGetUInt64(sBlock->cwData, offset, seqIdx->callBackDataOffsetBits); } static inline PermCompIndex sBlockGetCompIdx(const struct superBlock *sBlock, unsigned compIdxNum, const struct blockCompositionSeq *seqIdx) { BitOffset offset = sBlockGetCompIdxOffset(sBlock, seqIdx, compIdxNum); unsigned bitsPerCompositionIdx = seqIdx->compositionTable.compositionIdxBits; return gt_bsGetPermCompIndex(sBlock->cwData, offset, bitsPerCompositionIdx); } static inline unsigned long blockNumFromPos(const struct blockCompositionSeq *seqIdx, unsigned long pos) { return pos / seqIdx->blockSize; } static inline unsigned long bucketNumFromPos(const struct blockCompositionSeq *seqIdx, unsigned long pos) { return pos / (seqIdx->bucketBlocks * seqIdx->blockSize); } static inline unsigned long bucketBasePos(const struct blockCompositionSeq *seqIdx, unsigned long bucketNum) { return bucketNum * seqIdx->bucketBlocks * seqIdx->blockSize; } static inline unsigned long bucketNumFromBlockNum(struct blockCompositionSeq *seqIdx, unsigned long blockNum) { return blockNum / seqIdx->bucketBlocks; } #define fetchSuperBlockErrRet() \ do { \ if (!sBlockPreAlloc) deleteSuperBlock(retval); \ return NULL; \ } while (0) static struct superBlock * fetchSuperBlock(const struct blockCompositionSeq *seqIdx, unsigned long bucketNum, struct superBlock *sBlockPreAlloc) { struct superBlock *retval = NULL; gt_assert(seqIdx); gt_assert(bucketNum * seqIdx->bucketBlocks * seqIdx->blockSize <= seqIdx->baseClass.seqLen); if (sBlockPreAlloc) retval = sBlockPreAlloc; else retval = newEmptySuperBlock(seqIdx); if (seqIdxUsesMMap(seqIdx)) { BitOffset bucketOffset = bucketNum * superBlockCWBits(seqIdx); BitOffset varDataOffset; retval->cwData = (BitString)(seqIdx->externalData.idxMMap + bucketOffset / bitElemBits * sizeof (BitElem)); retval->cwIdxMemBase = bucketOffset%bitElemBits; varDataOffset = sBlockGetVarIdxOffset(retval, seqIdx); retval->varData = (BitString)(seqIdx->externalData.idxMMap + seqIdx->externalData.varDataPos - seqIdx->externalData.cwDataPos + varDataOffset/bitElemBits * sizeof (BitElem)); retval->varDataMemBase = varDataOffset%bitElemBits; } else { FILE *idxFP; GT_UNUSED int ret; size_t superBlockCWDiskSize = superBlockCWMaxReadSize(seqIdx); BitOffset bucketOffset = bucketNum * superBlockCWBits(seqIdx); BitOffset varDataOffset; idxFP = seqIdx->externalData.idxFP; if (fseeko(idxFP, seqIdx->externalData.cwDataPos + bucketOffset / bitElemBits * sizeof (BitElem), SEEK_SET)) fetchSuperBlockErrRet(); if (fread(retval->cwData, 1, superBlockCWDiskSize, idxFP) != superBlockCWDiskSize) fetchSuperBlockErrRet(); retval->cwIdxMemBase = bucketOffset%bitElemBits; varDataOffset = sBlockGetVarIdxOffset(retval, seqIdx); if (fseeko(idxFP, seqIdx->externalData.varDataPos + varDataOffset/bitElemBits * sizeof (BitElem), SEEK_SET)) fetchSuperBlockErrRet(); retval->varDataMemBase = varDataOffset%bitElemBits; ret = fread(retval->varData, sizeof (BitElem), superBlockVarMaxReadSize(seqIdx), idxFP); if (ferror(idxFP)) fetchSuperBlockErrRet(); } return retval; } static unsigned long blockCompSeqSelect(GT_UNUSED struct encIdxSeq *seq, GT_UNUSED Symbol sym, GT_UNUSED unsigned long count, GT_UNUSED union EISHint *hint) { /* FIXME: implementation pending */ abort(); return 0; } /* * routines for management of super-Block-Cache, this does currently * use a simple direct-mapped caching */ static inline size_t pos2CachePos(struct seqCache *sCache, unsigned long pos) { return pos % sCache->numEntries; } static void initSuperBlockSeqCache(struct seqCache *sBlockCache, const struct blockCompositionSeq *seqIdx, size_t numEntries) { unsigned bucketBlocks, GT_UNUSED bucketLen, blockSize; size_t superBlockSize; gt_assert(seqIdx && sBlockCache); blockSize = seqIdx->blockSize; bucketLen = (bucketBlocks = seqIdx->bucketBlocks) * blockSize; superBlockSize = superBlockMemSize(seqIdx); sBlockCache->numEntries = numEntries; { void *temp = gt_malloc((sizeof (unsigned long) + superBlockSize + sizeof (void *)) * numEntries); sBlockCache->cachedPos = temp; sBlockCache->entriesPtr = (void **)((char *)temp + sizeof (unsigned long) * numEntries); sBlockCache->entries = (char *)temp + (sizeof (unsigned long) + sizeof (void *)) * numEntries; } { size_t i; for (i = 0; i < numEntries; ++i) { sBlockCache->entriesPtr[i] = (char *)sBlockCache->entries + superBlockSize * i; initEmptySuperBlock(sBlockCache->entriesPtr[i], seqIdx); sBlockCache->cachedPos[i] = -1; } } } static void destructSuperBlockSeqCache(struct seqCache *sBlockCache) { gt_free(sBlockCache->cachedPos); } static inline int inSeqCache(struct seqCache *sCache, unsigned long pos) { return sCache->cachedPos[pos2CachePos(sCache, pos)] == pos; } #ifdef USE_SBLOCK_CACHE static struct superBlock * cacheFetchSuperBlock(const struct blockCompositionSeq *seqIdx, unsigned long superBlockNum, struct seqCache *sBlockCache) { size_t cachePos = pos2CachePos(sBlockCache, superBlockNum); if (inSeqCache(sBlockCache, superBlockNum)) return (struct superBlock *)sBlockCache->entriesPtr[cachePos]; else { struct superBlock *sb = (struct superBlock *)sBlockCache->entriesPtr[cachePos]; return fetchSuperBlock(seqIdx, superBlockNum, sb); } } #endif /* USE_SBLOCK_CACHE */ #define walkCompIndices(seqIdx, sBlock, numBlocks, cwOffset, \ codeForCompIndex, varOffset) \ do { \ unsigned blocksLeft = (numBlocks), \ bitsPerCompositionIdx = \ (seqIdx)->compositionTable.compositionIdxBits; \ while (blocksLeft) \ { \ PermCompIndex compIndex; \ compIndex = gt_bsGetPermCompIndex((sBlock)->cwData, cwIdxMemOffset, \ bitsPerCompositionIdx); \ codeForCompIndex; \ (varOffset) += \ (seqIdx)->compositionTable.permutations[compIndex].permIdxBits; \ (cwOffset) += bitsPerCompositionIdx; \ --blocksLeft; \ } \ } while (0) #define walkCompIndicesPrefix(seqIdx, sBlock, blockNum, cwOffset, \ codeForCompIndex, varOffset) \ do { \ cwOffset = sBlockGetCompIdxOffset(sBlock, seqIdx, 0); \ varOffset = sBlock->varDataMemBase; \ walkCompIndices(seqIdx, sBlock, blockNum, cwOffset, \ codeForCompIndex, varOffset); \ } while (0) static inline void unpackBlock(const struct blockCompositionSeq *seqIdx, const struct superBlock *sBlock, BitOffset cwOffset, BitOffset varOffset, Symbol *block, unsigned sublen) { unsigned varIdxBits, bitsPerCompositionIdx; PermCompIndex compIndex, permIndex; bitsPerCompositionIdx = seqIdx->compositionTable.compositionIdxBits; compIndex = gt_bsGetPermCompIndex(sBlock->cwData, cwOffset, bitsPerCompositionIdx); varIdxBits = seqIdx->compositionTable.permutations[compIndex].permIdxBits; permIndex = gt_bsGetPermCompIndex(sBlock->varData, varOffset, varIdxBits); indexPair2block(&seqIdx->compositionTable, seqIdx->blockSize, compIndex, permIndex, block, sublen); } /* * regular, user-accessible query functions */ static Symbol * blockCompSeqGetBlock(struct blockCompositionSeq *seqIdx, unsigned long blockNum, struct blockEncIdxSeqHint *hint, int queryRangeEnc, struct superBlock *sBlockPreFetch, Symbol *blockPA) { struct superBlock *sBlock; BitOffset varDataMemOffset, cwIdxMemOffset; GT_UNUSED unsigned long relBlockNum; unsigned blockSize; Symbol *block; gt_assert(seqIdx); blockSize = seqIdx->blockSize; if (blockNum * blockSize >= EISLength(&seqIdx->baseClass)) return NULL; if (sBlockPreFetch) sBlock = sBlockPreFetch; else { unsigned long bucketNum = bucketNumFromBlockNum(seqIdx, blockNum); #ifdef USE_SBLOCK_CACHE sBlock = cacheFetchSuperBlock(seqIdx, bucketNum, &hint->sBlockCache); #else sBlock = fetchSuperBlock(seqIdx, bucketNum, NULL); #endif } relBlockNum = blockNum % seqIdx->bucketBlocks; if (blockPA) block = blockPA; else block = gt_calloc(sizeof (Symbol), blockSize); walkCompIndicesPrefix(seqIdx, sBlock, blockNum % seqIdx->bucketBlocks, cwIdxMemOffset, , varDataMemOffset); unpackBlock(seqIdx, sBlock, cwIdxMemOffset, varDataMemOffset, block, blockSize); if (queryRangeEnc) gt_SRLApplyRangesToSubString(seqIdx->rangeEncs, block, blockNum * blockSize, blockSize, blockNum * blockSize, &hint->rangeHint); #ifndef USE_SBLOCK_CACHE if (!sBlockPreFetch) deleteSuperBlock(sBlock); #endif return block; } static inline unsigned long adjustPosRankForBlock(struct blockCompositionSeq *seqIdx, struct superBlock *sBlock, unsigned long pos, Symbol bSym, unsigned blockSize, unsigned long preBlockRankCount, BitOffset cwIdxMemOffset, BitOffset varDataMemOffset, unsigned bitsPerCompositionIdx) { unsigned long rankCount = preBlockRankCount; unsigned inBlockPos; if ((inBlockPos = pos % blockSize) && symCountFromComposition( &seqIdx->compositionTable, seqIdx->blockMapAlphabetSize, gt_bsGetPermCompIndex(sBlock->cwData, cwIdxMemOffset, bitsPerCompositionIdx), bSym)) { Symbol block[blockSize]; unsigned i; unpackBlock(seqIdx, sBlock, cwIdxMemOffset, varDataMemOffset, block, inBlockPos); for (i = 0; i < inBlockPos; ++i) { if (block[i] == bSym) ++rankCount; } } return rankCount; } /* Note: pos is meant exclusively, i.e. returns 0 for any query where pos==0 because that corresponds to the empty prefix */ static unsigned long blockCompSeqRank(struct encIdxSeq *eSeqIdx, Symbol eSym, unsigned long pos, union EISHint *hint) { struct blockCompositionSeq *seqIdx; unsigned long rankCount; gt_assert(eSeqIdx && eSeqIdx->classInfo == &blockCompositionSeqClass); seqIdx = encIdxSeq2blockCompositionSeq(eSeqIdx); gt_assert(gt_MRAEncSymbolIsInSelectedRanges(seqIdx->baseClass.alphabet, eSym, BLOCK_COMPOSITION_INCLUDE, seqIdx->modes) >= 0); if (gt_MRAEncSymbolIsInSelectedRanges(seqIdx->baseClass.alphabet, eSym, BLOCK_COMPOSITION_INCLUDE, seqIdx->modes)) { BitOffset varDataMemOffset, cwIdxMemOffset; struct superBlock *sBlock; Symbol bSym = MRAEncMapSymbol(seqIdx->blockMapAlphabet, eSym); unsigned long blockNum, bucketNum; unsigned blockSize = seqIdx->blockSize, bitsPerCompositionIdx = seqIdx->compositionTable.compositionIdxBits; bucketNum = bucketNumFromPos(seqIdx, pos); #ifdef USE_SBLOCK_CACHE sBlock = cacheFetchSuperBlock(seqIdx, bucketNum, &hint->bcHint.sBlockCache); #else sBlock = fetchSuperBlock(seqIdx, bucketNum, NULL); #endif rankCount = sBlockGetPartialSymSum(sBlock, bSym, seqIdx); blockNum = blockNumFromPos(seqIdx, pos); walkCompIndicesPrefix( seqIdx, sBlock, blockNum % seqIdx->bucketBlocks, cwIdxMemOffset, rankCount += symCountFromComposition( &seqIdx->compositionTable, seqIdx->blockMapAlphabetSize, compIndex, bSym);, varDataMemOffset); rankCount = adjustPosRankForBlock( seqIdx, sBlock, pos, bSym, blockSize, rankCount, cwIdxMemOffset, varDataMemOffset, bitsPerCompositionIdx); if (bSym == seqIdx->blockEncFallback) { unsigned long base = bucketBasePos(seqIdx, bucketNum); rankCount -= gt_SRLAllSymbolsCountInSeqRegion( seqIdx->rangeEncs, base, pos, &hint->bcHint.rangeHint); } #ifndef USE_SBLOCK_CACHE deleteSuperBlock(sBlock); #endif } else { rankCount = gt_SRLSymbolCountInSeqRegion(seqIdx->rangeEncs, 0, pos, eSym, &hint->bcHint.rangeHint); } return rankCount; } /* Note: pos is meant exclusively, i.e. returns 0 for any query where pos==0 because that corresponds to the empty prefix */ static GtUlongPair blockCompSeqPosPairRank(struct encIdxSeq *eSeqIdx, Symbol eSym, unsigned long posA, unsigned long posB, union EISHint *hint) { struct blockCompositionSeq *seqIdx; GtUlongPair rankCounts; unsigned long bucketNum; gt_assert(eSeqIdx && eSeqIdx->classInfo == &blockCompositionSeqClass); gt_assert(posA <= posB); seqIdx = encIdxSeq2blockCompositionSeq(eSeqIdx); gt_assert(gt_MRAEncSymbolIsInSelectedRanges(seqIdx->baseClass.alphabet, eSym, BLOCK_COMPOSITION_INCLUDE, seqIdx->modes) >= 0); /* Only when both positions are in same bucket, special treatment * makes sense. */ { unsigned long bucketNumA, bucketNumB; bucketNumA = bucketNumFromPos(seqIdx, posA); bucketNumB = bucketNumFromPos(seqIdx, posB); if (bucketNumA != bucketNumB) { rankCounts.a = blockCompSeqRank(eSeqIdx, eSym, posA, hint); rankCounts.b = blockCompSeqRank(eSeqIdx, eSym, posB, hint); return rankCounts; } bucketNum = bucketNumA; } if (gt_MRAEncSymbolIsInSelectedRanges(seqIdx->baseClass.alphabet, eSym, BLOCK_COMPOSITION_INCLUDE, seqIdx->modes)) { BitOffset varDataMemOffset, cwIdxMemOffset; struct superBlock *sBlock; unsigned long blockNumA = blockNumFromPos(seqIdx, posA), blockNumB = blockNumFromPos(seqIdx, posB); Symbol bSym = MRAEncMapSymbol(seqIdx->blockMapAlphabet, eSym); unsigned blockSize = seqIdx->blockSize, bitsPerCompositionIdx = seqIdx->compositionTable.compositionIdxBits, inBucketBlockNumA = blockNumA % seqIdx->bucketBlocks, inBucketBlockNumB = blockNumB % seqIdx->bucketBlocks; #ifdef USE_SBLOCK_CACHE sBlock = cacheFetchSuperBlock(seqIdx, bucketNum, &hint->bcHint.sBlockCache); #else sBlock = fetchSuperBlock(seqIdx, bucketNum, NULL); #endif rankCounts.a = sBlockGetPartialSymSum(sBlock, bSym, seqIdx); walkCompIndicesPrefix( seqIdx, sBlock, inBucketBlockNumA, cwIdxMemOffset, rankCounts.a += symCountFromComposition( &seqIdx->compositionTable, seqIdx->blockMapAlphabetSize, compIndex, bSym), varDataMemOffset); rankCounts.b = rankCounts.a; rankCounts.a = adjustPosRankForBlock(seqIdx, sBlock, posA, bSym, blockSize, rankCounts.a, cwIdxMemOffset, varDataMemOffset, bitsPerCompositionIdx); walkCompIndices( seqIdx, sBlock, inBucketBlockNumB - inBucketBlockNumA, cwIdxMemOffset, rankCounts.b += symCountFromComposition( &seqIdx->compositionTable, seqIdx->blockMapAlphabetSize, compIndex, bSym), varDataMemOffset); rankCounts.b = adjustPosRankForBlock(seqIdx, sBlock, posB, bSym, blockSize, rankCounts.b, cwIdxMemOffset, varDataMemOffset, bitsPerCompositionIdx); if (bSym == seqIdx->blockEncFallback) { unsigned long base = bucketBasePos(seqIdx, bucketNum); rankCounts.a -= gt_SRLAllSymbolsCountInSeqRegion( seqIdx->rangeEncs, base, posA, &hint->bcHint.rangeHint); rankCounts.b -= gt_SRLAllSymbolsCountInSeqRegion( seqIdx->rangeEncs, base, posB, &hint->bcHint.rangeHint); } #ifndef USE_SBLOCK_CACHE deleteSuperBlock(sBlock); #endif } else { rankCounts.a = gt_SRLSymbolCountInSeqRegion(seqIdx->rangeEncs, 0, posA, eSym, &hint->bcHint.rangeHint); rankCounts.b = gt_SRLSymbolCountInSeqRegion(seqIdx->rangeEncs, 0, posA, eSym, &hint->bcHint.rangeHint); } return rankCounts; } static void blockCompSeqExpose(struct encIdxSeq *eSeqIdx, unsigned long pos, int flags, struct extBitsRetrieval *retval, union EISHint *hint) { struct blockCompositionSeq *seqIdx; gt_assert(eSeqIdx && eSeqIdx->classInfo == &blockCompositionSeqClass); gt_assert(retval); seqIdx = encIdxSeq2blockCompositionSeq(eSeqIdx); { struct superBlock *sBlock; unsigned long bucketNum, end; bucketNum = bucketNumFromPos(seqIdx, pos); retval->start = bucketBasePos(seqIdx, bucketNum); end = bucketBasePos(seqIdx, bucketNum + 1); if (end >= seqIdx->baseClass.seqLen) end = seqIdx->baseClass.seqLen; retval->len = end - retval->start; #ifdef USE_SBLOCK_CACHE sBlock = cacheFetchSuperBlock(seqIdx, bucketNum, &hint->bcHint.sBlockCache); #else sBlock = fetchSuperBlock(seqIdx, bucketNum, NULL); #endif retval->cwOffset = sBlockCWExtBitsOffset(sBlock, seqIdx); if (flags & EBRF_PERSISTENT_CWBITS) { if (!(retval->flags & EBRF_PERSISTENT_CWBITS)) { retval->varPart = gt_malloc(superBlockCWMaxReadSize(seqIdx)); } memcpy(retval->cwPart, sBlock->cwData, superBlockCWMaxReadSize(seqIdx)); } else { if (retval->flags & EBRF_PERSISTENT_CWBITS) gt_free(retval->cwPart); retval->cwPart = sBlock->cwData; } if (EBRF_RETRIEVE_VARBITS) { retval->varOffset = sBlockGetcbOffset(sBlock, seqIdx) + sBlock->varDataMemBase; if (flags & EBRF_PERSISTENT_VARBITS) { if (!(retval->flags & EBRF_PERSISTENT_VARBITS)) { retval->varPart = gt_malloc(superBlockVarMaxReadSize(seqIdx)); } memcpy(retval->varPart, sBlock->varData, superBlockVarMaxReadSize(seqIdx)); } else { if (retval->flags & EBRF_PERSISTENT_VARBITS) gt_free(retval->varPart); retval->varPart = sBlock->varData; } } else { if (retval->flags & EBRF_PERSISTENT_VARBITS) gt_free(retval->varPart); retval->varPart = NULL; retval->varOffset = 0; } #ifndef USE_SBLOCK_CACHE deleteSuperBlock(sBlock); #endif retval->flags = flags; } } static inline void adjustRanksForBlock(struct blockCompositionSeq *seqIdx, struct superBlock *sBlock, unsigned long pos, unsigned blockSize, unsigned long rankCounts[], BitOffset cwIdxMemOffset, BitOffset varDataMemOffset) { unsigned inBlockPos = pos % blockSize; if (inBlockPos) { Symbol block[blockSize]; unsigned i; unpackBlock(seqIdx, sBlock, cwIdxMemOffset, varDataMemOffset, block, inBlockPos); for (i = 0; i < inBlockPos; ++i) ++(rankCounts[block[i]]); } } static void blockCompSeqRangeRank(struct encIdxSeq *eSeqIdx, AlphabetRangeID range, unsigned long pos, unsigned long *rankCounts, union EISHint *hint) { struct blockCompositionSeq *seqIdx; gt_assert(eSeqIdx && eSeqIdx->classInfo == &blockCompositionSeqClass); seqIdx = encIdxSeq2blockCompositionSeq(eSeqIdx); gt_assert(range < MRAEncGetNumRanges(EISGetAlphabet(eSeqIdx))); switch (seqIdx->modes[range]) { case BLOCK_COMPOSITION_INCLUDE: { BitOffset varDataMemOffset, cwIdxMemOffset; struct superBlock *sBlock; unsigned long blockNum, bucketNum; unsigned blockSize = seqIdx->blockSize; bucketNum = bucketNumFromPos(seqIdx, pos); #ifdef USE_SBLOCK_CACHE sBlock = cacheFetchSuperBlock(seqIdx, bucketNum, &hint->bcHint.sBlockCache); #else sBlock = fetchSuperBlock(seqIdx, bucketNum, NULL); #endif { sBlockGetPartialSymSums(sBlock, seqIdx, rankCounts); blockNum = blockNumFromPos(seqIdx, pos); walkCompIndicesPrefix( seqIdx, sBlock, blockNum % seqIdx->bucketBlocks, cwIdxMemOffset, addSymCountsFromComposition(&seqIdx->compositionTable, seqIdx->blockMapAlphabetSize, compIndex, rankCounts);, varDataMemOffset); adjustRanksForBlock(seqIdx, sBlock, pos, blockSize, rankCounts, cwIdxMemOffset, varDataMemOffset); { unsigned long base = bucketBasePos(seqIdx, bucketNum); rankCounts[seqIdx->blockEncFallback] -= gt_SRLAllSymbolsCountInSeqRegion( seqIdx->rangeEncs, base, pos, &hint->bcHint.rangeHint); } } #ifndef USE_SBLOCK_CACHE deleteSuperBlock(sBlock); #endif } break; case REGIONS_LIST: { AlphabetRangeSize sym, rangeEncNumSyms = gt_MRAEncGetSize(seqIdx->rangeMapAlphabet); for (sym = 0; sym < rangeEncNumSyms; ++sym) rankCounts[sym] = gt_SRLSymbolCountInSeqRegion( seqIdx->rangeEncs, 0, pos, MRAEncRevMapSymbol(seqIdx->rangeMapAlphabet, sym), &hint->bcHint.rangeHint); } break; } } static void blockCompSeqPosPairRangeRank(struct encIdxSeq *eSeqIdx, AlphabetRangeID range, unsigned long posA, unsigned long posB, unsigned long *rankCounts, union EISHint *hint) { struct blockCompositionSeq *seqIdx; gt_assert(eSeqIdx && eSeqIdx->classInfo == &blockCompositionSeqClass); seqIdx = encIdxSeq2blockCompositionSeq(eSeqIdx); gt_assert(range < MRAEncGetNumRanges(EISGetAlphabet(eSeqIdx))); switch (seqIdx->modes[range]) { case BLOCK_COMPOSITION_INCLUDE: { BitOffset varDataMemOffset, cwIdxMemOffset; struct superBlock *sBlock; AlphabetRangeSize rsize = MRAEncGetRangeSize(eSeqIdx->alphabet, range); /* Only when both positions are in same bucket, special treatment * makes sense. */ unsigned long bucketNum = bucketNumFromPos(seqIdx, posA); if (bucketNum != bucketNumFromPos(seqIdx, posB)) { blockCompSeqRangeRank(eSeqIdx, range, posA, rankCounts, hint); blockCompSeqRangeRank(eSeqIdx, range, posB, rankCounts + rsize, hint); return; } #ifdef USE_SBLOCK_CACHE sBlock = cacheFetchSuperBlock(seqIdx, bucketNum, &hint->bcHint.sBlockCache); #else sBlock = fetchSuperBlock(seqIdx, bucketNum, NULL); #endif { unsigned long blockNumA = blockNumFromPos(seqIdx, posA), blockNumB = blockNumFromPos(seqIdx, posB); unsigned blockSize = seqIdx->blockSize, inBucketBlockNumA = blockNumA % seqIdx->bucketBlocks, inBucketBlockNumB = blockNumB % seqIdx->bucketBlocks; sBlockGetPartialSymSums(sBlock, seqIdx, rankCounts); walkCompIndicesPrefix( seqIdx, sBlock, inBucketBlockNumA, cwIdxMemOffset, addSymCountsFromComposition(&seqIdx->compositionTable, seqIdx->blockMapAlphabetSize, compIndex, rankCounts);, varDataMemOffset); memcpy(rankCounts + rsize, rankCounts, rsize * sizeof (rankCounts[0])); adjustRanksForBlock(seqIdx, sBlock, posA, blockSize, rankCounts, cwIdxMemOffset, varDataMemOffset); walkCompIndices( seqIdx, sBlock, inBucketBlockNumB - inBucketBlockNumA, cwIdxMemOffset, addSymCountsFromComposition(&seqIdx->compositionTable, seqIdx->blockMapAlphabetSize, compIndex, rankCounts + rsize);, varDataMemOffset); adjustRanksForBlock(seqIdx, sBlock, posB, blockSize, rankCounts + rsize, cwIdxMemOffset, varDataMemOffset); { unsigned long base = bucketBasePos(seqIdx, bucketNum); rankCounts[seqIdx->blockEncFallback] -= gt_SRLAllSymbolsCountInSeqRegion( seqIdx->rangeEncs, base, posA, &hint->bcHint.rangeHint); rankCounts[rsize + seqIdx->blockEncFallback] -= gt_SRLAllSymbolsCountInSeqRegion( seqIdx->rangeEncs, base, posB, &hint->bcHint.rangeHint); } } #ifndef USE_SBLOCK_CACHE deleteSuperBlock(sBlock); #endif } break; case REGIONS_LIST: { AlphabetRangeSize sym, rangeEncNumSyms = gt_MRAEncGetSize(seqIdx->rangeMapAlphabet); for (sym = 0; sym < rangeEncNumSyms; ++sym) rankCounts[sym] = gt_SRLSymbolCountInSeqRegion( seqIdx->rangeEncs, 0, posA, MRAEncRevMapSymbol(seqIdx->rangeMapAlphabet, sym), &hint->bcHint.rangeHint); for (sym = 0; sym < rangeEncNumSyms; ++sym) rankCounts[sym + rangeEncNumSyms] = gt_SRLSymbolCountInSeqRegion( seqIdx->rangeEncs, 0, posB, MRAEncRevMapSymbol(seqIdx->rangeMapAlphabet, sym), &hint->bcHint.rangeHint); } break; } } static Symbol blockCompSeqGet(struct encIdxSeq *seq, unsigned long pos, union EISHint *hint) { Symbol sym; struct blockCompositionSeq *seqIdx; unsigned blockSize; gt_assert(seq && seq->classInfo == &blockCompositionSeqClass); if (pos >= seq->seqLen) return ~(Symbol)0; seqIdx = encIdxSeq2blockCompositionSeq(seq); blockSize = seqIdx->blockSize; { Symbol block[blockSize]; blockCompSeqGetBlock(seqIdx, pos/blockSize, &(hint->bcHint), 1, NULL, block); sym = block[pos%blockSize]; } return sym; } static inline partialSymSum * newPartialSymSums(AlphabetRangeSize alphabetSize) { return gt_calloc(alphabetSize, sizeof (unsigned long)); } static inline void deletePartialSymSums(partialSymSum *sums) { gt_free(sums); } static inline void addBlock2PartialSymSums(partialSymSum *sums, const Symbol *block, unsigned blockSize) { unsigned i; for (i = 0; i < blockSize; ++i) ++(sums[block[i]]); } static inline void copyPartialSymSums(AlphabetRangeSize alphabetSize, partialSymSum *dest, const partialSymSum *src) { memcpy(dest, src, sizeof (dest[0]) * alphabetSize); } static inline BitOffset superBlockCWBits(const struct blockCompositionSeq *seqIdx) { return seqIdx->symSumBits + seqIdx->bitsPerVarDiskOffset + seqIdx->callBackDataOffsetBits + seqIdx->compositionTable.compositionIdxBits * seqIdx->bucketBlocks + seqIdx->cwExtBitsPerBucket; } static inline size_t superBlockCWMaxReadSize(const struct blockCompositionSeq *seqIdx) { return bitElemsAllocSize(superBlockCWBits(seqIdx) + bitElemBits - 1) * sizeof (BitElem); } static inline size_t superBlockVarMaxBits(const struct blockCompositionSeq *seqIdx) { return seqIdx->compositionTable.maxPermIdxBits * seqIdx->bucketBlocks + seqIdx->maxVarExtBitsPerBucket; } static inline size_t superBlockVarMaxReadSize(const struct blockCompositionSeq *seqIdx) { return bitElemsAllocSize(superBlockVarMaxBits(seqIdx) + bitElemBits - 1); } static inline unsigned long numBuckets(unsigned long seqLen, size_t bucketLen) { /* seqLen + 1 because the partial sums for seqLen are used */ return (seqLen + 1) / bucketLen + (((seqLen + 1) % bucketLen)?1:0); } static inline off_t cwSize(const struct blockCompositionSeq *seqIdx) { off_t cwLen; cwLen = bitElemsAllocSize( superBlockCWBits(seqIdx) * numBuckets(seqIdx->baseClass.seqLen, seqIdx->bucketBlocks * seqIdx->blockSize)) * sizeof (BitElem); return cwLen; } static inline BitOffset vwBitsSimple(unsigned long seqLen, unsigned blockSize, unsigned bucketBlocks, unsigned maxPermIdxBits, BitOffset maxVarExtBitsPerBucket) { return numBuckets(seqLen, bucketBlocks * blockSize) * (maxPermIdxBits * bucketBlocks + maxVarExtBitsPerBucket); } static inline BitOffset vwBits(unsigned long seqLen, unsigned blockSize, unsigned bucketBlocks, unsigned maxPermIdxBits, varExtBitsEstimator biVarBits, void *cbState, struct varBitsEstimate *extVarBitsUpperBound) { size_t bucketLen = (size_t)bucketBlocks * blockSize; BitOffset maxVarBits = numBuckets(seqLen, bucketLen) * (maxPermIdxBits * bucketBlocks); if (biVarBits) { struct segmentDesc desc[2]; struct varBitsEstimate *extVarBits, extVarBitsTemp; extVarBits = extVarBitsUpperBound?extVarBitsUpperBound:&extVarBitsTemp; desc[0].repeatCount = (seqLen + 1) / bucketLen; desc[0].len = bucketLen; desc[1].repeatCount = ((seqLen + 1) % bucketLen)?1:0; desc[1].len = seqLen % bucketLen; if (biVarBits(cbState, desc, sizeof (desc)/sizeof (desc[0]), extVarBits)) maxVarBits += extVarBits->maxBitsTotal; else maxVarBits += numBuckets(seqLen, bucketLen) * extVarBits->maxBitsPerBucket; } else if (extVarBitsUpperBound) { extVarBitsUpperBound->maxBitsTotal = extVarBitsUpperBound->maxBitsPerBucket = extVarBitsUpperBound->maxBitsPerPos = 0; } return maxVarBits; } /** * @return 0 on error, 1 otherwise */ static int openOnDiskData(const char *projectName, struct onDiskBlockCompIdx *idx, char *mode,GtError *err) { GtStr *bdxName = gt_str_new_cstr(projectName); gt_str_append_cstr(bdxName, ".bdx"); idx->idxFP = gt_fa_fopen(gt_str_get(bdxName), mode, err); idx->idxFN = gt_str_ref(bdxName); gt_str_delete(bdxName); if (!idx->idxFP) return 0; else return 1; } enum { EXT_HEADER_PREFIX_SIZE = 8, HEADER_PAGESIZE_ROUNDUP = 8192, HEADER_ID_BLOCK_LEN = 8, }; static void initOnDiskBlockCompIdx(struct onDiskBlockCompIdx *idx, size_t headerLen, off_t cwLen) { idx->cwDataPos = roundUp(headerLen, HEADER_PAGESIZE_ROUNDUP); idx->varDataPos = cwLen + idx->cwDataPos; idx->rangeEncPos = 0; } static void destructOnDiskBlockCompIdx(struct onDiskBlockCompIdx *idx) { if (idx->idxMMap) gt_fa_xmunmap(idx->idxMMap); if (idx->idxFP) gt_fa_xfclose(idx->idxFP); if (idx->idxFN) gt_str_delete(idx->idxFN); } static inline void initAppendState(struct appendState *aState, const struct blockCompositionSeq *seqIdx) { BitOffset compCacheLen = superBlockCWBits(seqIdx) + bitElemBits - 1, permCacheLen = superBlockVarMaxBits(seqIdx) + bitElemBits - 1; aState->compCacheLen = compCacheLen; aState->permCacheLen = permCacheLen; aState->compCache = gt_calloc(sizeof (BitElem), bitElemsAllocSize(compCacheLen)); aState->permCache = gt_calloc(sizeof (BitElem), bitElemsAllocSize(permCacheLen)); aState->cwMemPos = cwPreCompIdxBits(seqIdx); aState->cwDiskOffset = aState->varMemPos = aState->cwMemOldBits = aState->varDiskOffset = aState->varMemOldBits = 0; } static void destructAppendState(struct appendState *aState) { gt_free(aState->permCache); gt_free(aState->compCache); } /** * @return 0 on successfull update, <0 on error */ static inline void append2IdxOutput(struct appendState *state, PermCompIndex permCompIdx[2], unsigned bitsOfCompositionIdx, unsigned bitsOfPermutationIdx) { gt_assert(state->cwMemPos + bitsOfCompositionIdx <= state->compCacheLen); gt_bsStorePermCompIndex(state->compCache, state->cwMemPos, bitsOfCompositionIdx, permCompIdx[0]); state->cwMemPos += bitsOfCompositionIdx; gt_assert(state->varMemPos + bitsOfPermutationIdx <= state->permCacheLen); gt_bsStorePermCompIndex(state->permCache, state->varMemPos, bitsOfPermutationIdx, permCompIdx[1]); state->varMemPos += bitsOfPermutationIdx; } static BitOffset appendCallBackOutput(struct appendState *state, const struct blockCompositionSeq *seqIdx, bitInsertFunc biFunc, unsigned long start, unsigned long len, unsigned callBackDataOffsetBits, void *cbState) { BitOffset bitsWritten; gt_assert(state); if (callBackDataOffsetBits) { BitOffset offset = cwPreCBOffsetBits(seqIdx); gt_bsStoreUInt64(state->compCache, state->cwMemOldBits + offset, callBackDataOffsetBits, state->varMemPos - state->varMemOldBits); } bitsWritten = biFunc(state->compCache, state->cwMemOldBits + cwPreCWExtBits(seqIdx), state->permCache, state->varMemPos, start, len, cbState); if (bitsWritten == (BitOffset)-1) return bitsWritten; state->cwMemPos = cwPreCWExtBits(seqIdx) + state->cwMemOldBits + seqIdx->cwExtBitsPerBucket; state->varMemPos += bitsWritten; return bitsWritten; } /** * @return >0 on success, 0 on I/O-error */ static int updateIdxOutput(struct blockCompositionSeq *seqIdx, struct appendState *aState, const partialSymSum *buck) { size_t recordsExpected, cwBitElems; AlphabetRangeSize blockAlphabetSize; gt_assert(seqIdx && aState && buck); /* seek2/write constant width indices */ if (!(seqIdx->externalData.cwDataPos + aState->cwDiskOffset < seqIdx->externalData.varDataPos + aState->varDiskOffset/bitElemBits * sizeof (BitElem))) { fprintf(stderr,"cwDatapos=%lu\n", (unsigned long) seqIdx->externalData.cwDataPos); fprintf(stderr,"cwDiskOffset=%lu\n",(unsigned long) aState->cwDiskOffset); fprintf(stderr,"varDataPos=%lu\n", (unsigned long) seqIdx->externalData.varDataPos); fprintf(stderr,"bitElemBits=%lu\n",(unsigned long) bitElemBits); fprintf(stderr,"aState->varDiskOffset=%lu\n", (unsigned long) aState->varDiskOffset); fprintf(stderr,"aState->varDiskOffset/bitElemBits=%lu\n", (unsigned long) (aState->varDiskOffset/bitElemBits)); fprintf(stderr,"sizeof (BitElem)=%lu\n",(unsigned long) sizeof (BitElem)); fprintf(stderr,"aState->varDiskOffset/bitElemBits * sizeof (BitElem)=%lu\n", (unsigned long) (aState->varDiskOffset/bitElemBits * sizeof (BitElem))); fprintf(stderr,"seqIdx->externalData.varDataPos + " "aState->varDiskOffset/bitElemBits * sizeof (BitElem)=%lu\n", (unsigned long) (seqIdx->externalData.varDataPos + aState->varDiskOffset/bitElemBits * sizeof (BitElem))); exit(GT_EXIT_PROGRAMMING_ERROR); } gt_assert(seqIdx->externalData.cwDataPos + aState->cwDiskOffset < seqIdx->externalData.varDataPos + aState->varDiskOffset/bitElemBits * sizeof (BitElem)); blockAlphabetSize = seqIdx->blockMapAlphabetSize; /* put bucket data for count up to the beginning of the current * block into the cw BitString */ gt_assert(sizeof (unsigned long) * CHAR_BIT >= seqIdx->bitsPerUlong); { Symbol i; for (i = 0; i < blockAlphabetSize; ++i) { gt_bsStoreUlong(aState->compCache, aState->cwMemOldBits + seqIdx->partialSymSumBitsSums[i], seqIdx->partialSymSumBits[i], buck[i]); } } /* append variable width offset position */ gt_bsStoreUInt64(aState->compCache, aState->cwMemOldBits + cwPreVarIdxBits(seqIdx), seqIdx->bitsPerVarDiskOffset, aState->varDiskOffset); if (fseeko(seqIdx->externalData.idxFP, seqIdx->externalData.cwDataPos + aState->cwDiskOffset, SEEK_SET)) return 0; cwBitElems = recordsExpected = aState->cwMemPos / bitElemBits; gt_xfwrite(aState->compCache, sizeof (BitElem), recordsExpected, seqIdx->externalData.idxFP); if ((aState->cwMemOldBits = aState->cwMemPos % bitElemBits)) aState->compCache[0] = aState->compCache[recordsExpected]; /* seek2/write variable width indices */ if (fseeko(seqIdx->externalData.idxFP, seqIdx->externalData.varDataPos + aState->varDiskOffset/bitElemBits * sizeof (BitElem), SEEK_SET)) return 0; recordsExpected = aState->varMemPos/bitElemBits; gt_xfwrite(aState->permCache, sizeof (BitElem), recordsExpected, seqIdx->externalData.idxFP); /* move last elem of permCache with unwritten bits to front */ if (aState->varMemPos % bitElemBits) aState->permCache[0] = aState->permCache[recordsExpected]; /* FIXME: this assumes that the string of variable width date does * indeed occupy at least one full bitElem */ aState->cwDiskOffset += cwBitElems; aState->cwMemPos = cwPreCompIdxBits(seqIdx) + aState->cwMemOldBits; aState->varDiskOffset += aState->varMemPos - aState->varMemOldBits; aState->varMemOldBits = (aState->varMemPos %= bitElemBits); return 1; } /* Caution: EH??-headers are reserved for extension headers */ enum bdxHeader { BKSZ_HEADER_FIELD = 0x424b535a, /* block size */ BBLK_HEADER_FIELD = 0x42424c4b, /* blocks per bucket */ VOFF_HEADER_FIELD = 0x564f4646, /* variable string offset */ ROFF_HEADER_FIELD = 0x524f4646, /* range encoding offset */ NMRN_HEADER_FIELD = 0x4e4d524e, /* number of ranges */ CBMB_HEADER_FIELD = 0x43424d42, /* block internal offset for ext * bits provided by callback */ MEXB_HEADER_FIELD = 0x4d455842, /* maxVarExtBitsPerBucket */ CEXB_HEADER_FIELD = 0x43455842, /* cwExtBitsPerBucket */ SPBT_HEADER_FIELD = 0x53504254, /* bits stored for unsigned long values */ SSBT_HEADER_FIELD = 0x53534254, /* block map alphabet size */ BEFB_HEADER_FIELD = 0x42454642, /* block encoding fallback symbol */ REFB_HEADER_FIELD = 0x52454642, /* range encoding fallback symbol */ VDOB_HEADER_FIELD = 0x56444f42, /* bitsPerVarDiskOffset */ SELE_HEADER_FIELD = 0x53454c45, /* sequence length */ EH_HEADER_PREFIX = 0x45480000, /* extension headers */ }; static const char bdxHeader[] = "BDX"; static inline off_t extHeadersSizeAggregate(size_t numExtHeaders, const uint32_t *extHeaderSizes) { off_t len = 0, i; for (i = 0; i < numExtHeaders; ++i) len += extHeaderSizes[i] + EXT_HEADER_PREFIX_SIZE; return len; } static inline size_t blockEncIdxSeqHeaderLength(const struct blockCompositionSeq *seqIdx, size_t numExtHeaders, const uint32_t *extHeaderSizes) { size_t headerSize = 4 /* BDX identifier */ + 4 /* length field */ + 8 /* block size */ + 8 /* blocks per bucket */ + 12 /* offset of variable length data */ + 12 /* offset of range encodings */ + 4 + 4 /* bits used per seqpos */ + 4 + 4 /* bits used per variable bit offset */ + 4 + 4 + 4 * seqIdx->blockMapAlphabetSize /* bit counts for partial sums */ + 4 + 4 /* block encoding fallback symbol */ + 4 + 4 /* range encoding fallback symbol */ + 4 + 4 /* num modes */ + 4 + 8 /* length of sequence */ + 4 * seqIdx->numModes /* one uint32_t for every mode */ ; if (seqIdx->callBackDataOffsetBits) headerSize += 4 + 4 /* extra offset bits per constant block */ + 4 + 8 /* extension bits stored in constant block */ + 4 + 8; /* variable area bits added per bucket max */ headerSize += extHeadersSizeAggregate(numExtHeaders, extHeaderSizes); return headerSize; } struct extHeaderPos { off_t pos; uint32_t headerID; }; static inline void appendExtHeaderPos(struct extHeaderPos **headerList, size_t numHeaders, off_t pos, uint32_t headerID) { *headerList = gt_realloc(*headerList, sizeof (**headerList) * (numHeaders + 1)); (*headerList)[numHeaders].pos = pos; (*headerList)[numHeaders].headerID = headerID; }; static inline int writeExtIdxHeader(FILE *fp, uint16_t headerID, size_t len, headerWriteFunc cbFunc, void *cbData) { uint32_t expHeader[2] = { EH_HEADER_PREFIX | headerID, len }; gt_xfwrite(expHeader, sizeof (uint32_t), 2, fp); return cbFunc(fp, cbData); } #define writeIdxHeaderErrRet(retval) \ do { \ gt_free(buf); \ return 0; \ } while (0) /** * FIXME: this doesn't work on platforms with sizeof (uint32_t) != 4 * or sizeof (int) < 4 * @return 0 on error, header length in bytes on success */ static size_t writeIdxHeader(struct blockCompositionSeq *seqIdx, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, GT_UNUSED GtError *err) { FILE *fp; /* construct memory buffer with header data */ size_t i, bufLen; off_t offset, len; char *buf; gt_assert(seqIdx && err); fp = seqIdx->externalData.idxFP; bufLen = blockEncIdxSeqHeaderLength(seqIdx, 0, NULL); buf = gt_malloc(bufLen); /* account for ext headers */ len = roundUp(bufLen, HEADER_PAGESIZE_ROUNDUP); /* 1. 4 identifier bytes at offset 0 */ strcpy(buf, bdxHeader); /* 2. header length */ *(uint32_t *)(buf + 4) = len; /* 3. block size */ offset = HEADER_ID_BLOCK_LEN; *(uint32_t *)(buf + offset) = BKSZ_HEADER_FIELD; *(uint32_t *)(buf + offset + 4) = seqIdx->blockSize; offset += 8; *(uint32_t *)(buf + offset) = BBLK_HEADER_FIELD; *(uint32_t *)(buf + offset + 4) = seqIdx->bucketBlocks; offset += 8; *(uint32_t *)(buf + offset) = VOFF_HEADER_FIELD; *(uint64_t *)(buf + offset + 4) = seqIdx->externalData.varDataPos; offset += 12; *(uint32_t *)(buf + offset) = ROFF_HEADER_FIELD; *(uint64_t *)(buf + offset + 4) = seqIdx->externalData.rangeEncPos; offset += 12; *(uint32_t *)(buf + offset) = SELE_HEADER_FIELD; *(uint64_t *)(buf + offset + 4) = seqIdx->baseClass.seqLen; offset += 12; *(uint32_t *)(buf + offset) = SPBT_HEADER_FIELD; *(uint32_t *)(buf + offset + 4) = seqIdx->bitsPerUlong; offset += 8; *(uint32_t *)(buf + offset) = VDOB_HEADER_FIELD; *(uint32_t *)(buf + offset + 4) = seqIdx->bitsPerVarDiskOffset; offset += 8; *(uint32_t *)(buf + offset) = SSBT_HEADER_FIELD; *(uint32_t *)(buf + offset + 4) = seqIdx->blockMapAlphabetSize; for (i = 0; i < seqIdx->blockMapAlphabetSize; ++i) *(uint32_t *)(buf + offset + 8 + 4*i) = seqIdx->partialSymSumBits[i]; offset += 8 + 4 * seqIdx->blockMapAlphabetSize; *(uint32_t *)(buf + offset) = BEFB_HEADER_FIELD; *(uint32_t *)(buf + offset + 4) = seqIdx->blockEncFallback; offset += 8; *(uint32_t *)(buf + offset) = REFB_HEADER_FIELD; *(uint32_t *)(buf + offset + 4) = seqIdx->rangeEncFallback; offset += 8; *(uint32_t *)(buf + offset) = NMRN_HEADER_FIELD; *(uint32_t *)(buf + offset + 4) = seqIdx->numModes; offset += 8; for (i = 0; i < seqIdx->numModes; ++i) { *(uint32_t *)(buf + offset) = seqIdx->modes[i]; offset += 4; } if (seqIdx->callBackDataOffsetBits) { *(uint32_t *)(buf + offset) = CBMB_HEADER_FIELD; *(uint32_t *)(buf + offset + 4) = seqIdx->callBackDataOffsetBits; offset += 8; *(uint32_t *)(buf + offset) = CEXB_HEADER_FIELD; *(uint64_t *)(buf + offset + 4) = seqIdx->cwExtBitsPerBucket; offset += 12; *(uint32_t *)(buf + offset) = MEXB_HEADER_FIELD; *(uint64_t *)(buf + offset + 4) = seqIdx->maxVarExtBitsPerBucket; offset += 12; } gt_assert(offset == bufLen); if (fseeko(fp, 0, SEEK_SET)) writeIdxHeaderErrRet(0); gt_xfwrite(buf, bufLen, 1, fp); if (numExtHeaders) { off_t offsetTargetValue = bufLen; if (!writeExtIdxHeader(fp, headerIDs[0], extHeaderSizes[0], extHeaderCallbacks[0], headerCBData[0])) writeIdxHeaderErrRet(0); else appendExtHeaderPos(&seqIdx->extHeaderPos, seqIdx->numExtHeaders++, bufLen + EXT_HEADER_PREFIX_SIZE, EH_HEADER_PREFIX | headerIDs[0]); for (i = 1; i < numExtHeaders; ++i) { offsetTargetValue += EXT_HEADER_PREFIX_SIZE + extHeaderSizes[i - 1]; if (fseeko(fp, offsetTargetValue, SEEK_SET)) writeIdxHeaderErrRet(0); if (!writeExtIdxHeader(fp, headerIDs[i], extHeaderSizes[i], extHeaderCallbacks[i], headerCBData[i])) writeIdxHeaderErrRet(0); else appendExtHeaderPos(&seqIdx->extHeaderPos, seqIdx->numExtHeaders++, offsetTargetValue + EXT_HEADER_PREFIX_SIZE, EH_HEADER_PREFIX | headerIDs[0]); } offset = offsetTargetValue + EXT_HEADER_PREFIX_SIZE + extHeaderSizes[numExtHeaders - 1]; gt_assert(offset >= ftello(fp)); } gt_assert(seqIdx->externalData.cwDataPos == len); gt_free(buf); return len; } #define loadBlockEncIdxSeqErrRet() \ do { \ destructOnDiskBlockCompIdx(&newSeqIdx->externalData); \ if (newSeqIdx->compositionTable.bitsPerCount) \ gt_destructCompositionList(&newSeqIdx->compositionTable); \ if (newSeqIdx->rangeEncs) \ gt_deleteSeqRangeList(newSeqIdx->rangeEncs); \ gt_free(newSeqIdx->extHeaderPos); \ gt_free(newSeqIdx->partialSymSumBits); \ gt_free(buf); \ if (alphabet) gt_MRAEncDelete(alphabet); \ gt_free(modesCopy); \ gt_free(blockMapAlphabet); \ gt_free(rangeMapAlphabet); \ gt_free(newSeqIdx); \ return NULL; \ } while (0) struct encIdxSeq * gt_loadBlockEncIdxSeqGen(MRAEnc *alphabet, const char *projectName, int features, GtError *err) { struct blockCompositionSeq *newSeqIdx = NULL; Symbol blockMapAlphabetSize, GT_UNUSED totalAlphabetSize; MRAEnc *blockMapAlphabet = NULL, *rangeMapAlphabet = NULL; size_t headerLen; int *modesCopy = NULL; char *buf = NULL; gt_assert(projectName && err); newSeqIdx = gt_calloc(sizeof (struct blockCompositionSeq), 1); newSeqIdx->baseClass.alphabet = alphabet; newSeqIdx->baseClass.classInfo = &blockCompositionSeqClass; if (!openOnDiskData(projectName, &newSeqIdx->externalData, "rb",err)) { gt_error_set(err, "error reading data from disk"); loadBlockEncIdxSeqErrRet(); } { size_t offset = HEADER_ID_BLOCK_LEN; buf = gt_malloc(HEADER_ID_BLOCK_LEN); if (fread(buf, HEADER_ID_BLOCK_LEN, 1, newSeqIdx->externalData.idxFP) != 1) { gt_error_set(err, "error reading header id"); loadBlockEncIdxSeqErrRet(); } if (strcmp(buf, bdxHeader)!= 0) { gt_error_set(err, "header is not BDX found %s instead", buf); loadBlockEncIdxSeqErrRet(); } newSeqIdx->externalData.cwDataPos = headerLen = *(uint32_t *)(buf + 4); buf = gt_realloc(buf, headerLen); if (fread(buf + HEADER_ID_BLOCK_LEN, headerLen - HEADER_ID_BLOCK_LEN, 1, newSeqIdx->externalData.idxFP) != 1) { gt_error_set(err, "error reading header"); loadBlockEncIdxSeqErrRet(); } while (offset < headerLen) { uint32_t currentHeader; switch (currentHeader = *(uint32_t *)(buf + offset)) { case SELE_HEADER_FIELD: newSeqIdx->baseClass.seqLen = *(uint64_t *)(buf + offset + 4); offset += 12; break; case BKSZ_HEADER_FIELD: newSeqIdx->blockSize = *(uint32_t *)(buf + offset + 4); offset += 8; break; case BBLK_HEADER_FIELD: newSeqIdx->bucketBlocks = *(uint32_t *)(buf + offset + 4); offset += 8; break; case VOFF_HEADER_FIELD: newSeqIdx->externalData.varDataPos = *(uint64_t *)(buf + offset + 4); offset += 12; break; case ROFF_HEADER_FIELD: newSeqIdx->externalData.rangeEncPos = *(uint64_t *)(buf + offset + 4); offset += 12; break; case NMRN_HEADER_FIELD: { size_t numModes = newSeqIdx->numModes = *(uint32_t *)(buf + (offset += 4)); offset += 4; modesCopy = newSeqIdx->modes = gt_malloc(sizeof (int) * numModes); size_t j; for (j = 0; j < numModes; ++j) { modesCopy[j] = *(uint32_t *)(buf + offset); offset += 4; } } break; case CBMB_HEADER_FIELD: newSeqIdx->callBackDataOffsetBits = *(uint32_t *)(buf + offset + 4); offset += 8; break; case SPBT_HEADER_FIELD: newSeqIdx->bitsPerUlong = *(uint32_t *)(buf + offset + 4); offset += 8; break; case VDOB_HEADER_FIELD: newSeqIdx->bitsPerVarDiskOffset = *(uint32_t *)(buf + offset + 4); offset += 8; break; case SSBT_HEADER_FIELD: { size_t i; Symbol blockMapAlphabetSize = *(uint32_t *)(buf + offset + 4); newSeqIdx->partialSymSumBits = gt_malloc(sizeof (newSeqIdx->partialSymSumBits[0]) * blockMapAlphabetSize * 2); newSeqIdx->partialSymSumBitsSums = newSeqIdx->partialSymSumBits + blockMapAlphabetSize; if (blockMapAlphabetSize) { newSeqIdx->partialSymSumBits[0]= *(uint32_t *)(buf + offset + 8); newSeqIdx->partialSymSumBitsSums[0] = 0; #ifdef EIS_DEBUG gt_log_log("partialSymSumBits[0]=%u\n", newSeqIdx->partialSymSumBits[0]); #endif for (i = 1; i < blockMapAlphabetSize; ++i) { newSeqIdx->partialSymSumBits[i] = *(uint32_t *)(buf + offset + 8 + 4*i); #ifdef EIS_DEBUG gt_log_log("partialSymSumBits[%"PRIuSymbol"]=%u\n", (Symbol)i, newSeqIdx->partialSymSumBits[i]); #endif newSeqIdx->partialSymSumBitsSums[i] = newSeqIdx->partialSymSumBitsSums[i - 1] + newSeqIdx->partialSymSumBits[i - 1]; } newSeqIdx->symSumBits = newSeqIdx->partialSymSumBitsSums[blockMapAlphabetSize - 1] + newSeqIdx->partialSymSumBits[blockMapAlphabetSize - 1]; } offset += 8 + 4 * blockMapAlphabetSize; } case BEFB_HEADER_FIELD: newSeqIdx->blockEncFallback = *(uint32_t *)(buf + offset + 4); offset += 8; break; case REFB_HEADER_FIELD: newSeqIdx->rangeEncFallback = *(uint32_t *)(buf + offset + 4); offset += 8; break; case MEXB_HEADER_FIELD: newSeqIdx->maxVarExtBitsPerBucket = *(uint64_t *)(buf + offset + 4); offset += 12; break; case CEXB_HEADER_FIELD: newSeqIdx->cwExtBitsPerBucket = *(uint64_t *)(buf + offset + 4); offset += 12; break; case 0: /* empty header skip to next portion */ offset = headerLen; break; default: if ((currentHeader & 0xffff0000L) == EH_HEADER_PREFIX) { uint32_t extHeaderLen = *(uint32_t *)(buf + offset + 4); offset += EXT_HEADER_PREFIX_SIZE; appendExtHeaderPos(&newSeqIdx->extHeaderPos, newSeqIdx->numExtHeaders++, offset, currentHeader); offset += extHeaderLen; } else { gt_error_set(err, "Unknown header field: %4s", buf + offset); loadBlockEncIdxSeqErrRet(); } } } gt_assert(newSeqIdx->modes && newSeqIdx->bucketBlocks && newSeqIdx->numModes && offset == headerLen); /* compute values not read from header */ if (!newSeqIdx->bitsPerUlong) newSeqIdx->bitsPerUlong = requiredUlongBits(newSeqIdx->baseClass.seqLen - 1); else if (newSeqIdx->bitsPerUlong != requiredUlongBits(newSeqIdx->baseClass.seqLen - 1)) { gt_error_set(err, "bits per ulong wrong in header found %u, expected %u", newSeqIdx->bitsPerUlong, requiredUlongBits(newSeqIdx->baseClass.seqLen - 1)); loadBlockEncIdxSeqErrRet(); } } { AlphabetRangeID range, numAlphabetRanges = newSeqIdx->numModes = MRAEncGetNumRanges(alphabet); totalAlphabetSize = gt_MRAEncGetSize(alphabet); blockMapAlphabetSize = 0; for (range = 0; range < numAlphabetRanges; ++range) { switch (modesCopy[range]) { case BLOCK_COMPOSITION_INCLUDE: blockMapAlphabetSize += MRAEncGetRangeSize(alphabet, range); break; case DIRECT_SYM_ENCODE: /*< FIXME: insert proper code to process direct encoding regions */ break; case REGIONS_LIST: /*< FIXME: insert proper code to process ranges */ break; default: gt_error_set(err, "Invalid encoding request."); loadBlockEncIdxSeqErrRet(); break; } } newSeqIdx->blockMapAlphabet = blockMapAlphabet = gt_MRAEncSecondaryMapping(alphabet, BLOCK_COMPOSITION_INCLUDE, modesCopy, newSeqIdx->blockEncFallback); newSeqIdx->rangeMapAlphabet = rangeMapAlphabet = gt_MRAEncSecondaryMapping(alphabet, REGIONS_LIST, modesCopy, newSeqIdx->rangeEncFallback); newSeqIdx->blockMapAlphabetSize = blockMapAlphabetSize; gt_assert(gt_MRAEncGetSize(blockMapAlphabet) == blockMapAlphabetSize); } if (!newSeqIdx->partialSymSumBits && blockMapAlphabetSize) { newSeqIdx->partialSymSumBits = gt_malloc(sizeof (newSeqIdx->partialSymSumBits[0]) * blockMapAlphabetSize * 2); newSeqIdx->partialSymSumBitsSums = newSeqIdx->partialSymSumBits + blockMapAlphabetSize; symSumBitsDefaultSetup(newSeqIdx); } if (!gt_initCompositionList(&newSeqIdx->compositionTable, newSeqIdx->blockSize, blockMapAlphabetSize)) { gt_error_set(err, "error initialising composition list"); loadBlockEncIdxSeqErrRet(); } if (newSeqIdx->bitsPerVarDiskOffset == 0) newSeqIdx->bitsPerVarDiskOffset = gt_requiredUInt64Bits( vwBitsSimple(newSeqIdx->baseClass.seqLen, newSeqIdx->blockSize, newSeqIdx->bucketBlocks, newSeqIdx->compositionTable.maxPermIdxBits, newSeqIdx->maxVarExtBitsPerBucket)); if (fseeko(newSeqIdx->externalData.idxFP, newSeqIdx->externalData.rangeEncPos, SEEK_SET)) { gt_error_set(err, "error in fseeko"); loadBlockEncIdxSeqErrRet(); } { int regionFeatures = SRL_NO_FEATURES; if (features & EIS_FEATURE_REGION_SUMS) regionFeatures |= SRL_PARTIAL_SYMBOL_SUMS; if (!(newSeqIdx->rangeEncs = gt_SRLReadFromStream(newSeqIdx->externalData.idxFP, rangeMapAlphabet, regionFeatures, err))) { gt_error_set(err, "error creating rangeEncs"); loadBlockEncIdxSeqErrRet(); } } tryMMapOfIndex(&newSeqIdx->externalData); gt_free(buf); return &newSeqIdx->baseClass; } static inline int tryMMapOfIndex(struct onDiskBlockCompIdx *idxData) { size_t len = idxData->rangeEncPos - idxData->cwDataPos; gt_assert(idxData && idxData->idxFP && idxData->idxMMap == NULL); idxData->idxMMap = gt_fa_mmap_generic_fd(fileno(idxData->idxFP), gt_str_get(idxData->idxFN),len, idxData->cwDataPos, false, false, NULL); return (idxData->idxMMap != NULL ? 0 : 1); } static FILE * seekToHeader(const struct encIdxSeq *seqIdx, uint16_t headerID, uint32_t *lenRet) { const struct blockCompositionSeq *bSeqIdx; size_t i; uint32_t query = headerID | EH_HEADER_PREFIX; gt_assert(seqIdx); bSeqIdx = constEncIdxSeq2blockCompositionSeq(seqIdx); for (i = 0; i < bSeqIdx->numExtHeaders; ++i) { if (bSeqIdx->extHeaderPos[i].headerID == query) { uint32_t headerPrefix[2]; if (lenRet) { if (fseeko(bSeqIdx->externalData.idxFP, bSeqIdx->extHeaderPos[i].pos - EXT_HEADER_PREFIX_SIZE, SEEK_SET)) return NULL; if (fread(headerPrefix, sizeof (headerPrefix[0]), 2, bSeqIdx->externalData.idxFP) != 2) return NULL; *lenRet = headerPrefix[1]; } else if (fseeko(bSeqIdx->externalData.idxFP, bSeqIdx->extHeaderPos[i].pos, SEEK_SET)) return NULL; return bSeqIdx->externalData.idxFP; } } return NULL; } /** * @return 0 on error, 1 on success */ static int finalizeIdxOutput(struct blockCompositionSeq *seqIdx, struct appendState *aState) { off_t rangeEncPos; size_t recordsExpected; gt_assert(aState && seqIdx); gt_assert(aState->cwMemOldBits < bitElemBits && aState->cwMemOldBits + cwPreCompIdxBits(seqIdx) == aState->cwMemPos); gt_assert(aState->varMemOldBits < bitElemBits && aState->varMemOldBits == aState->varMemPos); if (aState->cwMemOldBits) { /* seek2/write variable width indices */ if (fseeko(seqIdx->externalData.idxFP, seqIdx->externalData.cwDataPos + aState->cwDiskOffset * sizeof (BitElem), SEEK_SET)) return 0; recordsExpected = 1; gt_xfwrite(aState->compCache, sizeof (BitElem), recordsExpected, seqIdx->externalData.idxFP); ++(aState->cwDiskOffset); } if (aState->varMemOldBits) { /* seek2/write variable width indices */ if (fseeko(seqIdx->externalData.idxFP, seqIdx->externalData.varDataPos + aState->varDiskOffset/bitElemBits * sizeof (BitElem), SEEK_SET)) return 0; recordsExpected = 1; gt_xfwrite(aState->permCache, sizeof (BitElem), recordsExpected, seqIdx->externalData.idxFP); } rangeEncPos = seqIdx->externalData.varDataPos + aState->varDiskOffset / bitElemBits * sizeof (BitElem) + ((aState->varDiskOffset%bitElemBits)?sizeof (BitElem):0); seqIdx->externalData.rangeEncPos = rangeEncPos; /* insert terminator so every search for a next range will find a * range just beyond the sequence end */ gt_SRLAppendNewRange(seqIdx->rangeEncs, seqIdx->baseClass.seqLen + seqIdx->blockSize, 1, 0); gt_SRLCompact(seqIdx->rangeEncs); if (fseeko(seqIdx->externalData.idxFP, rangeEncPos, SEEK_SET)) return 0; if (!(gt_SRLSaveToStream(seqIdx->rangeEncs, seqIdx->externalData.idxFP))) return 0; return 1; } static void addRangeEncodedSyms(struct seqRangeList *rangeList, const Symbol *block, unsigned blockSize, unsigned long blockNum, const MRAEnc *alphabet, int selection, const int *rangeSel) { unsigned i; for (i = 0; i < blockSize; ++i) { gt_assert(gt_MRAEncSymbolIsInSelectedRanges(alphabet, block[i], selection, rangeSel) >= 0); if (gt_MRAEncSymbolIsInSelectedRanges(alphabet, block[i], selection, rangeSel)) { gt_SRLAddPosition(rangeList, blockNum * blockSize + i, block[i]); } } } static union EISHint * newBlockCompSeqHint(const struct encIdxSeq *seq) { union EISHint *hintret; const struct blockCompositionSeq *seqIdx; gt_assert(seq && seq->classInfo == &blockCompositionSeqClass); seqIdx = constEncIdxSeq2blockCompositionSeq(seq); hintret = gt_malloc(sizeof (union EISHint)); gt_SRLInitListSearchHint(seqIdx->rangeEncs, &hintret->bcHint.rangeHint); /* FIXME: make cache size user-configurable */ initSuperBlockSeqCache(&hintret->bcHint.sBlockCache, seqIdx, 32); return hintret; } static void deleteBlockCompSeqHint(struct encIdxSeq *seq, union EISHint *hint) { GT_UNUSED struct blockCompositionSeq *seqIdx; gt_assert(seq && seq->classInfo == &blockCompositionSeqClass); seqIdx = encIdxSeq2blockCompositionSeq(seq); destructSuperBlockSeqCache(&hint->bcHint.sBlockCache); gt_free(hint); } static int printBlock(Symbol *block, unsigned blockSize, FILE *fp) { unsigned i; int outCount = 0; for (i = 0; i < blockSize; ++i) outCount += fprintf(fp, " %d", (int)block[i]); return outCount; } enum { BUCKET_PLAIN = 0, BUCKET_PRINT_BITSTRING = 1 << 0, BUCKET_PRINT_BITSTRING_SEPARATOR = 1 << 1, BUCKET_PRINT_BITSIZES = 1 << 2, BUCKET_PRINT_RANGES_OVERLAY = 1 << 3, }; static int printBucket(const struct blockCompositionSeq *seqIdx, unsigned long bucketNum, int flags, FILE *fp, union EISHint *hint) { unsigned long lastBucket = bucketNumFromPos(seqIdx, EISLength(&seqIdx->baseClass)), start, end; AlphabetRangeSize i, blockMapAlphabetSize = seqIdx->blockMapAlphabetSize; int outCount = 0; gt_assert(seqIdx && fp && hint); if (bucketBasePos(seqIdx, bucketNum) >= EISLength(&seqIdx->baseClass)) { gt_log_log("warning: querying bucket %lu" " beyond end of sequence!\n", bucketNum); bucketNum = lastBucket; } start = bucketBasePos(seqIdx, bucketNum); end = ((bucketNum < lastBucket)? bucketBasePos(seqIdx, bucketNum + 1): EISLength(&seqIdx->baseClass)); outCount += fprintf(fp, "# Inspecting bucket: %lu\n" "# bucket position start=%lu, end=%lu\n" "# partial symbol sums up to start:\n", bucketNum, start, end - 1); { struct superBlock *sBlock; BitOffset varDataMemOffset, cwIdxMemOffset, varIdxOffset; Symbol *block; unsigned blockSize = seqIdx->blockSize, idxBits = seqIdx->compositionTable.compositionIdxBits; #ifdef USE_SBLOCK_CACHE sBlock = cacheFetchSuperBlock(seqIdx, bucketNum, &hint->bcHint.sBlockCache); #else sBlock = fetchSuperBlock(seqIdx, bucketNum, NULL); #endif block = gt_malloc(sizeof (block[0]) * seqIdx->blockSize); for (i = 0; i < blockMapAlphabetSize; ++i) { if (flags & BUCKET_PRINT_BITSIZES) { outCount += fprintf(fp, "# partial sum[%u] bits: %u\n", i, seqIdx->partialSymSumBits[i]); } outCount += fprintf(fp, "# partial sum[%u]=%lu\n", i, sBlockGetPartialSymSum(sBlock, i, seqIdx)); } if (flags & BUCKET_PRINT_BITSIZES) { fprintf(fp, "# bit size of sBlockVarIdxOffset: %u\n", seqIdx->bitsPerVarDiskOffset); } fprintf(fp, "# sBlockVarIdxOffset=%llu\n", (varIdxOffset = sBlockGetVarIdxOffset(sBlock, seqIdx))); if (seqIdx->callBackDataOffsetBits) fprintf(fp, "# sBlockGetcbOffset=%llu\n", sBlockGetcbOffset(sBlock, seqIdx)); i = 0; if (flags & BUCKET_PRINT_BITSIZES) { fprintf(fp, "# bits of constant width extension data: %llu\n", (unsigned long long)seqIdx->cwExtBitsPerBucket); } walkCompIndicesPrefix( seqIdx, sBlock, seqIdx->bucketBlocks, cwIdxMemOffset, outCount += fprintf( fp, "# block %u: comp idx: %lu, permIdxBits=%u, perm idx: %lu =>", i, (unsigned long)compIndex, (unsigned)seqIdx->compositionTable.permutations[compIndex].permIdxBits, (unsigned long)gt_bsGetPermCompIndex( sBlock->varData, varDataMemOffset, seqIdx->compositionTable.permutations[compIndex].permIdxBits)); unpackBlock(seqIdx, sBlock, cwIdxMemOffset, varDataMemOffset, block, blockSize); outCount += printBlock(block, blockSize, fp); fputs("\n", fp); i++; , varDataMemOffset); gt_free(block); if (flags & BUCKET_PRINT_BITSTRING) { for (i = 0; i < blockMapAlphabetSize; ++i) { if (gt_bsPrint(fp, sBlock->cwData, seqIdx->partialSymSumBitsSums[i] + sBlock->cwIdxMemBase, seqIdx->partialSymSumBits[i])) outCount += seqIdx->partialSymSumBits[i]; if (flags & BUCKET_PRINT_BITSTRING_SEPARATOR) outCount += fputs("&", fp); } gt_bsPrint(fp, sBlock->cwData, cwPreVarIdxBits(seqIdx) + sBlock->cwIdxMemBase, seqIdx->bitsPerVarDiskOffset); if (flags & BUCKET_PRINT_BITSTRING_SEPARATOR) outCount += fputs("&", fp); if (seqIdx->callBackDataOffsetBits) { gt_bsPrint(fp, sBlock->cwData, sBlockGetcbOffsetOffset(sBlock, seqIdx), seqIdx->callBackDataOffsetBits); if (flags & BUCKET_PRINT_BITSTRING_SEPARATOR) outCount += fputs("&", fp); } walkCompIndicesPrefix( seqIdx, sBlock, seqIdx->bucketBlocks, cwIdxMemOffset, gt_bsPrint(fp, sBlock->cwData, cwIdxMemOffset, idxBits); if (flags & BUCKET_PRINT_BITSTRING_SEPARATOR) outCount += fputs("&", fp);, varDataMemOffset); gt_bsPrint(fp, sBlock->cwData, sBlockCWExtBitsOffset(sBlock, seqIdx), seqIdx->cwExtBitsPerBucket); fputs("\n# variable width string: \n", fp); walkCompIndicesPrefix( seqIdx, sBlock, seqIdx->bucketBlocks, cwIdxMemOffset, idxBits = seqIdx->compositionTable.permutations[compIndex].permIdxBits; gt_bsPrint(fp, sBlock->varData, varDataMemOffset, idxBits); if (flags & BUCKET_PRINT_BITSTRING_SEPARATOR) outCount += fputs("&", fp);, varDataMemOffset); if (bucketNum != lastBucket) { struct superBlock *nextSBlock; BitOffset nextVarIdxOffset; #ifdef USE_SBLOCK_CACHE nextSBlock = cacheFetchSuperBlock(seqIdx, bucketNum + 1, &hint->bcHint.sBlockCache); #else nextSBlock = fetchSuperBlock(seqIdx, bucketNum + 1, NULL); #endif nextVarIdxOffset = sBlockGetVarIdxOffset(nextSBlock, seqIdx); gt_bsPrint(fp, sBlock->varData, varDataMemOffset, nextVarIdxOffset - varIdxOffset); fprintf(fp, "\n# varIdxOffset for next block: %llu", (unsigned long long)nextVarIdxOffset); #ifndef USE_SBLOCK_CACHE deleteSuperBlock(sBlock); #endif } fputs("\n", fp); } if (flags & BUCKET_PRINT_RANGES_OVERLAY) { fputs("# overlapping symbol ranges:\n", fp); gt_SRLPrintRangesInfo(seqIdx->rangeEncs, fp, start, end - start, &hint->bcHint.rangeHint); } } return outCount; } unsigned gt_blockEncIdxSeqSegmentLen(const struct blockEncParams *params) { return params->blockSize * params->bucketBlocks; } static int printBlockEncPosDiags(const EISeq *seq, unsigned long pos, FILE *fp, EISHint hint) { const struct blockCompositionSeq *seqIdx; int outCount = 0; unsigned long bucketNum; gt_assert(seq && seq->classInfo == &blockCompositionSeqClass); seqIdx = constEncIdxSeq2blockCompositionSeq(seq); bucketNum = bucketNumFromPos(seqIdx, pos); fputs("##################################################\n" "# This bucket:\n" "##################################################\n", fp); outCount += printBucket(seqIdx, bucketNum, BUCKET_PLAIN, fp, hint); if (bucketNum) { fputs("##################################################\n" "# Previous bucket:\n" "##################################################\n", fp); outCount += printBucket(seqIdx, bucketNum - 1, BUCKET_PLAIN, fp, hint); } if (bucketNum < bucketNumFromPos(seqIdx, EISLength(seq))) { fputs("##################################################\n" "# Next bucket:\n" "##################################################\n", fp); outCount += printBucket(seqIdx, bucketNum + 1, BUCKET_PLAIN, fp, hint); } return outCount; } static int displayBlockEncBlock(const EISeq *seq, unsigned long pos, FILE *fp, EISHint hint) { const struct blockCompositionSeq *seqIdx; int outCount; unsigned long bucketNum; gt_assert(seq && seq->classInfo == &blockCompositionSeqClass); seqIdx = constEncIdxSeq2blockCompositionSeq(seq); bucketNum = bucketNumFromPos(seqIdx, pos); outCount = printBucket(seqIdx, bucketNum, BUCKET_PRINT_BITSTRING_SEPARATOR | BUCKET_PRINT_BITSTRING | BUCKET_PRINT_BITSIZES | BUCKET_PRINT_RANGES_OVERLAY, fp, hint); return outCount; } static const struct encIdxSeqClass blockCompositionSeqClass = { .delete = deleteBlockEncIdxSeq, .rank = blockCompSeqRank, .posPairRank = blockCompSeqPosPairRank, .rangeRank = blockCompSeqRangeRank, .posPairRangeRank = blockCompSeqPosPairRangeRank, .select = blockCompSeqSelect, .get = blockCompSeqGet, .newHint = newBlockCompSeqHint, .deleteHint = deleteBlockCompSeqHint, .expose = blockCompSeqExpose, .seekToHeader = seekToHeader, .printPosDiags = printBlockEncPosDiags, .printExtPosDiags = displayBlockEncBlock, }; genometools-1.5.1/src/match/eis-bwtseq-construct.c000066400000000000000000000222541211610345200222050ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq_metadata.h" #include "core/log.h" #include "match/sarr-def.h" #include "match/esa-map.h" #include "match/eis-bitpackseqpos.h" #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-construct.h" #include "match/eis-bwtseq-extinfo.h" #include "match/eis-bwtseq-param.h" #include "match/eis-bwtseq-priv.h" #include "match/eis-encidxseq.h" #include "match/eis-encidxseq-construct.h" BWTSeq * gt_availBWTSeq(const struct bwtParam *params, GtLogger *verbosity, GtError *err) { struct BWTSeq *bwtSeq = NULL; Suffixarray suffixArray; unsigned long len; gt_assert(params && err); gt_error_check(err); if (streamsuffixarray(&suffixArray, SARR_SUFTAB | SARR_BWTTAB | SARR_ESQTAB, gt_str_get(params->projectName), verbosity, err)) { gt_error_unset(err); if (streamsuffixarray(&suffixArray, SARR_SUFTAB | SARR_ESQTAB, gt_str_get(params->projectName), verbosity, err)) { GtEncseqMetadata *emd = NULL; gt_error_unset(err); emd = gt_encseq_metadata_new(gt_str_get(params->projectName), err); if (emd == NULL) return NULL; len = gt_encseq_metadata_total_length(emd); gt_encseq_metadata_delete(emd); } else { len = gt_encseq_total_length(suffixArray.encseq) + 1; } } else { len = gt_encseq_total_length(suffixArray.encseq) + 1; } bwtSeq = gt_availBWTSeqFromSA(params, &suffixArray, len, err); gt_freesuffixarray(&suffixArray); return bwtSeq; } BWTSeq * gt_trSuftab2BWTSeq(const struct bwtParam *params, GtLogger *verbosity, GtError *err) { struct BWTSeq *bwtSeq = NULL; Suffixarray suffixArray; unsigned long len; gt_assert(params && err); gt_error_check(err); do { if (streamsuffixarray(&suffixArray, SARR_SUFTAB | SARR_BWTTAB | SARR_ESQTAB, gt_str_get(params->projectName), verbosity, err)) { gt_error_unset(err); if (streamsuffixarray(&suffixArray, SARR_SUFTAB | SARR_ESQTAB, gt_str_get(params->projectName), verbosity, err)) { gt_error_set(err, "suffix array project %s does not hold required " "suffix array (.suf) and encoded sequence (.esq) " "information!", gt_str_get(params->projectName)); break; } } len = gt_encseq_total_length(suffixArray.encseq) + 1; bwtSeq = gt_createBWTSeqFromSA(params, &suffixArray, len, err); gt_freesuffixarray(&suffixArray); } while (0); return bwtSeq; } BWTSeq * gt_availBWTSeqFromSA(const struct bwtParam *params, Suffixarray *sa, unsigned long totalLen, GtError *err) { BWTSeq *bwtSeq; gt_assert(sa && params && err); gt_error_check(err); /* try loading index */ bwtSeq = gt_loadBWTSeqForSA(gt_str_get(params->projectName), params->seqParams.encType, params->seqParams.EISFeatureSet, gt_encseq_alphabet(sa->encseq), err); /* if loading didn't work try on-demand creation */ if (!bwtSeq) { gt_error_unset(err); bwtSeq = gt_createBWTSeqFromSA(params, sa, totalLen, err); } else { fputs("Using pre-computed sequence index.\n", stderr); } return bwtSeq; } enum { GT_ALPHABETHANDLING_DEFAULT = 0, GT_ALPHABETHANDLING_W_RANK = 1, }; static const enum rangeSortMode GTAlphabetRangeSort[][2] = { { SORTMODE_VALUE, SORTMODE_UNDEFINED }, { SORTMODE_VALUE, SORTMODE_RANK } }; BWTSeq * gt_loadBWTSeq(const char *projectName, int BWTOptFlags, GT_UNUSED GtLogger *verbosity, GtError *err) { struct BWTSeq *bwtSeq = NULL; GtEncseq *encseq; GtEncseqLoader *el; gt_assert(projectName && err); gt_error_check(err); el = gt_encseq_loader_new(); gt_encseq_loader_do_not_require_sds_tab(el); gt_encseq_loader_do_not_require_des_tab(el); gt_encseq_loader_do_not_require_ssp_tab(el); encseq = gt_encseq_loader_load(el, projectName, err); gt_encseq_loader_delete(el); if (encseq == NULL) return NULL; bwtSeq = gt_loadBWTSeqForSA(projectName, BWT_ON_BLOCK_ENC, BWTOptFlags, gt_encseq_alphabet(encseq), err); gt_encseq_delete(encseq); return bwtSeq; } BWTSeq * gt_loadBWTSeqForSA(const char *projectName, enum seqBaseEncoding encType, int BWTOptFlags, const GtAlphabet *gtalphabet, GtError *err) { struct BWTSeq *bwtSeq = NULL; EISeq *seqIdx = NULL; MRAEnc *alphabet = NULL; gt_assert(projectName && gtalphabet && err); alphabet = gt_SANewMRAEnc(gtalphabet); seqIdx = gt_loadEncIdxSeqForSA(gtalphabet, projectName, encType, gt_convertBWTOptFlags2EISFeatures(BWTOptFlags), err); if (seqIdx != NULL) { bwtSeq = gt_newBWTSeq(seqIdx, alphabet, GTAlphabetRangeSort[GT_ALPHABETHANDLING_DEFAULT]); } if (!bwtSeq) { gt_MRAEncDelete(alphabet); if (seqIdx) { gt_deleteEncIdxSeq(seqIdx); } } return bwtSeq; } BWTSeq * gt_createBWTSeqFromSA(const struct bwtParam *params, Suffixarray *sa, unsigned long totalLen, GtError *err) { BWTSeq *bwtSeq = NULL; if (!sa->longest.defined) { gt_log_log("error: position of null-rotation/longest suffix not available" " for project %s\n", gt_str_get(params->projectName)); } else { SuffixarrayFileInterface sai; gt_initSuffixarrayFileInterface(&sai, totalLen, sa); bwtSeq = gt_createBWTSeqFromSAI(params, &sai, err); gt_destructSuffixarrayFileInterface(&sai); } return bwtSeq; } static inline void buildSpRTable(const struct bwtParam *params, unsigned long totalLen, const GtEncseq *encseq, GtReadmode readmode, SpecialsRankLookup **sprTable, const enum rangeSortMode **rangeSort) { if (params->featureToggles & BWTReversiblySorted) { int sampleIntervalLog2 = params->sourceRankInterval; if (sampleIntervalLog2 == -1) { sampleIntervalLog2 = gt_requiredUIntBits(requiredUlongBits(totalLen)); } *sprTable = gt_newSpecialsRankLookup(encseq, readmode, sampleIntervalLog2); } *rangeSort = GTAlphabetRangeSort[sprTable? GT_ALPHABETHANDLING_W_RANK: GT_ALPHABETHANDLING_DEFAULT]; } static BWTSeq * gt_createBWTSeqFromSASS(const struct bwtParam *params, SASeqSrc *src, SpecialsRankLookup *sprTable, const enum rangeSortMode *rangeSort, GtError *err); BWTSeq * gt_createBWTSeqFromSAI(const struct bwtParam *params, SuffixarrayFileInterface *sai, GtError *err) { BWTSeq *bwtSeq; SpecialsRankLookup *sprTable = NULL; const enum rangeSortMode *rangeSort; gt_assert(sai && err && params); buildSpRTable(params, SAIGetLength(sai), SAIGetEncSeq(sai), SAIGetGtReadmode(sai), &sprTable, &rangeSort); bwtSeq = gt_createBWTSeqFromSASS(params, SAI2SASS(sai), sprTable, rangeSort, err); if (sprTable) gt_deleteSpecialsRankLookup(sprTable); return bwtSeq; } BWTSeq * gt_createBWTSeqFromSfxI(const struct bwtParam *params, sfxInterface *sfxi, GtError *err) { BWTSeq *bwtSeq; SpecialsRankLookup *sprTable = NULL; const enum rangeSortMode *rangeSort; gt_assert(sfxi && params && err); buildSpRTable(params, gt_SfxIGetLength(sfxi), gt_SfxIGetEncSeq(sfxi), gt_SfxIGetReadmode(sfxi), &sprTable, &rangeSort); bwtSeq = gt_createBWTSeqFromSASS(params, gt_SfxI2SASS(sfxi), sprTable, rangeSort, err); if (sprTable) gt_deleteSpecialsRankLookup(sprTable); return bwtSeq; } static BWTSeq * gt_createBWTSeqFromSASS(const struct bwtParam *params, SASeqSrc *src, SpecialsRankLookup *sprTable, const enum rangeSortMode *rangeSort, GtError *err) { EISeq *seqIdx = NULL; BWTSeq *bwtSeq = NULL; seqIdx = gt_createBWTSeqGeneric(params, gt_createEncIdxSeqGen, src, rangeSort, sprTable, err); if (seqIdx) { MRAEnc *alphabet = SASSNewMRAEnc(src); bwtSeq = gt_newBWTSeq(seqIdx, alphabet, rangeSort); if (!bwtSeq) { gt_deleteEncIdxSeq(seqIdx); gt_MRAEncDelete(alphabet); } } return bwtSeq; } genometools-1.5.1/src/match/eis-bwtseq-construct.h000066400000000000000000000077411211610345200222160ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_CONSTRUCT_H #define EIS_BWTSEQ_CONSTRUCT_H /** * \file eis-bwtseq-construct.h * Interface definitions for construction of an indexed representation of the * BWT of a sequence as presented by Manzini and Ferragina (Compressed * Representations of Sequences and Full-Text Indexes, 2006) * \author Thomas Jahns */ #include "match/sarr-def.h" #include "match/eis-bwtseq.h" #include "match/eis-suffixerator-interface.h" #include "match/eis-suffixarray-interface.h" /** * \brief Loads (or creates if necessary) an encoded indexed sequence * object of the BWT transform. * @param params a struct holding parameter information for index construction * @param sa Suffixarray data structure to build BWT index from * @param totalLen length of sorted sequence (including terminator) * @param err genometools error object reference * @return reference to new BWT sequence object */ BWTSeq * gt_availBWTSeqFromSA(const struct bwtParam *params, Suffixarray *sa, unsigned long totalLen, GtError *err); /** * \brief Loads an encoded indexed sequence object of the * BWT transform. * @param params a struct holding parameter information for index construction * @param sa Suffixarray data structure to build BWT index from * @param totalLen length of BWT sequence (including terminator symbol) * @param err genometools error object reference * @return reference to new BWT sequence object */ BWTSeq * gt_loadBWTSeqForSA(const char *projectName, enum seqBaseEncoding encType, int BWTOptFlags, const GtAlphabet *gtalphabet, GtError *err); /** * \brief Creates an encoded indexed sequence object of the BWT transform. * @param params a struct holding parameter information for index construction * @param si Suffixerator interface to read data for BWT index from * @param totalLen length of BWT sequence (including terminator symbol) * @param err genometools reference for core functions * @return reference to new BWT sequence object */ BWTSeq * gt_createBWTSeqFromSfxI(const struct bwtParam *params, sfxInterface *si, GtError *err); /** * \brief Creates or loads an encoded indexed sequence object of the * BWT transform. * @param params a struct holding parameter information for index construction * @param sa suffix array to read data for BWT index from * @param totalLen length of BWT sequence (including terminator symbol) * @param err genometools reference for core functions * @return reference to new BWT sequence object */ BWTSeq * gt_createBWTSeqFromSA(const struct bwtParam *params, Suffixarray *sa, unsigned long totalLen, GtError *err); /** * \brief Creates or loads an encoded indexed sequence object of the * BWT transform. * @param params a struct holding parameter information for index construction * @param sai interface to suffix array to read data for BWT index from * @param totalLen length of BWT sequence (including terminator symbol) * @param err genometools reference for core functions * @return reference to new BWT sequence object */ BWTSeq * gt_createBWTSeqFromSAI(const struct bwtParam *params, SuffixarrayFileInterface *sai, GtError *err); #endif genometools-1.5.1/src/match/eis-bwtseq-context-param.c000066400000000000000000000026211211610345200227370ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/option_api.h" #include "match/eis-bwtseq-context-param.h" void gt_registerCtxMapOptions(GtOptionParser *op, int *ilogOut) { GtOption *option = gt_option_new_int_min_max( "ctxilog", "specify the interval of context sampling as log value\n" "parameter i means that each 2^i-th position of source is sampled for " "rank\n-1 => chooses default of log(log(sequence length))\n" "-2 => generates no map", ilogOut, CTX_MAP_ILOG_NOMAP, CTX_MAP_ILOG_AUTOSIZE, sizeof (unsigned long) * CHAR_BIT - 1); gt_option_parser_add_option(op, option); } genometools-1.5.1/src/match/eis-bwtseq-context-param.h000066400000000000000000000030021211610345200227360ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_CONTEXT_PARAM_H #define EIS_BWTSEQ_CONTEXT_PARAM_H #include #include "core/minmax.h" #include "core/option_api.h" /* #include "core/bitpackstring.h" Not necessary. Stefan */ #include "match/eis-bitpackseqpos.h" enum ctxMapSize { CTX_MAP_ILOG_NOMAP = -2, CTX_MAP_ILOG_AUTOSIZE = -1, }; void gt_registerCtxMapOptions(GtOptionParser *op, int *ilogOut); static inline bool ctxMapILogIsValid(unsigned long seqLen, short mapIntervalLog2) { return (mapIntervalLog2 == CTX_MAP_ILOG_NOMAP || mapIntervalLog2 == CTX_MAP_ILOG_AUTOSIZE || (mapIntervalLog2 >= 0 && mapIntervalLog2 < MIN(requiredUlongBits(seqLen), sizeof (unsigned long) * CHAR_BIT))); } #endif genometools-1.5.1/src/match/eis-bwtseq-context-priv.h000066400000000000000000000026141211610345200226260ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_CONTEXT_PRIV_H #define EIS_BWTSEQ_CONTEXT_PRIV_H #include "match/eis-bwtseq-context.h" struct BWTSeqContextRetriever { unsigned long mapInterval, mapMask; const BWTSeq *bwtSeq; BitString revMapMMap, /**< holds the page aligned result * from mmap, later used in munmap */ revMap; /**< maps positions in the original * sequence to positions in the BWT */ uint16_t mapIntervalLog2; uint16_t bitsPerUlong; }; static inline unsigned long numMapEntries(unsigned long seqLen, unsigned short mapIntervalLog2); #endif genometools-1.5.1/src/match/eis-bwtseq-context-siop.h000066400000000000000000000037571211610345200226310ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_CONTEXT_SIOP_H #define EIS_BWTSEQ_CONTEXT_SIOP_H #include #ifndef S_SPLINT_S #include #endif #include "match/eis-bitpackseqpos.h" #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-context.h" #include "match/eis-bwtseq-context-priv.h" #include "match/eis-encidxseq.h" static inline unsigned long numMapEntries(unsigned long seqLen, unsigned short mapIntervalLog2) { return (seqLen + (1<> mapIntervalLog2; } static inline struct SeqMark BWTSeqCRNextMark(const BWTSeqContextRetriever *bwtSeqCR, unsigned long pos) { unsigned long seqLen, mapMask; struct SeqMark nextMark; gt_assert(bwtSeqCR); seqLen = BWTSeqLength(bwtSeqCR->bwtSeq); gt_assert(pos < seqLen); mapMask = bwtSeqCR->mapMask; /* rounds up to next multiple of mapInterval */ nextMark.textPos = (pos + mapMask) & ~mapMask; if (nextMark.textPos < seqLen) { nextMark.bwtPos = gt_bsGetUlong(bwtSeqCR->revMap, (nextMark.textPos >> bwtSeqCR->mapIntervalLog2) * bwtSeqCR->bitsPerUlong, bwtSeqCR->bitsPerUlong); } else { nextMark.textPos = seqLen - 1; nextMark.bwtPos = BWTSeqTerminatorPos(bwtSeqCR->bwtSeq); } return nextMark; } #endif genometools-1.5.1/src/match/eis-bwtseq-context.c000066400000000000000000000321071211610345200216430ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include #include "core/bitpackstring.h" #include "match/dataalign.h" #include "core/fa.h" #include "core/str.h" #include "core/xansi_api.h" #include "match/eis-bitpackseqpos.h" #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-context.h" #include "match/eis-bwtseq-context-priv.h" #include "match/eis-seqdatasrc.h" struct BWTSeqContextRetrieverFactory { unsigned long seqLen, currentSfxPos, moduloMask; bool constructionComplete; unsigned short mapIntervalLog2; FILE *mapTableDiskBackingStore; GtStr *mapTableDBSPath; }; #define die(msg) die_func(msg, __FILE__, __LINE__) static inline void die_func(const char *errMsg, const char *file, int line) { fprintf(stderr, "error: %s: %s at %s, line %d", errMsg, strerror(errno), file, line); exit(GT_EXIT_PROGRAMMING_ERROR); } enum { BLOCK_IO_SIZE = BUFSIZ / sizeof (unsigned long), }; static void initBWTSeqContextRetrieverFactory(BWTSeqContextRetrieverFactory *newFactory, unsigned long seqLen, short mapIntervalLog2) { FILE *fp; gt_assert(ctxMapILogIsValid(seqLen, mapIntervalLog2)); if (mapIntervalLog2 == CTX_MAP_ILOG_AUTOSIZE) { mapIntervalLog2 = gt_requiredUIntBits(requiredUlongBits(seqLen)); } newFactory->seqLen = seqLen; newFactory->currentSfxPos = 0; newFactory->moduloMask = (1 << mapIntervalLog2) - 1; newFactory->mapIntervalLog2 = mapIntervalLog2; newFactory->constructionComplete = false; newFactory->mapTableDBSPath = gt_str_new(); fp = newFactory->mapTableDiskBackingStore = gt_xtmpfp_generic(newFactory->mapTableDBSPath, TMPFP_AUTOREMOVE | TMPFP_OPENBINARY); { off_t backingStoreSize = numMapEntries(seqLen, mapIntervalLog2), i; unsigned long buf[BLOCK_IO_SIZE]; memset(buf, 0, sizeof (buf)); for (i = BLOCK_IO_SIZE; i < backingStoreSize; i += BLOCK_IO_SIZE) { gt_xfwrite(buf, sizeof (buf[0]), BLOCK_IO_SIZE, fp); } { unsigned leftOver = backingStoreSize % BLOCK_IO_SIZE; if (leftOver > 0) { gt_xfwrite(buf, sizeof (buf[0]), leftOver, fp); } } } } BWTSeqContextRetrieverFactory * gt_newBWTSeqContextRetrieverFactory(unsigned long seqLen, short mapIntervalLog2) { BWTSeqContextRetrieverFactory *newFactory; newFactory = gt_malloc(sizeof (*newFactory)); initBWTSeqContextRetrieverFactory(newFactory, seqLen, mapIntervalLog2); return newFactory; } static void destructBWTSeqContextRetrieverFactory(BWTSeqContextRetrieverFactory *factory) { gt_fa_xfclose(factory->mapTableDiskBackingStore); gt_str_delete(factory->mapTableDBSPath); } void gt_deleteBWTSeqContextRetrieverFactory(BWTSeqContextRetrieverFactory *factory) { destructBWTSeqContextRetrieverFactory(factory); gt_free(factory); } static inline void addMapVal(BWTSeqContextRetrieverFactory *factory, unsigned long currentSfxPos, unsigned long origPos) { off_t mapPos = ((off_t)origPos >> factory->mapIntervalLog2) * sizeof (unsigned long); unsigned long mapVal = currentSfxPos; FILE *fp = factory->mapTableDiskBackingStore; if (fseeko(fp, mapPos, SEEK_SET) == -1) die("failed to seek in backing store"); gt_xfwrite(&mapVal, sizeof (mapVal), 1, fp); } /** * @return number of not processed suffix indices, i.e. 0 on success */ unsigned long gt_BWTSCRFReadAdvance(BWTSeqContextRetrieverFactory *factory, unsigned long chunkSize, SeqDataReader readSfxIdx) { unsigned long buf[BLOCK_IO_SIZE], sfxIdxLeft = chunkSize; gt_assert(factory); while (sfxIdxLeft) { unsigned long len = MIN(BLOCK_IO_SIZE, sfxIdxLeft); if (SDRRead(readSfxIdx, buf, len) != len) { fputs("error: short read when building context retriever!\n", stderr); abort(); } gt_BWTSCRFMapAdvance(factory, buf, len); sfxIdxLeft -= len; } return chunkSize - sfxIdxLeft; } size_t gt_BWTSCRFMapAdvance(BWTSeqContextRetrieverFactory *factory, const unsigned long *src, size_t len) { unsigned long currentSfxPos; gt_assert(factory); currentSfxPos = factory->currentSfxPos; { size_t i; unsigned long mask = factory->moduloMask, seqLen = factory->seqLen; for (i = 0; i < len; ++i) { if (!(((src[i] + seqLen - 1)%seqLen) & mask)) addMapVal(factory, currentSfxPos + i, ((src[i] + seqLen - 1)%seqLen)); } } factory->currentSfxPos = currentSfxPos + len; return len; } bool gt_BWTSCRFFinished(const BWTSeqContextRetrieverFactory *factory) { return factory->currentSfxPos == factory->seqLen; } static inline void readBS2Map(BWTSeqContextRetrieverFactory *factory, BWTSeqContextRetriever *gt_newBWTSeqCR); static inline bool BWTSeqCRMapOpen(unsigned short mapIntervalLog2, unsigned short bitsPerUlong, unsigned long seqLen, const char *projectName, bool createMapFile, BWTSeqContextRetriever *gt_newBWTSeqCR); BWTSeqContextRetriever * gt_BWTSCRFGet(BWTSeqContextRetrieverFactory *factory, const BWTSeq *bwtSeq, const char *projectName) { unsigned short bitsPerUlong, mapIntervalLog2; BWTSeqContextRetriever *gt_newBWTSeqCR; gt_assert(factory && projectName); bitsPerUlong = requiredUlongBits(factory->seqLen - 1); gt_newBWTSeqCR = gt_malloc(sizeof (*gt_newBWTSeqCR)); gt_newBWTSeqCR->mapIntervalLog2 = mapIntervalLog2 = factory->mapIntervalLog2; gt_newBWTSeqCR->bitsPerUlong = bitsPerUlong; gt_newBWTSeqCR->bwtSeq = bwtSeq; gt_newBWTSeqCR->mapInterval = 1 << factory->mapIntervalLog2; gt_newBWTSeqCR->mapMask = gt_newBWTSeqCR->mapInterval - 1; if (!BWTSeqCRMapOpen(mapIntervalLog2, bitsPerUlong, factory->seqLen, projectName, true, gt_newBWTSeqCR)) { gt_free(gt_newBWTSeqCR); return NULL; } readBS2Map(factory, gt_newBWTSeqCR); return gt_newBWTSeqCR; } static inline void readBlock2Buf(FILE *fp, unsigned long *buf, size_t len, BitString bitstring, BitOffset offset, unsigned short bitsPerUlong) { if (fread(buf, sizeof (buf[0]), len, fp) != len) die("short read when reading backing store"); gt_bsStoreUniformUlongArray(bitstring, offset, bitsPerUlong, len, #ifdef _LP64 (uint64_t*) buf); #else (uint32_t*) buf); #endif } static inline void readBS2Map(BWTSeqContextRetrieverFactory *factory, BWTSeqContextRetriever *gt_newBWTSeqCR) { FILE *fp = factory->mapTableDiskBackingStore; unsigned long buf[BLOCK_IO_SIZE]; off_t i, numFullBlocks, lastBlockLen; BitString revMap = gt_newBWTSeqCR->revMap; BitOffset storePos = 0; unsigned bitsPerUlong = gt_newBWTSeqCR->bitsPerUlong; { off_t numEntries = numMapEntries(factory->seqLen, factory->mapIntervalLog2); numFullBlocks = numEntries / BLOCK_IO_SIZE; lastBlockLen = numEntries % BLOCK_IO_SIZE; } if (fseeko(fp, 0, SEEK_SET) == -1) die("failed seek in backing store"); for (i = 0; i < numFullBlocks; ++i ) { readBlock2Buf(fp, buf, BLOCK_IO_SIZE, revMap, storePos, bitsPerUlong); storePos += bitsPerUlong * BLOCK_IO_SIZE; } readBlock2Buf(fp, buf, lastBlockLen, revMap, storePos, bitsPerUlong); } enum { HEADER_ENTRY_BITS = 16, }; static inline bool BWTSeqCRMapOpen(unsigned short mapIntervalLog2, unsigned short bitsPerUlong, unsigned long seqLen, const char *projectName, bool createMapFile, BWTSeqContextRetriever *gt_newBWTSeqCR) { FILE *mapFile = NULL; BitString mapMap = NULL; GtStr *mapName = NULL; gt_assert(projectName); do { size_t headerBitElems = bitElemsAllocSize(2 * HEADER_ENTRY_BITS), headerSize = headerBitElems * sizeof (BitElem), mapSize = headerSize + sizeof (BitElem) * bitElemsAllocSize(bitsPerUlong * numMapEntries( seqLen, mapIntervalLog2)); mapName = gt_str_new_cstr(projectName); { char buf[1 + 4 + 3]; snprintf(buf, sizeof (buf), ".%ucxm", (unsigned)mapIntervalLog2); gt_str_append_cstr(mapName, buf); if (createMapFile) { /* write header information, for reference to verify noone * toyed with the file name */ BitElem headerBuf[headerBitElems]; if (!(mapFile = gt_fa_fopen(gt_str_get(mapName), "w+b", NULL))) break; gt_bsStoreUInt16(headerBuf, 0, HEADER_ENTRY_BITS, mapIntervalLog2); gt_bsStoreUInt16(headerBuf, HEADER_ENTRY_BITS, HEADER_ENTRY_BITS, bitsPerUlong); gt_xfwrite(headerBuf, sizeof (headerBuf), 1, mapFile); if (fseeko(mapFile, mapSize - 1, SEEK_SET)) break; /* write one byte so mmap works for full file */ gt_xfwrite(&buf, 1, 1, mapFile); gt_xfflush(mapFile); } else { /* read header information, for reference to verify noone * toyed with the file name */ BitElem headerBuf[headerBitElems]; if (!(mapFile = gt_fa_fopen(gt_str_get(mapName), "rb", NULL))) break; if (fread(headerBuf, sizeof (headerBuf), 1, mapFile) != 1) break; if (gt_bsGetUInt16(headerBuf, 0, HEADER_ENTRY_BITS) != mapIntervalLog2 || (gt_bsGetUInt16(headerBuf, HEADER_ENTRY_BITS, HEADER_ENTRY_BITS) != bitsPerUlong)) { fprintf(stderr, "error: context map file %s contains corrupted " "data.\n", gt_str_get(mapName)); break; } } } mapMap = gt_fa_mmap_generic_fd(fileno(mapFile), gt_str_get(mapName), mapSize, 0, createMapFile, false, NULL); gt_newBWTSeqCR->revMap = (gt_newBWTSeqCR->revMapMMap = mapMap) + headerSize; } while (0); if (mapName) gt_str_delete(mapName); if (mapFile) gt_fa_xfclose(mapFile); return mapMap != NULL; } BWTSeqContextRetriever * gt_BWTSeqCRLoad(const BWTSeq *bwtSeq, const char *projectName, short mapIntervalLog2) { unsigned long seqLen; unsigned short bitsPerUlong; BWTSeqContextRetriever *gt_newBWTSeqCR; gt_assert(bwtSeq && projectName); seqLen = BWTSeqLength(bwtSeq); bitsPerUlong = requiredUlongBits(seqLen - 1); gt_newBWTSeqCR = gt_malloc(sizeof (*gt_newBWTSeqCR)); gt_newBWTSeqCR->bitsPerUlong = bitsPerUlong; gt_newBWTSeqCR->bwtSeq = bwtSeq; if (mapIntervalLog2 != CTX_MAP_ILOG_AUTOSIZE) { if (!BWTSeqCRMapOpen(mapIntervalLog2, bitsPerUlong, seqLen, projectName, false, gt_newBWTSeqCR)) { gt_free(gt_newBWTSeqCR); return NULL; } } else { short mapIntervalLog2Max = bitsPerUlong; mapIntervalLog2 = 0; while (!BWTSeqCRMapOpen(mapIntervalLog2, bitsPerUlong, seqLen, projectName, false, gt_newBWTSeqCR) && mapIntervalLog2 < mapIntervalLog2Max) ++mapIntervalLog2; if (!gt_newBWTSeqCR->revMap) { gt_free(gt_newBWTSeqCR); return NULL; } } gt_newBWTSeqCR->mapIntervalLog2 = mapIntervalLog2; gt_newBWTSeqCR->mapInterval = 1 << mapIntervalLog2; gt_newBWTSeqCR->mapMask = gt_newBWTSeqCR->mapInterval - 1; return gt_newBWTSeqCR; } void gt_deleteBWTSeqCR(BWTSeqContextRetriever *bwtSeqCR) { gt_assert(bwtSeqCR); gt_fa_xmunmap(bwtSeqCR->revMapMMap); gt_free(bwtSeqCR); } void gt_BWTSeqCRAccessSubseq(const BWTSeqContextRetriever *bwtSeqCR, unsigned long start, size_t len, Symbol subseq[]) { struct SeqMark currentPos; struct extBitsRetrieval extBits; const BWTSeq *bwtSeq; initExtBitsRetrieval(&extBits); gt_assert(bwtSeqCR); gt_assert(start < BWTSeqLength(bwtSeqCR->bwtSeq)); bwtSeq = bwtSeqCR->bwtSeq; { unsigned long end = start + len - 1; currentPos = BWTSeqCRNextMark(bwtSeqCR, end); gt_assert(currentPos.textPos >= end); while (currentPos.textPos > end) { currentPos.bwtPos = BWTSeqLFMap(bwtSeq, currentPos.bwtPos, &extBits); --currentPos.textPos; } } { unsigned long i = len; while (i) { --i; subseq[i] = BWTSeqGetSym(bwtSeq, currentPos.bwtPos); currentPos.bwtPos = BWTSeqLFMap(bwtSeq, currentPos.bwtPos, &extBits); #ifndef NDEBUG --currentPos.textPos; #endif } } gt_assert(currentPos.textPos + 1 == start); } genometools-1.5.1/src/match/eis-bwtseq-context.h000066400000000000000000000071731211610345200216550ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_CONTEXT_H #define EIS_BWTSEQ_CONTEXT_H /** * @file eis-bwtseq-context.h * @brief interface for generating arbitrary context from a * packedindex object */ #include "match/eis-seqdatasrc.h" #include "match/eis-bwtseq-context-param.h" typedef struct BWTSeqContextRetriever BWTSeqContextRetriever; typedef struct BWTSeqContextRetrieverFactory BWTSeqContextRetrieverFactory; /** * @param seqLen length of sequence to build context map for * @param mapIntervalLog2 unless equal to CTX_MAP_ILOG_NOMAP or * CTX_MAP_ILOG_AUTOSIZE compute map with interval 1< Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/chardef.h" #include "core/log.h" #include "core/minmax.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "match/eis-specialsrank.h" #include "match/eis-bitpackseqpos.h" #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-extinfo.h" #include "match/eis-bwtseq-priv.h" #include "match/eis-bwtseq-context.h" #include "match/eis-headerid.h" #include "match/eis-mrangealphabet.h" #include "match/eis-sa-common.h" /** * @file eis-bwtseq-extinfo.c generic methods for bwt index creation and * everything related to storing/retrieving locate information */ struct locateHeader { unsigned long rot0Pos; unsigned locateInterval; int featureToggles; }; enum { LOCATE_HEADER_SIZE = sizeof (struct locateHeader), }; struct locateHeaderWriteInfo { SASeqSrc *src; unsigned locateInterval; int featureToggles; }; static int writeLocateInfoHeader(FILE *fp, void *cbData) { struct locateHeader headerData; Definedunsignedlong rot0Pos; const struct locateHeaderWriteInfo *headerSrc = cbData; gt_assert(cbData); headerData.locateInterval = headerSrc->locateInterval; rot0Pos = SASSGetRot0Pos(headerSrc->src); if (!rot0Pos.defined) { fputs("Invalid index construction: position of suffix 0 unknown!\n", stderr); abort(); } headerData.rot0Pos = rot0Pos.valueunsignedlong; headerData.featureToggles = headerSrc->featureToggles; gt_xfwrite(&headerData, sizeof (headerData), 1, fp); return 1; } /** * @return 0 on error */ static inline int readLocateInfoHeader(EISeq *seqIdx, struct locateHeader *headerData) { FILE *fp; gt_assert(seqIdx && headerData); if (!(fp = EISSeekToHeader(seqIdx, LOCATE_INFO_IN_INDEX_HEADERID, NULL))) return 0; if (fread(headerData, sizeof (*headerData), 1, fp) != 1) return 0; return 1; } struct sortModeHeader { uint32_t bitsPerOrigRank; const MRAEnc *alphabet; const enum rangeSortMode *rangeSort; }; static inline uint32_t computeSortModeHeaderSize(const MRAEnc *alphabet) { return sizeof (uint32_t) + sizeof (int16_t) * MRAEncGetNumRanges(alphabet); } static int writeRankSortHeader(FILE *fp, void *cbData) { struct sortModeHeader *headerData = cbData; gt_assert(cbData); gt_xfwrite(&headerData->bitsPerOrigRank, sizeof (headerData->bitsPerOrigRank), 1, fp); { size_t i, numRanges = MRAEncGetNumRanges(headerData->alphabet); for (i = 0; i < numRanges; ++i) { int16_t mode = headerData->rangeSort[i]; gt_xfwrite(&mode, sizeof (mode), 1, fp); } } return 1; } static inline int readRankSortHeader(EISeq *seqIdx, uint32_t *bitsPerOrigRank, const MRAEnc *alphabet, enum rangeSortMode *rangeSort) { FILE *fp; gt_assert(seqIdx && alphabet && bitsPerOrigRank && rangeSort); if (!(fp = EISSeekToHeader(seqIdx, RANK_SORT_HEADERID, NULL))) return 0; if (fread(bitsPerOrigRank, sizeof (*bitsPerOrigRank), 1, fp) != 1) return 0; { uint16_t mode; size_t i, numRanges = MRAEncGetNumRanges(alphabet); for (i = 0; i < numRanges; ++i) { if (fread(&mode, sizeof (mode), 1, fp) != 1) return 0; rangeSort[i] = mode; } } return 1; } struct seqRevMapEntry { unsigned long bwtPos, origPos; }; struct addLocateInfoState { unsigned long seqLen, extraLocMarksUpperBound; const MRAEnc *alphabet; const enum rangeSortMode *rangeSort; SeqDataReader readUlong; RandomSeqAccessor origSeqAccess; unsigned locateInterval, bitsPerOrigPos, bitsPerUlong, bitsPerOrigRank; const SpecialsRankLookup *sprTable; int featureToggles; size_t revMapQueueSize; struct seqRevMapEntry *revMapQueue; size_t origRanksQueueSize; unsigned long *origRanksQueue; BWTSeqContextRetrieverFactory *ctxFactory; }; static inline unsigned bitsPerPosUpperBoundWithoutSegmentAggregates(struct addLocateInfoState *state) { unsigned bitsPerPos = 0; if (state->featureToggles & BWTLocateCount) /* bitsPerUlong is actually an upper bound of log(segmentLen) to * identify each locate mark */ bitsPerPos += state->bitsPerUlong; bitsPerPos += state->bitsPerOrigPos; /* stored for every position */ /* rank sorting data if needed */ bitsPerPos += state->bitsPerOrigRank; return bitsPerPos; } static inline unsigned bitsPerPosUpperBound(struct addLocateInfoState *state) { unsigned bitsPerPos = bitsPerPosUpperBoundWithoutSegmentAggregates(state); if (state->featureToggles & BWTLocateCount) /* +1 to account for the contribution to count value (which will * actually use log(blockLen) instead of blockLen bits, i.e. less * than 1 bit per position) */ bitsPerPos += 1; return bitsPerPos; } static bool locBitsUpperBounds(void *cbState, struct segmentDesc *desc, size_t numSegmentDesc, struct varBitsEstimate *result) { struct addLocateInfoState *state = cbState; gt_assert(cbState); if (state->featureToggles & (BWTLocateCount | BWTLocateBitmap)) { unsigned maxBitsPerPos = bitsPerPosUpperBound(state); result->maxBitsPerPos = maxBitsPerPos; if (desc) { size_t i, maxSegLen = 0; BitOffset maxBitsTotal = 0; unsigned long numSegmentsTotal = 0; unsigned bitsPerOrigRank = state->bitsPerOrigRank; for (i = 0; i < numSegmentDesc; ++i) { size_t len = desc[i].len; maxSegLen = MAX(len, maxSegLen); if (state->featureToggles & BWTLocateCount) maxBitsTotal += requiredUlongBits(len) * desc[i].repeatCount; numSegmentsTotal += desc[i].repeatCount; } maxBitsTotal += (state->seqLen / state->locateInterval + state->extraLocMarksUpperBound) * (((state->featureToggles & BWTLocateCount) ? requiredUlongBits(maxSegLen) : 0) + state->bitsPerOrigPos); if (bitsPerOrigRank) { unsigned long maxRank = specialsRank(state->sprTable, state->seqLen); /* rank values stored */ maxBitsTotal += maxRank * bitsPerOrigRank; } result->maxBitsPerBucket = /* locate marks and rank sorts */ maxSegLen * bitsPerPosUpperBoundWithoutSegmentAggregates(state) /* count of locate marks */ + ((state->featureToggles & BWTLocateCount) ? requiredUlongBits(maxSegLen) : 0); result->maxBitsTotal = maxBitsTotal; return true; } else return false; } else { result->maxBitsTotal = result->maxBitsPerBucket = result->maxBitsPerPos = 0; return false; } } static void initAddLocateInfoState(struct addLocateInfoState *state, RandomSeqAccessor origSeqAccess, SeqDataReader readUlong, const MRAEnc *alphabet, const struct seqStats *stats, const enum rangeSortMode *rangeSort, unsigned long srcLen, const struct bwtParam *params, const SpecialsRankLookup *sprTable, unsigned bitsPerOrigRank, BWTSeqContextRetrieverFactory *ctxFactory) { unsigned long lastPos; unsigned aggregationExpVal; unsigned locateInterval; gt_assert(state); state->alphabet = alphabet; state->seqLen = srcLen; state->rangeSort = rangeSort; state->readUlong = readUlong; state->origSeqAccess = origSeqAccess; state->featureToggles = params->featureToggles; aggregationExpVal = gt_estimateSegmentSize(¶ms->seqParams); locateInterval = params->locateInterval; lastPos = srcLen - 1; state->locateInterval = locateInterval; state->bitsPerUlong = requiredUlongBits(lastPos); state->bitsPerOrigRank = bitsPerOrigRank; state->sprTable = sprTable; if (locateInterval) { if (params->featureToggles & BWTReversiblySorted) state->bitsPerOrigPos = requiredUlongBits(lastPos/locateInterval); else state->bitsPerOrigPos = requiredUlongBits(lastPos); state->origRanksQueueSize = state->revMapQueueSize =aggregationExpVal; state->revMapQueue = gt_malloc(sizeof (state->revMapQueue[0]) * state->revMapQueueSize); state->origRanksQueue = gt_malloc(sizeof (state->origRanksQueue[0]) * state->origRanksQueueSize); state->bitsPerOrigRank = bitsPerOrigRank; /* if there are rank sorted symbols, but no rank sorting is * available, extra locate marks will be inserted, at most every * second position can be marked this way because for every * SORTMODE_VALUE -> SORTMODE_{RANk|UNDEF} transition there must be one * inverse transition */ if (!(params->featureToggles & BWTReversiblySorted) && locateInterval > 1) { unsigned long stdLocMarks = srcLen / locateInterval, extraLocMarksUpperBound = MIN(srcLen/2, srcLen - stdLocMarks); if (stats) { unsigned long nonValSortSyms = 0; unsigned i; for (i = 0; i <= UINT8_MAX; ++i) if (MRAEncSymbolHasValidMapping(alphabet, i) && !gt_MRAEncSymbolIsInSelectedRanges( alphabet, MRAEncMapSymbol(alphabet, i), SORTMODE_VALUE, (int *)rangeSort)) nonValSortSyms += stats->symbolDistributionTable[i]; extraLocMarksUpperBound = MIN3(extraLocMarksUpperBound, nonValSortSyms, srcLen - nonValSortSyms); } state->extraLocMarksUpperBound = extraLocMarksUpperBound; } else { state->extraLocMarksUpperBound = 0; } } else { state->extraLocMarksUpperBound = 0; state->bitsPerOrigPos = state->bitsPerOrigRank = 0; state->origRanksQueueSize = state->revMapQueueSize = 0; state->origRanksQueue = NULL; state->revMapQueue = NULL; } state->ctxFactory = ctxFactory; } static void destructAddLocateInfoState(struct addLocateInfoState *state) { gt_free(state->revMapQueue); gt_free(state->origRanksQueue); } static inline int isSortModeTransition(RandomSeqAccessor origSeqAccess, unsigned long seqLen, const MRAEnc *alphabet, const enum rangeSortMode *rangeSort, unsigned long pos) { Symbol syms[2]; if (pos > 0 && pos < seqLen - 1) { #ifndef NDEBUG int retcode = #endif accessSequence(origSeqAccess, syms, pos - 1, 2); gt_assert(retcode == 2); } else if (pos == 0) { #ifndef NDEBUG int retcode = #endif accessSequence(origSeqAccess, syms + 1, 0, 1); gt_assert(retcode == 1); syms[0] = UNDEFBWTCHAR; } else /* pos == seqLen - 1 */ { #ifndef NDEBUG int retcode = #endif accessSequence(origSeqAccess, syms, seqLen - 2, 1); gt_assert(retcode == 1); syms[1] = UNDEFBWTCHAR; } { AlphabetRangeID range[2]; range[0] = MRAEncGetRangeOfSymbol(alphabet, MRAEncMapSymbol(alphabet, syms[0])); range[1] = MRAEncGetRangeOfSymbol(alphabet, MRAEncMapSymbol(alphabet, syms[1])); return rangeSort[range[0]] != rangeSort[range[1]]; } } static BitOffset addLocateInfo(BitString cwDest, BitOffset cwOffset, BitString varDest, BitOffset varOffset, GT_UNUSED unsigned long start, unsigned long len, void *cbState) { BitOffset bitsWritten = 0; struct addLocateInfoState *state = cbState; unsigned bitsPerBWTPos, bitsPerOrigPos, bitsPerOrigRank; int retcode; unsigned locateInterval; gt_assert(varDest && cbState); locateInterval = state->locateInterval; /* 0. resize caches if necessary */ if (locateInterval && len > state->revMapQueueSize) { state->revMapQueue = gt_realloc(state->revMapQueue, len * sizeof (state->revMapQueue[0])); state->revMapQueueSize = len; } if (state->sprTable && len > state->origRanksQueueSize) { state->origRanksQueue = gt_realloc(state->origRanksQueue, len * sizeof (state->origRanksQueue[0])); state->origRanksQueueSize = len; } bitsPerBWTPos = requiredUlongBits(len - 1); bitsPerOrigPos = state->bitsPerOrigPos; bitsPerOrigRank = state->bitsPerOrigRank; { unsigned long i, mapVal; size_t revMapQueueLen = 0, origRanksQueueLen = 0; int reversiblySorted = state->featureToggles & BWTReversiblySorted, locateBitmap = state->featureToggles & BWTLocateBitmap; /* read len suffix array indices from suftab */ /* TODO: decide on reasonable buffering of mapVal */ for (i = 0; i < len; ++i) { /* add locate data if necessary */ if (locateInterval) { int insertExtraLocateMark = 0; /* 1.a read array index*/ if ((retcode = SDRRead(state->readUlong, &mapVal, 1)) != 1) return (BitOffset)-1; /* 1.b find current symbol and compare to special ranges */ insertExtraLocateMark = !reversiblySorted && isSortModeTransition(state->origSeqAccess, state->seqLen, state->alphabet, state->rangeSort, mapVal); /* 1.c check wether the index into the original sequence is an * even multiple of the sampling interval, or a not-reversible * sort mode transition occurred */ if (!(mapVal % locateInterval) || insertExtraLocateMark) { /* 1.c.1 enter index into cache */ state->revMapQueue[revMapQueueLen].bwtPos = i; state->revMapQueue[revMapQueueLen].origPos = reversiblySorted ? mapVal/state->locateInterval : mapVal; ++revMapQueueLen; /* 1.c.2 mark position in bwt sequence */ if (locateBitmap) bsSetBit(cwDest, cwOffset + i); } else if (locateBitmap) gt_bsClearBit(cwDest, cwOffset + i); } /* and add data for extra sort information */ if (bitsPerOrigRank) { Symbol BWTSym; const MRAEnc *alphabet = state->alphabet; if (mapVal != 0) accessSequence(state->origSeqAccess, &BWTSym, mapVal - 1, 1); else BWTSym = UNDEFBWTCHAR; if (state->rangeSort[MRAEncGetRangeOfSymbol( alphabet, MRAEncMapSymbol(alphabet, BWTSym))] == SORTMODE_RANK) { state->origRanksQueue[origRanksQueueLen++] = specialsRank(state->sprTable, mapVal != 0 ? mapVal - 1 : state->seqLen - 1); } } if (state->ctxFactory) { gt_BWTSCRFMapAdvance(state->ctxFactory, &mapVal, 1); } } /* 2. copy revMapQueue into output */ if (locateInterval) { int locateCount = state->featureToggles & BWTLocateCount; if (locateCount) { unsigned bitsPerCount = requiredUlongBits(len); gt_bsStoreUlong(varDest, varOffset + bitsWritten, bitsPerCount, revMapQueueLen); bitsWritten += bitsPerCount; } for (i = 0; i < revMapQueueLen; ++i) { if (locateCount) { gt_bsStoreUlong(varDest, varOffset + bitsWritten, bitsPerBWTPos, state->revMapQueue[i].bwtPos); bitsWritten += bitsPerBWTPos; } gt_bsStoreUlong(varDest, varOffset + bitsWritten, bitsPerOrigPos, state->revMapQueue[i].origPos); bitsWritten += bitsPerOrigPos; } } if (bitsPerOrigRank) { unsigned bitsPerOrigRank = state->bitsPerOrigRank; if (origRanksQueueLen) { gt_bsStoreUniformUlongArray(varDest, varOffset + bitsWritten, bitsPerOrigRank, origRanksQueueLen, #ifdef _LP64 (uint64_t*) state->origRanksQueue); #else (uint32_t*) state->origRanksQueue); #endif bitsWritten += bitsPerOrigRank * origRanksQueueLen; } } } return bitsWritten; } static inline int sortModeHeaderNeeded(const MRAEnc *alphabet, const enum rangeSortMode *rangeSort, const SpecialsRankLookup *sprTable) { bool hasRankSortedRanges = false; AlphabetRangeID i, numRanges = MRAEncGetNumRanges(alphabet); for (i = 0; i < numRanges; ++i) hasRankSortedRanges |= (rangeSort[i] == SORTMODE_RANK?1:0); return (hasRankSortedRanges && sprTable); } EISeq * gt_createBWTSeqGeneric(const struct bwtParam *params, indexCreateFunc createIndex, SASeqSrc *src, const enum rangeSortMode rangeSort[], const SpecialsRankLookup *sprTable, GtError *err) { struct encIdxSeq *baseSeqIdx = NULL; struct addLocateInfoState varState; bool varStateIsInitialized = false; unsigned locateInterval; BWTSeqContextRetrieverFactory *buildContextMap = NULL; gt_assert(src && params && err); gt_error_check(err); locateInterval = params->locateInterval; do { struct locateHeaderWriteInfo locHeaderData = { src, locateInterval, params->featureToggles }; struct sortModeHeader sortModeHeader; void *p[] = { &locHeaderData , &sortModeHeader }; uint16_t headerIDs[] = { LOCATE_INFO_IN_INDEX_HEADERID, RANK_SORT_HEADERID }; uint32_t headerSizes[] = { LOCATE_HEADER_SIZE, 0 }; headerWriteFunc headerFuncs[] = { writeLocateInfoHeader, writeRankSortHeader }; size_t numHeaders = 0; unsigned bitsPerOrigRank = 0; unsigned long totalLen = SASSGetLength(src); const MRAEnc *alphabet = SASSGetMRAEnc(src); MRAEnc *baseAlphabet = SASSNewMRAEnc(src); /* FIXME: this has to work also when locateInterval == 0 and * sprTable != NULL */ if (params->ctxMapILog != CTX_MAP_ILOG_NOMAP) buildContextMap = gt_newBWTSeqContextRetrieverFactory(totalLen, params->ctxMapILog); if (locateInterval) { ++numHeaders; if (sortModeHeaderNeeded(alphabet, rangeSort, sprTable)) { unsigned long #ifndef NDEBUG origSeqLen = gt_encseq_total_length( gt_SPRTGetOrigEncseq(sprTable)), #endif maxRank; gt_assert(origSeqLen == totalLen - 1); maxRank = specialsRank(sprTable, totalLen - 1); bitsPerOrigRank = sortModeHeader.bitsPerOrigRank = requiredUlongBits(maxRank); sortModeHeader.alphabet = alphabet; sortModeHeader.rangeSort = rangeSort; headerSizes[1] = computeSortModeHeaderSize(alphabet); ++numHeaders; } { SeqDataReader readSfxIdx = SASSCreateReader(src, SFX_REQUEST_SUFTAB); if (SDRIsValid(readSfxIdx)) { initAddLocateInfoState( &varState, SASSGetOrigSeqAccessor(src), readSfxIdx, alphabet, SASSGetSeqStats(src), rangeSort, totalLen, params, bitsPerOrigRank?sprTable:NULL, bitsPerOrigRank, buildContextMap); varStateIsInitialized = true; } else { gt_error_set(err, "error: locate sampling requested but not available" " for project %s\n", gt_str_get(params->projectName)); } } } if (!(baseSeqIdx = createIndex(totalLen, gt_str_get(params->projectName), baseAlphabet, SASSGetSeqStats(src), SASSCreateReader(src, SFX_REQUEST_BWTTAB), ¶ms->seqParams, numHeaders, headerIDs, headerSizes, headerFuncs, p, locateInterval?addLocateInfo:NULL, /* one bit per position if using bitmap */ (params->featureToggles & BWTLocateBitmap)?1:0, locateInterval?locBitsUpperBounds:NULL, &varState, err))) break; if (buildContextMap) { if (!gt_BWTSCRFFinished(buildContextMap)) { fputs("error: context table construction incomplete!\n", stderr); } else { BWTSeqContextRetriever *ctxRetrieve = gt_BWTSCRFGet(buildContextMap, NULL, gt_str_get(params->projectName)); gt_deleteBWTSeqCR(ctxRetrieve); } } } while (0); if (buildContextMap) gt_deleteBWTSeqContextRetrieverFactory(buildContextMap); if (varStateIsInitialized) destructAddLocateInfoState(&varState); return baseSeqIdx; } static inline BitOffset searchLocateCountMark(const BWTSeq *bwtSeq, unsigned long pos, struct extBitsRetrieval *extBits) { unsigned i, numMarks, bitsPerCount; BitOffset markOffset; EISRetrieveExtraBits(bwtSeq->seqIdx, pos, EBRF_RETRIEVE_CWBITS | EBRF_RETRIEVE_VARBITS, extBits, bwtSeq->hint); markOffset = extBits->varOffset; bitsPerCount = requiredUlongBits(extBits->len); numMarks = gt_bsGetUlong(extBits->varPart, markOffset, bitsPerCount); if (numMarks) { unsigned bitsPerBWTPos = requiredUlongBits(extBits->len - 1), bitsPerOrigPos = requiredUlongBits( ((bwtSeq->featureToggles & BWTReversiblySorted) ? (BWTSeqLength(bwtSeq) - 1) / bwtSeq->locateSampleInterval : BWTSeqLength(bwtSeq) - 1)); unsigned long cmpPos = pos - extBits->start; markOffset += bitsPerCount; for (i = 0; i < numMarks; ++i) { unsigned long markedPos = gt_bsGetUlong(extBits->varPart, markOffset, bitsPerBWTPos); if (markedPos < cmpPos) markOffset += bitsPerBWTPos + bitsPerOrigPos; else if (markedPos > cmpPos) break; else if (markedPos == cmpPos) return markOffset + bitsPerBWTPos; } } return 0; } int gt_BWTSeqPosHasLocateInfo(const BWTSeq *bwtSeq, unsigned long pos, struct extBitsRetrieval *extBits) { if (bwtSeq->featureToggles & BWTLocateBitmap) { EISRetrieveExtraBits(bwtSeq->seqIdx, pos, EBRF_RETRIEVE_CWBITS, extBits, bwtSeq->hint); return gt_bsGetBit(extBits->cwPart, extBits->cwOffset + pos - extBits->start); } else if (bwtSeq->featureToggles & BWTLocateCount) { BitOffset markOffset = searchLocateCountMark(bwtSeq, pos, extBits); return markOffset != 0; } #ifndef NDEBUG else { fputs("Trying to locate in BWT sequence index without locate information.", stderr); abort(); } #endif return 0; } unsigned long gt_BWTSeqLocateMatch(const BWTSeq *bwtSeq, unsigned long pos, struct extBitsRetrieval *extBits) { if (bwtSeq->featureToggles & BWTLocateBitmap) { unsigned long nextLocate = pos; unsigned locateOffset = 0; while (!gt_BWTSeqPosHasLocateInfo(bwtSeq, nextLocate, extBits)) nextLocate = BWTSeqLFMap(bwtSeq, nextLocate, extBits), ++locateOffset; EISRetrieveExtraBits(bwtSeq->seqIdx, nextLocate, EBRF_RETRIEVE_CWBITS | EBRF_RETRIEVE_VARBITS, extBits, bwtSeq->hint); { unsigned long maxPosVal = ((bwtSeq->featureToggles & BWTReversiblySorted)? (BWTSeqLength(bwtSeq) - 1) /bwtSeq->locateSampleInterval: BWTSeqLength(bwtSeq) - 1); unsigned bitsPerCount = requiredUlongBits(extBits->len), bitsPerBWTPos = requiredUlongBits(extBits->len - 1), bitsPerOrigPos = requiredUlongBits(maxPosVal); BitOffset locateRecordIndex = gt_bs1BitsCount(extBits->cwPart, extBits->cwOffset, nextLocate - extBits->start), locateRecordOffset = ((bwtSeq->featureToggles & BWTLocateCount? bitsPerBWTPos:0) + bitsPerOrigPos) * locateRecordIndex + ((bwtSeq->featureToggles & BWTLocateCount)?bitsPerCount:0); unsigned long matchPos = gt_bsGetUlong( extBits->varPart, extBits->varOffset + locateRecordOffset + ((bwtSeq->featureToggles & BWTLocateCount)?bitsPerBWTPos:0), bitsPerOrigPos); if (bwtSeq->featureToggles & BWTReversiblySorted) matchPos = matchPos * bwtSeq->locateSampleInterval; matchPos += locateOffset; gt_assert(!(bwtSeq->featureToggles & BWTLocateCount) || gt_bsGetUlong(extBits->varPart, extBits->varOffset + locateRecordOffset, bitsPerBWTPos) == nextLocate - extBits->start); return matchPos; } } else if (bwtSeq->featureToggles & BWTLocateCount) { BitOffset markOffset; unsigned long nextLocate = pos, matchPos; unsigned locateOffset = 0; /* mark is at most locateInterval * positions away */ unsigned bitsPerOrigPos = requiredUlongBits(((bwtSeq->featureToggles & BWTReversiblySorted)? (BWTSeqLength(bwtSeq) - 1) /bwtSeq->locateSampleInterval: BWTSeqLength(bwtSeq) - 1)); while ((markOffset = searchLocateCountMark(bwtSeq, nextLocate, extBits)) == 0) { nextLocate = BWTSeqLFMap(bwtSeq, nextLocate, extBits); ++locateOffset; gt_assert(locateOffset <= BWTSeqLength(bwtSeq)); } matchPos = gt_bsGetUlong(extBits->varPart, markOffset, bitsPerOrigPos); if (bwtSeq->featureToggles & BWTReversiblySorted) matchPos = matchPos * bwtSeq->locateSampleInterval; matchPos += locateOffset; return matchPos; } /* Internal error: Trying to locate in BWT sequence index without locate information. */ abort(); return 0; /* shut up compiler */ } static inline BitOffset locateVarBits(const BWTSeq *bwtSeq, struct extBitsRetrieval *extBits) { BitOffset numLocBits = 0; unsigned bitsPerBWTPos = requiredUlongBits(extBits->len - 1), bitsPerOrigPos = requiredUlongBits( ((bwtSeq->featureToggles & BWTReversiblySorted) ? (BWTSeqLength(bwtSeq) - 1) / bwtSeq->locateSampleInterval : BWTSeqLength(bwtSeq) - 1)); if (bwtSeq->featureToggles & BWTLocateBitmap) { unsigned numMarks = gt_bs1BitsCount(extBits->cwPart, extBits->cwOffset, extBits->len); numLocBits = numMarks * bitsPerOrigPos; } else if (bwtSeq->featureToggles & BWTLocateCount) { BitOffset markOffset = extBits->varOffset; unsigned bitsPerCount = requiredUlongBits(extBits->len); unsigned numMarks = gt_bsGetUlong(extBits->varPart, markOffset, bitsPerCount); numLocBits = bitsPerCount + numMarks * (bitsPerBWTPos + bitsPerOrigPos); } return numLocBits; } unsigned long gt_BWTSeqGetRankSort(const BWTSeq *bwtSeq, unsigned long pos, AlphabetRangeID range, struct extBitsRetrieval *extBits) { BitOffset locVarBits; AlphabetRangeSize rSize; gt_assert(bwtSeq->rangeSort[range] == SORTMODE_RANK); EISRetrieveExtraBits(bwtSeq->seqIdx, pos, EBRF_RETRIEVE_CWBITS | EBRF_RETRIEVE_VARBITS, extBits, bwtSeq->hint); locVarBits = locateVarBits(bwtSeq, extBits); rSize = MRAEncGetRangeSize(EISGetAlphabet(bwtSeq->seqIdx), range); { unsigned long ranks[rSize * 2]; unsigned long BWTRankTotal = 0; AlphabetRangeSize i; EISPosPairRangeRank(bwtSeq->seqIdx, range, extBits->start, pos, ranks, bwtSeq->hint); for (i = 0; i < rSize; ++i) BWTRankTotal += ranks[i + rSize] - ranks[i]; return gt_bsGetUlong(extBits->varPart, extBits->varOffset + locVarBits + bwtSeq->bitsPerOrigRank * BWTRankTotal, bwtSeq->bitsPerOrigRank); } } void gt_BWTSeqInitLocateHandling(BWTSeq *bwtSeq, const enum rangeSortMode *defaultRangeSort) { struct encIdxSeq *seqIdx; struct locateHeader locHeader; gt_assert(bwtSeq); seqIdx = bwtSeq->seqIdx; if (!readLocateInfoHeader(seqIdx, &locHeader) || !locHeader.locateInterval) { gt_log_log("Index does not contain locate information.\n" "Localization of matches will not be supported!"); bwtSeq->locateSampleInterval = 0; bwtSeq->featureToggles = BWTBaseFeatures; } else { bwtSeq->locateSampleInterval = locHeader.locateInterval; bwtSeq->rot0Pos = locHeader.rot0Pos; /* FIXME: this really deserves its own header */ bwtSeq->featureToggles = locHeader.featureToggles; if (readRankSortHeader(seqIdx, &bwtSeq->bitsPerOrigRank, bwtSeq->alphabet, bwtSeq->rangeSort)) ; else { AlphabetRangeID numRanges = MRAEncGetNumRanges(bwtSeq->alphabet); bwtSeq->bitsPerOrigRank = 0; memcpy(bwtSeq->rangeSort, defaultRangeSort, numRanges * sizeof (defaultRangeSort[0])); } } } genometools-1.5.1/src/match/eis-bwtseq-extinfo.h000066400000000000000000000067151211610345200216460ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_EXTINFO_H #define EIS_BWTSEQ_EXTINFO_H /** * @file eis-bwtseq-extinfo.h * @brief Routines to add and query extension information embedded in * the base sequence index. * - generic BWT index creation routine */ #include "match/eis-specialsrank.h" #include "match/eis-bwtseq.h" #include "match/eis-encidxseq.h" #include "match/eis-mrangealphabet.h" #include "match/eis-random-seqaccess.h" #include "match/eis-sa-common.h" #include "match/eis-seqdatasrc.h" /** The constructor for the base index must conform to this * signature. */ typedef EISeq *(*indexCreateFunc)( unsigned long totalLen, const char *projectName, MRAEnc *alphabet, const struct seqStats *stats, SeqDataReader BWTGenerator, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err); /** * To enrich a base index with the information required for a BWT * index, wrap the base index constructor in a call to gt_createBWTSeqGeneric. * @param params holds all parameters for both, the BWT sequence * object and the base index * @param createIndex wrapped constructor * @param src passed to createIndex and used as source of suffix array * @param totalLen length of the sorted sequence plus terminator symbol * @param alphabet encoding to use for symbols of the input sequence * @param specialRanges one value describing for each range of * alphabet how symbols in this range are sorted * @param readOrigSeq makes the original sequence available * @param origSeqState opaque sequence object to pass to readOrigSeq * @param readNextUlong stream reader for the values of the suffix * array * @param spReadState opaque suffix array source object to pass to * readNextUlong * @param lrepFunc reports the position of the null-rotation * @param lrepState passed to lrepFunc * @param err */ EISeq * gt_createBWTSeqGeneric(const struct bwtParam *params, indexCreateFunc createIndex, SASeqSrc *src, const enum rangeSortMode rangeSort[], const SpecialsRankLookup *sprTable, GtError *err); int gt_BWTSeqPosHasLocateInfo(const BWTSeq *bwtSeq, unsigned long pos, struct extBitsRetrieval *extBits); unsigned long gt_BWTSeqGetRankSort(const BWTSeq *bwtSeq, unsigned long pos, AlphabetRangeID range, struct extBitsRetrieval *extBits); void gt_BWTSeqInitLocateHandling(BWTSeq *bwtSeq, const enum rangeSortMode *defaultRangeSort); #endif genometools-1.5.1/src/match/eis-bwtseq-param.c000066400000000000000000000106001211610345200212510ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/error.h" #include "core/option_api.h" #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-param.h" #include "match/eis-bwtseq-context-param.h" #include "match/eis-encidxseq-param.h" void gt_registerPackedIndexOptions(GtOptionParser *op, struct bwtOptions *paramOutput, int defaultOptimizationFlags, const GtStr *projectName) { GtOption *option; gt_registerEncIdxSeqOptions(op, ¶mOutput->final.seqParams); paramOutput->final.featureToggles = BWTBaseFeatures; option = gt_option_new_uint( "locfreq", "specify the locate frequency\n" "parameter i means that each i-th position of input string is stored\n" "0 => no locate information", ¶mOutput->final.locateInterval, 16U); gt_option_parser_add_option(op, option); option = gt_option_new_bool( "locbitmap", "marked/unmarked positions for locate are stored as bitmaps\n" "this gives faster location of hits but increases the index by 1 bit per" " symbol", ¶mOutput->useLocateBitmap, true); gt_option_parser_add_option(op, option); paramOutput->useLocateBitmapOption = option; option = gt_option_new_bool( "sprank", "build rank table for special symbols\n" "this produces an index which can be used to regenerate the " "original sequence but increases the memory used during index creation", ¶mOutput->useSourceRank, false); gt_option_parser_add_option(op, option); option = gt_option_new_int_min_max( "sprankilog", "specify the interval of rank sampling as log value\n" "parameter i means that each 2^i-th position of source is sampled for " "rank\nundefined => chooses default of log(log(sequence length))", ¶mOutput->final.sourceRankInterval, -1, -1, sizeof (unsigned long) * CHAR_BIT - 1); gt_option_parser_add_option(op, option); gt_registerCtxMapOptions(op, ¶mOutput->final.ctxMapILog); paramOutput->final.projectName = projectName; paramOutput->defaultOptimizationFlags = defaultOptimizationFlags; } static int estimateBestLocateTypeFeature(const struct bwtOptions *paramOutput) { if (!paramOutput->final.locateInterval) return BWTBaseFeatures; { /* two cases: we store 1 bit per position or log(segmentlen) for * each marked position plus one to note the number of marked positions */ unsigned segmentLen = gt_estimateSegmentSize(¶mOutput->final.seqParams); if (segmentLen > (segmentLen + 1) * gt_requiredUIntBits(segmentLen) / paramOutput->final.locateInterval) return BWTLocateCount; else return BWTLocateBitmap; } } void gt_computePackedIndexDefaults(struct bwtOptions *paramOutput, int extraToggles) { if (gt_option_is_set(paramOutput->useLocateBitmapOption)) paramOutput->final.featureToggles |= (paramOutput->useLocateBitmap?BWTLocateBitmap:BWTLocateCount); else paramOutput->final.featureToggles |= estimateBestLocateTypeFeature(paramOutput); if (paramOutput->final.sourceRankInterval >= 0 || paramOutput->useSourceRank) paramOutput->final.featureToggles |= BWTReversiblySorted; paramOutput->final.featureToggles |= extraToggles; paramOutput->final.seqParams.EISFeatureSet = gt_convertBWTOptFlags2EISFeatures(paramOutput->defaultOptimizationFlags); } int gt_convertBWTOptFlags2EISFeatures(int BWTOptFlags) { int EISFeatureSet = EIS_FEATURE_NONE; if (BWTOptFlags & BWTDEFOPT_LOW_RAM_OVERHEAD) { EISFeatureSet &= ~EIS_FEATURE_REGION_SUMS; } if (BWTOptFlags & BWTDEFOPT_FAST_RANK) { EISFeatureSet |= EIS_FEATURE_REGION_SUMS; } return EISFeatureSet; } genometools-1.5.1/src/match/eis-bwtseq-param.h000066400000000000000000000164311211610345200212660ustar00rootroot00000000000000/* Copyright (c) 2007,2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_PARAM_H #define EIS_BWTSEQ_PARAM_H /** * @file eis-bwtseq-param.h * @brief Routines to handle option processing for BWT index * construction and declaration of parameter types and corresponding * constant values. */ #include "core/option_api.h" #include "match/eis-encidxseq-param.h" /* #include "match/eis-bwtseq-context-param.h" not neccessary remove * Stefan */ /** * all parameters for building the BWT sequence index */ struct bwtParam { struct seqBaseParam seqParams; /**< holds extra parameter * information specific to the * base sequence storage */ int featureToggles; /**< set of bittoggles composed * from enum BWTFeatures */ unsigned locateInterval; /**< store locate information * (mapping from BWT sequence to * original sequence for every nth * position in original sequence) at * this frequency, unless * locateInterval = 0, which implies * storing no locate information at * all */ int sourceRankInterval; /**< makes ranges which are sorted in * rank mode reversibly sorted: * -1: * inactive * 0...sizeof (unsigned long)*CHAR_BIT: * build accel table * with 1< Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_PRIV_H #define EIS_BWTSEQ_PRIV_H #include "core/chardef.h" #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-extinfo.h" #include "match/eis-encidxseq.h" #include "match/pckbucket.h" enum { bwtTerminatorSym = SEPARATOR - 3, }; struct BWTSeq { struct encIdxSeq *seqIdx; MRAEnc *alphabet; size_t alphabetSize; EISHint hint; unsigned locateSampleInterval; /**< no sampling if 0 */ Symbol bwtTerminatorFallback; /**< the terminator symbol has been * flattened into this symbol for * storage reasons */ AlphabetRangeID bwtTerminatorFallbackRange; unsigned long rot0Pos; unsigned long *count; int featureToggles; unsigned bitsPerOrigRank; enum rangeSortMode *rangeSort; Pckbuckettable *pckbuckettable; }; struct BWTSeqExactMatchesIterator { struct matchBound bounds; unsigned long nextMatchBWTPos; struct extBitsRetrieval extBits; }; unsigned long gt_BWTSeqLocateMatch(const BWTSeq *bwtSeq, unsigned long pos, struct extBitsRetrieval *extBits); BWTSeq * gt_newBWTSeq(EISeq *seqIdx, MRAEnc *alphabet, const enum rangeSortMode *defaultRangeSort); #endif genometools-1.5.1/src/match/eis-bwtseq-sass.c000066400000000000000000000154001211610345200211250ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma_api.h" #include "core/unused_api.h" #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-context.h" #include "match/eis-bwtseq-sass.h" #include "match/eis-encidxseq.h" #include "match/eis-list-do.h" #include "match/eis-mrangealphabet.h" #include "match/eis-sa-common.h" #include "match/eis-sa-common-priv.h" typedef struct BWTSeqReaderState BWTSeqReaderState; struct BWTSeqReaderState { BWTSeqReaderState *next; struct BWTSASeqSrc *backLink; unsigned long nextReadPos; }; struct BWTSASeqSrc { struct SASeqSrc baseClass; const BWTSeq *bwtSeq; const BWTSeqContextRetriever *ctxMap; BWTSeqReaderState *readerStateList; }; typedef struct BWTSASeqSrc BWTSASeqSrc; static inline BWTSASeqSrc* SASS2BWTSASS(SASeqSrc *baseClass) { return (BWTSASeqSrc *) ((char *)baseClass - offsetof(BWTSASeqSrc, baseClass)); } static inline const BWTSASeqSrc * constSASS2BWTSASS(const SASeqSrc *baseClass) { return (const BWTSASeqSrc *) ((const char *)baseClass - offsetof(BWTSASeqSrc, baseClass)); } static inline SASeqSrc * BWTSASS2SASS(BWTSASeqSrc *bwtSASS) { return &bwtSASS->baseClass; } static inline const SASeqSrc * constBWTSASS2SASS(const BWTSASeqSrc *bwtSASS) { return &bwtSASS->baseClass; } static Definedunsignedlong BWTSASSGetRot0Pos(const struct SASeqSrc *baseClass) { Definedunsignedlong val = { BWTSeqTerminatorPos(constSASS2BWTSASS(baseClass)->bwtSeq), true }; return val; } static void gt_deleteBWTSeqSASS(struct SASeqSrc *baseClass) { destructSASeqSrc(baseClass); ListDo(BWTSeqReaderState, SASS2BWTSASS(baseClass)->readerStateList, gt_free(p)); gt_free(SASS2BWTSASS(baseClass)); } static size_t BWTSASSAccessOrigSeq(const void *state, Symbol *dest, unsigned long pos, size_t len) { const BWTSeqContextRetriever *ctxMap = state; gt_assert(state); gt_BWTSeqCRAccessSubseq(ctxMap, pos, len, dest); return len; } static MRAEnc * BWTSASSNewMRAEnc(const SASeqSrc *src) { const BWTSASeqSrc *bwtSASeqSrc; gt_assert(src); bwtSASeqSrc = constSASS2BWTSASS(src); return gt_MRAEncCopy(EISGetAlphabet(BWTSeqGetEncIdxSeq(bwtSASeqSrc->bwtSeq))); } static SeqDataReader BWTSASSCreateReader(SASeqSrc *src, enum sfxDataRequest request); SASeqSrc * gt_BWTSeqNewSASeqSrc(const BWTSeq *bwtSeq, const BWTSeqContextRetriever *ctxMap) { struct BWTSASeqSrc *newBWTSASeqSrc; gt_assert(bwtSeq); newBWTSASeqSrc = gt_malloc(sizeof (*newBWTSASeqSrc)); { RandomSeqAccessor origSeqAccess; if (ctxMap) { origSeqAccess.accessFunc = BWTSASSAccessOrigSeq; origSeqAccess.state = (void *)ctxMap; } else { origSeqAccess.accessFunc = NULL; origSeqAccess.state = NULL; } initSASeqSrc(&newBWTSASeqSrc->baseClass, BWTSeqLength(bwtSeq), NULL, BWTSASSCreateReader, BWTSASSGetRot0Pos, NULL, origSeqAccess, gt_deleteBWTSeqSASS, BWTSASSNewMRAEnc, NULL, NULL); /* since BWTSeq can regenerate * arbitrary portions of all * associated data (when reversibly * sorted) no generator is necessary * and all readers just keep their state */ } newBWTSASeqSrc->ctxMap = ctxMap; newBWTSASeqSrc->bwtSeq = bwtSeq; newBWTSASeqSrc->readerStateList = NULL; return &newBWTSASeqSrc->baseClass; } static size_t BWTSASSReadSufTab(SeqDataSrc src, void *dest, size_t len) { const BWTSeq *bwtSeq; struct extBitsRetrieval extBits; gt_assert(src); initExtBitsRetrieval(&extBits); bwtSeq = ((BWTSeqReaderState *)src)->backLink->bwtSeq; size_t i; unsigned long pos = ((BWTSeqReaderState *)src)->nextReadPos; for (i = 0; i < len; ++i) ((unsigned long *)dest)[i] = gt_BWTSeqLocateMatch(bwtSeq, pos + i, &extBits); ((BWTSeqReaderState *)src)->nextReadPos = pos + len; destructExtBitsRetrieval(&extBits); return len; } static SeqDataReader BWTSASSMakeSufTabReader(GT_UNUSED BWTSASeqSrc *bwtSASeqSrc, BWTSeqReaderState *state) { SeqDataReader reader = { state, BWTSASSReadSufTab }; return reader; } static size_t BWTSASSReadBWT(SeqDataSrc src, void *dest, size_t len) { const BWTSeq *bwtSeq; gt_assert(src); bwtSeq = ((BWTSeqReaderState *)src)->backLink->bwtSeq; size_t i; unsigned long pos = ((BWTSeqReaderState *)src)->nextReadPos; for (i = 0; i < len; ++i) ((Symbol *)dest)[i] = BWTSeqGetSym(bwtSeq, pos + i); ((BWTSeqReaderState *)src)->nextReadPos = pos + len; return len; } static SeqDataReader BWTSASSMakeBWTReader(GT_UNUSED BWTSASeqSrc *bwtSASeqSrc, BWTSeqReaderState *state) { SeqDataReader reader = { state, BWTSASSReadBWT }; return reader; } static BWTSeqReaderState * BWTSeqSASSAddReaderState(BWTSASeqSrc *bwtSASeqSrc) { BWTSeqReaderState *newReader = gt_malloc(sizeof (*newReader)); gt_assert(bwtSASeqSrc); newReader->backLink = bwtSASeqSrc; newReader->nextReadPos = 0; newReader->next = bwtSASeqSrc->readerStateList; bwtSASeqSrc->readerStateList = newReader; return newReader; } static SeqDataReader BWTSASSCreateReader(SASeqSrc *src, enum sfxDataRequest rtype) { struct seqDataReader reader = { NULL, NULL}; BWTSASeqSrc *bwtSASeqSrc; gt_assert(src); bwtSASeqSrc = SASS2BWTSASS(src); switch (rtype) { case SFX_REQUEST_SUFTAB: reader = BWTSASSMakeSufTabReader(bwtSASeqSrc, BWTSeqSASSAddReaderState(bwtSASeqSrc)); break; case SFX_REQUEST_BWTTAB: reader = BWTSASSMakeBWTReader(bwtSASeqSrc, BWTSeqSASSAddReaderState(bwtSASeqSrc)); break; default: fprintf(stderr, "error: unimplemented request: %d, %s: %d!\n", rtype, __FILE__, __LINE__); exit(GT_EXIT_PROGRAMMING_ERROR); } return reader; } genometools-1.5.1/src/match/eis-bwtseq-sass.h000066400000000000000000000020401211610345200211260ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_SASS_H #define EIS_BWTSEQ_SASS_H #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-context.h" #include "match/eis-sa-common.h" SASeqSrc * gt_BWTSeqNewSASeqSrc(const BWTSeq *bwtSeq, const BWTSeqContextRetriever *ctxMap); #endif genometools-1.5.1/src/match/eis-bwtseq-siop.h000066400000000000000000000217401211610345200211370ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_SIOP_H #define EIS_BWTSEQ_SIOP_H /* trivial operations on BWTSeq objects go here for speed */ #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-priv.h" #include "stamp.h" static inline const MRAEnc * BWTSeqGetAlphabet(const BWTSeq *seq) { return seq->alphabet; } static inline unsigned long BWTSeqLength(const BWTSeq *seq) { return EISLength(seq->seqIdx); } static inline unsigned long BWTSeqTerminatorPos(const BWTSeq *bwtSeq) { return bwtSeq->rot0Pos; } static inline bool BWTSeqHasLocateInformation(const BWTSeq *bwtSeq) { return bwtSeq->locateSampleInterval != 0; } static inline unsigned long BWTSeqTransformedOcc(const BWTSeq *bwtSeq, Symbol tsym, unsigned long pos) { gt_assert(bwtSeq); /* two counts must be treated specially: * 1. for the symbols mapped to the same value as the terminator * 2. for queries of the terminator itself */ if (tsym < bwtSeq->bwtTerminatorFallback) return EISSymTransformedRank(bwtSeq->seqIdx, tsym, pos, bwtSeq->hint); else if (tsym > bwtSeq->bwtTerminatorFallback && tsym != bwtSeq->alphabetSize - 1) return EISSymTransformedRank(bwtSeq->seqIdx, tsym, pos, bwtSeq->hint); else if (tsym == bwtSeq->bwtTerminatorFallback) return EISSymTransformedRank(bwtSeq->seqIdx, tsym, pos, bwtSeq->hint) - ((pos > BWTSeqTerminatorPos(bwtSeq))?1:0); else /* tsym == not flattened terminator == alphabetSize - 1 */ { gt_assert(tsym == bwtSeq->alphabetSize - 1); return (pos > BWTSeqTerminatorPos(bwtSeq))?1:0; } } static inline GtUlongPair BWTSeqTransformedPosPairOcc(const BWTSeq *bwtSeq, Symbol tSym, unsigned long posA, unsigned long posB) { gt_assert(bwtSeq); /* two counts must be treated specially: * 1. for the symbols mapped to the same value as the terminator * 2. for queries of the terminator itself */ if (tSym < bwtSeq->bwtTerminatorFallback) return EISSymTransformedPosPairRank(bwtSeq->seqIdx, tSym, posA, posB, bwtSeq->hint); else if (tSym > bwtSeq->bwtTerminatorFallback && tSym != bwtSeq->alphabetSize - 1) return EISSymTransformedPosPairRank(bwtSeq->seqIdx, tSym, posA, posB, bwtSeq->hint); else if (tSym == bwtSeq->bwtTerminatorFallback) return EISSymTransformedPosPairRank(bwtSeq->seqIdx, tSym, posA, posB, bwtSeq->hint); /* - ((pos > BWTSeqTerminatorPos(bwtSeq))?1:0); */ else /* tSym == not flattened terminator == alphabetSize - 1 */ { GtUlongPair occ; gt_assert(tSym == bwtSeq->alphabetSize - 1); occ.a = (posA > BWTSeqTerminatorPos(bwtSeq))?1:0; occ.b = (posB > BWTSeqTerminatorPos(bwtSeq))?1:0; return occ; } } static inline unsigned long BWTSeqOcc(const BWTSeq *bwtSeq, Symbol sym, unsigned long pos) { gt_assert(bwtSeq); Symbol tSym = MRAEncMapSymbol(BWTSeqGetAlphabet(bwtSeq), sym); return BWTSeqTransformedOcc(bwtSeq, tSym, pos); } static inline GtUlongPair BWTSeqPosPairOcc(const BWTSeq *bwtSeq, Symbol sym, unsigned long posA, unsigned long posB) { gt_assert(bwtSeq); Symbol tSym = MRAEncMapSymbol(BWTSeqGetAlphabet(bwtSeq), sym); return BWTSeqTransformedPosPairOcc(bwtSeq, tSym, posA, posB); } static inline void BWTSeqRangeOcc(const BWTSeq *bwtSeq, AlphabetRangeID range, unsigned long pos, unsigned long *rangeOccs) { gt_assert(bwtSeq && rangeOccs); gt_assert(range < MRAEncGetNumRanges(BWTSeqGetAlphabet(bwtSeq))); EISRangeRank(bwtSeq->seqIdx, range, pos, rangeOccs, bwtSeq->hint); if (range == bwtSeq->bwtTerminatorFallbackRange) { const MRAEnc *alphabet = BWTSeqGetAlphabet(bwtSeq); AlphabetRangeSize termIdx = MRAEncMapSymbol(alphabet, bwtTerminatorSym) - MRAEncGetRangeBase(alphabet, range), fbIdx = bwtSeq->bwtTerminatorFallback - MRAEncGetRangeBase(alphabet, range); if (pos > BWTSeqTerminatorPos(bwtSeq)) { rangeOccs[termIdx] = 1; --(rangeOccs[fbIdx]); } else rangeOccs[termIdx] = 0; } } static inline void BWTSeqPosPairRangeOcc(const BWTSeq *bwtSeq, AlphabetRangeID range, unsigned long posA, unsigned long posB, unsigned long *rangeOccs) { gt_assert(bwtSeq && rangeOccs); gt_assert(posA <= posB); gt_assert(range < MRAEncGetNumRanges(BWTSeqGetAlphabet(bwtSeq))); EISPosPairRangeRank(bwtSeq->seqIdx, range, posA, posB, rangeOccs, bwtSeq->hint); if (range == bwtSeq->bwtTerminatorFallbackRange) { const MRAEnc *alphabet = BWTSeqGetAlphabet(bwtSeq); AlphabetRangeSize rSize = MRAEncGetRangeSize(alphabet, range), termIdx = MRAEncMapSymbol(alphabet, bwtTerminatorSym) - MRAEncGetRangeBase(alphabet, range), fbIdx = bwtSeq->bwtTerminatorFallback - MRAEncGetRangeBase(alphabet, range); memmove(rangeOccs + termIdx + 1, rangeOccs + termIdx, sizeof (rangeOccs[0]) * (rSize - 1)); rangeOccs[termIdx] = rangeOccs[termIdx + rSize] = 0; if (posB > BWTSeqTerminatorPos(bwtSeq)) { rangeOccs[termIdx + rSize] = 1; --(rangeOccs[fbIdx + rSize]); if (posA > BWTSeqTerminatorPos(bwtSeq)) { rangeOccs[termIdx] = 1; --(rangeOccs[fbIdx]); } else rangeOccs[termIdx] = 0; } else rangeOccs[rSize + termIdx] = rangeOccs[termIdx] = 0; } } static inline unsigned long BWTSeqLFMap(const BWTSeq *bwtSeq, unsigned long LPos, struct extBitsRetrieval *extBits) { Symbol tSym = EISGetTransformedSym(bwtSeq->seqIdx, LPos, bwtSeq->hint); unsigned long FPos; const MRAEnc *alphabet = BWTSeqGetAlphabet(bwtSeq); if (LPos != BWTSeqTerminatorPos(bwtSeq)) { AlphabetRangeID range = MRAEncGetRangeOfSymbol(alphabet, tSym); switch (bwtSeq->rangeSort[range]) { case SORTMODE_VALUE: FPos = bwtSeq->count[tSym] + BWTSeqTransformedOcc(bwtSeq, tSym, LPos); break; case SORTMODE_RANK: FPos = bwtSeq->count[MRAEncGetRangeBase(alphabet, range)] + gt_BWTSeqGetRankSort(bwtSeq, LPos, range, extBits); break; case SORTMODE_UNDEFINED: default: #ifndef _NDEBUG fputs("Requesting LF-map for symbol from range of undefined sorting.\n", stderr); abort(); #endif FPos = (unsigned long)-1; break; } } else { gt_assert(tSym == bwtSeq->bwtTerminatorFallback); FPos = bwtSeq->count[bwtSeq->alphabetSize - 1]; } return FPos; } static inline unsigned long BWTSeqAggCount(const BWTSeq *bwtSeq, Symbol sym) { Symbol tSym; gt_assert(bwtSeq); gt_assert(MRAEncSymbolHasValidMapping(BWTSeqGetAlphabet(bwtSeq), sym)); tSym = MRAEncMapSymbol(BWTSeqGetAlphabet(bwtSeq), sym); return bwtSeq->count[tSym]; } static inline unsigned long BWTSeqAggTransformedCount(const BWTSeq *bwtSeq, Symbol tSym) { gt_assert(bwtSeq); gt_assert(tSym <= bwtSeq->alphabetSize); return bwtSeq->count[tSym]; } static inline struct matchBound * BWTSeqIncrMatch(const BWTSeq *bwtSeq, struct matchBound *limits, Symbol nextSym) { const MRAEnc *alphabet; Symbol curSym; gt_assert(bwtSeq && limits); gt_assert(limits->start < bwtSeq->count[bwtSeq->alphabetSize] && limits->end < bwtSeq->count[bwtSeq->alphabetSize]); alphabet = BWTSeqGetAlphabet(bwtSeq); curSym = MRAEncMapSymbol(alphabet, nextSym); gt_assert(MRAEncSymbolHasValidMapping(alphabet, curSym)); limits->start = bwtSeq->count[curSym] + BWTSeqTransformedOcc(bwtSeq, curSym, limits->start); limits->end = bwtSeq->count[curSym] + BWTSeqTransformedOcc(bwtSeq, curSym, limits->end); return limits; } static inline const EISeq * BWTSeqGetEncIdxSeq(const BWTSeq *bwtSeq) { gt_assert(bwtSeq); return bwtSeq->seqIdx; } static inline Symbol BWTSeqGetSym(const BWTSeq *bwtSeq, unsigned long pos) { gt_assert(bwtSeq); return EISGetSym(bwtSeq->seqIdx, pos, bwtSeq->hint); } static inline bool EMIGetNextMatch(struct BWTSeqExactMatchesIterator *iter, unsigned long *pos, const BWTSeq *bwtSeq) { if (iter->nextMatchBWTPos < iter->bounds.end) { /*printf("nextMatchBWTPos=%lu\n",(unsigned long) iter->nextMatchBWTPos);*/ *pos = gt_BWTSeqLocateMatch(bwtSeq, iter->nextMatchBWTPos, &iter->extBits); iter->nextMatchBWTPos++; return true; } else return false; } #endif genometools-1.5.1/src/match/eis-bwtseq.c000066400000000000000000000524271211610345200201700ustar00rootroot00000000000000/* Copyright (c) 2007,2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/assert_api.h" #include "match/dataalign.h" #include "core/error.h" #include "core/log.h" #include "core/str.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/undef_api.h" #include "core/yarandom.h" #include "match/eis-bitpackseqpos.h" #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-extinfo.h" #include "match/eis-bwtseq-param.h" #include "match/eis-bwtseq-priv.h" #include "match/eis-bwtseq-context.h" #include "match/eis-encidxseq.h" #include "match/eis-mrangealphabet.h" #include "match/eis-suffixerator-interface.h" #include "match/eis-suffixarray-interface.h" #include "match/esa-map.h" #include "match/sarr-def.h" /** * @param alphabet ownership of alphabet is with the newly produced * sequence object if return value is not 0 */ static int initBWTSeqFromEncSeqIdx(BWTSeq *bwtSeq, struct encIdxSeq *seqIdx, MRAEnc *alphabet, unsigned long *counts, enum rangeSortMode *rangeSort, const enum rangeSortMode *defaultRangeSort) { size_t alphabetSize; Symbol bwtTerminatorFlat; EISHint hint; gt_assert(bwtSeq && seqIdx); bwtSeq->alphabet = alphabet; alphabetSize = gt_MRAEncGetSize(alphabet); if (!alphabetSize) /* weird error, shouldn't happen, but I prefer error return to * segfault in case someone tampered with the input */ return 0; /* FIXME: this should probably be handled in chardef.h to have a * unique mapping */ /* FIXME: this assumes there is exactly two ranges */ gt_MRAEncAddSymbolToRange(alphabet, bwtTerminatorSym, 1); gt_assert(gt_MRAEncGetSize(alphabet) == alphabetSize + 1); alphabetSize = gt_MRAEncGetSize(alphabet); bwtSeq->bwtTerminatorFallback = bwtTerminatorFlat = MRAEncMapSymbol(alphabet, UNDEFBWTCHAR); bwtSeq->bwtTerminatorFallbackRange = 1; bwtSeq->count = counts; bwtSeq->rangeSort = rangeSort; bwtSeq->seqIdx = seqIdx; bwtSeq->alphabetSize = alphabetSize; bwtSeq->hint = hint = newEISHint(seqIdx); { Symbol i; unsigned long len = EISLength(seqIdx), *count = bwtSeq->count; count[0] = 0; for (i = 0; i < bwtTerminatorFlat; ++i) count[i + 1] = count[i] + EISSymTransformedRank(seqIdx, i, len, hint); /* handle character which the terminator has been mapped to specially */ count[i + 1] = count[i] + EISSymTransformedRank(seqIdx, i, len, hint) - 1; gt_assert(count[i + 1] >= count[i]); /* now we can finish the rest of the symbols */ for (i += 2; i < alphabetSize; ++i) count[i] = count[i - 1] + EISSymTransformedRank(seqIdx, i - 1, len, hint); /* and finally place the 1-count for the terminator */ count[i] = count[i - 1] + 1; #ifdef EIS_DEBUG gt_log_log("count[alphabetSize]=%lu, len=%lu",count[alphabetSize], len); for (i = 0; i <= alphabetSize; ++i) gt_log_log("count[%u]=%lu", (unsigned)i, count[i]); #endif gt_assert(count[alphabetSize] == len); } gt_BWTSeqInitLocateHandling(bwtSeq, defaultRangeSort); return 1; } /** * @param alphabet ownership of alphabet is with the newly produced * sequence object if return value is non-NULL */ BWTSeq * gt_newBWTSeq(EISeq *seqIdx, MRAEnc *alphabet, const enum rangeSortMode *defaultRangeSort) { BWTSeq *bwtSeq; unsigned long *counts; size_t countsOffset, rangeSortOffset, totalSize; enum rangeSortMode *rangeSort; unsigned alphabetSize; gt_assert(seqIdx); /* alphabetSize is increased by one to handle the flattened * terminator symbol correctly */ alphabetSize = gt_MRAEncGetSize(alphabet) + 1; countsOffset = offsetAlign(sizeof (struct BWTSeq), sizeof (unsigned long)); rangeSortOffset = offsetAlign(countsOffset + sizeof (unsigned long) * (alphabetSize + 1), sizeof (enum rangeSortMode)); totalSize = rangeSortOffset + sizeof (enum rangeSortMode) * MRAEncGetNumRanges(alphabet); bwtSeq = gt_malloc(totalSize); bwtSeq->pckbuckettable = NULL; counts = (unsigned long *)((char *)bwtSeq + countsOffset); rangeSort = (enum rangeSortMode *)((char *)bwtSeq + rangeSortOffset); if (!initBWTSeqFromEncSeqIdx(bwtSeq, seqIdx, alphabet, counts, rangeSort, defaultRangeSort)) { gt_free(bwtSeq); bwtSeq = NULL; } return bwtSeq; } void gt_deleteBWTSeq(BWTSeq *bwtSeq) { gt_MRAEncDelete(bwtSeq->alphabet); deleteEISHint(bwtSeq->seqIdx, bwtSeq->hint); gt_deleteEncIdxSeq(bwtSeq->seqIdx); gt_free(bwtSeq); } typedef struct { const Mbtab **mbtab; unsigned int numofchars, maxdepth, depth; GtCodetype code; } GtPrebwtstate; static const Mbtab *gt_prebwt_next(GtPrebwtstate *prebwt,unsigned int cc) { prebwt->code = prebwt->code * prebwt->numofchars + cc; prebwt->depth++; return prebwt->mbtab[prebwt->depth] + prebwt->code; } static inline void getMatchBound(const BWTSeq *bwtSeq, const Symbol *query, size_t queryLen, struct matchBound *match, bool forward) { const Symbol *qptr, *qend; unsigned int cc; const Mbtab *mbptr; GtPrebwtstate prebwt; gt_assert(bwtSeq && query); if (forward) { qptr = query; qend = query + queryLen; } else { qptr = query + queryLen - 1; qend = query - 1; } gt_assert(ISNOTSPECIAL(*qptr)); cc = (unsigned int) *qptr; prebwt.mbtab = gt_bwtseq2mbtab((const FMindex *) bwtSeq); if (prebwt.mbtab != NULL) { prebwt.numofchars = gt_bwtseq2numofchars((const FMindex *) bwtSeq); prebwt.maxdepth = gt_bwtseq2maxdepth((const FMindex *) bwtSeq); prebwt.code = 0; prebwt.depth = 0; mbptr = gt_prebwt_next(&prebwt,cc); match->start = mbptr->lowerbound; match->end = mbptr->upperbound; } else { prebwt.numofchars = GT_UNDEF_UINT; prebwt.maxdepth = GT_UNDEF_UINT; prebwt.code = 0; prebwt.depth = GT_UNDEF_UINT; match->start = bwtSeq->count[cc]; match->end = bwtSeq->count[cc + 1]; } qptr = forward ? (qptr+1) : (qptr-1); while (match->start < match->end && qptr != qend) { GtUlongPair occPair; gt_assert(ISNOTSPECIAL(*qptr)); cc = (unsigned int) *qptr; if (prebwt.mbtab != NULL && prebwt.depth < prebwt.maxdepth) { mbptr = gt_prebwt_next(&prebwt,cc); match->start = mbptr->lowerbound; match->end = mbptr->upperbound; } else { occPair = BWTSeqTransformedPosPairOcc(bwtSeq, (Symbol) cc, match->start, match->end); match->start = bwtSeq->count[cc] + occPair.a; match->end = bwtSeq->count[cc] + occPair.b; } qptr = forward ? (qptr+1) : (qptr-1); } } unsigned long gt_packedindexuniqueforward(const BWTSeq *bwtSeq, const GtUchar *qstart, const GtUchar *qend) { GtUchar cc; const GtUchar *qptr; struct matchBound bwtbound; GtUlongPair seqpospair; Symbol curSym; const MRAEnc *alphabet; gt_assert(bwtSeq && qstart); alphabet = BWTSeqGetAlphabet(bwtSeq); qptr = qstart; cc = *qptr++; #undef SKDEBUG #ifdef SKDEBUG printf("# start cc=%u\n",cc); #endif if (ISSPECIAL(cc)) { return 0; } curSym = MRAEncMapSymbol(alphabet, cc); bwtbound.start = bwtSeq->count[curSym]; bwtbound.end = bwtSeq->count[curSym+1]; #ifdef SKDEBUG printf("# bounds=%lu,%lu = %lu" "occurrences\n", bwtbound.start, bwtbound.end, bwtbound.end - bwtbound.start); #endif while (qptr < qend && bwtbound.start + 1 < bwtbound.end) { cc = *qptr; #ifdef SKDEBUG printf("# cc=%u\n",cc); #endif if (ISSPECIAL (cc)) { return 0; } curSym = MRAEncMapSymbol(alphabet, cc); seqpospair = BWTSeqTransformedPosPairOcc(bwtSeq, curSym, bwtbound.start,bwtbound.end); bwtbound.start = bwtSeq->count[curSym] + seqpospair.a; bwtbound.end = bwtSeq->count[curSym] + seqpospair.b; #ifdef SKDEBUG printf("# bounds=%lu,%lu = %lu" "occurrences\n", bwtbound.start, bwtbound.end, bwtbound.end - bwtbound.start); #endif qptr++; } if (bwtbound.start + 1 == bwtbound.end) { return (unsigned long) (qptr - qstart); } return 0; } unsigned long gt_packedindexmstatsforward(const BWTSeq *bwtSeq, unsigned long *witnessleftbound, const GtUchar *qstart, const GtUchar *qend) { GtUchar cc; const GtUchar *qptr; unsigned long prevlbound; struct matchBound bwtbound; GtUlongPair seqpospair; Symbol curSym; unsigned long matchlength; const MRAEnc *alphabet; gt_assert(bwtSeq && qstart && qstart < qend); alphabet = BWTSeqGetAlphabet(bwtSeq); qptr = qstart; cc = *qptr; #undef SKDEBUG #ifdef SKDEBUG printf("# start cc=%u\n",cc); #endif if (ISSPECIAL(cc)) { return 0; } curSym = MRAEncMapSymbol(alphabet, cc); bwtbound.start = bwtSeq->count[curSym]; bwtbound.end = bwtSeq->count[curSym+1]; if (bwtbound.start >= bwtbound.end) { return 0; } #ifdef SKDEBUG printf("# bounds=%lu,%lu = %lu" "occurrences\n", bwtbound.start, bwtbound.end, bwtbound.end - bwtbound.start); #endif prevlbound = bwtbound.start; for (qptr++; qptr < qend; qptr++) { cc = *qptr; #ifdef SKDEBUG printf("# cc=%u\n",cc); #endif if (ISSPECIAL (cc)) { break; } curSym = MRAEncMapSymbol(alphabet, cc); seqpospair = BWTSeqTransformedPosPairOcc(bwtSeq, curSym, bwtbound.start,bwtbound.end); bwtbound.start = bwtSeq->count[curSym] + seqpospair.a; bwtbound.end = bwtSeq->count[curSym] + seqpospair.b; #ifdef SKDEBUG printf("# bounds=%lu,%lu = %lu" "occurrences\n", bwtbound.start, bwtbound.end, bwtbound.end - bwtbound.start); #endif if (bwtbound.start >= bwtbound.end) { break; } prevlbound = bwtbound.start; } matchlength = (unsigned long) (qptr - qstart); if (witnessleftbound != NULL) { *witnessleftbound = prevlbound; } return matchlength; } unsigned long gt_BWTSeqMatchCount(const BWTSeq *bwtSeq, const Symbol *query, size_t queryLen, bool forward) { struct matchBound match; gt_assert(bwtSeq && query); getMatchBound(bwtSeq, query, queryLen, &match, forward); if (match.end < match.start) return 0; else return match.end - match.start; } bool gt_initEMIterator(BWTSeqExactMatchesIterator *iter, const BWTSeq *bwtSeq, const Symbol *query, size_t queryLen, bool forward) { gt_assert(iter && bwtSeq && query); if (!bwtSeq->locateSampleInterval) { fputs("Index does not contain locate information.\n" "Localization of matches impossible!", stderr); return false; } getMatchBound(bwtSeq, query, queryLen, &iter->bounds, forward); iter->nextMatchBWTPos = iter->bounds.start; initExtBitsRetrieval(&iter->extBits); return true; } bool gt_initEmptyEMIterator(BWTSeqExactMatchesIterator *iter, const BWTSeq *bwtSeq) { gt_assert(iter && bwtSeq); if (!bwtSeq->locateSampleInterval) { fputs("Index does not contain locate information.\n" "Localization of matches impossible!", stderr); return false; } iter->bounds.start = iter->bounds.end = iter->nextMatchBWTPos = 0; initExtBitsRetrieval(&iter->extBits); return true; } struct BWTSeqExactMatchesIterator * gt_newEMIterator(const BWTSeq *bwtSeq, const Symbol *query, size_t queryLen, bool forward) { struct BWTSeqExactMatchesIterator *iter; gt_assert(bwtSeq && query); iter = gt_malloc(sizeof (*iter)); if (gt_initEMIterator(iter, bwtSeq, query, queryLen,forward)) { return iter; } gt_free(iter); return NULL; } bool gt_reinitEMIterator(BWTSeqExactMatchesIterator *iter, const BWTSeq *bwtSeq, const Symbol *query, size_t queryLen, bool forward) { getMatchBound(bwtSeq, query, queryLen, &iter->bounds, forward); iter->nextMatchBWTPos = iter->bounds.start; return true; } void gt_destructEMIterator(struct BWTSeqExactMatchesIterator *iter) { destructExtBitsRetrieval(&iter->extBits); } void gt_deleteEMIterator(struct BWTSeqExactMatchesIterator *iter) { gt_free(iter); } unsigned long gt_EMINumMatchesTotal(const struct BWTSeqExactMatchesIterator *iter) { gt_assert(iter); if (iter->bounds.start > iter->bounds.end) return 0; else return iter->bounds.end - iter->bounds.start; } unsigned long gt_EMINumMatchesLeft(const struct BWTSeqExactMatchesIterator *iter) { gt_assert(iter); if (iter->nextMatchBWTPos > iter->bounds.end) return 0; else return iter->bounds.end - iter->bounds.start; } enum { MAX_CONTEXT_LEN = 1000, MIN_CONTEXT_LEN = 1, CONTEXT_FRACTION = 128, MAX_NUM_CONTEXT_CHECKS = 1000, CONTEXT_INTERVAL = 128, }; int gt_BWTSeqVerifyIntegrity(BWTSeq *bwtSeq, const char *projectName, int checkFlags, unsigned long tickPrint, FILE *fp, GtLogger *verbosity, GtError *err) { Suffixarray suffixArray; struct extBitsRetrieval extBits; bool suffixArrayIsInitialized = false, extBitsAreInitialized = false; enum verifyBWTSeqErrCode retval = VERIFY_BWTSEQ_NO_ERROR; do { unsigned long seqLen; gt_assert(bwtSeq && projectName && err); gt_error_check(err); initExtBitsRetrieval(&extBits); extBitsAreInitialized = true; if (gt_mapsuffixarray(&suffixArray, SARR_SUFTAB | SARR_ESQTAB, projectName, verbosity, err)) { gt_error_set(err, "Cannot load reference suffix array project with" " demand for suffix table file and encoded sequence" " for project: %s", projectName); retval = VERIFY_BWTSEQ_REFLOAD_ERROR; break; } suffixArrayIsInitialized = true; seqLen = gt_encseq_total_length(suffixArray.encseq) + 1; if (BWTSeqLength(bwtSeq) != seqLen) { gt_error_set(err, "length mismatch for suffix array project %s and " "bwt sequence index", projectName); retval = VERIFY_BWTSEQ_LENCOMPARE_ERROR; break; } if (checkFlags & VERIFY_BWTSEQ_SUFVAL && BWTSeqHasLocateInformation(bwtSeq)) { unsigned long i; for (i = 0; i < seqLen && retval == VERIFY_BWTSEQ_NO_ERROR; ++i) { if (gt_BWTSeqPosHasLocateInfo(bwtSeq, i, &extBits)) { unsigned long sfxArrayValue = gt_BWTSeqLocateMatch(bwtSeq, i, &extBits); if (sfxArrayValue != ESASUFFIXPTRGET(suffixArray.suftab,i)) { gt_error_set(err, "Failed suffix array value comparison" " at position %lu: %lu != %lu", i, sfxArrayValue, ESASUFFIXPTRGET(suffixArray.suftab,i)); retval = VERIFY_BWTSEQ_SUFVAL_ERROR; break; } } if (tickPrint && !((i + 1) % tickPrint)) putc('.', fp); } if (tickPrint) putc('\n', fp); if (retval != VERIFY_BWTSEQ_NO_ERROR) break; } else if (checkFlags & VERIFY_BWTSEQ_SUFVAL) { gt_error_set(err, "check of suffix array values was requested," " but index contains no locate information!"); retval = VERIFY_BWTSEQ_SUFVAL_ERROR; break; } else if (!(checkFlags & VERIFY_BWTSEQ_SUFVAL) && BWTSeqHasLocateInformation(bwtSeq)) { fputs("Not checking suftab values.\n", stderr); } if (BWTSeqHasLocateInformation(bwtSeq)) { unsigned long nextLocate = BWTSeqTerminatorPos(bwtSeq); if (suffixArray.longest.defined && suffixArray.longest.valueunsignedlong != nextLocate) { gt_error_set(err, "terminator/0-rotation position mismatch %lu" " vs. %lu", suffixArray.longest.valueunsignedlong, nextLocate); retval = VERIFY_BWTSEQ_TERMPOS_ERROR; break; } if ((checkFlags & VERIFY_BWTSEQ_LFMAPWALK) && (bwtSeq->featureToggles & BWTReversiblySorted)) { unsigned long i = seqLen; /* handle first symbol specially because the encseq * will not return the terminator symbol */ { Symbol sym = BWTSeqGetSym(bwtSeq, nextLocate); if (sym != UNDEFBWTCHAR) { gt_error_set(err, "symbol mismatch at position %lu: " "%d vs. reference symbol %d", i - 1, (int)sym, (int)UNDEFBWTCHAR); retval = VERIFY_BWTSEQ_LFMAPWALK_ERROR; break; } --i; nextLocate = BWTSeqLFMap(bwtSeq, nextLocate, &extBits); } while (i > 0) { Symbol symRef = gt_encseq_get_encoded_char(suffixArray.encseq, --i, suffixArray.readmode); Symbol symCmp = BWTSeqGetSym(bwtSeq, nextLocate); if (symCmp != symRef) { gt_error_set(err, "symbol mismatch at position %lu: " "%d vs. reference symbol %d", i, symCmp, symRef); retval = VERIFY_BWTSEQ_LFMAPWALK_ERROR; break; } nextLocate = BWTSeqLFMap(bwtSeq, nextLocate, &extBits); } if (retval != VERIFY_BWTSEQ_NO_ERROR) break; } else if ((checkFlags & VERIFY_BWTSEQ_LFMAPWALK) && !(bwtSeq->featureToggles & BWTReversiblySorted)) { gt_error_set(err, "requested complete backwards regeneration in index" " without regeneration capability"); retval = VERIFY_BWTSEQ_LFMAPWALK_IMP_ERROR; break; } } if (checkFlags & VERIFY_BWTSEQ_CONTEXT) { BWTSeqContextRetriever *bwtSeqCR = gt_BWTSeqCRLoad(bwtSeq, projectName, CTX_MAP_ILOG_AUTOSIZE); if (!bwtSeqCR) { gt_error_set(err, "cannot load BWT sequence context access table" " for project %s", projectName); retval = VERIFY_BWTSEQ_CONTEXT_LOADFAIL; break; } fputs("Checking context regeneration.\n", stderr); { unsigned long i, start, subSeqLen, maxSubSeqLen = MIN(MAX(MIN_CONTEXT_LEN, seqLen/CONTEXT_FRACTION), MAX_CONTEXT_LEN), numTries = MIN(MAX_NUM_CONTEXT_CHECKS, MAX(2, seqLen/CONTEXT_INTERVAL)); Symbol *contextBuf = gt_malloc(sizeof (Symbol) * MAX_CONTEXT_LEN); GtEncseqReader *esr = gt_encseq_create_reader_with_readmode(suffixArray.encseq, suffixArray.readmode, 0); for (i = 0; i < numTries && retval == VERIFY_BWTSEQ_NO_ERROR; ++i) { unsigned long j, end, inSubSeqLen; subSeqLen = random()%maxSubSeqLen + 1; start = random()%(seqLen - subSeqLen + 1); end = start + subSeqLen; inSubSeqLen = subSeqLen - ((end==seqLen)?1:0); gt_BWTSeqCRAccessSubseq(bwtSeqCR, start, subSeqLen, contextBuf); gt_encseq_reader_reinit_with_readmode(esr, suffixArray.encseq, suffixArray.readmode, start); for (j = 0; j < inSubSeqLen; ++j) { Symbol symRef = gt_encseq_reader_next_encoded_char(esr); Symbol symCmp = contextBuf[j]; if (symCmp != symRef) { gt_error_set(err, "symbol mismatch at position %lu: " "%d vs. reference symbol %d", start + j, (int)symCmp, (int)symRef); retval = VERIFY_BWTSEQ_CONTEXT_SYMFAIL; break; } } while (j < subSeqLen) { Symbol symRef = UNDEFBWTCHAR; Symbol symCmp = contextBuf[j]; if (symCmp != symRef) { gt_error_set(err, "symbol mismatch at position %lu: " "%d vs. reference symbol %d", start + j, (int)symCmp, (int)symRef); retval = VERIFY_BWTSEQ_CONTEXT_SYMFAIL; break; } ++j; } } if (retval == VERIFY_BWTSEQ_NO_ERROR) fputs("Context regeneration completed successfully.\n", stderr); gt_encseq_reader_delete(esr); gt_free(contextBuf); } gt_deleteBWTSeqCR(bwtSeqCR); } } while (0); if (suffixArrayIsInitialized) gt_freesuffixarray(&suffixArray); if (extBitsAreInitialized) destructExtBitsRetrieval(&extBits); return retval; } genometools-1.5.1/src/match/eis-bwtseq.h000066400000000000000000000464051211610345200201740ustar00rootroot00000000000000/* Copyright (c) 2007,2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_BWTSEQ_H #define EIS_BWTSEQ_H /** * \file eis-bwtseq.h * Interface definitions for querying an indexed representation of the * BWT of a sequence as presented by Manzini and Ferragina (Compressed * Representations of Sequences and Full-Text Indexes, 2006) */ #include "core/error.h" #include "core/str.h" #include "core/logger.h" #include "match/eis-encidxseq.h" #include "match/eis-mrangealphabet.h" #include "match/eis-bwtseq-param.h" /* TODO: * - implement other index types */ /** * Defines mode by which to derive sort of symbols in particular ranges */ enum rangeSortMode { SORTMODE_VALUE = 0, SORTMODE_UNDEFINED = 1, SORTMODE_RANK = 2, }; /** * Stores column indices of the (virtual) matrix of rotations of the * input string used to construct the BWT, note that upper will * typically contain the lower value since rows are numbered from 0 at * the top to n-1 at the bottom. */ struct matchBound { unsigned long start, /**< index of first boundary row */ end; /**< index of second boundary row */ }; /** Object holding a BWT sequence index */ typedef struct BWTSeq BWTSeq; /** Iterator of Matches produced by a search query from a BWT * sequence index */ typedef struct BWTSeqExactMatchesIterator BWTSeqExactMatchesIterator; /** * \brief Creates or loads an encoded indexed sequence object of the * BWT transform. * @param params a struct holding parameter information for index construction * @param err genometools error object reference * @return reference to new BWT sequence object */ BWTSeq * gt_availBWTSeq(const struct bwtParam *params, GtLogger *verbosity, GtError*); /** * \brief Creates an encoded indexed sequence object of the BWT * transform by translating the information in a pre-existing suffix * array. * @param params a struct holding parameter information for index construction * @param err genometools error object reference * @return reference to new BWT sequence object */ BWTSeq * gt_trSuftab2BWTSeq(const struct bwtParam *params, GtLogger *verbosity, GtError *err); /** * \brief Loads an encoded indexed sequence object of the * BWT transform. * @param projectName * @param BWTOptFlags Selects in-memory features of sequence index to * use, see enum BWTOptionDefaultsOptimizationFlags for possible settings. * @param err genometools error object reference * @return reference to new BWT sequence object */ BWTSeq * gt_loadBWTSeq(const char *projectName, int BWTOptFlags, GtLogger *verbosity, GtError *err); /** * \brief Deallocate a previously loaded/created BWT sequence object. * @param bwtseq reference of object to delete */ void gt_deleteBWTSeq(BWTSeq *bwtseq); /** * \brief Query BWT sequence object for availability of added * information to locate matches. * @param bwtSeq reference of object to query * @return 0 if no locate information is present, non-zero otherwise */ static inline bool BWTSeqHasLocateInformation(const BWTSeq *bwtSeq); /** * \brief Retrieve alphabet transformation from BWT sequence object * @param bwtSeq reference of object to query for alphabet * @return read-only reference of alphabet associated with sequence */ static inline const MRAEnc * BWTSeqGetAlphabet(const BWTSeq *bwtSeq); /** * \brief Retrieve sequence index in which the BWT is stored * @param bwtSeq reference of object to query for index * @return read-only reference of index containing the sequence */ static inline const EISeq * BWTSeqGetEncIdxSeq(const BWTSeq *bwtSeq); /** * \brief Retrieve Symbol at given position in BWT * @param bwtSeq reference of object to query for index * @return read-only reference of index containing the sequence */ static inline Symbol BWTSeqGetSym(const BWTSeq *bwtSeq, unsigned long pos); /** * \brief Query length of stored sequence. * @param bwtSeq reference of object to query * @return length of sequence */ static inline unsigned long BWTSeqLength(const BWTSeq *bwtSeq); /** * @brief Query position of rotation 0 in suffix array (aka * longest) which also is the position of the terminator symbol in the * BWT. * @param bwtSeq reference of object to query * @return position of terminator */ static inline unsigned long BWTSeqTerminatorPos(const BWTSeq *bwtSeq); /** * \brief Query BWT sequence for the number of occurences of a symbol in a * given prefix. * @param bwtSeq reference of object to query * @param tSym transformed symbol (as obtained by * MRAEncMapSymbol(BWTSeqGetAlphabet(bwtSeq), origSym) * @param pos right bound of BWT prefix queried * @return number of occurrences of symbol up to but not including pos */ static inline unsigned long BWTSeqTransformedOcc(const BWTSeq *bwtSeq, Symbol tSym, unsigned long pos); /** * \brief Query BWT sequence for the number of occurences of a symbol in a * given prefix. * @param bwtSeq reference of object to query * @param sym symbol (from original alphabet) * @param pos right bound of BWT prefix queried * @return number of occurrences of symbol up to but not including pos */ static inline unsigned long BWTSeqOcc(const BWTSeq *bwtSeq, Symbol sym, unsigned long pos); /** * \brief Query BWT sequence for the number of occurences of a symbol * in two given prefixes. * @param bwtSeq reference of object to query * @param tSym transformed symbol (as obtained by * MRAEncMapSymbol(BWTSeqGetAlphabet(bwtSeq), origSym) * @param posA right bound of first BWT prefix queried * @param posA right bound of second BWT prefix queried * @return number of occurrences of symbol up to but not including * posA and posB respectively in fields a and b of returned struct */ static inline GtUlongPair BWTSeqTransformedPosPairOcc(const BWTSeq *bwtSeq, Symbol tSym, unsigned long posA, unsigned long posB); /** * \brief Query BWT sequence for the number of occurences of a symbol * in two given prefixes. * @param bwtSeq reference of object to query * @param sym symbol (from original alphabet) * @param posA right bound of first BWT prefix queried * @param posB right bound of second BWT prefix queried * @return number of occurrences of symbol up to but not including * posA and posB respectively in fields a and b of returned struct */ static inline GtUlongPair BWTSeqPosPairOcc(const BWTSeq *bwtSeq, Symbol sym, unsigned long posA, unsigned long posB); /** * \brief Query BWT sequence for the number of occurences of all symbols in a * given alphabet range and BWT sequence prefix. * @param bwtSeq reference of object to query * @param range range of symbols in alphabet to query * @param pos right bound of BWT prefix queried * @param rangeOccs occurrence counts for all symbols in range are written to * this array. The referenced memory must be sized appropriately to * accomodate as many symbols as are in range (MRAEncGetRangeSize if * in doubt) and rangeOccs[i] will hold the occurrence count of symbol * MRAEncRevMapSymbol(alphabet, i + MRAEncGetRangeBase(alphabet, range)) */ static inline void BWTSeqRangeOcc(const BWTSeq *bwtSeq, AlphabetRangeID range, unsigned long pos, unsigned long *rangeOccs); /* XXX: range 0 for range = 0 for regular symbols; unsigned long rangeOcc[4]; */ /** * \brief Query BWT sequence for the number of occurences of all symbols in a * given alphabet range and two BWT sequence prefixes. * @param bwtSeq reference of object to query * @param range range of symbols in alphabet to query * @param posA right bound of first BWT prefix queried * @param posB right bound of second BWT prefix queried * @param rangeOccs occurrence counts for all symbols in range are written to * this array. The referenced memory must be sized appropriately to * accomodate two-times as many positions symbols as are in range * (use MRAEncGetRangeSize if in doubt) and rangeOccs[i] will hold the * occurrence count of symbol * MRAEncRevMapSymbol(alphabet, i + MRAEncGetRangeBase(alphabet, range)) * up to position posA while the corresponding is true for * rangeOccs[rangeSize + i] concerning posB */ static inline void BWTSeqPosPairRangeOcc(const BWTSeq *bwtSeq, AlphabetRangeID range, unsigned long posA, unsigned long posB, unsigned long *rangeOccs); /** * \brief Given a position in the L-column of the matrix of rotations, * find the corresponding row in the F-column. * @param bwtSeq reference of object to query * @param pos row index for L-column * @param extBits modified in intermediate queries * @return index of corresponding row F-column */ static inline unsigned long BWTSeqLFMap(const BWTSeq *bwtSeq, unsigned long pos, struct extBitsRetrieval *extBits); /** * \brief Given a symbol, query the aggregate count of symbols with * lower index, this corresponds to the first row in the C-column of * standard literature on the BWT on which the given symbol is found. * @param bwtSeq reference of object to query * @param sym symbol to query counts sum for * @return aggregate count */ static inline unsigned long BWTSeqAggCount(const BWTSeq *bwtSeq, Symbol sym); /** * \brief Given a symbol, query the aggregate count of symbols with * lower index. * * This corresponds to the first row in the C-column of * standard literature on the BWT on which the given symbol is found, * this function takes a symbol already transformed into the stored * alphabet as argument. * * @param bwtSeq reference of object to query * @param tSym symbol to query counts sum for * reference for core functions @return aggregate count */ static inline unsigned long BWTSeqAggTransformedCount(const BWTSeq *bwtSeq, Symbol tSym); /** * \brief Given a query string find number of matches in original * sequence (of which the sequence object is a BWT). * @param bwtSeq reference of object to query * @param query symbol string to search matches for * @param queryLen length of query string * @param forward direction of processing the query * @return number of matches */ unsigned long gt_BWTSeqMatchCount(const BWTSeq *bwtSeq, const Symbol *query, size_t queryLen, bool forward); /** * \brief Given a pair of limiting positions in the suffix array and a * symbol, compute the interval reached by matching one symbol further. * @param bwtSeq reference of sequence index to query * @param nextSym symbol by which to further restrict match * @param limits current restriction of match interval * @return limits, with bounds adjusted */ static inline struct matchBound * BWTSeqIncrMatch(const BWTSeq *bwtSeq, struct matchBound *limits, Symbol nextSym); /** * GtError conditions encountered upon integrity check. */ enum verifyBWTSeqErrCode { VERIFY_BWTSEQ_NO_ERROR = 0, /**< every check completed okay */ VERIFY_BWTSEQ_REFLOAD_ERROR = -1, /**< failed to load suffix array for * reference comparisons */ VERIFY_BWTSEQ_LENCOMPARE_ERROR = -2, /* lengths of bwt sequence * index and loaded suffix arry * don't match */ VERIFY_BWTSEQ_SUFVAL_ERROR = -3, /**< a marked suffix array value * stored in the bwt sequence index * does not match the value read directly * from the suffix array table */ VERIFY_BWTSEQ_LFMAPWALK_ERROR = -4, /**< while traversing the bwt * sequence in reverse original sequence * order, the symbol retrieved * does not match the * corresponding symbol in the * encoded sequence */ VERIFY_BWTSEQ_LFMAPWALK_IMP_ERROR = -5, /**< original sequence * regeneration was * requested, * but is impossible */ VERIFY_BWTSEQ_TERMPOS_ERROR = -6, /**< the position of the * 0-rotation does not match */ VERIFY_BWTSEQ_CONTEXT_SYMFAIL = -7, /**< context regeneration * delivered an incorrect symbol */ VERIFY_BWTSEQ_CONTEXT_LOADFAIL = -8, /**< context regeneration * is impossible because the * context failed to load */ }; enum verifyBWTSeqFlags { VERIFY_BWTSEQ_SUFVAL = 1 << 0, /**< check stored suffix arrays */ VERIFY_BWTSEQ_LFMAPWALK = 1 << 1, /**< performs full backwards * regeneration of original * sequence (if possible) */ VERIFY_BWTSEQ_CONTEXT = 1 << 2, /**< try some random context * regenerations */ }; /** * \brief Perform various checks on the burrows wheeler transform * * - inspect all sampled suffix array values for equality with * corresponding value of mapped reference suffix array * - check wether the last-to-first traversal of the BWT sequence * index delivers the reversed encoded sequence * * @param bwtSeq index to check * @param projectName suffix array to load as reference * @param tickPrint print a dot every time tickPrint many symbols have * been processed * @param fp dots printed to this file */ enum verifyBWTSeqErrCode gt_BWTSeqVerifyIntegrity(BWTSeq *bwtSeq, const char *projectName, int checkFlags, unsigned long tickPrint, FILE *fp, GtLogger *verbosity, GtError *err); /** * \brief Given a query string produce iterator for all matches in * original sequence (of which the sequence object is a BWT). * * Warning: the iterator object will become invalid once the * corresponding bwt sequence object has been deleted. * * Warning: user must manage storage of iter manually * * @param iter points to storage for iterator * @param bwtSeq reference of bwt sequence object to use for matching * @param query symbol string to search matches for * @param queryLen length of query string * @param forward direction of processing the query * @return true if successfully initialized, false on error */ bool gt_initEMIterator(BWTSeqExactMatchesIterator *iter, const BWTSeq *bwtSeq, const Symbol *query, size_t queryLen, bool forward); /** * \brief Only initializes empty iterator for given * sequence object. * * Warning: the iterator object will become invalid once the * corresponding bwt sequence object has been deleted. * * Warning: user must manage storage of iter manually * @param iter points to storage for iterator * @param bwtSeq reference of bwt sequence object to use for matching * @return true if successfully initialized, false on error */ bool gt_initEmptyEMIterator(BWTSeqExactMatchesIterator *iter, const BWTSeq *bwt); /** * \brief Set up iterator for new query, iter must have been * initialized previously. Everything else is identical to * gt_initEMIterator. * * Warning: the iterator object will become invalid once the * corresponding bwt sequence object has been deleted. * @param iter points to storage for iterator * @param bwtSeq reference of bwt sequence object to use for matching * @param query symbol string to search matches for * @param queryLen length of query string * @param forward direction of processing the query * @return true if successfully initialized, false on error */ bool gt_reinitEMIterator(BWTSeqExactMatchesIterator *iter, const BWTSeq *bwtSeq, const Symbol *query, size_t queryLen, bool forward); /** * \brief Destruct resources of matches iterator. Does not free the * storage of iterator itself. * Warning: user must manage storage of iter manually * @param iter reference to matches iterator */ void gt_destructEMIterator(struct BWTSeqExactMatchesIterator *iter); /** * \brief Given a query string produce iterator for all matches in * original sequence (of which the sequence object is a BWT). * * Warning: the iterator object will become invalid once the * corresponding bwt sequence object has been deleted. * @param bwtSeq reference of bwt sequence object to use for matching * @param query symbol string to search matches for * @param queryLen length of query string * @param forward direction of processing the query * @return reference of iterator object, NULL on error */ BWTSeqExactMatchesIterator * gt_newEMIterator(const BWTSeq *bwtSeq, const Symbol *query, size_t queryLen, bool forward); /** * \brief Deallocate an iterator object. * @param iter reference of iterator object */ void gt_deleteEMIterator(BWTSeqExactMatchesIterator *iter); /** * \brief Get position of next match from an iterator. * @param iter reference of iterator object * @param bwtSeq reference of bwt sequence object to use for matching * @param pos location of match will be stored here if a further match * is available, not modified otherwise * @return true if another match could be found, false otherwise */ static inline bool EMIGetNextMatch(BWTSeqExactMatchesIterator *iter, unsigned long *pos, const BWTSeq *bwtSeq); /** * \brief Query an iterator for the total number of matches. * @param iter reference of iterator object * @return total number of matches */ unsigned long gt_EMINumMatchesTotal(const BWTSeqExactMatchesIterator *iter); /** * \brief Query an iterator for the number of matches not yet * inspected via EMIGetNextMatch. * @param iter reference of iterator object * @return number of matches left */ unsigned long gt_EMINumMatchesLeft(const BWTSeqExactMatchesIterator *iter); /** * @brief for packed index (given as void pointer), compute the longest * prefix of string in range between qstart and qend that occurs exactly * once in the index. * @param packed index (given as void pointer) * @param qstart points to memory area where query is found * @param qend points to memory area immediately after the query * @param err * @return 0 if not unique, otherwise length of minmum unique prefix. */ unsigned long gt_packedindexuniqueforward(const BWTSeq *bwtseq, const GtUchar *qstart, const GtUchar *qend); unsigned long gt_packedindexmstatsforward(const BWTSeq *bwtseq, unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend); #include "match/eis-bwtseq-siop.h" #endif genometools-1.5.1/src/match/eis-encidxseq-construct.c000066400000000000000000000226431211610345200226650ustar00rootroot00000000000000/* Copyright (C) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq_metadata.h" #include "match/eis-blockcomp-construct.h" #include "match/eis-encidxseq-construct.h" #include "match/sarr-def.h" #include "match/esa-map.h" #include "core/log_api.h" static EISeq * gt_createEncIdxSeqFromSASeqSrc(SASeqSrc *src, const char *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err); EISeq * gt_createEncIdxSeq(const char *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtLogger *verbosity, GtError *err) { Suffixarray suffixArray; struct encIdxSeq *newSeqIdx; unsigned long length; gt_assert(projectName); /* map and interpret index project file */ if (streamsuffixarray(&suffixArray, SARR_SUFTAB | SARR_BWTTAB, projectName, verbosity, err)) return NULL; length = gt_encseq_total_length(suffixArray.encseq) + 1; newSeqIdx = gt_createEncIdxSeqFromSA(&suffixArray, length, projectName, params, numExtHeaders, headerIDs, extHeaderSizes, extHeaderCallbacks, headerCBData, biFunc, cwExtBitsPerPos, biVarBits, cbState, err); gt_freesuffixarray(&suffixArray); return newSeqIdx; } EISeq * gt_createEncIdxSeqFromSA(Suffixarray *sa, unsigned long totalLen, const char *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err) { struct encIdxSeq *newSeqIdx; SuffixarrayFileInterface sai; gt_assert(sa && projectName && err); gt_initSuffixarrayFileInterface(&sai, totalLen, sa); newSeqIdx = gt_createEncIdxSeqFromSAI( &sai, projectName, params, numExtHeaders, headerIDs, extHeaderSizes, extHeaderCallbacks, headerCBData, biFunc, cwExtBitsPerPos, biVarBits, cbState, err); gt_destructSuffixarrayFileInterface(&sai); return newSeqIdx; } EISeq * gt_createEncIdxSeqFromSAI(SuffixarrayFileInterface *sai, const char *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err) { gt_assert(sai && projectName && err); return gt_createEncIdxSeqFromSASeqSrc( SAI2SASS(sai), projectName, params, numExtHeaders, headerIDs, extHeaderSizes, extHeaderCallbacks, headerCBData, biFunc, cwExtBitsPerPos, biVarBits, cbState, err); } EISeq * gt_createEncIdxSeqFromSfxI(sfxInterface *sfxi, const char *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err) { gt_assert(sfxi && projectName && err); return gt_createEncIdxSeqFromSASeqSrc( gt_SfxI2SASS(sfxi), projectName, params, numExtHeaders, headerIDs, extHeaderSizes, extHeaderCallbacks, headerCBData, biFunc, cwExtBitsPerPos, biVarBits, cbState, err); } static EISeq * gt_createEncIdxSeqFromSASeqSrc(SASeqSrc *src, const char *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err) { SeqDataReader readSfxBWTSym; MRAEnc *alphabet; struct encIdxSeq *newSeqIdx; if (!SDRIsValid(readSfxBWTSym = SASSCreateReader(src, SFX_REQUEST_BWTTAB))) return NULL; alphabet = SASSNewMRAEnc(src); newSeqIdx = gt_createEncIdxSeqGen(SASSGetLength(src), projectName, alphabet, SASSGetSeqStats(src), readSfxBWTSym, params, numExtHeaders, headerIDs, extHeaderSizes, extHeaderCallbacks, headerCBData, biFunc, cwExtBitsPerPos, biVarBits, cbState, err); if (!newSeqIdx) gt_MRAEncDelete(alphabet); return newSeqIdx; } EISeq * gt_createEncIdxSeqGen(unsigned long totalLen, const char *projectName, MRAEnc *alphabet, const struct seqStats *stats, SeqDataReader seqGenerator, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err) { EISeq *seqIdx = NULL; switch (params->encType) { case BWT_ON_BLOCK_ENC: seqIdx = gt_newGenBlockEncIdxSeq(totalLen, projectName, alphabet, stats, seqGenerator, params, numExtHeaders, headerIDs, extHeaderSizes, extHeaderCallbacks, headerCBData, biFunc, cwExtBitsPerPos, biVarBits, cbState, err); break; default: gt_error_set(err, "Illegal/unknown/unimplemented encoding requested!"); break; } return seqIdx; } struct encIdxSeq * gt_loadEncIdxSeqForSA(const GtAlphabet *gtalphabet, const char *projectName, enum seqBaseEncoding encType, int features, GtError *err) { MRAEnc *alphabet; EISeq *seqIdx = NULL; gt_assert(gtalphabet!=NULL); alphabet = gt_SANewMRAEnc(gtalphabet); switch (encType) { case BWT_ON_BLOCK_ENC: seqIdx = gt_loadBlockEncIdxSeqGen(alphabet, projectName, features, err); break; default: gt_error_set(err, "Illegal/unknown/unimplemented encoding requested!"); break; } gt_assert(seqIdx != NULL || gt_error_is_set(err)); return seqIdx; } EISeq * gt_loadEncIdxSeq(const char *projectName, enum seqBaseEncoding encType, int features, GT_UNUSED GtLogger *verbosity, GtError *err) { struct encIdxSeq *newSeqIdx = NULL; GtEncseq *encseq = NULL; GtEncseqLoader *el = NULL; do { el = gt_encseq_loader_new(); gt_encseq_loader_do_not_require_sds_tab(el); gt_encseq_loader_do_not_require_des_tab(el); gt_encseq_loader_do_not_require_ssp_tab(el); encseq = gt_encseq_loader_load(el, projectName, err); gt_encseq_loader_delete(el); if (encseq == NULL) break; newSeqIdx = gt_loadEncIdxSeqForSA(gt_encseq_alphabet(encseq), projectName, encType, features, err); gt_encseq_delete(encseq); } while (0); return newSeqIdx; } genometools-1.5.1/src/match/eis-encidxseq-construct.h000066400000000000000000000255761211610345200227020ustar00rootroot00000000000000/* Copyright (C) 2007,2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_ENCIDXSEQ_CONSTRUCT_H #define EIS_ENCIDXSEQ_CONSTRUCT_H /** * @file eis-encidxseq-construct.h * @brief Methods to construct encoded indexed sequence objects from a * variety of sources. * @author Thomas Jahns */ #include "core/error.h" #include "core/str.h" #include "match/eis-encidxseq.h" #include "match/eis-suffixerator-interface.h" #include "match/eis-suffixarray-interface.h" #include "match/sarr-def.h" /** * \brief Construct block-encoded indexed sequence object and write * corresponding representation to disk. * @param si reference of suffixerator interface used to read * construction from * @param totalLen length of indexed sequence (including terminator * and separators) * @param projectName base name of corresponding suffixerator project * @param params parameters describing the composition of blocks, * buckets and construction of in memory structures * @param numExtHeaders number of extension headers to write via callbacks * @param headerIDs array of numExtHeaders ids to be used * for each extension header in turn * @param extHeaderSizes array of numExtHeaders sizes * representing the length of each extension header * @param extHeaderCallbacks array of numExtHeaders function pointers * each of which will be called once upon writing the header * @param headerCBData array of pointers passed as argument when the * corresponding header writing function is called * @param biFunc function to be called when a chunk of data has been * accumulated for a given region of sequence data * @param cwExtBitsPerPos exactly this many bits will be appended by * biFunc for each symbol of the input sequence * @param maxVarExtBitsPerPos at most this many bits will be appended to the * variable width part of the data * @param cbState will be passed on each call of biFunc * @param err genometools reference for core functions */ EISeq * gt_createEncIdxSeqFromSfxI(sfxInterface *si, const char *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err); /** * \brief Construct block-encoded indexed sequence object and write * corresponding representation to disk. * @param sa reference of suffix-array data structure to read * construction from * @param totalLen length of indexed sequence (including terminator * and separators) * @param projectName base name of corresponding suffixerator project * @param params parameters describing the composition of blocks, * buckets and construction of in memory structures * @param numExtHeaders number of extension headers to write via callbacks * @param headerIDs array of numExtHeaders ids to be used * for each extension header in turn * @param extHeaderSizes array of numExtHeaders sizes * representing the length of each extension header * @param extHeaderCallbacks array of numExtHeaders function pointers * each of which will be called once upon writing the header * @param headerCBData array of pointers passed as argument when the * corresponding header writing function is called * @param biFunc function to be called when a chunk of data has been * accumulated for a given region of sequence data * @param cwExtBitsPerPos exactly this many bits will be appended by * biFunc for each symbol of the input sequence * @param maxVarExtBitsPerPos at most this many bits will be appended to the * variable width part of the data * @param cbState will be passed on each call of biFunc * @param err genometools reference for core functions */ EISeq * gt_createEncIdxSeqFromSA(Suffixarray *sa, unsigned long totalLen, const char *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err); /** * \brief Construct block-encoded indexed sequence object and write * corresponding representation to disk. * @param sai reference of state struct holding reference to * suffix-array data structure to read construction from and progress * information * @param alphabet encoding to use for the built sequence, "ownership" * of alphabet will pass to the returned object if no error occured. * @param totalLen length of indexed sequence (including terminator * and separators) * @param projectName base name of corresponding suffixerator project * @param params parameters describing the composition of blocks, * buckets and construction of in memory structures * @param numExtHeaders number of extension headers to write via callbacks * @param headerIDs array of numExtHeaders ids to be used * for each extension header in turn * @param extHeaderSizes array of numExtHeaders sizes * representing the length of each extension header * @param extHeaderCallbacks array of numExtHeaders function pointers * each of which will be called once upon writing the header * @param headerCBData array of pointers passed as argument when the * corresponding header writing function is called * @param biFunc function to be called when a chunk of data has been * accumulated for a given region of sequence data * @param cwExtBitsPerPos exactly this many bits will be appended by * biFunc for each symbol of the input sequence * @param maxVarExtBitsPerPos at most this many bits will be appended to the * variable width part of the data * @param cbState will be passed on each call of biFunc * @param err genometools reference for core functions */ EISeq * gt_createEncIdxSeqFromSAI(SuffixarrayFileInterface *sai, const char *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err); /** * \brief Construct indexed sequence object and write * corresponding representation to disk. * @param projectName base name of corresponding suffixerator project * @param params parameters for index construction * @param numExtHeaders number of extension headers to write via callbacks * @param headerIDs array of numExtHeaders ids to be used * for each extension header in turn * @param extHeaderSizes array of numExtHeaders sizes * representing the length of each extension header * @param extHeaderCallbacks array of numExtHeaders function pointers * each of which will be called once upon writing the header * @param headerCBData array of pointers passed as argument when the * corresponding header writing function is called * @param biFunc function to be called when a chunk of data has been * accumulated for a given region of sequence data * @param cwBitsPerPos exactly this many bits will be appended by * biFunc for each symbol of the input sequence * @param biVarBitsEstimate tell how many bits will be appended to the * variable width part of the data * @param cbState will be passed on each call of biFunc and biVarBits * @param err genometools error object reference * @return new encoded indexed sequence object reference */ EISeq * gt_createEncIdxSeq(const char *projectName, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtLogger *verbosity, GtError *err); /** * \brief Load previously written indexed sequence * representation for already opened suffix-array structure. * @param sa reference of suffix-array data structure to read * construction from * @param totalLen length of indexed sequence (including terminator * and separators) * @param projectName base name of corresponding suffixerator project * @param encType encoding type of loaded sequence index * @param features select optional in-memory structures * @param err genometools reference for core functions */ EISeq * gt_loadEncIdxSeqForSA(const GtAlphabet *gtalphabet, const char *projectName, enum seqBaseEncoding encType, int features, GtError *err); /** * \brief Load previously written block encoded sequence * representation. * @param projectName base name of corresponding suffixerator project * @param features select optional in-memory data structures for speed-up * @param err genometools error object reference * @return new encoded indexed sequence object reference */ EISeq * gt_loadEncIdxSeq(const char *projectName, enum seqBaseEncoding encType, int features, GtLogger *verbosity, GtError *err); EISeq * gt_createEncIdxSeqGen(unsigned long totalLen, const char *projectName, MRAEnc *alphabet, const struct seqStats *stats, SeqDataReader seqGenerator, const struct seqBaseParam *params, size_t numExtHeaders, const uint16_t *headerIDs, const uint32_t *extHeaderSizes, headerWriteFunc *extHeaderCallbacks, void **headerCBData, bitInsertFunc biFunc, BitOffset cwExtBitsPerPos, varExtBitsEstimator biVarBits, void *cbState, GtError *err); #endif genometools-1.5.1/src/match/eis-encidxseq-param.c000066400000000000000000000022511211610345200217320ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/option_api.h" #include "match/eis-encidxseq-param.h" #include "match/eis-blockcomp-param.h" void gt_registerEncIdxSeqOptions(GtOptionParser *op, struct seqBaseParam *paramOutput) { /* currently BWT_ON_BLOCK is fixed but might be extended in the future */ paramOutput->encType = BWT_ON_BLOCK_ENC; gt_registerBlockEncOptions(op, ¶mOutput->encParams.blockEnc); } genometools-1.5.1/src/match/eis-encidxseq-param.h000066400000000000000000000107071211610345200217440ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_ENCIDXSEQ_PARAM_H #define EIS_ENCIDXSEQ_PARAM_H #include "core/option_api.h" /** * @file eis-encidxseq-param.h * @brief Parameter definitions for index creation routines. */ /** * Select features to use for index in-memory representation. */ enum EISFeatureBits { EIS_FEATURE_NONE = 0, /**< fallback value */ EIS_FEATURE_REGION_SUMS = 1<<0, /**< if set construct sum tables for * the special symbol ranges * use this on index loading if * you want to use this index in * many queries, omit if memory * is very tight (e.g. on construction) */ }; /** * Parameters to construct a block composition compressed index. */ struct blockEncParams { unsigned blockSize; /**< number of symbols to combine in * one block a lookup-table * containing * $alphabetsize^{blockSize}$ entries is * required so adjust with caution */ unsigned bucketBlocks; /**< number of blocks for which to * store partial symbol sums (lower * values increase index size and * decrease computations for lookup) */ }; /** * Names the type of encoding used: */ enum seqBaseEncoding { BWT_BASETYPE_AUTOSELECT, /**< automatic, load any index present * (currently not implemented) */ BWT_ON_RLE, /**< use original fmindex run-length * encoding */ BWT_ON_BLOCK_ENC, /**< do block compression by dividing * sequence into strings of * composition and permutation * indices */ BWT_ON_WAVELET_TREE_ENC, /**< encode sequence with wavelet-trees */ }; /** * Stores information to construct the underlying sequence object. */ union seqBaseEncParam { struct blockEncParams blockEnc; /**< parameters for block encoding */ /* struct */ /* { */ /* } RLEParams; */ /* struct */ /* { */ /* } waveletTreeParams; */ }; struct seqBaseParam { enum seqBaseEncoding encType; /**< encType selects the encoding * method of the sequence index * * storing the BWT sequence (see * enum seqBaseEncoding). */ int EISFeatureSet; /**< bitwise or of EIS_FEATURE_NONE * and other features selectable via enum * EISFeatureBits (see eis-encidxseq.h) */ union seqBaseEncParam encParams;/**< a union holding extra parameter * information specific to the * type selected via parameter * encType */ }; void gt_registerEncIdxSeqOptions(GtOptionParser *op, struct seqBaseParam *paramOutput); /** * @brief Given the construction parameters for a sequence index, * estimate how many symbols will be encoded together. * * Extension information can be expected to be stored at a intervals * corresponding to the return value of this function. * @param params paramters for sequence index construction * @param encType select which type of index will be constructed * @param err * @return number of symbols stored consecutively */ unsigned gt_estimateSegmentSize(const struct seqBaseParam *params); #endif genometools-1.5.1/src/match/eis-encidxseq-priv.h000066400000000000000000000055231211610345200216240ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_ENCIDXSEQ_PRIV_H #define EIS_ENCIDXSEQ_PRIV_H #include #include "match/eis-mrangealphabet.h" #include "match/eis-seqranges.h" #include "match/eis-encidxseq.h" struct encIdxSeqClass { void (*delete)(EISeq *seq); unsigned long (*rank)(EISeq *seq, Symbol sym, unsigned long pos, union EISHint *hint); GtUlongPair (*posPairRank)(EISeq *seq, Symbol tSym, unsigned long posA, unsigned long posB, union EISHint *hint); void (*rangeRank)(struct encIdxSeq *eSeqIdx, unsigned range, unsigned long pos, unsigned long *rankCounts, union EISHint *hint); void (*posPairRangeRank)(struct encIdxSeq *eSeqIdx, unsigned range, unsigned long posA, unsigned long posB, unsigned long *rankCounts, union EISHint *hint); unsigned long (*select)(EISeq *seq, Symbol sym, unsigned long count, union EISHint *hint); Symbol (*get)(EISeq *seq, unsigned long pos, EISHint hint); union EISHint *(*newHint)(const EISeq *seq); void (*deleteHint)(EISeq *seq, EISHint hint); const MRAEnc *(*getAlphabet)(const EISeq *seq); void (*expose)(EISeq *seq, unsigned long pos, int persistent, struct extBitsRetrieval *retval, union EISHint *hint); FILE *(*seekToHeader)(const EISeq *seq, uint16_t headerID, uint32_t *lenRet); int (*printPosDiags)(const EISeq *seq, unsigned long pos, FILE *fp, EISHint hint); int (*printExtPosDiags)(const EISeq *seq, unsigned long pos, FILE *fp, EISHint hint); }; struct encIdxSeq { const struct encIdxSeqClass *classInfo; MRAEnc *alphabet; unsigned long seqLen; }; struct seqCache { size_t numEntries; unsigned long *cachedPos; void **entriesPtr; void *entries; }; struct blockEncIdxSeqHint { struct seqCache sBlockCache; seqRangeListSearchHint rangeHint; }; union EISHint { struct blockEncIdxSeqHint bcHint; }; unsigned gt_blockEncIdxSeqSegmentLen(const struct blockEncParams *params); #endif genometools-1.5.1/src/match/eis-encidxseq-siop.h000066400000000000000000000121221211610345200216070ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_ENCIDXSEQ_SIOP_H #define EIS_ENCIDXSEQ_SIOP_H #include #include "core/ma_api.h" #include "match/eis-mrangealphabet.h" #include "match/eis-encidxseq.h" #include "match/eis-encidxseq-priv.h" static inline unsigned long EISLength(const EISeq *seq) { return seq->seqLen; } static inline const MRAEnc * EISGetAlphabet(const EISeq *seq) { gt_assert(seq); return seq->alphabet; } static inline Symbol EISGetSym(EISeq *seq, unsigned long pos, EISHint hint) { gt_assert(seq && hint); return MRAEncRevMapSymbol(seq->alphabet, seq->classInfo->get(seq, pos, hint)); } static inline Symbol EISGetTransformedSym(EISeq *seq, unsigned long pos, EISHint hint) { gt_assert(seq && hint); return seq->classInfo->get(seq, pos, hint); } static inline unsigned long EISRank(EISeq *seq, Symbol sym, unsigned long pos, union EISHint *hint) { Symbol mSym; mSym = MRAEncMapSymbol(seq->alphabet, sym); return seq->classInfo->rank(seq, mSym, pos, hint); } static inline unsigned long EISSymTransformedRank(EISeq *seq, Symbol tSym, unsigned long pos, union EISHint *hint) { gt_assert(tSym < gt_MRAEncGetSize(EISGetAlphabet(seq))); return seq->classInfo->rank(seq, tSym, pos, hint); } static inline GtUlongPair EISPosPairRank(EISeq *seq, Symbol sym, unsigned long posA, unsigned long posB, union EISHint *hint) { Symbol tSym; tSym = MRAEncMapSymbol(seq->alphabet, sym); return seq->classInfo->posPairRank(seq, tSym, posA, posB, hint); } static inline void EISRangeRank(EISeq *seq, AlphabetRangeID range, unsigned long pos, unsigned long *rankCounts, union EISHint *hint) { return seq->classInfo->rangeRank(seq, range, pos, rankCounts, hint); } static inline void EISPosPairRangeRank(EISeq *seq, AlphabetRangeID range, unsigned long posA, unsigned long posB, unsigned long *rankCounts, union EISHint *hint) { seq->classInfo->posPairRangeRank(seq, range, posA, posB, rankCounts, hint); } static inline GtUlongPair EISSymTransformedPosPairRank(EISeq *seq, Symbol tSym, unsigned long posA, unsigned long posB, union EISHint *hint) { if (tSym >= gt_MRAEncGetSize(EISGetAlphabet(seq))) { fprintf(stderr,"tsym=%lu,gt_MRAEncGetSize(EISGetAlphabet(seq)=%lu\n", (unsigned long) tSym, (unsigned long) gt_MRAEncGetSize(EISGetAlphabet(seq))); exit(GT_EXIT_PROGRAMMING_ERROR); } gt_assert(tSym < gt_MRAEncGetSize(EISGetAlphabet(seq))); return seq->classInfo->posPairRank(seq, tSym, posA, posB, hint); } static inline void EISRetrieveExtraBits(EISeq *seq, unsigned long pos, int flags, struct extBitsRetrieval *retval, union EISHint *hint) { return seq->classInfo->expose(seq, pos, flags, retval, hint); } static inline void initExtBitsRetrieval(struct extBitsRetrieval *r) { memset(r, 0, sizeof (struct extBitsRetrieval)); } static inline struct extBitsRetrieval * newExtBitsRetrieval() { struct extBitsRetrieval *retval = gt_malloc(sizeof (struct extBitsRetrieval)); initExtBitsRetrieval(retval); return retval; } static inline void destructExtBitsRetrieval(struct extBitsRetrieval *r) { if ((r->flags & EBRF_PERSISTENT_CWBITS) && r->cwPart) gt_free(r->cwPart); if ((r->flags & EBRF_PERSISTENT_VARBITS) && r->varPart) gt_free(r->varPart); } static inline void deleteExtBitsRetrieval(struct extBitsRetrieval *r) { destructExtBitsRetrieval(r); gt_free(r); } static inline FILE * EISSeekToHeader(const EISeq *seqIdx, uint16_t headerID, uint32_t *lenRet) { gt_assert(seqIdx); return seqIdx->classInfo->seekToHeader(seqIdx, headerID, lenRet); } static inline EISHint newEISHint(const EISeq *seq) { return seq->classInfo->newHint(seq); } static inline void deleteEISHint(EISeq *seq, EISHint hint) { return seq->classInfo->deleteHint(seq, hint); } static inline int EISPrintDiagsForPos(const EISeq *seq, unsigned long pos, FILE *fp, EISHint hint) { if (seq->classInfo->printPosDiags) return seq->classInfo->printPosDiags(seq, pos, fp, hint); else return 0; } static inline int EISPrintExtDiagsForPos(const EISeq *seq, unsigned long pos, FILE *fp, EISHint hint) { if (seq->classInfo->printExtPosDiags) return seq->classInfo->printExtPosDiags(seq, pos, fp, hint); else return 0; } #endif genometools-1.5.1/src/match/eis-encidxseq.c000066400000000000000000000216051211610345200206400ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/log_api.h" #include "core/yarandom.h" #include "match/eis-encidxseq.h" #include "match/eis-encidxseq-priv.h" #include "match/esa-map.h" #include "match/sarr-def.h" enum { AVG_RANGE_RANK_INTERVAL = 128, /**< do range rank queries * approximately at this interval */ }; void gt_deleteEncIdxSeq(EISeq *seq) { seq->classInfo->delete(seq); } const char *EISIntegrityCheckResultStrings[] = { "no error in bwt comparison.", "reading from the index produced an incorrect symbol.", "reading from the BWT reference file failed or delivered a symbol" " not in the alphabet (bwt file corrupt?) ", "loading/mapping of the suffix array project failed. \n" "(did you generate the BWT?)", "the rank operation delivered a wrong count" }; #define verifyIntegrityErrRet(retcode) \ { \ switch (retcode) { \ case EIS_INTEGRITY_CHECK_INVALID_SYMBOL: \ fprintf(stderr, "Comparision failed at position %lu" \ ", reference symbol: %u, symbol read: %u\n", \ pos, symOrig, symEnc); \ gt_error_set(err, "Invalid symbol encountered."); \ break; \ case EIS_INTEGRITY_CHECK_BWT_READ_ERROR: \ fprintf(stderr, "Read of symbol failed at position %lu\n", pos); \ gt_error_set(err, "Failed reading reference BWT source."); \ break; \ case EIS_INTEGRITY_CHECK_RANK_FAILED: \ fprintf(stderr, "At position %lu" \ ", rank operation yielded wrong count: %lu" \ ", expected %lu for symbol %d\n", \ pos, rankQueryResult, rankExpect, rankCmpSym); \ gt_error_set(err, "Invalid rank result."); \ break; \ } \ EISPrintDiagsForPos(seqIdx, pos, stderr, hint); \ retval = retcode; \ break; \ } do {} while (0) /** * @param tickPrint if not zero, print a . every tickPrint symbols to * fp * @param fp descriptor to write progress marks to. * @return -1 on error, 0 on identity, >0 on inconsistency */ enum EISIntegrityCheckResults gt_EISVerifyIntegrity(EISeq *seqIdx, const char *projectName, unsigned long skip, unsigned long tickPrint, FILE *fp, int chkFlags, GtLogger *verbosity, GtError *err) { FILE *bwtFP; unsigned long pos = 0, length = EISLength(seqIdx); Suffixarray suffixArray; Symbol symOrig; unsigned symEnc; EISHint hint; unsigned long rankQueryResult, rankExpect; const MRAEnc *alphabet; AlphabetRangeSize alphabetSize; AlphabetRangeID numRanges; enum EISIntegrityCheckResults retval = EIS_INTEGRITY_CHECK_NO_ERROR; /* two part process: enumerate all positions of original sequence * and verify that the query functions return correct values */ if (streamsuffixarray(&suffixArray, SARR_BWTTAB, projectName, verbosity, err)) { gt_error_set(err, "Cannot load suffix array project with" " demand for BWT file\n"); return EIS_INTEGRITY_CHECK_SA_LOAD_ERROR; } bwtFP = suffixArray.bwttabstream.fp; hint = newEISHint(seqIdx); alphabet = EISGetAlphabet(seqIdx); alphabetSize = gt_MRAEncGetSize(alphabet); numRanges = MRAEncGetNumRanges(alphabet); do { unsigned long rankTable[alphabetSize], rangeRanks[2][alphabetSize], pairRangeRanks[2* alphabetSize], lastRangeRankPos = 0; int symRead, rt = 0; AlphabetRangeID lastRangeID = 0; unsigned rankCmpSym; memset(rankTable, 0, sizeof (rankTable)); memset(rangeRanks, 0, sizeof (rangeRanks)); if (skip > 0) { unsigned sym; if (skip >= length) { gt_logger_log(verbosity, "Invalid skip request: %lld," " too large for sequence length: %lu", (long long)skip, length); return -1; } fseeko(bwtFP, skip, SEEK_SET); for (sym = 0; sym <= (unsigned) GT_MAXALPHABETCHARACTER; ++sym) if (MRAEncSymbolHasValidMapping(alphabet, sym)) rankTable[sym] = EISRank(seqIdx, sym, skip, hint); pos = skip; } while (retval == EIS_INTEGRITY_CHECK_NO_ERROR && (symRead = getc(bwtFP)) != EOF) { symOrig = MRAEncMapSymbol(alphabet, symRead); symEnc = EISGetTransformedSym(seqIdx, pos, hint); if (symEnc >= alphabetSize) verifyIntegrityErrRet(EIS_INTEGRITY_CHECK_INVALID_SYMBOL); if (symOrig >= alphabetSize) verifyIntegrityErrRet(EIS_INTEGRITY_CHECK_BWT_READ_ERROR); if (symEnc != symOrig) verifyIntegrityErrRet(EIS_INTEGRITY_CHECK_INVALID_SYMBOL); ++rankTable[symOrig]; if (chkFlags & EIS_VERIFY_EXT_RANK) { for (rankCmpSym = 0; rankCmpSym < alphabetSize; ++rankCmpSym) if ((rankExpect = rankTable[rankCmpSym]) != (rankQueryResult = EISSymTransformedRank(seqIdx, rankCmpSym, pos + 1, hint))) verifyIntegrityErrRet(EIS_INTEGRITY_CHECK_RANK_FAILED); } else { rankCmpSym = symEnc; if ((rankExpect = rankTable[symEnc]) != (rankQueryResult = EISSymTransformedRank(seqIdx, symEnc, pos + 1, hint))) verifyIntegrityErrRet(EIS_INTEGRITY_CHECK_RANK_FAILED); } /* do rank for full range on some occasions */ if (!(random() % AVG_RANGE_RANK_INTERVAL)) { unsigned i; AlphabetRangeSize rangeSize; AlphabetRangeID range = random() % numRanges; Symbol rangeBase = MRAEncGetRangeBase(alphabet, range); rangeSize = MRAEncGetRangeSize(alphabet, range); EISRangeRank(seqIdx, range, pos + 1, rangeRanks[rt], hint); for (i = 0; i < rangeSize; ++i) { rankCmpSym = rangeBase + i; if ((rankQueryResult = rangeRanks[rt][i]) != (rankExpect = rankTable[rankCmpSym])) verifyIntegrityErrRet(EIS_INTEGRITY_CHECK_RANK_FAILED); } if (retval) break; if (range == lastRangeID) { EISPosPairRangeRank(seqIdx, range, lastRangeRankPos, pos + 1, pairRangeRanks, hint); for (i = 0; i < rangeSize; ++i) { rankCmpSym = rangeBase + i; if ((rankQueryResult = pairRangeRanks[rangeSize + i]) != (rankExpect = rankTable[rankCmpSym])) verifyIntegrityErrRet(EIS_INTEGRITY_CHECK_RANK_FAILED); if ((rankQueryResult = pairRangeRanks[i]) != (rankExpect = rangeRanks[rt ^ 1][i])) verifyIntegrityErrRet(EIS_INTEGRITY_CHECK_RANK_FAILED); } if (retval) break; } lastRangeID = range; lastRangeRankPos = pos + 1; rt ^= 1; } ++pos; if (tickPrint && !(pos % tickPrint)) putc('.', fp); } if (retval) break; if (tickPrint) putc('\n', fp); if (ferror(bwtFP)) verifyIntegrityErrRet(EIS_INTEGRITY_CHECK_BWT_READ_ERROR); } while (0); deleteEISHint(seqIdx, hint); gt_freesuffixarray(&suffixArray); return retval; } unsigned gt_estimateSegmentSize(const struct seqBaseParam *params) { unsigned segmentLen = 0; switch (params->encType) { case BWT_ON_BLOCK_ENC: segmentLen = gt_blockEncIdxSeqSegmentLen(¶ms->encParams.blockEnc); break; default: fputs("Illegal/unknown/unimplemented encoding requested!", stderr); abort(); break; } return segmentLen; } genometools-1.5.1/src/match/eis-encidxseq.h000066400000000000000000000407211211610345200206450ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_ENCIDXSEQ_H #define EIS_ENCIDXSEQ_H /** * \file eis-encidxseq.h * Interface definitions for encoded indexed sequences. * \author Thomas Jahns */ #include #include #include "core/bitpackstring.h" #include "core/error.h" #include "core/str.h" #include "core/types_api.h" #include "core/logger.h" #include "match/eis-encidxseq-param.h" #include "match/eis-headerid.h" #include "match/eis-mrangealphabet.h" #include "match/eis-seqdatasrc.h" /** * callback function to insert variable width data into encidx * construction * @param dest bitstring to append data to (can hold at least as many * bits as specified in the constructor) * @param sOffset position in dest at which the callee may start * writing * @param start the data will be written together with the encoding of * symbols at position start up to position start + len * @param len see parameter start for description * @param cbState is passed on every call back of bitInsertFunc to * pass information that is kept across individual calls * @param err genometools error object reference * @return number of bits actually written, or (BitOffset)-1 if an * error occured */ typedef BitOffset (*bitInsertFunc)(BitString cwDest, BitOffset cwOffset, BitString varDest, BitOffset varOffset, unsigned long start, unsigned long len, void *cbState); /** * Callback to insert one header field. The data written can later be * retrieved via EISSeekToHeader. */ typedef int (*headerWriteFunc)(FILE *fp, void *headerCBData); /** * later inserted bits can be retrieved and will be presented in this * struct. * CAUTION: the bitstrings exposed in this manner become invalid if * delete is called for the corresponding sequence index. */ struct extBitsRetrieval { BitOffset cwOffset, /**< offset in constant-width string * at which data was earlier stored by * a bitInsertFunc */ varOffset; /**< offset in variable-width string * at which data was earlier stored by * a bitInsertFunc */ unsigned long start, /**< start position of region for * which the retried information was * stored */ len; /**< length of region */ BitString cwPart, /**< string containing * constant-width part of data */ varPart; /**< string containg variable-width data */ int flags; /**< flags for internal use (Don't touch) */ }; /** * Select which parts of the stored data to retrieve: only constant width * part or also from the variable part. Join with bitwise or to form a * request for extBitsRetrieval. */ enum extBitsRetrievalFlags { EBRF_RETRIEVE_CWBITS = 0, /**< retrieve the constant-width part */ EBRF_PERSISTENT_CWBITS = 1<<0, /**< make constant width string persistent, * i.e. survive further calls to * query functions */ EBRF_RETRIEVE_VARBITS = 1<<1, /**< retrieve variable-width string */ EBRF_PERSISTENT_VARBITS = 1<<2, /**< make variable-width string persistent, * i.e. survive further calls to * query functions */ }; /** * Stores the number of occurrences for every symbol of the input alphabet. */ struct seqStats { unsigned long *symbolDistributionTable; /**< indexed by symbol value */ enum sourceEncType sourceAlphaType; /**< defines alphabet width */ }; struct varBitsEstimate { BitOffset maxBitsPerPos, maxBitsPerBucket, maxBitsTotal; }; struct segmentDesc { unsigned long repeatCount; size_t len; }; /** * @brief Provides estimate of extension bits required by higher layer bit * insertion if segment size is known ahead of construction. * @param cbState higher layer state reference * @param segmentDescs describe segments used * @param numSegmentDesc number of descriptions * @return true if estimate is conclusive for maxVarExtBitsTotal and * maxBitsPerBucket of result */ typedef bool (*varExtBitsEstimator)(void *cbState, struct segmentDesc *desc, size_t numSegmentDesc, struct varBitsEstimate *result); /** holds encoded indexed sequence object */ typedef struct encIdxSeq EISeq; /** hints to speed up retrievals when accessing positions in sequence * (or at least close to one another) */ typedef union EISHint *EISHint; /** * \brief Deallocate a previously loaded/created sequence object. * @param seq reference of object to delete */ void gt_deleteEncIdxSeq(EISeq *seq); /** * \brief Retrieve alphabet transformation from sequence object * @param seq reference of object to query for alphabet * @return read-only reference of alphabet associated with sequence */ static inline const MRAEnc * EISGetAlphabet(const EISeq *seq); /** * \brief Return number of occurrences of symbol sym in index up to * but not including given position. * @param seq sequence index object to query * @param sym original alphabet symbol to query occurrences of * @param pos occurences are counted up to this position * @param hint provides cache and direction information for queries * based on previous queries */ static inline unsigned long EISRank(EISeq *seq, Symbol sym, unsigned long pos, union EISHint *hint); /** * \brief Return number of occurrences of symbol tSym in index up to * but not including given position. * @param seq sequence index object to query * @param tSym symbol to query occurrences of, but already transformed * by input alphabet * @param pos occurences are counted up to this position * @param hint provides cache and direction information for queries * based on previous queries */ static inline unsigned long EISSymTransformedRank(EISeq *seq, Symbol tSym, unsigned long pos, union EISHint *hint); /** * \brief Return number of occurrences of symbol sym in index up to * but not including given positions. * * precondition: posA <= posB * @param seq sequence index object to query * @param sym original alphabet symbol to query occurrences of * @param posA occurences are counted up to this position * @param posB as for posA occurences are counted up to this position * @param hint provides cache and direction information for queries * based on previous queries * @return members a and b of returned struct contain Occ results for * posA and posB respectively */ static inline GtUlongPair EISPosPairRank(EISeq *seq, Symbol sym, unsigned long posA, unsigned long posB, union EISHint *hint); /** * \brief Return number of occurrences of symbol sym in index up to * but not including given positions. * * precondition: posA <= posB * @param seq sequence index object to query * @param tSym symbol to query occurrences of, but already transformed * by input alphabet * @param posA occurences are counted up to this position * @param posB as for posA occurences are counted up to this position * @param hint provides cache and direction information for queries * based on previous queries * @return members a and b of returned struct contain Occ results for * posA and posB respectively */ static inline GtUlongPair EISSymTransformedPosPairRank(EISeq *seq, Symbol tSym, unsigned long posA, unsigned long posB, union EISHint *hint); /** * \brief Return number of occurrences of all symbols in selected * range in index up to but not including given position. * * @param seq sequence index object to query * @param range compute rank counts for all symbols in this range * @param pos occurences are counted up to (but not including) this position * @param rankCounts ranks for all symbols in range are written to this * array. The referenced memory must be sized appropriately to * accomodate as many symbols as are in range (MRAEncGetRangeSize if * in doubt) and rankCounts[i] will hold the occurrence count of symbol * MRAEncRevMapSymbol(alphabet, i + MRAEncGetRangeBase(alphabet, range)) * @param hint provides cache and direction information for queries * based on previous queries */ static inline void EISRangeRank(EISeq *seq, AlphabetRangeID range, unsigned long pos, unsigned long *rankCounts, union EISHint *hint); /** * \brief Return number of occurrences of all symbols in selected * range in index up to but not including given position. * * @param seq sequence index object to query * @param range compute rank counts for all symbols in this range * @param posA occurences are counted up to (but not including) this position * @param posB occurences are counted up to (but not including) this position * @param rankCounts ranks for all symbols in range are written to this * array. The referenced memory must be sized appropriately to * accomodate two-times as many positions symbols as are in range * (use MRAEncGetRangeSize if in doubt) and rankCounts[i] will hold the * occurrence count of symbol * MRAEncRevMapSymbol(alphabet, i + MRAEncGetRangeBase(alphabet, range)) * up to position posA while the corresponding is true for * rankCounts[rangeSize + i] concerning posB * @param hint provides cache and direction information for queries * based on previous queries */ static inline void EISPosPairRangeRank(EISeq *seq, AlphabetRangeID range, unsigned long posA, unsigned long posB, unsigned long *rankCounts, union EISHint *hint); /** * Presents the bits previously stored by a bitInsertFunc callback. * @param seq * @param pos sequence position for which to retrieve corresponding * area * @param flags select which part of the extension bits to query * @param retval store information of retrieved bits here * @param hint provides cache and direction information for queries */ static inline void EISRetrieveExtraBits(EISeq *seq, unsigned long pos, int flags, struct extBitsRetrieval *retval, union EISHint *hint); /** * \brief Initialize empty structure to hold retrieval results later. * @param r struct to initialize */ static inline void initExtBitsRetrieval(struct extBitsRetrieval *r); /** * \brief Allocate and initialize empty structure to hold retrieval * results later. * @return reference of new retrieval object */ static inline struct extBitsRetrieval * newExtBitsRetrieval(); /** * \brief Destruct structure holding retrieval data, deallocates * referenced data as necessary. * @param r struct to destruct */ static inline void destructExtBitsRetrieval(struct extBitsRetrieval *r); /** * \brief Destruct structure holding retrieval data, deallocates * referenced data as necessary and the structure itself. * @param r struct to delete */ static inline void deleteExtBitsRetrieval(struct extBitsRetrieval *r); /** * \brief Find positions of nth symbol occurrence. TODO: NOT IMPLEMENTED */ unsigned long EISSelect(EISeq *seq, Symbol sym, unsigned long count); /** * \brief Query length of stored sequence. * @param seq indexed sequence object to query * @return length of sequence */ static inline unsigned long EISLength(const EISeq *seq); /** * \brief Return symbol at specified position. Comparable to c[pos] if the * sequence was stored straight in an array c. * @param seq indexed sequence object to be queried * @param pos position to retrieve symbol for * @param hint optional caching/hinting structure (improves average * retrieval time) * @return value of symbol as encoded in original alphabet */ static inline Symbol EISGetSym(EISeq *seq, unsigned long pos, EISHint hint); /** * \brief Return symbol at specified position. Comparable to c[pos] if the * sequence was stored straight in an array c. Returns value of * encoding, i.e. does not retranslate to original alphabet. * @param seq indexed sequence object to be queried * @param pos position to retrieve symbol for * @param hint optional caching/hinting structure (improves average * retrieval time) * @return value of symbol as processed by encoding alphabet */ static inline Symbol EISGetTransformedSym(EISeq *seq, unsigned long pos, EISHint hint); /** * \brief Construct new hinting structure to accelerate operations on * related positions. * @param seq reference of sequence object to use * @return new EISHint handle */ static inline EISHint newEISHint(const EISeq *seq); /** * Deallocate hinting data. * @param seq sequence associated * @param hint hint to free */ static inline void deleteEISHint(EISeq *seq, EISHint hint); /** * Possible outcome of index integrity check. */ enum EISIntegrityCheckResults { EIS_INTEGRITY_CHECK_NO_ERROR = 0, /**< all tests completed * without error */ EIS_INTEGRITY_CHECK_INVALID_SYMBOL, /**< reading from the index * produced an incorrect symbol */ EIS_INTEGRITY_CHECK_BWT_READ_ERROR, /**< reading from the BWT * reference file failed or * delivered a symbol not in * the alphabet (bwt file * corrupt?) */ EIS_INTEGRITY_CHECK_SA_LOAD_ERROR, /**< loading/mapping of the * suffix array project failed * (did you generate the BWT) */ EIS_INTEGRITY_CHECK_RANK_FAILED /**< the rank operation * delivered a wrong count */ }; /** table of error descriptions indexed by return values of * gt_EISVerifyIntegrity */ extern const char *EISIntegrityCheckResultStrings[]; /** * Select potentially expensive checks to perform on index. */ enum EISIntegrityCheckFlags { EIS_VERIFY_BASIC = 0, /**< just basic checks */ EIS_VERIFY_EXT_RANK = 1 << 0, /**< do rank queries for all * positions for all symbols in the * alphabet, not only for ranks changed */ }; /** * @brief Check wether index contains same symbols as reference * sequence and delivers correct rank counts. * @param seqIdx index to check * @param projectName name of corresponding suffix array project to * use as reference * @param skip omit this many symbols at the beginning * @param tickPrint print a dot every tickPrint symbols processed * @param fp print dots to this file pointer * @param chkFlags select additional tests (see enum EISIntegrityCheckFlags) */ enum EISIntegrityCheckResults gt_EISVerifyIntegrity(EISeq *seqIdx, const char *projectName, unsigned long skip, unsigned long tickPrint, FILE *fp, int chkFlags, GtLogger *verbosity, GtError *err); /** * @brief Position file pointer at header written by upper layer. * @param seqIdx index to search header in * @param headerID number of header to search for * @param lenRet write length of header here * @return appropriate file pointer or NULL if header was not found */ static inline FILE * EISSeekToHeader(const EISeq *seqIdx, uint16_t headerID, uint32_t *lenRet); /** * Given a position write debugging output for surrounding sequence. * @param seqIdx sequence index to query * @param pos position for which to print context * @param fp print diagnostics to this file pointer * @param hint use this structure for hinting * @return 0 if an I/O error occured wrt fp */ static inline int EISPrintDiagsForPos(const EISeq *seqIdx, unsigned long pos, FILE *fp, EISHint hint); #include "match/eis-encidxseq-siop.h" #endif genometools-1.5.1/src/match/eis-headerid.h000066400000000000000000000016771211610345200204360ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_HEADERID_H #define EIS_HEADERID_H enum { /* used by bwt sequence class */ LOCATE_INFO_IN_INDEX_HEADERID = 1111, RANK_SORT_HEADERID = 1112, }; #endif genometools-1.5.1/src/match/eis-list-do.h000066400000000000000000000024201211610345200202270ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_LIST_DO_H #define EIS_LIST_DO_H #define ListDo(type, initialPtr, NodeOp) \ do { \ type *p = initialPtr; \ while (p) \ { \ type *next = p->next; \ NodeOp; \ p = next; \ } \ } while (0) #endif genometools-1.5.1/src/match/eis-mrangealphabet-priv.h000066400000000000000000000037551211610345200226200ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_MRANGEALPHABET_PRIV_H #define EIS_MRANGEALPHABET_PRIV_H #include #include #include #include "match/eis-mrangealphabet.h" struct multiRangeAlphabetEncoding { enum sourceEncType encType; AlphabetRangeID numRanges; AlphabetRangeSize *rangeEndIndices, /*< maps to the last position + 1 * for each range */ *symbolsPerRange; /*< gives number of symbols in each range */ }; struct multiRangeAlphabetEncodingUInt8 { struct multiRangeAlphabetEncoding baseClass; uint8_t mappings[UINT8_MAX+1], revMappings[UINT8_MAX+1]; }; typedef struct multiRangeAlphabetEncodingUInt8 MRAEncUInt8; static inline MRAEncUInt8 * MRAEnc2MRAEncUInt8(MRAEnc *mralpha) { gt_assert(mralpha && mralpha->encType == sourceUInt8); return (MRAEncUInt8*) ((char *)mralpha - offsetof(MRAEncUInt8, baseClass)); } static inline const MRAEncUInt8 * constMRAEnc2MRAEncUInt8(const MRAEnc *mralpha) { gt_assert(mralpha && mralpha->encType == sourceUInt8); return (const MRAEncUInt8*) ((char *)mralpha - offsetof(MRAEncUInt8, baseClass)); } static inline MRAEnc* MRAEncUInt82MRAEnc(MRAEncUInt8 *mralpha) { gt_assert(mralpha); return &(mralpha->baseClass); } #endif genometools-1.5.1/src/match/eis-mrangealphabet-siop.h000066400000000000000000000056701211610345200226100ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_MRANGEALPHABET_SIOP_H #define EIS_MRANGEALPHABET_SIOP_H #include "match/eis-mrangealphabet.h" #include "match/eis-mrangealphabet-priv.h" static inline MRAEnc * MRAEncUInt8New(AlphabetRangeID numRanges, AlphabetRangeSize symbolsPerRange[], const uint8_t *mapping) { return gt_newMultiRangeAlphabetEncodingUInt8(numRanges, symbolsPerRange, mapping); } static inline AlphabetRangeID MRAEncGetNumRanges(const MRAEnc *mralpha) { return mralpha->numRanges; } static inline AlphabetRangeSize MRAEncGetRangeSize(const MRAEnc *mralpha, AlphabetRangeID range) { gt_assert(mralpha); gt_assert(mralpha->numRanges > range); return mralpha->symbolsPerRange[range]; } static inline Symbol MRAEncGetRangeBase(const MRAEnc *mralpha, AlphabetRangeID range) { gt_assert(mralpha && mralpha->numRanges > range); if (range == 0) return 0; else return mralpha->rangeEndIndices[range - 1]; } static inline size_t MRAEncGetDomainSize(const MRAEnc *mralpha) { gt_assert(mralpha); switch (mralpha->encType) { case sourceUInt8: return UINT8_MAX + 1; default: abort(); } } static inline Symbol MRAEncMapSymbol(const MRAEnc *mralpha, Symbol sym) { switch (mralpha->encType) { case sourceUInt8: return constMRAEnc2MRAEncUInt8(mralpha)->mappings[(uint8_t)sym]; default: abort(); } } static inline Symbol MRAEncRevMapSymbol(const MRAEnc *mralpha, Symbol sym) { switch (mralpha->encType) { case sourceUInt8: return constMRAEnc2MRAEncUInt8(mralpha)->revMappings[(uint8_t)sym]; default: abort(); } } static inline int MRAEncSymbolHasValidMapping(const MRAEnc *mralpha, Symbol sym) { switch (mralpha->encType) { case sourceUInt8: return mralpha->rangeEndIndices[mralpha->numRanges - 1] == UINT8_MAX || (constMRAEnc2MRAEncUInt8(mralpha)->mappings[(uint8_t)sym] != UNDEF_UCHAR); default: abort(); } } static inline AlphabetRangeID MRAEncGetRangeOfSymbol(const MRAEnc *mralpha, Symbol sym) { AlphabetRangeID range = 0; gt_assert(mralpha && sym < gt_MRAEncGetSize(mralpha)); while (sym >= mralpha->rangeEndIndices[range]) ++range; return range; } #endif genometools-1.5.1/src/match/eis-mrangealphabet.c000066400000000000000000000250111211610345200216220ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include "core/alphabet.h" #include "core/assert_api.h" #include "core/chardef.h" #include "match/dataalign.h" #include "core/ma_api.h" #include "core/str.h" #include "core/types_api.h" #include "core/str_array.h" #include "match/eis-mrangealphabet.h" #include "match/eis-mrangealphabet-priv.h" #include "core/unused_api.h" MRAEnc * gt_newMultiRangeAlphabetEncodingUInt8(AlphabetRangeID numRanges, const AlphabetRangeSize symbolsPerRange[], const uint8_t *mappings) { MRAEncUInt8 *newAlpha = NULL; size_t rEIOffset = offsetAlign( sizeof (MRAEncUInt8), sizeof (newAlpha->baseClass.rangeEndIndices[0])); size_t sPROffset = offsetAlign( rEIOffset + sizeof (newAlpha->baseClass.rangeEndIndices[0]) * numRanges, sizeof (newAlpha->baseClass.symbolsPerRange[0])); AlphabetRangeID i; if ((newAlpha = gt_calloc( sPROffset + sizeof (newAlpha->baseClass.symbolsPerRange[0]) * numRanges, 1))) { newAlpha->baseClass.rangeEndIndices = (AlphabetRangeSize *)((char *)newAlpha + rEIOffset); newAlpha->baseClass.symbolsPerRange = (AlphabetRangeSize *)((char *)newAlpha + sPROffset); newAlpha->baseClass.encType = sourceUInt8; newAlpha->baseClass.numRanges = numRanges; memset(newAlpha->mappings, UNDEF_UCHAR, UINT8_MAX+1); memset(newAlpha->revMappings, UNDEF_UCHAR, UINT8_MAX+1); newAlpha->baseClass.rangeEndIndices[0] = newAlpha->baseClass.symbolsPerRange[0] = symbolsPerRange[0]; for (i = 1; i < numRanges; ++i) { newAlpha->baseClass.rangeEndIndices[i] = newAlpha->baseClass.rangeEndIndices[i-1] + (newAlpha->baseClass.symbolsPerRange[i] = symbolsPerRange[i]); } for (i = 0; i <= UINT8_MAX; ++i) { newAlpha->mappings[i] = mappings[i]; newAlpha->revMappings[mappings[i]] = i; } } else { if (newAlpha) { if (newAlpha->baseClass.symbolsPerRange) gt_free(newAlpha->baseClass.symbolsPerRange); if (newAlpha->baseClass.rangeEndIndices) gt_free(newAlpha->baseClass.rangeEndIndices); gt_free(newAlpha); } return NULL; } return &(newAlpha->baseClass); } MRAEnc * gt_MRAEncGTAlphaNew(const GtAlphabet *alpha) { AlphabetRangeSize symsPerRange[2]; uint8_t *mappings; MRAEnc *result; uint32_t numofchars = gt_alphabet_num_of_chars(alpha); mappings = gt_malloc(sizeof (uint8_t) * (UINT8_MAX + 1)); memset(mappings, UNDEF_UCHAR, UINT8_MAX+1); { /* handle regular symbols */ int i; for (i = 0; i < numofchars; ++i) mappings[i] = i; symsPerRange[0] = numofchars; } /* handle special symbols */ mappings[WILDCARD] = numofchars; symsPerRange[1] = 1; result = gt_newMultiRangeAlphabetEncodingUInt8(2, symsPerRange, mappings); gt_free(mappings); return result; } MRAEnc * gt_MRAEncCopy(const MRAEnc *alpha) { gt_assert(alpha); switch (alpha->encType) { case sourceUInt8: { MRAEncUInt8 *newAlpha = NULL; const MRAEncUInt8 *srcAlpha = constMRAEnc2MRAEncUInt8(alpha); int numRanges = alpha->numRanges; gt_assert(numRanges > 0); if ((newAlpha = gt_calloc(sizeof (MRAEncUInt8), 1)) && (newAlpha->baseClass.rangeEndIndices = gt_malloc(sizeof (newAlpha->baseClass.rangeEndIndices[0]) * numRanges)) && (newAlpha->baseClass.symbolsPerRange = gt_malloc(sizeof (newAlpha->baseClass.rangeEndIndices[0]) * numRanges))) { newAlpha->baseClass.encType = sourceUInt8; newAlpha->baseClass.numRanges = srcAlpha->baseClass.numRanges; memcpy(newAlpha->mappings, srcAlpha->mappings, UINT8_MAX+1); memcpy(newAlpha->revMappings, srcAlpha->revMappings, UINT8_MAX+1); memcpy(newAlpha->baseClass.rangeEndIndices, srcAlpha->baseClass.rangeEndIndices, sizeof (newAlpha->baseClass.rangeEndIndices[0]) * numRanges); memcpy(newAlpha->baseClass.symbolsPerRange, srcAlpha->baseClass.symbolsPerRange, sizeof (newAlpha->baseClass.symbolsPerRange[0]) * numRanges); return &(newAlpha->baseClass); } else { if (newAlpha) { if (newAlpha->baseClass.symbolsPerRange) gt_free(newAlpha->baseClass.symbolsPerRange); if (newAlpha->baseClass.rangeEndIndices) gt_free(newAlpha->baseClass.rangeEndIndices); gt_free(newAlpha); } return NULL; } } break; default: return NULL; break; } } AlphabetRangeSize gt_MRAEncGetSize(const MRAEnc *mralpha) { AlphabetRangeID range, numRanges = mralpha->numRanges, sumRanges = 0; for (range = 0; range < numRanges; ++range) { sumRanges += mralpha->symbolsPerRange[range]; } return sumRanges; } MRAEnc * gt_MRAEncSecondaryMapping(const MRAEnc *srcAlpha, int selection, const int *rangeSel, Symbol fallback) { MRAEnc *newAlpha; switch (srcAlpha->encType) { case sourceUInt8: { GT_UNUSED const MRAEncUInt8 *ui8alpha; uint8_t *mappings, destSym; AlphabetRangeSize *newRanges, sym; AlphabetRangeID range, numRanges = MRAEncGetNumRanges(srcAlpha); ui8alpha = constMRAEnc2MRAEncUInt8(srcAlpha); mappings = gt_malloc(sizeof (uint8_t) * (UINT8_MAX + 1)); memset(mappings, UNDEF_UCHAR, UINT8_MAX+1); newRanges = gt_malloc(sizeof (newRanges[0]) * numRanges); sym = 0; destSym = 0; for (range = 0; range < numRanges; ++range) { if (rangeSel[range] == selection) { for (; sym < srcAlpha->rangeEndIndices[range]; ++sym) mappings[sym] = destSym++; newRanges[range] = srcAlpha->symbolsPerRange[range]; } else { for (; sym < srcAlpha->rangeEndIndices[range]; ++sym) mappings[sym] = fallback; newRanges[range] = 0; } } newAlpha = gt_newMultiRangeAlphabetEncodingUInt8(numRanges, newRanges, mappings); gt_free(mappings); gt_free(newRanges); } break; default: abort(); break; } return newAlpha; } MRAEnc * gt_MRAEncAddSymbolToRange(MRAEnc *mralpha, Symbol sym, AlphabetRangeID range) { Symbol insertPos, numSyms; gt_assert(mralpha && range < mralpha->numRanges); insertPos = mralpha->rangeEndIndices[range]; numSyms = mralpha->rangeEndIndices[mralpha->numRanges - 1]; switch (mralpha->encType) { case sourceUInt8: { MRAEncUInt8 *ui8alpha; ui8alpha = MRAEnc2MRAEncUInt8(mralpha); gt_assert(ui8alpha->mappings[sym] == UNDEF_UCHAR); /* first move all old mappings accordingly */ { Symbol i; for (i = numSyms; i > insertPos; --i) { Symbol origSym = ui8alpha->revMappings[i - 1]; ui8alpha->revMappings[i] = origSym; ui8alpha->mappings[origSym] += 1; } } /* do actual insertion */ ui8alpha->mappings[sym] = insertPos; ui8alpha->revMappings[insertPos] = sym; /* adjust ranges */ mralpha->symbolsPerRange[range] += 1; { AlphabetRangeID i; for (i = range; i < mralpha->numRanges; ++i) { mralpha->rangeEndIndices[i] += 1; } } } break; default: abort(); break; } return mralpha; } /** * @return number of symbols actually read */ size_t gt_MRAEncReadAndTransform(const MRAEnc *mralpha, FILE *fp, size_t numSyms, Symbol *dest) { int retval = 0; switch (mralpha->encType) { case sourceUInt8: { const MRAEncUInt8 *ui8alpha; size_t i; ui8alpha = constMRAEnc2MRAEncUInt8(mralpha); for (i = 0; i < numSyms; ++i) { int c = getc(fp); if (c != EOF) dest[i] = ui8alpha->mappings[c]; else break; } retval = i; } break; default: abort(); break; } return retval; } void gt_MRAEncSymbolsTransform(const MRAEnc *mralpha, Symbol *symbols, size_t numSyms) { switch (mralpha->encType) { case sourceUInt8: { const MRAEncUInt8 *ui8alpha; size_t i; ui8alpha = constMRAEnc2MRAEncUInt8(mralpha); for (i = 0; i < numSyms; ++i) { symbols[i] = ui8alpha->mappings[symbols[i]]; } } break; default: abort(); break; } } void gt_MRAEncSymbolsRevTransform(const MRAEnc *mralpha, Symbol *symbols, size_t numSyms) { switch (mralpha->encType) { case sourceUInt8: { const MRAEncUInt8 *ui8alpha; size_t i; ui8alpha = constMRAEnc2MRAEncUInt8(mralpha); for (i = 0; i < numSyms; ++i) { symbols[i] = ui8alpha->revMappings[symbols[i]]; } } break; default: abort(); break; } } int gt_MRAEncSymbolIsInSelectedRanges(const MRAEnc *mralpha, Symbol sym, int selection, const int *rangeSel) { AlphabetRangeID range = 0; gt_assert(mralpha && rangeSel); while (range < mralpha->numRanges && sym >= mralpha->rangeEndIndices[range]) ++range; if (range < mralpha->numRanges) { if (rangeSel[range] == selection && sym >= (mralpha->rangeEndIndices[range] - mralpha->symbolsPerRange[range]) /* implicitely: && sym < mralpha->rangeEndIndices[range] */) return 1; else return 0; } else return -1; } void gt_MRAEncDelete(struct multiRangeAlphabetEncoding *mralpha) { gt_assert(mralpha); switch (mralpha->encType) { MRAEncUInt8 *ui8alpha; case sourceUInt8: ui8alpha = MRAEnc2MRAEncUInt8(mralpha); gt_free(ui8alpha); break; default: abort(); break; } } genometools-1.5.1/src/match/eis-mrangealphabet.h000066400000000000000000000214431211610345200216340ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_MRANGEALPHABET_H #define EIS_MRANGEALPHABET_H /** * \file eis-mrangealphabet.h * \brief Methods for an alphabet mapping where the alphabet is mapped * to multiple contiguous ranges. * * The mapping is constructed so that an alphabet with n symbols * is mapped to the range 0..n-1 and any symbol can be queried for * what range it belongs to. * \author Thomas Jahns */ #include #include "core/alphabet.h" /** symbols are stored in this scalar type */ typedef unsigned char Symbol; #define PRIuSymbol "u" /** let's assume 65536 ranges are enough */ typedef unsigned AlphabetRangeID; /** Caution: sizeof (AlphabetRangeID) >= sizeof (AlphabetRangeSize) * must be true, AlphabetRangeSize must be able to * represent the total number of symbols */ typedef unsigned short AlphabetRangeSize; /** retrieve symbol from BitString */ #define gt_bsGetSymbol gt_bsGetUInt8 /** store symbol in BitString */ #define gt_bsStoreSymbol gt_bsStoreUInt8 /** retrieve array of symbols from BitString */ #define gt_bsGetUniformSymbolArray gt_bsGetUniformUInt8Array /** store array of symbols in BitString */ #define gt_bsStoreUniformSymbolArray gt_bsStoreUniformUInt8Array /** how many bits are required to store given symbol value */ #define requiredSymbolBits gt_requiredUInt8Bits /** * Describes an alphabet i.e. a mapping function from a given input * type to a contiguous range of integers which are divided into * multiple ranges, which are again continuous. */ typedef struct multiRangeAlphabetEncoding MRAEnc; /** used to describe a symbol not occurring in the alphabet */ #define UNDEF_UCHAR ((unsigned char)~0) /** select width of symbol input */ enum sourceEncType { sourceUnknown = 0, /**< invalid/undefined */ sourceUInt8 = 1, /**< input in the range 0..255 */ }; /** * \brief Create an alphabet to map a selection of unsigned characters * onto the resulting ranges. * @param numRanges number of distinct ranges the alphabet is to be * divided into. * @param symbolsPerRange gives the number of symbols for every range * @param mapping maps all uint8_t input symbols to values in the * range 0..sum(symbolsPerRange) or the input alphabet specific * value UNDEF_UCHAR */ static inline MRAEnc * MRAEncUInt8New(AlphabetRangeID numRanges, AlphabetRangeSize symbolsPerRange[], const uint8_t *mapping); /** * \brief Creates a mapping to two ranges (regular and special * symbols) from a given genometools alphabet. * @param alpha original alphabet */ MRAEnc * gt_MRAEncGTAlphaNew(const GtAlphabet *alpha); /** * \brief alias of MRAEncUInt8New */ MRAEnc * gt_newMultiRangeAlphabetEncodingUInt8(AlphabetRangeID numRanges, const AlphabetRangeSize symbolsPerRange[], const uint8_t *mappings); /** * @brief Copy constructor for multi-range alphabets * @param alpha alphabet to copy * @return new alphabet object */ MRAEnc * gt_MRAEncCopy(const MRAEnc *alpha); /** * \brief remap multirange alphabet by excluding some ranges * * Maps symbols from all included ranges to new values 0 to n where all * symbols from non-included ranges are mapped to fallback * @param srcAlpha alphabet to remap * @param selection ranges with this value in rangeSel are carried * over to new alphabet * @param rangeSel array of integer flags, if != selection for given * range => maps all symbols in range to fallback, otherwise append to * already mapped symbols * @param fallback symbol to map not-included ranges to */ MRAEnc * gt_MRAEncSecondaryMapping(const MRAEnc *srcAlpha, int selection, const int *rangeSel, Symbol fallback); /** * \brief Inserts a previously unmapped symbol into a range. * * All successor ranges will therefore be shifted by one in the * resulting mapping. * @param mralpha alphabet object reference to add mapping to * @param sym input code to map * @param range number of range to insert new symbol into * @return same reference as mralpha but after destructive change */ MRAEnc * gt_MRAEncAddSymbolToRange(MRAEnc *mralpha, Symbol sym, AlphabetRangeID range); /** * \brief Query number of ranges in alphabet. * @param mralpha alphabet to query for number of ranges * @return number of ranges */ static inline AlphabetRangeID MRAEncGetNumRanges(const MRAEnc *mralpha); /** * \brief Query number of symbols in given range of alphabet. * @param mralpha alphabet to get range from * @param range */ static inline AlphabetRangeSize MRAEncGetRangeSize(const MRAEnc *mralpha, AlphabetRangeID range); /** * \brief Query symbol which starts range. * @param mralpha * @param range start symbol of range, symbols of range range from * MRAEncGetRangeBase(alph, range) to MRAEncGetRangeBase(alph, range + 1) - 1 */ static inline Symbol MRAEncGetRangeBase(const MRAEnc *mralpha, AlphabetRangeID range); /** * @brief Get number of different symbols in alphabet. * @param mralpha * @return number of symbols in alphabet */ AlphabetRangeSize gt_MRAEncGetSize(const MRAEnc *mralpha); /** * @brief Get range of input symbols. * @param mralpha * @return size of original value range of symbols in alphabet * (i.e. 256 for 8 bit mapping) */ static size_t MRAEncGetDomainSize(const MRAEnc *mralpha); /** * \brief Look up code of symbol from input domain in output range. * @return output code or input specific code for illegal symbol (in * which case MRAEncSymbolHasValidMapping would have returned false). */ static inline Symbol MRAEncMapSymbol(const MRAEnc *mralpha, Symbol sym); /** * @brief Find wether a symbol from input is accurately represented in * the alphabet or illegal input. * @param mralpha * @param sym symbol to map * @return 0 if alphabet has no valid mapping, !0 otherwise */ static inline int MRAEncSymbolHasValidMapping(const MRAEnc *mralpha, Symbol sym); /** * @brief Apply reverse mapping of transformed symbol to input alphabet. * @param mralpha * @param sym symbol to un-map * @return inverse mapping of sym */ static inline Symbol MRAEncRevMapSymbol(const MRAEnc *mralpha, Symbol sym); /** * @brief Apply mapping of input string. * @param mralpha * @param symbols symbols to convert * @param numSyms length of symbols string */ void gt_MRAEncSymbolsTransform(const MRAEnc *mralpha, Symbol *symbols, size_t numSyms); /** * @brief Apply reverse mapping of string. * @param mralpha * @param symbols symbols to convert * @param numSyms length of symbols string */ void gt_MRAEncSymbolsRevTransform(const MRAEnc *mralpha, Symbol *symbols, size_t numSyms); /** * @brief Query wether a symbol belongs to a selected range * @param mralpha alphabet to query * @param sym symbol to look-up range for * @param selection value to test rangeSel for * @param rangeSel array of codes for every range in alphabet, to be * compared with selection * @return > 0 if sym is included in a range r which has rangeSel[r] * == selection, 0 if sym is not in any selected range, and <0 if sym * is out of the alphabets range of symbols */ int gt_MRAEncSymbolIsInSelectedRanges(const MRAEnc *mralpha, Symbol sym, int selection, const int *rangeSel); /** * @brief Query range for given symbol * @param mralpha alphabet to query * @param sym symbol to look-up range for (already transformed by * mapping corresponding to alphabet) * @return range id */ static inline AlphabetRangeID MRAEncGetRangeOfSymbol(const MRAEnc *mralpha, Symbol sym); /** * @brief Read symbols from file and transform according to * mapping. * @param mralpha * @param fp file pointer * @param numSyms read this many symbols * @param dest write converted symbols here * @return number of symbols actually read */ size_t gt_MRAEncReadAndTransform(const MRAEnc *mralpha, FILE *fp, size_t numSyms, Symbol *dest); /** * @brief Delete alphabet object. * @param mralpha */ void gt_MRAEncDelete(struct multiRangeAlphabetEncoding *mralpha); #include "match/eis-mrangealphabet-siop.h" #endif genometools-1.5.1/src/match/eis-random-seqaccess.h000066400000000000000000000035601211610345200221120ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_RANDOM_SEQACCESS_H #define EIS_RANDOM_SEQACCESS_H /** * @file eis-construction-interface.h * @brief Abstract interface for suffix array sources. * * The function pointer types defined here are essentially the * interface used for index construction: a source for suffix array * and BWT sequence entries is characterized by an interface * conforming to these functions. */ #include #include "core/error.h" #include "match/eis-mrangealphabet.h" /** * \brief generic method to access the original encoded sequence * @return actual number of symbols acquired */ typedef size_t (*accessSeqSubStr)(const void *state, Symbol *dest, unsigned long pos, size_t len); struct randomSeqAccessor { accessSeqSubStr accessFunc; void *state; }; typedef struct randomSeqAccessor RandomSeqAccessor; static inline size_t accessSequence(RandomSeqAccessor accessor, Symbol *dest, unsigned long pos, size_t len) { return accessor.accessFunc(accessor.state, dest, pos, len); } #endif genometools-1.5.1/src/match/eis-sa-common-priv.h000066400000000000000000000045401211610345200215300ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SA_COMMON_PRIV_H #define EIS_SA_COMMON_PRIV_H #include "eis-random-seqaccess.h" #include "eis-sa-common.h" #include "eis-sequencemultiread.h" typedef SeqDataReader (*createReaderFunc)(SASeqSrc *src, enum sfxDataRequest request); typedef SeqDataTranslator (*createTranslatorFunc)(SASeqSrc *src, enum sfxDataRequest request); typedef Definedunsignedlong (*getRot0PosFunc)(const SASeqSrc *src); typedef const struct seqStats *(*getSeqStatsFunc)(const SASeqSrc *src); typedef void (*deleteSASeqSrcFunc)(SASeqSrc *src); typedef MRAEnc *(*newMRAEncFunc)(const SASeqSrc *src); struct SASeqSrc { unsigned long seqLen; createReaderFunc createReader; createTranslatorFunc createTranslator; getRot0PosFunc getRot0Pos; getSeqStatsFunc getSeqStats; RandomSeqAccessor origSequenceAccess; deleteSASeqSrcFunc deleteSASS; newMRAEncFunc newMRAEnc; MRAEnc *alphabet; struct seqReaderSet readerSet; struct saTaggedXltorStateList xltorStates; }; static inline void initSASeqSrc(SASeqSrc *src, unsigned long seqLen, createTranslatorFunc createTranslator, createReaderFunc createReader, getRot0PosFunc getRot0Pos, getSeqStatsFunc getSeqStats, RandomSeqAccessor origSeqAccess, deleteSASeqSrcFunc deleteSASS, newMRAEncFunc newSeqMRAEnc, generatorFunc generator, void *generatorState); static inline void destructSASeqSrc(SASeqSrc *src); SeqDataReader gt_SASSGenericCreateReader(SASeqSrc *src, enum sfxDataRequest request); #endif genometools-1.5.1/src/match/eis-sa-common-siop.h000066400000000000000000000100641211610345200215200ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SA_COMMON_SIOP_H #define EIS_SA_COMMON_SIOP_H #include "match/eis-sa-common.h" #include "match/eis-sa-common-priv.h" static inline GtUchar sfxIdx2BWTSym(unsigned long sufIdx, const GtEncseq *encseq, GtReadmode readmode) { return sufIdx != 0 ? gt_encseq_get_encoded_char(encseq, sufIdx - 1, readmode) : (GtUchar) UNDEFBWTCHAR; } static inline size_t EncSeqGetSubSeq(const GtEncseq *encseq, GtReadmode readmode, unsigned long pos, size_t len, GtUchar *subSeq) { size_t i; gt_assert(encseq); for (i = 0; i < len; ++i) subSeq[i] = gt_encseq_get_encoded_char(encseq, pos + i, readmode); return len; } static inline SeqDataReader SASSCreateReader(SASeqSrc *src, enum sfxDataRequest request) { return src->createReader(src, request); } static inline Definedunsignedlong SASSGetRot0Pos(const SASeqSrc *src) { return src->getRot0Pos(src); } static inline unsigned long SASSGetLength(const SASeqSrc *src) { return src->seqLen; } static inline MRAEnc * SASSNewMRAEnc(const SASeqSrc *src) { return src->newMRAEnc(src); } static inline const MRAEnc * SASSGetMRAEnc(SASeqSrc *src) { return (src->alphabet ? src->alphabet : (src->alphabet = SASSNewMRAEnc(src))); } static inline const struct seqStats * SASSGetSeqStats(const SASeqSrc *src) { if (src->getSeqStats) return src->getSeqStats(src); else return NULL; } static inline size_t SASSAccessSequence(const SASeqSrc *src, Symbol *dest, unsigned long pos, size_t len) { return accessSequence(src->origSequenceAccess, dest, pos, len); } static inline RandomSeqAccessor SASSGetOrigSeqAccessor(const SASeqSrc *src) { return src->origSequenceAccess; } static inline void initSASeqSrc(SASeqSrc *src, unsigned long seqLen, createTranslatorFunc createTranslator, createReaderFunc createReader, getRot0PosFunc getRot0Pos, getSeqStatsFunc getSeqStats, RandomSeqAccessor origSeqAccess, deleteSASeqSrcFunc deleteSASS, newMRAEncFunc newMRAEnc, generatorFunc generator, void *generatorState) { gt_assert(src); gt_assert(createReader || createTranslator); gt_assert(getRot0Pos); src->seqLen = seqLen; src->createTranslator = createTranslator; /* createTranslator is not NULL iff read from suffixerator */ /* createReader is not NULL iff read from suffixarray */ if (createTranslator && !createReader) { src->createReader = gt_SASSGenericCreateReader; } else { src->createReader = createReader; } src->getRot0Pos = getRot0Pos; src->getSeqStats = getSeqStats; src->origSequenceAccess = origSeqAccess; src->deleteSASS = deleteSASS; src->newMRAEnc = newMRAEnc; src->alphabet = NULL; gt_initEmptySeqReaderSet(&src->readerSet, SFX_REQUEST_NONE, (createTranslator != NULL) ? true : false, sizeof (unsigned long), generator, generatorState); gt_initSATaggedXltorStateList(&src->xltorStates); } static inline void destructSASeqSrc(SASeqSrc *src) { if (src->alphabet) gt_MRAEncDelete(src->alphabet); gt_destructSATaggedXltorStateList(&src->xltorStates); gt_destructSeqReaderSet(&src->readerSet); } static inline void SASSDelete(SASeqSrc *src) { src->deleteSASS(src); } #endif genometools-1.5.1/src/match/eis-sa-common.c000066400000000000000000000067011211610345200205460ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma_api.h" #include "core/encseq.h" #include "match/eis-sa-common.h" size_t gt_translateSuftab2BWT(void *translator, void *voiddest, const unsigned long *src, size_t len) { struct encSeqTrState *trState = (struct encSeqTrState *) translator; GtUchar *dest = (GtUchar *) voiddest; size_t idx; gt_assert(trState); for (idx = 0; idx < len; ++idx) { dest[idx] = sfxIdx2BWTSym(src[idx], trState->encseq, trState->readmode); } return len * sizeof (GtUchar); } size_t gt_translateSuftab2BWTSuffixsortspace( void *translator, void *voiddest, const GtSuffixsortspace *suffixsortspace, unsigned long offset, size_t len) { struct encSeqTrState *trState = (struct encSeqTrState *) translator; GtUchar *dest = (GtUchar *) voiddest; size_t idx; gt_assert(trState); for (idx = 0; idx < len; ++idx) { dest[idx] = sfxIdx2BWTSym(gt_suffixsortspace_getdirect(suffixsortspace,offset+idx), trState->encseq, trState->readmode); } return len * sizeof (GtUchar); } struct saTaggedXltorStateLE { struct saTaggedXltorStateLE *next; struct saTaggedXltorState state; }; void gt_initSATaggedXltorStateList(struct saTaggedXltorStateList *saXltorStateList) { saXltorStateList->numXltors = 0; saXltorStateList->stateList = NULL; } void gt_destructSATaggedXltorStateList( struct saTaggedXltorStateList *saXltorStateList) { struct saTaggedXltorStateLE *next; gt_assert(saXltorStateList); next = saXltorStateList->stateList; while (next) { struct saTaggedXltorStateLE *prev = next; next = next->next; gt_free(prev); } } struct saTaggedXltorState * gt_addSuffixarrayXltor(struct saTaggedXltorStateList *saXltorStateList, enum sfxDataRequest request, struct encSeqTrState state) { struct saTaggedXltorStateLE *newSAXltorState; newSAXltorState = gt_malloc(sizeof (*newSAXltorState)); newSAXltorState->state.typeTag = request; newSAXltorState->state.state = state; newSAXltorState->next = saXltorStateList->stateList; saXltorStateList->stateList = newSAXltorState; ++(saXltorStateList->numXltors); return &newSAXltorState->state; } SeqDataReader gt_SASSGenericCreateReader(SASeqSrc *src, enum sfxDataRequest request) { return gt_seqReaderSetRegisterConsumer(&src->readerSet, request, src->createTranslator(src, request)); } genometools-1.5.1/src/match/eis-sa-common.h000066400000000000000000000106431211610345200205530ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /** * \file eis-suffixerator-interface.h * \brief Methods to call suffixerator functions through one object, * but have the same data available to multiple listeners. * \author Thomas Jahns */ #ifndef EIS_SA_COMMON_H #define EIS_SA_COMMON_H #include #include "core/defined-types.h" #include "core/encseq.h" #include "core/types_api.h" #include "match/eis-mrangealphabet.h" #include "match/eis-random-seqaccess.h" #include "match/eis-seqdatasrc.h" #include "match/sfx-suffixgetset.h" /** * Describes what kind of information will be read by a requestor: */ enum sfxDataRequest { SFX_REQUEST_NONE = 0, /**< empty request, used for special purposes */ SFX_REQUEST_SUFTAB = 1<<0, /**< request for suffix array entries */ SFX_REQUEST_BWTTAB = 1<<1, /**< request for bwt table */ SFX_REQUEST_ALL = SFX_REQUEST_SUFTAB | SFX_REQUEST_BWTTAB, /**< used as bitmask */ SFX_REQUEST_ANY = SFX_REQUEST_ALL, /**< used as bitmask */ }; /** * @return Symbol at position sufIdx or UNDEFBWTCHAR i.e. the terminator */ static inline GtUchar sfxIdx2BWTSym(unsigned long sufIdx, const GtEncseq *encseq, GtReadmode readmode); static inline size_t EncSeqGetSubSeq(const GtEncseq *encseq, GtReadmode readmode, unsigned long pos, size_t len, GtUchar *subStr); struct encSeqTrState { const GtEncseq *encseq; GtReadmode readmode; }; /** * @brief Produce given length of symbols from the BWT by translating * an array of suffix indices, this version uses the values of * suffix array and encoded sequence instead of reading the BWT file. * @param state reference of a SuffixarrayFileInterface * @param dest write symbols here * @param src read suffix indices from here * @param len length of string to read */ size_t gt_translateSuftab2BWT(void *data, void *voiddest, const unsigned long *src, size_t len); size_t gt_translateSuftab2BWTSuffixsortspace( void *translator, void *voiddest, const GtSuffixsortspace *suffixsortspace, unsigned long offset, size_t len); struct saTaggedXltorState { enum sfxDataRequest typeTag; struct encSeqTrState state; }; struct saTaggedXltorStateList { size_t numXltors; struct saTaggedXltorStateLE *stateList; }; void gt_initSATaggedXltorStateList(struct saTaggedXltorStateList *saXltorStateList); void gt_destructSATaggedXltorStateList( struct saTaggedXltorStateList *saXltorStateList); struct saTaggedXltorState * gt_addSuffixarrayXltor(struct saTaggedXltorStateList *saXltorStateList, enum sfxDataRequest request, struct encSeqTrState state); typedef struct SASeqSrc SASeqSrc; static inline SeqDataReader SASSCreateReader(SASeqSrc *src, enum sfxDataRequest request); static inline Definedunsignedlong SASSGetRot0Pos(const SASeqSrc *src); static inline unsigned long SASSGetLength(const SASeqSrc *src); static inline MRAEnc * SASSNewMRAEnc(const SASeqSrc *src); static inline const MRAEnc * SASSGetMRAEnc(SASeqSrc *src); static inline const struct seqStats * SASSGetSeqStats(const SASeqSrc *src); static inline size_t SASSAccessSequence(const SASeqSrc *src, Symbol *dest, unsigned long pos, size_t len); static inline RandomSeqAccessor SASSGetOrigSeqAccessor(const SASeqSrc *src); static inline void SASSDelete(SASeqSrc *src); #include "match/eis-sa-common-siop.h" #endif genometools-1.5.1/src/match/eis-seqblocktranslate.c000066400000000000000000000431751211610345200224040ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef NDEBUG #include #endif #include "core/bitpackstring.h" #include "core/combinatorics.h" #include "core/mathsupport.h" #include "core/dynalloc.h" #include "core/log.h" #include "core/ma_api.h" #include "core/unused_api.h" #include "match/eis-seqblocktranslate.h" #if 1 /** * Setup composition array for lexically maximal composition. * @param maxSym last symbol to represent (lexical maximum) * @param blockSize sum of symbol counts in composition * (i.e. composition contains this many symbols) * @param composition vector of symbol counts * @param symRMNZ points to index of rightmost non-zero symbol count * in composition vector (state of generating procedure) */ static inline void initComposition(Symbol maxSym, unsigned blockSize, unsigned composition[maxSym + 1], unsigned *symRMNZ) { memset(composition, 0, sizeof (composition[0]) * (maxSym)); composition[*symRMNZ = maxSym] = blockSize; } #else /** * Setup composition array for lexically minimal composition. * @param maxSym last symbol to represent (lexical maximum) * @param blockSize sum of symbol counts in composition * (i.e. composition contains this many symbols) * @param composition vector of symbol counts * @param symRMNZ points to index of rightmost non-zero symbol count * in composition vector (state of generating procedure) */ static inline void initComposition(Symbol maxSym, unsigned blockSize, unsigned composition[maxSym + 1], unsigned *symLMNZ) { memset(composition + 1, 0, sizeof (composition[0]) * (maxSym)); composition[*symLMNZ = 0] = blockSize; } #endif #if 1 /** * Compute lexically previous composition given any composition in * \link composition \endlink. * @param composition array[0..maxSym] of occurrence counts for each symbol * @param maxSym last symbol index of composition * @param symMNZ rightmost non-zero entry of composition[] */ static inline void nextComposition(unsigned composition[], Symbol maxSym, unsigned *symRMNZ) { ++composition[*symRMNZ - 1]; if (!(--composition[*symRMNZ])) { --*symRMNZ; } else if (!(composition[maxSym])) { composition[maxSym] = composition[*symRMNZ]; composition[*symRMNZ] = 0; *symRMNZ = maxSym; } } #else /** * Compute lexically next composition given any composition in * \link composition \endlink. * @param composition array[0..maxSym] of occurrence counts for each symbol * @param maxSym last symbol index of composition * @param symMNZ rightmost non-zero entry of composition[] */ static inline void nextComposition(unsigned composition[], Symbol maxSym, unsigned *symLMNZ) { ++composition[*symLMNZ + 1]; if (!(--composition[*symLMNZ])) { ++*symLMNZ; } else if (!(composition[0])) { composition[0] = composition[*symLMNZ]; composition[*symLMNZ] = 0; *symLMNZ = 0; } } #endif static int initPermutationsList(const unsigned *composition, struct permList *permutation, BitString permStore, BitOffset permOffset, unsigned blockSize, unsigned alphabetSize, unsigned bitsPerSymbol); static void destructPermutationsList(struct permList *permutation); #ifdef EIS_DEBUG static void printComposition(FILE *fp, const unsigned *composition, unsigned alphabetSize, unsigned blockSize); #endif /* EIS_DEBUG */ static inline BitOffset compListPermStartOffset(struct compList *list, unsigned numSyms) { return list->numCompositions * list->bitsPerCount * numSyms; } #define gt_initCompositionListErrRet() \ do { \ if (newList->permutations) \ { \ unsigned i; \ for (i = 0; i < cmpIdx; ++i) \ destructPermutationsList(newList->permutations + i ); \ gt_free(newList->permutations); \ } \ if (newList->catCompsPerms) \ gt_free(newList->catCompsPerms); \ if (composition) gt_free(composition); \ return 0; \ } while (0) int gt_initCompositionList(struct compList *newList, unsigned blockSize, unsigned alphabetSize) { unsigned *composition = NULL; Symbol maxSym = alphabetSize - 1; BitOffset bitsPerComp, bitsPerCount, bitsPerPerm; size_t numCompositions, cmpIdx = 0; size_t maxNumPermutations = 0, numTotalPermutations; gt_assert(newList); newList->permutations = NULL; newList->catCompsPerms = NULL; if (!(composition = gt_malloc(sizeof (composition[0]) * alphabetSize))) gt_initCompositionListErrRet(); bitsPerComp = alphabetSize * (bitsPerCount = gt_requiredUIntBits(blockSize)); newList->bitsPerCount = bitsPerCount; numCompositions = newList->numCompositions = gt_combinatorics_binomial_simple(blockSize + maxSym, maxSym); numTotalPermutations = gt_combinatorics_i_pow(alphabetSize, blockSize); newList->compositionIdxBits = gt_requiredUInt64Bits(numCompositions - 1); newList->bitsPerSymbol = gt_requiredUIntBits(maxSym); bitsPerPerm = newList->bitsPerSymbol * blockSize; { size_t size = bitElemsAllocSize(numCompositions * bitsPerComp + numTotalPermutations * bitsPerPerm) * sizeof (BitElem); if (size == SIZE_MAX) gt_initCompositionListErrRet(); newList->catCompsPerms = gt_malloc(size); } newList->permutations = gt_calloc(sizeof (struct permList), numCompositions); { unsigned symRMNZ; BitOffset offset = 0, permOffset = compListPermStartOffset(newList, alphabetSize); #ifndef NDEBUG size_t permSum = 0; #endif initComposition(maxSym, blockSize, composition, &symRMNZ); do { #ifdef EIS_DEBUG printComposition(stderr, composition, alphabetSize, blockSize); #endif /* EIS_DEBUG */ gt_bsStoreUniformUIntArray(newList->catCompsPerms, offset, bitsPerCount, alphabetSize, composition); gt_assert(cmpIdx > 1?(gt_bsCompare(newList->catCompsPerms, offset, bitsPerComp, newList->catCompsPerms, offset - bitsPerComp, bitsPerComp)>0):1); if (initPermutationsList(composition, newList->permutations + cmpIdx, newList->catCompsPerms, permOffset, blockSize, alphabetSize, newList->bitsPerSymbol)) gt_initCompositionListErrRet(); #if defined(EIS_DEBUG) && !defined(NDEBUG) gt_log_log("%lu", (unsigned long)newList->permutations[cmpIdx].numPermutations); #endif #ifndef NDEBUG permSum += newList->permutations[cmpIdx].numPermutations; #endif permOffset += newList->permutations[cmpIdx].numPermutations * bitsPerPerm; if (newList->permutations[cmpIdx].numPermutations > maxNumPermutations) maxNumPermutations = newList->permutations[cmpIdx].numPermutations; if (++cmpIdx < numCompositions) ; else break; offset += bitsPerComp; nextComposition(composition, maxSym, &symRMNZ); } while (1); /* verify that the last composition is indeed the lexically maximally */ gt_assert(composition[0] == blockSize); #if defined(EIS_DEBUG) && !defined(NDEBUG) gt_log_log("permSum=%lu, alphabetSize=%lu, blockSize=%d, " "pow(alphabetSize, blockSize)=%f", (unsigned long)permSum, (unsigned long)alphabetSize, blockSize, gt_power_for_small_exponents(alphabetSize, blockSize)); #endif gt_assert(permSum == gt_power_for_small_exponents(alphabetSize, blockSize)); } newList->maxPermIdxBits = gt_requiredUInt64Bits(maxNumPermutations - 1); gt_free(composition); return 1; } void gt_destructCompositionList(struct compList *clist) { { unsigned i; for (i = 0; i < clist->numCompositions; ++i) destructPermutationsList(clist->permutations + i); } gt_free(clist->permutations); gt_free(clist->catCompsPerms); } struct compList * gt_newCompositionList(unsigned blockSize, unsigned alphabetSize) { struct compList *newList = NULL; if (!(newList = gt_calloc(1, sizeof (struct compList)))) return NULL; if (!gt_initCompositionList(newList, blockSize, alphabetSize)) { gt_free(newList); return NULL; } return newList; } void gt_deleteCompositionList(struct compList *clist) { gt_destructCompositionList(clist); gt_free(clist); } #ifdef EIS_DEBUG /** * Compute number of digits a value would require when displayed in * selected number system (i.e. 2=binary, 10=decimal). * @param d value to be displayed * @param base number of symbols in output alphabet * @return number of digits required for output */ static inline int digitPlaces(long d, int base) { int l=1; while (d/=base) ++l; return l; } static void printComposition(FILE *fp, const unsigned *composition, unsigned alphabetSize, unsigned blockSize) { Symbol sym; unsigned width = digitPlaces(blockSize, 10); for (sym = 0; sym < alphabetSize; ++sym) { fprintf(fp, "%*d ", width, composition[sym]); } fputs("\n", fp); } #endif /* EIS_DEBUG */ static void initPermutation(Symbol *permutation, const unsigned *composition, unsigned alphabetSize); static inline void nextPermutation(Symbol *permutation, unsigned blockSize); #ifdef EIS_DEBUG static void printPermutation(FILE *fp, Symbol *permutation, unsigned blockSize); #endif /* EIS_DEBUG */ static int initPermutationsList(const unsigned *composition, struct permList *permutation, BitString permStore, BitOffset permOffset, unsigned blockSize, unsigned alphabetSize, unsigned bitsPerSymbol) { size_t numPermutations = permutation->numPermutations = gt_combinatorics_multinomial(blockSize, alphabetSize, composition); if (numPermutations > 1) permutation->permIdxBits = gt_requiredUInt64Bits(numPermutations - 1); else permutation->permIdxBits = 0; Symbol *currentPermutation; BitOffset bitsPerPermutation = bitsPerSymbol * blockSize; if (!(currentPermutation = gt_malloc(sizeof (Symbol) * blockSize))) return -1; permutation->catPermsOffset = permOffset; initPermutation(currentPermutation, composition, alphabetSize); { size_t i = 0; BitOffset offset = permOffset; do { gt_bsStoreUniformSymbolArray(permStore, offset, bitsPerSymbol, blockSize, currentPermutation); #ifdef EIS_DEBUG printPermutation(stderr, currentPermutation, blockSize); #endif /* EIS_DEBUG */ gt_assert(i > 0?(gt_bsCompare(permStore, offset, bitsPerPermutation, permStore, offset - bitsPerPermutation, bitsPerPermutation)>0):1); if (++i < numPermutations) ; else break; offset += bitsPerPermutation; nextPermutation(currentPermutation, blockSize); } while (1); } gt_free(currentPermutation); return 0; } static void destructPermutationsList(GT_UNUSED struct permList *permutation) { /* gt_free(permutation->catPerms); */ } static void initPermutation(Symbol *permutation, const unsigned *composition, unsigned alphabetSize) { Symbol sym, *p = permutation; unsigned j; for (sym = 0; sym < alphabetSize; ++sym) for (j = 0; j < composition[sym]; ++j) *(p++) = sym; } static void nextPermutation(Symbol *permutation, unsigned blockSize) { /* * Every permutation represents a leaf in the decision tree * generating all permutations, thus given one permutation, we * ascend in the tree until we can make a decision resulting in a * lexically larger value. */ unsigned upLvl = blockSize - 1; { Symbol maxSymInSuf = permutation[blockSize - 1]; do { if (upLvl == 0 || maxSymInSuf > permutation[--upLvl]) break; if (permutation[upLvl] > maxSymInSuf) maxSymInSuf = permutation[upLvl]; } while (1); } /* now that we have found the branch point, descend again, * selecting first the next largest symbol */ { Symbol saved = permutation[upLvl]; Symbol swap = permutation[upLvl + 1]; unsigned swapIdx = upLvl + 1; unsigned i; for (i = swapIdx + 1; i < blockSize; ++i) { if (permutation[i] > saved && permutation[i] < swap) swap = permutation[i], swapIdx = i; } permutation[upLvl] = swap; permutation[swapIdx] = saved; } for (++upLvl;upLvl < blockSize - 1; ++upLvl) { /* find minimal remaining symbol */ unsigned i, minIdx = upLvl; Symbol minSym = permutation[upLvl]; for (i = upLvl + 1; i < blockSize; ++i) if (permutation[i] < minSym) minSym = permutation[i], minIdx = i; permutation[minIdx] = permutation[upLvl]; permutation[upLvl] = minSym; } } #ifdef EIS_DEBUG static void printPermutation(FILE *fp, Symbol *permutation, unsigned blockSize) { unsigned i; if (blockSize) fprintf(fp, "%lu", (unsigned long)permutation[0]); for (i = 1; i < blockSize; ++i) { fprintf(fp, "%lu", (unsigned long)permutation[i]); } fputs("\n", fp); } #endif /* EIS_DEBUG */ int gt_block2IndexPair(const struct compList *compositionTable, unsigned blockSize, unsigned alphabetSize, const Symbol *block, PermCompIndex idxOutput[2], unsigned *bitsOfPermIdx, BitString permCompPA, unsigned *compPA) { unsigned bitsPerCount; BitOffset bitsPerComposition, bitsPerPermutation; BitString permCompBitString; gt_assert(compositionTable && idxOutput && block); gt_assert(blockSize > 0); bitsPerComposition = (bitsPerCount = compositionTable->bitsPerCount) * alphabetSize; bitsPerPermutation = compositionTable->bitsPerSymbol * blockSize; if (permCompPA) permCompBitString = permCompPA; else permCompBitString = gt_malloc(bitElemsAllocSize(bitsPerComposition + bitsPerPermutation) * sizeof (BitElem)); { /* first compute composition from block */ size_t i; unsigned *composition; if (compPA) { composition = compPA; memset(composition, 0, sizeof (composition[0])*alphabetSize); } else composition = gt_calloc(sizeof (composition[0]), alphabetSize); for (i = 0; i < blockSize; ++i) { ++composition[block[i]]; } gt_bsStoreUniformUIntArray(permCompBitString, 0, bitsPerCount, alphabetSize, composition); if (!compPA) gt_free(composition); } { /* do binary search for composition (simplified because the list * contains every composition possible and thus cmpresult will * become 0 at some point) */ size_t compIndex = compositionTable->numCompositions / 2; size_t divStep = compIndex; int cmpresult; while ((cmpresult = gt_bsCompare(permCompBitString, 0, bitsPerComposition, compositionTable->catCompsPerms, compIndex * bitsPerComposition, bitsPerComposition))) { if (divStep > 1) divStep >>= 1; /* divStep /= 2 */ if (cmpresult > 0) compIndex += divStep; else /* cmpresult < 0 */ compIndex -= divStep; } idxOutput[0] = compIndex; } { const struct permList *permutation = compositionTable->permutations + idxOutput[0]; if (bitsOfPermIdx) *bitsOfPermIdx = permutation->permIdxBits; if (permutation->numPermutations > 1) { /* build permutation bitstring */ gt_bsStoreUniformSymbolArray(permCompBitString, bitsPerComposition, compositionTable->bitsPerSymbol, blockSize, block); /* do binary search for permutation */ { size_t permIndex = permutation->numPermutations / 2; size_t divStep = permIndex; int cmpresult; while ((cmpresult = gt_bsCompare(permCompBitString, bitsPerComposition, bitsPerPermutation, compositionTable->catCompsPerms, permutation->catPermsOffset + permIndex * bitsPerPermutation, bitsPerPermutation))) { if (divStep > 1) divStep >>= 1; /* divStep /= 2 */ if (cmpresult > 0) permIndex += divStep; else /* cmpresult < 0 */ permIndex -= divStep; } idxOutput[1] = permIndex; } } else idxOutput[1] = 0; } if (!permCompPA) gt_free(permCompBitString); return 0; } genometools-1.5.1/src/match/eis-seqblocktranslate.h000066400000000000000000000176021211610345200224050ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SEQBLOCKTRANSLATE_H #define EIS_SEQBLOCKTRANSLATE_H /** * \file eis-seqblocktranslate.h * Translate fixed length substrings (q-words) to a pair of indices: one to * designate the composition counts and one to define the actual * sequence */ #include #include #include #include "match/eis-bitpackseqpos.h" #include "match/eis-mrangealphabet.h" /** store indices in this scalar */ typedef uint32_t PermCompIndex; /** method to retrieve one index from a BitString */ #define gt_bsGetPermCompIndex gt_bsGetUInt32 /** method to store one index in a BitString */ #define gt_bsStorePermCompIndex gt_bsStoreUInt32 /** * For permutations common to one composition. */ struct permList { size_t numPermutations; /**< number of permutations this * composition produces */ unsigned permIdxBits; /**< bits required to store values * from 0..numPermuations-1 */ BitOffset catPermsOffset; /**< offset into the table of all * permutations at which the * permutations corresponding to this * composition are stored */ }; /** * Holds the lists of compositions and permutations. */ struct compList { size_t numCompositions; /**< how many ways are there to choose * q symbols from the given alphabet */ struct permList *permutations;/**< reference of list of permutations */ BitString catCompsPerms; /**< bitstring with all compositions, * followed by all permutations * encoded in minimal space * concatenated together */ unsigned bitsPerCount, /**< bits required to hold one value 0..q */ bitsPerSymbol, /**< bits for each symbol */ compositionIdxBits, /**< gt_log_2 of numcompositions */ maxPermIdxBits; /**< maximum bit length of permutation * indices */ }; /** * @brief construct object to translate q-words to * composition/permutation index tuple * @param compList * @param blockSize length of q-words to encode * @param numSyms size of alphabet * @return 0 on error, !0 otherwise */ int gt_initCompositionList(struct compList *compList, unsigned blockSize, unsigned numSyms); /** * Deallocate resources of composition list object, storage struct is not freed. * @param clist */ void gt_destructCompositionList(struct compList *clist); /** * @brief create new object to map q-words to composition/permutation * index tuples * @param blockSize length of q-words to map * @param alphabetSize * @return NULL on error */ struct compList * gt_newCompositionList(unsigned blockSize, unsigned alphabetSize); /** * Delete composition list object. * @param clist */ void gt_deleteCompositionList(struct compList *clist); /** * \brief Transforms a block-sized sequence of symbols to corresponding * index-pair representation of block-composition index. * @param compositionTable tables to use for lookup * @param blockSize length of encoded sequence blocks * @param alphabetSize encoded symbols are from range 0..(alphabetSize - 1) * @param block symbol sequence holding at least as many symbols as * required by seqIdx * @param idxOutput on return idxOutput[0] holds the composition * index, idxOutput[1] the permutation index. * @param bitsOfPermIdx if non-NULL, the number of significant bits * for the permutation index is stored here. * @param permCompPA if not NULL must point to a memory region of * sufficient size to hold the concatenated bistring representations * of composition and permutation, composition at offset 0, * permutation at offset compositionTable->bitsPerCount * alphabetSize. * @param compPA if not NULL must reference a memory region of * sufficient size to hold the composition representation as alphabet * range sized sequence. * @return -1 in case of memory exhaustion, cannot happen if both * permCompPA and compPA are valid preallocated memory regions, 0 * otherwise. */ int gt_block2IndexPair(const struct compList *compositionTable, unsigned blockSize, unsigned alphabetSize, const Symbol *block, PermCompIndex idxOutput[2], unsigned *bitsOfPermIdx, BitString permCompPA, unsigned *compPA); /** * @brief Give q-word corresponding to pair of indices. * @param compositionTable * @param blockSize q-word length (must be same as used on construction) * @param compIdx composition index * @param permIdx permutation index * @param block write sequence of symbols here * @param subLen only unpack this many symbols */ static inline void indexPair2block(const struct compList *compositionTable, unsigned blockSize, PermCompIndex compIdx, PermCompIndex permIdx, Symbol *block, unsigned subLen) { unsigned bitsPerPermutation; struct permList *permutationList; gt_assert(compositionTable && block); gt_assert(subLen <= blockSize); bitsPerPermutation = compositionTable->bitsPerSymbol * blockSize; permutationList = compositionTable->permutations + compIdx; gt_bsGetUniformSymbolArray( compositionTable->catCompsPerms, permutationList->catPermsOffset + bitsPerPermutation * permIdx, compositionTable->bitsPerSymbol, subLen, block); } /** * @brief Find how often a symbol occurs in a composition given by index * @param compositionTable * @param alphabetSize * @param compIndex composition index * @param sym * @return number of symbol occurrences */ static inline unsigned symCountFromComposition(struct compList *compositionTable, unsigned alphabetSize, PermCompIndex compIndex, Symbol sym) { BitOffset bitsPerComp, bitsPerCount; gt_assert(compositionTable); bitsPerCount = compositionTable->bitsPerCount; bitsPerComp = bitsPerCount * alphabetSize; gt_assert(compIndex < compositionTable->numCompositions); return gt_bsGetUInt(compositionTable->catCompsPerms, compIndex * bitsPerComp + sym * bitsPerCount, bitsPerCount); } /** * @brief Add symbol occurrences for a composition given by index * @param compositionTable * @param alphabetSize * @param compIndex composition index * @param counts add occurrence counts to this array */ static inline void addSymCountsFromComposition(struct compList *compositionTable, unsigned alphabetSize, PermCompIndex compIndex, unsigned long *counts) { BitOffset bitsPerComp, bitsPerCount; gt_assert(compositionTable); bitsPerCount = compositionTable->bitsPerCount; bitsPerComp = bitsPerCount * alphabetSize; gt_assert(compIndex < compositionTable->numCompositions); gt_bsGetUniformUlongArrayAdd(compositionTable->catCompsPerms, compIndex * bitsPerComp, bitsPerCount, alphabetSize, #ifdef _LP64 (uint64_t*) counts); #else (uint32_t*) counts); #endif } #endif genometools-1.5.1/src/match/eis-seqdatasrc.h000066400000000000000000000101111211610345200210020ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SEQDATASRC_H #define EIS_SEQDATASRC_H /** * \file eis-seqdatasrc.h * Abstract interface for sequential data sources. */ #include #include #include "core/error.h" #include "stamp.h" #include "sfx-suffixgetset.h" /* sequential data source api */ typedef void *SeqDataSrc; /** * @param len number of elements (objects) to read * @return number of elements read (less then len on end-of-file etc.) */ typedef size_t (*seqDataReadFunc)(SeqDataSrc src, void *dest, size_t len); struct seqDataReader { SeqDataSrc src; seqDataReadFunc readData; }; typedef struct seqDataReader SeqDataReader; static inline int SDRIsValid(SeqDataReader sr) { return sr.readData != NULL; } static inline size_t SDRRead(SeqDataReader sr, void *dest, size_t len) { return sr.readData(sr.src, dest, len); } /* while the above describes a data source, this is a corresponding sink */ typedef void *SeqDataDest; typedef size_t (*seqDataWriteFunc)(SeqDataDest dest, const void *src, size_t len); struct seqDataWriter { seqDataWriteFunc writeData1; SeqDataDest dest; }; typedef struct seqDataWriter SeqDataWriter; static inline size_t SDWWrite(SeqDataWriter sw, const void *src, size_t len) { return sw.writeData1(sw.dest, src, len); } /* generic data translator api */ union translatorState { void *ref; size_t elemSize; }; typedef union translatorState TranslatorState; /** * @return number of chars! written to dest */ typedef size_t (*seqDataTranslateFunc)(void *translator, void *dest, const unsigned long *src, size_t len); typedef size_t (*seqDataTranslateSuffixsortspaceFunc)( void *translator, void *dest, const GtSuffixsortspace *suffixsortspace, unsigned long offset, size_t len); struct seqDataTranslator { TranslatorState state; seqDataTranslateFunc translateData; seqDataTranslateSuffixsortspaceFunc translateDataSuffixsortspace; }; typedef struct seqDataTranslator SeqDataTranslator; static inline size_t SDRTranslate(SeqDataTranslator xltor, void *dest, const unsigned long *src, size_t len) { if (xltor.translateData != NULL) { return xltor.translateData(xltor.state.ref, dest, src, len); } /* fall back to zero-translation i.e. verbatim copy */ memcpy(dest, src, len * xltor.state.elemSize); return len * xltor.state.elemSize; } static inline size_t SDRTranslateSuffixsortspace(SeqDataTranslator xltor, void *dest, const GtSuffixsortspace *suffixsortspace, unsigned long offset, size_t len) { if (xltor.translateDataSuffixsortspace != NULL) { return xltor.translateDataSuffixsortspace(xltor.state.ref, dest, suffixsortspace, offset, len); } /* fall back to zero-translation i.e. verbatim copy */ { size_t idx; unsigned long *ulongdest = (unsigned long *) dest; for (idx = 0; idx < len; idx++) { ulongdest[idx] = gt_suffixsortspace_getdirect(suffixsortspace,offset+idx); } } /*memcpy(dest, src, len * xltor.state.elemSize); */ return len * xltor.state.elemSize; } #endif genometools-1.5.1/src/match/eis-seqranges-priv.h000066400000000000000000000042611211610345200216270ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SEQRANGES_PRIV_H #define EIS_SEQRANGES_PRIV_H #include "match/eis-bitpackseqpos.h" #include "match/eis-seqranges.h" typedef uint16_t regionLength; struct seqRange { unsigned long startPos; BitElem symLenStr[sizeof (unsigned long) / sizeof (BitElem)]; /**< holds the bits required for the symbol stored and the length * of the range */ }; enum { symLenStrBits = sizeof (unsigned long) / sizeof (BitElem) * bitElemBits, }; struct seqRangeList { size_t numRangesStorable, numRanges; struct seqRange *ranges; unsigned long *partialSymSums; const MRAEnc *alphabet; unsigned symBits; unsigned long maxRangeLen; }; static inline unsigned long seqRangeLen(const struct seqRange *p, unsigned symBits) { return gt_bsGetUlong(p->symLenStr, symBits, symLenStrBits - symBits); } static inline Symbol seqRangeSym(const struct seqRange *p, unsigned symBits) { return gt_bsGetSymbol(p->symLenStr, 0, symBits); } static inline void seqRangeSetLen(struct seqRange *p, unsigned long len, unsigned symBits) { return gt_bsStoreUlong(p->symLenStr, symBits, symLenStrBits - symBits, len); } static inline void seqRangeSetSym(struct seqRange *p, Symbol sym, unsigned symBits) { return gt_bsStoreSymbol(p->symLenStr, 0, symBits, sym); } static inline int posIsInSeqRange(struct seqRange *p, unsigned long pos, unsigned symBits) { return (pos >= p->startPos && pos < p->startPos + seqRangeLen(p, symBits)); } #endif genometools-1.5.1/src/match/eis-seqranges.c000066400000000000000000000564421211610345200206540ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/bsearch.h" #include "core/error.h" #include "core/ma_api.h" #include "core/minmax.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "match/eis-seqranges.h" #include "match/eis-seqranges-priv.h" struct seqRangeList * gt_newSeqRangeList(size_t rangesStartNum, const MRAEnc *alphabet, enum SRLFeatures features) { struct seqRangeList *newList; newList = gt_malloc(sizeof (struct seqRangeList)); newList->numRanges = 0; newList->numRangesStorable = rangesStartNum; newList->ranges = gt_malloc(sizeof (newList->ranges[0]) * rangesStartNum); if (features & SRL_PARTIAL_SYMBOL_SUMS) newList->partialSymSums = gt_malloc(sizeof (unsigned long) * gt_MRAEncGetSize(alphabet) * rangesStartNum); else newList->partialSymSums = NULL; newList->alphabet = alphabet; newList->symBits = requiredSymbolBits(gt_MRAEncGetSize(alphabet) - 1); if (newList->symBits) newList->maxRangeLen = (((unsigned long)1) << (symLenStrBits - newList->symBits)) - 1; else newList->maxRangeLen = ~(unsigned long)0; return newList; } void gt_SRLCompact(struct seqRangeList *rangeList) { gt_assert(rangeList); rangeList->ranges = gt_realloc(rangeList->ranges, sizeof (rangeList->ranges[0]) * rangeList->numRanges); if (rangeList->partialSymSums) rangeList->partialSymSums = gt_realloc(rangeList->partialSymSums, sizeof (unsigned long) * gt_MRAEncGetSize(rangeList->alphabet) * rangeList->numRanges); rangeList->numRangesStorable = rangeList->numRanges; } void gt_deleteSeqRangeList(struct seqRangeList *rangeList) { gt_assert(rangeList); if (rangeList->ranges) gt_free(rangeList->ranges); if (rangeList->partialSymSums) gt_free(rangeList->partialSymSums); gt_free(rangeList); } void gt_SRLAppendNewRange(struct seqRangeList *rangeList, unsigned long pos, unsigned long len, Symbol esym) { gt_assert(rangeList); if (len) { Symbol sym = MRAEncMapSymbol(rangeList->alphabet, esym); struct seqRange *p; unsigned long *pSums; size_t numRanges = rangeList->numRanges, numSyms = gt_MRAEncGetSize(rangeList->alphabet), numNewRanges = len/rangeList->maxRangeLen + ((len%rangeList->maxRangeLen)?1:0); unsigned symBits = rangeList->symBits; if (numRanges + numNewRanges > rangeList->numRangesStorable) { size_t newSize = numRanges + 2 * numNewRanges; rangeList->ranges = gt_realloc(rangeList->ranges, sizeof (struct seqRange) * newSize); if (rangeList->partialSymSums) rangeList->partialSymSums = gt_realloc(rangeList->partialSymSums, sizeof (unsigned long) * numSyms * newSize); rangeList->numRangesStorable = newSize; } p = rangeList->ranges + numRanges; if (rangeList->partialSymSums) pSums = rangeList->partialSymSums + numSyms * numRanges; else pSums = NULL; while (len > rangeList->maxRangeLen) { p->startPos = pos; seqRangeSetSym(p, sym, symBits); seqRangeSetLen(p, rangeList->maxRangeLen, symBits); pos += rangeList->maxRangeLen; len -= rangeList->maxRangeLen; if (numRanges && pSums) { unsigned long *spDest = pSums, *spSrc = pSums - numSyms; size_t i; for (i = 0; i < numSyms; ++i) { *spDest++ = *spSrc++; } pSums[seqRangeSym(p - 1, symBits)] += seqRangeLen(p - 1, symBits); pSums += numSyms; } else if (pSums) { memset(pSums, 0, sizeof (unsigned long) * numSyms); pSums += numSyms; } ++p; ++numRanges; } if (len) { p->startPos = pos; seqRangeSetSym(p, sym, symBits); seqRangeSetLen(p, len, symBits); if (numRanges && pSums) { unsigned long *spDest = pSums, *spSrc = pSums - numSyms; size_t i; for (i = 0; i < numSyms; ++i) { *spDest++ = *spSrc++; } pSums[seqRangeSym(p - 1, symBits)] += seqRangeLen(p - 1, symBits); pSums += numSyms; } else if (pSums) { memset(pSums, 0, sizeof (unsigned long) * numSyms); pSums += numSyms; } ++numRanges; } gt_assert(numRanges == rangeList->numRanges + numNewRanges); rangeList->numRanges = numRanges; } } void gt_SRLinsertNewRange(GT_UNUSED struct seqRangeList *rangeList, GT_UNUSED unsigned long pos, GT_UNUSED unsigned long len, GT_UNUSED Symbol esym) { gt_assert(rangeList); abort(); /* { */ /* Symbol sym = MRAEncMapSymbol(rangeList->alphabet, esym); */ /* } */ /* currently not implemented because only append is currently * needed */ } void gt_SRLAddPosition(struct seqRangeList *rangeList, unsigned long pos, Symbol esym) { size_t numRanges; struct seqRange *lastRange; unsigned long lastRangeLen; unsigned symBits; Symbol sym; gt_assert(rangeList); sym = MRAEncMapSymbol(rangeList->alphabet, esym); numRanges = rangeList->numRanges; lastRange = rangeList->ranges + numRanges - 1; symBits = rangeList->symBits; if (numRanges) lastRangeLen = seqRangeLen(lastRange, symBits); if (numRanges && lastRange->startPos + lastRangeLen > pos) { /* TODO: search for range */ gt_SRLinsertNewRange(rangeList, pos, 1, esym); } else if (numRanges && (seqRangeSym(lastRange, symBits) == sym) && (lastRange->startPos + lastRangeLen == pos) && (lastRangeLen < rangeList->maxRangeLen)) seqRangeSetLen(lastRange, ++lastRangeLen, symBits); else gt_SRLAppendNewRange(rangeList, pos, 1, esym); } void gt_SRLInitListSearchHint(struct seqRangeList *rangeList, seqRangeListSearchHint *hint) { gt_assert(rangeList && hint); *hint = rangeList->numRanges / 2; } static int posSeqRangeOverlapCompare(const void *key, const void *elem, void *data) { unsigned long pos; const struct seqRange *range; const struct seqRangeList *rangeList; pos = *(const unsigned long *)key; range = elem; rangeList = data; if (pos < range->startPos) return -1; else if (pos >= range->startPos + seqRangeLen(range, rangeList->symBits)) return 1; else return 0; } int gt_SRLOverlapsPosition(struct seqRangeList *rangeList, unsigned long pos, seqRangeListSearchHint *hint, Symbol *symAtPos) { size_t rangeIdx; struct seqRange *p; gt_assert(rangeList); if (hint) rangeIdx = *hint; else rangeIdx = rangeList->numRanges / 2; p = rangeList->ranges + rangeIdx; if (posIsInSeqRange(p, pos, rangeList->symBits)) { if (symAtPos) *symAtPos = MRAEncRevMapSymbol(rangeList->alphabet, seqRangeSym(p, rangeList->symBits)); return 1; } /* TODO: implement "else if" case to also look at next range */ else { unsigned long searchPos = pos; struct seqRange *searchRes = gt_bsearch_data(&searchPos, rangeList->ranges, rangeList->numRanges, sizeof (struct seqRange), posSeqRangeOverlapCompare, rangeList); if (searchRes) { if (symAtPos) *symAtPos = seqRangeSym(searchRes, rangeList->symBits); if (hint) *hint = searchRes - rangeList->ranges; return 1; } else return 0; } } static int posSeqRangeNextCompare(const void *key, const void *elem, void *data) { unsigned long pos; const struct seqRange *range; const struct seqRangeList *rangeList; pos = *(const unsigned long *)key; range = elem; rangeList = data; if (pos < range->startPos) if (pos < range[-1].startPos + seqRangeLen(range - 1, rangeList->symBits)) return -1; else return 0; else if (pos >= range->startPos + seqRangeLen(range, rangeList->symBits)) return 1; else /* pos < range->startPos + range->len && pos >= range->startPos */ return 0; } #define rangeNextMatch(idx) \ ((ranges[idx].startPos >= pos \ || ranges[idx].startPos + seqRangeLen(ranges + idx, symBits) > pos) \ && ranges[idx - 1].startPos + seqRangeLen(ranges + idx - 1, symBits) <= pos) /** * \brief Given a position and an optional search hint, find the next * range either overlapping or ahead of the position. * @param rangeList list of ranges to be searched * @param pos position to search range for * @param hint pointer to position of possibly near range * @return pointer to sequence range or NULL if no corresponding range * was found */ struct seqRange * gt_SRLFindPositionNext(struct seqRangeList *rangeList, unsigned long pos, seqRangeListSearchHint *hint) { /* no ranges no matches in ranges */ seqRangeListSearchHint hintCopy; size_t numRanges; struct seqRange *ranges; unsigned symBits; gt_assert(rangeList); ranges = rangeList->ranges; symBits = rangeList->symBits; if (hint) hintCopy = *hint; else gt_SRLInitListSearchHint(rangeList, &hintCopy); if ((numRanges = rangeList->numRanges) == 0) { return NULL; } if (ranges[0].startPos >= pos || pos < ranges[0].startPos + seqRangeLen(ranges + 0, symBits)) { return ranges + 0; } else if (hintCopy && rangeNextMatch(hintCopy)) { return ranges + hintCopy; } else if ((numRanges > hintCopy + 1) && rangeNextMatch(hintCopy + 1)) { ++hintCopy; if (hint) *hint = hintCopy; return rangeList->ranges + hintCopy; } else if (hintCopy && rangeNextMatch(hintCopy - 1)) { --hintCopy; if (hint) *hint = hintCopy; return rangeList->ranges + hintCopy; } else if (numRanges > 2) { unsigned long searchPos = pos; struct seqRange *searchRes = gt_bsearch_data(&searchPos, rangeList->ranges + 1, rangeList->numRanges - 1, sizeof (struct seqRange), posSeqRangeNextCompare, rangeList); if (searchRes && hint) *hint = searchRes - rangeList->ranges; return searchRes; } else /* numRanges <= 2 */ return NULL; } static int posSeqRangeLastCompare(const void *key, const void *elem) { unsigned long pos; struct seqRange *range; pos = *(unsigned long *)key; range = (struct seqRange *)elem; if (pos >= range->startPos) if (pos < range[1].startPos) return 0; else return 1; else return -1; } #define rangeLastMatch(idx) \ (ranges[idx].startPos <= pos && ranges[idx + 1].startPos > pos) /** * \brief Given a position and an optional search hint, find the next * range either overlapping or ahead of the position. * @param rangeList list of ranges to be searched * @param pos position to search range for * @param hint pointer to position of possibly near range * @return pointer to sequence range or NULL if no corresponding range * was found */ struct seqRange * gt_SRLFindPositionLast(struct seqRangeList *rangeList, unsigned long pos, seqRangeListSearchHint *hint) { /* no ranges no matches in ranges */ seqRangeListSearchHint hintCopy; size_t numRanges; struct seqRange *ranges; GT_UNUSED unsigned symBits; gt_assert(rangeList); ranges = rangeList->ranges; symBits = rangeList->symBits; if (hint) hintCopy = *hint; else gt_SRLInitListSearchHint(rangeList, &hintCopy); if ((numRanges = rangeList->numRanges) == 0) { return NULL; } if (ranges[0].startPos > pos) return NULL; else if (ranges[numRanges - 1].startPos <= pos) { return ranges + numRanges - 1; } else if ((hintCopy < numRanges - 1) && rangeLastMatch(hintCopy)) { return ranges + hintCopy; } else if ((hintCopy < numRanges - 2) && rangeLastMatch(hintCopy + 1)) { ++hintCopy; if (hint) *hint = hintCopy; return ranges + hintCopy; } else if (hintCopy && rangeLastMatch(hintCopy - 1)) { --hintCopy; if (hint) *hint = hintCopy; return ranges + hintCopy; } else if (numRanges > 2) { unsigned long searchPos = pos; struct seqRange *searchRes = bsearch(&searchPos, ranges, rangeList->numRanges - 1, sizeof (struct seqRange), posSeqRangeLastCompare); if (searchRes && hint) *hint = searchRes - ranges; return searchRes; } else /* numRanges <= 2 */ return NULL; } /** * @return 0 on error, >0 on success */ /* FIXME: convert to platform-independent variant */ int gt_SRLSaveToStream(struct seqRangeList *rangeList, FILE *fp) { size_t numRanges; gt_assert(rangeList && fp); numRanges = rangeList->numRanges; gt_xfwrite(&(rangeList->numRanges), sizeof (rangeList->numRanges), 1, fp); gt_xfwrite(rangeList->ranges, sizeof (struct seqRange), numRanges, fp); return 1; } /* FIXME: convert to platform-independent variant */ struct seqRangeList * gt_SRLReadFromStream(FILE *fp, const MRAEnc *alphabet, enum SRLFeatures features, GT_UNUSED GtError *err) { struct seqRangeList *newRangeList; size_t numRanges; gt_assert(fp && err); newRangeList = gt_malloc(sizeof (struct seqRangeList)); newRangeList->alphabet = alphabet; newRangeList->symBits = requiredSymbolBits(gt_MRAEncGetSize(alphabet) - 1); if (newRangeList->symBits) newRangeList->maxRangeLen = (((unsigned long)1) << (symLenStrBits - newRangeList->symBits)) - 1; else newRangeList->maxRangeLen = ~(unsigned long)0; gt_xfread(&(newRangeList->numRanges), sizeof (newRangeList->numRanges), 1, fp); numRanges = newRangeList->numRanges; newRangeList->partialSymSums = NULL; newRangeList->ranges = gt_malloc(sizeof (struct seqRange) * (newRangeList->numRangesStorable = numRanges)); gt_xfread(newRangeList->ranges, sizeof (struct seqRange), numRanges, fp); if (features & SRL_PARTIAL_SYMBOL_SUMS) { unsigned long *partialSymSums; size_t numSyms = gt_MRAEncGetSize(alphabet), i; newRangeList->partialSymSums = partialSymSums = gt_malloc(sizeof (unsigned long) * gt_MRAEncGetSize(alphabet) * numRanges); memset(partialSymSums, 0, sizeof (unsigned long) * numSyms); for (i = 1; i < numRanges; ++i) { struct seqRange *lastRange = newRangeList->ranges + i - 1; Symbol lastSym = seqRangeSym(lastRange, newRangeList->symBits); memcpy(partialSymSums + i * numSyms, partialSymSums + (i - 1) * numSyms, sizeof (unsigned long) * numSyms); partialSymSums[i * numSyms + lastSym] += seqRangeLen(lastRange, newRangeList->symBits); } } return newRangeList; } /** * @param occStore must be pre-initialized (either to some previous * count or zero) table of count for every symbol in alphabet, * i.e. indexing like occStore[sym] for every value of sym stored in * rangeList must be a valid memory reference. */ void gt_SRLSymbolsInSeqRegion(struct seqRangeList *rangeList, unsigned long start, unsigned long end, unsigned long *occStore, seqRangeListSearchHint *hint) { struct seqRange *p; /* find range next to start position */ /* first solve special case where pos precedes very first list * entry, because we want to be able to look at the preceding range * in binary search */ /* no ranges => no symbols in ranges */ if (rangeList->numRanges == 0) return; p = gt_SRLFindPositionNext(rangeList, start, hint); /* no range overlapping or between start and end of sequence? */ if (!p) return; /* iterate over ranges left */ { unsigned long s = MAX(start, p->startPos); struct seqRange *maxRange = rangeList->ranges + rangeList->numRanges - 1; while (s <= end) { unsigned long overlap = MIN(p->startPos + seqRangeLen(p, rangeList->symBits), end + 1) - s; occStore[MRAEncRevMapSymbol(rangeList->alphabet, seqRangeSym(p, rangeList->symBits))] += overlap; if (p == maxRange) break; s = (++p)->startPos; } } } unsigned long gt_SRLSymbolCountInSeqRegion(struct seqRangeList *rangeList, unsigned long start, unsigned long end, Symbol esym, seqRangeListSearchHint *hint) { const struct seqRange *p; if (rangeList->numRanges == 0) return 0; p = gt_SRLFindPositionNext(rangeList, start, NULL); if (p) { if (rangeList->partialSymSums) { const struct seqRange *q = gt_SRLFindPositionLast(rangeList, end, hint); if (!q) { /* in case * - end precedes first region * or * - start is after last region * no symbols can be encoded in range */ return 0; } { size_t pOff = p - rangeList->ranges, qOff = q - rangeList->ranges; size_t numSyms = gt_MRAEncGetSize(rangeList->alphabet); unsigned long symCount; Symbol sym = MRAEncMapSymbol(rangeList->alphabet, esym); unsigned symBits = rangeList->symBits; symCount = rangeList->partialSymSums[qOff * numSyms + sym] - rangeList->partialSymSums[pOff * numSyms + sym]; /* two special cases: start might be inside p and end inside q */ if (sym == seqRangeSym(p, symBits) && start >= p->startPos) symCount -= start - p->startPos; if (sym == seqRangeSym(q, symBits)) { regionLength lastOverlap = MIN(end - q->startPos, seqRangeLen(q, symBits)); symCount += lastOverlap; } return symCount; } } else { unsigned long symCount = 0; unsigned long s = MAX(start, p->startPos); Symbol sym = MRAEncMapSymbol(rangeList->alphabet, esym); unsigned symBits = rangeList->symBits; struct seqRange *maxRange = rangeList->ranges + rangeList->numRanges - 1; while (s < end) { if (seqRangeSym(p, symBits) == sym) symCount += MIN(p->startPos + seqRangeLen(p, symBits), end) - s; if (p == maxRange) break; s = (++p)->startPos; } return symCount; } } else return 0; } unsigned long gt_SRLAllSymbolsCountInSeqRegion(struct seqRangeList *rangeList, unsigned long start, unsigned long end, seqRangeListSearchHint *hint) { const struct seqRange *p; if (rangeList->numRanges == 0) return 0; p = gt_SRLFindPositionNext(rangeList, start, hint); if (p) { if (rangeList->partialSymSums) { const struct seqRange *q = gt_SRLFindPositionLast(rangeList, end, hint); if (!q) { /* in case * - end precedes first region * or * - start is after last region * no symbols can be encoded in range */ return 0; } { size_t pOff = p - rangeList->ranges, qOff = q - rangeList->ranges; size_t numSyms = gt_MRAEncGetSize(rangeList->alphabet); unsigned long symCount = 0; Symbol sym; unsigned symBits = rangeList->symBits; for (sym = 0; sym < numSyms; ++sym) { symCount += rangeList->partialSymSums[qOff * numSyms + sym] - rangeList->partialSymSums[pOff * numSyms + sym]; /* two special cases: start might be inside p and end inside q */ } if (start >= p->startPos) symCount -= start - p->startPos; { regionLength lastOverlap = MIN(end - q->startPos, seqRangeLen(q, symBits)); symCount += lastOverlap; } return symCount; } } else { unsigned long symCount = 0; unsigned long s = MAX(start, p->startPos); struct seqRange *maxRange = rangeList->ranges + rangeList->numRanges - 1; unsigned symBits = rangeList->symBits; while (s < end) { symCount += MIN(p->startPos + seqRangeLen(p, symBits), end) - s; if (p == maxRange) break; s = (++p)->startPos; } return symCount; } } else return 0; } void gt_SRLApplyRangesToSubString(struct seqRangeList *rangeList, Symbol *subString, unsigned long start, unsigned long len, unsigned long subStringOffset, seqRangeListSearchHint *hint) { struct seqRange *nextRange; unsigned long inSeqPos = start; unsigned symBits = rangeList->symBits; gt_assert(rangeList); nextRange = gt_SRLFindPositionNext(rangeList, inSeqPos, hint); do { if (inSeqPos < nextRange->startPos) { inSeqPos = nextRange->startPos; } else { size_t i; unsigned maxSubstPos = MIN(nextRange->startPos + seqRangeLen(nextRange, symBits), start + len) - subStringOffset; Symbol sym = MRAEncRevMapSymbol(rangeList->alphabet, seqRangeSym(nextRange, symBits)); for (i = inSeqPos - subStringOffset; i < maxSubstPos; ++i) subString[i] = sym; inSeqPos = subStringOffset + maxSubstPos; ++nextRange; } } while (inSeqPos < start + len); } int gt_SRLPrintRangesInfo(struct seqRangeList *rangeList, FILE *fp, unsigned long start, unsigned long len, seqRangeListSearchHint *hint) { struct seqRange *nextRange; unsigned long end = start + len; unsigned symBits = rangeList->symBits; int result = 0; gt_assert(rangeList); nextRange = gt_SRLFindPositionNext(rangeList, start, hint); while (nextRange->startPos < end) { if (rangeList->partialSymSums) { size_t numSyms = gt_MRAEncGetSize(rangeList->alphabet); size_t pOff = nextRange - rangeList->ranges; Symbol sym; fputs("# range partial sums:", fp); for (sym = 0; sym < numSyms; ++sym) fprintf(fp, " sum[%u]=%lu", MRAEncRevMapSymbol(rangeList->alphabet, sym), rangeList->partialSymSums[pOff * numSyms + sym]); fputs("\n", fp); } if (result += fprintf(fp, "# range overlap: symbol %u, start=%lu, length=%lu\n", MRAEncRevMapSymbol(rangeList->alphabet, seqRangeSym(nextRange, symBits)), nextRange->startPos, seqRangeLen(nextRange, symBits)) < 0) { result = -1; break; } ++nextRange; } return result; } genometools-1.5.1/src/match/eis-seqranges.h000066400000000000000000000164121211610345200206520ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SEQRANGES_H #define EIS_SEQRANGES_H /** * @file eis-seqranges.h * @brief Store lists of ranges of symbols. * * This is intended to reduce the storage overhead introduced by the * presence of a special class of symbols in a sequence. These symbols * are generally expected to: * - be underrepresented in the sequence * - often form contiguous ranges * - require special treatment by algorithms */ #include #include "core/error.h" #include "core/bitpackstring.h" #include "match/eis-mrangealphabet.h" /** * Select wether certain internal data structures are constructed with * these flags. */ enum SRLFeatures { SRL_NO_FEATURES = 0, /**< build no special structures */ SRL_PARTIAL_SYMBOL_SUMS = 1 << 0, /**< for every range also keep * sums of other special symbols * encountered up to the * beginning of the range */ }; /** * Used to remember previous queries. */ typedef size_t seqRangeListSearchHint; /** * @brief Constructor for list of sequence ranges. * @param rangesStartNum allocate space for this many ranges * @param alphabet map stored symbols according to this alphabet * @param features see enum SRLFeatures for a description * @return newly constructed list */ struct seqRangeList * gt_newSeqRangeList(size_t rangesStartNum, const MRAEnc *alphabet, enum SRLFeatures features); /** * @brief Shrink the list according to the exact number of ranges stored. * @param rangeList */ void gt_SRLCompact(struct seqRangeList *rangeList); /** * @brief Destructor for sequence range lists. * @param rangeList */ void gt_deleteSeqRangeList(struct seqRangeList *rangeList); /** * @brief Add a new range at the end of the current list. * @param rangeList * @param pos start of new range * @param len length of new range * @param sym the range is a contiguous sequence of this symbol */ void gt_SRLAppendNewRange(struct seqRangeList *rangeList, unsigned long pos, unsigned long len, Symbol sym); /** * @brief Add a new range of length one * @param rangeList * @param pos at this position * @param sym this symbol occurs */ void gt_SRLAddPosition(struct seqRangeList *rangeList, unsigned long pos, Symbol sym); /** * @brief Initialize a search hint by this function. * @param rangeList * @param hint points to storage */ void gt_SRLInitListSearchHint(struct seqRangeList *rangeList, seqRangeListSearchHint *hint); /** * @brief Find the range overlapping or if no such range exists * follows pos. * @param rangeList * @param pos * @param hint * @return NULL if no range overlaps or succeeds pos */ struct seqRange * gt_SRLFindPositionNext(struct seqRangeList *rangeList, unsigned long pos, seqRangeListSearchHint *hint); /** * @brief This predicate is true if position is within one of the * ranges of the range list. * @param rangeList * @param pos * @param hint * @param symAtPos if not NULL, the symbol of the range overlapping * pos is written to this address, if such a range exists * @return true if an overlap exits, false if not */ int gt_SRLOverlapsPosition(struct seqRangeList *rangeList, unsigned long pos, seqRangeListSearchHint *hint, Symbol *symAtPos); /** * @brief For the sequence region [start..end-1] count the number of * occurrences for each symbol represented in the overlapping ranges. * @param rangeList * @param start * @param end * @param occStore for each symbol occStore[MRAEncMapSymbol(alphabet, * sym)] is set to the number of occurrences of sym, where alphabet is * the alphabet originally used in the constructor * @param hint */ void gt_SRLSymbolsInSeqRegion(struct seqRangeList *rangeList, unsigned long start, unsigned long end, unsigned long *occStore, seqRangeListSearchHint *hint); /** * @brief Compute the occurrence count for one symbol in a given region. * @param rangeList * @param start * @param end * @param sym only account for ranges matching this symbol * @param hint */ unsigned long gt_SRLSymbolCountInSeqRegion(struct seqRangeList *rangeList, unsigned long start, unsigned long end, Symbol sym, seqRangeListSearchHint *hint); /** * @brief Sum over the occurrence counts for all symbols in a given region. * @param rangeList * @param start * @param end * @param hint */ unsigned long gt_SRLAllSymbolsCountInSeqRegion(struct seqRangeList *rangeList, unsigned long start, unsigned long end, seqRangeListSearchHint *hint); /** * @brief Overwrite all positions in a string that coincide with * ranges in the list with the symbol for that range. * * @param rangeList * @param subString write symbols in ranges at subStringOffset+i to subString[i] * @param start start only use ranges overlapping [start..end-1] * @param len * @param subStringOffset offset of subString relative to the * underlying sequence * @param hint */ void gt_SRLApplyRangesToSubString(struct seqRangeList *rangeList, Symbol *subString, unsigned long start, unsigned long len, unsigned long subStringOffset, seqRangeListSearchHint *hint); /** * @brief Print text description of ranges overlapping the given * region. * * @param rangeList * @param fp print description to this file * @param start * @param len * @param hint * @return <0 in case of I/O error, >=0 otherwise. */ int gt_SRLPrintRangesInfo(struct seqRangeList *rangeList, FILE *fp, unsigned long start, unsigned long len, seqRangeListSearchHint *hint); /** * @brief Save a range list structure to file. * @param rangeList * @param fp file to save rangeList to * @return <0 if an error occurred */ int gt_SRLSaveToStream(struct seqRangeList *rangeList, FILE *fp); /** * @brief Restore a sequence range list from file. * @param fp read from this file * @param alphabet symbols are interpreted under this alphabet * @param features see enum SRLFeatures * @param err */ struct seqRangeList * gt_SRLReadFromStream(FILE *fp, const MRAEnc *alphabet, enum SRLFeatures features, GtError *err); #endif genometools-1.5.1/src/match/eis-sequencemultiread.c000066400000000000000000000271411211610345200223750ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/ma_api.h" #include "core/unused_api.h" #include "match/eis-sequencemultiread.h" #include "match/sarr-def.h" #include "match/eis-list-do.h" struct seqReaderState { struct seqReaderState *next; unsigned long nextReadPos; /**< next position to be read/consumed */ int tag; /**< set of bits defined by * application, can be used for value * or as bit set */ SeqReaderSet *readerSet; consumerID id; void *dest; SeqDataTranslator xltor; }; struct seqSinkState { int tag; /**< set of bits defined by * application, can be used for value * or as bit set */ consumerID id; SeqDataWriter writer; }; static inline unsigned long seqReaderSetGetConsumerNextPos(struct seqReaderState *consumer) { gt_assert(consumer); return consumer->nextReadPos; } static inline void seqReaderSetSetConsumerNextPos(struct seqReaderState *consumer, unsigned long newPos) { gt_assert(consumer && consumer->nextReadPos <= newPos); consumer->nextReadPos = newPos; } static void seqReaderSetMove2Backlog(void *backlogState, const void *seqData, unsigned long requestStart, size_t requestLen); static size_t seqReaderSetRead(void *state, void *dest, size_t len); /* int gt_initSeqReaderSet(SeqReaderSet *readerSet, int initialSuperSet, int numConsumers, int *tags, SeqDataTranslator xltors[], SeqDataReader *generatedReaders, size_t seqElemSize, generatorFunc generator, void *generatorState) { int i; gt_initEmptySeqReaderSet(readerSet, initialSuperSet, seqElemSize, generator, generatorState); for (i = 0; i < numConsumers; ++i) { generatedReaders[i] = gt_seqReaderSetRegisterConsumer(readerSet, tags[i], xltors[i]); if (!generatedReaders[i].readData) break; } return i; } */ void gt_initEmptySeqReaderSet(SeqReaderSet *readerSet, int initialSuperSet, bool fromSuffixsortspace, size_t seqElemSize, generatorFunc generator, void *generatorState) { readerSet->fromSuffixsortspace = fromSuffixsortspace; readerSet->tagSuperSet = initialSuperSet; readerSet->numAutoConsumers = readerSet->numConsumers = 0; readerSet->consumerList = NULL; readerSet->autoConsumerList = NULL; readerSet->backlogStartPos = 0; readerSet->backlogLen = readerSet->backlogSize = 0; readerSet->backlogElemSize = seqElemSize; readerSet->seqDataBacklog = NULL; /* only allocate backlog when it's * really needed! */ readerSet->generatorState = generatorState; readerSet->generator = generator; } void gt_destructSeqReaderSet(SeqReaderSet *readerSet) { gt_assert(readerSet); ListDo(struct seqReaderState, readerSet->consumerList, gt_free(p)); if (readerSet->autoConsumerList) gt_free(readerSet->autoConsumerList); if (readerSet->seqDataBacklog) gt_free(readerSet->seqDataBacklog); } SeqDataReader gt_seqReaderSetRegisterConsumer(SeqReaderSet *readerSet, int tag, SeqDataTranslator xltor) { int availId = readerSet->numConsumers++; SeqDataReader reader; struct seqReaderState *state; gt_assert(readerSet); state = gt_malloc(sizeof (*state)); state->readerSet = readerSet; state->id = availId; state->xltor = xltor; state->nextReadPos = 0; state->tag = tag; state->next = readerSet->consumerList; readerSet->consumerList = state; readerSet->tagSuperSet |= tag; reader.src = state; reader.readData = seqReaderSetRead; return reader; } bool gt_seqReaderSetRegisterAutoConsumer(SeqReaderSet *readerSet, int tag, SeqDataWriter writer) { int availId = readerSet->numConsumers++; gt_assert(false); gt_assert(readerSet); { struct seqSinkState *temp; if (!(temp = gt_realloc(readerSet->autoConsumerList, sizeof (*temp) * (availId + 1)))) return false; readerSet->autoConsumerList = temp; } { struct seqSinkState *state = readerSet->autoConsumerList + availId; state->id = availId; state->writer = writer; state->tag = tag; readerSet->tagSuperSet |= tag; } return true; } static size_t seqReaderSetRead(void *src, void *dest, size_t len) { struct seqReaderState *state = src; struct seqReaderSet *readerSet; unsigned long pos; size_t elemsLeft; gt_assert(src); readerSet = state->readerSet; elemsLeft = len; pos = seqReaderSetGetConsumerNextPos(state); while (elemsLeft) { if (pos >= readerSet->backlogStartPos + readerSet->backlogLen) { /* pos is in block that's governed by generator */ size_t elemsGenerated = readerSet->generator(readerSet->generatorState, readerSet, seqReaderSetMove2Backlog, dest, pos, elemsLeft, state->xltor); seqReaderSetSetConsumerNextPos(state, pos += elemsGenerated); elemsLeft -= elemsGenerated; break; } else if (pos >= readerSet->backlogStartPos /* implicit because of above condition && pos < readerSet->backlogStartPos + readerSet->backlogLen */ ) { /* pos is in backlog */ unsigned long subLen, charsWritten; subLen = MIN(elemsLeft, readerSet->backlogStartPos - pos + readerSet->backlogLen); gt_assert(state->xltor.translateData == NULL); /* charsWritten = SDRTranslate(state->xltor, dest, (char *)readerSet->seqDataBacklog + (pos - readerSet->backlogStartPos) * readerSet->backlogElemSize, subLen); */ memcpy(dest, (char *)readerSet->seqDataBacklog + (pos - readerSet->backlogStartPos) * readerSet->backlogElemSize, subLen * state->xltor.state.elemSize); charsWritten = subLen * state->xltor.state.elemSize; elemsLeft -= subLen; seqReaderSetSetConsumerNextPos(state, pos += subLen); dest = (char *)dest + charsWritten; } else { fprintf(stderr, "fatal error at file %s, line %d\n", __FILE__, __LINE__); abort(); } } return len - elemsLeft; } #if 0 /* These might be needed later when translation results values are * kept in backlog too */ static inline unsigned long seqReaderSetFindMinOpenRequestBySet(SeqReaderSet *readerSet, int setSpec) { unsigned long min = -1; int i; gt_assert(readerSet); for (i = 0; i < readerSet->numConsumers; ++i) if (readerSet->consumers[i].tag & setSpec) min = MIN(min, readerSet->consumers[i].nextReadPos); return min; } static inline unsigned long seqReaderSetFindMinOpenRequestByVal(SeqReaderSet *readerSet, int tagVal) { unsigned long min = -1; int i; gt_assert(readerSet); for (i = 0; i < readerSet->numConsumers; ++i) if (readerSet->consumers[i].tag == tagVal) min = MIN(min, readerSet->consumers[i].nextReadPos); return min; } #endif static inline unsigned long seqReaderSetFindMinOpenRequest(SeqReaderSet *readerSet) { struct seqReaderState *p; unsigned long min = -1; gt_assert(readerSet); p = readerSet->consumerList; while (p) { min = MIN(min, seqReaderSetGetConsumerNextPos(p)); p = p->next; } return min; } static void seqReaderSetMove2Backlog(void *backlogState, const void *seqData, unsigned long requestStart, size_t requestLen) { unsigned long requestMinPos; struct seqReaderSet *readerSet = backlogState; gt_assert(backlogState && (requestLen?(seqData!=NULL):1)); requestMinPos = seqReaderSetFindMinOpenRequest(readerSet); /* 1. pass all data to be invalidated to automatic sinks */ { int i, numAutoConsumers = readerSet->numAutoConsumers; struct seqSinkState *sinks = readerSet->autoConsumerList; /* The following must hold, as writer is not defined */ gt_assert(numAutoConsumers == 0); for (i = 0; i < numAutoConsumers; ++i) { SDWWrite(sinks[i].writer, seqData, requestLen); } } /* 2. move still unread old values as far as possible to head of copy */ gt_assert(requestMinPos >= readerSet->backlogStartPos); if (requestMinPos < readerSet->backlogStartPos + readerSet->backlogLen) { size_t backlogUnread = readerSet->backlogLen - requestMinPos + readerSet->backlogStartPos; memmove(readerSet->seqDataBacklog, (char *)readerSet->seqDataBacklog + (requestMinPos - readerSet->backlogStartPos) * readerSet->backlogElemSize, readerSet->backlogElemSize * backlogUnread); readerSet->backlogLen = backlogUnread; readerSet->backlogStartPos = requestMinPos; } else { readerSet->backlogLen = 0; readerSet->backlogStartPos = requestMinPos; } { unsigned long copyStartPos = MAX(requestMinPos, requestStart); size_t copyLen = requestLen - copyStartPos + requestStart; /* 3. extend backlog to also accept all invalidated values still needed */ if (copyLen) { unsigned long *destSptr; size_t idx, backlogSizeLeft = readerSet->backlogSize - readerSet->backlogLen; if (copyLen > backlogSizeLeft) { size_t newSize = readerSet->backlogLen + copyLen; readerSet->seqDataBacklog = gt_realloc(readerSet->seqDataBacklog, readerSet->backlogElemSize * newSize); readerSet->backlogSize = newSize; } destSptr = ((unsigned long *) readerSet->seqDataBacklog) + readerSet->backlogLen; if (readerSet->fromSuffixsortspace) { GtSuffixsortspace *srcSptr = (GtSuffixsortspace *) seqData; for (idx = 0; idx< copyLen; idx++) { destSptr[idx] = gt_suffixsortspace_getdirect(srcSptr, copyStartPos - requestStart + idx); } } else { ESASuffixptr *srcSptr = ((ESASuffixptr *) seqData) + (copyStartPos - requestStart); for (idx = 0; idx< copyLen; idx++) { destSptr[idx] = ESASUFFIXPTRGET(srcSptr,idx); } } /* memcpy((char *)readerSet->seqDataBacklog + readerSet->backlogLen * readerSet->backlogElemSize, (char *)seqData + (copyStartPos - requestStart) * readerSet->backlogElemSize, readerSet->backlogElemSize * copyLen); */ readerSet->backlogLen += copyLen; } } } static inline int seqReaderSetGetConsumerTag(struct seqReaderState *state) { gt_assert(state); return state->tag; } static inline void seqReaderSetAdvanceConsumer(struct seqReaderState *state, size_t len) { gt_assert(state); state->nextReadPos += len; } genometools-1.5.1/src/match/eis-sequencemultiread.h000066400000000000000000000067661211610345200224140ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SEQUENCEMULTIREAD_H #define EIS_SEQUENCEMULTIREAD_H /** * \file eis-sequencemultiread.h * Keeps information about multiple synchronous reads of sequence * data, where only one source and multiple consumers exist. */ #include "core/assert_api.h" #include "core/minmax.h" #include "match/eis-seqdatasrc.h" /** every reader is identified by a unique scalar */ typedef unsigned consumerID; /* moves data that can no longer be regenerated to the backlog */ typedef void (*move2BacklogFunc)(void *backlogState, const void *seqData, unsigned long requestStart, size_t requestLen); /** * basic idea: let this function write the required data to output * and also call the move2Backlog callback if any data will be * invalidated after this call and is still required by other consumers * @return number of elements actually generated (might be short on eof etc.) */ typedef size_t (*generatorFunc)(void *generatorState, void *backlogState, move2BacklogFunc move2Backlog, void *output, unsigned long generateStart, size_t len, SeqDataTranslator xltor); typedef struct seqReaderSet SeqReaderSet; struct seqReaderSet { int numConsumers, numAutoConsumers; int tagSuperSet; struct seqReaderState *consumerList; struct seqSinkState *autoConsumerList; unsigned long backlogStartPos; bool fromSuffixsortspace; size_t backlogSize, backlogLen, backlogElemSize; void *seqDataBacklog, *generatorState; generatorFunc generator; }; /** * @return numReaders if all consumers registered otherwise */ /* int gt_initSeqReaderSet(SeqReaderSet *readerSet, int initialSuperSet, int numConsumers, int *tags, SeqDataTranslator xltors[], SeqDataReader *generatedReaders, size_t seqElemSize, generatorFunc generator, void *generatorState); */ void gt_initEmptySeqReaderSet(SeqReaderSet *readerSet, int initialSuperSet, bool fromSuffixsortspace, size_t seqElemSize, generatorFunc generator, void *generatorState); /** * @return readData field will be NULL on error -> test with * SDRIsValid */ SeqDataReader gt_seqReaderSetRegisterConsumer(SeqReaderSet *readerSet, int tag, SeqDataTranslator xltor); /** * @brief The registered writer will be called automatically for any * data that is to be invalidated. * * @return false on error, true if successfully registered */ bool gt_seqReaderSetRegisterAutoConsumer(SeqReaderSet *readerSet, int tag, SeqDataWriter writer); void gt_destructSeqReaderSet(SeqReaderSet *readerSet); #endif genometools-1.5.1/src/match/eis-specialsrank-priv.h000066400000000000000000000030661211610345200223200ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SPECIALSRANK_PRIV_H #define EIS_SPECIALSRANK_PRIV_H #include "match/eis-specialsrank.h" typedef unsigned long (*RankReportFunc)(const SpecialsRankLookup *ranker, unsigned long pos); struct specialsRankLookup { RankReportFunc rankFunc; const GtEncseq *encseq; union { struct specialsRankTable { GtEncseqReader *scanState; unsigned long *rankSumSamples, numSamples, sampleInterval; GtReadmode readmode; unsigned sampleIntervalLog2; } sampleTable; unsigned long lastSeqPos; } implementationData; }; static inline unsigned long specialsRank(const SpecialsRankLookup *ranker, unsigned long pos) { return ranker->rankFunc(ranker, pos); } #endif genometools-1.5.1/src/match/eis-specialsrank.c000066400000000000000000000154251211610345200213370ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/assert_api.h" #include "match/dataalign.h" #include "core/ma_api.h" #include "core/minmax.h" #include "match/eis-specialsrank.h" #include "match/eis-specialsrank-priv.h" typedef struct specialsRankTable SpecialsRankTable; static unsigned long specialsRankFromSampleTable(const SpecialsRankLookup *rankTable, unsigned long pos); static unsigned long specialsRankFromTermPos(const SpecialsRankLookup *rankTable, unsigned long pos); static inline struct specialsRankLookup * allocSpecialsRankTable(const GtEncseq *encseq, unsigned long lastSeqPos, unsigned sampleIntervalLog2, GtReadmode readmode) { struct specialsRankTable *rankTable; struct specialsRankLookup *ranker; unsigned long numSamples = (lastSeqPos >> sampleIntervalLog2) + 1; ranker = gt_malloc(offsetAlign(sizeof (*ranker), sizeof (unsigned long)) + numSamples * sizeof (unsigned long)); rankTable = &ranker->implementationData.sampleTable; rankTable->rankSumSamples = (unsigned long *)((char *)ranker + offsetAlign(sizeof (*ranker), sizeof (unsigned long))); rankTable->sampleIntervalLog2 = sampleIntervalLog2; rankTable->sampleInterval = ((unsigned long)1) << sampleIntervalLog2; rankTable->readmode = readmode; rankTable->numSamples = numSamples; rankTable->scanState = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); ranker->encseq = encseq; ranker->rankFunc = specialsRankFromSampleTable; return ranker; } static inline struct specialsRankLookup * allocEmptySpecialsRankLookup(const GtEncseq *encseq, unsigned long lastSeqPos) { struct specialsRankLookup *ranker; ranker = gt_malloc(sizeof (*ranker)); ranker->implementationData.lastSeqPos = lastSeqPos; ranker->rankFunc = specialsRankFromTermPos; ranker->encseq = encseq; return ranker; } static inline bool nextRange(GtRange *range, GtSpecialrangeiterator *sri, GtReadmode readmode, unsigned long seqLastPos) { bool hasNextRange = gt_specialrangeiterator_next(sri, range); if (hasNextRange) { if (GT_ISDIRREVERSE(readmode)) { unsigned long temp = range->end; range->end = seqLastPos - range->start; range->start = seqLastPos - temp; } } else range->end = seqLastPos + 1, range->start = seqLastPos; return hasNextRange; } SpecialsRankLookup * gt_newSpecialsRankLookup(const GtEncseq *encseq, GtReadmode readmode, unsigned sampleIntervalLog2) { struct specialsRankLookup *ranker; unsigned long seqLastPos, seqLen; unsigned long sampleInterval = ((unsigned long)1) << sampleIntervalLog2; gt_assert(encseq); gt_assert(sampleIntervalLog2 < sizeof (unsigned long) * CHAR_BIT); seqLastPos = gt_encseq_total_length(encseq); seqLen = seqLastPos + 1; if (gt_encseq_has_specialranges(encseq)) { /* this sequence has some special characters */ struct specialsRankTable *rankTable; GtSpecialrangeiterator *sri; unsigned long *sample, *maxSample, sum = 0, pos = 0, nextSamplePos; GtRange range = { 0, 0 }; ranker = allocSpecialsRankTable(encseq, seqLen, sampleIntervalLog2, readmode); rankTable = &ranker->implementationData.sampleTable; sri = gt_specialrangeiterator_new(encseq, !GT_ISDIRREVERSE(readmode)); sample = rankTable->rankSumSamples; maxSample = sample + rankTable->numSamples; *sample++ = sum; nextSamplePos = sampleInterval; nextRange(&range, sri, readmode, seqLastPos); while (sample < maxSample) { while (pos < nextSamplePos) { pos = MIN(MAX(pos, range.start), nextSamplePos); sum += MIN(range.end - pos, nextSamplePos - pos); pos = MIN(range.end, nextSamplePos); if (pos < nextSamplePos) { nextRange(&range, sri, readmode, seqLastPos); } } *sample++ = sum; nextSamplePos += sampleInterval; } gt_specialrangeiterator_delete(sri); sri = NULL; } else { /* While there is no special characters in this sequence, there * is of course the terminator */ ranker = allocEmptySpecialsRankLookup(encseq, seqLastPos); } return ranker; } void gt_deleteSpecialsRankLookup(SpecialsRankLookup *ranker) { if (ranker->rankFunc == specialsRankFromSampleTable) gt_encseq_reader_delete(ranker->implementationData.sampleTable.scanState); gt_free(ranker); } static unsigned long specialsRankFromSampleTable(const SpecialsRankLookup *ranker, unsigned long pos) { const SpecialsRankTable *rankTable = &ranker->implementationData.sampleTable; unsigned long rankCount, samplePos, encSeqLen; gt_assert(ranker); encSeqLen = gt_encseq_total_length(ranker->encseq); gt_assert(pos <= encSeqLen + 1); samplePos = pos & ~(rankTable->sampleInterval - 1); { size_t sampleIdx = pos >> rankTable->sampleIntervalLog2; rankCount = rankTable->rankSumSamples[sampleIdx]; } { const GtEncseq *encseq = ranker->encseq; GtEncseqReader *esr = rankTable->scanState; GtReadmode readmode = rankTable->readmode; unsigned long encseqQueryMax = MIN(pos, encSeqLen); if (samplePos < encseqQueryMax) { gt_encseq_reader_reinit_with_readmode(esr, encseq, readmode, samplePos); do { samplePos++; if (ISSPECIAL(gt_encseq_reader_next_encoded_char(esr))) ++rankCount; } while (samplePos < encseqQueryMax); } if (pos == encSeqLen + 1) ++rankCount; } return rankCount; } static unsigned long specialsRankFromTermPos(const SpecialsRankLookup *ranker, unsigned long pos) { gt_assert(pos <= ranker->implementationData.lastSeqPos + 1); return ((pos == ranker->implementationData.lastSeqPos + 1)?1:0); } const GtEncseq * gt_SPRTGetOrigEncseq(const SpecialsRankLookup *ranker) { return ranker->encseq; } genometools-1.5.1/src/match/eis-specialsrank.h000066400000000000000000000026071211610345200213420ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SPECIALSRANK_H #define EIS_SPECIALSRANK_H #include "core/encseq.h" typedef struct specialsRankLookup SpecialsRankLookup; SpecialsRankLookup * gt_newSpecialsRankLookup(const GtEncseq *encseq, GtReadmode readmode, unsigned sampleIntervalLog2); void gt_deleteSpecialsRankLookup(SpecialsRankLookup *table); static inline unsigned long specialsRank(const SpecialsRankLookup *rankTable, unsigned long pos); const GtEncseq * gt_SPRTGetOrigEncseq(const SpecialsRankLookup *rankTable); #include "match/eis-specialsrank-priv.h" #endif genometools-1.5.1/src/match/eis-suffixarray-interface-priv.h000066400000000000000000000034451211610345200241430ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SUFFIXARRAY_INTERFACE_PRIV_H #define EIS_SUFFIXARRAY_INTERFACE_PRIV_H #include "eis-suffixarray-interface.h" /** * Used to pass suffixarray to read from and alphabet to encode with * to readers. */ struct suffixarrayFileInterface { struct SASeqSrc baseClass; struct saTaggedXltorStateList xltorStates; Suffixarray *sa; /**< the suffix array to read from */ char numBWTFileReaders; }; static inline SuffixarrayFileInterface * SASS2SAI(SASeqSrc *baseClass) { return (SuffixarrayFileInterface *) ((char *)baseClass - offsetof(SuffixarrayFileInterface, baseClass)); } static inline const SuffixarrayFileInterface * constSASS2SAI(const SASeqSrc *baseClass) { return (const SuffixarrayFileInterface *) ((const char *)baseClass - offsetof(SuffixarrayFileInterface, baseClass)); } static inline SASeqSrc * SAI2SASS(SuffixarrayFileInterface *sai) { return &sai->baseClass; } static inline const SASeqSrc * constSAI2SASS(const SuffixarrayFileInterface *sai) { return &sai->baseClass; } #endif genometools-1.5.1/src/match/eis-suffixarray-interface-siop.h000066400000000000000000000026441211610345200241350ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SUFFIXARRAY_INTERFACE_SIOP_H #define EIS_SUFFIXARRAY_INTERFACE_SIOP_H #include "eis-suffixarray-interface.h" #include "eis-suffixarray-interface-priv.h" static inline MRAEnc * SAINewMRAEnc(const SuffixarrayFileInterface *sai) { return gt_SANewMRAEnc(gt_encseq_alphabet(sai->sa->encseq)); } static inline const GtEncseq * SAIGetEncSeq(const SuffixarrayFileInterface *sai) { return sai->sa->encseq; } static inline GtReadmode SAIGetGtReadmode(const SuffixarrayFileInterface *sai) { return sai->sa->readmode; } static inline unsigned long SAIGetLength(const SuffixarrayFileInterface *sai) { return SASSGetLength(constSAI2SASS(sai)); } #endif genometools-1.5.1/src/match/eis-suffixarray-interface.c000066400000000000000000000157751211610345200231710ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/chardef.h" #include "core/error.h" #include "core/ma_api.h" #include "core/unused_api.h" #include "match/sarr-def.h" #include "match/eis-mrangealphabet.h" #include "match/eis-sa-common.h" #include "match/eis-seqdatasrc.h" #include "match/eis-suffixarray-interface.h" #include "match/eis-suffixarray-interface-priv.h" static void gt_deleteSuffixarrayFileInterfaceBase(SASeqSrc *baseClass) { gt_deleteSuffixarrayFileInterface(SASS2SAI(baseClass)); } static struct seqDataReader SAIBaseMakeReader(SASeqSrc *baseClass, enum sfxDataRequest rtype) { return gt_SAIMakeReader(SASS2SAI(baseClass), rtype); } static Definedunsignedlong SAIBaseGetRot0Pos(const SASeqSrc *baseClass) { return gt_SAIGetRot0Pos(constSASS2SAI(baseClass)); } static inline size_t SAIBaseGetOrigSeq(const SASeqSrc *baseClass, Symbol *dest, unsigned long pos, size_t len) { return gt_SAIGetOrigSeq(constSASS2SAI(baseClass), dest, pos, len); } MRAEnc * gt_SAIBaseNewMRAEnc(const SASeqSrc *baseClass) { return SAINewMRAEnc(constSASS2SAI(baseClass)); } static size_t SAIGenerate(void *generatorState, void *backlogState, move2BacklogFunc move2Backlog, void *output, unsigned long generateStart, size_t len, SeqDataTranslator xltor); void gt_initSuffixarrayFileInterface(SuffixarrayFileInterface *sai, unsigned long seqLen, Suffixarray *sa) { { RandomSeqAccessor origSeqAccess = { gt_SAIGetOrigSeq, sai }; initSASeqSrc(&sai->baseClass, seqLen, NULL, SAIBaseMakeReader, SAIBaseGetRot0Pos, NULL, origSeqAccess, gt_deleteSuffixarrayFileInterfaceBase, gt_SAIBaseNewMRAEnc, SAIGenerate, sai); } sai->sa = sa; sai->numBWTFileReaders = 0; gt_initSATaggedXltorStateList(&sai->xltorStates); } SuffixarrayFileInterface * gt_newSuffixarrayFileInterface(Suffixarray *sa, unsigned long seqLen) { SuffixarrayFileInterface *sai = gt_malloc(sizeof (*sai)); gt_initSuffixarrayFileInterface(sai, seqLen, sa); return sai; } void gt_destructSuffixarrayFileInterface(SuffixarrayFileInterface *sai) { destructSASeqSrc(&sai->baseClass); gt_destructSATaggedXltorStateList(&sai->xltorStates); } void gt_deleteSuffixarrayFileInterface(SuffixarrayFileInterface *sai) { gt_destructSuffixarrayFileInterface(sai); gt_free(sai); } static size_t SAIReadBWT(void *state, Symbol *dest, size_t len, GtError *err); struct seqDataReader gt_SAIMakeBWTReader(SuffixarrayFileInterface *sai) { struct seqDataReader reader = { NULL, NULL}; if (!sai->sa->bwttabstream.fp || sai->numBWTFileReaders > 0) { if (sai->sa->encseq) { struct encSeqTrState bwtReadState = { .readmode = sai->sa->readmode, .encseq = sai->sa->encseq }; struct saTaggedXltorState *stateStore = gt_addSuffixarrayXltor(&sai->xltorStates, SFX_REQUEST_BWTTAB, bwtReadState); struct seqDataTranslator xltor = { { .ref = &stateStore->state }, gt_translateSuftab2BWT, gt_translateSuftab2BWTSuffixsortspace }; reader = gt_seqReaderSetRegisterConsumer(&sai->baseClass.readerSet, SFX_REQUEST_BWTTAB, xltor); } else { fputs("error: bwt data not available for given project.\n", stderr); } } else { /* a .bwt file is available for reading */ reader.readData = (seqDataReadFunc)SAIReadBWT; reader.src = sai; ++sai->numBWTFileReaders; } return reader; } struct seqDataReader gt_SAIMakeSufTabReader(SuffixarrayFileInterface *sai) { struct seqDataReader reader = { NULL, NULL}; if (sai->sa->suftabstream_GtUlong.fp) { struct seqDataTranslator xltor = { { .elemSize = sizeof (unsigned long) }, NULL, NULL, }; reader = gt_seqReaderSetRegisterConsumer(&sai->baseClass.readerSet, SFX_REQUEST_SUFTAB, xltor); } else { fputs("error: suffix array data not available for given project.\n", stderr); } return reader; } struct seqDataReader gt_SAIMakeReader(SuffixarrayFileInterface *sai, enum sfxDataRequest rtype) { struct seqDataReader reader = { NULL, NULL}; switch (rtype) { case SFX_REQUEST_SUFTAB: reader = gt_SAIMakeSufTabReader(sai); break; case SFX_REQUEST_BWTTAB: reader = gt_SAIMakeBWTReader(sai); break; default: fprintf(stderr, "error: unimplemented request: %d, %s: %d!\n", rtype, __FILE__, __LINE__); exit(GT_EXIT_PROGRAMMING_ERROR); } return reader; } /** * @brief Read given length of symbols from the BWT, starting after last * position read. * @param state reference of a SuffixarrayFileInterface * @param dest write symbols here * @param len length of string to read * @return actual number of symbols read */ static size_t SAIReadBWT(void *state, GtUchar *dest, size_t len, GT_UNUSED GtError *err) { SuffixarrayFileInterface *sai = state; gt_assert(state); return fread(dest, sizeof (GtUchar), len, sai->sa->bwttabstream.fp); } size_t gt_SAIGetOrigSeq(const void *state, Symbol *dest, unsigned long pos, size_t len) { const SuffixarrayFileInterface *sai; gt_assert(state); sai = state; return EncSeqGetSubSeq(sai->sa->encseq, sai->sa->readmode, pos, len, dest); } Definedunsignedlong gt_SAIGetRot0Pos(const void *state) { const SuffixarrayFileInterface *sai = state; gt_assert(sai); return sai->sa->longest; } MRAEnc * gt_SANewMRAEnc(const GtAlphabet *gtalphabet) { MRAEnc *alphabet; gt_assert(gtalphabet != NULL); alphabet = gt_MRAEncGTAlphaNew(gtalphabet); gt_MRAEncAddSymbolToRange(alphabet, SEPARATOR, 1); return alphabet; } static size_t SAIGenerate(void *generatorState, void *backlogState, move2BacklogFunc move2Backlog, void *output, unsigned long generateStart, size_t len, SeqDataTranslator xltor) { size_t idx; SuffixarrayFileInterface *sai = generatorState; Suffixarray *sa; unsigned long buf[len]; gt_assert(sai); sa = sai->sa; for (idx = 0; idx < len; ++idx) { if (gt_readnextfromstream_GtUlong(buf + idx,&sa->suftabstream_GtUlong) != 1) { break; } } move2Backlog(backlogState, buf, generateStart, idx); SDRTranslate(xltor, output, buf, idx); return idx; } genometools-1.5.1/src/match/eis-suffixarray-interface.h000066400000000000000000000065631211610345200231710ustar00rootroot00000000000000/* Copyright (C) 2007,2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_SUFFIXARRAY_INTERFACE_H #define EIS_SUFFIXARRAY_INTERFACE_H /** * \file eis-suffixarray-interface.h * Defines an interface deriving the abstract interface defined in * eis-sa-common.h for suffix array class objects (type SASeqSrc). */ #include #include "core/error.h" #include "match/sarr-def.h" #include "match/eis-mrangealphabet.h" #include "match/eis-seqdatasrc.h" #include "match/eis-sequencemultiread.h" typedef struct suffixarrayFileInterface SuffixarrayFileInterface; void gt_initSuffixarrayFileInterface(SuffixarrayFileInterface *sai, unsigned long seqLen, Suffixarray *sa); SuffixarrayFileInterface * gt_newSuffixarrayFileInterface(Suffixarray *sa, unsigned long seqLen); void gt_destructSuffixarrayFileInterface(SuffixarrayFileInterface *sai); void gt_deleteSuffixarrayFileInterface(SuffixarrayFileInterface *sai); SeqDataReader gt_SAIMakeReader(SuffixarrayFileInterface *sai, enum sfxDataRequest rtype); SeqDataReader gt_SAIMakeBWTReader(SuffixarrayFileInterface *sai); SeqDataReader gt_SAIMakeSufTabReader(SuffixarrayFileInterface *sai); /** * @brief Gets symbols of original sequence at given position. * @param state SuffixarrayFileInterface reference * @param dest write symbols here * @param pos get symbols starting at this position in original sequence * @param len length of string to read * @return actual number of symbols read */ size_t gt_SAIGetOrigSeq(const void *state, Symbol *dest, unsigned long pos, size_t len); /** * @brief Query position of suffix starting at position 0, can be * undefined if not yet encountered. * * @param state reference of Suffixarray object * @return */ Definedunsignedlong gt_SAIGetRot0Pos(const void *state); /** * \brief Get reference for original sequence object. * * @param sai SuffixarrayFileInterface reference * @return reference of sequence object */ static inline const GtEncseq * SAIGetEncSeq(const SuffixarrayFileInterface *sai); static inline GtReadmode SAIGetGtReadmode(const SuffixarrayFileInterface *sai); static inline unsigned long SAIGetLength(const SuffixarrayFileInterface *sai); /** * @brief Query appropriate alphabet encoding for suffix array. * @param state reference of Suffixarray object * @return alphabet */ MRAEnc * gt_SANewMRAEnc(const GtAlphabet *gtalphabet); static inline MRAEnc * SAINewMRAEnc(const SuffixarrayFileInterface *sai); static inline struct SASeqSrc * SAI2SASS(SuffixarrayFileInterface *sai); /* visible for the compiler, but not meant for users to depend upon */ #include "eis-suffixarray-interface-siop.h" #endif genometools-1.5.1/src/match/eis-suffixerator-interface.c000066400000000000000000000322121211610345200233300ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include #include "match/dataalign.h" #include "core/fa.h" #include "core/filelengthvalues.h" #include "core/logger.h" #include "core/minmax.h" #include "core/seq_iterator_api.h" #include "core/str.h" #include "core/str_array.h" #include "core/types_api.h" #include "core/unused_api.h" #include "core/codetype.h" #include "core/encseq.h" #include "match/eis-encidxseq.h" #include "match/eis-sa-common.h" #include "match/eis-sequencemultiread.h" #include "match/eis-suffixerator-interface.h" struct sfxInterface { struct SASeqSrc baseClass; GtReadmode readmode; unsigned int prefixlength, numofparts, maximumspace; const Sfxstrategy *sfxstrategy; const GtAlphabet *alpha; const GtEncseq *encseq; struct seqStats *stats; Sfxiterator *sfi; Definedunsignedlong rot0Pos; /* data relevant to holding portions of the suffix array */ unsigned long lastGeneratedLen, lastGeneratedStart; const GtSuffixsortspace *lastGeneratedSufTabSegment; }; static SeqDataTranslator SfxIRequest2XltorFunc(sfxInterface *sfxi, enum sfxDataRequest rtype) { SeqDataTranslator tr = { { NULL }, NULL }; switch (rtype) { struct encSeqTrState readState; struct saTaggedXltorState *stateStore; case SFX_REQUEST_BWTTAB: readState.readmode = sfxi->readmode; readState.encseq = sfxi->encseq; stateStore = gt_addSuffixarrayXltor(&sfxi->baseClass.xltorStates, rtype, readState); tr.state.ref = &stateStore->state; tr.translateData = gt_translateSuftab2BWT; tr.translateDataSuffixsortspace = gt_translateSuftab2BWTSuffixsortspace; break; case SFX_REQUEST_SUFTAB: tr.state.elemSize = sizeof (unsigned long); gt_assert(tr.translateData == NULL); break; default: fprintf(stderr, "error: unimplemented request!\n"); abort(); break; } return tr; } static inline sfxInterface * SASS2SfxI(SASeqSrc *baseClass) { return (sfxInterface *)((char *)baseClass - offsetof(sfxInterface, baseClass)); } struct SASeqSrc * gt_SfxI2SASS(sfxInterface *sfxi) { return &sfxi->baseClass; } static inline const sfxInterface * constSASS2SfxI(const SASeqSrc *baseClass) { return (const sfxInterface *)((const char *)baseClass - offsetof(sfxInterface, baseClass)); } static SeqDataTranslator SfxIBaseRequest2XltorFunc(SASeqSrc *baseClass, enum sfxDataRequest rtype) { return SfxIRequest2XltorFunc(SASS2SfxI(baseClass), rtype); } static Definedunsignedlong SfxIBaseGetRot0Pos(const SASeqSrc *baseClass) { return gt_SfxIGetRot0Pos(constSASS2SfxI(baseClass)); } static const struct seqStats * SfxIBaseGetSeqStats(const SASeqSrc *baseClass) { return gt_SfxIGetSeqStats(constSASS2SfxI(baseClass)); } static MRAEnc * SfxIBaseNewMRAEnc(const SASeqSrc *baseClass) { return gt_SfxINewMRAEnc(constSASS2SfxI(baseClass)); } static void gt_deleteSfxInterfaceBase(SASeqSrc *baseClass) { gt_deleteSfxInterface(SASS2SfxI(baseClass)); } static size_t SfxIGenerate(void *iface, void *backlogState, move2BacklogFunc move2Backlog, void *output, unsigned long generateStart, size_t len, SeqDataTranslator xltor); sfxInterface * gt_newSfxInterface(GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, const Sfxstrategy *sfxstrategy, const GtEncseq *encseq, GtTimer *sfxprogress, bool withprogressbar, unsigned long length, GtLogger *verbosity, GtError *err) { return gt_newSfxInterfaceWithReaders(readmode, prefixlength, numofparts, maximumspace, sfxstrategy, 0, NULL, NULL, encseq, sfxprogress, withprogressbar, length, verbosity, err); } static struct seqStats * newSeqStatsFromCharDist(const GtEncseq *encseq, const GtAlphabet *alpha, unsigned long len) { struct seqStats *stats = NULL; unsigned i, numofchars; unsigned long regularSymsSum = 0; stats = gt_malloc(offsetAlign(sizeof (*stats), sizeof (unsigned long)) + (UINT8_MAX + 1) * sizeof (unsigned long)); unsigned int numOfSeqs; numOfSeqs = gt_encseq_num_of_sequences(encseq); stats->sourceAlphaType = sourceUInt8; stats->symbolDistributionTable = (unsigned long *)((char *)stats + offsetAlign(sizeof (*stats), sizeof (unsigned long))); memset(stats->symbolDistributionTable, 0, sizeof (unsigned long) * (UINT8_MAX + 1)); numofchars = gt_alphabet_num_of_chars(alpha); for (i = 0; i < numofchars; ++i) { stats->symbolDistributionTable[i] = (unsigned long) gt_encseq_charcount(encseq,(GtUchar) i); regularSymsSum += stats->symbolDistributionTable[i]; } stats->symbolDistributionTable[WILDCARD] = len - regularSymsSum - numOfSeqs; stats->symbolDistributionTable[SEPARATOR] += numOfSeqs; stats->symbolDistributionTable[UNDEFBWTCHAR] += 1; return stats; } static void deleteSeqStats(struct seqStats *stats) { gt_free(stats); } #define gt_newSfxInterfaceWithReadersErrRet() \ do { \ if (sfxi->stats) \ deleteSeqStats(sfxi->stats); \ if (sfxi) gt_free(sfxi); \ sfxi = NULL; \ } while (0) sfxInterface * gt_newSfxInterfaceWithReaders(GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, const Sfxstrategy *sfxstrategy, size_t numReaders, enum sfxDataRequest readerRequests[], SeqDataReader readers[], const GtEncseq *encseq, GtTimer *sfxprogress, bool withprogressbar, unsigned long length, GtLogger *verbosity, GtError *err) { sfxInterface *sfxi = NULL; size_t idx; gt_error_check(err); sfxi = gt_calloc(1, sizeof (*sfxi)); { RandomSeqAccessor origSeqAccess = { gt_SfxIGetOrigSeq, sfxi }; initSASeqSrc(&sfxi->baseClass, length, SfxIBaseRequest2XltorFunc, NULL, SfxIBaseGetRot0Pos, SfxIBaseGetSeqStats, origSeqAccess, gt_deleteSfxInterfaceBase, SfxIBaseNewMRAEnc, SfxIGenerate, sfxi); } sfxi->readmode = readmode; sfxi->encseq = encseq; sfxi->alpha = gt_encseq_alphabet(encseq); sfxi->stats = newSeqStatsFromCharDist(encseq,sfxi->alpha, length); if (!(sfxi->sfi = gt_Sfxiterator_new(encseq, readmode, prefixlength, numofparts, maximumspace, sfxstrategy, sfxprogress, withprogressbar, verbosity, err))) { gt_newSfxInterfaceWithReadersErrRet(); } sfxi->rot0Pos.defined = false; sfxi->lastGeneratedStart = sfxi->lastGeneratedLen = 0; sfxi->lastGeneratedSufTabSegment = NULL; for (idx = 0; idx < numReaders; ++idx) { readers[idx] = gt_SfxIRegisterReader(sfxi, readerRequests[idx]); if (!readers[idx].readData) { gt_newSfxInterfaceWithReadersErrRet(); } } return sfxi; } const Sfxiterator *gt_SfxInterface2Sfxiterator(const sfxInterface *sfxi) { return sfxi->sfi; } void gt_deleteSfxInterface(sfxInterface *sfxi) { destructSASeqSrc(&sfxi->baseClass); (void) gt_Sfxiterator_delete(sfxi->sfi,NULL); sfxi->sfi = NULL; deleteSeqStats(sfxi->stats); gt_free(sfxi); } const GtAlphabet * gt_SfxIGetAlphabet(const sfxInterface *si) { return si->alpha; } MRAEnc * gt_SfxINewMRAEnc(const sfxInterface *si) { MRAEnc *alphabet; gt_assert(si); alphabet = gt_MRAEncGTAlphaNew(gt_SfxIGetAlphabet(si)); gt_MRAEncAddSymbolToRange(alphabet, SEPARATOR, 1); return alphabet; } unsigned long gt_SfxIGetLength(const sfxInterface *si) { gt_assert(si); return si->baseClass.seqLen; } const struct seqStats * gt_SfxIGetSeqStats(const sfxInterface *si) { return si->stats; } Definedunsignedlong gt_SfxIGetRot0Pos(const struct sfxInterface *si) { return si->rot0Pos; } const GtEncseq * gt_SfxIGetEncSeq(const sfxInterface *si) { return si->encseq; } GtReadmode gt_SfxIGetReadmode(const sfxInterface *si) { return si->readmode; } SeqDataReader gt_SfxIRegisterReader(sfxInterface *sfxi, enum sfxDataRequest rtype) { return gt_seqReaderSetRegisterConsumer( &sfxi->baseClass.readerSet, rtype, SfxIRequest2XltorFunc(sfxi, rtype)); } size_t gt_SfxIGetOrigSeq(const void *state, Symbol *dest, unsigned long pos, size_t len) { const struct sfxInterface *sfxi; gt_assert(state); sfxi = state; return EncSeqGetSubSeq(sfxi->encseq, sfxi->readmode, pos, len, dest); } /** writes substring of suffix table to output, stores older data into * cache if necessary */ static size_t SfxIGenerate(void *iface, void *backlogState, move2BacklogFunc move2Backlog, void *output, unsigned long generateStart, size_t len, SeqDataTranslator xltor) { sfxInterface *sfxi = iface; size_t elemsLeft = len; gt_assert(sfxi && backlogState && move2Backlog && output); gt_assert(generateStart + len <= gt_SfxIGetLength(sfxi)); do { if (generateStart < sfxi->lastGeneratedStart + sfxi->lastGeneratedLen) { size_t copyLen = MIN(elemsLeft, sfxi->lastGeneratedStart + sfxi->lastGeneratedLen - generateStart), charsWritten = SDRTranslateSuffixsortspace(xltor, output, sfxi->lastGeneratedSufTabSegment, generateStart - sfxi->lastGeneratedStart, copyLen); generateStart += copyLen; elemsLeft -= copyLen; output = (char *)output + charsWritten; } /* 1. read next region of sequence by calling nextSfxIterator */ if (elemsLeft) { move2Backlog(backlogState, sfxi->lastGeneratedSufTabSegment, sfxi->lastGeneratedStart, sfxi->lastGeneratedLen); sfxi->lastGeneratedStart += sfxi->lastGeneratedLen; sfxi->lastGeneratedSufTabSegment = gt_Sfxiterator_next(&sfxi->lastGeneratedLen, NULL, sfxi->sfi); if (sfxi->lastGeneratedSufTabSegment != NULL) { /* size_t because the current approach cannot generate more * than memory will hold anyway */ size_t pos, lastGeneratedLen = sfxi->lastGeneratedLen; if (!sfxi->rot0Pos.defined) { for (pos=0; pos < lastGeneratedLen; pos++) { if (gt_suffixsortspace_getdirect(sfxi->lastGeneratedSufTabSegment, pos) == 0) { sfxi->rot0Pos.defined = true; sfxi->rot0Pos.valueunsignedlong = sfxi->lastGeneratedStart + pos; break; } } } /* uncomment this to reenable synchronous writing of tables */ /*if (sfxi->lastGeneratedSufTabSegment == NULL */ /* || suftab2file(&sfxi->outfileinfo, sfxi->lastGeneratedSufTabSegment, */ /* sfxi->so.readmode, sfxi->lastGeneratedLen, err) != 0) */ /* break; */ } else break; } /* 5. if positions in region don't suffice go back to step 3. */ } while (elemsLeft); return len - elemsLeft; } genometools-1.5.1/src/match/eis-suffixerator-interface.h000066400000000000000000000171401211610345200233400ustar00rootroot00000000000000/* Copyright (C) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /** * \file eis-suffixerator-interface.h * \brief Methods to call suffixerator functions through one object, * but have the same data available to multiple listeners. * Conforms to the abstract interface defined in * eis-sa-common.h for suffix array class objects (type SASeqSrc). * \author Thomas Jahns */ #ifndef EIS_SUFFIXERATOR_INTERFACE_H #define EIS_SUFFIXERATOR_INTERFACE_H #include "core/error.h" #include "match/sfx-suffixer.h" #include "match/eis-mrangealphabet.h" #include "match/eis-seqdatasrc.h" #include "match/eis-sa-common.h" /** * opaque interface layer to retrieve arbitrary length portions of * the suffixarray */ typedef struct sfxInterface sfxInterface; /** * @brief Create suffixerator interface object. * * @param so options for calling suffixerator * @param encseq object holding the sequences for suffixerator to * operate on * @param numofsequences number of sequences concatenated in encseq * @param sfxprogress timing device * @param length length of concatenated sequences plus terminator and * separators * @param alpha alphabet to use * generate statistics * @param verbosity used as argument of gt_logger_log * @param err * @return interface object reference */ sfxInterface * gt_newSfxInterface(GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, const Sfxstrategy *sfxstrategy, const GtEncseq *encseq, GtTimer *sfxprogress, bool withprogressbar, unsigned long length, GtLogger *verbosity, GtError *err); /** * @brief Create suffixerator interface object with requestors already * in place. * * @param so options for calling suffixerator * @param numReaders number of readers to register at creation * @param requests reference of array with request type for each * reader * @param ids array to which, for each reader, one id is written (same * sequence as corresponding requests) * @param encseq object holding the sequences for suffixerator to * operate on * @param numofsequences number of sequences concatenated in encseq * @param sfxprogress timing device * @param length length of concatenated sequences plus terminator and * separators * @param alpha alphabet to use * generate statistics * @param verbosity used as argument of gt_logger_log * @param err * @return interface object reference */ sfxInterface * gt_newSfxInterfaceWithReaders(GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, const Sfxstrategy *sfxstrategy, size_t numReaders, enum sfxDataRequest readerRequests[], SeqDataReader readers[], const GtEncseq *encseq, GtTimer *sfxprogress, bool withprogressbar, unsigned long length, GtLogger *verbosity, GtError *err); /** * @brief get Sfxiterator from SfxInterface * * @param iface to take Sfxiterator from * */ const Sfxiterator * gt_SfxInterface2Sfxiterator(const sfxInterface *iface); /** * @brief Deallocate resources of suffixerator interface object. * * @param iface object to delete */ void gt_deleteSfxInterface(sfxInterface *iface); /** * @brief Dynamically cast to super class. * * @param sfxi reference to suffixerator interface object * @return reference of object of base class */ SASeqSrc * gt_SfxI2SASS(sfxInterface *sfxi); /** * \brief Constructs multiple range alphabet for sequence sorted by * suffixerator (i.e. alphabet includes separator symbol). * * @param si reference of interface to suffixerator * @return reference of newly created alphabet object */ MRAEnc * gt_SfxINewMRAEnc(const sfxInterface *si); /** * \brief Get reference for alphabet used to encode original sequence * object. * * @param si reference of interface to suffixerator * @return reference of alphabet object */ const GtAlphabet * gt_SfxIGetAlphabet(const sfxInterface *si); /** * \brief Get reference for original sequence object. * * @param si reference of interface to suffixerator * @return reference of sequence object */ const GtEncseq * gt_SfxIGetEncSeq(const sfxInterface *si); /** * @brief Get read mode used for suffix sorting. * @param si suffixerator interface object reference * @return read mode */ GtReadmode gt_SfxIGetReadmode(const sfxInterface *si); /** * \brief Get original sequence substring. * * @param si reference of interface to suffixerator * @param dest store read symbols here * @param pos position to start reading at * @param len number of symbols to read * @return number of symbols actually read */ size_t gt_SfxIGetOrigSeq(const void *si, Symbol *dest, unsigned long pos, size_t len); /** * \brief Query original sequence for statistics. * * @param si reference of interface to suffixerator * @return reference of struct holding statistics (symbol counts) */ const struct seqStats * gt_SfxIGetSeqStats(const sfxInterface *si); /** * @brief Query length @f$l@f$ of sequence sorted by suffixerator, including * the terminator and separator symbols (i.e. * @f[ l = \sum_{i=1}^n \left(|s_i| + 1\right)@f] * ). * * @param si reference of interface to suffixerator * @return length of sequence */ unsigned long gt_SfxIGetLength(const sfxInterface *si); /** * @brief Query position of suffix starting at position 0, can be * undefined if not yet encountered. * * @param si reference of interface to suffixerator * @return tuple of boolean (position is known) and position (if * known) or undefined value. */ Definedunsignedlong gt_SfxIGetRot0Pos(const struct sfxInterface *si); /** * @return >0 on success, 0 on error */ SeqDataReader gt_SfxIRegisterReader(sfxInterface *iface, enum sfxDataRequest request); #if 0 /** * \brief Reads portion of the BWT string produced by suffixerator. * * @param iface * @param id value returned by corresponding gt_SfxIRegisterReader call * @param len number of symbols to read * @param dest store read symbols here * @return number of symbols read (less than len implies end of file) */ size_t readSfxIBWTRange(sfxInterface *iface, listenerID id, size_t len, GtUchar *dest); /** * @return actual number of symbols read */ size_t readSfxILCPRange(sfxInterface *iface, listenerID id, size_t len, unsigned long *dest, GtError *err); /** * @return actual number of symbols read */ size_t readSfxISufTabRange(sfxInterface *iface, listenerID id, size_t len, unsigned long *dest); #endif SeqDataReader gt_SfxIRegisterReader(sfxInterface *iface, enum sfxDataRequest request); #endif genometools-1.5.1/src/match/eis-voiditf.c000066400000000000000000000455141211610345200203260ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/divmodmul.h" #include "core/encseq_metadata.h" #include "core/log_api.h" #include "eis-bwtseq-construct.h" #include "eis-bwtseq-priv.h" #include "eis-bwtseq.h" #include "eis-voiditf.h" #include "procmatch.h" /* XXX make use of the types declared by the EIS-tools, similar to the module core/bitpackarray.h */ unsigned long gt_bwtseqfirstmatch(const FMindex *fmindex, unsigned long bound) { struct extBitsRetrieval extBits; unsigned long pos; initExtBitsRetrieval(&extBits); pos = gt_BWTSeqLocateMatch((const BWTSeq *) fmindex,bound,&extBits); destructExtBitsRetrieval(&extBits); return pos; } struct Bwtseqpositioniterator { struct extBitsRetrieval extBits; const BWTSeq *bwtseq; unsigned long currentbound, upperbound; }; Bwtseqpositioniterator *gt_Bwtseqpositioniterator_new(const FMindex *fmindex, unsigned long lowerbound, unsigned long upperbound) { Bwtseqpositioniterator *bspi; bspi = gt_malloc(sizeof (*bspi)); initExtBitsRetrieval(&bspi->extBits); bspi->bwtseq = (const BWTSeq *) fmindex; bspi->currentbound = lowerbound; bspi->upperbound = upperbound; return bspi; } bool gt_Bwtseqpositioniterator_next(unsigned long *pos, Bwtseqpositioniterator *bspi) { if (bspi->currentbound < bspi->upperbound) { *pos = gt_BWTSeqLocateMatch(bspi->bwtseq,bspi->currentbound,&bspi->extBits); bspi->currentbound++; return true; } return false; } bool gt_BwtseqpositionwithoutSEPiterator_next(unsigned long *pos, Bwtseqpositioniterator *bspi) { while (bspi->currentbound < bspi->upperbound) { GtUchar cc; if (bspi->currentbound != BWTSeqTerminatorPos(bspi->bwtseq)) { cc = BWTSeqGetSym(bspi->bwtseq, bspi->currentbound); } else { cc = SEPARATOR; } if (cc != SEPARATOR) { *pos = gt_BWTSeqLocateMatch(bspi->bwtseq, bspi->currentbound, &bspi->extBits); bspi->currentbound++; return true; } bspi->currentbound++; } return false; } void gt_Bwtseqpositioniterator_delete(Bwtseqpositioniterator *bspi) { destructExtBitsRetrieval(&bspi->extBits); gt_free(bspi); } struct BwtSeqpositionextractor { struct extBitsRetrieval extBits; const BWTSeq *bwtseq; unsigned long upperbound; }; BwtSeqpositionextractor *gt_newBwtSeqpositionextractor( const FMindex *voidbwtseq, unsigned long upperbound) { BwtSeqpositionextractor *bspex; bspex = gt_malloc(sizeof (*bspex)); initExtBitsRetrieval(&bspex->extBits); bspex->bwtseq = (const BWTSeq *) voidbwtseq; bspex->upperbound = upperbound; return bspex; } unsigned long gt_BwtSeqpositionextractor_extract(BwtSeqpositionextractor *bspex, unsigned long lowerbound) { unsigned long pos; gt_assert(lowerbound < bspex->upperbound); pos = gt_BWTSeqLocateMatch(bspex->bwtseq,lowerbound,&bspex->extBits); return pos; } void gt_freeBwtSeqpositionextractor(BwtSeqpositionextractor *bspex) { destructExtBitsRetrieval(&(bspex->extBits)); gt_free(bspex); } struct Bwtseqcontextiterator { struct extBitsRetrieval extBits; const BWTSeq *bwtseq; unsigned long bound; }; Bwtseqcontextiterator *gt_Bwtseqcontextiterator_new(const FMindex *fmindex, unsigned long bound) { Bwtseqcontextiterator *bsci; bsci = gt_malloc(sizeof (*bsci)); initExtBitsRetrieval(&bsci->extBits); bsci->bwtseq = (const BWTSeq *) fmindex; bsci->bound = bound; return bsci; } GtUchar gt_bwtseqgetsymbol(unsigned long bound,const FMindex *fmindex) { if (bound != BWTSeqTerminatorPos((const BWTSeq *) fmindex)) { return BWTSeqGetSym((const BWTSeq *) fmindex, bound); } return SEPARATOR; } GtUchar gt_Bwtseqcontextiterator_next(unsigned long *bound, Bwtseqcontextiterator *bsci) { GtUchar cc; if (bsci->bound != BWTSeqTerminatorPos(bsci->bwtseq)) { cc = BWTSeqGetSym(bsci->bwtseq, bsci->bound); } else { cc = SEPARATOR; } *bound = bsci->bound = BWTSeqLFMap(bsci->bwtseq, bsci->bound, &bsci->extBits); return cc; } void gt_Bwtseqcontextiterator_delete(Bwtseqcontextiterator *bsci) { if (bsci != NULL) { destructExtBitsRetrieval(&bsci->extBits); gt_free(bsci); } } FMindex *gt_loadvoidBWTSeqForSA(const char *indexname, bool withpckbt, GtError *err) { BWTSeq *bwtseq = NULL; bool haserr = false; GtEncseqMetadata *emd; GtAlphabet *alphabet; emd = gt_encseq_metadata_new(indexname, err); if (emd == NULL) { gt_assert(gt_error_is_set(err)); haserr = true; } if (!haserr) { alphabet = gt_encseq_metadata_alphabet(emd); if (alphabet == NULL) { gt_assert(gt_error_is_set(err)); haserr = true; } } if (!haserr) { bwtseq = gt_loadBWTSeqForSA(indexname, BWT_ON_BLOCK_ENC, BWTDEFOPT_MULTI_QUERY, alphabet, err); if (bwtseq == NULL) { gt_assert(gt_error_is_set(err)); haserr = true; } } if (!haserr) { if (withpckbt && gt_pckbuckettable_exists(indexname)) { unsigned int numofchars = gt_alphabet_num_of_chars(alphabet); bwtseq->pckbuckettable = gt_pckbuckettable_map(indexname,numofchars,err); if (bwtseq->pckbuckettable == NULL) { gt_assert(gt_error_is_set(err)); haserr = true; } } else { bwtseq->pckbuckettable = NULL; } } gt_encseq_metadata_delete(emd); if (haserr && bwtseq != NULL) { gt_deletevoidBWTSeq((FMindex *) bwtseq); bwtseq = NULL; } return haserr ? NULL : (FMindex *) bwtseq; } const Mbtab **gt_bwtseq2mbtab(const FMindex *fmindex) { gt_assert(fmindex != NULL); if (((const BWTSeq *) fmindex)->pckbuckettable == NULL) { return NULL; } return (const Mbtab **) gt_pckbuckettable_mbtab_get(((const BWTSeq *) fmindex) ->pckbuckettable); } unsigned int gt_bwtseq2maxdepth(const FMindex *fmindex) { gt_assert(fmindex != NULL); if (((const BWTSeq *) fmindex)->pckbuckettable == NULL) { return 0; } return gt_pckbuckettable_maxdepth_get(((const BWTSeq *) fmindex) ->pckbuckettable); } unsigned int gt_bwtseq2numofchars(const FMindex *fmindex) { gt_assert(fmindex != NULL); if (((const BWTSeq *) fmindex)->pckbuckettable == NULL) { return 0; } return gt_pckbuckettable_numofchars_get(((const BWTSeq *) fmindex) ->pckbuckettable); } void gt_bwtrangesplitwithoutspecial(GtArrayBoundswithchar *bwci, unsigned long *rangeOccs, const FMindex *fmindex, unsigned long lbound, unsigned long ubound) { const BWTSeq *bwtseq = (const BWTSeq *) fmindex; AlphabetRangeSize idx, rangesize; rangesize = MRAEncGetRangeSize(EISGetAlphabet(bwtseq->seqIdx),0); bwci->nextfreeBoundswithchar = 0; BWTSeqPosPairRangeOcc(bwtseq, 0, lbound, ubound,rangeOccs); for (idx = 0; idx < rangesize; idx++) { if (rangeOccs[idx] < rangeOccs[rangesize+idx]) { bwci->spaceBoundswithchar[bwci->nextfreeBoundswithchar].inchar = idx; bwci->spaceBoundswithchar[bwci->nextfreeBoundswithchar].lbound = bwtseq->count[idx] + rangeOccs[idx]; bwci->spaceBoundswithchar[bwci->nextfreeBoundswithchar++].rbound = bwtseq->count[idx] + rangeOccs[rangesize+idx]; } } } unsigned long gt_bwtrangesplitallwithoutspecial(Mbtab *mbtab, unsigned long *rangeOccs, const FMindex *fmindex, unsigned long lbound, unsigned long ubound) { const BWTSeq *bwtseq = (const BWTSeq *) fmindex; AlphabetRangeSize idx, rangesize = MRAEncGetRangeSize(EISGetAlphabet(bwtseq->seqIdx),0); gt_assert(sizeof (AlphabetRangeSize) <= sizeof (unsigned long)); BWTSeqPosPairRangeOcc(bwtseq, 0, lbound, ubound,rangeOccs); for (idx = 0; idx < rangesize; idx++) { if (rangeOccs[idx] < rangeOccs[rangesize+idx]) { mbtab[idx].lowerbound = bwtseq->count[idx] + rangeOccs[idx]; mbtab[idx].upperbound = bwtseq->count[idx] + rangeOccs[rangesize+idx]; } else { mbtab[idx].lowerbound = mbtab[idx].upperbound = 0; } } return (unsigned long) rangesize; } unsigned long gt_bwtrangesplitallwithspecial(Mbtab *mbtab, unsigned long *rangeOccs, const FMindex *voidBwtSeq, unsigned long lbound, unsigned long ubound) { unsigned long char_idx, range_idx, rangebase; const BWTSeq *bwtseq = (const BWTSeq *) voidBwtSeq; const MRAEnc *alphabet = BWTSeqGetAlphabet(bwtseq); AlphabetRangeID numofranges = MRAEncGetNumRanges(alphabet); AlphabetRangeSize rangesize = 0, totalrange = 0; for (range_idx = 0; range_idx < (unsigned long) numofranges; range_idx++) { unsigned long rangeOcc_idx = 0; rangesize = MRAEncGetRangeSize(alphabet, range_idx); totalrange += rangesize; BWTSeqPosPairRangeOcc(bwtseq, range_idx, lbound, ubound,rangeOccs); rangebase = (unsigned long) MRAEncGetRangeBase(alphabet, range_idx); for (char_idx = rangebase; char_idx < rangebase + rangesize; char_idx++) { if (rangeOccs[rangeOcc_idx] < rangeOccs[rangesize+rangeOcc_idx]) { mbtab[char_idx].lowerbound = bwtseq->count[char_idx] + rangeOccs[rangeOcc_idx]; mbtab[char_idx].upperbound = bwtseq->count[char_idx] + rangeOccs[rangesize+rangeOcc_idx]; } else { mbtab[char_idx].lowerbound = mbtab[char_idx].upperbound = 0; } rangeOcc_idx++; } } return totalrange; } /* void bwtrangewithspecial(GT_UNUSED GtArrayBoundswithchar *bwci, unsigned long *rangeOccs, GT_UNUSED unsigned long numofchars, const void *voidBwtSeq, const Lcpinterval *parent) { const BWTSeq *bwtseq = (const BWTSeq *) voidBwtSeq; AlphabetRangeSize rangesize = MRAEncGetRangeSize(EISGetAlphabet(bwtseq->seqIdx),1); gt_assert(rangesize < (AlphabetRangeSize) 4); BWTSeqPosPairRangeOcc(bwtseq, 1, parent->left, parent->right,rangeOccs); inchar = WILDCARD bwtcode = MRAEncMapSymbol(EISGetAlphabet(bwtseq->seqIdx),WILDCARD); idx = bwtcode - MRAEncGetRangeBase(EISGetAlphabet(bwtseq->seqIdx),1); if (rangeOccs[idx] < rangeOccs[rangesize+idx]) { pos = gt_BWTSeqLocateMatch((const BWTSeq *) fmindex,bound,&extBits); } } } */ void gt_deletevoidBWTSeq(FMindex *fmindex) { BWTSeq *bwtseq = (BWTSeq *) fmindex; if (bwtseq->pckbuckettable != NULL) { gt_pckbuckettable_delete(bwtseq->pckbuckettable); bwtseq->pckbuckettable = NULL; } gt_deleteBWTSeq(bwtseq); } unsigned long gt_voidpackedindexuniqueforward(const void *fmindex, GT_UNUSED unsigned long offset, GT_UNUSED unsigned long left, GT_UNUSED unsigned long right, GT_UNUSED unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend) { return gt_packedindexuniqueforward((const BWTSeq *) fmindex,qstart,qend); } unsigned long gt_voidpackedfindfirstmatchconvert(const FMindex *fmindex, unsigned long witnessbound, unsigned long matchlength) { const BWTSeq *bwtseq = (const BWTSeq *) fmindex; unsigned long startpos; startpos = gt_bwtseqfirstmatch(fmindex,witnessbound); gt_assert((bwtseq->seqIdx->seqLen-1) >= (startpos + matchlength)); return (bwtseq->seqIdx->seqLen - 1) - (startpos + matchlength); } unsigned long gt_voidpackedindexmstatsforward(const void *fmindex, GT_UNUSED unsigned long offset, GT_UNUSED unsigned long left, GT_UNUSED unsigned long right, unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend) { const BWTSeq *bwtseq = (const BWTSeq *) fmindex; unsigned long matchlength; matchlength = gt_packedindexmstatsforward(bwtseq,witnessposition,qstart,qend); if (matchlength > 0 && witnessposition != NULL) { *witnessposition = gt_voidpackedfindfirstmatchconvert(fmindex, *witnessposition, matchlength); } return matchlength; } bool gt_pck_exactpatternmatching(const FMindex *fmindex, const GtUchar *pattern, unsigned long patternlength, unsigned long totallength, const GtUchar *dbsubstring, ProcessIdxMatch processmatch, void *processmatchinfo) { BWTSeqExactMatchesIterator *bsemi; unsigned long dbstartpos, numofmatches; GtIdxMatch match; bsemi = gt_newEMIterator((const BWTSeq *) fmindex, pattern,(size_t) patternlength, true); gt_assert(bsemi != NULL); numofmatches = gt_EMINumMatchesTotal(bsemi); match.dbabsolute = true; match.dblen = patternlength; match.dbsubstring = dbsubstring; match.querystartpos = 0; match.querylen = patternlength; match.distance = 0; match.alignment = NULL; while (EMIGetNextMatch(bsemi,&dbstartpos,(const BWTSeq *) fmindex)) { gt_assert(totallength >= (dbstartpos + patternlength)); match.dbstartpos = totallength - (dbstartpos + patternlength); processmatch(processmatchinfo,&match); } if (bsemi != NULL) { gt_deleteEMIterator(bsemi); bsemi = NULL; } return numofmatches > 0 ? true : false; } unsigned long gt_voidpackedindex_totallength_get(const FMindex *fmindex) { unsigned long bwtlen = BWTSeqLength((const BWTSeq *) fmindex); gt_assert(bwtlen > 0); return bwtlen - 1; } unsigned long gt_pck_getShuStringLength(const FMindex *bwtSubject, const GtUchar *suffix, unsigned long suffixLength) { GtUlongPair occPair; Symbol curChar; const GtUchar *qptr, *qend; const MRAEnc *alphabet; unsigned long start, end; gt_assert(bwtSubject && suffix); alphabet = BWTSeqGetAlphabet((const BWTSeq *) bwtSubject); qptr = suffix; qend = suffix + suffixLength; curChar = MRAEncMapSymbol(alphabet, *qptr); qptr++; start = ((const BWTSeq *) bwtSubject)->count[curChar]; end = ((const BWTSeq *) bwtSubject)->count[curChar + 1]; for (/* Nothing */; start < end && qptr < qend; qptr++) { curChar = MRAEncMapSymbol(alphabet, *qptr); occPair = BWTSeqTransformedPosPairOcc((const BWTSeq *) bwtSubject, curChar, start, end); start = ((const BWTSeq *) bwtSubject)->count[curChar] + occPair.a; end = ((const BWTSeq *) bwtSubject)->count[curChar] + occPair.b; } if (qptr == qend && start < end) return suffixLength + 1; else return qptr - suffix; } double gt_pck_getGCcontent(const FMindex *bwtSubject, const GtAlphabet *alphabet) { unsigned long c, length; double gc; const MRAEnc *FM_alphabet; GtUchar c_sym; FM_alphabet = BWTSeqGetAlphabet((const BWTSeq *) bwtSubject); c_sym = MRAEncMapSymbol(FM_alphabet, gt_alphabet_encode(alphabet, 'c')); length = ((const BWTSeq *) bwtSubject)->seqIdx->seqLen; c = ((const BWTSeq *) bwtSubject)->count[c_sym+1] - ((const BWTSeq *) bwtSubject)->count[c_sym]; gc = c * 2 / (double) (length - 2); return gc; } unsigned long gt_pck_get_nonspecial_count(const FMindex *index) { const BWTSeq *bwtseq = (const BWTSeq *) index; return BWTSeqAggTransformedCount(bwtseq, MRAEncGetRangeSize(BWTSeqGetAlphabet(bwtseq), 0)); } unsigned long gt_pck_special_occ_in_nonspecial_intervals(const FMindex *index) { const BWTSeq *bwtseq = (const BWTSeq *) index; unsigned long count = 0, *rangeOccs, first_special_row; unsigned short idx, rangesize; rangesize = (unsigned short) MRAEncGetRangeSize(BWTSeqGetAlphabet(bwtseq), 1); rangeOccs = gt_calloc(rangesize, sizeof (unsigned long)); first_special_row = gt_pck_get_nonspecial_count(index); BWTSeqRangeOcc(bwtseq, 1, first_special_row, rangeOccs); for (idx = 0; idx < rangesize; idx++) count += rangeOccs[idx]; gt_free(rangeOccs); return count; } unsigned long gt_pck_exact_pattern_count(const FMindex *index, const GtUchar *pattern, unsigned long patternlength) { return gt_BWTSeqMatchCount((const BWTSeq *) index, pattern, (size_t) patternlength, true); /* XXX check if this is right! */ } genometools-1.5.1/src/match/eis-voiditf.h000066400000000000000000000175161211610345200203340ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EIS_VOIDITF_H #define EIS_VOIDITF_H #include "core/unused_api.h" #include "core/encseq_api.h" #include "splititv.h" #include "procmatch.h" /* The following type is just used to stronlgy type the functions using the FMindex (rather than using void pointers) */ typedef struct FMindex FMindex; unsigned long gt_bwtseqfirstmatch(const FMindex *fmindex, unsigned long bound); /** Iterator for positions defined by a lower and upper bound */ typedef struct Bwtseqpositioniterator Bwtseqpositioniterator; Bwtseqpositioniterator *gt_Bwtseqpositioniterator_new(const FMindex *fmindex, unsigned long lowerbound, unsigned long upperbound); bool gt_Bwtseqpositioniterator_next(unsigned long *pos, Bwtseqpositioniterator *bspi); bool gt_BwtseqpositionwithoutSEPiterator_next(unsigned long *pos, Bwtseqpositioniterator *bspi); GtUchar gt_bwtseqgetsymbol(unsigned long bound,const FMindex *fmindex); void gt_Bwtseqpositioniterator_delete(Bwtseqpositioniterator *bspi); typedef struct BwtSeqpositionextractor BwtSeqpositionextractor; BwtSeqpositionextractor *gt_newBwtSeqpositionextractor( const FMindex *voidbwtseq, unsigned long upperbound); unsigned long gt_BwtSeqpositionextractor_extract(BwtSeqpositionextractor *bspex, unsigned long lowerbound); void gt_freeBwtSeqpositionextractor(BwtSeqpositionextractor *bspex); typedef struct Bwtseqcontextiterator Bwtseqcontextiterator; Bwtseqcontextiterator *gt_Bwtseqcontextiterator_new(const FMindex *fmindex, unsigned long bound); GtUchar gt_Bwtseqcontextiterator_next(unsigned long *bound, Bwtseqcontextiterator *bsci); void gt_Bwtseqcontextiterator_delete(Bwtseqcontextiterator *bsci); void gt_bwtrangesplitwithoutspecial(GtArrayBoundswithchar *bwci, unsigned long *rangeOccs, const FMindex *fmindex, unsigned long lbound, unsigned long ubound); FMindex *gt_loadvoidBWTSeqForSA(const char *indexname, bool withpckbt, GtError *err); void gt_deletevoidBWTSeq(FMindex *packedindex); /* the parameter is const void *, as this is required by the other indexed based methods */ unsigned long gt_voidpackedindexuniqueforward(const void *fmindex, GT_UNUSED unsigned long offset, GT_UNUSED unsigned long left, GT_UNUSED unsigned long right, GT_UNUSED unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend); /* the parameter is const void *, as this is required by the other indexed based methods */ unsigned long gt_voidpackedindexmstatsforward(const void *fmindex, GT_UNUSED unsigned long offset, GT_UNUSED unsigned long left, GT_UNUSED unsigned long right, unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend); bool gt_pck_exactpatternmatching(const FMindex *fmindex, const GtUchar *pattern, unsigned long patternlength, unsigned long totallength, const GtUchar *dbsubstring, ProcessIdxMatch processmatch, void *processmatchinfo); unsigned long gt_voidpackedfindfirstmatchconvert(const FMindex *fmindex, unsigned long witnessbound, unsigned long matchlength); typedef struct { unsigned long lowerbound, upperbound; } Mbtab; unsigned long gt_bwtrangesplitallwithoutspecial(Mbtab *mbtab, unsigned long *rangeOccs, const FMindex *fmindex, unsigned long lbound, unsigned long ubound); unsigned int gt_bwtseq2maxdepth(const FMindex *fmindex); unsigned int gt_bwtseq2numofchars(const FMindex *fmindex); const Mbtab **gt_bwtseq2mbtab(const FMindex *fmindex); /* this does currently not work, only for the root interval. This is due to the * sorting of the special chars, might be changed in future. * Only reliable information: * - Child intervals of standard alphabet * - type of special and the number, but not the interval (child intervals in * special ranges do not necessarily form continuous intervals!) */ unsigned long gt_bwtrangesplitallwithspecial(Mbtab *mbtab, unsigned long *rangeOccs, const FMindex *voidBwtSeq, unsigned long lbound, unsigned long ubound); unsigned long gt_voidpackedindex_totallength_get(const FMindex *fmindex); /* returns the length of the matching prefix +1, that is it returns the * length of the shortest absent prefix */ unsigned long gt_pck_getShuStringLength(const FMindex* bwtSubject, const GtUchar* query, unsigned long queryLength); /* returns the ½gc-content of the subject assuming fwd and rev sequence in the * index so that |g| == |c| */ double gt_pck_getGCcontent(const FMindex *bwtSubject, const GtAlphabet *alphabet); /* returns the count of all non special chars in the index, corresponding to the * first row in which a special char prefixes the rotation */ unsigned long gt_pck_get_nonspecial_count(const FMindex *index); /* returns occurrences of special chars in the intervals of non special chars, * that is the number of rows that would be extended with a special. */ unsigned long gt_pck_special_occ_in_nonspecial_intervals(const FMindex *index); /* counts the exact occurences of pattern in index returns 0 if pattern is not found */ unsigned long gt_pck_exact_pattern_count(const FMindex *index, const GtUchar *pattern, unsigned long patternlength); #endif genometools-1.5.1/src/match/emimergeesa.h000066400000000000000000000045071211610345200203710ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef EMIMERGEESA_H #define EMIMERGEESA_H #include "sarr-def.h" #include "merger-trie.h" #define SIZEOFMERGERESULTBUFFER BUFSIZ /* make the type opaque */ typedef struct { unsigned int idx; /* index of genome in list of all genomes */ unsigned long startpos; /* in the range [0..totallength single index] */ } Indexedsuffix; typedef struct { unsigned int nextaccessidx, /* in the range [0..SIZEOFMERGERESULTBUFFER] */ nextstoreidx; /* in the range [0..SIZEOFMERGERESULTBUFFER] */ unsigned long lcptabstore[SIZEOFMERGERESULTBUFFER]; Indexedsuffix suftabstore[SIZEOFMERGERESULTBUFFER]; bool lastpage; } Suflcpbuffer; typedef struct { uint64_t ident; /* can be arbitrary large */ unsigned int numofentries, /* in the range [0..numofindexes-1] */ numofindexes; /* number of indexes */ unsigned long *nextpostable; /* in the range [0..totallength single index] */ Suflcpbuffer buf; Mergertrierep trierep; Suffixarray *suffixarraytable; unsigned int numofchars; } Emissionmergedesa; int gt_emissionmergedesa_stepdeleteandinsertothersuffixes( Emissionmergedesa *emmesa, GtError *err); int gt_emissionmergedesa_init(Emissionmergedesa *emmesa, const GtStrArray *indexnametab, unsigned int demand, GtLogger *logger, GtError *err); void gt_emissionmergedesa_wrap(Emissionmergedesa *emmesa); #endif genometools-1.5.1/src/match/encseq2offset.c000066400000000000000000000127301211610345200206450ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/chardef.h" #include "core/ma_api.h" #include "sarr-def.h" #include "core/safecast-gen.h" unsigned long *gt_encseqtable2sequenceoffsets( unsigned long *totallength, GtSpecialcharinfo *specialcharinfo, const Suffixarray *suffixarraytable, unsigned int numofindexes) { unsigned int idx; GtUchar lastofprevious, firstofcurrent; unsigned long tmplength, numofsequences = 0, *sequenceoffsettable; uint64_t tmpspecialcharacters, tmpwildcards, tmpspecialranges, tmpwildcardranges, tmprealspecialranges, tmprealwildcardranges, tmpoffset; gt_assert(numofindexes > 0); sequenceoffsettable = gt_malloc(sizeof (*sequenceoffsettable) * numofindexes); tmpspecialcharacters = (uint64_t) (numofindexes-1); tmpwildcards = 0; tmpspecialranges = 0; tmpwildcardranges = 0; tmprealspecialranges = 0; tmprealwildcardranges = 0; for (idx=0; idx 0) { /* Random access */ lastofprevious = gt_encseq_get_encoded_char(suffixarraytable[idx-1].encseq, tmplength-1, suffixarraytable[idx - 1].readmode); /* Random access */ firstofcurrent = gt_encseq_get_encoded_char(suffixarraytable[idx].encseq, 0, suffixarraytable[idx].readmode); if (ISSPECIAL(lastofprevious)) { if (ISSPECIAL(firstofcurrent)) { tmpspecialranges--; tmprealspecialranges--; } } else { if (ISNOTSPECIAL(firstofcurrent)) { tmpspecialranges++; tmprealspecialranges++; } } } tmpoffset = (uint64_t) sequenceoffsettable[idx] + (uint64_t) gt_encseq_total_length(suffixarraytable[idx].encseq); (void) CALLCASTFUNC(uint64_t,unsigned_long,tmpoffset); (void) CALLCASTFUNC(uint64_t,unsigned_long,tmpspecialcharacters); (void) CALLCASTFUNC(uint64_t,unsigned_long,tmpwildcards); (void) CALLCASTFUNC(uint64_t,unsigned_long,tmpspecialranges); (void) CALLCASTFUNC(uint64_t,unsigned_long,tmpwildcardranges); (void) CALLCASTFUNC(uint64_t,unsigned_long,tmprealspecialranges); (void) CALLCASTFUNC(uint64_t,unsigned_long,tmprealwildcardranges); printf("# seqlen[%u] = %lu\n", idx, gt_encseq_total_length(suffixarraytable[idx].encseq)); } tmplength = gt_encseq_total_length(suffixarraytable[numofindexes -1].encseq); *totallength = sequenceoffsettable[numofindexes-1] + tmplength; specialcharinfo->specialcharacters = (unsigned long) tmpspecialcharacters; specialcharinfo->wildcards = (unsigned long) tmpwildcards; specialcharinfo->specialranges = (unsigned long) tmpspecialranges; specialcharinfo->wildcardranges = (unsigned long) tmpwildcardranges; specialcharinfo->realspecialranges = (unsigned long) tmprealspecialranges; specialcharinfo->realwildcardranges = (unsigned long) tmprealwildcardranges; specialcharinfo->lengthofspecialprefix = gt_encseq_lengthofspecialprefix(suffixarraytable[0].encseq); specialcharinfo->lengthofwildcardprefix = gt_encseq_lengthofwildcardprefix(suffixarraytable[0].encseq); specialcharinfo->lengthofspecialsuffix = gt_encseq_lengthofspecialsuffix(suffixarraytable[idx-1].encseq); specialcharinfo->lengthofwildcardsuffix = gt_encseq_lengthofwildcardsuffix(suffixarraytable[idx-1].encseq); gt_assert(numofsequences > 0); #ifndef NDEBUG gt_GtSpecialcharinfo_check(specialcharinfo,numofsequences - 1); #endif return sequenceoffsettable; } genometools-1.5.1/src/match/encseq2offset.pr000066400000000000000000000006041211610345200210410ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif unsigned long *gt_encseqtable2sequenceoffsets( unsigned long *totallength, GtSpecialcharinfo *specialcharinfo, const Suffixarray *suffixarraytable, unsigned int numofindexes); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/enum-patt.c000066400000000000000000000117551211610345200200160ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/chardef.h" #include "core/types_api.h" #include "core/encseq.h" #include "enum-patt.h" struct Enumpatterniterator { unsigned long minpatternlen, maxpatternlen, samplecount, *patternstat; GtUchar *patternspace; const GtEncseq *sampleencseq; unsigned int alphasize; unsigned long totallength; GtEncseqReader *esr; }; Enumpatterniterator *gt_newenumpatterniterator(unsigned long minpatternlen, unsigned long maxpatternlen, const GtEncseq *encseq, GtError *err) { Enumpatterniterator *epi = NULL; unsigned long i; if (maxpatternlen < minpatternlen) { gt_error_set(err,"maxpatternlen=%lu < %lu", maxpatternlen, minpatternlen); return NULL; } epi = gt_malloc(sizeof *epi); epi->totallength = gt_encseq_total_length(encseq); if (epi->totallength <= (unsigned long) maxpatternlen) { gt_error_set(err,"totallength=%lu <= maxpatternlen = %lu", epi->totallength, maxpatternlen); gt_free(epi); return NULL; } epi->patternspace = gt_malloc(sizeof *epi->patternspace * maxpatternlen); epi->patternstat = gt_malloc(sizeof *epi->patternstat * (maxpatternlen+1)); for (i=0; i<=maxpatternlen; i++) { epi->patternstat[i] = 0; } epi->minpatternlen = minpatternlen; epi->maxpatternlen = maxpatternlen; epi->sampleencseq = encseq; epi->samplecount = 0; epi->alphasize = gt_alphabet_num_of_chars( gt_encseq_alphabet(encseq)); epi->esr = NULL; return epi; } static void reversesequenceinplace(GtUchar *s,unsigned long len) { GtUchar *front, *back, tmp; for (front = s, back = s + len - 1; front < back; front++, back--) { tmp = *front; *front = *back; *back = tmp; } } const GtUchar *gt_nextEnumpatterniterator(unsigned long *patternlen, Enumpatterniterator *epi) { unsigned long start; unsigned long j; GtUchar cc; if (epi->minpatternlen == epi->maxpatternlen) { *patternlen = epi->minpatternlen; } else { *patternlen = (unsigned long) (epi->minpatternlen + (random() % (epi->maxpatternlen - epi->minpatternlen+1))); } start = (unsigned long) (random() % (epi->totallength - *patternlen)); gt_assert(start < (unsigned long) (epi->totallength - *patternlen)); if (epi->esr == NULL) { epi->esr = gt_encseq_create_reader_with_readmode(epi->sampleencseq, GT_READMODE_FORWARD, start); } else { gt_encseq_reader_reinit_with_readmode(epi->esr, epi->sampleencseq, GT_READMODE_FORWARD, start); } for (j=0; j<*patternlen; j++) { cc = gt_encseq_reader_next_encoded_char(epi->esr); if (ISSPECIAL(cc)) { cc = (GtUchar) (random() % epi->alphasize); } epi->patternspace[j] = cc; } if (epi->samplecount & 1) { reversesequenceinplace(epi->patternspace,*patternlen); } epi->samplecount++; epi->patternstat[*patternlen]++; return epi->patternspace; } void gt_showPatterndistribution(const Enumpatterniterator *epi) { unsigned long i; double addprob, probsum = 0.0; printf("# %lu pattern with the following length distribution:\n", epi->samplecount); for (i=epi->minpatternlen; i<=epi->maxpatternlen; i++) { if (epi->patternstat[i] > 0) { addprob = (double) epi->patternstat[i] / epi->samplecount; probsum += addprob; printf("# %lu: %lu (prob=%.4f,cumulative=%.4f)\n", i, epi->patternstat[i], addprob, probsum); } } } void gt_freeEnumpatterniterator(Enumpatterniterator *epi) { if (!epi) return; gt_free(epi->patternspace); gt_free(epi->patternstat); gt_encseq_reader_delete(epi->esr); gt_free(epi); } genometools-1.5.1/src/match/enum-patt.h000066400000000000000000000027271211610345200200220ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ENUM_PATT_H #define ENUM_PATT_H typedef struct Enumpatterniterator Enumpatterniterator; Enumpatterniterator *gt_newenumpatterniterator(unsigned long minpatternlen, unsigned long maxpatternlen, const GtEncseq *encseq, GtError *err); const GtUchar *gt_nextEnumpatterniterator(unsigned long *patternlen, Enumpatterniterator *epi); void gt_showPatterndistribution(const Enumpatterniterator *epi); void gt_freeEnumpatterniterator(Enumpatterniterator *epi); #endif genometools-1.5.1/src/match/esa-bottomup-errfind.inc000066400000000000000000000211501211610345200224670ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* THIS FILE IS GENERATED by scripts/gen-esa-bottomup.rb --key errfind --reader --absolute. DO NOT EDIT. */ #include #include "core/ma.h" #include "esa-seqread.h" /* no include for seqnumrelpos.h */ static void initBUinfo_errfind(GtBUinfo_errfind *,GtBUstate_errfind *); static void freeBUinfo_errfind(GtBUinfo_errfind *,GtBUstate_errfind *); static int processleafedge_errfind(bool, unsigned long, GtBUinfo_errfind *, unsigned long, /* position */ GtBUstate_errfind *, GtError *err); static int processbranchingedge_errfind(bool firstsucc, unsigned long, GtBUinfo_errfind *, unsigned long, unsigned long, GtBUinfo_errfind *, GtBUstate_errfind *, GtError *); static int processlcpinterval_errfind(unsigned long, GtBUinfo_errfind *, GtBUstate_errfind *, GtError *err); #define TOP_ESA_BOTTOMUP_errfind\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo-1] #define POP_ESA_BOTTOMUP_errfind\ (stack->spaceGtBUItvinfo + (--stack->nextfreeGtBUItvinfo)) #define PUSH_ESA_BOTTOMUP_errfind(LCP,LB)\ if (stack->nextfreeGtBUItvinfo >= stack->allocatedGtBUItvinfo)\ {\ gt_assert(stack->nextfreeGtBUItvinfo ==\ stack->allocatedGtBUItvinfo);\ stack->spaceGtBUItvinfo\ = allocateBUstack_errfind(stack->spaceGtBUItvinfo,\ stack->allocatedGtBUItvinfo,\ stack->allocatedGtBUItvinfo+incrementstacksize,\ bustate);\ stack->allocatedGtBUItvinfo += incrementstacksize;\ }\ gt_assert(stack->spaceGtBUItvinfo != NULL);\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lcp = LCP;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lb = LB;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo++].rb = ULONG_MAX typedef struct { unsigned long lcp, lb, rb; GtBUinfo_errfind info; } GtBUItvinfo_errfind; typedef struct { GtBUItvinfo_errfind *spaceGtBUItvinfo; unsigned long allocatedGtBUItvinfo, nextfreeGtBUItvinfo; } GtArrayGtBUItvinfo_errfind; GtArrayGtBUItvinfo_errfind *gt_GtArrayGtBUItvinfo_new_errfind(void) { GtArrayGtBUItvinfo_errfind *stack = gt_malloc(sizeof (*stack)); stack->spaceGtBUItvinfo = NULL; stack->allocatedGtBUItvinfo = stack->nextfreeGtBUItvinfo = 0; return stack; } void gt_GtArrayGtBUItvinfo_delete_errfind(GtArrayGtBUItvinfo_errfind *stack, GtBUstate_errfind *state) { unsigned long idx; for (idx=0; idxallocatedGtBUItvinfo; idx++) { freeBUinfo_errfind(&stack->spaceGtBUItvinfo[idx].info,state); } gt_free(stack->spaceGtBUItvinfo); gt_free(stack); } static GtBUItvinfo_errfind *allocateBUstack_errfind(GtBUItvinfo_errfind *ptr, unsigned long currentallocated, unsigned long allocated, GtBUstate_errfind *state) { unsigned long idx; GtBUItvinfo_errfind *itvinfo; itvinfo = gt_realloc(ptr,sizeof (*itvinfo) * allocated); gt_assert(allocated > currentallocated); for (idx=currentallocated; idxnextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_errfind.lcp) { if (TOP_ESA_BOTTOMUP_errfind.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_errfind(firstedge, TOP_ESA_BOTTOMUP_errfind.lcp, &TOP_ESA_BOTTOMUP_errfind.info, previoussuffix, bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_errfind.lcp) { lastinterval = POP_ESA_BOTTOMUP_errfind; lastinterval->rb = idx; if (processlcpinterval_errfind(lastinterval->lcp, &lastinterval->info, bustate, err) != 0) { haserr = true; } if (lcpvalue <= TOP_ESA_BOTTOMUP_errfind.lcp) { if (TOP_ESA_BOTTOMUP_errfind.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processbranchingedge_errfind(firstedge, TOP_ESA_BOTTOMUP_errfind.lcp, &TOP_ESA_BOTTOMUP_errfind.info, lastinterval->lcp, lastinterval->rb - lastinterval->lb + 1, &lastinterval->info, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_errfind.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; unsigned long lastintervallcp = lastinterval->lcp, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP_errfind(lcpvalue,lastintervallb); if (processbranchingedge_errfind(true, TOP_ESA_BOTTOMUP_errfind.lcp, &TOP_ESA_BOTTOMUP_errfind.info, lastintervallcp, lastintervalrb - lastintervallb + 1, NULL, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_errfind(lcpvalue,idx); if (processleafedge_errfind(true, TOP_ESA_BOTTOMUP_errfind.lcp, &TOP_ESA_BOTTOMUP_errfind.info, previoussuffix, bustate, err) != 0) { haserr = true; } } } } gt_assert(stack->nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP_errfind.lcp > 0) { /* no assignment to lastsuftabvalue */ if (processleafedge_errfind(false, TOP_ESA_BOTTOMUP_errfind.lcp, &TOP_ESA_BOTTOMUP_errfind.info, lastsuftabvalue, bustate, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP_errfind.rb = idx; if (processlcpinterval_errfind(TOP_ESA_BOTTOMUP_errfind.lcp, &TOP_ESA_BOTTOMUP_errfind.info, bustate, err) != 0) { haserr = true; } } } gt_GtArrayGtBUItvinfo_delete_errfind(stack,bustate); return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-bottomup-maxpairs.inc000066400000000000000000000204241211610345200226650ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* THIS FILE IS GENERATED by scripts/gen-esa-bottomup.rb --key maxpairs --reader --absolute --no_process_lcpinterval. DO NOT EDIT. */ #include #include "core/ma.h" #include "esa-seqread.h" /* no include for seqnumrelpos.h */ static void initBUinfo_maxpairs(GtBUinfo_maxpairs *,GtBUstate_maxpairs *); static void freeBUinfo_maxpairs(GtBUinfo_maxpairs *,GtBUstate_maxpairs *); static int processleafedge_maxpairs(bool, unsigned long, GtBUinfo_maxpairs *, unsigned long, /* position */ GtBUstate_maxpairs *, GtError *err); static int processbranchingedge_maxpairs(bool firstsucc, unsigned long, GtBUinfo_maxpairs *, unsigned long, unsigned long, GtBUinfo_maxpairs *, GtBUstate_maxpairs *, GtError *); /* no declaration of processlcpinterval_maxpairs */ #define TOP_ESA_BOTTOMUP_maxpairs\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo-1] #define POP_ESA_BOTTOMUP_maxpairs\ (stack->spaceGtBUItvinfo + (--stack->nextfreeGtBUItvinfo)) #define PUSH_ESA_BOTTOMUP_maxpairs(LCP,LB)\ if (stack->nextfreeGtBUItvinfo >= stack->allocatedGtBUItvinfo)\ {\ gt_assert(stack->nextfreeGtBUItvinfo ==\ stack->allocatedGtBUItvinfo);\ stack->spaceGtBUItvinfo\ = allocateBUstack_maxpairs(stack->spaceGtBUItvinfo,\ stack->allocatedGtBUItvinfo,\ stack->allocatedGtBUItvinfo+incrementstacksize,\ bustate);\ stack->allocatedGtBUItvinfo += incrementstacksize;\ }\ gt_assert(stack->spaceGtBUItvinfo != NULL);\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lcp = LCP;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lb = LB;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo++].rb = ULONG_MAX typedef struct { unsigned long lcp, lb, rb; GtBUinfo_maxpairs info; } GtBUItvinfo_maxpairs; typedef struct { GtBUItvinfo_maxpairs *spaceGtBUItvinfo; unsigned long allocatedGtBUItvinfo, nextfreeGtBUItvinfo; } GtArrayGtBUItvinfo_maxpairs; GtArrayGtBUItvinfo_maxpairs *gt_GtArrayGtBUItvinfo_new_maxpairs(void) { GtArrayGtBUItvinfo_maxpairs *stack = gt_malloc(sizeof (*stack)); stack->spaceGtBUItvinfo = NULL; stack->allocatedGtBUItvinfo = stack->nextfreeGtBUItvinfo = 0; return stack; } void gt_GtArrayGtBUItvinfo_delete_maxpairs(GtArrayGtBUItvinfo_maxpairs *stack, GtBUstate_maxpairs *state) { unsigned long idx; for (idx=0; idxallocatedGtBUItvinfo; idx++) { freeBUinfo_maxpairs(&stack->spaceGtBUItvinfo[idx].info,state); } gt_free(stack->spaceGtBUItvinfo); gt_free(stack); } static GtBUItvinfo_maxpairs *allocateBUstack_maxpairs(GtBUItvinfo_maxpairs *ptr, unsigned long currentallocated, unsigned long allocated, GtBUstate_maxpairs *state) { unsigned long idx; GtBUItvinfo_maxpairs *itvinfo; itvinfo = gt_realloc(ptr,sizeof (*itvinfo) * allocated); gt_assert(allocated > currentallocated); for (idx=currentallocated; idxnextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_maxpairs.lcp) { if (TOP_ESA_BOTTOMUP_maxpairs.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_maxpairs(firstedge, TOP_ESA_BOTTOMUP_maxpairs.lcp, &TOP_ESA_BOTTOMUP_maxpairs.info, previoussuffix, bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_maxpairs.lcp) { lastinterval = POP_ESA_BOTTOMUP_maxpairs; lastinterval->rb = idx; /* no call to processlcpinterval_maxpairs */ if (lcpvalue <= TOP_ESA_BOTTOMUP_maxpairs.lcp) { if (TOP_ESA_BOTTOMUP_maxpairs.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processbranchingedge_maxpairs(firstedge, TOP_ESA_BOTTOMUP_maxpairs.lcp, &TOP_ESA_BOTTOMUP_maxpairs.info, lastinterval->lcp, lastinterval->rb - lastinterval->lb + 1, &lastinterval->info, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_maxpairs.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; unsigned long lastintervallcp = lastinterval->lcp, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP_maxpairs(lcpvalue,lastintervallb); if (processbranchingedge_maxpairs(true, TOP_ESA_BOTTOMUP_maxpairs.lcp, &TOP_ESA_BOTTOMUP_maxpairs.info, lastintervallcp, lastintervalrb - lastintervallb + 1, NULL, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_maxpairs(lcpvalue,idx); if (processleafedge_maxpairs(true, TOP_ESA_BOTTOMUP_maxpairs.lcp, &TOP_ESA_BOTTOMUP_maxpairs.info, previoussuffix, bustate, err) != 0) { haserr = true; } } } } gt_assert(stack->nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP_maxpairs.lcp > 0) { /* no assignment to lastsuftabvalue */ if (processleafedge_maxpairs(false, TOP_ESA_BOTTOMUP_maxpairs.lcp, &TOP_ESA_BOTTOMUP_maxpairs.info, lastsuftabvalue, bustate, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP_maxpairs.rb = idx; /* no call to processlcpinterval_maxpairs */ } } gt_GtArrayGtBUItvinfo_delete_maxpairs(stack,bustate); return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-bottomup-rdjce.inc000066400000000000000000000200771211610345200221340ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* THIS FILE IS GENERATED by scripts/gen-esa-bottomup.rb --key rdjce --reader --absolute --no_process_lcpinterval. DO NOT EDIT. */ #include #include "core/ma.h" #include "esa-seqread.h" /* no include for seqnumrelpos.h */ static void initBUinfo_rdjce(GtBUinfo_rdjce *,GtBUstate_rdjce *); static void freeBUinfo_rdjce(GtBUinfo_rdjce *,GtBUstate_rdjce *); static int processleafedge_rdjce(bool, unsigned long, GtBUinfo_rdjce *, unsigned long, /* position */ GtBUstate_rdjce *, GtError *err); static int processbranchingedge_rdjce(bool firstsucc, unsigned long, GtBUinfo_rdjce *, unsigned long, unsigned long, GtBUinfo_rdjce *, GtBUstate_rdjce *, GtError *); /* no declaration of processlcpinterval_rdjce */ #define TOP_ESA_BOTTOMUP_rdjce\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo-1] #define POP_ESA_BOTTOMUP_rdjce\ (stack->spaceGtBUItvinfo + (--stack->nextfreeGtBUItvinfo)) #define PUSH_ESA_BOTTOMUP_rdjce(LCP,LB)\ if (stack->nextfreeGtBUItvinfo >= stack->allocatedGtBUItvinfo)\ {\ gt_assert(stack->nextfreeGtBUItvinfo ==\ stack->allocatedGtBUItvinfo);\ stack->spaceGtBUItvinfo\ = allocateBUstack_rdjce(stack->spaceGtBUItvinfo,\ stack->allocatedGtBUItvinfo,\ stack->allocatedGtBUItvinfo+incrementstacksize,\ bustate);\ stack->allocatedGtBUItvinfo += incrementstacksize;\ }\ gt_assert(stack->spaceGtBUItvinfo != NULL);\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lcp = LCP;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lb = LB;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo++].rb = ULONG_MAX typedef struct { unsigned long lcp, lb, rb; GtBUinfo_rdjce info; } GtBUItvinfo_rdjce; typedef struct { GtBUItvinfo_rdjce *spaceGtBUItvinfo; unsigned long allocatedGtBUItvinfo, nextfreeGtBUItvinfo; } GtArrayGtBUItvinfo_rdjce; GtArrayGtBUItvinfo_rdjce *gt_GtArrayGtBUItvinfo_new_rdjce(void) { GtArrayGtBUItvinfo_rdjce *stack = gt_malloc(sizeof (*stack)); stack->spaceGtBUItvinfo = NULL; stack->allocatedGtBUItvinfo = stack->nextfreeGtBUItvinfo = 0; return stack; } void gt_GtArrayGtBUItvinfo_delete_rdjce(GtArrayGtBUItvinfo_rdjce *stack, GtBUstate_rdjce *state) { unsigned long idx; for (idx=0; idxallocatedGtBUItvinfo; idx++) { freeBUinfo_rdjce(&stack->spaceGtBUItvinfo[idx].info,state); } gt_free(stack->spaceGtBUItvinfo); gt_free(stack); } static GtBUItvinfo_rdjce *allocateBUstack_rdjce(GtBUItvinfo_rdjce *ptr, unsigned long currentallocated, unsigned long allocated, GtBUstate_rdjce *state) { unsigned long idx; GtBUItvinfo_rdjce *itvinfo; itvinfo = gt_realloc(ptr,sizeof (*itvinfo) * allocated); gt_assert(allocated > currentallocated); for (idx=currentallocated; idxnextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_rdjce.lcp) { if (TOP_ESA_BOTTOMUP_rdjce.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_rdjce(firstedge, TOP_ESA_BOTTOMUP_rdjce.lcp, &TOP_ESA_BOTTOMUP_rdjce.info, previoussuffix, bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_rdjce.lcp) { lastinterval = POP_ESA_BOTTOMUP_rdjce; lastinterval->rb = idx; /* no call to processlcpinterval_rdjce */ if (lcpvalue <= TOP_ESA_BOTTOMUP_rdjce.lcp) { if (TOP_ESA_BOTTOMUP_rdjce.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processbranchingedge_rdjce(firstedge, TOP_ESA_BOTTOMUP_rdjce.lcp, &TOP_ESA_BOTTOMUP_rdjce.info, lastinterval->lcp, lastinterval->rb - lastinterval->lb + 1, &lastinterval->info, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_rdjce.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; unsigned long lastintervallcp = lastinterval->lcp, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP_rdjce(lcpvalue,lastintervallb); if (processbranchingedge_rdjce(true, TOP_ESA_BOTTOMUP_rdjce.lcp, &TOP_ESA_BOTTOMUP_rdjce.info, lastintervallcp, lastintervalrb - lastintervallb + 1, NULL, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_rdjce(lcpvalue,idx); if (processleafedge_rdjce(true, TOP_ESA_BOTTOMUP_rdjce.lcp, &TOP_ESA_BOTTOMUP_rdjce.info, previoussuffix, bustate, err) != 0) { haserr = true; } } } } gt_assert(stack->nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP_rdjce.lcp > 0) { /* no assignment to lastsuftabvalue */ if (processleafedge_rdjce(false, TOP_ESA_BOTTOMUP_rdjce.lcp, &TOP_ESA_BOTTOMUP_rdjce.info, lastsuftabvalue, bustate, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP_rdjce.rb = idx; /* no call to processlcpinterval_rdjce */ } } gt_GtArrayGtBUItvinfo_delete_rdjce(stack,bustate); return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-bottomup-rdjcv.inc000066400000000000000000000200771211610345200221550ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* THIS FILE IS GENERATED by scripts/gen-esa-bottomup.rb --key rdjcv --reader --absolute --no_process_lcpinterval. DO NOT EDIT. */ #include #include "core/ma.h" #include "esa-seqread.h" /* no include for seqnumrelpos.h */ static void initBUinfo_rdjcv(GtBUinfo_rdjcv *,GtBUstate_rdjcv *); static void freeBUinfo_rdjcv(GtBUinfo_rdjcv *,GtBUstate_rdjcv *); static int processleafedge_rdjcv(bool, unsigned long, GtBUinfo_rdjcv *, unsigned long, /* position */ GtBUstate_rdjcv *, GtError *err); static int processbranchingedge_rdjcv(bool firstsucc, unsigned long, GtBUinfo_rdjcv *, unsigned long, unsigned long, GtBUinfo_rdjcv *, GtBUstate_rdjcv *, GtError *); /* no declaration of processlcpinterval_rdjcv */ #define TOP_ESA_BOTTOMUP_rdjcv\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo-1] #define POP_ESA_BOTTOMUP_rdjcv\ (stack->spaceGtBUItvinfo + (--stack->nextfreeGtBUItvinfo)) #define PUSH_ESA_BOTTOMUP_rdjcv(LCP,LB)\ if (stack->nextfreeGtBUItvinfo >= stack->allocatedGtBUItvinfo)\ {\ gt_assert(stack->nextfreeGtBUItvinfo ==\ stack->allocatedGtBUItvinfo);\ stack->spaceGtBUItvinfo\ = allocateBUstack_rdjcv(stack->spaceGtBUItvinfo,\ stack->allocatedGtBUItvinfo,\ stack->allocatedGtBUItvinfo+incrementstacksize,\ bustate);\ stack->allocatedGtBUItvinfo += incrementstacksize;\ }\ gt_assert(stack->spaceGtBUItvinfo != NULL);\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lcp = LCP;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lb = LB;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo++].rb = ULONG_MAX typedef struct { unsigned long lcp, lb, rb; GtBUinfo_rdjcv info; } GtBUItvinfo_rdjcv; typedef struct { GtBUItvinfo_rdjcv *spaceGtBUItvinfo; unsigned long allocatedGtBUItvinfo, nextfreeGtBUItvinfo; } GtArrayGtBUItvinfo_rdjcv; GtArrayGtBUItvinfo_rdjcv *gt_GtArrayGtBUItvinfo_new_rdjcv(void) { GtArrayGtBUItvinfo_rdjcv *stack = gt_malloc(sizeof (*stack)); stack->spaceGtBUItvinfo = NULL; stack->allocatedGtBUItvinfo = stack->nextfreeGtBUItvinfo = 0; return stack; } void gt_GtArrayGtBUItvinfo_delete_rdjcv(GtArrayGtBUItvinfo_rdjcv *stack, GtBUstate_rdjcv *state) { unsigned long idx; for (idx=0; idxallocatedGtBUItvinfo; idx++) { freeBUinfo_rdjcv(&stack->spaceGtBUItvinfo[idx].info,state); } gt_free(stack->spaceGtBUItvinfo); gt_free(stack); } static GtBUItvinfo_rdjcv *allocateBUstack_rdjcv(GtBUItvinfo_rdjcv *ptr, unsigned long currentallocated, unsigned long allocated, GtBUstate_rdjcv *state) { unsigned long idx; GtBUItvinfo_rdjcv *itvinfo; itvinfo = gt_realloc(ptr,sizeof (*itvinfo) * allocated); gt_assert(allocated > currentallocated); for (idx=currentallocated; idxnextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_rdjcv.lcp) { if (TOP_ESA_BOTTOMUP_rdjcv.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_rdjcv(firstedge, TOP_ESA_BOTTOMUP_rdjcv.lcp, &TOP_ESA_BOTTOMUP_rdjcv.info, previoussuffix, bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_rdjcv.lcp) { lastinterval = POP_ESA_BOTTOMUP_rdjcv; lastinterval->rb = idx; /* no call to processlcpinterval_rdjcv */ if (lcpvalue <= TOP_ESA_BOTTOMUP_rdjcv.lcp) { if (TOP_ESA_BOTTOMUP_rdjcv.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processbranchingedge_rdjcv(firstedge, TOP_ESA_BOTTOMUP_rdjcv.lcp, &TOP_ESA_BOTTOMUP_rdjcv.info, lastinterval->lcp, lastinterval->rb - lastinterval->lb + 1, &lastinterval->info, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_rdjcv.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; unsigned long lastintervallcp = lastinterval->lcp, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP_rdjcv(lcpvalue,lastintervallb); if (processbranchingedge_rdjcv(true, TOP_ESA_BOTTOMUP_rdjcv.lcp, &TOP_ESA_BOTTOMUP_rdjcv.info, lastintervallcp, lastintervalrb - lastintervallb + 1, NULL, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_rdjcv(lcpvalue,idx); if (processleafedge_rdjcv(true, TOP_ESA_BOTTOMUP_rdjcv.lcp, &TOP_ESA_BOTTOMUP_rdjcv.info, previoussuffix, bustate, err) != 0) { haserr = true; } } } } gt_assert(stack->nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP_rdjcv.lcp > 0) { /* no assignment to lastsuftabvalue */ if (processleafedge_rdjcv(false, TOP_ESA_BOTTOMUP_rdjcv.lcp, &TOP_ESA_BOTTOMUP_rdjcv.info, lastsuftabvalue, bustate, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP_rdjcv.rb = idx; /* no call to processlcpinterval_rdjcv */ } } gt_GtArrayGtBUItvinfo_delete_rdjcv(stack,bustate); return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-bottomup-shulen-RAM.inc000066400000000000000000000213251211610345200227550ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* THIS FILE IS GENERATED by scripts/gen-esa-bottomup.rb --key shulen --gtlcpvaluetypeset --absolute --no_process_lastvalue --no_process_lcpinterval --withlastfrompreviousbucket --additionaluint32bucket --no_declarations. DO NOT EDIT. */ #include #include "core/ma.h" #include "esa-seqread.h" /* no include for seqnumrelpos.h */ static int gt_esa_bottomup_RAM_previousfromlast_shulen( unsigned long previoussuffix, unsigned long lcpvalue, GtArrayGtBUItvinfo_shulen *stack, GtBUstate_shulen *bustate, /* no parameter snrp */ GtError *err) { const unsigned long incrementstacksize = 32UL; unsigned long idx = 0; GtBUItvinfo_shulen *lastinterval = NULL; bool haserr = false, firstedge, firstedgefromroot = bustate->firstedgefromroot; gt_assert(stack->nextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_shulen.lcp) { if (TOP_ESA_BOTTOMUP_shulen.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_shulen(firstedge, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, previoussuffix, bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_shulen.lcp) { lastinterval = POP_ESA_BOTTOMUP_shulen; lastinterval->rb = idx + bustate->idxoffset; /* no call to processlcpinterval_shulen */ if (lcpvalue <= TOP_ESA_BOTTOMUP_shulen.lcp) { if (TOP_ESA_BOTTOMUP_shulen.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processbranchingedge_shulen(firstedge, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, lastinterval->lcp, lastinterval->rb - lastinterval->lb + 1, &lastinterval->info, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_shulen.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; unsigned long lastintervallcp = lastinterval->lcp, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP_shulen(lcpvalue,lastintervallb); if (processbranchingedge_shulen(true, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, lastintervallcp, lastintervalrb - lastintervallb + 1, NULL, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_shulen(lcpvalue,idx + bustate->idxoffset); if (processleafedge_shulen(true, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, previoussuffix, bustate, err) != 0) { haserr = true; } } } if (!haserr) { bustate->firstedgefromroot = firstedgefromroot; } return haserr ? -1 : 0; } static int gt_esa_bottomup_RAM_shulen(const unsigned long *bucketofsuffixes, const uint32_t *bucketofsuffixes_uint32, const GtLcpvaluetype *lcptab_bucket, unsigned long numberofsuffixes, GtArrayGtBUItvinfo_shulen *stack, GtBUstate_shulen *bustate, /* no parameter snrp */ GtError *err) { const unsigned long incrementstacksize = 32UL; unsigned long lcpvalue, previoussuffix, idx; GtBUItvinfo_shulen *lastinterval = NULL; bool haserr = false, firstedge, firstedgefromroot; if (bustate->previousbucketlastsuffix == ULONG_MAX) { PUSH_ESA_BOTTOMUP_shulen(0,0); firstedgefromroot = true; } else { firstedgefromroot = bustate->firstedgefromroot; } gt_assert (numberofsuffixes > 0); for (idx = 0; !haserr && idx < numberofsuffixes-1; idx++) { lcpvalue = (unsigned long) lcptab_bucket[idx+1]; previoussuffix = bucketofsuffixes != NULL ? bucketofsuffixes[idx] : (unsigned long) bucketofsuffixes_uint32[idx]; gt_assert(stack->nextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_shulen.lcp) { if (TOP_ESA_BOTTOMUP_shulen.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_shulen(firstedge, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, previoussuffix, bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_shulen.lcp) { lastinterval = POP_ESA_BOTTOMUP_shulen; lastinterval->rb = idx + bustate->idxoffset; /* no call to processlcpinterval_shulen */ if (lcpvalue <= TOP_ESA_BOTTOMUP_shulen.lcp) { if (TOP_ESA_BOTTOMUP_shulen.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processbranchingedge_shulen(firstedge, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, lastinterval->lcp, lastinterval->rb - lastinterval->lb + 1, &lastinterval->info, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_shulen.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; unsigned long lastintervallcp = lastinterval->lcp, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP_shulen(lcpvalue,lastintervallb); if (processbranchingedge_shulen(true, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, lastintervallcp, lastintervalrb - lastintervallb + 1, NULL, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_shulen(lcpvalue,idx + bustate->idxoffset); if (processleafedge_shulen(true, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, previoussuffix, bustate, err) != 0) { haserr = true; } } } } if (!haserr) { bustate->previousbucketlastsuffix = bucketofsuffixes != NULL ? bucketofsuffixes[numberofsuffixes-1] : (unsigned long) bucketofsuffixes_uint32[numberofsuffixes-1]; bustate->firstedgefromroot = firstedgefromroot; } return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-bottomup-shulen.inc000066400000000000000000000202061211610345200223350ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* THIS FILE IS GENERATED by scripts/gen-esa-bottomup.rb --key shulen --reader --absolute --no_process_lcpinterval. DO NOT EDIT. */ #include #include "core/ma.h" #include "esa-seqread.h" /* no include for seqnumrelpos.h */ static void initBUinfo_shulen(GtBUinfo_shulen *,GtBUstate_shulen *); static void freeBUinfo_shulen(GtBUinfo_shulen *,GtBUstate_shulen *); static int processleafedge_shulen(bool, unsigned long, GtBUinfo_shulen *, unsigned long, /* position */ GtBUstate_shulen *, GtError *err); static int processbranchingedge_shulen(bool firstsucc, unsigned long, GtBUinfo_shulen *, unsigned long, unsigned long, GtBUinfo_shulen *, GtBUstate_shulen *, GtError *); /* no declaration of processlcpinterval_shulen */ #define TOP_ESA_BOTTOMUP_shulen\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo-1] #define POP_ESA_BOTTOMUP_shulen\ (stack->spaceGtBUItvinfo + (--stack->nextfreeGtBUItvinfo)) #define PUSH_ESA_BOTTOMUP_shulen(LCP,LB)\ if (stack->nextfreeGtBUItvinfo >= stack->allocatedGtBUItvinfo)\ {\ gt_assert(stack->nextfreeGtBUItvinfo ==\ stack->allocatedGtBUItvinfo);\ stack->spaceGtBUItvinfo\ = allocateBUstack_shulen(stack->spaceGtBUItvinfo,\ stack->allocatedGtBUItvinfo,\ stack->allocatedGtBUItvinfo+incrementstacksize,\ bustate);\ stack->allocatedGtBUItvinfo += incrementstacksize;\ }\ gt_assert(stack->spaceGtBUItvinfo != NULL);\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lcp = LCP;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lb = LB;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo++].rb = ULONG_MAX typedef struct { unsigned long lcp, lb, rb; GtBUinfo_shulen info; } GtBUItvinfo_shulen; typedef struct { GtBUItvinfo_shulen *spaceGtBUItvinfo; unsigned long allocatedGtBUItvinfo, nextfreeGtBUItvinfo; } GtArrayGtBUItvinfo_shulen; GtArrayGtBUItvinfo_shulen *gt_GtArrayGtBUItvinfo_new_shulen(void) { GtArrayGtBUItvinfo_shulen *stack = gt_malloc(sizeof (*stack)); stack->spaceGtBUItvinfo = NULL; stack->allocatedGtBUItvinfo = stack->nextfreeGtBUItvinfo = 0; return stack; } void gt_GtArrayGtBUItvinfo_delete_shulen(GtArrayGtBUItvinfo_shulen *stack, GtBUstate_shulen *state) { unsigned long idx; for (idx=0; idxallocatedGtBUItvinfo; idx++) { freeBUinfo_shulen(&stack->spaceGtBUItvinfo[idx].info,state); } gt_free(stack->spaceGtBUItvinfo); gt_free(stack); } static GtBUItvinfo_shulen *allocateBUstack_shulen(GtBUItvinfo_shulen *ptr, unsigned long currentallocated, unsigned long allocated, GtBUstate_shulen *state) { unsigned long idx; GtBUItvinfo_shulen *itvinfo; itvinfo = gt_realloc(ptr,sizeof (*itvinfo) * allocated); gt_assert(allocated > currentallocated); for (idx=currentallocated; idxnextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_shulen.lcp) { if (TOP_ESA_BOTTOMUP_shulen.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_shulen(firstedge, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, previoussuffix, bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_shulen.lcp) { lastinterval = POP_ESA_BOTTOMUP_shulen; lastinterval->rb = idx; /* no call to processlcpinterval_shulen */ if (lcpvalue <= TOP_ESA_BOTTOMUP_shulen.lcp) { if (TOP_ESA_BOTTOMUP_shulen.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processbranchingedge_shulen(firstedge, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, lastinterval->lcp, lastinterval->rb - lastinterval->lb + 1, &lastinterval->info, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_shulen.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; unsigned long lastintervallcp = lastinterval->lcp, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP_shulen(lcpvalue,lastintervallb); if (processbranchingedge_shulen(true, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, lastintervallcp, lastintervalrb - lastintervallb + 1, NULL, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_shulen(lcpvalue,idx); if (processleafedge_shulen(true, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, previoussuffix, bustate, err) != 0) { haserr = true; } } } } gt_assert(stack->nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP_shulen.lcp > 0) { /* no assignment to lastsuftabvalue */ if (processleafedge_shulen(false, TOP_ESA_BOTTOMUP_shulen.lcp, &TOP_ESA_BOTTOMUP_shulen.info, lastsuftabvalue, bustate, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP_shulen.rb = idx; /* no call to processlcpinterval_shulen */ } } gt_GtArrayGtBUItvinfo_delete_shulen(stack,bustate); return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-bottomup-spmeq.inc000066400000000000000000000206641211610345200221740ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* THIS FILE IS GENERATED by scripts/gen-esa-bottomup.rb --key spmeq --no_process_lcpinterval. DO NOT EDIT. */ #include #include "core/ma.h" #include "esa-seqread.h" #include "seqnumrelpos.h" static void initBUinfo_spmeq(GtBUinfo_spmeq *,GtBUstate_spmeq *); static void freeBUinfo_spmeq(GtBUinfo_spmeq *,GtBUstate_spmeq *); static int processleafedge_spmeq(bool, unsigned long, GtBUinfo_spmeq *, unsigned long, /* seqnum */ unsigned long, /* relpos */ GtBUstate_spmeq *, GtError *err); static int processbranchingedge_spmeq(bool firstsucc, unsigned long, GtBUinfo_spmeq *, unsigned long, unsigned long, GtBUinfo_spmeq *, GtBUstate_spmeq *, GtError *); /* no declaration of processlcpinterval_spmeq */ #define TOP_ESA_BOTTOMUP_spmeq\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo-1] #define POP_ESA_BOTTOMUP_spmeq\ (stack->spaceGtBUItvinfo + (--stack->nextfreeGtBUItvinfo)) #define PUSH_ESA_BOTTOMUP_spmeq(LCP,LB)\ if (stack->nextfreeGtBUItvinfo >= stack->allocatedGtBUItvinfo)\ {\ gt_assert(stack->nextfreeGtBUItvinfo ==\ stack->allocatedGtBUItvinfo);\ stack->spaceGtBUItvinfo\ = allocateBUstack_spmeq(stack->spaceGtBUItvinfo,\ stack->allocatedGtBUItvinfo,\ stack->allocatedGtBUItvinfo+incrementstacksize,\ bustate);\ stack->allocatedGtBUItvinfo += incrementstacksize;\ }\ gt_assert(stack->spaceGtBUItvinfo != NULL);\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lcp = LCP;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lb = LB;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo++].rb = ULONG_MAX typedef struct { unsigned long lcp, lb, rb; GtBUinfo_spmeq info; } GtBUItvinfo_spmeq; typedef struct { GtBUItvinfo_spmeq *spaceGtBUItvinfo; unsigned long allocatedGtBUItvinfo, nextfreeGtBUItvinfo; } GtArrayGtBUItvinfo_spmeq; GtArrayGtBUItvinfo_spmeq *gt_GtArrayGtBUItvinfo_new_spmeq(void) { GtArrayGtBUItvinfo_spmeq *stack = gt_malloc(sizeof (*stack)); stack->spaceGtBUItvinfo = NULL; stack->allocatedGtBUItvinfo = stack->nextfreeGtBUItvinfo = 0; return stack; } void gt_GtArrayGtBUItvinfo_delete_spmeq(GtArrayGtBUItvinfo_spmeq *stack, GtBUstate_spmeq *state) { unsigned long idx; for (idx=0; idxallocatedGtBUItvinfo; idx++) { freeBUinfo_spmeq(&stack->spaceGtBUItvinfo[idx].info,state); } gt_free(stack->spaceGtBUItvinfo); gt_free(stack); } static GtBUItvinfo_spmeq *allocateBUstack_spmeq(GtBUItvinfo_spmeq *ptr, unsigned long currentallocated, unsigned long allocated, GtBUstate_spmeq *state) { unsigned long idx; GtBUItvinfo_spmeq *itvinfo; itvinfo = gt_realloc(ptr,sizeof (*itvinfo) * allocated); gt_assert(allocated > currentallocated); for (idx=currentallocated; idx 0); for (idx = 0; !haserr && idx < numberofsuffixes-1; idx++) { lcpvalue = (unsigned long) lcptab_bucket[idx+1]; previoussuffix = bucketofsuffixes[idx]; gt_assert(stack->nextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_spmeq.lcp) { if (TOP_ESA_BOTTOMUP_spmeq.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_spmeq(firstedge, TOP_ESA_BOTTOMUP_spmeq.lcp, &TOP_ESA_BOTTOMUP_spmeq.info, gt_seqnumrelpos_decode_seqnum(snrp,previoussuffix), gt_seqnumrelpos_decode_relpos(snrp,previoussuffix), bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_spmeq.lcp) { lastinterval = POP_ESA_BOTTOMUP_spmeq; lastinterval->rb = idx; /* no call to processlcpinterval_spmeq */ if (lcpvalue <= TOP_ESA_BOTTOMUP_spmeq.lcp) { if (TOP_ESA_BOTTOMUP_spmeq.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processbranchingedge_spmeq(firstedge, TOP_ESA_BOTTOMUP_spmeq.lcp, &TOP_ESA_BOTTOMUP_spmeq.info, lastinterval->lcp, lastinterval->rb - lastinterval->lb + 1, &lastinterval->info, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_spmeq.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; unsigned long lastintervallcp = lastinterval->lcp, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP_spmeq(lcpvalue,lastintervallb); if (processbranchingedge_spmeq(true, TOP_ESA_BOTTOMUP_spmeq.lcp, &TOP_ESA_BOTTOMUP_spmeq.info, lastintervallcp, lastintervalrb - lastintervallb + 1, NULL, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_spmeq(lcpvalue,idx); if (processleafedge_spmeq(true, TOP_ESA_BOTTOMUP_spmeq.lcp, &TOP_ESA_BOTTOMUP_spmeq.info, gt_seqnumrelpos_decode_seqnum(snrp,previoussuffix), gt_seqnumrelpos_decode_relpos(snrp,previoussuffix), bustate, err) != 0) { haserr = true; } } } } gt_assert(stack->nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP_spmeq.lcp > 0) { unsigned long lastsuftabvalue = bucketofsuffixes[numberofsuffixes-1]; if (processleafedge_spmeq(false, TOP_ESA_BOTTOMUP_spmeq.lcp, &TOP_ESA_BOTTOMUP_spmeq.info, gt_seqnumrelpos_decode_seqnum(snrp,lastsuftabvalue), gt_seqnumrelpos_decode_relpos(snrp,lastsuftabvalue), bustate, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP_spmeq.rb = idx; /* no call to processlcpinterval_spmeq */ } } stack->nextfreeGtBUItvinfo = 0; /* empty the stack */ return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-bottomup-spmsk.inc000066400000000000000000000176251211610345200222070ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* THIS FILE IS GENERATED by scripts/gen-esa-bottomup.rb --key spmsk --no_process_branchingedge. DO NOT EDIT. */ #include #include "core/ma.h" #include "esa-seqread.h" #include "seqnumrelpos.h" static void initBUinfo_spmsk(GtBUinfo_spmsk *,GtBUstate_spmsk *); static void freeBUinfo_spmsk(GtBUinfo_spmsk *,GtBUstate_spmsk *); static int processleafedge_spmsk(bool, unsigned long, GtBUinfo_spmsk *, unsigned long, /* seqnum */ unsigned long, /* relpos */ GtBUstate_spmsk *, GtError *err); /* no declaration of processbranchingedge_spmsk */ static int processlcpinterval_spmsk(unsigned long, GtBUinfo_spmsk *, GtBUstate_spmsk *, GtError *err); #define TOP_ESA_BOTTOMUP_spmsk\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo-1] #define POP_ESA_BOTTOMUP_spmsk\ (stack->spaceGtBUItvinfo + (--stack->nextfreeGtBUItvinfo)) #define PUSH_ESA_BOTTOMUP_spmsk(LCP,LB)\ if (stack->nextfreeGtBUItvinfo >= stack->allocatedGtBUItvinfo)\ {\ gt_assert(stack->nextfreeGtBUItvinfo ==\ stack->allocatedGtBUItvinfo);\ stack->spaceGtBUItvinfo\ = allocateBUstack_spmsk(stack->spaceGtBUItvinfo,\ stack->allocatedGtBUItvinfo,\ stack->allocatedGtBUItvinfo+incrementstacksize,\ bustate);\ stack->allocatedGtBUItvinfo += incrementstacksize;\ }\ gt_assert(stack->spaceGtBUItvinfo != NULL);\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lcp = LCP;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lb = LB;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo++].rb = ULONG_MAX typedef struct { unsigned long lcp, lb, rb; GtBUinfo_spmsk info; } GtBUItvinfo_spmsk; typedef struct { GtBUItvinfo_spmsk *spaceGtBUItvinfo; unsigned long allocatedGtBUItvinfo, nextfreeGtBUItvinfo; } GtArrayGtBUItvinfo_spmsk; GtArrayGtBUItvinfo_spmsk *gt_GtArrayGtBUItvinfo_new_spmsk(void) { GtArrayGtBUItvinfo_spmsk *stack = gt_malloc(sizeof (*stack)); stack->spaceGtBUItvinfo = NULL; stack->allocatedGtBUItvinfo = stack->nextfreeGtBUItvinfo = 0; return stack; } void gt_GtArrayGtBUItvinfo_delete_spmsk(GtArrayGtBUItvinfo_spmsk *stack, GtBUstate_spmsk *state) { unsigned long idx; for (idx=0; idxallocatedGtBUItvinfo; idx++) { freeBUinfo_spmsk(&stack->spaceGtBUItvinfo[idx].info,state); } gt_free(stack->spaceGtBUItvinfo); gt_free(stack); } static GtBUItvinfo_spmsk *allocateBUstack_spmsk(GtBUItvinfo_spmsk *ptr, unsigned long currentallocated, unsigned long allocated, GtBUstate_spmsk *state) { unsigned long idx; GtBUItvinfo_spmsk *itvinfo; itvinfo = gt_realloc(ptr,sizeof (*itvinfo) * allocated); gt_assert(allocated > currentallocated); for (idx=currentallocated; idx 0); for (idx = 0; !haserr && idx < numberofsuffixes-1; idx++) { lcpvalue = (unsigned long) lcptab_bucket[idx+1]; previoussuffix = bucketofsuffixes[idx]; gt_assert(stack->nextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_spmsk.lcp) { if (TOP_ESA_BOTTOMUP_spmsk.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_spmsk(firstedge, TOP_ESA_BOTTOMUP_spmsk.lcp, &TOP_ESA_BOTTOMUP_spmsk.info, gt_seqnumrelpos_decode_seqnum(snrp,previoussuffix), gt_seqnumrelpos_decode_relpos(snrp,previoussuffix), bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_spmsk.lcp) { lastinterval = POP_ESA_BOTTOMUP_spmsk; lastinterval->rb = idx; if (processlcpinterval_spmsk(lastinterval->lcp, &lastinterval->info, bustate, err) != 0) { haserr = true; } if (lcpvalue <= TOP_ESA_BOTTOMUP_spmsk.lcp) { if (TOP_ESA_BOTTOMUP_spmsk.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } /* no call to processbranchingedge_spmsk */ lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_spmsk.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; PUSH_ESA_BOTTOMUP_spmsk(lcpvalue,lastintervallb); lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_spmsk(lcpvalue,idx); if (processleafedge_spmsk(true, TOP_ESA_BOTTOMUP_spmsk.lcp, &TOP_ESA_BOTTOMUP_spmsk.info, gt_seqnumrelpos_decode_seqnum(snrp,previoussuffix), gt_seqnumrelpos_decode_relpos(snrp,previoussuffix), bustate, err) != 0) { haserr = true; } } } } gt_assert(stack->nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP_spmsk.lcp > 0) { unsigned long lastsuftabvalue = bucketofsuffixes[numberofsuffixes-1]; if (processleafedge_spmsk(false, TOP_ESA_BOTTOMUP_spmsk.lcp, &TOP_ESA_BOTTOMUP_spmsk.info, gt_seqnumrelpos_decode_seqnum(snrp,lastsuftabvalue), gt_seqnumrelpos_decode_relpos(snrp,lastsuftabvalue), bustate, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP_spmsk.rb = idx; if (processlcpinterval_spmsk(TOP_ESA_BOTTOMUP_spmsk.lcp, &TOP_ESA_BOTTOMUP_spmsk.info, bustate, err) != 0) { haserr = true; } } } stack->nextfreeGtBUItvinfo = 0; /* empty the stack */ return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-bottomup-spmvar.inc000066400000000000000000000216201211610345200223500ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* THIS FILE IS GENERATED by scripts/gen-esa-bottomup.rb --key spmvar. DO NOT EDIT. */ #include #include "core/ma.h" #include "esa-seqread.h" #include "seqnumrelpos.h" static void initBUinfo_spmvar(GtBUinfo_spmvar *,GtBUstate_spmvar *); static void freeBUinfo_spmvar(GtBUinfo_spmvar *,GtBUstate_spmvar *); static int processleafedge_spmvar(bool, unsigned long, GtBUinfo_spmvar *, unsigned long, /* seqnum */ unsigned long, /* relpos */ GtBUstate_spmvar *, GtError *err); static int processbranchingedge_spmvar(bool firstsucc, unsigned long, GtBUinfo_spmvar *, unsigned long, unsigned long, GtBUinfo_spmvar *, GtBUstate_spmvar *, GtError *); static int processlcpinterval_spmvar(unsigned long, GtBUinfo_spmvar *, GtBUstate_spmvar *, GtError *err); #define TOP_ESA_BOTTOMUP_spmvar\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo-1] #define POP_ESA_BOTTOMUP_spmvar\ (stack->spaceGtBUItvinfo + (--stack->nextfreeGtBUItvinfo)) #define PUSH_ESA_BOTTOMUP_spmvar(LCP,LB)\ if (stack->nextfreeGtBUItvinfo >= stack->allocatedGtBUItvinfo)\ {\ gt_assert(stack->nextfreeGtBUItvinfo ==\ stack->allocatedGtBUItvinfo);\ stack->spaceGtBUItvinfo\ = allocateBUstack_spmvar(stack->spaceGtBUItvinfo,\ stack->allocatedGtBUItvinfo,\ stack->allocatedGtBUItvinfo+incrementstacksize,\ bustate);\ stack->allocatedGtBUItvinfo += incrementstacksize;\ }\ gt_assert(stack->spaceGtBUItvinfo != NULL);\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lcp = LCP;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lb = LB;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo++].rb = ULONG_MAX typedef struct { unsigned long lcp, lb, rb; GtBUinfo_spmvar info; } GtBUItvinfo_spmvar; typedef struct { GtBUItvinfo_spmvar *spaceGtBUItvinfo; unsigned long allocatedGtBUItvinfo, nextfreeGtBUItvinfo; } GtArrayGtBUItvinfo_spmvar; GtArrayGtBUItvinfo_spmvar *gt_GtArrayGtBUItvinfo_new_spmvar(void) { GtArrayGtBUItvinfo_spmvar *stack = gt_malloc(sizeof (*stack)); stack->spaceGtBUItvinfo = NULL; stack->allocatedGtBUItvinfo = stack->nextfreeGtBUItvinfo = 0; return stack; } void gt_GtArrayGtBUItvinfo_delete_spmvar(GtArrayGtBUItvinfo_spmvar *stack, GtBUstate_spmvar *state) { unsigned long idx; for (idx=0; idxallocatedGtBUItvinfo; idx++) { freeBUinfo_spmvar(&stack->spaceGtBUItvinfo[idx].info,state); } gt_free(stack->spaceGtBUItvinfo); gt_free(stack); } static GtBUItvinfo_spmvar *allocateBUstack_spmvar(GtBUItvinfo_spmvar *ptr, unsigned long currentallocated, unsigned long allocated, GtBUstate_spmvar *state) { unsigned long idx; GtBUItvinfo_spmvar *itvinfo; itvinfo = gt_realloc(ptr,sizeof (*itvinfo) * allocated); gt_assert(allocated > currentallocated); for (idx=currentallocated; idx 0); for (idx = 0; !haserr && idx < numberofsuffixes-1; idx++) { lcpvalue = (unsigned long) lcptab_bucket[idx+1]; previoussuffix = bucketofsuffixes[idx]; gt_assert(stack->nextfreeGtBUItvinfo > 0); if (lcpvalue <= TOP_ESA_BOTTOMUP_spmvar.lcp) { if (TOP_ESA_BOTTOMUP_spmvar.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processleafedge_spmvar(firstedge, TOP_ESA_BOTTOMUP_spmvar.lcp, &TOP_ESA_BOTTOMUP_spmvar.info, gt_seqnumrelpos_decode_seqnum(snrp,previoussuffix), gt_seqnumrelpos_decode_relpos(snrp,previoussuffix), bustate, err) != 0) { haserr = true; } } gt_assert(lastinterval == NULL); while (!haserr && lcpvalue < TOP_ESA_BOTTOMUP_spmvar.lcp) { lastinterval = POP_ESA_BOTTOMUP_spmvar; lastinterval->rb = idx; if (processlcpinterval_spmvar(lastinterval->lcp, &lastinterval->info, bustate, err) != 0) { haserr = true; } if (lcpvalue <= TOP_ESA_BOTTOMUP_spmvar.lcp) { if (TOP_ESA_BOTTOMUP_spmvar.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (processbranchingedge_spmvar(firstedge, TOP_ESA_BOTTOMUP_spmvar.lcp, &TOP_ESA_BOTTOMUP_spmvar.info, lastinterval->lcp, lastinterval->rb - lastinterval->lb + 1, &lastinterval->info, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } } if (!haserr && lcpvalue > TOP_ESA_BOTTOMUP_spmvar.lcp) { if (lastinterval != NULL) { unsigned long lastintervallb = lastinterval->lb; unsigned long lastintervallcp = lastinterval->lcp, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP_spmvar(lcpvalue,lastintervallb); if (processbranchingedge_spmvar(true, TOP_ESA_BOTTOMUP_spmvar.lcp, &TOP_ESA_BOTTOMUP_spmvar.info, lastintervallcp, lastintervalrb - lastintervallb + 1, NULL, bustate, err) != 0) { haserr = true; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP_spmvar(lcpvalue,idx); if (processleafedge_spmvar(true, TOP_ESA_BOTTOMUP_spmvar.lcp, &TOP_ESA_BOTTOMUP_spmvar.info, gt_seqnumrelpos_decode_seqnum(snrp,previoussuffix), gt_seqnumrelpos_decode_relpos(snrp,previoussuffix), bustate, err) != 0) { haserr = true; } } } } gt_assert(stack->nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP_spmvar.lcp > 0) { unsigned long lastsuftabvalue = bucketofsuffixes[numberofsuffixes-1]; if (processleafedge_spmvar(false, TOP_ESA_BOTTOMUP_spmvar.lcp, &TOP_ESA_BOTTOMUP_spmvar.info, gt_seqnumrelpos_decode_seqnum(snrp,lastsuftabvalue), gt_seqnumrelpos_decode_relpos(snrp,lastsuftabvalue), bustate, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP_spmvar.rb = idx; if (processlcpinterval_spmvar(TOP_ESA_BOTTOMUP_spmvar.lcp, &TOP_ESA_BOTTOMUP_spmvar.info, bustate, err) != 0) { haserr = true; } } } stack->nextfreeGtBUItvinfo = 0; /* empty the stack */ return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-bottomup.c000066400000000000000000000353361211610345200205240ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "esa-bottomup.h" #include "esa-seqread.h" #include "esa_visitor.h" #define TOP_ESA_BOTTOMUP\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo-1] #define POP_ESA_BOTTOMUP\ (stack->spaceGtBUItvinfo + (--stack->nextfreeGtBUItvinfo)) #define PUSH_ESA_BOTTOMUP(LCP,LB)\ if (stack->nextfreeGtBUItvinfo >= stack->allocatedGtBUItvinfo)\ {\ gt_assert(stack->nextfreeGtBUItvinfo == stack->allocatedGtBUItvinfo);\ stack->spaceGtBUItvinfo\ = allocateBUstack(stack->spaceGtBUItvinfo,\ stack->allocatedGtBUItvinfo,\ stack->allocatedGtBUItvinfo+incrementstacksize,\ ev);\ stack->allocatedGtBUItvinfo += incrementstacksize;\ }\ gt_assert(stack->spaceGtBUItvinfo != NULL);\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lcp = LCP;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].lb = LB;\ stack->spaceGtBUItvinfo[stack->nextfreeGtBUItvinfo].rb = ULONG_MAX;\ stack->nextfreeGtBUItvinfo++ typedef struct { unsigned long lcp, lb, rb; GtESAVisitorInfo *info; } GtBUItvinfo; struct GtArrayGtBUItvinfo { GtBUItvinfo *spaceGtBUItvinfo; unsigned long allocatedGtBUItvinfo, nextfreeGtBUItvinfo; }; GtArrayGtBUItvinfo *gt_GtArrayGtBUItvinfo_new(void) { GtArrayGtBUItvinfo *stack = gt_malloc(sizeof (*stack)); stack->spaceGtBUItvinfo = NULL; stack->allocatedGtBUItvinfo = stack->nextfreeGtBUItvinfo = 0; return stack; } void gt_GtArrayGtBUItvinfo_delete(GtArrayGtBUItvinfo *stack, GtESAVisitor *ev) { unsigned long idx; for (idx=0; idxallocatedGtBUItvinfo; idx++) { gt_esa_visitor_info_delete(stack->spaceGtBUItvinfo[idx].info, ev); } gt_free(stack->spaceGtBUItvinfo); gt_free(stack); } #ifdef SKDEBUG static void showstack(const GtBUItvinfo *stackspace, unsigned long nextfreeItvinfo) { unsigned long idx; for (idx=0; idx currentallocated); for (idx=currentallocated; idx 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (gt_esa_visitor_visit_leaf_edge(ev, firstedge, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.info, previoussuffix, err) != 0) { haserr = true; break; } } gt_assert(lastinterval == NULL); while (lcpvalue < TOP_ESA_BOTTOMUP.lcp) { lastinterval = POP_ESA_BOTTOMUP; lastinterval->rb = idx; if (gt_esa_visitor_visit_lcp_interval(ev, lastinterval->lcp, lastinterval->lb, lastinterval->rb, lastinterval->info, err) != 0) { haserr = true; break; } if (lcpvalue <= TOP_ESA_BOTTOMUP.lcp) { if (TOP_ESA_BOTTOMUP.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (gt_esa_visitor_visit_branching_edge(ev, firstedge, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.info, lastinterval->lcp, lastinterval->lb, lastinterval->rb, lastinterval->info, err) != 0) { haserr = true; break; } lastinterval = NULL; } } if (haserr) { break; } if (lcpvalue > TOP_ESA_BOTTOMUP.lcp) { if (lastinterval != NULL) { unsigned long lastintervallcp = lastinterval->lcp, lastintervallb = lastinterval->lb, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP(lcpvalue,lastintervallb); if (gt_esa_visitor_visit_branching_edge(ev, true, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.info, lastintervallcp, lastintervallb, lastintervalrb, NULL, err) != 0) { haserr = true; break; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP(lcpvalue,idx); if (gt_esa_visitor_visit_leaf_edge(ev, true, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.info, previoussuffix, err) != 0) { haserr = true; break; } } } } gt_assert(stack->nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP.lcp > 0) { if (gt_esa_visitor_visit_leaf_edge(ev, false, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.info, lastsuftabvalue, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP.rb = idx; if (gt_esa_visitor_visit_lcp_interval(ev, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.rb, TOP_ESA_BOTTOMUP.info, err) != 0) { haserr = true; } } } gt_GtArrayGtBUItvinfo_delete(stack, ev); return haserr ? -1 : 0; } int gt_esa_bottomup_RAM(const unsigned long *suftab, const uint16_t *lcptab_bucket, unsigned long nonspecials, GtArrayGtBUItvinfo *stack, GtESAVisitor *ev, GtError *err) { const unsigned long incrementstacksize = 32UL; unsigned long lcpvalue, previoussuffix = 0, idx; GtBUItvinfo *lastinterval = NULL; bool haserr = false, firstedge, firstedgefromroot = true; gt_assert(nonspecials > 0); PUSH_ESA_BOTTOMUP(0,0); for (idx = 0; idx < nonspecials-1; idx++) { lcpvalue = (unsigned long) lcptab_bucket[idx+1]; previoussuffix = suftab[idx]; if (lcpvalue <= TOP_ESA_BOTTOMUP.lcp) { if (TOP_ESA_BOTTOMUP.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (gt_esa_visitor_visit_leaf_edge(ev, firstedge, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.info, previoussuffix, err) != 0) { haserr = true; break; } } gt_assert(lastinterval == NULL); while (lcpvalue < TOP_ESA_BOTTOMUP.lcp) { lastinterval = POP_ESA_BOTTOMUP; lastinterval->rb = idx; if (gt_esa_visitor_visit_lcp_interval(ev, lastinterval->lcp, lastinterval->lb, lastinterval->rb, lastinterval->info, err) != 0) { haserr = true; break; } if (lcpvalue <= TOP_ESA_BOTTOMUP.lcp) { if (TOP_ESA_BOTTOMUP.lcp > 0 || !firstedgefromroot) { firstedge = false; } else { firstedge = true; firstedgefromroot = false; } if (gt_esa_visitor_visit_branching_edge(ev, firstedge, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.info, lastinterval->lcp, lastinterval->lb, lastinterval->rb, lastinterval->info, err) != 0) { haserr = true; break; } lastinterval = NULL; } } if (haserr) { break; } if (lcpvalue > TOP_ESA_BOTTOMUP.lcp) { if (lastinterval != NULL) { unsigned long lastintervallcp = lastinterval->lcp, lastintervallb = lastinterval->lb, lastintervalrb = lastinterval->rb; PUSH_ESA_BOTTOMUP(lcpvalue,lastintervallb); if (gt_esa_visitor_visit_branching_edge(ev, true, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.info, lastintervallcp, lastintervallb, lastintervalrb, NULL, err) != 0) { haserr = true; break; } lastinterval = NULL; } else { PUSH_ESA_BOTTOMUP(lcpvalue,idx); if (gt_esa_visitor_visit_leaf_edge(ev, true, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.info, previoussuffix, err) != 0) { haserr = true; break; } } } } gt_assert(stack->nextfreeGtBUItvinfo > 0); if (!haserr && TOP_ESA_BOTTOMUP.lcp > 0) { unsigned long lastsuftabvalue = suftab[nonspecials-1]; if (gt_esa_visitor_visit_leaf_edge(ev, false, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.info, lastsuftabvalue, err) != 0) { haserr = true; } else { TOP_ESA_BOTTOMUP.rb = idx; if (gt_esa_visitor_visit_lcp_interval(ev, TOP_ESA_BOTTOMUP.lcp, TOP_ESA_BOTTOMUP.lb, TOP_ESA_BOTTOMUP.rb, TOP_ESA_BOTTOMUP.info, err) != 0) { haserr = true; } } } stack->nextfreeGtBUItvinfo = 0; /* empty the stack */ return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-bottomup.h000066400000000000000000000033031211610345200205160ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_BOTTOMUP_H #define ESA_BOTTOMUP_H #include "core/logger_api.h" #include "core/error_api.h" #include "esa-seqread.h" #include "esa_visitor.h" typedef struct GtBUinfo GtBUinfo; typedef struct GtBUstate GtBUstate; typedef struct GtArrayGtBUItvinfo GtArrayGtBUItvinfo; int gt_esa_bottomup(Sequentialsuffixarrayreader *ssar, GtESAVisitor *ev, GtError *err); GtArrayGtBUItvinfo *gt_GtArrayGtBUItvinfo_new(void); void gt_GtArrayGtBUItvinfo_delete(GtArrayGtBUItvinfo *stack, GtESAVisitor *ev); int gt_esa_bottomup_RAM(const unsigned long *suftab, const uint16_t *lcptab_bucket, unsigned long nonspecials, GtArrayGtBUItvinfo *stack, GtESAVisitor *ev, GtError *err); #endif genometools-1.5.1/src/match/esa-dfs.c000066400000000000000000000206061211610345200174210ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/types_api.h" #include "core/unused_api.h" #include "core/ma_api.h" #include "esa-seqread.h" #include "esa-dfs.h" #define ABOVETOP stackspace[nextfreeItvinfo] #define TOP stackspace[nextfreeItvinfo-1] #define BELOWTOP stackspace[nextfreeItvinfo-2] #define INCSTACKSIZE 32 #define PUSHDFS(D,B)\ if (nextfreeItvinfo >= allocatedItvinfo)\ {\ gt_assert(nextfreeItvinfo == allocatedItvinfo);\ stackspace = allocItvinfo(stackspace,\ allocatedItvinfo,\ allocatedItvinfo+INCSTACKSIZE,\ allocateDfsinfo,\ state);\ allocatedItvinfo += INCSTACKSIZE;\ }\ gt_assert(stackspace != NULL);\ stackspace[nextfreeItvinfo].depth = D;\ stackspace[nextfreeItvinfo].lastisleafedge = B;\ nextfreeItvinfo++ typedef struct { bool lastisleafedge; unsigned long depth; Dfsinfo *dfsinfo; } Itvinfo; static Itvinfo *allocItvinfo(Itvinfo *ptr, unsigned long currentallocated, unsigned long allocated, Dfsinfo *(*allocateDfsinfo)(Dfsstate *), Dfsstate *state) { unsigned long i; Itvinfo *itvinfo; itvinfo = gt_realloc(ptr,sizeof *ptr * allocated); if (allocateDfsinfo != NULL) { gt_assert(allocated > currentallocated); for (i=currentallocated; i= 2UL ? BELOWTOP.depth : 0, state,err) != 0) { haserr = true; break; } gt_assert(nextfreeItvinfo > 0); nextfreeItvinfo--; } if (haserr) { break; } if (currentlcp == TOP.depth) { if (firstrootedge && TOP.depth == 0) { firstedge = true; firstrootedge = false; } else { firstedge = false; } if (TOP.lastisleafedge) { if (processleafedge != NULL && processleafedge(firstedge,TOP.depth,TOP.dfsinfo, previoussuffix,state,err) != 0) { haserr = true; break; } } else { if (!firstedge) { gt_assert(nextfreeItvinfo < allocatedItvinfo); } if (processbranchedge != NULL && processbranchedge(firstedge, TOP.depth, TOP.dfsinfo, /*firstedge ? NULL : ABOVETOP.dfsinfo,*/ ABOVETOP.dfsinfo, state, err) != 0) { haserr = true; break; } TOP.lastisleafedge = true; } } else { PUSHDFS(currentlcp,true); if (BELOWTOP.lastisleafedge) { if (assignleftmostleaf != NULL) { assignleftmostleaf(TOP.dfsinfo,currentindex,state); } if (processleafedge != NULL && processleafedge(true, TOP.depth, TOP.dfsinfo, previoussuffix, state, err) != 0) { haserr = true; break; } BELOWTOP.lastisleafedge = false; } else { previouslcp = TOP.depth; if (processbranchedge != NULL && processbranchedge(true, previouslcp, TOP.dfsinfo, NULL, /* not used since firstsucc = true */ state, err) != 0) { haserr = true; break; } } } gt_assert(!haserr); } freeItvinfo(stackspace, allocatedItvinfo, freeDfsinfo, state); return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-dfs.h000066400000000000000000000050671211610345200174320ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_DFS_H #define ESA_DFS_H #include #include "core/error_api.h" #include "core/unused_api.h" #include "esa-seqread.h" typedef struct Dfsinfo Dfsinfo; typedef struct Dfsstate Dfsstate; int gt_depthfirstesa(Sequentialsuffixarrayreader *ssar, Dfsinfo *(*allocateDfsinfo)(Dfsstate *), void(*freeDfsinfo)(Dfsinfo *,Dfsstate *), int(*processleafedge)(bool,unsigned long,Dfsinfo *, unsigned long,Dfsstate *, GtError *), int(*processbranchedge)(bool, unsigned long, Dfsinfo *, Dfsinfo *, Dfsstate *, GtError *), int(*processcompletenode)(unsigned long, Dfsinfo *, unsigned long, Dfsstate *, GtError *), void(*assignleftmostleaf)(Dfsinfo *, unsigned long, Dfsstate *), void(*assignrightmostleaf)(Dfsinfo *, unsigned long, unsigned long, unsigned long, Dfsstate *), Dfsstate *state, GT_UNUSED GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/esa-fileend.h000066400000000000000000000036551211610345200202650ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_FILEEND_H #define ESA_FILEEND_H /* The following defines the suffix of an indexname to be used for an reverse complemented index. The length is also defined. */ #define RCMSUFFIX ".rcm" /* The following defines the suffix of an indexname to be used as a six frame index. The length is also defined. */ #define SIXFRAMESUFFIX ".6fr" /* The following defines the suffix of a file to store the table suftab. */ #define SUFTABSUFFIX ".suf" /* The following defines the suffix of a file to store the table lcptab. */ #define LCPTABSUFFIX ".lcp" /* The following defines the suffix of a file to store the large lcp table values. */ #define LARGELCPTABSUFFIX ".llv" /* The following defines the suffix of a file to store Burrows and Wheeler transform. */ #define BWTTABSUFFIX ".bwt" /* The following defines the suffix of a file to store bucket table. */ #define BCKTABSUFFIX ".bck" /* The following defines the suffix of the project file. */ /* The following defines the suffix of the project file. */ #define PROJECTFILESUFFIX ".prj" #endif genometools-1.5.1/src/match/esa-lcpintervals.c000066400000000000000000000241441211610345200213540ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/logger.h" #include "core/unused_api.h" #include "lcpinterval.h" #include "esa-seqread.h" #include "esa-lcpintervals.h" #include "esa-dfs.h" #include "esa-bottomup.h" #include "esa_lcpintervals_visitor.h" typedef struct /* global information */ { Lcpinterval lastcompletenode; int (*processlcpinterval)(void *,const Lcpinterval *); void *processinfo; } Elcpstate; static Dfsinfo *allocateDfsinfo_elcp(GT_UNUSED Dfsstate *astate) { return (Dfsinfo *) gt_malloc(sizeof (Lcpinterval)); } static void freeDfsinfo_elcp(Dfsinfo *adfsinfo,GT_UNUSED Dfsstate *state) { gt_free((Lcpinterval *) adfsinfo); } static void showbranchingedgeDFS(bool firstsucc,unsigned long fd, unsigned long flb, unsigned long sd,unsigned long slb) { printf("B %c %lu %lu %lu %lu\n",firstsucc ? '1' : '0',fd,flb,sd,slb); } static int processleafedge_elcp(bool firstsucc, unsigned long fatherdepth, Dfsinfo *afather, unsigned long leafnumber, GT_UNUSED Dfsstate *astate, GT_UNUSED GtError *err) { Lcpinterval *father = (Lcpinterval *) afather; printf("L %c %lu %lu %lu\n",firstsucc ? '1' : '0', fatherdepth,father->left,leafnumber); return 0; } static int processbranchedge_elcp(bool firstsucc, unsigned long fatherdepth, Dfsinfo *afather, Dfsinfo *ason, Dfsstate *astate, GT_UNUSED GtError *err) { Lcpinterval *father = (Lcpinterval *) afather; Lcpinterval *son = (Lcpinterval *) ason; Elcpstate *state = (Elcpstate *) astate; if (son != NULL) { showbranchingedgeDFS(firstsucc,fatherdepth,father->left,son->offset, son->left); } else { showbranchingedgeDFS(firstsucc,fatherdepth,father->left, state->lastcompletenode.offset, state->lastcompletenode.left); } return 0; } static int processcompletenode_elcp( unsigned long nodeptrdepth, Dfsinfo *anodeptr, GT_UNUSED unsigned long nodeptrminusonedepth, Dfsstate *astate, GT_UNUSED GtError *err) { Lcpinterval *nodeptr = (Lcpinterval *) anodeptr; Elcpstate *state = (Elcpstate *) astate; gt_assert(state != NULL); gt_assert(nodeptr != NULL); nodeptr->offset = state->lastcompletenode.offset = nodeptrdepth; state->lastcompletenode.left = nodeptr->left; state->lastcompletenode.right = nodeptr->right; if (state->processlcpinterval != NULL) { if (state->processlcpinterval(state->processinfo, &state->lastcompletenode) != 0) { return -1; } } return 0; } static void assignleftmostleaf_elcp(Dfsinfo *adfsinfo, unsigned long leftmostleaf, GT_UNUSED Dfsstate *dfsstate) { ((Lcpinterval *) adfsinfo)->left = leftmostleaf; } static void assignrightmostleaf_elcp(Dfsinfo *adfsinfo, unsigned long currentindex, GT_UNUSED unsigned long previoussuffix, GT_UNUSED unsigned long currentlcp, GT_UNUSED Dfsstate *dfsstate) { ((Lcpinterval *) adfsinfo)->right = currentindex; } static int gt_enumlcpvalues(bool outedges, Sequentialsuffixarrayreader *ssar, int (*processlcpinterval)(void *, const Lcpinterval *), void *processinfo, GtLogger *logger, GtError *err) { Elcpstate *state; bool haserr = false; state = gt_malloc(sizeof (*state)); if (outedges) { state->processlcpinterval = NULL; state->processinfo = NULL; } else { state->processlcpinterval = processlcpinterval; state->processinfo = processinfo; } if (gt_depthfirstesa(ssar, allocateDfsinfo_elcp, freeDfsinfo_elcp, outedges ? processleafedge_elcp : NULL, outedges ? processbranchedge_elcp : NULL, processcompletenode_elcp, assignleftmostleaf_elcp, assignrightmostleaf_elcp, (Dfsstate *) state, logger, err) != 0) { haserr = true; } if (!haserr && state->processlcpinterval != NULL) { state->lastcompletenode.offset = 0; state->lastcompletenode.left = 0; state->lastcompletenode.right = gt_Sequentialsuffixarrayreader_totallength(ssar); if (state->processlcpinterval(state->processinfo, &state->lastcompletenode) != 0) { haserr = true; } } gt_free(state); return haserr ? -1 : 0; } static int showlcpinterval(GT_UNUSED void *data,const Lcpinterval *lcpinterval) { printf("N %lu %lu %lu\n",lcpinterval->offset, lcpinterval->left, lcpinterval->right); return 0; } int gt_runenumlcpvalues(const char *inputindex, bool outedges, bool bottomup, GtLogger *logger, GtError *err) { bool haserr = false; Sequentialsuffixarrayreader *ssar; gt_error_check(err); ssar = gt_newSequentialsuffixarrayreaderfromfile(inputindex, SARR_LCPTAB | SARR_SUFTAB | SARR_ESQTAB, SEQ_scan, logger, err); if (ssar == NULL) { haserr = true; } if (!haserr) { if (bottomup) { GtESAVisitor *elv = gt_esa_lcpitvs_visitor_new(); if (gt_esa_bottomup(ssar, elv, err) != 0) { haserr = true; } gt_esa_visitor_delete(elv); } else { if (gt_enumlcpvalues(outedges, ssar, showlcpinterval, NULL, logger, err) != 0) { haserr = true; } } } if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } return haserr ? -1 : 0; } static int gt_esa_scantables(Sequentialsuffixarrayreader *ssar, unsigned int mode,GtError *err) { unsigned long lcpvalue, previoussuffix = 0, idx, nonspecials, sumsuftab = 0, sumlcptab = 0; bool haserr = false; nonspecials = gt_Sequentialsuffixarrayreader_nonspecials(ssar); if (mode == 1U) { for (idx = 0; idx < nonspecials; idx++) { int retval = gt_nextSequentiallcpvalue(&lcpvalue,ssar,err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } sumlcptab += lcpvalue; /* silly but guarantees that loop is not eliminated by compiler */ retval = gt_nextSequentialsuftabvalue(&previoussuffix,ssar); gt_assert(retval >= 0); if (retval == 0) { break; } sumsuftab += previoussuffix; /* silly but guarantees that loop is not eliminated by compiler */ } } else { if (mode == 2U) { for (idx = 0; !haserr && idx < nonspecials; idx++) { NEXTSEQUENTIALLCPTABVALUE(lcpvalue,ssar); sumlcptab += lcpvalue; /* silly but guarantees that loop is not eliminated by compiler */ NEXTSEQUENTIALSUFTABVALUE(previoussuffix,ssar); sumsuftab += previoussuffix; /* silly but guarantees that loop is not eliminated by compiler */ } } else { gt_error_set(err,"illegal mode %u: use 1 or 2",mode); haserr = true; } } if (!haserr) { printf("sumsuftab=%lu\n",sumsuftab); printf("sumlcptab=%lu\n",sumlcptab); } return haserr ? -1 : 0; } int gt_runscanesa(const char *inputindex, unsigned int mode, GtLogger *logger,GtError *err) { bool haserr = false; Sequentialsuffixarrayreader *ssar; gt_error_check(err); ssar = gt_newSequentialsuffixarrayreaderfromfile(inputindex, SARR_LCPTAB | SARR_SUFTAB | SARR_ESQTAB, SEQ_scan, logger, err); if (ssar == NULL) { haserr = true; } if (!haserr && gt_esa_scantables(ssar, mode, err) != 0) { haserr = true; } if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-lcpintervals.h000066400000000000000000000024151211610345200213560ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_LCPINTERVALS_H #define ESA_LCPINTERVALS_H #include "core/logger_api.h" #include "core/error_api.h" int gt_runenumlcpvalues(const char *inputindex, bool outedges, bool bottomup, GtLogger *logger, GtError *err); int gt_runscanesa(const char *inputindex, unsigned int mode, GtLogger *logger,GtError *err); #endif genometools-1.5.1/src/match/esa-lcpval.c000066400000000000000000000064221211610345200201260ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/unused_api.h" #include "esa-lcpval.h" struct Lcpvalueiterator { unsigned long relpos, lastsuftabentry; GtReadmode readmode; const GtEncseq *encseq; GtEncseqReader *esr1, *esr2; }; Lcpvalueiterator *gt_newLcpvalueiterator(const GtEncseq *encseq, GtReadmode readmode) { Lcpvalueiterator *lvi; lvi = gt_malloc(sizeof *lvi); lvi->esr1 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); lvi->esr2 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); lvi->encseq = encseq; lvi->relpos = 0; lvi->readmode = readmode; lvi->lastsuftabentry = 0; return lvi; } unsigned long gt_nextLcpvalueiterator(Lcpvalueiterator *lvi, bool firstpage, const ESASuffixptr *suftabptr, unsigned long numberofsuffixes) { unsigned long lcpvalue; gt_assert(lvi->relpos < numberofsuffixes); if (firstpage && lvi->relpos == 0) { lcpvalue = 0; } else { GT_UNUSED int cmp; cmp = gt_encseq_check_comparetwosuffixes(lvi->encseq, lvi->readmode, &lcpvalue, false, false, 0, lvi->lastsuftabentry, ESASUFFIXPTRGET(suftabptr, lvi->relpos), lvi->esr1, lvi->esr2); #ifndef NDEBUG if (cmp > 0) { fprintf(stderr,"pos=%lu" ": cmp %lu" " %lu = %d, lcpval=%lu\n", lvi->relpos, lvi->lastsuftabentry, ESASUFFIXPTRGET(suftabptr,lvi->relpos), cmp, lcpvalue); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif } lvi->lastsuftabentry = ESASUFFIXPTRGET(suftabptr,lvi->relpos); if (lvi->relpos + 1 == numberofsuffixes) { lvi->relpos = 0; } else { lvi->relpos++; } return lcpvalue; } void gt_freeLcpvalueiterator(Lcpvalueiterator *lvi) { if (lvi != NULL) { gt_encseq_reader_delete(lvi->esr1); gt_encseq_reader_delete(lvi->esr2); gt_free(lvi); } } genometools-1.5.1/src/match/esa-lcpval.h000066400000000000000000000026771211610345200201430ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_LCPVAL_H #define ESA_LCPVAL_H #include "core/readmode.h" #include "core/encseq.h" #include "match/sarr-def.h" typedef struct Lcpvalueiterator Lcpvalueiterator; Lcpvalueiterator *gt_newLcpvalueiterator(const GtEncseq *encseq, GtReadmode readmode); unsigned long gt_nextLcpvalueiterator(Lcpvalueiterator *lvi, bool firstpage, const ESASuffixptr *suftabptr, unsigned long numberofsuffixes); void gt_freeLcpvalueiterator(Lcpvalueiterator *lvi); #endif genometools-1.5.1/src/match/esa-map.c000066400000000000000000000426001211610345200174200ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #include #include #include #include #endif #include "core/fa.h" #include "core/fileutils.h" #include "core/array.h" #include "core/endianess_api.h" #include "core/error.h" #include "core/ma_api.h" #include "core/format64.h" #include "core/codetype.h" #include "core/encseq.h" #include "esa-fileend.h" #include "esa-scanprj.h" #include "sarr-def.h" #define DBFILEKEY "dbfile=" #define INITBufferedfile(INDEXNAME,STREAM,TYPE,SUFFIX)\ (STREAM)->fp = gt_fa_fopen_with_suffix(INDEXNAME,SUFFIX,"rb",err);\ if ((STREAM)->fp == NULL)\ {\ haserr = true;\ (STREAM)->bufferedfilespace = NULL;\ } else\ {\ (STREAM)->nextread = 0;\ (STREAM)->nextfree = 0;\ (STREAM)->bufferedfilespace\ = gt_malloc(sizeof *((STREAM)->bufferedfilespace)\ * (FILEBUFFERSIZE));\ } static int scanprjfileuintkeysviafileptr(Suffixarray *suffixarray, const char *indexname, GtLogger *logger, FILE *fpin, GtError *err) { uint32_t integersize, littleendian, readmodeint, mirrored; unsigned int linenum; unsigned long currentlinelength; Definedunsignedlong maxbranchdepth; size_t dbfilelen = strlen(DBFILEKEY); bool haserr = false; GtScannedprjkeytable *scannedprjkeytable; GtStr *currentline; /* the following five variables are local as the parsed values are not required: they are determined by reading the encseq */ GtSpecialcharinfo specialcharinfo; unsigned long totallength, numofsequences, numofdbsequences, numofquerysequences; gt_error_check(err); scannedprjkeytable = gt_scannedprjkeytable_new(); GT_SCANNEDPRJKEY_ADD("totallength",&totallength,NULL); GT_SCANNEDPRJKEY_ADD("specialcharacters", &specialcharinfo.specialcharacters,NULL); GT_SCANNEDPRJKEY_ADD("specialranges", &specialcharinfo.specialranges,NULL); GT_SCANNEDPRJKEY_ADD("realspecialranges", &specialcharinfo.realspecialranges,NULL); GT_SCANNEDPRJKEY_ADD("lengthofspecialprefix", &specialcharinfo.lengthofspecialprefix,NULL); GT_SCANNEDPRJKEY_ADD("lengthofspecialsuffix", &specialcharinfo.lengthofspecialsuffix,NULL); GT_SCANNEDPRJKEY_ADD("wildcards", &specialcharinfo.wildcards,NULL); GT_SCANNEDPRJKEY_ADD("wildcardranges", &specialcharinfo.wildcardranges,NULL); GT_SCANNEDPRJKEY_ADD("realwildcardranges", &specialcharinfo.realwildcardranges,NULL); GT_SCANNEDPRJKEY_ADD("lengthofwildcardprefix", &specialcharinfo.lengthofwildcardprefix,NULL); GT_SCANNEDPRJKEY_ADD("lengthofwildcardsuffix", &specialcharinfo.lengthofwildcardsuffix,NULL); GT_SCANNEDPRJKEY_ADD("numofsequences",&numofsequences,NULL); GT_SCANNEDPRJKEY_ADD("numofdbsequences",&numofdbsequences,NULL); gt_scannedprjkey_add(scannedprjkeytable,"numofquerysequences", &numofquerysequences,0,false,NULL); GT_SCANNEDPRJKEY_ADD("numberofallsortedsuffixes", &suffixarray->numberofallsortedsuffixes,NULL); GT_SCANNEDPRJKEY_ADD("longest",&suffixarray->longest.valueunsignedlong, &suffixarray->longest.defined); GT_SCANNEDPRJKEY_ADD("prefixlength",&suffixarray->prefixlength,NULL); GT_SCANNEDPRJKEY_ADD("largelcpvalues", &suffixarray->numoflargelcpvalues.valueunsignedlong, &suffixarray->numoflargelcpvalues.defined); gt_scannedprjkey_add(scannedprjkeytable,"averagelcp", &suffixarray->averagelcp.valuedouble, sizeof (suffixarray->averagelcp.valuedouble), true, &suffixarray->averagelcp.defined); GT_SCANNEDPRJKEY_ADD("maxbranchdepth",&maxbranchdepth.valueunsignedlong, &maxbranchdepth.defined); GT_SCANNEDPRJKEY_ADD("integersize",&integersize,NULL); GT_SCANNEDPRJKEY_ADD("littleendian",&littleendian,NULL); GT_SCANNEDPRJKEY_ADD("readmode",&readmodeint,NULL); GT_SCANNEDPRJKEY_ADD("mirrored",&mirrored,NULL); currentline = gt_str_new(); for (linenum = 0; gt_str_read_next_line(currentline, fpin) != EOF; linenum++) { currentlinelength = gt_str_length(currentline); if (dbfilelen <= (size_t) currentlinelength && memcmp(DBFILEKEY,gt_str_get(currentline),dbfilelen) == 0) { /* Nothing */ } else { if (gt_scannedprjkey_analyze(indexname, PROJECTFILESUFFIX, linenum, gt_str_get(currentline), currentlinelength, scannedprjkeytable, err) != 0) { haserr = true; break; } } gt_str_reset(currentline); } gt_str_delete(currentline); if (!haserr && gt_scannedprjkey_allkeysdefined(indexname,PROJECTFILESUFFIX, scannedprjkeytable, logger,err) != 0) { haserr = true; } if (!haserr && integersize != (uint32_t) 32 && integersize != (uint32_t) 64) { gt_error_set(err,"%s%s contains illegal line defining the integer size", indexname,PROJECTFILESUFFIX); haserr = true; } if (!haserr && integersize != (uint32_t) (sizeof (unsigned long) * CHAR_BIT)) { gt_error_set(err,"index was generated for %u-bit integers while " "this program uses %u-bit integers", (unsigned int) integersize, (unsigned int) (sizeof (unsigned long) * CHAR_BIT)); haserr = true; } if (!haserr) { if (gt_is_little_endian()) { if (littleendian != (uint32_t) 1) { gt_error_set(err,"computer has little endian byte order, while index " "was built on computer with big endian byte order"); haserr = true; } } else { if (littleendian == (uint32_t) 1) { gt_error_set(err,"computer has big endian byte order, while index " "was built on computer with little endian byte " "order"); haserr = true; } } } if (!haserr) { if (readmodeint > (uint32_t) 3) { gt_error_set(err,"illegal readmode %u",(unsigned int) readmodeint); haserr = true; } suffixarray->readmode = (GtReadmode) readmodeint; } if (!haserr) { if (mirrored > (uint32_t) 1) { gt_error_set(err,"illegal mirroring flag: only 0(=no mirroring) and " "1 (=mirroring) is supported, but read %u", (unsigned int) mirrored); haserr = true; } suffixarray->mirroredencseq = (mirrored == (uint32_t) 1); } gt_scannedprjkeytable_delete(scannedprjkeytable); return haserr ? -1 : 0; } static void initsuffixarray(Suffixarray *suffixarray) { suffixarray->encseq = NULL; suffixarray->suftab = NULL; suffixarray->lcptab = NULL; suffixarray->llvtab = NULL; suffixarray->bwttab = NULL; suffixarray->bcktab = NULL; suffixarray->bwttabstream.fp = NULL; suffixarray->bwttabstream.bufferedfilespace = NULL; suffixarray->suftabstream_GtUlong.fp = NULL; suffixarray->suftabstream_GtUlong.bufferedfilespace = NULL; #ifdef _LP64 suffixarray->suftabstream_uint32_t.fp = NULL; suffixarray->suftabstream_uint32_t.bufferedfilespace = NULL; #endif suffixarray->lcptabstream.fp = NULL; suffixarray->lcptabstream.bufferedfilespace = NULL; suffixarray->llvtabstream.fp = NULL; suffixarray->llvtabstream.bufferedfilespace = NULL; suffixarray->numberofallsortedsuffixes = 0; } static bool scanprjfileuintkeys(Suffixarray *suffixarray, const char *indexname, GtLogger *logger, GtError *err) { bool haserr = false; FILE *fp; gt_error_check(err); fp = gt_fa_fopen_with_suffix(indexname,PROJECTFILESUFFIX,"rb",err); if (fp == NULL) { haserr = true; } if (!haserr && scanprjfileuintkeysviafileptr(suffixarray, indexname,logger, fp,err) != 0) { haserr = true; } gt_fa_xfclose(fp); return haserr; } void gt_freesuffixarray(Suffixarray *suffixarray) { gt_fa_xmunmap((void *) suffixarray->suftab); suffixarray->suftab = NULL; gt_fa_xmunmap((void *) suffixarray->lcptab); suffixarray->lcptab = NULL; gt_fa_xmunmap((void *) suffixarray->llvtab); suffixarray->llvtab = NULL; gt_fa_xmunmap((void *) suffixarray->bwttab); suffixarray->bwttab = NULL; gt_fa_xfclose(suffixarray->suftabstream_GtUlong.fp); suffixarray->suftabstream_GtUlong.fp = NULL; gt_free(suffixarray->suftabstream_GtUlong.bufferedfilespace); #ifdef _LP64 gt_fa_xfclose(suffixarray->suftabstream_uint32_t.fp); suffixarray->suftabstream_uint32_t.fp = NULL; gt_free(suffixarray->suftabstream_uint32_t.bufferedfilespace); #endif gt_fa_xfclose(suffixarray->lcptabstream.fp); suffixarray->lcptabstream.fp = NULL; gt_free(suffixarray->lcptabstream.bufferedfilespace); gt_fa_xfclose(suffixarray->llvtabstream.fp); suffixarray->llvtabstream.fp = NULL; gt_free(suffixarray->llvtabstream.bufferedfilespace); gt_fa_xfclose(suffixarray->bwttabstream.fp); suffixarray->bwttabstream.fp = NULL; gt_free(suffixarray->bwttabstream.bufferedfilespace); gt_encseq_delete(suffixarray->encseq); suffixarray->encseq = NULL; if (suffixarray->bcktab != NULL) { gt_bcktab_delete(suffixarray->bcktab); suffixarray->bcktab = NULL; } } static int inputsuffixarray(bool map, Suffixarray *suffixarray, unsigned int demand, const char *indexname, GtLogger *logger, GtError *err) { bool haserr = false; GtEncseqLoader *el; unsigned long totallength = 0; gt_error_check(err); initsuffixarray(suffixarray); el = gt_encseq_loader_new(); if (!(demand & SARR_DESTAB)) gt_encseq_loader_do_not_require_des_tab(el); else gt_encseq_loader_require_des_tab(el); if (!(demand & SARR_SDSTAB)) gt_encseq_loader_do_not_require_sds_tab(el); else gt_encseq_loader_require_sds_tab(el); if (!(demand & SARR_SSPTAB)) gt_encseq_loader_do_not_require_ssp_tab(el); else gt_encseq_loader_require_ssp_tab(el); gt_encseq_loader_set_logger(el, logger); suffixarray->encseq = gt_encseq_loader_load(el, indexname, err); gt_encseq_loader_delete(el); if (suffixarray->encseq == NULL) { haserr = true; } if (!haserr) { haserr = scanprjfileuintkeys(suffixarray,indexname,logger,err); } if (!haserr && suffixarray->mirroredencseq && !gt_encseq_is_mirrored(suffixarray->encseq)) { if (gt_encseq_mirror(suffixarray->encseq, err) != 0) haserr = true; } if (!haserr) { totallength = gt_encseq_total_length(suffixarray->encseq); } if (!haserr && (demand & SARR_SUFTAB)) { if (map) { if (suffixarray->numberofallsortedsuffixes > 0) { suffixarray->suftab = gt_fa_mmap_check_size_with_suffix(indexname, SUFTABSUFFIX, suffixarray->numberofallsortedsuffixes, sizeof (*suffixarray->suftab), err); if (suffixarray->suftab == NULL) { haserr = true; } } } else { #ifdef _LP64 off_t filesize = gt_file_size_with_suffix(indexname,SUFTABSUFFIX); if (filesize == (off_t) sizeof (uint32_t) * suffixarray->numberofallsortedsuffixes) { gt_logger_log(logger,"read suftab in units of 4 bytes"); INITBufferedfile(indexname,&suffixarray->suftabstream_uint32_t,uint32_t, SUFTABSUFFIX); } else { gt_logger_log(logger,"read suftab in units of 8 bytes"); INITBufferedfile(indexname,&suffixarray->suftabstream_GtUlong,GtUlong, SUFTABSUFFIX); } #else gt_logger_log(logger,"read suftab in units of 4 bytes"); INITBufferedfile(indexname,&suffixarray->suftabstream_GtUlong,GtUlong, SUFTABSUFFIX); #endif } if (!haserr && !suffixarray->longest.defined) { gt_error_set(err,"longest not defined"); haserr = true; } } if (!haserr && (demand & SARR_LCPTAB)) { if (map) { if (suffixarray->numberofallsortedsuffixes > 0) { suffixarray->lcptab = gt_fa_mmap_check_size_with_suffix(indexname, LCPTABSUFFIX, suffixarray->numberofallsortedsuffixes, sizeof (*suffixarray->lcptab), err); if (suffixarray->lcptab == NULL) { haserr = true; } } } else { INITBufferedfile(indexname,&suffixarray->lcptabstream,GtUchar, LCPTABSUFFIX); if (!haserr && fseek(suffixarray->lcptabstream.fp,(long) sizeof (GtUchar),SEEK_SET)) { gt_error_set(err,"fseek(esastream) failed: %s",strerror(errno)); haserr = true; } } if (!haserr && !suffixarray->numoflargelcpvalues.defined) { gt_error_set(err,"numoflargelcpvalues not defined"); haserr = true; } if (!haserr && suffixarray->numoflargelcpvalues.valueunsignedlong > 0) { if (map) { suffixarray->llvtab = gt_fa_mmap_check_size_with_suffix(indexname, LARGELCPTABSUFFIX, (unsigned long) suffixarray->numoflargelcpvalues. valueunsignedlong, sizeof (*suffixarray->llvtab), err); if (suffixarray->llvtab == NULL) { haserr = true; } } else { INITBufferedfile(indexname,&suffixarray->llvtabstream,Largelcpvalue, LARGELCPTABSUFFIX); } } } if (!haserr && (demand & SARR_BWTTAB)) { if (map) { suffixarray->bwttab = gt_fa_mmap_check_size_with_suffix(indexname, BWTTABSUFFIX, totallength+1, sizeof (*suffixarray->bwttab), err); if (suffixarray->bwttab == NULL) { haserr = true; } } else { INITBufferedfile(indexname,&suffixarray->bwttabstream,GtUchar, BWTTABSUFFIX); } } if (!haserr && (demand & SARR_BCKTAB)) { suffixarray->bcktab = gt_bcktab_map(indexname, gt_encseq_alphabetnumofchars(suffixarray->encseq), suffixarray->prefixlength, totallength+1, true, err); if (suffixarray->bcktab == NULL) { haserr = true; } } if (haserr) { gt_freesuffixarray(suffixarray); } return haserr ? -1 : 0; } int streamsuffixarray(Suffixarray *suffixarray, unsigned int demand, const char *indexname, GtLogger *logger, GtError *err) { gt_error_check(err); return inputsuffixarray(false, suffixarray, demand, indexname, logger, err); } int gt_mapsuffixarray(Suffixarray *suffixarray, unsigned int demand, const char *indexname, GtLogger *logger, GtError *err) { gt_error_check(err); /* printf("sizeof (Suffixarray)=%lu\n",sizeof (Suffixarray)); */ return inputsuffixarray(true, suffixarray, demand, indexname, logger, err); } genometools-1.5.1/src/match/esa-map.h000066400000000000000000000026051211610345200174260ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_MAP_H #define ESA_MAP_H #include "sarr-def.h" #include "core/logger.h" void gt_freesuffixarray(Suffixarray *suffixarray); int streamsuffixarray(Suffixarray *suffixarray, unsigned int demand, const char *indexname, GtLogger *logger, GtError *err); int gt_mapsuffixarray(Suffixarray *suffixarray, unsigned int demand, const char *indexname, GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/esa-maxpairs.c000066400000000000000000000272641211610345200205000ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/arraydef.h" #include "core/unused_api.h" #include "esa-seqread.h" #include "esa-maxpairs.h" #define ISLEFTDIVERSE (GtUchar) (state->alphabetsize) #define INITIALCHAR (GtUchar) (state->alphabetsize+1) #define CHECKCHAR(CC)\ if (father->commonchar != (CC) || (CC) >= ISLEFTDIVERSE)\ {\ father->commonchar = ISLEFTDIVERSE;\ } #define NODEPOSLISTENTRY(NN,SYM)\ (NN)->nodeposlist[SYM] #define NODEPOSLISTLENGTH(NN,SYM)\ NODEPOSLISTENTRY(NN,SYM).length #define NODEPOSLISTSTART(NN,SYM)\ NODEPOSLISTENTRY(NN,SYM).start typedef struct { unsigned long start, length; } Listtype; typedef struct /* information stored for each node of the lcp interval tree */ { GtUchar commonchar; unsigned long uniquecharposstart, uniquecharposlength; /* uniquecharpos[start..start+len-1] */ Listtype *nodeposlist; } GtBUinfo_maxpairs; typedef struct /* global information */ { bool initialized; unsigned int searchlength, alphabetsize; GtArrayGtUlong uniquechar, *poslist; const GtEncseq *encseq; GtReadmode readmode; Processmaxpairs processmaxpairs; void *processmaxpairsinfo; } GtBUstate_maxpairs; static void initBUinfo_maxpairs(GtBUinfo_maxpairs *buinfo, GtBUstate_maxpairs *state) { buinfo->nodeposlist = gt_malloc(sizeof (*buinfo->nodeposlist) * state->alphabetsize); } static void freeBUinfo_maxpairs(GtBUinfo_maxpairs *buinfo, GT_UNUSED GtBUstate_maxpairs *state) { gt_free(buinfo->nodeposlist); } static void add2poslist_maxpairs(GtBUstate_maxpairs *state, GtBUinfo_maxpairs *ninfo, unsigned int base,unsigned long leafnumber) { GtArrayGtUlong *ptr; if (base >= state->alphabetsize) { ninfo->uniquecharposlength++; GT_STOREINARRAY(&state->uniquechar,GtUlong,4,leafnumber); } else { ptr = &state->poslist[base]; GT_STOREINARRAY(ptr,GtUlong,4,leafnumber); NODEPOSLISTLENGTH(ninfo,base)++; } } static void concatlists_maxpairs(GtBUstate_maxpairs *state, GtBUinfo_maxpairs *father, GtBUinfo_maxpairs *son) { unsigned int base; for (base = 0; base < state->alphabetsize; base++) { NODEPOSLISTLENGTH(father,base) += NODEPOSLISTLENGTH(son,base); } father->uniquecharposlength += son->uniquecharposlength; } static int cartproduct1_maxpairs(GtBUstate_maxpairs *state, unsigned long fatherdepth, const GtBUinfo_maxpairs *ninfo, unsigned int base, unsigned long leafnumber,GtError *err) { Listtype *pl; unsigned long *spptr, *start; pl = &NODEPOSLISTENTRY(ninfo,base); start = state->poslist[base].spaceGtUlong + pl->start; for (spptr = start; spptr < start + pl->length; spptr++) { if (state->processmaxpairs(state->processmaxpairsinfo,state->encseq, fatherdepth,leafnumber,*spptr,err) != 0) { return -1; } } return 0; } static int cartproduct2_maxpairs(GtBUstate_maxpairs *state, unsigned long fatherdepth, const GtBUinfo_maxpairs *ninfo1, unsigned int base1, const GtBUinfo_maxpairs *ninfo2, unsigned int base2, GtError *err) { Listtype *pl1, *pl2; unsigned long *start1, *start2, *spptr1, *spptr2; pl1 = &NODEPOSLISTENTRY(ninfo1,base1); start1 = state->poslist[base1].spaceGtUlong + pl1->start; pl2 = &NODEPOSLISTENTRY(ninfo2,base2); start2 = state->poslist[base2].spaceGtUlong + pl2->start; for (spptr1 = start1; spptr1 < start1 + pl1->length; spptr1++) { for (spptr2 = start2; spptr2 < start2 + pl2->length; spptr2++) { if (state->processmaxpairs(state->processmaxpairsinfo,state->encseq, fatherdepth,*spptr1,*spptr2,err) != 0) { return -1; } } } return 0; } static void setpostabto0_maxpairs(GtBUstate_maxpairs *state) { unsigned int base; if (!state->initialized) { for (base = 0; base < state->alphabetsize; base++) { state->poslist[base].nextfreeGtUlong = 0; } state->uniquechar.nextfreeGtUlong = 0; state->initialized = true; } } static int processleafedge_maxpairs(bool firstsucc, unsigned long fatherdepth, GtBUinfo_maxpairs *father, unsigned long leafnumber, GtBUstate_maxpairs *state, GtError *err) { unsigned int base; unsigned long *start, *spptr; GtUchar leftchar; #ifdef SKDEBUG printf("%s %lu firstsucc=%s, __func__," " depth(father)= %lu\n", leafnumber, firstsucc ? "true" : "false", fatherdepth); #endif if (fatherdepth < (unsigned long) state->searchlength) { setpostabto0_maxpairs(state); return 0; } if (leafnumber == 0) { leftchar = INITIALCHAR; } else { /* Random access */ leftchar = gt_encseq_get_encoded_char(state->encseq, leafnumber-1, state->readmode); } state->initialized = false; #ifdef SKDEBUG printf("%s: leftchar %u\n",__func__,(unsigned int) leftchar); #endif if (firstsucc) { father->commonchar = leftchar; father->uniquecharposlength = 0; father->uniquecharposstart = state->uniquechar.nextfreeGtUlong; for (base = 0; base < state->alphabetsize; base++) { NODEPOSLISTSTART(father,base) = state->poslist[base].nextfreeGtUlong; NODEPOSLISTLENGTH(father,base) = 0; } add2poslist_maxpairs(state,father,(unsigned int) leftchar,leafnumber); return 0; } if (father->commonchar != ISLEFTDIVERSE) { CHECKCHAR(leftchar); } if (father->commonchar == ISLEFTDIVERSE) { for (base = 0; base < state->alphabetsize; base++) { if (leftchar != (GtUchar) base) { if (cartproduct1_maxpairs(state,fatherdepth,father,base,leafnumber, err) != 0) { return -1; } } } start = state->uniquechar.spaceGtUlong + father->uniquecharposstart; for (spptr = start; spptr < start + father->uniquecharposlength; spptr++) { if (state->processmaxpairs(state->processmaxpairsinfo,state->encseq, fatherdepth,leafnumber,*spptr,err) != 0) { return -2; } } } add2poslist_maxpairs(state,father,(unsigned int) leftchar,leafnumber); return 0; } static int processbranchingedge_maxpairs(bool firstsucc, unsigned long fatherdepth, GtBUinfo_maxpairs *father, GT_UNUSED unsigned long sondepth, GT_UNUSED unsigned long sonwidth, GtBUinfo_maxpairs *son, GtBUstate_maxpairs *state, GtError *err) { unsigned int chfather, chson; unsigned long *start, *spptr, *fptr, *fstart; #ifdef SKDEBUG printf("%s firstsucc=%s, depth(father)= %lu\n", __func__,firstsucc ? "true" : "false",fatherdepth); #endif if (fatherdepth < (unsigned long) state->searchlength) { setpostabto0_maxpairs(state); return 0; } state->initialized = false; if (firstsucc) { return 0; } if (father->commonchar != ISLEFTDIVERSE) { gt_assert(son != NULL); #ifdef SKDEBUG printf("commonchar=%u\n",(unsigned int) son->commonchar); #endif if (son->commonchar != ISLEFTDIVERSE) { CHECKCHAR(son->commonchar); } else { father->commonchar = ISLEFTDIVERSE; } } if (father->commonchar == ISLEFTDIVERSE) { start = state->uniquechar.spaceGtUlong + son->uniquecharposstart; for (chfather = 0; chfather < state->alphabetsize; chfather++) { for (chson = 0; chson < state->alphabetsize; chson++) { if (chson != chfather) { if (cartproduct2_maxpairs(state,fatherdepth,father,chfather, son,chson,err) != 0) { return -1; } } } for (spptr = start; spptr < start + son->uniquecharposlength; spptr++) { if (cartproduct1_maxpairs(state,fatherdepth,father,chfather,*spptr, err) != 0) { return -2; } } } fstart = state->uniquechar.spaceGtUlong + father->uniquecharposstart; for (fptr = fstart; fptr < fstart + father->uniquecharposlength; fptr++) { for (chson = 0; chson < state->alphabetsize; chson++) { if (cartproduct1_maxpairs(state,fatherdepth,son,chson,*fptr,err) != 0) { return -3; } } for (spptr = start; spptr < start + son->uniquecharposlength; spptr++) { if (state->processmaxpairs(state->processmaxpairsinfo,state->encseq, fatherdepth,*fptr,*spptr,err) != 0) { return -4; } } } } concatlists_maxpairs(state,father,son); return 0; } #include "esa-bottomup-maxpairs.inc" int gt_enumeratemaxpairs(Sequentialsuffixarrayreader *ssar, const GtEncseq *encseq, GtReadmode readmode, unsigned int searchlength, Processmaxpairs processmaxpairs, void *processmaxpairsinfo, GtError *err) { unsigned int base; GtArrayGtUlong *ptr; GtBUstate_maxpairs *state; bool haserr = false; state = gt_malloc(sizeof (*state)); state->alphabetsize = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); state->searchlength = searchlength; state->processmaxpairs = processmaxpairs; state->processmaxpairsinfo = processmaxpairsinfo; state->initialized = false; state->encseq = encseq; state->readmode = readmode; GT_INITARRAY(&state->uniquechar,GtUlong); state->poslist = gt_malloc(sizeof (*state->poslist) * state->alphabetsize); for (base = 0; base < state->alphabetsize; base++) { ptr = &state->poslist[base]; GT_INITARRAY(ptr,GtUlong); } if (gt_esa_bottomup_maxpairs(ssar, state, err) != 0) { haserr = true; } GT_FREEARRAY(&state->uniquechar,GtUlong); for (base = 0; base < state->alphabetsize; base++) { ptr = &state->poslist[base]; GT_FREEARRAY(ptr,GtUlong); } gt_free(state->poslist); gt_free(state); return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-maxpairs.h000066400000000000000000000031301211610345200204670ustar00rootroot00000000000000/* Copyright (c) 2007-2009 Stefan Kurtz Copyright (c) 2007-2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_MAXPAIRS_H #define ESA_MAXPAIRS_H #include "core/error_api.h" #include "core/encseq.h" #include "esa-seqread.h" typedef int (*Processmaxpairs)(void *, const GtEncseq *, unsigned long, unsigned long, unsigned long, GtError *); int gt_enumeratemaxpairs(Sequentialsuffixarrayreader *ssar, const GtEncseq *encseq, GtReadmode readmode, unsigned int searchlength, Processmaxpairs processmaxpairs, void *processmaxpairsinfo, GtError *err); #endif genometools-1.5.1/src/match/esa-merge.c000066400000000000000000000234321211610345200177440ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/unused_api.h" #include "core/logger.h" #include "core/encseq.h" #include "core/ma_api.h" #include "sarr-def.h" #include "emimergeesa.h" #include "merger-trie.h" #include "lcpoverflow.h" #include "esa-map.h" static void fillandinsert(Mergertrierep *trierep, unsigned int idx, unsigned long suftabvalue, Mergertrienode *node, GT_UNUSED uint64_t ident) { Suffixinfo sinfo; sinfo.idx = idx; sinfo.startpos = suftabvalue; #ifdef WITHTRIEIDENT sinfo.ident = ident; #endif gt_mergertrie_insertsuffix(trierep,node,&sinfo); } static int inputthesequences(unsigned int *numofchars, unsigned long *nextpostable, Suffixarray *suffixarraytable, const GtStrArray *indexnametab, unsigned int demand, GtLogger *logger, GtError *err) { unsigned long idx; const char *indexname; gt_error_check(err); for (idx=0; idxroot, (uint64_t) idx); } return 0; } /*@null@*/ static Mergertrienode *findlargestnodeleqlcpvalue( Mergertrienode *smallest, unsigned long lcpvalue, GtError *err) { Mergertrienode *tmp; gt_error_check(err); for (tmp = smallest->parent; tmp != NULL; tmp = tmp->parent) { if (tmp->depth <= lcpvalue) { return tmp; } } gt_error_set(err,"path does not contain a node of depth <= %lu", lcpvalue); return NULL; } int gt_emissionmergedesa_stepdeleteandinsertothersuffixes( Emissionmergedesa *emmesa, GtError *err) { Mergertrienode *tmpsmallestleaf, *tmplcpnode; Largelcpvalue tmpexception; GtUchar tmpsmalllcpvalue; int retval; unsigned long tmpsuftabvalue, tmplcpvalue, tmplastbranchdepth; unsigned int tmpidx; gt_error_check(err); for (emmesa->buf.nextstoreidx = 0; emmesa->numofentries > 0 && emmesa->buf.nextstoreidx < (unsigned int) SIZEOFMERGERESULTBUFFER; emmesa->buf.nextstoreidx++) { tmpsmallestleaf = gt_mergertrie_findsmallestnode(&emmesa->trierep); tmplastbranchdepth = tmpsmallestleaf->parent->depth; tmpidx = tmpsmallestleaf->suffixinfo.idx; emmesa->buf.suftabstore[emmesa->buf.nextstoreidx].idx = tmpidx; emmesa->buf.suftabstore[emmesa->buf.nextstoreidx].startpos = tmpsmallestleaf->suffixinfo.startpos; if (emmesa->nextpostable[tmpidx] > gt_encseq_total_length(emmesa->suffixarraytable[tmpidx].encseq)) { gt_mergertrie_deletesmallestpath(tmpsmallestleaf,&emmesa->trierep); emmesa->numofentries--; } else { retval = gt_readnextfromstream_GtUchar(&tmpsmalllcpvalue, &emmesa->suffixarraytable[tmpidx]. lcptabstream); if (retval < 0) { return -1; } if (retval == 0) { gt_error_set(err,"file %s: line %d: unexpected end of file when " "reading lcptab",__FILE__,__LINE__); return -2; } if (tmpsmalllcpvalue == LCPOVERFLOW) { retval = gt_readnextfromstream_Largelcpvalue( &tmpexception, &emmesa->suffixarraytable[tmpidx].llvtabstream); if (retval < 0) { return -3; } if (retval == 0) { gt_error_set(err,"file %s: line %d: unexpected end of file when " "reading llvtab",__FILE__,__LINE__); return -4; } tmplcpvalue = tmpexception.value; } else { tmplcpvalue = (unsigned long) tmpsmalllcpvalue; } if (tmplcpvalue > tmplastbranchdepth) { tmplastbranchdepth = tmplcpvalue; } tmplcpnode = findlargestnodeleqlcpvalue(tmpsmallestleaf,tmplcpvalue,err); retval = gt_readnextfromstream_GtUlong(&tmpsuftabvalue, &emmesa->suffixarraytable[tmpidx]. suftabstream_GtUlong); if (retval == 0) { gt_error_set(err,"file %s: line %d: unexpected end of file when " "reading suftab",__FILE__,__LINE__); return -6; } emmesa->nextpostable[tmpidx]++; fillandinsert(&emmesa->trierep, tmpidx, tmpsuftabvalue, tmplcpnode, emmesa->ident++); tmpsmallestleaf = gt_mergertrie_findsmallestnode(&emmesa->trierep); gt_mergertrie_deletesmallestpath(tmpsmallestleaf,&emmesa->trierep); } if (emmesa->numofentries > 0) { emmesa->buf.lcptabstore[emmesa->buf.nextstoreidx] = tmplastbranchdepth; emmesa->buf.lastpage = false; } else { emmesa->buf.lastpage = true; } } return 0; } int gt_emissionmergedesa_init(Emissionmergedesa *emmesa, const GtStrArray *indexnametab, unsigned int demand, GtLogger *logger, GtError *err) { unsigned int numofindexes; bool haserr = false; numofindexes = (unsigned int) gt_str_array_size(indexnametab); emmesa->buf.nextaccessidx = emmesa->buf.nextstoreidx = 0; emmesa->numofindexes = numofindexes; emmesa->numofentries = numofindexes; emmesa->ident = (uint64_t) numofindexes; emmesa->trierep.encseqreadinfo = NULL; emmesa->suffixarraytable = gt_malloc(sizeof *emmesa->suffixarraytable * numofindexes); emmesa->nextpostable = gt_malloc(sizeof *emmesa->nextpostable * numofindexes); if (inputthesequences(&emmesa->numofchars, emmesa->nextpostable, emmesa->suffixarraytable, indexnametab, demand, logger, err) != 0) { haserr = true; return -1; } if (!haserr && numofindexes > 1U) { unsigned int idx; emmesa->trierep.encseqreadinfo = gt_malloc(sizeof *emmesa->trierep.encseqreadinfo * numofindexes); for (idx = 0; idx < numofindexes; idx++) { emmesa->trierep.encseqreadinfo[idx].encseqptr = emmesa->suffixarraytable[idx].encseq; emmesa->trierep.encseqreadinfo[idx].readmode = emmesa->suffixarraytable[idx].readmode; } gt_mergertrie_initnodetable(&emmesa->trierep,(unsigned long) numofindexes, numofindexes); if (insertfirstsuffixes(&emmesa->trierep, emmesa->nextpostable, emmesa->suffixarraytable, numofindexes, err) != 0) { gt_free(emmesa->trierep.encseqreadinfo); emmesa->trierep.encseqreadinfo = NULL; haserr = true; } } if (haserr) { gt_free(emmesa->suffixarraytable); gt_free(emmesa->nextpostable); } return haserr ? -1 : 0; } void gt_emissionmergedesa_wrap(Emissionmergedesa *emmesa) { unsigned int idx; for (idx = 0; idx < emmesa->numofindexes; idx++) { gt_freesuffixarray(emmesa->suffixarraytable + idx); } gt_free(emmesa->suffixarraytable); gt_free(emmesa->trierep.encseqreadinfo); emmesa->trierep.encseqreadinfo = NULL; if (emmesa->numofindexes > 1U) { gt_mergertrie_delete(&emmesa->trierep); } gt_free(emmesa->nextpostable); } genometools-1.5.1/src/match/esa-minunique.c000066400000000000000000000154041211610345200206570ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/chardef.h" #include "core/types_api.h" #include "core/unused_api.h" #include "sarr-def.h" #include "esa-splititv.h" #include "esa-minunique.h" unsigned long gt_suffixarrayuniqueforward (const void *genericindex, unsigned long offset, unsigned long left, unsigned long right, GT_UNUSED unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend) { Simplelcpinterval itv; const GtUchar *qptr; const Suffixarray *suffixarray = (const Suffixarray *) genericindex; unsigned long totallength; itv.left = left; itv.right = right; totallength = gt_encseq_total_length(suffixarray->encseq); for (qptr = qstart; /* Nothing */; qptr++, offset++) { if (itv.left < itv.right) { if (qptr >= qend || ISSPECIAL(*qptr) || !gt_lcpintervalfindcharchildintv(suffixarray->encseq, suffixarray->readmode, totallength, suffixarray->suftab, &itv, *qptr, offset, itv.left, itv.right)) { break; } } else { return offset; } } return 0; } unsigned long gt_suffixarraymstats (const void *genericindex, unsigned long offset, unsigned long left, unsigned long right, unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend) { Simplelcpinterval itv; const GtUchar *qptr; const Suffixarray *suffixarray = (const Suffixarray *) genericindex; unsigned long totallength; itv.left = left; itv.right = right; totallength = gt_encseq_total_length(suffixarray->encseq); for (qptr = qstart; /* Nothing */; qptr++, offset++) { gt_assert(itv.left <= itv.right); if (qptr >= qend || ISSPECIAL(*qptr) || !gt_lcpintervalfindcharchildintv(suffixarray->encseq, suffixarray->readmode, totallength, suffixarray->suftab, &itv, *qptr, (unsigned long) offset, itv.left,itv.right)) { if (witnessposition != NULL) { *witnessposition = ESASUFFIXPTRGET(suffixarray->suftab,itv.left); } break; } } return offset; } unsigned long gt_suffixarrayfindmums (const void *genericindex, unsigned long offset, unsigned long left, unsigned long right, unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend) { const Suffixarray *suffixarray = (const Suffixarray *) genericindex; Simplelcpinterval itv; const GtUchar *qptr; unsigned long totallength; itv.left = left; itv.right = right; totallength = gt_encseq_total_length(suffixarray->encseq); *witnessposition = ULONG_MAX; for (qptr = qstart; /* Nothing */; qptr++, offset++) { gt_assert(itv.left <= itv.right); if (qptr >= qend || ISSPECIAL(*qptr) || !gt_lcpintervalfindcharchildintv(suffixarray->encseq, suffixarray->readmode, totallength, suffixarray->suftab, &itv, *qptr, offset, itv.left, itv.right)) { if (itv.left == itv.right) { *witnessposition = ESASUFFIXPTRGET(suffixarray->suftab,itv.left); } break; } } return offset; } GtRange gt_suffixarrayfindinterval (const void *genericindex, unsigned long offset, unsigned long left, unsigned long right, unsigned long *matchlength, const GtUchar *qstart, const GtUchar *qend) { const Suffixarray *suffixarray = (const Suffixarray *) genericindex; const GtUchar *qptr; unsigned long totallength = gt_encseq_total_length(suffixarray->encseq); GtRange result; gt_assert(qstart < qend); for (qptr = qstart; /* Nothing */; qptr++, offset++) { Simplelcpinterval itv; if (qptr >= qend || ISSPECIAL(*qptr) || !gt_lcpintervalfindcharchildintv(suffixarray->encseq, suffixarray->readmode, totallength, suffixarray->suftab, &itv, *qptr, offset, left, right)) { break; } gt_assert(itv.left <= itv.right); left = itv.left; right = itv.right; } *matchlength = (unsigned long) (qptr - qstart); result.start = left; result.end = right; return result; } genometools-1.5.1/src/match/esa-minunique.h000066400000000000000000000053411211610345200206630ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_MINUNIQUE_H #define ESA_MINUNIQUE_H #include "core/unused_api.h" #include "core/types_api.h" #include "core/range_api.h" unsigned long gt_suffixarrayuniqueforward (const void *genericindex, unsigned long offset, unsigned long left, unsigned long right, GT_UNUSED unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend); unsigned long gt_suffixarraymstats (const void *genericindex, unsigned long offset, unsigned long left, unsigned long right, unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend); unsigned long gt_suffixarrayfindmums (const void *genericindex, unsigned long offset, unsigned long left, unsigned long right, unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend); GtRange gt_suffixarrayfindinterval (const void *genericindex, unsigned long offset, unsigned long left, unsigned long right, unsigned long *matchlength, const GtUchar *qstart, const GtUchar *qend); #endif genometools-1.5.1/src/match/esa-mmsearch.c000066400000000000000000000765231211610345200204550ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/chardef.h" #include "core/divmodmul.h" #include "core/minmax.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "core/types_api.h" #include "core/timer_api.h" #include "core/format64.h" #include "sarr-def.h" #include "revcompl.h" #include "lcpinterval.h" #include "esa-map.h" #include "echoseq.h" #include "sfx-apfxlen.h" #include "sfx-suffixer.h" #include "esa-minunique.h" #include "esa-mmsearch.h" typedef struct { const GtUchar *sequence; bool reversecopy; const GtEncseq *encseq; GtReadmode readmode; unsigned long startpos, length; } GtQueryrep; typedef struct { const GtQueryrep *queryrep; unsigned long offset; /* position relative to startpos */ } GtQuerysubstring; static GtUchar gt_mmsearch_accessquery(const GtQueryrep *queryrep, unsigned long pos) { unsigned long abspos; gt_assert(queryrep != NULL && pos < queryrep->length); abspos = queryrep->startpos + pos; if (queryrep->sequence != NULL) { gt_assert(queryrep->readmode == GT_READMODE_FORWARD); return queryrep->sequence[abspos]; } else { gt_assert(queryrep->readmode != GT_READMODE_FORWARD && queryrep->encseq != NULL); return gt_encseq_get_encoded_char(queryrep->encseq,abspos, queryrep->readmode); } } #define GT_MMSEARCH_COMPARE(OFFSET,LCPLEN)\ sidx = (OFFSET) + (LCPLEN);\ if (sidx < totallength)\ {\ gt_encseq_reader_reinit_with_readmode(esr,dbencseq,readmode,sidx);\ }\ for (/* Nothing */ ; /* Nothing */; sidx++, (LCPLEN)++)\ {\ if ((LCPLEN) >= (unsigned long) minmatchlength)\ {\ retcode = 0;\ break;\ }\ if (sidx >= totallength)\ {\ retcode = -1;\ break;\ }\ currentdbchar = gt_encseq_reader_next_encoded_char(esr);\ currentquerychar = gt_mmsearch_accessquery(querysubstring->queryrep,\ querysubstring->offset + (LCPLEN));\ retcode = (int) (currentquerychar - currentdbchar);\ if (retcode == 0)\ {\ if (ISSPECIAL(currentdbchar) && ISSPECIAL(currentquerychar))\ {\ retcode = -1;\ break;\ }\ } else\ {\ break;\ }\ } static bool gt_mmsearch(const GtEncseq *dbencseq, GtEncseqReader *esr, const ESASuffixptr *suftab, GtReadmode readmode, Lcpinterval *lcpitv, const GtQuerysubstring *querysubstring, unsigned long minmatchlength) { unsigned long left, leftsave, mid, right, lpref, rpref, totallength, lcplen, sidx; int retcode = 0; GtUchar currentdbchar, currentquerychar; totallength = gt_encseq_total_length(dbencseq); leftsave = left = lcpitv->left; right = lcpitv->right; lcplen = lcpitv->offset; GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,left),lcplen); if (retcode > 0) { lpref = lcplen; lcplen = lcpitv->offset; GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,right),lcplen); if (retcode > 0) { return false; } else { rpref = lcplen; while (right > left + 1) { mid = GT_DIV2(left+right); lcplen = MIN(lpref,rpref); GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,mid),lcplen); if (retcode <= 0) { right = mid; rpref = lcplen; } else { left = mid; lpref = lcplen; } } lcpitv->left = right; } } left = leftsave; right = lcpitv->right; lcplen = lcpitv->offset; GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,left),lcplen); if (retcode < 0) { return false; } else { lpref = lcplen; lcplen = lcpitv->offset; GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,right),lcplen); if (retcode >= 0) { lcpitv->right = right; } else { rpref = lcplen; while (right > left + 1) { mid = GT_DIV2(left+right); lcplen = MIN(lpref,rpref); GT_MMSEARCH_COMPARE(ESASUFFIXPTRGET(suftab,mid),lcplen); if (retcode >= 0) { left = mid; lpref = lcplen; } else { right = mid; rpref = lcplen; } } lcpitv->right = left; } } return true; } struct GtMMsearchiterator { Lcpinterval lcpitv; unsigned long sufindex; const ESASuffixptr *suftab; GtEncseqReader *esr; }; static GtMMsearchiterator *gt_mmsearchiterator_new_generic( const GtEncseq *dbencseq, const ESASuffixptr *suftab, unsigned long leftbound, unsigned long rightbound, unsigned long itvoffset, GtReadmode readmode, const GtQuerysubstring *querysubstring, unsigned long minmatchlength) { GtMMsearchiterator *mmsi = gt_malloc(sizeof *mmsi); mmsi->lcpitv.left = leftbound; mmsi->lcpitv.right = rightbound; mmsi->lcpitv.offset = itvoffset; mmsi->suftab = suftab; mmsi->esr = gt_encseq_create_reader_with_readmode(dbencseq, readmode, 0); if (!gt_mmsearch(dbencseq,mmsi->esr,suftab,readmode,&mmsi->lcpitv, querysubstring,minmatchlength)) { mmsi->lcpitv.left = 1UL; mmsi->lcpitv.right = 0; } mmsi->sufindex = mmsi->lcpitv.left; return mmsi; } GtMMsearchiterator *gt_mmsearchiterator_new_complete_olain( const GtEncseq *dbencseq, const void *voidsuftab, /* XXX */ unsigned long leftbound, unsigned long rightbound, unsigned long itvoffset, GtReadmode readmode, const GtUchar *pattern, unsigned long patternlength) { GtQueryrep queryrep; GtQuerysubstring querysubstring; const ESASuffixptr *suftab = (const ESASuffixptr *) voidsuftab; /* XXX */ queryrep.sequence = pattern; queryrep.reversecopy = false; queryrep.encseq = NULL; queryrep.readmode = GT_READMODE_FORWARD; queryrep.startpos = 0; queryrep.length = (unsigned long) patternlength; querysubstring.queryrep = &queryrep; querysubstring.offset = 0; return gt_mmsearchiterator_new_generic(dbencseq, suftab, leftbound, rightbound, itvoffset, readmode, &querysubstring, patternlength); } unsigned long gt_mmsearchiterator_count(const GtMMsearchiterator *mmsi) { if (mmsi->lcpitv.left > mmsi->lcpitv.right) { return 0; } return mmsi->lcpitv.right - mmsi->lcpitv.left + 1; } bool gt_mmsearchiterator_next(unsigned long *dbstart,GtMMsearchiterator *mmsi) { if (mmsi->sufindex <= mmsi->lcpitv.right) { *dbstart = ESASUFFIXPTRGET(mmsi->suftab,mmsi->sufindex++); return true; } return false; } bool gt_mmsearchiterator_isempty(const GtMMsearchiterator *mmsi) { return mmsi == NULL || mmsi->lcpitv.left > mmsi->lcpitv.right; } bool gt_mmsearchiterator_identical(const GtMMsearchiterator *mmsi1, const GtMMsearchiterator *mmsi2) { gt_assert(mmsi1 != NULL); gt_assert(mmsi2 != NULL); return mmsi1->lcpitv.left == mmsi2->lcpitv.left && mmsi1->lcpitv.right == mmsi2->lcpitv.right; } void gt_mmsearchiterator_delete(GtMMsearchiterator *mmsi) { if (mmsi != NULL) { gt_encseq_reader_delete(mmsi->esr); gt_free(mmsi); } } static bool gt_mmsearch_isleftmaximal(const GtEncseq *dbencseq, GtReadmode readmode, unsigned long dbstart, const GtQuerysubstring *querysubstring) { GtUchar dbleftchar; if (dbstart == 0 || querysubstring->offset == 0) { return true; } dbleftchar = gt_encseq_get_encoded_char(dbencseq, /* Random access */ dbstart-1, readmode); if (ISSPECIAL(dbleftchar) || dbleftchar != gt_mmsearch_accessquery(querysubstring->queryrep, querysubstring->offset-1)) { return true; } return false; } static bool gt_mum_isleftmaximal(const GtEncseq *dbencseq, GtReadmode readmode, unsigned long dbstart, unsigned long queryoffset, const GtUchar *query) { GtUchar dbleftchar; if (dbstart == 0 || queryoffset == 0) { return true; } dbleftchar = gt_encseq_get_encoded_char(dbencseq, /* Random access */ dbstart-1, readmode); if (ISSPECIAL(dbleftchar) || dbleftchar != query[queryoffset-1]) { return true; } return false; } static unsigned long gt_mmsearch_extendright(const GtEncseq *dbencseq, GtEncseqReader *esr, GtReadmode readmode, unsigned long totallength, unsigned long dbend, const GtQuerysubstring *querysubstring, unsigned long matchlength) { GtUchar dbchar; unsigned long dbpos, querypos; if (dbend < totallength) { gt_encseq_reader_reinit_with_readmode(esr,dbencseq,readmode,dbend); } for (dbpos = dbend, querypos = querysubstring->offset + matchlength; dbpos < totallength && querypos < querysubstring->queryrep->length; dbpos++, querypos++) { dbchar = gt_encseq_reader_next_encoded_char(esr); if (ISSPECIAL(dbchar) || dbchar != gt_mmsearch_accessquery(querysubstring->queryrep,querypos)) { break; } } return dbpos - dbend; } static int gt_queryuniquematch(bool selfmatch, const Suffixarray *suffixarray, uint64_t queryunitnum, const GtQueryrep *queryrep, unsigned long minmatchlength, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtQuerymatch *querymatchspaceptr, GtError *err) { unsigned long offset, totallength = gt_encseq_total_length(suffixarray->encseq), localqueryoffset = 0; uint64_t localqueryunitnum = queryunitnum; bool haserr = false; gt_assert(!selfmatch && queryrep->length >= minmatchlength); for (offset = 0; offset <= queryrep->length - minmatchlength; offset++) { unsigned long matchlen, dbstart; matchlen = gt_suffixarrayfindmums (suffixarray, 0, 0, /* leftbound */ totallength, /* rightbound */ &dbstart, queryrep->sequence + offset, queryrep->sequence + queryrep->length); if (dbstart != ULONG_MAX && matchlen >= minmatchlength && gt_mum_isleftmaximal(suffixarray->encseq, suffixarray->readmode, dbstart, offset, queryrep->sequence)) { gt_querymatch_fill(querymatchspaceptr, matchlen, dbstart, queryrep->readmode, queryrep->reversecopy, 0, /* score */ 0, /* edist */ selfmatch, localqueryunitnum, matchlen, localqueryoffset); if (processquerymatch(processquerymatchinfo, suffixarray->encseq, querymatchspaceptr, queryrep->sequence, queryrep->length, err) != 0) { haserr = true; } } if (!haserr) { if (queryrep->sequence[offset] == (GtUchar) SEPARATOR) { localqueryunitnum++; localqueryoffset = 0; } else { localqueryoffset++; } } } return haserr ? -1 : 0; } static int gt_querysubstringmatch_generic( bool selfmatch, const GtEncseq *dbencseq, const ESASuffixptr *suftabpart, GtReadmode readmode, unsigned long numberofsuffixes, uint64_t queryunitnum, const GtQueryrep *queryrep, unsigned long minmatchlength, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtQuerymatch *querymatchspaceptr, GtError *err) { GtMMsearchiterator *mmsi; unsigned long totallength, localqueryoffset = 0; uint64_t localqueryunitnum = queryunitnum; GtQuerysubstring querysubstring; bool haserr = false; gt_assert(numberofsuffixes > 0); totallength = gt_encseq_total_length(dbencseq); querysubstring.queryrep = queryrep; for (querysubstring.offset = 0; querysubstring.offset <= queryrep->length - minmatchlength; querysubstring.offset++) { unsigned long dbstart; mmsi = gt_mmsearchiterator_new_generic(dbencseq, suftabpart, 0, /* leftbound */ numberofsuffixes-1, /* rightbound */ 0, /* offset */ readmode, &querysubstring, minmatchlength); while (!haserr && gt_mmsearchiterator_next(&dbstart,mmsi)) { if (gt_mmsearch_isleftmaximal(dbencseq, readmode, dbstart, &querysubstring)) { unsigned long extend = gt_mmsearch_extendright(dbencseq, mmsi->esr, readmode, totallength, dbstart + minmatchlength, &querysubstring, minmatchlength); gt_querymatch_fill(querymatchspaceptr, minmatchlength + extend, dbstart, queryrep->readmode, queryrep->reversecopy, 0, /* score */ 0, /* edist */ selfmatch, localqueryunitnum, minmatchlength + extend, localqueryoffset); if (processquerymatch(processquerymatchinfo, dbencseq, querymatchspaceptr, queryrep->sequence, queryrep->length, err) != 0) { haserr = true; } } } gt_mmsearchiterator_delete(mmsi); mmsi = NULL; if (!haserr) { if (gt_mmsearch_accessquery(queryrep,querysubstring.offset) == (GtUchar) SEPARATOR) { localqueryunitnum++; localqueryoffset = 0; } else { localqueryoffset++; } } } return haserr ? -1 : 0; } static int gt_querysubstringmatch(bool selfmatch, const Suffixarray *suffixarray, uint64_t queryunitnum, const GtQueryrep *queryrep, unsigned long minmatchlength, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtQuerymatch *querymatchspaceptr, GtError *err) { return gt_querysubstringmatch_generic(selfmatch, suffixarray->encseq, suffixarray->suftab, suffixarray->readmode, gt_encseq_total_length(suffixarray->encseq) + 1, queryunitnum, queryrep, minmatchlength, processquerymatch, processquerymatchinfo, querymatchspaceptr, err); } typedef int (*GtQuerysubstringmatchfunc)(bool, const Suffixarray *, uint64_t, const GtQueryrep *, unsigned long, GtProcessquerymatch, void *, GtQuerymatch *, GtError *); static int gt_callenumquerymatches_withindex( GtQuerysubstringmatchfunc findquerymatches, const Suffixarray *suffixarray, const GtStrArray *queryfiles, bool forwardstrand, bool reversestrand, unsigned int userdefinedleastlength, GtProcessquerybeforematching processquerybeforematching, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtError *err) { GtSeqIterator *seqit; bool haserr = false; seqit = gt_seq_iterator_sequence_buffer_new(queryfiles, err); if (seqit == NULL) { haserr = true; } else { GtQuerymatch *querymatchspaceptr = gt_querymatch_new(); const GtUchar *query; unsigned long querylen; int retval; uint64_t queryunitnum; GtUchar *queryreverse = NULL; unsigned long queryreverse_length = 0; char *desc = NULL; int mode; gt_seq_iterator_set_symbolmap(seqit, gt_alphabet_symbolmap(gt_encseq_alphabet( suffixarray->encseq))); for (queryunitnum = 0; /* Nothing */; queryunitnum++) { retval = gt_seq_iterator_next(seqit, &query, &querylen, &desc, err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } if (querylen >= (unsigned long) userdefinedleastlength) { GtQueryrep queryrep; queryrep.encseq = NULL; queryrep.readmode = GT_READMODE_FORWARD; queryrep.startpos = 0; queryrep.length = querylen; for (mode = 0; mode <= 1; mode++) { if (mode == 0 && forwardstrand) { queryrep.sequence = query; queryrep.reversecopy = false; if (processquerybeforematching != NULL) { processquerybeforematching(processquerymatchinfo,desc,query, querylen,true); } } else { if (mode == 1 && reversestrand) { if (querylen > queryreverse_length) { queryreverse = gt_realloc(queryreverse, sizeof (*queryreverse) * querylen); queryreverse_length = querylen; } gt_copy_reversecomplement(queryreverse,query,querylen); queryrep.sequence = queryreverse; queryrep.reversecopy = true; if (processquerybeforematching != NULL) { processquerybeforematching(processquerymatchinfo,desc, queryreverse,querylen,false); } } else { queryrep.sequence = NULL; queryrep.reversecopy = false; } } if (queryrep.sequence != NULL) { int ret = findquerymatches(false, suffixarray, queryunitnum, &queryrep, (unsigned long) userdefinedleastlength, processquerymatch, processquerymatchinfo, querymatchspaceptr, err); if (ret != 0) { haserr = true; break; } } } } } gt_seq_iterator_delete(seqit); gt_free(queryreverse); gt_querymatch_delete(querymatchspaceptr); } return haserr ? -1 : 0; } int gt_callenumquerymatches(const char *indexname, const GtStrArray *queryfiles, bool findmums, bool forwardstrand, bool reversestrand, unsigned int userdefinedleastlength, GtProcessquerybeforematching processquerybeforematching, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtLogger *logger, GtError *err) { Suffixarray suffixarray; bool haserr = false; if (gt_mapsuffixarray(&suffixarray, SARR_ESQTAB | SARR_SUFTAB | SARR_SSPTAB, indexname, logger, err) != 0) { haserr = true; } else { if (gt_callenumquerymatches_withindex(findmums ? gt_queryuniquematch : gt_querysubstringmatch, &suffixarray, queryfiles, forwardstrand, reversestrand, userdefinedleastlength, processquerybeforematching, processquerymatch, processquerymatchinfo, err) != 0) { haserr = true; } } gt_freesuffixarray(&suffixarray); return haserr ? -1 : 0; } int gt_callenumselfmatches(const char *indexname, GtReadmode queryreadmode, unsigned int userdefinedleastlength, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtLogger *logger, GtError *err) { Suffixarray suffixarray; bool haserr = false; gt_assert(queryreadmode != GT_READMODE_FORWARD); if (gt_mapsuffixarray(&suffixarray, SARR_ESQTAB | SARR_SUFTAB | SARR_SSPTAB, indexname, logger, err) != 0) { haserr = true; } else { unsigned long seqnum, numofsequences, seqlength, seqstartpos; GtQuerymatch *querymatchspaceptr = gt_querymatch_new(); GtQueryrep queryrep; numofsequences = gt_encseq_num_of_sequences(suffixarray.encseq); queryrep.sequence = NULL; queryrep.reversecopy = false; queryrep.encseq = suffixarray.encseq; queryrep.readmode = queryreadmode; for (seqnum = 0; seqnum < numofsequences; seqnum++) { seqstartpos = gt_encseq_seqstartpos(suffixarray.encseq, seqnum); seqlength = gt_encseq_seqlength(suffixarray.encseq, seqnum); if (seqlength >= (unsigned long) userdefinedleastlength) { queryrep.startpos = seqstartpos; queryrep.length = seqlength; if (gt_querysubstringmatch(true, &suffixarray, (uint64_t) seqnum, &queryrep, (unsigned long) userdefinedleastlength, processquerymatch, processquerymatchinfo, querymatchspaceptr, err) != 0) { haserr = true; break; } } } gt_querymatch_delete(querymatchspaceptr); } gt_freesuffixarray(&suffixarray); return haserr ? -1 : 0; } static int gt_constructsarrandrunmmsearch( const GtEncseq *dbencseq, GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, const GtUchar *query, unsigned long querylen, unsigned int minlength, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtTimer *sfxprogress, bool withprogressbar, GtError *err) { bool haserr = false; Sfxiterator *sfi; Sfxstrategy sfxstrategy; defaultsfxstrategy(&sfxstrategy, gt_encseq_bitwise_cmp_ok(dbencseq) ? false : true); sfxstrategy.outsuftabonfile = false; sfi = gt_Sfxiterator_new(dbencseq, readmode, prefixlength, numofparts, maximumspace, &sfxstrategy, /* sfxstrategy */ sfxprogress, withprogressbar, NULL, /* logger */ err); if (sfi == NULL) { haserr = true; } else { const GtSuffixsortspace *suffixsortspace; unsigned long numberofsuffixes; GtQuerymatch *querymatchspaceptr = gt_querymatch_new(); GtQueryrep queryrep; queryrep.sequence = query; queryrep.reversecopy = false; queryrep.encseq = NULL; queryrep.readmode = GT_READMODE_FORWARD; queryrep.startpos = 0; queryrep.length = (unsigned long) querylen; while (true) { suffixsortspace = gt_Sfxiterator_next(&numberofsuffixes,NULL,sfi); if (suffixsortspace == NULL) { break; } if (gt_querysubstringmatch_generic( false, dbencseq, (const ESASuffixptr *) gt_suffixsortspace_ulong_get(suffixsortspace), readmode, numberofsuffixes, 0, &queryrep, (unsigned long) minlength, processquerymatch, processquerymatchinfo, querymatchspaceptr, err) != 0) { haserr = true; break; } } gt_querymatch_delete(querymatchspaceptr); } if (gt_Sfxiterator_delete(sfi,err) != 0) { haserr = true; } return haserr ? -1 : 0; } int gt_sarrquerysubstringmatch(const GtUchar *dbseq, unsigned long dblen, const GtUchar *query, unsigned long querylen, unsigned int minlength, GtAlphabet *alpha, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtLogger *logger, GtError *err) { unsigned int numofchars, recommendedprefixlength; bool haserr = false; GtEncseq *dbencseq; GtEncseqBuilder *eb; eb = gt_encseq_builder_new(alpha); gt_encseq_builder_disable_multiseq_support(eb); gt_encseq_builder_disable_description_support(eb); gt_encseq_builder_set_logger(eb, logger); gt_encseq_builder_add_encoded(eb, dbseq, dblen, NULL); dbencseq = gt_encseq_builder_build(eb, err); gt_encseq_builder_delete(eb); numofchars = gt_alphabet_num_of_chars(alpha); recommendedprefixlength = gt_recommendedprefixlength(numofchars,dblen, GT_RECOMMENDED_MULTIPLIER_DEFAULT, true); if (gt_constructsarrandrunmmsearch(dbencseq, GT_READMODE_FORWARD, recommendedprefixlength, 1U, /* parts */ 0, /* maximumspace */ query, querylen, minlength, processquerymatch, processquerymatchinfo, NULL, false, err) != 0) { haserr = true; } gt_encseq_delete(dbencseq); dbencseq = NULL; return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-mmsearch.h000066400000000000000000000100031211610345200204370ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_MMSEARCH_H #define ESA_MMSEARCH_H #include "core/error.h" #include "core/encseq.h" #include "querymatch.h" typedef int (*GtProcessquerymatch)(void *, const GtEncseq *, const GtQuerymatch *, const GtUchar *query, unsigned long query_totallength, GtError *); typedef void (*GtProcessquerybeforematching)(void *,const char *, const GtUchar *,unsigned long, bool); typedef struct GtMMsearchiterator GtMMsearchiterator; GtMMsearchiterator *gt_mmsearchiterator_new_complete_olain( const GtEncseq *dbencseq, const void *voidsuftab, /* XXX */ unsigned long leftbound, unsigned long rightbound, unsigned long itvoffset, GtReadmode readmode, const GtUchar *pattern, unsigned long patternlength); bool gt_mmsearchiterator_next(unsigned long *dbstart,GtMMsearchiterator *mmsi); bool gt_mmsearchiterator_isempty(const GtMMsearchiterator *mmsi); bool gt_mmsearchiterator_identical(const GtMMsearchiterator *mmsi1, const GtMMsearchiterator *mmsi2); void gt_mmsearchiterator_delete(GtMMsearchiterator *mmsi); unsigned long gt_mmsearchiterator_count(const GtMMsearchiterator *mmsi); int gt_callenumquerymatches(const char *indexname, const GtStrArray *queryfiles, bool findmums, bool forwardstrand, bool reversestrand, unsigned int userdefinedleastlength, GtProcessquerybeforematching processquerybeforematching, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtLogger *logger, GtError *err); int gt_callenumselfmatches(const char *indexname, GtReadmode queryreadmode, unsigned int userdefinedleastlength, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtLogger *logger, GtError *err); int gt_sarrquerysubstringmatch(const GtUchar *dbseq, unsigned long dblen, const GtUchar *query, unsigned long querylen, unsigned int minlength, GtAlphabet *alpha, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/esa-scanprj.c000066400000000000000000000237451211610345200203140ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include "core/error.h" #include "core/str.h" #include "core/ma.h" #include "core/array.h" #include "core/types_api.h" #include "core/logger.h" #include "core/format64.h" #include "esa-scanprj.h" typedef union { uint32_t uint32value; uint64_t uint64value; double doublevalue; } GtScannedprjvalue; typedef struct { const char *keystring; uint32_t *uint32valueptr; uint64_t *uint64valueptr; double *doublevalueptr; bool readdouble, ptrdefined, found, *readflag; } GtScannedprjkey; struct GtScannedprjkeytable { GtArray *arr; }; GtScannedprjkeytable *gt_scannedprjkeytable_new(void) { GtScannedprjkeytable *scannedprjkeytable; scannedprjkeytable = gt_malloc(sizeof (*scannedprjkeytable)); scannedprjkeytable->arr = gt_array_new(sizeof (GtScannedprjkey)); return scannedprjkeytable; } void gt_scannedprjkeytable_delete(GtScannedprjkeytable *scannedprjkeytable) { gt_array_delete(scannedprjkeytable->arr); gt_free(scannedprjkeytable); } void gt_scannedprjkey_add(GtScannedprjkeytable *scannedprjkeytable, const char *keystring, void *valueptr, size_t sizeval, bool readdouble, bool *readflag) { GtScannedprjkey rikvalue; rikvalue.keystring = keystring; rikvalue.readflag = readflag; rikvalue.readdouble = readdouble; if (readdouble) { gt_assert(sizeval == sizeof (double)); rikvalue.uint32valueptr = NULL; rikvalue.uint64valueptr = NULL; rikvalue.doublevalueptr = valueptr; rikvalue.ptrdefined = true; } else { gt_assert(sizeval == 0 || sizeval == (size_t) 4 || sizeval == (size_t) 8); switch (sizeval) { case 0: rikvalue.uint32valueptr = NULL; rikvalue.uint64valueptr = NULL; rikvalue.ptrdefined = false; break; case 4: gt_assert(sizeof (uint32_t) == (size_t) 4); rikvalue.uint32valueptr = valueptr; rikvalue.uint64valueptr = NULL; rikvalue.ptrdefined = true; break; case 8: gt_assert(sizeof (uint64_t) == (size_t) 8); rikvalue.uint64valueptr = valueptr; rikvalue.uint32valueptr = NULL; rikvalue.ptrdefined = true; break; } } rikvalue.found = false; gt_array_add_elem(scannedprjkeytable->arr,&rikvalue, sizeof (GtScannedprjkey)); } static int gt_scannedprjkey_scanline(uint32_t *lengthofkey, GtScannedprjvalue *scannedprjvalue, const char *linebuffer, unsigned long linelength, GtError *err) { unsigned long idx; bool haserr = false, found = false; int retval = 0; gt_error_check(err); for (idx=0; idxdoublevalue = readdouble; retval = 2; } else { int64_t readint; if (sscanf((const char *) (linebuffer + idx + 1), FormatScanint64_t, SCANint64_tcast(&readint)) != 1 || readint < (int64_t) 0) { gt_error_set(err,"cannot find non-negative integer in \"%*.*s\"", (int) (linelength - (idx+1)), (int) (linelength - (idx+1)), linebuffer + idx + 1); return -1; } if (readint <= (int64_t) UINT32_MAX) { scannedprjvalue->uint32value = (uint32_t) readint; retval = 0; } else { scannedprjvalue->uint64value = (uint64_t) readint; retval = 1; } } break; } } if (!found) { gt_error_set(err,"missing equality symbol in \"%*.*s\"", (int) linelength, (int) linelength, linebuffer); haserr = true; } return haserr ? -1 : retval; } int gt_scannedprjkey_allkeysdefined( const char *indexname, const char *suffix, const GtScannedprjkeytable *scannedprjkeytable, GtLogger *logger, GtError *err) { unsigned long idx; GtScannedprjkey *rikptr; gt_error_check(err); for (idx=0; idxarr); idx++) { rikptr = (GtScannedprjkey *) gt_array_get(scannedprjkeytable->arr,idx); if (rikptr->found) { if (rikptr->ptrdefined) { if (rikptr->uint32valueptr != NULL) { gt_logger_log(logger,"%s=%u", rikptr->keystring, (unsigned int) *(rikptr->uint32valueptr)); } else { if (rikptr->uint64valueptr != NULL) { gt_logger_log(logger,"%s=" Formatuint64_t, rikptr->keystring, PRINTuint64_tcast(*(rikptr->uint64valueptr))); } else { if (rikptr->doublevalueptr != NULL) { gt_logger_log(logger,"%s=%.2f", rikptr->keystring, *(rikptr->doublevalueptr)); } else { gt_assert(false); } } } } else { gt_logger_log(logger,"%s=0",rikptr->keystring); } if (rikptr->readflag != NULL) { *(rikptr->readflag) = true; } } else { if (rikptr->readflag == NULL) { gt_error_set(err,"file %s%s: missing line beginning with \"%s=\"", indexname, suffix, rikptr->keystring); return -1; } *(rikptr->readflag) = false; } } return 0; } int gt_scannedprjkey_analyze(const char *indexname, const char *suffix, unsigned int linenum, const char *linebuffer, unsigned long linelength, GtScannedprjkeytable *scannedprjkeytable, GtError *err) { GtScannedprjkey *rikptr; bool found = false, haserr = false; unsigned long i; int retval; GtScannedprjvalue scannedprjvalue; uint32_t lengthofkey; gt_error_check(err); retval = gt_scannedprjkey_scanline(&lengthofkey, &scannedprjvalue, linebuffer, linelength, err); if (retval < 0) { haserr = true; } else { for (i=0; iarr); i++) { rikptr = gt_array_get(scannedprjkeytable->arr,i); if (memcmp(linebuffer, rikptr->keystring,(size_t) lengthofkey) == 0) { rikptr->found = true; if (rikptr->ptrdefined) { if (rikptr->uint32valueptr == NULL) { if (retval == 1) { *(rikptr->uint64valueptr) = scannedprjvalue.uint64value; } else { if (retval == 2) { gt_assert(rikptr->readdouble); *(rikptr->doublevalueptr) = scannedprjvalue.doublevalue; } else { gt_assert(retval == 0); *(rikptr->uint64valueptr) = (uint64_t) scannedprjvalue.uint32value; } } } else { if (retval == 1) { gt_error_set(err,"uint64value " Formatuint64_t " does not fit into %s", PRINTuint64_tcast(scannedprjvalue.uint64value), rikptr->keystring); haserr = true; break; } if (retval == 2) { gt_error_set(err,"double %.2f does not fit into %s", scannedprjvalue.doublevalue, rikptr->keystring); haserr = true; break; } *(rikptr->uint32valueptr) = scannedprjvalue.uint32value; } } found = true; break; } } if (!found) { gt_error_set(err,"file %s%s, line %u: cannot find key for \"%*.*s\"", indexname, suffix, linenum, (int) lengthofkey, (int) lengthofkey, linebuffer); haserr = true; } } return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-scanprj.h000066400000000000000000000044721211610345200203150ustar00rootroot00000000000000/* Copyright (c) 2005-2007 Stefan Kurtz Copyright (c) 2005-2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_SCANPRJ_H #define ESA_SCANPRJ_H #include "core/array.h" #include "core/error.h" #include "core/str.h" #include "core/logger.h" #define GT_SCANNEDPRJKEY_ADD(VALNAME,VAL,FORCEREAD)\ gt_scannedprjkey_add(scannedprjkeytable,VALNAME,VAL,sizeof (*(VAL)),\ false,FORCEREAD) typedef struct GtScannedprjkeytable GtScannedprjkeytable; GtScannedprjkeytable *gt_scannedprjkeytable_new(void); void gt_scannedprjkeytable_delete(GtScannedprjkeytable *scannedprjkeytable); void gt_scannedprjkey_add(GtScannedprjkeytable *scannedprjkeytable, const char *keystring, void *valueptr, size_t sizeval, bool readdouble, bool *readflag); int gt_scannedprjkey_analyze(const char *indexname, const char *suffix, unsigned int linenum, const char *linebuffer, unsigned long linelength, GtScannedprjkeytable *scannedprjkeytable, GtError *err); int gt_scannedprjkey_allkeysdefined( const char *indexname, const char *suffix, const GtScannedprjkeytable *scannedprjkeytable, GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/esa-seqread.c000066400000000000000000000210321211610345200202630ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/unused_api.h" #include "core/ma_api.h" #include "sarr-def.h" #include "esa-seqread.h" #include "esa-lcpval.h" #include "lcpoverflow.h" #include "esa-map.h" Sequentialsuffixarrayreader *gt_newSequentialsuffixarrayreaderfromfile( const char *indexname, unsigned int demand, Sequentialaccesstype seqactype, GtLogger *logger, GtError *err) { Sequentialsuffixarrayreader *ssar; ssar = gt_malloc(sizeof *ssar); ssar->suffixarray = gt_malloc(sizeof *ssar->suffixarray); gt_assert(seqactype == SEQ_mappedboth || seqactype == SEQ_scan); if ((seqactype == SEQ_mappedboth ? gt_mapsuffixarray : streamsuffixarray)(ssar->suffixarray, demand, indexname, logger, err) != 0) { gt_free(ssar->suffixarray); gt_free(ssar); return NULL; } ssar->nextsuftabindex = 0; ssar->nextlcptabindex = 1UL; ssar->largelcpindex = 0; ssar->seqactype = seqactype; ssar->suftab = NULL; gt_assert(ssar->suffixarray != NULL); ssar->encseq = ssar->suffixarray->encseq; ssar->readmode = ssar->suffixarray->readmode; ssar->numberofsuffixes = gt_encseq_total_length(ssar->encseq) + 1; ssar->nonspecials = gt_encseq_total_length(ssar->encseq) - gt_encseq_specialcharacters(ssar->encseq); ssar->lvi = NULL; return ssar; } Sequentialsuffixarrayreader *gt_newSequentialsuffixarrayreaderfromRAM( const GtEncseq *encseq, GtReadmode readmode) { Sequentialsuffixarrayreader *ssar; ssar = gt_malloc(sizeof *ssar); ssar->lvi = gt_newLcpvalueiterator(encseq,readmode); ssar->suffixarray = NULL; ssar->nextlcptabindex = 1UL; /* not required here */ ssar->largelcpindex = 0; /* not required here */ ssar->seqactype = SEQ_suftabfrommemory; ssar->readmode = readmode; ssar->encseq = encseq; ssar->numberofsuffixes = gt_encseq_total_length(encseq) + 1; ssar->nonspecials = gt_encseq_total_length(encseq) - gt_encseq_specialcharacters(encseq); return ssar; } void gt_updateSequentialsuffixarrayreaderfromRAM( Sequentialsuffixarrayreader *ssar, const ESASuffixptr *suftab, bool firstpage, unsigned long numberofsuffixes) { ssar->nextsuftabindex = 0; ssar->suftab = suftab; ssar->numberofsuffixes = numberofsuffixes; if (firstpage) { (void) gt_nextLcpvalueiterator(ssar->lvi, true, suftab, numberofsuffixes); } } void gt_freeSequentialsuffixarrayreader(Sequentialsuffixarrayreader **ssar) { if ((*ssar)->suffixarray != NULL) { gt_freesuffixarray((*ssar)->suffixarray); gt_free((*ssar)->suffixarray); } gt_freeLcpvalueiterator((*ssar)->lvi); gt_free(*ssar); } int gt_nextSequentiallcpvalue(unsigned long *currentlcp, Sequentialsuffixarrayreader *ssar, GtError *err) { GtUchar tmpsmalllcpvalue; int retval; switch (ssar->seqactype) { case SEQ_scan: retval = gt_readnextfromstream_GtUchar(&tmpsmalllcpvalue, &ssar->suffixarray->lcptabstream); if (retval > 0) { if (tmpsmalllcpvalue < LCPOVERFLOW) { *currentlcp = (unsigned long) tmpsmalllcpvalue; } else { Largelcpvalue tmpexception; retval = gt_readnextfromstream_Largelcpvalue(&tmpexception, &ssar->suffixarray->llvtabstream); if (retval == 0) { gt_error_set(err,"file %s: line %d: unexpected end of file when " "reading llvtab",__FILE__,__LINE__); return -1; } *currentlcp = tmpexception.value; } } else { return 0; } break; case SEQ_mappedboth: if (ssar->nextlcptabindex < ssar->numberofsuffixes) { tmpsmalllcpvalue = ssar->suffixarray->lcptab[ssar->nextlcptabindex++]; if (tmpsmalllcpvalue < LCPOVERFLOW) { *currentlcp = (unsigned long) tmpsmalllcpvalue; } else { gt_assert(ssar->suffixarray->llvtab[ssar->largelcpindex].position == ssar->nextlcptabindex-1); *currentlcp = ssar->suffixarray->llvtab[ssar->largelcpindex++].value; } } else { return 0; } break; case SEQ_suftabfrommemory: if (ssar->nextlcptabindex < ssar->numberofsuffixes) { *currentlcp = gt_nextLcpvalueiterator(ssar->lvi, true, ssar->suftab, ssar->numberofsuffixes); ssar->nextlcptabindex++; } else { return 0; } break; } return 1; } int gt_nextSequentialsuftabvalue(unsigned long *currentsuffix, Sequentialsuffixarrayreader *ssar) { if (ssar->seqactype == SEQ_scan) { #ifdef _LP64 if (ssar->suffixarray->suftabstream_GtUlong.fp != NULL) { return gt_readnextfromstream_GtUlong(currentsuffix, &ssar->suffixarray->suftabstream_GtUlong); } else { uint32_t readvalue = 0; int ret = gt_readnextfromstream_uint32_t( &readvalue, &ssar->suffixarray->suftabstream_uint32_t); *currentsuffix = (unsigned long) readvalue; return ret; } #else return gt_readnextfromstream_GtUlong(currentsuffix, &ssar->suffixarray->suftabstream_GtUlong); #endif } if (ssar->seqactype == SEQ_mappedboth) { *currentsuffix = ESASUFFIXPTRGET(ssar->suffixarray->suftab, ssar->nextsuftabindex++); return 1; } *currentsuffix = ESASUFFIXPTRGET(ssar->suftab,ssar->nextsuftabindex++); return 1; } const GtEncseq *gt_encseqSequentialsuffixarrayreader( const Sequentialsuffixarrayreader *ssar) { return ssar->encseq; } GtReadmode gt_readmodeSequentialsuffixarrayreader( const Sequentialsuffixarrayreader *ssar) { return ssar->readmode; } const ESASuffixptr *gt_suftabSequentialsuffixarrayreader( const Sequentialsuffixarrayreader *ssar) { gt_assert(ssar->seqactype != SEQ_scan); if (ssar->seqactype == SEQ_mappedboth) { return ssar->suffixarray->suftab; } return ssar->suftab; } const Suffixarray *gt_suffixarraySequentialsuffixarrayreader( const Sequentialsuffixarrayreader *ssar) { return ssar->suffixarray; } unsigned long gt_Sequentialsuffixarrayreader_nonspecials( const Sequentialsuffixarrayreader *ssar) { return ssar->nonspecials; } unsigned long gt_Sequentialsuffixarrayreader_totallength( const Sequentialsuffixarrayreader *ssar) { gt_assert(ssar->numberofsuffixes > 0); return ssar->numberofsuffixes - 1; } unsigned int gt_Sequentialsuffixarrayreader_prefixlength( const Sequentialsuffixarrayreader *ssar) { return ssar->suffixarray->prefixlength; } GtBcktab *gt_Sequentialsuffixarrayreader_bcktab( const Sequentialsuffixarrayreader *ssar) { return ssar->suffixarray->bcktab; } genometools-1.5.1/src/match/esa-seqread.h000066400000000000000000000265671211610345200203120ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_SEQREAD_H #define ESA_SEQREAD_H #include #include "core/str.h" #include "core/error.h" #include "core/encseq.h" #include "esa-lcpval.h" #include "sarr-def.h" #include "lcpoverflow.h" typedef enum { SEQ_scan, SEQ_mappedboth, SEQ_suftabfrommemory } Sequentialaccesstype; struct Sequentialsuffixarrayreader { Suffixarray *suffixarray; unsigned long nonspecials, numberofsuffixes, nextsuftabindex, /* for SEQ_mappedboth | SEQ_suftabfrommemory */ nextlcptabindex, /* for SEQ_mappedboth */ largelcpindex; /* SEQ_mappedboth */ Sequentialaccesstype seqactype; Lcpvalueiterator *lvi; const ESASuffixptr *suftab; const GtEncseq *encseq; GtReadmode readmode; }; typedef struct Sequentialsuffixarrayreader Sequentialsuffixarrayreader; Sequentialsuffixarrayreader *gt_newSequentialsuffixarrayreaderfromRAM( const GtEncseq *encseq, GtReadmode readmode); void gt_updateSequentialsuffixarrayreaderfromRAM( Sequentialsuffixarrayreader *ssar, const ESASuffixptr *suftab, bool firstpage, unsigned long numberofsuffixes); int gt_nextSequentiallcpvalue(unsigned long *currentlcp, Sequentialsuffixarrayreader *ssar, GtError *err); int gt_nextSequentialsuftabvalue(unsigned long *currentsuffix, Sequentialsuffixarrayreader *ssar); #define NEXTSEQUENTIALSUFTABVALUE_SEQ_scan_generic(SUFTABVALUE,SSAR,TYPE)\ {\ GtBufferedfile_ ## TYPE *buf\ = &(SSAR)->suffixarray->suftabstream_ ## TYPE;\ if (buf->nextread >= buf->nextfree)\ {\ buf->nextfree\ = (unsigned int) fread(buf->bufferedfilespace,\ sizeof (*buf->bufferedfilespace),\ (size_t) FILEBUFFERSIZE,\ buf->fp);\ if (ferror(buf->fp))\ {\ gt_error_set(err,"error when trying to read next %s",#TYPE);\ haserr = true;\ } else\ {\ buf->nextread = 0;\ if (buf->nextfree == 0)\ {\ gt_error_set(err,"Missing value in suftab");\ haserr = true;\ break;\ }\ }\ }\ SUFTABVALUE = (unsigned long)buf->bufferedfilespace[buf->nextread++];\ } #ifdef _LP64 #define NEXTSEQUENTIALSUFTABVALUE_SEQ_scan(SUFTABVALUE,SSAR)\ if ((SSAR)->suffixarray->suftabstream_GtUlong.fp != NULL)\ {\ NEXTSEQUENTIALSUFTABVALUE_SEQ_scan_generic(SUFTABVALUE,SSAR,GtUlong);\ } else\ {\ NEXTSEQUENTIALSUFTABVALUE_SEQ_scan_generic(SUFTABVALUE,SSAR,\ uint32_t);\ } #else #define NEXTSEQUENTIALSUFTABVALUE_SEQ_scan(SUFTABVALUE,SSAR)\ NEXTSEQUENTIALSUFTABVALUE_SEQ_scan_generic(SUFTABVALUE,SSAR,GtUlong) #endif #define NEXTSEQUENTIALSUFTABVALUE(SUFTABVALUE,SSAR)\ switch ((SSAR)->seqactype)\ {\ case SEQ_scan:\ NEXTSEQUENTIALSUFTABVALUE_SEQ_scan(SUFTABVALUE,SSAR);\ break;\ case SEQ_mappedboth:\ SUFTABVALUE = ESASUFFIXPTRGET((SSAR)->suffixarray->suftab,\ (SSAR)->nextsuftabindex++);\ break;\ case SEQ_suftabfrommemory:\ SUFTABVALUE = ESASUFFIXPTRGET((SSAR)->suftab,\ (SSAR)->nextsuftabindex++);\ break;\ } #define NEXTSEQUENTIALLCPTABVALUE(LCPVALUE,SSAR)\ {\ GtUchar tmpsmalllcpvalue;\ if ((SSAR)->seqactype == SEQ_scan)\ {\ int retval = gt_readnextfromstream_GtUchar(&tmpsmalllcpvalue,\ &(SSAR)->suffixarray->lcptabstream);\ if (retval > 0)\ {\ if (tmpsmalllcpvalue < LCPOVERFLOW)\ {\ LCPVALUE = (unsigned long) tmpsmalllcpvalue;\ } else\ {\ Largelcpvalue tmpexception;\ retval = gt_readnextfromstream_Largelcpvalue(&tmpexception,\ &(SSAR)->suffixarray->llvtabstream);\ if (retval == 0)\ {\ gt_error_set(err,"file %s: line %d: unexpected end "\ "of file when reading llvtab",\ __FILE__,__LINE__);\ haserr = true;\ break;\ }\ LCPVALUE = tmpexception.value;\ }\ } else\ {\ break;\ }\ } else\ {\ if ((SSAR)->seqactype == SEQ_mappedboth)\ {\ if ((SSAR)->nextlcptabindex < (SSAR)->numberofsuffixes)\ {\ tmpsmalllcpvalue\ = (SSAR)->suffixarray->lcptab[(SSAR)->nextlcptabindex++];\ if (tmpsmalllcpvalue < LCPOVERFLOW)\ {\ LCPVALUE = (unsigned long) tmpsmalllcpvalue;\ } else\ {\ gt_assert((SSAR)->suffixarray->llvtab[(SSAR)->largelcpindex]\ .position == (SSAR)->nextlcptabindex-1);\ LCPVALUE = (SSAR)->suffixarray->llvtab\ [(SSAR)->largelcpindex++].value;\ }\ } else\ {\ break;\ }\ } else\ {\ if ((SSAR)->nextlcptabindex < (SSAR)->numberofsuffixes)\ {\ LCPVALUE = gt_nextLcpvalueiterator((SSAR)->lvi,\ true,\ (SSAR)->suftab,\ (SSAR)->numberofsuffixes);\ (SSAR)->nextlcptabindex++;\ } else\ {\ break;\ }\ }\ }\ } #define NEXTSEQUENTIALLCPTABVALUEWITHLAST(LCPVALUE,LASTSUFTABVALUE,SSAR)\ {\ GtUchar tmpsmalllcpvalue;\ if ((SSAR)->seqactype == SEQ_scan)\ {\ int retval = gt_readnextfromstream_GtUchar(&tmpsmalllcpvalue,\ &(SSAR)->suffixarray->lcptabstream);\ if (retval > 0)\ {\ if (tmpsmalllcpvalue < LCPOVERFLOW)\ {\ LCPVALUE = (unsigned long) tmpsmalllcpvalue;\ } else\ {\ Largelcpvalue tmpexception;\ retval = gt_readnextfromstream_Largelcpvalue(&tmpexception,\ &(SSAR)->suffixarray->llvtabstream);\ if (retval == 0)\ {\ gt_error_set(err,"file %s: line %d: unexpected end "\ "of file when reading llvtab",\ __FILE__,__LINE__);\ haserr = true;\ break;\ }\ LCPVALUE = tmpexception.value;\ }\ } else\ {\ NEXTSEQUENTIALSUFTABVALUE_SEQ_scan(LASTSUFTABVALUE,SSAR);\ break;\ }\ } else\ {\ if ((SSAR)->seqactype == SEQ_mappedboth)\ {\ if ((SSAR)->nextlcptabindex < (SSAR)->numberofsuffixes)\ {\ tmpsmalllcpvalue\ = (SSAR)->suffixarray->lcptab[(SSAR)->nextlcptabindex++];\ if (tmpsmalllcpvalue < LCPOVERFLOW)\ {\ LCPVALUE = (unsigned long) tmpsmalllcpvalue;\ } else\ {\ gt_assert((SSAR)->suffixarray->llvtab[(SSAR)->largelcpindex]\ .position == (SSAR)->nextlcptabindex-1);\ LCPVALUE = (SSAR)->suffixarray->llvtab\ [(SSAR)->largelcpindex++].value;\ }\ } else\ {\ LASTSUFTABVALUE = ESASUFFIXPTRGET((SSAR)->suffixarray->suftab,\ (SSAR)->nextsuftabindex++);\ break;\ }\ } else\ {\ if ((SSAR)->nextlcptabindex < (SSAR)->numberofsuffixes)\ {\ LCPVALUE = gt_nextLcpvalueiterator((SSAR)->lvi,\ true,\ (SSAR)->suftab,\ (SSAR)->numberofsuffixes);\ (SSAR)->nextlcptabindex++;\ } else\ {\ LASTSUFTABVALUE = ESASUFFIXPTRGET((SSAR)->suftab,\ (SSAR)->nextsuftabindex++);\ break;\ }\ }\ }\ } Sequentialsuffixarrayreader *gt_newSequentialsuffixarrayreaderfromfile( const char *indexname, unsigned int demand, Sequentialaccesstype seqactype, GtLogger *logger, GtError *err); void gt_freeSequentialsuffixarrayreader(Sequentialsuffixarrayreader **ssar); const GtEncseq *gt_encseqSequentialsuffixarrayreader( const Sequentialsuffixarrayreader *ssar); GtReadmode gt_readmodeSequentialsuffixarrayreader( const Sequentialsuffixarrayreader *ssar); unsigned long gt_Sequentialsuffixarrayreader_nonspecials( const Sequentialsuffixarrayreader *ssar); const ESASuffixptr *gt_suftabSequentialsuffixarrayreader( const Sequentialsuffixarrayreader *ssar); const Suffixarray *gt_suffixarraySequentialsuffixarrayreader( const Sequentialsuffixarrayreader *ssar); unsigned long gt_Sequentialsuffixarrayreader_totallength( const Sequentialsuffixarrayreader *ssar); unsigned int gt_Sequentialsuffixarrayreader_prefixlength( const Sequentialsuffixarrayreader *ssar); GtBcktab *gt_Sequentialsuffixarrayreader_bcktab( const Sequentialsuffixarrayreader *ssar); #endif genometools-1.5.1/src/match/esa-shulen.c000066400000000000000000000474421211610345200201520ustar00rootroot00000000000000/* Copyright (c) 2010 Stefan Kurtz Copyright (c) 2011 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "core/array2dim_api.h" #include "core/logger.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "core/format64.h" #undef SHUDEBUG #ifdef SHUDEBUG #include "core/encseq.h" #endif #include "esa-seqread.h" #include "esa-splititv.h" #include "shu_unitfile.h" #include "esa-shulen.h" typedef struct /* information stored for each node of the lcp interval tree */ { unsigned long *gnumdist; #ifdef SHUDEBUG unsigned long id; #endif } GtBUinfo_shulen; struct GtBUstate_shulen /* global information */ { unsigned long numofdbfiles; uint64_t **shulengthdist; const GtEncseq *encseq; unsigned long *file_to_genome_map; #undef GENOMEDIFF_PAPER_IMPL #ifdef GENOMEDIFF_PAPER_IMPL unsigned long *leafdist; #endif #ifdef SHUDEBUG unsigned long lastleafnumber, nextid; #endif /* the remaining components are used for the genomediff function called from the suffixerator */ unsigned long idxoffset, previousbucketlastsuffix; bool firstedgefromroot; GtShuUnitFileInfo *unit_info; void *stack; }; static void resetgnumdist_shulen(GtBUinfo_shulen *father, unsigned long numofdbfiles) { unsigned long idx; #ifdef SHUDEBUG printf("reset node %lu\n",father->id); #endif for (idx = 0; idx < numofdbfiles; idx++) { father->gnumdist[idx] = 0; } } static void initBUinfo_shulen(GtBUinfo_shulen *buinfo, GT_UNUSED GtBUstate_shulen *state) { #ifdef SHUDEBUG buinfo->id = state->nextid++; #endif buinfo->gnumdist = NULL; } static void freeBUinfo_shulen(GtBUinfo_shulen *buinfo, GT_UNUSED GtBUstate_shulen *state) { gt_free(buinfo->gnumdist); } static void contribute_shulen(GT_UNUSED int line, uint64_t **shulengthdist, unsigned long referidx, unsigned long shulenidx, unsigned long count, unsigned long depth) { #ifdef SHUDEBUG printf("line %d: add[%lu][%lu]+=count=%lu*depth=%lu\n",line,referidx, shulenidx,count,depth); #endif shulengthdist[referidx][shulenidx] += count * depth; } #ifdef SHUDEBUG static void shownode(int line, const GtBUstate_shulen *state, const char *kind, const GtBUinfo_shulen *node) { unsigned long idx; printf("line %d: %s(id=%lu,numofdbfiles=%lu):",line,kind,node->id, state->numofdbfiles); for (idx=0; idx < state->numofdbfiles; idx++) { if (node->gnumdist[idx] > 0) { printf(" %lu->%lu",idx,node->gnumdist[idx]); } } printf("\n"); } #endif static void cartproduct_shulen(GtBUstate_shulen *state, unsigned long depth, const unsigned long *refnumdist, const unsigned long *querynumdist) { unsigned long referidx, shulenidx; for (referidx=0; referidx < state->numofdbfiles; referidx++) { if (refnumdist[referidx] > 0 && querynumdist[referidx] == 0) { for (shulenidx=0; shulenidx < state->numofdbfiles; shulenidx++) { if (querynumdist[shulenidx] > 0) { gt_assert(referidx != shulenidx); contribute_shulen(__LINE__, state->shulengthdist, referidx, shulenidx, querynumdist[shulenidx], depth + 1); } } } } } static void shu_compute_leaf_edge_contrib(GtBUstate_shulen *state, const unsigned long *fathernumdist, unsigned long gnum, unsigned long fatherdepth) { unsigned long idx; #ifdef GENOMEDIFF_PAPER_IMPL gt_assert(state->leafdist != NULL); for (idx = 0; idx < state->numofdbfiles; idx++) { state->leafdist[idx] = 0; } state->leafdist[gnum] = 1UL; cartproduct_shulen(state,fatherdepth,fathernumdist,state->leafdist); cartproduct_shulen(state,fatherdepth,state->leafdist,fathernumdist); #else for (idx = 0; idx < state->numofdbfiles; idx++) { if (idx != gnum && fathernumdist[idx] > 0) { contribute_shulen(__LINE__, state->shulengthdist, idx, gnum, 1UL, fatherdepth+1); if (fathernumdist[gnum] == 0) { contribute_shulen(__LINE__, state->shulengthdist, gnum, idx, fathernumdist[idx], fatherdepth + 1); } } } #endif } static int processleafedge_shulen(bool firstsucc, unsigned long fatherdepth, GtBUinfo_shulen *father, unsigned long leafnumber, GtBUstate_shulen *state, GT_UNUSED GtError *err) { unsigned long gnum; #ifdef SHUDEBUG printf("processleafedge %lu firstsucc=%s, " " depth(father)=%lu, path=", leafnumber, firstsucc ? "true" : "false", fatherdepth); if (fatherdepth > 0) { gt_encseq_showatstartposwithdepth(stdout, state->encseq, GT_READMODE_FORWARD, leafnumber, fatherdepth); } printf("\n"); #endif if (state->file_to_genome_map != NULL) { gnum = state->file_to_genome_map[gt_encseq_filenum(state->encseq, leafnumber)]; } else { gnum = gt_encseq_filenum(state->encseq,leafnumber); } if (firstsucc) { gt_assert(father != NULL); if (father->gnumdist == NULL) { father->gnumdist = gt_malloc(sizeof (*father->gnumdist) * state->numofdbfiles); } resetgnumdist_shulen(father,state->numofdbfiles); #ifdef SHUDEBUG shownode(__LINE__,state,"father",father); #endif } else { #ifdef SHUDEBUG shownode(__LINE__,state,"father",father); #endif shu_compute_leaf_edge_contrib(state,father->gnumdist,gnum,fatherdepth); } father->gnumdist[gnum]++; #ifdef SHUDEBUG printf("gnumdist[id=%lu,filenum=%lu]=%lu\n",father->id,gnum, father->gnumdist[gnum]); state->lastleafnumber = leafnumber; #endif return 0; } static int processbranchingedge_shulen(bool firstsucc, unsigned long fatherdepth, GtBUinfo_shulen *father, GT_UNUSED unsigned long sondepth, GT_UNUSED unsigned long sonwidth, GtBUinfo_shulen *son, GtBUstate_shulen *state, GT_UNUSED GtError *err) { unsigned long idx; #ifdef SHUDEBUG printf("%s firstsucc=%s, depth(father)=%lu,path=",__func__, firstsucc ? "true" : "false",fatherdepth); if (fatherdepth > 0) { gt_encseq_showatstartposwithdepth(stdout, state->encseq, GT_READMODE_FORWARD, state->lastleafnumber, fatherdepth); } printf("\n"); #endif if (firstsucc) { gt_assert(father != NULL); if (father->gnumdist == NULL) { father->gnumdist = gt_malloc(sizeof (*father->gnumdist) * state->numofdbfiles); resetgnumdist_shulen(father,state->numofdbfiles); } #ifdef SHUDEBUG shownode(__LINE__,state,"father",father); #endif } else { #ifdef SHUDEBUG gt_assert(father != NULL); shownode(__LINE__,state,"father",father); gt_assert(son != NULL); shownode(__LINE__,state,"son",son); #endif cartproduct_shulen(state, fatherdepth, father->gnumdist, son->gnumdist); cartproduct_shulen(state, fatherdepth, son->gnumdist, father->gnumdist); } if (son != NULL) { for (idx = 0; idx < state->numofdbfiles; idx++) { father->gnumdist[idx] += son->gnumdist[idx]; son->gnumdist[idx] = 0; #ifdef SHUDEBUG printf("gnumdist[id=%lu,filenum=%lu]=%lu\n",father->id,idx, father->gnumdist[idx]); printf("gnumdist[id=%lu,filenum=%lu]=0\n",son->id,idx); #endif } } return 0; } static uint64_t **shulengthdist_new(unsigned long numofdbfiles) { unsigned long idx1, idx2; uint64_t **shulengthdist; gt_array2dim_malloc(shulengthdist,numofdbfiles,numofdbfiles); for (idx1=0; idx1 < numofdbfiles; idx1++) { for (idx2=0; idx2 < numofdbfiles; idx2++) { shulengthdist[idx1][idx2] = 0; } } return shulengthdist; } /* XXX: check what kind of const annotation is necesseay to make the contents of shulengthdist non-writable. */ static void shulengthdist_print(const GtStrArray *file_names, const uint64_t * const*shulengthdist, unsigned long numofdbfiles) { unsigned long idx1, idx2; /*shulengthdist[0][0] = 0; for testing */ printf("# sum of shulen\n%lu\n",numofdbfiles); for (idx2=0; idx2 < numofdbfiles; idx2++) { if (file_names != NULL) { printf("%s\t",gt_str_array_get(file_names,idx2)); } else { printf("%lu\t",idx2); } for (idx1=0; idx1 < numofdbfiles; idx1++) { if (idx1 != idx2) { printf(Formatuint64_t"\t", PRINTuint64_tcast(shulengthdist[idx1][idx2])); } else { printf("0.000000\t"); } } printf("\n"); } } #include "esa-bottomup-shulen.inc" int gt_multiesa2shulengthdist_print(Sequentialsuffixarrayreader *ssar, const GtEncseq *encseq, GtError *err) { GtBUstate_shulen *state; bool haserr = false; state = gt_malloc(sizeof (*state)); state->numofdbfiles = gt_encseq_num_of_files(encseq); state->encseq = encseq; #ifdef GENOMEDIFF_PAPER_IMPL state->leafdist = gt_malloc(sizeof (*state->leafdist) * state->numofdbfiles); #endif #ifdef SHUDEBUG state->nextid = 0; #endif state->shulengthdist = shulengthdist_new(state->numofdbfiles); if (gt_esa_bottomup_shulen(ssar, state, err) != 0) { haserr = true; } if (!haserr) { shulengthdist_print(NULL,(const uint64_t * const*) state->shulengthdist, state->numofdbfiles); } gt_array2dim_delete(state->shulengthdist); #ifdef GENOMEDIFF_PAPER_IMPL gt_free(state->leafdist); #endif gt_free(state); return haserr ? -1 : 0; } static unsigned long gt_esa2shulengthatposition(const Suffixarray *suffixarray, unsigned long totallength, unsigned long offset, unsigned long left, unsigned long right, const GtUchar *qstart, const GtUchar *qend) { Simplelcpinterval itv; const GtUchar *qptr; gt_assert(left < right); itv.left = left; itv.right = right; /*printf("\n");*/ for (qptr = qstart; /* Nothing */; qptr++, offset++) { if (itv.left <= itv.right) { /* if (qptr < qend) { printf("read %u\n",(unsigned int) *qptr); } */ if (qptr >= qend || ISSPECIAL(*qptr) || !gt_lcpintervalfindcharchildintv(suffixarray->encseq, suffixarray->readmode, totallength, suffixarray->suftab, &itv, *qptr, offset, itv.left, itv.right)) { break; } } else { break; } } /*printf("add %lu\n",offset+1); */ return offset+1; } static unsigned long gt_esa2shulengthquery(const Suffixarray *suffixarray, const GtUchar *query, unsigned long querylen) { const GtUchar *qptr; unsigned long totalgmatchlength = 0, gmatchlength, remaining; unsigned long totallength = gt_encseq_total_length(suffixarray->encseq); for (qptr = query, remaining = querylen; remaining > 0; qptr++, remaining--) { if (ISSPECIAL(*qptr)) { gmatchlength = 0; } else { gmatchlength = gt_esa2shulengthatposition(suffixarray, totallength, 0, 0, totallength, qptr, query+querylen); } totalgmatchlength += gmatchlength; } return totalgmatchlength; } int gt_esa2shulengthqueryfiles(unsigned long *totalgmatchlength, const Suffixarray *suffixarray, const GtStrArray *queryfilenames, GtError *err) { bool haserr = false; GtSeqIterator *seqit; const GtUchar *query; unsigned long querylen; char *desc = NULL; int retval; GtAlphabet *alphabet; gt_error_check(err); alphabet = gt_encseq_alphabet(suffixarray->encseq); gt_assert(gt_str_array_size(queryfilenames) == 1UL); seqit = gt_seq_iterator_sequence_buffer_new(queryfilenames, err); if (!seqit) { haserr = true; } if (!haserr) { gt_seq_iterator_set_symbolmap(seqit, gt_alphabet_symbolmap(alphabet)); for (; /* Nothing */; ) { retval = gt_seq_iterator_next(seqit, &query, &querylen, &desc, err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } *totalgmatchlength += gt_esa2shulengthquery(suffixarray,query,querylen); } gt_seq_iterator_delete(seqit); } return haserr ? -1 : 0; } int gt_multiesa2shulengthdist(Sequentialsuffixarrayreader *ssar, const GtEncseq *encseq, uint64_t **shulen, const GtShuUnitFileInfo *unit_info, GtError *err) { GtBUstate_shulen *bustate; bool haserr = false; bustate = gt_malloc(sizeof (*bustate)); bustate->numofdbfiles = unit_info->num_of_genomes; bustate->file_to_genome_map = unit_info->map_files; bustate->encseq = encseq; #ifdef GENOMEDIFF_PAPER_IMPL bustate->leafdist = gt_malloc(sizeof (*bustate->leafdist) * bustate->numofdbfiles); #endif #ifdef SHUDEBUG bustate->nextid = 0; #endif bustate->shulengthdist = shulen; if (gt_esa_bottomup_shulen(ssar, bustate, err) != 0) { haserr = true; } #ifdef GENOMEDIFF_PAPER_IMPL gt_free(bustate->leafdist); #endif gt_free(bustate); return haserr ? -1 : 0; } GtBUstate_shulen *gt_sfx_multiesashulengthdist_new(const GtEncseq *encseq, GenomediffInfo *gd_info) { GtBUstate_shulen *bustate; bustate = gt_malloc(sizeof (*bustate)); bustate->encseq = encseq; bustate->previousbucketlastsuffix = ULONG_MAX; bustate->idxoffset = 0; bustate->firstedgefromroot = false; #ifdef SHUDEBUG bustate->nextid = 0; #endif if (gd_info == NULL) bustate->unit_info = gt_shu_unit_info_new(encseq); else bustate->unit_info = gd_info->unit_info; bustate->numofdbfiles = gt_encseq_num_of_files(encseq); #ifdef GENOMEDIFF_PAPER_IMPL bustate->leafdist = gt_malloc(sizeof (*bustate->leafdist) * bustate->numofdbfiles); #endif bustate->file_to_genome_map = bustate->unit_info->map_files; if (gd_info == NULL) bustate->shulengthdist = shulengthdist_new(bustate->numofdbfiles); else bustate->shulengthdist = gd_info->shulensums; bustate->stack = (void *) gt_GtArrayGtBUItvinfo_new_shulen(); return bustate; } #include "esa-bottomup-shulen-RAM.inc" int gt_sfx_multiesa2shulengthdist(GtBUstate_shulen *bustate, const unsigned long *bucketofsuffixes, const uint32_t *bucketofsuffixes_uint32, const GtLcpvaluetype *lcptab_bucket, unsigned long numberofsuffixes, GtError *err) { bool haserr = false; if (bustate->previousbucketlastsuffix != ULONG_MAX && gt_esa_bottomup_RAM_previousfromlast_shulen( bustate->previousbucketlastsuffix, (unsigned long) lcptab_bucket[0], bustate->stack, bustate, err) != 0) { haserr = true; } if (!haserr) { if (gt_esa_bottomup_RAM_shulen(bucketofsuffixes, bucketofsuffixes_uint32, lcptab_bucket, numberofsuffixes, bustate->stack, bustate, err) != 0) { haserr = true; } } bustate->idxoffset += numberofsuffixes; return haserr ? -1 : 0; } int gt_sfx_multiesa2shulengthdist_last(GtBUstate_shulen *bustate,GtError *err) { if (bustate->previousbucketlastsuffix != ULONG_MAX && gt_esa_bottomup_RAM_previousfromlast_shulen( bustate->previousbucketlastsuffix, 0, bustate->stack, bustate, err) != 0) { return -1; } return 0; } void gt_sfx_multiesashulengthdist_delete(GtBUstate_shulen *bustate, GenomediffInfo *gd_info) { if (bustate == NULL) { return; } gt_assert(bustate->shulengthdist != NULL); if (gd_info == NULL) { shulengthdist_print(bustate->unit_info->file_names, (const uint64_t * const*) bustate->shulengthdist, bustate->numofdbfiles); gt_array2dim_delete(bustate->shulengthdist); gt_shu_unit_info_delete(bustate->unit_info); } gt_GtArrayGtBUItvinfo_delete_shulen(bustate->stack,bustate); #ifdef GENOMEDIFF_PAPER_IMPL gt_free(bustate->leafdist); #endif gt_free(bustate); } genometools-1.5.1/src/match/esa-shulen.h000066400000000000000000000052271211610345200201520ustar00rootroot00000000000000/* Copyright (c) 2010 Stefan Kurtz Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_SHULEN_H #define ESA_SHULEN_H #include "core/encseq_api.h" #include "core/error_api.h" #include "core/str_array.h" #include "match/esa-seqread.h" #include "match/shu_unitfile.h" #include "match/genomediff_opt.h" typedef struct GtBUstate_shulen GtBUstate_shulen; int gt_multiesa2shulengthdist_print(Sequentialsuffixarrayreader *ssar, const GtEncseq *encseq, GtError *err); int gt_esa2shulengthqueryfiles(unsigned long *totalgmatchlength, const Suffixarray *suffixarray, const GtStrArray *queryfilenames, GtError *err); int gt_multiesa2shulengthdist(Sequentialsuffixarrayreader *ssar, const GtEncseq *encseq, uint64_t **shulen, const GtShuUnitFileInfo *unit_info, GtError *err); GtBUstate_shulen *gt_sfx_multiesashulengthdist_new(const GtEncseq *encseq, GenomediffInfo *gd_info); int gt_sfx_multiesa2shulengthdist(GtBUstate_shulen *bustate, const unsigned long *bucketofsuffixes, const uint32_t *bucketofsuffixes_uint32, const GtLcpvaluetype *lcptab_bucket, unsigned long numberofsuffixes, GtError *err); int gt_sfx_multiesa2shulengthdist_last(GtBUstate_shulen *bustate, GtError *err); void gt_sfx_multiesashulengthdist_delete(GtBUstate_shulen *bustate, GenomediffInfo *gd_info); #endif genometools-1.5.1/src/match/esa-splititv.c000066400000000000000000000141631211610345200205240ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/chardef.h" #include "core/divmodmul.h" #include "core/types_api.h" #include "esa-splititv.h" #define SEQUENCE(ENCSEQ,POS) (((POS) == totallength) \ ? (GtUchar) SEPARATOR\ : gt_encseq_get_encoded_char(ENCSEQ, \ POS, \ readmode)) static unsigned long lcpintervalfindrightbound(const GtEncseq *encseq, GtReadmode readmode, unsigned long totallength, const ESASuffixptr *suftab, GtUchar cc, unsigned long offset, unsigned long left, unsigned long right) { unsigned long pos, mid; GtUchar midcc; while (right > left+1) { mid = GT_DIV2(left+right); pos = ESASUFFIXPTRGET(suftab,mid) + offset; midcc = SEQUENCE(encseq,pos); if (cc < midcc) { right = mid; } else { left = mid; } } return left; } bool gt_lcpintervalfindcharchildintv(const GtEncseq *encseq, GtReadmode readmode, unsigned long totallength, const ESASuffixptr *suftab, Simplelcpinterval *itv, GtUchar cc, unsigned long offset, unsigned long left, unsigned long right) { GtUchar leftcc, rightcc; unsigned long pos, rightbound, leftbound = left; pos = ESASUFFIXPTRGET(suftab,right) + offset; rightcc = SEQUENCE(encseq,pos); while (true) { pos = ESASUFFIXPTRGET(suftab,leftbound) + offset; leftcc = SEQUENCE(encseq,pos); if (leftcc == rightcc) { break; } rightbound = lcpintervalfindrightbound(encseq,readmode, totallength,suftab,leftcc, offset,leftbound,right); if (leftcc == cc) { itv->left = leftbound; itv->right = rightbound; return true; } if (leftcc > cc) { return false; } leftbound = rightbound+1; } if (leftcc == cc) { itv->left = leftbound; itv->right = right; return true; } return false; } #define ADDCURRENTLBOUND(V)\ bwci->spaceBoundswithchar[bwci->nextfreeBoundswithchar].lbound = V #define ADDPREVIOUSRBOUND(V)\ if (bwci->nextfreeBoundswithchar > 0)\ {\ bwci->spaceBoundswithchar[bwci->nextfreeBoundswithchar-1].rbound = V;\ } #define ADDCURRENTINCHAR(V)\ bwci->spaceBoundswithchar[bwci->nextfreeBoundswithchar++].inchar = V void gt_lcpintervalsplitwithoutspecial(GtArrayBoundswithchar *bwci, const GtEncseq *encseq, GtReadmode readmode, unsigned long totallength, const ESASuffixptr *suftab, unsigned long parentoffset, unsigned long parentleft, unsigned long parentright) { GtUchar leftcc, rightcc; unsigned long rightbound = 0, leftbound = parentleft; /* call gt_lcpintervalextendlcp and verify if interval can be extended by some character */ bwci->nextfreeBoundswithchar = 0; rightcc = SEQUENCE(encseq,ESASUFFIXPTRGET(suftab,parentright) + parentoffset); while (true) { leftcc = SEQUENCE(encseq,ESASUFFIXPTRGET(suftab,leftbound) + parentoffset); gt_assert(bwci->nextfreeBoundswithchar < bwci->allocatedBoundswithchar); if (ISSPECIAL(leftcc)) { ADDPREVIOUSRBOUND(rightbound); ADDCURRENTLBOUND(rightbound+1); return; } ADDPREVIOUSRBOUND(leftbound-1); ADDCURRENTLBOUND(leftbound); ADDCURRENTINCHAR(leftcc); if (leftcc == rightcc) { break; } rightbound = lcpintervalfindrightbound(encseq,readmode,totallength,suftab, leftcc,parentoffset, leftbound,parentright); leftbound = rightbound+1; } gt_assert(bwci->nextfreeBoundswithchar < bwci->allocatedBoundswithchar); ADDPREVIOUSRBOUND(parentright); ADDCURRENTLBOUND(parentright+1); } GtUchar gt_lcpintervalextendlcp(const GtEncseq *encseq, GtReadmode readmode, const ESASuffixptr *suftab, unsigned long totallength, GtUchar alphasize, unsigned long parentoffset, unsigned long parentleft, unsigned long parentright) { GtUchar ccl, ccr; ccl = SEQUENCE(encseq,ESASUFFIXPTRGET(suftab,parentleft) + parentoffset); ccr = SEQUENCE(encseq,ESASUFFIXPTRGET(suftab,parentright) + parentoffset); if (ccl != ccr || ISSPECIAL(ccl)) { return alphasize; } gt_assert(ccl < alphasize); return ccl; } genometools-1.5.1/src/match/esa-splititv.h000066400000000000000000000047701211610345200205340ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_SPLITITV_H #define ESA_SPLITITV_H #include "core/arraydef.h" #include "core/types_api.h" #include "core/encseq.h" #include "match/sarr-def.h" #include "splititv.h" typedef struct { unsigned long left, right; } Simplelcpinterval; bool gt_lcpintervalfindcharchildintv(const GtEncseq *encseq, GtReadmode readmode, unsigned long totallength, const ESASuffixptr *suftab, Simplelcpinterval *itv, GtUchar cc, unsigned long offset, unsigned long left, unsigned long right); void gt_lcpintervalsplitwithoutspecial(GtArrayBoundswithchar *bwci, const GtEncseq *encseq, GtReadmode readmode, unsigned long totallength, const ESASuffixptr *suftab, unsigned long parentoffset, unsigned long parentleft, unsigned long parentright); GtUchar gt_lcpintervalextendlcp(const GtEncseq *encseq, GtReadmode readmode, const ESASuffixptr *suftab, unsigned long totallength, GtUchar alphasize, unsigned long parentoffset, unsigned long parentleft, unsigned long parentright); #endif genometools-1.5.1/src/match/esa-spmitvs.c000066400000000000000000000047331211610345200203550ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "core/mathsupport.h" #include "match/esa_spmitvs_visitor.h" #include "esa-spmitvs.h" #include "esa-bottomup.h" int gt_process_spmitv(const char *inputindex, GtLogger *logger, GtError *err) { bool haserr = false; Sequentialsuffixarrayreader *ssar; gt_error_check(err); ssar = gt_newSequentialsuffixarrayreaderfromfile(inputindex, SARR_LCPTAB | SARR_SUFTAB | SARR_ESQTAB, SEQ_scan, logger, err); if (ssar == NULL) { haserr = true; } if (!haserr) { GtESAVisitor *ev; unsigned long nonspecials; nonspecials = gt_Sequentialsuffixarrayreader_nonspecials(ssar); ev = gt_esa_spmitvs_visitor_new( gt_encseqSequentialsuffixarrayreader(ssar), gt_readmodeSequentialsuffixarrayreader(ssar), gt_Sequentialsuffixarrayreader_prefixlength(ssar), err); if (gt_esa_bottomup(ssar, ev, err) != 0) { haserr = true; } else { gt_esa_spmitvs_visitor_print_results((GtESASpmitvsVisitor*) ev, nonspecials); } gt_esa_visitor_delete(ev); } if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } return haserr ? -1 : 0; } genometools-1.5.1/src/match/esa-spmitvs.h000066400000000000000000000020231211610345200203500ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_SPMITVS_H #define ESA_SPMITVS_H #include "core/logger_api.h" #include "core/error_api.h" int gt_process_spmitv(const char *inputindex, GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/esa-spmsk.c000066400000000000000000000133671211610345200200100ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/unused_api.h" #include "core/readmode_api.h" #include "core/error_api.h" #include "core/arraydef.h" #include "esa-bottomup.h" #include "esa-spmsk.h" typedef struct { unsigned long firstinW; } GtBUinfo_spmsk; struct GtBUstate_spmsk /* global information */ { const GtEncseq *encseq; GtReadmode readmode; unsigned long totallength, minmatchlength, spmcounter, spaceforbucketprocessing; bool countspms, outputspms; GtArrayGtUlong Wset, Lset; /* Declare the stack as void as the real type GtArrayGtBUItvinfo_spmsk is declared later in esa-bottomup-spmsk.inc */ void *stack; }; static void initBUinfo_spmsk(GtBUinfo_spmsk *buinfo, GT_UNUSED GtBUstate_spmsk *state) { buinfo->firstinW = ULONG_MAX; } static void freeBUinfo_spmsk(GT_UNUSED GtBUinfo_spmsk *info, GT_UNUSED GtBUstate_spmsk *state) { return; } static int processleafedge_spmsk(bool firstedge, unsigned long fd, GtBUinfo_spmsk *finfo, unsigned long seqnum, unsigned long relpos, GtBUstate_spmsk *state, GT_UNUSED GtError *err) { if (fd >= state->minmatchlength) { if (firstedge) { gt_assert(finfo != NULL); ((GtBUinfo_spmsk *) finfo)->firstinW = state->Wset.nextfreeGtUlong; } if (relpos == 0) { GT_STOREINARRAY(&state->Wset,GtUlong,128,seqnum); } if (relpos + fd == gt_encseq_seqlength(state->encseq,seqnum)) { GT_STOREINARRAY(&state->Lset,GtUlong,128,seqnum); } } return 0; } static int processlcpinterval_spmsk(unsigned long lcp, GtBUinfo_spmsk *info, GtBUstate_spmsk *state, GT_UNUSED GtError *err) { if (lcp >= state->minmatchlength) { unsigned long lidx, widx, firstpos; gt_assert(info != NULL); firstpos = ((GtBUinfo_spmsk *) info)->firstinW; for (lidx = 0; lidx < state->Lset.nextfreeGtUlong; lidx++) { if (state->outputspms) { unsigned long lpos = state->Lset.spaceGtUlong[lidx]; for (widx = firstpos; widx < state->Wset.nextfreeGtUlong; widx++) { printf("%lu %lu %lu\n",lpos,state->Wset.spaceGtUlong[widx],lcp); } } else { gt_assert(state->countspms); if (firstpos < state->Wset.nextfreeGtUlong) { state->spmcounter += state->Wset.nextfreeGtUlong - firstpos; } } } state->Lset.nextfreeGtUlong = 0; } else { state->Wset.nextfreeGtUlong = 0; } return 0; } #include "esa-bottomup-spmsk.inc" GtBUstate_spmsk *gt_spmsk_inl_new(const GtEncseq *encseq, GtReadmode readmode, unsigned long minmatchlength, bool countspms, bool outputspms, GT_UNUSED const char *indexname) { GtBUstate_spmsk *state = gt_malloc(sizeof (*state)); state->encseq = encseq; state->readmode = readmode; state->totallength = gt_encseq_total_length(encseq); state->minmatchlength = minmatchlength; state->countspms = countspms; state->outputspms = outputspms; state->spmcounter = 0; state->stack = (void *) gt_GtArrayGtBUItvinfo_new(); GT_INITARRAY(&state->Wset,GtUlong); GT_INITARRAY(&state->Lset,GtUlong); return state; } unsigned long gt_spmsk_inl_delete(GtBUstate_spmsk *state) { if (state != NULL) { unsigned long tmpcount; GT_FREEARRAY(&state->Wset,GtUlong); GT_FREEARRAY(&state->Lset,GtUlong); gt_GtArrayGtBUItvinfo_delete_spmsk( (GtArrayGtBUItvinfo_spmsk *) state->stack,state); tmpcount = state->spmcounter; gt_free(state); return tmpcount; } return 0; } int gt_spmsk_inl_process(void *data, const unsigned long *seqnum_relpos_bucket, const GtSeqnumrelpos *snrp, const uint16_t *lcptab_bucket, unsigned long nonspecials, unsigned long spaceforbucketprocessing, GtError *err) { GtBUstate_spmsk *state = (GtBUstate_spmsk *) data; gt_assert(snrp != NULL); gt_assert(lcptab_bucket != NULL); state->spaceforbucketprocessing = spaceforbucketprocessing; if (gt_esa_bottomup_RAM_spmsk(seqnum_relpos_bucket, lcptab_bucket, nonspecials, (GtArrayGtBUItvinfo_spmsk *) state->stack, state, snrp, err) != 0) { return -1; } return 0; } void gt_spmsk_inl_process_end(GT_UNUSED void *data) { return; } genometools-1.5.1/src/match/esa-spmsk.h000066400000000000000000000050411211610345200200030ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_SPMSK_H #define ESA_SPMSK_H #include #include "core/unused_api.h" #include "core/error_api.h" #include "core/encseq_api.h" #include "seqnumrelpos.h" typedef struct GtBUstate_spmsk GtBUstate_spmsk; GtBUstate_spmsk *gt_spmsk_inl_new(const GtEncseq *encseq, GtReadmode readmode, unsigned long minmatchlength, bool countspms, bool outputspms, GT_UNUSED const char *indexname); unsigned long gt_spmsk_inl_delete(GtBUstate_spmsk *state); int gt_spmsk_inl_process(void *data, const unsigned long *seqnum_relpos_bucket, const GtSeqnumrelpos *snrp, const uint16_t *lcptab_bucket, unsigned long nonspecials, unsigned long spaceforbucketprocessing, /* this parameter can be 0 in case where user defined memlimit or derived memlimit is not available. If it is available then, value is > 0 and gives the amount of space in bytes which can be used in the bucket processing without exceeding the given memlimit. Note that after each part, the bucket processing machinery must delete its space to a minimum, as all space required adds up to the maximum. */ GtError *err); void gt_spmsk_inl_process_end(GT_UNUSED void *data); #endif genometools-1.5.1/src/match/esa_lcpintervals_visitor.c000066400000000000000000000070401211610345200232110ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/class_alloc_lock.h" #include "core/unused_api.h" #include "esa_visitor_rep.h" #include "esa_lcpintervals_visitor.h" struct GtESALcpintervalsVisitor { const GtESAVisitor parent_instance; }; #define gt_esa_lcpitvs_visitor_cast(GV)\ gt_esa_visitor_cast(gt_esa_lcpitvs_visitor_class(), GV) static int gt_esa_lcpitvs_visitor_processleafedge(GT_UNUSED GtESAVisitor *ev, bool firstsucc, unsigned long fd, GT_UNUSED unsigned long flb, GT_UNUSED GtESAVisitorInfo *info, unsigned long leafnumber, GT_UNUSED GtError *err) { printf("L %c %lu %lu %lu\n", firstsucc ? '1' : '0', fd, flb, leafnumber); return 0; } static int gt_esa_lcpitvs_visitor_processbranchingedge( GT_UNUSED GtESAVisitor *ev, bool firstsucc, unsigned long fd, unsigned long flb, GT_UNUSED GtESAVisitorInfo *finfo, unsigned long sd, unsigned long slb, GT_UNUSED unsigned long srb, GT_UNUSED GtESAVisitorInfo *sinfo, GT_UNUSED GtError *err) { printf("B %c %lu %lu %lu %lu\n", firstsucc ? '1' : '0', fd, flb, sd, slb); return 0; } static const GtESAVisitorClass* gt_esa_lcpitvs_visitor_class(void) { static const GtESAVisitorClass *esc = NULL; gt_class_alloc_lock_enter(); if (!esc) { esc = gt_esa_visitor_class_new(sizeof (GtESALcpintervalsVisitor), NULL, gt_esa_lcpitvs_visitor_processleafedge, gt_esa_lcpitvs_visitor_processbranchingedge, NULL, NULL, NULL); } gt_class_alloc_lock_leave(); return esc; } GtESAVisitor* gt_esa_lcpitvs_visitor_new(void) { GtESAVisitor *ev = gt_esa_visitor_create(gt_esa_lcpitvs_visitor_class()); return ev; } genometools-1.5.1/src/match/esa_lcpintervals_visitor.h000066400000000000000000000021121211610345200232110ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_LCPINTERVALS_VISITOR_H #define ESA_LCPINTERVALS_VISITOR_H #include "match/esa_visitor.h" typedef struct GtESALcpintervalsVisitor GtESALcpintervalsVisitor; GtESAVisitor* gt_esa_lcpitvs_visitor_new(void); #endif genometools-1.5.1/src/match/esa_spmitvs_visitor.c000066400000000000000000000203171211610345200222120ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/class_alloc_lock.h" #include "core/mathsupport.h" #include "core/unused_api.h" #include "esa-seqread.h" #include "esa-spmitvs.h" #include "esa-bottomup.h" #include "esa_visitor_rep.h" #include "esa_spmitvs_visitor.h" typedef struct { unsigned long wholeleaf, wholeleafwidth, nowholeleaf, nowholeleafwidth; } Lcpintervalcount; struct GtESASpmitvsVisitor { const GtESAVisitor parent_instance; unsigned long unnecessaryleaves, totallength, currentleafindex, lastwholeleaf, maxlen; unsigned int prefixlength; Lcpintervalcount *wholeleafcount; const GtEncseq *encseq; GtReadmode readmode; }; #define gt_esa_spmitvs_visitor_cast(GV)\ gt_esa_visitor_cast(gt_esa_spmitvs_visitor_class(), GV) static bool gt_esa_spmitvs_visitor_iswholeleaf(const GtEncseq *encseq, GtReadmode readmode, unsigned long leafnumber) { return (leafnumber > 0) ? gt_encseq_position_is_separator(encseq,leafnumber - 1,readmode) : true; } static int gt_esa_spmitvs_visitor_processleafedge(GtESAVisitor *ev, GT_UNUSED bool firstsucc, unsigned long fd, GT_UNUSED unsigned long flb, GT_UNUSED GtESAVisitorInfo *info, unsigned long leafnumber, GT_UNUSED GtError *err) { GtESASpmitvsVisitor *esv; gt_assert(ev); esv = gt_esa_spmitvs_visitor_cast(ev); if (gt_esa_spmitvs_visitor_iswholeleaf(esv->encseq,esv->readmode,leafnumber)) { gt_assert(esv->currentleafindex != esv->totallength); esv->lastwholeleaf = esv->currentleafindex; } else { if (leafnumber + fd < esv->totallength && !gt_encseq_position_is_separator(esv->encseq, leafnumber + fd, esv->readmode)) { esv->unnecessaryleaves++; } } esv->currentleafindex++; return 0; } static int gt_esa_spmitvs_visitor_processbranchingedge(GtESAVisitor *ev, GT_UNUSED bool firstsucc, unsigned long fd, GT_UNUSED unsigned long flb, GT_UNUSED GtESAVisitorInfo *finfo, unsigned long sd, unsigned long slb, unsigned long srb, GT_UNUSED GtESAVisitorInfo *sinfo, GT_UNUSED GtError *err) { GtESASpmitvsVisitor *esv; unsigned long idx; gt_assert(ev); esv = gt_esa_spmitvs_visitor_cast(ev); for (idx=fd+1; idxmaxlen); if (esv->lastwholeleaf != esv->totallength && esv->lastwholeleaf >= slb) { gt_assert(esv->lastwholeleaf <= srb); esv->wholeleafcount[idx].wholeleaf++; esv->wholeleafcount[idx].wholeleafwidth += (srb - slb + 1); } else { esv->wholeleafcount[idx].nowholeleaf++; esv->wholeleafcount[idx].nowholeleafwidth += (srb - slb + 1); } } return 0; } static int gt_esa_spmitvs_visitor_processlcpinterval(GtESAVisitor *ev, unsigned long lcp, unsigned long lb, unsigned long rb, GT_UNUSED GtESAVisitorInfo *info, GT_UNUSED GtError *err) { GtESASpmitvsVisitor *esv; gt_assert(ev); esv = gt_esa_spmitvs_visitor_cast(ev); if (esv->lastwholeleaf != esv->totallength && esv->lastwholeleaf >= lb) { gt_assert(lcp <= (unsigned long) esv->maxlen); gt_assert(esv->lastwholeleaf <= rb); esv->wholeleafcount[lcp].wholeleaf++; esv->wholeleafcount[lcp].wholeleafwidth += (rb - lb + 1); } else { esv->wholeleafcount[lcp].nowholeleaf++; esv->wholeleafcount[lcp].nowholeleafwidth += (rb - lb + 1); } return 0; } void gt_esa_spmitvs_visitor_delete(GtESAVisitor *ev) { GtESASpmitvsVisitor *esv; gt_assert(ev); esv = gt_esa_spmitvs_visitor_cast(ev); gt_free(esv->wholeleafcount); } const GtESAVisitorClass* gt_esa_spmitvs_visitor_class() { static const GtESAVisitorClass *esc = NULL; gt_class_alloc_lock_enter(); if (!esc) { esc = gt_esa_visitor_class_new(sizeof (GtESASpmitvsVisitor), gt_esa_spmitvs_visitor_delete, gt_esa_spmitvs_visitor_processleafedge, gt_esa_spmitvs_visitor_processbranchingedge, gt_esa_spmitvs_visitor_processlcpinterval, NULL, NULL); } gt_class_alloc_lock_leave(); return esc; } GtESAVisitor* gt_esa_spmitvs_visitor_new(const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, GT_UNUSED GtError *err) { GtESAVisitor *ev = gt_esa_visitor_create(gt_esa_spmitvs_visitor_class()); GtESASpmitvsVisitor *esv = gt_esa_spmitvs_visitor_cast(ev); esv->encseq = encseq; esv->readmode = readmode; esv->maxlen = gt_encseq_max_seq_length(encseq); esv->unnecessaryleaves = 0; esv->totallength = gt_encseq_total_length(encseq); esv->currentleafindex = 0; esv->lastwholeleaf = esv->totallength; /* undefined */ esv->prefixlength = prefixlength; esv->wholeleafcount = gt_malloc(sizeof (*esv->wholeleafcount) * (esv->maxlen+1)); memset(esv->wholeleafcount, 0, sizeof (*esv->wholeleafcount) * (esv->maxlen+1)); return ev; } void gt_esa_spmitvs_visitor_print_results(GtESASpmitvsVisitor *esv, unsigned long nonspecials) { unsigned long idx; printf("unnecessaryleaves=%lu (%.2f)\n", esv->unnecessaryleaves, (double) esv->unnecessaryleaves/nonspecials); for (idx = 0; idx<= esv->maxlen; idx++) { if (esv->wholeleafcount[idx].wholeleaf != 0 || esv->wholeleafcount[idx].nowholeleaf != 0) { printf("wholeleaf[%lu]:num=%lu (%.2f), ",idx, esv->wholeleafcount[idx].wholeleaf, (double) esv->wholeleafcount[idx].wholeleaf/ (esv->wholeleafcount[idx].wholeleaf+ esv->wholeleafcount[idx].nowholeleaf)); printf("width=%lu (%.2f)\n", esv->wholeleafcount[idx].wholeleafwidth, (double) esv->wholeleafcount[idx].wholeleafwidth/ esv->totallength); } } } genometools-1.5.1/src/match/esa_spmitvs_visitor.h000066400000000000000000000033111211610345200222120ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_SPMITVS_VISITOR_H #define ESA_SPMITVS_VISITOR_H #include "core/encseq_api.h" #include "core/error_api.h" #include "core/logger.h" #include "match/esa_visitor.h" typedef struct GtESASpmitvsVisitor GtESASpmitvsVisitor; const GtESAVisitorClass* gt_esa_spmitvs_visitor_class(void); GtESAVisitor* gt_esa_spmitvs_visitor_new(const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, GtError *err); void gt_esa_spmitvs_visitor_print_results( GtESASpmitvsVisitor*, unsigned long nonspecials); #endif genometools-1.5.1/src/match/esa_visitor.c000066400000000000000000000122071211610345200204240ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/assert_api.h" #include "core/class_alloc.h" #include "core/ma.h" #include "core/unused_api.h" #include "match/esa_visitor_rep.h" /* the interface */ struct GtESAVisitorClass { size_t size; GtESAVisitorFreeFunc free; GtESAVisitorLeafEdgeFunc leafedge_func; GtESAVisitorBranchingEdgeFunc branchingedge_func; GtESAVisitorLCPIntervalFunc lcpinterval_func; GtESAVisitorInfoCreatorFunc create_info_func; GtESAVisitorInfoDestructorFunc delete_info_func; }; const GtESAVisitorClass* gt_esa_visitor_class_new(size_t size, GtESAVisitorFreeFunc free, GtESAVisitorLeafEdgeFunc leafedge_func, GtESAVisitorBranchingEdgeFunc branchingedge_func, GtESAVisitorLCPIntervalFunc lcpinterval_func, GtESAVisitorInfoCreatorFunc create_info_func, GtESAVisitorInfoDestructorFunc delete_info_func) { GtESAVisitorClass *c_class; gt_assert(size); c_class = gt_class_alloc(sizeof *c_class); c_class->size = size; c_class->free = free; c_class->leafedge_func = leafedge_func; c_class->branchingedge_func = branchingedge_func; c_class->lcpinterval_func = lcpinterval_func; c_class->create_info_func = create_info_func; c_class->delete_info_func = delete_info_func; return c_class; } GtESAVisitor* gt_esa_visitor_create(const GtESAVisitorClass *evc) { GtESAVisitor *ev; gt_assert(evc && evc->size); ev = gt_calloc((size_t) 1, evc->size); ev->c_class = evc; return ev; } void* gt_esa_visitor_cast(GT_UNUSED const GtESAVisitorClass *evc, GtESAVisitor *ev) { gt_assert(evc && ev && ev->c_class == evc); return ev; } GtESAVisitorInfo* gt_esa_visitor_info_new(GtESAVisitor *ev) { gt_assert(ev && ev->c_class); if (ev->c_class->create_info_func != NULL) return ev->c_class->create_info_func(ev); return NULL; } void gt_esa_visitor_info_delete(GtESAVisitorInfo *info, GtESAVisitor *ev) { gt_assert(ev && ev->c_class); if (ev->c_class->delete_info_func != NULL) ev->c_class->delete_info_func(info, ev); } int gt_esa_visitor_visit_leaf_edge(GtESAVisitor *ev, bool firstsucc, unsigned long fd, unsigned long flb, GtESAVisitorInfo *info, unsigned long leafnumber, GtError *err) { gt_error_check(err); gt_assert(ev && ev->c_class); if (ev->c_class->leafedge_func != NULL) return ev->c_class->leafedge_func(ev, firstsucc, fd, flb, info, leafnumber, err); return 0; } int gt_esa_visitor_visit_branching_edge(GtESAVisitor *ev, bool firstsucc, unsigned long fd, unsigned long flb, GtESAVisitorInfo *finfo, unsigned long sd, unsigned long slb, unsigned long srb, GtESAVisitorInfo *sinfo, GtError *err) { gt_error_check(err); gt_assert(ev && ev->c_class); if (ev->c_class->branchingedge_func != NULL) return ev->c_class->branchingedge_func(ev, firstsucc, fd, flb, finfo, sd, slb, srb, sinfo, err); return 0; } int gt_esa_visitor_visit_lcp_interval(GtESAVisitor *ev, unsigned long lcp, unsigned long lb, unsigned long rb, GtESAVisitorInfo *info, GtError *err) { gt_error_check(err); gt_assert(ev && ev->c_class); if (ev->c_class->lcpinterval_func != NULL) return ev->c_class->lcpinterval_func(ev, lcp, lb, rb, info, err); return 0; } void gt_esa_visitor_delete(GtESAVisitor *ev) { if (!ev) return; gt_assert(ev->c_class); if (ev->c_class->free != NULL) ev->c_class->free(ev); gt_free(ev); } genometools-1.5.1/src/match/esa_visitor.h000066400000000000000000000057131211610345200204350ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_VISITOR_H #define ESA_VISITOR_H #include #include "core/error_api.h" typedef struct GtESAVisitor GtESAVisitor; typedef struct GtESAVisitorClass GtESAVisitorClass; typedef struct GtESAVisitorInfo GtESAVisitorInfo; void* gt_esa_visitor_cast(const GtESAVisitorClass*, GtESAVisitor*); int gt_esa_visitor_visit_leaf_edge(GtESAVisitor*, bool, unsigned long, unsigned long, GtESAVisitorInfo*, unsigned long, GtError*); int gt_esa_visitor_visit_branching_edge(GtESAVisitor*, bool, unsigned long, unsigned long, GtESAVisitorInfo*, unsigned long, unsigned long, unsigned long, GtESAVisitorInfo*, GtError*); int gt_esa_visitor_visit_lcp_interval(GtESAVisitor*, unsigned long, unsigned long, unsigned long, GtESAVisitorInfo*, GtError*); void gt_esa_visitor_delete(GtESAVisitor *ev); GtESAVisitorInfo* gt_esa_visitor_info_new(GtESAVisitor*); void gt_esa_visitor_info_delete(GtESAVisitorInfo*, GtESAVisitor*); #endif genometools-1.5.1/src/match/esa_visitor_rep.h000066400000000000000000000072041211610345200213000ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ESA_VISITOR_REP_H #define ESA_VISITOR_REP_H #include #include "match/esa_visitor.h" typedef void (*GtESAVisitorFreeFunc)(GtESAVisitor*); typedef GtESAVisitorInfo* (*GtESAVisitorInfoCreatorFunc)(GtESAVisitor*); typedef void (*GtESAVisitorInfoDestructorFunc)(GtESAVisitorInfo*, GtESAVisitor*); typedef int (*GtESAVisitorLeafEdgeFunc)(GtESAVisitor*, bool, unsigned long, unsigned long, GtESAVisitorInfo*, unsigned long, GtError*); typedef int (*GtESAVisitorBranchingEdgeFunc)(GtESAVisitor*, bool, unsigned long, unsigned long, GtESAVisitorInfo*, unsigned long, unsigned long, unsigned long, GtESAVisitorInfo*, GtError*); typedef int (*GtESAVisitorLCPIntervalFunc)(GtESAVisitor*, unsigned long, unsigned long, unsigned long, GtESAVisitorInfo*, GtError*); typedef struct GtESAVisitorMembers GtESAVisitorMembers; struct GtESAVisitor { const GtESAVisitorClass *c_class; GtESAVisitorMembers *members; }; const GtESAVisitorClass* gt_esa_visitor_class_new(size_t size, GtESAVisitorFreeFunc, GtESAVisitorLeafEdgeFunc, GtESAVisitorBranchingEdgeFunc, GtESAVisitorLCPIntervalFunc, GtESAVisitorInfoCreatorFunc, GtESAVisitorInfoDestructorFunc); GtESAVisitor* gt_esa_visitor_create(const GtESAVisitorClass*); #endif genometools-1.5.1/src/match/firstcodes-accum.c000066400000000000000000000201371211610345200213310ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/intbits.h" #include "core/types_api.h" #include "core/codetype.h" #include "core/divmodmul.h" #include "core/encseq.h" #include "core/log_api.h" #include "kmercodes.h" #include "firstcodes-buf.h" #include "firstcodes-accum.h" #define GT_FIRSTCODES_ACCUM(BUF,CODE,RELPOS)\ {\ if ((BUF)->accum_all || (((RELPOS) > 0) &&\ GT_MARKSUBSTRING_CHECKMARK((BUF)->markprefix,CODE) &&\ GT_MARKSUBSTRING_CHECKMARK((BUF)->marksuffix,CODE)))\ {\ if ((BUF)->nextfree == (BUF)->allocated)\ {\ (BUF)->flush_function((BUF)->fciptr);\ }\ gt_assert ((BUF)->nextfree < (BUF)->allocated);\ (BUF)->spaceGtUlong[(BUF)->nextfree++] = CODE;\ }\ } static void gt_firstcodes_accum_kmerscan_range( const GtBitsequence *twobitencoding, unsigned int kmersize, unsigned int minmatchlength, unsigned long startpos, unsigned long length, unsigned long maxunitindex, GtCodeposbuffer *buf) { const unsigned long maskright = GT_MASKRIGHT(kmersize); const unsigned long lastpossiblepos = length - minmatchlength; const unsigned long lastfrelpos = length - kmersize; const unsigned int shiftleft = GT_MULT2(kmersize-1); unsigned int shiftright; unsigned long unitindex, frelpos; GtTwobitencoding currentencoding; GtCodetype cc, marksubstringtmpcode, fcode, rccode; gt_assert(kmersize <= (unsigned int) GT_UNITSIN2BITENC); fcode = gt_kmercode_at_position(twobitencoding, startpos, kmersize); rccode = gt_kmercode_complement(gt_kmercode_reverse(fcode,kmersize), maskright); GT_FIRSTCODES_ACCUM(buf,fcode,0UL); if (kmersize == minmatchlength) { GT_FIRSTCODES_ACCUM(buf,rccode,lastfrelpos); } unitindex = GT_DIVBYUNITSIN2BITENC(startpos + kmersize); currentencoding = twobitencoding[unitindex]; shiftright = (unsigned int) GT_MULT2(GT_UNITSIN2BITENC - 1 - GT_MODBYUNITSIN2BITENC(startpos + kmersize)); for (frelpos = 1UL; frelpos <= lastfrelpos; frelpos++) { cc = (GtCodetype) (currentencoding >> shiftright) & 3; fcode = ((fcode << 2) | cc) & maskright; rccode = (rccode >> 2) | ((cc ^ 3UL) << shiftleft); if (frelpos <= lastpossiblepos) { GT_FIRSTCODES_ACCUM(buf,fcode,frelpos); } if (lastfrelpos - frelpos <= lastpossiblepos) { GT_FIRSTCODES_ACCUM(buf,rccode,lastfrelpos - frelpos); } if (shiftright > 0) { shiftright -= 2; } else { gt_assert(unitindex < maxunitindex-1 || frelpos == lastfrelpos); if (unitindex < maxunitindex-1) { currentencoding = twobitencoding[++unitindex]; shiftright = (unsigned int) (GT_INTWORDSIZE-2); } } } } static void gt_firstcodes_accum_kmerscan_eqlen( const GtBitsequence *twobitencoding, unsigned long equallength, unsigned long totallength, unsigned long maxunitindex, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf) { unsigned long startpos; if (equallength >= (unsigned long) kmersize) { for (startpos = 0; startpos < totallength; startpos += equallength+1) { gt_firstcodes_accum_kmerscan_range(twobitencoding, kmersize, minmatchlength, startpos, equallength, maxunitindex, buf); } } } static void gt_firstcodes_accum_kmerscan(const GtEncseq *encseq, const GtBitsequence *twobitencoding, unsigned long totallength, unsigned long maxunitindex, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf) { unsigned long laststart = 0; if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; sri = gt_specialrangeiterator_new(encseq,true); while (gt_specialrangeiterator_next(sri,&range) && range.start < totallength) { gt_assert(range.start >= laststart); if (range.start - laststart >= (unsigned long) minmatchlength) { gt_firstcodes_accum_kmerscan_range(twobitencoding, kmersize, minmatchlength, laststart, range.start - laststart, maxunitindex, buf); } laststart = range.end; } gt_specialrangeiterator_delete(sri); } if (totallength - laststart >= (unsigned long) minmatchlength) { gt_firstcodes_accum_kmerscan_range(twobitencoding, kmersize, minmatchlength, laststart, totallength - laststart, maxunitindex, buf); } } void gt_firstcodes_accum_runkmerscan(const GtEncseq *encseq, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf) { const GtTwobitencoding *twobitencoding = gt_encseq_twobitencoding_export(encseq); unsigned long totallength, maxunitindex; if (gt_encseq_is_mirrored(encseq)) { totallength = (gt_encseq_total_length(encseq)-1)/2; } else { totallength = gt_encseq_total_length(encseq); } maxunitindex = gt_unitsoftwobitencoding(totallength) - 1; if (gt_encseq_accesstype_get(encseq) == GT_ACCESS_TYPE_EQUALLENGTH) { unsigned long equallength = gt_encseq_equallength(encseq); gt_assert(equallength >= (unsigned long) kmersize); gt_firstcodes_accum_kmerscan_eqlen(twobitencoding, equallength, totallength, maxunitindex, kmersize, minmatchlength, buf); } else { gt_firstcodes_accum_kmerscan(encseq, twobitencoding, totallength, maxunitindex, kmersize, minmatchlength, buf); } } genometools-1.5.1/src/match/firstcodes-accum.h000066400000000000000000000023131211610345200213320ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FIRSTCODES_ACCUM_H #define FIRSTCODES_ACCUM_H #include "core/encseq_api.h" #include "match/firstcodes-buf.h" void gt_firstcodes_accum_runkmerscan(const GtEncseq *encseq, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf); #endif genometools-1.5.1/src/match/firstcodes-buf.h000066400000000000000000000026231211610345200210220ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FIRSTCODES_BUF_H #define FIRSTCODES_BUF_H #include "core/types_api.h" #include "marksubstring.h" #include "seqnumrelpos.h" typedef void (*GtCodeposbufferflushfunction)(void *); typedef struct { unsigned long currentmincode, currentmaxcode, nextfree, allocated; Gtmarksubstring *markprefix, *marksuffix; GtCodeposbufferflushfunction flush_function; GtUlongPair *spaceGtUlongPair; GtUlong *spaceGtUlong; GtSeqnumrelpos *snrp; void *fciptr; bool accum_all; } GtCodeposbuffer; #endif genometools-1.5.1/src/match/firstcodes-cache.c000066400000000000000000000200211211610345200212740ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/arraydef.h" #include "core/divmodmul.h" #include "core/log_api.h" #include "core/ma.h" #include "core/unused_api.h" #include "firstcodes-cache.h" #include "firstcodes-spacelog.h" #include #include typedef struct { unsigned long afcindex, code; } GtIndexwithcode; struct GtArrayGtIndexwithcode { GtIndexwithcode *spaceGtIndexwithcode; unsigned long width, nextfreeGtIndexwithcode, allocatedGtIndexwithcode; unsigned int depth; }; GtArrayGtIndexwithcode *gt_firstcodes_binsearchcache_new( unsigned long differentcodes, unsigned int addbscache_depth, GtFirstcodesspacelog *fcsl) { unsigned int depth = addbscache_depth + (unsigned int) log10((double) differentcodes); while (true) { unsigned long allocated = 1UL << (depth+1); if (allocated < differentcodes && differentcodes/allocated >= 32UL) { GtArrayGtIndexwithcode *binsearchcache; size_t allocbytes; binsearchcache = gt_malloc(sizeof (*binsearchcache)); binsearchcache->depth = depth; binsearchcache->nextfreeGtIndexwithcode = 0; binsearchcache->allocatedGtIndexwithcode = allocated; binsearchcache->width = differentcodes/allocated; allocbytes = sizeof (*binsearchcache->spaceGtIndexwithcode) * binsearchcache->allocatedGtIndexwithcode; gt_assert(binsearchcache->width > 0); binsearchcache->spaceGtIndexwithcode = gt_malloc(allocbytes); gt_log_log("binsearchcache->depth=%u => %lu bytes", binsearchcache->depth, (unsigned long) allocbytes); GT_FCI_ADDWORKSPACE(fcsl,"binsearchcache",allocbytes); return binsearchcache; } else { if (depth > 0) { depth--; } else { break; } } } return NULL; } unsigned long gt_firstcodes_binsearchcache_width(const GtArrayGtIndexwithcode *binsearchcache) { return binsearchcache->width; } void gt_firstcodes_binsearchcache_set_index_code(GtArrayGtIndexwithcode *binsearchcache, unsigned long afcindex, unsigned long code) { if (binsearchcache->nextfreeGtIndexwithcode < binsearchcache->allocatedGtIndexwithcode) { binsearchcache->spaceGtIndexwithcode [binsearchcache->nextfreeGtIndexwithcode].afcindex = afcindex; binsearchcache->spaceGtIndexwithcode [binsearchcache->nextfreeGtIndexwithcode++].code = code; } } void gt_firstcodes_binsearchcache_check(GtArrayGtIndexwithcode *binsearchcache, GT_UNUSED const unsigned long *allfirstcodes, unsigned long differentcodes) { if (binsearchcache != NULL) { unsigned long idx, current = binsearchcache->width; gt_assert(binsearchcache->spaceGtIndexwithcode != NULL); for (idx=0; idx < binsearchcache->nextfreeGtIndexwithcode && current < differentcodes; idx++) { gt_assert(binsearchcache->spaceGtIndexwithcode[idx].afcindex == current); gt_assert(binsearchcache->spaceGtIndexwithcode[idx].code == allfirstcodes[current]); current += binsearchcache->width; } } } void gt_firstcodes_binsearchcache_delete(GtArrayGtIndexwithcode *binsearchcache, GtFirstcodesspacelog *fcsl) { if (binsearchcache != NULL) { if (binsearchcache->spaceGtIndexwithcode != NULL) { GT_FCI_SUBTRACTWORKSPACE(fcsl,"binsearchcache"); GT_FREEARRAY(binsearchcache,GtIndexwithcode); } gt_free (binsearchcache); } } unsigned long gt_firstcodes_find_accu(unsigned long *foundcode, const unsigned long *differences, unsigned long allfirstcodes0, unsigned long differentcodes, unsigned long differencemask, const GtArrayGtIndexwithcode *binsearchcache, unsigned long code) { unsigned long leftptr = ULONG_MAX, rightptr = ULONG_MAX, foundindex = ULONG_MAX, previouscode = ULONG_MAX; if (code <= allfirstcodes0) { *foundcode = allfirstcodes0; return 0; } *foundcode = ULONG_MAX; if (binsearchcache != NULL) { const GtIndexwithcode *leftic, *midic, *rightic; unsigned int depth; gt_assert(binsearchcache->spaceGtIndexwithcode != NULL); leftic = binsearchcache->spaceGtIndexwithcode; rightic = binsearchcache->spaceGtIndexwithcode + binsearchcache->nextfreeGtIndexwithcode - 1; for (depth = 0; /* Nothing */; depth++) { midic = leftic + GT_DIV2((unsigned long) (rightic-leftic)); if (code < midic->code) { foundindex = midic->afcindex; *foundcode = midic->code; if (depth < binsearchcache->depth) { rightic = midic - 1; } else { gt_assert(leftic->afcindex != ULONG_MAX && rightic->afcindex != ULONG_MAX); if (leftic > binsearchcache->spaceGtIndexwithcode) { leftptr = (leftic-1)->afcindex + 1; previouscode = (leftic-1)->code; } else { gt_assert(code > allfirstcodes0); leftptr = 1UL; previouscode = allfirstcodes0; } gt_assert(rightic->afcindex > 0); rightptr = rightic->afcindex - 1; break; } } else { if (code > midic->code) { if (depth < binsearchcache->depth) { leftic = midic + 1; } else { gt_assert(leftic->afcindex != ULONG_MAX && rightic->afcindex != ULONG_MAX); leftptr = leftic->afcindex + 1; previouscode = leftic->code; if (rightic < binsearchcache->spaceGtIndexwithcode + binsearchcache->nextfreeGtIndexwithcode - 1) { gt_assert((rightic+1)->afcindex > 0); rightptr = (rightic+1)->afcindex - 1; } else { rightptr = differentcodes - 1; } break; } } else { gt_assert(midic->afcindex != ULONG_MAX); *foundcode = midic->code; return midic->afcindex; } } } gt_assert(leftptr != ULONG_MAX && rightptr != ULONG_MAX); } else { leftptr = 1UL; previouscode = allfirstcodes0; rightptr = differentcodes - 1; } if (leftptr <= rightptr) { unsigned long idx; for (idx = leftptr; idx <= rightptr; idx++) { previouscode += (differences[idx] & differencemask); /* extract diff */ if (code <= previouscode) { *foundcode = previouscode; foundindex = idx; break; } } } return foundindex; } genometools-1.5.1/src/match/firstcodes-cache.h000066400000000000000000000050231211610345200213060ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FIRSTCODES_CACHE_H #define FIRSTCODES_CACHE_H #include "firstcodes-spacelog.h" typedef struct GtArrayGtIndexwithcode GtArrayGtIndexwithcode; GtArrayGtIndexwithcode *gt_firstcodes_binsearchcache_new( unsigned long differentcodes, unsigned int addbscache_depth, GtFirstcodesspacelog *fcsl); void gt_firstcodes_binsearchcache_check(GtArrayGtIndexwithcode *binsearchcache, const unsigned long *allfirstcodes, unsigned long differentcodes); void gt_firstcodes_binsearchcache_delete(GtArrayGtIndexwithcode *binsearchcache, GtFirstcodesspacelog *fcsl); unsigned long gt_firstcodes_binsearchcache_width(const GtArrayGtIndexwithcode *binsearchcache); void gt_firstcodes_binsearchcache_set_index_code(GtArrayGtIndexwithcode *binsearchcache, unsigned long afcindex, unsigned long code); unsigned long gt_firstcodes_find_accu( unsigned long *foundcode, const unsigned long *differences, unsigned long allfirstcodes0, unsigned long differentcodes, unsigned long differencemask, const GtArrayGtIndexwithcode *binsearchcache, unsigned long code); #endif genometools-1.5.1/src/match/firstcodes-insert.c000066400000000000000000000224251211610345200215470ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/intbits.h" #include "core/types_api.h" #include "core/codetype.h" #include "core/divmodmul.h" #include "core/encseq.h" #include "kmercodes.h" #include "firstcodes-buf.h" #include "firstcodes-insert.h" #define GT_FIRSTCODES_INSERTSUFFIXES(BUF,CODE,SEQNUM,RELPOS)\ {\ if ((BUF)->currentmincode <= (CODE) &&\ (CODE) <= (BUF)->currentmaxcode &&\ GT_MARKSUBSTRING_CHECKMARK((BUF)->markprefix,CODE) &&\ GT_MARKSUBSTRING_CHECKMARK((BUF)->marksuffix,CODE))\ {\ if ((BUF)->nextfree == (BUF)->allocated)\ {\ (BUF)->flush_function((BUF)->fciptr);\ }\ gt_assert ((BUF)->nextfree < (BUF)->allocated);\ (BUF)->spaceGtUlongPair[(BUF)->nextfree].a = CODE;\ (BUF)->spaceGtUlongPair[(BUF)->nextfree++].b\ = gt_seqnumrelpos_encode((BUF)->snrp,SEQNUM,RELPOS);\ }\ } static void gt_firstcodes_insert_kmerscan_range( const GtBitsequence *twobitencoding, unsigned int kmersize, unsigned int minmatchlength, unsigned long startpos, unsigned long length, unsigned long fseqnum, unsigned long rseqnum, unsigned long maxunitindex, GtCodeposbuffer *buf) { const unsigned long maskright = GT_MASKRIGHT(kmersize); const unsigned long lastpossiblepos = length - minmatchlength; const unsigned long lastfrelpos = length - kmersize; const unsigned int shiftleft = GT_MULT2(kmersize-1); unsigned int shiftright; unsigned long unitindex, frelpos; GtTwobitencoding currentencoding; GtCodetype cc, marksubstringtmpcode, fcode, rccode; gt_assert(kmersize <= (unsigned int) GT_UNITSIN2BITENC); fcode = gt_kmercode_at_position(twobitencoding, startpos, kmersize); rccode = gt_kmercode_complement(gt_kmercode_reverse(fcode,kmersize), maskright); GT_FIRSTCODES_INSERTSUFFIXES(buf,fcode,fseqnum,0UL); if (kmersize == minmatchlength) { GT_FIRSTCODES_INSERTSUFFIXES(buf,rccode,rseqnum,lastfrelpos); } unitindex = GT_DIVBYUNITSIN2BITENC(startpos + kmersize); currentencoding = twobitencoding[unitindex]; shiftright = (unsigned int) GT_MULT2(GT_UNITSIN2BITENC - 1 - GT_MODBYUNITSIN2BITENC(startpos + kmersize)); for (frelpos = 1UL; frelpos <= lastfrelpos; frelpos++) { cc = (GtCodetype) (currentencoding >> shiftright) & 3; fcode = ((fcode << 2) | cc) & maskright; rccode = (rccode >> 2) | ((cc ^ 3UL) << shiftleft); if (frelpos <= lastpossiblepos) { GT_FIRSTCODES_INSERTSUFFIXES(buf,fcode,fseqnum,frelpos); } if (lastfrelpos - frelpos <= lastpossiblepos) { GT_FIRSTCODES_INSERTSUFFIXES(buf,rccode,rseqnum,lastfrelpos - frelpos); } if (shiftright > 0) { shiftright -= 2; } else { gt_assert(unitindex < maxunitindex-1 || frelpos == lastfrelpos); if (unitindex < maxunitindex-1) { currentencoding = twobitencoding[++unitindex]; shiftright = (unsigned int) (GT_INTWORDSIZE-2); } } } } static void gt_firstcodes_insert_kmerscan_eqlen( const GtBitsequence *twobitencoding, unsigned long equallength, unsigned long totallength, unsigned long numofsequences, unsigned long maxunitindex, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf) { unsigned long startpos, fseqnum; if (equallength >= (unsigned long) kmersize) { for (startpos = 0, fseqnum = 0; startpos < totallength; startpos += equallength+1, fseqnum++) { gt_firstcodes_insert_kmerscan_range(twobitencoding, kmersize, minmatchlength, startpos, equallength, fseqnum, numofsequences - 1 - fseqnum, maxunitindex, buf); } } } static void gt_firstcodes_insert_kmerscan(const GtEncseq *encseq, const GtBitsequence *twobitencoding, unsigned long totallength, unsigned long numofsequences, unsigned long maxunitindex, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf) { unsigned long laststart = 0, fseqnum = 0; if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; sri = gt_specialrangeiterator_new(encseq,true); while (gt_specialrangeiterator_next(sri,&range) && range.start < totallength) { gt_assert(range.start >= laststart); if (range.start - laststart >= (unsigned long) minmatchlength) { gt_firstcodes_insert_kmerscan_range(twobitencoding, kmersize, minmatchlength, laststart, range.start - laststart, fseqnum, numofsequences - 1 - fseqnum, maxunitindex, buf); } laststart = range.end; fseqnum++; } gt_specialrangeiterator_delete(sri); } if (totallength - laststart >= (unsigned long) minmatchlength) { gt_firstcodes_insert_kmerscan_range(twobitencoding, kmersize, minmatchlength, laststart, totallength - laststart, fseqnum, numofsequences - 1 - fseqnum, maxunitindex, buf); } } void gt_firstcodes_insert_runkmerscan(const GtEncseq *encseq, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf) { const GtTwobitencoding *twobitencoding = gt_encseq_twobitencoding_export(encseq); unsigned long totallength, maxunitindex, numofsequences; gt_assert(minmatchlength>=kmersize); if (gt_encseq_is_mirrored(encseq)) { totallength = (gt_encseq_total_length(encseq)-1)/2; } else { totallength = gt_encseq_total_length(encseq); } numofsequences = gt_encseq_num_of_sequences(encseq); maxunitindex = gt_unitsoftwobitencoding(totallength) - 1; if (gt_encseq_accesstype_get(encseq) == GT_ACCESS_TYPE_EQUALLENGTH) { unsigned long equallength = gt_encseq_equallength(encseq); gt_assert(equallength >= (unsigned long) kmersize); gt_firstcodes_insert_kmerscan_eqlen(twobitencoding, equallength, totallength, numofsequences, maxunitindex, kmersize, minmatchlength, buf); } else { gt_firstcodes_insert_kmerscan(encseq, twobitencoding, totallength, numofsequences, maxunitindex, kmersize, minmatchlength, buf); } } genometools-1.5.1/src/match/firstcodes-insert.h000066400000000000000000000023211211610345200215450ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FIRSTCODES_INSERT_H #define FIRSTCODES_INSERT_H #include "core/encseq_api.h" #include "match/firstcodes-buf.h" void gt_firstcodes_insert_runkmerscan(const GtEncseq *encseq, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf); #endif genometools-1.5.1/src/match/firstcodes-psbuf.c000066400000000000000000000055761211610345200213720ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #endif #include "core/fa.h" #include "core/str_api.h" #include "core/xansi_api.h" #include "core/ma.h" #include "core/log.h" #include "firstcodes-psbuf.h" #include "firstcodes-spacelog.h" GtLeftborderOutbuffer *gt_leftborderbuffer_new(const char *name, GtFirstcodesspacelog *fcsl) { GtLeftborderOutbuffer *lbbuf = gt_malloc(sizeof (*lbbuf)); lbbuf->totalwrite = 0; lbbuf->outfilename = gt_str_new(); lbbuf->fp = gt_xtmpfp(lbbuf->outfilename); lbbuf->nextfree = 0; lbbuf->allocated = 1024UL; lbbuf->name = gt_str_new_cstr(name); lbbuf->spaceuint32_t = gt_malloc(sizeof (*lbbuf->spaceuint32_t) * lbbuf->allocated); GT_FCI_ADDWORKSPACE(fcsl,name, sizeof (*lbbuf->spaceuint32_t) * lbbuf->allocated); return lbbuf; } void gt_leftborderbuffer_flush(GtLeftborderOutbuffer *leftborderbuffer) { gt_xfwrite(leftborderbuffer->spaceuint32_t, sizeof (*leftborderbuffer->spaceuint32_t), (size_t) leftborderbuffer->nextfree, leftborderbuffer->fp); leftborderbuffer->totalwrite += leftborderbuffer->nextfree; leftborderbuffer->nextfree = 0; } GtStr *gt_leftborderbuffer_delete(GtLeftborderOutbuffer *lbbuf, GtFirstcodesspacelog *fcsl, GT_UNUSED unsigned long expectedwritten) { GtStr *outfilename; gt_assert(lbbuf != NULL); gt_leftborderbuffer_flush(lbbuf); gt_fa_fclose(lbbuf->fp); lbbuf->fp = NULL; gt_log_log("write %s to file %s (%lu units of size %u)", gt_str_get(lbbuf->name), gt_str_get(lbbuf->outfilename), lbbuf->totalwrite,(unsigned int) sizeof (*lbbuf->spaceuint32_t)); gt_assert(lbbuf->spaceuint32_t != NULL); gt_free(lbbuf->spaceuint32_t); GT_FCI_SUBTRACTWORKSPACE(fcsl,gt_str_get(lbbuf->name)); gt_assert(lbbuf->totalwrite == expectedwritten); outfilename = lbbuf->outfilename; gt_str_delete(lbbuf->name); gt_free(lbbuf); return outfilename; } genometools-1.5.1/src/match/firstcodes-psbuf.h000066400000000000000000000030531211610345200213630ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FIRSTCODES_PSBUF_H #define FIRSTCODES_PSBUF_H #include #include "core/unused_api.h" #include "firstcodes-spacelog.h" typedef struct { uint32_t *spaceuint32_t; unsigned long nextfree, allocated, totalwrite; GtStr *outfilename, *name; FILE *fp; } GtLeftborderOutbuffer; GtLeftborderOutbuffer *gt_leftborderbuffer_new(const char *name, GtFirstcodesspacelog *fcsl); void gt_leftborderbuffer_flush(GtLeftborderOutbuffer *leftborderbuffer); GtStr *gt_leftborderbuffer_delete(GtLeftborderOutbuffer *lbbuf, GtFirstcodesspacelog *fcsl, GT_UNUSED unsigned long expectedwritten); #endif genometools-1.5.1/src/match/firstcodes-scan.c000066400000000000000000000274401211610345200211710ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/intbits.h" #include "core/types_api.h" #include "core/codetype.h" #include "core/divmodmul.h" #include "core/encseq.h" #include "core/log_api.h" #include "kmercodes.h" #include "firstcodes-scan.h" #undef WITHCHECK #ifdef WITHCHECK static void gt_firstcode_verifycodes(const GtBitsequence *twobitencoding, unsigned long position, unsigned int kmersize, GtCodetype fcode, GtCodetype rccode) { GtCodetype bfcode = gt_kmercode_at_position(twobitencoding,position,kmersize), bfrccode = gt_kmercode_complement( gt_kmercode_reverse(bfcode,kmersize), GT_MASKRIGHT(kmersize)); gt_assert(fcode == bfcode); if (rccode != bfrccode) { printf("position %lu: fcode=%lu,rccode=%lu != %lu\n",position,fcode, rccode,bfrccode); exit(EXIT_FAILURE); } } #endif typedef void (*GtProcesskmercode)(GtCodetype,unsigned long, unsigned long,void *); static GtTwobitencoding gt_firstcodes_kmerscan_range( const GtBitsequence *twobitencoding, GT_UNUSED bool withcheck, unsigned int kmersize, unsigned int minmatchlength, unsigned long startpos, unsigned long endpos, unsigned long fseqnum, unsigned long rseqnum, unsigned long maxunitindex, GtProcesskmercode processcode, void *data) { GtTwobitencoding currentencoding, encodingsum = 0; unsigned int shiftright; const unsigned int shiftleft = GT_MULT2(kmersize-1); GtCodetype cc, fcode, rccode; unsigned long position, unitindex, frelpos; const unsigned long maskright = GT_MASKRIGHT(kmersize); const unsigned long lastpossiblepos = endpos - startpos - minmatchlength; const unsigned long lastfrelpos = endpos - startpos - kmersize; gt_assert(kmersize <= (unsigned int) GT_UNITSIN2BITENC); position = startpos; fcode = gt_kmercode_at_position(twobitencoding, position, kmersize); rccode = gt_kmercode_complement(gt_kmercode_reverse(fcode,kmersize), maskright); if (processcode != NULL) { processcode(fcode,fseqnum,0,data); if (lastfrelpos <= lastpossiblepos) { processcode(rccode,rseqnum,lastfrelpos,data); } } unitindex = GT_DIVBYUNITSIN2BITENC(startpos + kmersize); currentencoding = twobitencoding[unitindex]; encodingsum += currentencoding; shiftright = (unsigned int) GT_MULT2(GT_UNITSIN2BITENC - 1 - GT_MODBYUNITSIN2BITENC(startpos + kmersize)); gt_assert(endpos >= (unsigned long) kmersize); endpos -= kmersize; frelpos = 1UL; while (position < endpos) { position++; cc = (GtCodetype) (currentencoding >> shiftright) & 3; fcode = ((fcode << 2) | cc) & maskright; rccode = (rccode >> 2) | ((cc ^ 3UL) << shiftleft); if (processcode != NULL) { gt_assert(lastfrelpos >= frelpos); if (frelpos <= lastpossiblepos) { processcode(fcode,fseqnum,frelpos,data); } if (lastfrelpos - frelpos <= lastpossiblepos) { processcode(rccode,rseqnum,lastfrelpos - frelpos,data); } } #ifdef WITHCHECK if (withcheck) { gt_firstcode_verifycodes(twobitencoding, position, kmersize, fcode, rccode); } #endif if (shiftright > 0) { shiftright -= 2; } else { gt_assert(unitindex < maxunitindex-1 || position == endpos); if (unitindex < maxunitindex-1) { currentencoding = twobitencoding[++unitindex]; encodingsum += currentencoding; shiftright = (unsigned int) (GT_INTWORDSIZE-2); } } frelpos++; } return encodingsum; } unsigned long gt_firstcodes_kmerscan_eqlen(const GtBitsequence *twobitencoding, bool withcheck, unsigned long equallength, unsigned long totallength, unsigned long numofsequences, unsigned long maxunitindex, unsigned int kmersize, unsigned int minmatchlength, GtProcesskmercode processcode, void *data) { unsigned long startpos, encodingsum = 0, fseqnum; if (equallength >= (unsigned long) minmatchlength) { for (startpos = 0, fseqnum = 0; startpos < totallength; startpos += equallength+1, fseqnum++) { encodingsum += (unsigned long) gt_firstcodes_kmerscan_range( twobitencoding, withcheck, kmersize, minmatchlength, startpos, startpos + equallength, fseqnum, numofsequences - 1 - fseqnum, maxunitindex, processcode, data); } } return encodingsum; } unsigned long gt_firstcodes_kmerscan(const GtEncseq *encseq, const GtBitsequence *twobitencoding, bool withcheck, unsigned long totallength, unsigned long numofsequences, unsigned long maxunitindex, unsigned int kmersize, unsigned int minmatchlength, GtProcesskmercode processcode, void *data) { unsigned long laststart = 0, encodingsum = 0, fseqnum = 0; if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; sri = gt_specialrangeiterator_new(encseq,true); while (gt_specialrangeiterator_next(sri,&range) && range.start < totallength) { gt_assert(range.start >= laststart); if (range.start - laststart >= (unsigned long) minmatchlength) { encodingsum += (unsigned long) gt_firstcodes_kmerscan_range( twobitencoding, withcheck, kmersize, minmatchlength, laststart, range.start, fseqnum, numofsequences - 1 - fseqnum, maxunitindex, processcode, data); } laststart = range.end; fseqnum++; } gt_specialrangeiterator_delete(sri); } if (totallength - laststart >= (unsigned long) minmatchlength) { encodingsum += (unsigned long) gt_firstcodes_kmerscan_range( twobitencoding, withcheck, kmersize, minmatchlength, laststart, totallength, fseqnum, numofsequences - 1 - fseqnum, maxunitindex, processcode, data); } return encodingsum; } static void showcodes (GtCodetype code, unsigned long seqnum, unsigned long relpos, GT_UNUSED void *data) { printf("%c %lu %lu %lu\n",relpos == 0 ? 'T' : 'F',code,seqnum,relpos); } void gt_firstcode_runkmerscan(const GtEncseq *encseq, unsigned int mode, unsigned int kmersize, unsigned int minmatchlength) { const GtTwobitencoding *twobitencoding = gt_encseq_twobitencoding_export(encseq); unsigned long totallength, maxunitindex, encodingsum, numofsequences; bool withcheck = mode == 1U ? true : false; if (gt_encseq_is_mirrored(encseq)) { totallength = (gt_encseq_total_length(encseq)-1)/2; } else { totallength = gt_encseq_total_length(encseq); } numofsequences = gt_encseq_num_of_sequences(encseq); maxunitindex = gt_unitsoftwobitencoding(totallength) - 1; gt_log_log("totallength=%lu,maxunitindex=%lu\n",totallength,maxunitindex); if (gt_encseq_accesstype_get(encseq) == GT_ACCESS_TYPE_EQUALLENGTH) { unsigned long equallength = gt_encseq_equallength(encseq); encodingsum = gt_firstcodes_kmerscan_eqlen(twobitencoding, withcheck, equallength, totallength, numofsequences, maxunitindex, kmersize, minmatchlength, mode == 2U ? showcodes : NULL, NULL); } else { encodingsum = gt_firstcodes_kmerscan(encseq, twobitencoding, withcheck, totallength, numofsequences, maxunitindex, kmersize, minmatchlength, mode == 2U ? showcodes : NULL, NULL); } gt_log_log("encodingsum = %lu\n",encodingsum); } genometools-1.5.1/src/match/firstcodes-scan.h000066400000000000000000000022101211610345200211620ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FIRSTCODES_SCAN_H #define FIRSTCODES_SCAN_H #include "core/encseq_api.h" void gt_firstcode_runkmerscan(const GtEncseq *encseq, unsigned int mode, unsigned int kmersize, unsigned int minmatchlength); #endif genometools-1.5.1/src/match/firstcodes-spacelog.c000066400000000000000000000243541211610345200220430ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #endif #include "core/fa.h" #include "core/ma.h" #include "core/log_api.h" #include "core/spacecalc.h" #include "core/spacepeak.h" #include "core/mathsupport.h" #include "firstcodes-spacelog.h" typedef struct { const char *filename; int line; const char *title; size_t size; bool work; } GtFirstcodespacelogentry; struct GtFirstcodesspacelog { size_t workspace, splitspace, spacepeak; double max_percent_difference; bool calc_difference; GtFirstcodespacelogentry *entries; unsigned long nextfree, allocated; }; GtFirstcodesspacelog *gt_firstcodes_spacelog_new(void) { GtFirstcodesspacelog *fcsl; fcsl = gt_malloc(sizeof (GtFirstcodesspacelog)); fcsl->workspace = fcsl->splitspace = 0; fcsl->nextfree = fcsl->allocated = 0; fcsl->spacepeak = 0; fcsl->max_percent_difference = 0.0; fcsl->calc_difference = false; fcsl->entries = NULL; return fcsl; } void gt_firstcodes_spacelog_start_diff(GtFirstcodesspacelog *fcsl) { fcsl->calc_difference = gt_ma_bookkeeping_enabled(); } void gt_firstcodes_spacelog_stop_diff(GtFirstcodesspacelog *fcsl) { fcsl->calc_difference = false; } size_t gt_firstcodes_spacelog_total(const GtFirstcodesspacelog *fcsl) { return fcsl->workspace + fcsl->splitspace; } size_t gt_firstcodes_spacelog_workspace(const GtFirstcodesspacelog *fcsl) { return fcsl->workspace; } size_t gt_firstcodes_spacelog_peak(const GtFirstcodesspacelog *fcsl) { return fcsl->spacepeak; } static GtFirstcodespacelogentry *gt_spacelog_find(GtFirstcodesspacelog *fcsl, const char *title) { unsigned long idx; for (idx = 0; idx < fcsl->nextfree; idx++) { if (strcmp(fcsl->entries[idx].title,title) == 0) { return fcsl->entries + idx; } } return NULL; } static void gt_spacelog_updateaddentry(GtFirstcodespacelogentry *entry, const char *filename,int line, const char *title,size_t size, bool work) { entry->filename = filename; entry->line = line; entry->title = title; entry->size = size; entry->work = work; } static void gt_spacelog_addentry(GtFirstcodesspacelog *fcsl, const char *filename,int line, const char *title,size_t size, bool work) { gt_assert(fcsl->nextfree <= fcsl->allocated); if (fcsl->nextfree == fcsl->allocated) { fcsl->allocated += 16UL; fcsl->entries = gt_realloc(fcsl->entries,sizeof (*fcsl->entries) * fcsl->allocated); } gt_spacelog_updateaddentry(fcsl->entries + fcsl->nextfree, filename,line,title,size,work); fcsl->nextfree++; } bool gt_firstcodes_spacelog_showentries(FILE *fp, const GtFirstcodesspacelog *fcsl) { unsigned long idx; bool foundnonempty = false; for (idx = 0; idx < fcsl->nextfree; idx++) { if (fcsl->entries[idx].size > 0) { fprintf(fp,"%s %d %s %s %lu\n", fcsl->entries[idx].filename, fcsl->entries[idx].line, fcsl->entries[idx].title, fcsl->entries[idx].work ? "work" : "split", (unsigned long) fcsl->entries[idx].size); foundnonempty = true; } } return foundnonempty; } void gt_firstcodes_spacelog_delete(GtFirstcodesspacelog *fcsl) { if (fcsl != NULL) { #ifdef SKDEBUG if (gt_firstcodes_spacelog_showentries(stderr,fcsl)) { exit(GT_EXIT_PROGRAMMING_ERROR); } #endif gt_log_log("maximal difference between estimated and real space = %.2f%%", fcsl->max_percent_difference); gt_free(fcsl->entries); gt_free(fcsl); } } static void gt_firstcodes_subtract_error(const char *title, const char *filename, int line, size_t size, bool work, size_t sumspace) { fprintf(stderr,"for title \"%s\" (from file %s, line %d) " "in spacelog entries: " "size=%lu > %lu=%sspace\n",title,filename,line, (unsigned long) size,(unsigned long) sumspace, work ? "work" : "split"); } static void gt_firstcodes_updatemax(GtFirstcodesspacelog *fcsl) { if (fcsl->workspace + fcsl->splitspace > fcsl->spacepeak) { fcsl->spacepeak = fcsl->workspace + fcsl->splitspace; gt_log_log("update spacepeak to %.2f MB", GT_MEGABYTES(fcsl->spacepeak)); } } void gt_firstcodes_spacelog_add(GtFirstcodesspacelog *fcsl, int line, const char *filename, bool add, const char *title, bool work, size_t size) { GtFirstcodespacelogentry *entry; size_t logspace; if (add) { entry = gt_spacelog_find(fcsl,title); if (entry != NULL) { if (entry->size != 0) { fprintf(stderr,"existing entry for title \"%s\"" "(from file %s, line %d) " "in spacelog entries must have size 0\n", title,filename,line); exit(GT_EXIT_PROGRAMMING_ERROR); } gt_spacelog_updateaddentry(entry,filename,line,title,size,work); } else { gt_spacelog_addentry(fcsl,filename,line,title,size,work); } if (work) { fcsl->workspace += size; } else { fcsl->splitspace += size; } gt_firstcodes_updatemax(fcsl); } else { entry = gt_spacelog_find(fcsl,title); if (entry == NULL) { fprintf(stderr,"cannot find title \"%s\" (from file %s, line %d) " "in spacelog entries\n",title,filename,line); (void) gt_firstcodes_spacelog_showentries(stderr,fcsl); exit(GT_EXIT_PROGRAMMING_ERROR); } if ((entry->work && !work) || (!entry->work && work)) { fprintf(stderr,"for title \"%s\" (from file %s, line %d) " "in spacelog entries: inconsistent work/splitassignment\n", title,filename,line); exit(GT_EXIT_PROGRAMMING_ERROR); } if (work) { if (entry->size > fcsl->workspace) { gt_firstcodes_subtract_error(title, filename, line, entry->size, true, fcsl->workspace); (void) gt_firstcodes_spacelog_showentries(stderr,fcsl); exit(GT_EXIT_PROGRAMMING_ERROR); } fcsl->workspace -= entry->size; } else { if (entry->size > fcsl->splitspace) { gt_firstcodes_subtract_error(title, filename, line, entry->size, false, fcsl->splitspace); (void) gt_firstcodes_spacelog_showentries(stderr,fcsl); exit(GT_EXIT_PROGRAMMING_ERROR); } fcsl->splitspace -= entry->size; } if (size > 0) { size_t previous_size = entry->size; gt_spacelog_updateaddentry(entry,filename,line,title,size,work); if (work) { fcsl->workspace += size; } else { fcsl->splitspace += size; } if (size > previous_size) { add = true; size -= previous_size; } else { size = previous_size - size; } gt_firstcodes_updatemax(fcsl); } else { size = entry->size; entry->size = 0; } } logspace = fcsl->workspace+fcsl->splitspace; gt_log_log( #ifdef SKDEBUG "file %s, line %d: " #endif "%s %s= %.2f, %s, w=%.2f, s=%.2f, sum=%.2f MB", #ifdef SKDEBUG filename, line, #endif work ? "w" : "s", add ? "+" : "-", GT_MEGABYTES(size), title, GT_MEGABYTES(fcsl->workspace), GT_MEGABYTES(fcsl->splitspace), GT_MEGABYTES(logspace)); #ifdef SKDEBUG if (gt_ma_bookkeeping_enabled()) { unsigned long realspace = gt_ma_get_space_current() + gt_fa_get_space_current(); gt_log_log("current space usage %.2f MB (%.2f+%.2f)", GT_MEGABYTES(realspace), GT_MEGABYTES(gt_ma_get_space_current()), GT_MEGABYTES(gt_fa_get_space_current())); if (fcsl->calc_difference) { double percent_difference; if ((unsigned long) logspace > realspace) { fprintf(stderr,"overestimating logspace\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } if (realspace >= 1000000UL) { /* printf("realspace=%lu,logspace=%lu\n",realspace, (unsigned long) logspace); */ percent_difference = 100.0 * (double) (realspace - logspace)/realspace; if (gt_double_larger_double(percent_difference,3.0)) { fprintf(stderr,"space difference of %.2f%% is too large\n", percent_difference); exit(GT_EXIT_PROGRAMMING_ERROR); } if (gt_double_smaller_double(fcsl->max_percent_difference, percent_difference)) { fcsl->max_percent_difference = percent_difference; } } } } #endif } genometools-1.5.1/src/match/firstcodes-spacelog.h000066400000000000000000000052421211610345200220430ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FIRSTCODES_SPACELOG_H #define FIRSTCODES_SPACELOG_H #include #include typedef struct GtFirstcodesspacelog GtFirstcodesspacelog; GtFirstcodesspacelog *gt_firstcodes_spacelog_new(void); void gt_firstcodes_spacelog_delete(GtFirstcodesspacelog *fcsl); size_t gt_firstcodes_spacelog_total(const GtFirstcodesspacelog *fcsl); size_t gt_firstcodes_spacelog_workspace(const GtFirstcodesspacelog *fcsl); void gt_firstcodes_spacelog_start_diff(GtFirstcodesspacelog *fcsl); void gt_firstcodes_spacelog_stop_diff(GtFirstcodesspacelog *fcsl); size_t gt_firstcodes_spacelog_peak(const GtFirstcodesspacelog *fcsl); bool gt_firstcodes_spacelog_showentries(FILE *fp, const GtFirstcodesspacelog *fcsl); void gt_firstcodes_spacelog_add(GtFirstcodesspacelog *fcsl, int line, const char *filename, bool add, const char *title, bool work, size_t size); #define GT_FCI_ADDWORKSPACE(FCSL,TAB,SIZE)\ gt_firstcodes_spacelog_add(FCSL,__LINE__,__FILE__,true,TAB,true,SIZE) #define GT_FCI_ADDSPLITSPACE(FCSL,TAB,SIZE)\ gt_firstcodes_spacelog_add(FCSL,__LINE__,__FILE__,true,TAB,false,SIZE) #define GT_FCI_SUBTRACTWORKSPACE(FCSL,TAB)\ gt_firstcodes_spacelog_add(FCSL,__LINE__,__FILE__,false,TAB,true,0) #define GT_FCI_SUBTRACTSPLITSPACE(FCSL,TAB)\ gt_firstcodes_spacelog_add(FCSL,__LINE__,__FILE__,false,TAB,false,0) #define GT_FCI_SUBTRACTADDWORKSPACE(FCSL,TAB,SIZE)\ gt_firstcodes_spacelog_add(FCSL,__LINE__,__FILE__,false,TAB,true,SIZE) #define GT_FCI_SUBTRACTADDSPLITSPACE(FCSL,TAB,SIZE)\ gt_firstcodes_spacelog_add(FCSL,__LINE__,__FILE__,false,TAB,false,SIZE) #endif genometools-1.5.1/src/match/firstcodes-tab.c000066400000000000000000000556661211610345200210260ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/xansi_api.h" #include "core/fa.h" #include "core/assert_api.h" #include "core/divmodmul.h" #include "core/ma.h" #include "core/mathsupport.h" #ifdef SKDEBUG #include "core/disc_distri_api.h" #endif #include "core/log.h" #include "core/spacecalc.h" #include "core/hashmap-generic.h" #include "core/arraydef.h" #include "firstcodes-tab.h" #include "firstcodes-psbuf.h" #include "firstcodes-cache.h" static void gt_firstcodes_countocc_new(GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct, unsigned int bitsforcount, unsigned long numofsequences) { if (bitsforcount < (unsigned int) (sizeof (GtCountAFCtype) * CHAR_BIT)) { fct->countocc_small = gt_malloc((size_t) (numofsequences+1) * sizeof (*fct->countocc_small)); GT_FCI_ADDWORKSPACE(fcsl,"countocc_small", sizeof (*fct->countocc_small) * (numofsequences+1)); } else { fct->countocc_small = NULL; } fct->countocc_exceptions = ul_u32_gt_hashmap_new(); gt_assert(fct->countocc_exceptions != NULL); fct->outfilenameleftborder = NULL; fct->leftborder_samples = NULL; #ifdef _LP64 GT_INITARRAY(&fct->bitchangepoints,GtUlong); #endif } static void gt_firstcodes_countocc_set(GtFirstcodestab *fct, unsigned long *differences, unsigned long idx, unsigned long value) { gt_assert(value > 0); if (fct->countocc_small == NULL) { if (value <= fct->countmax) { differences[idx] |= (value << fct->shiftforcounts); } else { differences[idx] &= fct->differencemask; ul_u32_gt_hashmap_add(fct->countocc_exceptions,idx, (uint32_t) (value - fct->countmax)); fct->hashmap_addcount++; } } else { if (value <= GT_FIRSTCODES_MAXSMALL) { fct->countocc_small[idx] = (GtCountAFCtype) value; } else { fct->countocc_small[idx] = 0; ul_u32_gt_hashmap_add(fct->countocc_exceptions,idx, value - GT_FIRSTCODES_MAXSMALL); fct->hashmap_addcount++; } } } static void gt_firstcodes_countocc_increment(GtFirstcodestab *fct, unsigned long *differences, unsigned long idx, unsigned long inc) { unsigned long count; if (fct->countocc_small == NULL) { if ((count = (differences[idx] >> fct->shiftforcounts)) > 0) { differences[idx] &= fct->differencemask; if (inc + count <= fct->countmax) { differences[idx] |= ((inc + count) << fct->shiftforcounts); } else { ul_u32_gt_hashmap_add(fct->countocc_exceptions,idx, (uint32_t) (inc + count - fct->countmax)); fct->hashmap_addcount++; } } else { uint32_t *valueptr = ul_u32_gt_hashmap_get(fct->countocc_exceptions,idx); gt_assert(valueptr != NULL && *valueptr + inc <= UINT32_MAX); (*valueptr) += inc; fct->hashmap_getcount++; } } else { if ((count = (unsigned long) fct->countocc_small[idx]) > 0) { if (inc + count <= GT_FIRSTCODES_MAXSMALL) { fct->countocc_small[idx] += inc; } else { ul_u32_gt_hashmap_add(fct->countocc_exceptions,idx, inc + count - GT_FIRSTCODES_MAXSMALL); fct->countocc_small[idx] = 0; fct->hashmap_addcount++; } } else { uint32_t *valueptr = ul_u32_gt_hashmap_get(fct->countocc_exceptions,idx); gt_assert(valueptr != NULL && *valueptr + inc <= UINT32_MAX); (*valueptr) += inc; fct->hashmap_getcount++; } } } static void gt_firstcodes_countocc_resize(GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct, unsigned long numofdifferentcodes) { if (fct->countocc_small != NULL) { fct->countocc_small = gt_realloc(fct->countocc_small, sizeof (*fct->countocc_small) * (numofdifferentcodes+1)); GT_FCI_SUBTRACTADDWORKSPACE(fcsl,"countocc_small", sizeof (*fct->countocc_small) * (numofdifferentcodes+1)); } } #ifdef SKDEBUG typedef struct { unsigned long smallcount, smallsum, largecount, largesum, hugecount, hugesum; } GtCountdistri_info; static void gt_firstcodes_evaluate_distvalue(unsigned long key, unsigned long long value, void *data) { GtCountdistri_info *cdi = (GtCountdistri_info *) data; gt_assert(value > 0); if (key <= UINT8_MAX) { cdi->smallcount++; cdi->smallsum += value; } else { if (key <= UINT16_MAX) { cdi->largecount++; cdi->largesum += value; } else { cdi->hugecount++; cdi->hugesum += value; } } } static void gt_firstcodes_evaluate_countdistri(const GtDiscDistri *countdistri) { GtCountdistri_info cdi; unsigned long sum; size_t spacenow, spacedirectstore, spaceopt, spacewithhash;; cdi.smallcount = 0; cdi.smallsum = 0; cdi.largecount = 0; cdi.largesum = 0; cdi.hugecount = 0; cdi.hugesum = 0; gt_disc_distri_foreach(countdistri,gt_firstcodes_evaluate_distvalue,&cdi); sum = cdi.smallsum + cdi.largesum + cdi.hugesum; gt_log_log("small=%lu,%lu (%.2f)",cdi.smallcount,cdi.smallsum, (double) cdi.smallsum/sum); gt_log_log("large=%lu,%lu (%.2f)",cdi.largecount,cdi.largesum, (double) cdi.largesum/sum); gt_log_log("huge=%lu,%lu (%.2f)",cdi.hugecount,cdi.hugesum, (double) cdi.largesum/sum); spacenow = sizeof (uint32_t) * sum; spaceopt = sizeof (uint8_t) * sum; spacedirectstore = sizeof (uint32_t) * cdi.largesum; spacewithhash = (2 * sizeof (void *)) * cdi.largecount; gt_log_log("spacenow=%.2f, spaceopt (direct)=%2.f spaceopt (hash) =%.2f", GT_MEGABYTES(spacenow), GT_MEGABYTES(spaceopt+spacedirectstore), GT_MEGABYTES(spaceopt+spacewithhash)); } #endif unsigned long gt_firstcodes_remdups(unsigned long *allfirstcodes, GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct, unsigned long numofsequences, Gtmarksubstring *markprefix, Gtmarksubstring *marksuffix, GtArrayGtIndexwithcode **binsearchcache, unsigned int addbscache_depth, bool withdistbits, GtLogger *logger) { if (numofsequences == 0) { fct->differentcodes = 0; } else { unsigned long numofdifferentcodes = 1UL, storeidx, readidx, previouscode, idx, maxdifference = 0, cachewidth, nextstorecache, lastocc, storedvalue, diff, *distbits = NULL; unsigned int bitsformaxdifference, bitsforcount; previouscode = allfirstcodes[0]; for (idx=1UL; idx < numofsequences; idx++) { unsigned long currentcode = allfirstcodes[idx]; if (previouscode != currentcode) { numofdifferentcodes++; if (maxdifference < currentcode - previouscode) { maxdifference = currentcode - previouscode; } previouscode = currentcode; } } bitsformaxdifference = gt_determinebitspervalue(maxdifference); fct->differencemask = (1UL << bitsformaxdifference) - 1UL; gt_assert(sizeof (unsigned long) * CHAR_BIT >= (size_t) bitsformaxdifference); bitsforcount = (unsigned int) sizeof (unsigned long) * CHAR_BIT - bitsformaxdifference; fct->countmax = (1UL << bitsforcount) - 1UL; fct->shiftforcounts = bitsformaxdifference; gt_logger_log(logger,"maximum difference of neighbored codes %lu (%u bits)", maxdifference,bitsformaxdifference); /* printf("maxdifference=%lu,bitsformaxdifference=%u,bitsforcount=%u\n", maxdifference,bitsformaxdifference,bitsforcount); */ gt_firstcodes_countocc_new(fcsl,fct,bitsforcount,numofsequences); gt_marksubstring_mark(markprefix,allfirstcodes[0]); gt_marksubstring_mark(marksuffix,allfirstcodes[0]); *binsearchcache = gt_firstcodes_binsearchcache_new(numofdifferentcodes, addbscache_depth, fcsl); cachewidth = (*binsearchcache) == NULL ? 0 : gt_firstcodes_binsearchcache_width(*binsearchcache); nextstorecache = cachewidth; lastocc = 1UL; /* for first code */ storedvalue = allfirstcodes[0]; allfirstcodes[0] = 0; if (withdistbits) { distbits = gt_calloc((size_t) (64+1),sizeof (*distbits)); } for (storeidx = 0, readidx = 1UL; readidx < numofsequences; readidx++) { unsigned long readvalue = allfirstcodes[readidx]; if (storedvalue != readvalue) { if ((*binsearchcache) != NULL && storeidx == nextstorecache) { gt_firstcodes_binsearchcache_set_index_code(*binsearchcache, nextstorecache, storedvalue); nextstorecache += cachewidth; } gt_firstcodes_countocc_set(fct,allfirstcodes,storeidx,lastocc); lastocc = 1UL; storeidx++; gt_assert(storedvalue < readvalue); diff = readvalue - storedvalue; if (distbits != NULL) { distbits[gt_determinebitspervalue(diff)]++; } allfirstcodes[storeidx] = diff; storedvalue = readvalue; gt_marksubstring_mark(markprefix,readvalue); gt_marksubstring_mark(marksuffix,readvalue); } else { lastocc++; } } if (withdistbits) { int bits; gt_assert(distbits != NULL); for (bits = 0; bits <= 64; bits++) { if (distbits[bits] > 0) { printf("%d bits: %lu\n",bits,distbits[bits]); } } gt_free(distbits); } gt_firstcodes_countocc_set(fct,allfirstcodes,storeidx,lastocc); gt_assert(numofdifferentcodes == (unsigned long) (storeidx + 1)); if (numofdifferentcodes < numofsequences) { /* reduce the memory requirement, as the duplicated elements are not needed */ gt_firstcodes_countocc_resize(fcsl,fct,numofdifferentcodes); } fct->differentcodes = numofdifferentcodes; } gt_logger_log(logger,"number of different first codes=%lu (%.2f%%) " "in %lu sequences", fct->differentcodes, 100.00 * (double) fct->differentcodes/numofsequences, numofsequences); return fct->differentcodes; } unsigned long gt_firstcodes_accumulatecounts_merge( GtFirstcodestab *tab, unsigned long *differences, unsigned long differentcodes, const unsigned long *querystream_fst, const unsigned long *querystream_lst, unsigned long subjectindex, unsigned long subjectcode) { unsigned long found = 0, lastocc = 0; const unsigned long *query = querystream_fst; gt_assert(subjectindex < differentcodes); while (query <= querystream_lst) { if (*query <= subjectcode) { if (*query == subjectcode) { lastocc++; } query++; } else { if (lastocc > 0) { gt_firstcodes_countocc_increment(tab,differences,subjectindex,lastocc); found += lastocc; lastocc = 0; } if (subjectindex < differentcodes - 1) { subjectindex++; /* extract diff */ subjectcode += (differences[subjectindex] & tab->differencemask); } else { break; } } } if (lastocc > 0) { gt_firstcodes_countocc_increment(tab,differences,subjectindex,lastocc); found += lastocc; lastocc = 0; } return found; } static uint32_t gt_firstcodes_countocc_get(const GtFirstcodestab *fct, const unsigned long *differences, unsigned long idx) { if (fct->countocc_small == NULL) { unsigned long count; if ((count = (differences[idx] >> fct->shiftforcounts)) > 0) { return (uint32_t) count; } else { uint32_t *valueptr = ul_u32_gt_hashmap_get(fct->countocc_exceptions,idx); gt_assert(valueptr != NULL); return *valueptr + (uint32_t) fct->countmax; } } else { if (fct->countocc_small[idx] > 0) { return (uint32_t) fct->countocc_small[idx]; } else { uint32_t *valueptr = ul_u32_gt_hashmap_get(fct->countocc_exceptions,idx); gt_assert(valueptr != NULL); return *valueptr + (uint32_t) GT_FIRSTCODES_MAXSMALL; } } } #define GT_PARTIALSUM_LEFTBORDER_SET(BUF,VALUE)\ if ((BUF)->nextfree == (BUF)->allocated)\ {\ gt_leftborderbuffer_flush(BUF);\ }\ (BUF)->spaceuint32_t[(BUF)->nextfree++] = (uint32_t) (VALUE); #define GT_FIRSTCODES_ADD_SAMPLE(PARTSUM)\ gt_assert(samplecount < fct->numofsamples);\ fct->leftborder_samples[samplecount++] = PARTSUM unsigned long gt_firstcodes_partialsums(GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct, const unsigned long *differences, GT_UNUSED unsigned long expectedlastpartsum) { unsigned long idx, partsum, maxbucketsize, bitmask, samplecount = 0, spacewithhashmap = 0, spacewithouthashmap = 0; uint32_t currentcount; GtLeftborderOutbuffer *leftborderbuffer_all = NULL; #ifdef _LP64 const unsigned int btp = gt_determinebitspervalue(expectedlastpartsum); unsigned long exceedvalue = 1UL << GT_MODVALUEBITS; #endif #ifdef SKDEBUG GtDiscDistri *countdistri = gt_disc_distri_new(); #endif gt_assert(fct->differentcodes < UINT32_MAX); gt_log_log("hashmap_addcount=%lu (%.5f%%)",fct->hashmap_addcount, 100.0 * (double) fct->hashmap_addcount/ fct->differentcodes); gt_log_log("hashmap_getcount=%lu (%.5f%%)", fct->hashmap_getcount, 100.0 * (double) fct->hashmap_getcount/ fct->differentcodes); #ifdef _LP64 if (btp <= GT_MODVALUEBITS) { fct->bitchangepoints.allocatedGtUlong = 0; fct->bitchangepoints.spaceGtUlong = NULL; } else { fct->bitchangepoints.allocatedGtUlong = 1UL << (btp - GT_MODVALUEBITS); gt_log_log("lastpartsum=%lu, bitchangepoints.allocated=%lu", expectedlastpartsum,fct->bitchangepoints.allocatedGtUlong); fct->bitchangepoints.spaceGtUlong = gt_malloc(sizeof (*fct->bitchangepoints.spaceGtUlong) * fct->bitchangepoints.allocatedGtUlong); } fct->bitchangepoints.nextfreeGtUlong = 0; #endif currentcount = gt_firstcodes_countocc_get(fct,differences,0); partsum = (unsigned long) currentcount; maxbucketsize = (unsigned long) currentcount; #ifdef SKDEBUG gt_disc_distri_add(countdistri,(unsigned long) currentcount); #endif fct->sampleshift = 9U; while (true) { fct->sampledistance = 1UL << fct->sampleshift; if (fct->sampledistance < fct->differentcodes) { break; } fct->sampleshift--; } bitmask = fct->sampledistance - 1; fct->numofsamples = 1UL + 1UL + fct->differentcodes/fct->sampledistance; fct->leftborder_samples = gt_malloc(sizeof (*fct->leftborder_samples) * fct->numofsamples); GT_FCI_ADDWORKSPACE(fcsl,"leftborder_samples", sizeof (*fct->leftborder_samples) * fct->numofsamples); GT_FIRSTCODES_ADD_SAMPLE(partsum); leftborderbuffer_all = gt_leftborderbuffer_new("leftborder",fcsl); GT_PARTIALSUM_LEFTBORDER_SET(leftborderbuffer_all,partsum); for (idx = 1UL; idx < fct->differentcodes; idx++) { currentcount = gt_firstcodes_countocc_get(fct,differences,idx); #ifdef _LP64 gt_assert(currentcount <= GT_MODVALUEMASK); #endif #ifdef SKDEBUG gt_disc_distri_add(countdistri,(unsigned long) currentcount); #endif if (maxbucketsize < (unsigned long) currentcount) { maxbucketsize = (unsigned long) currentcount; } partsum += currentcount; #ifdef _LP64 if (fct->bitchangepoints.allocatedGtUlong > 0 && partsum >= exceedvalue) { gt_assert(idx > 0 && fct->bitchangepoints.nextfreeGtUlong < fct->bitchangepoints.allocatedGtUlong); gt_assert(fct->bitchangepoints.spaceGtUlong != NULL); fct->bitchangepoints.spaceGtUlong [fct->bitchangepoints.nextfreeGtUlong++] = idx-1; exceedvalue = ((exceedvalue >> GT_MODVALUEBITS) + 1) << GT_MODVALUEBITS; } #endif if ((idx & bitmask) == 0) { GT_FIRSTCODES_ADD_SAMPLE(partsum); } GT_PARTIALSUM_LEFTBORDER_SET(leftborderbuffer_all,partsum); } GT_PARTIALSUM_LEFTBORDER_SET(leftborderbuffer_all,partsum); fct->outfilenameleftborder = gt_leftborderbuffer_delete(leftborderbuffer_all,fcsl, gt_firstcodes_leftborder_entries(fct)); if (partsum > fct->leftborder_samples[samplecount-1]) { GT_FIRSTCODES_ADD_SAMPLE(partsum); } else { gt_assert(partsum == fct->leftborder_samples[samplecount-1]); } gt_assert(expectedlastpartsum == partsum); fct->numofsamples = samplecount-1; #ifdef SKDEBUG gt_firstcodes_evaluate_countdistri(countdistri); gt_disc_distri_delete(countdistri); #endif if (fct->countocc_small != NULL) { gt_free(fct->countocc_small); GT_FCI_SUBTRACTWORKSPACE(fcsl,"countocc_small"); fct->countocc_small = NULL; } if (fct->hashmap_addcount > 0 && gt_ma_bookkeeping_enabled()) { spacewithhashmap = gt_ma_get_space_current() + gt_fa_get_space_current(); } gt_hashtable_delete(fct->countocc_exceptions); if (fct->hashmap_addcount > 0 && gt_ma_bookkeeping_enabled()) { unsigned long hashmapspace; spacewithouthashmap = gt_ma_get_space_current() + gt_fa_get_space_current(); gt_assert(spacewithouthashmap < spacewithhashmap); hashmapspace = spacewithhashmap - spacewithouthashmap; gt_log_log("space for hashmap=%.2f (%lu bytes per entry)", GT_MEGABYTES(hashmapspace),hashmapspace/fct->hashmap_addcount); } fct->countocc_exceptions = NULL; return maxbucketsize; } unsigned long gt_firstcodes_get_sample(const GtFirstcodestab *fct, unsigned long idx) { gt_assert(idx <= fct->numofsamples); return fct->leftborder_samples[idx]; } unsigned long gt_firstcodes_get_leftborder(const GtFirstcodestab *fct, unsigned long idx) { #ifdef _LP64 GT_CHANGEPOINT_GET(changepoint); return (unsigned long) fct->leftborder[idx] + (changepoint << GT_MODVALUEBITS); #else return (unsigned long) fct->leftborder[idx]; #endif } unsigned long gt_firstcodes_leftborder_entries(const GtFirstcodestab *fct) { return fct->differentcodes + 1; } unsigned long gt_firstcodes_numofsamples(const GtFirstcodestab *fct) { return fct->numofsamples; } unsigned long gt_firstcodes_findfirstsamplelarger(const GtFirstcodestab *fct, unsigned long suftaboffset) { unsigned long left = 0, right, mid, midval, found; right = found = fct->numofsamples; while (left+1 < right) { mid = GT_DIV2(left+right); midval = gt_firstcodes_get_sample(fct,mid); if (suftaboffset == midval) { return mid; } if (suftaboffset < midval) { found = mid; right = mid - 1; } else { left = mid + 1; } } gt_assert(suftaboffset <= gt_firstcodes_get_sample(fct,found)); return found; } unsigned long gt_firstcodes_sample2full(const GtFirstcodestab *fct, unsigned long idx) { gt_assert(idx <= fct->numofsamples); if (idx < fct->numofsamples) { return idx << fct->sampleshift; } return fct->differentcodes - 1; } void gt_firstcodes_samples_delete(GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct) { if (fct->leftborder_samples != NULL) { gt_free(fct->leftborder_samples); GT_FCI_SUBTRACTWORKSPACE(fcsl,"leftborder_samples"); fct->leftborder_samples = NULL; } } void gt_firstcodes_countocc_delete(GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct) { if (fct->countocc_small != NULL) { GT_FCI_SUBTRACTWORKSPACE(fcsl,"countocc_small"); gt_free(fct->countocc_small); fct->countocc_small = NULL; } gt_hashtable_delete(fct->countocc_exceptions); fct->countocc_exceptions = NULL; } void gt_firstcodes_tab_delete(GtFirstcodesspacelog *fcsl,GtFirstcodestab *fct) { gt_firstcodes_samples_delete(fcsl,fct); gt_str_delete(fct->outfilenameleftborder); fct->outfilenameleftborder = NULL; #ifdef _LP64 GT_FREEARRAY(&fct->bitchangepoints,GtUlong); #endif } void gt_firstcodes_countocc_setnull(GtFirstcodestab *fct) { fct->leftborder = NULL; fct->countocc_small = NULL; fct->leftborder_samples = NULL; fct->countocc_exceptions = NULL; fct->differentcodes = 0; fct->hashmap_addcount = 0; fct->hashmap_getcount = 0; fct->outfilenameleftborder = NULL; #ifdef _LP64 GT_INITARRAY(&fct->bitchangepoints,GtUlong); #endif } uint32_t **gt_firstcodes_leftborder_address(GtFirstcodestab *fct) { return &fct->leftborder; } void gt_firstcodes_leftborder_remap(GtFirstcodestab *fct,uint32_t *ptr) { fct->leftborder = ptr; } const GtStr *gt_firstcodes_outfilenameleftborder(const GtFirstcodestab *fct) { return fct->outfilenameleftborder; } genometools-1.5.1/src/match/firstcodes-tab.h000066400000000000000000000136171211610345200210210ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FIRSTCODES_TAB_H #define FIRSTCODES_TAB_H #include #include "core/unused_api.h" #include "core/str_api.h" #include "core/hashmap-generic.h" #include "core/logger_api.h" #include "core/arraydef.h" #include "marksubstring.h" #include "firstcodes-spacelog.h" #include "firstcodes-cache.h" typedef uint8_t GtCountAFCtype; #define GT_FIRSTCODES_MAXSMALL UINT8_MAX typedef struct { unsigned long differentcodes, numofsamples, sampledistance, hashmap_addcount, hashmap_getcount; unsigned int sampleshift; uint32_t *leftborder; GtCountAFCtype *countocc_small; GtHashtable *countocc_exceptions; unsigned long *leftborder_samples; GtStr *outfilenameleftborder; unsigned long differencemask, /* for extracting the difference */ countmax; unsigned int shiftforcounts; #ifdef _LP64 GtArrayGtUlong bitchangepoints; #endif } GtFirstcodestab; DECLARE_HASHMAP(unsigned long, ul, uint32_t, u32, static, inline) DEFINE_HASHMAP(unsigned long, ul, uint32_t, u32, gt_ht_ul_elem_hash, gt_ht_ul_elem_cmp, NULL_DESTRUCTOR, NULL_DESTRUCTOR, static, inline) #ifdef _LP64 #define GT_CHANGEPOINT_GET(CP)\ unsigned long CP;\ for (CP = 0; CP < fct->bitchangepoints.nextfreeGtUlong &&\ idx > fct->bitchangepoints.spaceGtUlong[CP]; CP++)\ /* Nothing */ ; #endif #define GT_MODVALUEBITS 32U #define GT_MODVALUEMASK UINT32_MAX GT_UNUSED static inline unsigned long gt_firstcodes_insertionindex(GtFirstcodestab *fct, unsigned long idx) { #ifdef _LP64 GT_CHANGEPOINT_GET(changepoint); gt_assert(idx < fct->differentcodes); if (fct->leftborder[idx] > 0) { return (unsigned long) --fct->leftborder[idx] + (changepoint << GT_MODVALUEBITS); } else { gt_assert(changepoint > 0); changepoint--; fct->bitchangepoints.spaceGtUlong[changepoint]++; fct->leftborder[idx] = GT_MODVALUEMASK; return (unsigned long) fct->leftborder[idx] + (changepoint << GT_MODVALUEBITS); } #else gt_assert(idx < fct->differentcodes && fct->leftborder[idx] > 0); return (unsigned long) --fct->leftborder[idx]; #endif } unsigned long gt_firstcodes_partialsums(GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct, const unsigned long *differences, unsigned long expectedlastpartsum); unsigned long gt_firstcodes_get_leftborder(const GtFirstcodestab *fct, unsigned long idx); unsigned long gt_firstcodes_numofsamples(const GtFirstcodestab *fct); unsigned long gt_firstcodes_findfirstsamplelarger(const GtFirstcodestab *fct, unsigned long suftaboffset); void gt_firstcodes_samples_delete(GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct); void gt_firstcodes_countocc_delete(GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct); void gt_firstcodes_tab_delete(GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct); void gt_firstcodes_countocc_setnull(GtFirstcodestab *fct); uint32_t **gt_firstcodes_leftborder_address(GtFirstcodestab *fct); void gt_firstcodes_leftborder_remap(GtFirstcodestab *fct,uint32_t *ptr); const GtStr *gt_firstcodes_outfilenameleftborder(const GtFirstcodestab *fct); unsigned long gt_firstcodes_sample2full(const GtFirstcodestab *fct, unsigned long idx); unsigned long gt_firstcodes_leftborder_entries(const GtFirstcodestab *fct); unsigned long gt_firstcodes_leftborder_entries(const GtFirstcodestab *fct); unsigned long gt_firstcodes_get_sample(const GtFirstcodestab *fct, unsigned long idx); unsigned long gt_firstcodes_remdups(unsigned long *allfirstcodes, GtFirstcodesspacelog *fcsl, GtFirstcodestab *fct, unsigned long numofsequences, Gtmarksubstring *markprefix, Gtmarksubstring *marksuffix, GtArrayGtIndexwithcode **binsearchcache, unsigned int addbscache_depth, bool withdistbits, GtLogger *logger); unsigned long gt_firstcodes_accumulatecounts_merge( GtFirstcodestab *tab, unsigned long *differences, unsigned long differentcodes, const unsigned long *querystream_fst, const unsigned long *querystream_lst, unsigned long subjectindex, unsigned long subjectcode); #endif genometools-1.5.1/src/match/firstcodes.c000066400000000000000000001632601211610345200202500ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/fa.h" #include "core/arraydef.h" #include "core/codetype.h" #include "core/encseq.h" #include "core/error_api.h" #include "core/logger_api.h" #include "core/mathsupport.h" #include "core/radix_sort.h" #include "core/showtime.h" #include "core/spacecalc.h" #include "core/spacepeak.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/minmax.h" #ifdef GT_THREADS_ENABLED #include "core/thread_api.h" #endif #include "firstcodes-buf.h" #include "firstcodes-spacelog.h" #include "firstcodes-tab.h" #include "firstcodes-accum.h" #include "firstcodes-insert.h" #include "firstcodes-cache.h" #include "firstcodes.h" #include "marksubstring.h" #include "seqnumrelpos.h" #include "sfx-partssuf.h" #include "sfx-shortreadsort.h" #include "sfx-suffixer.h" #include "spmsuftab.h" #include "stamp.h" typedef struct { unsigned long firstcodehits, firstcodeposhits, countsequences, numofsequences, codebuffer_total, currentminindex, currentmaxindex, differentcodes, /* a copy of the same value as in tab */ widthofpart; GtArrayGtIndexwithcode *binsearchcache; unsigned int flushcount, shiftright2index, marksuffixunits, markprefixunits, bitsforposref; GtRadixsortinfo *radixsort_code, *radixsort_codepos; GtSpmsuftab *spmsuftab; GtSfxmappedrange *mappedleftborder, *mappedallfirstcodes, *mappedmarkprefix; unsigned long *allfirstcodes, allfirstcodes0_save; GtFirstcodesspacelog *fcsl; GtCodeposbuffer buf; GtFirstcodestab tab; } GtFirstcodesinfo; static double gt_firstcodes_round(double d) { return floor(d + 0.5); } static unsigned long gt_kmercode2prefix_index(unsigned long idx, const void *data) { const GtFirstcodesinfo *fci = (const GtFirstcodesinfo *) data; gt_assert(fci != NULL && idx < fci->differentcodes); return fci->allfirstcodes[idx] >> fci->shiftright2index; } static void gt_minmax_index_kmercode2prefix(unsigned long *minindex, unsigned long *maxindex, const void *data) { *minindex = gt_kmercode2prefix_index(*minindex,data); *maxindex = gt_kmercode2prefix_index(*maxindex,data); } static void gt_storefirstcodes(void *processinfo, GT_UNUSED bool firstinrange, GT_UNUSED unsigned long pos, GtCodetype code) { GtFirstcodesinfo *fci = (GtFirstcodesinfo *) processinfo; gt_assert(fci != NULL && firstinrange && fci->allfirstcodes != NULL && fci->countsequences < fci->numofsequences); fci->allfirstcodes[fci->countsequences++] = code; } static void gt_firstcodes_restore_from_differences(GtFirstcodesinfo *fci) { unsigned long idx; fci->allfirstcodes[0] = fci->allfirstcodes0_save; for (idx=1UL; idx < fci->differentcodes; idx++) { fci->allfirstcodes[idx] = (fci->allfirstcodes[idx] & fci->tab.differencemask) + fci->allfirstcodes[idx-1]; } } static void gt_firstcodes_accumulatecounts_flush(void *data) { GtFirstcodesinfo *fci = (GtFirstcodesinfo *) data; if (fci->buf.nextfree > 0) { unsigned long foundindex, foundcode; gt_assert(fci->allfirstcodes != NULL); fci->codebuffer_total += fci->buf.nextfree; gt_radixsort_inplace_sort(fci->radixsort_code,fci->buf.nextfree); foundindex = gt_firstcodes_find_accu(&foundcode, fci->allfirstcodes, fci->allfirstcodes0_save, fci->differentcodes, fci->tab.differencemask, fci->binsearchcache, fci->buf.spaceGtUlong[0]); if (foundindex != ULONG_MAX) { fci->firstcodehits += gt_firstcodes_accumulatecounts_merge(&fci->tab, fci->allfirstcodes, fci->differentcodes, fci->buf.spaceGtUlong, fci->buf.spaceGtUlong + fci->buf.nextfree - 1, foundindex, foundcode); } fci->flushcount++; fci->buf.nextfree = 0; } } const unsigned long *gt_firstcodes_find_insert(const GtFirstcodesinfo *fci, unsigned long code) { const unsigned long *found = NULL, *leftptr = NULL, *midptr, *rightptr = NULL; leftptr = fci->allfirstcodes + fci->currentminindex; rightptr = fci->allfirstcodes + fci->currentmaxindex; while (leftptr <= rightptr) { midptr = leftptr + GT_DIV2((unsigned long) (rightptr-leftptr)); if (code < *midptr) { rightptr = midptr - 1; found = midptr; } else { if (code > *midptr) { leftptr = midptr + 1; } else { return midptr; } } } return found; } static unsigned long gt_firstcodes_insertsuffixes_merge( GtFirstcodesinfo *fci, const GtUlongPair *querystream_fst, const unsigned long *subjectstream_fst) { unsigned long found = 0, idx; const GtUlongPair *query = querystream_fst, *querystream_lst = fci->buf.spaceGtUlongPair + fci->buf.nextfree - 1; const unsigned long *subject = subjectstream_fst, *subjectstream_lst = fci->allfirstcodes + fci->currentmaxindex; while (query <= querystream_lst && subject <= subjectstream_lst) { if (query->a <= *subject) { if (query->a == *subject) { idx = gt_firstcodes_insertionindex(&fci->tab, (unsigned long) (subject - fci->allfirstcodes)); gt_assert(idx < fci->firstcodehits + fci->numofsequences); gt_spmsuftab_set(fci->spmsuftab,idx, gt_spmsuftab_usebitsforpositions(fci->spmsuftab) ? gt_seqnumrelpos_decode_pos(fci->buf.snrp,query->b) : query->b); found++; } query++; } else { subject++; } } return found; } static void gt_firstcodes_insertsuffixes_flush(void *data) { GtFirstcodesinfo *fci = (GtFirstcodesinfo *) data; if (fci->buf.nextfree > 0) { const unsigned long *ptr; gt_assert(fci->allfirstcodes != NULL); fci->codebuffer_total += fci->buf.nextfree; gt_radixsort_inplace_sort(fci->radixsort_codepos,fci->buf.nextfree); ptr = gt_firstcodes_find_insert(fci,fci->buf.spaceGtUlongPair[0].a); if (ptr != NULL) { fci->firstcodeposhits += gt_firstcodes_insertsuffixes_merge(fci,fci->buf.spaceGtUlongPair, ptr); } fci->flushcount++; fci->buf.nextfree = 0; } } static void gt_firstcodes_checksuftab_bucket(const GtEncseq *encseq, GtReadmode readmode, GtEncseqReader *esr1, GtEncseqReader *esr2, unsigned long previoussuffix, bool previousdefined, const unsigned long *seqnum_relpos_bucket, const GtSeqnumrelpos *snrp, GT_UNUSED const uint16_t *lcptab_bucket, unsigned long numberofsuffixes) { unsigned long idx, current, maxlcp, totallength = gt_encseq_total_length(encseq); const unsigned long depth = 0; GT_UNUSED int cmp; const bool specialsareequal = false, specialsareequalatdepth0 = false; gt_assert(!previousdefined || previoussuffix < totallength); for (idx = 0; idx < numberofsuffixes; idx++) { current = gt_seqnumrelpos_decode_pos(snrp,seqnum_relpos_bucket[idx]); if (previousdefined && idx < totallength) { gt_assert(current < totallength); cmp = gt_encseq_check_comparetwosuffixes(encseq, readmode, &maxlcp, specialsareequal, specialsareequalatdepth0, depth, previoussuffix, current, esr1, esr2); gt_assert(cmp <= 0); gt_assert(idx == 0 || maxlcp == (unsigned long) lcptab_bucket[idx]); } previoussuffix = current; previousdefined = true; } } static int gt_firstcodes_sortremaining(GtShortreadsortworkinfo *srsw, const GtEncseq *encseq, GtReadmode readmode, const GtSpmsuftab *spmsuftab, const GtSeqnumrelpos *snrp, const GtFirstcodestab *fct, unsigned long minindex, unsigned long maxindex, unsigned long sumofwidth, unsigned long spaceforbucketprocessing, unsigned long depth, GtFirstcodesintervalprocess itvprocess, GtFirstcodesintervalprocess_end itvprocess_end, void *itvprocessdata, bool withsuftabcheck, GtError *err) { unsigned long current, next = GT_UNDEF_ULONG, idx, width, sumwidth = 0, previoussuffix = 0; GtShortreadsortresult srsresult; bool previousdefined = false, haserr = false; current = gt_firstcodes_get_leftborder(fct,minindex); for (idx = minindex; idx <= maxindex; idx++) { if (idx < maxindex) { next = gt_firstcodes_get_leftborder(fct,idx+1); gt_assert(current < next); width = next - current; } else { gt_assert(sumofwidth > current); width = sumofwidth - current; } sumwidth += width; gt_assert(sumwidth <= spmsuftab->numofentries); if (width >= 2UL) { gt_shortreadsort_firstcodes_sort(&srsresult, srsw, snrp, encseq, spmsuftab, current, width, depth, 0); if (withsuftabcheck) { gt_firstcodes_checksuftab_bucket(encseq, readmode, NULL, NULL, previoussuffix, previousdefined, srsresult.suftab_bucket, snrp, srsresult.lcptab_bucket, width); previousdefined = true; previoussuffix = gt_seqnumrelpos_decode_pos(snrp,srsresult.suftab_bucket[width-1]); } if (itvprocess != NULL) { if (itvprocess(itvprocessdata, srsresult.suftab_bucket, snrp,srsresult.lcptab_bucket,width, spaceforbucketprocessing,err) != 0) { haserr = true; break; } } } else { gt_assert(width == 1UL); } gt_assert(next != GT_UNDEF_ULONG); current = next; } if (itvprocess_end != NULL) { itvprocess_end(itvprocessdata); } return haserr ? -1 : 0; } #ifdef GT_THREADS_ENABLED static unsigned long gt_firstcodes_findfirstlarger(const GtFirstcodestab *fct, unsigned long start, unsigned long end, unsigned long offset) { unsigned long left = start, right = end, found = end, mid, midval; while (left+1 < right) { mid = GT_DIV2(left+right); midval = gt_firstcodes_get_leftborder(fct,mid); if (offset == midval) { return mid; } if (offset < midval) { found = mid; right = mid - 1; } else { left = mid + 1; } } return found; } static unsigned long *gt_evenly_divide_part(const GtFirstcodestab *fct, unsigned long partminindex, unsigned long partmaxindex, unsigned long numofsuffixes, unsigned int numofparts) { unsigned long *endindexes, widthofpart, offset; unsigned int part, remainder; gt_assert(partminindex < partmaxindex && numofparts >= 2U); widthofpart = numofsuffixes/numofparts; endindexes = gt_malloc(sizeof (*endindexes) * numofparts); offset = gt_firstcodes_get_leftborder(fct,partminindex); remainder = (unsigned int) (numofsuffixes % (unsigned long) numofparts); for (part=0; part < numofparts; part++) { if (remainder > 0) { offset += widthofpart + 1; remainder--; } else { offset += widthofpart; } if (part == numofparts - 1) { endindexes[part] = partmaxindex; } else { unsigned long start = (part == 0) ? partminindex : endindexes[part-1] + 1; endindexes[part] = gt_firstcodes_findfirstlarger(fct,start,partmaxindex, offset); gt_assert(endindexes[part] <= partmaxindex); } } return endindexes; } typedef struct { GtShortreadsortworkinfo *srsw; const GtEncseq *encseq; GtReadmode readmode; const GtSpmsuftab *spmsuftab; const GtSeqnumrelpos *snrp; const GtFirstcodestab *fct; unsigned long depth, minindex, maxindex, sumofwidth, spaceforbucketprocessing; bool withsuftabcheck; GtFirstcodesintervalprocess itvprocess; GtFirstcodesintervalprocess_end itvprocess_end; void *itvprocessdata; GtError *err; GtThread *thread; } GtSortRemainingThreadinfo; static void *gt_firstcodes_thread_caller_sortremaining(void *data) { GtSortRemainingThreadinfo *threadinfo = (GtSortRemainingThreadinfo *) data; if (gt_firstcodes_sortremaining(threadinfo->srsw, threadinfo->encseq, threadinfo->readmode, threadinfo->spmsuftab, threadinfo->snrp, threadinfo->fct, threadinfo->minindex, threadinfo->maxindex, threadinfo->sumofwidth, threadinfo->spaceforbucketprocessing, threadinfo->depth, threadinfo->itvprocess, threadinfo->itvprocess_end, threadinfo->itvprocessdata, threadinfo->withsuftabcheck, threadinfo->err) != 0) { gt_assert(false); } return NULL; } static int gt_firstcodes_thread_sortremaining( GtShortreadsortworkinfo **srswtab, const GtEncseq *encseq, GtReadmode readmode, const GtSpmsuftab *spmsuftab, const GtSeqnumrelpos *snrp, const GtFirstcodestab *fct, unsigned long partminindex, unsigned long partmaxindex, unsigned long widthofpart, unsigned long sumofwidth, unsigned long spaceforbucketprocessing, unsigned long depth, GtFirstcodesintervalprocess itvprocess, GtFirstcodesintervalprocess_end itvprocess_end, void *itvprocessdatatab, bool withsuftabcheck, unsigned int threads, GtLogger *logger, GtError *err) { unsigned int t; unsigned long sum = 0, *endindexes; GtSortRemainingThreadinfo *threadinfo; bool haserr = false; gt_assert(threads >= 2U); endindexes = gt_evenly_divide_part(fct,partminindex,partmaxindex,widthofpart, threads); threadinfo = gt_malloc(sizeof (*threadinfo) * threads); for (t=0; tbinsearchcache,fci->fcsl); if (fci->radixsort_codepos != NULL) { gt_radixsort_delete(fci->radixsort_codepos); GT_FCI_SUBTRACTWORKSPACE(fci->fcsl,"radixsort_codepos"); fci->radixsort_codepos = NULL; } if (fci->mappedmarkprefix != NULL) { gt_Sfxmappedrange_delete(fci->mappedmarkprefix); gt_marksubstring_delete(fci->buf.markprefix,true); } else { gt_marksubstring_delete(fci->buf.markprefix,true); if (fci->buf.markprefix != NULL) { GT_FCI_SUBTRACTSPLITSPACE(fci->fcsl,"markprefix"); } } fci->buf.markprefix = NULL; gt_marksubstring_delete(fci->buf.marksuffix,true); if (fci->buf.marksuffix != NULL) { GT_FCI_SUBTRACTWORKSPACE(fci->fcsl,"marksuffix"); } fci->buf.marksuffix = NULL; if (fci->mappedallfirstcodes == NULL && fci->allfirstcodes != NULL) { gt_free(fci->allfirstcodes); fci->allfirstcodes = NULL; GT_FCI_SUBTRACTSPLITSPACE(fci->fcsl,"allfirstcodes"); } } static unsigned long gt_firstcodes_idx2code(const GtFirstcodesinfo *fci, unsigned long idx) { gt_assert(idx <= fci->differentcodes); if (idx == fci->differentcodes) { return fci->allfirstcodes[idx-1]; } return fci->allfirstcodes[idx]; } void gt_rungetencseqkmers(const GtEncseq *encseq,unsigned int kmersize) { const GtReadmode readmode = GT_READMODE_FORWARD; getencseqkmers_twobitencoding(encseq, readmode, kmersize, kmersize, false, NULL, NULL, NULL, NULL); } static int gt_firstcodes_init(GtFirstcodesinfo *fci, const GtEncseq *encseq, unsigned int kmersize, bool withsuftabcheck, unsigned int minmatchlength, GtError *err) { unsigned long totallength, maxseqlength, maxrelpos; unsigned int logtotallength, bitsforrelpos, bitsforseqnum; bool haserr = false; maxseqlength = gt_encseq_max_seq_length(encseq); totallength = gt_encseq_total_length(encseq); logtotallength = (unsigned int) gt_firstcodes_round(log((double) totallength)); if (logtotallength >= 8U) { fci->markprefixunits = MAX(8U,logtotallength - 8U); } else { fci->markprefixunits = MIN(kmersize/2U,8U); } if (fci->markprefixunits >= 2U) { fci->marksuffixunits = fci->markprefixunits - 1; } else { fci->marksuffixunits = fci->markprefixunits; } if (fci->marksuffixunits + fci->markprefixunits > kmersize) { if (fci->marksuffixunits % 2U == 0) { fci->marksuffixunits = fci->markprefixunits = kmersize/2U; } else { fci->marksuffixunits = kmersize/2; fci->markprefixunits = kmersize - fci->marksuffixunits; } } gt_log_log("markprefixunits=%u,marksuffixunits=%u",fci->markprefixunits, fci->marksuffixunits); if (maxseqlength > (unsigned long) minmatchlength) { maxrelpos = maxseqlength - (unsigned long) minmatchlength; } else { maxrelpos = 0; } bitsforrelpos = gt_determinebitspervalue(maxrelpos); fci->buf.snrp = gt_seqnumrelpos_new(bitsforrelpos,encseq); fci->buf.accum_all = false; fci->buf.markprefix = NULL; fci->buf.marksuffix = NULL; fci->numofsequences = gt_encseq_num_of_sequences(encseq); gt_assert(fci->numofsequences > 0); bitsforseqnum = gt_determinebitspervalue(fci->numofsequences - 1); if (bitsforseqnum + bitsforrelpos > (unsigned int) GT_INTWORDSIZE) { gt_seqnumrelpos_delete(fci->buf.snrp); fci->buf.snrp = NULL; gt_error_set(err,"cannot process encoded sequences with %lu sequences " "of length up to %lu (%u+%u bits)", fci->numofsequences,maxseqlength,bitsforseqnum, bitsforrelpos); haserr = true; } fci->fcsl = gt_firstcodes_spacelog_new(); fci->spmsuftab = NULL; fci->radixsort_code = NULL; fci->radixsort_codepos = NULL; fci->buf.spaceGtUlongPair = NULL; fci->buf.spaceGtUlong = NULL; fci->mappedallfirstcodes = NULL; fci->mappedmarkprefix = NULL; fci->mappedleftborder = NULL; fci->binsearchcache = NULL; GT_FCI_ADDWORKSPACE(fci->fcsl,"encseq",(size_t) gt_encseq_sizeofrep(encseq)); if (withsuftabcheck) { gt_firstcodes_spacelog_start_diff(fci->fcsl); } if (!haserr) { size_t sizeforcodestable = sizeof (*fci->allfirstcodes) * fci->numofsequences; fci->allfirstcodes = gt_malloc(sizeforcodestable); GT_FCI_ADDSPLITSPACE(fci->fcsl,"allfirstcodes",sizeforcodestable); } else { fci->allfirstcodes = NULL; } gt_firstcodes_countocc_setnull(&fci->tab); fci->countsequences = 0; fci->firstcodehits = 0; fci->firstcodeposhits = 0; fci->bitsforposref = bitsforseqnum + bitsforrelpos; return haserr ? -1 : 0; } static void gt_firstcodes_collectcodes(GtFirstcodesinfo *fci, const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, unsigned int minmatchlength, unsigned int addbscache_depth, bool withdistbits, GtLogger *logger, GtTimer *timer) { unsigned int numofchars; getencseqkmers_twobitencoding(encseq, readmode, kmersize, minmatchlength, true, gt_storefirstcodes, fci, NULL, NULL); fci->numofsequences = fci->countsequences; gt_logger_log(logger,"have stored %lu prefix codes",fci->numofsequences); if (timer != NULL) { gt_timer_show_progress(timer, "to sort initial prefixes",stdout); } gt_radixsort_inplace_ulong(fci->allfirstcodes,fci->numofsequences); if (timer != NULL) { gt_timer_show_progress(timer, "to remove duplicates",stdout); } numofchars = gt_encseq_alphabetnumofchars(encseq); gt_assert(numofchars == 4U); fci->buf.markprefix = gt_marksubstring_new(numofchars,kmersize,false, fci->markprefixunits); fci->shiftright2index = gt_marksubstring_shiftright(fci->buf.markprefix) + GT_LOGWORDSIZE; GT_FCI_ADDSPLITSPACE(fci->fcsl,"markprefix", (size_t) gt_marksubstring_size(fci->buf.markprefix)); fci->buf.marksuffix = gt_marksubstring_new(numofchars,kmersize,true, fci->marksuffixunits); GT_FCI_ADDWORKSPACE(fci->fcsl,"marksuffix", (size_t) gt_marksubstring_size(fci->buf.marksuffix)); gt_assert(fci->allfirstcodes != NULL); fci->allfirstcodes0_save = fci->allfirstcodes[0]; fci->differentcodes = gt_firstcodes_remdups(fci->allfirstcodes, fci->fcsl, &fci->tab, fci->numofsequences, fci->buf.markprefix, fci->buf.marksuffix, &fci->binsearchcache, addbscache_depth, withdistbits, logger); if (fci->differentcodes > 0 && fci->differentcodes < fci->numofsequences) { fci->allfirstcodes = gt_realloc(fci->allfirstcodes, sizeof (*fci->allfirstcodes) * fci->differentcodes); GT_FCI_SUBTRACTADDSPLITSPACE(fci->fcsl,"allfirstcodes", sizeof (*fci->allfirstcodes) * fci->differentcodes); } } static int gt_firstcodes_allocspace(GtFirstcodesinfo *fci, unsigned int numofparts, unsigned long maximumspace, unsigned long phase2extra, GtError *err) { if (maximumspace > 0) { if ((unsigned long) gt_firstcodes_spacelog_total(fci->fcsl) + phase2extra >= maximumspace) { gt_error_set(err,"already used %.2f MB of memory and need %.2f MB later " "=> cannot compute index in at most %.2f MB", GT_MEGABYTES(gt_firstcodes_spacelog_total(fci->fcsl)), GT_MEGABYTES(phase2extra), GT_MEGABYTES(maximumspace)); return -1; } else { size_t remainspace = (size_t) maximumspace - (gt_firstcodes_spacelog_total(fci->fcsl) + phase2extra); fci->buf.allocated = gt_radixsort_max_num_of_entries_ulong(remainspace); if (fci->buf.allocated < fci->differentcodes/16UL) { fci->buf.allocated = fci->differentcodes/16UL; } } } else { if (numofparts == 0) { fci->buf.allocated = gt_radixsort_max_num_of_entries_ulong( gt_firstcodes_spacelog_total(fci->fcsl)/5UL); } else { fci->buf.allocated = fci->differentcodes/5; } } if (fci->buf.allocated < 16UL) { fci->buf.allocated = 16UL; } return 0; } static void gt_firstcodes_accumulatecounts_run(GtFirstcodesinfo *fci, const GtEncseq *encseq, unsigned int kmersize, unsigned int minmatchlength, GtLogger *logger, GtTimer *timer) { if (timer != NULL) { gt_timer_show_progress(timer, "to accumulate counts",stdout); } gt_assert(fci->buf.allocated > 0); fci->radixsort_code = gt_radixsort_new_ulong(fci->buf.allocated); fci->buf.spaceGtUlong = gt_radixsort_space_ulong(fci->radixsort_code); GT_FCI_ADDWORKSPACE(fci->fcsl,"radixsort_code", gt_radixsort_size(fci->radixsort_code)); fci->buf.fciptr = fci; /* as we need to give fci to the flush function */ fci->buf.flush_function = gt_firstcodes_accumulatecounts_flush; gt_logger_log(logger,"maximum space for accumulating counts %.2f MB", GT_MEGABYTES(gt_firstcodes_spacelog_total(fci->fcsl))); gt_firstcodes_accum_runkmerscan(encseq, kmersize, minmatchlength,&fci->buf); gt_firstcodes_accumulatecounts_flush(fci); gt_logger_log(logger,"codebuffer_total=%lu (%.3f%% of all suffixes)", fci->codebuffer_total, 100.0 * (double) fci->codebuffer_total/ gt_encseq_total_length(encseq)); if (fci->firstcodehits > 0) { gt_assert(fci->flushcount > 0); gt_logger_log(logger,"firstcodehits=%lu (%.3f%% of all suffixes), " "%u rounds (avg length %lu)", fci->firstcodehits, 100.0 * (double) fci->firstcodehits/ gt_encseq_total_length(encseq), fci->flushcount, fci->codebuffer_total/fci->flushcount); } gt_radixsort_delete(fci->radixsort_code); fci->radixsort_code = NULL; GT_FCI_SUBTRACTWORKSPACE(fci->fcsl,"radixsort_code"); } static void gt_firstcodes_map_sections(GtFirstcodesinfo *fci, GtSfxmappedrangelist *sfxmrlist) { fci->mappedmarkprefix = gt_Sfxmappedrange_new("markprefix", gt_marksubstring_entries(fci->buf.markprefix), GtSfxGtBitsequence, gt_minmax_index_kmercode2prefix, fci); gt_Sfxmappedrangelist_add(sfxmrlist,fci->mappedmarkprefix); if (fci->differentcodes > 0) { fci->mappedallfirstcodes = gt_Sfxmappedrange_new("allfirstcodes", fci->differentcodes, GtSfxunsignedlong, NULL, NULL); gt_Sfxmappedrangelist_add(sfxmrlist,fci->mappedallfirstcodes); fci->mappedleftborder = gt_Sfxmappedrange_new("leftborder", fci->differentcodes+1, GtSfxuint32_t, NULL, NULL); gt_Sfxmappedrangelist_add(sfxmrlist,fci->mappedleftborder); } } static int gt_firstcodes_auto_parts(GtFirstcodesinfo *fci, GtSfxmappedrangelist *sfxmrlist, unsigned int numofparts, unsigned long *maximumspace, unsigned long maxbucketsize, unsigned int kmersize, unsigned long totallength, unsigned long maxseqlength, unsigned long suftabentries, unsigned long phase2extra, GtError *err) { int retval; unsigned long leftbordersize_all; if (numofparts == 0 && *maximumspace == 0) { *maximumspace = (unsigned long) (gt_firstcodes_spacelog_peak(fci->fcsl) + phase2extra + gt_shortreadsort_size(true,maxbucketsize, maxseqlength - kmersize) + 4 * 4096); } else { gt_assert(*maximumspace > 0); } if (fci->mappedleftborder != NULL) { leftbordersize_all = gt_Sfxmappedrange_size_mapped( fci->mappedleftborder,0, gt_firstcodes_leftborder_entries(&fci->tab)-1); } else { leftbordersize_all = 0; } retval = gt_suftabparts_fit_memlimit(gt_firstcodes_spacelog_total(fci->fcsl) /*as this is subtracted*/ + leftbordersize_all + phase2extra, *maximumspace, NULL, &fci->tab, sfxmrlist, totallength, fci->bitsforposref, 0, /* special characters not used */ suftabentries, false, /* suftabuint not used */ err); if (retval < 0) { return -1; } else { gt_assert(retval > 0); return retval; } } static void gt_firstcodes_handle_tmp(GtFirstcodesinfo *fci, GtSuftabparts *suftabparts) { gt_assert(fci->mappedleftborder != NULL); gt_Sfxmappedrange_usetmp(fci->mappedleftborder, gt_firstcodes_outfilenameleftborder(&fci->tab), (void **) gt_firstcodes_leftborder_address(&fci->tab), gt_firstcodes_leftborder_entries(&fci->tab), true); if (gt_suftabparts_numofparts(suftabparts) > 1U) { gt_assert(fci->allfirstcodes != NULL); gt_assert(fci->mappedallfirstcodes != NULL); gt_Sfxmappedrange_storetmp_ulong(fci->mappedallfirstcodes, &fci->allfirstcodes, false); GT_FCI_SUBTRACTSPLITSPACE(fci->fcsl,"allfirstcodes"); gt_assert(fci->allfirstcodes == NULL); gt_marksubstring_bits_null(fci->buf.markprefix,false); gt_assert(fci->mappedmarkprefix != NULL); gt_Sfxmappedrange_storetmp_bitsequence(fci->mappedmarkprefix, gt_marksubstring_bits_address( fci->buf.markprefix), false); GT_FCI_SUBTRACTSPLITSPACE(fci->fcsl,"markprefix"); gt_marksubstring_bits_null(fci->buf.markprefix,true); } else { gt_Sfxmappedrange_delete(fci->mappedallfirstcodes); fci->mappedallfirstcodes = NULL; gt_Sfxmappedrange_delete(fci->mappedmarkprefix); fci->mappedmarkprefix = NULL; } } static void gt_firstcodes_allocsize_for_insertion(GtFirstcodesinfo *fci, unsigned long maximumspace, const GtSuftabparts *suftabparts, unsigned long phase2extra) { if (maximumspace > 0) { const unsigned long maxrounds = 400UL; size_t used = gt_firstcodes_spacelog_workspace(fci->fcsl) + phase2extra + gt_suftabparts_largestsizemappedpartwise(suftabparts); if ((unsigned long) used < maximumspace) { fci->buf.allocated = gt_radixsort_max_num_of_entries_ulongpair( (size_t) maximumspace - used); } else { fci->buf.allocated /= 4UL; } if ((unsigned long) (fci->codebuffer_total+fci->numofsequences)/ fci->buf.allocated > maxrounds) { fci->buf.allocated = (fci->codebuffer_total+fci->numofsequences)/maxrounds; } } else { fci->buf.allocated /= 2UL; } } static int gt_firstcodes_process_part(GtFirstcodesinfo *fci, const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, unsigned int minmatchlength, const GtSuftabparts *suftabparts, unsigned int part, unsigned long maximumspace, #ifndef GT_THREADS_ENABLED GT_UNUSED #endif unsigned int threads, unsigned long suftabentries, bool withsuftabcheck, GtShortreadsortworkinfo **srswtab, GtFirstcodesintervalprocess itvprocess, GtFirstcodesintervalprocess_end itvprocess_end, void *itvprocessdatatab, GtLogger *logger, GtTimer *timer, GtError *err) { unsigned long spaceforbucketprocessing = 0; void *mapptr; bool haserr = false; if (timer != NULL) { gt_timer_show_progress(timer, "to insert suffixes into buckets",stdout); } fci->widthofpart = gt_suftabparts_widthofpart(part,suftabparts); gt_logger_log(logger,"compute part %u (%.2f%% of all candidates)",part, (double) 100.0 * fci->widthofpart/suftabentries); fci->currentminindex = gt_suftabparts_minindex(part,suftabparts); fci->currentmaxindex = gt_suftabparts_maxindex(part,suftabparts); if (fci->mappedallfirstcodes != NULL) { fci->allfirstcodes = (unsigned long *) gt_Sfxmappedrange_map(fci->mappedallfirstcodes, fci->currentminindex, fci->currentmaxindex); GT_FCI_ADDSPLITSPACE(fci->fcsl,"allfirstcodes", (size_t) gt_Sfxmappedrange_size_mapped( fci->mappedallfirstcodes, fci->currentminindex, fci->currentmaxindex)); } gt_assert(fci->mappedleftborder != NULL); mapptr = gt_Sfxmappedrange_map(fci->mappedleftborder, fci->currentminindex, fci->currentmaxindex); gt_firstcodes_leftborder_remap(&fci->tab,(uint32_t *) mapptr); GT_FCI_ADDSPLITSPACE(fci->fcsl,"leftborder", (size_t) gt_Sfxmappedrange_size_mapped( fci->mappedleftborder, fci->currentminindex, fci->currentmaxindex)); if (fci->mappedmarkprefix != NULL) { mapptr = gt_Sfxmappedrange_map(fci->mappedmarkprefix, fci->currentminindex, fci->currentmaxindex); gt_marksubstring_bits_map(fci->buf.markprefix, (GtBitsequence *) mapptr); GT_FCI_ADDSPLITSPACE(fci->fcsl,"markprefix", (size_t) gt_Sfxmappedrange_size_mapped( fci->mappedmarkprefix, fci->currentminindex, fci->currentmaxindex)); } gt_logger_log(logger,"maximum space for part %u: %.2f MB", part,GT_MEGABYTES(gt_firstcodes_spacelog_total(fci->fcsl))); fci->buf.currentmincode = gt_firstcodes_idx2code(fci,fci->currentminindex); fci->buf.currentmaxcode = gt_firstcodes_idx2code(fci,fci->currentmaxindex); gt_spmsuftab_partoffset(fci->spmsuftab, gt_suftabparts_offset(part,suftabparts)); gt_firstcodes_insert_runkmerscan(encseq, kmersize, minmatchlength, &fci->buf); gt_firstcodes_insertsuffixes_flush(fci); if (fci->mappedmarkprefix != NULL) { gt_Sfxmappedrange_unmap(fci->mappedmarkprefix); GT_FCI_SUBTRACTSPLITSPACE(fci->fcsl,"markprefix"); } if (fci->mappedallfirstcodes != NULL) { gt_Sfxmappedrange_unmap(fci->mappedallfirstcodes); GT_FCI_SUBTRACTSPLITSPACE(fci->fcsl,"allfirstcodes"); } if (part == gt_suftabparts_numofparts(suftabparts) - 1) { gt_firstcode_delete_before_end(fci); } if (timer != NULL) { gt_timer_show_progress(timer, "to sort buckets of suffixes",stdout); } if (maximumspace > 0) { if ((unsigned long) gt_firstcodes_spacelog_total(fci->fcsl) < maximumspace) { spaceforbucketprocessing = maximumspace - (unsigned long) gt_firstcodes_spacelog_total(fci->fcsl); gt_log_log("space left for sortremaining: %.2f", GT_MEGABYTES(spaceforbucketprocessing)); } else { spaceforbucketprocessing = 0; } } #ifdef GT_THREADS_ENABLED if (threads > 1U) { if (gt_firstcodes_thread_sortremaining( srswtab, encseq, readmode, fci->spmsuftab, fci->buf.snrp, &fci->tab, fci->currentminindex, fci->currentmaxindex, gt_suftabparts_widthofpart(part,suftabparts), gt_suftabparts_sumofwidth(part,suftabparts), spaceforbucketprocessing, (unsigned long) kmersize, itvprocess, itvprocess_end, itvprocessdatatab, withsuftabcheck, threads, logger, NULL) != 0) { haserr = true; } } else #endif { if (gt_firstcodes_sortremaining(srswtab[0], encseq, readmode, fci->spmsuftab, fci->buf.snrp, &fci->tab, fci->currentminindex, fci->currentmaxindex, gt_suftabparts_sumofwidth(part,suftabparts), spaceforbucketprocessing, (unsigned long) kmersize, itvprocess, itvprocess_end, itvprocessdatatab == NULL ? NULL : ((void **) itvprocessdatatab)[0], withsuftabcheck, err) != 0) { haserr = true; } } if (fci->mappedleftborder != NULL) { gt_Sfxmappedrange_unmap(fci->mappedleftborder); GT_FCI_SUBTRACTSPLITSPACE(fci->fcsl,"leftborder"); } return haserr ? -1 : 0; } int storefirstcodes_getencseqkmers_twobitencoding(const GtEncseq *encseq, unsigned int kmersize, unsigned int numofparts, unsigned long maximumspace, unsigned int minmatchlength, bool withsuftabcheck, bool onlyaccumulation, bool onlyallfirstcodes, GT_UNUSED unsigned int addbscache_depth, unsigned long phase2extra, GT_UNUSED bool radixsmall, /* set to true */ GT_UNUSED unsigned int radixparts, /* set to 2U */ GtFirstcodesintervalprocess itvprocess, GtFirstcodesintervalprocess_end itvprocess_end, void *itvprocessdatatab, GtLogger *logger, GtError *err) { GtTimer *timer = NULL; GtFirstcodesinfo fci; size_t suftab_size = 0; unsigned int part, threadcount; unsigned long maxbucketsize, suftabentries = 0, largest_width, totallength = gt_encseq_total_length(encseq), maxseqlength = gt_encseq_max_seq_length(encseq); GtSfxmappedrangelist *sfxmrlist = NULL; GtSuftabparts *suftabparts = NULL; GtShortreadsortworkinfo **srswtab = NULL; const GtReadmode readmode = GT_READMODE_FORWARD; bool haserr = false; #ifdef GT_THREADS_ENABLED const unsigned int threads = gt_jobs; #else const unsigned int threads = 1U; #endif if (maxseqlength < (unsigned long) minmatchlength) { return 0; } if (gt_firstcodes_init(&fci, encseq, kmersize, withsuftabcheck, minmatchlength, err) != 0) { haserr = true; } if (!haserr) { sfxmrlist = gt_Sfxmappedrangelist_new(); if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description("to collect initial " "prefixes"); gt_timer_start(timer); } gt_firstcodes_collectcodes(&fci, encseq, readmode, kmersize, minmatchlength, addbscache_depth, onlyallfirstcodes, logger, timer); if (fci.differentcodes > 0 && onlyallfirstcodes) { gt_free(fci.allfirstcodes); fci.allfirstcodes = NULL; gt_marksubstring_delete(fci.buf.markprefix,true); gt_marksubstring_delete(fci.buf.marksuffix,true); gt_firstcodes_countocc_delete(fci.fcsl,&fci.tab); gt_firstcodes_binsearchcache_delete(fci.binsearchcache,fci.fcsl); gt_firstcodes_spacelog_delete(fci.fcsl); gt_seqnumrelpos_delete(fci.buf.snrp); gt_Sfxmappedrangelist_delete(sfxmrlist); fci.binsearchcache = NULL; if (timer != NULL) { gt_timer_delete(timer); } return 0; } fci.flushcount = 0; fci.codebuffer_total = 0; if (gt_firstcodes_allocspace(&fci, numofparts, maximumspace, phase2extra, err) != 0) { haserr = true; } } fci.buf.nextfree = 0; if (!haserr) { gt_firstcodes_accumulatecounts_run(&fci, encseq, kmersize, minmatchlength, logger, timer); suftabentries = fci.firstcodehits + fci.numofsequences; if (timer != NULL) { gt_timer_show_progress(timer,"to compute partial sums",stdout); } maxbucketsize = gt_firstcodes_partialsums(fci.fcsl,&fci.tab, fci.allfirstcodes,suftabentries); gt_firstcodes_restore_from_differences(&fci); gt_logger_log(logger,"maximum space after computing partial sums: %.2f MB", GT_MEGABYTES(gt_firstcodes_spacelog_total(fci.fcsl))); gt_logger_log(logger,"maxbucketsize=%lu",maxbucketsize); gt_firstcodes_map_sections(&fci,sfxmrlist); if (numofparts == 0 || maximumspace > 0) { int retval = gt_firstcodes_auto_parts(&fci, sfxmrlist, numofparts, &maximumspace, maxbucketsize, kmersize, totallength, maxseqlength, suftabentries, phase2extra, err); if (retval < 0) { haserr = true; } else { numofparts = (unsigned int) retval; } } } if (!haserr) { gt_assert(numofparts > 0); suftabparts = gt_suftabparts_new(numofparts, NULL, &fci.tab, sfxmrlist, suftabentries, 0, logger); gt_assert(suftabparts != NULL); gt_suftabparts_showallrecords(suftabparts,true); gt_assert(fci.allfirstcodes[fci.differentcodes - 1] == gt_firstcodes_idx2code(&fci, gt_suftabparts_maxindex_last(suftabparts)) ); gt_Sfxmappedrangelist_delete(sfxmrlist); sfxmrlist = NULL; gt_firstcodes_samples_delete(fci.fcsl,&fci.tab); gt_assert(fci.buf.nextfree == 0); gt_firstcodes_handle_tmp(&fci,suftabparts); largest_width = gt_suftabparts_largest_width(suftabparts); fci.spmsuftab = gt_spmsuftab_new(largest_width, totallength, fci.bitsforposref, logger); suftab_size = gt_spmsuftab_requiredspace(largest_width,totallength, fci.bitsforposref); GT_FCI_ADDWORKSPACE(fci.fcsl,"suftab",suftab_size); fci.buf.flush_function = gt_firstcodes_insertsuffixes_flush; srswtab = gt_malloc(sizeof (*srswtab) * threads); for (threadcount = 0; threadcount < threads; threadcount++) { srswtab[threadcount] = gt_shortreadsort_new(maxbucketsize,maxseqlength - kmersize, readmode,true,false); } GT_FCI_ADDWORKSPACE(fci.fcsl,"shortreadsort", threads * gt_shortreadsort_size(true,maxbucketsize, maxseqlength-kmersize)); gt_firstcodes_allocsize_for_insertion(&fci, maximumspace, suftabparts, phase2extra); if (!onlyaccumulation) { fci.radixsort_codepos = gt_radixsort_new_ulongpair(fci.buf.allocated); GT_FCI_ADDWORKSPACE(fci.fcsl,"radixsort_codepos", gt_radixsort_size(fci.radixsort_codepos)); fci.buf.spaceGtUlongPair = gt_radixsort_space_ulongpair(fci.radixsort_codepos); } fci.codebuffer_total = 0; fci.flushcount = 0; for (part = 0; !haserr && !onlyaccumulation && part < gt_suftabparts_numofparts(suftabparts); part++) { if (gt_firstcodes_process_part(&fci, encseq, readmode, kmersize, minmatchlength, suftabparts, part, maximumspace, threads, suftabentries, withsuftabcheck, srswtab, itvprocess, itvprocess_end, itvprocessdatatab, logger, timer, err) != 0) { haserr = true; } } } if (timer != NULL) { gt_timer_show_progress(timer, "cleaning up",stdout); } if (!haserr) { GT_FCI_SUBTRACTWORKSPACE(fci.fcsl,"shortreadsort"); } if (!haserr && !onlyaccumulation && srswtab != NULL) { unsigned long sumofstoredvalues = 0; for (threadcount=0; threadcount Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FIRSTCODES_H #define FIRSTCODES_H #include #include "core/log_api.h" #include "core/error_api.h" #include "core/encseq_api.h" #include "seqnumrelpos.h" typedef int (*GtFirstcodesintervalprocess)(void *, const unsigned long *, const GtSeqnumrelpos *, const uint16_t *, unsigned long, unsigned long, GtError *); typedef void (*GtFirstcodesintervalprocess_end)(void *); void gt_rungetencseqkmers(const GtEncseq *encseq,unsigned int kmersize); int storefirstcodes_getencseqkmers_twobitencoding( const GtEncseq *encseq, unsigned int kmersize, unsigned int numofparts, unsigned long maximumspace, unsigned int minmatchlength, bool withsuftabcheck, /* set to false, only for tests */ bool onlyaccumulation, /* set to false, only for tests */ bool onlyallfirstcodes, /* set to false, only for tests */ GT_UNUSED unsigned int addbscache_depth, /* set to 5U */ unsigned long phase2extra, /* extra space needed in proc. intervals */ bool radixsmall, /* set to true */ unsigned int radixparts, /* set to 2U */ GtFirstcodesintervalprocess itvprocess, GtFirstcodesintervalprocess_end itvprocess_end, void *itvprocessdatatab, GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/fmi-fwduni.c000066400000000000000000000074001211610345200201410ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/chardef.h" #include "core/divmodmul.h" #include "core/unused_api.h" #include "fmindex.h" #include "fmi-occ.gen" #include "fmi-locate.pr" unsigned long gt_skfmuniqueforward (const void *genericindex, GT_UNUSED unsigned long offset, GT_UNUSED unsigned long left, GT_UNUSED unsigned long right, GT_UNUSED unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend) { GtUchar cc; const GtUchar *qptr; GtUlongBound bwtbound; const Fmindex *fmindex = (Fmindex *) genericindex; gt_assert(qstart < qend); qptr = qstart; cc = *qptr++; if (ISSPECIAL(cc)) { return 0; } bwtbound.lbound = fmindex->tfreq[cc]; bwtbound.ubound = fmindex->tfreq[cc+1]; while (qptr < qend && bwtbound.lbound + 1 < bwtbound.ubound) { cc = *qptr; if (ISSPECIAL (cc)) { return 0; } bwtbound.lbound = fmindex->tfreq[cc] + fmoccurrence (fmindex, cc, bwtbound.lbound); bwtbound.ubound = fmindex->tfreq[cc] + fmoccurrence (fmindex, cc, bwtbound.ubound); qptr++; } if (bwtbound.lbound + 1 == bwtbound.ubound) { return (unsigned long) (qptr - qstart); } return 0; } unsigned long gt_skfmmstats (const void *genericindex, GT_UNUSED unsigned long offset, GT_UNUSED unsigned long left, GT_UNUSED unsigned long right, unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend) { GtUchar cc; const GtUchar *qptr; unsigned long prevlbound; unsigned long matchlength; GtUlongBound bwtbound; const Fmindex *fmindex = (Fmindex *) genericindex; gt_assert(qstart < qend); qptr = qstart; cc = *qptr; if (ISSPECIAL(cc)) { return 0; } bwtbound.lbound = fmindex->tfreq[cc]; bwtbound.ubound = fmindex->tfreq[cc+1]; if (bwtbound.lbound >= bwtbound.ubound) { return 0; } prevlbound = bwtbound.lbound; for (qptr++; qptr < qend; qptr++) { cc = *qptr; if (ISSPECIAL (cc)) { break; } bwtbound.lbound = fmindex->tfreq[cc] + fmoccurrence (fmindex, cc, bwtbound.lbound); bwtbound.ubound = fmindex->tfreq[cc] + fmoccurrence (fmindex, cc, bwtbound.ubound); if (bwtbound.lbound >= bwtbound.ubound) { break; } prevlbound = bwtbound.lbound; } matchlength = (unsigned long) (qptr - qstart); if (witnessposition != NULL) { unsigned long startpos = gt_fmfindtextpos (fmindex,prevlbound); gt_assert((fmindex->bwtlength-1) >= (startpos + matchlength)); *witnessposition = (fmindex->bwtlength-1) - (startpos + matchlength); } return matchlength; } genometools-1.5.1/src/match/fmi-fwduni.pr000066400000000000000000000015721211610345200203440ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif unsigned long gt_skfmuniqueforward (const void *genericindex, GT_UNUSED unsigned long offset, GT_UNUSED unsigned long left, GT_UNUSED unsigned long right, GT_UNUSED unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend); unsigned long gt_skfmmstats (const void *genericindex, GT_UNUSED unsigned long offset, GT_UNUSED unsigned long left, GT_UNUSED unsigned long right, unsigned long *witnessposition, const GtUchar *qstart, const GtUchar *qend); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/fmi-keyval.c000066400000000000000000000102511211610345200201360ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/divmodmul.h" #include "core/mathsupport.h" #include "core/safecast-gen.h" #include "fmindex.h" unsigned long gt_determinenumberofspecialstostore(const GtSpecialcharinfo *specialcharinfo) { unsigned long addprefixsuffix = 0; if (specialcharinfo->lengthofspecialprefix > 0) { addprefixsuffix++; } if (specialcharinfo->lengthofspecialsuffix > 0) { addprefixsuffix++; } return specialcharinfo->realspecialranges + 1 - addprefixsuffix; } static unsigned long determinefmindexsize (const Fmindex *fm, const GtSpecialcharinfo *specialcharinfo, unsigned int suffixlength, bool storeindexpos) { uint64_t sumsize = 0; sumsize += (uint64_t) sizeof (unsigned long) * (uint64_t) TFREQSIZE(fm->mapsize); sumsize += (uint64_t) sizeof (unsigned long) * (uint64_t) SUPERBFREQSIZE(fm->mapsize,fm->nofsuperblocks); if (storeindexpos) { sumsize += (uint64_t) sizeof (unsigned long) * (uint64_t) MARKPOSTABLELENGTH(fm->bwtlength,fm->markdist); } if (suffixlength > 0) { sumsize += (uint64_t) sizeof (GtUlongBound) * (uint64_t) fm->numofcodes; } if (storeindexpos) { sumsize += (uint64_t) sizeof (GtPairBwtidx) * (uint64_t) gt_determinenumberofspecialstostore(specialcharinfo); } sumsize += (uint64_t) sizeof (GtUchar) * (uint64_t) BFREQSIZE(fm->mapsize,fm->nofblocks); return CALLCASTFUNC(uint64_t,unsigned_long,sumsize); } void gt_computefmkeyvalues (Fmindex *fm, const GtSpecialcharinfo *specialcharinfo, unsigned long bwtlength, unsigned int log2bsize, unsigned int log2markdist, unsigned int numofchars, unsigned int suffixlength, bool storeindexpos) { fm->mappedptr = NULL; fm->log2bsize = log2bsize; fm->log2markdist = log2markdist; fm->bwtlength = bwtlength; fm->log2superbsize = GT_MULT2 (fm->log2bsize); fm->bsize = (unsigned int) GT_POW2 (fm->log2bsize); fm->bsizehalve = GT_DIV2(fm->bsize); fm->superbsize = (unsigned int) GT_POW2 (fm->log2superbsize); fm->nofblocks = (unsigned long) (fm->bwtlength / fm->bsize) + 1; fm->nofsuperblocks = (unsigned long) (fm->bwtlength / fm->superbsize) + 2; fm->markdist = (unsigned long) GT_POW2 (fm->log2markdist); fm->markdistminus1 = (unsigned long) (fm->markdist - 1); fm->negatebsizeones = ~ (unsigned long) (fm->bsize - 1); fm->negatesuperbsizeones = ~ (unsigned long) (fm->superbsize - 1); fm->log2superbsizeminuslog2bsize = fm->log2superbsize - fm->log2bsize; fm->mapsize = numofchars+1; fm->suffixlength = suffixlength; if (fm->suffixlength > 0) { fm->numofcodes = gt_power_for_small_exponents(fm->mapsize-1, fm->suffixlength); } else { fm->numofcodes = 0; } fm->sizeofindex = determinefmindexsize (fm, specialcharinfo, suffixlength, storeindexpos); } genometools-1.5.1/src/match/fmi-keyval.pr000066400000000000000000000012061211610345200203350ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif unsigned long gt_determinenumberofspecialstostore(const GtSpecialcharinfo *specialcharinfo); void gt_computefmkeyvalues (Fmindex *fm, const GtSpecialcharinfo *specialcharinfo, unsigned long bwtlength, unsigned int log2bsize, unsigned int log2markdist, unsigned int numofchars, unsigned int suffixlength, bool storeindexpos); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/fmi-locate.c000066400000000000000000000046041211610345200201170ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/divmodmul.h" #include "fmindex.h" #include "fmi-occ.gen" static unsigned long searchsmallestgeq(const GtPairBwtidx *left, const GtPairBwtidx *right, unsigned long key) { const GtPairBwtidx *leftptr, *midptr, *rightptr, *found = NULL; unsigned long len; gt_assert(left != NULL); gt_assert(right != NULL); leftptr = left; rightptr = right; while (leftptr<=rightptr) { len = (unsigned long) (rightptr-leftptr); midptr = leftptr + GT_DIV2(len); if (key < midptr->bwtpos) { found = midptr; rightptr = midptr - 1; } else { if (key > midptr->bwtpos) { leftptr = midptr + 1; } else { return midptr->suftabvalue; } } } gt_assert(found != NULL); return found->suftabvalue; } unsigned long gt_fmfindtextpos (const Fmindex *fm,unsigned long idx) { unsigned long offset = 0; GtUchar cc; while ((idx & fm->markdistminus1) != 0) { if (idx == fm->longestsuffixpos || ISSPECIAL(cc = ACCESSBWTTEXT(idx))) { unsigned long smallestgeq = searchsmallestgeq(fm->specpos.spaceGtPairBwtidx, fm->specpos.spaceGtPairBwtidx + fm->specpos.nextfreeGtPairBwtidx - 1, idx); return (smallestgeq + offset) % fm->bwtlength; } idx = fm->tfreq[cc] + fmoccurrence (fm, cc, idx); offset++; } return (fm->markpostable[idx / fm->markdist] + offset) % fm->bwtlength; } genometools-1.5.1/src/match/fmi-locate.pr000066400000000000000000000002121211610345200203050ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif unsigned long gt_fmfindtextpos (const Fmindex *fm,unsigned long idx); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/fmi-map.c000066400000000000000000000171051211610345200174250ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include "core/error.h" #include "core/fileutils.h" #include "core/fa.h" #include "core/array.h" #include "core/str.h" #include "core/alphabet.h" #include "core/logger.h" #include "esa-scanprj.h" #include "fmindex.h" #include "fmi-keyval.pr" #include "fmi-mapspec.pr" bool gt_fmindexexists(const char *indexname) { if (!gt_file_exists_with_suffix(indexname,FMASCIIFILESUFFIX)) { return false; } if (!gt_file_exists_with_suffix(indexname,FMDATAFILESUFFIX)) { return false; } return true; } static int scanfmafileviafileptr(Fmindex *fmindex, GtSpecialcharinfo *specialcharinfo, bool *storeindexpos, const char *indexname, FILE *fpin, GtLogger *logger, GtError *err) { bool haserr = false; GtScannedprjkeytable *scannedprjkeytable; unsigned int intstoreindexpos; gt_error_check(err); scannedprjkeytable = gt_scannedprjkeytable_new(); GT_SCANNEDPRJKEY_ADD("bwtlength",&fmindex->bwtlength,NULL); GT_SCANNEDPRJKEY_ADD("longest",&fmindex->longestsuffixpos,NULL); GT_SCANNEDPRJKEY_ADD("storeindexpos",&intstoreindexpos,NULL); GT_SCANNEDPRJKEY_ADD("log2blocksize",&fmindex->log2bsize,NULL); GT_SCANNEDPRJKEY_ADD("log2markdist",&fmindex->log2markdist,NULL); GT_SCANNEDPRJKEY_ADD("specialcharacters", &specialcharinfo->specialcharacters,NULL); GT_SCANNEDPRJKEY_ADD("specialranges",&specialcharinfo->specialranges,NULL); GT_SCANNEDPRJKEY_ADD("realspecialranges",&specialcharinfo->realspecialranges, NULL); GT_SCANNEDPRJKEY_ADD("lengthofspecialprefix", &specialcharinfo->lengthofspecialprefix,NULL); GT_SCANNEDPRJKEY_ADD("lengthofspecialsuffix", &specialcharinfo->lengthofspecialsuffix,NULL); GT_SCANNEDPRJKEY_ADD("wildcards",&specialcharinfo->wildcards,NULL); GT_SCANNEDPRJKEY_ADD("wildcardranges",&specialcharinfo->wildcardranges,NULL); GT_SCANNEDPRJKEY_ADD("realwildcardranges", &specialcharinfo->realwildcardranges,NULL); GT_SCANNEDPRJKEY_ADD("lengthofwildcardprefix", &specialcharinfo->lengthofwildcardprefix,NULL); GT_SCANNEDPRJKEY_ADD("lengthofwildcardsuffix", &specialcharinfo->lengthofwildcardsuffix,NULL); GT_SCANNEDPRJKEY_ADD("suffixlength",&fmindex->suffixlength,NULL); if (!haserr) { GtStr *currentline; unsigned int linenum; currentline = gt_str_new(); for (linenum = 0; gt_str_read_next_line(currentline, fpin) != EOF; linenum++) { if (gt_scannedprjkey_analyze(indexname, FMASCIIFILESUFFIX, linenum, gt_str_get(currentline), gt_str_length(currentline), scannedprjkeytable, err) != 0) { haserr = true; break; } gt_str_reset(currentline); } gt_str_delete(currentline); } if (!haserr && gt_scannedprjkey_allkeysdefined(indexname,FMASCIIFILESUFFIX, scannedprjkeytable, logger,err) != 0) { haserr = true; } if (!haserr) { if (intstoreindexpos == 1U) { *storeindexpos = true; } else { if (intstoreindexpos == 0) { *storeindexpos = false; } else { gt_error_set(err,"illegal value in line matching \"storeindexpos=\""); haserr = true; } } } gt_scannedprjkeytable_delete(scannedprjkeytable); return haserr ? -1 : 0; } void gt_freefmindex(Fmindex *fmindex) { if (fmindex->mappedptr != NULL) { gt_fa_xmunmap(fmindex->mappedptr); } if (fmindex->bwtformatching != NULL) { gt_encseq_delete(fmindex->bwtformatching); fmindex->bwtformatching = NULL; } gt_alphabet_delete((GtAlphabet *) fmindex->alphabet); } static GtEncseq *mapbwtencoding(const char *indexname, GtLogger *logger, GtError *err) { GtEncseqLoader *el; GtEncseq *ret; gt_error_check(err); el = gt_encseq_loader_new(); gt_encseq_loader_do_not_require_des_tab(el); gt_encseq_loader_do_not_require_ssp_tab(el); gt_encseq_loader_do_not_require_sds_tab(el); gt_encseq_loader_set_logger(el, logger); ret = gt_encseq_loader_load(el, indexname, err); gt_encseq_loader_delete(el); return ret; } int gt_mapfmindex (Fmindex *fmindex,const char *indexname, GtLogger *logger,GtError *err) { FILE *fpin = NULL; bool haserr = false, storeindexpos = true; GtSpecialcharinfo specialcharinfo; gt_error_check(err); fmindex->mappedptr = NULL; fmindex->bwtformatching = NULL; fmindex->alphabet = NULL; fpin = gt_fa_fopen_with_suffix(indexname,FMASCIIFILESUFFIX,"rb",err); if (fpin == NULL) { haserr = true; } if (!haserr) { if (scanfmafileviafileptr(fmindex, &specialcharinfo, &storeindexpos, indexname, fpin, logger, err) != 0) { haserr = true; } } gt_fa_xfclose(fpin); if (!haserr) { fmindex->bwtformatching = mapbwtencoding(indexname,logger,err); if (fmindex->bwtformatching == NULL) { haserr = true; } } if (!haserr) { fmindex->specpos.nextfreeGtPairBwtidx = (unsigned long) gt_determinenumberofspecialstostore(&specialcharinfo); fmindex->specpos.spaceGtPairBwtidx = NULL; fmindex->specpos.allocatedGtPairBwtidx = 0; fmindex->alphabet = gt_alphabet_ref( gt_encseq_alphabet(fmindex->bwtformatching)); if (fmindex->alphabet == NULL) { haserr = true; } } if (!haserr) { GtStr *tmpfilename; gt_computefmkeyvalues (fmindex, &specialcharinfo, fmindex->bwtlength, fmindex->log2bsize, fmindex->log2markdist, gt_alphabet_num_of_chars(fmindex->alphabet), fmindex->suffixlength, storeindexpos); tmpfilename = gt_str_new_cstr(indexname); gt_str_append_cstr(tmpfilename,FMDATAFILESUFFIX); if (gt_fillfmmapspecstartptr(fmindex,storeindexpos,tmpfilename,err) != 0) { haserr = true; } gt_str_delete(tmpfilename); } if (haserr) { gt_freefmindex(fmindex); } return haserr ? -1 : 0; } genometools-1.5.1/src/match/fmi-map.pr000066400000000000000000000004061211610345200176200ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif bool gt_fmindexexists(const char *indexname); void gt_freefmindex(Fmindex *fmindex); int gt_mapfmindex (Fmindex *fmindex,const char *indexname, GtLogger *logger,GtError *err); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/fmi-mapspec.c000066400000000000000000000064611211610345200203030ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "core/mapspec.h" #include "fmindex.h" static void assignfmmapspecification(GtMapspec *mapspec, void *data, GT_UNUSED bool writemode) { Fmindexwithoptions *fmwithoptions = (Fmindexwithoptions *) data; Fmindex *fmindex; fmindex = fmwithoptions->fmptr; gt_mapspec_add_ulong(mapspec, fmindex->tfreq, (unsigned long) TFREQSIZE(fmindex->mapsize)); gt_mapspec_add_ulong(mapspec, fmindex->superbfreq, (unsigned long) SUPERBFREQSIZE(fmindex->mapsize, fmindex->nofsuperblocks)); gt_mapspec_add_ulong(mapspec, fmindex->markpostable, fmwithoptions->storeindexpos ? (unsigned long) MARKPOSTABLELENGTH(fmindex->bwtlength, fmindex->markdist) : 0); gt_mapspec_add_ulongbound(mapspec, fmindex->boundarray, (unsigned long) fmindex->numofcodes); gt_mapspec_add_pairbwtindex(mapspec, fmindex->specpos.spaceGtPairBwtidx, fmwithoptions->storeindexpos ? fmindex->specpos.nextfreeGtPairBwtidx : 0); gt_mapspec_add_uchar(mapspec, fmindex->bfreq, (unsigned long) BFREQSIZE(fmindex->mapsize,fmindex->nofblocks)); } int gt_flushfmindex2file(FILE *fp, Fmindex *fmindex, bool storeindexpos, GtError *err) { Fmindexwithoptions fmwithoptions; gt_error_check(err); fmwithoptions.fmptr = fmindex; fmwithoptions.storeindexpos = storeindexpos; return gt_mapspec_write(assignfmmapspecification,fp, (void *) &fmwithoptions,fmindex->sizeofindex,err); } int gt_fillfmmapspecstartptr(Fmindex *fmindex, bool storeindexpos, const GtStr *tmpfilename, GtError *err) { Fmindexwithoptions fmwithoptions; gt_error_check(err); fmwithoptions.fmptr = fmindex; fmwithoptions.storeindexpos = storeindexpos; return gt_mapspec_read(assignfmmapspecification, (void *) &fmwithoptions, tmpfilename, fmindex->sizeofindex, &fmindex->mappedptr, err); } genometools-1.5.1/src/match/fmi-mapspec.pr000066400000000000000000000006531211610345200204770ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif int gt_flushfmindex2file(FILE *fp, Fmindex *fmindex, bool storeindexpos, GtError *err); int gt_fillfmmapspecstartptr(Fmindex *fmindex, bool storeindexpos, const GtStr *tmpfilename, GtError *err); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/fmi-mkindex.c000066400000000000000000000167161211610345200203160ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/basename_api.h" #include "core/divmodmul.h" #include "core/option_api.h" #include "core/versionfunc.h" #include "core/logger.h" #include "core/ma_api.h" #include "fmindex.h" #include "fmi-save.pr" #include "fmi-keyval.pr" #include "fmi-sufbwtstream.pr" typedef struct { bool noindexpos; GtStrArray *indexnametab; GtStr *leveldesc, *outfmindex; } Mkfmcallinfo; typedef struct { const char *name; unsigned int log2bsize, log2markdist; } Indexleveldesc; static Indexleveldesc indexlevel[] = { {"tiny", 7U, 6U}, {"small", 7U, 4U}, {"medium",5U, 3U}, {"big", 4U, 2U} }; static GtOPrval parsemkfmindex(Mkfmcallinfo *mkfmcallinfo, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOption *option, *optionfmout; GtOPrval oprval; int parsed_args; gt_error_check(err); mkfmcallinfo->indexnametab = gt_str_array_new(); mkfmcallinfo->outfmindex = gt_str_new(); mkfmcallinfo->leveldesc = gt_str_new(); op = gt_option_parser_new("[option ...] -ii indexfile [...]", "Compute FM-index."); gt_option_parser_set_mail_address(op, ""); optionfmout = gt_option_new_string("fmout", "specify name of FM-index to be generated\n" "(mandatory if more than one input index " "is specified)", mkfmcallinfo->outfmindex, NULL); gt_option_parser_add_option(op, optionfmout); option = gt_option_new_filename_array("ii", "specify indices to be used", mkfmcallinfo->indexnametab); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); option = gt_option_new_string("size", "specify size (tiny, small, medium, big)", mkfmcallinfo->leveldesc, "medium"); gt_option_parser_add_option(op, option); option = gt_option_new_bool("noindexpos", "store no index positions (hence the positions of\n" "matches in the index cannot be retrieved)", &mkfmcallinfo->noindexpos,false); gt_option_parser_add_option(op, option); oprval = gt_option_parser_parse(op, &parsed_args, argc, argv, gt_versionfunc, err); if (oprval == GT_OPTION_PARSER_OK) { if (!gt_option_is_set(optionfmout)) { if (gt_str_array_size(mkfmcallinfo->indexnametab) > 1UL) { gt_error_set(err,"if more than one index is given, then " "option -fmout is mandatory"); oprval = GT_OPTION_PARSER_ERROR; } else { char *basenameptr; basenameptr = gt_basename(gt_str_array_get(mkfmcallinfo->indexnametab, 0)); gt_str_set(mkfmcallinfo->outfmindex,basenameptr); gt_free(basenameptr); } } } gt_option_parser_delete(op); if (oprval == GT_OPTION_PARSER_OK && parsed_args != argc) { gt_error_set(err,"superfluous program parameters"); oprval = GT_OPTION_PARSER_ERROR; } return oprval; } static void freemkfmcallinfo(Mkfmcallinfo *mkfmcallinfo) { gt_str_array_delete(mkfmcallinfo->indexnametab); gt_str_delete(mkfmcallinfo->outfmindex); gt_str_delete(mkfmcallinfo->leveldesc); } static int levedescl2levelnum(const char *name, unsigned int *log2bsize, unsigned int *log2markdist) { size_t i; gt_assert(name != NULL); for (i=0; ispecpos, GtPairBwtidx); gt_free (fm->bfreq); gt_free (fm->superbfreq); gt_free (fm->tfreq); gt_free (fm->markpostable); if (fm->suffixlength > 0) { gt_free(fm->boundarray); } } static int mkfmindexoptions(Mkfmcallinfo *mkfmcallinfo, int argc,const char **argv,GtError *err) { GtOPrval rval; int retval = 0; gt_error_check(err); rval = parsemkfmindex(mkfmcallinfo,argc,argv,err); if (rval == GT_OPTION_PARSER_ERROR) { retval = -1; } else { if (rval == GT_OPTION_PARSER_REQUESTS_EXIT) { retval = 2; } } return retval; } static int runmkfmindex(Mkfmcallinfo *mkfmcallinfo,GtLogger *logger, GtError *err) { Fmindex fm; unsigned int log2bsize, log2markdist; bool haserr = false; GtSpecialcharinfo specialcharinfo; gt_error_check(err); GT_INITARRAY(&fm.specpos, GtPairBwtidx); fm.bfreq = NULL; fm.superbfreq = NULL; fm.tfreq = NULL; fm.markpostable = NULL; fm.boundarray = NULL; fm.suffixlength = 0; if (levedescl2levelnum(gt_str_get(mkfmcallinfo->leveldesc), &log2bsize, &log2markdist) != 0) { gt_error_set(err,"undefined level \"%s\"", gt_str_get(mkfmcallinfo->leveldesc)); haserr = true; } if (!haserr && gt_sufbwt2fmindex(&fm, &specialcharinfo, log2bsize, log2markdist, gt_str_get(mkfmcallinfo->outfmindex), mkfmcallinfo->indexnametab, mkfmcallinfo->noindexpos ? false : true, logger, err) != 0) { haserr = true; } if (!haserr && gt_saveFmindex(gt_str_get(mkfmcallinfo->outfmindex), &fm, &specialcharinfo, mkfmcallinfo->noindexpos ? false : true, err) < 0) { haserr = true; } freeconstructedfmindex(&fm); return haserr ? -1 : 0; } int gt_parseargsandcallmkfmindex(int argc,const char **argv,GtError *err) { Mkfmcallinfo mkfmcallinfo; int retval; bool haserr = false; retval = mkfmindexoptions(&mkfmcallinfo,argc,argv,err); if (retval == 0) { GtLogger *logger = gt_logger_new(false, GT_LOGGER_DEFLT_PREFIX, stdout); if (runmkfmindex(&mkfmcallinfo,logger,err) < 0) { haserr = true; } gt_logger_delete(logger); logger = NULL; } else { if (retval < 0) { haserr = true; } } freemkfmcallinfo(&mkfmcallinfo); return haserr ? -1 : 0; } genometools-1.5.1/src/match/fmi-mkindex.pr000066400000000000000000000002171211610345200205020ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif int gt_parseargsandcallmkfmindex(int argc,const char **argv,GtError *err); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/fmi-occ.gen000066400000000000000000000135541211610345200177470ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FMI_OCC_GEN #define FMI_OCC_GEN #define ACCESSBWTTEXT(POS)\ gt_encseq_get_encoded_char(fm->bwtformatching,POS,\ GT_READMODE_FORWARD) static unsigned long fmoccurrence (const Fmindex *fm,GtUchar cc, unsigned long pos) { unsigned long bwtidx, bwtlastidx, numofocc, idx, maxbfreqidx, ctimesnumofblocks = (unsigned long) (cc * fm->nofblocks), ctimesnumofsuperblocks = (unsigned long) (cc * fm->nofsuperblocks), posshiftbsizepow = pos >> (unsigned long) fm->log2bsize, posshiftsuperbsizepow = pos >> (unsigned long) fm->log2superbsize; #ifdef SKDEBUG printf("bwtlength=%u,",(unsigned int) fm->bwtlength); printf("longestpos=%u,",(unsigned int) fm->longestsuffixpos); printf("bsize=%u,",(unsigned int) fm->bsize); printf("pos=%u,cc=%u\n",pos,cc); #endif if ((pos <= fm->longestsuffixpos && fm->longestsuffixpos - pos < (unsigned long) fm->bsize) || (pos > fm->longestsuffixpos && pos - fm->longestsuffixpos < (unsigned long) fm->bsize)) { /* dollar in block */ maxbfreqidx = ctimesnumofblocks + posshiftbsizepow; numofocc = fm->superbfreq[ctimesnumofsuperblocks + posshiftsuperbsizepow]; #ifdef SKDEBUG printf("case 0: numofocc = %u\n",numofocc); #endif for (idx = ctimesnumofblocks + ((pos & fm->negatesuperbsizeones) >> fm->log2bsize); idx < maxbfreqidx; idx++) { numofocc += fm->bfreq[idx]; #ifdef SKDEBUG printf("case 1: numofocc = %u\n",numofocc); #endif } for (bwtidx = (pos & fm->negatebsizeones); bwtidx < pos; bwtidx++) { #ifdef SKDEBUG printf("access(%u)=%u,cc=%u\n",bwtidx,ACCESSBWTTEXT(bwtidx),cc); #endif if (bwtidx != fm->longestsuffixpos && ACCESSBWTTEXT(bwtidx) == cc) { numofocc++; #ifdef SKDEBUG printf("case 2: numofocc = %u\n",numofocc); #endif } } #ifdef SKDEBUG printf("(0) return %u\n",numofocc); #endif return numofocc; } if ((pos & (fm->superbsize >> 1)) && /* first halve of superbuckets */ fm->bwtlength - pos > (unsigned long) fm->superbsize) { maxbfreqidx = ctimesnumofblocks + ((posshiftsuperbsizepow + 1) << fm->log2superbsizeminuslog2bsize); numofocc = fm->superbfreq[ctimesnumofsuperblocks + posshiftsuperbsizepow + 1]; #ifdef SKDEBUG printf("case 3: numofocc %u\n",numofocc); #endif for (idx = ctimesnumofblocks + posshiftbsizepow; idx < maxbfreqidx; idx++) { numofocc -= fm->bfreq[idx]; #ifdef SKDEBUG printf("case 4: numofocc %u\n",numofocc); #endif } if (pos & fm->bsizehalve) /* second halve of bucket */ { numofocc += fm->bfreq[ctimesnumofblocks + posshiftbsizepow]; #ifdef SKDEBUG printf("case 5: numofocc %u\n",numofocc); #endif bwtlastidx = (posshiftbsizepow + 1) << (unsigned long) fm->log2bsize; for (bwtidx = pos; bwtidx < bwtlastidx; bwtidx++) { if (ACCESSBWTTEXT(bwtidx) == cc) { numofocc--; #ifdef SKDEBUG printf("case 6: numofocc = %u\n",numofocc); #endif } } } else /* first halve of bucket */ { for (bwtidx = (pos & fm->negatebsizeones); bwtidx < pos; bwtidx++) { if (ACCESSBWTTEXT(bwtidx) == cc) { numofocc++; #ifdef SKDEBUG printf("case 7: numofocc = %u\n",numofocc); #endif } } } } else /* second halve of superbucket */ { maxbfreqidx = ctimesnumofblocks + posshiftbsizepow; numofocc = fm->superbfreq[ctimesnumofsuperblocks + posshiftsuperbsizepow]; #ifdef SKDEBUG printf("case 8: numofocc = %u\n",numofocc); #endif for (idx = ctimesnumofblocks + ((pos & fm->negatesuperbsizeones) >> fm->log2bsize); idx < maxbfreqidx; idx++) { numofocc += fm->bfreq[idx]; #ifdef SKDEBUG printf("case 9: numofocc = %u\n",numofocc); #endif } if ((pos & fm->bsizehalve) /* second halve of bucket */ && (fm->bwtlength - pos > (unsigned long) fm->bsize)) { numofocc += fm->bfreq[ctimesnumofblocks + posshiftbsizepow]; #ifdef SKDEBUG printf("case 10: numofocc = %u\n",numofocc); #endif bwtlastidx = (pos & fm->negatebsizeones) + fm->bsize; for (bwtidx = pos; bwtidx < bwtlastidx; bwtidx++) { if (ACCESSBWTTEXT(bwtidx) == cc) { numofocc--; #ifdef SKDEBUG printf("case 11: numofocc = %u\n",numofocc); #endif } } } else /* first halve of bucket */ { for (bwtidx = (pos & fm->negatebsizeones); bwtidx < pos; bwtidx++) { if (ACCESSBWTTEXT(bwtidx) == cc) { numofocc++; #ifdef SKDEBUG printf("case 12: numofocc = %u\n",numofocc); #endif } } } } #ifdef SKDEBUG printf("(1) return %u\n",numofocc); #endif return numofocc; } #endif genometools-1.5.1/src/match/fmi-save.c000066400000000000000000000065741211610345200176160ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/fa.h" #include "fmindex.h" #include "fmi-mapspec.pr" static int writefmascii(const char *indexname, const Fmindex *fm, const GtSpecialcharinfo *specialcharinfo, bool storeindexpos, GtError *err) { FILE *fmafp; gt_error_check(err); fmafp = gt_fa_fopen_with_suffix(indexname,FMASCIIFILESUFFIX,"wb",err); if (fmafp == NULL) { return -1; } fprintf (fmafp, "bwtlength=%lu\n", fm->bwtlength); fprintf (fmafp, "longest=%lu\n", fm->longestsuffixpos); fprintf (fmafp, "storeindexpos=%d\n", storeindexpos ? 1 : 0); fprintf (fmafp, "log2blocksize=%u\n", fm->log2bsize); fprintf (fmafp, "log2markdist=%u\n", fm->log2markdist); fprintf (fmafp, "specialcharacters=%lu\n",specialcharinfo->specialcharacters); fprintf (fmafp, "specialranges=%lu\n",specialcharinfo->specialranges); fprintf (fmafp, "realspecialranges=%lu\n",specialcharinfo->realspecialranges); fprintf (fmafp, "lengthofspecialprefix=%lu\n", specialcharinfo->lengthofspecialprefix); fprintf (fmafp, "lengthofspecialsuffix=%lu\n", specialcharinfo->lengthofspecialsuffix); fprintf (fmafp, "wildcards=%lu\n",specialcharinfo->wildcards); fprintf (fmafp, "wildcardranges=%lu\n",specialcharinfo->wildcardranges); fprintf (fmafp, "realwildcardranges=%lu\n", specialcharinfo->realwildcardranges); fprintf (fmafp, "lengthofwildcardprefix=%lu\n", specialcharinfo->lengthofwildcardprefix); fprintf (fmafp, "lengthofwildcardsuffix=%lu\n", specialcharinfo->lengthofwildcardsuffix); fprintf (fmafp, "suffixlength=%u\n", fm->suffixlength); gt_fa_xfclose(fmafp); return 0; } static int writefmdata(const char *indexname, Fmindex *fm, bool storeindexpos, GtError *err) { FILE *fp; gt_error_check(err); fp = gt_fa_fopen_with_suffix(indexname,FMDATAFILESUFFIX,"wb",err); if (fp == NULL) { return -1; } if (gt_flushfmindex2file(fp,fm,storeindexpos,err) != 0) { return -2; } gt_fa_xfclose(fp); return 0; } int gt_saveFmindex(const char *indexname,Fmindex *fm, const GtSpecialcharinfo *specialcharinfo, bool storeindexpos,GtError *err) { gt_error_check(err); if (writefmascii(indexname, fm, specialcharinfo,storeindexpos,err) != 0) { return -1; } if (writefmdata (indexname, fm, storeindexpos,err) != 0) { return -2; } return 0; } genometools-1.5.1/src/match/fmi-save.pr000066400000000000000000000003541211610345200200030ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif int gt_saveFmindex(const char *indexname,Fmindex *fm, const GtSpecialcharinfo *specialcharinfo, bool storeindexpos,GtError *err); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/fmi-sufbwtstream.c000066400000000000000000000365721211610345200214070ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/fa.h" #include "core/alphabet.h" #include "core/chardef.h" #include "core/divmodmul.h" #include "core/encseq_metadata.h" #include "core/error.h" #include "core/str.h" #include "core/xansi_api.h" #include "core/ma_api.h" #include "emimergeesa.h" #include "esa-fileend.h" #include "fmindex.h" #include "esa-map.h" #include "encseq2offset.pr" #include "fmi-keyval.pr" #include "fmi-mapspec.pr" static int copytheindexfile(const char *destindex, const char *sourceindex, const char *suffix, uint64_t maxlength, GtError *err) { FILE *fpdest = NULL, *fpsource = NULL; int cc; bool haserr = false; gt_error_check(err); fpdest = gt_fa_fopen_with_suffix(destindex,suffix,"wb",err); if (fpdest == NULL) { haserr = true; } if (!haserr) { fpsource = gt_fa_fopen_with_suffix(sourceindex,suffix,"rb",err); if (fpsource == NULL) { haserr = true; } } printf("# cp %s%s %s%s\n",sourceindex,suffix,destindex,suffix); if (!haserr) { if (maxlength == 0) { while ((cc = fgetc(fpsource)) != EOF) { (void) putc(cc,fpdest); } } else { uint64_t pos; for (pos = 0; pos < maxlength; pos++) { if ((cc = fgetc(fpsource)) == EOF) { break; } (void) putc(cc,fpdest); } } } gt_fa_xfclose(fpdest); gt_fa_xfclose(fpsource); return haserr ? -1 : 0; } static void allocatefmtables(Fmindex *fm, const GtSpecialcharinfo *specialcharinfo, bool storeindexpos) { fm->tfreq = gt_malloc(sizeof *fm->tfreq * TFREQSIZE(fm->mapsize)); fm->superbfreq = gt_malloc(sizeof *fm->superbfreq * SUPERBFREQSIZE(fm->mapsize,fm->nofsuperblocks)); if (storeindexpos) { fm->markpostable = gt_malloc(sizeof *fm->markpostable * MARKPOSTABLELENGTH(fm->bwtlength, fm->markdist)); fm->specpos.nextfreeGtPairBwtidx = 0; fm->specpos.allocatedGtPairBwtidx = (unsigned long) gt_determinenumberofspecialstostore(specialcharinfo); printf("# %lu wildcards in the last %lu characters (%.2f)\n", (unsigned long) specialcharinfo->specialcharacters - fm->specpos.allocatedGtPairBwtidx, specialcharinfo->specialcharacters, (double) (specialcharinfo->specialcharacters - fm->specpos.allocatedGtPairBwtidx)/ specialcharinfo->specialcharacters); fm->specpos.spaceGtPairBwtidx = gt_malloc(sizeof *fm->specpos.spaceGtPairBwtidx * fm->specpos.allocatedGtPairBwtidx); } else { GT_INITARRAY(&fm->specpos,GtPairBwtidx); fm->markpostable = NULL; } fm->bfreq = gt_malloc(sizeof *fm->bfreq * BFREQSIZE(fm->mapsize,fm->nofblocks)); } static void set0frequencies(Fmindex *fm) { unsigned long i; for (i = 0; i < (unsigned long) TFREQSIZE(fm->mapsize); i++) { fm->tfreq[i] = 0; } for (i = 0; i < (unsigned long) BFREQSIZE(fm->mapsize,fm->nofblocks); i++) { fm->bfreq[i] = 0; } for (i = 0; i < (unsigned long) SUPERBFREQSIZE(fm->mapsize,fm->nofsuperblocks); i++) { fm->superbfreq[i] = 0; } } static void finalizefmfrequencies(Fmindex *fm) { unsigned int j; unsigned long i, *freqptr; for (j = 2U; j <= fm->mapsize; j++) { fm->tfreq[j] += fm->tfreq[j - 1]; } freqptr = fm->superbfreq; for (j = 0; j < fm->mapsize; j++) { for (i = (unsigned long) 2; i < fm->nofsuperblocks; i++) { freqptr[i] += freqptr[i-1]; } freqptr += fm->nofsuperblocks; } } static void showconstructionmessage(const char *indexname, unsigned long totallength, unsigned long fmsize, unsigned int log2bsize, unsigned int log2markdist, unsigned int numofchars) { printf("# construct fmindex \"%s\" for bsize=%lu, superbsize=%lu,", indexname, (unsigned long) GT_POW2(log2bsize), (unsigned long) GT_POW2(log2markdist)); printf(" len=%lu, alphasize=%u: size ", totallength, numofchars); printf("%lu bytes, space overhead %.2f\n", fmsize, (double) fmsize/(double) (totallength+1)); } static int nextesamergedsufbwttabvalues(Definedunsignedlong *longest, GtUchar *bwtvalue, unsigned long *suftabvalue, Emissionmergedesa *emmesa, const unsigned long *sequenceoffsettable, unsigned long bwtpos, GtError *err) { Indexedsuffix indexedsuffix; gt_error_check(err); if (emmesa->buf.nextaccessidx >= emmesa->buf.nextstoreidx) { if (emmesa->numofentries == 0) { return 0; } if (gt_emissionmergedesa_stepdeleteandinsertothersuffixes(emmesa,err) != 0) { return -1; } if (emmesa->buf.nextstoreidx == 0) { return 0; } emmesa->buf.nextaccessidx = 0; } indexedsuffix = emmesa->buf.suftabstore[emmesa->buf.nextaccessidx]; *suftabvalue = sequenceoffsettable[indexedsuffix.idx] + indexedsuffix.startpos; if (indexedsuffix.startpos == 0) { if (indexedsuffix.idx == 0) { if (longest->defined) { gt_error_set(err,"longest is already defined as %lu", longest->valueunsignedlong); return -2; } longest->defined = true; longest->valueunsignedlong = bwtpos; *bwtvalue = (GtUchar) UNDEFBWTCHAR; } else { *bwtvalue = (GtUchar) SEPARATOR; } } else { *bwtvalue = gt_encseq_get_encoded_char( /* Random access */ emmesa->suffixarraytable[indexedsuffix.idx].encseq, indexedsuffix.startpos-1, emmesa->suffixarraytable[indexedsuffix.idx].readmode); } emmesa->buf.nextaccessidx++; return 1; } int gt_sufbwt2fmindex(Fmindex *fmindex, GtSpecialcharinfo *specialcharinfo, unsigned int log2bsize, unsigned int log2markdist, const char *outfmindex, const GtStrArray *indexnametab, bool storeindexpos, GtLogger *logger, GtError *err) { Suffixarray suffixarray; Emissionmergedesa emmesa; GtUchar cc; unsigned long bwtpos, totallength = 0, suftabvalue = 0, *sequenceoffsettable = NULL, firstignorespecial = 0, nextmark, *markptr, nextprogress, tmpsuftabvalue, stepprogress; unsigned int numofchars = 0, suffixlength = 0, numofindexes; int retval; Definedunsignedlong longest = { false, 0 }; GtPairBwtidx *pairptr; FILE *outbwt = NULL; GtStr *tmpfilename = NULL; bool haserr = false; gt_error_check(err); longest.defined = false; longest.valueunsignedlong = 0; numofindexes = (unsigned int) gt_str_array_size(indexnametab); if (numofindexes == 1U) { const char *indexname = gt_str_array_get(indexnametab,0); if (streamsuffixarray(&suffixarray, SARR_BWTTAB | (storeindexpos ? SARR_SUFTAB : 0), indexname, logger, err) != 0) { haserr = true; } else { totallength = gt_encseq_total_length(suffixarray.encseq); } if (!haserr && gt_specialcharinfo_read(specialcharinfo,indexname,err) != 0) { haserr = true; } if (!haserr) { numofchars = gt_alphabet_num_of_chars( gt_encseq_alphabet(suffixarray.encseq)); firstignorespecial = totallength - specialcharinfo->specialcharacters; if (gt_alphabet_to_file(gt_encseq_alphabet(suffixarray.encseq), outfmindex, err) != 0) { haserr = true; } } if (!haserr) { if (copytheindexfile(outfmindex, indexname, BWTTABSUFFIX, (uint64_t) firstignorespecial, err) != 0) { haserr = true; } } } else { GtEncseqMetadata *emd = NULL; if (gt_emissionmergedesa_init(&emmesa, indexnametab, SARR_ESQTAB | SARR_SUFTAB | SARR_LCPTAB, logger, err) != 0) { haserr = true; } if (!haserr) { const char *indexname = NULL; indexname = gt_str_array_get(indexnametab,0); emd = gt_encseq_metadata_new(indexname, err); if (emd == NULL) { haserr = true; } } if (!haserr) { suffixlength = 0; if (gt_alphabet_to_file(gt_encseq_metadata_alphabet(emd), outfmindex, err) != 0) { haserr = true; } } gt_encseq_metadata_delete(emd); if (!haserr) { sequenceoffsettable = gt_encseqtable2sequenceoffsets(&totallength, specialcharinfo, emmesa.suffixarraytable, numofindexes); if (sequenceoffsettable == NULL) { haserr = true; } } if (!haserr) { longest.defined = false; longest.valueunsignedlong = 0; outbwt = gt_fa_fopen_with_suffix(outfmindex,BWTTABSUFFIX,"wb",err); if (outbwt == NULL) { haserr = true; } } if (!haserr) { numofchars = emmesa.numofchars; firstignorespecial = totallength - specialcharinfo->specialcharacters; } } if (!haserr) { printf("# firstignorespecial=%lu\n", firstignorespecial); gt_computefmkeyvalues (fmindex, specialcharinfo, totallength+1, log2bsize, log2markdist, numofchars, suffixlength, storeindexpos); showconstructionmessage(outfmindex, totallength, fmindex->sizeofindex, log2bsize, log2markdist, numofchars); allocatefmtables(fmindex,specialcharinfo,storeindexpos); set0frequencies(fmindex); if (storeindexpos) { markptr = fmindex->markpostable; } else { markptr = NULL; } nextprogress = stepprogress = totallength/78; for (bwtpos = 0, nextmark = 0; ; bwtpos++) { if (numofindexes == 1U) { if (storeindexpos) { retval = gt_readnextfromstream_GtUlong(&tmpsuftabvalue, &suffixarray.suftabstream_GtUlong); if (retval == 0) { break; } suftabvalue = (unsigned long) tmpsuftabvalue; } retval = gt_readnextfromstream_GtUchar(&cc,&suffixarray.bwttabstream); if (retval == 0) { break; } } else { retval = nextesamergedsufbwttabvalues(&longest, &cc, &suftabvalue, &emmesa, sequenceoffsettable, bwtpos, err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } gt_xfwrite(&cc, sizeof (GtUchar), (size_t) 1, outbwt); } if (bwtpos == nextprogress) { if (bwtpos == stepprogress) { (void) putchar('#'); } (void) putchar('.'); (void) fflush(stdout); nextprogress += stepprogress; } if (storeindexpos && bwtpos == nextmark) { *markptr++ = suftabvalue; nextmark += fmindex->markdist; } if (ISBWTSPECIAL(cc)) { if (storeindexpos && bwtpos < firstignorespecial) { pairptr = fmindex->specpos.spaceGtPairBwtidx + fmindex->specpos.nextfreeGtPairBwtidx++; if (pairptr >= fmindex->specpos.spaceGtPairBwtidx + fmindex->specpos.allocatedGtPairBwtidx) { gt_error_set(err,"program error: not enough space for specpos"); haserr = true; break; } pairptr->bwtpos = bwtpos; pairptr->suftabvalue = suftabvalue; } } else { fmindex->tfreq[cc+1]++; fmindex->bfreq[(cc * fmindex->nofblocks) + (bwtpos >> fmindex->log2bsize)]++; fmindex->superbfreq[(cc * fmindex->nofsuperblocks) + (bwtpos >> fmindex->log2superbsize) + 1]++; } } } if (!haserr) { if (storeindexpos && fmindex->specpos.allocatedGtPairBwtidx != fmindex->specpos.nextfreeGtPairBwtidx) { gt_error_set(err,"program error: too much space for specpos: " "allocated = %lu != %lu = used", fmindex->specpos.allocatedGtPairBwtidx, fmindex->specpos.nextfreeGtPairBwtidx); haserr = true; } } if (!haserr) { (void) putchar('\n'); finalizefmfrequencies(fmindex); if (fmindex->suffixlength > 0) { fmindex->boundarray = gt_malloc(sizeof *fmindex->boundarray * fmindex->numofcodes); } if (numofindexes == 1U) { fmindex->longestsuffixpos = suffixarray.longest.valueunsignedlong; gt_freesuffixarray(&suffixarray); } else { if (!longest.defined) { gt_error_set(err,"longest is not defined after merging"); haserr = true; } if (!haserr) { fmindex->longestsuffixpos = longest.valueunsignedlong; } gt_fa_xfclose(outbwt); gt_emissionmergedesa_wrap(&emmesa); } } gt_free(sequenceoffsettable); gt_free(tmpfilename); return haserr ? -1 : 0; } genometools-1.5.1/src/match/fmi-sufbwtstream.pr000066400000000000000000000007101211610345200215670ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif int gt_sufbwt2fmindex(Fmindex *fmindex, GtSpecialcharinfo *specialcharinfo, unsigned int log2bsize, unsigned int log2markdist, const char *outfmindex, const GtStrArray *indexnametab, bool storeindexpos, GtLogger *logger, GtError *err); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/fmindex.h000066400000000000000000000107171211610345200175400ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef FMINDEX_H #define FMINDEX_H #include #include "core/alphabet.h" #include "core/arraydef.h" #include "core/encseq.h" #include "core/pairbwtidx.h" #include "core/ulongbound.h" /* TO DO: - free index if in the merging process all suffixes are inserted. - implement option -check to determine the exact size of the index for the different methods. - can we guarantee that in the BWT we only access positions smaller than firstignorespecial = fm->bwtlength - (specialcharacters + 1); Then we do not have to store so many special positions. - generate special versions of fmqhits for the following cases: - GT_ACCESS_TYPE_DIRECTACCESS - specialcharacters == 0 This means that the macros with the corresponding character accesses are replaced at compile time. - also for single input index generate bwt file if option -fmout is used. - can we, for a given alphabet, first determine all bounds like in binsplitinterval? - trenne uniquesub in uniquesub und uniquesub-esa auf. - integriere codierte BWTtab in den fmindex - Programmierrichtlinien: safe cast single thread f"ahig dynamische Allokation f"ur Dateinamen flexible kombination von Optionen */ #define FMASCIIFILESUFFIX ".fma" #define FMDATAFILESUFFIX ".fmd" #define MARKPOSTABLELENGTH(BWTLENGTH,MARKDIST)\ (1 + ((BWTLENGTH) - 1) / (MARKDIST)) #define TFREQSIZE(MAPSIZE)\ ((MAPSIZE) + 1) #define BFREQSIZE(MAPSIZE,NOFBLOCKS)\ ((MAPSIZE) * (NOFBLOCKS)) #define SUPERBFREQSIZE(MAPSIZE,NOFSUPERBLOCKS)\ ((MAPSIZE) * (NOFSUPERBLOCKS)) GT_DECLAREARRAYSTRUCT(GtPairBwtidx); typedef int(*FMprocessqhit)(void *,unsigned long,unsigned long); typedef struct { /* Note: do not use specialcharinfo of bwtformatching */ GtEncseq *bwtformatching; GtUchar *bfreq; /* bfreq[c][i] = #c in block i */ unsigned long bwtlength, /* also totallength + 1 */ *tfreq, /* tfreq[c] = #characters < c in text */ *superbfreq, /* superbfreq[c][i] = #c in all superblocks */ /* which are previous to superblock i */ *markpostable, /* sampling of entries from suffix array */ longestsuffixpos, negatebsizeones, negatesuperbsizeones, markdistminus1; /* markdist - 1 */ GtArrayGtPairBwtidx specpos; /* positions of special characters */ const GtAlphabet *alphabet; void *mappedptr; /* NULL or pointer to the mapped space block */ unsigned int mapsize, /* copy of alphabet.mapsize, used for searching */ bsize, /* size of block */ bsizehalve, /* DIV2(fm->bsize) */ superbsize, /* size of superblock */ log2bsize, /* gt_log_{2}(bsize) */ log2superbsize, /* gt_log_{2}(superbsize) */ log2superbsizeminuslog2bsize, /* log{2}(superbsize)-log{2}(bsize) */ log2markdist, /* gt_log_{2}(markdist) */ suffixlength; /* len of suffix for which buckets are computed*/ unsigned long sizeofindex; /* size of the fmindex in bytes */ unsigned long nofblocks, /* number of blocks (bwtlength/bsize + 1) */ nofsuperblocks, /* number of superblocks (bwtlength/superbsize+2)*/ markdist, /* multiple of entry num stored in suffix array */ numofcodes; /* number of entries in boundaries */ GtUlongBound *boundarray; /* corresponding boundaries */ } Fmindex; typedef struct { Fmindex *fmptr; bool storeindexpos; } Fmindexwithoptions; #endif genometools-1.5.1/src/match/genomediff_opt.h000066400000000000000000000033311211610345200210650ustar00rootroot00000000000000/* Copyright (c) 2010 Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GENOMEDIFF_OPT_H #define GENOMEDIFF_OPT_H #include #include "core/encseq_options.h" #include "core/error.h" #include "core/option_api.h" #include "core/str_array.h" #include "match/index_options.h" #include "match/shu_unitfile.h" typedef struct GtGenomediffArguments { bool scan, verbose, with_esa, with_pck, with_units; int user_max_depth; unsigned long max_ln_n_fac; double divergence_abs_err, /* kr2 T */ divergence_m, /* kr2 M */ divergence_rel_err, /* kr2 E */ divergence_threshold; /* kr2 THRESHOLD */ GtEncseqOptions *loadopts; GtIndexOptions *idxopts; GtOption *ref_unitfile; GtStr *indexname, *indextype, *unitfile; GtStrArray *filenames; } GtGenomediffArguments; typedef struct GenomediffInfo { GtShuUnitFileInfo *unit_info; uint64_t **shulensums; } GenomediffInfo; #endif genometools-1.5.1/src/match/giextract.c000066400000000000000000000670631211610345200201010ustar00rootroot00000000000000/* Copyright (c) 2007-2009 Stefan Kurtz Copyright (c) 2007-2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #ifndef S_SPLINT_S #include #endif #include "core/fileutils.h" #include "core/fa.h" #include "core/assert_api.h" #include "core/divmodmul.h" #include "core/error.h" #include "core/fasta.h" #include "core/fileutils.h" #include "core/format64.h" #include "core/ma_api.h" #include "core/progressbar.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "core/xansi_api.h" #include "giextract.h" #include "echoseq.h" #define COMPLETE(VALUE)\ ((VALUE)->frompos == 1UL && (VALUE)->topos == 0) #define EXTRABUF 128 #define CHECKPOSITIVE(VAL,FORMAT,WHICH)\ if ((VAL) <= 0)\ {\ gt_error_set(err,"file \"%s\", line " Formatuint64_t \ ": illegal format: %s element = " FORMAT \ " is not a positive integer",\ gt_str_get(fileofkeystoextract),\ PRINTuint64_tcast(linenum+1),\ WHICH,\ VAL);\ haserr = true;\ } typedef struct { char *fastakey; unsigned long frompos, topos; bool markhit; } Fastakeyquery; static int comparefastakeys(const void *a,const void *b) { int cmp = strcmp(((Fastakeyquery *) a)->fastakey, ((Fastakeyquery *) b)->fastakey); if (cmp < 0) { return -1; } if (cmp > 0) { return 1; } if (((Fastakeyquery *) a)->frompos < ((Fastakeyquery *) b)->frompos) { return -1; } if (((Fastakeyquery *) a)->frompos > ((Fastakeyquery *) b)->frompos) { return 1; } if (((Fastakeyquery *) a)->topos < ((Fastakeyquery *) b)->topos) { return -1; } if (((Fastakeyquery *) a)->topos > ((Fastakeyquery *) b)->topos) { return 1; } return 0; } static unsigned long remdupsfastakeyqueries(Fastakeyquery *fastakeyqueries, unsigned long numofqueries, bool verbose) { if (numofqueries == 0) { return 0; } else { Fastakeyquery *storeptr, *readptr; unsigned long newnumofqueries; for (storeptr = fastakeyqueries, readptr = fastakeyqueries+1; readptr < fastakeyqueries + numofqueries; readptr++) { if (strcmp(storeptr->fastakey,readptr->fastakey) != 0 || storeptr->frompos != readptr->frompos || storeptr->topos != readptr->topos) { storeptr++; if (storeptr != readptr) { size_t len; storeptr->frompos = readptr->frompos; storeptr->topos = readptr->topos; len = strlen(readptr->fastakey); storeptr->fastakey = gt_realloc(storeptr->fastakey, sizeof (char) * (len+1)); strcpy(storeptr->fastakey,readptr->fastakey); } } } newnumofqueries = (unsigned long) (storeptr - fastakeyqueries + 1); if (newnumofqueries < numofqueries) { if (verbose) { printf("# removed %lu duplicate queries\n", numofqueries - newnumofqueries); } for (storeptr = fastakeyqueries + newnumofqueries; storeptr < fastakeyqueries + numofqueries; storeptr++) { gt_free(storeptr->fastakey); storeptr->fastakey = NULL; } } return newnumofqueries; } } static void fastakeyqueries_delete(Fastakeyquery *fastakeyqueries, unsigned long numofqueries) { if (fastakeyqueries != NULL) { unsigned long idx; for (idx=0; idxfastakey = gt_malloc(sizeof (char) * (idx+1)); } else { if (idx != (size_t) keysize) { gt_error_set(err,"key \"%*.*s\" is not of size %lu",(int) idx, (int) idx,lineptr,keysize); haserr = true; } } if (!haserr) { strncpy(fastakeyptr->fastakey,lineptr,idx); fastakeyptr->fastakey[idx] = '\0'; fastakeyptr->frompos = 1UL; fastakeyptr->topos = 0; if (sscanf(lineptr+idx,"%ld %ld\n",&readlongfrompos,&readlongtopos) == 2) { CHECKPOSITIVE(readlongfrompos,"%ld","second"); if (!haserr) { fastakeyptr->frompos = (unsigned long) readlongfrompos; CHECKPOSITIVE(readlongtopos,"%ld","third"); } if (!haserr) { fastakeyptr->topos = (unsigned long) readlongtopos; } } } if (!haserr) { fastakeyptr->markhit = false; if (!COMPLETE(fastakeyptr) && fastakeyptr->frompos > fastakeyptr->topos) { gt_error_set(err, "file \"%s\", line " Formatuint64_t "illegal format: second value " "%lu is larger than third value %lu", gt_str_get(fileofkeystoextract), PRINTuint64_tcast(linenum+1), fastakeyptr->frompos, fastakeyptr->topos); haserr = true; } } return haserr ? -1 : 0; } static Fastakeyquery *readfileofkeystoextract(bool verbose, unsigned long *numofqueries, const GtStr *fileofkeystoextract, GtError *err) { FILE *fp; GtStr *currentline; bool haserr = false; uint64_t linenum; Fastakeyquery *fastakeyqueries; #undef SKDEBUG #ifdef SKDEBUG unsigned long i; #endif gt_error_check(err); *numofqueries = gt_file_number_of_lines(gt_str_get(fileofkeystoextract)); if (*numofqueries == 0) { gt_error_set(err,"empty file \"%s\" not allowed", gt_str_get(fileofkeystoextract)); return NULL; } fp = gt_fa_fopen(gt_str_get(fileofkeystoextract),"r",err); if (fp == NULL) { return NULL; } if (verbose) { printf("# opened keyfile \"%s\"\n",gt_str_get(fileofkeystoextract)); } fastakeyqueries = gt_malloc(sizeof (*fastakeyqueries) * (*numofqueries)); currentline = gt_str_new(); for (linenum = 0; gt_str_read_next_line(currentline, fp) != EOF; linenum++) { if (extractkeyfromcurrentline(fastakeyqueries + linenum, 0, currentline, linenum, fileofkeystoextract, err) != 0) { haserr = true; break; } gt_str_reset(currentline); } gt_str_delete(currentline); gt_fa_fclose(fp); if (haserr) { fastakeyqueries_delete(fastakeyqueries,*numofqueries); return NULL; } qsort(fastakeyqueries,(size_t) *numofqueries,sizeof (*fastakeyqueries), comparefastakeys); if (verbose) { printf("# %lu fastakey-queries successfully parsed and sorted\n", *numofqueries); } *numofqueries = remdupsfastakeyqueries(fastakeyqueries,*numofqueries,verbose); #ifdef SKDEBUG for (i=0; i<*numofqueries; i++) { printf("%lu %s\n",i,fastakeyqueries[i].fastakey); } #endif return fastakeyqueries; } static unsigned long searchdesinfastakeyqueries(const char *extractkey, const Fastakeyquery *fastakeyqueries, unsigned long numofqueries) { const Fastakeyquery *leftptr, *rightptr, *midptr; int cmp; leftptr = fastakeyqueries; rightptr = fastakeyqueries + numofqueries - 1; while (leftptr <= rightptr) { midptr = leftptr + GT_DIV2((unsigned long) (rightptr-leftptr)); cmp = strcmp(extractkey,midptr->fastakey); if (cmp == 0) { if (midptr > fastakeyqueries && strcmp(extractkey,(midptr-1)->fastakey) == 0) { rightptr = midptr - 1; } else { return (unsigned long) (midptr - fastakeyqueries); } } else { if (cmp < 0) { rightptr = midptr-1; } else { leftptr = midptr + 1; } } } return numofqueries; } static void outputnonmarked(const Fastakeyquery *fastakeyqueries, unsigned long numofqueries) { unsigned long idx, countmissing = 0; for (idx=0; idx 0) { gt_assert(i>0); secondpipe = i; break; } gt_assert(i>0); firstpipe = i; } } if (firstpipe == 0 || secondpipe == 0) { gt_error_set(err,"Cannot find key in description \"%s\"",desc); return NULL; } gt_assert(firstpipe < secondpipe); *keylen = secondpipe - firstpipe - 1; return desc + firstpipe + 1; } static int giextract_encodedseq2fasta(FILE *fpout, const GtEncseq *encseq, unsigned long seqnum, const Fastakeyquery *fastakeyquery, unsigned long linewidth, GT_UNUSED GtError *err) { const char *desc; unsigned long desclen; bool haserr = false; desc = gt_encseq_description(encseq, &desclen, seqnum); gt_xfputc('>',fpout); if (fastakeyquery != NULL && !COMPLETE(fastakeyquery)) { printf("%s %lu %lu ",fastakeyquery->fastakey, fastakeyquery->frompos, fastakeyquery->topos); } gt_xfwrite(desc,sizeof *desc,(size_t) desclen,fpout); if (!haserr) { unsigned long frompos, topos, seqstartpos, seqlength ; gt_xfputc('\n',fpout); seqstartpos = gt_encseq_seqstartpos(encseq, seqnum); seqlength = gt_encseq_seqlength(encseq, seqnum); if (fastakeyquery != NULL && !COMPLETE(fastakeyquery)) { frompos = fastakeyquery->frompos-1; topos = fastakeyquery->topos - fastakeyquery->frompos + 1; } else { frompos = 0; topos = seqlength; } gt_encseq2symbolstring(fpout, encseq, GT_READMODE_FORWARD, seqstartpos + frompos, topos, linewidth); } return haserr ? -1 : 0; } #define MAXFIXEDKEYSIZE 11 typedef struct { char key[MAXFIXEDKEYSIZE+1]; unsigned long seqnum; } Fixedsizekey; static int compareFixedkeys(const void *a,const void *b) { const Fixedsizekey *fa = a; const Fixedsizekey *fb = b; return strcmp(((const Fixedsizekey *) fa)->key, ((const Fixedsizekey *) fb)->key); } #define GT_KEYSTABFILESUFFIX ".kys" int gt_extractkeysfromdesfile(const char *indexname, bool sortkeys, GtLogger *logger, GtError *err) { FILE *fpin, *fpout = NULL; GtStr *line = NULL; const char *keyptr; unsigned long keylen, constantkeylen = 0, linenum;/* incorrectorder = 0;*/ bool haserr = false, firstdesc = true; char *previouskey = NULL; Fixedsizekey *keytab = NULL, *keytabptr = NULL; GtEncseq *encseq = NULL; unsigned long numofentries = 0; const unsigned long linewidth = 60UL; fpin = gt_fa_fopen_with_suffix(indexname,GT_DESTABFILESUFFIX,"rb",err); if (fpin == NULL) { return -1; } if (!sortkeys) { fpout = gt_fa_fopen_with_suffix(indexname,GT_KEYSTABFILESUFFIX,"wb",err); if (fpout == NULL) { haserr = true; } } if (!haserr) { line = gt_str_new(); } for (linenum = 0; !haserr && gt_str_read_next_line(line, fpin) != EOF; linenum++) { keyptr = desc2key(&keylen,gt_str_get(line),err); if (keyptr == NULL) { haserr = true; break; } if (keylen == 0) { gt_error_set(err,"key of length 0 in \"%s\" not expected", gt_str_get(line)); haserr = true; break; } if (firstdesc) { if (keylen > (unsigned long) CHAR_MAX) { gt_error_set(err,"key \"%*.*s\" of length %lu not allowed; " "no key must be larger than %d", (int) keylen,(int) keylen,keyptr,keylen,CHAR_MAX); haserr = true; break; } constantkeylen = keylen; previouskey = gt_malloc(sizeof (char) * (constantkeylen+1)); firstdesc = false; if (!sortkeys) { gt_xfputc((char) constantkeylen,fpout); } else { GtEncseqLoader *el; if (constantkeylen > (unsigned long) MAXFIXEDKEYSIZE) { gt_error_set(err,"key \"%*.*s\" of length %lu not allowed; " "no key must be larger than %d", (int) keylen,(int) keylen,keyptr,keylen, MAXFIXEDKEYSIZE); haserr = true; break; } el = gt_encseq_loader_new(); gt_encseq_loader_set_logger(el, logger); encseq = gt_encseq_loader_load(el, indexname, err); gt_encseq_loader_delete(el); if (encseq == NULL) { haserr = true; break; } numofentries = gt_encseq_num_of_sequences(encseq); gt_assert(numofentries > 0); keytab = gt_malloc(sizeof (*keytab) * numofentries); keytabptr = keytab; } } else { if (constantkeylen != keylen) { gt_error_set(err,"key \"%*.*s\" of length %lu: all keys must be of " "the same length which for all previously seen " "headers is %lu", (int) keylen,(int) keylen,keyptr,keylen, constantkeylen); haserr = true; break; } gt_assert(previouskey != NULL); if (!sortkeys && strncmp(previouskey,keyptr,(size_t) constantkeylen) >= 0) { gt_error_set(err,"previous key \"%s\" is not lexicographically smaller " "than current key \"%*.*s\"", previouskey,(int) keylen,(int) keylen,keyptr); haserr = true; break; /* printf("previous key \"%s\" (no %lu) is lexicographically larger " "than current key \"%*.*s\"\n", previouskey,linenum,(int) keylen,(int) keylen,keyptr); incorrectorder++; */ } } if (!sortkeys) { gt_xfwrite(keyptr,sizeof *keyptr,(size_t) keylen,fpout); gt_xfputc('\0',fpout); } else { gt_assert(keytabptr != NULL); strncpy(keytabptr->key,keyptr,(size_t) constantkeylen); keytabptr->key[constantkeylen] = '\0'; keytabptr->seqnum = linenum; keytabptr++; } strncpy(previouskey,keyptr,(size_t) constantkeylen); previouskey[constantkeylen] = '\0'; gt_str_reset(line); } if (!haserr) { gt_logger_log(logger,"number of keys of length %lu = %lu", constantkeylen,linenum); /* gt_logger_log(logger,"number of incorrectly ordered keys = %lu", incorrectorder); */ } gt_str_delete(line); gt_fa_fclose(fpin); gt_fa_fclose(fpout); gt_free(previouskey); if (!haserr && sortkeys) { gt_assert(keytabptr != NULL); gt_assert(numofentries > 0); gt_assert(keytabptr == keytab + numofentries); qsort(keytab,(size_t) numofentries,sizeof (*keytab),compareFixedkeys); gt_assert(keytabptr != NULL); for (keytabptr = keytab; !haserr && keytabptr < keytab + numofentries; keytabptr++) { if (giextract_encodedseq2fasta(stdout, encseq, keytabptr->seqnum, NULL, linewidth, err) != 0) { haserr = true; break; } } } if (encseq != NULL) { gt_encseq_delete(encseq); encseq = NULL; } gt_free(keytab); return haserr ? -1 : 0; } bool gt_deskeysfileexists(const char *indexname) { return gt_file_exists_with_suffix(indexname,GT_KEYSTABFILESUFFIX); } static unsigned long searchfastaqueryindes(const char *extractkey, const char *keytab, unsigned long numofkeys, unsigned long keysize) { unsigned long left = 0, right = numofkeys - 1, mid; int cmp; while (left <= right) { mid = left + GT_DIV2((unsigned long) (right-left)); cmp = strcmp(extractkey,keytab + 1UL + mid * (keysize+1)); if (cmp < 0) { gt_assert(mid > 0); right = mid-1; } else { if (cmp > 0) { left = mid+1; } else { gt_assert(mid < numofkeys); return mid; } } } return numofkeys; } static int itersearchoverallkeys(const GtEncseq *encseq, const char *keytab, unsigned long numofkeys, unsigned long keysize, const GtStr *fileofkeystoextract, unsigned long linewidth, GtError *err) { FILE *fp; GtStr *currentline; uint64_t linenum; unsigned long seqnum, countmissing = 0; bool haserr = false; Fastakeyquery fastakeyquery; if (linewidth == 0) { gt_error_set(err,"use option width to specify line width for formatting"); return -1; } fp = gt_fa_fopen(gt_str_get(fileofkeystoextract),"r",err); if (fp == NULL) { return -1; } currentline = gt_str_new(); fastakeyquery.fastakey = gt_malloc(sizeof (char) * (keysize+1)); for (linenum = 0; gt_str_read_next_line(currentline, fp) != EOF; linenum++) { if (extractkeyfromcurrentline(&fastakeyquery, keysize, currentline, linenum, fileofkeystoextract, err) != 0) { haserr = true; break; } seqnum = searchfastaqueryindes(fastakeyquery.fastakey,keytab,numofkeys, keysize); if (seqnum < numofkeys) { if (giextract_encodedseq2fasta(stdout, encseq, seqnum, &fastakeyquery, linewidth, err) != 0) { haserr = true; break; } } else { countmissing++; } gt_str_reset(currentline); } if (!haserr && countmissing > 0) { printf("# number of unsatified fastakey-queries: %lu\n",countmissing); } gt_str_delete(currentline); gt_fa_fclose(fp); gt_free(fastakeyquery.fastakey); return haserr ? - 1 : 0; } static int readkeysize(const char *indexname,GtError *err) { FILE *fp; bool haserr = false; char cc; gt_error_check(err); fp = gt_fa_fopen_with_suffix(indexname,GT_KEYSTABFILESUFFIX,"rb",err); if (fp == NULL) { haserr = true; } if (!haserr) { GT_UNUSED size_t ret; ret = fread(&cc,sizeof cc, (size_t) 1, fp); if (ferror(fp)) { gt_error_set(err,"error when trying to read first byte of file %s%s: %s", indexname,GT_KEYSTABFILESUFFIX,strerror(errno)); haserr = true; } } gt_assert(cc >= 0); gt_fa_xfclose(fp); return haserr ? -1 : (int) cc; } int gt_extractkeysfromfastaindex(const char *indexname, const GtStr *fileofkeystoextract, unsigned long linewidth,GtError *err) { GtEncseq *encseq = NULL; GtEncseqLoader *el = NULL; bool haserr = false; unsigned long numofdbsequences = 0, keysize = 0; el = gt_encseq_loader_new(); encseq = gt_encseq_loader_load(el, indexname, err); gt_encseq_loader_delete(el); if (encseq == NULL) { haserr = true; } if (!haserr) { int retval; numofdbsequences = gt_encseq_num_of_sequences(encseq); retval = readkeysize(indexname,err); if (retval < 0) { haserr = true; } keysize = (unsigned long) retval; } if (!haserr) { char *keytab; unsigned long keytablength; keytablength = 1UL + numofdbsequences * (keysize+1); keytab = gt_fa_mmap_check_size_with_suffix(indexname, GT_KEYSTABFILESUFFIX, keytablength, sizeof (GtUchar), err); if (keytab == NULL) { haserr = true; } else { if (itersearchoverallkeys(encseq,keytab,numofdbsequences, keysize,fileofkeystoextract, linewidth,err) != 0) { haserr = true; } } gt_fa_xmunmap(keytab); } if (encseq != NULL) { gt_encseq_delete(encseq); encseq = NULL; } return haserr ? -1 : 0; } int gt_extractkeysfromfastafile(bool verbose, GtFile *outfp, unsigned long width, const GtStr *fileofkeystoextract, GtStrArray *referencefiletab, GtError *err) { GtSeqIterator *seqit; const GtUchar *sequence; char *desc, *headerbufferspace = NULL, *keyspace = NULL; const char *keyptr; unsigned long allockeyspace = 0, len, keylen, numofqueries, keyposition, countmarkhit = 0; int had_err = 0; off_t totalsize; Fastakeyquery *fastakeyqueries; size_t headerbuffersize = 0, headerlength; gt_error_check(err); fastakeyqueries = readfileofkeystoextract(verbose,&numofqueries, fileofkeystoextract,err); if (fastakeyqueries == NULL) { return -1; } totalsize = gt_files_estimate_total_size(referencefiletab); if (verbose) { printf("# estimated total size is " Formatuint64_t "\n", PRINTuint64_tcast(totalsize)); } seqit = gt_seq_iterator_sequence_buffer_new(referencefiletab, err); if (!seqit) { had_err = -1; } if (!had_err && verbose) { gt_progressbar_start(gt_seq_iterator_getcurrentcounter(seqit, (unsigned long long) totalsize), (unsigned long long) totalsize); } while (had_err != -1 && countmarkhit < numofqueries) { had_err = gt_seq_iterator_next(seqit, &sequence, &len, &desc, err); if (had_err != 1) { break; } keyptr = desc2key(&keylen,desc,err); if (keyptr == NULL) { had_err = -1; } else { if (allockeyspace < keylen) { keyspace = gt_realloc(keyspace,sizeof (*keyspace) * (keylen+1)); allockeyspace = keylen; } gt_assert(keyspace != NULL); strncpy(keyspace,keyptr,(size_t) keylen); keyspace[keylen] = '\0'; keyposition = searchdesinfastakeyqueries(keyspace,fastakeyqueries, numofqueries); if (keyposition < numofqueries) { while (keyposition < numofqueries && strcmp(fastakeyqueries[keyposition].fastakey,keyspace) == 0) { #ifndef NDEBUG if (fastakeyqueries[keyposition].markhit) { fprintf(stderr,"key %s was already found before\n", fastakeyqueries[keyposition].fastakey); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif headerlength = strlen(desc); if (headerbuffersize < headerlength + EXTRABUF + 1) { headerbuffersize = headerlength + EXTRABUF + 1; headerbufferspace = gt_realloc(headerbufferspace, sizeof (*headerbufferspace) * headerbuffersize); } if (COMPLETE(fastakeyqueries + keyposition)) { /* (void) snprintf(headerbufferspace,headerbuffersize, "%*.*s complete %s", (int) keylen,(int) keylen,keyspace, desc); */ gt_fasta_show_entry(desc, (const char *) sequence, len, width, outfp); } else { (void) snprintf(headerbufferspace,headerbuffersize, "%*.*s %lu %lu %s", (int) keylen,(int) keylen,keyspace, fastakeyqueries[keyposition].frompos, fastakeyqueries[keyposition].topos, desc); gt_fasta_show_entry(headerbufferspace, (const char *) (sequence+fastakeyqueries[keyposition]. frompos - 1), fastakeyqueries[keyposition].topos - fastakeyqueries[keyposition].frompos+1, width, outfp); } fastakeyqueries[keyposition].markhit = true; countmarkhit++; keyposition++; } } #ifdef SKDEBUG printf("%s 1 %lu\n",keyspace, len); #endif } } gt_free(headerbufferspace); gt_free(keyspace); if (verbose) { gt_progressbar_stop(); } if (verbose) { outputnonmarked(fastakeyqueries,numofqueries); } fastakeyqueries_delete(fastakeyqueries,numofqueries); gt_seq_iterator_delete(seqit); return had_err; } genometools-1.5.1/src/match/giextract.h000066400000000000000000000034101211610345200200700ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Stefan Kurtz Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GIEXTRACT_H #define GIEXTRACT_H #include #include "core/str_api.h" #include "core/fileutils_api.h" #include "core/error.h" #include "core/logger.h" int gt_extractkeysfromfastafile(bool verbose, GtFile *outfp, unsigned long width, const GtStr *fileofkeystoextract, GtStrArray *referencefiletab, GtError *err); int gt_extractkeysfromfastaindex(const char *indexname, const GtStr *fileofkeystoextract, unsigned long linewidth,GtError *err); int gt_extractkeysfromdesfile(const char *indexname, bool sortkeys, GtLogger *logger, GtError *err); bool gt_deskeysfileexists(const char *indexname); #endif genometools-1.5.1/src/match/greedyedist.c000066400000000000000000000237261211610345200204150ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/chardef.h" #include "core/ma_api.h" #include "core/minmax.h" #include "core/types_api.h" #include "greedyedist.h" #define GT_FRONT_STORE(GL,F,V) F = V #define GT_FRONT_ROWVALUE(FVAL) *(FVAL) #define GT_FRONT_MINUSINFINITY(GL) ((GL)->integermin) typedef long GtFrontvalue; typedef struct { long offset, /* absolute base address of the front */ width, /* width of the front */ left; /* left boundary (negative), */ /* -left is relative address of entry */ } GtFrontspec; /* A structure to store the global values. */ struct GtFrontResource { unsigned long currentallocated; long ulen, vlen, integermin; GtFrontvalue *frontspace; }; static unsigned long sumofoddnumbers(unsigned long max) { return max * max; } GtFrontResource *gt_frontresource_new(unsigned long maxdist) { GtFrontResource *ftres = gt_malloc(sizeof *ftres); ftres->currentallocated = sumofoddnumbers(maxdist); ftres->frontspace = gt_malloc(sizeof *ftres->frontspace * ftres->currentallocated); return ftres; } void gt_frontresource_delete(GtFrontResource *ftres) { if (ftres != NULL) { gt_free(ftres->frontspace); gt_free(ftres); } } #ifdef SKDEBUG static void showfront(const GtFrontResource *ftres, const GtFrontspec *fspec, long r) { GtFrontvalue *fval; long k; for (fval = ftres->frontspace + fspec->offset, k=fspec->left; k < fspec->left + fspec->width; k++, fval++) { if (r <= 0 || k <= -r || k >= r) { printf("(k=%ld)%ld ",k,GT_FRONT_ROWVALUE(fval)); } else { printf("(k=%ld)undef ",k); } } (void) putchar('\n'); } #endif static void frontspecparms(const GtFrontResource *ftres, GtFrontspec *fspec, long p, long r) { if (r <= 0) { fspec->left = -p; fspec->width = p + p + 1; } else { fspec->left = MAX(-ftres->ulen,-p); fspec->width = MIN(ftres->vlen,p) - fspec->left + 1; } #ifdef SKDEBUG printf("p=%ld,offset=%ld,left=%ld,width=%ld\n",p, fspec->offset, fspec->left, fspec->width); #endif } static long accessfront(const GtFrontResource *ftres, GtFrontvalue *fval, const GtFrontspec *fspec, long k) { if (fspec->left <= k && k < fspec->left + fspec->width) { return GT_FRONT_ROWVALUE(fval+k); } return GT_FRONT_MINUSINFINITY(ftres); } /* The following function evaluates an entry \(front(k,p)\) in a forward direction. */ static void evalentryforward(const GtSeqabstract *useq, const GtSeqabstract *vseq, GtFrontResource *ftres, GtFrontvalue *fval, const GtFrontspec *fspec, long k) { long value, t; GtFrontvalue *fptr; #ifdef SKDEBUG printf("evalentryforward(k=%ld)\n",k); #endif fptr = ftres->frontspace + fspec->offset - fspec->left; t = accessfront(ftres,fptr,fspec,k) + 1; /* same diagonal */ #ifdef SKDEBUG printf("same: access(k=%ld)=%ld\n",k,t-1); #endif value = accessfront(ftres,fptr,fspec,k-1); /* diagonal below */ #ifdef SKDEBUG printf("below: access(k=%ld)=%ld\n",k-1,value); #endif if (t < value) { t = value; } value = accessfront(ftres,fptr,fspec,k+1) + 1; /* diagonal above */ #ifdef SKDEBUG printf("above: access(k=%ld)=%ld\n",k+1,value-1); #endif if (t < value) { t = value; } #ifdef SKDEBUG printf("maximum: t=%ld\n",t); /* the maximum over three values */ #endif if (t < 0 || t+k < 0) /* no negative value */ { GT_FRONT_STORE(ftres,GT_FRONT_ROWVALUE(fval),GT_FRONT_MINUSINFINITY(ftres)); } else { if (ftres->ulen != 0 && ftres->vlen != 0 && t < ftres->ulen && t + k < ftres->vlen) { unsigned long lcp, minlen = (unsigned long) MIN(ftres->ulen - t,ftres->vlen - (t + k)); lcp = gt_seqabstract_lcp(true, useq, vseq, (unsigned long) t, (unsigned long) (t + k), minlen); t += lcp; } if (t > ftres->ulen || t + k > ftres->vlen) { GT_FRONT_STORE(ftres,GT_FRONT_ROWVALUE(fval), GT_FRONT_MINUSINFINITY(ftres)); } else { GT_FRONT_STORE(ftres,GT_FRONT_ROWVALUE(fval),t); } } } /* The following function evaluates a front in forward direction. It returns true if any of the returned values is at least 0. */ static bool evalfrontforward(const GtSeqabstract *useq, const GtSeqabstract *vseq, GtFrontResource *ftres, const GtFrontspec *prevfspec, const GtFrontspec *fspec, long r) { long k; bool defined = false; GtFrontvalue *fval; for (fval = ftres->frontspace + fspec->offset, k = fspec->left; k < fspec->left + fspec->width; k++, fval++) { if (r <= 0 || k <= -r || k >= r) { evalentryforward(useq,vseq,ftres,fval,prevfspec,k); if (GT_FRONT_ROWVALUE(fval) >= 0) { defined = true; } #ifdef SKDEBUG printf("store front[k=%ld]=%ld ",k,GT_FRONT_ROWVALUE(fval)); printf("at index %ld\n",(long) (fval-ftres->frontspace)); #endif } else { #ifdef SKDEBUG printf("store front[k=%ld]=GT_FRONT_MINUSINFINITY ",k); printf("at index %ld\n",(long) (fval-ftres->frontspace)); #endif GT_FRONT_STORE(ftres,GT_FRONT_ROWVALUE(fval), GT_FRONT_MINUSINFINITY(ftres)); } } #ifdef SKDEBUG printf("frontvalues[r=%ld]=",r); showfront(ftres,fspec,r); #endif return defined; } /* The following function evaluates the entry \(front(0,0)\) in a forward direction. */ static void firstfrontforward(const GtSeqabstract *useq, const GtSeqabstract *vseq, GtFrontResource *ftres, GtFrontspec *fspec) { fspec->left = fspec->offset = 0; fspec->width = 1L; if (ftres->ulen == 0 || ftres->vlen == 0) { GT_FRONT_STORE(ftres,GT_FRONT_ROWVALUE(&ftres->frontspace[0]),0); } else { unsigned long lcp = gt_seqabstract_lcp(true, useq, vseq, 0, 0, (unsigned long) MIN(ftres->ulen,ftres->vlen)); GT_FRONT_STORE(ftres,GT_FRONT_ROWVALUE(&ftres->frontspace[0]),(long) lcp); } #ifdef SKDEBUG printf("forward front[0]=%ld\n",GT_FRONT_ROWVALUE(&ftres->frontspace[0])); #endif } unsigned long greedyunitedist(GtFrontResource *ftres, const GtSeqabstract *useq, const GtSeqabstract *vseq) { unsigned long realdistance, kval; long r; GtFrontspec frontspecspace[2], *fspec, *prevfspec; GtFrontvalue *fptr; #ifdef SKDEBUG printf("unitedistcheckSEPgeneric(ulen=%lu,vlen=%lu)\n",ulenvalue,vlenvalue); #endif gt_assert(gt_seqabstract_length_get(useq) < (unsigned long) LONG_MAX); gt_assert(gt_seqabstract_length_get(vseq) < (unsigned long) LONG_MAX); ftres->ulen = (long) gt_seqabstract_length_get(useq); ftres->vlen = (long) gt_seqabstract_length_get(vseq); ftres->integermin = -MAX(ftres->ulen,ftres->vlen); prevfspec = &frontspecspace[0]; firstfrontforward(useq,vseq,ftres,prevfspec); if (ftres->ulen == ftres->vlen && GT_FRONT_ROWVALUE(ftres->frontspace) == ftres->vlen) { realdistance = 0; } else { for (kval=1UL, r=1-MIN(ftres->ulen,ftres->vlen); /* Nothing */ ; kval++, r++) { if (prevfspec == &frontspecspace[0]) { fspec = &frontspecspace[1]; } else { fspec = &frontspecspace[0]; } fspec->offset = prevfspec->offset + prevfspec->width; frontspecparms(ftres,fspec,(long) kval,r); while ((unsigned long) (fspec->offset + fspec->width) >= ftres->currentallocated) { ftres->currentallocated += kval+1; ftres->frontspace = gt_realloc(ftres->frontspace, sizeof *ftres->frontspace * ftres->currentallocated); } (void) evalfrontforward(useq,vseq,ftres,prevfspec,fspec,r); fptr = ftres->frontspace + fspec->offset - fspec->left; if (accessfront(ftres,fptr,fspec,ftres->vlen - ftres->ulen) == ftres->ulen) { realdistance = kval; break; } if (prevfspec == &frontspecspace[0]) { prevfspec = &frontspecspace[1]; } else { prevfspec = &frontspecspace[0]; } } } #ifdef SKDEBUG printf("unitedistfrontSEP returns %ld\n",realdistance); #endif return realdistance; } genometools-1.5.1/src/match/greedyedist.h000066400000000000000000000023721211610345200204140ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GREEDYEDIST_H #define GREEDYEDIST_H #include "match/seqabstract.h" typedef struct GtFrontResource GtFrontResource; GtFrontResource *gt_frontresource_new(unsigned long maxdist); void gt_frontresource_delete(GtFrontResource *ftres); unsigned long greedyunitedist(GtFrontResource *ftres, const GtSeqabstract *useq, const GtSeqabstract *vseq); #endif genometools-1.5.1/src/match/greedyfwdmat.c000066400000000000000000000344111211610345200205600ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include "core/alphabet.h" #include "core/error.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "core/unused_api.h" #include "core/defined-types.h" #include "core/codetype.h" #include "core/encseq.h" #include "core/format64.h" #include "core/ma_api.h" #include "optionargmode.h" #include "greedyfwdmat.h" #include "initbasepower.h" typedef struct { bool showsequence, showquerypos, showsubjectpos; Definedunsignedlong minlength, maxlength; } Rangespecinfo; typedef void (*Preprocessgmatchlength)(uint64_t, const char *, void *); typedef void (*Processgmatchlength)(const GtAlphabet *, const GtUchar *, unsigned long, unsigned long, unsigned long, void *); typedef void (*Postprocessgmatchlength)(const GtAlphabet *, uint64_t, const char *, const GtUchar *, unsigned long, void *); typedef struct { const void *genericindex; unsigned long totallength; const GtAlphabet *alphabet; Greedygmatchforwardfunction gmatchforward; Preprocessgmatchlength preprocessgmatchlength; Processgmatchlength processgmatchlength; Postprocessgmatchlength postprocessgmatchlength; void *processinfo; const GtEncseq *encseq; } Substringinfo; #ifndef NDEBUG static void checkifsequenceisthere(const GtEncseq *encseq, unsigned long witnessposition, unsigned long gmatchlength, const GtUchar *qptr) { unsigned long i; GtUchar cc; for (i=0; ipreprocessgmatchlength != NULL) { substringinfo->preprocessgmatchlength(unitnum, desc, substringinfo->processinfo); } if (((Rangespecinfo *) substringinfo->processinfo)->showsubjectpos || substringinfo->encseq != NULL) { wptr = &witnessposition; } else { wptr = NULL; } for (qptr = query, remaining = querylen; remaining > 0; qptr++, remaining--) { gmatchlength = substringinfo->gmatchforward(substringinfo->genericindex, 0, 0, substringinfo->totallength, wptr, qptr, query+querylen); if (gmatchlength > 0) { #ifndef NDEBUG if (substringinfo->encseq != NULL) { gt_assert(wptr != NULL); checkifsequenceisthere(substringinfo->encseq, witnessposition, gmatchlength, qptr); } #endif substringinfo->processgmatchlength(substringinfo->alphabet, query, gmatchlength, (unsigned long) (qptr-query), wptr == NULL ? (unsigned long) 0 : witnessposition, substringinfo->processinfo); } } if (substringinfo->postprocessgmatchlength != NULL) { substringinfo->postprocessgmatchlength(substringinfo->alphabet, unitnum, desc, query, querylen, substringinfo->processinfo); } } static void showunitnum(uint64_t unitnum, const char *desc, GT_UNUSED void *info) { printf("unit " Formatuint64_t, PRINTuint64_tcast(unitnum)); if (desc != NULL && desc[0] != '\0') { printf(" (%s)",desc); } printf("\n"); } static void showifinlengthrange(const GtAlphabet *alphabet, const GtUchar *start, unsigned long gmatchlength, unsigned long querystart, unsigned long subjectpos, void *info) { Rangespecinfo *rangespecinfo = (Rangespecinfo *) info; if ((!rangespecinfo->minlength.defined || gmatchlength >= rangespecinfo->minlength.valueunsignedlong) && (!rangespecinfo->maxlength.defined || gmatchlength <= rangespecinfo->maxlength.valueunsignedlong)) { if (rangespecinfo->showquerypos) { printf("%lu ",querystart); } printf("%lu",gmatchlength); if (rangespecinfo->showsubjectpos) { printf(" %lu",subjectpos); } if (rangespecinfo->showsequence) { (void) putchar(' '); gt_alphabet_decode_seq_to_fp(alphabet,stdout,start + querystart, gmatchlength); } (void) putchar('\n'); } } int gt_findsubquerygmatchforward(const GtEncseq *encseq, const void *genericindex, unsigned long totallength, Greedygmatchforwardfunction gmatchforward, const GtAlphabet *alphabet, const GtStrArray *queryfilenames, Definedunsignedlong minlength, Definedunsignedlong maxlength, bool showsequence, bool showquerypos, bool showsubjectpos, GtError *err) { Substringinfo substringinfo; Rangespecinfo rangespecinfo; bool haserr = false; GtSeqIterator *seqit; const GtUchar *query; unsigned long querylen; char *desc = NULL; int retval; uint64_t unitnum; gt_error_check(err); substringinfo.genericindex = genericindex; substringinfo.totallength = totallength; rangespecinfo.minlength = minlength; rangespecinfo.maxlength = maxlength; rangespecinfo.showsequence = showsequence; rangespecinfo.showquerypos = showquerypos; rangespecinfo.showsubjectpos = showsubjectpos; substringinfo.preprocessgmatchlength = showunitnum; substringinfo.processgmatchlength = showifinlengthrange; substringinfo.postprocessgmatchlength = NULL; substringinfo.alphabet = alphabet; substringinfo.processinfo = &rangespecinfo; substringinfo.gmatchforward = gmatchforward; substringinfo.encseq = encseq; seqit = gt_seq_iterator_sequence_buffer_new(queryfilenames, err); if (!seqit) haserr = true; if (!haserr) { gt_seq_iterator_set_symbolmap(seqit, gt_alphabet_symbolmap(alphabet)); for (unitnum = 0; /* Nothing */; unitnum++) { retval = gt_seq_iterator_next(seqit, &query, &querylen, &desc, err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } gmatchposinsinglesequence(&substringinfo, unitnum, query, querylen, desc); } gt_seq_iterator_delete(seqit); } return haserr ? -1 : 0; } #ifdef WITHrunsubstringiteration int runsubstringiteration(Greedygmatchforwardfunction gmatchforward, const void *genericindex, unsigned long totalwidth, const unsigned long *leftborder, const unsigned long *countspecialcodes, const Alphabet *alphabet, unsigned int prefixlength, const GtStrArray *queryfilenames, GtError *err) { Substriter *substriter; Substring substring; bool haserr = false; int retval; unsigned int numofchars; unsigned long gmatchlength, gmatchlength2; GtCodetype maxcode; GtBucketspecification bucketspec; substriter->seqit = gt_seq_iterator_new(filenames, getsymbolmapAlphabet(alphabet), true); substriter = gt_substriter_new(queryfilenames,alphabet,prefixlength); numofchars = getnumofcharsAlphabet(alphabet); maxcode = ontheflybasepower(numofchars,prefixlength); while (true) { retval = gt_substriter_next(&substring,substriter,err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } gt_assert(substring.remaining >= (unsigned long) prefixlength); gmatchlength = gmatchforward(genericindex, 0, 0, totalwidth, NULL, substring.currentptr, substring.currentptr + substring.remaining); if (leftborder != NULL) { gt_bcktab_calcboundaries(&bucketspec, leftborder, countspecialcodes, substring.currentcode, maxcode, totalwidth, substring.currentcode % numofchars, numofchars); if (bucketspec.nonspecialsinbucket > 0) { gmatchlength2 = gmatchforward(genericindex, (unsigned long) prefixlength, bucketspec.left, bucketspec.left + bucketspec.nonspecialsinbucket - 1, NULL, substring.currentptr+prefixlength, substring.currentptr+substring.remaining); #ifndef NDEBUG if (gmatchlength2 != gmatchlength) { fprintf(stderr,"at offset %lu:\n",(unsigned long) (substring.currentptr - substring.start)); fprintf(stderr,"bucketspec=(%lu,%lu)\n", bucketspec.left, bucketspec.left+bucketspec.nonspecialsinbucket-1); fprintf(stderr,"gmatchlength2 = %lu != %lu = gmatchlength\n", gmatchlength2,gmatchlength); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif } } } gt_substriter_delete(substriter); return haserr ? -1 : 0; } int runsubstringiteration(Greedygmatchforwardfunction gmatchforward, const void *genericindex, unsigned long totalwidth, const unsigned long *leftborder, const unsigned long *countspecialcodes, const Alphabet *alphabet, unsigned int prefixlength, const GtStrArray *queryfilenames, GtError *err) { GtSeqIterator *seqit; const GtUchar *query; unsigned long querylen; char *desc = NULL; Substriter *substriter; Substring substring; bool haserr = false; int retval; unsigned int numofchars; unsigned long gmatchlength, gmatchlength2; GtCodetype maxcode; GtBucketspecification bucketspec; bool haserr = false; seqit = gt_seq_iterator_new(queryfilenames,getsymbolmapAlphabet(alphabet), * true); for (unitnum = 0; ; unitnum++) { retval = gt_seq_iterator_next(seqit, &query, &querylen, &desc, err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } } gt_seq_iterator_delete(seqit); return haserr ? -1 : 0; } #endif genometools-1.5.1/src/match/greedyfwdmat.h000066400000000000000000000053461211610345200205720ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GREEDYFWDMAT_H #define GREEDYFWDMAT_H #include #include "core/alphabet.h" #include "core/error.h" #include "core/types_api.h" #include "core/str_array.h" #include "core/defined-types.h" #include "core/encseq.h" typedef unsigned long (*Greedygmatchforwardfunction) (const void *, unsigned long offset, unsigned long left, unsigned long right, unsigned long *, const GtUchar *, const GtUchar *); int gt_findsubquerygmatchforward(const GtEncseq *encseq, const void *genericindex, unsigned long totallength, Greedygmatchforwardfunction gmatchforward, const GtAlphabet *alphabet, const GtStrArray *queryfilenames, Definedunsignedlong minlength, Definedunsignedlong maxlength, bool showsequence, bool showquerypos, bool showsubjectpos, GtError *err); int runsubstringiteration(Greedygmatchforwardfunction gmatchforward, const void *genericindex, unsigned long totalwidth, const unsigned long *leftborder, const unsigned long *countspecialcodes, const GtAlphabet *alphabet, unsigned int prefixlength, const GtStrArray *queryfilenames, GtError *err); #endif genometools-1.5.1/src/match/hashfirstcodes.c000066400000000000000000000131261211610345200211070ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/codetype.h" #include "core/encseq.h" #include "core/showtime.h" #include "core/unused_api.h" #include "extended/uint64hashtable.h" #include "hashfirstcodes.h" #include "sfx-suffixer.h" typedef struct { GtUint64hashtable *table; unsigned long differentcodes; unsigned int kmersize; unsigned long *suftab; unsigned long finalpsum; } GtHashfirstcodes; static void gt_hashfirstcodes(void *processinfo, GT_UNUSED bool firstinrange, GT_UNUSED unsigned long pos, GtCodetype code) { GtHashfirstcodes *hashfirstcodes = (GtHashfirstcodes *) processinfo; if (!gt_uint64hashtable_search(hashfirstcodes->table, (uint64_t) code, true)) { hashfirstcodes->differentcodes++; } } static void gt_hashremainingcodes(void *processinfo, bool firstinrange, GT_UNUSED unsigned long pos, GtCodetype code) { GtUint64hashtable *table = (GtUint64hashtable *) processinfo; if (!firstinrange) { (void) gt_uint64hashtable_search(table,(uint64_t) code,false); } } static void gt_insertallcodeswithhashtable(void *processinfo, GT_UNUSED bool firstinrange, unsigned long pos, GtCodetype code) { GtHashfirstcodes *hashfirstcodes = (GtHashfirstcodes *) processinfo; unsigned long idx = gt_uint64hashtable_insertionindex(hashfirstcodes->table, (uint64_t) code); if (idx != ULONG_MAX) { gt_assert(idx < hashfirstcodes->finalpsum); hashfirstcodes->suftab[idx] = pos; } } void hashfirstcodes_getencseqkmers_twobitencoding(const GtEncseq *encseq, unsigned int kmersize) { GtTimer *timer = NULL; GtHashfirstcodes hashfirstcodes; unsigned long numofsequences, psum; GT_UNUSED unsigned long totallength; /*GT_UNUSED unsigned long countsum;*/ const unsigned int spmopt = 45U; if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description("insert first codes into " "hashtable"); gt_timer_start(timer); } numofsequences = gt_encseq_num_of_sequences(encseq); totallength = gt_encseq_total_length(encseq); hashfirstcodes.table = gt_uint64hashtable_new((size_t) numofsequences); hashfirstcodes.differentcodes = 0; getencseqkmers_twobitencoding(encseq, GT_READMODE_FORWARD, kmersize, kmersize, true, gt_hashfirstcodes, &hashfirstcodes, NULL, NULL); printf("# number of different codes=%lu (%.4f) in %lu sequences\n", hashfirstcodes.differentcodes, (double) hashfirstcodes.differentcodes/numofsequences, numofsequences); /*countsum = gt_uint64hashtable_countsum_get(hashfirstcodes.table);*/ gt_assert(gt_uint64hashtable_countsum_get(hashfirstcodes.table) == numofsequences); if (timer != NULL) { gt_timer_show_progress(timer, "accumulate counts",stdout); } getencseqkmers_twobitencoding(encseq, GT_READMODE_FORWARD, kmersize, spmopt, false, gt_hashremainingcodes, hashfirstcodes.table, NULL, NULL); psum = gt_uint64hashtable_partialsums(hashfirstcodes.table,timer); hashfirstcodes.suftab = gt_malloc((size_t) psum * sizeof (*hashfirstcodes.suftab)); hashfirstcodes.finalpsum = psum; if (timer != NULL) { gt_timer_show_progress(timer, "insert suffixes into suffix table", stdout); } getencseqkmers_twobitencoding(encseq, GT_READMODE_FORWARD, kmersize, spmopt, false, gt_insertallcodeswithhashtable, &hashfirstcodes, NULL, NULL); gt_free(hashfirstcodes.suftab); gt_uint64hashtable_delete(hashfirstcodes.table); if (timer != NULL) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } } genometools-1.5.1/src/match/hashfirstcodes.h000066400000000000000000000020761211610345200211160ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef HASHFIRSTCODES_H #define HASHFIRSTCODES_H #include "core/encseq.h" void hashfirstcodes_getencseqkmers_twobitencoding(const GtEncseq *encseq, unsigned int kmersize); #endif genometools-1.5.1/src/match/idx-limdfs.c000066400000000000000000001451561211610345200201470ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/chardef.h" #include "core/divmodmul.h" #include "core/types_api.h" #include "core/unused_api.h" #include "core/defined-types.h" #include "core/ma_api.h" #include "sarr-def.h" #include "esa-splititv.h" #include "eis-voiditf.h" #include "esa-mmsearch.h" #include "absdfstrans-imp.h" #include "idx-limdfs.h" #include "esa-map.h" #include "idxlocalidp.h" #include "esa-minunique.h" #define DECLAREDFSSTATE(V)\ Aliasdfsstate V[5] struct Genericindex { Suffixarray *suffixarray; unsigned long totallength; FMindex *packedindex; bool withesa; const Mbtab **mbtab; /* only relevant for packedindex */ unsigned int maxdepth; /* maximaldepth of boundaries */ }; void genericindex_delete(Genericindex *genericindex) { if (genericindex == NULL) { return; } gt_freesuffixarray(genericindex->suffixarray); gt_free(genericindex->suffixarray); if (genericindex->packedindex != NULL) { gt_deletevoidBWTSeq(genericindex->packedindex); } gt_free(genericindex); } const GtEncseq *genericindex_getencseq(const Genericindex *genericindex) { gt_assert(genericindex->suffixarray->encseq != NULL); return genericindex->suffixarray->encseq; } const Suffixarray *genericindex_getsuffixarray(const Genericindex *genericindex) { gt_assert(genericindex->suffixarray != NULL); return genericindex->suffixarray; } Genericindex *genericindex_new(const char *indexname, bool withesa, bool withencseq, bool withdestab, bool withssptab, int userdefinedmaxdepth, GtLogger *logger, GtError *err) { unsigned int demand = 0; bool haserr = false; Genericindex *genericindex; genericindex = gt_malloc(sizeof (*genericindex)); if (withesa) { demand |= SARR_SUFTAB; } if (withencseq) { demand |= SARR_ESQTAB; } if (withdestab) { demand |= SARR_DESTAB; } if (withssptab) { demand |= SARR_SSPTAB; } genericindex->withesa = withesa; genericindex->suffixarray = gt_malloc(sizeof (*genericindex->suffixarray)); if (gt_mapsuffixarray(genericindex->suffixarray, demand, indexname, logger, err) != 0) { haserr = true; genericindex->totallength = 0; } else { genericindex->totallength = gt_encseq_total_length(genericindex->suffixarray->encseq); } if (!haserr) { if (withesa && genericindex->suffixarray->readmode != GT_READMODE_FORWARD) { gt_error_set(err,"using option -esa you can only process index " "in forward mode"); haserr = true; } else { if (!withesa && genericindex->suffixarray->readmode != GT_READMODE_REVERSE) { gt_error_set(err,"with option -pck you can only process index " "in reverse mode"); haserr = true; } } } genericindex->packedindex = NULL; genericindex->mbtab = NULL; genericindex->maxdepth = 0; if (!haserr && !withesa) { genericindex->packedindex = gt_loadvoidBWTSeqForSA(indexname,true, err); if (genericindex->packedindex == NULL) { gt_assert(gt_error_is_set(err)); haserr = true; } } if (!haserr && !withesa) { genericindex->mbtab = gt_bwtseq2mbtab(genericindex->packedindex); genericindex->maxdepth = gt_bwtseq2maxdepth(genericindex->packedindex); if (userdefinedmaxdepth >= 0 && genericindex->maxdepth > (unsigned int) userdefinedmaxdepth) { genericindex->maxdepth = (unsigned int) userdefinedmaxdepth; } } if (haserr) { genericindex_delete(genericindex); return NULL; } return genericindex; } typedef struct { unsigned long offset, leftbound, rightbound; GtCodetype code; GtUchar inchar; } Indexbounds; typedef struct { Indexbounds lcpitv; DECLAREDFSSTATE(aliasstate); /* the following two components are only required if keepexpandedonstack is true */ bool keeponstack; unsigned long previousstackelem; } Lcpintervalwithinfo; GT_DECLAREARRAYSTRUCT(Lcpintervalwithinfo); struct Limdfsresources { Limdfsconstinfo *dfsconstinfo; GtArrayBoundswithchar bwci; GtArrayLcpintervalwithinfo stack; Lcpintervalwithinfo copyofparent; DECLAREDFSSTATE(copyofcopyofparentstate); unsigned long parentindex; bool keepexpandedonstack; GtUchar alphasize; void *patterninfo; const Genericindex *genericindex; bool nowildcards; unsigned long maxintervalwidth; unsigned long *rangeOccs; const GtEncseq *encseq; GtArrayGtUlong mstatspos; GtUchar *currentpathspace; unsigned long allocatedpathspace; unsigned long numberofmatches; ProcessIdxMatch processmatch; void *processmatchinfo; Processresult processresult; }; Limdfsresources *gt_newLimdfsresources(const Genericindex *genericindex, bool nowildcards, unsigned long maxintervalwidth, unsigned long maxpathlength, bool keepexpandedonstack, ProcessIdxMatch processmatch, void *processmatchinfo, Processresult processresult, void *patterninfo, const AbstractDfstransformer *adfst) { Limdfsresources *limdfsresources; unsigned int numofchars; const GtEncseq *encseq; encseq = genericindex->suffixarray->encseq; numofchars = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); limdfsresources = gt_malloc(sizeof *limdfsresources); limdfsresources->bwci.spaceBoundswithchar = gt_malloc(sizeof *limdfsresources->bwci.spaceBoundswithchar * (numofchars+1)); limdfsresources->bwci.nextfreeBoundswithchar = 0; limdfsresources->bwci.allocatedBoundswithchar = (unsigned long) (numofchars+1); GT_INITARRAY(&limdfsresources->stack,Lcpintervalwithinfo); gt_assert(numofchars <= GT_MAXALPHABETCHARACTER); limdfsresources->alphasize = (GtUchar) numofchars; limdfsresources->processmatch = processmatch; limdfsresources->processmatchinfo = processmatchinfo; limdfsresources->processresult = processresult; limdfsresources->patterninfo = patterninfo; limdfsresources->genericindex = genericindex; limdfsresources->nowildcards = nowildcards; limdfsresources->encseq = encseq; limdfsresources->maxintervalwidth = maxintervalwidth; limdfsresources->keepexpandedonstack = keepexpandedonstack; if (maxpathlength > 0) { limdfsresources->currentpathspace = gt_malloc(sizeof *limdfsresources->currentpathspace * maxpathlength); limdfsresources->allocatedpathspace = maxpathlength; } else { limdfsresources->currentpathspace = NULL; } /* Application specific */ limdfsresources->dfsconstinfo = adfst->allocatedfsconstinfo((unsigned int) limdfsresources->alphasize); if (genericindex->withesa) { limdfsresources->rangeOccs = NULL; } else { limdfsresources->rangeOccs = gt_malloc(sizeof *limdfsresources->rangeOccs * GT_MULT2(limdfsresources->alphasize)); } GT_INITARRAY(&limdfsresources->mstatspos,GtUlong); if (maxintervalwidth > 0) { limdfsresources->mstatspos.spaceGtUlong = gt_malloc(sizeof *limdfsresources->mstatspos.spaceGtUlong * maxintervalwidth); limdfsresources->mstatspos.allocatedGtUlong = maxintervalwidth; } if (adfst->initLimdfsstackelem != NULL && !limdfsresources->keepexpandedonstack) { adfst->initLimdfsstackelem(limdfsresources->copyofcopyofparentstate); adfst->initLimdfsstackelem(limdfsresources->copyofparent.aliasstate); } return limdfsresources; } static void tracethestackelems(GtIdxMatch *match, Limdfsresources *limdfsresources, unsigned long pprefixlen, const Lcpintervalwithinfo *runptr) { unsigned long previous = 0; gt_reinitLocaliTracebackstate(limdfsresources->dfsconstinfo, runptr->lcpitv.offset, pprefixlen); do { if (previous > 0) { gt_assert(previous - 1 == runptr->lcpitv.offset); } previous = runptr->lcpitv.offset; gt_assert(previous > 0); gt_assert(runptr->previousstackelem < limdfsresources->stack.nextfreeLcpintervalwithinfo); gt_processelemLocaliTracebackstate(limdfsresources->dfsconstinfo, runptr->lcpitv.inchar,runptr->aliasstate); runptr = limdfsresources->stack.spaceLcpintervalwithinfo + runptr->previousstackelem; } while (runptr->lcpitv.offset > 0); match->alignment = gt_completealignmentfromLocaliTracebackstate(&match->querylen, limdfsresources->dfsconstinfo); gt_assert(pprefixlen >= match->querylen); match->querystartpos = pprefixlen - match->querylen; } static Lcpintervalwithinfo *allocateStackspace(Limdfsresources *limdfsresources, const AbstractDfstransformer *adfst) { GtArrayLcpintervalwithinfo *stack = &limdfsresources->stack; if (stack->nextfreeLcpintervalwithinfo >= stack->allocatedLcpintervalwithinfo) { unsigned long idx; const unsigned long addelems = 32UL; stack->spaceLcpintervalwithinfo = gt_realloc(stack->spaceLcpintervalwithinfo, sizeof *stack->spaceLcpintervalwithinfo * (stack->allocatedLcpintervalwithinfo + addelems)); if (adfst->initLimdfsstackelem != NULL) { for (idx = stack->allocatedLcpintervalwithinfo; idx < stack->allocatedLcpintervalwithinfo + addelems; idx++) { adfst->initLimdfsstackelem(stack->spaceLcpintervalwithinfo[idx]. aliasstate); } } stack->allocatedLcpintervalwithinfo += addelems; } return stack->spaceLcpintervalwithinfo + stack->nextfreeLcpintervalwithinfo++; } static void initlcpinfostack(Limdfsresources *limdfsresources, const AbstractDfstransformer *adfst) { Lcpintervalwithinfo *stackptr; limdfsresources->stack.nextfreeLcpintervalwithinfo = 0; stackptr = allocateStackspace(limdfsresources,adfst); stackptr->lcpitv.offset = 0; stackptr->lcpitv.leftbound = 0; stackptr->lcpitv.rightbound = limdfsresources->genericindex->withesa ? limdfsresources->genericindex->totallength : limdfsresources->genericindex->totallength+1; stackptr->lcpitv.code = 0; if (limdfsresources->keepexpandedonstack) { stackptr->previousstackelem = 0; /* Just to let it be defined */ stackptr->keeponstack = true; } if (adfst->initrootLimdfsstate != NULL) { adfst->initrootLimdfsstate(stackptr->aliasstate, limdfsresources->dfsconstinfo); } } void gt_freeLimdfsresources(Limdfsresources **ptrlimdfsresources, const AbstractDfstransformer *adfst) { Limdfsresources *limdfsresources = *ptrlimdfsresources; adfst->freedfsconstinfo(&limdfsresources->dfsconstinfo); GT_FREEARRAY(&limdfsresources->bwci,Boundswithchar); if (adfst->freeLimdfsstackelem != NULL) { unsigned long idx; for (idx = 0; idx < limdfsresources->stack.allocatedLcpintervalwithinfo; idx++) { adfst->freeLimdfsstackelem(limdfsresources->stack. spaceLcpintervalwithinfo[idx].aliasstate); } if (!limdfsresources->keepexpandedonstack) { adfst->freeLimdfsstackelem(limdfsresources->copyofcopyofparentstate); adfst->freeLimdfsstackelem(limdfsresources->copyofparent.aliasstate); } } GT_FREEARRAY(&limdfsresources->stack,Lcpintervalwithinfo); gt_free(limdfsresources->rangeOccs); gt_free(limdfsresources->currentpathspace); GT_FREEARRAY(&limdfsresources->mstatspos,GtUlong); gt_free(*ptrlimdfsresources); } /* enumerate the suffixes in an LCP-interval */ static void gen_esa_overinterval(const Genericindex *genericindex, ProcessIdxMatch processmatch, void *processmatchinfo, const Indexbounds *itv, GT_UNUSED unsigned long totallength, GtIdxMatch *match) { unsigned long idx; for (idx = itv->leftbound; idx <= itv->rightbound; idx++) { match->dbstartpos = ESASUFFIXPTRGET(genericindex->suffixarray->suftab,idx); /* call processmatch */ processmatch(processmatchinfo,match); } } static void esa_overinterval(Limdfsresources *limdfsresources, const Indexbounds *itv, GtIdxMatch *match) { gen_esa_overinterval(limdfsresources->genericindex, limdfsresources->processmatch, limdfsresources->processmatchinfo, itv, limdfsresources->genericindex->totallength, match); limdfsresources->numberofmatches += (itv->rightbound - itv->leftbound + 1); } static void gen_pck_overinterval(const Genericindex *genericindex, ProcessIdxMatch processmatch, void *processmatchinfo, const Indexbounds *itv, unsigned long totallength, GtIdxMatch *match) { Bwtseqpositioniterator *bspi; unsigned long dbstartpos; gt_assert(itv->leftbound < itv->rightbound); bspi = gt_Bwtseqpositioniterator_new(genericindex->packedindex, itv->leftbound,itv->rightbound); while (gt_Bwtseqpositioniterator_next(&dbstartpos,bspi)) { gt_assert(totallength >= (dbstartpos + itv->offset)); /* call processmatch */ match->dbstartpos = totallength - (dbstartpos + itv->offset); processmatch(processmatchinfo,match); } gt_Bwtseqpositioniterator_delete(bspi); } static void pck_overinterval(Limdfsresources *limdfsresources, const Indexbounds *itv, GtIdxMatch *match) { gen_pck_overinterval(limdfsresources->genericindex, limdfsresources->processmatch, limdfsresources->processmatchinfo, itv, limdfsresources->genericindex->totallength, match); limdfsresources->numberofmatches += (itv->rightbound - itv->leftbound); } static void storemstatsposition(void *processinfo,const GtIdxMatch *match) { GtArrayGtUlong *mstatspos = (GtArrayGtUlong *) processinfo; GT_STOREINARRAY(mstatspos,GtUlong,32,match->dbstartpos); } static int comparepositions(const void *a, const void *b) { if (*((unsigned long *) a) < *((unsigned long *) b)) { return -1; } return 1; } GtArrayGtUlong *gt_fromitv2sortedmatchpositions( Limdfsresources *limdfsresources, unsigned long leftbound, unsigned long rightbound, unsigned long offset) { Indexbounds itv; GtIdxMatch match; limdfsresources->mstatspos.nextfreeGtUlong = 0; itv.leftbound = leftbound; itv.rightbound = rightbound; itv.offset = (unsigned long) offset; match.dbabsolute = true; match.dblen = itv.offset; match.dbsubstring = limdfsresources->currentpathspace; match.querystartpos = 0; match.querylen = offset; match.distance = 0; match.alignment = NULL; (limdfsresources->genericindex->withesa ? gen_esa_overinterval : gen_pck_overinterval) (limdfsresources->genericindex, storemstatsposition, &limdfsresources->mstatspos, &itv, limdfsresources->genericindex->totallength, &match); qsort(limdfsresources->mstatspos.spaceGtUlong, (size_t) limdfsresources->mstatspos.nextfreeGtUlong, sizeof (unsigned long), comparepositions); if (limdfsresources->genericindex->withesa) { limdfsresources->numberofmatches += (rightbound - leftbound + 1); } else { limdfsresources->numberofmatches += (rightbound - leftbound); } return &limdfsresources->mstatspos; } static void initparentcopy(Limdfsresources *limdfsresources, const AbstractDfstransformer *adfst) { if (!limdfsresources->keepexpandedonstack) { if (adfst->copyLimdfsstate == NULL) { memcpy(limdfsresources->copyofcopyofparentstate, limdfsresources->copyofparent.aliasstate, adfst->sizeofdfsstate); } else { adfst->copyLimdfsstate(limdfsresources->copyofcopyofparentstate, limdfsresources->copyofparent.aliasstate, limdfsresources->dfsconstinfo); } } } static Lcpintervalwithinfo *expandsingleton(Limdfsresources *limdfsresources, unsigned long *resetvalue, bool notfirst, GtUchar cc, unsigned long currentdepth, const AbstractDfstransformer *adfst) { if (limdfsresources->keepexpandedonstack) { Lcpintervalwithinfo *instate; Lcpintervalwithinfo *outstate; outstate = allocateStackspace(limdfsresources,adfst); outstate->keeponstack = true; outstate->lcpitv.offset = (unsigned long) currentdepth; outstate->lcpitv.inchar = cc; if (notfirst) { instate = outstate-1; gt_assert(limdfsresources->stack.nextfreeLcpintervalwithinfo >= 2UL); outstate->previousstackelem = limdfsresources->stack.nextfreeLcpintervalwithinfo - 2; } else { gt_assert(limdfsresources->parentindex < limdfsresources->stack.nextfreeLcpintervalwithinfo-1); *resetvalue = limdfsresources->stack.nextfreeLcpintervalwithinfo-1; instate = limdfsresources->stack.spaceLcpintervalwithinfo + limdfsresources->parentindex; outstate->previousstackelem = limdfsresources->parentindex; } gt_assert(instate < outstate); adfst->nextLimdfsstate(limdfsresources->dfsconstinfo, outstate->aliasstate, currentdepth, cc, instate->aliasstate); return outstate; } adfst->inplacenextLimdfsstate(limdfsresources->dfsconstinfo, limdfsresources->copyofcopyofparentstate, currentdepth, cc); return NULL; } static void addpathchar(Limdfsresources *limdfsresources,unsigned long idx, GtUchar cc) { if (limdfsresources->currentpathspace != NULL) { gt_assert(idx < limdfsresources->allocatedpathspace); limdfsresources->currentpathspace[idx] = cc; } } /* iterate transformation algorithm over a sequence context */ static void esa_overcontext(Limdfsresources *limdfsresources, const Indexbounds *child, const AbstractDfstransformer *adfst) { unsigned long pos, startpos; unsigned long resetvalue = 0; GtUchar cc; Limdfsresult limdfsresult; GtIdxMatch match; initparentcopy(limdfsresources,adfst); startpos = ESASUFFIXPTRGET(limdfsresources->genericindex->suffixarray->suftab, child->leftbound); #ifdef SKDEBUG printf("retrieve context of startpos=%lu\n",(unsigned long) startpos); #endif for (pos = startpos + child->offset - 1; pos < limdfsresources->genericindex->totallength; pos++) { cc = gt_encseq_get_encoded_char( limdfsresources->genericindex->suffixarray->encseq, pos, limdfsresources->genericindex->suffixarray->readmode); if (cc != (GtUchar) SEPARATOR && (!limdfsresources->nowildcards || cc != (GtUchar) WILDCARD)) { #ifdef SKDEBUG printf("cc=%u\n",(unsigned int) cc); #endif Lcpintervalwithinfo *outstate; addpathchar(limdfsresources,(unsigned long) (pos - startpos),cc); outstate = expandsingleton(limdfsresources, &resetvalue, (pos > startpos + child->offset - 1) ? true : false, cc, (unsigned long) (pos - startpos + 1), adfst); adfst->fullmatchLimdfsstate(&limdfsresult, limdfsresources->keepexpandedonstack ? outstate->aliasstate : limdfsresources->copyofcopyofparentstate, child->leftbound, child->leftbound, (unsigned long) 1, (unsigned long) (pos-startpos+1), limdfsresources->dfsconstinfo); if (limdfsresult.status == Limdfsstop) { break; } if (limdfsresult.status == Limdfssuccess) { match.dbabsolute = true; match.dbstartpos = startpos; match.dblen = pos - startpos + 1; match.dbsubstring = limdfsresources->currentpathspace; match.querylen = limdfsresult.pprefixlen; match.distance = limdfsresult.distance; if (limdfsresources->keepexpandedonstack) { tracethestackelems(&match,limdfsresources,limdfsresult.pprefixlen, outstate); } else { match.querystartpos = 0; match.alignment = NULL; } /* call processmatch */ limdfsresources->processmatch(limdfsresources->processmatchinfo,&match); limdfsresources->numberofmatches++; break; } } else { break; /* failure */ } } if (limdfsresources->keepexpandedonstack) { gt_assert(resetvalue > 0); limdfsresources->stack.nextfreeLcpintervalwithinfo = resetvalue; } } /* the following function iterates to determine the smallest length at which the expanded pattern matches */ static void pck_overcontext(Limdfsresources *limdfsresources, const Indexbounds *child, const AbstractDfstransformer *adfst) { GtUchar cc; unsigned long contextlength, resetvalue = 0; bool processinchar = true; unsigned long bound; Bwtseqcontextiterator *bsci; Limdfsresult limdfsresult; GtIdxMatch match; gt_assert(child != NULL); bound = child->leftbound; bsci = gt_Bwtseqcontextiterator_new(limdfsresources->genericindex->packedindex, bound); initparentcopy(limdfsresources,adfst); #ifdef SKDEBUG printf("retrieve context for bound = %lu\n",(unsigned long) bound); #endif for (contextlength = 0; /* nothing */; contextlength++) { if (processinchar) { cc = child->inchar; processinchar = false; } else { cc = gt_Bwtseqcontextiterator_next(&bound,bsci); } if (cc != (GtUchar) SEPARATOR && (!limdfsresources->nowildcards || cc != (GtUchar) WILDCARD)) { Lcpintervalwithinfo *outstate; #ifdef SKDEBUG printf("cc=%u\n",(unsigned int) cc); #endif addpathchar(limdfsresources, (unsigned long) (child->offset - 1 + contextlength),cc); outstate = expandsingleton(limdfsresources, &resetvalue, (contextlength > 0) ? true : false, cc, (unsigned long) (child->offset+contextlength), adfst); adfst->fullmatchLimdfsstate(&limdfsresult, limdfsresources->keepexpandedonstack ? outstate->aliasstate : limdfsresources->copyofcopyofparentstate, bound, bound+1, (unsigned long) 1, (unsigned long) (child->offset+contextlength), limdfsresources->dfsconstinfo); if (limdfsresult.status == Limdfsstop) { break; } if (limdfsresult.status == Limdfssuccess) { unsigned long startpos; startpos = gt_bwtseqfirstmatch( limdfsresources->genericindex->packedindex, child->leftbound); match.dbabsolute = true; match.dbstartpos = limdfsresources->genericindex->totallength - (startpos + child->offset); match.dblen = child->offset + contextlength; match.dbsubstring = limdfsresources->currentpathspace; match.querylen = limdfsresult.pprefixlen; match.distance = limdfsresult.distance; if (limdfsresources->keepexpandedonstack) { tracethestackelems(&match,limdfsresources,limdfsresult.pprefixlen, outstate); } else { match.querystartpos = 0; match.alignment = NULL; } /* call processmatch */ limdfsresources->processmatch(limdfsresources->processmatchinfo,&match); limdfsresources->numberofmatches++; break; } } else { break; } } if (limdfsresources->keepexpandedonstack) { gt_assert(resetvalue > 0); limdfsresources->stack.nextfreeLcpintervalwithinfo = resetvalue; } gt_Bwtseqcontextiterator_delete(bsci); bsci = NULL; } static const Lcpintervalwithinfo *currentparent(const Limdfsresources *limdfsresources) { const Lcpintervalwithinfo *ptr; if (limdfsresources->keepexpandedonstack) { gt_assert(limdfsresources->parentindex < limdfsresources->stack.nextfreeLcpintervalwithinfo); } ptr = limdfsresources->keepexpandedonstack ? (limdfsresources->stack.spaceLcpintervalwithinfo + limdfsresources->parentindex) : &limdfsresources->copyofparent; return ptr; } /* the following function does not contain any iteration */ static void pushandpossiblypop(Limdfsresources *limdfsresources, const Indexbounds *child, const AbstractDfstransformer *adfst) { Limdfsresult limdfsresult; unsigned long width; Lcpintervalwithinfo *stackptr; #ifdef SKDEBUG printf("(2) nextLimdfsstate("); adfst->showLimdfsstate(currentparent(limdfsresources)->aliasstate, (unsigned long) (child->offset-1), limdfsresources->dfsconstinfo); printf(",%u)=",(unsigned int) child->inchar); #endif stackptr = allocateStackspace(limdfsresources,adfst); adfst->nextLimdfsstate(limdfsresources->dfsconstinfo, stackptr->aliasstate, (unsigned long) child->offset, child->inchar, currentparent(limdfsresources)->aliasstate); #ifdef SKDEBUG adfst->showLimdfsstate(stackptr->aliasstate, (unsigned long) child->offset, limdfsresources->dfsconstinfo); printf("\n"); #endif if (limdfsresources->genericindex->withesa) { width = child->rightbound - child->leftbound + 1; } else { width = child->rightbound - child->leftbound; } adfst->fullmatchLimdfsstate(&limdfsresult, stackptr->aliasstate, child->leftbound, child->rightbound, width, (unsigned long) child->offset, limdfsresources->dfsconstinfo); if (limdfsresult.status == Limdfscontinue) { stackptr->lcpitv = *child; if (limdfsresources->keepexpandedonstack) { stackptr->keeponstack = true; stackptr->previousstackelem = limdfsresources->parentindex; } return; /* no success, but still have the chance to find result */ } if (limdfsresult.status == Limdfssuccess) { GtIdxMatch match; match.dbabsolute = true; match.querylen = limdfsresult.pprefixlen; match.distance = limdfsresult.distance; match.dblen = child->offset; match.dbsubstring = limdfsresources->currentpathspace; if (limdfsresources->keepexpandedonstack) { gt_assert(stackptr >= limdfsresources->stack.spaceLcpintervalwithinfo && stackptr < limdfsresources->stack.spaceLcpintervalwithinfo + limdfsresources->stack.nextfreeLcpintervalwithinfo); stackptr->lcpitv = *child; stackptr->keeponstack = true; stackptr->previousstackelem = limdfsresources->parentindex; tracethestackelems(&match,limdfsresources,limdfsresult.pprefixlen, stackptr); } else { match.querystartpos = 0; match.alignment = NULL; } /* success with match of length pprefixlen */ (limdfsresources->genericindex->withesa ? esa_overinterval : pck_overinterval) (limdfsresources,child,&match); } /* now status == Limdfssuccess || status == Limdfsstop */ /* pop the element from the stack as there has been success or stop event */ limdfsresources->stack.nextfreeLcpintervalwithinfo--; } static void processchildinterval(Limdfsresources *limdfsresources, const Indexbounds *child, const AbstractDfstransformer *adfst) { if (child->leftbound + 1 < child->rightbound || (limdfsresources->genericindex->withesa && child->leftbound + 1 == child->rightbound)) { pushandpossiblypop(limdfsresources, child, adfst); } else { if (limdfsresources->genericindex->withesa) { esa_overcontext(limdfsresources,child,adfst); } else { pck_overcontext(limdfsresources,child,adfst); } } } #ifdef SKDEBUG static void showLCPinterval(bool withesa,const Indexbounds *itv) { unsigned long width; width = withesa ? (itv->rightbound - itv->leftbound + 1) : itv->rightbound - itv->leftbound; printf("(%lu,width=%lu)",(unsigned long) itv->offset,(unsigned long) width); printf("(%lu,%lu)",(unsigned long) itv->leftbound, (unsigned long) (withesa ? itv->rightbound : itv->rightbound-1)); } #endif static void esa_splitandprocess(Limdfsresources *limdfsresources, const AbstractDfstransformer *adfst) { unsigned long firstspecial; GtUchar extendchar; unsigned long idx; const Indexbounds *parent = &(currentparent(limdfsresources)->lcpitv); extendchar = gt_lcpintervalextendlcp( limdfsresources->genericindex->suffixarray->encseq, limdfsresources->genericindex->suffixarray->readmode, limdfsresources->genericindex->suffixarray->suftab, limdfsresources->genericindex->totallength, limdfsresources->alphasize, parent->offset, parent->leftbound, parent->rightbound); if (extendchar < limdfsresources->alphasize) { limdfsresources->bwci.spaceBoundswithchar[0].lbound = parent->leftbound; limdfsresources->bwci.spaceBoundswithchar[0].rbound = parent->rightbound; limdfsresources->bwci.spaceBoundswithchar[0].inchar = extendchar; limdfsresources->bwci.nextfreeBoundswithchar = 1UL; } else { limdfsresources->bwci.nextfreeBoundswithchar = 0; gt_lcpintervalsplitwithoutspecial( &limdfsresources->bwci, limdfsresources->genericindex->suffixarray->encseq, limdfsresources->genericindex->suffixarray->readmode, limdfsresources->genericindex->totallength, limdfsresources->genericindex->suffixarray->suftab, parent->offset, parent->leftbound, parent->rightbound); } firstspecial = parent->leftbound; for (idx = 0; idx < limdfsresources->bwci.nextfreeBoundswithchar; idx++) { Indexbounds child; /* reset as parentptr may have been moved */ parent = &(currentparent(limdfsresources)->lcpitv); child.inchar = limdfsresources->bwci.spaceBoundswithchar[idx].inchar; child.offset = parent->offset+1; child.leftbound = limdfsresources->bwci.spaceBoundswithchar[idx].lbound; child.rightbound = limdfsresources->bwci.spaceBoundswithchar[idx].rbound; child.code = 0; /* not used, but we better define it */ addpathchar(limdfsresources,(unsigned long) parent->offset,child.inchar); #ifdef SKDEBUG printf("%u-child of ",(unsigned int) child.inchar); showLCPinterval(limdfsresources->genericindex->withesa,parent); printf(" is "); showLCPinterval(limdfsresources->genericindex->withesa,&child); printf("\n"); #endif processchildinterval(limdfsresources, &child, adfst); firstspecial = child.rightbound+1; } if (!limdfsresources->nowildcards) { Indexbounds child; unsigned long bound; child.inchar = (GtUchar) WILDCARD; child.offset = parent->offset+1; child.code = 0; /* not used, but we better define it */ for (bound = firstspecial; bound <= parent->rightbound; bound++) { child.leftbound = child.rightbound = bound; esa_overcontext(limdfsresources,&child,adfst); } } } static void smalldepthbwtrangesplitwithoutspecial(GtArrayBoundswithchar *bwci, const Mbtab **mbtab, GtUchar alphasize, GtCodetype parentcode, unsigned long childdepth) { GtCodetype childcode; const Mbtab *mbptr; gt_assert(childdepth > 0); bwci->nextfreeBoundswithchar = 0; childcode = parentcode * alphasize; for (mbptr = mbtab[childdepth] + childcode; mbptr < mbtab[childdepth] + childcode + alphasize; mbptr++) { if (mbptr->lowerbound < mbptr->upperbound) { bwci->spaceBoundswithchar[bwci->nextfreeBoundswithchar].inchar = (GtUchar) (mbptr - (mbtab[childdepth] + childcode)); bwci->spaceBoundswithchar[bwci->nextfreeBoundswithchar].lbound = mbptr->lowerbound; bwci->spaceBoundswithchar[bwci->nextfreeBoundswithchar++].rbound = mbptr->upperbound; } } } static void pck_splitandprocess(Limdfsresources *limdfsresources, const AbstractDfstransformer *adfst) { unsigned long idx; unsigned long sumwidth = 0; const Indexbounds *parent = &(currentparent(limdfsresources)->lcpitv); GtCodetype startcode; if (parent->offset < (unsigned long) limdfsresources->genericindex->maxdepth) { smalldepthbwtrangesplitwithoutspecial(&limdfsresources->bwci, limdfsresources->genericindex->mbtab, limdfsresources->alphasize, parent->code, (unsigned long) (parent->offset + 1)); startcode = parent->code * limdfsresources->alphasize; } else { gt_bwtrangesplitwithoutspecial(&limdfsresources->bwci, limdfsresources->rangeOccs, limdfsresources->genericindex->packedindex, parent->leftbound, parent->rightbound); startcode = 0; } for (idx = 0; idx < limdfsresources->bwci.nextfreeBoundswithchar; idx++) { Indexbounds child; /* reset as parentptr may have been moved */ parent = &(currentparent(limdfsresources)->lcpitv); child.inchar = limdfsresources->bwci.spaceBoundswithchar[idx].inchar; child.offset = parent->offset+1; child.leftbound = limdfsresources->bwci.spaceBoundswithchar[idx].lbound; child.rightbound = limdfsresources->bwci.spaceBoundswithchar[idx].rbound; gt_assert(child.inchar < limdfsresources->alphasize); child.code = startcode + child.inchar; addpathchar(limdfsresources,(unsigned long) parent->offset,child.inchar); sumwidth += child.rightbound - child.leftbound; #ifdef SKDEBUG printf("%u-child of ",(unsigned int) child.inchar); showLCPinterval(limdfsresources->genericindex->withesa,parent); printf(" is "); showLCPinterval(limdfsresources->genericindex->withesa,&child); printf("\n"); #endif processchildinterval(limdfsresources, &child, adfst); } if (!limdfsresources->nowildcards) { unsigned long bound; Indexbounds child; for (bound = parent->leftbound + sumwidth; bound < parent->rightbound; bound++) { GtUchar cc = gt_bwtseqgetsymbol(bound, limdfsresources->genericindex->packedindex); child.offset = parent->offset+1; child.code = 0; /* not used, but we better define it */ if (cc != (GtUchar) SEPARATOR) { child.leftbound = bound; child.inchar = cc; pck_overcontext(limdfsresources,&child,adfst); } } } } #ifdef SKDEBUG #define SHOWSTACKTOP(STACKPTR)\ printf("top=");\ showLCPinterval(limdfsresources->genericindex->withesa,\ &(STACKPTR)->lcpitv);\ adfst->showLimdfsstate((STACKPTR)->aliasstate,\ (unsigned long) (STACKPTR)->lcpitv.offset,\ limdfsresources->dfsconstinfo);\ printf("\n") #else #define SHOWSTACKTOP(STACKPTR) /* Nothing */ #endif static void runlimdfs(Limdfsresources *limdfsresources, const AbstractDfstransformer *adfst) { Lcpintervalwithinfo *stackptr; gt_assert(adfst->sizeofdfsstate <= sizeof (limdfsresources->copyofparent.aliasstate)); limdfsresources->numberofmatches = 0; initlcpinfostack(limdfsresources,adfst); while (limdfsresources->stack.nextfreeLcpintervalwithinfo > 0) { gt_assert(limdfsresources->stack.spaceLcpintervalwithinfo != NULL); /* printf("nextfreeLcpintervalwithinfo=%lu\n", limdfsresources->stack.nextfreeLcpintervalwithinfo); */ stackptr = limdfsresources->stack.spaceLcpintervalwithinfo + limdfsresources->stack.nextfreeLcpintervalwithinfo - 1; SHOWSTACKTOP(stackptr); if (limdfsresources->keepexpandedonstack) { if (stackptr->keeponstack) { limdfsresources->parentindex = limdfsresources->stack.nextfreeLcpintervalwithinfo - 1; } else { limdfsresources->stack.nextfreeLcpintervalwithinfo--; continue; } } else { /* make a copy of the top most stack element to be used as source */ if (adfst->copyLimdfsstate == NULL) { limdfsresources->copyofparent = *stackptr; /* make a copy */ } else { limdfsresources->copyofparent.lcpitv = stackptr->lcpitv; adfst->copyLimdfsstate(limdfsresources->copyofparent.aliasstate, stackptr->aliasstate, limdfsresources->dfsconstinfo); } /* now parentptr always points to copyofparent */ } if (currentparent(limdfsresources)->lcpitv.offset > 0) { addpathchar(limdfsresources, (unsigned long) (currentparent(limdfsresources)->lcpitv.offset-1), currentparent(limdfsresources)->lcpitv.inchar); } gt_assert(limdfsresources->stack.nextfreeLcpintervalwithinfo > 0); /* now delete the top element from the stack as we have made a copy */ if (limdfsresources->keepexpandedonstack) { stackptr->keeponstack = false; } else { limdfsresources->stack.nextfreeLcpintervalwithinfo--; } (limdfsresources->genericindex->withesa ? esa_splitandprocess : pck_splitandprocess) (limdfsresources,adfst); } if (adfst->extractdfsconstinfo != NULL) { adfst->extractdfsconstinfo(limdfsresources->processresult, limdfsresources, limdfsresources->patterninfo, limdfsresources->dfsconstinfo); } } typedef enum { Popitv, Splititv, Processitv, Pushitv, Processcontext } Runlimdfsstate; bool gt_indexbasedapproxpatternmatching(Limdfsresources *limdfsresources, const GtUchar *pattern, unsigned long patternlength, unsigned long maxdistance, unsigned long maxintervalwidth, bool skpp, const AbstractDfstransformer *adfst) { adfst->initdfsconstinfo(limdfsresources->dfsconstinfo, (unsigned int) limdfsresources->alphasize, pattern, patternlength, maxdistance, maxintervalwidth, skpp); runlimdfs(limdfsresources,adfst); return (limdfsresources->numberofmatches > 0) ? true : false; } void gt_indexbasedmstats(Limdfsresources *limdfsresources, const GtUchar *pattern, unsigned long patternlength, const AbstractDfstransformer *adfst) { adfst->initdfsconstinfo(limdfsresources->dfsconstinfo, (unsigned int) limdfsresources->alphasize, pattern, patternlength); runlimdfs(limdfsresources,adfst); } void gt_indexbasedspacedseeds(Limdfsresources *limdfsresources, const GtUchar *pattern, GtBitsequence seedbitvector, unsigned long seedweight, const AbstractDfstransformer *adfst) { adfst->initdfsconstinfo(limdfsresources->dfsconstinfo, (unsigned int) limdfsresources->alphasize, pattern, seedbitvector, seedweight); runlimdfs(limdfsresources,adfst); } void gt_indexbasedlocali(Limdfsresources *limdfsresources, long matchscore, long mismatchscore, long gapstart, long gapextend, unsigned long threshold, const GtUchar *query, unsigned long querylength, const AbstractDfstransformer *adfst) { adfst->initdfsconstinfo(limdfsresources->dfsconstinfo, (unsigned int) limdfsresources->alphasize, matchscore, mismatchscore, gapstart, gapextend, threshold, query, querylength); runlimdfs(limdfsresources,adfst); } unsigned long genericmstats(const Limdfsresources *limdfsresources, const GtUchar *qstart, const GtUchar *qend) { if (limdfsresources->genericindex->withesa) { return gt_suffixarraymstats (limdfsresources->genericindex->suffixarray, 0, 0, limdfsresources->genericindex->totallength, NULL, qstart, qend); } return gt_voidpackedindexmstatsforward(limdfsresources->genericindex-> packedindex, 0, 0, limdfsresources->genericindex-> totallength, NULL, qstart, qend); } static bool esa_exactpatternmatching(const Suffixarray *suffixarray, const GtUchar *pattern, unsigned long patternlength, GT_UNUSED const GtUchar *dbsubstring, ProcessIdxMatch processmatch, void *processmatchinfo) { GtMMsearchiterator *mmsi; unsigned long dbstartpos, totallength = gt_encseq_total_length(suffixarray->encseq); bool nomatches; GtIdxMatch match; mmsi = gt_mmsearchiterator_new_complete_olain(suffixarray->encseq, suffixarray->suftab, 0, /* leftbound */ totallength, /* rightbound */ 0, /* offset */ suffixarray->readmode, pattern, patternlength); nomatches = gt_mmsearchiterator_isempty(mmsi); match.dbabsolute = true; match.dblen = (unsigned long) patternlength; match.dbsubstring = pattern; match.querystartpos = 0; match.querylen = patternlength; match.distance = 0; match.alignment = NULL; while (gt_mmsearchiterator_next(&dbstartpos,mmsi)) { /* call processmatch */ match.dbstartpos = dbstartpos; processmatch(processmatchinfo,&match); } gt_mmsearchiterator_delete(mmsi); return nomatches ? false : true; } bool gt_indexbasedexactpatternmatching(const Limdfsresources *limdfsresources, const GtUchar *pattern, unsigned long patternlength) { if (limdfsresources->genericindex->withesa) { return esa_exactpatternmatching(limdfsresources->genericindex->suffixarray, pattern, patternlength, limdfsresources->currentpathspace, limdfsresources->processmatch, limdfsresources->processmatchinfo); } else { return gt_pck_exactpatternmatching( limdfsresources->genericindex->packedindex, pattern, patternlength, limdfsresources->genericindex->totallength, limdfsresources->currentpathspace, limdfsresources->processmatch, limdfsresources->processmatchinfo); } } GtUchar gt_limdfs_getencodedchar(const Limdfsresources *limdfsresources, unsigned long pos, GtReadmode readmode) { gt_assert(limdfsresources->encseq != NULL); return gt_encseq_get_encoded_char(limdfsresources->encseq, pos, readmode); } bool gt_intervalwidthleq(const Limdfsresources *limdfsresources, unsigned long leftbound,unsigned long rightbound) { unsigned long width; if (limdfsresources->genericindex->withesa) { if (leftbound > rightbound) { width = 0; } else { width = rightbound - leftbound + 1; } } else { if (leftbound >= rightbound) { width = 0; } else { width = rightbound - leftbound; } } if (width > 0 && width <= (unsigned long) limdfsresources->maxintervalwidth) { return true; } return false; } const FMindex *genericindex_get_packedindex(const Genericindex *genericindex) { gt_assert(genericindex->packedindex != NULL); return genericindex->packedindex; } unsigned long genericindex_get_totallength(const Genericindex *genericindex) { gt_assert(genericindex && genericindex->totallength != 0); return genericindex->totallength; } unsigned long esa_exact_pattern_count(const Suffixarray *suffixarray, const GtUchar *pattern, unsigned long patternlength) { GtMMsearchiterator *mmsi; unsigned long count, totallength = gt_encseq_total_length(suffixarray->encseq); mmsi = gt_mmsearchiterator_new_complete_olain(suffixarray->encseq, suffixarray->suftab, 0, /* leftbound */ totallength, /* rightbound */ 0, /* offset */ suffixarray->readmode, pattern, patternlength); count = gt_mmsearchiterator_count(mmsi); gt_mmsearchiterator_delete(mmsi); return count; } unsigned long gt_indexbased_exact_pattern_count( const Genericindex *genericindex, const GtUchar *pattern, unsigned long patternlength) { if (genericindex->withesa) { return esa_exact_pattern_count(genericindex->suffixarray, pattern, patternlength); } else { return gt_pck_exact_pattern_count(genericindex->packedindex, pattern, patternlength); } } genometools-1.5.1/src/match/idx-limdfs.h000066400000000000000000000126221211610345200201430ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef IDX_LIMDFS_H #define IDX_LIMDFS_H #include "core/arraydef.h" #include "core/readmode.h" #include "procmatch.h" #include "core/logger.h" #include "absdfstrans-def.h" #include "core/intbits.h" #include "match/eis-voiditf.h" #include "match/sarr-def.h" typedef struct Genericindex Genericindex; void genericindex_delete(Genericindex *genericindex); const GtEncseq *genericindex_getencseq(const Genericindex *genericindex); const Suffixarray *genericindex_getsuffixarray(const Genericindex *genericindex); Genericindex *genericindex_new(const char *indexname, bool withesa, bool withencseq, bool withdestab, bool withssptab, int userdefinedmaxdepth, GtLogger *logger, GtError *err); typedef struct Limdfsresources Limdfsresources; Limdfsresources *gt_newLimdfsresources(const Genericindex *genericindex, bool nowildcards, unsigned long maxintervalwidth, unsigned long maxpathlength, bool keepexpandedonstack, ProcessIdxMatch processmatch, void *processmatchinfo, Processresult processresult, void *patterninfo, const AbstractDfstransformer *adfst); void gt_freeLimdfsresources(Limdfsresources **ptrlimdfsresources, const AbstractDfstransformer *adfst); bool gt_indexbasedapproxpatternmatching(Limdfsresources *limdfsresources, const GtUchar *pattern, unsigned long patternlength, unsigned long maxdistance, unsigned long maxintervalwidth, bool skpp, const AbstractDfstransformer *adfst); void gt_indexbasedmstats(Limdfsresources *limdfsresources, const GtUchar *pattern, unsigned long patternlength, const AbstractDfstransformer *adfst); void gt_indexbasedspacedseeds(Limdfsresources *limdfsresources, const GtUchar *pattern, GtBitsequence seedbitvector, unsigned long seedweight, const AbstractDfstransformer *adfst); void gt_indexbasedlocali(Limdfsresources *limdfsresources, long matchscore, long mismatchscore, long gapstart, long gapextend, unsigned long threshold, const GtUchar *query, unsigned long querylength, const AbstractDfstransformer *adfst); unsigned long genericmstats(const Limdfsresources *limdfsresources, const GtUchar *qstart, const GtUchar *qend); bool gt_indexbasedexactpatternmatching(const Limdfsresources *limdfsresources, const GtUchar *pattern, unsigned long patternlength); GtUchar gt_limdfs_getencodedchar(const Limdfsresources *limdfsresources, unsigned long pos, GtReadmode readmode); bool gt_intervalwidthleq(const Limdfsresources *limdfsresources, unsigned long leftbound,unsigned long rightbound); GtArrayGtUlong *gt_fromitv2sortedmatchpositions( Limdfsresources *limdfsresources, unsigned long leftbound, unsigned long rightbound, unsigned long offset); const FMindex *genericindex_get_packedindex(const Genericindex *genericindex); unsigned long genericindex_get_totallength(const Genericindex *genericindex); unsigned long gt_indexbased_exact_pattern_count( const Genericindex *genericindex, const GtUchar *pattern, unsigned long patternlength); #endif genometools-1.5.1/src/match/idxlocali.c000066400000000000000000000251741211610345200200540ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "core/ma_api.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "extended/alignment.h" #include "sarr-def.h" #include "core/intbits.h" #include "core/format64.h" #include "idx-limdfs.h" #include "idxlocali.h" #include "idxlocalidp.h" #include "idxlocalisw.h" #include "absdfstrans-def.h" #include "esa-map.h" #include "stamp.h" typedef struct { const GtUchar *characters; uint64_t queryunit; GtUchar wildcardshow; bool showalignment; const GtEncseq *encseq; } Showmatchinfo; static void showmatch(void *processinfo,const GtIdxMatch *match) { Showmatchinfo *showmatchinfo = (Showmatchinfo *) processinfo; unsigned long seqnum; unsigned long relpos; if (match->dbabsolute) { unsigned long seqstartpos; seqnum = gt_encseq_seqnum(showmatchinfo->encseq, match->dbstartpos); seqstartpos = gt_encseq_seqstartpos(showmatchinfo->encseq, seqnum); gt_assert(seqstartpos <= match->dbstartpos); relpos = match->dbstartpos - seqstartpos; } else { relpos = match->dbstartpos; seqnum = match->dbseqnum; } printf("%lu\t%lu\t",seqnum,relpos); printf("%lu\t",match->dblen); printf("\t" Formatuint64_t "\t%lu\t%lu\t%lu\n", PRINTuint64_tcast(showmatchinfo->queryunit), match->querystartpos, match->querylen, match->distance); if (showmatchinfo->showalignment) { gt_alignment_show_with_mapped_chars( (const GtAlignment *) match->alignment, showmatchinfo->characters, showmatchinfo->wildcardshow, stdout); } } typedef struct { const GtEncseq *encseq; GtBitsequence *hasmatch; } Storematchinfo; void gt_initstorematch(Storematchinfo *storematch, const GtEncseq *encseq) { unsigned long numofdbsequences = gt_encseq_num_of_sequences(encseq); storematch->encseq = encseq; GT_INITBITTAB(storematch->hasmatch,numofdbsequences); } static void storematch(void *info,const GtIdxMatch *match) { Storematchinfo *storematch = (Storematchinfo *) info; unsigned long seqnum; if (match->dbabsolute) { seqnum = gt_encseq_seqnum(storematch->encseq, match->dbstartpos); } else { seqnum = match->dbseqnum; } if (!GT_ISIBITSET(storematch->hasmatch,seqnum)) { GT_SETIBIT(storematch->hasmatch,seqnum); } } void gt_checkandresetstorematch(GT_UNUSED uint64_t queryunit, Storematchinfo *storeonline, Storematchinfo *storeoffline) { unsigned long seqnum, countmatchseq = 0, numofdbsequences = gt_encseq_num_of_sequences(storeonline->encseq); for (seqnum = 0; seqnum < numofdbsequences; seqnum++) { #ifndef NDEBUG if (GT_ISIBITSET(storeonline->hasmatch,seqnum) && !GT_ISIBITSET(storeoffline->hasmatch,seqnum)) { fprintf(stderr,"query " Formatuint64_t " refseq %lu: " "online has match but offline not\n", PRINTuint64_tcast(queryunit),seqnum); exit(GT_EXIT_PROGRAMMING_ERROR); } if (!GT_ISIBITSET(storeonline->hasmatch,seqnum) && GT_ISIBITSET(storeoffline->hasmatch,seqnum)) { fprintf(stderr,"query " Formatuint64_t " refseq %lu: " "offline has match but online not\n", PRINTuint64_tcast(queryunit),seqnum); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif if (GT_ISIBITSET(storeonline->hasmatch,seqnum)) { countmatchseq++; } } GT_CLEARBITTAB(storeonline->hasmatch,numofdbsequences); GT_CLEARBITTAB(storeoffline->hasmatch,numofdbsequences); printf("matching sequences: %lu\n",countmatchseq); } void gt_freestorematch(Storematchinfo *storematch) { gt_free(storematch->hasmatch); } int gt_runidxlocali(const IdxlocaliOptions *idxlocalioptions,GtError *err) { Genericindex *genericindex = NULL; bool haserr = false; GtLogger *logger; const GtEncseq *encseq = NULL; logger = gt_logger_new(idxlocalioptions->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); if (idxlocalioptions->doonline) { GtEncseqLoader *el; el = gt_encseq_loader_new(); gt_encseq_loader_require_multiseq_support(el); gt_encseq_loader_drop_description_support(el); gt_encseq_loader_set_logger(el, logger); encseq = gt_encseq_loader_load(el, gt_str_get(idxlocalioptions->indexname), err); gt_encseq_loader_delete(el); if (encseq == NULL) { haserr = true; } } else { genericindex = genericindex_new(gt_str_get(idxlocalioptions->indexname), idxlocalioptions->withesa, idxlocalioptions->withesa || idxlocalioptions->docompare, false, true, 0, logger, err); if (genericindex == NULL) { haserr = true; } else { encseq = genericindex_getencseq(genericindex); } } if (!haserr) { GtSeqIterator *seqit; const GtUchar *query; unsigned long querylen; char *desc = NULL; int retval; Limdfsresources *limdfsresources = NULL; const AbstractDfstransformer *dfst; SWdpresource *swdpresource = NULL; Showmatchinfo showmatchinfo; ProcessIdxMatch processmatch; GtAlphabet *a; void *processmatchinfoonline, *processmatchinfooffline; Storematchinfo storeonline, storeoffline; a = gt_encseq_alphabet(encseq); if (idxlocalioptions->docompare) { processmatch = storematch; gt_initstorematch(&storeonline,encseq); gt_initstorematch(&storeoffline,encseq); processmatchinfoonline = &storeonline; processmatchinfooffline = &storeoffline; } else { processmatch = showmatch; showmatchinfo.encseq = encseq; showmatchinfo.characters = gt_alphabet_characters(a); showmatchinfo.wildcardshow = gt_alphabet_wildcard_show(a); showmatchinfo.showalignment = idxlocalioptions->showalignment; processmatchinfoonline = processmatchinfooffline = &showmatchinfo; } if (idxlocalioptions->doonline || idxlocalioptions->docompare) { swdpresource = gt_newSWdpresource(idxlocalioptions->matchscore, idxlocalioptions->mismatchscore, idxlocalioptions->gapextend, idxlocalioptions->threshold, idxlocalioptions->showalignment, processmatch, processmatchinfoonline); } dfst = gt_locali_AbstractDfstransformer(); if (!idxlocalioptions->doonline || idxlocalioptions->docompare) { gt_assert(genericindex != NULL); limdfsresources = gt_newLimdfsresources(genericindex, true, 0, 0, /* maxpathlength */ true, /* keepexpandedonstack */ processmatch, processmatchinfooffline, NULL, /* processresult */ NULL, /* processresult info */ dfst); } seqit = gt_seq_iterator_sequence_buffer_new(idxlocalioptions->queryfiles, err); if (!seqit) haserr = true; if (!haserr) { gt_seq_iterator_set_symbolmap(seqit, gt_alphabet_symbolmap(a)); for (showmatchinfo.queryunit = 0; /* Nothing */; showmatchinfo.queryunit++) { retval = gt_seq_iterator_next(seqit, &query, &querylen, &desc, err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } printf("process sequence " Formatuint64_t " of length %lu\n", PRINTuint64_tcast(showmatchinfo.queryunit),querylen); if (idxlocalioptions->doonline || idxlocalioptions->docompare) { gt_multiapplysmithwaterman(swdpresource,encseq,query,querylen); } if (!idxlocalioptions->doonline || idxlocalioptions->docompare) { gt_indexbasedlocali(limdfsresources, idxlocalioptions->matchscore, idxlocalioptions->mismatchscore, idxlocalioptions->gapstart, idxlocalioptions->gapextend, idxlocalioptions->threshold, query, querylen, dfst); } if (idxlocalioptions->docompare) { gt_checkandresetstorematch(showmatchinfo.queryunit, &storeonline,&storeoffline); } } if (limdfsresources != NULL) { gt_freeLimdfsresources(&limdfsresources,dfst); } if (swdpresource != NULL) { gt_freeSWdpresource(swdpresource); swdpresource = NULL; } gt_seq_iterator_delete(seqit); } if (idxlocalioptions->docompare) { gt_freestorematch(&storeonline); gt_freestorematch(&storeoffline); } } if (genericindex == NULL) { gt_encseq_delete((GtEncseq *) encseq); encseq = NULL; } else { genericindex_delete(genericindex); } gt_logger_delete(logger); logger = NULL; return haserr ? -1 : 0; } genometools-1.5.1/src/match/idxlocali.h000066400000000000000000000027021211610345200200510ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #ifndef IDXLOCALI_H #define IDXLOCALI_H #include #include "core/str_array.h" #include "core/str.h" #include "core/option_api.h" #include "core/error_api.h" typedef struct { GtStrArray *queryfiles; GtStr *indexname; GtOption *refoptionesaindex, *refoptionpckindex; bool withesa, verbose, showalignment, doonline, docompare; unsigned long threshold; long matchscore, mismatchscore, gapstart, gapextend; } IdxlocaliOptions; int gt_runidxlocali(const IdxlocaliOptions *idxlocalioptions,GtError *err); #endif genometools-1.5.1/src/match/idxlocalidp.c000066400000000000000000000621251211610345200203750ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma_api.h" #include "core/types_api.h" #include "core/chardef.h" #include "core/unused_api.h" #include "core/assert_api.h" #include "core/ma_api.h" #include "extended/alignment.h" #include "absdfstrans-imp.h" #include "idxlocalisw.h" #include "idxlocalidp.h" #define MINUSINFTY (-1L) typedef struct { unsigned long dbcurrent, dbprefixlen; unsigned long querypos, queryend; GtUchar *spaceGtUchardbsubstring; unsigned long allocatedGtUchardbsubstring; GtAlignment *alignment; } LocaliTracebackstate; struct Limdfsconstinfo { Scorevalues scorevalues; const GtUchar *query; unsigned long maxcollen, querylength, threshold; LocaliTracebackstate tbs; }; typedef enum { Notraceback, Insertbit, Replacebit, Deletebit } LocaliTracebit; typedef struct { #undef AFFINE #ifdef AFFINE Scoretype repcell, inscell, delcell; #endif Scoretype bestcell; LocaliTracebit tracebit; } LocaliMatrixvalue; typedef struct { LocaliMatrixvalue *colvalues; unsigned long lenval, pprefixlen, maxvalue; } LocaliColumn; typedef struct { Limdfsstatus status; unsigned long qseqendpos; Scoretype alignmentscore; } Idxlocaliresult; #ifdef AFFINE static inline Scoretype max2 (Scoretype a,Scoretype b) { return (a < b) ? b : a; } static inline Scoretype max3 (Scoretype a,Scoretype b,Scoretype c) { Scoretype temp; temp = (a < b) ? b : a; return (temp < c) ? c : temp; } #endif #ifdef SKDEBUG static void showscorecolumn(const LocaliColumn *column, unsigned long querylength, unsigned long currentdepth) { gt_assert(column != NULL); printf("at depth %lu: ",currentdepth); if (column->colvalues == NULL) { gt_assert(column->lenval == 0); printf("empty column\n"); } else { unsigned long idx; gt_assert(column->colvalues != NULL); for (idx = 0; idx <= querylength; idx++) { if (column->colvalues[idx].bestcell > 0) { printf("(%lu,%ld) ",idx,column->colvalues[idx].bestcell); } } printf("max=%lu\n",column->maxvalue); } } void locali_showLimdfsstate(const DECLAREPTRDFSSTATE(aliasstate), unsigned long currentdepth, const Limdfsconstinfo *lci) { showscorecolumn((const LocaliColumn *) aliasstate, lci->querylength,currentdepth); } #endif #ifdef SKDEBUG #define REALLOCMSG(COL)\ printf("line %d: %salloc %lu entries",\ __LINE__,(COL)->colvalues == NULL ? "m" : "re",\ lci->maxcollen) #define ATADDRESS(S,COL)\ printf("%s at address %0X\n",S,(unsigned int) (COL)->colvalues) #else #define REALLOCMSG(COL) /* Nothing */ #define ATADDRESS(S,COL) /* Nothing */ #endif #define IDXLOCALIDP_UPDATEMAX(EXPR,BIT)\ temp = EXPR;\ if (temp > outcol->colvalues[i].bestcell)\ {\ outcol->colvalues[i].bestcell = temp;\ outcol->colvalues[i].tracebit = BIT;\ } static void secondcolumn (const Limdfsconstinfo *lci,LocaliColumn *outcol, GtUchar dbchar) { unsigned long i; if (outcol->lenval < lci->maxcollen) { REALLOCMSG(outcol); outcol->colvalues = gt_realloc(outcol->colvalues, sizeof (LocaliMatrixvalue) * lci->maxcollen); outcol->lenval = lci->maxcollen; ATADDRESS("",outcol); } #ifdef AFFINE outcol->colvalues[0].repcell = MINUSINFTY; outcol->colvalues[0].inscell = lci->scorevalues.gapstart + lci->scorevalues.gapextend; outcol->colvalues[0].delcell = MINUSINFTY; #endif outcol->colvalues[0].bestcell = MINUSINFTY; outcol->colvalues[0].tracebit = Notraceback; outcol->maxvalue = 0; outcol->pprefixlen = 0; for (i = 1UL; i <= lci->querylength; i++) { #ifdef AFFINE outcol->colvalues[i].delcell = MINUSINFTY; outcol->colvalues[i].inscell = MINUSINFTY; outcol->colvalues[i].repcell = REPLACEMENTSCORE(&lci->scorevalues, dbchar,lci->query[i-1]); outcol->colvalues[i].bestcell = max2(outcol->colvalues[i].delcell, outcol->colvalues[i].repcell); #else Scoretype temp; outcol->colvalues[i].bestcell = MINUSINFTY; outcol->colvalues[i].tracebit = Notraceback; if (outcol->colvalues[i-1].bestcell > 0) { IDXLOCALIDP_UPDATEMAX(outcol->colvalues[i-1].bestcell + lci->scorevalues.gapextend,Deletebit); } IDXLOCALIDP_UPDATEMAX(REPLACEMENTSCORE(&lci->scorevalues, dbchar,lci->query[i-1]),Replacebit); IDXLOCALIDP_UPDATEMAX(lci->scorevalues.gapextend,Insertbit); #endif if (outcol->colvalues[i].bestcell > 0 && outcol->colvalues[i].bestcell > (Scoretype) outcol->maxvalue) { outcol->maxvalue = (unsigned long) outcol->colvalues[i].bestcell; outcol->pprefixlen = i; } } } static void nextcolumn (const Limdfsconstinfo *lci, LocaliColumn *outcol, const GtUchar dbchar, const LocaliColumn *incol) { unsigned long i; #ifndef AFFINE Scoretype temp; #endif gt_assert(outcol != incol); gt_assert(outcol->colvalues != incol->colvalues); gt_assert(incol->lenval >= lci->querylength+1); if (outcol->lenval < lci->querylength+1) { REALLOCMSG(outcol); outcol->colvalues = gt_realloc(outcol->colvalues, sizeof (LocaliMatrixvalue) * lci->maxcollen); outcol->lenval = lci->maxcollen; ATADDRESS("",outcol); } gt_assert(outcol->lenval >= lci->querylength+1); #ifdef AFFINE outcol->colvalues[0].repcell = outcol->colvalues[0].delcell = MINUSINFTY; if (incol->colvalues[0].inscell > 0) { if (incol->colvalues[0].bestcell > 0) { outcol->colvalues[0].inscell = max2 (incol->colvalues[0].inscell + lci->scorevalues.gapextend, incol->colvalues[0].bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend); } else { outcol->colvalues[0].inscell = incol->colvalues[0].inscell + lci->scorevalues.gapextend; } } else { if (incol->colvalues[0].bestcell > 0) { outcol->colvalues[0].inscell = incol->colvalues[0].bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend; } else { outcol->colvalues[0].inscell = MINUSINFTY; } } outcol->colvalues[0].bestcell = max3 (outcol->colvalues[0].repcell, outcol->colvalues[0].inscell, outcol->colvalues[0].delcell); #else outcol->colvalues[0].bestcell = MINUSINFTY; outcol->colvalues[0].tracebit = Notraceback; #endif outcol->maxvalue = 0; outcol->pprefixlen = 0; for (i = 1UL; i <= lci->querylength; i++) { #ifdef AFFINE if (incol->colvalues[i-1].bestcell > 0) { outcol->colvalues[i].repcell = incol->colvalues[i-1].bestcell + REPLACEMENTSCORE(&lci->scorevalues, dbchar,lci->query[i-1]); } else { outcol->colvalues[i].repcell = MINUSINFTY; } if (incol->colvalues[i].inscell > 0) { if (incol->colvalues[i].bestcell > 0) { outcol->colvalues[i].inscell = max2 (incol->colvalues[i].inscell + lci->scorevalues.gapextend, incol->colvalues[i].bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend); } else { outcol->colvalues[i].inscell = incol->colvalues[i].inscell + lci->scorevalues.gapextend; } } else { if (incol->colvalues[i].bestcell > 0) { outcol->colvalues[i].inscell = incol->colvalues[i].bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend; } else { outcol->colvalues[i].inscell = MINUSINFTY; } } if (outcol->colvalues[i-1].delcell > 0) { if (outcol->colvalues[i-1].bestcell > 0) { outcol->colvalues[i].delcell = max2 (outcol->colvalues[i-1].delcell + lci->scorevalues.gapextend, outcol->colvalues[i-1].bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend); } else { outcol->colvalues[i].delcell = outcol->colvalues[i-1].delcell + lci->scorevalues.gapextend; } } else { if (outcol->colvalues[i-1].bestcell > 0) { outcol->colvalues[i].delcell = outcol->colvalues[i-1].bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend; } else { outcol->colvalues[i].delcell = MINUSINFTY; } } outcol->colvalues[i].bestcell = max3 (outcol->colvalues[i].repcell, outcol->colvalues[i].inscell, outcol->colvalues[i].delcell); #else outcol->colvalues[i].bestcell = MINUSINFTY; outcol->colvalues[i].tracebit = Notraceback; if (outcol->colvalues[i-1].bestcell > 0) { IDXLOCALIDP_UPDATEMAX(outcol->colvalues[i-1].bestcell + lci->scorevalues.gapextend, Deletebit); } if (incol->colvalues[i-1].bestcell > 0) { IDXLOCALIDP_UPDATEMAX(incol->colvalues[i-1].bestcell + REPLACEMENTSCORE(&lci->scorevalues, dbchar,lci->query[i-1]),Replacebit); } if (incol->colvalues[i].bestcell > 0) { IDXLOCALIDP_UPDATEMAX(incol->colvalues[i].bestcell + lci->scorevalues.gapextend, Insertbit); } #endif if (outcol->colvalues[i].bestcell > 0 && outcol->colvalues[i].bestcell > (Scoretype) outcol->maxvalue) { outcol->maxvalue = (unsigned long) outcol->colvalues[i].bestcell; outcol->pprefixlen = i; } } } #ifdef AFFINE static void inplacenextcolumn (const Limdfsconstinfo *lci, const GtUchar dbchar, LocaliColumn *column) { unsigned long i; LocaliMatrixvalue nw, west; column->colvalues[0].repcell = column->colvalues[0].delcell = MINUSINFTY; if (column->colvalues[0].inscell > 0) { if (column->colvalues[0].bestcell > 0) { column->colvalues[0].inscell = max2 (column->colvalues[0].inscell + lci->scorevalues.gapextend, column->colvalues[0].bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend); } else { column->colvalues[0].inscell = column->colvalues[0].inscell + lci->scorevalues.gapextend; } } else { if (column->colvalues[0].bestcell > 0) { column->colvalues[0].inscell = column->colvalues[0].bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend; } else { column->colvalues[0].inscell = MINUSINFTY; } } column->colvalues[0].bestcell = max3 (column->colvalues[0].repcell, column->colvalues[0].inscell, column->colvalues[0].delcell); column->maxvalue = (unsigned long) max2(0,column->colvalues[0].bestcell); column->pprefixlen = 0; nw = column->colvalues[0]; for (i = 1UL; i <= lci->querylength; i++) { west = column->colvalues[i]; if (nw.bestcell > 0) { column->colvalues[i].repcell = nw.bestcell + REPLACEMENTSCORE(&lci->scorevalues, dbchar,lci->query[i-1]); } else { column->colvalues[i].repcell = MINUSINFTY; } if (west.inscell > 0) { if (west.bestcell > 0) { column->colvalues[i].inscell = max2 (west.inscell + lci->scorevalues.gapextend, west.bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend); } else { column->colvalues[i].inscell = west.inscell + lci->scorevalues.gapextend; } } else { if (west.bestcell > 0) { column->colvalues[i].inscell = west.bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend; } else { column->colvalues[i].inscell = MINUSINFTY; } } if (column->colvalues[i-1].delcell > 0) { if (column->colvalues[i-1].bestcell > 0) { column->colvalues[i].delcell = max2 (column->colvalues[i-1].delcell + lci->scorevalues.gapextend, column->colvalues[i-1].bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend); } else { column->colvalues[i].delcell = column->colvalues[i-1].delcell + lci->scorevalues.gapextend; } } else { if (column->colvalues[i-1].bestcell > 0) { column->colvalues[i].delcell = column->colvalues[i-1].bestcell + lci->scorevalues.gapstart + lci->scorevalues.gapextend; } else { column->colvalues[i].delcell = MINUSINFTY; } } nw = west; column->colvalues[i].bestcell = max3 (column->colvalues[i].repcell, column->colvalues[i].inscell, column->colvalues[i].delcell); if (column->colvalues[i].bestcell > 0 && column->colvalues[i].bestcell > (Scoretype) column->maxvalue) { column->maxvalue = (unsigned long) column->colvalues[i].bestcell; column->pprefixlen = i; } } } #endif static Limdfsconstinfo *locali_allocatedfsconstinfo (GT_UNUSED unsigned int alphasize) { Limdfsconstinfo *lci; lci = gt_malloc (sizeof (Limdfsconstinfo)); lci->maxcollen = 0; lci->tbs.alignment = gt_alignment_new(); lci->tbs.spaceGtUchardbsubstring = NULL; lci->tbs.allocatedGtUchardbsubstring = 0; return lci; } static void locali_initdfsconstinfo (Limdfsconstinfo *lci, unsigned int alphasize,...) { va_list ap; va_start (ap, alphasize); lci->scorevalues.matchscore = va_arg (ap, Scoretype); lci->scorevalues.mismatchscore = va_arg (ap, Scoretype); lci->scorevalues.gapstart = va_arg (ap, Scoretype); lci->scorevalues.gapextend = va_arg (ap, Scoretype); lci->threshold = va_arg (ap, unsigned long); lci->query = va_arg (ap, const GtUchar *); lci->querylength = va_arg (ap, unsigned long); if (lci->maxcollen < lci->querylength + 1) { lci->maxcollen = lci->querylength+1; } va_end(ap); } static void locali_freedfsconstinfo (Limdfsconstinfo **lci) { gt_alignment_delete((*lci)->tbs.alignment); (*lci)->tbs.alignment = NULL; gt_free((*lci)->tbs.spaceGtUchardbsubstring); (*lci)->tbs.spaceGtUchardbsubstring = NULL; gt_free (*lci); *lci = NULL; } static void locali_initrootLimdfsstate(DECLAREPTRDFSSTATE(aliasstate), Limdfsconstinfo *lci) { LocaliColumn *column = (LocaliColumn *) aliasstate; if (column->lenval < lci->maxcollen) { REALLOCMSG(column); column->colvalues = gt_realloc(column->colvalues, sizeof (LocaliMatrixvalue) * lci->maxcollen); column->lenval = lci->maxcollen; ATADDRESS("",column); } } static void locali_initLimdfsstackelem (DECLAREPTRDFSSTATE (aliasstate)) { LocaliColumn *column = (LocaliColumn *) aliasstate; column->colvalues = NULL; column->lenval = 0; } static void locali_freeLimdfsstackelem (DECLAREPTRDFSSTATE (aliasstate)) { LocaliColumn *column = (LocaliColumn *) aliasstate; if (column ->colvalues != NULL) { ATADDRESS("free ",column); gt_free(column->colvalues); column->colvalues = NULL; column->lenval = 0; } } static void locali_copyLimdfsstate (DECLAREPTRDFSSTATE(deststate), const DECLAREPTRDFSSTATE(srcstate), Limdfsconstinfo *lci) { LocaliColumn *destcol = (LocaliColumn *) deststate; const LocaliColumn *srccol = (const LocaliColumn *) srcstate; if (srccol->colvalues != NULL) { unsigned long idx; if (destcol->lenval < lci->maxcollen) { REALLOCMSG(destcol); destcol->colvalues = gt_realloc(destcol->colvalues, sizeof (LocaliMatrixvalue) * lci->maxcollen); destcol->lenval = lci->maxcollen; ATADDRESS("",destcol); } #ifndef NDEBUG if (destcol->lenval < lci->querylength+1) { fprintf(stderr,"destcol->lenval = %lu < %lu lci->querylength+1\n", destcol->lenval,lci->querylength+1); exit(GT_EXIT_PROGRAMMING_ERROR); } if (srccol->lenval < lci->querylength+1) { fprintf(stderr,"srccol->lenval = %lu < %lu lci->querylength+1\n", srccol->lenval,lci->querylength+1); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif for (idx = 0; idx<=lci->querylength; idx++) { destcol->colvalues[idx] = srccol->colvalues[idx]; } } destcol->maxvalue = srccol->maxvalue; destcol->pprefixlen = srccol->pprefixlen; } static void locali_fullmatchLimdfsstate (Limdfsresult *limdfsresult, DECLAREPTRDFSSTATE(aliasstate), GT_UNUSED unsigned long leftbound, GT_UNUSED unsigned long rightbound, GT_UNUSED unsigned long width, GT_UNUSED unsigned long currentdepth, Limdfsconstinfo *lci) { LocaliColumn *column = (LocaliColumn *) aliasstate; if (column->colvalues != NULL) { if (column->maxvalue >= lci->threshold) { limdfsresult->status = Limdfssuccess; limdfsresult->distance = column->maxvalue; limdfsresult->pprefixlen = column->pprefixlen; } else { if (column->maxvalue > 0) { limdfsresult->status = Limdfscontinue; } else { limdfsresult->status = Limdfsstop; } } } else { limdfsresult->status = Limdfscontinue; } } static void locali_nextLimdfsstate (const Limdfsconstinfo *lci, DECLAREPTRDFSSTATE (aliasoutcol), GT_UNUSED unsigned long currentdepth, GtUchar currentchar, const DECLAREPTRDFSSTATE (aliasincol)) { LocaliColumn *outcol = (LocaliColumn *) aliasoutcol; const LocaliColumn *incol = (const LocaliColumn *) aliasincol; if (currentdepth > 1UL) { nextcolumn (lci,outcol,currentchar,incol); } else { secondcolumn (lci, outcol, currentchar); } } #ifdef AFFINE static void locali_inplacenextLimdfsstate (const Limdfsconstinfo *lci, DECLAREPTRDFSSTATE (aliasstate), GT_UNUSED unsigned long currentdepth, GtUchar currentchar) { LocaliColumn *column = (LocaliColumn *) aliasstate; if (currentdepth > 1UL) { inplacenextcolumn (lci,currentchar,column); } else { secondcolumn (lci,column,currentchar); } } #endif void gt_reinitLocaliTracebackstate(Limdfsconstinfo *lci, unsigned long dbprefixlen, unsigned long pprefixlen) { LocaliTracebackstate *tbs = &lci->tbs; tbs->dbprefixlen = tbs->dbcurrent = dbprefixlen; tbs->queryend = tbs->querypos = pprefixlen; if (dbprefixlen > (unsigned long) tbs->allocatedGtUchardbsubstring) { tbs->spaceGtUchardbsubstring = gt_realloc(tbs->spaceGtUchardbsubstring, sizeof (GtUchar) * dbprefixlen); } gt_alignment_reset(tbs->alignment); } void gt_processelemLocaliTracebackstate(Limdfsconstinfo *lci, GtUchar currentchar, const void *aliasstate) { LocaliTracebackstate *tbs = &lci->tbs; const LocaliColumn *column = (const LocaliColumn *) aliasstate; while (true) { /* printf(" coord(i=%lu,j=%lu) with ",tbs->querypos, (unsigned long) tbs->dbcurrent); printf("cellvalue=%ld, ",column->colvalues[tbs->querypos].bestcell); */ switch (column->colvalues[tbs->querypos].tracebit) { case Insertbit: /* printf("insertbit\n"); */ gt_alignment_add_insertion(tbs->alignment); gt_assert(tbs->dbcurrent > 0); tbs->dbcurrent--; tbs->spaceGtUchardbsubstring[tbs->dbcurrent] = currentchar; return; case Replacebit: /* printf("replacebit\n"); */ gt_alignment_add_replacement(tbs->alignment); gt_assert(tbs->dbcurrent > 0); tbs->dbcurrent--; tbs->spaceGtUchardbsubstring[tbs->dbcurrent] = currentchar; gt_assert(tbs->querypos > 0); tbs->querypos--; return; case Deletebit: /* printf("deletebit\n"); */ gt_alignment_add_deletion(tbs->alignment); gt_assert(tbs->querypos > 0); tbs->querypos--; break; /* stay in the same column => so next iteration */ case Notraceback: fprintf(stderr,"tracebit = Notraceback not allowed\n"); fprintf(stderr,"column->colvalues[tbs->querypos].bestcell=%ld\n", column->colvalues[tbs->querypos].bestcell); exit(GT_EXIT_PROGRAMMING_ERROR); default: fprintf(stderr,"tracebit = %d not allowed\n", (int) column->colvalues[tbs->querypos].tracebit); exit(GT_EXIT_PROGRAMMING_ERROR); } } } const void *gt_completealignmentfromLocaliTracebackstate( unsigned long *alignedquerylength, const Limdfsconstinfo *lci) { #ifndef NDEBUG Scoretype evalscore; #endif const GtUchar *querysubstart; #ifdef SKDEBUG gt_alignment_show_multieop_list(lci->tbs.alignment,stdout); #endif gt_assert(lci->tbs.queryend >= lci->tbs.querypos); *alignedquerylength = lci->tbs.queryend - lci->tbs.querypos; querysubstart = lci->query + lci->tbs.querypos; gt_assert(querysubstart != NULL); gt_alignment_set_seqs(lci->tbs.alignment, querysubstart, *alignedquerylength, lci->tbs.spaceGtUchardbsubstring, (unsigned long) lci->tbs.dbprefixlen); #ifndef NDEBUG evalscore = gt_alignment_eval_with_score(lci->tbs.alignment, lci->scorevalues.matchscore, lci->scorevalues.mismatchscore, lci->scorevalues.gapextend); if (evalscore < 0 || (unsigned long) evalscore < lci->threshold) { fprintf(stderr,"unexpected eval score %ld\n",evalscore); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif return (const void *) lci->tbs.alignment; } const AbstractDfstransformer *gt_locali_AbstractDfstransformer (void) { static const AbstractDfstransformer locali_adfst = { sizeof (LocaliColumn), locali_allocatedfsconstinfo, locali_initdfsconstinfo, NULL, locali_freedfsconstinfo, locali_initrootLimdfsstate, locali_initLimdfsstackelem, locali_freeLimdfsstackelem, locali_copyLimdfsstate, locali_fullmatchLimdfsstate, locali_nextLimdfsstate, #ifdef AFFINE locali_inplacenextLimdfsstate, #else NULL, #endif #ifdef SKDEBUG locali_showLimdfsstate #endif /* */ }; return &locali_adfst; } genometools-1.5.1/src/match/idxlocalidp.h000066400000000000000000000030701211610345200203740ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef IDXLOCALIDP_H #define IDXLOCALIDP_H #include "core/types_api.h" #include "absdfstrans-def.h" const AbstractDfstransformer *gt_locali_AbstractDfstransformer(void); void gt_reinitLocaliTracebackstate(Limdfsconstinfo *lci, unsigned long dbprefixlen, unsigned long pprefixlen); void gt_processelemLocaliTracebackstate(Limdfsconstinfo *lci, GtUchar currentchar, const void *aliasstate); const void *gt_completealignmentfromLocaliTracebackstate( unsigned long *alignedquerylength, const Limdfsconstinfo *lci); #endif genometools-1.5.1/src/match/idxlocalisw.c000066400000000000000000000375041211610345200204260ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "core/encseq.h" #include "core/ma_api.h" #include "core/format64.h" #include "extended/alignment.h" #include "idxlocalisw.h" #include "procmatch.h" #define REPLACEMENTBIT ((GtUchar) 1) #define DELETIONBIT (((GtUchar) 1) << 1) #define INSERTIONBIT (((GtUchar) 1) << 2) typedef struct { unsigned long umax, vmax; } Maxscorecoord; typedef GtUchar Retracebits; static Scoretype swlocalsimilarityscore(Scoretype *scol, Maxscorecoord *maxpair, const Scorevalues *scorevalues, const GtUchar *useq, unsigned long ulen, const GtEncseq *vencseq, unsigned long startpos, unsigned long endpos) { Scoretype val, we, nw, *scolptr, maximalscore = 0; const GtUchar *uptr; GtUchar vcurrent; unsigned long j; maxpair->umax = maxpair->vmax = 0; for (scolptr = scol; scolptr <= scol + ulen; scolptr++) { *scolptr = 0; } for (j = startpos; j < endpos; j++) { nw = 0; vcurrent = gt_encseq_get_encoded_char(vencseq,j, GT_READMODE_FORWARD); gt_assert(vcurrent != (GtUchar) SEPARATOR); for (scolptr = scol+1, uptr = useq; uptr < useq + ulen; scolptr++, uptr++) { gt_assert(*uptr != (GtUchar) SEPARATOR); we = *scolptr; *scolptr = *(scolptr-1) + scorevalues->gapextend; if ((val = nw + REPLACEMENTSCORE(scorevalues,*uptr,vcurrent)) > *scolptr) { *scolptr = val; } if ((val = we + scorevalues->gapextend) > *scolptr) { *scolptr = val; } if (*scolptr < 0) { *scolptr = 0; } else { if (*scolptr > maximalscore) { maximalscore = *scolptr; maxpair->umax = (unsigned long) (uptr - useq + 1); maxpair->vmax = (unsigned long) (j - startpos + 1); } } nw = we; } } return maximalscore; } typedef struct { Scoretype similarity; unsigned long lu; unsigned long lv; } DPpoint; typedef struct { unsigned long len1, start1; unsigned long start2, len2; Scoretype similarity; } DPregion; static void swlocalsimilarityregion(DPpoint *scol, DPregion *maxentry, const Scorevalues *scorevalues, const GtUchar *useq, unsigned long ulen, const GtEncseq *vencseq, unsigned long startpos, unsigned long endpos) { Scoretype val; DPpoint *scolptr, we, nw; const GtUchar *uptr; GtUchar vcurrent; unsigned long j; maxentry->similarity = 0; maxentry->len1 = 0; maxentry->len2 = 0; maxentry->start1 = 0; maxentry->start2 = 0; for (scolptr = scol; scolptr <= scol + ulen; scolptr++) { scolptr->similarity = 0; scolptr->lu = 0; scolptr->lv = 0; } for (j = startpos; j < endpos; j++) { vcurrent = gt_encseq_get_encoded_char(vencseq,j, GT_READMODE_FORWARD); gt_assert(vcurrent != (GtUchar) SEPARATOR); nw = *scol; for (scolptr = scol+1, uptr = useq; uptr < useq + ulen; scolptr++, uptr++) { gt_assert(*uptr != (GtUchar) SEPARATOR); we = *scolptr; scolptr->similarity = (scolptr-1)->similarity + scorevalues->gapextend; scolptr->lu = (scolptr-1)->lu + 1; scolptr->lv = (scolptr-1)->lv; if ((val = nw.similarity + REPLACEMENTSCORE(scorevalues,*uptr,vcurrent)) > scolptr->similarity) { scolptr->similarity = val; scolptr->lu = nw.lu + 1; scolptr->lv = nw.lv + 1; } if ((val = we.similarity + scorevalues->gapextend) > scolptr->similarity) { scolptr->similarity = val; scolptr->lu = we.lu; scolptr->lv = we.lv + 1; } if (scolptr->similarity < 0) { scolptr->similarity = 0; scolptr->lu = 0; scolptr->lv = 0; } else { if (scolptr->similarity > maxentry->similarity) { maxentry->similarity = scolptr->similarity; maxentry->len1 = scolptr->lu; maxentry->len2 = scolptr->lv; maxentry->start1 = (unsigned long) (uptr - useq) - scolptr->lu + 1; maxentry->start2 = (j - startpos) - scolptr->lv + 1; } } nw = we; } } } static void swmaximalDPedges(Retracebits *edges, Scoretype *scol, const Scorevalues *scorevalues, const GtUchar *useq, unsigned long ulen, const GtEncseq *vencseq, unsigned long startpos, unsigned long endpos) { Scoretype val, we, nw, *scolptr; const GtUchar *uptr; GtUchar vcurrent; unsigned long j; Retracebits *eptr; eptr = edges; *eptr = 0; for (*scol = 0, scolptr = scol+1, uptr = useq, eptr++; uptr < useq + ulen; scolptr++, uptr++, eptr++) { *scolptr = *(scolptr-1) + scorevalues->gapextend; *eptr = DELETIONBIT; } for (j = startpos; j < endpos; j++) { vcurrent = gt_encseq_get_encoded_char(vencseq,j, GT_READMODE_FORWARD); gt_assert(vcurrent != (GtUchar) SEPARATOR); nw = *scol; *scol = nw + scorevalues->gapextend; *eptr = INSERTIONBIT; for (scolptr = scol+1, uptr = useq, eptr++; uptr < useq + ulen; scolptr++, uptr++, eptr++) { gt_assert(*uptr != (GtUchar) SEPARATOR); we = *scolptr; *scolptr = *(scolptr-1) + scorevalues->gapextend; *eptr = DELETIONBIT; if ((val = nw + REPLACEMENTSCORE(scorevalues,*uptr,vcurrent)) >= *scolptr) { if (val == *scolptr) { *eptr = *eptr | REPLACEMENTBIT; } else { *eptr = REPLACEMENTBIT; } *scolptr = val; } if ((val = we + scorevalues->gapextend) >= *scolptr) { if (val == *scolptr) { *eptr = *eptr | INSERTIONBIT; } else { *eptr = INSERTIONBIT; } *scolptr = val; } nw = we; } } } static void swtracebackDPedges(GtAlignment *alignment, unsigned long ulen, const GtEncseq *encseq, unsigned long vlen, GtUchar *dbsubstring, unsigned long startpos, const Retracebits *edges) { const Retracebits *eptr = edges + (ulen+1) * (vlen+1) - 1; while (true) { if (*eptr & DELETIONBIT) { gt_alignment_add_deletion(alignment); eptr--; } else { if (*eptr & REPLACEMENTBIT) { gt_alignment_add_replacement(alignment); eptr -= (ulen+2); } else { if (*eptr & INSERTIONBIT) { gt_alignment_add_insertion(alignment); eptr -= (ulen+1); } else { break; } } gt_assert(vlen > 0); vlen--; dbsubstring[vlen] = gt_encseq_get_encoded_char(encseq, startpos + vlen, GT_READMODE_FORWARD); } } } static void swproducealignment(GtAlignment *alignment, GtUchar *dbsubstring, Retracebits *edges, Scoretype *scol, const Scorevalues *scorevalues, GT_UNUSED unsigned long scorethreshold, const GtUchar *useq, unsigned long ulen, const GtEncseq *vencseq, unsigned long startpos, unsigned long endpos) { unsigned long vlen = endpos - startpos; swmaximalDPedges(edges,scol,scorevalues,useq,ulen,vencseq,startpos,endpos); swtracebackDPedges(alignment,ulen,vencseq,vlen,dbsubstring,startpos,edges); gt_alignment_set_seqs(alignment,useq,ulen,dbsubstring,(unsigned long) vlen); #ifndef NDEBUG { Scoretype evalscore; evalscore = gt_alignment_eval_with_score(alignment, scorevalues->matchscore, scorevalues->mismatchscore, scorevalues->gapextend); if (evalscore < 0 || (unsigned long) evalscore < scorethreshold) { fprintf(stderr,"unexpected eval score %ld\n",evalscore); exit(GT_EXIT_PROGRAMMING_ERROR); } } #endif } struct SWdpresource { bool showalignment; GtAlignment *alignment; Scorevalues scorevalues; Scoretype *swcol; unsigned long scorethreshold; DPpoint *swentrycol; GtUchar *dbsubstring; unsigned long allocatedswcol, allocatedmaxedges, allocateddbsubstring; Retracebits *maxedges; ProcessIdxMatch processmatch; void *processmatchinfo; }; static void applysmithwaterman(SWdpresource *dpresource, const GtEncseq *encseq, unsigned long encsequnit, unsigned long startpos, unsigned long endpos, const GtUchar *query, unsigned long querylen) { Scoretype score; Maxscorecoord maxpair; DPregion maxentry; if (dpresource->allocatedswcol < querylen + 1) { dpresource->allocatedswcol = querylen + 1; dpresource->swcol = gt_realloc(dpresource->swcol, sizeof *dpresource->swcol * dpresource->allocatedswcol); dpresource->swentrycol = gt_realloc(dpresource->swentrycol, sizeof *dpresource->swentrycol * dpresource->allocatedswcol); } score = swlocalsimilarityscore(dpresource->swcol,&maxpair, &dpresource->scorevalues, query,querylen,encseq,startpos,endpos); if (score >= (Scoretype) dpresource->scorethreshold) { GtIdxMatch match; swlocalsimilarityregion(dpresource->swentrycol, &maxentry, &dpresource->scorevalues, query,maxpair.umax, encseq,startpos,startpos + maxpair.vmax); gt_assert(maxentry.similarity == score); match.dbabsolute = false; match.dbstartpos = maxentry.start2; match.dblen = maxentry.len2; match.dbseqnum = encsequnit; match.querystartpos = maxentry.start1; match.querylen = maxentry.len1; gt_assert(maxentry.similarity >= 0); match.distance = (unsigned long) maxentry.similarity; if (dpresource->showalignment) { if (dpresource->allocatedmaxedges < (maxentry.len1 + 1) * (maxentry.len2 + 1)) { dpresource->allocatedmaxedges = (maxentry.len1 + 1) * (maxentry.len2 + 1); dpresource->maxedges = gt_realloc(dpresource->maxedges, sizeof *dpresource->maxedges * dpresource->allocatedmaxedges); } gt_alignment_reset(dpresource->alignment); if (dpresource->allocateddbsubstring < (unsigned long) maxentry.len2) { dpresource->allocateddbsubstring = (unsigned long) maxentry.len2; dpresource->dbsubstring = gt_realloc(dpresource->dbsubstring, sizeof *dpresource->dbsubstring * dpresource->allocateddbsubstring); } swproducealignment(dpresource->alignment, dpresource->dbsubstring, dpresource->maxedges, dpresource->swcol, &dpresource->scorevalues, dpresource->scorethreshold, query + maxentry.start1, maxentry.len1, encseq, startpos + maxentry.start2, startpos + maxentry.start2 + maxentry.len2); match.alignment = dpresource->alignment; match.dbsubstring = dpresource->dbsubstring; } else { match.dbsubstring = NULL; match.alignment = NULL; } dpresource->processmatch(dpresource->processmatchinfo,&match); } } void gt_multiapplysmithwaterman(SWdpresource *dpresource, const GtEncseq *encseq, const GtUchar *query, unsigned long querylen) { unsigned long seqnum, seqstartpos, seqlength, numofdbsequences = gt_encseq_num_of_sequences(encseq); for (seqnum = 0; seqnum < numofdbsequences; seqnum++) { seqstartpos = gt_encseq_seqstartpos(encseq, seqnum); seqlength = gt_encseq_seqlength(encseq, seqnum); applysmithwaterman(dpresource, encseq, seqnum, seqstartpos, seqstartpos + seqlength, query, querylen); } } SWdpresource *gt_newSWdpresource(Scoretype matchscore, Scoretype mismatchscore, Scoretype gapextend, unsigned long scorethreshold, bool showalignment, ProcessIdxMatch processmatch, void *processmatchinfo) { SWdpresource *swdpresource; swdpresource = gt_malloc(sizeof *swdpresource); swdpresource->showalignment = showalignment; swdpresource->scorevalues.matchscore = matchscore; swdpresource->scorevalues.mismatchscore = mismatchscore; swdpresource->scorevalues.gapextend = gapextend; swdpresource->scorethreshold = scorethreshold; swdpresource->alignment = gt_alignment_new(); swdpresource->swcol = NULL; swdpresource->swentrycol = NULL; swdpresource->maxedges = NULL; swdpresource->allocatedswcol = 0; swdpresource->allocatedmaxedges = 0; swdpresource->processmatch = processmatch; swdpresource->processmatchinfo = processmatchinfo; swdpresource->dbsubstring = NULL; swdpresource->allocateddbsubstring = 0; return swdpresource; } void gt_freeSWdpresource(SWdpresource *swdpresource) { gt_alignment_delete(swdpresource->alignment); swdpresource->alignment = NULL; gt_free(swdpresource->swcol); gt_free(swdpresource->swentrycol); gt_free(swdpresource->maxedges); gt_free(swdpresource->dbsubstring); swdpresource->allocatedswcol = 0; swdpresource->allocatedmaxedges = 0; gt_free(swdpresource); } genometools-1.5.1/src/match/idxlocalisw.h000066400000000000000000000040751211610345200204300ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef IDXLOCALISW_H #define IDXLOCALISW_H #include #include "core/encseq.h" #include "procmatch.h" typedef long Scoretype; typedef struct { Scoretype matchscore, /* must be positive */ mismatchscore,/* must be negative */ gapstart, /* must be negative */ gapextend; /* must be negative */ } Scorevalues; #define REPLACEMENTSCORE(SV,A,B) (((A) != (B) || ISSPECIAL(A))\ ? (SV)->mismatchscore\ : (SV)->matchscore) typedef struct SWdpresource SWdpresource; SWdpresource *gt_newSWdpresource(Scoretype matchscore, Scoretype mismatchscore, Scoretype gapextend, unsigned long scorethreshold, bool showalignment, ProcessIdxMatch processmatch, void *processmatchinfo); void gt_multiapplysmithwaterman(SWdpresource *dpresource, const GtEncseq *encseq, const GtUchar *query, unsigned long querylen); void gt_freeSWdpresource(SWdpresource *swdpresource); #endif genometools-1.5.1/src/match/index_options.c000066400000000000000000000547471211610345200207760ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2012 Dirk Willrodt Copyright (c) 2007-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include "core/basename_api.h" #include "core/encseq_options.h" #include "core/error.h" #include "core/grep_api.h" #include "core/logger.h" #include "core/ma_api.h" #include "core/option_api.h" #include "core/spacecalc.h" #include "core/str.h" #include "core/str_array.h" #include "core/unused_api.h" #include "core/versionfunc.h" #ifndef S_SPLINT_S /* splint reports too many errors for the following */ #include "match/eis-bwtseq-param.h" #endif #include "match/index_options.h" typedef enum { GT_INDEX_OPTIONS_UNDEFINED, GT_INDEX_OPTIONS_ESA, GT_INDEX_OPTIONS_PACKED } GtIndexOptionsIndexType; struct GtIndexOptions { unsigned int numofparts, prefixlength; unsigned long maximumspace; GtStrArray *algbounds; GtReadmode readmode; bool outsuftab, outlcptab, outbwttab, outbcktab, outkystab, outkyssort, lcpdist, swallow_tail; GtStr *kysargumentstring, *indexname, *dir, *memlimit; Sfxstrategy sfxstrategy; GtEncseqOptions *encopts; GtIndexOptionsIndexType type; GtOption *option, *optionoutsuftab, *optionoutlcptab, *optionoutbwttab, *optionoutbcktab, *optionprefixlength, *optioncmpcharbychar, *optionnoshortreadsort, *optionspmopt, *optionstorespecialcodes, *optionmaxwidthrealmedian, *optionalgbounds, *optionparts, *optionmemlimit, *optiondifferencecover, *optionuserdefinedsortmaxdepth, *optionkys; #ifndef S_SPLINT_S /* splint reports too many errors for the following and so we exclude it */ struct bwtOptions bwtIdxParams; #endif }; static GtIndexOptions* gt_index_options_new(void) { GtIndexOptions *oi = gt_malloc(sizeof *oi); oi->algbounds = gt_str_array_new(); oi->dir = gt_str_new_cstr("fwd"); oi->indexname = NULL; oi->kysargumentstring = gt_str_new(); oi->lcpdist = false; oi->maximumspace = 0UL; /* in bytes */ oi->memlimit = gt_str_new(); oi->numofparts = 1U; oi->option = NULL; oi->optionalgbounds = NULL; oi->optioncmpcharbychar = NULL; oi->optiondifferencecover = NULL; oi->optionmaxwidthrealmedian = NULL; oi->optionmemlimit = NULL; oi->optionoutbcktab = NULL; oi->optionoutbwttab = NULL; oi->optionoutlcptab = NULL; oi->optionoutsuftab = NULL; oi->optionparts = NULL; oi->optionprefixlength = NULL; oi->optionspmopt = NULL; oi->optionstorespecialcodes = NULL; oi->outbcktab = false; oi->outbwttab = false; oi->outkyssort = false; oi->outkystab = false; oi->outlcptab = false; oi->outsuftab = false; /* only defined for GT_INDEX_OPTIONS_ESA */ oi->prefixlength = GT_PREFIXLENGTH_AUTOMATIC; oi->swallow_tail = false; oi->type = GT_INDEX_OPTIONS_UNDEFINED; return oi; } #define GT_IDXOPTS_READMAXBOUND(COMP,IDX)\ if (!haserr)\ {\ arg = gt_str_array_get(algbounds, IDX);\ if (sscanf(arg,"%ld", &readint) != 1 || readint <= 0)\ {\ gt_error_set(err,"option -algbds: all arguments must be positive " \ "numbers");\ haserr = true;\ }\ sfxstrategy->COMP = (unsigned long) readint;\ } int gt_parse_algbounds(Sfxstrategy *sfxstrategy, const GtStrArray *algbounds, GtError *err) { bool haserr = false; const char *arg; long readint; if (gt_str_array_size(algbounds) != 3UL) { gt_error_set(err,"option -algbds must have exactly 3 arguments"); haserr = true; } GT_IDXOPTS_READMAXBOUND(maxinsertionsort, 0); GT_IDXOPTS_READMAXBOUND(maxbltriesort, 1UL); if (sfxstrategy->maxinsertionsort > sfxstrategy->maxbltriesort) { gt_error_set(err,"first argument of option -algbds must not be larger " "than second argument"); haserr = true; } GT_IDXOPTS_READMAXBOUND(maxcountingsort, 2UL); if (sfxstrategy->maxbltriesort > sfxstrategy->maxcountingsort) { gt_error_set(err,"second argument of option -algbds must not be larger " "than third argument"); haserr = true; } return haserr ? -1 : 0; } static int gt_index_options_check_set_create_opts(void *oip, GtError *err) { int had_err = 0; GtIndexOptions *oi = (GtIndexOptions*) oip; gt_assert(oi != NULL && oi->type != GT_INDEX_OPTIONS_UNDEFINED); gt_error_check(err); /* readmode needs to be initialized to fwd */ oi->readmode = (GtReadmode) 0; if (!had_err) { if (gt_option_is_set(oi->optionalgbounds)) { if (gt_parse_algbounds(&oi->sfxstrategy,oi->algbounds,err) != 0) { had_err = -1; } } else { oi->sfxstrategy.maxinsertionsort = MAXINSERTIONSORTDEFAULT; oi->sfxstrategy.maxbltriesort = MAXBLTRIESORTDEFAULT; oi->sfxstrategy.maxcountingsort = MAXCOUNTINGSORTDEFAULT; } } if (!had_err && oi->sfxstrategy.kmerswithencseqreader && oi->sfxstrategy.spmopt_minlength > 0) { gt_error_set(err,"options -spmopt and -kmerswithencseqreader are " "not compatible"); had_err = -1; } if (!had_err && oi->optionmemlimit != NULL && gt_option_is_set(oi->optionmemlimit)) { had_err = gt_option_parse_spacespec(&oi->maximumspace,"memlimit", oi->memlimit,err); } if (!had_err) { if (oi->sfxstrategy.maxinsertionsort > oi->sfxstrategy.maxbltriesort) { gt_error_set(err,"first argument of option -algbds must not be larger " "than second argument"); had_err = -1; } else { if (oi->sfxstrategy.maxbltriesort > oi->sfxstrategy.maxcountingsort) { gt_error_set(err,"second argument of option -algbds must not be larger " "than third argument"); had_err = -1; } } } return had_err; } static int gt_index_options_check_set_out_opts(void *oip, GtError *err) { int had_err = 0; GtIndexOptions *oi = (GtIndexOptions*) oip; gt_assert(oi != NULL && oi->type != GT_INDEX_OPTIONS_UNDEFINED); gt_error_check(err); if (!had_err) { int retval; retval = gt_readmode_parse(gt_str_get(oi->dir), err); if (retval < 0) { had_err = -1; } else { oi->readmode = (GtReadmode) retval; if (oi->type == GT_INDEX_OPTIONS_PACKED && (oi->readmode == GT_READMODE_COMPL || oi->readmode == GT_READMODE_REVCOMPL)) { gt_error_set(err,"construction of packed index not possible for " "complemented and for reverse complemented sequences"); had_err = -1; } } } if (!had_err && oi->type == GT_INDEX_OPTIONS_PACKED) { #ifndef S_SPLINT_S gt_computePackedIndexDefaults(&oi->bwtIdxParams, BWTBaseFeatures); #endif } if (!had_err && gt_option_is_set(oi->optionkys)) { oi->outkystab = true; if (strcmp(gt_str_get(oi->kysargumentstring), "sort") == 0) { oi->outkyssort = true; } else { if (strcmp(gt_str_get(oi->kysargumentstring),"nosort") != 0) { gt_error_set(err,"illegal argument to option -kys: either use no " "argument or argument \"sort\""); had_err = -1; } } } return had_err; } static GtIndexOptions* gt_index_options_register_generic_output(GtOptionParser *op, GtIndexOptions *idxo, GtStr *indexname, GtEncseqOptions *encopts) { gt_assert(idxo != NULL); gt_assert(op != NULL && idxo->type != GT_INDEX_OPTIONS_UNDEFINED && encopts != NULL); idxo->encopts = encopts; idxo->indexname = indexname != NULL ? gt_str_ref(indexname) : NULL; idxo->optionkys = gt_option_new_string("kys", "output/sort according to keys of the form " "|key| in fasta header", idxo->kysargumentstring, "nosort"); gt_option_argument_is_optional(idxo->optionkys); gt_option_imply(idxo->optionkys, gt_encseq_options_sds_option(idxo->encopts)); gt_option_parser_add_option(op, idxo->optionkys); gt_encseq_options_add_readmode_option(op, idxo->dir); if (idxo->type == GT_INDEX_OPTIONS_ESA) { idxo->optionoutsuftab = gt_option_new_bool("suf", "output suffix array (suftab) to file", &idxo->outsuftab, false); gt_option_parser_add_option(op, idxo->optionoutsuftab); idxo->optionoutlcptab = gt_option_new_bool("lcp", "output lcp table (lcptab) to file", &idxo->outlcptab, false); gt_option_parser_add_option(op, idxo->optionoutlcptab); idxo->option = gt_option_new_bool("lcpdist", "output distributions of values in lcptab", &idxo->lcpdist, false); gt_option_is_extended_option(idxo->option); gt_option_imply(idxo->option, idxo->optionoutlcptab); gt_option_parser_add_option(op, idxo->option); idxo->option = gt_option_new_bool("swallow-tail", "swallow the tail of the suffix array and lcptab", &idxo->swallow_tail, false); gt_option_is_development_option(idxo->option); gt_option_parser_add_option(op, idxo->option); idxo->optionoutbwttab = gt_option_new_bool("bwt", "output Burrows-Wheeler Transformation " "(bwttab) to file", &idxo->outbwttab, false); gt_option_exclude(idxo->optionspmopt, idxo->optionoutbwttab); gt_option_parser_add_option(op, idxo->optionoutbwttab); idxo->optionoutbcktab = gt_option_new_bool("bck", "output bucket table to file", &idxo->outbcktab, false); gt_option_parser_add_option(op, idxo->optionoutbcktab); } else { idxo->optionoutsuftab = idxo->optionoutlcptab = idxo->optionoutbwttab = NULL; idxo->sfxstrategy.spmopt_minlength = 0; #ifndef S_SPLINT_S gt_registerPackedIndexOptions(op, &idxo->bwtIdxParams, BWTDEFOPT_CONSTRUCTION, idxo->indexname); #endif } gt_option_parser_register_hook(op, gt_index_options_check_set_out_opts, idxo); return idxo; } static GtIndexOptions* gt_index_options_register_generic_create( GtOptionParser *op, GtIndexOptionsIndexType t) { GtIndexOptions *idxo; gt_assert(op != NULL && t != GT_INDEX_OPTIONS_UNDEFINED); idxo = gt_index_options_new(); idxo->type = t; idxo->optionprefixlength = gt_option_new_uint_min("pl", "specify prefix length for bucket sort\n" "recommendation: use without argument;\n" "then a reasonable prefix length is " "automatically determined.", &idxo->prefixlength, GT_PREFIXLENGTH_AUTOMATIC, 1U); gt_option_argument_is_optional(idxo->optionprefixlength); gt_option_parser_add_option(op, idxo->optionprefixlength); idxo->optionuserdefinedsortmaxdepth = gt_option_new_uint_min("sortmaxdepth","sort only up to the given depth.", &idxo->sfxstrategy.userdefinedsortmaxdepth, 0, 1U); gt_option_parser_add_option(op, idxo->optionuserdefinedsortmaxdepth); gt_option_is_development_option(idxo->optionuserdefinedsortmaxdepth); idxo->optiondifferencecover = gt_option_new_uint_min("dc", "specify difference cover value", &idxo->sfxstrategy.differencecover, 0, 4U); gt_option_parser_add_option(op, idxo->optiondifferencecover); gt_option_exclude(idxo->optionuserdefinedsortmaxdepth, idxo->optiondifferencecover); idxo->optioncmpcharbychar = gt_option_new_bool("cmpcharbychar", "compare suffixes character " "by character", &idxo->sfxstrategy.cmpcharbychar, false); gt_option_is_development_option(idxo->optioncmpcharbychar); gt_option_parser_add_option(op, idxo->optioncmpcharbychar); idxo->optionnoshortreadsort = gt_option_new_bool("noshortreadsort", "do not use short read sort", &idxo->sfxstrategy.noshortreadsort, false); gt_option_is_development_option(idxo->optionnoshortreadsort); gt_option_parser_add_option(op, idxo->optionnoshortreadsort); idxo->optionmaxwidthrealmedian = gt_option_new_ulong("maxwidthrealmedian", "compute real median for " "intervals of at most the " "given widthprefixes", &idxo->sfxstrategy. maxwidthrealmedian, 1UL); gt_option_is_development_option(idxo->optionmaxwidthrealmedian); gt_option_parser_add_option(op, idxo->optionmaxwidthrealmedian); idxo->optionalgbounds = gt_option_new_string_array("algbds", "length boundaries for the different " "algorithms to sort buckets of suffixes\n" "first number: maxbound for insertion sort\n" "second number: maxbound for blindtrie sort\n" "third number: maxbound for counting sort", idxo->algbounds); gt_option_is_development_option(idxo->optionalgbounds); gt_option_parser_add_option(op, idxo->optionalgbounds); idxo->optionstorespecialcodes = gt_option_new_bool("storespecialcodes", "store special codes (this may speed up the program)", &idxo->sfxstrategy.storespecialcodes,false); gt_option_is_development_option(idxo->optionstorespecialcodes); gt_option_parser_add_option(op, idxo->optionstorespecialcodes); idxo->optionparts = gt_option_new_uint_max("parts", "specify number of parts in which the index " "construction is performed", &idxo->numofparts, 1U, (unsigned) ((1 << 22) - 1)); gt_option_is_development_option(idxo->optionparts); gt_option_parser_add_option(op, idxo->optionparts); if (idxo->type == GT_INDEX_OPTIONS_ESA) { idxo->optionspmopt = gt_option_new_uint_min("spmopt", "optimize esa-construction for " "suffix-prefix matching", &idxo->sfxstrategy.spmopt_minlength, 0,1U); gt_option_parser_add_option(op, idxo->optionspmopt); gt_option_exclude(idxo->optionspmopt, idxo->optiondifferencecover); idxo->optionmemlimit = gt_option_new_string("memlimit", "specify maximal amount of memory to be used during " "index construction (in bytes, the keywords 'MB' " "and 'GB' are allowed)", idxo->memlimit, NULL); gt_option_parser_add_option(op, idxo->optionmemlimit); gt_option_exclude(idxo->optionmemlimit, idxo->optionparts); } idxo->option = gt_option_new_bool("iterscan", "use iteratorbased-kmer scanning", &idxo->sfxstrategy.iteratorbasedkmerscanning, false); gt_option_is_development_option(idxo->option); gt_option_parser_add_option(op, idxo->option); idxo->option = gt_option_new_bool("samplewithprefixlengthnull", "sort sample with prefixlength=0", &idxo->sfxstrategy.samplewithprefixlengthnull, false); gt_option_is_development_option(idxo->option); gt_option_parser_add_option(op, idxo->option); idxo->option = gt_option_new_bool("suftabuint", "use uint32_t for suftab", &idxo->sfxstrategy.suftabuint, false); gt_option_is_development_option(idxo->option); gt_option_parser_add_option(op, idxo->option); idxo->option = gt_option_new_bool("onlybucketinsertion", "perform only bucket insertion", &idxo->sfxstrategy.onlybucketinsertion, false); gt_option_is_development_option(idxo->option); gt_option_parser_add_option(op, idxo->option); idxo->option = gt_option_new_bool("kmerswithencseqreader", "always perform kmerscanning with encseq-reader", &idxo->sfxstrategy.kmerswithencseqreader, false); gt_option_is_development_option(idxo->option); gt_option_parser_add_option(op, idxo->option); idxo->option = gt_option_new_bool("dccheck", "check intermediate results in difference cover", &idxo->sfxstrategy.dccheck, false); gt_option_is_development_option(idxo->option); gt_option_parser_add_option(op, idxo->option); idxo->option = gt_option_new_bool("withradixsort", "use radixsort to sort the buckets", &idxo->sfxstrategy.withradixsort, false); gt_option_is_development_option(idxo->option); gt_option_parser_add_option(op, idxo->option); gt_option_parser_register_hook(op, gt_index_options_check_set_create_opts, idxo); return idxo; } GtIndexOptions* gt_index_options_register_esa(GtOptionParser *op, GtEncseqOptions *encopts) { GtIndexOptions *idxo; gt_assert(op != NULL); idxo = gt_index_options_register_generic_create(op, GT_INDEX_OPTIONS_ESA); return gt_index_options_register_generic_output(op, idxo, NULL, encopts); } GtIndexOptions* gt_index_options_register_esa_noout(GtOptionParser *op) { gt_assert(op != NULL); return gt_index_options_register_generic_create(op, GT_INDEX_OPTIONS_ESA); } GtIndexOptions* gt_index_options_register_packedidx(GtOptionParser *op, GtStr *indexname, GtEncseqOptions *encopts) { GtIndexOptions *idxo; gt_assert(op != NULL); idxo = gt_index_options_register_generic_create(op, GT_INDEX_OPTIONS_PACKED); return gt_index_options_register_generic_output(op, idxo, indexname, encopts); } void gt_index_options_delete(GtIndexOptions *oi) { if (oi == NULL) return; gt_str_delete(oi->kysargumentstring); gt_str_delete(oi->indexname); gt_str_delete(oi->dir); gt_str_delete(oi->memlimit); gt_str_array_delete(oi->algbounds); gt_free(oi); } /* XXX: clean this up */ #ifndef GT_INDEX_OPTS_GETTER_DEFS_DEFINED #define GT_INDEX_OPTS_GETTER_DEF_OPT(VARNAME) \ GtOption* gt_index_options_##VARNAME##_option(GtIndexOptions *i) \ { \ gt_assert(i != NULL); \ return i->option##VARNAME; \ } #define GT_INDEX_OPTS_GETTER_DEF_VAL(VARNAME, TYPE) \ TYPE gt_index_options_##VARNAME##_value(GtIndexOptions *i) \ { \ gt_assert(i != NULL); \ return i->VARNAME; \ } #define GT_INDEX_OPTS_GETTER_DEF(VARNAME,TYPE) \ GT_INDEX_OPTS_GETTER_DEF_OPT(VARNAME) \ GT_INDEX_OPTS_GETTER_DEF_VAL(VARNAME, TYPE) #define GT_INDEX_OPTS_GETTER_DEFS_DEFINED #endif /* these are available as options and values */ GT_INDEX_OPTS_GETTER_DEF(algbounds, GtStrArray*); GT_INDEX_OPTS_GETTER_DEF(outbcktab, bool); GT_INDEX_OPTS_GETTER_DEF(outbwttab, bool); GT_INDEX_OPTS_GETTER_DEF(outlcptab, bool); GT_INDEX_OPTS_GETTER_DEF(outsuftab, bool); GT_INDEX_OPTS_GETTER_DEF(prefixlength, unsigned int); GT_INDEX_OPTS_GETTER_DEF_OPT(spmopt); /* these are available as values only, set _after_ option processing */ GT_INDEX_OPTS_GETTER_DEF_VAL(lcpdist, bool); GT_INDEX_OPTS_GETTER_DEF_VAL(maximumspace, unsigned long); GT_INDEX_OPTS_GETTER_DEF_VAL(numofparts, unsigned int); GT_INDEX_OPTS_GETTER_DEF_VAL(outkyssort, bool); GT_INDEX_OPTS_GETTER_DEF_VAL(outkystab, bool); GT_INDEX_OPTS_GETTER_DEF_VAL(readmode, GtReadmode); GT_INDEX_OPTS_GETTER_DEF_VAL(sfxstrategy, Sfxstrategy); GT_INDEX_OPTS_GETTER_DEF_VAL(swallow_tail, bool); #ifndef S_SPLINT_S GT_INDEX_OPTS_GETTER_DEF_VAL(bwtIdxParams, struct bwtOptions); #endif genometools-1.5.1/src/match/index_options.h000066400000000000000000000064061211610345200207700ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHAciOEVER RESULTING FROM LOSS OF USE, DATA OR PROFIci, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef INDEX_OPTIONS_H #define INDEX_OPTIONS_H #include "core/encseq_options.h" #include "core/option_api.h" #include "core/readmode.h" #include "match/sfx-strategy.h" typedef struct GtIndexOptions GtIndexOptions; #define GT_PREFIXLENGTH_AUTOMATIC 0 #define GT_MAXDEPTH_AUTOMATIC 0 /* This module encapsulates the registration of options for index generation. */ GtIndexOptions* gt_index_options_register_esa(GtOptionParser *op, GtEncseqOptions *encopts); /* this will only options concerning the building of the index, used for genomediff, for example, where no output is produced. */ GtIndexOptions* gt_index_options_register_esa_noout(GtOptionParser *op); GtIndexOptions* gt_index_options_register_packedidx(GtOptionParser *op, GtStr *indexname, GtEncseqOptions *encopts); void gt_index_options_delete(GtIndexOptions *oi); int gt_parse_algbounds(Sfxstrategy *sfxstrategy, const GtStrArray *algbounds, GtError *err); /* XXX: clean this up */ #ifndef GT_INDEX_OPTS_GETTER_DECLS_DEFINED #define GT_INDEX_OPTS_GETTER_DECL_OPT(VARNAME) \ GtOption* gt_index_options_##VARNAME##_option(GtIndexOptions *i); #define GT_INDEX_OPTS_GETTER_DECL_VAL(VARNAME, TYPE) \ TYPE gt_index_options_##VARNAME##_value(GtIndexOptions *i); #define GT_INDEX_OPTS_GETTER_DECL(VARNAME,TYPE) \ GT_INDEX_OPTS_GETTER_DECL_OPT(VARNAME) \ GT_INDEX_OPTS_GETTER_DECL_VAL(VARNAME, TYPE) #define GT_INDEX_OPTS_GETTER_DECLS_DEFINED #endif GT_INDEX_OPTS_GETTER_DECL(algbounds, GtStrArray*); GT_INDEX_OPTS_GETTER_DECL(outbcktab, bool); GT_INDEX_OPTS_GETTER_DECL(outbwttab, bool); GT_INDEX_OPTS_GETTER_DECL(outkystab, bool); GT_INDEX_OPTS_GETTER_DECL(outlcptab, bool); GT_INDEX_OPTS_GETTER_DECL(outsuftab, bool); GT_INDEX_OPTS_GETTER_DECL(prefixlength, unsigned int); GT_INDEX_OPTS_GETTER_DECL_OPT(spmopt); GT_INDEX_OPTS_GETTER_DECL_VAL(bwtIdxParams, struct bwtOptions); GT_INDEX_OPTS_GETTER_DECL_VAL(lcpdist, bool); GT_INDEX_OPTS_GETTER_DECL_VAL(maximumspace, unsigned long); GT_INDEX_OPTS_GETTER_DECL_VAL(numofparts, unsigned int); GT_INDEX_OPTS_GETTER_DECL_VAL(outkyssort, bool); GT_INDEX_OPTS_GETTER_DECL_VAL(readmode, GtReadmode); GT_INDEX_OPTS_GETTER_DECL_VAL(sfxstrategy, Sfxstrategy); GT_INDEX_OPTS_GETTER_DECL_VAL(swallow_tail, bool); #endif genometools-1.5.1/src/match/initbasepower.c000066400000000000000000000061401211610345200207470ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/array2dim_api.h" #include "core/assert_api.h" #include "core/codetype.h" #include "core/unused_api.h" unsigned int gt_maxbasepower(unsigned int numofchars) { GtCodetype minfailure, thepower = (GtCodetype) 1; unsigned int i; minfailure = (~(GtCodetype) 0)/(GtCodetype) numofchars; for (i=0; thepower < minfailure; i++) { thepower *= numofchars; } return i; } GtCodetype *gt_initbasepower(unsigned int numofchars,unsigned int prefixlength) { GtCodetype thepower = (GtCodetype) 1, *basepower; unsigned int i; basepower = gt_malloc(sizeof *basepower * (prefixlength+1)); for (i=0; /* Nothing */; i++) { basepower[i] = thepower; if (i == prefixlength) { break; } gt_assert(thepower < ((~(GtCodetype) 0)/(GtCodetype) numofchars)); thepower *= numofchars; } return basepower; } GtCodetype *gt_filllargestchartable(unsigned int numofchars, unsigned int kmersize) { GtCodetype code, *ptr, *filltable; filltable = gt_malloc(sizeof *filltable * kmersize); code = (GtCodetype) numofchars; for (ptr = filltable + kmersize - 1; ptr >= filltable; ptr--) { *ptr = code-1; code *= numofchars; } return filltable; } GtCodetype *gt_initfilltable(unsigned int numofchars,unsigned int prefixlength) { unsigned int i; GtCodetype *filltable, *basepower; basepower = gt_initbasepower(numofchars,prefixlength); filltable = gt_malloc(sizeof *filltable * prefixlength); for (i=0; i=0; offset--) { mmptr = multimappower[offset]; mmptr[0] = 0; for (mapindex = 1U; mapindex < numofchars; mapindex++) { mmptr[mapindex] = mmptr[mapindex-1] + thepower; } thepower *= numofchars; } return multimappower; } void gt_multimappower_delete(GtCodetype **multimappower) { if (multimappower != NULL) { gt_array2dim_delete(multimappower); } } genometools-1.5.1/src/match/initbasepower.h000066400000000000000000000026131211610345200207550ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef INITBASEPOWER_H #define INITBASEPOWER_H #include "core/codetype.h" unsigned int gt_maxbasepower(unsigned int numofchars); GtCodetype *gt_initbasepower(unsigned int numofchars,unsigned int prefixlength); GtCodetype *gt_filllargestchartable(unsigned int numofchars, unsigned int kmersize); GtCodetype *gt_initfilltable(unsigned int numofchars,unsigned int prefixlength); GtCodetype **gt_initmultimappower(unsigned int numofchars,unsigned int qvalue); void gt_multimappower_delete(GtCodetype **multimappower); #endif genometools-1.5.1/src/match/initeqsvec.c000066400000000000000000000045231211610345200202510ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/assert_api.h" #include "core/chardef.h" #include "initeqsvec.h" void gt_initeqsvector(unsigned long *eqsvector, unsigned long eqslen, const GtUchar *pattern, unsigned long patternlength) { unsigned long *eptr, shiftmask; const GtUchar *pptr; gt_assert(patternlength <= (unsigned long) (CHAR_BIT * sizeof (unsigned long))); for (eptr = eqsvector; eptr < eqsvector + eqslen; eptr++) { *eptr = 0; } for (pptr = pattern, shiftmask = 1UL; pptr < pattern + patternlength && shiftmask != 0; pptr++, shiftmask <<= 1) { gt_assert(*pptr != (GtUchar) SEPARATOR); if (*pptr != (GtUchar) WILDCARD) { eqsvector[(unsigned long) *pptr] |= shiftmask; } } } void gt_initeqsvectorrev(unsigned long *eqsvectorrev, unsigned long eqslen, const GtUchar *pattern, unsigned long patternlength) { unsigned long *eptr, shiftmask; const GtUchar *pptr; gt_assert(patternlength <= (unsigned long) (CHAR_BIT * sizeof (unsigned long))); for (eptr = eqsvectorrev; eptr < eqsvectorrev + eqslen; eptr++) { *eptr = 0; } for (pptr = pattern+patternlength-1, shiftmask = 1UL; pptr >= pattern && shiftmask != 0; pptr--, shiftmask <<= 1) { gt_assert(*pptr != (GtUchar) SEPARATOR); if (*pptr != (GtUchar) WILDCARD) { eqsvectorrev[(unsigned long) *pptr] |= shiftmask; } } } genometools-1.5.1/src/match/initeqsvec.h000066400000000000000000000024371211610345200202600ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef INITEQSVEC_H #define INITEQSVEC_H #include "core/types_api.h" void gt_initeqsvector(unsigned long *eqsvector, unsigned long eqslen, const GtUchar *pattern, unsigned long patternlength); void gt_initeqsvectorrev(unsigned long *eqsvectorrev, unsigned long eqslen, const GtUchar *pattern, unsigned long patternlength); #endif genometools-1.5.1/src/match/intcode-def.h000066400000000000000000000023441211610345200202640ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef INTCODE_DEF_H #define INTCODE_DEF_H #define PREFIXLENBITS 4 #define CODEBITS (32-PREFIXLENBITS) #define MAXPREFIXLENGTH (CODEBITS>>1) #define MAXCODEVALUE ((1U << CODEBITS) - 1) typedef struct { unsigned int maxprefixindex:PREFIXLENBITS; unsigned int code:CODEBITS; unsigned long position; /* get rid of this by using information from encseq */ } Codeatposition; #endif genometools-1.5.1/src/match/iter-window.c000066400000000000000000000142401211610345200203440ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma_api.h" #include "core/encseq.h" #include "iter-window.h" struct Windowiterator { GtUchar *buffer; unsigned long firstpos, bufsize, windowsize; unsigned long currentpos, endpos; const GtEncseq *encseq; GtEncseqReader *esr; }; Windowiterator *gt_windowiterator_new(const GtEncseq *encseq, unsigned long windowsize, unsigned long startpos, unsigned long endpos) { Windowiterator *wit; gt_assert(encseq != NULL); gt_assert(endpos <= gt_encseq_total_length(encseq)); wit = gt_malloc(sizeof (*wit)); wit->buffer = gt_malloc(sizeof (GtUchar) * windowsize); wit->firstpos = wit->bufsize = 0; wit->windowsize = windowsize; wit->currentpos = startpos; wit->endpos = endpos; wit->esr = gt_encseq_create_reader_with_readmode(encseq, GT_READMODE_FORWARD, startpos); wit->encseq = encseq; return wit; } void gt_windowiterator_delete(Windowiterator *wit) { gt_free(wit->buffer); gt_free(wit); } const GtUchar *gt_windowiterator_next(unsigned long *currentpos, unsigned long *firstpos, Windowiterator *wit) { GtUchar currentchar; while (wit->currentpos < wit->endpos) { currentchar = gt_encseq_reader_next_encoded_char(wit->esr); if (ISSPECIAL(currentchar)) { wit->bufsize = wit->firstpos = 0; } else { if (wit->bufsize < wit->windowsize) { wit->buffer[wit->bufsize++] = currentchar; } else { wit->buffer[wit->firstpos++] = currentchar; if (wit->firstpos == wit->windowsize) { wit->firstpos = 0; } } } if (wit->bufsize == wit->windowsize) { gt_assert(wit->currentpos >= (unsigned long) (wit->windowsize-1)); gt_assert(wit->firstpos < wit->windowsize); *currentpos = wit->currentpos++; *firstpos = wit->firstpos; return wit->buffer; } wit->currentpos++; } return NULL; } #ifdef WITHWINDOWCHECK static void checkcurrentwindow(const GtEncseq *encseq, const GtUchar *buffer, unsigned long windowsize, unsigned long firstpos, unsigned long currentpos) { unsigned long idx, bufpos, bfbufpos; GtUchar cc1, cc2; bufpos = firstpos; for (idx= 0; idx Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef ITER_WINDOW_H #define ITER_WINDOW_H #include "core/encseq.h" typedef struct Windowiterator Windowiterator; Windowiterator *gt_windowiterator_new(const GtEncseq *encseq, unsigned long windowsize, unsigned long startpos, unsigned long endpos); void gt_windowiterator_delete(Windowiterator *wit); const GtUchar *gt_windowiterator_next(unsigned long *currentpos, unsigned long *firstpos, Windowiterator *wit); #endif genometools-1.5.1/src/match/kmer2string.c000066400000000000000000000025431211610345200203460ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/codetype.h" void gt_fromkmercode2string(char *buffer, GtCodetype code, unsigned int numofchars, unsigned int kmersize, const char *characters) { int i; unsigned int cc; GtCodetype tmpcode = code; buffer[kmersize] = '\0'; for (i=(int) (kmersize-1); i>=0; i--) { cc = (unsigned int) (tmpcode % numofchars); buffer[i] = (char) characters[cc]; tmpcode = (tmpcode - cc) / numofchars; } } genometools-1.5.1/src/match/kmer2string.h000066400000000000000000000022161211610345200203500ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef KMER2STRING_H #define KMER2STRING_H #include "core/codetype.h" void gt_fromkmercode2string(char *buffer, GtCodetype code, unsigned int numofchars, unsigned int kmersize, const char *characters); #endif genometools-1.5.1/src/match/kmercodes.h000066400000000000000000000351631211610345200200640ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef KMERCODES_H #define KMERCODES_H #include "core/intbits.h" #include "core/codetype.h" #include "core/divmodmul.h" static inline GtCodetype gt_kmercode_at_position( const GtTwobitencoding *twobitencoding, unsigned long pos, unsigned int kmersize) { const unsigned int unitoffset = (unsigned int) GT_MODBYUNITSIN2BITENC(pos); const unsigned long unitindex = GT_DIVBYUNITSIN2BITENC(pos); const GtCodetype maskright = GT_MASKRIGHT(kmersize); if (unitoffset <= (unsigned int) GT_UNITSIN2BITENC - kmersize) { return (GtCodetype) (twobitencoding[unitindex] >> GT_MULT2(GT_UNITSIN2BITENC - kmersize - unitoffset)) & maskright; } else { unsigned int shiftleft = GT_MULT2(unitoffset+kmersize-GT_UNITSIN2BITENC); return (GtCodetype) ((twobitencoding[unitindex] << shiftleft) | (twobitencoding[unitindex+1] >> (GT_MULT2(GT_UNITSIN2BITENC) - shiftleft))) & maskright; } } static inline GtCodetype gt_kmercode_complement(GtCodetype kmer, GtCodetype maskright) { return kmer ^ maskright; } #define GT_SWAPBITPAIRS(KMER,L1,L2,D) (((KMER) & (3UL << L1)) >> D) |\ (((KMER) & (3UL << L2)) << D) static inline GtCodetype gt_kmercode_reverse(GtCodetype kmer, unsigned int kmersize) { switch (kmersize) { case 2: return GT_SWAPBITPAIRS(kmer,2,0,2); case 3: return GT_SWAPBITPAIRS(kmer,4,0,4) | (kmer & (3U << 2)); case 4: /* 4 shifts, 4 &, 2 |, 1 assignment = 11 ops */ kmer = (kmer & 0xF0) >> 4 | (kmer & 0x0F) << 4; return (kmer & 0xCC) >> 2 | (kmer & 0x33) << 2; case 5: return GT_SWAPBITPAIRS(kmer,8,0,8) | GT_SWAPBITPAIRS(kmer,6,2,4) | (kmer & (3U << 4)); case 6: return GT_SWAPBITPAIRS(kmer,10,0,10) | GT_SWAPBITPAIRS(kmer,8,2,6) | GT_SWAPBITPAIRS(kmer,6,4,2); case 7: return GT_SWAPBITPAIRS(kmer,12,0,12) | GT_SWAPBITPAIRS(kmer,10,2,8) | GT_SWAPBITPAIRS(kmer,8,4,4) | (kmer & (3U << 6)); case 8: /* 6 shifts, 6 &, 3 |, 2 assignments = 17 */ kmer = (kmer & 0xFF00) >> 8 | (kmer & 0xFF) << 8; kmer = (kmer & 0XF0F0) >> 4 | (kmer & 0x0F0F) << 4; return (kmer & 0xCCCC) >> 2 | (kmer & 0x3333) << 2; case 9: return GT_SWAPBITPAIRS(kmer,16,0,16) | GT_SWAPBITPAIRS(kmer,14,2,12) | GT_SWAPBITPAIRS(kmer,12,4,8) | GT_SWAPBITPAIRS(kmer,10,6,4) | (kmer & (3U << 8)); case 10: return GT_SWAPBITPAIRS(kmer,18,0,18) | GT_SWAPBITPAIRS(kmer,16,2,14) | GT_SWAPBITPAIRS(kmer,14,4,10) | GT_SWAPBITPAIRS(kmer,12,6,6) | GT_SWAPBITPAIRS(kmer,10,8,2); case 11: return GT_SWAPBITPAIRS(kmer,20,0,20) | GT_SWAPBITPAIRS(kmer,18,2,16) | GT_SWAPBITPAIRS(kmer,16,4,12) | GT_SWAPBITPAIRS(kmer,14,6,8) | GT_SWAPBITPAIRS(kmer,12,8,4) | (kmer & (3U << 10)); case 12: return GT_SWAPBITPAIRS(kmer,22,0,22) | GT_SWAPBITPAIRS(kmer,20,2,18) | GT_SWAPBITPAIRS(kmer,18,4,14) | GT_SWAPBITPAIRS(kmer,16,6,10) | GT_SWAPBITPAIRS(kmer,14,8,6) | GT_SWAPBITPAIRS(kmer,12,10,2); case 13: return GT_SWAPBITPAIRS(kmer,24,0,24) | GT_SWAPBITPAIRS(kmer,22,2,20) | GT_SWAPBITPAIRS(kmer,20,4,16) | GT_SWAPBITPAIRS(kmer,18,6,12) | GT_SWAPBITPAIRS(kmer,16,8,8) | GT_SWAPBITPAIRS(kmer,14,10,4) | (kmer & (3U << 12)); case 14: return GT_SWAPBITPAIRS(kmer,26,0,26) | GT_SWAPBITPAIRS(kmer,24,2,22) | GT_SWAPBITPAIRS(kmer,22,4,18) | GT_SWAPBITPAIRS(kmer,20,6,14) | GT_SWAPBITPAIRS(kmer,18,8,10) | GT_SWAPBITPAIRS(kmer,16,10,6) | GT_SWAPBITPAIRS(kmer,14,12,2); case 15: return GT_SWAPBITPAIRS(kmer,28,0,28) | GT_SWAPBITPAIRS(kmer,26,2,24) | GT_SWAPBITPAIRS(kmer,24,4,20) | GT_SWAPBITPAIRS(kmer,22,6,16) | GT_SWAPBITPAIRS(kmer,20,8,12) | GT_SWAPBITPAIRS(kmer,18,10,8) | GT_SWAPBITPAIRS(kmer,16,12,4) | (kmer & (3U << 14)); case 16: /* 8 shifts, 8 &, 4 |, 3 assignments = 23 ops */ kmer = (kmer & 0xFFFF0000) >> 16 | (kmer & 0x0000FFFF) << 16; kmer = (kmer & 0xFF00FF00) >> 8 | (kmer & 0x00FF00FF) << 8; kmer = (kmer & 0XF0F0F0F0) >> 4 | (kmer & 0x0F0F0F0F) << 4; return (kmer & 0xCCCCCCCC) >> 2 | (kmer & 0x33333333) << 2; #ifdef _LP64 case 17: return GT_SWAPBITPAIRS(kmer,32,0,32) | GT_SWAPBITPAIRS(kmer,30,2,28) | GT_SWAPBITPAIRS(kmer,28,4,24) | GT_SWAPBITPAIRS(kmer,26,6,20) | GT_SWAPBITPAIRS(kmer,24,8,16) | GT_SWAPBITPAIRS(kmer,22,10,12) | GT_SWAPBITPAIRS(kmer,20,12,8) | GT_SWAPBITPAIRS(kmer,18,14,4) | (kmer & (3U << 16)); case 18: return GT_SWAPBITPAIRS(kmer,34,0,34) | GT_SWAPBITPAIRS(kmer,32,2,30) | GT_SWAPBITPAIRS(kmer,30,4,26) | GT_SWAPBITPAIRS(kmer,28,6,22) | GT_SWAPBITPAIRS(kmer,26,8,18) | GT_SWAPBITPAIRS(kmer,24,10,14) | GT_SWAPBITPAIRS(kmer,22,12,10) | GT_SWAPBITPAIRS(kmer,20,14,6) | GT_SWAPBITPAIRS(kmer,18,16,2); case 19: return GT_SWAPBITPAIRS(kmer,36,0,36) | GT_SWAPBITPAIRS(kmer,34,2,32) | GT_SWAPBITPAIRS(kmer,32,4,28) | GT_SWAPBITPAIRS(kmer,30,6,24) | GT_SWAPBITPAIRS(kmer,28,8,20) | GT_SWAPBITPAIRS(kmer,26,10,16) | GT_SWAPBITPAIRS(kmer,24,12,12) | GT_SWAPBITPAIRS(kmer,22,14,8) | GT_SWAPBITPAIRS(kmer,20,16,4) | (kmer & (3U << 18)); case 20: return GT_SWAPBITPAIRS(kmer,38,0,38) | GT_SWAPBITPAIRS(kmer,36,2,34) | GT_SWAPBITPAIRS(kmer,34,4,30) | GT_SWAPBITPAIRS(kmer,32,6,26) | GT_SWAPBITPAIRS(kmer,30,8,22) | GT_SWAPBITPAIRS(kmer,28,10,18) | GT_SWAPBITPAIRS(kmer,26,12,14) | GT_SWAPBITPAIRS(kmer,24,14,10) | GT_SWAPBITPAIRS(kmer,22,16,6) | GT_SWAPBITPAIRS(kmer,20,18,2); case 21: return GT_SWAPBITPAIRS(kmer,40,0,40) | GT_SWAPBITPAIRS(kmer,38,2,36) | GT_SWAPBITPAIRS(kmer,36,4,32) | GT_SWAPBITPAIRS(kmer,34,6,28) | GT_SWAPBITPAIRS(kmer,32,8,24) | GT_SWAPBITPAIRS(kmer,30,10,20) | GT_SWAPBITPAIRS(kmer,28,12,16) | GT_SWAPBITPAIRS(kmer,26,14,12) | GT_SWAPBITPAIRS(kmer,24,16,8) | GT_SWAPBITPAIRS(kmer,22,18,4) | (kmer & (3U << 20)); case 22: return GT_SWAPBITPAIRS(kmer,42,0,42) | GT_SWAPBITPAIRS(kmer,40,2,38) | GT_SWAPBITPAIRS(kmer,38,4,34) | GT_SWAPBITPAIRS(kmer,36,6,30) | GT_SWAPBITPAIRS(kmer,34,8,26) | GT_SWAPBITPAIRS(kmer,32,10,22) | GT_SWAPBITPAIRS(kmer,30,12,18) | GT_SWAPBITPAIRS(kmer,28,14,14) | GT_SWAPBITPAIRS(kmer,26,16,10) | GT_SWAPBITPAIRS(kmer,24,18,6) | GT_SWAPBITPAIRS(kmer,22,20,2); case 23: return GT_SWAPBITPAIRS(kmer,44,0,44) | GT_SWAPBITPAIRS(kmer,42,2,40) | GT_SWAPBITPAIRS(kmer,40,4,36) | GT_SWAPBITPAIRS(kmer,38,6,32) | GT_SWAPBITPAIRS(kmer,36,8,28) | GT_SWAPBITPAIRS(kmer,34,10,24) | GT_SWAPBITPAIRS(kmer,32,12,20) | GT_SWAPBITPAIRS(kmer,30,14,16) | GT_SWAPBITPAIRS(kmer,28,16,12) | GT_SWAPBITPAIRS(kmer,26,18,8) | GT_SWAPBITPAIRS(kmer,24,20,4) | (kmer & (3U << 22)); case 24: return GT_SWAPBITPAIRS(kmer,46,0,46) | GT_SWAPBITPAIRS(kmer,44,2,42) | GT_SWAPBITPAIRS(kmer,42,4,38) | GT_SWAPBITPAIRS(kmer,40,6,34) | GT_SWAPBITPAIRS(kmer,38,8,30) | GT_SWAPBITPAIRS(kmer,36,10,26) | GT_SWAPBITPAIRS(kmer,34,12,22) | GT_SWAPBITPAIRS(kmer,32,14,18) | GT_SWAPBITPAIRS(kmer,30,16,14) | GT_SWAPBITPAIRS(kmer,28,18,10) | GT_SWAPBITPAIRS(kmer,26,20,6) | GT_SWAPBITPAIRS(kmer,24,22,2); case 25: return GT_SWAPBITPAIRS(kmer,48,0,48) | GT_SWAPBITPAIRS(kmer,46,2,44) | GT_SWAPBITPAIRS(kmer,44,4,40) | GT_SWAPBITPAIRS(kmer,42,6,36) | GT_SWAPBITPAIRS(kmer,40,8,32) | GT_SWAPBITPAIRS(kmer,38,10,28) | GT_SWAPBITPAIRS(kmer,36,12,24) | GT_SWAPBITPAIRS(kmer,34,14,20) | GT_SWAPBITPAIRS(kmer,32,16,16) | GT_SWAPBITPAIRS(kmer,30,18,12) | GT_SWAPBITPAIRS(kmer,28,20,8) | GT_SWAPBITPAIRS(kmer,26,22,4) | (kmer & (3U << 24)); case 26: return GT_SWAPBITPAIRS(kmer,50,0,50) | GT_SWAPBITPAIRS(kmer,48,2,46) | GT_SWAPBITPAIRS(kmer,46,4,42) | GT_SWAPBITPAIRS(kmer,44,6,38) | GT_SWAPBITPAIRS(kmer,42,8,34) | GT_SWAPBITPAIRS(kmer,40,10,30) | GT_SWAPBITPAIRS(kmer,38,12,26) | GT_SWAPBITPAIRS(kmer,36,14,22) | GT_SWAPBITPAIRS(kmer,34,16,18) | GT_SWAPBITPAIRS(kmer,32,18,14) | GT_SWAPBITPAIRS(kmer,30,20,10) | GT_SWAPBITPAIRS(kmer,28,22,6) | GT_SWAPBITPAIRS(kmer,26,24,2); case 27: return GT_SWAPBITPAIRS(kmer,52,0,52) | GT_SWAPBITPAIRS(kmer,50,2,48) | GT_SWAPBITPAIRS(kmer,48,4,44) | GT_SWAPBITPAIRS(kmer,46,6,40) | GT_SWAPBITPAIRS(kmer,44,8,36) | GT_SWAPBITPAIRS(kmer,42,10,32) | GT_SWAPBITPAIRS(kmer,40,12,28) | GT_SWAPBITPAIRS(kmer,38,14,24) | GT_SWAPBITPAIRS(kmer,36,16,20) | GT_SWAPBITPAIRS(kmer,34,18,16) | GT_SWAPBITPAIRS(kmer,32,20,12) | GT_SWAPBITPAIRS(kmer,30,22,8) | GT_SWAPBITPAIRS(kmer,28,24,4) | (kmer & (3U << 26)); case 28: return GT_SWAPBITPAIRS(kmer,54,0,54) | GT_SWAPBITPAIRS(kmer,52,2,50) | GT_SWAPBITPAIRS(kmer,50,4,46) | GT_SWAPBITPAIRS(kmer,48,6,42) | GT_SWAPBITPAIRS(kmer,46,8,38) | GT_SWAPBITPAIRS(kmer,44,10,34) | GT_SWAPBITPAIRS(kmer,42,12,30) | GT_SWAPBITPAIRS(kmer,40,14,26) | GT_SWAPBITPAIRS(kmer,38,16,22) | GT_SWAPBITPAIRS(kmer,36,18,18) | GT_SWAPBITPAIRS(kmer,34,20,14) | GT_SWAPBITPAIRS(kmer,32,22,10) | GT_SWAPBITPAIRS(kmer,30,24,6) | GT_SWAPBITPAIRS(kmer,28,26,2); case 29: return GT_SWAPBITPAIRS(kmer,56,0,56) | GT_SWAPBITPAIRS(kmer,54,2,52) | GT_SWAPBITPAIRS(kmer,52,4,48) | GT_SWAPBITPAIRS(kmer,50,6,44) | GT_SWAPBITPAIRS(kmer,48,8,40) | GT_SWAPBITPAIRS(kmer,46,10,36) | GT_SWAPBITPAIRS(kmer,44,12,32) | GT_SWAPBITPAIRS(kmer,42,14,28) | GT_SWAPBITPAIRS(kmer,40,16,24) | GT_SWAPBITPAIRS(kmer,38,18,20) | GT_SWAPBITPAIRS(kmer,36,20,16) | GT_SWAPBITPAIRS(kmer,34,22,12) | GT_SWAPBITPAIRS(kmer,32,24,8) | GT_SWAPBITPAIRS(kmer,30,26,4) | (kmer & (3U << 28)); case 30: return GT_SWAPBITPAIRS(kmer,58,0,58) | GT_SWAPBITPAIRS(kmer,56,2,54) | GT_SWAPBITPAIRS(kmer,54,4,50) | GT_SWAPBITPAIRS(kmer,52,6,46) | GT_SWAPBITPAIRS(kmer,50,8,42) | GT_SWAPBITPAIRS(kmer,48,10,38) | GT_SWAPBITPAIRS(kmer,46,12,34) | GT_SWAPBITPAIRS(kmer,44,14,30) | GT_SWAPBITPAIRS(kmer,42,16,26) | GT_SWAPBITPAIRS(kmer,40,18,22) | GT_SWAPBITPAIRS(kmer,38,20,18) | GT_SWAPBITPAIRS(kmer,36,22,14) | GT_SWAPBITPAIRS(kmer,34,24,10) | GT_SWAPBITPAIRS(kmer,32,26,6) | GT_SWAPBITPAIRS(kmer,30,28,2); case 31: return GT_SWAPBITPAIRS(kmer,60,0,60) | GT_SWAPBITPAIRS(kmer,58,2,56) | GT_SWAPBITPAIRS(kmer,56,4,52) | GT_SWAPBITPAIRS(kmer,54,6,48) | GT_SWAPBITPAIRS(kmer,52,8,44) | GT_SWAPBITPAIRS(kmer,50,10,40) | GT_SWAPBITPAIRS(kmer,48,12,36) | GT_SWAPBITPAIRS(kmer,46,14,32) | GT_SWAPBITPAIRS(kmer,44,16,28) | GT_SWAPBITPAIRS(kmer,42,18,24) | GT_SWAPBITPAIRS(kmer,40,20,20) | GT_SWAPBITPAIRS(kmer,38,22,16) | GT_SWAPBITPAIRS(kmer,36,24,12) | GT_SWAPBITPAIRS(kmer,34,26,8) | GT_SWAPBITPAIRS(kmer,32,28,4) | (kmer & (3U << 30)); case 32: kmer = (kmer & 0xFFFFFFFF00000000) >> 32 | (kmer & 0x00000000FFFFFFFF) << 32; kmer = (kmer & 0xFFFF0000FFFF0000) >> 16 | (kmer & 0x0000FFFF0000FFFF) << 16; kmer = (kmer & 0xFF00FF00FF00FF00) >> 8 | (kmer & 0x00FF00FF00FF00FF) << 8; kmer = (kmer & 0XF0F0F0F0F0F0F0F0) >> 4 | (kmer & 0x0F0F0F0F0F0F0F0F) << 4; return (kmer & 0xCCCCCCCCCCCCCCCC) >> 2 | (kmer & 0x3333333333333333) << 2; #endif default: fprintf(stderr,"illegal kmersize=%u\n",kmersize); exit(GT_EXIT_PROGRAMMING_ERROR); } } #endif genometools-1.5.1/src/match/lcpinterval.h000066400000000000000000000017571211610345200204350ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LCPINTERVAL_H #define LCPINTERVAL_H typedef struct { unsigned long offset, left, right; } Lcpinterval; #endif genometools-1.5.1/src/match/lcpoverflow.h000066400000000000000000000020631211610345200204430ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LCPOVERFLOW_H #define LCPOVERFLOW_H #include #include #define LCPOVERFLOW ((uint8_t) UCHAR_MAX) typedef struct { unsigned long position, value; } Largelcpvalue; #endif genometools-1.5.1/src/match/lua_tools.c000066400000000000000000000032321211610345200200740ustar00rootroot00000000000000/* Copyright (c) 2011 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "lua.h" #include "lualib.h" #include "match/lua_tools.h" void gt_lua_stack_dump(lua_State *L) { int i; int top = lua_gettop(L); for (i = 1; i <= top; i++) { /* repeat for each level */ int t = lua_type(L, i); switch (t) { case LUA_TSTRING: /* strings */ fprintf(stderr, "`%s'", lua_tostring(L, i)); break; case LUA_TBOOLEAN: /* booleans */ lua_toboolean(L, i) ? fprintf(stderr,"true") : fprintf(stderr,"false"); break; case LUA_TNUMBER: /* numbers */ fprintf(stderr, "%g", lua_tonumber(L, i)); break; default: /* other values */ fprintf(stderr, "%s", lua_typename(L, t)); break; } fprintf(stderr, " "); /* put a separator */ } fprintf(stderr, "\n"); /* end the listing */ } genometools-1.5.1/src/match/lua_tools.h000066400000000000000000000017531211610345200201070ustar00rootroot00000000000000/* Copyright (c) 2011 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef LUA_TOOLS_H #define LUA_TOOLS_H #include "lauxlib.h" #include "lua.h" #include "lualib.h" void gt_lua_stack_dump(lua_State *L); #endif genometools-1.5.1/src/match/marksubstring.c000066400000000000000000000056621211610345200207770ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/mathsupport.h" #include "core/unused_api.h" #include "marksubstring.h" Gtmarksubstring *gt_marksubstring_new(unsigned int numofchars, unsigned int kmersize, bool usesuffix, unsigned int units) { Gtmarksubstring *mark; mark = gt_malloc(sizeof (*mark)); gt_assert(kmersize >= units); mark->units = units; mark->entries = gt_power_for_small_exponents(numofchars,units); if (usesuffix) { mark->shiftright = 0; mark->mask = (GtCodetype) (mark->entries-1); } else { mark->shiftright = GT_MULT2(kmersize - units); mark->mask = ~(GtCodetype) 0; } GT_INITBITTAB(mark->bits,mark->entries); mark->size = sizeof (GtBitsequence) * GT_NUMOFINTSFORBITS(mark->entries); return mark; } void gt_marksubstring_delete(Gtmarksubstring *mark,bool withbits) { if (mark != NULL) { if (withbits) { gt_free(mark->bits); } gt_free(mark); } } void gt_marksubstring_mark(Gtmarksubstring *mark,GtCodetype code) { code = (code >> (GtCodetype) mark->shiftright) & mark->mask; gt_assert(code < mark->entries); if (!GT_ISIBITSET(mark->bits,code)) { GT_SETIBIT(mark->bits,code); } } bool gt_marksubstring_checkmark(const Gtmarksubstring *mark,GtCodetype code) { code = (code >> (GtCodetype) mark->shiftright) & mark->mask; return GT_ISIBITSET(mark->bits,code) ? true : false; } unsigned int gt_marksubstring_shiftright(const Gtmarksubstring *mark) { return mark->shiftright; } unsigned long gt_marksubstring_entries(const Gtmarksubstring *mark) { return mark->entries; } size_t gt_marksubstring_size(const Gtmarksubstring *mark) { return mark->size; } void gt_marksubstring_bits_null(GT_UNUSED const Gtmarksubstring *mark,bool null) { if (null) { gt_assert(mark->bits == NULL); } else { gt_assert(mark->bits != NULL); } } GtBitsequence** gt_marksubstring_bits_address(Gtmarksubstring *mark) { return &mark->bits; } void gt_marksubstring_bits_map(Gtmarksubstring *mark,GtBitsequence *bitsmap) { mark->bits = bitsmap; } genometools-1.5.1/src/match/marksubstring.h000066400000000000000000000043161211610345200207770ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MARKSUBSTRING_H #define MARKSUBSTRING_H #include "core/codetype.h" #include "core/intbits.h" typedef struct Gtmarksubstring Gtmarksubstring; struct Gtmarksubstring { size_t size; unsigned int units, shiftright; unsigned long entries; GtCodetype mask; GtBitsequence *bits; }; #define GT_MARKSUBSTRING_CHECKMARK(MARK,CODE)\ (marksubstringtmpcode\ = ((CODE) >> (GtCodetype) (MARK)->shiftright) & (MARK)->mask,\ GT_ISIBITSET((MARK)->bits,marksubstringtmpcode) ? true : false) Gtmarksubstring *gt_marksubstring_new(unsigned int numofchars, unsigned int kmersize, bool usesuffix, unsigned int units); void gt_marksubstring_delete(Gtmarksubstring *mark,bool withbits); void gt_marksubstring_mark(Gtmarksubstring *mark,GtCodetype code); bool gt_marksubstring_checkmark(const Gtmarksubstring *mark,GtCodetype code); unsigned int gt_marksubstring_shiftright(const Gtmarksubstring *mark); unsigned long gt_marksubstring_entries(const Gtmarksubstring *mark); size_t gt_marksubstring_size(const Gtmarksubstring *mark); void gt_marksubstring_bits_null(const Gtmarksubstring *mark,bool null); GtBitsequence** gt_marksubstring_bits_address(Gtmarksubstring *mark); void gt_marksubstring_bits_map(Gtmarksubstring *mark, GtBitsequence *bitsmap); #endif genometools-1.5.1/src/match/merger-trie.c000066400000000000000000000462261211610345200203270ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/arraydef.h" #include "core/chardef.h" #include "core/divmodmul.h" #include "core/format64.h" #include "core/intbits.h" #include "core/encseq.h" #include "core/ma_api.h" #include "merger-trie.h" #define MTRIE_ISLEAF(NODE) ((NODE)->firstchild == NULL) #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW #define SHOWNODERELATIONS(NODE)\ shownoderelations(__LINE__,#NODE,NODE) #else #define SHOWNODERELATIONS(NODE) /* Nothing */ #endif #else #define SHOWNODERELATIONS(NODE) /* Nothing */ #endif #define SETFIRSTCHILD(NODE,VALUE)\ (NODE)->firstchild = VALUE;\ if ((VALUE) != NULL)\ {\ (VALUE)->parent = NODE;\ } #define SETFIRSTCHILDNULL(NODE)\ (NODE)->firstchild = NULL typedef struct { Mergertrienode *previous, *current; } Nodepair; static GtUchar getfirstedgechar(const Mergertrierep *trierep, const Mergertrienode *node, unsigned long prevdepth) { Encseqreadinfo *eri = trierep->encseqreadinfo + node->suffixinfo.idx; if (MTRIE_ISLEAF(node) && node->suffixinfo.startpos + prevdepth >= gt_encseq_total_length(eri->encseqptr)) { return (GtUchar) SEPARATOR; } return gt_encseq_get_encoded_char(eri->encseqptr, /* Random access */ node->suffixinfo.startpos + prevdepth, eri->readmode); } static int mtrie_comparecharacters(GtUchar cc1,unsigned int idx1, GtUchar cc2,unsigned int idx2) { if (ISSPECIAL(cc1)) { if (ISSPECIAL(cc2)) { if (idx1 <= idx2) { return -1; /* cc1 < cc2 */ } else { return 1; /* cc1 > cc2 */ } } else { return 1; /* cc1 > cc2 */ } } else { if (ISSPECIAL(cc2)) { return -1; /* cc1 < cc2 */ } else { if (cc1 < cc2) { return -1; /* cc1 < cc2 */ } else { if (cc1 > cc2) { return 1; /* cc1 > cc2 */ } else { return 0; /* cc1 == cc2 */ } } } } } #ifdef WITHTRIEIDENT static void showmergertrie2(const Mergertrierep *trierep, const GtUchar *characters, unsigned int level, const Mergertrienode *node) { GtUchar cc = 0; unsigned long pos, endpos; Mergertrienode *current; for (current = node->firstchild; current != NULL; current = current->rightsibling) { printf("%*.*s",(int) (6 * level),(int) (6 * level)," "); if (MTRIE_ISLEAF(current)) { endpos = gt_encseq_total_length( trierep->encseqtable[current->suffixinfo.idx]); } else { endpos = current->suffixinfo.startpos + current->depth; } for (pos = current->suffixinfo.startpos + node->depth; pos < endpos; pos++) { cc = gt_encseq_get_encoded_char( /* just for testing */ trierep->enseqreadinfo[current->suffixinfo.idx].encseqptr, pos, trierep->enseqreadinfo[current->suffixinfo.idx].readmode); if (ISSPECIAL(cc)) { printf("#\n"); break; } printf("%c",characters[(int) cc]); } if (MTRIE_ISLEAF(current)) { if (!ISSPECIAL(cc)) { printf("~\n"); } } else { printf(" d=%lu,i=" Formatuint64_t "\n", current->depth, PRINTuint64_tcast(current->suffixinfo.ident)); showmergertrie2(trierep,characters,level+1,current); } } } void mergertrie_show(const Mergertrierep *trierep, const GtUchar *characters) { if (trierep->root != NULL) { showmergertrie2(trierep,characters,0,trierep->root); } } /* Check the following: (1) for each branching node there exist at least 2 DONE (2) for each branching node the list of successors is strictly ordered according to the first character of the edge label DONE (3) there are no empty edge labels DONE (4) there are \(n+1\) leaves and for each leaf there is exactly one incoming edge DONE */ static void checkmergertrie2(Mergertrierep *trierep, Mergertrienode *node, Mergertrienode *father, Bitsequence *leafused, unsigned int *numberofbitsset) { Mergertrienode *current, *previous; if (MTRIE_ISLEAF(node)) { unsigned long start = node->suffixinfo.startpos; #ifndef NDEBUG if (ISIBITSET(leafused,start)) { fprintf(stderr,"leaf %lu already found\n",start); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif SETIBIT(leafused,start); (*numberofbitsset)++; } else { gt_assert(node->depth == 0 || node->firstchild->rightsibling != NULL); if (father != NULL) { gt_assert(!MTRIE_ISLEAF(father)); #ifndef NDEBUG if (father->depth >= node->depth) { fprintf(stderr,"father.depth = %lu >= %lu = node.depth\n", father->depth, node->depth); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif } previous = NULL; for (current = node->firstchild; current != NULL; current = current->rightsibling) { #ifndef NDEBUG if (previous != NULL) { if (mtrie_comparecharacters( getfirstedgechar(trierep,previous,node->depth), previous->suffixinfo.idx, getfirstedgechar(trierep,current,node->depth), current->suffixinfo.idx) >= 0) { fprintf(stderr,"nodes not correctly ordered\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } } #endif checkmergertrie2(trierep,current,node,leafused,numberofbitsset); previous = current; } } } void mergertrie_check(Mergertrierep *trierep,unsigned int numberofleaves, unsigned int maxleafnum,GtError *err) { gt_error_check(err); if (trierep->root != NULL) { Bitsequence *leafused; unsigned int numberofbitsset = 0; INITBITTAB(leafused,maxleafnum+1); checkmergertrie2(trierep,trierep->root,NULL,leafused,&numberofbitsset); #ifndef NDEBUG if (numberofbitsset != numberofleaves) { fprintf(stderr,"numberofbitsset = %u != %u = numberofleaves\n", numberofbitsset, numberofleaves); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif gt_free(leafused); } } #ifdef WITHTRIESHOW static void shownode(const Mergertrienode *node) { if (node == NULL) { printf("NULL"); } else { printf("%s " Formatuint64_t,MTRIE_ISLEAF(node) ? "leaf" : "branch", PRINTuint64_tcast(node->suffixinfo.ident)); } } static void showsimplenoderelations(const Mergertrienode *node) { shownode(node); printf(".firstchild="); shownode(node->firstchild); printf("; "); shownode(node); printf(".rightsibling="); shownode(node->rightsibling); printf("\n"); } static void shownoderelations(int line,char *nodestring, const Mergertrienode *node) { printf("l. %d: %s: ",line,nodestring); showsimplenoderelations(node); } void merertrie_showallnoderelations(const Mergertrienode *node) { Mergertrienode *tmp; showsimplenoderelations(node); for (tmp = node->firstchild; tmp != NULL; tmp = tmp->rightsibling) { if (tmp->firstchild == NULL) { showsimplenoderelations(tmp); } else { showallnoderelations(tmp); } } } #endif #endif static Mergertrienode *newMergertrienode(Mergertrierep *trierep) { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW printf("# available trie nodes: %u; ", trierep->allocatedMergertrienode - trierep->nextfreeMergertrienode); printf("unused trie nodes: %u\n",trierep->nextunused); #endif #endif if (trierep->nextfreeMergertrienode >= trierep->allocatedMergertrienode) { gt_assert(trierep->nextunused > 0); trierep->nextunused--; return trierep->unusedMergertrienodes[trierep->nextunused]; } return trierep->nodetable + trierep->nextfreeMergertrienode++; } static Mergertrienode *mtrie_makenewleaf(Mergertrierep *trierep, Suffixinfo *suffixinfo) { Mergertrienode *newleaf; #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW printf("makenewleaf(" Formatuint64_t ")\n", PRINTuint64_tcast(suffixinfo->ident)); #endif #endif newleaf = newMergertrienode(trierep); newleaf->suffixinfo = *suffixinfo; SETFIRSTCHILDNULL(newleaf); newleaf->rightsibling = NULL; SHOWNODERELATIONS(newleaf); return newleaf; } static Mergertrienode *mtrie_makeroot(Mergertrierep *trierep, Suffixinfo *suffixinfo) { Mergertrienode *root, *newleaf; #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW printf("makeroot(" Formatuint64_t ")\n",PRINTuint64_tcast(suffixinfo->ident)); #endif #endif root = newMergertrienode(trierep); root->parent = NULL; root->suffixinfo = *suffixinfo; root->depth = 0; root->rightsibling = NULL; newleaf = mtrie_makenewleaf(trierep,suffixinfo); SETFIRSTCHILD(root,newleaf); SHOWNODERELATIONS(root); return root; } static void makesuccs(Mergertrienode *newbranch,Mergertrienode *first, Mergertrienode *second) { second->rightsibling = NULL; first->rightsibling = second; SETFIRSTCHILD(newbranch,first); SHOWNODERELATIONS(second); SHOWNODERELATIONS(first); SHOWNODERELATIONS(newbranch); } static Mergertrienode *mtrie_makenewbranch(Mergertrierep *trierep, Suffixinfo *suffixinfo, unsigned long currentdepth, Mergertrienode *oldnode) { Mergertrienode *newbranch, *newleaf; GtUchar cc1, cc2; Encseqreadinfo *eri = trierep->encseqreadinfo + suffixinfo->idx; #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW printf("makenewbranch(ident=" Formatuint64_t ")\n", PRINTuint64_tcast(suffixinfo->ident)); #endif #endif newbranch = newMergertrienode(trierep); newbranch->suffixinfo = *suffixinfo; newbranch->rightsibling = oldnode->rightsibling; cc1 = getfirstedgechar(trierep,oldnode,currentdepth); if (suffixinfo->startpos + currentdepth >= gt_encseq_total_length(eri->encseqptr)) { cc2 = (GtUchar) SEPARATOR; } else { cc2 = gt_encseq_get_encoded_char(eri->encseqptr, suffixinfo->startpos + currentdepth, eri->readmode); } newleaf = mtrie_makenewleaf(trierep,suffixinfo); if (mtrie_comparecharacters(cc1,oldnode->suffixinfo.idx, cc2,suffixinfo->idx) <= 0) { makesuccs(newbranch,oldnode,newleaf); } else { makesuccs(newbranch,newleaf,oldnode); } newbranch->depth = currentdepth; return newbranch; } static unsigned long getlcp(const GtEncseq *encseq1, GtReadmode readmode1, unsigned long start1, unsigned long end1, const GtEncseq *encseq2, GtReadmode readmode2, unsigned long start2, unsigned long end2) { unsigned long i1, i2; GtUchar cc1; for (i1=start1, i2=start2; i1 <= end1 && i2 <= end2; i1++, i2++) { cc1 = gt_encseq_get_encoded_char(/*XXX*/ encseq1,i1,readmode1); if (cc1 != gt_encseq_get_encoded_char(/*XXX*/ encseq2,i2,readmode2) || ISSPECIAL(cc1)) { break; } } return i1 - start1; } static bool hassuccessor(const Mergertrierep *trierep, Nodepair *np, unsigned long prevdepth, const Mergertrienode *node, GtUchar cc2, unsigned int idx2) { GtUchar cc1; int cmpresult; for (np->previous = NULL, np->current = node->firstchild; np->current != NULL; np->current = np->current->rightsibling) { cc1 = getfirstedgechar(trierep,np->current,prevdepth); cmpresult = mtrie_comparecharacters(cc1,np->current->suffixinfo.idx,cc2, idx2); if (cmpresult == 1) { return false; } if (cmpresult == 0) { return true; } np->previous = np->current; } return false; } void gt_mergertrie_insertsuffix(Mergertrierep *trierep, Mergertrienode *node, Suffixinfo *suffixinfo) { if (trierep->root == NULL) { trierep->root = mtrie_makeroot(trierep,suffixinfo); } else { unsigned long currentdepth, lcpvalue, totallength; Mergertrienode *currentnode, *newleaf, *newbranch, *succ; Nodepair np; GtUchar cc; Encseqreadinfo *eri = trierep->encseqreadinfo + suffixinfo->idx; gt_assert(!MTRIE_ISLEAF(node)); currentnode = node; currentdepth = node->depth; totallength = gt_encseq_total_length(eri->encseqptr); while (true) { if (suffixinfo->startpos + currentdepth >= totallength) { cc = (GtUchar) SEPARATOR; } else { /* Random access */ cc = gt_encseq_get_encoded_char(eri->encseqptr, suffixinfo->startpos + currentdepth, eri->readmode); } gt_assert(currentnode != NULL); gt_assert(!MTRIE_ISLEAF(currentnode)); if (!hassuccessor(trierep,&np,currentdepth,currentnode,cc, suffixinfo->idx)) { newleaf = mtrie_makenewleaf(trierep,suffixinfo); newleaf->rightsibling = np.current; SHOWNODERELATIONS(newleaf); if (np.previous == NULL) { SETFIRSTCHILD(currentnode,newleaf); SHOWNODERELATIONS(currentnode); } else { np.previous->rightsibling = newleaf; SHOWNODERELATIONS(np.previous); } return; } succ = np.current; if (MTRIE_ISLEAF(succ)) { lcpvalue = getlcp(eri->encseqptr, eri->readmode, suffixinfo->startpos + currentdepth + 1, gt_encseq_total_length(eri->encseqptr) - 1, trierep->encseqreadinfo[succ->suffixinfo.idx]. encseqptr, trierep->encseqreadinfo[succ->suffixinfo.idx]. readmode, succ->suffixinfo.startpos + currentdepth + 1, gt_encseq_total_length( trierep->encseqreadinfo[succ->suffixinfo.idx]. encseqptr) - 1); newbranch = mtrie_makenewbranch(trierep, suffixinfo, currentdepth + lcpvalue + 1, succ); if (np.previous == NULL) { SETFIRSTCHILD(currentnode,newbranch); SHOWNODERELATIONS(currentnode); } else { np.previous->rightsibling = newbranch; SHOWNODERELATIONS(np.previous); } return; } lcpvalue = getlcp(eri->encseqptr, eri->readmode, suffixinfo->startpos + currentdepth + 1, gt_encseq_total_length(eri->encseqptr) - 1, trierep->encseqreadinfo[succ->suffixinfo.idx].encseqptr, trierep->encseqreadinfo[succ->suffixinfo.idx].readmode, succ->suffixinfo.startpos + currentdepth + 1, succ->suffixinfo.startpos + succ->depth - 1); if (currentdepth + lcpvalue + 1 < succ->depth) { newbranch = mtrie_makenewbranch(trierep, suffixinfo, currentdepth + lcpvalue + 1, succ); if (np.previous == NULL) { SETFIRSTCHILD(currentnode,newbranch); SHOWNODERELATIONS(currentnode); } else { np.previous->rightsibling = newbranch; SHOWNODERELATIONS(np.previous); } return; } currentnode = succ; currentdepth = currentnode->depth; } } } Mergertrienode *gt_mergertrie_findsmallestnode(const Mergertrierep *trierep) { Mergertrienode *node; gt_assert(trierep->root != NULL); for (node = trierep->root; node->firstchild != NULL; node = node->firstchild) /* Nothing */ ; return node; } void gt_mergertrie_deletesmallestpath(Mergertrienode *smallest, Mergertrierep *trierep) { Mergertrienode *father, *son; for (son = smallest; son->parent != NULL; son = son->parent) { father = son->parent; if (son->firstchild == NULL) { SETFIRSTCHILD(father,son->rightsibling); SHOWNODERELATIONS(father); son->rightsibling = NULL; } else { if (son->firstchild->rightsibling != NULL) { break; } son->firstchild->rightsibling = father->firstchild->rightsibling; SETFIRSTCHILD(father,son->firstchild); SHOWNODERELATIONS(father); son->rightsibling = NULL; SETFIRSTCHILDNULL(son); } #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW printf("delete %s " Formatuint64_t "\n", MTRIE_ISLEAF(son) ? "leaf" : "branch", PRINTuint64_tcast(son->suffixinfo.ident)); #endif #endif trierep->unusedMergertrienodes[trierep->nextunused++] = son; } if (trierep->root->firstchild == NULL) { trierep->unusedMergertrienodes[trierep->nextunused++] = trierep->root; trierep->root = NULL; } } void gt_mergertrie_initnodetable(Mergertrierep *trierep, unsigned long numofsuffixes, unsigned int numofindexes) { trierep->numofindexes = numofindexes; trierep->allocatedMergertrienode = (unsigned int) GT_MULT2(numofsuffixes + 1) + 1; trierep->nodetable = gt_malloc(sizeof *trierep->nodetable * trierep->allocatedMergertrienode); trierep->nextfreeMergertrienode = 0; trierep->root = NULL; trierep->nextunused = 0; trierep->unusedMergertrienodes = gt_malloc(sizeof *trierep->unusedMergertrienodes * trierep->allocatedMergertrienode); } void gt_mergertrie_delete(Mergertrierep *trierep) { if (trierep != NULL) { gt_free(trierep->nodetable); gt_free(trierep->unusedMergertrienodes); gt_free(trierep->encseqreadinfo); trierep->encseqreadinfo = NULL; } } genometools-1.5.1/src/match/merger-trie.h000066400000000000000000000051351211610345200203260ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MERGER_TRIE_H #define MERGER_TRIE_H #include "core/arraydef.h" #include "core/encseq.h" typedef struct { unsigned int idx; unsigned long startpos; #ifdef WITHTRIEIDENT uint64_t ident; #endif } Suffixinfo; typedef struct Mergertrienode { Suffixinfo suffixinfo; struct Mergertrienode *firstchild, *rightsibling, *parent; unsigned long depth; } Mergertrienode; typedef Mergertrienode * Mergertrienodeptr; GT_DECLAREARRAYSTRUCT(Mergertrienodeptr); typedef struct { GtEncseq *encseqptr; GtReadmode readmode; } Encseqreadinfo; typedef struct { Encseqreadinfo *encseqreadinfo; Mergertrienode *nodetable, *root; Mergertrienodeptr *unusedMergertrienodes; unsigned int numofindexes, nextunused, allocatedMergertrienode, nextfreeMergertrienode; } Mergertrierep; void mergertrie_show(const Mergertrierep *trierep, const GtUchar *characters); void mergertrie_check(Mergertrierep *trierep,unsigned int numberofleaves, unsigned int maxleafnum,GtError *err); void mergertrie_showallnoderelations(const Mergertrienode *node); void gt_mergertrie_insertsuffix(Mergertrierep *trierep, Mergertrienode *node, Suffixinfo *suffixinfo); Mergertrienode *gt_mergertrie_findsmallestnode(const Mergertrierep *trierep); void gt_mergertrie_deletesmallestpath(Mergertrienode *smallest, Mergertrierep *trierep); void gt_mergertrie_initnodetable(Mergertrierep *trierep, unsigned long numofsuffixes, unsigned int numofindexes); void gt_mergertrie_delete(Mergertrierep *trierep); #endif genometools-1.5.1/src/match/merger-trie.pr000066400000000000000000000015361211610345200205210ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif void showmergertrie(const Mergertrierep *trierep, const GtUchar *characters); void checkmergertrie(Mergertrierep *trierep,unsigned int numberofleaves, unsigned int maxleafnum,GtError *err); void showallnoderelations(const Mergertrienode *node); void insertsuffixintomergertrie(Mergertrierep *trierep, Mergertrienode *node, Suffixinfo *suffixinfo); Mergertrienode *findsmallestnodeintrie(const Mergertrierep *trierep); void deletesmallesttriepath(Mergertrienode *smallest,Mergertrierep *trierep); void initmergertrienodetable(Mergertrierep *trierep,unsigned long numofsuffixes, unsigned int numofindexes); void freemergertrierep(Mergertrierep *trierep); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/mssufpat.c000066400000000000000000000251421211610345200177410ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/assert_api.h" #include "core/types_api.h" #include "core/unused_api.h" #include "core/chardef.h" #include "core/ma_api.h" #include "core/intbits.h" #include "absdfstrans-imp.h" #include "initeqsvec.h" typedef struct { unsigned long prefixofsuffixbits; } GtMssufpatLimdfsstate; typedef struct { unsigned long patternlength, mstatlength[GT_INTWORDSIZE], *eqsvector; unsigned long mstatwitnessleftbound[GT_INTWORDSIZE], mstatwitnessrightbound[GT_INTWORDSIZE]; } GtMssufpatLimdfsconstinfo; #ifdef SKDEBUG static void pms_showLimdfsstate(const DECLAREPTRDFSSTATE(aliascol), unsigned long currentdepth, const Limdfsconstinfo *mti) { const GtMssufpatLimdfsstate *col = (const GtMssufpatLimdfsstate *) aliascol; bool first = true; unsigned long idx, backmask; printf("at depth %lu: [",currentdepth); for (idx=0, backmask = 1UL; idxpatternlength; idx++, backmask <<= 1) { if (col->prefixofsuffixbits & backmask) { if (first) { printf("%lu",idx); first = false; } else { printf(",%lu",idx); } } } printf("]\n"); } #endif static Limdfsconstinfo *pms_allocatedfsconstinfo(unsigned int alphasize) { GtMssufpatLimdfsconstinfo *mti = gt_malloc(sizeof (GtMssufpatLimdfsconstinfo)); mti->eqsvector = gt_malloc(sizeof (*mti->eqsvector) * alphasize); return (Limdfsconstinfo*) mti; } static void pms_initdfsconstinfo(Limdfsconstinfo *mt, unsigned int alphasize, ...) /* Variable argument list is as follows: unsigned int alphasize const GtUchar *pattern, unsigned long patternlength */ { va_list ap; GtMssufpatLimdfsconstinfo *mti = (GtMssufpatLimdfsconstinfo*) mt; const GtUchar *pattern; va_start(ap,alphasize); pattern = va_arg(ap, const GtUchar *); mti->patternlength = va_arg(ap, unsigned long); va_end(ap); gt_initeqsvector(mti->eqsvector,(unsigned long) alphasize, pattern,mti->patternlength); } static void pms_extractdfsconstinfo(Processresult processresult, void *processinfo, const void *patterninfo, Limdfsconstinfo *mt) { unsigned long idx; GtMssufpatLimdfsconstinfo *mti = (GtMssufpatLimdfsconstinfo*) mt; for (idx=0; idxpatternlength; idx++) { processresult(processinfo,patterninfo,idx,mti->mstatlength[idx], mti->mstatwitnessleftbound[idx], mti->mstatwitnessrightbound[idx]); } } static void pms_freedfsconstinfo(Limdfsconstinfo **mtptr) { GtMssufpatLimdfsconstinfo **mtiptr = (GtMssufpatLimdfsconstinfo**) mtptr; gt_free((*mtiptr)->eqsvector); gt_free((*mtiptr)); *mtiptr = NULL; } static unsigned long zerosontheright(unsigned long v) { unsigned long c; /* c will be the number of zero bits on the right, so if v is 1101000 (base 2), then c will be 3 */ gt_assert(v > 0); if (v & 0x1) { c = 0; /* special case for odd v (assumed to happen half of the time) */ } else { c = 1UL; #ifdef _LP64 if ((v & 0xffffffff) == 0) { v >>= 32; c+= 32UL; } #endif if ((v & 0xffff) == 0) { v >>= 16; c += 16UL; } if ((v & 0xff) == 0) { v >>= 8; c += 8UL; } if ((v & 0xf) == 0) { v >>= 4; c += 4UL; } if ((v & 0x3) == 0) { v >>= 2; c += 2UL; } c -= v & 0x1; } return c; } static void pms_initLimdfsstate(DECLAREPTRDFSSTATE(aliascolumn), Limdfsconstinfo *mt) { GtMssufpatLimdfsstate *column = (GtMssufpatLimdfsstate *) aliascolumn; GtMssufpatLimdfsconstinfo *mti = (GtMssufpatLimdfsconstinfo*) mt; unsigned long idx; column->prefixofsuffixbits = ~0UL; gt_assert(mti->patternlength <= (unsigned long) GT_INTWORDSIZE); for (idx = 0; idxpatternlength; idx++) { mti->mstatlength[idx] = 0; mti->mstatwitnessleftbound[idx] = 0; mti->mstatwitnessrightbound[idx] = 0; } } static void pms_fullmatchLimdfsstate(Limdfsresult *limdfsresult, DECLAREPTRDFSSTATE(aliascolumn), unsigned long leftbound, unsigned long rightbound, GT_UNUSED unsigned long width, unsigned long currentdepth, Limdfsconstinfo *mt) { GtMssufpatLimdfsstate *limdfsstate = (GtMssufpatLimdfsstate *) aliascolumn; GtMssufpatLimdfsconstinfo *mti = (GtMssufpatLimdfsconstinfo*) mt; if (limdfsstate->prefixofsuffixbits > 0) { unsigned long bitindex = 0, first1, tmp = limdfsstate->prefixofsuffixbits; do { first1 = zerosontheright(tmp); gt_assert(bitindex + first1 < mti->patternlength); if (mti->mstatlength[bitindex+first1] < currentdepth) { /* printf("set mstatlength[%lu]=%lu\n",bitindex+first1,currentdepth); printf("set mstatwitnessleftbound[%lu]=%lu\n",bitindex+first1, (unsigned long) leftbound); */ mti->mstatlength[bitindex+first1] = currentdepth; mti->mstatwitnessleftbound[bitindex+first1] = leftbound; mti->mstatwitnessrightbound[bitindex+first1] = rightbound; } tmp >>= (first1+1); bitindex += (first1+1); } while (tmp != 0); limdfsresult->status = Limdfscontinue; } else { limdfsresult->status = Limdfsstop; } } static void pms_nextLimdfsstate(const Limdfsconstinfo *mt, DECLAREPTRDFSSTATE(aliasoutcol), unsigned long currentdepth, GtUchar currentchar, const DECLAREPTRDFSSTATE(aliasincol)) { #ifdef SKDEBUG char buffer1[GT_INTWORDSIZE+1], buffer2[GT_INTWORDSIZE+1]; #endif GtMssufpatLimdfsstate *outcol = (GtMssufpatLimdfsstate *) aliasoutcol; GtMssufpatLimdfsconstinfo *mti = (GtMssufpatLimdfsconstinfo*) mt; const GtMssufpatLimdfsstate *incol = (const GtMssufpatLimdfsstate *) aliasincol; gt_assert(ISNOTSPECIAL(currentchar)); gt_assert(currentdepth > 0); if (currentdepth > 1UL) { outcol->prefixofsuffixbits = incol->prefixofsuffixbits & (mti->eqsvector[currentchar] >> (currentdepth-1)); } else { outcol->prefixofsuffixbits = mti->eqsvector[currentchar]; } #ifdef SKDEBUG bitsequence2string(buffer1,(Bitsequence) incol->prefixofsuffixbits); bitsequence2string(buffer2,(Bitsequence) outcol->prefixofsuffixbits); printf("next(%s,%u,depth=%lu)->%s\n",buffer1,(unsigned int) currentchar, currentdepth,buffer2); #endif } static void pms_inplacenextLimdfsstate(const Limdfsconstinfo *mt, DECLAREPTRDFSSTATE(aliascol), unsigned long currentdepth, GtUchar currentchar) { #ifdef SKDEBUG char buffer1[INTWORDSIZE+1], buffer2[INTWORDSIZE+1]; unsigned long tmp; #endif GtMssufpatLimdfsstate *col = (GtMssufpatLimdfsstate *) aliascol; GtMssufpatLimdfsconstinfo *mti = (GtMssufpatLimdfsconstinfo*) mt; gt_assert(ISNOTSPECIAL(currentchar)); #ifdef SKDEBUG tmp = col->prefixofsuffixbits; #endif col->prefixofsuffixbits &= (mti->eqsvector[currentchar] >> (currentdepth-1)); #ifdef SKDEBUG bitsequence2string(buffer1,(uint32_t) tmp); bitsequence2string(buffer2,(uint32_t) col->prefixofsuffixbits); printf("inplacenext(%s,%u,%lu)->%s\n",buffer1,(unsigned int) currentchar, currentdepth,buffer2); #endif } const AbstractDfstransformer *gt_pms_AbstractDfstransformer(void) { static const AbstractDfstransformer pms_adfst = { sizeof (GtMssufpatLimdfsstate), pms_allocatedfsconstinfo, pms_initdfsconstinfo, pms_extractdfsconstinfo, pms_freedfsconstinfo, pms_initLimdfsstate, NULL, NULL, NULL, pms_fullmatchLimdfsstate, pms_nextLimdfsstate, pms_inplacenextLimdfsstate, #ifdef SKDEBUG pms_showLimdfsstate, #endif }; return &pms_adfst; } /* define bitvector prefixofsuffixbits_{d} such that after processing a sequence v of length d we have: for all i\in[0,m-1] prefixofsuffixbits_{d}[i] is 1 iff P[i..i+d-1] = v[0..d-1] Let eqsvector_{a} be a vector of size m such that eqsvector_{a}[i]=1 if P[i]=a Let d=0 (i.e. at the root). Then P[i..i+d-1]=P[i..i-1]=\varepsilon=v[0..-1]=v[0..d-1] for all i \in[0..m-1] and hence prefixofsuffixbits_{d}[i]=1. In other words prefixofsuffixbits_{d} = 1^{m}. Now suppose d > 0 and assume we have computed prefixofsuffixbits_{d-1}. Then by definition prefixofsuffixbits_{d}[i] iff P[i..i+d-1] = v[0..d-1] iff P[i..i+d-2] = v[0..d-2] && P[i+d-1]=v[d-1] iff prefixofsuffixbits_{d-1][i]=1 && eqsvector_{v[d-1]}[i+d-1]=1 iff prefixofsuffixbits_{d-1][i] & eqsvector_{v[d-1]}[i+d-1] All values in prefixofsuffixbits_{d} are independent and can be computed in parallel by prefixofsuffixbits_{d} = prefixofsuffixbits_{d-1} & (eqsvector_{a} << (d-1)) where a=v[d-1] prefixofsuffixbits_{d] = 0 and prefixofsuffixbits_{d-1} != 0 then for all i satisfying prefixofsuffixbits_{d-1][i] = 1 do: if mstats[i] Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MSSUFPAT_H #define MSSUFPAT_H #include "absdfstrans-def.h" const AbstractDfstransformer *gt_pms_AbstractDfstransformer(void); #endif genometools-1.5.1/src/match/myersapm.c000066400000000000000000000131621211610345200177330ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/chardef.h" #include "core/types_api.h" #include "core/encseq.h" #include "core/defined-types.h" #include "core/ma_api.h" #include "myersapm.h" #include "procmatch.h" #include "dist-short.h" #include "initeqsvec.h" struct Myersonlineresources { GtEncseqReader *esr; const GtEncseq *encseq; unsigned long totallength; unsigned long *eqsvectorrev, *eqsvector; unsigned int alphasize; bool nowildcards; ProcessIdxMatch processmatch; void *processmatchinfo; }; Myersonlineresources *gt_newMyersonlineresources(unsigned int numofchars, bool nowildcards, const GtEncseq *encseq, ProcessIdxMatch processmatch, void *processmatchinfo) { Myersonlineresources *mor; mor = gt_malloc(sizeof *mor); mor->eqsvectorrev = gt_malloc(sizeof *mor->eqsvectorrev * numofchars); mor->eqsvector = gt_malloc(sizeof *mor->eqsvector * numofchars); mor->encseq = encseq; mor->esr = gt_encseq_create_reader_with_readmode(encseq, GT_READMODE_REVERSE, 0); gt_assert(numofchars <= GT_MAXALPHABETCHARACTER); mor->alphasize = numofchars; mor->totallength = gt_encseq_total_length(encseq); mor->nowildcards = nowildcards; mor->processmatch = processmatch; mor->processmatchinfo = processmatchinfo; return mor; } void gt_freeMyersonlineresources(Myersonlineresources *ptrmyersonlineresources) { if (ptrmyersonlineresources != NULL) { gt_free(ptrmyersonlineresources->eqsvectorrev); gt_free(ptrmyersonlineresources->eqsvector); gt_encseq_reader_delete(ptrmyersonlineresources->esr); gt_free(ptrmyersonlineresources); } } void gt_edistmyersbitvectorAPM(Myersonlineresources *mor, const GtUchar *pattern, unsigned long patternlength, unsigned long maxdistance) { unsigned long Pv = ~0UL, Mv = 0UL, Eq, Xv, Xh, Ph, Mh, score; const unsigned long Ebit = 1UL << (patternlength-1); GtUchar cc; unsigned long pos; const GtReadmode readmode = GT_READMODE_REVERSE; GtIdxMatch match; gt_initeqsvectorrev(mor->eqsvectorrev, (unsigned long) mor->alphasize, pattern,patternlength); score = patternlength; gt_encseq_reader_reinit_with_readmode(mor->esr, mor->encseq, readmode, 0); match.dbabsolute = NULL; match.dbsubstring = NULL; match.querystartpos = 0; match.querylen = patternlength; match.alignment = NULL; for (pos = 0; pos < mor->totallength; pos++) { cc = gt_encseq_reader_next_encoded_char(mor->esr); if (cc == (GtUchar) SEPARATOR) { Pv = ~0UL; Mv = 0UL; score = patternlength; } else { if (cc == (GtUchar) WILDCARD) { Eq = 0; } else { Eq = mor->eqsvectorrev[(unsigned long) cc]; /* 6 */ } Xv = Eq | Mv; /* 7 */ Xh = (((Eq & Pv) + Pv) ^ Pv) | Eq; /* 8 */ Ph = Mv | ~ (Xh | Pv); /* 9 */ Mh = Pv & Xh; /* 10 */ if (Ph & Ebit) { score++; } else { if (Mh & Ebit) { gt_assert(score > 0); score--; } } Ph <<= 1; /* 15 */ Pv = (Mh << 1) | ~ (Xv | Ph); /* 17 */ Mv = Ph & Xv; /* 18 */ if (score <= maxdistance) { unsigned long dbstartpos = GT_REVERSEPOS(mor->totallength,pos); Definedunsignedlong matchlength; if (maxdistance > 0) { matchlength = gt_forwardprefixmatch(mor->encseq, mor->alphasize, dbstartpos, mor->nowildcards, mor->eqsvector, pattern, patternlength, maxdistance); } else { matchlength.defined = true; matchlength.valueunsignedlong = patternlength; } gt_assert(matchlength.defined || mor->nowildcards); if (matchlength.defined) { match.dbstartpos = dbstartpos; match.dblen = (unsigned long) matchlength.valueunsignedlong; match.distance = score; mor->processmatch(mor->processmatchinfo,&match); } } } } } genometools-1.5.1/src/match/myersapm.h000066400000000000000000000031471211610345200177420ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MYERSAPM_H #define MYERSAPM_H #include "core/encseq.h" #include "procmatch.h" typedef struct Myersonlineresources Myersonlineresources; Myersonlineresources *gt_newMyersonlineresources( unsigned int numofchars, bool nowildcards, const GtEncseq *encseq, ProcessIdxMatch processmatch, void *processmatchinfo); void gt_freeMyersonlineresources( Myersonlineresources *ptrmyersonlineresources); void gt_edistmyersbitvectorAPM(Myersonlineresources *mor, const GtUchar *pattern, unsigned long patternlength, unsigned long maxdistance); #endif genometools-1.5.1/src/match/nullcols.c000066400000000000000000000051721211610345200177330ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/types_api.h" #include "core/ma_api.h" typedef struct { unsigned long *endindex, *positions; } Charatpos; Charatpos *gt_newCharatpos(unsigned long patternlength,unsigned int alphasize) { Charatpos *catpos; catpos = gt_malloc(sizeof (*catpos)); catpos->endindex = gt_malloc(sizeof (unsigned long) * alphasize); catpos->positions = gt_malloc(sizeof (unsigned long) * patternlength); return catpos; } Charatpos *gt_reinitCharatpos(Charatpos *catpos, const GtUchar *pattern,unsigned long patternlength, unsigned int alphasize) { const GtUchar *pptr; unsigned long partialsum, tmp; unsigned int idx; for (idx=0; idxendindex[idx] = 0; } for (pptr=pattern; pptrendindex[(int) *pptr]++; } partialsum = catpos->endindex[0]; catpos->endindex[0] = 0; for (idx=1U; idxendindex[idx]; catpos->endindex[idx] = partialsum; partialsum += tmp; } for (pptr=pattern; pptrpositions[catpos->endindex[*pptr]++] = (unsigned long) (pptr - pattern); } return catpos; } void gt_wrapCharatpos(Charatpos **catposptr) { Charatpos *catpos = *catposptr; gt_free(catpos->endindex); gt_free(catpos->positions); gt_free(catpos); *catposptr = NULL; } void gt_maintainnullcols(const Charatpos *catpos, unsigned long *front0,GtUchar cc,unsigned long depth) { unsigned long idx; for (idx = (cc == 0) ? 0 : catpos->endindex[cc-1]; idx < catpos->endindex[cc]; idx++) { unsigned long pos = catpos->positions[idx]; if (front0[pos] == depth) { front0[pos]++; } } } genometools-1.5.1/src/match/optionargmode.c000066400000000000000000000076101211610345200207460ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "optionargmode.h" #include "core/unused_api.h" int gt_optionargaddbitmask(const Optionargmodedesc *modedesc, size_t numberofentries, unsigned int *mode, const char *optname, const char *optionargument, GtError *err) { size_t modecount; gt_error_check(err); for (modecount=0; modecount < numberofentries; modecount++) { if (strcmp(optionargument,modedesc[modecount].name) == 0) { if (*mode & modedesc[modecount].bitmask) { gt_error_set(err,"argument \"%s\" to option %s already specified", modedesc[modecount].name,optname); return -1; } *mode |= modedesc[modecount].bitmask; return 0; } } gt_error_set(err,"illegal argument \"%s\" to option %s", optionargument,optname); return -2; } int gt_optionargsetsingle(const Optionargmodedesc *modedesc, size_t numberofentries, const char *optname, const char *optionargument, GtError *err) { size_t modecount; gt_error_check(err); for (modecount=0; modecount < numberofentries; modecount++) { if (strcmp(optionargument,modedesc[modecount].name) == 0) { return (int) modedesc[modecount].bitmask; } } gt_error_set(err,"illegal argument \"%s\" to option %s", optionargument,optname); return -1; } GtStr *gt_getargmodekeywords(const Optionargmodedesc *modedesc, size_t numberofentries, const char *what) { GtStr *helpstring; size_t idx, modecount, len, maxlen = 0; GT_UNUSED size_t spacelen; const char *space = " "; for (modecount=0; modecount < numberofentries; modecount++) { len = strlen(modedesc[modecount].name); if (maxlen < len) { maxlen = len; } } helpstring = gt_str_new_cstr("use combination of the following keywords " "to specify "); gt_str_append_cstr(helpstring,what); gt_str_append_cstr(helpstring,"\n"); spacelen = strlen(space); for (modecount=0; modecount < numberofentries; modecount++) { gt_str_append_cstr(helpstring,modedesc[modecount].name); gt_str_append_cstr(helpstring,space); len = strlen(modedesc[modecount].name); for (idx=0; idx Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef OPTIONARGMODE_H #define OPTIONARGMODE_H #include "core/str_api.h" #include "core/error_api.h" typedef struct { const char *name, *desc; unsigned int bitmask; } Optionargmodedesc; int gt_optionargaddbitmask(const Optionargmodedesc *modedesc, size_t numberofentries, unsigned int *mode, const char *optname, const char *optionargument, GtError *err); int gt_optionargsetsingle(const Optionargmodedesc *modedesc, size_t numberofentries, const char *optname, const char *optionargument, GtError *err); GtStr *gt_getargmodekeywords(const Optionargmodedesc *modedesc, size_t numberofentries, const char *what); void gt_getsetargmodekeywords(const Optionargmodedesc *modedesc, size_t numberofentries, unsigned int bitfield); #endif genometools-1.5.1/src/match/pck-count-nodes.c000066400000000000000000000113611211610345200211060ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/array2dim_api.h" #include "core/divmodmul.h" #include "core/log_api.h" #include "core/logger.h" #include "core/stack-inlined.h" #include "core/unused_api.h" #include "match/eis-voiditf.h" #include "match/pck-count-nodes.h" static void visit_count_children(const FMindex *index, Nodecount *parent, GtStackNodecount *stack, Mbtab *tmpmbtab, unsigned long *rangeOccs, GT_UNUSED unsigned int numofchars) { unsigned long rangesize, idx, num_special; unsigned int offset; Nodecount child; gt_assert(parent->lower < parent->upper); rangesize = gt_bwtrangesplitallwithoutspecial(tmpmbtab, rangeOccs, index, parent->lower, parent->upper); gt_assert(rangesize <= (unsigned long) numofchars); offset = 0U; num_special = parent->upper - parent->lower; for (idx = 0; idx < rangesize; idx++) { child.lower = tmpmbtab[idx].lowerbound; child.upper = tmpmbtab[idx].upperbound; child.leaves = 0UL; child.branching = 1UL; child.parentOffset = offset + 1U; child.visited = false; child.on_branch = false; /* check if child is part of a branch */ if (child.upper - child.lower == parent->upper - parent->lower) { /* XXX do sth with non branching nodes */ child.on_branch = true; parent->branching--; GT_STACK_PUSH(stack, child); num_special = 0UL; offset++; } else { /* we found a leave on parent*/ if (child.lower + 1 == child.upper) { parent->leaves++; num_special--; } else /* child is a branch of parent node */ { if (child.lower == child.upper) { /* do nothing, this is no node, this is a missing char */ } else { GT_STACK_PUSH(stack, child); offset++; num_special -= (child.upper - child.lower); } } } } parent->leaves += num_special; } static void process_count_node(GtStackNodecount *stack, Nodecount *current) { Nodecount *parent; parent = &(stack->space[stack->nextfree - current->parentOffset]); parent->leaves += current->leaves; parent->branching += current->branching; } void gt_pck_count_nodes_dfs(const FMindex *index, unsigned long totallength, unsigned int numofchars) { GtStackNodecount stack; Nodecount root; Nodecount *current; Mbtab *tmpmbtab; unsigned long *rangeOccs; unsigned long resize = 128UL; /* XXX make this user definable, or dependable * on input data */ GT_STACK_INIT(&stack, resize); rangeOccs = gt_malloc(sizeof (*rangeOccs) * GT_MULT2(numofchars)); tmpmbtab = gt_malloc(sizeof (*tmpmbtab) * numofchars); root.lower = 0UL; root.upper = totallength + 1; root.leaves = 0UL; root.branching = 1UL; root.parentOffset = 0U; root.visited = false; root.on_branch = false; GT_STACK_PUSH(&stack, root); while (!GT_STACK_ISEMPTY(&stack)) { current = &(stack.space[stack.nextfree -1]); if (current->visited) { current = &(GT_STACK_POP(&stack)); if GT_STACK_ISEMPTY(&stack) { /* XXX change to gt_loger_log */ gt_log_log("on root:\n %lu branching nodes\n %lu leaves\n", current->branching, current->leaves); } else { process_count_node(&stack, current); } } else { visit_count_children(index, current, &stack, tmpmbtab, rangeOccs, numofchars); current->visited = true; } } gt_free(rangeOccs); gt_free(tmpmbtab); GT_STACK_DELETE(&stack); } genometools-1.5.1/src/match/pck-count-nodes.h000066400000000000000000000025051211610345200211130ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef PCK_COUNT_NODES_H #define PCK_COUNT_NODES_H #include #include "core/stack-inlined.h" #include "match/eis-voiditf.h" typedef struct Nodecount_tag { unsigned long leaves, branching, lower, upper; unsigned int parentOffset; bool visited, on_branch; } Nodecount; GT_STACK_DECLARESTRUCT(Nodecount, 256UL); void gt_pck_count_nodes_dfs(const FMindex *index, unsigned long totallength, unsigned int numofchars); #endif genometools-1.5.1/src/match/pckbucket.c000066400000000000000000000221251211610345200200500ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/fa.h" #include "core/divmodmul.h" #include "core/xansi_api.h" #include "core/fileutils_api.h" #include "core/chardef.h" #include "eis-voiditf.h" #include "pckbucket.h" #include "initbasepower.h" typedef struct { unsigned long lowerbound, upperbound; unsigned int depth; GtCodetype code; } Pckbck_Boundsatdepth; GT_DECLAREARRAYSTRUCT(Pckbck_Boundsatdepth); struct Pckbuckettable { unsigned int numofchars, maxdepth; unsigned long numofvalues, maxnumofvalues; Mbtab **mbtab; void *mapptr; GtCodetype *basepower; }; static void pckbuckettable_settaboffsets(Pckbuckettable *pckbt) { unsigned int idx; gt_assert(pckbt != NULL); for (idx=0; idxmaxdepth; idx++) { pckbt->mbtab[idx+1] = pckbt->mbtab[idx] + pckbt->basepower[idx]; } } static Pckbuckettable *pckbuckettable_allocandinittable(unsigned int numofchars, unsigned int maxdepth, bool writemode) { Mbtab *cptr; unsigned int idx; Pckbuckettable *pckbt; pckbt = gt_malloc(sizeof (Pckbuckettable)); pckbt->basepower = gt_initbasepower(numofchars,maxdepth); pckbt->numofchars = numofchars; pckbt->maxdepth = maxdepth; pckbt->maxnumofvalues = pckbt->numofvalues = 0; for (idx=0; idx <= maxdepth; idx++) { /*printf("basepower[%u]=%lu\n",idx,pckbt->basepower[idx]); */ pckbt->maxnumofvalues += pckbt->basepower[idx]; } pckbt->mbtab = gt_malloc(sizeof (Mbtab *) * (maxdepth+1)); if (writemode) { pckbt->mapptr = NULL; pckbt->mbtab[0] = gt_malloc(sizeof (Mbtab) * pckbt->maxnumofvalues); /* printf("allocated = %u * %lu\n",sizeof (Mbtab),pckbt->maxnumofvalues); */ for (cptr = pckbt->mbtab[0]; cptr < pckbt->mbtab[0] + pckbt->maxnumofvalues; cptr++) { cptr->lowerbound = cptr->upperbound = 0; } pckbuckettable_settaboffsets(pckbt); } return pckbt; } void gt_pckbuckettable_delete(Pckbuckettable *pckbt) { gt_assert(pckbt != NULL); if (pckbt->mapptr == NULL) { gt_free(pckbt->mbtab[0]); } else { gt_fa_xmunmap(pckbt->mapptr); } pckbt->mbtab[0] = NULL; gt_free(pckbt->mbtab); pckbt->mbtab = NULL; gt_free(pckbt->basepower); pckbt->basepower = NULL; gt_free(pckbt); } static void pckbuckettable_storeBoundsatdepth(Pckbuckettable *pckbt, const Pckbck_Boundsatdepth *bd) { gt_assert(bd != NULL && pckbt != NULL); gt_assert(bd->depth <= pckbt->maxdepth); gt_assert(bd->code <= pckbt->basepower[bd->depth]); /* printf("bd->depth=%u,bd->code=%lu\n",bd->depth,bd->code); */ gt_assert(pckbt->mbtab[bd->depth][bd->code].lowerbound == 0 && pckbt->mbtab[bd->depth][bd->code].upperbound == 0); gt_assert(pckbt->numofvalues < pckbt->maxnumofvalues); pckbt->numofvalues++; pckbt->mbtab[bd->depth][bd->code].lowerbound = bd->lowerbound; pckbt->mbtab[bd->depth][bd->code].upperbound = bd->upperbound; } static void pckbuckettable_followleafedge(Pckbuckettable *pckbt, const FMindex *fmindex, const Pckbck_Boundsatdepth *bd) { Bwtseqcontextiterator *bsci; GtUchar cc; Pckbck_Boundsatdepth bdleaf; gt_assert(bd != NULL); bdleaf.code = bd->code; bdleaf.depth = bd->depth; bdleaf.lowerbound = bd->lowerbound; bsci = gt_Bwtseqcontextiterator_new(fmindex,bdleaf.lowerbound); while (bdleaf.depth < pckbt->maxdepth) { bdleaf.depth++; cc = gt_Bwtseqcontextiterator_next(&bdleaf.lowerbound,bsci); if (ISSPECIAL(cc)) { break; } bdleaf.code = bdleaf.code * pckbt->numofchars + cc; bdleaf.upperbound = bdleaf.lowerbound+1; pckbuckettable_storeBoundsatdepth(pckbt,&bdleaf); } gt_Bwtseqcontextiterator_delete(bsci); bsci = NULL; } Pckbuckettable *gt_pckbuckettable_new(const FMindex *fmindex, unsigned int numofchars, unsigned long totallength, unsigned int maxdepth) { GtArrayPckbck_Boundsatdepth stack; Pckbck_Boundsatdepth parent, child; unsigned long rangesize, idx, *rangeOccs; Pckbuckettable *pckbt; Mbtab *tmpmbtab; GT_INITARRAY(&stack,Pckbck_Boundsatdepth); child.lowerbound = 0; child.upperbound = totallength+1; child.depth = 0; child.code = (GtCodetype) 0; GT_STOREINARRAY(&stack,Pckbck_Boundsatdepth,128,child); rangeOccs = gt_malloc(sizeof (*rangeOccs) * GT_MULT2(numofchars)); tmpmbtab = gt_malloc(sizeof (*tmpmbtab) * numofchars); pckbt = pckbuckettable_allocandinittable(numofchars,maxdepth,true); while (stack.nextfreePckbck_Boundsatdepth > 0) { parent = stack.spacePckbck_Boundsatdepth[--stack.nextfreePckbck_Boundsatdepth]; gt_assert(parent.lowerbound < parent.upperbound); rangesize = gt_bwtrangesplitallwithoutspecial(tmpmbtab, rangeOccs, fmindex, parent.lowerbound, parent.upperbound); gt_assert(rangesize <= (unsigned long) numofchars); for (idx = 0; idx < rangesize; idx++) { child.lowerbound = tmpmbtab[idx].lowerbound; child.upperbound = tmpmbtab[idx].upperbound; child.depth = parent.depth + 1; gt_assert(child.depth <= maxdepth); child.code = parent.code * numofchars + idx; pckbuckettable_storeBoundsatdepth(pckbt,&child); if (child.depth < maxdepth) { if (child.lowerbound + 1 < child.upperbound) { GT_STOREINARRAY(&stack,Pckbck_Boundsatdepth,128,child); } else { pckbuckettable_followleafedge(pckbt,fmindex,&child); } } } } GT_FREEARRAY(&stack,Pckbck_Boundsatdepth); gt_free(rangeOccs); gt_free(tmpmbtab); printf("filled: %lu (%.2f)\n",pckbt->numofvalues, (double) pckbt->numofvalues/pckbt->maxnumofvalues); return pckbt; } #define PCKBUCKETTABLE ".pbt" int gt_pckbuckettable_2file(const char *indexname, const Pckbuckettable *pckbuckettable, GtError *err) { FILE *fp; unsigned long seqposmaxdepth; gt_error_check(err); fp = gt_fa_fopen_with_suffix(indexname,PCKBUCKETTABLE,"wb",err); if (fp == NULL) { return -1; } seqposmaxdepth = (unsigned long) pckbuckettable->maxdepth; gt_xfwrite(&seqposmaxdepth,sizeof (unsigned long),(size_t) 1,fp); gt_xfwrite(pckbuckettable->mbtab[0],sizeof (Mbtab), (size_t) pckbuckettable->maxnumofvalues,fp); gt_fa_fclose(fp); return 0; } bool gt_pckbuckettable_exists(const char *indexname) { GtStr *tmpfilename; bool retval; tmpfilename = gt_str_new_cstr(indexname); gt_str_append_cstr(tmpfilename,PCKBUCKETTABLE); retval = gt_file_exists(gt_str_get(tmpfilename)); gt_str_delete(tmpfilename); return retval; } Pckbuckettable *gt_pckbuckettable_map(const char *indexname, unsigned int numofchars, GtError *err) { size_t numofbytes; void *mapptr; unsigned int maxdepth; Pckbuckettable *pckbt; gt_error_check(err); mapptr = gt_fa_mmap_read_with_suffix(indexname,PCKBUCKETTABLE, &numofbytes,err); if (mapptr == NULL) { return NULL; } maxdepth = (unsigned int) ((unsigned long *) mapptr)[0]; pckbt = pckbuckettable_allocandinittable(numofchars,maxdepth,false); pckbt->mapptr = mapptr; pckbt->mbtab[0] = (Mbtab *) (((unsigned long *) mapptr) + 1); pckbuckettable_settaboffsets(pckbt); gt_assert(numofbytes == sizeof (unsigned long) + sizeof (Mbtab) * pckbt->maxnumofvalues); return pckbt; } unsigned int gt_pckbuckettable_maxdepth_get( const Pckbuckettable *pckbuckettable) { gt_assert(pckbuckettable != NULL); return pckbuckettable->maxdepth; } unsigned int gt_pckbuckettable_numofchars_get( const Pckbuckettable *pckbuckettable) { gt_assert(pckbuckettable != NULL); return pckbuckettable->numofchars; } const void *gt_pckbuckettable_mbtab_get(const Pckbuckettable *pckbuckettable) { gt_assert(pckbuckettable != NULL); return (const void *) pckbuckettable->mbtab; } genometools-1.5.1/src/match/pckbucket.h000066400000000000000000000040521211610345200200540ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef PCKBUCKET_H #define PCKBUCKET_H #include "core/str.h" #include "core/error.h" #include "core/codetype.h" #include "eis-voiditf.h" #include "splititv.h" typedef struct Pckbuckettable Pckbuckettable; void gt_pckbuckettable_delete(Pckbuckettable *pckbt); Pckbuckettable *gt_pckbuckettable_new(const FMindex *fmindex, unsigned int numofchars, unsigned long totallength, unsigned int maxdepth); int gt_pckbuckettable_2file(const char *indexname, const Pckbuckettable *pckbuckettable, GtError *err); bool gt_pckbuckettable_exists(const char *indexname); Pckbuckettable *gt_pckbuckettable_map(const char *indexname, unsigned int numofchars, GtError *err); unsigned int gt_pckbuckettable_maxdepth_get(const Pckbuckettable *pckbuckettable); const void *gt_pckbuckettable_mbtab_get(const Pckbuckettable *pckbuckettable); unsigned int gt_pckbuckettable_numofchars_get( const Pckbuckettable *pckbuckettable); #endif genometools-1.5.1/src/match/pckdfs.c000066400000000000000000000177051211610345200173570ustar00rootroot00000000000000/* Copyright (c) 2010 Stefan Kurtz Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/divmodmul.h" #include "eis-voiditf.h" #include "pckdfs.h" typedef struct { union { struct { unsigned long lowerbound, upperbound; GtUchar inchar; } pckitv; unsigned long remainingspecial; } either; unsigned long depth, lcpnodedepth; bool isinterval; } Dfs_Boundsatdepth; GT_DECLAREARRAYSTRUCT(Dfs_Boundsatdepth); static unsigned long dfsnonspecialwidth(const GtArrayBoundswithchar *bwci) { unsigned long idx, addwidth = 0; for (idx = 0; idx < bwci->nextfreeBoundswithchar; idx++) { addwidth += bwci->spaceBoundswithchar[idx].rbound - bwci->spaceBoundswithchar[idx].lbound; } return addwidth; } #undef SKDEBUG #ifdef SKDEBUG static void showcurrentpath(const GtArrayGtUchar *currentpath) { unsigned long idx; printf("path="); for (idx = 0; idx < currentpath->nextfreeGtUchar; idx++) { printf("%u ",(unsigned int) currentpath->spaceGtUchar[idx]); } printf("\n"); } static void showDfs_Boundsatdepth(const char *kind,const Dfs_Boundsatdepth *bd) { printf("%s ",kind); if (bd->isinterval) { printf("l=%lu u=%lu i=%u d=%lu\n",bd->either.pckitv.lowerbound, bd->either.pckitv.upperbound, (unsigned int) bd->either.pckitv.inchar, bd->depth); } else { printf("w=%lu d=%lu\n",bd->either.remainingspecial,bd->depth); } } #endif int gt_fmindex_dfstraverse(const FMindex *fmindex, unsigned int numofchars, unsigned long totallength, Processlcp processlcp, void *processlcpdata, GtError *err) { GtArrayDfs_Boundsatdepth stack; GtArrayBoundswithchar bwci; Boundswithchar *bwciptr; Dfs_Boundsatdepth parent, child; GtArrayGtUchar currentpath; unsigned long nonspecialwidth, parentwidth, *rangeOccs; bool haserr = false, firstleaf = true; GT_INITARRAY(&stack,Dfs_Boundsatdepth); GT_INITARRAY(¤tpath,GtUchar); bwci.spaceBoundswithchar = gt_malloc(sizeof (*bwci.spaceBoundswithchar) * (numofchars+1)); bwci.nextfreeBoundswithchar = 0; bwci.allocatedBoundswithchar = (unsigned long) (numofchars+1); child.isinterval = true; child.depth = 0; child.lcpnodedepth = 0; child.either.pckitv.lowerbound = 0; child.either.pckitv.upperbound = totallength+1; child.either.pckitv.inchar = (GtUchar) numofchars; /* undefined */ #ifdef SKDEBUG showDfs_Boundsatdepth("push",&child); #endif GT_STOREINARRAY(&stack,Dfs_Boundsatdepth,128,child); rangeOccs = gt_malloc(sizeof (*rangeOccs) * GT_MULT2(numofchars)); while (!haserr && stack.nextfreeDfs_Boundsatdepth > 0) { parent = stack.spaceDfs_Boundsatdepth[--stack.nextfreeDfs_Boundsatdepth]; #ifdef SKDEBUG showDfs_Boundsatdepth("pop",&parent); #endif if (!parent.isinterval) { gt_assert(parent.depth > 0); if (processlcp != NULL) { unsigned long idx; for (idx = 0; idx 0) { gt_assert(parent.either.pckitv.inchar < (GtUchar) numofchars); if (parent.depth - 1 >= currentpath.allocatedGtUchar) { currentpath.allocatedGtUchar += 32UL; currentpath.spaceGtUchar = gt_realloc(currentpath.spaceGtUchar, sizeof (*currentpath.spaceGtUchar) * currentpath.allocatedGtUchar); } gt_assert(currentpath.spaceGtUchar != NULL); currentpath.spaceGtUchar[parent.depth - 1] = parent.either.pckitv.inchar; currentpath.nextfreeGtUchar = parent.depth; #ifdef SKDEBUG showcurrentpath(¤tpath); #endif } parentwidth = parent.either.pckitv.upperbound - parent.either.pckitv.lowerbound; if (parentwidth == 1UL) { if (!firstleaf) { if (processlcp != NULL) { if (processlcp(processlcpdata,parent.lcpnodedepth,err) != 0) { haserr = true; } } } else { firstleaf = false; } } else { gt_assert(parentwidth >= 2UL); gt_bwtrangesplitwithoutspecial(&bwci,rangeOccs,fmindex, parent.either.pckitv.lowerbound, parent.either.pckitv.upperbound); nonspecialwidth = dfsnonspecialwidth(&bwci); #ifdef SKDEBUG printf("split %lu %lu into %lu intervals of width %lu\n", parent.either.pckitv.lowerbound, parent.either.pckitv.upperbound, bwci.nextfreeBoundswithchar, nonspecialwidth); #endif gt_assert(nonspecialwidth <= parentwidth); if (nonspecialwidth < parentwidth) { child.isinterval = false; child.depth = parent.depth + 1; child.either.remainingspecial = parentwidth - nonspecialwidth; if (bwci.nextfreeBoundswithchar > 0) { child.lcpnodedepth = parent.depth; } else { child.lcpnodedepth = parent.lcpnodedepth; } #ifdef SKDEBUG showDfs_Boundsatdepth("special push",&child); #endif GT_STOREINARRAY(&stack,Dfs_Boundsatdepth,128,child); } gt_assert(bwci.spaceBoundswithchar != NULL); for (bwciptr = bwci.spaceBoundswithchar+bwci.nextfreeBoundswithchar-1; bwciptr >= bwci.spaceBoundswithchar; bwciptr--) { child.isinterval = true; child.depth = parent.depth + 1; child.either.pckitv.lowerbound = bwciptr->lbound; child.either.pckitv.upperbound = bwciptr->rbound; if (bwciptr > bwci.spaceBoundswithchar) { child.lcpnodedepth = parent.depth; } else { child.lcpnodedepth = parent.lcpnodedepth; } gt_assert(bwciptr->inchar < (GtUchar) numofchars); child.either.pckitv.inchar = bwciptr->inchar; gt_assert(child.either.pckitv.lowerbound < child.either.pckitv.upperbound); #ifdef SKDEBUG showDfs_Boundsatdepth("push",&child); #endif GT_STOREINARRAY(&stack,Dfs_Boundsatdepth,128,child); } } } } GT_FREEARRAY(&stack,Dfs_Boundsatdepth); GT_FREEARRAY(&bwci,Boundswithchar); GT_FREEARRAY(¤tpath,GtUchar); gt_free(rangeOccs); return haserr ? -1 : 0; } genometools-1.5.1/src/match/pckdfs.h000066400000000000000000000024261211610345200173560ustar00rootroot00000000000000/* Copyright (c) 2010 Stefan Kurtz Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef PCKDFS_H #define PCKDFS_H #include "eis-voiditf.h" typedef int (*Processlcp)(void *processinfo,unsigned long lcp,GtError *err); int gt_fmindex_dfstraverse(const FMindex *fmindex, unsigned int numofchars, unsigned long totallength, Processlcp processlcp, void *processlcpdata, GtError *err); #endif genometools-1.5.1/src/match/procmatch.h000066400000000000000000000030301211610345200200540ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef PROCMATCH_H #define PROCMATCH_H #include "core/types_api.h" typedef struct { bool dbabsolute; unsigned long dbseqnum; unsigned long dbstartpos, dblen; const GtUchar *dbsubstring; unsigned long querystartpos, querylen, distance; const void *alignment; } GtIdxMatch; typedef void (*ProcessIdxMatch)(void *processinfo, const GtIdxMatch *match); typedef void (*Processresult)(void *, const void *, unsigned long, unsigned long, unsigned long, unsigned long); #endif genometools-1.5.1/src/match/prsqualint.c000066400000000000000000000062511211610345200203010ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #endif #include #include #include #include #include "core/ma_api.h" #include "core/error_api.h" #include "prsqualint.h" #define ERRORMSG\ "argument \"%s\" of option %s must be positive number "\ "possibly followed by character %c or %c; if the "\ "number is followed by character %c, then it must be "\ " <= 100" #define ERRORLPARAM\ if (err != NULL)\ {\ gt_error_set(err,ERRORMSG,lparam,option,BESTCHARACTER,\ PERCENTAWAYCHARACTER,\ PERCENTAWAYCHARACTER);\ } else\ {\ fprintf(stderr,ERRORMSG,lparam,option,BESTCHARACTER,\ PERCENTAWAYCHARACTER,\ PERCENTAWAYCHARACTER);\ } Qualifiedinteger *gt_parsequalifiedinteger(const char *option, const char *lparam, GtError *err) { long readint; size_t i; char *lparamcopy; bool haserr = false; Qualifiedinteger *qualint; lparamcopy = gt_malloc(sizeof (char) * (strlen(lparam)+1)); qualint = gt_malloc(sizeof (*qualint)); strcpy(lparamcopy,lparam); for (i=0; lparamcopy[i] != '\0'; i++) { if (!isdigit((int) lparamcopy[i]) && lparamcopy[i] != BESTCHARACTER && lparamcopy[i] != PERCENTAWAYCHARACTER) { ERRORLPARAM; haserr = true; break; } } if (!haserr && i == 0) { ERRORLPARAM; haserr = true; } if (!haserr) { if (lparamcopy[i-1] == BESTCHARACTER) { lparamcopy[i-1] = '\0'; qualint->qualtag = Qualbestof; } else { if (lparamcopy[i-1] == PERCENTAWAYCHARACTER) { lparamcopy[i-1] = '\0'; qualint->qualtag = Qualpercentaway; } else { qualint->qualtag = Qualabsolute; } } if (sscanf(lparamcopy,"%ld",&readint) != 1 || readint <= 0) { ERRORLPARAM; haserr = true; } } if (!haserr && (qualint->qualtag == Qualpercentaway || qualint->qualtag == Qualbestof)) { if (readint > 100L) { ERRORLPARAM; haserr = true; } } qualint->integervalue = (unsigned long) readint; gt_free(lparamcopy); if (haserr) { gt_free (qualint); return NULL; } return qualint; } genometools-1.5.1/src/match/prsqualint.h000066400000000000000000000025241211610345200203050ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef PRSQUALINT_H #define PRSQUALINT_H #include "core/error_api.h" #define BESTCHARACTER 'b' #define PERCENTAWAYCHARACTER 'p' typedef enum { Qualabsolute, Qualpercentaway, Qualbestof } Qualificationtag; typedef struct { Qualificationtag qualtag; unsigned long integervalue; } Qualifiedinteger; Qualifiedinteger *gt_parsequalifiedinteger(const char *option, const char *lparam, GtError *err); #endif genometools-1.5.1/src/match/pssm.c000066400000000000000000000076521211610345200170670ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/assert_api.h" #include "core/types_api.h" #include "core/chardef.h" #include "core/ma_api.h" #include "core/arraydef.h" #include "core/encseq.h" #include "absdfstrans-imp.h" typedef int ProfScore; #define SHOWProfScore(FP,VAL) fprintf(FP,"%d",VAL) #define GETPROFSCORE(S,A,D) (S)->scoretab[A][D] typedef struct { unsigned long dimension, numofcharacters; ProfScore *itmthreshold, /* intermediate thresholds */ maxtotalscore, /* the maximum score */ mintotalscore, /* the minimum score */ **scoretab; /* the scores */ } Profilematrix; void gt_showProfilematrix(const Profilematrix *prof, const GtUchar *characters) { unsigned long d, a; printf("# %lu x %lu matrix\n",prof->numofcharacters, prof->dimension); printf("# mintotalscore="); SHOWProfScore(stdout,prof->mintotalscore); printf("\n"); printf("# maxtotalscore="); SHOWProfScore(stdout,prof->maxtotalscore); printf("\n"); printf(" "); for (a = 0; a < prof->numofcharacters; a++) { printf("%c",(int) characters[a]); printf("%s",(a < prof->numofcharacters - 1) ? " " : "\n"); } for (d = 0; d < prof->dimension; d++) { for (a = 0; a < prof->numofcharacters; a++) { SHOWProfScore(stdout,GETPROFSCORE(prof,a,d)); printf("%s",(a < prof->numofcharacters - 1) ? " " : " \n"); } } } void gt_makeitmthresholds(Profilematrix *prof, ProfScore minscore) { unsigned long d, a; long ddown; ProfScore partsum, score, *maxscore; maxscore = gt_malloc(sizeof *maxscore * prof->dimension); for (d=0; ddimension; d++) { for (a=0; anumofcharacters; a++) { score = GETPROFSCORE(prof,a,d); if (a == 0 || maxscore[d] < score) { maxscore[d] = score; } } } partsum = (ProfScore) 0; gt_assert(prof->itmthreshold != NULL); for (ddown = (long) (prof->dimension-1); ddown>=0; ddown--) { prof->itmthreshold[ddown] = minscore - partsum; partsum += maxscore[ddown]; } gt_free(maxscore); } void gt_lookaheadsearchPSSM(const GtEncseq *encseq, const Profilematrix *prof) { unsigned long firstpos, bufsize; GtUchar currentchar; unsigned long pos; GtEncseqReader *esr; unsigned long totallength = gt_encseq_total_length(encseq); GtUchar *buffer; esr = gt_encseq_create_reader_with_readmode(encseq,GT_READMODE_FORWARD,0); buffer = gt_malloc(sizeof *buffer * prof->dimension); firstpos = bufsize = 0; for (pos=0; pos < totallength; pos++) { currentchar = gt_encseq_reader_next_encoded_char(esr); if (ISSPECIAL(currentchar)) { bufsize = firstpos = 0; } else { if (bufsize < prof->dimension) { buffer[bufsize++] = currentchar; } else { buffer[firstpos++] = currentchar; if (firstpos == prof->dimension) { firstpos = 0; } } } } gt_encseq_reader_delete(esr); gt_free(buffer); } genometools-1.5.1/src/match/qgram2code.h000066400000000000000000000027171211610345200201330ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef QGRAM2CODE_H #define QGRAM2CODE_H #include "core/types_api.h" #include "core/chardef.h" #include "core/codetype.h" static inline unsigned int qgram2code(GtCodetype *code, const GtCodetype **multimappower, unsigned int qvalue, const GtUchar *qgram) { int i; GtCodetype tmpcode = 0; GtUchar a; for (i=(int) (qvalue-1); i>=0; i--) { a = qgram[i]; if (ISSPECIAL(a)) { return (unsigned int) i; } tmpcode += multimappower[i][a]; } *code = tmpcode; return qvalue; } #endif genometools-1.5.1/src/match/qsort-array.gen000066400000000000000000000142511211610345200207110ustar00rootroot00000000000000#include #include "core/minmax.h" #include "core/divmodmul.h" #include "core/stack-inlined.h" /* * Qsort routine from Bentley & McIlroy's ``Engineering a Sort Function''. */ #ifndef GT_QSORT_ARR_SWAP #define GT_QSORT_ARR_SWAP(ARR,A,B)\ if ((A) != (B))\ {\ tmp = QSORTNAME(ARRAY_GET)(ARR,A);\ QSORTNAME(ARRAY_SET)(ARR,A,QSORTNAME(ARRAY_GET)(ARR,B));\ QSORTNAME(ARRAY_SET)(ARR,B,tmp);\ } #endif #ifndef GT_QSORT_ARR_VECSWAP #define GT_QSORT_ARR_VECSWAP(ARR,A,B,N)\ aidx = A;\ bidx = B;\ while ((N)-- > 0)\ {\ tmp = QSORTNAME(ARRAY_GET)(ARR,aidx);\ QSORTNAME(ARRAY_SET)(ARR,aidx,QSORTNAME(ARRAY_GET)(ARR,bidx));\ QSORTNAME(ARRAY_SET)(ARR,bidx,tmp);\ aidx++;\ bidx++;\ } #endif static inline unsigned long QSORTNAME(gt_inlined_qsort_arr_r_med3) (const QSORTNAME(Sorttype) *arr,unsigned long a, unsigned long b, unsigned long c, QSORTNAME(Datatype) data) { return QSORTNAME(qsortcmparr) (arr, a, b, data) < 0 ? (QSORTNAME(qsortcmparr) (arr, b, c, data) < 0 ? b : (QSORTNAME(qsortcmparr) (arr, a, c, data) < 0 ? c : a)) : (QSORTNAME(qsortcmparr) (arr, b, c, data) > 0 ? b : (QSORTNAME(qsortcmparr) (arr, a, c, data) < 0 ? a : c)); } #ifndef GT_STACK_INTERVALARRAYTOBESORTED_DEFINED typedef struct { unsigned long startindex, len; } Intervalarrtobesorted; GT_STACK_DECLARESTRUCT(Intervalarrtobesorted,32UL); #define GT_STACK_INTERVALARRAYTOBESORTED_DEFINED #endif static void QSORTNAME(gt_inlinedarr_qsort_r) ( unsigned long insertionsortthreshold, bool handlenotswapped, QSORTNAME(Sorttype) *arr, unsigned long len, QSORTNAME(Datatype) data) { unsigned long tmp, pa, pb, pc, pd, pl, pm, pn, aidx, bidx, s; int r; bool swapped; GtStackIntervalarrtobesorted intervalstack; Intervalarrtobesorted current; GT_STACK_INIT(&intervalstack,32UL); current.startindex = 0; current.len = len; GT_STACK_PUSH(&intervalstack,current); if (insertionsortthreshold <= 2UL) { insertionsortthreshold = 6UL; } while (!GT_STACK_ISEMPTY(&intervalstack)) { swapped = false; current = GT_STACK_POP(&intervalstack); if (current.len <= insertionsortthreshold) { for (pm = current.startindex + 1; pm < current.startindex + current.len; pm++) { for (pl = pm; pl > current.startindex && QSORTNAME(qsortcmparr) (arr, pl - 1, pl, data) > 0; pl--) { GT_QSORT_ARR_SWAP (arr, pl, pl - 1); } } continue; } pm = current.startindex + GT_DIV2 (current.len); if (current.len > 7UL) { pl = current.startindex; pn = current.startindex + current.len - 1; if (current.len > 40UL) { s = GT_DIV8 (current.len); pl = QSORTNAME(gt_inlined_qsort_arr_r_med3) (arr, pl, pl + s, pl + GT_MULT2 (s), data); gt_assert(pm >= s); pm = QSORTNAME(gt_inlined_qsort_arr_r_med3) (arr, pm - s, pm, pm + s, data); gt_assert(pn >= GT_MULT2(s)); pn = QSORTNAME(gt_inlined_qsort_arr_r_med3) (arr, pn - GT_MULT2 (s), pn - s, pn, data); } pm = QSORTNAME(gt_inlined_qsort_arr_r_med3) (arr, pl, pm, pn, data); } GT_QSORT_ARR_SWAP (arr, current.startindex, pm); pa = pb = current.startindex + 1; pc = pd = current.startindex + current.len - 1; while (1) { while (pb <= pc && (r = QSORTNAME(qsortcmparr) (arr, pb, current.startindex, data)) <= 0) { if (r == 0) { swapped = true; GT_QSORT_ARR_SWAP (arr, pa, pb); pa++; } pb++; } while (pb <= pc && (r = QSORTNAME(qsortcmparr) (arr, pc, current.startindex, data)) >= 0) { if (r == 0) { swapped = true; GT_QSORT_ARR_SWAP (arr, pc, pd); gt_assert(pd > 0); pd--; } gt_assert(pc > 0); pc--; } if (pb > pc) { break; } GT_QSORT_ARR_SWAP (arr, pb, pc); swapped = true; pb++; gt_assert(pc > 0); pc--; } /* The following switch is not explained in the above mentioned paper and therefore we ignore it. */ if (handlenotswapped && !swapped) { /* Switch to insertion sort */ gt_assert(current.len <= 40UL); for (pm = current.startindex + 1; pm < current.startindex + current.len; pm++) { for (pl = pm; pl > current.startindex && QSORTNAME(qsortcmparr) (arr, pl - 1, pl, data) > 0; pl--) { GT_QSORT_ARR_SWAP (arr, pl, pl - 1); } } continue; } pn = current.startindex + current.len; gt_assert(pa >= current.startindex); gt_assert(pb >= pa); s = MIN ((unsigned long) (pa - current.startindex), (unsigned long) (pb - pa)); gt_assert(pb >= s); GT_QSORT_ARR_VECSWAP (arr, current.startindex, pb - s, s); gt_assert(pd >= pc); gt_assert(pn > pd); s = MIN ((unsigned long) (pd - pc), (unsigned long) (pn - pd - 1)); gt_assert(pn > s); GT_QSORT_ARR_VECSWAP (arr, pb, pn - s, s); gt_assert(pb >= pa); if ((s = (unsigned long) (pb - pa)) > 1UL) { current.len = s; GT_STACK_PUSH(&intervalstack,current); } gt_assert(pd >= pc); if ((s = (unsigned long) (pd - pc)) > 1UL) { gt_assert(pn >= s); current.startindex = pn - s; current.len = s; GT_STACK_PUSH(&intervalstack,current); } } GT_STACK_DELETE(&intervalstack); } genometools-1.5.1/src/match/qsort-inplace.gen000066400000000000000000000102371211610345200212060ustar00rootroot00000000000000#include #include "core/minmax.h" #include "core/divmodmul.h" #include "core/stack-inlined.h" /* * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function". */ #define GT_QSORT_SWAP(A,B)\ if ((A) != (B))\ {\ tmp = *(A);\ *(A) = *(B);\ *(B) = tmp;\ } #define GT_QSORT_VECSWAP(A,B,N)\ aptr = A;\ bptr = B;\ while ((N)-- > 0)\ {\ tmp = *aptr;\ *aptr++ = *bptr;\ *bptr++ = tmp;\ } static inline Sorttype *gt_inlined_qsort_r_med3 (Sorttype *a, Sorttype *b, Sorttype *c, void *data) { return qsortcmp (a, b, data) < 0 ? (qsortcmp (b, c, data) < 0 ? b : (qsortcmp (a, c, data) < 0 ? c : a)) : (qsortcmp (b, c, data) > 0 ? b : (qsortcmp (a, c, data) < 0 ? a : c)); } typedef struct { Sorttype *startptr; unsigned long len; } Intervaltobesorted; GT_STACK_DECLARESTRUCT(Intervaltobesorted,32UL); static void gt_inlined_qsort_r (Sorttype *arr,unsigned long len,void *data) { Sorttype tmp, *pa, *pb, *pc, *pd, *pl, *pm, *pn, *aptr, *bptr; unsigned long d, minval; int r; bool swapped; GtStackIntervaltobesorted intervalstack; Intervaltobesorted current; GT_STACK_INIT(&intervalstack,16UL); current.startptr = arr; current.len = len; GT_STACK_PUSH(&intervalstack,current); while (!GT_STACK_ISEMPTY(&intervalstack)) { swapped = false; current = GT_STACK_POP(&intervalstack); if (current.len < 7UL) { for (pm = current.startptr + 1; pm < current.startptr + current.len; pm++) { for (pl = pm; pl > current.startptr && qsortcmp (pl - 1, pl, data) > 0; pl--) { GT_QSORT_SWAP (pl, pl - 1); } } continue; } pm = current.startptr + GT_DIV2 (current.len); if (current.len > 7UL) { pl = current.startptr; pn = current.startptr + current.len - 1; if (current.len > 40UL) { d = GT_DIV8 (current.len); pl = gt_inlined_qsort_r_med3 (pl, pl + d, pl + GT_MULT2 (d), data); pm = gt_inlined_qsort_r_med3 (pm - d, pm, pm + d, data); pn = gt_inlined_qsort_r_med3 (pn - GT_MULT2 (d), pn - d, pn, data); } pm = gt_inlined_qsort_r_med3 (pl, pm, pn, data); } GT_QSORT_SWAP (current.startptr, pm); pa = pb = current.startptr + 1; pc = pd = current.startptr + current.len - 1; while (1) { while (pb <= pc && (r = qsortcmp (pb, current.startptr, data)) <= 0) { if (r == 0) { swapped = true; GT_QSORT_SWAP (pa, pb); pa++; } pb++; } while (pb <= pc && (r = qsortcmp (pc, current.startptr, data)) >= 0) { if (r == 0) { swapped = true; GT_QSORT_SWAP (pc, pd); pd--; } pc--; } if (pb > pc) { break; } GT_QSORT_SWAP (pb, pc); swapped = true; pb++; pc--; } if (!swapped) { /* Switch to insertion sort */ for (pm = current.startptr + 1; pm < current.startptr + current.len; pm++) { for (pl = pm; pl > current.startptr && qsortcmp (pl - 1, pl, data) > 0; pl--) { GT_QSORT_SWAP (pl, pl - 1); } } continue; } pn = current.startptr + current.len; minval = MIN ((unsigned long) (pa - current.startptr), (unsigned long) (pb - pa)); GT_QSORT_VECSWAP (current.startptr, pb - minval, minval); minval = MIN ((unsigned long) (pd - pc), (unsigned long) (pn - pd - 1)); GT_QSORT_VECSWAP (pb, pn - minval, minval); if ((minval = (unsigned long) (pb - pa)) > 1UL) { current.len = minval; GT_STACK_PUSH(&intervalstack,current); } if ((minval = (unsigned long) (pd - pc)) > 1UL) { current.startptr = pn - minval; current.len = minval; GT_STACK_PUSH(&intervalstack,current); } } GT_STACK_DELETE(&intervalstack); } genometools-1.5.1/src/match/querymatch.c000066400000000000000000000154741211610345200202700ustar00rootroot00000000000000/* Copyright (c) 2007-2009 Stefan Kurtz Copyright (c) 2007-2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma_api.h" #include "core/unused_api.h" #include "core/types_api.h" #include "core/readmode.h" #include "core/format64.h" #include "core/minmax.h" #include "querymatch.h" struct GtQuerymatch { unsigned long dblen, /* length of match in dbsequence */ querylen, /* same as dblen for exact matches */ dbstart, /* absolute start position of match in database seq */ querystart, /* start of match in query, relative to start of query */ edist; /* 0 for exact match */ long score; /* 0 for exact match */ uint64_t queryseqnum; /* ordinal number of match in query */ GtReadmode readmode; /* readmode by which reference sequence was accessed */ bool selfmatch, /* true if both instances of the match refer to the same sequence */ query_as_reversecopy; /* matched the reverse copy of the query */ }; GtQuerymatch *gt_querymatch_new(void) { return gt_malloc(sizeof (GtQuerymatch)); } void gt_querymatch_fill(GtQuerymatch *querymatch, unsigned long dblen, unsigned long dbstart, GtReadmode readmode, bool query_as_reversecopy, long score, unsigned long edist, bool selfmatch, uint64_t queryseqnum, unsigned long querylen, unsigned long querystart) { querymatch->dblen = dblen; querymatch->dbstart = dbstart; querymatch->readmode = readmode; querymatch->query_as_reversecopy = query_as_reversecopy; querymatch->score = score; querymatch->edist = edist; querymatch->selfmatch = selfmatch; querymatch->queryseqnum = queryseqnum; querymatch->querylen = querylen; querymatch->querystart = querystart; } void gt_querymatch_delete(GtQuerymatch *querymatch) { if (querymatch != NULL) { gt_free(querymatch); } } #ifdef VERIFY static void verifymatch(const GtEncseq *encseq, unsigned long len, unsigned long pos1, uint64_t seqnum2, unsigned long pos2, GtReadmode readmode) { if (readmode == GT_READMODE_REVERSE) { unsigned long offset, seqstartpos, totallength = gt_encseq_total_length(encseq); GtUchar cc1, cc2; seqstartpos = gt_encseq_seqstartpos(encseq, seqnum2); pos2 += seqstartpos; for (offset = 0; offset < len; offset++) { gt_assert(pos1 + len - 1 < totallength); gt_assert(pos2 + len - 1 < totallength); cc1 = gt_encseq_get_encoded_char(encseq,pos1+offset,GT_READMODE_FORWARD); cc2 = gt_encseq_get_encoded_char(encseq,pos2+len-1-offset, GT_READMODE_FORWARD); gt_assert(cc1 == cc2 && ISNOTSPECIAL(cc1)); } if (pos1 + len < totallength) { cc1 = gt_encseq_get_encoded_char(encseq,pos1+len,GT_READMODE_FORWARD); } else { cc1 = SEPARATOR; } if (pos2 > 0) { cc2 = gt_encseq_get_encoded_char(encseq,pos2-1,GT_READMODE_FORWARD); } else { cc2 = SEPARATOR; } gt_assert(cc1 != cc2 || ISSPECIAL(cc1)); } } #endif unsigned long gt_querymatch_dbseqnum(const GtEncseq *encseq, const GtQuerymatch *querymatch) { return gt_encseq_seqnum(encseq,querymatch->dbstart); } int gt_querymatch_output(GT_UNUSED void *info, const GtEncseq *encseq, const GtQuerymatch *querymatch, GT_UNUSED const GtUchar *query, unsigned long query_totallength, GT_UNUSED GtError *err) { const char *outflag = "FRCP"; unsigned long dbseqnum, querystart, dbstart_relative, seqstartpos; gt_assert(encseq != NULL); dbseqnum = gt_querymatch_dbseqnum(encseq,querymatch); seqstartpos = gt_encseq_seqstartpos(encseq, dbseqnum); gt_assert((int) querymatch->readmode < 4); if (querymatch->readmode == GT_READMODE_REVERSE || querymatch->readmode == GT_READMODE_REVCOMPL) { gt_assert(querymatch->querystart + querymatch->querylen <= query_totallength); querystart = query_totallength - querymatch->querystart - querymatch->querylen; } else { querystart = querymatch->querystart; } gt_assert(querymatch->dbstart >= seqstartpos); dbstart_relative = querymatch->dbstart - seqstartpos; if (!querymatch->selfmatch || (uint64_t) dbseqnum != querymatch->queryseqnum || dbstart_relative <= querystart) { #ifdef VERIFY verifymatch(encseq, querymatch->len, querymatch->dbstart, querymatch->queryseqnum, querystart, querymatch->readmode); #endif printf("%lu %lu %lu %c %lu " Formatuint64_t " %lu", querymatch->dblen, dbseqnum, dbstart_relative, outflag[querymatch->readmode], querymatch->querylen, PRINTuint64_tcast(querymatch->queryseqnum), querystart); if (querymatch->score > 0) { double similarity = querymatch->edist == 0 ? 100.0 : 100.0 * (1.0 - querymatch->edist/ (double) MIN(querymatch->dblen,querymatch->querylen)); printf(" %ld %lu %.2f\n",querymatch->score,querymatch->edist,similarity); } else { printf("\n"); } } return 0; } unsigned long gt_querymatch_querylen(const GtQuerymatch *querymatch) { return querymatch->querylen; } unsigned long gt_querymatch_dbstart(const GtQuerymatch *querymatch) { return querymatch->dbstart; } unsigned long gt_querymatch_querystart(const GtQuerymatch *querymatch) { return querymatch->querystart; } uint64_t gt_querymatch_queryseqnum(const GtQuerymatch *querymatch) { return querymatch->queryseqnum; } bool gt_querymatch_queryreverse(const GtQuerymatch *querymatch) { return querymatch->query_as_reversecopy; } genometools-1.5.1/src/match/querymatch.h000066400000000000000000000050301211610345200202600ustar00rootroot00000000000000/* Copyright (c) 2007-2009 Stefan Kurtz Copyright (c) 2007-2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef QUERYMATCH_H #define QUERYMATCH_H #include #include "core/error_api.h" #include "core/readmode.h" #include "core/encseq.h" typedef struct GtQuerymatch GtQuerymatch; GtQuerymatch *gt_querymatch_new(void); void gt_querymatch_fill(GtQuerymatch *querymatch, unsigned long dblen, unsigned long dbstart, GtReadmode readmode, bool query_as_reversecopy, long score, unsigned long edist, bool selfmatch, uint64_t queryseqnum, unsigned long querylen, unsigned long querystart); void gt_querymatch_delete(GtQuerymatch *querymatch); int gt_querymatch_output(void *info, const GtEncseq *encseq, const GtQuerymatch *querymatch, const GtUchar *query, unsigned long query_totallength, GtError *err); unsigned long gt_querymatch_querylen(const GtQuerymatch *querymatch); unsigned long gt_querymatch_dbstart(const GtQuerymatch *querymatch); unsigned long gt_querymatch_querystart(const GtQuerymatch *querymatch); uint64_t gt_querymatch_queryseqnum(const GtQuerymatch *querymatch); const GtUchar *gt_querymatch_querysequence(const GtQuerymatch *querymatch); unsigned long gt_querymatch_querytotallength(const GtQuerymatch *querymatch); unsigned long gt_querymatch_dbseqnum(const GtEncseq *encseq, const GtQuerymatch *querymatch); bool gt_querymatch_queryreverse(const GtQuerymatch *querymatch); #endif genometools-1.5.1/src/match/queue-inline.h000066400000000000000000000137541211610345200205120ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef QUEUE_INLINE_H #define QUEUE_INLINE_H #include #include #include "core/assert_api.h" #include "core/divmodmul.h" typedef struct { GtInl_Queueelem *queuespace; /* the space to store the queue elements */ unsigned long enqueueindex, /* entry into which element is to be enqued */ dequeueindex, /* last element of queue */ queuesize, /* size of the queue */ noofelements; /* no ofelements between enqueueindex+1 and dequeindex */ } GtInl_Queue; typedef int (*GtInl_Queueprocessor)(GtInl_Queueelem *,void *info); /* The following function delivers an empty queue with a reservoir of \texttt{size} elements to be stored in the queue. The reservoir can, if necessary, be enlarged. */ static inline GtInl_Queue *gt_inl_queue_new(unsigned long queuesize) { GtInl_Queue *q; q = gt_malloc(sizeof (*q)); gt_assert(queuesize > 0); q->queuespace = gt_malloc(sizeof (*q->queuespace) * queuesize); q->noofelements = 0; q->queuesize = queuesize; q->dequeueindex = q->enqueueindex = queuesize - 1; return q; } /* The following function frees the space required for the queue. */ static inline void gt_inl_queue_delete(GtInl_Queue *q) { if (q != NULL) { gt_free(q->queuespace); gt_free(q); } } /* The following function returns true iff the queue is empty. */ static inline bool gt_inl_queue_isempty(const GtInl_Queue *q) { gt_assert(q != NULL); return (q->noofelements == 0) ? true : false; } /* The following function resizes the queue by doubling the space reservoir. */ static inline void extendqueuesize(GtInl_Queue *q,bool doublesize) { unsigned long addconst, idx, newsize; gt_assert(q != NULL); if (doublesize) { addconst = q->queuesize; } else { addconst = MIN(1024UL,q->queuesize); } newsize = q->queuesize + addconst; q->queuespace = gt_realloc(q->queuespace,sizeof (*q->queuespace) * newsize); gt_assert(q->enqueueindex == q->dequeueindex); gt_assert(addconst > 0); for (idx=q->queuesize-1; idx>q->enqueueindex; idx--) { q->queuespace[idx+addconst] = q->queuespace[idx]; } q->enqueueindex += addconst; /* printf("from queue of size %lu to queue of size %lu\n",q->queuesize,newsize); printf("now enqueindex=%lu,dequeuindex=%lu\n", q->enqueueindex,q->dequeueindex); */ q->queuesize = newsize; } /* The following function adds an element \texttt{elem} to the end of the queue. */ static inline void gt_inl_queue_add(GtInl_Queue *q, GtInl_Queueelem elem, bool doublesize) { gt_assert(q != NULL); if (q->noofelements == q->queuesize) { extendqueuesize(q,doublesize); } q->noofelements++; q->queuespace[q->enqueueindex] = elem; if (q->enqueueindex > 0) { q->enqueueindex--; } else { q->enqueueindex = q->queuesize - 1; /* dequeuindex < queuesize-1 */ } } /* The following function removes the element \texttt{elem} from the start of the queue. */ static inline GtInl_Queueelem gt_inl_queue_get(GtInl_Queue *q) { GtInl_Queueelem value; gt_assert(q != NULL && q->noofelements > 0); q->noofelements--; value = q->queuespace[q->dequeueindex]; if (q->dequeueindex > 0) { q->dequeueindex--; } else { q->dequeueindex = q->queuesize - 1; /* != enqueueindex, since at least one elem */ } return value; } /*@unused@*/ static inline GtInl_Queueelem *gt_inl_queue_head( const GtInl_Queue *q) { gt_assert(q != NULL && q->noofelements > 0); return q->queuespace + q->dequeueindex; } /*@unused@*/ static inline GtInl_Queueelem *gt_inl_queue_tail( const GtInl_Queue *q) { gt_assert(q != NULL && q->noofelements > 0); if (q->enqueueindex == q->queuesize-1) { return q->queuespace; } return q->queuespace + q->enqueueindex + 1; } /*@unused@*/ static inline void gt_inl_queue_deletehead(GtInl_Queue *q) { gt_assert(q != NULL && q->noofelements > 0); q->noofelements--; if (q->dequeueindex > 0) { q->dequeueindex--; } else { q->dequeueindex = q->queuesize - 1; /* != enqueueindex, since at least one elem */ } } /*@unused@*/ static inline int gt_inl_queue_iterate(const GtInl_Queue *q, GtInl_Queueprocessor queueprocessor, void *info) { gt_assert(q != NULL); if (q->noofelements > 0) { unsigned long idx; if (q->enqueueindex < q->dequeueindex) { for (idx=q->enqueueindex+1; idx<=q->dequeueindex; idx++) { if (queueprocessor(q->queuespace + idx,info) != 0) { return -1; } } } else { for (idx=q->enqueueindex+1; idx<=q->queuesize-1; idx++) { if (queueprocessor(q->queuespace + idx,info) != 0) { return -1; } } for (idx=0; idx<=q->dequeueindex; idx++) { if (queueprocessor(q->queuespace + idx,info) != 0) { return -1; } } } } return 0; } #endif genometools-1.5.1/src/match/radixsort_str.c000066400000000000000000000434611211610345200210120ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/intbits.h" #include "core/ma.h" #include "core/minmax.h" #include "core/stack-inlined.h" #include "core/qsort-ulong.h" #include "sfx-lcpvalues.h" #include "radixsort_str.h" typedef uint8_t gt_radixsort_str_kmercode_t; /* note: if kmercode_t size is changed, then the RADIXSORT_STR_REVCOMPL * macro must be changed to handle the new size too */ typedef uint16_t gt_radixsort_str_bucketnum_t; #define GT_RADIXSORT_STR_UINT8_REVCOMPL(CODE)\ (GT_RADIXSORT_STR_KMERCODE_MAX ^\ (((((CODE) & (3 << 6)) >> 6) | (((CODE) & 3) << 6)) |\ ((((CODE) & (3 << 4)) >> 2) | (((CODE) & (3 << 2)) << 2)))) #define GT_RADIXSORT_STR_REVCOMPL(CODE) GT_RADIXSORT_STR_UINT8_REVCOMPL(CODE) #define GT_RADIXSORT_STR_KMERCODE_BITS\ (sizeof (gt_radixsort_str_kmercode_t) * CHAR_BIT) #define GT_RADIXSORT_STR_KMERSIZE (GT_RADIXSORT_STR_KMERCODE_BITS >> 1) #define GT_RADIXSORT_STR_KMERSIZELOG 2 #define GT_RADIXSORT_STR_NOFKMERCODES (1 << GT_RADIXSORT_STR_KMERCODE_BITS) #define GT_RADIXSORT_STR_KMERCODE_MAX\ ((gt_radixsort_str_kmercode_t)(GT_RADIXSORT_STR_NOFKMERCODES - 1)) #define GT_RADIXSORT_STR_OVERFLOW_MASK ((1 << GT_RADIXSORT_STR_KMERSIZELOG) - 1) #define GT_RADIXSORT_STR_NOFBUCKETS\ (size_t)(((1 << (GT_RADIXSORT_STR_KMERSIZE << 1)) *\ GT_RADIXSORT_STR_KMERSIZE) + 1) #define GT_RADIXSORT_STR_SPECIAL_BUCKET\ ((gt_radixsort_str_bucketnum_t)(GT_RADIXSORT_STR_NOFBUCKETS - 1)) #define GT_RADIXSORT_STR_SPECIAL_BUCKET_BIT\ (1 << (GT_RADIXSORT_STR_KMERCODE_BITS + GT_RADIXSORT_STR_KMERSIZELOG)) #define GT_RADIXSORT_STR_HAS_OVERFLOW(BUCKETNUM)\ (((BUCKETNUM) & GT_RADIXSORT_STR_OVERFLOW_MASK) ||\ ((BUCKETNUM) == GT_RADIXSORT_STR_SPECIAL_BUCKET)) #define GT_RADIXSORT_STR_BUCKETNUM(CODE, OVERFLOW)\ (((gt_radixsort_str_bucketnum_t)\ (CODE) << GT_RADIXSORT_STR_KMERSIZELOG) + (OVERFLOW)) #define GT_RADIXSORT_STR_OVERFLOW_NONSPECIAL(BUCKETNUM)\ ((BUCKETNUM) & GT_RADIXSORT_STR_OVERFLOW_MASK) #define GT_RADIXSORT_STR_OVERFLOW(BUCKETNUM)\ (((BUCKETNUM) == GT_RADIXSORT_STR_SPECIAL_BUCKET)\ ? GT_RADIXSORT_STR_KMERSIZE\ : GT_RADIXSORT_STR_OVERFLOW_NONSPECIAL(BUCKETNUM)) typedef struct { unsigned long *suffixes; unsigned long width; unsigned long depth; unsigned long lcp; } GtRadixsortStrBucketInfo; GT_STACK_DECLARESTRUCT(GtRadixsortStrBucketInfo, 1024); struct GtRadixsortstringinfo { const GtTwobitencoding *twobitencoding; size_t bytesinsizesofbuckets; unsigned long equallengthplus1, realtotallength, maxwidth, *sizesofbuckets, *sorted; gt_radixsort_str_bucketnum_t *oracle; uint8_t *xorvalue2lcp; GtStackGtRadixsortStrBucketInfo stack; }; static uint8_t *gt_radixsort_str_init_xorvalue2lcp(void) { const unsigned long nofcodes = (unsigned long) GT_POW2(GT_MULT2(GT_RADIXSORT_STR_KMERSIZE)); uint8_t *xorvalue2lcp, lcp = GT_RADIXSORT_STR_KMERSIZE; unsigned long i, j = 0, j_bound = 1UL; xorvalue2lcp = gt_malloc(sizeof (*xorvalue2lcp) * nofcodes); for (i = 0; i < (unsigned long) GT_RADIXSORT_STR_KMERSIZE; i++) { if (i > 0) { j_bound = GT_POW2(GT_MULT2(i)); gt_assert(lcp > 0); lcp--; } while (j < j_bound) { xorvalue2lcp[j++] = lcp; } } while (j < nofcodes) { xorvalue2lcp[j++] = 0; } return xorvalue2lcp; } GtRadixsortstringinfo *gt_radixsort_str_new(const GtTwobitencoding *twobitencoding, unsigned long realtotallength, unsigned long equallengthplus1, unsigned long maxwidth) { GtRadixsortstringinfo *rsi = gt_malloc(sizeof(*rsi)); rsi->twobitencoding = twobitencoding; rsi->equallengthplus1 = equallengthplus1; rsi->realtotallength = realtotallength; rsi->maxwidth = maxwidth/2; rsi->bytesinsizesofbuckets = sizeof (*rsi->sizesofbuckets) * GT_RADIXSORT_STR_NOFBUCKETS; rsi->sizesofbuckets = gt_malloc(rsi->bytesinsizesofbuckets); rsi->sorted = gt_malloc(sizeof (*rsi->sorted) * rsi->maxwidth); rsi->oracle = gt_malloc(sizeof (*rsi->oracle) * rsi->maxwidth); rsi->xorvalue2lcp = gt_radixsort_str_init_xorvalue2lcp(); GT_STACK_INIT(&rsi->stack, 1024UL); return rsi; } void gt_radixsort_str_delete(GtRadixsortstringinfo *rsi) { if (rsi != NULL) { gt_free(rsi->sizesofbuckets); gt_free(rsi->sorted); gt_free(rsi->oracle); gt_free(rsi->xorvalue2lcp); GT_STACK_DELETE(&rsi->stack); gt_free(rsi); } } static inline gt_radixsort_str_kmercode_t gt_radixsort_str_code_at_position( const GtTwobitencoding *twobitencoding, unsigned long pos) { unsigned int unitoffset = (unsigned int) GT_MODBYUNITSIN2BITENC(pos); unsigned long unitindex = GT_DIVBYUNITSIN2BITENC(pos); if (unitoffset <= (unsigned int) (GT_UNITSIN2BITENC - GT_RADIXSORT_STR_KMERSIZE)) { return (gt_radixsort_str_kmercode_t) (twobitencoding[unitindex] >> GT_MULT2(GT_UNITSIN2BITENC - GT_RADIXSORT_STR_KMERSIZE - unitoffset)) & GT_RADIXSORT_STR_KMERCODE_MAX; } else { unsigned int shiftleft = GT_MULT2(unitoffset + (unsigned int) GT_RADIXSORT_STR_KMERSIZE - GT_UNITSIN2BITENC); return (gt_radixsort_str_kmercode_t) ((twobitencoding[unitindex] << shiftleft) | (twobitencoding[unitindex + 1] >> (GT_MULT2(GT_UNITSIN2BITENC) - shiftleft))) & GT_RADIXSORT_STR_KMERCODE_MAX; } } static inline gt_radixsort_str_bucketnum_t gt_radixsort_str_get_code( const GtTwobitencoding *twobitencoding, unsigned long suffixnum, unsigned long depth, unsigned long equallengthplus1, unsigned long realtotallength) { unsigned long relpos = suffixnum % equallengthplus1 + depth; if (relpos >= equallengthplus1 - 1) /* suffix starts on separator position */ { return GT_RADIXSORT_STR_SPECIAL_BUCKET; } else { uint8_t overflow = 0; gt_radixsort_str_kmercode_t code; unsigned long remaining, pos = suffixnum + depth; remaining = equallengthplus1 - 1 - relpos; if (suffixnum <= realtotallength) { code = gt_radixsort_str_code_at_position(twobitencoding, pos); if (remaining < (unsigned long) GT_RADIXSORT_STR_KMERSIZE) { overflow = GT_RADIXSORT_STR_KMERSIZE - remaining; code |= (1 << GT_MULT2(overflow)) - 1; } } else { gt_assert(pos < GT_MULT2(realtotallength + 1)); pos = GT_MULT2(realtotallength + 1) - pos - 1; pos -= (remaining > (unsigned long) GT_RADIXSORT_STR_KMERSIZE) ? (unsigned long) GT_RADIXSORT_STR_KMERSIZE : remaining; gt_assert(pos < realtotallength); code = GT_RADIXSORT_STR_REVCOMPL(gt_radixsort_str_code_at_position( twobitencoding, pos)); if (remaining < (unsigned long) GT_RADIXSORT_STR_KMERSIZE) { overflow = GT_RADIXSORT_STR_KMERSIZE - remaining; code = (code << GT_MULT2(overflow)) | ((1 << GT_MULT2(overflow)) - 1); } } return GT_RADIXSORT_STR_BUCKETNUM(code, overflow); } } /* the following calculates the lcp of two buckets */ static inline gt_radixsort_str_bucketnum_t gt_radixsort_str_codeslcp(GtRadixsortstringinfo *rsi, gt_radixsort_str_bucketnum_t a, gt_radixsort_str_bucketnum_t b) { if (a != GT_RADIXSORT_STR_SPECIAL_BUCKET && b != GT_RADIXSORT_STR_SPECIAL_BUCKET) { gt_radixsort_str_bucketnum_t codeslcp, maxcodeslcp, ova, ovb; codeslcp = rsi->xorvalue2lcp[GT_DIV4(a ^ b)]; /* now take the overflow into account */ ova = GT_RADIXSORT_STR_OVERFLOW_NONSPECIAL(a); ovb = GT_RADIXSORT_STR_OVERFLOW_NONSPECIAL(b); maxcodeslcp = GT_RADIXSORT_STR_KMERSIZE - MAX(ova, ovb); return MIN(codeslcp, maxcodeslcp); } return 0; } unsigned long gt_radixsort_str_minwidth(void) { return (unsigned long) GT_RADIXSORT_STR_NOFBUCKETS; } unsigned long gt_radixsort_str_maxwidth(const GtRadixsortstringinfo *rsi) { return rsi->maxwidth; } static void gt_radixsort_str_insertionsort(GtRadixsortstringinfo *rsi, unsigned long *suffixes, unsigned long subbucketleft, unsigned long width, unsigned long depth, GtLcpvalues *lcpvalues, unsigned long sortmaxdepth) { unsigned long pm, pl, u, v, lcpvalue; for (pm = 1UL; pm < width; pm++) { for (pl = pm; pl > 0; pl--) { gt_radixsort_str_bucketnum_t codeslcp, unk = 0, vnk = 0; int uvcmp = 0; u = suffixes[pl-1]; v = suffixes[pl]; for (lcpvalue = depth; (sortmaxdepth == 0 || lcpvalue <= sortmaxdepth) && uvcmp == 0; /* Nothing */) { unk = gt_radixsort_str_get_code(rsi->twobitencoding, u, lcpvalue, rsi->equallengthplus1, rsi->realtotallength); vnk = gt_radixsort_str_get_code(rsi->twobitencoding, v, lcpvalue, rsi->equallengthplus1, rsi->realtotallength); codeslcp = gt_radixsort_str_codeslcp(rsi, unk, vnk); lcpvalue += codeslcp; if (unk == vnk) { if (!GT_RADIXSORT_STR_HAS_OVERFLOW(unk)) { if (!GT_RADIXSORT_STR_HAS_OVERFLOW(vnk)) { uvcmp = 0; } else { uvcmp = -1; } } else { if (!GT_RADIXSORT_STR_HAS_OVERFLOW(vnk)) { uvcmp = 1; } else { uvcmp = (u < v) ? -1 : 1; } } } else { if (unk < vnk) { uvcmp = -1; } else { uvcmp = 1; } } gt_assert((uvcmp == 0 && codeslcp == GT_RADIXSORT_STR_KMERSIZE) || (uvcmp != 0 && codeslcp < GT_RADIXSORT_STR_KMERSIZE)); } if (lcpvalues != NULL) { if (pl < pm && uvcmp > 0) { gt_lcptab_update(lcpvalues,subbucketleft,pl+1, gt_lcptab_getvalue(lcpvalues,subbucketleft,pl)); } gt_lcptab_update(lcpvalues,subbucketleft,pl, sortmaxdepth == 0 ? lcpvalue : MIN(lcpvalue,sortmaxdepth)); } if (uvcmp < 0) { break; } suffixes[pl-1] = v; suffixes[pl] = u; } } } void gt_radixsort_str_eqlen(GtRadixsortstringinfo *rsi, unsigned long *suffixes, GtLcpvalues *lcpvalues, unsigned long subbucketleft, unsigned long depth, unsigned long sortmaxdepth, unsigned long width) { unsigned long idx, previousbucketsize, *bucketindex; /* overlay with sizesofbuckets */ GtRadixsortStrBucketInfo bucket; gt_assert(width <= rsi->maxwidth && (sortmaxdepth == 0 || (depth <= sortmaxdepth && sortmaxdepth <= rsi->equallengthplus1))); bucket.suffixes = suffixes; bucket.width = width; bucket.depth = depth; bucket.lcp = depth; gt_assert(GT_STACK_ISEMPTY(&rsi->stack)); GT_STACK_PUSH(&rsi->stack, bucket); bucketindex = rsi->sizesofbuckets; while (!GT_STACK_ISEMPTY(&rsi->stack)) { gt_radixsort_str_bucketnum_t prevbucketnum = GT_RADIXSORT_STR_SPECIAL_BUCKET; /* = undefined */ bucket = GT_STACK_POP(&rsi->stack); memset(rsi->sizesofbuckets, 0, rsi->bytesinsizesofbuckets); /* Loop A */ for (idx = 0; idx < bucket.width; idx++) { rsi->oracle[idx] = gt_radixsort_str_get_code(rsi->twobitencoding, bucket.suffixes[idx], bucket.depth, rsi->equallengthplus1, rsi->realtotallength); } for (idx = 0; idx < bucket.width; idx++) { rsi->sizesofbuckets[rsi->oracle[idx]]++; } previousbucketsize = rsi->sizesofbuckets[0]; bucketindex[0] = 0; for (idx = 1UL; idx < (unsigned long) GT_RADIXSORT_STR_NOFBUCKETS; idx++) { unsigned long tmp; tmp = bucketindex[idx-1] + previousbucketsize; previousbucketsize = rsi->sizesofbuckets[idx]; bucketindex[idx] = tmp; } /* Loop B */ gt_assert(width > 1UL); if (bucket.suffixes[0] > bucket.suffixes[1]) { for (idx = bucket.width; idx > 0; /* Nothing */) { idx--; rsi->sorted[bucketindex[rsi->oracle[idx]]++] = bucket.suffixes[idx]; } } else { for (idx = 0; idx < bucket.width; idx++) { rsi->sorted[bucketindex[rsi->oracle[idx]]++] = bucket.suffixes[idx]; } } memcpy(bucket.suffixes, rsi->sorted, sizeof (*rsi->sorted) * bucket.width); if (bucket.depth < rsi->equallengthplus1) { gt_radixsort_str_bucketnum_t bucketnum; GtRadixsortStrBucketInfo subbucket; subbucket.suffixes = bucket.suffixes; subbucket.depth = bucket.depth + GT_RADIXSORT_STR_KMERSIZE; subbucket.lcp = bucket.lcp; for (bucketnum = 0; bucketnum < (gt_radixsort_str_bucketnum_t) GT_RADIXSORT_STR_NOFBUCKETS; bucketnum++) { subbucket.width = bucketnum > 0 ? (bucketindex[bucketnum] - bucketindex[bucketnum-1]) : bucketindex[bucketnum]; if (subbucket.width > 0) { unsigned long offset = (unsigned long) (subbucket.suffixes - suffixes); if (lcpvalues != NULL) { if (prevbucketnum != GT_RADIXSORT_STR_SPECIAL_BUCKET) { subbucket.lcp = bucket.depth + gt_radixsort_str_codeslcp(rsi,prevbucketnum, bucketnum); } if (offset > 0) { gt_lcptab_update(lcpvalues,subbucketleft,offset, sortmaxdepth == 0 ? subbucket.lcp : MIN(subbucket.lcp,sortmaxdepth)); } } if (GT_RADIXSORT_STR_HAS_OVERFLOW(bucketnum)) { if (subbucket.width > 1UL) { gt_direct_qsort_ulong (6UL, false, subbucket.suffixes, subbucket.width); } if (lcpvalues != NULL) { unsigned long j, lcpvalue = bucket.depth + GT_RADIXSORT_STR_KMERSIZE - GT_RADIXSORT_STR_OVERFLOW(bucketnum); if (sortmaxdepth > 0 && lcpvalue > sortmaxdepth) { lcpvalue = sortmaxdepth; } for (j = 1UL; j < subbucket.width; j++) { gt_lcptab_update(lcpvalues,subbucketleft,offset+j,lcpvalue); } } } else { if (subbucket.width > 1UL) { if (sortmaxdepth == 0 || subbucket.depth <= sortmaxdepth) { const unsigned long radixsort_str_insertion_sort_max = 31UL; if (subbucket.width <= radixsort_str_insertion_sort_max) { gt_radixsort_str_insertionsort(rsi, subbucket.suffixes, subbucketleft + offset, subbucket.width, subbucket.depth, lcpvalues, sortmaxdepth); } else { GT_STACK_PUSH(&rsi->stack, subbucket); } } else { if (lcpvalues != NULL) { unsigned long j; for (j = 1UL; j < subbucket.width; j++) { gt_lcptab_update(lcpvalues,subbucketleft,offset+j, sortmaxdepth); } } } } } subbucket.suffixes += subbucket.width; gt_assert(subbucket.suffixes <= bucket.suffixes + bucket.width); prevbucketnum = bucketnum; } } gt_assert(bucket.suffixes + bucket.width == subbucket.suffixes); } } } genometools-1.5.1/src/match/radixsort_str.h000066400000000000000000000043371211610345200210160ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RADIXSORT_STR_H #define RADIXSORT_STR_H #include "core/intbits.h" #include "sfx-lcpvalues.h" /* * suffixes = array of suffixes to be sorted * width = number of suffixes to sort * depth = start sorting at given depth * sortmaxdepth = stop sorting at given depth (0 means infinite) * * realtotallength = "real" length (not the mirror logical length) * equallengthplus1 = sequence length, including the separator * * */ typedef struct GtRadixsortstringinfo GtRadixsortstringinfo; unsigned long gt_radixsort_str_minwidth(void); unsigned long gt_radixsort_str_maxwidth(const GtRadixsortstringinfo *rsi); GtRadixsortstringinfo *gt_radixsort_str_new(const GtTwobitencoding *twobitencoding, unsigned long realtotallength, unsigned long equallengthplus1, unsigned long maxwidth); void gt_radixsort_str_delete(GtRadixsortstringinfo *rsi); void gt_radixsort_str_eqlen(GtRadixsortstringinfo *rsi, unsigned long *suffixes, GtLcpvalues *lcpvalues, unsigned long subbucketleft, unsigned long depth, unsigned long sortmaxdepth, unsigned long width); #endif genometools-1.5.1/src/match/randomcodes-correct.c000066400000000000000000000166141211610345200220400ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/fa.h" #include "core/log_api.h" #include "core/xansi_api.h" #include "match/randomcodes-correct.h" struct GtRandomcodesCorrectData { const GtEncseq *encseq; unsigned int alphasize; unsigned long firstmirrorpos; unsigned long totallength; unsigned int k; unsigned int c; unsigned int *count; unsigned long *kpositions; FILE *outfile; unsigned int currentchar; bool seprange; bool alltrusted; /* stats */ unsigned long nofkmergroups, nofkmeritvs, nofkmers, nofcorrections; }; static inline void gt_randomcodes_correct_data_reset( GtRandomcodesCorrectData *data) { unsigned int i; data->seprange = false; data->alltrusted = true; data->currentchar = 0; for (i = 0; i < data->alphasize; i++) data->count[i] = 0; } static inline void gt_randomcodes_correct_process_kmer_itv( const unsigned long *suffixes, unsigned long nofsuffixes, GtRandomcodesCorrectData *cdata) { unsigned int i, c = cdata->c; cdata->nofkmeritvs++; cdata->nofkmers += nofsuffixes; if (nofsuffixes < (unsigned long)cdata->c) { cdata->alltrusted = false; c = (unsigned int)nofsuffixes; } for (i = 0; i < c; i++) { (cdata->kpositions + cdata->currentchar * cdata->c)[i] = suffixes[i]; } cdata->count[cdata->currentchar] = (unsigned int)nofsuffixes; cdata->currentchar++; } static inline void gt_randomcodes_correct_process_kmergroup_end( const GtSeqnumrelpos *snrp, GtRandomcodesCorrectData *cdata) { cdata->nofkmergroups++; if (!cdata->alltrusted) { unsigned int i, max_count = 0, countpos = 0; for (i = 0; i < cdata->alphasize; i++) { if (cdata->count[i] > max_count) { max_count = cdata->count[i]; countpos = i; } } if (max_count >= cdata->c) { const unsigned long trusted_char_seqnumrelpos = (cdata->kpositions + countpos * cdata->c)[0]; GtUchar trusted_char = gt_encseq_get_encoded_char_nospecial(cdata->encseq, gt_encseq_seqstartpos(cdata->encseq, gt_seqnumrelpos_decode_seqnum( snrp,trusted_char_seqnumrelpos)) + gt_seqnumrelpos_decode_relpos( snrp,trusted_char_seqnumrelpos) + cdata->k - 1, GT_READMODE_FORWARD); for (i = 0; i < cdata->alphasize; i++) { unsigned int j; if (cdata->count[i] < cdata->c) { for (j = 0; j < cdata->count[i]; j++) { GtUchar newchar = trusted_char; const unsigned long seqnumrelpos = (cdata->kpositions + i * cdata->c)[j]; unsigned long abspos; abspos = gt_encseq_seqstartpos(cdata->encseq, gt_seqnumrelpos_decode_seqnum(snrp,seqnumrelpos)) + gt_seqnumrelpos_decode_relpos(snrp,seqnumrelpos) + cdata->k - 1; if (abspos >= cdata->firstmirrorpos) { abspos = cdata->totallength - 1UL - abspos; newchar = (GtUchar)3 - newchar; } gt_assert(abspos <= (ULONG_MAX >> 2)); gt_assert(newchar < (GtUchar)4); abspos <<= 2; abspos += newchar; gt_xfwrite(&abspos, sizeof (abspos), (size_t)1, cdata->outfile); cdata->nofcorrections++; } } } } } gt_randomcodes_correct_data_reset(cdata); } int gt_randomcodes_correct_process_bucket(void *data, const unsigned long *bucketofsuffixes, const GtSeqnumrelpos *snrp, const uint16_t *lcptab_bucket, unsigned long numberofsuffixes, unsigned int correction_kmersize, GT_UNUSED GtError *err) { unsigned long itvstart, next_itvstart; unsigned int lcpvalue; bool haserr = false; for (itvstart = 0, next_itvstart = 1UL; next_itvstart < numberofsuffixes; next_itvstart++) { lcpvalue = (unsigned int) lcptab_bucket[next_itvstart]; if (lcpvalue < correction_kmersize) { gt_randomcodes_correct_process_kmer_itv(bucketofsuffixes + itvstart, next_itvstart - itvstart, data); itvstart = next_itvstart; if (lcpvalue < correction_kmersize - 1) { gt_randomcodes_correct_process_kmergroup_end(snrp, data); } } } gt_randomcodes_correct_process_kmer_itv(bucketofsuffixes + itvstart, numberofsuffixes - itvstart, data); gt_randomcodes_correct_process_kmergroup_end(snrp, data); return haserr ? -1 : 0; } GtRandomcodesCorrectData *gt_randomcodes_correct_data_new(GtEncseq *encseq, unsigned int k, unsigned int c, const char *indexname, const char *suffix, unsigned int threadnum, GtError *err) { bool haserr = false; GtRandomcodesCorrectData *cdata = gt_malloc(sizeof *cdata); GtStr *path = gt_str_new_cstr(indexname); gt_str_append_char(path, '.'); gt_str_append_uint(path, threadnum); gt_str_append_cstr(path, suffix); cdata->k = k; cdata->c = c; cdata->encseq = encseq; cdata->alphasize = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); cdata->totallength = gt_encseq_total_length(encseq); cdata->firstmirrorpos = cdata->totallength; if (gt_encseq_is_mirrored(encseq)) cdata->firstmirrorpos >>= 1; cdata->kpositions = gt_malloc(sizeof (*cdata->kpositions) * cdata->alphasize * c); cdata->count = gt_malloc(sizeof (*cdata->count) * cdata->alphasize); gt_randomcodes_correct_data_reset(cdata); /* stats */ cdata->nofkmergroups = 0; cdata->nofkmeritvs = 0; cdata->nofkmers = 0; cdata->nofcorrections = 0; cdata->outfile = gt_fa_fopen(gt_str_get(path), "wb", err); if (cdata->outfile == NULL) { haserr = true; } if (!haserr && cdata->totallength > (ULONG_MAX >> 2)) { gt_error_set(err, "totallength %lu larger than %lu", cdata->totallength, ULONG_MAX >> 2); haserr = true; } gt_str_delete(path); if (haserr) gt_randomcodes_correct_data_delete(cdata); return cdata; } #define GT_RANDOMCODES_COLLECT_STAT(S)\ gt_log_log("thread %u: " #S " %lu", threadnum, cdata->S);\ if (S != NULL)\ *S += cdata->S; void gt_randomcodes_correct_data_collect_stats(GtRandomcodesCorrectData *cdata, unsigned int threadnum, unsigned long *nofkmergroups, unsigned long *nofkmeritvs, unsigned long *nofkmers, unsigned long *nofcorrections) { GT_RANDOMCODES_COLLECT_STAT(nofkmergroups); GT_RANDOMCODES_COLLECT_STAT(nofkmeritvs); GT_RANDOMCODES_COLLECT_STAT(nofkmers); GT_RANDOMCODES_COLLECT_STAT(nofcorrections); } void gt_randomcodes_correct_data_delete(GtRandomcodesCorrectData *cdata) { if (cdata == NULL) return; if (cdata->outfile != NULL) gt_fa_fclose(cdata->outfile); gt_free(cdata->kpositions); gt_free(cdata->count); gt_free(cdata); } genometools-1.5.1/src/match/randomcodes-correct.h000066400000000000000000000034371211610345200220440ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RANDOMCODES_CORRECT_H #define RANDOMCODES_CORRECT_H #include #include "core/encseq.h" #include "match/seqnumrelpos.h" int gt_randomcodes_correct_process_bucket(void *data, const unsigned long *bucketofsuffixes, const GtSeqnumrelpos *snrp, const uint16_t *lcptab_bucket, unsigned long numberofsuffixes, unsigned int correction_kmersize, GtError *err); typedef struct GtRandomcodesCorrectData GtRandomcodesCorrectData; GtRandomcodesCorrectData *gt_randomcodes_correct_data_new(GtEncseq *encseq, unsigned int k, unsigned int c, const char *indexname, const char *suffix, unsigned int threadnum, GtError *err); void gt_randomcodes_correct_data_collect_stats(GtRandomcodesCorrectData *cdata, unsigned int threadnum, unsigned long *nofkmergroups, unsigned long *nofkmeritvs, unsigned long *nofkmers, unsigned long *nofcorrections); void gt_randomcodes_correct_data_delete(GtRandomcodesCorrectData *cdata); #endif genometools-1.5.1/src/match/randomcodes-insert.c000066400000000000000000000223041211610345200216740ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/intbits.h" #include "core/types_api.h" #include "core/codetype.h" #include "core/divmodmul.h" #include "core/encseq.h" #include "kmercodes.h" #include "firstcodes-buf.h" #include "randomcodes-insert.h" #define GT_RANDOMCODES_INSERTSUFFIXES(BUF,CODE,SEQNUM,RELPOS)\ {\ if (\ ((BUF)->currentmincode == 0 ||\ (BUF)->currentmincode < (CODE)) &&\ (CODE) <= (BUF)->currentmaxcode)\ {\ if ((BUF)->nextfree == (BUF)->allocated)\ {\ (BUF)->flush_function((BUF)->fciptr);\ }\ gt_assert ((BUF)->nextfree < (BUF)->allocated);\ (BUF)->spaceGtUlongPair[(BUF)->nextfree].a = CODE;\ (BUF)->spaceGtUlongPair[(BUF)->nextfree++].b\ = gt_seqnumrelpos_encode((BUF)->snrp,SEQNUM,RELPOS);\ }\ } static void gt_randomcodes_insert_kmerscan_range( const GtBitsequence *twobitencoding, unsigned int kmersize, unsigned int minmatchlength, unsigned long startpos, unsigned long length, unsigned long fseqnum, unsigned long rseqnum, unsigned long maxunitindex, GtCodeposbuffer *buf) { const unsigned long maskright = GT_MASKRIGHT(kmersize); const unsigned long lastpossiblepos = length - minmatchlength; const unsigned long lastfrelpos = length - kmersize; const unsigned int shiftleft = GT_MULT2(kmersize-1); unsigned int shiftright; unsigned long unitindex, frelpos; GtTwobitencoding currentencoding; GtCodetype cc, fcode, rccode; gt_assert(kmersize <= (unsigned int) GT_UNITSIN2BITENC); fcode = gt_kmercode_at_position(twobitencoding, startpos, kmersize); rccode = gt_kmercode_complement(gt_kmercode_reverse(fcode,kmersize), maskright); GT_RANDOMCODES_INSERTSUFFIXES(buf,fcode,fseqnum,0UL); if (kmersize == minmatchlength) { GT_RANDOMCODES_INSERTSUFFIXES(buf,rccode,rseqnum,lastfrelpos); } unitindex = GT_DIVBYUNITSIN2BITENC(startpos + kmersize); currentencoding = twobitencoding[unitindex]; shiftright = (unsigned int) GT_MULT2(GT_UNITSIN2BITENC - 1 - GT_MODBYUNITSIN2BITENC(startpos + kmersize)); for (frelpos = 1UL; frelpos <= lastfrelpos; frelpos++) { cc = (GtCodetype) (currentencoding >> shiftright) & 3; fcode = ((fcode << 2) | cc) & maskright; rccode = (rccode >> 2) | ((cc ^ 3UL) << shiftleft); if (frelpos <= lastpossiblepos) { GT_RANDOMCODES_INSERTSUFFIXES(buf,fcode,fseqnum,frelpos); } if (lastfrelpos - frelpos <= lastpossiblepos) { GT_RANDOMCODES_INSERTSUFFIXES(buf,rccode,rseqnum,lastfrelpos - frelpos); } if (shiftright > 0) { shiftright -= 2; } else { gt_assert(unitindex < maxunitindex-1 || frelpos == lastfrelpos); if (unitindex < maxunitindex-1) { currentencoding = twobitencoding[++unitindex]; shiftright = (unsigned int) (GT_INTWORDSIZE-2); } } } } static void gt_randomcodes_insert_kmerscan_eqlen( const GtBitsequence *twobitencoding, unsigned long equallength, unsigned long totallength, unsigned long numofsequences, unsigned long maxunitindex, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf) { unsigned long startpos, fseqnum; if (equallength >= (unsigned long) kmersize) { for (startpos = 0, fseqnum = 0; startpos < totallength; startpos += equallength+1, fseqnum++) { gt_randomcodes_insert_kmerscan_range(twobitencoding, kmersize, minmatchlength, startpos, equallength, fseqnum, numofsequences - 1 - fseqnum, maxunitindex, buf); } } } static void gt_randomcodes_insert_kmerscan(const GtEncseq *encseq, const GtBitsequence *twobitencoding, unsigned long totallength, unsigned long numofsequences, unsigned long maxunitindex, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf) { unsigned long laststart = 0, fseqnum = 0; if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; sri = gt_specialrangeiterator_new(encseq,true); while (gt_specialrangeiterator_next(sri,&range) && range.start < totallength) { gt_assert(range.start >= laststart); if (range.start - laststart >= (unsigned long) minmatchlength) { gt_randomcodes_insert_kmerscan_range(twobitencoding, kmersize, minmatchlength, laststart, range.start - laststart, fseqnum, numofsequences - 1 - fseqnum, maxunitindex, buf); } laststart = range.end; fseqnum++; } gt_specialrangeiterator_delete(sri); } if (totallength - laststart >= (unsigned long) minmatchlength) { gt_randomcodes_insert_kmerscan_range(twobitencoding, kmersize, minmatchlength, laststart, totallength - laststart, fseqnum, numofsequences - 1 - fseqnum, maxunitindex, buf); } } void gt_randomcodes_insert_runkmerscan(const GtEncseq *encseq, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf) { const GtTwobitencoding *twobitencoding = gt_encseq_twobitencoding_export(encseq); unsigned long totallength, maxunitindex, numofsequences; gt_assert(minmatchlength>=kmersize); if (gt_encseq_is_mirrored(encseq)) { totallength = (gt_encseq_total_length(encseq)-1)/2; } else { totallength = gt_encseq_total_length(encseq); } numofsequences = gt_encseq_num_of_sequences(encseq); maxunitindex = gt_unitsoftwobitencoding(totallength) - 1; if (gt_encseq_accesstype_get(encseq) == GT_ACCESS_TYPE_EQUALLENGTH) { unsigned long equallength = gt_encseq_equallength(encseq); gt_assert(equallength >= (unsigned long) kmersize); gt_randomcodes_insert_kmerscan_eqlen(twobitencoding, equallength, totallength, numofsequences, maxunitindex, kmersize, minmatchlength, buf); } else { gt_randomcodes_insert_kmerscan(encseq, twobitencoding, totallength, numofsequences, maxunitindex, kmersize, minmatchlength, buf); } } genometools-1.5.1/src/match/randomcodes-insert.h000066400000000000000000000023241211610345200217010ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RANDOMCODES_INSERT_H #define RANDOMCODES_INSERT_H #include "core/encseq_api.h" #include "match/firstcodes-buf.h" void gt_randomcodes_insert_runkmerscan(const GtEncseq *encseq, unsigned int kmersize, unsigned int minmatchlength, GtCodeposbuffer *buf); #endif genometools-1.5.1/src/match/randomcodes-sfx-partssuf.c000066400000000000000000000401461211610345200230410ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/ma_api.h" #include "core/codetype.h" #include "core/spacecalc.h" #include "core/log.h" #include "bcktab.h" #include "sfx-suffixgetset.h" #include "spmsuftab.h" #include "randomcodes-sfx-partssuf.h" #include "randomcodes-tab.h" typedef struct { unsigned long nextidx, widthofpart, suftaboffset, sumofwidth, minindex, maxindex; } GtSuftabpartcomponent_rc; struct GtSuftabparts_rc { GtSuftabpartcomponent_rc *components; bool indexrange_available; unsigned int numofparts; unsigned long largestsizemappedpartwise, largestsuftabwidth; const GtRandomcodestab *fct; }; void gt_suftabparts_rc_showallrecords(const GtSuftabparts_rc *suftabparts_rc, bool withminmaxindex) { unsigned int part; unsigned long totalwidth; gt_assert(suftabparts_rc != NULL); gt_assert(suftabparts_rc->numofparts >= 1U); totalwidth = suftabparts_rc->components[suftabparts_rc->numofparts - 1].sumofwidth; for (part = 0; part < suftabparts_rc->numofparts; part++) { if (withminmaxindex) { gt_log_log("part %u: width=%lu (%.2f%%) offset=%lu nextidx=%lu " "minindex=%lu maxindex=%lu ", part, suftabparts_rc->components[part].widthofpart, 100.00 * (double) suftabparts_rc->components[part].widthofpart/ totalwidth, suftabparts_rc->components[part].suftaboffset, suftabparts_rc->components[part].nextidx, gt_suftabparts_rc_minindex(part,suftabparts_rc), gt_suftabparts_rc_maxindex(part,suftabparts_rc)); } else { gt_log_log("part %u: width=%lu (%.2f%%) offset=%lu nextidx=%lu", part, suftabparts_rc->components[part].widthofpart, 100.00 * (double) suftabparts_rc->components[part].widthofpart/ totalwidth, suftabparts_rc->components[part].nextidx, suftabparts_rc->components[part].suftaboffset); } } gt_log_log("variance %.0f",gt_suftabparts_rc_variance(suftabparts_rc)); } static GtCodetype gt_suftabparts_rc_minindex_raw( unsigned int part, const GtSuftabparts_rc *suftabparts_rc) { GtCodetype minindex; gt_assert(suftabparts_rc != NULL && part < suftabparts_rc->numofparts); minindex = (part == 0) ? 0 : suftabparts_rc->components[part-1].nextidx + 1; if (suftabparts_rc->fct != NULL) { return gt_randomcodes_sample2full(suftabparts_rc->fct,minindex); } return minindex; } static GtCodetype gt_suftabparts_rc_maxindex_raw( unsigned int part, const GtSuftabparts_rc *suftabparts_rc) { GtCodetype maxindex; gt_assert(suftabparts_rc != NULL && part < suftabparts_rc->numofparts); if (suftabparts_rc->fct != NULL) { maxindex = suftabparts_rc->components[part].nextidx; return gt_randomcodes_sample2full(suftabparts_rc->fct,maxindex); } maxindex = (part == suftabparts_rc->numofparts - 1) ? suftabparts_rc->components[part].nextidx - 1 : suftabparts_rc->components[part].nextidx; return maxindex; } static void gt_suftabparts_rc_removeemptyparts(GtSuftabparts_rc *suftabparts_rc, GT_UNUSED unsigned long totalwidth, GtLogger *logger) { #undef SKDEBUG #ifdef SKDEBUG gt_log_log("before removal"); gt_suftabparts_rc_showallrecords(suftabparts_rc,false); #endif gt_assert(suftabparts_rc != NULL); if (suftabparts_rc->numofparts > 0) { unsigned int destpart, srcpart; unsigned long sumwidth = 0; for (destpart = 0, srcpart = 0; srcpart < suftabparts_rc->numofparts; srcpart++) { if (suftabparts_rc->components[srcpart].widthofpart > 0) { if (destpart < srcpart) { suftabparts_rc->components[destpart] = suftabparts_rc->components[srcpart]; } destpart++; } } if (destpart < srcpart) { suftabparts_rc->components[destpart-1].nextidx = suftabparts_rc->components[suftabparts_rc->numofparts-1].nextidx; suftabparts_rc->numofparts -= (srcpart - destpart); gt_assert(suftabparts_rc->numofparts == destpart); } for (srcpart = 0; srcpart < suftabparts_rc->numofparts; srcpart++) { gt_assert(suftabparts_rc->components[srcpart].widthofpart > 0); sumwidth+=suftabparts_rc->components[srcpart].widthofpart; gt_logger_log(logger,"widthofpart[%u]=%lu", srcpart, suftabparts_rc->components[srcpart].widthofpart); } gt_assert(sumwidth == totalwidth); } #ifdef SKDEBUG gt_log_log("after removal"); gt_suftabparts_rc_showallrecords(suftabparts_rc,true); #endif } GtSuftabparts_rc *gt_suftabparts_rc_new(unsigned int numofparts, const GtBcktab *bcktab, const GtRandomcodestab *fct, const GtSfxmappedrangelist *sfxmrlist, unsigned long numofsuffixestoinsert, unsigned long fullspecials, GtLogger *logger) { GtSuftabparts_rc *suftabparts_rc; unsigned long size_mapped; unsigned int part; gt_assert((bcktab == NULL && fct != NULL) || (bcktab != NULL && fct == NULL)); suftabparts_rc = gt_malloc(sizeof *suftabparts_rc); suftabparts_rc->largestsizemappedpartwise = 0; suftabparts_rc->fct = fct; gt_assert(suftabparts_rc != NULL); if (numofsuffixestoinsert == 0) { suftabparts_rc->numofparts = 0; } else { if (numofsuffixestoinsert < (unsigned long) numofparts || (bcktab != NULL && gt_bcktab_prefixlength(bcktab) == 1U)) { suftabparts_rc->numofparts = 1U; } else { suftabparts_rc->numofparts = numofparts; } } if (suftabparts_rc->numofparts == 0) { suftabparts_rc->largestsuftabwidth = fullspecials/numofparts+1; suftabparts_rc->largestsizemappedpartwise = gt_Sfxmappedrangelist_size_entire(sfxmrlist); suftabparts_rc->components = NULL; } else { unsigned int remainder; unsigned long secondidx, randombound = 0, secondbound, suftaboffset = 0, sumofwidth = 0; const unsigned long widthofsuftabpart = numofsuffixestoinsert/suftabparts_rc->numofparts; suftabparts_rc->components = gt_malloc(sizeof (*suftabparts_rc->components) * suftabparts_rc->numofparts); remainder = (unsigned int) (numofsuffixestoinsert % (unsigned long) suftabparts_rc->numofparts); suftabparts_rc->largestsuftabwidth = 0; for (part=0; part < suftabparts_rc->numofparts; part++) { if (remainder > 0) { suftaboffset += widthofsuftabpart + 1; remainder--; } else { suftaboffset += widthofsuftabpart; } if (part == suftabparts_rc->numofparts - 1) { secondidx = bcktab != NULL ? gt_bcktab_numofallcodes(bcktab) : gt_randomcodes_numofsamples(fct); } else { secondidx = bcktab != NULL ? gt_bcktab_findfirstlarger(bcktab,suftaboffset) : gt_randomcodes_findfirstsamplelarger(fct,suftaboffset); } suftabparts_rc->components[part].nextidx = secondidx; secondbound = bcktab != NULL ? gt_bcktab_get_leftborder(bcktab,secondidx) : gt_randomcodes_get_sample(fct,secondidx); if (part == 0) { suftabparts_rc->components[part].widthofpart = secondbound; suftabparts_rc->components[part].suftaboffset = 0; } else { gt_assert(secondbound >= randombound); suftabparts_rc->components[part].widthofpart = secondbound - randombound; suftabparts_rc->components[part].suftaboffset = randombound; } if (suftabparts_rc->largestsuftabwidth < suftabparts_rc->components[part].widthofpart) { suftabparts_rc->largestsuftabwidth = suftabparts_rc->components[part].widthofpart; } sumofwidth += suftabparts_rc->components[part].widthofpart; suftabparts_rc->components[part].sumofwidth = sumofwidth; randombound = secondbound; } gt_assert(sumofwidth == numofsuffixestoinsert); } gt_suftabparts_rc_removeemptyparts(suftabparts_rc,numofsuffixestoinsert, logger); if (suftabparts_rc->numofparts > 0) { gt_assert(suftabparts_rc->components != NULL); for (part=0; part < suftabparts_rc->numofparts; part++) { suftabparts_rc->components[part].minindex = gt_suftabparts_rc_minindex_raw(part,suftabparts_rc); suftabparts_rc->components[part].maxindex = gt_suftabparts_rc_maxindex_raw(part,suftabparts_rc); } for (part=1U; part < suftabparts_rc->numofparts; part++) { if (suftabparts_rc->components[part].minindex != suftabparts_rc->components[part-1].maxindex + 1) { suftabparts_rc->components[part].minindex = suftabparts_rc->components[part-1].maxindex + 1; } } for (part=0; part < suftabparts_rc->numofparts; part++) { size_mapped = gt_Sfxmappedrangelist_size_mapped(sfxmrlist, gt_suftabparts_rc_minindex(part,suftabparts_rc), gt_suftabparts_rc_maxindex(part,suftabparts_rc)); if (suftabparts_rc->largestsizemappedpartwise < size_mapped) { suftabparts_rc->largestsizemappedpartwise = size_mapped; } } } return suftabparts_rc; } double gt_suftabparts_rc_variance(const GtSuftabparts_rc *suftabparts_rc) { gt_assert(suftabparts_rc->numofparts > 0); if (suftabparts_rc->numofparts == 1U) { return 0.0; } else { double meanwidth, difference, sum = 0.0; unsigned int part; meanwidth = (double) suftabparts_rc->components[suftabparts_rc->numofparts-1].sumofwidth/ suftabparts_rc->numofparts; for (part = 0; part < suftabparts_rc->numofparts; part++) { difference = (double) suftabparts_rc->components[part].widthofpart - meanwidth; sum += difference * difference; } return sum/(double) (suftabparts_rc->numofparts-1); } } void gt_suftabparts_rc_delete(GtSuftabparts_rc *suftabparts_rc) { if (suftabparts_rc != NULL) { gt_free(suftabparts_rc->components); gt_free(suftabparts_rc); } } GtCodetype gt_suftabparts_rc_minindex(unsigned int part, const GtSuftabparts_rc *suftabparts_rc) { return suftabparts_rc->components[part].minindex; } GtCodetype gt_suftabparts_rc_maxindex(unsigned int part, const GtSuftabparts_rc *suftabparts_rc) { return suftabparts_rc->components[part].maxindex; } GtCodetype gt_suftabparts_rc_maxindex_last( const GtSuftabparts_rc *suftabparts_rc) { gt_assert(suftabparts_rc->numofparts > 0); return gt_suftabparts_rc_maxindex(suftabparts_rc->numofparts-1, suftabparts_rc); } unsigned long gt_suftabparts_rc_offset(unsigned int part, const GtSuftabparts_rc *suftabparts_rc) { gt_assert(suftabparts_rc != NULL && part < suftabparts_rc->numofparts); return suftabparts_rc->components[part].suftaboffset; } unsigned long gt_suftabparts_rc_sumofwidth(unsigned int part, const GtSuftabparts_rc *suftabparts_rc) { gt_assert(suftabparts_rc != NULL && part < suftabparts_rc->numofparts); return suftabparts_rc->components[part].sumofwidth; } unsigned long gt_suftabparts_rc_widthofpart(unsigned int part, const GtSuftabparts_rc *suftabparts_rc) { gt_assert(suftabparts_rc != NULL && part < suftabparts_rc->numofparts); return suftabparts_rc->components[part].widthofpart; } unsigned long gt_suftabparts_rc_largest_width( const GtSuftabparts_rc *suftabparts_rc) { gt_assert(suftabparts_rc != NULL); return suftabparts_rc->largestsuftabwidth; } unsigned long gt_suftabparts_rc_largestsizemappedpartwise( const GtSuftabparts_rc *suftabparts_rc) { gt_assert(suftabparts_rc != NULL); return suftabparts_rc->largestsizemappedpartwise; } unsigned int gt_suftabparts_rc_numofparts( const GtSuftabparts_rc *suftabparts_rc) { gt_assert(suftabparts_rc != NULL); return suftabparts_rc->numofparts; } int gt_suftabparts_rc_fit_memlimit(size_t estimatedspace, unsigned long maximumspace, const GtBcktab *bcktab, const GtRandomcodestab *fct, const GtSfxmappedrangelist *sfxmrlist, unsigned long totallength, unsigned int bitsforseqnumrelpos, unsigned long specialcharacters, unsigned long numofsuffixestosort, bool suftabuint, GtError *err) { unsigned int parts; GtSuftabparts_rc *suftabparts_rc; unsigned long size_mapped = gt_Sfxmappedrangelist_size_entire(sfxmrlist); gt_error_check(err); for (parts = 1U; parts <= 500U; parts++) { size_t suftabsize; unsigned long numofentries; suftabparts_rc = gt_suftabparts_rc_new(parts, bcktab, fct, sfxmrlist, numofsuffixestosort, specialcharacters + 1, NULL); gt_assert(suftabparts_rc != NULL); numofentries = gt_suftabparts_rc_largest_width(suftabparts_rc); if (bcktab != NULL) { gt_assert(fct == NULL); suftabsize = gt_suffixsortspace_requiredspace(numofentries, totallength, suftabuint); } else { gt_assert(fct != NULL); suftabsize = gt_spmsuftab_requiredspace(numofentries, totallength, bitsforseqnumrelpos); } if (parts == 1U) { if ((unsigned long) (suftabsize + estimatedspace) <= maximumspace) { gt_suftabparts_rc_delete(suftabparts_rc); return (int) parts; } } else { unsigned long largest = gt_suftabparts_rc_largestsizemappedpartwise(suftabparts_rc); if ((unsigned long) (suftabsize + largest + estimatedspace - size_mapped) <= maximumspace) { gt_log_log("return parts = %u as suftabsize=%.2f +" "largest=%.2f + estimated=%.2f - size_mapped=%2.f <= %.2f", parts, GT_MEGABYTES(suftabsize), GT_MEGABYTES(largest), GT_MEGABYTES(estimatedspace), GT_MEGABYTES(size_mapped), GT_MEGABYTES(maximumspace)); gt_suftabparts_rc_delete(suftabparts_rc); return (int) parts; } } gt_suftabparts_rc_delete(suftabparts_rc); } gt_error_set(err,"cannot compute enhanced suffix array in at most %lu bytes", maximumspace); return -1; } genometools-1.5.1/src/match/randomcodes-sfx-partssuf.h000066400000000000000000000070101211610345200230370ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RANDOMCODES_SFX_PARTSSUF_H #define RANDOMCODES_SFX_PARTSSUF_H #include "core/logger.h" #include "core/codetype.h" #include "core/error_api.h" #include "sfx-maprange.h" #include "randomcodes-tab.h" #include "bcktab.h" typedef struct GtSuftabparts_rc GtSuftabparts_rc; void gt_suftabparts_rc_showallrecords(const GtSuftabparts_rc *suftabparts_rc, bool withminmaxindex); GtSuftabparts_rc *gt_suftabparts_rc_new(unsigned int numofparts, const GtBcktab *bcktab, const GtRandomcodestab *fct, const GtSfxmappedrangelist *sfxmrlist, unsigned long numofsuffixestoinsert, unsigned long fullspecials, GtLogger *logger); void gt_suftabparts_rc_delete(GtSuftabparts_rc *suftabparts_rc); GtCodetype gt_suftabparts_rc_minindex(unsigned int part, const GtSuftabparts_rc *suftabparts_rc); GtCodetype gt_suftabparts_rc_maxindex(unsigned int part, const GtSuftabparts_rc *suftabparts_rc); GtCodetype gt_suftabparts_rc_maxindex_last( const GtSuftabparts_rc *suftabparts_rc); unsigned long gt_suftabparts_rc_offset(unsigned int part, const GtSuftabparts_rc *suftabparts_rc); unsigned long gt_suftabparts_rc_sumofwidth(unsigned int part, const GtSuftabparts_rc *suftabparts_rc); unsigned long gt_suftabparts_rc_widthofpart(unsigned int part, const GtSuftabparts_rc *suftabparts_rc); unsigned long gt_suftabparts_rc_largest_width( const GtSuftabparts_rc *suftabparts_rc); unsigned int gt_suftabparts_rc_numofparts( const GtSuftabparts_rc *suftabparts_rc); unsigned long gt_suftabparts_rc_largestsizemappedpartwise( const GtSuftabparts_rc *suftabparts_rc); double gt_suftabparts_rc_variance(const GtSuftabparts_rc *suftabparts_rc); int gt_suftabparts_rc_fit_memlimit(size_t estimatedspace, unsigned long maximumspace, const GtBcktab *bcktab, const GtRandomcodestab *fct, const GtSfxmappedrangelist *sfxmrlist, unsigned long totallength, unsigned int bitsforseqnumrelpos, unsigned long specialcharacters, unsigned long numofsuffixestosort, bool suftabuint, GtError *err); #endif genometools-1.5.1/src/match/randomcodes-tab.c000066400000000000000000000374071211610345200211500ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/xansi_api.h" #include "core/fa.h" #include "core/assert_api.h" #include "core/divmodmul.h" #include "core/ma.h" #include "core/mathsupport.h" #ifdef SKDEBUG #include "core/disc_distri_api.h" #endif #include "core/log.h" #include "core/spacecalc.h" #include "core/hashmap-generic.h" #include "core/arraydef.h" #include "randomcodes-tab.h" #include "firstcodes-psbuf.h" void gt_randomcodes_countocc_new(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct, unsigned long numofsequences) { rct->countocc_small = gt_calloc((size_t) (numofsequences+1), sizeof (*rct->countocc_small)); GT_FCI_ADDWORKSPACE(fcsl,"countocc_small", sizeof (*rct->countocc_small) * (numofsequences+1)); rct->countocc_exceptions = ul_u32_gt_hashmap_new(); gt_assert(rct->countocc_exceptions != NULL); rct->outfilenameleftborder = NULL; rct->leftborder_samples = NULL; #ifdef _LP64 rct->modvaluebits = 32U; /* XXX remove the following later */ if (rct->modvaluebits == 32U) { rct->modvaluemask = UINT32_MAX; } else { rct->modvaluemask = (uint32_t) ((1UL << rct->modvaluebits) - 1); } GT_INITARRAY(&rct->bitchangepoints,GtUlong); #endif rct->differentcodes = numofsequences; } void gt_randomcodes_countocc_resize(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct, unsigned long numofdifferentcodes) { rct->countocc_small = gt_realloc(rct->countocc_small, sizeof (*rct->countocc_small) * (numofdifferentcodes+1)); GT_FCI_SUBTRACTADDWORKSPACE(fcsl,"countocc_small", sizeof (*rct->countocc_small) * (numofdifferentcodes+1)); } #ifdef SKDEBUG typedef struct { unsigned long smallcount, smallsum, largecount, largesum, hugecount, hugesum; } GtCountdistri_info; static void gt_randomcodes_evaluate_distvalue(unsigned long key, unsigned long long value, void *data) { GtCountdistri_info *cdi = (GtCountdistri_info *) data; gt_assert(value > 0); if (key <= UINT8_MAX) { cdi->smallcount++; cdi->smallsum += value; } else { if (key <= UINT16_MAX) { cdi->largecount++; cdi->largesum += value; } else { cdi->hugecount++; cdi->hugesum += value; } } } static void gt_randomcodes_evaluate_countdistri(const GtDiscDistri *countdistri) { GtCountdistri_info cdi; unsigned long sum; size_t spacenow, spacedirectstore, spaceopt, spacewithhash;; cdi.smallcount = 0; cdi.smallsum = 0; cdi.largecount = 0; cdi.largesum = 0; cdi.hugecount = 0; cdi.hugesum = 0; gt_disc_distri_foreach(countdistri,gt_randomcodes_evaluate_distvalue,&cdi); sum = cdi.smallsum + cdi.largesum + cdi.hugesum; gt_log_log("small=%lu,%lu (%.2f)",cdi.smallcount,cdi.smallsum, (double) cdi.smallsum/sum); gt_log_log("large=%lu,%lu (%.2f)",cdi.largecount,cdi.largesum, (double) cdi.largesum/sum); gt_log_log("huge=%lu,%lu (%.2f)",cdi.hugecount,cdi.hugesum, (double) cdi.largesum/sum); spacenow = sizeof (uint32_t) * sum; spaceopt = sizeof (uint8_t) * sum; spacedirectstore = sizeof (uint32_t) * cdi.largesum; spacewithhash = (2 * sizeof (void *)) * cdi.largecount; gt_log_log("spacenow=%.2f, spaceopt (direct)=%2.f spaceopt (hash) =%.2f", GT_MEGABYTES(spacenow), GT_MEGABYTES(spaceopt+spacedirectstore), GT_MEGABYTES(spaceopt+spacewithhash)); } #endif #ifdef SKDEBUG static void checkcodesorder(const unsigned long *tab,unsigned long len, bool allowequal) { unsigned long idx; for (idx=1UL; idx < len; idx++) { gt_assert(tab[idx-1] < tab[idx] || (allowequal && tab[idx-1] == tab[idx])); } } #endif unsigned long gt_randomcodes_remdups(unsigned long *allrandomcodes, unsigned int codesize, unsigned long numofcodes, GtLogger *logger) { unsigned long numofdifferentcodes = 0, shift = (unsigned long)GT_MULT2(GT_UNITSIN2BITENC - codesize); if (numofcodes != 0) { unsigned long *storeptr, *readptr; for (storeptr = allrandomcodes, readptr = allrandomcodes+1; readptr < allrandomcodes + numofcodes; readptr++) { if ((*storeptr ^ *readptr) << shift) { storeptr++; *storeptr = *readptr; } } numofdifferentcodes = (unsigned long) (storeptr - allrandomcodes + 1); if (numofdifferentcodes < numofcodes) { #ifdef SKDEBUG checkcodesorder(allrandomcodes,numofdifferentcodes,false); #endif } } gt_logger_log(logger,"number of different bucket codes=%lu (%.2f%%) " "of %lu sampled codes", numofdifferentcodes, 100.00 * (double) numofdifferentcodes/numofcodes, numofcodes); return numofdifferentcodes; } static uint32_t gt_randomcodes_countocc_get(const GtRandomcodestab *rct, unsigned long idx) { if (rct->countocc_small[idx] != GT_RANDOMCODES_COUNTOCC_OVERFLOW) { return (uint32_t) rct->countocc_small[idx]; } else { uint32_t *valueptr = ul_u32_gt_hashmap_get(rct->countocc_exceptions,idx); gt_assert(valueptr != NULL); return *valueptr + (uint32_t) GT_RANDOMCODES_MAXSMALL; } } #ifdef _LP64 #define GT_RCT_PARTIALSUM_LEFTBORDER_SET(BUF,VALUE)\ if ((BUF)->nextfree == (BUF)->allocated)\ {\ gt_leftborderbuffer_flush(BUF);\ }\ (BUF)->spaceuint32_t[(BUF)->nextfree++]\ = (uint32_t) ((VALUE) & rct->modvaluemask) #else #define GT_RCT_PARTIALSUM_LEFTBORDER_SET(BUF,VALUE)\ if ((BUF)->nextfree == (BUF)->allocated)\ {\ gt_leftborderbuffer_flush(BUF);\ }\ (BUF)->spaceuint32_t[(BUF)->nextfree++] = (uint32_t) (VALUE) #endif #define GT_RANDOMCODES_ADD_SAMPLE(PARTSUM)\ gt_assert(samplecount < rct->numofsamples);\ rct->leftborder_samples[samplecount++] = PARTSUM unsigned long gt_randomcodes_partialsums(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct, GT_UNUSED unsigned long expectedlastpartsum) { unsigned long idx, partsum, maxbucketsize, bitmask, samplecount = 0, spacewithhashmap = 0, spacewithouthashmap = 0; uint32_t currentcount; GtLeftborderOutbuffer *leftborderbuffer_all = NULL; #ifdef _LP64 const unsigned int btp = gt_determinebitspervalue(expectedlastpartsum); unsigned long exceedvalue = 1UL << rct->modvaluebits; #endif #ifdef SKDEBUG GtDiscDistri *countdistri = gt_disc_distri_new(); #endif gt_assert(rct->differentcodes < UINT32_MAX); gt_log_log("hashmap_addcount=%lu (%.2f%%)",rct->hashmap_addcount, 100.0 * (double) rct->hashmap_addcount/ rct->differentcodes); gt_log_log("hashmap_incrementcount=%lu (%.2f%%)", rct->hashmap_incrementcount, 100.0 * (double) rct->hashmap_incrementcount/ rct->all_incrementcount); gt_log_log("hashmap_getcount=%lu (%.2f%%)", rct->hashmap_getcount, 100.0 * (double) rct->hashmap_getcount/ rct->all_incrementcount); #ifdef _LP64 if (btp <= rct->modvaluebits) { rct->bitchangepoints.allocatedGtUlong = 0; rct->bitchangepoints.spaceGtUlong = NULL; } else { rct->bitchangepoints.allocatedGtUlong = 1UL << (btp - rct->modvaluebits); gt_log_log("lastpartsum=%lu, bitchangepoints.allocated=%lu", expectedlastpartsum,rct->bitchangepoints.allocatedGtUlong); rct->bitchangepoints.spaceGtUlong = gt_malloc(sizeof (*rct->bitchangepoints.spaceGtUlong) * rct->bitchangepoints.allocatedGtUlong); } rct->bitchangepoints.nextfreeGtUlong = 0; #endif currentcount = gt_randomcodes_countocc_get(rct,0); partsum = (unsigned long) currentcount; maxbucketsize = (unsigned long) currentcount; #ifdef SKDEBUG gt_disc_distri_add(countdistri,(unsigned long) currentcount); #endif rct->sampleshift = 9U; while (true) { rct->sampledistance = 1UL << rct->sampleshift; if (rct->sampledistance < rct->differentcodes) { break; } rct->sampleshift--; } bitmask = rct->sampledistance - 1; rct->numofsamples = 1UL + 1UL + rct->differentcodes/rct->sampledistance; rct->leftborder_samples = gt_malloc(sizeof (*rct->leftborder_samples) * rct->numofsamples); GT_FCI_ADDWORKSPACE(fcsl,"leftborder_samples", sizeof (*rct->leftborder_samples) * rct->numofsamples); GT_RANDOMCODES_ADD_SAMPLE(partsum); leftborderbuffer_all = gt_leftborderbuffer_new("leftborder",fcsl); GT_RCT_PARTIALSUM_LEFTBORDER_SET(leftborderbuffer_all,partsum); for (idx = 1UL; idx < rct->differentcodes; idx++) { currentcount = gt_randomcodes_countocc_get(rct,idx); #ifdef _LP64 gt_assert(currentcount <= rct->modvaluemask); #endif #ifdef SKDEBUG gt_disc_distri_add(countdistri,(unsigned long) currentcount); #endif if (maxbucketsize < (unsigned long) currentcount) { maxbucketsize = (unsigned long) currentcount; } partsum += currentcount; #ifdef _LP64 if (rct->bitchangepoints.allocatedGtUlong > 0 && partsum >= exceedvalue) { gt_assert(idx > 0 && rct->bitchangepoints.nextfreeGtUlong < rct->bitchangepoints.allocatedGtUlong); gt_assert(rct->bitchangepoints.spaceGtUlong != NULL); rct->bitchangepoints.spaceGtUlong [rct->bitchangepoints.nextfreeGtUlong++] = idx-1; exceedvalue = ((exceedvalue >> rct->modvaluebits) + 1) << rct->modvaluebits; } #endif if ((idx & bitmask) == 0) { GT_RANDOMCODES_ADD_SAMPLE(partsum); } GT_RCT_PARTIALSUM_LEFTBORDER_SET(leftborderbuffer_all,partsum); } GT_RCT_PARTIALSUM_LEFTBORDER_SET(leftborderbuffer_all,partsum); rct->outfilenameleftborder = gt_leftborderbuffer_delete(leftborderbuffer_all,fcsl, gt_randomcodes_leftborder_entries(rct)); if (partsum > rct->leftborder_samples[samplecount-1]) { GT_RANDOMCODES_ADD_SAMPLE(partsum); } else { gt_assert(partsum == rct->leftborder_samples[samplecount-1]); } gt_assert(expectedlastpartsum == partsum); rct->numofsamples = samplecount-1; #ifdef SKDEBUG gt_randomcodes_evaluate_countdistri(countdistri); gt_disc_distri_delete(countdistri); #endif gt_assert (rct->countocc_small != NULL); gt_free(rct->countocc_small); GT_FCI_SUBTRACTWORKSPACE(fcsl,"countocc_small"); rct->countocc_small = NULL; if (rct->hashmap_addcount > 0 && gt_ma_bookkeeping_enabled()) { spacewithhashmap = gt_ma_get_space_current() + gt_fa_get_space_current(); } gt_hashtable_delete(rct->countocc_exceptions); if (rct->hashmap_addcount > 0 && gt_ma_bookkeeping_enabled()) { unsigned long hashmapspace; spacewithouthashmap = gt_ma_get_space_current() + gt_fa_get_space_current(); gt_assert(spacewithouthashmap < spacewithhashmap); hashmapspace = spacewithhashmap - spacewithouthashmap; gt_log_log("space for hashmap=%.2f (%lu bytes per entry)", GT_MEGABYTES(hashmapspace),hashmapspace/rct->hashmap_addcount); } rct->countocc_exceptions = NULL; return maxbucketsize; } unsigned long gt_randomcodes_get_sample(const GtRandomcodestab *rct, unsigned long idx) { gt_assert(idx <= rct->numofsamples); return rct->leftborder_samples[idx]; } unsigned long gt_randomcodes_get_leftborder(const GtRandomcodestab *rct, unsigned long idx) { #ifdef _LP64 GT_CHANGEPOINT_GET_RCT(changepoint); return (unsigned long) rct->leftborder[idx] + (changepoint << rct->modvaluebits); #else return (unsigned long) rct->leftborder[idx]; #endif } unsigned long gt_randomcodes_leftborder_entries(const GtRandomcodestab *rct) { return rct->differentcodes + 1; } unsigned long gt_randomcodes_numofsamples(const GtRandomcodestab *rct) { return rct->numofsamples; } unsigned long gt_randomcodes_findfirstsamplelarger(const GtRandomcodestab *rct, unsigned long suftaboffset) { unsigned long left = 0, right, mid, midval, found; right = found = rct->numofsamples; while (left+1 < right) { mid = GT_DIV2(left+right); midval = gt_randomcodes_get_sample(rct,mid); if (suftaboffset == midval) { return mid; } if (suftaboffset < midval) { found = mid; right = mid - 1; } else { left = mid + 1; } } gt_assert(suftaboffset <= gt_randomcodes_get_sample(rct,found)); return found; } unsigned long gt_randomcodes_sample2full(const GtRandomcodestab *rct, unsigned long idx) { gt_assert(idx <= rct->numofsamples); if (idx < rct->numofsamples) { return idx << rct->sampleshift; } return rct->differentcodes - 1; } void gt_randomcodes_samples_delete(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct) { if (rct->leftborder_samples != NULL) { gt_free(rct->leftborder_samples); GT_FCI_SUBTRACTWORKSPACE(fcsl,"leftborder_samples"); rct->leftborder_samples = NULL; } } void gt_randomcodes_countocc_delete(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct) { if (rct->countocc_small != NULL) { GT_FCI_SUBTRACTWORKSPACE(fcsl,"countocc_small"); gt_free(rct->countocc_small); rct->countocc_small = NULL; } gt_hashtable_delete(rct->countocc_exceptions); rct->countocc_exceptions = NULL; } void gt_randomcodes_tab_delete(GtFirstcodesspacelog *fcsl,GtRandomcodestab *rct) { gt_randomcodes_samples_delete(fcsl,rct); gt_str_delete(rct->outfilenameleftborder); rct->outfilenameleftborder = NULL; #ifdef _LP64 GT_FREEARRAY(&rct->bitchangepoints,GtUlong); #endif } void gt_randomcodes_countocc_setnull(GtRandomcodestab *rct) { rct->leftborder = NULL; rct->countocc_small = NULL; rct->leftborder_samples = NULL; rct->countocc_exceptions = NULL; rct->differentcodes = 0; rct->lastincremented_idx = 0; rct->lastincremented_valueptr = NULL; rct->hashmap_addcount = 0; rct->hashmap_incrementcount = 0; rct->all_incrementcount = 0; rct->hashmap_getcount = 0; rct->outfilenameleftborder = NULL; #ifdef _LP64 GT_INITARRAY(&rct->bitchangepoints,GtUlong); #endif } uint32_t **gt_randomcodes_leftborder_address(GtRandomcodestab *rct) { return &rct->leftborder; } void gt_randomcodes_leftborder_remap(GtRandomcodestab *rct,uint32_t *ptr) { rct->leftborder = ptr; } const GtStr *gt_randomcodes_outfilenameleftborder(const GtRandomcodestab *rct) { return rct->outfilenameleftborder; } genometools-1.5.1/src/match/randomcodes-tab.h000066400000000000000000000146211211610345200211460ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RANDOMCODES_TAB_H #define RANDOMCODES_TAB_H #include #include "core/unused_api.h" #include "core/str_api.h" #include "core/hashmap-generic.h" #include "core/logger_api.h" #include "core/arraydef.h" #include "firstcodes-tab.h" #include "firstcodes-spacelog.h" #define GT_RANDOMCODES_MAXSMALL (UINT8_MAX - 1) #define GT_RANDOMCODES_COUNTOCC_OVERFLOW UINT8_MAX typedef struct { unsigned long differentcodes, numofsamples, sampledistance, hashmap_addcount, hashmap_incrementcount, hashmap_getcount, all_incrementcount; unsigned int sampleshift; uint32_t *leftborder; uint8_t *countocc_small; GtHashtable *countocc_exceptions; unsigned long *leftborder_samples; GtStr *outfilenameleftborder; unsigned long lastincremented_idx; uint32_t *lastincremented_valueptr; #ifdef _LP64 uint32_t modvaluemask; unsigned int modvaluebits; GtArrayGtUlong bitchangepoints; #endif } GtRandomcodestab; GT_UNUSED static inline void gt_randomcodes_countocc_increment(GtRandomcodestab *rct, unsigned long idx) { rct->all_incrementcount++; if (rct->countocc_small[idx] != GT_RANDOMCODES_COUNTOCC_OVERFLOW) { if (rct->countocc_small[idx] < GT_RANDOMCODES_MAXSMALL) { rct->countocc_small[idx]++; } else { gt_assert (rct->countocc_small[idx] == GT_RANDOMCODES_MAXSMALL); rct->countocc_small[idx] = GT_RANDOMCODES_COUNTOCC_OVERFLOW; rct->lastincremented_valueptr = ul_u32_gt_hashmap_add_and_return_storage(rct->countocc_exceptions, idx, (uint32_t) 1); rct->lastincremented_idx = idx; rct->hashmap_addcount++; } } else { /* there is already an overflow for this index */ if (rct->lastincremented_valueptr != NULL && rct->lastincremented_idx == idx) { /* last index is identical to current index. */ gt_assert(*rct->lastincremented_valueptr < UINT32_MAX); (*rct->lastincremented_valueptr)++; } else { uint32_t *valueptr = ul_u32_gt_hashmap_get(rct->countocc_exceptions,idx); rct->hashmap_getcount++; gt_assert(valueptr != NULL && *valueptr < UINT32_MAX); (*valueptr)++; rct->lastincremented_idx = idx; rct->lastincremented_valueptr = valueptr; } rct->hashmap_incrementcount++; } } #ifdef _LP64 #define GT_CHANGEPOINT_GET_RCT(CP)\ unsigned long CP;\ for (CP = 0; CP < rct->bitchangepoints.nextfreeGtUlong &&\ idx > rct->bitchangepoints.spaceGtUlong[CP]; CP++)\ /* Nothing */ ; #endif GT_UNUSED static inline unsigned long gt_randomcodes_insertionindex(GtRandomcodestab *rct, unsigned long idx) { #ifdef _LP64 GT_CHANGEPOINT_GET_RCT(changepoint); gt_assert(idx < rct->differentcodes); if (rct->leftborder[idx] > 0) { return (unsigned long) --rct->leftborder[idx] + (changepoint << rct->modvaluebits); } else { gt_assert(changepoint > 0); changepoint--; rct->bitchangepoints.spaceGtUlong[changepoint]++; rct->leftborder[idx] = rct->modvaluemask; return (unsigned long) rct->leftborder[idx] + (changepoint << rct->modvaluebits); } #else gt_assert(idx < rct->differentcodes && rct->leftborder[idx] > 0); return (unsigned long) --rct->leftborder[idx]; #endif } unsigned long gt_randomcodes_partialsums(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct, unsigned long expectedlastpartsum); unsigned long gt_randomcodes_get_leftborder(const GtRandomcodestab *rct, unsigned long idx); unsigned long gt_randomcodes_numofsamples(const GtRandomcodestab *rct); unsigned long gt_randomcodes_findfirstsamplelarger(const GtRandomcodestab *rct, unsigned long suftaboffset); void gt_randomcodes_samples_delete(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct); void gt_randomcodes_countocc_delete(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct); void gt_randomcodes_tab_delete(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct); void gt_randomcodes_countocc_new(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct, unsigned long numofsequences); void gt_randomcodes_countocc_resize(GtFirstcodesspacelog *fcsl, GtRandomcodestab *rct, unsigned long numofdifferentcodes); void gt_randomcodes_countocc_setnull(GtRandomcodestab *rct); uint32_t **gt_randomcodes_leftborder_address(GtRandomcodestab *rct); void gt_randomcodes_leftborder_remap(GtRandomcodestab *rct,uint32_t *ptr); const GtStr *gt_randomcodes_outfilenameleftborder(const GtRandomcodestab *rct); unsigned long gt_randomcodes_sample2full(const GtRandomcodestab *rct, unsigned long idx); unsigned long gt_randomcodes_leftborder_entries(const GtRandomcodestab *rct); unsigned long gt_randomcodes_leftborder_entries(const GtRandomcodestab *rct); unsigned long gt_randomcodes_get_sample(const GtRandomcodestab *rct, unsigned long idx); unsigned long gt_randomcodes_remdups(unsigned long *allrandomcodes, unsigned int codesize, unsigned long numofcodes, GtLogger *logger); #endif genometools-1.5.1/src/match/randomcodes.c000066400000000000000000001743431211610345200204050ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Stefan Kurtz Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/fa.h" #include "core/arraydef.h" #include "core/codetype.h" #include "core/encseq.h" #include "core/error_api.h" #include "core/logger_api.h" #include "core/mathsupport.h" #include "core/radix_sort.h" #include "core/showtime.h" #include "core/spacecalc.h" #include "core/spacepeak.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/minmax.h" #ifdef GT_THREADS_ENABLED #include "core/thread_api.h" #endif #include "match/firstcodes-buf.h" #include "match/firstcodes-spacelog.h" #include "match/randomcodes-tab.h" #include "match/firstcodes-accum.h" #include "match/randomcodes-insert.h" #include "match/randomcodes.h" #include "match/seqnumrelpos.h" #include "match/randomcodes-sfx-partssuf.h" #include "match/randomcodes-correct.h" #include "match/sfx-shortreadsort.h" #include "match/sfx-suffixer.h" #include "match/spmsuftab.h" #include "match/stamp.h" #include "match/kmercodes.h" typedef struct { unsigned long *ptr, code, index; } GtIndexwithcodeRC; typedef struct { GtIndexwithcodeRC *spaceGtIndexwithcodeRC; unsigned long width, nextfreeGtIndexwithcodeRC, allocatedGtIndexwithcodeRC; unsigned int depth; } GtArrayGtIndexwithcodeRC; typedef struct { unsigned long total_count, total_inserted, countcodes, numofcodes, codebuffer_total, currentminindex, currentmaxindex, differentcodes, /* a copy of the same value as in tab */ widthofpart; GtArrayGtIndexwithcodeRC binsearchcache; unsigned int flushcount, bitsforposref; GtRadixsortinfo *radixsort_code, *radixsort_codepos; GtSpmsuftab *spmsuftab; GtSfxmappedrange *mappedleftborder, *mappedallrandomcodes; unsigned long *allrandomcodes; GtFirstcodesspacelog *fcsl; GtCodeposbuffer buf; GtRandomcodestab tab; } GtRandomcodesinfo; static void gt_storerandomcodes(void *processinfo, GT_UNUSED bool firstinrange, GT_UNUSED unsigned long pos, GtCodetype code) { GtRandomcodesinfo *fci = (GtRandomcodesinfo *) processinfo; gt_assert(fci != NULL && firstinrange && fci->allrandomcodes != NULL && fci->countcodes < fci->numofcodes); fci->allrandomcodes[fci->countcodes++] = code; } static void gt_randomcodes_fillbinsearchcache(GtRandomcodesinfo *fci, unsigned int addbscache_depth) { size_t allocbytes = 0; fci->binsearchcache.depth = addbscache_depth + (unsigned int) log10((double) fci->differentcodes); fci->binsearchcache.nextfreeGtIndexwithcodeRC = 0; fci->binsearchcache.allocatedGtIndexwithcodeRC = 1UL << (fci->binsearchcache.depth+1); fci->binsearchcache.width = fci->differentcodes/fci->binsearchcache.allocatedGtIndexwithcodeRC; if (fci->binsearchcache.allocatedGtIndexwithcodeRC < fci->differentcodes) { unsigned long idx, current = fci->binsearchcache.width; allocbytes = sizeof (*fci->binsearchcache.spaceGtIndexwithcodeRC) * fci->binsearchcache.allocatedGtIndexwithcodeRC; fci->binsearchcache.spaceGtIndexwithcodeRC = gt_malloc(allocbytes); for (idx=0; idx < fci->binsearchcache.allocatedGtIndexwithcodeRC; idx++) { gt_assert(current < fci->differentcodes); fci->binsearchcache. spaceGtIndexwithcodeRC[fci->binsearchcache.nextfreeGtIndexwithcodeRC] .ptr = fci->allrandomcodes + current; fci->binsearchcache. spaceGtIndexwithcodeRC[fci->binsearchcache.nextfreeGtIndexwithcodeRC] .index = current; fci->binsearchcache. spaceGtIndexwithcodeRC[fci->binsearchcache.nextfreeGtIndexwithcodeRC++] .code = fci->allrandomcodes[current]; current += fci->binsearchcache.width; } } gt_log_log("binsearchcache.depth=%u => %lu bytes", fci->binsearchcache.depth, (unsigned long) allocbytes); GT_FCI_ADDWORKSPACE(fci->fcsl,"binsearchcache",allocbytes); } #define SHOWFOUND(F)\ if ((F) == NULL)\ {\ fprintf(stderr,"%s = NULL\n",#F);\ } else\ {\ fprintf(stderr,"%s = %lu\n",#F,\ (unsigned long) ((F) - fci->allrandomcodes));\ } unsigned long gt_randomcodes_find_accu(const GtRandomcodesinfo *fci, unsigned long code) { const unsigned long *found = NULL, *leftptr = NULL, *midptr, *rightptr = NULL; if (code <= fci->allrandomcodes[0]) { return 0; } if (fci->binsearchcache.spaceGtIndexwithcodeRC != NULL) { const GtIndexwithcodeRC *leftic, *midic, *rightic; unsigned int depth; leftic = fci->binsearchcache.spaceGtIndexwithcodeRC; rightic = fci->binsearchcache.spaceGtIndexwithcodeRC + fci->binsearchcache.nextfreeGtIndexwithcodeRC - 1; for (depth = 0; /* Nothing */; depth++) { midic = leftic + GT_DIV2((unsigned long) (rightic-leftic)); if (code < midic->code) { found = midic->ptr; if (depth < fci->binsearchcache.depth) { rightic = midic - 1; } else { gt_assert(leftic->ptr != NULL && rightic->ptr != NULL); if (leftic > fci->binsearchcache.spaceGtIndexwithcodeRC) { leftptr = (leftic-1)->ptr + 1; } else { gt_assert(code > fci->allrandomcodes[0]); leftptr = fci->allrandomcodes + 1; } rightptr = rightic->ptr - 1; break; } } else { if (code > midic->code) { if (depth < fci->binsearchcache.depth) { leftic = midic + 1; } else { gt_assert(leftic->ptr != NULL && rightic->ptr != NULL); leftptr = leftic->ptr + 1; if (rightic < fci->binsearchcache.spaceGtIndexwithcodeRC + fci->binsearchcache.nextfreeGtIndexwithcodeRC - 1) { rightptr = (rightic+1)->ptr - 1; } else { rightptr = fci->allrandomcodes + fci->differentcodes - 1; } break; } } else { gt_assert(midic->ptr != NULL); return (unsigned long) (midic->ptr - fci->allrandomcodes); } } } gt_assert(leftptr != NULL && rightptr != NULL); } else { leftptr = fci->allrandomcodes + 1; rightptr = fci->allrandomcodes + fci->differentcodes - 1; } while (leftptr <= rightptr) { midptr = leftptr + GT_DIV2((unsigned long) (rightptr-leftptr)); if (code < *midptr) { rightptr = midptr - 1; if (code > *rightptr) { return (unsigned long) (midptr - fci->allrandomcodes); } found = midptr; } else { if (code > *midptr) { leftptr = midptr + 1; if (code <= *leftptr) { return (unsigned long) (leftptr - fci->allrandomcodes); } } else { gt_assert(midptr != NULL); return (unsigned long) (midptr - fci->allrandomcodes); } } } return (found != NULL) ? (unsigned long) (found - fci->allrandomcodes) : ULONG_MAX; } const unsigned long *gt_randomcodes_find_insert(const GtRandomcodesinfo *fci, unsigned long code) { const unsigned long *found = NULL, *leftptr = NULL, *midptr, *rightptr = NULL; leftptr = fci->allrandomcodes + fci->currentminindex; rightptr = fci->allrandomcodes + fci->currentmaxindex; if (code < *leftptr) { return leftptr; } while (leftptr <= rightptr) { midptr = leftptr + GT_DIV2((unsigned long) (rightptr-leftptr)); if (code < *midptr) { rightptr = midptr - 1; if (code > *rightptr) { return midptr; } found = midptr; } else { if (code > *midptr) { leftptr = midptr + 1; if (code <= *leftptr) { return leftptr; } } else { return midptr; } } } return found; } static unsigned long gt_randomcodes_accumulatecounts_merge( GtRandomcodesinfo *fci, const unsigned long *querystream_fst, const unsigned long *subjectstream_fst) { unsigned long found = 0; const unsigned long *query = querystream_fst, *subject = subjectstream_fst, *querystream_lst = fci->buf.spaceGtUlong + fci->buf.nextfree - 1, *subjectstream_lst = fci->allrandomcodes + fci->differentcodes - 1; while (query <= querystream_lst && subject <= subjectstream_lst) { if (*query <= *subject) { gt_randomcodes_countocc_increment(&fci->tab,(unsigned long) (subject - fci->allrandomcodes)); found++; query++; } else { subject++; } } return found; } static void gt_randomcodes_accumulatecounts_flush(void *data) { GtRandomcodesinfo *fci = (GtRandomcodesinfo *) data; if (fci->buf.nextfree > 0) { unsigned long foundindex; gt_assert(fci->allrandomcodes != NULL); fci->codebuffer_total += fci->buf.nextfree; gt_radixsort_inplace_sort(fci->radixsort_code,fci->buf.nextfree); foundindex = gt_randomcodes_find_accu(fci,fci->buf.spaceGtUlong[0]); gt_assert(foundindex != ULONG_MAX); fci->total_count += gt_randomcodes_accumulatecounts_merge(fci, fci->buf.spaceGtUlong, fci->allrandomcodes + foundindex); gt_assert(fci->total_count == fci->codebuffer_total); fci->flushcount++; fci->buf.nextfree = 0; } } static unsigned long gt_randomcodes_insertsuffixes_merge( GtRandomcodesinfo *fci, const GtUlongPair *querystream_fst, const unsigned long *subjectstream_fst) { unsigned long found = 0, idx; const GtUlongPair *query = querystream_fst, *querystream_lst = fci->buf.spaceGtUlongPair + fci->buf.nextfree - 1; const unsigned long *subject = subjectstream_fst, *subjectstream_lst = fci->allrandomcodes + fci->currentmaxindex; while (query <= querystream_lst && subject <= subjectstream_lst) { if (query->a <= *subject) { idx = gt_randomcodes_insertionindex(&fci->tab, (unsigned long)(subject - fci->allrandomcodes)); gt_spmsuftab_set(fci->spmsuftab,idx, gt_spmsuftab_usebitsforpositions(fci->spmsuftab) ? gt_seqnumrelpos_decode_pos(fci->buf.snrp,query->b) : query->b); found++; query++; } else { subject++; } } return found; } static void gt_randomcodes_insertsuffixes_flush(void *data) { GtRandomcodesinfo *fci = (GtRandomcodesinfo *) data; if (fci->buf.nextfree > 0) { const unsigned long *ptr; gt_assert(fci->allrandomcodes != NULL); fci->codebuffer_total += fci->buf.nextfree; gt_radixsort_inplace_sort(fci->radixsort_codepos,fci->buf.nextfree); ptr = gt_randomcodes_find_insert(fci,fci->buf.spaceGtUlongPair[0].a); gt_assert(ptr != NULL); fci->total_inserted += gt_randomcodes_insertsuffixes_merge(fci, fci->buf.spaceGtUlongPair, ptr); gt_assert(fci->total_inserted == fci->codebuffer_total); fci->flushcount++; fci->buf.nextfree = 0; } } static void gt_randomcodes_checksuftab_bucket(const GtEncseq *encseq, GtReadmode readmode, GtEncseqReader *esr1, GtEncseqReader *esr2, unsigned long previoussuffix, bool previousdefined, const unsigned long *seqnum_relpos_bucket, const GtSeqnumrelpos *snrp, GT_UNUSED const uint16_t *lcptab_bucket, unsigned long numberofsuffixes) { unsigned long idx, current, maxlcp, totallength = gt_encseq_total_length(encseq); const unsigned long depth = 0; GT_UNUSED int cmp; const bool specialsareequal = false, specialsareequalatdepth0 = false; gt_assert(!previousdefined || previoussuffix < totallength); for (idx = 0; idx < numberofsuffixes; idx++) { current = gt_seqnumrelpos_decode_pos(snrp,seqnum_relpos_bucket[idx]); if (previousdefined && idx < totallength) { gt_assert(current < totallength); cmp = gt_encseq_check_comparetwosuffixes(encseq, readmode, &maxlcp, specialsareequal, specialsareequalatdepth0, depth, previoussuffix, current, esr1, esr2); gt_assert(cmp <= 0); gt_assert(idx == 0 || maxlcp == (unsigned long) lcptab_bucket[idx]); } previoussuffix = current; previousdefined = true; } } /* this can be maybe improved by using optimized code for * determining the position of the most significant bit */ static unsigned long gt_randomcodes_codelcp(unsigned long a, unsigned long b) { unsigned long lcpvalue = 0; unsigned long mask; const unsigned long xorvalue = a ^ b; for (mask = 3UL << GT_MULT2(GT_UNITSIN2BITENC - 1); mask > 0; mask >>= 2, lcpvalue++) if (xorvalue & mask) return lcpvalue; return lcpvalue; } static int gt_randomcodes_sortremaining(GtShortreadsortworkinfo *srsw, const GtEncseq *encseq, GtReadmode readmode, const GtSpmsuftab *spmsuftab, const GtSeqnumrelpos *snrp, const GtRandomcodestab *rct, const unsigned long *allrandomcodes, unsigned long minindex, unsigned long maxindex, unsigned long sumofwidth, unsigned int correction_kmersize, unsigned int bucketkey_kmersize, GtRandomcodesintervalprocess itvprocess, GtRandomcodesintervalprocess_end itvprocess_end, void *itvprocessdata, bool usemaxdepth, bool withsuftabcheck, GtError *err) { unsigned long current, next = GT_UNDEF_ULONG, idx, width, sumwidth = 0, previoussuffix = 0; GtShortreadsortresult srsresult; bool previousdefined = false, haserr = false; gt_assert(allrandomcodes != NULL); current = gt_randomcodes_get_leftborder(rct,minindex); for (idx = minindex; idx <= maxindex; idx++) { if (idx < maxindex) { next = gt_randomcodes_get_leftborder(rct,idx+1); gt_assert(current <= next); width = next - current; } else { gt_assert(sumofwidth >= current); width = sumofwidth - current; } sumwidth += width; gt_assert(sumwidth <= spmsuftab->numofentries); if (width >= 2UL) { unsigned long lcpvalue = 0; if (idx > minindex) { lcpvalue = gt_randomcodes_codelcp(allrandomcodes[idx - 1], allrandomcodes[idx]); gt_assert(lcpvalue >= (unsigned long)(GT_UNITSIN2BITENC - bucketkey_kmersize)); lcpvalue -= (GT_UNITSIN2BITENC - (unsigned long) bucketkey_kmersize); } gt_assert(lcpvalue < (unsigned long)GT_UNITSIN2BITENC); gt_assert(lcpvalue < (unsigned long)(correction_kmersize - 1U)); gt_shortreadsort_firstcodes_sort(&srsresult, srsw, snrp, encseq, spmsuftab, current, width, lcpvalue, usemaxdepth ? (unsigned long)correction_kmersize : 0); if (withsuftabcheck) { gt_randomcodes_checksuftab_bucket(encseq, readmode, NULL, NULL, previoussuffix, previousdefined, srsresult.suftab_bucket, snrp, srsresult.lcptab_bucket, width); previousdefined = true; previoussuffix = gt_seqnumrelpos_decode_pos(snrp,srsresult.suftab_bucket[width-1]); } if (itvprocess != NULL) { if (itvprocess(itvprocessdata, srsresult.suftab_bucket, snrp,srsresult.lcptab_bucket,width, correction_kmersize,err) != 0) { haserr = true; break; } } } else if (width == 1UL) { if (itvprocess != NULL) { unsigned long suftab_value = gt_spmsuftab_get(spmsuftab, current); const uint16_t lcptab_value = 0; if (gt_spmsuftab_usebitsforpositions(spmsuftab)) { unsigned long seqnum, relpos; seqnum = gt_encseq_seqnum(encseq, suftab_value); relpos = suftab_value - gt_encseq_seqstartpos(encseq, seqnum); suftab_value = gt_seqnumrelpos_encode(snrp, seqnum, relpos); } if (itvprocess(itvprocessdata, &suftab_value, snrp, &lcptab_value, 1UL, correction_kmersize, err) != 0) { haserr = true; break; } } } gt_assert((minindex == maxindex) || next != GT_UNDEF_ULONG); current = next; } if (itvprocess_end != NULL) { itvprocess_end(itvprocessdata); } return haserr ? -1 : 0; } #ifdef GT_THREADS_ENABLED static unsigned long gt_randomcodes_findfirstlarger(const GtRandomcodestab *rct, unsigned long start, unsigned long end, unsigned long offset) { unsigned long left = start, right = end, found = end, mid, midval; while (left+1 < right) { mid = GT_DIV2(left+right); midval = gt_randomcodes_get_leftborder(rct,mid); if (offset == midval) { return mid; } if (offset < midval) { found = mid; right = mid - 1; } else { left = mid + 1; } } return found; } static unsigned long *gt_randomcodes_evenly_divide_part( const GtRandomcodestab *rct, unsigned long partminindex, unsigned long partmaxindex, unsigned long numofsuffixes, unsigned int numofparts) { unsigned long *endindexes, widthofpart, offset; unsigned int part, remainder; gt_assert(partminindex < partmaxindex && numofparts >= 2U); widthofpart = numofsuffixes/numofparts; endindexes = gt_malloc(sizeof (*endindexes) * numofparts); offset = gt_randomcodes_get_leftborder(rct,partminindex); remainder = (unsigned int) (numofsuffixes % (unsigned long) numofparts); for (part=0; part < numofparts; part++) { if (remainder > 0) { offset += widthofpart + 1; remainder--; } else { offset += widthofpart; } if (part == numofparts - 1) { endindexes[part] = partmaxindex; } else { unsigned long start = (part == 0) ? partminindex : endindexes[part-1] + 1; endindexes[part] = gt_randomcodes_findfirstlarger(rct,start,partmaxindex, offset); gt_assert(endindexes[part] <= partmaxindex); } } return endindexes; } typedef struct { GtShortreadsortworkinfo *srsw; const GtEncseq *encseq; GtReadmode readmode; const GtSpmsuftab *spmsuftab; const GtSeqnumrelpos *snrp; const GtRandomcodestab *rct; const unsigned long *allrandomcodes; unsigned long minindex, maxindex, sumofwidth; unsigned int correction_kmersize, bucketkey_kmersize; bool withsuftabcheck, usemaxdepth; GtRandomcodesintervalprocess itvprocess; GtRandomcodesintervalprocess_end itvprocess_end; void *itvprocessdata; GtError *err; GtThread *thread; } GtRandomcodesSortRemainingThreadinfo; static void *gt_randomcodes_thread_caller_sortremaining(void *data) { GtRandomcodesSortRemainingThreadinfo *threadinfo = (GtRandomcodesSortRemainingThreadinfo *) data; if (gt_randomcodes_sortremaining(threadinfo->srsw, threadinfo->encseq, threadinfo->readmode, threadinfo->spmsuftab, threadinfo->snrp, threadinfo->rct, threadinfo->allrandomcodes, threadinfo->minindex, threadinfo->maxindex, threadinfo->sumofwidth, threadinfo->correction_kmersize, threadinfo->bucketkey_kmersize, threadinfo->itvprocess, threadinfo->itvprocess_end, threadinfo->itvprocessdata, threadinfo->usemaxdepth, threadinfo->withsuftabcheck, threadinfo->err) != 0) { gt_assert(false); } return NULL; } static int gt_randomcodes_thread_sortremaining( GtShortreadsortworkinfo **srswtab, const GtEncseq *encseq, GtReadmode readmode, const GtSpmsuftab *spmsuftab, const GtSeqnumrelpos *snrp, const GtRandomcodestab *rct, unsigned long *allrandomcodes, unsigned long partminindex, unsigned long partmaxindex, unsigned long widthofpart, unsigned long sumofwidth, unsigned int correction_kmersize, unsigned int bucketkey_kmersize, GtRandomcodesintervalprocess itvprocess, GtRandomcodesintervalprocess_end itvprocess_end, void *itvprocessdatatab, bool usemaxdepth, bool withsuftabcheck, unsigned int threads, GtLogger *logger, GtError *err) { unsigned int t; unsigned long sum = 0, *endindexes; GtRandomcodesSortRemainingThreadinfo *threadinfo; bool haserr = false; gt_assert(threads >= 2U); endindexes = gt_randomcodes_evenly_divide_part(rct, partminindex, partmaxindex, widthofpart, threads); threadinfo = gt_malloc(sizeof (*threadinfo) * threads); for (t=0; tbinsearchcache.spaceGtIndexwithcodeRC != NULL) { GT_FCI_SUBTRACTWORKSPACE(fci->fcsl,"binsearchcache"); GT_FREEARRAY(&fci->binsearchcache,GtIndexwithcodeRC); } if (fci->radixsort_codepos != NULL) { gt_radixsort_delete(fci->radixsort_codepos); GT_FCI_SUBTRACTWORKSPACE(fci->fcsl,"radixsort_codepos"); fci->radixsort_codepos = NULL; } } static unsigned long gt_randomcodes_idx2mincode(const GtRandomcodesinfo *fci, unsigned long idx) { gt_assert(idx <= fci->differentcodes); if (idx == 0) { return 0; } else { return fci->allrandomcodes[idx-1]; } } static unsigned long gt_randomcodes_idx2maxcode(const GtRandomcodesinfo *fci, unsigned long idx) { gt_assert(idx <= fci->differentcodes); if (idx == fci->differentcodes) { return fci->allrandomcodes[idx-1]; } return fci->allrandomcodes[idx]; } void gt_rungetencseqkmers_rc(const GtEncseq *encseq,unsigned int kmersize) { const GtReadmode readmode = GT_READMODE_FORWARD; getencseqkmers_twobitencoding(encseq, readmode, kmersize, kmersize, false, NULL, NULL, NULL, NULL); } static void run_allcodes_distribution(const unsigned long *allrandomcodes, unsigned long differentcodes) { unsigned long idx, diff, mindiff = 0, maxdiff = 0, distbits[64+1] = {0}; for (idx = 1UL; idx < differentcodes; idx++) { gt_assert(allrandomcodes[idx-1] < allrandomcodes[idx]); diff = allrandomcodes[idx] - allrandomcodes[idx-1]; if (idx == 1UL || diff < mindiff) { mindiff = diff; } if (diff > maxdiff) { maxdiff = diff; } distbits[gt_determinebitspervalue(diff)]++; } printf("allrandomcodes: mindiff=%lu,maxdiff=%lu(%u bits)\n", mindiff,maxdiff,gt_determinebitspervalue(maxdiff)); for (idx = 0; idx <= 64UL; idx++) { if (distbits[idx] > 0) { printf("%lu bits: %lu\n",idx,distbits[idx]); } } } static int gt_randomcodes_init(GtRandomcodesinfo *fci, const GtEncseq *encseq, bool withsuftabcheck, unsigned int correction_kmersize, GtError *err) { unsigned long maxseqlength, maxrelpos, numofsequences; unsigned int bitsforrelpos, bitsforseqnum; bool haserr = false; maxseqlength = gt_encseq_max_seq_length(encseq); if (maxseqlength > (unsigned long) correction_kmersize) { maxrelpos = maxseqlength - (unsigned long) correction_kmersize; } else { maxrelpos = 0; } bitsforrelpos = gt_determinebitspervalue(maxrelpos); fci->buf.snrp = gt_seqnumrelpos_new(bitsforrelpos,encseq); fci->buf.markprefix = NULL; fci->buf.marksuffix = NULL; fci->buf.accum_all = true; numofsequences = gt_encseq_num_of_sequences(encseq); gt_assert(numofsequences > 0); bitsforseqnum = gt_determinebitspervalue(numofsequences - 1); if (bitsforseqnum + bitsforrelpos > (unsigned int) GT_INTWORDSIZE) { gt_seqnumrelpos_delete(fci->buf.snrp); fci->buf.snrp = NULL; gt_error_set(err,"cannot process encoded sequences with %lu sequences " "of length up to %lu (%u+%u bits)", numofsequences,maxseqlength,bitsforseqnum, bitsforrelpos); haserr = true; } fci->fcsl = gt_firstcodes_spacelog_new(); fci->spmsuftab = NULL; fci->radixsort_code = NULL; fci->radixsort_codepos = NULL; fci->buf.spaceGtUlongPair = NULL; fci->buf.spaceGtUlong = NULL; fci->mappedallrandomcodes = NULL; fci->mappedleftborder = NULL; GT_FCI_ADDWORKSPACE(fci->fcsl,"encseq",(size_t) gt_encseq_sizeofrep(encseq)); if (withsuftabcheck) { gt_firstcodes_spacelog_start_diff(fci->fcsl); } fci->allrandomcodes = NULL; gt_randomcodes_countocc_setnull(&fci->tab); fci->countcodes = 0; fci->total_count = 0; fci->total_inserted = 0; fci->bitsforposref = bitsforseqnum + bitsforrelpos; GT_INITARRAY(&fci->binsearchcache,GtIndexwithcodeRC); return haserr ? -1 : 0; } #define GT_RANDOMCODES_NOFSAMPLES_MIN 2UL static inline unsigned long gt_randomcodes_calculate_nofsamples( GT_UNUSED const GtEncseq *encseq, unsigned long nofsequences, unsigned long totallength, unsigned int keysize, unsigned int sampling_factor) { unsigned long nofkmers = totallength, nofnonkmers = (keysize + 1) * nofsequences - 1, nofsamples; gt_log_log("totallength = %lu", nofkmers); gt_log_log("nofsequences = %lu", nofsequences); if (nofnonkmers < nofkmers) { nofkmers -= nofnonkmers; gt_log_log("nofkmers = %lu", nofkmers); } else { gt_assert(gt_encseq_min_seq_length(encseq) <= (unsigned long)keysize); } nofsamples = nofkmers / sampling_factor; return MAX(GT_RANDOMCODES_NOFSAMPLES_MIN, nofsamples); } static void gt_randomcodes_generate_sampling_positions(unsigned long *buffer, unsigned long numofsamples, const GtEncseq *encseq, unsigned long totallength, unsigned int sampling_factor, unsigned int keysize, bool sort, GtTimer *timer) { unsigned long i, randmax; bool sorted = true; randmax = (unsigned long)(GT_MULT2(sampling_factor) - GT_DIV16(sampling_factor)); if (randmax >= totallength) randmax = totallength; buffer[0] = gt_rand_max(randmax); for (i = 1UL; i < numofsamples; i++) { unsigned long sn, sp, sl, rp; buffer[i] = buffer[i-1]; while (true) { buffer[i] += (gt_rand_max(randmax) + 1UL); if (buffer[i] >= totallength) { buffer[i] = 0; sorted = false; } if (!gt_encseq_position_is_separator(encseq, buffer[i], GT_READMODE_FORWARD)) { sn = gt_encseq_seqnum(encseq, buffer[i]); sp = gt_encseq_seqstartpos(encseq, sn); sl = gt_encseq_seqlength(encseq, sn); rp = buffer[i] - sp; if (rp < sl - keysize) break; } } } if (sort && !sorted) { if (timer != NULL) gt_timer_show_progress(timer, "to sort sampling positions", stdout); gt_radixsort_inplace_ulong(buffer, numofsamples); } if (sorted) { gt_log_log("range of sampling positions = [%lu, %lu]", buffer[0], buffer[numofsamples - 1]); } } static int gt_randomcodes_collectcodes(GtRandomcodesinfo *fci, bool usefirstcodes, unsigned int sampling_factor, const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, unsigned int correction_kmersize, size_t maximumspace, GtLogger *logger, GtTimer *timer, GtError *err) { size_t sizeforcodestable; unsigned long totallength = gt_encseq_total_length(encseq), nofsequences = gt_encseq_num_of_sequences(encseq); unsigned long maskright = GT_MASKRIGHT((unsigned long) kmersize); if (usefirstcodes) { fci->numofcodes = nofsequences + 1; } else { fci->numofcodes = gt_randomcodes_calculate_nofsamples(encseq, nofsequences, totallength, kmersize, sampling_factor) + 1; } sizeforcodestable = sizeof (*fci->allrandomcodes) * fci->numofcodes; if (maximumspace > 0 && gt_firstcodes_spacelog_total(fci->fcsl) + sizeforcodestable > maximumspace) { gt_error_set(err,"already used %.2f MB of memory and require %.2f for the " "codes table => cannot compute index in at most %.2f MB", GT_MEGABYTES(gt_firstcodes_spacelog_total(fci->fcsl)), GT_MEGABYTES(sizeforcodestable), GT_MEGABYTES(maximumspace)); return -1; } fci->allrandomcodes = gt_malloc(sizeforcodestable); GT_FCI_ADDSPLITSPACE(fci->fcsl,"allrandomcodes",sizeforcodestable); if (usefirstcodes) { if (timer != NULL) gt_timer_show_progress(timer, "to collect first codes", stdout); getencseqkmers_twobitencoding(encseq, readmode, kmersize, correction_kmersize, true, gt_storerandomcodes, fci, NULL, NULL); } else { unsigned long i; const GtTwobitencoding *twobitenc = gt_encseq_twobitencoding_export(encseq); unsigned long realtotallength = totallength; if (gt_encseq_is_mirrored(encseq)) { realtotallength >>= 1; } if (timer != NULL) gt_timer_show_progress(timer, "to generate sampling positions", stdout); gt_randomcodes_generate_sampling_positions(fci->allrandomcodes, fci->numofcodes - 1, encseq, totallength, sampling_factor, kmersize, true, timer); if (timer != NULL) gt_timer_show_progress(timer, "to collect sample codes", stdout); for (i = 0; i < fci->numofcodes - 1; i++) { unsigned long pos = fci->allrandomcodes[i]; bool revcompl = false; if (pos > realtotallength) { pos = GT_REVERSEPOS(totallength, pos); revcompl = true; } fci->allrandomcodes[i] = gt_kmercode_at_position(twobitenc, pos, kmersize); if (revcompl) { fci->allrandomcodes[i] = gt_kmercode_complement( gt_kmercode_reverse(fci->allrandomcodes[i], kmersize), maskright); } } fci->countcodes = fci->numofcodes - 1; } /* add an artificial last bucket to collect suffixes * larger than the last code */ gt_storerandomcodes(fci, true, /* unused*/ 0, maskright); gt_logger_log(logger,"have stored %lu bucket keys",fci->countcodes); if (timer != NULL) { gt_timer_show_progress(timer, "to sort bucket keys",stdout); } gt_radixsort_inplace_ulong(fci->allrandomcodes,fci->numofcodes); gt_assert(fci->allrandomcodes != NULL); fci->differentcodes = gt_randomcodes_remdups(fci->allrandomcodes, kmersize, fci->numofcodes, logger); if (fci->differentcodes > 0 && fci->differentcodes < fci->numofcodes) { fci->allrandomcodes = gt_realloc(fci->allrandomcodes, sizeof (*fci->allrandomcodes) * fci->differentcodes); GT_FCI_SUBTRACTADDSPLITSPACE(fci->fcsl,"allrandomcodes", sizeof (*fci->allrandomcodes) * fci->differentcodes); } gt_randomcodes_countocc_new(fci->fcsl,&fci->tab,fci->differentcodes); return 0; } static int gt_randomcodes_allocspace(GtRandomcodesinfo *fci, unsigned int numofparts, unsigned long maximumspace, unsigned long phase2extra, GtError *err) { if (maximumspace > 0) { if ((unsigned long) gt_firstcodes_spacelog_total(fci->fcsl) + phase2extra >= maximumspace) { gt_error_set(err,"already used %.2f MB of memory and need %.2f MB later " "=> cannot compute index in at most %.2f MB", GT_MEGABYTES(gt_firstcodes_spacelog_total(fci->fcsl)), GT_MEGABYTES(phase2extra), GT_MEGABYTES(maximumspace)); return -1; } else { size_t remainspace = (size_t) maximumspace - (gt_firstcodes_spacelog_total(fci->fcsl) + phase2extra); fci->buf.allocated = gt_radixsort_max_num_of_entries_ulong(remainspace); if (fci->buf.allocated < fci->differentcodes / 16UL) { fci->buf.allocated = fci->differentcodes / 16UL; } } } else { if (numofparts == 0) { fci->buf.allocated = gt_radixsort_max_num_of_entries_ulong( gt_firstcodes_spacelog_total(fci->fcsl)/7UL); } else { fci->buf.allocated = fci->differentcodes/5; } } if (fci->buf.allocated < 16UL) { fci->buf.allocated = 16UL; } return 0; } static void gt_randomcodes_accumulatecounts_run(GtRandomcodesinfo *fci, const GtEncseq *encseq, unsigned int kmersize, unsigned int correction_kmersize, GtLogger *logger, GtTimer *timer) { if (timer != NULL) { gt_timer_show_progress(timer, "to accumulate counts",stdout); } gt_assert(fci->buf.allocated > 0); fci->radixsort_code = gt_radixsort_new_ulong(fci->buf.allocated); fci->buf.spaceGtUlong = gt_radixsort_space_ulong(fci->radixsort_code); GT_FCI_ADDWORKSPACE(fci->fcsl,"radixsort_code", gt_radixsort_size(fci->radixsort_code)); fci->buf.fciptr = fci; /* as we need to give fci to the flush function */ fci->buf.flush_function = gt_randomcodes_accumulatecounts_flush; gt_logger_log(logger,"maximum space for accumulating counts %.2f MB", GT_MEGABYTES(gt_firstcodes_spacelog_total(fci->fcsl))); gt_firstcodes_accum_runkmerscan(encseq, kmersize, correction_kmersize, &fci->buf); gt_randomcodes_accumulatecounts_flush(fci); gt_logger_log(logger,"codebuffer_total=%lu (%.3f%% of all suffixes)", fci->codebuffer_total, 100.0 * (double) fci->codebuffer_total/ gt_encseq_total_length(encseq)); gt_assert(fci->total_count == fci->codebuffer_total); if (fci->total_count > 0) { gt_assert(fci->flushcount > 0); gt_logger_log(logger,"total count=%lu (%.3f%% of all suffixes), " "%u rounds (avg length %lu)", fci->total_count, 100.0 * (double) fci->total_count/ gt_encseq_total_length(encseq), fci->flushcount, fci->codebuffer_total/fci->flushcount); } gt_radixsort_delete(fci->radixsort_code); fci->radixsort_code = NULL; GT_FCI_SUBTRACTWORKSPACE(fci->fcsl,"radixsort_code"); if (timer != NULL) { gt_timer_show_progress(timer,"to compute partial sums",stdout); } } static void gt_randomcodes_map_sections(GtRandomcodesinfo *fci, GtSfxmappedrangelist *sfxmrlist) { if (fci->differentcodes > 0) { fci->mappedallrandomcodes = gt_Sfxmappedrange_new("allrandomcodes", fci->differentcodes, GtSfxunsignedlong, NULL, NULL); gt_Sfxmappedrangelist_add(sfxmrlist,fci->mappedallrandomcodes); fci->mappedleftborder = gt_Sfxmappedrange_new("leftborder", fci->differentcodes+1, GtSfxuint32_t, NULL, NULL); gt_Sfxmappedrangelist_add(sfxmrlist,fci->mappedleftborder); } } static int gt_randomcodes_auto_parts(GtRandomcodesinfo *fci, GtSfxmappedrangelist *sfxmrlist, unsigned int numofparts, unsigned long *maximumspace, unsigned long maxbucketsize, unsigned int upper_kmersize, unsigned long totallength, unsigned long maxseqlength, unsigned long suftabentries, unsigned long phase2extra, bool usemaxdepth, GtError *err) { int retval; unsigned long leftbordersize_all; if (numofparts == 0 && *maximumspace == 0) { *maximumspace = (unsigned long) (gt_firstcodes_spacelog_peak(fci->fcsl) + phase2extra + gt_shortreadsort_size(true, maxbucketsize, usemaxdepth ? (unsigned long)upper_kmersize : maxseqlength) + 4 * 4096); } else { gt_assert(*maximumspace > 0); } if (fci->mappedleftborder != NULL) { leftbordersize_all = gt_Sfxmappedrange_size_mapped( fci->mappedleftborder,0, gt_randomcodes_leftborder_entries(&fci->tab)-1); } else { leftbordersize_all = 0; } retval = gt_suftabparts_rc_fit_memlimit( gt_firstcodes_spacelog_total(fci->fcsl) /*as this is subtracted*/ + leftbordersize_all + phase2extra, *maximumspace, NULL, &fci->tab, sfxmrlist, totallength, fci->bitsforposref, 0, /* special characters not used */ suftabentries, false, /* suftabuint not used */ err); if (retval < 0) { return -1; } else { gt_assert(retval > 0); return retval; } } static void gt_randomcodes_allocsize_for_insertion(GtRandomcodesinfo *fci, unsigned long maximumspace, const GtSuftabparts_rc *suftabparts_rc, unsigned long phase2extra) { if (maximumspace > 0) { const unsigned long maxrounds = 400UL; size_t used = gt_firstcodes_spacelog_workspace(fci->fcsl) + phase2extra + gt_suftabparts_rc_largestsizemappedpartwise(suftabparts_rc); if ((unsigned long) used < maximumspace) { fci->buf.allocated = gt_radixsort_max_num_of_entries_ulongpair( (size_t) maximumspace - used); } else { fci->buf.allocated /= 4UL; } if ((unsigned long) (fci->codebuffer_total+fci->numofcodes)/ fci->buf.allocated > maxrounds) { fci->buf.allocated = (fci->codebuffer_total+fci->numofcodes)/maxrounds; } } else { fci->buf.allocated /= 2UL; } } static int gt_randomcodes_process_part(GtRandomcodesinfo *fci, const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, unsigned int correction_kmersize, const GtSuftabparts_rc *suftabparts_rc, unsigned int part, unsigned long maximumspace, #ifndef GT_THREADS_ENABLED GT_UNUSED #endif unsigned int threads, unsigned long suftabentries, bool withsuftabcheck, GtShortreadsortworkinfo **srswtab, GtRandomcodesintervalprocess itvprocess, GtRandomcodesintervalprocess_end itvprocess_end, void *itvprocessdatatab, bool usemaxdepth, GtLogger *logger, GtTimer *timer, GtError *err) { unsigned long spaceforbucketprocessing = 0; void *mapptr; bool haserr = false; if (timer != NULL) { gt_timer_show_progress(timer, "to insert suffixes into buckets",stdout); } fci->widthofpart = gt_suftabparts_rc_widthofpart(part,suftabparts_rc); gt_logger_log(logger,"compute part %u (%.2f%% of all kmers)",part, (double) 100.0 * fci->widthofpart/suftabentries); fci->currentminindex = gt_suftabparts_rc_minindex(part,suftabparts_rc); fci->currentmaxindex = gt_suftabparts_rc_maxindex(part,suftabparts_rc); if (fci->mappedallrandomcodes != NULL) { fci->allrandomcodes = (unsigned long *) gt_Sfxmappedrange_map(fci->mappedallrandomcodes, fci->currentminindex, fci->currentmaxindex); GT_FCI_ADDSPLITSPACE(fci->fcsl,"allrandomcodes", (size_t) gt_Sfxmappedrange_size_mapped( fci->mappedallrandomcodes, fci->currentminindex, fci->currentmaxindex)); } gt_assert(fci->allrandomcodes != NULL); gt_assert(fci->mappedleftborder != NULL); mapptr = gt_Sfxmappedrange_map(fci->mappedleftborder, fci->currentminindex, fci->currentmaxindex); gt_randomcodes_leftborder_remap(&fci->tab,(uint32_t *) mapptr); GT_FCI_ADDSPLITSPACE(fci->fcsl,"leftborder", (size_t) gt_Sfxmappedrange_size_mapped( fci->mappedleftborder, fci->currentminindex, fci->currentmaxindex)); gt_logger_log(logger,"maximum space for part %u: %.2f MB", part,GT_MEGABYTES(gt_firstcodes_spacelog_total(fci->fcsl))); fci->buf.currentmincode = gt_randomcodes_idx2mincode(fci, fci->currentminindex); fci->buf.currentmaxcode = gt_randomcodes_idx2maxcode(fci, fci->currentmaxindex); gt_spmsuftab_partoffset(fci->spmsuftab, gt_suftabparts_rc_offset(part,suftabparts_rc)); gt_randomcodes_insert_runkmerscan(encseq, kmersize, correction_kmersize, &fci->buf); gt_randomcodes_insertsuffixes_flush(fci); if (part == gt_suftabparts_rc_numofparts(suftabparts_rc) - 1) { gt_randomcodes_delete_before_end(fci); } if (timer != NULL) { gt_timer_show_progress(timer, "to sort buckets of suffixes",stdout); } if (maximumspace > 0) { if ((unsigned long) gt_firstcodes_spacelog_total(fci->fcsl) < maximumspace) { spaceforbucketprocessing = maximumspace - (unsigned long) gt_firstcodes_spacelog_total(fci->fcsl); gt_log_log("space left for sortremaining: %.2f", GT_MEGABYTES(spaceforbucketprocessing)); } else { spaceforbucketprocessing = 0; } } #ifdef GT_THREADS_ENABLED if (threads > 1U) { if (gt_randomcodes_thread_sortremaining( srswtab, encseq, readmode, fci->spmsuftab, fci->buf.snrp, &fci->tab, fci->allrandomcodes, fci->currentminindex, fci->currentmaxindex, gt_suftabparts_rc_widthofpart(part,suftabparts_rc), gt_suftabparts_rc_sumofwidth(part,suftabparts_rc), correction_kmersize, kmersize, itvprocess, itvprocess_end, itvprocessdatatab, usemaxdepth, withsuftabcheck, threads, logger, NULL) != 0) { haserr = true; } } else #endif { if (gt_randomcodes_sortremaining(srswtab[0], encseq, readmode, fci->spmsuftab, fci->buf.snrp, &fci->tab, fci->allrandomcodes, fci->currentminindex, fci->currentmaxindex, gt_suftabparts_rc_sumofwidth(part,suftabparts_rc), correction_kmersize, kmersize, itvprocess, itvprocess_end, itvprocessdatatab == NULL ? NULL : ((void **) itvprocessdatatab)[0], usemaxdepth, withsuftabcheck, err) != 0) { haserr = true; } } if (fci->mappedallrandomcodes != NULL) { gt_Sfxmappedrange_unmap(fci->mappedallrandomcodes); GT_FCI_SUBTRACTSPLITSPACE(fci->fcsl,"allrandomcodes"); } if (fci->mappedleftborder != NULL) { gt_Sfxmappedrange_unmap(fci->mappedleftborder); GT_FCI_SUBTRACTSPLITSPACE(fci->fcsl,"leftborder"); } return haserr ? -1 : 0; } int storerandomcodes_getencseqkmers_twobitencoding(const GtEncseq *encseq, unsigned int kmersize, unsigned int numofparts, unsigned long maximumspace, unsigned int correction_kmersize, bool usefirstcodes, unsigned int sampling_factor, bool usemaxdepth, bool withsuftabcheck, bool onlyaccumulation, bool onlyallrandomcodes, GT_UNUSED unsigned int addbscache_depth, unsigned long phase2extra, GT_UNUSED bool radixsmall, /* set to true */ GT_UNUSED unsigned int radixparts, /* set to 2U */ GtRandomcodesintervalprocess itvprocess, GtRandomcodesintervalprocess_end itvprocess_end, void *itvprocessdatatab, GtLogger *logger, GtTimer *timer, GtError *err) { GtRandomcodesinfo fci; size_t suftab_size = 0; unsigned int part, threadcount; unsigned long maxbucketsize, suftabentries = 0, largest_width, totallength = gt_encseq_total_length(encseq), maxseqlength = gt_encseq_max_seq_length(encseq); GtSfxmappedrangelist *sfxmrlist = NULL; GtSuftabparts_rc *suftabparts_rc = NULL; GtShortreadsortworkinfo **srswtab = NULL; const GtReadmode readmode = GT_READMODE_FORWARD; bool haserr = false; #ifdef GT_THREADS_ENABLED const unsigned int threads = gt_jobs; #else const unsigned int threads = 1U; #endif if (maxseqlength < (unsigned long) correction_kmersize) { return 0; } if (gt_randomcodes_init(&fci, encseq, withsuftabcheck, correction_kmersize, err) != 0) { haserr = true; } if (!haserr) { sfxmrlist = gt_Sfxmappedrangelist_new(); if (gt_randomcodes_collectcodes(&fci, usefirstcodes, sampling_factor, encseq, readmode, kmersize, correction_kmersize, (size_t)maximumspace, logger, timer, err) != 0) { haserr = true; } } if (!haserr) { if (fci.differentcodes > 0 && onlyallrandomcodes) { run_allcodes_distribution(fci.allrandomcodes,fci.differentcodes); gt_free(fci.allrandomcodes); fci.allrandomcodes = NULL; gt_randomcodes_countocc_delete(fci.fcsl,&fci.tab); gt_firstcodes_spacelog_delete(fci.fcsl); gt_seqnumrelpos_delete(fci.buf.snrp); gt_Sfxmappedrangelist_delete(sfxmrlist); return 0; } fci.flushcount = 0; fci.codebuffer_total = 0; gt_randomcodes_fillbinsearchcache(&fci,addbscache_depth); if (gt_randomcodes_allocspace(&fci, numofparts, maximumspace, phase2extra, err) != 0) { haserr = true; } } fci.buf.nextfree = 0; if (!haserr) { gt_randomcodes_accumulatecounts_run(&fci, encseq, kmersize, correction_kmersize, logger, timer); maxbucketsize = gt_randomcodes_partialsums(fci.fcsl,&fci.tab, fci.total_count); gt_logger_log(logger,"maximum space after computing partial sums: %.2f MB", GT_MEGABYTES(gt_firstcodes_spacelog_total(fci.fcsl))); gt_logger_log(logger,"maxbucketsize=%lu",maxbucketsize); gt_randomcodes_map_sections(&fci,sfxmrlist); if (numofparts == 0 || maximumspace > 0) { int retval = gt_randomcodes_auto_parts(&fci, sfxmrlist, numofparts, &maximumspace, maxbucketsize, correction_kmersize, totallength, maxseqlength, fci.total_count, phase2extra, usemaxdepth, err); if (retval < 0) { haserr = true; } else { numofparts = (unsigned int) retval; } } } if (!haserr) { gt_assert(numofparts > 0); suftabparts_rc = gt_suftabparts_rc_new(numofparts, NULL, &fci.tab, sfxmrlist, fci.total_count, 0, logger); gt_assert(suftabparts_rc != NULL); gt_suftabparts_rc_showallrecords(suftabparts_rc,true); gt_Sfxmappedrangelist_delete(sfxmrlist); sfxmrlist = NULL; gt_randomcodes_samples_delete(fci.fcsl,&fci.tab); gt_assert(fci.buf.nextfree == 0); gt_assert(fci.mappedleftborder != NULL); gt_Sfxmappedrange_usetmp(fci.mappedleftborder, gt_randomcodes_outfilenameleftborder(&fci.tab), (void **) gt_randomcodes_leftborder_address(&fci.tab), gt_randomcodes_leftborder_entries(&fci.tab), true); if (gt_suftabparts_rc_numofparts(suftabparts_rc) > 1U) { gt_assert(fci.allrandomcodes != NULL); gt_assert(fci.mappedallrandomcodes != NULL); gt_Sfxmappedrange_storetmp_ulong(fci.mappedallrandomcodes, &fci.allrandomcodes, false); GT_FCI_SUBTRACTSPLITSPACE(fci.fcsl,"allrandomcodes"); gt_assert(fci.allrandomcodes == NULL); } else { gt_Sfxmappedrange_delete(fci.mappedallrandomcodes); fci.mappedallrandomcodes = NULL; } largest_width = gt_suftabparts_rc_largest_width(suftabparts_rc); fci.spmsuftab = gt_spmsuftab_new(largest_width, totallength, fci.bitsforposref, logger); suftab_size = gt_spmsuftab_requiredspace(largest_width,totallength, fci.bitsforposref); GT_FCI_ADDWORKSPACE(fci.fcsl,"suftab",suftab_size); fci.buf.flush_function = gt_randomcodes_insertsuffixes_flush; srswtab = gt_malloc(sizeof (*srswtab) * threads); for (threadcount = 0; threadcount < threads; threadcount++) { srswtab[threadcount] = gt_shortreadsort_new(maxbucketsize,maxseqlength - kmersize, readmode,true,false); } GT_FCI_ADDWORKSPACE(fci.fcsl,"shortreadsort", threads * gt_shortreadsort_size(true,maxbucketsize, maxseqlength-kmersize)); gt_randomcodes_allocsize_for_insertion(&fci, maximumspace, suftabparts_rc, phase2extra); if (!onlyaccumulation) { fci.radixsort_codepos = gt_radixsort_new_ulongpair(fci.buf.allocated); GT_FCI_ADDWORKSPACE(fci.fcsl,"radixsort_codepos", gt_radixsort_size(fci.radixsort_codepos)); fci.buf.spaceGtUlongPair = gt_radixsort_space_ulongpair(fci.radixsort_codepos); } fci.codebuffer_total = 0; fci.flushcount = 0; for (part = 0; !haserr && !onlyaccumulation && part < gt_suftabparts_rc_numofparts(suftabparts_rc); part++) { if (gt_randomcodes_process_part(&fci, encseq, readmode, kmersize, correction_kmersize, suftabparts_rc, part, maximumspace, threads, fci.total_count, withsuftabcheck, srswtab, itvprocess, itvprocess_end, itvprocessdatatab, usemaxdepth, logger, timer, err) != 0) { haserr = true; } } } gt_log_log("suftabentries=%lu",suftabentries); if (timer != NULL) { gt_timer_show_progress(timer, "cleaning up",stdout); } if (!haserr) { GT_FCI_SUBTRACTWORKSPACE(fci.fcsl,"shortreadsort"); } if (!haserr && !onlyaccumulation && srswtab != NULL) { unsigned long sumofstoredvalues = 0; for (threadcount=0; threadcount Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RANDOMCODES_H #define RANDOMCODES_H #include #include "core/log_api.h" #include "core/error_api.h" #include "core/encseq_api.h" #include "seqnumrelpos.h" typedef int (*GtRandomcodesintervalprocess)(void *, const unsigned long *, const GtSeqnumrelpos *, const uint16_t *, unsigned long, unsigned int, GtError *); typedef void (*GtRandomcodesintervalprocess_end)(void *); void gt_rungetencseqkmers_rc(const GtEncseq *encseq,unsigned int kmersize); int storerandomcodes_getencseqkmers_twobitencoding( const GtEncseq *encseq, unsigned int kmersize, unsigned int numofparts, unsigned long maximumspace, unsigned int correction_kmersize, bool usefirstcodes, unsigned int sampling_factor, bool usemaxdepth, bool withsuftabcheck, /* set to false, only for tests */ bool onlyaccumulation, /* set to false, only for tests */ bool onlyallrandomcodes, /* set to false, only for tests */ GT_UNUSED unsigned int addbscache_depth, /* set to 5U */ unsigned long phase2extra, /* extra space needed in proc. intervals */ bool radixsmall, /* set to true */ unsigned int radixparts, /* set to 2U */ GtRandomcodesintervalprocess itvprocess, GtRandomcodesintervalprocess_end itvprocess_end, void *itvprocessdatatab, GtLogger *logger, GtTimer *timer, GtError *err); #endif genometools-1.5.1/src/match/rdj-cntlist.c000066400000000000000000000201651211610345200203340ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/fa.h" #include "core/fileutils.h" #include "core/log.h" #include "core/xansi_api.h" #include "match/rdj-cntlist.h" #define GT_CNTLIST_BIT_HEADER (int)'\0' #define GT_CNTLIST_BIN_HEADER (int)'\1' #define GT_CNTLIST_ASCII_HEADER (int)'[' static inline void gt_cntlist_show_ascii(GtBitsequence *cntlist, unsigned long nofreads, FILE *file) { unsigned long i; gt_assert(file != NULL); fprintf(file, "[n: %lu]\n", nofreads); for (i = 0; i < nofreads; i++) if (GT_ISIBITSET(cntlist, i)) fprintf(file, "%lu\n", i); } void gt_cntlist_write_bin_header(unsigned long nofreads, FILE *file) { gt_assert(file != NULL); gt_xfputc(GT_CNTLIST_BIN_HEADER, file); gt_xfputc((char)sizeof(unsigned long), file); gt_xfwrite(&(nofreads), sizeof (unsigned long), (size_t)1, file); } static inline void gt_cntlist_show_bit(GtBitsequence *cntlist, unsigned long nofreads, FILE *file) { gt_assert(file != NULL); gt_xfputc(GT_CNTLIST_BIT_HEADER, file); gt_xfputc((char)sizeof(unsigned long), file); gt_xfwrite(&(nofreads), sizeof (unsigned long), (size_t)1, file); gt_xfwrite(cntlist, sizeof (GtBitsequence), GT_NUMOFINTSFORBITS(nofreads), file); } int gt_cntlist_show(GtBitsequence *cntlist, unsigned long nofreads, const char *path, bool binary, GtError *err) { FILE *file; gt_assert(cntlist != NULL); if (path == NULL) file = stdout; else { file = gt_fa_fopen(path, binary ? "wb" : "w", err); if (file == NULL) return -1; } gt_assert(file != NULL); (binary ? gt_cntlist_show_bit : gt_cntlist_show_ascii) (cntlist, nofreads, file); if (path != NULL) gt_fa_fclose(file); return 0; } static int gt_cntlist_parse_bin_or_bit_header(FILE *infp, unsigned long *nofreads, GtError *err) { int c; size_t n; gt_assert(infp != NULL && nofreads != NULL); gt_error_check(err); c = gt_xfgetc(infp); if (c == EOF) { gt_error_set(err, "contained reads list: unexpected end of file"); return -1; } else if (c != (char)sizeof(unsigned long)) { gt_error_set(err, "contained reads list: %dbit version " "of GenomeTools required to use this list", c * CHAR_BIT); return -1; } n = fread(nofreads, sizeof (unsigned long), (size_t)1, infp); if (n != (size_t)1 || *nofreads == 0) { gt_error_set(err, "contained reads list: unrecognized format"); return -1; } return 0; } static int gt_cntlist_parse_bit(FILE *infp, bool alloc_cntlist, GtBitsequence **cntlist, unsigned long *nofreads, GtError *err) { int had_err = gt_cntlist_parse_bin_or_bit_header(infp, nofreads, err); if (had_err == 0) { size_t n; gt_assert(cntlist != NULL); if (alloc_cntlist) { GT_INITBITTAB(*cntlist, *nofreads); n = fread(*cntlist, sizeof (GtBitsequence), GT_NUMOFINTSFORBITS(*nofreads), infp); if (n != GT_NUMOFINTSFORBITS(*nofreads)) { gt_error_set(err, "contained reads file: unrecognized format"); had_err = -1; } } else { /* combine using OR with existing data */ size_t i; for (i = 0; i < GT_NUMOFINTSFORBITS(*nofreads); i++) { GtBitsequence value; n = fread(&value, sizeof (GtBitsequence), (size_t)1, infp); if (n != (size_t)1) { gt_error_set(err, "contained reads file: unrecognized format"); had_err = -1; break; } *cntlist[i] |= value; } } } return had_err; } static int gt_cntlist_parse_bin(FILE *infp, bool alloc_cntlist, GtBitsequence **cntlist, unsigned long *nofreads, GtError *err) { int had_err = gt_cntlist_parse_bin_or_bit_header(infp, nofreads, err); if (had_err == 0) { size_t n; unsigned long seqnum; gt_assert(cntlist != NULL); if (alloc_cntlist) GT_INITBITTAB(*cntlist, *nofreads); while (true) { n = fread(&seqnum, sizeof (unsigned long), (size_t)1, infp); if (n != (size_t)1) { if (!feof(infp)) { gt_error_set(err, "contained reads file: unrecognized format"); had_err = -1; } break; } GT_SETIBIT(*cntlist, seqnum); } } return had_err; } static int gt_cntlist_parse_ascii(FILE *infp, bool alloc_cntlist, GtBitsequence **cntlist, unsigned long *nofreads, GtError *err) { int n; unsigned long seqnum; gt_assert(infp != NULL && nofreads != NULL && cntlist != NULL); /*@i1@*/ gt_error_check(err); n = fscanf(infp, "[n: %lu]\n", nofreads); if (n!=1 || *nofreads == 0) { gt_error_set(err, "contained reads file: unrecognized format"); return -1; } if (alloc_cntlist) GT_INITBITTAB(*cntlist, *nofreads); while (true) { n = fscanf(infp, "%lu\n", &seqnum); if (n == EOF) break; else if (n != 1) { gt_error_set(err, "contained reads file: unrecognized format"); return -1; } GT_SETIBIT(*cntlist, seqnum); } return 0; } int gt_cntlist_parse(const char *filename, bool alloc_cntlist, GtBitsequence **cntlist, unsigned long *nofreads, GtError *err) { int c, retval = 0; FILE *infp; gt_log_log("parse contained reads list file: %s", filename); infp = gt_fa_fopen(filename, "rb", err); if (infp == NULL) return -1; c = gt_xfgetc(infp); switch (c) { case EOF: gt_error_set(err, "%s: unexpected end of file", filename); retval = 1; break; case GT_CNTLIST_BIN_HEADER: gt_log_log("contained reads list format: BIN"); retval = gt_cntlist_parse_bin(infp, alloc_cntlist, cntlist, nofreads, err); break; case GT_CNTLIST_BIT_HEADER: gt_log_log("contained reads list format: BIT"); retval = gt_cntlist_parse_bit(infp, alloc_cntlist, cntlist, nofreads, err); break; case GT_CNTLIST_ASCII_HEADER: gt_xungetc(c, infp); gt_log_log("contained reads list format: ASCII"); retval = gt_cntlist_parse_ascii(infp, alloc_cntlist, cntlist, nofreads, err); break; default: gt_error_set(err, "%s: unrecognized format", filename); retval = 1; break; } gt_fa_fclose(infp); return retval; } unsigned long gt_cntlist_count(const GtBitsequence *cntlist, unsigned long nofreads) { unsigned long i, counter = 0; for (i = 0; i < nofreads; i++) if ((bool)GT_ISIBITSET(cntlist, i)) counter++; return counter; } unsigned long gt_cntlist_xload(const char *filename, GtBitsequence **cntlist, unsigned long expected_nofreads) { int retval; unsigned long found_nofreads; GtError *err; if (!gt_file_exists(filename)) { fprintf(stderr, "FATAL: error by loading contained reads list: " "file %s does not exist\n", filename); exit(EXIT_FAILURE); } err = gt_error_new(); retval = gt_cntlist_parse(filename, true, cntlist, &found_nofreads, err); if (retval != 0) { fprintf(stderr, "FATAL: error by parsing contained reads list: %s\n", gt_error_get(err)); exit(EXIT_FAILURE); } gt_error_delete(err); if (found_nofreads != expected_nofreads) { fprintf(stderr, "FATAL: error by parsing contained reads list: " "file specifies a wrong number of reads\nexpected %lu, found %lu\n", expected_nofreads, found_nofreads); exit(EXIT_FAILURE); } return gt_cntlist_count(*cntlist, found_nofreads); } genometools-1.5.1/src/match/rdj-cntlist.h000066400000000000000000000042351211610345200203410ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_CNTLIST_H #define RDJ_CNTLIST_H /* * Two formats for contained reads lists are defined here. * One is a text-based one, while the binary one is a copy * of the bitsequence preceded by a short header. */ #include "core/intbits.h" /* GtBitsequence */ #include "core/error_api.h" /* GtError */ /* writes cntlist to file */ int gt_cntlist_show(GtBitsequence *cntlist, unsigned long nofreads, const char *path, bool binary, GtError *err); /* prepare a file for output of cntlist in bin format */ void gt_cntlist_write_bin_header(unsigned long nofreads, FILE *file); /* parses a cntlist file, format is automatically recognized; * if alloc_cntlist is true, **cntlist is allocated, otherwise * **cntlist must be a valid bit sequence with the correct size */ int gt_cntlist_parse(const char *filename, bool alloc_cntlist, GtBitsequence **cntlist, unsigned long *nofreads, GtError *err); /* variant of parse: parses, checks that the number of reads is the one * specified, returns number of cnt reads, exits on error */ unsigned long gt_cntlist_xload(const char *filename, GtBitsequence **cntlist, unsigned long expected_nofreads); /* counts the number of bit set in bitsequence cntlist */ unsigned long gt_cntlist_count(const GtBitsequence *cntlist, unsigned long nofreads); #endif genometools-1.5.1/src/match/rdj-contfind-bottomup.c000066400000000000000000000157161211610345200223350ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/progressbar.h" #include "match/esa-seqread.h" #include "match/esa-bottomup.h" #include "match/rdj-revcompl-def.h" #include "match/rdj-contfind-bottomup.h" typedef struct { /* length of the shortest sequence in the array */ unsigned long shortest; unsigned long spacing; /* for eqlen read length mode */ const GtEncseq *encseq; GtBitsequence *sspbittab; GtBitsequence *contained; unsigned long cmin; unsigned long csize; /* progressbar */ bool show_progressbar; unsigned long long progress; /* revcompl mode */ unsigned long firstrevcompl; unsigned long nofsequences; unsigned long counter; } ContfindBUstate; typedef ContfindBUstate GtBUstate_rdjce; typedef ContfindBUstate GtBUstate_rdjcv; typedef struct {} GtBUinfo_rdjce; typedef struct {} GtBUinfo_rdjcv; static void initBUinfo_rdjcv(GT_UNUSED GtBUinfo_rdjcv *info, GT_UNUSED GtBUstate_rdjcv *state) { /* nothing to do */ } static void initBUinfo_rdjce(GT_UNUSED GtBUinfo_rdjce *info, GT_UNUSED GtBUstate_rdjce *state) { /* nothing to do */ } static inline void freeBUinfo_rdjcv(GT_UNUSED GtBUinfo_rdjcv *info, GT_UNUSED GtBUstate_rdjcv *state) { /* nothing to do */ } static inline void freeBUinfo_rdjce(GT_UNUSED GtBUinfo_rdjce *info, GT_UNUSED GtBUstate_rdjce *state) { /* nothing to do */ } static inline void processcontained(unsigned long seqnum, ContfindBUstate *state) { if (state->firstrevcompl > 0) seqnum = GT_READJOINER_READNUM(seqnum, state->firstrevcompl, state->nofsequences); if (!GT_ISIBITSET(state->contained, seqnum)) { GT_SETIBIT(state->contained, seqnum); state->counter++; } if (state->csize == 0 || seqnum < state->cmin) state->cmin = seqnum; state->csize++; } static inline int processleafedge_rdjcv(GT_UNUSED bool firstsucc, unsigned long fatherdepth, GT_UNUSED GtBUinfo_rdjcv *father, unsigned long leafnumber, GtBUstate_rdjcv *state, GT_UNUSED GtError *err) { unsigned long seqnum; if (fatherdepth >= state->shortest) { if ((leafnumber == 0 || GT_ISIBITSET(state->sspbittab, leafnumber-1)) && GT_ISIBITSET(state->sspbittab, leafnumber + fatherdepth)) { seqnum = gt_encseq_seqnum(state->encseq, leafnumber); processcontained(seqnum, state); } } if (state->show_progressbar) state->progress++; return 0; } static inline int processleafedge_rdjce(GT_UNUSED bool firstsucc, unsigned long fatherdepth, GT_UNUSED GtBUinfo_rdjce *father, unsigned long leafnumber, GtBUstate_rdjce *state, GT_UNUSED GtError *err) { unsigned long seqnum; if (fatherdepth == state->shortest && (leafnumber % state->spacing) == 0) { seqnum = leafnumber / state->spacing; processcontained(seqnum, state); } if (state->show_progressbar) state->progress++; return 0; } static inline int processbranchingedge_rdjce(GT_UNUSED bool firstsucc, GT_UNUSED unsigned long fatherdepth, GT_UNUSED GtBUinfo_rdjce *father, unsigned long sondepth, GT_UNUSED unsigned long sonwidth, GT_UNUSED GtBUinfo_rdjce *son, GtBUstate_rdjce *state, GT_UNUSED GtError *err) { if (sondepth == state->shortest /* == read length */) { /* keep one copy */ if (state->csize > 0) { GT_UNSETIBIT(state->contained, state->cmin); state->counter--; } } state->csize = 0; return 0; } static inline int processbranchingedge_rdjcv(GT_UNUSED bool firstsucc, GT_UNUSED unsigned long fatherdepth, GT_UNUSED GtBUinfo_rdjcv *father, unsigned long sondepth, unsigned long sonwidth, GT_UNUSED GtBUinfo_rdjcv *son, GtBUstate_rdjcv *state, GT_UNUSED GtError *err) { if (sondepth >= state->shortest) { /* keep one copy if several copies of a sequence are present and the sequence is not contained in any other */ if (state->csize == sonwidth) { gt_assert(state->csize > 0); GT_UNSETIBIT(state->contained, state->cmin); state->counter--; } } state->csize = 0; return 0; } #include "match/esa-bottomup-rdjcv.inc" #include "match/esa-bottomup-rdjce.inc" /* prepare sspbittab and determine length of shortest sequence */ static void prepare_sspbittab_and_shortest(unsigned long totallength, ContfindBUstate *state) { unsigned long length, lastseqstart, i, ssp; GT_INITBITTAB(state->sspbittab, totallength + 1); lastseqstart = 0; state->shortest = totallength; for (i = 1UL; i <= state->nofsequences - 1; i++) { ssp = gt_encseq_seqstartpos(state->encseq, i) - 1; GT_SETIBIT(state->sspbittab, ssp); length = ssp - lastseqstart; lastseqstart = ssp + 1; if (length < state->shortest) state->shortest = length; } GT_SETIBIT(state->sspbittab, totallength); length = totallength - lastseqstart; if (length < state->shortest) state->shortest = length; } unsigned long gt_contfind_bottomup(Sequentialsuffixarrayreader *ssar, bool show_progressbar, GtBitsequence *contained, unsigned long firstrevcompl, unsigned long read_length /* 0 = variable */) { ContfindBUstate state; unsigned long totallength; GT_UNUSED int retval; gt_assert(ssar != NULL); gt_assert(contained != NULL); state.contained = contained; state.encseq = gt_encseqSequentialsuffixarrayreader(ssar); totallength = gt_encseq_total_length(state.encseq); state.nofsequences = gt_encseq_num_of_sequences(state.encseq); if (read_length == 0) { prepare_sspbittab_and_shortest(totallength, &state); } else { state.shortest = read_length; state.spacing = read_length + 1; } state.show_progressbar = show_progressbar; state.csize = 0; state.cmin = 0; state.firstrevcompl = firstrevcompl; state.counter = 0; if (show_progressbar) { state.progress = 0; gt_progressbar_start(&(state.progress), (unsigned long long)totallength); } retval = (read_length == 0) ? gt_esa_bottomup_rdjcv(ssar, &state, NULL) : gt_esa_bottomup_rdjce(ssar, &state, NULL); gt_assert(retval == 0); if (show_progressbar) gt_progressbar_stop(); if (read_length == 0) gt_free(state.sspbittab); return state.counter; } genometools-1.5.1/src/match/rdj-contfind-bottomup.h000066400000000000000000000036731211610345200223410ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_CONTFIND_BOTTOMUP_H #define RDJ_CONTFIND_BOTTOMUP_H #include "match/esa-seqread.h" #include "core/intbits.h" /* * Bottom-up dfs-based esa algorithm to identify contained reads. * * A read r is contained in r' iff: * - r is a proper substring of r' or revcompl(r'): * - r == r' or r == revcompl(r') and r'.seqnum < r.seqnum * * Input: * - GtBitsequence *contained: * - size must be 1 bit/read * - should be initialized with 0 * - firstrevcompl: * - no mirror, single-strand mode -> 0 * - virtual mirror -> nofreads * - real mirror -> nofseqs / 2 * - read_length: * - fixed length -> read length [modulo operations are used] * - variable length -> 0 [a bit table is created] * * Output: * - return value: number of contained reads * - GtBitsequence *contained: * bits are set for each read respecting the definition */ unsigned long gt_contfind_bottomup(Sequentialsuffixarrayreader *ssar, bool show_progressbar, GtBitsequence *contained, unsigned long firstrevcompl, unsigned long read_length); #endif genometools-1.5.1/src/match/rdj-contfind-def.h000066400000000000000000000024001211610345200212110ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_CONTFIND_DEF_H #define RDJ_CONTFIND_DEF_H /* type of the return value of the ovlfind functions */ typedef enum { GT_CONTFIND_OFF, /* no search for containments */ GT_CONTFIND_NO, /* there is no containment */ GT_CONTFIND_EQ, /* u and v are (approx) equal */ GT_CONTFIND_U, /* u is (approx) contained in v */ GT_CONTFIND_V /* v is (approx) contained in u */ } GtContfind; #endif genometools-1.5.1/src/match/rdj-contfinder.c000066400000000000000000000733211211610345200210110ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Giorgio Gonnella Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #ifndef S_SPLINT_S #include #endif #include "core/fa.h" #include "core/error_api.h" #include "core/compact_ulong_store.h" #include "core/encseq.h" #include "core/filelengthvalues.h" #include "core/fileutils.h" #include "core/intbits.h" #include "core/log.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/minmax.h" #include "core/unused_api.h" #include "core/stack-inlined.h" #include "core/str_array_api.h" #include "core/xansi_api.h" #include "match/rdj-cntlist.h" #include "match/rdj-filesuf-def.h" #include "match/reads2twobit.h" #include "match/rdj-contfinder.h" #ifdef GT_READJOINER_LARGE_READSET /* > 2^32 reads */ typedef GtCompactUlongStore GtReadjoinerContfinderSeqnumsType; typedef uint64_t gt_contfinder_seqnum_t; #define GT_READJOINER_CONTFINDER_ALLOC_SEQNUMS(ARR, NOFSEQS)\ (ARR) = gt_compact_ulong_store_new((NOFSEQS),\ gt_determinebitspervalue(NOFSEQS)) #define GT_READJOINER_CONTFINDER_GET_SEQNUM(ARR, POS)\ gt_compact_ulong_store_get((ARR), (POS)) #define GT_READJOINER_CONTFINDER_SET_SEQNUM(ARR, POS, VALUE) \ gt_compact_ulong_store_update((ARR), (POS), (VALUE)) #define GT_READJOINER_CONTFINDER_FREE_SEQNUMS(ARR)\ gt_compact_ulong_store_delete(ARR) #else typedef uint32_t GtReadjoinerContfinderSeqnumsType; typedef uint32_t gt_contfinder_seqnum_t; #define GT_READJOINER_CONTFINDER_ALLOC_SEQNUMS(ARR, NOFSEQS)\ (ARR) = gt_malloc(sizeof (GtReadjoinerContfinderSeqnumsType) * (NOFSEQS)) #define GT_READJOINER_CONTFINDER_GET_SEQNUM(ARR, POS)\ ((ARR)[POS]) #define GT_READJOINER_CONTFINDER_SET_SEQNUM(ARR, POS, VALUE)\ ((ARR)[POS]=(VALUE)) #define GT_READJOINER_CONTFINDER_FREE_SEQNUMS(ARR)\ gt_free(ARR) #endif typedef uint8_t gt_contfinder_kmercode_t; typedef uint8_t gt_contfinder_overflow_t; typedef uint8_t gt_contfinder_copynum_t; #define GT_CONTFINDER_COPYNUM_MAX UINT8_MAX #define GT_CONTFINDER_COPYNUM_INC(VALUE, INC) \ if ((VALUE) < GT_CONTFINDER_COPYNUM_MAX - INC + 1)\ {\ (VALUE) += INC;\ }\ #define GT_CONTFINDER_CONTAINS(CONTFINDERPTR, CONTAINER, CONTAINED)\ GT_SETIBIT((CONTFINDERPTR)->contained, (CONTAINED));\ if ((CONTFINDERPTR)->copynum != NULL)\ {\ gt_assert(!GT_ISIBITSET((CONTFINDERPTR)->contained, CONTAINER));\ GT_CONTFINDER_COPYNUM_INC((CONTFINDERPTR)->copynum[(CONTAINER)],\ (CONTFINDERPTR)->copynum[(CONTAINED)]);\ (CONTFINDERPTR)->copynum[(CONTAINED)] = 0;\ } typedef struct { gt_contfinder_kmercode_t code; gt_contfinder_overflow_t overflow; } GtContfinderKmercodeWithOverflow; #define GT_CONTFINDER_INSERTION_SORT_MAX (size_t)31 #define GT_CONTFINDER_KMERCODE_BITS \ (sizeof (gt_contfinder_kmercode_t) * CHAR_BIT) #define GT_CONTFINDER_KMERSIZE (GT_CONTFINDER_KMERCODE_BITS >> 1) #define GT_CONTFINDER_NOFKMERCODES (1 << GT_CONTFINDER_KMERCODE_BITS) #define GT_CONTFINDER_KMERCODE_MAX \ ((gt_contfinder_kmercode_t)(GT_CONTFINDER_NOFKMERCODES - 1)) #define GT_CONTFINDER_NOFBUCKETS(LEVEL) \ (1 << ((GT_CONTFINDER_KMERSIZE - (LEVEL)) << 1)) #define GT_CONTFINDER_CODE_UNDEF (GtTwobitencoding)ULONG_MAX #define GT_CONTFINDER_UINT8_REVCOMPL(CODE) \ (GT_CONTFINDER_KMERCODE_MAX ^ \ (((((CODE) & (3 << 6)) >> 6) | (((CODE) & 3) << 6)) | \ ((((CODE) & (3 << 4)) >> 2) | (((CODE) & (3 << 2)) << 2)))) #define GT_CONTFINDER_UINT16_REVCOMPL(CODE) \ ((gt_contfinder_kmercode_t)\ (GT_CONTFINDER_KMERCODE_MAX ^ \ (\ ((((CODE) & (3UL << 14)) >> 14) | (((CODE) & (3UL )) << 14)) | \ ((((CODE) & (3UL << 12)) >> 10) | (((CODE) & (3UL << 2)) << 10)) | \ ((((CODE) & (3UL << 10)) >> 6) | (((CODE) & (3UL << 4)) << 6 )) | \ ((((CODE) & (3UL << 8 )) >> 2 ) | (((CODE) & (3UL << 6)) << 2)) \ )\ )) #define GT_CONTFINDER_REVCOMPL(CODE) GT_CONTFINDER_UINT8_REVCOMPL(CODE) #define GT_CONTFINDER_SEPARATOR (gt_contfinder_kmercode_t)3 #define GT_CONTFINDER_READBUFFER_SIZE ((size_t)256) #define GT_CONTFINDER_SEPPOS_INC ((size_t)(1 << 14)) #define GT_CONTFINDER_ALPHASIZE 4 struct GtContfinder { GtTwobitencoding *twobitencoding; gt_contfinder_seqnum_t logicalnofseqs; gt_contfinder_seqnum_t nofseqs; GtBitsequence *contained; /* eqlen: */ size_t len; /* varlen: */ size_t *seppos; /* temp buffers: */ gt_contfinder_seqnum_t *sorted; gt_contfinder_kmercode_t *oracle; gt_contfinder_overflow_t *overflows; /* copynum buffer */ gt_contfinder_copynum_t *copynum; /* seqnums to sort */ GtReadjoinerContfinderSeqnumsType *seqnums; }; static inline gt_contfinder_kmercode_t gt_contfinder_code_at_position( const GtTwobitencoding *twobitencoding, size_t pos) { unsigned int unitoffset = (unsigned int) GT_MODBYUNITSIN2BITENC(pos); size_t unitindex = GT_DIVBYUNITSIN2BITENC(pos); if (unitoffset <= (unsigned int)(GT_UNITSIN2BITENC - GT_CONTFINDER_KMERSIZE)) { return (gt_contfinder_kmercode_t) (twobitencoding[unitindex] >> GT_MULT2(GT_UNITSIN2BITENC - GT_CONTFINDER_KMERSIZE - unitoffset)) & GT_CONTFINDER_KMERCODE_MAX; } else { unsigned int shiftleft = GT_MULT2(unitoffset + (unsigned int)GT_CONTFINDER_KMERSIZE - (unsigned int)GT_UNITSIN2BITENC); return (gt_contfinder_kmercode_t) ((twobitencoding[unitindex] << shiftleft) | (twobitencoding[unitindex + 1] >> (GT_MULT2(GT_UNITSIN2BITENC) - shiftleft))) & GT_CONTFINDER_KMERCODE_MAX; } } static inline GtContfinderKmercodeWithOverflow gt_contfinder_get_code( const GtTwobitencoding *twobitencoding, gt_contfinder_seqnum_t seqnum, const size_t depth, const gt_contfinder_seqnum_t firstrevcompl, size_t len, const size_t *seppos) { GtContfinderKmercodeWithOverflow k; size_t remaining, seqstart; if (seqnum < firstrevcompl) { if (len != 0) { seqstart = seqnum * len; } else { seqstart = (seqnum > 0) ? seppos[seqnum - 1] + 1 : 0; len = seppos[seqnum] - seqstart + 1; } if (depth < len - 1) { k.code = gt_contfinder_code_at_position(twobitencoding, seqstart + depth); k.overflow = 0; remaining = len - 1 - depth; if (remaining < GT_CONTFINDER_KMERSIZE) { k.overflow = GT_CONTFINDER_KMERSIZE - (gt_contfinder_overflow_t)remaining; k.code &= (GT_CONTFINDER_KMERCODE_MAX - ((1 << (k.overflow << 1)) - 1)); } } else { k.code = 0; k.overflow = GT_CONTFINDER_KMERSIZE; } return k; } else { size_t pos; if (len != 0) { pos = ((firstrevcompl << 1) - seqnum) * len - 1 - depth; } else { seqnum = (firstrevcompl << 1) - seqnum - 1; pos = seppos[seqnum] - depth; seqstart = (seqnum > 0) ? seppos[seqnum - 1] + 1 : 0; len = seppos[seqnum] - seqstart + 1; } if (depth < len - 1) { remaining = len - 1 - depth; pos -= (remaining > GT_CONTFINDER_KMERSIZE) ? GT_CONTFINDER_KMERSIZE : remaining; k.overflow = 0; k.code = GT_CONTFINDER_REVCOMPL( gt_contfinder_code_at_position(twobitencoding, pos)); if (remaining < GT_CONTFINDER_KMERSIZE) { k.overflow = GT_CONTFINDER_KMERSIZE - remaining; k.code <<= (k.overflow << 1); } } else { k.code = 0; k.overflow = GT_CONTFINDER_KMERSIZE; } return k; } } typedef struct { GtReadjoinerContfinderSeqnumsType *seqnums; unsigned long seqnums_offset; gt_contfinder_seqnum_t nofseqs; size_t depth; } GtContfinderBucketInfo; GT_STACK_DECLARESTRUCT(GtContfinderBucketInfo, 1024); static inline void gt_contfinder_insertion_sort( const GtContfinder contfinder, GtContfinderBucketInfo bucket) { size_t i, j; gt_contfinder_seqnum_t u, v, container; int uvcmp; gt_assert(bucket.nofseqs > (gt_contfinder_seqnum_t)1); for (i = (size_t)1; i < bucket.nofseqs; i++) { gt_contfinder_seqnum_t ucorrected; size_t ulen = 0; u = GT_READJOINER_CONTFINDER_GET_SEQNUM(bucket.seqnums, i + bucket.seqnums_offset); ucorrected = u; if (ucorrected >= contfinder.nofseqs) ucorrected = (contfinder.nofseqs << 1) - 1 - ucorrected; if (contfinder.len == 0) { ulen = (ucorrected > 0) ? contfinder.seppos[ucorrected] - contfinder.seppos[ucorrected - 1] : contfinder.seppos[ucorrected] + 1; } for (j = i; j > 0; j--) { size_t len = contfinder.len; size_t pos; size_t vlen = 0; gt_contfinder_seqnum_t vcorrected; GtContfinderKmercodeWithOverflow unk = {0, 0}, vnk = {0, 0}; v = GT_READJOINER_CONTFINDER_GET_SEQNUM(bucket.seqnums, j - 1 + bucket.seqnums_offset); vcorrected = v; if (vcorrected >= contfinder.nofseqs) vcorrected = (contfinder.nofseqs << 1) - 1 - vcorrected; if (len == 0) { vlen = (vcorrected > 0) ? contfinder.seppos[vcorrected] - contfinder.seppos[vcorrected - 1] : contfinder.seppos[vcorrected] + 1; len = MIN(ulen, vlen); } for (pos = bucket.depth, uvcmp = 0; uvcmp == 0 && pos < len; pos += GT_CONTFINDER_KMERSIZE) { unk = gt_contfinder_get_code(contfinder.twobitencoding, u, pos, contfinder.nofseqs, contfinder.len, contfinder.seppos); vnk = gt_contfinder_get_code(contfinder.twobitencoding, v, pos, contfinder.nofseqs, contfinder.len, contfinder.seppos); uvcmp = (int)vnk.code - (int)unk.code; } if (ulen > vlen) { unsigned short shift = (unsigned short) ((vnk.overflow - unk.overflow) << 1); uvcmp = (int)(vnk.code >> shift) - (int)(unk.code >> shift); if (uvcmp == 0) { /* v is contained in u */ GT_SETIBIT(contfinder.contained, vcorrected); break; } } else if (ulen < vlen) { unsigned short shift = (unsigned short) ((unk.overflow - vnk.overflow) << 1); uvcmp = (int)(vnk.code >> shift) - (int)(unk.code >> shift); if (uvcmp == 0) { /* u is contained in v */ GT_SETIBIT(contfinder.contained, ucorrected); break; } } if (uvcmp < 0) { break; } if (uvcmp == 0) { if (ucorrected > vcorrected) { GT_SETIBIT(contfinder.contained, ucorrected); break; } } GT_READJOINER_CONTFINDER_SET_SEQNUM(bucket.seqnums, j + bucket.seqnums_offset, v); } GT_READJOINER_CONTFINDER_SET_SEQNUM(bucket.seqnums, j + bucket.seqnums_offset, u); } container = GT_READJOINER_CONTFINDER_GET_SEQNUM(bucket.seqnums, bucket.seqnums_offset); if (container >= contfinder.nofseqs) container = (contfinder.nofseqs << 1) - 1 - container; for (i = (size_t)1; i < bucket.nofseqs; i++) { u = GT_READJOINER_CONTFINDER_GET_SEQNUM(bucket.seqnums, i + bucket.seqnums_offset); if (u >= contfinder.nofseqs) u = (contfinder.nofseqs << 1) - 1 - u; if (GT_ISIBITSET(contfinder.contained, u)) { GT_CONTFINDER_CONTAINS(&contfinder, container, u); } else { container = u; } } } /* the following assumes the seqnums are sorted in the bucket */ static inline void gt_contfinder_mark_as_contained( GtContfinder contfinder, GtContfinderBucketInfo bucket, bool except_lowest_seqnum) { size_t i, from = 0, to = bucket.nofseqs; gt_contfinder_seqnum_t container = 0; gt_assert(bucket.nofseqs > 0); if (except_lowest_seqnum) { gt_contfinder_seqnum_t first, last; if (bucket.nofseqs == (gt_contfinder_seqnum_t)1) return; first = GT_READJOINER_CONTFINDER_GET_SEQNUM(bucket.seqnums, 0 + bucket.seqnums_offset); last = GT_READJOINER_CONTFINDER_GET_SEQNUM(bucket.seqnums, bucket.nofseqs - 1 + bucket.seqnums_offset); from = (size_t)1; if (last >= contfinder.nofseqs) last = (contfinder.nofseqs << 1) - last - 1; if (first >= contfinder.nofseqs || last < first) { from--; to--; container = last; } else { container = first; if (first == last) /* palindromic */ to--; } } for (i = from; i < to; i++) { gt_contfinder_seqnum_t corrected = GT_READJOINER_CONTFINDER_GET_SEQNUM(bucket.seqnums, i + bucket.seqnums_offset); if (corrected >= contfinder.nofseqs) corrected = (contfinder.nofseqs << 1) - corrected - 1; GT_CONTFINDER_CONTAINS(&contfinder, container, corrected); } } static void gt_contfinder_radixsort_eqlen(GtContfinder contfinder, GtContfinderBucketInfo all) { size_t i; GtStackGtContfinderBucketInfo stack; gt_contfinder_seqnum_t bucketindex[GT_CONTFINDER_NOFBUCKETS(0)]; #ifndef S_SPLINT_S gt_contfinder_seqnum_t bucketsize[GT_CONTFINDER_NOFBUCKETS(0)] = {}; #endif GtContfinderBucketInfo subbucket; /* Loop A */ for (i = 0; i < all.nofseqs; ++i) ++bucketsize[gt_contfinder_get_code(contfinder.twobitencoding, i, 0, contfinder.nofseqs, contfinder.len, NULL).code]; bucketindex[0] = 0; for (i = (size_t)1; i < GT_CONTFINDER_NOFBUCKETS(0); ++i) bucketindex[i] = bucketindex[i - 1] + bucketsize[i - 1]; /* Loop B */ for (i = 0; i < all.nofseqs; ++i) GT_READJOINER_CONTFINDER_SET_SEQNUM(all.seqnums, (bucketindex[ gt_contfinder_get_code(contfinder.twobitencoding, i, 0, contfinder.nofseqs, contfinder.len, NULL).code]++) + all.seqnums_offset, i); if (contfinder.len <= GT_CONTFINDER_KMERSIZE) { subbucket.depth = 0; subbucket.seqnums = all.seqnums; subbucket.seqnums_offset = all.seqnums_offset; for (i = 0; i < GT_CONTFINDER_NOFBUCKETS(0); ++i) { subbucket.nofseqs = bucketsize[i]; if (subbucket.nofseqs > (size_t)1) gt_contfinder_mark_as_contained(contfinder, subbucket, true); subbucket.seqnums_offset += subbucket.nofseqs; } return; } /* alloc oracle and sorted */ { gt_contfinder_seqnum_t maxbsize = bucketsize[0]; for (i = (size_t)1; i < GT_CONTFINDER_NOFBUCKETS(0); ++i) if (maxbsize < bucketsize[i]) maxbsize = bucketsize[i]; contfinder.oracle = gt_malloc(sizeof (gt_contfinder_kmercode_t) * maxbsize); contfinder.sorted = gt_malloc(sizeof (gt_contfinder_seqnum_t) * maxbsize); } GT_STACK_INIT(&stack, 1024UL); subbucket.depth = GT_CONTFINDER_KMERSIZE; subbucket.seqnums = all.seqnums; subbucket.seqnums_offset = all.seqnums_offset; for (i = 0; i < GT_CONTFINDER_NOFBUCKETS(0); ++i) { subbucket.nofseqs = bucketsize[i]; if (subbucket.nofseqs > (size_t)1) { if (subbucket.nofseqs <= GT_CONTFINDER_INSERTION_SORT_MAX) gt_contfinder_insertion_sort(contfinder, subbucket); else { GT_STACK_PUSH(&stack, subbucket); } } subbucket.seqnums_offset += subbucket.nofseqs; } while (!GT_STACK_ISEMPTY(&stack)) { GtContfinderBucketInfo bucket = GT_STACK_POP(&stack); memset(bucketsize, 0, sizeof (bucketsize)); /* Loop A */ for (i = 0; i < bucket.nofseqs; ++i) { gt_contfinder_seqnum_t ith_seqnum = GT_READJOINER_CONTFINDER_GET_SEQNUM(bucket.seqnums, i + bucket.seqnums_offset); contfinder.oracle[i] = gt_contfinder_get_code(contfinder.twobitencoding, ith_seqnum, bucket.depth, contfinder.nofseqs, contfinder.len, NULL).code; } for (i = 0; i < bucket.nofseqs; ++i) ++bucketsize[contfinder.oracle[i]]; bucketindex[0] = 0; for (i = (size_t)1; i < GT_CONTFINDER_NOFBUCKETS(0); ++i) bucketindex[i] = bucketindex[i - 1] + bucketsize[i - 1]; /* Loop B */ for (i = 0; i < bucket.nofseqs; ++i) contfinder.sorted[bucketindex[contfinder.oracle[i]]++] = GT_READJOINER_CONTFINDER_GET_SEQNUM(bucket.seqnums, i + bucket.seqnums_offset); for (i = 0; i < bucket.nofseqs; ++i) GT_READJOINER_CONTFINDER_SET_SEQNUM(bucket.seqnums, i + bucket.seqnums_offset, contfinder.sorted[i]); subbucket.depth = bucket.depth + GT_CONTFINDER_KMERSIZE; subbucket.seqnums = bucket.seqnums; subbucket.seqnums_offset = bucket.seqnums_offset; if (subbucket.depth < contfinder.len) { for (i = 0; i < GT_CONTFINDER_NOFBUCKETS(0); ++i) { subbucket.nofseqs = bucketsize[i]; if (subbucket.nofseqs > (size_t)1) { if (subbucket.nofseqs <= GT_CONTFINDER_INSERTION_SORT_MAX) gt_contfinder_insertion_sort(contfinder, subbucket); else { GT_STACK_PUSH(&stack, subbucket); } } subbucket.seqnums_offset += subbucket.nofseqs; } } else { for (i = 0; i < GT_CONTFINDER_NOFBUCKETS(0); ++i) { subbucket.nofseqs = bucketsize[i]; if (subbucket.nofseqs > (size_t)1) gt_contfinder_mark_as_contained(contfinder, subbucket, true); subbucket.seqnums_offset += subbucket.nofseqs; } } } GT_STACK_DELETE(&stack); gt_free(contfinder.sorted); gt_free(contfinder.oracle); } static inline void gt_contfinder_process_buckets( const GtContfinder contfinder, const GtContfinderBucketInfo parentbucket, gt_contfinder_seqnum_t **bucketsize, GtStackGtContfinderBucketInfo *stackptr, GtBitsequence **bucketcontained) { GtContfinderBucketInfo subbucket; gt_contfinder_seqnum_t i; gt_contfinder_overflow_t overflow; /* process buckets with overflow = 0 */ subbucket.seqnums = parentbucket.seqnums; subbucket.seqnums_offset = parentbucket.seqnums_offset; subbucket.depth = parentbucket.depth + GT_CONTFINDER_KMERSIZE; for (i = 0; i < GT_CONTFINDER_NOFBUCKETS(0); ++i) { subbucket.nofseqs = bucketsize[0][i]; if (subbucket.nofseqs > 0) { if (subbucket.nofseqs > (size_t)1) { if (subbucket.nofseqs <= GT_CONTFINDER_INSERTION_SORT_MAX) gt_contfinder_insertion_sort(contfinder, subbucket); else { GT_STACK_PUSH(stackptr, subbucket); } } for (overflow = (gt_contfinder_overflow_t)1; overflow <= GT_CONTFINDER_KMERSIZE; overflow++) { GT_SETIBIT(bucketcontained[overflow - 1], i >> (overflow << 1)); } } subbucket.seqnums_offset += subbucket.nofseqs; } /* process buckets with overflow > 0 */ for (overflow = (gt_contfinder_overflow_t)1; overflow <= GT_CONTFINDER_KMERSIZE; overflow++) { for (i = 0; i < GT_CONTFINDER_NOFBUCKETS(overflow); ++i) { subbucket.nofseqs = bucketsize[overflow][i]; if (subbucket.nofseqs > 0) gt_contfinder_mark_as_contained(contfinder, subbucket, (bool)GT_ISIBITSET(bucketcontained[overflow - 1], i)); subbucket.seqnums_offset += subbucket.nofseqs; } } } static void gt_contfinder_radixsort(GtContfinder contfinder, GtContfinderBucketInfo all) { gt_contfinder_seqnum_t i; GtStackGtContfinderBucketInfo stack; GtContfinderKmercodeWithOverflow k; gt_contfinder_overflow_t overflow; GtBitsequence *bucketcontained[GT_CONTFINDER_KMERSIZE]; gt_contfinder_seqnum_t *bucketindex[GT_CONTFINDER_KMERSIZE + 1]; gt_contfinder_seqnum_t *bucketsize[GT_CONTFINDER_KMERSIZE + 1]; size_t baseindex; for (overflow = 0; overflow <= GT_CONTFINDER_KMERSIZE; overflow++) { bucketindex[overflow] = gt_malloc(sizeof (gt_contfinder_seqnum_t) * GT_CONTFINDER_NOFBUCKETS(overflow)); bucketsize[overflow] = gt_calloc(GT_CONTFINDER_NOFBUCKETS(overflow), sizeof (gt_contfinder_seqnum_t)); } for (overflow = (gt_contfinder_overflow_t)1; overflow <= GT_CONTFINDER_KMERSIZE; overflow++) { GT_INITBITTAB(bucketcontained[overflow - 1], GT_CONTFINDER_NOFBUCKETS(overflow)); } /* Loop A */ for (i = 0; i < all.nofseqs; ++i) { k = gt_contfinder_get_code(contfinder.twobitencoding, i, 0, contfinder.nofseqs, contfinder.len, contfinder.seppos); ++bucketsize[k.overflow][k.code >> GT_MULT2(k.overflow)]; } baseindex = 0; for (overflow = 0; overflow <= GT_CONTFINDER_KMERSIZE; overflow++) { bucketindex[overflow][0] = baseindex; for (i = (size_t)1; i < GT_CONTFINDER_NOFBUCKETS(overflow); ++i) bucketindex[overflow][i] = bucketindex[overflow][i - 1] + bucketsize[overflow][i - 1]; baseindex = bucketindex[overflow][GT_CONTFINDER_NOFBUCKETS(overflow) - 1] + bucketsize[overflow][GT_CONTFINDER_NOFBUCKETS(overflow) - 1]; } /* Loop B */ for (i = 0; i < all.nofseqs; ++i) { k = gt_contfinder_get_code(contfinder.twobitencoding, i, 0, contfinder.nofseqs, contfinder.len, contfinder.seppos); GT_READJOINER_CONTFINDER_SET_SEQNUM(all.seqnums, (bucketindex[k.overflow][k.code >> GT_MULT2(k.overflow)]++) + all.seqnums_offset, i); } /* alloc temp buffers */ { gt_contfinder_seqnum_t maxbucketsize = bucketsize[0][0]; for (i = (size_t)1; i < GT_CONTFINDER_NOFBUCKETS(0); ++i) if (maxbucketsize < bucketsize[0][i]) maxbucketsize = bucketsize[0][i]; contfinder.oracle = gt_malloc(sizeof (gt_contfinder_kmercode_t) * maxbucketsize); contfinder.sorted = gt_malloc(sizeof (gt_contfinder_seqnum_t) * maxbucketsize); contfinder.overflows = gt_malloc(sizeof (unsigned char) * maxbucketsize); } GT_STACK_INIT(&stack, 1024UL); gt_contfinder_process_buckets(contfinder, all, bucketsize, &stack, bucketcontained); while (!GT_STACK_ISEMPTY(&stack)) { GtContfinderBucketInfo bucket = GT_STACK_POP(&stack); for (overflow = 0; overflow <= GT_CONTFINDER_KMERSIZE; overflow++) { for (i = 0; i < GT_CONTFINDER_NOFBUCKETS(overflow); ++i) { bucketsize[overflow][i] = 0; } } /* Loop A */ for (i = 0; i < bucket.nofseqs; ++i) { k = gt_contfinder_get_code( contfinder.twobitencoding, GT_READJOINER_CONTFINDER_GET_SEQNUM( bucket.seqnums, i + bucket.seqnums_offset), bucket.depth, contfinder.nofseqs, contfinder.len, contfinder.seppos); contfinder.oracle[i] = k.code >> GT_MULT2(k.overflow); contfinder.overflows[i] = k.overflow; } for (i = 0; i < bucket.nofseqs; ++i) ++(bucketsize[contfinder.overflows[i]][contfinder.oracle[i]]); baseindex = 0; for (overflow = 0; overflow <= GT_CONTFINDER_KMERSIZE; overflow++) { bucketindex[overflow][0] = baseindex; for (i = (size_t)1; i < GT_CONTFINDER_NOFBUCKETS(overflow); ++i) bucketindex[overflow][i] = bucketindex[overflow][i - 1] + bucketsize[overflow][i - 1]; baseindex = bucketindex[overflow][GT_CONTFINDER_NOFBUCKETS(overflow) - 1]; } /* Loop B */ for (i = 0; i < bucket.nofseqs; ++i) contfinder.sorted[(bucketindex[contfinder.overflows[i]] [contfinder.oracle[i]])++] = GT_READJOINER_CONTFINDER_GET_SEQNUM( bucket.seqnums, i + bucket.seqnums_offset); for (i = 0; i < bucket.nofseqs; ++i) GT_READJOINER_CONTFINDER_SET_SEQNUM(bucket.seqnums, i + bucket.seqnums_offset, contfinder.sorted[i]); gt_contfinder_process_buckets(contfinder, bucket, bucketsize, &stack, bucketcontained); } GT_STACK_DELETE(&stack); gt_free(contfinder.sorted); gt_free(contfinder.oracle); gt_free(contfinder.overflows); for (overflow = 0; overflow <= GT_CONTFINDER_KMERSIZE; overflow++) { gt_free(bucketindex[overflow]); gt_free(bucketsize[overflow]); } for (overflow = 0; overflow < GT_CONTFINDER_KMERSIZE; overflow++) { gt_free(bucketcontained[overflow]); } } int gt_contfinder_write_seqnums(GtContfinder *contfinder, bool sorted, GtFile *outfp, GT_UNUSED GtError *err) { int had_err = 0; gt_contfinder_seqnum_t i; if (sorted) { for (i = 0; i < contfinder->logicalnofseqs; i++) if (!GT_ISIBITSET(contfinder->contained, GT_READJOINER_CONTFINDER_GET_SEQNUM(contfinder->seqnums, i))) gt_file_xprintf(outfp, "%lu\n", (unsigned long) GT_READJOINER_CONTFINDER_GET_SEQNUM(contfinder->seqnums, i)); } else { for (i = 0; i < contfinder->nofseqs; i++) if (!GT_ISIBITSET(contfinder->contained, i)) gt_file_xprintf(outfp, "%lu\n", (unsigned long)i); } return had_err; } int gt_contfinder_write_sorted_seqnums(GtContfinder *contfinder, char* path, GtError *err) { int had_err = 0; GtFile *file; file = gt_file_new(path, "wb", err); if (file == NULL) had_err = -1; if (!had_err) { had_err = gt_contfinder_write_seqnums(contfinder, true, file, err); } gt_file_delete(file); return had_err; } int gt_contfinder_write_cntlist(GtContfinder *contfinder, char* path, GtError *err) { int had_err; had_err = gt_cntlist_show(contfinder->contained, (unsigned long)contfinder->nofseqs, path, true, err); return had_err; } int gt_contfinder_write_copynum(GtContfinder *contfinder, char* path, GtError *err) { int had_err = 0; gt_contfinder_seqnum_t i; FILE *file; file = gt_fa_fopen(path, "wb", err); if (file == NULL) had_err = -1; else { #ifndef NDEBUG gt_contfinder_seqnum_t n_noncontained = 0; unsigned long cnsum = 0; bool had_overflow = false; #endif gt_contfinder_copynum_t cn; for (i = 0; i < contfinder->nofseqs; i++) { cn = contfinder->copynum[i]; if (cn > 0) { gt_xfwrite(contfinder->copynum + i, sizeof (*contfinder->copynum), (size_t)1, file); #ifndef NDEBUG n_noncontained++; if (cn == GT_CONTFINDER_COPYNUM_MAX) { had_overflow = true; } cnsum += cn; #endif } } gt_assert(n_noncontained == contfinder->nofseqs); gt_assert(had_overflow || (cnsum == (unsigned long)contfinder->nofseqs)); gt_fa_fclose(file); } return had_err; } GtBitsequence *gt_contfinder_contained(GtContfinder *contfinder) { gt_assert(contfinder); return contfinder->contained; } static void gt_contfinder_init_copynum(GtContfinder *contfinder) { gt_contfinder_seqnum_t idx; /* the mark_as_contained function is currently not able to set * correctly the copynum if sequences have variable length, * thus: */ gt_assert(contfinder->len > 0); contfinder->copynum = gt_malloc(sizeof (*contfinder->copynum) * contfinder->nofseqs); for (idx = 0; idx < contfinder->nofseqs; idx++) contfinder->copynum[idx] = (gt_contfinder_seqnum_t)1; } void gt_contfinder_run(GtContfinder *contfinder, bool mirrored, bool calculate_copynum) { GtContfinderBucketInfo all; if (contfinder->nofseqs == 0) return; GT_INITBITTAB(contfinder->contained, contfinder->logicalnofseqs); contfinder->nofseqs = contfinder->logicalnofseqs; if (mirrored) contfinder->logicalnofseqs <<= 1; GT_READJOINER_CONTFINDER_ALLOC_SEQNUMS(contfinder->seqnums, contfinder->logicalnofseqs); if (calculate_copynum) gt_contfinder_init_copynum(contfinder); all.nofseqs = contfinder->logicalnofseqs; all.seqnums = contfinder->seqnums; all.seqnums_offset = 0; all.depth = 0; if (contfinder->len > 0) gt_contfinder_radixsort_eqlen(*contfinder, all); else gt_contfinder_radixsort(*contfinder, all); } void gt_contfinder_delete(GtContfinder *contfinder) { if (contfinder != NULL) { GT_READJOINER_CONTFINDER_FREE_SEQNUMS(contfinder->seqnums); gt_free(contfinder->contained); gt_free(contfinder->copynum); gt_free(contfinder); } } unsigned long gt_contfinder_nofcontained(GtContfinder *contfinder) { size_t i; GtBitsequence v; unsigned long nofcontained; const size_t tabsize = GT_NUMOFINTSFORBITS(contfinder->nofseqs); if (contfinder->contained == NULL) return 0; nofcontained = 0; for (i = 0; i < tabsize; i++) { v = contfinder->contained[i]; for (/**/; v; nofcontained++) v &= v - 1; } return nofcontained; } GtContfinder* gt_contfinder_new(GtReads2Twobit *r2t) { GtContfinder *contfinder; contfinder = gt_malloc(sizeof (*contfinder)); contfinder->contained = NULL; contfinder->copynum = NULL; contfinder->seqnums = NULL; contfinder->twobitencoding = gt_reads2twobit_export_twobitencoding(r2t); contfinder->seppos = (size_t*)gt_reads2twobit_export_seppos(r2t); contfinder->nofseqs = (gt_contfinder_seqnum_t)gt_reads2twobit_nofseqs(r2t); contfinder->logicalnofseqs = contfinder->nofseqs; contfinder->len = (size_t)gt_reads2twobit_seqlen_eqlen(r2t); return contfinder; } /* radixsort_str tester */ #include "match/radixsort_str.h" void gt_contfinder_radixsort_str_eqlen_tester(GtContfinder *contfinder, bool mirrored, unsigned long depth, unsigned long maxdepth, bool print) { unsigned long *suffixes, totallength, width, i; GtRadixsortstringinfo *rsi; totallength = (unsigned long) contfinder->nofseqs * contfinder->len - 1; width = mirrored ? GT_MULT2(totallength + 1) : (totallength + 1); rsi = gt_radixsort_str_new(contfinder->twobitencoding, totallength, (unsigned long) contfinder->len, GT_MULT2(width)); suffixes = gt_malloc(sizeof (unsigned long) * width); for (i = 0; i < width; i++) { suffixes[i] = i; } gt_radixsort_str_eqlen(rsi, suffixes, NULL, 0, depth, maxdepth, width); if (print) { for (i = 0; i < width; i++) { printf("%lu\n", suffixes[i]); } } gt_free(suffixes); gt_radixsort_str_delete(rsi); } genometools-1.5.1/src/match/rdj-contfinder.h000066400000000000000000000036031211610345200210120ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Giorgio Gonnella Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_CONTFINDER_H #define RDJ_CONTFINDER_H #include #include "core/file.h" #include "match/reads2twobit.h" typedef struct GtContfinder GtContfinder; GtContfinder* gt_contfinder_new(GtReads2Twobit *r2t); void gt_contfinder_run(GtContfinder *contfinder, bool mirrored, bool calculate_copynum); GtBitsequence *gt_contfinder_contained(GtContfinder *contfinder); unsigned long gt_contfinder_nofcontained(GtContfinder *contfinder); int gt_contfinder_write_seqnums(GtContfinder *contfinder, bool sorted, GtFile *outfp, GtError *err); int gt_contfinder_write_sorted_seqnums(GtContfinder *contfinder, char* path, GtError *err); int gt_contfinder_write_cntlist(GtContfinder *contfinder, char* path, GtError *err); int gt_contfinder_write_copynum(GtContfinder *contfinder, char* path, GtError *err); void gt_contfinder_delete(GtContfinder *contfinder); void gt_contfinder_radixsort_str_eqlen_tester(GtContfinder *contfinder, bool mirrored, unsigned long depth, unsigned long maxdepth, bool print); #endif genometools-1.5.1/src/match/rdj-contigpaths.c000066400000000000000000000070021211610345200211720ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/arraydef.h" #include "core/fasta_separator.h" #include "core/xansi_api.h" #include "core/str.h" #include "extended/assembly_stats_calculator.h" #include "match/rdj-contigs-writer.h" #include "match/rdj-contigpaths.h" static GtFile* gt_contigpaths_get_file(const char *indexname, const char *suffix, const char* mode, GtError *err) { GtStr *path; GtFile *file; path = gt_str_new_cstr(indexname); gt_str_append_cstr(path, suffix); file = gt_file_new(gt_str_get(path), mode, err); gt_str_delete(path); return file; } #define GT_CONTIGPATHS_BUFFERSIZE ((size_t)1 << 16) int gt_contigpaths_to_fasta(const char *indexname, const char *contigpaths_suffix, const char *fasta_suffix, const GtEncseq *encseq, unsigned long min_contig_length, bool showpaths, size_t buffersize, GtLogger *logger, GtError *err) { unsigned long nofchars, seqnum, contig_length = 0; GtFile *infp, *outfp; int nvalues, i; GtContigsWriter *cw; GtContigpathElem *buffer; if (buffersize == 0) buffersize = GT_CONTIGPATHS_BUFFERSIZE * sizeof (GtContigpathElem); else { size_t bsmod = buffersize % sizeof (GtContigpathElem); buffersize -= bsmod; } gt_assert(buffersize > 0); gt_assert(buffersize % sizeof (GtContigpathElem) == 0); buffer = gt_malloc(buffersize); gt_assert(encseq != NULL); gt_error_check(err); gt_assert(buffer != NULL); infp = gt_contigpaths_get_file(indexname, contigpaths_suffix, "r", err); if (infp == NULL) return -1; outfp = gt_contigpaths_get_file(indexname, fasta_suffix, "w", err); if (outfp == NULL) { gt_file_delete(infp); return -1; } cw = gt_contigs_writer_new(encseq, outfp, showpaths); while ((nvalues = gt_file_xread(infp, buffer, buffersize)) > 0) { gt_assert((size_t)nvalues <= buffersize); nvalues /= (sizeof (GtContigpathElem) << 1); for (i = 0; i < nvalues; i++) { nofchars = (unsigned long)buffer[(i << 1)]; seqnum = (unsigned long)buffer[(i << 1) + 1]; if (nofchars == 0) { /* end of contig */ if (contig_length >= min_contig_length) gt_contigs_writer_write(cw); else gt_contigs_writer_abort(cw); gt_contigs_writer_start(cw, seqnum); contig_length = gt_encseq_seqlength(encseq, seqnum); } else { contig_length += nofchars; gt_contigs_writer_append(cw, seqnum, nofchars); } } } if (contig_length >= min_contig_length) gt_contigs_writer_write(cw); else gt_contigs_writer_abort(cw); gt_contigs_writer_show_stats(cw, logger); gt_contigs_writer_delete(cw); gt_file_delete(infp); gt_file_delete(outfp); gt_free(buffer); return 0; } genometools-1.5.1/src/match/rdj-contigpaths.h000066400000000000000000000025251211610345200212040ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_CONTIGPATHS_H #define RDJ_CONTIGPATHS_H #include "core/file.h" #include "core/encseq.h" #include "core/logger.h" #include "core/error_api.h" typedef uint32_t GtContigpathElem; #define GT_CONTIGPATH_ELEM_MAX (GtContigpathElem)UINT32_MAX int gt_contigpaths_to_fasta(const char *indexname, const char *contigpaths_suffix, const char *fasta_suffix, const GtEncseq *encseq, unsigned long min_contig_length, bool showpaths, size_t buffersize, GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/rdj-contigs-writer.c000066400000000000000000000167441211610345200216440ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/arraydef.h" #include "core/fasta.h" #include "core/ma.h" #include "core/str.h" #include "extended/assembly_stats_calculator.h" #include "match/rdj-contigs-writer.h" struct GtContigsWriter { const GtEncseq *reads; GtFile *outfp; bool showpaths; GtAssemblyStatsCalculator *asc; GtEncseqReader *esr; GtArraychar contig; GtStr *contig_desc, *path_desc; unsigned long contignum, contigdepth, lastseqnum, nofseqs; }; #define GT_CONTIGS_WRITER_CONTIG_INC 16384UL GtContigsWriter *gt_contigs_writer_new(const GtEncseq *reads, GtFile *outfp, bool showpaths) { GtContigsWriter *contigs_writer; gt_assert(reads != NULL); contigs_writer = gt_malloc(sizeof (GtContigsWriter)); contigs_writer->reads = reads; contigs_writer->outfp = outfp; contigs_writer->showpaths = showpaths; contigs_writer->nofseqs = gt_encseq_num_of_sequences(contigs_writer->reads); contigs_writer->contignum = 0; contigs_writer->contigdepth = 0; GT_INITARRAY(&contigs_writer->contig, char); contigs_writer->contig_desc = gt_str_new(); contigs_writer->path_desc = gt_str_new(); contigs_writer->asc = gt_assembly_stats_calculator_new(); contigs_writer->esr = gt_encseq_create_reader_with_readmode(reads, GT_READMODE_FORWARD, 0); return contigs_writer; } void gt_contigs_writer_delete(GtContigsWriter *contigs_writer) { if (contigs_writer == NULL) return; GT_FREEARRAY(&contigs_writer->contig, char); gt_str_delete(contigs_writer->contig_desc); gt_str_delete(contigs_writer->path_desc); gt_assembly_stats_calculator_delete(contigs_writer->asc); gt_encseq_reader_delete(contigs_writer->esr); gt_free(contigs_writer); } static void gt_contigs_writer_reset_buffers(GtContigsWriter *contigs_writer) { gt_assert(contigs_writer != NULL); contigs_writer->contig.nextfreechar = 0; gt_str_reset(contigs_writer->contig_desc); gt_str_reset(contigs_writer->path_desc); contigs_writer->contigdepth = 0; } void gt_contigs_writer_abort(GtContigsWriter *contigs_writer) { gt_assert(contigs_writer != NULL); gt_contigs_writer_reset_buffers(contigs_writer); } GT_UNUSED static void gt_contigs_writer_append_chars(GtContigsWriter *contigs_writer, unsigned long nofchars) { unsigned long i; char *c; gt_assert(contigs_writer != NULL); for (i = 0; i < nofchars; i++) { GT_GETNEXTFREEINARRAY(c, &contigs_writer->contig, char, GT_CONTIGS_WRITER_CONTIG_INC); *c = gt_encseq_reader_next_decoded_char(contigs_writer->esr); } } #define GT_CONTIGS_WRITER_IS_DIRECT(SEQNUM, NOFSEQS)\ ((SEQNUM) < ((NOFSEQS) >> 1)) #define GT_CONTIGS_WRITER_READNUM(SEQNUM, NOFSEQS)\ (GT_CONTIGS_WRITER_IS_DIRECT(SEQNUM, NOFSEQS)\ ? (SEQNUM)\ : (NOFSEQS) - (SEQNUM) - 1) #define GT_CONTIGS_WRITER_LETTER(SEQNUM, NOFSEQS)\ (GT_CONTIGS_WRITER_IS_DIRECT(SEQNUM, NOFSEQS) ? 'E' : 'B') void gt_contigs_writer_write(GtContigsWriter *contigs_writer) { gt_assert(contigs_writer != NULL); if (contigs_writer->contig.nextfreechar > 0) { gt_assembly_stats_calculator_add(contigs_writer->asc, contigs_writer->contig.nextfreechar); /* build description */ gt_str_append_cstr(contigs_writer->contig_desc, "contig_"); gt_str_append_ulong(contigs_writer->contig_desc, contigs_writer->contignum); gt_str_append_cstr(contigs_writer->contig_desc, " length="); gt_str_append_ulong(contigs_writer->contig_desc, contigs_writer->contig.nextfreechar); gt_str_append_cstr(contigs_writer->contig_desc, " depth="); gt_str_append_ulong(contigs_writer->contig_desc, contigs_writer->contigdepth); gt_str_append_cstr(contigs_writer->contig_desc, " "); if (!contigs_writer->showpaths) { /* show path summary only */ gt_str_append_cstr(contigs_writer->path_desc, "-->...-->"); gt_str_append_ulong(contigs_writer->path_desc, GT_CONTIGS_WRITER_READNUM(contigs_writer->lastseqnum, contigs_writer->nofseqs)); gt_str_append_char(contigs_writer->path_desc, GT_CONTIGS_WRITER_LETTER(contigs_writer->lastseqnum, contigs_writer->nofseqs)); } gt_str_append_str(contigs_writer->contig_desc, contigs_writer->path_desc); gt_fasta_show_entry(gt_str_get(contigs_writer->contig_desc), contigs_writer->contig.spacechar, contigs_writer->contig.nextfreechar, 60UL, contigs_writer->outfp); contigs_writer->contignum++; gt_contigs_writer_reset_buffers(contigs_writer); } } void gt_contigs_writer_append(GtContigsWriter *contigs_writer, unsigned long seqnum, unsigned long nofchars) { unsigned long pos, i; gt_assert(contigs_writer != NULL); pos = gt_encseq_seqstartpos(contigs_writer->reads, seqnum) + gt_encseq_seqlength(contigs_writer->reads, seqnum) - nofchars; for (i = 0; i < nofchars; i++, pos++) { char *c; GT_GETNEXTFREEINARRAY(c, &contigs_writer->contig, char, GT_CONTIGS_WRITER_CONTIG_INC); *c = gt_encseq_get_encoded_char_nospecial(contigs_writer->reads, pos, GT_READMODE_FORWARD)["acgt"]; } contigs_writer->contigdepth++; if (contigs_writer->showpaths) { gt_str_append_cstr(contigs_writer->path_desc, "-("); gt_str_append_ulong(contigs_writer->path_desc, nofchars); gt_str_append_cstr(contigs_writer->path_desc, ")->"); gt_str_append_ulong(contigs_writer->path_desc, GT_CONTIGS_WRITER_READNUM(seqnum, contigs_writer->nofseqs)); gt_str_append_char(contigs_writer->path_desc, GT_CONTIGS_WRITER_LETTER(seqnum, contigs_writer->nofseqs)); } else { contigs_writer->lastseqnum = seqnum; } } void gt_contigs_writer_start(GtContigsWriter *contigs_writer, unsigned long seqnum) { unsigned long pos, nofchars, i; gt_assert(contigs_writer != NULL); pos = gt_encseq_seqstartpos(contigs_writer->reads, seqnum); nofchars = gt_encseq_seqlength(contigs_writer->reads, seqnum); for (i = 0; i < nofchars; i++, pos++) { char *c; GT_GETNEXTFREEINARRAY(c, &contigs_writer->contig, char, GT_CONTIGS_WRITER_CONTIG_INC); *c = gt_encseq_get_encoded_char_nospecial(contigs_writer->reads, pos, GT_READMODE_FORWARD)["acgt"]; } contigs_writer->contigdepth++; gt_str_append_ulong(contigs_writer->path_desc, GT_CONTIGS_WRITER_READNUM(seqnum, contigs_writer->nofseqs)); gt_str_append_char(contigs_writer->path_desc, GT_CONTIGS_WRITER_LETTER(seqnum, contigs_writer->nofseqs)); } void gt_contigs_writer_show_stats(GtContigsWriter *contigs_writer, GtLogger *logger) { gt_assert(contigs_writer != NULL); if (contigs_writer->contignum > 0) gt_assembly_stats_calculator_show(contigs_writer->asc, logger); else gt_logger_log(logger, "no contigs respect the given cutoff parameters"); } genometools-1.5.1/src/match/rdj-contigs-writer.h000066400000000000000000000031441211610345200216370ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_CONTIGS_WRITER_H #define RDJ_CONTIGS_WRITER_H #include "core/encseq.h" #include "core/file.h" #include "core/logger.h" typedef struct GtContigsWriter GtContigsWriter; GtContigsWriter *gt_contigs_writer_new(const GtEncseq *reads, GtFile *outfp, bool showpaths); void gt_contigs_writer_delete(GtContigsWriter *contigs_writer); void gt_contigs_writer_start(GtContigsWriter *contigs_writer, unsigned long seqnum); void gt_contigs_writer_append(GtContigsWriter *contigs_writer, unsigned long seqnum, unsigned long nofchars); void gt_contigs_writer_write(GtContigsWriter *contigs_writer); void gt_contigs_writer_abort(GtContigsWriter *contigs_writer); void gt_contigs_writer_show_stats(GtContigsWriter *contigs_writer, GtLogger *logger); #endif genometools-1.5.1/src/match/rdj-ensure-output.h000066400000000000000000000100061211610345200215110ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_ENSURE_OUTPUT_H #define RDJ_ENSURE_OUTPUT_H #include #include "core/ensure.h" #include "core/fa.h" #include "core/xansi_api.h" /* defines macros to make easier to test output to a temporary file */ #define GT_ENSURE_OUTPUT_DECLARE(MAXOUTSIZE) \ GtStr *fnamestr; \ char *fname; \ FILE *handle; \ GtFile *outfp; \ size_t outsize; \ char buffer[MAXOUTSIZE] #define GT_ENSURE_OUTPUT_GETFILE(GTFILE) \ fnamestr = gt_str_new(); \ handle = gt_xtmpfp(fnamestr); \ (GTFILE) = gt_file_new_from_fileptr(handle) #define GT_ENSURE_OUTPUT_TESTFILE(GTFILE, EXPOUT) \ (void)fflush(handle); \ gt_file_xrewind(GTFILE); \ outsize = (size_t)gt_file_xread((GTFILE), buffer, strlen(EXPOUT)); \ gt_ensure(had_err, outsize == strlen(EXPOUT)); \ gt_ensure(had_err, memcmp((EXPOUT), buffer, outsize) == 0); \ if (had_err != 0) \ { \ fprintf(stderr, "\nExpected file content: \n%s\n", \ EXPOUT); \ fprintf(stderr, "\nFile content actually read " \ "(up to %lu bytes):\n%s\n", \ (unsigned long) strlen(EXPOUT), buffer); \ } #define GT_ENSURE_OUTPUT_RMFILE(GTFILE) \ gt_file_delete(GTFILE); \ fname = gt_str_get(fnamestr); \ gt_xremove(fname); \ gt_str_delete(fnamestr) #define GT_ENSURE_OUTPUT(FNCALL, EXPOUT) \ GT_ENSURE_OUTPUT_GETFILE(outfp); \ FNCALL; \ GT_ENSURE_OUTPUT_TESTFILE(outfp, EXPOUT); \ GT_ENSURE_OUTPUT_RMFILE(outfp) /* Compares the output of the function call FNCALL to the char* EXPOUT (size and content). Usage: GT_ENSURE_OUTPUT_DECLARE in the declarations, then GT_ENSURE_OUTPUT to run the test (also multiple times); FNCALL should print something to the GtFile* outfp or to the FILE* handle Assumes: - int had_err is the return value variable of the unit test method - GtError *err (required by the gt_ensure macro) - reserved variables: fnamestr, fname, handle, outfp, outsize, buffer */ #endif genometools-1.5.1/src/match/rdj-errfind.c000066400000000000000000000215211211610345200203020ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/fa.h" #include "core/unused_api.h" #include "core/undef_api.h" #include "core/log.h" #include "match/rdj-twobitenc-editor.h" #include "match/rdj-errfind.h" /*#define RDJ_ERRFIND_DEBUG*/ typedef struct { void *stack; GtError *err; const GtEncseq *encseq; unsigned int alphasize; unsigned int currentchar; /* parameters */ unsigned long k; /* k-mer length */ unsigned long c; /* min count for k-mer to be trusted */ unsigned long *kpositions; unsigned long *count; bool seprange; unsigned long debug_value; bool quiet; unsigned long firstmirrorpos; unsigned long totallength; GtTwobitencEditor *editor; /* statistics */ unsigned long ncorrections; } GtBUstate_errfind; typedef struct { /* empty */ } GtBUinfo_errfind; static void initBUinfo_errfind(GT_UNUSED GtBUinfo_errfind *buinfo, GT_UNUSED GtBUstate_errfind *state) { /* nothing to do */ } static void freeBUinfo_errfind(GT_UNUSED GtBUinfo_errfind *buinfo, GT_UNUSED GtBUstate_errfind *state) { /* nothing to do */ } static inline void gt_errfind_reset(GtBUstate_errfind *state) { unsigned int i; state->currentchar = 0; for (i = 0; i < state->alphasize; i++) state->count[i] = 0; state->seprange = false; } static inline void gt_errfind_process_kmer(unsigned long leafnumber, GtBUstate_errfind *state) { unsigned long current_count = ++state->count[state->currentchar]; if (current_count <= state->c) { gt_assert(leafnumber + state->k - 1 < gt_encseq_total_length(state->encseq)); state->kpositions[state->currentchar * state->c + current_count - 1] = leafnumber + state->k - 1; } } #define RDJ_ERRFIND_KMINUSITHCHAR(I) \ ((leafnumber + state->k - I) < gt_encseq_total_length(state->encseq)) \ ? gt_encseq_get_decoded_char(state->encseq, leafnumber + state->k - I, \ GT_READMODE_FORWARD) \ : '-' #define RDJ_ERRFIND_SHOW_KMER \ gt_log_log("ln: %lu; fd: %lu; k-mer: %c...%c%c%c%c%c%c%c%c%c%c%c(%c)",\ leafnumber, fatherdepth, RDJ_ERRFIND_KMINUSITHCHAR(state->k),\ RDJ_ERRFIND_KMINUSITHCHAR(11), RDJ_ERRFIND_KMINUSITHCHAR(10),\ RDJ_ERRFIND_KMINUSITHCHAR(9), RDJ_ERRFIND_KMINUSITHCHAR(8),\ RDJ_ERRFIND_KMINUSITHCHAR(7), RDJ_ERRFIND_KMINUSITHCHAR(6),\ RDJ_ERRFIND_KMINUSITHCHAR(5), RDJ_ERRFIND_KMINUSITHCHAR(4),\ RDJ_ERRFIND_KMINUSITHCHAR(3), RDJ_ERRFIND_KMINUSITHCHAR(2),\ RDJ_ERRFIND_KMINUSITHCHAR(1), RDJ_ERRFIND_KMINUSITHCHAR(0)); #define RDJ_ERRFIND_IS_SEPRANGE(ENCSEQ, POS)\ ((POS) == gt_encseq_total_length(ENCSEQ) || \ gt_encseq_position_is_separator((ENCSEQ), (POS), GT_READMODE_FORWARD)) GT_UNUSED static inline unsigned long gt_errfind_sfxlength(const GtEncseq *encseq, unsigned long pos) { unsigned long seqnum = gt_encseq_seqnum(encseq, pos); unsigned long seqstartpos = gt_encseq_seqstartpos(encseq, seqnum); unsigned long seqlength = gt_encseq_seqlength(encseq, seqnum); return seqstartpos + (seqlength - 1) - pos; } static int processleafedge_errfind(GT_UNUSED bool firstsucc, unsigned long fatherdepth, GT_UNUSED GtBUinfo_errfind *father, unsigned long leafnumber, GtBUstate_errfind *state, GT_UNUSED GtError *err) { #ifdef RDJ_ERRFIND_DEBUG if (leafnumber == state->debug_value) gt_log_enable(); RDJ_ERRFIND_SHOW_KMER; #endif if (fatherdepth < state->k - 1) { gt_errfind_reset(state); } else if (!state->seprange) { if (fatherdepth == state->k - 1 && RDJ_ERRFIND_IS_SEPRANGE(state->encseq, leafnumber + fatherdepth)) { state->seprange = true; } if (!state->seprange && state->currentchar < state->alphasize) { gt_errfind_process_kmer(leafnumber, state); if (fatherdepth == state->k - 1) { state->currentchar++; #ifdef RDJ_ERRFIND_DEBUG gt_log_log("currentchar incremented, now is %u", state->currentchar); #endif } } } return 0; } static int processbranchingedge_errfind(GT_UNUSED bool firstsucc, GT_UNUSED unsigned long fatherdepth, GT_UNUSED GtBUinfo_errfind *father, GT_UNUSED unsigned long sondepth, GT_UNUSED unsigned long sonwidth, GT_UNUSED GtBUinfo_errfind *son, GT_UNUSED GtBUstate_errfind *state, GT_UNUSED GtError *err) { if (fatherdepth < state->k - 1) gt_errfind_reset(state); else if (fatherdepth == state->k - 1) { state->currentchar++; #ifdef RDJ_ERRFIND_DEBUG gt_log_log("currentchar incremented, now is %u", state->currentchar); #endif } return 0; } static inline bool gt_errfind_are_all_trusted(const GtBUstate_errfind *state) { unsigned int cnum; bool alltrusted = true; for (cnum = 0; cnum < state->alphasize && alltrusted; cnum++) if (state->count[cnum] < state->c) alltrusted = false; #ifdef RDJ_ERRFIND_DEBUG for (cnum = 0; cnum < state->alphasize; cnum++) gt_log_log("cnum %u count: %lu", cnum, state->count[cnum]); #endif return alltrusted; } static inline GtUchar gt_errfind_trusted_char(const GtBUstate_errfind *state) { unsigned int cnum; GtUchar trusted_char = (GtUchar)GT_UNDEF_UCHAR; unsigned long trusted_count = 0; for (cnum = 0; cnum < state->alphasize && trusted_char == (GtUchar)GT_UNDEF_UCHAR; cnum++) { if (state->count[cnum] >= state->c && state->count[cnum] > trusted_count) { trusted_char = gt_encseq_get_encoded_char_nospecial(state->encseq, state->kpositions[cnum * state->c], GT_READMODE_FORWARD); #ifdef RDJ_ERRFIND_DEBUG gt_log_log("trusted_char: %c (cnum: %u), count: %lu, pos: %lu", "acgt"[trusted_char], cnum, state->count[cnum], state->kpositions[cnum * state->c]); #endif } } return trusted_char; } static int processlcpinterval_errfind(unsigned long lcp, GT_UNUSED GtBUinfo_errfind *info, GtBUstate_errfind *state, GT_UNUSED GtError *err) { if (lcp == state->k - 1 && !gt_errfind_are_all_trusted(state)) { GtUchar trusted_char = gt_errfind_trusted_char(state); if (trusted_char != (GtUchar)GT_UNDEF_UCHAR) { unsigned int cnum; for (cnum = 0; cnum < state->alphasize && state->count[cnum] > 0; cnum++) { if (state->count[cnum] < state->c) { unsigned long i; for (i = 0; i < state->count[cnum]; i++) { unsigned long pos = state->kpositions[cnum * state->c + i]; GtUchar newchar = trusted_char; if (pos >= state->firstmirrorpos) { pos = state->totallength - 1UL - pos; newchar = (GtUchar)3 - newchar; } if (state->editor != NULL) { #ifdef RDJ_ERRFIND_DEBUG printf("%lu:%u\n", pos, (unsigned int)newchar); #endif gt_twobitenc_editor_edit(state->editor, pos, newchar); } } } } } } return 0; } #include "match/esa-bottomup-errfind.inc" int gt_errfind(Sequentialsuffixarrayreader *ssar, const GtEncseq *encseq, unsigned long k, unsigned long c, unsigned long debug_value, bool edit_twobitencoding, const char *indexname, GtError *err) { GtBUstate_errfind *state; int had_err = 0; state = gt_malloc(sizeof (*state)); state->alphasize = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); state->kpositions = gt_malloc(sizeof (unsigned long) * state->alphasize * c); state->count = gt_malloc(sizeof (unsigned long) * state->alphasize); state->encseq = encseq; state->totallength = gt_encseq_total_length(encseq); state->firstmirrorpos = state->totallength; if (gt_encseq_is_mirrored(encseq)) state->firstmirrorpos >>= 1; state->editor = NULL; if (edit_twobitencoding) { state->editor = gt_twobitenc_editor_new(encseq, indexname, err); if (state->editor == NULL) had_err = -1; } state->k = k; state->c = c; state->debug_value = debug_value; state->quiet = (state->debug_value == GT_UNDEF_ULONG ? false : true); gt_errfind_reset(state); had_err = gt_esa_bottomup_errfind(ssar, state, err); if (state->editor != NULL) { gt_twobitenc_editor_delete(state->editor); } gt_free(state->kpositions); gt_free(state->count); gt_free(state); return had_err; } genometools-1.5.1/src/match/rdj-errfind.h000066400000000000000000000022651211610345200203130ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_ERRFIND_H #define RDJ_ERRFIND_H #include "core/error_api.h" #include "core/encseq.h" #include "match/esa-seqread.h" int gt_errfind(Sequentialsuffixarrayreader *ssar, const GtEncseq *encseq, unsigned long k, unsigned long c, unsigned long debug_value, bool edit_twobitencoding, const char *indexname, GtError *err); #endif genometools-1.5.1/src/match/rdj-filesuf-def.h000066400000000000000000000055361211610345200210570ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_FILESUF_DEF_H #define RDJ_FILESUF_DEF_H /* * Filename suffices relevant to Readjoiner are defined here * */ /* -- main output -- */ #define GT_READJOINER_SUFFIX_SPMLIST ".spm" #define GT_READJOINER_SUFFIX_CONTIG_PATHS ".paths" #define GT_READJOINER_SUFFIX_CONTIGS ".contigs.fas" /* -- prefilter -- */ #define GT_READJOINER_SUFFIX_PREFILTERED_FAS ".pf.fas" #define GT_READJOINER_SUFFIX_READSCOPYNUM ".rcn" /* -- test / debug / development output -- */ #define GT_READJOINER_SUFFIX_CNTLIST ".cnt" #define GT_READJOINER_SUFFIX_SPMCOUNTS ".nofspm" #define GT_READJOINER_SUFFIX_SPMCOUNTS_DISTRI ".nofspm.distri" #define GT_READJOINER_SUFFIX_ELEN_DISTRI ".elen.distri" #define GT_READJOINER_SUFFIX_SEPPOS ".sep" #define GT_READJOINER_SUFFIX_TWOBIT ".2bit" #define GT_READJOINER_SUFFIX_SEQNUMS ".seqnums" #define GT_READJOINER_SUFFIX_WSIZE_DISTRI ".wsize.distri" /* string graph: */ /* before transitive reduction (u=unreduced) */ #define GT_READJOINER_SUFFIX_U_SG ".u.sg" #define GT_READJOINER_SUFFIX_U_SG_DOT ".u.dot" #define GT_READJOINER_SUFFIX_U_SG_SPMLIST ".u.sg.spm" #define GT_READJOINER_SUFFIX_U_SG_ADJLIST ".u.adj" /* without submax edges reduction (m=multigraph) */ #define GT_READJOINER_SUFFIX_M_SG ".m.sg" #define GT_READJOINER_SUFFIX_M_SG_DOT ".m.dot" #define GT_READJOINER_SUFFIX_M_SG_SPMLIST ".m.sg.spm" #define GT_READJOINER_SUFFIX_M_SG_ADJLIST ".m.adj" /* reduced graph */ #define GT_READJOINER_SUFFIX_SG ".sg" #define GT_READJOINER_SUFFIX_SG_DOT ".dot" #define GT_READJOINER_SUFFIX_SG_SPMLIST ".sg.spm" #define GT_READJOINER_SUFFIX_SG_ADJLIST ".adj" /* after error correction */ #define GT_READJOINER_SUFFIX_C_SG ".c.sg" #define GT_READJOINER_SUFFIX_C_SG_DOT ".c.dot" #define GT_READJOINER_SUFFIX_C_SG_SPMLIST ".c.sg.spm" #define GT_READJOINER_SUFFIX_C_SG_ADJLIST ".c.adj" #endif genometools-1.5.1/src/match/rdj-ovlfind-bf.c000066400000000000000000000253651211610345200207110ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include /* memcmp */ #include "core/ma.h" #include "core/assert_api.h" #include "core/minmax.h" #include "match/rdj-ovlfind-bf.h" /* for unit test: */ #include "core/array_api.h" #include "core/ensure.h" static inline bool contfind_bf(const char *a, unsigned long alen, const char *b, unsigned long blen) { unsigned long offset; gt_assert(alen < blen); for (offset = 0; offset <= blen-alen; offset++) if (memcmp(a, b+offset, (size_t)alen) == 0) return true; return false; } static inline void spmfind_bf(const char *a, unsigned long alen, const char *b, unsigned long blen, unsigned long minlen, bool find_nonmaximal, bool self_comparison, void(*proc)(unsigned long, bool, void*), bool direction, void* procdata) { unsigned long len, from; from = MIN(alen, blen); if (self_comparison) from -= 1; for (len = from; len >= minlen; len--) if (memcmp(a+alen-len, b, (size_t)len) == 0) { proc(len, direction, procdata); if (!find_nonmaximal) break; } } GtContfind gt_ovlfind_bf(const char *u, unsigned long u_length, const char *v, unsigned long v_length, GtOvlfindMode m, unsigned long min_length, bool find_nonmaximal, void(*spmproc) (unsigned long /* overlap length */, bool /* true if suffix of u == prefix of v; false if prefix of u == suffix of v */, void* /* spmprocdata */), void* spmprocdata) { GtContfind retval = GT_CONTFIND_OFF; bool self_comparison; gt_assert(u != NULL); gt_assert(u_length > 0); self_comparison = (v == NULL); gt_assert(self_comparison || v_length > 0); gt_assert(!self_comparison || m == GT_OVLFIND_SPM || m == GT_OVLFIND_ALL); if (self_comparison && m == GT_OVLFIND_ALL) retval = GT_CONTFIND_EQ; if (m != GT_OVLFIND_SPM && !self_comparison) { if (u_length == v_length) retval = memcmp(u, v, (size_t)u_length) == 0 ? GT_CONTFIND_EQ : GT_CONTFIND_NO; else if (u_length < v_length) retval = contfind_bf(u, u_length, v, v_length) ? GT_CONTFIND_U : GT_CONTFIND_NO; else /* u_length > v_length */ retval = contfind_bf(v, v_length, u, u_length) ? GT_CONTFIND_V : GT_CONTFIND_NO; if (m == GT_OVLFIND_PROPER_SPM && retval != GT_CONTFIND_NO) return retval; } if (m != GT_OVLFIND_CNT) { if (self_comparison) { spmfind_bf(u, u_length, u, u_length, min_length, find_nonmaximal, self_comparison, spmproc, true, spmprocdata); } else { spmfind_bf(u, u_length, v, v_length, min_length, find_nonmaximal, self_comparison, spmproc, true, spmprocdata); spmfind_bf(v, v_length, u, u_length, min_length, find_nonmaximal, self_comparison, spmproc, false, spmprocdata); } } return retval; } /*-------------------------- UNIT TEST --------------------------*/ struct GtOvlfindBfResult { bool u_suffix; unsigned long length; }; static void ovlfind_bf_test_save(unsigned long length, bool u_suffix, void *a) { struct GtOvlfindBfResult r = {u_suffix, length}; gt_array_add((GtArray*)a,r); } #define GT_OVLFIND_BF_EXPECT_RESULT(N,U_SUF,LEN) \ if (!had_err) r = gt_array_get(a, (N)); \ gt_ensure(had_err, r->u_suffix == (U_SUF)); \ gt_ensure(had_err, r->length == (LEN)) int gt_ovlfind_bf_unit_test(GtError *err) { int had_err = 0; GtArray *a; struct GtOvlfindBfResult *r; GtContfind retval; /*@i1@*/ gt_error_check(err); a = gt_array_new(sizeof (struct GtOvlfindBfResult)); /* u suffix == v prefix */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_bf("aacgcacctg", 10UL, "acctgatttc", 10UL, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_NO); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_BF_EXPECT_RESULT(0UL, true, 5UL); } /* v suffix == u prefix */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_bf("atccgtgacgtg", 12UL, "aagaagaatccg", 12UL, GT_OVLFIND_ALL, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_NO); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_BF_EXPECT_RESULT(0UL, false, 5UL); } /* no overlap */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_bf("aac", 3UL, "tgc", 3UL, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_NO); gt_ensure(had_err, gt_array_size(a) == 0UL); } /* u suffix of v */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_bf("acagc", 5UL, "gtacagc", 7UL, GT_OVLFIND_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); GT_OVLFIND_BF_EXPECT_RESULT(0UL, false, 5UL); gt_array_reset(a); retval = gt_ovlfind_bf("acagc", 5UL, "gtacagc", 7UL, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_U); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_array_reset(a); retval = gt_ovlfind_bf("acagc", 5UL, "gtacagc", 7UL, GT_OVLFIND_CNT, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_ensure(had_err, retval == GT_CONTFIND_U); gt_array_reset(a); retval = gt_ovlfind_bf("acagc", 5UL, "gtacagc", 7UL, GT_OVLFIND_ALL, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); gt_ensure(had_err, retval == GT_CONTFIND_U); GT_OVLFIND_BF_EXPECT_RESULT(0UL, false, 5UL); } /* v suffix of u */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_bf("gtacagc", 7UL, "acagc", 5UL, GT_OVLFIND_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); GT_OVLFIND_BF_EXPECT_RESULT(0UL, true, 5UL); gt_array_reset(a); retval = gt_ovlfind_bf("gtacagc", 7UL, "acagc", 5UL, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_V); gt_ensure(had_err, gt_array_size(a) == 0UL); } /* u prefix of v */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_bf("ctat", 4UL, "ctatacagg", 9UL, GT_OVLFIND_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_BF_EXPECT_RESULT(0UL, true, 4UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_array_reset(a); retval = gt_ovlfind_bf("ctat", 4UL, "ctatacagg", 9UL, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_ensure(had_err, retval == GT_CONTFIND_U); } /* v prefix of u */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_bf("ctatacagg", 9UL, "ctat", 4UL, GT_OVLFIND_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_BF_EXPECT_RESULT(0UL, false, 4UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_array_reset(a); retval = gt_ovlfind_bf("ctatacagg", 9UL, "ctat", 4UL, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_ensure(had_err, retval == GT_CONTFIND_V); } /* identical sequences */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_bf("acagc", 5UL, "acagc", 5UL, GT_OVLFIND_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 2UL); GT_OVLFIND_BF_EXPECT_RESULT(0UL, true, 5UL); GT_OVLFIND_BF_EXPECT_RESULT(1UL, false, 5UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_array_reset(a); retval = gt_ovlfind_bf("acagc", 5UL, "acagc", 5UL, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_ensure(had_err, retval == GT_CONTFIND_EQ); } /* find_nonmaximal */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_bf("aacagtagtagt", 12UL, "agtagtagttaa", 12UL, GT_OVLFIND_SPM, 1UL, false, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 2UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); GT_OVLFIND_BF_EXPECT_RESULT(0UL, true, 9UL); GT_OVLFIND_BF_EXPECT_RESULT(1UL, false, 2UL); gt_array_reset(a); retval = gt_ovlfind_bf("aacagtagtagt", 12UL, "agtagtagttaa", 12UL, GT_OVLFIND_SPM, 1UL, true, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 5UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); } /* min_length */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_bf("aggaccagtagt", 12UL, "agtagttactac", 12UL, GT_OVLFIND_SPM, 1UL, true, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 2UL); gt_array_reset(a); retval = gt_ovlfind_bf("aggaccagtagt", 12UL, "agtagttactac", 12UL, GT_OVLFIND_SPM, 4UL, true, ovlfind_bf_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); } gt_array_delete(a); return had_err; } genometools-1.5.1/src/match/rdj-ovlfind-bf.h000066400000000000000000000036061211610345200207100ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_OVLFIND_BF_H #define RDJ_OVLFIND_BF_H #include "core/error_api.h" /* GtError */ #include "match/rdj-contfind-def.h" /* GtContfind */ #include "match/rdj-pairwise.h" /* GtOvlfindMode */ /* brute force overlap finder */ /* known issues: - case sensitive (a != A) - no notion of wildcards (i.e. n == n) */ GtContfind gt_ovlfind_bf(const char *u, unsigned long u_length, const char *v, /* NULL for u vs. u */ unsigned long v_length, GtOvlfindMode m, unsigned long min_length, bool find_nonmaximal, void(*spmproc) (unsigned long /* overlap length */, bool /* true if suffix of u == prefix of v false if prefix of u == suffix of v */, void* /* spmprocdata */), void* spmprocdata); int gt_ovlfind_bf_unit_test(GtError *err); #endif genometools-1.5.1/src/match/rdj-ovlfind-dp.c000066400000000000000000000404641211610345200207220ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/minmax.h" #include "core/unused_api.h" #include "core/log.h" #include "match/rdj-ovlfind-dp.h" /* unit test: */ #include #include "core/ensure.h" #include "core/array_api.h" typedef struct { unsigned long edist, start_i, start_j; } GtOvlfindDpCell; /* true if u == v (approximatively) */ static inline bool eqlfind_dp(unsigned long max_edist, GtOvlfindDpCell *mn_cell) { return mn_cell->edist <= max_edist && mn_cell->start_i == 0 && mn_cell->start_j == 0; } /* true if u is approximatively contained in v */ static inline bool u_contfind_dp(unsigned long max_edist, unsigned long n, GtOvlfindDpCell **lastrow) { unsigned long j; for (j = 0; j <= n; j++) if ((*lastrow)[j].edist <= max_edist && (*lastrow)[j].start_i == 0) return true; return false; } /* true if v is approximatively contained in u */ static inline bool v_contfind_dp(unsigned long max_edist, unsigned long m, GtOvlfindDpCell **lastcol) { unsigned long i; for (i = 0; i <= m; i++) if ((*lastcol)[i].edist <= max_edist && (*lastcol)[i].start_j == 0) return true; return false; } /* find approximate suffix-prefix matches, with the suffix coming from u */ static inline void u_smpfind_dp(unsigned long min_length, unsigned long max_edist, bool find_submaximal, unsigned long m, unsigned long n, GtOvlfindDpCell **lastrow, void (*proc)(unsigned long, unsigned long, unsigned long, bool, void*), void* procdata) { unsigned long j, suffix_length; gt_assert(m > 0); gt_assert(n > 0); gt_assert(lastrow != NULL); for (j = n; j >= min_length; j--) { if ((*lastrow)[j].edist <= max_edist && (*lastrow)[j].start_j == 0) { suffix_length = m - (*lastrow)[j].start_i; if (suffix_length >= min_length) proc(suffix_length, j /* prefix length */, (*lastrow)[j].edist, true, procdata); if (!find_submaximal) break; } } } /* find approximate suffix-prefix matches, with the suffix coming from v */ static inline void v_smpfind_dp(unsigned long min_length, unsigned long max_edist, bool find_submaximal, unsigned long m, unsigned long n, GtOvlfindDpCell **lastcol, void (*proc)(unsigned long, unsigned long, unsigned long, bool, void*), void* procdata) { unsigned long i, prefix_length; gt_assert(m > 0); gt_assert(n > 0); gt_assert(lastcol != NULL); for (i = m; i >= min_length; i--) { if ((*lastcol)[i].edist <= max_edist && (*lastcol)[i].start_i == 0) { prefix_length = n - (*lastcol)[i].start_j; if (prefix_length >= min_length) proc(i /* suffix length */, prefix_length, (*lastcol)[i].edist, false, procdata); if (!find_submaximal) break; } } } static inline void run_dp(const char *u, unsigned long m, const char *v, unsigned long n, GtOvlfindDpCell **row, GtOvlfindDpCell **col) { unsigned long i, j, cost_r, cost_d, cost_i; GtOvlfindDpCell cell_r, next_cell_r; /* first row */ for (i = 0; i <= m; i++) { (*col)[i].start_i = i; (*col)[i].start_j = 0; (*col)[i].edist = 0; } (*row)[0] = (*col)[m]; /* following (*row)s */ for (j = 1UL; j <= n; j++) { (*col)[0].start_j = j; cell_r.start_i = 0; cell_r.start_j = j - 1; cell_r.edist = 0; for (i = 1UL; i <= m; i++) { next_cell_r = (*col)[i]; cost_i = (*col)[i].edist + 1; /* cost(e --> v[j]) */ cost_d = (*col)[i - 1].edist + 1; /* cost(u[i] --> e)*/ cost_r = cell_r.edist + ((u[i - 1] == v[j - 1]) ? 0 : 1); if (cost_r < cost_i && cost_r < cost_d) { /* replacement */ (*col)[i].start_i = cell_r.start_i; (*col)[i].start_j = cell_r.start_j; (*col)[i].edist = cost_r; } else if (cost_i < cost_d) { /* insertion */ /* start_i and start_j already correct */ (*col)[i].edist = cost_i; } else { /* deletion */ (*col)[i].start_i = (*col)[i-1].start_i; (*col)[i].start_j = (*col)[i-1].start_j; (*col)[i].edist = cost_d; } cell_r = next_cell_r; } (*row)[j] = (*col)[m]; } } GT_UNUSED static void print_row_and_col(GtOvlfindDpCell *row, unsigned long m, GtOvlfindDpCell *col, unsigned long n) { unsigned long i, j; for (i = 0; i <= m; i++) gt_log_log("col[%lu]=((%lu,%lu),%lu)\n", i, col[i].start_i, col[i].start_j, col[i].edist); for (j = 0; j <= n; j++) gt_log_log("row[%lu]=((%lu,%lu),%lu)\n", j, row[j].start_i, row[j].start_j, row[j].edist); } GtContfind gt_ovlfind_dp(const char *u, unsigned long m, const char *v, unsigned long n, double max_error, GtOvlfindMode mode, unsigned long min_length, bool find_submaximal, void (*smpproc) (unsigned long /* length on u */, unsigned long /* length on v */, unsigned long /* unit edit distance */, bool /* true if suffix comes from u, false if suffix comes from v */, void* /* procdata */), void* smpprocdata) { GtOvlfindDpCell *row, *col; unsigned long max_edist; GtContfind retval = GT_CONTFIND_OFF; bool self_comparison; gt_assert(u != NULL); gt_assert(m > 0); self_comparison = (v == NULL); gt_assert(self_comparison || n > 0); gt_assert(!self_comparison || mode == GT_OVLFIND_SPM || mode == GT_OVLFIND_ALL); if (self_comparison) { max_edist = (unsigned long)(max_error * m); row = gt_malloc(sizeof (GtOvlfindDpCell) * (m + 1)); col = gt_malloc(sizeof (GtOvlfindDpCell) * (m + 1)); run_dp(u, m, u, m, &row, &col); } else { max_edist = (unsigned long)(max_error * MAX(m,n)); row = gt_malloc(sizeof (GtOvlfindDpCell) * (n + 1)); col = gt_malloc(sizeof (GtOvlfindDpCell) * (m + 1)); run_dp(u, m, v, n, &row, &col); /* decomment to show row and col to debug log: */ /* print_row_and_col(row, m, col, n); */ } if (self_comparison && mode == GT_OVLFIND_ALL) retval = GT_CONTFIND_EQ; if (mode != GT_OVLFIND_SPM && !self_comparison) { if (eqlfind_dp(max_edist, row+n)) retval = GT_CONTFIND_EQ; else if (v_contfind_dp(max_edist, m, &col)) retval = GT_CONTFIND_V; else if (u_contfind_dp(max_edist, n, &row)) retval = GT_CONTFIND_U; else retval = GT_CONTFIND_NO; } if (mode == GT_OVLFIND_SPM || mode == GT_OVLFIND_ALL || (mode == GT_OVLFIND_PROPER_SPM && retval == GT_CONTFIND_NO)) { if (self_comparison) { u_smpfind_dp(min_length, max_edist, find_submaximal, m, m-1, &row, smpproc, smpprocdata); } else { u_smpfind_dp(min_length, max_edist, find_submaximal, m, n, &row, smpproc, smpprocdata); v_smpfind_dp(min_length, max_edist, find_submaximal, m, n, &col, smpproc, smpprocdata); } } gt_free(row); gt_free(col); return retval; } /*-------------------------- UNIT TEST --------------------------*/ struct GtOvlfindDpResult { unsigned long ulen, vlen, edist; bool dir; }; static void ovlfind_dp_test_save(unsigned long ulen, unsigned long vlen, unsigned long edist, bool dir, void *a) { struct GtOvlfindDpResult r = {ulen, vlen, edist, dir}; gt_array_add((GtArray*)a,r); } #define GT_OVLFIND_DP_EXPECT_RESULT(N,ULEN,VLEN,EDST,DIR) \ if (!had_err) r = gt_array_get(a, (N)); \ gt_ensure(had_err, r->ulen == (ULEN)); \ gt_ensure(had_err, r->vlen == (VLEN)); \ gt_ensure(had_err, r->edist == (EDST)); \ gt_ensure(had_err, r->dir == (DIR)) int gt_ovlfind_dp_unit_test(GtError *err) { int had_err = 0; GtArray *a; struct GtOvlfindDpResult *r; GtContfind retval; /*@i1@*/ gt_error_check(err); a = gt_array_new(sizeof (struct GtOvlfindDpResult)); /* u suffix == v prefix */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("aacgcacctg", 10UL, "acctgatttc", 10UL, 0.0, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_NO); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_DP_EXPECT_RESULT(0UL, 5UL, 5UL, 0UL, true); } /* v suffix == u prefix */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("atccgtgacgtg", 12UL, "aagaagaatccg", 12UL, 0.0, GT_OVLFIND_ALL, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_NO); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_DP_EXPECT_RESULT(0UL, 5UL, 5UL, 0UL, false); } /* no overlap */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("aac", 3UL, "tgc", 3UL, 0.0, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_NO); gt_ensure(had_err, gt_array_size(a) == 0UL); } /* u suffix of v */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("acagc", 5UL, "gtacagc", 7UL, 0.0, GT_OVLFIND_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_DP_EXPECT_RESULT(0UL, 5UL, 5UL, 0UL, false); gt_array_reset(a); retval = gt_ovlfind_dp("acagc", 5UL, "gtacagc", 7UL, 0.0, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_U); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_array_reset(a); retval = gt_ovlfind_dp("acagc", 5UL, "gtacagc", 7UL, 0.0, GT_OVLFIND_CNT, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_ensure(had_err, retval == GT_CONTFIND_U); gt_array_reset(a); retval = gt_ovlfind_dp("acagc", 5UL, "gtacagc", 7UL, 0.0, GT_OVLFIND_ALL, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); gt_ensure(had_err, retval == GT_CONTFIND_U); GT_OVLFIND_DP_EXPECT_RESULT(0UL, 5UL, 5UL, 0UL, false); } /* v suffix of u */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("gtacagc", 7UL, "acagc", 5UL, 0.0, GT_OVLFIND_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_DP_EXPECT_RESULT(0UL, 5UL, 5UL, 0UL, true); gt_array_reset(a); retval = gt_ovlfind_dp("gtacagc", 7UL, "acagc", 5UL, 0.0, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_V); gt_ensure(had_err, gt_array_size(a) == 0UL); } /* u prefix of v */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("ctat", 4UL, "ctatacagg", 9UL, 0.0, GT_OVLFIND_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_DP_EXPECT_RESULT(0UL, 4UL, 4UL, 0UL, true); gt_array_reset(a); retval = gt_ovlfind_dp("ctat", 4UL, "ctatacagg", 9UL, 0.0, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_U); gt_ensure(had_err, gt_array_size(a) == 0UL); } /* v prefix of u */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("ctatacagg", 9UL, "ctat", 4UL, 0.0, GT_OVLFIND_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_DP_EXPECT_RESULT(0UL, 4UL, 4UL, 0UL, false); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_array_reset(a); retval = gt_ovlfind_dp("ctatacagg", 9UL, "ctat", 4UL, 0.0, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_V); gt_ensure(had_err, gt_array_size(a) == 0UL); } /* identical sequences */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("acagc", 5UL, "acagc", 5UL, 0.0, GT_OVLFIND_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 2UL); GT_OVLFIND_DP_EXPECT_RESULT(0UL, 5UL, 5UL, 0UL, true); GT_OVLFIND_DP_EXPECT_RESULT(1UL, 5UL, 5UL, 0UL, false); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_array_reset(a); retval = gt_ovlfind_dp("acagc", 5UL, "acagc", 5UL, 0.0, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_ensure(had_err, retval == GT_CONTFIND_EQ); } /* find_nonmaximal */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("aacagtagtagt", 12UL, "agtagtagttaa", 12UL, 0.0, GT_OVLFIND_SPM, 1UL, false, ovlfind_dp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_ensure(had_err, gt_array_size(a) == 2UL); GT_OVLFIND_DP_EXPECT_RESULT(0UL, 9UL, 9UL, 0UL, true); GT_OVLFIND_DP_EXPECT_RESULT(1UL, 2UL, 2UL, 0UL, false); gt_array_reset(a); retval = gt_ovlfind_dp("aacagtagtagt", 12UL, "agtagtagttaa", 12UL, 0.0, GT_OVLFIND_SPM, 1UL, true, ovlfind_dp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 5UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); } /* min_length */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("aggaccagtagt", 12UL, "agtagttactac", 12UL, 0.0, GT_OVLFIND_SPM, 1UL, true, ovlfind_dp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 2UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_array_reset(a); retval = gt_ovlfind_dp("aggaccagtagt", 12UL, "agtagttactac", 12UL, 0.0, GT_OVLFIND_SPM, 4UL, true, ovlfind_dp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); } /* max_error */ if (!had_err) { gt_array_reset(a); retval = gt_ovlfind_dp("gaccactagt", 10UL, "agtagttact", 10UL, 0.0, GT_OVLFIND_SPM, 6UL, true, ovlfind_dp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_array_reset(a); retval = gt_ovlfind_dp("gaccactagt", 10UL, "agtagttact", 10UL, 0.1, GT_OVLFIND_SPM, 6UL, true, ovlfind_dp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); } gt_array_delete(a); return had_err; } genometools-1.5.1/src/match/rdj-ovlfind-dp.h000066400000000000000000000033571211610345200207270ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_OVLFIND_DP_H #define RDJ_OVLFIND_DP_H #include "core/error_api.h" /* GtError */ #include "match/rdj-contfind-def.h" /* GtContfind */ #include "match/rdj-pairwise.h" /* GtOvlfindMode */ /* Dynamic programming based overlap finder */ /* known issues: - case sensitive (a != A) - no notion of wildcards (i.e. n == n) */ GtContfind gt_ovlfind_dp(const char *u, unsigned long m, const char *v /* use NULL for self-comparison of u */, unsigned long n, double max_error, GtOvlfindMode mode, unsigned long min_length, bool find_submaximal, void (*smpproc) (unsigned long /* length on u */, unsigned long /* length on v */, unsigned long /* unit edit distance */, bool /* true if suffix comes from u, false if suffix comes from v */, void* /* procdata */), void* smpprocdata); int gt_ovlfind_dp_unit_test(GtError *err); #endif genometools-1.5.1/src/match/rdj-ovlfind-gusfield.c000066400000000000000000000277341211610345200221260ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/arraydef.h" #include "core/assert_api.h" #include "match/esa-seqread.h" #include "core/encseq.h" #include "core/progressbar.h" #include "core/ma.h" #include "core/unused_api.h" #include "core/intbits.h" #include "match/esa-splititv.h" #include "match/rdj-revcompl-def.h" #include "match/rdj-ovlfind-gusfield.h" typedef struct { unsigned long offset, leftbound, rightbound, specials_leftbound; bool visited; } RdjGusfieldIndexBounds; GT_DECLAREARRAYSTRUCT(RdjGusfieldIndexBounds); static inline void maximize_child_offset(RdjGusfieldIndexBounds *child, const Suffixarray *sarr) { unsigned long idx, lcp; child->offset = lcptable_get(sarr, child->leftbound+1); for (idx = child->leftbound+2; idx <= child->rightbound; idx++) { lcp = lcptable_get(sarr, idx); if (lcp < child->offset) { child->offset = lcp; } } } static inline void rdj_gusfield_processleafedge(unsigned long leafnumber, const GtEncseq *encseq, unsigned long nofsequences, GtArrayGtUlong *matchlen_stacks, GtBitsequence *has_match, GtBitsequence *sspbittab, bool find_submaximal, unsigned long firstrevcompl, GtSpmproc proc, void* procdata) { unsigned long prefix_seqnum, suffix_seqnum, corrected_suffix_seqnum; bool suffixseq_direct = true, prefixseq_direct = true; unsigned long *matchlen; unsigned long stack_pos; if (leafnumber == 0 || (bool)GT_ISIBITSET(sspbittab, leafnumber-1)) { prefix_seqnum = gt_encseq_seqnum(encseq, leafnumber); if (firstrevcompl != 0) { GT_READJOINER_CORRECT_REVCOMPL(prefix_seqnum, firstrevcompl, nofsequences, prefixseq_direct); } for (suffix_seqnum = 0; suffix_seqnum < nofsequences; suffix_seqnum++) { if ((bool)GT_ISIBITSET(has_match, suffix_seqnum)) { corrected_suffix_seqnum = suffix_seqnum; if (firstrevcompl != 0) { GT_READJOINER_CORRECT_REVCOMPL(corrected_suffix_seqnum, firstrevcompl, nofsequences, suffixseq_direct); if (!GT_READJOINER_IS_CORRECT_REVCOMPL_CASE(corrected_suffix_seqnum, suffixseq_direct, prefix_seqnum, prefixseq_direct)) continue; } if (!find_submaximal) { matchlen = matchlen_stacks[suffix_seqnum].spaceGtUlong + matchlen_stacks[suffix_seqnum].nextfreeGtUlong - 1; if (suffix_seqnum == prefix_seqnum) { if (*matchlen == gt_encseq_seqlength(encseq, suffix_seqnum)) { /* read overlaps with whole itself */ if (matchlen_stacks[suffix_seqnum].nextfreeGtUlong == 1UL) { /* no other overlap */ continue; } else { matchlen = matchlen_stacks[suffix_seqnum].spaceGtUlong + matchlen_stacks[suffix_seqnum].nextfreeGtUlong - 2; } } } proc(corrected_suffix_seqnum, prefix_seqnum, (unsigned long) *matchlen, suffixseq_direct, prefixseq_direct, procdata); } else /* process whole stack, not only the top */ { for (stack_pos = 0; stack_pos < matchlen_stacks[suffix_seqnum].nextfreeGtUlong; stack_pos++) { matchlen = matchlen_stacks[suffix_seqnum].spaceGtUlong + stack_pos; if (suffix_seqnum == prefix_seqnum) { if (*matchlen == gt_encseq_seqlength(encseq, suffix_seqnum)) /* skip ovl of read with whole itself */ continue; } proc(corrected_suffix_seqnum, prefix_seqnum, (unsigned long) *matchlen, suffixseq_direct, prefixseq_direct, procdata); } } } } } } /* search terminal edges and push/pop offset value on/from spm stacks */ static inline void processspecials(unsigned long specials_leftbound, unsigned long rightbound, unsigned long offset, bool visited, const unsigned long *suftab, const GtEncseq *encseq, unsigned long totallength, unsigned long nofsequences, GtArrayGtUlong *matchlen_stacks, GtBitsequence *has_match, GtBitsequence *sspbittab) { unsigned long pos, leafnumber; unsigned long seqnum; gt_assert(offset>0); for (pos = specials_leftbound; pos <= rightbound; pos++) { leafnumber = suftab[pos]; if ((bool)GT_ISIBITSET(sspbittab, leafnumber + offset)) { seqnum = (leafnumber == totallength) ? nofsequences-1 : gt_encseq_seqnum(encseq,leafnumber); if (!visited) { GT_SETIBIT(has_match, seqnum); GT_STOREINARRAY(&(matchlen_stacks[seqnum]), GtUlong, 1, offset); } else { gt_assert(matchlen_stacks[seqnum].nextfreeGtUlong>0); matchlen_stacks[seqnum].nextfreeGtUlong--; if (matchlen_stacks[seqnum].nextfreeGtUlong == 0) { GT_UNSETIBIT(has_match, seqnum); } } } } } void gt_rdj_gusfield(Sequentialsuffixarrayreader *ssar, unsigned long min_length, bool find_submaximal, bool show_progressbar, unsigned long firstrevcompl, GtSpmproc proc, void* procdata) { /* index */ const Suffixarray *sarr; const GtEncseq *encseq; const unsigned long *suftab; unsigned long nofsequences; GtReadmode readmode; unsigned long totallength; unsigned int numofchars; GtBitsequence *sspbittab; /* splitting */ GtArrayRdjGusfieldIndexBounds stack; GtArrayBoundswithchar bwci; RdjGusfieldIndexBounds parent, child, *parent_stack_ptr; unsigned long seqpos_idx; unsigned long idx; /* stacks for spm determination */ GtArrayGtUlong *matchlen_stacks; GtBitsequence *has_match; /* progressbar */ unsigned long long progress; gt_assert(min_length>0); gt_assert(ssar != NULL); sarr = gt_suffixarraySequentialsuffixarrayreader(ssar); encseq = gt_encseqSequentialsuffixarrayreader(ssar); suftab = gt_suftabSequentialsuffixarrayreader(ssar); nofsequences = gt_encseq_num_of_sequences(encseq); readmode = gt_readmodeSequentialsuffixarrayreader(ssar); totallength = gt_encseq_total_length(encseq); numofchars = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); /* prepare sspbittab */ GT_INITBITTAB(sspbittab, totallength+1); for (idx = 1UL; idx <= nofsequences - 1; idx++) { GT_SETIBIT(sspbittab, gt_encseq_seqstartpos(encseq, idx) - 1); } GT_SETIBIT(sspbittab, totallength); matchlen_stacks = gt_malloc(sizeof *matchlen_stacks * nofsequences); GT_INITBITTAB(has_match, nofsequences); for (idx = 0UL; idx < nofsequences; idx++) { GT_INITARRAY(&(matchlen_stacks[idx]), GtUlong); } if (show_progressbar) { progress = 0ULL; gt_progressbar_start(&progress, (unsigned long long)totallength); } GT_INITARRAY(&stack, RdjGusfieldIndexBounds); /* prepare bwci array */ bwci.spaceBoundswithchar = gt_malloc(sizeof *bwci.spaceBoundswithchar * (numofchars + 1)); bwci.nextfreeBoundswithchar = 0UL; bwci.allocatedBoundswithchar = (unsigned long) (numofchars + 1); /* get rid of compiler warnings */ parent.specials_leftbound = 0UL; child.specials_leftbound = 0UL; /* start at [0,n] */ parent.offset = 0UL; parent.leftbound = 0UL; parent.rightbound = totallength; parent.visited = false; GT_STOREINARRAY(&stack, RdjGusfieldIndexBounds, 1UL, parent); while (stack.nextfreeRdjGusfieldIndexBounds > 0UL) { parent_stack_ptr = stack.spaceRdjGusfieldIndexBounds + stack.nextfreeRdjGusfieldIndexBounds - 1; parent = *parent_stack_ptr; if (parent.visited) { /* search terminal edges and pop spm stacks */ if (parent.specials_leftbound <= parent.rightbound && parent.offset >= min_length) processspecials(parent.specials_leftbound, parent.rightbound, parent.offset, parent.visited, suftab, encseq, totallength, nofsequences, matchlen_stacks, has_match, sspbittab); stack.nextfreeRdjGusfieldIndexBounds--; continue; } parent_stack_ptr->visited = true; /* split interval */ gt_lcpintervalsplitwithoutspecial(&bwci, encseq, readmode, totallength, suftab, parent.offset, parent.leftbound, parent.rightbound); if (bwci.nextfreeBoundswithchar > 0) { parent.specials_leftbound = bwci.spaceBoundswithchar[ bwci.nextfreeBoundswithchar-1].rbound+1; } else { parent.specials_leftbound = parent.leftbound; } parent_stack_ptr->specials_leftbound = parent.specials_leftbound; /* search terminal edges and push on spm stacks */ if (parent.specials_leftbound <= parent.rightbound && parent.offset >= min_length) processspecials(parent.specials_leftbound, parent.rightbound, parent.offset, parent.visited, suftab, encseq, totallength, nofsequences, matchlen_stacks, has_match, sspbittab); for (idx = bwci.nextfreeBoundswithchar; idx > 0; idx--) { child.leftbound = bwci.spaceBoundswithchar[idx-1].lbound; child.rightbound = bwci.spaceBoundswithchar[idx-1].rbound; child.visited = false; if (child.leftbound == child.rightbound) { if (parent.offset >= min_length) rdj_gusfield_processleafedge(suftab[child.leftbound], encseq, nofsequences, matchlen_stacks, has_match, sspbittab, find_submaximal, firstrevcompl, proc, procdata); if (show_progressbar) progress++; } else { maximize_child_offset(&child, sarr); GT_STOREINARRAY(&stack, RdjGusfieldIndexBounds, 1, child); } } for (seqpos_idx = parent.specials_leftbound; seqpos_idx <= parent.rightbound; seqpos_idx++) { if (parent.offset >= min_length) rdj_gusfield_processleafedge(suftab[seqpos_idx], encseq, nofsequences, matchlen_stacks, has_match, sspbittab, find_submaximal, firstrevcompl, proc, procdata); if (show_progressbar) progress++; } } GT_FREEARRAY(&stack, RdjGusfieldIndexBounds); GT_FREEARRAY(&bwci,Boundswithchar); if (show_progressbar) gt_progressbar_stop(); for (idx = 0; idx < nofsequences; idx++) { GT_FREEARRAY(&(matchlen_stacks[idx]), GtUlong); } gt_free(has_match); gt_free(sspbittab); gt_free(matchlen_stacks); } genometools-1.5.1/src/match/rdj-ovlfind-gusfield.h000066400000000000000000000022221211610345200221140ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_OVLFIND_GUSFIELD_H #define RDJ_OVLFIND_GUSFIELD_H #include "match/rdj-spmproc.h" void gt_rdj_gusfield(Sequentialsuffixarrayreader *ssar, unsigned long min_length, bool find_submaximal, bool show_progressbar, unsigned long firstrevcompl, GtSpmproc proc, void* procdata); #endif genometools-1.5.1/src/match/rdj-ovlfind-kmp.c000066400000000000000000000320671211610345200211060ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "core/minmax.h" #include "core/assert_api.h" #include "match/rdj-ovlfind-kmp.h" /* for unit test: */ #include "core/array_api.h" #include "core/ensure.h" gt_kmp_t* gt_kmp_preproc(const char *seq, unsigned long seqlen) { gt_kmp_t* pi; gt_kmp_t k; unsigned long q; pi = gt_malloc(sizeof (gt_kmp_t) * seqlen); pi[0] = 0; k = 0; for (q = 1UL; q < seqlen; q++) { while ((k > 0) && (seq[k] != seq[q])) k = pi[k-1]; if (seq[k] == seq[q]) k++; gt_assert(k < GT_KMP_MAX); pi[q] = k; } return pi; } static inline gt_kmp_t findnextmatch(const char *a, const char *b, unsigned long from, unsigned long to, const gt_kmp_t *pi) { gt_kmp_t q; unsigned long i; q = 0; for (i = from; i <= to; i++) { while ((q > 0) && (a[i] != b[q])) q = pi[q - 1]; if (a[i] == b[q]) q++; } return q; } static inline void spmfind_kmp(const char *a, unsigned long alen, const char *b, unsigned long blen, const gt_kmp_t *pi, unsigned long min_length, bool find_submaximal, bool self_comparison, void(*proc)(unsigned long, bool, void*), bool direction, void* procdata) { gt_kmp_t q; unsigned long max_matchlen; max_matchlen = MIN(alen, blen); if (self_comparison) max_matchlen -= 1; q = findnextmatch(a, b, alen - max_matchlen, alen - 1, pi); if ((unsigned long)q >= min_length) proc((unsigned long)q, direction, procdata); if (find_submaximal) while (q > 0) { q = findnextmatch(a, b, alen - q + 1, alen - 1, pi); if ((unsigned long)q >= min_length) proc((unsigned long)q, direction, procdata); } } static inline bool contfind_kmp(const char *a, unsigned long alen, const gt_kmp_t *pi, const char *b, unsigned long blen) { gt_kmp_t q; unsigned long i; q = 0; gt_assert(alen < blen); for (i = 0; i < blen; i++) { while ((q > 0) && (a[q] != b[i])) q = pi[q - 1]; if (a[q] == b[i]) q++; if ((unsigned long)q == alen) return true; } return false; } GtContfind gt_ovlfind_kmp(const char *u, unsigned long u_length, const gt_kmp_t *u_pi, const char *v, unsigned long v_length, const gt_kmp_t *v_pi, GtOvlfindMode m, unsigned long min_length, bool find_nonmaximal, void(*spmproc) (unsigned long /* overlap length */, bool /* true if suffix of u == prefix of v, false if prefix of u == suffix of v */, void* /* spmprocdata */), void* spmprocdata) { GtContfind retval = GT_CONTFIND_OFF; bool self_comparison; gt_assert(u != NULL); gt_assert(u_length > 0); gt_assert(u_pi != NULL); self_comparison = (v == NULL); gt_assert(self_comparison || v_length > 0); gt_assert(self_comparison || v_pi != NULL); gt_assert(!self_comparison || m == GT_OVLFIND_SPM || m == GT_OVLFIND_ALL); if (self_comparison && m == GT_OVLFIND_ALL) retval = GT_CONTFIND_EQ; if (m != GT_OVLFIND_SPM && !self_comparison) { if (u_length == v_length) retval = memcmp(u, v, (size_t)u_length) == 0 ? GT_CONTFIND_EQ : GT_CONTFIND_NO; else if (u_length < v_length) retval = contfind_kmp(u, u_length, u_pi, v, v_length) ? GT_CONTFIND_U : GT_CONTFIND_NO; else /* u_length > v_length */ retval = contfind_kmp(v, v_length, v_pi, u, u_length) ? GT_CONTFIND_V : GT_CONTFIND_NO; if (m == GT_OVLFIND_PROPER_SPM && retval != GT_CONTFIND_NO) return retval; } if (m != GT_OVLFIND_CNT) { if (self_comparison) { spmfind_kmp(u, u_length, u, u_length, u_pi, min_length, find_nonmaximal, self_comparison, spmproc, true, spmprocdata); } else { spmfind_kmp(u, u_length, v, v_length, v_pi, min_length, find_nonmaximal, self_comparison, spmproc, true, spmprocdata); spmfind_kmp(v, v_length, u, u_length, u_pi, min_length, find_nonmaximal, self_comparison, spmproc, false, spmprocdata); } } return retval; } /*-------------------------- UNIT TEST --------------------------*/ int gt_kmp_preproc_unit_test(GtError *err) { int had_err = 0; int i; gt_kmp_t *pi, expected_pi[10] = {(gt_kmp_t)0, (gt_kmp_t)0, (gt_kmp_t)1, (gt_kmp_t)2, (gt_kmp_t)3, (gt_kmp_t)4, (gt_kmp_t)5, (gt_kmp_t)6, (gt_kmp_t)0, (gt_kmp_t)1}; pi = gt_kmp_preproc("ababababca", 10UL); for (i = 0; i < 10; i++) gt_ensure(had_err, pi[i] == expected_pi[i]); gt_free(pi); return had_err; } struct GtOvlfindKmpResult { bool u_suffix; unsigned long length; }; static void ovlfind_kmp_test_save(unsigned long length, bool u_suffix, void *a) { struct GtOvlfindKmpResult r = {u_suffix, length}; gt_array_add((GtArray*)a,r); } #define GT_OVLFIND_KMP_EXPECT_RESULT(N,U_SUF,LEN) \ if (!had_err) r = gt_array_get(a, (N)); \ gt_ensure(had_err, r->u_suffix == (U_SUF)); \ gt_ensure(had_err, r->length == (LEN)) int gt_ovlfind_kmp_unit_test(GtError *err) { int had_err = 0; GtArray *a; struct GtOvlfindKmpResult *r; GtContfind retval; gt_kmp_t *u_pi, *v_pi; /*@i1@*/ gt_error_check(err); had_err = gt_kmp_preproc_unit_test(err); if (had_err != 0) return had_err; a = gt_array_new(sizeof (struct GtOvlfindKmpResult)); /* u suffix == v prefix */ if (!had_err) { gt_array_reset(a); u_pi = gt_kmp_preproc("aacgcacctg", 10UL); v_pi = gt_kmp_preproc("acctgatttc", 10UL); retval = gt_ovlfind_kmp("aacgcacctg", 10UL, u_pi, "acctgatttc", 10UL, v_pi, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_NO); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_KMP_EXPECT_RESULT(0UL, true, 5UL); gt_free(u_pi); gt_free(v_pi); } /* v suffix == u prefix */ if (!had_err) { gt_array_reset(a); u_pi = gt_kmp_preproc("atccgtgacgtg", 12UL); v_pi = gt_kmp_preproc("aagaagaatccg", 12UL); retval = gt_ovlfind_kmp("atccgtgacgtg", 12UL, u_pi, "aagaagaatccg", 12UL, v_pi, GT_OVLFIND_ALL, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_NO); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_KMP_EXPECT_RESULT(0UL, false, 5UL); gt_free(u_pi); gt_free(v_pi); } /* no overlap */ if (!had_err) { gt_array_reset(a); u_pi = gt_kmp_preproc("aac", 3UL); v_pi = gt_kmp_preproc("tgc", 3UL); retval = gt_ovlfind_kmp("aac", 3UL, u_pi, "tgc", 3UL, v_pi, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_NO); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_free(u_pi); gt_free(v_pi); } /* u suffix of v */ if (!had_err) { gt_array_reset(a); u_pi = gt_kmp_preproc("acagc", 5UL); v_pi = gt_kmp_preproc("gtacagc", 7UL); retval = gt_ovlfind_kmp("acagc", 5UL, u_pi, "gtacagc", 7UL, v_pi, GT_OVLFIND_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); GT_OVLFIND_KMP_EXPECT_RESULT(0UL, false, 5UL); gt_array_reset(a); retval = gt_ovlfind_kmp("acagc", 5UL, u_pi, "gtacagc", 7UL, v_pi, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_U); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_array_reset(a); retval = gt_ovlfind_kmp("acagc", 5UL, u_pi, "gtacagc", 7UL, v_pi, GT_OVLFIND_CNT, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_ensure(had_err, retval == GT_CONTFIND_U); gt_array_reset(a); retval = gt_ovlfind_kmp("acagc", 5UL, u_pi, "gtacagc", 7UL, v_pi, GT_OVLFIND_ALL, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); gt_ensure(had_err, retval == GT_CONTFIND_U); GT_OVLFIND_KMP_EXPECT_RESULT(0UL, false, 5UL); gt_free(u_pi); gt_free(v_pi); } /* v suffix of u */ if (!had_err) { gt_array_reset(a); u_pi = gt_kmp_preproc("gtacagc", 7UL); v_pi = gt_kmp_preproc("acagc", 5UL); retval = gt_ovlfind_kmp("gtacagc", 7UL, u_pi, "acagc", 5UL, v_pi, GT_OVLFIND_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_KMP_EXPECT_RESULT(0UL, true, 5UL); gt_array_reset(a); retval = gt_ovlfind_kmp("gtacagc", 7UL, u_pi, "acagc", 5UL, v_pi, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_V); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_free(u_pi); gt_free(v_pi); } /* u prefix of v */ if (!had_err) { gt_array_reset(a); u_pi = gt_kmp_preproc("ctat", 4UL); v_pi = gt_kmp_preproc("ctatacagg", 9UL); retval = gt_ovlfind_kmp("ctat", 4UL, u_pi, "ctatacagg", 9UL, v_pi, GT_OVLFIND_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_KMP_EXPECT_RESULT(0UL, true, 4UL); gt_array_reset(a); retval = gt_ovlfind_kmp("ctat", 4UL, u_pi, "ctatacagg", 9UL, v_pi, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_U); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_free(u_pi); gt_free(v_pi); } /* v prefix of u */ if (!had_err) { gt_array_reset(a); u_pi = gt_kmp_preproc("ctatacagg", 9UL); v_pi = gt_kmp_preproc("ctat", 4UL); retval = gt_ovlfind_kmp("ctatacagg", 9UL, u_pi, "ctat", 4UL, v_pi, GT_OVLFIND_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_ensure(had_err, gt_array_size(a) == 1UL); GT_OVLFIND_KMP_EXPECT_RESULT(0UL, false, 4UL); gt_array_reset(a); retval = gt_ovlfind_kmp("ctatacagg", 9UL, u_pi, "ctat", 4UL, v_pi, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_V); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_free(u_pi); gt_free(v_pi); } /* identical sequences */ if (!had_err) { gt_array_reset(a); u_pi = gt_kmp_preproc("acagc", 5UL); retval = gt_ovlfind_kmp("acagc", 5UL, u_pi, "acagc", 5UL, u_pi, GT_OVLFIND_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_ensure(had_err, gt_array_size(a) == 2UL); GT_OVLFIND_KMP_EXPECT_RESULT(0UL, true, 5UL); GT_OVLFIND_KMP_EXPECT_RESULT(1UL, false, 5UL); gt_array_reset(a); retval = gt_ovlfind_kmp("acagc", 5UL, u_pi, "acagc", 5UL, u_pi, GT_OVLFIND_PROPER_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_EQ); gt_ensure(had_err, gt_array_size(a) == 0UL); gt_free(u_pi); } /* find_nonmaximal */ if (!had_err) { gt_array_reset(a); u_pi = gt_kmp_preproc("aacagtagtagt", 12UL); v_pi = gt_kmp_preproc("agtagtagttaa", 12UL); retval = gt_ovlfind_kmp("aacagtagtagt", 12UL, u_pi, "agtagtagttaa", 12UL, v_pi, GT_OVLFIND_SPM, 1UL, false, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_ensure(had_err, gt_array_size(a) == 2UL); GT_OVLFIND_KMP_EXPECT_RESULT(0UL, true, 9UL); GT_OVLFIND_KMP_EXPECT_RESULT(1UL, false, 2UL); gt_array_reset(a); retval = gt_ovlfind_kmp("aacagtagtagt", 12UL, u_pi, "agtagtagttaa", 12UL, v_pi, GT_OVLFIND_SPM, 1UL, true, ovlfind_kmp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 5UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_free(u_pi); gt_free(v_pi); } /* min_length */ if (!had_err) { gt_array_reset(a); u_pi = gt_kmp_preproc("aggaccagtagt", 12UL); v_pi = gt_kmp_preproc("agtagttactac", 12UL); retval = gt_ovlfind_kmp("aggaccagtagt", 12UL, u_pi, "agtagttactac", 12UL, v_pi, GT_OVLFIND_SPM, 1UL, true, ovlfind_kmp_test_save, a); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_ensure(had_err, gt_array_size(a) == 2UL); gt_array_reset(a); retval = gt_ovlfind_kmp("aggaccagtagt", 12UL, u_pi, "agtagttactac", 12UL, v_pi, GT_OVLFIND_SPM, 4UL, true, ovlfind_kmp_test_save, a); gt_ensure(had_err, gt_array_size(a) == 1UL); gt_ensure(had_err, retval == GT_CONTFIND_OFF); gt_free(u_pi); gt_free(v_pi); } gt_array_delete(a); return had_err; } genometools-1.5.1/src/match/rdj-ovlfind-kmp.h000066400000000000000000000042151211610345200211050ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_OVLFIND_KMP_H #define RDJ_OVLFIND_KMP_H #include "core/error_api.h" /* GtError */ #include "match/rdj-contfind-def.h" /* GtContfind */ #include "match/rdj-pairwise.h" /* GtOvlfindMode */ /* KMP overlap finder */ /* - case sensitive (a != A) - no notion of wildcards (i.e. n == n) */ #include #include "core/error.h" typedef uint16_t gt_kmp_t; #define GT_KMP_MAX UINT16_MAX gt_kmp_t* gt_kmp_preproc(const char *seq, unsigned long seqlen); GtContfind gt_ovlfind_kmp(const char *u, unsigned long u_length, const gt_kmp_t *u_pi, const char *v /* use NULL for u vs. u */, unsigned long v_length, const gt_kmp_t *v_pi, GtOvlfindMode m, unsigned long min_length, bool find_nonmaximal, void(*spmproc) (unsigned long /* overlap length */, bool /* true if suffix of u == prefix of v false if prefix of u == suffix of v */, void* /* spmprocdata */), void* spmprocdata); int gt_kmp_preproc_unit_test(GtError *err); int gt_ovlfind_kmp_unit_test(GtError *err); #endif genometools-1.5.1/src/match/rdj-pairwise.c000066400000000000000000000256531211610345200205060ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/encseq.h" #include "core/progressbar.h" #include "core/unused_api.h" #include "match/rdj-ovlfind-bf.h" #include "match/rdj-ovlfind-dp.h" #include "match/rdj-ovlfind-kmp.h" #include "match/rdj-ovlfind-kmp.h" #include "match/rdj-spmlist.h" #include "match/rdj-pairwise.h" /* unit test: */ #include "match/rdj-ensure-output.h" #include "core/fasta.h" struct Read { char* seq; unsigned long len; unsigned long seqnum; bool direct; gt_kmp_t *pi; }; struct Data { GtSpmproc proc; GtSpmprocA proc_a; void* procdata; struct Read *u, *v; GtOvlfindMode mode; }; #define GT_RDJ_PAIRWISE_INIT_STRUCT_DATA(DATA, PROC, PROC_A, PROCDATA, U, V, \ MODE) \ {\ (DATA).proc = (PROC);\ (DATA).proc_a = (PROC_A);\ (DATA).procdata = (PROCDATA);\ (DATA).u = (U);\ (DATA).v = (V);\ } static void call_spmproc(unsigned long length, bool suffix_of_u, void *data) { struct Data *d = data; if (suffix_of_u) d->proc(d->u->seqnum, d->v->seqnum, length, d->u->direct, d->v->direct, d->procdata); else d->proc(d->v->seqnum, d->u->seqnum, length, d->v->direct, d->u->direct, d->procdata); } static inline GtContfind find_exact_overlaps(struct Data *d, bool use_kmp, unsigned long min_length, bool find_nonmaximal) { GtContfind retval; if (d->u->seqnum == d->v->seqnum && d->v->direct) { if (!(d->mode == GT_OVLFIND_SPM || d->mode == GT_OVLFIND_ALL)) return GT_CONTFIND_EQ; if (use_kmp) retval = gt_ovlfind_kmp(d->u->seq, d->u->len, d->u->pi, NULL, 0, NULL, d->mode, min_length, find_nonmaximal, call_spmproc, d); else retval = gt_ovlfind_bf(d->u->seq, d->u->len, NULL, 0, d->mode, min_length, find_nonmaximal, call_spmproc, d); } else { if (use_kmp) retval = gt_ovlfind_kmp(d->u->seq, d->u->len, d->u->pi, d->v->seq, d->v->len, d->v->pi, d->mode, min_length, find_nonmaximal, call_spmproc, d); else retval = gt_ovlfind_bf(d->u->seq, d->u->len, d->v->seq, d->v->len, d->mode, min_length, find_nonmaximal, call_spmproc, d); } return retval; } static void call_spmproc_a(unsigned long length_on_u, unsigned long length_on_v, unsigned long unit_edist, bool suffix_of_u, void *data) { struct Data *d = data; if (suffix_of_u) d->proc_a(d->u->seqnum, d->v->seqnum, length_on_u, length_on_v, unit_edist, d->u->direct, d->v->direct, d->procdata); else d->proc_a(d->v->seqnum, d->u->seqnum, length_on_v, length_on_u, unit_edist, d->v->direct, d->u->direct, d->procdata); } static inline GtContfind find_approx_overlaps(struct Data *d, double max_error, unsigned long min_length, bool find_nonmaximal) { GtContfind retval; if (d->u->seqnum == d->v->seqnum && d->v->direct) { if (!(d->mode == GT_OVLFIND_SPM || d->mode == GT_OVLFIND_ALL)) return GT_CONTFIND_EQ; retval = gt_ovlfind_dp(d->u->seq, d->u->len, NULL, 0, max_error, d->mode, min_length, find_nonmaximal, call_spmproc_a, d); } else { retval = gt_ovlfind_dp(d->u->seq, d->u->len, d->v->seq, d->v->len, max_error, d->mode, min_length, find_nonmaximal, call_spmproc_a, d); } return retval; } static gt_kmp_t** prepare_kmp_values(const GtEncseq *encseq, unsigned long n) { unsigned long i, len, startpos; char *seq; gt_kmp_t **kmp_values; kmp_values = gt_malloc(sizeof (gt_kmp_t*) * n); gt_assert(encseq != NULL); for (i = 0; i < n; i++) { len = gt_encseq_seqlength(encseq, i); seq = gt_malloc(sizeof (char) * (len + 1)); startpos = gt_encseq_seqstartpos(encseq, i); gt_encseq_extract_decoded(encseq, seq, startpos, startpos + len - 1); seq[len] = '\0'; kmp_values[i] = gt_kmp_preproc(seq, len); gt_free(seq); } return kmp_values; } static void free_kmp_values(gt_kmp_t** kmp_values, unsigned long n) { unsigned long i; gt_assert(kmp_values != NULL); for (i = 0; i < n; i++) gt_free(kmp_values[i]); gt_free(kmp_values); } static inline void mark_contained(GtContfind c, unsigned long u_seqnum, unsigned long v_seqnum, GtBitsequence *cntreads) { gt_assert(cntreads != NULL); switch (c) { case GT_CONTFIND_U: GT_SETIBIT(cntreads, u_seqnum); break; case GT_CONTFIND_EQ: /* convention: skip one with higher seqnum (which is v) */ if (v_seqnum != u_seqnum) GT_SETIBIT(cntreads, v_seqnum); break; case GT_CONTFIND_V: GT_SETIBIT(cntreads, v_seqnum); break; default: /* nothing to do */ break; } } static inline void rdj_pairwise_generic(bool use_dp, GtOvlfindMode m, GtEncseq *encseq, bool revcompl, bool show_progressbar, bool use_kmp, double max_error, unsigned long min_length, bool find_nonmaximal, GtSpmproc proc, GtSpmprocA proc_a, void* procdata, bool cntfilter, GtBitsequence *cntreads_in, GtBitsequence **cntreads_out, unsigned long *nofreads) { GtContfind containment_status; GtBitsequence *cntreads = NULL; unsigned long long progress = 0; unsigned long i, j, startpos, v_seqnum, nofsequences, n; struct Read u, v; struct Data d; gt_kmp_t** kmp_values = NULL; GT_RDJ_PAIRWISE_INIT_STRUCT_DATA(d, proc, proc_a, procdata, &u, &v, 0); gt_assert(encseq != NULL); d.mode = m; if ((m == GT_OVLFIND_ALL) && cntfilter) d.mode = GT_OVLFIND_PROPER_SPM; n = gt_encseq_num_of_sequences(encseq); if (use_kmp) kmp_values = prepare_kmp_values(encseq, n); nofsequences = n; if (revcompl) n = n >> 1; if (cntreads_in != NULL) cntreads = cntreads_in; else if (m != GT_OVLFIND_SPM) GT_INITBITTAB(cntreads, n); if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)n * ((unsigned long long)n - 1ULL) / 2ULL); for (i = 0; i < n; i++) { u.seqnum = i; u.direct = true; u.len = gt_encseq_seqlength(encseq, i); u.seq = gt_malloc(sizeof (char) * (u.len + 1)); startpos = gt_encseq_seqstartpos(encseq, i); gt_encseq_extract_decoded(encseq, u.seq, startpos, startpos + u.len - 1); u.seq[u.len] = '\0'; if (use_kmp) { gt_assert(kmp_values != NULL); u.pi = kmp_values[i]; } for (j = i; j < n; j++) { if (cntfilter) { gt_assert(cntreads != NULL); if ((bool)GT_ISIBITSET(cntreads, i)) break; if ((bool)GT_ISIBITSET(cntreads, j)) continue; } v.seqnum = j; /* find overlaps using direct v */ v.direct = true; v.len = gt_encseq_seqlength(encseq, j); v.seq = gt_malloc(sizeof (char) * (v.len + 1)); startpos = gt_encseq_seqstartpos(encseq, j); gt_encseq_extract_decoded(encseq, v.seq, startpos, startpos + v.len - 1); v.seq[v.len] = '\0'; if (use_kmp) { gt_assert(kmp_values != NULL); v.pi = kmp_values[j]; } containment_status = use_dp ? find_approx_overlaps(&d, max_error, min_length, find_nonmaximal) : find_exact_overlaps(&d, use_kmp, min_length, find_nonmaximal); if (m != GT_OVLFIND_SPM) mark_contained(containment_status, u.seqnum, v.seqnum, cntreads); /* find overlaps using reverse complement of v */ if (revcompl) { v_seqnum = nofsequences - j - 1; v.direct = false; gt_assert(gt_encseq_seqlength(encseq, j) == gt_encseq_seqlength(encseq, v_seqnum)); startpos = gt_encseq_seqstartpos(encseq, v_seqnum); gt_encseq_extract_decoded(encseq, v.seq, startpos, startpos + v.len - 1); if (use_kmp) { gt_assert(kmp_values != NULL); v.pi = kmp_values[v_seqnum]; } containment_status = use_dp ? find_approx_overlaps(&d, max_error, min_length, find_nonmaximal) : find_exact_overlaps(&d, use_kmp, min_length, find_nonmaximal); if (m != GT_OVLFIND_SPM) mark_contained(containment_status, u.seqnum, v.seqnum, cntreads); } gt_free(v.seq); progress++; } gt_free(u.seq); } if (cntreads_out != NULL) *cntreads_out = cntreads; else if (cntreads_in == NULL) gt_free(cntreads); if (nofreads != NULL) *nofreads = n; if (use_kmp) free_kmp_values(kmp_values, revcompl ? n << 1 : n); if (show_progressbar) gt_progressbar_stop(); } #ifndef NDEBUG static inline bool rdj_pairwise_check_arguments(GtOvlfindMode m, void *proc, void *procdata, GtBitsequence *cntreads_in, GtBitsequence **cntreads_out, bool cntfilter) { gt_assert(m == GT_OVLFIND_CNT || m == GT_OVLFIND_ALL || m == GT_OVLFIND_SPM); if (proc == NULL) { gt_assert(m == GT_OVLFIND_CNT); gt_assert(procdata == NULL); } else gt_assert(m == GT_OVLFIND_SPM || m == GT_OVLFIND_ALL); if (cntfilter || (cntreads_out != NULL)) gt_assert((m == GT_OVLFIND_CNT) || (m == GT_OVLFIND_ALL) || (cntreads_in != NULL)); return true; /* allow to wrap in gt_assert() */ } #endif void gt_rdj_pairwise_exact(GtOvlfindMode m, GtEncseq *encseq, bool revcompl, bool show_progressbar, bool use_kmp, unsigned long min_length, bool find_nonmaximal, GtSpmproc proc, void *procdata, bool cntfilter, GtBitsequence *cntreads_in, GtBitsequence **cntreads_out, unsigned long *nofreads) { gt_assert(rdj_pairwise_check_arguments(m, proc, procdata, cntreads_in, cntreads_out, cntfilter)); rdj_pairwise_generic(false, m, encseq, revcompl, show_progressbar, use_kmp, 0.0, min_length, find_nonmaximal, proc, NULL, procdata, cntfilter, cntreads_in, cntreads_out, nofreads); } void gt_rdj_pairwise_approx(GtOvlfindMode m, GtEncseq *encseq, bool revcompl, bool show_progressbar, double max_error, unsigned long min_length, bool find_nonmaximal, GtSpmprocA proc, void* procdata, bool cntfilter, GtBitsequence *cntreads_in, GtBitsequence **cntreads_out, unsigned long *nofreads) { gt_assert(rdj_pairwise_check_arguments(m, proc, procdata, cntreads_in, cntreads_out, cntfilter)); rdj_pairwise_generic(true, m, encseq, revcompl, show_progressbar, false, max_error, min_length, find_nonmaximal, NULL, proc, procdata, cntfilter, cntreads_in, cntreads_out, nofreads); } genometools-1.5.1/src/match/rdj-pairwise.h000066400000000000000000000103451211610345200205030ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_PAIRWISE_H #define RDJ_PAIRWISE_H #include "match/rdj-spmproc.h" /* GtSpmproc and GtSpmprocA */ #include "core/intbits.h" /* GtBitsequence */ #include "core/encseq.h" /* GtEncseq */ typedef enum { GT_OVLFIND_SPM, /* containments are not determined; suf-pref matches are determined, including the one that are also containments */ GT_OVLFIND_CNT, /* containments are determined; suf-pref matches are not determined */ GT_OVLFIND_ALL, /* containments are determined; suf-pref matches are detemined, including the one that are also containments */ GT_OVLFIND_PROPER_SPM /* containments are determined; suf-pref matches are determined only if there is no containment */ } GtOvlfindMode; /* (1) general arguments m: mode, see GtOvlfindMode definition encseq: pointer to a GtEncseq revcompl: if true, the second half of the fasta file must contain the reverse complements of the sequences in the first half show_progressbar: if true, a progressbar is displayed use_kmp: [gt_rdj_pairwise_exact] if true, the KMP-based algorithm is used, if false, the brute force algorithm is used max_error: [gt_rdj_pairwise_approx] the maximal error rate allowed for both suffix-prefix matches and containments (2) suffix-prefix matches related min_length: only suffix-prefix matches over this length are considered find_nonmaximal: if true, suffix-prefix matches shorter than the maximal one are also considered proc: matches are processed using this function; it must be set to NULL in gt_rdj_CNT mode procdata: generic data pointer passed to proc; it must be set to NULL in gt_rdj_CNT mode (3) containment related cntfilter: if true, contained reads are eliminated from the search for further suffix-prefix matches once identified; it must be set to false in gt_rdj_SPM mode cntreads_in: if not NULL, this will be used as the contained reads list, i.e. any bit already set will prevent matches involving the corresponding read; it must be NULL in gt_rdj_SPM mode; the list will never be deleted cntreads_out: if not NULL, the address of the contained reads list will be written here; it must be NULL in gt_rdj_SPM mode; if this and cntreads_in are both NULL, the list is deleted nofreads: if not NULL, the number of direct reads is written here (which is also the number of elements of the cntreads list) */ void gt_rdj_pairwise_exact(GtOvlfindMode m, GtEncseq *encseq, bool revcompl, bool show_progressbar, bool use_kmp, unsigned long min_length, bool find_nonmaximal, GtSpmproc proc, void *procdata, bool cntfilter, GtBitsequence *cntreads_in, GtBitsequence **cntreads_out, unsigned long *nofreads); void gt_rdj_pairwise_approx(GtOvlfindMode m, GtEncseq *encseq, bool revcompl, bool show_progressbar, double max_error, unsigned long min_length, bool find_nonmaximal, GtSpmprocA proc, void* procdata, bool cntfilter, GtBitsequence *cntreads_in, GtBitsequence **cntreads_out, unsigned long *nofreads); #endif genometools-1.5.1/src/match/rdj-revcompl-def.h000066400000000000000000000037371211610345200212520ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_REVCOMPL_DEF_H #define RDJ_REVCOMPL_DEF_H /* correct seqnum and seqdirect variables if in revcompl range */ #define GT_READJOINER_CORRECT_REVCOMPL(SEQNUM,FIRSTREVCOMPL,NOFSEQ,SEQDIRECT)\ if ((FIRSTREVCOMPL) > 0 && (SEQNUM) >= (FIRSTREVCOMPL))\ {\ gt_assert((SEQNUM) <= ((NOFSEQ)-1));\ (SEQNUM) = ((NOFSEQ)-1)-(SEQNUM);\ (SEQDIRECT) = false;\ }\ else (SEQDIRECT) = true #define GT_READJOINER_READNUM(SEQNUM,FIRSTREVCOMPL,NOFSEQ)\ (((FIRSTREVCOMPL) > 0 && (SEQNUM) >= (FIRSTREVCOMPL)) \ ? (((NOFSEQ)-1)-(SEQNUM)) : (SEQNUM)) /* in revcompl mode the data would be output twice without this; e.g. 2 revcompl have same overlap that 2 direct sequences; convention: either are both direct, or the one with higher seqnum is allowed to be revcompl; this macro allows one to skip other cases */ #define GT_READJOINER_IS_CORRECT_REVCOMPL_CASE(SN,SD,PN,PD)\ (\ ((SD) && (PD)) ||\ ((SN) == (PN) && !(!(SD) && !(PD))) ||\ ((SD) && !(PD) && (PN) > (SN)) ||\ (!(SD) && (PD) && (PN) < (SN))\ ) #endif genometools-1.5.1/src/match/rdj-spmfind.c000066400000000000000000000673541211610345200203270ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/arraydef.h" #include "core/disc_distri_api.h" #include "core/fa.h" #include "core/intbits.h" #include "core/log_api.h" #include "core/spacecalc.h" #include "core/types_api.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "match/esa-bottomup.h" #include "match/rdj-cntlist.h" #include "match/rdj-filesuf-def.h" #include "match/rdj-revcompl-def.h" #include "match/rdj-spmproc.h" #include "match/rdj-spmlist.h" #include "match/sfx-bltrie.h" #include "match/rdj-spmfind.h" #define GT_SPMFIND_LSET_ALLOC_INC (1UL << 10) #define GT_SPMFIND_WSET_ALLOC_INC (1UL << 10) #define GT_SPMFIND_BLTRIE_ALLOC (1U << 6) typedef struct { unsigned long seqnum; GtBlindtrie *blindtrie; } WholereadInfo; typedef struct { unsigned long w_left; } GtBUinfo_spmeq; typedef GtBUinfo_spmeq GtBUinfo_spmvar; struct GtBUstate_spm { void *stack; GtLogger *default_logger; GtLogger *verbose_logger; GtError *err; /* algorithm parameters: */ unsigned long minmatchlength; bool elimtrans; /* sequence */ const char *indexname; const GtEncseq *encseq; unsigned long totallength; unsigned long read_length; unsigned long nofreads; unsigned long first_revcompl; /* terminal edges set */ unsigned long *l_set; unsigned long l_nextfree; unsigned long l_allocated; /* whole-read leaves set */ WholereadInfo *w_set; unsigned long w_nextfree; unsigned long w_allocated; unsigned long w_offset; unsigned long w_count; unsigned long w_maxsize; bool w_overflow; /* function called when results are found, and its data pointer: */ GtSpmproc proc; void* procdata; unsigned long nofvalidspm; unsigned long nof_transitive_withrc; unsigned long nof_transitive_other; /* varlen contained reads detection */ unsigned long shortest; FILE *cntfile; unsigned long nof_contained; unsigned long spaceforbucketprocessing; unsigned int threadnum; #ifdef GT_READJOINER_STATISTICS /* statistics */ unsigned long nof_terminals; unsigned long nof_combinable_terminals; /* where w_set is not empty */ unsigned long nof_t_w_combinations; unsigned long nof_wrong_direction; unsigned long nof_w_set_realloc; unsigned long nof_l_set_realloc; unsigned long nof_subtrees; /* with w_set not empty */ unsigned long nof_terminals_in_subtree; unsigned long max_nof_terminals_in_subtree; unsigned long nof_overlaps_in_subtree; unsigned long max_nof_overlaps_in_subtree; unsigned long max_w_nextfree; unsigned long max_l_nextfree; unsigned long max_blindtrie_size; unsigned long max_total_blindtrie_size; GtDiscDistri *w_per_terminal; unsigned long initial_l_allocated; unsigned long initial_w_allocated; #endif }; typedef struct GtBUstate_spm GtBUstate_spm; static void initwset_spm(GtBUstate_spm *state) { unsigned long i; state->w_allocated = GT_SPMFIND_WSET_ALLOC_INC; state->w_set = gt_malloc(sizeof (WholereadInfo) * (state->w_allocated)); state->w_nextfree = 0; for (i = 0; i < state->w_allocated; i++) (state->w_set + i)->blindtrie = NULL; } static inline void expandwset_spm(GtBUstate_spm *state) { unsigned long prevsize, i; prevsize = state->w_allocated; state->w_allocated += GT_SPMFIND_WSET_ALLOC_INC; state->w_set = gt_realloc(state->w_set, sizeof (WholereadInfo) * state->w_allocated); for (i = prevsize; i < state->w_allocated; i++) (state->w_set + i)->blindtrie = NULL; gt_assert(state->w_nextfree < state->w_allocated); #ifdef GT_READJOINER_STATISTICS (state->nof_w_set_realloc)++; #endif } static inline void appendtowset_spm(unsigned long seqnum, GtBUstate_spm *state) { WholereadInfo *w; state->w_count++; if (state->w_count <= state->w_offset) return; if (state->w_count > state->w_offset + state->w_maxsize) { state->w_overflow = true; return; } /* realloc if necessary */ if (state->w_nextfree == state->w_allocated) expandwset_spm(state); /* add element */ #ifdef GT_READJOINER_DEBUG gt_log_log("-- add to wset: %lu", seqnum); gt_log_log("offset: %lu", state->w_offset); #endif w = state->w_set + state->w_nextfree; state->w_nextfree++; w->seqnum = seqnum; /* get a new blind trie or recycle old one */ if (w->blindtrie == NULL) w->blindtrie = gt_blindtrie_new(NULL, 0, GT_SPMFIND_BLTRIE_ALLOC, state->encseq, false, NULL, NULL, GT_READMODE_REVERSE); else gt_blindtrie_reset(w->blindtrie); #ifdef GT_READJOINER_STATISTICS /* statistics */ if (state->w_nextfree > state->max_w_nextfree) state->max_w_nextfree = state->w_nextfree; #endif } static inline void printcurrentspace_spm(const char *label) { unsigned long m, f; if (gt_ma_bookkeeping_enabled()) { m = gt_ma_get_space_current(); f = gt_fa_get_space_current(); gt_log_log("used space %s: %.2f MB (ma: %.2f MB; fa: %.2f MB)", label, GT_MEGABYTES(m + f), GT_MEGABYTES(m), GT_MEGABYTES(f)); } } static inline void resetwsetbt_spm(GtBUstate_spm *state) { unsigned long i, bsize_sum = 0, nofbltries = 0; GtBlindtrie *b; printcurrentspace_spm("before resizing"); for (i = 0; i < state->w_allocated; i++) { b = (state->w_set + i)->blindtrie; if (b != NULL) { bsize_sum += gt_blindtrie_current_size(b); gt_blindtrie_resize(b, 1U); nofbltries++; } else break; } gt_log_log("current number of blindtries: %lu", nofbltries); gt_log_log("total size of the blindtries: %.2f MB", GT_MEGABYTES(bsize_sum)); printcurrentspace_spm("after resizing"); } static void deletewset_spm(WholereadInfo *w_set, unsigned long w_allocated) { unsigned long i; for (i = 0; i < w_allocated; i++) gt_blindtrie_delete(w_set[i].blindtrie); gt_free(w_set); } static void initlset_spm(GtBUstate_spmeq *state) { state->l_allocated = GT_SPMFIND_LSET_ALLOC_INC; state->l_set = gt_malloc(sizeof (state->l_set) * (state->l_allocated)); state->l_nextfree = 0; } static inline void expandlset_spm(GtBUstate_spm *state) { state->l_allocated += GT_SPMFIND_LSET_ALLOC_INC; state->l_set = gt_realloc(state->l_set, sizeof (state->l_set) * state->l_allocated); gt_assert(state->l_nextfree < state->l_allocated); #ifdef GT_READJOINER_STATISTICS (state->nof_l_set_realloc)++; #endif } static inline void appendtolset_spm(unsigned long seqnum, GtBUstate_spm *state) { /* realloc if necessary */ if (state->l_nextfree == state->l_allocated) expandlset_spm(state); /* add element */ state->l_set[state->l_nextfree] = seqnum; state->l_nextfree++; #ifdef GT_READJOINER_STATISTICS (state->nof_terminals)++; (state->nof_terminals_in_subtree)++; if (state->l_nextfree > state->max_l_nextfree) state->max_l_nextfree = state->l_nextfree; #endif } static void initBUinfo_spmeq(GT_UNUSED GtBUinfo_spmeq *info, GT_UNUSED GtBUstate_spmeq *state) { /* nothing to do here */ } static void initBUinfo_spmvar(GT_UNUSED GtBUinfo_spmvar *info, GT_UNUSED GtBUstate_spmvar *state) { /* nothing to do here */ } static void freeBUinfo_spmeq(GT_UNUSED GtBUinfo_spmeq *info, GT_UNUSED GtBUstate_spmeq *state) { /* nothing to do here */ } static void freeBUinfo_spmvar(GT_UNUSED GtBUinfo_spmvar *info, GT_UNUSED GtBUstate_spmvar *state) { /* nothing to do here */ } #ifdef GT_READJOINER_STATISTICS static void save_blindtrie_statistics(GtBUstate_spm *state) { unsigned long j, bsize, bsize_sum = 0; for (j = 0; j < state->w_nextfree; j++) { bsize = gt_blindtrie_current_size(state->w_set[j].blindtrie); if (bsize > state->max_blindtrie_size) state->max_blindtrie_size = bsize; bsize_sum += bsize; } if (bsize_sum > state->max_total_blindtrie_size) state->max_total_blindtrie_size = bsize_sum; } static void reset_subtree_stats(GtBUstate_spm *state) { if (state->w_nextfree > 0) { save_blindtrie_statistics(state); (state->nof_subtrees)++; if (state->nof_terminals_in_subtree > state->max_nof_terminals_in_subtree) state->max_nof_terminals_in_subtree = state->nof_terminals_in_subtree; state->nof_terminals_in_subtree = 0; if (state->nof_overlaps_in_subtree > state->max_nof_overlaps_in_subtree) state->max_nof_overlaps_in_subtree = state->nof_overlaps_in_subtree; state->nof_overlaps_in_subtree = 0; } } #endif static void combine_terminal_with_wset(unsigned long seqnum, unsigned long seqstartpos, unsigned long seqlen, unsigned long w_left, unsigned long lcp, GtBUstate_spm *state) { unsigned long j, suffix_readnum = seqnum; bool suffixseq_direct = true; GT_READJOINER_CORRECT_REVCOMPL(suffix_readnum, state->first_revcompl, state->nofreads, suffixseq_direct); #ifdef GT_READJOINER_STATISTICS (state->nof_terminals)++; (state->nof_terminals_in_subtree)++; if (w_left < state->w_nextfree) { (state->nof_combinable_terminals)++; gt_disc_distri_add(state->w_per_terminal, state->w_nextfree - w_left); state->nof_t_w_combinations += state->w_nextfree - w_left; } #endif for (j = w_left; j < state->w_nextfree; j++) { bool prefixseq_direct = true; WholereadInfo *w = state->w_set + j; unsigned long prefix_readnum = w->seqnum; GT_READJOINER_CORRECT_REVCOMPL(prefix_readnum, state->first_revcompl, state->nofreads, prefixseq_direct); if (!state->elimtrans || !gt_blindtrie_retrieve(w->blindtrie, state->totallength - (seqstartpos + seqlen - lcp), seqstartpos)) { /* irreducible SPM */ if (GT_READJOINER_IS_CORRECT_REVCOMPL_CASE(suffix_readnum, suffixseq_direct, prefix_readnum, prefixseq_direct)) { #ifdef GT_READJOINER_DEBUG gt_log_log("%lu %s %lu %s %lu\n", suffix_readnum, suffixseq_direct ? "+" : "-", prefix_readnum, prefixseq_direct ? "+" : "-", lcp); #endif state->proc(suffix_readnum, prefix_readnum, lcp, suffixseq_direct, prefixseq_direct, state->procdata); (state->nofvalidspm)++; #ifdef GT_READJOINER_STATISTICS (state->nof_overlaps_in_subtree)++; #endif } #ifdef GT_READJOINER_STATISTICS else { (state->nof_wrong_direction)++; } #endif } else { /* transitive */ if (prefix_readnum == suffix_readnum) (state->nof_transitive_withrc)++; else (state->nof_transitive_other)++; } } } static inline int processleafedge_spmeq(bool firstsucc, unsigned long fatherdepth, GtBUinfo_spmeq *father, unsigned long seqnum, unsigned long relpos, GtBUstate_spmeq *state, GT_UNUSED GtError *err) { if (fatherdepth >= state->minmatchlength) { if (firstsucc) { gt_assert(father != NULL); father->w_left = state->w_nextfree; } if (relpos == 0) appendtowset_spm(seqnum, state); gt_assert(fatherdepth != state->read_length); if (relpos + fatherdepth == state->read_length) combine_terminal_with_wset(seqnum, seqnum * (state->read_length + 1), state->read_length, father->w_left, fatherdepth, state); } else { #ifdef GT_READJOINER_STATISTICS reset_subtree_stats(state); #endif state->w_nextfree = 0; } return 0; } static inline int processleafedge_spmvar(bool firstsucc, unsigned long fatherdepth, GtBUinfo_spmeq *father, unsigned long seqnum, unsigned long relpos, GtBUstate_spmeq *state, GT_UNUSED GtError *err) { if (fatherdepth >= state->minmatchlength) { unsigned long seqlen = gt_encseq_seqlength(state->encseq, seqnum); if (firstsucc) { gt_assert(father != NULL); father->w_left = state->w_nextfree; } if (relpos == 0) { appendtowset_spm(seqnum, state); if (fatherdepth == seqlen) { unsigned long readnum = GT_READJOINER_READNUM(seqnum, state->first_revcompl, state->nofreads); (void)fwrite(&(readnum), sizeof (unsigned long), (size_t)1, state->cntfile); state->nof_contained++; } } if (relpos + fatherdepth == seqlen) appendtolset_spm(seqnum, state); } else { #ifdef GT_READJOINER_STATISTICS reset_subtree_stats(state); #endif state->w_nextfree = 0; } return 0; } static inline int processbranchingedge_spmeq(GT_UNUSED bool firstsucc, unsigned long fatherdepth, GT_UNUSED GtBUinfo_spmeq *afather, GT_UNUSED unsigned long sondepth, GT_UNUSED unsigned long sonwidth, GT_UNUSED GtBUinfo_spmeq *ason, GT_UNUSED GtBUstate_spmeq *state, GT_UNUSED GtError *err) { if (fatherdepth < state->minmatchlength) { #ifdef GT_READJOINER_STATISTICS reset_subtree_stats(state); #endif state->w_nextfree = 0; } return 0; } static inline int processbranchingedge_spmvar(GT_UNUSED bool firstsucc, unsigned long fatherdepth, GT_UNUSED GtBUinfo_spmvar *afather, GT_UNUSED unsigned long sondepth, GT_UNUSED unsigned long sonwidth, GT_UNUSED GtBUinfo_spmvar *ason, GT_UNUSED GtBUstate_spmvar *state, GT_UNUSED GtError *err) { if (fatherdepth < state->minmatchlength) { #ifdef GT_READJOINER_STATISTICS reset_subtree_stats(state); #endif state->w_nextfree = 0; } return 0; } static int processlcpinterval_spmvar(unsigned long lcp, GtBUinfo_spmvar *info, GtBUstate_spmvar *state, GT_UNUSED GtError *err) { if (lcp >= state->minmatchlength) { unsigned long i; for (i = 0; i < state->l_nextfree; i++) { combine_terminal_with_wset(state->l_set[i], gt_encseq_seqstartpos(state->encseq, state->l_set[i]), gt_encseq_seqlength(state->encseq, state->l_set[i]), info->w_left, lcp, state); } state->l_nextfree = 0; } return 0; } #ifdef GT_READJOINER_STATISTICS static int show_disc_distri_datapoint_spm(unsigned long key, unsigned long long value, GtFile *outfile) { gt_file_xprintf(outfile, "%lu %llu\n", key, value); return 0; } void show_wsize_distri_spm(GtBUstate_spmeq *state) { FILE *outfp = NULL; GtFile *gt_outfp = NULL; GtStr *filename; filename = gt_str_new_cstr(state->indexname); gt_str_append_cstr(filename, GT_READJOINER_SUFFIX_WSIZE_DISTRI); outfp = gt_fa_xfopen(gt_str_get(filename), "w"); gt_outfp = gt_file_new_from_fileptr(outfp); gt_logger_log(state->verbose_logger, "terminals: w_set size distribution: %s", gt_str_get(filename)); gt_file_xprintf(gt_outfp, "# sizeofwset nofterminals\n"); gt_disc_distri_foreach(state->w_per_terminal, (GtDiscDistriIterFunc) show_disc_distri_datapoint_spm, gt_outfp); gt_file_delete(gt_outfp); gt_str_delete(filename); } static void showstatistics_spm(GtBUstate_spmeq *state) { unsigned long nof_correct_dir_transitive; gt_logger_log(state->verbose_logger, "--- statistics for thread %u ---", state->threadnum); /* encseq */ gt_logger_log(state->verbose_logger, "encseq: number of reads: %lu", gt_encseq_num_of_sequences(state->encseq)); gt_logger_log(state->verbose_logger, "encseq: total length: %lu", state->totallength); /* subtrees */ gt_logger_log(state->verbose_logger, "subtrees: number: %lu", state->nof_subtrees); /* terminals */ gt_logger_log(state->verbose_logger, "terminals: all: %lu", state->nof_terminals); gt_logger_log(state->verbose_logger, "terminals: on w-paths %lu", state->nof_combinable_terminals); gt_logger_log(state->verbose_logger, "terminals: max in subtree: %lu", state->max_nof_terminals_in_subtree); gt_logger_log(state->verbose_logger, "terminals: combinations with w-paths: %lu", state->nof_t_w_combinations); show_wsize_distri_spm(state); /* spm */ gt_logger_log(state->verbose_logger, "spm: irreducible - correct-direction: %lu", state->nofvalidspm); gt_logger_log(state->verbose_logger, "spm: irreducible - wrong-direction: %lu", state->nof_wrong_direction); gt_logger_log(state->verbose_logger, "spm: transitive - " "derived from own revcompl: %lu", state->nof_transitive_withrc); gt_logger_log(state->verbose_logger, "spm: transitive - correct/wrong dir - " "derived from other: %lu", state->nof_transitive_other); nof_correct_dir_transitive = (unsigned long)(state->nof_transitive_withrc) + (unsigned long)(state->nof_transitive_other >> 1); gt_logger_log(state->verbose_logger, "spm: transitive - " "correct direction: %lu", nof_correct_dir_transitive); gt_logger_log(state->verbose_logger, "spm: max in subtree: %lu", state->max_nof_overlaps_in_subtree); /* l_set */ gt_logger_log(state->verbose_logger, "l_set: max nextfree: %lu", state->max_l_nextfree); gt_logger_log(state->verbose_logger, "l_set: sizeof: %lu", (unsigned long)(sizeof (state->l_set))); gt_logger_log(state->verbose_logger, "l_set: initial alloc: %lu (%lu bytes)", state->initial_l_allocated, state->initial_l_allocated * sizeof (state->l_set)); gt_logger_log(state->verbose_logger, "l_set: final alloc: %lu (%lu bytes)", state->l_allocated, state->l_allocated * sizeof (state->l_set)); gt_logger_log(state->verbose_logger, "l_set: reallocs: %lu", state->nof_l_set_realloc); /* w_set */ gt_logger_log(state->verbose_logger, "w_set: max nextfree: %lu", state->max_w_nextfree); gt_logger_log(state->verbose_logger, "w_set: sizeof: %lu", (unsigned long)(sizeof (WholereadInfo))); gt_logger_log(state->verbose_logger, "w_set: initial alloc: %lu (%lu bytes)", state->initial_w_allocated, state->initial_w_allocated * sizeof (WholereadInfo)); gt_logger_log(state->verbose_logger, "w_set: final alloc: %lu (%lu bytes)", state->w_allocated, state->w_allocated * sizeof (WholereadInfo)); gt_logger_log(state->verbose_logger, "w_set: reallocs: %lu", state->nof_w_set_realloc); gt_logger_log(state->verbose_logger, "w_set: largest blindtrie: %lu bytes", state->max_blindtrie_size); gt_logger_log(state->verbose_logger, "w_set: sum of blindtrie sizes: " "%lu bytes", state->max_total_blindtrie_size); } #endif #include "esa-bottomup-spmeq.inc" #include "esa-bottomup-spmvar.inc" static GtBUstate_spm *gt_spmfind_state_new(bool eqlen, const GtEncseq *encseq, unsigned long minmatchlength, unsigned long w_maxsize, bool elimtrans, bool showspm, const char *indexname, unsigned int threadnum, GtLogger *default_logger, GtLogger *verbose_logger, GtError *err) { GtBUstate_spmeq *state = gt_calloc((size_t)1, sizeof (*state)); state->default_logger = default_logger; state->verbose_logger = verbose_logger; state->err = err; state->indexname = indexname; state->encseq = encseq; state->nofreads = gt_encseq_num_of_sequences(encseq); state->first_revcompl = gt_encseq_is_mirrored(encseq) ? state->nofreads >> 1 : 0; state->totallength = gt_encseq_total_length(encseq); state->minmatchlength = minmatchlength; state->elimtrans = elimtrans; state->w_maxsize = (w_maxsize == 0) ? ULONG_MAX : w_maxsize;\ if (eqlen) { state->read_length = gt_encseq_seqlength(encseq, 0); } else { GtStr *suffix = gt_str_new(); state->read_length = 0; gt_str_append_char(suffix, '.'); gt_str_append_uint(suffix, threadnum); gt_str_append_cstr(suffix, GT_READJOINER_SUFFIX_CNTLIST); state->cntfile = gt_fa_fopen_with_suffix(indexname, gt_str_get(suffix), "wb", NULL); gt_cntlist_write_bin_header(gt_encseq_is_mirrored(encseq) ? state->nofreads >> 1 : state->nofreads, state->cntfile); gt_str_delete(suffix); if (!state->cntfile) exit(-1); } state->threadnum = threadnum; if (threadnum == 0) { gt_logger_log(verbose_logger, "readset name = %s", indexname); if (state->first_revcompl == 0) gt_logger_log(verbose_logger, "single strand mode"); gt_logger_log(default_logger, "number of reads in filtered readset = %lu", state->first_revcompl > 0 ? state->first_revcompl : state->nofreads); gt_logger_log(verbose_logger, "total length of filtered readset = %lu", gt_encseq_is_mirrored(encseq) ? (state->totallength - state->nofreads + 1) >> 1 : (state->totallength - state->nofreads + 1)); if (eqlen) gt_logger_log(verbose_logger, "read length = %lu", state->read_length); else gt_logger_log(verbose_logger, "read length = variable"); gt_logger_log(verbose_logger, "minimal match length = %lu", state->minmatchlength); if (w_maxsize == 0) gt_logger_log(verbose_logger, "wset size limit = unlimited"); else gt_logger_log(verbose_logger, "wset size limit = %lu", state->w_maxsize); gt_logger_log(verbose_logger, "eliminate transitive SPM = %s", state->elimtrans ? "true" : "false"); } if (showspm) { state->proc = gt_spmproc_show_ascii; state->procdata = NULL; } else { GtStr *suffix = gt_str_new(); gt_str_append_char(suffix, '.'); gt_str_append_uint(suffix, threadnum); gt_str_append_cstr(suffix, GT_READJOINER_SUFFIX_SPMLIST); /*@ignore@*/ state->procdata = gt_fa_fopen_with_suffix(indexname, gt_str_get(suffix), "wb", NULL); /*@end@*/ gt_str_delete(suffix); if (state->procdata == NULL) exit(-1); if (state->first_revcompl > UINT32_MAX || (state->first_revcompl == 0 && state->nofreads > UINT32_MAX)) { state->proc = gt_spmproc_show_bin64; /*@ignore@*/ gt_spmlist_write_header_bin64((FILE*)state->procdata); /*@end@*/ } else { state->proc = gt_spmproc_show_bin32; /*@ignore@*/ gt_spmlist_write_header_bin32((FILE*)state->procdata); /*@end@*/ } } state->nofvalidspm = 0; initlset_spm(state); initwset_spm(state); state->stack = (void *) gt_GtArrayGtBUItvinfo_new(); #ifdef GT_READJOINER_STATISTICS if (threadnum == 0) gt_logger_log(state->verbose_logger, "spmfind: additional statistics output activated"); state->initial_l_allocated = state->l_allocated; state->initial_w_allocated = state->w_allocated; state->w_per_terminal = gt_disc_distri_new(); #endif return state; } GtBUstate_spmeq *gt_spmfind_eqlen_state_new(const GtEncseq *encseq, unsigned long minmatchlength, unsigned long w_maxsize, bool elimtrans, bool showspm, const char *indexname, unsigned int threadnum, GtLogger *default_logger, GtLogger *verbose_logger, GtError *err) { return (GtBUstate_spmeq *)gt_spmfind_state_new(true, encseq, minmatchlength, w_maxsize, elimtrans, showspm, indexname, threadnum, default_logger, verbose_logger, err); } GtBUstate_spmvar *gt_spmfind_varlen_state_new(const GtEncseq *encseq, unsigned long minmatchlength, unsigned long w_maxsize, bool elimtrans, bool showspm, const char *indexname, unsigned int threadnum, GtLogger *default_logger, GtLogger *verbose_logger, GtError *err) { return (GtBUstate_spmvar *)gt_spmfind_state_new(false, encseq, minmatchlength, w_maxsize, elimtrans, showspm, indexname, threadnum, default_logger, verbose_logger, err); } static unsigned long gt_spmfind_nof_trans_spm(GtBUstate_spm *state) { return state->nof_transitive_withrc + (state->nof_transitive_other >> 1); } static unsigned long gt_spmfind_nof_irr_spm(GtBUstate_spm *state) { return state->nofvalidspm; } unsigned long gt_spmfind_varlen_nof_trans_spm(GtBUstate_spmvar *state) { return gt_spmfind_nof_trans_spm(state); } unsigned long gt_spmfind_varlen_nof_irr_spm(GtBUstate_spmvar *state) { return gt_spmfind_nof_irr_spm(state); } unsigned long gt_spmfind_eqlen_nof_trans_spm(GtBUstate_spmeq *state) { return gt_spmfind_nof_trans_spm(state); } unsigned long gt_spmfind_eqlen_nof_irr_spm(GtBUstate_spmeq *state) { return gt_spmfind_nof_irr_spm(state); } static void gt_spmfind_state_delete(bool eqlen, GtBUstate_spm *state) { if (state != NULL) { gt_logger_log(state->verbose_logger, "number of %ssuffix-prefix matches " "[thread %u] = %lu", state->elimtrans ? "irreducible " : "", state->threadnum, state->nofvalidspm); if (state->elimtrans) gt_logger_log(state->verbose_logger, "number of transitive " "suffix-prefix matches [thread %u] = %lu", state->threadnum, state->nof_transitive_withrc + (state->nof_transitive_other >> 1)); #ifdef GT_READJOINER_STATISTICS showstatistics_spm(state); gt_disc_distri_delete(state->w_per_terminal); #endif gt_free(state->l_set); deletewset_spm(state->w_set, state->w_allocated); if (eqlen) gt_GtArrayGtBUItvinfo_delete_spmeq( (GtArrayGtBUItvinfo_spmeq *)state->stack, state); else { GtStr *path = gt_str_new_cstr(state->indexname); gt_str_append_cstr(path, GT_READJOINER_SUFFIX_CNTLIST); gt_logger_log(state->verbose_logger, "number of internally contained " "reads [thread %u] = %lu", state->threadnum, state->nof_contained); gt_str_delete(path); gt_GtArrayGtBUItvinfo_delete_spmvar( (GtArrayGtBUItvinfo_spmvar *)state->stack, state); gt_fa_fclose(state->cntfile); } if (state->procdata != NULL) /*@ignore@*/ gt_fa_fclose((FILE*)state->procdata); /*@end@*/ gt_free(state); } } void gt_spmfind_eqlen_state_delete(GtBUstate_spmeq *state) { gt_spmfind_state_delete(true, state); } void gt_spmfind_varlen_state_delete(GtBUstate_spmeq *state) { gt_spmfind_state_delete(false, state); } int gt_spmfind_eqlen_process(void *data, const unsigned long *seqnum_relpos_bucket, const GtSeqnumrelpos *snrp, const uint16_t *lcptab_bucket, unsigned long nonspecials, unsigned long spaceforbucketprocessing, GtError *err) { GtBUstate_spmeq *state = data; unsigned int nof_w_parts = 0; gt_assert(state != NULL); gt_assert(snrp != NULL); gt_assert(lcptab_bucket != NULL); state->spaceforbucketprocessing = spaceforbucketprocessing; state->w_offset = 0; do { state->w_nextfree = 0; state->w_overflow = false; state->w_count = 0; if (gt_esa_bottomup_RAM_spmeq(seqnum_relpos_bucket, lcptab_bucket, nonspecials, (GtArrayGtBUItvinfo_spmeq *) state->stack, state, snrp, err) != 0) { return -1; } if (state->w_overflow) nof_w_parts++; state->w_offset += state->w_maxsize; } while (state->w_overflow); #ifdef GT_READJOINER_DEBUG gt_log_log("bucket divided in %u parts", nof_w_parts); #endif return 0; } void gt_spmfind_eqlen_process_end(void *data) { GtBUstate_spmeq *state = data; resetwsetbt_spm(state); return; } void gt_spmfind_varlen_process_end(void *data) { GtBUstate_spmvar *state = data; resetwsetbt_spm(state); return; } int gt_spmfind_varlen_process(void *data, const unsigned long *seqnum_relpos_bucket, const GtSeqnumrelpos *snrp, const uint16_t *lcptab_bucket, unsigned long nonspecials, unsigned long spaceforbucketprocessing, GtError *err) { GtBUstate_spmvar *state = data; unsigned int nof_w_parts = 0; gt_assert(state != NULL); gt_assert(snrp != NULL); gt_assert(lcptab_bucket != NULL); state->spaceforbucketprocessing = spaceforbucketprocessing; state->w_offset = 0; do { state->w_nextfree = 0; state->w_overflow = false; state->w_count = 0; if (gt_esa_bottomup_RAM_spmvar(seqnum_relpos_bucket, lcptab_bucket, nonspecials, (GtArrayGtBUItvinfo_spmvar *) state->stack, state, snrp, err) != 0) { return -1; } if (state->w_overflow) nof_w_parts++; state->w_offset += state->w_maxsize; } while (state->w_overflow); return 0; } genometools-1.5.1/src/match/rdj-spmfind.h000066400000000000000000000055431211610345200203240ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_SPMFIND_H #define RDJ_SPMFIND_H #include #include "core/error_api.h" #include "core/encseq_api.h" #include "match/seqnumrelpos.h" /* * elimtrans: if false, the blindtrie are never actually used and * all SPM are output, not only the irreducible ones * showspm: if true, SPM are shown on stdout in text format; otherwise * they are saved to file in binary format */ typedef struct GtBUstate_spm GtBUstate_spmeq; GtBUstate_spmeq *gt_spmfind_eqlen_state_new(const GtEncseq *encseq, unsigned long minmatchlength, unsigned long w_maxsize, bool elimtrans, bool showspm, const char *indexname, unsigned int threadnum, GtLogger *default_logger, GtLogger *verbose_logger, GtError *err); void gt_spmfind_eqlen_state_delete(GtBUstate_spmeq *state); int gt_spmfind_eqlen_process(void *data, const unsigned long *seqnum_relpos_bucket, const GtSeqnumrelpos *snrp, const uint16_t *lcptab_bucket, unsigned long nonspecials, unsigned long spaceforbucketprocessing, GtError *err); void gt_spmfind_eqlen_process_end(void *data); typedef struct GtBUstate_spm GtBUstate_spmvar; GtBUstate_spmvar *gt_spmfind_varlen_state_new(const GtEncseq *encseq, unsigned long minmatchlength, unsigned long w_maxsize, bool elimtrans, bool showspm, const char *indexname, unsigned int threadnum, GtLogger *default_logger, GtLogger *verbose_logger, GtError *err); void gt_spmfind_varlen_state_delete(GtBUstate_spmvar *state); int gt_spmfind_varlen_process(void *data, const unsigned long *seqnum_relpos_bucket, const GtSeqnumrelpos *snrp, const uint16_t *lcptab_bucket, unsigned long nonspecials, unsigned long spaceforbucketprocessing, GtError *err); void gt_spmfind_varlen_process_end(void *data); unsigned long gt_spmfind_varlen_nof_trans_spm(GtBUstate_spmvar *state); unsigned long gt_spmfind_varlen_nof_irr_spm(GtBUstate_spmvar *state); unsigned long gt_spmfind_eqlen_nof_trans_spm(GtBUstate_spmeq *state); unsigned long gt_spmfind_eqlen_nof_irr_spm(GtBUstate_spmeq *state); #endif genometools-1.5.1/src/match/rdj-spmlist.c000066400000000000000000000374221211610345200203530ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include "core/str.h" #include "core/assert_api.h" #include "core/file.h" #include "core/log_api.h" #include "core/parseutils.h" #include "core/splitter.h" #include "core/ensure.h" #include "core/minmax.h" #include "core/ma.h" #include "core/unused_api.h" #include "match/rdj-spmlist.h" /* unit test: */ #include "match/rdj-spmproc.h" #include "match/rdj-ensure-output.h" /* ---------------- Readjoiner bin format ---------------- */ #ifndef NDEBUG #define GT_SPMLIST_ASSERT_CAST_SAFE(N, FROM, TO, TOMAX)\ if (sizeof (FROM) > sizeof (TO)) \ gt_assert(N < (FROM)TOMAX) #else #define GT_SPMLIST_ASSERT_CAST_SAFE(N, FROM, TO, TOMAX) #endif /* * INT1: suffix_seqnum * INT2: prefix_seqnum * INT3: length << 2 + suffixseq_direct << 1 + prefixseq_direct * * */ #if defined(_LP64) || (BITS == 32) #define GT_RDJ_LENGTHASSERTION(BITS)\ gt_assert(length <= (UINT ## BITS ## _MAX >> 2)) #else #define GT_RDJ_LENGTHASSERTION(BITS) /* Nothing */ #endif #define DEFINE_GT_SPMLIST_BIN_FORMAT(BITS)\ void gt_spmlist_write_header_bin ## BITS(FILE *file)\ {\ gt_xfputc((int)GT_SPMLIST_BIN ## BITS, file);\ }\ void gt_spmproc_show_bin ## BITS(unsigned long suffix_seqnum,\ unsigned long prefix_seqnum, unsigned long length, bool suffixseq_direct,\ bool prefixseq_direct, void *file)\ {\ uint ## BITS ## _t spmdata[3];\ length <<= 2;\ GT_RDJ_LENGTHASSERTION(BITS);\ if (suffixseq_direct)\ length |= 2;\ if (prefixseq_direct)\ length |= 1;\ GT_SPMLIST_ASSERT_CAST_SAFE(suffix_seqnum, unsigned long, uint ## BITS ## _t,\ UINT ## BITS ## _MAX);\ spmdata[0] = (uint ## BITS ## _t) suffix_seqnum;\ GT_SPMLIST_ASSERT_CAST_SAFE(prefix_seqnum, unsigned long, uint ## BITS ## _t,\ UINT ## BITS ## _MAX);\ spmdata[1] = (uint ## BITS ## _t) prefix_seqnum;\ spmdata[2] = (uint ## BITS ## _t) length;\ /*@ignore@*/\ gt_xfwrite(&spmdata, sizeof (uint ## BITS ## _t), (size_t)3, (FILE*)file);\ /*@end@*/\ }\ static int gt_spmlist_parse_bin ## BITS(FILE *file, unsigned long min_length,\ GtSpmproc processoverlap, void *data, GtError *err)\ {\ int had_err = 0;\ size_t retval;\ uint ## BITS ## _t spmdata[3];\ unsigned long length;\ bool suffixseq_direct, prefixseq_direct;\ while (!feof(file))\ {\ retval = fread(&spmdata, sizeof (uint ## BITS ## _t), (size_t)3, file);\ if (retval == 0 && feof(file))\ break;\ if (retval != (size_t)3)\ {\ had_err = -1;\ gt_log_log("retval: %lu", (unsigned long)retval);\ gt_error_set(err, "SPM binary file error: %s", feof(file) ?\ "premature EOF" : strerror(errno));\ }\ GT_SPMLIST_ASSERT_CAST_SAFE(spmdata[2] >> 2, uint ## BITS ## _t,\ unsigned long, ULONG_MAX);\ length = (unsigned long)(spmdata[2] >> 2);\ suffixseq_direct = (spmdata[2] & 2) != 0;\ prefixseq_direct = (spmdata[2] & 1) != 0;\ GT_SPMLIST_ASSERT_CAST_SAFE(spmdata[0], uint ## BITS ## _t,\ unsigned long, ULONG_MAX);\ GT_SPMLIST_ASSERT_CAST_SAFE(spmdata[1], uint ## BITS ## _t,\ unsigned long, ULONG_MAX);\ if (had_err == 0 && length >= min_length)\ processoverlap((unsigned long)spmdata[0], (unsigned long)spmdata[1],\ length, suffixseq_direct, prefixseq_direct, data);\ }\ return had_err;\ } DEFINE_GT_SPMLIST_BIN_FORMAT(32); DEFINE_GT_SPMLIST_BIN_FORMAT(64); /* ---------------- Plain text format ---------------- */ /*@notfunction@*/ #define GT_SPMLIST_EOFERROR\ do {\ gt_error_set(err, "unexpected end of file");\ return -1;\ } while (false) static inline int parse_plusminus(bool *destination, const char *source) { if (strlen(source) != (size_t)1) return -1; switch (source[0]) { case '+': *destination = true; return 0; case '-': *destination = false; return 0; default: return -1; } } #define GT_SPMLIST_PARSE(NR, F, PTR)\ if (!had_err) \ {\ gt_assert(tokens != NULL);\ had_err = F((PTR), tokens[NR]);\ if (had_err) \ gt_error_set(err, "Token %i unrecognized", NR);\ } static inline int parse_line(GtStr *s, unsigned long min_length, GtSpmproc proc_e, GtSpmprocA proc_a, void *data, GtError *err) { int had_err = 0; GtSplitter *splitter; char **tokens = NULL; unsigned long suffix_seqnum = 0, prefix_seqnum = 0, suffix_length = 0, prefix_length, unit_edist; bool suffixseq_direct = true, prefixseq_direct = true, exact; exact = (proc_e != NULL) ? true : false; splitter = gt_splitter_new(); gt_splitter_split(splitter, gt_str_get(s), gt_str_length(s), ' '); if (gt_splitter_size(splitter) != (exact ? 5UL : 7UL)) { gt_error_set(err, "Wrong number of tokens"); had_err = -1; } if (!had_err) tokens = gt_splitter_get_tokens(splitter); GT_SPMLIST_PARSE(0, gt_parse_ulong, &suffix_seqnum); GT_SPMLIST_PARSE(1, parse_plusminus, &suffixseq_direct); GT_SPMLIST_PARSE(2, gt_parse_ulong, &prefix_seqnum); GT_SPMLIST_PARSE(3, parse_plusminus, &prefixseq_direct); GT_SPMLIST_PARSE(4, gt_parse_ulong, &suffix_length); if (!exact) { GT_SPMLIST_PARSE(5, gt_parse_ulong, &prefix_length); GT_SPMLIST_PARSE(6, gt_parse_ulong, &unit_edist); } if (!had_err) { if (exact && suffix_length >= min_length) { gt_assert(proc_e != NULL); proc_e(suffix_seqnum, prefix_seqnum, suffix_length, suffixseq_direct, prefixseq_direct, data); } else if (!exact && (suffix_length >= min_length || prefix_length >= min_length)) { gt_assert(proc_a != NULL); proc_a(suffix_seqnum, prefix_seqnum, suffix_length, prefix_length, unit_edist, suffixseq_direct, prefixseq_direct, data); } } gt_splitter_delete(splitter); return had_err; } static int gt_spmlist_parse_ascii_generic(GtFile *infp, unsigned long min_length, GtSpmproc proc_e, GtSpmprocA proc_a, void *data, GtError *err) { int had_err = 0; GtStr *line; gt_error_check(err); line = gt_str_new(); while (!had_err && gt_str_read_next_line_generic(line, infp) != EOF) { had_err = parse_line(line, min_length, proc_e, proc_a, data, err); gt_str_reset(line); } gt_str_delete(line); return had_err; } static inline int gt_spmlist_parse_ascii(GtFile *infp, unsigned long min_length, GtSpmproc processoverlap, void *data, GtError *err) { return gt_spmlist_parse_ascii_generic(infp, min_length, processoverlap, NULL, data, err); } int gt_spmlist_parse_ascii_approx(const char* filename, unsigned long min_length, GtSpmprocA processoverlap, void *data, GtError *err) { int retval = 0; GtFile *infp; /*@i1@*/ gt_error_check(err); infp = gt_file_new(filename, "r", err); if (infp == NULL) return -1; retval = gt_spmlist_parse_ascii_generic(infp, min_length, NULL, processoverlap, data, err); gt_file_delete(infp); return retval; } int gt_spmlist_parse(const char* filename, unsigned long min_length, GtSpmproc processoverlap, void *data, GtError *err) { int c, retval = 0; FILE *file; GtFile *infp; file = gt_fa_fopen(filename, "rb", err); if (file == NULL) return -1; infp = gt_file_new_from_fileptr(file); if (infp == NULL) return -1; c = gt_file_xfgetc(infp); switch (c) { case EOF: gt_error_set(err, "%s: file is empty", filename); retval = -1; break; case GT_SPMLIST_BIN32: gt_log_log("Spm file %s format: readjoiner-bin32", filename); retval = gt_spmlist_parse_bin32(file, min_length, processoverlap, data, err); break; case GT_SPMLIST_BIN64: gt_log_log("Spm file %s format: readjoiner-bin64", filename); retval = gt_spmlist_parse_bin64(file, min_length, processoverlap, data, err); break; default: gt_file_unget_char(infp, c); gt_log_log("Spm file %s format: readjoiner-text", filename); retval = gt_spmlist_parse_ascii(infp, min_length, processoverlap, data, err); } gt_file_delete(infp); return retval; } /* -------------------------- unit tests -------------------------- */ static inline int parse_plusminus_unit_test(GtError *err) { int had_err = 0; bool destination; gt_ensure(had_err, parse_plusminus(&destination, "+") == 0); gt_ensure(had_err, destination); gt_ensure(had_err, parse_plusminus(&destination, "-") == 0); gt_ensure(had_err, !destination); gt_ensure(had_err, parse_plusminus(&destination, "xy") != 0); gt_ensure(had_err, parse_plusminus(&destination, "x") != 0); gt_ensure(had_err, parse_plusminus(&destination, "") != 0); return had_err; } struct GtSpmParseExactResult { unsigned long suffix_seqnum, prefix_seqnum, length; bool suffixseq_direct, prefixseq_direct; }; struct GtSpmParseApproxResult { unsigned long suffix_seqnum, prefix_seqnum, suffix_length, prefix_length, unit_edist; bool suffixseq_direct, prefixseq_direct; }; static void gt_spmlist_test_save(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void* data) { struct GtSpmParseExactResult *r = data; r->suffix_seqnum = suffix_seqnum; r->prefix_seqnum = prefix_seqnum; r->length = length; r->suffixseq_direct = suffixseq_direct; r->prefixseq_direct = prefixseq_direct; } static void gt_spmlist_test_save_a(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long suffix_length, unsigned long prefix_length, unsigned long unit_edist, bool suffixseq_direct, bool prefixseq_direct, void* data) { struct GtSpmParseApproxResult *r = data; r->suffix_seqnum = suffix_seqnum; r->prefix_seqnum = prefix_seqnum; r->suffix_length = suffix_length; r->prefix_length = prefix_length; r->unit_edist = unit_edist; r->suffixseq_direct = suffixseq_direct; r->prefixseq_direct = prefixseq_direct; } #define GT_SPMPARSE_TEST_LINE_ERR(LINE)\ do {\ line = gt_str_new_cstr(LINE);\ gt_ensure(had_err, parse_line(line, 0, gt_spmlist_test_save, NULL, &r,\ parse_err) != 0);\ gt_ensure(had_err, gt_error_is_set(parse_err));\ gt_error_unset(parse_err);\ gt_str_delete(line);\ } while (false) #define GT_SPMPARSE_TEST_LINE_OK(LINE,SN,PN,L,SD,PD)\ do {\ line = gt_str_new_cstr(LINE);\ gt_ensure(had_err, parse_line(line, 0, gt_spmlist_test_save, NULL, &r,\ parse_err) == 0);\ gt_ensure(had_err, !gt_error_is_set(parse_err));\ gt_ensure(had_err, r.suffix_seqnum == (SN));\ gt_ensure(had_err, r.prefix_seqnum == (PN));\ gt_ensure(had_err, r.length == (L));\ gt_ensure(had_err, r.suffixseq_direct == (SD));\ gt_ensure(had_err, r.prefixseq_direct == (PD));\ gt_str_delete(line);\ } while (false) #define GT_SPMPARSE_TEST_LINE_A_ERR(LINE)\ do {\ line = gt_str_new_cstr(LINE);\ gt_ensure(had_err, parse_line(line, 0, NULL, gt_spmlist_test_save_a, &r_a,\ parse_err) != 0);\ gt_ensure(had_err, gt_error_is_set(parse_err));\ gt_error_unset(parse_err);\ gt_str_delete(line);\ } while (false) #define GT_SPMPARSE_TEST_LINE_A_OK(LINE,SN,PN,SL,PL,UE,SD,PD)\ do {\ line = gt_str_new_cstr(LINE);\ gt_ensure(had_err, parse_line(line, 0, NULL, gt_spmlist_test_save_a, &r_a,\ parse_err) == 0);\ gt_ensure(had_err, !gt_error_is_set(parse_err));\ gt_ensure(had_err, r_a.suffix_seqnum == (SN));\ gt_ensure(had_err, r_a.prefix_seqnum == (PN));\ gt_ensure(had_err, r_a.suffix_length == (SL));\ gt_ensure(had_err, r_a.prefix_length == (PL));\ gt_ensure(had_err, r_a.unit_edist == (UE));\ gt_ensure(had_err, r_a.suffixseq_direct == (SD));\ gt_ensure(had_err, r_a.prefixseq_direct == (PD));\ gt_str_delete(line);\ } while (false) static inline int parse_line_unit_test(GtError* err) { int had_err = 0; GtStr *line; GtError *parse_err; struct GtSpmParseExactResult r; struct GtSpmParseApproxResult r_a; gt_error_check(err); parse_err = gt_error_new(); GT_SPMPARSE_TEST_LINE_ERR("1 2 + 3 4"); GT_SPMPARSE_TEST_LINE_ERR("4 5 1"); GT_SPMPARSE_TEST_LINE_ERR("1 1 1 1"); GT_SPMPARSE_TEST_LINE_ERR("1x 2 + 1"); GT_SPMPARSE_TEST_LINE_OK("1 + 2 - 3", 1UL, 2UL, 3UL, true, false); GT_SPMPARSE_TEST_LINE_OK("2 - 1 + 3", 2UL, 1UL, 3UL, false, true); GT_SPMPARSE_TEST_LINE_OK("4 + 5 + 6", 4UL, 5UL, 6UL, true, true); GT_SPMPARSE_TEST_LINE_A_ERR("1 + 2 + 3"); GT_SPMPARSE_TEST_LINE_A_ERR("4 + 5 + 1 5 4 5"); GT_SPMPARSE_TEST_LINE_A_ERR("1 1 1 1 2 3"); GT_SPMPARSE_TEST_LINE_A_ERR("1x + 2 + 1 2 3"); GT_SPMPARSE_TEST_LINE_A_OK("1 + 2 - 3 4 1", 1UL, 2UL, 3UL, 4UL, 1UL, true, false); GT_SPMPARSE_TEST_LINE_A_OK("2 - 1 + 3 4 1", 2UL, 1UL, 3UL, 4UL, 1UL, false, true); GT_SPMPARSE_TEST_LINE_A_OK("4 + 5 + 6 7 1", 4UL, 5UL, 6UL, 7UL, 1UL, true, true); gt_error_delete(parse_err); return had_err; } static int gt_spmlist_parse_unit_test(GtError *err) { int had_err = 0; gt_error_check(err); had_err = parse_plusminus_unit_test(err); if (!had_err) had_err = parse_line_unit_test(err); return had_err; } void gt_spmproc_show_ascii(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *data) { GtFile *file = data; gt_file_xprintf(file, "%lu %s %lu %s %lu\n", suffix_seqnum, suffixseq_direct ? "+" : "-", prefix_seqnum, prefixseq_direct ? "+" : "-", length); } void gt_spmproc_a_show_ascii(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long suffix_length, unsigned long prefix_length, unsigned long unit_edist, bool suffixseq_direct, bool prefixseq_direct, void *data) { GtFile *file = data; gt_file_xprintf(file, "%lu %s %lu %s %lu %lu %lu\n", suffix_seqnum, suffixseq_direct ? "+" : "-", prefix_seqnum, prefixseq_direct ? "+" : "-", suffix_length, prefix_length, unit_edist); } /* ---------------------- Unit Test ---------------------- */ static void spmproc_show_caller(GtSpmproc proc, void *data) { proc(0UL, 1UL, 10UL, true, true, data); proc(0UL, 2UL, 10UL, true, false, data); proc(2UL, 0UL, 10UL, false, true, data); proc(1UL, 0UL, 10UL, false, true, data); } static void spmproc_a_show_caller(GtSpmprocA proc, void *data) { proc(0UL, 1UL, 10UL, 11UL, 1UL, true, true, data); proc(0UL, 2UL, 10UL, 10UL, 0UL, true, false, data); proc(2UL, 0UL, 10UL, 12UL, 2UL, false, true, data); proc(1UL, 0UL, 11UL, 11UL, 0UL, false, true, data); } static int gt_spmproc_show_unit_test(GtError *err) { int had_err = 0; GT_ENSURE_OUTPUT_DECLARE(100); gt_error_check(err); GT_ENSURE_OUTPUT( spmproc_show_caller(gt_spmproc_show_ascii, outfp), "0 + 1 + 10\n0 + 2 - 10\n2 - 0 + 10\n1 - 0 + 10\n"); if (!had_err) { GT_ENSURE_OUTPUT( spmproc_a_show_caller(gt_spmproc_a_show_ascii, outfp), "0 + 1 + 10 11 1\n0 + 2 - 10 10 0\n" "2 - 0 + 10 12 2\n1 - 0 + 11 11 0\n"); } return had_err; } int gt_spmlist_unit_test(GtError *err) { int had_err = 0; had_err = gt_spmproc_show_unit_test(err); if (had_err == 0) had_err = gt_spmlist_parse_unit_test(err); return had_err; } genometools-1.5.1/src/match/rdj-spmlist.h000066400000000000000000000044671211610345200203630ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_SPMLIST_H #define RDJ_SPMLIST_H #include "core/error_api.h" #include "match/rdj-spmproc.h" /* header byte: */ typedef enum { GT_SPMLIST_BIN32 = 2, GT_SPMLIST_BIN64 = 3, GT_SPMLIST_ASCII /* = any other value */, } GtSpmlistFormat; #define DECLARE_GT_SPMLIST_BIN_FORMAT(BITS)\ void gt_spmlist_write_header_bin ## BITS(FILE *file);\ void gt_spmproc_show_bin ## BITS(unsigned long suffix_seqnum,\ unsigned long prefix_seqnum, unsigned long length, bool suffixseq_direct,\ bool prefixseq_direct, void *file) DECLARE_GT_SPMLIST_BIN_FORMAT(32); DECLARE_GT_SPMLIST_BIN_FORMAT(64); /* parse a spmlist file; format is recognized by reading the first byte */ int gt_spmlist_parse(const char* filename, unsigned long min_length, GtSpmproc processoverlap, void *data, GtError *err); void gt_spmproc_show_ascii(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *data /* GtFile */); /* approx overlaps: */ int gt_spmlist_approx_parse(const char* filename, unsigned long min_length, GtSpmprocA processoverlap, void *data, GtError *err); void gt_spmproc_a_show_ascii(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long suffix_length, unsigned long prefix_length, unsigned long unit_edist, bool suffixseq_direct, bool prefixseq_direct, void *data /* GtFile */); /* tests */ int gt_spmlist_unit_test(GtError *err); #endif genometools-1.5.1/src/match/rdj-spmproc.c000066400000000000000000000110711211610345200203330ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "match/rdj-spmproc.h" /* for unit test: */ #include "core/unused_api.h" #include "core/ensure.h" void gt_spmproc_a_e(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long suffix_length, GT_UNUSED unsigned long prefix_length, unsigned long unit_edist, bool suffixseq_direct, bool prefixseq_direct, void *data) { GtSpmprocWithData* a_e_data = data; if (unit_edist == 0) { a_e_data->proc(suffix_seqnum, prefix_seqnum, suffix_length, suffixseq_direct, prefixseq_direct, a_e_data->data); } } void gt_spmproc_skip(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *data) { GtSpmprocSkipData *d = data; if (d->to_skip != NULL) { if ((bool)GT_ISIBITSET(d->to_skip, suffix_seqnum) || (bool)GT_ISIBITSET(d->to_skip, prefix_seqnum)) { d->skipped_counter++; return; } } if (d->out.e.proc != NULL) { d->out.e.proc(suffix_seqnum, prefix_seqnum, length, suffixseq_direct, prefixseq_direct, d->out.e.data); } } void gt_spmproc_a_skip(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long suffix_length, unsigned long prefix_length, unsigned long unit_edist, bool suffixseq_direct, bool prefixseq_direct, void *data) { GtSpmprocSkipData *d = data; if (d->to_skip != NULL) { if ((bool)GT_ISIBITSET(d->to_skip, suffix_seqnum) || (bool)GT_ISIBITSET(d->to_skip, prefix_seqnum)) { d->skipped_counter++; return; } } if (d->out.a.proc != NULL) { d->out.a.proc(suffix_seqnum, prefix_seqnum, suffix_length, prefix_length, unit_edist, suffixseq_direct, prefixseq_direct, d->out.a.data); } } /* unit test */ static void outproc(GT_UNUSED unsigned long suffix_seqnum, GT_UNUSED unsigned long prefix_seqnum, GT_UNUSED unsigned long length, GT_UNUSED bool suffixseq_direct, GT_UNUSED bool prefixseq_direct, void *data) { *(bool *)data = false; } static void outproc_a(GT_UNUSED unsigned long suffix_seqnum, GT_UNUSED unsigned long prefix_seqnum, GT_UNUSED unsigned long suffix_length, GT_UNUSED unsigned long prefix_length, GT_UNUSED unsigned long unit_edist, GT_UNUSED bool suffixseq_direct, GT_UNUSED bool prefixseq_direct, void *data) { *(bool *)data = false; } #define GT_SPMPROC_SKIP_TEST(SN,PN,EXP)\ skipped = true;\ d.out.e.proc = outproc;\ d.out.e.data = &skipped;\ gt_spmproc_skip((SN), (PN), 100UL, false, true, &d);\ if (EXP) gt_ensure(had_err, skipped);\ else gt_ensure(had_err, !skipped);\ skipped = true;\ d.out.a.proc = outproc_a;\ d.out.a.data = &skipped;\ gt_spmproc_a_skip((SN), (PN), 100UL, 101UL, 1UL, true, false, &d);\ if (EXP) gt_ensure(had_err, skipped);\ else gt_ensure(had_err, !skipped) int gt_spmproc_skip_unit_test(GtError *err) { int had_err = 0; GtSpmprocSkipData d; bool skipped; gt_error_check(err); GT_INITBITTAB(d.to_skip, 4); GT_SETIBIT(d.to_skip, 1); GT_SETIBIT(d.to_skip, 2); GT_SPMPROC_SKIP_TEST(0UL, 1UL, true); GT_SPMPROC_SKIP_TEST(1UL, 2UL, true); GT_SPMPROC_SKIP_TEST(2UL, 3UL, true); GT_SPMPROC_SKIP_TEST(0UL, 3UL, false); gt_free(d.to_skip); return had_err; } void gt_spmproc_show_count(GT_UNUSED unsigned long suffix_seqnum, GT_UNUSED unsigned long prefix_seqnum, GT_UNUSED unsigned long length, GT_UNUSED bool suffixseq_direct, GT_UNUSED bool prefixseq_direct, void *data) { unsigned long long *counter = data; (*counter)++; } genometools-1.5.1/src/match/rdj-spmproc.h000066400000000000000000000061451211610345200203460ustar00rootroot00000000000000/* Copyright (c) 2009-2011 Giorgio Gonnella Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_SPMPROC_H #define RDJ_SPMPROC_H #include #include "core/intbits.h" /* GtBitsequence */ #include "core/error_api.h" /* GtError */ /* Prototype for functions processing exact/approximate overlaps */ /* Exact: */ typedef void(*GtSpmproc)(unsigned long /*suffix_seqnum*/, unsigned long /*prefix_seqnum*/, unsigned long /*length*/, bool /*suffixseq_direct*/, bool /*prefixseq_direct*/, void* /*data*/); /* Approximate: */ typedef void(*GtSpmprocA)(unsigned long /*suffix_seqnum*/, unsigned long /*prefix_seqnum*/, unsigned long /*suffix_length*/, unsigned long /*prefix_length*/, unsigned long /*unit_edist*/, bool /*suffixseq_direct*/, bool /*prefixseq_direct*/, void* /*data*/); /* structs containing an spmproc and its data */ typedef struct {GtSpmproc proc; void *data;} GtSpmprocWithData; typedef struct {GtSpmprocA proc; void *data;} GtSpmprocAWithData; typedef union {GtSpmprocWithData e; GtSpmprocAWithData a;} GtSpmprocXWithData; /* allow to use GtSpmproc where GtSpmprocA is expected skipping overlaps with unit edist > 0; data must be a pointer to GtSpmprocWithData */ void gt_spmproc_a_e(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long suffix_length, unsigned long prefix_length, unsigned long unit_edist, bool suffixseq_direct, bool prefixseq_direct, void *data); void gt_spmproc_count(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *data); /* Given a GtBitsequence (large as the number of reads), acts as a filter and calls the Spmproc outproc if the bit for both seqnums is not set. The void* data must be of type GtSpmprocSkipData. */ typedef struct { GtBitsequence *to_skip; GtSpmprocXWithData out; unsigned long skipped_counter; } GtSpmprocSkipData; void gt_spmproc_skip(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *data); void gt_spmproc_a_skip(unsigned long suffix_seqnum, unsigned long prefix_seqnum, unsigned long suffix_length, unsigned long prefix_length, unsigned long unit_edist, bool suffixseq_direct, bool prefixseq_direct, void *data); int gt_spmproc_skip_unit_test(GtError *err); #endif genometools-1.5.1/src/match/rdj-ssar.c000066400000000000000000000047031211610345200176240ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/fileutils_api.h" #include "match/rdj-ssar.h" #define GT_READJOINER_CHECK_FILE(SUFFIX)\ filename = gt_str_clone(indexname);\ gt_str_append_cstr(filename, SUFFIX);\ if (!gt_file_exists(gt_str_get(filename)))\ {\ gt_error_set(err, "file \"%s\" does not exist "\ "or is not readable", gt_str_get(filename));\ gt_str_delete(filename);\ return NULL;\ }\ gt_str_delete(filename) Sequentialsuffixarrayreader* gt_readjoiner_ssar_new(GtStr *indexname, bool esqtab, bool mapped, GtLogger *logger, GtError *err) { Sequentialsuffixarrayreader *ssar; GtStr *filename; /*@i1@*/ gt_error_check(err); /* check that necessary files are available */ GT_READJOINER_CHECK_FILE(".suf"); GT_READJOINER_CHECK_FILE(".lcp"); GT_READJOINER_CHECK_FILE(".llv"); GT_READJOINER_CHECK_FILE(".al1"); GT_READJOINER_CHECK_FILE(".prj"); if (esqtab) { GT_READJOINER_CHECK_FILE(".esq"); } /* ".ssp" is not checked as not present for sat eqlen */ ssar = gt_newSequentialsuffixarrayreaderfromfile( gt_str_get(indexname), esqtab ? SARR_LCPTAB |SARR_SUFTAB | SARR_SSPTAB | SARR_ESQTAB : SARR_LCPTAB |SARR_SUFTAB | SARR_SSPTAB, mapped ? SEQ_mappedboth : SEQ_scan, logger, err); if (gt_error_is_set(err)) { if (ssar != NULL) gt_freeSequentialsuffixarrayreader(&ssar); return NULL; } else { return ssar; } } void gt_readjoiner_ssar_delete(Sequentialsuffixarrayreader *ssar) { if (ssar != NULL) gt_freeSequentialsuffixarrayreader(&ssar); } genometools-1.5.1/src/match/rdj-ssar.h000066400000000000000000000023171211610345200176300ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_SSAR_H #define RDJ_SSAR_H #include "match/esa-seqread.h" /* Sequentialsuffixarrayreader */ #include "core/error_api.h" /* GtError */ Sequentialsuffixarrayreader* gt_readjoiner_ssar_new(GtStr *indexname, bool esqtab, bool mapped, GtLogger *logger, GtError *err); void gt_readjoiner_ssar_delete(Sequentialsuffixarrayreader *ssar); #endif genometools-1.5.1/src/match/rdj-strgraph-counts-char-def.h000066400000000000000000000127051211610345200234740ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_STRGRAPH_COUNTS_CHAR_DEF_H #define RDJ_STRGRAPH_COUNTS_CHAR_DEF_H #include #include "core/hashmap-generic.h" /* --- for exclusive use in rdj-strgraph.c (__ = private) --- */ #define GT_STRGRAPH_COUNTS_REPRESENTATION "char array + hash table" typedef unsigned char GtStrgraphCount__Small; typedef unsigned long GtStrgraphCount__Large; typedef GtStrgraphCount__Large GtStrgraphCount; #define FormatGtStrgraphCount "%lu" #define PRINTGtStrgraphCountcast(X) (X) #define SCANGtStrgraphCountcast(X) (X) #define GT_STRGRAPH_COUNT_MAX ULONG_MAX /* hash map for large counts: vertex number -> count */ DECLARE_HASHMAP(GtStrgraphVnum, v, GtStrgraphCount__Large, c_, static, inline); DEFINE_HASHMAP(GtStrgraphVnum, v, GtStrgraphCount__Large, c_, gt_ht_ul_elem_hash, gt_ht_ul_elem_cmp, NULL_DESTRUCTOR, NULL_DESTRUCTOR, static, inline); #define GT_STRGRAPH_DECLARE_COUNTS\ GtStrgraphCount__Small *__small_counts;\ GtHashtable *__large_counts;\ GtStrgraphVnum __n_counts #define GT_STRGRAPH__COUNT_IS_LARGE ((GtStrgraphCount__Small)255) #define GT_STRGRAPH_ALLOC_COUNTS(STRGRAPH, NOFVERTICES)\ (STRGRAPH)->__small_counts = gt_calloc((size_t)(NOFVERTICES),\ sizeof (*(STRGRAPH)->__small_counts));\ (STRGRAPH)->__large_counts = v_c__gt_hashmap_new();\ (STRGRAPH)->__n_counts = (NOFVERTICES) #define GT_STRGRAPH_FREE_COUNTS(STRGRAPH)\ gt_free((STRGRAPH)->__small_counts);\ (STRGRAPH)->__small_counts = NULL;\ if ((STRGRAPH)->__large_counts != NULL)\ v_c__gt_hashmap_delete((STRGRAPH)->__large_counts);\ (STRGRAPH)->__large_counts = NULL #define GT_STRGRAPH_GET_COUNT(STRGRAPH, POSITION) \ (((STRGRAPH)->__small_counts[(POSITION)] < GT_STRGRAPH__COUNT_IS_LARGE)\ ? (GtStrgraphCount)((STRGRAPH)->__small_counts[(POSITION)]) \ : (GtStrgraphCount)*v_c__gt_hashmap_get((STRGRAPH)->__large_counts,\ (POSITION))) #define GT_STRGRAPH__SET_COUNT(STRGRAPH, POSITION, VALUE) \ if ((VALUE) < (GtStrgraphCount)GT_STRGRAPH__COUNT_IS_LARGE)\ {\ ((STRGRAPH)->__small_counts[(POSITION)] = (GtStrgraphCount__Small)(VALUE));\ }\ else\ {\ ((STRGRAPH)->__small_counts[(POSITION)] = GT_STRGRAPH__COUNT_IS_LARGE);\ v_c__gt_hashmap_add((STRGRAPH)->__large_counts, (POSITION), (VALUE));\ }\ #define GT_STRGRAPH_INC_COUNT(STRGRAPH, POSITION) \ if ((STRGRAPH)->__small_counts[(POSITION)] < GT_STRGRAPH__COUNT_IS_LARGE -\ (GtStrgraphCount__Small)1)\ ((STRGRAPH)->__small_counts[(POSITION)])++; \ else if ((STRGRAPH)->__small_counts[(POSITION)] == \ GT_STRGRAPH__COUNT_IS_LARGE - (GtStrgraphCount__Small)1) \ { \ (STRGRAPH)->__small_counts[(POSITION)] = GT_STRGRAPH__COUNT_IS_LARGE;\ gt_assert(v_c__gt_hashmap_get((STRGRAPH)->__large_counts,\ (POSITION)) == NULL);\ v_c__gt_hashmap_add((STRGRAPH)->__large_counts, (POSITION),\ (GtStrgraphCount__Large)GT_STRGRAPH__COUNT_IS_LARGE);\ } \ else\ {\ gt_assert((STRGRAPH)->__small_counts[(POSITION)] == \ GT_STRGRAPH__COUNT_IS_LARGE);\ gt_assert(v_c__gt_hashmap_get((STRGRAPH)->__large_counts,\ (POSITION)) != NULL);\ (*v_c__gt_hashmap_get((STRGRAPH)->__large_counts, (POSITION)))++;\ } enum iterator_op gt_strgraph__save_large_count(GtStrgraphVnum vnum, GtStrgraphCount__Large count, GtFile *outfp, GT_UNUSED GtError *err) { gt_file_xwrite(outfp, &vnum, sizeof (GtStrgraphVnum)); gt_file_xwrite(outfp, &count, sizeof (GtStrgraphCount__Large)); return CONTINUE_ITERATION; } #define GT_STRGRAPH_SERIALIZE_COUNTS(STRGRAPH, FP) \ GT_STRGRAPH_SERIALIZE_DATA((FP), (STRGRAPH)->__n_counts,\ (STRGRAPH)->__small_counts);\ (void)v_c__gt_hashmap_foreach((STRGRAPH)->__large_counts,\ (v_c__gt_hashmap_iteratorfunc)gt_strgraph__save_large_count,\ (FP), NULL) #define GT_STRGRAPH__DESERIALIZE_LARGE_COUNTS(STRGRAPH, FP) \ {\ GtStrgraphVnum __large_count_vnum;\ GtStrgraphCount__Large __large_count = 0;\ GT_UNUSED int __large_count_read_retval;\ \ while (gt_file_xread((FP), &__large_count_vnum,\ sizeof (__large_count_vnum)) == (int)sizeof (__large_count_vnum))\ {\ __large_count_read_retval = gt_file_xread((FP), &__large_count, \ sizeof (__large_count));\ gt_assert(__large_count_read_retval == (int)sizeof (__large_count));\ GT_STRGRAPH__SET_COUNT((STRGRAPH), __large_count_vnum, __large_count);\ }\ } #define GT_STRGRAPH_DESERIALIZE_COUNTS(STRGRAPH, FP) \ GT_STRGRAPH_DESERIALIZE_DATA((FP), \ (STRGRAPH)->__n_counts, (STRGRAPH)->__small_counts);\ GT_STRGRAPH__DESERIALIZE_LARGE_COUNTS(STRGRAPH, FP) #endif genometools-1.5.1/src/match/rdj-strgraph-edges-bitfield-def.h000066400000000000000000000135361211610345200241200ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_STRGRAPH_EDGES_BITFIELD_DEF_H #define RDJ_STRGRAPH_EDGES_BITFIELD_DEF_H #define GT_STRGRAPH_EDGES_REPRESENTATION "bitfield" typedef unsigned long GtStrgraphLength; #define FormatGtStrgraphLength "%lu" #define PRINTGtStrgraphLengthcast(X) (X) #define SCANGtStrgraphLengthcast(X) (X) #define GT_STRGRAPH__LEN_BITS 18 #define GT_STRGRAPH_LENGTH_MAX \ ((GtStrgraphLength)(1UL << GT_STRGRAPH__LEN_BITS) - 1) #define GT_STRGRAPH__DEST_BITS 44 #ifndef S_SPLINT_S #define GT_STRGRAPH__DEST_MAX ((1ULL << GT_STRGRAPH__DEST_BITS) - 1) #else #define GT_STRGRAPH__DEST_MAX ULONG_MAX #endif #if GT_STRGRAPH__DEST_MAX >= ULONG_MAX #define GT_STRGRAPH_N_READS_MAX (unsigned long)(GT_STRGRAPH__DEST_MAX >> 1) #else #define GT_STRGRAPH_N_READS_MAX (ULONG_MAX >> 1) #endif typedef struct { GtStrgraphVnum __dest :GT_STRGRAPH__DEST_BITS; GtStrgraphLength __len :GT_STRGRAPH__LEN_BITS; bool __reduced :1; bool __mark :1; } GtStrgraph__Edge; #define GT_STRGRAPH_DECLARE_EDGES \ GtStrgraphEdgenum __n_edges;\ GtStrgraph__Edge *__e #define GT_STRGRAPH__EDGE_NOT_REDUCED false #define GT_STRGRAPH__EDGE_REDUCED true #define GT_STRGRAPH__EDGE_NOT_MARKED false #define GT_STRGRAPH__EDGE_MARKED true #define GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, N) \ ((STRGRAPH)->__e + GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, N)) /* edge accessor macros */ #define GT_STRGRAPH_EDGE_SET_DEST(STRGRAPH, V, EDGENUM, DEST) \ GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, EDGENUM)->__dest = (DEST) #define GT_STRGRAPH_EDGE_DEST(STRGRAPH, V, EDGENUM) \ ((GtStrgraphVnum)(GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, EDGENUM)->__dest)) #define GT_STRGRAPH_EDGE_SET_LEN(STRGRAPH, V, EDGENUM, LEN) \ GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, EDGENUM)->__len = (LEN) #define GT_STRGRAPH_EDGE_LEN(STRGRAPH, V, EDGENUM) \ ((GtStrgraphLength)(GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, EDGENUM)->__len)) #define GT_STRGRAPH_EDGE_INIT(STRGRAPH, V, EDGENUM) \ GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, EDGENUM)->__reduced = \ GT_STRGRAPH__EDGE_NOT_REDUCED; \ GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, EDGENUM)->__mark = \ GT_STRGRAPH__EDGE_NOT_MARKED #define GT_STRGRAPH_EDGE_SET_MARK(STRGRAPH, V, EDGENUM) \ GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, EDGENUM)->__mark = \ GT_STRGRAPH__EDGE_MARKED #define GT_STRGRAPH_EDGE_HAS_MARK(STRGRAPH, V, EDGENUM) \ ((GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, EDGENUM)->__mark == \ GT_STRGRAPH__EDGE_MARKED) ? true : false) #define GT_STRGRAPH_EDGE_REDUCE(STRGRAPH, V, EDGENUM) \ (GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, EDGENUM)->__reduced = \ GT_STRGRAPH__EDGE_REDUCED) #define GT_STRGRAPH_EDGE_IS_REDUCED(STRGRAPH, V, EDGENUM) \ (GT_STRGRAPH__V_NTH_EDGE(STRGRAPH, V, EDGENUM)->__reduced == \ GT_STRGRAPH__EDGE_REDUCED) #define GT_STRGRAPH_NOFEDGES(STRGRAPH) \ ((STRGRAPH)->__n_edges) #define GT_STRGRAPH_SET_NOFEDGES(STRGRAPH, VALUE) \ (STRGRAPH)->__n_edges = (VALUE) #define GT_STRGRAPH__SIZEOF_EDGE \ (sizeof (GtStrgraph__Edge)) #define GT_STRGRAPH_SIZEOF_EDGES(STRGRAPH) \ (GT_STRGRAPH__SIZEOF_EDGE * GT_STRGRAPH_NOFEDGES(STRGRAPH) +\ sizeof ((STRGRAPH)->__n_edges)) #define GT_STRGRAPH_ALLOC_EDGES(STRGRAPH)\ (STRGRAPH)->__e = gt_calloc((size_t)GT_STRGRAPH_NOFEDGES(STRGRAPH),\ sizeof (*(STRGRAPH)->__e)) #define GT_STRGRAPH_SHRINK_EDGES(STRGRAPH, NEWSIZE)\ do {\ gt_assert((NEWSIZE) < GT_STRGRAPH_NOFEDGES(STRGRAPH));\ GT_STRGRAPH_SET_NOFEDGES(STRGRAPH, NEWSIZE);\ if ((NEWSIZE) == 0)\ {\ GT_STRGRAPH_FREE_EDGES(STRGRAPH);\ }\ else\ {\ (STRGRAPH)->__e = \ gt_realloc((STRGRAPH)->__e, GT_STRGRAPH_NOFEDGES(STRGRAPH) * \ sizeof (*(STRGRAPH)->__e));\ }\ } while (false) #define GT_STRGRAPH_FREE_EDGES(STRGRAPH)\ gt_free((STRGRAPH)->__e);\ (STRGRAPH)->__e = NULL #define GT_STRGRAPH_COPY_EDGE(STRGRAPH, OFFSET_SOURCE, OFFSET_DEST)\ (STRGRAPH)->__e[OFFSET_DEST] = (STRGRAPH)->__e[OFFSET_SOURCE] /* order by length from < to > */ int gt_strgraph_edges_compare_by_length(const void *edgea, const void *edgeb) { const GtStrgraph__Edge *a = edgea, *b = edgeb; return (int)(a->__len > b->__len) - (int)(a->__len < b->__len); } #define GT_STRGRAPH_SORT_V_EDGES(STRGRAPH, VNUM)\ do {\ GtStrgraphVEdgenum v_nofedges;\ v_nofedges = GT_STRGRAPH_V_NOFEDGES(STRGRAPH, VNUM);\ if (v_nofedges > (GtStrgraphVEdgenum)1)\ qsort((STRGRAPH)->__e + GT_STRGRAPH_V_OFFSET(STRGRAPH, VNUM),\ (size_t)v_nofedges, sizeof (*(STRGRAPH)->__e),\ gt_strgraph_edges_compare_by_length);\ } while (false) #define GT_STRGRAPH_SERIALIZE_EDGES(STRGRAPH, FP)\ GT_STRGRAPH_SERIALIZE_DATA((FP), \ GT_STRGRAPH_NOFEDGES(STRGRAPH), (STRGRAPH)->__e) #define GT_STRGRAPH_DESERIALIZE_EDGES(STRGRAPH, FP)\ GT_STRGRAPH_DESERIALIZE_DATA((FP), \ GT_STRGRAPH_NOFEDGES(STRGRAPH), (STRGRAPH)->__e) #define GT_STRGRAPH_FIND_LONGEST_EDGE(STRGRAPH, VNUM, LONGEST) \ LONGEST = GT_STRGRAPH_EDGE_LEN(STRGRAPH, VNUM, \ GT_STRGRAPH_V_NOFEDGES(STRGRAPH, VNUM) - 1); #endif genometools-1.5.1/src/match/rdj-strgraph-edges-bitpack-def.h000066400000000000000000000241051211610345200237450ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_STRGRAPH_EDGES_BITPACK_DEF_H #define RDJ_STRGRAPH_EDGES_BITPACK_DEF_H #include #include "core/bitpackarray.h" #include "core/intbits.h" #define GT_STRGRAPH_EDGES_REPRESENTATION "bitpack" typedef uint64_t GtStrgraphLength; #define FormatGtStrgraphLength Formatuint64_t #define PRINTGtStrgraphLengthcast(X) PRINTuint64_tcast(X) #define SCANGtStrgraphLengthcast(X) SCANuint64_tcast(X) /* LENGTH_MAX is limited by __e_len */ #define GT_STRGRAPH_LENGTH_MAX (GtStrgraphLength)UINT64_MAX #if UINT64_MAX >= ULONG_MAX /* N_READS_MAX is limited by read numbers in the encseq */ #define GT_STRGRAPH_N_READS_MAX ((ULONG_MAX >> 1) - 1) #else /* N_READS_MAX is limited by __e_dest */ #define GT_STRGRAPH_N_READS_MAX (unsigned long)((UINT64_MAX >> 1) - 1) #endif #define GT_STRGRAPH_DECLARE_EDGES\ BitPackArray *__e_len;\ BitPackArray *__e_dest;\ GtBitsequence *__e_mark;\ GtStrgraphLength __len_max;\ GtStrgraphEdgenum __n_edges #define GT_STRGRAPH_SET_NOFEDGES(STRGRAPH, VALUE) \ (STRGRAPH)->__n_edges = (VALUE) #define GT_STRGRAPH_NOFEDGES(STRGRAPH) \ ((STRGRAPH)->__n_edges) #define GT_STRGRAPH__LEN_BITS(STRGRAPH)\ (gt_requiredUInt64Bits((STRGRAPH)->__len_max)) #define GT_STRGRAPH__UNDEF_EDGE_LEN(STRGRAPH) \ ((STRGRAPH)->__len_max) #define GT_STRGRAPH__EDGE_REDUCED(STRGRAPH) \ GT_STRGRAPH__UNDEF_EDGE_LEN(STRGRAPH) #define GT_STRGRAPH__ALLOC_LENGTHSLIST(STRGRAPH)\ (STRGRAPH)->__len_max = gt_strgraph_longest_read(STRGRAPH) - \ (STRGRAPH)->minmatchlen + 1;\ (STRGRAPH)->__e_len = bitpackarray_new(GT_STRGRAPH__LEN_BITS(STRGRAPH),\ (BitOffset)GT_STRGRAPH_NOFEDGES(STRGRAPH), true) #define GT_STRGRAPH__DEST_BITS(STRGRAPH)\ (gt_requiredUInt64Bits(GT_STRGRAPH_NOFVERTICES(STRGRAPH))) #define GT_STRGRAPH__ALLOC_NEIGHBOURSLIST(STRGRAPH)\ (STRGRAPH)->__e_dest = bitpackarray_new(GT_STRGRAPH__DEST_BITS(STRGRAPH),\ (BitOffset)GT_STRGRAPH_NOFEDGES(STRGRAPH), true) #define GT_STRGRAPH_ALLOC_EDGES(STRGRAPH)\ GT_STRGRAPH__ALLOC_NEIGHBOURSLIST(STRGRAPH);\ GT_STRGRAPH__ALLOC_LENGTHSLIST(STRGRAPH);\ GT_INITBITTAB((STRGRAPH)->__e_mark, GT_STRGRAPH_NOFEDGES(STRGRAPH)) #define GT_STRGRAPH__SIZEOF_LENGTHSLIST(STRGRAPH)\ (sizeofbitarray(GT_STRGRAPH__LEN_BITS(STRGRAPH),\ (BitOffset)GT_STRGRAPH_NOFEDGES(STRGRAPH))) #define GT_STRGRAPH__SIZEOF_NEIGHBOURSLIST(STRGRAPH)\ (sizeofbitarray(GT_STRGRAPH__DEST_BITS(STRGRAPH),\ (BitOffset)GT_STRGRAPH_NOFEDGES(STRGRAPH))) #define GT_STRGRAPH__SIZEOF_TOREDUCELIST(STRGRAPH)\ (sizeof (GtBitsequence) * \ GT_NUMOFINTSFORBITS(GT_STRGRAPH_NOFEDGES(STRGRAPH))) #define GT_STRGRAPH_SIZEOF_EDGES(STRGRAPH) \ (sizeof ((STRGRAPH)->__e_len)+\ GT_STRGRAPH__SIZEOF_LENGTHSLIST(STRGRAPH) +\ sizeof ((STRGRAPH)->__len_max)+\ sizeof ((STRGRAPH)->__e_dest)+\ GT_STRGRAPH__SIZEOF_NEIGHBOURSLIST(STRGRAPH) +\ sizeof ((STRGRAPH)->__e_mark)+\ GT_STRGRAPH__SIZEOF_TOREDUCELIST(STRGRAPH)+\ sizeof ((STRGRAPH)->__n_edges)) #define GT_STRGRAPH_SERIALIZE_EDGES(STRGRAPH, FP)\ do {\ GT_STRGRAPH_SERIALIZE_DATA((FP),\ bitElemsAllocSize(GT_STRGRAPH__DEST_BITS(STRGRAPH) * \ GT_STRGRAPH_NOFEDGES(STRGRAPH)), (STRGRAPH)->__e_dest);\ GT_STRGRAPH_SERIALIZE_DATA((FP), \ bitElemsAllocSize(GT_STRGRAPH__LEN_BITS(STRGRAPH) * \ GT_STRGRAPH_NOFEDGES(STRGRAPH)), (STRGRAPH)->__e_len);\ GT_STRGRAPH_SERIALIZE_DATA((FP),\ GT_NUMOFINTSFORBITS(GT_STRGRAPH_NOFEDGES(STRGRAPH)),\ (STRGRAPH)->__e_mark);\ } while (false) #define GT_STRGRAPH_DESERIALIZE_EDGES(STRGRAPH, FP)\ do {\ GT_STRGRAPH_DESERIALIZE_DATA((FP),\ bitElemsAllocSize(GT_STRGRAPH__DEST_BITS(STRGRAPH) * \ GT_STRGRAPH_NOFEDGES(STRGRAPH)), (STRGRAPH)->__e_dest);\ GT_STRGRAPH_DESERIALIZE_DATA((FP), \ bitElemsAllocSize(GT_STRGRAPH__LEN_BITS(STRGRAPH) * \ GT_STRGRAPH_NOFEDGES(STRGRAPH)), (STRGRAPH)->__e_len);\ GT_STRGRAPH_DESERIALIZE_DATA((FP),\ GT_NUMOFINTSFORBITS(GT_STRGRAPH_NOFEDGES(STRGRAPH)),\ (STRGRAPH)->__e_mark);\ } while (false) #define GT_STRGRAPH_SHRINK_EDGES(STRGRAPH, NEWSIZE)\ do {\ gt_assert((NEWSIZE) < GT_STRGRAPH_NOFEDGES(STRGRAPH));\ GT_STRGRAPH_SET_NOFEDGES(STRGRAPH, NEWSIZE);\ if ((NEWSIZE) == 0)\ {\ GT_STRGRAPH_FREE_EDGES(STRGRAPH);\ }\ else\ {\ /* XXX: realloc of __e_dest and __e_len not implemented */\ (STRGRAPH)->__e_mark = gt_realloc((STRGRAPH)->__e_mark,\ sizeof (*(STRGRAPH)->__e_mark) * \ GT_NUMOFINTSFORBITS(GT_STRGRAPH_NOFEDGES(STRGRAPH)));\ }\ } while (false) #define GT_STRGRAPH_FREE_EDGES(STRGRAPH)\ bitpackarray_delete((STRGRAPH)->__e_dest);\ bitpackarray_delete((STRGRAPH)->__e_len);\ gt_free((STRGRAPH)->__e_mark);\ (STRGRAPH)->__e_dest = NULL;\ (STRGRAPH)->__e_len = NULL;\ (STRGRAPH)->__e_mark = NULL #define GT_STRGRAPH_EDGE_SET_DEST(STRGRAPH, V, EDGENUM, DEST) \ bitpackarray_store_uint64((STRGRAPH)->__e_dest,\ (BitOffset)GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM), (DEST)) #define GT_STRGRAPH_EDGE_DEST(STRGRAPH, V, EDGENUM) \ ((GtStrgraphVnum)(bitpackarray_get_uint64((STRGRAPH)->__e_dest,\ (BitOffset)GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM)))) #define GT_STRGRAPH_EDGE_SET_LEN(STRGRAPH, V, EDGENUM, LEN) \ bitpackarray_store_uint64((STRGRAPH)->__e_len,\ (BitOffset)GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM), (LEN)) #define GT_STRGRAPH_EDGE_LEN(STRGRAPH, V, EDGENUM) \ ((GtStrgraphLength)bitpackarray_get_uint64((STRGRAPH)->__e_len,\ (BitOffset)GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM))) #define GT_STRGRAPH_EDGE_INIT(STRGRAPH, V, EDGENUM) \ (GT_UNSETIBIT((STRGRAPH)->__e_mark,\ GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM))) #define GT_STRGRAPH_EDGE_SET_MARK(STRGRAPH, V, EDGENUM) \ (GT_SETIBIT((STRGRAPH)->__e_mark,\ GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM))) #define GT_STRGRAPH_EDGE_HAS_MARK(STRGRAPH, V, EDGENUM) \ (GT_ISIBITSET((STRGRAPH)->__e_mark,\ GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM))\ ? true : false) #define GT_STRGRAPH_EDGE_REDUCE(STRGRAPH, V, EDGENUM) \ GT_STRGRAPH_EDGE_SET_LEN(STRGRAPH, V, EDGENUM,\ GT_STRGRAPH__EDGE_REDUCED(STRGRAPH)) #define GT_STRGRAPH_EDGE_IS_REDUCED(STRGRAPH, V, EDGENUM) \ (GT_STRGRAPH_EDGE_LEN(STRGRAPH, V, EDGENUM) == \ GT_STRGRAPH__EDGE_REDUCED(STRGRAPH) \ ? true : false) #define GT_STRGRAPH_COPY_EDGE(STRGRAPH, OFFSET_SOURCE, OFFSET_DEST)\ do {\ bitpackarray_store_uint64((STRGRAPH)->__e_dest,\ (BitOffset)(OFFSET_DEST), bitpackarray_get_uint64((STRGRAPH->__e_dest),\ (BitOffset)(OFFSET_SOURCE)));\ bitpackarray_store_uint64((STRGRAPH)->__e_len,\ (BitOffset)(OFFSET_DEST), bitpackarray_get_uint64((STRGRAPH->__e_len),\ (BitOffset)(OFFSET_SOURCE)));\ if (GT_ISIBITSET((STRGRAPH)->__e_mark, OFFSET_SOURCE))\ {\ GT_SETIBIT((STRGRAPH)->__e_mark, OFFSET_DEST);\ }\ else\ {\ GT_UNSETIBIT((STRGRAPH)->__e_mark, OFFSET_DEST);\ }\ } while (false) /* order by length from < to > */ struct GtStrgraph__EdgeData { GtStrgraphVnum dest; GtStrgraphLength len; bool to_reduce; }; int gt_strgraph_edges_compare_by_length(const void *edgea, const void *edgeb) { const struct GtStrgraph__EdgeData *a = edgea, *b = edgeb; return (int)(a->len > b->len) - (int)(a->len < b->len); } #define GT_STRGRAPH_SORT_V_EDGES(STRGRAPH, VNUM)\ do {\ GtStrgraphVEdgenum v_nofedges, v_edges_i;\ struct GtStrgraph__EdgeData *v_edges;\ v_nofedges = GT_STRGRAPH_V_NOFEDGES(STRGRAPH, VNUM);\ if (v_nofedges > (GtStrgraphVEdgenum)1)\ {\ v_edges = gt_malloc(sizeof (*v_edges) * v_nofedges);\ for (v_edges_i = 0; v_edges_i < v_nofedges; v_edges_i++)\ {\ v_edges[v_edges_i].dest = \ GT_STRGRAPH_EDGE_DEST(STRGRAPH, VNUM, v_edges_i);\ v_edges[v_edges_i].len = \ GT_STRGRAPH_EDGE_LEN(STRGRAPH, VNUM, v_edges_i);\ v_edges[v_edges_i].to_reduce = \ GT_STRGRAPH_EDGE_HAS_MARK(STRGRAPH, VNUM, v_edges_i);\ }\ qsort(v_edges, v_nofedges, sizeof (*v_edges),\ gt_strgraph_edges_compare_by_length);\ for (v_edges_i = 0; v_edges_i < v_nofedges; v_edges_i++)\ {\ GT_STRGRAPH_EDGE_SET_DEST(STRGRAPH, VNUM, \ v_edges_i, v_edges[v_edges_i].dest);\ GT_STRGRAPH_EDGE_SET_LEN(STRGRAPH, VNUM, v_edges_i, \ v_edges[v_edges_i].len);\ GT_STRGRAPH_EDGE_INIT(STRGRAPH, VNUM, v_edges_i);\ if (v_edges[v_edges_i].to_reduce)\ GT_STRGRAPH_EDGE_SET_MARK(STRGRAPH, VNUM, v_edges_i);\ }\ gt_free(v_edges);\ }\ } while (false) #define GT_STRGRAPH_FIND_LONGEST_EDGE(STRGRAPH, VNUM, LONGEST) \ do {\ GtStrgraphVEdgenum ith_edge_before_last, vnofedges;\ vnofedges = GT_STRGRAPH_V_NOFEDGES(STRGRAPH, VNUM);\ LONGEST = (STRGRAPH)->__len_max;\ for (ith_edge_before_last = 0; ith_edge_before_last < vnofedges;\ ith_edge_before_last++)\ {\ if (!GT_STRGRAPH_EDGE_IS_REDUCED(STRGRAPH, VNUM, vnofedges -\ ith_edge_before_last - 1))\ {\ LONGEST = GT_STRGRAPH_EDGE_LEN(STRGRAPH, VNUM, vnofedges -\ ith_edge_before_last - 1);\ break;\ }\ }\ } while (false) #endif genometools-1.5.1/src/match/rdj-strgraph-edges-short-def.h000066400000000000000000000203261211610345200234700ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_STRGRAPH_EDGES_SHORT_DEF_H #define RDJ_STRGRAPH_EDGES_SHORT_DEF_H #include #include "core/intbits.h" /* * Representation of string graph edges for reads shorter * than 255 and less than 2**31 reads (about 2.1E9). */ #define GT_STRGRAPH_EDGES_REPRESENTATION "short" typedef unsigned char GtStrgraphLength; #define FormatGtStrgraphLength "%u" #define PRINTGtStrgraphLengthcast(X) (X) #define SCANGtStrgraphLengthcast(X) (X) #define GT_STRGRAPH__UNDEF_EDGE_LEN (GtStrgraphLength)UCHAR_MAX #define GT_STRGRAPH_LENGTH_MAX (GtStrgraphLength)(UCHAR_MAX-1) typedef uint32_t GtStrgraphVnum__Short; #if ULONG_MAX >= UINT32_MAX #define GT_STRGRAPH_N_READS_MAX (unsigned long)((UINT32_MAX >> 1) - 1) #else #define GT_STRGRAPH_N_READS_MAX ((ULONG_MAX >> 1) - 1) #endif #define GT_STRGRAPH_DECLARE_EDGES \ GtStrgraphLength *__e_len; \ GtStrgraphVnum__Short *__e_dest;\ GtBitsequence *__e_mark #define GT_STRGRAPH__EDGE_REDUCED GT_STRGRAPH__UNDEF_EDGE_LEN #define GT_STRGRAPH_EDGE_SET_DEST(STRGRAPH, V, EDGENUM, DEST) \ ((STRGRAPH)->__e_dest[GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM)] =\ (DEST)) #define GT_STRGRAPH_EDGE_DEST(STRGRAPH, V, EDGENUM) \ ((GtStrgraphVnum)\ ((STRGRAPH)->__e_dest[GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM)])) #define GT_STRGRAPH_EDGE_LEN(STRGRAPH, V, EDGENUM) \ ((GtStrgraphLength)\ ((STRGRAPH)->__e_len[GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM)])) #define GT_STRGRAPH_EDGE_SET_LEN(STRGRAPH, V, EDGENUM, LEN) \ ((STRGRAPH)->__e_len[GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM)] =\ (LEN)) #define GT_STRGRAPH_EDGE_INIT(STRGRAPH, V, EDGENUM) \ (GT_UNSETIBIT((STRGRAPH)->__e_mark,\ GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM))) #define GT_STRGRAPH_EDGE_SET_MARK(STRGRAPH, V, EDGENUM) \ (GT_SETIBIT((STRGRAPH)->__e_mark,\ GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM))) #define GT_STRGRAPH_EDGE_HAS_MARK(STRGRAPH, V, EDGENUM) \ (GT_ISIBITSET((STRGRAPH)->__e_mark,\ GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM))) #define GT_STRGRAPH_EDGE_REDUCE(STRGRAPH, V, EDGENUM) \ GT_STRGRAPH_EDGE_SET_LEN(STRGRAPH, V, EDGENUM, GT_STRGRAPH__EDGE_REDUCED) #define GT_STRGRAPH_EDGE_IS_REDUCED(STRGRAPH, V, EDGENUM) \ (GT_STRGRAPH_EDGE_LEN(STRGRAPH, V, EDGENUM) == GT_STRGRAPH__EDGE_REDUCED) #define GT_STRGRAPH_NOFEDGES(STRGRAPH) \ GT_STRGRAPH_V_OFFSET((STRGRAPH), GT_STRGRAPH_NOFVERTICES(STRGRAPH)) #define GT_STRGRAPH_SET_NOFEDGES(STRGRAPH, VALUE) \ GT_STRGRAPH_V_SET_OFFSET((STRGRAPH),\ GT_STRGRAPH_NOFVERTICES(STRGRAPH), (VALUE)) #define GT_STRGRAPH_ALLOC_EDGES(STRGRAPH)\ (STRGRAPH)->__e_dest = gt_calloc(GT_STRGRAPH_NOFEDGES(STRGRAPH),\ sizeof (*(STRGRAPH)->__e_dest));\ (STRGRAPH)->__e_len = gt_calloc(GT_STRGRAPH_NOFEDGES(STRGRAPH),\ sizeof (*(STRGRAPH)->__e_len));\ GT_INITBITTAB((STRGRAPH)->__e_mark, GT_STRGRAPH_NOFEDGES(STRGRAPH)) #define GT_STRGRAPH_SIZEOF_EDGES(STRGRAPH) \ (((sizeof (*(STRGRAPH)->__e_len) + sizeof (*(STRGRAPH)->__e_dest)) * \ GT_STRGRAPH_NOFEDGES(STRGRAPH)) + (sizeof (GtBitsequence) * \ GT_NUMOFINTSFORBITS(GT_STRGRAPH_NOFEDGES(STRGRAPH)))) #define GT_STRGRAPH_SHRINK_EDGES(STRGRAPH, NEWSIZE)\ gt_assert((NEWSIZE) < GT_STRGRAPH_NOFEDGES(STRGRAPH));\ GT_STRGRAPH_SET_NOFEDGES(STRGRAPH, NEWSIZE);\ if ((NEWSIZE) == 0)\ {\ GT_STRGRAPH_FREE_EDGES(STRGRAPH);\ }\ else\ {\ (STRGRAPH)->__e_dest = gt_realloc((STRGRAPH)->__e_dest,\ sizeof (*(STRGRAPH)->__e_dest) * GT_STRGRAPH_NOFEDGES(STRGRAPH));\ (STRGRAPH)->__e_len = gt_realloc((STRGRAPH)->__e_len,\ sizeof (*(STRGRAPH)->__e_len) * GT_STRGRAPH_NOFEDGES(STRGRAPH));\ (STRGRAPH)->__e_mark = gt_realloc((STRGRAPH)->__e_mark,\ sizeof (*(STRGRAPH)->__e_mark) * \ GT_NUMOFINTSFORBITS(GT_STRGRAPH_NOFEDGES(STRGRAPH)));\ } #define GT_STRGRAPH_FREE_EDGES(STRGRAPH)\ gt_free((STRGRAPH)->__e_dest);\ gt_free((STRGRAPH)->__e_len);\ gt_free((STRGRAPH)->__e_mark);\ (STRGRAPH)->__e_dest = NULL;\ (STRGRAPH)->__e_len = NULL;\ (STRGRAPH)->__e_mark = NULL #define GT_STRGRAPH_COPY_EDGE(STRGRAPH, OFFSET_SOURCE, OFFSET_DEST)\ (STRGRAPH)->__e_dest[OFFSET_DEST] = (STRGRAPH)->__e_dest[OFFSET_SOURCE];\ (STRGRAPH)->__e_len[OFFSET_DEST] = (STRGRAPH)->__e_len[OFFSET_SOURCE];\ if (GT_ISIBITSET((STRGRAPH)->__e_mark, OFFSET_SOURCE))\ {\ GT_SETIBIT((STRGRAPH)->__e_mark, OFFSET_DEST);\ }\ else\ {\ GT_UNSETIBIT((STRGRAPH)->__e_mark, OFFSET_DEST);\ } /* order by length from < to > */ struct GtStrgraphEdgeData { GtStrgraphVnum__Short n; GtStrgraphLength len; bool to_reduce; }; int gt_strgraph_edges_compare_by_length(const void *edgea, const void *edgeb) { const struct GtStrgraphEdgeData *a = edgea, *b = edgeb; return (int)(a->len > b->len) - (int)(a->len < b->len); } #define GT_STRGRAPH_SORT_V_EDGES(STRGRAPH, VNUM)\ {\ uint64_t v_nofedges, v_edges_i;\ struct GtStrgraphEdgeData *v_edges;\ v_nofedges = GT_STRGRAPH_V_NOFEDGES(STRGRAPH, VNUM);\ if (v_nofedges > (uint64_t)1)\ {\ v_edges = gt_malloc(sizeof (*v_edges) * v_nofedges);\ for (v_edges_i = 0; v_edges_i < v_nofedges; v_edges_i++)\ {\ v_edges[v_edges_i].n = GT_STRGRAPH_EDGE_DEST(STRGRAPH, VNUM, v_edges_i);\ v_edges[v_edges_i].len = \ GT_STRGRAPH_EDGE_LEN(STRGRAPH, VNUM, v_edges_i);\ v_edges[v_edges_i].to_reduce = \ GT_STRGRAPH_EDGE_HAS_MARK(STRGRAPH, VNUM, v_edges_i);\ }\ qsort(v_edges, v_nofedges, sizeof (*v_edges),\ gt_strgraph_edges_compare_by_length);\ for (v_edges_i = 0; v_edges_i < v_nofedges; v_edges_i++)\ {\ GT_STRGRAPH_EDGE_SET_DEST(STRGRAPH, VNUM, \ v_edges_i, v_edges[v_edges_i].n);\ GT_STRGRAPH_EDGE_SET_LEN(STRGRAPH, VNUM, v_edges_i, \ v_edges[v_edges_i].len);\ GT_STRGRAPH_EDGE_INIT(STRGRAPH, VNUM, v_edges_i);\ if (v_edges[v_edges_i].to_reduce)\ GT_STRGRAPH_EDGE_SET_MARK(STRGRAPH, VNUM, v_edges_i);\ }\ gt_free(v_edges);\ }\ } #define GT_STRGRAPH_SERIALIZE_EDGES(STRGRAPH, FP)\ GT_STRGRAPH_SERIALIZE_DATA((FP), \ GT_STRGRAPH_NOFEDGES(STRGRAPH), (STRGRAPH)->__e_dest);\ GT_STRGRAPH_SERIALIZE_DATA((FP),\ GT_STRGRAPH_NOFEDGES(STRGRAPH), (STRGRAPH)->__e_len);\ GT_STRGRAPH_SERIALIZE_DATA((FP),\ GT_NUMOFINTSFORBITS(GT_STRGRAPH_NOFEDGES(STRGRAPH)),\ (STRGRAPH)->__e_mark) #define GT_STRGRAPH_DESERIALIZE_EDGES(STRGRAPH, FP)\ GT_STRGRAPH_DESERIALIZE_DATA((FP),\ GT_STRGRAPH_NOFEDGES(STRGRAPH), (STRGRAPH)->__e_dest);\ GT_STRGRAPH_DESERIALIZE_DATA((FP),\ GT_STRGRAPH_NOFEDGES(STRGRAPH), (STRGRAPH)->__e_len);\ GT_STRGRAPH_DESERIALIZE_DATA((FP),\ GT_NUMOFINTSFORBITS(GT_STRGRAPH_NOFEDGES(STRGRAPH)),\ (STRGRAPH)->__e_mark) #define GT_STRGRAPH_FIND_LONGEST_EDGE(STRGRAPH, VNUM, LONGEST) \ {\ unsigned long ith_edge_before_last, vnofedges;\ vnofedges = GT_STRGRAPH_V_NOFEDGES(STRGRAPH, VNUM);\ LONGEST = GT_STRGRAPH__UNDEF_EDGE_LEN;\ for (ith_edge_before_last = 0; ith_edge_before_last < vnofedges;\ ith_edge_before_last++)\ {\ if (!GT_STRGRAPH_EDGE_IS_REDUCED(STRGRAPH, VNUM, vnofedges -\ ith_edge_before_last - 1))\ {\ LONGEST = GT_STRGRAPH_EDGE_LEN(STRGRAPH, VNUM, vnofedges -\ ith_edge_before_last - 1);\ break;\ }\ }\ } #endif genometools-1.5.1/src/match/rdj-strgraph-edges-single-bitpack-def.h000066400000000000000000000223301211610345200252220ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_STRGRAPH_EDGES_SINGLE_BITPACK_DEF_H #define RDJ_STRGRAPH_EDGES_SINGLE_BITPACK_DEF_H #include #include "core/bitpackarray.h" #include "core/intbits.h" #define GT_STRGRAPH_EDGES_REPRESENTATION "single-bitpack" typedef uint64_t GtStrgraphLength; #define FormatGtStrgraphLength Formatuint64_t #define PRINTGtStrgraphLengthcast(X) PRINTuint64_tcast(X) #define SCANGtStrgraphLengthcast(X) SCANuint64_tcast(X) /* LENGTH_MAX is limited by __e_len */ #define GT_STRGRAPH_LENGTH_MAX (GtStrgraphLength)UINT64_MAX #if UINT64_MAX >= ULONG_MAX /* N_READS_MAX is limited by read numbers in the encseq */ #define GT_STRGRAPH_N_READS_MAX ((ULONG_MAX >> 1) - 1) #else /* N_READS_MAX is limited by __e_dest */ #define GT_STRGRAPH_N_READS_MAX (unsigned long)((UINT64_MAX >> 1) - 1) #endif #define GT_STRGRAPH_DECLARE_EDGES\ BitPackArray *__e_info;\ GtStrgraphLength __len_max;\ GtStrgraphEdgenum __n_edges #define GT_STRGRAPH_SET_NOFEDGES(STRGRAPH, VALUE) \ (STRGRAPH)->__n_edges = (VALUE) #define GT_STRGRAPH_NOFEDGES(STRGRAPH) \ ((STRGRAPH)->__n_edges) #define GT_STRGRAPH__UNDEF_EDGE_LEN(STRGRAPH) \ ((STRGRAPH)->__len_max) #define GT_STRGRAPH__EDGE_REDUCED(STRGRAPH) \ GT_STRGRAPH__UNDEF_EDGE_LEN(STRGRAPH) #define GT_STRGRAPH__LEN_BITS(STRGRAPH)\ (gt_requiredUInt64Bits((STRGRAPH)->__len_max)) #define GT_STRGRAPH__DEST_BITS(STRGRAPH)\ (gt_requiredUInt64Bits(GT_STRGRAPH_NOFVERTICES(STRGRAPH))) #define GT_STRGRAPH__EDGE_BITS(STRGRAPH)\ (GT_STRGRAPH__LEN_BITS(STRGRAPH) + \ GT_STRGRAPH__DEST_BITS(STRGRAPH) + \ 1 /* mark */) #define GT_STRGRAPH_ALLOC_EDGES(STRGRAPH)\ (STRGRAPH)->__len_max = gt_strgraph_longest_read(STRGRAPH) - \ (STRGRAPH)->minmatchlen + 1;\ (STRGRAPH)->__e_info = bitpackarray_new(GT_STRGRAPH__EDGE_BITS(STRGRAPH),\ (BitOffset)GT_STRGRAPH_NOFEDGES(STRGRAPH), true) #define GT_STRGRAPH_SIZEOF_EDGES(STRGRAPH) \ (sizeofbitarray(GT_STRGRAPH__EDGE_BITS(STRGRAPH),\ (BitOffset)GT_STRGRAPH_NOFEDGES(STRGRAPH))) #define GT_STRGRAPH_SERIALIZE_EDGES(STRGRAPH, FP)\ do {\ GT_STRGRAPH_SERIALIZE_DATA((FP),\ bitElemsAllocSize(GT_STRGRAPH__EDGE_BITS(STRGRAPH) * \ GT_STRGRAPH_NOFEDGES(STRGRAPH)), (STRGRAPH)->__e_info);\ } while (false) #define GT_STRGRAPH_DESERIALIZE_EDGES(STRGRAPH, FP)\ do {\ GT_STRGRAPH_DESERIALIZE_DATA((FP),\ bitElemsAllocSize(GT_STRGRAPH__DEST_BITS(STRGRAPH) * \ GT_STRGRAPH_NOFEDGES(STRGRAPH)), (STRGRAPH)->__e_info);\ } while (false) #define GT_STRGRAPH_SHRINK_EDGES(STRGRAPH, NEWSIZE)\ do {\ gt_assert((NEWSIZE) < GT_STRGRAPH_NOFEDGES(STRGRAPH));\ GT_STRGRAPH_SET_NOFEDGES(STRGRAPH, NEWSIZE);\ if ((NEWSIZE) == 0)\ {\ GT_STRGRAPH_FREE_EDGES(STRGRAPH);\ }\ else\ {\ /* XXX: realloc not implemented */\ }\ } while (false) #define GT_STRGRAPH_FREE_EDGES(STRGRAPH)\ bitpackarray_delete((STRGRAPH)->__e_info);\ (STRGRAPH)->__e_info = NULL #define GT_STRGRAPH_EDGE__INFO(STRGRAPH, V, EDGENUM) \ ((GtStrgraphVnum)(bitpackarray_get_uint64((STRGRAPH)->__e_info,\ (BitOffset)GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM)))) #define GT_STRGRAPH_EDGE__SET_INFO(STRGRAPH, V, EDGENUM, VALUE) \ (bitpackarray_store_uint64((STRGRAPH)->__e_info,\ (BitOffset)GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, EDGENUM), (VALUE))) /* bit order: dest... len... mark */ #define GT_STRGRAPH_EDGE__MARK_SHIFT(STRGRAPH) 0 #define GT_STRGRAPH_EDGE__LEN_SHIFT(STRGRAPH) 1 #define GT_STRGRAPH_EDGE__DEST_SHIFT(STRGRAPH) \ (GT_STRGRAPH_EDGE__LEN_SHIFT(STRGRAPH) + GT_STRGRAPH__LEN_BITS(STRGRAPH)) #define GT_STRGRAPH_EDGE__MARK_MASK(STRGRAPH) 1 #define GT_STRGRAPH_EDGE__LEN_MASK(STRGRAPH) \ (((1 << GT_STRGRAPH__LEN_BITS(STRGRAPH)) - 1) << \ GT_STRGRAPH_EDGE__LEN_SHIFT(STRGRAPH)) #define GT_STRGRAPH_EDGE__DEST_MASK(STRGRAPH) \ (((1 << GT_STRGRAPH__DEST_BITS(STRGRAPH)) - 1) << \ GT_STRGRAPH_EDGE__DEST_SHIFT(STRGRAPH)) #define GT_STRGRAPH_EDGE_DEST(STRGRAPH, V, EDGENUM) \ ((GT_STRGRAPH_EDGE__INFO(STRGRAPH, V, EDGENUM) & \ GT_STRGRAPH_EDGE__DEST_MASK(STRGRAPH)) >> \ GT_STRGRAPH_EDGE__DEST_SHIFT(STRGRAPH)) #define GT_STRGRAPH_EDGE_LEN(STRGRAPH, V, EDGENUM) \ ((GT_STRGRAPH_EDGE__INFO(STRGRAPH, V, EDGENUM) & \ GT_STRGRAPH_EDGE__LEN_MASK(STRGRAPH)) >> \ GT_STRGRAPH_EDGE__LEN_SHIFT(STRGRAPH)) #define GT_STRGRAPH_EDGE_HAS_MARK(STRGRAPH, V, EDGENUM) \ (((GT_STRGRAPH_EDGE__INFO(STRGRAPH, V, EDGENUM) & \ GT_STRGRAPH_EDGE__MARK_MASK(STRGRAPH)) >> \ GT_STRGRAPH_EDGE__MARK_SHIFT(STRGRAPH)) ? true : false) #define GT_STRGRAPH_EDGE_SET_DEST(STRGRAPH, V, EDGENUM, VALUE) \ GT_STRGRAPH_EDGE__SET_INFO(STRGRAPH, V, EDGENUM, \ (((GT_STRGRAPH_EDGE__DEST_MASK(STRGRAPH) ^ UINT64_MAX) & \ GT_STRGRAPH_EDGE__INFO(STRGRAPH, V, EDGENUM)) + \ ((VALUE) << GT_STRGRAPH_EDGE__DEST_SHIFT(STRGRAPH)))) #define GT_STRGRAPH_EDGE_SET_LEN(STRGRAPH, V, EDGENUM, VALUE) \ GT_STRGRAPH_EDGE__SET_INFO(STRGRAPH, V, EDGENUM, \ (((GT_STRGRAPH_EDGE__LEN_MASK(STRGRAPH) ^ UINT64_MAX) & \ GT_STRGRAPH_EDGE__INFO(STRGRAPH, V, EDGENUM)) + \ ((VALUE) << GT_STRGRAPH_EDGE__LEN_SHIFT(STRGRAPH)))) #define GT_STRGRAPH_EDGE__SET_MARK(STRGRAPH, V, EDGENUM, VALUE) \ GT_STRGRAPH_EDGE__SET_INFO(STRGRAPH, V, EDGENUM, \ (((GT_STRGRAPH_EDGE__MARK_MASK(STRGRAPH) ^ UINT64_MAX) & \ GT_STRGRAPH_EDGE__INFO(STRGRAPH, V, EDGENUM)) + \ ((VALUE) << GT_STRGRAPH_EDGE__MARK_SHIFT(STRGRAPH)))) #define GT_STRGRAPH_EDGE_SET_MARK(STRGRAPH, V, EDGENUM) \ GT_STRGRAPH_EDGE__SET_MARK(STRGRAPH, V, EDGENUM, 1) #define GT_STRGRAPH_EDGE_INIT(STRGRAPH, V, EDGENUM) \ GT_STRGRAPH_EDGE__SET_MARK(STRGRAPH, V, EDGENUM, 0) #define GT_STRGRAPH_EDGE_REDUCE(STRGRAPH, V, EDGENUM) \ GT_STRGRAPH_EDGE_SET_LEN(STRGRAPH, V, EDGENUM,\ GT_STRGRAPH__EDGE_REDUCED(STRGRAPH)) #define GT_STRGRAPH_EDGE_IS_REDUCED(STRGRAPH, V, EDGENUM) \ (GT_STRGRAPH_EDGE_LEN(STRGRAPH, V, EDGENUM) == \ GT_STRGRAPH__EDGE_REDUCED(STRGRAPH) \ ? true : false) #define GT_STRGRAPH_COPY_EDGE(STRGRAPH, OFFSET_SOURCE, OFFSET_DEST)\ do {\ bitpackarray_store_uint64((STRGRAPH)->__e_info,\ (BitOffset)(OFFSET_DEST), bitpackarray_get_uint64((STRGRAPH->__e_info),\ (BitOffset)(OFFSET_SOURCE)));\ } while (false) /* order by length from < to > */ struct GtStrgraph__EdgeData { GtStrgraphVnum dest; GtStrgraphLength len; bool to_reduce; }; int gt_strgraph_edges_compare_by_length(const void *edgea, const void *edgeb) { const struct GtStrgraph__EdgeData *a = edgea, *b = edgeb; return (int)(a->len > b->len) - (int)(a->len < b->len); } #define GT_STRGRAPH_SORT_V_EDGES(STRGRAPH, VNUM)\ do {\ GtStrgraphVEdgenum v_nofedges, v_edges_i;\ struct GtStrgraph__EdgeData *v_edges;\ v_nofedges = GT_STRGRAPH_V_NOFEDGES(STRGRAPH, VNUM);\ if (v_nofedges > (GtStrgraphVEdgenum)1)\ {\ v_edges = gt_malloc(sizeof (*v_edges) * v_nofedges);\ for (v_edges_i = 0; v_edges_i < v_nofedges; v_edges_i++)\ {\ v_edges[v_edges_i].dest = \ GT_STRGRAPH_EDGE_DEST(STRGRAPH, VNUM, v_edges_i);\ v_edges[v_edges_i].len = \ GT_STRGRAPH_EDGE_LEN(STRGRAPH, VNUM, v_edges_i);\ v_edges[v_edges_i].to_reduce = \ GT_STRGRAPH_EDGE_HAS_MARK(STRGRAPH, VNUM, v_edges_i);\ }\ qsort(v_edges, v_nofedges, sizeof (*v_edges),\ gt_strgraph_edges_compare_by_length);\ for (v_edges_i = 0; v_edges_i < v_nofedges; v_edges_i++)\ {\ GT_STRGRAPH_EDGE_SET_DEST(STRGRAPH, VNUM, \ v_edges_i, v_edges[v_edges_i].dest);\ GT_STRGRAPH_EDGE_SET_LEN(STRGRAPH, VNUM, v_edges_i, \ v_edges[v_edges_i].len);\ GT_STRGRAPH_EDGE_INIT(STRGRAPH, VNUM, v_edges_i);\ if (v_edges[v_edges_i].to_reduce)\ GT_STRGRAPH_EDGE_SET_MARK(STRGRAPH, VNUM, v_edges_i);\ }\ gt_free(v_edges);\ }\ } while (false) #define GT_STRGRAPH_FIND_LONGEST_EDGE(STRGRAPH, VNUM, LONGEST) \ do {\ GtStrgraphVEdgenum ith_edge_before_last, vnofedges;\ vnofedges = GT_STRGRAPH_V_NOFEDGES(STRGRAPH, VNUM);\ LONGEST = (STRGRAPH)->__len_max;\ for (ith_edge_before_last = 0; ith_edge_before_last < vnofedges;\ ith_edge_before_last++)\ {\ if (!GT_STRGRAPH_EDGE_IS_REDUCED(STRGRAPH, VNUM, vnofedges -\ ith_edge_before_last - 1))\ {\ LONGEST = GT_STRGRAPH_EDGE_LEN(STRGRAPH, VNUM, vnofedges -\ ith_edge_before_last - 1);\ break;\ }\ }\ } while (false) #endif genometools-1.5.1/src/match/rdj-strgraph-vertices-bitfield-def.h000066400000000000000000000070241211610345200246500ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_STRGRAPH_VERTICES_BITFIELD_DEF_H #define RDJ_STRGRAPH_VERTICES_BITFIELD_DEF_H /* --- for exclusive use in rdj-strgraph.c (__ = private) --- */ #define GT_STRGRAPH_VERTICES_REPRESENTATION "bitfield" typedef unsigned long GtStrgraphVEdgenum; #define FormatGtStrgraphVEdgenum "%lu" #define PRINTGtStrgraphVEdgenumcast(X) (X) #define SCANGtStrgraphVEdgenumcast(X) (X) #define GT_STRGRAPH__OUTDEG_BITS 24 #define GT_STRGRAPH_V_EDGENUM_MAX \ ((GtStrgraphVEdgenum)((1UL << GT_STRGRAPH__OUTDEG_BITS) - 1)) typedef uint64_t GtStrgraphEdgenum; #define FormatGtStrgraphEdgenum Formatuint64_t #define PRINTGtStrgraphEdgenumcast(X) PRINTuint64_tcast(X) #define SCANGtStrgraphEdgenumcast(X) SCANuint64_tcast(X) #define GT_STRGRAPH__OFFSET_BITS 38 #define GT_STRGRAPH_EDGENUM_MAX \ ((GtStrgraphEdgenum)((1ULL << GT_STRGRAPH__OFFSET_BITS) - 1)) typedef struct { GtStrgraphEdgenum offset :GT_STRGRAPH__OFFSET_BITS; GtStrgraphVEdgenum outdeg :GT_STRGRAPH__OUTDEG_BITS; GtStrgraphVmark mark :GT_STRGRAPH_VMARK_BITS; } GtStrgraph__Vertex; #define GT_STRGRAPH_DECLARE_VERTICES\ GtStrgraphVnum __n_vertices;\ GtStrgraph__Vertex *__v #define GT_STRGRAPH_SET_NOFVERTICES(STRGRAPH, N) \ ((STRGRAPH)->__n_vertices = (N)) #define GT_STRGRAPH_NOFVERTICES(STRGRAPH) \ ((STRGRAPH)->__n_vertices) #define GT_STRGRAPH_ALLOC_VERTICES(STRGRAPH)\ (STRGRAPH)->__v = \ gt_calloc((size_t)((GT_STRGRAPH_NOFVERTICES(STRGRAPH)) + 1),\ sizeof (GtStrgraph__Vertex)) #define GT_STRGRAPH_SIZEOF_VERTICES(STRGRAPH) \ ((sizeof (GtStrgraph__Vertex) * (GT_STRGRAPH_NOFVERTICES(STRGRAPH) + 1)) +\ sizeof ((STRGRAPH)->__n_vertices)) #define GT_STRGRAPH_FREE_VERTICES(STRGRAPH)\ gt_free((STRGRAPH)->__v);\ (STRGRAPH)->__v = NULL #define GT_STRGRAPH_SERIALIZE_VERTICES(STRGRAPH, FP)\ GT_STRGRAPH_SERIALIZE_DATA((FP),\ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + 1, (STRGRAPH)->__v) #define GT_STRGRAPH_DESERIALIZE_VERTICES(STRGRAPH, FP)\ GT_STRGRAPH_DESERIALIZE_DATA((FP),\ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + 1, (STRGRAPH)->__v) #define GT_STRGRAPH_V_SET_OFFSET(STRGRAPH, V, VALUE) \ ((STRGRAPH)->__v[(V)].offset = (VALUE)) #define GT_STRGRAPH_V_OFFSET(STRGRAPH, V) \ ((GtStrgraphEdgenum)((STRGRAPH)->__v[(V)].offset)) #define GT_STRGRAPH_V_INC_OUTDEG(STRGRAPH, V) \ (((STRGRAPH)->__v[(V)].outdeg)++) #define GT_STRGRAPH_V_DEC_OUTDEG(STRGRAPH, V) \ (((STRGRAPH)->__v[(V)].outdeg)--) #define GT_STRGRAPH_V_OUTDEG(STRGRAPH, V) \ ((GtStrgraphVEdgenum)((STRGRAPH)->__v[(V)].outdeg)) #define GT_STRGRAPH_V_SET_MARK(STRGRAPH, V, VALUE) \ ((STRGRAPH)->__v[(V)].mark = (VALUE)) #define GT_STRGRAPH_V_MARK(STRGRAPH, V) \ ((STRGRAPH)->__v[(V)].mark) #endif genometools-1.5.1/src/match/rdj-strgraph-vertices-bitpack-def.h000066400000000000000000000153201211610345200245010ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_STRGRAPH_VERTICES_BITPACK_DEF_H #define RDJ_STRGRAPH_VERTICES_BITPACK_DEF_H /* --- for exclusive use in rdj-strgraph.c (__ = private) --- */ #define GT_STRGRAPH_VERTICES_REPRESENTATION "bitpack" typedef uint64_t GtStrgraphVEdgenum; #define FormatGtStrgraphVEdgenum Formatuint64_t #define PRINTGtStrgraphVEdgenumcast(X) PRINTuint64_tcast(X) #define SCANGtStrgraphVEdgenumcast(X) SCANuint64_tcast(X) #define GT_STRGRAPH_V_EDGENUM_MAX (UINT64_MAX - 1) /* - 1 is not necessary, but avoids a compiler warning */ typedef uint64_t GtStrgraphEdgenum; #define FormatGtStrgraphEdgenum Formatuint64_t #define PRINTGtStrgraphEdgenumcast(X) PRINTuint64_tcast(X) #define SCANGtStrgraphEdgenumcast(X) SCANuint64_tcast(X) #define GT_STRGRAPH_EDGENUM_MAX (UINT64_MAX - 1) /* - 1 is not necessary, but avoids a compiler warning */ #define GT_STRGRAPH_DECLARE_VERTICES\ BitPackArray *__v_mark;\ BitPackArray *__v_offset;\ GtStrgraphEdgenum __offset_max;\ BitPackArray *__v_outdeg;\ GtStrgraphVEdgenum __outdeg_max;\ GtStrgraphVnum __n_vertices /* vertex accessor macros */ #define GT_STRGRAPH_SET_NOFVERTICES(STRGRAPH, N) \ ((STRGRAPH)->__n_vertices = (N)) #define GT_STRGRAPH_NOFVERTICES(STRGRAPH) \ ((STRGRAPH)->__n_vertices) #define GT_STRGRAPH__ALLOC_VMARKS(STRGRAPH)\ (STRGRAPH)->__v_mark = bitpackarray_new((unsigned int)GT_STRGRAPH_VMARK_BITS,\ (BitOffset)(GT_STRGRAPH_NOFVERTICES(STRGRAPH) + (GtStrgraphVnum)1), true) #define GT_STRGRAPH__OFFSET_BITS(STRGRAPH)\ (gt_requiredUInt64Bits((STRGRAPH)->__offset_max)) #define GT_STRGRAPH__ALLOC_OFFSETS(STRGRAPH)\ (STRGRAPH)->__offset_max = gt_strgraph_counts_sum(STRGRAPH);\ (STRGRAPH)->__v_offset = bitpackarray_new(GT_STRGRAPH__OFFSET_BITS(STRGRAPH),\ (BitOffset)(GT_STRGRAPH_NOFVERTICES(STRGRAPH) + (GtStrgraphVnum)1), true) #define GT_STRGRAPH__OUTDEG_BITS(STRGRAPH)\ (gt_requiredUInt64Bits((STRGRAPH)->__outdeg_max)) #define GT_STRGRAPH__ALLOC_OUTDEGS(STRGRAPH)\ gt_assert(sizeof (GtStrgraphVEdgenum) >= sizeof (GtStrgraphCount));\ (STRGRAPH)->__outdeg_max = (GtStrgraphVEdgenum)\ gt_strgraph_largest_count(STRGRAPH);\ (STRGRAPH)->__v_outdeg = bitpackarray_new(GT_STRGRAPH__OUTDEG_BITS(STRGRAPH),\ (BitOffset)(GT_STRGRAPH_NOFVERTICES(STRGRAPH) + (GtStrgraphVnum)1), true) #define GT_STRGRAPH_ALLOC_VERTICES(STRGRAPH)\ GT_STRGRAPH__ALLOC_VMARKS(STRGRAPH);\ GT_STRGRAPH__ALLOC_OFFSETS(STRGRAPH);\ GT_STRGRAPH__ALLOC_OUTDEGS(STRGRAPH) #define GT_STRGRAPH__SIZEOF_OUTDEGS(STRGRAPH)\ (sizeofbitarray(GT_STRGRAPH__OUTDEG_BITS(STRGRAPH),\ (BitOffset)(\ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + (GtStrgraphVnum)1))) #define GT_STRGRAPH__SIZEOF_OFFSETS(STRGRAPH)\ (sizeofbitarray(GT_STRGRAPH__OFFSET_BITS(STRGRAPH),\ (BitOffset)(\ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + (GtStrgraphVnum)1))) #define GT_STRGRAPH__SIZEOF_VMARKS(STRGRAPH)\ (sizeofbitarray(GT_STRGRAPH_VMARK_BITS,\ (BitOffset)(\ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + (GtStrgraphVnum)1))) #define GT_STRGRAPH_SIZEOF_VERTICES(STRGRAPH) \ (sizeof ((STRGRAPH)->__v_mark)+\ GT_STRGRAPH__SIZEOF_VMARKS(STRGRAPH) +\ sizeof ((STRGRAPH)->__v_offset)+\ sizeof ((STRGRAPH)->__offset_max)+\ GT_STRGRAPH__SIZEOF_OFFSETS(STRGRAPH) +\ sizeof ((STRGRAPH)->__v_outdeg)+\ sizeof ((STRGRAPH)->__outdeg_max)+\ GT_STRGRAPH__SIZEOF_OUTDEGS(STRGRAPH)) #define GT_STRGRAPH_SERIALIZE_VERTICES(STRGRAPH, FP)\ GT_STRGRAPH_SERIALIZE_DATA((FP),\ bitElemsAllocSize(GT_STRGRAPH_VMARK_BITS * \ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + 1), (STRGRAPH)->__v_mark);\ GT_STRGRAPH_SERIALIZE_DATA((FP), \ bitElemsAllocSize(GT_STRGRAPH__OUTDEG_BITS(STRGRAPH) * \ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + 1), (STRGRAPH)->__v_outdeg);\ GT_STRGRAPH_SERIALIZE_DATA((FP), \ bitElemsAllocSize(GT_STRGRAPH__OFFSET_BITS(STRGRAPH) * \ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + 1), (STRGRAPH)->__v_offset) #define GT_STRGRAPH_DESERIALIZE_VERTICES(STRGRAPH, FP)\ GT_STRGRAPH_DESERIALIZE_DATA((FP),\ bitElemsAllocSize(GT_STRGRAPH_VMARK_BITS * \ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + 1), (STRGRAPH)->__v_mark);\ GT_STRGRAPH_DESERIALIZE_DATA((FP), \ bitElemsAllocSize(GT_STRGRAPH__OUTDEG_BITS(STRGRAPH) * \ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + 1), (STRGRAPH)->__v_outdeg);\ GT_STRGRAPH_DESERIALIZE_DATA((FP), \ bitElemsAllocSize(GT_STRGRAPH__OFFSET_BITS(STRGRAPH) * \ GT_STRGRAPH_NOFVERTICES(STRGRAPH) + 1), (STRGRAPH)->__v_offset) #define GT_STRGRAPH_FREE_VERTICES(STRGRAPH)\ bitpackarray_delete((STRGRAPH)->__v_mark);\ bitpackarray_delete((STRGRAPH)->__v_outdeg);\ bitpackarray_delete((STRGRAPH)->__v_offset);\ (STRGRAPH)->__v_mark = NULL;\ (STRGRAPH)->__v_outdeg = NULL;\ (STRGRAPH)->__v_offset = NULL #define GT_STRGRAPH_V_SET_OFFSET(STRGRAPH, V, VALUE) \ bitpackarray_store_uint64((STRGRAPH)->__v_offset, (BitOffset)(V),\ (uint64_t)(VALUE)) #define GT_STRGRAPH_V_OFFSET(STRGRAPH, V) \ ((GtStrgraphEdgenum)\ bitpackarray_get_uint64((STRGRAPH)->__v_offset, (BitOffset)(V))) #define GT_STRGRAPH_V_OUTDEG(STRGRAPH, V) \ ((GtStrgraphVEdgenum)\ bitpackarray_get_uint64((STRGRAPH)->__v_outdeg, (BitOffset)(V))) #define GT_STRGRAPH_V_INC_OUTDEG(STRGRAPH, V) \ bitpackarray_store_uint64((STRGRAPH)->__v_outdeg, (BitOffset)(V), \ (uint64_t)(GT_STRGRAPH_V_OUTDEG(STRGRAPH, V) + (GtStrgraphVEdgenum)1)) #define GT_STRGRAPH_V_DEC_OUTDEG(STRGRAPH, V) \ bitpackarray_store_uint64((STRGRAPH)->__v_outdeg, (BitOffset)(V), \ (uint64_t)(GT_STRGRAPH_V_OUTDEG(STRGRAPH, V) - (GtStrgraphVEdgenum)1)) #define GT_STRGRAPH_V_SET_MARK(STRGRAPH, V, VALUE) \ bitpackarray_store_uint64((STRGRAPH)->__v_mark, (BitOffset)(V),\ (uint64_t)(VALUE)) #define GT_STRGRAPH_V_MARK(STRGRAPH, V) \ ((GtStrgraphVmark)\ bitpackarray_get_uint64((STRGRAPH)->__v_mark, (BitOffset)(V))) #endif genometools-1.5.1/src/match/rdj-strgraph-vertices-common-def.h000066400000000000000000000050151211610345200243540ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_STRGRAPH_VERTICES_COMMON_DEF_H #define RDJ_STRGRAPH_VERTICES_COMMON_DEF_H /* --- for exclusive use in rdj-strgraph.c --- */ #define GT_STRGRAPH_NOFSPM_MAX \ (GT_STRGRAPH_EDGENUM_MAX >> 1) #define GT_STRGRAPH_NOFREADS(STRGRAPH) \ (GT_STRGRAPH_NOFVERTICES(STRGRAPH) >> 1) #define GT_STRGRAPH_V_NTH_EDGE_OFFSET(STRGRAPH, V, N)\ (GT_STRGRAPH_V_OFFSET(STRGRAPH, V) + (N)) #define GT_STRGRAPH_V_INDEG(STRGRAPH, V) \ GT_STRGRAPH_V_OUTDEG(STRGRAPH, GT_STRGRAPH_V_OTHER(V)) #define GT_STRGRAPH_V_IS_INTERNAL(STRGRAPH, V) \ ((GT_STRGRAPH_V_OUTDEG(STRGRAPH, V) == (GtStrgraphVEdgenum)1) && \ (GT_STRGRAPH_V_INDEG(STRGRAPH, V) == (GtStrgraphVEdgenum)1)) #define GT_STRGRAPH_V_IS_JUNCTION(STRGRAPH, I) \ ((GT_STRGRAPH_V_OUTDEG(STRGRAPH, I) > (GtStrgraphVEdgenum)1 && \ GT_STRGRAPH_V_INDEG(STRGRAPH, I) > 0) || \ (GT_STRGRAPH_V_OUTDEG(STRGRAPH, I) == (GtStrgraphVEdgenum)1 && \ GT_STRGRAPH_V_INDEG(STRGRAPH, I) > (GtStrgraphVEdgenum)1)) #define GT_STRGRAPH_V_NOFEDGES(STRGRAPH, V) \ (GtStrgraphVEdgenum)(GT_STRGRAPH_V_OFFSET(STRGRAPH, (V)+1) \ - GT_STRGRAPH_V_OFFSET(STRGRAPH, V)) /* begin/end vertices: */ #define GT_STRGRAPH_V_B(READNUM) \ ((GtStrgraphVnum)(READNUM) << 1) #define GT_STRGRAPH_V_E(READNUM) \ (GT_STRGRAPH_V_B(READNUM) + (GtStrgraphVnum)1) #define GT_STRGRAPH_V_READNUM(V) \ (unsigned long)((V) >> 1) #define GT_STRGRAPH_V_IS_E(V) \ (((V) & (GtStrgraphVnum)1) == (GtStrgraphVnum)1) #define GT_STRGRAPH_V_IS_B(V) \ (!(GT_STRGRAPH_V_IS_E(V))) #define GT_STRGRAPH_V_OTHER(V) \ (GT_STRGRAPH_V_IS_E(V) ? (V) - (GtStrgraphVnum)1 : (V) + (GtStrgraphVnum)1) #define GT_STRGRAPH_V_CHAR(V) \ (GT_STRGRAPH_V_IS_E(V) ? 'E' : 'B') #endif genometools-1.5.1/src/match/rdj-strgraph-vmark-def.h000066400000000000000000000021061211610345200223600ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_STRGRAPH_VMARK_DEF_H #define RDJ_STRGRAPH_VMARK_DEF_H typedef enum { GT_STRGRAPH_V_VACANT = 0, GT_STRGRAPH_V_INPLAY, GT_STRGRAPH_V_ELIMINATED, } GtStrgraphVmark; #define GT_STRGRAPH_VMARK_BITS 2U #endif genometools-1.5.1/src/match/rdj-strgraph.c000066400000000000000000002241251211610345200205100ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/array_api.h" #include "core/arraydef.h" #include "core/disc_distri_api.h" #include "core/ensure.h" #include "core/fasta.h" #include "core/fileutils.h" #include "core/format64.h" #include "core/hashmap-generic.h" #include "core/log.h" #include "core/ma.h" #include "core/progressbar.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/spacecalc.h" #include "extended/assembly_stats_calculator.h" #include "match/asqg_writer.h" #include "match/rdj-contigpaths.h" #include "match/rdj-contigs-writer.h" #include "match/rdj-ensure-output.h" #include "match/rdj-spmlist.h" #include "match/rdj-strgraph.h" /* default representation: */ #ifndef GT_STRGRAPH_SHORT #ifndef GT_STRGRAPH_BITFIELD #define GT_STRGRAPH_BITPACK #endif #endif /* Combinations of Edges/Vertices/Counts Representations */ #if defined(GT_STRGRAPH_BITFIELD) #define GT_STRGRAPH_COUNTS_CHAR #define GT_STRGRAPH_VERTICES_BITFIELD #define GT_STRGRAPH_EDGES_BITFIELD #elif defined(GT_STRGRAPH_SHORT) #define GT_STRGRAPH_COUNTS_CHAR #define GT_STRGRAPH_VERTICES_BITFIELD #define GT_STRGRAPH_EDGES_SHORT #elif defined(GT_STRGRAPH_BITPACK) #define GT_STRGRAPH_COUNTS_CHAR #define GT_STRGRAPH_VERTICES_BITPACK #define GT_STRGRAPH_EDGES_SINGLE_BITPACK #endif /* Type For Vertex numbers */ typedef uint64_t GtStrgraphVnum; #define FormatGtStrgraphVnum Formatuint64_t #define PRINTGtStrgraphVnumcast(X) PRINTuint64_tcast(X) #define SCANGtStrgraphVnumcast(X) SCANuint64_tcast(X) #define GT_STRGRAPH_VNUM_MAX (GtStrgraphVnum)UINT64_MAX /* Common Helper Macros */ #define GT_STRGRAPH_SERIALIZE_DATA(FP, NOFELEMS, SPACE)\ gt_file_xwrite((FP), (void*)(SPACE), (sizeof (*(SPACE)) * (NOFELEMS))) #define GT_STRGRAPH_DESERIALIZE_DATA(FP, NOFELEMS, SPACE)\ {\ GT_UNUSED int nofreadbytes;\ nofreadbytes = gt_file_xread((FP), (void*)(SPACE), (sizeof (*(SPACE))) *\ (NOFELEMS));\ gt_assert(nofreadbytes == (int)(sizeof (*(SPACE)) * (NOFELEMS)));\ } /* Counts Representation */ /* * counts representations define: * * GtStrgraphCount a type large at least as the largest count * GT_STRGRAPH_COUNT_MAX * FormatGtStrgraphCount * [PRINT|SCAN]GtStrgraphCountcast * * GT_STRGRAPH... type: * _COUNTS_REPRESENTATION * _DECLARE_COUNTS * _(ALLOC|FREE)_COUNTS * _(GET|INC)_COUNT GtStrgraphCount * _[DE]SERIALIZE_COUNTS * */ #include "match/rdj-strgraph-counts-char-def.h" /* Vertices Representation */ /* GtStrgraphVmark / GT_STRGRAPH_VMARK_BITS */ #include "match/rdj-strgraph-vmark-def.h" /* * vertices representations define: * * GtStrgraphVEdgenum degree / edge number in a vertex * GT_STRGRAPH_V_EDGENUM_MAX * FormatGtStrgraphVEdgenum * [PRINT|SCAN]GtStrgraphVEdgenumcast * * GtStrgraphEdgenum edge number in graph, offset value in edges tables * GT_STRGRAPH_EDGENUM_MAX * FormatGtStrgraphEdgenum * [PRINT|SCAN]GtStrgraphEdgenumcast * * GT_STRGRAPH_.. type: * VERTICES_REPRESENTATION string literal * [SET_]NOFVERTICES GtStrgraphVnum * [ALLOC|FREE]_VERTICES * SIZEOF_VERTICES size_t * [DE]SERIALIZE_VERTICES * * GT_STRGRAPH_V_... * [INC_|DEC_]OUTDEG GtStrgraphVEdgenum * [SET_]OFFSET GtStrgraphEdgenum * [SET_]MARK GtStrgraphVmark * */ #ifdef GT_STRGRAPH_VERTICES_BITPACK #include "match/rdj-strgraph-vertices-bitpack-def.h" #else #include "match/rdj-strgraph-vertices-bitfield-def.h" #endif /* macros depending on vertices definitions, * but common to all representations: * * GT_STRGRAPH... * NOFSPM_MAX GtStrgraphEdgenum * NOFREADS GtStrgraphVnum * * GT_STRGRAPH_V_... * NOFEDGES GtStrgraphVEdgenum * NTH_EDGE_OFFSET GtStrgraphEdgenum * INDEG GtStrgraphVEdgenum * IS_INTERNAL bool * IS_JUNCTION bool * [B|E] GtStrgraphVnum * READNUM unsigned long * IS_[E|B] bool * OTHER GtStrgraphVnum * CHAR char */ #include "match/rdj-strgraph-vertices-common-def.h" /* Edges Representation */ /* * edges representations define: * * GtStrgraphLength length of an edge * FormatGtStrgraphLength * GT_STRGRAPH_LENGTH_MAX * * GT_STRGRAPH_N_READS_MAX unsigned long * * GT_STRGRAPH_.. * EDGES_REPRESENTATION string literal * [SET_]NOFEDGES GtStrgraphEdgenum * SIZEOF_EDGES size_t * [ALLOC|SHRINK|FREE]_EDGES * COPY_EDGE * [DE_]SERIALIZE_EDGES * FIND_LONGEST_EDGE GtStrgraphLength * SORT_EDGES_BY_LENGTH_FROM_VERTEX XXX:rename * * GT_STRGRAPH_EDGE_... * [SET_]DEST GtStrgraphVnum * [SET_]LEN GtStrgraphLength * INIT * [SET|HAS]_MARK bool * REDUCE * IS_REDUCED bool */ #ifdef GT_STRGRAPH_EDGES_SHORT #include "match/rdj-strgraph-edges-short-def.h" #elif defined(GT_STRGRAPH_EDGES_BITPACK) #include "match/rdj-strgraph-edges-bitpack-def.h" #elif defined(GT_STRGRAPH_EDGES_SINGLE_BITPACK) #include "match/rdj-strgraph-edges-single-bitpack-def.h" #else #include "match/rdj-strgraph-edges-bitfield-def.h" #endif void gt_strgraph_show_limits_debug_log(void) { gt_log_log("string graph representation: vertices=%s edges=%s", GT_STRGRAPH_VERTICES_REPRESENTATION, GT_STRGRAPH_EDGES_REPRESENTATION); } void gt_strgraph_show_limits(void) { printf("# max number of reads: %lu\n", GT_STRGRAPH_N_READS_MAX); printf("# max read length: "FormatGtStrgraphLength"\n", PRINTGtStrgraphLengthcast(GT_STRGRAPH_LENGTH_MAX)); printf("# max degree of a vertex: "FormatGtStrgraphVEdgenum"\n", PRINTGtStrgraphVEdgenumcast(GT_STRGRAPH_V_EDGENUM_MAX)); printf("# max number of spm: "FormatGtStrgraphEdgenum"\n", PRINTGtStrgraphEdgenumcast(GT_STRGRAPH_NOFSPM_MAX)); printf("# compile-time chosen representations\n"); printf("# - counts: %s\n", GT_STRGRAPH_COUNTS_REPRESENTATION); printf("# - vertices: %s\n", GT_STRGRAPH_VERTICES_REPRESENTATION); printf("# - edges: %s\n", GT_STRGRAPH_EDGES_REPRESENTATION); } GT_UNUSED static inline void gt_strgraph_show_current_space(const char *label) { unsigned long m, f; if (gt_ma_bookkeeping_enabled()) { m = gt_ma_get_space_current(); f = gt_fa_get_space_current(); gt_log_log("used space %s: %.2f MB (ma: %.2f MB; fa: %.2f MB)", label == NULL ? "" : label, GT_MEGABYTES(m + f), GT_MEGABYTES(m), GT_MEGABYTES(f)); } } typedef enum { GT_STRGRAPH_PREPARATION, GT_STRGRAPH_CONSTRUCTION, GT_STRGRAPH_SORTED_BY_L, } GtStrgraphState; struct GtStrgraph { const GtEncseq *encseq; GtStrgraphLength fixlen; GtStrgraphState state; FILE *spmfile; char *spmfile_buffer; bool load_self_spm; bool binary_spmlist; GtStrgraphLength minmatchlen; GT_STRGRAPH_DECLARE_COUNTS; GT_STRGRAPH_DECLARE_VERTICES; GT_STRGRAPH_DECLARE_EDGES; }; #ifdef GT_STRGRAPH_RUNTIME_CHECKS #define GT_STRGRAPH_CHECK_NOFREADS(NOFREADS)\ if ((NOFREADS) > GT_STRGRAPH_N_READS_MAX)\ {\ fprintf(stderr, "fatal: overflow\n");\ fprintf(stderr, "more than %lu reads (%lu found)\n",\ GT_STRGRAPH_N_READS_MAX, (NOFREADS));\ exit(EXIT_FAILURE);\ } #define GT_STRGRAPH_CHECK_LEN(FROM, TO, LEN)\ if ((LEN) > GT_STRGRAPH_LENGTH_MAX)\ {\ fprintf(stderr, "fatal: overflow\n");\ fprintf(stderr, "edge %lu%c -> %lu%c has length > "FormatGtStrgraphLength\ " ("FormatGtStrgraphLength" found)\n",\ GT_STRGRAPH_V_READNUM(FROM),\ GT_STRGRAPH_V_IS_E(FROM) ? 'E' : 'B',\ GT_STRGRAPH_V_READNUM(TO),\ GT_STRGRAPH_V_IS_E(TO) ? 'E' : 'B',\ PRINTGtStrgraphLengthcast(GT_STRGRAPH_LENGTH_MAX),\ PRINTGtStrgraphLengthcast(LEN));\ exit(EXIT_FAILURE);\ } #define GT_STRGRAPH_CHECK_NOFEDGES(NOFEDGES)\ if ((NOFEDGES) > GT_STRGRAPH_EDGENUM_MAX)\ {\ fprintf(stderr, "fatal: overflow\n");\ fprintf(stderr, "more than "FormatGtStrgraphEdgenum" spm ("\ FormatGtStrgraphEdgenum" found)\n",\ PRINTGtStrgraphEdgenumcast(GT_STRGRAPH_EDGENUM_MAX),\ PRINTGtStrgraphEdgenumcast(NOFEDGES));\ exit(EXIT_FAILURE);\ } #define GT_STRGRAPH_CHECK_OUTDEG(VNUM, OUTDEG)\ if ((OUTDEG) > GT_STRGRAPH_V_EDGENUM_MAX)\ {\ fprintf(stderr, "fatal: overflow\n");\ fprintf(stderr, "vertex %lu%c has more than "\ FormatGtStrgraphVEdgenum" outgoing edges ("FormatGtStrgraphVEdgenum\ " found)\n", GT_STRGRAPH_V_READNUM(VNUM),\ GT_STRGRAPH_V_IS_E(VNUM) ? 'E' : 'B',\ PRINTGtStrgraphVEdgenumcast(GT_STRGRAPH_V_EDGENUM_MAX),\ PRINTGtStrgraphVEdgenumcast(OUTDEG));\ exit(EXIT_FAILURE);\ } #else #define GT_STRGRAPH_CHECK_NOFREADS(NOFREADS) #define GT_STRGRAPH_CHECK_LEN(FROM, TO, LEN) #define GT_STRGRAPH_CHECK_NOFEDGES(NOFEDGES) #define GT_STRGRAPH_CHECK_OUTDEG(VNUM, OUTDEG) #endif #define GT_STRGRAPH_SEQLEN(STRGRAPH, READNUM)\ (((STRGRAPH)->fixlen > 0) ? ((STRGRAPH)->fixlen)\ : (GtStrgraphLength)gt_encseq_seqlength((STRGRAPH)->encseq,\ (unsigned long)(READNUM))) GtStrgraphLength gt_strgraph_longest_read(GtStrgraph *strgraph) { if (strgraph->fixlen > 0) { return strgraph->fixlen; } else { GtStrgraphLength seqlen, maxseqlen; GtStrgraphVnum i; gt_assert(strgraph->encseq != NULL); maxseqlen = 0; for (i = 0; i < GT_STRGRAPH_NOFREADS(strgraph); i++) { seqlen = (GtStrgraphLength)gt_encseq_seqlength(strgraph->encseq, (unsigned long)i); if (seqlen > maxseqlen) maxseqlen = seqlen; } gt_assert(maxseqlen > 0); gt_assert(sizeof (GtStrgraphLength) >= sizeof (unsigned long) || maxseqlen <= GT_STRGRAPH_LENGTH_MAX); return maxseqlen; } } GtStrgraphCount gt_strgraph_largest_count(GtStrgraph *strgraph) { GtStrgraphCount count, maxcount; GtStrgraphVnum i; maxcount = 0; for (i = 0; i < (GT_STRGRAPH_NOFVERTICES(strgraph)); i++) { count = GT_STRGRAPH_GET_COUNT(strgraph, i); if (count > maxcount) maxcount = count; } return maxcount; } GtStrgraphEdgenum gt_strgraph_counts_sum(GtStrgraph *strgraph) { GtStrgraphEdgenum sum; GtStrgraphVnum i; sum = 0; for (i = 0; i < (GT_STRGRAPH_NOFVERTICES(strgraph)); i++) { gt_assert(sizeof (GtStrgraphEdgenum) >= sizeof (GtStrgraphVEdgenum)); sum += GT_STRGRAPH_GET_COUNT(strgraph, i); } return sum; } /* --- initialization / preparation --- */ GtStrgraph* gt_strgraph_new(unsigned long nofreads) { GtStrgraph *strgraph; strgraph = gt_calloc((size_t)1, sizeof (GtStrgraph)); strgraph->state = GT_STRGRAPH_PREPARATION; strgraph->load_self_spm = false; strgraph->minmatchlen = GT_STRGRAPH_LENGTH_MAX; gt_strgraph_show_limits_debug_log(); GT_STRGRAPH_CHECK_NOFREADS(nofreads); GT_STRGRAPH_SET_NOFVERTICES(strgraph, (GtStrgraphVnum)nofreads << 1); GT_STRGRAPH_ALLOC_COUNTS(strgraph, GT_STRGRAPH_NOFVERTICES(strgraph)); return strgraph; } static void gt_strgraph_create_vertices(GtStrgraph *strgraph) { GtStrgraphVnum i; GtStrgraphCount c; GtStrgraphEdgenum offset; gt_assert(strgraph != NULL); gt_assert(strgraph->state == GT_STRGRAPH_PREPARATION); GT_STRGRAPH_ALLOC_VERTICES(strgraph); offset = 0; for (i = (GtStrgraphVnum)1; i <= GT_STRGRAPH_NOFVERTICES(strgraph); i++) { c = GT_STRGRAPH_GET_COUNT(strgraph, i - 1); gt_assert(sizeof (GtStrgraphVEdgenum) >= sizeof (GtStrgraphCount)); GT_STRGRAPH_CHECK_OUTDEG(i - 1, (GtStrgraphVEdgenum)c); gt_assert(sizeof (GtStrgraphEdgenum) >= sizeof (GtStrgraphCount)); offset += (GtStrgraphCount)c; GT_STRGRAPH_V_SET_OFFSET(strgraph, i, offset); } GT_STRGRAPH_CHECK_NOFEDGES(offset); GT_STRGRAPH_SET_NOFEDGES(strgraph, offset); GT_STRGRAPH_FREE_COUNTS(strgraph); } void gt_strgraph_allocate_graph(GtStrgraph *strgraph, unsigned long fixlen, const GtEncseq *encseq) { gt_assert(strgraph != NULL); gt_assert((fixlen == 0 && encseq != NULL)|| (fixlen > 0 && encseq == NULL)); gt_assert(sizeof (GtStrgraphLength) >= sizeof (unsigned long) || (fixlen > 0 && fixlen <= (unsigned long)GT_STRGRAPH_LENGTH_MAX) || (encseq != NULL && gt_encseq_max_seq_length(encseq))); strgraph->fixlen = (GtStrgraphLength)fixlen; strgraph->encseq = encseq; gt_log_log("minmatchlen = "FormatGtStrgraphLength, strgraph->minmatchlen); gt_strgraph_create_vertices(strgraph); GT_STRGRAPH_ALLOC_EDGES(strgraph); strgraph->state = GT_STRGRAPH_CONSTRUCTION; } void gt_strgraph_delete(GtStrgraph *strgraph) { if (strgraph != NULL) { GT_STRGRAPH_FREE_VERTICES(strgraph); GT_STRGRAPH_FREE_EDGES(strgraph); GT_STRGRAPH_FREE_COUNTS(strgraph); gt_free(strgraph); } } static void gt_strgraph_save(const GtStrgraph *strgraph, GtFile *outfp) { gt_assert(strgraph != NULL); gt_file_xwrite(outfp, (void*)&(GT_STRGRAPH_NOFVERTICES(strgraph)), sizeof (GtStrgraphVnum)); GT_STRGRAPH_SERIALIZE_VERTICES(strgraph, outfp); GT_STRGRAPH_SERIALIZE_EDGES(strgraph, outfp); } static void gt_strgraph_load(GtStrgraph *strgraph, GtFile *infp) { GT_UNUSED int read; GtStrgraphVnum n_vertices; read = gt_file_xread(infp, (void*)&n_vertices, sizeof (GtStrgraphVnum)); gt_assert(read == (int)sizeof (GtStrgraphVnum)); GT_STRGRAPH_SET_NOFVERTICES(strgraph, n_vertices); GT_STRGRAPH_ALLOC_VERTICES(strgraph); GT_STRGRAPH_DESERIALIZE_VERTICES(strgraph, infp); GT_STRGRAPH_ALLOC_EDGES(strgraph); GT_STRGRAPH_DESERIALIZE_EDGES(strgraph, infp); } void gt_strgraph_compact(GtStrgraph *strgraph, bool show_progressbar) { GtStrgraphVnum i; GtStrgraphEdgenum old_offset, next_free_edge, new_offset; GtStrgraphVEdgenum old_nofedges, j; unsigned long long progress = 0; gt_assert(strgraph != NULL); if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); next_free_edge = 0; for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { new_offset = next_free_edge; old_offset = GT_STRGRAPH_V_OFFSET(strgraph, i); old_nofedges = GT_STRGRAPH_V_NOFEDGES(strgraph, i); for (j = 0; j < old_nofedges; j++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) { GT_STRGRAPH_COPY_EDGE(strgraph, old_offset + j, next_free_edge); next_free_edge++; } } GT_STRGRAPH_V_SET_OFFSET(strgraph, i, new_offset); gt_assert(next_free_edge - GT_STRGRAPH_V_OFFSET(strgraph, i) == (GtStrgraphEdgenum)GT_STRGRAPH_V_OUTDEG(strgraph, i)); if (show_progressbar) progress++; } GT_STRGRAPH_V_SET_OFFSET(strgraph, GT_STRGRAPH_NOFVERTICES(strgraph), next_free_edge); if (next_free_edge < GT_STRGRAPH_NOFEDGES(strgraph)) { GT_STRGRAPH_SHRINK_EDGES(strgraph, next_free_edge); } if (show_progressbar) gt_progressbar_stop(); } static GtFile* gt_strgraph_get_file(const char *indexname, const char *suffix, bool write, bool gzipped) { GtFile *file; GtStr *filename; GtError *err; err = gt_error_new(); filename = gt_str_new_cstr(indexname); gt_str_append_cstr(filename, suffix); if (!write && !gt_file_exists(gt_str_get(filename))) { fprintf(stderr, "file %s does not exist\n", gt_str_get(filename)); exit(EXIT_FAILURE); } file = gt_file_open(gzipped ? GT_FILE_MODE_GZIP : GT_FILE_MODE_UNCOMPRESSED, gt_str_get(filename), write ? "w" : "r", err); if (file == NULL) { fprintf(stderr, "%s", gt_error_get(err)); exit(EXIT_FAILURE); } gt_str_delete(filename); gt_error_delete(err); return file; } GtStrgraph* gt_strgraph_new_from_file(const GtEncseq *encseq, unsigned long fixlen, const char *indexname, const char *suffix) { GtStrgraph *strgraph; GtFile *infp; gt_assert(encseq != NULL || fixlen > 0); strgraph = gt_malloc(sizeof (GtStrgraph)); strgraph->encseq = encseq; gt_assert(sizeof (GtStrgraphLength) >= sizeof (unsigned long) || fixlen <= (unsigned long)GT_STRGRAPH_LENGTH_MAX); strgraph->fixlen = (GtStrgraphLength)fixlen; infp = gt_strgraph_get_file(indexname, suffix, false, false); gt_strgraph_load(strgraph, infp); gt_file_delete(infp); return strgraph; } void gt_spmproc_strgraph_count(unsigned long suffix_readnum, unsigned long prefix_readnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *strgraph) { GtStrgraph* g; GtStrgraphVnum position; gt_assert(strgraph != NULL); g = (GtStrgraph*)strgraph; gt_assert(g->state == GT_STRGRAPH_PREPARATION); position = suffixseq_direct ? GT_STRGRAPH_V_E(suffix_readnum) : GT_STRGRAPH_V_B(suffix_readnum); GT_STRGRAPH_INC_COUNT(g, position); position = prefixseq_direct ? GT_STRGRAPH_V_B(prefix_readnum) : GT_STRGRAPH_V_E(prefix_readnum); GT_STRGRAPH_INC_COUNT(g, position); if (g->minmatchlen > (GtStrgraphLength)length) g->minmatchlen = (GtStrgraphLength)length; } int gt_strgraph_open_spmlist_file(GtStrgraph *strgraph, const char *indexname, const char *suffix, bool binary, unsigned long bufsize, GtError *err) { strgraph->binary_spmlist = binary; strgraph->spmfile = gt_fa_fopen_with_suffix(indexname, suffix, binary ? "wb" : "w", err); if (strgraph->spmfile == NULL) return -1; if (bufsize > 0) { strgraph->spmfile_buffer = NULL; (void)setvbuf(strgraph->spmfile, strgraph->spmfile_buffer, (int)_IOFBF, (size_t)bufsize << 20); } if (binary) { if (GT_STRGRAPH_NOFREADS(strgraph) > UINT32_MAX) gt_spmlist_write_header_bin64(strgraph->spmfile); else gt_spmlist_write_header_bin32(strgraph->spmfile); } return 0; } void gt_spmproc_strgraph_count_and_save(unsigned long suffix_readnum, unsigned long prefix_readnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *strgraph) { GtStrgraph* g; gt_assert(strgraph != NULL); g = (GtStrgraph*)strgraph; gt_spmproc_strgraph_count(suffix_readnum, prefix_readnum, length, suffixseq_direct, prefixseq_direct, strgraph); if (g->binary_spmlist) { if (GT_STRGRAPH_NOFREADS(g) > (GtStrgraphVnum)UINT32_MAX) { /*@ignore@*/ gt_spmproc_show_bin64(suffix_readnum, prefix_readnum, length, suffixseq_direct, prefixseq_direct, g->spmfile); /*@end@*/ } else { /*@ignore@*/ gt_spmproc_show_bin32(suffix_readnum, prefix_readnum, length, suffixseq_direct, prefixseq_direct, g->spmfile); /*@end@*/ } } else { GtFile *gtfile = gt_file_new_from_fileptr(g->spmfile); gt_spmproc_show_ascii(suffix_readnum, prefix_readnum, length, suffixseq_direct, prefixseq_direct, gtfile); gt_file_delete_without_handle(gtfile); } } int gt_strgraph_save_counts(GtStrgraph *strgraph, const char *indexname, const char *suffix, GT_UNUSED GtError *err) { GtFile *outfp; gt_assert(strgraph != NULL); gt_assert(strgraph->state == GT_STRGRAPH_PREPARATION); outfp = gt_strgraph_get_file(indexname, suffix, true, false); gt_assert(outfp != NULL); GT_STRGRAPH_SERIALIZE_COUNTS(strgraph, outfp); gt_file_delete(outfp); return 0; } int gt_strgraph_load_counts(GtStrgraph *strgraph, const char *indexname, const char *suffix, GT_UNUSED GtError *err) { GtFile *infp; gt_assert(strgraph != NULL); gt_assert(strgraph->state == GT_STRGRAPH_PREPARATION); infp = gt_strgraph_get_file(indexname, suffix, false, false); gt_assert(infp != NULL); GT_STRGRAPH_DESERIALIZE_COUNTS(strgraph, infp); gt_file_delete(infp); return 0; } void gt_strgraph_close_spmlist_file(GtStrgraph *strgraph) { gt_fa_fclose(strgraph->spmfile); gt_free(strgraph->spmfile_buffer); } static void gt_strgraph_mark_empty_edges(GtStrgraph *strgraph) { GtStrgraphVnum i; GtStrgraphVEdgenum j, n_empty; for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { gt_assert(GT_STRGRAPH_V_OUTDEG(strgraph, i) <= GT_STRGRAPH_V_NOFEDGES(strgraph, i)); n_empty = GT_STRGRAPH_V_NOFEDGES(strgraph, i) - GT_STRGRAPH_V_OUTDEG(strgraph, i); if (n_empty > 0) { for (j = GT_STRGRAPH_V_OUTDEG(strgraph, i); j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { GT_STRGRAPH_EDGE_REDUCE(strgraph, i, j); } } } } int gt_strgraph_load_spm_from_file(GtStrgraph *strgraph, unsigned long min_length, bool load_self_spm, GtBitsequence *contained, const char *indexname, unsigned int nspmfiles, const char *suffix, GtError *err) { int had_err = 0; GtStr *filename = gt_str_new(); GtSpmprocSkipData skipdata; unsigned int i; gt_assert(strgraph != NULL); if (contained != NULL) { skipdata.out.e.proc = gt_spmproc_strgraph_add; skipdata.to_skip = contained; skipdata.out.e.data = strgraph; } strgraph->load_self_spm = load_self_spm; for (i = 0; i < nspmfiles; i++) { gt_str_append_cstr(filename, indexname); gt_str_append_char(filename, '.'); gt_str_append_uint(filename, i); gt_str_append_cstr(filename, suffix); had_err = gt_spmlist_parse(gt_str_get(filename), min_length, contained != NULL ? gt_spmproc_skip : gt_spmproc_strgraph_add, contained != NULL ? (void*)&skipdata : (void*)strgraph, err); gt_str_reset(filename); } gt_str_delete(filename); if (!had_err) gt_strgraph_mark_empty_edges(strgraph); return had_err; } /* --- construction --- */ void gt_strgraph_set_encseq(GtStrgraph *strgraph, const GtEncseq *encseq) { gt_assert(strgraph != NULL); strgraph->encseq = encseq; } static inline void gt_strgraph_add_edge(GtStrgraph *strgraph, GtStrgraphVnum from, GtStrgraphVnum to, GtStrgraphLength spmlen) { GtStrgraphLength edgelen; GtStrgraphVEdgenum next_free_edge; gt_assert(strgraph != NULL); edgelen = GT_STRGRAPH_SEQLEN(strgraph, GT_STRGRAPH_V_READNUM(to)) - spmlen; GT_STRGRAPH_CHECK_LEN(from, to, edgelen); next_free_edge = GT_STRGRAPH_V_OUTDEG(strgraph, from); GT_STRGRAPH_EDGE_INIT(strgraph, from, next_free_edge); GT_STRGRAPH_EDGE_SET_DEST(strgraph, from, next_free_edge, to); GT_STRGRAPH_EDGE_SET_LEN(strgraph, from, next_free_edge, edgelen); GT_STRGRAPH_V_INC_OUTDEG(strgraph, from); } void gt_spmproc_strgraph_add(unsigned long suffix_readnum, unsigned long prefix_readnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *graph) { GtStrgraph *strgraph = graph; GtStrgraphLength edgelen = (GtStrgraphLength)length; gt_assert(strgraph != NULL); gt_assert(suffixseq_direct || prefixseq_direct); if (suffix_readnum == prefix_readnum && !strgraph->load_self_spm) return; if (suffixseq_direct) { if (prefixseq_direct) { gt_strgraph_add_edge(strgraph, GT_STRGRAPH_V_E(suffix_readnum), GT_STRGRAPH_V_E(prefix_readnum), edgelen); gt_strgraph_add_edge(strgraph, GT_STRGRAPH_V_B(prefix_readnum), GT_STRGRAPH_V_B(suffix_readnum), edgelen); } else { gt_strgraph_add_edge(strgraph, GT_STRGRAPH_V_E(suffix_readnum), GT_STRGRAPH_V_B(prefix_readnum), edgelen); gt_strgraph_add_edge(strgraph, GT_STRGRAPH_V_E(prefix_readnum), GT_STRGRAPH_V_B(suffix_readnum), edgelen); } } else { if (prefixseq_direct) { gt_strgraph_add_edge(strgraph, GT_STRGRAPH_V_B(suffix_readnum), GT_STRGRAPH_V_E(prefix_readnum), edgelen); gt_strgraph_add_edge(strgraph, GT_STRGRAPH_V_B(prefix_readnum), GT_STRGRAPH_V_E(suffix_readnum), edgelen); } else { gt_strgraph_add_edge(strgraph, GT_STRGRAPH_V_B(suffix_readnum), GT_STRGRAPH_V_B(prefix_readnum), edgelen); gt_strgraph_add_edge(strgraph, GT_STRGRAPH_V_E(prefix_readnum), GT_STRGRAPH_V_E(suffix_readnum), edgelen); } } } void gt_strgraph_sort_edges_by_len(GtStrgraph *strgraph, bool show_progressbar) { GtStrgraphVnum i; unsigned long long progress = 0; gt_assert(strgraph != NULL); if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { GT_STRGRAPH_SORT_V_EDGES(strgraph, i); if (show_progressbar) progress++; } strgraph->state = GT_STRGRAPH_SORTED_BY_L; if (show_progressbar) gt_progressbar_stop(); } #ifndef NDEBUG static void gt_strgraph_check_outdegs(GtStrgraph *strgraph) { GtStrgraphVnum i; GtStrgraphVEdgenum j, outdeg; for (i = 0UL; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { outdeg = 0; for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) outdeg++; gt_assert(outdeg == GT_STRGRAPH_V_OUTDEG(strgraph, i)); } } #endif static unsigned long gt_strgraph_reduce_marked_edges(GtStrgraph *strgraph) { GtStrgraphVnum i; unsigned long counter = 0; GtStrgraphVEdgenum j; for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if (GT_STRGRAPH_V_OUTDEG(strgraph, i) == 0) continue; for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { if (GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) continue; if (GT_STRGRAPH_EDGE_HAS_MARK(strgraph, i, j)) { GT_STRGRAPH_EDGE_REDUCE(strgraph, i, j); GT_STRGRAPH_V_DEC_OUTDEG(strgraph, i); counter++; } } } return counter; } /* return value: number of self edges */ unsigned long gt_strgraph_redself(GtStrgraph *strgraph, bool show_progressbar) { GtStrgraphVnum vnum; GtStrgraphVEdgenum edgenum; unsigned long counter = 0; unsigned long long progress = 0; gt_assert(strgraph != NULL); counter = 0; if (show_progressbar) gt_progressbar_start(&(progress), (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); for (vnum = 0; vnum < GT_STRGRAPH_NOFVERTICES(strgraph); vnum++) { if (GT_STRGRAPH_V_OUTDEG(strgraph, vnum) > 0) { for (edgenum = 0; edgenum < GT_STRGRAPH_V_NOFEDGES(strgraph, vnum); edgenum++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, vnum, edgenum) && GT_STRGRAPH_EDGE_DEST(strgraph, vnum, edgenum) == vnum) { counter++; GT_STRGRAPH_EDGE_REDUCE(strgraph, vnum, edgenum); GT_STRGRAPH_V_DEC_OUTDEG(strgraph, vnum); } } } if (show_progressbar) progress++; } if (show_progressbar) gt_progressbar_stop(); gt_log_log("self-matches counter: %lu", counter); /* self matches shoud be found twice, check number is even */ gt_assert((counter & 1) == 0); #ifndef NDEBUG gt_strgraph_check_outdegs(strgraph); #endif return (counter >> 1); } /* return value: number of with-rc edges */ unsigned long gt_strgraph_redwithrc(GtStrgraph *strgraph, bool show_progressbar) { GtStrgraphVnum vnum; GtStrgraphVEdgenum edgenum; unsigned long counter = 0; unsigned long long progress = 0; gt_assert(strgraph != NULL); if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); counter = 0; if (show_progressbar) gt_progressbar_start(&(progress), (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); for (vnum = 0; vnum < GT_STRGRAPH_NOFVERTICES(strgraph); vnum++) { if (GT_STRGRAPH_V_OUTDEG(strgraph, vnum) > 0) { for (edgenum = 0; edgenum < GT_STRGRAPH_V_NOFEDGES(strgraph, vnum); edgenum++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, vnum, edgenum) && GT_STRGRAPH_EDGE_DEST(strgraph, vnum, edgenum) == GT_STRGRAPH_V_OTHER(vnum)) { counter++; GT_STRGRAPH_EDGE_REDUCE(strgraph, vnum, edgenum); GT_STRGRAPH_V_DEC_OUTDEG(strgraph, vnum); } } } if (show_progressbar) progress++; } if (show_progressbar) gt_progressbar_stop(); gt_log_log("withrc-matches counter: %lu", counter); /* withrc matches shoud be found twice, check number is even */ gt_assert((counter & 1) == 0); #ifndef NDEBUG gt_strgraph_check_outdegs(strgraph); #endif return (counter >> 1); } /* return value: number of transitive edges */ unsigned long gt_strgraph_redtrans(GtStrgraph *strgraph, bool show_progressbar) { GtStrgraphLength jlen, klen, longest; GtStrgraphVEdgenum j, k, l; GtStrgraphVnum i, jdest, kdest; unsigned long counter; unsigned long long progress = 0; gt_assert(strgraph != NULL); gt_assert(strgraph->state == GT_STRGRAPH_SORTED_BY_L); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_VACANT); if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0) { for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { GT_STRGRAPH_V_SET_MARK(strgraph, GT_STRGRAPH_EDGE_DEST(strgraph, i, j), GT_STRGRAPH_V_INPLAY); } GT_STRGRAPH_FIND_LONGEST_EDGE(strgraph, i, longest); for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { jdest = GT_STRGRAPH_EDGE_DEST(strgraph, i, j); jlen = GT_STRGRAPH_EDGE_LEN(strgraph, i, j); for (k = 0; k < GT_STRGRAPH_V_NOFEDGES(strgraph, jdest) && GT_STRGRAPH_EDGE_LEN(strgraph, jdest, k) + jlen <= longest; k++) { kdest = GT_STRGRAPH_EDGE_DEST(strgraph, jdest, k); klen = GT_STRGRAPH_EDGE_LEN(strgraph, jdest, k); if (GT_STRGRAPH_V_MARK(strgraph, kdest) == GT_STRGRAPH_V_INPLAY) { for (l = 0; l < GT_STRGRAPH_V_NOFEDGES(strgraph, i); l++) { if (GT_STRGRAPH_EDGE_DEST(strgraph, i, l) == kdest && GT_STRGRAPH_EDGE_LEN(strgraph, i, l) == jlen + klen) { GT_STRGRAPH_EDGE_SET_MARK(strgraph, i, l); } } } } } for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { GT_STRGRAPH_V_SET_MARK(strgraph, GT_STRGRAPH_EDGE_DEST(strgraph, i, j), GT_STRGRAPH_V_VACANT); } } if (show_progressbar) progress++; } if (show_progressbar) gt_progressbar_stop(); counter = gt_strgraph_reduce_marked_edges(strgraph); gt_log_log("transitive counter: %lu", counter); /* trans spm should be found twice, check number is even */ /*gt_assert((counter & 1) == 0);*/ #ifndef NDEBUG gt_strgraph_check_outdegs(strgraph); #endif return (counter >> 1); } unsigned long gt_strgraph_redsubmax(GtStrgraph *strgraph, bool show_progressbar) { GtStrgraphVnum i; GtStrgraphVEdgenum j; unsigned long counter = 0; unsigned long long progress = 0; gt_assert(strgraph != NULL); gt_assert(strgraph->state == GT_STRGRAPH_SORTED_BY_L); if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_VACANT); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0) { for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { if (GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) continue; if (GT_STRGRAPH_V_MARK(strgraph, GT_STRGRAPH_EDGE_DEST(strgraph, i, j)) == GT_STRGRAPH_V_INPLAY) { counter++; GT_STRGRAPH_EDGE_REDUCE(strgraph, i, j); GT_STRGRAPH_V_DEC_OUTDEG(strgraph, i); } GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_INPLAY); } for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { GT_STRGRAPH_V_SET_MARK(strgraph, GT_STRGRAPH_EDGE_DEST(strgraph, i, j), GT_STRGRAPH_V_VACANT); } } if (show_progressbar) progress++; } if (show_progressbar) gt_progressbar_stop(); gt_log_log("submaximal counter: %lu", counter); /* nonmax spm shoud be found twice, check number is even */ gt_assert((counter & 1) == 0); #ifndef NDEBUG gt_strgraph_check_outdegs(strgraph); #endif return (counter >> 1); } static inline GtStrgraphVEdgenum gt_strgraph_find_only_edge( GtStrgraph *strgraph, GtStrgraphVnum from) { GtStrgraphVEdgenum j; gt_assert(GT_STRGRAPH_V_OUTDEG(strgraph, from) == (GtStrgraphVEdgenum)1); for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, from); j++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, from, j)) return j; } gt_assert(false); /* outdeg error */ return 0; /* to avoid warnings */ } typedef struct { GtStrgraphVnum vnum; GtStrgraphVEdgenum edgenum; } GtStrgraphEdgeID; unsigned long gt_strgraph_reddepaths(GtStrgraph *strgraph, unsigned long maxdepth, bool show_progressbar) { GtStrgraphVnum i, from, to; GtStrgraphVEdgenum j, from_to; unsigned long depth, d; unsigned long counter = 0, nofdepaths = 0; unsigned long long progress = 0; bool i_branching; GtStrgraphEdgeID *edges; gt_assert(strgraph != NULL); edges = gt_malloc(sizeof (GtStrgraphEdgeID) * (maxdepth + 1)); if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0) { if (GT_STRGRAPH_V_IS_INTERNAL(strgraph, i)) continue; i_branching = (GT_STRGRAPH_V_OUTDEG(strgraph, i) > (GtStrgraphVEdgenum)1 && GT_STRGRAPH_V_INDEG(strgraph, i) > 0) || (GT_STRGRAPH_V_OUTDEG(strgraph, i) == (GtStrgraphVEdgenum)1 && GT_STRGRAPH_V_INDEG(strgraph, i) > (GtStrgraphVEdgenum)1); for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j) && !GT_STRGRAPH_EDGE_HAS_MARK(strgraph, i, j)) { from = i; from_to = j; to = GT_STRGRAPH_EDGE_DEST(strgraph, from, from_to); edges->vnum = from; edges->edgenum = from_to; depth = 1UL; while (GT_STRGRAPH_V_IS_INTERNAL(strgraph, to) && depth <= maxdepth) { depth++; from = to; from_to = gt_strgraph_find_only_edge(strgraph, from); to = GT_STRGRAPH_EDGE_DEST(strgraph, from, from_to); gt_assert(depth >= 1UL); gt_assert(depth - 1UL <= maxdepth); edges[depth - 1UL].vnum = from; edges[depth - 1UL].edgenum = from_to; } if (depth <= maxdepth && (!i_branching || GT_STRGRAPH_V_OUTDEG(strgraph, to) == 0)) { nofdepaths++; for (d = 0; d < depth; d++) { GT_STRGRAPH_EDGE_SET_MARK(strgraph, edges[d].vnum, edges[d].edgenum); } } } } } if (show_progressbar) progress++; } gt_free(edges); counter = gt_strgraph_reduce_marked_edges(strgraph); if (show_progressbar) gt_progressbar_stop(); gt_log_log("dead-paths = %lu", nofdepaths); gt_log_log("dead-path edges = %lu", counter); #ifndef NDEBUG gt_strgraph_check_outdegs(strgraph); #endif return counter; } typedef struct { GtStrgraphVEdgenum edgenum; GtStrgraphVnum dest; unsigned long depth; unsigned long width; } GtStrgraphPathInfo; static int gt_strgraph_path_info_compare(const void *pi_a, const void *pi_b) { int retv; const GtStrgraphPathInfo *a = pi_a, *b = pi_b; retv = (int)(a->dest > b->dest) - (int)(a->dest < b->dest); if (retv == 0) retv = (int)(a->width > b->width) - (int)(a->width < b->width); return retv; } unsigned long gt_strgraph_redpbubbles(GtStrgraph *strgraph, unsigned long maxwidth, const unsigned long maxdiff, bool show_progressbar) { GtStrgraphVnum i, from, to; GtStrgraphVEdgenum j, from_to, p, nofpaths; GtStrgraphLength len; unsigned long depth, width, counter = 0, nofpbubbles = 0; unsigned long long progress = 0; GtStrgraphPathInfo *info, *prev; gt_assert(strgraph != NULL); if (maxwidth == 0) maxwidth = (unsigned long)(gt_strgraph_longest_read(strgraph) << 2) - (strgraph->minmatchlen << 1) - 1; gt_log_log("redpbubbles(maxwidth=%lu, maxdiff=%lu)", maxwidth, maxdiff); /* allocate info and set all marks to VACANT */ { unsigned long maxoutdeg = 0; for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_VACANT); if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > (GtStrgraphVEdgenum)maxoutdeg) maxoutdeg = (unsigned long)GT_STRGRAPH_V_OUTDEG(strgraph, i); } gt_log_log("maxoutdeg = %lu", maxoutdeg); info = gt_malloc(sizeof (GtStrgraphPathInfo) * maxoutdeg); } if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0) { if (GT_STRGRAPH_V_IS_INTERNAL(strgraph, i)) continue; nofpaths = 0; for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) { from = i; from_to = j; to = GT_STRGRAPH_EDGE_DEST(strgraph, i, j); depth = 1UL; len = GT_STRGRAPH_EDGE_LEN(strgraph, i, j); gt_assert(sizeof (unsigned long) >= sizeof (GtStrgraphLength) || len <= (GtStrgraphLength)ULONG_MAX); width = (unsigned long)len; while (GT_STRGRAPH_V_IS_INTERNAL(strgraph, to) && width <= maxwidth) { depth++; from = to; from_to = gt_strgraph_find_only_edge(strgraph, from); len = GT_STRGRAPH_EDGE_LEN(strgraph, from, from_to); gt_assert((sizeof (unsigned long) >= sizeof (GtStrgraphLength) && width <= ULONG_MAX - (unsigned long)len) || (GtStrgraphLength)width + len < (GtStrgraphLength)ULONG_MAX); width += (unsigned long)len; to = GT_STRGRAPH_EDGE_DEST(strgraph, from, from_to); } if (width <= maxwidth && depth > 1UL) { info[nofpaths].edgenum = j; info[nofpaths].dest = to; info[nofpaths].depth = depth; info[nofpaths].width = width; nofpaths++; } } } if (nofpaths > 0) { qsort(info, (size_t)nofpaths, sizeof (*info), gt_strgraph_path_info_compare); prev = info; for (p = (GtStrgraphVEdgenum)1; p < nofpaths; p++) { if (info[p].dest == prev->dest && (info[p].width - prev->width <= maxdiff)) { nofpbubbles++; if (info[p].depth <= prev->depth) { from_to = info[p].edgenum; } else { from_to = prev->edgenum; prev = info + p; } GT_STRGRAPH_EDGE_SET_MARK(strgraph, i, from_to); to = GT_STRGRAPH_EDGE_DEST(strgraph, i, from_to); while (GT_STRGRAPH_V_IS_INTERNAL(strgraph, to)) { from = to; from_to = gt_strgraph_find_only_edge(strgraph, from); GT_STRGRAPH_EDGE_SET_MARK(strgraph, from, from_to); to = GT_STRGRAPH_EDGE_DEST(strgraph, from, from_to); } } else { prev = info + p; } } } } if (show_progressbar) progress++; } counter = gt_strgraph_reduce_marked_edges(strgraph); if (show_progressbar) gt_progressbar_stop(); gt_free(info); gt_log_log("p-bubbles = %lu", nofpbubbles); gt_log_log("removed p-bubble edges = %lu", counter); #ifndef NDEBUG gt_strgraph_check_outdegs(strgraph); #endif return counter; } #define GT_STRGRAPH_DOT_HEADER "digraph StringGraph {\n" #define GT_STRGRAPH_DOT_BI_HEADER "graph StringGraph {\n" #define GT_STRGRAPH_DOT_FOOTER "}\n" static inline void gt_strgraph_dot_show_edge(GtFile *outfp, GtStrgraphVnum from, GtStrgraphVnum to, GtStrgraphLength length) { gt_file_xprintf(outfp, " \"%lu%c\" -> \"%lu%c\" " "[label="FormatGtStrgraphLength"];\n", GT_STRGRAPH_V_READNUM(from), GT_STRGRAPH_V_IS_E(from) ? 'E' : 'B', GT_STRGRAPH_V_READNUM(to), GT_STRGRAPH_V_IS_E(to) ? 'E' : 'B', PRINTGtStrgraphLengthcast(length)); } static void gt_strgraph_dot_show(const GtStrgraph *strgraph, GtFile *outfp, bool show_progressbar) { GtStrgraphVnum i; GtStrgraphVEdgenum j; unsigned long long progress = 0; gt_assert(strgraph != NULL); if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); gt_file_xprintf(outfp, GT_STRGRAPH_DOT_HEADER); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) { gt_strgraph_dot_show_edge(outfp, i, GT_STRGRAPH_EDGE_DEST(strgraph, i, j), GT_STRGRAPH_EDGE_LEN(strgraph, i, j)); } } if (show_progressbar) progress++; } gt_file_xprintf(outfp, GT_STRGRAPH_DOT_FOOTER); if (show_progressbar) gt_progressbar_stop(); } static inline void gt_strgraph_dot_bi_show_edge(GtFile *outfp, unsigned long sn1, bool towards1, unsigned long sn2, bool towards2) { gt_file_xprintf(outfp, " %lu -- %lu [arrowtail=%s,arrowhead=%s];\n", sn1, sn2, towards1 ? "normal" : "inv", towards2 ? "normal" : "inv"); } static void gt_strgraph_dot_bi_show(const GtStrgraph *strgraph, GtFile *outfp, bool show_progressbar) { unsigned long sn1, sn2; GtStrgraphVnum i; GtStrgraphVEdgenum j; bool is_e1, is_e2; unsigned long long progress = 0; gt_assert(strgraph != NULL); if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); gt_file_xprintf(outfp, GT_STRGRAPH_DOT_BI_HEADER); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0) { sn1 = GT_STRGRAPH_V_READNUM(i); is_e1 = GT_STRGRAPH_V_IS_E(i); for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) { sn2 = GT_STRGRAPH_V_READNUM(GT_STRGRAPH_EDGE_DEST(strgraph, i, j)); is_e2 = GT_STRGRAPH_V_IS_E(GT_STRGRAPH_EDGE_DEST(strgraph, i, j)); if (is_e1 && is_e2) { gt_strgraph_dot_bi_show_edge(outfp, sn1, false, sn2, true); } else if ((is_e1 && !is_e2) && (sn1 < sn2)) { gt_strgraph_dot_bi_show_edge(outfp, sn1, false, sn2, false); } else if ((!is_e1 && is_e2) && (sn1 > sn2)) { gt_strgraph_dot_bi_show_edge(outfp, sn1, true, sn2, true); } /* other E->B / B->E cases, as well as all B-B are not considered to avoid double output */ } } } if (show_progressbar) progress++; } gt_file_xprintf(outfp, GT_STRGRAPH_DOT_FOOTER); if (show_progressbar) gt_progressbar_stop(); } typedef struct { GtStrgraphVnum v; unsigned long d; } GtStrgraphVnumAndDepth; static void gt_strgraph_dot_show_context(const GtStrgraph *strgraph, GtFile *outfp, unsigned long readnum, unsigned long depth) { GtArray *stack; GtStrgraphVnumAndDepth to_add, *current; GtStrgraphVnum v; GtStrgraphVEdgenum j; unsigned long d; stack = gt_array_new(sizeof (GtStrgraphVnumAndDepth)); to_add.v = GT_STRGRAPH_V_B(readnum); to_add.d = 1UL; gt_array_add(stack, to_add); to_add.v = GT_STRGRAPH_V_E(readnum); to_add.d = 1UL; gt_array_add(stack, to_add); while (gt_array_size(stack) > 0) { current = gt_array_pop(stack); v = current->v; d = current->d; for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, v); j++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, v, j)) { gt_strgraph_dot_show_edge(outfp, v, GT_STRGRAPH_EDGE_DEST(strgraph, v, j), GT_STRGRAPH_EDGE_LEN(strgraph, v, j)); if (d < depth) { to_add.v = GT_STRGRAPH_EDGE_DEST(strgraph, v, j); to_add.d = d + 1; gt_array_add(stack, to_add); } } } } gt_array_delete(stack); } /* format: read[E|B] [numofedges]: neighbor1[E|B], neighbor2[E|B]... */ static void gt_strgraph_adjlist_show(const GtStrgraph *strgraph, GtFile *outfp) { GtStrgraphVnum i; GtStrgraphVEdgenum j; for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { gt_file_xprintf(outfp, "%lu%c " "["FormatGtStrgraphVEdgenum"]", GT_STRGRAPH_V_READNUM(i), GT_STRGRAPH_V_CHAR(i), PRINTGtStrgraphVEdgenumcast(GT_STRGRAPH_V_OUTDEG(strgraph, i))); if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0) { gt_file_xprintf(outfp, " --> "); for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) { gt_file_xprintf(outfp, "%lu%c ("FormatGtStrgraphLength");", GT_STRGRAPH_V_READNUM(GT_STRGRAPH_EDGE_DEST(strgraph, i, j)), GT_STRGRAPH_V_CHAR(GT_STRGRAPH_EDGE_DEST(strgraph, i, j)), PRINTGtStrgraphVEdgenumcast( GT_STRGRAPH_EDGE_LEN(strgraph, i, j))); } } } gt_file_xfputc('\n', outfp); } } static void gt_strgraph_spm_show(const GtStrgraph *strgraph, GtFile *outfp) { unsigned long sn1, sn2; GtStrgraphVnum i, v2; GtStrgraphLength spm_len; GtStrgraphVEdgenum j; bool is_e1, is_e2; for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0) { sn1 = GT_STRGRAPH_V_READNUM(i); is_e1 = GT_STRGRAPH_V_IS_E(i); for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) { v2 = GT_STRGRAPH_EDGE_DEST(strgraph, i, j); sn2 = GT_STRGRAPH_V_READNUM(v2); spm_len = GT_STRGRAPH_SEQLEN(strgraph, sn2) - GT_STRGRAPH_EDGE_LEN(strgraph, i, j); is_e2 = GT_STRGRAPH_V_IS_E(v2); if ((is_e1 && is_e2) || (is_e1 && !is_e2 && (sn1 <= sn2)) || (!is_e1 && is_e2 && (sn1 >= sn2))) { /* other E->B / B->E cases, as well as all B-B are not considered to avoid double output */ gt_file_xprintf(outfp, "%lu %s %lu %s "FormatGtStrgraphLength"\n", sn1, is_e1 ? "+" : "-", sn2, is_e2 ? "+" : "-", PRINTGtStrgraphLengthcast(spm_len)); } } } } } } static void gt_strgraph_asqg_show(const GtStrgraph *strgraph, const char *indexname, GtFile *outfp) { unsigned long sn1, sn2; GtStrgraphVnum i, v2; unsigned long sl2, spm_len; GtStrgraphVEdgenum j; bool is_e1, is_e2; GtError *err; int had_err = 0; GtAsqgWriter *aw = NULL; err = gt_error_new(); gt_assert(strgraph->encseq != NULL); aw = gt_asqg_writer_new(outfp, strgraph->encseq); had_err = gt_asqg_writer_show_header(aw, 0.0, (unsigned long) strgraph->minmatchlen, indexname, false, false, err); if (!had_err) had_err = gt_asqg_writer_show_vertices(aw, err); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph) && !had_err; i++) { if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0) { sn1 = GT_STRGRAPH_V_READNUM(i); is_e1 = GT_STRGRAPH_V_IS_E(i); for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i) && !had_err; j++) { if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) { v2 = GT_STRGRAPH_EDGE_DEST(strgraph, i, j); sn2 = GT_STRGRAPH_V_READNUM(v2); sl2 = (unsigned long)GT_STRGRAPH_SEQLEN(strgraph, sn2); spm_len = sl2 - (unsigned long)GT_STRGRAPH_EDGE_LEN(strgraph, i, j); is_e2 = GT_STRGRAPH_V_IS_E(v2); if ((is_e1 && is_e2 && (sn1 >= sn2)) || (!is_e1 && !is_e2 && (sn1 > sn2)) || (is_e1 && !is_e2 && (sn1 >= sn2)) || (!is_e1 && is_e2 && (sn1 > sn2))) { /* other E->B / B->E cases, as well as all B-B are not considered to avoid double output */ gt_spmproc_show_asgq(sn1, sn2, spm_len, is_e1, is_e2, aw); } } } } } if (had_err) { fprintf(stderr, "%s", gt_error_get(err)); exit(EXIT_FAILURE); } gt_asqg_writer_delete(aw); gt_error_delete(err); } void gt_strgraph_show(const GtStrgraph *strgraph, GtStrgraphFormat format, const char *indexname, const char *suffix, bool show_progressbar) { GtFile *outfp = NULL; gt_assert(strgraph != NULL); outfp = gt_strgraph_get_file(indexname, suffix, true, format == GT_STRGRAPH_ASQG_GZ ? true : false); switch (format) { case GT_STRGRAPH_DOT: gt_strgraph_dot_show(strgraph, outfp, show_progressbar); break; case GT_STRGRAPH_DOT_BI: gt_strgraph_dot_bi_show(strgraph, outfp, show_progressbar); break; case GT_STRGRAPH_ADJLIST: gt_strgraph_adjlist_show(strgraph, outfp); break; case GT_STRGRAPH_SPM: gt_strgraph_spm_show(strgraph, outfp); break; case GT_STRGRAPH_ASQG_GZ: /*@ fallthrough @*/ case GT_STRGRAPH_ASQG: gt_strgraph_asqg_show(strgraph, indexname, outfp); break; case GT_STRGRAPH_BIN: gt_strgraph_save(strgraph, outfp); break; default: gt_assert(false); break; } gt_file_delete(outfp); } static int gt_strgraph_show_disc_distri_datapoint(unsigned long key, unsigned long long value, GtFile *outfile) { gt_file_xprintf(outfile, "%lu "Formatuint64_t"\n", key, PRINTuint64_tcast((uint64_t)value)); return 0; } void gt_strgraph_show_edge_lengths_distribution(const GtStrgraph *strgraph, const char *indexname, const char *suffix) { GtDiscDistri *d = gt_disc_distri_new(); GtStrgraphVnum i; GtStrgraphVEdgenum j; GtFile *outfp = gt_strgraph_get_file(indexname, suffix, true, false); gt_assert(strgraph != NULL); gt_assert(sizeof (unsigned long) >= sizeof (GtStrgraphLength)); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { gt_disc_distri_add(d, (unsigned long)GT_STRGRAPH_EDGE_LEN(strgraph, i, j)); } } gt_file_xprintf(outfp, "# length nofedges\n"); gt_disc_distri_foreach(d, (GtDiscDistriIterFunc) gt_strgraph_show_disc_distri_datapoint, outfp); gt_disc_distri_delete(d); gt_file_delete(outfp); } void gt_strgraph_show_counts_distribution(const GtStrgraph *strgraph, const char *indexname, const char *suffix) { GtDiscDistri *d = gt_disc_distri_new(); GtFile *outfp = gt_strgraph_get_file(indexname, suffix, true, false); GtStrgraphVnum i; gt_assert(strgraph != NULL); gt_assert(sizeof (unsigned long) >= sizeof (GtStrgraphCount)); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) gt_disc_distri_add(d, (unsigned long)GT_STRGRAPH_GET_COUNT(strgraph, i)); gt_file_xprintf(outfp, "# count nofvertices\n"); gt_disc_distri_foreach(d, (GtDiscDistriIterFunc) gt_strgraph_show_disc_distri_datapoint, outfp); gt_disc_distri_delete(d); gt_file_delete(outfp); } int gt_strgraph_show_context(const GtStrgraph *strgraph, GT_UNUSED /* only in assertions */ GtStrgraphFormat format, const char *indexname, const char *suffix, unsigned long *readnums, unsigned long nofreadnums, unsigned long depth, GtError *err) { GtStrgraphVnum i; int had_err = 0; GtFile *outfp = NULL; gt_assert(strgraph != NULL); gt_assert(format == GT_STRGRAPH_DOT); outfp = gt_strgraph_get_file(indexname, suffix, true, false); gt_file_xprintf(outfp, GT_STRGRAPH_DOT_HEADER); gt_assert(sizeof (GtStrgraphVnum) >= sizeof (unsigned long)); for (i = 0; i < (GtStrgraphVnum)nofreadnums; i++) { if (i >= GT_STRGRAPH_NOFREADS(strgraph)) { had_err = -1; gt_error_set(err, "Can't show context of read "FormatGtStrgraphVnum" " "because the readset has "FormatGtStrgraphVnum" reads", i, GT_STRGRAPH_NOFREADS(strgraph)); break; } gt_strgraph_dot_show_context(strgraph, outfp, readnums[i], depth); } gt_file_xprintf(outfp, GT_STRGRAPH_DOT_FOOTER); gt_file_delete(outfp); return had_err; } /* log using for large values */ static void gt_strgraph_log_space_value(const char *prefix, size_t value) { char unit_prefix; float float_value; if (value < (size_t)1024) { gt_log_log("%s = %lu bytes", prefix, (unsigned long)value); } else { if (value < (size_t)1048576) { unit_prefix = 'k'; float_value = (float)value / 1024.F; } else if (value < (size_t)1073741824UL) { unit_prefix = 'M'; float_value = (float)value / 1048576.F; } else { unit_prefix = 'G'; float_value = (float)value / 1073741824.F; } gt_log_log("%s = %lu bytes (%.2f %cb)", prefix, (unsigned long)value, float_value, unit_prefix); } } void gt_strgraph_log_space(const GtStrgraph *strgraph) { size_t space_for_edges, space_for_vertices, total_space; gt_assert(strgraph != NULL); space_for_edges = GT_STRGRAPH_SIZEOF_EDGES(strgraph); space_for_vertices = GT_STRGRAPH_SIZEOF_VERTICES(strgraph); total_space = sizeof (GtStrgraph) + space_for_edges + space_for_vertices; gt_strgraph_log_space_value("space graph", total_space); gt_strgraph_log_space_value("- edges", space_for_edges); gt_strgraph_log_space_value("- vertices", space_for_vertices); } static inline GtStrgraphVnum gt_strgraph_nofvertices_Vnum( const GtStrgraph *strgraph) { GtStrgraphVnum i, connected_vertices; gt_assert(strgraph != NULL); connected_vertices = 0; for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if ((GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0) || (GT_STRGRAPH_V_INDEG(strgraph, i) > 0)) { connected_vertices++; } } return connected_vertices; } unsigned long gt_strgraph_nofvertices(const GtStrgraph *strgraph) { GtStrgraphVnum retval; retval = gt_strgraph_nofvertices_Vnum(strgraph); gt_assert(sizeof (unsigned long) >= sizeof (GtStrgraphVnum) || retval <= (GtStrgraphVnum)ULONG_MAX); return (unsigned long)retval; } unsigned long gt_strgraph_nofreads(const GtStrgraph *strgraph) { GtStrgraphVnum i; unsigned long connected_reads = 0; bool already_counted = false; gt_assert(strgraph != NULL); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if (GT_STRGRAPH_V_IS_B(i)) already_counted = false; /* if IS_E, then the read may already have been counted, in the case B was connected*/ if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0) { if (already_counted == false) { connected_reads++; already_counted = true; } } } return connected_reads; } static inline GtStrgraphEdgenum gt_strgraph_nofedges_Edgenum( const GtStrgraph *strgraph) { GtStrgraphVnum i; GtStrgraphEdgenum total_degree = 0; gt_assert(strgraph != NULL); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) total_degree += GT_STRGRAPH_V_OUTDEG(strgraph, i); return total_degree; } unsigned long gt_strgraph_nofedges(const GtStrgraph *strgraph) { GtStrgraphEdgenum retval; retval = gt_strgraph_nofedges_Edgenum(strgraph); gt_assert(sizeof (unsigned long) >= sizeof (GtStrgraphEdgenum) || retval <= (GtStrgraphEdgenum)ULONG_MAX); return (unsigned long)retval; } unsigned long gt_strgraph_nofspm(const GtStrgraph *strgraph) { unsigned long total_degree; gt_assert(strgraph != NULL); /* nofspm is half of total degree */ total_degree = gt_strgraph_nofedges(strgraph); /* gt_assert(!(total_degree & 1)); */ return ((total_degree >> 1)); } void gt_strgraph_log_stats(const GtStrgraph *strgraph, GtLogger *logger) { GtStrgraphVnum v = 0; GtStrgraphEdgenum e = 0; float avg_deg; gt_assert(strgraph != NULL); v = gt_strgraph_nofvertices_Vnum(strgraph); e = gt_strgraph_nofedges_Edgenum(strgraph); avg_deg = (v == 0UL) ? (float)0 : (float)(e) / (float)(v); gt_logger_log(logger, "vertices: "FormatGtStrgraphVnum " (reads: "FormatGtStrgraphVnum") -- edges: "FormatGtStrgraphEdgenum" " "(spm: "FormatGtStrgraphEdgenum") -- e/v: %.4f", v, v >> 1, e, e >> 1, avg_deg); } static inline void gt_strgraph_traverse_simple_path(GtStrgraph *strgraph, GtStrgraphVnum i, GtStrgraphVEdgenum j, void(*process_edge) (GtStrgraphVnum, GtStrgraphLength, void*), void *data) { GtStrgraphVnum from, to; GtStrgraphVEdgenum from_to; from = i; from_to = j; to = GT_STRGRAPH_EDGE_DEST(strgraph, i, j); while (GT_STRGRAPH_V_IS_INTERNAL(strgraph, to) && i != to && GT_STRGRAPH_V_MARK(strgraph, to) != GT_STRGRAPH_V_ELIMINATED) { if (process_edge != NULL) process_edge(to, GT_STRGRAPH_EDGE_LEN(strgraph, from, from_to), data); GT_STRGRAPH_V_SET_MARK(strgraph, to, GT_STRGRAPH_V_ELIMINATED); GT_STRGRAPH_V_SET_MARK(strgraph, GT_STRGRAPH_V_OTHER(to), GT_STRGRAPH_V_ELIMINATED); from = to; from_to = gt_strgraph_find_only_edge(strgraph, from); to = GT_STRGRAPH_EDGE_DEST(strgraph, from, from_to); } if (process_edge != NULL) process_edge(to, GT_STRGRAPH_EDGE_LEN(strgraph, from, from_to), data); } static inline void gt_strgraph_traverse_from_vertex(GtStrgraph *strgraph, GtStrgraphVnum i, void(*process_start) (GtStrgraphVnum, void*), void(*process_edge) (GtStrgraphVnum, GtStrgraphLength, void*), void *data) { GtStrgraphVEdgenum j; gt_assert(GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0); for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++) { if (GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j)) continue; if (GT_STRGRAPH_V_MARK(strgraph, GT_STRGRAPH_EDGE_DEST(strgraph, i, j)) == GT_STRGRAPH_V_ELIMINATED) continue; if (process_start != NULL) process_start(i, data); gt_strgraph_traverse_simple_path(strgraph, i, j, process_edge, data); } } static void gt_strgraph_traverse(GtStrgraph *strgraph, void(*process_start) (GtStrgraphVnum, void*), void(*process_edge) (GtStrgraphVnum, GtStrgraphLength, void*), void *data, bool show_progressbar) { GtStrgraphVnum i; unsigned long long progress = 0; gt_assert(strgraph != NULL); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_VACANT); if (show_progressbar) gt_progressbar_start(&progress, (unsigned long long)GT_STRGRAPH_NOFVERTICES(strgraph)); for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if (GT_STRGRAPH_V_MARK(strgraph, i) != GT_STRGRAPH_V_ELIMINATED) { if (GT_STRGRAPH_V_OUTDEG(strgraph, i) == 0) { GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_ELIMINATED); } else if (!GT_STRGRAPH_V_IS_INTERNAL(strgraph, i)) { gt_strgraph_traverse_from_vertex(strgraph, i, process_start, process_edge, data); GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_ELIMINATED); } } if (show_progressbar) progress++; } if (show_progressbar) gt_progressbar_stop(); /* handle circles of internal vertices only */ for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++) { if (GT_STRGRAPH_V_IS_INTERNAL(strgraph, i) && GT_STRGRAPH_V_MARK(strgraph, i) != GT_STRGRAPH_V_ELIMINATED) gt_strgraph_traverse_from_vertex(strgraph, i, process_start, process_edge, data); } } #define GT_STRGRAPH_CONTIG_INC 16384UL /* seqnum where to read label for edge/vertex in mirrored encseq */ #define GT_STRGRAPH_V_SEQNUM(NOFV, V) (GT_STRGRAPH_V_IS_E(V) \ ? GT_STRGRAPH_V_READNUM(V) \ : ((unsigned long)NOFV - GT_STRGRAPH_V_READNUM(V) - 1)) /* --- Contig Paths Output --- */ /* * File format: * * ELEM1 ELEM2 * * ELEM1: 0 --> start new contig, from seq with seqnum ELEM2 * >0 --> read chars (lastchar - ELEM1 + 1)..lastchar * from seq with seqnum ELEM2 * ELEM2: seqnum in mirrored sequence * * */ GT_DECLAREARRAYSTRUCT(GtContigpathElem); typedef struct { unsigned long total_depth, current_depth, contignum, min_depth; GtStrgraphVnum nof_v, lastnode; GtFile *outfp; GtArrayGtContigpathElem contig; } GtStrgraphContigpathsData; static void gt_strgraph_show_contigpath_edge(GtStrgraphVnum v, GtStrgraphLength len, void *data) { GtStrgraphContigpathsData *pdata = data; GtContigpathElem *value; unsigned long seqnum; (pdata->current_depth)++; /* first element: length */ GT_GETNEXTFREEINARRAY(value, &pdata->contig, GtContigpathElem, GT_STRGRAPH_CONTIG_INC); gt_assert(sizeof (GtContigpathElem) >= sizeof (GtStrgraphLength) || len <= (GtStrgraphLength)GT_CONTIGPATH_ELEM_MAX); *value = (GtContigpathElem)len; /* second element: vertex number */ GT_GETNEXTFREEINARRAY(value, &pdata->contig, GtContigpathElem, GT_STRGRAPH_CONTIG_INC); seqnum = GT_STRGRAPH_V_SEQNUM(pdata->nof_v, v); gt_assert(sizeof (GtContigpathElem) >= sizeof (GtStrgraphVnum) || seqnum <= (unsigned long)GT_CONTIGPATH_ELEM_MAX); *value = (GtContigpathElem)seqnum; pdata->lastnode = v; } static inline void gt_strgraph_show_contigpath(GtStrgraphContigpathsData *pdata) { gt_file_xwrite(pdata->outfp, pdata->contig.spaceGtContigpathElem, sizeof (GtContigpathElem) * pdata->contig.nextfreeGtContigpathElem); pdata->total_depth += pdata->current_depth; (pdata->contignum)++; } static void gt_strgraph_show_contigpath_vertex(GtStrgraphVnum firstvertex, void *data) { GtStrgraphContigpathsData *pdata = data; GtContigpathElem *value; unsigned long seqnum; if (pdata->current_depth >= pdata->min_depth) gt_strgraph_show_contigpath(pdata); pdata->current_depth = 1UL; /* 0 to start a new contig */ pdata->contig.nextfreeGtContigpathElem = 0; GT_GETNEXTFREEINARRAY(value, &pdata->contig, GtContigpathElem, GT_STRGRAPH_CONTIG_INC); *value = 0; /* seqnum of origin vertex */ GT_GETNEXTFREEINARRAY(value, &pdata->contig, GtContigpathElem, GT_STRGRAPH_CONTIG_INC); seqnum = GT_STRGRAPH_V_SEQNUM(pdata->nof_v, firstvertex); gt_assert(sizeof (GtContigpathElem) >= sizeof (GtStrgraphVnum) || seqnum <= (unsigned long)GT_CONTIGPATH_ELEM_MAX); *value = (GtContigpathElem)seqnum; } static void gt_strgraph_show_contigpaths(GtStrgraph *strgraph, unsigned long min_path_depth, GtFile *outfp, bool show_progressbar) { GtStrgraphContigpathsData pdata; pdata.total_depth = 0; pdata.current_depth = 0; pdata.contignum = 0; pdata.lastnode = 0; GT_INITARRAY(&pdata.contig, GtContigpathElem); pdata.outfp = outfp; pdata.min_depth = min_path_depth; pdata.nof_v = GT_STRGRAPH_NOFVERTICES(strgraph); gt_strgraph_traverse(strgraph, gt_strgraph_show_contigpath_vertex, gt_strgraph_show_contigpath_edge, &pdata, show_progressbar); /* show last contig path */ if (pdata.current_depth > pdata.min_depth) gt_strgraph_show_contigpath(&pdata); gt_log_log("traversed edges = %lu", pdata.total_depth); gt_log_log("numofcontigs = %lu", pdata.contignum); GT_FREEARRAY(&pdata.contig, GtContigpathElem); } /* --- Direct Contig Output --- */ typedef struct { unsigned long total_depth, current_depth, min_depth, current_length, min_length, contignum; GtStrgraph *strgraph; GtContigsWriter *cw; } GtStrgraphSpellData; static void gt_strgraph_spell_edge(GtStrgraphVnum v, GtStrgraphLength len, void *data) { GtStrgraphSpellData *sdata = data; gt_contigs_writer_append(sdata->cw, GT_STRGRAPH_V_SEQNUM( GT_STRGRAPH_NOFVERTICES(sdata->strgraph), v), (unsigned long)len); (sdata->current_depth)++; sdata->current_length += len; } static void gt_strgraph_spell_vertex(GtStrgraphVnum firstvertex, void *data) { GtStrgraphSpellData *sdata = data; if ((sdata->current_depth >= sdata->min_depth) && (sdata->current_length >= sdata->min_length)) { sdata->total_depth += sdata->current_depth; gt_contigs_writer_write(sdata->cw); (sdata->contignum)++; } else gt_contigs_writer_abort(sdata->cw); gt_contigs_writer_start(sdata->cw, GT_STRGRAPH_V_SEQNUM(GT_STRGRAPH_NOFVERTICES(sdata->strgraph), firstvertex)); sdata->current_length = (unsigned long)GT_STRGRAPH_SEQLEN(sdata->strgraph, firstvertex); sdata->current_depth = 1UL; } static void gt_strgraph_show_contigs(GtStrgraph *strgraph, unsigned long min_path_depth, unsigned long min_contig_length, bool showpaths, GtFile *outfp, const GtEncseq *encseq, bool show_progressbar, GtLogger *logger) { GtStrgraphSpellData sdata; gt_strgraph_set_encseq(strgraph, encseq); sdata.cw = gt_contigs_writer_new(encseq, outfp, showpaths); sdata.strgraph = strgraph; sdata.total_depth = 0; sdata.current_depth = 0; sdata.current_length = 0; sdata.contignum = 0; sdata.min_depth = min_path_depth; sdata.min_length = min_contig_length; gt_strgraph_traverse(strgraph, gt_strgraph_spell_vertex, gt_strgraph_spell_edge, &sdata, show_progressbar); /* show last contig */ if (sdata.current_depth >= min_path_depth && sdata.current_length >= min_contig_length) gt_contigs_writer_write(sdata.cw); else gt_contigs_writer_abort(sdata.cw); gt_log_log("traversed edges = %lu", sdata.total_depth); gt_log_log("numofcontigs = %lu", sdata.contignum); if (sdata.contignum > 0) gt_contigs_writer_show_stats(sdata.cw, logger); else gt_logger_log(logger, "no contigs respect the given cutoff parameters"); gt_contigs_writer_delete(sdata.cw); } void gt_strgraph_spell(GtStrgraph *strgraph, unsigned long min_path_depth, unsigned long min_contig_length, bool showpaths, const char *indexname, const char *suffix, const GtEncseq *encseq, bool delay_reads_mapping, bool show_progressbar, GtLogger *logger) { FILE *outfp = NULL; GtFile *gt_outfp = NULL; GtStr *filename; gt_assert(strgraph != NULL); filename = gt_str_new_cstr(indexname); gt_str_append_cstr(filename, suffix); outfp = gt_fa_xfopen(gt_str_get(filename), "w"); gt_outfp = gt_file_new_from_fileptr(outfp); if (!delay_reads_mapping) gt_strgraph_show_contigs(strgraph, min_path_depth, min_contig_length, showpaths, gt_outfp, encseq, show_progressbar, logger); else gt_strgraph_show_contigpaths(strgraph, min_path_depth, gt_outfp, show_progressbar); gt_str_delete(filename); gt_file_delete(gt_outfp); } /* --- UNIT TESTS --- */ #define GT_STRGRAPH_UTEST(TEST) \ if (!had_err) \ had_err = gt_strgraph_ ## TEST ## _unit_test(err) static int gt_strgraph_new_unit_test(GtError *err) { int had_err = 0; GtStrgraph *strgraph = NULL; gt_error_check(err); /* ordinary number of reads */ strgraph = gt_strgraph_new(100UL); gt_ensure(had_err, strgraph != NULL); gt_strgraph_delete(strgraph); return had_err; } static int gt_strgraph_delete_unit_test(GT_UNUSED /* when compiled without assertions */ GtError *err) { GtStrgraph *strgraph; gt_error_check(err); strgraph = NULL; gt_strgraph_delete(strgraph); strgraph = gt_strgraph_new(100UL); gt_strgraph_delete(strgraph); return 0; } static int gt_strgraph_creation_unit_test(GtError *err) { int had_err = 0; GtStrgraph *strgraph; unsigned long nofreads = 2UL; gt_error_check(err); strgraph = gt_strgraph_new(nofreads); gt_spmproc_strgraph_count(0, 1UL, 10UL, true, true, strgraph); gt_ensure(had_err, GT_STRGRAPH_GET_COUNT(strgraph, GT_STRGRAPH_V_B(0)) == 0); gt_ensure(had_err, GT_STRGRAPH_GET_COUNT(strgraph, GT_STRGRAPH_V_E(0)) == (GtStrgraphCount)1); gt_ensure(had_err, GT_STRGRAPH_GET_COUNT(strgraph, GT_STRGRAPH_V_B(1)) == (GtStrgraphCount)1); gt_ensure(had_err, GT_STRGRAPH_GET_COUNT(strgraph, GT_STRGRAPH_V_E(1)) == 0); gt_strgraph_allocate_graph(strgraph, 100UL, NULL); gt_ensure(had_err, GT_STRGRAPH_V_NOFEDGES(strgraph, GT_STRGRAPH_V_B(0)) == 0); gt_ensure(had_err, GT_STRGRAPH_V_NOFEDGES(strgraph, GT_STRGRAPH_V_E(0)) == (GtStrgraphVEdgenum)1); gt_ensure(had_err, GT_STRGRAPH_V_NOFEDGES(strgraph, GT_STRGRAPH_V_B(1)) == (GtStrgraphVEdgenum)1); gt_ensure(had_err, GT_STRGRAPH_V_NOFEDGES(strgraph, GT_STRGRAPH_V_E(1)) == 0); gt_strgraph_delete(strgraph); return had_err; } static int gt_strgraph_add_spm_unit_test(GtError *err) { int had_err = 0; GtStrgraph *strgraph; unsigned long nofreads = 2UL; gt_error_check(err); strgraph = gt_strgraph_new(nofreads); gt_spmproc_strgraph_count(0, 1UL, 10UL, true, true, strgraph); gt_strgraph_allocate_graph(strgraph, 22UL, NULL); gt_spmproc_strgraph_add(0, 1UL, 10UL, true, true, strgraph); gt_ensure(had_err, GT_STRGRAPH_NOFVERTICES(strgraph) == (GtStrgraphVnum)4); gt_ensure(had_err, GT_STRGRAPH_V_OUTDEG(strgraph, GT_STRGRAPH_V_B(0)) == 0); gt_ensure(had_err, GT_STRGRAPH_V_OUTDEG(strgraph, GT_STRGRAPH_V_E(0)) == (GtStrgraphVEdgenum)1); gt_ensure(had_err, GT_STRGRAPH_EDGE_DEST(strgraph, GT_STRGRAPH_V_E(0), 0) == GT_STRGRAPH_V_E(1)); gt_ensure(had_err, GT_STRGRAPH_EDGE_LEN(strgraph, GT_STRGRAPH_V_E(0), 0) == (GtStrgraphLength)12); gt_ensure(had_err, !GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, GT_STRGRAPH_V_E(0), 0)); gt_ensure(had_err, GT_STRGRAPH_V_OUTDEG(strgraph, GT_STRGRAPH_V_B(1)) == (GtStrgraphVEdgenum)1); gt_ensure(had_err, GT_STRGRAPH_V_OUTDEG(strgraph, GT_STRGRAPH_V_E(1)) == 0); gt_ensure(had_err, GT_STRGRAPH_EDGE_DEST(strgraph, GT_STRGRAPH_V_B(1), 0) == (GtStrgraphVnum)GT_STRGRAPH_V_B(0)); gt_ensure(had_err, GT_STRGRAPH_EDGE_LEN(strgraph, GT_STRGRAPH_V_B(1), 0) == (GtStrgraphLength)12); gt_ensure(had_err, !GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, GT_STRGRAPH_V_B(1), 0)); gt_strgraph_delete(strgraph); return had_err; } static int gt_strgraph_redtrans_unit_test(GtError *err) { int had_err = 0; GtStrgraph *strgraph; unsigned long nofreads = 5UL; GT_ENSURE_OUTPUT_DECLARE(2000); gt_error_check(err); /* test case: --------2------------- ----------0----------- --------RC(1)--------- ---------3------------ -------RC(4)---------- */ strgraph = gt_strgraph_new(nofreads); gt_spmproc_strgraph_count(4UL, 3UL, 19UL, false, true, strgraph); gt_spmproc_strgraph_count(1UL, 4UL, 16UL, true, true, strgraph); gt_spmproc_strgraph_count(4UL, 0UL, 10UL, false, true, strgraph); gt_spmproc_strgraph_count(4UL, 2UL, 3UL, false, true, strgraph); gt_spmproc_strgraph_count(3UL, 1UL, 19UL, true, false, strgraph); gt_spmproc_strgraph_count(3UL, 0UL, 13UL, true, true, strgraph); gt_spmproc_strgraph_count(3UL, 2UL, 6UL, true, true, strgraph); gt_spmproc_strgraph_count(1UL, 0UL, 16UL, false, true, strgraph); gt_spmproc_strgraph_count(1UL, 2UL, 9UL, false, true, strgraph); gt_spmproc_strgraph_count(0UL, 2UL, 15UL, true, true, strgraph); gt_strgraph_allocate_graph(strgraph, 22UL, NULL); gt_spmproc_strgraph_add(4UL, 3UL, 19UL, false, true, strgraph); gt_spmproc_strgraph_add(1UL, 4UL, 16UL, true, true, strgraph); gt_spmproc_strgraph_add(4UL, 0UL, 10UL, false, true, strgraph); gt_spmproc_strgraph_add(4UL, 2UL, 3UL, false, true, strgraph); gt_spmproc_strgraph_add(3UL, 1UL, 19UL, true, false, strgraph); gt_spmproc_strgraph_add(3UL, 0UL, 13UL, true, true, strgraph); gt_spmproc_strgraph_add(3UL, 2UL, 6UL, true, true, strgraph); gt_spmproc_strgraph_add(1UL, 0UL, 16UL, false, true, strgraph); gt_spmproc_strgraph_add(1UL, 2UL, 9UL, false, true, strgraph); gt_spmproc_strgraph_add(0UL, 2UL, 15UL, true, true, strgraph); GT_ENSURE_OUTPUT(gt_strgraph_dot_show(strgraph, outfp, false), "digraph StringGraph {\n" " \"0B\" -> \"4E\" [label=12];\n" " \"0B\" -> \"3B\" [label=9];\n" " \"0B\" -> \"1E\" [label=6];\n" " \"0E\" -> \"2E\" [label=7];\n" " \"1B\" -> \"0E\" [label=6];\n" " \"1B\" -> \"2E\" [label=13];\n" " \"1E\" -> \"4E\" [label=6];\n" " \"1E\" -> \"3B\" [label=3];\n" " \"2B\" -> \"4E\" [label=19];\n" " \"2B\" -> \"3B\" [label=16];\n" " \"2B\" -> \"1E\" [label=13];\n" " \"2B\" -> \"0B\" [label=7];\n" " \"3B\" -> \"4E\" [label=3];\n" " \"3E\" -> \"1B\" [label=3];\n" " \"3E\" -> \"0E\" [label=9];\n" " \"3E\" -> \"2E\" [label=16];\n" " \"4B\" -> \"3E\" [label=3];\n" " \"4B\" -> \"1B\" [label=6];\n" " \"4B\" -> \"0E\" [label=12];\n" " \"4B\" -> \"2E\" [label=19];\n" "}\n" ); gt_strgraph_sort_edges_by_len(strgraph, false); GT_ENSURE_OUTPUT(gt_strgraph_dot_show(strgraph, outfp, false), "digraph StringGraph {\n" " \"0B\" -> \"1E\" [label=6];\n" " \"0B\" -> \"3B\" [label=9];\n" " \"0B\" -> \"4E\" [label=12];\n" " \"0E\" -> \"2E\" [label=7];\n" " \"1B\" -> \"0E\" [label=6];\n" " \"1B\" -> \"2E\" [label=13];\n" " \"1E\" -> \"3B\" [label=3];\n" " \"1E\" -> \"4E\" [label=6];\n" " \"2B\" -> \"0B\" [label=7];\n" " \"2B\" -> \"1E\" [label=13];\n" " \"2B\" -> \"3B\" [label=16];\n" " \"2B\" -> \"4E\" [label=19];\n" " \"3B\" -> \"4E\" [label=3];\n" " \"3E\" -> \"1B\" [label=3];\n" " \"3E\" -> \"0E\" [label=9];\n" " \"3E\" -> \"2E\" [label=16];\n" " \"4B\" -> \"3E\" [label=3];\n" " \"4B\" -> \"1B\" [label=6];\n" " \"4B\" -> \"0E\" [label=12];\n" " \"4B\" -> \"2E\" [label=19];\n" "}\n" ); (void)gt_strgraph_redtrans(strgraph, false); GT_ENSURE_OUTPUT(gt_strgraph_dot_show(strgraph, outfp, false), "digraph StringGraph {\n" " \"0B\" -> \"1E\" [label=6];\n" " \"0E\" -> \"2E\" [label=7];\n" " \"1B\" -> \"0E\" [label=6];\n" " \"1E\" -> \"3B\" [label=3];\n" " \"2B\" -> \"0B\" [label=7];\n" " \"3B\" -> \"4E\" [label=3];\n" " \"3E\" -> \"1B\" [label=3];\n" " \"4B\" -> \"3E\" [label=3];\n" "}\n" ); gt_strgraph_delete(strgraph); return had_err; } int gt_strgraph_unit_test(GtError *err) { int had_err = 0; gt_error_check(err); GT_STRGRAPH_UTEST(new); GT_STRGRAPH_UTEST(delete); GT_STRGRAPH_UTEST(creation); GT_STRGRAPH_UTEST(add_spm); GT_STRGRAPH_UTEST(redtrans); return had_err; } genometools-1.5.1/src/match/rdj-strgraph.h000066400000000000000000000135571211610345200205220ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_STRGRAPH_H #define RDJ_STRGRAPH_H #include #include "core/encseq_api.h" #include "core/logger_api.h" #include "core/error_api.h" typedef struct GtStrgraph GtStrgraph; /* --- preparation --- */ GtStrgraph* gt_strgraph_new(unsigned long nofreads); void gt_spmproc_strgraph_count(unsigned long suffix_readnum, unsigned long prefix_readnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *strgraph); int gt_strgraph_save_counts(GtStrgraph *strgraph, const char *indexname, const char *suffix, GtError *err); int gt_strgraph_load_counts(GtStrgraph *strgraph, const char *indexname, const char *suffix, GtError *err); /* to reduce the memory requirement, the encseq may be freed during the life of * strgraph and later reloaded; this method allows one to communicate the * changes to the strgraph object (set to NULL by deletion) */ void gt_strgraph_set_encseq(GtStrgraph *strgraph, const GtEncseq *encseq); /* --- spmlist file --- */ int gt_strgraph_open_spmlist_file(GtStrgraph *strgraph, const char *indexname, const char *suffix, bool binary, unsigned long bufsize, GtError *err); void gt_strgraph_close_spmlist_file(GtStrgraph *strgraph); void gt_spmproc_strgraph_count_and_save(unsigned long suffix_readnum, unsigned long prefix_readnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *strgraph); int gt_strgraph_load_spm_from_file(GtStrgraph *strgraph, unsigned long min_length, bool load_self_spm, GtBitsequence *contained, const char *indexname, unsigned int nspmfiles, const char *suffix, GtError *err); /* --- construction --- */ void gt_strgraph_allocate_graph(GtStrgraph *strgraph, unsigned long fixlen, const GtEncseq *encseq); void gt_spmproc_strgraph_add(unsigned long suffix_readnum, unsigned long prefix_readnum, unsigned long length, bool suffixseq_direct, bool prefixseq_direct, void *graph); /* --- log information --- */ void gt_strgraph_show_limits(void); void gt_strgraph_show_limits_debug_log(void); void gt_strgraph_log_space(const GtStrgraph *strgraph); void gt_strgraph_log_stats(const GtStrgraph *strgraph, GtLogger *logger); unsigned long gt_strgraph_nofreads(const GtStrgraph *strgraph); unsigned long gt_strgraph_nofspm(const GtStrgraph *strgraph); void gt_strgraph_show_edge_lengths_distribution(const GtStrgraph *strgraph, const char *indexname, const char *suffix); void gt_strgraph_show_counts_distribution(const GtStrgraph *strgraph, const char *indexname, const char *suffix); /* --- save to file --- */ typedef enum { GT_STRGRAPH_DOT, /* Graphviz, e.g.: dot -Tpdf -o graph.pdf graph.dot */ GT_STRGRAPH_DOT_BI, /* as _DOT, but bidirected */ GT_STRGRAPH_SPM, /* reoutput spm from graph */ GT_STRGRAPH_ADJLIST, /* adjacence list of each vertex */ GT_STRGRAPH_BIN, /* binary format, for gt_strgraph_new_from_file */ GT_STRGRAPH_ASQG, /* sga format, plain text */ GT_STRGRAPH_ASQG_GZ, /* sga format, gzipped */ } GtStrgraphFormat; void gt_strgraph_show(const GtStrgraph *strgraph, GtStrgraphFormat format, const char *indexname, const char *suffix, bool show_progressbar); int gt_strgraph_show_context(const GtStrgraph *strgraph, GtStrgraphFormat format, const char *indexname, const char *suffix, unsigned long *readnums, unsigned long nofreadnums, unsigned long depth, GtError *err); /* --- load from file --- */ GtStrgraph* gt_strgraph_new_from_file(const GtEncseq *encseq, unsigned long fixlen, const char *indexname, const char *suffix); /* --- simplify --- */ void gt_strgraph_sort_edges_by_len(GtStrgraph *strgraph, bool show_progressbar); /* return value: number of transitive matches */ unsigned long gt_strgraph_redtrans(GtStrgraph *strgraph, bool show_progressbar); /* return value: number of submaximal matches */ unsigned long gt_strgraph_redsubmax(GtStrgraph *strgraph, bool show_progressbar); /* return value: number of self-match matches */ unsigned long gt_strgraph_redself(GtStrgraph *strgraph, bool show_progressbar); /* return value: number of matches vs. rc edges */ unsigned long gt_strgraph_redwithrc(GtStrgraph *strgraph, bool show_progressbar); /* return value: number of reduced edges */ unsigned long gt_strgraph_reddepaths(GtStrgraph *strgraph, unsigned long maxdepth, bool show_progressbar); /* return value: number of reduced edges */ unsigned long gt_strgraph_redpbubbles(GtStrgraph *strgraph, unsigned long maxwidth, unsigned long maxdiff, bool show_progressbar); /* remove marked edges and realloc edges list */ void gt_strgraph_compact(GtStrgraph *strgraph, bool show_progressbar); /* --- spell contigs --- */ void gt_strgraph_spell(GtStrgraph *strgraph, unsigned long min_path_depth, unsigned long min_contig_length, bool showpaths, const char *indexname, const char *suffix, const GtEncseq *encseq, bool delay_reads_mapping, bool show_progressbar, GtLogger *logger); /* --- delete --- */ void gt_strgraph_delete(GtStrgraph *strgraph); /* --- unit test --- */ int gt_strgraph_unit_test(GtError *err); #endif genometools-1.5.1/src/match/rdj-twobitenc-editor.c000066400000000000000000000067221211610345200221410ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/fa.h" #include "core/ma.h" #include "match/rdj-twobitenc-editor.h" struct GtTwobitencEditor { GtTwobitencoding *twobitencoding; unsigned long *charcount; unsigned char *mapptr; }; static int gt_twobitenc_editor_check(const GtEncseq *encseq, GtError *err) { int had_err = 0; if (!gt_encseq_has_twobitencoding(encseq)) { gt_error_set(err, "encseq correction is only " "possible if the sequence has a twobitencoding"); had_err = -1; } else if (gt_encseq_accesstype_get(encseq) != GT_ACCESS_TYPE_EQUALLENGTH) { gt_error_set(err, "twobitencoding correction is currently only " "implemented if the sequence access type is EQUALLENGTH"); had_err = -1; } return had_err; } GtTwobitencEditor *gt_twobitenc_editor_new(const GtEncseq *encseq, const char* indexname, GtError *err) { GtTwobitencEditor *twobitenc_editor; size_t t_offset; size_t c_offset; GtStr *encseqfilename; int had_err = 0; twobitenc_editor = gt_malloc(sizeof (GtTwobitencEditor)); had_err = gt_twobitenc_editor_check(encseq, err); if (had_err == 0) { t_offset = gt_encseq_twobitencoding_mapoffset(encseq); c_offset = gt_encseq_chardistri_mapoffset(encseq); encseqfilename = gt_str_new_cstr(indexname); gt_str_append_cstr(encseqfilename, GT_ENCSEQFILESUFFIX); twobitenc_editor->mapptr = (unsigned char*)gt_fa_mmap_write(gt_str_get( encseqfilename), NULL, err); twobitenc_editor->twobitencoding = (GtTwobitencoding*) (twobitenc_editor->mapptr + t_offset); twobitenc_editor->charcount = (unsigned long*) (twobitenc_editor->mapptr + c_offset); gt_str_delete(encseqfilename); } return (had_err == 0) ? twobitenc_editor : NULL; } void gt_twobitenc_editor_edit(GtTwobitencEditor *twobitenc_editor, unsigned long pos, GtUchar newchar) { size_t codenum, posincode; GtTwobitencoding oldcode, newcode; GtUchar oldchar; gt_assert(twobitenc_editor); codenum = (size_t)pos / GT_UNITSIN2BITENC; oldcode = twobitenc_editor->twobitencoding[codenum]; posincode = (GT_UNITSIN2BITENC - 1 - ((size_t)pos % GT_UNITSIN2BITENC)) << 1; oldchar = (oldcode & ((GtTwobitencoding)3 << posincode)) >> posincode; newcode = (oldcode & (~((GtTwobitencoding)3 << posincode))); newcode |= ((GtTwobitencoding)newchar << posincode); twobitenc_editor->twobitencoding[codenum] = newcode; /* fix counts */ twobitenc_editor->charcount[oldchar]--; twobitenc_editor->charcount[newchar]++; } void gt_twobitenc_editor_delete(GtTwobitencEditor *twobitenc_editor) { gt_assert(twobitenc_editor); gt_fa_xmunmap(twobitenc_editor->mapptr); gt_free(twobitenc_editor); } genometools-1.5.1/src/match/rdj-twobitenc-editor.h000066400000000000000000000024571211610345200221470ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_TWOBITENC_EDITOR_H #define RDJ_TWOBITENC_EDITOR_H #include "core/encseq.h" #include "core/error_api.h" typedef struct GtTwobitencEditor GtTwobitencEditor; GtTwobitencEditor *gt_twobitenc_editor_new(const GtEncseq *encseq, const char* indexname, GtError *err); void gt_twobitenc_editor_edit(GtTwobitencEditor *twobitenc_editor, unsigned long pos, GtUchar newchar); void gt_twobitenc_editor_delete(GtTwobitencEditor *twobitenc_editor); #endif genometools-1.5.1/src/match/rdj-version.c000066400000000000000000000031771211610345200203450ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "core/versionfunc.h" #include "match/rdj-version.h" void gt_readjoiner_show_version(const char *progname) { char *clean_progname = NULL; size_t pnsize = strlen(progname), rdjsize = strlen(" "GT_READJOINER_CMD); printf("Readjoiner: a string graph-based sequence assembler\n\n"); printf("version "GT_READJOINER_VERSION"\n\n"); /* rm " readjoiner" from progname if possible, to avoid confusing the user */ clean_progname = gt_malloc(pnsize); (void)strcpy(clean_progname, progname); if (pnsize > rdjsize && strcmp(clean_progname + (pnsize - rdjsize), " "GT_READJOINER_CMD) == 0) { clean_progname[pnsize - rdjsize] = '\0'; } printf("GenomeTools version:\n"); gt_versionfunc(clean_progname); gt_free(clean_progname); } genometools-1.5.1/src/match/rdj-version.h000066400000000000000000000020301211610345200203350ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef RDJ_VERSION_H #define RDJ_VERSION_H #define GT_READJOINER_VERSION "1.2" #define GT_READJOINER_CMD "readjoiner" void gt_readjoiner_show_version(const char *progname); #endif genometools-1.5.1/src/match/reads2twobit.c000066400000000000000000001636201211610345200205140ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #endif #include #include #include "core/array.h" #include "core/basename_api.h" #include "core/encseq.h" #include "core/fa.h" #include "core/fileutils.h" #include "core/filelengthvalues.h" #include "core/intbits.h" #include "core/log_api.h" #include "core/minmax.h" #include "core/parseutils_api.h" #include "core/qsort_r_api.h" #include "core/splitter_api.h" #include "core/xansi_api.h" #include "core/undef_api.h" #include "match/reads_library.h" #include "match/reads2twobit.h" #define GT_READS2TWOBIT_ALPHASIZE 4U typedef struct { bool paired; GtStr *filename1; GtStr *filename2; unsigned long insertlength; unsigned long stdev; /* 0 if unknown */ unsigned long total_filelength; unsigned long total_seqlength; unsigned long first_seqnum; unsigned long nofseqs; } GtReadsLibraryInfo; struct GtReads2Twobit { GtStr *indexname; GtArray *collection; GtTwobitencoding *twobitencoding; unsigned long chardistri[GT_READS2TWOBIT_ALPHASIZE]; unsigned long *seppos; unsigned long nofseqs; unsigned long seqlen_eqlen, seqlen_max, seqlen_min; unsigned long total_seqlength; GtTwobitencoding current_sepcode; unsigned long invalid_sequences, invalid_total_length; char phredbase, lowqual; unsigned long maxlow; }; GtReads2Twobit* gt_reads2twobit_new(GtStr *indexname) { GtReads2Twobit *r2t; gt_assert(indexname != NULL); r2t = gt_malloc(sizeof (*r2t)); r2t->indexname = indexname; r2t->collection = gt_array_new(sizeof (GtReadsLibraryInfo)); r2t->twobitencoding = NULL; r2t->seppos = NULL; r2t->invalid_sequences = 0; r2t->invalid_total_length = 0; r2t->seqlen_eqlen = 0; r2t->seqlen_max = 0; r2t->seqlen_min = 0; r2t->total_seqlength = 0; r2t->nofseqs = 0; r2t->phredbase = (char)33; r2t->maxlow = GT_UNDEF_ULONG; r2t->lowqual = 0; return r2t; } void gt_reads2twobit_delete(GtReads2Twobit *r2t) { if (r2t != NULL) { unsigned long lnum, noflibs; noflibs = gt_array_size(r2t->collection); for (lnum = 0; lnum < noflibs; lnum++) { GtReadsLibraryInfo *rli; rli = gt_array_get(r2t->collection, lnum); gt_str_delete(rli->filename1); if (rli->filename2 != NULL) gt_str_delete(rli->filename2); } gt_array_delete(r2t->collection); gt_free(r2t->twobitencoding); gt_free(r2t->seppos); gt_free(r2t); } } void gt_reads2twobit_add(GtReads2Twobit *r2t, bool paired, const GtStr *filename1, const GtStr *filename2, unsigned long insertlength, unsigned long stdev) { GtReadsLibraryInfo rli; gt_assert(r2t != NULL); gt_assert(filename1 != NULL); rli.paired = paired; rli.filename1 = gt_str_clone(filename1); if (filename2 != NULL) rli.filename2 = gt_str_clone(filename2); else rli.filename2 = NULL; rli.insertlength = insertlength; rli.stdev = stdev; rli.total_seqlength = 0; rli.first_seqnum = 0; rli.nofseqs = 0; rli.total_filelength = (unsigned long)gt_file_size(gt_str_get(filename1)); if (filename2 != NULL) rli.total_filelength += (unsigned long)gt_file_size(gt_str_get(filename2)); gt_array_add(r2t->collection, rli); } int gt_reads2twobit_add_library(GtReads2Twobit *r2t, const GtStr *libspec, GtError *err) { GtSplitter *s1, *s2; char *libspec_copy; int had_err = 0; gt_assert(r2t != NULL); gt_assert(libspec != NULL); gt_assert(gt_str_length(libspec) > 0); libspec_copy = gt_malloc(sizeof (*libspec_copy) * (gt_str_length(libspec) + 1UL)); (void)strcpy(libspec_copy, gt_str_get(libspec)); s1 = gt_splitter_new(); gt_splitter_split(s1, libspec_copy, gt_str_length(libspec), GT_READS2TWOBIT_LIBSPECSEP); gt_log_log("reads2twobit add library: %s", gt_str_get(libspec)); if (gt_splitter_size(s1) == 1UL) { gt_reads2twobit_add(r2t, false, libspec, NULL, 0, 0); } else if (gt_splitter_size(s1) < 4UL) { GtStr *filename1, *filename2; unsigned long insertlength = 0, stdev = 0; char *insertspec, *insertspec_copy; filename1 = gt_str_new_cstr(gt_splitter_get_token(s1, 0)); if (gt_splitter_size(s1) == 3UL) { filename2 = gt_str_new_cstr(gt_splitter_get_token(s1, 1UL)); insertspec = gt_splitter_get_token(s1, 2UL); } else { filename2 = NULL; insertspec = gt_splitter_get_token(s1, 1UL); } s2 = gt_splitter_new(); insertspec_copy = gt_malloc(sizeof (*insertspec_copy) * (strlen(insertspec) + 1UL)); (void)strcpy(insertspec_copy, insertspec); gt_splitter_split(s2, insertspec_copy, (unsigned long)strlen(insertspec), GT_READS2TWOBIT_INSERTSEP); if (gt_splitter_size(s2) <= 2UL) { had_err = gt_parse_ulong(&insertlength, gt_splitter_get_token(s2, 0)); if (gt_splitter_size(s2) == 2UL && !had_err) { had_err = gt_parse_ulong(&stdev, gt_splitter_get_token(s2, 1UL)); } } if (gt_splitter_size(s2) > 2UL || had_err) { gt_error_set(err, "insert specification not valid: %s\nthe correct " "syntax is \"insertlength[%cstdev]\"", insertspec, GT_READS2TWOBIT_INSERTSEP); } if (!had_err) { gt_reads2twobit_add(r2t, true, filename1, filename2, insertlength, stdev); } gt_str_delete(filename1); gt_str_delete(filename2); gt_free(insertspec_copy); gt_splitter_delete(s2); } else { gt_error_set(err, "library specification not valid: %s\nthe correct " "syntax is \"filename[[%cfilename2]%cinsertlength[%cstdev]]\"\n" "(filenames are not allowed to contain \"%c\"", gt_str_get(libspec), GT_READS2TWOBIT_LIBSPECSEP, GT_READS2TWOBIT_LIBSPECSEP, GT_READS2TWOBIT_INSERTSEP, GT_READS2TWOBIT_LIBSPECSEP); had_err = -1; } gt_free(libspec_copy); gt_splitter_delete(s1); return had_err; } void gt_reads2twobit_use_phred64(GtReads2Twobit *r2t) { gt_assert(r2t != NULL); r2t->phredbase = (char)64; } void gt_reads2twobit_set_quality_filter(GtReads2Twobit *r2t, unsigned long maxlow, char lowqual) { r2t->maxlow = maxlow; r2t->lowqual = lowqual; } #define GT_READS2TWOBIT_CODE_UNDEF ((GtTwobitencoding)ULONG_MAX) typedef struct { GtTwobitencoding *tbe_next; GtTwobitencoding kmercode; unsigned short codepos; unsigned long chardistri[GT_READS2TWOBIT_ALPHASIZE]; unsigned long globalpos; unsigned long nofseqs; unsigned long seppos_nextfree; unsigned long seqlen_max; unsigned long seqlen_min; } GtReads2TwobitEncodeInfo; #define GT_READS2TWOBIT_INIT_ENCODE_INFO(EI, TBE)\ memset(&(EI), 0, sizeof (EI));\ (EI).tbe_next = (TBE) #define GT_READS2TWOBIT_COPY_ENCODE_INFO(EISRC, EIDEST)\ memcpy(&(EIDEST), &(EISRC), sizeof (EISRC)) typedef struct { GtTwobitencoding char2code[UCHAR_MAX + 1]; unsigned long inputfiles_totallength; unsigned long seqlen, seqlen_first, seqlen_mate; GtReads2TwobitEncodeInfo current, backup; bool varlen_mode, invalid_mode; unsigned long invalid_sequences, invalid_total_length; unsigned long *seppos; unsigned long seppos_alloc; char phredbase, *qbuf, *qbuf2, lowqual; size_t qbuf_size, qbuf2_size; unsigned long maxlow; } GtReads2TwobitEncodeState; static void gt_reads2twobit_init_encode(GtReads2Twobit *r2t, GtReads2TwobitEncodeState *state) { const unsigned long noflibraries = gt_array_size(r2t->collection); unsigned long i; state->inputfiles_totallength = 0; for (i = 0; i < noflibraries; i++) { const GtReadsLibraryInfo *rli = gt_array_get(r2t->collection, i); state->inputfiles_totallength += rli->total_filelength; } r2t->twobitencoding = gt_malloc(sizeof (*r2t->twobitencoding) * GT_DIVBYUNITSIN2BITENC(state->inputfiles_totallength) + 2UL); GT_READS2TWOBIT_INIT_ENCODE_INFO(state->current, r2t->twobitencoding); GT_READS2TWOBIT_COPY_ENCODE_INFO(state->current, state->backup); for (i = 0; i < (unsigned long)(UCHAR_MAX) + 1UL; i++) state->char2code[i] = GT_READS2TWOBIT_CODE_UNDEF; state->char2code[(unsigned char)'A'] = (GtTwobitencoding)0; state->char2code[(unsigned char)'a'] = (GtTwobitencoding)0; state->char2code[(unsigned char)'C'] = (GtTwobitencoding)1; state->char2code[(unsigned char)'c'] = (GtTwobitencoding)1; state->char2code[(unsigned char)'G'] = (GtTwobitencoding)2; state->char2code[(unsigned char)'g'] = (GtTwobitencoding)2; state->char2code[(unsigned char)'T'] = (GtTwobitencoding)3; state->char2code[(unsigned char)'t'] = (GtTwobitencoding)3; state->seqlen = 0; state->seqlen_mate = 0; state->seqlen_first = 0; state->varlen_mode = false; state->invalid_mode = false; state->invalid_sequences = 0; state->invalid_total_length = 0; gt_assert(r2t->seppos == NULL); state->seppos = NULL; state->qbuf = NULL; state->qbuf_size = 0; state->qbuf2 = NULL; state->qbuf2_size = 0; state->phredbase = r2t->phredbase; state->lowqual = r2t->lowqual; state->maxlow = r2t->maxlow; } #define GT_READS2TWOBIT_READBUFFER_SIZE ((size_t)256) #define GT_READS2TWOBIT_WRITECODE_NOCOUNT(EI, CODE, LEN) \ (LEN)++;\ (EI).kmercode = ((EI).kmercode << 2) | (CODE);\ if (++(EI).codepos == (unsigned short)GT_UNITSIN2BITENC)\ {\ *((EI).tbe_next)++ = (EI).kmercode;\ (EI).codepos = 0;\ (EI).kmercode = 0;\ } #define GT_READS2TWOBIT_WRITECODE(EI, CODE, LEN)\ GT_READS2TWOBIT_WRITECODE_NOCOUNT(EI, CODE, LEN);\ (EI).chardistri[CODE]++ static void gt_reads2twobit_init_seppos(GtReads2TwobitEncodeState *state, unsigned long currentpos) { gt_assert(state->seppos == NULL); gt_assert(currentpos > 0); gt_assert(state->inputfiles_totallength > currentpos); state->seppos_alloc = state->inputfiles_totallength / currentpos; gt_log_log("rough estimate of nofseqs = %lu", state->seppos_alloc); state->seppos = gt_malloc(sizeof (state->seppos) * state->seppos_alloc); state->current.seppos_nextfree = 0; } #define GT_READS2TWOBIT_SEPPOS_INC ((size_t)(1 << 14)) static void gt_reads2twobit_append_seppos(GtReads2TwobitEncodeState *state) { gt_assert(state->seppos != NULL); if (state->current.seppos_nextfree == state->seppos_alloc) { (state->seppos_alloc) += GT_READS2TWOBIT_SEPPOS_INC; state->seppos = gt_realloc(state->seppos, sizeof (state->seppos) * state->seppos_alloc); } gt_assert(state->current.globalpos > 0); state->seppos[state->current.seppos_nextfree] = state->current.globalpos - 1UL; state->current.seppos_nextfree++; } static void gt_reads2twobit_switch_to_varlen_mode( GtReads2TwobitEncodeState *state) { unsigned long seqnum; gt_assert(state->varlen_mode == false); state->varlen_mode = true; gt_assert(state->current.nofseqs > 1UL); gt_assert(state->seqlen_first != state->seqlen); gt_assert(state->seqlen > 1UL); gt_log_log("readset is varlen: sequences 0..%lu are " "%lu bp long, sequence %lu is %lu bp long", state->current.nofseqs - 2UL, state->seqlen_first - 1UL, state->current.nofseqs - 1UL, state->seqlen - 1UL); gt_assert(state->current.globalpos == 0); gt_reads2twobit_init_seppos(state, state->seqlen_first * (state->current.nofseqs - 2UL) + state->seqlen); for (seqnum = 0; seqnum < state->current.nofseqs - 1UL; seqnum++) { state->current.globalpos += state->seqlen_first; gt_reads2twobit_append_seppos(state); } state->current.globalpos += state->seqlen; gt_reads2twobit_append_seppos(state); gt_assert(state->current.seppos_nextfree == state->current.nofseqs); state->current.seqlen_max = MAX(state->seqlen_first, state->seqlen); state->current.seqlen_min = MIN(state->seqlen_first, state->seqlen); state->seqlen_first = 0; } #define GT_READS2TWOBIT_DEFAULT_SEPARATOR (GtTwobitencoding)3 static inline void gt_reads2twobit_process_sequence_end( GtReads2TwobitEncodeState *state) { GT_READS2TWOBIT_WRITECODE_NOCOUNT(state->current, GT_READS2TWOBIT_DEFAULT_SEPARATOR, state->seqlen); gt_assert(!state->invalid_mode); if (state->varlen_mode) { if (state->seqlen > state->current.seqlen_max) state->current.seqlen_max = state->seqlen; if (state->seqlen < state->current.seqlen_min) state->current.seqlen_min = state->seqlen; state->current.globalpos += state->seqlen; gt_reads2twobit_append_seppos(state); } else { if (state->current.nofseqs > 1UL) { if (state->seqlen != state->seqlen_first) gt_reads2twobit_switch_to_varlen_mode(state); } else state->seqlen_first = state->seqlen; } } static inline void gt_reads2twobit_prepare_for_new_sequence( GtReads2TwobitEncodeState *state) { GT_READS2TWOBIT_COPY_ENCODE_INFO(state->current, state->backup); state->current.nofseqs++; state->seqlen = 0; state->seqlen_mate = 0; state->invalid_mode = false; } #define GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(LINE, FILEPTR, FGETSRETVAL)\ /* handle the case in which a description is longer than the line buffer: */\ while (strlen(LINE) == GT_READS2TWOBIT_READBUFFER_SIZE - (size_t) 1 \ && (LINE)[GT_READS2TWOBIT_READBUFFER_SIZE - 2] != '\n' \ && (FGETSRETVAL) != NULL) \ {\ (FGETSRETVAL) = \ fgets((LINE), (int)GT_READS2TWOBIT_READBUFFER_SIZE, (FILEPTR));\ } static void gt_reads2twobit_switch_to_invalid_mode( GtReads2TwobitEncodeState *state) { state->invalid_mode = true; state->invalid_sequences++; state->invalid_total_length += state->seqlen; state->invalid_total_length += state->seqlen_mate; GT_READS2TWOBIT_COPY_ENCODE_INFO(state->backup, state->current); } static inline int gt_reads2twobit_process_qualities_line( GtReads2TwobitEncodeState *state, const char *line, char *qbuf, unsigned long *qbuf_next) { unsigned long j = 0; char c; while ((c = line[j++]) != '\0') { if (c >= state->phredbase) { if (*qbuf_next == state->seqlen) return -1; qbuf[*qbuf_next] = c - state->phredbase; (*qbuf_next)++; } } return 0; } static void gt_reads2twobit_apply_quality_filter( GtReads2TwobitEncodeState *state, const char *qbuf, unsigned long nofq) { unsigned long i, low = 0; for (i = 0; i < nofq; i++) if (qbuf[i] <= state->lowqual) low++; if (low > state->maxlow) gt_reads2twobit_switch_to_invalid_mode(state); } static inline void gt_reads2twobit_process_sequence_line( GtReads2TwobitEncodeState *state, const char *line) { unsigned long j = 0; GtTwobitencoding nextcode; char c; while (true) { c = line[j++]; if (!state->invalid_mode && (nextcode = state->char2code[(unsigned char)c]) != GT_READS2TWOBIT_CODE_UNDEF) { GT_READS2TWOBIT_WRITECODE(state->current, nextcode, state->seqlen); } else { if (c == '\0') break; if (!isspace(c)) { if (!state->invalid_mode) gt_reads2twobit_switch_to_invalid_mode(state); state->invalid_total_length++; state->seqlen++; } } } } static int gt_reads2twobit_close_file(FILE *file, GtStr *filename, GtError *err) { int had_err = 0; gt_assert(file != NULL); if (ferror(file) != 0) { gt_error_set(err, "Error by reading file %s: %s", gt_str_get(filename), strerror(errno)); had_err = -1; } gt_fa_fclose(file); return had_err; } static int gt_reads2twobit_encode_unpaired_fastq_library( GtReads2TwobitEncodeState *state, GtReadsLibraryInfo *rli, FILE *file, char *line) { int had_err = 0; unsigned long qbuf_next = 0; bool qmode = false; char *fgetsretval = NULL; state->seqlen = 0; do { if (!qmode) { if (line[0] == '@') { if (state->current.nofseqs > rli->first_seqnum && !state->invalid_mode) { gt_reads2twobit_process_sequence_end(state); } GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line, file, fgetsretval); gt_reads2twobit_prepare_for_new_sequence(state); } else if (line[0] == '+') { GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line, file, fgetsretval); if (state->seqlen + 1UL > (unsigned long)(state->qbuf_size)) { state->qbuf_size = (size_t)state->seqlen + 1; state->qbuf = gt_realloc(state->qbuf, state->qbuf_size); } qmode = true; } else if (!state->invalid_mode) { gt_reads2twobit_process_sequence_line(state, line); } } else { had_err = gt_reads2twobit_process_qualities_line(state, line, state->qbuf, &qbuf_next); if (qbuf_next == state->seqlen) { if (state->maxlow != GT_UNDEF_ULONG) gt_reads2twobit_apply_quality_filter(state, state->qbuf, qbuf_next); qbuf_next = 0; qmode = false; } } } while ((fgetsretval = fgets(line, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file)) == line && !had_err); return had_err; } static void gt_reads2twobit_encode_unpaired_fasta_library( GtReads2TwobitEncodeState *state, GtReadsLibraryInfo *rli, FILE *file, char *line) { char *fgetsretval = NULL; do { if (line[0] == '>') { if (state->current.nofseqs > rli->first_seqnum && !state->invalid_mode) { gt_reads2twobit_process_sequence_end(state); } GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line, file, fgetsretval); gt_reads2twobit_prepare_for_new_sequence(state); } else if (!state->invalid_mode) { gt_reads2twobit_process_sequence_line(state, line); } } while ((fgetsretval = fgets(line, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file)) == line); } static int gt_reads2twobit_encode_unpaired_library( GtReads2TwobitEncodeState *state, GtReadsLibraryInfo *rli, GtError *err) { int had_err = 0; FILE *file; file = gt_fa_fopen(gt_str_get(rli->filename1), "r", err); if (file == NULL) had_err = -1; if (!had_err) { const unsigned long invalid_tl_before = state->invalid_total_length, invalid_s_before = state->invalid_sequences; char line[GT_READS2TWOBIT_READBUFFER_SIZE], *fgetsretval; rli->first_seqnum = state->current.nofseqs; fgetsretval = fgets(line, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file); if (fgetsretval == line) { if (line[0] == '>') { gt_reads2twobit_encode_unpaired_fasta_library(state, rli, file, line); } else if (line[0] == '@') { had_err = gt_reads2twobit_encode_unpaired_fastq_library(state, rli, file, line); if (had_err != 0) gt_error_set(err, "%s: error in FASTQ format", gt_str_get(rli->filename1)); } else { gt_error_set(err, "%s: unknown format", gt_str_get(rli->filename1)); had_err = -1; } } else { /* empty file or error */ gt_assert(fgetsretval == NULL); } if (!state->invalid_mode) gt_reads2twobit_process_sequence_end(state); gt_assert(state->current.nofseqs >= rli->first_seqnum); rli->nofseqs = state->current.nofseqs - rli->first_seqnum; rli->total_seqlength = state->varlen_mode ? state->seppos[state->current.nofseqs - 1UL] + 1UL - ((rli->first_seqnum == 0) ? 0 : state->seppos[rli->first_seqnum - 1UL]) : state->seqlen_first * rli->nofseqs; /* the following is not necessary, but is useful for the tests */ rli->total_filelength -= (state->invalid_total_length - invalid_tl_before + 3UL * (state->invalid_sequences - invalid_s_before)); if (!had_err) had_err = gt_reads2twobit_close_file(file, rli->filename1, err); else gt_fa_fclose(file); } return had_err; } static inline int gt_reads2twobit_process_fastq_mate_pair( GtReads2TwobitEncodeState *state, char *line2, FILE *file2, bool *file2new) { int had_err = 0; char *fgetsretval = NULL; bool was_invalid = state->invalid_mode; unsigned long prev_seqlen = state->seqlen; unsigned long qbuf2_next = 0; bool qmode = false; if (*file2new) { fgetsretval = fgets(line2, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file2); gt_assert(fgetsretval == line2); *file2new = false; } GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line2, file2, fgetsretval); state->seqlen_mate = state->seqlen; state->seqlen = 0; if (!state->invalid_mode) state->current.nofseqs++; else state->invalid_sequences++; while (!had_err) { fgetsretval = fgets(line2, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file2); if (fgetsretval == NULL) break; if (!qmode) { if (line2[0] == '@') break; else if (line2[0] == '+') { GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line2, file2, fgetsretval); if (state->seqlen + 1UL > (unsigned long)(state->qbuf2_size)) { state->qbuf2_size = (size_t)state->seqlen + 1; state->qbuf2 = gt_realloc(state->qbuf2, state->qbuf2_size); } qmode = true; } else { gt_reads2twobit_process_sequence_line(state, line2); } } else { had_err = gt_reads2twobit_process_qualities_line(state, line2, state->qbuf2, &qbuf2_next); if (had_err == -1) had_err = -2; if (!had_err && qbuf2_next == state->seqlen) { if (state->maxlow != GT_UNDEF_ULONG) gt_reads2twobit_apply_quality_filter(state, state->qbuf2, qbuf2_next); qbuf2_next = 0; qmode = false; } } } if (!had_err && !state->invalid_mode) gt_reads2twobit_process_sequence_end(state); if (!had_err && !was_invalid && state->invalid_mode) { state->invalid_sequences++; state->invalid_total_length += (prev_seqlen - 1UL); } return had_err; } static int gt_reads2twobit_encode_interleaved_paired_fastq_library( GtReads2TwobitEncodeState *state, GtReadsLibraryInfo *rli, FILE *file, char *line) { int had_err = 0; unsigned long qbuf_next = 0; bool qmode = false; bool processing_mate = true; char *fgetsretval = line; state->seqlen = 0; do { if (!qmode) { if (line[0] == '@') { if (state->current.nofseqs > rli->first_seqnum && !state->invalid_mode) { gt_reads2twobit_process_sequence_end(state); } GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line, file, fgetsretval); processing_mate = !processing_mate; if (processing_mate) { if (!state->invalid_mode) state->current.nofseqs++; state->seqlen_mate = state->seqlen; state->seqlen = 0; } else { gt_reads2twobit_prepare_for_new_sequence(state); } } else if (line[0] == '+') { GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line, file, fgetsretval); if (state->seqlen + 1UL > (unsigned long)(state->qbuf_size)) { state->qbuf_size = (size_t)state->seqlen + 1; state->qbuf = gt_realloc(state->qbuf, state->qbuf_size); } qmode = true; } else { gt_reads2twobit_process_sequence_line(state, line); } } else { had_err = gt_reads2twobit_process_qualities_line(state, line, state->qbuf, &qbuf_next); if (qbuf_next == state->seqlen) { if (state->maxlow != GT_UNDEF_ULONG) gt_reads2twobit_apply_quality_filter(state, state->qbuf, qbuf_next); qbuf_next = 0; qmode = false; } } } while ((fgetsretval = fgets(line, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file)) == line && !had_err); if (!had_err && !state->invalid_mode) gt_reads2twobit_process_sequence_end(state); return had_err; } static int gt_reads2twobit_encode_twofile_paired_fastq_library( GtReads2TwobitEncodeState *state, GtReadsLibraryInfo *rli, FILE *file1, FILE *file2, char *line1) { int had_err = 0; unsigned long qbuf_next = 0; bool qmode = false; bool file2new = true; char *fgetsretval = NULL, line2[GT_READS2TWOBIT_READBUFFER_SIZE]; line2[0] = '\0'; state->seqlen = 0; do { if (!qmode) { if (line1[0] == '@') { if (state->current.nofseqs > rli->first_seqnum) { if (!state->invalid_mode) gt_reads2twobit_process_sequence_end(state); had_err = gt_reads2twobit_process_fastq_mate_pair(state, line2, file2, &file2new); } else { if (state->invalid_mode) had_err = gt_reads2twobit_process_fastq_mate_pair(state, line2, file2, &file2new); } GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line1, file1, fgetsretval); gt_reads2twobit_prepare_for_new_sequence(state); } else if (line1[0] == '+') { GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line1, file1, fgetsretval); if (state->seqlen + 1UL > (unsigned long)(state->qbuf_size)) { state->qbuf_size = (size_t)state->seqlen + 1; state->qbuf = gt_realloc(state->qbuf, state->qbuf_size); } qmode = true; } else if (!state->invalid_mode) { gt_reads2twobit_process_sequence_line(state, line1); } } else { had_err = gt_reads2twobit_process_qualities_line(state, line1, state->qbuf, &qbuf_next); if (qbuf_next == state->seqlen) { if (state->maxlow != GT_UNDEF_ULONG) gt_reads2twobit_apply_quality_filter(state, state->qbuf, qbuf_next); qbuf_next = 0; qmode = false; } } } while ((fgetsretval = fgets(line1, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file1)) == line1 && !had_err); if (!had_err && !state->invalid_mode) gt_reads2twobit_process_sequence_end(state); if (!had_err) had_err = gt_reads2twobit_process_fastq_mate_pair(state, line2, file2, &file2new); return had_err; } static inline void gt_reads2twobit_process_fasta_mate_pair( GtReads2TwobitEncodeState *state, char *line2, FILE *file2) { char *fgetsretval = NULL; bool was_invalid = state->invalid_mode; unsigned long prev_seqlen = state->seqlen; if (line2[0] != '>') { fgetsretval = fgets(line2, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file2); gt_assert(fgetsretval == line2); } gt_assert(line2[0] == '>'); GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line2, file2, fgetsretval); state->seqlen = 0; state->seqlen_mate = state->seqlen; if (!state->invalid_mode) state->current.nofseqs++; else state->invalid_sequences++; while (true) { fgetsretval = fgets(line2, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file2); if (fgetsretval != line2 || line2[0] == '>') break; gt_reads2twobit_process_sequence_line(state, line2); } if (!state->invalid_mode) gt_reads2twobit_process_sequence_end(state); if (!was_invalid && state->invalid_mode) { state->invalid_sequences++; state->invalid_total_length += (prev_seqlen - 1UL); } } static void gt_reads2twobit_encode_interleaved_paired_fasta_library( GtReads2TwobitEncodeState *state, GtReadsLibraryInfo *rli, FILE *file, char *line) { char *fgetsretval = NULL; bool processing_mate = true; do { if (line[0] == '>') { if (state->current.nofseqs > rli->first_seqnum && !state->invalid_mode) { gt_reads2twobit_process_sequence_end(state); } GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line, file, fgetsretval); processing_mate = !processing_mate; if (processing_mate) { if (!state->invalid_mode) state->current.nofseqs++; state->seqlen_mate = state->seqlen; state->seqlen = 0; } else { gt_reads2twobit_prepare_for_new_sequence(state); } } else { gt_reads2twobit_process_sequence_line(state, line); } } while ((fgetsretval = fgets(line, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file)) == line); if (!state->invalid_mode) gt_reads2twobit_process_sequence_end(state); } static void gt_reads2twobit_encode_twofile_paired_fasta_library( GtReads2TwobitEncodeState *state, GtReadsLibraryInfo *rli, FILE *file1, FILE *file2, char *line1) { char *fgetsretval = NULL, line2[GT_READS2TWOBIT_READBUFFER_SIZE]; line2[0] = '\0'; do { if (line1[0] == '>') { if (state->current.nofseqs > rli->first_seqnum) { if (!state->invalid_mode) gt_reads2twobit_process_sequence_end(state); gt_reads2twobit_process_fasta_mate_pair(state, line2, file2); } else { if (state->invalid_mode) gt_reads2twobit_process_fasta_mate_pair(state, line2, file2); } GT_READS2TWOBIT_SKIP_TO_DESCRIPTION_END(line1, file1, fgetsretval); gt_reads2twobit_prepare_for_new_sequence(state); } else if (!state->invalid_mode) { gt_reads2twobit_process_sequence_line(state, line1); } } while ((fgetsretval = fgets(line1, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file1)) == line1); if (!state->invalid_mode) gt_reads2twobit_process_sequence_end(state); gt_reads2twobit_process_fasta_mate_pair(state, line2, file2); } static int gt_reads2twobit_encode_paired_library( GtReads2TwobitEncodeState *state, GtReadsLibraryInfo *rli, GtError *err) { int had_err = 0; FILE *file1, *file2 = NULL; gt_assert(rli->filename1 != NULL); file1 = gt_fa_fopen(gt_str_get(rli->filename1), "r", err); if (file1 == NULL) had_err = -1; if (!had_err && rli->filename2 != NULL) { file2 = gt_fa_fopen(gt_str_get(rli->filename2), "r", err); if (file2 == NULL) had_err = -1; } if (!had_err) { const unsigned long invalid_tl_before = state->invalid_total_length, invalid_s_before = state->invalid_sequences; char line1[GT_READS2TWOBIT_READBUFFER_SIZE], *fgetsretval; rli->first_seqnum = state->current.nofseqs; fgetsretval = fgets(line1, (int)GT_READS2TWOBIT_READBUFFER_SIZE, file1); if (fgetsretval == line1) { if (line1[0] == '>') { if (file2 == NULL) { gt_log_log("encode interleaved paired fasta library"); gt_reads2twobit_encode_interleaved_paired_fasta_library(state, rli, file1, line1); } else { gt_log_log("encode two-file paired fasta library"); gt_reads2twobit_encode_twofile_paired_fasta_library(state, rli, file1, file2, line1); } } else if (line1[0] == '@') { if (file2 == NULL) { gt_log_log("encode interleaved paired fastQ library"); had_err = gt_reads2twobit_encode_interleaved_paired_fastq_library( state, rli, file1, line1); } else { gt_log_log("encode two-file paired fastQ library"); had_err = gt_reads2twobit_encode_twofile_paired_fastq_library( state, rli, file1, file2, line1); } if (had_err != 0) gt_error_set(err, "%s: error in FASTQ format", had_err == -1 ? gt_str_get(rli->filename1) : gt_str_get(rli->filename2)); } else { gt_error_set(err, "%s: unknown format", gt_str_get(rli->filename1)); had_err = -1; } } else { /* empty file or error */ gt_assert(fgetsretval == NULL); } gt_assert(state->current.nofseqs >= rli->first_seqnum); rli->nofseqs = state->current.nofseqs - rli->first_seqnum; rli->total_seqlength = state->varlen_mode ? state->seppos[state->current.nofseqs - 1UL] + 1UL - ((rli->first_seqnum == 0) ? 0 : state->seppos[rli->first_seqnum - 1UL]) : state->seqlen_first * rli->nofseqs; /* the following is not necessary, but is useful for the tests */ rli->total_filelength -= (state->invalid_total_length - invalid_tl_before + 3UL * (state->invalid_sequences - invalid_s_before)); } if (!had_err) had_err = gt_reads2twobit_close_file(file1, rli->filename1, err); else if (file1 != NULL) gt_fa_fclose(file1); if (!had_err && file2 != NULL) had_err = gt_reads2twobit_close_file(file2, rli->filename2, err); else if (file2 != NULL) gt_fa_fclose(file2); return had_err; } static void gt_reads2twobit_tbe_flush_and_realloc(GtReads2Twobit *r2t, GtReads2TwobitEncodeState *state) { if (state->current.codepos > 0) { unsigned long shift = (GT_UNITSIN2BITENC - state->current.codepos) << 1UL; *(state->current.tbe_next++) = (GtTwobitencoding)(state->current.kmercode << shift); } if (state->current.nofseqs > 0) { gt_log_log("realloc tbe, total_seqlength=%lu", r2t->total_seqlength); r2t->twobitencoding = gt_realloc(r2t->twobitencoding, sizeof (*r2t->twobitencoding) * (GT_DIVBYUNITSIN2BITENC(r2t->total_seqlength) + 2UL)); } else { gt_free(r2t->twobitencoding); r2t->twobitencoding = NULL; } } static void gt_reads2twobit_finalize_encode(GtReads2Twobit *r2t, GtReads2TwobitEncodeState *state) { unsigned int i; r2t->nofseqs = state->current.nofseqs; r2t->current_sepcode = GT_READS2TWOBIT_DEFAULT_SEPARATOR; r2t->invalid_sequences = state->invalid_sequences; r2t->invalid_total_length = state->invalid_total_length; for (i = 0; i < GT_READS2TWOBIT_ALPHASIZE; i++) r2t->chardistri[i] = state->current.chardistri[i]; if (state->varlen_mode) { state->seppos = gt_realloc(state->seppos, sizeof (state->seppos) * (state->current.nofseqs)); r2t->seqlen_eqlen = 0; r2t->seqlen_max = state->current.seqlen_max; r2t->seqlen_min = state->current.seqlen_min; r2t->total_seqlength = state->seppos[state->current.nofseqs - 1UL]; r2t->seppos = state->seppos; } else { r2t->seqlen_eqlen = state->seqlen_first; r2t->seqlen_max = state->seqlen_first; r2t->seqlen_min = state->seqlen_first; if (state->seqlen_first > 0) r2t->total_seqlength = state->seqlen_first * state->current.nofseqs - 1UL; else r2t->total_seqlength = 0; gt_assert(state->seppos == NULL); } if (state->qbuf_size > 0) gt_free(state->qbuf); if (state->qbuf2_size > 0) gt_free(state->qbuf2); gt_reads2twobit_tbe_flush_and_realloc(r2t, state); } int gt_reads2twobit_encode(GtReads2Twobit *r2t, GtError *err) { int had_err = 0; const unsigned long noflibraries = gt_array_size(r2t->collection); unsigned long libnum; GtReads2TwobitEncodeState state; gt_error_check(err); gt_assert(r2t != NULL); gt_assert(r2t->twobitencoding == NULL); gt_reads2twobit_init_encode(r2t, &state); for (libnum = 0; libnum < noflibraries && !had_err; libnum++) { GtReadsLibraryInfo *rli = gt_array_get(r2t->collection, libnum); if (!rli->paired) { had_err = gt_reads2twobit_encode_unpaired_library(&state, rli, err); } else { had_err = gt_reads2twobit_encode_paired_library(&state, rli, err); } } gt_reads2twobit_finalize_encode(r2t, &state); return had_err; } static void gt_reads2twobit_collect_fileinfo(const GtReads2Twobit *r2t, GtFilelengthvalues **filelengthtab, GtStrArray **filenametab) { unsigned long i, noflibraries; noflibraries = gt_array_size(r2t->collection); *filenametab = gt_str_array_new(); if (filelengthtab != NULL) { *filelengthtab = gt_malloc(sizeof (**filelengthtab) * noflibraries); } for (i = 0; i < noflibraries; i++) { GtStr *libname; GtReadsLibraryInfo *rli; rli = gt_array_get(r2t->collection, i); if (filelengthtab != NULL) { (*filelengthtab)[i].effectivelength = (uint64_t)rli->total_seqlength - 1UL; if (r2t->seqlen_eqlen == 0 && i == noflibraries - 1UL) (*filelengthtab)[i].effectivelength--; (*filelengthtab)[i].length = (uint64_t)rli->total_filelength; } libname = gt_str_clone(rli->filename1); if (rli->filename2 != NULL) { gt_str_append_char(libname, GT_READS2TWOBIT_LIBSPECSEP); gt_str_append_str(libname, rli->filename2); } if (rli->paired) { gt_str_append_char(libname, GT_READS2TWOBIT_LIBSPECSEP); gt_str_append_ulong(libname, rli->insertlength); if (rli->stdev > 0) { gt_str_append_char(libname, GT_READS2TWOBIT_INSERTSEP); gt_str_append_ulong(libname, rli->stdev); } } gt_str_array_add(*filenametab, libname); gt_str_delete(libname); } } static inline GtTwobitencoding gt_reads2twobit_less_frequent_char( GtReads2Twobit *r2t) { GtTwobitencoding i, code; unsigned long lowest_value, value; lowest_value = r2t->chardistri[0]; code = 0; for (i = (GtTwobitencoding)1; i < (GtTwobitencoding)GT_READS2TWOBIT_ALPHASIZE; i++) { value = r2t->chardistri[i]; if (value < lowest_value) { lowest_value = value; code = i; } } gt_log_log("less frequent char code: %lu", (unsigned long)code); return code; } static void gt_reads2twobit_zeropad_tbe(GtReads2Twobit *r2t) { unsigned long pos, codenum, posincode, shift; pos = r2t->total_seqlength - 1UL; codenum = GT_DIVBYUNITSIN2BITENC(pos); posincode = GT_MODBYUNITSIN2BITENC(pos); if (posincode < (unsigned long)GT_UNITSIN2BITENC - 1UL) { shift = GT_MULT2(GT_UNITSIN2BITENC - 1UL - posincode); r2t->twobitencoding[codenum] = (GtTwobitencoding)((r2t->twobitencoding[codenum] >> shift) << shift); } r2t->twobitencoding[codenum + 1UL] = 0; } static void gt_reads2twobit_seek_sequence(const GtReads2Twobit *r2t, unsigned long seqnum, unsigned long *seqlen, GtTwobitencoding *firstcode, unsigned long *charsinfirstcode, GtTwobitencoding **nextcode_ptr) { unsigned long pos; *seqlen = r2t->seqlen_eqlen; if (*seqlen == 0) { if (seqnum == 0) { *seqlen = r2t->seppos[0] + 1UL; pos = 0; } else { *seqlen = r2t->seppos[seqnum] - r2t->seppos[seqnum - 1UL]; pos = r2t->seppos[seqnum - 1UL] + 1UL; } } else { pos = seqnum * (*seqlen); } *nextcode_ptr = r2t->twobitencoding + GT_DIVBYUNITSIN2BITENC(pos); *charsinfirstcode = GT_UNITSIN2BITENC - GT_MODBYUNITSIN2BITENC(pos); *firstcode = *((*nextcode_ptr)++); } void gt_reads2twobit_decode_sequence(const GtReads2Twobit *r2t, unsigned long seqnum, char *decoded) { GtTwobitencoding code; unsigned long pos, seqlen, charsincode; GtTwobitencoding *nextencoded; const char code2char[] = "acgt"; char *nextdecoded = decoded; gt_reads2twobit_seek_sequence(r2t, seqnum, &seqlen, &code, &charsincode, &nextencoded); *(nextdecoded++) = '>'; *(nextdecoded++) = '\n'; for (pos = 0; pos < seqlen - 1UL; pos++) { if (charsincode == 0) { code = *(nextencoded++); charsincode = (unsigned long)GT_UNITSIN2BITENC; } *(nextdecoded++) = code2char[code >> ((--charsincode) << 1) & 3]; } *(nextdecoded++) = '\n'; *(nextdecoded) = '\0'; } static unsigned long gt_reads2twobit_subtract_from_chardistri( GtReads2Twobit *r2t, unsigned long seqnum) { GtTwobitencoding code; unsigned long pos, seqlen, charsincode; GtTwobitencoding *nextencoded; gt_reads2twobit_seek_sequence(r2t, seqnum, &seqlen, &code, &charsincode, &nextencoded); for (pos = 0; pos < seqlen - 1UL; pos++) { if (charsincode == 0) { code = *(nextencoded++); charsincode = (unsigned long)GT_UNITSIN2BITENC; } r2t->chardistri[code >> ((--charsincode) << 1) & 3]--; } return seqlen; } void gt_reads2twobit_decode_range(const GtReads2Twobit *r2t, GtFile *outfp, unsigned long seqnum_from, unsigned long nofseqs, const GtBitsequence *skip) { GtTwobitencoding code; unsigned short charsincode; const char code2char[] = "acgt"; unsigned long seqnum, pos, nextsep, nextdecoded, seqnum_to; const GtTwobitencoding *nextencoded = r2t->twobitencoding; char *decoded; gt_assert(r2t->seqlen_max > 0); if (nofseqs == 0) return; seqnum_to = seqnum_from + nofseqs - 1UL; decoded = gt_malloc(sizeof (*decoded) * (r2t->seqlen_max + 3UL)); decoded[0] = '>'; decoded[1] = '\n'; nextdecoded = 2UL; seqnum = seqnum_from; if (skip != NULL) while (GT_ISIBITSET(skip, seqnum)) seqnum++; if (r2t->seqlen_eqlen > 0) { nextsep = r2t->seqlen_eqlen * (seqnum + 1UL) - 1UL; pos = seqnum * r2t->seqlen_eqlen; } else { nextsep = r2t->seppos[seqnum]; pos = (seqnum == 0) ? 0 : r2t->seppos[seqnum - 1UL] + 1UL; } nextencoded = r2t->twobitencoding + GT_DIVBYUNITSIN2BITENC(pos); code = *(nextencoded++); charsincode = (unsigned short)GT_UNITSIN2BITENC - (unsigned short)GT_MODBYUNITSIN2BITENC(pos); while (true) { if (charsincode == 0) { code = *(nextencoded++); charsincode = (unsigned short)GT_UNITSIN2BITENC; } if (pos++ < nextsep) { gt_assert(nextsep - pos <= r2t->seqlen_max); decoded[nextdecoded++] = code2char[code >> ((--charsincode) << 1) & 3]; } else { /* output sequence */ charsincode--; decoded[nextdecoded++] = '\n'; decoded[nextdecoded] = '\0'; gt_file_xfputs(decoded, outfp); nextdecoded = 2UL; seqnum++; if (seqnum > seqnum_to) break; if (skip != NULL && GT_ISIBITSET(skip, seqnum)) { /* jump to next non-contained sequence */ while (seqnum <= seqnum_to && GT_ISIBITSET(skip, seqnum)) seqnum++; if (seqnum > seqnum_to) break; pos = r2t->seqlen_eqlen > 0 ? seqnum * r2t->seqlen_eqlen : r2t->seppos[seqnum - 1UL] + 1UL; nextencoded = r2t->twobitencoding + GT_DIVBYUNITSIN2BITENC(pos); code = *(nextencoded++); charsincode = (unsigned short)GT_UNITSIN2BITENC - (unsigned short)GT_MODBYUNITSIN2BITENC(pos); } nextsep = (r2t->seqlen_eqlen > 0) ? r2t->seqlen_eqlen * (seqnum + 1UL) - 1UL : r2t->seppos[seqnum]; } } gt_free(decoded); } int gt_reads2twobit_write_fasta(const GtReads2Twobit *r2t, char *path, GtBitsequence *skip, GtError *err) { GtFile *file; file = gt_file_new(path, "w", err); if (file == NULL) return -1; gt_reads2twobit_decode_range(r2t, file, 0, r2t->nofseqs, skip); gt_file_delete(file); return 0; } static void gt_reads2twobit_write_encoded_nocodesshift(GtReads2Twobit *r2t, GtTwobitencoding *outputbuffer, GtTwobitencoding offset, unsigned long firstcodeidx, unsigned long lastcodeidx) { if (offset == 0) outputbuffer[0] = r2t->twobitencoding[firstcodeidx]; else { GtTwobitencoding mask; mask = ((GtTwobitencoding)1 << GT_MULT2(GT_UNITSIN2BITENC - offset)) - 1; outputbuffer[0] = (r2t->twobitencoding[firstcodeidx] & mask) | (outputbuffer[0] & ~mask); } if (lastcodeidx > firstcodeidx) memcpy(outputbuffer + 1, r2t->twobitencoding + firstcodeidx + 1, sizeof (GtTwobitencoding) * (lastcodeidx - firstcodeidx)); } static void gt_reads2twobit_write_encoded_leftcodesshift( GtReads2Twobit *r2t, GtTwobitencoding *outputbuffer, GtTwobitencoding inputoffset, GtTwobitencoding outputoffset, unsigned long firstcodeidx, unsigned long lastcodeidx) { const GtTwobitencoding netoffset = inputoffset - outputoffset; const GtTwobitencoding shiftright = GT_MULT2(GT_UNITSIN2BITENC - netoffset); const GtTwobitencoding shiftleft = GT_MULT2(netoffset); unsigned long i; GtTwobitencoding *nextinoutputbuffer = outputbuffer; if (outputoffset == 0) outputbuffer[0] = r2t->twobitencoding[firstcodeidx] << shiftleft; else { GtTwobitencoding mask; mask = ((GtTwobitencoding)1 << GT_MULT2(GT_UNITSIN2BITENC - outputoffset)) - 1; outputbuffer[0] = ((r2t->twobitencoding[firstcodeidx] << shiftleft) & mask) | (outputbuffer[0] & ~mask); } for (i = firstcodeidx + 1UL; i <= lastcodeidx; i++) { *(nextinoutputbuffer) |= (r2t->twobitencoding[i] >> shiftright); *(++nextinoutputbuffer) = (r2t->twobitencoding[i] << shiftleft); } } static void gt_reads2twobit_write_encoded_rightcodesshift( GtReads2Twobit *r2t, GtTwobitencoding *outputbuffer, GtTwobitencoding inputoffset, GtTwobitencoding outputoffset, unsigned long firstcodeidx, unsigned long lastcodeidx) { const GtTwobitencoding netoffset = outputoffset - inputoffset; const GtTwobitencoding shiftright = GT_MULT2(netoffset); const GtTwobitencoding shiftleft = GT_MULT2(GT_UNITSIN2BITENC - netoffset); unsigned long i; GtTwobitencoding *nextinoutputbuffer = outputbuffer + 1; GtTwobitencoding mask; mask = ((GtTwobitencoding)1 << GT_MULT2(GT_UNITSIN2BITENC - outputoffset)) - 1; outputbuffer[0] = ((r2t->twobitencoding[firstcodeidx] >> shiftright) & mask) | (outputbuffer[0] & ~mask); outputbuffer[1] = r2t->twobitencoding[firstcodeidx] << shiftleft; for (i = firstcodeidx + 1; i <= lastcodeidx; i++) { *(nextinoutputbuffer) |= (r2t->twobitencoding[i] >> shiftright); *(++nextinoutputbuffer) = (r2t->twobitencoding[i] << shiftleft); } } GtTwobitencoding* gt_reads2twobit_write_encoded(GtReads2Twobit *r2t, unsigned long seqnum, GtTwobitencoding *outputbuffer, GtTwobitencoding outputoffset, GtTwobitencoding *lastcodeoffsetptr) { unsigned long firstpos, firstcodeidx, lastpos, lastcodeidx, seqlen; GtTwobitencoding inputoffset; firstpos = (seqnum == 0) ? 0 : (r2t->seqlen_eqlen > 0) ? r2t->seqlen_eqlen * seqnum : r2t->seppos[seqnum - 1UL] + 1UL; firstcodeidx = GT_DIVBYUNITSIN2BITENC(firstpos); lastpos = (r2t->seqlen_eqlen > 0) ? r2t->seqlen_eqlen * (seqnum + 1UL) - 1UL : r2t->seppos[seqnum]; lastcodeidx = GT_DIVBYUNITSIN2BITENC(lastpos); seqlen = (r2t->seqlen_eqlen > 0) ? r2t->seqlen_eqlen : lastpos - firstpos + 1UL; inputoffset = (GtTwobitencoding)GT_MODBYUNITSIN2BITENC(firstpos); if (inputoffset == outputoffset) { gt_reads2twobit_write_encoded_nocodesshift(r2t, outputbuffer, inputoffset, firstcodeidx, lastcodeidx); *lastcodeoffsetptr = (GtTwobitencoding)GT_MODBYUNITSIN2BITENC(lastpos + 1); } else if (inputoffset > outputoffset) { gt_reads2twobit_write_encoded_leftcodesshift(r2t, outputbuffer, inputoffset, outputoffset, firstcodeidx, lastcodeidx); *lastcodeoffsetptr = GT_MODBYUNITSIN2BITENC(outputoffset + seqlen); } else { gt_reads2twobit_write_encoded_rightcodesshift(r2t, outputbuffer, inputoffset, outputoffset, firstcodeidx, lastcodeidx); *lastcodeoffsetptr = GT_MODBYUNITSIN2BITENC(outputoffset + seqlen); } return outputbuffer + GT_DIVBYUNITSIN2BITENC(outputoffset + seqlen); } static inline void gt_reads2twobit_handle_deleted_mates( GT_UNUSED GtReads2Twobit *r2t, GtReadsLibraryInfo *rli, GtBitsequence *list) { unsigned long seqnum, last_seqnum = rli->first_seqnum + rli->nofseqs - 1UL; gt_assert(rli->nofseqs % 2 == 0); gt_assert(rli->nofseqs > 0); for (seqnum = rli->first_seqnum; seqnum < last_seqnum; seqnum += 2UL) { if (GT_ISIBITSET(list, seqnum)) { GT_SETIBIT(list, seqnum + 1UL); } else if (GT_ISIBITSET(list, seqnum + 1UL)) { GT_SETIBIT(list, seqnum); } } } void gt_reads2twobit_delete_sequences(GtReads2Twobit *r2t, GtBitsequence *list) { GtTwobitencoding outputoffset = 0, *outputbuffer; unsigned long libnum, seqnum, output_seqnum, noflibs = gt_array_size(r2t->collection), deleted_sequences = 0, deleted_chars = 0, output_startpos = 0; for (libnum = 0; libnum < noflibs; libnum++) { GtReadsLibraryInfo *rli = gt_array_get(r2t->collection, libnum); if (rli->nofseqs > 0) { unsigned long deleted_sequences_in_lib = 0, deleted_chars_in_lib = 0, last_seqnum = rli->first_seqnum + rli->nofseqs - 1UL; if (rli->filename2 != NULL) gt_reads2twobit_handle_deleted_mates(r2t, rli, list); for (seqnum = rli->first_seqnum; seqnum <= last_seqnum; seqnum++) { if (!GT_ISIBITSET(list, seqnum)) { if (deleted_sequences > 0) { gt_assert(seqnum >= deleted_sequences); output_seqnum = seqnum - deleted_sequences; output_startpos = (r2t->seqlen_eqlen > 0) ? r2t->seqlen_eqlen * output_seqnum : ((output_seqnum == 0) ? 0 : r2t->seppos[output_seqnum - 1UL] + 1UL); outputbuffer = r2t->twobitencoding + GT_DIVBYUNITSIN2BITENC(output_startpos); outputoffset = (GtTwobitencoding) GT_MODBYUNITSIN2BITENC(output_startpos); (void)gt_reads2twobit_write_encoded(r2t, seqnum, outputbuffer, outputoffset, &outputoffset); if (r2t->seqlen_eqlen == 0) { unsigned long seqlen; gt_assert(seqnum > 0); seqlen = r2t->seppos[seqnum] - r2t->seppos[seqnum - 1UL]; gt_assert(seqlen <= r2t->seqlen_max); gt_assert(output_startpos + seqlen <= r2t->total_seqlength); r2t->seppos[output_seqnum] = output_startpos + seqlen - 1UL; } } } else { deleted_chars_in_lib += gt_reads2twobit_subtract_from_chardistri(r2t, seqnum); deleted_sequences++; deleted_sequences_in_lib++; } } deleted_chars += deleted_chars_in_lib; gt_assert(deleted_sequences_in_lib <= rli->nofseqs); if (rli->filename2 != NULL) gt_assert(deleted_sequences_in_lib % 2 == 0); rli->nofseqs -= deleted_sequences_in_lib; gt_assert(deleted_chars_in_lib <= rli->total_seqlength); rli->total_seqlength -= deleted_chars_in_lib; } } gt_assert(deleted_sequences <= r2t->nofseqs); r2t->nofseqs -= deleted_sequences; gt_assert(deleted_chars <= r2t->total_seqlength); r2t->total_seqlength -= deleted_chars; if (deleted_sequences > 0) { r2t->twobitencoding = gt_realloc(r2t->twobitencoding, sizeof (*r2t->twobitencoding) * (GT_DIVBYUNITSIN2BITENC(r2t->total_seqlength) + 2UL)); } } static void gt_reads2twobit_set_separators_to_less_frequent_char( GtReads2Twobit *r2t) { unsigned long seqnum, pos, codenum, posincode; GtTwobitencoding sepcode, code, mask, shift; sepcode = gt_reads2twobit_less_frequent_char(r2t); if (sepcode != r2t->current_sepcode && r2t->nofseqs > 1UL) { unsigned long from, to; gt_log_log("changing sepcode from %lu to %lu", (unsigned long) r2t->current_sepcode, (unsigned long) sepcode); from = r2t->seqlen_eqlen > 0 ? 1UL : 0; to = r2t->seqlen_eqlen > 0 ? r2t->nofseqs - 1UL : r2t->nofseqs - 2UL; for (seqnum = from; seqnum <= to; seqnum++) { pos = r2t->seqlen_eqlen > 0 ? seqnum * r2t->seqlen_eqlen - 1UL : r2t->seppos[seqnum]; codenum = GT_DIVBYUNITSIN2BITENC(pos); posincode = GT_MODBYUNITSIN2BITENC(pos); code = r2t->twobitencoding[codenum]; shift = (GtTwobitencoding)GT_MULT2(GT_UNITSIN2BITENC - 1UL - posincode); mask = ~((GtTwobitencoding)(3UL) << shift); gt_assert((code & ~mask) >> shift == (GtTwobitencoding)r2t->current_sepcode); code = (code & mask) | ((GtTwobitencoding)sepcode << shift); r2t->twobitencoding[codenum] = code; } r2t->current_sepcode = sepcode; } } static int gt_reads2twobit_write_encseq_eqlen(GtReads2Twobit *r2t, GtError *err) { int had_err = 0; GtFilelengthvalues *filelengthtab; GtStrArray *filenametab; gt_assert(r2t->seqlen_eqlen > 0); gt_reads2twobit_collect_fileinfo(r2t, &filelengthtab, &filenametab); gt_reads2twobit_set_separators_to_less_frequent_char(r2t); gt_reads2twobit_zeropad_tbe(r2t); had_err = gt_encseq_equallength_write_twobitencoding_to_file( gt_str_get(r2t->indexname), r2t->total_seqlength, r2t->seqlen_eqlen - 1UL, r2t->twobitencoding, r2t->nofseqs, gt_array_size(r2t->collection), filelengthtab, filenametab, r2t->chardistri, err); gt_free(filelengthtab); gt_str_array_delete(filenametab); return had_err; } #define GT_READS2TWOBIT_SIZEOFREP(SAT)\ gt_encseq_determine_size(SAT, r2t->total_seqlength, r2t->nofseqs,\ numofdbfiles, lengthofdbfilenames, 0, 4U, 2U, 0); static int gt_reads2twobit_write_encseq_varlen(GtReads2Twobit *r2t, GtError *err) { int had_err = 0; GtFilelengthvalues *filelengthtab; GtStrArray *filenametab; uint64_t sizeofrep, minsizeofrep; unsigned long numofdbfiles = gt_array_size(r2t->collection); GtEncseqAccessType sat; unsigned long idx, lengthofdbfilenames = 0; gt_assert(r2t->seppos != NULL); gt_reads2twobit_collect_fileinfo(r2t, &filelengthtab, &filenametab); for (idx = 0; idx < gt_str_array_size(filenametab); idx++) { lengthofdbfilenames += gt_str_length(gt_str_array_get_str( filenametab, idx)) + 1UL; } sat = GT_ACCESS_TYPE_UCHARTABLES; minsizeofrep = GT_READS2TWOBIT_SIZEOFREP(sat); sizeofrep = GT_READS2TWOBIT_SIZEOFREP(GT_ACCESS_TYPE_USHORTTABLES); if (sizeofrep < minsizeofrep) { sat = GT_ACCESS_TYPE_USHORTTABLES; minsizeofrep = sizeofrep; } sizeofrep = GT_READS2TWOBIT_SIZEOFREP(GT_ACCESS_TYPE_UINT32TABLES); if (sizeofrep < minsizeofrep) sat = GT_ACCESS_TYPE_UINT32TABLES; gt_reads2twobit_set_separators_to_less_frequent_char(r2t); gt_reads2twobit_zeropad_tbe(r2t); had_err = gt_encseq_seppos2ssptab(gt_str_get(r2t->indexname), r2t->total_seqlength, r2t->nofseqs, r2t->seppos, err); if (!had_err) had_err = gt_encseq_generic_write_twobitencoding_to_file( gt_str_get(r2t->indexname), r2t->total_seqlength, sat, 0, r2t->seqlen_min - 1UL, r2t->seqlen_max - 1UL, 0, 0, r2t->seqlen_max - 1UL, r2t->twobitencoding, r2t->nofseqs, numofdbfiles, filelengthtab, filenametab, r2t->chardistri, err); gt_free(filelengthtab); gt_str_array_delete(filenametab); return had_err; } int gt_reads2twobit_write_encseq(GtReads2Twobit *r2t, GtError *err) { int had_err = 0; gt_error_check(err); gt_assert(r2t != NULL); if (r2t->nofseqs == 0) { gt_log_log("read set is empty, no encseq was written"); return had_err; } gt_assert(r2t->twobitencoding != NULL); gt_log_log("write encseq %s", gt_str_get(r2t->indexname)); gt_log_log("seqlen_eqlen = %lu", r2t->seqlen_eqlen); if (r2t->seqlen_eqlen > 0) { had_err = gt_reads2twobit_write_encseq_eqlen(r2t, err); } else { had_err = gt_reads2twobit_write_encseq_varlen(r2t, err); } return had_err; } void gt_reads2twobit_sort(GtReads2Twobit *r2t, GtCompareWithData cmp, void *cmp_data) { GtTwobitencoding *tbe, *tbe_next, offset; unsigned long i, *order; gt_assert(r2t != NULL); order = gt_malloc(sizeof (*order) * r2t->nofseqs); for (i = 0; i < r2t->nofseqs; i++) order[i] = i; gt_qsort_r(order, (size_t)r2t->nofseqs, sizeof *order, cmp_data, cmp); tbe = gt_malloc(sizeof (*tbe) * GT_DIVBYUNITSIN2BITENC(r2t->total_seqlength) + 2UL); offset = 0; tbe_next = tbe; for (i = 0; i < r2t->nofseqs; i++) { tbe_next = gt_reads2twobit_write_encoded(r2t, order[i], tbe_next, offset, &offset); if (r2t->seqlen_eqlen == 0) { /* recycle order memory to store new seppos */ order[i] = (order[i] == 0) ? r2t->seppos[0] : r2t->seppos[order[i]] - (r2t->seppos[order[i] - 1UL] + 1UL); if (i > 0) order[i] += (order[i - 1UL] + 1UL); } } gt_free(r2t->twobitencoding); r2t->twobitencoding = tbe; if (r2t->seqlen_eqlen == 0) { gt_free(r2t->seppos); r2t->seppos = order; } else { gt_free(order); } } int gt_reads2twobit_write_seppos(GtReads2Twobit *r2t, char* path, GtBitsequence *skip, GtError *err) { int had_err = 0; FILE *file; unsigned long pos, seqnum; if (r2t->seppos == NULL) return 0; file = gt_fa_fopen(path, "wb", err); if (file == NULL) had_err = -1; if (!had_err) { if (!GT_ISIBITSET(skip, 0)) { gt_xfwrite(r2t->seppos, sizeof (r2t->seppos), (size_t)1, file); pos = r2t->seppos[0] + 1UL; } else pos = 0; for (seqnum = 1UL; seqnum < r2t->nofseqs; seqnum++) { if (!GT_ISIBITSET(skip, seqnum)) { pos += r2t->seppos[seqnum] - r2t->seppos[seqnum - 1UL] - 1UL; gt_xfwrite(&pos, sizeof (pos), (size_t)1, file); pos++; } } gt_fa_fclose(file); } return had_err; } GtTwobitencoding *gt_reads2twobit_export_twobitencoding( const GtReads2Twobit *r2t) { gt_assert(r2t != NULL); return r2t->twobitencoding; } unsigned long *gt_reads2twobit_export_seppos(const GtReads2Twobit *r2t) { gt_assert(r2t != NULL); return r2t->seppos; } unsigned long gt_reads2twobit_nof_invalid_seqs(const GtReads2Twobit *r2t) { gt_assert(r2t != NULL); return r2t->invalid_sequences; } unsigned long gt_reads2twobit_invalid_seqs_totallength( const GtReads2Twobit *r2t) { gt_assert(r2t != NULL); return r2t->invalid_total_length; } unsigned long gt_reads2twobit_nofseqs(const GtReads2Twobit *r2t) { gt_assert(r2t != NULL); return r2t->nofseqs; } unsigned long gt_reads2twobit_seqlen_eqlen(const GtReads2Twobit *r2t) { gt_assert(r2t != NULL); return r2t->seqlen_eqlen; } unsigned long gt_reads2twobit_seqlen_max(const GtReads2Twobit *r2t) { gt_assert(r2t != NULL); return r2t->seqlen_max; } unsigned long gt_reads2twobit_seqlen_min(const GtReads2Twobit *r2t) { gt_assert(r2t != NULL); return r2t->seqlen_min; } unsigned long gt_reads2twobit_total_seqlength(const GtReads2Twobit *r2t) { gt_assert(r2t != NULL); return r2t->total_seqlength; } int gt_reads2twobit_write_libraries_table(const GtReads2Twobit *r2t, char *path, GtError *err) { int had_err = 0; unsigned long noflibs, lnum; GtReadsLibrary *lib_table; noflibs = gt_array_size(r2t->collection); gt_assert(noflibs > 0); lib_table = gt_malloc(sizeof (*lib_table) * noflibs); for (lnum = 0; lnum < noflibs; lnum++) { GtReadsLibraryInfo *rli; rli = gt_array_get(r2t->collection, lnum); lib_table[lnum].first_seqnum = rli->first_seqnum; lib_table[lnum].nofseqs = rli->nofseqs; lib_table[lnum].paired = (rli->filename2 != NULL) ? true : false; lib_table[lnum].insertlength = rli->insertlength; } had_err = gt_reads_library_table_write(lib_table, noflibs, path, err); gt_free(lib_table); return had_err; } genometools-1.5.1/src/match/reads2twobit.h000066400000000000000000000164701211610345200205210ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef READS2TWOBIT_H #define READS2TWOBIT_H #include "core/fptr_api.h" #include "core/intbits.h" #include "core/str.h" /* The class is a specialized encoder for large collections of sequencing reads in FastQ and Fasta format. After encoding, the information is accessible as a GtTwobitencoding representation in memory and can be output to disk in a GtEncseq-compatible format. It is designed to be fast and memory efficient, and thus has some limitations compared to the encoding feature of GtEncseq: the only supported input is Fasta/FastQ with a DNA alphabet; reads containing wildchars are removed; the descriptions are discarded; the md5 are not calculated. Paired-end libraries are supported. The input may consists in sets of two files (forward reads and reverse reads, in the same order) or a single file with interleaved reads. In paired-end mode, if a sequence is discarded (e.g. because it contains ambiguities), then its mate is discarded too. Both equal lenght and variable length sequence collections are supported. Reads2Twobit automatically switches to variable length mode when the first sequence is encoded, whose length is not the same of the previous sequences. */ typedef struct GtReads2Twobit GtReads2Twobit; GtReads2Twobit* gt_reads2twobit_new(GtStr *indexname); void gt_reads2twobit_delete(GtReads2Twobit *r2t); #define GT_READS2TWOBIT_LIBSPECSEP ':' #define GT_READS2TWOBIT_INSERTSEP ',' /* Adds the library described by to the collection. If contains at least a ':' is is assumed to be in the form "filename1[:filename2]:insertlength[,stdev]" and parsed; on success 0 is returned, if a parsing error occurs, -1 is returned. If does not contain any ':', it is assumed to be a filename of a single-end library; in this case the function returns 0. */ int gt_reads2twobit_add_library(GtReads2Twobit *r2t, const GtStr *libspec, GtError *err); /* Use phred64 scores instead of phred33; it must be called before . */ void gt_reads2twobit_use_phred64(GtReads2Twobit *r2t); /* filter those reads which contain more than positions whose quality is no more than . */ void gt_reads2twobit_set_quality_filter(GtReads2Twobit *r2t, unsigned long maxlow, char lowqual); /* Encodes the sequences in the twobit-encoding format in memory; can be called only once; returns 0 on success, a negative number on error and sets accordingly. */ int gt_reads2twobit_encode(GtReads2Twobit *r2t, GtError *err); /* encoding statistics, must be called after */ unsigned long gt_reads2twobit_nofseqs(const GtReads2Twobit *r2t); unsigned long gt_reads2twobit_seqlen_eqlen(const GtReads2Twobit *r2t); unsigned long gt_reads2twobit_seqlen_max(const GtReads2Twobit *r2t); unsigned long gt_reads2twobit_seqlen_min(const GtReads2Twobit *r2t); unsigned long gt_reads2twobit_total_seqlength(const GtReads2Twobit *r2t); unsigned long gt_reads2twobit_nof_invalid_seqs(const GtReads2Twobit *r2t); unsigned long gt_reads2twobit_invalid_seqs_totallength( const GtReads2Twobit *r2t); /* Writes the sequence collection to disk in a GtEncseq-compatible format; sets the separator positions to the less frequent character when needed; it must be called after ; returns 0 on success. */ int gt_reads2twobit_write_encseq(GtReads2Twobit *r2t, GtError *err); /* writes the sequence collection to disk in MultiFasta format; it must be called after ; if is not NULL, then skips any sequence for which the corresponding bit is set */ int gt_reads2twobit_write_fasta(const GtReads2Twobit *r2t, char *path, GtBitsequence *skip, GtError *err); /* decodes the specified sequence in Fasta format; the buffer must be large enough */ void gt_reads2twobit_decode_sequence(const GtReads2Twobit *r2t, unsigned long seqnum, char *decoded); /* decodes the sequences to +-1 in MultiFasta format and outputs to ; if is not NULL, then skips any sequence for which the corresponding bit is set */ void gt_reads2twobit_decode_range(const GtReads2Twobit *r2t, GtFile *outfp, unsigned long seqnum_from, unsigned long nofseqs, const GtBitsequence *skip); /* writes the sequence to ; starts writing at the -th character encoded by the code; returns a pointer to the next buffer position where a code is not complete and sets <*lastcodeoffsetptr> to the offset of the last code (which can be used as for subsequent calls to the function) */ GtTwobitencoding* gt_reads2twobit_write_encoded(GtReads2Twobit *r2t, unsigned long seqnum, GtTwobitencoding *outputbuffer, GtTwobitencoding outputoffset, GtTwobitencoding *lastcodeoffsetptr); /* outputs the seppos array to ; if is not NULL, then skips any position for which the corresponding bit is set */ int gt_reads2twobit_write_seppos(GtReads2Twobit *r2t, char* path, GtBitsequence *skip, GtError *err); /* delete the sequences for which a bit is set in the list; for paired reads: both members of a pair are deleted */ void gt_reads2twobit_delete_sequences(GtReads2Twobit *r2t, GtBitsequence *list); /* pointer to the internal twobitencoding representation; it must be called after */ GtTwobitencoding *gt_reads2twobit_export_twobitencoding( const GtReads2Twobit *r2t); /* pointer to the internal seppos array; it must be called after */ unsigned long *gt_reads2twobit_export_seppos(const GtReads2Twobit *r2t); /* sort the sequences according to the specified comparator function */ void gt_reads2twobit_sort(GtReads2Twobit *r2t, GtCompareWithData cmp, void *cmp_data); /* write the libraries information to disk */ int gt_reads2twobit_write_libraries_table(const GtReads2Twobit *r2t, char *path, GtError *err); #define GT_READS2TWOBIT_LIBSPEC_HELPMSG \ "specify a list of input libraries (Fasta/FastQ); for single-end " \ "libraries use the filename (which is not allowed to contain ':' " \ "symbols); for paired-end libraries with reads interleaved (f,r,f,r,...) "\ "in a single file use the notation :[,] " \ "(stdev may be omitted); for paired-end with reads in two files (f, r) " \ "use the notation ::[,]" #endif genometools-1.5.1/src/match/reads_library.c000066400000000000000000000047531211610345200207260ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/file.h" #include "match/reads_library.h" int gt_reads_library_table_write(GtReadsLibrary *lib_table, unsigned long noflibs, const char *path, GtError *err) { GtFile *file; file = gt_file_new(path, "w", err); if (file == NULL) return -1; else { gt_file_xwrite(file, &noflibs, sizeof (noflibs)); gt_file_xwrite(file, lib_table, sizeof (*lib_table) * noflibs); gt_file_delete(file); } return 0; } GtReadsLibrary* gt_reads_library_table_read(const char *path, GtError *err, unsigned long *noflibs) { GtFile *file; GtReadsLibrary *lib_table = NULL; file = gt_file_new(path, "r", err); if (file != NULL) { int freadretval; gt_assert(noflibs != NULL); freadretval = gt_file_xread(file, noflibs, sizeof (noflibs)); if ((size_t)freadretval != sizeof (noflibs)) { gt_error_set(err, "library file %s: " "error by reading number of libraries", path); } else if (*noflibs == 0) { gt_error_set(err, "library file %s: " "number of libraries is 0", path); } else { const size_t lib_table_size = sizeof (*lib_table) * (*noflibs); lib_table = gt_malloc(lib_table_size); freadretval = gt_file_xread(file, lib_table, lib_table_size); if ((size_t)freadretval != lib_table_size) { gt_error_set(err, "library file %s: " "error by reading libraries table " "(%lu bytes expected, %d bytes read)", path, (unsigned long)lib_table_size, freadretval); gt_free(lib_table); lib_table = NULL; } } gt_file_delete(file); } return lib_table; } genometools-1.5.1/src/match/reads_library.h000066400000000000000000000025161211610345200207260ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef READS_LIBRARY_H #define READS_LIBRARY_H #include "core/error_api.h" #define GT_READS_LIBRARY_TABLE_FILESUFFIX ".rlt" typedef struct { unsigned long first_seqnum; unsigned long nofseqs; unsigned long insertlength; bool paired; } GtReadsLibrary; int gt_reads_library_table_write(GtReadsLibrary *lib_table, unsigned long noflibs, const char *path, GtError *err); GtReadsLibrary* gt_reads_library_table_read(const char *path, GtError *err, unsigned long *noflibs); #endif genometools-1.5.1/src/match/revcompl.c000066400000000000000000000030051211610345200177200ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/types_api.h" #include "core/readmode.h" void gt_inplace_reversecomplement(GtUchar *seq,unsigned long len) { GtUchar tmp, *frontptr, *backptr; for (frontptr = seq, backptr = seq + len - 1; frontptr < backptr; frontptr++, backptr--) { tmp = *frontptr; *frontptr = GT_COMPLEMENTBASE(*backptr); *backptr = GT_COMPLEMENTBASE(tmp); } } void gt_copy_reversecomplement(GtUchar *dest,const GtUchar *src, unsigned long len) { GtUchar *destptr; const GtUchar *srcptr; for (destptr = dest, srcptr = src + len - 1; destptr < dest + len; destptr++, srcptr--) { *destptr = GT_COMPLEMENTBASE(*srcptr); } } genometools-1.5.1/src/match/revcompl.h000066400000000000000000000021301211610345200177230ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef REVCOMPL_H #define REVCOMPL_H #include "core/types_api.h" void gt_inplace_reversecomplement(GtUchar *seq,unsigned long len); void gt_copy_reversecomplement(GtUchar *dest,const GtUchar *src, unsigned long len); #endif genometools-1.5.1/src/match/sarr-def.h000066400000000000000000000122031211610345200176010ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SARR_DEF_H #define SARR_DEF_H #include #include "core/defined-types.h" #include "core/encseq.h" #include "core/types_api.h" #include "core/unused_api.h" #include "core/codetype.h" #include "lcpoverflow.h" #include "bcktab.h" #define FILEBUFFERSIZE 4096 #define SARR_ESQTAB 1U #define SARR_SUFTAB (1U << 1) #define SARR_LCPTAB (1U << 2) #define SARR_BWTTAB (1U << 3) #define SARR_DESTAB (1U << 4) #define SARR_SDSTAB (1U << 5) #define SARR_BCKTAB (1U << 6) #define SARR_SSPTAB (1U << 7) #define SARR_ALLTAB (SARR_ESQTAB |\ SARR_SUFTAB |\ SARR_LCPTAB |\ SARR_BWTTAB |\ SARR_DESTAB |\ SARR_SSPTAB) #define DECLAREBufferedfiletype(TYPE)\ typedef struct\ {\ unsigned int nextfree,\ nextread;\ TYPE *bufferedfilespace;\ FILE *fp;\ } GtBufferedfile_ ## TYPE #define DECLAREREADFUNCTION(TYPE)\ GT_UNUSED static int gt_readnextfromstream_ ## TYPE (TYPE *val,\ GtBufferedfile_ ## TYPE *buf)\ {\ if (buf->nextread >= buf->nextfree)\ {\ buf->nextfree = (unsigned int) fread(buf->bufferedfilespace,\ sizeof (TYPE),\ (size_t) FILEBUFFERSIZE,\ buf->fp);\ if (ferror(buf->fp))\ {\ fprintf(stderr,"error when trying to read next %s",#TYPE);\ exit(GT_EXIT_PROGRAMMING_ERROR);\ }\ buf->nextread = 0;\ if (buf->nextfree == 0)\ {\ return 0;\ }\ }\ *val = buf->bufferedfilespace[buf->nextread++];\ return 1;\ } DECLAREBufferedfiletype(GtUlong); DECLAREREADFUNCTION(GtUlong); #ifdef _LP64 DECLAREBufferedfiletype(uint32_t); DECLAREREADFUNCTION(uint32_t); #endif DECLAREBufferedfiletype(GtUchar); DECLAREREADFUNCTION(GtUchar); DECLAREBufferedfiletype(Largelcpvalue); DECLAREREADFUNCTION(Largelcpvalue); typedef unsigned long ESASuffixptr; #define ESASUFFIXPTRGET(TAB,IDX) TAB[IDX] typedef struct { GtEncseq *encseq; Definedunsignedlong numoflargelcpvalues; /* only in esa-map.c */ Defineddouble averagelcp; Definedunsignedlong longest; /* for BWT */ GtReadmode readmode; /* relevant when reading the encoded sequence */ bool mirroredencseq; unsigned long numberofallsortedsuffixes; /* either with mapped input */ const ESASuffixptr *suftab; const GtUchar *lcptab; const Largelcpvalue *llvtab; const GtUchar *bwttab; unsigned int prefixlength; GtBcktab *bcktab; /* or with streams */ #ifdef _LP64 GtBufferedfile_uint32_t suftabstream_uint32_t; #endif GtBufferedfile_GtUlong suftabstream_GtUlong; GtBufferedfile_GtUchar bwttabstream, lcptabstream; GtBufferedfile_Largelcpvalue llvtabstream; } Suffixarray; /*@unused@*/ static inline const Largelcpvalue *getlargelcpvalue( const Suffixarray *suffixarray, unsigned long pos) { const Largelcpvalue *leftptr, *rightptr, *midptr; unsigned long len; gt_assert(suffixarray->numoflargelcpvalues.defined); leftptr = suffixarray->llvtab; rightptr = suffixarray->llvtab + suffixarray->numoflargelcpvalues.valueunsignedlong - 1; while (leftptr<=rightptr) { len = (unsigned long) (rightptr-leftptr); midptr = leftptr + GT_DIV2(len); if (pos < midptr->position) { rightptr = midptr - 1; } else { if (pos > midptr->position) { leftptr = midptr + 1; } else { return midptr; } } } return NULL; } /*@unused@*/ static inline unsigned long lcptable_get( const Suffixarray *suffixarray, unsigned long pos) { GtUchar smalllcpvalue; const Largelcpvalue *largelcpvalue; gt_assert(pos <= gt_encseq_total_length(suffixarray->encseq)); smalllcpvalue = suffixarray->lcptab[pos]; if (smalllcpvalue != LCPOVERFLOW) { return (unsigned long) smalllcpvalue; } largelcpvalue = getlargelcpvalue(suffixarray,pos); gt_assert(largelcpvalue != NULL); return largelcpvalue->value; } #endif genometools-1.5.1/src/match/seqabstract.c000066400000000000000000000226511211610345200204150ustar00rootroot00000000000000/* Copyright (c) 2013 Stefan Kurtz Copyright (c) 2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/chardef.h" #include "core/types_api.h" #include "core/ma_api.h" #include "core/minmax.h" #include "core/encseq.h" #include "stamp.h" #include "greedyedist.h" struct GtSeqabstract { bool isptr, cmpcharbychar; unsigned long len, offset, totallength; GtEncseqReader *esr; bool stoppossupport; union { const GtUchar *ptr; const GtEncseq *encseq; } seq; }; GtSeqabstract *gt_seqabstract_new_empty(void) { GtSeqabstract *sa = gt_malloc(sizeof *sa); sa->cmpcharbychar = false; sa->isptr = true; sa->len = 0; sa->esr = NULL; sa->totallength = 0; sa->stoppossupport = false; sa->offset = 0; sa->seq.ptr = NULL; return sa; } void gt_seqabstract_reinit_ptr(GtSeqabstract *sa, const GtUchar *ptr, unsigned long len, unsigned long offset) { sa->cmpcharbychar = false; sa->isptr = true; sa->len = len; sa->stoppossupport = false; sa->totallength = 0; sa->offset = offset; if (sa->esr != NULL) { gt_encseq_reader_delete(sa->esr); sa->esr = NULL; } sa->seq.ptr = ptr + offset; } GtSeqabstract *gt_seqabstract_new_ptr(const GtUchar *ptr, unsigned long len, unsigned long offset) { GtSeqabstract *sa = gt_seqabstract_new_empty(); gt_seqabstract_reinit_ptr(sa,ptr,len,offset); return sa; } void gt_seqabstract_reinit_encseq(GtSeqabstract *sa, const GtEncseq *encseq, unsigned long len, unsigned long offset) { sa->cmpcharbychar = gt_encseq_has_twobitencoding(encseq) ? false : true; sa->isptr = false; sa->len = len; if (sa->esr != NULL) { if (encseq != sa->seq.encseq) { gt_encseq_reader_delete(sa->esr); sa->esr = gt_encseq_create_reader_with_readmode(encseq, GT_READMODE_FORWARD,0); } } else { sa->esr = gt_encseq_create_reader_with_readmode(encseq, GT_READMODE_FORWARD,0); } sa->stoppossupport = gt_encseq_has_twobitencoding_stoppos_support(encseq); sa->offset = offset; sa->seq.encseq = encseq; sa->totallength = gt_encseq_total_length(encseq); } GtSeqabstract *gt_seqabstract_new_encseq(const GtEncseq *encseq, unsigned long len, unsigned long offset) { GtSeqabstract *sa = gt_seqabstract_new_empty(); gt_seqabstract_reinit_encseq(sa, encseq, len, offset); return sa; } unsigned long gt_seqabstract_length_get(const GtSeqabstract *sa) { return sa->len; } void gt_seqabstract_delete(GtSeqabstract *sa) { gt_encseq_reader_delete(sa->esr); gt_free(sa); } GtUchar gt_seqabstract_encoded_char(const GtSeqabstract *sa, unsigned long idx) { return sa->isptr ? sa->seq.ptr[idx] : gt_encseq_get_encoded_char(sa->seq.encseq, sa->offset + idx, GT_READMODE_FORWARD); } #define GT_SEQABSTRACT_CMPCHAR(VARA,VARB)\ if ((VARA) != (VARB) || ISSPECIAL(VARA))\ {\ break;\ } unsigned long gt_seqabstract_lcp(bool forward, const GtSeqabstract *useq, const GtSeqabstract *vseq, unsigned long leftstart, unsigned long rightstart, unsigned long minlen) { unsigned long lcp; GtUchar a, b; if (minlen == 0) { return 0; } if (useq->isptr) { if (vseq->isptr) { if (useq->seq.ptr == vseq->seq.ptr && useq->offset == vseq->offset && leftstart == rightstart) { for (lcp = 0; lcp < minlen; lcp++) { a = useq->seq.ptr[forward ? leftstart + lcp : leftstart - lcp]; if (ISSPECIAL(a)) { break; } } } else { for (lcp = 0; lcp < minlen; lcp++) { a = useq->seq.ptr[forward ? leftstart + lcp : leftstart - lcp]; b = vseq->seq.ptr[forward ? rightstart + lcp : rightstart - lcp]; GT_SEQABSTRACT_CMPCHAR(a,b); } } } else { for (lcp = 0; lcp < minlen; lcp++) { a = useq->seq.ptr[forward ? leftstart + lcp : leftstart - lcp]; b = gt_encseq_get_encoded_char(vseq->seq.encseq, vseq->offset + (forward ? rightstart + lcp : rightstart - lcp), GT_READMODE_FORWARD); GT_SEQABSTRACT_CMPCHAR(a,b); } } } else { if (vseq->isptr) { for (lcp = 0; lcp < minlen; lcp++) { a = gt_encseq_get_encoded_char(useq->seq.encseq, useq->offset + (forward ? leftstart + lcp : leftstart - lcp), GT_READMODE_FORWARD); b = vseq->seq.ptr[forward ? rightstart + lcp : rightstart - lcp]; GT_SEQABSTRACT_CMPCHAR(a,b); } } else { if (!useq->cmpcharbychar && !vseq->cmpcharbychar) { if (useq->seq.encseq == vseq->seq.encseq && useq->offset + leftstart == vseq->offset + rightstart) { if (useq->stoppossupport) { unsigned long stoppos; const unsigned long startpos = forward ? (useq->offset + leftstart) : GT_REVERSEPOS(useq->totallength, useq->offset + leftstart); gt_encseq_reader_reinit_with_readmode(useq->esr, useq->seq.encseq, forward ? GT_READMODE_FORWARD : GT_READMODE_REVERSE, startpos); stoppos = gt_getnexttwobitencodingstoppos(forward,useq->esr); if (!forward) { stoppos = GT_REVERSEPOS(useq->totallength+1,stoppos); } gt_assert(startpos <= stoppos); lcp = MIN(minlen,stoppos - startpos); } else { unsigned long startpos = useq->offset + leftstart; for (lcp = 0; lcp < minlen; lcp++) { a = gt_encseq_get_encoded_char(useq->seq.encseq, forward ? (startpos + lcp) : (startpos - lcp), GT_READMODE_FORWARD); if (ISSPECIAL(a)) { break; } } } } else { for (lcp = 0; lcp < minlen; lcp++) { a = gt_encseq_get_encoded_char(useq->seq.encseq, useq->offset + (forward ? leftstart + lcp : leftstart - lcp), GT_READMODE_FORWARD); b = gt_encseq_get_encoded_char(vseq->seq.encseq, vseq->offset + (forward ? rightstart + lcp : rightstart - lcp), GT_READMODE_FORWARD); GT_SEQABSTRACT_CMPCHAR(a,b); } } } else { for (lcp = 0; lcp < minlen; lcp++) { a = gt_encseq_get_encoded_char(useq->seq.encseq, useq->offset + (forward ? leftstart + lcp : leftstart - lcp), GT_READMODE_FORWARD); b = gt_encseq_get_encoded_char(vseq->seq.encseq, vseq->offset + (forward ? rightstart + lcp : rightstart - lcp), GT_READMODE_FORWARD); GT_SEQABSTRACT_CMPCHAR(a,b); } } } } return lcp; } genometools-1.5.1/src/match/seqabstract.h000066400000000000000000000047411211610345200204220ustar00rootroot00000000000000/* Copyright (c) 2013 Stefan Kurtz Copyright (c) 2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SEQABSTRACT_H #define SEQABSTRACT_H #include "core/types_api.h" #include "core/encseq_api.h" typedef struct GtSeqabstract GtSeqabstract; GtSeqabstract* gt_seqabstract_new_empty(void); GtSeqabstract* gt_seqabstract_new_ptr(const GtUchar *ptr, unsigned long len, unsigned long offset); GtSeqabstract* gt_seqabstract_new_encseq(const GtEncseq *encseq, unsigned long len, unsigned long offset); void gt_seqabstract_reinit_ptr(GtSeqabstract *sa, const GtUchar *ptr, unsigned long len, unsigned long offset); void gt_seqabstract_reinit_encseq(GtSeqabstract *sa, const GtEncseq *encseq, unsigned long len, unsigned long offset); unsigned long gt_seqabstract_length_get(const GtSeqabstract *sa); GtUchar gt_seqabstract_encoded_char(const GtSeqabstract *sa, unsigned long idx); void gt_seqabstract_delete(GtSeqabstract *sa); unsigned long gt_seqabstract_lcp(bool forward, const GtSeqabstract *useq, const GtSeqabstract *vseq, unsigned long leftstart, unsigned long rightstart, unsigned long minlen); #endif genometools-1.5.1/src/match/seqnumrelpos.c000066400000000000000000000046041211610345200206340ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq_api.h" #include "core/ma.h" #include "seqnumrelpos.h" struct GtSeqnumrelpos { const GtEncseq *encseq; unsigned long relposmask; unsigned int bitsforrelpos; }; GtSeqnumrelpos *gt_seqnumrelpos_new(unsigned int bitsforrelpos, const GtEncseq *encseq) { GtSeqnumrelpos *snrp; snrp = gt_malloc(sizeof (*snrp)); snrp->bitsforrelpos = bitsforrelpos; snrp->relposmask = (1UL << snrp->bitsforrelpos) - 1; snrp->encseq = encseq; return snrp; } void gt_seqnumrelpos_delete(GtSeqnumrelpos *snrp) { gt_free(snrp); } unsigned long gt_seqnumrelpos_decode_pos(const GtSeqnumrelpos *snrp, unsigned long seqnumrelpos) { unsigned long seqnum, relpos; seqnum = seqnumrelpos >> snrp->bitsforrelpos; relpos = seqnumrelpos & snrp->relposmask; return gt_encseq_seqstartpos(snrp->encseq,seqnum) + relpos; } unsigned long gt_seqnumrelpos_decode_seqnum(const GtSeqnumrelpos *snrp, unsigned long seqnumrelpos) { return seqnumrelpos >> snrp->bitsforrelpos; } unsigned long gt_seqnumrelpos_decode_relpos(const GtSeqnumrelpos *snrp, unsigned long seqnumrelpos) { return seqnumrelpos & snrp->relposmask; } unsigned long gt_seqnumrelpos_encode(const GtSeqnumrelpos *snrp, unsigned long seqnum, unsigned long relpos) { gt_assert(relpos <= snrp->relposmask); return (seqnum << snrp->bitsforrelpos) | relpos; } genometools-1.5.1/src/match/seqnumrelpos.h000066400000000000000000000033251211610345200206400ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SEQNUMRELPOS_H #define SEQNUMRELPOS_H typedef struct GtSeqnumrelpos GtSeqnumrelpos; GtSeqnumrelpos *gt_seqnumrelpos_new(unsigned int bitsforrelpos, const GtEncseq *encseq); void gt_seqnumrelpos_delete(GtSeqnumrelpos *snrp); unsigned long gt_seqnumrelpos_decode_pos(const GtSeqnumrelpos *snrp, unsigned long seqnumrelpos); unsigned long gt_seqnumrelpos_decode_seqnum(const GtSeqnumrelpos *snrp, unsigned long seqnumrelpos); unsigned long gt_seqnumrelpos_decode_relpos(const GtSeqnumrelpos *snrp, unsigned long seqnumrelpos); unsigned long gt_seqnumrelpos_encode(const GtSeqnumrelpos *snrp, unsigned long seqnum, unsigned long relpos); #endif genometools-1.5.1/src/match/sfx-apfxlen.c000066400000000000000000000133071211610345200203320ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include "core/error.h" #include "core/minmax.h" #include "core/codetype.h" #include "core/logger.h" #include "bcktab.h" #include "sfx-apfxlen.h" #include "initbasepower.h" /* We need \texttt{prefixlenbits} bits to store the length of a matching prefix. So we can store the following maximal value in the remaining bits. */ #define MAXREMAININGAFTERPREFIXLEN(PFXLENBITS)\ ((((GtCodetype) 1) << (32-(PFXLENBITS))) - 1) /* We allow to choose the prefixlength \(l\) in such a way that the size of table bcktab never exceeds the $\texttt{GT_MAXMULTIPLIEROFTOTALLENGTH}\cdot n$, where \(n\) is the total length of the input sequence. */ #define GT_MAXMULTIPLIEROFTOTALLENGTH 4.0 #define GT_MAXVALUEWITHBITS(BITNUM) ((1U << (BITNUM)) - 1) static unsigned int prefixlengthwithmaxspace(unsigned int numofchars, unsigned long maxbytes, double factor, unsigned long maxvalue, bool withspecialsuffixes) { unsigned int prefixlength; uint64_t sizeofrep; #ifdef WITHINFO printf("maxbytes = %lu\n",(unsigned long) (maxbytes * factor)); #endif for (prefixlength = 1U; /* Nothing */; prefixlength++) { sizeofrep = gt_bcktab_sizeoftable(numofchars,prefixlength, maxvalue,withspecialsuffixes); #ifdef WITHINFO printf("sizeofrep = %lu, after divide %lu\n",(unsigned long) sizeofrep, (unsigned long) (sizeofrep/factor)); #endif if (sizeofrep/factor > (uint64_t) maxbytes) { #ifdef WITHINFO printf("prefixlengthwithmaxspace = %u\n",prefixlength-1); #endif return prefixlength-1; } } /*@ignore@*/ return 1U; /*@end@*/ } unsigned int gt_recommendedprefixlength(unsigned int numofchars, unsigned long totallength, double recommendedmultiplier, bool withspecialsuffixes) { unsigned int prefixlength; prefixlength = prefixlengthwithmaxspace(numofchars,totallength, recommendedmultiplier, totallength+1, withspecialsuffixes); if (prefixlength == 0) { return 1U; } else { unsigned int mbp = gt_maxbasepower(numofchars); if (mbp >= 1U) { return MIN(mbp,prefixlength); } else { return prefixlength; } } } unsigned int gt_whatisthemaximalprefixlength(unsigned int numofchars, unsigned long totallength, unsigned int prefixlenbits, bool withspecialsuffixes) { unsigned int maxprefixlen, mbp; maxprefixlen = prefixlengthwithmaxspace(numofchars,totallength, GT_MAXMULTIPLIEROFTOTALLENGTH, totallength+1, withspecialsuffixes); mbp = gt_maxbasepower(numofchars); maxprefixlen = MIN(mbp,maxprefixlen); if (prefixlenbits > 0) { unsigned int tmplength; tmplength = prefixlengthwithmaxspace(numofchars, (unsigned long) MAXREMAININGAFTERPREFIXLEN(prefixlenbits), GT_RECOMMENDED_MULTIPLIER_DEFAULT, totallength+1, withspecialsuffixes); if (tmplength > 0 && maxprefixlen > tmplength) { maxprefixlen = tmplength; } tmplength = GT_MAXVALUEWITHBITS(prefixlenbits); if (tmplength > 0 && maxprefixlen > tmplength) { maxprefixlen = tmplength; } } if (maxprefixlen == 0) { return 1U; } return maxprefixlen; } int gt_checkprefixlength(unsigned int maxprefixlen, unsigned int prefixlength, GtError *err) { gt_error_check(err); if (maxprefixlen < prefixlength) { gt_error_set(err,"prefix length %u is too large, maximal prefix length " "for this input size and alphabet size is %u", prefixlength, maxprefixlen); return -1; } return 0; } void gt_showmaximalprefixlength(GtLogger *logger, unsigned int maxprefixlen, unsigned int recommended) { gt_logger_log(logger, "for this input size and alphabet size, " "the maximal prefixlength"); gt_logger_log(logger,"(argument of option -pl) is %u,",maxprefixlen); gt_logger_log(logger,"the recommended prefixlength is %u",recommended); } genometools-1.5.1/src/match/sfx-apfxlen.h000066400000000000000000000034651211610345200203430ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_APFXLEN_H #define SFX_APFXLEN_H #include "core/error_api.h" #define GT_RECOMMENDED_MULTIPLIER_DEFAULT 0.25 unsigned int gt_recommendedprefixlength(unsigned int numofchars, unsigned long totallength, double recommendedmultiplier, bool withspecialsuffixes); unsigned int gt_whatisthemaximalprefixlength(unsigned int numofchars, unsigned long totallength, unsigned int prefixlenbits, bool withspecialsuffixes); int gt_checkprefixlength(unsigned int maxprefixlen, unsigned int prefixlength, GtError *err); void gt_showmaximalprefixlength(GtLogger *logger, unsigned int maxprefixlen, unsigned int recommended); #endif genometools-1.5.1/src/match/sfx-bentsedg.c000066400000000000000000001566271211610345200205050ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/assert_api.h" #include "core/chardef.h" #include "core/divmodmul.h" #include "core/minmax.h" #include "core/arraydef.h" #include "core/unused_api.h" #include "core/types_api.h" #include "core/encseq.h" #include "bcktab.h" #include "kmer2string.h" #include "sfx-radixsort.h" #include "sfx-bltrie.h" #include "sfx-copysort.h" #include "sfx-bentsedg.h" #include "sfx-lcpvalues.h" #include "sfx-suftaborder.h" #include "sfx-suffixgetset.h" #include "sfx-shortreadsort.h" #define ACCESSCHARRAND(POS) gt_encseq_get_encoded_char(bsr->encseq,\ POS,bsr->readmode) #define ACCESSCHARSEQ(ESR) gt_encseq_reader_next_encoded_char(ESR) #define ISNOTEND(POS) ((POS) < bsr->totallength &&\ ISNOTSPECIAL(ACCESSCHARRAND(POS))) #define DEREFSTOPPOSSEQ(VAR,POS,STOPPOS,ESR)\ (((POS) < (STOPPOS) && ISNOTSPECIAL(VAR = ACCESSCHARSEQ(ESR))) ?\ ((unsigned long) VAR) : GT_UNIQUEINT(POS)) #define DEREFSEQ(VAR,POS,ESR) DEREFSTOPPOSSEQ(VAR,POS,bsr->totallength,ESR) #define BS_SWAPARRAY(TMP,SUBBUCKETLEFT,IDX1,IDX2)\ if ((IDX1) != (IDX2))\ {\ TMP = gt_suffixsortspace_get(bsr->sssp,SUBBUCKETLEFT,IDX1);\ gt_suffixsortspace_set(bsr->sssp,SUBBUCKETLEFT,IDX1,\ gt_suffixsortspace_get(bsr->sssp,\ SUBBUCKETLEFT,\ IDX2));\ gt_suffixsortspace_set(bsr->sssp,SUBBUCKETLEFT,IDX2,TMP);\ } #define STACKTOP\ bsr->mkvauxstack.spaceGtMKVstack[bsr->mkvauxstack.nextfreeGtMKVstack] #define GT_BSR_UPDATELCP(MINVAL,MAXVAL,LCP)\ if ((MINVAL) > (LCP))\ {\ MINVAL = LCP;\ }\ GT_UPDATE_MAX(MAXVAL,LCP) #define CMPCHARBYCHARPTR2INT(VAR,SUBBUCKETLEFT,TMPVAR,IDX)\ VAR = (((cptr = gt_suffixsortspace_get(bsr->sssp,SUBBUCKETLEFT,IDX)+\ depth)\ < bsr->totallength &&\ ISNOTSPECIAL(TMPVAR = ACCESSCHARRAND(cptr)))\ ? ((unsigned long) TMPVAR) : GT_UNIQUEINT(cptr)) typedef GtEndofTwobitencoding GtSfxcmp; #define PTR2INTSTOREPOS(TMPVAR,SUBBUCKETLEFT,IDX,POSASSIGNMENT)\ {\ unsigned long pos\ = gt_suffixsortspace_get(bsr->sssp,SUBBUCKETLEFT,IDX);\ POSASSIGNMENT;\ TMPVAR.referstartpos = pos;\ if (pos + depth < bsr->totallength)\ {\ pos += depth;\ (void) gt_encseq_extract2bitencwithtwobitencodingstoppos(&(TMPVAR),\ bsr->esr1,\ bsr->encseq,\ bsr->readmode,\ pos);\ } else\ {\ TMPVAR.tbe = 0;\ TMPVAR.unitsnotspecial = 0;\ }\ } #define PTR2INT(TMPVAR,SUBBUCKETLEFT,IDX)\ PTR2INTSTOREPOS(TMPVAR,SUBBUCKETLEFT,IDX,/* Nothing */) #define Sfxdocompare(COMMONUNITS,X,Y)\ ret##X##Y = gt_encseq_compare_pairof_twobitencodings(bsr->fwd,\ bsr->complement,\ COMMONUNITS,&X,&Y) #define GtSfxcmpEQUAL(X,Y) (ret##X##Y == 0) #define GtSfxcmpSMALLER(X,Y) (ret##X##Y < 0) #define GtSfxcmpGREATER(X,Y) (ret##X##Y > 0) typedef struct { unsigned long subbucketleft, width, depth; } GtMKVstack; typedef struct { GtEndofTwobitencoding etbe; unsigned long suftaboffset; } GtMedianinfo; typedef GtMedianinfo GtMedianElem; typedef struct { unsigned long suffix; unsigned char lcpwithpivot; char cmpresult; } GtCountingsortinfo; GT_DECLAREARRAYSTRUCT(GtMKVstack); typedef struct { const GtEncseq *encseq; GtEncseqReader *esr1, /* XXX be careful with threads */ *esr2; GtReadmode readmode; bool fwd, complement; unsigned long totallength; GtArrayGtMKVstack mkvauxstack; /* XXX be careful with threads */ GtLcpvalues *tableoflcpvalues; GtMedianinfo *medianinfospace; GtCountingsortinfo *countingsortinfo; const Sfxstrategy *sfxstrategy; unsigned int sortmaxdepth, prefixlength; GtBlindtrie *blindtrie; unsigned long leftlcpdist[GT_UNITSIN2BITENC], rightlcpdist[GT_UNITSIN2BITENC]; GtSuffixsortspace *sssp; GtProcessunsortedsuffixrange processunsortedsuffixrange; void *processunsortedsuffixrangeinfo; bool *equalwithprevious; size_t sizeofworkspace; unsigned long countinsertionsort, counttqsort, countshortreadsort, countradixsort, countcountingsort, countbltriesort, srs_maxremain; /* only relevant for short read sort */ unsigned long radixsortminwidth, radixsortmaxwidth, shortreadsort_maxwidth; GtShortreadsortworkinfo *srsw; const GtTwobitencoding *twobitencoding; GtRadixsortstringinfo *rsi; } GtBentsedgresources; #ifdef WITHCHECKSTARTPOINTER static unsigned int checkstartpointorder(const unsigned long *left, const unsigned long *right) { const unsigned long *ptr; bool ascending; gt_assert(left < right); gt_assert(*left != *(left+1)); ascending = (*left < *(left+1)) ? true : false; for (ptr = left+1; ptr < right; ptr++) { gt_assert(*ptr != *(ptr+1)); if (*ptr < *(ptr+1)) { if (!ascending) { return 0; } } else { if (*ptr > *(ptr+1)) { if (ascending) { return 0; } } } } return ascending ? 1U : 2U; } #endif static unsigned long medianof3cmpcharbychar(const GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long depth, unsigned long a, unsigned long b, unsigned long c) { unsigned long vala, valb, valc, cptr; GtUchar tmpavar, tmpbvar; CMPCHARBYCHARPTR2INT(vala,subbucketleft,tmpavar,a); CMPCHARBYCHARPTR2INT(valb,subbucketleft,tmpbvar,b); if (vala == valb) { return a; } CMPCHARBYCHARPTR2INT(valc,subbucketleft,tmpavar,c); if (vala == valc || valb == valc) { return c; } return vala < valb ? (valb < valc ? b : (vala < valc ? c : a)) : (valb > valc ? b : (vala < valc ? a : c)); } static unsigned long medianof3(const GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long depth, unsigned long a, unsigned long b, unsigned long c) { GtSfxcmp vala, valb, valc; GtCommonunits commonunits; int retvalavalb, retvalavalc, retvalbvalc; PTR2INT(vala,subbucketleft,a); PTR2INT(valb,subbucketleft,b); Sfxdocompare(&commonunits,vala,valb); if (GtSfxcmpEQUAL(vala,valb)) { return a; } PTR2INT(valc,subbucketleft,c); Sfxdocompare(&commonunits,vala,valc); if (GtSfxcmpEQUAL(vala,valc)) { return c; } Sfxdocompare(&commonunits,valb,valc); if (GtSfxcmpEQUAL(valb,valc)) { return c; } return GtSfxcmpSMALLER(vala,valb) ? (GtSfxcmpSMALLER(valb,valc) ? b : (GtSfxcmpSMALLER(vala,valc) ? c : a)) : (GtSfxcmpGREATER(valb,valc) ? b : (GtSfxcmpSMALLER(vala,valc) ? a : c)); } static void bs_insertionsort(GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long width, unsigned long offset) { unsigned long sval1, sval2, pm, pl, startpos1, startpos2, lcplen = 0; int retval; GtCommonunits commonunits; bsr->countinsertionsort++; for (pm = 1UL; pm < width; pm++) { for (pl = pm; pl > 0; pl--) { sval1 = gt_suffixsortspace_get(bsr->sssp,subbucketleft,pl-1); sval2 = gt_suffixsortspace_get(bsr->sssp,subbucketleft,pl); if (bsr->sfxstrategy->cmpcharbychar) { startpos1 = sval1 + offset; if (startpos1 < bsr->totallength) { gt_encseq_reader_reinit_with_readmode(bsr->esr1, bsr->encseq, bsr->readmode, startpos1); } startpos2 = sval2 + offset; if (startpos2 < bsr->totallength) { gt_encseq_reader_reinit_with_readmode(bsr->esr2, bsr->encseq, bsr->readmode, startpos2); } for (;;) { unsigned long ccs, cct; GtUchar tmp1, tmp2; ccs = DEREFSEQ(tmp1,startpos1,bsr->esr1); cct = DEREFSEQ(tmp2,startpos2,bsr->esr2); if (ccs != cct) { lcplen = startpos2 - sval2; retval = (ccs < cct) ? -1 : 1; break; } startpos1++; startpos2++; } } else { #ifdef SKDEBUG printf("%s[%lu,%lu] at offset %lu\n",__func__,sval1,sval2,offset); gt_encseq_showatstartpos(stdout, bsr->fwd, bsr->complement, bsr->encseq, sval1); gt_encseq_showatstartpos(stdout, bsr->fwd, bsr->complement, bsr->encseq, sval2); #endif retval = gt_encseq_compare_viatwobitencoding(&commonunits, bsr->encseq, bsr->encseq, bsr->readmode, bsr->esr1, bsr->esr2, sval1, sval2, offset, 0); lcplen = commonunits.finaldepth; } gt_assert(retval != 0); if (bsr->tableoflcpvalues != NULL) { if (pl < pm && retval > 0) { gt_lcptab_update(bsr->tableoflcpvalues,subbucketleft,pl+1, gt_lcptab_getvalue(bsr->tableoflcpvalues, subbucketleft,pl)); } gt_lcptab_update(bsr->tableoflcpvalues,subbucketleft,pl,lcplen); } if (retval < 0) { break; } gt_suffixsortspace_set(bsr->sssp,subbucketleft,pl-1,sval2); gt_suffixsortspace_set(bsr->sssp,subbucketleft,pl,sval1); } } } static void bs_insertionsortmaxdepth(GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long width, unsigned long offset, unsigned long sortmaxdepth) { unsigned long sval1, sval2, pm, pl, startpos1, startpos2, lcplen = 0, idx = 0; int retval; bool tempb; GtCommonunits commonunits; bsr->countinsertionsort++; for (pm = 1UL; pm < width; pm++) { for (pl = pm; pl > 0; pl--) { sval1 = gt_suffixsortspace_get(bsr->sssp,subbucketleft,pl-1); sval2 = gt_suffixsortspace_get(bsr->sssp,subbucketleft,pl); if (bsr->sfxstrategy->cmpcharbychar) { unsigned long endpos1, endpos2; endpos1 = sval1+sortmaxdepth; if (endpos1 > bsr->totallength) { endpos1 = bsr->totallength; } endpos2 = sval2+sortmaxdepth; if (endpos2 > bsr->totallength) { endpos2 = bsr->totallength; } startpos1 = sval1+offset; if (startpos1 < bsr->totallength) { gt_encseq_reader_reinit_with_readmode(bsr->esr1, bsr->encseq, bsr->readmode, startpos1); } startpos2 = sval2+offset; if (startpos2 < bsr->totallength) { gt_encseq_reader_reinit_with_readmode(bsr->esr2, bsr->encseq, bsr->readmode, startpos2); } for (;;) { unsigned long ccs, cct; GtUchar tmp1, tmp2; ccs = DEREFSTOPPOSSEQ(tmp1,startpos1,endpos1,bsr->esr1); cct = DEREFSTOPPOSSEQ(tmp2,startpos2,endpos2,bsr->esr2); lcplen = startpos2 - sval2; if (lcplen == sortmaxdepth) { retval = 0; break; } gt_assert(lcplen < sortmaxdepth); if (ccs != cct) { retval = (ccs < cct) ? -1 : 1; break; } startpos1++; startpos2++; } } else { gt_assert(offset < sortmaxdepth); retval = gt_encseq_compare_viatwobitencoding(&commonunits, bsr->encseq, bsr->encseq, bsr->readmode, bsr->esr1, bsr->esr2, sval1, sval2, offset, sortmaxdepth); lcplen = commonunits.finaldepth; gt_assert(lcplen <= sortmaxdepth); if (lcplen == sortmaxdepth) { gt_assert(retval == 0); } } #ifdef SKDEBUG printf("cmp %lu and %lu: retval = %d, lcplen = %lu\n", sval1, sval2, retval, (unsigned long) lcplen); #endif if (bsr->tableoflcpvalues != NULL) { if (pl < pm && retval > 0) { gt_lcptab_update(bsr->tableoflcpvalues,subbucketleft,pl+1, gt_lcptab_getvalue(bsr->tableoflcpvalues, subbucketleft,pl)); } gt_lcptab_update(bsr->tableoflcpvalues,subbucketleft,pl,lcplen); } if (retval < 0) { break; } idx = pl; if (retval == 0) { gt_assert(idx > 0); bsr->equalwithprevious[idx] = true; break; } gt_suffixsortspace_set(bsr->sssp,subbucketleft,pl-1,sval2); gt_suffixsortspace_set(bsr->sssp,subbucketleft,pl,sval1); tempb = bsr->equalwithprevious[idx-1]; bsr->equalwithprevious[idx-1] = bsr->equalwithprevious[idx]; bsr->equalwithprevious[idx] = tempb; } } if (idx > 0) { unsigned long equalsrangewidth = 0; unsigned long bucketleftidx = gt_suffixsortspace_bucketleftidx_get(bsr->sssp); #ifdef SKDEBUG printf("ordered suffix %lu\n",gt_suffixsortspace_get(bsr->sssp, subbucketleft,0)); #endif for (idx = 1UL; idx < width; idx++) { #ifdef SKDEBUG printf("ordered suffix %lu, equalwithprevious=%s\n", gt_suffixsortspace_get(bsr->sssp,subbucketleft,idx), bsr->equalwithprevious[idx] ? "true" : "false"); #endif if (bsr->equalwithprevious[idx]) { bsr->equalwithprevious[idx] = false; equalsrangewidth++; } else { if (equalsrangewidth > 0) { #ifdef SKDEBUG printf("process interval of width %lu\n", equalsrangewidth + 1); #endif if (bsr->processunsortedsuffixrange != NULL) { bsr->processunsortedsuffixrange(bsr->processunsortedsuffixrangeinfo, bucketleftidx + subbucketleft + idx - 1 - equalsrangewidth, equalsrangewidth + 1, sortmaxdepth); } equalsrangewidth = 0; } } } if (equalsrangewidth > 0) { #ifdef SKDEBUG printf("process interval of width %lu\n", equalsrangewidth + 1); #endif if (bsr->processunsortedsuffixrange != NULL) { bsr->processunsortedsuffixrange(bsr->processunsortedsuffixrangeinfo, bucketleftidx + subbucketleft + width - 1 - equalsrangewidth, equalsrangewidth + 1, sortmaxdepth); } } } } #define DOMEDIANCOMPARE(A,B)\ gt_encseq_compare_pairof_twobitencodings(fwd,complement,&commonunits,\ &((A)->etbe),&((B)->etbe)) #define GT_MedianElemGREATER(A,B) (DOMEDIANCOMPARE(A,B) > 0) #define GT_MedianElemSWAP(A,B) {\ register GtMedianElem tmp = *(A);\ *(A) = *(B);\ *(B) = tmp;\ } /* * This Quickselect routine is based on the algorithm described in * "Numerical recipes in C", Second Edition, * Cambridge University Press, 1992, Section 8.5, ISBN 0-521-43108-5 * This code by Nicolas Devillard - 1998. Public domain. */ static GtMedianElem *quickmedian (bool fwd,bool complement, GtMedianElem *arr,unsigned long width) { GtMedianElem *low, *high, *median, *middle, *ll, *hh; GtCommonunits commonunits; gt_assert(width > 0); low = arr; high = arr + width - 1; median = low + GT_DIV2(width); for (;;) { if (high <= low) /* One element only */ { return median; } if (high == low + 1) { /* Two elements only */ if (GT_MedianElemGREATER(low,high)) { GT_MedianElemSWAP (low, high); } return median; } /* Find median of low, middle and high items; swap into position low */ middle = low + GT_DIV2(high - low + 1); if (GT_MedianElemGREATER(middle,high)) { GT_MedianElemSWAP (middle, high); } if (GT_MedianElemGREATER(low,high)) { GT_MedianElemSWAP (low, high); } if (GT_MedianElemGREATER(middle,low)) { GT_MedianElemSWAP (middle, low); } /* Swap low item (now in position middle) into position (low+1) */ GT_MedianElemSWAP (middle, low + 1); /* Nibble from each end towards middle, swapping items when stuck */ ll = low + 1; hh = high; for (;;) { do { ll++; } while (GT_MedianElemGREATER(low,ll)); do { hh--; } while (GT_MedianElemGREATER(hh,low)); if (hh < ll) { break; } GT_MedianElemSWAP (ll, hh); } /* Swap middle item (in position low) back into correct position */ GT_MedianElemSWAP (low, hh); /* Re-set active partition */ if (hh <= median) { low = ll; } if (hh >= median) { high = hh - 1; } } } #ifdef WITHcheckmedian static void checkmedian(bool fwd, bool complement, const GtMedianinfo *median, const GtMedianinfo *space, unsigned long width) { unsigned long sum1, sum2, idx, smaller = 0, larger = 0, equal = 0, equalpart; unsigned int commonunits; int cmp; for (idx = 0; idx < width; idx++) { cmp = DOMEDIANCOMPARE(space + idx,median); if (cmp > 0) { larger++; } else { if (cmp < 0) { smaller++; } else { equal++; } } } if (smaller == larger) { return; } for (equalpart = 0; equalpart < equal; equalpart++) { sum1 = smaller + equalpart; sum2 = larger + (equal-1) - equalpart; if (sum1 < sum2) { if (sum1 + 1 == sum2) { return; } } else { if (sum1 > sum2) { if (sum1 == sum2 + 1) { return; } } else { return; } } } fprintf(stderr,"problem with equal=%lu,smaller=%lu,larger=%lu\n", equal,smaller,larger); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif static unsigned long realmedian(const GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long width, unsigned long depth) { GtMedianinfo *medianptr; unsigned long idx; for (idx = 0; idx < width; idx++) { bsr->medianinfospace[idx].suftaboffset = idx; PTR2INT(bsr->medianinfospace[idx].etbe,subbucketleft,idx); } medianptr = quickmedian(bsr->fwd,bsr->complement,bsr->medianinfospace,width); /* checkmedian(bsr->fwd,bsr->complement,medianptr,medianinfospace,width); */ gt_assert(medianptr != NULL); return medianptr->suftaboffset; } #define MINMEDIANOF9WIDTH 31UL static unsigned long cmpcharbychardelivermedian(const GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long width, unsigned long depth) { unsigned long pl = 0, pm = GT_DIV2(width), pr = width - 1; if (width >= MINMEDIANOF9WIDTH) { /* On big arrays, pseudomedian of 9 */ unsigned long offset, doubleoffset; offset = GT_DIV8(width); doubleoffset = GT_MULT2(offset); pl = medianof3cmpcharbychar(bsr,subbucketleft,depth,pl,pl+offset, pl+doubleoffset); pm = medianof3cmpcharbychar(bsr,subbucketleft,depth,pm-offset, pm,pm+offset); pr = medianof3cmpcharbychar(bsr,subbucketleft,depth, pr-doubleoffset,pr-offset, pr); } return medianof3cmpcharbychar(bsr,subbucketleft,depth,pl,pm,pr); } static unsigned long blockcmpdelivermedian(const GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long width, unsigned long depth, unsigned long maxwidthrealmedian) { unsigned long pl = 0, pm = GT_DIV2(width), pr = width - 1; if (width >= MINMEDIANOF9WIDTH) { if (width > maxwidthrealmedian) { /* On big arrays, pseudomedian of 9 */ unsigned long offset, doubleoffset; offset = GT_DIV8(width); doubleoffset = GT_MULT2(offset); pl = medianof3(bsr,subbucketleft,depth,pl,pl+offset, pl+doubleoffset); pm = medianof3(bsr,subbucketleft,depth,pm-offset,pm,pm+offset); pr = medianof3(bsr,subbucketleft,depth,pr-doubleoffset, pr-offset,pr); pm = medianof3(bsr,subbucketleft,depth,pl,pm,pr); } else /* width <= maxwidthrealmedian */ { pm = realmedian(bsr, subbucketleft,width, depth); } } else { pm = medianof3(bsr,subbucketleft,depth,pl,pm,pr); } return pm; } /* static void showcountingsortinfo(const GtCountingsortinfo *countingsortinfo, unsigned long idx) { printf("countingsortinfo[%lu]=(%lu,",idx, (unsigned long) countingsortinfo[idx].suffix); printf("%lu,",(unsigned long) countingsortinfo[idx].lcpwithpivot); printf("%d)\n",countingsortinfo[idx].cmpresult); } */ #undef CHECKFORWHOLELEAFS #ifdef CHECKFORWHOLELEAFS static bool gt_containswholeleaf(const GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long width) { unsigned long position, idx; for (idx = 0; idx < width; idx++) { position = gt_suffixsortspace_get(bsr->sssp,subbucketleft,idx); if (position == 0 || gt_encseq_position_is_separator(bsr->encseq, position - 1, bsr->readmode)) { return true; } } return false; } static unsigned long saved_intervals = 0, saved_width = 0; #endif static bool multistrategysort(GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long width, unsigned long depth, unsigned long sortmaxdepth) { gt_assert(width > 1UL); if (width <= bsr->sfxstrategy->maxinsertionsort) { if (sortmaxdepth == 0) { bs_insertionsort(bsr,subbucketleft,width,depth); } else { bs_insertionsortmaxdepth(bsr,subbucketleft,width,depth,sortmaxdepth); } return true; } if (width <= bsr->sfxstrategy->maxbltriesort) { gt_blindtrie_suffixsort(bsr->blindtrie, subbucketleft, bsr->tableoflcpvalues, width, depth, sortmaxdepth, bsr->processunsortedsuffixrangeinfo, bsr->processunsortedsuffixrange); bsr->countbltriesort++; return true; } return false; } static void subsort_bentleysedgewick(GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long width, unsigned long depth) { gt_assert(width > 1UL); if (width > 1UL) { #ifdef SKDEBUG if (depth > 0) { gt_checkifprefixesareidentical(__FILE__, __LINE__, bsr->encseq, bsr->readmode, bsr->sssp, subbucketleft, width, depth); } #endif #ifdef CHECKFORWHOLELEAFS if (bsr->sfxstrategy->spmopt > 0 && !gt_containswholeleaf(bsr,subbucketleft,width)) { saved_intervals++; saved_width += width; return; } #endif if (bsr->rsi != NULL && width >= bsr->radixsortminwidth && width <= bsr->radixsortmaxwidth) { gt_sfx_radixsort_str(bsr->rsi, depth, bsr->sortmaxdepth, subbucketleft, width, bsr->sssp, bsr->tableoflcpvalues); bsr->countradixsort++; return; } if (bsr->srsw != NULL && !bsr->sfxstrategy->noshortreadsort && width <= bsr->shortreadsort_maxwidth) { gt_shortreadsort_sssp_sort(bsr->srsw, bsr->encseq, bsr->srs_maxremain, bsr->readmode, bsr->esr1, bsr->sssp, subbucketleft, width, depth, (unsigned long) bsr->sortmaxdepth); if (bsr->sortmaxdepth > 0) { gt_shortreadsort_sssp_add_unsorted( bsr->srsw, gt_suffixsortspace_bucketleftidx_get(bsr->sssp), subbucketleft, width, (unsigned long) bsr->sortmaxdepth, bsr->processunsortedsuffixrange, bsr->processunsortedsuffixrangeinfo); } bsr->countshortreadsort++; return; } if (bsr->sortmaxdepth > 0 && depth >= (unsigned long) bsr->sortmaxdepth) { if (bsr->processunsortedsuffixrange != NULL) { bsr->processunsortedsuffixrange( bsr->processunsortedsuffixrangeinfo, gt_suffixsortspace_bucketleftidx_get(bsr->sssp) + subbucketleft, width,depth); } return; } if (multistrategysort(bsr,subbucketleft,width,depth, (unsigned long) bsr->sortmaxdepth)) { return; } /* push */ GT_CHECKARRAYSPACE(&bsr->mkvauxstack,GtMKVstack,1024); STACKTOP.subbucketleft = subbucketleft; STACKTOP.width = width; STACKTOP.depth = depth; bsr->mkvauxstack.nextfreeGtMKVstack++; } } static void sarrcountingsort(GtBentsedgresources *bsr, unsigned long subbucketleft, unsigned long width, const GtSfxcmp *pivotcmpbits, unsigned long pivotidx, unsigned long depth) { int cmp; unsigned int maxsmallerwithlcp = 0, maxlargerwithlcp = 0; GtCommonunits commonunits; GtEndofTwobitencoding etbecurrent; unsigned long idx, smaller = 0, larger = 0, insertindex, end, equaloffset, currentwidth; GtCountingsortinfo *csiptr; /* const bool cmpcharbychar = false; */ bsr->countcountingsort++; for (idx = 0; idx < width; idx++) { if (idx != pivotidx) { PTR2INTSTOREPOS(etbecurrent,subbucketleft,idx, bsr->countingsortinfo[idx].suffix = pos); cmp = gt_encseq_compare_pairof_twobitencodings(bsr->fwd, bsr->complement, &commonunits, &etbecurrent, pivotcmpbits); gt_assert(commonunits.common <= (unsigned int) GT_UNITSIN2BITENC); bsr->countingsortinfo[idx].lcpwithpivot = commonunits.common; if (cmp > 0) { gt_assert(commonunits.common < (unsigned int) GT_UNITSIN2BITENC); bsr->rightlcpdist[commonunits.common]++; if (maxlargerwithlcp < commonunits.common) { maxlargerwithlcp = commonunits.common; } bsr->countingsortinfo[idx].cmpresult = (char) 1; larger++; } else { if (cmp < 0) { gt_assert(commonunits.common < (unsigned int) GT_UNITSIN2BITENC); bsr->leftlcpdist[commonunits.common]++; if (maxsmallerwithlcp < commonunits.common) { maxsmallerwithlcp = commonunits.common; } bsr->countingsortinfo[idx].cmpresult = (char) -1; smaller++; } else { gt_assert(commonunits.common == (unsigned int) GT_UNITSIN2BITENC); bsr->countingsortinfo[idx].cmpresult = 0; } } } else { bsr->countingsortinfo[idx].suffix = gt_suffixsortspace_get(bsr->sssp,subbucketleft,idx); bsr->countingsortinfo[idx].lcpwithpivot = (unsigned char) GT_UNITSIN2BITENC; bsr->countingsortinfo[idx].cmpresult = (char) 0; } } for (idx = 1UL; idx <= (unsigned long) maxsmallerwithlcp; idx++) { bsr->leftlcpdist[idx] += bsr->leftlcpdist[idx-1]; } for (idx = 1UL; idx <= (unsigned long) maxlargerwithlcp; idx++) { bsr->rightlcpdist[idx] += bsr->rightlcpdist[idx-1]; } equaloffset = width - larger; for (csiptr = bsr->countingsortinfo + width -1; csiptr >= bsr->countingsortinfo; csiptr--) { switch (csiptr->cmpresult) { case -1: insertindex = --(bsr->leftlcpdist[csiptr->lcpwithpivot]); gt_suffixsortspace_set(bsr->sssp,subbucketleft,insertindex, csiptr->suffix); break; case 0: gt_suffixsortspace_set(bsr->sssp,subbucketleft,--equaloffset, csiptr->suffix); break; case 1: insertindex = --(bsr->rightlcpdist[csiptr->lcpwithpivot]); gt_suffixsortspace_set(bsr->sssp,subbucketleft, width - 1 - insertindex, csiptr->suffix); break; } } for (idx = 0; idx <= (unsigned long) maxsmallerwithlcp; idx++) { if (idx < (unsigned long) maxsmallerwithlcp) { end = bsr->leftlcpdist[idx+1]; } else { end = smaller; } if (bsr->leftlcpdist[idx] + 1 < end) /* at least two elements */ { currentwidth = end - bsr->leftlcpdist[idx]; subsort_bentleysedgewick(bsr, subbucketleft + bsr->leftlcpdist[idx], currentwidth, depth + idx); } if (bsr->tableoflcpvalues != NULL && bsr->leftlcpdist[idx] < end) { /* at least one element */ gt_lcptab_update(bsr->tableoflcpvalues,subbucketleft,end,depth + idx); } bsr->leftlcpdist[idx] = 0; } if (width - smaller - larger > 1UL) { currentwidth = width - smaller - larger; subsort_bentleysedgewick(bsr, subbucketleft + smaller, currentwidth, depth + GT_UNITSIN2BITENC); } for (idx = 0; idx <= (unsigned long) maxlargerwithlcp; idx++) { if (idx < (unsigned long) maxlargerwithlcp) { end = bsr->rightlcpdist[idx+1]; } else { end = larger; } if (bsr->rightlcpdist[idx] + 1 < end) /* at least two elements */ { currentwidth = end - bsr->rightlcpdist[idx]; subsort_bentleysedgewick(bsr, /* for largest idx use first bucket */ subbucketleft + width - end, currentwidth, depth + idx); } if (bsr->tableoflcpvalues != NULL && bsr->rightlcpdist[idx] < end) { /* at least one element */ gt_assert(width >= end); gt_lcptab_update(bsr->tableoflcpvalues,subbucketleft,width - end, depth + idx); } bsr->rightlcpdist[idx] = 0; } } static inline void vectorswap(GtSuffixsortspace *sssp, unsigned long subbucketleft1, unsigned long subbucketleft2, unsigned long width) { unsigned long idx, tmp; for (idx = 0; idx < width; idx++) { tmp = gt_suffixsortspace_get(sssp,subbucketleft1,idx); gt_suffixsortspace_set(sssp,subbucketleft1,idx, gt_suffixsortspace_get(sssp,subbucketleft2,idx)); gt_suffixsortspace_set(sssp,subbucketleft2,idx,tmp); } } static void gt_sort_bentleysedgewick(GtBentsedgresources *bsr, unsigned long width, unsigned long depth) { bsr->mkvauxstack.nextfreeGtMKVstack = 0; /*#ifndef NDEBUG gt_suffixsortspace_checkorder(bsr->sssp,0,width); #endif*/ subsort_bentleysedgewick(bsr, 0, width, depth); while (bsr->mkvauxstack.nextfreeGtMKVstack > 0) { unsigned long leftplusw, pa, pb, pc, pd, pm, bucketright, cptr, temp, pivotcmpcharbychar = 0, valcmpcharbychar, wtmp, subbucketleft; unsigned int smallermaxlcp, greatermaxlcp, smallerminlcp, greaterminlcp; GtSfxcmp pivotcmpbits, val; int retvalpivotcmpbits; GtUchar tmpvar; GtCommonunits commonunits; const int commonunitsequal = bsr->sfxstrategy->cmpcharbychar ? 1 : GT_UNITSIN2BITENC; /* pop */ bsr->mkvauxstack.nextfreeGtMKVstack--; subbucketleft = STACKTOP.subbucketleft; width = STACKTOP.width; depth = STACKTOP.depth; bucketright = width - 1; if (bsr->sfxstrategy->cmpcharbychar) { pm = cmpcharbychardelivermedian(bsr, subbucketleft, width, depth); BS_SWAPARRAY(temp, subbucketleft, 0, pm); CMPCHARBYCHARPTR2INT(pivotcmpcharbychar, subbucketleft,tmpvar,0); } else { pm = blockcmpdelivermedian(bsr, subbucketleft, width, depth, bsr->sfxstrategy->maxwidthrealmedian); if (width <= bsr->sfxstrategy->maxcountingsort && width >= MINMEDIANOF9WIDTH) { PTR2INT(pivotcmpbits,subbucketleft,pm); gt_assert(width >= bsr->sfxstrategy->maxbltriesort); sarrcountingsort(bsr, subbucketleft, width, &pivotcmpbits, pm, depth); /* new values for subbucketleft, bucketright, depth */ continue; } BS_SWAPARRAY(temp, subbucketleft, 0, pm); PTR2INT(pivotcmpbits,subbucketleft,0UL); } bsr->counttqsort++; /* now pivot element is at index subbucketleft */ /* all elements to be compared are between pb and pc */ /* pa is the position at which the next element smaller than the pivot element is inserted at */ /* pd is the position at which the next element greater than the pivot element is inserted at */ pa = pb = 1UL; pc = pd = bucketright; if (bsr->sfxstrategy->cmpcharbychar) { smallerminlcp = greaterminlcp = smallermaxlcp = greatermaxlcp = 0; for (;;) { while (pb <= pc) { CMPCHARBYCHARPTR2INT(valcmpcharbychar,subbucketleft,tmpvar,pb); if (valcmpcharbychar > pivotcmpcharbychar) { break; } if (valcmpcharbychar == pivotcmpcharbychar) { BS_SWAPARRAY(temp, subbucketleft, pa, pb); pa++; } pb++; } while (pb <= pc) { CMPCHARBYCHARPTR2INT(valcmpcharbychar,subbucketleft,tmpvar,pc); if (valcmpcharbychar < pivotcmpcharbychar) { /* stop for elements < pivot */ break; } if (valcmpcharbychar == pivotcmpcharbychar) { /* exchange equal element and element at index pd */ BS_SWAPARRAY(temp, subbucketleft, pc, pd); pd--; } pc--; } if (pb > pc) { /* no elements to compare to pivot */ break; } BS_SWAPARRAY(temp, subbucketleft, pb, pc); pb++; pc--; } } else { smallermaxlcp = greatermaxlcp = 0; smallerminlcp = greaterminlcp = (unsigned int) GT_UNITSIN2BITENC; for (;;) { /* look for elements identical or smaller than pivot from left */ while (pb <= pc) { PTR2INT(val,subbucketleft,pb); Sfxdocompare(&commonunits,val,pivotcmpbits); if (GtSfxcmpGREATER(val,pivotcmpbits)) { /* stop for elements val > pivot */ GT_BSR_UPDATELCP(greaterminlcp,greatermaxlcp,commonunits.common); break; } if (GtSfxcmpEQUAL(val,pivotcmpbits)) { /* exchange equal element and element at index pa */ BS_SWAPARRAY(temp, subbucketleft, pa, pb); pa++; } else /* smaller */ { GT_BSR_UPDATELCP(smallerminlcp,smallermaxlcp,commonunits.common); } pb++; } /* look for elements identical or greater than pivot from right */ while (pb <= pc) { PTR2INT(val,subbucketleft,pc); Sfxdocompare(&commonunits,val,pivotcmpbits); if (GtSfxcmpSMALLER(val,pivotcmpbits)) { /* stop for elements val < pivot */ GT_BSR_UPDATELCP(smallerminlcp,smallermaxlcp,commonunits.common); break; } if (GtSfxcmpEQUAL(val,pivotcmpbits)) { /* exchange equal element and element at index pa */ BS_SWAPARRAY(temp, subbucketleft, pc, pd); pd--; } else /* greater */ { GT_BSR_UPDATELCP(greaterminlcp,greatermaxlcp,commonunits.common); } pc--; } if (pb > pc) { /* interval is empty */ break; } BS_SWAPARRAY(temp, subbucketleft, pb, pc); pb++; pc--; } } gt_assert(pb >= pa); wtmp = MIN(pa,pb-pa); /* move w elements at the left to the middle */ gt_assert(pb >= wtmp && wtmp <= pb - wtmp); vectorswap(bsr->sssp, subbucketleft, subbucketleft+pb-wtmp, wtmp); gt_assert(pd >= pc); gt_assert(bucketright >= pd); wtmp = MIN(pd-pc, bucketright-pd); /* move w elements at the right to the middle */ gt_assert(bucketright + 1 >= wtmp && pb + wtmp <= bucketright+1-wtmp); vectorswap(bsr->sssp, subbucketleft+pb, subbucketleft+bucketright+1-wtmp, wtmp); /* all elements equal to the pivot are now in the middle namely in the range [subbucketleft + (pb-pa) and bucketright - (pd-pc)] */ /* hence we have to sort the elements in the intervals [subbucketleft..subbucketleft+(pb-pa)-1] and [bucketright-(pd-pc)+1..bucketright] */ gt_assert(pb >= pa); if ((wtmp = pb-pa) > 0) { leftplusw = wtmp; if (bsr->tableoflcpvalues != NULL) { /* left part has suffix with lcp up to length smallermaxlcp w.r.t. to the pivot. This lcp belongs to a suffix on the left which is at a minimum distance to the pivot and thus to an element in the final part of the left side. */ gt_lcptab_update(bsr->tableoflcpvalues,subbucketleft,leftplusw, depth + smallermaxlcp); } if (wtmp > 1UL) { subsort_bentleysedgewick(bsr, subbucketleft, wtmp, depth + smallerminlcp); } } else { leftplusw = 0; } cptr = gt_suffixsortspace_get(bsr->sssp,subbucketleft,leftplusw) + depth; if (ISNOTEND(cptr) && (wtmp = bucketright-(pd-pb)-leftplusw) > 1UL) { subsort_bentleysedgewick(bsr, subbucketleft + leftplusw, wtmp, depth+commonunitsequal); } gt_assert(pd >= pc); if ((wtmp = (unsigned long) (pd-pc)) > 0) { if (bsr->tableoflcpvalues != NULL) { /* right part has suffix with lcp up to length largermaxlcp w.r.t. to the pivot. This lcp belongs to a suffix on the right which is at a minimum distance to the pivot and thus to an element in the first part of the right side. */ gt_lcptab_update(bsr->tableoflcpvalues, subbucketleft,bucketright - wtmp + 1, depth + greatermaxlcp); } if (wtmp > 1UL) { subsort_bentleysedgewick(bsr, subbucketleft + bucketright - wtmp + 1, wtmp, depth + greaterminlcp); } } } } static void bentsedgresources_init(GtBentsedgresources *bsr, GtSuffixsortspace *suffixsortspace, const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, unsigned int sortmaxdepth, const Sfxstrategy *sfxstrategy, bool withlcps) { unsigned long idx; bsr->readmode = readmode; bsr->totallength = gt_encseq_total_length(encseq); bsr->sfxstrategy = sfxstrategy; bsr->sssp = suffixsortspace; bsr->rsi = NULL; gt_suffixsortspace_bucketleftidx_set(bsr->sssp,0); bsr->encseq = encseq; bsr->fwd = GT_ISDIRREVERSE(bsr->readmode) ? false : true; bsr->complement = GT_ISDIRCOMPLEMENT(bsr->readmode) ? true : false; bsr->tableoflcpvalues = NULL; bsr->prefixlength = prefixlength; bsr->esr1 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); bsr->esr2 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); bsr->radixsortminwidth = gt_radixsort_str_minwidth(); bsr->radixsortmaxwidth = 0; if (gt_encseq_accesstype_get(bsr->encseq) == GT_ACCESS_TYPE_EQUALLENGTH) { bsr->twobitencoding = gt_encseq_twobitencoding_export(bsr->encseq); } else { bsr->twobitencoding = NULL; } if (sortmaxdepth > 0) { if (sortmaxdepth > prefixlength) { bsr->srs_maxremain = sortmaxdepth - (unsigned long) prefixlength; } else { bsr->srs_maxremain = 0; } } else { if (gt_encseq_lengthoflongestnonspecial(encseq) > (unsigned long) prefixlength) { bsr->srs_maxremain = gt_encseq_lengthoflongestnonspecial(encseq) - prefixlength; } else { bsr->srs_maxremain = 0; } } bsr->sizeofworkspace = gt_size_of_sort_workspace (sfxstrategy); bsr->shortreadsort_maxwidth = gt_shortreadsort_maxwidth(false, bsr->srs_maxremain, bsr->sizeofworkspace); GT_INITARRAY(&bsr->mkvauxstack,GtMKVstack); bsr->countingsortinfo = NULL; bsr->medianinfospace = NULL; bsr->blindtrie = NULL; bsr->equalwithprevious = NULL; bsr->srsw = NULL; if (!sfxstrategy->cmpcharbychar) { const bool withmediumsizelcps = (sortmaxdepth > 0 && !withlcps) ? true : false; if (sortmaxdepth == 0 || gt_encseq_has_twobitencoding_stoppos_support(encseq)) { bsr->srsw = gt_shortreadsort_new(0,bsr->srs_maxremain,readmode,false, withmediumsizelcps); } for (idx = 0; idx < (unsigned long) GT_UNITSIN2BITENC; idx++) { bsr->leftlcpdist[idx] = bsr->rightlcpdist[idx] = 0; } bsr->countingsortinfo = gt_malloc(sizeof (*bsr->countingsortinfo) * sfxstrategy->maxcountingsort); if (sfxstrategy->maxwidthrealmedian >= MINMEDIANOF9WIDTH) { bsr->medianinfospace = gt_malloc(sizeof (*bsr->medianinfospace) * sfxstrategy->maxwidthrealmedian); } else { bsr->medianinfospace = NULL; } } bsr->blindtrie = gt_blindtrie_new(bsr->sssp, sfxstrategy->maxbltriesort, 0, /* the nodenumberincrement */ encseq, sfxstrategy->cmpcharbychar, bsr->esr1, bsr->esr2, readmode); if (sortmaxdepth > 0 && bsr->sfxstrategy->maxinsertionsort >= 2UL) { bsr->equalwithprevious = gt_malloc(sizeof (*bsr->equalwithprevious) * bsr->sfxstrategy->maxinsertionsort); for (idx=0; idx < bsr->sfxstrategy->maxinsertionsort; idx++) { bsr->equalwithprevious[idx] = false; } } bsr->sortmaxdepth = sortmaxdepth; bsr->processunsortedsuffixrangeinfo = NULL; bsr->processunsortedsuffixrange = NULL; bsr->countinsertionsort = 0; bsr->counttqsort = 0; bsr->countcountingsort = 0; bsr->countbltriesort = 0; bsr->countshortreadsort = 0; bsr->countradixsort = 0; } size_t gt_size_of_sort_workspace (const Sfxstrategy *sfxstrategy) { size_t sumsize = 0; if (!sfxstrategy->cmpcharbychar) { sumsize += sizeof (GtCountingsortinfo) * sfxstrategy->maxcountingsort; if (sfxstrategy->maxwidthrealmedian >= MINMEDIANOF9WIDTH) { sumsize += sizeof (GtMedianinfo) * sfxstrategy->maxwidthrealmedian; } } sumsize += gt_blindtrie_size(sfxstrategy->maxbltriesort); return sumsize; } static void bentsedgresources_delete(GtBentsedgresources *bsr, GtLogger *logger) { gt_free(bsr->countingsortinfo); bsr->countingsortinfo = NULL; gt_free(bsr->medianinfospace); bsr->medianinfospace = NULL; gt_shortreadsort_delete(bsr->srsw); bsr->srsw = NULL; gt_blindtrie_delete(bsr->blindtrie); gt_encseq_reader_delete(bsr->esr1); gt_encseq_reader_delete(bsr->esr2); gt_free(bsr->equalwithprevious); GT_FREEARRAY(&bsr->mkvauxstack,GtMKVstack); gt_radixsort_str_delete(bsr->rsi); gt_logger_log(logger,"countinsertionsort=%lu",bsr->countinsertionsort); gt_logger_log(logger,"countbltriesort=%lu",bsr->countbltriesort); gt_logger_log(logger,"countcountingsort=%lu",bsr->countcountingsort); gt_logger_log(logger,"countshortreadsort=%lu",bsr->countshortreadsort); gt_logger_log(logger,"countradixsort=%lu",bsr->countradixsort); gt_logger_log(logger,"counttqsort=%lu",bsr->counttqsort); } /* The following function is called in sfx-suffixer.c and sorts all buckets by different suffix comparison methods without the help of other sorting information. GtSuffixsortspace contains the sortspace which is accessed by some negative offset. */ void gt_sortallbuckets(GtSuffixsortspace *suffixsortspace, unsigned long numberofsuffixes, GtBucketspec2 *bucketspec2, const GtEncseq *encseq, GtReadmode readmode, GtCodetype mincode, GtCodetype maxcode, GtBcktab *bcktab, unsigned int numofchars, unsigned int prefixlength, GtOutlcpinfo *outlcpinfo, unsigned int sortmaxdepth, const Sfxstrategy *sfxstrategy, GtProcessunsortedsuffixrange processunsortedsuffixrange, void *processunsortedsuffixrangeinfo, unsigned long long *bucketiterstep, GtLogger *logger) { GtCodetype code; unsigned int rightchar = (unsigned int) (mincode % numofchars); GtBucketspecification bucketspec; GtBentsedgresources bsr; bentsedgresources_init(&bsr, suffixsortspace, encseq, readmode, prefixlength, sortmaxdepth, sfxstrategy, outlcpinfo != NULL ? true : false); gt_bcktab_determinemaxsize(bcktab, mincode, maxcode, numberofsuffixes); if (bsr.sfxstrategy->withradixsort && gt_encseq_accesstype_get(bsr.encseq) == GT_ACCESS_TYPE_EQUALLENGTH && bsr.readmode == GT_READMODE_FORWARD) { bsr.rsi = gt_radixsort_str_new(bsr.twobitencoding, gt_encseq_is_mirrored(encseq) ? GT_DIV2(bsr.totallength - 1) : bsr.totallength, 1 + gt_encseq_equallength(bsr.encseq), gt_bcktab_nonspecialsmaxsize(bcktab)); bsr.radixsortmaxwidth = gt_radixsort_str_maxwidth(bsr.rsi); } if (outlcpinfo != NULL) { bsr.tableoflcpvalues = gt_Outlcpinfo_resizereservoir(outlcpinfo,bcktab); if (bsr.srsw != NULL) { gt_shortreadsort_assigntableoflcpvalues(bsr.srsw,bsr.tableoflcpvalues); } } bsr.processunsortedsuffixrangeinfo = processunsortedsuffixrangeinfo; bsr.processunsortedsuffixrange = processunsortedsuffixrange; for (code = mincode; code <= maxcode; code++) { if (bucketspec2 != NULL) { if (gt_copysort_checkhardwork(bucketspec2,code)) { rightchar = (unsigned int) (code % numofchars); } else { continue; } } (*bucketiterstep)++; rightchar = gt_bcktab_calcboundsparts(&bucketspec, bcktab, code, maxcode, numberofsuffixes, rightchar); gt_Outlcpinfo_prebucket(outlcpinfo,code,bucketspec.left); if (bucketspec.nonspecialsinbucket > 0) { if (bucketspec.nonspecialsinbucket > 1UL) { gt_suffixsortspace_bucketleftidx_set(bsr.sssp,bucketspec.left); gt_sort_bentleysedgewick(&bsr,bucketspec.nonspecialsinbucket, (unsigned long) prefixlength); gt_suffixsortspace_bucketleftidx_set(bsr.sssp,0); } gt_Outlcpinfo_nonspecialsbucket(outlcpinfo, prefixlength, bsr.sssp, bsr.tableoflcpvalues, &bucketspec, code); } gt_Outlcpinfo_postbucket(outlcpinfo, prefixlength, bsr.sssp, bcktab, &bucketspec, code); } #ifdef CHECKFORWHOLELEAFS printf("saved_intervals=%lu,saved_width=%lu (%.2f)\n", saved_intervals,saved_width,100.0 * (double) saved_width/numberofsuffixes); saved_intervals = 0; saved_width = 0; #endif bentsedgresources_delete(&bsr, logger); } void gt_sortallsuffixesfromstart(GtSuffixsortspace *suffixsortspace, unsigned long numberofsuffixes, const GtEncseq *encseq, GtReadmode readmode, GtOutlcpinfo *outlcpinfo, unsigned int sortmaxdepth, const Sfxstrategy *sfxstrategy, GtProcessunsortedsuffixrange processunsortedsuffixrange, void *processunsortedsuffixrangeinfo, GtLogger *logger) { GtBentsedgresources bsr; if (numberofsuffixes > 1UL) { bentsedgresources_init(&bsr, suffixsortspace, encseq, readmode, 0, sortmaxdepth, sfxstrategy, outlcpinfo != NULL ? true : false); if (outlcpinfo != NULL) { bsr.tableoflcpvalues = gt_Outlcpinfo_resizereservoir(outlcpinfo,NULL); if (bsr.srsw != NULL) { gt_shortreadsort_assigntableoflcpvalues(bsr.srsw,bsr.tableoflcpvalues); } } bsr.processunsortedsuffixrangeinfo = processunsortedsuffixrangeinfo; bsr.processunsortedsuffixrange = processunsortedsuffixrange; gt_suffixsortspace_bucketleftidx_set(bsr.sssp,0); gt_sort_bentleysedgewick(&bsr,numberofsuffixes,0); gt_suffixsortspace_bucketleftidx_set(bsr.sssp,0); bentsedgresources_delete(&bsr, logger); } } genometools-1.5.1/src/match/sfx-bentsedg.h000066400000000000000000000060621211610345200204750ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_BENTSEDG_H #define SFX_BENTSEDG_H #include #include "core/error_api.h" #include "core/str.h" #include "core/codetype.h" #include "core/logger_api.h" #include "core/encseq.h" #include "bcktab.h" #include "sfx-bltrie.h" #include "sfx-strategy.h" #include "sfx-copysort.h" #include "sfx-lcpvalues.h" #include "sfx-suffixgetset.h" typedef void (*GtCompletelargelcpvalues) (void *, const GtSuffixsortspace *, GtLcpvalues *, unsigned long, unsigned long); void gt_sortallbuckets(GtSuffixsortspace *suffixsortspace, unsigned long numberofsuffixes, GtBucketspec2 *bucketspec2, const GtEncseq *encseq, GtReadmode readmode, GtCodetype mincode, GtCodetype maxcode, GtBcktab *bcktab, unsigned int numofchars, unsigned int prefixlength, GtOutlcpinfo *outlcpinfo, unsigned int sortmaxdepth, const Sfxstrategy *sfxstrategy, GtProcessunsortedsuffixrange processunsortedsuffixrange, void *processunsortedsuffixrangeinfo, unsigned long long *bucketiterstep, GtLogger *logger); void gt_sortallsuffixesfromstart(GtSuffixsortspace *suffixsortspace, unsigned long numberofsuffixes, const GtEncseq *encseq, GtReadmode readmode, GtOutlcpinfo *outlcpinfo, unsigned int sortmaxdepth, const Sfxstrategy *sfxstrategy, GtProcessunsortedsuffixrange processunsortedsuffixrange, void *processunsortedsuffixrangeinfo, GtLogger *logger); size_t gt_size_of_sort_workspace (const Sfxstrategy *sfxstrategy); #endif genometools-1.5.1/src/match/sfx-bltrie.c000066400000000000000000001355031211610345200201610ustar00rootroot00000000000000/* Copyright (c) 2007/2010 Stefan Kurtz Copyright (c) 2007/2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/unused_api.h" #include "core/arraydef.h" #include "core/divmodmul.h" #include "core/minmax.h" #include "core/encseq.h" #include "core/arraydef.h" #include "lcpoverflow.h" #include "sfx-bltrie.h" #include "sfx-suffixgetset.h" #define GT_BLINDTRIECHAR_ISSPECIAL(X) ((X) >= (GtBlindtriesymbol) WILDCARD) #define GT_BLINDTRIE_REFNULL 0 #define GT_BLINDTRIE_BITSFORRIGHTSIBLING 31 #define GT_BLINDTRIE_ROOTIDX 0 typedef unsigned long GtBlindtriesymbol; typedef unsigned int GtBlindtriesnodeptr; /* For clarity, the two unions either1 and either2 should have been combined into one union with a struct for internal nodes and struct for leaves, like the following: union { struct { unsigned long depth; GtBlindtriesnodeptr firstchild; } internalinfo; struct { unsigned long nodestartpos; unsigned int nodestartstopposoffset; } leafinfo; } either; But as unions are also aligned to word boundaries, this means for -m64 compilations this union requires 16 bytes, which would result in 32 bytes for a GtBlindtrienode. Instead, in our solution either1 requires 8 bytes and either2 requires 4 bytes which leads to 24 bytes for the entire GtBlindtrienode. */ typedef struct { GtBlindtriesymbol firstchar; union { unsigned long depth; /* for internal nodes */ unsigned long nodestartpos; /* for leaves */ } either1; union { GtBlindtriesnodeptr firstchild; /* for internal nodes */ unsigned int nodestartstopposoffset; /* for leaves */ } either2; unsigned int rightsibling:GT_BLINDTRIE_BITSFORRIGHTSIBLING; unsigned int isleafbit:1; } GtBlindtrienode; GT_DECLAREARRAYSTRUCT(GtBlindtriesnodeptr); struct GtBlindtrie { /* The following belongs to the state and is initialized by blindtrie_new */ GtBlindtriesnodeptr allocatedBlindtrienode, nextfreeBlindtrienode; GtBlindtrienode *spaceBlindtrienode; GtArrayGtBlindtriesnodeptr stack; GtArrayGtUlong overflowsuffixes; /* The following needs to be supplied for each insertion */ const GtEncseq *encseq; GtEncseqReader *esr1, *esr2; GtReadmode readmode; unsigned long totallength, logicaltotallength, sortmaxdepthminusoffset; bool cmpcharbychar, hasmirror, has_twobitencoding_stoppos_support; unsigned int nodenumberincrement; GtViatwobitkeyvalues *vtk1, *vtk2; GtSuffixsortspace *sssp; }; static bool blindtrie_isleaf(const GtBlindtrie *blindtrie, const GtBlindtriesnodeptr node) { gt_assert(node < blindtrie->nextfreeBlindtrienode); return blindtrie->spaceBlindtrienode[node].isleafbit ? true : false; } static void blindtrie_setleaf(GtBlindtrie *blindtrie, const GtBlindtriesnodeptr node,bool isleaf) { gt_assert(node < blindtrie->nextfreeBlindtrienode); blindtrie->spaceBlindtrienode[node].isleafbit = isleaf ? 1U : 0; } static unsigned long blindtrie_getdepth(const GtBlindtrie *blindtrie, const GtBlindtriesnodeptr node) { gt_assert(!blindtrie_isleaf(blindtrie,node)); return blindtrie->spaceBlindtrienode[node].either1.depth; } static void blindtrie_setdepth(const GtBlindtrie *blindtrie, const GtBlindtriesnodeptr node, unsigned long depth) { gt_assert(!blindtrie_isleaf(blindtrie,node)); blindtrie->spaceBlindtrienode[node].either1.depth = depth; } static GtBlindtriesymbol blindtrie_firstchar_get(const GtBlindtrie *blindtrie, const GtBlindtriesnodeptr node) { gt_assert(node < blindtrie->nextfreeBlindtrienode); return blindtrie->spaceBlindtrienode[node].firstchar; } static void blindtrie_firstchar_set(GtBlindtrie *blindtrie, GtBlindtriesnodeptr node,bool isleaf, GtBlindtriesymbol firstchar) { blindtrie_setleaf(blindtrie,node,isleaf); gt_assert(isleaf || !GT_ISUNIQUEINT(firstchar)); blindtrie->spaceBlindtrienode[node].firstchar = firstchar; } static GtBlindtriesnodeptr blindtrie_rightsibling_get( const GtBlindtrie *blindtrie, const GtBlindtriesnodeptr node) { gt_assert(node < blindtrie->nextfreeBlindtrienode); return blindtrie->spaceBlindtrienode[node].rightsibling; } static void blindtrie_rightsibling_set(const GtBlindtrie *blindtrie, GtBlindtriesnodeptr node, GtBlindtriesnodeptr rightsibling) { gt_assert(node < blindtrie->nextfreeBlindtrienode); blindtrie->spaceBlindtrienode[node].rightsibling = rightsibling; } static GtBlindtriesnodeptr blindtrie_firstchild_get( const GtBlindtrie *blindtrie, const GtBlindtriesnodeptr node) { gt_assert(!blindtrie_isleaf(blindtrie,node)); return blindtrie->spaceBlindtrienode[node].either2.firstchild; } static void blindtrie_firstchild_set(const GtBlindtrie *blindtrie, GtBlindtriesnodeptr node, GtBlindtriesnodeptr firstchild) { gt_assert(!blindtrie_isleaf(blindtrie,node)); blindtrie->spaceBlindtrienode[node].either2.firstchild = firstchild; } #define GT_TWOBITENCODINGSTARTSTOPOFFSETUNDEF UINT_MAX #define GT_BLTRIESTOPPOSUNDEF(BLTRIE) ((BLTRIE)->totallength) static void blindtrie_leafinfo_set(GtBlindtrie *blindtrie, GtBlindtriesnodeptr node, unsigned long currentstartpos, unsigned long currenttwobitencodingstoppos) { GtBlindtrienode *leafptr = blindtrie->spaceBlindtrienode + node; gt_assert(node < blindtrie->nextfreeBlindtrienode); leafptr->either1.nodestartpos = currentstartpos; if (currenttwobitencodingstoppos != GT_BLTRIESTOPPOSUNDEF(blindtrie)) { if (GT_ISDIRREVERSE(blindtrie->readmode)) { gt_assert(GT_REVERSEPOS(blindtrie->totallength,currentstartpos) + 1 >= currenttwobitencodingstoppos); if (currenttwobitencodingstoppos == 0) { leafptr->either2.nodestartstopposoffset = 0; } else { unsigned long tmp = GT_REVERSEPOS(blindtrie->totallength, currentstartpos) + 2 - currenttwobitencodingstoppos; gt_assert(tmp > 0 && tmp < (unsigned long) GT_TWOBITENCODINGSTARTSTOPOFFSETUNDEF); leafptr->either2.nodestartstopposoffset = (unsigned int) tmp; } } else { gt_assert(currentstartpos <= currenttwobitencodingstoppos); if (currenttwobitencodingstoppos == blindtrie->totallength) { leafptr->either2.nodestartstopposoffset = 0; } else { unsigned long tmp = currenttwobitencodingstoppos - currentstartpos + 1; gt_assert(tmp > 0 && tmp < (unsigned long) GT_TWOBITENCODINGSTARTSTOPOFFSETUNDEF); leafptr->either2.nodestartstopposoffset = (unsigned int) tmp; } } } else { leafptr->either2.nodestartstopposoffset = GT_TWOBITENCODINGSTARTSTOPOFFSETUNDEF; } } static unsigned long blindtrie_nodestartpos_get(const GtBlindtrie *blindtrie, GtBlindtriesnodeptr node) { gt_assert(blindtrie_isleaf(blindtrie,node)); return blindtrie->spaceBlindtrienode[node].either1.nodestartpos; } static unsigned long blindtrie_nodestoppos_get(const GtBlindtrie *blindtrie, GtBlindtriesnodeptr node) { const GtBlindtrienode *leafptr = blindtrie->spaceBlindtrienode + node; gt_assert(blindtrie_isleaf(blindtrie,node)); if (leafptr->either2.nodestartstopposoffset != GT_TWOBITENCODINGSTARTSTOPOFFSETUNDEF) { unsigned long nodestoppos; if (GT_ISDIRREVERSE(blindtrie->readmode)) { if (leafptr->either2.nodestartstopposoffset == 0) { nodestoppos = 0; } else { gt_assert(GT_REVERSEPOS(blindtrie->totallength, leafptr->either1.nodestartpos)+2 >= (unsigned long) leafptr->either2.nodestartstopposoffset); nodestoppos = GT_REVERSEPOS(blindtrie->totallength,leafptr->either1.nodestartpos) + 2 - (unsigned long) leafptr->either2.nodestartstopposoffset; } } else { if (leafptr->either2.nodestartstopposoffset == 0) { nodestoppos = blindtrie->totallength; } else { nodestoppos = leafptr->either1.nodestartpos + (unsigned long) leafptr->either2.nodestartstopposoffset - 1; } } return nodestoppos; } return GT_BLTRIESTOPPOSUNDEF(blindtrie); } static void blindtrie_copy_either(GtBlindtrie *blindtrie, GtBlindtriesnodeptr destnode, GtBlindtriesnodeptr srcnode) { gt_assert(destnode < blindtrie->nextfreeBlindtrienode && srcnode < blindtrie->nextfreeBlindtrienode); blindtrie->spaceBlindtrienode[destnode].either1 = blindtrie->spaceBlindtrienode[srcnode].either1; blindtrie->spaceBlindtrienode[destnode].either2 = blindtrie->spaceBlindtrienode[srcnode].either2; } static bool blindtrie_isleftofboundary(const GtBlindtrie *blindtrie, unsigned long currentstartpos, unsigned long add) { unsigned long endpos; if (blindtrie->sortmaxdepthminusoffset == 0) { endpos = blindtrie->totallength; } else { endpos = currentstartpos + blindtrie->sortmaxdepthminusoffset; if (endpos >= blindtrie->totallength) { endpos = blindtrie->totallength; } } return (currentstartpos + add < endpos) ? true : false; } static GtBlindtriesnodeptr blindtrie_newnode(GtBlindtrie *blindtrie) { if (blindtrie->nextfreeBlindtrienode >= blindtrie->allocatedBlindtrienode) { gt_assert(blindtrie->nodenumberincrement >= 1U); gt_assert(blindtrie->allocatedBlindtrienode + blindtrie->nodenumberincrement <= (1U << GT_BLINDTRIE_BITSFORRIGHTSIBLING) - 1); blindtrie->allocatedBlindtrienode += blindtrie->nodenumberincrement; blindtrie->spaceBlindtrienode = gt_realloc(blindtrie->spaceBlindtrienode, sizeof (*blindtrie->spaceBlindtrienode) * blindtrie->allocatedBlindtrienode); } return blindtrie->nextfreeBlindtrienode++; } static GtBlindtriesnodeptr blindtrie_newleaf(GtBlindtrie *blindtrie, unsigned long currentstartpos, unsigned long currenttwobitencodingstoppos, GtBlindtriesymbol firstchar, GtBlindtriesnodeptr rightsibling) { GtBlindtriesnodeptr newleaf; newleaf = blindtrie_newnode(blindtrie); blindtrie_firstchar_set(blindtrie,newleaf,true,firstchar); blindtrie_leafinfo_set(blindtrie, newleaf, currentstartpos, currenttwobitencodingstoppos); blindtrie_rightsibling_set(blindtrie,newleaf,rightsibling); return newleaf; } static unsigned long blindtrie_currenttwobitencodingstoppos_get( const GtBlindtrie *blindtrie, unsigned long currentstartpos) { if (!blindtrie->cmpcharbychar && blindtrie->has_twobitencoding_stoppos_support) { gt_encseq_reader_reinit_with_readmode(blindtrie->esr1,blindtrie->encseq, blindtrie->readmode, currentstartpos); return gt_getnexttwobitencodingstoppos(GT_ISDIRREVERSE(blindtrie->readmode) ? false : true,blindtrie->esr1); } return GT_BLTRIESTOPPOSUNDEF(blindtrie); } static void blindtrie_makeroot(GtBlindtrie *blindtrie, unsigned long currentstartpos, unsigned long currenttwobitencodingstoppos) { GtBlindtriesymbol firstchar; gt_assert(blindtrie->nextfreeBlindtrienode == GT_BLINDTRIE_ROOTIDX); (void) blindtrie_newnode(blindtrie); blindtrie_firstchar_set(blindtrie,GT_BLINDTRIE_ROOTIDX, false,0); /* firstchar of root will never be used */ blindtrie_setdepth(blindtrie,GT_BLINDTRIE_ROOTIDX,0); /*blindtrie_rightsibling_set(blindtrie,root,GT_BLINDTRIE_REFNULL); */ if (blindtrie_isleftofboundary(blindtrie,currentstartpos,0)) { /* Random access */ firstchar = (GtBlindtriesymbol) gt_encseq_get_encoded_char(blindtrie->encseq, currentstartpos, blindtrie->readmode); if (GT_BLINDTRIECHAR_ISSPECIAL(firstchar)) { firstchar = GT_UNIQUEINT(currentstartpos); } if (currenttwobitencodingstoppos == ULONG_MAX) { currenttwobitencodingstoppos = blindtrie_currenttwobitencodingstoppos_get(blindtrie,currentstartpos); } } else { firstchar = GT_UNIQUEINT(currentstartpos); currenttwobitencodingstoppos = GT_BLTRIESTOPPOSUNDEF(blindtrie); } blindtrie_firstchild_set(blindtrie,GT_BLINDTRIE_ROOTIDX, blindtrie_newleaf(blindtrie,currentstartpos, currenttwobitencodingstoppos, firstchar,GT_BLINDTRIE_REFNULL)); } static GtBlindtriesnodeptr blindtrie_extractleafnode(GtBlindtrie *blindtrie, GtBlindtriesnodeptr head) { gt_assert(!blindtrie_isleaf(blindtrie,head)); do { head = blindtrie_firstchild_get(blindtrie,head); } while (!blindtrie_isleaf(blindtrie,head)); return head; } static int blindtrie_comparecharacters(GtBlindtriesymbol oldchar, GtBlindtriesymbol newchar) { return (oldchar > newchar) ? 1 : ((oldchar < newchar) ? -1 : 0); } static GtBlindtriesnodeptr blindtrie_findsucc(const GtBlindtrie *blindtrie, GtBlindtriesnodeptr node, GtBlindtriesymbol newchar) { int retval; for (;;) { retval = blindtrie_comparecharacters( blindtrie_firstchar_get(blindtrie,node), newchar); if (retval == 0) { /* found branch corresponding to newchar */ return node; } if (retval == 1) { /* found sibling which is already greater than newchar */ return GT_BLINDTRIE_REFNULL; } node = blindtrie_rightsibling_get(blindtrie,node); if (node == GT_BLINDTRIE_REFNULL) /* no more siblings: mismatch */ { return GT_BLINDTRIE_REFNULL; } } } static GtBlindtriesnodeptr blindtrie_findcompanion( GtBlindtrie *blindtrie, unsigned long currentstartpos, unsigned long currenttwobitencodingstoppos) { GtBlindtriesymbol newchar; GtBlindtriesnodeptr head, succ; unsigned long headdepth; blindtrie->stack.nextfreeGtBlindtriesnodeptr = 0; head = GT_BLINDTRIE_ROOTIDX; while (!blindtrie_isleaf(blindtrie,head)) { GT_STOREINARRAY (&blindtrie->stack, GtBlindtriesnodeptr, 128, head); headdepth = blindtrie_getdepth(blindtrie,head); if (blindtrie_isleftofboundary(blindtrie,currentstartpos,headdepth)) { if (!blindtrie->cmpcharbychar && blindtrie->has_twobitencoding_stoppos_support) { if ((GT_ISDIRREVERSE(blindtrie->readmode) && GT_REVERSEPOS(blindtrie->totallength,currentstartpos+headdepth) >= currenttwobitencodingstoppos) || (!GT_ISDIRREVERSE(blindtrie->readmode) && currentstartpos + headdepth < currenttwobitencodingstoppos)) { newchar = (GtBlindtriesymbol) gt_encseq_get_encoded_char_nospecial( blindtrie->encseq, currentstartpos + headdepth, blindtrie->readmode); } else { newchar = GT_UNIQUEINT(currentstartpos + headdepth); } } else { newchar = (GtBlindtriesymbol) gt_encseq_get_encoded_char(blindtrie->encseq, currentstartpos + headdepth, blindtrie->readmode); if (GT_BLINDTRIECHAR_ISSPECIAL(newchar)) { newchar = GT_UNIQUEINT(currentstartpos + headdepth); } } } else { newchar = GT_UNIQUEINT(currentstartpos + headdepth); } if (GT_ISUNIQUEINT(newchar)) { return blindtrie_extractleafnode(blindtrie,head); } succ = blindtrie_findsucc(blindtrie, blindtrie_firstchild_get(blindtrie,head), newchar); if (succ == GT_BLINDTRIE_REFNULL) { return blindtrie_extractleafnode(blindtrie,head); } head = succ; } GT_STOREINARRAY (&blindtrie->stack, GtBlindtriesnodeptr, 128, head); return head; } static void blindtrie_insertatsplitnode(GtBlindtrie *blindtrie, GtBlindtriesnodeptr oldnode, GtBlindtriesymbol mm_oldsuffix, unsigned long lcp, GtBlindtriesymbol mm_newsuffix, unsigned long currentstartpos, unsigned long currenttwobitencodingstoppos) { GtBlindtriesnodeptr newleaf, newnode, previousnode, currentnode; gt_assert(GT_ISUNIQUEINT(mm_oldsuffix) || GT_ISUNIQUEINT(mm_newsuffix) || mm_oldsuffix != mm_newsuffix || blindtrie_isleaf(blindtrie,oldnode) || blindtrie_getdepth(blindtrie,oldnode) == lcp); /* insert a new node before node oldnode if necessary */ if (blindtrie_isleaf(blindtrie,oldnode)) { gt_assert(lcp > 0); } if (blindtrie_isleaf(blindtrie,oldnode) || blindtrie_getdepth(blindtrie,oldnode) > lcp) { newnode = blindtrie_newnode(blindtrie); blindtrie_firstchar_set(blindtrie,newnode, blindtrie_isleaf(blindtrie,oldnode),mm_oldsuffix); if (!blindtrie_isleaf(blindtrie,oldnode)) { blindtrie_setdepth(blindtrie,newnode, blindtrie_getdepth(blindtrie,oldnode)); /* newnode inherits depth+children */ } blindtrie_copy_either(blindtrie,newnode,oldnode); blindtrie_rightsibling_set(blindtrie,newnode,GT_BLINDTRIE_REFNULL); blindtrie_setleaf(blindtrie,oldnode,false); gt_assert(!GT_ISUNIQUEINT(blindtrie_firstchar_get(blindtrie,oldnode))); gt_assert(lcp > 0); blindtrie_setdepth(blindtrie,oldnode,lcp); /* oldnode has newnode as only child*/ blindtrie_firstchild_set(blindtrie,oldnode,newnode); } gt_assert(blindtrie_isleaf(blindtrie,oldnode) || blindtrie_getdepth(blindtrie,oldnode) == lcp); previousnode = GT_BLINDTRIE_REFNULL; currentnode = blindtrie_firstchild_get(blindtrie,oldnode); while (currentnode != GT_BLINDTRIE_REFNULL && blindtrie_comparecharacters(blindtrie_firstchar_get(blindtrie, currentnode), mm_newsuffix) < 0) { previousnode = currentnode; currentnode = blindtrie_rightsibling_get(blindtrie,currentnode); } /* insert new leaf with current suffix */ /* search S[lcp] among the offsprings */ newleaf = blindtrie_newleaf(blindtrie,currentstartpos, currenttwobitencodingstoppos,mm_newsuffix, currentnode); if (previousnode != GT_BLINDTRIE_REFNULL) { blindtrie_rightsibling_set(blindtrie,previousnode,newleaf); } else { blindtrie_firstchild_set(blindtrie,oldnode,newleaf); } } static unsigned long blindtrie_cmpcharbychar_getlcp( GtBlindtriesymbol *mm_oldsuffix, bool *mm_oldsuffixisseparator, GtBlindtriesymbol *mm_newsuffix, const GtBlindtrie *blindtrie, unsigned long leafpos, unsigned long currentstartpos) { unsigned long lcp; GtBlindtriesymbol cc1, cc2; if (blindtrie_isleftofboundary(blindtrie,leafpos,0)) { gt_encseq_reader_reinit_with_readmode(blindtrie->esr1,blindtrie->encseq, blindtrie->readmode,leafpos); } if (blindtrie_isleftofboundary(blindtrie,currentstartpos,0)) { gt_encseq_reader_reinit_with_readmode(blindtrie->esr2,blindtrie->encseq, blindtrie->readmode,currentstartpos); } for (lcp = 0; /* Nothing */; lcp++) { if (blindtrie_isleftofboundary(blindtrie,leafpos,lcp)) { cc1 = (GtBlindtriesymbol) gt_encseq_reader_next_encoded_char(blindtrie->esr1); if (GT_BLINDTRIECHAR_ISSPECIAL(cc1)) { if (mm_oldsuffixisseparator != NULL) { *mm_oldsuffixisseparator = (cc1 == SEPARATOR) ? true : false; } cc1 = GT_UNIQUEINT(leafpos + lcp); } } else { if (mm_oldsuffixisseparator != NULL) { *mm_oldsuffixisseparator = true; } cc1 = GT_UNIQUEINT(leafpos + lcp); } if (blindtrie_isleftofboundary(blindtrie,currentstartpos,lcp)) { cc2 = (GtBlindtriesymbol) gt_encseq_reader_next_encoded_char(blindtrie->esr2); if (GT_BLINDTRIECHAR_ISSPECIAL(cc2)) { cc2 = GT_UNIQUEINT(currentstartpos + lcp); } } else { cc2 = GT_UNIQUEINT(currentstartpos + lcp); } if (blindtrie_comparecharacters(cc1,cc2) != 0) { *mm_oldsuffix = cc1; *mm_newsuffix = cc2; break; } } gt_assert(blindtrie->sortmaxdepthminusoffset == 0 || lcp <= blindtrie->sortmaxdepthminusoffset); return lcp; } static unsigned long blindtrie_twobitencoding_getlcp( GtBlindtriesymbol *mm_oldsuffix, bool *mm_oldsuffixisseparator, GtBlindtriesymbol *mm_newsuffix, const GtBlindtrie *blindtrie, unsigned long leafpos, unsigned long leaftwobitencodingstoppos, unsigned long currentstartpos, unsigned long currenttwobitencodingstoppos) { GtCommonunits commonunits; const unsigned long depth = 0; gt_assert(leafpos != currentstartpos); gt_Viatwobitkeyvalues_reinit(blindtrie->vtk1, blindtrie->encseq, blindtrie->readmode, NULL, /* esr */ leafpos, depth, blindtrie->sortmaxdepthminusoffset, leaftwobitencodingstoppos); gt_Viatwobitkeyvalues_reinit(blindtrie->vtk2, blindtrie->encseq, blindtrie->readmode, NULL, /* esr */ currentstartpos, depth, blindtrie->sortmaxdepthminusoffset, currenttwobitencodingstoppos); (void) gt_encseq_twobitencoding_strcmp(&commonunits, blindtrie->encseq, blindtrie->encseq, blindtrie->readmode, depth, blindtrie->sortmaxdepthminusoffset, blindtrie->vtk1, blindtrie->vtk2); if (blindtrie_isleftofboundary(blindtrie,leafpos,commonunits.finaldepth) && !commonunits.leftspecial) { *mm_oldsuffix = (GtBlindtriesymbol) gt_encseq_get_encoded_char_nospecial(blindtrie->encseq, leafpos + commonunits.finaldepth, blindtrie->readmode); } else { if (mm_oldsuffixisseparator != NULL) { if (blindtrie_isleftofboundary(blindtrie,leafpos,commonunits.finaldepth)) { *mm_oldsuffixisseparator = true; } else { gt_assert(commonunits.leftspecial); /* be careful: if wildcards occur in the sequence, the following statement may be wrong. Please contact stefan if program is applied for such sequences. */ *mm_oldsuffixisseparator = true; } } *mm_oldsuffix = GT_UNIQUEINT(leafpos + commonunits.finaldepth); } if (blindtrie_isleftofboundary(blindtrie,currentstartpos, commonunits.finaldepth) && !commonunits.rightspecial) { *mm_newsuffix = (GtBlindtriesymbol) gt_encseq_get_encoded_char_nospecial(blindtrie->encseq, currentstartpos + commonunits.finaldepth, blindtrie->readmode); } else { *mm_newsuffix = GT_UNIQUEINT(currentstartpos + commonunits.finaldepth); } return commonunits.finaldepth; } static unsigned long blindtrie_getlcp(GtBlindtriesymbol *mm_oldsuffix, bool *mm_oldsuffixisseparator, GtBlindtriesymbol *mm_newsuffix, const GtBlindtrie *blindtrie, const GtBlindtriesnodeptr lis, unsigned long currentstartpos, unsigned long currenttwobitencodingstoppos) { if (blindtrie->cmpcharbychar) { return blindtrie_cmpcharbychar_getlcp (mm_oldsuffix, mm_oldsuffixisseparator, mm_newsuffix, blindtrie, blindtrie_nodestartpos_get(blindtrie, lis), currentstartpos); } return blindtrie_twobitencoding_getlcp(mm_oldsuffix, mm_oldsuffixisseparator, mm_newsuffix, blindtrie, blindtrie_nodestartpos_get(blindtrie, lis), blindtrie_nodestoppos_get(blindtrie, lis), currentstartpos, currenttwobitencodingstoppos); } static void blindtrie_suffixout(GtBlindtrie *blindtrie, unsigned long subbucketleft, unsigned long offset, unsigned long nextfree, unsigned long startpos) { gt_suffixsortspace_set(blindtrie->sssp,subbucketleft,nextfree, startpos - offset); } #define BLINDTRIE_SETCURRENTNODE(NODEPTR)\ currentnodeisleaf = blindtrie_isleaf(blindtrie,NODEPTR) ? true : false;\ currentnode = NODEPTR static unsigned long blindtrie_enumeratetrieleaves ( GtBlindtrie *blindtrie, unsigned long subbucketleft, unsigned long offset, unsigned long sortmaxdepth, GtLcpvalues *tableoflcpvalues, void *voiddcov, GtProcessunsortedsuffixrange processunsortedsuffixrange) { bool readyforpop = false, currentnodeisleaf; GtBlindtriesnodeptr currentnode, siblval, lcpnode = GT_BLINDTRIE_ROOTIDX; unsigned long nextfree = 0, equalsrangewidth = 0, lcpnodedepth, bucketleftidxplussubbucketleft; blindtrie->stack.nextfreeGtBlindtriesnodeptr = 0; GT_STOREINARRAY (&blindtrie->stack, GtBlindtriesnodeptr, 128, GT_BLINDTRIE_ROOTIDX); BLINDTRIE_SETCURRENTNODE(blindtrie_firstchild_get(blindtrie, GT_BLINDTRIE_ROOTIDX)); bucketleftidxplussubbucketleft = gt_suffixsortspace_bucketleftidx_get(blindtrie->sssp) + subbucketleft; for (;;) { lcpnodedepth = blindtrie_getdepth(blindtrie,lcpnode); if (currentnodeisleaf) { if (nextfree > 0) { if (tableoflcpvalues != NULL) { gt_lcptab_update(tableoflcpvalues,subbucketleft,nextfree, lcpnodedepth + offset); } if (sortmaxdepth > 0) { if (lcpnodedepth + offset == sortmaxdepth) { equalsrangewidth++; } else { gt_assert(lcpnodedepth + offset < sortmaxdepth); if (equalsrangewidth > 0) { if (processunsortedsuffixrange != NULL) { processunsortedsuffixrange( voiddcov, bucketleftidxplussubbucketleft + nextfree - 1 - equalsrangewidth, equalsrangewidth + 1, sortmaxdepth); } equalsrangewidth = 0; } } } } blindtrie_suffixout(blindtrie,subbucketleft,offset,nextfree, blindtrie_nodestartpos_get(blindtrie,currentnode)); nextfree++; siblval = blindtrie_rightsibling_get(blindtrie,currentnode); if (siblval == GT_BLINDTRIE_REFNULL) { readyforpop = true; currentnodeisleaf = false; /* STATE 1 */ } else { BLINDTRIE_SETCURRENTNODE(siblval); /* current comes from brother */ lcpnode = blindtrie->stack.spaceGtBlindtriesnodeptr[ blindtrie->stack.nextfreeGtBlindtriesnodeptr-1]; } } else { if (readyforpop) { if (blindtrie->stack.nextfreeGtBlindtriesnodeptr == 1UL) { break; } blindtrie->stack.nextfreeGtBlindtriesnodeptr--; siblval = blindtrie_rightsibling_get(blindtrie, blindtrie->stack.spaceGtBlindtriesnodeptr[ blindtrie->stack.nextfreeGtBlindtriesnodeptr]); if (siblval != GT_BLINDTRIE_REFNULL) { BLINDTRIE_SETCURRENTNODE(siblval); /* current comes from brother */ lcpnode = blindtrie->stack.spaceGtBlindtriesnodeptr[ blindtrie->stack.nextfreeGtBlindtriesnodeptr - 1]; readyforpop = false; } } else { GT_STOREINARRAY (&blindtrie->stack, GtBlindtriesnodeptr, 128, currentnode); BLINDTRIE_SETCURRENTNODE(blindtrie_firstchild_get(blindtrie, currentnode)); } } } if (nextfree > 0 && equalsrangewidth > 0) { if (processunsortedsuffixrange != NULL) { processunsortedsuffixrange(voiddcov, bucketleftidxplussubbucketleft + nextfree - 1 - equalsrangewidth, equalsrangewidth + 1, sortmaxdepth); } equalsrangewidth = 0; } return nextfree; } GtBlindtrie *gt_blindtrie_new(GtSuffixsortspace *suffixsortspace, unsigned long maxnumofsuffixes, unsigned int nodenumberincrement, const GtEncseq *encseq, bool cmpcharbychar, GtEncseqReader *esr1, GtEncseqReader *esr2, GtReadmode readmode) { GtBlindtrie *blindtrie; if (maxnumofsuffixes == 1UL) { return NULL; } blindtrie = gt_malloc(sizeof (*blindtrie)); if (nodenumberincrement == 0) { gt_assert(maxnumofsuffixes >= 2UL); blindtrie->allocatedBlindtrienode = (GtBlindtriesnodeptr) GT_MULT2(maxnumofsuffixes + 1) + 1; blindtrie->nodenumberincrement = 0; } else { gt_assert(maxnumofsuffixes == 0); blindtrie->allocatedBlindtrienode = 0; blindtrie->nodenumberincrement = nodenumberincrement; } blindtrie->spaceBlindtrienode = gt_malloc(sizeof (*blindtrie->spaceBlindtrienode) * blindtrie->allocatedBlindtrienode); /* printf("# sizeof (blindtrie)=%lu\n", (unsigned long) (sizeof (GtBlindtrie) + blindtrie->allocatedBlindtrienode * sizeof (GtBlindtrienode))); */ GT_INITARRAY (&blindtrie->overflowsuffixes, GtUlong); GT_INITARRAY (&blindtrie->stack, GtBlindtriesnodeptr); blindtrie->nextfreeBlindtrienode = 0; blindtrie->encseq = encseq; blindtrie->has_twobitencoding_stoppos_support = gt_encseq_has_twobitencoding_stoppos_support(encseq); blindtrie->readmode = readmode; blindtrie->esr1 = esr1; blindtrie->esr2 = esr2; blindtrie->totallength = gt_encseq_total_length(encseq); blindtrie->cmpcharbychar = cmpcharbychar; blindtrie->sssp = suffixsortspace; if (cmpcharbychar) { blindtrie->vtk1 = blindtrie->vtk2 = NULL; } else { blindtrie->vtk1 = gt_Viatwobitkeyvalues_new(); blindtrie->vtk2 = gt_Viatwobitkeyvalues_new(); } return blindtrie; } void gt_blindtrie_resize(GtBlindtrie *blindtrie,unsigned int maxnumofnodes) { gt_assert(maxnumofnodes > 0); if (blindtrie->allocatedBlindtrienode > maxnumofnodes) { blindtrie->allocatedBlindtrienode = maxnumofnodes; blindtrie->spaceBlindtrienode = gt_realloc(blindtrie->spaceBlindtrienode, sizeof (*blindtrie->spaceBlindtrienode) * blindtrie->allocatedBlindtrienode); } } size_t gt_blindtrie_size(unsigned long maxnumofsuffixes) { if (maxnumofsuffixes == 1UL) { return 0; } else { return sizeof (GtBlindtrie) + (GT_MULT2(maxnumofsuffixes + 1) + 1) * sizeof (GtBlindtrienode); } } size_t gt_blindtrie_current_size(const GtBlindtrie *blindtrie) { return sizeof (GtBlindtrie) + sizeof (GtBlindtrienode) * blindtrie->allocatedBlindtrienode; } void gt_blindtrie_reset(GtBlindtrie *blindtrie) { blindtrie->nextfreeBlindtrienode = 0; blindtrie->stack.nextfreeGtBlindtriesnodeptr = 0; } void gt_blindtrie_delete(GtBlindtrie *blindtrie) { if (blindtrie == NULL) { return; } gt_Viatwobitkeyvalues_delete(blindtrie->vtk1); gt_Viatwobitkeyvalues_delete(blindtrie->vtk2); gt_free(blindtrie->spaceBlindtrienode); GT_FREEARRAY(&blindtrie->overflowsuffixes, GtUlong); GT_FREEARRAY(&blindtrie->stack, GtBlindtriesnodeptr); gt_free(blindtrie); } #undef SKDEBUG #ifdef SKDEBUG #define NODENUM(PTR) PTR static void gt_blindtrie_showleaf(const GtBlindtrie *blindtrie, unsigned int level, GtBlindtriesnodeptr current) { printf("%*.*s",(int) (6 * level),(int) (6 * level)," "); gt_assert(current != GT_BLINDTRIE_REFNULL); printf("Leaf(%u,firstchar=%u,startpos=%lu,rightsibling=%u)\n", NODENUM(current), (unsigned int) blindtrie_firstchar_get(blindtrie,current), blindtrie_nodestartpos_get(blindtrie,current), NODENUM(blindtrie_rightsibling_get(blindtrie,current))); } static void gt_blindtrie_showintern(const GtBlindtrie *blindtrie, unsigned int level, GtBlindtriesnodeptr current) { printf("%*.*s",(int) (6 * level),(int) (6 * level)," "); gt_assert(current != GT_BLINDTRIE_REFNULL); printf("Intern(%u,firstchar=%lu,depth=%lu" ",firstchild=%u,rightsibling=%u)\n", NODENUM(current), blindtrie_firstchar_get(blindtrie,current), blindtrie_getdepth(blindtrie,current), NODENUM(blindtrie_firstchild_get(blindtrie,current)), NODENUM(blindtrie_rightsibling_get(blindtrie,current))); } static void gt_blindtrie_showrecursive(const GtBlindtrie *blindtrie, unsigned int level, GtBlindtriesnodeptr node) { GtBlindtriesnodeptr current; for (current = blindtrie_firstchild_get(blindtrie,node); current != GT_BLINDTRIE_REFNULL; current = blindtrie_rightsibling_get(blindtrie,current)) { if (blindtrie_isleaf(blindtrie,current)) { gt_blindtrie_showleaf(blindtrie,level,current); } else { gt_blindtrie_showintern(blindtrie,level,current); gt_blindtrie_showrecursive(blindtrie,level+1,current); } } } static void gt_blindtrie_show(const GtBlindtrie *blindtrie) { gt_blindtrie_showrecursive(blindtrie,0,GT_BLINDTRIE_ROOTIDX); } static void blindtrie_showstate(const GtBlindtrie *blindtrie, unsigned long subbucketleft, unsigned long numberofsuffixes, unsigned long offset) { unsigned long idx; printf("insert suffixes at offset %lu:\n",offset); for (idx=0; idx < numberofsuffixes; idx++) { printf("%lu ", gt_suffixsortspace_get(blindtrie->sssp,subbucketleft,idx) + offset); } printf("\nstep 0\n"); gt_blindtrie_show(blindtrie); } #endif static GtBlindtriesnodeptr blindtrie_findsplitnode(const GtBlindtrie *blindtrie, unsigned long lcp) { GtBlindtriesnodeptr currentnode; unsigned long stackidx; currentnode = GT_BLINDTRIE_ROOTIDX; for (stackidx=0;stackidxstack.nextfreeGtBlindtriesnodeptr; stackidx++) { currentnode = blindtrie->stack.spaceGtBlindtriesnodeptr[stackidx]; if (blindtrie_isleaf(blindtrie,currentnode) || blindtrie_getdepth(blindtrie,currentnode) >= lcp) { break; } } return currentnode; } static void gt_blindtrie_insertsuffix(GtBlindtrie *blindtrie, unsigned long offset, unsigned long sortmaxdepth, unsigned long currentstartpos) { gt_assert(sortmaxdepth == 0 || sortmaxdepth > offset); if (blindtrie->nextfreeBlindtrienode == 0) { /* empty tree */ if (sortmaxdepth == 0) { blindtrie->sortmaxdepthminusoffset = 0; } else { blindtrie->sortmaxdepthminusoffset = sortmaxdepth - offset; } blindtrie->overflowsuffixes.nextfreeGtUlong = 0; blindtrie_makeroot(blindtrie,currentstartpos,ULONG_MAX); } else { if (blindtrie_isleftofboundary(blindtrie,currentstartpos,0)) { unsigned long lcp, currenttwobitencodingstoppos; GtBlindtriesnodeptr leafinsubtrie, splitnode; GtBlindtriesymbol mm_oldsuffix, mm_newsuffix; currenttwobitencodingstoppos = blindtrie_currenttwobitencodingstoppos_get(blindtrie,currentstartpos); leafinsubtrie = blindtrie_findcompanion(blindtrie,currentstartpos, currenttwobitencodingstoppos); gt_assert(blindtrie_isleaf(blindtrie,leafinsubtrie)); lcp = blindtrie_getlcp(&mm_oldsuffix, NULL, &mm_newsuffix, blindtrie, leafinsubtrie, currentstartpos, currenttwobitencodingstoppos); splitnode = blindtrie_findsplitnode(blindtrie,lcp); blindtrie_insertatsplitnode(blindtrie, splitnode, mm_oldsuffix, lcp, mm_newsuffix, currentstartpos, currenttwobitencodingstoppos); } else { GT_STOREINARRAY(&blindtrie->overflowsuffixes,GtUlong,32,currentstartpos); } } } static int blindtrie_compare_ascending(const void *a,const void *b) { unsigned long *aptr = (unsigned long *) a; unsigned long *bptr = (unsigned long *) b; gt_assert(*aptr != *bptr); return *aptr < *bptr ? -1 : 1; } static void processoverflowsuffixes(GtBlindtrie *blindtrie, unsigned long offset, GtLcpvalues *tableoflcpvalues, unsigned long subbucketleft, unsigned long nextsuffixtooutput) { if (blindtrie->overflowsuffixes.nextfreeGtUlong > 0) { unsigned long idx; if (blindtrie->overflowsuffixes.nextfreeGtUlong > 1UL) { qsort(blindtrie->overflowsuffixes.spaceGtUlong, (size_t) blindtrie->overflowsuffixes.nextfreeGtUlong, sizeof (*blindtrie->overflowsuffixes.spaceGtUlong), blindtrie_compare_ascending); } for (idx = 0; idx < blindtrie->overflowsuffixes.nextfreeGtUlong; idx++) { if (tableoflcpvalues != NULL) { gt_lcptab_update(tableoflcpvalues,subbucketleft,nextsuffixtooutput, offset); } blindtrie_suffixout(blindtrie,subbucketleft,offset,nextsuffixtooutput, blindtrie->overflowsuffixes.spaceGtUlong[idx]); nextsuffixtooutput++; } } } static void gt_blindtrie2sorting(GtBlindtrie *blindtrie, unsigned long subbucketleft, GtLcpvalues *tableoflcpvalues, unsigned long offset, unsigned long sortmaxdepth, void *voiddcov, GtProcessunsortedsuffixrange processunsortedsuffixrange) { unsigned long nextsuffixtosort; nextsuffixtosort = blindtrie_enumeratetrieleaves (blindtrie,subbucketleft,offset, sortmaxdepth,tableoflcpvalues, voiddcov,processunsortedsuffixrange); processoverflowsuffixes(blindtrie, offset, tableoflcpvalues, subbucketleft, nextsuffixtosort); } void gt_blindtrie_suffixsort(GtBlindtrie *blindtrie, unsigned long subbucketleft, GtLcpvalues *tableoflcpvalues, unsigned long numberofsuffixes, unsigned long offset, unsigned long sortmaxdepth, void *voiddcov, GtProcessunsortedsuffixrange processunsortedsuffixrange) { unsigned long idx, currentstartpos; gt_blindtrie_reset(blindtrie); for (idx=0; idx < numberofsuffixes; idx++) { currentstartpos = gt_suffixsortspace_get(blindtrie->sssp,subbucketleft,idx); gt_blindtrie_insertsuffix(blindtrie, offset, sortmaxdepth, currentstartpos + offset); #ifdef SKDEBUG blindtrie_showstate(blindtrie, subbucketleft, idx+1, offset); #endif } gt_blindtrie2sorting(blindtrie, subbucketleft, tableoflcpvalues, offset, sortmaxdepth, voiddcov, processunsortedsuffixrange); } bool gt_blindtrie_retrieve(GtBlindtrie *blindtrie, unsigned long currentstartpos, unsigned long currenttwobitencodingstoppos) { gt_assert(!blindtrie->cmpcharbychar); if (currenttwobitencodingstoppos != ULONG_MAX) { gt_assert(blindtrie->esr1 == NULL); gt_assert(blindtrie->esr2 == NULL); } if (blindtrie->nextfreeBlindtrienode == 0) { blindtrie->sortmaxdepthminusoffset = 0; blindtrie_makeroot(blindtrie,currentstartpos,currenttwobitencodingstoppos); return false; } else { GtBlindtriesnodeptr leafinsubtrie, splitnode; GtBlindtriesymbol mm_oldsuffix, mm_newsuffix; bool mm_oldsuffixisseparator; unsigned long lcp; if (currenttwobitencodingstoppos == ULONG_MAX) { currenttwobitencodingstoppos = blindtrie_currenttwobitencodingstoppos_get(blindtrie,currentstartpos); } leafinsubtrie = blindtrie_findcompanion(blindtrie,currentstartpos, currenttwobitencodingstoppos); gt_assert(blindtrie_isleaf(blindtrie,leafinsubtrie)); lcp = blindtrie_getlcp(&mm_oldsuffix, &mm_oldsuffixisseparator, &mm_newsuffix, blindtrie, leafinsubtrie, currentstartpos, currenttwobitencodingstoppos); splitnode = blindtrie_findsplitnode(blindtrie,lcp); if (blindtrie_isleaf(blindtrie,splitnode) && GT_ISUNIQUEINT(mm_oldsuffix) && mm_oldsuffixisseparator) { return true; } blindtrie_insertatsplitnode(blindtrie, splitnode, mm_oldsuffix, lcp, mm_newsuffix, currentstartpos, currenttwobitencodingstoppos); return false; } } genometools-1.5.1/src/match/sfx-bltrie.h000066400000000000000000000047001211610345200201600ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_BLTRIE_H #define SFX_BLTRIE_H #include "core/encseq.h" #include "core/readmode.h" #include "sfx-suffixgetset.h" #include "sfx-lcpvalues.h" typedef struct GtBlindtrie GtBlindtrie; GtBlindtrie *gt_blindtrie_new(GtSuffixsortspace *suffixsortspace, unsigned long maxnumofsuffixes, unsigned int nodenumberincrement, const GtEncseq *encseq, bool cmpcharbychar, GtEncseqReader *esr1, GtEncseqReader *esr2, GtReadmode readmode); void gt_blindtrie_resize(GtBlindtrie *blindtrie,unsigned int maxnumofnodes); size_t gt_blindtrie_size(unsigned long maxnumofsuffixes); size_t gt_blindtrie_current_size(const GtBlindtrie *blindtrie); void gt_blindtrie_reset(GtBlindtrie *blindtrie); void gt_blindtrie_suffixsort(GtBlindtrie *blindtrie, unsigned long subbucketleft, GtLcpvalues *tableoflcpvalues, unsigned long numberofsuffixes, unsigned long offset, unsigned long sortmaxdepth, void *voiddcov, GtProcessunsortedsuffixrange processunsortedsuffixrange); void gt_blindtrie_delete(GtBlindtrie *blindtrie); bool gt_blindtrie_retrieve(GtBlindtrie *blindtrie, unsigned long currentstartpos, unsigned long currenttwobitencodingstoppos); #endif genometools-1.5.1/src/match/sfx-copysort.c000066400000000000000000000435251211610345200205640ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma_api.h" #include "core/qsort_r.h" #include "core/array2dim_api.h" #include "core/mathsupport.h" #include "bcktab.h" #include "kmer2string.h" #include "core/logger.h" #include "sfx-copysort.h" typedef struct { bool hardworktodo, sorted; unsigned long bucketend; } Bucketinfo; struct GtBucketspec2 { unsigned long partwidth; const GtEncseq *encseq; GtReadmode readmode; unsigned int numofchars, numofcharssquared, prefixlength, *order; GtCodetype expandfactor, expandfillsum; Bucketinfo *superbuckettab, **subbuckettab; }; static unsigned long superbucketsize(const GtBucketspec2 *bucketspec2, unsigned int bucketnum) { if (bucketnum == 0) { return bucketspec2->superbuckettab[0].bucketend; } return bucketspec2->superbuckettab[bucketnum].bucketend - bucketspec2->superbuckettab[bucketnum-1].bucketend; } static int comparesuperbucketsizes(const void *a,const void *b,void *data) { const GtBucketspec2 *bucketspec2 = (const GtBucketspec2 *) data; unsigned long size1 = superbucketsize(bucketspec2, *(const unsigned int *) a); unsigned long size2 = superbucketsize(bucketspec2, *(const unsigned int *) b); if (size1 < size2) { return -1; } if (size1 > size2) { return 1; } return 0; } static unsigned long getstartidx(const GtBucketspec2 *bucketspec2, unsigned int first, unsigned int second) { gt_assert(first < bucketspec2->numofchars); gt_assert(second <= bucketspec2->numofchars); if (second > 0) { return bucketspec2->subbuckettab[first][second-1].bucketend; } if (first > 0) { return bucketspec2->superbuckettab[first-1].bucketend; } return 0; } static unsigned long getendidx(const GtBucketspec2 *bucketspec2, unsigned int first, unsigned int second) { gt_assert(first < bucketspec2->numofchars); gt_assert(second <= bucketspec2->numofchars); if (second < bucketspec2->numofchars) { return bucketspec2->subbuckettab[first][second].bucketend; } return bucketspec2->superbuckettab[first].bucketend; } static void resetsorted(GtBucketspec2 *bucketspec2) { unsigned int idx, idx2; for (idx = 0; idxnumofchars; idx++) { bucketspec2->superbuckettab[idx].sorted = false; for (idx2 = 0; idx2numofchars; idx2++) { unsigned long startidx = getstartidx(bucketspec2,idx,idx2), endidx = getendidx(bucketspec2,idx,idx2); bucketspec2->subbuckettab[idx][idx2].sorted = (startidx < endidx) ? false : true; } } } static void determinehardwork(GtBucketspec2 *bucketspec2) { unsigned int idx, idxsource, source, second; for (idxsource = 0; idxsourcenumofchars; idxsource++) { source = bucketspec2->order[idxsource]; for (second = 0; second < bucketspec2->numofchars; second++) { if (!bucketspec2->subbuckettab[source][second].sorted && source != second) { bucketspec2->subbuckettab[source][second].hardworktodo = true; bucketspec2->subbuckettab[source][second].sorted = true; } else { bucketspec2->subbuckettab[source][second].hardworktodo = false; } } bucketspec2->superbuckettab[source].sorted = true; for (idx = 0; idx < bucketspec2->numofchars; idx++) { bucketspec2->subbuckettab[idx][source].sorted = true; } } } static GtCodetype expandtwocharcode(GtCodetype twocharcode, const GtBucketspec2 *bucketspec2) { gt_assert(twocharcode < (GtCodetype) bucketspec2->numofcharssquared); return twocharcode * bucketspec2->expandfactor + bucketspec2->expandfillsum; } static unsigned long *leftcontextofspecialchardist(unsigned int numofchars, const GtEncseq *encseq, GtReadmode readmode) { GtUchar cc; unsigned int idx; unsigned long *specialchardist, totallength = gt_encseq_total_length(encseq); GtReadmode convertedreadmode = (readmode == GT_READMODE_REVERSE) ? GT_READMODE_FORWARD : GT_READMODE_COMPL; specialchardist = gt_malloc(sizeof (*specialchardist) * numofchars); for (idx = 0; idx 0) { cc = gt_encseq_get_encoded_char(encseq,range.start-1,readmode); if (ISNOTSPECIAL(cc)) { specialchardist[cc]++; } } } } gt_specialrangeiterator_delete(sri); } if (GT_ISDIRREVERSE(readmode)) { if (gt_encseq_lengthofspecialprefix(encseq) == 0) { cc = gt_encseq_get_encoded_char(encseq,0,convertedreadmode); gt_assert(ISNOTSPECIAL(cc)); specialchardist[cc]++; } } else { if (gt_encseq_lengthofspecialsuffix(encseq) == 0) { cc = gt_encseq_get_encoded_char(encseq,totallength-1,readmode); gt_assert(ISNOTSPECIAL(cc)); specialchardist[cc]++; } } return specialchardist; } #undef SHOWBUCKETSPEC2 #ifdef SHOWBUCKETSPEC2 static void showbucketspec2(const GtBucketspec2 *bucketspec2) { unsigned int idx1, idx2; for (idx1 = 0; idx1 < bucketspec2->numofchars; idx1++) { for (idx2 = 0; idx2 < bucketspec2->numofchars; idx2++) { printf("subbucket[%u][%u]=%lu",idx1,idx2, bucketspec2->subbuckettab[idx1][idx2].bucketend); if (bucketspec2->subbuckettab[idx1][idx2].sorted) { printf(" sorted\n"); } else { printf("\n"); } } printf("superbucket[%u]=%lu\n",idx1, bucketspec2->superbuckettab[idx1].bucketend); } } static void showexpandcode(const GtBucketspec2 *bucketspec2, unsigned int prefixlength) { GtCodetype ecode, code2; const GtUchar *characters = gt_encseq_alphabetcharacters(bucketspec2->encseq); for (code2 = 0; code2 < (GtCodetype) bucketspec2->numofcharssquared; code2++) { char buffer[100]; ecode = expandtwocharcode(code2,bucketspec2); gt_fromkmercode2string(buffer, ecode, bucketspec2->numofchars, prefixlength, (const char *) characters); printf("code2=%u = %lu %s\n",(unsigned int) code2,ecode,buffer); } } #endif static void fill2subbuckets(GtBucketspec2 *bucketspec2,const GtBcktab *bcktab) { GtCodetype code, maxcode; unsigned int rightchar = 0, currentchar = 0; GtBucketspecification bucketspec; unsigned long accubucketsize = 0; maxcode = gt_bcktab_numofallcodes(bcktab) - 1; for (code = 0; code <= maxcode; code++) { rightchar = gt_bcktab_calcboundsparts(&bucketspec, bcktab, code, maxcode, bucketspec2->partwidth, rightchar); accubucketsize += bucketspec.nonspecialsinbucket; if (rightchar == 0) { bucketspec2->subbuckettab[currentchar] [bucketspec2->numofchars-1].bucketend = accubucketsize; accubucketsize += bucketspec.specialsinbucket; bucketspec2->superbuckettab[currentchar].bucketend = accubucketsize; currentchar++; } else { gt_assert(bucketspec.specialsinbucket == 0); bucketspec2->subbuckettab[currentchar] [rightchar-1].bucketend = accubucketsize; } } } static void fillanysubbuckets(GtBucketspec2 *bucketspec2, const GtBcktab *bcktab) { GtCodetype code2, maxcode; unsigned int rightchar = 0, currentchar = 0; unsigned long rightbound, *specialchardist; maxcode = gt_bcktab_numofallcodes(bcktab) - 1; bucketspec2->expandfactor = (GtCodetype) gt_power_for_small_exponents(bucketspec2->numofchars, bucketspec2->prefixlength-2); bucketspec2->expandfillsum = gt_bcktab_filltable(bcktab,2U); #ifdef SHOWBUCKETSPEC2 showexpandcode(bucketspec2,bucketspec2->prefixlength); #endif specialchardist = leftcontextofspecialchardist(bucketspec2->numofchars, bucketspec2->encseq, bucketspec2->readmode); for (code2 = 0; code2 < (GtCodetype) bucketspec2->numofcharssquared; code2++) { GtCodetype ecode = expandtwocharcode(code2,bucketspec2); gt_assert(ecode / bucketspec2->expandfactor == code2); rightbound = gt_bcktab_calcrightbounds(bcktab, ecode, maxcode, bucketspec2->partwidth); rightchar = (unsigned int) ((code2+1) % bucketspec2->numofchars); gt_assert((GtCodetype) currentchar == code2 / bucketspec2->numofchars); if (rightchar == 0) { gt_assert(rightbound >= specialchardist[currentchar]); gt_assert((GtCodetype) (bucketspec2->numofchars-1) == code2 % bucketspec2->numofchars); bucketspec2->subbuckettab[currentchar] [bucketspec2->numofchars-1].bucketend = rightbound - specialchardist[currentchar]; bucketspec2->superbuckettab[currentchar].bucketend = rightbound; currentchar++; } else { gt_assert((GtCodetype) (rightchar-1) == code2 % bucketspec2->numofchars); bucketspec2->subbuckettab[currentchar][rightchar-1].bucketend = rightbound; } } gt_free(specialchardist); } GtBucketspec2 *gt_copysort_new(const GtBcktab *bcktab, const GtEncseq *encseq, GtReadmode readmode, unsigned long partwidth, unsigned int numofchars) { GtBucketspec2 *bucketspec2; unsigned int idx; gt_assert(numofchars > 0); bucketspec2 = gt_malloc(sizeof (*bucketspec2)); bucketspec2->partwidth = partwidth; bucketspec2->prefixlength = gt_bcktab_prefixlength(bcktab); bucketspec2->numofchars = numofchars; bucketspec2->numofcharssquared = numofchars * numofchars; bucketspec2->encseq = encseq; bucketspec2->readmode = readmode; bucketspec2->order = gt_malloc(sizeof (*bucketspec2->order) * numofchars); bucketspec2->superbuckettab = gt_malloc(sizeof (*bucketspec2->superbuckettab) * numofchars); gt_array2dim_malloc(bucketspec2->subbuckettab,(unsigned long) numofchars, (unsigned long) numofchars); if (bucketspec2->prefixlength == 2U) { fill2subbuckets(bucketspec2,bcktab); } else { fillanysubbuckets(bucketspec2,bcktab); } for (idx = 0; idxorder[idx] = idx; } gt_qsort_r(bucketspec2->order,(size_t) numofchars, sizeof (*bucketspec2->order),bucketspec2, comparesuperbucketsizes); resetsorted(bucketspec2); #ifdef SHOWBUCKETSPEC2 showbucketspec2(bucketspec2); #endif determinehardwork(bucketspec2); resetsorted(bucketspec2); return bucketspec2; } static void forwardderive(const GtBucketspec2 *bucketspec2, GtSuffixsortspace *suffixsortspace, unsigned long *targetoffset, unsigned int source, unsigned long idx) { unsigned long startpos; GtUchar cc; gt_assert (idx < targetoffset[source]); for (; idx < targetoffset[source]; idx++) { startpos = gt_suffixsortspace_getdirect(suffixsortspace,idx); if (startpos > 0) { cc = gt_encseq_get_encoded_char(bucketspec2->encseq, startpos-1, bucketspec2->readmode); if (ISNOTSPECIAL(cc) && !bucketspec2->superbuckettab[cc].sorted) { gt_suffixsortspace_setdirect(suffixsortspace,targetoffset[cc], startpos - 1); targetoffset[cc]++; } } } } static void backwardderive(const GtBucketspec2 *bucketspec2, GtSuffixsortspace *suffixsortspace, unsigned long *targetoffset, unsigned int source, unsigned long idx) { unsigned long startpos; GtUchar cc; for (; idx + 1 > targetoffset[source] + 1; idx--) { startpos = gt_suffixsortspace_getdirect(suffixsortspace,idx); if (startpos > 0) { cc = gt_encseq_get_encoded_char(bucketspec2->encseq, startpos-1, bucketspec2->readmode); if (ISNOTSPECIAL(cc) && !bucketspec2->superbuckettab[cc].sorted) { gt_suffixsortspace_setdirect(suffixsortspace,targetoffset[cc], startpos - 1); targetoffset[cc]--; } } } } bool gt_copysort_checkhardwork(const GtBucketspec2 *bucketspec2, GtCodetype code) { if (bucketspec2->prefixlength > 2U) { return bucketspec2->subbuckettab[0][code / bucketspec2->expandfactor]. hardworktodo; } else { return bucketspec2->subbuckettab[0][code].hardworktodo; } } void gt_copysort_derivesorting(const GtBucketspec2 *bucketspec2, GtSuffixsortspace *suffixsortspace, GtLogger *logger) { unsigned long hardwork = 0, *targetoffset; unsigned int idx, idxsource, source, second; #ifdef WITHSUFFIXES { unsigned long idx; for (idx = 0; idx < bucketspec2->partwidth; idx++) { gt_encseq_showatstartpos( stdout, GT_ISDIRREVERSE(readmode) ? false : true, GT_ISDIRCOMPLEMENT(readmode) ? true : false, encseq, gt_suffixsortspace_getdirect(suffixsortspace,idx)); } } #endif targetoffset = gt_malloc(sizeof (*targetoffset) * bucketspec2->numofchars); for (idxsource = 0; idxsourcenumofchars; idxsource++) { source = bucketspec2->order[idxsource]; for (second = 0; second < bucketspec2->numofchars; second++) { if (!bucketspec2->subbuckettab[source][second].sorted && source != second) { gt_assert(bucketspec2->subbuckettab[source][second].hardworktodo); gt_logger_log(logger,"hard work for %u %u",source,second); hardwork += getendidx(bucketspec2,source,second) - getstartidx(bucketspec2,source,second); bucketspec2->subbuckettab[source][second].sorted = true; } else { gt_assert(!bucketspec2->subbuckettab[source][second].hardworktodo); } } if (getstartidx(bucketspec2,source,0) < getstartidx(bucketspec2,source,source)) { for (idx = 0; idx < bucketspec2->numofchars; idx++) { targetoffset[idx] = getstartidx(bucketspec2,idx,source); } forwardderive(bucketspec2, suffixsortspace, targetoffset, source, getstartidx(bucketspec2,source,0)); } if (getendidx(bucketspec2,source,source) < getendidx(bucketspec2,source,bucketspec2->numofchars)) { for (idx = 0; idx < bucketspec2->numofchars; idx++) { /* do not need to assert that getendidx(idx,source) > 0, as later the value stored in targetoffset is incremented */ targetoffset[idx] = getendidx(bucketspec2,idx,source) - 1; } gt_assert(getendidx(bucketspec2,source,bucketspec2->numofchars) > 0); backwardderive(bucketspec2, suffixsortspace, targetoffset, source, getendidx(bucketspec2,source,bucketspec2->numofchars) - 1); } for (idx = 0; idx < bucketspec2->numofchars; idx++) { bucketspec2->subbuckettab[idx][source].sorted = true; } bucketspec2->superbuckettab[source].sorted = true; } gt_free(targetoffset); gt_logger_log(logger,"hardwork = %lu (%.2f)", hardwork, (double) hardwork/gt_encseq_total_length(bucketspec2->encseq)); } void gt_copysort_delete(GtBucketspec2 *bucketspec2) { gt_assert(bucketspec2 != NULL); gt_array2dim_delete(bucketspec2->subbuckettab); gt_free(bucketspec2->superbuckettab); gt_free(bucketspec2->order); gt_free(bucketspec2); } genometools-1.5.1/src/match/sfx-copysort.h000066400000000000000000000032541211610345200205640ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_COPYSORT_H #define SFX_COPYSORT_H #include "core/codetype.h" #include "core/encseq.h" #include "core/logger.h" #include "bcktab.h" #include "sfx-suffixgetset.h" typedef struct GtBucketspec2 GtBucketspec2; GtBucketspec2 *gt_copysort_new(const GtBcktab *bcktab, const GtEncseq *encseq, GtReadmode readmode, unsigned long partwidth, unsigned int numofchars); void gt_copysort_derivesorting(const GtBucketspec2 *bucketspec2, GtSuffixsortspace *suffixsortspace, GtLogger *logger); bool gt_copysort_checkhardwork(const GtBucketspec2 *bucketspec2, GtCodetype code); void gt_copysort_delete(GtBucketspec2 *bucketspec2); #endif genometools-1.5.1/src/match/sfx-diffcov.c000066400000000000000000002125011211610345200203120ustar00rootroot00000000000000/* Copyright (c) 2009-2012 Stefan Kurtz Copyright (c) 2009-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* This module implements the difference cover based suffix sorting method from the following paper: @INPROCEEDINGS{BUR:KAER:2003, author = {Burkhardt, S. and K{\"a}rkk{\"a}inen, J.}, title = {{Fast Lightweight Suffix Array Construction and Checking}}, booktitle = {{Proceedings of the 14th Annual Symposium on Combinatorial Pattern Matching (CPM)}}, year = {2003}, editor = {{Baeza-Yates, R. and Ch{\'a}vez, E. and Crochemore, M.}}, volume = {2676}, series = {LNCS}, pages = {200-210}, publisher = {Springer-Verlag} } The computation of the lcp follows the general concept of @INPROCEEDINGS{PUG:TUR:2008, author = {Puglisi, S.J. and Turpin, A.}, title = {Space-Time Tradeoffs for Longest-Common-Prefix Array Computation}, booktitle = {Proceedings of Algorithms and Computation, 19th International Symposium, {ISAAC} 2008, Gold Coast, Australia, December 15-17, 2008. Proceedings}, year = {2008}, editor = {Hong, S.-H. and Nagamochi, H. and Fukunaga, T.}, volume = {5369}, series = {Lecture Notes in Computer Science}, pages = {124--135}, publisher = {Springer}, url = {http://dx.doi.org/10.1007/978-3-540-92182-0} } based on the method of BUR:KAER:2003 to map sample positions to indexes in the sorted array of suffixes. */ #include #include #include "core/arraydef.h" #include "core/assert_api.h" #include "core/error_api.h" #include "core/divmodmul.h" #include "core/ma_api.h" #include "core/minmax.h" #include "core/mathsupport.h" #include "core/unused_api.h" #include "core/intbits.h" #include "core/encseq.h" #include "core/logger.h" #include "core/encseq.h" #include "core/stack-inlined.h" #include "core/spacecalc.h" #include "intcode-def.h" #include "bcktab.h" #include "initbasepower.h" #include "sfx-strategy.h" #include "sfx-diffcov.h" #include "sfx-suffixgetset.h" #include "sfx-bentsedg.h" #include "sfx-apfxlen.h" #include "sfx-suftaborder.h" #include "sfx-enumcodes.h" typedef unsigned char Diffrank; #define Diffrankmax ((Diffrank) 255) typedef unsigned short Diffvalue; #define Diffvaluemax ((Diffvalue) 65535) #define GT_MODV(VAL) ((VAL) & dcov->vmodmask) #define GT_DIVV(VAL) ((VAL) >> dcov->logmod) typedef struct { unsigned long key, suffixstart; } GtDcItventry; typedef struct { unsigned long blisbl, /* bucketleftindex + subbucketleft */ width; } GtDcPairsuffixptr; GT_DECLAREARRAYSTRUCT(GtDcPairsuffixptr); typedef GtDcPairsuffixptr GtInl_Queueelem; #include "queue-inline.h" typedef struct { unsigned long blisbl, /* bucketleftindex + subbucketleft */ width, count, totalwidth, maxwidth, depth; bool defined; } GtDcFirstwithnewdepth; typedef struct { unsigned int offset; unsigned long idx1, idx2; } GtLcptrace; typedef uint32_t GtDifferencecover_Inversesuftabtype; #define GT_DIFFERENCECOVER_INVERSESUFTAB_UNDEF UINT32_MAX #define GT_DIFFERENCECOVER_MAX_SAMPLESIZE (UINT32_MAX-1) struct GtDifferencecover { unsigned int vparam, logmod, size, vmodmask, hvalue, /* not necessary */ numofchars, prefixlength; unsigned long *coverrank_evaluated; GtBitsequence *coverrank_bits; Diffvalue *diffvalues, /* points to the difference cover */ *diff2pos; /* table d from BUR:KAER:2003 */ size_t requiredspace; unsigned long totallength; GtLeftborder *leftborder; /* points to bcktab->leftborder */ GtBcktab *bcktab; const GtEncseq *encseq; GtReadmode readmode; unsigned long samplesize, effectivesamplesize, samplesize_upperbound; const GtCodetype **multimappower; GtCodetype *filltable; GtEncseqReader *esr1, *esr2; GtDifferencecover_Inversesuftabtype *inversesuftab; unsigned long allocateditvinfo, currentqueuesize, maxqueuesize, currentdepth; GtCodetype maxcode; GtDcFirstwithnewdepth firstwithnewdepth; GtInl_Queue *rangestobesorted; GtDcItventry *itvinfo; GtArrayGtDcPairsuffixptr firstgeneration; GtLcpvalues *samplelcpvalues, *sssplcpvalues; unsigned long firstgenerationtotalwidth, firstgenerationcount; GtLogger *logger; GtSuffixsortspace *sssp, *sortedsample; GtRMQ *rmq; unsigned long sortoffset; }; /* Compute difference cover on the fly */ #define UScast(X) ((Diffvalue) X) #define UCcast(X) ((Diffrank) X) #include "tab-diffcover.h" static unsigned long dc_suffixptrget(const GtDifferencecover *dcov, unsigned long idx) { gt_suffixsortspace_nooffsets(dcov->sortedsample); return gt_suffixsortspace_get(dcov->sortedsample,0,idx); } static void dc_suffixptrset(const GtDifferencecover *dcov, unsigned long idx,unsigned long value) { gt_suffixsortspace_nooffsets(dcov->sortedsample); gt_suffixsortspace_set(dcov->sortedsample,0,idx,value); } static void dc_fillcoverrank(GtDifferencecover *dcov) { unsigned int i; Diffrank j; const unsigned long step = GT_DIVV(dcov->totallength) + 1; unsigned long sum; dcov->coverrank_evaluated = gt_malloc(sizeof (*dcov->coverrank_evaluated) * dcov->vparam); GT_INITBITTAB(dcov->coverrank_bits,dcov->vparam); dcov->requiredspace += sizeof (*dcov->coverrank_evaluated) * dcov->vparam; gt_assert(dcov->size <= Diffrankmax); for (i=0; ivparam; i++) { dcov->coverrank_evaluated[i] = ULONG_MAX; /* initialize as undefined */ } for (sum = 0, j=0; jsize; j++, sum += step) { Diffvalue d = dcov->diffvalues[j]; dcov->coverrank_evaluated[d] = sum; /* jth value from difference cover gets rank j * step. */ GT_SETIBIT(dcov->coverrank_bits,d); } } static bool dc_is_in_differencecover(const GtDifferencecover *dcov, unsigned long modpos) { return GT_ISIBITSET(dcov->coverrank_bits,modpos) ? true : false; } static void dc_filldiff2pos(GtDifferencecover *dcov) { Diffvalue *iptr, *jptr; dcov->diff2pos = gt_malloc(sizeof (*dcov->diff2pos) * dcov->vparam); dcov->requiredspace += sizeof (*dcov->diff2pos) * dcov->vparam; for (iptr=dcov->diffvalues + dcov->size - 1; iptr>=dcov->diffvalues; iptr--) { for (jptr=dcov->diffvalues; jptrdiffvalues + dcov->size; jptr++) { dcov->diff2pos[GT_MODV(*jptr - *iptr)] = *iptr; } } } #ifdef WITHcomputehvalue /* XXX: the following function is currently not used */ static unsigned int cd_computehvalue(const GtDifferencecover *dcov, unsigned long totallength) { Diffvalue next; unsigned int h, nmodv = GT_MODV(totallength); for (h = 0; h < dcov->size; h++) { if (dcov->diffvalues[h] <= (Diffvalue) nmodv) { if (h + 1 < dcov->size) { next = dcov->diffvalues[h+1]; } else { next = (Diffvalue) dcov->vparam; } if ((Diffvalue) nmodv < next) { return h; } } } gt_assert(false); return 0; } #endif void gt_differencecover_set_sssp_lcp(GtDifferencecover *dcov, GtSuffixsortspace *sssp, GtOutlcpinfo *outlcpinfo) { dcov->sssp = sssp; if (outlcpinfo != NULL) { dcov->sssplcpvalues = gt_Outlcpinfo_lcpvalues_ref(outlcpinfo); } } static int gt_differencecover_vparamverify(const GtDifferencecover *dcov, GtError *err) { if (dcov->vparam < dcov->prefixlength) { gt_error_set(err,"difference cover modulo %u is too small, use larger " "parameter for option -dc",dcov->vparam); return -1; } return 0; } GtDifferencecover *gt_differencecover_new(unsigned int vparam, const GtEncseq *encseq, GtReadmode readmode, unsigned int outerprefixlength, GtLogger *logger) { unsigned int offset = 0, v = 1U; GtDifferencecover *dcov; bool found = false; dcov = gt_malloc(sizeof (*dcov)); dcov->requiredspace = sizeof (*dcov); dcov->numofchars = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); dcov->totallength = gt_encseq_total_length(encseq); dcov->logger = logger; dcov->samplesize_upperbound = 0; dcov->sssp = NULL; dcov->rmq = NULL; for (dcov->logmod = 0; dcov->logmod < (unsigned int) (sizeof (differencecoversizes)/ sizeof (differencecoversizes[0])); dcov->logmod++) { if (v == vparam) { dcov->size = differencecoversizes[dcov->logmod]; dcov->samplesize_upperbound = (unsigned long) (GT_DIVV(dcov->totallength) + 1) * dcov->size; dcov->diffvalues = differencecovertab + offset; if (dcov->samplesize_upperbound <= GT_DIFFERENCECOVER_MAX_SAMPLESIZE) { found = true; break; } } offset += differencecoversizes[dcov->logmod]; v = GT_MULT2(v); } if (!found) { gt_free(dcov); return NULL; } if (outerprefixlength == 0) { dcov->prefixlength = 0; } else { dcov->prefixlength = gt_recommendedprefixlength(dcov->numofchars, dcov->samplesize_upperbound, GT_RECOMMENDED_MULTIPLIER_DEFAULT, true); if (outerprefixlength > 0 && dcov->prefixlength > outerprefixlength) { dcov->prefixlength = outerprefixlength; } gt_assert(dcov->prefixlength > 0); } dcov->vparam = 1U << (dcov->logmod); dcov->vmodmask = dcov->vparam-1; #ifdef WITHcomputehvalue dcov->hvalue = dc_computehvalue(dcov,totallength); #endif dcov->encseq = encseq; dcov->readmode = readmode; dcov->bcktab = NULL; dcov->sortedsample = NULL; dcov->filltable = NULL; dcov->multimappower = NULL; dc_fillcoverrank(dcov); dcov->diff2pos = NULL; /* this is later initialized */ dcov->esr1 = NULL; dcov->esr2 = NULL; dcov->allocateditvinfo = 0; dcov->itvinfo = NULL; dcov->currentdepth = 0; dcov->firstwithnewdepth.defined = false; dcov->firstwithnewdepth.depth = 0; dcov->firstwithnewdepth.totalwidth = 0; dcov->firstwithnewdepth.count = 0; dcov->firstwithnewdepth.blisbl = 0; dcov->firstwithnewdepth.width = 0; dcov->firstwithnewdepth.maxwidth = 0; dcov->currentqueuesize = 0; dcov->maxqueuesize = 0; dcov->inversesuftab = NULL; dcov->samplelcpvalues = NULL; dcov->sssplcpvalues = NULL; dcov->firstgenerationtotalwidth = 0; dcov->firstgenerationcount = 0; GT_INITARRAY(&dcov->firstgeneration,GtDcPairsuffixptr); return dcov; } unsigned long gt_differencecover_samplesize(const GtDifferencecover *dcov) { return dcov->samplesize; } size_t gt_differencecover_requiredspace(const GtDifferencecover *dcov) { return dcov->requiredspace; } /* The following is the \delta function from BUR:KAER:2003. */ static unsigned int dc_differencecover_delta(const GtDifferencecover *dcov, unsigned long pos1, unsigned long pos2) { return (unsigned int) GT_MODV(dcov->diff2pos[GT_MODV(pos2 - pos1)] - pos1); } bool gt_differencecover_is_empty(const GtDifferencecover *dcov) { gt_assert(dcov != NULL); return dcov->effectivesamplesize == 0 ? true : false; } void gt_differencecover_delete(GtDifferencecover *dcov) { if (dcov != NULL) { gt_assert(dcov->bcktab == NULL); gt_assert(dcov->sortedsample == NULL); gt_assert(dcov->filltable == NULL); gt_assert(dcov->multimappower == NULL); gt_assert(dcov->esr1 == NULL); gt_assert(dcov->esr2 == NULL); gt_free(dcov->coverrank_evaluated); dcov->coverrank_evaluated = NULL; gt_free(dcov->coverrank_bits); dcov->coverrank_bits = NULL; gt_free(dcov->diff2pos); dcov->diff2pos = NULL; gt_free(dcov->inversesuftab); dcov->inversesuftab = NULL; gt_rmq_delete(dcov->rmq); dcov->rmq = NULL; gt_free(dcov); } } /* the following implements the \mu function from BAE:KAER:2003 */ static unsigned long dc_differencecover_packsamplepos( const GtDifferencecover *dcov, unsigned long pos) { gt_assert(dc_is_in_differencecover(dcov,GT_MODV(pos))); return dcov->coverrank_evaluated[GT_MODV(pos)] + GT_DIVV(pos); } GT_DECLAREARRAYSTRUCT(Codeatposition); static unsigned long dc_derivespecialcodesonthefly(GtDifferencecover *dcov, const GtArrayCodeatposition *codelist) { unsigned int prefixindex, unitsnotspecial; Enumcodeatposition *ecp; Specialcontext specialcontext; unsigned long countderived = 0, pos, sampleindex; GtCodetype code; for (prefixindex=1U; prefixindex < dcov->prefixlength; prefixindex++) { /* XXX use one structure and reinit it */ ecp = gt_Enumcodeatposition_new(dcov->encseq,dcov->readmode, dcov->prefixlength, dcov->numofchars); while (gt_Enumcodeatposition_next(&specialcontext,ecp)) { if (prefixindex <= specialcontext.maxprefixindex) { gt_assert(specialcontext.position >= (unsigned long) prefixindex); pos = (unsigned long) (specialcontext.position - prefixindex); if (dc_is_in_differencecover(dcov,GT_MODV(pos))) { if (codelist != NULL) { gt_assert(countderived < codelist->nextfreeCodeatposition); gt_assert(codelist->spaceCodeatposition[countderived].maxprefixindex == prefixindex); gt_assert(codelist->spaceCodeatposition[countderived].position == pos); } code = gt_encseq_extractprefixcode(&unitsnotspecial, dcov->encseq, dcov->filltable, dcov->readmode, dcov->esr1, dcov->multimappower, pos, dcov->prefixlength); if (codelist != NULL) { gt_assert((GtCodetype) codelist->spaceCodeatposition[ countderived].code == code); } /* printf("%u %lu\n",prefixindex, (unsigned long) (specialcontext.position-prefixindex)); */ countderived++; gt_bcktab_updatespecials(dcov->bcktab,code,prefixindex); gt_assert(code > 0); sampleindex = gt_bcktab_leftborder_insertionindex(dcov->leftborder, code); gt_assert(sampleindex < dcov->effectivesamplesize); dc_suffixptrset(dcov,sampleindex,pos); } } } gt_Enumcodeatposition_delete(ecp); ecp = NULL; } if (codelist != NULL) { gt_assert(countderived == codelist->nextfreeCodeatposition); } return countderived; } static int dc_compareCodeatpositon(const void *vala,const void *valb) { const Codeatposition *a = (const Codeatposition *) vala; const Codeatposition *b = (const Codeatposition *) valb; if (a->maxprefixindex < b->maxprefixindex) { return -1; } if (a->maxprefixindex > b->maxprefixindex) { return 1; } if (a->position < b->position) { return 1; } if (a->position > b->position) { return -1; } gt_assert(false); return 0; } static void dc_validate_samplepositons(const GtDifferencecover *dcov) { unsigned long pos; unsigned int modvalue; Diffvalue *diffptr, *afterend; unsigned long idx; GtBitsequence *sampleidxused = NULL; GT_INITBITTAB(sampleidxused,dcov->samplesize_upperbound); diffptr = dcov->diffvalues; afterend = dcov->diffvalues + dcov->size; for (pos = 0, modvalue = 0; pos <= dcov->totallength; pos++) { gt_assert((unsigned long) modvalue == GT_MODV(pos)); gt_assert(diffptr == afterend || *diffptr >= (Diffvalue) modvalue); if (diffptr < afterend && (Diffvalue) modvalue == *diffptr) { idx = dc_differencecover_packsamplepos(dcov,pos); gt_assert(sampleidxused != NULL); if (GT_ISIBITSET(sampleidxused,idx)) { fprintf(stderr,"sample index %lu for pos %lu already used before\n", idx,(unsigned long) pos); exit(GT_EXIT_PROGRAMMING_ERROR); } GT_SETIBIT(sampleidxused,idx); diffptr++; } if (modvalue < dcov->vmodmask) { modvalue++; } else { modvalue = 0; diffptr = dcov->diffvalues; } } gt_free(sampleidxused); } static void dc_inversesuftab_set(GtDifferencecover *dcov, unsigned long pos, unsigned long sampleindex) { gt_assert (sampleindex < dcov->samplesize); dcov->inversesuftab[dc_differencecover_packsamplepos(dcov,pos)] = (uint32_t) sampleindex; } static unsigned long dc_inversesuftab_get(const GtDifferencecover *dcov, unsigned long pos) { return (unsigned long) dcov->inversesuftab[dc_differencecover_packsamplepos(dcov,pos)]; } static void dc_initinversesuftabnonspecials(GtDifferencecover *dcov) { unsigned long sampleindex, pos; for (sampleindex=0; sampleindex < dcov->effectivesamplesize; sampleindex++) { pos = dc_suffixptrget(dcov,sampleindex); dc_inversesuftab_set(dcov,pos,sampleindex); } } static unsigned long dc_insertfullspecialrangesample(GtDifferencecover *dcov, unsigned long specialidx, unsigned long leftpos, unsigned long rightpos) { unsigned long pos; gt_assert(leftpos < rightpos); if (GT_ISDIRREVERSE(dcov->readmode)) { pos = rightpos - 1; } else { pos = leftpos; } while (true) { if (GT_ISDIRREVERSE(dcov->readmode)) { unsigned long revpos; gt_assert(pos < dcov->totallength); revpos = GT_REVERSEPOS(dcov->totallength,pos); if (dc_is_in_differencecover(dcov,GT_MODV(revpos))) { dc_inversesuftab_set(dcov,revpos,specialidx); specialidx++; } if (pos == leftpos) { break; } pos--; } else { if (dc_is_in_differencecover(dcov,GT_MODV(pos))) { dc_inversesuftab_set(dcov,pos,specialidx); specialidx++; } if (pos == rightpos-1) { break; } pos++; } } return specialidx; } static void dc_initinversesuftabspecials(GtDifferencecover *dcov) { unsigned long idx; dcov->inversesuftab = gt_malloc(sizeof (*dcov->inversesuftab) * dcov->samplesize_upperbound); for (idx = 0; idx < dcov->samplesize_upperbound; idx++) { dcov->inversesuftab[idx] = GT_DIFFERENCECOVER_INVERSESUFTAB_UNDEF; } dcov->requiredspace += sizeof (*dcov->inversesuftab) * dcov->samplesize_upperbound; if (gt_encseq_has_specialranges(dcov->encseq)) { GtSpecialrangeiterator *sri; GtRange range; unsigned long specialidx; sri = gt_specialrangeiterator_new(dcov->encseq, GT_ISDIRREVERSE(dcov->readmode) ? false : true); specialidx = dcov->effectivesamplesize; while (gt_specialrangeiterator_next(sri,&range)) { /* printf("specialrange %lu %lu\n",(unsigned long) range.leftpos, (unsigned long) range.rightpos); */ specialidx = dc_insertfullspecialrangesample(dcov, specialidx, range.start, range.end); } gt_specialrangeiterator_delete(sri); sri = NULL; } if (dc_is_in_differencecover(dcov,GT_MODV(dcov->totallength))) { gt_assert(dcov->samplesize > 0); dc_inversesuftab_set(dcov,dcov->totallength,dcov->samplesize-1); } } static void dc_updatewidth (GtDifferencecover *dcov,unsigned long width, unsigned int depth) { if (width > 1UL) { dcov->firstgenerationtotalwidth += width; dcov->firstgenerationcount++; if (dcov->allocateditvinfo < width) { dcov->allocateditvinfo = width; } if (dcov->currentdepth == 0) { dcov->currentdepth = (unsigned long) depth; } else { gt_assert(dcov->currentdepth == (unsigned long) depth); } } } static void dc_initinversesuftabnonspecialsadjust(GtDifferencecover *dcov) { GtCodetype code; GtBucketspecification bucketspec; unsigned long idx = 0; const GtCodetype mincode = 0; unsigned int rightchar = 0; /* as mincode is 0 */ for (code = mincode; code <= dcov->maxcode; code++) { rightchar = gt_bcktab_calcboundsparts(&bucketspec, dcov->bcktab, code, dcov->maxcode, dcov->effectivesamplesize, rightchar); for (/* Nothing */; idx < bucketspec.left; idx++) { dc_inversesuftab_set(dcov,dc_suffixptrget(dcov,idx),idx); } dc_updatewidth (dcov,bucketspec.nonspecialsinbucket,dcov->prefixlength); for (/* Nothing */; idx < bucketspec.left + bucketspec.nonspecialsinbucket; idx++) { dc_inversesuftab_set(dcov,dc_suffixptrget(dcov,idx), bucketspec.left); } } for (/* Nothing */; idx < dcov->effectivesamplesize; idx++) { dc_inversesuftab_set(dcov,dc_suffixptrget(dcov,idx),idx); } } static void dc_anchorleftmost(GtDifferencecover *dcov, unsigned long blisbl, unsigned long width) { unsigned long idx; for (idx = blisbl; idx < blisbl + width; idx++) { dc_inversesuftab_set(dcov,dc_suffixptrget(dcov,idx),blisbl); } } static void dc_showintervalsizes(unsigned long count, unsigned long totalwidth, unsigned long effectivesamplesize, unsigned long maxwidth, unsigned long depth, GtLogger *logger) { gt_logger_log(logger, "level %lu" ": (intervals=%lu,total=%lu,avg=%.2f,%.2f%% of all,maxwidth=%lu)", depth, count, totalwidth, (double) totalwidth/count, 100.0 * (double) totalwidth/effectivesamplesize, maxwidth); } static void dc_processunsortedrange(GtDifferencecover *dcov, unsigned long blisbl, unsigned long width, unsigned long depth) { GtDcPairsuffixptr pairelem; gt_assert(width >= 2UL && depth > 0); gt_assert(!dcov->firstwithnewdepth.defined || (dcov->firstwithnewdepth.depth > 0 && dcov->firstwithnewdepth.depth <= depth)); if (dcov->firstwithnewdepth.defined && dcov->firstwithnewdepth.depth == depth) { dcov->firstwithnewdepth.count++; dcov->firstwithnewdepth.totalwidth += width; if (dcov->firstwithnewdepth.maxwidth < width) { dcov->firstwithnewdepth.maxwidth = width; } } else { if (dcov->firstwithnewdepth.defined) { dc_showintervalsizes(dcov->firstwithnewdepth.count, dcov->firstwithnewdepth.totalwidth, dcov->effectivesamplesize, dcov->firstwithnewdepth.maxwidth, dcov->firstwithnewdepth.depth, dcov->logger); } else { dcov->firstwithnewdepth.defined = true; } gt_logger_log(dcov->logger,"enter new level %lu",depth); dcov->firstwithnewdepth.blisbl = blisbl; dcov->firstwithnewdepth.width = width; dcov->firstwithnewdepth.depth = depth; dcov->firstwithnewdepth.count = 1UL; dcov->firstwithnewdepth.totalwidth = width; dcov->firstwithnewdepth.maxwidth = width; } pairelem.blisbl = blisbl; pairelem.width = width; gt_inl_queue_add(dcov->rangestobesorted,pairelem,false); dcov->currentqueuesize++; if (dcov->maxqueuesize < dcov->currentqueuesize) { dcov->maxqueuesize = dcov->currentqueuesize; } } static int dc_compareitv(const void *a,const void *b) { const GtDcItventry *itva = (const GtDcItventry *) a, *itvb = (const GtDcItventry *) b; if (itva->key < itvb->key) { return -1; } if (itva->key > itvb->key) { return 1; } return 0; } static void dc_setlcpvaluesofrunsortedrange(GtLcpvalues *samplelcpvalues, unsigned long blisbl, unsigned long width, unsigned long lcpvalue) { unsigned long idx; for (idx = blisbl+1; idx < blisbl + width; idx++) { gt_lcptab_update(samplelcpvalues,0,idx,lcpvalue); } } static void dc_sortsuffixesonthislevel(GtDifferencecover *dcov, unsigned long blisbl, unsigned long width) { unsigned long idx, rangestart, startpos; if (dcov->itvinfo == NULL) { dcov->itvinfo = gt_malloc(sizeof (*dcov->itvinfo) * dcov->allocateditvinfo); } if (dcov->firstwithnewdepth.blisbl == blisbl && dcov->firstwithnewdepth.width == width) { dcov->currentdepth = dcov->firstwithnewdepth.depth; } gt_assert(dcov->allocateditvinfo >= width); /* printf("new interval of width %lu\n",width); */ for (idx=0; idxitvinfo[idx].suffixstart = startpos; dcov->itvinfo[idx].key = dc_inversesuftab_get(dcov,startpos + dcov->currentdepth); } qsort(dcov->itvinfo,(size_t) width,sizeof (*dcov->itvinfo),dc_compareitv); for (idx=0; idxitvinfo[idx].suffixstart); } rangestart = 0; for (idx=1UL; idxitvinfo[idx-1].key != dcov->itvinfo[idx].key) { if (rangestart + 1 < idx) { dc_processunsortedrange(dcov, blisbl + rangestart, idx - rangestart, GT_MULT2(dcov->currentdepth)); if (dcov->samplelcpvalues != NULL) { dc_setlcpvaluesofrunsortedrange(dcov->samplelcpvalues, blisbl + rangestart, idx - rangestart, GT_MULT2(dcov->currentdepth)); } dc_anchorleftmost(dcov, blisbl + rangestart, idx - rangestart); } else { unsigned long currentsuftabentry = dc_suffixptrget(dcov,blisbl+rangestart); gt_assert(rangestart + 1 == idx); dc_inversesuftab_set(dcov,currentsuftabentry, blisbl+rangestart); } if (dcov->samplelcpvalues != NULL) { gt_lcptab_update(dcov->samplelcpvalues, 0,blisbl + idx,dcov->currentdepth); } rangestart = idx; } } if (rangestart + 1 < width) { dc_processunsortedrange(dcov, blisbl + rangestart, width - rangestart, GT_MULT2(dcov->currentdepth)); if (dcov->samplelcpvalues != NULL) { dc_setlcpvaluesofrunsortedrange(dcov->samplelcpvalues, blisbl + rangestart, width - rangestart, GT_MULT2(dcov->currentdepth)); } dc_anchorleftmost(dcov, blisbl + rangestart, width - rangestart); } else { unsigned long currentsuftabentry = dc_suffixptrget(dcov,blisbl+rangestart); dc_inversesuftab_set(dcov,currentsuftabentry,blisbl+rangestart); } } static void dc_bcktab2firstlevelintervals(GtDifferencecover *dcov) { GtCodetype code; unsigned int rightchar; GtBucketspecification bucketspec; const GtCodetype mincode = 0; gt_logger_log(dcov->logger,"maxbucketsize=%lu",dcov->allocateditvinfo); rightchar = (unsigned int) (mincode % dcov->numofchars); for (code = 0; code <= dcov->maxcode; code++) { rightchar = gt_bcktab_calcboundsparts(&bucketspec, dcov->bcktab, code, dcov->maxcode, dcov->effectivesamplesize, rightchar); if (bucketspec.nonspecialsinbucket > 1UL) { dc_sortsuffixesonthislevel(dcov, bucketspec.left, bucketspec.nonspecialsinbucket); } } } static void dc_addunsortedrange(void *voiddcov, unsigned long blisbl, unsigned long width, GT_UNUSED unsigned long depth) { GtDifferencecover *dcov = (GtDifferencecover *) voiddcov; GtDcPairsuffixptr *ptr; gt_assert(dcov->sssp == NULL); gt_assert(depth >= (unsigned long) dcov->vparam); dc_updatewidth (dcov,width,dcov->vparam); GT_GETNEXTFREEINARRAY(ptr,&dcov->firstgeneration,GtDcPairsuffixptr,1024); ptr->blisbl = blisbl; ptr->width = width; } static unsigned long gt_differencecover_eval_lcp(const GtLcptrace *lcptrace, const GtDifferencecover *dcov) { if (lcptrace->idx1 < dcov->effectivesamplesize && lcptrace->idx2 < dcov->effectivesamplesize) { gt_assert(dcov->rmq != NULL); return (unsigned long) gt_rmq_find_min_value(dcov->rmq, MIN(lcptrace->idx1,lcptrace->idx2)+1, MAX(lcptrace->idx1,lcptrace->idx2)) + lcptrace->offset; } return (unsigned long) lcptrace->offset; } int gt_differencecover_compare (const GtDifferencecover *dcov, GtLcptrace *lcptrace, unsigned long suffixpos1, unsigned long suffixpos2) { gt_assert(suffixpos1 < dcov->totallength); gt_assert(suffixpos2 < dcov->totallength); lcptrace->offset = dc_differencecover_delta(dcov,suffixpos1,suffixpos2); lcptrace->idx1 = dc_inversesuftab_get(dcov,suffixpos1 + lcptrace->offset); lcptrace->idx2 = dc_inversesuftab_get(dcov,suffixpos2 + lcptrace->offset); gt_assert(lcptrace->idx1 != lcptrace->idx2); return lcptrace->idx1 < lcptrace->idx2 ? -1 : 1; } #ifdef QSORTNAME #undef QSORTNAME #endif #define QSORTNAME(NAME) dc_##NAME #define dc_ARRAY_GET(ARR,RELIDX)\ gt_suffixsortspace_get(data->sssp,data->sortoffset,RELIDX) #define dc_ARRAY_SET(ARR,RELIDX,VALUE)\ gt_suffixsortspace_set(data->sssp,data->sortoffset,RELIDX,VALUE) typedef GtDifferencecover * QSORTNAME(Datatype); static int QSORTNAME(qsortcmparr) ( unsigned long a, unsigned long b, GtLcptrace *lcptrace, const QSORTNAME(Datatype) data) { unsigned long suffixpos1, suffixpos2; gt_assert(data->sssp != NULL); suffixpos1 = dc_ARRAY_GET(NULL,a); suffixpos2 = dc_ARRAY_GET(NULL,b); return gt_differencecover_compare (data, lcptrace, suffixpos1, suffixpos2); } typedef void * QSORTNAME(Sorttype); /* * Qsort routine from Bentley & McIlroy's ``Engineering a Sort Function''. */ #ifndef GT_QSORT_ARR_SWAP #define GT_QSORT_ARR_SWAP(ARR,A,B)\ if ((A) != (B))\ {\ tmp = QSORTNAME(ARRAY_GET)(ARR,A);\ QSORTNAME(ARRAY_SET)(ARR,A,QSORTNAME(ARRAY_GET)(ARR,B));\ QSORTNAME(ARRAY_SET)(ARR,B,tmp);\ } #endif #ifndef GT_QSORT_ARR_VECSWAP #define GT_QSORT_ARR_VECSWAP(ARR,A,B,N)\ aidx = A;\ bidx = B;\ while ((N)-- > 0)\ {\ tmp = QSORTNAME(ARRAY_GET)(ARR,aidx);\ QSORTNAME(ARRAY_SET)(ARR,aidx,QSORTNAME(ARRAY_GET)(ARR,bidx));\ QSORTNAME(ARRAY_SET)(ARR,bidx,tmp);\ aidx++;\ bidx++;\ } #endif static inline unsigned long QSORTNAME(gt_inlined_qsort_arr_r_med3) (unsigned long a, unsigned long b, unsigned long c, GtLcptrace *lcptrace, const QSORTNAME(Datatype) data) { return QSORTNAME(qsortcmparr) (a, b, lcptrace, data) < 0 ? (QSORTNAME(qsortcmparr) (b, c, lcptrace, data) < 0 ? b : (QSORTNAME(qsortcmparr) (a, c, lcptrace, data) < 0 ? c : a)) : (QSORTNAME(qsortcmparr) (b, c, lcptrace, data) > 0 ? b : (QSORTNAME(qsortcmparr) (a, c, lcptrace, data) < 0 ? a : c)); } #ifndef GT_STACK_INTERVALARRAYTOBESORTED_DEFINED typedef struct { unsigned long startindex, len; } Intervalarrtobesorted; GT_STACK_DECLARESTRUCT(Intervalarrtobesorted,32UL); #define GT_STACK_INTERVALARRAYTOBESORTED_DEFINED #endif static void QSORTNAME(gt_inlinedarr_qsort_r) ( unsigned long insertionsortthreshold, bool handlenotswapped, unsigned long len, QSORTNAME(Datatype) data, unsigned long subbucketleft) { unsigned long tmp, pa, pb, pc, pd, pl, pm, pn, aidx, bidx, s, smallermaxlcp, greatermaxlcp; int r; bool swapped; GtStackIntervalarrtobesorted intervalstack; Intervalarrtobesorted current; GtLcptrace lcptrace; GT_STACK_INIT(&intervalstack,32UL); current.startindex = 0; current.len = len; GT_STACK_PUSH(&intervalstack,current); if (insertionsortthreshold <= 2UL) { insertionsortthreshold = 6UL; } while (!GT_STACK_ISEMPTY(&intervalstack)) { swapped = false; current = GT_STACK_POP(&intervalstack); if (current.len <= insertionsortthreshold) { for (pm = current.startindex + 1; pm < current.startindex + current.len; pm++) { for (pl = pm; pl > current.startindex; pl--) { r = QSORTNAME(qsortcmparr) (pl - 1, pl, &lcptrace, data); if (data->sssplcpvalues != NULL) { if (pl < pm && r > 0) { gt_lcptab_update(data->sssplcpvalues,subbucketleft,pl+1, gt_lcptab_getvalue(data->sssplcpvalues, subbucketleft,pl)); } gt_lcptab_update(data->sssplcpvalues,subbucketleft,pl, gt_differencecover_eval_lcp(&lcptrace, data)); } if (r <= 0) { break; } GT_QSORT_ARR_SWAP (arr, pl, pl - 1); } } continue; } pm = current.startindex + GT_DIV2 (current.len); if (current.len > 7UL) { pl = current.startindex; pn = current.startindex + current.len - 1; if (current.len > 40UL) { s = GT_DIV8 (current.len); pl = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pl, pl + s, pl + GT_MULT2 (s), &lcptrace, data); gt_assert(pm >= s); pm = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pm - s, pm, pm + s, &lcptrace, data); gt_assert(pn >= GT_MULT2(s)); pn = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pn - GT_MULT2 (s), pn - s, pn, &lcptrace, data); } pm = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pl, pm, pn, &lcptrace, data); } GT_QSORT_ARR_SWAP (arr, current.startindex, pm); pa = pb = current.startindex + 1; pc = pd = current.startindex + current.len - 1; smallermaxlcp = greatermaxlcp = 0; while (1) { while (pb <= pc) { r = QSORTNAME(qsortcmparr) (pb, current.startindex, &lcptrace, data); if (r > 0) { if (data->sssplcpvalues != NULL) { unsigned long tmplcplen = gt_differencecover_eval_lcp(&lcptrace,data); GT_UPDATE_MAX(greatermaxlcp,tmplcplen); } break; } if (r == 0) { swapped = true; GT_QSORT_ARR_SWAP (arr, pa, pb); pa++; } else { if (data->sssplcpvalues != NULL) { unsigned long tmplcplen = gt_differencecover_eval_lcp(&lcptrace,data); GT_UPDATE_MAX(smallermaxlcp,tmplcplen); } } pb++; } while (pb <= pc) { r = QSORTNAME(qsortcmparr) (pc, current.startindex, &lcptrace, data); if (r < 0) { if (data->sssplcpvalues != NULL) { unsigned long tmplcplen = gt_differencecover_eval_lcp(&lcptrace,data); GT_UPDATE_MAX(smallermaxlcp,tmplcplen); } break; } if (r == 0) { swapped = true; GT_QSORT_ARR_SWAP (arr, pc, pd); gt_assert(pd > 0); pd--; } else { if (data->sssplcpvalues != NULL) { unsigned long tmplcplen = gt_differencecover_eval_lcp(&lcptrace,data); GT_UPDATE_MAX(greatermaxlcp,tmplcplen); } } gt_assert(pc > 0); pc--; } if (pb > pc) { break; } GT_QSORT_ARR_SWAP (arr, pb, pc); swapped = true; pb++; gt_assert(pc > 0); pc--; } /* The following switch is not explained in the above mentioned paper and therefore we ignore it. */ if (handlenotswapped && !swapped) { /* Switch to insertion sort */ gt_assert(current.len <= 40UL); for (pm = current.startindex + 1; pm < current.startindex + current.len; pm++) { for (pl = pm; pl > current.startindex; pl--) { r = QSORTNAME(qsortcmparr) (pl - 1, pl, &lcptrace, data); if (r <= 0) { break; } GT_QSORT_ARR_SWAP (arr, pl, pl - 1); } } continue; } pn = current.startindex + current.len; gt_assert(pa >= current.startindex); gt_assert(pb >= pa); s = MIN ((unsigned long) (pa - current.startindex), (unsigned long) (pb - pa)); gt_assert(pb >= s); GT_QSORT_ARR_VECSWAP (arr, current.startindex, pb - s, s); gt_assert(pd >= pc); gt_assert(pn > pd); s = MIN ((unsigned long) (pd - pc), (unsigned long) (pn - pd - 1)); gt_assert(pn > s); GT_QSORT_ARR_VECSWAP (arr, pb, pn - s, s); gt_assert(pb >= pa); if ((s = (unsigned long) (pb - pa)) > 0) { if (data->sssplcpvalues != NULL) { /* left part has suffix with lcp up to length smallermaxlcp w.r.t. to the pivot. This lcp belongs to a suffix on the left which is at a minimum distance to the pivot and thus to an element in the final part of the left side. */ gt_lcptab_update(data->sssplcpvalues, subbucketleft,current.startindex + s, smallermaxlcp); } if (s > 1UL) { current.len = s; GT_STACK_PUSH(&intervalstack,current); } } gt_assert(pd >= pc); if ((s = (unsigned long) (pd - pc)) > 0) { if (data->sssplcpvalues != NULL) { /* right part has suffix with lcp up to length largermaxlcp w.r.t. to the pivot. This lcp belongs to a suffix on the right which is at a minimum distance to the pivot and thus to an element in the first part of the right side. */ gt_assert(pn >= s); gt_lcptab_update(data->sssplcpvalues,subbucketleft,pn - s, greatermaxlcp); } if (s > 1UL) { gt_assert(pn >= s); current.startindex = pn - s; current.len = s; GT_STACK_PUSH(&intervalstack,current); } } } GT_STACK_DELETE(&intervalstack); } void gt_differencecover_sortunsortedbucket(void *data, unsigned long blisbl, unsigned long width, GT_UNUSED unsigned long depth) { GtDifferencecover *dcov = (GtDifferencecover *) data; const unsigned long bucketleftidx = gt_suffixsortspace_bucketleftidx_get(dcov->sssp); gt_assert(depth >= (unsigned long) dcov->vparam); gt_assert(dcov->diff2pos != NULL); gt_assert(width >= 2UL); gt_assert(dcov->sssp != NULL); gt_assert(blisbl >= bucketleftidx); /* blisbl = bucketleftindex + subbucketleft already contains bucketleftindex, therefore we cannot use gt_suffixsortspace_set or gt_suffixsortspace_get as these use the index bucketleftindex + subbucketleft + idx - partoffset = blisbl - partoffset + idx. Thus, instead we use the functions to directly access the suffix sortspace. */ dcov->sortoffset = blisbl - gt_suffixsortspace_bucketleftidx_get(dcov->sssp); QSORTNAME(gt_inlinedarr_qsort_r) (6UL, false, width,data, blisbl - bucketleftidx); } static void dc_sortremainingsamples(GtDifferencecover *dcov) { GtDcPairsuffixptr *pairptr; if (dcov->firstgenerationcount > 0) { dc_showintervalsizes(dcov->firstgenerationcount, dcov->firstgenerationtotalwidth, dcov->effectivesamplesize, dcov->allocateditvinfo, dcov->currentdepth, dcov->logger); } if (dcov->inversesuftab == NULL) { /* now maxdepth > prefixlength */ dc_initinversesuftabspecials(dcov); dc_initinversesuftabnonspecials(dcov); } else { gt_assert(dcov->firstgeneration.nextfreeGtDcPairsuffixptr == 0); } for (pairptr = dcov->firstgeneration.spaceGtDcPairsuffixptr; pairptr < dcov->firstgeneration.spaceGtDcPairsuffixptr + dcov->firstgeneration.nextfreeGtDcPairsuffixptr; pairptr++) { dc_anchorleftmost(dcov,pairptr->blisbl,pairptr->width); } for (pairptr = dcov->firstgeneration.spaceGtDcPairsuffixptr; pairptr < dcov->firstgeneration.spaceGtDcPairsuffixptr + dcov->firstgeneration.nextfreeGtDcPairsuffixptr; pairptr++) { dc_sortsuffixesonthislevel(dcov,pairptr->blisbl, pairptr->width); } GT_FREEARRAY(&dcov->firstgeneration,GtDcPairsuffixptr); while (!gt_inl_queue_isempty(dcov->rangestobesorted)) { GtDcPairsuffixptr thispair; thispair = gt_inl_queue_get(dcov->rangestobesorted); gt_assert(dcov->currentqueuesize > 0); dcov->currentqueuesize--; dc_sortsuffixesonthislevel(dcov,thispair.blisbl,thispair.width); } gt_logger_log(dcov->logger,"maxqueuesize=%lu",dcov->maxqueuesize); gt_free(dcov->itvinfo); dcov->itvinfo = NULL; gt_inl_queue_delete(dcov->rangestobesorted); dcov->rangestobesorted = NULL; } static void dc_init_sfxstrategy_for_sample(Sfxstrategy *sfxstrategy, const Sfxstrategy *mainsfxstrategy, bool bitwise_cmp_ok, unsigned long effectivesamplesize, unsigned long totallength, GtLogger *logger) { if (mainsfxstrategy != NULL) { double sampledproportion = (double) effectivesamplesize/totallength; *sfxstrategy = *mainsfxstrategy; #define SETMAXCOUNT(COMP)\ if (mainsfxstrategy->COMP >= 1UL)\ {\ sfxstrategy->COMP = MAX(2UL,mainsfxstrategy->COMP * sampledproportion);\ } SETMAXCOUNT(maxcountingsort); SETMAXCOUNT(maxbltriesort); SETMAXCOUNT(maxinsertionsort); } else { defaultsfxstrategy(sfxstrategy,bitwise_cmp_ok); } gt_logger_log(logger,"samplesort.maxinsertionsort=%lu", sfxstrategy->maxinsertionsort); gt_logger_log(logger,"samplesort.maxbltriesort=%lu", sfxstrategy->maxbltriesort); gt_logger_log(logger,"samplesort.maxcountingsort=%lu", sfxstrategy->maxcountingsort); } static void dc_fill_samplelcpvalues(bool cmpcharbychar,GtDifferencecover *dcov) { unsigned long suffix, kvalue, lcpinherit, start0, start1, currentlcpvalue; GtDifferencecover_Inversesuftabtype *inversesuftabptr = dcov->inversesuftab; unsigned int svalue; GT_UNUSED int retval; GtCommonunits commonunits; GtUchar cc1, cc2; for (svalue = 0; svalue < dcov->size; svalue++) { lcpinherit = 0; for (kvalue = (unsigned long) svalue; kvalue < dcov->samplesize; kvalue += dcov->size) { do { if (inversesuftabptr >= dcov->inversesuftab + dcov->samplesize_upperbound) { suffix = (unsigned long) GT_DIFFERENCECOVER_INVERSESUFTAB_UNDEF; break; } suffix = (unsigned long) *inversesuftabptr; inversesuftabptr++; } while (suffix == (unsigned long)GT_DIFFERENCECOVER_INVERSESUFTAB_UNDEF); if (suffix > 0 && suffix < dcov->effectivesamplesize) { currentlcpvalue = gt_lcptab_getvalue(dcov->samplelcpvalues,0,suffix); if (currentlcpvalue < (unsigned long) dcov->vparam) { lcpinherit = 0; } else { if (lcpinherit < currentlcpvalue) { lcpinherit = currentlcpvalue; } start0 = gt_suffixsortspace_get(dcov->sortedsample,0,suffix-1); start1 = gt_suffixsortspace_get(dcov->sortedsample,0,suffix); if (cmpcharbychar) { while (start0 + lcpinherit < dcov->totallength && start1 + lcpinherit < dcov->totallength) { cc1 = gt_encseq_get_encoded_char(dcov->encseq,start0+lcpinherit, dcov->readmode); cc2 = gt_encseq_get_encoded_char(dcov->encseq,start1+lcpinherit, dcov->readmode); if (ISSPECIAL(cc1) || ISSPECIAL(cc2) || cc1 != cc2) { break; } lcpinherit++; } } else { retval = gt_encseq_compare_viatwobitencoding(&commonunits, dcov->encseq, dcov->encseq, dcov->readmode, dcov->esr1, dcov->esr2, start0, start1, lcpinherit, 0); gt_assert(retval <= 0); lcpinherit = commonunits.finaldepth; } gt_lcptab_update(dcov->samplelcpvalues,0,suffix,lcpinherit); lcpinherit = lcpinherit > (unsigned long) dcov->vparam ? (lcpinherit - (unsigned long) dcov->vparam) : 0; } } } } } void gt_differencecover_completelargelcpvalues(void *data, const GtSuffixsortspace *sssp, GtLcpvalues *tableoflcpvalues, unsigned long width, unsigned long posoffset) { unsigned long idx, lcpvalue, s0, s1, r0, r1; GtDifferencecover *dcov = (GtDifferencecover *) data; gt_assert(width > 0 && sssp != NULL && tableoflcpvalues != NULL && dcov->rmq != NULL); for (idx = 1UL; idx < width; idx++) { lcpvalue = gt_lcptab_getvalue(tableoflcpvalues,0,idx); if (lcpvalue >= (unsigned long) dcov->vparam) { s0 = gt_suffixsortspace_get(sssp, posoffset, idx-1); s1 = gt_suffixsortspace_get(sssp, posoffset, idx); lcpvalue = (unsigned long) dc_differencecover_delta(dcov,s0,s1); r0 = dc_inversesuftab_get(dcov,s0 + lcpvalue); r1 = dc_inversesuftab_get(dcov,s1 + lcpvalue); if (r0 < dcov->effectivesamplesize && r1 < dcov->effectivesamplesize) { gt_assert(r0 < r1); lcpvalue += gt_rmq_find_min_value(dcov->rmq, r0+1, r1); } gt_lcptab_update(tableoflcpvalues,0,idx,lcpvalue); } } } static void dc_verify_inversesuftab(const GtDifferencecover *dcov) { unsigned long idx; for (idx=0; idx < dcov->effectivesamplesize; idx++) { unsigned long idx2 = dc_inversesuftab_get(dcov,dc_suffixptrget(dcov,idx)); if (idx != idx2) { fprintf(stderr,"idx = %lu != %lu = idx2\n",idx,idx2); exit(GT_EXIT_PROGRAMMING_ERROR); } } } static void dc_differencecover_sortsample(GtDifferencecover *dcov, GtOutlcpinfo *outlcpinfosample, const Sfxstrategy *mainsfxstrategy, GtTimer *sfxprogress, bool withcheck) { unsigned long pos, sampleindex, posinserted, fullspecials = 0, specials = 0; unsigned int modvalue, unitsnotspecial; Diffvalue *diffptr, *afterend; GtCodetype code; GtArrayCodeatposition codelist; Codeatposition *codeptr; dcov->samplesize = 0; dcov->bcktab = gt_bcktab_new(dcov->numofchars, dcov->prefixlength, dcov->totallength+1, true, /* storespecialcodes */ true, /* withspecialsuffixes */ NULL, NULL); dcov->multimappower = gt_bcktab_multimappower(dcov->bcktab); dcov->maxcode = gt_bcktab_numofallcodes(dcov->bcktab) - 1; dcov->esr1 = gt_encseq_create_reader_with_readmode(dcov->encseq, dcov->readmode, 0); dcov->esr2 = gt_encseq_create_reader_with_readmode(dcov->encseq, dcov->readmode, 0); dcov->rangestobesorted = gt_inl_queue_new(MAX(16UL,GT_DIV2(dcov->maxcode))); dcov->filltable = gt_filllargestchartable(dcov->numofchars, dcov->prefixlength); gt_assert(dcov->bcktab != NULL); dcov->leftborder = gt_bcktab_leftborder(dcov->bcktab); GT_INITARRAY(&codelist,Codeatposition); diffptr = dcov->diffvalues; afterend = dcov->diffvalues + dcov->size; for (pos = 0, modvalue = 0; pos <= dcov->totallength; pos++) { if (diffptr < afterend && (Diffvalue) modvalue == *diffptr) { if (pos < dcov->totallength) { code = gt_encseq_extractprefixcode(&unitsnotspecial, dcov->encseq, dcov->filltable, dcov->readmode, dcov->esr1, dcov->multimappower, pos, dcov->prefixlength); } else { code = 0; unitsnotspecial = 0; } dcov->samplesize++; if (unitsnotspecial > 0) { gt_bcktab_leftborder_addcode(dcov->leftborder,code); if (unitsnotspecial < dcov->prefixlength) { if (withcheck) { GT_GETNEXTFREEINARRAY(codeptr,&codelist,Codeatposition,128); gt_assert(codelist.spaceCodeatposition != NULL); codeptr->position = pos; gt_assert(code <= (GtCodetype) MAXCODEVALUE); codeptr->code = (unsigned int) code; gt_assert(unitsnotspecial <= (unsigned int) MAXPREFIXLENGTH); codeptr->maxprefixindex = unitsnotspecial; } specials++; } } else { fullspecials++; } diffptr++; } if (modvalue < dcov->vmodmask) { modvalue++; } else { modvalue = 0; diffptr = dcov->diffvalues; } } dcov->effectivesamplesize = dcov->samplesize - fullspecials; gt_assert(dcov->samplesize <= dcov->samplesize_upperbound); (void) gt_bcktab_leftborderpartialsums(NULL,NULL,dcov->bcktab); gt_logger_log(dcov->logger, "%lu positions are sampled (%.2f%%), pl=%u", dcov->samplesize, 100.0 * (double) dcov->samplesize/(dcov->totallength+1), dcov->prefixlength); gt_logger_log(dcov->logger,"specials=%lu, fullspecials=%lu", specials,fullspecials); if (withcheck) { qsort(codelist.spaceCodeatposition, (size_t) codelist.nextfreeCodeatposition, sizeof (*codelist.spaceCodeatposition),dc_compareCodeatpositon); } if (dcov->effectivesamplesize > 0) { gt_assert(mainsfxstrategy != NULL); dcov->sortedsample = gt_suffixsortspace_new(dcov->effectivesamplesize, dcov->totallength, mainsfxstrategy->suftabuint, dcov->logger); } else { gt_assert(dcov->sortedsample == NULL); } posinserted = dc_derivespecialcodesonthefly(dcov, withcheck ? &codelist : NULL); GT_FREEARRAY(&codelist,Codeatposition); diffptr = dcov->diffvalues; afterend = dcov->diffvalues + dcov->size; for (pos = 0, modvalue = 0; pos < dcov->totallength; pos++) { if (diffptr < afterend && (Diffvalue) modvalue == *diffptr) { /* XXX: Use a function to extract the code in constant time for twobitencoding. */ code = gt_encseq_extractprefixcode(&unitsnotspecial, dcov->encseq, dcov->filltable, dcov->readmode, dcov->esr1, dcov->multimappower, pos, dcov->prefixlength); if (unitsnotspecial == dcov->prefixlength) { sampleindex = gt_bcktab_leftborder_insertionindex(dcov->leftborder, code); gt_assert(sampleindex < dcov->effectivesamplesize); dc_suffixptrset(dcov,sampleindex,pos); posinserted++; } diffptr++; } if (modvalue < dcov->vmodmask) { modvalue++; } else { modvalue = 0; diffptr = dcov->diffvalues; } } dcov->multimappower = NULL; gt_free(dcov->filltable); dcov->filltable = NULL; gt_assert(posinserted == dcov->effectivesamplesize); if (withcheck && dcov->effectivesamplesize > 0) { gt_checksortedsuffixes(__FILE__, __LINE__, dcov->encseq, dcov->readmode, dcov->sortedsample, 0, dcov->effectivesamplesize, false, /* specialsareequal */ false, /* specialsareequalatdepth0 */ (unsigned long) dcov->prefixlength); } gt_Outlcpinfo_reinit(outlcpinfosample,dcov->numofchars,dcov->prefixlength, dcov->effectivesamplesize); if (outlcpinfosample != NULL) { dcov->requiredspace += gt_Outlcpinfo_size(outlcpinfosample); dcov->samplelcpvalues = gt_Outlcpinfo_lcpvalues_ref(outlcpinfosample); } if (dcov->vparam == dcov->prefixlength) { dc_initinversesuftabspecials(dcov); dc_initinversesuftabnonspecialsadjust(dcov); dc_bcktab2firstlevelintervals(dcov); } else { unsigned long long bucketiterstep = 0; Sfxstrategy sfxstrategy; gt_assert (dcov->vparam > dcov->prefixlength); dc_init_sfxstrategy_for_sample(&sfxstrategy, mainsfxstrategy, gt_encseq_bitwise_cmp_ok(dcov->encseq) ? false : true, dcov->effectivesamplesize, dcov->totallength, dcov->logger); /* now sort the suffix sample up to a prefix of length vparam */ if (dcov->effectivesamplesize > 0) { gt_sortallbuckets(dcov->sortedsample, dcov->effectivesamplesize, NULL, dcov->encseq, dcov->readmode, 0, /* mincode */ dcov->maxcode, dcov->bcktab, dcov->numofchars, dcov->prefixlength, outlcpinfosample, dcov->vparam, &sfxstrategy, dc_addunsortedrange, (void *) dcov, &bucketiterstep, dcov->logger); } if (withcheck && dcov->effectivesamplesize > 0) { gt_checksortedsuffixes(__FILE__, __LINE__, dcov->encseq, dcov->readmode, dcov->sortedsample, 0, dcov->effectivesamplesize, false, /* specialsareequal */ false, /* specialsareequalatdepth0 */ (unsigned long) dcov->vparam); } } gt_bcktab_delete(dcov->bcktab); dcov->bcktab = NULL; dc_sortremainingsamples(dcov); if (withcheck && dcov->effectivesamplesize > 0) { gt_checksortedsuffixes(__FILE__, __LINE__, dcov->encseq, dcov->readmode, dcov->sortedsample, 0, dcov->effectivesamplesize, false, /* specialsareequal */ false, /* specialsareequalatdepth0 */ 0); dc_verify_inversesuftab(dcov); if (outlcpinfosample != NULL) { gt_Outlcpinfo_check_lcpvalues(dcov->encseq, dcov->readmode, dcov->sortedsample, dcov->effectivesamplesize, outlcpinfosample, false); } } if (outlcpinfosample != NULL) { gt_assert(mainsfxstrategy != NULL); dc_fill_samplelcpvalues(mainsfxstrategy->cmpcharbychar || !gt_encseq_bitwise_cmp_ok(dcov->encseq),dcov); if (withcheck) { gt_Outlcpinfo_check_lcpvalues(dcov->encseq, dcov->readmode, dcov->sortedsample, dcov->effectivesamplesize, outlcpinfosample, true); } } gt_encseq_reader_delete(dcov->esr1); dcov->esr1 = NULL; gt_encseq_reader_delete(dcov->esr2); dcov->esr2 = NULL; gt_suffixsortspace_delete(dcov->sortedsample,false); dcov->sortedsample = NULL; if (dcov->effectivesamplesize > 0 && outlcpinfosample != NULL) { size_t rmqsize; if (sfxprogress != NULL) { gt_timer_show_progress(sfxprogress,"preparing the RMQ",stdout); } dcov->rmq = gt_lcpvalues_rmq_new(dcov->samplelcpvalues); rmqsize = gt_rmq_size(dcov->rmq); gt_logger_log(dcov->logger, "RMQ requires %.2f MB (%.2f bytes per sample position)", GT_MEGABYTES(rmqsize), (double) rmqsize/dcov->samplesize); dcov->requiredspace += rmqsize; } gt_assert(dcov->diff2pos == NULL); dc_filldiff2pos(dcov); } static void dc_differencecover_sortsample0(GtDifferencecover *dcov, GtOutlcpinfo *outlcpinfosample, const Sfxstrategy *mainsfxstrategy, GT_UNUSED GtTimer *sfxprogress, bool withcheck) { unsigned long pos, posinserted, fullspecials = 0; unsigned int modvalue; Diffvalue *diffptr, *afterend; Sfxstrategy sfxstrategy; GtUchar cc; dcov->samplesize = 0; dcov->bcktab = NULL; dcov->multimappower = NULL; dcov->maxcode = 0; dcov->esr1 = NULL; dcov->esr2 = NULL; dcov->rangestobesorted = gt_inl_queue_new(MAX(16UL,GT_DIV2(dcov->maxcode))); dcov->filltable = NULL; dcov->leftborder = NULL; diffptr = dcov->diffvalues; afterend = dcov->diffvalues + dcov->size; for (pos = 0, modvalue = 0; pos <= dcov->totallength; pos++) { if (diffptr < afterend && (Diffvalue) modvalue == *diffptr) { dcov->samplesize++; if (pos < dcov->totallength) { cc = gt_encseq_get_encoded_char(dcov->encseq,pos,dcov->readmode); if (ISSPECIAL(cc)) { fullspecials++; } } else { fullspecials++; } diffptr++; } if (modvalue < dcov->vmodmask) { modvalue++; } else { modvalue = 0; diffptr = dcov->diffvalues; } } dcov->effectivesamplesize = dcov->samplesize - fullspecials; gt_logger_log(dcov->logger, "%lu positions are sampled (%.2f) pl=%u", dcov->samplesize, 100.0 * (double) dcov->samplesize/(dcov->totallength+1), dcov->prefixlength); gt_logger_log(dcov->logger,"fullspecials=%lu",fullspecials); dcov->sortedsample = gt_suffixsortspace_new(dcov->effectivesamplesize, dcov->totallength, sfxstrategy.suftabuint, dcov->logger); posinserted = 0; diffptr = dcov->diffvalues; afterend = dcov->diffvalues + dcov->size; for (pos = 0, modvalue = 0; pos < dcov->totallength; pos++) { if (diffptr < afterend && (Diffvalue) modvalue == *diffptr) { if (pos < dcov->totallength) { cc = gt_encseq_get_encoded_char(dcov->encseq,pos,dcov->readmode); if (ISNOTSPECIAL(cc)) { dc_suffixptrset(dcov,posinserted,pos); posinserted++; } } diffptr++; } if (modvalue < dcov->vmodmask) { modvalue++; } else { modvalue = 0; diffptr = dcov->diffvalues; } } gt_assert(posinserted == dcov->effectivesamplesize); dc_init_sfxstrategy_for_sample(&sfxstrategy, mainsfxstrategy, gt_encseq_bitwise_cmp_ok(dcov->encseq) ? false : true, dcov->effectivesamplesize, dcov->totallength, dcov->logger); gt_Outlcpinfo_reinit(outlcpinfosample,dcov->numofchars,dcov->prefixlength, dcov->effectivesamplesize); gt_sortallsuffixesfromstart(dcov->sortedsample, dcov->effectivesamplesize, dcov->encseq, dcov->readmode, outlcpinfosample, dcov->vparam, &sfxstrategy, dc_addunsortedrange, (void *) dcov, dcov->logger); if (withcheck && dcov->effectivesamplesize > 0) { gt_checksortedsuffixes(__FILE__, __LINE__, dcov->encseq, dcov->readmode, dcov->sortedsample, 0, dcov->effectivesamplesize, false, /* specialsareequal */ false, /* specialsareequalatdepth0 */ (unsigned long) dcov->vparam); } dc_sortremainingsamples(dcov); if (withcheck && dcov->effectivesamplesize > 0) { unsigned long idx; gt_checksortedsuffixes(__FILE__, __LINE__, dcov->encseq, dcov->readmode, dcov->sortedsample, 0, dcov->effectivesamplesize, false, /* specialsareequal */ false, /* specialsareequalatdepth0 */ 0); for (idx=0; idx < dcov->effectivesamplesize; idx++) { unsigned long idx2 = dc_inversesuftab_get(dcov,dc_suffixptrget(dcov,idx)); if (idx != idx2) { fprintf(stderr,"idx = %lu != %lu = idx2\n",idx,idx2); exit(GT_EXIT_PROGRAMMING_ERROR); } } } gt_suffixsortspace_delete(dcov->sortedsample,false); dcov->sortedsample = NULL; gt_assert(dcov->diff2pos == NULL); dc_filldiff2pos(dcov); } GtDifferencecover *gt_differencecover_prepare_sample( unsigned int vparam, const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, const Sfxstrategy *sfxstrategy, GtOutlcpinfo *outlcpinfosample, GtLogger *logger, GtTimer *sfxprogress, GtError *err) { GtDifferencecover *dcov = NULL; gt_assert(vparam > 0); if (sfxprogress != NULL) { gt_timer_show_progress(sfxprogress, (outlcpinfosample == NULL) ? "sorting difference cover sample" : ("sorting difference cover sample " "and determine their lcp values"), stdout); } dcov = gt_differencecover_new(vparam,encseq,readmode, prefixlength,logger); if (dcov == NULL) { gt_error_set(err,"no difference cover modulo %u found",vparam); } else { if (gt_differencecover_vparamverify(dcov,err) != 0) { gt_differencecover_delete(dcov); dcov = NULL; } else { gt_assert(sfxstrategy != NULL); gt_logger_log(logger,"presorting sample suffixes according to " "difference cover modulo %u",vparam); (prefixlength > 0 ? dc_differencecover_sortsample : dc_differencecover_sortsample0) (dcov,outlcpinfosample,sfxstrategy, sfxprogress, sfxstrategy->dccheck); } } return dcov; } void gt_differencecover_check(const GtEncseq *encseq,GtReadmode readmode) { GtDifferencecover *dcov; size_t logmod; const size_t startlogmod = (size_t) 4; unsigned int vparam; bool withcheck = true; printf("sizeof (differencecovertab)=%lu\n", (unsigned long) sizeof (differencecovertab)); for (logmod = startlogmod; logmod < sizeof (differencecoversizes)/sizeof (differencecoversizes[0]); logmod++) { vparam = 1U << logmod; dcov = gt_differencecover_new(vparam,encseq,readmode,0,NULL); if (dcov == NULL) { fprintf(stderr,"no difference cover for v=%u\n",vparam); exit(GT_EXIT_PROGRAMMING_ERROR); } printf("v=%u (size=%u)\n",dcov->vparam,dcov->size); if (withcheck) { dc_validate_samplepositons(dcov); } dc_differencecover_sortsample(dcov,NULL,NULL,NULL,withcheck); gt_differencecover_delete(dcov); } printf("# %u difference covers checked\n", (unsigned int) (logmod - startlogmod)); } genometools-1.5.1/src/match/sfx-diffcov.h000066400000000000000000000065201211610345200203210ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_DIFFCOV_H #define SFX_DIFFCOV_H #include "core/encseq.h" #include "core/unused_api.h" #include "core/readmode.h" #include "core/logger.h" #include "core/timer_api.h" #include "core/error_api.h" #include "sfx-strategy.h" #include "sfx-lcpvalues.h" #include "sfx-suffixgetset.h" typedef struct GtDifferencecover GtDifferencecover; /* The following function is used for test purposes only */ void gt_differencecover_check(const GtEncseq *encseq, GtReadmode readmode); GtDifferencecover *gt_differencecover_new(unsigned int vparam, const GtEncseq *encseq, GtReadmode readmode, unsigned int outerprefixlength, GtLogger *logger); unsigned long gt_differencecover_samplesize(const GtDifferencecover *dcov); GtDifferencecover *gt_differencecover_prepare_sample( unsigned int vparam, const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, const Sfxstrategy *sfxstrategy, GtOutlcpinfo *outlcpinfosample, GtLogger *logger, GtTimer *sfxprogress, GtError *err); bool gt_differencecover_is_empty(const GtDifferencecover *dcov); void gt_differencecover_delete(GtDifferencecover *dcov); size_t gt_differencecover_requiredspace(const GtDifferencecover *dcov); void gt_differencecover_sortunsortedbucket(void *data, unsigned long blisbl, unsigned long width, GT_UNUSED unsigned long depth); void gt_differencecover_completelargelcpvalues(void *data, const GtSuffixsortspace *sssp, GtLcpvalues *tableoflcpvalues, unsigned long width, unsigned long posoffset); void gt_differencecover_set_sssp_lcp(GtDifferencecover *dcov, GtSuffixsortspace *sssp, GtOutlcpinfo *outlcpinfo); #endif genometools-1.5.1/src/match/sfx-enumcodes.c000066400000000000000000000147051211610345200206620ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/assert_api.h" #include "core/codetype.h" #include "core/encseq.h" #include "sfx-enumcodes.h" #include "stamp.h" #include "initbasepower.h" struct Enumcodeatposition { GtRange previousrange; GtSpecialrangeiterator *sri; bool moveforward; unsigned long totallength; bool exhausted; const GtEncseq *encseq; GtReadmode readmode; unsigned int prefixlength; GtCodetype **multimappower, *filltable; }; Enumcodeatposition *gt_Enumcodeatposition_new(const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, unsigned int numofchars) { Enumcodeatposition *ecp; ecp = gt_malloc(sizeof *ecp); ecp->encseq = encseq; ecp->readmode = readmode; ecp->multimappower = gt_initmultimappower(numofchars,prefixlength); ecp->filltable = gt_initfilltable(numofchars,prefixlength); ecp->prefixlength = prefixlength; ecp->moveforward = GT_ISDIRREVERSE(readmode) ? true : false; ecp->totallength = gt_encseq_total_length(encseq); if (ecp->moveforward) { ecp->previousrange.start = ecp->previousrange.end = 0; } else { ecp->previousrange.start = ecp->previousrange.end = ecp->totallength; } ecp->exhausted = false; if (gt_encseq_has_specialranges(encseq)) { ecp->sri = gt_specialrangeiterator_new(encseq,ecp->moveforward); } else { ecp->sri = NULL; } return ecp; } static bool newcodelistelem(Specialcontext *specialcontext, unsigned long smallerval, unsigned long largerval, const Enumcodeatposition *ecp) { if (smallerval < largerval) { unsigned long distance = largerval - smallerval; if (distance > (unsigned long) (ecp->prefixlength-1)) { distance = (unsigned long) (ecp->prefixlength-1); } specialcontext->maxprefixindex = (unsigned int) distance; if (ecp->moveforward) { specialcontext->position = ecp->totallength - smallerval; } else { specialcontext->position = largerval; } gt_assert(specialcontext->position >= (unsigned long) specialcontext->maxprefixindex); return true; } return false; } bool gt_Enumcodeatposition_next(Specialcontext *specialcontext, Enumcodeatposition *ecp) { GtRange currentrange; bool done; if (ecp->exhausted) { return false; } while (ecp->sri != NULL) { if (!gt_specialrangeiterator_next(ecp->sri,¤trange)) { gt_specialrangeiterator_delete(ecp->sri); ecp->sri = NULL; break; } if (ecp->moveforward) { if (newcodelistelem(specialcontext, ecp->previousrange.end, currentrange.start, ecp)) { ecp->previousrange = currentrange; return true; } } else { if (newcodelistelem(specialcontext, currentrange.end, ecp->previousrange.start, ecp)) { ecp->previousrange = currentrange; return true; } } ecp->previousrange = currentrange; } ecp->exhausted = true; if (ecp->moveforward) { done = newcodelistelem(specialcontext, ecp->previousrange.end, ecp->totallength, ecp); } else { done = newcodelistelem(specialcontext, 0, ecp->previousrange.start, ecp); } return done; } void gt_Enumcodeatposition_delete(Enumcodeatposition *ecp) { if (ecp != NULL) { gt_free(ecp->filltable); gt_multimappower_delete(ecp->multimappower); gt_free(ecp); } } GtCodetype gt_Enumcodeatposition_filledqgramcode(const Enumcodeatposition *ecp, unsigned int prefixindex, unsigned long pos) { GtCodetype code; unsigned int idx; GtUchar cc; gt_assert(prefixindex > 0 && prefixindex < ecp->prefixlength); code = ecp->filltable[prefixindex]; for (idx=0; idxtotallength); cc = gt_encseq_get_encoded_char_nospecial(ecp->encseq, pos + idx, ecp->readmode); gt_assert(ISNOTSPECIAL(cc)); code += ecp->multimappower[idx][cc]; } return code; } bool gt_Enumcodeatposition_filledqgramcodestopatmax( GtCodetype *code, const Enumcodeatposition *ecp, unsigned int prefixindex, unsigned long pos, GtCodetype stopcode) { GtCodetype tmpcode; unsigned int idx; GtUchar cc; gt_assert(prefixindex > 0 && prefixindex < ecp->prefixlength); tmpcode = ecp->filltable[prefixindex]; if (tmpcode > stopcode) { return false; } for (idx=0; idxtotallength); cc = gt_encseq_get_encoded_char_nospecial(ecp->encseq, pos + idx, ecp->readmode); gt_assert(ISNOTSPECIAL(cc)); tmpcode += ecp->multimappower[idx][cc]; if (tmpcode > stopcode) { return false; } } *code = tmpcode; return true; } genometools-1.5.1/src/match/sfx-enumcodes.h000066400000000000000000000041541211610345200206640ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_ENUMCODES_H #define SFX_ENUMCODES_H #include "core/codetype.h" #include "core/encseq.h" typedef struct Enumcodeatposition Enumcodeatposition; typedef struct { unsigned int maxprefixindex; unsigned long position; } Specialcontext; Enumcodeatposition *gt_Enumcodeatposition_new(const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, unsigned int numofchars); bool gt_Enumcodeatposition_next(Specialcontext *specialcontext, Enumcodeatposition *ecp); void gt_Enumcodeatposition_delete(Enumcodeatposition *ecp); GtCodetype gt_Enumcodeatposition_filledqgramcode(const Enumcodeatposition *ecp, unsigned int prefixindex, unsigned long pos); bool gt_Enumcodeatposition_filledqgramcodestopatmax( GtCodetype *code, const Enumcodeatposition *ecp, unsigned int prefixindex, unsigned long pos, GtCodetype stopcode); #endif genometools-1.5.1/src/match/sfx-lcpvalues.c000066400000000000000000000724131211610345200206760ustar00rootroot00000000000000/* Copyright (c) 2007-2012 Stefan Kurtz Copyright (c) 2007-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/arraydef.h" #include "core/disc_distri_api.h" #include "core/fa.h" #include "core/minmax.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "extended/rmq.h" #include "esa-fileend.h" #include "sfx-lcpvalues.h" #include "turnwheels.h" GT_DECLAREARRAYSTRUCT(Largelcpvalue); typedef struct { FILE *outfplcptab, *outfpllvtab; GtArrayLargelcpvalue largelcpvalues; unsigned long maxbranchdepth, totalnumoflargelcpvalues, countoutputlcpvalues; void *reservoir; size_t sizereservoir; uint8_t *smalllcpvalues; /* pointer into reservoir */ } Lcpoutput2file; typedef struct { GtFinalProcessBucket final_process_bucket; void *final_process_bucket_info; } GtProcesslcpvalues; typedef struct { GtLcpvalues tableoflcpvalues; Lcpoutput2file *lcp2file; GtProcesslcpvalues *lcpprocess; double lcptabsum; GtDiscDistri *distlcpvalues; } Lcpsubtab; typedef struct { bool defined; GtCodetype code; unsigned int prefixindex; #undef SKDEBUG #ifdef SKDEBUG unsigned long startpos; #endif } Suffixwithcode; struct GtOutlcpinfo { Turningwheel *turnwheel; unsigned long numsuffixes2output; unsigned int minchanged; size_t sizeofinfo; Suffixwithcode previoussuffix; bool previousbucketwasempty, swallow_tail_lcpvalues; Lcpsubtab lcpsubtab; }; const GtLcpvaluetype *gt_lcptab_getptr(const GtLcpvalues *tableoflcpvalues, unsigned long subbucketleft) { return tableoflcpvalues->bucketoflcpvalues + tableoflcpvalues->lcptaboffset + subbucketleft; } /* Now some functions related to the computation of lcp values follow */ static unsigned long computelocallcpvalue(const Suffixwithcode *previoussuffix, const Suffixwithcode *currentsuffix, unsigned int minchanged) { unsigned int lcpvalue; if (previoussuffix->code == currentsuffix->code) { lcpvalue = MIN(previoussuffix->prefixindex, currentsuffix->prefixindex); } else { gt_assert(previoussuffix->code < currentsuffix->code); lcpvalue = MIN(previoussuffix->prefixindex,currentsuffix->prefixindex); if (minchanged < lcpvalue) { lcpvalue = minchanged; } } return (unsigned long) lcpvalue; } static void outsmalllcpvalues(Lcpoutput2file *lcp2file, unsigned long numoflcps) { gt_assert (lcp2file != NULL); lcp2file->countoutputlcpvalues += numoflcps; gt_assert(lcp2file->outfplcptab != NULL); gt_xfwrite(lcp2file->smalllcpvalues, sizeof (*lcp2file->smalllcpvalues), (size_t) numoflcps, lcp2file->outfplcptab); } static unsigned int lcp_bucketends(Lcpsubtab *lcpsubtab, Suffixwithcode *previoussuffix, GT_UNUSED unsigned long firstspecialsuffix, unsigned int minchanged, unsigned long nonspecialsinbucket, unsigned long specialsinbucket, GtCodetype code, const GtBcktab *bcktab) { unsigned long lcpvalue; unsigned int maxprefixindex, minprefixindex; Suffixwithcode firstspecialsuffixwithcode; /* there is at least one element in the bucket. if there is more than one element in the bucket, then we insert them using the information from the bcktab */ if (specialsinbucket > 1UL) { if (lcpsubtab->lcp2file != NULL) { maxprefixindex = gt_bcktab_pfxidx2lcpvalues_uint8( &minprefixindex, lcpsubtab->lcp2file->smalllcpvalues, specialsinbucket, bcktab, code); if (lcpsubtab->lcp2file->maxbranchdepth < (unsigned long) maxprefixindex) { lcpsubtab->lcp2file->maxbranchdepth = (unsigned long) maxprefixindex; } } else { unsigned long start = lcpsubtab->tableoflcpvalues.lcptaboffset + nonspecialsinbucket; maxprefixindex = gt_bcktab_pfxidx2lcpvalues_Lcpvaluetype( &minprefixindex, lcpsubtab->tableoflcpvalues.bucketoflcpvalues + start, specialsinbucket, bcktab, code); #ifndef NDEBUG { unsigned long idx; for (idx=start; idxtableoflcpvalues.isset,idx); } } #endif } } else { minprefixindex = maxprefixindex = gt_bcktab_singletonmaxprefixindex(bcktab, code); } firstspecialsuffixwithcode.code = code; firstspecialsuffixwithcode.prefixindex = maxprefixindex; #ifdef SKDEBUG firstspecialsuffixwithcode.startpos = firstspecialsuffix; /* gt_bcktab_consistencyofsuffix(__LINE__, encseq,readmode,bcktab,numofchars, &firstspecialsuffixwithcode); */ #endif lcpvalue = computelocallcpvalue(previoussuffix, &firstspecialsuffixwithcode, minchanged); if (lcpsubtab->lcp2file != NULL) { if (lcpsubtab->lcp2file->maxbranchdepth < lcpvalue) { lcpsubtab->lcp2file->maxbranchdepth = lcpvalue; } lcpsubtab->lcp2file->smalllcpvalues[0] = (uint8_t) lcpvalue; } else { gt_assert(lcpvalue <= GT_LCPVALUE_MAX); lcpsubtab->tableoflcpvalues.bucketoflcpvalues [lcpsubtab->tableoflcpvalues.lcptaboffset + nonspecialsinbucket] = (GtLcpvaluetype) lcpvalue; #ifndef NDEBUG GT_SETIBIT(lcpsubtab->tableoflcpvalues.isset, lcpsubtab->tableoflcpvalues.lcptaboffset + nonspecialsinbucket); #endif } return minprefixindex; } GtOutlcpinfo *gt_Outlcpinfo_new(const char *indexname, unsigned int numofchars, unsigned int prefixlength, bool withdistribution, bool swallow_tail_lcpvalues, GtFinalProcessBucket final_process_bucket, void *final_process_bucket_info, GtError *err) { bool haserr = false; GtOutlcpinfo *outlcpinfo; outlcpinfo = gt_malloc(sizeof (*outlcpinfo)); outlcpinfo->sizeofinfo = sizeof (*outlcpinfo); outlcpinfo->lcpsubtab.lcptabsum = 0.0; outlcpinfo->swallow_tail_lcpvalues = swallow_tail_lcpvalues; if (withdistribution) { outlcpinfo->lcpsubtab.distlcpvalues = gt_disc_distri_new(); } else { outlcpinfo->lcpsubtab.distlcpvalues = NULL; } if (indexname == NULL) { outlcpinfo->lcpsubtab.lcp2file = NULL; if (final_process_bucket != NULL) { outlcpinfo->lcpsubtab.lcpprocess = gt_malloc(sizeof (*outlcpinfo->lcpsubtab.lcpprocess)); outlcpinfo->lcpsubtab.lcpprocess->final_process_bucket = final_process_bucket; outlcpinfo->lcpsubtab.lcpprocess->final_process_bucket_info = final_process_bucket_info; } else { outlcpinfo->lcpsubtab.lcpprocess = NULL; } } else { outlcpinfo->lcpsubtab.lcpprocess = NULL; outlcpinfo->lcpsubtab.lcp2file = gt_malloc(sizeof (*outlcpinfo->lcpsubtab.lcp2file)); outlcpinfo->sizeofinfo += sizeof (*outlcpinfo->lcpsubtab.lcp2file); outlcpinfo->lcpsubtab.lcp2file->countoutputlcpvalues = 0; outlcpinfo->lcpsubtab.lcp2file->maxbranchdepth = 0; outlcpinfo->lcpsubtab.lcp2file->totalnumoflargelcpvalues = 0; outlcpinfo->lcpsubtab.lcp2file->reservoir = NULL; outlcpinfo->lcpsubtab.lcp2file->sizereservoir = 0; outlcpinfo->lcpsubtab.lcp2file->smalllcpvalues = NULL; GT_INITARRAY(&outlcpinfo->lcpsubtab.lcp2file->largelcpvalues, Largelcpvalue); outlcpinfo->lcpsubtab.lcp2file->outfplcptab = gt_fa_fopen_with_suffix(indexname,LCPTABSUFFIX,"wb",err); if (outlcpinfo->lcpsubtab.lcp2file->outfplcptab == NULL) { haserr = true; } if (!haserr) { outlcpinfo->lcpsubtab.lcp2file->outfpllvtab = gt_fa_fopen_with_suffix(indexname,LARGELCPTABSUFFIX,"wb",err); if (outlcpinfo->lcpsubtab.lcp2file->outfpllvtab == NULL) { haserr = true; } } } outlcpinfo->numsuffixes2output = 0; outlcpinfo->minchanged = 0; if (!haserr && prefixlength > 0) { outlcpinfo->turnwheel = gt_turningwheel_new(prefixlength,numofchars); outlcpinfo->sizeofinfo += gt_turningwheel_size(); } else { outlcpinfo->turnwheel = NULL; } #ifdef SKDEBUG outlcpinfo->previoussuffix.startpos = 0; #endif outlcpinfo->previoussuffix.code = 0; outlcpinfo->previoussuffix.prefixindex = 0; outlcpinfo->previoussuffix.defined = false; outlcpinfo->previousbucketwasempty = false; outlcpinfo->lcpsubtab.tableoflcpvalues.bucketoflcpvalues = NULL; outlcpinfo->lcpsubtab.tableoflcpvalues.numofentries = 0; #ifndef NDEBUG outlcpinfo->lcpsubtab.tableoflcpvalues.isset = NULL; #endif if (haserr) { gt_free(outlcpinfo); return NULL; } return outlcpinfo; } size_t gt_Outlcpinfo_size(const GtOutlcpinfo *outlcpinfo) { gt_assert(outlcpinfo != NULL); return outlcpinfo->sizeofinfo; } static size_t gt_tableoflcpvalues_realloc(GtLcpvalues *tableoflcpvalues, unsigned long numoflcpvalues) { if (numoflcpvalues > tableoflcpvalues->numofentries) { size_t sizeofinfo; tableoflcpvalues->bucketoflcpvalues = gt_realloc(tableoflcpvalues->bucketoflcpvalues, sizeof (*tableoflcpvalues->bucketoflcpvalues) * numoflcpvalues); sizeofinfo = sizeof (*tableoflcpvalues->bucketoflcpvalues) * (numoflcpvalues - tableoflcpvalues->numofentries); #ifndef NDEBUG GT_INITBITTABGENERIC(tableoflcpvalues->isset, tableoflcpvalues->isset, numoflcpvalues); #endif sizeofinfo += GT_NUMOFINTSFORBITS(numoflcpvalues - tableoflcpvalues->numofentries) * sizeof (GtBitsequence); tableoflcpvalues->numoflargelcpvalues = 0; tableoflcpvalues->numofentries = numoflcpvalues; tableoflcpvalues->lcptaboffset = 0; return sizeofinfo; } return 0; } void gt_Outlcpinfo_reinit(GtOutlcpinfo *outlcpinfo, unsigned int numofchars, unsigned int prefixlength, unsigned long numoflcpvalues) { if (outlcpinfo != NULL) { if (prefixlength > 0) { outlcpinfo->turnwheel = gt_turningwheel_new(prefixlength,numofchars); outlcpinfo->sizeofinfo += gt_turningwheel_size(); } else { outlcpinfo->turnwheel = NULL; } outlcpinfo->sizeofinfo += gt_tableoflcpvalues_realloc(&outlcpinfo->lcpsubtab.tableoflcpvalues, numoflcpvalues); } } static void outlcpvalues(Lcpsubtab *lcpsubtab, unsigned long width, unsigned long posoffset) { unsigned long idx, lcpvalue; Largelcpvalue *largelcpvalueptr; gt_assert(lcpsubtab != NULL && lcpsubtab->lcp2file != NULL); lcpsubtab->lcp2file->largelcpvalues.nextfreeLargelcpvalue = 0; if (lcpsubtab->tableoflcpvalues.numoflargelcpvalues > 0 && lcpsubtab->tableoflcpvalues.numoflargelcpvalues >= lcpsubtab->lcp2file->largelcpvalues.allocatedLargelcpvalue) { lcpsubtab->lcp2file->largelcpvalues.spaceLargelcpvalue = gt_realloc(lcpsubtab->lcp2file->largelcpvalues.spaceLargelcpvalue, sizeof (*lcpsubtab->lcp2file->largelcpvalues. spaceLargelcpvalue) * lcpsubtab->tableoflcpvalues.numoflargelcpvalues); lcpsubtab->lcp2file->largelcpvalues.allocatedLargelcpvalue = lcpsubtab->tableoflcpvalues.numoflargelcpvalues; } for (idx=0; idxtableoflcpvalues,0,idx); if (lcpsubtab->lcp2file->maxbranchdepth < lcpvalue) { lcpsubtab->lcp2file->maxbranchdepth = lcpvalue; } if (lcpvalue < (unsigned long) LCPOVERFLOW) { lcpsubtab->lcp2file->smalllcpvalues[idx] = (uint8_t) lcpvalue; } else { gt_assert(lcpsubtab->lcp2file->largelcpvalues.nextfreeLargelcpvalue < lcpsubtab->lcp2file->largelcpvalues. allocatedLargelcpvalue); largelcpvalueptr = lcpsubtab->lcp2file->largelcpvalues.spaceLargelcpvalue + lcpsubtab->lcp2file->largelcpvalues.nextfreeLargelcpvalue++; largelcpvalueptr->position = posoffset + idx; largelcpvalueptr->value = lcpvalue; lcpsubtab->lcp2file->smalllcpvalues[idx] = LCPOVERFLOW; } lcpsubtab->lcptabsum += (double) lcpvalue; if (lcpsubtab->distlcpvalues != NULL) { gt_disc_distri_add(lcpsubtab->distlcpvalues, lcpvalue); } } outsmalllcpvalues(lcpsubtab->lcp2file,width); if (lcpsubtab->lcp2file->largelcpvalues.nextfreeLargelcpvalue > 0) { lcpsubtab->lcp2file->totalnumoflargelcpvalues += lcpsubtab->lcp2file->largelcpvalues.nextfreeLargelcpvalue; gt_assert(lcpsubtab->lcp2file->outfpllvtab != NULL); gt_xfwrite(lcpsubtab->lcp2file->largelcpvalues.spaceLargelcpvalue, sizeof (*lcpsubtab->lcp2file->largelcpvalues. spaceLargelcpvalue), (size_t) lcpsubtab->lcp2file->largelcpvalues. nextfreeLargelcpvalue, lcpsubtab->lcp2file->outfpllvtab); } } static unsigned long outmany0lcpvalues(unsigned long many, FILE *outfplcptab) { unsigned long i, countout; #define GT_LCPBUF_NUMBEROFZEROS 1024 uint8_t outvalues[GT_LCPBUF_NUMBEROFZEROS] = {0}; countout = many/GT_LCPBUF_NUMBEROFZEROS; for (i=0; iturnwheel); if (outlcpinfo->lcpsubtab.lcp2file != NULL) { if (!outlcpinfo->swallow_tail_lcpvalues && outlcpinfo->lcpsubtab.lcp2file->countoutputlcpvalues < outlcpinfo->numsuffixes2output) { outlcpinfo->lcpsubtab.lcp2file->countoutputlcpvalues += outmany0lcpvalues(outlcpinfo->numsuffixes2output - outlcpinfo->lcpsubtab.lcp2file ->countoutputlcpvalues, outlcpinfo->lcpsubtab.lcp2file->outfplcptab); } gt_assert(outlcpinfo->swallow_tail_lcpvalues || outlcpinfo->lcpsubtab.lcp2file->countoutputlcpvalues == outlcpinfo->numsuffixes2output); GT_FREEARRAY(&outlcpinfo->lcpsubtab.lcp2file->largelcpvalues, Largelcpvalue); gt_fa_fclose(outlcpinfo->lcpsubtab.lcp2file->outfplcptab); gt_fa_fclose(outlcpinfo->lcpsubtab.lcp2file->outfpllvtab); gt_free(outlcpinfo->lcpsubtab.lcp2file->reservoir); outlcpinfo->lcpsubtab.lcp2file->smalllcpvalues = NULL; outlcpinfo->lcpsubtab.lcp2file->reservoir = NULL; outlcpinfo->lcpsubtab.lcp2file->sizereservoir = 0; gt_free(outlcpinfo->lcpsubtab.lcp2file); } else { gt_free(outlcpinfo->lcpsubtab.tableoflcpvalues.bucketoflcpvalues); #ifndef NDEBUG gt_free(outlcpinfo->lcpsubtab.tableoflcpvalues.isset); #endif } gt_free(outlcpinfo->lcpsubtab.lcpprocess); outlcpinfo->lcpsubtab.tableoflcpvalues.bucketoflcpvalues = NULL; #ifndef NDEBUG outlcpinfo->lcpsubtab.tableoflcpvalues.isset = NULL; #endif outlcpinfo->lcpsubtab.tableoflcpvalues.numofentries = 0; if (outlcpinfo->lcpsubtab.distlcpvalues != NULL) { gt_disc_distri_show(outlcpinfo->lcpsubtab.distlcpvalues,NULL); gt_disc_distri_delete(outlcpinfo->lcpsubtab.distlcpvalues); } gt_free(outlcpinfo); } void gt_Outlcpinfo_check_lcpvalues(const GtEncseq *encseq, GtReadmode readmode, const GtSuffixsortspace *sortedsample, unsigned long effectivesamplesize, const GtOutlcpinfo *outlcpinfosample, bool checkequality) { GT_UNUSED int cmp; unsigned long idx, reallcp, startpos1, startpos2, currentlcp, totalcmpmissing = 0; if (effectivesamplesize == 0) { return; } startpos1 = gt_suffixsortspace_getdirect(sortedsample,0); for (idx=1UL; idxlcpsubtab.tableoflcpvalues .isset,idx)); currentlcp = (unsigned long) outlcpinfosample->lcpsubtab.tableoflcpvalues. bucketoflcpvalues[idx]; if ((checkequality && currentlcp != reallcp) || (!checkequality && currentlcp > reallcp)) { fprintf(stderr,"idx=%lu,suffixpair=%lu,%lu: " "currentlcp = %lu %s %lu = reallcp\n", idx,startpos1,startpos2,currentlcp, checkequality ? "!=" : ">",reallcp); gt_encseq_showatstartposwithdepth(stderr,encseq,readmode,startpos1,50UL); fprintf(stderr,"\n"); gt_encseq_showatstartposwithdepth(stderr,encseq,readmode,startpos2,50UL); fprintf(stderr,"\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } else { totalcmpmissing += (reallcp - currentlcp); } startpos1 = startpos2; } /*printf("totalcmpmissing = %lu(avg=%.2f)\n", totalcmpmissing,(double) totalcmpmissing/effectivesamplesize);*/ } unsigned long gt_Outlcpinfo_numoflargelcpvalues(const GtOutlcpinfo *outlcpinfo) { if (outlcpinfo->lcpsubtab.lcp2file != NULL) { return outlcpinfo->lcpsubtab.lcp2file->totalnumoflargelcpvalues; } return 0; } double gt_Outlcpinfo_lcptabsum(const GtOutlcpinfo *outlcpinfo) { gt_assert(outlcpinfo != NULL); return outlcpinfo->lcpsubtab.lcptabsum; } void gt_Outlcpinfo_numsuffixes2output_set(GtOutlcpinfo *outlcpinfo, unsigned long numsuffixes2output) { outlcpinfo->numsuffixes2output = numsuffixes2output; } unsigned long gt_Outlcpinfo_maxbranchdepth(const GtOutlcpinfo *outlcpinfo) { if (outlcpinfo->lcpsubtab.lcp2file != NULL) { return outlcpinfo->lcpsubtab.lcp2file->maxbranchdepth; } return 0; } void gt_Outlcpinfo_prebucket(GtOutlcpinfo *outlcpinfo, GtCodetype code, unsigned long lcptaboffset) { if (outlcpinfo != NULL) { if (outlcpinfo->lcpsubtab.lcp2file != NULL || outlcpinfo->lcpsubtab.lcpprocess != NULL) { outlcpinfo->lcpsubtab.tableoflcpvalues.numoflargelcpvalues = 0; } else { outlcpinfo->lcpsubtab.tableoflcpvalues.lcptaboffset = lcptaboffset; } if (code > 0) { (void) gt_turningwheel_next(outlcpinfo->turnwheel); if (outlcpinfo->previousbucketwasempty) { outlcpinfo->minchanged = MIN(outlcpinfo->minchanged, gt_turningwheel_minchanged(outlcpinfo->turnwheel)); } else { outlcpinfo->minchanged = gt_turningwheel_minchanged(outlcpinfo->turnwheel); } } } } void gt_Outlcpinfo_nonspecialsbucket(GtOutlcpinfo *outlcpinfo, unsigned int prefixlength, const GtSuffixsortspace *sssp, GtLcpvalues *tableoflcpvalues, const GtBucketspecification *bucketspec, GtCodetype code) { if (outlcpinfo != NULL) { unsigned long lcpvalue; Suffixwithcode firstsuffixofbucket; if (outlcpinfo->previoussuffix.defined) { /* compute lcpvalue of first element of bucket with last element of previous bucket */ firstsuffixofbucket.code = code; firstsuffixofbucket.prefixindex = prefixlength; #ifdef SKDEBUG firstsuffixofbucket.startpos = gt_suffixsortspace_get(sssp,0,bucketspec->left); /* gt_bcktab_consistencyofsuffix(__LINE__, encseq,readmode,bcktab,numofchars, &firstsuffixofbucket); */ #endif lcpvalue = computelocallcpvalue(&outlcpinfo->previoussuffix, &firstsuffixofbucket, outlcpinfo->minchanged); } else { /* first part first code */ lcpvalue = 0; } gt_lcptab_update(tableoflcpvalues,0,0,lcpvalue); /* all other lcp-values are computed and they can be output */ if (outlcpinfo->lcpsubtab.lcp2file != NULL) { outlcpvalues(&outlcpinfo->lcpsubtab, bucketspec->nonspecialsinbucket, bucketspec->left); } else { if (outlcpinfo->lcpsubtab.lcpprocess != NULL) { outlcpinfo->lcpsubtab.lcpprocess->final_process_bucket( outlcpinfo->lcpsubtab.lcpprocess->final_process_bucket_info, sssp, tableoflcpvalues, 0, bucketspec->nonspecialsinbucket, bucketspec->left); } } /* previoussuffix becomes last nonspecial element in current bucket */ outlcpinfo->previoussuffix.code = code; outlcpinfo->previoussuffix.prefixindex = prefixlength; #ifdef SKDEBUG outlcpinfo->previoussuffix.startpos = gt_suffixsortspace_get(sssp,0, bucketspec->left + bucketspec->nonspecialsinbucket - 1); /* gt_bcktab_consistencyofsuffix(__LINE__, encseq,readmode,bcktab,numofchars, &outlcpinfo->previoussuffix); */ #endif } } void gt_Outlcpinfo_postbucket(GtOutlcpinfo *outlcpinfo, unsigned int prefixlength, const GtSuffixsortspace *sssp, const GtBcktab *bcktab, const GtBucketspecification *bucketspec, GtCodetype code) { if (outlcpinfo != NULL) { if (bucketspec->specialsinbucket > 0) { unsigned int minprefixindex; unsigned long suffixvalue = gt_suffixsortspace_get(sssp, 0, bucketspec->left + bucketspec->nonspecialsinbucket); minprefixindex = lcp_bucketends(&outlcpinfo->lcpsubtab, &outlcpinfo->previoussuffix, /* first special element in bucket */ suffixvalue, outlcpinfo->minchanged, bucketspec->nonspecialsinbucket, bucketspec->specialsinbucket, code, bcktab); if (outlcpinfo->lcpsubtab.lcp2file != NULL) { outsmalllcpvalues(outlcpinfo->lcpsubtab.lcp2file, bucketspec->specialsinbucket); } else { if (outlcpinfo->lcpsubtab.lcpprocess != NULL) { outlcpinfo->lcpsubtab.lcpprocess->final_process_bucket( outlcpinfo->lcpsubtab.lcpprocess->final_process_bucket_info, sssp, &outlcpinfo->lcpsubtab.tableoflcpvalues, bucketspec->nonspecialsinbucket, bucketspec->specialsinbucket, bucketspec->left); } } /* there is at least one special element: this is the last element in the bucket, and thus the previoussuffix for the next round */ outlcpinfo->previoussuffix.defined = true; outlcpinfo->previoussuffix.code = code; outlcpinfo->previoussuffix.prefixindex = minprefixindex; #ifdef SKDEBUG outlcpinfo->previoussuffix.startpos = gt_suffixsortspace_get(sssp, 0, bucketspec->left + bucketspec->nonspecialsinbucket + bucketspec->specialsinbucket - 1); /* gt_bcktab_consistencyofsuffix(__LINE__, encseq,readmode,bcktab,numofchars, &outlcpinfo->previoussuffix); */ #endif } else { if (bucketspec->nonspecialsinbucket > 0) { /* if there is at least one element in the bucket, then the last one becomes the next previous suffix */ outlcpinfo->previoussuffix.defined = true; outlcpinfo->previoussuffix.code = code; outlcpinfo->previoussuffix.prefixindex = prefixlength; #ifdef SKDEBUG outlcpinfo->previoussuffix.startpos = gt_suffixsortspace_get(sssp, 0, bucketspec.left + bucketspec.nonspecialsinbucket-1); /* gt_bcktab_consistencyofsuffix(__LINE__, encseq,readmode,bcktab,numofchars, &outlcpinfo->previoussuffix); */ #endif } } if (bucketspec->nonspecialsinbucket + bucketspec->specialsinbucket == 0) { outlcpinfo->previousbucketwasempty = true; } else { outlcpinfo->previousbucketwasempty = false; } if (outlcpinfo->lcpsubtab.lcp2file != NULL || outlcpinfo->lcpsubtab.lcpprocess != NULL) { gt_assert(outlcpinfo->lcpsubtab.tableoflcpvalues.lcptaboffset == 0); } else { outlcpinfo->lcpsubtab.tableoflcpvalues.lcptaboffset = 0; } } } GtLcpvalues *gt_Outlcpinfo_resizereservoir(GtOutlcpinfo *outlcpinfo, const GtBcktab *bcktab) { Lcpsubtab *lcpsubtab; gt_assert(outlcpinfo != NULL); lcpsubtab = &outlcpinfo->lcpsubtab; if (lcpsubtab->lcp2file != NULL) { size_t sizeforlcpvalues; /* in bytes */ gt_assert(bcktab != NULL); sizeforlcpvalues = gt_bcktab_sizeforlcpvalues(bcktab); if (lcpsubtab->lcp2file->sizereservoir < sizeforlcpvalues) { lcpsubtab->lcp2file->sizereservoir = sizeforlcpvalues; lcpsubtab->lcp2file->reservoir = gt_realloc(lcpsubtab->lcp2file->reservoir, lcpsubtab->lcp2file->sizereservoir); /* point to the same area, since this is not used simultaneously */ /* be careful for the parallel version */ lcpsubtab->lcp2file->smalllcpvalues = (uint8_t *) lcpsubtab->lcp2file->reservoir; #ifndef NDEBUG lcpsubtab->tableoflcpvalues.isset = NULL; #endif lcpsubtab->tableoflcpvalues.bucketoflcpvalues = (GtLcpvaluetype *) lcpsubtab->lcp2file->reservoir; lcpsubtab->tableoflcpvalues.lcptaboffset = 0; lcpsubtab->tableoflcpvalues.numofentries = (unsigned long) lcpsubtab->lcp2file->sizereservoir/ sizeof (*lcpsubtab->tableoflcpvalues.bucketoflcpvalues); } } else { if (lcpsubtab->lcpprocess != NULL) { outlcpinfo->sizeofinfo += gt_tableoflcpvalues_realloc(&lcpsubtab->tableoflcpvalues, gt_bcktab_maxbucketsize(bcktab)); } } return &lcpsubtab->tableoflcpvalues; } GtLcpvalues *gt_Outlcpinfo_lcpvalues_ref(GtOutlcpinfo *outlcpinfo) { gt_assert(outlcpinfo != NULL); return &outlcpinfo->lcpsubtab.tableoflcpvalues; } GtRMQ *gt_lcpvalues_rmq_new(const GtLcpvalues *samplelcpvalues) { return gt_rmq_new(samplelcpvalues->bucketoflcpvalues, samplelcpvalues->numofentries); } genometools-1.5.1/src/match/sfx-lcpvalues.h000066400000000000000000000156301211610345200207010ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_LCPVALUES_H #define SFX_LCPVALUES_H #include "core/error_api.h" #include "core/codetype.h" #include "core/unused_api.h" #include "core/encseq.h" #include "extended/rmq.h" #include "lcpoverflow.h" #include "bcktab.h" #include "sfx-suffixgetset.h" typedef struct GtOutlcpinfo GtOutlcpinfo; typedef struct { #ifndef NDEBUG GtBitsequence *isset; #endif GtLcpvaluetype *bucketoflcpvalues; unsigned long numofentries, numoflargelcpvalues, lcptaboffset; /* This can be positive when the lcp-values for an entire range of suffixes (covering more than one bucket) must be sorted, as in the case of the difference cover. In other cases, only the lcp-values for a single bucket must be computed, which means that the value is 0. */ } GtLcpvalues; typedef void (*GtFinalProcessBucket)(void *, const GtSuffixsortspace *, const GtLcpvalues *, unsigned long, unsigned long, unsigned long); /*@unused@*/ static inline void gt_lcptab_update(GtLcpvalues *tableoflcpvalues, unsigned long subbucketleft, unsigned long idx, unsigned long value) { gt_assert (tableoflcpvalues != NULL && tableoflcpvalues->bucketoflcpvalues != NULL && tableoflcpvalues->lcptaboffset+subbucketleft+idx < tableoflcpvalues->numofentries); #ifndef NDEBUG if (tableoflcpvalues->isset != NULL) { GT_SETIBIT(tableoflcpvalues->isset, tableoflcpvalues->lcptaboffset+subbucketleft+idx); } #endif gt_assert(value <= GT_LCPVALUE_MAX); tableoflcpvalues->bucketoflcpvalues[tableoflcpvalues->lcptaboffset + subbucketleft + idx] = (GtLcpvaluetype) value; if (value >= (unsigned long) LCPOVERFLOW) { tableoflcpvalues->numoflargelcpvalues++; /* this may overcount as there may be some value at index which was already overflowing */ } } /*@unused@*/ static inline unsigned long gt_lcptab_getvalue( const GtLcpvalues *tableoflcpvalues, unsigned long subbucketleft, unsigned long idx) { gt_assert (tableoflcpvalues != NULL && tableoflcpvalues->bucketoflcpvalues != NULL && tableoflcpvalues->lcptaboffset+subbucketleft+idx < tableoflcpvalues->numofentries); gt_assert(tableoflcpvalues->isset == NULL || GT_ISIBITSET(tableoflcpvalues->isset, tableoflcpvalues->lcptaboffset+subbucketleft+idx)); return (unsigned long) tableoflcpvalues->bucketoflcpvalues [tableoflcpvalues->lcptaboffset+subbucketleft+idx]; } const GtLcpvaluetype *gt_lcptab_getptr(const GtLcpvalues *tableoflcpvalues, unsigned long subbucketleft); GtOutlcpinfo *gt_Outlcpinfo_new(const char *indexname, unsigned int numofchars, unsigned int prefixlength, bool withdistribution, bool swallow_tail_lcpvalues, GtFinalProcessBucket final_process_bucket, void *final_process_bucket_info, GtError *err); size_t gt_Outlcpinfo_size(const GtOutlcpinfo *outlcpinfo); void gt_Outlcpinfo_reinit(GtOutlcpinfo *outlcpinfo, unsigned int numofchars, unsigned int prefixlength, unsigned long numoflcpvalues); void gt_Outlcpinfo_delete(GtOutlcpinfo *outlcpinfo); unsigned long gt_Outlcpinfo_numoflargelcpvalues(const GtOutlcpinfo *outlcpinfo); double gt_Outlcpinfo_lcptabsum(const GtOutlcpinfo *outlcpinfo); void gt_Outlcpinfo_numsuffixes2output_set(GtOutlcpinfo *outlcpinfo, unsigned long numsuffixes2output); unsigned long gt_Outlcpinfo_maxbranchdepth(const GtOutlcpinfo *outlcpinfo); void gt_Outlcpinfo_prebucket(GtOutlcpinfo *outlcpinfo, GtCodetype code, unsigned long lcptaboffset); void gt_Outlcpinfo_nonspecialsbucket(GtOutlcpinfo *outlcpinfo, unsigned int prefixlength, const GtSuffixsortspace *sssp, GtLcpvalues *tableoflcpvalues, const GtBucketspecification *bucketspec, GtCodetype code); void gt_Outlcpinfo_postbucket(GtOutlcpinfo *outlcpinfo, unsigned int prefixlength, const GtSuffixsortspace *sssp, const GtBcktab *bcktab, const GtBucketspecification *bucketspec, GtCodetype code); GtLcpvalues *gt_Outlcpinfo_resizereservoir(GtOutlcpinfo *outlcpinfo, const GtBcktab *bcktab); GtLcpvalues *gt_Outlcpinfo_lcpvalues_ref(GtOutlcpinfo *outlcpinfo); void gt_Outlcpinfo_check_lcpvalues(const GtEncseq *encseq, GtReadmode readmode, const GtSuffixsortspace *sortedsample, unsigned long effectivesamplesize, const GtOutlcpinfo *outlcpinfosample, bool checkequality); GtRMQ *gt_lcpvalues_rmq_new(const GtLcpvalues *samplelcpvalues); #endif genometools-1.5.1/src/match/sfx-linlcp.c000066400000000000000000000622451211610345200201630ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/chardef.h" #include "core/ma_api.h" #include "core/encseq.h" #include "core/range.h" #include "core/mathsupport.h" #include "core/logger.h" #include "core/compact_ulong_store.h" #include "esa-seqread.h" #include "sarr-def.h" #include "sfx-linlcp.h" unsigned long *gt_lcp13_manzini(const GtEncseq *encseq, GtReadmode readmode, unsigned long partwidth, unsigned long totallength, const ESASuffixptr *suftab, GtCompactUlongStore *inversesuftab) { unsigned long pos, lcpvalue = 0, *lcptab; lcptab = gt_malloc(sizeof (unsigned long) * partwidth); lcptab[0] = 0; for (pos=0; pos <= totallength; pos++) { unsigned long fillpos = gt_compact_ulong_store_get(inversesuftab,pos); if (fillpos > 0 && fillpos < partwidth) { unsigned long previousstart = ESASUFFIXPTRGET(suftab,fillpos-1); while (pos+lcpvalue < totallength && previousstart+lcpvalue < totallength) { GtUchar cc1, cc2; cc1 = gt_encseq_get_encoded_char(encseq,pos+lcpvalue,readmode); cc2 = gt_encseq_get_encoded_char(encseq,previousstart+lcpvalue, readmode); if (cc1 == cc2 && ISNOTSPECIAL(cc1)) { lcpvalue++; } else { break; } } lcptab[fillpos] = lcpvalue; } if (lcpvalue > 0) { lcpvalue--; } } return lcptab; } static unsigned long *computeocclesstab(const GtEncseq *encseq, GtReadmode readmode) { unsigned long *occless; unsigned int charidx, numofchars; numofchars = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); occless = gt_malloc(sizeof (unsigned long) * numofchars); occless[0] = 0; for (charidx = 1U; charidx < numofchars; charidx++) { unsigned long count; if (GT_ISDIRCOMPLEMENT(readmode)) { count = gt_encseq_charcount(encseq, (GtUchar) GT_COMPLEMENTBASE(charidx-1)); } else { count = gt_encseq_charcount(encseq,(GtUchar) (charidx-1)); } occless[charidx] = occless[charidx-1] + count; } return occless; } /* for computing the ranknext-values of special positions, we only need the values inversesuftab[range.end] in this order, where range is a special range Now, if range.end = suffixarray[i] for some i, then inversesuftab[range.end] = inversesuftab[suffixarray[i]] = i. Thus, in case where the inversesuftab is not available, we obtain these values by the following function: */ static void setrelevantfrominversetab(GtCompactUlongStore *rightposinverse, const GtEncseq *encseq, GtReadmode readmode, const ESASuffixptr *suftab, unsigned long partwidth) { if (gt_encseq_has_specialranges(encseq)) { unsigned long idx, pos; for (idx = 0; idx < partwidth; idx++) { pos = ESASUFFIXPTRGET(suftab,idx); if (pos > 0) { GtUchar cc = gt_encseq_get_encoded_char(encseq,pos-1,readmode); if (ISSPECIAL(cc)) { gt_compact_ulong_store_update(rightposinverse,pos,idx); } } } } } static unsigned long *fillrightofpartwidth( const GtCompactUlongStore *rightposinverse, const GtEncseq *encseq, GtReadmode readmode, unsigned long partwidth, unsigned long totallength) { GtSpecialrangeiterator *sri; GtRange range; unsigned long countlargeranges, *rightofpartwidth = NULL, nextrightofpartwidth = 0; countlargeranges = gt_encseq_realspecialranges(encseq); sri = gt_specialrangeiterator_new(encseq, GT_ISDIRREVERSE(readmode) ? false : true); while (gt_specialrangeiterator_next(sri,&range)) { if (GT_ISDIRREVERSE(readmode)) { gt_range_reverse(totallength,&range); } if (range.end < partwidth) { gt_assert(countlargeranges > 0); countlargeranges--; } else { if (rightofpartwidth == NULL) { size_t allocsize = sizeof (*rightofpartwidth) * countlargeranges; rightofpartwidth = gt_malloc(allocsize); /*printf("allocated %lu bytes for rightofpartwidth (%.2f)\n", (unsigned long) allocsize, (double) allocsize/totallength);*/ } gt_assert(nextrightofpartwidth < countlargeranges); rightofpartwidth[nextrightofpartwidth++] = gt_compact_ulong_store_get(rightposinverse,range.end); } } gt_specialrangeiterator_delete(sri); return rightofpartwidth; } static void inversesuffixarray2specialranknext( const GtCompactUlongStore *rightposinverse, GtCompactUlongStore *ranknext, const GtEncseq *encseq, GtReadmode readmode, unsigned long partwidth, unsigned long totallength) { if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; unsigned long idx, *rightofpartwidth = NULL, specialranklistindex, nextrightofpartwidth = 0; rightofpartwidth = fillrightofpartwidth(rightposinverse, encseq, readmode, partwidth, totallength); specialranklistindex = partwidth; sri = gt_specialrangeiterator_new(encseq, GT_ISDIRREVERSE(readmode) ? false : true); nextrightofpartwidth = 0; while (gt_specialrangeiterator_next(sri,&range)) { if (GT_ISDIRREVERSE(readmode)) { gt_range_reverse(totallength,&range); } gt_assert(range.end <= totallength); for (idx = range.start; idx < range.end-1; idx++) { gt_assert(specialranklistindex < totallength); gt_compact_ulong_store_update(ranknext,specialranklistindex, specialranklistindex + 1); specialranklistindex++; } gt_assert(specialranklistindex < totallength); if (range.end < partwidth) { gt_compact_ulong_store_update(ranknext,specialranklistindex, gt_compact_ulong_store_get( rightposinverse,range.end)); } else { gt_compact_ulong_store_update(ranknext,specialranklistindex, rightofpartwidth[nextrightofpartwidth]); nextrightofpartwidth++; } specialranklistindex++; } gt_free(rightofpartwidth); gt_assert(specialranklistindex == totallength); gt_specialrangeiterator_delete(sri); } } static unsigned long sa2ranknext(GtCompactUlongStore *ranknext, const GtEncseq *encseq, GtReadmode readmode, unsigned long partwidth, unsigned long totallength, const ESASuffixptr *suftab) { unsigned long idx, pos, longest = 0, *occless; gt_assert(partwidth > 0); occless = computeocclesstab(encseq,readmode); /* now inveresuftab is not used any more, and thus the ranknext array (which points to ranknext can savely be stored */ for (idx=0; idx < partwidth; idx++) { pos = ESASUFFIXPTRGET(suftab,idx); if (pos > 0) { GtUchar cc = gt_encseq_get_encoded_char(encseq,pos-1, readmode); if (ISNOTSPECIAL(cc)) { gt_assert(occless[cc] < partwidth); gt_compact_ulong_store_update(ranknext,occless[cc],idx); occless[cc]++; } } else { longest = idx; } } if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; unsigned long specialidx; sri = gt_specialrangeiterator_new(encseq, GT_ISDIRREVERSE(readmode) ? false : true); gt_assert(partwidth > 0); /* otherwise all lcps would be 0 */ specialidx = partwidth; while (gt_specialrangeiterator_next(sri,&range)) { if (GT_ISDIRREVERSE(readmode)) { gt_range_reverse(totallength,&range); } gt_assert(range.start < range.end); if (range.start > 0) { GtUchar cc = gt_encseq_get_encoded_char(encseq,range.start-1,readmode); if (ISNOTSPECIAL(cc)) { gt_assert(occless[cc] < partwidth); gt_compact_ulong_store_update(ranknext, occless[cc], specialidx); occless[cc]++; } } else { longest = partwidth; } specialidx += range.end - range.start; } if ((GT_ISDIRREVERSE(readmode) && gt_encseq_lengthofspecialprefix(encseq) > 0) || (!GT_ISDIRREVERSE(readmode) && gt_encseq_lengthofspecialsuffix(encseq) > 0)) { gt_compact_ulong_store_update(ranknext,totallength-1,totallength); } gt_specialrangeiterator_delete(sri); } gt_free(occless); return longest; } GtCompactUlongStore *gt_lcp9_manzini(GtCompactUlongStore *spacefortab, const GtEncseq *encseq, GtReadmode readmode, unsigned long partwidth, unsigned long totallength, const ESASuffixptr *suftab) { unsigned long pos, previousstart, nextfillpos = 0, fillpos, lcpvalue = 0, previouscc1pos, previouscc2pos; GtCompactUlongStore *lcptab, *ranknext, *rightposinverse; GtUchar cc1, cc2; GtEncseqReader *esr1, *esr2; if (spacefortab == NULL) { unsigned int bitsperentry = gt_determinebitspervalue(totallength); rightposinverse = ranknext = gt_compact_ulong_store_new(totallength+1,bitsperentry); gt_compact_ulong_store_update(ranknext,totallength,totallength); setrelevantfrominversetab(rightposinverse,encseq,readmode,suftab, partwidth); } else { rightposinverse = ranknext = spacefortab; } inversesuffixarray2specialranknext(rightposinverse,ranknext, encseq, readmode, partwidth, totallength); fillpos = sa2ranknext(ranknext,encseq,readmode,partwidth,totallength, suftab); lcptab = ranknext; /* now ranknext and lcptab point to the same memory area. After reading ranknext at position fillpos, the same cell is used for storing the determined lcp-value */ /* exploit the fact, that pos + lcpvalue is monotone */ esr1 = gt_encseq_create_reader_with_readmode(encseq, readmode,0); cc1 = gt_encseq_reader_next_encoded_char(esr1); previouscc1pos = 0; esr2 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); previouscc2pos = totallength; cc2 = 0; for (pos = 0; pos < totallength; pos++) { if (pos < totallength - 1) { nextfillpos = gt_compact_ulong_store_get(ranknext,fillpos); } if (fillpos > 0 && fillpos - 1 < partwidth) { previousstart = ESASUFFIXPTRGET(suftab,fillpos-1); while (pos+lcpvalue < totallength && previousstart+lcpvalue < totallength) { gt_assert(pos + lcpvalue >= previouscc1pos); while (previouscc1pos < pos + lcpvalue) { previouscc1pos++; cc1 = gt_encseq_reader_next_encoded_char(esr1); } if (ISSPECIAL(cc1)) { break; } if (previousstart+lcpvalue < previouscc2pos || previousstart+lcpvalue > previouscc2pos+1) { previouscc2pos = previousstart+lcpvalue; gt_encseq_reader_reinit_with_readmode(esr2, encseq, readmode, previouscc2pos); cc2 = gt_encseq_reader_next_encoded_char(esr2); } else { if (previousstart+lcpvalue == previouscc2pos+1) { previouscc2pos++; cc2 = gt_encseq_reader_next_encoded_char(esr2); } else { gt_assert(previousstart+lcpvalue == previouscc2pos); } } if (cc1 != cc2) { break; } lcpvalue++; } gt_compact_ulong_store_update(lcptab,fillpos,lcpvalue); if (lcpvalue > 0) { lcpvalue--; } } fillpos = nextfillpos; } gt_encseq_reader_delete(esr1); gt_encseq_reader_delete(esr2); return lcptab; } static unsigned long gt_check_for_range_occurrence(const ESASuffixptr *suftab, unsigned long suffix, unsigned long start, unsigned long end) { unsigned long idx; for (idx = start; idx <= end; idx++) { unsigned long position = ESASUFFIXPTRGET(suftab,idx); if (suffix == position) { return idx; } } return ULONG_MAX; } typedef struct { unsigned long start, end; GtUchar firstchar; } GtRangewithchar; /* The following funktion implements the linear time algorithm of @INPROCEEDINGS{BUR:KAER:2003, author = {Burkhardt, S. and K{\"a}rkk{\"a}inen, J.}, title = {{Fast Lightweight Suffix Array Construction and Checking}}, booktitle = {{Proceedings of the 14th Annual Symposium on Combinatorial Pattern Matching (CPM)}}, year = {2003}, editor = {{Baeza-Yates, R. and Ch{\'a}vez, E. and Crochemore, M.}}, volume = {2676}, series = {LNCS}, pages = {200-210}, publisher = {Springer-Verlag} } to check the following suffix-order condition of the sorted suffix array: For all characters c, if SA[i,j] contains the suffixes starting with charcter c, then SA[i]+1, SA[i+1]+1, \ldots, SA[j]+1 occur in SA in this order (but not consecutively in general). The running time of the algorithm is independent of the alphabet size. The main problem is that it requires random access to the sequence which slows it down. */ static void gt_suftab_bk_suffixorder(const GtEncseq *encseq, GtReadmode readmode, unsigned long totallength, unsigned int numofchars, const ESASuffixptr *suftab, const GtRangewithchar *rangestore, unsigned int numofranges) { unsigned int rangeidx; unsigned long idx, *nexttab = gt_calloc((size_t) numofchars,sizeof(*nexttab)); for (rangeidx = 0; rangeidx < numofranges; rangeidx++) { nexttab[rangestore[rangeidx].firstchar] = rangestore[rangeidx].start; } for (idx = 0; idx < totallength; idx++) { unsigned long position = ESASUFFIXPTRGET(suftab,idx); if (position > 0) { GtUchar cc = gt_encseq_get_encoded_char(encseq,position - 1,readmode); if (ISNOTSPECIAL(cc)) { unsigned long checkpos; checkpos = ESASUFFIXPTRGET(suftab,nexttab[(int) cc]) + 1; if (checkpos != position) { fprintf(stderr,"idx=%lu,checkpos=%lu,position=%lu\n", idx,checkpos,position); exit(GT_EXIT_PROGRAMMING_ERROR); } nexttab[(int) cc]++; } } } gt_free(nexttab); } /* The following function checks the suffix-order condition described above using an O(\sigma n) algorithm where \sigma is the alphabet size and n is the length of the suffix array. The algorithm does not access the sequence and performs \sigma linear scans of the suffix array. This makes it faster than the previous method. It is probably possible to perform the check in one linear scan. */ static void gt_suftab_sk_suffixorder(unsigned long totallength, unsigned int numofchars, const ESASuffixptr *suftab, const GtRangewithchar *rangestore, unsigned int numofranges) { unsigned int rangeidx; unsigned long numofcomparisons = 0; double ratio; for (rangeidx = 0; rangeidx < numofranges; rangeidx++) { unsigned long idx, start = 0; for (idx = rangestore[rangeidx].start; idx <= rangestore[rangeidx].end; idx++) { unsigned long position = ESASUFFIXPTRGET(suftab,idx); if (position + 1 <= totallength) { unsigned long found = gt_check_for_range_occurrence(suftab, position + 1, start, totallength); if (found == ULONG_MAX) { fprintf(stderr,"Cannot find position+1=%lu in range [%lu,%lu]\n", position+1,start,totallength); exit(GT_EXIT_PROGRAMMING_ERROR); } numofcomparisons += found - start + 1; start = found + 1; } } } ratio = (double) numofcomparisons/totallength; if (gt_double_compare(ratio,(double) numofchars) > 0) { fprintf(stderr,"gt_double_compare(%.2f,%u) = %d > 0 not exected\n", ratio,numofchars, gt_double_compare(ratio,(double) numofchars)); exit(GT_EXIT_PROGRAMMING_ERROR); } } void gt_suftab_lightweightcheck(const GtEncseq *encseq, GtReadmode readmode, unsigned long totallength, const ESASuffixptr *suftab, GtLogger *logger) { unsigned long idx, countbitsset = 0, previouspos = 0, firstspecial = totallength, rangestart = 0; unsigned int numofchars, charidx, rangeidx = 0, numofranges; GtBitsequence *startposoccurs; GtUchar previouscc = 0; GtRangewithchar *rangestore; const bool skcheck = true; GT_INITBITTAB(startposoccurs,totallength+1); numofchars = gt_encseq_alphabetnumofchars(encseq); rangestore = gt_malloc(sizeof(*rangestore) * numofchars); for (idx = 0; idx < totallength; idx++) { unsigned long position = ESASUFFIXPTRGET(suftab,idx); GtUchar cc; if (GT_ISIBITSET(startposoccurs,position)) { fprintf(stderr,"ERROR: suffix with startpos %lu already occurs\n", ESASUFFIXPTRGET(suftab,idx)); exit(GT_EXIT_PROGRAMMING_ERROR); } GT_SETIBIT(startposoccurs,position); countbitsset++; cc = gt_encseq_get_encoded_char(encseq,position,readmode); if (idx > 0) { if (ISSPECIAL(cc)) { if (firstspecial == totallength) { firstspecial = idx; gt_assert(rangeidx < numofchars); rangestore[rangeidx].start = rangestart; rangestore[rangeidx].end = idx-1; rangestore[rangeidx++].firstchar = previouscc; } if (ISSPECIAL(previouscc)) { if (previouspos > position) { fprintf(stderr,"incorrect order: %lu = %lu=SPECIAL > SPECIAL=%lu " " = %lu\n", idx-1,position,previouspos,idx); exit(GT_EXIT_PROGRAMMING_ERROR); } } } else { if (ISSPECIAL(previouscc)) { fprintf(stderr,"incorrect order: %lu=%lu=SPECIAL > %u=%lu=%lu\n", idx-1,position,(unsigned int) cc,previouspos,idx); exit(GT_EXIT_PROGRAMMING_ERROR); } else { if (previouscc > cc) { fprintf(stderr,"incorrect order: %lu = %lu=%u > %u=%lu=%lu\n", idx-1,position,(unsigned int) previouscc, (unsigned int) cc,previouspos,idx); exit(GT_EXIT_PROGRAMMING_ERROR); } else { if (previouscc < cc) { gt_assert(rangeidx < numofchars); rangestore[rangeidx].start = rangestart; rangestore[rangeidx].end = idx-1; rangestore[rangeidx++].firstchar = previouscc; rangestart = idx; } } } } } else { if (ISSPECIAL(cc)) { firstspecial = 0; } } previouscc = cc; previouspos = position; } if (countbitsset != totallength) { fprintf(stderr,"ERROR: only %lu of %lu suffixes occur\n",countbitsset, totallength); exit(GT_EXIT_PROGRAMMING_ERROR); } gt_free(startposoccurs); if (firstspecial == totallength) { gt_assert(firstspecial > 0 && rangeidx < numofchars); rangestore[rangeidx].start = rangestart; rangestore[rangeidx].end = firstspecial-1; rangestore[rangeidx++].firstchar = previouscc; } numofranges = rangeidx; for (charidx = 0, rangeidx = 0; charidx < numofchars; charidx++) { unsigned long count; if (GT_ISDIRCOMPLEMENT(readmode)) { count = gt_encseq_charcount(encseq,(GtUchar) GT_COMPLEMENTBASE(charidx)); } else { count = gt_encseq_charcount(encseq,(GtUchar) charidx); } if (count != 0) { gt_assert(rangestore[rangeidx].firstchar == (GtUchar) charidx); gt_assert(rangestore[rangeidx].end - rangestore[rangeidx].start + 1 == count); rangeidx++; } } gt_logger_log(logger,"suftab-check, first phase done"); if (skcheck) { gt_suftab_sk_suffixorder(totallength, numofchars, suftab, rangestore, numofranges); gt_logger_log(logger,"suftab-check, second phase (sk-method) done"); } else { gt_suftab_bk_suffixorder(encseq, readmode, totallength, numofchars, suftab, rangestore, numofranges); gt_logger_log(logger,"suftab-check, second phase (bk-method) done"); } gt_free(rangestore); } int gt_lcptab_lightweightcheck(const char *esaindexname, const GtEncseq *encseq, GtReadmode readmode, const ESASuffixptr *suftab, GtLogger *logger, GtError *err) { bool haserr = false; Sequentialsuffixarrayreader *ssar; unsigned long partwidth, totallength = gt_encseq_total_length(encseq), idx, specials = gt_encseq_specialcharacters(encseq); GtCompactUlongStore *lcptab = NULL; gt_assert(specials <= totallength); partwidth = totallength - specials; if (partwidth > 0) { lcptab = gt_lcp9_manzini(NULL, encseq, readmode, partwidth, totallength, suftab); gt_logger_log(logger,"computed reference lcp table with manzini algorithm"); } ssar = gt_newSequentialsuffixarrayreaderfromfile(esaindexname, SARR_LCPTAB, SEQ_scan, logger, err); if (ssar == NULL) { haserr = true; } for (idx = 1UL; /* Nothing */; idx++) { unsigned long mlcpvalue, lcpvalue; int retval = gt_nextSequentiallcpvalue(&lcpvalue,ssar,err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } if (idx < partwidth) { mlcpvalue = gt_compact_ulong_store_get(lcptab,idx); } else { mlcpvalue = 0; } if (mlcpvalue != lcpvalue) { fprintf(stderr,"%lu: mlcpvalue = %lu != %lu = lcpvalue\n", idx,mlcpvalue,lcpvalue); exit(GT_EXIT_PROGRAMMING_ERROR); } } gt_logger_log(logger,"compare lcp-values against reference"); if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } gt_compact_ulong_store_delete(lcptab); return haserr ? -1 : 0; } genometools-1.5.1/src/match/sfx-linlcp.h000066400000000000000000000036451211610345200201670ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_LINLCP_H #define SFX_LINLCP_H #include "core/encseq.h" #include "core/compact_ulong_store.h" #include "match/sarr-def.h" GtCompactUlongStore *gt_lcp9_manzini(GtCompactUlongStore *spacefortab, const GtEncseq *encseq, GtReadmode readmode, unsigned long partwidth, unsigned long totallength, const ESASuffixptr *suftab); void gt_suftab_lightweightcheck(const GtEncseq *encseq, GtReadmode readmode, unsigned long totallength, const ESASuffixptr *suftab, GtLogger *logger); int gt_lcptab_lightweightcheck(const char *esaindexname, const GtEncseq *encseq, GtReadmode readmode, const ESASuffixptr *suftab, GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/sfx-mapped4.gen000066400000000000000000000330451211610345200205570ustar00rootroot00000000000000/* Copyright (c) 2007-2012 Stefan Kurtz Copyright (c) 2007-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ static GtCodetype PROCESSKMERPREFIX(getencseqkmers_nospecialtwobitencoding)( const GtSfxmapped4constinfo *mapped4info, GT_UNUSED unsigned long specialfreeunit, const GtReadmode readmode, PROCESSKMERTYPE *processkmercodeinfo, unsigned long startpos, unsigned long endpos) { unsigned long position, unitindex, relpos = 0; GtCodetype code, transcode; GtTwobitencoding currentencoding; unsigned int shiftright; GtUchar cc; gt_assert(mapped4info->kmersize > 1U); if (GT_ISDIRREVERSE(readmode)) { gt_assert(endpos >= (unsigned long) mapped4info->upperkmersize); position = endpos - (unsigned long) mapped4info->kmersize; unitindex = (position > 0) ? GT_DIVBYUNITSIN2BITENC(position-1) : 0; code = gt_kmercode_reverse(gt_kmercode_at_position(mapped4info->twobitencoding, position, mapped4info->kmersize), mapped4info->kmersize); transcode = GT_ISDIRCOMPLEMENT(readmode) ? gt_kmercode_complement(code,mapped4info->maskright) : code; GT_ENCSEQ_RELPOS_SEQNUM_CHECK(GT_ADJUSTREVERSEPOS(mapped4info->rightbound, position)); PROCESSKMERCODE(processkmercodeinfo,true, GT_ADJUSTREVERSEPOS(mapped4info->rightbound,position), specialfreeunit, relpos, transcode); currentencoding = mapped4info->twobitencoding[unitindex]; startpos += mapped4info->upperkmersize - mapped4info->kmersize; shiftright = (unsigned int) GT_MULT2(GT_UNITSIN2BITENC - 1 - GT_MODBYUNITSIN2BITENC(position-1)); while (position > startpos) { position--; relpos++; cc = (GtUchar) (currentencoding >> shiftright) & 3; GT_UPDATEKMER(code,cc,mapped4info->maskright); transcode = (readmode == GT_READMODE_REVCOMPL) ? gt_kmercode_complement(code,mapped4info->maskright) : code; GT_ENCSEQ_RELPOS_SEQNUM_CHECK(GT_ADJUSTREVERSEPOS(mapped4info->rightbound, position)); PROCESSKMERCODE(processkmercodeinfo, false, GT_ADJUSTREVERSEPOS(mapped4info->rightbound,position), specialfreeunit, relpos, transcode); if (shiftright < (unsigned int) (GT_INTWORDSIZE-2)) { shiftright += 2; } else { gt_assert(unitindex > 0 || position == startpos); if (unitindex > 0) { currentencoding = mapped4info->twobitencoding[--unitindex]; } shiftright = 0; } } } else { position = startpos; unitindex = GT_DIVBYUNITSIN2BITENC(startpos + mapped4info->kmersize); code = gt_kmercode_at_position(mapped4info->twobitencoding, position, mapped4info->kmersize); transcode = GT_ISDIRCOMPLEMENT(readmode) ? gt_kmercode_complement(code,mapped4info->maskright) : code; GT_ENCSEQ_RELPOS_SEQNUM_CHECK(position); PROCESSKMERCODE(processkmercodeinfo, true, position, specialfreeunit, relpos, transcode); currentencoding = mapped4info->twobitencoding[unitindex]; shiftright = (unsigned int) GT_MULT2(GT_UNITSIN2BITENC - 1 - GT_MODBYUNITSIN2BITENC(startpos + mapped4info->kmersize)); gt_assert(endpos >= (unsigned long) mapped4info->upperkmersize); endpos -= mapped4info->upperkmersize; while (position < endpos) { position++; relpos++; cc = (GtUchar) (currentencoding >> shiftright) & 3; GT_UPDATEKMER(code,cc,mapped4info->maskright); transcode = (readmode == GT_READMODE_COMPL) ? gt_kmercode_complement(code,mapped4info->maskright) : code; GT_ENCSEQ_RELPOS_SEQNUM_CHECK(position); PROCESSKMERCODE(processkmercodeinfo,false,position,specialfreeunit,relpos, transcode); if (shiftright > 0) { shiftright -= 2; } else { gt_assert(unitindex < mapped4info->maxunitindex-1 || position == endpos); if (unitindex < mapped4info->maxunitindex-1) { currentencoding = mapped4info->twobitencoding[++unitindex]; } shiftright = (unsigned int) (GT_INTWORDSIZE-2); } } } return code; } static void PROCESSKMERPREFIX(getencseqkmers_rangetwobitencoding)( const GtSfxmapped4constinfo *mapped4info, unsigned long specialfreeunit, GtReadmode readmode, PROCESSKMERTYPE *processkmercodeinfo, PROCESSKMERSPECIALTYPE *processkmerspecialinfo, unsigned long startpos, unsigned long endpos) { GT_UNUSED GtCodetype lastcode; if (mapped4info->mirrored && startpos >= mapped4info->realtotallength) { gt_readmode_invert(readmode); startpos = GT_REVERSEPOS(mapped4info->realtotallength, startpos - mapped4info->realtotallength - 2); if (endpos == mapped4info->totallength) { endpos = 0; } else { endpos = GT_REVERSEPOS(mapped4info->realtotallength, endpos - mapped4info->realtotallength - 2); } if (startpos > endpos) { unsigned long tmp = startpos; startpos = endpos; endpos = tmp; } gt_assert(startpos <= endpos); gt_assert(endpos <= mapped4info->realtotallength); } if (endpos - startpos >= (unsigned long) mapped4info->upperkmersize) { gt_assert(endpos > 0); lastcode = PROCESSKMERPREFIX(getencseqkmers_nospecialtwobitencoding)( mapped4info, specialfreeunit, readmode, processkmercodeinfo, startpos, endpos); #ifdef PROCESSKMERCODESPECIAL { GtCodetype newcode; if (GT_ISDIRCOMPLEMENT(readmode)) { lastcode = gt_kmercode_complement(lastcode,mapped4info->maskright); } newcode = ((lastcode << 2) | 3UL) & mapped4info->maskright; PROCESSKMERCODESPECIAL(processkmerspecialinfo, mapped4info->kmersize-1, GT_ISDIRREVERSE(readmode) ? (mapped4info->totallength-startpos) : endpos, (unsigned int) newcode); } #endif } #ifdef PROCESSKMERCODESPECIAL else { if (startpos < endpos) { GtCodetype newcode; unsigned int fillpos; fillpos = (unsigned int) (mapped4info->kmersize - (endpos - startpos)); lastcode = gt_kmercode_at_position(mapped4info->twobitencoding,startpos, (unsigned int) (endpos - startpos)); if (GT_ISDIRREVERSE(readmode) && (unsigned int) (endpos - startpos) > 1U) { lastcode = gt_kmercode_reverse(lastcode, (unsigned int) (endpos-startpos)); } if (GT_ISDIRCOMPLEMENT(readmode)) { lastcode = gt_kmercode_complement(lastcode,mapped4info->maskright); } newcode = ((lastcode << GT_MULT2(fillpos)) | ((1UL << GT_MULT2(fillpos)) - 1)) & mapped4info->maskright; PROCESSKMERCODESPECIAL(processkmerspecialinfo, (unsigned int) (endpos - startpos), GT_ISDIRREVERSE(readmode) ? (mapped4info->totallength - startpos) : endpos, (unsigned int) newcode); } } #endif } static void PROCESSKMERPREFIX(getencseqkmers_twobitencoding)( const GtEncseq *encseq, const GtReadmode readmode, unsigned int kmersize, unsigned int upperkmersize, PROCESSKMERTYPE *processkmercodeinfo, PROCESSKMERSPECIALTYPE *processkmerspecialinfo) { unsigned long laststart = 0, lastend, specialfreeunit = 0; GtSfxmapped4constinfo mapped4info; mapped4info.twobitencoding = gt_encseq_twobitencoding_export(encseq); lastend = mapped4info.totallength = gt_encseq_total_length(encseq); mapped4info.maxunitindex = gt_unitsoftwobitencoding(mapped4info.totallength) - 1; mapped4info.maskright = GT_MASKRIGHT(kmersize); mapped4info.kmersize = kmersize; mapped4info.upperkmersize = upperkmersize; mapped4info.mirrored = gt_encseq_is_mirrored(encseq); mapped4info.rightbound = mapped4info.totallength - mapped4info.kmersize; mapped4info.numofsequences = gt_encseq_num_of_sequences(encseq); mapped4info.encseq = encseq; if (mapped4info.mirrored) { gt_assert(GT_MOD2(mapped4info.totallength) == 1UL); mapped4info.realtotallength = GT_DIV2(mapped4info.totallength - 1); } else { mapped4info.realtotallength = mapped4info.totallength; } if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; if (GT_ISDIRREVERSE(readmode)) { sri = gt_specialrangeiterator_new(encseq,false); for (specialfreeunit = 0; gt_specialrangeiterator_next(sri,&range); specialfreeunit++) { gt_assert(range.end <= lastend); /*printf("line %d: specialfreeunit=%lu, range %lu %lu\n", __LINE__,specialfreeunit,range.end,lastend);*/ PROCESSKMERPREFIX(getencseqkmers_rangetwobitencoding)( &mapped4info, specialfreeunit, readmode, processkmercodeinfo, processkmerspecialinfo, range.end, lastend); lastend = range.start; } } else { sri = gt_specialrangeiterator_new(encseq,true); for (specialfreeunit = 0; gt_specialrangeiterator_next(sri,&range); specialfreeunit++) { gt_assert(range.start >= laststart); /*printf("region of length %lu\n",range.start - laststart);*/ /*printf("line %d: range %lu %lu\n",__LINE__,laststart,range.start);*/ PROCESSKMERPREFIX(getencseqkmers_rangetwobitencoding)( &mapped4info, specialfreeunit, readmode, processkmercodeinfo, processkmerspecialinfo, laststart, range.start); laststart = range.end; } } gt_assert(mapped4info.totallength >= laststart); gt_specialrangeiterator_delete(sri); } /* printf("line %d: specialfreeunit=%lu,range %lu %lu\n",__LINE__, specialfreeunit, GT_ISDIRREVERSE(readmode) ? 0 : laststart, GT_ISDIRREVERSE(readmode) ? lastend : mapped4info.totallength);*/ PROCESSKMERPREFIX(getencseqkmers_rangetwobitencoding)( &mapped4info, specialfreeunit, readmode, processkmercodeinfo, processkmerspecialinfo, GT_ISDIRREVERSE(readmode) ? 0 : laststart, GT_ISDIRREVERSE(readmode) ? lastend : mapped4info.totallength); } genometools-1.5.1/src/match/sfx-mappedstr.c000066400000000000000000000551551211610345200207030ustar00rootroot00000000000000/* Copyright (c) 2007-2010 Stefan Kurtz Copyright (c) 2007-2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #include #endif #include #include #include #include "core/assert_api.h" #include "core/chardef.h" #include "core/ma_api.h" #include "core/checkencchar.h" #include "core/divmodmul.h" #include "core/alphabet.h" #include "core/error_api.h" #include "core/sequence_buffer_fasta.h" #include "core/sequence_buffer_plain.h" #include "core/str_array.h" #include "core/intbits.h" #include "core/encseq.h" #include "core/format64.h" #include "intcode-def.h" #include "initbasepower.h" #include "sfx-mappedstr.h" #undef SKDEBUG #ifdef SKDEBUG #include "sfx-nextchar.h" #endif #undef SPECIALCASE4 #ifdef SPECIALCASE4 #define SUBTRACTLCHARANDSHIFT(CODE,LCHAR,NUMOFCHARS,MULTIMAPPOWER)\ if ((NUMOFCHARS) == GT_DNAALPHASIZE)\ {\ CODE = GT_MULT4((CODE) - MULTIMAPPOWER[(unsigned int) (LCHAR)]);\ } else\ {\ CODE = ((CODE) - MULTIMAPPOWER[(unsigned int) (LCHAR)])\ * (NUMOFCHARS);\ } #define SUBTRACTLCHARSHIFTADDNEXT(CODE,LCHAR,NUMOFCHARS,MULTIMAPPOWER,CC)\ if ((NUMOFCHARS) == GT_DNAALPHASIZE)\ {\ CODE = GT_MULT4((CODE) - MULTIMAPPOWER[(unsigned int) (LCHAR)]) |\ (CC);\ } else\ {\ CODE = (GtCodetype) ((CODE) - MULTIMAPPOWER[(unsigned int) (LCHAR)])*\ (NUMOFCHARS) + (CC);\ } #else #define SUBTRACTLCHARANDSHIFT(CODE,LCHAR,NUMOFCHARS,MULTIMAPPOWER)\ CODE = ((CODE) - MULTIMAPPOWER[(unsigned int) (LCHAR)]) * (NUMOFCHARS) #define SUBTRACTLCHARSHIFTADDNEXT(CODE,LCHAR,NUMOFCHARS,MULTIMAPPOWER,CC)\ CODE = (GtCodetype) (((CODE) - MULTIMAPPOWER[(unsigned int) (LCHAR)])*\ (NUMOFCHARS) + (CC)) #endif #ifdef SKDEBUG static GtCodetype windowkmer2code(unsigned int numofchars, unsigned int kmersize, const GtUchar *cyclicwindow, unsigned int firstindex) { unsigned int i; GtCodetype integercode; GtUchar cc; bool foundspecial; cc = cyclicwindow[firstindex]; if (ISSPECIAL(cc)) { integercode = (GtCodetype) (numofchars-1); foundspecial = true; } else { integercode = (GtCodetype) cc; foundspecial = false; } for (i=1U; i < kmersize; i++) { if (foundspecial) { ADDNEXTCHAR(integercode,numofchars-1,numofchars); } else { cc = cyclicwindow[(firstindex+i) % kmersize]; if (ISSPECIAL(cc)) { ADDNEXTCHAR(integercode,numofchars-1,numofchars); foundspecial = true; } else { ADDNEXTCHAR(integercode,cc,numofchars); } } } return integercode; } static GtCodetype prefixwindowkmer2code(unsigned int firstspecialpos, unsigned int kmersize, const GtCodetype **multimappower, const GtUchar *cyclicwindow, unsigned int firstindex) { unsigned int i; GtCodetype integercode = 0; GtUchar cc; for (i=0; iqueuespace = gt_malloc(sizeof (*spos->queuespace) * queuesize); spos->noofelements = 0; spos->queuesize = queuesize; spos->dequeueindex = spos->enqueueindex = queuesize - 1; } static bool specialqueueisempty(const Specialpositions *spos) { return (spos->noofelements == 0) ? true : false; } static Specialitem *specialheadofqueue(const Specialpositions *spos) { return spos->queuespace + spos->dequeueindex; } static void specialdeleteheadofqueue(Specialpositions *spos) { spos->noofelements--; if (spos->dequeueindex > 0) { spos->dequeueindex--; } else { spos->dequeueindex = spos->queuesize - 1; } } static void specialenqueue(Specialpositions *spos,Specialitem elem) { spos->noofelements++; spos->queuespace[spos->enqueueindex] = elem; if (spos->enqueueindex > 0) { spos->enqueueindex--; } else { spos->enqueueindex = spos->queuesize - 1; } } static void specialwrapqueue(Specialpositions *spos) { gt_free(spos->queuespace); } static Kmerstream *kmerstream_new(unsigned int numofchars,unsigned int kmersize) { Kmerstream *spwp; gt_assert(kmersize <= (unsigned int) MAXPREFIXLENGTH); spwp = gt_malloc(sizeof (*spwp)); spwp->multimappower = gt_initmultimappower(numofchars,kmersize); spwp->lengthwithoutspecial = 0; spwp->codewithoutspecial = 0; spwp->kmersize = kmersize; spwp->numofchars = numofchars; spwp->windowwidth = 0; spwp->firstindex = 0; specialemptyqueue(&spwp->spos,kmersize); spwp->filltable = gt_filllargestchartable(numofchars,kmersize); return spwp; } static void updatespecialpositions(Kmerstream *spwp, GtUchar charcode, bool doshift, GtUchar lchar) { if (doshift) { if (!specialqueueisempty(&spwp->spos)) { Specialitem *head; /* only here we add some element to the queue */ head = specialheadofqueue(&spwp->spos); if (head->distvalue > 0) { SUBTRACTLCHARANDSHIFT(head->codeforleftcontext,lchar,spwp->numofchars, spwp->multimappower[0]); head->distvalue--; } else { specialdeleteheadofqueue(&spwp->spos); if (!specialqueueisempty(&spwp->spos)) { head = specialheadofqueue(&spwp->spos); head->distvalue--; } } } } if (ISNOTSPECIAL(charcode)) { if (spwp->lengthwithoutspecial == spwp->kmersize) { SUBTRACTLCHARSHIFTADDNEXT(spwp->codewithoutspecial, lchar, spwp->numofchars, spwp->multimappower[0], charcode); } else { spwp->codewithoutspecial += spwp->multimappower[spwp->lengthwithoutspecial][charcode]; spwp->lengthwithoutspecial++; } } else { /* only here we add some element to the queue */ Specialitem newelem; if (specialqueueisempty(&spwp->spos)) { newelem.distvalue = spwp->windowwidth-1; } else { newelem.distvalue = spwp->lengthwithoutspecial+1; } if (spwp->lengthwithoutspecial == spwp->kmersize) { SUBTRACTLCHARANDSHIFT(spwp->codewithoutspecial,lchar, spwp->numofchars,spwp->multimappower[0]); } newelem.codeforleftcontext = spwp->codewithoutspecial; specialenqueue(&spwp->spos,newelem); spwp->lengthwithoutspecial = 0; spwp->codewithoutspecial = 0; } } static void kmerstream_newcode(GtKmercode *kmercode, Kmerstream *spwp) { #ifdef SKDEBUG bool firstspecialbrutedefined; unsigned int firstspecialbrute; if (!specialqueueisempty(&spwp->spos)) { Specialitem *head = specialheadofqueue(&spwp->spos); GtCodetype tmpprefixcode = prefixwindowkmer2code(head->distvalue, spwp->kmersize, (const GtCodetype **) spwp->multimappower, spwp->cyclicwindow, spwp->firstindex); gt_assert(tmpprefixcode == head->codeforleftcontext); } firstspecialbrutedefined = determinefirstspecialposition(&firstspecialbrute, spwp->windowwidth, spwp->kmersize, spwp->cyclicwindow, spwp->firstindex); if (specialqueueisempty(&spwp->spos)) { gt_assert(!firstspecialbrutedefined); } else { Specialitem *head = specialheadofqueue(&spwp->spos); gt_assert(firstspecialbrutedefined ? 1 : 0); gt_assert(head->distvalue == firstspecialbrute); } #endif { #ifdef SKDEBUG GtCodetype wcode; wcode = windowkmer2code(spwp->numofchars, spwp->kmersize, spwp->cyclicwindow, spwp->firstindex); #endif if (specialqueueisempty(&spwp->spos)) { kmercode->definedspecialposition = false; kmercode->specialposition = 0; kmercode->code = spwp->codewithoutspecial; } else { Specialitem *head = specialheadofqueue(&spwp->spos); kmercode->code = head->codeforleftcontext + spwp->filltable[head->distvalue]; kmercode->definedspecialposition = true; kmercode->specialposition = head->distvalue; } #ifdef SKDEBUG gt_assert(wcode == kmercode->code); #endif } } static void shiftrightwithchar(Kmerstream *spwp,GtUchar charcode) { gt_assert(spwp->windowwidth == spwp->kmersize); updatespecialpositions(spwp,charcode,true, spwp->cyclicwindow[spwp->firstindex]); spwp->cyclicwindow[spwp->firstindex] = charcode; if (spwp->firstindex < spwp->kmersize-1) { spwp->firstindex++; } else { spwp->firstindex = 0; } } static void kmerstream_delete(Kmerstream *spwp) { gt_free(spwp->filltable); gt_multimappower_delete(spwp->multimappower); specialwrapqueue(&spwp->spos); gt_free(spwp); } struct GtKmercodeiterator { unsigned long totallength, startpos; const GtEncseq *encseq; GtEncseqReader *esr; GtReadmode readmode; Kmerstream *spwp; unsigned long currentposition; bool hasprocessedfirst, inputexhausted; GtKmercode kmercode; GtSequenceBuffer *fb; /* only for generating from file */ }; /*@notnull@*/ GtKmercodeiterator *gt_kmercodeiterator_encseq_new( const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, unsigned long startpos) { GtKmercodeiterator *kmercodeiterator; unsigned int numofchars; GtUchar charcode; gt_assert(!GT_ISDIRREVERSE(readmode) || startpos == 0); kmercodeiterator = gt_malloc(sizeof (*kmercodeiterator)); kmercodeiterator->totallength = gt_encseq_total_length(encseq); kmercodeiterator->startpos = startpos; gt_assert(startpos < kmercodeiterator->totallength); if (kmercodeiterator->totallength - startpos < (unsigned long) kmersize) { kmercodeiterator->inputexhausted = true; kmercodeiterator->fb = NULL; kmercodeiterator->encseq = encseq; kmercodeiterator->esr = NULL; kmercodeiterator->spwp = NULL; } else { kmercodeiterator->inputexhausted = false; kmercodeiterator->fb = NULL; kmercodeiterator->encseq = encseq; kmercodeiterator->readmode = readmode; kmercodeiterator->esr = gt_encseq_create_reader_with_readmode(encseq, readmode, startpos); numofchars = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); kmercodeiterator->spwp = kmerstream_new(numofchars,kmersize); kmercodeiterator->hasprocessedfirst = false; for (kmercodeiterator->currentposition = startpos; kmercodeiterator->currentposition < startpos+(unsigned long) kmersize; kmercodeiterator->currentposition++) { charcode = gt_encseq_reader_next_encoded_char(kmercodeiterator->esr); kmercodeiterator->spwp->windowwidth++; updatespecialpositions(kmercodeiterator->spwp,charcode,false,0); kmercodeiterator->spwp->cyclicwindow[kmercodeiterator-> spwp->windowwidth-1] = charcode; } } return kmercodeiterator; } const GtKmercode *gt_kmercodeiterator_encseq_next( GtKmercodeiterator *kmercodeiterator) { if (!kmercodeiterator->hasprocessedfirst) { gt_assert(kmercodeiterator->currentposition == kmercodeiterator->startpos + (unsigned long) kmercodeiterator->spwp->kmersize); kmerstream_newcode(&kmercodeiterator->kmercode, kmercodeiterator->spwp); kmercodeiterator->hasprocessedfirst = true; return &kmercodeiterator->kmercode; } if (kmercodeiterator->currentposition < kmercodeiterator->totallength) { GtUchar charcode = gt_encseq_reader_next_encoded_char(kmercodeiterator->esr); shiftrightwithchar(kmercodeiterator->spwp,charcode); kmerstream_newcode(&kmercodeiterator->kmercode, kmercodeiterator->spwp); kmercodeiterator->currentposition++; return &kmercodeiterator->kmercode; } if (kmercodeiterator->currentposition < kmercodeiterator->totallength + kmercodeiterator->spwp->kmersize) { shiftrightwithchar(kmercodeiterator->spwp,(GtUchar) WILDCARD); kmerstream_newcode(&kmercodeiterator->kmercode, kmercodeiterator->spwp); kmercodeiterator->currentposition++; return &kmercodeiterator->kmercode; } return NULL; } const GtKmercode *gt_kmercodeiterator_encseq_nonspecial_next( GtKmercodeiterator *kmercodeiterator) { while (true) { if (!kmercodeiterator->hasprocessedfirst) { gt_assert(kmercodeiterator->currentposition == kmercodeiterator->startpos + (unsigned long) kmercodeiterator->spwp->kmersize); kmerstream_newcode(&kmercodeiterator->kmercode, kmercodeiterator->spwp); kmercodeiterator->hasprocessedfirst = true; if (!kmercodeiterator->kmercode.definedspecialposition) { return &kmercodeiterator->kmercode; } } else { if (kmercodeiterator->currentposition < kmercodeiterator->totallength) { GtUchar charcode = gt_encseq_reader_next_encoded_char(kmercodeiterator->esr); shiftrightwithchar(kmercodeiterator->spwp,charcode); kmerstream_newcode(&kmercodeiterator->kmercode, kmercodeiterator->spwp); kmercodeiterator->currentposition++; if (!kmercodeiterator->kmercode.definedspecialposition) { return &kmercodeiterator->kmercode; } } else { break; } } } return NULL; } GtKmercodeiterator *gt_kmercodeiterator_filetab_new( const GtStrArray *filenametab, unsigned int numofchars, unsigned int kmersize, const GtUchar *symbolmap, bool plainformat, GtError *err) { GtKmercodeiterator *kmercodeiterator; GtUchar charcode; bool haserr = false; int retval; gt_error_check(err); kmercodeiterator = gt_malloc(sizeof (*kmercodeiterator)); kmercodeiterator->esr = NULL; kmercodeiterator->hasprocessedfirst = false; kmercodeiterator->inputexhausted = false; kmercodeiterator->spwp = kmerstream_new(numofchars,kmersize); kmercodeiterator->totallength = 0; if (plainformat) { kmercodeiterator->fb = gt_sequence_buffer_plain_new(filenametab); } else { kmercodeiterator->fb = gt_sequence_buffer_new_guess_type(filenametab, err); } if (kmercodeiterator->fb == NULL) { haserr = true; } if (!haserr) { gt_sequence_buffer_set_symbolmap(kmercodeiterator->fb, symbolmap); for (kmercodeiterator->currentposition = 0; kmercodeiterator->currentposition < (unsigned long) kmersize; kmercodeiterator->currentposition++) { retval = gt_sequence_buffer_next(kmercodeiterator->fb,&charcode,err); if (retval < 0) { haserr = true; break; } if (retval == 0) { kmercodeiterator->inputexhausted = true; break; } kmercodeiterator->spwp->windowwidth++; updatespecialpositions(kmercodeiterator->spwp,charcode,false,0); kmercodeiterator->spwp->cyclicwindow[kmercodeiterator-> spwp->windowwidth-1] = charcode; } } if (haserr) { gt_kmercodeiterator_delete(kmercodeiterator); return NULL; } return kmercodeiterator; } int gt_kmercodeiterator_filetab_next(const GtKmercode **kmercodeptr, GtKmercodeiterator *kmercodeiterator, GtError *err) { if (!kmercodeiterator->inputexhausted) { if (kmercodeiterator->hasprocessedfirst) { GtUchar charcode; int retval; retval = gt_sequence_buffer_next(kmercodeiterator->fb,&charcode,err); if (retval < 0) { *kmercodeptr = NULL; return -1; } if (retval != 0) { shiftrightwithchar(kmercodeiterator->spwp,charcode); kmerstream_newcode(&kmercodeiterator->kmercode, kmercodeiterator->spwp); kmercodeiterator->currentposition++, *kmercodeptr = &kmercodeiterator->kmercode; return 0; } kmercodeiterator->inputexhausted = true; kmercodeiterator->totallength = kmercodeiterator->currentposition; } else { kmerstream_newcode(&kmercodeiterator->kmercode, kmercodeiterator->spwp); kmercodeiterator->hasprocessedfirst = true; *kmercodeptr = &kmercodeiterator->kmercode; return 0; } } if (kmercodeiterator->currentposition < kmercodeiterator->totallength + kmercodeiterator->spwp->kmersize) { shiftrightwithchar(kmercodeiterator->spwp,(GtUchar) WILDCARD); kmerstream_newcode(&kmercodeiterator->kmercode, kmercodeiterator->spwp); kmercodeiterator->currentposition++, *kmercodeptr = &kmercodeiterator->kmercode; } else { *kmercodeptr = NULL; } return 0; } bool gt_kmercodeiterator_inputexhausted( const GtKmercodeiterator *kmercodeiterator) { return kmercodeiterator->inputexhausted; } void gt_kmercodeiterator_delete(GtKmercodeiterator *kmercodeiterator) { if (kmercodeiterator == NULL) { return; } gt_encseq_reader_delete(kmercodeiterator->esr); kmerstream_delete(kmercodeiterator->spwp); gt_sequence_buffer_delete(kmercodeiterator->fb); gt_free(kmercodeiterator); } void getencseqkmers(const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, void(*processkmercode)(void *, unsigned long, const GtKmercode *), void *processkmercodeinfo) { unsigned long currentposition = 0, totallength; Kmerstream *spwp; GtUchar charcode; GtEncseqReader *esr; unsigned int numofchars, overshoot; totallength = gt_encseq_total_length(encseq); if (totallength < (unsigned long) kmersize) { return; } numofchars = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); spwp = kmerstream_new(numofchars,kmersize); esr = gt_encseq_create_reader_with_readmode(encseq,readmode,0); for (currentposition = 0; currentposition < (unsigned long) kmersize; currentposition++) { charcode = gt_encseq_reader_next_encoded_char(esr); GT_CHECKENCCHAR(charcode,encseq,currentposition,readmode); spwp->windowwidth++; updatespecialpositions(spwp,charcode,false,0); spwp->cyclicwindow[spwp->windowwidth-1] = charcode; } kmerstream_newcode(&spwp->currentkmercode,spwp); processkmercode(processkmercodeinfo,0,&spwp->currentkmercode); for (currentposition = (unsigned long) kmersize; currentpositioncurrentkmercode,spwp); processkmercode(processkmercodeinfo,currentposition + 1 - spwp->kmersize, &spwp->currentkmercode); } gt_encseq_reader_delete(esr); for (overshoot=0; overshootcurrentkmercode,spwp); processkmercode(processkmercodeinfo, overshoot + currentposition + 1 - spwp->kmersize, &spwp->currentkmercode); } kmerstream_delete(spwp); } genometools-1.5.1/src/match/sfx-mappedstr.h000066400000000000000000000053211211610345200206760ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_MAPPEDSTR_H #define SFX_MAPPEDSTR_H #include "core/error_api.h" #include "core/str_array_api.h" #include "core/encseq_api.h" #include "core/codetype.h" #include "intcode-def.h" typedef struct { bool definedspecialposition; unsigned int specialposition; GtCodetype code; } GtKmercode; typedef struct GtKmercodeiterator GtKmercodeiterator; /*@notnull@*/ GtKmercodeiterator *gt_kmercodeiterator_encseq_new( const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, unsigned long startpos); const GtKmercode *gt_kmercodeiterator_encseq_next( GtKmercodeiterator *kmercodeiterator); const GtKmercode *gt_kmercodeiterator_encseq_nonspecial_next( GtKmercodeiterator *kmercodeiterator); GtKmercodeiterator *gt_kmercodeiterator_filetab_new( const GtStrArray *filenametab, unsigned int numofchars, unsigned int kmersize, const GtUchar *symbolmap, bool plainformat, GtError *err); int gt_kmercodeiterator_filetab_next(const GtKmercode **kmercodeptr, GtKmercodeiterator *kmercodeiterator, GtError *err); bool gt_kmercodeiterator_inputexhausted( const GtKmercodeiterator *kmercodeiterator); void gt_kmercodeiterator_delete(GtKmercodeiterator *kmercodeiterator); void getencseqkmers(const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, void(*processkmercode)(void *, unsigned long, const GtKmercode *), void *processkmercodeinfo); #endif genometools-1.5.1/src/match/sfx-maprange.c000066400000000000000000000411601211610345200204650ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #ifndef S_SPLINT_S #include #endif #include "core/xposix.h" #include "core/xansi_api.h" #include "core/fa.h" #include "core/intbits.h" #include "core/log.h" #include "sfx-maprange.h" static unsigned long gt_multipleofpagesize(unsigned long code, bool smaller, size_t sizeofbasetype, unsigned long pagesize) { if ((code * sizeofbasetype) % pagesize == 0) { return code * sizeofbasetype; } if (smaller) { return ((code * sizeofbasetype)/pagesize) * pagesize; } return ((code * sizeofbasetype)/pagesize) * pagesize + pagesize; } typedef struct { unsigned long mapoffset, mapend; } GtMappedrange; static void gt_Sfxmapped_offset_end(GtMappedrange *range, size_t sizeofbasetype, unsigned long pagesize, unsigned long minindex, unsigned long maxindex) { range->mapoffset = gt_multipleofpagesize(minindex,true,sizeofbasetype, pagesize); range->mapend = gt_multipleofpagesize(maxindex,false,sizeofbasetype,pagesize); } struct GtSfxmappedrange { void *ptr, *entire, **usedptrptr; GtStr *filename, *tablename; unsigned long pagesize; size_t numofunits, sizeofunit; GtSfxmappedrangetype type; unsigned long currentminindex, currentmaxindex; bool indexrange_defined; GtSfxmappedrangetransformfunc transformfunc; const void *transformfunc_data; bool writable; }; size_t gt_Sfxmappedrange_size_entire(const GtSfxmappedrange *sfxmappedrange) { gt_assert(sfxmappedrange != NULL); return sfxmappedrange->sizeofunit * sfxmappedrange->numofunits; } void *gt_Sfxmappedrange_map_entire(GtSfxmappedrange *sfxmappedrange, GtError *err) { size_t mappedsize; gt_assert(sfxmappedrange != NULL); sfxmappedrange->entire = gt_fa_mmap_read(gt_str_get(sfxmappedrange->filename), &mappedsize,err); if (sfxmappedrange->entire == NULL) { return NULL; } if (mappedsize != gt_Sfxmappedrange_size_entire(sfxmappedrange)) { gt_error_set(err,"map file %s: mapped size = %lu != %lu = expected size", gt_str_get(sfxmappedrange->filename), (unsigned long) mappedsize, (unsigned long) gt_Sfxmappedrange_size_entire( sfxmappedrange)); gt_fa_xmunmap(sfxmappedrange->entire); sfxmappedrange->entire = NULL; return NULL; } gt_log_log("map %s completely (%lu units of size %u)", gt_str_get(sfxmappedrange->tablename), (unsigned long) sfxmappedrange->numofunits, (unsigned int) sfxmappedrange->sizeofunit); return sfxmappedrange->entire; } GtSfxmappedrange *gt_Sfxmappedrange_new(const char *tablename, unsigned long numofentries, GtSfxmappedrangetype type, GtSfxmappedrangetransformfunc transformfunc, const void *transformfunc_data) { GtSfxmappedrange *sfxmappedrange; sfxmappedrange = gt_malloc(sizeof (*sfxmappedrange)); sfxmappedrange->ptr = NULL; sfxmappedrange->pagesize = (unsigned long) sysconf((int) _SC_PAGESIZE); sfxmappedrange->usedptrptr = NULL; sfxmappedrange->filename = NULL; sfxmappedrange->writable = false; sfxmappedrange->entire = NULL; sfxmappedrange->transformfunc = transformfunc; sfxmappedrange->transformfunc_data = transformfunc_data; sfxmappedrange->type = type; sfxmappedrange->tablename = gt_str_new_cstr(tablename); sfxmappedrange->currentminindex = sfxmappedrange->currentmaxindex = 0; sfxmappedrange->indexrange_defined = false; switch (type) { case GtSfxGtBitsequence: sfxmappedrange->sizeofunit = sizeof (GtBitsequence); sfxmappedrange->numofunits = GT_NUMOFINTSFORBITS(numofentries); break; case GtSfxuint32_t: sfxmappedrange->sizeofunit = sizeof (uint32_t); sfxmappedrange->numofunits = (size_t) numofentries; break; case GtSfxunsignedlong: sfxmappedrange->sizeofunit = sizeof (unsigned long); sfxmappedrange->numofunits = (size_t) numofentries; break; default: gt_assert(false); break; } return sfxmappedrange; } typedef union { GtBitsequence **bs; unsigned long **ulong; uint32_t **uint32; } GtSfxStoretype; static void gt_Sfxmappedrange_storetmp(GtSfxmappedrange *sfxmappedrange, GtSfxStoretype usedptrptr, GtSfxmappedrangetype type, bool writable) { FILE *outfp; gt_assert(sfxmappedrange != NULL); sfxmappedrange->ptr = NULL; sfxmappedrange->filename = gt_str_new(); sfxmappedrange->writable = writable; outfp = gt_xtmpfp(sfxmappedrange->filename); gt_assert(outfp != NULL); gt_log_log("write %s to file %s (%lu units of %lu bytes)", gt_str_get(sfxmappedrange->tablename), gt_str_get(sfxmappedrange->filename), (unsigned long) sfxmappedrange->numofunits, (unsigned long) sfxmappedrange->sizeofunit); switch (type) { case GtSfxGtBitsequence: gt_xfwrite(*(usedptrptr.bs),sfxmappedrange->sizeofunit, sfxmappedrange->numofunits,outfp); sfxmappedrange->usedptrptr = (void**) usedptrptr.bs; gt_free(*(usedptrptr.bs)); *(usedptrptr.bs) = NULL; break; case GtSfxunsignedlong: gt_xfwrite(*(usedptrptr.ulong),sfxmappedrange->sizeofunit, sfxmappedrange->numofunits,outfp); sfxmappedrange->usedptrptr = (void**) usedptrptr.ulong; gt_free(*(usedptrptr.ulong)); *(usedptrptr.ulong) = NULL; break; case GtSfxuint32_t: gt_xfwrite(*(usedptrptr.uint32),sfxmappedrange->sizeofunit, sfxmappedrange->numofunits,outfp); sfxmappedrange->usedptrptr = (void**) usedptrptr.uint32; gt_free(*(usedptrptr.uint32)); *(usedptrptr.uint32) = NULL; break; } gt_fa_fclose(outfp); } void gt_Sfxmappedrange_storetmp_ulong(GtSfxmappedrange *sfxmappedrange, unsigned long **usedptrptr, bool writable) { GtSfxStoretype st; gt_assert(usedptrptr != NULL); st.ulong = usedptrptr; gt_Sfxmappedrange_storetmp(sfxmappedrange, st, GtSfxunsignedlong, writable); } void gt_Sfxmappedrange_storetmp_uint32(GtSfxmappedrange *sfxmappedrange, uint32_t **usedptrptr, bool writable) { GtSfxStoretype st; gt_assert(usedptrptr != NULL); st.uint32 = usedptrptr; gt_Sfxmappedrange_storetmp(sfxmappedrange, st, GtSfxuint32_t, writable); } void gt_Sfxmappedrange_storetmp_bitsequence(GtSfxmappedrange *sfxmappedrange, GtBitsequence **usedptrptr, bool writable) { GtSfxStoretype st; gt_assert(usedptrptr != NULL); st.bs = usedptrptr; gt_Sfxmappedrange_storetmp(sfxmappedrange, st, GtSfxGtBitsequence, writable); } void gt_Sfxmappedrange_usetmp(GtSfxmappedrange *sfxmappedrange, const GtStr *tmpfilename, void **usedptrptr, unsigned long numofentries, bool writable) { gt_assert(sfxmappedrange != NULL); sfxmappedrange->ptr = NULL; /*gt_assert(usedptrptr != NULL && *usedptrptr == NULL);*/ sfxmappedrange->usedptrptr = usedptrptr; sfxmappedrange->filename = gt_str_clone(tmpfilename); sfxmappedrange->writable = writable; if (sfxmappedrange->type == GtSfxGtBitsequence) { sfxmappedrange->numofunits = GT_NUMOFINTSFORBITS(numofentries); } else { sfxmappedrange->numofunits = (size_t) numofentries; } gt_log_log("use file %s for table %s (%lu units of %lu bytes)", gt_str_get(sfxmappedrange->filename), gt_str_get(sfxmappedrange->tablename), (unsigned long) sfxmappedrange->numofunits, (unsigned long) sfxmappedrange->sizeofunit); gt_free(*sfxmappedrange->usedptrptr); *sfxmappedrange->usedptrptr = NULL; } unsigned long gt_Sfxmappedrange_size_mapped(const GtSfxmappedrange *sfxmappedrange, unsigned long minindex, unsigned long maxindex) { gt_assert(sfxmappedrange != NULL); if (sfxmappedrange->transformfunc != NULL) { sfxmappedrange->transformfunc(&minindex,&maxindex, sfxmappedrange->transformfunc_data); } if (minindex <= maxindex) { GtMappedrange lbrange; gt_Sfxmapped_offset_end(&lbrange, sfxmappedrange->sizeofunit, sfxmappedrange->pagesize, minindex, maxindex); return lbrange.mapend - lbrange.mapoffset + 1; } return 0; } void gt_Sfxmappedrange_unmap(GtSfxmappedrange *sfxmappedrange) { gt_assert(sfxmappedrange != NULL); if (sfxmappedrange->ptr != NULL) { gt_fa_xmunmap(sfxmappedrange->ptr); } sfxmappedrange->ptr = 0; } void *gt_Sfxmappedrange_map(GtSfxmappedrange *sfxmappedrange, unsigned long minindex, unsigned long maxindex) { gt_assert(sfxmappedrange != NULL); if (sfxmappedrange->ptr != NULL) { gt_fa_xmunmap(sfxmappedrange->ptr); } if (sfxmappedrange->transformfunc != NULL) { sfxmappedrange->transformfunc(&minindex,&maxindex, sfxmappedrange->transformfunc_data); } if (minindex <= maxindex) { GtMappedrange lbrange; unsigned long unitoffset; size_t sizeoftable; gt_Sfxmapped_offset_end(&lbrange, sfxmappedrange->sizeofunit, sfxmappedrange->pagesize, minindex, maxindex); sizeoftable = gt_Sfxmappedrange_size_entire(sfxmappedrange); gt_log_log("mapped %s[%lu..%lu] for %s (%.1f%% of all)", gt_str_get(sfxmappedrange->tablename), lbrange.mapoffset, lbrange.mapend, sfxmappedrange->writable ? "writing" : "reading", (lbrange.mapend - lbrange.mapoffset + 1 >= (unsigned long) sizeoftable) ? 100.0 : 100.0 * (lbrange.mapend - lbrange.mapoffset + 1)/ sizeoftable); gt_assert(lbrange.mapoffset <= lbrange.mapend); gt_assert(lbrange.mapoffset <= minindex * sfxmappedrange->sizeofunit); gt_assert(maxindex * sfxmappedrange->sizeofunit <= lbrange.mapend); gt_assert(lbrange.mapoffset % sfxmappedrange->pagesize == 0); if (sfxmappedrange->writable) { sfxmappedrange->ptr = gt_fa_xmmap_write_range(gt_str_get(sfxmappedrange->filename), (size_t) (lbrange.mapend-lbrange.mapoffset+1), (size_t) lbrange.mapoffset); } else { sfxmappedrange->ptr = gt_fa_xmmap_read_range (gt_str_get(sfxmappedrange->filename), (size_t) (lbrange.mapend-lbrange.mapoffset+1), (size_t) lbrange.mapoffset); } sfxmappedrange->indexrange_defined = true; sfxmappedrange->currentmaxindex = maxindex; sfxmappedrange->currentminindex = minindex; unitoffset = lbrange.mapoffset / sfxmappedrange->sizeofunit; switch (sfxmappedrange->type) { case GtSfxGtBitsequence: return ((GtBitsequence *) sfxmappedrange->ptr) - unitoffset; case GtSfxuint32_t: return ((uint32_t *) sfxmappedrange->ptr) - unitoffset; case GtSfxunsignedlong: return ((unsigned long *) sfxmappedrange->ptr) - unitoffset; default: gt_assert(false); break; } gt_assert(false); } sfxmappedrange->ptr = NULL; sfxmappedrange->indexrange_defined = true; sfxmappedrange->currentmaxindex = maxindex; sfxmappedrange->currentminindex = minindex; return NULL; } void gt_Sfxmappedrange_checkindex(const GtSfxmappedrange *sfxmappedrange, GT_UNUSED unsigned long idx) { if (sfxmappedrange->indexrange_defined) { gt_assert(sfxmappedrange->currentminindex <= idx); gt_assert(idx <= sfxmappedrange->currentminindex); } } void gt_Sfxmappedrange_delete(GtSfxmappedrange *sfxmappedrange) { if (sfxmappedrange == NULL) { return; } gt_log_log("delete table %s",gt_str_get(sfxmappedrange->tablename)); gt_fa_xmunmap(sfxmappedrange->ptr); sfxmappedrange->ptr = NULL; gt_fa_xmunmap(sfxmappedrange->entire); sfxmappedrange->entire = NULL; if (sfxmappedrange->usedptrptr != NULL) { *sfxmappedrange->usedptrptr = NULL; } if (sfxmappedrange->filename != NULL) { gt_log_log("remove \"%s\"",gt_str_get(sfxmappedrange->filename)); gt_xunlink(gt_str_get(sfxmappedrange->filename)); } gt_str_delete(sfxmappedrange->tablename); gt_str_delete(sfxmappedrange->filename); gt_free(sfxmappedrange); } struct GtSfxmappedrangelist { GtSfxmappedrange **arr; unsigned long nextfree, allocated; }; GtSfxmappedrangelist *gt_Sfxmappedrangelist_new(void) { GtSfxmappedrangelist *sfxmrlist = gt_malloc(sizeof (*sfxmrlist)); sfxmrlist->arr = NULL; sfxmrlist->nextfree = sfxmrlist->allocated = 0; return sfxmrlist; } void gt_Sfxmappedrangelist_add(GtSfxmappedrangelist *sfxmrlist, GtSfxmappedrange *sfxmappedrange) { gt_assert(sfxmrlist != NULL); if (sfxmrlist->nextfree >= sfxmrlist->allocated) { sfxmrlist->allocated += 4UL; sfxmrlist->arr = gt_realloc(sfxmrlist->arr,sizeof (*sfxmrlist->arr) * sfxmrlist->allocated); } sfxmrlist->arr[sfxmrlist->nextfree++] = sfxmappedrange; } unsigned long gt_Sfxmappedrangelist_size_mapped( const GtSfxmappedrangelist *sfxmrlist, unsigned long minindex, unsigned long maxindex) { if (sfxmrlist == NULL) { gt_assert(maxindex >= minindex); return maxindex - minindex + 1; } else { unsigned long idx, sumsize = 0; for (idx = 0; idx < sfxmrlist->nextfree; idx++) { GtSfxmappedrange *sfxmappedrange = sfxmrlist->arr[idx]; if (sfxmappedrange != NULL) { /*printf("size_mapped %s %lu %lu => %lu\n", gt_str_get(sfxmappedrange->tablename), minindex,maxindex, gt_Sfxmappedrange_size_mapped(sfxmappedrange,minindex, maxindex));*/ sumsize += gt_Sfxmappedrange_size_mapped(sfxmappedrange, minindex, maxindex); } } return sumsize; } } unsigned long gt_Sfxmappedrangelist_size_entire( const GtSfxmappedrangelist *sfxmrlist) { if (sfxmrlist == NULL) { return 0; } else { unsigned long idx, sumsize = 0; for (idx = 0; idx < sfxmrlist->nextfree; idx++) { GtSfxmappedrange *sfxmappedrange = sfxmrlist->arr[idx]; if (sfxmappedrange != NULL) { sumsize += gt_Sfxmappedrange_size_entire(sfxmappedrange); } } return sumsize; } } void gt_Sfxmappedrangelist_delete(GtSfxmappedrangelist *sfxmrlist) { if (sfxmrlist != NULL) { gt_free(sfxmrlist->arr); gt_free(sfxmrlist); } } genometools-1.5.1/src/match/sfx-maprange.h000066400000000000000000000102021211610345200204630ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_MAPRANGE_H #define SFX_MAPRANGE_H #include #include #include "core/str_api.h" #include "core/codetype.h" typedef enum { GtSfxGtBitsequence, GtSfxunsignedlong, GtSfxuint32_t } GtSfxmappedrangetype; typedef struct GtSfxmappedrange GtSfxmappedrange; void *gt_Sfxmappedrange_map_entire(GtSfxmappedrange *sfxmappedrange, GtError *err); typedef void (*GtSfxmappedrangetransformfunc)(unsigned long *, unsigned long *, const void *); GtSfxmappedrange *gt_Sfxmappedrange_new(const char *tablename, unsigned long numofentries, GtSfxmappedrangetype type, GtSfxmappedrangetransformfunc transformfunc, const void *transformfunc_data); void gt_Sfxmappedrange_storetmp_ulong(GtSfxmappedrange *sfxmappedrange, unsigned long **usedptrptr, bool writable); void gt_Sfxmappedrange_storetmp_uint32(GtSfxmappedrange *sfxmappedrange, uint32_t **usedptrptr, bool writable); void gt_Sfxmappedrange_storetmp_bitsequence(GtSfxmappedrange *sfxmappedrange, GtBitsequence **usedptrptr, bool writable); void gt_Sfxmappedrange_usetmp(GtSfxmappedrange *sfxmappedrange, const GtStr *tmpfilename, void **usedptrptr, unsigned long numofentries, bool writable); void *gt_Sfxmappedrange_map(GtSfxmappedrange *sfxmappedrange, unsigned long minindex, unsigned long maxindex); void gt_Sfxmappedrange_unmap(GtSfxmappedrange *sfxmappedrange); size_t gt_Sfxmappedrange_size_entire(const GtSfxmappedrange *sfxmappedrange); unsigned long gt_Sfxmappedrange_size_mapped(const GtSfxmappedrange *sfxmappedrange, unsigned long minindex, unsigned long maxindex); void gt_Sfxmappedrange_checkindex(const GtSfxmappedrange *sfxmappedrange, GT_UNUSED unsigned long idx); void gt_Sfxmappedrange_delete(GtSfxmappedrange *sfxmappedrange); typedef struct GtSfxmappedrangelist GtSfxmappedrangelist; GtSfxmappedrangelist *gt_Sfxmappedrangelist_new(void); void gt_Sfxmappedrangelist_add(GtSfxmappedrangelist *sfxmrlist, GtSfxmappedrange *sfxmappedrange); unsigned long gt_Sfxmappedrangelist_size_mapped( const GtSfxmappedrangelist *sfxmrlist, unsigned long minindex, unsigned long maxindex); void gt_Sfxmappedrangelist_delete(GtSfxmappedrangelist *sfxmrlist); unsigned long gt_Sfxmappedrangelist_size_entire( const GtSfxmappedrangelist *sfxmrlist); #endif genometools-1.5.1/src/match/sfx-nextchar.h000066400000000000000000000022471211610345200205170ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_NEXTCHAR_H #define SFX_NEXTCHAR_H #include "core/divmodmul.h" #define ADDNEXTCHAR(CODE,CC,NUMOFCHARS)\ if ((NUMOFCHARS) == GT_DNAALPHASIZE)\ {\ CODE = GT_MULT4(CODE) | ((GtCodetype) (CC));\ } else\ {\ CODE = ((CODE) * (NUMOFCHARS)) + (GtCodetype) (CC);\ } #endif genometools-1.5.1/src/match/sfx-opt.c000066400000000000000000000231361211610345200175000ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2007-2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/basename_api.h" #include "core/error.h" #include "core/logger.h" #include "core/ma_api.h" #include "core/option_api.h" #include "core/readmode.h" #include "core/spacecalc.h" #include "core/str.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "match/sfx-opt.h" #include "match/sfx-strategy.h" #include "match/stamp.h" static GtOPrval parse_options(int *parsed_args, bool doesa, Suffixeratoroptions *so, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOption *option, *optionshowprogress, *optiongenomediff, *optionii; GtOPrval oprval; gt_error_check(err); op = gt_option_parser_new("[option ...] (-db file [...] | -ii index)", doesa ? "Compute enhanced suffix array." : "Compute packed index."); gt_option_parser_set_mail_address(op, ""); /* input info */ so->indexname = gt_str_new(); so->inputindex = gt_str_new(); so->db = gt_str_array_new(); /* register options for encoded sequence handling */ so->encopts = gt_encseq_options_register_encoding(op, so->indexname, so->db); so->loadopts = gt_encseq_options_register_loading(op, so->indexname); /* register options for index handling */ if (doesa) so->idxopts = gt_index_options_register_esa(op, so->encopts); else so->idxopts = gt_index_options_register_packedidx(op, so->indexname, so->encopts); /* verbosity */ option = gt_option_new_verbose(&so->beverbose); gt_option_parser_add_option(op, option); optionshowprogress = gt_option_new_bool("showprogress", "show a progress bar", &so->showprogress, false); gt_option_parser_add_option(op, optionshowprogress); optionii = gt_option_new_filename("ii", "specify existing encoded sequence", so->inputindex); gt_option_parser_add_option(op, optionii); gt_option_is_mandatory_either(gt_encseq_options_db_option(so->encopts), optionii); gt_option_exclude(gt_encseq_options_db_option(so->encopts), optionii); gt_option_exclude(optionii, gt_encseq_options_smap_option(so->encopts)); gt_option_exclude(optionii, gt_encseq_options_dna_option(so->encopts)); gt_option_exclude(optionii, gt_encseq_options_protein_option(so->encopts)); gt_option_exclude(optionii, gt_encseq_options_plain_option(so->encopts)); gt_option_exclude(optionii, gt_encseq_options_sat_option(so->encopts)); optiongenomediff = gt_option_new_bool("genomediff", "directly process the lcp intervals using " "the genomediff algorithm (suffix array and " "lcp-tables are not output)", &so->genomediff, false); gt_option_is_extended_option(optiongenomediff); if (gt_index_options_outsuftab_option(so->idxopts) != NULL) { gt_option_exclude(optiongenomediff, gt_index_options_outsuftab_option(so->idxopts)); } gt_option_parser_add_option(op, optiongenomediff); /* suffixerator and friends do not take arguments */ gt_option_parser_set_min_max_args(op, 0U, 0U); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); if (gt_str_length(so->indexname) == 0UL) { /* we do not have an indexname yet, so there was none given in the -indexname option and it could not be derived from the input filenames. So it must be in the -ii parameter. */ char *basenameptr; basenameptr = gt_basename(gt_str_get(so->inputindex)); gt_str_set(so->indexname, basenameptr); gt_free(basenameptr); } gt_option_parser_delete(op); return oprval; } static void showoptions(const Suffixeratoroptions *so) { unsigned long i; Sfxstrategy sfxtrategy; GtLogger *logger = gt_logger_new(true, GT_LOGGER_DEFLT_PREFIX, stdout); if (gt_str_length(gt_encseq_options_smap_value(so->encopts)) > 0) { gt_logger_log_force(logger, "smap=\"%s\"", gt_str_get(gt_encseq_options_smap_value(so->encopts))); } if (gt_encseq_options_dna_value(so->encopts)) { gt_logger_log_force(logger, "dna=yes"); } if (gt_encseq_options_protein_value(so->encopts)) { gt_logger_log_force(logger, "protein=yes"); } if (gt_encseq_options_plain_value(so->encopts)) { gt_logger_log_force(logger, "plain=yes"); } gt_logger_log_force(logger, "indexname=\"%s\"", gt_str_get(so->indexname)); if (gt_index_options_prefixlength_value(so->idxopts) == GT_PREFIXLENGTH_AUTOMATIC) { gt_logger_log_force(logger, "prefixlength=automatic"); } else { gt_logger_log_force(logger, "prefixlength=%u", gt_index_options_prefixlength_value(so->idxopts)); } sfxtrategy = gt_index_options_sfxstrategy_value(so->idxopts); gt_logger_log_force(logger, "storespecialcodes=%s", sfxtrategy.storespecialcodes ? "true" : "false"); for (i=0; idb); i++) { gt_logger_log_force(logger, "inputfile[%lu]=%s", i, gt_str_array_get(so->db, i)); } if (gt_str_length(so->inputindex) > 0) { gt_logger_log_force(logger, "inputindex=%s", gt_str_get(so->inputindex)); } gt_assert(gt_str_length(so->indexname) > 0); gt_logger_log_force(logger, "indexname=%s", gt_str_get(so->indexname)); gt_logger_log_force(logger, "outtistab=%s,outsuftab=%s,outlcptab=%s," "outbwttab=%s,outbcktab=%s,outdestab=%s," "outsdstab=%s,outssptab=%s,outkystab=%s", gt_encseq_options_tis_value(so->encopts) ? "true" : "false", gt_index_options_outsuftab_value(so->idxopts) ? "true" : "false", gt_index_options_outlcptab_value(so->idxopts) ? "true" : "false", gt_index_options_outbwttab_value(so->idxopts) ? "true" : "false", gt_index_options_outbcktab_value(so->idxopts) ? "true" : "false", gt_encseq_options_des_value(so->encopts) ? "true" : "false", gt_encseq_options_sds_value(so->encopts) ? "true" : "false", gt_encseq_options_ssp_value(so->encopts) ? "true" : "false", gt_index_options_outkystab_value(so->idxopts) ? (gt_index_options_outkyssort_value(so->idxopts) ? "true with sort" : "true") : "false"); if (gt_index_options_maximumspace_value(so->idxopts) > 0) { gt_assert(gt_index_options_numofparts_value(so->idxopts) == 1U); gt_logger_log_force(logger, "maximumspace=%.0f MB", GT_MEGABYTES(gt_index_options_maximumspace_value(so->idxopts))); } else { gt_logger_log_force(logger, "parts=%u", gt_index_options_numofparts_value(so->idxopts)); } gt_logger_log_force(logger, "maxinsertionsort=%lu", sfxtrategy.maxinsertionsort); gt_logger_log_force(logger, "maxbltriesort=%lu", sfxtrategy.maxbltriesort); gt_logger_log_force(logger, "maxcountingsort=%lu", sfxtrategy.maxcountingsort); gt_logger_log_force(logger, "lcpdist=%s", gt_index_options_lcpdist_value(so->idxopts) ? "true" : "false"); gt_logger_delete(logger); } void gt_sfxoptions_delete(Suffixeratoroptions *so) { /* no checking if error occurs, since errors have been output before */ gt_index_options_delete(so->idxopts); gt_encseq_options_delete(so->encopts); gt_encseq_options_delete(so->loadopts); gt_str_delete(so->indexname); gt_str_delete(so->inputindex); gt_str_array_delete(so->db); } int gt_suffixeratoroptions(Suffixeratoroptions *so, bool doesa, int argc, const char **argv, GtError *err) { int parsed_args, retval = 0; GtOPrval rval; gt_error_check(err); rval = parse_options(&parsed_args, doesa, so, argc, argv, err); if (rval == GT_OPTION_PARSER_ERROR) { retval = -1; } else { if (rval == GT_OPTION_PARSER_REQUESTS_EXIT) { retval = 2; } else { if (rval == GT_OPTION_PARSER_OK) { if (so->beverbose) { showoptions(so); } } } } return retval; } genometools-1.5.1/src/match/sfx-opt.h000066400000000000000000000030551211610345200175030ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2007-2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_OPT_H #define SFX_OPT_H #include #include "core/encseq_options.h" #include "index_options.h" typedef struct { bool beverbose, showprogress, genomediff, outlcptab; GtEncseqOptions *encopts, *loadopts; GtIndexOptions *idxopts; GtStr *indexname, *inputindex; GtStrArray *db; } Suffixeratoroptions; void gt_sfxoptions_delete(Suffixeratoroptions *so); int gt_suffixeratoroptions(Suffixeratoroptions *so, bool doesa, int argc, const char **argv, GtError *err); #endif genometools-1.5.1/src/match/sfx-outprj.c000066400000000000000000000102361211610345200202160ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include "core/endianess_api.h" #include "core/fa.h" #include "core/filelengthvalues.h" #include "core/str_array.h" #include "core/str.h" #include "core/unused_api.h" #include "core/defined-types.h" #include "core/format64.h" #include "core/readmode.h" #include "core/encseq.h" #include "esa-fileend.h" #include "stamp.h" #define PRJSPECIALOUT(VAL)\ fprintf(outprj,"%s=%lu\n",#VAL,gt_encseq_##VAL(encseq)) static void showprjinfo(FILE *outprj, GtReadmode readmode, const GtEncseq *encseq, unsigned long numberofallsortedsuffixes, unsigned int prefixlength, unsigned long numoflargelcpvalues, double averagelcp, unsigned long maxbranchdepth, const Definedunsignedlong *longest) { unsigned long totallength; unsigned long numofsequences; totallength = gt_encseq_total_length(encseq); fprintf(outprj,"totallength=%lu\n",totallength); PRJSPECIALOUT(specialcharacters); PRJSPECIALOUT(specialranges); PRJSPECIALOUT(realspecialranges); PRJSPECIALOUT(lengthofspecialprefix); PRJSPECIALOUT(lengthofspecialsuffix); PRJSPECIALOUT(wildcards); PRJSPECIALOUT(wildcardranges); PRJSPECIALOUT(realwildcardranges); PRJSPECIALOUT(lengthofwildcardprefix); PRJSPECIALOUT(lengthofwildcardsuffix); numofsequences = gt_encseq_num_of_sequences(encseq); fprintf(outprj,"numofsequences=%lu\n",numofsequences); fprintf(outprj,"numofdbsequences=%lu\n",numofsequences); fprintf(outprj,"numofquerysequences=0\n"); fprintf(outprj,"numberofallsortedsuffixes=%lu\n",numberofallsortedsuffixes); if (longest->defined) { fprintf(outprj,"longest=%lu\n",longest->valueunsignedlong); } fprintf(outprj,"prefixlength=%u\n",prefixlength); fprintf(outprj,"largelcpvalues=%lu\n",numoflargelcpvalues); fprintf(outprj,"averagelcp=%.2f\n",averagelcp); fprintf(outprj,"maxbranchdepth=%lu\n",maxbranchdepth); fprintf(outprj,"integersize=%u\n", (unsigned int) (sizeof (unsigned long) * CHAR_BIT)); fprintf(outprj,"littleendian=%c\n",gt_is_little_endian() ? '1' : '0'); fprintf(outprj,"readmode=%u\n",(unsigned int) readmode); fprintf(outprj,"mirrored=%c\n", gt_encseq_is_mirrored(encseq) ? '1' : '0'); } int gt_outprjfile(const char *indexname, GtReadmode readmode, const GtEncseq *encseq, unsigned long numberofallsortedsuffixes, unsigned int prefixlength, unsigned long numoflargelcpvalues, double averagelcp, unsigned long maxbranchdepth, const Definedunsignedlong *longest, GtError *err) { FILE *prjfp; bool haserr = false; gt_error_check(err); prjfp = gt_fa_fopen_with_suffix(indexname,PROJECTFILESUFFIX,"wb",err); if (prjfp == NULL) { haserr = true; } if (!haserr) { showprjinfo(prjfp, readmode, encseq, numberofallsortedsuffixes, prefixlength, numoflargelcpvalues, averagelcp, maxbranchdepth, longest); gt_fa_xfclose(prjfp); } return haserr ? -1 : 0; } genometools-1.5.1/src/match/sfx-outprj.h000066400000000000000000000027031211610345200202230ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_OUTPRJ_H #define SFX_OUTPRJ_H #include "core/readmode_api.h" #include "core/encseq_api.h" #include "core/defined-types.h" #include "core/error_api.h" int gt_outprjfile(const char *indexname, GtReadmode readmode, const GtEncseq *encseq, unsigned long numberofallsortedsuffixes, unsigned int prefixlength, unsigned long numoflargelcpvalues, double averagelcp, unsigned long maxbranchdepth, const Definedunsignedlong *longest, GtError *err); #endif genometools-1.5.1/src/match/sfx-partssuf.c000066400000000000000000000373001211610345200205430ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/assert_api.h" #include "core/ma_api.h" #include "core/codetype.h" #include "core/spacecalc.h" #include "core/format64.h" #include "core/log.h" #include "bcktab.h" #include "sfx-suffixgetset.h" #include "spmsuftab.h" #include "sfx-partssuf.h" #include "firstcodes-tab.h" typedef struct { unsigned long nextidx, widthofpart, suftaboffset, sumofwidth, minindex, maxindex; } GtSuftabpartcomponent; struct GtSuftabparts { GtSuftabpartcomponent *components; bool indexrange_available; unsigned int numofparts; unsigned long largestsizemappedpartwise, largestsuftabwidth; const GtFirstcodestab *fct; }; void gt_suftabparts_showallrecords(const GtSuftabparts *suftabparts, bool withminmaxindex) { unsigned int part; unsigned long totalwidth; gt_assert(suftabparts != NULL); gt_assert(suftabparts->numofparts >= 1U); totalwidth = suftabparts->components[suftabparts->numofparts - 1].sumofwidth; for (part = 0; part < suftabparts->numofparts; part++) { if (withminmaxindex) { gt_log_log("part %u: width=%lu (%.2f%%) offset=%lu nextidx=%lu " "minindex=%lu maxindex=%lu ", part, suftabparts->components[part].widthofpart, 100.00 * (double) suftabparts->components[part].widthofpart/ totalwidth, suftabparts->components[part].suftaboffset, suftabparts->components[part].nextidx, gt_suftabparts_minindex(part,suftabparts), gt_suftabparts_maxindex(part,suftabparts)); } else { gt_log_log("part %u: width=%lu (%.2f%%) offset=%lu nextidx=%lu", part, suftabparts->components[part].widthofpart, 100.00 * (double) suftabparts->components[part].widthofpart/ totalwidth, suftabparts->components[part].nextidx, suftabparts->components[part].suftaboffset); } } gt_log_log("variance %.0f",gt_suftabparts_variance(suftabparts)); } static GtCodetype gt_suftabparts_minindex_raw(unsigned int part, const GtSuftabparts *suftabparts) { GtCodetype minindex; gt_assert(suftabparts != NULL && part < suftabparts->numofparts); minindex = (part == 0) ? 0 : suftabparts->components[part-1].nextidx + 1; if (suftabparts->fct != NULL) { return gt_firstcodes_sample2full(suftabparts->fct,minindex); } return minindex; } static GtCodetype gt_suftabparts_maxindex_raw(unsigned int part, const GtSuftabparts *suftabparts) { GtCodetype maxindex; gt_assert(suftabparts != NULL && part < suftabparts->numofparts); if (suftabparts->fct != NULL) { maxindex = suftabparts->components[part].nextidx; return gt_firstcodes_sample2full(suftabparts->fct,maxindex); } maxindex = (part == suftabparts->numofparts - 1) ? suftabparts->components[part].nextidx - 1 : suftabparts->components[part].nextidx; return maxindex; } static void gt_suftabparts_removeemptyparts(GtSuftabparts *suftabparts, GT_UNUSED unsigned long totalwidth, GtLogger *logger) { #undef SKDEBUG #ifdef SKDEBUG gt_log_log("before removal"); gt_suftabparts_showallrecords(suftabparts,false); #endif gt_assert(suftabparts != NULL); if (suftabparts->numofparts > 0) { unsigned int destpart, srcpart; unsigned long sumwidth = 0; for (destpart = 0, srcpart = 0; srcpart < suftabparts->numofparts; srcpart++) { if (suftabparts->components[srcpart].widthofpart > 0) { if (destpart < srcpart) { suftabparts->components[destpart] = suftabparts->components[srcpart]; } destpart++; } } if (destpart < srcpart) { suftabparts->components[destpart-1].nextidx = suftabparts->components[suftabparts->numofparts-1].nextidx; suftabparts->numofparts -= (srcpart - destpart); gt_assert(suftabparts->numofparts == destpart); } for (srcpart = 0; srcpart < suftabparts->numofparts; srcpart++) { gt_assert(suftabparts->components[srcpart].widthofpart > 0); sumwidth+=suftabparts->components[srcpart].widthofpart; gt_logger_log(logger,"widthofpart[%u]=%lu", srcpart, suftabparts->components[srcpart].widthofpart); } gt_assert(sumwidth == totalwidth); } #ifdef SKDEBUG gt_log_log("after removal"); gt_suftabparts_showallrecords(suftabparts,true); #endif } GtSuftabparts *gt_suftabparts_new(unsigned int numofparts, const GtBcktab *bcktab, const GtFirstcodestab *fct, const GtSfxmappedrangelist *sfxmrlist, unsigned long numofsuffixestoinsert, unsigned long fullspecials, GtLogger *logger) { GtSuftabparts *suftabparts; unsigned long size_mapped; unsigned int part; gt_assert((bcktab == NULL && fct != NULL) || (bcktab != NULL && fct == NULL)); suftabparts = gt_malloc(sizeof *suftabparts); suftabparts->largestsizemappedpartwise = 0; suftabparts->fct = fct; gt_assert(suftabparts != NULL); if (numofsuffixestoinsert == 0) { suftabparts->numofparts = 0; } else { if (numofsuffixestoinsert < (unsigned long) numofparts || (bcktab != NULL && gt_bcktab_prefixlength(bcktab) == 1U)) { suftabparts->numofparts = 1U; } else { suftabparts->numofparts = numofparts; } } if (suftabparts->numofparts == 0) { suftabparts->largestsuftabwidth = fullspecials/numofparts+1; suftabparts->largestsizemappedpartwise = gt_Sfxmappedrangelist_size_entire(sfxmrlist); suftabparts->components = NULL; } else { unsigned int remainder; unsigned long secondidx, firstbound = 0, secondbound, suftaboffset = 0, sumofwidth = 0; const unsigned long widthofsuftabpart = numofsuffixestoinsert/suftabparts->numofparts; suftabparts->components = gt_malloc(sizeof (*suftabparts->components) * suftabparts->numofparts); remainder = (unsigned int) (numofsuffixestoinsert % (unsigned long) suftabparts->numofparts); suftabparts->largestsuftabwidth = 0; for (part=0; part < suftabparts->numofparts; part++) { if (remainder > 0) { suftaboffset += widthofsuftabpart + 1; remainder--; } else { suftaboffset += widthofsuftabpart; } if (part == suftabparts->numofparts - 1) { secondidx = bcktab != NULL ? gt_bcktab_numofallcodes(bcktab) : gt_firstcodes_numofsamples(fct); } else { secondidx = bcktab != NULL ? gt_bcktab_findfirstlarger(bcktab,suftaboffset) : gt_firstcodes_findfirstsamplelarger(fct,suftaboffset); } suftabparts->components[part].nextidx = secondidx; secondbound = bcktab != NULL ? gt_bcktab_get_leftborder(bcktab,secondidx) : gt_firstcodes_get_sample(fct,secondidx); if (part == 0) { suftabparts->components[part].widthofpart = secondbound; suftabparts->components[part].suftaboffset = 0; } else { gt_assert(secondbound >= firstbound); suftabparts->components[part].widthofpart = secondbound - firstbound; suftabparts->components[part].suftaboffset = firstbound; } if (suftabparts->largestsuftabwidth < suftabparts->components[part].widthofpart) { suftabparts->largestsuftabwidth = suftabparts->components[part].widthofpart; } sumofwidth += suftabparts->components[part].widthofpart; suftabparts->components[part].sumofwidth = sumofwidth; firstbound = secondbound; } gt_assert(sumofwidth == numofsuffixestoinsert); } gt_suftabparts_removeemptyparts(suftabparts,numofsuffixestoinsert,logger); if (suftabparts->numofparts > 0) { gt_assert(suftabparts->components != NULL); for (part=0; part < suftabparts->numofparts; part++) { suftabparts->components[part].minindex = gt_suftabparts_minindex_raw(part,suftabparts); suftabparts->components[part].maxindex = gt_suftabparts_maxindex_raw(part,suftabparts); } for (part=1U; part < suftabparts->numofparts; part++) { if (suftabparts->components[part].minindex != suftabparts->components[part-1].maxindex + 1) { suftabparts->components[part].minindex = suftabparts->components[part-1].maxindex + 1; } } for (part=0; part < suftabparts->numofparts; part++) { size_mapped = gt_Sfxmappedrangelist_size_mapped(sfxmrlist, gt_suftabparts_minindex(part,suftabparts), gt_suftabparts_maxindex(part,suftabparts)); if (suftabparts->largestsizemappedpartwise < size_mapped) { suftabparts->largestsizemappedpartwise = size_mapped; } } } return suftabparts; } double gt_suftabparts_variance(const GtSuftabparts *suftabparts) { gt_assert(suftabparts->numofparts > 0); if (suftabparts->numofparts == 1U) { return 0.0; } else { double meanwidth, difference, sum = 0.0; unsigned int part; meanwidth = (double) suftabparts->components[suftabparts->numofparts-1].sumofwidth/ suftabparts->numofparts; for (part = 0; part < suftabparts->numofparts; part++) { difference = (double) suftabparts->components[part].widthofpart - meanwidth; sum += difference * difference; } return sum/(double) (suftabparts->numofparts-1); } } void gt_suftabparts_delete(GtSuftabparts *suftabparts) { if (suftabparts != NULL) { gt_free(suftabparts->components); gt_free(suftabparts); } } GtCodetype gt_suftabparts_minindex(unsigned int part, const GtSuftabparts *suftabparts) { return suftabparts->components[part].minindex; } GtCodetype gt_suftabparts_maxindex(unsigned int part, const GtSuftabparts *suftabparts) { return suftabparts->components[part].maxindex; } GtCodetype gt_suftabparts_maxindex_last(const GtSuftabparts *suftabparts) { gt_assert(suftabparts->numofparts > 0); return gt_suftabparts_maxindex(suftabparts->numofparts-1,suftabparts); } unsigned long gt_suftabparts_offset(unsigned int part, const GtSuftabparts *suftabparts) { gt_assert(suftabparts != NULL && part < suftabparts->numofparts); return suftabparts->components[part].suftaboffset; } unsigned long gt_suftabparts_sumofwidth(unsigned int part, const GtSuftabparts *suftabparts) { gt_assert(suftabparts != NULL && part < suftabparts->numofparts); return suftabparts->components[part].sumofwidth; } unsigned long gt_suftabparts_widthofpart(unsigned int part, const GtSuftabparts *suftabparts) { gt_assert(suftabparts != NULL && part < suftabparts->numofparts); return suftabparts->components[part].widthofpart; } unsigned long gt_suftabparts_largest_width(const GtSuftabparts *suftabparts) { gt_assert(suftabparts != NULL); return suftabparts->largestsuftabwidth; } unsigned long gt_suftabparts_largestsizemappedpartwise( const GtSuftabparts *suftabparts) { gt_assert(suftabparts != NULL); return suftabparts->largestsizemappedpartwise; } unsigned int gt_suftabparts_numofparts(const GtSuftabparts *suftabparts) { gt_assert(suftabparts != NULL); return suftabparts->numofparts; } int gt_suftabparts_fit_memlimit(size_t estimatedspace, unsigned long maximumspace, const GtBcktab *bcktab, const GtFirstcodestab *fct, const GtSfxmappedrangelist *sfxmrlist, unsigned long totallength, unsigned int bitsforseqnumrelpos, unsigned long specialcharacters, unsigned long numofsuffixestosort, bool suftabuint, GtError *err) { unsigned int parts; GtSuftabparts *suftabparts; unsigned long size_mapped = gt_Sfxmappedrangelist_size_entire(sfxmrlist); gt_error_check(err); for (parts = 1U; parts <= 500U; parts++) { uint64_t suftabsize; unsigned long numofentries; suftabparts = gt_suftabparts_new(parts, bcktab, fct, sfxmrlist, numofsuffixestosort, specialcharacters + 1, NULL); gt_assert(suftabparts != NULL); numofentries = gt_suftabparts_largest_width(suftabparts); if (bcktab != NULL) { gt_assert(fct == NULL); suftabsize = gt_suffixsortspace_requiredspace(numofentries, totallength, suftabuint); } else { gt_assert(fct != NULL); suftabsize = (uint64_t) gt_spmsuftab_requiredspace(numofentries, totallength, bitsforseqnumrelpos); } if (parts == 1U) { if (suftabsize + (uint64_t) estimatedspace <= (uint64_t) maximumspace) { gt_suftabparts_delete(suftabparts); return (int) parts; } } else { unsigned long largest = gt_suftabparts_largestsizemappedpartwise(suftabparts); if (suftabsize + (uint64_t) largest + (uint64_t) estimatedspace - (uint64_t) size_mapped <= (uint64_t) maximumspace) { gt_log_log("return parts = %u as suftabsize=%.2f +" "largest=%.2f + estimated=%.2f - size_mapped=%2.f <= %.2f", parts, GT_MEGABYTES(suftabsize), GT_MEGABYTES(largest), GT_MEGABYTES(estimatedspace), GT_MEGABYTES(size_mapped), GT_MEGABYTES(maximumspace)); gt_suftabparts_delete(suftabparts); return (int) parts; } } gt_suftabparts_delete(suftabparts); } gt_error_set(err,"cannot compute enhanced suffix array in at most %lu bytes", maximumspace); return -1; } genometools-1.5.1/src/match/sfx-partssuf.h000066400000000000000000000066101211610345200205500ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_PARTSSUF_H #define SFX_PARTSSUF_H #include "core/logger.h" #include "core/codetype.h" #include "core/error_api.h" #include "sfx-maprange.h" #include "firstcodes-tab.h" #include "bcktab.h" typedef struct GtSuftabparts GtSuftabparts; void gt_suftabparts_showallrecords(const GtSuftabparts *suftabparts, bool withminmaxindex); GtSuftabparts *gt_suftabparts_new(unsigned int numofparts, const GtBcktab *bcktab, const GtFirstcodestab *fct, const GtSfxmappedrangelist *sfxmrlist, unsigned long numofsuffixestoinsert, unsigned long fullspecials, GtLogger *logger); void gt_suftabparts_delete(GtSuftabparts *suftabparts); GtCodetype gt_suftabparts_minindex(unsigned int part, const GtSuftabparts *suftabparts); GtCodetype gt_suftabparts_maxindex(unsigned int part, const GtSuftabparts *suftabparts); GtCodetype gt_suftabparts_maxindex_last(const GtSuftabparts *suftabparts); unsigned long gt_suftabparts_offset(unsigned int part, const GtSuftabparts *suftabparts); unsigned long gt_suftabparts_sumofwidth(unsigned int part, const GtSuftabparts *suftabparts); unsigned long gt_suftabparts_widthofpart(unsigned int part, const GtSuftabparts *suftabparts); unsigned long gt_suftabparts_largest_width(const GtSuftabparts *suftabparts); unsigned int gt_suftabparts_numofparts(const GtSuftabparts *suftabparts); unsigned long gt_suftabparts_largestsizemappedpartwise( const GtSuftabparts *suftabparts); double gt_suftabparts_variance(const GtSuftabparts *suftabparts); int gt_suftabparts_fit_memlimit(size_t estimatedspace, unsigned long maximumspace, const GtBcktab *bcktab, const GtFirstcodestab *fct, const GtSfxmappedrangelist *sfxmrlist, unsigned long totallength, unsigned int bitsforseqnumrelpos, unsigned long specialcharacters, unsigned long numofsuffixestosort, bool suftabuint, GtError *err); #endif genometools-1.5.1/src/match/sfx-radixsort.c000066400000000000000000000053161211610345200207150ustar00rootroot00000000000000/* Copyright (c) 2012 Stefan Kurtz Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma_api.h" #include "core/intbits.h" #include "sfx-suffixgetset.h" #include "radixsort_str.h" #include "sfx-radixsort.h" #include "sfx-lcpvalues.h" void gt_sfx_radixsort_str(GtRadixsortstringinfo *rsi, unsigned long depth, unsigned int sortmaxdepth, unsigned long subbucketleft, unsigned long width, GtSuffixsortspace *sssp, GtLcpvalues *lcpvalues) { unsigned long idx, *suffixes; GtSuffixsortspace_exportptr *exportptr = gt_suffixsortspace_exportptr(subbucketleft, sssp); bool allocated = false; if (exportptr->ulongtabsectionptr != NULL) { suffixes = exportptr->ulongtabsectionptr; } else { suffixes = gt_malloc(sizeof (*suffixes) * width); allocated = true; for (idx = 0; idx < width; idx++) { suffixes[idx] = (unsigned long) exportptr->uinttabsectionptr[idx]; } } gt_radixsort_str_eqlen(rsi, suffixes, lcpvalues, subbucketleft, depth, (unsigned long) sortmaxdepth, width); if (allocated) { gt_assert(exportptr->uinttabsectionptr != NULL); for (idx = 0; idx < width; idx++) { exportptr->uinttabsectionptr[idx] = (uint32_t) suffixes[idx]; if (exportptr->uinttabsectionptr[idx] == 0) { gt_suffixsortspace_updatelongest(sssp,subbucketleft + idx); } } gt_free(suffixes); } else { gt_assert(exportptr->ulongtabsectionptr != NULL); for (idx = 0; idx < width; idx++) { if (exportptr->ulongtabsectionptr[idx] == 0) { gt_suffixsortspace_updatelongest(sssp,subbucketleft + idx); break; } } } gt_suffixsortspace_export_done(sssp); } genometools-1.5.1/src/match/sfx-radixsort.h000066400000000000000000000025431211610345200207210ustar00rootroot00000000000000/* Copyright (c) 2012 Stefan Kurtz Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_RADIXSORT_H #define SFX_RADIXSORT_H #include "core/intbits.h" #include "radixsort_str.h" #include "sfx-lcpvalues.h" #include "sfx-suffixgetset.h" void gt_sfx_radixsort_str(GtRadixsortstringinfo *rsi, unsigned long depth, unsigned int sortmaxdepth, unsigned long subbucketleft, unsigned long width, GtSuffixsortspace *sssp, GtLcpvalues *lcpvalues); #endif genometools-1.5.1/src/match/sfx-run.c000066400000000000000000000574771211610345200175210ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2007-2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include "core/alphabet.h" #include "core/chardef.h" #include "core/codetype.h" #include "core/encseq.h" #include "core/encseq_metadata.h" #include "core/fa.h" #include "core/logger.h" #include "core/readmode.h" #include "core/showtime.h" #include "core/timer_api.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "esa-fileend.h" #include "esa-shulen.h" #include "giextract.h" #include "intcode-def.h" #include "sfx-apfxlen.h" #include "sfx-lcpvalues.h" #include "sfx-opt.h" #include "sfx-outprj.h" #include "sfx-run.h" #include "sfx-suffixer.h" #include "sfx-suffixgetset.h" #include "stamp.h" #ifndef S_SPLINT_S #include "eis-encidxseq.h" #include "eis-bwtseq-construct.h" #include "eis-bwtseq-param.h" #include "eis-suffixerator-interface.h" #endif #define INITOUTFILEPTR(PTR,FLAG,SUFFIX)\ if (!haserr && (FLAG))\ {\ PTR = gt_fa_fopen_with_suffix(gt_str_get(so->indexname),\ SUFFIX, "wb",err);\ if ((PTR) == NULL)\ {\ haserr = true;\ }\ } typedef struct { FILE *outfpsuftab, *outfpbwttab, *outfpbcktab; unsigned long numberofallsortedsuffixes; const GtEncseq *encseq; Definedunsignedlong longest; GtOutlcpinfo *outlcpinfo; GtBUstate_shulen *bustate_shulen; } Outfileinfo; /* static void gt_suflcptab2genomediff(GT_UNUSED void *data, const GtSuffixsortspace *sssp, const GtLcpvalues *tableoflcpvalues, unsigned long bucketoffset, unsigned long width, unsigned long posoffset) { unsigned long idx, lcpvalue, suffix; for (idx=0; idx < width; idx++) { lcpvalue = gt_lcptab_getvalue(tableoflcpvalues,bucketoffset,idx); suffix = gt_suffixsortspace_get(sssp,bucketoffset+posoffset,idx); printf("%lu %lu\n",suffix,MIN(lcpvalue,LCPOVERFLOW)); } } */ static void gt_suflcptab2genomediff(void *data, const GtSuffixsortspace *sssp, const GtLcpvalues *tableoflcpvalues, unsigned long bucketoffset, unsigned long numberofsuffixes, unsigned long posoffset) { (void) gt_sfx_multiesa2shulengthdist( (GtBUstate_shulen *) data, gt_suffixsortspace_getptr_ulong(sssp,bucketoffset+posoffset), gt_suffixsortspace_getptr_uint32(sssp,bucketoffset+posoffset), gt_lcptab_getptr(tableoflcpvalues,bucketoffset), numberofsuffixes, NULL); } static int initoutfileinfo(Outfileinfo *outfileinfo, unsigned int prefixlength, const GtEncseq *encseq, const Suffixeratoroptions *so, GenomediffInfo *gd_info, GtError *err) { bool haserr = false; if (so->outlcptab) { gt_assert(gt_str_get(so->indexname) != NULL || so->genomediff); if (so->genomediff) { outfileinfo->bustate_shulen = gt_sfx_multiesashulengthdist_new(encseq,gd_info); } outfileinfo->outlcpinfo = gt_Outlcpinfo_new(so->genomediff ? NULL : gt_str_get(so->indexname), gt_encseq_alphabetnumofchars(encseq), prefixlength, gt_index_options_lcpdist_value(so->idxopts), gt_index_options_swallow_tail_value(so->idxopts), so->genomediff ? gt_suflcptab2genomediff : NULL, outfileinfo->bustate_shulen, err); if (outfileinfo->outlcpinfo == NULL) { haserr = true; } } else { outfileinfo->outlcpinfo = NULL; } INITOUTFILEPTR(outfileinfo->outfpsuftab, gt_index_options_outsuftab_value(so->idxopts), SUFTABSUFFIX); INITOUTFILEPTR(outfileinfo->outfpbwttab, gt_index_options_outbwttab_value(so->idxopts), BWTTABSUFFIX); INITOUTFILEPTR(outfileinfo->outfpbcktab, gt_index_options_outbcktab_value(so->idxopts), BCKTABSUFFIX); if (gt_index_options_outsuftab_value(so->idxopts) || gt_index_options_outbwttab_value(so->idxopts) || so->outlcptab || gt_index_options_outbcktab_value(so->idxopts)) { outfileinfo->encseq = encseq; } else { outfileinfo->encseq = NULL; } return haserr ? -1 : 0; } static int bwttab2file(Outfileinfo *outfileinfo, const GtSuffixsortspace *suffixsortspace, GtReadmode readmode, unsigned long numberofsuffixes, GT_UNUSED GtError *err) { bool haserr = false; gt_error_check(err); if (outfileinfo->outfpbwttab != NULL) { unsigned long startpos, pos; GtUchar cc = 0; for (pos=0; pos < numberofsuffixes; pos++) { startpos = gt_suffixsortspace_getdirect(suffixsortspace,pos); if (startpos == 0) { cc = (GtUchar) UNDEFBWTCHAR; } else { if (outfileinfo->outfpbwttab != NULL) { /* Random access */ cc = gt_encseq_get_encoded_char(outfileinfo->encseq, startpos - 1, readmode); } } if (outfileinfo->outfpbwttab != NULL) { gt_xfwrite(&cc,sizeof (GtUchar),(size_t) 1,outfileinfo->outfpbwttab); } } } return haserr ? -1 : 0; } static int suffixeratorwithoutput(Outfileinfo *outfileinfo, const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, bool swallow_tail, const Sfxstrategy *sfxstrategy, GtTimer *sfxprogress, bool withprogressbar, GtLogger *logger, GtError *err) { bool haserr = false; Sfxiterator *sfi = NULL; sfi = gt_Sfxiterator_new_withadditionalvalues(encseq, readmode, prefixlength, numofparts, maximumspace, outfileinfo->outlcpinfo, outfileinfo->outfpbcktab, sfxstrategy, sfxprogress, withprogressbar, logger, err); if (sfi == NULL) { haserr = true; } else { const GtSuffixsortspace *suffixsortspace; unsigned long numberofsuffixes; bool specialsuffixes = false; while (true) { suffixsortspace = gt_Sfxiterator_next(&numberofsuffixes,&specialsuffixes, sfi); if (suffixsortspace == NULL) { break; } if (outfileinfo->outfpsuftab != NULL && (!specialsuffixes || !swallow_tail)) { if (gt_suffixsortspace_to_file (outfileinfo->outfpsuftab, suffixsortspace, numberofsuffixes, err) != 0) { haserr = true; break; } } if (bwttab2file(outfileinfo,suffixsortspace,readmode,numberofsuffixes, err) != 0) { haserr = true; break; } outfileinfo->numberofallsortedsuffixes += numberofsuffixes; } } if (haserr) { outfileinfo->longest.defined = false; outfileinfo->longest.valueunsignedlong = 0; } else { outfileinfo->longest.defined = true; outfileinfo->longest.valueunsignedlong = gt_Sfxiterator_longest(sfi); gt_assert(outfileinfo->longest.valueunsignedlong < gt_encseq_total_length(encseq)); if (outfileinfo->outfpbcktab != NULL) { if (gt_Sfxiterator_bcktab2file(outfileinfo->outfpbcktab,sfi,err) != 0) { haserr = true; } outfileinfo->outfpbcktab = NULL; } } if (gt_Sfxiterator_delete(sfi,err) != 0) { haserr = true; } return haserr ? -1 : 0; } static int detpfxlen(unsigned int *prefixlength, const Suffixeratoroptions *so, unsigned int numofchars, unsigned long totallength, bool withspecialsuffixes, GtLogger *logger, GtError *err) { bool haserr = false; unsigned int recommendedprefixlength; Sfxstrategy sfxstrategy = gt_index_options_sfxstrategy_value(so->idxopts); recommendedprefixlength = gt_recommendedprefixlength(numofchars, totallength, sfxstrategy.spmopt_minlength > 0 ? 0.15 : GT_RECOMMENDED_MULTIPLIER_DEFAULT, withspecialsuffixes); if (gt_index_options_prefixlength_value(so->idxopts) == GT_PREFIXLENGTH_AUTOMATIC) { *prefixlength = recommendedprefixlength; gt_logger_log(logger, "automatically determined prefixlength=%u", *prefixlength); } else { unsigned int maxprefixlen; *prefixlength = gt_index_options_prefixlength_value(so->idxopts); maxprefixlen = gt_whatisthemaximalprefixlength(numofchars, totallength, sfxstrategy.storespecialcodes ? (unsigned int) PREFIXLENBITS : 0, withspecialsuffixes); if (gt_checkprefixlength(maxprefixlen,*prefixlength,err) != 0) { haserr = true; } else { gt_showmaximalprefixlength(logger, maxprefixlen, recommendedprefixlength); } } return haserr ? -1 : 0; } #ifndef S_SPLINT_S static int run_packedindexconstruction(GtLogger *logger, GtTimer *sfxprogress, bool withprogressbar, const Suffixeratoroptions *so, unsigned int prefixlength, const GtEncseq *encseq, const Sfxstrategy *sfxstrategy, GtError *err) { sfxInterface *si; BWTSeq *bwtSeq; bool haserr = false; struct bwtParam finalcopy; struct bwtOptions bwtIdxParams = gt_index_options_bwtIdxParams_value(so->idxopts); unsigned int numofchars = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); finalcopy = bwtIdxParams.final; if (numofchars > 10U && finalcopy.seqParams.encParams.blockEnc.blockSize > 3U) { finalcopy.seqParams.encParams.blockEnc.blockSize = 3U; } gt_logger_log(logger, "run construction of packed index for: " "blocksize=%u, blocks-per-bucket=%u, locfreq=%u", finalcopy.seqParams.encParams.blockEnc.blockSize, finalcopy.seqParams.encParams.blockEnc.bucketBlocks, finalcopy.locateInterval); si = gt_newSfxInterface(gt_index_options_readmode_value(so->idxopts), prefixlength, gt_index_options_numofparts_value(so->idxopts), gt_index_options_maximumspace_value(so->idxopts), sfxstrategy, encseq, sfxprogress, withprogressbar, gt_encseq_total_length(encseq) + 1, logger, err); if (si == NULL) { haserr = true; } else { bwtSeq = gt_createBWTSeqFromSfxI(&finalcopy, si, err); if (bwtSeq == NULL) { haserr = true; } else { gt_deleteBWTSeq(bwtSeq); /**< the actual object is not * used here */ } gt_deleteSfxInterface(si); } return haserr ? -1 : 0; } #endif int runsuffixerator(bool doesa, Suffixeratoroptions *so, GenomediffInfo *gd_info, GtLogger *logger, GtError *err) { GtTimer *sfxprogress = NULL; Outfileinfo outfileinfo; bool haserr = false; unsigned int prefixlength; Sfxstrategy sfxstrategy; GtEncseq *encseq = NULL; GtReadmode readmode = gt_index_options_readmode_value(so->idxopts); gt_error_check(err); so->outlcptab = so->genomediff ? true : gt_index_options_outlcptab_value(so->idxopts); if (gt_showtime_enabled()) { sfxprogress = gt_timer_new_with_progress_description("determining sequence " "length and number of special symbols"); gt_timer_start(sfxprogress); } if (gt_str_length(so->inputindex) > 0) { GtEncseqLoader *el; el = gt_encseq_loader_new_from_options(so->loadopts, err); if (!gt_encseq_options_ssp_value(so->loadopts)) { GtEncseqMetadata* emd = gt_encseq_metadata_new(gt_str_get(so->inputindex), err); if (emd == NULL) { haserr = true; } else { GtEncseqAccessType at = gt_encseq_metadata_accesstype(emd); if (!gt_encseq_access_type_isviautables(at)) { gt_encseq_loader_do_not_require_ssp_tab(el); } } gt_encseq_metadata_delete(emd); } if (!haserr) { gt_encseq_loader_set_logger(el, logger); /* as we only construct the des, sds, and ssptable, but do not need it later during the construction of the enhanced suffix array, we do not load it again: we just load the information stored in the .esq file. It would be better to use the in memory constructed encseq rather than the one mapped into memory. This would require to free the des, sds, and ssptable. */ gt_encseq_loader_disable_autosupport(el); gt_encseq_loader_do_not_require_des_tab(el); gt_encseq_loader_do_not_require_sds_tab(el); gt_encseq_loader_do_not_require_ssp_tab(el); encseq = gt_encseq_loader_load(el, gt_str_get(so->inputindex), err); } gt_encseq_loader_delete(el); if (encseq == NULL) { haserr = true; } } else { GtEncseqEncoder *ee = NULL; ee = gt_encseq_encoder_new_from_options(so->encopts, err); /* '-plain' implies no description support */ if (gt_encseq_options_plain_value(so->loadopts)) { gt_encseq_encoder_do_not_create_des_tab(ee); gt_encseq_encoder_do_not_create_sds_tab(ee); } if (ee == NULL) haserr = true; if (!haserr) { int rval; gt_encseq_encoder_set_timer(ee, sfxprogress); gt_encseq_encoder_set_logger(ee, logger); rval = gt_encseq_encoder_encode(ee, so->db, gt_str_get(so->indexname), err); if (rval != 0) haserr = true; if (!haserr) { GtEncseqLoader *el = gt_encseq_loader_new_from_options(so->loadopts, err); /* as we only construct the des, sds, and ssptable, but do not need it later during the construction of the enhanced suffix array, we do not load it again: we just load the information stored in the .esq file. It would be better to use the in memory constructed encseq rather than the one mapped into memory. This would require to free the des, sds, and ssptable. */ gt_encseq_loader_disable_autosupport(el); gt_encseq_loader_do_not_require_des_tab(el); gt_encseq_loader_do_not_require_sds_tab(el); gt_encseq_loader_do_not_require_ssp_tab(el); encseq = gt_encseq_loader_load(el, gt_str_get(so->indexname), err); if (!encseq) haserr = true; gt_encseq_loader_delete(el); } } if (encseq == NULL) { haserr = true; } gt_encseq_encoder_delete(ee); } if (!haserr) { gt_encseq_show_features(encseq,logger,false); if (readmode == GT_READMODE_COMPL || readmode == GT_READMODE_REVCOMPL) { if (!gt_alphabet_is_dna(gt_encseq_alphabet(encseq))) { gt_error_set(err,"option -%s only can be used for DNA alphabets", readmode == GT_READMODE_COMPL ? "cpl" : "rcl"); haserr = true; } } } if (!haserr && gt_index_options_outkystab_value(so->idxopts) && !gt_index_options_outkyssort_value(so->idxopts)) { if (gt_extractkeysfromdesfile(gt_str_get(so->indexname), false, logger, err) != 0) { haserr = true; } } prefixlength = gt_index_options_prefixlength_value(so->idxopts); sfxstrategy = gt_index_options_sfxstrategy_value(so->idxopts); if (!haserr) { if (gt_index_options_outsuftab_value(so->idxopts) || gt_index_options_outbwttab_value(so->idxopts) || so->outlcptab || gt_index_options_outbcktab_value(so->idxopts) || !doesa) { unsigned int numofchars = gt_alphabet_num_of_chars( gt_encseq_alphabet(encseq)); if (detpfxlen(&prefixlength, so, numofchars, gt_encseq_total_length(encseq), sfxstrategy.spmopt_minlength == 0 ? true : false, logger, err) != 0) { haserr = true; } } else { if (readmode != GT_READMODE_FORWARD) { gt_error_set(err,"option '-dir %s' only makes sense in combination " "with at least one of the options -suf, -lcp, or " "-bwt", gt_readmode_show(readmode)); haserr = true; } } } outfileinfo.outfpsuftab = NULL; outfileinfo.outfpbwttab = NULL; outfileinfo.outlcpinfo = NULL; outfileinfo.outfpbcktab = NULL; outfileinfo.numberofallsortedsuffixes = 0; outfileinfo.longest.defined = false; outfileinfo.longest.valueunsignedlong = 0; outfileinfo.bustate_shulen = NULL; outfileinfo.encseq = NULL; if (!haserr) { if (initoutfileinfo(&outfileinfo,prefixlength,encseq,so,gd_info,err) != 0) { haserr = true; } } if (!haserr) { if (gt_index_options_outsuftab_value(so->idxopts) || gt_index_options_outbwttab_value(so->idxopts) || so->outlcptab || !doesa) { if (doesa) { if (suffixeratorwithoutput( &outfileinfo, encseq, readmode, prefixlength, gt_index_options_numofparts_value(so->idxopts), gt_index_options_maximumspace_value(so->idxopts), gt_index_options_swallow_tail_value(so->idxopts), &sfxstrategy, sfxprogress, so->showprogress, logger, err) != 0) { haserr = true; } } else { #ifndef S_SPLINT_S sfxstrategy.outsuftabonfile = false; if (run_packedindexconstruction(logger, sfxprogress, so->showprogress, so, prefixlength, encseq, &sfxstrategy, err) != 0) { haserr = true; } #endif } } } if (!haserr && outfileinfo.bustate_shulen != NULL && gt_sfx_multiesa2shulengthdist_last(outfileinfo.bustate_shulen,err) != 0) { haserr = true; } gt_fa_fclose(outfileinfo.outfpsuftab); gt_fa_fclose(outfileinfo.outfpbwttab); gt_fa_fclose(outfileinfo.outfpbcktab); if (!haserr) { unsigned long numoflargelcpvalues, maxbranchdepth; double averagelcp; if (outfileinfo.outlcpinfo == NULL) { numoflargelcpvalues = maxbranchdepth = 0; averagelcp = 0.0; } else { numoflargelcpvalues = gt_Outlcpinfo_numoflargelcpvalues(outfileinfo.outlcpinfo); maxbranchdepth = gt_Outlcpinfo_maxbranchdepth(outfileinfo.outlcpinfo); averagelcp = gt_Outlcpinfo_lcptabsum(outfileinfo.outlcpinfo)/ outfileinfo.numberofallsortedsuffixes; } if (gt_outprjfile(gt_str_get(so->indexname), readmode, encseq, outfileinfo.numberofallsortedsuffixes, prefixlength, numoflargelcpvalues, averagelcp, maxbranchdepth, &outfileinfo.longest, err) != 0) { haserr = true; } } gt_Outlcpinfo_delete(outfileinfo.outlcpinfo); gt_sfx_multiesashulengthdist_delete(outfileinfo.bustate_shulen,gd_info); gt_encseq_delete(encseq); encseq = NULL; if (!haserr && gt_index_options_outkystab_value(so->idxopts) && gt_index_options_outkyssort_value(so->idxopts)) { if (gt_extractkeysfromdesfile(gt_str_get(so->indexname), true, logger, err) != 0) { haserr = true; } } if (sfxprogress != NULL) { gt_timer_show_progress_final(sfxprogress, stdout); gt_timer_delete(sfxprogress); } return haserr ? -1 : 0; } int gt_parseargsandcallsuffixerator(bool doesa,int argc, const char **argv,GtError *err) { Suffixeratoroptions so; int retval; bool haserr = false; gt_error_check(err); retval = gt_suffixeratoroptions(&so,doesa,argc,argv,err); if (retval == 0) { GtLogger *logger = gt_logger_new(so.beverbose, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(logger,"sizeof (unsigned long)=%lu", (unsigned long) (sizeof (unsigned long) * CHAR_BIT)); if (runsuffixerator(doesa,&so,NULL,logger,err) < 0) { haserr = true; } gt_logger_delete(logger); logger = NULL; } else { if (retval < 0) { haserr = true; } } gt_sfxoptions_delete(&so); return haserr ? -1 : 0; } genometools-1.5.1/src/match/sfx-run.h000066400000000000000000000024361211610345200175070ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_RUN_H #define SFX_RUN_H #include #include "core/error.h" #include "core/logger.h" #include "match/sfx-opt.h" #include "match/genomediff_opt.h" int gt_parseargsandcallsuffixerator(bool doesa,int argc, const char **argv,GtError *err); int runsuffixerator(bool doesa, Suffixeratoroptions *so, GenomediffInfo *gd_info, GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/sfx-sain.c000066400000000000000000001311621211610345200176270ustar00rootroot00000000000000/* Copyright (c) 2012 Stefan Kurtz Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/minmax.h" #include "core/unused_api.h" #include "core/timer_api.h" #include "core/mathsupport.h" #include "sfx-linlcp.h" #include "sfx-sain.h" #define GT_SAIN_SHOWTIMER(DESC)\ if (timer != NULL && gt_logger_enabled(logger))\ {\ gt_timer_show_progress(timer,DESC,stdout);\ } typedef enum { GT_SAIN_PLAINSEQ, GT_SAIN_INTSEQ, GT_SAIN_ENCSEQ } GtSainSeqtype; typedef struct { unsigned long totallength, numofchars, currentround, *bucketsize, *bucketfillptr, *sstarfirstcharcount, *roundtable; union { const GtEncseq *encseq; const GtUchar *plainseq; const unsigned long *array; } seq; GtReadmode readmode; /* only relevant for encseq */ GtSainSeqtype seqtype; bool bucketfillptrpoints2suftab, bucketsizepoints2suftab, roundtablepoints2suftab; } GtSainseq; static bool gt_sain_decideforfastmethod(unsigned long maxvalue, unsigned long len) { return maxvalue < (unsigned long) GT_FIRSTTWOBITS && len > 1024UL ? true : false; } static GtSainseq *gt_sainseq_new_from_encseq(const GtEncseq *encseq, GtReadmode readmode) { unsigned long idx; GtSainseq *sainseq = gt_malloc(sizeof *sainseq); sainseq->seqtype = GT_SAIN_ENCSEQ; sainseq->seq.encseq = encseq; sainseq->readmode = readmode; sainseq->totallength = gt_encseq_total_length(encseq); sainseq->numofchars = (unsigned long) gt_encseq_alphabetnumofchars(encseq); sainseq->bucketsize = gt_malloc(sizeof (*sainseq->bucketsize) * sainseq->numofchars); sainseq->bucketfillptr = gt_malloc(sizeof (*sainseq->bucketfillptr) * sainseq->numofchars); if (gt_sain_decideforfastmethod(sainseq->totallength+GT_COMPAREOFFSET, sainseq->totallength)) { sainseq->roundtable = gt_malloc(sizeof (*sainseq->roundtable) * (size_t) GT_MULT2(sainseq->numofchars)); } else { sainseq->roundtable = NULL; } sainseq->sstarfirstcharcount = gt_calloc((size_t) sainseq->numofchars, sizeof (*sainseq->sstarfirstcharcount)); sainseq->bucketfillptrpoints2suftab = false; sainseq->bucketsizepoints2suftab = false; sainseq->roundtablepoints2suftab = false; for (idx = 0; idxnumofchars; idx++) { if (GT_ISDIRCOMPLEMENT(readmode)) { sainseq->bucketsize[idx] = gt_encseq_charcount(encseq,(GtUchar) GT_COMPLEMENTBASE(idx)); } else { sainseq->bucketsize[idx] = gt_encseq_charcount(encseq,(GtUchar) idx); } } return sainseq; } static GtSainseq *gt_sainseq_new_from_plainseq(const GtUchar *plainseq, unsigned long len) { const GtUchar *cptr; GtSainseq *sainseq = gt_malloc(sizeof *sainseq); sainseq->seqtype = GT_SAIN_PLAINSEQ; sainseq->seq.plainseq = plainseq; sainseq->totallength = len; sainseq->numofchars = UCHAR_MAX+1; sainseq->bucketsize = gt_calloc((size_t) sainseq->numofchars, sizeof (*sainseq->bucketsize)); sainseq->bucketfillptr = gt_malloc(sizeof (*sainseq->bucketfillptr) * sainseq->numofchars); if (gt_sain_decideforfastmethod(len+1,len)) { sainseq->roundtable = gt_malloc(sizeof (*sainseq->roundtable) * (size_t) GT_MULT2(sainseq->numofchars)); } else { sainseq->roundtable = NULL; } sainseq->sstarfirstcharcount = gt_calloc((size_t) sainseq->numofchars, sizeof (*sainseq->sstarfirstcharcount)); sainseq->bucketfillptrpoints2suftab = false; sainseq->bucketsizepoints2suftab = false; sainseq->roundtablepoints2suftab = false; for (cptr = sainseq->seq.plainseq; cptr < sainseq->seq.plainseq + len; cptr++) { sainseq->bucketsize[*cptr]++; } return sainseq; } static GtSainseq *gt_sainseq_new_from_array(unsigned long *arr, unsigned long len, unsigned long numofchars, unsigned long *suftab, unsigned long firstusable, unsigned long suftabentries) { unsigned long charidx, *cptr; GtSainseq *sainseq = gt_malloc(sizeof *sainseq); sainseq->seqtype = GT_SAIN_INTSEQ; sainseq->seq.array = arr; sainseq->totallength = len; sainseq->numofchars = numofchars; gt_assert(firstusable < suftabentries); if (suftabentries - firstusable >= numofchars) { /*printf("bucketsize: reclaim suftab[%lu,%lu]\n", suftabentries - numofchars,suftabentries-1);*/ sainseq->bucketsize = suftab + suftabentries - numofchars; sainseq->bucketsizepoints2suftab = true; } else { printf("bucketsize requires %lu entries and only %lu are left\n", numofchars,suftabentries - firstusable); sainseq->bucketsizepoints2suftab = false; sainseq->bucketsize = gt_malloc(sizeof (*sainseq->bucketsize) * numofchars); } if (suftabentries - firstusable >= GT_MULT2(numofchars)) { /*printf("bucketfillptr: reclaim suftab[%lu,%lu]\n", suftabentries - GT_MULT2(numofchars), suftabentries - numofchars -1);*/ sainseq->bucketfillptr = suftab + suftabentries - GT_MULT2(numofchars); sainseq->bucketfillptrpoints2suftab = true; } else { /*printf("bucketfillptr requires %lu entries and only %lu are left\n", numofchars,suftabentries - firstusable);*/ sainseq->bucketfillptrpoints2suftab = false; sainseq->bucketfillptr = gt_malloc(sizeof (*sainseq->bucketfillptr) * numofchars); } if (gt_sain_decideforfastmethod(len+1,len)) { if (suftabentries - firstusable >= GT_MULT4(numofchars)) { /*printf("roundtable: reclaim suftab[%lu,%lu]\n", suftabentries - GT_MULT4(numofchars), suftabentries - GT_MULT2(numofchars) - 1);*/ sainseq->roundtable = suftab + suftabentries - GT_MULT4(numofchars); sainseq->roundtablepoints2suftab = true; } else { sainseq->roundtablepoints2suftab = false; sainseq->roundtable = gt_malloc(sizeof (*sainseq->roundtable) * GT_MULT2(numofchars)); } } else { sainseq->roundtablepoints2suftab = false; sainseq->roundtable = NULL; } sainseq->sstarfirstcharcount = NULL; for (charidx = 0; charidx < sainseq->numofchars; charidx++) { sainseq->bucketsize[charidx] = 0; } for (cptr = arr; cptr < arr + sainseq->totallength; cptr++) { sainseq->bucketsize[*cptr]++; } return sainseq; } static void gt_sainseq_delete(GtSainseq *sainseq) { if (sainseq != NULL) { if (!sainseq->bucketfillptrpoints2suftab) { gt_free(sainseq->bucketfillptr); } if (!sainseq->bucketsizepoints2suftab) { gt_free(sainseq->bucketsize); } if (!sainseq->roundtablepoints2suftab) { gt_free(sainseq->roundtable); } if (sainseq->seqtype != GT_SAIN_INTSEQ) { gt_free(sainseq->sstarfirstcharcount); } gt_free(sainseq); } } #ifdef GT_SAIN_WITHCOUNTS static unsigned long gt_sain_countcharaccess = 0; #endif static unsigned long gt_sainseq_getchar(const GtSainseq *sainseq, unsigned long position) { GtUchar cc; gt_assert(position < sainseq->totallength); #ifdef GT_SAIN_WITHCOUNTS gt_sain_countcharaccess++; #endif return (sainseq->seqtype == GT_SAIN_PLAINSEQ) ? (unsigned long) sainseq->seq.plainseq[position] : ((sainseq->seqtype == GT_SAIN_INTSEQ) ? sainseq->seq.array[position] : ISSPECIAL(cc = gt_encseq_get_encoded_char(sainseq->seq.encseq, position, sainseq->readmode)) ? GT_UNIQUEINT(position) : (unsigned long) cc); } static void gt_sain_endbuckets(GtSainseq *sainseq) { unsigned long charidx, previous; previous = sainseq->bucketfillptr[0] = sainseq->bucketsize[0]; for (charidx = 1UL; charidx < sainseq->numofchars; charidx++) { previous += sainseq->bucketsize[charidx]; sainseq->bucketfillptr[charidx] = previous; } } static void gt_sain_startbuckets(GtSainseq *sainseq) { unsigned long charidx, previous; previous = sainseq->bucketfillptr[0] = 0; for (charidx = 1UL; charidx < sainseq->numofchars; charidx++) { previous += sainseq->bucketsize[charidx-1]; sainseq->bucketfillptr[charidx] = previous; } } typedef struct { unsigned long buf_size, numofchars, cachesize, *values, *fillptr, *suftab; uint16_t *nextidx; int log_bufsize; size_t size; } GtSainbuffer; static GtSainbuffer *gt_sainbuffer_new(unsigned long *suftab, unsigned long *fillptr, unsigned long numofchars, GtLogger *logger) { if (numofchars <= UCHAR_MAX+1) { GtSainbuffer *buf = gt_malloc(sizeof (*buf)); buf->size = sizeof (*buf); buf->fillptr = fillptr; buf->suftab = suftab; buf->log_bufsize = 18 - (sizeof (unsigned long) == (size_t) 4 ? 1 : 2) - (int) gt_determinebitspervalue(numofchars); buf->buf_size = 1UL << buf->log_bufsize; buf->numofchars = numofchars; gt_assert(buf->buf_size <= UINT16_MAX); buf->cachesize = numofchars << buf->log_bufsize; buf->values = gt_malloc(sizeof (*buf->values) * buf->cachesize); buf->size += sizeof (*buf->values) * buf->cachesize; buf->nextidx = gt_calloc((size_t) numofchars,sizeof (*buf->nextidx)); buf->size += sizeof (*buf->nextidx) * numofchars; gt_logger_log(logger,"used buffer of %lu bytes (bufsize=%lu)", (unsigned long) buf->size,buf->buf_size); return buf; } else { return NULL; } } static void gt_sainbuffer_update(GtSainbuffer *buf, unsigned long charidx, unsigned long value) { const unsigned long offset = charidx << buf->log_bufsize; buf->values[offset + (unsigned long) buf->nextidx[charidx]] = value; if ((unsigned long) buf->nextidx[charidx] < buf->buf_size - 1) { buf->nextidx[charidx]++; } else { unsigned long *writeptr = buf->suftab + buf->fillptr[charidx] - 1, *readptr = buf->values + offset; const unsigned long *readend = readptr + buf->buf_size; while (readptr < readend) { *(writeptr--) = *(readptr++); } buf->nextidx[charidx] = 0; buf->fillptr[charidx] -= buf->buf_size; } } static void gt_sainbuffer_flushall(GtSainbuffer *buf) { unsigned long charidx; if (buf == NULL) { return; } for (charidx = 0; charidx < buf->numofchars; charidx++) { const unsigned long bufleft = (unsigned long) buf->nextidx[charidx]; if (bufleft > 0) { unsigned long *writeptr = buf->suftab + buf->fillptr[charidx] - 1, *readptr = buf->values + (charidx << buf->log_bufsize); const unsigned long *readend = readptr + bufleft; while (readptr < readend) { *(writeptr--) = *(readptr++); } buf->nextidx[charidx] = 0; buf->fillptr[charidx] -= bufleft; } } } static void gt_sainbuffer_delete(GtSainbuffer *buf) { if (buf != NULL) { gt_free(buf->values); gt_free(buf->nextidx); gt_free(buf); } } #define GT_SAINUPDATEBUCKETPTR(CURRENTCC)\ if (bucketptr != NULL)\ {\ if ((CURRENTCC) != lastupdatecc)\ {\ fillptr[lastupdatecc] = (unsigned long) (bucketptr - suftab);\ bucketptr = suftab + fillptr[CURRENTCC];\ lastupdatecc = CURRENTCC;\ }\ } else\ {\ bucketptr = suftab + fillptr[CURRENTCC];\ lastupdatecc = CURRENTCC;\ } static void gt_sain_special_singleSinduction1(GtSainseq *sainseq, long *suftab, long position); static void gt_sain_induceStypes1fromspecialranges(GtSainseq *sainseq, const GtEncseq *encseq, long *suftab); static void gt_sain_special_singleSinduction2(const GtSainseq *sainseq, long *suftab, long position, GT_UNUSED unsigned long nonspecialentries); static void gt_sain_induceStypes2fromspecialranges( const GtSainseq *sainseq, const GtEncseq *encseq, long *suftab, unsigned long nonspecialentries); #include "match/sfx-sain.inc" static unsigned long gt_sain_insertSstarsuffixes(GtSainseq *sainseq, unsigned long *suftab, GtLogger *logger) { switch (sainseq->seqtype) { case GT_SAIN_PLAINSEQ: return gt_sain_PLAINSEQ_insertSstarsuffixes(sainseq,sainseq->seq.plainseq, suftab,logger); case GT_SAIN_ENCSEQ: return gt_sain_ENCSEQ_insertSstarsuffixes(sainseq,sainseq->seq.encseq, suftab,logger); case GT_SAIN_INTSEQ: return gt_sain_INTSEQ_insertSstarsuffixes(sainseq,sainseq->seq.array, suftab,logger); } /*@ignore@*/ return 0; /*@end@*/ } static void gt_sain_incrementfirstSstar(GtSainseq *sainseq, unsigned long *suftab) { unsigned long charidx, sum = 0; for (charidx = 0; charidx < sainseq->numofchars; charidx++) { sum += sainseq->bucketsize[charidx]; gt_assert(sainseq->bucketfillptr[charidx] <= sum); if (sainseq->bucketfillptr[charidx] < sum) { suftab[sainseq->bucketfillptr[charidx]] += sainseq->totallength; } sainseq->roundtable[charidx] = 0; sainseq->roundtable[charidx+sainseq->numofchars] = 0; } } static void gt_sain_induceLtypesuffixes1(GtSainseq *sainseq, long *suftab, unsigned long nonspecialentries) { switch (sainseq->seqtype) { case GT_SAIN_PLAINSEQ: (sainseq->roundtable == NULL ? gt_sain_PLAINSEQ_induceLtypesuffixes1 : gt_sain_PLAINSEQ_fast_induceLtypesuffixes1) (sainseq,sainseq->seq.plainseq,suftab,nonspecialentries); break; case GT_SAIN_ENCSEQ: (sainseq->roundtable == NULL ? gt_sain_ENCSEQ_induceLtypesuffixes1 : gt_sain_ENCSEQ_fast_induceLtypesuffixes1) (sainseq,sainseq->seq.encseq,suftab,nonspecialentries); break; case GT_SAIN_INTSEQ: (sainseq->roundtable == NULL ? gt_sain_INTSEQ_induceLtypesuffixes1 : gt_sain_INTSEQ_fast_induceLtypesuffixes1) (sainseq,sainseq->seq.array,suftab,nonspecialentries); break; } } static void gt_sain_adjustsuftab(unsigned long totallength,long *suftab, unsigned long nonspecialentries) { long *suftabptr; for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { if (*suftabptr > 0 && *suftabptr < (long) totallength) { long *nextgteq; *suftabptr += (long) totallength; nextgteq = suftabptr - 1; while (nextgteq >= suftab && *nextgteq < (long) totallength) { nextgteq--; } if (*nextgteq >= (long) totallength) { *nextgteq -= (long) totallength; } suftabptr = nextgteq; } } } static void gt_sain_special_singleSinduction1(GtSainseq *sainseq, long *suftab, long position) { unsigned long currentcc = gt_sainseq_getchar(sainseq, (unsigned long) position); if (currentcc < sainseq->numofchars) { unsigned long leftcontextcc, putidx = --sainseq->bucketfillptr[currentcc]; gt_assert(position > 0); position--; leftcontextcc = gt_sainseq_getchar(sainseq,(unsigned long) position); if (sainseq->roundtable != NULL) { unsigned long t = (currentcc << 1) | (leftcontextcc > currentcc ? 1UL : 0); gt_assert (sainseq->roundtable[t] <= sainseq->currentround); if (sainseq->roundtable[t] < sainseq->currentround) { position += sainseq->totallength; sainseq->roundtable[t] = sainseq->currentround; } else { position += sainseq->totallength; } } suftab[putidx] = (leftcontextcc > currentcc) ? ~(position+1) : position; #ifdef SAINSHOWSTATE printf("end S-induce: suftab[%lu]=%ld\n",putidx,suftab[putidx]); #endif } } static void gt_sain_induceStypes1fromspecialranges(GtSainseq *sainseq, const GtEncseq *encseq, long *suftab) { if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; sri = gt_specialrangeiterator_new(encseq, GT_ISDIRREVERSE(sainseq->readmode) ? true : false); while (gt_specialrangeiterator_next(sri,&range)) { if (GT_ISDIRREVERSE(sainseq->readmode)) { gt_range_reverse(sainseq->totallength,&range); } if (range.start > 1UL) { gt_sain_special_singleSinduction1(sainseq, suftab, (long) (range.start - 1)); } } gt_specialrangeiterator_delete(sri); } } static void gt_sain_induceStypesuffixes1(GtSainseq *sainseq, long *suftab, unsigned long nonspecialentries) { switch (sainseq->seqtype) { case GT_SAIN_PLAINSEQ: (sainseq->roundtable == NULL ? gt_sain_PLAINSEQ_induceStypesuffixes1 : gt_sain_PLAINSEQ_fast_induceStypesuffixes1) (sainseq,sainseq->seq.plainseq,suftab,nonspecialentries); break; case GT_SAIN_ENCSEQ: (sainseq->roundtable == NULL ? gt_sain_ENCSEQ_induceStypesuffixes1 : gt_sain_ENCSEQ_fast_induceStypesuffixes1) (sainseq,sainseq->seq.encseq,suftab,nonspecialentries); break; case GT_SAIN_INTSEQ: (sainseq->roundtable == NULL ? gt_sain_INTSEQ_induceStypesuffixes1 : gt_sain_INTSEQ_fast_induceStypesuffixes1) (sainseq,sainseq->seq.array,suftab,nonspecialentries); break; } } static void gt_sain_moveSstar2front(unsigned long countSstartype, long *suftab, GT_UNUSED unsigned long nonspecialentries) { unsigned long readidx, writeidx = 0; long position; for (readidx = 0; (position = suftab[readidx]) < 0; readidx++) { position = ~position; suftab[readidx] = position; gt_assert ((readidx + 1) < nonspecialentries); } if (readidx < countSstartype) { for (writeidx = readidx, readidx++; /* Nothing */; readidx++) { gt_assert (readidx < nonspecialentries); if ((position = suftab[readidx]) < 0) { position = ~position; gt_assert(writeidx < readidx); suftab[writeidx++] = position; suftab[readidx] = 0; if (writeidx == countSstartype) { break; } } else { suftab[readidx] = 0; } } } else { writeidx = readidx; } gt_assert(writeidx == countSstartype); } static unsigned long gt_sain_fast_moveSstar2front( unsigned long totallength, unsigned long countSstartype, long *suftab, GT_UNUSED unsigned long nonspecialentries) { unsigned long readidx, namecount = 0, writeidx = 0; long position; for (readidx = 0; (position = suftab[readidx]) < 0; readidx++) { position = ~position; if (position >= (long) totallength) { namecount++; } suftab[readidx] = position; gt_assert ((readidx + 1) < nonspecialentries); } if (readidx < countSstartype) { for (writeidx = readidx, readidx++; /* Nothing */; readidx++) { gt_assert (readidx < nonspecialentries); if ((position = suftab[readidx]) < 0) { position = ~position; if (position >= (long) totallength) { namecount++; } gt_assert(writeidx < readidx); suftab[writeidx++] = position; suftab[readidx] = 0; if (writeidx == countSstartype) { break; } } else { suftab[readidx] = 0; } } } else { writeidx = readidx; } gt_assert(writeidx == countSstartype); return namecount; } static void gt_sain_fast_assignSstarnames(unsigned long totallength, unsigned long countSstartype, unsigned long *suftab, unsigned long numberofnames, unsigned long nonspecialentries) { unsigned long *suftabptr, *secondhalf = suftab + countSstartype; if (numberofnames < countSstartype) { unsigned long currentname = numberofnames + 1; for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { unsigned long position; if ((position = *suftabptr) >= totallength) { position -= totallength; gt_assert(currentname > 0); currentname--; } if (currentname <= numberofnames) { secondhalf[GT_DIV2(position)] = currentname; } } } else { for (suftabptr = suftab; suftabptr < suftab + nonspecialentries; suftabptr++) { if (*suftabptr >= totallength) { *suftabptr -= totallength; } } } } static void gt_sain_induceLtypesuffixes2(const GtSainseq *sainseq, long *suftab, unsigned long nonspecialentries) { switch (sainseq->seqtype) { case GT_SAIN_PLAINSEQ: gt_sain_PLAINSEQ_induceLtypesuffixes2(sainseq,sainseq->seq.plainseq, suftab,nonspecialentries); break; case GT_SAIN_ENCSEQ: gt_sain_ENCSEQ_induceLtypesuffixes2(sainseq,sainseq->seq.encseq,suftab, nonspecialentries); break; case GT_SAIN_INTSEQ: gt_sain_INTSEQ_induceLtypesuffixes2(sainseq,sainseq->seq.array, suftab,nonspecialentries); break; } } static void gt_sain_special_singleSinduction2(const GtSainseq *sainseq, long *suftab, long position, GT_UNUSED unsigned long nonspecialentries) { unsigned long currentcc; position--; currentcc = gt_sainseq_getchar(sainseq,(unsigned long) position); if (currentcc < sainseq->numofchars) { unsigned long putidx = --sainseq->bucketfillptr[currentcc]; gt_assert(putidx < nonspecialentries); suftab[putidx] = (position == 0 || gt_sainseq_getchar(sainseq, (unsigned long) (position-1)) > currentcc) ? ~position : position; #ifdef SAINSHOWSTATE printf("end S-induce: suftab[%lu]=%ld\n",putidx,suftab[putidx]); #endif } } static void gt_sain_induceStypes2fromspecialranges( const GtSainseq *sainseq, const GtEncseq *encseq, long *suftab, unsigned long nonspecialentries) { if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; sri = gt_specialrangeiterator_new(encseq, GT_ISDIRREVERSE(sainseq->readmode) ? true : false); while (gt_specialrangeiterator_next(sri,&range)) { if (GT_ISDIRREVERSE(sainseq->readmode)) { gt_range_reverse(sainseq->totallength,&range); } if (range.start > 0) { gt_sain_special_singleSinduction2(sainseq, suftab, (long) range.start, nonspecialentries); } } gt_specialrangeiterator_delete(sri); } } static void gt_sain_induceStypesuffixes2(const GtSainseq *sainseq, long *suftab, unsigned long nonspecialentries) { switch (sainseq->seqtype) { case GT_SAIN_PLAINSEQ: gt_sain_PLAINSEQ_induceStypesuffixes2(sainseq,sainseq->seq.plainseq, suftab,nonspecialentries); break; case GT_SAIN_ENCSEQ: gt_sain_ENCSEQ_induceStypesuffixes2(sainseq,sainseq->seq.encseq,suftab, nonspecialentries); break; case GT_SAIN_INTSEQ: gt_sain_INTSEQ_induceStypesuffixes2(sainseq,sainseq->seq.array, suftab,nonspecialentries); break; } } static int gt_sain_compare_Sstarstrings(const GtSainseq *sainseq, unsigned long start1, unsigned long start2, unsigned long len) { unsigned long end1 = start1 + len; gt_assert(start1 <= sainseq->totallength && start2 <= sainseq->totallength && start1 != start2); while (start1 < end1) { unsigned long cc1, cc2; if (start1 == sainseq->totallength) { gt_assert(start1 > start2); return 1; } if (start2 == sainseq->totallength) { gt_assert(start1 < start2); return -1; } cc1 = gt_sainseq_getchar(sainseq,start1); cc2 = gt_sainseq_getchar(sainseq,start2); if (cc1 < cc2) { return -1; } if (cc1 > cc2) { return 1; } start1++; start2++; } return 0; } static int gt_sain_compare_suffixes(const GtSainseq *sainseq, unsigned long start1, unsigned long start2) { gt_assert(start1 <= sainseq->totallength && start2 <= sainseq->totallength && start1 != start2); while (true) { unsigned long cc1, cc2; if (start1 == sainseq->totallength) { gt_assert(start1 > start2); return 1; } if (start2 == sainseq->totallength) { gt_assert(start1 < start2); return -1; } cc1 = gt_sainseq_getchar(sainseq,start1); cc2 = gt_sainseq_getchar(sainseq,start2); if (cc1 < cc2) { return -1; } if (cc1 > cc2) { return 1; } start1++; start2++; } } static void gt_sain_setundefined(bool fwd,unsigned long *suftab, unsigned long start, unsigned long end) { unsigned long *ptr; if (fwd) { for (ptr = suftab + start; ptr <= suftab + end; ptr++) { *ptr = 0; } } else { for (ptr = suftab + end; ptr >= suftab + start; ptr--) { *ptr = 0; } } } static void gt_sain_assignSstarlength(GtSainseq *sainseq, unsigned long *lentab) { bool nextisStype = true; unsigned long position, nextSstartypepos = sainseq->totallength, nextcc = GT_UNIQUEINT(sainseq->totallength); for (position = sainseq->totallength-1; /* Nothing */; position--) { unsigned long currentcc = gt_sainseq_getchar(sainseq,position); bool currentisStype = (currentcc < nextcc || (currentcc == nextcc && nextisStype)) ? true : false; if (!currentisStype && nextisStype) { gt_assert(position < nextSstartypepos); lentab[GT_DIV2(position+1)] = nextSstartypepos - position; nextSstartypepos = position + 1; } nextisStype = currentisStype; nextcc = currentcc; if (position == 0) { break; } } } static unsigned long gt_sain_assignSstarnames(const GtSainseq *sainseq, unsigned long countSstartype, unsigned long *suftab) { unsigned long *suftabptr, *secondhalf = suftab + countSstartype, previouspos, previouslen, currentname = 1UL; previouspos = suftab[0]; previouslen = secondhalf[GT_DIV2(previouspos)]; secondhalf[GT_DIV2(previouspos)] = currentname; for (suftabptr = suftab + 1UL; suftabptr < suftab + countSstartype; suftabptr++) { int cmp; unsigned long currentlen = 0, position = *suftabptr; currentlen = secondhalf[GT_DIV2(position)]; if (previouslen == currentlen) { cmp = gt_sain_compare_Sstarstrings(sainseq,previouspos,position, currentlen); gt_assert(cmp != 1); } else { cmp = -1; } if (cmp == -1) { currentname++; } /* write the names in order of positions. As the positions of the Sstar suffixes differ by at least 2, the used address is unique */ previouslen = currentlen; secondhalf[GT_DIV2(position)] = currentname; previouspos = position; } return currentname; } static void gt_sain_movenames2front(unsigned long *suftab, unsigned long numberofsuffixes, unsigned long totallength) { unsigned long *rptr, *wptr; const unsigned long *maxrptr = suftab + numberofsuffixes + GT_DIV2(totallength); for (rptr = wptr = suftab + numberofsuffixes; rptr <= maxrptr; rptr++) { if (*rptr > 0) { *(wptr++) = *rptr - 1UL; /* As we have used names with offset 1 to distinguish them from the undefined values signified by 0 */ } } gt_assert(wptr == suftab + GT_MULT2(numberofsuffixes)); } static void gt_sain_checkorder(const GtSainseq *sainseq, const unsigned long *suftab, unsigned long start, unsigned long end) { unsigned long idx; for (idx = start+1; idx <= end; idx++) { int cmp = gt_sain_compare_suffixes(sainseq,suftab[idx-1],suftab[idx]); if (cmp != -1) { fprintf(stderr,"%s: check interval [%lu,%lu] at idx=%lu: suffix " "%lu >= %lu\n",__func__,start,end,idx,suftab[idx-1], suftab[idx]); exit(GT_EXIT_PROGRAMMING_ERROR); } } } static void gt_sain_expandorder2original(GtSainseq *sainseq, unsigned long numberofsuffixes, unsigned long *suftab) { switch (sainseq->seqtype) { case GT_SAIN_PLAINSEQ: gt_sain_PLAINSEQ_expandorder2original(sainseq,sainseq->seq.plainseq, numberofsuffixes,suftab); break; case GT_SAIN_ENCSEQ: gt_sain_ENCSEQ_expandorder2original(sainseq,sainseq->seq.encseq, numberofsuffixes,suftab); break; case GT_SAIN_INTSEQ: gt_sain_INTSEQ_expandorder2original(sainseq,sainseq->seq.array, numberofsuffixes,suftab); break; } } static void gt_sain_determineSstarfirstchardist(GtSainseq *sainseq) { const unsigned long *seqptr; unsigned long nextcc = GT_UNIQUEINT(sainseq->totallength); bool nextisStype = true; gt_assert(sainseq->seqtype == GT_SAIN_INTSEQ); for (seqptr = sainseq->seq.array + sainseq->totallength - 1; seqptr >= sainseq->seq.array; seqptr--) { unsigned long currentcc = *seqptr; bool currentisStype = (currentcc < nextcc || (currentcc == nextcc && nextisStype)) ? true : false; if (!currentisStype && nextisStype) { sainseq->sstarfirstcharcount[nextcc]++; } sainseq->bucketsize[currentcc]++; nextisStype = currentisStype; nextcc = currentcc; } } static void gt_sain_insertsortedSstarsuffixes(const GtSainseq *sainseq, unsigned long *suftab, unsigned long readidx, unsigned long nonspecialentries) { unsigned long cc, fillidx = nonspecialentries; for (cc = sainseq->numofchars - 1; /* Nothing */; cc--) { if (sainseq->sstarfirstcharcount[cc] > 0) { unsigned long putidx = fillidx - 1; gt_assert(readidx <= putidx); if (readidx < putidx) { unsigned long offset; for (offset = 0; offset < sainseq->sstarfirstcharcount[cc]; offset++) { suftab[putidx - offset] = suftab[readidx - offset]; suftab[readidx - offset] = 0; #ifdef SAINSHOWSTATE printf("insertsorted: suftab[%lu]=%lu\n",putidx-offset, suftab[putidx-offset]); printf("insertsorted: suftab[%lu]=undef\n",readidx-offset); #endif } } } gt_assert(fillidx >= sainseq->bucketsize[cc]); fillidx -= sainseq->bucketsize[cc]; gt_assert(sainseq->bucketsize[cc] >= sainseq->sstarfirstcharcount[cc]); if (sainseq->bucketsize[cc] > sainseq->sstarfirstcharcount[cc]) { gt_sain_setundefined(false,suftab,fillidx, fillidx + sainseq->bucketsize[cc] - sainseq->sstarfirstcharcount[cc] - 1); } readidx -= sainseq->sstarfirstcharcount[cc]; if (cc == 0) { break; } } } static void gt_sain_filltailsuffixes(unsigned long *suftabtail, const GtEncseq *encseq, GtReadmode readmode) { unsigned long specialcharacters = gt_encseq_specialcharacters(encseq), totallength = gt_encseq_total_length(encseq); if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; unsigned long countspecial = 0; sri = gt_specialrangeiterator_new(encseq, GT_ISDIRREVERSE(readmode) ? false : true); while (gt_specialrangeiterator_next(sri,&range)) { unsigned long idx; if (GT_ISDIRREVERSE(readmode)) { gt_range_reverse(totallength,&range); } for (idx = range.start; idx < range.end; idx++) { gt_assert(countspecial < specialcharacters && idx < totallength); suftabtail[countspecial++] = idx; } } gt_assert(countspecial == specialcharacters); gt_specialrangeiterator_delete(sri); } suftabtail[specialcharacters] = totallength; } static void gt_sain_rec_sortsuffixes(unsigned int level, GtSainseq *sainseq, unsigned long *suftab, unsigned long firstusable, unsigned long nonspecialentries, unsigned long suftabentries, bool intermediatecheck, bool finalcheck, GtLogger *logger, GtTimer *timer) { unsigned long countSstartype; GT_SAIN_SHOWTIMER("insert Sstar suffixes"); countSstartype = gt_sain_insertSstarsuffixes(sainseq,suftab,logger); gt_logger_log(logger,"level %u: sort sequence of length %lu over " "%lu symbols (%.2f)", level,sainseq->totallength,sainseq->numofchars, (double) sainseq->numofchars/sainseq->totallength); gt_logger_log(logger,"Sstar-type: %lu (%.2f)",countSstartype, (double) countSstartype/sainseq->totallength); if (countSstartype > 0) { unsigned long numberofnames; if (sainseq->roundtable != NULL) { gt_sain_incrementfirstSstar(sainseq,suftab); } gt_sain_startbuckets(sainseq); GT_SAIN_SHOWTIMER(sainseq->roundtable == NULL ? "induce L suffixes" : "fast induce L suffixes"); gt_sain_induceLtypesuffixes1(sainseq,(long *) suftab,nonspecialentries); if (sainseq->roundtable != NULL) { gt_sain_adjustsuftab(sainseq->totallength,(long *) suftab, nonspecialentries); } gt_sain_endbuckets(sainseq); GT_SAIN_SHOWTIMER(sainseq->roundtable == NULL ? "induce S suffixes" : "fast induce S suffixes"); gt_sain_induceStypesuffixes1(sainseq,(long *) suftab,nonspecialentries); if (sainseq->roundtable == NULL) { GT_SAIN_SHOWTIMER("simple moverSstar2front"); gt_sain_moveSstar2front(countSstartype,(long *) suftab,nonspecialentries); GT_SAIN_SHOWTIMER("simple assignSstarlength"); gt_sain_assignSstarlength(sainseq,suftab + countSstartype); GT_SAIN_SHOWTIMER("simple assignSstarnames"); numberofnames = gt_sain_assignSstarnames(sainseq,countSstartype,suftab); } else { GT_SAIN_SHOWTIMER("fast moveSstar2front"); numberofnames = gt_sain_fast_moveSstar2front(sainseq->totallength, countSstartype, (long *) suftab, nonspecialentries); if (!sainseq->roundtablepoints2suftab) { gt_free(sainseq->roundtable); sainseq->roundtable = NULL; } GT_SAIN_SHOWTIMER("fast assignSstarnames"); gt_sain_fast_assignSstarnames(sainseq->totallength,countSstartype, suftab,numberofnames,nonspecialentries); } gt_assert(numberofnames <= countSstartype); if (numberofnames < countSstartype) { /* Now the name sequence is in the range from countSstartype .. 2 * countSstartype - 1 */ unsigned long *subseq = suftab + countSstartype; GtSainseq *sainseq_rec; GT_SAIN_SHOWTIMER("movenames2front"); gt_sain_setundefined(true,suftab,0,countSstartype-1); gt_sain_movenames2front(suftab,countSstartype,sainseq->totallength); if (level == 0) { firstusable = GT_MULT2(countSstartype); } sainseq_rec = gt_sainseq_new_from_array(subseq,countSstartype, numberofnames, suftab, firstusable, suftabentries); gt_sain_rec_sortsuffixes(level+1, sainseq_rec, suftab, firstusable, countSstartype, suftabentries, intermediatecheck, finalcheck, logger, timer); gt_sainseq_delete(sainseq_rec); GT_SAIN_SHOWTIMER("expandorder2original"); gt_sain_expandorder2original(sainseq,countSstartype, suftab); } else { if (sainseq->seqtype == GT_SAIN_INTSEQ) { unsigned long charidx; gt_assert(sainseq->sstarfirstcharcount == NULL); sainseq->sstarfirstcharcount = sainseq->bucketfillptr; for (charidx = 0; charidx < sainseq->numofchars; charidx++) { sainseq->sstarfirstcharcount[charidx] = 0; sainseq->bucketsize[charidx] = 0; } gt_sain_determineSstarfirstchardist(sainseq); } } } if (intermediatecheck && countSstartype > 0) { gt_sain_checkorder(sainseq,suftab,0,countSstartype-1); } GT_SAIN_SHOWTIMER("insert sorted Sstar suffixes"); if (countSstartype > 0) { gt_sain_insertsortedSstarsuffixes (sainseq, suftab, countSstartype - 1, nonspecialentries); } gt_sain_startbuckets(sainseq); GT_SAIN_SHOWTIMER("final induce L suffixes"); gt_sain_induceLtypesuffixes2(sainseq,(long *) suftab,nonspecialentries); gt_sain_endbuckets(sainseq); GT_SAIN_SHOWTIMER("final induce S suffixes"); gt_sain_induceStypesuffixes2(sainseq,(long *) suftab,nonspecialentries); if (nonspecialentries > 0) { if (intermediatecheck) { gt_sain_checkorder(sainseq,suftab,0,nonspecialentries-1); } if (sainseq->seqtype == GT_SAIN_ENCSEQ && finalcheck) { GT_SAIN_SHOWTIMER("fill tail suffixes"); gt_sain_filltailsuffixes(suftab + nonspecialentries, sainseq->seq.encseq, sainseq->readmode); GT_SAIN_SHOWTIMER("check suffix order"); gt_suftab_lightweightcheck(sainseq->seq.encseq, sainseq->readmode, sainseq->totallength, suftab, NULL); } } } void gt_sain_encseq_sortsuffixes(const GtEncseq *encseq, GtReadmode readmode, bool intermediatecheck, bool finalcheck, GtLogger *logger, GtTimer *timer) { unsigned long nonspecialentries, suftabentries, totallength, *suftab; GtSainseq *sainseq; totallength = gt_encseq_total_length(encseq); nonspecialentries = totallength - gt_encseq_specialcharacters(encseq); suftabentries = totallength+1; suftab = gt_calloc((size_t) suftabentries,sizeof (*suftab)); sainseq = gt_sainseq_new_from_encseq(encseq,readmode); gt_sain_rec_sortsuffixes(0, sainseq, suftab, 0, nonspecialentries, suftabentries, intermediatecheck, finalcheck, logger, timer); #ifdef GT_SAIN_WITHCOUNTS printf("countcharaccess=%lu (%.2f)\n",gt_sain_countcharaccess, (double) gt_sain_countcharaccess/sainseq->totallength); #endif gt_sainseq_delete(sainseq); gt_free(suftab); } void gt_sain_plain_sortsuffixes(const GtUchar *plainseq, unsigned long len, bool intermediatecheck, GtLogger *logger, GtTimer *timer) { unsigned long suftabentries, *suftab; GtSainseq *sainseq; suftabentries = len+1; suftab = gt_calloc((size_t) suftabentries,sizeof (*suftab)); sainseq = gt_sainseq_new_from_plainseq(plainseq,len); gt_sain_rec_sortsuffixes(0, sainseq, suftab, 0, sainseq->totallength, suftabentries, intermediatecheck, false, logger, timer); #ifdef GT_SAIN_WITHCOUNTS printf("countcharaccess=%lu (%.2f)\n",gt_sain_countcharaccess, (double) gt_sain_countcharaccess/sainseq->totallength); #endif gt_sainseq_delete(sainseq); gt_free(suftab); } genometools-1.5.1/src/match/sfx-sain.h000066400000000000000000000030361211610345200176320ustar00rootroot00000000000000/* Copyright (c) 2012 Stefan Kurtz Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_SAIN_H #define SFX_SAIN_H #include "core/timer_api.h" #include "core/logger_api.h" #include "core/encseq.h" void gt_sain_encseq_sortsuffixes(const GtEncseq *encseq, GtReadmode readmode, bool intermediatecheck, bool finalcheck, GtLogger *logger, GtTimer *timer); void gt_sain_plain_sortsuffixes(const GtUchar *plainseq, unsigned long len, bool intermediatecheck, GtLogger *logger, GtTimer *timer); #endif genometools-1.5.1/src/match/sfx-sain.inc000066400000000000000000001253621211610345200201630ustar00rootroot00000000000000static unsigned long gt_sain_PLAINSEQ_insertSstarsuffixes(GtSainseq *sainseq, const GtUchar *plainseq, unsigned long *suftab, GtLogger *logger) { unsigned long position, nextcc = GT_UNIQUEINT(sainseq->totallength), countSstartype = 0, *fillptr = sainseq->bucketfillptr; GtSainbuffer *sainbuffer = gt_sainbuffer_new(suftab,fillptr, sainseq->numofchars,logger); bool nextisStype = true; gt_sain_endbuckets(sainseq); for (position = sainseq->totallength-1; /* Nothing */; position--) { unsigned long currentcc = (unsigned long) plainseq[position]; bool currentisStype = (currentcc < nextcc || (currentcc == nextcc && nextisStype)) ? true : false; if (!currentisStype && nextisStype) { countSstartype++; if (sainseq->sstarfirstcharcount != NULL) { sainseq->sstarfirstcharcount[nextcc]++; } if (sainbuffer != NULL) { gt_sainbuffer_update(sainbuffer,nextcc,position); } else { suftab[--fillptr[nextcc]] = position; } #undef SAINSHOWSTATE #ifdef SAINSHOWSTATE printf("Sstar.suftab[%lu]=%lu\n",fillptr[nextcc],position+1); #endif } nextisStype = currentisStype; nextcc = currentcc; if (position == 0) { break; } } gt_sainbuffer_flushall(sainbuffer); gt_sainbuffer_delete(sainbuffer); gt_assert(GT_MULT2(countSstartype) <= sainseq->totallength); return countSstartype; } static void gt_sain_PLAINSEQ_fast_induceLtypesuffixes1(GtSainseq *sainseq, const GtUchar *plainseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; gt_assert(sainseq->roundtable != NULL); for (suftabptr = suftab, sainseq->currentround = 0; suftabptr < suftab + nonspecialentries; suftabptr++) { if ((position = *suftabptr) > 0) { unsigned long currentcc; if (position >= (long) sainseq->totallength) { sainseq->currentround++; position -= (long) sainseq->totallength; } currentcc = (unsigned long) plainseq[(unsigned long) position]; if (currentcc < sainseq->numofchars) { if (position > 0) { unsigned long t, leftcontextcc; gt_assert(position > 0); position--; leftcontextcc = (unsigned long) plainseq[(unsigned long) position]; t = (currentcc << 1) | (leftcontextcc < currentcc ? 1UL : 0); gt_assert(currentcc > 0 && sainseq->roundtable[t] <= sainseq->currentround); if (sainseq->roundtable[t] < sainseq->currentround) { position += (long) sainseq->totallength; sainseq->roundtable[t] = sainseq->currentround; } GT_SAINUPDATEBUCKETPTR(currentcc); /* negative => position does not derive L-suffix positive => position may derive L-suffix */ gt_assert(suftabptr < bucketptr); *bucketptr++ = (t & 1UL) ? ~position : position; *suftabptr = 0; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("L-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-1-suftab),*(bucketptr-1)); #endif } } else { *suftabptr = 0; } } else { if (position < 0) { *suftabptr = ~position; } } } } static void gt_sain_PLAINSEQ_induceLtypesuffixes1(GtSainseq *sainseq, const GtUchar *plainseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; gt_assert(sainseq->roundtable == NULL); for (suftabptr = suftab; suftabptr < suftab + nonspecialentries; suftabptr++) { if ((position = *suftabptr) > 0) { unsigned long currentcc = (unsigned long) plainseq[(unsigned long) position]; if (currentcc < sainseq->numofchars) { if (position > 0) { unsigned long leftcontextcc; gt_assert(position > 0); position--; leftcontextcc = (unsigned long) plainseq[(unsigned long) position]; GT_SAINUPDATEBUCKETPTR(currentcc); /* negative => position does not derive L-suffix positive => position may derive L-suffix */ gt_assert(suftabptr < bucketptr); *bucketptr++ = (leftcontextcc < currentcc) ? ~position : position; *suftabptr = 0; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("L-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-1-suftab),*(bucketptr-1)); #endif } } else { *suftabptr = 0; } } else { if (position < 0) { *suftabptr = ~position; } } } } static void gt_sain_PLAINSEQ_fast_induceStypesuffixes1(GtSainseq *sainseq, const GtUchar *plainseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; gt_assert(sainseq->roundtable != NULL); gt_sain_special_singleSinduction1(sainseq, suftab, (long) (sainseq->totallength-1)); if (sainseq->seqtype == GT_SAIN_ENCSEQ) { gt_sain_induceStypes1fromspecialranges(sainseq, sainseq->seq.encseq, suftab); } for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { if ((position = *suftabptr) > 0) { if (position >= (long) sainseq->totallength) { sainseq->currentround++; position -= (long) sainseq->totallength; } if (position > 0) { unsigned long currentcc = (unsigned long) plainseq[(unsigned long) position]; if (currentcc < sainseq->numofchars) { unsigned long t, leftcontextcc; position--; leftcontextcc = (unsigned long) plainseq[(unsigned long) position]; t = (currentcc << 1) | (leftcontextcc > currentcc ? 1UL : 0); gt_assert(sainseq->roundtable[t] <= sainseq->currentround); if (sainseq->roundtable[t] < sainseq->currentround) { position += sainseq->totallength; sainseq->roundtable[t] = sainseq->currentround; } GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && bucketptr - 1 < suftabptr); *(--bucketptr) = (t & 1UL) ? ~(position+1) : position; #ifdef SAINSHOWSTATE printf("S-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr - suftab),*bucketptr); #endif } } *suftabptr = 0; } } } static void gt_sain_PLAINSEQ_induceStypesuffixes1(GtSainseq *sainseq, const GtUchar *plainseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; gt_assert(sainseq->roundtable == NULL); gt_sain_special_singleSinduction1(sainseq, suftab, (long) (sainseq->totallength-1)); if (sainseq->seqtype == GT_SAIN_ENCSEQ) { gt_sain_induceStypes1fromspecialranges(sainseq, sainseq->seq.encseq, suftab); } for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { if ((position = *suftabptr) > 0) { unsigned long currentcc = (unsigned long) plainseq[(unsigned long) position]; if (currentcc < sainseq->numofchars) { unsigned long leftcontextcc; position--; leftcontextcc = (unsigned long) plainseq[(unsigned long) position]; GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && bucketptr - 1 < suftabptr); *(--bucketptr) = (leftcontextcc > currentcc) ? ~(position+1) : position; #ifdef SAINSHOWSTATE printf("S-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr - suftab),*bucketptr); #endif } *suftabptr = 0; } } } static void gt_sain_PLAINSEQ_induceLtypesuffixes2(const GtSainseq *sainseq, const GtUchar *plainseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; for (suftabptr = suftab; suftabptr < suftab + nonspecialentries; suftabptr++) { position = *suftabptr; *suftabptr = ~position; if (position > 0) { unsigned long currentcc; position--; currentcc = (unsigned long) plainseq[(unsigned long) position]; if (currentcc < sainseq->numofchars) { gt_assert(currentcc > 0); GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && suftabptr < bucketptr); *bucketptr++ = (position > 0 && ((unsigned long) plainseq[(unsigned long) (position-1)]) < currentcc) ? ~position : position; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("L-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-1-suftab),*(bucketptr-1)); #endif } } } } static void gt_sain_PLAINSEQ_induceStypesuffixes2(const GtSainseq *sainseq, const GtUchar *plainseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; gt_sain_special_singleSinduction2(sainseq, suftab, (long) sainseq->totallength, nonspecialentries); if (sainseq->seqtype == GT_SAIN_ENCSEQ) { gt_sain_induceStypes2fromspecialranges(sainseq, sainseq->seq.encseq, suftab, nonspecialentries); } if (nonspecialentries == 0) { return; } for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { if ((position = *suftabptr) > 0) { unsigned long currentcc; position--; currentcc = (unsigned long) plainseq[(unsigned long) position]; if (currentcc < sainseq->numofchars) { GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && bucketptr - 1 < suftabptr); *(--bucketptr) = (position == 0 || ((unsigned long) plainseq[(unsigned long) (position-1)]) > currentcc) ? ~position : position; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("S-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-suftab),*bucketptr); #endif } } else { *suftabptr = ~position; } } } static void gt_sain_PLAINSEQ_expandorder2original(GtSainseq *sainseq, const GtUchar *plainseq, unsigned long numberofsuffixes, unsigned long *suftab) { unsigned long *suftabptr, position, writeidx = numberofsuffixes - 1, nextcc = GT_UNIQUEINT(sainseq->totallength), *sstarsuffixes = suftab + numberofsuffixes; unsigned long *sstarfirstcharcount = NULL, *bucketsize = NULL; bool nextisStype = true; if (sainseq->seqtype == GT_SAIN_INTSEQ) { unsigned long charidx; gt_assert(sainseq->sstarfirstcharcount == NULL); sstarfirstcharcount = sainseq->sstarfirstcharcount = sainseq->bucketfillptr; bucketsize = sainseq->bucketsize; for (charidx = 0; charidx < sainseq->numofchars; charidx++) { sstarfirstcharcount[charidx] = 0; bucketsize[charidx] = 0; } } for (position = sainseq->totallength-1; /* Nothing */; position--) { unsigned long currentcc = (unsigned long) plainseq[position]; bool currentisStype = (currentcc < nextcc || (currentcc == nextcc && nextisStype)) ? true : false; if (!currentisStype && nextisStype) { if (sstarfirstcharcount != NULL) { sstarfirstcharcount[nextcc]++; } sstarsuffixes[writeidx--] = position+1; } if (bucketsize != NULL) { bucketsize[currentcc]++; } nextisStype = currentisStype; nextcc = currentcc; if (position == 0) { break; } } for (suftabptr = suftab; suftabptr < suftab + numberofsuffixes; suftabptr++) { *suftabptr = sstarsuffixes[*suftabptr]; } } static unsigned long gt_sain_ENCSEQ_insertSstarsuffixes(GtSainseq *sainseq, const GtEncseq *encseq, unsigned long *suftab, GtLogger *logger) { unsigned long position, nextcc = GT_UNIQUEINT(sainseq->totallength), countSstartype = 0, *fillptr = sainseq->bucketfillptr; GtSainbuffer *sainbuffer = gt_sainbuffer_new(suftab,fillptr, sainseq->numofchars,logger); GtUchar tmpcc; bool nextisStype = true; gt_sain_endbuckets(sainseq); for (position = sainseq->totallength-1; /* Nothing */; position--) { unsigned long currentcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, position, sainseq->readmode)) ? GT_UNIQUEINT(position) : (unsigned long) tmpcc; bool currentisStype = (currentcc < nextcc || (currentcc == nextcc && nextisStype)) ? true : false; if (!currentisStype && nextisStype) { countSstartype++; if (sainseq->sstarfirstcharcount != NULL) { sainseq->sstarfirstcharcount[nextcc]++; } if (sainbuffer != NULL) { gt_sainbuffer_update(sainbuffer,nextcc,position); } else { suftab[--fillptr[nextcc]] = position; } #undef SAINSHOWSTATE #ifdef SAINSHOWSTATE printf("Sstar.suftab[%lu]=%lu\n",fillptr[nextcc],position+1); #endif } nextisStype = currentisStype; nextcc = currentcc; if (position == 0) { break; } } gt_sainbuffer_flushall(sainbuffer); gt_sainbuffer_delete(sainbuffer); gt_assert(GT_MULT2(countSstartype) <= sainseq->totallength); return countSstartype; } static void gt_sain_ENCSEQ_fast_induceLtypesuffixes1(GtSainseq *sainseq, const GtEncseq *encseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; GtUchar tmpcc; long position; gt_assert(sainseq->roundtable != NULL); for (suftabptr = suftab, sainseq->currentround = 0; suftabptr < suftab + nonspecialentries; suftabptr++) { if ((position = *suftabptr) > 0) { unsigned long currentcc; if (position >= (long) sainseq->totallength) { sainseq->currentround++; position -= (long) sainseq->totallength; } currentcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) position, sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) position) : (unsigned long) tmpcc; if (currentcc < sainseq->numofchars) { if (position > 0) { unsigned long t, leftcontextcc; gt_assert(position > 0); position--; leftcontextcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) position, sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) position) : (unsigned long) tmpcc; t = (currentcc << 1) | (leftcontextcc < currentcc ? 1UL : 0); gt_assert(currentcc > 0 && sainseq->roundtable[t] <= sainseq->currentround); if (sainseq->roundtable[t] < sainseq->currentround) { position += (long) sainseq->totallength; sainseq->roundtable[t] = sainseq->currentround; } GT_SAINUPDATEBUCKETPTR(currentcc); /* negative => position does not derive L-suffix positive => position may derive L-suffix */ gt_assert(suftabptr < bucketptr); *bucketptr++ = (t & 1UL) ? ~position : position; *suftabptr = 0; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("L-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-1-suftab),*(bucketptr-1)); #endif } } else { *suftabptr = 0; } } else { if (position < 0) { *suftabptr = ~position; } } } } static void gt_sain_ENCSEQ_induceLtypesuffixes1(GtSainseq *sainseq, const GtEncseq *encseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; GtUchar tmpcc; long position; gt_assert(sainseq->roundtable == NULL); for (suftabptr = suftab; suftabptr < suftab + nonspecialentries; suftabptr++) { if ((position = *suftabptr) > 0) { unsigned long currentcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) position, sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) position) : (unsigned long) tmpcc; if (currentcc < sainseq->numofchars) { if (position > 0) { unsigned long leftcontextcc; gt_assert(position > 0); position--; leftcontextcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) position, sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) position) : (unsigned long) tmpcc; GT_SAINUPDATEBUCKETPTR(currentcc); /* negative => position does not derive L-suffix positive => position may derive L-suffix */ gt_assert(suftabptr < bucketptr); *bucketptr++ = (leftcontextcc < currentcc) ? ~position : position; *suftabptr = 0; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("L-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-1-suftab),*(bucketptr-1)); #endif } } else { *suftabptr = 0; } } else { if (position < 0) { *suftabptr = ~position; } } } } static void gt_sain_ENCSEQ_fast_induceStypesuffixes1(GtSainseq *sainseq, const GtEncseq *encseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; GtUchar tmpcc; long position; gt_assert(sainseq->roundtable != NULL); gt_sain_special_singleSinduction1(sainseq, suftab, (long) (sainseq->totallength-1)); if (sainseq->seqtype == GT_SAIN_ENCSEQ) { gt_sain_induceStypes1fromspecialranges(sainseq, sainseq->seq.encseq, suftab); } for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { if ((position = *suftabptr) > 0) { if (position >= (long) sainseq->totallength) { sainseq->currentround++; position -= (long) sainseq->totallength; } if (position > 0) { unsigned long currentcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) position, sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) position) : (unsigned long) tmpcc; if (currentcc < sainseq->numofchars) { unsigned long t, leftcontextcc; position--; leftcontextcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) position, sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) position) : (unsigned long) tmpcc; t = (currentcc << 1) | (leftcontextcc > currentcc ? 1UL : 0); gt_assert(sainseq->roundtable[t] <= sainseq->currentround); if (sainseq->roundtable[t] < sainseq->currentround) { position += sainseq->totallength; sainseq->roundtable[t] = sainseq->currentround; } GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && bucketptr - 1 < suftabptr); *(--bucketptr) = (t & 1UL) ? ~(position+1) : position; #ifdef SAINSHOWSTATE printf("S-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr - suftab),*bucketptr); #endif } } *suftabptr = 0; } } } static void gt_sain_ENCSEQ_induceStypesuffixes1(GtSainseq *sainseq, const GtEncseq *encseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; GtUchar tmpcc; long position; gt_assert(sainseq->roundtable == NULL); gt_sain_special_singleSinduction1(sainseq, suftab, (long) (sainseq->totallength-1)); if (sainseq->seqtype == GT_SAIN_ENCSEQ) { gt_sain_induceStypes1fromspecialranges(sainseq, sainseq->seq.encseq, suftab); } for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { if ((position = *suftabptr) > 0) { unsigned long currentcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) position, sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) position) : (unsigned long) tmpcc; if (currentcc < sainseq->numofchars) { unsigned long leftcontextcc; position--; leftcontextcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) position, sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) position) : (unsigned long) tmpcc; GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && bucketptr - 1 < suftabptr); *(--bucketptr) = (leftcontextcc > currentcc) ? ~(position+1) : position; #ifdef SAINSHOWSTATE printf("S-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr - suftab),*bucketptr); #endif } *suftabptr = 0; } } } static void gt_sain_ENCSEQ_induceLtypesuffixes2(const GtSainseq *sainseq, const GtEncseq *encseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; GtUchar tmpcc; long position; for (suftabptr = suftab; suftabptr < suftab + nonspecialentries; suftabptr++) { position = *suftabptr; *suftabptr = ~position; if (position > 0) { unsigned long currentcc; position--; currentcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) position, sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) position) : (unsigned long) tmpcc; if (currentcc < sainseq->numofchars) { gt_assert(currentcc > 0); GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && suftabptr < bucketptr); *bucketptr++ = (position > 0 && (ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) (position-1), sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) (position-1)) : (unsigned long) tmpcc) < currentcc) ? ~position : position; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("L-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-1-suftab),*(bucketptr-1)); #endif } } } } static void gt_sain_ENCSEQ_induceStypesuffixes2(const GtSainseq *sainseq, const GtEncseq *encseq, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; GtUchar tmpcc; long position; gt_sain_special_singleSinduction2(sainseq, suftab, (long) sainseq->totallength, nonspecialentries); if (sainseq->seqtype == GT_SAIN_ENCSEQ) { gt_sain_induceStypes2fromspecialranges(sainseq, sainseq->seq.encseq, suftab, nonspecialentries); } if (nonspecialentries == 0) { return; } for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { if ((position = *suftabptr) > 0) { unsigned long currentcc; position--; currentcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) position, sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) position) : (unsigned long) tmpcc; if (currentcc < sainseq->numofchars) { GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && bucketptr - 1 < suftabptr); *(--bucketptr) = (position == 0 || (ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, (unsigned long) (position-1), sainseq->readmode)) ? GT_UNIQUEINT((unsigned long) (position-1)) : (unsigned long) tmpcc) > currentcc) ? ~position : position; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("S-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-suftab),*bucketptr); #endif } } else { *suftabptr = ~position; } } } static void gt_sain_ENCSEQ_expandorder2original(GtSainseq *sainseq, const GtEncseq *encseq, unsigned long numberofsuffixes, unsigned long *suftab) { unsigned long *suftabptr, position, writeidx = numberofsuffixes - 1, nextcc = GT_UNIQUEINT(sainseq->totallength), *sstarsuffixes = suftab + numberofsuffixes; unsigned long *sstarfirstcharcount = NULL, *bucketsize = NULL; GtUchar tmpcc; bool nextisStype = true; if (sainseq->seqtype == GT_SAIN_INTSEQ) { unsigned long charidx; gt_assert(sainseq->sstarfirstcharcount == NULL); sstarfirstcharcount = sainseq->sstarfirstcharcount = sainseq->bucketfillptr; bucketsize = sainseq->bucketsize; for (charidx = 0; charidx < sainseq->numofchars; charidx++) { sstarfirstcharcount[charidx] = 0; bucketsize[charidx] = 0; } } for (position = sainseq->totallength-1; /* Nothing */; position--) { unsigned long currentcc = ISSPECIAL(tmpcc = gt_encseq_get_encoded_char( encseq, position, sainseq->readmode)) ? GT_UNIQUEINT(position) : (unsigned long) tmpcc; bool currentisStype = (currentcc < nextcc || (currentcc == nextcc && nextisStype)) ? true : false; if (!currentisStype && nextisStype) { if (sstarfirstcharcount != NULL) { sstarfirstcharcount[nextcc]++; } sstarsuffixes[writeidx--] = position+1; } if (bucketsize != NULL) { bucketsize[currentcc]++; } nextisStype = currentisStype; nextcc = currentcc; if (position == 0) { break; } } for (suftabptr = suftab; suftabptr < suftab + numberofsuffixes; suftabptr++) { *suftabptr = sstarsuffixes[*suftabptr]; } } static unsigned long gt_sain_INTSEQ_insertSstarsuffixes(GtSainseq *sainseq, const unsigned long *array, unsigned long *suftab, GtLogger *logger) { unsigned long position, nextcc = GT_UNIQUEINT(sainseq->totallength), countSstartype = 0, *fillptr = sainseq->bucketfillptr; GtSainbuffer *sainbuffer = gt_sainbuffer_new(suftab,fillptr, sainseq->numofchars,logger); bool nextisStype = true; gt_sain_endbuckets(sainseq); for (position = sainseq->totallength-1; /* Nothing */; position--) { unsigned long currentcc = array[position]; bool currentisStype = (currentcc < nextcc || (currentcc == nextcc && nextisStype)) ? true : false; if (!currentisStype && nextisStype) { countSstartype++; if (sainseq->sstarfirstcharcount != NULL) { sainseq->sstarfirstcharcount[nextcc]++; } if (sainbuffer != NULL) { gt_sainbuffer_update(sainbuffer,nextcc,position); } else { suftab[--fillptr[nextcc]] = position; } #undef SAINSHOWSTATE #ifdef SAINSHOWSTATE printf("Sstar.suftab[%lu]=%lu\n",fillptr[nextcc],position+1); #endif } nextisStype = currentisStype; nextcc = currentcc; if (position == 0) { break; } } gt_sainbuffer_flushall(sainbuffer); gt_sainbuffer_delete(sainbuffer); gt_assert(GT_MULT2(countSstartype) <= sainseq->totallength); return countSstartype; } static void gt_sain_INTSEQ_fast_induceLtypesuffixes1(GtSainseq *sainseq, const unsigned long *array, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; gt_assert(sainseq->roundtable != NULL); for (suftabptr = suftab, sainseq->currentround = 0; suftabptr < suftab + nonspecialentries; suftabptr++) { if ((position = *suftabptr) > 0) { unsigned long currentcc; if (position >= (long) sainseq->totallength) { sainseq->currentround++; position -= (long) sainseq->totallength; } currentcc = array[(unsigned long) position]; if (currentcc < sainseq->numofchars) { if (position > 0) { unsigned long t, leftcontextcc; gt_assert(position > 0); position--; leftcontextcc = array[(unsigned long) position]; t = (currentcc << 1) | (leftcontextcc < currentcc ? 1UL : 0); gt_assert(currentcc > 0 && sainseq->roundtable[t] <= sainseq->currentround); if (sainseq->roundtable[t] < sainseq->currentround) { position += (long) sainseq->totallength; sainseq->roundtable[t] = sainseq->currentround; } GT_SAINUPDATEBUCKETPTR(currentcc); /* negative => position does not derive L-suffix positive => position may derive L-suffix */ gt_assert(suftabptr < bucketptr); *bucketptr++ = (t & 1UL) ? ~position : position; *suftabptr = 0; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("L-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-1-suftab),*(bucketptr-1)); #endif } } else { *suftabptr = 0; } } else { if (position < 0) { *suftabptr = ~position; } } } } static void gt_sain_INTSEQ_induceLtypesuffixes1(GtSainseq *sainseq, const unsigned long *array, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; gt_assert(sainseq->roundtable == NULL); for (suftabptr = suftab; suftabptr < suftab + nonspecialentries; suftabptr++) { if ((position = *suftabptr) > 0) { unsigned long currentcc = array[(unsigned long) position]; if (currentcc < sainseq->numofchars) { if (position > 0) { unsigned long leftcontextcc; gt_assert(position > 0); position--; leftcontextcc = array[(unsigned long) position]; GT_SAINUPDATEBUCKETPTR(currentcc); /* negative => position does not derive L-suffix positive => position may derive L-suffix */ gt_assert(suftabptr < bucketptr); *bucketptr++ = (leftcontextcc < currentcc) ? ~position : position; *suftabptr = 0; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("L-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-1-suftab),*(bucketptr-1)); #endif } } else { *suftabptr = 0; } } else { if (position < 0) { *suftabptr = ~position; } } } } static void gt_sain_INTSEQ_fast_induceStypesuffixes1(GtSainseq *sainseq, const unsigned long *array, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; gt_assert(sainseq->roundtable != NULL); gt_sain_special_singleSinduction1(sainseq, suftab, (long) (sainseq->totallength-1)); if (sainseq->seqtype == GT_SAIN_ENCSEQ) { gt_sain_induceStypes1fromspecialranges(sainseq, sainseq->seq.encseq, suftab); } for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { if ((position = *suftabptr) > 0) { if (position >= (long) sainseq->totallength) { sainseq->currentround++; position -= (long) sainseq->totallength; } if (position > 0) { unsigned long currentcc = array[(unsigned long) position]; if (currentcc < sainseq->numofchars) { unsigned long t, leftcontextcc; position--; leftcontextcc = array[(unsigned long) position]; t = (currentcc << 1) | (leftcontextcc > currentcc ? 1UL : 0); gt_assert(sainseq->roundtable[t] <= sainseq->currentround); if (sainseq->roundtable[t] < sainseq->currentround) { position += sainseq->totallength; sainseq->roundtable[t] = sainseq->currentround; } GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && bucketptr - 1 < suftabptr); *(--bucketptr) = (t & 1UL) ? ~(position+1) : position; #ifdef SAINSHOWSTATE printf("S-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr - suftab),*bucketptr); #endif } } *suftabptr = 0; } } } static void gt_sain_INTSEQ_induceStypesuffixes1(GtSainseq *sainseq, const unsigned long *array, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; gt_assert(sainseq->roundtable == NULL); gt_sain_special_singleSinduction1(sainseq, suftab, (long) (sainseq->totallength-1)); if (sainseq->seqtype == GT_SAIN_ENCSEQ) { gt_sain_induceStypes1fromspecialranges(sainseq, sainseq->seq.encseq, suftab); } for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { if ((position = *suftabptr) > 0) { unsigned long currentcc = array[(unsigned long) position]; if (currentcc < sainseq->numofchars) { unsigned long leftcontextcc; position--; leftcontextcc = array[(unsigned long) position]; GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && bucketptr - 1 < suftabptr); *(--bucketptr) = (leftcontextcc > currentcc) ? ~(position+1) : position; #ifdef SAINSHOWSTATE printf("S-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr - suftab),*bucketptr); #endif } *suftabptr = 0; } } } static void gt_sain_INTSEQ_induceLtypesuffixes2(const GtSainseq *sainseq, const unsigned long *array, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; for (suftabptr = suftab; suftabptr < suftab + nonspecialentries; suftabptr++) { position = *suftabptr; *suftabptr = ~position; if (position > 0) { unsigned long currentcc; position--; currentcc = array[(unsigned long) position]; if (currentcc < sainseq->numofchars) { gt_assert(currentcc > 0); GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && suftabptr < bucketptr); *bucketptr++ = (position > 0 && (array[(unsigned long) (position-1)]) < currentcc) ? ~position : position; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("L-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-1-suftab),*(bucketptr-1)); #endif } } } } static void gt_sain_INTSEQ_induceStypesuffixes2(const GtSainseq *sainseq, const unsigned long *array, long *suftab, unsigned long nonspecialentries) { unsigned long lastupdatecc = 0, *fillptr = sainseq->bucketfillptr; long *suftabptr, *bucketptr = NULL; long position; gt_sain_special_singleSinduction2(sainseq, suftab, (long) sainseq->totallength, nonspecialentries); if (sainseq->seqtype == GT_SAIN_ENCSEQ) { gt_sain_induceStypes2fromspecialranges(sainseq, sainseq->seq.encseq, suftab, nonspecialentries); } if (nonspecialentries == 0) { return; } for (suftabptr = suftab + nonspecialentries - 1; suftabptr >= suftab; suftabptr--) { if ((position = *suftabptr) > 0) { unsigned long currentcc; position--; currentcc = array[(unsigned long) position]; if (currentcc < sainseq->numofchars) { GT_SAINUPDATEBUCKETPTR(currentcc); gt_assert(bucketptr != NULL && bucketptr - 1 < suftabptr); *(--bucketptr) = (position == 0 || (array[(unsigned long) (position-1)]) > currentcc) ? ~position : position; #ifdef SAINSHOWSTATE gt_assert(bucketptr != NULL); printf("S-induce: suftab[%lu]=%ld\n", (unsigned long) (bucketptr-suftab),*bucketptr); #endif } } else { *suftabptr = ~position; } } } static void gt_sain_INTSEQ_expandorder2original(GtSainseq *sainseq, const unsigned long *array, unsigned long numberofsuffixes, unsigned long *suftab) { unsigned long *suftabptr, position, writeidx = numberofsuffixes - 1, nextcc = GT_UNIQUEINT(sainseq->totallength), *sstarsuffixes = suftab + numberofsuffixes; unsigned long *sstarfirstcharcount = NULL, *bucketsize = NULL; bool nextisStype = true; if (sainseq->seqtype == GT_SAIN_INTSEQ) { unsigned long charidx; gt_assert(sainseq->sstarfirstcharcount == NULL); sstarfirstcharcount = sainseq->sstarfirstcharcount = sainseq->bucketfillptr; bucketsize = sainseq->bucketsize; for (charidx = 0; charidx < sainseq->numofchars; charidx++) { sstarfirstcharcount[charidx] = 0; bucketsize[charidx] = 0; } } for (position = sainseq->totallength-1; /* Nothing */; position--) { unsigned long currentcc = array[position]; bool currentisStype = (currentcc < nextcc || (currentcc == nextcc && nextisStype)) ? true : false; if (!currentisStype && nextisStype) { if (sstarfirstcharcount != NULL) { sstarfirstcharcount[nextcc]++; } sstarsuffixes[writeidx--] = position+1; } if (bucketsize != NULL) { bucketsize[currentcc]++; } nextisStype = currentisStype; nextcc = currentcc; if (position == 0) { break; } } for (suftabptr = suftab; suftabptr < suftab + numberofsuffixes; suftabptr++) { *suftabptr = sstarsuffixes[*suftabptr]; } } genometools-1.5.1/src/match/sfx-shortreadsort.c000066400000000000000000000623651211610345200216100ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/intbits.h" #include "core/stack-inlined.h" #include "core/minmax.h" #include "core/assert_api.h" #include "sfx-lcpvalues.h" #include "sfx-shortreadsort.h" #include "spmsuftab.h" #include "seqnumrelpos.h" typedef struct { unsigned long suffixrepresentation; uint32_t tbeidx; unsigned int unitsnotspecial; } GtShortreadsort; struct GtShortreadsortworkinfo { GtShortreadsort *shortreadsorttable; GtLcpvalues *sssplcpvalues; /* always NULL in the context of firstcodes; otherwise: NULL iff lcpvalues are not required. */ uint16_t *mediumsizelcpvalues; /* always NULL for firstcodes; otherwise: NULL if lcpvalues are not required */ unsigned long *seqnum_relpos_bucket; /* only for firstcodes */ GtArrayGtTwobitencoding tbereservoir; unsigned long tmplcplen, currentbucketsize, sumofstoredvalues; bool fwd, complement, withmediumsizelcps; }; static double gt_shortreadsort_encoding_factor(unsigned long maxremain) { double factor = 1.0; if (maxremain > (2UL * (unsigned long) GT_UNITSIN2BITENC)) { factor += maxremain/(2UL * (unsigned long) GT_UNITSIN2BITENC); } else { factor = 1.0; } return factor; } static unsigned long gt_shortreadsort_encoding_size(unsigned long bucketsize, unsigned long maxremain) { return (unsigned long) (bucketsize * gt_shortreadsort_encoding_factor(maxremain)); } static size_t gt_shortreadsort_size_perbucketentry(bool firstcodes, unsigned long maxremain) { return (firstcodes ? sizeof (uint16_t) : 0) + sizeof (GtShortreadsort) + sizeof (unsigned long) + sizeof (GtTwobitencoding) * gt_shortreadsort_encoding_factor(maxremain); } size_t gt_shortreadsort_size(bool firstcodes,unsigned long bucketsize, unsigned long maxremain) { return (size_t) bucketsize * gt_shortreadsort_size_perbucketentry(firstcodes,maxremain); } unsigned long gt_shortreadsort_maxwidth(bool firstcodes, unsigned long maxremain, size_t sizeofworkspace) { return (unsigned long) sizeofworkspace/ gt_shortreadsort_size_perbucketentry(firstcodes,maxremain); } static void gt_shortreadsort_resize(GtShortreadsortworkinfo *srsw, bool firstcodes, unsigned long bucketsize, unsigned long maxremain) { gt_assert(!firstcodes || !srsw->withmediumsizelcps); gt_assert(bucketsize <= (unsigned long) UINT32_MAX); if (srsw->currentbucketsize < bucketsize) { srsw->shortreadsorttable = gt_realloc(srsw->shortreadsorttable, sizeof (*srsw->shortreadsorttable) * bucketsize); } if (firstcodes && srsw->currentbucketsize < bucketsize) { srsw->seqnum_relpos_bucket = gt_realloc(srsw->seqnum_relpos_bucket, sizeof (*srsw->seqnum_relpos_bucket) * bucketsize); } if ((firstcodes || srsw->withmediumsizelcps) && srsw->currentbucketsize < bucketsize) { srsw->mediumsizelcpvalues = gt_realloc(srsw->mediumsizelcpvalues, sizeof (*srsw->mediumsizelcpvalues) * bucketsize); srsw->mediumsizelcpvalues[0] = 0; /* since it is not set otherwise */ } srsw->tbereservoir.nextfreeGtTwobitencoding = 0; if (srsw->currentbucketsize < bucketsize) { srsw->tbereservoir.allocatedGtTwobitencoding = gt_shortreadsort_encoding_size(bucketsize,maxremain); srsw->tbereservoir.spaceGtTwobitencoding = gt_realloc(srsw->tbereservoir.spaceGtTwobitencoding, sizeof (GtTwobitencoding) * srsw->tbereservoir.allocatedGtTwobitencoding); srsw->currentbucketsize = bucketsize; } } GtShortreadsortworkinfo *gt_shortreadsort_new(unsigned long maxwidth, unsigned long maxremain, GtReadmode readmode, bool firstcodes, bool withmediumsizelcps) { GtShortreadsortworkinfo *srsw; srsw = gt_malloc(sizeof (*srsw)); srsw->fwd = GT_ISDIRREVERSE(readmode) ? false : true; srsw->complement = GT_ISDIRCOMPLEMENT(readmode) ? true : false; srsw->sssplcpvalues = NULL; srsw->sumofstoredvalues = 0; srsw->currentbucketsize = 0; srsw->shortreadsorttable = NULL; srsw->mediumsizelcpvalues = NULL; srsw->withmediumsizelcps = withmediumsizelcps; srsw->seqnum_relpos_bucket = NULL; GT_INITARRAY(&srsw->tbereservoir,GtTwobitencoding); if (maxwidth > 0) { gt_shortreadsort_resize(srsw,firstcodes,maxwidth,maxremain); } return srsw; } unsigned long gt_shortreadsort_sumofstoredvalues(const GtShortreadsortworkinfo *srsw) { return srsw->sumofstoredvalues; } void gt_shortreadsort_delete(GtShortreadsortworkinfo *srsw) { if (srsw != NULL) { gt_free(srsw->shortreadsorttable); srsw->shortreadsorttable = NULL; gt_free(srsw->mediumsizelcpvalues); srsw->mediumsizelcpvalues = NULL; gt_free(srsw->seqnum_relpos_bucket); srsw->seqnum_relpos_bucket = NULL; GT_FREEARRAY(&srsw->tbereservoir,GtTwobitencoding); gt_free(srsw); } } void gt_shortreadsort_assigntableoflcpvalues(GtShortreadsortworkinfo *srsw, GtLcpvalues *tableoflcpvalues) { if (srsw != NULL) { srsw->sssplcpvalues = tableoflcpvalues; } } static int gt_shortreadsort_compare(const GtShortreadsort *aq, const GtShortreadsort *bq, GtShortreadsortworkinfo *srsw) { unsigned int maxprefix; GtTwobitencoding *aptr, *bptr; aptr = srsw->tbereservoir.spaceGtTwobitencoding + aq->tbeidx; bptr = srsw->tbereservoir.spaceGtTwobitencoding + bq->tbeidx; for (maxprefix = (unsigned int) GT_UNITSIN2BITENC; /* Nothing */; maxprefix += (unsigned int) GT_UNITSIN2BITENC, aptr++, bptr++) { int retval; GtCommonunits commonunits; if (aq->unitsnotspecial >= maxprefix && bq->unitsnotspecial >= maxprefix) { GtTwobitencoding aval = *aptr, bval = *bptr; if (aval != bval) { retval = gt_encseq_compare_pairof_different_twobitencodings( srsw->fwd, srsw->complement, &commonunits, aval,bval); srsw->tmplcplen = (unsigned long) (maxprefix - GT_UNITSIN2BITENC + commonunits.common); return retval; } } else { GtEndofTwobitencoding tbe_a, tbe_b; tbe_a.referstartpos = aq->suffixrepresentation; tbe_b.referstartpos = bq->suffixrepresentation; tbe_a.unitsnotspecial = aq->unitsnotspecial >= maxprefix ? maxprefix : aq->unitsnotspecial + GT_UNITSIN2BITENC - maxprefix; tbe_a.tbe = tbe_a.unitsnotspecial > 0 ? *aptr : 0; tbe_b.unitsnotspecial = bq->unitsnotspecial >= maxprefix ? maxprefix : bq->unitsnotspecial + GT_UNITSIN2BITENC - maxprefix; tbe_b.tbe = tbe_b.unitsnotspecial > 0 ? *bptr : 0; retval = gt_encseq_compare_pairof_twobitencodings(srsw->fwd, srsw->complement, &commonunits, &tbe_a, &tbe_b); srsw->tmplcplen = (unsigned long) (maxprefix - GT_UNITSIN2BITENC + commonunits.common); return retval; } } /*@ignore@*/ return 0; /*@end@*/ } #ifdef QSORTNAME #undef QSORTNAME #endif #define QSORTNAME(NAME) shortread_##NAME #define shortread_ARRAY_GET(ARR,IDX) data->shortreadsorttable[IDX] #define shortread_ARRAY_SET(ARR,IDX,VALUE) data->shortreadsorttable[IDX] = VALUE typedef GtShortreadsortworkinfo * QSORTNAME(Datatype); static int QSORTNAME(qsortcmparr) (unsigned long a, unsigned long b, const QSORTNAME(Datatype) data) { return gt_shortreadsort_compare(&QSORTNAME(ARRAY_GET)(NULL,a), &QSORTNAME(ARRAY_GET)(NULL,b), data); } typedef unsigned long QSORTNAME(Sorttype); /* * Qsort routine from Bentley & McIlroy's ``Engineering a Sort Function''. */ #ifndef GT_QSORT_ARR_SWAP #define GT_QSORT_ARR_SWAP(ARR,A,B)\ if ((A) != (B))\ {\ tmp = QSORTNAME(ARRAY_GET)(ARR,A);\ QSORTNAME(ARRAY_SET)(ARR,A,QSORTNAME(ARRAY_GET)(ARR,B));\ QSORTNAME(ARRAY_SET)(ARR,B,tmp);\ } #endif #ifndef GT_QSORT_ARR_VECSWAP #define GT_QSORT_ARR_VECSWAP(ARR,A,B,N)\ aidx = A;\ bidx = B;\ while ((N)-- > 0)\ {\ tmp = QSORTNAME(ARRAY_GET)(ARR,aidx);\ QSORTNAME(ARRAY_SET)(ARR,aidx,QSORTNAME(ARRAY_GET)(ARR,bidx));\ QSORTNAME(ARRAY_SET)(ARR,bidx,tmp);\ aidx++;\ bidx++;\ } #endif static inline unsigned long QSORTNAME(gt_inlined_qsort_arr_r_med3) (unsigned long a, unsigned long b, unsigned long c, QSORTNAME(Datatype) data) { return QSORTNAME(qsortcmparr) (a, b, data) < 0 ? (QSORTNAME(qsortcmparr) (b, c, data) < 0 ? b : (QSORTNAME(qsortcmparr) (a, c, data) < 0 ? c : a)) : (QSORTNAME(qsortcmparr) (b, c, data) > 0 ? b : (QSORTNAME(qsortcmparr) (a, c, data) < 0 ? a : c)); } #ifndef GT_STACK_INTERVALARRAYTOBESORTED_DEFINED typedef struct { unsigned long startindex, len; } Intervalarrtobesorted; GT_STACK_DECLARESTRUCT(Intervalarrtobesorted,32UL); #define GT_STACK_INTERVALARRAYTOBESORTED_DEFINED #endif static void QSORTNAME(gt_inlinedarr_qsort_r) ( unsigned long insertionsortthreshold, bool handlenotswapped, unsigned long len, QSORTNAME(Datatype) data, unsigned long depth, unsigned long subbucketleft) { unsigned long pa, pb, pc, pd, pl, pm, pn, aidx, bidx, s, smallermaxlcp, greatermaxlcp; GtShortreadsort tmp; int r; bool swapped; GtStackIntervalarrtobesorted intervalstack; Intervalarrtobesorted current; GT_STACK_INIT(&intervalstack,32UL); current.startindex = 0; current.len = len; GT_STACK_PUSH(&intervalstack,current); if (insertionsortthreshold <= 2UL) { insertionsortthreshold = 6UL; } while (!GT_STACK_ISEMPTY(&intervalstack)) { swapped = false; current = GT_STACK_POP(&intervalstack); if (current.len <= insertionsortthreshold) { for (pm = current.startindex + 1; pm < current.startindex + current.len; pm++) { for (pl = pm; pl > current.startindex; pl--) { r = QSORTNAME(qsortcmparr) (pl - 1, pl, data); if (data->mediumsizelcpvalues != NULL) { if (pl < pm && r > 0) { data->mediumsizelcpvalues[pl+1] = data->mediumsizelcpvalues[pl]; } gt_assert(depth + data->tmplcplen <= UINT16_MAX); data->mediumsizelcpvalues[pl] = (uint16_t) (depth + data->tmplcplen); } else { if (data->sssplcpvalues != NULL) { if (pl < pm && r > 0) { gt_lcptab_update(data->sssplcpvalues,subbucketleft,pl+1, gt_lcptab_getvalue(data->sssplcpvalues, subbucketleft,pl)); } gt_lcptab_update(data->sssplcpvalues,subbucketleft,pl, depth + data->tmplcplen); } } if (r <= 0) { break; } GT_QSORT_ARR_SWAP (arr, pl, pl - 1); } } continue; } pm = current.startindex + GT_DIV2 (current.len); if (current.len > 7UL) { pl = current.startindex; pn = current.startindex + current.len - 1; if (current.len > 40UL) { s = GT_DIV8 (current.len); pl = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pl, pl + s, pl + GT_MULT2 (s), data); gt_assert(pm >= s); pm = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pm - s, pm, pm + s, data); gt_assert(pn >= GT_MULT2(s)); pn = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pn - GT_MULT2 (s), pn - s, pn, data); } pm = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pl, pm, pn, data); } GT_QSORT_ARR_SWAP (arr, current.startindex, pm); pa = pb = current.startindex + 1; pc = pd = current.startindex + current.len - 1; smallermaxlcp = greatermaxlcp = 0; while (1) { while (pb <= pc) { r = QSORTNAME(qsortcmparr) (pb, current.startindex, data); if (r > 0) { GT_UPDATE_MAX(greatermaxlcp,data->tmplcplen); break; } if (r == 0) { swapped = true; GT_QSORT_ARR_SWAP (arr, pa, pb); pa++; } else { GT_UPDATE_MAX(smallermaxlcp,data->tmplcplen); } pb++; } while (pb <= pc) { r = QSORTNAME(qsortcmparr) (pc, current.startindex, data); if (r < 0) { GT_UPDATE_MAX(smallermaxlcp,data->tmplcplen); break; } if (r == 0) { swapped = true; GT_QSORT_ARR_SWAP (arr, pc, pd); gt_assert(pd > 0); pd--; } else { GT_UPDATE_MAX(greatermaxlcp,data->tmplcplen); } gt_assert(pc > 0); pc--; } if (pb > pc) { break; } GT_QSORT_ARR_SWAP (arr, pb, pc); swapped = true; pb++; gt_assert(pc > 0); pc--; } /* The following switch is not explained in the above mentioned paper and therefore we ignore it. */ if (handlenotswapped && !swapped) { /* Switch to insertion sort */ gt_assert(current.len <= 40UL); for (pm = current.startindex + 1; pm < current.startindex + current.len; pm++) { for (pl = pm; pl > current.startindex; pl--) { r = QSORTNAME(qsortcmparr) (pl - 1, pl, data); if (r <= 0) { break; } GT_QSORT_ARR_SWAP (arr, pl, pl - 1); } } continue; } pn = current.startindex + current.len; gt_assert(pa >= current.startindex && pb >= pa); s = MIN ((unsigned long) (pa - current.startindex), (unsigned long) (pb - pa)); gt_assert(pb >= s); GT_QSORT_ARR_VECSWAP (arr, current.startindex, pb - s, s); gt_assert(pd >= pc && pn > pd); s = MIN ((unsigned long) (pd - pc), (unsigned long) (pn - pd - 1)); gt_assert(pn > s); GT_QSORT_ARR_VECSWAP (arr, pb, pn - s, s); gt_assert(pb >= pa); if ((s = (unsigned long) (pb - pa)) > 0) { if (data->mediumsizelcpvalues != NULL) { gt_assert(depth + smallermaxlcp <= UINT16_MAX); data->mediumsizelcpvalues[current.startindex + s] = (uint16_t) (depth + smallermaxlcp); } else { if (data->sssplcpvalues != NULL) { /* left part has suffix with lcp up to length smallermaxlcp w.r.t. to the pivot. This lcp belongs to a suffix on the left which is at a minimum distance to the pivot and thus to an element in the final part of the left side. */ gt_lcptab_update(data->sssplcpvalues, subbucketleft,current.startindex + s, depth + smallermaxlcp); } } if (s > 1UL) { current.len = s; GT_STACK_PUSH(&intervalstack,current); } } gt_assert(pd >= pc); if ((s = (unsigned long) (pd - pc)) > 0) { if (data->mediumsizelcpvalues != NULL) { gt_assert (depth + greatermaxlcp <= UINT16_MAX); data->mediumsizelcpvalues[pn - s] = (uint16_t) (depth + greatermaxlcp); } else { if (data->sssplcpvalues != NULL) { /* right part has suffix with lcp up to length largermaxlcp w.r.t. to the pivot. This lcp belongs to a suffix on the right which is at a minimum distance to the pivot and thus to an element in the first part of the right side. */ gt_assert(pn >= s); gt_lcptab_update(data->sssplcpvalues,subbucketleft,pn - s, depth + greatermaxlcp); } } if (s > 1UL) { gt_assert(pn >= s); current.startindex = pn - s; current.len = s; GT_STACK_PUSH(&intervalstack,current); } } } GT_STACK_DELETE(&intervalstack); } void gt_shortreadsort_sssp_sort(GtShortreadsortworkinfo *srsw, const GtEncseq *encseq, unsigned long maxremain, GtReadmode readmode, GtEncseqReader *esr, GtSuffixsortspace *sssp, unsigned long subbucketleft, unsigned long width, unsigned long depth, unsigned long maxdepth) { unsigned long idx, pos; GtSuffixsortspace_exportptr *exportptr; gt_shortreadsort_resize(srsw, false, width, maxremain); exportptr = gt_suffixsortspace_exportptr(subbucketleft, sssp); srsw->tbereservoir.nextfreeGtTwobitencoding = 0; if (exportptr->ulongtabsectionptr != NULL) { for (idx = 0; idx < width; idx++) { pos = exportptr->ulongtabsectionptr[idx]; srsw->shortreadsorttable[idx].suffixrepresentation = pos; srsw->shortreadsorttable[idx].tbeidx = (uint32_t) srsw->tbereservoir.nextfreeGtTwobitencoding; srsw->shortreadsorttable[idx].unitsnotspecial = gt_encseq_extract2bitencvector(&srsw->tbereservoir, encseq, esr, readmode, pos+depth, maxdepth > 0 ? true : false, pos + maxdepth); } } else { for (idx = 0; idx < width; idx++) { pos = (unsigned long) exportptr->uinttabsectionptr[idx]; srsw->shortreadsorttable[idx].suffixrepresentation = pos; srsw->shortreadsorttable[idx].tbeidx = (uint32_t) srsw->tbereservoir.nextfreeGtTwobitencoding; srsw->shortreadsorttable[idx].unitsnotspecial = gt_encseq_extract2bitencvector(&srsw->tbereservoir, encseq, esr, readmode, pos+depth, maxdepth > 0 ? true : false, pos + maxdepth); } } QSORTNAME(gt_inlinedarr_qsort_r) (6UL, false, width, srsw, depth, subbucketleft); if (exportptr->ulongtabsectionptr != NULL) { for (idx = 0; idx < width; idx++) { exportptr->ulongtabsectionptr[idx] = srsw->shortreadsorttable[idx].suffixrepresentation; if (exportptr->ulongtabsectionptr[idx] == 0) { gt_suffixsortspace_updatelongest(sssp,subbucketleft + idx); } } } else { for (idx = 0; idx < width; idx++) { exportptr->uinttabsectionptr[idx] = (uint32_t) srsw->shortreadsorttable[idx].suffixrepresentation; if (exportptr->uinttabsectionptr[idx] == 0) { gt_suffixsortspace_updatelongest(sssp,subbucketleft + idx); } } } gt_suffixsortspace_export_done(sssp); } void gt_shortreadsort_sssp_add_unsorted(const GtShortreadsortworkinfo *srsw, unsigned long bucketleftidx, unsigned long subbucketleft, unsigned long width, unsigned long maxdepth, GtProcessunsortedsuffixrange processunsortedsuffixrange, void *processunsortedsuffixrangeinfo) { unsigned long idx, lcpvalue, laststart = 0; gt_assert(srsw->mediumsizelcpvalues != NULL || srsw->sssplcpvalues != NULL); for (idx = 1UL; idx < width; idx++) { lcpvalue = srsw->mediumsizelcpvalues != NULL ? (unsigned long) srsw->mediumsizelcpvalues[idx] : gt_lcptab_getvalue(srsw->sssplcpvalues,subbucketleft,idx); if (lcpvalue < maxdepth) { if (laststart < idx-1) { if (processunsortedsuffixrange != NULL) { processunsortedsuffixrange(processunsortedsuffixrangeinfo, bucketleftidx + subbucketleft + laststart, idx - laststart,maxdepth); } } laststart = idx; } } if (laststart < width-1) { if (processunsortedsuffixrange != NULL) { processunsortedsuffixrange(processunsortedsuffixrangeinfo, bucketleftidx + subbucketleft + laststart, width - laststart,maxdepth); } } } void gt_shortreadsort_firstcodes_sort(GtShortreadsortresult *srsresult, GtShortreadsortworkinfo *srsw, const GtSeqnumrelpos *snrp, const GtEncseq *encseq, const GtSpmsuftab *spmsuftab, unsigned long subbucketleft, unsigned long width, unsigned long depth, unsigned long maxdepth) { unsigned long idx, pos, seqnum, relpos, seqnum_relpos; gt_assert(maxdepth == 0 || maxdepth > depth); srsw->tbereservoir.nextfreeGtTwobitencoding = 0; for (idx = 0; idx < width; idx++) { if (gt_spmsuftab_usebitsforpositions(spmsuftab)) { pos = gt_spmsuftab_get(spmsuftab,subbucketleft + idx); seqnum = gt_encseq_seqnum(encseq,pos); relpos = pos - gt_encseq_seqstartpos(encseq,seqnum); srsw->shortreadsorttable[idx].suffixrepresentation = gt_seqnumrelpos_encode(snrp, seqnum, relpos); } else { seqnum_relpos = gt_spmsuftab_get(spmsuftab,subbucketleft + idx); seqnum = gt_seqnumrelpos_decode_seqnum(snrp,seqnum_relpos); relpos = gt_seqnumrelpos_decode_relpos(snrp,seqnum_relpos); srsw->shortreadsorttable[idx].suffixrepresentation = seqnum_relpos; } srsw->shortreadsorttable[idx].tbeidx = (uint32_t) srsw->tbereservoir.nextfreeGtTwobitencoding; srsw->shortreadsorttable[idx].unitsnotspecial = gt_encseq_relpos_extract2bitencvector(&srsw->tbereservoir, encseq, seqnum, relpos + depth, (maxdepth > 0) ? maxdepth - depth : 0); } srsw->sumofstoredvalues += srsw->tbereservoir.nextfreeGtTwobitencoding; QSORTNAME(gt_inlinedarr_qsort_r) (6UL, false, width, srsw, depth, subbucketleft); for (idx = 0; idx < width; idx++) { srsw->seqnum_relpos_bucket[idx] = srsw->shortreadsorttable[idx].suffixrepresentation; } srsresult->suftab_bucket = srsw->seqnum_relpos_bucket; srsresult->lcptab_bucket = srsw->mediumsizelcpvalues; } genometools-1.5.1/src/match/sfx-shortreadsort.h000066400000000000000000000075641211610345200216150ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_SHORTREADSORT_H #define SFX_SHORTREADSORT_H #include "core/readmode_api.h" #include "core/encseq_api.h" #include "core/unused_api.h" #include "sfx-lcpvalues.h" #include "sfx-suffixgetset.h" #include "spmsuftab.h" #include "seqnumrelpos.h" typedef struct GtShortreadsortworkinfo GtShortreadsortworkinfo; typedef struct { unsigned long *suftab_bucket; uint16_t *lcptab_bucket; } GtShortreadsortresult; size_t gt_shortreadsort_size(bool firstcodes,unsigned long bucketsize, unsigned long maxremain); GtShortreadsortworkinfo *gt_shortreadsort_new(unsigned long maxwidth, unsigned long maxremain, GtReadmode readmode, bool firstcodes, bool withmediumsizelcps); unsigned long gt_shortreadsort_sumofstoredvalues( const GtShortreadsortworkinfo *srsw); void gt_shortreadsort_delete(GtShortreadsortworkinfo *srsw); void gt_shortreadsort_assigntableoflcpvalues( GtShortreadsortworkinfo *srsw,GtLcpvalues *tableoflcpvalues); void gt_shortreadsort_sssp_sort(GtShortreadsortworkinfo *srsw, const GtEncseq *encseq, unsigned long maxremain, GtReadmode readmode, GtEncseqReader *esr, GtSuffixsortspace *sssp, unsigned long subbucketleft, unsigned long width, unsigned long depth, unsigned long maxdepth); void gt_shortreadsort_firstcodes_sort(GtShortreadsortresult *srsresult, GtShortreadsortworkinfo *srsw, const GtSeqnumrelpos *snrp, const GtEncseq *encseq, const GtSpmsuftab *spmsuftab, unsigned long subbucketleft, unsigned long width, unsigned long depth, unsigned long maxdepth); void gt_shortreadsort_sssp_add_unsorted(const GtShortreadsortworkinfo *srsw, unsigned long bucketleftidx, unsigned long subbucketleft, unsigned long width, unsigned long maxdepth, GtProcessunsortedsuffixrange processunsortedsuffixrange, void *processunsortedsuffixrangeinfo); unsigned long gt_shortreadsort_maxwidth(bool firstcodes, unsigned long maxremain, size_t sizeofworkspace); #endif genometools-1.5.1/src/match/sfx-strategy.h000066400000000000000000000052441211610345200205450ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_STRATEGY_H #define SFX_STRATEGY_H #include #include #define MAXINSERTIONSORTDEFAULT 3UL #define MAXBLTRIESORTDEFAULT 1000UL #define MAXCOUNTINGSORTDEFAULT 4000UL typedef struct { unsigned long maxwidthrealmedian, maxinsertionsort, maxbltriesort, maxcountingsort; unsigned int differencecover, userdefinedsortmaxdepth, spmopt_minlength; bool cmpcharbychar, /* compare suffixes character by character instead of comparing entire words (only for two bit encoding) */ storespecialcodes, iteratorbasedkmerscanning, suftabuint, onlybucketinsertion, kmerswithencseqreader, dccheck, samplewithprefixlengthnull, noshortreadsort, outsuftabonfile, withradixsort; } Sfxstrategy; /*@unused@*/ static inline void defaultsfxstrategy(Sfxstrategy *sfxstrategy, bool cmpcharbychar) { sfxstrategy->maxwidthrealmedian = 1UL; sfxstrategy->maxinsertionsort = MAXINSERTIONSORTDEFAULT; sfxstrategy->maxbltriesort = MAXBLTRIESORTDEFAULT; sfxstrategy->maxcountingsort = MAXCOUNTINGSORTDEFAULT; sfxstrategy->differencecover = 0; sfxstrategy->cmpcharbychar = cmpcharbychar; sfxstrategy->spmopt_minlength = 0; sfxstrategy->storespecialcodes = false; sfxstrategy->iteratorbasedkmerscanning = false; sfxstrategy->suftabuint = false; sfxstrategy->onlybucketinsertion = false; sfxstrategy->kmerswithencseqreader = false; sfxstrategy->dccheck = false; sfxstrategy->samplewithprefixlengthnull = false; sfxstrategy->outsuftabonfile = true; sfxstrategy->noshortreadsort = false; sfxstrategy->withradixsort = false; sfxstrategy->userdefinedsortmaxdepth = 0; } #endif genometools-1.5.1/src/match/sfx-suffixer.c000066400000000000000000002303021211610345200205240ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Stefan Kurtz Copyright (c) 2007-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #ifndef S_SPLINT_S #include #include #include #endif #include "core/arraydef.h" #include "core/assert_api.h" #include "core/chardef.h" #include "core/error_api.h" #include "core/unused_api.h" #include "core/progressbar.h" #include "core/minmax.h" #include "core/fa.h" #include "core/timer_api.h" #include "core/encseq.h" #include "core/safecast-gen.h" #include "core/log_api.h" #include "core/mathsupport.h" #include "core/spacecalc.h" #include "core/divmodmul.h" #include "core/format64.h" #include "core/fileutils.h" #include "intcode-def.h" #include "firstcodes-buf.h" #include "esa-fileend.h" #include "kmercodes.h" #include "sfx-diffcov.h" #include "sfx-partssuf.h" #include "sfx-suffixer.h" #include "sfx-enumcodes.h" #include "sfx-strategy.h" #include "sfx-copysort.h" #include "sfx-mappedstr.h" #include "sfx-bentsedg.h" #include "sfx-suffixgetset.h" #include "sfx-maprange.h" #include "stamp.h" typedef struct { unsigned long allocatedSuffixptr, nextfreeSuffixptr; GtSuffixsortspace *sssp; } GtSuffixposbuffer; struct Sfxiterator { /* globally constant */ const GtEncseq *encseq; GtReadmode readmode; unsigned long specialcharacters, totallength; unsigned int numofchars, prefixlength; Sfxstrategy sfxstrategy; bool withprogressbar; /* invariant for each part */ GtSuftabparts *suftabparts; GtOutlcpinfo *outlcpinfoforsample; GtBcktab *bcktab; GtLeftborder *leftborder; /* points to bcktab->leftborder */ GtDifferencecover *dcov; /* changed in each part */ GtSuffixsortspace *suffixsortspace; GtCodetype currentmincode, currentmaxcode; unsigned long widthofpart; unsigned int part; GtOutlcpinfo *outlcpinfo; GtSuffixposbuffer fusp; GtRange overhang; bool exhausted; unsigned long long bucketiterstep; /* for progressbar */ GtLogger *logger; GtTimer *sfxprogress; GtSpecialrangeiterator *sri; /* refers to space used in each part */ /* use for generating k-mer codes */ FILE *outfpbcktab; bool storespecials; unsigned long nextfreeCodeatposition; Codeatposition *spaceCodeatposition; unsigned int kmerfastmaskright; GtSuffixsortspace_exportptr *exportptr; unsigned int spmopt_kmerscansize, spmopt_kmerscancodeshift2bckcode, spmopt_kmerscancodeshift2prefixcode, spmopt_additionalprefixchars; GtBitsequence *markprefixbuckets, *marksuffixbuckets; GtCodetype spmopt_kmerscancodesuffixmask; unsigned long spmopt_numofallprefixcodes, spmopt_numofallsuffixcodes; GtSfxmappedrange *mappedmarkprefixbuckets; }; #ifdef SKDEBUG static unsigned long iterproduceCodeatposition(Codeatposition *codelist, const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, unsigned int numofchars) { if (prefixlength > 1U) { Enumcodeatposition *ecp; unsigned long insertindex; Specialcontext specialcontext; ecp = gt_Enumcodeatposition_new(encseq, readmode, prefixlength, numofchars); for (insertindex = 0; gt_Enumcodeatposition_next(&specialcontext,ecp); insertindex++) { codelist[insertindex].maxprefixindex = specialcontext.maxprefixindex; codelist[insertindex].position = specialcontext.position; codelist[insertindex].code = gt_Enumcodeatposition_filledqgramcode(ecp, specialcontext.maxprefixindex, specialcontext.position - specialcontext.maxprefixindex); } gt_Enumcodeatposition_delete(ecp); ecp = NULL; return insertindex; } return 0; } static void compareCodeatpositionlists(const Codeatposition *codelist1, unsigned long len1, const Codeatposition *codelist2, unsigned long len2) { unsigned long idx; if (len1 != len2) { fprintf(stderr,"%s: len1 = %lu != %lu = len2\n",__func__,len1,len2); exit(GT_EXIT_PROGRAMMING_ERROR); } for (idx=0; idx= nextfreeCodeatposition2); compareCodeatpositionlists(spaceCodeatposition1, nextfreeCodeatposition1, spaceCodeatposition2, nextfreeCodeatposition2); gt_free(spaceCodeatposition2); } static GtCodetype getencseqcode(const GtEncseq *encseq, GtReadmode readmode, unsigned long totallength, const GtCodetype **multimappower, unsigned int prefixlength, unsigned long pos) { GtCodetype code = 0; unsigned int idx; GtUchar cc; for (idx=0; idxsfxstrategy.spmopt_minlength == 0); if (kmercode->definedspecialposition) { if (sfi->storespecials) { if (kmercode->specialposition > 0) { if (sfi->sfxstrategy.storespecialcodes) { Codeatposition *cp; cp = sfi->spaceCodeatposition + sfi->nextfreeCodeatposition++; gt_assert(kmercode->code <= (GtCodetype) MAXCODEVALUE); cp->code = (unsigned int) kmercode->code; gt_assert(kmercode->specialposition <= (unsigned int) MAXPREFIXLENGTH); cp->maxprefixindex = kmercode->specialposition; cp->position = position + kmercode->specialposition; /* printf("store(code=%u,maxprefixindex=%u,pos=%lu)\n", cp->code,cp->maxprefixindex,cp->position); */ } sfi->storespecials = false; gt_assert(kmercode->code > 0); gt_bcktab_leftborder_addcode(sfi->leftborder,kmercode->code); } } else { if (kmercode->specialposition > 0) { gt_assert(kmercode->code > 0); gt_bcktab_leftborder_addcode(sfi->leftborder,kmercode->code); } else { sfi->storespecials = true; } } } else { #ifdef SKDEBUG if (kmercode->code == 0) { GtCodetype code2 = getencseqcode(sfi->encseq, sfi->readmode, gt_encseq_total_length(sfi->encseq), gt_bcktab_multimappower(sfi->bcktab), sfi->prefixlength, position); if (code2 != 0) { fprintf(stderr,"%s: ### position %lu, code2 = %lu != 0\n",__func__, position,code2); fprintf(stderr,"previouscode = " FormatGtCodetype "\n",previouscode); if (previouskmercodedefined) { fprintf(stderr,"previouskmercodedefined = true\n"); fprintf(stderr,"previousstorespecials = %s\n", previousstorespecials ? "true" : "false"); fprintf(stderr,"previousspecialpos = %u\n",previousspecialpos); } exit(GT_EXIT_PROGRAMMING_ERROR); } } #endif gt_bcktab_leftborder_addcode(sfi->leftborder,kmercode->code); } #ifdef SKDEBUG previouscode = kmercode->code; previouskmercodedefined = kmercode->defined; previousstorespecials = sfi->storespecials; previousspecialpos = kmercode->specialposition; #endif } #define GT_SCANCODE_TO_BCKCODE(SFI,CODE)\ (GtCodetype) ((CODE) >> (SFI)->spmopt_kmerscancodeshift2bckcode) #define GT_SCANCODE_TO_PREFIXCODE(SFI,CODE)\ (GtCodetype) ((CODE) >> (SFI)->spmopt_kmerscancodeshift2prefixcode) #ifdef _LP64 #define GT_SCANCODE_TO_SUFFIXCODE(SFI,CODE)\ (GtCodetype) ((CODE) & (SFI)->spmopt_kmerscancodesuffixmask) static bool gt_checksuffixprefixbuckets(const Sfxiterator *sfi, GtCodetype scancode) { GtCodetype prefixcode = GT_SCANCODE_TO_PREFIXCODE(sfi,scancode); GtCodetype suffixcode = GT_SCANCODE_TO_SUFFIXCODE(sfi,scancode); gt_assert(prefixcode < sfi->spmopt_numofallprefixcodes); gt_assert(suffixcode < sfi->spmopt_numofallsuffixcodes); return (GT_ISIBITSET(sfi->markprefixbuckets,prefixcode) && GT_ISIBITSET(sfi->marksuffixbuckets,suffixcode)) ? true : false; } #else static bool gt_checksuffixprefixbuckets(const Sfxiterator *sfi, GtCodetype scancode) { GtCodetype prefixcode = GT_SCANCODE_TO_PREFIXCODE(sfi,scancode); gt_assert(prefixcode < sfi->spmopt_numofallprefixcodes); return GT_ISIBITSET(sfi->markprefixbuckets,prefixcode) ? true : false; } #endif #define GT_INSERTKMERWITHOUTSPECIAL1(SFI,FIRSTINRANGE,POSITION,SEQNUM,RELPOS,\ SCANCODE)\ if ((SFI)->markprefixbuckets == NULL)\ {\ if ((SCANCODE) >= (SFI)->currentmincode &&\ (SCANCODE) <= (SFI)->currentmaxcode)\ {\ unsigned long stidx;\ stidx = gt_bcktab_leftborder_insertionindex((SFI)->leftborder,\ SCANCODE);\ /* from right to left */\ GT_SUFFIXSORTSPACE_EXPORT_SET((SFI)->suffixsortspace,\ (SFI)->exportptr,stidx,POSITION);\ }\ } else\ {\ GtCodetype bcktabcode = GT_SCANCODE_TO_BCKCODE((SFI),SCANCODE);\ if (bcktabcode >= (SFI)->currentmincode &&\ bcktabcode <= (SFI)->currentmaxcode &&\ (FIRSTINRANGE || gt_checksuffixprefixbuckets(SFI,SCANCODE)))\ {\ unsigned long stidx;\ stidx = gt_bcktab_leftborder_insertionindex((SFI)->leftborder,\ bcktabcode);\ /* from right to left */\ GT_SUFFIXSORTSPACE_EXPORT_SET((SFI)->suffixsortspace,\ (SFI)->exportptr,stidx,POSITION);\ }\ } static void gt_insertkmerwithoutspecial(void *processinfo, unsigned long position, const GtKmercode *kmercode) { if (!kmercode->definedspecialposition) { GT_INSERTKMERWITHOUTSPECIAL1((Sfxiterator *) processinfo, false, position, 0, 0, kmercode->code); } } static void gt_reversespecialcodes(Codeatposition *spaceCodeatposition, unsigned long nextfreeCodeatposition) { Codeatposition *front, *back, tmp; for (front = spaceCodeatposition, back = spaceCodeatposition + nextfreeCodeatposition - 1; front < back; front++, back--) { tmp = *front; *front = *back; *back = tmp; } } static void sfx_derivespecialcodesfromtable(Sfxiterator *sfi,bool deletevalues) { GtCodetype code; unsigned int prefixindex; unsigned long insertindex, j, stidx; for (prefixindex=1U; prefixindex < sfi->prefixlength; prefixindex++) { for (j=0, insertindex = 0; j < sfi->nextfreeCodeatposition; j++) { if (prefixindex <= sfi->spaceCodeatposition[j].maxprefixindex) { code = gt_bcktab_codedownscale(sfi->bcktab, (GtCodetype) sfi->spaceCodeatposition[j].code, prefixindex, sfi->spaceCodeatposition[j]. maxprefixindex); if (code >= sfi->currentmincode && code <= sfi->currentmaxcode) { gt_bcktab_updatespecials(sfi->bcktab,code,prefixindex); stidx = gt_bcktab_leftborder_insertionindex(sfi->leftborder,code); /* from right to left */ gt_suffixsortspace_set(sfi->suffixsortspace,0,stidx, sfi->spaceCodeatposition[j].position - prefixindex); } } if (deletevalues) { if (prefixindex < sfi->prefixlength - 1 && prefixindex < sfi->spaceCodeatposition[j].maxprefixindex) { if (insertindex < j) { sfi->spaceCodeatposition[insertindex] = sfi->spaceCodeatposition[j]; } insertindex++; } } } if (deletevalues) { sfi->nextfreeCodeatposition = insertindex; } } } static void sfx_derivespecialcodesonthefly(Sfxiterator *sfi) { GtCodetype code; unsigned int prefixindex; unsigned long stidx; Enumcodeatposition *ecp; Specialcontext specialcontext; for (prefixindex=1U; prefixindex < sfi->prefixlength; prefixindex++) { ecp = gt_Enumcodeatposition_new(sfi->encseq,sfi->readmode, sfi->prefixlength, sfi->numofchars); while (gt_Enumcodeatposition_next(&specialcontext,ecp)) { if (prefixindex <= specialcontext.maxprefixindex) { if (gt_Enumcodeatposition_filledqgramcodestopatmax( &code, ecp, prefixindex, specialcontext.position-prefixindex, sfi->currentmaxcode)) { gt_assert(code <= sfi->currentmaxcode); if (code >= sfi->currentmincode) { gt_bcktab_updatespecials(sfi->bcktab,code,prefixindex); gt_assert(code > 0); stidx = gt_bcktab_leftborder_insertionindex(sfi->leftborder,code); /* from right to left */ gt_suffixsortspace_set(sfi->suffixsortspace,0,stidx, specialcontext.position - prefixindex); } } } } gt_Enumcodeatposition_delete(ecp); ecp = NULL; } } int gt_Sfxiterator_delete(Sfxiterator *sfi,GtError *err) { bool haserr = false; if (sfi == NULL) { return 0; } #ifdef SKDEBUG if (sfi->bcktab != NULL) { gt_bcktab_checkcountspecialcodes(sfi->bcktab); } #endif if (sfi->sri != NULL) { gt_specialrangeiterator_delete(sfi->sri); } gt_free(sfi->spaceCodeatposition); sfi->spaceCodeatposition = NULL; gt_suffixsortspace_delete(sfi->suffixsortspace, sfi->sfxstrategy.spmopt_minlength == 0 ? true : false); if (sfi->suftabparts != NULL && gt_suftabparts_numofparts(sfi->suftabparts) > 1U && sfi->outfpbcktab != NULL) { if (gt_bcktab_remap_all(sfi->bcktab,err) != 0) { haserr = true; } else { int ret = gt_bcktab_flush_to_file(sfi->outfpbcktab,sfi->bcktab,err); gt_fa_fclose(sfi->outfpbcktab); if (ret != 0) { haserr = true; } } } gt_bcktab_delete(sfi->bcktab); gt_suftabparts_delete(sfi->suftabparts); gt_Outlcpinfo_delete(sfi->outlcpinfoforsample); if (sfi->mappedmarkprefixbuckets == NULL) { gt_free(sfi->markprefixbuckets); } gt_Sfxmappedrange_delete(sfi->mappedmarkprefixbuckets); sfi->mappedmarkprefixbuckets = NULL; gt_free(sfi->marksuffixbuckets); gt_differencecover_delete(sfi->dcov); gt_free(sfi); return haserr ? -1 : 0; } static void getencseqkmersupdatekmercount(const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, Sfxiterator *sfi) { GtKmercodeiterator *kmercodeiterator; const GtKmercode *kmercodeptr; kmercodeiterator = gt_kmercodeiterator_encseq_new(encseq,readmode,kmersize,0); if (!gt_kmercodeiterator_inputexhausted(kmercodeiterator)) { unsigned long position = 0; while ((kmercodeptr = gt_kmercodeiterator_encseq_next(kmercodeiterator)) != NULL) { updatekmercount(sfi,position++,kmercodeptr); } } gt_kmercodeiterator_delete(kmercodeiterator); } void getencseqkmersinsertkmerwithoutspecial(const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, Sfxiterator *sfi) { GtKmercodeiterator *kmercodeiterator; const GtKmercode *kmercodeptr; kmercodeiterator = gt_kmercodeiterator_encseq_new(encseq,readmode,kmersize,0); if (!gt_kmercodeiterator_inputexhausted(kmercodeiterator)) { unsigned long position = 0; while ((kmercodeptr = gt_kmercodeiterator_encseq_next(kmercodeiterator)) != NULL) { gt_insertkmerwithoutspecial(sfi,position++,kmercodeptr); } gt_kmercodeiterator_delete(kmercodeiterator); } } #undef DEBUGSIZEESTIMATION #ifdef DEBUGSIZEESTIMATION static void verifyestimatedspace(size_t estimatedspace) { unsigned long usedspace_ma_fa = gt_ma_get_space_current() + gt_fa_get_space_current(); if (usedspace_ma_fa > 0) { double relativedifference; if (usedspace_ma_fa >= (unsigned long) estimatedspace) { relativedifference = (double) (usedspace_ma_fa - estimatedspace)/usedspace_ma_fa; } else { relativedifference = (double) (estimatedspace - usedspace_ma_fa)/estimatedspace; } if (usedspace_ma_fa > 100000UL && gt_double_larger_double(relativedifference,0.1)) { fprintf(stderr, "%s: relativedifference %.4f too large: " "estimatedspace=%.4f, usedspace_ma_fa=%.4f\n", __func__,relativedifference, GT_MEGABYTES(estimatedspace), GT_MEGABYTES(usedspace_ma_fa)); exit(GT_EXIT_PROGRAMMING_ERROR); } } } #endif GtCodetype gt_kmercode_at_firstpos(const GtTwobitencoding *twobitencoding, unsigned int kmersize) { const GtCodetype maskright = GT_MASKRIGHT(kmersize); return (GtCodetype) (twobitencoding[0] >> GT_MULT2(GT_UNITSIN2BITENC - kmersize)) & maskright; } #ifdef SKDEBUG static void checkallreversebitpairs(void) { unsigned int kmersize, code, coderev, coderevrev, maxcode; for (kmersize = 2U; kmersize <= 14U; kmersize++) { maxcode = (1U << 2 * kmersize)-1; printf("kmsize=%u,maxcode=%u\n",kmersize,maxcode); for (code = 0; code <= maxcode; code++) { coderev = gt_kmercode_reverse(code,kmersize); coderevrev = gt_kmercode_reverse(coderev,kmersize); gt_assert(coderevrev != code); } } } #endif #define GT_UPDATEKMER(KMER,CC,MASKRIGHT)\ KMER <<= 2;\ KMER |= CC;\ KMER &= MASKRIGHT #define GT_ADJUSTREVERSEPOS(RB,POS) ((RB) - (POS)) static GtCodetype getencseqkmers_nospecialtwobitencoding( const GtTwobitencoding *twobitencoding, unsigned long totallength, GtCodetype maskright, GtReadmode readmode, unsigned int kmersize, unsigned int upperkmersize, void(*processkmercode)(void *, bool, unsigned long, GtCodetype), void *processkmercodeinfo, bool onlyfirst, unsigned long startpos, unsigned long endpos) { unsigned long pos, unitindex, rightbound = totallength - kmersize; unsigned int shiftright; GtCodetype code; GtUchar cc; GtTwobitencoding currentencoding; gt_assert(kmersize > 1U); if (GT_ISDIRREVERSE(readmode)) { unsigned long startpos2; gt_assert(endpos >= (unsigned long) upperkmersize); pos = endpos - (unsigned long) kmersize; unitindex = (pos > 0) ? GT_DIVBYUNITSIN2BITENC(pos-1) : 0; code = gt_kmercode_reverse(gt_kmercode_at_position(twobitencoding,pos, kmersize), kmersize); if (processkmercode != NULL) { processkmercode(processkmercodeinfo, true, GT_ADJUSTREVERSEPOS(rightbound,pos), GT_ISDIRCOMPLEMENT(readmode) ? gt_kmercode_complement(code,maskright) : code); } if (onlyfirst) { return code; } currentencoding = twobitencoding[unitindex]; startpos2 = startpos + (upperkmersize - kmersize); shiftright = (unsigned int) GT_MULT2(GT_UNITSIN2BITENC - 1 - GT_MODBYUNITSIN2BITENC(pos-1)); while (pos > startpos2) { pos--; cc = (GtUchar) (currentencoding >> shiftright) & 3; GT_UPDATEKMER(code,cc,maskright); if (processkmercode != NULL) { processkmercode(processkmercodeinfo,false, GT_ADJUSTREVERSEPOS(rightbound,pos), (readmode == GT_READMODE_REVCOMPL) ? gt_kmercode_complement(code,maskright) : code); } if (shiftright < (unsigned int) (GT_INTWORDSIZE-2)) { shiftright += 2; } else { gt_assert(unitindex > 0 || pos == startpos2); if (unitindex > 0) { currentencoding = twobitencoding[--unitindex]; } shiftright = 0; } } } else { unsigned long maxunitindex = gt_unitsoftwobitencoding(totallength) - 1; pos = startpos; unitindex = GT_DIVBYUNITSIN2BITENC(startpos+kmersize); code = gt_kmercode_at_position(twobitencoding,pos,kmersize); if (processkmercode != NULL) { processkmercode(processkmercodeinfo,true,pos, GT_ISDIRCOMPLEMENT(readmode) ? gt_kmercode_complement(code,maskright) : code); } if (onlyfirst) { return code; } currentencoding = twobitencoding[unitindex]; shiftright = (unsigned int) GT_MULT2(GT_UNITSIN2BITENC - 1 - GT_MODBYUNITSIN2BITENC(startpos+kmersize)); while (pos < endpos - (unsigned long) upperkmersize) { pos++; cc = (GtUchar) (currentencoding >> shiftright) & 3; GT_UPDATEKMER(code,cc,maskright); if (processkmercode != NULL) { processkmercode(processkmercodeinfo,false,pos, (readmode == GT_READMODE_COMPL) ? gt_kmercode_complement(code,maskright) : code); } if (shiftright > 0) { shiftright -= 2; } else { gt_assert(unitindex < maxunitindex-1 || pos == endpos - (unsigned long) upperkmersize); if (unitindex < maxunitindex-1) { currentencoding = twobitencoding[++unitindex]; } shiftright = (unsigned int) (GT_INTWORDSIZE-2); } } } return code; } static void getencseqkmers_rangetwobitencoding( const GtTwobitencoding *twobitencoding, unsigned long totallength, unsigned long realtotallength, bool mirrored, GtCodetype maskright, GtReadmode readmode, unsigned int kmersize, unsigned int upperkmersize, bool onlyfirst, void(*processkmercode)(void *, bool, unsigned long, GtCodetype), void *processkmercodeinfo, void(*processkmerspecial)(void *, unsigned int, unsigned int, unsigned long), void *processkmerspecialinfo, unsigned long startpos, unsigned long endpos) { GtCodetype lastcode, newcode; if (mirrored && startpos >= realtotallength) { gt_readmode_invert(readmode); startpos = GT_REVERSEPOS(realtotallength, startpos - realtotallength - 2); if (endpos == totallength) endpos = 0; else endpos = GT_REVERSEPOS(realtotallength, endpos - realtotallength - 2); if (startpos > endpos) { unsigned long tmp = startpos; startpos = endpos; endpos = tmp; } gt_assert(startpos <= endpos); gt_assert(endpos <= realtotallength); } if (endpos - startpos >= (unsigned long) upperkmersize) { gt_assert(endpos > 0); lastcode = getencseqkmers_nospecialtwobitencoding(twobitencoding, totallength, maskright, readmode, kmersize, upperkmersize, processkmercode, processkmercodeinfo, onlyfirst, startpos, endpos); if (processkmerspecial != NULL) { if (GT_ISDIRCOMPLEMENT(readmode)) { lastcode = gt_kmercode_complement(lastcode,maskright); } newcode = ((lastcode << 2) | 3UL) & maskright; processkmerspecial(processkmerspecialinfo, kmersize-1, (unsigned int) newcode, GT_ISDIRREVERSE(readmode) ? (totallength - startpos) : endpos); } } else { if (processkmerspecial != NULL && startpos < endpos) { unsigned int fillpos; gt_assert((unsigned long) kmersize > endpos - startpos); fillpos = (unsigned int) (kmersize - (endpos - startpos)); lastcode = gt_kmercode_at_position(twobitencoding,startpos, (unsigned int) (endpos - startpos)); if (GT_ISDIRREVERSE(readmode) && (unsigned int) (endpos - startpos) > 1U) { lastcode = gt_kmercode_reverse(lastcode, (unsigned int) (endpos-startpos)); } if (GT_ISDIRCOMPLEMENT(readmode)) { lastcode = gt_kmercode_complement(lastcode,maskright); } newcode = ((lastcode << GT_MULT2(fillpos)) | ((1UL << GT_MULT2(fillpos)) - 1)) & maskright; processkmerspecial(processkmerspecialinfo, (unsigned int) (endpos - startpos), (unsigned int) newcode, GT_ISDIRREVERSE(readmode) ? (totallength - startpos) : endpos); } } } void getencseqkmers_twobitencoding(const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, unsigned int upperkmersize, bool onlyfirst, void(*processkmercode)(void *, bool, unsigned long, GtCodetype), void *processkmercodeinfo, void(*processkmerspecial)(void *, unsigned int, unsigned int, unsigned long), void *processkmerspecialinfo) { unsigned long laststart = 0, lastend, totallength, realtotallength; const GtTwobitencoding *twobitencoding = gt_encseq_twobitencoding_export(encseq); const GtCodetype maskright = GT_MASKRIGHT(kmersize); bool mirrored = gt_encseq_is_mirrored(encseq); lastend = totallength = realtotallength = gt_encseq_total_length(encseq); if (mirrored) { gt_assert((totallength & 1) == 1UL); realtotallength = ((realtotallength - 1) / 2); } if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; if (GT_ISDIRREVERSE(readmode)) { sri = gt_specialrangeiterator_new(encseq,false); while (gt_specialrangeiterator_next(sri,&range)) { gt_assert(range.end <= lastend); getencseqkmers_rangetwobitencoding(twobitencoding, totallength, realtotallength, mirrored, maskright, readmode, kmersize, upperkmersize, onlyfirst, processkmercode, processkmercodeinfo, processkmerspecial, processkmerspecialinfo, range.end, lastend); lastend = range.start; } } else { sri = gt_specialrangeiterator_new(encseq,true); while (gt_specialrangeiterator_next(sri,&range)) { gt_assert(range.start >= laststart); getencseqkmers_rangetwobitencoding(twobitencoding, totallength, realtotallength, mirrored, maskright, readmode, kmersize, upperkmersize, onlyfirst, processkmercode, processkmercodeinfo, processkmerspecial, processkmerspecialinfo, laststart, range.start); laststart = range.end; } } gt_assert(totallength >= laststart); gt_specialrangeiterator_delete(sri); } getencseqkmers_rangetwobitencoding(twobitencoding, totallength, realtotallength, mirrored, maskright, readmode, kmersize, upperkmersize, onlyfirst, processkmercode, processkmercodeinfo, processkmerspecial, processkmerspecialinfo, GT_ISDIRREVERSE(readmode) ? 0 : laststart, GT_ISDIRREVERSE(readmode) ? lastend : totallength); } static void gt_updateleftborderforkmer(Sfxiterator *sfi, GT_UNUSED bool firstinrange, GT_UNUSED unsigned long position, GT_UNUSED unsigned long seqnum, GT_UNUSED unsigned long relpos, GtCodetype code) { gt_assert(sfi->sfxstrategy.spmopt_minlength == 0); gt_bcktab_leftborder_addcode(sfi->leftborder,code); } static void gt_updateleftborderforspecialkmer(Sfxiterator *sfi, unsigned int maxprefixindex, unsigned long position, unsigned int code) { unsigned int idx; gt_assert(sfi->sfxstrategy.spmopt_minlength == 0); if (sfi->sfxstrategy.storespecialcodes) { Codeatposition *spcaptr; spcaptr = sfi->spaceCodeatposition + sfi->nextfreeCodeatposition++; spcaptr->maxprefixindex = maxprefixindex; spcaptr->code = code; spcaptr->position = position; } for (idx=maxprefixindex; idx>=1U; idx--) { gt_bcktab_leftborder_addcode(sfi->leftborder,(GtCodetype) code); code = ((code << 2) | 3U) & sfi->kmerfastmaskright; } } #define GT_SPMOPT_UPDATELEFTBORDERFORKMER(SFI,FIRSTINRANGE,POSITION,SEQNUM,\ RELPOS,SCANCODE)\ gt_assert((SFI)->sfxstrategy.spmopt_minlength > 0);\ if (FIRSTINRANGE || gt_checksuffixprefixbuckets(SFI,SCANCODE))\ {\ gt_bcktab_leftborder_addcode((SFI)->leftborder,\ GT_SCANCODE_TO_BCKCODE(SFI,SCANCODE));\ } typedef struct { const GtTwobitencoding *twobitencoding; unsigned long totallength, maxunitindex, realtotallength, rightbound, numofsequences; GtCodetype maskright; unsigned int kmersize, upperkmersize; bool mirrored; const GtEncseq *encseq; /* XXX remove later */ } GtSfxmapped4constinfo; /* This is for checking only #define GT_ENCSEQ_RELPOS_SEQNUM_CHECK(POS)\ gt_encseq_relpos_seqnum_check(__FILE__,__LINE__,\ mapped4info->encseq,relpos,\ specialfreeunit,POS) */ #define GT_ENCSEQ_RELPOS_SEQNUM_CHECK(POS) /* Nothing */ #define PROCESSKMERPREFIX(FUN) updateleftborder_##FUN #define PROCESSKMERTYPE Sfxiterator #define PROCESSKMERSPECIALTYPE GT_UNUSED Sfxiterator #define PROCESSKMERCODE gt_updateleftborderforkmer #define PROCESSKMERCODESPECIAL gt_updateleftborderforspecialkmer #include "sfx-mapped4.gen" #undef PROCESSKMERPREFIX #undef PROCESSKMERTYPE #undef PROCESSKMERSPECIALTYPE #undef PROCESSKMERCODE #undef PROCESSKMERCODESPECIAL /* start with next inling */ #define PROCESSKMERPREFIX(FUN) spmopt_updateleftborder_##FUN #define PROCESSKMERTYPE Sfxiterator #define PROCESSKMERSPECIALTYPE GT_UNUSED Sfxiterator #define PROCESSKMERCODE GT_SPMOPT_UPDATELEFTBORDERFORKMER #define GT_IGNORERIGHTBOUND #include "sfx-mapped4.gen" #undef GT_IGNORERIGHTBOUND /* start with next inling */ #undef PROCESSKMERPREFIX #undef PROCESSKMERTYPE #undef PROCESSKMERSPECIALTYPE #undef PROCESSKMERCODE #define PROCESSKMERPREFIX(FUN) insertsuffix_##FUN #define PROCESSKMERTYPE Sfxiterator #define PROCESSKMERSPECIALTYPE GT_UNUSED Sfxiterator #define PROCESSKMERCODE GT_INSERTKMERWITHOUTSPECIAL1 #include "sfx-mapped4.gen" #undef PROCESSKMERPREFIX #undef PROCESSKMERTYPE #undef PROCESSKMERSPECIALTYPE #undef PROCESSKMERCODE /* #define SHOWCURRENTSPACE\ printf("spacepeak at line %d: %.2f\n",__LINE__,\ GT_MEGABYTES(gt_ma_get_space_current() + gt_fa_get_space_current())) */ #define SHOWCURRENTSPACE /* Nothing */ static void gt_sfimarkprefixsuffixbuckets(void *processinfo, GT_UNUSED bool firstinrange, GT_UNUSED unsigned long pos, GtCodetype scancode) { Sfxiterator *sfi = (Sfxiterator *) processinfo; GtCodetype checkcode = GT_SCANCODE_TO_PREFIXCODE(sfi,scancode); gt_assert(firstinrange); if (!GT_ISIBITSET(sfi->markprefixbuckets,checkcode)) { GT_SETIBIT(sfi->markprefixbuckets,checkcode); } #ifdef _LP64 checkcode = GT_SCANCODE_TO_SUFFIXCODE(sfi,scancode); if (!GT_ISIBITSET(sfi->marksuffixbuckets,checkcode)) { GT_SETIBIT(sfi->marksuffixbuckets,checkcode); } #endif } static size_t gt_sizeforbittable(unsigned int numofchars, unsigned int prefixlength) { unsigned long numofcodes; numofcodes = gt_power_for_small_exponents(numofchars,prefixlength); return sizeof (GtBitsequence) * GT_NUMOFINTSFORBITS(numofcodes); } static void gt_determineaddionalsuffixprefixchars( unsigned int *additionalprefixchars, unsigned int *additionalsuffixchars, unsigned int numofchars, unsigned int prefixlength, size_t estimatedspace, unsigned long maximumspace) { unsigned int prefixchars; size_t sizeofprefixmarks; for (prefixchars = 1U; prefixlength + prefixchars <= (unsigned int) GT_UNITSIN2BITENC; prefixchars++) { sizeofprefixmarks = gt_sizeforbittable(numofchars,prefixlength+prefixchars); if (estimatedspace + sizeofprefixmarks > (size_t) maximumspace) { prefixchars--; break; } } *additionalprefixchars = prefixchars; #ifdef _LP64 { unsigned int suffixchars; size_t sizeofsuffixmarks; sizeofprefixmarks = gt_sizeforbittable(numofchars,prefixlength+prefixchars); for (suffixchars = 1U; prefixlength+prefixchars+prefixlength+suffixchars <= (unsigned) GT_UNITSIN2BITENC; suffixchars++) { sizeofsuffixmarks = gt_sizeforbittable(numofchars, prefixlength+suffixchars); if (estimatedspace + sizeofprefixmarks + sizeofsuffixmarks > (size_t) maximumspace) { suffixchars--; break; } } if (prefixchars <= suffixchars) { suffixchars = prefixchars - 1; } *additionalsuffixchars = suffixchars; } #else *additionalsuffixchars = 0; #endif } static unsigned long gt_bcktab_code_to_prefix_index(unsigned long code, const void *data) { unsigned int additionalprefixchars, *ptr = (unsigned int *) data; additionalprefixchars = *ptr; if (GT_MULT2(additionalprefixchars) > (unsigned int) GT_LOGWORDSIZE) { return (unsigned long) (code << (GT_MULT2(additionalprefixchars) - GT_LOGWORDSIZE)); } return (unsigned long) (code >> (GT_LOGWORDSIZE - GT_MULT2(additionalprefixchars))); } static void gt_bcktab_code_to_minmax_prefix_index(unsigned long *mincode, unsigned long *maxcode, const void *data) { *mincode = gt_bcktab_code_to_prefix_index(*mincode,data); *maxcode = gt_bcktab_code_to_prefix_index(*maxcode,data); } Sfxiterator *gt_Sfxiterator_new_withadditionalvalues( const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, void *voidoutlcpinfo, FILE *outfpbcktab, const Sfxstrategy *sfxstrategy, GtTimer *sfxprogress, bool withprogressbar, GtLogger *logger, GtError *err) { Sfxiterator *sfi = NULL; unsigned long realspecialranges, specialcharacters, numofsuffixestosort = 0; bool haserr = false; GtSfxmappedrangelist *sfxmrlist = gt_Sfxmappedrangelist_new(); #ifdef _LP64 size_t estimatedspace = (size_t) 13131; #else size_t estimatedspace = (size_t) 7968; #endif gt_error_check(err); SHOWCURRENTSPACE; gt_assert(encseq != NULL); estimatedspace += (size_t) gt_encseq_sizeofrep(encseq) + gt_encseq_sizeofstructure(); realspecialranges = gt_encseq_realspecialranges(encseq); specialcharacters = gt_encseq_specialcharacters(encseq); gt_assert(prefixlength > 0); if (sfxstrategy != NULL) { if (sfxstrategy->storespecialcodes && prefixlength > (unsigned int) MAXPREFIXLENGTH) { gt_error_set(err,"argument for option -pl must be in the range [1,%u]", MAXPREFIXLENGTH); haserr = true; } else { if (sfxstrategy->spmopt_minlength > 0 && prefixlength > sfxstrategy->spmopt_minlength) { gt_error_set(err,"argument for option -pl must not be larger " "than argument to option -spmopt"); haserr = true; } } } if (!haserr) { sfi = gt_malloc(sizeof (*sfi)); estimatedspace += sizeof (*sfi); if (sfxstrategy != NULL && sfxstrategy->storespecialcodes && sfxstrategy->spmopt_minlength == 0) { sfi->spaceCodeatposition = gt_malloc(sizeof (*sfi->spaceCodeatposition) * (realspecialranges+1)); gt_logger_log(logger,"sizeof (spaceCodeatposition)=%lu bytes", (unsigned long) (sizeof (*sfi->spaceCodeatposition) * (realspecialranges+1))); estimatedspace += sizeof (*sfi->spaceCodeatposition) * (realspecialranges+1); } else { sfi->spaceCodeatposition = NULL; } sfi->bcktab = NULL; sfi->nextfreeCodeatposition = 0; sfi->suffixsortspace = NULL; sfi->suftabparts = NULL; sfi->encseq = encseq; sfi->readmode = readmode; sfi->numofchars = gt_encseq_alphabetnumofchars(encseq); sfi->prefixlength = prefixlength; sfi->kmerfastmaskright = (1U << GT_MULT2(prefixlength))-1; sfi->mappedmarkprefixbuckets = NULL; sfi->markprefixbuckets = NULL; sfi->marksuffixbuckets = NULL; sfi->outfpbcktab = outfpbcktab; sfi->spmopt_kmerscansize = 0; sfi->spmopt_numofallprefixcodes = 0; sfi->spmopt_numofallsuffixcodes = 0; sfi->spmopt_kmerscancodeshift2bckcode = 0; sfi->spmopt_kmerscancodeshift2prefixcode = 0; sfi->spmopt_kmerscancodesuffixmask = 0; sfi->spmopt_additionalprefixchars = 3U; sfi->dcov = NULL; sfi->withprogressbar = withprogressbar; if (sfxstrategy != NULL) { sfi->sfxstrategy = *sfxstrategy; if (sfxstrategy->cmpcharbychar || !gt_encseq_bitwise_cmp_ok(encseq)) { sfi->sfxstrategy.cmpcharbychar = true; } else { sfi->sfxstrategy.cmpcharbychar = false; } } else { defaultsfxstrategy(&sfi->sfxstrategy, gt_encseq_bitwise_cmp_ok(encseq) ? false : true); } gt_logger_log(logger,"maxinsertionsort=%lu", sfi->sfxstrategy.maxinsertionsort); gt_logger_log(logger,"maxbltriesort=%lu", sfi->sfxstrategy.maxbltriesort); gt_logger_log(logger,"maxcountingsort=%lu", sfi->sfxstrategy.maxcountingsort); gt_logger_log(logger,"storespecialcodes=%s", sfi->sfxstrategy.storespecialcodes ? "true" : "false"); gt_logger_log(logger,"cmpcharbychar=%s", sfi->sfxstrategy.cmpcharbychar ? "true" : "false"); sfi->totallength = gt_encseq_total_length(encseq); gt_logger_log(logger,"totallength=%lu",sfi->totallength); sfi->specialcharacters = specialcharacters; sfi->outlcpinfo = (GtOutlcpinfo *) voidoutlcpinfo; sfi->outlcpinfoforsample = NULL; sfi->sri = NULL; sfi->part = 0; sfi->exhausted = false; sfi->bucketiterstep = 0; sfi->logger = logger; sfi->sfxprogress = sfxprogress; if (sfi->sfxstrategy.differencecover > 0 && specialcharacters < sfi->totallength) { if (sfi->outlcpinfo != NULL) { sfi->outlcpinfoforsample = gt_Outlcpinfo_new(NULL,sfi->numofchars,0,false,false,NULL,NULL,err); if (sfi->outlcpinfoforsample == NULL) { haserr = true; } } if (!haserr) { /* the following function only has an effect for differencecover > 0 */ sfi->dcov = gt_differencecover_prepare_sample( sfi->sfxstrategy.differencecover, sfi->encseq, sfi->readmode, sfi->sfxstrategy.samplewithprefixlengthnull ? 0 : sfi->prefixlength, &sfi->sfxstrategy, sfi->outlcpinfoforsample, sfi->logger, sfi->sfxprogress, err); if (sfi->dcov == NULL) { haserr = true; } else { if (gt_differencecover_is_empty(sfi->dcov)) { gt_differencecover_delete(sfi->dcov); sfi->dcov = NULL; } else { size_t dcovspace = gt_differencecover_requiredspace(sfi->dcov); gt_logger_log(sfi->logger,"difference cover%srequires %.2f MB" " (%.2f bytes/sample position)", sfi->outlcpinfoforsample != NULL ? " (including RMQ) " : " ", GT_MEGABYTES(dcovspace), (double) dcovspace/ gt_differencecover_samplesize(sfi->dcov)); estimatedspace += dcovspace; } } } } } if (!haserr) { bool withspecialsuffixes; gt_assert(sfi != NULL); withspecialsuffixes = sfi->sfxstrategy.spmopt_minlength == 0 ? true : false; sfi->bcktab = gt_bcktab_new(sfi->numofchars, prefixlength, sfi->totallength+1, sfi->sfxstrategy.storespecialcodes, withspecialsuffixes, sfi->logger, err); if (sfi->bcktab == NULL) { sfi->leftborder = NULL; haserr = true; } else { uint64_t sizeofbcktab; sfi->leftborder = gt_bcktab_leftborder(sfi->bcktab); sizeofbcktab = gt_bcktab_sizeoftable(sfi->numofchars,prefixlength, sfi->totallength+1, sfi->sfxstrategy.spmopt_minlength == 0 ? true : false); estimatedspace += (size_t) sizeofbcktab + gt_bcktab_sizeofworkspace(prefixlength); } SHOWCURRENTSPACE; if (prefixlength > 1U && gt_encseq_has_twobitencoding(sfi->encseq) && sfi->sfxstrategy.spmopt_minlength > 0) { unsigned int suffixchars = 0, additionalsuffixchars = 2U; size_t sizeofprefixmarks, intsforbits; #ifdef _LP64 size_t sizeofsuffixmarks; #endif if (maximumspace > 0) { gt_determineaddionalsuffixprefixchars( &sfi->spmopt_additionalprefixchars, &additionalsuffixchars, sfi->numofchars, prefixlength, estimatedspace, maximumspace); } #ifdef _LP64 if (sfi->prefixlength + sfi->spmopt_additionalprefixchars + sfi->prefixlength + additionalsuffixchars > (unsigned int) GT_UNITSIN2BITENC) { suffixchars = (unsigned int) (GT_UNITSIN2BITENC - (sfi->prefixlength + sfi->spmopt_additionalprefixchars)); } else { suffixchars = sfi->prefixlength + additionalsuffixchars; } #endif sfi->spmopt_kmerscansize = sfi->prefixlength + sfi->spmopt_additionalprefixchars + suffixchars; gt_assert(sfi->spmopt_kmerscansize <= (unsigned int) GT_UNITSIN2BITENC); sfi->spmopt_kmerscancodeshift2bckcode = GT_MULT2(sfi->spmopt_additionalprefixchars + suffixchars); sfi->spmopt_kmerscancodeshift2prefixcode = GT_MULT2(suffixchars); sfi->spmopt_kmerscancodesuffixmask = (GtCodetype) ((1UL << GT_MULT2(suffixchars)) - 1); sfi->spmopt_numofallprefixcodes = gt_power_for_small_exponents(sfi->numofchars, sfi->prefixlength + sfi->spmopt_additionalprefixchars); GT_INITBITTAB(sfi->markprefixbuckets, sfi->spmopt_numofallprefixcodes); intsforbits = GT_NUMOFINTSFORBITS(sfi->spmopt_numofallprefixcodes); sizeofprefixmarks = sizeof (*sfi->markprefixbuckets) * intsforbits; estimatedspace += sizeofprefixmarks; gt_logger_log(sfi->logger,"for all sequences, keep track of " "%u-mers starting at position 0 using a " "table of %lu bytes", sfi->prefixlength + sfi->spmopt_additionalprefixchars, (unsigned long) sizeofprefixmarks); sfi->mappedmarkprefixbuckets = gt_Sfxmappedrange_new("markprefixbuckets", sfi->spmopt_numofallprefixcodes, GtSfxGtBitsequence, gt_bcktab_code_to_minmax_prefix_index, &sfi->spmopt_additionalprefixchars); gt_Sfxmappedrangelist_add(sfxmrlist,sfi->mappedmarkprefixbuckets); sfi->spmopt_numofallsuffixcodes = gt_power_for_small_exponents(sfi->numofchars,suffixchars); #ifdef _LP64 GT_INITBITTAB(sfi->marksuffixbuckets, sfi->spmopt_numofallsuffixcodes); sizeofsuffixmarks = sizeof (*sfi->marksuffixbuckets) * GT_NUMOFINTSFORBITS(sfi->spmopt_numofallsuffixcodes); estimatedspace += sizeofsuffixmarks; gt_logger_log(sfi->logger,"for all sequences, keep track of " "%u-mers starting at position %u " "using a table of %lu bytes", suffixchars, sfi->prefixlength + sfi->spmopt_additionalprefixchars, (unsigned long) sizeofsuffixmarks); #endif getencseqkmers_twobitencoding(encseq, sfi->readmode, sfi->spmopt_kmerscansize, sfi->spmopt_kmerscansize, true, gt_sfimarkprefixsuffixbuckets, sfi, NULL, NULL); if (maximumspace > 0) { gt_assert(estimatedspace <= (size_t) maximumspace); } /*printf("estimated space %.2f\n",GT_MEGABYTES(estimatedspace));*/ } } SHOWCURRENTSPACE; if (!haserr) { unsigned long largestbucketsize, saved_bucketswithoutwholeleaf; gt_assert(sfi != NULL); sfi->storespecials = true; if (sfxprogress != NULL) { gt_timer_show_progress(sfxprogress, "counting prefix distribution", stdout); } if (prefixlength == 1U) { unsigned int charidx; for (charidx=0; charidxnumofchars; charidx++) { unsigned int updateindex = GT_ISDIRCOMPLEMENT(readmode) ? GT_COMPLEMENTBASE(charidx) : charidx; gt_bcktab_leftborder_assign(sfi->leftborder,(GtCodetype) updateindex, gt_encseq_charcount(encseq, (GtUchar) charidx)); } } else { if (gt_encseq_has_twobitencoding(encseq) && !sfi->sfxstrategy.kmerswithencseqreader) { if (sfi->sfxstrategy.spmopt_minlength == 0) { updateleftborder_getencseqkmers_twobitencoding(encseq, readmode, prefixlength, prefixlength, sfi, sfi); } else { gt_assert(sfi->spmopt_kmerscansize > prefixlength); spmopt_updateleftborder_getencseqkmers_twobitencoding( encseq, readmode, sfi->spmopt_kmerscansize, sfi->sfxstrategy.spmopt_minlength, sfi, NULL); } } else { if (sfi->sfxstrategy.iteratorbasedkmerscanning) { getencseqkmersupdatekmercount(encseq, readmode, prefixlength, sfi); } else { getencseqkmers(encseq,readmode,prefixlength,updatekmercount,sfi); } } if (sfi->sfxstrategy.storespecialcodes && sfi->sfxstrategy.spmopt_minlength == 0) { gt_assert(realspecialranges+1 >= sfi->nextfreeCodeatposition); gt_reversespecialcodes(sfi->spaceCodeatposition, sfi->nextfreeCodeatposition); #ifdef SKDEBUG verifycodelistcomputation(encseq, readmode, realspecialranges, prefixlength, sfi->numofchars, sfi->nextfreeCodeatposition, sfi->spaceCodeatposition); #endif } } #ifdef SKDEBUG gt_bcktab_leftborder_show(sfi->bcktab); #endif largestbucketsize = gt_bcktab_leftborderpartialsums(&saved_bucketswithoutwholeleaf, &numofsuffixestosort, sfi->bcktab); gt_logger_log(sfi->logger, "largest bucket size=%lu",largestbucketsize); if (sfi->sfxstrategy.spmopt_minlength > 0) { gt_logger_log(sfi->logger, "relevant suffixes=%.2f%%",100.0 * (double) numofsuffixestosort/ (sfi->totallength+1)); gt_logger_log(sfi->logger,"saved_bucketswithoutwholeleaf=%lu", saved_bucketswithoutwholeleaf); /* gt_assert(saved_bucketswithoutwholeleaf + numofsuffixestosort == sfi->totallength - specialcharacters); */ } if (sfi->outlcpinfo != NULL) { gt_Outlcpinfo_numsuffixes2output_set( sfi->outlcpinfo, sfi->sfxstrategy.spmopt_minlength == 0 ? sfi->totallength + 1 : numofsuffixestosort); } estimatedspace += sizeof (uint8_t) * largestbucketsize; SHOWCURRENTSPACE; #ifdef DEBUGSIZEESTIMATION if (sfi->sfxstrategy.outsuftabonfile) { verifyestimatedspace(estimatedspace); } #endif gt_bcktab_maprange_lb_cs(sfxmrlist,sfi->bcktab); if (maximumspace > 0) { int retval; gt_assert(numofparts == 1U); retval = gt_suftabparts_fit_memlimit(estimatedspace, maximumspace, sfi->bcktab, NULL, sfxmrlist, sfi->totallength, 0, /* bitsforseqnumrelpos not needed */ specialcharacters, numofsuffixestosort, sfi->sfxstrategy.suftabuint, err); if (retval < 0) { haserr = true; } else { gt_assert(retval > 0); numofparts = (unsigned int) retval; gt_logger_log(logger, "derived parts=%u",numofparts); } } } /* #define SHOWACTUALSPACE printf("line %d,realspace=heap=%.2f,map=%.2f\n",\ __LINE__,\ GT_MEGABYTES(gt_ma_get_space_current()),\ GT_MEGABYTES(gt_fa_get_space_current())) */ #define SHOWACTUALSPACE /* Nothing */ SHOWACTUALSPACE; if (!haserr) { gt_assert(sfi != NULL); sfi->suftabparts = gt_suftabparts_new(numofparts, sfi->bcktab, NULL, sfxmrlist, numofsuffixestosort, specialcharacters + 1, logger); gt_assert(sfi->suftabparts != NULL); if (gt_suftabparts_numofparts(sfi->suftabparts) > 1U) { gt_bcktab_storetmp(sfi->bcktab); } SHOWACTUALSPACE; gt_assert(sfi != NULL && sfi->suftabparts != NULL); if (gt_suftabparts_numofparts(sfi->suftabparts) > 1U && sfi->sfxstrategy.spmopt_minlength > 0) { gt_assert(sfi->markprefixbuckets != NULL); gt_assert(sfi->mappedmarkprefixbuckets != NULL); gt_Sfxmappedrange_storetmp_bitsequence(sfi->mappedmarkprefixbuckets, &sfi->markprefixbuckets, false); gt_assert(sfi->markprefixbuckets == NULL); } else { gt_Sfxmappedrange_delete(sfi->mappedmarkprefixbuckets); sfi->mappedmarkprefixbuckets = NULL; } } SHOWACTUALSPACE; if (!haserr) { gt_assert(sfi != NULL); sfi->suffixsortspace = gt_suffixsortspace_new(gt_suftabparts_largest_width(sfi->suftabparts), sfi->totallength, sfi->sfxstrategy.suftabuint, logger); gt_assert(sfi->suffixsortspace); if (gt_encseq_has_specialranges(sfi->encseq)) { sfi->sri = gt_specialrangeiterator_new(sfi->encseq, GT_ISDIRREVERSE(sfi->readmode) ? false : true); } else { sfi->sri = NULL; } sfi->fusp.sssp = sfi->suffixsortspace; sfi->fusp.allocatedSuffixptr = gt_suftabparts_largest_width(sfi->suftabparts); sfi->overhang.start = sfi->overhang.end = 0; } SHOWACTUALSPACE; gt_Sfxmappedrangelist_delete(sfxmrlist); if (haserr) { (void) gt_Sfxiterator_delete(sfi,NULL); return NULL; } return sfi; } Sfxiterator *gt_Sfxiterator_new(const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, const Sfxstrategy *sfxstrategy, GtTimer *sfxprogress, bool withprogressbar, GtLogger *logger, GtError *err) { return gt_Sfxiterator_new_withadditionalvalues( encseq, readmode, prefixlength, numofparts, maximumspace, NULL, NULL, sfxstrategy, sfxprogress, withprogressbar, logger, err); } static void gt_sfxiterator_preparethispart(Sfxiterator *sfi) { unsigned long sumofwidthforpart; GtBucketspec2 *bucketspec2 = NULL; if (sfi->part == 0 && sfi->withprogressbar) { gt_assert(sfi->bcktab != NULL); gt_progressbar_start(&sfi->bucketiterstep, (unsigned long long) gt_bcktab_numofallcodes(sfi->bcktab)); } sfi->currentmincode = gt_suftabparts_minindex(sfi->part,sfi->suftabparts); sfi->currentmaxcode = gt_suftabparts_maxindex(sfi->part,sfi->suftabparts); sfi->widthofpart = gt_suftabparts_widthofpart(sfi->part,sfi->suftabparts); if (sfi->sfxprogress != NULL) { gt_timer_show_progress(sfi->sfxprogress, "inserting suffixes into buckets", stdout); } if (gt_suftabparts_numofparts(sfi->suftabparts) > 1U) { gt_logger_log(sfi->logger,"compute part %u: " "%lu suffixes,%lu buckets from " "%lu..%lu", sfi->part, gt_suftabparts_widthofpart(sfi->part,sfi->suftabparts), sfi->currentmaxcode - sfi->currentmincode + 1, sfi->currentmincode, sfi->currentmaxcode); gt_bcktab_assignboundsforpart(sfi->bcktab, sfi->currentmincode, sfi->currentmaxcode); if (sfi->mappedmarkprefixbuckets != NULL) { sfi->markprefixbuckets = (GtBitsequence *) gt_Sfxmappedrange_map(sfi->mappedmarkprefixbuckets, sfi->currentmincode, sfi->currentmaxcode); } } SHOWACTUALSPACE; gt_suffixsortspace_partoffset_set(sfi->suffixsortspace, gt_suftabparts_offset(sfi->part, sfi->suftabparts)); if (sfi->sfxstrategy.spmopt_minlength == 0) { if (sfi->sfxstrategy.storespecialcodes) { sfx_derivespecialcodesfromtable(sfi, gt_suftabparts_numofparts(sfi->suftabparts) == 1U ? true : false); } else { sfx_derivespecialcodesonthefly(sfi); } } SHOWACTUALSPACE; sfi->exportptr = gt_suffixsortspace_exportptr(0,sfi->suffixsortspace); if (sfi->prefixlength > 1U && gt_encseq_has_twobitencoding(sfi->encseq) && !sfi->sfxstrategy.kmerswithencseqreader) { insertsuffix_getencseqkmers_twobitencoding( sfi->encseq, sfi->readmode, sfi->sfxstrategy.spmopt_minlength == 0 ? sfi->prefixlength : sfi->spmopt_kmerscansize, sfi->sfxstrategy.spmopt_minlength == 0 ? sfi->prefixlength : sfi->sfxstrategy.spmopt_minlength, sfi, NULL); } else { if (sfi->sfxstrategy.iteratorbasedkmerscanning) { getencseqkmersinsertkmerwithoutspecial(sfi->encseq, sfi->readmode, sfi->prefixlength, sfi); } else { getencseqkmers(sfi->encseq,sfi->readmode,sfi->prefixlength, gt_insertkmerwithoutspecial,sfi); } } SHOWACTUALSPACE; gt_suffixsortspace_export_done(sfi->suffixsortspace); if (sfi->sfxprogress != NULL) { gt_timer_show_progress(sfi->sfxprogress, "sorting the buckets", stdout); } /* exit(0); just for testing */ sumofwidthforpart = gt_suftabparts_sumofwidth(sfi->part,sfi->suftabparts); if (gt_suftabparts_numofparts(sfi->suftabparts) == 1U && sfi->outlcpinfo == NULL && sfi->prefixlength >= 2U && sfi->sfxstrategy.spmopt_minlength == 0) { bucketspec2 = gt_copysort_new(sfi->bcktab,sfi->encseq,sfi->readmode, sumofwidthforpart,sfi->numofchars); } SHOWACTUALSPACE; if (sfi->sfxstrategy.differencecover > 0 && sfi->dcov != NULL) { gt_differencecover_set_sssp_lcp(sfi->dcov,sfi->suffixsortspace, sfi->outlcpinfo); } if (sfi->part == 0) { gt_logger_log(sfi->logger,"used workspace for sorting: %.2f MB", GT_MEGABYTES(gt_size_of_sort_workspace (&sfi->sfxstrategy))); } if (!sfi->sfxstrategy.onlybucketinsertion) { unsigned int sortmaxdepth; GtProcessunsortedsuffixrange processunsortedsuffixrange; if (sfi->dcov == NULL) { if (sfi->sfxstrategy.userdefinedsortmaxdepth == 0) { sortmaxdepth = 0; } else { sortmaxdepth = sfi->sfxstrategy.userdefinedsortmaxdepth; } processunsortedsuffixrange = NULL; } else { gt_assert(sfi->sfxstrategy.userdefinedsortmaxdepth == 0); sortmaxdepth = sfi->sfxstrategy.differencecover; processunsortedsuffixrange = gt_differencecover_sortunsortedbucket; } gt_assert(sortmaxdepth != 0 || processunsortedsuffixrange == NULL); gt_sortallbuckets(sfi->suffixsortspace, sumofwidthforpart, bucketspec2, sfi->encseq, sfi->readmode, sfi->currentmincode, sfi->currentmaxcode, sfi->bcktab, sfi->numofchars, sfi->prefixlength, sfi->outlcpinfo, sortmaxdepth, &sfi->sfxstrategy, processunsortedsuffixrange, (void *) sfi->dcov, &sfi->bucketiterstep, sfi->logger); } if (bucketspec2 != NULL) { gt_copysort_derivesorting(bucketspec2,sfi->suffixsortspace,sfi->logger); gt_copysort_delete(bucketspec2); bucketspec2 = NULL; } SHOWACTUALSPACE; sfi->part++; } static void insertfullspecialrange(Sfxiterator *sfi, unsigned long leftpos, unsigned long rightpos) { unsigned long pos; gt_assert(leftpos < rightpos); if (GT_ISDIRREVERSE(sfi->readmode)) { pos = rightpos - 1; } else { pos = leftpos; } while (true) { if (GT_ISDIRREVERSE(sfi->readmode)) { gt_assert(pos < sfi->totallength); gt_suffixsortspace_setdirect(sfi->fusp.sssp, sfi->fusp.nextfreeSuffixptr, GT_REVERSEPOS(sfi->totallength,pos)); sfi->fusp.nextfreeSuffixptr++; if (pos == leftpos) { break; } pos--; } else { gt_suffixsortspace_setdirect(sfi->fusp.sssp, sfi->fusp.nextfreeSuffixptr, pos); sfi->fusp.nextfreeSuffixptr++; if (pos == rightpos-1) { break; } pos++; } } } static void fillspecialnextpage(Sfxiterator *sfi) { GtRange range; unsigned long width; while (true) { if (sfi->overhang.start < sfi->overhang.end) { width = sfi->overhang.end - sfi->overhang.start; if (sfi->fusp.nextfreeSuffixptr + width > sfi->fusp.allocatedSuffixptr) { /* does not fit into the buffer, so only output a part */ unsigned long rest = sfi->fusp.nextfreeSuffixptr + width - sfi->fusp.allocatedSuffixptr; gt_assert(rest > 0); if (GT_ISDIRREVERSE(sfi->readmode)) { insertfullspecialrange(sfi,sfi->overhang.start + rest, sfi->overhang.end); sfi->overhang.end = sfi->overhang.start + rest; } else { insertfullspecialrange(sfi,sfi->overhang.start, sfi->overhang.end - rest); sfi->overhang.start = sfi->overhang.end - rest; } break; } if (sfi->fusp.nextfreeSuffixptr + width == sfi->fusp.allocatedSuffixptr) { /* overhang fits into the buffer and buffer is full */ insertfullspecialrange(sfi,sfi->overhang.start,sfi->overhang.end); sfi->overhang.start = sfi->overhang.end = 0; break; } /* overhang fits into the buffer and buffer is not full */ insertfullspecialrange(sfi,sfi->overhang.start,sfi->overhang.end); sfi->overhang.start = sfi->overhang.end = 0; } else { if (sfi->sri != NULL && gt_specialrangeiterator_next(sfi->sri,&range)) { width = range.end - range.start; gt_assert(width > 0); if (sfi->fusp.nextfreeSuffixptr + width > sfi->fusp.allocatedSuffixptr) { /* does not fit into the buffer, so only output a part */ unsigned long rest = sfi->fusp.nextfreeSuffixptr + width - sfi->fusp.allocatedSuffixptr; if (GT_ISDIRREVERSE(sfi->readmode)) { insertfullspecialrange(sfi,range.start + rest, range.end); sfi->overhang.start = range.start; sfi->overhang.end = range.start + rest; } else { insertfullspecialrange(sfi,range.start,range.end - rest); sfi->overhang.start = range.end - rest; sfi->overhang.end = range.end; } break; } if (sfi->fusp.nextfreeSuffixptr + width == sfi->fusp.allocatedSuffixptr) { /* overhang fits into the buffer and buffer is full */ insertfullspecialrange(sfi,range.start,range.end); sfi->overhang.start = sfi->overhang.end = 0; break; } insertfullspecialrange(sfi,range.start,range.end); sfi->overhang.start = sfi->overhang.end = 0; } else { if (sfi->fusp.nextfreeSuffixptr < sfi->fusp.allocatedSuffixptr) { gt_suffixsortspace_setdirect(sfi->fusp.sssp, sfi->fusp.nextfreeSuffixptr, sfi->totallength); sfi->fusp.nextfreeSuffixptr++; sfi->exhausted = true; } break; } } } } const GtSuffixsortspace *gt_Sfxiterator_next(unsigned long *numberofsuffixes, bool *specialsuffixes, Sfxiterator *sfi) { if (sfi->part < gt_suftabparts_numofparts(sfi->suftabparts)) { gt_sfxiterator_preparethispart(sfi); *numberofsuffixes = sfi->widthofpart; if (specialsuffixes != NULL) { *specialsuffixes = false; } return sfi->suffixsortspace; } if (sfi->exhausted) { if (sfi->withprogressbar) { gt_progressbar_stop(); } return NULL; } sfi->fusp.nextfreeSuffixptr = 0; if (sfi->sfxstrategy.spmopt_minlength == 0) { gt_suffixsortspace_partoffset_set(sfi->suffixsortspace, sfi->totallength-sfi->specialcharacters); fillspecialnextpage(sfi); gt_assert(sfi->fusp.nextfreeSuffixptr > 0); } else { sfi->exhausted = true; } *numberofsuffixes = sfi->fusp.nextfreeSuffixptr; if (specialsuffixes != NULL) { *specialsuffixes = true; } return sfi->suffixsortspace; } int gt_Sfxiterator_bcktab2file(FILE *fp, Sfxiterator *sfi, GtError *err) { gt_error_check(err); gt_assert(sfi != NULL && sfi->bcktab != NULL); if (gt_suftabparts_numofparts(sfi->suftabparts) <= 1U) { int ret = gt_bcktab_flush_to_file(fp,sfi->bcktab,err); gt_fa_fclose(fp); return ret; } return 0; } unsigned long gt_Sfxiterator_longest(const Sfxiterator *sfi) { gt_assert(sfi != NULL); if (sfi->sfxstrategy.spmopt_minlength == 0) { return gt_suffixsortspace_longest(sfi->suffixsortspace); } else { return 0; } } genometools-1.5.1/src/match/sfx-suffixer.h000066400000000000000000000102011211610345200205230ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_SUFFIXER_H #define SFX_SUFFIXER_H #include "core/encseq_api.h" #include "core/error.h" #include "core/logger.h" #include "core/readmode.h" #include "core/timer_api.h" #include "core/intbits.h" #include "core/codetype.h" #include "extended/uint64hashtable.h" #include "firstcodes-buf.h" #include "sfx-suffixgetset.h" #include "sfx-strategy.h" typedef struct Sfxiterator Sfxiterator; int gt_Sfxiterator_delete(Sfxiterator *sfi,GtError *err); Sfxiterator *gt_Sfxiterator_new(const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, const Sfxstrategy *sfxstrategy, GtTimer *sfxprogress, bool withprogressbar, GtLogger *logger, GtError *err); Sfxiterator *gt_Sfxiterator_new_withadditionalvalues( const GtEncseq *encseq, GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, void *voidoutlcpinfo, FILE *outfpbcktab, const Sfxstrategy *sfxstrategy, GtTimer *sfxprogress, bool withprogressbar, GtLogger *logger, GtError *err); const GtSuffixsortspace *gt_Sfxiterator_next(unsigned long *numberofsuffixes, bool *specialsuffixes, Sfxiterator *sfi); int gt_Sfxiterator_postsortfromstream(Sfxiterator *sfi, const GtStr *indexname, GtError *err); int gt_Sfxiterator_bcktab2file(FILE *fp,Sfxiterator *sfi,GtError *err); unsigned long gt_Sfxiterator_longest(const Sfxiterator *sfi); GtCodetype gt_kmercode_at_firstpos(const GtTwobitencoding *twobitencoding, unsigned int kmersize); void getencseqkmers_twobitencoding(const GtEncseq *encseq, GtReadmode readmode, unsigned int kmersize, unsigned int upperkmersize, bool onlyfirst, void(*processkmercode)(void *, bool, unsigned long, GtCodetype), void *processkmercodeinfo, void(*processkmerspecial)(void *, unsigned int, unsigned int, unsigned long), void *processkmerspecialinfo); #endif genometools-1.5.1/src/match/sfx-suffixgetset.c000066400000000000000000000334731211610345200214230ustar00rootroot00000000000000/* Copyright (c) 2010 Stefan Kurtz Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include "core/assert_api.h" #include "core/defined-types.h" #include "core/fa.h" #include "core/log_api.h" #include "core/logger_api.h" #include "core/ma_api.h" #include "core/mathsupport.h" #include "core/safearith.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "sfx-suffixgetset.h" struct GtSuffixsortspace { bool unmapsortspace, currentexport; Definedunsignedlong longestidx; uint32_t *uinttab; size_t basesize; GtSuffixsortspace_exportptr exportptr; unsigned long maxindex, maxvalue, partoffset, bucketleftidx, *ulongtab; }; static bool gt_decide_to_use_uint(bool useuint,unsigned long maxvalue) { if (useuint && maxvalue <= (unsigned long) UINT_MAX) { return true; } return false; } uint64_t gt_suffixsortspace_requiredspace(unsigned long numofentries, unsigned long maxvalue, bool useuint) { uint64_t requiredspace = (uint64_t) sizeof (GtSuffixsortspace); if (gt_decide_to_use_uint(useuint,maxvalue)) { gt_assert(maxvalue <= (unsigned long) UINT_MAX); requiredspace += (uint64_t) numofentries * (uint64_t) sizeof (uint32_t); } else { requiredspace += (uint64_t) numofentries * (uint64_t) sizeof (unsigned long); } return requiredspace; } static void gt_suffixsortspace_overflow_abort(GT_UNUSED const char *f, GT_UNUSED int l, void *data) { fprintf(stderr, "error: overflow detected while calculating size of " "suffix sorting space: %lu * %lu bytes is too large for " "the current platform, please recompile GenomeTools with " "support for a larger address space to prevent this (e.g. " "64 bit instead of 32 bit) or use the `-parts' option.\n", (unsigned long) sizeof (unsigned long), *(unsigned long*) data); exit(GT_EXIT_PROGRAMMING_ERROR); } GtSuffixsortspace *gt_suffixsortspace_new(unsigned long numofentries, unsigned long maxvalue, bool useuint, GT_UNUSED GtLogger *logger) { GtSuffixsortspace *suffixsortspace; unsigned long sufspacesize; gt_assert(numofentries > 0); suffixsortspace = gt_malloc(sizeof (*suffixsortspace)); suffixsortspace->maxindex = numofentries-1; suffixsortspace->maxvalue = maxvalue; suffixsortspace->longestidx.defined = false; suffixsortspace->longestidx.valueunsignedlong = 0; suffixsortspace->exportptr.ulongtabsectionptr = NULL; suffixsortspace->exportptr.uinttabsectionptr = NULL; suffixsortspace->currentexport = false; #ifdef _LP64 gt_logger_log(logger,"suftab uses %dbit values: " "maxvalue=%lu,numofentries=%lu", gt_decide_to_use_uint(useuint,maxvalue) ? 32 : 64, maxvalue,numofentries); #endif suffixsortspace->basesize = gt_decide_to_use_uint(useuint,maxvalue) ? sizeof (*suffixsortspace->uinttab) : sizeof (*suffixsortspace->ulongtab); sufspacesize = gt_safe_mult_ulong_check((unsigned long) suffixsortspace->basesize, numofentries, gt_suffixsortspace_overflow_abort, &numofentries); gt_log_log("sizeof (suftab)=%lu bytes",sufspacesize); if (gt_decide_to_use_uint(useuint,maxvalue)) { suffixsortspace->ulongtab = NULL; suffixsortspace->uinttab = gt_malloc((size_t) sufspacesize); } else { suffixsortspace->uinttab = NULL; suffixsortspace->ulongtab = gt_malloc((size_t) sufspacesize); } suffixsortspace->partoffset = 0; suffixsortspace->bucketleftidx = 0; suffixsortspace->unmapsortspace = false; return suffixsortspace; } GtSuffixsortspace *gt_suffixsortspace_new_fromfile(int filedesc, const char *filename, unsigned long numofentries, unsigned long maxvalue, bool useuint) { GtSuffixsortspace *suffixsortspace; void *ptr; suffixsortspace = gt_malloc(sizeof (*suffixsortspace)); suffixsortspace->basesize = gt_decide_to_use_uint(useuint,maxvalue) ? sizeof (*suffixsortspace->uinttab) : sizeof (*suffixsortspace->ulongtab); ptr = gt_fa_mmap_generic_fd(filedesc,filename, (size_t) numofentries * suffixsortspace->basesize, (size_t) 0,false,false,NULL); if (gt_decide_to_use_uint(useuint,maxvalue)) { suffixsortspace->uinttab = ptr; suffixsortspace->ulongtab = NULL; } else { suffixsortspace->ulongtab = ptr; suffixsortspace->uinttab = NULL; } suffixsortspace->partoffset = 0; suffixsortspace->bucketleftidx = 0; suffixsortspace->unmapsortspace = true; suffixsortspace->maxindex = numofentries - 1; suffixsortspace->maxvalue = maxvalue; suffixsortspace->longestidx.defined = false; suffixsortspace->longestidx.valueunsignedlong = 0; suffixsortspace->exportptr.ulongtabsectionptr = NULL; suffixsortspace->exportptr.uinttabsectionptr = NULL; suffixsortspace->currentexport = false; return suffixsortspace; } void gt_suffixsortspace_delete(GtSuffixsortspace *suffixsortspace, GT_UNUSED bool checklongestdefined) { if (suffixsortspace != NULL) { gt_assert(!checklongestdefined || suffixsortspace->longestidx.defined); if (suffixsortspace->unmapsortspace) { gt_fa_xmunmap(suffixsortspace->ulongtab); gt_fa_xmunmap(suffixsortspace->uinttab); } else { gt_free(suffixsortspace->uinttab); gt_free(suffixsortspace->ulongtab); } gt_free(suffixsortspace); } } void gt_suffixsortspace_nooffsets(GT_UNUSED const GtSuffixsortspace *sssp) { gt_assert(sssp->partoffset == 0); gt_assert(sssp->bucketleftidx == 0); } unsigned long gt_suffixsortspace_getdirect(const GtSuffixsortspace *sssp, unsigned long idx) { gt_assert(idx <= sssp->maxindex); if (sssp->ulongtab != NULL) { return sssp->ulongtab[idx]; } gt_assert(sssp->uinttab != NULL); return (unsigned long) sssp->uinttab[idx]; } void gt_suffixsortspace_updatelongest(GtSuffixsortspace *sssp,unsigned long idx) { sssp->longestidx.defined = true; sssp->longestidx.valueunsignedlong = sssp->bucketleftidx + idx; } void gt_suffixsortspace_setdirect(GtSuffixsortspace *sssp, unsigned long idx, unsigned long value) { gt_assert(idx <= sssp->maxindex && value <= sssp->maxvalue); if (value == 0) { sssp->longestidx.defined = true; sssp->longestidx.valueunsignedlong = sssp->partoffset + idx; } if (sssp->ulongtab != NULL) { sssp->ulongtab[idx] = value; } else { gt_assert (sssp->uinttab != NULL); gt_assert (value <= (unsigned long) UINT_MAX); sssp->uinttab[idx] = (uint32_t) value; } } void gt_suffixsortspace_showrange(const GtSuffixsortspace *sssp, unsigned long subbucketleft, unsigned long width) { unsigned long idx; printf("%lu,%lu=",sssp->bucketleftidx+subbucketleft-sssp->partoffset, sssp->bucketleftidx+subbucketleft+width-1-sssp->partoffset); for (idx=sssp->bucketleftidx+subbucketleft-sssp->partoffset; idxbucketleftidx+subbucketleft+width-sssp->partoffset; idx++) { printf(" %lu", gt_suffixsortspace_getdirect(sssp,idx)); } } void gt_suffixsortspace_checkorder(const GtSuffixsortspace *sssp, unsigned long subbucketleft, unsigned long width) { unsigned long idx, currentpos; GT_UNUSED unsigned long prevpos; gt_assert(width > 0); prevpos = gt_suffixsortspace_getdirect(sssp, sssp->bucketleftidx+subbucketleft - sssp->partoffset); for (idx=sssp->bucketleftidx+subbucketleft - sssp->partoffset + 1; idxbucketleftidx+subbucketleft + width - sssp->partoffset; idx++) { currentpos = gt_suffixsortspace_getdirect(sssp,idx); gt_assert(prevpos > currentpos); prevpos = currentpos; } } GtSuffixsortspace_exportptr *gt_suffixsortspace_exportptr( unsigned long subbucketleft, GtSuffixsortspace *sssp) { if (sssp->ulongtab != NULL) { sssp->exportptr.ulongtabsectionptr = sssp->ulongtab + sssp->bucketleftidx + subbucketleft - sssp->partoffset; sssp->exportptr.uinttabsectionptr = NULL; } else { gt_assert(sssp->uinttab != NULL); sssp->exportptr.uinttabsectionptr = sssp->uinttab + sssp->bucketleftidx + subbucketleft - sssp->partoffset; sssp->exportptr.ulongtabsectionptr = NULL; } sssp->currentexport = true; return &sssp->exportptr; } void gt_suffixsortspace_export_done(GtSuffixsortspace *sssp) { sssp->exportptr.ulongtabsectionptr = NULL; sssp->exportptr.uinttabsectionptr = NULL; sssp->currentexport = false; } unsigned long gt_suffixsortspace_get(const GtSuffixsortspace *sssp, unsigned long subbucketleft, unsigned long idx) { return gt_suffixsortspace_getdirect(sssp, sssp->bucketleftidx + subbucketleft + idx - sssp->partoffset); } const unsigned long *gt_suffixsortspace_getptr_ulong( const GtSuffixsortspace *sssp, unsigned long subbucketleft) { if (sssp->ulongtab != NULL) { return sssp->ulongtab + sssp->bucketleftidx + subbucketleft - sssp->partoffset; } else { return NULL; } } const uint32_t *gt_suffixsortspace_getptr_uint32(const GtSuffixsortspace *sssp, unsigned long subbucketleft) { if (sssp->uinttab != NULL) { return sssp->uinttab + sssp->bucketleftidx + subbucketleft - sssp->partoffset; } else { return NULL; } } void gt_suffixsortspace_set(GtSuffixsortspace *sssp, unsigned long subbucketleft, unsigned long idx, unsigned long value) { gt_suffixsortspace_setdirect(sssp, sssp->bucketleftidx + subbucketleft + idx - sssp->partoffset,value); } unsigned long gt_suffixsortspace_bucketleftidx_get(const GtSuffixsortspace *sssp) { gt_assert(sssp != NULL); return sssp->bucketleftidx; } void gt_suffixsortspace_bucketleftidx_set(GtSuffixsortspace *sssp, unsigned long value) { gt_assert(sssp->bucketleftidx == value || !sssp->currentexport); sssp->bucketleftidx = value; } void gt_suffixsortspace_partoffset_set(GtSuffixsortspace *sssp, unsigned long partoffset) { gt_assert(sssp->partoffset == partoffset || !sssp->currentexport); sssp->partoffset = partoffset; } void gt_suffixsortspace_sortspace_delete(GtSuffixsortspace *sssp) { gt_free(sssp->ulongtab); sssp->ulongtab = NULL; gt_free(sssp->uinttab); sssp->uinttab = NULL; } unsigned long *gt_suffixsortspace_ulong_get(const GtSuffixsortspace *sssp) { gt_assert(sssp->ulongtab != NULL); return (unsigned long *) sssp->ulongtab; /* XXX constrain the type cast */ } unsigned long gt_suffixsortspace_longest(const GtSuffixsortspace *sssp) { gt_assert(sssp->longestidx.defined); return sssp->longestidx.valueunsignedlong; } int gt_suffixsortspace_to_file (FILE *outfpsuftab, const GtSuffixsortspace *sssp, unsigned long numberofsuffixes, GT_UNUSED GtError *err) { bool haserr = false; size_t basesize = sssp->ulongtab != NULL ? sizeof (*sssp->ulongtab) : sizeof (*sssp->uinttab); gt_xfwrite(sssp->ulongtab != NULL ? (void *) sssp->ulongtab : (void *) sssp->uinttab, basesize, (size_t) numberofsuffixes, outfpsuftab); return haserr ? -1 : 0; } genometools-1.5.1/src/match/sfx-suffixgetset.h000066400000000000000000000127511211610345200214240ustar00rootroot00000000000000/* Copyright (c) 2010 Stefan Kurtz Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_SUFFIXGETSET_H #define SFX_SUFFIXGETSET_H #include #include #include "core/unused_api.h" #include "core/logger_api.h" #include "core/error_api.h" #define GT_SUFFIXSORTSPACE_EXPORT_SET(SSSP,EXPORTPTR,INDEX,POS)\ if ((EXPORTPTR)->ulongtabsectionptr != NULL)\ {\ (EXPORTPTR)->ulongtabsectionptr[INDEX] = POS;\ } else\ {\ gt_assert((EXPORTPTR)->uinttabsectionptr != NULL);\ gt_assert(POS <= (unsigned long) UINT_MAX);\ (EXPORTPTR)->uinttabsectionptr[INDEX] = (uint32_t) POS;\ }\ if (POS == 0)\ {\ gt_suffixsortspace_updatelongest(SSSP,INDEX);\ } typedef struct GtSuffixsortspace GtSuffixsortspace; typedef struct { uint32_t *uinttabsectionptr; unsigned long *ulongtabsectionptr; } GtSuffixsortspace_exportptr; typedef void (*GtProcessunsortedsuffixrange)(void *, unsigned long, unsigned long, unsigned long); GtSuffixsortspace *gt_suffixsortspace_new(unsigned long numofentries, unsigned long maxvalue, bool useuint, GtLogger *logger); GtSuffixsortspace *gt_suffixsortspace_new_fromfile(int filedesc, const char *filename, unsigned long numofentries, unsigned long maxvalue, bool useuint); void gt_suffixsortspace_delete(GT_UNUSED GtSuffixsortspace *suffixsortspace, GT_UNUSED bool checklongestdefined); void gt_suffixsortspace_showrange(const GtSuffixsortspace *sssp, unsigned long subbucketleft, unsigned long width); void gt_suffixsortspace_checkorder(const GtSuffixsortspace *sssp, unsigned long subbucketleft, unsigned long width); unsigned long gt_suffixsortspace_getdirect(const GtSuffixsortspace *sssp, unsigned long idx); void gt_suffixsortspace_nooffsets(const GtSuffixsortspace *sssp); void gt_suffixsortspace_updatelongest(GtSuffixsortspace *sssp, unsigned long idx); void gt_suffixsortspace_setdirect(GtSuffixsortspace *sssp, unsigned long idx, unsigned long value); GtSuffixsortspace_exportptr *gt_suffixsortspace_exportptr( unsigned long subbucketleft, GtSuffixsortspace *sssp); void gt_suffixsortspace_export_done(GtSuffixsortspace *sssp); unsigned long gt_suffixsortspace_get(const GtSuffixsortspace *sssp, unsigned long subbucketleft, unsigned long idx); const unsigned long *gt_suffixsortspace_getptr_ulong( const GtSuffixsortspace *sssp, unsigned long subbucketleft); const uint32_t *gt_suffixsortspace_getptr_uint32(const GtSuffixsortspace *sssp, unsigned long subbucketleft); void gt_suffixsortspace_set(GtSuffixsortspace *sssp, unsigned long subbucketleft, unsigned long idx, unsigned long value); unsigned long gt_suffixsortspace_bucketleftidx_get( const GtSuffixsortspace *sssp); void gt_suffixsortspace_bucketleftidx_set(GtSuffixsortspace *sssp, unsigned long value); void gt_suffixsortspace_sortspace_delete(GtSuffixsortspace *sssp); void gt_suffixsortspace_partoffset_set(GtSuffixsortspace *sssp, unsigned long partoffset); unsigned long *gt_suffixsortspace_ulong_get(const GtSuffixsortspace *sssp); unsigned long gt_suffixsortspace_longest(const GtSuffixsortspace *sssp); uint64_t gt_suffixsortspace_requiredspace(unsigned long numofentries, unsigned long maxvalue, bool useuint); int gt_suffixsortspace_to_file (FILE *outfpsuftab, const GtSuffixsortspace *sssp, unsigned long numberofsuffixes, GtError *err); #endif genometools-1.5.1/src/match/sfx-suftaborder.c000066400000000000000000000164331211610345200212200ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/unused_api.h" #include "core/chardef.h" #include "core/minmax.h" #include "core/encseq.h" #include "sfx-suftaborder.h" #include "sfx-suffixgetset.h" static void showcomparisonfailure(const char *filename, int line, const char *where, const GtEncseq *encseq, GtReadmode readmode, const GtSuffixsortspace *suffixsortspace, unsigned long subbucketleft, unsigned long depth, unsigned long idx1, unsigned long idx2, int cmp, unsigned long maxlcp) { unsigned long pos1, pos2; pos1 = gt_suffixsortspace_get(suffixsortspace,subbucketleft,idx1); pos2 = gt_suffixsortspace_get(suffixsortspace,subbucketleft,idx2); fprintf(stderr,"ERROR: file \"%s\", line %d: ",filename,line); fprintf(stderr,"%s(%lu vs %lu" " %lu=\"", where, idx1, idx2, pos1); gt_encseq_showatstartposwithdepth(stderr,encseq,readmode,pos1,depth); fprintf(stderr,"\",\""); gt_encseq_showatstartposwithdepth(stderr,encseq,readmode,pos2,depth); fprintf(stderr,"\"=%lu)=%d with maxlcp %lu,depth=%lu\n",pos2,cmp, maxlcp,depth); } void gt_checkifprefixesareidentical(const char *filename, int line, const GtEncseq *encseq, GtReadmode readmode, const GtSuffixsortspace *suffixsortspace, unsigned long subbucketleft, unsigned long width, unsigned long depth) { unsigned long idx, maxlcp, pos1, pos2; int cmp; GtEncseqReader *esr1, *esr2; esr1 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); esr2 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); gt_assert(depth > 0); for (idx = 0; idx < width-1; idx++) { pos1 = gt_suffixsortspace_get(suffixsortspace,subbucketleft,idx); pos2 = gt_suffixsortspace_get(suffixsortspace,subbucketleft,idx+1); cmp = gt_encseq_check_comparetwosuffixes(encseq, readmode, &maxlcp, false, /* specialsareequal */ true,/* specialsareequalatdepth0 */ depth,pos1, pos2, esr1, esr2); gt_assert(maxlcp <= depth); if (cmp != 0 || maxlcp < depth) { showcomparisonfailure(filename, line, "checkifprefixesareidentical", encseq, readmode, suffixsortspace, subbucketleft, depth, idx,idx+1,cmp,maxlcp); exit(GT_EXIT_PROGRAMMING_ERROR); } } gt_encseq_reader_delete(esr1); gt_encseq_reader_delete(esr2); } void gt_showentiresuftab(const GtEncseq *encseq, GtReadmode readmode, const GtSuffixsortspace *suffixsortspace, unsigned long subbucketleft, unsigned long depth) { unsigned long idx, pos, totallength = gt_encseq_total_length(encseq); for (idx = 0; idx <= totallength; idx++) { pos = gt_suffixsortspace_get(suffixsortspace,subbucketleft,idx); printf("suftab[%lu]=%lu ",idx,pos); gt_encseq_showatstartposwithdepth(stdout,encseq,readmode,pos,depth); printf("\n"); } } void gt_checksortedsuffixes(const char *filename, int line, const GtEncseq *encseq, GtReadmode readmode, const GtSuffixsortspace *suffixsortspace, unsigned long subbucketleft, unsigned long numberofsuffixes, bool specialsareequal, bool specialsareequalatdepth0, unsigned long depth) { unsigned long idx, pos1, pos2, maxlcp, totallength = gt_encseq_total_length(encseq); GtEncseqReader *esr1, *esr2; int cmp; gt_assert(!specialsareequal || specialsareequalatdepth0); esr1 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); esr2 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); gt_assert(numberofsuffixes > 0); pos1 = gt_suffixsortspace_get(suffixsortspace,subbucketleft,0); gt_assert(pos1 < totallength); for (idx = 1UL; idx < numberofsuffixes; idx++) { pos2 = gt_suffixsortspace_get(suffixsortspace,subbucketleft,idx); if (pos2 < totallength) { cmp = gt_encseq_check_comparetwosuffixes(encseq, readmode, &maxlcp, specialsareequal, specialsareequalatdepth0, depth, pos1, pos2, esr1, esr2); if (cmp > 0) { showcomparisonfailure(filename, line, "checksortedsuffixes", encseq, readmode, suffixsortspace, subbucketleft, depth, idx-1, idx, cmp, maxlcp); exit(GT_EXIT_PROGRAMMING_ERROR); } gt_assert(depth == 0 || maxlcp <= depth); } pos1 = pos2; } gt_encseq_reader_delete(esr1); gt_encseq_reader_delete(esr2); } genometools-1.5.1/src/match/sfx-suftaborder.h000066400000000000000000000037701211610345200212250ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SFX_SUFTABORDER_H #define SFX_SUFTABORDER_H #include "core/error_api.h" #include "core/encseq.h" #include "core/readmode.h" #include "sfx-suffixgetset.h" void gt_checksortedsuffixes(const char *filename, int line, const GtEncseq *encseq, GtReadmode readmode, const GtSuffixsortspace *suffixsortspace, unsigned long subbucketleft, unsigned long numberofsuffixes, bool specialsareequal, bool specialsareequalatdepth0, unsigned long depth); void gt_checkifprefixesareidentical(const char *filename, int line, const GtEncseq *encseq, GtReadmode readmode, const GtSuffixsortspace *suffixsortspace, unsigned long subbucketleft, unsigned long width, unsigned long depth); #endif genometools-1.5.1/src/match/shu-dfs.c000066400000000000000000000375561211610345200174640ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/array2dim_api.h" #include "core/chardef.h" #include "core/divmodmul.h" #include "core/format64.h" #include "core/log_api.h" #include "core/logger.h" #include "core/safearith.h" #include "core/stack-inlined.h" #include "core/unused_api.h" #include "match/eis-voiditf.h" #include "match/shu_unitfile.h" #include "match/shu-dfs.h" static inline void add_filenum_count(unsigned long lower, unsigned long upper, ShuNode *parent, BwtSeqpositionextractor *pos_extractor, unsigned long total_length, const GtShuUnitFileInfo *unit_info, const GtEncseq *encseq) { long unsigned row; for (row = lower; row < upper; row++) { unsigned long filenum, position; position = gt_BwtSeqpositionextractor_extract(pos_extractor, row); if (total_length <= position) { filenum = unit_info->num_of_files - 1; } else { gt_assert((position + 1) <= total_length); position = total_length - (position + 1); filenum = gt_encseq_filenum(encseq, position); } /*mapping to genome_num*/ if (unit_info->map_files != NULL) { parent->countTermSubtree[0][unit_info->map_files[filenum]]++; } else { parent->countTermSubtree[0][filenum]++; } } } static inline unsigned long **get_special_pos(const FMindex *index, BwtSeqpositionextractor *pos_extractor, unsigned long num_of_specials) { unsigned long row_idx, special_idx = 0, **special_char_rows_and_pos, first_special_row; GtUchar cc; first_special_row = gt_pck_get_nonspecial_count(index); gt_array2dim_calloc(special_char_rows_and_pos, 2UL, num_of_specials); for (row_idx = 0; row_idx < first_special_row; row_idx ++) { cc = gt_bwtseqgetsymbol(row_idx, index); if (ISSPECIAL(cc)) { special_char_rows_and_pos[0][special_idx] = row_idx; special_char_rows_and_pos[1][special_idx] = gt_BwtSeqpositionextractor_extract(pos_extractor, row_idx); special_idx++; } } gt_assert(special_idx == num_of_specials); return special_char_rows_and_pos; } static inline unsigned long get_start_idx_binary_search(ShuNode *parent, unsigned long **special_pos, unsigned long max_idx) { unsigned long start_idx = 0; if (parent->lower <= special_pos[0][0]) { start_idx = 0; } else { if (special_pos[0][max_idx - 1] < parent->lower) { start_idx = max_idx; } else { unsigned long left, mid, right, len; left = 0; right = max_idx - 1; while (left<=right) { len = (unsigned long) (right - left); mid = left + GT_DIV2(len); if (special_pos[0][mid] < parent->lower) { if (parent->lower <= special_pos[0][mid+1]) { start_idx = mid + 1; break; } left = mid + 1; } else { if (special_pos[0][mid - 1] < parent->lower) { start_idx = mid; break; } right = mid - 1; } } } } return start_idx; } static int visit_shu_children(const FMindex *index, ShuNode *parent, GtStackShuNode *stack, const GtEncseq *encseq, Mbtab *tmpmbtab, BwtSeqpositionextractor *pos_extractor, unsigned long *rangeOccs, unsigned long **special_pos, GT_UNUSED unsigned long numofchars, const GtShuUnitFileInfo *unit_info, unsigned long total_length, unsigned long max_idx, GT_UNUSED GtLogger *logger, GT_UNUSED GtError *err) { unsigned long rangesize, idx, num_of_rows; unsigned int offset; gt_assert(parent->lower < parent->upper); num_of_rows = parent->upper - parent->lower; rangesize = gt_bwtrangesplitallwithoutspecial(tmpmbtab, rangeOccs, index, parent->lower, parent->upper); gt_assert(rangesize <= numofchars); offset = 1U; for (idx = 0; idx < rangesize; idx++) { gt_assert (tmpmbtab[idx].lowerbound <= tmpmbtab[idx].upperbound); gt_assert ((tmpmbtab[idx].upperbound - tmpmbtab[idx].lowerbound) <= num_of_rows); num_of_rows -= (tmpmbtab[idx].upperbound - tmpmbtab[idx].lowerbound); if (tmpmbtab[idx].lowerbound != tmpmbtab[idx].upperbound) { if (tmpmbtab[idx].lowerbound + 1 == tmpmbtab[idx].upperbound) { /* we found a leaf on parent */ add_filenum_count(tmpmbtab[idx].lowerbound, tmpmbtab[idx].upperbound, parent, pos_extractor, total_length, unit_info, encseq); } else { if (tmpmbtab[idx].upperbound - tmpmbtab[idx].lowerbound == parent->upper - parent->lower) { /* tmpmbtab[idx] is part of a branch and no actual node */ parent->lower = tmpmbtab[idx].lowerbound; parent->upper = tmpmbtab[idx].upperbound; parent->depth++; return 0; } else { /* tmpmbtab[idx] is a branch of parent node */ ShuNode *child = NULL; GT_STACK_NEXT_FREE(stack,child); if (child->countTermSubtree == NULL) { gt_array2dim_calloc(child->countTermSubtree, numofchars+1UL, unit_info->num_of_genomes); } else { unsigned long y_idx, file_idx; for (y_idx = 0; y_idx < numofchars+1UL; y_idx++) { for (file_idx = 0; file_idx < unit_info->num_of_genomes; file_idx++) { child->countTermSubtree[y_idx][file_idx] = 0; } } } child->process = false; child->lower = tmpmbtab[idx].lowerbound; child->upper = tmpmbtab[idx].upperbound; child->parentOffset = offset; child->depth = parent->depth + 1; offset++; } } } } if (parent->depth > 0 && num_of_rows > 0) { unsigned long start_idx; /* unsigned long max_idx - already determined*/ gt_assert(num_of_rows <= max_idx + 1); gt_assert(parent->lower <= special_pos[0][max_idx]); gt_assert(special_pos[0][0] <= parent->upper); start_idx = get_start_idx_binary_search(parent, special_pos, max_idx); for (idx = start_idx; special_pos[0][idx] < parent->upper && idx <= max_idx; idx++) { unsigned long filenum, position = special_pos[1][idx]; gt_assert(1UL <= num_of_rows); num_of_rows--; if (total_length <= position) { filenum = unit_info->num_of_files - 1; } else { gt_assert((position + 1) <= total_length); position = total_length - (position + 1); filenum = gt_encseq_filenum(encseq, position); } /*mapping to genome_num*/ if (unit_info->map_files != NULL) { parent->countTermSubtree[0][unit_info->map_files[filenum]]++; } else { parent->countTermSubtree[0][filenum]++; } } gt_assert(num_of_rows==0); } parent->process = true; return 0; } static int process_shu_node(ShuNode *node, GtStackShuNode *stack, uint64_t **shulen, unsigned long num_of_genomes, unsigned long numofchars, GT_UNUSED GtLogger *logger, GT_UNUSED GtError *err) { int had_err = 0; uint64_t old; unsigned long idx_i, idx_j, termChild_x_i, idx_char; unsigned child_c; ShuNode *parent = NULL; gt_assert(node->process); if (node->parentOffset > 0) { parent = stack->space + stack->nextfree - node->parentOffset; } for (idx_i = 0; idx_i < num_of_genomes; idx_i++) { if (!had_err && node->countTermSubtree[0][idx_i] > 0) { /* scan term */ termChild_x_i = node->countTermSubtree[0][idx_i]; for (idx_char = 1UL; idx_char <= numofchars; idx_char++) { gt_assert(node->countTermSubtree[idx_char][idx_i] <= termChild_x_i); termChild_x_i -= node->countTermSubtree[idx_char][idx_i]; } if (termChild_x_i > 0) { for (idx_j = 0; idx_j < num_of_genomes; idx_j++) { if (node->countTermSubtree[0][idx_j] > 0 && idx_j != idx_i) { old = shulen[idx_i][idx_j]; shulen[idx_i][idx_j] += ((node->depth + 1) * termChild_x_i); if (shulen[idx_i][idx_j] < old) { had_err = -1; gt_error_set(err, "overflow in addition of shuSums! " Formatuint64_t "+ %lu =" Formatuint64_t "\n", PRINTuint64_tcast(old), (node->depth + 1) * termChild_x_i, PRINTuint64_tcast(shulen[idx_i][idx_j])); } } } } /* scan branch */ for (child_c = 1U; (unsigned long) child_c <= numofchars; child_c++) { if (!had_err && node->countTermSubtree[child_c][idx_i] > 0) { for (idx_j = 0; idx_j < num_of_genomes; idx_j++) { /* idx_j elem seqIds[x] \ seqIds[child_c] */ if (node->countTermSubtree[0][idx_j] > 0 && node->countTermSubtree[child_c][idx_j] == 0) { old = shulen[idx_i][idx_j]; shulen[idx_i][idx_j] += ((node->depth + 1) * node->countTermSubtree[child_c][idx_i]); if (shulen[idx_i][idx_j] < old) { had_err = -1; gt_error_set(err, "overflow in addition of shuSums! " Formatuint64_t "+ %lu =" Formatuint64_t "\n", PRINTuint64_tcast(old), (node->depth + 1) * termChild_x_i, PRINTuint64_tcast(shulen[idx_i][idx_j])); } } } } } if (node->parentOffset > 0) { gt_assert(parent && parent->countTermSubtree); parent->countTermSubtree[0][idx_i] += node->countTermSubtree[0][idx_i]; parent->countTermSubtree[node->parentOffset][idx_i] = node->countTermSubtree[0][idx_i]; } } } return had_err; } static int initialise_node(void *node) { int had_err = 0; ShuNode *tobeinitialised; tobeinitialised = (ShuNode *) node; tobeinitialised->countTermSubtree = NULL; return had_err; } int gt_pck_calculate_shulen(const FMindex *index, const GtShuUnitFileInfo *unit_info, uint64_t **shulen, unsigned long numofchars, unsigned long total_length, GtTimer *timer, GtLogger *logger, GtError *err) { int had_err = 0; GtStackShuNode stack; ShuNode *root; Mbtab *tmpmbtab; const unsigned long resize = 64UL; unsigned long *rangeOccs, **special_char_rows_and_pos, depth_idx, processed_nodes, max_idx = gt_pck_special_occ_in_nonspecial_intervals(index) - 1; BwtSeqpositionextractor *pos_extractor; const GtEncseq *encseq = unit_info->encseq; gt_assert(max_idx < total_length); rangeOccs = gt_calloc((size_t) GT_MULT2(numofchars), sizeof (*rangeOccs)); tmpmbtab = gt_calloc((size_t) (numofchars + 3), sizeof (*tmpmbtab )); GT_STACK_INIT_WITH_INITFUNC(&stack, resize, initialise_node); pos_extractor = gt_newBwtSeqpositionextractor(index, total_length + 1); if (timer != NULL) { gt_timer_show_progress(timer, "obtain special pos", stdout); } special_char_rows_and_pos = get_special_pos(index, pos_extractor, max_idx + 1); GT_STACK_NEXT_FREE(&stack,root); gt_array2dim_calloc(root->countTermSubtree, numofchars+1UL, unit_info->num_of_genomes); root->process = false; root->parentOffset = 0; root->depth = 0; root->lower = 0; root->upper = total_length + 1; if (timer != NULL) { gt_timer_show_progress(timer, "traverse virtual tree", stdout); } processed_nodes = 0; while (!had_err && !GT_STACK_ISEMPTY(&stack)) { ShuNode *current; gt_assert(stack.nextfree > 0); current = stack.space + stack.nextfree -1; if (current->process) { GT_STACK_DECREMENTTOP(&stack); had_err = process_shu_node(current, &stack, shulen, unit_info->num_of_genomes, numofchars, logger, err); processed_nodes++; } else { had_err = visit_shu_children(index, current, &stack, encseq, tmpmbtab, pos_extractor, rangeOccs, special_char_rows_and_pos, numofchars, unit_info, total_length, max_idx, logger, err); } } gt_logger_log(logger, "max stack depth = %lu", GT_STACK_MAXSIZE(&stack)); gt_log_log("processed nodes= %lu", processed_nodes); for (depth_idx = 0; depth_idx < GT_STACK_MAXSIZE(&stack); depth_idx++) { gt_array2dim_delete(stack.space[depth_idx].countTermSubtree); } GT_STACK_DELETE(&stack); gt_free(rangeOccs); gt_free(tmpmbtab); gt_freeBwtSeqpositionextractor(pos_extractor); gt_array2dim_delete(special_char_rows_and_pos); return had_err; } genometools-1.5.1/src/match/shu-dfs.h000066400000000000000000000032041211610345200174500ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SHU_DFS_H #define SHU_DFS_H #include #include "core/stack-inlined.h" #include "match/eis-voiditf.h" #include "match/shu_unitfile.h" typedef struct ShuNode { bool process; unsigned parentOffset; unsigned long **countTermSubtree; unsigned long depth, lower, upper; } ShuNode; GT_STACK_DECLARESTRUCT(ShuNode, 256UL); int gt_pck_calculate_shulen(const FMindex *index, const GtShuUnitFileInfo *unit_info, uint64_t **shulen, unsigned long numofchars, unsigned long total_length, GtTimer *timer, GT_UNUSED GtLogger *logger, GT_UNUSED GtError *err); #endif genometools-1.5.1/src/match/shu-divergence.c000066400000000000000000000130221211610345200210010ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/array2dim_api.h" #include "core/assert_api.h" #include "core/log_api.h" #include "core/mathsupport.h" #include "match/shu-divergence.h" static double pmax(double M, /* M value should be explored by simulation ??? */ unsigned long x, double p, unsigned long subjectLength, int *thresholdReached, double *ln_n_fac, double *s1, unsigned long n_s) { unsigned long k; double s = 0.0, ln_x_choose_k; double ln, ln1, m1, m, delta; if (x > n_s) { /* change this to standard GT-behaviour XXX*/ printf("Error: x = %lu." " The maximum number of elements in the array" " s1 should be increased!\n", x); } gt_assert(x <= n_s); if (s1[x] != 0.0) return s1[x]; for (k = 0; k <= x; k++) { double m_a, m_b, m_c, m_d, m_e; if (x == k) ln_x_choose_k = 0.0; else ln_x_choose_k = ln_n_fac[x] - ln_n_fac[k] - ln_n_fac[x-k]; m_a = pow (2.0, (double) x); m_b = pow (p, (double) k); m_c = pow (0.5 - p, (double) x - k); m_d = pow (p, (double) k); m_e = pow (0.5 - p, (double) x -k); m = (m_a * m_b * m_c * pow (1.0 - m_d * m_e, (double) subjectLength)); /* this is ok even with double, because of next if!*/ if (m == 0.0) delta = 0.0; else if (M <= m) { ln = log(m); if (ln == -HUGE_VAL) delta = 0.0; else delta = exp (ln + ln_x_choose_k); } else { double delta_a, delta_b; m1 = 1 + m; /* for small values of m - to avoid overflow (-INF) */ ln1 = log(m1); delta_a = exp (ln1 + ln_x_choose_k); delta_b = exp (ln_x_choose_k); delta = delta_a - delta_b; } s += delta; if (s >= 1.0) { s = 1.0; *thresholdReached = 1; break; } } /* end for */ s1[x] = s; return s; } static double expShulen(double T, /* absolute error */ double M, /* min logarithm */ double d, double p, unsigned long subjectLength, double *ln_n_fac, double *s1, unsigned long n_s) { unsigned long i; int thresholdReached = 0; double prob_i, probOld, delta, factor; double e = 0.0; /* expectation */ double t = 1.0 - d; double p_t = t; probOld = 0.0; /*since for i = 0, the whole expression is 0*/ for (i = 1LU; i < subjectLength; i++) { factor = 1.0 - p_t; if (!thresholdReached) { prob_i = factor * pmax(M, i, p, subjectLength, &thresholdReached, ln_n_fac, s1, n_s); } else prob_i = factor; /* prob_i = factor * s, where s = 1 */ delta = (prob_i - probOld) * i; /* delta should always be positive */ gt_assert(gt_double_equals_double(delta, 0.0) || gt_double_larger_double(delta, 0.0)); e += delta; /* expectation of avg shulen length(Q, S) */ /* check error */ if (1.0 <= e && delta / e <= T) break; p_t *= t; probOld = prob_i; } return e; } /* calculate divergence */ double gt_divergence(double E, /* relative error for divergence calculation */ double T, /* absolute error for exp shulen*/ double M, /* minimum for logarithm */ double threshold, /* abs error for divergence */ double shulen, unsigned long subjectLength, double gc, double *ln_n_fac, unsigned long n_s) { double p, q, du, dl, dm, d, exp_shulen; double *s1; s1 = gt_calloc((size_t) n_s + 1, sizeof (double)); p = gc / 2; q = (1.0 - gc) / 2.0; du = 0.0; dl = 1.0 - (2 * p * p + 2 * q * q); /* dl < 0.75 */ while (gt_double_smaller_double(threshold, (dl - du) / 2.0)) { dm = (du + dl) / 2.0; exp_shulen = expShulen(T, M, dm, p, subjectLength, ln_n_fac, s1, n_s); if (gt_double_smaller_double(shulen, exp_shulen)) du = dm; else dl = dm; /* test the relative error between du and dl; if it is smaller than some * threshold, then break !! */ if (fabs (dl - du) / dl <= E) break; } d = (du + dl) / 2.0; gt_free(s1); return d; } double *gt_get_ln_n_fac(unsigned long n) { unsigned long i; double *ln_n_fac; ln_n_fac = gt_calloc((size_t) n + 1, sizeof (double)); ln_n_fac[0] = log(1.0); for (i = 1UL; i <= n; i++) { ln_n_fac[i] = log((double) i) + ln_n_fac[i-1]; } return ln_n_fac; } double gt_calculateKr(double d) { double kr = -0.75 * log (1 - 4.0 / 3.0 * d); return kr; } genometools-1.5.1/src/match/shu-divergence.h000066400000000000000000000031471211610345200210150ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SHU_DIVERGENCE_H #define SHU_DIVERGENCE_H /* calculates the divergence from the shulength */ double gt_divergence (double E, /* relative error for shulen length */ double T, /* absolute error */ double M, double threshold, /* break criteria for pmax calculation */ double shulen, /*avg shulength*/ unsigned long subjectLength, /*subjectlength*/ double gc, /*combined gc-content*/ double *ln_n_fac, unsigned long n_s /*length of s-array*/); /* Jukes-Cantor transform of divergence: Kr */ double gt_calculateKr(double d); /* Calculates ln(n!) for numbers 0 to given n */ double *gt_get_ln_n_fac(unsigned long n); #endif genometools-1.5.1/src/match/shu-encseq-gc.c000066400000000000000000000120121211610345200205310ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/alphabet_api.h" #include "core/divmodmul.h" #include "core/encseq_api.h" #include "core/ensure.h" #include "core/ma_api.h" #include "core/mathsupport.h" #include "core/safearith.h" #include "core/unused_api.h" #include "match/shu-encseq-gc.h" static inline void calculate_rel_gc(const GtEncseq *encseq, double *gc_content, unsigned long seq_idx, unsigned long gc_count) { unsigned long length; gt_assert(seq_idx < gt_encseq_num_of_sequences(encseq)); length = gt_encseq_seqlength(encseq, seq_idx); gt_assert(gc_count <= length); gc_content[seq_idx] = (double) gc_count / (double) length; gt_assert(gt_double_compare(gc_content[seq_idx], 0.0) != -1); gt_assert(gt_double_compare(gc_content[seq_idx], 1.0) != 1); } unsigned long *gt_encseq_gc_count(const GtEncseq *encseq) { GtEncseqReader *reader; GtAlphabet *alphabet; unsigned long *gc_count_per_seq, char_idx, totallength, max_unit, seq_idx = 0, nextsep = 0; bool is_mirrored_encseq; GtUchar cCgG_encoded[4], current_c; alphabet = gt_encseq_alphabet(encseq); gt_assert(gt_alphabet_is_dna(alphabet)); gt_alphabet_encode_seq(alphabet, cCgG_encoded, "cCgG", 4UL); totallength = gt_encseq_total_length(encseq); reader = gt_encseq_create_reader_with_readmode(encseq, GT_READMODE_FORWARD, 0); is_mirrored_encseq = gt_encseq_is_mirrored(encseq); if (is_mirrored_encseq) { max_unit = GT_DIV2(gt_encseq_num_of_sequences(encseq)); gc_count_per_seq = gt_calloc((size_t) GT_MULT2(max_unit), sizeof (*gc_count_per_seq)); } else { max_unit = gt_encseq_num_of_sequences(encseq); gc_count_per_seq = gt_calloc((size_t) max_unit, sizeof (*gc_count_per_seq)); } nextsep = gt_encseq_seqstartpos(encseq, seq_idx) + gt_encseq_seqlength(encseq, seq_idx); for (char_idx = 0; char_idx < totallength; char_idx++) { if (nextsep == char_idx) { gt_assert(gc_count_per_seq[seq_idx] <= gt_encseq_seqlength(encseq, seq_idx)); seq_idx++; nextsep = gt_encseq_seqstartpos(encseq, seq_idx) + gt_encseq_seqlength(encseq, seq_idx); gt_encseq_reader_reinit_with_readmode(reader, encseq, GT_READMODE_FORWARD, char_idx + 1UL); char_idx++; } current_c = gt_encseq_reader_next_encoded_char(reader); if (current_c == cCgG_encoded[0] || current_c == cCgG_encoded[1] || current_c == cCgG_encoded[2] || current_c == cCgG_encoded[3]) { gc_count_per_seq[seq_idx]++; gt_assert(gc_count_per_seq[seq_idx] != 0); } } gt_encseq_reader_delete(reader); return gc_count_per_seq; } double *gt_encseq_get_rel_gc(const GtEncseq *encseq, GT_UNUSED GtError *err) { double *gc_content; unsigned long *gc_count_per_seq, max_unit, seq_idx = 0; bool is_mirrored_encseq; is_mirrored_encseq = gt_encseq_is_mirrored(encseq); if (is_mirrored_encseq) { max_unit = GT_DIV2(gt_encseq_num_of_sequences(encseq)); gc_content = gt_calloc((size_t) GT_MULT2(max_unit), sizeof (double)); } else { max_unit = gt_encseq_num_of_sequences(encseq); gc_content = gt_calloc((size_t) max_unit, sizeof (double)); } gc_count_per_seq = gt_encseq_gc_count(encseq); for (seq_idx = 0; seq_idx < max_unit; seq_idx++) { calculate_rel_gc(encseq, gc_content, seq_idx, gc_count_per_seq[seq_idx]); } if (is_mirrored_encseq) { unsigned long double_max_unit = GT_MULT2(max_unit); for (seq_idx = 0; seq_idx < max_unit; seq_idx++) { gc_content[double_max_unit - seq_idx - 1] = gc_content[seq_idx]; } } return gc_content; } int gt_encseq_gc_unit_test(GT_UNUSED GtError *err) { int had_err = 0; /* XXX write new tests for the new functions */ return had_err; } genometools-1.5.1/src/match/shu-encseq-gc.h000066400000000000000000000024611211610345200205450ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SHU_ENCSEQ_GC_H #define SHU_ENCSEQ_GC_H #include #include "core/encseq_api.h" #include "core/unused_api.h" /* returns the count of g's and c's per sequence. */ unsigned long *gt_encseq_gc_count(const GtEncseq *encseq); /* returns the per sequence relative gc-content of encseq (#gc / totallength) */ double *gt_encseq_get_rel_gc(const GtEncseq *encseq, GtError *err); int gt_encseq_gc_unit_test(GtError *err); #endif genometools-1.5.1/src/match/shu-genomediff.c000066400000000000000000000424731211610345200210050ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/array2dim_api.h" #include "core/encseq_api.h" #include "core/format64.h" #include "core/log_api.h" #include "core/logger.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/safearith.h" #include "match/eis-voiditf.h" #include "match/esa-seqread.h" #include "match/esa-shulen.h" #include "match/idx-limdfs.h" #include "match/sarr-def.h" #include "match/shu-dfs.h" #include "match/shu-divergence.h" #include "match/shu-encseq-gc.h" #include "match/shu-genomediff.h" #include "match/shu_unitfile.h" /* static inline int genomediff_parse_unit(GtShuUnitFileInfo *unit_info, const GtStr *filename, GtTimer *timer, GtLogger *logger, GtError *err) { int had_err = 0; if (timer != NULL) gt_timer_show_progress(timer, "parse unitfile", stdout); had_err = gt_shu_unit_file_info_read(filename, unit_info, logger, err); if (!had_err) gt_logger_log(logger, "successfully loaded unitfile"); return had_err; } */ static unsigned long* genomediff_calculate_genome_lengths(GtShuUnitFileInfo *unit_info) { bool mirrored = gt_encseq_is_mirrored(unit_info->encseq); unsigned long eff_file_length, filestart, sep_per_file = 0, seqs_passed = 0, seqs_upto_fileend, i_idx; unsigned long *genome_lengths = gt_calloc((size_t) unit_info->num_of_genomes, sizeof (*genome_lengths)); for (i_idx = 0UL; i_idx < unit_info->num_of_files; i_idx++) { eff_file_length = gt_safe_cast2ulong_64( gt_encseq_effective_filelength(unit_info->encseq, i_idx)); filestart = gt_encseq_filestartpos(unit_info->encseq, i_idx); if (i_idx == unit_info->num_of_files - 1) { if (mirrored) { sep_per_file = GT_DIV2(gt_encseq_num_of_sequences(unit_info->encseq)) - seqs_passed - 1; } else { sep_per_file = gt_encseq_num_of_sequences(unit_info->encseq) - seqs_passed - 1; } } else { seqs_upto_fileend = gt_encseq_seqnum(unit_info->encseq, filestart + eff_file_length - 1) + 1; sep_per_file = seqs_upto_fileend - seqs_passed - 1; seqs_passed = seqs_upto_fileend; } if (unit_info->map_files != NULL) { genome_lengths[unit_info->map_files[i_idx]] += eff_file_length - sep_per_file; } else { genome_lengths[i_idx] = eff_file_length - sep_per_file; } } if (mirrored) { for (i_idx = 0UL; i_idx < unit_info->num_of_genomes; i_idx++) { genome_lengths[i_idx] += genome_lengths[i_idx]; } } if (gt_log_enabled()) { for (i_idx = 0UL; i_idx < unit_info->num_of_genomes; i_idx++) { gt_log_log("file/genome %lu has length %lu", i_idx, genome_lengths[i_idx]); } } return genome_lengths; } static double *genomediff_calculate_gc(unsigned long *genome_lengths, GtShuUnitFileInfo *unit_info, GT_UNUSED GtError *err) { unsigned long file_idx = 0UL, genome_idx, idx, *seq_gc_content = NULL, num_of_seq, *genome_gc_content; double *gc_content; gt_assert(genome_lengths != NULL); gt_assert(unit_info != NULL); gt_assert(genome_lengths != NULL); gt_assert(unit_info != NULL); /*count gc, do not calculate ratio*/ seq_gc_content = gt_encseq_gc_count(unit_info->encseq); if (seq_gc_content == NULL) return NULL; gc_content = gt_calloc((size_t)unit_info->num_of_genomes, sizeof (*gc_content)); genome_gc_content = gt_calloc((size_t)unit_info->num_of_genomes, sizeof (*genome_gc_content)); num_of_seq = gt_encseq_num_of_sequences(unit_info->encseq); for (idx = 0; idx < num_of_seq; idx++) { file_idx = gt_encseq_filenum(unit_info->encseq, gt_encseq_seqstartpos(unit_info->encseq, idx)); if (unit_info->map_files != NULL) genome_idx = unit_info->map_files[file_idx]; else genome_idx = file_idx; gt_safe_add(genome_gc_content[genome_idx], genome_gc_content[genome_idx], seq_gc_content[idx]); } for (idx = 0; idx < unit_info->num_of_genomes; idx++) { gt_log_log("file/genome %lu has gc %lu", idx, genome_gc_content[idx]); } for (idx = 0; idx < unit_info->num_of_genomes; idx++) { gt_assert(genome_gc_content[idx] <= genome_lengths[idx]); gc_content[idx] = (double) genome_gc_content[idx] / (double) genome_lengths[idx]; } gt_free(seq_gc_content); gt_free(genome_gc_content); return gc_content; } static void genomediff_calculate_div(GtShuUnitFileInfo *unit_info, double **div, double *gc_content, unsigned long *genome_lengths, const GtGenomediffArguments *arguments, GtTimer *timer) { double query_gc, query_shulen, *ln_n_fac; unsigned long subject_len, i_idx, j_idx, subject, query; if (timer != NULL) gt_timer_show_progress(timer, "pre calculate ln_n_fac", stdout); ln_n_fac = gt_get_ln_n_fac(arguments->max_ln_n_fac); if (timer != NULL) gt_timer_show_progress(timer, "calculate divergence", stdout); for (i_idx = 0; i_idx < unit_info->num_of_genomes; i_idx++) { for (j_idx = i_idx+1; j_idx < unit_info->num_of_genomes; j_idx++) { /* query is the one with smaller avg shulen */ if (gt_double_smaller_double(div[i_idx][j_idx], div[j_idx][i_idx])) { subject = j_idx; query = i_idx; } else if (gt_double_smaller_double(div[j_idx][i_idx], div[i_idx][j_idx])) { subject = i_idx; query = j_idx; } /* if avg shulen is equal, choose query with gc content farther from .5 */ else { if (gt_double_smaller_double(fabs(gc_content[i_idx]-0.5), fabs(gc_content[j_idx]-0.5))) { subject = i_idx; query = j_idx; } else { subject = j_idx; query = i_idx; } } query_gc = gc_content[query]; query_shulen = div[query][subject]; subject_len = genome_lengths[subject]; div[i_idx][j_idx] = gt_divergence(arguments->divergence_rel_err, arguments->divergence_abs_err, arguments->divergence_m, arguments->divergence_threshold, query_shulen, subject_len, query_gc, ln_n_fac, arguments->max_ln_n_fac); div[j_idx][i_idx] = div[i_idx][j_idx]; } } gt_free(ln_n_fac); } uint64_t **gt_genomediff_shulen_sum(const GtGenomediffArguments *arguments, GtShuUnitFileInfo *unit_info, GtLogger *logger, GtTimer *timer, GtError *err) { int had_err = 0; unsigned long i_idx, j_idx; uint64_t **shulensums = NULL; const GtEncseq *encseq = NULL; Genericindex *generic_index_subject = NULL; Sequentialsuffixarrayreader *ssar = NULL; gt_error_check(err); gt_assert(unit_info != NULL); /* prepare index */ if (arguments->with_esa) { if (timer != NULL) gt_timer_show_progress(timer, "load sequential sa reader", stdout); ssar = gt_newSequentialsuffixarrayreaderfromfile( gt_str_array_get(arguments->filenames, 0), SARR_LCPTAB | SARR_SUFTAB | SARR_ESQTAB | SARR_SSPTAB, arguments->scan ? SEQ_scan : SEQ_mappedboth, logger, err); if (ssar == NULL) had_err = -1; if (!had_err) { encseq = gt_encseqSequentialsuffixarrayreader(ssar); } } else { gt_assert(arguments->with_pck); if (timer != NULL) gt_timer_show_progress(timer, "map generic index", stdout); generic_index_subject = genericindex_new(gt_str_array_get(arguments->filenames, 0), false, true, false, true, arguments->user_max_depth, logger, err); if (generic_index_subject == NULL) { had_err = -1; } /*get num of genomes from unitfile or encseq and allocate shulen-matrix*/ if (!had_err) { encseq = genericindex_getencseq(generic_index_subject); } } /*calculate sums of shulens*/ if (!had_err) { gt_array2dim_calloc(shulensums, unit_info->num_of_genomes, unit_info->num_of_genomes); if (arguments->with_esa) { if (timer != NULL) gt_timer_show_progress(timer, "dfs esa index", stdout); had_err = gt_multiesa2shulengthdist(ssar, encseq, shulensums, unit_info, err); } else { const FMindex *subjectindex = NULL; unsigned long num_of_chars, total_length; const GtAlphabet *alphabet = gt_encseq_alphabet(unit_info->encseq); num_of_chars = (unsigned long) gt_alphabet_num_of_chars(alphabet); total_length = genericindex_get_totallength(generic_index_subject); subjectindex = genericindex_get_packedindex(generic_index_subject); gt_assert(subjectindex != NULL); had_err = gt_pck_calculate_shulen(subjectindex, unit_info, shulensums, num_of_chars, total_length, timer, logger, err); } } if (arguments->with_esa) { if (ssar != NULL) gt_freeSequentialsuffixarrayreader(&ssar); } else genericindex_delete(generic_index_subject); if (had_err) { gt_log_log("foo"); if (shulensums != NULL) gt_array2dim_delete(shulensums); shulensums = NULL; } else { gt_assert(shulensums != NULL); gt_log_log("sum of shulens"); if (gt_log_enabled()) { for (i_idx = 0; i_idx < unit_info->num_of_genomes; i_idx++) { fprintf(stderr, "debug: %s\t", gt_str_array_get(unit_info->genome_names, i_idx)); for (j_idx = 0; j_idx < unit_info->num_of_genomes; j_idx++) { if (i_idx == j_idx) fprintf(stderr, "0"); else fprintf(stderr, Formatuint64_t"\t", PRINTuint64_tcast(shulensums[i_idx][j_idx])); } fprintf(stderr, "\n"); } } } return shulensums; } static void genomediff_print_table(double **tab, GtShuUnitFileInfo *unit_info) { unsigned long i_idx, j_idx; for (i_idx = 0; i_idx < unit_info->num_of_genomes; i_idx++) { printf("# %s\t", gt_str_array_get(unit_info->genome_names, i_idx)); for (j_idx = 0; j_idx < unit_info->num_of_genomes; j_idx++) { if (i_idx == j_idx) printf("%.6f\t",0.0); else printf("%f\t", tab[i_idx][j_idx]); } printf("\n"); } } int gt_genomediff_calculate_div_from_avg(double **avgshu, const GtGenomediffArguments *arguments, GtShuUnitFileInfo *unit_info, GtLogger *logger, GtTimer *timer, GtError *err) { int had_err = 0; const GtAlphabet *alphabet; double *gc_content = NULL; unsigned long i_idx, j_idx; unsigned long *genome_lengths = NULL; genome_lengths = genomediff_calculate_genome_lengths(unit_info); /*get alphabet and check if alphabet is dna, which is presumed for gc-calculation*/ alphabet = gt_encseq_alphabet(unit_info->encseq); if (!gt_alphabet_is_dna(alphabet)) { gt_error_set(err,"error: sequences need to be dna to calculate gc!"); had_err = -1; } if (!had_err && timer != NULL) gt_timer_show_progress(timer, "calculate gc", stdout); if (!had_err) { gc_content = genomediff_calculate_gc(genome_lengths, unit_info, err); if (gc_content == NULL) had_err = -1; } /* calculation of divergence */ if (!had_err) { genomediff_calculate_div(unit_info, avgshu, gc_content, genome_lengths, arguments, timer); if (gt_logger_enabled(logger)) { gt_logger_log(logger, "table of divergences"); genomediff_print_table(avgshu, unit_info); } } if (!had_err && timer != NULL) gt_timer_show_progress(timer, "calculate kr", stdout); if (!had_err) { gt_logger_log(logger, "# Table of Kr"); printf("%lu\n", unit_info->num_of_genomes); for (i_idx = 0; i_idx < unit_info->num_of_genomes; i_idx++) { printf("%s\t", gt_str_array_get(unit_info->genome_names, i_idx)); for (j_idx = 0; j_idx < unit_info->num_of_genomes; j_idx++) { if ( i_idx == j_idx ) printf("%.6f\t",0.0); else printf("%f\t", gt_calculateKr(avgshu[i_idx][j_idx])); } printf("\n"); } } gt_free(gc_content); return had_err; } int gt_genomediff_kr_calc(uint64_t **shulensums, const GtGenomediffArguments *arguments, GtShuUnitFileInfo *unit_info, bool pcktable, GtLogger *logger, GtTimer *timer, GtError *err) { int had_err = 0; double **div = NULL, *gc_content = NULL; unsigned long *genome_lengths = NULL, i_idx, j_idx; const GtAlphabet *alphabet; gt_assert(shulensums != NULL); gt_assert(unit_info != NULL); genome_lengths = genomediff_calculate_genome_lengths(unit_info); if (timer != NULL) gt_timer_show_progress(timer, "calculate avg shulen", stdout); gt_array2dim_calloc(div, unit_info->num_of_genomes, unit_info->num_of_genomes); for (i_idx = 0; i_idx < unit_info->num_of_genomes; i_idx++) { unsigned long length_i; length_i = genome_lengths[i_idx]; for (j_idx = 0; j_idx < unit_info->num_of_genomes; j_idx++) { div[i_idx][j_idx] = pcktable ? ((double) shulensums[i_idx][j_idx]) / length_i : ((double) shulensums[j_idx][i_idx]) / length_i; } } if (gt_logger_enabled(logger)) { gt_logger_log(logger, "table of avg shulens"); genomediff_print_table(div, unit_info); } /*get alphabet and check if alphabet is dna, which is presumed for gc-calculation*/ alphabet = gt_encseq_alphabet(unit_info->encseq); if (!gt_alphabet_is_dna(alphabet)) { gt_error_set(err,"error: sequences need to be dna to calculate gc!"); had_err = -1; } if (!had_err && timer != NULL) gt_timer_show_progress(timer, "calculate gc", stdout); if (!had_err) { gc_content = genomediff_calculate_gc(genome_lengths, unit_info, err); if (gc_content == NULL) had_err = -1; } /* calculation of divergence */ if (!had_err) { genomediff_calculate_div(unit_info, div, gc_content, genome_lengths, arguments, timer); if (gt_logger_enabled(logger)) { gt_logger_log(logger, "table of divergences"); genomediff_print_table(div, unit_info); } } if (!had_err && timer != NULL) gt_timer_show_progress(timer, "calculate kr", stdout); if (!had_err) { gt_logger_log(logger, "# Table of Kr"); printf("%lu\n", unit_info->num_of_genomes); for (i_idx = 0; i_idx < unit_info->num_of_genomes; i_idx++) { printf("%s\t", gt_str_array_get(unit_info->genome_names, i_idx)); for (j_idx = 0; j_idx < unit_info->num_of_genomes; j_idx++) { if ( i_idx == j_idx ) printf("%.6f\t",0.0); else printf("%f\t", gt_calculateKr(div[i_idx][j_idx])); } printf("\n"); } } gt_free(genome_lengths); gt_free(gc_content); if (div != NULL) gt_array2dim_delete(div); return had_err; } genometools-1.5.1/src/match/shu-genomediff.h000066400000000000000000000037221211610345200210040ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SHU_GENOMEDIFF_H #define SHU_GENOMEDIFF_H #include "match/genomediff_opt.h" #include "match/idx-limdfs.h" uint64_t **gt_genomediff_shulen_sum(const GtGenomediffArguments *arguments, GtShuUnitFileInfo *unit_info, GtLogger *logger, GtTimer *timer, GtError *err); int gt_genomediff_calculate_div_from_avg(double **avgshu, const GtGenomediffArguments *arguments, GtShuUnitFileInfo *unit_info, GtLogger *logger, GtTimer *timer, GtError *err); int gt_genomediff_kr_calc(uint64_t **shulensums, const GtGenomediffArguments *arguments, GtShuUnitFileInfo *unit_info, bool pcktable, GtLogger *logger, GtTimer *timer, GtError *err); #endif genometools-1.5.1/src/match/shu_unitfile.c000066400000000000000000000167331211610345200206030ustar00rootroot00000000000000/* Copyright (c) 2011 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "lauxlib.h" #include "lua.h" #include "lualib.h" #include "core/assert_api.h" #include "core/basename_api.h" #include "core/encseq_api.h" #include "core/fileutils_api.h" #include "core/log_api.h" #include "core/ma_api.h" #include "core/str_api.h" #include "core/str_array.h" #include "core/str_array_api.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "match/lua_tools.h" #include "match/shu_unitfile.h" static int shu_unitfile_load(lua_State *L, const char *unitfile, GtError *err) { int had_err = 0; if (luaL_loadfile(L, unitfile) || lua_pcall(L, 0, 0, 0)) { had_err = -1; gt_error_set(err, "Lua could not load file '%s'!", lua_tostring(L, -1)); } if (!had_err) { lua_getglobal(L, "units"); if (!lua_istable(L, -1)) { had_err = -1; gt_error_set(err, "Somethings wrong with the unitfile."); } } return had_err; } static int shu_unitfile_compare_inner_key_filenames(lua_State *L, GtShuUnitFileInfo *unit_info, bool *file_set, GtStr *mapping_filename, unsigned long genome_idx, GtError *err) { bool found = false; int had_err = 0; unsigned long file_idx; GtStr *encseq_filename; gt_str_reset(mapping_filename); gt_str_append_cstr(mapping_filename, lua_tostring(L, -1)); for (file_idx = 0; file_idx < unit_info->num_of_files && !had_err && !found; file_idx++) { encseq_filename = gt_str_array_get_str(unit_info->file_names, file_idx); if (gt_str_cmp(encseq_filename, mapping_filename) == 0) { if (file_set[file_idx] != false) { gt_error_set(err, "file %s double entry", gt_str_get(mapping_filename)); had_err = -1; } else { file_set[file_idx] = true; unit_info->map_files[file_idx] = genome_idx; found = true; } } } if (!found && !had_err) { gt_error_set(err, "file %s not found in index, part of genome %s", gt_str_get(mapping_filename), gt_str_get(gt_str_array_get_str(unit_info->genome_names, genome_idx))); had_err = -1; } return had_err; } static int shu_unitfile_traverse_inner_keys(lua_State *L, GtShuUnitFileInfo *unit_info, bool *file_set, GtStr *mapping_filename, unsigned long genome_idx, unsigned long *files_added, GtError *err) { int had_err = 0; gt_str_array_add_cstr(unit_info->genome_names, lua_tostring(L, -2)); lua_pushnil(L); /* the first inner key */ while (lua_next(L, -2) != 0 && !had_err) { had_err = shu_unitfile_compare_inner_key_filenames(L, unit_info, file_set, mapping_filename, genome_idx, err); if (!had_err) (*files_added)++; lua_pop(L, 1); } return had_err; } static int traverse_units(lua_State *L, GtShuUnitFileInfo *unit_info, GtError *err) { int had_err = 0; unsigned long genome_idx = 0, files_added = 0; bool *file_set; GtStr *mapping_filename = gt_str_new(); gt_assert(unit_info->file_names); file_set = gt_calloc((size_t) unit_info->num_of_files, sizeof (file_set)); unit_info->map_files = gt_calloc((size_t) unit_info->num_of_files, sizeof (unit_info->map_files)); gt_str_array_reset(unit_info->genome_names); lua_pushnil(L); /*the first outer key*/ while (lua_next(L, -2) != 0 && !had_err) { had_err = shu_unitfile_traverse_inner_keys(L, unit_info, file_set, mapping_filename, genome_idx, &files_added, err); lua_pop(L, 1); genome_idx++; } lua_pop(L, 1); gt_free(file_set); if (!had_err) { unit_info->num_of_genomes = genome_idx; gt_assert(unit_info->num_of_genomes == gt_str_array_size(unit_info->genome_names)); } if (!had_err && files_added != unit_info->num_of_files) { had_err = -1; gt_error_set(err, "number of files in index (%lu) and unitfile (%lu)! " "differ!", unit_info->num_of_files, files_added); } if (!had_err) { unsigned long file_idx; for (file_idx = 0; file_idx < unit_info->num_of_files; file_idx++) { gt_log_log("file: %lu belongs to genome: %s", file_idx, gt_str_array_get(unit_info->genome_names, unit_info->map_files[file_idx])); } } gt_str_delete(mapping_filename); return had_err; } int gt_shu_unit_file_info_read(const GtStr *unitfile, GtShuUnitFileInfo *unit_info, GT_UNUSED GtLogger *logger, GtError *err) { int had_err = 0; /* open Lua */ lua_State *L = luaL_newstate(); /* library needed? lua_openlibs(L); */ had_err = shu_unitfile_load(L, gt_str_get(unitfile), err); if (!had_err) had_err = traverse_units(L, unit_info, err); lua_close(L); return had_err; } void gt_shu_unit_info_delete(GtShuUnitFileInfo *unit_info) { if (unit_info != NULL) { gt_free(unit_info->map_files); gt_str_array_delete(unit_info->genome_names); gt_free(unit_info); } } static void gt_shu_unit_info_files_as_units(GtShuUnitFileInfo *unit_info) { unsigned long i_idx; unit_info->num_of_genomes = unit_info->num_of_files; unit_info->genome_names = gt_str_array_new(); for (i_idx = 0; i_idx < unit_info->num_of_files; i_idx++) { gt_str_array_add(unit_info->genome_names, gt_str_array_get_str(unit_info->file_names, i_idx)); } } GtShuUnitFileInfo *gt_shu_unit_info_new(const GtEncseq *encseq) { GtShuUnitFileInfo *unit_info = gt_malloc(sizeof (*unit_info)); unit_info->map_files = NULL; unit_info->genome_names = NULL; unit_info->num_of_genomes = 0; unit_info->num_of_files = gt_encseq_num_of_files(encseq); unit_info->file_names = gt_encseq_filenames(encseq); unit_info->encseq = encseq; gt_shu_unit_info_files_as_units(unit_info); return unit_info; } genometools-1.5.1/src/match/shu_unitfile.h000066400000000000000000000040501211610345200205750ustar00rootroot00000000000000/* Copyright (c) 2011 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SHU_UNITFILE_H #define SHU_UNITFILE_H #include "core/encseq_api.h" #include "core/str_array_api.h" #include "core/unused_api.h" typedef struct GtShuUnitFileInfo { unsigned long num_of_genomes, num_of_files; GtStrArray *genome_names; const GtStrArray *file_names; /*array holding the mapping of file to genome*/ unsigned long *map_files; const GtEncseq *encseq; } GtShuUnitFileInfo; /* Reads the lua and collects the names of the genomes, and mapping of file number within the associated to the genomes. Sets and returns -1 on error. */ int gt_shu_unit_file_info_read(const GtStr *unitfile, GtShuUnitFileInfo *unit_info, GT_UNUSED GtLogger *logger, GtError *err); /* Initialize and malloc , will use filenames as units per default, call gt_shu_unit_file_info_read() to combine files to units. */ GtShuUnitFileInfo* gt_shu_unit_info_new(const GtEncseq *encseq); /* frees memory of unit_info struct */ void gt_shu_unit_info_delete(GtShuUnitFileInfo *unit_info); #endif genometools-1.5.1/src/match/spaced-seeds.c000066400000000000000000000142341211610345200204370ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/assert_api.h" #include "core/types_api.h" #include "core/unused_api.h" #include "core/chardef.h" #include "core/ma_api.h" #include "core/intbits.h" #include "absdfstrans-imp.h" typedef struct { bool pathmatches; } SpseLimdfsstate; typedef struct { GtBitsequence seedbitvector; unsigned long seedweight; const GtUchar *pattern; } SpseLimdfsconstinfo; #ifdef SKDEBUG static void spse_showLimdfsstate(const DECLAREPTRDFSSTATE(aliascol), unsigned long currentdepth, GT_UNUSED const Limdfsconstinfo *mti) { const SpseLimdfsstate *col = (const SpseLimdfsstate *) aliascol; printf("at depth %lu (pathmatches=%s)\n",currentdepth, col->pathmatches ? "true" : "false"); } #endif static Limdfsconstinfo *spse_allocatedfsconstinfo( GT_UNUSED unsigned int alphasize) { SpseLimdfsconstinfo *mti = gt_malloc(sizeof (SpseLimdfsconstinfo)); return (Limdfsconstinfo*) mti; } static void spse_initdfsconstinfo(Limdfsconstinfo *mt, unsigned int alphasize, ...) /* Variable argument list is as follows: const GtUchar *pattern, Bitsequence seedbitvector, unsigned long seedweight */ { va_list ap; SpseLimdfsconstinfo *mti = (SpseLimdfsconstinfo*) mt; va_start(ap,alphasize); mti->pattern = va_arg(ap, const GtUchar *); mti->seedbitvector = va_arg(ap, GtBitsequence); mti->seedweight = va_arg(ap, unsigned long); va_end(ap); } static void spse_freedfsconstinfo(Limdfsconstinfo **mtiptr) { gt_free(*mtiptr); *mtiptr = NULL; } static void spse_initLimdfsstate(DECLAREPTRDFSSTATE(aliascolumn), GT_UNUSED Limdfsconstinfo *mti) { SpseLimdfsstate *column = (SpseLimdfsstate *) aliascolumn; column->pathmatches = true; } static void spse_fullmatchLimdfsstate(Limdfsresult *limdfsresult, DECLAREPTRDFSSTATE(aliascolumn), GT_UNUSED unsigned long leftbound, GT_UNUSED unsigned long rightbound, GT_UNUSED unsigned long width, unsigned long currentdepth, Limdfsconstinfo *mt) { SpseLimdfsstate *limdfsstate = (SpseLimdfsstate *) aliascolumn; SpseLimdfsconstinfo *mti = (SpseLimdfsconstinfo*) mt; if (limdfsstate->pathmatches) { if (currentdepth == mti->seedweight) { limdfsresult->status = Limdfssuccess; limdfsresult->pprefixlen = mti->seedweight; limdfsresult->distance = 0; return; } if (currentdepth < mti->seedweight) { limdfsresult->status = Limdfscontinue; return; } } limdfsresult->status = Limdfsstop; } static bool setpathmatch(GtBitsequence seedbitvector, const GtUchar *pattern, unsigned long currentdepth, GtUchar currentchar) { return (!GT_ISBITSET(seedbitvector,currentdepth-1) || currentchar == pattern[currentdepth-1]) ? true : false; } static void spse_nextLimdfsstate(const Limdfsconstinfo *mt, DECLAREPTRDFSSTATE(aliasoutcol), unsigned long currentdepth, GtUchar currentchar, GT_UNUSED const DECLAREPTRDFSSTATE(aliasincol)) { SpseLimdfsstate *outcol = (SpseLimdfsstate *) aliasoutcol; #ifndef NDEBUG const SpseLimdfsstate *incol = (const SpseLimdfsstate *) aliasincol; #endif SpseLimdfsconstinfo *mti = (SpseLimdfsconstinfo*) mt; gt_assert(ISNOTSPECIAL(currentchar)); gt_assert(currentdepth > 0); gt_assert(incol->pathmatches); outcol->pathmatches = setpathmatch(mti->seedbitvector, mti->pattern, currentdepth, currentchar); } static void spse_inplacenextLimdfsstate(const Limdfsconstinfo *mt, DECLAREPTRDFSSTATE(aliascol), unsigned long currentdepth, GtUchar currentchar) { SpseLimdfsstate *col = (SpseLimdfsstate *) aliascol; const SpseLimdfsconstinfo *mti = (const SpseLimdfsconstinfo*) mt; gt_assert(ISNOTSPECIAL(currentchar)); gt_assert(currentdepth > 0); col->pathmatches = setpathmatch(mti->seedbitvector, mti->pattern, currentdepth, currentchar); } const AbstractDfstransformer *gt_spse_AbstractDfstransformer(void) { static const AbstractDfstransformer spse_adfst = { sizeof (SpseLimdfsstate), spse_allocatedfsconstinfo, spse_initdfsconstinfo, NULL, /* no extractdfsconstinfo */ spse_freedfsconstinfo, spse_initLimdfsstate, NULL, NULL, NULL, spse_fullmatchLimdfsstate, spse_nextLimdfsstate, spse_inplacenextLimdfsstate, #ifdef SKDEBUG spse_showLimdfsstate, #endif }; return &spse_adfst; } genometools-1.5.1/src/match/spaced-seeds.h000066400000000000000000000017551211610345200204500ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SPACED_SEEDS_H #define SPACED_SEEDS_H #include "absdfstrans-def.h" const AbstractDfstransformer *gt_spse_AbstractDfstransformer(void); #endif genometools-1.5.1/src/match/specialrank.c000066400000000000000000000125021211610345200203670ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/chardef.h" #include "core/divmodmul.h" #include "core/encseq.h" #include "core/ma_api.h" #include "core/unused_api.h" typedef struct { unsigned long lowerbound, upperbound, rank; } Rankedbounds; Rankedbounds *gt_fillrankbounds(const GtEncseq *encseq, GtReadmode readmode) { if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; unsigned long currentrank = 0, realspecialranges; Rankedbounds *rankedbounds, *rbptr; realspecialranges = gt_encseq_realspecialranges(encseq); rankedbounds = gt_malloc(sizeof (Rankedbounds) * realspecialranges); sri = gt_specialrangeiterator_new(encseq, GT_ISDIRREVERSE(readmode) ? false : true); for (rbptr = rankedbounds; gt_specialrangeiterator_next(sri,&range); rbptr++) { rbptr->lowerbound = range.start; rbptr->upperbound = range.end; rbptr->rank = currentrank; currentrank += rbptr->upperbound - rbptr->lowerbound; } gt_assert(rbptr == rankedbounds + realspecialranges); gt_specialrangeiterator_delete(sri); return rankedbounds; } return NULL; } unsigned long gt_frompos2rank(const Rankedbounds *leftptr, const Rankedbounds *rightptr, unsigned long specialpos) { const Rankedbounds *midptr; while (leftptr <= rightptr) { midptr = leftptr + GT_DIV2((unsigned long) (rightptr-leftptr)); if (specialpos < midptr->lowerbound) { rightptr = midptr-1; } else { if (specialpos >= midptr->upperbound) { leftptr = midptr + 1; } else { return midptr->rank + specialpos - midptr->lowerbound; } } } fprintf(stderr,"frompos2rank: cannot find pos %lu" " in ranges",specialpos); exit(GT_EXIT_PROGRAMMING_ERROR); /*@ignore@*/ return 0; /*@end@*/ } unsigned long gt_fromrank2pos(const Rankedbounds *leftptr, const Rankedbounds *rightptr, unsigned long rank) { const Rankedbounds *midptr; while (leftptr <= rightptr) { midptr = leftptr + GT_DIV2((unsigned long) (rightptr-leftptr)); if (rank < midptr->rank) { rightptr = midptr-1; } else { if (rank >= midptr->rank + (midptr->upperbound - midptr->lowerbound)) { leftptr = midptr + 1; } else { return midptr->lowerbound + (rank - midptr->rank); } } } fprintf(stderr,"fromrank2rank: cannot find rank %lu" " in ranges",rank); exit(GT_EXIT_PROGRAMMING_ERROR); /*@ignore@*/ return 0; /*@end@*/ } typedef struct { unsigned long specialrank, key; } Specialrank; static int compareSpecialrank(const void *a,const void *b) { const Specialrank *aptr = (const Specialrank *) a, *bptr = (const Specialrank *) b; if (aptr->key < bptr->key) { return -1; } if (aptr->key > bptr->key) { return 1; } gt_assert(false); return 0; } Specialrank *gt_fillspecialranklist(const GtEncseq *encseq, GtReadmode readmode, const unsigned long *inversesuftab) { if (gt_encseq_has_specialranges(encseq)) { GtSpecialrangeiterator *sri; GtRange range; unsigned long realspecialranges, specialrank; GT_UNUSED unsigned long totallength; Specialrank *specialranklist, *rbptr; totallength = gt_encseq_total_length(encseq); realspecialranges = gt_encseq_realspecialranges(encseq); specialranklist = gt_malloc(sizeof (Specialrank) * realspecialranges); sri = gt_specialrangeiterator_new(encseq, GT_ISDIRREVERSE(readmode) ? false : true); rbptr = specialranklist; specialrank = 0; while (gt_specialrangeiterator_next(sri,&range)) { gt_assert(rbptr < specialranklist + realspecialranges); gt_assert(range.end<=totallength); specialrank += range.end - range.start; rbptr->specialrank = specialrank - 1; rbptr->key = inversesuftab[range.end]; rbptr++; } gt_assert(rbptr == specialranklist + realspecialranges); gt_specialrangeiterator_delete(sri); qsort(specialranklist,(size_t) realspecialranges, sizeof (Specialrank),compareSpecialrank); return specialranklist; } return NULL; } genometools-1.5.1/src/match/splititv.h000066400000000000000000000021021211610345200177510ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SPLITITV_H #define SPLITITV_H #include "core/types_api.h" #include "core/arraydef.h" typedef struct { unsigned long lbound, rbound; GtUchar inchar; } Boundswithchar; GT_DECLAREARRAYSTRUCT(Boundswithchar); #endif genometools-1.5.1/src/match/spmsuftab.c000066400000000000000000000064351211610345200201070ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/mathsupport.h" #include "core/minmax.h" #include "spmsuftab.h" GtSpmsuftab *gt_spmsuftab_new(unsigned long numofentries, unsigned long maxvalue, unsigned int bitsforseqnumrelpos, GtLogger *logger) { GtSpmsuftab *spmsuftab; unsigned int bitsforpositions; unsigned long required; spmsuftab = gt_malloc(sizeof (*spmsuftab)); required = (unsigned long) gt_spmsuftab_requiredspace(numofentries, maxvalue, bitsforseqnumrelpos); bitsforpositions = gt_determinebitspervalue(maxvalue); if (bitsforpositions < bitsforseqnumrelpos) { gt_logger_log(logger,"use %lu bitpackarray-entries for all positions " "(%u bits each,%lu bytes total)", numofentries,bitsforpositions,required); spmsuftab->bitpackarray = gt_compact_ulong_store_new(numofentries,bitsforpositions); spmsuftab->usebitsforpositions = true; spmsuftab->maxvalue = maxvalue; } else { gt_logger_log(logger,"use %lu bitpackarray-entries for all " "seqnum/relpos-pairs (%u bits each,%lu bytes total)", numofentries,bitsforseqnumrelpos,required); spmsuftab->bitpackarray = gt_compact_ulong_store_new(numofentries,bitsforseqnumrelpos); spmsuftab->usebitsforpositions = false; spmsuftab->maxvalue = (1UL << bitsforseqnumrelpos) - 1; } spmsuftab->partoffset = 0; spmsuftab->numofentries = numofentries; return spmsuftab; } void gt_spmsuftab_delete(GtSpmsuftab *spmsuftab) { if (spmsuftab != NULL) { gt_compact_ulong_store_delete(spmsuftab->bitpackarray); gt_free(spmsuftab); } } bool gt_spmsuftab_usebitsforpositions(const GtSpmsuftab *spmsuftab) { return spmsuftab->usebitsforpositions; } void gt_spmsuftab_partoffset(GtSpmsuftab *spmsuftab,unsigned long offset) { spmsuftab->partoffset = offset; } size_t gt_spmsuftab_requiredspace(unsigned long numofentries, unsigned long maxvalue, unsigned int bitsforseqnumrelpos) { unsigned int bitsforpositions = gt_determinebitspervalue(maxvalue); return sizeof (GtSpmsuftab) + gt_compact_ulong_store_size(numofentries, MIN(bitsforpositions,bitsforseqnumrelpos)); } genometools-1.5.1/src/match/spmsuftab.h000066400000000000000000000051121211610345200201030ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SPMSUFTAB_H #define SPMSUFTAB_H #include "core/unused_api.h" #include "core/logger_api.h" #include "core/compact_ulong_store.h" typedef struct { unsigned long partoffset, numofentries, maxvalue; bool usebitsforpositions; GtCompactUlongStore *bitpackarray; } GtSpmsuftab; GT_UNUSED static inline void gt_spmsuftab_set(GtSpmsuftab *spmsuftab, unsigned long idx, unsigned long value) { gt_assert(idx >= spmsuftab->partoffset); idx -= spmsuftab->partoffset; gt_assert(idx < spmsuftab->numofentries && value <= spmsuftab->maxvalue); gt_assert(spmsuftab->bitpackarray != NULL); gt_compact_ulong_store_update(spmsuftab->bitpackarray,idx,value); } GT_UNUSED static inline unsigned long gt_spmsuftab_get( const GtSpmsuftab *spmsuftab, unsigned long idx) { gt_assert(idx >= spmsuftab->partoffset); idx -= spmsuftab->partoffset; gt_assert(idx < spmsuftab->numofentries); return gt_compact_ulong_store_get(spmsuftab->bitpackarray,idx); } GtSpmsuftab *gt_spmsuftab_new(unsigned long numofentries, unsigned long maxvalue, unsigned int bitsforseqnumrelpos, GtLogger *logger); bool gt_spmsuftab_usebitsforpositions(const GtSpmsuftab *spmsuftab); void gt_spmsuftab_delete(GtSpmsuftab *spmsuftab); size_t gt_spmsuftab_requiredspace(unsigned long numofentries, unsigned long maxvalue, unsigned int bitsforseqnumrelpos); void gt_spmsuftab_partoffset(GtSpmsuftab *spmsuftab, unsigned long offset); #endif genometools-1.5.1/src/match/squarededist.c000066400000000000000000000040751211610345200205760ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/types_api.h" #include "core/ma_api.h" #include "squarededist.h" static unsigned long gt_squarededistunit2 (const GtUchar *u, unsigned long m, const GtUchar *v, unsigned long n) { unsigned long val, we, nw, *ecol, *ecolptr; const GtUchar *uptr, *vptr; ecol = gt_malloc(sizeof *ecol * (m+1)); for (*ecol = 0, ecolptr = ecol+1, uptr = u; uptr < u + m; ecolptr++, uptr++) { *ecolptr = *(ecolptr-1) + 1; } for (vptr = v; vptr < v + n; vptr++) { nw = *ecol; *ecol = nw + 1; for (ecolptr = ecol+1, uptr = u; uptr < u + m; ecolptr++, uptr++) { we = *ecolptr; *ecolptr = *(ecolptr-1) + 1; if (*uptr == *vptr) { val = nw; } else { val = nw + 1; } if (val < *ecolptr) { *ecolptr = val; } if ((val = we + 1) < *ecolptr) { *ecolptr = val; } nw = we; } } val = *(ecolptr-1); gt_free(ecol); return val; } unsigned long gt_squarededistunit (const GtUchar *u, unsigned long m, const GtUchar *v, unsigned long n) { if (m < n) { return gt_squarededistunit2(u,m,v,n); } return gt_squarededistunit2(v,n,u,m); } genometools-1.5.1/src/match/squarededist.h000066400000000000000000000020631211610345200205760ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SQUAREDEDIST_H #define SQUAREDEDIST_H #include "core/types_api.h" unsigned long gt_squarededistunit (const GtUchar *u, unsigned long m, const GtUchar *v, unsigned long n); #endif genometools-1.5.1/src/match/stamp.h000066400000000000000000000020041211610345200172200ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef STAMP_H #define STAMP_H #define STAMP\ printf("STAMP(%d,%s)\n",__LINE__,__FILE__);\ (void) fflush(stdout) #ifndef STAMP #define STAMP #endif #endif genometools-1.5.1/src/match/substriter.c000066400000000000000000000054051211610345200203050ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/str_array.h" #include "core/seq_iterator_api.h" #include "core/chardef.h" #include "core/codetype.h" #include "core/ma_api.h" #include "substriter.h" #include "qgram2code.h" #include "initbasepower.h" struct Substriter { const GtUchar *currentptr, *start; unsigned long remaining; GtCodetype currentcode; unsigned int qvalue, numofchars; GtCodetype **multimappower; }; Substriter *gt_substriter_new(const GtAlphabet *alphabet,unsigned int qvalue) { Substriter *substriter; substriter = gt_malloc(sizeof *substriter); substriter->qvalue = qvalue; substriter->numofchars = gt_alphabet_num_of_chars(alphabet); substriter->multimappower = gt_initmultimappower(substriter->numofchars, qvalue); return substriter; } void gt_substriter_init(Substriter *substriter,const GtUchar *start, unsigned long len) { substriter->start = substriter->currentptr = start; substriter->remaining = len; gt_assert(substriter->remaining > 0); } int gt_substriter_next(Substriter *substriter) { unsigned int firstspecial; while (true) { if (substriter->remaining >= (unsigned long) substriter->qvalue) { firstspecial = qgram2code(&substriter->currentcode, (const GtCodetype **) substriter->multimappower, substriter->qvalue, substriter->currentptr); if (firstspecial == substriter->qvalue) { substriter->remaining--; substriter->currentptr++; break; } substriter->remaining -= firstspecial + 1; substriter->currentptr += firstspecial + 1; } else { return 0; } } return 1; } void gt_substriter_delete(Substriter *substriter) { if (substriter != NULL) { gt_multimappower_delete(substriter->multimappower); gt_free(substriter); } } genometools-1.5.1/src/match/substriter.h000066400000000000000000000025211211610345200203060ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SUBSTRITER_H #define SUBSTRITER_H #include #include #include "core/alphabet.h" #include "core/str_array.h" #include "core/types_api.h" typedef struct Substriter Substriter; Substriter *gt_substriter_new(const GtAlphabet *alphabet,unsigned int qvalue); void gt_substriter_init(Substriter *substriter,const GtUchar *start, unsigned long len); int gt_substriter_next(Substriter *substriter); void gt_substriter_delete(Substriter *substriter); #endif genometools-1.5.1/src/match/tab-diffcover.h000066400000000000000000000323031211610345200206140ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TAB_DIFFCOVER_H #define TAB_DIFFCOVER_H static Diffvalue differencecovertab[] = { /* 1 */ UScast (0), /* 2 */ UScast (0), UScast (1), /* 4 */ UScast (0), UScast (1), UScast (2), /* 8 */ UScast (0), UScast (1), UScast (2), UScast (4), /* 16 */ UScast (0), UScast (1), UScast (2), UScast (5), UScast (8), /* 32 */ UScast (0), UScast (1), UScast (2), UScast (3), UScast (7), UScast (11), UScast (19), /* 64 */ UScast (0), UScast (1), UScast (2), UScast (5), UScast (14), UScast (16), UScast (34), UScast (42), UScast (59), /* 128 */ UScast (0), UScast (1), UScast (3), UScast (7), UScast (17), UScast (40), UScast (55), UScast (64), UScast (75), UScast (85), UScast (104), UScast (109), UScast (117), /* 256 */ UScast (0), UScast (1), UScast (3), UScast (7), UScast (12), UScast (20), UScast (30), UScast (44), UScast (65), UScast (80), UScast (89), UScast (96), UScast (114), UScast (122), UScast (128), UScast (150), UScast (196), UScast (197), UScast (201), UScast (219), /* 512 */ UScast (0), UScast (1), UScast (2), UScast (3), UScast (4), UScast (9), UScast (18), UScast (27), UScast (36), UScast (45), UScast (64), UScast (83), UScast (102), UScast (121), UScast (140), UScast (159), UScast (178), UScast (197), UScast (216), UScast (226), UScast (236), UScast (246), UScast (256), UScast (266), UScast (267), UScast (268), UScast (269), UScast (270), /* 1024 */ UScast (0), UScast (1), UScast (2), UScast (3), UScast (4), UScast (5), UScast (6), UScast (13), UScast (26), UScast (39), UScast (52), UScast (65), UScast (78), UScast (91), UScast (118), UScast (145), UScast (172), UScast (199), UScast (226), UScast (253), UScast (280), UScast (307), UScast (334), UScast (361), UScast (388), UScast (415), UScast (442), UScast (456), UScast (470), UScast (484), UScast (498), UScast (512), UScast (526), UScast (540), UScast (541), UScast (542), UScast (543), UScast (544), UScast (545), UScast (546), /* 2048 */ UScast (0), UScast (1), UScast (2), UScast (3), UScast (4), UScast (5), UScast (6), UScast (7), UScast (8), UScast (9), UScast (19), UScast (38), UScast (57), UScast (76), UScast (95), UScast (114), UScast (133), UScast (152), UScast (171), UScast (190), UScast (229), UScast (268), UScast (307), UScast (346), UScast (385), UScast (424), UScast (463), UScast (502), UScast (541), UScast (580), UScast (619), UScast (658), UScast (697), UScast (736), UScast (775), UScast (814), UScast (853), UScast (892), UScast (931), UScast (951), UScast (971), UScast (991), UScast (1011), UScast (1031), UScast (1051), UScast (1071), UScast (1091), UScast (1111), UScast (1131), UScast (1132), UScast (1133), UScast (1134), UScast (1135), UScast (1136), UScast (1137), UScast (1138), UScast (1139), UScast (1140), /* 4096 */ UScast (0), UScast (1), UScast (2), UScast (3), UScast (4), UScast (5), UScast (6), UScast (7), UScast (8), UScast (9), UScast (10), UScast (11), UScast (12), UScast (13), UScast (27), UScast (54), UScast (81), UScast (108), UScast (135), UScast (162), UScast (189), UScast (216), UScast (243), UScast (270), UScast (297), UScast (324), UScast (351), UScast (378), UScast (433), UScast (488), UScast (543), UScast (598), UScast (653), UScast (708), UScast (763), UScast (818), UScast (873), UScast (928), UScast (983), UScast (1038), UScast (1093), UScast (1148), UScast (1203), UScast (1258), UScast (1313), UScast (1368), UScast (1423), UScast (1478), UScast (1533), UScast (1588), UScast (1643), UScast (1698), UScast (1753), UScast (1808), UScast (1863), UScast (1891), UScast (1919), UScast (1947), UScast (1975), UScast (2003), UScast (2031), UScast (2059), UScast (2087), UScast (2115), UScast (2143), UScast (2171), UScast (2199), UScast (2227), UScast (2255), UScast (2256), UScast (2257), UScast (2258), UScast (2259), UScast (2260), UScast (2261), UScast (2262), UScast (2263), UScast (2264), UScast (2265), UScast (2266), UScast (2267), UScast (2268), /* 8192 */ UScast (0), UScast (1), UScast (2), UScast (3), UScast (4), UScast (5), UScast (6), UScast (7), UScast (8), UScast (9), UScast (10), UScast (11), UScast (12), UScast (13), UScast (14), UScast (15), UScast (16), UScast (17), UScast (18), UScast (37), UScast (74), UScast (111), UScast (148), UScast (185), UScast (222), UScast (259), UScast (296), UScast (333), UScast (370), UScast (407), UScast (444), UScast (481), UScast (518), UScast (555), UScast (592), UScast (629), UScast (666), UScast (703), UScast (778), UScast (853), UScast (928), UScast (1003), UScast (1078), UScast (1153), UScast (1228), UScast (1303), UScast (1378), UScast (1453), UScast (1528), UScast (1603), UScast (1678), UScast (1753), UScast (1828), UScast (1903), UScast (1978), UScast (2053), UScast (2128), UScast (2203), UScast (2278), UScast (2353), UScast (2428), UScast (2503), UScast (2578), UScast (2653), UScast (2728), UScast (2803), UScast (2878), UScast (2953), UScast (3028), UScast (3103), UScast (3178), UScast (3253), UScast (3328), UScast (3403), UScast (3478), UScast (3516), UScast (3554), UScast (3592), UScast (3630), UScast (3668), UScast (3706), UScast (3744), UScast (3782), UScast (3820), UScast (3858), UScast (3896), UScast (3934), UScast (3972), UScast (4010), UScast (4048), UScast (4086), UScast (4124), UScast (4162), UScast (4200), UScast (4201), UScast (4202), UScast (4203), UScast (4204), UScast (4205), UScast (4206), UScast (4207), UScast (4208), UScast (4209), UScast (4210), UScast (4211), UScast (4212), UScast (4213), UScast (4214), UScast (4215), UScast (4216), UScast (4217), UScast (4218), /* 16384 */ UScast (0), UScast (1), UScast (2), UScast (3), UScast (4), UScast (5), UScast (6), UScast (7), UScast (8), UScast (9), UScast (10), UScast (11), UScast (12), UScast (13), UScast (14), UScast (15), UScast (16), UScast (17), UScast (18), UScast (19), UScast (20), UScast (21), UScast (22), UScast (23), UScast (24), UScast (25), UScast (26), UScast (53), UScast (106), UScast (159), UScast (212), UScast (265), UScast (318), UScast (371), UScast (424), UScast (477), UScast (530), UScast (583), UScast (636), UScast (689), UScast (742), UScast (795), UScast (848), UScast (901), UScast (954), UScast (1007), UScast (1060), UScast (1113), UScast (1166), UScast (1219), UScast (1272), UScast (1325), UScast (1378), UScast (1431), UScast (1538), UScast (1645), UScast (1752), UScast (1859), UScast (1966), UScast (2073), UScast (2180), UScast (2287), UScast (2394), UScast (2501), UScast (2608), UScast (2715), UScast (2822), UScast (2929), UScast (3036), UScast (3143), UScast (3250), UScast (3357), UScast (3464), UScast (3571), UScast (3678), UScast (3785), UScast (3892), UScast (3999), UScast (4106), UScast (4213), UScast (4320), UScast (4427), UScast (4534), UScast (4641), UScast (4748), UScast (4855), UScast (4962), UScast (5069), UScast (5176), UScast (5283), UScast (5390), UScast (5497), UScast (5604), UScast (5711), UScast (5818), UScast (5925), UScast (6032), UScast (6139), UScast (6246), UScast (6353), UScast (6460), UScast (6567), UScast (6674), UScast (6781), UScast (6888), UScast (6995), UScast (7102), UScast (7156), UScast (7210), UScast (7264), UScast (7318), UScast (7372), UScast (7426), UScast (7480), UScast (7534), UScast (7588), UScast (7642), UScast (7696), UScast (7750), UScast (7804), UScast (7858), UScast (7912), UScast (7966), UScast (8020), UScast (8074), UScast (8128), UScast (8182), UScast (8236), UScast (8290), UScast (8344), UScast (8398), UScast (8452), UScast (8506), UScast (8560), UScast (8561), UScast (8562), UScast (8563), UScast (8564), UScast (8565), UScast (8566), UScast (8567), UScast (8568), UScast (8569), UScast (8570), UScast (8571), UScast (8572), UScast (8573), UScast (8574), UScast (8575), UScast (8576), UScast (8577), UScast (8578), UScast (8579), UScast (8580), UScast (8581), UScast (8582), UScast (8583), UScast (8584), UScast (8585), UScast (8586), /* 32768 */ UScast (0), UScast (1), UScast (2), UScast (3), UScast (4), UScast (5), UScast (6), UScast (7), UScast (8), UScast (9), UScast (10), UScast (11), UScast (12), UScast (13), UScast (14), UScast (15), UScast (16), UScast (17), UScast (18), UScast (19), UScast (20), UScast (21), UScast (22), UScast (23), UScast (24), UScast (25), UScast (26), UScast (27), UScast (28), UScast (29), UScast (30), UScast (31), UScast (32), UScast (33), UScast (34), UScast (35), UScast (36), UScast (37), UScast (75), UScast (150), UScast (225), UScast (300), UScast (375), UScast (450), UScast (525), UScast (600), UScast (675), UScast (750), UScast (825), UScast (900), UScast (975), UScast (1050), UScast (1125), UScast (1200), UScast (1275), UScast (1350), UScast (1425), UScast (1500), UScast (1575), UScast (1650), UScast (1725), UScast (1800), UScast (1875), UScast (1950), UScast (2025), UScast (2100), UScast (2175), UScast (2250), UScast (2325), UScast (2400), UScast (2475), UScast (2550), UScast (2625), UScast (2700), UScast (2775), UScast (2850), UScast (3001), UScast (3152), UScast (3303), UScast (3454), UScast (3605), UScast (3756), UScast (3907), UScast (4058), UScast (4209), UScast (4360), UScast (4511), UScast (4662), UScast (4813), UScast (4964), UScast (5115), UScast (5266), UScast (5417), UScast (5568), UScast (5719), UScast (5870), UScast (6021), UScast (6172), UScast (6323), UScast (6474), UScast (6625), UScast (6776), UScast (6927), UScast (7078), UScast (7229), UScast (7380), UScast (7531), UScast (7682), UScast (7833), UScast (7984), UScast (8135), UScast (8286), UScast (8437), UScast (8588), UScast (8739), UScast (8890), UScast (9041), UScast (9192), UScast (9343), UScast (9494), UScast (9645), UScast (9796), UScast (9947), UScast (10098), UScast (10249), UScast (10400), UScast (10551), UScast (10702), UScast (10853), UScast (11004), UScast (11155), UScast (11306), UScast (11457), UScast (11608), UScast (11759), UScast (11910), UScast (12061), UScast (12212), UScast (12363), UScast (12514), UScast (12665), UScast (12816), UScast (12967), UScast (13118), UScast (13269), UScast (13420), UScast (13571), UScast (13722), UScast (13873), UScast (14024), UScast (14175), UScast (14251), UScast (14327), UScast (14403), UScast (14479), UScast (14555), UScast (14631), UScast (14707), UScast (14783), UScast (14859), UScast (14935), UScast (15011), UScast (15087), UScast (15163), UScast (15239), UScast (15315), UScast (15391), UScast (15467), UScast (15543), UScast (15619), UScast (15695), UScast (15771), UScast (15847), UScast (15923), UScast (15999), UScast (16075), UScast (16151), UScast (16227), UScast (16303), UScast (16379), UScast (16455), UScast (16531), UScast (16607), UScast (16683), UScast (16759), UScast (16835), UScast (16911), UScast (16987), UScast (17063), UScast (17064), UScast (17065), UScast (17066), UScast (17067), UScast (17068), UScast (17069), UScast (17070), UScast (17071), UScast (17072), UScast (17073), UScast (17074), UScast (17075), UScast (17076), UScast (17077), UScast (17078), UScast (17079), UScast (17080), UScast (17081), UScast (17082), UScast (17083), UScast (17084), UScast (17085), UScast (17086), UScast (17087), UScast (17088), UScast (17089), UScast (17090), UScast (17091), UScast (17092), UScast (17093), UScast (17094), UScast (17095), UScast (17096), UScast (17097), UScast (17098), UScast (17099), UScast (17100) }; static Diffrank differencecoversizes[] = { UCcast (1), /* 2^0 */ UCcast (2), /* 2^1 */ UCcast (3), /* 2^2 */ UCcast (4), /* 2^3 */ UCcast (5), /* 2^4 */ UCcast (7), /* 2^5 */ UCcast (9), /* 2^6 */ UCcast (13), /* 2^7 */ UCcast (20), /* 2^8 */ UCcast (28), /* 2^9 */ UCcast (40), /* 2^10 */ UCcast (58), /* 2^11 */ UCcast (82), /* 2^12 */ UCcast (112), /* 2^13 */ UCcast (160), /* 2^14 */ UCcast (226) /* 2^15 */ }; #endif genometools-1.5.1/src/match/tagerator.c000066400000000000000000000635741211610345200201020ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/alphabet.h" #include "core/arraydef.h" #include "core/error.h" #include "core/fileutils_api.h" #include "core/format64.h" #include "core/intbits.h" #include "core/ma_api.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "core/str_array.h" #include "core/unused_api.h" #include "apmeoveridx.h" #include "dist-short.h" #include "echoseq.h" #include "esa-map.h" #include "idx-limdfs.h" #include "mssufpat.h" #include "myersapm.h" #include "revcompl.h" #include "sarr-def.h" #include "stamp.h" #include "tagerator.h" #define MAXTAGSIZE GT_INTWORDSIZE #define ISRCDIR(TWL) (((TWL)->tagptr == (TWL)->transformedtag)\ ? false\ : true) typedef struct { unsigned long dbstartpos, matchlength; bool rcmatch; } TgrSimplematch; typedef struct { const GtUchar *tagptr; GtUchar transformedtag[MAXTAGSIZE], rctransformedtag[MAXTAGSIZE]; unsigned long taglen; } TgrTagwithlength; typedef struct { const TageratorOptions *tageratoroptions; unsigned int alphasize; const GtUchar *tagptr; const GtAlphabet *alpha; unsigned long *eqsvector; const TgrTagwithlength *twlptr; const GtEncseq *encseq; } TgrShowmatchinfo; #define ADDTABULATOR\ if (firstitem)\ {\ firstitem = false;\ } else\ {\ (void) putchar('\t');\ } static void tgr_showmatch(void *processinfo,const GtIdxMatch *match) { TgrShowmatchinfo *showmatchinfo = (TgrShowmatchinfo *) processinfo; bool firstitem = true; gt_assert(showmatchinfo->tageratoroptions != NULL); if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_DBLENGTH) { printf("%lu",match->dblen); firstitem = false; } if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_DBSTARTPOS) { ADDTABULATOR; if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_DBABSPOS) { printf("%lu",match->dbstartpos); } else { unsigned long seqstartpos, seqnum = gt_encseq_seqnum(showmatchinfo->encseq, match->dbstartpos); seqstartpos = gt_encseq_seqstartpos(showmatchinfo->encseq, seqnum); gt_assert(seqstartpos <= match->dbstartpos); printf("%lu\t%lu",seqnum, match->dbstartpos - seqstartpos); } } if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_DBSEQUENCE) { ADDTABULATOR; gt_assert(match->dbsubstring != NULL); gt_alphabet_decode_seq_to_fp(showmatchinfo->alpha, stdout, match->dbsubstring, (unsigned long) match->dblen); } if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_STRAND) { ADDTABULATOR; printf("%c",ISRCDIR(showmatchinfo->twlptr) ? '-' : '+'); } if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_EDIST) { ADDTABULATOR; printf("%lu",match->distance); } if (showmatchinfo->tageratoroptions->maxintervalwidth > 0) { if (showmatchinfo->tageratoroptions->skpp) { if (showmatchinfo->tageratoroptions->outputmode & (TAGOUT_TAGSTARTPOS | TAGOUT_TAGLENGTH | TAGOUT_TAGSUFFIXSEQ)) { unsigned long suffixlength = gt_reversesuffixmatch(showmatchinfo->eqsvector, showmatchinfo->alphasize, match->dbsubstring, (unsigned long) match->dblen, showmatchinfo->tagptr, match->querylen, (unsigned long) showmatchinfo->tageratoroptions-> userdefinedmaxdistance); gt_assert(match->querylen >= suffixlength); if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_TAGSTARTPOS) { ADDTABULATOR; printf("%lu",match->querylen - suffixlength); } if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_TAGLENGTH) { ADDTABULATOR; printf("%lu",suffixlength); } if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_TAGSUFFIXSEQ) { ADDTABULATOR; gt_alphabet_decode_seq_to_fp(NULL, stdout,showmatchinfo->tagptr + (match->querylen - suffixlength), suffixlength); } } } else { if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_TAGSTARTPOS) { ADDTABULATOR; printf("0"); } if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_TAGLENGTH) { ADDTABULATOR; printf("%lu",match->querylen); } if (showmatchinfo->tageratoroptions->outputmode & TAGOUT_TAGSUFFIXSEQ) { ADDTABULATOR; gt_alphabet_decode_seq_to_fp(NULL, stdout, showmatchinfo->tagptr, match->querylen); } } } if (!firstitem) { printf("\n"); } } typedef struct { TgrSimplematch *spaceTgrSimplematch; unsigned long nextfreeTgrSimplematch, allocatedTgrSimplematch; const TgrTagwithlength *twlptr; } ArrayTgrSimplematch; static void tgr_storematch(void *processinfo,const GtIdxMatch *match) { ArrayTgrSimplematch *storetab = (ArrayTgrSimplematch *) processinfo; TgrSimplematch *simplematch; GT_GETNEXTFREEINARRAY(simplematch,storetab,TgrSimplematch,32); simplematch->dbstartpos = match->dbstartpos; simplematch->matchlength = match->dblen; simplematch->rcmatch = ISRCDIR(storetab->twlptr); } static void checkmstats(void *processinfo, const void *patterninfo, unsigned long patternstartpos, unsigned long mstatlength, unsigned long leftbound, unsigned long rightbound) { GT_UNUSED unsigned long realmstatlength; TgrTagwithlength *twl = (TgrTagwithlength *) patterninfo; realmstatlength = genericmstats((const Limdfsresources *) processinfo, twl->tagptr + patternstartpos, twl->tagptr + twl->taglen); #ifndef NDEBUG if (mstatlength != realmstatlength) { fprintf(stderr,"patternstartpos = %lu: mstatlength = %lu != %lu " " = realmstatlength\n", patternstartpos,mstatlength,realmstatlength); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif if (gt_intervalwidthleq((const Limdfsresources *) processinfo,leftbound, rightbound)) { GtUchar cc; unsigned long *sptr, witnessposition; unsigned long idx; GtArrayGtUlong *mstatspos = gt_fromitv2sortedmatchpositions( (Limdfsresources *) processinfo, leftbound, rightbound, mstatlength); for (sptr = mstatspos->spaceGtUlong; sptr < mstatspos->spaceGtUlong + mstatspos->nextfreeGtUlong; sptr++) { witnessposition = *sptr; for (idx = patternstartpos; idx < patternstartpos + mstatlength; idx++) { cc = gt_limdfs_getencodedchar((const Limdfsresources *) processinfo, witnessposition + idx - patternstartpos, GT_READMODE_FORWARD); if (twl->tagptr[idx] != cc) { fprintf(stderr,"patternstartpos = %lu: pattern[%lu] = %u != %u = " "sequence[%lu]\n", patternstartpos, idx, (unsigned int) twl->tagptr[idx], (unsigned int) cc, (unsigned long) (witnessposition+idx-patternstartpos)); exit(GT_EXIT_PROGRAMMING_ERROR); } } } } } static void showmstats(void *processinfo, const void *patterninfo, GT_UNUSED unsigned long patternstartpos, unsigned long mstatlength, unsigned long leftbound, unsigned long rightbound) { TgrTagwithlength *twl = (TgrTagwithlength *) patterninfo; printf("%lu %c",mstatlength,ISRCDIR(twl) ? '-' : '+'); if (gt_intervalwidthleq((const Limdfsresources *) processinfo,leftbound, rightbound)) { unsigned long idx; GtArrayGtUlong *mstatspos = gt_fromitv2sortedmatchpositions( (Limdfsresources *) processinfo, leftbound, rightbound, mstatlength); for (idx = 0; idxnextfreeGtUlong; idx++) { printf(" %lu",mstatspos->spaceGtUlong[idx]); } } printf("\n"); } static int cmpdescend(const void *a,const void *b) { TgrSimplematch *valuea = (TgrSimplematch *) a; TgrSimplematch *valueb = (TgrSimplematch *) b; if (!valuea->rcmatch && valueb->rcmatch) { return -1; } if (valuea->rcmatch && !valueb->rcmatch) { return 1; } if (valuea->dbstartpos < valueb->dbstartpos) { return 1; } if (valuea->dbstartpos > valueb->dbstartpos) { return -1; } return 0; } static int dotransformtag(GtUchar *transformedtag, const GtUchar *symbolmap, const GtUchar *currenttag, unsigned long taglen, uint64_t tagnumber, bool replacewildcard, GtError *err) { unsigned long idx; GtUchar charcode; if (taglen > (unsigned long) MAXTAGSIZE) { gt_error_set(err,"tag \"%*.*s\" of length %lu; " "tags must not be longer than %lu", (int) taglen,(int) taglen,currenttag,taglen, (unsigned long) MAXTAGSIZE); return -1; } for (idx = 0; idx < taglen; idx++) { charcode = symbolmap[currenttag[idx]]; if (charcode == (GtUchar) UNDEFCHAR) { gt_error_set(err,"undefined character '%c' in tag number " Formatuint64_t, currenttag[idx], PRINTuint64_tcast(tagnumber)); return -1; } if (charcode == (GtUchar) WILDCARD) { if (replacewildcard) { charcode = 0; } else { gt_error_set(err,"wildcard in tag number " Formatuint64_t, PRINTuint64_tcast(tagnumber)); return -1; } } transformedtag[idx] = charcode; } return 0; } static bool performpatternsearch(const AbstractDfstransformer *dfst, bool domstats, unsigned long maxdistance, bool doonline, bool docompare, unsigned long maxintervalwidth, bool skpp, Myersonlineresources *mor, Limdfsresources *limdfsresources, const GtUchar *tagptr, unsigned long taglen) { if (doonline || (!domstats && docompare)) { gt_assert(mor != NULL); gt_edistmyersbitvectorAPM(mor,tagptr,taglen,maxdistance); } if (!doonline || docompare) { if (domstats) { gt_indexbasedmstats(limdfsresources,tagptr,taglen,dfst); return false; } if (maxdistance == 0) { return gt_indexbasedexactpatternmatching(limdfsresources,tagptr,taglen); } else { return gt_indexbasedapproxpatternmatching(limdfsresources,tagptr,taglen, maxdistance, maxintervalwidth, skpp, dfst); } } return false; } static void compareresults(const ArrayTgrSimplematch *storeonline, const ArrayTgrSimplematch *storeoffline) { unsigned long ss; if (storeonline->nextfreeTgrSimplematch != storeoffline->nextfreeTgrSimplematch) { fprintf(stderr,"nextfreeTgrSimplematch: storeonline = %lu != %lu " "storeoffline\n", storeonline->nextfreeTgrSimplematch, storeoffline->nextfreeTgrSimplematch); exit(GT_EXIT_PROGRAMMING_ERROR); } gt_assert(storeonline->nextfreeTgrSimplematch == storeoffline->nextfreeTgrSimplematch); if (storeoffline->nextfreeTgrSimplematch > 1UL) { qsort(storeoffline->spaceTgrSimplematch,(size_t) storeoffline->nextfreeTgrSimplematch, sizeof (TgrSimplematch), cmpdescend); } for (ss=0; ss < storeoffline->nextfreeTgrSimplematch; ss++) { gt_assert(storeonline->spaceTgrSimplematch != NULL && storeoffline->spaceTgrSimplematch != NULL); if (storeonline->spaceTgrSimplematch[ss].rcmatch && !storeoffline->spaceTgrSimplematch[ss].rcmatch) { fprintf(stderr,"rcmatch: storeonline[%lu] = p != d " "= storeoffline[%lu]\n",ss,ss); exit(GT_EXIT_PROGRAMMING_ERROR); } if (!storeonline->spaceTgrSimplematch[ss].rcmatch && storeoffline->spaceTgrSimplematch[ss].rcmatch) { fprintf(stderr,"rcmatch: storeonline[%lu] = d != p " "= storeoffline[%lu]\n",ss,ss); exit(GT_EXIT_PROGRAMMING_ERROR); } if (storeonline->spaceTgrSimplematch[ss].matchlength != storeoffline->spaceTgrSimplematch[ss].matchlength) { fprintf(stderr,"matchlength: storeonline[%lu] = %lu" " != %lu = storeoffline[%lu]\n", ss, storeonline->spaceTgrSimplematch[ss].matchlength, storeoffline->spaceTgrSimplematch[ss].matchlength, ss); exit(GT_EXIT_PROGRAMMING_ERROR); } if (storeonline->spaceTgrSimplematch[ss].dbstartpos != storeoffline->spaceTgrSimplematch[ss].dbstartpos) { fprintf(stderr,"dbstartpos: storeonline[%lu] = %lu" " != %lu = storeoffline[%lu]\n", ss, storeonline->spaceTgrSimplematch[ss].dbstartpos, storeoffline->spaceTgrSimplematch[ss].dbstartpos, ss); exit(GT_EXIT_PROGRAMMING_ERROR); } } } static void searchoverstrands(const TageratorOptions *tageratoroptions, TgrTagwithlength *twl, const AbstractDfstransformer *dfst, Myersonlineresources *mor, Limdfsresources *limdfsresources, TgrShowmatchinfo *showmatchinfo, ArrayTgrSimplematch *storeonline, ArrayTgrSimplematch *storeoffline) { int try; bool domstats, matchfound; unsigned long maxdistance, mindistance, distance; if (tageratoroptions->userdefinedmaxdistance < 0) { domstats = true; mindistance = maxdistance = 0; } else { domstats = false; gt_assert(tageratoroptions->userdefinedmaxdistance >= 0); maxdistance = (unsigned long) tageratoroptions->userdefinedmaxdistance; if (tageratoroptions->best) { mindistance = 0; } else { mindistance = maxdistance; } } matchfound = false; for (distance = mindistance; distance <= maxdistance; distance++) { showmatchinfo->tagptr = twl->tagptr = twl->transformedtag; for (try=0 ; try < 2; try++) { if ((try == 0 && !tageratoroptions->nofwdmatch) || (try == 1 && !tageratoroptions->norcmatch)) { if (try == 1 && !tageratoroptions->norcmatch) { showmatchinfo->tagptr = twl->tagptr = twl->rctransformedtag; } if (performpatternsearch(dfst, domstats, distance, tageratoroptions->doonline, tageratoroptions->docompare, tageratoroptions->maxintervalwidth, tageratoroptions->skpp, mor, limdfsresources, twl->tagptr, twl->taglen) && !matchfound) { matchfound = true; } if (tageratoroptions->docompare) { compareresults(storeonline,storeoffline); } } } if (tageratoroptions->best && matchfound) { break; } } } int gt_runtagerator(const TageratorOptions *tageratoroptions,GtError *err) { bool haserr = false, firstitem; int retval; Myersonlineresources *mor = NULL; Genericindex *genericindex = NULL; const GtEncseq *encseq = NULL; GtLogger *logger; logger = gt_logger_new(tageratoroptions->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); if (tageratoroptions->doonline) { GtEncseqLoader *el; el = gt_encseq_loader_new(); gt_encseq_loader_do_not_require_des_tab(el); gt_encseq_loader_do_not_require_ssp_tab(el); gt_encseq_loader_do_not_require_sds_tab(el); gt_encseq_loader_set_logger(el, logger); encseq = gt_encseq_loader_load(el, gt_str_get(tageratoroptions->indexname), err); gt_encseq_loader_delete(el); if (encseq == NULL) { haserr = true; } } else { genericindex = genericindex_new(gt_str_get(tageratoroptions->indexname), tageratoroptions->withesa, tageratoroptions->withesa || tageratoroptions->docompare, false, (tageratoroptions->outputmode & TAGOUT_DBABSPOS) ? false : true, tageratoroptions->userdefinedmaxdepth, logger, err); if (genericindex == NULL) { haserr = true; } else { encseq = genericindex_getencseq(genericindex); } } if (!haserr) { TgrTagwithlength twl; uint64_t tagnumber; unsigned int numofchars; const GtUchar *symbolmap, *currenttag; char *desc = NULL; ProcessIdxMatch processmatch; TgrShowmatchinfo showmatchinfo; void *processmatchinfoonline, *processmatchinfooffline; Limdfsresources *limdfsresources = NULL; const GtAlphabet *alpha; ArrayTgrSimplematch storeonline, storeoffline; const AbstractDfstransformer *dfst; GtSeqIterator *seqit = NULL; if (tageratoroptions->userdefinedmaxdistance >= 0) { dfst = gt_apme_AbstractDfstransformer(); } else { dfst = gt_pms_AbstractDfstransformer(); } GT_INITARRAY(&storeonline,TgrSimplematch); GT_INITARRAY(&storeoffline,TgrSimplematch); storeonline.twlptr = storeoffline.twlptr = &twl; alpha = gt_encseq_alphabet(encseq); symbolmap = gt_alphabet_symbolmap(alpha); numofchars = gt_alphabet_num_of_chars(alpha); if (tageratoroptions->docompare) { processmatch = tgr_storematch; processmatchinfoonline = &storeonline; processmatchinfooffline = &storeoffline; showmatchinfo.eqsvector = NULL; showmatchinfo.encseq = encseq; } else { processmatch = tgr_showmatch; showmatchinfo.twlptr = &twl; showmatchinfo.tageratoroptions = tageratoroptions; showmatchinfo.alphasize = (unsigned int) numofchars; showmatchinfo.alpha = alpha; showmatchinfo.eqsvector = gt_malloc(sizeof (*showmatchinfo.eqsvector) * showmatchinfo.alphasize); showmatchinfo.encseq = encseq; processmatchinfooffline = &showmatchinfo; processmatchinfoonline = &showmatchinfo; } if (tageratoroptions->doonline || tageratoroptions->docompare) { gt_assert(encseq != NULL); mor = gt_newMyersonlineresources(numofchars, tageratoroptions->nowildcards, encseq, processmatch, processmatchinfoonline); } if (!tageratoroptions->doonline || tageratoroptions->docompare) { unsigned long maxpathlength; if (tageratoroptions->userdefinedmaxdistance >= 0) { maxpathlength = (unsigned long) (1+ MAXTAGSIZE + tageratoroptions-> userdefinedmaxdistance); } else { maxpathlength = (unsigned long) (1+MAXTAGSIZE); } limdfsresources = gt_newLimdfsresources(genericindex, tageratoroptions->nowildcards, tageratoroptions->maxintervalwidth, maxpathlength, false, /* keepexpandedonstack */ processmatch, processmatchinfooffline, tageratoroptions->docompare ? checkmstats : showmstats, &twl, /* refer to uninit structure */ dfst); } printf("# for each match show: "); gt_getsetargmodekeywords(tageratoroptions->modedesc, tageratoroptions->numberofmodedescentries, tageratoroptions->outputmode); seqit = gt_seq_iterator_sequence_buffer_new(tageratoroptions->tagfiles, err); if (!seqit) { haserr = true; } if (!haserr) { for (tagnumber = 0; !haserr; tagnumber++) { retval = gt_seq_iterator_next(seqit, ¤ttag, &twl.taglen, &desc, err); if (retval != 1) { break; } if (dotransformtag(twl.transformedtag, symbolmap, currenttag, twl.taglen, tagnumber, tageratoroptions->replacewildcard, err) != 0) { haserr = true; gt_free(desc); break; } gt_copy_reversecomplement(twl.rctransformedtag,twl.transformedtag, twl.taglen); twl.tagptr = twl.transformedtag; firstitem = true; printf("#"); if (tageratoroptions->outputmode & TAGOUT_TAGNUM) { printf("\t" Formatuint64_t,PRINTuint64_tcast(tagnumber)); firstitem = false; } if (tageratoroptions->outputmode & TAGOUT_TAGLENGTH) { ADDTABULATOR; printf("%lu",twl.taglen); } if (tageratoroptions->outputmode & TAGOUT_TAGSEQ) { ADDTABULATOR; gt_alphabet_decode_seq_to_fp(alpha,stdout,twl.transformedtag, twl.taglen); } printf("\n"); storeoffline.nextfreeTgrSimplematch = 0; storeonline.nextfreeTgrSimplematch = 0; if (tageratoroptions->userdefinedmaxdistance > 0 && twl.taglen <= (unsigned long) tageratoroptions->userdefinedmaxdistance) { gt_error_set(err,"tag \"%*.*s\" of length %lu; " "tags must be longer than the allowed number of errors " "(which is %ld)", (int) twl.taglen, (int) twl.taglen,currenttag, twl.taglen, tageratoroptions->userdefinedmaxdistance); haserr = true; gt_free(desc); break; } gt_assert(tageratoroptions->userdefinedmaxdistance < 0 || twl.taglen > (unsigned long) tageratoroptions->userdefinedmaxdistance); searchoverstrands(tageratoroptions, &twl, dfst, mor, limdfsresources, &showmatchinfo, &storeonline, &storeoffline); } gt_seq_iterator_delete(seqit); } GT_FREEARRAY(&storeonline,TgrSimplematch); GT_FREEARRAY(&storeoffline,TgrSimplematch); gt_free(showmatchinfo.eqsvector); if (limdfsresources != NULL) { gt_freeLimdfsresources(&limdfsresources,dfst); } } gt_freeMyersonlineresources(mor); if (genericindex == NULL) { if (encseq != NULL) { gt_encseq_delete((GtEncseq *) encseq); encseq = NULL; } } else { genericindex_delete(genericindex); } gt_logger_delete(logger); return haserr ? -1 : 0; } genometools-1.5.1/src/match/tagerator.h000066400000000000000000000050411211610345200200700ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TAGERATOR_H #define TAGERATOR_H #include #include "core/str_array.h" #include "core/error.h" #include "core/option_api.h" #include "match/optionargmode.h" #define TAGOUT_TAGNUM 1U #define TAGOUT_TAGSEQ (1U << 1) #define TAGOUT_DBLENGTH (1U << 2) #define TAGOUT_DBSTARTPOS (1U << 3) #define TAGOUT_DBABSPOS (1U << 4) #define TAGOUT_DBSEQUENCE (1U << 5) #define TAGOUT_STRAND (1U << 6) #define TAGOUT_EDIST (1U << 7) #define TAGOUT_TAGSTARTPOS (1U << 8) #define TAGOUT_TAGLENGTH (1U << 9) #define TAGOUT_TAGSUFFIXSEQ (1U << 10) typedef struct { GtStrArray *tagfiles, *outputspec; GtStr *indexname, *outputhelp; GtOption *refoptionesaindex, *refoptionpckindex; const Optionargmodedesc *modedesc; bool verbose, withesa, doonline, /* perform online search, for testing */ docompare, /* compare results with online search */ replacewildcard, /* replace wildcards by random symbol */ nofwdmatch, /* do not perform matching on forward strand */ norcmatch, /* do not perform matching on reverse complemented strand */ nowildcards, /* ignore matches containing wildcards */ skpp, /* Skip prefix of pattern without counting errors */ best; /* use best match mode, only for edit distance */ long userdefinedmaxdistance; /* maximal number of allowed differences */ int userdefinedmaxdepth; /* use pckbuckets only up to this depth */ unsigned int outputmode; /* mode of output of tag matches */ unsigned long maxintervalwidth; /* max width of interval */ size_t numberofmodedescentries; } TageratorOptions; int gt_runtagerator(const TageratorOptions *tageratoroptions,GtError *err); #endif genometools-1.5.1/src/match/test-mappedstr.c000066400000000000000000000220041211610345200210450ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include "core/arraydef.h" #include "core/chardef.h" #include "core/error.h" #include "core/unused_api.h" #include "core/encseq.h" #include "sfx-nextchar.h" #include "kmer2string.h" #include "sfx-mappedstr.h" static GtCodetype qgram2codefillspecial(unsigned int numofchars, unsigned int kmersize, const GtEncseq *encseq, GtReadmode readmode, unsigned long startpos, unsigned long totallength) { GtCodetype integercode; unsigned long pos; bool foundspecial; GtUchar cc; if (startpos >= totallength) { integercode = (GtCodetype) (numofchars - 1); foundspecial = true; } else { /* for testing */ cc = gt_encseq_get_encoded_char(encseq,startpos,readmode); if (ISSPECIAL(cc)) { integercode = (GtCodetype) (numofchars - 1); foundspecial = true; } else { integercode = (GtCodetype) cc; foundspecial = false; } } for (pos = startpos + 1; pos < startpos + kmersize; pos++) { if (foundspecial) { ADDNEXTCHAR(integercode,numofchars-1,numofchars); } else { if (pos >= totallength) { ADDNEXTCHAR(integercode,numofchars-1,numofchars); foundspecial = true; } else { /* for testing */ cc = gt_encseq_get_encoded_char(encseq,pos,readmode); if (ISSPECIAL(cc)) { ADDNEXTCHAR(integercode,numofchars-1,numofchars); foundspecial = true; } else { ADDNEXTCHAR(integercode,cc,numofchars); } } } } return integercode; } GT_DECLAREARRAYSTRUCT(GtCodetype); static void outkmeroccurrence(void *processinfo, const GtKmercode *kmercode) { GtArrayGtCodetype *codelist = (GtArrayGtCodetype *) processinfo; GT_STOREINARRAY(codelist,GtCodetype,1024,kmercode->code); } /* The function to collect the code from a stream of fasta files can only produce the sequence of code in forward mode. Hence we compute the corresponding sequence also in GT_READMODE_FORWARD. Thus we restrict the call for gt_verifymappedstr to the case where the suffix array is in readmode = GT_READMODE_FORWARD. */ static void collectkmercode(GtArrayGtCodetype *codelist, const GtEncseq *encseq, unsigned int kmersize, unsigned int numofchars, unsigned long stringtotallength) { unsigned long offset; GtCodetype code; for (offset=0; offset<=stringtotallength; offset++) { code = qgram2codefillspecial(numofchars, kmersize, encseq, GT_READMODE_FORWARD, offset, stringtotallength); GT_STOREINARRAY(codelist,GtCodetype,1024,code); } } static int comparecodelists(const GtArrayGtCodetype *codeliststream, const GtArrayGtCodetype *codeliststring, unsigned int kmersize, unsigned int numofchars, const char *characters, GtError *err) { unsigned long i; char buffer1[64+1], buffer2[64+1]; gt_error_check(err); if (codeliststream->nextfreeGtCodetype != codeliststring->nextfreeGtCodetype) { gt_error_set(err,"length codeliststream= %lu != %lu =length codeliststring", (unsigned long) codeliststream->nextfreeGtCodetype, (unsigned long) codeliststring->nextfreeGtCodetype); return -1; } for (i=0; inextfreeGtCodetype; i++) { if (codeliststream->spaceGtCodetype[i] != codeliststring->spaceGtCodetype[i]) { gt_fromkmercode2string(buffer1, codeliststream->spaceGtCodetype[i], numofchars, kmersize, characters); gt_fromkmercode2string(buffer2, codeliststring->spaceGtCodetype[i], numofchars, kmersize, characters); gt_error_set(err,"codeliststream[%lu] = " FormatGtCodetype " != " FormatGtCodetype " = codeliststring[%lu]\n%s != %s", i, codeliststream->spaceGtCodetype[i], codeliststring->spaceGtCodetype[i], i, buffer1, buffer2); return -1; } } return 0; } static int getfastastreamkmers(const GtStrArray *filenametab, unsigned int numofchars, unsigned int kmersize, const GtUchar *symbolmap, bool plainformat, GtArrayGtCodetype *codeliststream, GtError *err) { GtKmercodeiterator *kmercodeiterator; const GtKmercode *kmercodeptr; bool haserr = false; kmercodeiterator = gt_kmercodeiterator_filetab_new( filenametab, numofchars, kmersize, symbolmap, plainformat, err); if (!gt_kmercodeiterator_inputexhausted(kmercodeiterator)) { while (!haserr) { int retval = gt_kmercodeiterator_filetab_next(&kmercodeptr, kmercodeiterator, err); if (retval < 0) { haserr = true; } else { if (kmercodeptr != NULL) { outkmeroccurrence(codeliststream,kmercodeptr); } else { break; } } } } gt_kmercodeiterator_delete(kmercodeiterator); return haserr ? -1 : 0; } static int verifycodelists(const GtEncseq *encseq, unsigned int kmersize, unsigned int numofchars, const GtArrayGtCodetype *codeliststream, GtError *err) { bool haserr = false; GtArrayGtCodetype codeliststring; const GtUchar *characters; unsigned long stringtotallength; gt_error_check(err); stringtotallength = gt_encseq_total_length(encseq); characters = gt_alphabet_characters(gt_encseq_alphabet(encseq)); GT_INITARRAY(&codeliststring,GtCodetype); collectkmercode(&codeliststring, encseq, kmersize, numofchars, stringtotallength); if (comparecodelists(codeliststream, &codeliststring, kmersize, numofchars, (const char *) characters, err) != 0) { haserr = true; } GT_FREEARRAY(&codeliststring,GtCodetype); return haserr ? -1 : 0; } int gt_verifymappedstr(const GtEncseq *encseq, unsigned int prefixlength, GtError *err) { unsigned int numofchars; GtArrayGtCodetype codeliststream; bool haserr = false; gt_error_check(err); numofchars = gt_alphabet_num_of_chars(gt_encseq_alphabet(encseq)); GT_INITARRAY(&codeliststream,GtCodetype); if (getfastastreamkmers(gt_encseq_filenames(encseq), numofchars, prefixlength, gt_alphabet_symbolmap( gt_encseq_alphabet(encseq)), false, &codeliststream, err) != 0) { haserr = true; } if (!haserr) { if (verifycodelists(encseq, prefixlength, numofchars, &codeliststream, err) != 0) { haserr = true; } } GT_FREEARRAY(&codeliststream,GtCodetype); return haserr ? -1 : 0; } genometools-1.5.1/src/match/test-mappedstr.pr000066400000000000000000000003131211610345200212430ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif int gt_verifymappedstr(const GtEncseq *encseq, unsigned int prefixlength, GtError *err); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/test-maxpairs.c000066400000000000000000000360111211610345200206750ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/alphabet.h" #include "core/array.h" #include "core/arraydef.h" #include "core/divmodmul.h" #include "core/encseq.h" #include "core/format64.h" #include "core/logger.h" #include "core/timer_api.h" #include "core/unused_api.h" #include "core/ma_api.h" #include "esa-mmsearch.h" #include "echoseq.h" #include "sfx-suffixer.h" #include "sfx-apfxlen.h" #include "esa-maxpairs.h" #include "esa-seqread.h" typedef struct { unsigned int minlength; GtEncseq *encseq; Processmaxpairs processmaxpairs; void *processmaxpairsinfo; } Substringmatchinfo; static int constructsarrandrunmaxpairs( Substringmatchinfo *ssi, GtReadmode readmode, unsigned int prefixlength, unsigned int numofparts, unsigned long maximumspace, GtTimer *sfxprogress, bool withprogressbar, GT_UNUSED GtLogger *logger, GtError *err) { const GtSuffixsortspace *suffixsortspace; unsigned long numberofsuffixes; bool haserr = false; Sfxiterator *sfi; bool specialsuffixes = false; Sfxstrategy sfxstrategy; defaultsfxstrategy(&sfxstrategy, gt_encseq_bitwise_cmp_ok(ssi->encseq) ? false : true); sfi = gt_Sfxiterator_new(ssi->encseq, readmode, prefixlength, numofparts, maximumspace, &sfxstrategy, sfxprogress, withprogressbar, NULL, /* logger */ err); if (sfi == NULL) { haserr = true; } else { Sequentialsuffixarrayreader *ssar = NULL; bool firstpage = true; ssar = gt_newSequentialsuffixarrayreaderfromRAM(ssi->encseq, readmode); while (true) { suffixsortspace = gt_Sfxiterator_next(&numberofsuffixes,&specialsuffixes, sfi); if (suffixsortspace == NULL || specialsuffixes) { break; } gt_updateSequentialsuffixarrayreaderfromRAM( ssar, (const ESASuffixptr *) gt_suffixsortspace_ulong_get(suffixsortspace), firstpage, numberofsuffixes); firstpage = false; if (gt_enumeratemaxpairs(ssar, ssi->encseq, readmode, ssi->minlength, ssi->processmaxpairs, ssi->processmaxpairsinfo, err) != 0) { haserr = true; } } if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } } if (gt_Sfxiterator_delete(sfi,err) != 0) { haserr = true; } return haserr ? -1 : 0; } static int sarrselfsubstringmatch(const GtUchar *dbseq, unsigned long dblen, const GtUchar *query, unsigned long querylen, unsigned int minlength, GtAlphabet *alpha, Processmaxpairs processmaxpairs, void *processmaxpairsinfo, GtLogger *logger, GtError *err) { Substringmatchinfo ssi; unsigned int numofchars, recommendedprefixlength; GtEncseqBuilder *eb; bool haserr = false; eb = gt_encseq_builder_new(alpha); gt_encseq_builder_disable_multiseq_support(eb); gt_encseq_builder_disable_description_support(eb); gt_encseq_builder_set_logger(eb, logger); gt_encseq_builder_add_encoded(eb, dbseq, dblen, NULL); gt_encseq_builder_add_encoded(eb, query, querylen, NULL); ssi.encseq = gt_encseq_builder_build(eb, err); gt_encseq_builder_delete(eb); ssi.minlength = minlength; ssi.processmaxpairs = processmaxpairs; ssi.processmaxpairsinfo = processmaxpairsinfo; numofchars = gt_alphabet_num_of_chars(alpha); recommendedprefixlength = gt_recommendedprefixlength(numofchars, dblen+querylen+1, GT_RECOMMENDED_MULTIPLIER_DEFAULT, true); if (constructsarrandrunmaxpairs(&ssi, GT_READMODE_FORWARD, recommendedprefixlength, 1U, /* parts */ 0, /* maximumspace */ NULL, false, logger, err) != 0) { haserr = true; } gt_encseq_delete(ssi.encseq); ssi.encseq = NULL; return haserr ? -1 : 0; } static unsigned long samplesubstring(GtUchar *seqspace, const GtEncseq *encseq, unsigned long substringlength) { unsigned long start, totallength; totallength = gt_encseq_total_length(encseq); start = (unsigned long) (random() % totallength); if (start + substringlength > totallength) { substringlength = totallength - start; } gt_assert(substringlength > 0); gt_encseq_extract_encoded(encseq,seqspace,start, start+substringlength-1); return substringlength; } typedef struct { unsigned long len, dbstart, querystart; uint64_t queryseqnum; } Substringmatch; static int storemaxmatchquery(void *info, GT_UNUSED const GtEncseq *encseq, const GtQuerymatch *querymatch, GT_UNUSED const GtUchar *query, GT_UNUSED unsigned long query_totallength, GT_UNUSED GtError *err) { GtArray *tab = (GtArray *) info; Substringmatch subm; subm.len = gt_querymatch_querylen(querymatch); subm.dbstart = gt_querymatch_dbstart(querymatch); subm.querystart = gt_querymatch_querystart(querymatch); subm.queryseqnum = gt_querymatch_queryseqnum(querymatch); gt_array_add(tab,subm); return 0; } typedef struct { GtArray *results; unsigned long dblen, *querymarkpos, querylen; unsigned long numofquerysequences; } Maxmatchselfinfo; static int storemaxmatchself(void *info, GT_UNUSED const GtEncseq *encseq, unsigned long len, unsigned long pos1, unsigned long pos2, GT_UNUSED GtError *err) { Maxmatchselfinfo *maxmatchselfinfo = (Maxmatchselfinfo *) info; unsigned long dbstart, querystart; if (pos1 < pos2) { dbstart = pos1; querystart = pos2; } else { dbstart = pos2; querystart = pos1; } if (dbstart < maxmatchselfinfo->dblen && maxmatchselfinfo->dblen < querystart) { Substringmatch subm; unsigned long pos; subm.len = len; subm.dbstart = dbstart; pos = querystart - (maxmatchselfinfo->dblen + 1); if (maxmatchselfinfo->querymarkpos == NULL) { subm.queryseqnum = 0; subm.querystart = pos; } else { unsigned long queryseqnum = gt_encseq_sep2seqnum(maxmatchselfinfo->querymarkpos, maxmatchselfinfo->numofquerysequences, maxmatchselfinfo->querylen, pos); if (queryseqnum == maxmatchselfinfo->numofquerysequences) { return -1; } if (queryseqnum == 0) { subm.querystart = pos; } else { subm.querystart = pos - (maxmatchselfinfo->querymarkpos[queryseqnum-1] + 1); } subm.queryseqnum = (uint64_t) queryseqnum; } gt_array_add(maxmatchselfinfo->results,subm); } return 0; } static int orderSubstringmatch(const void *a,const void *b) { Substringmatch *m1 = (Substringmatch *) a, *m2 = (Substringmatch *) b; if (m1->queryseqnum < m2->queryseqnum) { return -1; } if (m1->queryseqnum > m2->queryseqnum) { return 1; } if (m1->querystart < m2->querystart) { return -1; } if (m1->querystart > m2->querystart) { return 1; } if (m1->dbstart < m2->dbstart) { return -1; } if (m1->dbstart > m2->dbstart) { return 1; } if (m1->len < m2->len) { return -1; } if (m1->len > m2->len) { return 1; } return 0; } static int showSubstringmatch(void *a, GT_UNUSED void *info, GT_UNUSED GtError *err) { Substringmatch *m = (Substringmatch *) a; printf("%lu %lu " Formatuint64_t " %lu\n", m->len, m->dbstart, PRINTuint64_tcast(m->queryseqnum), m->querystart); return 0; } static unsigned long *sequence2markpositions(unsigned long *numofsequences, const GtUchar *seq, unsigned long seqlen) { unsigned long *spacemarkpos, idx; unsigned long allocatedmarkpos, nextfreemarkpos; *numofsequences = 1UL; for (idx=0; idx totallength/2) { substringlength = totallength/2; } dbseq = gt_malloc(sizeof *dbseq * substringlength); query = gt_malloc(sizeof *query * substringlength); } for (s=0; s Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include "core/fa.h" #include "core/logger.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "core/ma_api.h" #include "sarr-def.h" #include "emimergeesa.h" #include "esa-fileend.h" #include "lcpoverflow.h" #include "encseq2offset.pr" typedef struct { GtStr *outfilename; FILE *fp; } NameandFILE; typedef struct { NameandFILE outsuf, outlcp, outllv; unsigned long currentlcpindex, absstartpostable[SIZEOFMERGERESULTBUFFER]; } Mergeoutinfo; static int initNameandFILE(NameandFILE *nf, const GtStr *outindex, const char *suffix, GtError *err) { gt_error_check(err); nf->outfilename = gt_str_clone(outindex); gt_str_append_cstr(nf->outfilename,suffix); nf->fp = gt_fa_fopen(gt_str_get(nf->outfilename),"wb",err); if (nf->fp == NULL) { return -1; } return 0; } static void freeNameandFILE(NameandFILE *nf) { gt_fa_xfclose(nf->fp); gt_str_delete(nf->outfilename); } static int outputsuflcpllv(void *processinfo, const unsigned long *sequenceoffsettable, const Suflcpbuffer *buf, GT_UNUSED GtError *err) { Mergeoutinfo *mergeoutinfo = (Mergeoutinfo *) processinfo; unsigned int i, lastindex; unsigned long lcpvalue; Largelcpvalue currentexception; GtUchar smallvalue; bool haserr = false; gt_error_check(err); for (i=0; inextstoreidx; i++) { mergeoutinfo->absstartpostable[i] = sequenceoffsettable[buf->suftabstore[i].idx] + buf->suftabstore[i].startpos; } gt_xfwrite(mergeoutinfo->absstartpostable, sizeof (unsigned long), (size_t) buf->nextstoreidx, mergeoutinfo->outsuf.fp); if (!haserr) { if (buf->lastpage) { lastindex = buf->nextstoreidx - 1; } else { lastindex = buf->nextstoreidx; } for (i=0; ilcptabstore[i]; if (lcpvalue < (unsigned long) LCPOVERFLOW) { smallvalue = (GtUchar) lcpvalue; } else { currentexception.position = mergeoutinfo->currentlcpindex; currentexception.value = lcpvalue; gt_xfwrite(¤texception,sizeof (Largelcpvalue), (size_t) 1, mergeoutinfo->outllv.fp); smallvalue = LCPOVERFLOW; } gt_xfwrite(&smallvalue,sizeof (GtUchar),(size_t) 1, mergeoutinfo->outlcp.fp); mergeoutinfo->currentlcpindex++; } } return haserr ? -1 : 0; } static int mergeandstoreindex(const GtStr *storeindex, Emissionmergedesa *emmesa, GtError *err) { Mergeoutinfo mergeoutinfo; GtUchar smalllcpvalue; GtSpecialcharinfo specialcharinfo; unsigned long *sequenceoffsettable, totallength; bool haserr = false; gt_error_check(err); if (initNameandFILE(&mergeoutinfo.outsuf,storeindex,SUFTABSUFFIX,err) != 0) { haserr = true; } if (!haserr) { if (initNameandFILE(&mergeoutinfo.outlcp,storeindex,LCPTABSUFFIX,err) != 0) { haserr = true; } } if (!haserr) { if (initNameandFILE(&mergeoutinfo.outllv,storeindex,LARGELCPTABSUFFIX, err) != 0) { haserr = true; } } smalllcpvalue = 0; if (!haserr) { gt_xfwrite(&smalllcpvalue,sizeof (GtUchar),(size_t) 1, mergeoutinfo.outlcp.fp); } if (!haserr) { mergeoutinfo.currentlcpindex = (unsigned long) 1; sequenceoffsettable = gt_encseqtable2sequenceoffsets(&totallength, &specialcharinfo, emmesa->suffixarraytable, emmesa->numofindexes); gt_assert(sequenceoffsettable != NULL); while (emmesa->numofentries > 0) { if (gt_emissionmergedesa_stepdeleteandinsertothersuffixes(emmesa, err) != 0) { haserr = true; break; } if (outputsuflcpllv(&mergeoutinfo, sequenceoffsettable, &emmesa->buf, err) != 0) { haserr = true; break; } } gt_free(sequenceoffsettable); } freeNameandFILE(&mergeoutinfo.outsuf); freeNameandFILE(&mergeoutinfo.outlcp); freeNameandFILE(&mergeoutinfo.outllv); return haserr ? -1 : 0; } int gt_performtheindexmerging(const GtStr *storeindex, const GtStrArray *indexnametab, GtLogger *logger, GtError *err) { Emissionmergedesa emmesa; unsigned int demand = SARR_ESQTAB | SARR_SUFTAB | SARR_LCPTAB; bool haserr = false; gt_error_check(err); if (gt_emissionmergedesa_init(&emmesa, indexnametab, demand, logger, err) != 0) { haserr = true; } if (!haserr) { if (gt_str_array_size(indexnametab) > 1UL) { if (mergeandstoreindex(storeindex,&emmesa,err) != 0) { haserr = true; } } else { gt_error_set(err,"merging requires more than one index"); haserr = true; } } gt_emissionmergedesa_wrap(&emmesa); return haserr ? -1 : 0; } genometools-1.5.1/src/match/test-mergeesa.pr000066400000000000000000000004151211610345200210370ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif int gt_performtheindexmerging(const GtStr *storeindex, const GtStrArray *indexnametab, GtLogger *logger, GtError *err); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/test-mtrieins.c000066400000000000000000000072371211610345200207130ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/alphabet.h" #include "core/unused_api.h" #include "core/encseq.h" #include "core/ma_api.h" #include "sarr-def.h" #include "merger-trie.h" #include "esa-map.h" static void maketrie(Mergertrierep *trierep, GT_UNUSED const GtUchar *characters, unsigned long len) { Suffixinfo suffixinfo; suffixinfo.idx = 0; #ifdef WITHTRIEIDENT suffixinfo.ident = 0; #endif for (suffixinfo.startpos = 0; suffixinfo.startpos <= len; suffixinfo.startpos++) { gt_mergertrie_insertsuffix(trierep,trierep->root,&suffixinfo); #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showtrie(trierep,characters); #endif suffixinfo.ident++; #endif } } static void successivelydeletesmallest(Mergertrierep *trierep, GT_UNUSED unsigned long seqlen, GT_UNUSED const GtUchar *characters, GT_UNUSED GtError *err) { Mergertrienode *smallest; #ifdef WITHTRIEIDENT unsigned int numberofleaves = (unsigned int) seqlen+1; unsigned int maxleafnum = (unsigned int) seqlen; #endif while (trierep->root != NULL && trierep->root->firstchild != NULL) { smallest = gt_mergertrie_findsmallestnode(trierep); gt_mergertrie_deletesmallestpath(smallest,trierep); #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showtrie(trierep,characters); #endif numberofleaves--; checktrie(trierep,numberofleaves,maxleafnum,err); #endif } } int gt_test_trieins(bool onlyins,const char *indexname,GtError *err) { Suffixarray suffixarray; bool haserr = false; unsigned long totallength = 0; gt_error_check(err); if (streamsuffixarray(&suffixarray, SARR_ESQTAB, indexname, NULL, err) != 0) { haserr = true; } else { totallength = gt_encseq_total_length(suffixarray.encseq); } if (!haserr) { Mergertrierep trierep; const GtUchar *characters; trierep.encseqreadinfo = gt_malloc(sizeof *trierep.encseqreadinfo); trierep.encseqreadinfo->encseqptr = suffixarray.encseq; trierep.encseqreadinfo->readmode = suffixarray.readmode; characters = gt_alphabet_characters(gt_encseq_alphabet(suffixarray.encseq)); gt_mergertrie_initnodetable(&trierep,totallength,1U); maketrie(&trierep,characters,totallength); if (onlyins) { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showtrie(&trierep,characters); #endif checktrie(&trierep,totallength+1,totallength,err); #endif } else { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showallnoderelations(trierep.root); #endif #endif successivelydeletesmallest(&trierep,totallength,characters,err); } gt_mergertrie_delete(&trierep); } gt_freesuffixarray(&suffixarray); return haserr ? -1 : 0; } genometools-1.5.1/src/match/test-mtrieins.pr000066400000000000000000000002121211610345200210740ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif int gt_test_trieins(bool onlyins,const char *indexname,GtError *err); #ifdef __cplusplus } #endif genometools-1.5.1/src/match/test-pairwise.c000066400000000000000000000123431211610345200206760ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include "core/fa.h" #include "core/types_api.h" #include "core/unused_api.h" #include "core/ma_api.h" #include "test-pairwise.h" #include "greedyedist.h" #include "squarededist.h" void gt_runcheckfunctionontwofiles(Checkcmppairfuntype checkfunction, const char *file1, const char *file2) { const GtUchar *useq = NULL, *vseq = NULL; size_t ulen, vlen; bool forward = true; GtError *err; err = gt_error_new(); useq = (const GtUchar *) gt_fa_mmap_read(file1,&ulen,err); if (useq == NULL) { fprintf(stderr, "error: %s\n", gt_error_get(err)); exit(GT_EXIT_PROGRAMMING_ERROR); } vseq = (const GtUchar *) gt_fa_mmap_read(file2,&vlen,err); if (vseq == NULL) { fprintf(stderr, "error: %s\n", gt_error_get(err)); exit(GT_EXIT_PROGRAMMING_ERROR); } gt_error_delete(err); while (true) { checkfunction(forward,useq,(unsigned long) ulen, vseq,(unsigned long) vlen); if (!forward) { break; } forward = false; } gt_fa_xmunmap((void *) useq); gt_fa_xmunmap((void *) vseq); } unsigned long gt_runcheckfunctionontext(Checkcmppairfuntype checkfunction, const char *text) { unsigned long i, len; len = (unsigned long) strlen(text); for (i=1UL; i<=len/2; i++) { checkfunction(true, (const GtUchar *) text, i, (const GtUchar *) (text+i), len-i); } return len/2; } unsigned long gt_applycheckfunctiontotext(const GtUchar *text, unsigned long textlen, void *info) { unsigned long i; Checkcmppairfuntype checkfunction = (Checkcmppairfuntype) info; #ifdef SKDEBUG printf("%s\n",(char *) text); #endif for (i=0; i<=textlen/2; i++) { checkfunction(true,text,i,text+i,textlen-i); } return textlen/2+1; } static unsigned long applyall(const char *alpha, unsigned long textlen,void *info, unsigned long (*apply)(const GtUchar *, unsigned long, void *)) { unsigned long i, *w, z = textlen-1, testcases = 0, asize = (unsigned long) strlen(alpha); GtUchar *text; bool stop = false; w = gt_malloc(sizeof *w * (textlen+1)); text = gt_malloc(sizeof *text * (textlen+1)); for (i=0; i<=textlen; i++) { w[i] = 0; } text[textlen] = (GtUchar) '\0'; while (!stop) { for (i = 0; i Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TEST_PAIRWISE_H #define TEST_PAIRWISE_H #include #include "core/types_api.h" typedef void (*Checkcmppairfuntype)(bool, const GtUchar *,unsigned long, const GtUchar *,unsigned long); void gt_runcheckfunctionontwofiles(Checkcmppairfuntype checkfunction, const char *file1, const char *file2); unsigned long gt_runcheckfunctionontext(Checkcmppairfuntype checkfunction, const char *text); unsigned long gt_applycheckfunctiontotext(const GtUchar *text, unsigned long textlen, void *info); unsigned long gt_runcheckfunctiononalphalen(Checkcmppairfuntype checkfunction, const char *charlist, unsigned long len); void gt_checkgreedyunitedist(bool forward, const GtUchar *useq, unsigned long ulen, const GtUchar *vseq, unsigned long vlen); #endif genometools-1.5.1/src/match/turnwheels.c000066400000000000000000000045121211610345200202750ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "turnwheels.h" #define MAXNUMOFWHEELS 18 struct Turningwheel { unsigned int wheelspace[MAXNUMOFWHEELS], numofwheels, asize, idx, minchanged; }; Turningwheel *gt_turningwheel_new(unsigned int numofwheels, unsigned int asize) { unsigned int i; Turningwheel *tw; tw = gt_malloc(sizeof (*tw)); gt_assert(numofwheels < (unsigned int) MAXNUMOFWHEELS); gt_assert(numofwheels > 0); gt_assert(asize > 0); for (i=0; iwheelspace[i] = 0; } tw->numofwheels = numofwheels; tw->asize = asize; tw->idx = numofwheels - 1; tw->minchanged = 0; return tw; } size_t gt_turningwheel_size(void) { return sizeof (Turningwheel); } bool gt_turningwheel_next(Turningwheel *tw) { while (true) { tw->wheelspace[tw->idx]++; tw->minchanged = tw->idx; if (tw->wheelspace[tw->idx] == tw->asize) { tw->wheelspace[tw->idx] = 0; if (tw->idx == 0) { return false; } tw->idx--; } else { tw->idx = tw->numofwheels-1; break; } } return true; } unsigned int gt_turningwheel_minchanged(const Turningwheel *tw) { return tw->minchanged; } void gt_turningwheel_output(const Turningwheel *tw) { unsigned int i; for (i=0; inumofwheels; i++) { printf("%u",tw->wheelspace[i]); } } void gt_turningwheel_delete(Turningwheel *tw) { if (tw != NULL) { gt_free(tw); } } genometools-1.5.1/src/match/turnwheels.h000066400000000000000000000024401211610345200203000ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TURNWHEELS_H #define TURNWHEELS_H typedef struct Turningwheel Turningwheel; Turningwheel *gt_turningwheel_new(unsigned int numofwheels, unsigned int asize); size_t gt_turningwheel_size(void); bool gt_turningwheel_next(Turningwheel *tw); unsigned int gt_turningwheel_minchanged(const Turningwheel *tw); void gt_turningwheel_output(const Turningwheel *tw); void gt_turningwheel_delete(Turningwheel *tw); #endif genometools-1.5.1/src/match/twobits2kmers.c000066400000000000000000000251651211610345200207230ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Stefan Kurtz Copyright (c) 2007-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/arraydef.h" #include "core/codetype.h" #include "core/encseq.h" #include "core/encseq_api.h" #include "core/format64.h" #include "core/intbits.h" #include "core/unused_api.h" #include "hashfirstcodes.h" #include "sfx-mappedstr.h" #include "sfx-suffixer.h" #include "stamp.h" #include "twobits2kmers.h" #define READNEXTCODEANDCHECKIGNORESPECIAL(POS)\ gt_assert(kmercodeiterator != NULL);\ kmercodeptr = gt_kmercodeiterator_encseq_next(kmercodeiterator);\ gt_assert(kmercodeptr != NULL);\ if (!kmercodeptr->definedspecialposition && kmer != kmercodeptr->code)\ {\ showdifferentkmers(__LINE__,POS,kmer,kmercodeptr->code);\ exit(GT_EXIT_PROGRAMMING_ERROR);\ } typedef struct { int shiftright; const GtTwobitencoding *tbptr; GtTwobitencoding currentencoding; } Singlecharacterbitstreamstate; static void showdifferentkmers(int line,unsigned long pos,GtCodetype kmer1, GtCodetype kmer2) { char buffer[2*GT_INTWORDSIZE+1]; fprintf(stderr,"line %d: pos=%lu\n",line,pos); gt_bitsequence_tostring_units(buffer,(GtBitsequence) kmer1,2U); fprintf(stderr,"kmer1=%s\n",buffer); gt_bitsequence_tostring_units(buffer,(GtBitsequence) kmer2,2U); fprintf(stderr,"kmer2=%s\n",buffer); fprintf(stderr,"kmer1=%lu != %lu= kmer2\n",kmer1,kmer2); } static void scbs_init(Singlecharacterbitstreamstate *scbs, const GtTwobitencoding *twobitencoding, unsigned int kmersize) { scbs->tbptr = twobitencoding; if (kmersize == 0) { scbs->currentencoding = 0; scbs->shiftright = 0; } else { scbs->currentencoding = *(scbs->tbptr++); gt_assert(2U * kmersize < (unsigned int) GT_INTWORDSIZE); scbs->shiftright = GT_INTWORDSIZE - GT_MULT2(kmersize); } } static inline GtUchar scbs_next(Singlecharacterbitstreamstate *scbs) { if (scbs->shiftright > 0) { scbs->shiftright -= 2; } else { scbs->currentencoding = *(scbs->tbptr++); scbs->shiftright = GT_INTWORDSIZE-2; } return (GtUchar) (scbs->currentencoding >> scbs->shiftright) & 3; } typedef struct { const GtTwobitencoding *tbptr; GtTwobitencoding currentencoding; unsigned int unitoffset, shiftleft, shiftright; GtCodetype maskright; } Multicharacterbitstreamstate; static void mcbs_init(Multicharacterbitstreamstate *mcbs, const GtTwobitencoding *twobitencoding, unsigned int kmersize) { mcbs->tbptr = twobitencoding; mcbs->unitoffset = 0; mcbs->shiftleft = 2U; mcbs->shiftright = (unsigned int) GT_MULT2(GT_UNITSIN2BITENC - kmersize); mcbs->maskright = (GtCodetype) (1 << GT_MULT2(kmersize))-1; mcbs->currentencoding = *(mcbs->tbptr++); } static inline GtCodetype mcbs_next(Multicharacterbitstreamstate *mcbs, unsigned int kmersize) { GtCodetype kmer; if (mcbs->unitoffset <= (unsigned int) GT_UNITSIN2BITENC - kmersize) { kmer = (GtCodetype) (mcbs->currentencoding >> mcbs->shiftright) & mcbs->maskright; mcbs->shiftright-=2U; } else { kmer = (GtCodetype) ((mcbs->currentencoding << mcbs->shiftleft) | (*(mcbs->tbptr) >> (GT_MULT2(GT_UNITSIN2BITENC)-mcbs->shiftleft))) & mcbs->maskright; mcbs->shiftleft+=2; } if (mcbs->unitoffset < (unsigned int) GT_UNITSIN2BITENC-1) { mcbs->unitoffset++; } else { mcbs->unitoffset = 0; mcbs->shiftleft = 2U; mcbs->shiftright = (unsigned int) GT_MULT2(GT_UNITSIN2BITENC - kmersize); mcbs->currentencoding = *(mcbs->tbptr++); } return kmer; } static void gt_checkkmercode(GT_UNUSED void *processinfo, GT_UNUSED bool firstinrange, GT_UNUSED unsigned long pos, GT_UNUSED GtCodetype code) { #ifndef NDEBUG GtKmercodeiterator *kmercodeiterator = (GtKmercodeiterator *) processinfo; const GtKmercode *kmercodeptr; gt_assert(kmercodeiterator != NULL); kmercodeptr = gt_kmercodeiterator_encseq_nonspecial_next(kmercodeiterator); gt_assert(kmercodeptr != NULL && !kmercodeptr->definedspecialposition); gt_assert(code == kmercodeptr->code); #endif } static void multireadmode_getencseqkmers_twobitencoding(const GtEncseq *encseq, unsigned int kmersize) { GtKmercodeiterator *kmercodeiterator; int readmode_int; for (readmode_int = 0; readmode_int < 4; readmode_int++) { printf("getencseqkmers_twobitencoding(kmersize=%u,%s)\n", kmersize, gt_readmode_show((GtReadmode) readmode_int)); kmercodeiterator = gt_kmercodeiterator_encseq_new(encseq, (GtReadmode) readmode_int, kmersize,0); getencseqkmers_twobitencoding(encseq, (GtReadmode) readmode_int, kmersize, kmersize, false, gt_checkkmercode, kmercodeiterator, NULL, NULL); gt_kmercodeiterator_delete(kmercodeiterator); kmercodeiterator = NULL; } } static void gt_encseq_faststream_kmers(const GtEncseq *encseq, Bitstreamreadmode bsrsmode, unsigned int kmersize) { unsigned long totallength, pos; GtCodetype kmer; GtKmercodeiterator *kmercodeiterator = NULL; const GtKmercode *kmercodeptr; const GtTwobitencoding *twobitencoding; Multicharacterbitstreamstate mcbs; gt_assert(kmersize <= (unsigned int) GT_UNITSIN2BITENC); totallength = gt_encseq_total_length(encseq); if (totallength < (unsigned long) kmersize) { return; } twobitencoding = gt_encseq_twobitencoding_export(encseq); if (bsrsmode == BSRS_reader_multi || bsrsmode == BSRS_stream_reader_multi) { kmercodeiterator = gt_kmercodeiterator_encseq_new(encseq, GT_READMODE_FORWARD, kmersize,0); } switch (bsrsmode) { case BSRS_reader_multi: { uint64_t kmersum = 0; for (pos = 0; pos <= totallength - (unsigned long) kmersize; pos++) { kmercodeptr = gt_kmercodeiterator_encseq_next(kmercodeiterator); gt_assert(kmercodeptr != NULL); kmersum += (uint64_t) kmercodeptr->code; } printf("kmersum=" Formatuint64_t "\n",PRINTuint64_tcast(kmersum)); break; } case BSRS_stream_reader_multi: mcbs_init(&mcbs,twobitencoding,kmersize); for (pos = 0; pos <= totallength - (unsigned long) kmersize; pos++) { kmer = mcbs_next(&mcbs,kmersize); READNEXTCODEANDCHECKIGNORESPECIAL(pos); } break; case BSRS_stream_reader_multi3: multireadmode_getencseqkmers_twobitencoding(encseq,kmersize); break; case BSRS_hashfirstcodes: hashfirstcodes_getencseqkmers_twobitencoding(encseq,kmersize); break; default: break; } gt_kmercodeiterator_delete(kmercodeiterator); } void gt_encseq_faststream(const GtEncseq *encseq, Bitstreamreadmode bsrsmode, unsigned int multiarg) { const GtTwobitencoding *twobitencoding; twobitencoding = gt_encseq_twobitencoding_export(encseq); if (twobitencoding != NULL) { unsigned long idx, totallength, pos; uint64_t pairbitsum = 0, pairbitsumBF; GtUchar cc, ccesr; GtEncseqReader *esr = NULL; Singlecharacterbitstreamstate scbs; scbs_init(&scbs,twobitencoding,0); if (bsrsmode == BSRS_reader_single || bsrsmode == BSRS_stream_reader_single) { esr = gt_encseq_create_reader_with_readmode(encseq, GT_READMODE_FORWARD, 0); } totallength = gt_encseq_total_length(encseq); switch (bsrsmode) { case BSRS_stream_words: for (idx = 0; idx < gt_unitsoftwobitencoding(totallength); idx++) { pairbitsum += twobitencoding[idx]; } break; case BSRS_stream_single: for (pos = 0; pos < totallength; pos++) { cc = scbs_next(&scbs); pairbitsum += (uint64_t) cc; } pairbitsumBF = gt_encseq_pairbitsum(encseq); if (pairbitsum != pairbitsumBF) { fprintf(stderr,"pairbitsum=" Formatuint64_t "!=" Formatuint64_t "=pairbitsumBF\n", PRINTuint64_tcast(pairbitsum), PRINTuint64_tcast(pairbitsumBF)); exit(GT_EXIT_PROGRAMMING_ERROR); } break; case BSRS_reader_single: for (pos = 0; pos < totallength; pos++) { ccesr = gt_encseq_reader_next_encoded_char(esr); pairbitsum += (uint64_t) ccesr; } break; case BSRS_stream_reader_single: for (pos = 0; pos < totallength; pos++) { cc = scbs_next(&scbs); pairbitsum += (uint64_t) cc; ccesr = gt_encseq_reader_next_encoded_char(esr); pairbitsum += (uint64_t) ccesr; gt_assert(cc == ccesr || ISSPECIAL(ccesr)); } break; case BSRS_reader_multi: case BSRS_stream_reader_multi: case BSRS_stream_reader_multi3: case BSRS_hashfirstcodes: gt_encseq_faststream_kmers(encseq,bsrsmode,multiarg); break; } if (pairbitsum > 0) { printf("pairbitsum=" Formatuint64_t "\n",PRINTuint64_tcast(pairbitsum)); } gt_encseq_reader_delete(esr); } } genometools-1.5.1/src/match/twobits2kmers.h000066400000000000000000000024541211610345200207240ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TWOBITS2KMERS_H #define TWOBITS2KMERS_H #include "core/encseq_api.h" typedef enum { BSRS_stream_words, BSRS_stream_single, BSRS_reader_single, BSRS_stream_reader_single, BSRS_reader_multi, BSRS_stream_reader_multi, BSRS_stream_reader_multi3, BSRS_hashfirstcodes } Bitstreamreadmode; void gt_encseq_faststream(const GtEncseq *encseq, Bitstreamreadmode bsrsmode, unsigned int multiarg); #endif genometools-1.5.1/src/match/tyr-basic.h000066400000000000000000000023061211610345200177760ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYR_BASIC_H #define TYR_BASIC_H #include "core/arraydef.h" #include "core/divmodmul.h" #define MERSUFFIX ".mer" #define COUNTSSUFFIX ".mct" #define EXTRAINTEGERS 2 #define MERBYTES(SL) (GT_DIV4(SL) + ((GT_MOD4(SL) == 0) ? 0 : 1UL)) typedef struct { unsigned long idx, value; } Largecount; GT_DECLAREARRAYSTRUCT(Largecount); #endif genometools-1.5.1/src/match/tyr-map.c000066400000000000000000000302611211610345200174660ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/defined-types.h" #include "core/divmodmul.h" #include "core/encseq.h" #include "core/fa.h" #include "core/unused_api.h" #include "core/ma_api.h" #include "sfx-apfxlen.h" #include "tyr-basic.h" #include "tyr-map.h" struct Tyrindex { void *mappedfileptr; const char *indexfilename; unsigned int alphasize; size_t numofmers; unsigned long mersize, merbytes; GtUchar *mertable, *lastmer; }; struct Tyrcountinfo { void *mappedmctfileptr; const char *indexfilename; GtUchar *smallcounts; Largecount *largecounts; unsigned long numoflargecounts; }; unsigned long gt_decodesingleinteger(const GtUchar *start) { unsigned long idx, value; value = (unsigned long) start[0]; for (idx=1UL; idx < (unsigned long) sizeof (unsigned long); idx++) { value |= (((unsigned long) start[idx]) << GT_MULT8(idx)); } return value; } Tyrindex *gt_tyrindex_new(const char *tyrindexname,GtError *err) { bool haserr = false; size_t numofbytes, rest; Tyrindex *tyrindex; gt_error_check(err); tyrindex = gt_malloc(sizeof *tyrindex); tyrindex->indexfilename = tyrindexname; tyrindex->mappedfileptr = gt_fa_mmap_read_with_suffix(tyrindexname,MERSUFFIX, &numofbytes,err); if (tyrindex->mappedfileptr == NULL) { haserr = true; } if (!haserr) { tyrindex->mertable = (GtUchar *) tyrindex->mappedfileptr; rest = sizeof (unsigned long) * EXTRAINTEGERS; if (rest > numofbytes) { gt_error_set(err,"index must contain at least %lu bytes", (unsigned long) rest); haserr = true; } } if (!haserr) { gt_assert(tyrindex->mertable != NULL); tyrindex->mersize = gt_decodesingleinteger(tyrindex->mertable + numofbytes - rest); tyrindex->alphasize = (unsigned int) gt_decodesingleinteger(tyrindex->mertable + numofbytes - rest + sizeof (unsigned long)); tyrindex->merbytes = MERBYTES(tyrindex->mersize); if ((numofbytes - rest) % tyrindex->merbytes != 0) { gt_error_set(err,"size of index is %lu which is not a multiple of %lu", (unsigned long) (numofbytes - rest), tyrindex->merbytes); haserr = true; } } if (!haserr) { tyrindex->numofmers = (numofbytes - rest) / tyrindex->merbytes; gt_assert(tyrindex->mertable != NULL); if (tyrindex->numofmers == 0) { tyrindex->lastmer = tyrindex->mertable - 1; } else { tyrindex->lastmer = tyrindex->mertable + numofbytes - rest - tyrindex->merbytes; } } if (haserr) { if (tyrindex->mappedfileptr != NULL) { gt_fa_xmunmap(tyrindex->mappedfileptr); tyrindex->mappedfileptr = NULL; } gt_free(tyrindex); } return haserr ? NULL : tyrindex; } void gt_tyrindex_show(const Tyrindex *tyrindex) { printf("# indexfilename = %s\n",tyrindex->indexfilename); printf("# alphasize = %u\n",tyrindex->alphasize); printf("# mersize = %lu\n",tyrindex->mersize); printf("# numofmers = %lu\n",(unsigned long) tyrindex->numofmers); printf("# merbytes = %lu\n",tyrindex->merbytes); } bool gt_tyrindex_isempty(const Tyrindex *tyrindex) { return tyrindex->numofmers == 0 ? true : false; } const GtUchar *gt_tyrindex_mertable(const Tyrindex *tyrindex) { return tyrindex->mertable; } const GtUchar *gt_tyrindex_lastmer(const Tyrindex *tyrindex) { return tyrindex->lastmer; } unsigned long gt_tyrindex_merbytes(const Tyrindex *tyrindex) { return tyrindex->merbytes; } unsigned long gt_tyrindex_mersize(const Tyrindex *tyrindex) { return tyrindex->mersize; } unsigned int gt_tyrindex_alphasize(const Tyrindex *tyrindex) { return tyrindex->alphasize; } unsigned long gt_tyrindex_ptr2number(const Tyrindex *tyrindex, const GtUchar *result) { return (unsigned long) (result - tyrindex->mertable)/tyrindex->merbytes; } void gt_tyrindex_delete(Tyrindex **tyrindexptr) { Tyrindex *tyrindex = *tyrindexptr; gt_fa_xmunmap(tyrindex->mappedfileptr); tyrindex->mappedfileptr = NULL; gt_free(tyrindex); *tyrindexptr = NULL; } Tyrcountinfo *gt_tyrcountinfo_new(const Tyrindex *tyrindex, const char *tyrindexname, GtError *err) { size_t numofbytes; void *tmp; bool haserr = false; Tyrcountinfo *tyrcountinfo; gt_error_check(err); tyrcountinfo = gt_malloc(sizeof *tyrcountinfo); tyrcountinfo->indexfilename = tyrindexname; tyrcountinfo->mappedmctfileptr = gt_fa_mmap_read_with_suffix(tyrindexname,COUNTSSUFFIX,&numofbytes,err); if (tyrcountinfo->mappedmctfileptr == NULL) { tyrcountinfo->smallcounts = NULL; haserr = true; } else { tyrcountinfo->smallcounts = (GtUchar *) tyrcountinfo->mappedmctfileptr; tmp = &tyrcountinfo->smallcounts[tyrindex->numofmers]; tyrcountinfo->largecounts = (Largecount *) tmp; if (numofbytes < tyrindex->numofmers) { gt_error_set(err,"size of file \"%s.%s\" is smaller than minimum size " "%lu",tyrindexname,COUNTSSUFFIX, (unsigned long) tyrindex->numofmers); haserr = true; } } if (!haserr && (numofbytes - tyrindex->numofmers) % sizeof (Largecount) != 0) { gt_error_set(err,"(numofbytes - numofmers) = %lu must be a multiple of %lu", (unsigned long) (numofbytes - tyrindex->numofmers), (unsigned long) sizeof (Largecount)); haserr = true; } if (!haserr) { tyrcountinfo->numoflargecounts = (unsigned long) (numofbytes - tyrindex->numofmers)/ (unsigned long) sizeof (Largecount); } if (haserr) { if (tyrcountinfo->mappedmctfileptr != NULL) { gt_fa_xmunmap(tyrcountinfo->mappedmctfileptr); tyrcountinfo->mappedmctfileptr = NULL; } gt_free(tyrcountinfo); } return haserr ? NULL : tyrcountinfo; } static /*@null@*/ const Largecount *binsearchLargecount(unsigned long key, const Largecount *left, const Largecount *right) { const Largecount *leftptr = left, *midptr, *rightptr = right; unsigned long len; while (leftptr<=rightptr) { len = (unsigned long) (rightptr-leftptr); midptr = leftptr + GT_DIV2(len); /* halve len */ if (key < midptr->idx) { rightptr = midptr-1; } else { if (key > midptr->idx) { leftptr = midptr + 1; } else { return midptr; } } } return NULL; } unsigned long gt_tyrcountinfo_get(const Tyrcountinfo *tyrcountinfo, unsigned long mernumber) { if (tyrcountinfo->smallcounts[mernumber] == 0) { const Largecount *lc = binsearchLargecount(mernumber, tyrcountinfo->largecounts, tyrcountinfo->largecounts + tyrcountinfo->numoflargecounts-1); #ifndef NDEBUG if (lc == NULL) { fprintf(stderr,"cannot find count for mer number %lu",mernumber); exit(GT_EXIT_PROGRAMMING_ERROR); } #endif gt_assert (lc != NULL); return lc->value; } return (unsigned long) tyrcountinfo->smallcounts[mernumber]; } void gt_tyrcountinfo_delete(Tyrcountinfo **tyrcountinfoptr) { Tyrcountinfo *tyrcountinfo = *tyrcountinfoptr; gt_fa_xmunmap(tyrcountinfo->mappedmctfileptr); tyrcountinfo->mappedmctfileptr = NULL; gt_free(tyrcountinfo); *tyrcountinfoptr = NULL; } static int mymemcmp(unsigned long *offset,const GtUchar *s1,const GtUchar *s2, unsigned long len) { unsigned long idx; for (idx=*offset; idx s2[idx]) { *offset = idx; return 1; } } return 0; } /*@null@*/ const GtUchar *gt_tyrindex_binmersearch(const Tyrindex *tyrindex, unsigned long offset, const GtUchar *key, const GtUchar *leftbound, const GtUchar *rightbound) { const GtUchar *leftptr, *midptr, *rightptr; int cmpval; unsigned long leftlength = offset, rightlength = offset, len; leftptr = leftbound; rightptr = rightbound; while (leftptr <= rightptr) { len = (unsigned long) (rightptr-leftptr)/GT_MULT2(tyrindex->merbytes); midptr = leftptr + tyrindex->merbytes * len; cmpval = mymemcmp(&offset,midptr,key,tyrindex->merbytes); if (cmpval < 0) { leftptr = midptr + tyrindex->merbytes; leftlength = offset; if (offset > rightlength) { offset = rightlength; } } else { if (cmpval > 0) { rightptr = midptr - tyrindex->merbytes; rightlength = offset; if (offset > leftlength) { offset = leftlength; } } else { return midptr; } } } return NULL; } void gt_tyrindex_check(GT_UNUSED const Tyrindex *tyrindex) { #ifndef NDEBUG GtUchar *mercodeptr; const GtUchar *result; unsigned long position; GT_UNUSED unsigned long previousposition = 0; for (mercodeptr = tyrindex->mertable; mercodeptr <= tyrindex->lastmer; mercodeptr += tyrindex->merbytes) { result = gt_tyrindex_binmersearch(tyrindex,0,mercodeptr, tyrindex->mertable, tyrindex->lastmer); gt_assert(result != NULL); if ((result - tyrindex->mertable) % tyrindex->merbytes != 0) { fprintf(stderr,"result is not multiple of %lu\n",tyrindex->merbytes); exit(GT_EXIT_PROGRAMMING_ERROR); } position = (unsigned long) (result-tyrindex->mertable)/ tyrindex->merbytes; if (position > 0 && previousposition + 1 != position) { fprintf(stderr,"position %lu is not increasing\n",position); exit(GT_EXIT_PROGRAMMING_ERROR); } previousposition = position; } #endif } int gt_determinetyrbckpfxlen(unsigned int *prefixlength, const Tyrindex *tyrindex, const Definedunsignedint *callprefixlength, GtError *err) { gt_error_check(err); if (callprefixlength->defined) { unsigned int maxprefixlen = gt_whatisthemaximalprefixlength(tyrindex->alphasize, (unsigned long) tyrindex->numofmers, 0,true); if (maxprefixlen > (unsigned int) tyrindex->mersize) { maxprefixlen = (unsigned int) tyrindex->mersize; } if (gt_checkprefixlength(maxprefixlen,callprefixlength->valueunsignedint, err) != 0) { return -1; } *prefixlength = callprefixlength->valueunsignedint; } else { unsigned int recommendedprefixlength = gt_recommendedprefixlength(tyrindex->alphasize, (unsigned long) tyrindex->numofmers, GT_RECOMMENDED_MULTIPLIER_DEFAULT, true); if (recommendedprefixlength > (unsigned int) tyrindex->mersize) { recommendedprefixlength = (unsigned int) tyrindex->mersize; } *prefixlength = recommendedprefixlength; } return 0; } genometools-1.5.1/src/match/tyr-map.h000066400000000000000000000052401211610345200174720ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYR_MAP_H #define TYR_MAP_H #include "core/str_api.h" #include "core/error_api.h" #include "core/types_api.h" #include "core/defined-types.h" typedef struct Tyrindex Tyrindex; Tyrindex *gt_tyrindex_new(const char *tyrindexname,GtError *err); const GtUchar *gt_tyrindex_mertable(const Tyrindex *tyrindex); const GtUchar *gt_tyrindex_lastmer(const Tyrindex *tyrindex); unsigned long gt_tyrindex_merbytes(const Tyrindex *tyrindex); unsigned int gt_tyrindex_alphasize(const Tyrindex *tyrindex); unsigned long gt_tyrindex_mersize(const Tyrindex *tyrindex); bool gt_tyrindex_isempty(const Tyrindex *tyrindex); void gt_tyrindex_show(const Tyrindex *tyrindex); void gt_tyrindex_delete(Tyrindex **tyrindexptr); /*@null@*/ const GtUchar *gt_tyrindex_binmersearch(const Tyrindex *tyrindex, unsigned long offset, const GtUchar *key, const GtUchar *leftbound, const GtUchar *rightbound); void gt_tyrindex_check(const Tyrindex *tyrindex); int gt_determinetyrbckpfxlen(unsigned int *prefixlength, const Tyrindex *tyrindex, const Definedunsignedint *callprefixlength, GtError *err); unsigned long gt_tyrindex_ptr2number(const Tyrindex *tyrindex, const GtUchar *result); typedef struct Tyrcountinfo Tyrcountinfo; Tyrcountinfo *gt_tyrcountinfo_new(const Tyrindex *tyrindex, const char *tyrindexname, GtError *err); unsigned long gt_tyrcountinfo_get(const Tyrcountinfo *tyrcountinfo, unsigned long mernumber); void gt_tyrcountinfo_delete(Tyrcountinfo **tyrcountinfoptr); #endif genometools-1.5.1/src/match/tyr-mersplit.c000066400000000000000000000343751211610345200205620ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/defined-types.h" #include "core/divmodmul.h" #include "core/fa.h" #include "core/intbits.h" #include "core/mathsupport.h" #include "core/minmax.h" #include "core/str_api.h" #include "core/types_api.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "core/ma_api.h" #include "tyr-map.h" #include "tyr-mersplit.h" #define BUCKETSUFFIX ".mbd" #define MAXUCHARVALUEWITHBITS(BITNUM) ((1 << (BITNUM)) - 1) #define ISBOUNDDEFINED(UDB,IDX) GT_ISIBITSET(UDB,IDX) #define SETDEFINEDBOUND(UDB,IDX) GT_SETIBIT(UDB,IDX) struct Tyrbckinfo { void *mappedmbdfileptr; unsigned int prefixlength; unsigned long numofcodes, *boundisdefined, *bounds; GtUchar remainmask; }; typedef struct { const GtUchar *leftmer, *rightmer; } Merbounds; static unsigned long extractprefixbytecode(unsigned long merbytes, unsigned int prefixlength, const GtUchar *bytecode) { unsigned long idx, code = 0; for (idx=0; idx < MIN((unsigned long) sizeof (unsigned long),merbytes); idx++) { code = (code << 8) | bytecode[idx]; if (GT_MULT4(idx+1) == (unsigned long) prefixlength) { break; } if (GT_MULT4(idx+1) > (unsigned long) prefixlength) { code >>= GT_MULT2(GT_MULT4(idx+1) - prefixlength); break; } } return code; } static GtUchar extractremainingbytes(const GtUchar remainmask, unsigned long byteoffset, const GtUchar *bytecode) { return bytecode[byteoffset] & remainmask; } static const GtUchar *remainingleftmost(unsigned long merbytes, unsigned long byteoffset, GtUchar remainmask, GtUchar code, const GtUchar *leftptr, const GtUchar *rightptr) { unsigned long len; GtUchar midcode; const GtUchar *midptr; while (leftptr + merbytes < rightptr) { len = (unsigned long) (rightptr-leftptr)/GT_MULT2(merbytes); midptr = leftptr + merbytes * len; midcode = extractremainingbytes(remainmask,byteoffset,midptr); if (code <= midcode) { rightptr = midptr; } else { leftptr = midptr; } } return rightptr; } static const GtUchar *remainingrightmost(unsigned long merbytes, unsigned long byteoffset, GtUchar remainmask, GtUchar code, const GtUchar *leftptr, const GtUchar *rightptr) { unsigned long len; GtUchar midcode; const GtUchar *midptr; while (leftptr + merbytes < rightptr) { len = (unsigned long) (rightptr-leftptr)/GT_MULT2(merbytes); midptr = leftptr + merbytes * len; midcode = extractremainingbytes(remainmask,byteoffset,midptr); if (code >= midcode) { leftptr = midptr; } else { rightptr = midptr; } } return leftptr; } static bool remainadvance(Merbounds *merbounds, unsigned long merbytes, unsigned long byteoffset, GtUchar remainmask, const GtUchar *searchbytecode, const GtUchar *leftptr, const GtUchar *rightptr) { GtUchar scode, scodeleft, scoderight; scode = extractremainingbytes(remainmask,byteoffset,searchbytecode); scodeleft = extractremainingbytes(remainmask,byteoffset,leftptr); if (scode > scodeleft) { scoderight = extractremainingbytes(remainmask,byteoffset,rightptr); if (scode > scoderight) { return false; } merbounds->leftmer = remainingleftmost(merbytes, byteoffset, remainmask, scode, leftptr, rightptr); } if (scode < scodeleft) { return false; } if (scode == scodeleft) { merbounds->leftmer = leftptr; } scoderight = extractremainingbytes(remainmask,byteoffset,rightptr); if (scode >= scoderight) { merbounds->rightmer = rightptr; } else { merbounds->rightmer = remainingrightmost(merbytes, byteoffset, remainmask, scode, leftptr, rightptr); } return true; } const GtUchar *gt_searchinbuckets(const Tyrindex *tyrindex, const Tyrbckinfo *tyrbckinfo, const GtUchar *bytecode) { const GtUchar *result; unsigned long prefixcode, leftbound, merbytes; gt_assert(tyrbckinfo != NULL); merbytes = gt_tyrindex_merbytes(tyrindex); prefixcode = extractprefixbytecode(merbytes, tyrbckinfo->prefixlength, bytecode); leftbound = tyrbckinfo->bounds[prefixcode]; if (ISBOUNDDEFINED(tyrbckinfo->boundisdefined,prefixcode)) { const GtUchar *mertable; unsigned long rightbound; mertable = gt_tyrindex_mertable(tyrindex); rightbound = tyrbckinfo->bounds[prefixcode+1] - merbytes; if (GT_MOD4(tyrbckinfo->prefixlength) == 0) { result = gt_tyrindex_binmersearch(tyrindex, (unsigned long) GT_DIV4(tyrbckinfo->prefixlength), bytecode, mertable + leftbound, mertable + rightbound); } else { Merbounds merbounds; merbounds.leftmer = merbounds.rightmer = NULL; if (!remainadvance(&merbounds, merbytes, (unsigned long) GT_DIV4(tyrbckinfo->prefixlength), tyrbckinfo->remainmask, bytecode, mertable + leftbound, mertable + rightbound) || merbounds.leftmer == NULL || merbounds.leftmer > merbounds.rightmer) { result = NULL; } else { result = gt_tyrindex_binmersearch(tyrindex, 1UL + (unsigned long) GT_DIV4(tyrbckinfo->prefixlength), bytecode, merbounds.leftmer, merbounds.rightmer); } } } else { result = NULL; } return result; } static const GtUchar *findrightmostmer(unsigned long merbytes, unsigned int prefixlength, unsigned long code, const GtUchar *leftptr, const GtUchar *rightptr) { unsigned long len, midcode; const GtUchar *midptr; while (leftptr + merbytes < rightptr) { len = (unsigned long) (rightptr-leftptr)/GT_MULT2(merbytes); midptr = leftptr + merbytes * len; midcode = extractprefixbytecode(merbytes,prefixlength,midptr); if (midcode > code) { rightptr = midptr; } else { leftptr = midptr; } } return leftptr; } static void splitmerinterval(Tyrbckinfo *tyrbckinfo, const Tyrindex *tyrindex) { const GtUchar *rightbound, *leftptr, *rightptr, *mertable, *lastmer; unsigned long code, leftcode, rightcode, merbytes; mertable = gt_tyrindex_mertable(tyrindex); lastmer = gt_tyrindex_lastmer(tyrindex); merbytes = gt_tyrindex_merbytes(tyrindex); leftptr = mertable; rightptr = lastmer; rightcode = extractprefixbytecode(merbytes, tyrbckinfo->prefixlength, rightptr); while (true) { leftcode = extractprefixbytecode(merbytes, tyrbckinfo->prefixlength, leftptr); tyrbckinfo->bounds[leftcode] = (unsigned long) (leftptr - mertable); SETDEFINEDBOUND(tyrbckinfo->boundisdefined,leftcode); if (leftcode == rightcode) { break; } rightbound = findrightmostmer(merbytes, tyrbckinfo->prefixlength, leftcode,leftptr,rightptr); leftptr = rightbound + merbytes; } tyrbckinfo->bounds[tyrbckinfo->numofcodes] = (unsigned long) (lastmer + merbytes - mertable); SETDEFINEDBOUND(tyrbckinfo->boundisdefined,tyrbckinfo->numofcodes); for (code = tyrbckinfo->numofcodes - 1; /* Nothing */ ; code--) { if (!ISBOUNDDEFINED(tyrbckinfo->boundisdefined,code)) { tyrbckinfo->bounds[code] = tyrbckinfo->bounds[code+1]; } if (code == 0) { break; } } } int gt_constructmerbuckets(const char *inputindex, const Definedunsignedint *callprefixlength, GtError *err) { Tyrindex *tyrindex; Tyrbckinfo tyrbckinfo; FILE *bucketfp = NULL; bool haserr = false; gt_error_check(err); tyrbckinfo.bounds = NULL; tyrbckinfo.boundisdefined = NULL; tyrindex = gt_tyrindex_new(inputindex,err); if (tyrindex == NULL) { haserr = true; } if (!haserr && tyrindex != NULL && !gt_tyrindex_isempty(tyrindex)) { if (gt_determinetyrbckpfxlen(&tyrbckinfo.prefixlength, tyrindex, callprefixlength, err) != 0) { haserr = true; } } if (!haserr && tyrindex != NULL && !gt_tyrindex_isempty(tyrindex)) { printf("# construct mer buckets for prefixlength %u\n", tyrbckinfo.prefixlength); tyrbckinfo.numofcodes = gt_power_for_small_exponents(gt_tyrindex_alphasize(tyrindex), tyrbckinfo.prefixlength); tyrbckinfo.mappedmbdfileptr = NULL; printf("# numofcodes = %lu\n",tyrbckinfo.numofcodes); gt_tyrindex_show(tyrindex); tyrbckinfo.bounds = gt_malloc(sizeof *tyrbckinfo.bounds * (tyrbckinfo.numofcodes+1)); GT_INITBITTAB(tyrbckinfo.boundisdefined,tyrbckinfo.numofcodes+1); splitmerinterval(&tyrbckinfo,tyrindex); bucketfp = gt_fa_fopen_with_suffix(inputindex,BUCKETSUFFIX,"wb",err); if (bucketfp == NULL) { haserr = true; } } if (!haserr && tyrindex != NULL && !gt_tyrindex_isempty(tyrindex)) { unsigned long pl_long = (unsigned long) tyrbckinfo.prefixlength; gt_assert(bucketfp != NULL); gt_xfwrite(&pl_long, sizeof (pl_long), (size_t) 1, bucketfp); } if (!haserr && tyrindex != NULL && !gt_tyrindex_isempty(tyrindex)) { gt_assert(bucketfp != NULL); gt_xfwrite(tyrbckinfo.bounds, sizeof (*tyrbckinfo.bounds), (size_t) (tyrbckinfo.numofcodes+1), bucketfp); } if (!haserr && tyrindex != NULL && !gt_tyrindex_isempty(tyrindex)) { gt_assert(bucketfp != NULL); gt_xfwrite(tyrbckinfo.boundisdefined, sizeof (*tyrbckinfo.boundisdefined), GT_NUMOFINTSFORBITS(tyrbckinfo.numofcodes+1), bucketfp); } gt_fa_xfclose(bucketfp); if (tyrindex != NULL) { gt_tyrindex_delete(&tyrindex); } gt_free(tyrbckinfo.bounds); gt_free(tyrbckinfo.boundisdefined); return haserr ? -1 : 0; } Tyrbckinfo *gt_tyrbckinfo_new(const char *tyrindexname,unsigned int alphasize, GtError *err) { size_t numofbytes; Tyrbckinfo *tyrbckinfo; bool haserr = false; tyrbckinfo = gt_malloc(sizeof *tyrbckinfo); tyrbckinfo->mappedmbdfileptr = gt_fa_mmap_read_with_suffix(tyrindexname, BUCKETSUFFIX, &numofbytes,err); if (tyrbckinfo->mappedmbdfileptr == NULL) { haserr = true; } if (!haserr) { unsigned long pl_long; gt_assert(tyrbckinfo->mappedmbdfileptr != NULL); pl_long = *((unsigned long *) tyrbckinfo->mappedmbdfileptr); tyrbckinfo->prefixlength = (unsigned int) pl_long; tyrbckinfo->numofcodes = gt_power_for_small_exponents(alphasize,tyrbckinfo->prefixlength); /*check if numofbytes == expected size*/ gt_assert(numofbytes == sizeof (unsigned long) * (1UL + (tyrbckinfo->numofcodes+1) + GT_NUMOFINTSFORBITS(tyrbckinfo->numofcodes + 1))); tyrbckinfo->bounds = ((unsigned long *) tyrbckinfo->mappedmbdfileptr) + 1; tyrbckinfo->boundisdefined = tyrbckinfo->bounds + tyrbckinfo->numofcodes + 1; if (tyrbckinfo->prefixlength > 0 && GT_MOD4(tyrbckinfo->prefixlength) > 0) { tyrbckinfo->remainmask = (GtUchar) MAXUCHARVALUEWITHBITS(GT_MULT2( 4U - GT_MOD4(tyrbckinfo->prefixlength))); } } if (haserr) { gt_free(tyrbckinfo); return NULL; } return tyrbckinfo; } void gt_tyrbckinfo_delete(Tyrbckinfo **tyrbckinfoptr) { Tyrbckinfo *tyrbckinfo = *tyrbckinfoptr; gt_fa_xmunmap(tyrbckinfo->mappedmbdfileptr); tyrbckinfo->mappedmbdfileptr = NULL; gt_free(tyrbckinfo); *tyrbckinfoptr = NULL; } genometools-1.5.1/src/match/tyr-mersplit.h000066400000000000000000000030611211610345200205530ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYR_MERSPLIT_H #define TYR_MERSPLIT_H #include "core/str_api.h" #include "core/error_api.h" #include "core/defined-types.h" #include "tyr-map.h" typedef struct Tyrbckinfo Tyrbckinfo; int gt_constructmerbuckets(const char *inputindex, const Definedunsignedint *callprefixlength, GtError *err); Tyrbckinfo *gt_tyrbckinfo_new(const char *tyrindexname,unsigned int alphasize, GtError *err); void gt_tyrbckinfo_delete(Tyrbckinfo **tyrbckinfoptr); const GtUchar *gt_searchinbuckets(const Tyrindex *tyrindex, const Tyrbckinfo *tyrbckinfo, const GtUchar *bytecode); #endif genometools-1.5.1/src/match/tyr-mkindex.c000066400000000000000000000545021211610345200203540ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/alphabet.h" #include "core/divmodmul.h" #include "core/fa.h" #include "core/format64.h" #include "core/logger.h" #include "core/spacecalc.h" #include "core/str.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "core/ma_api.h" #include "esa-seqread.h" #include "esa-mmsearch.h" #include "tyr-basic.h" #include "tyr-mkindex.h" #include "echoseq.h" typedef struct /* information stored for each node of the lcp interval tree */ { unsigned long leftmostleaf, rightmostleaf, suftabrightmostleaf, lcptabrightmostleafplus1; } TyrDfsinfo; typedef int (*Processoccurrencecount)(unsigned long, unsigned long, void *, GtError *); typedef struct listUlong { unsigned long position; struct listUlong *nextptr; } ListUlong; typedef struct { unsigned long occcount; ListUlong *positionlist; } Countwithpositions; GT_DECLAREARRAYSTRUCT(Countwithpositions); typedef struct /* global information */ { unsigned long mersize, totallength, minocc, maxocc; const GtEncseq *encseq; GtReadmode readmode; Processoccurrencecount processoccurrencecount; GtArrayCountwithpositions occdistribution; FILE *merindexfpout, *countsfilefpout; GtEncseqReader *esrspace; bool performtest; bool storecounts; GtUchar *bytebuffer; unsigned long sizeofbuffer; GtArrayLargecount largecounts; unsigned long countoutputmers; const ESASuffixptr *suftab; /* only necessary for performtest */ GtUchar *currentmer; /* only necessary for performtest */ } TyrDfsstate; #include "esa-dfs.h" static uint64_t bruteforcecountnumofmers(const TyrDfsstate *state) { unsigned long idx; uint64_t numofmers = 0; for (idx=0; idx <= state->totallength - state->mersize; idx++) { if (!gt_encseq_contains_special(state->encseq, state->readmode, state->esrspace, idx, state->mersize)) { numofmers++; } } return numofmers; } static void checknumofmers(const TyrDfsstate *state, uint64_t dnumofmers) { uint64_t bfnumofmers = bruteforcecountnumofmers(state); if (dnumofmers != bfnumofmers) { fprintf(stderr,"numofmers(distribution) = " Formatuint64_t " != " Formatuint64_t, PRINTuint64_tcast(dnumofmers), PRINTuint64_tcast(bfnumofmers)); exit(GT_EXIT_PROGRAMMING_ERROR); } } static void checknumberofoccurrences(const TyrDfsstate *dfsstate, unsigned long countocc, unsigned long position) { GtMMsearchiterator *mmsi; unsigned long idx, bfcount; for (idx = 0; idx < dfsstate->mersize; idx++) { dfsstate->currentmer[idx] = gt_encseq_get_encoded_char(dfsstate->encseq,position+idx, dfsstate->readmode); } mmsi = gt_mmsearchiterator_new_complete_olain(dfsstate->encseq, dfsstate->suftab, 0, dfsstate->totallength, 0, dfsstate->readmode, dfsstate->currentmer, dfsstate->mersize); bfcount = gt_mmsearchiterator_count(mmsi); if (bfcount != countocc) { fprintf(stderr,"bfcount = %lu != %lu = countocc\n",bfcount,countocc); exit(GT_EXIT_PROGRAMMING_ERROR); } gt_mmsearchiterator_delete(mmsi); } static /*@null@*/ ListUlong *insertListUlong(ListUlong *liststart, unsigned long position) { ListUlong *newnode; newnode = gt_malloc(sizeof *newnode); newnode->position = position; newnode->nextptr = liststart; return newnode; } static void wrapListUlong(ListUlong *node) { ListUlong *tmpnext; if (node != NULL) { while (true) { if (node->nextptr == NULL) { gt_free(node); break; } tmpnext = node->nextptr; gt_free(node); node = tmpnext; } } } static void showListUlong(const GtEncseq *encseq, unsigned long mersize, const ListUlong *node) { const ListUlong *tmp; for (tmp = node; tmp != NULL; tmp = tmp->nextptr) { gt_fprintfencseq(stdout,encseq,tmp->position,mersize); (void) putchar((int) '\n'); } } static bool decideifocc(const TyrDfsstate *state,unsigned long countocc) { if (state->minocc > 0) { if (state->maxocc > 0) { if (countocc >= state->minocc && countocc <= state->maxocc) { return true; } } else { if (countocc >= state->minocc) { return true; } } } else { if (state->maxocc > 0) { if (countocc <= state->maxocc) { return true; } } } return false; } static uint64_t addupdistribution(const GtArrayCountwithpositions *distribution) { unsigned long idx; uint64_t addcount = 0; for (idx=0; idx < distribution->nextfreeCountwithpositions; idx++) { if (distribution->spaceCountwithpositions[idx].occcount > 0) { addcount += (uint64_t) (idx * distribution->spaceCountwithpositions[idx].occcount); } } return addcount; } static void showmerdistribution(const TyrDfsstate *state) { unsigned long countocc; for (countocc = 0; countocc < state->occdistribution.nextfreeCountwithpositions; countocc++) { if (state->occdistribution.spaceCountwithpositions[countocc].occcount > 0) { printf("%lu %lu\n",countocc, state->occdistribution. spaceCountwithpositions[countocc].occcount); if (decideifocc(state,countocc)) { showListUlong(state->encseq, state->mersize, state->occdistribution.spaceCountwithpositions[countocc]. positionlist); wrapListUlong(state->occdistribution.spaceCountwithpositions[countocc]. positionlist); } } } } static void showfinalstatistics(const TyrDfsstate *state, const char *inputindex, GtLogger *logger) { uint64_t dnumofmers = addupdistribution(&state->occdistribution); if (state->performtest) { checknumofmers(state,dnumofmers); } gt_logger_log(logger, "the following output refers to the set of all sequences"); gt_logger_log(logger, "represented by the index \"%s\"",inputindex); gt_logger_log(logger, "number of %lu-mers in the sequences not containing a " "wildcard: " Formatuint64_t, (unsigned long) state->mersize, PRINTuint64_tcast(dnumofmers)); gt_logger_log(logger, "show the distribution of the number of occurrences of %lu-mers", (unsigned long) state->mersize); gt_logger_log(logger,"not containing a wildcard as rows of the form " "i d where"); gt_logger_log(logger, "d is the number of events that a %lu-mer occurs exactly i times", (unsigned long) state->mersize); showmerdistribution(state); } static void incrementdistribcounts(GtArrayCountwithpositions *occdistribution, unsigned long countocc,unsigned long value) { if (countocc >= occdistribution->allocatedCountwithpositions) { const unsigned long addamount = 128UL; unsigned long idx; occdistribution->spaceCountwithpositions = gt_realloc(occdistribution->spaceCountwithpositions, sizeof *occdistribution->spaceCountwithpositions * (countocc+addamount)); for (idx=occdistribution->allocatedCountwithpositions; idxspaceCountwithpositions[idx].occcount = 0; occdistribution->spaceCountwithpositions[idx].positionlist = NULL; } occdistribution->allocatedCountwithpositions = countocc+addamount; } if (countocc + 1 > occdistribution->nextfreeCountwithpositions) { occdistribution->nextfreeCountwithpositions = countocc+1; } occdistribution->spaceCountwithpositions[countocc].occcount += value; } static int adddistpos2distribution(unsigned long countocc, unsigned long position, void *adddistposinfo, GT_UNUSED GtError *err) { TyrDfsstate *state = (TyrDfsstate *) adddistposinfo; incrementdistribcounts(&state->occdistribution,countocc,1UL); if (decideifocc(state,countocc)) { state->occdistribution.spaceCountwithpositions[countocc].positionlist = insertListUlong(state->occdistribution. spaceCountwithpositions[countocc].positionlist, position); } if (state->performtest) { checknumberofoccurrences(state,countocc,position); } return 0; } #define MAXSMALLMERCOUNT UCHAR_MAX static int outputsortedstring2indexviafileptr(const GtEncseq *encseq, unsigned long mersize, GtUchar *bytebuffer, unsigned long sizeofbuffer, FILE *merindexfpout, FILE *countsfilefpout, unsigned long position, unsigned long countocc, GtArrayLargecount *largecounts, unsigned long countoutputmers, GT_UNUSED GtError *err) { gt_encseq_sequence2bytecode(bytebuffer,encseq,position,mersize); gt_xfwrite(bytebuffer, sizeof (*bytebuffer), (size_t) sizeofbuffer, merindexfpout); if (countsfilefpout != NULL) { GtUchar smallcount; if (countocc <= MAXSMALLMERCOUNT) { smallcount = (GtUchar) countocc; } else { Largecount *lc; GT_GETNEXTFREEINARRAY(lc,largecounts,Largecount,32); lc->idx = countoutputmers; lc->value = countocc; smallcount = 0; } gt_xfwrite(&smallcount, sizeof (smallcount),(size_t) 1,countsfilefpout); } return 0; } static int outputsortedstring2index(unsigned long countocc, unsigned long position, void *adddistposinfo, GtError *err) { TyrDfsstate *state = (TyrDfsstate *) adddistposinfo; if (decideifocc(state,countocc)) { if (outputsortedstring2indexviafileptr(state->encseq, state->mersize, state->bytebuffer, state->sizeofbuffer, state->merindexfpout, state->countsfilefpout, position, countocc, &state->largecounts, state->countoutputmers, err) != 0) { return -1; } state->countoutputmers++; } return 0; } static Dfsinfo* tyr_allocateDfsinfo(GT_UNUSED Dfsstate *state) { TyrDfsinfo *dfsinfo; dfsinfo = gt_malloc(sizeof *dfsinfo); return (Dfsinfo*) dfsinfo; } static void tyr_freeDfsinfo(Dfsinfo *adfsinfo, GT_UNUSED Dfsstate *state) { TyrDfsinfo *dfsinfo = (TyrDfsinfo*) adfsinfo; gt_free(dfsinfo); } static int tyr_processleafedge(GT_UNUSED bool firstsucc, unsigned long fatherdepth, GT_UNUSED Dfsinfo *father, unsigned long leafnumber, Dfsstate *astate, GtError *err) { TyrDfsstate *state = (TyrDfsstate*) astate; gt_error_check(err); if (fatherdepth < state->mersize && leafnumber + state->mersize <= state->totallength && !gt_encseq_contains_special(state->encseq, state->readmode, state->esrspace, leafnumber + fatherdepth, state->mersize - fatherdepth)) { if (state->processoccurrencecount(1UL,leafnumber,state,err) != 0) { return -1; } } return 0; } static int tyr_processcompletenode(unsigned long nodeptrdepth, Dfsinfo *anodeptr, unsigned long nodeptrminusonedepth, Dfsstate *astate, GtError *err) { TyrDfsinfo *nodeptr = (TyrDfsinfo*) anodeptr; TyrDfsstate *state = (TyrDfsstate*) astate; gt_error_check(err); if (state->mersize <= nodeptrdepth) { unsigned long fatherdepth; fatherdepth = nodeptr->lcptabrightmostleafplus1; if (fatherdepth < nodeptrminusonedepth) { fatherdepth = nodeptrminusonedepth; } if (fatherdepth < state->mersize) { if (state->processoccurrencecount((unsigned long) (nodeptr->rightmostleaf - nodeptr->leftmostleaf + 1), nodeptr->suftabrightmostleaf, state, err) != 0) { return -1; } } } return 0; } static void tyr_assignleftmostleaf(Dfsinfo *adfsinfo,unsigned long leftmostleaf, GT_UNUSED Dfsstate *dfsstate) { TyrDfsinfo *dfsinfo = (TyrDfsinfo*) adfsinfo; dfsinfo->leftmostleaf = leftmostleaf; } static void tyr_assignrightmostleaf(Dfsinfo *adfsinfo, unsigned long currentindex, unsigned long previoussuffix, unsigned long currentlcp, GT_UNUSED Dfsstate *dfsstate) { TyrDfsinfo *dfsinfo = (TyrDfsinfo*) adfsinfo; dfsinfo->rightmostleaf = currentindex; dfsinfo->suftabrightmostleaf = previoussuffix; dfsinfo->lcptabrightmostleafplus1 = currentlcp; } static void outputbytewiseUlongvalue(FILE *fpout,unsigned long value) { size_t i; for (i=0; i < sizeof (value); i++) { (void) putc((int) (value & UCHAR_MAX),fpout); value >>= 8; } } static int enumeratelcpintervals(const char *inputindex, Sequentialsuffixarrayreader *ssar, const char *storeindex, bool storecounts, unsigned long mersize, unsigned long minocc, unsigned long maxocc, bool performtest, GtLogger *logger, GtError *err) { TyrDfsstate *state; bool haserr = false; unsigned int alphasize; gt_error_check(err); state = gt_malloc(sizeof (*state)); GT_INITARRAY(&state->occdistribution,Countwithpositions); state->esrspace = gt_encseq_create_reader_with_readmode( gt_encseqSequentialsuffixarrayreader(ssar), gt_readmodeSequentialsuffixarrayreader(ssar), 0); state->mersize = (unsigned long) mersize; state->encseq = gt_encseqSequentialsuffixarrayreader(ssar); alphasize = gt_alphabet_num_of_chars(gt_encseq_alphabet(state->encseq)); state->readmode = gt_readmodeSequentialsuffixarrayreader(ssar); state->storecounts = storecounts; state->minocc = minocc; state->maxocc = maxocc; state->totallength = gt_encseq_total_length(state->encseq); state->performtest = performtest; state->countoutputmers = 0; state->merindexfpout = NULL; state->countsfilefpout = NULL; GT_INITARRAY(&state->largecounts,Largecount); if (strlen(storeindex) == 0) { state->sizeofbuffer = 0; state->bytebuffer = NULL; } else { state->sizeofbuffer = MERBYTES(mersize); state->bytebuffer = gt_malloc(sizeof *state->bytebuffer * state->sizeofbuffer); } if (performtest) { state->currentmer = gt_malloc(sizeof *state->currentmer * state->mersize); state->suftab = gt_suftabSequentialsuffixarrayreader(ssar); } else { state->currentmer = NULL; state->suftab = NULL; } if (state->mersize > state->totallength) { gt_error_set(err,"mersize %lu > %lu = totallength not allowed", state->mersize, state->totallength); haserr = true; } else { if (strlen(storeindex) == 0) { state->processoccurrencecount = adddistpos2distribution; } else { state->merindexfpout = gt_fa_fopen_with_suffix(storeindex,MERSUFFIX, "wb",err); if (state->merindexfpout == NULL) { haserr = true; } else { if (state->storecounts) { state->countsfilefpout = gt_fa_fopen_with_suffix(storeindex,COUNTSSUFFIX,"wb",err); if (state->countsfilefpout == NULL) { haserr = true; } } } state->processoccurrencecount = outputsortedstring2index; } if (!haserr) { if (gt_depthfirstesa(ssar, tyr_allocateDfsinfo, tyr_freeDfsinfo, tyr_processleafedge, NULL, tyr_processcompletenode, tyr_assignleftmostleaf, tyr_assignrightmostleaf, (Dfsstate*) state, logger, err) != 0) { haserr = true; } if (strlen(storeindex) == 0) { showfinalstatistics(state,inputindex,logger); } } if (!haserr) { if (state->countsfilefpout != NULL) { gt_logger_log(logger,"write %lu mercounts > %lu to file \"%s%s\"", state->largecounts.nextfreeLargecount, (unsigned long) MAXSMALLMERCOUNT, storeindex, COUNTSSUFFIX); gt_xfwrite(state->largecounts.spaceLargecount, sizeof (Largecount), (size_t) state->largecounts.nextfreeLargecount, state->countsfilefpout); } } if (!haserr) { gt_logger_log(logger,"number of %lu-mers in index: %lu", mersize, state->countoutputmers); gt_logger_log(logger,"index size: %.2f megabytes\n", GT_MEGABYTES(state->countoutputmers * state->sizeofbuffer + sizeof (unsigned long) * EXTRAINTEGERS)); } } /* now out EXTRAINTEGERS integer values */ if (!haserr && state->merindexfpout != NULL) { outputbytewiseUlongvalue(state->merindexfpout, (unsigned long) state->mersize); outputbytewiseUlongvalue(state->merindexfpout,(unsigned long) alphasize); } gt_fa_xfclose(state->merindexfpout); gt_fa_xfclose(state->countsfilefpout); GT_FREEARRAY(&state->occdistribution,Countwithpositions); gt_free(state->currentmer); gt_free(state->bytebuffer); GT_FREEARRAY(&state->largecounts,Largecount); gt_encseq_reader_delete(state->esrspace); gt_free(state); return haserr ? -1 : 0; } int gt_merstatistics(const char *inputindex, unsigned long mersize, unsigned long minocc, unsigned long maxocc, const char *storeindex, bool storecounts, bool scanfile, bool performtest, GtLogger *logger, GtError *err) { bool haserr = false; Sequentialsuffixarrayreader *ssar; gt_error_check(err); ssar = gt_newSequentialsuffixarrayreaderfromfile(inputindex, SARR_LCPTAB | SARR_SUFTAB | SARR_ESQTAB, (scanfile && !performtest) ? SEQ_scan : SEQ_mappedboth, logger, err); if (ssar == NULL) { haserr = true; } if (!haserr) { if (enumeratelcpintervals(inputindex, ssar, storeindex, storecounts, mersize, minocc, maxocc, performtest, logger, err) != 0) { haserr = true; } } if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } return haserr ? -1 : 0; } genometools-1.5.1/src/match/tyr-mkindex.h000066400000000000000000000026041211610345200203550ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYR_MKINDEX_H #define TYR_MKINDEX_H #include #include "core/str.h" #include "core/error_api.h" #include "core/logger.h" int gt_merstatistics(const char *inputindex, unsigned long mersize, unsigned long minocc, unsigned long maxocc, const char *storeindex, bool storecounts, bool scanfile, bool performtest, GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/tyr-occratio.c000066400000000000000000000226211211610345200205150ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/str.h" #include "core/unused_api.h" #include "core/logger.h" #include "core/ma_api.h" #include "esa-seqread.h" #include "tyr-occratio.h" typedef struct /* information stored for each node of the lcp interval tree */ { unsigned long leftmostleaf, rightmostleaf, lcptabrightmostleafplus1; } OccDfsinfo; typedef struct /* global information */ { const GtEncseq *encseq; GtReadmode readmode; unsigned long totallength; unsigned long minmersize, maxmersize; GtArrayuint64_t *uniquedistribution, *nonuniquedistribution, *nonuniquemultidistribution; } OccDfsstate; #include "esa-dfs.h" static Dfsinfo* occ_allocateDfsinfo(GT_UNUSED Dfsstate *state) { OccDfsinfo *dfsinfo; dfsinfo = gt_malloc(sizeof *dfsinfo); return (Dfsinfo *) dfsinfo; } static void occ_freeDfsinfo(Dfsinfo *adfsinfo, GT_UNUSED Dfsstate *state) { OccDfsinfo *dfsinfo = (OccDfsinfo*) adfsinfo; gt_free(dfsinfo); } static void adddistributionuint64_t(GtArrayuint64_t *occdistribution, unsigned long countocc, unsigned long value) { if (countocc >= occdistribution->allocateduint64_t) { const unsigned long addamount = 128UL; unsigned long idx; occdistribution->spaceuint64_t = gt_realloc(occdistribution->spaceuint64_t, sizeof *occdistribution->spaceuint64_t * (countocc+addamount)); for (idx=occdistribution->allocateduint64_t; idxspaceuint64_t[idx] = 0; } occdistribution->allocateduint64_t = countocc+addamount; } if (countocc + 1 > occdistribution->nextfreeuint64_t) { occdistribution->nextfreeuint64_t = countocc+1; } occdistribution->spaceuint64_t[countocc] += value; } static void iteritvdistribution(GtArrayuint64_t *distribution, const GtEncseq *encseq, GtReadmode readmode, unsigned long totallength, unsigned long minmersize, unsigned long maxmersize, unsigned long length, unsigned long startpos) { if (length <= (unsigned long) maxmersize) { unsigned long ulen, pos; for (ulen = length, pos = startpos + length - 1; ulen <= (unsigned long) maxmersize && pos < totallength && ISNOTSPECIAL(gt_encseq_get_encoded_char(encseq,pos,readmode)); pos++, ulen++) { if (ulen >= (unsigned long) minmersize) { adddistributionuint64_t(distribution,(unsigned long) ulen,1UL); } } } } static int occ_processleafedge(GT_UNUSED bool firstsucc, unsigned long fatherdepth, GT_UNUSED Dfsinfo *father, unsigned long leafnumber, Dfsstate *astate, GT_UNUSED GtError *err) { OccDfsstate *state = (OccDfsstate*) astate; iteritvdistribution(state->uniquedistribution, state->encseq, state->readmode, state->totallength, state->minmersize, state->maxmersize, fatherdepth+1, leafnumber); return 0; } static int occ_processcompletenode(unsigned long nodeptrdepth, Dfsinfo *anodeptr, unsigned long nodeptrminusonedepth, Dfsstate *astate, GT_UNUSED GtError *err) { unsigned long fatherdepth; unsigned long startlength, endlength; OccDfsinfo *nodeptr = (OccDfsinfo*) anodeptr; OccDfsstate *state = (OccDfsstate*) astate; fatherdepth = nodeptr->lcptabrightmostleafplus1; if (fatherdepth < nodeptrminusonedepth) { fatherdepth = nodeptrminusonedepth; } startlength = (unsigned long) (fatherdepth + 1); if (startlength < state->minmersize) { startlength = state->minmersize; } endlength = (unsigned long) nodeptrdepth; if (endlength > state->maxmersize) { endlength = state->maxmersize; } if (startlength <= endlength) { unsigned long lenval; unsigned long occcount = nodeptr->rightmostleaf - nodeptr->leftmostleaf + 1; for (lenval = startlength; lenval <= endlength; lenval++) { adddistributionuint64_t(state->nonuniquemultidistribution, lenval, (unsigned long) occcount); adddistributionuint64_t(state->nonuniquedistribution, lenval, 1UL); } } return 0; } static void occ_assignleftmostleaf(Dfsinfo *adfsinfo,unsigned long leftmostleaf, GT_UNUSED Dfsstate *dfsstate) { OccDfsinfo *dfsinfo = (OccDfsinfo*) adfsinfo; dfsinfo->leftmostleaf = leftmostleaf; } static void occ_assignrightmostleaf(Dfsinfo *adfsinfo, unsigned long currentindex, GT_UNUSED unsigned long previoussuffix, unsigned long currentlcp, GT_UNUSED Dfsstate *dfsstate) { OccDfsinfo *dfsinfo = (OccDfsinfo*) adfsinfo; dfsinfo->rightmostleaf = currentindex; dfsinfo->lcptabrightmostleafplus1 = currentlcp; } static int computeoccurrenceratio(Sequentialsuffixarrayreader *ssar, unsigned long minmersize, unsigned long maxmersize, GtArrayuint64_t *uniquedistribution, GtArrayuint64_t *nonuniquedistribution, GtArrayuint64_t *nonuniquemultidistribution, GtLogger *logger, GtError *err) { OccDfsstate *state; bool haserr = false; gt_error_check(err); state = gt_malloc(sizeof (*state)); state->encseq = gt_encseqSequentialsuffixarrayreader(ssar); state->readmode = gt_readmodeSequentialsuffixarrayreader(ssar); state->totallength = gt_encseq_total_length(state->encseq); state->minmersize = minmersize; state->maxmersize = maxmersize; state->uniquedistribution = uniquedistribution; state->nonuniquedistribution = nonuniquedistribution; state->nonuniquemultidistribution = nonuniquemultidistribution; if (gt_depthfirstesa(ssar, occ_allocateDfsinfo, occ_freeDfsinfo, occ_processleafedge, NULL, occ_processcompletenode, occ_assignleftmostleaf, occ_assignrightmostleaf, (Dfsstate*) state, logger, err) != 0) { haserr = true; } gt_free(state); return haserr ? -1 : 0; } int gt_tyr_occratio_func(const char *inputindex, bool scanfile, unsigned long minmersize, unsigned long maxmersize, GtArrayuint64_t *uniquedistribution, GtArrayuint64_t *nonuniquedistribution, GtArrayuint64_t *nonuniquemultidistribution, GtLogger *logger, GtError *err) { bool haserr = false; Sequentialsuffixarrayreader *ssar; gt_error_check(err); ssar = gt_newSequentialsuffixarrayreaderfromfile(inputindex, SARR_LCPTAB | SARR_SUFTAB | SARR_ESQTAB, scanfile ? SEQ_scan : SEQ_mappedboth, logger, err); if (ssar == NULL) { haserr = true; } if (!haserr) { if (computeoccurrenceratio(ssar, minmersize, maxmersize, uniquedistribution, nonuniquedistribution, nonuniquemultidistribution, logger, err) != 0) { haserr = true; } } if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } return haserr ? -1 : 0; } genometools-1.5.1/src/match/tyr-occratio.h000066400000000000000000000027371211610345200205300ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYR_OCCRATIO_H #define TYR_OCCRATIO_H #include #include "core/str.h" #include "core/error_api.h" #include "core/arraydef.h" #include "core/logger.h" int gt_tyr_occratio_func(const char *inputindex, bool scanfile, unsigned long minmersize, unsigned long maxmersize, GtArrayuint64_t *uniquedistribution, GtArrayuint64_t *nonuniquedistribution, GtArrayuint64_t *nonuniquemultidistribution, GtLogger *logger, GtError *err); #endif genometools-1.5.1/src/match/tyr-search.c000066400000000000000000000232071211610345200201600ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/alphabet.h" #include "core/fa.h" #include "core/unused_api.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "core/chardef.h" #include "core/format64.h" #include "core/encseq.h" #include "core/ma_api.h" #include "revcompl.h" #include "tyr-map.h" #include "tyr-search.h" #include "tyr-show.h" #include "tyr-mersplit.h" typedef struct { GtUchar *bytecode, /* buffer for encoded word to be searched */ *rcbuf; const GtUchar *mertable, *lastmer; unsigned long mersize; unsigned int showmode, searchstrand; GtAlphabet *dnaalpha; } Tyrsearchinfo; static void gt_tyrsearchinfo_init(Tyrsearchinfo *tyrsearchinfo, const Tyrindex *tyrindex, unsigned int showmode, unsigned int searchstrand) { unsigned long merbytes; merbytes = gt_tyrindex_merbytes(tyrindex); tyrsearchinfo->mersize = gt_tyrindex_mersize(tyrindex); tyrsearchinfo->mertable = gt_tyrindex_mertable(tyrindex); tyrsearchinfo->lastmer = gt_tyrindex_lastmer(tyrindex); tyrsearchinfo->showmode = showmode; tyrsearchinfo->searchstrand = searchstrand; tyrsearchinfo->dnaalpha = gt_alphabet_new_dna(); tyrsearchinfo->bytecode = gt_malloc(sizeof *tyrsearchinfo->bytecode * merbytes); tyrsearchinfo->rcbuf = gt_malloc(sizeof *tyrsearchinfo->rcbuf * tyrsearchinfo->mersize); } static void gt_tyrsearchinfo_delete(Tyrsearchinfo *tyrsearchinfo) { if (tyrsearchinfo != NULL) { gt_alphabet_delete(tyrsearchinfo->dnaalpha); gt_free(tyrsearchinfo->bytecode); gt_free(tyrsearchinfo->rcbuf); } } /*@null@*/ const GtUchar *gt_searchsinglemer(const GtUchar *qptr, const Tyrindex *tyrindex, const Tyrsearchinfo *tyrsearchinfo, const Tyrbckinfo *tyrbckinfo) { const GtUchar *result; gt_encseq_plainseq2bytecode(tyrsearchinfo->bytecode,qptr, tyrsearchinfo->mersize); if (tyrbckinfo == NULL) { result = gt_tyrindex_binmersearch(tyrindex,0,tyrsearchinfo->bytecode, tyrsearchinfo->mertable, tyrsearchinfo->lastmer); } else { result = gt_searchinbuckets(tyrindex,tyrbckinfo,tyrsearchinfo->bytecode); } return result; } #define ADDTABULATOR\ if (firstitem)\ {\ firstitem = false;\ } else\ {\ (void) putchar('\t');\ } static void mermatchoutput(const Tyrindex *tyrindex, const Tyrcountinfo *tyrcountinfo, const Tyrsearchinfo *tyrsearchinfo, const GtUchar *result, const GtUchar *query, const GtUchar *qptr, uint64_t unitnum, bool forward) { bool firstitem = true; unsigned long queryposition; queryposition = (unsigned long) (qptr-query); if (tyrsearchinfo->showmode & SHOWQSEQNUM) { printf(Formatuint64_t,PRINTuint64_tcast(unitnum)); firstitem = false; } if (tyrsearchinfo->showmode & SHOWQPOS) { ADDTABULATOR; printf("%c%lu",forward ? '+' : '-',queryposition); } if (tyrsearchinfo->showmode & SHOWCOUNTS) { unsigned long mernumber = gt_tyrindex_ptr2number(tyrindex,result); ADDTABULATOR; printf("%lu",gt_tyrcountinfo_get(tyrcountinfo,mernumber)); } if (tyrsearchinfo->showmode & SHOWSEQUENCE) { ADDTABULATOR; gt_alphabet_decode_seq_to_fp(tyrsearchinfo->dnaalpha, stdout, qptr, tyrsearchinfo->mersize); } if (tyrsearchinfo->showmode & (SHOWSEQUENCE | SHOWQPOS | SHOWCOUNTS)) { (void) putchar('\n'); } } static void singleseqtyrsearch(const Tyrindex *tyrindex, const Tyrcountinfo *tyrcountinfo, const Tyrsearchinfo *tyrsearchinfo, const Tyrbckinfo *tyrbckinfo, uint64_t unitnum, const GtUchar *query, unsigned long querylen, GT_UNUSED const char *desc) { const GtUchar *qptr, *result; unsigned long offset, skipvalue; if (tyrsearchinfo->mersize > querylen) { return; } qptr = query; offset = 0; while (qptr <= query + querylen - tyrsearchinfo->mersize) { skipvalue = containsspecialbytestring(qptr,offset,tyrsearchinfo->mersize); if (skipvalue == tyrsearchinfo->mersize) { offset = tyrsearchinfo->mersize-1; if (tyrsearchinfo->searchstrand & STRAND_FORWARD) { result = gt_searchsinglemer(qptr,tyrindex,tyrsearchinfo,tyrbckinfo); if (result != NULL) { mermatchoutput(tyrindex, tyrcountinfo, tyrsearchinfo, result, query, qptr, unitnum, true); } } if (tyrsearchinfo->searchstrand & STRAND_REVERSE) { gt_assert(tyrsearchinfo->rcbuf != NULL); gt_copy_reversecomplement(tyrsearchinfo->rcbuf,qptr, tyrsearchinfo->mersize); result = gt_searchsinglemer(tyrsearchinfo->rcbuf,tyrindex, tyrsearchinfo,tyrbckinfo); if (result != NULL) { mermatchoutput(tyrindex, tyrcountinfo, tyrsearchinfo, result, query, qptr, unitnum, false); } } qptr++; } else { offset = 0; qptr += (skipvalue+1); } } } int gt_tyrsearch(const char *tyrindexname, const GtStrArray *queryfilenames, unsigned int showmode, unsigned int searchstrand, bool verbose, bool performtest, GtError *err) { Tyrindex *tyrindex; Tyrcountinfo *tyrcountinfo = NULL; Tyrbckinfo *tyrbckinfo = NULL; bool haserr = false; gt_error_check(err); tyrindex = gt_tyrindex_new(tyrindexname,err); if (tyrindex == NULL) { haserr = true; } else { if (verbose) { gt_tyrindex_show(tyrindex); } if (performtest) { gt_tyrindex_check(tyrindex); } } if (!haserr) { gt_assert(tyrindex != NULL); if ((showmode & SHOWCOUNTS) && !gt_tyrindex_isempty(tyrindex)) { tyrcountinfo = gt_tyrcountinfo_new(tyrindex,tyrindexname,err); if (tyrcountinfo == NULL) { haserr = true; } } } if (!haserr) { gt_assert(tyrindex != NULL); if (!gt_tyrindex_isempty(tyrindex)) { tyrbckinfo = gt_tyrbckinfo_new(tyrindexname, gt_tyrindex_alphasize(tyrindex), err); if (tyrbckinfo == NULL) { haserr = true; } } } if (!haserr) { const GtUchar *query; unsigned long querylen; char *desc = NULL; uint64_t unitnum; int retval; Tyrsearchinfo tyrsearchinfo; GtSeqIterator *seqit; gt_assert(tyrindex != NULL); gt_tyrsearchinfo_init(&tyrsearchinfo,tyrindex,showmode,searchstrand); seqit = gt_seq_iterator_sequence_buffer_new(queryfilenames, err); if (!seqit) haserr = true; if (!haserr) { gt_seq_iterator_set_symbolmap(seqit, gt_alphabet_symbolmap(tyrsearchinfo.dnaalpha)); for (unitnum = 0; /* Nothing */; unitnum++) { retval = gt_seq_iterator_next(seqit, &query, &querylen, &desc, err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } singleseqtyrsearch(tyrindex, tyrcountinfo, &tyrsearchinfo, tyrbckinfo, unitnum, query, querylen, desc); } gt_seq_iterator_delete(seqit); } gt_tyrsearchinfo_delete(&tyrsearchinfo); } if (tyrbckinfo != NULL) { gt_tyrbckinfo_delete(&tyrbckinfo); } if (tyrcountinfo != NULL) { gt_tyrcountinfo_delete(&tyrcountinfo); } if (tyrindex != NULL) { gt_tyrindex_delete(&tyrindex); } return haserr ? -1 : 0; } genometools-1.5.1/src/match/tyr-search.h000066400000000000000000000024101211610345200201560ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYR_SEARCH_H #define TYR_SEARCH_H #include #include "core/str_api.h" #include "core/str_array_api.h" #include "core/error_api.h" int gt_tyrsearch(const char *tyrindexname, const GtStrArray *queryfilenames, unsigned int showmode, unsigned int searchstrand, bool verbose, bool performtest, GtError *err); #endif genometools-1.5.1/src/match/tyr-show.h000066400000000000000000000021341211610345200176740ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TYR_SHOW_H #define TYR_SHOW_H #define STRAND_FORWARD 1U #define STRAND_REVERSE (STRAND_FORWARD << 1) #define SHOWQSEQNUM 1U #define SHOWQPOS (SHOWQSEQNUM << 1) #define SHOWCOUNTS (SHOWQSEQNUM << 2) #define SHOWSEQUENCE (SHOWQSEQNUM << 3) #endif genometools-1.5.1/src/match/xdrop.c000066400000000000000000000352741211610345200172420ustar00rootroot00000000000000/* Copyright (c) 2007 David Ellinghaus Copyright (c) 2012-2013 Stefan Kurtz Copyright (c) 2007-2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/chardef.h" #include "core/divmodmul.h" #include "core/minmax.h" #include "xdrop.h" typedef struct { int mis, ins, del, gcd; /* greatest common divisor */ } GtXdropArbitrarydistances; typedef struct { long row; unsigned char direction; /* one of the bits GT_XDROP_REPLACEMENTBIT, GT_XDROP_DELETIONBIT, GT_XDROP_INSERTIONBIT */ } GtXdropfrontvalue; GT_DECLAREARRAYSTRUCT(GtXdropfrontvalue); #define GT_XDROP_FRONTIDX(D,K) ((unsigned long) (D) * (D) + (D) + (K)) /* For each entry in the DP-matrix we store a single byte, and use the three rightmost bits to mark which edge in the edit distance graph to trace back. */ #define GT_XDROP_REPLACEMENTBIT ((unsigned char) 1) #define GT_XDROP_DELETIONBIT (((unsigned char) 1) << 1) #define GT_XDROP_INSERTIONBIT (((unsigned char) 1) << 2) /* The following function shows the matrix of the calculated fronts. */ /* CAUTION: fronts, that run over the matrix boundaries are not shown in the printed matrix. */ void gt_showfrontvalues(const GtArrayGtXdropfrontvalue *fronts, long distance, const unsigned char *useqptr, const unsigned char *vseqptr, long ulen, long vlen) { unsigned long l; long i, j, k, d = distance + 1, filled = 0, integermax = MAX(ulen,vlen), integermin = -integermax; printf("frontvalues:\n"); printf(" "); printf("%-3c ", vseqptr[0]); /* print vseq */ for (i = 1L; i < vlen; i++) { printf("%-3c ", vseqptr[i]); } for (i = 0; i <= ulen; i++) { printf("\n"); /* print useq */ if (i != 0) { printf("%-3c ", useqptr[i - 1]); } else { printf(" "); } for (j = 0; j <= vlen; j++) { d = distance + 1; k = i - j; for (l = 0; l < fronts->nextfreeGtXdropfrontvalue; l++) { if (fronts->spaceGtXdropfrontvalue[l].row == integermin) { continue; } if (i == fronts->spaceGtXdropfrontvalue[l].row) { for (d = 0; d <= distance; d++) { if (k >= -d && k <= d && l == GT_XDROP_FRONTIDX(d, i - j)) { printf("%-3ld ", d); l = fronts->nextfreeGtXdropfrontvalue; filled++; break; } } } } if (d > distance) { printf("U "); } } } printf("\n%.2f percent of matrix filled\n", (double) filled * 100.00 / ((ulen + 1) * (vlen + 1))); } static unsigned int gt_xdrop_gcd(unsigned int m, unsigned int n) { unsigned int r; if (m < n) { r = m; m = n; n = r; } do { gt_assert(m >= n); r = m % n; m = n; n = r; } while (r != 0); return m; } /* The following function calculates the distance from the given scores. */ static void gt_calculatedistancesfromscores( const GtXdropArbitraryscores *arbitscores, GtXdropArbitrarydistances *dist) { int mat, mis, ins, del; /* if mat is odd double all scores */ gt_assert(arbitscores->mat > 0); if (GT_MOD2((unsigned int) arbitscores->mat) > 0) { mat = arbitscores->mat * 2; mis = arbitscores->mis * 2; ins = arbitscores->ins * 2; del = arbitscores->del * 2; } else { mat = arbitscores->mat; mis = arbitscores->mis; ins = arbitscores->ins; del = arbitscores->del; } gt_assert(mat >= mis && mat/2 >= ins && mat/2 >= del); dist->gcd = (int) gt_xdrop_gcd(gt_xdrop_gcd((unsigned int) (mat-mis), (unsigned int) (mat/2-ins)), (unsigned int) (mat/2-del)); dist->mis = (mat - mis) / dist->gcd; dist->ins = (mat/2 - ins) / dist->gcd; dist->del = (mat/2 - del) / dist->gcd; } struct GtXdropresources { const GtXdropArbitraryscores *arbitscores; GtXdropArbitrarydistances arbitdistances; GtArrayGtXdropfrontvalue fronts; GtArrayGtXdropscore big_t; }; GtXdropresources *gt_xdrop_resources_new(const GtXdropArbitraryscores *scores) { GtXdropresources *res = gt_malloc(sizeof *res); res->arbitscores = scores; GT_INITARRAY (&res->fronts, GtXdropfrontvalue); GT_INITARRAY (&res->big_t, GtXdropscore); gt_calculatedistancesfromscores(scores,&res->arbitdistances); return res; } void gt_xdrop_resources_delete(GtXdropresources *res) { if (res != NULL) { GT_FREEARRAY (&res->fronts, GtXdropfrontvalue); GT_FREEARRAY (&res->big_t, GtXdropscore); gt_free(res); } } #define GT_XDROP_EVAL(K,D)\ ((K) * res->arbitscores->mat/2 - (D) * res->arbitdistances.gcd) #define GT_XDROP_SETDBACK(XDROPBELOWSCORE)\ (XDROPBELOWSCORE + res->arbitscores->mat/2)/res->arbitdistances.gcd + 1 static long gt_xdrop_frontvalue_get(const GtXdropresources *res,long d,long k) { const unsigned long frontidx = GT_XDROP_FRONTIDX(d,k); return res->fronts.spaceGtXdropfrontvalue[frontidx].row; } static void gt_xdrop_frontvalue_set(GtXdropresources *res,long d,long k, GtXdropfrontvalue value) { const unsigned long frontidx = GT_XDROP_FRONTIDX(d,k); if (frontidx >= res->fronts.allocatedGtXdropfrontvalue) { res->fronts.allocatedGtXdropfrontvalue = frontidx + 32UL; res->fronts.spaceGtXdropfrontvalue = gt_realloc_mem(res->fronts.spaceGtXdropfrontvalue, sizeof (*res->fronts.spaceGtXdropfrontvalue) * res->fronts.allocatedGtXdropfrontvalue, __FILE__, __LINE__); } res->fronts.spaceGtXdropfrontvalue[frontidx] = value; res->fronts.nextfreeGtXdropfrontvalue = frontidx + 1; } void gt_evalxdroparbitscoresextend(bool forward, GtXdropbest *xdropbest, GtXdropresources *res, const GtSeqabstract *useq, const GtSeqabstract *vseq, unsigned long uoffset, unsigned long voffset, GtXdropscore xdropbelowscore) { const long ulen = (long) gt_seqabstract_length_get(useq), vlen = (long) gt_seqabstract_length_get(vseq), end_k = ulen - vlen, /* diagonal of endpoint (ulen, vlen) */ integermax = MAX(ulen, vlen), integermin = -integermax, dback = GT_XDROP_SETDBACK(xdropbelowscore); long idx, lbound, /* diagonal lower bound */ ubound, /* diagonal upper bound */ currd = 0; /* distance */ /*The following function calculates the maximal allowed number of generations with all front values equal minus infinity.*/ const int allowedMININFINITYINTgenerations = MAX(MAX(res->arbitdistances.mis,res->arbitdistances.ins), res->arbitdistances.del) - 1; int currentMININFINITYINTgeneration = 0; GtXdropfrontvalue tmpfront; GtXdropscore bigt_tmp; /* best score T' seen already */ bool alwaysMININFINITYINT = true; res->big_t.nextfreeGtXdropscore = 0; res->fronts.nextfreeGtXdropfrontvalue = 0; /* phase 0 */ idx = (long) gt_seqabstract_lcp(forward, useq, vseq, forward ? uoffset : uoffset - 1, forward ? voffset : voffset - 1, (unsigned long) MIN(ulen,vlen)); /* alignment already finished */ if (idx >= ulen || idx >= vlen) { lbound = 1L; ubound = -1L; } else { lbound = 0; ubound = 0; } tmpfront.row = idx; tmpfront.direction = (GtUchar) 0; /* no predecessor */ gt_xdrop_frontvalue_set(res,0,0,tmpfront); xdropbest->score = bigt_tmp = GT_XDROP_EVAL(idx + idx, 0); gt_assert(idx >= 0); xdropbest->ivalue = xdropbest->jvalue = (unsigned long) idx; GT_STOREINARRAY (&res->big_t, GtXdropscore, 10, bigt_tmp); /* phase d > 0 */ while (lbound <= ubound) { long k; currd++; /* calculate fronts */ for (k = lbound - 1; k <= ubound + 1; k++) { long i = integermin; /* case 1 : DELETION-EDGE */ if (lbound < k && currd - res->arbitdistances.del >= 0 && -(currd - res->arbitdistances.del) <= k - 1 && k - 1 <= currd - res->arbitdistances.del) { i = gt_xdrop_frontvalue_get(res,currd - res->arbitdistances.del,k-1) + 1; tmpfront.direction = GT_XDROP_DELETIONBIT; } /* case 2: REPLACEMENT-EDGE */ if (lbound <= k && k <= ubound && currd - res->arbitdistances.mis >= 0 && -(currd - res->arbitdistances.mis) <= k && k <= currd - res->arbitdistances.mis) { /* test, if case 1 has happened. */ long row = gt_xdrop_frontvalue_get(res, currd - res->arbitdistances.mis,k) + 1; if (!(tmpfront.direction & GT_XDROP_DELETIONBIT) || row > i) { i = row; tmpfront.direction = GT_XDROP_REPLACEMENTBIT; } } /* case 3: INSERTION-EDGE */ if (k < ubound && currd - res->arbitdistances.ins >= 0 && -(currd - res->arbitdistances.ins) <= k + 1 && k + 1 <= currd - res->arbitdistances.ins) { long row = gt_xdrop_frontvalue_get(res, currd - res->arbitdistances.ins,k+1); if (!(tmpfront.direction & (GT_XDROP_DELETIONBIT | GT_XDROP_REPLACEMENTBIT)) || row > i) { i = row; tmpfront.direction = GT_XDROP_INSERTIONBIT; } } /* if i = MINUSINFINITYINY or MINUSINFINITYINY + 1 */ if (i < 0) { if (tmpfront.direction == (GtUchar) 0) { alwaysMININFINITYINT = false; } tmpfront.row = integermin; } else { long j = i - k; const long previousd = currd - dback; /* alignment score smaller than T - X */ if (previousd > 0 && res->big_t.spaceGtXdropscore != NULL && GT_XDROP_EVAL (i + j, currd) < res->big_t.spaceGtXdropscore[previousd] - xdropbelowscore) { tmpfront.row = integermin; } else { if (k <= -currd || k >= currd || (gt_xdrop_frontvalue_get(res,currd-1,k) < i && i <= MIN(ulen,vlen + k))) { if (ulen > i && vlen > j) { unsigned long lcp; gt_assert(forward || (uoffset > (unsigned long) i && voffset > (unsigned long) j)); lcp = gt_seqabstract_lcp(forward, useq, vseq, forward ? uoffset + i : uoffset - i - 1, forward ? voffset + j : voffset - j - 1, (unsigned long) MIN(ulen - i,vlen - j)); i += lcp; j += lcp; } alwaysMININFINITYINT = false; tmpfront.row = i; if (GT_XDROP_EVAL(i + j, currd) > bigt_tmp) { xdropbest->score = bigt_tmp = GT_XDROP_EVAL(i + j,currd); gt_assert(i >= 0 && j >= 0); xdropbest->ivalue = (unsigned long) i; xdropbest->jvalue = (unsigned long) j; } } else { alwaysMININFINITYINT = false; tmpfront.row = gt_xdrop_frontvalue_get(res,currd-1,k); } } } gt_xdrop_frontvalue_set(res,currd,k,tmpfront); } /* if all front values are integermin, aligment prematurely finished if allowedMININFINITYINTgenerations exceeded (full front has already ended at currd - currentMININFINITYINTgeneration). */ if (alwaysMININFINITYINT) { currentMININFINITYINTgeneration++; if (currentMININFINITYINTgeneration > allowedMININFINITYINTgenerations) { currd -= currentMININFINITYINTgeneration; break; } } else { currentMININFINITYINTgeneration = 0; alwaysMININFINITYINT = true; } GT_STOREINARRAY (&res->big_t, GtXdropscore, 10, bigt_tmp); /* fill out of bounds values of integermin needed for gt_showfrontvalues function */ for (k = -currd; k < lbound - 1; k++) { tmpfront.row = integermin; gt_xdrop_frontvalue_set(res,currd,k,tmpfront); } for (k = ubound + 2; k <= currd; k++) { tmpfront.row = integermin; gt_xdrop_frontvalue_set(res,currd,k,tmpfront); } /* alignment finished */ if (-currd <= end_k && end_k <= currd && gt_xdrop_frontvalue_get(res,currd,end_k) == ulen) { break; } /* pruning lower bound lbound may decrease by one or increase/stays the same */ for (k = lbound - 1; k <= ubound + 1; k++) { if (gt_xdrop_frontvalue_get(res,currd,k) > integermin) { lbound = k; break; } } /* pruning upper bound ubound may increase by one or decrease/stays the same */ for (k = ubound + 1; k >= lbound - 1; k--) { if (gt_xdrop_frontvalue_get(res,currd,k) > integermin) { ubound = k; break; } } /* handling boundaries lower bound */ for (k = 0; k >= lbound; k--) { if (gt_xdrop_frontvalue_get(res,currd,k) == vlen + k) { lbound = k; break; } } /* handling boundaries upper bound */ for (k = 0; k <= ubound; k++) { if (gt_xdrop_frontvalue_get(res,currd,k) == ulen) { ubound = k; break; } } } } genometools-1.5.1/src/match/xdrop.h000066400000000000000000000044551211610345200172440ustar00rootroot00000000000000/* Copyright (c) 2007 David Ellinghaus Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef XDROP_H #define XDROP_H #include "core/arraydef.h" #include "match/seqabstract.h" typedef struct GtXdropresources GtXdropresources; typedef struct { int mat, mis, ins, del; } GtXdropArbitraryscores; /* This is the type for the xdrop scores. */ typedef long GtXdropscore; typedef struct { unsigned long ivalue, jvalue; GtXdropscore score; } GtXdropbest; GT_DECLAREARRAYSTRUCT(GtXdropscore); /* The following functions extend seeds to the right (forward = true) and to the left (forward = false), respectively. GtXdropbest stores information about the best match found. useq is the first sequence position and vseq is the second sequence position. ulen and vlen are the remaining sequence length to align. If an alignment has score smaller than xdropbelowscore, then this alignment is not extended any more. */ GtXdropresources *gt_xdrop_resources_new(const GtXdropArbitraryscores *scores); void gt_evalxdroparbitscoresextend(bool forward, GtXdropbest *xdropbest, GtXdropresources *res, const GtSeqabstract *useq, const GtSeqabstract *vseq, unsigned long uoffset, unsigned long voffset, GtXdropscore xdropbelowscore); void gt_xdrop_resources_delete(GtXdropresources *); #endif genometools-1.5.1/src/mgth/000077500000000000000000000000001211610345200155725ustar00rootroot00000000000000genometools-1.5.1/src/mgth/metagenomethreader.c000066400000000000000000000744471211610345200216160ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/fileutils_api.h" #include "core/file.h" #include "core/hashmap-generic.h" #include "core/mathsupport.h" #include "core/unused_api.h" #include "match/giextract.h" #include "mg_xmlparser.h" #include "metagenomethreader.h" static GtOPrval mgth_parse_options(int *parsed_args, MetagenomeThreaderArguments *metagenomethreader_arguments, int argc, const char **argv, GtError * err) { GtOptionParser *op; GtOPrval oprval; /* Definition der optionalen Eingabeparameter */ GtOption *syn_value_option, *nonsyn_value_option, *blasthitend_value_option, *stopcodon_queryseq_option, *stopcodon_hitseq_option, *frameshift_span_option, *prediction_span_option, *curlfcgi_option, *leavegene_value_option, *resulttextfile_name_option, *giexpfile_name_option, *hitfile_bool_option, *homology_mode_option, *extended_mode_option, *testmodus_mode_option, *outputfile_format_option, *codon_mode_option, *min_as_option, *percent_option; /* Check Umgebungsvariablen */ gt_error_check(err); /* init Option-Parser */ op = gt_option_parser_new ("[option ...] XML-File Query-FASTA-File Hit-FASTA-File", "Metagenomethreader, for predicting genes in metagenomeprojects."); /* GtOption zur Eingabe des Scores fuer synonymen Basenaustausch; default: 1.0 */ syn_value_option = gt_option_new_double("s", "score for synonymic base exchanges", &metagenomethreader_arguments->synonomic_value, 1.0); gt_option_parser_add_option(op, syn_value_option); /* GtOption zur Eingabe des Scores fuer nicht-synonymen Basenaustausch; default: -1.0 */ nonsyn_value_option = gt_option_new_double("n", "score for non-synonymic base exchanges", &metagenomethreader_arguments->nonsynonomic_value, -1.0); gt_option_parser_add_option(op, nonsyn_value_option); /* GtOption zur Eingabe des Scores fuer das Blast-Hit-Ende; default: -10 */ blasthitend_value_option = gt_option_new_double("b", "score for blast-hit-end within query sequence", &metagenomethreader_arguments->blasthit_end_value, -10.0); gt_option_parser_add_option(op, blasthitend_value_option); /* GtOption zur Eingabe des Scores zur Bewertung eines Stop-Codons in der Query-Sequence; default: -2 */ stopcodon_queryseq_option = gt_option_new_double("q", "score for stop-codon within querysequence", &metagenomethreader_arguments->stopcodon_queryseq, -2.0); gt_option_parser_add_option(op, stopcodon_queryseq_option); /* GtOption zur Eingabe des Scores zur Bewertung eines Stop-Codons in der Hit-Sequence; default: -5 */ stopcodon_hitseq_option = gt_option_new_double("h", "score for stop-codon within hitsequence", &metagenomethreader_arguments->stopcodon_hitseq, -5.0); gt_option_parser_add_option(op, stopcodon_hitseq_option); /* GtOption zur Eingabe des Scores zur Bewertung des Verlassens oder Eintretens eines bzw. in ein Gen ; default: -2 */ leavegene_value_option = gt_option_new_double("l", "score for leaving a gene on forward/reverse strand " "or enter a gene on forward/reverse strand", &metagenomethreader_arguments->leavegene_value, -2.0); gt_option_parser_add_option(op, leavegene_value_option); /* GtOption zur Eingabe des Wertes innerhalb welches Zwischenbereichs ein zusammenhaengender Genbereich vorliegt; default: 400 */ prediction_span_option = gt_option_new_double_min("p", "max. span between coding-regions resume as one " "prediction", &metagenomethreader_arguments->prediction_span, 400.0, 0.0); gt_option_parser_add_option(op, prediction_span_option); /* GtOption zur Eingabe des Wertes innerhalb welches Zwischenbereichs ein Frameshift vorliegt; default: 200 */ frameshift_span_option = gt_option_new_double_min("f", "max. span between coding-regions in different " "reading frames resume as coding-regions in the " "optimal reading-frame", &metagenomethreader_arguments->frameshift_span, 200.0, 0.0); gt_option_parser_add_option(op, frameshift_span_option); /* GtOption zur Eingabe der DB, die bei der Verwendung des fcgi-Skriptes verwendet wird; default: nucleotide */ curlfcgi_option = gt_option_new_string("c", "db-name for fcgi-db", metagenomethreader_arguments->curl_fcgi_db, "nucleotide"); gt_option_parser_add_option(op, curlfcgi_option); /* GtOption zur Eingabe des Namens der Outputdatei; default: output.txt */ resulttextfile_name_option = gt_option_new_string("o", "name for resulting output-file", metagenomethreader_arguments->outputtextfile_name, "output"); gt_option_parser_add_option(op, resulttextfile_name_option); /* GtOption zur Angabe der Hit-Sequenz-DB */ giexpfile_name_option = gt_option_new_string("k", "name for the Hit-Sequence-DB", metagenomethreader_arguments->giexpfile_name, "nucleotide database"); gt_option_parser_add_option(op, giexpfile_name_option); /* GtOption zur Angabe, ob ein Hit-FASTA-File exisitiert; default: false */ hitfile_bool_option = gt_option_new_bool("t", "true or false if a Hit-FASTA-File exist", &metagenomethreader_arguments->hitfile_bool, false); gt_option_parser_add_option(op, hitfile_bool_option); /* GtOption zur Angabe des Formates der Outputdatei; default: 1 -> txt */ outputfile_format_option = gt_option_new_int("r", "format of the output-file", &metagenomethreader_arguments->outputfile_format, 1); gt_option_parser_add_option(op, outputfile_format_option); /* GtOption zur Angabe der minimalen Laenger der AS-Sequnezen, die in der Ausgabedatei aufgefuehrt werden sollen; default: 15; min: 15 */ min_as_option = gt_option_new_ulong_min("a", "minimum length of the as-sequence", &metagenomethreader_arguments->min_as, 15, 15); gt_option_parser_add_option(op, min_as_option); /* GtOption zur Angabe der minimalen Prozentzahl, ab der Hits-Def. im Statistikbereich der Ausgabe angezeigt werden */ percent_option = gt_option_new_double_min_max("d", "minimum percent-value for hit-statistic-output", &metagenomethreader_arguments->percent_value, 0.0, 0.0, 1.0); gt_option_parser_add_option(op, percent_option); /* GtOption zur Angabe, ob alternative Start-Codons verwendet werden sollen; default: 1 -> txt */ codon_mode_option = gt_option_new_int("e", "use of alternative start-codons", &metagenomethreader_arguments->codon_mode, 1); gt_option_parser_add_option(op, codon_mode_option); /* Experimenteller Status dieser GtOption - Funktionsfaehigkeit nicht abschliessend geklaert */ /* GtOption zur Angabe, ob nach Homologien gesucht werden soll, statt nach synonymen-Basenaustauschen; default: false */ homology_mode_option = gt_option_new_bool("m", "search for homology", &metagenomethreader_arguments->homology_mode, false); gt_option_parser_add_option(op, homology_mode_option); /* Testmodus: die Programm-Parameter werden zur Vergleichbarkeit der Ergebnisse nicht mit ausgegeben; default: false */ testmodus_mode_option = gt_option_new_bool("g", "testmodus, output without creating date", &metagenomethreader_arguments->testmodus_mode, false); gt_option_parser_add_option(op, testmodus_mode_option); /* GtOption zur Angabe, ob die EGTs auf den max. ORF erweitert werden sollen, default: false */ extended_mode_option = gt_option_new_bool("x", "extend the EGTs to max", &metagenomethreader_arguments->extended_mode, false); gt_option_parser_add_option(op, extended_mode_option); gt_option_parser_set_min_max_args(op, 3, 3); gt_option_parser_refer_to_manual(op); /* es werden die Parameter XML-File, Query-Fasta-File und Hit-FASTA-File erwartet, Min und Max. der Anzahl an Parametern ist also 3 */ oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } DEFINE_HASHMAP(char *, gt_cstr_nofree, unsigned long *, ulp, gt_ht_cstr_elem_hash, gt_ht_cstr_elem_cmp, NULL_DESTRUCTOR, NULL_DESTRUCTOR,,) typedef struct { unsigned long *statpos; const char *string; ParseStruct *parsestruct; } GtMgthStatsPair; static int statspair_cmp(const void *y, const void *z) { const GtMgthStatsPair *a = (const GtMgthStatsPair*) y; const GtMgthStatsPair *b = (const GtMgthStatsPair*) z; double val_a, val_b; int ret; gt_assert(a && b && a->parsestruct && b->parsestruct); /* calculate result values to sort by */ val_a = (double) (*(a->parsestruct->hits_statistics.hitsnum + *(a->statpos)) / ((double) a->parsestruct->hits_statistics.hitsnumber) * 100); val_b = (double) (*(b->parsestruct->hits_statistics.hitsnum + *(b->statpos)) / ((double) b->parsestruct->hits_statistics.hitsnumber) * 100); if ((ret = gt_double_compare(val_a, val_b) * -1) == 0) { /* tie breaking, we need canonical ordering! if two entries have the same numerical value, let strings decide */ return strcmp(a->string, b->string); } return ret; } static enum iterator_op insert_into_outlist(char *key, unsigned long *value, void *data, GT_UNUSED GtError *err) { ParseStruct *parsestruct_ptr = (ParseStruct *) data; gt_assert(key && parsestruct_ptr && parsestruct_ptr->outlist); gt_error_check(err); /* create new output entry and store in sorted list */ GtMgthStatsPair *pair = gt_calloc(1, sizeof (GtMgthStatsPair)); pair->parsestruct = parsestruct_ptr; pair->statpos = value; pair->string = key; gt_dlist_add(parsestruct_ptr->outlist, pair); return CONTINUE_ITERATION; } int gt_metagenomethreader(int argc, const char **argv, GtError * err) { int had_err = 0, parsed_args = 0; /* Variablen/Zeiger zur Erstellung des Hashes fuer die GtBioseq-Strukturen */ unsigned long *querynum, *hitnum = NULL, nrofseq, loop_index; char *descr_ptr_hit, *descr_ptr_query; GtStr *outputfilename; /* GtFile Zeiger auf die XML-Datei mit den Blast-Hits */ GtFile *fp_xmlfile; /* Anlegen der Parser-Array-Struktur, ueber den der Austausch von Informationen Parsestruct parsestruct; zwischen den XML-Parser-Handlern erfolgt Zeiger auf die parser_array-Struktur; notwendig, da bei expat nur die Uebergabe eines Zeigers auf die UserDaten erfolgen kann und nicht z.B. ein Zeiger auf Zeiger */ ParseStruct parsestruct; ParseStruct *parsestruct_ptr; parsestruct_ptr = &parsestruct; ARGUMENTS(curl_fcgi_db) = gt_str_new(); ARGUMENTS(outputtextfile_name) = gt_str_new(); ARGUMENTS(giexpfile_name) = gt_str_new(); /* Check der Umgebungsvariablen */ gt_error_check(err); /* option parsing */ switch (mgth_parse_options(&parsed_args, &parsestruct.metagenomethreader_arguments, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: gt_str_delete(ARGUMENTS(curl_fcgi_db)); gt_str_delete(ARGUMENTS(outputtextfile_name)); return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: gt_str_delete(ARGUMENTS(curl_fcgi_db)); gt_str_delete(ARGUMENTS(outputtextfile_name)); return 0; } /* GtBioseqstruktur des Query-DNA-FASTA-File wird erzeugt */ parsestruct.queryseq = gt_bioseq_new(argv[parsed_args + 1], err); /* Erstellung der GtBioseq-Struktur fehlerhaft -> Fehlercode setzen */ if (!parsestruct.queryseq) { had_err = -1; } /* nur wenn die Hitfile-Bool-GtOption auf true gesetzt ist (File vorhanden) und der Fehlercode nicht gesetzt ist, muss die GtBioseq-Struktur auch fuer die Hits erstellt werden */ if (ARGUMENTS(hitfile_bool) && !had_err) { /* GtBioseqstruktur des Hit-DNA-FASTA-File wird erzeugt */ parsestruct.hitseq = gt_bioseq_new(argv[parsed_args + 2], err); /* Erstellung der GtBioseq-Struktur fehlerhaft -> Fehlercode setzen */ if (!parsestruct.hitseq) { gt_bioseq_delete(parsestruct.queryseq); had_err = -1; } } if (!had_err) { outputfilename = gt_str_new(); /* StringArrays zur Aufnahme der einzulesenden XML-Tag Bezeichnungen */ parsestruct.query_array = gt_str_array_new(); parsestruct.hit_array = gt_str_array_new(); parsestruct.hit_hsp_array = gt_str_array_new(); parsestruct.hits_statistics.hits_statistic = gt_str_array_new(); parsestruct.key_tmp = gt_str_array_new(); /* String fuer die Bezeichnung des letzten XML-Tags eines Bearbeitunsschrittes */ parsestruct.xml_tag = gt_str_new(); /* Zeiger auf den Speicherbereich, wo der aktuelle Text abgespeichert wird */ parsestruct.buf_ptr = gt_str_new(); /* temp-Variable zum Zwischenspeichern der Hit-GI-Definition */ parsestruct.gi_def_tmp = gt_str_new(); parsestruct.gi_acc_tmp = gt_str_new(); parsestruct.hit_gi_nr_tmp = gt_str_new(); parsestruct.fasta_row = gt_str_new(); /* Zeiger auf Query-DNA bzw. Query-Def */ parsestruct.matrix_info.query_dna = gt_str_new(); parsestruct.matrix_info.query_def = gt_str_new(); /* Strings fuer Blast-XML-File und Hit-FASTA-File */ parsestruct.hit_fastafile = gt_str_new(); parsestruct.xmlfile = gt_str_new(); /* String fuer die aktuelle Hit-Def fuer die Statistik */ parsestruct.result_hits = gt_str_new(); /* diverse Zeiger auf Informationen aus dem XML-File */ parsestruct.matrix_info.query_from = gt_array_new(sizeof (unsigned long)); parsestruct.matrix_info.query_to = gt_array_new(sizeof (unsigned long)); parsestruct.matrix_info.query_frame = gt_array_new(sizeof (unsigned long)); parsestruct.matrix_info.hit_frame = gt_array_new(sizeof (unsigned long)); parsestruct.value_tmp = gt_array_new(sizeof (unsigned long)); /* mit dem schliessenden Iteration_hits XML-Tag wird im Programmablauf der Abschluss eines Query-Eintrages erkannt */ gt_str_set(parsestruct.xml_tag, "Iteration_stat"); /* XML-Tags im Query-Def-Bereich */ gt_str_array_add_cstr(parsestruct.query_array, "Iteration_query-def"); /* XML-Tags im Hit-Def-Bereich */ gt_str_array_add_cstr(parsestruct.hit_array, "Hit_id"); gt_str_array_add_cstr(parsestruct.hit_array, "Hit_def"); gt_str_array_add_cstr(parsestruct.hit_array, "Hit_accession"); /* XML-Tags im Hits-Bereich */ gt_str_array_add_cstr(parsestruct.hit_hsp_array, "Hsp_num"); gt_str_array_add_cstr(parsestruct.hit_hsp_array, "Hsp_query-from"); gt_str_array_add_cstr(parsestruct.hit_hsp_array, "Hsp_query-to"); gt_str_array_add_cstr(parsestruct.hit_hsp_array, "Hsp_hit-from"); gt_str_array_add_cstr(parsestruct.hit_hsp_array, "Hsp_hit-to"); gt_str_array_add_cstr(parsestruct.hit_hsp_array, "Hsp_query-frame"); gt_str_array_add_cstr(parsestruct.hit_hsp_array, "Hsp_hit-frame"); gt_str_array_add_cstr(parsestruct.hit_hsp_array, "Hsp_qseq"); gt_str_array_add_cstr(parsestruct.hit_hsp_array, "Hsp_hseq"); /* 3 Flags, die bei oeffnenden XML-Tags gesetzt und bei schliessenden geloescht werden */ parsestruct.def_flag = MGTH_UNSET; parsestruct.hit_flag = MGTH_UNSET; parsestruct.hit_hsp_flag = MGTH_UNSET; parsestruct.xml_tag_flag = MGTH_UNSET; parsestruct.giexp_flag = MGTH_UNSET; parsestruct.gi_flag = MGTH_UNSET; /* Variablen (Zeilennummer, Fehlercode) zur Fehlerbehandlung waehrend des Parsvorganges des XML-Files */ parsestruct.xml_linenumber = 0; parsestruct.had_err = 0; /* Zaehlvariablen fuer die Anzahl der Syn- und Nichtsynonymen DNA-Austausche */ parsestruct.syn = 0.0; parsestruct.non_syn = 0.0; /* hit_counter zum Zaehlen der Hits pro Hit-GI */ parsestruct.xmlparser_static.hit_counter = 0; /* Zaehlvariablen, die Position in den jeweiligen XML-Tag-Bloecken angeben */ parsestruct.xmlparser_static.query_array_index_start = 0; parsestruct.xmlparser_static.hit_array_index_start = 0; parsestruct.xmlparser_static.hit_hsp_array_index_start = 0; parsestruct.xmlparser_static.query_array_index_end = 0; parsestruct.xmlparser_static.hit_array_index_end = 0; parsestruct.xmlparser_static.hit_hsp_array_index_end = 0; /* als "Static" verwendete Variablen in der Struktur */ parsestruct.geneprediction_static.matrixscore = 0; parsestruct.geneprediction_static.matrixscore_before = 0; parsestruct.geneprediction_static.current_frame = 0; parsestruct.geneprediction_static.frame_before = 0; parsestruct.geneprediction_static.function_stop = 0; parsestruct.geneprediction_static.noncodingcounter = 0; parsestruct.geneprediction_static.codingcounter = 0; parsestruct.hits_statistics.hitsnumber = 0; /* Speichergroesse fuer die Speicherbereiche der Statistik setzen */ parsestruct.hits_memory = MGTH_MEMORY_SIZE; /* Speicher fuer die Statistik reservieren und zuweisen */ parsestruct.hits_statistics.hitsnum = gt_calloc(MGTH_MEMORY_SIZE, sizeof (unsigned long)); parsestruct.hits_statistics.memory = gt_calloc(MGTH_MEMORY_SIZE, sizeof (unsigned long)); /* Variable der Umgebungsvariablen - genometools.org */ parsestruct.err = err; /* Abspeichern des XML- und des Hit-Dateinamens in der ParseStruct-Struktur */ gt_str_set(parsestruct.hit_fastafile, argv[parsed_args + 2]); gt_str_set(parsestruct.xmlfile, argv[parsed_args]); /* Anzahl der Query-DNA-Eintraege */ nrofseq = gt_bioseq_number_of_sequences(parsestruct.queryseq); /* Speicherbereich reservieren fuer Zeiger auf die Indices der Query-DNA-Eintraege in der GtBioseq-Struktur */ querynum = gt_calloc(nrofseq, sizeof (unsigned long)); /* Hash erzeugen - Eintraege: Key - Query-FASTA-Def; Value - Zeiger auf deren Indices in der GtBioseq - Struktur */ parsestruct.queryhash = gt_cstr_nofree_ulp_gt_hashmap_new(); for (loop_index = 0; loop_index < nrofseq; loop_index++) { /* Descriptions der GtBioseq-Struktur werden nacheinander abgearbeitet */ descr_ptr_query = (char *) gt_bioseq_get_description(parsestruct.queryseq, loop_index); /* Position in der GtBioseq in den Speicher querynum schreiben */ querynum[loop_index] = loop_index; /* Dem aktuellen Schluessel Zeige auf die Position in der GtBioseq zuordnen */ if (!gt_cstr_nofree_ulp_gt_hashmap_get(parsestruct.queryhash, descr_ptr_query)) gt_cstr_nofree_ulp_gt_hashmap_add(parsestruct.queryhash, descr_ptr_query, querynum + loop_index); } /* nur wenn die GtOption hitfile_bool auf TRUE gesetzt ist, muss die GtBioseq-Struktur bzw. die Hash-Tabelle auch fuer die Hits erzeugt werden; Erzeugung inkl. Hash wie beim Query-DNA-FASTA-File */ if (ARGUMENTS(hitfile_bool)) { /* Anzahl der Hit-DNA-Eintraege */ nrofseq = gt_bioseq_number_of_sequences(parsestruct.hitseq); /* Speicherbereich reservieren fuer Zeiger auf die Indices der Hit-DNA-Eintraege in der GtBioseq-Struktur */ hitnum = gt_calloc(nrofseq, sizeof (unsigned long)); /* Hash erzeugen - Eintraege: Key - Hit-FASTA-Zeile; Value - Zeiger auf deren Indices in der GtBioseq - Struktur */ parsestruct.hithash = gt_cstr_nofree_ulp_gt_hashmap_new(); /* Hit-Fasta-File zeilenweise abarbeiten */ for (loop_index = 0; loop_index < nrofseq; loop_index++) { /* Der Schluessel ist die Hit-FASTA-Zeile */ descr_ptr_hit = (char *) gt_bioseq_get_description(parsestruct.hitseq, loop_index); /* Position in der GtBioseq in den Speicher hitnum schreiben */ hitnum[loop_index] = loop_index; /* Dem aktuellen Schluessel Zeige auf die Position in der GtBioseq zuordnen */ if (!gt_cstr_nofree_ulp_gt_hashmap_get(parsestruct.hithash, descr_ptr_hit)) gt_cstr_nofree_ulp_gt_hashmap_add(parsestruct.hithash, descr_ptr_hit, hitnum + loop_index); } } /* Hashtabelle fuer die Statistik anlegen */ parsestruct.resulthits = gt_cstr_nofree_ulp_gt_hashmap_new(); /* konstruieren des Output-Filenames aus angegebenen Filename und dem angegebenen Format */ switch (ARGUMENTS(outputfile_format)) { case 2: gt_str_append_str(outputfilename, ARGUMENTS(outputtextfile_name)); gt_str_append_cstr(outputfilename, "."); gt_str_append_cstr(outputfilename, "html"); break; case 3: gt_str_append_str(outputfilename, ARGUMENTS(outputtextfile_name)); gt_str_append_cstr(outputfilename, "."); gt_str_append_cstr(outputfilename, "xml"); break; default: gt_str_append_str(outputfilename, ARGUMENTS(outputtextfile_name)); gt_str_append_cstr(outputfilename, "."); gt_str_append_cstr(outputfilename, "txt"); } /* Der Name des XML-Files mit den Blast-Hits ist das erste Argument nach dem Programmnamen */ fp_xmlfile = gt_file_xopen(argv[parsed_args], "r"); if (gt_file_exists(gt_str_get(outputfilename))) { parsestruct.fp_outputfile = gt_file_xopen(gt_str_get(outputfilename), "w+"); gt_file_delete(parsestruct.fp_outputfile); } /* Der Name des Outputfiles wird den eingegebenen Optionen entnommen oder der default-Wert output.txt verwendet */ parsestruct.fp_outputfile = gt_file_xopen(gt_str_get(outputfilename), "a+"); if (!ARGUMENTS(hitfile_bool)) { GtStr *gi_numbers_txt; gi_numbers_txt = gt_str_new(); gt_str_set(gi_numbers_txt, "gi_numbers.txt"); unsigned long row_width = 150; if (gt_str_length(ARGUMENTS(giexpfile_name)) == 0 ) { gt_str_set(ARGUMENTS(giexpfile_name), "nt.gz"); } /* Datei fuer die GI-Nr. des XML-Files */ parsestruct.fp_giexp_file = gt_file_xopen(gt_str_get(gi_numbers_txt), "w+"); had_err = mg_xmlparser(parsestruct_ptr, fp_xmlfile, err); gt_file_delete(parsestruct.fp_giexp_file); gt_file_delete(fp_xmlfile); if (!had_err) { parsestruct.giexp_flag = 1; GtStrArray *giexpfile_name_array; giexpfile_name_array = gt_str_array_new(); gt_str_array_add_cstr(giexpfile_name_array, gt_str_get(ARGUMENTS(giexpfile_name))); /* Die Hit-Datei wird mit dem Modus w+ geoeffnet */ parsestruct.fp_blasthit_file = gt_file_xopen(gt_str_get(parsestruct.hit_fastafile), "w+"); had_err = gt_extractkeysfromfastafile(true, parsestruct.fp_blasthit_file, row_width, gi_numbers_txt, giexpfile_name_array, err); gt_file_delete(parsestruct.fp_blasthit_file); if (had_err) { had_err = 0; } if (!had_err) { parsestruct.hitseq = gt_bioseq_new(argv[parsed_args + 2], err); if (!parsestruct.hitseq) { had_err = -1; } if (!had_err) { /* Anzahl der Hit-DNA-Eintraege */ nrofseq = gt_bioseq_number_of_sequences(parsestruct.hitseq); /* Speicherbereich reservieren fuer Zeiger auf die Indices der Hit-DNA-Eintraege in der GtBioseq-Struktur */ hitnum = gt_calloc(nrofseq, sizeof (unsigned long)); /* Hash erzeugen - Eintraege: Key - Hit-FASTA-Zeile; Value - Zeiger auf deren Indices in der GtBioseq - Struktur */ parsestruct.hithash = gt_cstr_nofree_ulp_gt_hashmap_new(); /* Hit-Fasta-File zeilenweise abarbeiten */ for (loop_index = 0; loop_index < nrofseq; loop_index++) { /* Der Schluessel ist die Hit-FASTA-Zeile */ descr_ptr_hit = (char *) gt_bioseq_get_description(parsestruct.hitseq, loop_index); /* Position in der GtBioseq in den Speicher hitnum schreiben */ hitnum[loop_index] = loop_index; /* Dem aktuellen Schluessel Zeige auf die Position in der GtBioseq zuordnen */ if (!gt_cstr_nofree_ulp_gt_hashmap_get(parsestruct.hithash, descr_ptr_hit)) gt_cstr_nofree_ulp_gt_hashmap_add(parsestruct.hithash, descr_ptr_hit, hitnum + loop_index); } } } } } if (!had_err) { /* Schreiben des Ausgabe-Headers */ mg_outputwriter(parsestruct_ptr, NULL, NULL, NULL, 't', err); if (!ARGUMENTS(hitfile_bool)) { /* Der Name des XML-Files mit den Blast-Hits ist das erste Argument nach dem Programmnamen */ fp_xmlfile = gt_file_xopen(argv[parsed_args], "r"); } parsestruct.giexp_flag = 1; /* Aufruf des xmlparsers; uebergeben werden: Zeiger auf die parser_array-Struktur der Filepointer auf die XML-Datei Zeiger auf die "Programmierumgebung" */ had_err = mg_xmlparser(parsestruct_ptr, fp_xmlfile, err); } if (!had_err) { GtDlistelem *dlistelem; /* Schreiben des Ausgabe-Footers */ mg_outputwriter(parsestruct_ptr, NULL, NULL, NULL, 'v', err); parsestruct_ptr->outlist = gt_dlist_new(statspair_cmp); /* Erzeugen einer sortierten Liste, indem die Hashtabelle einmal vollstaendig durchlaufen wird */ (void) gt_cstr_nofree_ulp_gt_hashmap_foreach(parsestruct.resulthits, insert_into_outlist, &parsestruct, err); /* Ausgabe der sortierten Hit-Ergebnisse */ for (dlistelem = gt_dlist_first(parsestruct_ptr->outlist); dlistelem != NULL; dlistelem = gt_dlistelem_next(dlistelem)) { GtMgthStatsPair *pair = (GtMgthStatsPair*) gt_dlistelem_get_data(dlistelem); gt_error_check(err); HITSTRUCT(stat_pos) = *(pair->statpos); /* Ausgabe erfolgt nur, wenn der Anteil des Hits ueber dem Wert des Metagenomethreader-Argumentes liegt */ if ((double) (HITSTRUCT(hitsnum)[HITSTRUCT(stat_pos)] / (double) HITSTRUCT(hitsnumber)) >= ARGUMENTSSTRUCT(percent_value)) { mg_outputwriter(parsestruct_ptr, NULL, NULL, NULL, 's', err); } gt_free(pair); } gt_dlist_delete(parsestruct_ptr->outlist); /* Schreiben des Ausgabe-Footers */ mg_outputwriter(parsestruct_ptr, NULL, NULL, NULL, 'f', err); } /* Freigabe der verschiedenen reservierten Speicherbereiche */ gt_str_array_delete(parsestruct.query_array); gt_str_array_delete(parsestruct.hit_array); gt_str_array_delete(parsestruct.hit_hsp_array); gt_str_array_delete(parsestruct.hits_statistics.hits_statistic); gt_str_array_delete(parsestruct.key_tmp); gt_str_delete(outputfilename); gt_str_delete(parsestruct.xml_tag); gt_str_delete(parsestruct.buf_ptr); gt_str_delete(parsestruct.gi_def_tmp); gt_str_delete(parsestruct.gi_acc_tmp); gt_str_delete(parsestruct.hit_gi_nr_tmp); gt_str_delete(parsestruct.fasta_row); gt_str_delete(parsestruct.matrix_info.query_dna); gt_str_delete(parsestruct.matrix_info.query_def); gt_str_delete(parsestruct.hit_fastafile); gt_str_delete(parsestruct.xmlfile); gt_str_delete(parsestruct.result_hits); gt_array_delete(parsestruct.matrix_info.query_from); gt_array_delete(parsestruct.matrix_info.query_to); gt_array_delete(parsestruct.matrix_info.query_frame); gt_array_delete(parsestruct.matrix_info.hit_frame); gt_array_delete(parsestruct.value_tmp); gt_free(querynum); gt_free(parsestruct.hits_statistics.hitsnum); gt_free(parsestruct.hits_statistics.memory); /* Schliessen der XML-, Output-Datei und des Hit-Sequenz-Files */ gt_file_delete(fp_xmlfile); gt_file_delete(parsestruct.fp_outputfile); /* GtHashtable loeschen */ gt_hashtable_delete(parsestruct.queryhash); gt_hashtable_delete(parsestruct.resulthits); gt_hashtable_delete(parsestruct.hithash); gt_bioseq_delete(parsestruct.hitseq); gt_free(hitnum); gt_bioseq_delete(parsestruct.queryseq); } gt_str_delete(ARGUMENTS(curl_fcgi_db)); gt_str_delete(ARGUMENTS(outputtextfile_name)); gt_str_delete(ARGUMENTS(giexpfile_name)); /* Rueckgabe des Fehlercode */ return had_err; } genometools-1.5.1/src/mgth/metagenomethreader.h000066400000000000000000000175321211610345200216130ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef METAGENOMETHREADER_H #define METAGENOMETHREADER_H #include #include #include #include #include "core/array.h" #include "core/array2dim_api.h" #include "core/bioseq.h" #include "core/dlist_api.h" #include "core/error.h" #include "core/hashmap-generic.h" #include "core/ma.h" #include "core/option_api.h" #include "core/str.h" #include "core/str_array.h" #include "core/versionfunc.h" /* jeweils die Anzahl der zu betrachtenden XML-Tags; Definitionen werden auch * in Schleifenkoepfen verwendet */ #define MGTH_QUERY_SIZE 1 #define MGTH_HIT_SIZE 3 #define MGTH_HIT_TO_QUERY_SIZE 9 #define MGTH_SET 1 #define MGTH_UNSET 0 #define MGTH_MEMORY_SIZE 250 /* Makros zum Zugriff auf die Parsestruct-Strukturen und Substrukturen */ #define ARGUMENTS(PATH)\ parsestruct.metagenomethreader_arguments.PATH #define ARGUMENTSSTRUCT(PATH)\ parsestruct_ptr->metagenomethreader_arguments.PATH #define MATRIXSTRUCT(PATH) parsestruct_ptr->matrix_info.PATH #define XMLPARSERSTRUCT(PATH) parsestruct_ptr->xmlparser_static.PATH #define HITSTRUCT(PATH) parsestruct_ptr->hits_statistics.PATH #define FILEPOINTEROUT parsestruct_ptr->fp_outputfile #define HITFILEOUT parsestruct_ptr->fp_giexp_file #define PARSESTRUCT(PATH) parsestruct_ptr->PATH /* Strukturdefinition fuer die Eintraege in der Combined-Score-Matrix */ typedef struct { double matrix_score; unsigned long count; GtArray *hit_number; } CombinedScoreMatrixEntry; /* Struktur zur Speicherung der Bereichsgrenzen kodierender Abschnitte */ typedef struct { GtArray *from; GtArray *to; } RegionStruct; /* Strukturdefinition fuer die Struktur zur Speicherung ausschliesslich der Hit-Informationen, die zu einem syn-Score beitragen */ typedef struct { GtStrArray *hit_gi, *hit_def, *hit_hsp_nr, *hit_from, *hit_to; } HitInformation; /* Strukturdefinition fuer die Eintraege in die Path-Matrix */ typedef struct { double score; unsigned short path_frame; } PathMatrixEntry; /* Strukturdefinition, die zur Aufnahme der Kommandozeilenargumente dient */ typedef struct { double synonomic_value, nonsynonomic_value, blasthit_end_value, stopcodon_queryseq, stopcodon_hitseq, frameshift_span, prediction_span, leavegene_value, percent_value; GtStr *curl_fcgi_db, *outputtextfile_name, *giexpfile_name; int outputfile_format, codon_mode; bool hitfile_bool, homology_mode, extended_mode, testmodus_mode; unsigned long min_as; } MetagenomeThreaderArguments; /* Typdefinition der Struktur zur Aufnahme von Informationen aus dem XML-File und den DNA-Informationen von Query und Hit */ typedef struct { GtArray *query_frame, *hit_frame, *query_from, *query_to; GtStr *query_dna, *query_def; GtStrArray *hit_gi_nr, *hit_num, *hit_gi_def, *hit_acc, *fasta_row, *hit_from, *hit_to, *hit_dna, *hsp_qseq, *hsp_hseq; } MatrixMemory; /* Struktur fuer den Statistikbereich */ typedef struct { GtStrArray *hits_statistic; unsigned long *hitsnum, *memory, hitsnumber, stat_pos; } HitsStatistic; /* Struktur fuer Variablen in der mg_xmlparser-Datei */ typedef struct { unsigned short query_array_index_start, hit_array_index_start, hit_hsp_array_index_start, query_array_index_end, hit_array_index_end, hit_hsp_array_index_end; unsigned long hit_counter; } XMLparser_static; /* Struktur fuer Variablen in der mg_compute_gene_prediction-Datei */ typedef struct { double matrixscore, matrixscore_before; short current_frame, frame_before, function_stop; unsigned long noncodingcounter, codingcounter; } GenePrediction_static; /* Typdefinition der Struktur, die als Data an die Expat-Funktionen uebergeben werden kann Hauptstruktur, die auch an die wesentlichen anderen Funktionen uebergeben wird */ typedef struct { GtStrArray *query_array, *hit_array, *hit_hsp_array, *query_frame_tmp, *hit_frame_tmp, *key_tmp; GtStr *xml_tag, *buf_ptr, *hit_fastafile, *xmlfile, *gi_def_tmp, *gi_acc_tmp, *hit_gi_nr_tmp, *fasta_row, *result_hits; GtArray *value_tmp; GtBioseq *queryseq, *hitseq; GtFile *fp_outputfile, *fp_blasthit_file, *fp_giexp_file; GtHashtable *queryhash, *hithash, *resulthits; GtDlist *outlist; GtError *err; int had_err; unsigned short def_flag, hit_flag, hit_hsp_flag, xml_tag_flag, giexp_flag, gi_flag; unsigned long xml_linenumber, hits_memory; double syn, non_syn; MatrixMemory matrix_info; MetagenomeThreaderArguments metagenomethreader_arguments; HitsStatistic hits_statistics; XMLparser_static xmlparser_static; GenePrediction_static geneprediction_static; } ParseStruct; /* specific access mode of queryhash */ DECLARE_HASHMAP(char *, gt_cstr_nofree, unsigned long *, ulp,,) DECLARE_SAFE_DEREF(unsigned long *, ulp) /* Funktion, mit der der Metagenomethreader gestartet wird Parameter: Anzahl der Kommandozeilenargumente, Zeiger auf die Kommandozeilenargumente, GtError-Variable Returnwert: Fehlercode */ int gt_metagenomethreader(int argc, const char **argv, GtError *); /* Funktion zur Ueberpruefung auf ein Stop-Codon Parameter: Zeiger auf ein Triplet von Zeichen Returnwert: 0 = kein Stop-Codon, 1 = Stop-Codon */ short gt_check_stopcodon(char *); /* Funktion zum Auslesen der Query-DNA Sequenz zu einem GI-Def Eintrag des XML-Files Parameter: Zeiger auf StringArray (Sequenzen der Treffer zu einer Hit-GI-Nr), String-Zeiger auf die Hit-GI-Nr, String-Zeiger auf Hit-From und String-Zeiger auf den Hit-To String, GtError-Variable Returnwert: void */ int mg_curl(ParseStruct *, unsigned long, GtError *); /* Funktion zur Berechnung der Combined-Scores Parameter: Zeiger auf die Parsestruct; Anzahl der Hits zur betrachteten Hit-GI-Nr; GtError-Variable Returnwert: void */ int mg_combinedscore(ParseStruct *, unsigned long, GtError *); /* Funktion zur Ausgabe der berechneten Ergebnisse Parameter: Zeiger auf ParseStruct-Struktur, CombinedScore-Matrix, die HitInformation-Struktur, die RegionStruct-Struktur, das Char-Zeichen, um welchen Bereich es sich handelt Returnwert: void */ void mg_outputwriter(ParseStruct *, CombinedScoreMatrixEntry **, HitInformation *, RegionStruct **, char, GtError *); /* Funktion zur Bestimmung der zu einem Lesereahmen gehoerigen Matrix-Zeile Parameter: aktueller Leserahmen Returnwert: Matrixzeile */ short get_matrix_row(long); /* Funktion zur Bestimmung des Leserahmens zu einer Matrix-Zeile Parameter: Matrixzeile Returnwert: Leserahmen */ short get_current_frame(long); /* Funktion zur Berechnung des reversen Komplements Parameter: Zeiger auf eine Seq., Seq-Laenge, GtError-Variable Returnwert: had_err */ int mg_reverse_complement(char *, unsigned long, GtError *); #endif genometools-1.5.1/src/mgth/mg_codon.c000066400000000000000000000053351211610345200175310ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* Copyright (c) 2006 Gordon Gremme Copyright (c) 2006 Center for Bioinformatics, University of Hamburg See LICENSE file or http://genometools.org/license.html for license details. */ /* This implementation was heavily inspired by code from Stefan Kurtz. */ /* erweitert fuer MG um den Fall unbekannter AS X und den Faellen der Degeneration an der dritten Stelle (R/Y/N) */ /* modified for metagenomethreader; */ #include "mg_codon.h" #define T_CODE 0 #define C_CODE 1 #define A_CODE 2 #define G_CODE 3 #define X_CODE 4 char mg_codon2amino(char n0, char n1, char n2) { static char aminos[] = "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRR" "IIIMTTTTNNKKSSRRVVVVAAAADDEEGGGGX"; unsigned int code = 0; switch (n0) { case 'A': case 'a': code = A_CODE << 4; break; case 'C': case 'c': code = C_CODE << 4; break; case 'G': case 'g': code = G_CODE << 4; break; case 'T': case 't': case 'U': case 'u': code = T_CODE << 4; break; default: code = G_CODE << 4; } switch (n1) { case 'A': case 'a': code += A_CODE << 2; break; case 'C': case 'c': code += C_CODE << 2; break; case 'G': case 'g': code += G_CODE << 2; break; case 'T': case 't': case 'U': case 'u': /* code += T_CODE << 2; */ break; default: code = G_CODE << 2; } switch (n2) { case 'A': case 'a': case 'R': case 'r': code += A_CODE; break; case 'C': case 'c': code += C_CODE; break; case 'G': case 'g': code += G_CODE; break; case 'T': case 't': case 'U': case 'u': case 'N': case 'n': case 'Y': case 'y': code += T_CODE; break; default: code += X_CODE; } return aminos[code]; } genometools-1.5.1/src/mgth/mg_codon.h000066400000000000000000000022711211610345200175320ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* Copyright (c) 2006 Gordon Gremme Copyright (c) 2006 Center for Bioinformatics, University of Hamburg See LICENSE file or http://genometools.org/license.html for license details. modiefied for metagenomethreader; */ #ifndef MG_CODON_H #define MG_CODON_H char mg_codon2amino(char, char, char); #endif genometools-1.5.1/src/mgth/mg_combinedscore.c000066400000000000000000000522451211610345200212450ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "mg_combinedscore.h" #include "core/trans_table_api.h" int mg_combinedscore(ParseStruct *parsestruct_ptr, unsigned long hit_counter, GtError * err) { int had_err = 0; unsigned short current_row, k; unsigned long contig_len = 0, contig_seq_diff = 0, hit_len = 0, hit_seq_diff = 0, i = 0, j = 0, contig_index = 0, hit_index = 0, gap_len = 0, ulhit_from = 0, ulhit_to = 0, mod = 0, *count_row; /* Hilfszaehler fuer die involvierten Hits fuer den jew. combined-Score */ /* Matrix der Combined-Scores */ CombinedScoreMatrixEntry **combinedscore_matrix; /* Hit-Informationen der relevanten Blast-Hits (relevant: Synonym/Nicht-Synonym Rate >=1) */ HitInformation hit_information; /* Hilfszeile zur Abarbeitungs eines Hit */ double *matrix_row; char contig_triplet[3], /* Query-Triplet von dem die AS bestimmt werden soll */ contig_as, /* Aminosaeure des uebergebenen Query-Triplets */ hit_triplet[3], /* Hit-Triplet von dem die AS bestimmt werden soll */ hit_as, /* Aminosaeure des uebergebenen Hit-Triplets */ *contig_seq = NULL, /* Contig-DNA-Sequenz */ *hit_seq = NULL, /* Hit-DNA-Sequenz */ *contig_seq_tri = NULL, *hit_seq_tri = NULL, *contig_seq_ptr; const char *contig_as_ptr, *hit_as_ptr; GtTransTable *transtable; /* Standard-Translationstabelle */ transtable = gt_trans_table_new_standard(NULL); gt_assert(transtable); /* Check Umgebungsvariablen */ gt_error_check(err); /* Zeiger auf den vollstaendigen Query-DNA Eintrag */ contig_seq_ptr = gt_str_get(MATRIXSTRUCT(query_dna)); /* contig_len legt die Anzahl der Spalten der Matrix fest */ contig_len = gt_str_length(MATRIXSTRUCT(query_dna)); /* Speicherplatzreservierung fuer die Combined-Score Matrix */ gt_array2dim_calloc(combinedscore_matrix, 7, contig_len); /* Erstellen der GtArrays fuer die Hit-Nummer fuer jeden Matrix-Eintrag Ueber die Hit-Nummer erfolgt die Zuordnung zu den entsprechenden Blast-Hits in der Hit-Information-Struktur */ for (k = 0; k < 7; k++) { for (j = 0; j < contig_len; j++) { combinedscore_matrix[k][j].hit_number = gt_array_new(sizeof (unsigned long)); } } /* String-Arrays der Hit-Information Struktur anlegen */ hit_information.hit_gi = gt_str_array_new(); hit_information.hit_def = gt_str_array_new(); hit_information.hit_hsp_nr = gt_str_array_new(); hit_information.hit_from = gt_str_array_new(); hit_information.hit_to = gt_str_array_new(); /* fuer jeden Hit erfolgt eine Berechnung der Combined-Scores */ for (i = 0; i < hit_counter; i++) { /* Speicherplatz fuer die Hilfszeilen wird reserviert */ matrix_row = gt_calloc(contig_len, sizeof (double)); count_row = gt_calloc(contig_len, sizeof (unsigned long)); contig_seq_tri = gt_calloc(4, sizeof (char)); hit_seq_tri = gt_calloc(4, sizeof (char)); /* Zeiger auf die Proteinsequenzen von Hit und Query */ contig_as_ptr = gt_str_array_get(MATRIXSTRUCT(hsp_qseq), i); hit_as_ptr = gt_str_array_get(MATRIXSTRUCT(hsp_hseq), i); /* Funktion zur Bestimmung der Zeile in der Matrix, die fuer den aktuellen Leserahmen steht */ current_row = get_matrix_row(LONG_VALUE(MATRIXSTRUCT(query_frame), i)); /* to-from+1 ist die anzahl der zu betrachtenden DNA-Basen, zusaetzlich +1 fuer das Stringendezeichen */ contig_seq_diff = LONG_VALUE(MATRIXSTRUCT(query_to), i) - LONG_VALUE(MATRIXSTRUCT(query_from), i) + 2; hit_len = strlen(gt_str_array_get(MATRIXSTRUCT(hit_dna), i)); ulhit_from = atol(gt_str_array_get(MATRIXSTRUCT(hit_from), i)); ulhit_to = atol(gt_str_array_get(MATRIXSTRUCT(hit_to), i)); hit_seq_diff = ulhit_to - ulhit_from + 2; /* Ueberpruefen der Vereinbarkeit von Query- und Hit-Sequenz unterschiedliche Laengen sind nur in 3er Schritten erlaubt -> Gaps in der AS-Sequenz */ if (contig_seq_diff - hit_seq_diff > 0) { mod = (contig_seq_diff - hit_seq_diff) % 3; } else mod = (hit_seq_diff - contig_seq_diff) % 3; if ((LONG_VALUE(MATRIXSTRUCT(query_to), i) > contig_len) || (hit_seq_diff - 1 != hit_len)) mod = 1; /* Fehlermeldung bei Unvereinbarkeit */ if (mod != 0) { gt_error_set(err, "sequences error: matching sequences do not fit in length.\ wrong FASTA-files or please delete entry %s!?", gt_str_array_get(MATRIXSTRUCT(hit_gi_def), i)); had_err = -1; } /* Speicherplatreservierung fuer die Query-DNA-Seq. */ contig_seq = gt_calloc(contig_seq_diff, sizeof (char)); /* kopieren von contig_seq_diff-1 Zeichen */ (void) snprintf(contig_seq, contig_seq_diff, "%s", contig_seq_ptr + (LONG_VALUE(MATRIXSTRUCT(query_from), i) - 1)); /* die laenge der Hit-Sequenz kann max. der Laenge der QueryDNA Seq entsprechen */ hit_seq = gt_calloc(hit_seq_diff, sizeof (char)); /* kopieren von hit_seq_diff-1 Zeichen */ (void) snprintf(hit_seq, hit_seq_diff, "%s", gt_str_array_get(MATRIXSTRUCT(hit_dna), i)); /* Bei einem negativen Leserahmen muss das Reverse-Komplement der Sequenz gebildet werden */ if ((LONG_VALUE(MATRIXSTRUCT(query_frame), i) < 0) && !had_err) { /* bestimmen des Reverse-Komplement */ had_err = mg_reverse_complement(contig_seq, contig_seq_diff - 1, err); } /* Gleiches Vorgehen bei negativen Leserahmen wie bei der Query-DNA */ if ((LONG_VALUE(MATRIXSTRUCT(hit_frame), i) < 0) && !had_err) { had_err = mg_reverse_complement(hit_seq, hit_seq_diff - 1, err); } if (!had_err) { for (j = 0, contig_index = 0, hit_index = 0; j < hit_len - 2; j += 3, contig_index += 3, hit_index += 3) { if (contig_index < contig_len && hit_index < hit_len) { contig_as = contig_as_ptr[j / 3]; hit_as = hit_as_ptr[j / 3]; if (contig_as == '-') { gap_len = strspn(contig_as_ptr + j / 3, "-"); hit_index += 3 * gap_len; } if (hit_as == '-') { gap_len = strspn(hit_as_ptr + j / 3, "-"); contig_index += 3 * gap_len; } if (hit_as != '-' && contig_as != '-') { (void) snprintf(contig_seq_tri, 4, "%s", contig_seq + contig_index); (void) snprintf(hit_seq_tri, 4, "%s", hit_seq + hit_index); if ((strspn(contig_seq_tri, "acgtuACGTU") == 3) && (strspn(hit_seq_tri, "acgtuACGTU") == 3)) { /* Aktuelles Hit-Triplet */ hit_triplet[0] = hit_seq[hit_index]; hit_triplet[1] = hit_seq[hit_index + 1]; hit_triplet[2] = hit_seq[hit_index + 2]; /* Aktuelles Query-Triplet */ contig_triplet[0] = contig_seq[contig_index]; contig_triplet[1] = contig_seq[contig_index + 1]; contig_triplet[2] = contig_seq[contig_index + 2]; /* Bestimmen der AS der jeweiligen Triplets */ had_err = gt_trans_table_translate_codon(transtable, contig_triplet[0], contig_triplet[1], contig_triplet[2], &contig_as, err); if (!had_err) { had_err = gt_trans_table_translate_codon(transtable, hit_triplet[0], hit_triplet[1], hit_triplet[2], &hit_as, err); } } } /* Aufruf der Funktion fill_matrix; berechnet die Combined-Scores uebergeben werden: die Combined-Score-Matrix Hit-AS des aktuellen Triplets Query-AS des aktuelen Triplets der aktuelle Leserahmen j - hier: die Position in der Query-Sequenz hit-len und contig-len i - hier: die aktuell betrachtete Hit-Sequenz Zeiger auf die parsestruct die Hilfs-Matrix-Zeile Contig- und Hit-Sequenz */ fill_matrix(combinedscore_matrix, &hit_as, &contig_as, current_row, contig_index, hit_index, hit_len, contig_len, i, parsestruct_ptr, matrix_row, count_row, contig_seq, hit_seq, &hit_information); } } gt_free(contig_seq); gt_free(hit_seq); gt_free(contig_seq_tri); gt_free(hit_seq_tri); gt_free(matrix_row); gt_free(count_row); } else { gt_free(contig_seq); gt_free(hit_seq); gt_free(contig_seq_tri); gt_free(hit_seq_tri); gt_free(matrix_row); gt_free(count_row); break; } } if (!had_err) { /* nach dem erstellen der Combined-Score Matrix muessen die einzelnen Positionen noch mit der Anzahl der beteiligten Hits normalisiert werden */ for (j = 0; j < contig_len; j++) { for (k = 0; k < 7; k++) { if (combinedscore_matrix[k][j].count != 0) { combinedscore_matrix[k][j]. matrix_score /= combinedscore_matrix[k][j].count; } } } /* Aufruf der Funktion computepath - DP-Ansatz uebergeben werden: die Combined-Score-Matrix Anzahl Zeilen Anzahl Spalten */ had_err = mg_computepath(combinedscore_matrix, &hit_information, 7, contig_len, parsestruct_ptr, err); } for (i = 0; i < 7; i++) { for (j = 0; j < contig_len; j++) { gt_array_delete(combinedscore_matrix[i][j].hit_number); } } gt_array2dim_delete(combinedscore_matrix); gt_trans_table_delete(transtable); gt_str_array_delete(hit_information.hit_gi); gt_str_array_delete(hit_information.hit_def); gt_str_array_delete(hit_information.hit_hsp_nr); gt_str_array_delete(hit_information.hit_from); gt_str_array_delete(hit_information.hit_to); return had_err; } /* Funktion zur Bestimmung der dem Leserahmen entsprechenden Matrix-Zeile */ short get_matrix_row(long frame_fct) { gt_assert(frame_fct >= -3 && frame_fct <= 3); return 3 - frame_fct; /* [-3..3] -> [6..0] */ } /* Umkehrfunktion zu get_matrix_row - aus der Matrix-Zeile wird der Leserahmen bestimmt */ short get_current_frame(long row_fct) { gt_assert(row_fct >= 0 && row_fct <= 6); return 3 - row_fct; /* [0..6] -> [3..-3] */ } static void fill_matrix(CombinedScoreMatrixEntry **combinedscore_matrix, char *hit_amino, char *query_amino, short current_row_fct, unsigned long position_contig, unsigned long position_hit, unsigned long hit_len, unsigned long contig_len, unsigned long hit_number, ParseStruct *parsestruct_ptr, double *matrix_row, unsigned long *count_row_fct, char *contig_seq, char *hit_seq, HitInformation *hit_information) { unsigned long j = 0, nr_of_strings = 0; unsigned short k = 0; unsigned long query_from; unsigned long query_to; query_from = LONG_VALUE(MATRIXSTRUCT(query_from), hit_number) - 1; query_to = LONG_VALUE(MATRIXSTRUCT(query_to), hit_number) - 1; /* das Ende von Blast-Hits innerhalb der Query-Sequenz wird mit -10 bewertet */ if (position_hit == hit_len - 3 && *(long *) MATRIXSTRUCT(query_to) != contig_len && k == 3) { /* Wenn der Leserahmen negativ ist, muessen die Combined-Scores von Rechts nach Links in die Combined-Score Matrix eingetragen werden - also ausgehend vom Query-to Wert */ if (current_row_fct > 3) { matrix_row[POSITION (MATRIXSTRUCT(query_to), hit_number, -position_contig, -k + 1)] += ARGUMENTSSTRUCT(blasthit_end_value); } else { matrix_row[POSITION (MATRIXSTRUCT(query_from), hit_number, position_contig, k - 1)] += ARGUMENTSSTRUCT(blasthit_end_value); } } /* Stop-Codon in der Query-Sequenz, kein Stop-Codon in der Hit-Sequenz */ else if (*hit_amino != '*' && *query_amino == '*') { /* Berechnung der Combined-Scores immer fuer die 3 DNA-Basen des Triplets Stop-Codon in der Query-Sequnez wird mit -2.0 bestraft; Anzahl der beteiligten Hits am Combined-Score um 1 erhoeht */ for (k = 0; k < 3; k++) { add_scores(parsestruct_ptr, matrix_row, count_row_fct, current_row_fct, hit_number, position_contig, k, ARGUMENTSSTRUCT(stopcodon_hitseq)); } } /* Stop-Codon in der Hit-Sequnez, kein Stop-Codon in der Query-Sequenz */ else if (*hit_amino == '*' || *query_amino == '*') { /* Berechnung der Combined-Scores immer fuer die 3 DNA-Basen des Triplets Stop-Codon in der Hit-Sequnez wird mit -5.0 bestraft; Anzahl der beteiligten Hits am Combined-Score um 1 erhoeht */ for (k = 0; k < 3; k++) { add_scores(parsestruct_ptr, matrix_row, count_row_fct, current_row_fct, hit_number, position_contig, k, ARGUMENTSSTRUCT(stopcodon_queryseq)); } } /* AS von Hit und Query sind identisch */ else if (*hit_amino == *query_amino) { /* Berechnung der Combined-Scores immer fuer die 3 DNA-Basen des Triplets */ for (k = 0; k < 3; k++) { if (!ARGUMENTSSTRUCT(homology_mode)) { /* DNA-Basen stimmen nicht ueberein - synonymer Austausch; hit_seq ist Zeiger auf die erste DNA-Base der Sequenz position ist die aktuelle Position in der DNA-Sequenz und k die Position im aktuellen Triplet */ if (tolower(hit_seq[position_hit + k]) != tolower(contig_seq[position_contig + k])) { /* Bei Uebereinstimmung der AS und keiner Basen-Uebereinstimmung wird der Zaheler der Synonymen Basen-Austausche erhoeht, der aktuellen Position in der Combined-Score-Matrix der Wert 1 hinzuaddiert und gleichzeitig die Anzahl der beteiligten Hits ebenfalls um 1 erhoeht */ add_scores(parsestruct_ptr, matrix_row, count_row_fct, current_row_fct, hit_number, position_contig, k, ARGUMENTSSTRUCT(synonomic_value)); parsestruct_ptr->syn++; } } else { /* Experimenteller Status - Suche nach Homologien statt Orieentierung an Synonymen-Basenaustauschen */ if (tolower(hit_seq[position_hit + k]) == tolower(contig_seq[position_contig + k])) { /* Bei Uebereinstimmung der AS und keiner Basen-Uebereinstimmung wird der Zaheler der Synonymen Basen-Austausche erhoeht, der aktuellen Position in der Combined-Score-Matrix der Wert 1 hinzuaddiert und gleichzeitig die Anzahl der beteiligten Hits ebenfalls um 1 erhoeht */ add_scores(parsestruct_ptr, matrix_row, count_row_fct, current_row_fct, hit_number, position_contig, k, ARGUMENTSSTRUCT(synonomic_value)); parsestruct_ptr->syn++; } } } } /* AS stimmen nicht ueberein - nicht synonymer Base-Austausch */ else if (*hit_amino != *query_amino) { /* Berechnung der Combined-Scores immer fuer die 3 DNA-Basen des Triplets */ for (k = 0; k < 3; k++) { /* DNA-Basen stimmen nicht ueberein - nicht-synonymer Austausch; hit_seq ist Zeiger auf die erste DNA-Base der Sequenz position ist die aktuelle Position in der DNA-Sequenz und k die Position im aktuellen Triplet */ if (tolower(hit_seq[position_hit + k]) != tolower(contig_seq[position_contig + k])) { /* Bei Nicht-Uebereinstimmung der AS und keiner Basen-Uebereinstimmung wird der Zaheler der Nicht-Synonymen Basen-Austausche erhoeht, vom Wert der aktuellen Position in der Combined-Score-Matrix der Wert 1 subtrahiert und gleichzeitig die Anzahl der beteiligten Hits ebenfalls um 1 erhoeht */ add_scores(parsestruct_ptr, matrix_row, count_row_fct, current_row_fct, hit_number, position_contig, k, ARGUMENTSSTRUCT(nonsynonomic_value)); parsestruct_ptr->non_syn++; } } } /* Sequenzende und damit Ende der Bearbeitung des aktuellen Hits erreicht */ if (hit_len - 3 == position_hit) { /* Falls die Non-Syn Anzahl 0 ist wird sie auf 1 gesetzt, um eine Division durch 0 zu vermeiden */ if (parsestruct_ptr->non_syn == 0.0) parsestruct_ptr->non_syn = 1.0; /* Falls die Rate von Syn zu Non-Syn Austauschen kleiner als 1 ist, werden die Ergebnisse nicht betrachtet, da mit hoher WS keine codierende Sequenz vorliegt */ if (parsestruct_ptr->syn / parsestruct_ptr->non_syn < 1.0) { parsestruct_ptr->syn = 0.0; parsestruct_ptr->non_syn = 0.0; } /* codierende Sequenz liegt mit hoher WS vor, da syn/non_syn >=1 */ else { /* Abspeichern der Hit-Informationen */ gt_str_array_add_cstr(hit_information->hit_gi, gt_str_array_get(MATRIXSTRUCT(hit_gi_nr), hit_number)); gt_str_array_add_cstr(hit_information->hit_def, gt_str_array_get(MATRIXSTRUCT(hit_gi_def), hit_number)); gt_str_array_add_cstr(hit_information->hit_hsp_nr, gt_str_array_get(MATRIXSTRUCT(hit_num), hit_number)); gt_str_array_add_cstr(hit_information->hit_from, gt_str_array_get(MATRIXSTRUCT(hit_from), hit_number)); gt_str_array_add_cstr(hit_information->hit_to, gt_str_array_get(MATRIXSTRUCT(hit_to), hit_number)); nr_of_strings = gt_str_array_size(hit_information->hit_def) - 1; /* Uebertragen der Ergebnisse des aktuellen Hits in die Combined-Score Matrix */ for (j = query_from; j < query_to + 1; j++) { combinedscore_matrix[current_row_fct][j].matrix_score += matrix_row[j]; combinedscore_matrix[current_row_fct][j].count += count_row_fct[j]; gt_array_add(combinedscore_matrix[current_row_fct][j].hit_number, nr_of_strings); } parsestruct_ptr->syn = 0.0; parsestruct_ptr->non_syn = 0.0; } } } static void add_scores(ParseStruct *parsestruct_ptr, double *matrix_row, unsigned long *count_row_fct, short current_row_fct, unsigned long hit_number, unsigned long position, unsigned short k, double score) { /* Wenn der Query-Leserahmen negativ ist, muessen die Combined-Scores von Rechts nach Links in die Combined-Score Matrix eingetragen werden - also ausgehend vom Query-to Wert */ if (current_row_fct > 3) { matrix_row[POSITION(MATRIXSTRUCT(query_to), hit_number, -position, -k)] += score; count_row_fct[POSITION (MATRIXSTRUCT(query_to), hit_number, -position, -k)] += 1; } else { matrix_row[POSITION(MATRIXSTRUCT(query_from), hit_number, position, k)] += score; count_row_fct[POSITION (MATRIXSTRUCT(query_from), hit_number, position, k)] += 1; } } genometools-1.5.1/src/mgth/mg_combinedscore.h000066400000000000000000000057311211610345200212500ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MG_COMBINEDSCORE_H #define MG_COMBINEDSCORE_H #include "core/codon_api.h" #include "metagenomethreader.h" #include "mg_computepath.h" #define LONG_VALUE(VALUE, INDEX)\ *(long*)gt_array_get((VALUE), (INDEX)) #define POSITION(QUERY_FROM, HIT_NUMBER, POSITION, K)\ LONG_VALUE(QUERY_FROM, HIT_NUMBER)+(POSITION)+(K)-1 /* Funktion zum Eintragen des Scores in die Combined-Score Matrix Parameter: Combined-Score-Matrix, Hit-AS, Query-AS, aktueller Leserahmen der Query-DNA, Position in der Query-Seq., Position in der Hit-Seq., Laenge des Blast-Hits, Laenge der Contig-Seq, Hit-Nr, Zeiger auf die ParseStruct-Struktur, Hilfezeile fuer die Combined-Scores, Hilfszeile der Counts, Query-DNA-Seq, Hit-DNA-Seq, Zeiger auf die HitInformation-Struktur Returnwert: void */ static void fill_matrix(CombinedScoreMatrixEntry **, char *, char *, short, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, ParseStruct *, double *, unsigned long *, char *, char *, HitInformation *); /* Funktion zur Berechnung des Matrixscore an der entsprechenden Position der Combined-Score-Matrix Parameter: Zeiger auf ParseStruct, Hilfszeilen matrix_row u. count_row, aktuelle Matrix-Zeile, Hit-Number, Position in der Query-DNA, Position im Triplet, Score - abh. vom Fall (syn, nonsyn, stop-codon in Query- oder Hit-Sequence, Blast-Hit-Ende) Returnwert: void */ static void add_scores(ParseStruct *, double *, unsigned long *, short, unsigned long, unsigned long, unsigned short, double); #endif genometools-1.5.1/src/mgth/mg_compute_gene_prediction.c000066400000000000000000001204411211610345200233150ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "mg_compute_gene_prediction.h" #include "core/unused_api.h" /* Funktion zur Berechnung der Start-Stop Informationen der genkodierenden Bereiche sowie deren Leserahmen Parameter: row, column, max-Wert der letzten Spalte der Opt-Path-Matrix, Path-Matrix, CombinedScore-Matrix, GtArray des opt. Pfades (Leserahmen), Hit-Information, Zeiger auf ParseStruct, Zeiger auf RegionStruct, Zeiger auf den Speicherbereich zum Abspeichern der beteiligten Hits an einem Ergebnis Returnwert: void */ static void gene_prediction(unsigned short, unsigned long, double, PathMatrixEntry **, CombinedScoreMatrixEntry **, GtArray *, HitInformation *, ParseStruct *, RegionStruct **, unsigned long *, GtError *); /* Funktion zur Vereinigung von genkodierenden Bereichen innerhalb des selben Leserahmen Parameter: Zeiger auf ParseStruct, Zeiger auf RegionStruct, der "reale" Leserahmen Returnwert: void */ static void genemergeprocessing(ParseStruct *, RegionStruct **, GtError *); /* Funktion zur Identifizierung von Frameshifts Parameter: Zeiger auf ParseStruct, Zeiger auf RegionStruct, der "reale" Leserahmen Returnwert: void */ static int frameshiftprocessing(ParseStruct *, RegionStruct **, short, GtError *); /* Funktion zur Ueberpruefung von Sequenzbereichen auf beinhaltende Stop-Codons Parameter: Zeiger auf ParseStruct, from-Wert, to-Wert, aktueller Leserahmen Returnwert: 0 - kein Stop-Codon; 1 - Stop-Codon */ static int check_coding(ParseStruct *, unsigned long, unsigned long, short, GtError *); /* Funktion zum sortierten Einfuegen neuer Bereichsgrenzen kodierender Abschnitte in das real-Frame-Array Parameter: Zeiger auf RegionStruct-Struktur, GtArrays mit den From- und To-Werten des real-Frames,Arrays mit den From- und To-Werten der einzufuegenden Abschnitte, Index des Real-Frames,Index des tmp-Frames, real-Frame, Zeilenindex; Returnwert: void */ static void merge_array(RegionStruct **, GtArray *, GtArray *, GtArray *, GtArray *, unsigned long, unsigned long, short, unsigned short); /* Funktion zum sortierten der GtArrays mit den neu einzufuegenden Bereichsgrenzen Parameter: GtArrays der sortierten From- und To-Werte, GtArrays mit den From- und To-Werten der zu sortierenden GtArrays; Returnwert: void */ static void sort_realtmp(GtArray *, GtArray *, GtArray *, GtArray *); int mg_compute_gene_prediction(CombinedScoreMatrixEntry **combinedscore_matrix, PathMatrixEntry **path_matrix, unsigned long contig_len, HitInformation *hit_information, ParseStruct *parsestruct_ptr, GtError * err) { int had_err = 0; /* Variablen zur Bestimmung des Maximums der letzten Path-Matrix-Spalte */ double max_lastcolumn = DBL_MIN, max_tmp; /* Zaehlvariablen fuer die Zeilen */ unsigned short row_index, row_idx, real_frame = 0; /* Zaehlvariable fuer die Haeufigkeiten der einzelnen Frames sowie Variable fuer den Frame-Score */ unsigned long *frame_counter, real_frame_score; /* Struktur zur Speicherung der kodierenden Bereiche (from-to - Werte) */ RegionStruct **regionmatrix; /* GtArray fuer das Speichern der Frames des optimalen Pfades */ GtArray *frame_path_array; frame_path_array = gt_array_new(sizeof (unsigned short)); gt_error_check(err); /* Bestimmen des/der Max-Werte(s) der letzten Spalte der path_matrix */ for (row_index = 0; row_index < 7; row_index++) { max_tmp = path_matrix[row_index][contig_len - 1].score; if (max_tmp > max_lastcolumn) { max_lastcolumn = max_tmp; } } /* ausgehend von den Max-Werten startet die Vorhersage codierender Bereiche */ for (row_index = 0; row_index < 7; row_index++) { /* Matrix-Score der aktuellen Zeile entspricht dem Max-Wert */ if (path_matrix[row_index][contig_len - 1].score == max_lastcolumn) { gt_array2dim_calloc(regionmatrix, 7, 1); /* frame-counter zaehlt die Auftritts-haeufigkeiten der einzelnen Frames im opt. Pfad */ frame_counter = gt_calloc(7, sizeof (unsigned long)); real_frame_score = 0; for (row_idx = 0; row_idx < 7; row_idx++) { regionmatrix[row_idx][0].from = gt_array_new(sizeof (unsigned long)); regionmatrix[row_idx][0].to = gt_array_new(sizeof (unsigned long)); } /* Aufruf der Genvorhersagemethode */ gene_prediction(row_index, contig_len - 1, max_lastcolumn, path_matrix, combinedscore_matrix, frame_path_array, hit_information, parsestruct_ptr, regionmatrix, frame_counter, err); /* Falls es fuer Frame X kodierende Abschnitte gibt, werden diese von hinten nach vorne in der regionmatrix abgespeichert - hier werden sie nun umgedreht, um sie in aufsteigender Form vorliegen zu haben */ for (row_idx = 0; row_idx < 7; row_idx++) { if (gt_array_size(regionmatrix[row_idx][0].from) > 0) { gt_array_reverse(regionmatrix[row_idx][0].from); gt_array_reverse(regionmatrix[row_idx][0].to); } } /* XXX bestimmen des vermutlich realen Frames - Verbesserung moeglich? XXX */ for (row_idx = 0; row_idx < 7; row_idx++) { if ((frame_counter[row_idx] > real_frame_score) && (gt_array_size(regionmatrix[row_idx][0].from) > 0)) { real_frame_score = frame_counter[row_idx]; real_frame = row_idx; } } /* Aufruf der Funktion, in der auf moegliche Frame-Shifts geprueft wird */ had_err = frameshiftprocessing(parsestruct_ptr, regionmatrix, real_frame, err); if (!had_err) { /* Aufruf der Funktion, in der auf moegliche Vereinbarkeit kodierender Bereiche geprueft wird */ genemergeprocessing(parsestruct_ptr, regionmatrix, err); /* Aufruf der Ausgabefunktion und Ausgabe der Ergebnisse */ mg_outputwriter(parsestruct_ptr, combinedscore_matrix, hit_information, regionmatrix, 'h', err); for (row_idx = 0; row_idx < 7; row_idx++) { gt_array_delete(regionmatrix[row_idx][0].from); gt_array_delete(regionmatrix[row_idx][0].to); } } gt_array2dim_delete(regionmatrix); gt_free(frame_counter); } } gt_array_delete(frame_path_array); return had_err; } static void gene_prediction(unsigned short row, unsigned long column, double max_lastcolumn, PathMatrixEntry **path_matrix, CombinedScoreMatrixEntry **combinedscore_matrix, GtArray * frame_path_array, HitInformation *hit_information, ParseStruct *parsestruct_ptr, RegionStruct **regionmatrix, unsigned long *frame_counter, GtError * err) { unsigned long column_from, column_to; gt_error_check(err); /* die ersten beiden Spalten werden gesondert bearbeitet, da immer zwei Spalten zur Beurteilung, ob es sich um kodierende oder nicht-kodierende Positionen handelt, benoetigt werden. Zudem werden erst so die Berechnungen der Sequenzlaengen kodierender Bereiche bei Framewechsel und auch bei Wechsel von kodierendem zu nicht-kodierendem Bereich */ if (column == gt_str_length(MATRIXSTRUCT(query_dna)) - 1) { GENEPREDSTRUCT(matrixscore_before) = path_matrix[row][column].score; GENEPREDSTRUCT(frame_before) = path_matrix[row][column].path_frame; /* hinzufuegen des aktuellen Leserahmens - als Zeile - in das frame_path-Array */ gt_array_add(frame_path_array, row); /* Zaehlen der Frame-Haeufigkeiten */ frame_counter[row] += 1.0; } else if (column == gt_str_length(MATRIXSTRUCT(query_dna)) - 2) { GENEPREDSTRUCT(matrixscore) = path_matrix[row][column].score; GENEPREDSTRUCT(current_frame) = path_matrix[row][column].path_frame; /* hinzufuegen des aktuellen Leserahmens - als Zeile - in das frame_path-Array */ gt_array_add(frame_path_array, row); /* Zaehlen der Frame-Haeufigkeiten */ frame_counter[row] += 1.0; } /* ab hier beginnt die eigentliche Bearbeitung des optimalen Pfades in der Combined-Score-Matrix - berechnet wird jeweils die Position column+2 */ else { /* hinzufuegen des aktuellen Leserahmens - als Zeile - in das frame_path-Array */ gt_array_add(frame_path_array, row); /* Zaehlen der Frame-Haeufigkeiten */ frame_counter[row] += 1.0; /* nur wenn der vorherige Matrixscore(column+2) hoeher ist als der Aktuelle(column+1) ist, handelt es sich bei Position column+2 um eine kodierende Position */ if (GENEPREDSTRUCT(matrixscore_before) - GENEPREDSTRUCT(matrixscore) > 0) { /* Laenge des kodierenden Abschnittes um 1 erhoehen */ ++GENEPREDSTRUCT(codingcounter); /* Wechsel des Leserahmens von Position column+2 zu Position column+1; kodierender zu kodierender Abschnitt */ if (GENEPREDSTRUCT(current_frame) != GENEPREDSTRUCT(frame_before) && GENEPREDSTRUCT(noncodingcounter) == 0) { /* Speichern der Grenzen des kodierenden Bereichs vor dem Framewechsel */ column_from = column + 2; column_to = column + GENEPREDSTRUCT(codingcounter) + 1; gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].from, column_from); gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].to, column_to); GENEPREDSTRUCT(codingcounter) = 0; } /* wenn noncodingcounter > 0 liegt ein Wechsel von nicht-kodierender zu kodierender Region vor */ else if (GENEPREDSTRUCT(noncodingcounter) > 0) { GENEPREDSTRUCT(noncodingcounter) = 0; } } /* else-Fall: nicht-kodierender Positionen */ else { /* Wechsel von kodierendem zu nicht-kodierendem Abschnitt */ if (GENEPREDSTRUCT(codingcounter) > 0) { /* Speichern der Grenzen des vorangegangenen kodierenden Bereichs */ column_from = column + 3; column_to = column + GENEPREDSTRUCT(codingcounter) + 2; gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].from, column_from); gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].to, column_to); GENEPREDSTRUCT(codingcounter) = 0; } GENEPREDSTRUCT(noncodingcounter)++; } /* Sichern der Vorgaengerinformationen (column+1) und einlesen der aktuellen Informationen (column) */ GENEPREDSTRUCT(matrixscore_before) = GENEPREDSTRUCT(matrixscore); GENEPREDSTRUCT(frame_before) = GENEPREDSTRUCT(current_frame); GENEPREDSTRUCT(matrixscore) = path_matrix[GENEPREDSTRUCT(current_frame)][column].score; GENEPREDSTRUCT(current_frame) = path_matrix[GENEPREDSTRUCT(current_frame)][column].path_frame; } /* die ersten beiden Spalten der Combined-Score-Matrix werden in einem Fall bearbeitet */ if (column == 0) { /* das Function Stop-Flag wird gesetzt */ GENEPREDSTRUCT(function_stop) = 1; /* if-Fall: kodierende Base an Position 1 */ if (GENEPREDSTRUCT(matrixscore_before) - GENEPREDSTRUCT(matrixscore) > 0) { ++GENEPREDSTRUCT(codingcounter); /* Wechsel des Leserahmens - kodierender zu kodierender Abschnitt */ if (GENEPREDSTRUCT(current_frame) != GENEPREDSTRUCT(frame_before) && GENEPREDSTRUCT(noncodingcounter == 0)) { column_from = column + 1; column_to = column + GENEPREDSTRUCT(codingcounter); gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].from, column_from); gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].to, column_to); GENEPREDSTRUCT(codingcounter) = 0; } if (GENEPREDSTRUCT(noncodingcounter) > 0) { GENEPREDSTRUCT(noncodingcounter) = 0; } } /* else-Fall: nicht-kodiernde Base an Position 1 */ else { /* der Bereich vor der nicht-kodiernden Position 1 ist kodierend */ if (GENEPREDSTRUCT(codingcounter) > 0) { column_from = column + 2; column_to = column + GENEPREDSTRUCT(codingcounter) + 1; gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].from, column_from); gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].to, column_to); GENEPREDSTRUCT(codingcounter) = 0; } GENEPREDSTRUCT(noncodingcounter)++; } /* Wenn der Wert in der ersten Spalte der Combined-Score-Matrix positiv ist, ist die Position 0 kodierend */ if (GENEPREDSTRUCT(matrixscore) > 0) { GENEPREDSTRUCT(codingcounter)++; /* Falls der noncodingcounter > 0 ist, ist der Bereich vor 0 nicht-kodierend */ if (GENEPREDSTRUCT(noncodingcounter) > 0) { column_from = 0; column_to = 0; gt_array_add(regionmatrix[GENEPREDSTRUCT(current_frame)][0].from, column_from); gt_array_add(regionmatrix[GENEPREDSTRUCT(current_frame)][0].to, column_to); GENEPREDSTRUCT(noncodingcounter) = 0; } else { /* if-Fall: Wechsel des Leserahmens von kodierendem zu kodierendem Abschnitt */ if (GENEPREDSTRUCT(current_frame) != GENEPREDSTRUCT(frame_before)) { /* Vorgaengerbereich von Position 0 ist kodierend */ column_from = 1; column_to = GENEPREDSTRUCT(codingcounter) - 1; gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].from, column_from); gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].to, column_to); /* Position 0 ist ebenfalls kodierend */ column_from = 0; column_to = 0; gt_array_add(regionmatrix[GENEPREDSTRUCT(current_frame)][0].from, column_from); gt_array_add(regionmatrix[GENEPREDSTRUCT(current_frame)][0].to, column_to); GENEPREDSTRUCT(codingcounter) = 1; } /* else-Fall: Speichern des kodierenden Bereichs von 0 bis x */ else { column_from = 0; column_to = GENEPREDSTRUCT(codingcounter) - 1; gt_array_add(regionmatrix[GENEPREDSTRUCT(current_frame)][0].from, column_from); gt_array_add(regionmatrix[GENEPREDSTRUCT(current_frame)][0].to, column_to); } } } /* Position 0 ist nicht-kodierend */ else { /* Falls codingcounter > 0, dann ist der vor 0 liegende Bereich kodierend */ if (GENEPREDSTRUCT(codingcounter) > 0) { column_from = 1; column_to = column + GENEPREDSTRUCT(codingcounter); gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].from, column_from); gt_array_add(regionmatrix[GENEPREDSTRUCT(frame_before)][0].to, column_to); GENEPREDSTRUCT(codingcounter) = 0; } } GENEPREDSTRUCT(noncodingcounter) = 0; GENEPREDSTRUCT(codingcounter) = 0; } /* solange das Stop-Flag nicht gesetzt ist wird die CombinedScore-Matrix rekursiv spaltenweise abgearbeitet */ if (!GENEPREDSTRUCT(function_stop)) { if (column > 0) gene_prediction(path_matrix[row][column].path_frame, column - 1, max_lastcolumn, path_matrix, combinedscore_matrix, frame_path_array, hit_information, parsestruct_ptr, regionmatrix, frame_counter, err); else gene_prediction(path_matrix[row][column].path_frame, column, max_lastcolumn, path_matrix, combinedscore_matrix, frame_path_array, hit_information, parsestruct_ptr, regionmatrix, frame_counter, err); } else GENEPREDSTRUCT(function_stop) = 0; } static int frameshiftprocessing(ParseStruct *parsestruct_ptr, RegionStruct **regionmatrix, short real_frame, GtError * err) { int had_err = 0; unsigned short row_index, check_bp = 0; unsigned long arraysize, arraysize_realframe, GT_UNUSED arraysize_real, arraysize_tmp, array_idx, arrayreal_idx = 0, from_tmp, to_tmp, from_real, to_real, from_min = 0, to_min = 0; long min_value, min_value_tmp = LONG_MAX; GtArray *tmp_from; GtArray *tmp_to; GtArray *real_from; GtArray *real_to; GtArray *real_fromtmp; GtArray *real_totmp; GtArray *realfrom; GtArray *realto; gt_error_check(err); tmp_from = gt_array_new(sizeof (unsigned long)); tmp_to = gt_array_new(sizeof (unsigned long)); real_from = gt_array_new(sizeof (unsigned long)); real_to = gt_array_new(sizeof (unsigned long)); real_fromtmp = gt_array_new(sizeof (unsigned long)); real_totmp = gt_array_new(sizeof (unsigned long)); realfrom = gt_array_new(sizeof (unsigned long)); realto = gt_array_new(sizeof (unsigned long)); /* Vergleich mit allen anderen Frames - Der reale Frame ist der Frame mit der hoechsten Haeufigkeit (frame_counter) */ for (row_index = 0; row_index < 7; row_index++) { /* Frameshift nur zwischen realem und von diesem verschiedenen Frames moeglich */ if (row_index != real_frame) { /* Anzahl der kodierenden Bereiche im zu vergleichendem Leserahmen */ arraysize = gt_array_size(regionmatrix[row_index][0].from); if (arraysize > 0) { /* alle kodierenden Bereiche des zu vergleichenden Frames werden betrachtet */ for (array_idx = 0; array_idx < arraysize; array_idx++) { /* Grenzen des zu Betrachtenden Abschnitts - Abschnitte liegen in aufsteigender Reihenfolge vor */ from_tmp = *(unsigned long *) gt_array_get(regionmatrix[row_index][0].from, array_idx); to_tmp = *(unsigned long *) gt_array_get(regionmatrix[row_index][0].to, array_idx); /* Aufruf der Methode zur Ueberpruefung auf Stop-Codons im kodierendem Bereich des zu vergleichendem Frames - ueberprueft wird der kodierende Abschnitt bezgl. Stop-Codons im realen Frame */ check_bp = check_coding(parsestruct_ptr, from_tmp, to_tmp, real_frame, err); if (check_bp || !check_bp) { arraysize_realframe = gt_array_size(regionmatrix[real_frame][0].from); /* alle kodierenden Bereiche des realen Frames werden betrachtet */ for (arrayreal_idx = 0; arrayreal_idx < arraysize_realframe; arrayreal_idx++) { /* Grenzen des kodierenden Bereichs des realen Frames */ from_real = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0]. from, arrayreal_idx); to_real = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0]. to, arrayreal_idx); /* Bestimmen der Frames von realem und zu vergleichendem Frame mit minimalem Abstand */ if (from_real > from_tmp) { min_value = from_real - from_tmp; } else min_value = from_tmp - from_real; /* kodierender Bereich mit minimalem Abstand wird gespeichert */ if (min_value < min_value_tmp) { min_value_tmp = min_value; from_min = from_real = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0]. from, arrayreal_idx); to_min = to_real = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0]. to, arrayreal_idx); } } /* Falls der betrachtete Abschnitt des zu vergleichenden Frames innerhalb des max. Abstandes liegt (per GtOption bei Programmaufruf einstellbar) und der kodierende Bereich kein Stop-Codon enthaelt werden die Grenzen des Abschnittes im real_fromtmp- bzw. real_totmp-Array abgespeichert */ if (!check_bp && ((to_tmp + ARGUMENTSSTRUCT(frameshift_span) > from_min) || (to_min + ARGUMENTSSTRUCT(frameshift_span) > from_tmp))) { gt_array_add(real_fromtmp, from_tmp); gt_array_add(real_totmp, to_tmp); } /* ansonsten im from_tmp- bzw. to_tmp-Array */ else { gt_array_add(tmp_from, from_tmp); gt_array_add(tmp_to, to_tmp); } } else { had_err = -1; } } } if (!had_err) { /* die from- to-Grenzen des zu vergleichenden GtArrays werden aktualisiert */ gt_array_delete(regionmatrix[row_index][0].from); gt_array_delete(regionmatrix[row_index][0].to); regionmatrix[row_index][0].from = gt_array_clone(tmp_from); regionmatrix[row_index][0].to = gt_array_clone(tmp_to); gt_array_reset(tmp_from); gt_array_reset(tmp_to); } } } if (!had_err) { /* Anzahl der kodierenden Bereiche im realen- und im real_fromtmp-Array werden bestimmt */ arraysize_real = gt_array_size(regionmatrix[real_frame][0].from); arraysize_tmp = gt_array_size(real_fromtmp); /* Falls im tmp-Array Eintraege vorhanden sind, sind diese in das GtArray der kodierenden Abschnitte der realen-Frames einzutragen */ if (arraysize_tmp > 0) { /* sortieren der neu einzutragenden kodierenden Abschnitte anhand des From-Wertes */ sort_realtmp(realfrom, realto, real_fromtmp, real_totmp); /* bisher: rueckwaerts von hinten angegebene Bereichsgrenzen - danach: Bereichsgrenzen von vorne nach hinten */ gt_array_reverse(realfrom); gt_array_reverse(realto); /* sortiertes einfuegen der neuen Bereichsgrenzen in das GtArray bestehender kodierender Bereiche des realen Frames */ merge_array(regionmatrix, real_from, real_to, realfrom, realto, 0, 0, real_frame, row_index); /* aktualisieren der Bereichsgrenzen im GtArray des realen-Frames */ gt_array_delete(regionmatrix[real_frame][0].from); gt_array_delete(regionmatrix[real_frame][0].to); regionmatrix[real_frame][0].from = gt_array_clone(real_from); regionmatrix[real_frame][0].to = gt_array_clone(real_to); } } gt_array_delete(tmp_from); gt_array_delete(tmp_to); gt_array_delete(real_from); gt_array_delete(real_to); gt_array_delete(real_fromtmp); gt_array_delete(real_totmp); gt_array_delete(realfrom); gt_array_delete(realto); return had_err; } static void genemergeprocessing(ParseStruct *parsestruct_ptr, RegionStruct **regionmatrix, GtError * err) { unsigned short row_index; short check_bp; unsigned long array_idx, arraysize, from_tmp, to_tmp, from_tmp_next, to_tmp_real, function_stop = 0; GtArray *tmp_from; GtArray *tmp_to; gt_error_check(err); tmp_from = gt_array_new(sizeof (unsigned long)); tmp_to = gt_array_new(sizeof (unsigned long)); /* Frames werden nacheinander abgearbeitet - zeilenkodiert */ for (row_index = 0; row_index < 7; row_index++) { /* bestimmen der Anzahl kodierender Bereiche im aktuell betrachteten Frame */ arraysize = gt_array_size(regionmatrix[row_index][0].from); gt_array_reset(tmp_from); gt_array_reset(tmp_to); if (arraysize > 1) { /* die kodierenden Bereiche werden nacheinander abgearbeitet */ for (array_idx = 0; array_idx < arraysize - 1;) { /* ist gt_array_size des tmp-Arrays > 0 wurden bereits Aenderungen vorgenommen und die neuen Bereichsgrenzen-Werte muessen verwendet werden */ if (gt_array_size(tmp_from) > 0) { from_tmp = *(unsigned long *) gt_array_get_last(tmp_from); to_tmp = *(unsigned long *) gt_array_get_last(tmp_to); } /* ansonsten auslesen der Bereichsgrenzen aus dem "original" */ else { from_tmp = *(unsigned long *) gt_array_get(regionmatrix[row_index][0].from, array_idx); to_tmp = *(unsigned long *) gt_array_get(regionmatrix[row_index][0].to, array_idx); } ++array_idx; function_stop = 0; do { /* auslesen der Grenzen des nachfolgenden kodierenden Bereiches */ from_tmp_next = *(unsigned long *) gt_array_get(regionmatrix[row_index][0].from, array_idx); to_tmp_real = *(unsigned long *) gt_array_get(regionmatrix[row_index][0].to, array_idx); /* zusammenlegen kodierender Bereiche nur, wenn diese innerhalb der per GtOption angegebenen Spanbreite liegen */ if (to_tmp + ARGUMENTSSTRUCT(prediction_span) > from_tmp_next) { /* es wurden noch keine Eintragungen vorgenommen - der erste kodierende Abschnitt wird in das tmp-Array eingetragen */ if (gt_array_size(tmp_from) == 0) { gt_array_add(tmp_from, from_tmp); gt_array_add(tmp_to, to_tmp); } /* Ueberpruefen, ob zwischen den kodierenden Abschnitten Stop-Codons liegen */ check_bp = check_coding(parsestruct_ptr, to_tmp, from_tmp_next, row_index, err); /* kein Stop-Codon gefunden */ if (!check_bp) { /* befindet sich schon ein Eintrag im temp-Array, muss der letzte Eintrag wieder entfernt werden */ if (gt_array_size(tmp_from) > 0) { (void) gt_array_pop(tmp_from); (void) gt_array_pop(tmp_to); } /* Speichern der neuen Bereichsgrenzen */ gt_array_add(tmp_from, from_tmp); gt_array_add(tmp_to, to_tmp_real); ++array_idx; } /* Stop-Codon gefunden - der next-Abschnitt wird ebenfalls in das tmp-Array eingetragen; die Bearbeitung kann hier abgebrochen werden, da das Stop-Codon auch im Vergleich zu den anderen Abschnitten eine Vereinigung verhindert */ else { gt_array_add(tmp_from, from_tmp_next); gt_array_add(tmp_to, to_tmp_real); function_stop = 1; } } /* Abstand der kodierenden Bereiche > als angegebene Spannbreite, auch hier kann die Bearbeitung beendet werden */ else { gt_array_add(tmp_from, from_tmp_next); gt_array_add(tmp_to, to_tmp_real); function_stop = 1; } /* Bearbeitung solange, bis keine weiteren Abschnitte vorliegen oder das Stop-Flag gesetzt ist */ } while (array_idx < arraysize && !function_stop); } /* aktualisieren der Bereichsgrenzen */ gt_array_delete(regionmatrix[row_index][0].from); gt_array_delete(regionmatrix[row_index][0].to); regionmatrix[row_index][0].from = gt_array_clone(tmp_from); regionmatrix[row_index][0].to = gt_array_clone(tmp_to); } } gt_array_delete(tmp_from); gt_array_delete(tmp_to); } static int check_coding(ParseStruct *parsestruct_ptr, unsigned long from, unsigned long to, short current_row, GtError * err) { int had_err = 0; unsigned long startpoint = 0, endpoint = 0, contig_len = 0; long diff; short current_frame = 0, found = 0; GtStr *query_seq; char *contig_seq_ptr = NULL, contig_seq_tri[4] = { '\0', '\0', '\0', '\0' }; gt_error_check(err); /* Start- und Endsequenzpositionen der in AS umzuwandelnden Sequenz */ startpoint = from; endpoint = to; contig_len = gt_str_length(MATRIXSTRUCT(query_dna)); query_seq = gt_str_new_cstr(gt_str_get(MATRIXSTRUCT(query_dna))); contig_seq_ptr = gt_str_get(query_seq); /* Bestimmung des aktuellen Frames aus der Zeilennummer */ current_frame = get_current_frame(current_row); /* Bestimmen der Laenge der umzuwandelnden Sequenz */ diff = startpoint - endpoint; if (diff < 0) diff = (-1) * diff; /* nur bei 3 oder mehr DNA-Basen ist eine Umwandlung in eine AS-Sequenz sinnvoll bzw. machbar */ if (!(diff < 3)) { /* if: aktueller Leserahmen ist -1, -2 oder -3 */ if (current_frame < 0) { /* fuer die weiteren Berechnungen erfolgt eine Multiplikation mit -1 */ current_frame *= -1; /* das reverse Komplement der Sequenz wird gebildet - erweiterte reverse_complement-Funktion beruecksichtigt das erweiterte DNA-Alphabet */ had_err = mg_reverse_complement(contig_seq_ptr, contig_len, err); /* Der Startpunkt muss im Fall negativer Leserahmen neu berechnet werden */ startpoint = contig_len - 1 - to; endpoint = contig_len - from; } if (!had_err) { /* ist der Startpunkt < 3 ist die Startposition 0, 1 oder 2 */ if (startpoint < 3) { startpoint = current_frame - 1; } /* sonst: Berechnung der Startposition anhand der gegebenen Formel */ else { startpoint -= (((startpoint) - current_frame) % 3); startpoint -= 1; } /* abschreiten der Sequenz */ while ((startpoint <= endpoint - 2) && !found) { /* DNA-Basen-Triplet einlesen */ contig_seq_tri[0] = tolower(contig_seq_ptr[startpoint]); contig_seq_tri[1] = tolower(contig_seq_ptr[startpoint + 1]); contig_seq_tri[2] = tolower(contig_seq_ptr[startpoint + 2]); found = gt_check_stopcodon(contig_seq_tri); /* Startwert um 3 Basen weitersetzen */ startpoint += 3; } } else { found = -1; } } gt_str_delete(query_seq); return found; } static void merge_array(RegionStruct **regionmatrix, GtArray * real_from_ar, GtArray * real_to_ar, GtArray * real_fromtmp, GtArray * real_totmp, unsigned long real_index, unsigned long tmp_index, short real_frame, unsigned short row_index) { unsigned long real_from, real_to, tmp_from, tmp_to; /* Fall 1: Eintraege im GtArray des realen Frames sind abgearbeitet, Eintraege im tmp-Array noch nicht */ if (!(real_index < gt_array_size(regionmatrix[real_frame][0].from)) && tmp_index < gt_array_size(real_fromtmp)) { /* Bereichsgrenzen des Realtmp-Arrays - from/to-Werte */ real_from = *(unsigned long *) gt_array_get(real_fromtmp, tmp_index); real_to = *(unsigned long *) gt_array_get(real_totmp, tmp_index); /* solange sich noch Eintraege im realtmp-Array befinden */ while (tmp_index < gt_array_size(real_fromtmp)) { /* hinzufuegen der Bereichsgrenzen */ gt_array_add(real_from_ar, real_from); gt_array_add(real_to_ar, real_to); tmp_index++; /* nur wenn noch weitere Eintraege vorhanden sind, werden die naechsten Bereichsgrenzen ausgelesen */ if (tmp_index < gt_array_size(real_fromtmp)) { real_from = *(unsigned long *) gt_array_get(real_fromtmp, tmp_index); real_to = *(unsigned long *) gt_array_get(real_totmp, tmp_index); } } } /* Fall 2: Eintraege im GtArray des realen Frames sind noch nicht abgearbeitet, Eintraege im tmp-Array abgearbeitet */ else if (!(tmp_index < gt_array_size(real_fromtmp)) && real_index < gt_array_size(regionmatrix[real_frame][0].from)) { /* Bereichsgrenzen des Real-Arrays - from/to-Werte */ tmp_from = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0].from, real_index); tmp_to = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0].to, real_index); /* solange sich noch Eintraege im real-Array befinden */ while (real_index < gt_array_size(regionmatrix[real_frame][0].from)) { /* hinzufuegen der Bereichsgrenzen */ gt_array_add(real_from_ar, tmp_from); gt_array_add(real_to_ar, tmp_to); real_index++; /* nur wenn noch weitere Eintraege vorhanden sind, werden die naechsten Bereichsgrenzen ausgelesen */ if (real_index < gt_array_size(regionmatrix[real_frame][0].from)) { tmp_from = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0].from, real_index); tmp_to = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0].to, real_index); } } } /* Fall 3: Es sind noch Eintraege in beiden GtArrays vorhanden */ else if ((tmp_index < gt_array_size(real_fromtmp)) && real_index < gt_array_size(regionmatrix[real_frame][0].from)) { /* Bereichsgrenzen des Realtmp- und des real-Arrays - from/to-Werte */ tmp_from = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0].from, real_index); tmp_to = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0].to, real_index); real_from = *(unsigned long *) gt_array_get(real_fromtmp, tmp_index); real_to = *(unsigned long *) gt_array_get(real_totmp, tmp_index); /* Fall: realtmp-Abschnitt liegt vor dem real_frame Abschnitt */ if (real_from < tmp_from) { /* solange es noch Eintraege gibt, die vor dem real_frame-Abschnitt liegen... */ while (tmp_index < gt_array_size(real_fromtmp) && real_from < tmp_from) { /* ... werden die bereichsgrenzen Eingetragen... */ gt_array_add(real_from_ar, real_from); gt_array_add(real_to_ar, real_to); tmp_index++; /* und der naechste realtmp-Eintrag eingelesen */ if (tmp_index < gt_array_size(real_fromtmp)) { real_from = *(unsigned long *) gt_array_get(real_fromtmp, tmp_index); real_to = *(unsigned long *) gt_array_get(real_totmp, tmp_index); } } /* rekursiver Aufruf der Sortierfunktion unter Beruecksichtigung der neu Eingetragenen Abschnitte */ merge_array(regionmatrix, real_from_ar, real_to_ar, real_fromtmp, real_totmp, real_index, tmp_index, real_frame, row_index); } /* real_frame- vor dem realtmp-Abschnitt */ else if (tmp_from < real_from) { /* solange es noch Eintraege gibt, die vor dem realtmp-Abschnitt liegen... */ while (real_index < gt_array_size(regionmatrix[real_frame][0].from) && tmp_from < real_from) { /* ... werden die bereichsgrenzen Eingetragen... */ gt_array_add(real_from_ar, tmp_from); gt_array_add(real_to_ar, tmp_to); real_index++; /* und der naechste real_frame-Eintrag eingelesen */ if (real_index < gt_array_size(regionmatrix[real_frame][0].from)) { tmp_from = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0].from, real_index); tmp_to = *(unsigned long *) gt_array_get(regionmatrix[real_frame][0].to, real_index); } } /* rekursiver Aufruf der Sortierfunktion unter Beruecksichtigung der neu Eingetragenen Abschnitte */ merge_array(regionmatrix, real_from_ar, real_to_ar, real_fromtmp, real_totmp, real_index, tmp_index, real_frame, row_index); } } } static void sort_realtmp(GtArray * realfrom, GtArray * realto, GtArray * real_fromtmp, GtArray * real_totmp) { unsigned long index_outer, index_inner, max_value = 0, from, to, from_tmp = 0, to_tmp = 0; /* durchlaufen des GtArrays mit einer aeusseren und einer inneren Schleife */ for (index_outer = 0; index_outer < gt_array_size(real_fromtmp); index_outer++) { /* die innere Schleife bestimmt den naechsten maximalen Wert im GtArray */ for (index_inner = 0; index_inner < gt_array_size(real_fromtmp); index_inner++) { from = *(unsigned long *) gt_array_get(real_fromtmp, index_inner); to = *(unsigned long *) gt_array_get(real_totmp, index_inner); /* Fall: es gibt bereits Eintraege im tmp-Array */ if (gt_array_size(realfrom) > 0) { /* der aktuelle from-Wert ist groesser als der tmp-Wert und kleiner als der letzte max-Wert */ if ((from > from_tmp) && (from < max_value)) { from_tmp = from; to_tmp = to; } } /* Fall: keine Eintraege im tmp-Array */ else { /* bestimmen des max-Wertes */ if (from > from_tmp) { from_tmp = from; to_tmp = to; } } } /* Speichern des max-Wertes */ gt_array_add(realfrom, from_tmp); gt_array_add(realto, to_tmp); /* merken des letzten max-Wertes */ max_value = from_tmp; from_tmp = 0; to_tmp = 0; } } short gt_check_stopcodon(char *contig_seq_ptrfct) { unsigned short codon_status = 0; /* jeder if-Zweig ueberprueft entsprechend des Metagenomethreader-Arguments zur Verwendung alternativer Start-Codons auf Start-Codons */ if (!strcmp(contig_seq_ptrfct, "tga") || !strcmp(contig_seq_ptrfct, "taa") || !strcmp(contig_seq_ptrfct, "tag") || !strcmp(contig_seq_ptrfct, "tar") || !strcmp(contig_seq_ptrfct, "uga") || !strcmp(contig_seq_ptrfct, "uaa") || !strcmp(contig_seq_ptrfct, "uag") || !strcmp(contig_seq_ptrfct, "uar")) { codon_status = 1; } return codon_status; } genometools-1.5.1/src/mgth/mg_compute_gene_prediction.h000066400000000000000000000030251211610345200233200ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MG_COMPUTE_GENE_PREDICTION_H #define MG_COMPUTE_GENE_PREDICTION_H #include #include #include "metagenomethreader.h" #define GENEPREDSTRUCT(PATH) parsestruct_ptr->geneprediction_static.PATH /* Funktion zur Berechnung der Genkodierenden-Sequenzbereiche Parameter: CombinedScore-Matrix, Opt-Path-Matrix, column bzw. Laenge der Query-Sequenz, Hit-Informationen, ParseStruct-Zeiger Returnwert: void */ int mg_compute_gene_prediction(CombinedScoreMatrixEntry **, PathMatrixEntry **, unsigned long, HitInformation *, ParseStruct *, GtError *); #endif genometools-1.5.1/src/mgth/mg_computepath.c000066400000000000000000000157311211610345200207610ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "mg_computepath.h" #include "core/mathsupport.h" /* Funktion zur Berechnung der erlaubten Vorgaenger-Leserahmen Parameter: aktueller Leserahmen, Position in der Query-Sequence, (Zeiger auf) GtArray der moeglichen Vorgaenger Returnwert: void */ static void compute_precursors(short, unsigned long, short *); enum { NUM_PRECURSORS = 3, }; int mg_computepath(CombinedScoreMatrixEntry **combinedscore_matrix, HitInformation *hit_information, unsigned long rows, unsigned long contig_len, ParseStruct *parsestruct_ptr, GtError * err) { int had_err = 0; /* Initialisieren der Matrix fuer die Pfadberechnung */ PathMatrixEntry **path_matrix; /* i: Zaehlvariable fuer die Matrix-Zeilen; k: Zaehlvariable Precursors (von 0 bis max 2) maxpath_frame: Speichern des vorherigen Frames von dem der max-Wert berechnet wird */ unsigned short row_index = 0, precursor_index = 0, precursors_row = 0, maxpath_frame = 0; /* Position in der Query-DNA */ unsigned long column_index = 0; /* Variablen fuer den aktuellen Frame, den vorherigen Frame(speichert einen Wert aus precursors[], die Zeile des vorherigen Frames, GtArray mit den Precursors-Frames */ short current_frame = 0, precursors_frame = 0, precursors[NUM_PRECURSORS]; /* q ist der Wert, der bei Aus- oder Eintreten in ein Gen auf dem Forward- bzw. Reverse-Strang berechnet wird */ double q = ARGUMENTSSTRUCT(leavegene_value), max_new = 1, max_old = 1; /* Speicherreservierung fuer die Path-Matrix - Groesse entsprechend der CombinedScore-Matrix */ gt_array2dim_calloc(path_matrix, 7, contig_len); gt_error_check(err); /* fuer die erste Spalte der Path-Matrix wird die erste Spalte der CombinedScore-Matrix uebernommen */ for (row_index = 0; row_index < rows; row_index++) { path_matrix[row_index][0].score = combinedscore_matrix[row_index][0].matrix_score; path_matrix[row_index][0].path_frame = row_index; } /* Spaltenweise Berechnung des opt. Pfades */ for (column_index = 1; column_index < contig_len; column_index++) { for (row_index = 0; row_index < rows; row_index++) { /* Zaehlvariable fuer die Zeile wird umgerechnet in den entsprechenden Leserahmen */ current_frame = get_current_frame(row_index); /* Aufruf der Methode zum Berechnen der moeglichen Leserahmen anhand von aktuellem Leserahmen und der Query-DNA-Sequenz */ compute_precursors(current_frame, column_index, precursors); /* der max-Wert der moeglichen Vorgaenger wird berechnet */ for (precursor_index = 0; precursor_index < NUM_PRECURSORS && (precursors[precursor_index] != UNDEFINED); ++precursor_index) { /* aktueller Vorgaengerleserahmen - es gibt max. 3 moegliche Vorgaenger */ precursors_frame = precursors[precursor_index]; /* Vorgaengerleserahmen wird umgerechnet in die entsprechende Matrix-Zeile */ precursors_row = get_matrix_row(precursors_frame); /* der DP-Algo umfasst 3 moegliche Faelle 1. Fall: Wechsel vom Reversen- auf den Forward-Strang bzw. umgekehrt */ if ((current_frame < 0 && precursors_frame > 0) || (current_frame > 0 && precursors_frame < 0)) { max_new = path_matrix[precursors_row][column_index-1].score + combinedscore_matrix[row_index][column_index].matrix_score + 2*q; } /* 2. Fall: Einfacher Wechsel des Leserahmens, also von + zu + bzw.- zu - */ else if (current_frame != 0 && precursors_frame != current_frame) { max_new = path_matrix[precursors_row][column_index-1].score + combinedscore_matrix[row_index][column_index].matrix_score + q; } /* 3. Fall: Leserahmen wird beibehalten bzw. Wechsel von kodierend zu nicht-kodierend oder umgekehrt */ else { max_new = path_matrix[precursors_row][column_index-1].score + combinedscore_matrix[row_index][column_index] .matrix_score; } /* Bestimmen des Max-Wertes der max. 3 Moeglichkeiten und Speichern der Zeile, von der der Max-Wert stammt */ if (gt_double_compare(max_new, max_old) > 0) { max_old = max_new; maxpath_frame = precursors_row; } } /* Speichern des Max-Wertes und der "Vorgaenger"-Zeile; zuruecksetzen der Variablen */ path_matrix[row_index][column_index].score = max_old; path_matrix[row_index][column_index].path_frame = maxpath_frame; max_new = DBL_MIN; max_old = DBL_MIN; maxpath_frame = 0; } } /* Aufruf der Methode zur Genvorhersage */ had_err = mg_compute_gene_prediction(combinedscore_matrix, path_matrix, contig_len, hit_information, parsestruct_ptr, err); gt_array2dim_delete(path_matrix); return had_err; } /* Methode zur Berechnung der moeglichen Vorgaengerleserahmen */ static void compute_precursors(short current_frame, unsigned long position, short *precursors_fct) { short j = 0; /* Formel zur Bestimmung moeglicher Vorgaengerleserahmen anhand der aktuellen Position in der Query-DNA */ j = (position)%NUM_PRECURSORS + 1; /* 3 Faelle zur Bestimmung der Vorgaengermenge */ if (current_frame == 0) { precursors_fct[0] = j; precursors_fct[1] = 0; precursors_fct[2] = (-1)*j; } else if ((current_frame > 0 ? current_frame : (-1) * current_frame) == j) { precursors_fct[0] = current_frame; precursors_fct[1] = 0; precursors_fct[2] = (-1)*current_frame; } else { precursors_fct[0] = current_frame; precursors_fct[1] = UNDEFINED; precursors_fct[2] = UNDEFINED; } } genometools-1.5.1/src/mgth/mg_computepath.h000066400000000000000000000025401211610345200207600ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MG_COMPUTEPATH_H #define MG_COMPUTEPATH_H #include #include "metagenomethreader.h" #include "mg_compute_gene_prediction.h" #define UNDEFINED 9 /* Funktion zur DP-Berechnung der Pfade durch die Combined-Score-Matrix Parameter: Combined-Score Matrix, Anzahl Zeilen, Anzahl Spalten Returnwert: void */ int mg_computepath(CombinedScoreMatrixEntry **, HitInformation *hit_information, unsigned long, unsigned long, ParseStruct *, GtError *); #endif genometools-1.5.1/src/mgth/mg_outputwriter.c000066400000000000000000001620541211610345200212260ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "mg_outputwriter.h" #include "core/hashmap.h" #include "core/unused_api.h" /* Funktion, die nacheinander die erforderlichen Funktionen zur Erstellung des txt-Dokuments aufruft Parameter: Zeiger auf ParseStruct-Struktur, CombinedScore-Matrix, die HitInformation-Struktur, die RegionStruct-Struktur, das Char-Zeichen, um welchen Bereich es sich handelt Returnwert: void */ static void outputwriter_txt(ParseStruct *, CombinedScoreMatrixEntry **, HitInformation *, RegionStruct **, char, GtError *); /* Funktion, die nacheinander die erforderlichen Funktionen zur Erstellung des html-Dokuments aufruft Parameter: Zeiger auf ParseStruct-Struktur, CombinedScore-Matrix, die HitInformation-Struktur, die RegionStruct-Struktur, das Char-Zeichen, um welchen Bereich es sich handelt Returnwert: void */ static void outputwriter_html(ParseStruct *, CombinedScoreMatrixEntry **, HitInformation *, RegionStruct **, char, GtError *); /* Funktion, die nacheinander die erforderlichen Funktionen zur Erstellung des xml-Dokuments aufruft Parameter: Zeiger auf ParseStruct-Struktur, CombinedScore-Matrix, die HitInformation-Struktur, die RegionStruct-Struktur, das Char-Zeichen, um welchen Bereich es sich handelt Returnwert: void */ static void outputwriter_xml(ParseStruct *, CombinedScoreMatrixEntry **, HitInformation *, RegionStruct **, char, GtError *); /* Funktion zum Schreiben des Output-Header der txt-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_header_txt(const ParseStruct *); /* Funktion zum Schreiben des Output-Header der html-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_header_html(const ParseStruct *); /* Funktion zum Schreiben des Output-Header der xml-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_header_xml(const ParseStruct *); /* Funktion zum Schreiben des Query-DNA Abschnittes der txt-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_querydna_txt(const ParseStruct *); /* Funktion zum Schreiben des Query-DNA Abschnittes der html-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_querydna_html(const ParseStruct *); /* Funktion zum Schreiben des Query-DNA Abschnittes der xml-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_querydna_xml(const ParseStruct *); /* Funktion zur Berechnung der Ausgabemenge fuer den Hit-Information Abschnittes; Parameter: Zeiger auf ParseStruct-Struktur, CombinedScore-Matrix, die HitInformation-Struktur, die RegionStruct-Struktur, das Char-Zeichen, um welchen Bereich es sich handelt Returnwert: void */ static void output_hitdna(ParseStruct *, CombinedScoreMatrixEntry **, HitInformation *, RegionStruct **, GtError *); /* Funktion zum Schreiben des Coding-DNA-Abschnittes Parameter: Zeiger auf ParseStruct, Zeiger auf die DNA-Seq, Str der Protein-Seq, Ausgabe-Format Returnwert: void */ static void print_codingheader(const ParseStruct *, const char *, GtStr *); /* Funktion zum Schreiben des Hit-Information-Abschnittes Parameter: Zeiger auf die ParseStruct, Zeiger auf die HitInformation-Struktur, Zeiger auf die kodierende-Seq, Ausgabeformat, Sequenzposition Returnwert: void */ static void print_hitinformation(const ParseStruct *, const HitInformation *, unsigned long); /* Funktion zum Schreiben der Metagenomethreader-Statistik der Text-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_statistics_txt(const ParseStruct *); /* Funktion zum Schreiben der Metagenomethreader-Statistik der HTML-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_statistics_html(const ParseStruct *); /* Funktion zum Schreiben der Metagenomethreader-Statistik der XML-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_statistics_xml(const ParseStruct *); /* Funktion zum Schreiben des Output-Footer der HTML-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_footer_html(const ParseStruct *); /* Funktion zum Schreiben des Output-Footer der XML-Datei Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_footer_xml(const ParseStruct *); /* Funktion zur Berechnung der AS-Sequenz Parameter: Zeiger auf die DNA-Sequnez, Str fuer die Proteinsequenz, from-Wert, to-Wert, aktueller Frame Returnwert: void */ static int as_coding(const ParseStruct *, char *, GtStr *, unsigned long, unsigned long, unsigned short, GtError *); static enum iterator_op newmemory_hash(char *key, unsigned long *value, void *data, GtError * err); /* Funktion zum Schreiben des Statistic-Headers Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_statistics_header(const ParseStruct *); static short check_startcodon(const ParseStruct *, const char *); /* Funktion zum Abschluss eines Iterations-Bereich im XML-File Parameter: Zeiger auf die ParseStruct-Struktur Returnwert: void */ static void output_close_iteration_xml(const ParseStruct *); /* Zeitstruktur liefert die Struktur fuer das aktuelle Datum in der Form dd.mm.yyyy */ struct tm *gt_today(void) { static struct tm *tmnow; time_t tnow; (void) time(&tnow); tmnow = localtime(&tnow); return tmnow; } void mg_outputwriter(ParseStruct *parsestruct_ptr, CombinedScoreMatrixEntry **combinedscore_matrix, HitInformation *hit_information, RegionStruct **regionmatrix, char type, GtError * err) { gt_error_check(err); /* je nach dem per GtOption angegebenen Output-Fileformat wird die entsprechende Ausgabefunktion aufgerufen */ switch (ARGUMENTSSTRUCT(outputfile_format)) { /* txt */ case 1: outputwriter_txt(parsestruct_ptr, combinedscore_matrix, hit_information, regionmatrix, type, err); break; /* html */ case 2: outputwriter_html(parsestruct_ptr, combinedscore_matrix, hit_information, regionmatrix, type, err); break; /* xml */ case 3: outputwriter_xml(parsestruct_ptr, combinedscore_matrix, hit_information, regionmatrix, type, err); break; } } static void outputwriter_txt(ParseStruct *parsestruct_ptr, CombinedScoreMatrixEntry **combinedscore_matrix, HitInformation *hit_information, RegionStruct **regionmatrix, char type, GtError * err) { gt_error_check(err); /* Aufruf der jeweiligen Funtion zum erstellen der Bereiche Header(t), Query-DNA(q) und Coding-DNA(h) */ if (type == 't') output_header_txt(parsestruct_ptr); else if (type == 'q') output_querydna_txt(parsestruct_ptr); else if (type == 'h') output_hitdna(parsestruct_ptr, combinedscore_matrix, hit_information, regionmatrix, err); else if (type == 'v') output_statistics_header(parsestruct_ptr); else if (type == 's') output_statistics_txt(parsestruct_ptr); } static void outputwriter_html(ParseStruct *parsestruct_ptr, CombinedScoreMatrixEntry **combinedscore_matrix, HitInformation *hit_information, RegionStruct **regionmatrix, char type, GtError * err) { gt_error_check(err); /* Aufruf der jeweiligen Funtion zum erstellen der Bereiche Header(t), Query-DNA(q) und Coding-DNA(h) und des Footer(f) */ if (type == 't') output_header_html(parsestruct_ptr); else if (type == 'q') output_querydna_html(parsestruct_ptr); else if (type == 'h') output_hitdna(parsestruct_ptr, combinedscore_matrix, hit_information, regionmatrix, err); else if (type == 's') output_statistics_html(parsestruct_ptr); else if (type == 'v') output_statistics_header(parsestruct_ptr); else if (type == 'f') output_footer_html(parsestruct_ptr); } static void outputwriter_xml(ParseStruct *parsestruct_ptr, CombinedScoreMatrixEntry **combinedscore_matrix, HitInformation *hit_information, RegionStruct **regionmatrix, char type, GtError * err) { gt_error_check(err); /* Aufruf der jeweiligen Funtion zum erstellen der Bereiche Header(t), Query-DNA(q) und Coding-DNA(h) und des Footer(f) */ if (type == 't') output_header_xml(parsestruct_ptr); else if (type == 'q') output_querydna_xml(parsestruct_ptr); else if (type == 'h') output_hitdna(parsestruct_ptr, combinedscore_matrix, hit_information, regionmatrix, err); else if (type == 's') output_statistics_xml(parsestruct_ptr); else if (type == 'v') output_statistics_header(parsestruct_ptr); else if (type == 'f') output_footer_xml(parsestruct_ptr); else if (type == 'x') output_close_iteration_xml(parsestruct_ptr); } static void output_header_txt(const ParseStruct *parsestruct_ptr) { /* Aktuelle Datum in Variable speichern */ struct tm *tmstamp; tmstamp = gt_today(); if (!ARGUMENTSSTRUCT(testmodus_mode)) { /* Headerbereich schreiben inkl. Auflistung der Parametereinstellugen */ gt_file_xprintf(FILEPOINTEROUT, "\nMetagenomethreader Result %d.%d.%d\n\n", tmstamp->tm_mday, tmstamp->tm_mon + 1, tmstamp->tm_year + 1900); } gt_file_xprintf(FILEPOINTEROUT, "\nParametereinstellungen\n Synonymic Value: %.4f\n ", ARGUMENTSSTRUCT(synonomic_value)); gt_file_xprintf(FILEPOINTEROUT, "Nonsynonymic Value: %.4f\n ", ARGUMENTSSTRUCT(nonsynonomic_value)); gt_file_xprintf(FILEPOINTEROUT, "Blasthit-End Value: %.4f\n ", ARGUMENTSSTRUCT(blasthit_end_value)); gt_file_xprintf(FILEPOINTEROUT, "Query-Stopcodon-Value: %.4f\n ", ARGUMENTSSTRUCT(stopcodon_queryseq)); gt_file_xprintf(FILEPOINTEROUT, "Hit-Stopcodon-Value: %.4f\n ", ARGUMENTSSTRUCT(stopcodon_hitseq)); gt_file_xprintf(FILEPOINTEROUT, "Frameshift-Span: %.4f\n ", ARGUMENTSSTRUCT(frameshift_span)); gt_file_xprintf(FILEPOINTEROUT, "Prediction-Span: %.4f\n ", ARGUMENTSSTRUCT(prediction_span)); gt_file_xprintf(FILEPOINTEROUT, "Leavegene-Value: %.4f\n ", ARGUMENTSSTRUCT(leavegene_value)); gt_file_xprintf(FILEPOINTEROUT, "Curl-DB: %s\n ", gt_str_get(ARGUMENTSSTRUCT(curl_fcgi_db))); gt_file_xprintf(FILEPOINTEROUT, "Output-Filename: %s\n ", gt_str_get(ARGUMENTSSTRUCT(outputtextfile_name))); gt_file_xprintf(FILEPOINTEROUT, "Output-Fileformat: %d\n ", ARGUMENTSSTRUCT(outputfile_format)); gt_file_xprintf(FILEPOINTEROUT, "Hitfile (yes=1/no=0): %d\n ", ARGUMENTSSTRUCT(hitfile_bool)); gt_file_xprintf(FILEPOINTEROUT, "Min Protein-Length (>=15): %lu\n ", ARGUMENTSSTRUCT(min_as)); gt_file_xprintf(FILEPOINTEROUT, "Min Result-Percentage: %.4f\n ", ARGUMENTSSTRUCT(percent_value)); gt_file_xprintf(FILEPOINTEROUT, "Extended-Modus (yes=1/no=0): %d\n ", ARGUMENTSSTRUCT(extended_mode)); gt_file_xprintf(FILEPOINTEROUT, "Homology-Modus (yes=1/no=0): %d\n ", ARGUMENTSSTRUCT(homology_mode)); gt_file_xprintf(FILEPOINTEROUT, "Codon-Modus (yes=1/no=0): %d\n\n", ARGUMENTSSTRUCT(codon_mode)); } static void output_header_html(const ParseStruct *parsestruct_ptr) { /* Aktuelle Datum in Variable speichern */ struct tm *tmstamp; tmstamp = gt_today(); /* Headerbereich schreiben inkl. Auflistung der Parametereinstellugen */ gt_file_xprintf(FILEPOINTEROUT, "\n"); gt_file_xprintf(FILEPOINTEROUT, "\n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); if (!ARGUMENTSSTRUCT(testmodus_mode)) { gt_file_xprintf(FILEPOINTEROUT, " Metagenomethreader Result %d.%d.%d\n", tmstamp->tm_mday, tmstamp->tm_mon + 1, tmstamp->tm_year + 1900); } gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); if (!ARGUMENTSSTRUCT(testmodus_mode)) { gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n" " \n", tmstamp->tm_mday, tmstamp->tm_mon + 1, tmstamp->tm_year + 1900); gt_file_xprintf(FILEPOINTEROUT," \n"); } gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(synonomic_value)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(nonsynonomic_value)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(blasthit_end_value)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(stopcodon_queryseq)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(stopcodon_hitseq)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(frameshift_span)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(prediction_span)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(leavegene_value)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", gt_str_get(ARGUMENTSSTRUCT(curl_fcgi_db))); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", gt_str_get(ARGUMENTSSTRUCT(outputtextfile_name))); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(outputfile_format)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(hitfile_bool)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(min_as)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(percent_value)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(extended_mode)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(homology_mode)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ARGUMENTSSTRUCT(codon_mode)); gt_file_xprintf(FILEPOINTEROUT," \n"); } static void output_header_xml(const ParseStruct *parsestruct_ptr) { /* Aktuelle Datum in Variable speichern */ struct tm *tmstamp; tmstamp = gt_today(); /* Headerbereich schreiben inkl. Auflistung der Parametereinstellugen */ gt_file_xprintf(FILEPOINTEROUT, "\n"); gt_file_xprintf(FILEPOINTEROUT, "\n"); gt_file_xprintf(FILEPOINTEROUT, "\n"); gt_file_xprintf(FILEPOINTEROUT, " Metagenomethreader" "\n"); if (!ARGUMENTSSTRUCT(testmodus_mode)) { gt_file_xprintf(FILEPOINTEROUT, " Result %d.%d.%d" "\n", tmstamp->tm_mday, tmstamp->tm_mon + 1, tmstamp->tm_year + 1900); } gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " %.4f\n", ARGUMENTSSTRUCT(synonomic_value)); gt_file_xprintf(FILEPOINTEROUT, " %.4f\n", ARGUMENTSSTRUCT(nonsynonomic_value)); gt_file_xprintf(FILEPOINTEROUT, " %.4f" "\n", ARGUMENTSSTRUCT(blasthit_end_value)); gt_file_xprintf(FILEPOINTEROUT, " %.4f" "\n", ARGUMENTSSTRUCT(stopcodon_queryseq)); gt_file_xprintf(FILEPOINTEROUT, " %.4f" "\n", ARGUMENTSSTRUCT(stopcodon_hitseq)); gt_file_xprintf(FILEPOINTEROUT, " %.4f" "\n", ARGUMENTSSTRUCT(frameshift_span)); gt_file_xprintf(FILEPOINTEROUT, " %.4f" "\n", ARGUMENTSSTRUCT(prediction_span)); gt_file_xprintf(FILEPOINTEROUT, " %.4f" "\n", ARGUMENTSSTRUCT(leavegene_value)); gt_file_xprintf(FILEPOINTEROUT, " %s" "\n", gt_str_get(ARGUMENTSSTRUCT(curl_fcgi_db))); gt_file_xprintf(FILEPOINTEROUT, " %s" "\n", gt_str_get(ARGUMENTSSTRUCT(outputtextfile_name))); gt_file_xprintf(FILEPOINTEROUT, " %d" "\n", ARGUMENTSSTRUCT(outputfile_format)); gt_file_xprintf(FILEPOINTEROUT, " %d\n", ARGUMENTSSTRUCT(hitfile_bool)); gt_file_xprintf(FILEPOINTEROUT, " %lu\n", ARGUMENTSSTRUCT(min_as)); gt_file_xprintf(FILEPOINTEROUT, " %.4f" "\n", ARGUMENTSSTRUCT(percent_value)); gt_file_xprintf(FILEPOINTEROUT, " %d" "\n", ARGUMENTSSTRUCT(extended_mode)); gt_file_xprintf(FILEPOINTEROUT, " %d" "\n", ARGUMENTSSTRUCT(homology_mode)); gt_file_xprintf(FILEPOINTEROUT, " %d" "\n", ARGUMENTSSTRUCT(codon_mode)); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); } static void output_querydna_txt(const ParseStruct *parsestruct_ptr) { /* schreiben des Query-DNA Headers inkl. Query-Def. und Query-Sequenz */ gt_file_xprintf(FILEPOINTEROUT, "Query-DNA-Entry-Section\n\n"); gt_file_xprintf(FILEPOINTEROUT, "Query-DNA-Def: %s\n", gt_str_get(MATRIXSTRUCT(query_def))); gt_file_xprintf(FILEPOINTEROUT, "Query_DNA-Sequence:\n%s\n", gt_str_get(MATRIXSTRUCT(query_dna))); gt_file_xprintf(FILEPOINTEROUT, "\nCoding-DNA-Entry-Section\n\n"); } static void output_querydna_html(const ParseStruct *parsestruct_ptr) { /* schreiben des Query-DNA Headers inkl. Query-Def. und Query-Sequenz */ gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n" " \n", gt_str_get(MATRIXSTRUCT(query_def))); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", gt_str_get(MATRIXSTRUCT(query_dna))); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); } static void output_querydna_xml(const ParseStruct *parsestruct_ptr) { /* schreiben des Query-DNA Headers inkl. Query-Def. und Query-Sequenz */ gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " %s\n", gt_str_get(MATRIXSTRUCT(query_def))); gt_file_xprintf(FILEPOINTEROUT, " %s\n", gt_str_get(MATRIXSTRUCT(query_dna))); gt_file_xprintf(FILEPOINTEROUT, " \n"); } static void output_hitdna(ParseStruct *parsestruct_ptr, CombinedScoreMatrixEntry **combinedscore_matrix, HitInformation *hit_information, RegionStruct **regionmatrix, GtError * err) { GT_UNUSED int had_err = 0; unsigned long arraysize, from = 0, to = 0, contig_seq_diff, hit_numbers = 0, current, *hit_ptr, hitcounter = 0, gt_array_index, seq_index, hit_index, string_number, tmp_var, *hitsnum_tmp, hit_from, hit_to, hash_index = 0, *memory_tmp; unsigned short row_index; char *contig_seq, *contig_seq_ptr; GtStr *as_seq; gt_error_check(err); hit_ptr = NULL; as_seq = gt_str_new(); hitcounter = gt_str_array_size(hit_information->hit_gi); contig_seq_ptr = gt_str_get(MATRIXSTRUCT(query_dna)); /* in allen Leserahmen nach kodierenden Abschnitten suchen */ for (row_index = 0; row_index < 7; row_index++) { if (row_index != 3) { /* Anzahl kodierender Abschnitte im aktuellen Leserahmen */ arraysize = gt_array_size(regionmatrix[row_index][0].from); for (gt_array_index = 0; gt_array_index < arraysize; gt_array_index++) { /* Bereichsgrenzen des kodierenden Abschnittes - Werte bereits in 0- bis X-Kodierung */ from = *(unsigned long *) gt_array_get(regionmatrix[row_index][0].from, gt_array_index); to = *(unsigned long *) gt_array_get(regionmatrix[row_index][0].to, gt_array_index); /* nur wenn die Mindestlaenge in Anzahl AS erfuellt ist, erfolgt eine Ausgabe */ if ((to - from + 1) / 3 > ARGUMENTSSTRUCT(min_as)) { /* to-from+1+1 entspricht Anzahl der zu betrachtenden Basen + Stringende-Zeichen */ contig_seq_diff = to - from + 2; contig_seq = gt_malloc(contig_seq_diff*sizeof (char)); /* kopieren von contig_seq_diff-1 Zeichen */ (void) snprintf(contig_seq, contig_seq_diff, "%s", contig_seq_ptr + from); gt_assert(contig_seq); had_err = as_coding(parsestruct_ptr, contig_seq_ptr, as_seq, from, to, row_index, err); /* je nach Ausgabeformat die entsprechende Ausgabefunktion aufrufen */ switch (ARGUMENTSSTRUCT(outputfile_format)) { case 1: print_codingheader(parsestruct_ptr, contig_seq, as_seq); break; case 2: print_codingheader(parsestruct_ptr, contig_seq, as_seq); break; case 3: print_codingheader(parsestruct_ptr, contig_seq, as_seq); break; } /* Sequnezbereich wird genauer betrachtet */ for (seq_index = from; seq_index < to + 1; seq_index++) { /* hit_numbers ist die Anzahl der beteiligten Hits an Sequenzposition seq_index */ hit_numbers = gt_array_size(combinedscore_matrix[row_index][seq_index]. hit_number); if (hit_ptr == NULL) { hit_ptr = gt_calloc(hitcounter, sizeof (unsigned long)); } /* Abfragen aller Hit-Nummern fuer jede Position */ for (hit_index = 0; hit_index < hit_numbers; hit_index++) { /* current entspricht der Hit-Nummer */ current = *(unsigned long *) gt_array_get(combinedscore_matrix[row_index][seq_index]. hit_number, hit_index); /* hit_ptr wird an der Stelle current auf 1 gesetzt - so wird eine Mehrfachnennung vermieden */ hit_ptr[current] |= 1; } } /* hitcounter ist max. Anzahl der Hits */ for (seq_index = 0; seq_index < hitcounter; seq_index++) { gt_assert(hit_ptr != NULL); /* Wenn an der Position seq_index eine 1 steht, kommt der entsprechende Hit(-Eintrag) in der Ergebnismenge vor und muss ausgegeben werden */ if (hit_ptr[seq_index]) { /* Die aktuelle Hit-Definition wird eingelesen */ gt_str_set(parsestruct_ptr->result_hits, gt_str_array_get(hit_information->hit_def, seq_index)); hit_from = atoi(gt_str_array_get(hit_information->hit_from, seq_index)); hit_to = atoi(gt_str_array_get(hit_information->hit_to, seq_index)); /* ueberpruefen, ob der aktuelle Hit bereits erfasst wurde */ if (!gt_cstr_nofree_ulp_gt_hashmap_get (parsestruct_ptr->resulthits, gt_str_get(parsestruct_ptr->result_hits))) { /* Hit noch nicht erfasst, also in das Statistik-Array einfuegen */ gt_str_array_add_cstr(HITSTRUCT(hits_statistic), gt_str_get(parsestruct_ptr->result_hits)); /* Position der Hit-Def. im Statistik-Array */ string_number = gt_str_array_size(HITSTRUCT(hits_statistic)) - 1; /* Hitscounter: zaehlt , Hitsnumber: zaehlt das Auftreten der Hit-Def. in der Ergebnismenge */ HITSTRUCT(hitsnumber) = HITSTRUCT(hitsnumber) + hit_to - hit_from + 1; /* Bei Bedarf speicher reallokieren */ if (string_number + 1 > parsestruct_ptr->hits_memory - 20) { hitsnum_tmp = HITSTRUCT(hitsnum); memory_tmp = HITSTRUCT(memory); gt_array_reset(parsestruct_ptr->value_tmp); (void) gt_cstr_nofree_ulp_gt_hashmap_foreach( parsestruct_ptr->resulthits, newmemory_hash, parsestruct_ptr, err); /* Speichergroesse erhoehen */ parsestruct_ptr->hits_memory = MGTH_MEMORY_SIZE + parsestruct_ptr->hits_memory; HITSTRUCT(hitsnum) = gt_realloc(hitsnum_tmp, parsestruct_ptr->hits_memory * sizeof (unsigned long)); HITSTRUCT(memory) = gt_realloc(memory_tmp, parsestruct_ptr->hits_memory * sizeof (unsigned long)); gt_hashtable_reset(parsestruct_ptr->resulthits); for (hash_index = 0; hash_index < gt_array_size(parsestruct_ptr->value_tmp); hash_index++) { gt_cstr_nofree_ulp_gt_hashmap_add( parsestruct_ptr->resulthits, (char *) gt_str_array_get(HITSTRUCT(hits_statistic), *(unsigned long *) gt_array_get(parsestruct_ptr-> value_tmp, hash_index)), HITSTRUCT(memory + *(unsigned long *) gt_array_get(parsestruct_ptr-> value_tmp, hash_index))); } } tmp_var = string_number; *(HITSTRUCT(memory + tmp_var)) = tmp_var; *(HITSTRUCT(hitsnum + tmp_var)) = hit_to - hit_from + 1; gt_cstr_nofree_ulp_gt_hashmap_add(parsestruct_ptr->resulthits, (char *) gt_str_array_get(HITSTRUCT(hits_statistic), string_number), HITSTRUCT(memory + tmp_var)); } else { HITSTRUCT(hitsnumber) = HITSTRUCT(hitsnumber) + hit_to - hit_from + 1; tmp_var = **gt_cstr_nofree_ulp_gt_hashmap_get( parsestruct_ptr->resulthits, gt_str_get(parsestruct_ptr->result_hits)); *(HITSTRUCT(hitsnum) + tmp_var) = *(HITSTRUCT(hitsnum) + tmp_var) + hit_to - hit_from + 1;; } /* je nach Ausgabeformat die entsprechende Hit-Information-Ausgabefunktion aufrufen */ switch (ARGUMENTSSTRUCT(outputfile_format)) { case 1: print_hitinformation(parsestruct_ptr, hit_information, seq_index); break; case 2: print_hitinformation(parsestruct_ptr, hit_information, seq_index); break; case 3: print_hitinformation(parsestruct_ptr, hit_information, seq_index); break; } gt_str_reset(parsestruct_ptr->result_hits); } } switch (ARGUMENTSSTRUCT(outputfile_format)) { /* Ausgabe Coding-DNA-Header - txt */ case 1: gt_file_xprintf(FILEPOINTEROUT, "\n\n"); break; /* Ausgabe Coding-DNA-Header - html */ case 2: break; /* Ausgabe Coding-DNA-Header - xml */ case 3: gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); break; } gt_free(hit_ptr); gt_free(contig_seq); hit_ptr = NULL; gt_str_reset(as_seq); } } } } gt_str_delete(as_seq); } static void print_codingheader(const ParseStruct *parsestruct_ptr, const char *contig_seq, GtStr * as_seq) { gt_assert(contig_seq); switch (ARGUMENTSSTRUCT(outputfile_format)) { /* Ausgabe Coding-DNA-Header - txt */ case 1: gt_file_xprintf(FILEPOINTEROUT, "Coding-DNA: \n"); gt_file_xprintf(FILEPOINTEROUT, "%s\n", contig_seq); gt_file_xprintf(FILEPOINTEROUT, "Protein-Seq: "); gt_file_xprintf(FILEPOINTEROUT, "%s\n", gt_str_get(as_seq)); gt_file_xprintf(FILEPOINTEROUT, "Hit-Information Section\n"); break; /* Ausgabe Coding-DNA-Header - html */ case 2: gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", contig_seq); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", gt_str_get(as_seq)); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); break; /* Ausgabe Coding-DNA-Header - xml */ case 3: gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " %s\n", contig_seq); gt_file_xprintf(FILEPOINTEROUT, " %s\n", gt_str_get(as_seq)); gt_file_xprintf(FILEPOINTEROUT, " \n"); break; } } static void print_hitinformation(const ParseStruct *parsestruct_ptr, const HitInformation *hit_information, unsigned long seq_index) { /* je nach Ausgabeformat schreiben der Hit-Informationen */ switch (ARGUMENTSSTRUCT(outputfile_format)) { /* txt */ case 1: gt_file_xprintf(FILEPOINTEROUT, "gi-nr: gi|%s ", gt_str_array_get(hit_information->hit_gi, seq_index)); gt_file_xprintf(FILEPOINTEROUT, "gi_def: %s ", gt_str_array_get(hit_information->hit_def, seq_index)); gt_file_xprintf(FILEPOINTEROUT, "hsp_num: %s ", gt_str_array_get(hit_information->hit_hsp_nr, seq_index)); gt_file_xprintf(FILEPOINTEROUT, "from: %s ", gt_str_array_get(hit_information->hit_from, seq_index)); gt_file_xprintf(FILEPOINTEROUT, "to: %s\n", gt_str_array_get(hit_information->hit_to, seq_index)); break; /* html */ case 2: gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", gt_str_array_get(hit_information->hit_to, seq_index)); gt_file_xprintf(FILEPOINTEROUT," \n"); break; /* xml */ case 3: gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " gi|%s\n", gt_str_array_get(hit_information->hit_gi, seq_index)); gt_file_xprintf(FILEPOINTEROUT, " %s\n", gt_str_array_get(hit_information->hit_def, seq_index)); gt_file_xprintf(FILEPOINTEROUT, " %s\n", gt_str_array_get(hit_information->hit_hsp_nr, seq_index)); gt_file_xprintf(FILEPOINTEROUT, " %s\n", gt_str_array_get(hit_information->hit_from, seq_index)); gt_file_xprintf(FILEPOINTEROUT, " %s\n", gt_str_array_get(hit_information->hit_to, seq_index)); gt_file_xprintf(FILEPOINTEROUT, " \n"); break; } } static void output_statistics_txt(const ParseStruct *parsestruct_ptr) { /* schreiben des Query-DNA Headers inkl. Query-Def. und Query-Sequenz */ gt_file_xprintf(FILEPOINTEROUT, "%-8.4f ", ((double) *(HITSTRUCT(hitsnum) + HITSTRUCT(stat_pos)) / (double) HITSTRUCT(hitsnumber)) * 100); gt_file_xprintf(FILEPOINTEROUT, "%s\n", gt_str_array_get(HITSTRUCT(hits_statistic), *(HITSTRUCT(memory) + HITSTRUCT(stat_pos)))); } static void output_statistics_html(const ParseStruct *parsestruct_ptr) { gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT, " \n", ((float) *(HITSTRUCT(hitsnum) + HITSTRUCT(stat_pos)) / (float) HITSTRUCT(hitsnumber)) * 100); gt_file_xprintf(FILEPOINTEROUT, " \n", gt_str_array_get(HITSTRUCT(hits_statistic), *(HITSTRUCT(memory) + HITSTRUCT(stat_pos)))); gt_file_xprintf(FILEPOINTEROUT," \n"); } static void output_statistics_xml(const ParseStruct *parsestruct_ptr) { gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " %-8.4f\n", ((double) *(HITSTRUCT(hitsnum) + HITSTRUCT(stat_pos)) / (double) HITSTRUCT(hitsnumber)) * 100); gt_file_xprintf(FILEPOINTEROUT, " %s\n", gt_str_array_get(HITSTRUCT(hits_statistic), *(HITSTRUCT(memory) + HITSTRUCT(stat_pos)))); gt_file_xprintf(FILEPOINTEROUT, " \n"); } static void output_footer_html(const ParseStruct *parsestruct_ptr) { /* Schreiben des HTML-Footers */ gt_file_xprintf(FILEPOINTEROUT,"
    " "Metagenomethreader Result %d.%d.%d

    " "Parametereinstellungen
    " "Synonymic Value: %.4f
    " "Non-Synonymic Value: %.4f
    " "Blast-Hit-End Value: %.4f
    " "Query Stop-Codon Value: %.4f
    " "Hit Stop-Codon Value: %.4f
    " "Frameshift-Span: %.4f
    " "Prediction-Span: %.4f
    " "Leavegene-Value: %.4f
    cURL-DB: " "%s
    " "Output-Filename: %s
    " "Output-Fileformat
    (1/2/3):
    %d" "
    Hitfile
    " "(yes=1/no=0):
    %d" "
    " "Min-Protein-Length
    (>=15):
    %lu" "
    " "Min-Result-Percentage: %.4f
    " "Extended-Modus
    (yes=1/no=0):
    %d" "
    " "Homology-Modus
    (yes=1/no=0):
    %d" "
    " "Codon-Modus
    (1/2/3):
    %d" "

    " "
    Query-DNA-Entry-Section

    Query-DNA-Def%s
    " "Query_DNA-Sequence
    %s" "

    " "Coding-DNA-Entry-Section

    " "Coding-DNA
    %s" "
    " "Protein-Sequence
    %s" "
    " "Hit-Information Section
    gi-nr: "); gt_file_xprintf(FILEPOINTEROUT, "", gt_str_array_get(hit_information->hit_gi, seq_index)); gt_file_xprintf(FILEPOINTEROUT, "gi|%s ", gt_str_array_get(hit_information->hit_gi, seq_index)); gt_file_xprintf(FILEPOINTEROUT, "gi_def: %s ", gt_str_array_get(hit_information->hit_def, seq_index)); gt_file_xprintf(FILEPOINTEROUT, "hsp_num: %s ", gt_str_array_get(hit_information->hit_hsp_nr, seq_index)); gt_file_xprintf(FILEPOINTEROUT, "from: %s ", gt_str_array_get(hit_information->hit_from, seq_index)); gt_file_xprintf(FILEPOINTEROUT, "to: %s
    %-8.4f %s
    \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT," \n"); gt_file_xprintf(FILEPOINTEROUT,"\n"); } static void output_footer_xml(const ParseStruct *parsestruct_ptr) { /* Schreiben des HTML-Footers */ gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, "\n"); } static int as_coding(const ParseStruct *parsestruct_ptr, char *contig_seq, GtStr *as_seq, unsigned long from, unsigned long to, unsigned short current_row, GtError * err) { int had_err = 0; unsigned long startpoint = from, endpoint = to, startpoint_start, startpoint_atg, startpoint_safe, contig_len; char contig_triplet[3], *contig_seq_tri = NULL, contig_as; short current_frame, current_frame_tmp, found = 0, found_start = 0, found_end = 0, start_codon = 0; gt_error_check(err); gt_assert(contig_seq); contig_len = strlen(contig_seq); current_frame = get_current_frame(current_row); current_frame_tmp = current_frame; if (current_frame_tmp < 0) { current_frame_tmp *= -1; had_err = mg_reverse_complement(contig_seq, contig_len, err); startpoint = contig_len - 1 - to; endpoint = contig_len - from; } if (!had_err) { if (startpoint < 3) { startpoint = current_frame_tmp - 1; startpoint_start = startpoint; } else { startpoint -= (((startpoint) - current_frame_tmp) % 3); startpoint -= 1; startpoint_start = startpoint; } startpoint_safe = startpoint; while ((startpoint <= endpoint) && (startpoint <= contig_len - 3)) { /* Aktuelles Query-Triplet */ contig_triplet[0] = contig_seq[startpoint]; contig_triplet[1] = contig_seq[startpoint + 1]; contig_triplet[2] = contig_seq[startpoint + 2]; /* XXX gt_assert(contig_triplet); */ /* Bestimmen der AS der jeweiligen Triplets */ contig_as = mg_codon2amino(contig_triplet[0], contig_triplet[1], contig_triplet[2]); gt_assert(contig_as); gt_str_append_char(as_seq, contig_as); startpoint += 3; } if (ARGUMENTSSTRUCT(extended_mode)) { GtStr *as_seq_start; as_seq_start = gt_str_new(); contig_seq_tri = gt_malloc(4*sizeof (char)); /* DNA-Basen-Triplet einlesen */ contig_seq_tri[0] = tolower(contig_seq[startpoint - 3]); contig_seq_tri[1] = tolower(contig_seq[startpoint - 2]); contig_seq_tri[2] = tolower(contig_seq[startpoint - 1]); contig_seq_tri[3] = '\0'; gt_assert(contig_seq_tri); found = gt_check_stopcodon(contig_seq_tri); while (startpoint <= contig_len - 3 && !found_end && found) { /* DNA-Basen-Triplet einlesen */ contig_seq_tri[0] = tolower(contig_seq[startpoint - 3]); contig_seq_tri[1] = tolower(contig_seq[startpoint - 2]); contig_seq_tri[2] = tolower(contig_seq[startpoint - 1]); contig_seq_tri[3] = '\0'; gt_assert(contig_seq_tri); found_end = gt_check_stopcodon(contig_seq_tri); if (found_end) { /* Aktuelles Query-Triplet */ contig_triplet[0] = contig_seq[startpoint]; contig_triplet[1] = contig_seq[startpoint + 1]; contig_triplet[2] = contig_seq[startpoint + 2]; /* XXX gt_assert(contig_triplet); */ /* Bestimmen der AS der jeweiligen Triplets */ contig_as = mg_codon2amino(contig_triplet[0], contig_triplet[1], contig_triplet[2]); gt_assert(contig_as); gt_str_append_char(as_seq, contig_as); } /* Startwert um 3 Basen weitersetzen */ startpoint += 3; } /* DNA-Basen-Triplet einlesen */ contig_seq_tri[0] = tolower(contig_seq[startpoint_start]); contig_seq_tri[1] = tolower(contig_seq[startpoint_start + 1]); contig_seq_tri[2] = tolower(contig_seq[startpoint_start + 2]); contig_seq_tri[3] = '\0'; gt_assert(contig_seq_tri); start_codon = check_startcodon(parsestruct_ptr, contig_seq_tri); found = 0; if (!start_codon) { while (startpoint_start > 2 && !found) { /* DNA-Basen-Triplet einlesen */ contig_seq_tri[0] = tolower(contig_seq[startpoint_start - 3]); contig_seq_tri[1] = tolower(contig_seq[startpoint_start - 2]); contig_seq_tri[2] = tolower(contig_seq[startpoint_start - 1]); contig_seq_tri[3] = '\0'; gt_assert(contig_seq_tri); found = gt_check_stopcodon(contig_seq_tri); startpoint_atg = startpoint_start; if (found || startpoint_start < 3) { while (startpoint_atg <= startpoint_safe - 2) { if (!found_start) { /* DNA-Basen-Triplet einlesen */ contig_seq_tri[0] = tolower(contig_seq[startpoint_atg]); contig_seq_tri[1] = tolower(contig_seq[startpoint_atg + 1]); contig_seq_tri[2] = tolower(contig_seq[startpoint_atg + 2]); contig_seq_tri[3] = '\0'; gt_assert(contig_seq_tri); start_codon = check_startcodon(parsestruct_ptr, contig_seq_tri); /* ueberpruefen auf Start-Codon */ if (start_codon) { gt_str_append_char(as_seq_start, 'M'); found_start = 1; } } else { /* Aktuelles Query-Triplet */ contig_triplet[0] = contig_seq[startpoint_atg]; contig_triplet[1] = contig_seq[startpoint_atg + 1]; contig_triplet[2] = contig_seq[startpoint_atg + 2]; /* XXX gt_assert(contig_triplet); */ /* Bestimmen der AS der jeweiligen Triplets */ contig_as = mg_codon2amino(contig_triplet[0], contig_triplet[1], contig_triplet[2]); gt_assert(contig_as); gt_str_append_char(as_seq_start, contig_as); } /* Startwert um 3 Basen weitersetzen */ startpoint_atg += 3; } } startpoint_start -= 3; } gt_str_append_str(as_seq_start, as_seq); gt_str_reset(as_seq); gt_str_append_str(as_seq, as_seq_start); } gt_str_reset(as_seq_start); gt_str_delete(as_seq_start); gt_free(contig_seq_tri); } if (current_frame < 0) { had_err = mg_reverse_complement(contig_seq, contig_len, err); } } return had_err; } static enum iterator_op newmemory_hash(GT_UNUSED char *key, unsigned long *value, void *data, GT_UNUSED GtError * err) { /* Parsestruct-Struktur */ ParseStruct *parsestruct_ptr = (ParseStruct *) data; /* Position des aktuell betrachteten Schluessels */ HITSTRUCT(stat_pos) = *value; gt_error_check(err); gt_array_add(parsestruct_ptr->value_tmp, HITSTRUCT(stat_pos)); return 0; } static void output_statistics_header(const ParseStruct *parsestruct_ptr) { /* Statistik-Bereich-Header schreiben */ if (ARGUMENTSSTRUCT(outputfile_format) == 3) { gt_file_xprintf(FILEPOINTEROUT, " \n"); } else if (ARGUMENTSSTRUCT(outputfile_format) == 2) { gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); } else { gt_file_xprintf(FILEPOINTEROUT, "Statistic-Section\n\n"); } } static short check_startcodon(const ParseStruct *parsestruct_ptr, const char *contig_seq_ptrfct) { unsigned short codon_status = 0; /* jeder if-Zweig ueberprueft entsprechend des Metagenomethreader-Arguments zur Verwendung alternativer Start-Codons auf Start-Codons */ if (ARGUMENTSSTRUCT(codon_mode) == 2) { if (!strcmp(contig_seq_ptrfct, "atg") || !strcmp(contig_seq_ptrfct, "ctg") || !strcmp(contig_seq_ptrfct, "gtg") || !strcmp(contig_seq_ptrfct, "aug") || !strcmp(contig_seq_ptrfct, "cug") || !strcmp(contig_seq_ptrfct, "gug")) { codon_status = 1; } } else if (ARGUMENTSSTRUCT(codon_mode) == 3) { if (!strcmp(contig_seq_ptrfct, "atg") || !strcmp(contig_seq_ptrfct, "ctg") || !strcmp(contig_seq_ptrfct, "gtg") || !strcmp(contig_seq_ptrfct, "ttg") || !strcmp(contig_seq_ptrfct, "aug") || !strcmp(contig_seq_ptrfct, "cug") || !strcmp(contig_seq_ptrfct, "gug") || !strcmp(contig_seq_ptrfct, "uug")) { codon_status = 1; } } else { if (!strcmp(contig_seq_ptrfct, "atg") || !strcmp(contig_seq_ptrfct, "aug")) { codon_status = 1; } } return codon_status; } static void output_close_iteration_xml(const ParseStruct *parsestruct_ptr) { gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); gt_file_xprintf(FILEPOINTEROUT, " \n"); } genometools-1.5.1/src/mgth/mg_outputwriter.h000066400000000000000000000026171211610345200212310ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MG_OUTPUTWRITER_H #define MG_OUTPUTWRITER_H #include "metagenomethreader.h" #include "mg_codon.h" /* Funktion zur Ausgabe der berechneten Ergebnisse Parameter: Zeiger auf ParseStruct-Struktur, CombinedScore-Matrix, die HitInformation-Struktur, die RegionStruct-Struktur, das Char-Zeichen, um welchen Bereich es sich handelt Returnwert: void */ void mg_outputwriter(ParseStruct *, CombinedScoreMatrixEntry **, HitInformation *, RegionStruct **, char, GtError *); #endif genometools-1.5.1/src/mgth/mg_reverse.c000066400000000000000000000073321211610345200201010ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* Copyright (c) 2006-2007 Gordon Gremme Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg See LICENSE file or http://genometools.org/license.html for license details. modiefied for metagenomethreader; */ #include "mg_reverse.h" static int mg_complement(char *reverse_char, char dna_char, GtError * err) { gt_error_check(err); switch (dna_char) { case 'A': *reverse_char = 'T'; return 0; case 'C': *reverse_char = 'G'; return 0; case 'G': *reverse_char = 'C'; return 0; case 'T': *reverse_char = 'A'; return 0; case 'U': *reverse_char = 'A'; return 0; case 'a': *reverse_char = 't'; return 0; case 'c': *reverse_char = 'g'; return 0; case 'g': *reverse_char = 'c'; return 0; case 't': *reverse_char = 'a'; return 0; case 'u': *reverse_char = 'a'; return 0; case 'S': *reverse_char = 'S'; return 0; case 's': *reverse_char = 's'; return 0; case 'N': *reverse_char = 'N'; return 0; case 'n': *reverse_char = 'n'; return 0; case 'R': *reverse_char = 'Y'; return 0; case 'r': *reverse_char = 'y'; return 0; case 'Y': *reverse_char = 'R'; return 0; case 'y': *reverse_char = 'r'; return 0; case 'M': *reverse_char = 'K'; return 0; case 'm': *reverse_char = 'k'; return 0; case 'K': *reverse_char = 'M'; return 0; case 'k': *reverse_char = 'm'; return 0; case 'W': *reverse_char = 'W'; return 0; case 'w': *reverse_char = 'w'; return 0; case 'H': *reverse_char = 'D'; return 0; case 'h': *reverse_char = 'd'; return 0; case 'D': *reverse_char = 'H'; return 0; case 'd': *reverse_char = 'h'; return 0; case 'B': *reverse_char = 'V'; return 0; case 'b': *reverse_char = 'v'; return 0; case 'V': *reverse_char = 'B'; return 0; case 'v': *reverse_char = 'b'; return 0; default: gt_error_set(err, "complement of DNA character '%c' not defined", dna_char); return -1; } } int mg_reverse_complement(char *dna_seq, unsigned long seqlen, GtError * err) { char *front_char, *back_char, tmp_char; int had_err = 0; gt_error_check(err); gt_assert(dna_seq); for (front_char = dna_seq, back_char = dna_seq + seqlen - 1; front_char <= back_char; front_char++, back_char--) { had_err = mg_complement(&tmp_char, *front_char, err); if (!had_err) had_err = mg_complement(front_char, *back_char, err); if (!had_err) *back_char = tmp_char; if (had_err) break; } return had_err; } genometools-1.5.1/src/mgth/mg_reverse.h000066400000000000000000000025341211610345200201050ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* Copyright (c) 2006-2007 Gordon Gremme Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg See LICENSE file or http://genometools.org/license.html for license details. modified for gt_metagenomethreader */ #ifndef MG_REVERSE_H #define MG_REVERSE_H #include "core/assert_api.h" #include "metagenomethreader.h" /* reverse 'dna_seq' of length 'seqlen' in place */ int mg_reverse_complement(char *dna_seq, unsigned long seqlen, GtError *); #endif genometools-1.5.1/src/mgth/mg_xmlparser.c000066400000000000000000001045101211610345200204370ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "mg_xmlparser.h" #include "core/unused_api.h" #include "metagenomethreader.h" #ifdef CURLDEF #ifndef S_SPLINT_S #include #include #include #endif /* Expat Hilfs-Struktur zum Abspeichern der Hit-DNA-Sequenz und der Hit-DNA-Laenge */ typedef struct { char *memory; size_t size; } MemoryStruct; /* Expat-Hilfsfunktion zum Abspeichern der empfangenen Daten Parameter: void-Zeiger auf den Anfang des Speicherbereichs, Anzahl zu speichernder Elemente, Groesse des zu speichernden Datentyps, void-Zeiger auf die zu speichernden Daten Returnwert: Groesse des neu allokierten Speicherbereichs*/ static size_t WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) { size_t realsize = size * nmemb; MemoryStruct *mem = (MemoryStruct *) data; mem->memory = (char *) realloc(mem->memory, mem->size + realsize + 1); if (mem->memory) { memcpy(&(mem->memory[mem->size]), ptr, realsize); mem->size += realsize; mem->memory[mem->size] = 0; } return realsize; } int mg_curl(ParseStruct *parsestruct_ptr, unsigned long hit_counter, GtError * err) { int had_err = 0, curl_errornr = 0; /* Laenge der aus dem XML-File stammenden Hit-DNA-Sequenz */ unsigned long seq_len; long numb_from = 0, numb_to = 0, numb_diff = 0; GtStr *seq_var, *http_adr; MemoryStruct memorystruct; /* char-Zeiger auf die HTTP-Adresse des cgi-Skriptes efetch von NCBI */ char *http_adr_ptr, *seq_pos; /* char-Zeiger, wird benutzt zum Auslesen der Sequenzinformation aus dem XML-File, welche Ergebnis der efetch-Anfrage ist */ const char *curlerror; /* Curl-Handle */ CURL *curl_handle; /* char-Zeiger auf die Daten ist NULL */ memorystruct.memory = NULL; /* noch keine Daten eingetragen bzw. abgespeichert */ memorystruct.size = 0; /* Zwischenspeicher fuer die Sequnezinformation, da die GtStrArray-Klasse keine Funktion zum begrenzten Einfuegen eines Strings zur Verfuegung stellt; setzen des ersten Teils der HTTP-Adresse */ seq_var = gt_str_new(); http_adr = gt_str_new_cstr ("http://www.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db="); /* Check der Umgebungsvariablen */ gt_error_check(err); curl_global_init(CURL_GLOBAL_ALL); /* initialisieren der curl-session */ curl_handle = curl_easy_init(); /* Zusammensetzen der http-Adresse durch Anhaengen der query-GI-Nummer, des Hit-from, des Hit-to Wertes und des Rueckgabetyps an den ersten Teil der HTTP-Adresse */ gt_str_append_str(http_adr, ARGUMENTSSTRUCT(curl_fcgi_db)); gt_str_append_cstr(http_adr, "&id=gi|"); gt_str_append_str(http_adr, parsestruct_ptr->hit_gi_nr_tmp); gt_str_append_cstr(http_adr, "&seq_start="); gt_str_append_cstr(http_adr, gt_str_array_get(MATRIXSTRUCT(hit_from), hit_counter)); gt_str_append_cstr(http_adr, "&seq_stop="); gt_str_append_cstr(http_adr, gt_str_array_get(MATRIXSTRUCT(hit_to), hit_counter)); gt_str_append_cstr(http_adr, "&retmode=xml"); /* char-Zeiger wird benoetigt, da curl_easy_setopt als 3. Parameter einen char-Zeiger erwartet */ http_adr_ptr = gt_str_get(http_adr); /* festlegen, welche HTTP-Adresse aufgerufen werden soll */ curl_easy_setopt(curl_handle, CURLOPT_URL, http_adr_ptr); /* die empfangenen Daten werden an die Funktion WriteMemoryCallback gesendet, wo Speicherplatz reserviert und die Daten in diesen Speicherbereich kopiert werden */ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); /* Die Daten werden in die Struktur eingetragen */ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *) &memorystruct); /* setzen des user-agent field, da einige Server diesen voraussetzen */ curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0"); /* Anfrage wird ausgefuehrt */ curl_errornr = curl_easy_perform(curl_handle); curlerror = curl_easy_strerror(curl_errornr); if (curl_errornr) { gt_error_set(err, "an error occurred during curl-processing (error-code %d):\ \"%s\"", curl_errornr, curlerror); had_err = -1; } if (!had_err) { /* Die Hit-DNA steht zwischen dem und dem XML-Tag, Zeiger auf das < Zeichen von */ seq_pos = strstr(memorystruct.memory, ""); if (!seq_pos) { gt_error_set(err, "an error occurred while retrieving sequence-information\ with the following request: \"%s\"", http_adr_ptr); had_err = -1; } if (!had_err) { /* seq_pos+16 zeigt auf das erste Zeichen der Sequence; gezaehlt wird die Laenge bis zum naechsten Zeichen das kein g,a,c oder t etc. ist */ gt_assert(seq_pos != NULL); seq_len = strspn(seq_pos + 16, "gactrymkswhbvdnu"); numb_from = atol(gt_str_array_get(MATRIXSTRUCT(hit_from), hit_counter)); numb_to = atol(gt_str_array_get(MATRIXSTRUCT(hit_to), hit_counter)); numb_diff = numb_to - numb_from +1; if (numb_diff == seq_len) { /* seq_len Zeichen werden in die Hilfsvariable seq_var kopiert */ gt_str_append_cstr_nt(seq_var, seq_pos + 16, seq_len); /* Die Sequenz in seq_var wird in das GtStrArray hit_dna kopiert */ gt_str_array_add_cstr(MATRIXSTRUCT(hit_dna), gt_str_get(seq_var)); /* das Hit-Sequenz-File wird geschrieben; die erste Zeile eines Eintrages ist die Hit-GI-Def, an die durch ein Leerzeichen getrennt die Hsp-Num des jeweiligen Hits angehaengt wird */ gt_file_xprintf(parsestruct_ptr->fp_blasthit_file, ">%s ", gt_str_array_get(MATRIXSTRUCT(hit_num), hit_counter)); gt_file_xprintf(parsestruct_ptr->fp_blasthit_file, "%s ", gt_str_array_get(MATRIXSTRUCT(hit_from), hit_counter)); gt_file_xprintf(parsestruct_ptr->fp_blasthit_file, "%s ", gt_str_array_get(MATRIXSTRUCT(hit_to), hit_counter)); gt_file_xprintf(parsestruct_ptr->fp_blasthit_file, "%s ", gt_str_array_get(MATRIXSTRUCT(fasta_row), hit_counter)); gt_file_xprintf(parsestruct_ptr->fp_blasthit_file, "%s\n", gt_str_array_get(MATRIXSTRUCT(hit_gi_def), hit_counter)); /* nach dem GI-Def Eintrag folgt in der naechsten Zeile die Sequenz */ gt_file_xprintf(parsestruct_ptr->fp_blasthit_file, "%s\n", gt_str_get(seq_var)); } else { PARSESTRUCT(gi_flag) = 1; } } } /* cleanup des Curl-Handle */ curl_easy_cleanup(curl_handle); if (memorystruct.memory) free(memorystruct.memory); gt_str_delete(http_adr); gt_str_delete(seq_var); return had_err; } #endif /* Expat-Funktion zur Verarbeitung des Textes zwischen XML-Tags Parameter: void-Zeiger auf die (Nutzer)Daten - hier: parsestruct-Struktur; Zeiger auf das erste Zeichen nach einem XML-Tag; int-Wert der Laenge des Textes zwischen den XML-Tags Returnwert: void */ static void textElement(void *, const XML_Char *, int); /* Expat-Funktion zur Behandlung oeffnender XML-Tags Parameter: void-Zeiger auf die (Nutzer)Daten - hier: parsestruct-Struktur; Name des aktuellen XML-Tags; Expat XML-Attribute (nicht verwendet) Returnwert: void */ static void XMLCALL startElement(void *, const char *, const char **); /* Expat-Funktion zur Behandlung schliessender XML-Tags Parameter: void-Zeiger auf die (Nutzer)Daten - hier: parsestruct-Struktur; Name des aktuellen XML-Tags Returnwert: void */ static void XMLCALL endElement(void *, const char *); /* Funktion zum Setzen von Flags, bei Uebereinstimmung von gesuchtem und aktuell oeffnendem XML-Tag-Namen Parameter: das zu setzende Flag; der Counter, der das zu betrachtende XML-Tag bestimmt; ein Zeichen zur Unterscheidung von Query-, Hit- und Hsp-XML-Tags Returnwert: void */ static void flag_setting(unsigned short *, unsigned short *, char); /* Funktion zum Loeschen von Flags, bei Uebereinstimmung von gesuchtem und aktuell schliessendem XML-Tag-Namen Parameter: das zu setzende Flag; der counter, der das zu betrachtende XML-Tag bestimmt; ein Zeichen zur Unterscheidung von Query-, Hit- und Hsp-XML-Tags Returnwert: void */ static void flag_delete(unsigned short *, unsigned short *, char); /* Funktion, die den Stand der Counter ueberprueft und bei Bedarf auf UNSET setzt; stimmt der Counter mit den definierten Grenzen ueberein wird er auf UNSET gesetzt Parameter: der counter, der das zu betrachtende XML-Tag bestimmt; ein Zeichen zur Unterscheidung von Query-, Hit- und Hsp-XML-Tags Returnwert: void */ static void check_counter(unsigned short *, char); int mg_xmlparser(ParseStruct *parsestruct_ptr, GtFile * fp_xmlfile, GtError * err) { int had_err = 0; /* Expat XML-Error setzen */ enum XML_Error error; /* Puffer zum zeilenweisen Einlesen des XML-Files, XML_Parser deklarieren */ GtStr *buf; XML_Parser parser; /* Check Umgebungsvariablen */ gt_error_check(err); /* Puffer-String anlegen */ buf = gt_str_new(); /* XML-Parser wird initialisiert */ parser = XML_ParserCreate(NULL); /* Die Struktur parsestruct wird als UserData gesetzt */ XML_SetUserData(parser, parsestruct_ptr); /* Start- und Endelement Handler werden gesetzt */ XML_SetElementHandler(parser, startElement, endElement); /* Text-Handler setzen */ XML_SetCharacterDataHandler(parser, textElement); while ((gt_str_read_next_line_generic(buf, fp_xmlfile) != EOF) && !had_err) { PARSESTRUCT(xml_linenumber)++; if (PARSESTRUCT(had_err)) { had_err = -1; } if ((XML_Parse(parser, gt_str_get(buf), gt_str_length(buf), false) == XML_STATUS_ERROR) && !had_err) { error = XML_GetErrorCode(parser); gt_error_set(err, "an error occurred parsing line %lu of file \"%s\": %s", PARSESTRUCT(xml_linenumber), gt_str_get(PARSESTRUCT(xmlfile)), XML_ErrorString(error)); had_err = -1; } /* reset line buffer */ gt_str_reset(buf); } /* finish parsing */ if ((XML_Parse(parser, NULL, 0, true) == XML_STATUS_ERROR) && !had_err) { error = XML_GetErrorCode(parser); gt_error_set(err, "an error occurred while finishing the parsing of file\ \"%s\": %s", gt_str_get(PARSESTRUCT(xmlfile)), XML_ErrorString(error)); had_err = -1; } if (PARSESTRUCT(xml_tag_flag) && !(!had_err) && PARSESTRUCT(giexp_flag)) { gt_str_array_delete(MATRIXSTRUCT(hit_gi_nr)); gt_str_array_delete(MATRIXSTRUCT(hit_num)); gt_str_array_delete(MATRIXSTRUCT(hit_dna)); gt_str_array_delete(MATRIXSTRUCT(hit_gi_def)); gt_str_array_delete(MATRIXSTRUCT(hit_acc)); gt_str_array_delete(MATRIXSTRUCT(fasta_row)); gt_str_array_delete(MATRIXSTRUCT(hit_from)); gt_str_array_delete(MATRIXSTRUCT(hit_to)); gt_str_array_delete(MATRIXSTRUCT(hsp_qseq)); gt_str_array_delete(MATRIXSTRUCT(hsp_hseq)); gt_str_array_delete(PARSESTRUCT(query_frame_tmp)); gt_str_array_delete(PARSESTRUCT(hit_frame_tmp)); } /* Freigeben des XML-Parser und loeschen des Puffer-Strings */ XML_ParserFree(parser); gt_str_delete(buf); return had_err; } static void XMLCALL startElement(void *data, const char *name, GT_UNUSED const char **atts) { ParseStruct *parsestruct_ptr = (ParseStruct *) data; if (!PARSESTRUCT(had_err)) { /* Vergleich des aktuellen XML-Tags mit dem aktuellen Tag-Namen im jew. GtArray bei Uebereinstimmung wird das jeweilige Flag gesetzt */ if (strcmp (name, gt_str_array_get(PARSESTRUCT(query_array), XMLPARSERSTRUCT(query_array_index_start))) == 0) { flag_setting(&XMLPARSERSTRUCT(query_array_index_start), &PARSESTRUCT(def_flag), 'q'); } else if (strcmp (name, gt_str_array_get(PARSESTRUCT(hit_array), XMLPARSERSTRUCT(hit_array_index_start))) == 0) { flag_setting(&XMLPARSERSTRUCT(hit_array_index_start), &PARSESTRUCT(hit_flag), 'h'); } else if (strcmp (name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), XMLPARSERSTRUCT(hit_hsp_array_index_start))) == 0) { flag_setting(&XMLPARSERSTRUCT(hit_hsp_array_index_start), &PARSESTRUCT(hit_hsp_flag), 't'); } } } static void XMLCALL endElement(void *data, const char *name) { ParseStruct *parsestruct_ptr = (ParseStruct *) data; if (!PARSESTRUCT(had_err)) { GtError *err = PARSESTRUCT(err); /* Laenge der GI-Nr in einem GI-Def-XML-Eintrag */ unsigned short gi_len = 0; /* Temp-Variablen zum Zwischenspeichern der Query-Start- bzw. -End-Werte sowie der Frame-Informationen */ unsigned long ulong_numb_buf = 0, query_nr = 0, **query_nr_p; long numb_buf = 0; /* Zeiger auf die erste Zahl der GI-Nr in einem Hit-ID-XML-Eintrag */ const char *gi_ptr = NULL; /* Check Umgebungsvariablen */ gt_error_check(err); /* wurde das Iteration_hits XML-Tag erreicht wird die mg_combinedscore Methode aufgerufen und diverse Variablen fuer einen neuen Eintrag resetet bzw. geloescht */ if (strcmp(name, gt_str_get(PARSESTRUCT(xml_tag))) == 0 && PARSESTRUCT(giexp_flag)) { if (XMLPARSERSTRUCT(hit_counter) > 0) { PARSESTRUCT(had_err) = mg_combinedscore(parsestruct_ptr, XMLPARSERSTRUCT(hit_counter), err); /* Zaehler der Hits pro Hit-GI-Nr */ XMLPARSERSTRUCT(hit_counter) = 0; PARSESTRUCT(gi_flag) = 0; gt_array_reset(MATRIXSTRUCT(query_from)); gt_array_reset(MATRIXSTRUCT(query_to)); gt_array_reset(MATRIXSTRUCT(hit_frame)); gt_array_reset(MATRIXSTRUCT(query_frame)); } /* Schreiben der schliessenden XML-Tags nach der Hit-Bearbeitung */ if (ARGUMENTSSTRUCT(outputfile_format) == 3) { /* Abschluss des Iteration-Bereichs im XML-File */ mg_outputwriter(parsestruct_ptr, NULL, NULL, NULL, 'x', err); } gt_str_array_delete(MATRIXSTRUCT(hit_gi_nr)); gt_str_array_delete(MATRIXSTRUCT(hit_gi_def)); gt_str_array_delete(MATRIXSTRUCT(hit_acc)); gt_str_array_delete(MATRIXSTRUCT(fasta_row)); gt_str_array_delete(MATRIXSTRUCT(hit_num)); gt_str_array_delete(MATRIXSTRUCT(hit_dna)); gt_str_array_delete(MATRIXSTRUCT(hit_from)); gt_str_array_delete(MATRIXSTRUCT(hit_to)); gt_str_array_delete(MATRIXSTRUCT(hsp_qseq)); gt_str_array_delete(MATRIXSTRUCT(hsp_hseq)); gt_str_array_delete(PARSESTRUCT(query_frame_tmp)); gt_str_array_delete(PARSESTRUCT(hit_frame_tmp)); PARSESTRUCT(xml_tag_flag) = MGTH_UNSET; } /* nur wenn ein Flag gesetzt ist und Text eingelesen wurde, ist eine weitere Bearbeitung notwendig */ if ((PARSESTRUCT(def_flag) == 1 || PARSESTRUCT(hit_flag) == 1 || PARSESTRUCT(hit_hsp_flag) == 1)) { /* Anhand der Query-GI-Def kann mittels Hash-Table und GtBioseq-Struktur die Query-DNA ausgelesen werden */ if (strcmp(name, gt_str_array_get(PARSESTRUCT(query_array), 0)) == 0 && PARSESTRUCT(giexp_flag)) { /* Query-DNA-Strings fuer die Sequenz und die Definition werden geloescht, bevor der neue Eintrag hineinkopiert wird */ gt_str_reset(MATRIXSTRUCT(query_dna)); gt_str_reset(MATRIXSTRUCT(query_def)); /* Abspeichern der Query-Def */ gt_str_set(MATRIXSTRUCT(query_def), gt_str_get(PARSESTRUCT(buf_ptr))); /* Erzeugen von StringArrays zur Aufnahme der Hit-DNA-Sequenz-Informationen */ MATRIXSTRUCT(hit_gi_nr) = gt_str_array_new(); MATRIXSTRUCT(hit_num) = gt_str_array_new(); MATRIXSTRUCT(hit_dna) = gt_str_array_new(); MATRIXSTRUCT(hit_gi_def) = gt_str_array_new(); MATRIXSTRUCT(hit_acc) = gt_str_array_new(); MATRIXSTRUCT(fasta_row) = gt_str_array_new(); MATRIXSTRUCT(hit_from) = gt_str_array_new(); MATRIXSTRUCT(hit_to) = gt_str_array_new(); MATRIXSTRUCT(hsp_qseq) = gt_str_array_new(); MATRIXSTRUCT(hsp_hseq) = gt_str_array_new(); PARSESTRUCT(query_frame_tmp) = gt_str_array_new(); PARSESTRUCT(hit_frame_tmp) = gt_str_array_new(); /* Fuer den Fall eines Parse-Fehlers - Das Flag zeigt an, dass die Strings angelegt und nicht geloescht wurden */ PARSESTRUCT(xml_tag_flag) = MGTH_SET; /* Auslesen der Eintrags-Nr aus der Hashtabelle */ if ((query_nr_p = gt_cstr_nofree_ulp_gt_hashmap_get( PARSESTRUCT(queryhash), gt_str_get(PARSESTRUCT(buf_ptr))))) { char *seq; query_nr = **query_nr_p; seq = gt_bioseq_get_sequence(PARSESTRUCT(queryseq), query_nr); /* Abspeichern der zur Query-Def passenden Query-DNA */ gt_str_append_cstr_nt(MATRIXSTRUCT(query_dna), seq, gt_bioseq_get_sequence_length(PARSESTRUCT (queryseq), query_nr)); gt_free(seq); mg_outputwriter(parsestruct_ptr, NULL, NULL, NULL, 'q', err); } else { gt_error_set(err, "query-dna entry in xml-file does not exist in\ query-hash. wrong query-dna file?"); PARSESTRUCT(had_err) = -1; } } /* Hit_id liefert die GI-Nummer, die fuer die efetch-NCBI-Abfrage benoetigt wird */ else if ((strcmp(name, gt_str_array_get(PARSESTRUCT(hit_array), 0)) == 0)) { /* loeschen des alten hit_gi_nr Eintrages */ gt_str_reset(PARSESTRUCT(hit_gi_nr_tmp)); gt_str_reset(PARSESTRUCT(fasta_row)); gt_str_set(PARSESTRUCT(fasta_row), gt_str_get(PARSESTRUCT(buf_ptr))); /* gi_ptr zeigt auf die erste Zahl der Hit-GI-Nummer */ gi_ptr = strchr(gt_str_get(PARSESTRUCT(buf_ptr)), '|'); gt_assert(gi_ptr != NULL); gi_ptr = gi_ptr + 1; if (!isalpha(*gi_ptr)) { /* bestimmen der GI-Nummer Laenge; strspn liest solange Zeichen, bis ein Zeichen auftritt, dass nicht im angegebenen String auftaucht - hier: '|' */ gi_len = strspn(gi_ptr + 1, "0123456789") + 1; /* Die GI-Nummer der Laenge gi_len wird abgespeichert */ gt_str_append_cstr_nt(PARSESTRUCT(hit_gi_nr_tmp), gi_ptr, gi_len); } else { gt_error_set(err, "incorrect gi-hit-number in xmlfile - required format\ is gi|[0-9]"); PARSESTRUCT(had_err) = -1; } } /* einlesen der hit_gi_def */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_array), 1)) == 0 && PARSESTRUCT(giexp_flag)) { gt_str_set(PARSESTRUCT(gi_def_tmp), gt_str_get(PARSESTRUCT(buf_ptr))); } /* einlesen der hit_acc_nr */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_array), 2)) == 0 && PARSESTRUCT(giexp_flag)) { gt_str_set(PARSESTRUCT(gi_acc_tmp), gt_str_get(PARSESTRUCT(buf_ptr))); } /* abspeichern der Hit-GI-Def, Hit-ACC-Nr. und der Hsp-num - Kombination ist Bestandteil der eindeutigen Hit-FASTA-Zeile im Hit-File und dient der Identifizierung der Hit-DNA-Sequenzen im XML-File */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), 0)) == 0 && PARSESTRUCT(giexp_flag)) { /* Die GI-Nummer wird entsprechend ihrer Laenge gi_len abgespeichert */ gt_str_array_add_cstr(MATRIXSTRUCT(hit_gi_nr), gt_str_get(PARSESTRUCT(hit_gi_nr_tmp))); /* einlesen der aktuellen hit_gi_def */ gt_str_array_add_cstr(MATRIXSTRUCT(hit_gi_def), gt_str_get(PARSESTRUCT(gi_def_tmp))); /* einlesen der aktuellen hit_accession-number */ gt_str_array_add_cstr(MATRIXSTRUCT(hit_acc), gt_str_get(PARSESTRUCT(gi_acc_tmp))); gt_str_array_add_cstr(MATRIXSTRUCT(fasta_row), gt_str_get(PARSESTRUCT(fasta_row))); /* einlesen der aktuellen hit_num */ gt_str_array_add_cstr(MATRIXSTRUCT(hit_num), gt_str_get(PARSESTRUCT(buf_ptr))); } /* Der Query-Start-Wert wird gespeichert */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), 1)) == 0 && PARSESTRUCT(giexp_flag)) { /* Der Query-from Wert wird als Long-Wert gespeichert, dazu zunaechst Umwandlung des Strings mittels atol */ ulong_numb_buf = atol(gt_str_get(PARSESTRUCT(buf_ptr))); /* Der Query-from Wert wird zum GtArray query_from hinzugefuegt */ gt_array_add_elem(MATRIXSTRUCT(query_from), &ulong_numb_buf, sizeof (unsigned long)); } /* Query-Stop-Wert wird gespeichert/Bearbeitung siehe Query-Start-Wert */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), 2)) == 0 && PARSESTRUCT(giexp_flag)) { ulong_numb_buf = atol(gt_str_get(PARSESTRUCT(buf_ptr))); gt_array_add_elem(MATRIXSTRUCT(query_to), &ulong_numb_buf, sizeof (unsigned long)); } /* Hit-from XML-Tag */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), 3)) == 0) { if (PARSESTRUCT(giexp_flag)) { /* Speichern des Hit-from Wertes in der matrix_info Struktur innerhalb der parsestruct-Struktur */ gt_str_array_add_cstr(MATRIXSTRUCT(hit_from), gt_str_get(PARSESTRUCT(buf_ptr))); } else { gt_file_xprintf(HITFILEOUT, "%s ", gt_str_get(PARSESTRUCT(hit_gi_nr_tmp))); gt_file_xprintf(HITFILEOUT, "%s ", gt_str_get(PARSESTRUCT(buf_ptr))); } } /* Hit-to XML-Tag - Bearbeitung siehe Hit-from-Tag */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), 4)) == 0) { if (PARSESTRUCT(giexp_flag)) { /* Speichern des Hit-from Wertes in der matrix_info Struktur innerhalb der parsestruct-Struktur */ gt_str_array_add_cstr(MATRIXSTRUCT(hit_to), gt_str_get(PARSESTRUCT(buf_ptr))); } else { gt_file_xprintf(HITFILEOUT, "%s \n", gt_str_get(PARSESTRUCT(buf_ptr))); } } /* Query-Frame XML-Tag; bei der Berechnung der Combined-Scores bilden die Hits Cluster entsprechend der Query-Frames; Speicherung der Frames erfolgt als Long-Wert */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), 5)) == 0 && PARSESTRUCT(giexp_flag)) { /* abspeichern des query_frames fuer die FASTA-File Zeile im Hit-File als String */ gt_str_array_add_cstr(PARSESTRUCT(query_frame_tmp), gt_str_get(PARSESTRUCT(buf_ptr))); /* abspeichern des query_frames fuer spaetere Sequenzberechnnugen als long Value */ numb_buf = atol(gt_str_get(PARSESTRUCT(buf_ptr))); gt_array_add_elem(MATRIXSTRUCT(query_frame), &numb_buf, sizeof (long)); } /* Hit-Frame XML-Tag/Bearbeitung siehe Query-Frame XML-Tag als String */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), 6)) == 0 && PARSESTRUCT(giexp_flag)) { /* abspeichern des hit_frames fuer die FASTA-File Zeile im Hit-File */ gt_str_array_add_cstr(PARSESTRUCT(hit_frame_tmp), gt_str_get(PARSESTRUCT(buf_ptr))); /* abspeichern des hit_frames fuer spaetere Sequenzberechnnugen als long Value */ numb_buf = atol(gt_str_get(PARSESTRUCT(buf_ptr))); gt_array_add_elem(MATRIXSTRUCT(hit_frame), &numb_buf, sizeof (long)); /* Wenn ein Hit-FASTA-File vorliegt existiert eine GtBioseq-Struktur und eine Hashtabelle, ueber die die Hit-Sequenz-Informationen eingelesen werden */ unsigned long hit_nr = 0; GtStr *hit_tmp; GtStr *hit_dna_tmp; hit_tmp = gt_str_new(); hit_dna_tmp = gt_str_new(); /* Die Fasta-Zeile im Hit-File besteht aus der Hit-Gi-Def, der Accession-Nr, der Hit-Hsp-Nr, dem Hit-From und Hit-To Wert sowie des Query- und Hit-Frames getrennt durch ein Leerzeichen; Zeile muss eindeutig sein - durch diese Kombination ist dies gewaehrleistet */ gt_str_set(hit_tmp, gt_str_array_get(MATRIXSTRUCT(hit_gi_nr), XMLPARSERSTRUCT(hit_counter))); gt_str_append_cstr(hit_tmp, " "); gt_str_append_cstr(hit_tmp, gt_str_array_get(MATRIXSTRUCT(hit_from), XMLPARSERSTRUCT(hit_counter))); gt_str_append_cstr(hit_tmp, " "); gt_str_append_cstr(hit_tmp, gt_str_array_get(MATRIXSTRUCT(hit_to), XMLPARSERSTRUCT(hit_counter))); gt_str_append_cstr(hit_tmp, " "); gt_str_append_cstr(hit_tmp, gt_str_array_get(MATRIXSTRUCT(fasta_row), XMLPARSERSTRUCT(hit_counter))); gt_str_append_cstr(hit_tmp, " "); gt_str_append_cstr(hit_tmp, gt_str_array_get(MATRIXSTRUCT(hit_gi_def), XMLPARSERSTRUCT(hit_counter))); /* Hit-Hashtabelle enthaelt den konstruierten Eintrag */ if ((query_nr_p = gt_cstr_nofree_ulp_gt_hashmap_get( PARSESTRUCT(hithash), gt_str_get(hit_tmp)))) { char *seq; /* Positionsbestimmung des Eintrages in der GtBioseq-Struktur */ hit_nr = **query_nr_p; seq = gt_bioseq_get_sequence(PARSESTRUCT(hitseq), hit_nr); /* auslesen der Sequenzinformation */ gt_str_append_cstr_nt(hit_dna_tmp, seq, gt_bioseq_get_sequence_length(PARSESTRUCT (hitseq), hit_nr)); gt_free(seq); /* abspeichern der Hit-DNA in der Matrix-Info Struktur */ gt_str_array_add_cstr(MATRIXSTRUCT(hit_dna), gt_str_get(hit_dna_tmp)); } /* Falls kein Eintrag in der Hashtabelle gefunden wurde, Fehlercode setzen - falsche Hit-DNA-Datei als Parameter bei Programmaufruf angegeben ? */ else { /* Hit-GI-Nr nicht in der Hashtabelle, also ueber cURL von z.B. NCBI nachladen */ #ifdef CURLDEF PARSESTRUCT(had_err) = mg_curl(parsestruct_ptr, XMLPARSERSTRUCT(hit_counter), err); #else PARSESTRUCT(gi_flag) = 1; #endif } gt_str_delete(hit_tmp); gt_str_delete(hit_dna_tmp); } /* Einlesen der translatierten Query-DNA-Sequenz */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), 7)) == 0 && PARSESTRUCT(giexp_flag)) { gt_str_array_add_cstr(MATRIXSTRUCT(hsp_qseq), gt_str_get(PARSESTRUCT(buf_ptr))); } /* Einlesen der translatierten Hit-DNA-Sequenz */ else if (strcmp(name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), 8)) == 0 && PARSESTRUCT(giexp_flag)) { gt_str_array_add_cstr(MATRIXSTRUCT(hsp_hseq), gt_str_get(PARSESTRUCT(buf_ptr))); /* Zaehler fuer die Hits pro GI-Nummer wird um 1 erhoeht */ XMLPARSERSTRUCT(hit_counter)++; if (PARSESTRUCT(gi_flag)) { PARSESTRUCT(gi_flag) = 0; gt_str_array_set_size(MATRIXSTRUCT(hit_gi_nr), gt_str_array_size(MATRIXSTRUCT(hit_gi_nr))-1); gt_str_array_set_size(MATRIXSTRUCT(hit_gi_def), gt_str_array_size(MATRIXSTRUCT(hit_gi_def))-1); gt_str_array_set_size(MATRIXSTRUCT(hit_acc), gt_str_array_size(MATRIXSTRUCT(hit_acc))-1); gt_str_array_set_size(MATRIXSTRUCT(fasta_row), gt_str_array_size(MATRIXSTRUCT(fasta_row))-1); gt_str_array_set_size(MATRIXSTRUCT(hit_num), gt_str_array_size(MATRIXSTRUCT(hit_num))-1); gt_array_set_size(MATRIXSTRUCT(query_from), gt_array_size(MATRIXSTRUCT(query_from))-1); gt_array_set_size(MATRIXSTRUCT(query_to), gt_array_size(MATRIXSTRUCT(query_to))-1); gt_str_array_set_size(MATRIXSTRUCT(hit_from), gt_str_array_size(MATRIXSTRUCT(hit_from))-1); gt_str_array_set_size(MATRIXSTRUCT(hit_to), gt_str_array_size(MATRIXSTRUCT(hit_to))-1); gt_array_set_size(MATRIXSTRUCT(query_frame), gt_array_size(MATRIXSTRUCT(query_frame))-1); gt_array_set_size(MATRIXSTRUCT(hit_frame), gt_array_size(MATRIXSTRUCT(hit_frame))-1); gt_str_array_set_size(MATRIXSTRUCT(hsp_qseq), gt_str_array_size(MATRIXSTRUCT(hsp_qseq))-1); gt_str_array_set_size(MATRIXSTRUCT(hsp_hseq), gt_str_array_size(MATRIXSTRUCT(hsp_hseq))-1); XMLPARSERSTRUCT(hit_counter)--; } } /* Flagberechnungen */ if (strcmp (name, gt_str_array_get(PARSESTRUCT(query_array), XMLPARSERSTRUCT(query_array_index_end))) == 0 && !PARSESTRUCT(had_err)) { flag_delete(&XMLPARSERSTRUCT(query_array_index_end), &PARSESTRUCT(def_flag), 'q'); } else if (strcmp (name, gt_str_array_get(PARSESTRUCT(hit_array), XMLPARSERSTRUCT(hit_array_index_end))) == 0 && !PARSESTRUCT(had_err)) { flag_delete(&XMLPARSERSTRUCT(hit_array_index_end), &PARSESTRUCT(hit_flag), 'h'); } else if (strcmp (name, gt_str_array_get(PARSESTRUCT(hit_hsp_array), XMLPARSERSTRUCT(hit_hsp_array_index_end))) == 0 && !PARSESTRUCT(had_err)) { flag_delete(&XMLPARSERSTRUCT(hit_hsp_array_index_end), &PARSESTRUCT(hit_hsp_flag), 't'); } /* Der Lesepuffer fuer den Text zwischen 2 XML-Tags wird resetet */ gt_str_reset(PARSESTRUCT(buf_ptr)); } } } static void textElement(void *data, const XML_Char *txt_element, int len) { ParseStruct *parsestruct_ptr = (ParseStruct *) data; if (!PARSESTRUCT(had_err)) { /* falls ein Flag gesetzt ist (relevanter XML-Tag Zwischenbereich), wird mit der Bearbeitung der Textpassage begonnen; dazu wird der "aktuelle Text" txt_element an den bereits eingelesenen Text angehaengt */ if (PARSESTRUCT(hit_flag) == MGTH_SET || PARSESTRUCT(def_flag) == MGTH_SET || PARSESTRUCT(hit_hsp_flag) == MGTH_SET) { gt_str_append_cstr_nt(PARSESTRUCT(buf_ptr), txt_element, len); } } } static void flag_setting(unsigned short *counter_fct, unsigned short *flag, char flag_sign) { /* das uebergebene Flag wird auf SET gesetzt und der Counter um eine Stelle auf den naechsten Tag-Namen in der Struktur weitergesetzt */ *flag = MGTH_SET; (*counter_fct)++; /* ueberpruefen, ob der Counter die Grenzen zur naechsten Kategorie erreicht hat */ check_counter(counter_fct, flag_sign); } static void flag_delete(unsigned short *counter_fct, unsigned short *flag, char flag_sign) { /* das uebergebene Flag wird auf UNSET gesetzt und der Counter um eine Stelle auf den naechsten Tag-Namen in der Struktur weitergesetzt */ *flag = MGTH_UNSET; (*counter_fct)++; /* ueberpruefen, ob der Counter die Grenzen zur neachsten Kategorie erreicht hat */ check_counter(counter_fct, flag_sign); } static void check_counter(unsigned short *counter_check, char flag_sign_fct) { /* ist das Ende der aktuellen XML-Tag Kategorie erreicht, werden die Counter wieder auf den Anfang (0) zurueckgesetzt; das flag_sign zeigt an,um welchen counter es sich aktuell handelt */ if (*counter_check == MGTH_QUERY_SIZE && flag_sign_fct == 'q') { *counter_check = 0; } if (*counter_check == MGTH_HIT_SIZE && flag_sign_fct == 'h') { *counter_check = 0; } if (*counter_check == MGTH_HIT_TO_QUERY_SIZE && flag_sign_fct == 't') { *counter_check = 0; } } genometools-1.5.1/src/mgth/mg_xmlparser.h000066400000000000000000000022031211610345200204400ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MG_XMLPARSER_H #define MG_XMLPARSER_H #include "metagenomethreader.h" /* Funktion zum Aufruf des XML-Parsers Parameter: Zeiger auf ParseStruct-Struktur, Zeiger auf die XML-Datei, Env-Variable Returnwert: had_err */ int mg_xmlparser(ParseStruct *, GtFile *, GtError *); #endif genometools-1.5.1/src/skproto.c000066400000000000000000000020671211610345200165050ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2001 Stefan Kurtz Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/tooldriver.h" #include "tools/gt_skproto.h" int main(int argc, char *argv[]) { return gt_toolobjdriver(gt_skproto, argc, argv); } genometools-1.5.1/src/tools/000077500000000000000000000000001211610345200157735ustar00rootroot00000000000000genometools-1.5.1/src/tools/gt_bed_to_gff3.c000066400000000000000000000106651211610345200210020ustar00rootroot00000000000000/* Copyright (c) 2008-2009, 2011 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "extended/bed_parser.h" #include "extended/gff3_out_stream_api.h" #include "extended/bed_in_stream_api.h" #include "tools/gt_bed_to_gff3.h" typedef struct { GtStr *feature_type, *thick_feature_type, *block_type; GtOutputFileInfo *ofi; GtFile *outfp; } BEDToGFF3Arguments; static void *gt_bed_to_gff3_arguments_new(void) { BEDToGFF3Arguments *arguments = gt_calloc(1, sizeof *arguments); arguments->feature_type = gt_str_new(); arguments->thick_feature_type = gt_str_new(); arguments->block_type = gt_str_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_bed_to_gff3_arguments_delete(void *tool_arguments) { BEDToGFF3Arguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_str_delete(arguments->block_type); gt_str_delete(arguments->thick_feature_type); gt_str_delete(arguments->feature_type); gt_free(arguments); } static GtOptionParser* gt_bed_to_gff3_option_parser_new(void *tool_arguments) { BEDToGFF3Arguments *arguments = tool_arguments; GtOptionParser *op; GtOption *o; op = gt_option_parser_new("[BED_file]", "Parse BED file and convert it to GFF3."); o = gt_option_new_string("featuretype", "Set type of parsed BED features", arguments->feature_type, BED_FEATURE_TYPE); gt_option_parser_add_option(op, o); o = gt_option_new_string("thicktype", "Set type of parsed thick BED features", arguments->thick_feature_type, BED_THICK_FEATURE_TYPE); gt_option_parser_add_option(op, o); o = gt_option_new_string("blocktype", "Set type of parsed BED blocks", arguments->block_type, BED_BLOCK_TYPE); gt_option_parser_add_option(op, o); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_max_args(op, 1); return op; } static int gt_bed_to_gff3_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtNodeStream *bed_in_stream = NULL, *gff3_out_stream = NULL; BEDToGFF3Arguments *arguments = tool_arguments; int had_err; gt_error_check(err); /* create a BED input stream */ bed_in_stream = gt_bed_in_stream_new(argv[parsed_args]); gt_bed_in_stream_set_feature_type((GtBEDInStream*) bed_in_stream, gt_str_get(arguments->feature_type)); gt_bed_in_stream_set_thick_feature_type((GtBEDInStream*) bed_in_stream, gt_str_get(arguments ->thick_feature_type)); gt_bed_in_stream_set_block_type((GtBEDInStream*) bed_in_stream, gt_str_get(arguments->block_type)); /* create a GFF3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(bed_in_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(bed_in_stream); return had_err; } GtTool* gt_bed_to_gff3(void) { return gt_tool_new(gt_bed_to_gff3_arguments_new, gt_bed_to_gff3_arguments_delete, gt_bed_to_gff3_option_parser_new, NULL, gt_bed_to_gff3_runner); } genometools-1.5.1/src/tools/gt_bed_to_gff3.h000066400000000000000000000016411211610345200210010ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_BED_TO_GFF3_H #define GT_BED_TO_GFF3_H #include "core/tool_api.h" /* the BED to GFF3 tool */ GtTool* gt_bed_to_gff3(void); #endif genometools-1.5.1/src/tools/gt_cds.c000066400000000000000000000131241211610345200174030ustar00rootroot00000000000000/* Copyright (c) 2006-2011 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "extended/cds_stream_api.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/gtdatahelp.h" #include "extended/seqid2file.h" #include "tools/gt_cds.h" #define GT_CDS_SOURCE_TAG "gt cds" typedef struct { unsigned int minorflen; bool start_codon, final_stop_codon, generic_start_codons, verbose; GtSeqid2FileInfo *s2fi; GtOutputFileInfo *ofi; GtFile *outfp; } CDSArguments; static void* gt_cds_arguments_new(void) { CDSArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->s2fi = gt_seqid2file_info_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_cds_arguments_delete(void *tool_arguments) { CDSArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_seqid2file_info_delete(arguments->s2fi); gt_free(arguments); } static GtOptionParser* gt_cds_option_parser_new(void *tool_arguments) { CDSArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); op = gt_option_parser_new("[option ...] [GFF3_file]", "Add CDS (coding sequence) features to exon " "features given in GFF3 file."); /* -minorflen */ option = gt_option_new_uint_min("minorflen", "set the minimum length an open " "reading frame (ORF) must have to be added " "as a CDS feature (measured in amino acids)", &arguments->minorflen, 64, 1); gt_option_parser_add_option(op, option); /* -startcodon */ option = gt_option_new_bool("startcodon", "require than an ORF must begin " "with a start codon", &arguments->start_codon, false); gt_option_parser_add_option(op, option); /* -finalstopcodon */ option = gt_option_new_bool("finalstopcodon", "require that the final ORF " "must end with a stop codon", &arguments->final_stop_codon, false); gt_option_parser_add_option(op, option); /* -genericstartcodons */ option = gt_option_new_bool("genericstartcodons", "use generic start codons", &arguments->generic_start_codons, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -seqfile, -matchdesc, -usedesc and -regionmapping */ gt_seqid2file_register_options(op, arguments->s2fi); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); gt_option_parser_set_max_args(op, 1); return op; } static int gt_cds_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtNodeStream *gff3_in_stream, *cds_stream = NULL, *gff3_out_stream = NULL; CDSArguments *arguments = tool_arguments; GtRegionMapping *region_mapping; int had_err = 0; gt_error_check(err); gt_assert(arguments); /* create gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_sorted(argv[parsed_args]); if (arguments->verbose && arguments->outfp) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); /* create region mapping */ region_mapping = gt_seqid2file_region_mapping_new(arguments->s2fi, err); if (!region_mapping) had_err = -1; if (!had_err) { /* create CDS stream */ cds_stream = gt_cds_stream_new(gff3_in_stream, region_mapping, arguments->minorflen, GT_CDS_SOURCE_TAG, arguments->start_codon, arguments->final_stop_codon, arguments->generic_start_codons); /* create gff3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(cds_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); } /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(cds_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool* gt_cds(void) { return gt_tool_new(gt_cds_arguments_new, gt_cds_arguments_delete, gt_cds_option_parser_new, NULL, gt_cds_runner); } genometools-1.5.1/src/tools/gt_cds.h000066400000000000000000000017431211610345200174140ustar00rootroot00000000000000/* Copyright (c) 2006-2008 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_CDS_H #define GT_CDS_H #include "core/tool_api.h" /* the coding sequence (CDS) tool */ GtTool* gt_cds(void); #endif genometools-1.5.1/src/tools/gt_chain2dim.c000066400000000000000000000260511211610345200204730ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/option_api.h" #include "core/ma.h" #include "core/unused_api.h" #include "core/tool_api.h" #include "gt_chain2dim.h" static void *gt_chain2dim_arguments_new (void) { return gt_malloc (sizeof (GtChain2dimoptions)); } static void gt_chain2dim_arguments_delete (void *tool_arguments) { GtChain2dimoptions *arguments = tool_arguments; if (!arguments) { return; } gt_str_delete (arguments->matchfile); gt_str_array_delete (arguments->globalargs); gt_str_array_delete (arguments->localargs); gt_option_delete (arguments->refoptionmaxgap); gt_option_delete (arguments->refoptionweightfactor); gt_option_delete (arguments->refoptionglobal); gt_option_delete (arguments->refoptionlocal); gt_free (arguments); } static GtOptionParser *gt_chain2dim_option_parser_new (void *tool_arguments) { GtChain2dimoptions *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optionglobal, *optionlocal; gt_assert (arguments != NULL); arguments->matchfile = gt_str_new (); arguments->globalargs = gt_str_array_new(); arguments->localargs = gt_str_array_new(); op = gt_option_parser_new("[options] -m matchfile", "Chain pairwise matches."); gt_option_parser_set_mail_address(op, ""); option = gt_option_new_filename("m","Specify file containing the matches\n" "mandatory option", arguments->matchfile); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); optionglobal = gt_option_new_string_array("global", "perform global chaining\n" "- optional parameter gc switches\n" " on gap costs (according to L1-model)\n" "- optional parameter ov means\n" " that overlaps between matches are allowed\n" "- optional parameter all means\n" " that all optimal chains are processed", arguments->globalargs); gt_option_argument_is_optional(optionglobal); arguments->refoptionglobal = gt_option_ref (optionglobal); gt_option_parser_add_option(op, optionglobal); optionlocal = gt_option_new_string_array("local", "perform local chaining\n" "compute local chains (according to L1-model).\n" "- If no parameter is given, compute local chains with\n" " maximums score.\n" "- If parameter is given, this must be a positive number\n" " optionally followed by the character b or p.\n" "- If only the number, say k, is given, this is the " "minimum\n" " score of the chains output.\n" "- If a number is followed by character b, then output all\n" " chains with the largest k scores.\n" "- If a number is followed by character p, then output all\n" " chains with scores at most k percent away\n" " from the best score.", arguments->localargs); gt_option_argument_is_optional(optionlocal); gt_option_parser_add_option(op, optionlocal); arguments->refoptionlocal = gt_option_ref(optionlocal); gt_option_exclude(optionlocal,optionglobal); option = gt_option_new_double("wf","specify weight factor > 0.0 to obtain " "score of a fragment\nrequires one of " "the options\n-local const\n-global " "gc\n-global ov", &arguments->weightfactor,1.0); arguments->refoptionweightfactor = gt_option_ref (option); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("maxgap","specify maximal width of gap in chain", &arguments->maxgap,0); arguments->refoptionmaxgap = gt_option_ref(option); gt_option_parser_add_option(op, option); option = gt_option_new_bool("silent","do not output the chains but only " "report their lengths and scores", &arguments->silent,false); gt_option_parser_add_option(op, option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); return op; } static int gt_chain2dim_arguments_check (GT_UNUSED int rest_argc, void *tool_arguments, GtError * err) { GtChain2dimoptions *arguments = tool_arguments; const char *globalargs = NULL, *localargs = NULL; if (gt_option_is_set (arguments->refoptionmaxgap)) { if (arguments->maxgap == 0) { gt_error_set(err,"argument of option -maxgap must be positive integer"); return -1; } } if (gt_option_is_set (arguments->refoptionweightfactor)) { if (arguments->weightfactor <= 0.0) { gt_error_set(err,"argument of option -wf must be positive real value"); return -1; } } gt_assert(arguments->refoptionglobal != NULL); gt_assert(arguments->refoptionlocal != NULL); if (gt_option_is_set(arguments->refoptionglobal)) { unsigned long globalargsnum = gt_str_array_size(arguments->globalargs); if (globalargsnum > 1UL) { gt_error_set(err,"option -global can only have one optional argument"); return -1; } if (globalargsnum == 1UL) { globalargs = gt_str_array_get(arguments->globalargs,0); } } if (gt_option_is_set(arguments->refoptionlocal)) { unsigned long localargsnum = gt_str_array_size(arguments->localargs); if (localargsnum > 1UL) { gt_error_set(err,"option -local can only have one optional argument"); return -1; } if (localargsnum == 1UL) { localargs = gt_str_array_get(arguments->localargs,0); } } if (gt_option_is_set(arguments->refoptionweightfactor) && !gt_option_is_set(arguments->refoptionlocal) && globalargs == NULL) { gt_error_set(err, "option wf requires either option -local or option -global " "with argument %s or %s or %s", GT_CHAIN2DIM_GAPCOSTSWITCH, GT_CHAIN2DIM_OVERLAPSWITCH, GT_CHAIN2DIM_ALLSWITCH); return -1; } arguments->gtchainmode = gt_chain_chainmode_new(arguments->maxgap, gt_option_is_set(arguments->refoptionglobal), globalargs, gt_option_is_set(arguments->refoptionlocal), localargs, err); return (arguments->gtchainmode == NULL) ? -1 : 0; } typedef struct { unsigned long chaincounter; } Counter; static void gt_outputformatchaingeneric( bool silent, void *data, const GtChain2Dimmatchtable *matchtable, const GtChain2Dim *chain) { unsigned long idx, chainlength; Counter *counter = (Counter *) data; chainlength = gt_chain_chainlength(chain); printf("# chain %lu: length %lu score %ld\n", counter->chaincounter,chainlength,gt_chain_chainscore(chain)); if (!silent) { GtChain2Dimmatchvalues value; if (gt_chain_storedinreverseorder(chain)) { for (idx=chainlength; idx > 0; idx--) { gt_chain_extractchainelem(&value, matchtable, chain, idx - 1); gt_chain_printchainelem(stdout,&value); } } else { for (idx=0; idx < chainlength; idx++) { gt_chain_extractchainelem(&value, matchtable, chain, idx); gt_chain_printchainelem(stdout,&value); } } } counter->chaincounter++; } void gt_outputformatchainsilent(void *data, const GtChain2Dimmatchtable *matchtable, const GtChain2Dim *chain) { gt_outputformatchaingeneric(true,data,matchtable,chain); } void gt_outputformatchain(void *data, const GtChain2Dimmatchtable *matchtable, const GtChain2Dim *chain) { gt_outputformatchaingeneric(false,data,matchtable,chain); } static int gt_chain2dim_runner (GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError * err) { GtChain2dimoptions *arguments = tool_arguments; GtChain2Dimmatchtable *matchtable; bool haserr = false; GtLogger *logger = NULL; gt_error_check (err); gt_assert (arguments != NULL); gt_assert (parsed_args == argc); matchtable = gt_chain_analyzeopenformatfile(arguments->weightfactor, gt_str_get(arguments-> matchfile), err); if (matchtable == NULL) { haserr = true; } if (!haserr) { unsigned int presortdim = 1U; GtChain2Dim *chain; Counter counter; logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); gt_chain_possiblysortmatches(logger, matchtable, presortdim); chain = gt_chain_chain_new(); counter.chaincounter = 0; gt_chain_fastchaining(arguments->gtchainmode, chain, matchtable, true, presortdim, true, arguments->silent ? gt_outputformatchainsilent : gt_outputformatchain, &counter, logger); gt_chain_chain_delete(chain); } gt_chain_chainmode_delete(arguments->gtchainmode); gt_chain_matchtable_delete(matchtable); if (logger != NULL) { gt_logger_delete(logger); } return haserr ? -1 : 0; } GtTool *gt_chain2dim (void) { return gt_tool_new (gt_chain2dim_arguments_new, gt_chain2dim_arguments_delete, gt_chain2dim_option_parser_new, gt_chain2dim_arguments_check, gt_chain2dim_runner); } genometools-1.5.1/src/tools/gt_chain2dim.h000066400000000000000000000026431211610345200205010ustar00rootroot00000000000000/* Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_CHAIN2DIM_H #define GT_CHAIN2DIM_H #include #include "core/tool_api.h" #include "core/str_array_api.h" #include "core/option_api.h" #include "match/chain2dim.h" /* the chain2dim tool */ typedef struct { bool silent, verbose; double weightfactor; unsigned long maxgap; GtStr *matchfile; GtStrArray *globalargs, *localargs; GtOption *refoptionmaxgap, *refoptionweightfactor, *refoptionglobal, *refoptionlocal; GtChain2Dimmode *gtchainmode; } GtChain2dimoptions; GtTool* gt_chain2dim(void); #endif genometools-1.5.1/src/tools/gt_chseqids.c000066400000000000000000000104371211610345200204410ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/option_api.h" #include "core/output_file_api.h" #include "core/versionfunc.h" #include "extended/chseqids_stream.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/gtdatahelp.h" #include "extended/sort_stream_api.h" #include "tools/gt_chseqids.h" #define DEFAULT_JOINLENGTH 300 typedef struct { bool sort, verbose; GtFile *outfp; } ChseqidsArguments; static GtOPrval parse_options(int *parsed_args, ChseqidsArguments *arguments, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOutputFileInfo *ofi; GtOption *option; GtOPrval oprval; gt_error_check(err); /* init */ op = gt_option_parser_new("[option ...] mapping_file [GFF3_file]", "Change sequence ids by the mapping given in " "mapping_file."); ofi = gt_output_file_info_new(); /* -sort */ option = gt_option_new_bool("sort", "sort the GFF3 features after changing the " "sequence ids\n(memory consumption is " "proportional to the input file size)", &arguments->sort, false); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, ofi); /* parse options */ gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); gt_option_parser_set_min_max_args(op, 1, 2); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); /* free */ gt_output_file_info_delete(ofi); gt_option_parser_delete(op); return oprval; } int gt_chseqids(int argc, const char **argv, GtError *err) { GtNodeStream *gff3_in_stream, *chseqids_stream, *sort_stream = NULL, *gff3_out_stream = NULL; ChseqidsArguments arguments; GtStr *chseqids; int parsed_args, had_err = 0; gt_error_check(err); /* option parsing */ switch (parse_options(&parsed_args, &arguments, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: return 0; } /* create the streams */ gff3_in_stream = gt_gff3_in_stream_new_sorted(argv[parsed_args + 1]); if (arguments.verbose && arguments.outfp) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); chseqids = gt_str_new_cstr(argv[parsed_args]); chseqids_stream = gt_chseqids_stream_new(gff3_in_stream, chseqids, err); if (!chseqids_stream) had_err = -1; gt_str_delete(chseqids); if (!had_err) { if (arguments.sort) { sort_stream = gt_sort_stream_new(chseqids_stream); gff3_out_stream = gt_gff3_out_stream_new(sort_stream, arguments.outfp); } else { gff3_out_stream = gt_gff3_out_stream_new(chseqids_stream, arguments.outfp); } } /* pull the features through the stream and free them afterwards */ if (!had_err) had_err = gt_node_stream_pull(gff3_out_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(chseqids_stream); gt_node_stream_delete(sort_stream); gt_node_stream_delete(gff3_in_stream); gt_file_delete(arguments.outfp); return had_err; } genometools-1.5.1/src/tools/gt_chseqids.h000066400000000000000000000017621211610345200204470ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_CHSEQIDS_H #define GT_CHSEQIDS_H /* the change sequence ids (chseqids) tool */ int gt_chseqids(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_clean.c000066400000000000000000000054561211610345200177250ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/bioseq.h" #include "core/md5_tab.h" #include "core/option_api.h" #include "core/versionfunc.h" #include "core/xposix.h" #include "tools/gt_clean.h" static GtOPrval parse_options(int *parsed_args, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOPrval oprval; gt_error_check(err); op = gt_option_parser_new("", "Remove all files in the current directory which " "are automatically created by gt."); gt_option_parser_set_max_args(op, 0); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } static void remove_pattern_in_current_dir(const char *pattern) { char **files_to_remove; GtStr *path; glob_t g; path = gt_str_new_cstr("./*"); gt_str_append_cstr(path, pattern); gt_xglob(gt_str_get(path), GLOB_NOCHECK, NULL, &g); /* remove found files */ if (g.gl_pathc) { files_to_remove = g.gl_pathv; if (strcmp(*files_to_remove, gt_str_get(path))) { while (*files_to_remove) { gt_xunlink(*files_to_remove); files_to_remove++; } } } /* free */ globfree(&g); gt_str_delete(path); } int gt_clean(int argc, const char **argv, GtError *err) { int parsed_args; gt_error_check(err); /* option parsing */ switch (parse_options(&parsed_args, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: return 0; } gt_assert(parsed_args == 1); remove_pattern_in_current_dir(GT_ENCSEQFILESUFFIX); remove_pattern_in_current_dir(GT_SSPTABFILESUFFIX); remove_pattern_in_current_dir(GT_DESTABFILESUFFIX); remove_pattern_in_current_dir(GT_SDSTABFILESUFFIX); remove_pattern_in_current_dir(GT_OISTABFILESUFFIX); remove_pattern_in_current_dir(GT_MD5TABFILESUFFIX); return 0; } genometools-1.5.1/src/tools/gt_clean.h000066400000000000000000000017201211610345200177200ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_CLEAN_H #define GT_CLEAN_H /* the clean tool */ int gt_clean(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_compreads.c000066400000000000000000000074661211610345200206230ustar00rootroot00000000000000/* Copyright (c) 2011 Joachim Bonnet Copyright (c) 2012 Dirk Willrodt Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/cstr_array.h" #include "core/unused_api.h" #include "extended/toolbox.h" #include "tools/gt_compreads.h" #include "tools/gt_compreads_refcompress.h" #include "tools/gt_compreads_refdecompress.h" #include "tools/gt_compreads_compress.h" #include "tools/gt_compreads_decompress.h" static void* gt_compreads_arguments_new(void) { GtToolbox *compreads_toolbox = gt_toolbox_new(); gt_toolbox_add_tool(compreads_toolbox, "refcompress", gt_compreads_refcompress()); gt_toolbox_add_tool(compreads_toolbox, "refdecompress", gt_compreads_refdecompress()); gt_toolbox_add_tool(compreads_toolbox, "compress", gt_compreads_compress()); gt_toolbox_add_tool(compreads_toolbox, "decompress", gt_compreads_decompress()); return compreads_toolbox; } static void gt_compreads_arguments_delete(void *tool_arguments) { GtToolbox *compreads_toolbox = tool_arguments; if (!compreads_toolbox) return; gt_toolbox_delete(compreads_toolbox); } static GtOptionParser* gt_compreads_option_parser_new(void *tool_arguments) { GtToolbox *compreads_toolbox = tool_arguments; GtOptionParser *op; gt_assert(compreads_toolbox); op = gt_option_parser_new("[option ...] tool [argument ...]", "Call fastq file compression tool ."); gt_option_parser_set_comment_func(op, gt_toolbox_show, compreads_toolbox); gt_option_parser_set_min_args(op, 1U); return op; } static int gt_compreads_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtToolbox *compreads_toolbox = tool_arguments; GtToolfunc toolfunc; GtTool *tool = NULL; int had_err = 0; char **nargv = NULL; gt_error_check(err); gt_assert(compreads_toolbox); if (!gt_toolbox_has_tool(compreads_toolbox, argv[parsed_args])) { gt_error_set(err, "compreads tool '%s' not found; option -help lists " "possible tools", argv[parsed_args]); had_err = -1; } if (!had_err) { if (!(toolfunc = gt_toolbox_get(compreads_toolbox, argv[parsed_args]))) { tool = gt_toolbox_get_tool(compreads_toolbox, argv[parsed_args]); gt_assert(tool); } nargv = gt_cstr_array_prefix_first(argv + parsed_args, gt_error_get_progname(err)); gt_error_set_progname(err, nargv[0]); if (toolfunc != NULL) had_err = toolfunc(argc - parsed_args, (const char**) nargv, err); else had_err = gt_tool_run(tool, argc - parsed_args, (const char**) nargv, err); } gt_cstr_array_delete(nargv); return had_err; } GtTool* gt_compreads(void) { return gt_tool_new(gt_compreads_arguments_new, gt_compreads_arguments_delete, gt_compreads_option_parser_new, NULL, gt_compreads_runner); } genometools-1.5.1/src/tools/gt_compreads.h000066400000000000000000000020641211610345200206150ustar00rootroot00000000000000/* Copyright (c) 2011 Joachim Bonnet Copyright (c) 2012 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_COMPREADS_H #define GT_COMPREADS_H #include "core/tool_api.h" /* the compreads toolbox */ GtTool* gt_compreads(void); #endif genometools-1.5.1/src/tools/gt_compreads_compress.c000066400000000000000000000241421211610345200225240ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Joachim Bonnet Copyright (c) 2012 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/alphabet_api.h" #include "core/basename_api.h" #include "core/fa.h" #include "core/fileutils_api.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/safearith.h" #include "core/showtime.h" #include "core/splitter_api.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "extended/hcr.h" #include "extended/sampling.h" #include "tools/gt_compreads_compress.h" typedef struct { bool descs, pagewise, regular; GtStr *smap, *method, *name; GtStrArray *files; unsigned long srate; GtQualRange qrng; GtRange arg_range; } GtCsrHcrEncodeArguments; static void* gt_compreads_compress_arguments_new(void) { GtCsrHcrEncodeArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->smap = gt_str_new(); arguments->name = gt_str_new(); arguments->files = gt_str_array_new(); arguments->qrng.start = GT_UNDEF_UINT; arguments->qrng.end = GT_UNDEF_UINT; arguments->arg_range.start = GT_UNDEF_ULONG; arguments->arg_range.end = GT_UNDEF_ULONG; arguments->method = gt_str_new(); arguments->pagewise = false; arguments->regular = false; return arguments; } static void gt_compreads_compress_arguments_delete(void *tool_arguments) { GtCsrHcrEncodeArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->name); gt_str_array_delete(arguments->files); gt_str_delete(arguments->smap); gt_str_delete(arguments->method); gt_free(arguments); } static GtOptionParser* gt_compreads_compress_option_parser_new(void *tool_arguments) { GtCsrHcrEncodeArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; static const char *methods[] = { "page", "regular", "none" }; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] (-files file [...])", "Generates compact encoding for fastq data."); option = gt_option_new_bool("descs","encode descriptions", &arguments->descs, false); gt_option_parser_add_option(op, option); option = gt_option_new_filename_array("files", "File(s) containing reads.", arguments->files); gt_option_parser_add_option(op, option); option = gt_option_new_string("name", "specify base name for HCR to be" " generated. Only mandatory, if more than one" " file was given.", arguments->name, NULL); gt_option_parser_add_option(op, option); option = gt_option_new_string("smap", "file containing alphabet description." " If \"-smap\" is not set, dna alphabet is" " used.", arguments->smap, NULL); gt_option_parser_add_option(op, option); option = gt_option_new_range("qrange", "specify range of quality values." " All values smaller or equal to the lower bound" " will be converted to the lower bound. All" " values equal or larger than the upper bound" " will be converted to the upper bound.", &arguments->arg_range, NULL); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("srate", "sampling rate, set to sensible default" " depending on sampling method", &arguments->srate, GT_UNDEF_ULONG); gt_option_parser_add_option(op, option); option = gt_option_new_choice("stype", "type of sampling\n" "one of regular - page - none", arguments->method, "page", methods); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 0U, 0U); return op; } static int gt_compreads_compress_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError *err) { int had_err = 0; GtCsrHcrEncodeArguments *arguments = tool_arguments; GtSplitter *splitter = NULL; GtStr *buffer; gt_error_check(err); gt_assert(arguments); if (gt_str_length(arguments->name) == 0) { if (gt_str_array_size(arguments->files) > 1UL) { gt_error_set(err, "option \"-name\" needs to be specified if more" " than one file is given"); had_err = -1; } else { unsigned long i; char *basename; splitter = gt_splitter_new(); basename = gt_basename(gt_str_array_get(arguments->files, 0)); buffer = gt_str_new_cstr(basename); gt_splitter_split(splitter, gt_str_get(buffer), gt_str_length(buffer), '.'); for (i = 0; i < gt_splitter_size(splitter) - 1; i++) { gt_str_append_cstr(arguments->name, gt_splitter_get_token(splitter, i)); if (i < gt_splitter_size(splitter) - 2) gt_str_append_char(arguments->name, '.'); } gt_free(basename); gt_splitter_delete(splitter); gt_str_delete(buffer); } } if (!had_err) { char *sampling_type = gt_str_get(arguments->method); static const char *methods[] = { "page", "regular", "none" }; if (!strcmp(methods[0], sampling_type)) { arguments->pagewise = true; if (arguments->srate == GT_UNDEF_ULONG) arguments->srate = GT_SAMPLING_DEFAULT_PAGE_RATE; else if (arguments->srate == 0) { gt_error_set(err, "page sampling was chosen, but sampling rate was" " set to %lu! this seems wrong.", arguments->srate); had_err = -1; } } else if (!strcmp(methods[1], sampling_type)) { arguments->regular = true; if (arguments->srate == GT_UNDEF_ULONG) arguments->srate = GT_SAMPLING_DEFAULT_REGULAR_RATE; else if (arguments->srate == 0) { gt_error_set(err, "regular sampling was chosen, but sampling rate " " was set to %lu! this seems wrong.", arguments->srate); had_err = -1; } } else if (!strcmp(methods[2], sampling_type)) { if (arguments->srate == GT_UNDEF_ULONG) arguments->srate = 0; else if (arguments->srate != 0) { gt_error_set(err, "no sampling was chosen, but sampling rate was" " set to %lu! this seems wrong.", arguments->srate); had_err = -1; } } else { gt_error_set(err, "somethings wrong with the stype option"); had_err = -1; } } if (!had_err) { if (arguments->arg_range.start != GT_UNDEF_ULONG) { if (arguments->arg_range.start <= (unsigned long) UINT_MAX) { gt_safe_assign(arguments->qrng.start, arguments->arg_range.start); if (arguments->arg_range.end <= (unsigned long) UINT_MAX) gt_safe_assign(arguments->qrng.end, arguments->arg_range.end); else had_err = -1; } else had_err = -1; } if (had_err) gt_error_set(err, "Range for qualities: value to large! larger than %u", UINT_MAX); } return had_err; } static int gt_compreads_compress_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtCsrHcrEncodeArguments *arguments = tool_arguments; int had_err = 0; GtAlphabet *alpha = NULL; GtHcrEncoder *hcre = NULL; GtTimer *timer = NULL; gt_error_check(err); gt_assert(arguments); if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description("start"); gt_timer_start(timer); gt_assert(timer); } if (gt_str_length(arguments->smap) > 0) { alpha = gt_alphabet_new_from_file_no_suffix(gt_str_get(arguments->smap), err); if (!alpha) had_err = 1; } else { alpha = gt_alphabet_new_dna(); if (!alpha) had_err = 1; } if (!had_err) { if (timer != NULL) gt_timer_show_progress(timer, "encoding", stdout); hcre = gt_hcr_encoder_new(arguments->files, alpha, arguments->descs, arguments->qrng, timer, err); if (!hcre) had_err = 1; else { if (arguments->pagewise) gt_hcr_encoder_set_sampling_page(hcre); else if (arguments->regular) gt_hcr_encoder_set_sampling_regular(hcre); gt_hcr_encoder_set_sampling_rate(hcre, arguments->srate); if (gt_hcr_encoder_encode(hcre, gt_str_get(arguments->name), timer, err) != 0) had_err = 1; } gt_hcr_encoder_delete(hcre); } gt_alphabet_delete(alpha); if (timer != NULL) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } return had_err; } GtTool* gt_compreads_compress(void) { return gt_tool_new(gt_compreads_compress_arguments_new, gt_compreads_compress_arguments_delete, gt_compreads_compress_option_parser_new, gt_compreads_compress_arguments_check, gt_compreads_compress_runner); } genometools-1.5.1/src/tools/gt_compreads_compress.h000066400000000000000000000021301211610345200225220ustar00rootroot00000000000000/* Copyright (c) 2011 Joachim Bonnet Copyright (c) 2012 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_COMPREADS_COMPRESS_H #define GT_COMPREADS_COMPRESS_H #include "core/tool_api.h" /* the compreads_compress toolbox */ GtTool* gt_compreads_compress(void); #endif genometools-1.5.1/src/tools/gt_compreads_decompress.c000066400000000000000000000217321211610345200230370ustar00rootroot00000000000000/* Copyright (c) 2011-2012 Joachim Bonnet Copyright (c) 2012 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/alphabet_api.h" #include "core/basename_api.h" #include "core/fa.h" #include "core/fileutils_api.h" #include "core/log_api.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/range_api.h" #include "core/showtime.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "extended/hcr.h" #include "tools/gt_compreads_decompress.h" typedef struct { bool descs, verbose; unsigned long bench; GtStr *file, *smap, *alphabet, *name; GtRange rng; } GtCsrHcrDecodeArguments; static void* gt_compreads_decompress_arguments_new(void) { GtCsrHcrDecodeArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->file = gt_str_new(); arguments->smap = gt_str_new(); arguments->name = gt_str_new(); arguments->rng.start = GT_UNDEF_ULONG; arguments->rng.end = GT_UNDEF_ULONG; arguments->bench = 0; return arguments; } static void gt_compreads_decompress_arguments_delete(void *tool_arguments) { GtCsrHcrDecodeArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->file); gt_str_delete(arguments->name); gt_str_delete(arguments->smap); gt_free(arguments); } static GtOptionParser* gt_compreads_decompress_option_parser_new(void *tool_arguments) { GtCsrHcrDecodeArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] (-file file)", "Decodes a file of compressed reads."); option = gt_option_new_bool("v", "be verbose", &arguments->verbose, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("descs","enable description decoding", &arguments->descs, false); gt_option_parser_add_option(op, option); option = gt_option_new_string("file", "specify base name of files containing" " HCR.", arguments->file, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); option = gt_option_new_string("name", "specify base name for decoded hcr" " (suffix will be \".fastq\")", arguments->name, NULL); gt_option_parser_add_option(op, option); option = gt_option_new_string("smap", "specify file containing alphabet" "description (file must be an .al1 file)." " If \"-smap\" is not set, dna alphabet is" " used.", arguments->smap, NULL); gt_option_parser_add_option(op, option); option = gt_option_new_range("range", "decode multiple consecutive reads." " If range is not specified, the " " entire file will be decoded.", &arguments->rng, NULL); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("benchmark", "decode given number random reads " "and report the time to do this", &arguments->bench, 0); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 0U, 0U); return op; } static int gt_compreads_decompress_benchmark(GtHcrDecoder *hcrd, unsigned long amount, GtTimer *timer, GtError *err) { char qual[BUFSIZ] = {0}, seq[BUFSIZ] = {0}; int had_err = 0; unsigned long rand, max_rand = gt_hcr_decoder_num_of_reads(hcrd) - 1, count; GtStr *timer_comment = gt_str_new_cstr("extracting "); GtStr *desc = gt_str_new(); gt_str_append_ulong(timer_comment, amount); gt_str_append_cstr(timer_comment, " reads of "); gt_str_append_ulong(timer_comment, max_rand + 1); gt_str_append_cstr(timer_comment, "!"); if (timer == NULL) { timer = gt_timer_new_with_progress_description("extract random reads"); gt_timer_start(timer); } else { gt_timer_show_progress(timer, "extract random reads", stdout); } gt_log_log("%s",gt_str_get(timer_comment)); for (count = 0; count < amount; count++) { if (!had_err) { rand = gt_rand_max(max_rand); gt_log_log("get read: %lu", rand); had_err = gt_hcr_decoder_decode(hcrd, rand, seq, qual, desc, err); gt_log_log("%s",gt_str_get(desc)); gt_log_log("%s",seq); gt_log_log("%s",qual); } } gt_str_delete(timer_comment); gt_str_delete(desc); if (!gt_showtime_enabled()) gt_timer_delete(timer); return had_err; } static int gt_compreads_decompress_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtCsrHcrDecodeArguments *arguments = tool_arguments; int had_err = 0; GtAlphabet *alpha = NULL; GtHcrDecoder *hcrd = NULL; GtTimer *timer = NULL; unsigned long start, end; gt_error_check(err); gt_assert(arguments); if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description("start"); gt_timer_start(timer); gt_assert(timer); } if (gt_str_length(arguments->smap) > 0) { alpha = gt_alphabet_new_from_file_no_suffix(gt_str_get(arguments->smap), err); if (!alpha) had_err = -1; } else { alpha = gt_alphabet_new_dna(); if (!alpha) had_err = -1; } if (!had_err) { if (timer != NULL) gt_timer_show_progress(timer, "decoding", stdout); if (gt_str_length(arguments->name) == 0) { char *basenameptr; basenameptr = gt_basename(gt_str_get(arguments->file)); gt_str_set(arguments->name, basenameptr); gt_free(basenameptr); } hcrd = gt_hcr_decoder_new(gt_str_get(arguments->file), alpha, arguments->descs, timer, err); if (hcrd == NULL) had_err = -1; else { if (arguments->bench != 0) { had_err = gt_compreads_decompress_benchmark(hcrd, arguments->bench, timer, err); } else { if (arguments->rng.start != GT_UNDEF_ULONG && arguments->rng.end != GT_UNDEF_ULONG) { if (arguments->rng.start >= gt_hcr_decoder_num_of_reads(hcrd) || arguments->rng.end >= gt_hcr_decoder_num_of_reads(hcrd)) { gt_error_set(err, "range %lu-%lu includes a read number exceeding " "the total number of reads (%lu)", arguments->rng.start, arguments->rng.end, gt_hcr_decoder_num_of_reads(hcrd)); had_err = -1; } start = arguments->rng.start; end = arguments->rng.end; } else { start = 0; end = gt_hcr_decoder_num_of_reads(hcrd) - 1; } if (!had_err) { gt_log_log("filebasename: %s", gt_str_get(arguments->name)); if (gt_hcr_decoder_decode_range(hcrd, gt_str_get(arguments->name), start, end, timer, err) != 0) had_err = -1; } } } gt_hcr_decoder_delete(hcrd); } gt_alphabet_delete(alpha); if (timer != NULL) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } if (had_err) gt_assert(gt_error_is_set(err)); return had_err; } GtTool* gt_compreads_decompress(void) { return gt_tool_new(gt_compreads_decompress_arguments_new, gt_compreads_decompress_arguments_delete, gt_compreads_decompress_option_parser_new, NULL, gt_compreads_decompress_runner); } genometools-1.5.1/src/tools/gt_compreads_decompress.h000066400000000000000000000021401211610345200230340ustar00rootroot00000000000000/* Copyright (c) 2011 Joachim Bonnet Copyright (c) 2012 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_COMPREADS_DECOMPRESS_H #define GT_COMPREADS_DECOMPRESS_H #include "core/tool_api.h" /* the compreads_decompress toolbox */ GtTool* gt_compreads_decompress(void); #endif genometools-1.5.1/src/tools/gt_compreads_refcompress.c000066400000000000000000000201771211610345200232250ustar00rootroot00000000000000/* Copyright (c) 2011 Joachim Bonnet Copyright (c) 2012 Dirk Willrodt Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/alphabet_api.h" #include "core/basename_api.h" #include "core/encseq_api.h" #include "core/fa.h" #include "core/fileutils_api.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/range_api.h" #include "core/showtime.h" #include "core/splitter_api.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "extended/rcr.h" #include "tools/gt_compreads_refcompress.h" typedef struct { bool verbose, vquals, mquals, quals, ureads, descs; GtStr *name, *ref, *align; unsigned long srate; GtRange qrng; } GtCsrRcrEncodeArguments; static void* gt_compreads_refcompress_arguments_new(void) { GtCsrRcrEncodeArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->name = gt_str_new(); arguments->ref = gt_str_new(); arguments->align = gt_str_new(); arguments->qrng.start = GT_UNDEF_ULONG; arguments->qrng.end = GT_UNDEF_ULONG; return arguments; } static void gt_compreads_refcompress_arguments_delete(void *tool_arguments) { GtCsrRcrEncodeArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->name); gt_str_delete(arguments->ref); gt_str_delete(arguments->align); gt_free(arguments); } static GtOptionParser* gt_compreads_refcompress_option_parser_new(void *tool_arguments) { GtCsrRcrEncodeArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *option1; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] (-bam file -ref file)", "Generates compact encoding for fastq data using" " Reference Compressed Reads (RCR)."); option = gt_option_new_bool("v", "be verbose", &arguments->verbose, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("mquals", "store mapping quality for each read", &arguments->mquals, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("quals", "store all quality values for each read," " this implies enabling of option" " \"vquals\"", &arguments->quals, false); option1 = gt_option_new_bool("vquals", "store quality values of read" " positions having variations compared to" " reference", &arguments->vquals, false); gt_option_exclude(option, option1); gt_option_parser_add_option(op, option); gt_option_parser_add_option(op, option1); option = gt_option_new_bool("descs", "store read name for each read", &arguments->descs, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("ureads", "store unmapped reads in a separated" " fastq file (base name will be the value given" " in name and suffix will be" " \" _unmapped.fastq\"", &arguments->ureads, false); gt_option_parser_add_option(op, option); option = gt_option_new_string("ref", "Index file (generated by the gt encseq" " tool) for reference genome.", arguments->ref, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); option = gt_option_new_string("bam", "File containing alignment of reads to" " genome (sorted \".bam\" file).", arguments->align, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); option = gt_option_new_string("name", "specify base name for RCR to be" " generated. If not set, base name will be set" " to base name of value given for option" " \"bam\"", arguments->name, NULL); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 0U, 0U); return op; } static int gt_compreads_refcompress_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtCsrRcrEncodeArguments *arguments = tool_arguments; int had_err = 0; GtTimer *timer = NULL; GtEncseq *encseq = NULL; GtRcrEncoder *rcre = NULL; GtEncseqLoader *el = NULL; GtSplitter *splitter = NULL; GtStr *buffer; unsigned long i; gt_error_check(err); gt_assert(arguments); if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description("start"); gt_timer_start(timer); gt_assert(timer); } if (!had_err) { if (timer != NULL) gt_timer_show_progress(timer, "encoding", stdout); if (gt_str_length(arguments->name) == 0) { splitter = gt_splitter_new(); buffer = gt_str_clone(arguments->align); gt_splitter_split(splitter, gt_str_get(buffer), gt_str_length(buffer), '.'); for (i = 0; i < gt_splitter_size(splitter) - 1; i++) { gt_str_append_cstr(arguments->name, gt_splitter_get_token(splitter, i)); if (i < gt_splitter_size(splitter) - 2) gt_str_append_char(arguments->name, '.'); } gt_splitter_delete(splitter); gt_str_delete(buffer); } el = gt_encseq_loader_new(); gt_encseq_loader_enable_autosupport(el); gt_encseq_loader_require_description_support(el); encseq = gt_encseq_loader_load(el, gt_str_get(arguments->ref), err); gt_encseq_loader_delete(el); if (!encseq) { gt_error_set(err, "could not load GtEncseq %s", gt_str_get(arguments->ref)); had_err = -1; } if (!had_err) { if (!gt_alphabet_is_dna(gt_encseq_alphabet(encseq))) { gt_error_set(err, "alphabet in %s has to be DNA", gt_str_get(arguments->ref)); had_err = -1; } if (!had_err) { rcre = gt_rcr_encoder_new(encseq, gt_str_get(arguments->align), arguments->vquals, arguments->mquals, arguments->quals, arguments->ureads, arguments->descs, timer, err); if (!rcre) had_err = -1; else { if (arguments->verbose) gt_rcr_encoder_enable_verbosity(rcre); had_err = gt_rcr_encoder_encode(rcre, gt_str_get(arguments->name), timer, err); } gt_rcr_encoder_delete(rcre); } } gt_encseq_delete(encseq); } if (timer != NULL) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } return had_err; } GtTool* gt_compreads_refcompress(void) { return gt_tool_new(gt_compreads_refcompress_arguments_new, gt_compreads_refcompress_arguments_delete, gt_compreads_refcompress_option_parser_new, NULL, gt_compreads_refcompress_runner); } genometools-1.5.1/src/tools/gt_compreads_refcompress.h000066400000000000000000000021441211610345200232240ustar00rootroot00000000000000/* Copyright (c) 2011 Joachim Bonnet Copyright (c) 2012 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_COMPREADS_REFCOMPRESS_H #define GT_COMPREADS_REFCOMPRESS_H #include "core/tool_api.h" /* the compreads_refcompress toolbox */ GtTool* gt_compreads_refcompress(void); #endif genometools-1.5.1/src/tools/gt_compreads_refdecompress.c000066400000000000000000000136061211610345200235350ustar00rootroot00000000000000/* Copyright (c) 2011 Joachim Bonnet Copyright (c) 2012 Dirk Willrodt Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/alphabet_api.h" #include "core/basename_api.h" #include "core/fa.h" #include "core/fileutils_api.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/range_api.h" #include "core/showtime.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "extended/rcr.h" #include "tools/gt_compreads_refdecompress.h" typedef struct { GtStr *file, *ref, *name; bool verbose, qnames; } GtCsrRcrDecodeArguments; static void* gt_compreads_refdecompress_arguments_new(void) { GtCsrRcrDecodeArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->file = gt_str_new(); arguments->ref = gt_str_new(); arguments->name = gt_str_new(); return arguments; } static void gt_compreads_refdecompress_arguments_delete(void *tool_arguments) { GtCsrRcrDecodeArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->file); gt_str_delete(arguments->name); gt_str_delete(arguments->ref); gt_free(arguments); } static GtOptionParser* gt_compreads_refdecompress_option_parser_new( void *tool_arguments) { GtCsrRcrDecodeArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] (-file file)", "Decodes a given RCR (Reference Compressed Reads)."); option = gt_option_new_bool("v", "be verbose", &arguments->verbose, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("qnames", "decode read names, default is " "to just number them", &arguments->qnames, false); gt_option_parser_add_option(op, option); option = gt_option_new_string("ref", "Index file (generated by the gt encseq" " tool) for reference genome.", arguments->ref, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); option = gt_option_new_string("rcr", "specify base name of file containing" " RCR.", arguments->file, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); option = gt_option_new_string("name", "specify base name for decoded RCR" " (suffix will be \".rcr.decoded\")", arguments->name, NULL); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 0U, 0U); return op; } static int gt_compreads_refdecompress_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtCsrRcrDecodeArguments *arguments = tool_arguments; int had_err = 0; GtRcrDecoder *rcrd = NULL; GtTimer *timer = NULL; GtEncseq *encseq = NULL; GtEncseqLoader *el = NULL; gt_error_check(err); gt_assert(arguments); if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description("start"); gt_timer_start(timer); gt_assert(timer); } if (gt_str_length(arguments->name) == 0) { char *basename = gt_basename(gt_str_get(arguments->file)); gt_str_set(arguments->name, basename); gt_free(basename); } if (timer != NULL) gt_timer_show_progress(timer, "load encseq", stdout); el = gt_encseq_loader_new(); gt_encseq_loader_enable_autosupport(el); gt_encseq_loader_require_description_support(el); encseq = gt_encseq_loader_load(el, gt_str_get(arguments->ref), err); gt_encseq_loader_delete(el); if (!encseq) { gt_error_set(err, "Could not load GtEncseq %s", gt_str_get(arguments->ref)); had_err = -1; } if (!had_err) { if (!gt_alphabet_is_dna(gt_encseq_alphabet(encseq))) { gt_error_set(err, "Alphabet in %s has to be DNA", gt_str_get(arguments->ref)); had_err = -1; } } if (!had_err) { rcrd = gt_rcr_decoder_new(gt_str_get(arguments->file), encseq, timer, err); if (rcrd == NULL) had_err = -1; } if (!had_err && arguments->qnames) had_err = gt_rcr_decoder_enable_description_support(rcrd, err); if (!had_err) had_err = gt_rcr_decoder_decode(rcrd, gt_str_get(arguments->name), timer, err); if (timer != NULL) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } gt_rcr_decoder_delete(rcrd); gt_encseq_delete(encseq); return had_err; } GtTool* gt_compreads_refdecompress(void) { return gt_tool_new(gt_compreads_refdecompress_arguments_new, gt_compreads_refdecompress_arguments_delete, gt_compreads_refdecompress_option_parser_new, NULL, gt_compreads_refdecompress_runner); } genometools-1.5.1/src/tools/gt_compreads_refdecompress.h000066400000000000000000000021541211610345200235360ustar00rootroot00000000000000/* Copyright (c) 2011 Joachim Bonnet Copyright (c) 2012 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_COMPREADS_REFDECOMPRESS_H #define GT_COMPREADS_REFDECOMPRESS_H #include "core/tool_api.h" /* the compreads_refdecompress toolbox */ GtTool* gt_compreads_refdecompress(void); #endif genometools-1.5.1/src/tools/gt_congruence.c000066400000000000000000000203571211610345200207700ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/cstr_array.h" #include "core/error.h" #include "core/logger.h" #include "core/ma_api.h" #include "core/option_api.h" #include "core/str.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "extended/toolbox.h" #include "match/cgr_spacedseed.h" #include "tools/gt_congruence.h" typedef struct { bool withesa, docompare, verbose; GtStr *str_inputindex; GtStrArray *queryfilenames; GtOption *refoptionesaindex, *refoptionpckindex; } Cge_spacedseed_options; static void *gt_cge_spacedseed_arguments_new(void) { Cge_spacedseed_options *arguments = gt_malloc(sizeof (Cge_spacedseed_options)); arguments->str_inputindex = gt_str_new(); arguments->queryfilenames = gt_str_array_new(); return arguments; } static void gt_cge_spacedseed_arguments_delete(void *tool_arguments) { Cge_spacedseed_options *arguments = tool_arguments; if (!arguments) { return; } gt_str_delete(arguments->str_inputindex); gt_str_array_delete(arguments->queryfilenames); gt_option_delete(arguments->refoptionpckindex); gt_option_delete(arguments->refoptionesaindex); gt_free(arguments); } static GtOptionParser *gt_cge_spacedseed_option_parser_new(void *tool_arguments) { GtOptionParser *op; GtOption *option, *optionesaindex, *optionpckindex; Cge_spacedseed_options *arguments = tool_arguments; op = gt_option_parser_new("[options]", "Match spaced seeds."); gt_option_parser_set_mail_address(op,""); optionesaindex = gt_option_new_string("esa", "Specify index (enhanced suffix array)", arguments->str_inputindex, NULL); gt_option_parser_add_option(op, optionesaindex); arguments->refoptionesaindex = gt_option_ref(optionesaindex); optionpckindex = gt_option_new_string("pck", "Specify index (packed index)", arguments->str_inputindex, NULL); gt_option_parser_add_option(op, optionpckindex); arguments->refoptionpckindex = gt_option_ref(optionpckindex); gt_option_exclude(optionesaindex,optionpckindex); gt_option_is_mandatory_either(optionesaindex,optionpckindex); option = gt_option_new_filename_array("q", "Specify files containing the " "query sequences", arguments->queryfilenames); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); option = gt_option_new_bool("cmp","compare results of offline and online " "searches",&arguments->docompare,false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); return op; } static int gt_cge_spacedseed_arguments_check(int rest_argc, void *tool_arguments, GtError *err) { Cge_spacedseed_options *arguments = tool_arguments; if (gt_str_length(arguments->str_inputindex) == 0) { gt_error_set(err,"missing indexname"); return -1; } if (gt_option_is_set(arguments->refoptionesaindex)) { arguments->withesa = true; } else { gt_assert(gt_option_is_set(arguments->refoptionpckindex)); arguments->withesa = false; } if (rest_argc != 0) { gt_error_set(err,"superfluous file arguments"); return -1; } return 0; } static int gt_cge_spacedseed_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { Cge_spacedseed_options *arguments = tool_arguments; GtLogger *logger = NULL; bool haserr = false; gt_assert(parsed_args == argc); logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); if (arguments->verbose) { unsigned long idx; printf("# %sindex=%s\n",arguments->withesa ? "esa" : "pck", gt_str_get(arguments->str_inputindex)); for (idx = 0; idx < gt_str_array_size(arguments->queryfilenames); idx++) { printf("# queryfile=%s\n", gt_str_array_get(arguments->queryfilenames,idx)); } } if (gt_matchspacedseed(arguments->withesa, arguments->docompare, gt_str_get(arguments->str_inputindex), arguments->queryfilenames, arguments->verbose, err) != 0) { haserr = true; } gt_logger_delete(logger); return haserr ? - 1 : 0; } static GtTool* gt_cge_spacedseed(void) { return gt_tool_new(gt_cge_spacedseed_arguments_new, gt_cge_spacedseed_arguments_delete, gt_cge_spacedseed_option_parser_new, gt_cge_spacedseed_arguments_check, gt_cge_spacedseed_runner); } static void *gt_cge_arguments_new(void) { GtToolbox *cge_toolbox = gt_toolbox_new(); gt_toolbox_add_tool(cge_toolbox, "spacedseed", gt_cge_spacedseed()); return cge_toolbox; } static void gt_cge_arguments_delete(void *tool_arguments) { GtToolbox *index_toolbox = tool_arguments; if (!index_toolbox) return; gt_toolbox_delete(index_toolbox); } static GtOptionParser* gt_cge_option_parser_new(void *tool_arguments) { GtToolbox *index_toolbox = tool_arguments; GtOptionParser *op; gt_assert(index_toolbox != NULL); op = gt_option_parser_new( "[option ...] congruence_tool [argument ...]", "Call congruence tool with name congruence_tool and pass " "argument(s) to it."); gt_option_parser_set_comment_func(op, gt_toolbox_show, index_toolbox); gt_option_parser_set_min_args(op, 1U); gt_option_parser_refer_to_manual(op); return op; } static int gt_cge_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtToolbox *index_toolbox = tool_arguments; GtToolfunc toolfunc; GtTool *tool = NULL; char **nargv = NULL; int had_err = 0; gt_error_check(err); gt_assert(index_toolbox != NULL); /* determine tool */ if (!gt_toolbox_has_tool(index_toolbox, argv[parsed_args])) { gt_error_set(err, "congruence tool '%s' not found; option -help lists " "possible tools", argv[parsed_args]); had_err = -1; } /* call sub-tool */ if (!had_err) { if (!(toolfunc = gt_toolbox_get(index_toolbox, argv[parsed_args]))) { tool = gt_toolbox_get_tool(index_toolbox, argv[parsed_args]); gt_assert(tool != NULL); } nargv = gt_cstr_array_prefix_first(argv + parsed_args, gt_error_get_progname(err)); gt_error_set_progname(err, nargv[0]); if (toolfunc != NULL) had_err = toolfunc(argc - parsed_args, (const char**) nargv, err); else had_err = gt_tool_run(tool, argc - parsed_args, (const char**) nargv, err); } gt_cstr_array_delete(nargv); return had_err; } GtTool* gt_congruence(void) { return gt_tool_new(gt_cge_arguments_new, gt_cge_arguments_delete, gt_cge_option_parser_new, NULL, gt_cge_runner); } genometools-1.5.1/src/tools/gt_congruence.h000066400000000000000000000017071211610345200207730ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_CONGRUENCE_H #define GT_CONGRUENCE_H #include "core/tool_api.h" GtTool* gt_congruence(void); #endif genometools-1.5.1/src/tools/gt_consensus_sa.c000066400000000000000000000107161211610345200213410ustar00rootroot00000000000000/* Copyright (c) 2005-2008 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/fptr_api.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "extended/consensus_sa.h" #include "extended/sspliced_alignment.h" #include "extended/sspliced_alignment_parsing.h" #include "tools/gt_consensus_sa.h" static GtRange get_genomic_range(const void *sa) { GtSSplicedAlignment *alignment = *(GtSSplicedAlignment**) sa; gt_assert(alignment); return gt_sspliced_alignment_genomic_range(alignment); } static GtStrand get_strand(const void *sa) { GtSSplicedAlignment *alignment = *(GtSSplicedAlignment**) sa; if (gt_sspliced_alignment_is_forward(alignment)) return GT_STRAND_FORWARD; return GT_STRAND_REVERSE; } static void get_exons(GtArray *exon_ranges, const void *sa) { GtSSplicedAlignment *alignment = *(GtSSplicedAlignment**) sa; GtRange exon; unsigned long i; gt_assert(alignment); for (i = 0; i < gt_sspliced_alignment_num_of_exons(alignment); i++) { exon = gt_sspliced_alignment_get_exon(alignment, i); gt_array_add(exon_ranges, exon); } } static void process_splice_form(GtArray *spliced_alignments_in_form, GT_UNUSED const void *set_of_sas, GT_UNUSED unsigned long number_of_sas, GT_UNUSED size_t size_of_sa, GT_UNUSED void *userdata) { unsigned long i; printf("contains ["); for (i = 0; i < gt_array_size(spliced_alignments_in_form); i++) { if (i) gt_xputchar(','); printf("%lu", *((unsigned long*) gt_array_get(spliced_alignments_in_form, i))); } printf("]\n"); } static GtOptionParser* gt_consensus_sa_option_parser_new(GT_UNUSED void *tool_arguments) { GtOptionParser *op; op = gt_option_parser_new("spliced_alignment_file", "Read file containing " "spliced alingments, compute consensus spliced " "alignments,\nand print them to stdout."); gt_option_parser_set_min_max_args(op, 1, 1); return op; } static int gt_consensus_sa_runner(GT_UNUSED int argc, const char **argv, int parsed_args, GT_UNUSED void *tool_arguments, GtError *err) { GtArray *spliced_alignments; GtSSplicedAlignment *sa; unsigned long i; int had_err = 0; gt_error_check(err); /* parse input file and store resuilts in the spliced alignment array */ spliced_alignments = gt_array_new(sizeof (GtSSplicedAlignment*)); had_err = gt_sspliced_alignment_parse(spliced_alignments, argv[parsed_args], err); if (!had_err) { /* sort spliced alignments */ qsort(gt_array_get_space(spliced_alignments), gt_array_size(spliced_alignments), gt_array_elem_size(spliced_alignments), (GtCompare) gt_sspliced_alignment_compare_ptr); /* compute the consensus spliced alignments */ gt_consensus_sa(gt_array_get_space(spliced_alignments), gt_array_size(spliced_alignments), gt_array_elem_size(spliced_alignments), get_genomic_range, get_strand, get_exons, process_splice_form, NULL); } /* free */ for (i = 0; i < gt_array_size(spliced_alignments); i++) { sa = *(GtSSplicedAlignment**) gt_array_get(spliced_alignments, i); gt_sspliced_alignment_delete(sa); } gt_array_delete(spliced_alignments); return had_err; } GtTool* gt_consensus_sa_tool(void) { return gt_tool_new(NULL, NULL, gt_consensus_sa_option_parser_new, NULL, gt_consensus_sa_runner); } genometools-1.5.1/src/tools/gt_consensus_sa.h000066400000000000000000000020301211610345200213340ustar00rootroot00000000000000/* Copyright (c) 2005-2008 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_CONSENSUS_SA_H #define GT_CONSENSUS_SA_H #include "core/tool_api.h" /* the exercise consensus spliced alignment (csa) tool */ GtTool* gt_consensus_sa_tool(void); #endif genometools-1.5.1/src/tools/gt_convertseq.c000066400000000000000000000204251211610345200210250ustar00rootroot00000000000000/* Copyright (c) 2009 Sascha Steinbiss Copyright (c) 2012 Dirk Willrodt Copyright (c) 2009-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #else #ifndef GT_ISUPPER_DEFINED #define GT_ISUPPER_DEFINED int isupper(int c); #endif #endif #include #include "core/fileutils_api.h" #include "core/filelengthvalues.h" #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/sequence_buffer.h" #include "core/seq_iterator_sequence_buffer.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "core/progressbar.h" #include "extended/reverse_api.h" #include "tools/gt_convertseq.h" typedef struct { bool reduce_wc_dna, reduce_wc_prot, revcomp, showflv, showseq, verbose; unsigned long fastawidth; GtOutputFileInfo *ofi; GtFile *outfp; } ConvertseqOptions; static GtOPrval parse_options(ConvertseqOptions *opts, int *parsed_args, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOption *optionverbose, *o; GtOPrval oprval; gt_error_check(err); op = gt_option_parser_new("[options] file [...]", "Parse and convert sequence file formats."); optionverbose = gt_option_new_bool("v","be verbose", &opts->verbose, false); gt_option_parser_add_option(op, optionverbose); optionverbose = gt_option_new_bool("r","reverse complement sequences", &opts->revcomp, false); gt_option_parser_add_option(op, optionverbose); o = gt_option_new_bool("showfilelengthvalues","show filelengths", &opts->showflv, false); gt_option_parser_add_option(op, o); o = gt_option_new_bool("noseq","do not show sequences", &opts->showseq, false); gt_option_parser_add_option(op, o); o = gt_option_new_ulong("fastawidth","FASTA output line width", &opts->fastawidth, 60UL); gt_option_parser_add_option(op, o); o = gt_option_new_bool("contractdnawc", "replace stretches of DNA wildcards " "with a single 'N'", &opts->reduce_wc_dna, false); gt_option_parser_add_option(op, o); o = gt_option_new_bool("contractproteinwc", "replace stretches of protein " "wildcards with a single 'X'", &opts->reduce_wc_prot, false); gt_option_parser_add_option(op, o); gt_output_file_register_options(op, &opts->outfp, opts->ofi); gt_option_parser_set_min_args(op, 1U); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } int gt_convertseq(int argc, const char **argv, GtError *err) { GtStrArray *files; const GtUchar *sequence; char *desc; unsigned long len, j; int i, parsed_args, had_err = 0; off_t totalsize; ConvertseqOptions opts; GtFilelengthvalues *flv; GtSeqIterator *seqit; GtSequenceBuffer *sb = NULL; opts.ofi = gt_output_file_info_new(); opts.outfp = NULL; gt_error_check(err); /* option parsing */ switch (parse_options(&opts,&parsed_args, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: gt_file_delete(opts.outfp); gt_output_file_info_delete(opts.ofi); return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: gt_file_delete(opts.outfp); gt_output_file_info_delete(opts.ofi); return 0; } files = gt_str_array_new(); for (i = parsed_args; i < argc; i++) { gt_str_array_add_cstr(files, argv[i]); } totalsize = gt_files_estimate_total_size(files); flv = gt_calloc((size_t) gt_str_array_size(files), sizeof (GtFilelengthvalues)); sb = gt_sequence_buffer_new_guess_type(files, err); if (!sb) { had_err = -1; } if (!had_err) { gt_sequence_buffer_set_filelengthtab(sb, flv); /* read input using seqiterator */ seqit = gt_seq_iterator_sequence_buffer_new_with_buffer(sb); if (opts.verbose) { gt_progressbar_start(gt_seq_iterator_getcurrentcounter(seqit, (unsigned long long) totalsize), (unsigned long long) totalsize); } while (true) { GtUchar *seq = NULL; desc = NULL; i = 0; j = 0UL; had_err = gt_seq_iterator_next(seqit, &sequence, &len, &desc, err); if (had_err != 1) break; if (opts.revcomp) { GtUchar *newseq = gt_calloc((size_t) len+1, sizeof (GtUchar)); memcpy(newseq, sequence, (size_t) len*sizeof (GtUchar)); had_err = gt_reverse_complement((char*) newseq, len, err); if (had_err) break; seq = newseq; } else seq = (GtUchar*) sequence; if (!opts.showseq) { bool in_wildcard = false; gt_file_xprintf(opts.outfp, ">%s\n", desc); for (i = 0; (unsigned long) i < len; i++) { if (opts.reduce_wc_dna) { switch (seq[i]) { case 'a': case 'A': case 'c': case 'C': case 'g': case 'G': case 't': case 'u': case 'T': case 'U': in_wildcard = false; gt_file_xfputc((int) seq[i], opts.outfp); j++; break; default: if (!in_wildcard) { in_wildcard = true; if (isupper((int) seq[i])) gt_file_xfputc((int) 'N', opts.outfp); else gt_file_xfputc((int) 'n', opts.outfp); j++; } } } else if (opts.reduce_wc_prot) { switch (seq[i]) { case 'X': case 'B': case 'Z': if (!in_wildcard) { in_wildcard = true; gt_file_xfputc((int) 'N', opts.outfp); j++; } break; case 'x': case 'b': case 'z': if (!in_wildcard) { in_wildcard = true; gt_file_xfputc((int) 'n', opts.outfp); j++; } break; default: in_wildcard = false; gt_file_xfputc((int) seq[i], opts.outfp); j++; } } else { gt_file_xfputc((int) seq[i], opts.outfp); j++; } if ((j % opts.fastawidth) == 0) { j = 0; gt_file_xprintf(opts.outfp, "\n"); } } gt_file_xprintf(opts.outfp, "\n"); } if (opts.revcomp) { gt_free(seq); } } if (opts.showflv) { for (j=0;j Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_CONVERTSEQ_H #define GT_CONVERTSEQ_H /* the *-to-FASTA conversion tool */ int gt_convertseq(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_csa.c000066400000000000000000000075251211610345200174100ustar00rootroot00000000000000/* Copyright (c) 2005-2011 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "extended/csa_stream_api.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/gtdatahelp.h" #include "tools/gt_csa.h" typedef struct { bool verbose; unsigned long join_length; GtOutputFileInfo *ofi; GtFile *outfp; } CSAArguments; static void* gt_csa_arguments_new(void) { CSAArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_csa_arguments_delete(void *tool_arguments) { CSAArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_csa_option_parser_new(void *tool_arguments) { CSAArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [GFF3_file]", "Transform spliced alignments from GFF3 file into " "consensus spliced alignments."); /* -join-length */ option = gt_option_new_ulong("join-length", "set join length for the spliced " "alignment clustering", &arguments->join_length, GT_DEFAULT_JOIN_LENGTH); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); gt_option_parser_set_max_args(op, 1); return op; } static int gt_csa_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtNodeStream *gff3_in_stream, *csa_stream, *gff3_out_stream; CSAArguments *arguments = tool_arguments; int had_err; gt_error_check(err); gt_assert(arguments); /* create the streams */ gff3_in_stream = gt_gff3_in_stream_new_sorted(argv[parsed_args]); if (arguments->verbose && arguments->outfp) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); csa_stream = gt_csa_stream_new(gff3_in_stream, arguments->join_length); gff3_out_stream = gt_gff3_out_stream_new(csa_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(csa_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool* gt_csa(void) { return gt_tool_new(gt_csa_arguments_new, gt_csa_arguments_delete, gt_csa_option_parser_new, NULL, gt_csa_runner); } genometools-1.5.1/src/tools/gt_csa.h000066400000000000000000000017571211610345200174160ustar00rootroot00000000000000/* Copyright (c) 2005-2008 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_CSA_H #define GT_CSA_H #include "core/tool_api.h" /* the consensus spliced alignment (csa) tool */ GtTool* gt_csa(void); #endif genometools-1.5.1/src/tools/gt_dev.c000066400000000000000000000122401211610345200174060ustar00rootroot00000000000000/* Copyright (c) 2007-2010 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/cstr_array.h" #include "core/option_api.h" #include "core/versionfunc.h" #include "extended/toolbox.h" #include "gth/gt_gthmkbssmfiles.h" #include "tools/gt_consensus_sa.h" #include "tools/gt_dev.h" #include "tools/gt_extracttarget.h" #include "tools/gt_gdiffcalc.h" #include "tools/gt_guessprot.h" #include "tools/gt_idxlocali.h" #include "tools/gt_magicmatch.h" #include "tools/gt_mergeesa.h" #include "tools/gt_paircmp.h" #include "tools/gt_patternmatch.h" #include "tools/gt_readreads.h" #include "tools/gt_regioncov.h" #include "tools/gt_sain.h" #include "tools/gt_sam_interface.h" #include "tools/gt_seqcorrect.h" #include "tools/gt_seqlensort.h" #include "tools/gt_sfxmap.h" #include "tools/gt_skproto.h" #include "tools/gt_sortbench.h" #include "tools/gt_trieins.h" static void* gt_dev_arguments_new(void) { GtToolbox *dev_toolbox = gt_toolbox_new(); /* add development tools here with a function call like this: gt_toolbox_add(dev_toolbox, "devtool", gt_devtool); */ gt_toolbox_add(dev_toolbox, "gthmkbssmfiles", gt_gthmkbssmfiles); gt_toolbox_add(dev_toolbox, "guessprot", gt_guessprot); gt_toolbox_add(dev_toolbox, "mergeesa", gt_mergeesa); gt_toolbox_add(dev_toolbox, "paircmp", gt_paircmp); gt_toolbox_add(dev_toolbox, "patternmatch", gt_patternmatch); gt_toolbox_add(dev_toolbox, "regioncov", gt_regioncov); gt_toolbox_add(dev_toolbox, "trieins", gt_trieins); gt_toolbox_add_tool(dev_toolbox, "consensus_sa", gt_consensus_sa_tool()); gt_toolbox_add_tool(dev_toolbox, "extracttarget", gt_extracttarget()); gt_toolbox_add_tool(dev_toolbox, "gdiffcalc", gt_gdiffcalc()); gt_toolbox_add_tool(dev_toolbox, "idxlocali", gt_idxlocali()); gt_toolbox_add_tool(dev_toolbox, "magicmatch", gt_magicmatch()); gt_toolbox_add_tool(dev_toolbox, "readreads", gt_readreads()); gt_toolbox_add_tool(dev_toolbox, "sain", gt_sain()); gt_toolbox_add_tool(dev_toolbox, "sambam", gt_sam_interface()); gt_toolbox_add_tool(dev_toolbox, "seqcorrect", gt_seqcorrect()); gt_toolbox_add_tool(dev_toolbox, "seqlensort", gt_seqlensort()); gt_toolbox_add_tool(dev_toolbox, "sfxmap", gt_sfxmap()); gt_toolbox_add_tool(dev_toolbox, "skproto", gt_skproto()); gt_toolbox_add_tool(dev_toolbox, "sortbench", gt_sortbench()); return dev_toolbox; } static void gt_dev_arguments_delete(void *tool_arguments) { GtToolbox *dev_toolbox = tool_arguments; if (!dev_toolbox) return; gt_toolbox_delete(dev_toolbox); } static GtOptionParser* gt_dev_option_parser_new(void *tool_arguments) { GtToolbox *dev_toolbox = tool_arguments; GtOptionParser *op; gt_assert(dev_toolbox); op = gt_option_parser_new("[option ...] dev_tool_name [argument ...]", "Call development tool with name dev_tool_name and " "pass argument(s) to it."); gt_option_parser_set_comment_func(op, gt_toolbox_show, dev_toolbox); gt_option_parser_set_min_args(op, 1); return op; } static int gt_dev_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtToolbox *dev_toolbox = tool_arguments; GtToolfunc toolfunc; GtTool *tool = NULL; int had_err = 0; char **nargv = NULL; gt_error_check(err); gt_assert(dev_toolbox); /* get development tools */ if (!gt_toolbox_has_tool(dev_toolbox, argv[parsed_args])) { gt_error_set(err, "development tool '%s' not found; option -help lists " "possible tools", argv[parsed_args]); had_err = -1; } /* call development tool */ if (!had_err) { if (!(toolfunc = gt_toolbox_get(dev_toolbox, argv[parsed_args]))) { tool = gt_toolbox_get_tool(dev_toolbox, argv[parsed_args]); gt_assert(tool); } nargv = gt_cstr_array_prefix_first(argv + parsed_args, gt_error_get_progname(err)); gt_error_set_progname(err, nargv[0]); if (toolfunc) had_err = toolfunc(argc - parsed_args, (const char**) nargv, err); else had_err = gt_tool_run(tool, argc - parsed_args, (const char**) nargv, err); } /* free */ gt_cstr_array_delete(nargv); return had_err; } GtTool* gt_dev(void) { return gt_tool_new(gt_dev_arguments_new, gt_dev_arguments_delete, gt_dev_option_parser_new, NULL, gt_dev_runner); } genometools-1.5.1/src/tools/gt_dev.h000066400000000000000000000017311211610345200174160ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_DEV_H #define GT_DEV_H #include "core/tool_api.h" /* the development tool */ GtTool* gt_dev(void); #endif genometools-1.5.1/src/tools/gt_dot.c000066400000000000000000000050351211610345200174220ustar00rootroot00000000000000/* Copyright (c) 2013 Sascha Steinbiss Copyright (c) 2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/unused_api.h" #include "extended/dot_visitor.h" #include "extended/gff3_in_stream.h" #include "extended/visitor_stream.h" #include "tools/gt_dot.h" typedef struct { } GtDotArguments; static void* gt_dot_arguments_new(void) { GtDotArguments *arguments = gt_calloc(1, sizeof *arguments); return arguments; } static void gt_dot_arguments_delete(void *tool_arguments) { GtDotArguments *arguments = tool_arguments; if (!arguments) return; gt_free(arguments); } static GtOptionParser* gt_dot_option_parser_new(void *tool_arguments) { GT_UNUSED GtDotArguments *arguments = tool_arguments; GtOptionParser *op; GT_UNUSED GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [files]", "Prints feature graphs in dotfile format."); return op; } static int gt_dot_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GT_UNUSED GtDotArguments *arguments = tool_arguments; GtNodeStream *vs = NULL, *ins = NULL; GtNodeVisitor *dv = NULL; int had_err = 0; gt_error_check(err); ins = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); if (ins) { vs = gt_visitor_stream_new(ins, (dv = gt_dot_visitor_new())); } if (vs) { had_err = gt_node_stream_pull(vs, err); gt_dot_visitor_finalize(dv); } gt_node_stream_delete(ins); gt_node_stream_delete(vs); return had_err; } GtTool* gt_dot(void) { return gt_tool_new(gt_dot_arguments_new, gt_dot_arguments_delete, gt_dot_option_parser_new, NULL, gt_dot_runner); } genometools-1.5.1/src/tools/gt_dot.h000066400000000000000000000017151211610345200174300ustar00rootroot00000000000000/* Copyright (c) 2013 Sascha Steinbiss Copyright (c) 2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_DOT_H #define GT_DOT_H #include "core/tool_api.h" /* the dot tool */ GtTool* gt_dot(void); #endif genometools-1.5.1/src/tools/gt_dupfeat.c000066400000000000000000000077601211610345200202730ustar00rootroot00000000000000/* Copyright (c) 2009 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma_api.h" #include "core/output_file_api.h" #include "extended/dup_feature_stream.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "tools/gt_interfeat.h" typedef struct { GtStr *dest_type, *source_type; GtOutputFileInfo *ofi; GtFile *outfp; } InterFeatArguments; static void* gt_interfeat_arguments_new(void) { InterFeatArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->dest_type = gt_str_new(); arguments->source_type = gt_str_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_interfeat_arguments_delete(void *tool_arguments) { InterFeatArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_str_delete(arguments->source_type); gt_str_delete(arguments->dest_type); gt_free(arguments); } static GtOptionParser* gt_interfeat_option_parser_new(void *tool_arguments) { InterFeatArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Duplicate " "internal feature nodes in given GFF3_file(s)."); /* -outside */ option = gt_option_new_string("dest", "set destination type", arguments->dest_type, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); /* -inter */ option = gt_option_new_string("source", "set source type", arguments->source_type, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); return op; } static int gt_interfeat_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { InterFeatArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream, *dup_feature_stream, *gff3_out_stream; int had_err; gt_error_check(err); gt_assert(arguments); /* create a gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); /* create intermediary feature stream */ dup_feature_stream = gt_dup_feature_stream_new(gff3_in_stream, gt_str_get(arguments->dest_type), gt_str_get(arguments->source_type)); /* create gff3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(dup_feature_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(dup_feature_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool* gt_dupfeat(void) { return gt_tool_new(gt_interfeat_arguments_new, gt_interfeat_arguments_delete, gt_interfeat_option_parser_new, NULL, gt_interfeat_runner); } genometools-1.5.1/src/tools/gt_dupfeat.h000066400000000000000000000016331211610345200202710ustar00rootroot00000000000000/* Copyright (c) 2009 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_DUPFEAT_H #define GT_DUPFEAT_H #include "core/tool_api.h" /* the duplicate feature tool */ GtTool* gt_dupfeat(void); #endif genometools-1.5.1/src/tools/gt_encseq.c000066400000000000000000000072151211610345200201140ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/cstr_array.h" #include "core/error.h" #include "core/option_api.h" #include "core/versionfunc.h" #include "extended/toolbox_api.h" #include "tools/gt_encseq_bitextract.h" #include "tools/gt_encseq_check.h" #include "tools/gt_encseq_decode.h" #include "tools/gt_encseq_encode.h" #include "tools/gt_encseq_info.h" #include "tools/gt_encseq_md5.h" #include "tools/gt_encseq_bench.h" static void* gt_encseq_arguments_new(void) { GtToolbox *encseq_toolbox = gt_toolbox_new(); gt_toolbox_add_tool(encseq_toolbox, "bitextract", gt_encseq_bitextract()); gt_toolbox_add_tool(encseq_toolbox, "check", gt_encseq_check()); gt_toolbox_add_tool(encseq_toolbox, "info", gt_encseq_info()); gt_toolbox_add_tool(encseq_toolbox, "md5", gt_encseq_md5()); gt_toolbox_add_tool(encseq_toolbox, "decode", gt_encseq_decode()); gt_toolbox_add_tool(encseq_toolbox, "encode", gt_encseq_encode()); gt_toolbox_add_tool(encseq_toolbox, "bench", gt_encseq_bench()); return encseq_toolbox; } static void gt_encseq_arguments_delete(void *tool_arguments) { GtToolbox *encseq_toolbox = tool_arguments; if (!encseq_toolbox) return; gt_toolbox_delete(encseq_toolbox); } static GtOptionParser* gt_encseq_option_parser_new(void *tool_arguments) { GtToolbox *encseq_toolbox = tool_arguments; GtOptionParser *op; gt_assert(encseq_toolbox); op = gt_option_parser_new("[option ...] tool [argument ...]", "Call encoded sequence manipulation tool " "and pass argument(s) to it."); gt_option_parser_set_comment_func(op, gt_toolbox_show, encseq_toolbox); gt_option_parser_set_min_args(op, 1); return op; } static int gt_encseq_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtToolbox *encseq_toolbox = tool_arguments; GtTool *tool = NULL; int had_err = 0; char **nargv = NULL; gt_error_check(err); gt_assert(encseq_toolbox); /* get encseq tools */ tool = gt_toolbox_get_tool(encseq_toolbox, argv[parsed_args]); if (!tool) { gt_error_set(err, "encseq tool '%s' not found; option -help lists " "possible tools", argv[parsed_args]); had_err = -1; } /* call encseq tool */ if (!had_err) { gt_assert(tool); nargv = gt_cstr_array_prefix_first(argv + parsed_args, gt_error_get_progname(err)); gt_error_set_progname(err, nargv[0]); had_err = gt_tool_run(tool, argc - parsed_args, (const char**) nargv, err); } /* free */ gt_cstr_array_delete(nargv); return had_err; } GtTool* gt_encseq(void) { return gt_tool_new(gt_encseq_arguments_new, gt_encseq_arguments_delete, gt_encseq_option_parser_new, NULL, gt_encseq_runner); } genometools-1.5.1/src/tools/gt_encseq.h000066400000000000000000000017341211610345200201210ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ENCSEQ_H #define GT_ENCSEQ_H #include "core/tool_api.h" /* the encseq toolbox */ GtTool* gt_encseq(void); #endif genometools-1.5.1/src/tools/gt_encseq2spm.c000066400000000000000000000404101211610345200207100ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "core/unused_api.h" #include "core/option_api.h" #include "core/encseq_api.h" #include "core/logger.h" #include "core/intbits.h" #include "core/minmax.h" #include "core/showtime.h" #ifdef GT_THREADS_ENABLED #include "core/thread_api.h" #endif #include "tools/gt_encseq2spm.h" #include "match/firstcodes.h" #include "match/firstcodes-scan.h" #include "match/esa-spmsk.h" typedef struct { bool checksuftab, singlestrand, verbose, outputspms, onlyaccum, onlyallfirstcodes, radixlarge, countspms; unsigned int minmatchlength, numofparts, radixparts, singlescan, addbscache_depth, forcek; unsigned long maximumspace, phase2extra; GtStr *encseqinput, *spmspec, *memlimitarg, *phase2extraarg; GtOption *refoptionmemlimit, *refoptionphase2extra; } GtEncseq2spmArguments; static void* gt_encseq2spm_arguments_new(void) { GtEncseq2spmArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->outputspms = false; arguments->countspms = false; arguments->radixlarge = false; arguments->singlescan = 0; arguments->numofparts = 0; arguments->radixparts = 1U; arguments->encseqinput = gt_str_new(); arguments->spmspec = gt_str_new(); arguments->memlimitarg = gt_str_new(); arguments->phase2extraarg = gt_str_new(); arguments->phase2extra = 0UL; /* in bytes */ arguments->maximumspace = 0UL; /* in bytes */ return arguments; } static void gt_encseq2spm_arguments_delete(void *tool_arguments) { GtEncseq2spmArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->encseqinput); gt_str_delete(arguments->spmspec); gt_option_delete(arguments->refoptionmemlimit); gt_option_delete(arguments->refoptionphase2extra); gt_str_delete(arguments->memlimitarg); gt_str_delete(arguments->phase2extraarg); gt_free(arguments); } static GtOptionParser* gt_encseq2spm_option_parser_new(void *tool_arguments) { GtEncseq2spmArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optionparts, *optionmemlimit; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [file]", "Compute suffix prefix matches " "from encoded sequence."); /* -l */ option = gt_option_new_uint_min("l", "specify the minimum length", &arguments->minmatchlength, 0, 1U); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -parts */ optionparts = gt_option_new_uint("parts", "specify the number of parts", &arguments->numofparts, 0U); gt_option_parser_add_option(op, optionparts); /* -memlimit */ optionmemlimit = gt_option_new_string("memlimit", "specify maximal amount of memory to be used during " "index construction (in bytes, the keywords 'MB' " "and 'GB' are allowed)", arguments->memlimitarg, NULL); gt_option_parser_add_option(op, optionmemlimit); gt_option_exclude(optionmemlimit, optionparts); arguments->refoptionmemlimit = gt_option_ref(optionmemlimit); /* -checksuftab */ option = gt_option_new_bool("checksuftab", "check the suffix table", &arguments->checksuftab, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -singlestrand */ option = gt_option_new_bool("singlestrand", "use only the forward strand " "of the sequence", &arguments->singlestrand, false); gt_option_parser_add_option(op, option); /* -spm */ option = gt_option_new_string("spm", "specify output for spms", arguments->spmspec, NULL); gt_option_parser_add_option(op, option); /* -ii */ option = gt_option_new_string("ii", "specify the input sequence", arguments->encseqinput, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -onlyaccum */ option = gt_option_new_bool("onlyaccum", "only accumulate codes", &arguments->onlyaccum, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -onlyallfirstcodes */ option = gt_option_new_bool("onlyallfirstcodes", "only determines allcodes", &arguments->onlyallfirstcodes, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -addbscachedepth */ option = gt_option_new_uint("addbscachedepth", "only determines allcodes", &arguments->addbscache_depth, 5U); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -phase2extra */ option = gt_option_new_string("phase2extra", "specify amount of additional space required for " "the second phase of the computation involving the " "processing of the intervals (in bytes, " "the keywords 'MB' and 'GB' are allowed)", arguments->phase2extraarg, NULL); gt_option_parser_add_option(op, option); arguments->refoptionphase2extra = gt_option_ref(option); gt_option_is_development_option(option); /* -radixlarge */ option = gt_option_new_bool("radixlarge", "use large tables for radixsort", &arguments->radixlarge, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -radixparts */ option = gt_option_new_uint("radixparts", "specify the number of parts " "for radixsort", &arguments->radixparts, 1U); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -singlescan */ option = gt_option_new_uint("singlescan", "run a single scan: 1=fast; " "2=fast with check; 3=fast with output; " "4=sfx-mapped4-version", &arguments->singlescan, 0); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -forcek */ option = gt_option_new_uint("forcek", "specify the value of k", &arguments->forcek, 0); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); return op; } static bool gt_encseq2spm_kmersize(GtEncseq2spmArguments *arguments, unsigned int *kmersize, GtError *err) { bool haserr = false; gt_assert(kmersize != NULL); if (arguments->forcek > 0) { *kmersize = arguments->forcek; if (*kmersize > arguments->minmatchlength) { gt_error_set(err,"argument %u to option -forcek > l", *kmersize); haserr = true; } else if (*kmersize > (unsigned int)GT_UNITSIN2BITENC) { gt_error_set(err, "argument %u to option -forcek > %u (machine word size/2)", *kmersize, (unsigned int)GT_UNITSIN2BITENC); haserr = true; } } else { *kmersize = MIN((unsigned int) GT_UNITSIN2BITENC, arguments->minmatchlength); } gt_log_log("kmersize=%u", *kmersize); gt_assert(*kmersize > 0); return haserr; } static int gt_encseq2spm_arguments_check(int rest_argc, void *tool_arguments, GtError *err) { GtEncseq2spmArguments *arguments = tool_arguments; bool haserr = false; gt_error_check(err); if (rest_argc != 0) { gt_error_set(err,"unnecessary arguments"); haserr = true; } if (!haserr && gt_str_length(arguments->spmspec) > 0) { const char *spmspecstring = gt_str_get(arguments->spmspec); if (strcmp(spmspecstring,"show") == 0) { arguments->outputspms = true; } else { if (strcmp(spmspecstring,"count") == 0) { arguments->countspms = true; } else { gt_error_set(err,"illegal argument \"%s\" to option -spm", spmspecstring); haserr = true; } } } if (!haserr && gt_option_is_set(arguments->refoptionmemlimit)) { if (gt_option_parse_spacespec(&arguments->maximumspace, "memlimit", arguments->memlimitarg, err) != 0) { haserr = true; } if (!haserr && !gt_ma_bookkeeping_enabled()) { gt_error_set(err, "option '-memlimit' requires " "GT_MEM_BOOKKEEPING=on"); haserr = true; } } if (!haserr && gt_option_is_set(arguments->refoptionphase2extra)) { if (gt_option_parse_spacespec(&arguments->phase2extra, "phase2extra", arguments->phase2extraarg, err) != 0) { haserr = true; } } #ifdef GT_THREADS_ENABLED if (!haserr) { if (gt_jobs > 1 && gt_ma_bookkeeping_enabled()) { gt_error_set(err, "gt option '-j' and GT_MEM_BOOKKEEPING=on " "are incompatible"); haserr = true; } } #endif return haserr ? -1 : 0; } static int gt_encseq2spm_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtEncseq2spmArguments *arguments = tool_arguments; GtEncseqLoader *el = NULL; GtEncseq *encseq = NULL; bool haserr = false; gt_error_check(err); gt_assert(arguments); el = gt_encseq_loader_new(); gt_encseq_loader_drop_description_support(el); gt_encseq_loader_disable_autosupport(el); encseq = gt_encseq_loader_load(el, gt_str_get(arguments->encseqinput), err); if (encseq == NULL) { haserr = true; } if (!haserr) { if (arguments->singlestrand) { gt_error_set(err,"option -singlestand is not implemented"); haserr = true; } else { if (gt_encseq_mirror(encseq, err) != 0) { haserr = true; } } } if (!haserr && arguments->singlescan > 0) { GtTimer *timer = NULL; if (gt_showtime_enabled()) { char *outmsg; switch (arguments->singlescan) { case 1: outmsg = "to run fast scanning"; break; case 2: outmsg = "to run fast scanning with check"; break; case 3: outmsg = "to run fast scanning with output"; break; case 4: outmsg = "to run old scanning code"; break; default: gt_error_set(err,"argument %u to option -singlescan not allowed", arguments->singlescan); haserr = true; } if (!haserr) { timer = gt_timer_new_with_progress_description(outmsg); gt_timer_start(timer); } } if (!haserr) { unsigned int kmersize = 0; haserr = gt_encseq2spm_kmersize(arguments, &kmersize, err); if (!haserr) { if (arguments->singlescan == 4U) { gt_rungetencseqkmers(encseq,kmersize); } else { if (arguments->singlescan > 0) { gt_firstcode_runkmerscan(encseq,arguments->singlescan - 1,kmersize, arguments->minmatchlength); } } } } if (timer != NULL) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } } if (!haserr && arguments->singlescan == 0) { GtLogger *logger; const GtReadmode readmode = GT_READMODE_FORWARD; GtBUstate_spmsk **spmsk_states = NULL; unsigned int kmersize, threadcount; #ifdef GT_THREADS_ENABLED const unsigned int threads = gt_jobs; #else const unsigned int threads = 1U; #endif if (arguments->countspms || arguments->outputspms) { spmsk_states = gt_malloc(sizeof (*spmsk_states) * threads); for (threadcount = 0; threadcount < threads; threadcount++) { spmsk_states[threadcount] = gt_spmsk_inl_new(encseq, readmode, (unsigned long) arguments->minmatchlength, arguments->countspms, arguments->outputspms, gt_str_get(arguments->encseqinput)); } } logger = gt_logger_new(arguments->verbose,GT_LOGGER_DEFLT_PREFIX, stdout); haserr = gt_encseq2spm_kmersize(arguments, &kmersize, err); if (!haserr) { if (storefirstcodes_getencseqkmers_twobitencoding(encseq, kmersize, arguments->numofparts, arguments->maximumspace, arguments->minmatchlength, /* use false */ arguments->checksuftab, /* use false */ arguments->onlyaccum, /* use false */ arguments-> onlyallfirstcodes, /* use 5U */ arguments-> addbscache_depth, /* specify the extra space needed for the function processing the interval */ arguments->phase2extra, /* use true */ arguments->radixlarge ? false : true, /* use 2 without threads and use 1 with threads */ arguments->radixparts, spmsk_states != NULL ? gt_spmsk_inl_process : NULL, gt_spmsk_inl_process_end, spmsk_states, logger, err) != 0) { haserr = true; } } if (spmsk_states != NULL) { unsigned long countmatches = 0; for (threadcount = 0; threadcount < threads; threadcount++) { countmatches += gt_spmsk_inl_delete(spmsk_states[threadcount]); } if (arguments->countspms) { printf("number of suffix-prefix matches=%lu\n",countmatches); } gt_free(spmsk_states); } gt_logger_delete(logger); } gt_encseq_delete(encseq); gt_encseq_loader_delete(el); return haserr ? -1 : 0; } GtTool* gt_encseq2spm(void) { return gt_tool_new(gt_encseq2spm_arguments_new, gt_encseq2spm_arguments_delete, gt_encseq2spm_option_parser_new, gt_encseq2spm_arguments_check, gt_encseq2spm_runner); } genometools-1.5.1/src/tools/gt_encseq2spm.h000066400000000000000000000017411211610345200207210ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ENCSEQ2SPM_H #define GT_ENCSEQ2SPM_H #include "core/tool_api.h" /* the encseq2spm tool */ GtTool* gt_encseq2spm(void); #endif genometools-1.5.1/src/tools/gt_encseq_bench.c000066400000000000000000000277411211610345200212610ustar00rootroot00000000000000/* Copyright (c) 2012 Stefan Kurtz Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/unused_api.h" #include "core/encseq.h" #include "core/encseq_metadata.h" #include "core/mathsupport.h" #include "core/showtime.h" #include "core/logger.h" #include "tools/gt_encseq_bench.h" typedef struct { unsigned long ccext; bool sortlenprepare, verbose; } GtEncseqBenchArguments; static void* gt_encseq_bench_arguments_new(void) { GtEncseqBenchArguments *arguments = gt_malloc(sizeof *arguments); return arguments; } static void gt_encseq_bench_arguments_delete(void *tool_arguments) { GtEncseqBenchArguments *arguments = tool_arguments; if (arguments != NULL) { gt_free(arguments); } } static GtOptionParser* gt_encseq_bench_option_parser_new(void *tool_arguments) { GtEncseqBenchArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] indexname", "Perform benchmark on extractions from encseq."); option = gt_option_new_ulong("ccext", "specify number of random character " "extractions", &arguments->ccext, 0UL); gt_option_parser_add_option(op, option); option = gt_option_new_bool("solepr", "prepare data structure for sequences " "ordered by their length", &arguments->sortlenprepare, false); gt_option_parser_add_option(op, option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 1U, 1U); return op; } static void gt_bench_character_extractions(const GtEncseq *encseq, unsigned long ccext) { unsigned long idx, ccsum = 0, totallength = gt_encseq_total_length(encseq); GtTimer *timer = NULL; if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description("run character " "extractions"); gt_timer_start(timer); } for (idx = 0; idx < ccext; idx++) { GtUchar cc; unsigned long pos = gt_rand_max(totallength-1); cc = gt_encseq_get_encoded_char(encseq,pos,GT_READMODE_FORWARD); ccsum += (unsigned long) cc; } printf("ccsum=%lu\n",ccsum); if (timer != NULL) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } } typedef struct { unsigned long minlength, maxlength, numofdifferentseqlen, *seqlenseppos, *seqlencount, *seqlentab; } GtSortedlengthinfo; void gt_sortedlengthinfo_delete(GtSortedlengthinfo *sortedlengthinfo) { if (sortedlengthinfo != NULL) { gt_free(sortedlengthinfo->seqlentab); gt_free(sortedlengthinfo->seqlenseppos); gt_free(sortedlengthinfo->seqlencount); gt_free(sortedlengthinfo); } } GtSortedlengthinfo *gt_sortedlengthinfo_new(const GtEncseq *encseq, const char *indexname, GtError *err) { GtEncseqMetadata *emd; GtSortedlengthinfo *sortedlengthinfo = NULL; int had_err = 0; emd = gt_encseq_metadata_new(indexname, err); if (emd == NULL) { had_err = -1; } else { unsigned long seqlen, previousseqlen = 0, seqnum, countdifferentlength = 1UL, currentpos = 0; sortedlengthinfo = gt_malloc(sizeof *sortedlengthinfo); sortedlengthinfo->minlength = gt_encseq_metadata_min_seq_length(emd); sortedlengthinfo->maxlength = gt_encseq_metadata_max_seq_length(emd); gt_assert(sortedlengthinfo->minlength > 0 && sortedlengthinfo->minlength <= sortedlengthinfo->maxlength); for (seqnum = 0; seqnum < gt_encseq_num_of_sequences(encseq); seqnum++) { seqlen = gt_encseq_seqlength(encseq,seqnum); if (seqnum > 0) { if (previousseqlen > seqlen) { gt_error_set(err,"sequence %lu of length %lu is longer than " "sequence %lu of length %lu", seqnum-1,previousseqlen,seqnum,seqlen); had_err = -1; break; } if (previousseqlen < seqlen) { countdifferentlength++; } } previousseqlen = seqlen; } if (!had_err) { sortedlengthinfo->seqlentab = gt_calloc((size_t) countdifferentlength, sizeof (*sortedlengthinfo->seqlentab)); } else { sortedlengthinfo->seqlentab = NULL; } if (!had_err && countdifferentlength >= 2UL) { sortedlengthinfo->seqlenseppos = gt_malloc(sizeof (*sortedlengthinfo->seqlenseppos) * (countdifferentlength-1)); sortedlengthinfo->seqlencount = gt_malloc(sizeof (*sortedlengthinfo->seqlencount) * (countdifferentlength-1)); } else { sortedlengthinfo->seqlenseppos = NULL; sortedlengthinfo->seqlencount = NULL; } sortedlengthinfo->numofdifferentseqlen = 0; if (!had_err) { gt_assert(sortedlengthinfo->seqlenseppos != NULL && sortedlengthinfo->seqlencount != NULL && sortedlengthinfo->seqlentab != NULL); for (seqnum = 0; seqnum < gt_encseq_num_of_sequences(encseq); seqnum++) { seqlen = gt_encseq_seqlength(encseq,seqnum); if (seqnum > 0) { if (previousseqlen < seqlen) { gt_assert(sortedlengthinfo->numofdifferentseqlen < countdifferentlength-1); sortedlengthinfo->seqlencount[ sortedlengthinfo->numofdifferentseqlen] = seqnum; sortedlengthinfo->seqlenseppos[ sortedlengthinfo->numofdifferentseqlen++] = currentpos; sortedlengthinfo->seqlentab[ sortedlengthinfo->numofdifferentseqlen] = seqlen; gt_assert(gt_encseq_get_encoded_char(encseq,currentpos, GT_READMODE_FORWARD) == (GtUchar) SEPARATOR); } currentpos += 1UL + seqlen; } else { sortedlengthinfo->seqlentab[0] = seqlen; currentpos = seqlen; } previousseqlen = seqlen; } sortedlengthinfo->numofdifferentseqlen++; } } gt_encseq_metadata_delete(emd); if (!had_err) { return sortedlengthinfo; } gt_sortedlengthinfo_delete(sortedlengthinfo); return NULL; } unsigned long gt_sortedlengthinfo_seqnum(const GtEncseq *encseq, const GtSortedlengthinfo *sortedlengthinfo, unsigned long position) { unsigned long recordnum, totallength = gt_encseq_total_length(encseq); gt_assert(position < totallength); if (gt_encseq_get_encoded_char(encseq,position,GT_READMODE_FORWARD) == (GtUchar) SEPARATOR) { return ULONG_MAX; } recordnum = gt_encseq_sep2seqnum(sortedlengthinfo->seqlenseppos, sortedlengthinfo->numofdifferentseqlen, totallength, position); if (recordnum == 0) { return position/(sortedlengthinfo->seqlentab[0]+1); } else { return sortedlengthinfo->seqlencount[recordnum-1] + (position - sortedlengthinfo->seqlenseppos[recordnum-1])/ (sortedlengthinfo->seqlentab[recordnum]+1); } } unsigned long gt_sortedlengthinfo_seqstart(const GtEncseq *encseq, const GtSortedlengthinfo *sortedlengthinfo, unsigned long seqnum) { if (seqnum == 0) { return 0; } else { unsigned long numberofsequences = gt_encseq_num_of_sequences(encseq), recordnum; gt_assert(seqnum < numberofsequences); recordnum = gt_encseq_sep2seqnum(sortedlengthinfo->seqlencount, sortedlengthinfo->numofdifferentseqlen, numberofsequences, seqnum); if (recordnum == 0) { return (sortedlengthinfo->seqlentab[0] + 1) * seqnum; } gt_assert(seqnum >= sortedlengthinfo->seqlencount[recordnum-1]); return sortedlengthinfo->seqlenseppos[recordnum-1] + (sortedlengthinfo->seqlentab[recordnum] + 1) * (seqnum - sortedlengthinfo->seqlencount[recordnum-1]) + 1; } } static int gt_encseq_bench_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtEncseqBenchArguments *arguments = tool_arguments; GtEncseqLoader *encseq_loader; GtEncseq *encseq; GtLogger *logger = NULL; const char *indexname; int had_err = 0; gt_error_check(err); gt_assert(arguments != NULL); encseq_loader = gt_encseq_loader_new(); indexname = argv[parsed_args]; encseq = gt_encseq_loader_load(encseq_loader, indexname, err); if (encseq == NULL) { had_err = -1; } else { if (arguments->sortlenprepare) { unsigned long seqnum, position; GtSortedlengthinfo *sortedlengthinfo = gt_sortedlengthinfo_new(encseq,indexname,err); if (sortedlengthinfo == NULL) { had_err = -1; } else { logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); } gt_logger_log(logger,"prepare sorted length info"); for (position = 0; !had_err && position < gt_encseq_total_length(encseq); position++) { seqnum = gt_sortedlengthinfo_seqnum(encseq,sortedlengthinfo,position); if (seqnum != ULONG_MAX) { unsigned long seqnum2 = gt_encseq_seqnum(encseq,position); if (seqnum2 != seqnum) { fprintf(stderr,"position %lu: seqnum2 = %lu != %lu = seqnum\n", position,seqnum,seqnum2); exit(GT_EXIT_PROGRAMMING_ERROR); } } } gt_logger_log(logger,"perform seqnum check"); for (seqnum = 0; !had_err && seqnum < gt_encseq_num_of_sequences(encseq); seqnum++) { unsigned long seqstart = gt_encseq_seqstartpos(encseq,seqnum); unsigned long seqstart2 = gt_sortedlengthinfo_seqstart(encseq, sortedlengthinfo,seqnum); if (seqstart != seqstart2) { fprintf(stderr,"seqnum=%lu: seqstart = %lu != %lu = seqstart2\n", seqnum,seqstart,seqstart2); exit(GT_EXIT_PROGRAMMING_ERROR); } } gt_logger_log(logger,"perform seqstart check"); gt_sortedlengthinfo_delete(sortedlengthinfo); } if (!had_err && arguments->ccext > 0) { gt_logger_log(logger,"perform character extractions"); gt_bench_character_extractions(encseq,arguments->ccext); } } gt_encseq_delete(encseq); gt_encseq_loader_delete(encseq_loader); gt_logger_delete(logger); return had_err; } GtTool* gt_encseq_bench(void) { return gt_tool_new(gt_encseq_bench_arguments_new, gt_encseq_bench_arguments_delete, gt_encseq_bench_option_parser_new, NULL, gt_encseq_bench_runner); } genometools-1.5.1/src/tools/gt_encseq_bench.h000066400000000000000000000017511211610345200212570ustar00rootroot00000000000000/* Copyright (c) 2012 Stefan Kurtz Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ENCSEQ_BENCH_H #define GT_ENCSEQ_BENCH_H #include "core/tool_api.h" /* the encseq_bench tool */ GtTool* gt_encseq_bench(void); #endif genometools-1.5.1/src/tools/gt_encseq_bitextract.c000066400000000000000000000145201211610345200223420ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/parseutils_api.h" #include "core/readmode_api.h" #include "core/unused_api.h" #include "core/undef_api.h" #include "tools/gt_encseq_bitextract.h" typedef struct { bool mirror, specialranges; GtStr *readmode; unsigned long bitpos, stoppos; } GtEncseqBitextractArguments; static void* gt_encseq_bitextract_arguments_new(void) { GtEncseqBitextractArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->readmode = gt_str_new(); return arguments; } static void gt_encseq_bitextract_arguments_delete(void *tool_arguments) { GtEncseqBitextractArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->readmode); gt_free(arguments); } static GtOptionParser* gt_encseq_bitextract_option_parser_new(void *tool_arguments) { GtEncseqBitextractArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); op = gt_option_parser_new("[option ...] [indexname]", "Extracts internal data from encoded sequences."); option = gt_option_new_bool("mirrored", "mirror sequence", &arguments->mirror, false); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("stoppos", "output stop positions", &arguments->stoppos, GT_UNDEF_ULONG); gt_option_parser_add_option(op, option); option = gt_option_new_bool("specialranges", "output special ranges", &arguments->specialranges, false); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("bitpos", "extract and display " "two bit encoding for position", &arguments->bitpos, GT_UNDEF_ULONG); gt_option_parser_add_option(op, option); gt_encseq_options_add_readmode_option(op, arguments->readmode); gt_option_parser_set_min_args(op, 1U); return op; } static int gt_encseq_bitextract_runner(GT_UNUSED int argc, const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { GtEncseqBitextractArguments *arguments = tool_arguments; GtEncseqLoader *el; GtEncseq *encseq; int had_err = 0; bool fwd, it1, GT_UNUSED it2; char buffer[BUFSIZ]; GtEndofTwobitencoding etbe; GtEncseqReader *esr; GtSpecialrangeiterator *sri; GtRange srng; GtReadmode rm; gt_error_check(err); gt_assert(arguments); el = gt_encseq_loader_new(); encseq = gt_encseq_loader_load(el, argv[parsed_args], err); if (!encseq) had_err = -1; if (!had_err && arguments->mirror) { had_err = gt_encseq_mirror(encseq, err); } if (!had_err) { rm = gt_readmode_parse(gt_str_get(arguments->readmode), NULL); fwd = GT_ISDIRREVERSE(rm) ? false : true; } if (!had_err && arguments->bitpos != GT_UNDEF_ULONG) { if (arguments->bitpos >= gt_encseq_total_length(encseq)) { gt_error_set(err, "position %lu exceeds encoded sequence length of %lu", arguments->bitpos, gt_encseq_total_length(encseq)); had_err = -1; } if (!had_err) { unsigned long ret; esr = gt_encseq_create_reader_with_readmode(encseq, rm, arguments->bitpos); ret = gt_encseq_extract2bitencwithtwobitencodingstoppos(&etbe, esr, encseq, rm, arguments->bitpos); gt_bitsequence_tostring(buffer, etbe.tbe); printf("Twobitencoding %s\n" "unitsnotspecial %u\n" "position %lu\n" "returnvalue %lu\n", buffer, etbe.unitsnotspecial, arguments->bitpos, ret); gt_encseq_reader_delete(esr); } } if (!had_err && arguments->stoppos != GT_UNDEF_ULONG) { if (arguments->stoppos >= gt_encseq_total_length(encseq)) { gt_error_set(err, "position %lu exceeds encoded sequence length of %lu", arguments->stoppos, gt_encseq_total_length(encseq)); had_err = -1; } if (!had_err) { esr = gt_encseq_create_reader_with_readmode(encseq, rm, 0); /* check stoppos stuff */ gt_encseq_reader_reinit_with_readmode(esr, encseq, rm, arguments->stoppos); printf("%lu: %lu\n", arguments->stoppos, gt_getnexttwobitencodingstoppos(fwd, esr)); gt_encseq_reader_delete(esr); } } if (!had_err && arguments->specialranges) { /* check specialrangeiterator stuff */ if (gt_encseq_has_specialranges(encseq)) { sri = gt_specialrangeiterator_new(encseq, fwd); while (true) { it1 = gt_specialrangeiterator_next(sri, &srng); if (it1) printf("%lu:%lu\n", srng.start, srng.end); else break; } gt_specialrangeiterator_delete(sri); } } gt_encseq_delete(encseq); gt_encseq_loader_delete(el); return had_err; } GtTool* gt_encseq_bitextract(void) { return gt_tool_new(gt_encseq_bitextract_arguments_new, gt_encseq_bitextract_arguments_delete, gt_encseq_bitextract_option_parser_new, NULL, gt_encseq_bitextract_runner); } genometools-1.5.1/src/tools/gt_encseq_bitextract.h000066400000000000000000000020051211610345200223420ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ENCSEQ_BITEXTRACT_H #define GT_ENCSEQ_BITEXTRACT_H #include "core/tool_api.h" /* the encseq bitextract tool */ GtTool* gt_encseq_bitextract(void); #endif genometools-1.5.1/src/tools/gt_encseq_check.c000066400000000000000000000125511211610345200212500ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/ma.h" #include "core/unused_api.h" #include "core/logger.h" #include "match/intcode-def.h" /* XXX */ #include "match/test-mappedstr.pr" /* XXX */ #include "tools/gt_encseq_check.h" typedef struct { unsigned long scantrials, multicharcmptrials, prefixlength; bool verbose, nocheckunit; } GtEncseqCheckArguments; static void* gt_encseq_check_arguments_new(void) { GtEncseqCheckArguments *arguments = gt_calloc(1, sizeof *arguments); return arguments; } static void gt_encseq_check_arguments_delete(void *tool_arguments) { GtEncseqCheckArguments *arguments = tool_arguments; if (!arguments) return; gt_free(arguments); } static GtOptionParser* gt_encseq_check_option_parser_new(void *tool_arguments) { GtEncseqCheckArguments *arguments = tool_arguments; GtOptionParser *op; GT_UNUSED GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [file]", "Check the consistency of an encoded " "sequence file."); option = gt_option_new_ulong("scantrials", "specify number of scan trials", &arguments->scantrials, 0); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("multicharcmptrials", "specify number of multicharacter trials", &arguments->multicharcmptrials, 0); gt_option_parser_add_option(op, option); option = gt_option_new_ulong_min_max("prefixlength", "prefix length", &arguments->prefixlength, 0, 0, MAXPREFIXLENGTH); gt_option_parser_add_option(op, option); option = gt_option_new_bool("nocheckunit","do not run checkextractunitatpos", &arguments->nocheckunit, false); gt_option_parser_add_option(op, option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); gt_option_parser_set_min_args(op, 1); return op; } static int gt_encseq_check_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtEncseqCheckArguments *arguments = tool_arguments; int had_err = 0; GtEncseqLoader *encseq_loader; GtEncseq *encseq; GtLogger *logger = NULL; gt_error_check(err); gt_assert(arguments); logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); encseq_loader = gt_encseq_loader_new(); if (!(encseq = gt_encseq_loader_load(encseq_loader, argv[parsed_args], err))) had_err = -1; if (!had_err) { int readmode; gt_encseq_check_startpositions(encseq,logger); for (readmode = 0; readmode < 4; readmode++) { if (gt_alphabet_is_dna(gt_encseq_alphabet(encseq)) || ((GtReadmode) readmode) == GT_READMODE_FORWARD || ((GtReadmode) readmode) == GT_READMODE_REVERSE) { gt_logger_log(logger,"check consistency for readmode %s", gt_readmode_show((GtReadmode) readmode)); if (gt_encseq_check_consistency(encseq, gt_encseq_filenames(encseq), (GtReadmode) readmode, arguments->scantrials, arguments->multicharcmptrials, gt_encseq_has_multiseq_support(encseq), !arguments->nocheckunit, logger, err) != 0) { had_err = -1; break; } } } if (!had_err) { gt_encseq_check_specialranges(encseq); } if (!had_err) { gt_encseq_check_markpos(encseq); } if (!had_err) { had_err = gt_encseq_check_minmax(encseq, err); } if (!had_err && arguments->prefixlength > 0) { if (gt_verifymappedstr(encseq, arguments->prefixlength, err) != 0) { had_err = -1; } } } gt_encseq_delete(encseq); gt_encseq_loader_delete(encseq_loader); gt_logger_delete(logger); return had_err; } GtTool* gt_encseq_check(void) { return gt_tool_new(gt_encseq_check_arguments_new, gt_encseq_check_arguments_delete, gt_encseq_check_option_parser_new, NULL, gt_encseq_check_runner); } genometools-1.5.1/src/tools/gt_encseq_check.h000066400000000000000000000017611211610345200212560ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ENCSEQ_CHECK_H #define GT_ENCSEQ_CHECK_H #include "core/tool_api.h" /* the encseq check tool */ GtTool* gt_encseq_check(void); #endif genometools-1.5.1/src/tools/gt_encseq_decode.c000066400000000000000000000315561211610345200214240ustar00rootroot00000000000000/* Copyright (c) 2010 Gordon Gremme Copyright (c) 2010-2012 Sascha Steinbiss Copyright (c) 2010-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "core/chardef.h" #include "core/encseq_api.h" #include "core/encseq_options.h" #include "core/fasta_separator.h" #include "core/log_api.h" #include "core/readmode.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "core/xansi_api.h" #include "tools/gt_encseq_decode.h" typedef struct { bool singlechars; GtStr *mode, *sepchar; GtRange rng, seqrng; GtEncseqOptions *eopts; GtReadmode rm; GtStr *dir; unsigned long seq; } GtEncseqDecodeArguments; static void* gt_encseq_decode_arguments_new(void) { GtEncseqDecodeArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->mode = gt_str_new(); arguments->sepchar = gt_str_new(); arguments->dir = gt_str_new(); arguments->seqrng.start = arguments->seqrng.end = GT_UNDEF_ULONG; arguments->rng.start = arguments->rng.end = GT_UNDEF_ULONG; return arguments; } static void gt_encseq_decode_arguments_delete(void *tool_arguments) { GtEncseqDecodeArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->mode); gt_str_delete(arguments->sepchar); gt_str_delete(arguments->dir); gt_encseq_options_delete(arguments->eopts); gt_free(arguments); } static GtOptionParser* gt_encseq_decode_option_parser_new(void *tool_arguments) { GtOptionParser *op; GtOption *option, *optionsep, *optionseq, *optionseqrange, *optionmode; GtEncseqDecodeArguments *arguments = (GtEncseqDecodeArguments*) tool_arguments; static const char *modes[] = {"fasta", "concat", NULL}; /* init */ op = gt_option_parser_new("(sequence_file|indexname)", "Decode/extract encoded sequences."); /* encseq options */ arguments->eopts = gt_encseq_options_register_loading(op, NULL); gt_encseq_options_add_readmode_option(op, arguments->dir); /* -singlechars */ option = gt_option_new_bool("singlechars", "do not use a GtEncseqReader but access each " "sequence character separately", &arguments->singlechars, false); gt_option_is_extended_option(option); gt_option_parser_add_option(op, option); /* -seq */ optionseq = gt_option_new_ulong("seq", "extract sequence identified by its number", &arguments->seq, GT_UNDEF_ULONG); gt_option_parser_add_option(op, optionseq); /* -seqrange */ optionseqrange = gt_option_new_range("seqrange", "extract multiple consecutive sequences", &arguments->seqrng, NULL); gt_option_parser_add_option(op, optionseqrange); gt_option_exclude(optionseqrange, optionseq); gt_option_exclude(optionseq, optionseqrange); /* -output */ optionmode = gt_option_new_choice("output", "specify output format " "(choose from fasta|concat)", arguments->mode, modes[0], modes); gt_option_parser_add_option(op, optionmode); /* -range */ option = gt_option_new_range("range", "concatenated range to extract " "(implies '-output concat')", &arguments->rng, NULL); gt_option_parser_add_option(op, option); gt_option_imply(option, optionmode); /* -sepchar */ optionsep = gt_option_new_string("sepchar", "specify character to print as SEPARATOR", arguments->sepchar, "|"); gt_option_parser_add_option(op, optionsep); gt_option_imply(optionsep, optionmode); gt_option_parser_set_min_max_args(op, 1, 1); return op; } int gt_encseq_decode_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError* err) { GtEncseqDecodeArguments *args = (GtEncseqDecodeArguments*) tool_arguments; int had_err = 0; int rval; if (gt_str_length(args->dir) > 0) { rval = gt_readmode_parse(gt_str_get(args->dir), err); if (rval < 0) had_err = -1; else args->rm = (GtReadmode) rval; } if (!had_err && args->seqrng.start != GT_UNDEF_ULONG && args->seqrng.end != GT_UNDEF_ULONG && args->seq != GT_UNDEF_ULONG) { gt_error_set(err, "'-seq' and '-seqrange' cannot be used together"); had_err = -1; } if (!had_err && (args->seqrng.start != GT_UNDEF_ULONG || args->seqrng.end != GT_UNDEF_ULONG || args->seq != GT_UNDEF_ULONG) && strcmp(gt_str_get(args->mode), "fasta") != 0) { gt_error_set(err, "'-seq' and '-seqrange' can only be used with the " "'-output fasta' option"); had_err = -1; } if (!had_err && (args->rng.start != GT_UNDEF_ULONG || args->rng.end != GT_UNDEF_ULONG) && strcmp(gt_str_get(args->mode), "concat") != 0) { gt_error_set(err, "'-range' can only be used with the " "'-output concat' option"); had_err = -1; } return had_err; } static int output_sequence(GtEncseq *encseq, GtEncseqDecodeArguments *args, const char *filename, GtError *err) { unsigned long i, j, sfrom, sto; int had_err = 0; bool has_desc; GtEncseqReader *esr; gt_assert(encseq); if (!(has_desc = gt_encseq_has_description_support(encseq))) gt_warning("Missing description support for file %s", filename); if (strcmp(gt_str_get(args->mode), "fasta") == 0) { /* specify a single sequence to extract */ if (args->seq != GT_UNDEF_ULONG) { if (args->seq >= gt_encseq_num_of_sequences(encseq)) { gt_error_set(err, "requested sequence %lu exceeds number of sequences " "(%lu)", args->seq, gt_encseq_num_of_sequences(encseq)); return -1; } sfrom = args->seq; sto = args->seq + 1; } else if (args->seqrng.start != GT_UNDEF_ULONG && args->seqrng.end != GT_UNDEF_ULONG) { /* specify a sequence range to extract */ if (args->seqrng.start >= gt_encseq_num_of_sequences(encseq) || args->seqrng.end >= gt_encseq_num_of_sequences(encseq)) { gt_error_set(err, "range %lu-%lu includes a sequence number exceeding " "the total number of sequences (%lu)", args->seqrng.start, args->seqrng.end, gt_encseq_num_of_sequences(encseq)); return -1; } sfrom = args->seqrng.start; sto = args->seqrng.end + 1; } else { /* extract all sequences */ sfrom = 0; sto = gt_encseq_num_of_sequences(encseq); } for (i = sfrom; i < sto; i++) { unsigned long desclen, startpos, len; char buf[BUFSIZ]; const char *desc = NULL; /* XXX: maybe make this distinction in the functions via readmode? */ if (!GT_ISDIRREVERSE(args->rm)) { startpos = gt_encseq_seqstartpos(encseq, i); len = gt_encseq_seqlength(encseq, i); if (has_desc) { desc = gt_encseq_description(encseq, &desclen, i); } else { (void) snprintf(buf, BUFSIZ, "sequence %lu", i); desclen = strlen(buf); desc = buf; } } else { startpos = gt_encseq_seqstartpos(encseq, i); len = gt_encseq_seqlength(encseq, gt_encseq_num_of_sequences(encseq)-1-i); startpos = gt_encseq_total_length(encseq) - (gt_encseq_seqstartpos(encseq, gt_encseq_num_of_sequences( encseq)-1-i) + len); if (has_desc) { desc = gt_encseq_description(encseq, &desclen, gt_encseq_num_of_sequences(encseq)-1-i); } else { (void) snprintf(buf, BUFSIZ, "sequence %lu", i); desclen = strlen(buf); desc = buf; } } gt_assert(desc); /* output description */ gt_xfputc(GT_FASTA_SEPARATOR, stdout); gt_xfwrite(desc, 1, desclen, stdout); gt_xfputc('\n', stdout); /* XXX: make this more efficient by writing in a buffer first and then showing the result */ if (args->singlechars) { for (j = 0; j < len; j++) { gt_xfputc(gt_encseq_get_decoded_char(encseq, startpos + j, args->rm), stdout); } } else { esr = gt_encseq_create_reader_with_readmode(encseq, args->rm, startpos); for (j = 0; j < len; j++) { gt_xfputc(gt_encseq_reader_next_decoded_char(esr), stdout); } gt_encseq_reader_delete(esr); } gt_xfputc('\n', stdout); } } if (strcmp(gt_str_get(args->mode), "concat") == 0) { unsigned long from = 0, to = gt_encseq_total_length(encseq) - 1; if (args->rng.start != GT_UNDEF_ULONG && args->rng.end != GT_UNDEF_ULONG) { if (args->rng.end > to) { had_err = -1; gt_error_set(err, "end of range (%lu) exceeds encoded sequence length " "(%lu)", args->rng.end, to); } if (!had_err) { from = args->rng.start; to = args->rng.end; } } if (!had_err) { if (args->singlechars) { for (j = from; j <= to; j++) { char cc = gt_encseq_get_decoded_char(encseq, j, args->rm); if (cc == (char) SEPARATOR) cc = gt_str_get(args->sepchar)[0]; gt_xfputc(cc, stdout); } } else { esr = gt_encseq_create_reader_with_readmode(encseq, args->rm, from); if (esr) { for (j = from; j <= to; j++) { char cc = gt_encseq_reader_next_decoded_char(esr); if (cc == (char) SEPARATOR) cc = gt_str_get(args->sepchar)[0]; gt_xfputc(cc, stdout); } gt_encseq_reader_delete(esr); } } gt_xfputc('\n', stdout); } } return had_err; } static int decode_sequence_file(const char *seqfile, GtEncseqDecodeArguments *args, GtError *err) { GtEncseqLoader *encseq_loader; GtEncseq *encseq; int had_err = 0; gt_error_check(err); gt_assert(seqfile); encseq_loader = gt_encseq_loader_new(); if (!had_err && gt_encseq_options_lossless_value(args->eopts)) { gt_encseq_loader_require_lossless_support(encseq_loader); } if (!(encseq = gt_encseq_loader_load(encseq_loader, seqfile, err))) had_err = -1; if (!had_err && gt_encseq_options_mirrored_value(args->eopts)) { if (!gt_alphabet_is_dna(gt_encseq_alphabet(encseq))) { gt_error_set(err, "mirroring is only defined on DNA sequences"); had_err = -1; } if (!had_err) had_err = gt_encseq_mirror(encseq, err); } if (!had_err) had_err = output_sequence(encseq, args, seqfile, err); gt_encseq_delete(encseq); gt_encseq_loader_delete(encseq_loader); return had_err; } static int gt_encseq_decode_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { gt_error_check(err); return decode_sequence_file(argv[parsed_args], tool_arguments, err); } GtTool* gt_encseq_decode(void) { return gt_tool_new(gt_encseq_decode_arguments_new, gt_encseq_decode_arguments_delete, gt_encseq_decode_option_parser_new, gt_encseq_decode_arguments_check, gt_encseq_decode_runner); } genometools-1.5.1/src/tools/gt_encseq_decode.h000066400000000000000000000016511211610345200214220ustar00rootroot00000000000000/* Copyright (c) 2010 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ENCSEQ_DECODE_H #define GT_ENCSEQ_DECODE_H #include "core/tool_api.h" /* the encseq decode tool */ GtTool* gt_encseq_decode(void); #endif genometools-1.5.1/src/tools/gt_encseq_encode.c000066400000000000000000000156121211610345200214310ustar00rootroot00000000000000/* Copyright (c) 2010 Gordon Gremme Copyright (c) 2010 Sascha Steinbiss Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/alphabet.h" #include "core/basename_api.h" #include "core/ma.h" #include "core/encseq.h" #include "core/encseq_options.h" #include "core/fileutils.h" #include "core/logger_api.h" #include "core/str_array_api.h" #include "core/unused_api.h" #include "tools/gt_encseq_encode.h" typedef struct { GtEncseqOptions *eopts; bool showstats, no_esq_header, verbose; GtStr *indexname; } GtEncseqEncodeArguments; static void* gt_encseq_encode_arguments_new(void) { GtEncseqEncodeArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->indexname = gt_str_new(); return arguments; } static void gt_encseq_encode_arguments_delete(void *tool_arguments) { GtEncseqEncodeArguments *arguments = tool_arguments; if (!arguments) return; gt_encseq_options_delete(arguments->eopts); gt_str_delete(arguments->indexname); gt_free(arguments); } static GtOptionParser* gt_encseq_encode_option_parser_new(void *tool_arguments) { GtOptionParser *op; GtOption *option; GtEncseqEncodeArguments *arguments = (GtEncseqEncodeArguments*) tool_arguments; /* init */ op = gt_option_parser_new("sequence_file [sequence_file " "[sequence_file ...]]", "Encode sequence files efficiently."); /* -showstats */ option = gt_option_new_bool("showstats", "show compression results", &arguments->showstats, false); gt_option_parser_add_option(op, option); /* -no_esq_header */ option = gt_option_new_bool("no_esq_header", "omit the header in the .esq file", &arguments->no_esq_header, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* encoded sequence options */ arguments->eopts = gt_encseq_options_register_encoding(op, arguments->indexname, NULL); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); gt_option_parser_set_min_args(op, 1); return op; } static int encode_sequence_files(GtStrArray *infiles, GtEncseqOptions *opts, const char *indexname, bool verbose, bool esq_no_header, GtError *err) { GtEncseqEncoder *encseq_encoder; GtLogger *logger; int had_err = 0; gt_error_check(err); gt_assert(infiles && gt_str_array_size(infiles) > 0 && opts); logger = gt_logger_new(verbose, "# ", stderr); encseq_encoder = gt_encseq_encoder_new_from_options(opts, err); if (!encseq_encoder) had_err = -1; if (!had_err) { gt_encseq_encoder_set_logger(encseq_encoder, logger); if (esq_no_header) { gt_encseq_encoder_disable_esq_header(encseq_encoder); } had_err = gt_encseq_encoder_encode(encseq_encoder, infiles, indexname, err); } gt_encseq_encoder_delete(encseq_encoder); gt_logger_delete(logger); return had_err; } static off_t index_size(const char *prefix, const char *suffix) { off_t size = 0; GtStr *index_name = gt_str_new_cstr(prefix); gt_str_append_cstr(index_name, suffix); if (gt_file_exists(gt_str_get(index_name))) { size = gt_file_size(gt_str_get(index_name)); } gt_str_delete(index_name); return size; } static void show_encoded_statistics(GtStrArray *infiles, const char *indexname) { int i; off_t orig_size = 0, enc_size = 0; const char *seqfile; gt_assert(infiles); for (i=0; i < gt_str_array_size(infiles);i ++) { seqfile = gt_str_array_get(infiles, i); orig_size += gt_file_size(seqfile); } enc_size += index_size(indexname, GT_ALPHABETFILESUFFIX); enc_size += index_size(indexname, GT_ENCSEQFILESUFFIX); enc_size += index_size(indexname, GT_SSPTABFILESUFFIX); enc_size += index_size(indexname, GT_DESTABFILESUFFIX); enc_size += index_size(indexname, GT_SDSTABFILESUFFIX); enc_size += index_size(indexname, GT_OISTABFILESUFFIX); printf("encoded sequence file(s) are %.1f%% of original file size\n", ((double) enc_size / orig_size) * 100.0); } static int gt_encseq_encode_runner(GT_UNUSED int argc, const char **argv, int parsed_args, GT_UNUSED void *tool_arguments, GtError *err) { int had_err = 0, i; GtEncseqEncodeArguments *arguments = (GtEncseqEncodeArguments*) tool_arguments; GtStrArray *infiles; gt_error_check(err); infiles = gt_str_array_new(); for (i = parsed_args; i < argc; i++) { gt_str_array_add_cstr(infiles, argv[i]); } if (gt_str_length(arguments->indexname) == 0UL) { if (gt_str_array_size(infiles) > 1UL) { gt_error_set(err,"if more than one input file is given, then " "option -indexname is mandatory"); had_err = -1; } else { char *basenameptr; basenameptr = gt_basename(gt_str_array_get(infiles, 0UL)); gt_str_set(arguments->indexname, basenameptr); gt_free(basenameptr); } } if (!had_err) { gt_assert(gt_str_length(arguments->indexname) > 0UL); had_err = encode_sequence_files(infiles, arguments->eopts, gt_str_get(arguments->indexname), arguments->verbose, arguments->no_esq_header, err); } if (!had_err && arguments->showstats) show_encoded_statistics(infiles, gt_str_get(arguments->indexname)); gt_str_array_delete(infiles); return had_err; } GtTool* gt_encseq_encode(void) { return gt_tool_new(gt_encseq_encode_arguments_new, gt_encseq_encode_arguments_delete, gt_encseq_encode_option_parser_new, NULL, gt_encseq_encode_runner); } genometools-1.5.1/src/tools/gt_encseq_encode.h000066400000000000000000000016511211610345200214340ustar00rootroot00000000000000/* Copyright (c) 2010 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ENCSEQ_ENCODE_H #define GT_ENCSEQ_ENCODE_H #include "core/tool_api.h" /* the encseq encode tool */ GtTool* gt_encseq_encode(void); #endif genometools-1.5.1/src/tools/gt_encseq_info.c000066400000000000000000000313201211610345200211210ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/encseq_metadata.h" #include "core/ma.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "tools/gt_encseq_info.h" typedef struct { bool nomap, mirror, noindexname, show_alphabet; GtOutputFileInfo *ofi; GtFile *outfp; } GtEncseqInfoArguments; static void* gt_encseq_info_arguments_new(void) { GtEncseqInfoArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_encseq_info_arguments_delete(void *tool_arguments) { GtEncseqInfoArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_encseq_info_option_parser_new(void *tool_arguments) { GtEncseqInfoArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optionnomap; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] indexname", "Display meta-information about an " "encoded sequence."); optionnomap = gt_option_new_bool("nomap", "do not map encoded sequence " "(gives less information)", &arguments->nomap, false); gt_option_parser_add_option(op, optionnomap); option = gt_option_new_bool("mirrored", "use mirrored encoded sequence " "(DNA only)", &arguments->mirror, false); gt_option_parser_add_option(op, option); gt_option_exclude(optionnomap, option); option = gt_option_new_bool("noindexname", "do not output index name", &arguments->noindexname, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("show_alphabet", "output alphabet definition", &arguments->show_alphabet, false); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_min_max_args(op, 1, 1); return op; } static int gt_encseq_info_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtEncseqInfoArguments *arguments = tool_arguments; int had_err = 0; GtAlphabet *alpha; const GtUchar *chars; gt_error_check(err); gt_assert(arguments); if (arguments->nomap) { GtEncseqMetadata *emd = gt_encseq_metadata_new(argv[parsed_args], err); if (!emd) had_err = -1; if (!had_err) { if (!arguments->noindexname) { gt_file_xprintf(arguments->outfp, "index name: "); gt_file_xprintf(arguments->outfp, "%s\n", argv[parsed_args]); } gt_file_xprintf(arguments->outfp, "file format version: "); gt_file_xprintf(arguments->outfp, "%lu\n", gt_encseq_metadata_version(emd)); gt_file_xprintf(arguments->outfp, "64-bit file: "); gt_file_xprintf(arguments->outfp, "%s\n", gt_encseq_metadata_is64bit(emd) ? "yes" : "no"); gt_file_xprintf(arguments->outfp, "total length: "); gt_file_xprintf(arguments->outfp, "%lu\n", gt_encseq_metadata_total_length(emd)); gt_file_xprintf(arguments->outfp, "number of sequences: "); gt_file_xprintf(arguments->outfp, "%lu\n", gt_encseq_metadata_num_of_sequences(emd)); gt_file_xprintf(arguments->outfp, "number of files: "); gt_file_xprintf(arguments->outfp, "%lu\n", gt_encseq_metadata_num_of_files(emd)); gt_file_xprintf(arguments->outfp, "length of shortest/longest " "sequence: "); gt_file_xprintf(arguments->outfp, "%lu/%lu\n", gt_encseq_metadata_min_seq_length(emd), gt_encseq_metadata_max_seq_length(emd)); gt_file_xprintf(arguments->outfp, "accesstype: "); gt_file_xprintf(arguments->outfp, "%s\n", gt_encseq_access_type_str(gt_encseq_metadata_accesstype(emd))); alpha = gt_encseq_metadata_alphabet(emd); chars = gt_alphabet_characters(alpha); gt_file_xprintf(arguments->outfp, "alphabet size: "); gt_file_xprintf(arguments->outfp, "%u\n", gt_alphabet_num_of_chars(alpha)); gt_file_xprintf(arguments->outfp, "alphabet characters: "); gt_file_xprintf(arguments->outfp, "%.*s", gt_alphabet_num_of_chars(alpha), (char*) chars); if (gt_alphabet_is_dna(alpha)) gt_file_xprintf(arguments->outfp, " (DNA)"); if (gt_alphabet_is_protein(alpha)) gt_file_xprintf(arguments->outfp, " (Protein)"); gt_file_xprintf(arguments->outfp, "\n"); if (arguments->show_alphabet) { GtStr *out = gt_str_new(); gt_alphabet_to_str(alpha, out); gt_file_xprintf(arguments->outfp, "alphabet definition:\n"); gt_file_xprintf(arguments->outfp, "%s\n", gt_str_get(out)); gt_str_delete(out); } } gt_encseq_metadata_delete(emd); } else { GtEncseqLoader *encseq_loader; GtEncseq *encseq; encseq_loader = gt_encseq_loader_new(); if (arguments->mirror) gt_encseq_loader_mirror(encseq_loader); if (!(encseq = gt_encseq_loader_load(encseq_loader, argv[parsed_args], err))) had_err = -1; if (!had_err) { const GtStrArray *filenames; unsigned long i; if (!arguments->noindexname) { gt_file_xprintf(arguments->outfp, "index name: "); gt_file_xprintf(arguments->outfp, "%s\n", argv[parsed_args]); } gt_file_xprintf(arguments->outfp, "file format version: "); gt_file_xprintf(arguments->outfp, "%lu\n", gt_encseq_version(encseq)); gt_file_xprintf(arguments->outfp, "64-bit file: "); gt_file_xprintf(arguments->outfp, "%s\n", gt_encseq_is_64_bit(encseq) ? "yes" : "no"); gt_file_xprintf(arguments->outfp, "total length: "); gt_file_xprintf(arguments->outfp, "%lu\n", gt_encseq_total_length(encseq)); gt_file_xprintf(arguments->outfp, "compressed size: "); gt_file_xprintf(arguments->outfp, "%lu bytes\n", gt_encseq_sizeofrep(encseq)); gt_file_xprintf(arguments->outfp, "number of sequences: "); gt_file_xprintf(arguments->outfp, "%lu\n", gt_encseq_num_of_sequences(encseq)); gt_file_xprintf(arguments->outfp, "number of files: "); gt_file_xprintf(arguments->outfp, "%lu\n", gt_encseq_num_of_files(encseq)); gt_file_xprintf(arguments->outfp, "length of shortest/longest " "sequence: "); gt_file_xprintf(arguments->outfp, "%lu/%lu\n", gt_encseq_min_seq_length(encseq), gt_encseq_max_seq_length(encseq)); filenames = gt_encseq_filenames(encseq); gt_file_xprintf(arguments->outfp, "original filenames:\n"); for (i = 0; i < gt_str_array_size(filenames); i++) { gt_file_xprintf(arguments->outfp, "\t%s (%lu characters)\n", gt_str_array_get(filenames, i), (unsigned long) gt_encseq_effective_filelength(encseq, i)); } alpha = gt_encseq_alphabet(encseq); chars = gt_alphabet_characters(alpha); gt_file_xprintf(arguments->outfp, "alphabet size: "); gt_file_xprintf(arguments->outfp, "%u\n", gt_alphabet_num_of_chars(alpha)); gt_file_xprintf(arguments->outfp, "alphabet characters: "); gt_file_xprintf(arguments->outfp, "%.*s", gt_alphabet_num_of_chars(alpha), (char*) chars); if (gt_alphabet_is_dna(alpha)) gt_file_xprintf(arguments->outfp, " (DNA)"); if (gt_alphabet_is_protein(alpha)) gt_file_xprintf(arguments->outfp, " (Protein)"); gt_file_xprintf(arguments->outfp, "\n"); if (arguments->show_alphabet) { GtStr *out = gt_str_new(); gt_alphabet_to_str(alpha, out); gt_file_xprintf(arguments->outfp, "alphabet definition:\n"); gt_file_xprintf(arguments->outfp, "%s\n", gt_str_get(out)); gt_str_delete(out); } gt_file_xprintf(arguments->outfp, "character distribution:\n"); for (i = 0; i < gt_alphabet_num_of_chars(alpha); i++) { unsigned long cc; cc = gt_encseq_charcount(encseq, gt_alphabet_encode(alpha, chars[i])); gt_file_xprintf(arguments->outfp, "\t%c: %lu (%.2f%%)\n", (char) chars[i], cc, (cc /(double) (gt_encseq_total_length(encseq) - gt_encseq_num_of_sequences(encseq)+1))*100); } gt_file_xprintf(arguments->outfp, "number of wildcards: "); gt_file_xprintf(arguments->outfp, "%lu (%lu range(s))\n", gt_encseq_wildcards(encseq), gt_encseq_realwildcardranges(encseq)); gt_file_xprintf(arguments->outfp, "number of special characters: "); gt_file_xprintf(arguments->outfp, "%lu (%lu range(s))\n", gt_encseq_specialcharacters(encseq), gt_encseq_realspecialranges(encseq)); gt_file_xprintf(arguments->outfp, "length of longest non-special " "character stretch: "); gt_file_xprintf(arguments->outfp, "%lu\n", gt_encseq_lengthoflongestnonspecial(encseq)); gt_file_xprintf(arguments->outfp, "accesstype: "); gt_file_xprintf(arguments->outfp, "%s\n", gt_encseq_access_type_str(gt_encseq_accesstype_get(encseq))); gt_file_xprintf(arguments->outfp, "bits used per character: "); gt_file_xprintf(arguments->outfp, "%f\n", (double) ((uint64_t) CHAR_BIT * (uint64_t) gt_encseq_sizeofrep(encseq)) / (double) gt_encseq_total_length(encseq)); gt_file_xprintf(arguments->outfp, "has special ranges: "); gt_file_xprintf(arguments->outfp, "%s\n", gt_encseq_has_specialranges(encseq) ? "yes" : "no"); gt_file_xprintf(arguments->outfp, "has description support: "); gt_file_xprintf(arguments->outfp, "%s\n", gt_encseq_has_description_support(encseq) ? "yes" : "no"); gt_file_xprintf(arguments->outfp, "has multiple sequence support: "); gt_file_xprintf(arguments->outfp, "%s\n", gt_encseq_has_multiseq_support(encseq) ? "yes" : "no"); } gt_encseq_delete(encseq); gt_encseq_loader_delete(encseq_loader); } return had_err; } GtTool* gt_encseq_info(void) { return gt_tool_new(gt_encseq_info_arguments_new, gt_encseq_info_arguments_delete, gt_encseq_info_option_parser_new, NULL, gt_encseq_info_runner); } genometools-1.5.1/src/tools/gt_encseq_info.h000066400000000000000000000017551211610345200211370ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ENCSEQ_INFO_H #define GT_ENCSEQ_INFO_H #include "core/tool_api.h" /* the encseq info tool */ GtTool* gt_encseq_info(void); #endif genometools-1.5.1/src/tools/gt_encseq_md5.c000066400000000000000000000104651211610345200206620ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/ma.h" #include "core/md5_fingerprint_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "tools/gt_encseq_md5.h" typedef struct { GtOutputFileInfo *ofi; GtFile *outfp; bool fromindex; } GtEncseqInfoArguments; static void* gt_encseq_md5_arguments_new(void) { GtEncseqInfoArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_encseq_md5_arguments_delete(void *tool_arguments) { GtEncseqInfoArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_encseq_md5_option_parser_new(void *tool_arguments) { GtEncseqInfoArguments *arguments = tool_arguments; GtOption *option; GtOptionParser *op; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] indexname", "Display MD5 sums for an encoded sequence."); /* -fromindex */ option = gt_option_new_bool("fromindex", "use MD5 table from .md5 file", &arguments->fromindex, true); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_min_max_args(op, 1, 1); return op; } static int gt_encseq_md5_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtEncseqInfoArguments *arguments = tool_arguments; int had_err = 0; GtEncseqLoader *encseq_loader; GtEncseq *encseq; gt_error_check(err); gt_assert(arguments); encseq_loader = gt_encseq_loader_new(); if (!(encseq = gt_encseq_loader_load(encseq_loader, argv[parsed_args], err))) had_err = -1; if (!had_err) { unsigned long i; if (arguments->fromindex) { GtMD5Tab *tab; if (!gt_encseq_has_md5_support(encseq)) { gt_error_set(err, "encoded sequence given by indexname \"%s\" does not " "have MD5 support", argv[parsed_args]); had_err = -1; } if (!had_err) { tab = gt_encseq_get_md5_tab(encseq, err); if (tab) { for (i = 0; i < gt_encseq_num_of_sequences(encseq); i++) { gt_file_xprintf(arguments->outfp, "%lu: %s\n", i, gt_md5_tab_get(tab, i)); } gt_md5_tab_delete(tab); } else had_err = -1; } } else { char *seq, *md5str; for (i = 0; i < gt_encseq_num_of_sequences(encseq); i++) { unsigned long len, start, end; len = gt_encseq_seqlength(encseq, i); start = gt_encseq_seqstartpos(encseq, i); end = len + start -1; seq = gt_malloc(len * sizeof (char)); gt_encseq_extract_decoded(encseq, seq, start, end); md5str = gt_md5_fingerprint(seq, len); gt_file_xprintf(arguments->outfp, "%lu: %s\n", i, md5str); gt_free(seq); gt_free(md5str); } } } gt_encseq_delete(encseq); gt_encseq_loader_delete(encseq_loader); return had_err; } GtTool* gt_encseq_md5(void) { return gt_tool_new(gt_encseq_md5_arguments_new, gt_encseq_md5_arguments_delete, gt_encseq_md5_option_parser_new, NULL, gt_encseq_md5_runner); } genometools-1.5.1/src/tools/gt_encseq_md5.h000066400000000000000000000017511211610345200206650ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ENCSEQ_MD5_H #define GT_ENCSEQ_MD5_H #include "core/tool_api.h" /* the encseq md5 tool */ GtTool* gt_encseq_md5(void); #endif genometools-1.5.1/src/tools/gt_eval.c000066400000000000000000000136371211610345200175720ustar00rootroot00000000000000/* Copyright (c) 2006-2011 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma_api.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "extended/gff3_in_stream.h" #include "extended/gtdatahelp.h" #include "extended/stream_evaluator.h" #include "tools/gt_eval.h" typedef struct { bool verbose, exondiff, exondiffcollapsed, nuceval, evalLTR; unsigned long LTRdelta; GtOutputFileInfo *ofi; GtFile *outfp; } EvalArguments; static void* gt_eval_arguments_new(void) { EvalArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_eval_arguments_delete(void *tool_arguments) { EvalArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_eval_option_parser_new(void *tool_arguments) { EvalArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *ltroption, *ltrdeltaoption; gt_assert(arguments); op = gt_option_parser_new("reference_file prediction_file ", "Compare annotation files and show " "accuracy measures (prediction vs. reference)."); /* -exondiff */ option = gt_option_new_bool("exondiff", "show a diff for the exons", &arguments->exondiff, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -exondiffcollapsed */ option = gt_option_new_bool("exondiffcollapsed", "show a diff for the " "collapsed exons", &arguments->exondiffcollapsed, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -nuc */ option = gt_option_new_bool("nuc", "evaluate nucleotide level (memory consumption " "is proportional to the input file sizes)", &arguments->nuceval, true); gt_option_parser_add_option(op, option); /* -ltr */ ltroption = gt_option_new_bool("ltr", "evaluate a LTR retrotransposon " "prediction instead of a gene prediction\n" "(all LTR_retrotransposon elements are " "considered to have an undetermined strand)", &arguments->evalLTR, false); gt_option_parser_add_option(op, ltroption); /* -ltrdelta */ ltrdeltaoption = gt_option_new_ulong("ltrdelta", "set allowed delta for LTR " "borders to be considered equal", &arguments->LTRdelta, 20); gt_option_parser_add_option(op, ltrdeltaoption); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); /* option implications */ gt_option_imply(ltrdeltaoption, ltroption); /* set comment function */ gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); /* set minimum and maximum number of arguments */ gt_option_parser_set_min_max_args(op, 2, 2); return op; } int gt_eval_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { EvalArguments *arguments = tool_arguments; GtNodeStream *reference_stream, *prediction_stream; GtStreamEvaluator *evaluator; int had_err; gt_error_check(err); gt_assert(arguments); /* create the reference stream */ reference_stream = gt_gff3_in_stream_new_sorted(argv[parsed_args]); if (arguments->verbose) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) reference_stream); /* create the prediction stream */ prediction_stream = gt_gff3_in_stream_new_sorted(argv[parsed_args + 1]); if (arguments->verbose) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) prediction_stream); /* create the stream evaluator */ evaluator = gt_stream_evaluator_new(reference_stream, prediction_stream, arguments->nuceval, arguments->evalLTR, arguments->LTRdelta); /* compute the evaluation */ had_err = gt_stream_evaluator_evaluate(evaluator, arguments->verbose, arguments->exondiff, arguments->exondiffcollapsed, NULL, err); /* show the evaluation */ if (!had_err) gt_stream_evaluator_show(evaluator, arguments->outfp); /* free */ gt_stream_evaluator_delete(evaluator); gt_node_stream_delete(prediction_stream); gt_node_stream_delete(reference_stream); return had_err; } GtTool* gt_eval(void) { return gt_tool_new(gt_eval_arguments_new, gt_eval_arguments_delete, gt_eval_option_parser_new, NULL, gt_eval_runner); } genometools-1.5.1/src/tools/gt_eval.h000066400000000000000000000017471211610345200175760ustar00rootroot00000000000000/* Copyright (c) 2006-2007, 2011 Gordon Gremme Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_EVAL_H #define GT_EVAL_H #include "core/tool_api.h" /* the evaluation tool */ GtTool* gt_eval(void); #endif genometools-1.5.1/src/tools/gt_extractfeat.c000066400000000000000000000137651211610345200211570ustar00rootroot00000000000000/* Copyright (c) 2006-2011 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "extended/extract_feature_stream_api.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/gtdatahelp.h" #include "extended/seqid2file.h" #include "tools/gt_extractfeat.h" typedef struct { bool join, translate, seqid, target, verbose; GtStr *type; GtSeqid2FileInfo *s2fi; unsigned long width; GtOutputFileInfo *ofi; GtFile *outfp; } GtExtractFeatArguments; static void* gt_extractfeat_arguments_new(void) { GtExtractFeatArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->type = gt_str_new(); arguments->s2fi = gt_seqid2file_info_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_extractfeat_arguments_delete(void *tool_arguments) { GtExtractFeatArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_seqid2file_info_delete(arguments->s2fi); gt_str_delete(arguments->type); gt_free(arguments); } static GtOptionParser* gt_extractfeat_option_parser_new(void *tool_arguments) { GtExtractFeatArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); op = gt_option_parser_new("[option ...] [GFF3_file]", "Extract features given in GFF3 file from " "sequence file."); /* -type */ option = gt_option_new_string("type", "set type of features to extract", arguments->type, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); /* -join */ option = gt_option_new_bool("join", "join feature sequences in the same " "subgraph into a single one", &arguments->join, false); gt_option_parser_add_option(op, option); /* -translate */ option = gt_option_new_bool("translate", "translate the features (of a DNA " "sequence) into protein", &arguments->translate, false); gt_option_parser_add_option(op, option); /* -seqid */ option = gt_option_new_bool("seqid", "add sequence ID of extracted features " "to FASTA descriptions", &arguments->seqid, false); gt_option_parser_add_option(op, option); /* -target */ option = gt_option_new_bool("target", "add target ID(s) of extracted " "features to FASTA descriptions", &arguments->target, false); gt_option_parser_add_option(op, option); /* -seqfile, -matchdesc, -usedesc and -regionmapping */ gt_seqid2file_register_options(op, arguments->s2fi); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* -width */ option = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); gt_option_parser_set_max_args(op, 1); return op; } static int gt_extractfeat_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtNodeStream *gff3_in_stream = NULL, *extract_feature_stream = NULL; GtExtractFeatArguments *arguments = tool_arguments; GtRegionMapping *region_mapping; int had_err = 0; gt_error_check(err); gt_assert(arguments); if (!had_err) { /* create gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_sorted(argv[parsed_args]); if (arguments->verbose) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); /* create region mapping */ region_mapping = gt_seqid2file_region_mapping_new(arguments->s2fi, err); if (!region_mapping) had_err = -1; } if (!had_err) { /* create extract feature stream */ extract_feature_stream = gt_extract_feature_stream_new(gff3_in_stream, region_mapping, gt_str_get(arguments->type), arguments->join, arguments->translate, arguments->seqid, arguments->target, arguments->width, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(extract_feature_stream, err); } /* free */ gt_node_stream_delete(extract_feature_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool* gt_extractfeat(void) { return gt_tool_new(gt_extractfeat_arguments_new, gt_extractfeat_arguments_delete, gt_extractfeat_option_parser_new, NULL, gt_extractfeat_runner); } genometools-1.5.1/src/tools/gt_extractfeat.h000066400000000000000000000017651211610345200211610ustar00rootroot00000000000000/* Copyright (c) 2006-2008 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_EXTRACTFEAT_H #define GT_EXTRACTFEAT_H #include "core/tool_api.h" /* the extract feature tool */ GtTool* gt_extractfeat(void); #endif genometools-1.5.1/src/tools/gt_extractseq.c000066400000000000000000000257511211610345200210260ustar00rootroot00000000000000/* Copyright (c) 2007-2009 Gordon Gremme Copyright (c) 2007-2009 Stefan Kurtz Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/bioseq_iterator.h" #include "core/fasta.h" #include "core/grep_api.h" #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "match/giextract.h" #include "extended/gtdatahelp.h" #include "tools/gt_extractseq.h" #define FROMPOS_OPTION_STR "frompos" #define TOPOS_OPTION_STR "topos" typedef struct { GtStr *pattern, *fastakeyfile; unsigned long frompos, topos, width; GtOutputFileInfo *ofi; GtFile *outfp; } ExtractSeqArguments; static void* gt_extractseq_arguments_new(void) { ExtractSeqArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->pattern = gt_str_new(); arguments->fastakeyfile = gt_str_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_extractseq_arguments_delete(void *tool_arguments) { ExtractSeqArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_str_delete(arguments->fastakeyfile); gt_str_delete(arguments->pattern); gt_free(arguments); } static GtOptionParser* gt_extractseq_option_parser_new(void *tool_arguments) { ExtractSeqArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *frompos_option, *topos_option, *match_option, *width_option, *fastakeyfile_option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [sequence_file(s)] | fastaindex", "Extract sequences from given sequence file(s) or " "fastaindex."); /* -frompos */ frompos_option = gt_option_new_ulong_min(FROMPOS_OPTION_STR, "extract sequence from this position\n" "counting from 1 on", &arguments->frompos, 0, 1UL); gt_option_parser_add_option(op, frompos_option); /* -topos */ topos_option = gt_option_new_ulong_min(TOPOS_OPTION_STR, "extract sequence up to this position\n" "counting from 1 on", &arguments->topos, 0, 1UL); gt_option_parser_add_option(op, topos_option); /* -match */ match_option = gt_option_new_string("match", "extract all sequences whose " "description matches the given pattern.\n" "The given pattern must be a valid extended " "regular expression.", arguments->pattern, NULL); gt_option_parser_add_option(op, match_option); /* -keys */ fastakeyfile_option = gt_option_new_filename("keys", "extract substrings for keys " "in specified file", arguments->fastakeyfile); gt_option_parser_add_option(op, fastakeyfile_option); /* -width */ width_option = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, width_option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); /* option implications */ gt_option_imply(frompos_option, topos_option); gt_option_imply(topos_option, frompos_option); /* option exclusions */ gt_option_exclude(frompos_option, match_option); gt_option_exclude(topos_option, match_option); gt_option_exclude(frompos_option, fastakeyfile_option); gt_option_exclude(match_option, fastakeyfile_option); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); return op; } static int gt_extractseq_arguments_check(GT_UNUSED int argc, void *tool_arguments, GtError *err) { ExtractSeqArguments *arguments = tool_arguments; gt_error_check(err); gt_assert(arguments); if (arguments->frompos > arguments->topos) { gt_error_set(err, "argument to option '-%s' must be <= argument to option '-%s'", FROMPOS_OPTION_STR, TOPOS_OPTION_STR); return -1; } return 0; } static int extractseq_pos(GtFile *outfp, GtBioseq *bs, unsigned long frompos, unsigned long topos, unsigned long width, GtError *err) { int had_err = 0; GtStr *buf; char *out = NULL; unsigned long accupos = 0, newstartpos = 0, len = topos - frompos + 1, i = 0; gt_assert(bs); gt_error_check(err); if (frompos > gt_bioseq_get_total_length(bs) || topos > gt_bioseq_get_total_length(bs)) { gt_error_set(err, "invalid position pair %lu-%lu one value is larger than " "sequence length %lu", frompos, topos, gt_bioseq_get_total_length(bs)); return -1; } frompos--; topos--; buf = gt_str_new(); /* look for beginning of sequence */ while (accupos + gt_bioseq_get_sequence_length(bs, i) <= frompos && i < gt_bioseq_number_of_sequences(bs)) { accupos += gt_bioseq_get_sequence_length(bs, i); i++; } if (i == 0) { newstartpos = frompos; accupos = frompos; } else { gt_assert(accupos > 0); newstartpos = frompos - accupos; } /* do we need to cross a sequence boundary to print the full output? */ if (len <= gt_bioseq_get_sequence_length(bs, i) - newstartpos) { /* no, just print */ out = gt_bioseq_get_sequence_range(bs, i, newstartpos, newstartpos + len - 1); gt_str_append_cstr_nt(buf, out, len); gt_free(out); } else { /* yes, first output the part on this sequence... */ unsigned long restlen = gt_bioseq_get_sequence_length(bs, i) - newstartpos, restfulllen = topos - accupos + 1; out = gt_bioseq_get_sequence_range(bs, i, newstartpos, newstartpos + restlen - 1); restfulllen -= restlen; gt_str_append_cstr_nt(buf, out, restlen); gt_free(out); i++; /* ...then determine whether we need to output full seqs in between... */ while (restfulllen > gt_bioseq_get_sequence_length(bs, i) && i < gt_bioseq_number_of_sequences(bs) - 1) { unsigned long thislen = gt_bioseq_get_sequence_length(bs, i); out = gt_bioseq_get_sequence_range(bs, i, 0, thislen - 1); gt_str_append_cstr_nt(buf, out, thislen); gt_free(out); restfulllen -= thislen; i++; } /* ...then output the last sequence */ if (restfulllen > 0) { out = gt_bioseq_get_sequence_range(bs, i, 0, restfulllen - 1); gt_str_append_cstr_nt(buf, out, restfulllen); gt_free(out); } } gt_fasta_show_entry(NULL, gt_str_get(buf), gt_str_length(buf), width, outfp); gt_str_delete(buf); return had_err; } static int extractseq_match(GtFile *outfp, GtBioseq *bs, const char *pattern, unsigned long width, GtError *err) { const char *desc; unsigned long i; bool match; int had_err = 0; gt_error_check(err); gt_assert(bs && pattern); for (i = 0; !had_err && i < gt_bioseq_number_of_sequences(bs); i++) { desc = gt_bioseq_get_description(bs, i); gt_assert(desc); had_err = gt_grep(&match, pattern, desc, err); if (!had_err && match) { char *out = gt_bioseq_get_sequence(bs, i); gt_fasta_show_entry(desc, out, gt_bioseq_get_sequence_length(bs, i), width, outfp); gt_free(out); } } return had_err; } static int process_fastakeyfile(GtStr *fastakeyfile, int argc, const char **argv, unsigned long width, GtFile *outfp, GtError *err) { int had_err = 0; gt_error_check(err); gt_assert(gt_str_length(fastakeyfile)); if (argc == 0) { gt_error_set(err,"option -keys requires at least one file argument"); had_err = -1; } if (!had_err) { const char *indexname = argv[0]; if (argc == 1 && gt_deskeysfileexists(indexname)) { if (gt_extractkeysfromfastaindex(indexname,fastakeyfile,width,err) != 0) { had_err = -1; } } else { GtStrArray *referencefiletab; int i; referencefiletab = gt_str_array_new(); for (i = 0; i < argc; i++) { gt_str_array_add_cstr(referencefiletab, argv[i]); } if (gt_extractkeysfromfastafile(true, outfp, width, fastakeyfile, referencefiletab, err) != 1) { had_err = -1; } gt_str_array_delete(referencefiletab); } } return had_err; } static int gt_extractseq_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { ExtractSeqArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); if (gt_str_length(arguments->fastakeyfile)) { had_err = process_fastakeyfile(arguments->fastakeyfile, argc - parsed_args, argv + parsed_args, arguments->width, arguments->outfp, err); } else { GtBioseqIterator *bsi; GtBioseq *bs; bsi = gt_bioseq_iterator_new(argc - parsed_args, argv + parsed_args); while (!had_err && !(had_err = gt_bioseq_iterator_next(bsi, &bs, err)) && bs) { if (arguments->frompos) { had_err = extractseq_pos(arguments->outfp, bs, arguments->frompos, arguments->topos, arguments->width, err); } else { had_err = extractseq_match(arguments->outfp, bs, gt_str_get(arguments->pattern), arguments->width, err); } gt_bioseq_delete(bs); } gt_bioseq_iterator_delete(bsi); } return had_err; } GtTool* gt_extractseq(void) { return gt_tool_new(gt_extractseq_arguments_new, gt_extractseq_arguments_delete, gt_extractseq_option_parser_new, gt_extractseq_arguments_check, gt_extractseq_runner); } genometools-1.5.1/src/tools/gt_extractseq.h000066400000000000000000000017631211610345200210300ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_EXTRACTSEQ_H #define GT_EXTRACTSEQ_H #include "core/tool_api.h" /* the extract sequence tool */ GtTool* gt_extractseq(void); #endif genometools-1.5.1/src/tools/gt_extracttarget.c000066400000000000000000000152331211610345200215160ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/bioseq.h" #include "core/cstr_api.h" #include "core/fasta.h" #include "core/ma.h" #include "core/option_api.h" #include "core/splitter.h" #include "core/unused_api.h" #include "extended/feature_node.h" #include "extended/feature_node_iterator_api.h" #include "extended/genome_node.h" #include "extended/gff3_escaping.h" #include "extended/gff3_in_stream.h" #include "extended/string_matching.h" #include "tools/gt_extracttarget.h" typedef struct { GtStrArray *seqfiles; } ExtractTargetArguments; static void* gt_extracttarget_arguments_new(void) { ExtractTargetArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->seqfiles = gt_str_array_new(); return arguments; } static void gt_extracttarget_arguments_delete(void *tool_arguments) { ExtractTargetArguments *arguments = tool_arguments; if (!arguments) return; gt_str_array_delete(arguments->seqfiles); gt_free(arguments); } static GtOptionParser* gt_extracttarget_option_parser_new(void *tool_arguments) { ExtractTargetArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *o; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] -seqfile sequence_file GFF3_file", "Extract target sequences given in GFF3_file from " "sequence_file."); /* -seqfile */ o = gt_option_new_filename_array("seqfiles", "set the sequence file from which " "to extract the features", arguments->seqfiles); gt_option_is_mandatory(o); gt_option_parser_add_option(op, o); gt_option_parser_set_min_max_args(op, 1, 1); return op; } typedef struct { GtBioseq *bioseq; unsigned long seqnum; } TargetInfo; static bool show_target(GT_UNUSED unsigned long pos, void *data) { TargetInfo *ti = data; char *seq; gt_assert(ti); seq = gt_bioseq_get_sequence(ti->bioseq, ti->seqnum); gt_fasta_show_entry(gt_bioseq_get_description(ti->bioseq, ti->seqnum), seq, gt_bioseq_get_sequence_length(ti->bioseq, ti->seqnum), 0, NULL); gt_free(seq); return true; } static int extracttarget_from_seqfiles(const char *target, GtStrArray *seqfiles, GtError *err) { GtStr *unescaped_target; char *escaped_target; GtSplitter *splitter; unsigned long i; int had_err = 0; gt_error_check(err); gt_assert(target && seqfiles); splitter = gt_splitter_new(); unescaped_target = gt_str_new(); escaped_target = gt_cstr_dup(target); gt_splitter_split(splitter, escaped_target, strlen(escaped_target), ','); for (i = 0; !had_err && i < gt_splitter_size(splitter); i++) { GtSplitter *blank_splitter; char *token = gt_splitter_get_token(splitter, i); blank_splitter = gt_splitter_new(); gt_splitter_split(blank_splitter, token, strlen(token), ' '); had_err = gt_gff3_unescape(unescaped_target, gt_splitter_get_token(blank_splitter, 0), strlen(gt_splitter_get_token(blank_splitter, 0)), err); if (!had_err) { unsigned long j; for (j = 0; j < gt_str_array_size(seqfiles); j++) { unsigned long k; GtBioseq *bioseq; if (!(bioseq = gt_bioseq_new(gt_str_array_get(seqfiles, j), err))) { had_err = -1; break; } for (k = 0; k < gt_bioseq_number_of_sequences(bioseq); k++) { TargetInfo target_info; const char *desc = gt_bioseq_get_description(bioseq, k); target_info.bioseq = bioseq; target_info.seqnum = k; gt_string_matching_bmh(desc, strlen(desc), gt_str_get(unescaped_target), gt_str_length(unescaped_target), show_target, &target_info); } gt_bioseq_delete(bioseq); } } gt_splitter_delete(blank_splitter); } gt_free(escaped_target); gt_str_delete(unescaped_target); gt_splitter_delete(splitter); return had_err; } static int extracttarget_from_node(GtGenomeNode *gn, GtStrArray *seqfiles, GtError *err) { GtFeatureNodeIterator *fni; int had_err = 0; gt_error_check(err); gt_assert(gn && seqfiles); /* XXX */ if (gt_genome_node_cast(gt_feature_node_class(), gn)) { const char *target; GtFeatureNode *child; fni = gt_feature_node_iterator_new(gt_feature_node_cast(gn)); while (!had_err && /* XXX remove cast */ (child = (GtFeatureNode*) gt_feature_node_iterator_next(fni))) { if ((target = gt_feature_node_get_attribute(child, "Target"))) had_err = extracttarget_from_seqfiles(target, seqfiles, err); } gt_feature_node_iterator_delete(fni); } return had_err; } static int gt_extracttarget_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { ExtractTargetArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream; GtGenomeNode *gn; int had_err; gt_error_check(err); gt_assert(arguments); gff3_in_stream = gt_gff3_in_stream_new_unsorted(1, argv + parsed_args); while (!(had_err = gt_node_stream_next(gff3_in_stream, &gn, err)) && gn) { had_err = extracttarget_from_node(gn, arguments->seqfiles, err); gt_genome_node_delete(gn); } gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool* gt_extracttarget(void) { return gt_tool_new(gt_extracttarget_arguments_new, gt_extracttarget_arguments_delete, gt_extracttarget_option_parser_new, NULL, gt_extracttarget_runner); } genometools-1.5.1/src/tools/gt_extracttarget.h000066400000000000000000000017601211610345200215230ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_EXTRACTTARGET_H #define GT_EXTRACTTARGET_H #include "core/tool_api.h" /* the extract target tool */ GtTool* gt_extracttarget(void); #endif genometools-1.5.1/src/tools/gt_featureindex.c000066400000000000000000000264641211610345200213300ustar00rootroot00000000000000/* Copyright (c) 2009 Sascha Steinbiss Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/fileutils_api.h" #include "core/ma.h" #include "core/password_entry.h" #include "core/str_api.h" #include "core/unused_api.h" #include "extended/anno_db_gfflike_api.h" #include "extended/anno_db_schema_api.h" #include "extended/feature_index_api.h" #include "extended/feature_node.h" #include "extended/feature_stream_api.h" #include "extended/gff3_visitor.h" #include "extended/rdb_api.h" #ifdef HAVE_MYSQL #include "extended/rdb_mysql_api.h" #endif #ifdef HAVE_SQLITE #include "extended/rdb_sqlite_api.h" #endif #include "tools/gt_featureindex.h" #define GT_SQLITE_BACKEND_STRING "sqlite" #define GT_MYSQL_BACKEND_STRING "mysql" typedef struct { GtRange qry_rng; GtStr *seqid; GtStr *backend, *filename, *host, *user, *pass, *database; int port; bool verbose, retain, child_callback_check, attributes_callback_check; GtOption *rngopt; } GtFeatureindexArguments; static void* gt_featureindex_arguments_new(void) { GtFeatureindexArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->seqid = gt_str_new(); arguments->backend = gt_str_new(); arguments->filename = gt_str_new(); arguments->host = gt_str_new(); arguments->user = gt_str_new(); arguments->database = gt_str_new(); return arguments; } static void gt_featureindex_arguments_delete(void *tool_arguments) { GtFeatureindexArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->seqid); gt_str_delete(arguments->backend); gt_str_delete(arguments->filename); gt_str_delete(arguments->host); gt_str_delete(arguments->user); gt_str_delete(arguments->pass); gt_str_delete(arguments->database); gt_option_delete(arguments->rngopt); gt_free(arguments); } static GtOptionParser* gt_featureindex_option_parser_new(void *tool_arguments) { GtFeatureindexArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *backend_option, *filenameoption; static const char *backends[] = { #ifdef HAVE_SQLITE GT_SQLITE_BACKEND_STRING, #endif #ifdef HAVE_MYSQL GT_MYSQL_BACKEND_STRING, #endif NULL }; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] indexfilename", "Retrieve annotations from a persistent " "feature index as GFF3 output."); arguments->rngopt = gt_option_new_range("range", "range constraint for index query", &arguments->qry_rng, NULL); gt_option_parser_add_option(op, gt_option_ref(arguments->rngopt)); option = gt_option_new_string("seqid", "sequence region", arguments->seqid, NULL); gt_option_parser_add_option(op, option); option = gt_option_new_bool("retain", "retain attributes", &arguments->retain, true); gt_option_parser_add_option(op, option); /* -backend */ backend_option = gt_option_new_choice("backend", "database backend to use\n" "choose from [" #ifdef HAVE_SQLITE GT_SQLITE_BACKEND_STRING #endif #ifdef HAVE_MYSQL "|" GT_MYSQL_BACKEND_STRING #endif "]", arguments->backend, backends[0], backends); gt_option_parser_add_option(op, backend_option); /* -filename */ filenameoption = gt_option_new_string("filename", "filename for feature database " "(sqlite backend only)", arguments->filename, NULL); gt_option_parser_add_option(op, filenameoption); #ifdef HAVE_MYSQL /* -host */ option = gt_option_new_string("host", "hostname for database connection", arguments->host, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory_either(option, filenameoption); /* -user */ option = gt_option_new_string("user", "username for database connection", arguments->user, NULL); gt_option_parser_add_option(op, option); /* -database */ option = gt_option_new_string("database", "database name for database connection", arguments->database, NULL); gt_option_parser_add_option(op, option); /* -port */ option = gt_option_new_int_max("port", "port for database connection", &arguments->port, 3333, 65534); gt_option_parser_add_option(op, option); #else gt_option_is_mandatory(filenameoption); #endif option = gt_option_new_bool("child_check", "test callbacks for " "child node addition", &arguments->child_callback_check, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); option = gt_option_new_bool("attributes_check", "test callbacks for " "attribute modification", &arguments->attributes_callback_check, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); return op; } static int gt_featureindex_arguments_check(GT_UNUSED int rest_argc, GT_UNUSED void *tool_arguments, GT_UNUSED GtError *err) { GT_UNUSED GtFeatureindexArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); return had_err; } static int gt_featureindex_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtFeatureindexArguments *arguments = tool_arguments; GtFeatureIndex *fi = NULL; GtArray *results = NULL; GtRange rng; GtRDB *rdb = NULL; GtAnnoDBSchema *adbs = NULL; GtNodeVisitor *gff3visitor = NULL; GtGenomeNode *regn = NULL; unsigned long i = 0; int had_err = 0; gt_error_check(err); gt_assert(arguments); #ifdef HAVE_SQLITE if (!had_err) { if (strcmp(gt_str_get(arguments->backend), GT_SQLITE_BACKEND_STRING) == 0) { if (!gt_file_exists(gt_str_get(arguments->filename))) { gt_error_set(err, "file '%s' does not exist", gt_str_get(arguments->filename)); had_err = -1; } if (!had_err) { rdb = gt_rdb_sqlite_new(gt_str_get(arguments->filename), err); if (!rdb) had_err = -1; } } } #endif #ifdef HAVE_MYSQL if (!had_err) { if (strcmp(gt_str_get(arguments->backend), GT_MYSQL_BACKEND_STRING) == 0) { arguments->pass = gt_get_password("password: ", err); rdb = gt_rdb_mysql_new(gt_str_get(arguments->host), arguments->port, gt_str_get(arguments->database), gt_str_get(arguments->user), gt_str_get(arguments->pass), err); if (!rdb) had_err = -1; } } #endif if (!had_err) adbs = gt_anno_db_gfflike_new(); if (!had_err && !adbs) had_err = -1; if (!had_err) { fi = gt_anno_db_schema_get_feature_index(adbs, rdb, err); had_err = fi ? 0 : -1; } if (!had_err && gt_str_length(arguments->seqid) == 0) { char *firstseqid = gt_feature_index_get_first_seqid(fi, err); if (firstseqid == NULL) had_err = -1; else { gt_str_append_cstr(arguments->seqid, firstseqid); gt_free(firstseqid); } } if (!had_err && !gt_option_is_set(arguments->rngopt)) { had_err = gt_feature_index_get_range_for_seqid(fi, &arguments->qry_rng, gt_str_get(arguments->seqid), err); } if (!had_err) { results = gt_array_new(sizeof (GtFeatureNode*)); had_err = gt_feature_index_get_features_for_range(fi, results, gt_str_get(arguments->seqid), &arguments->qry_rng, err); } if (!had_err) { gff3visitor = gt_gff3_visitor_new(NULL); if (arguments->retain) gt_gff3_visitor_retain_id_attributes((GtGFF3Visitor*) gff3visitor); had_err = gt_feature_index_get_range_for_seqid(fi, &rng, gt_str_get(arguments->seqid), err); } if (!had_err) { regn = gt_region_node_new(arguments->seqid, rng.start, rng.end); gt_genome_node_accept(regn, gff3visitor, err); gt_genome_node_delete(regn); for (i=0; ichild_callback_check) { GtFeatureNode *fn; fn = (GtFeatureNode*) gt_feature_node_new(arguments->seqid, "test", nrng.start, nrng.end, GT_STRAND_FORWARD); gt_feature_node_add_child((GtFeatureNode*) gn, fn); } if (arguments->attributes_callback_check) { if (gt_feature_node_get_attribute(fgn, "foo")) { gt_feature_node_set_attribute(fgn, "foo", "boooo"); gt_feature_node_remove_attribute(fgn, "foo"); } gt_feature_node_add_attribute(fgn, "foo", "bar"); } } gt_genome_node_accept(gn, gff3visitor, err); gt_genome_node_delete(gn); } } gt_array_delete(results); gt_node_visitor_delete(gff3visitor); gt_rdb_delete(rdb); gt_anno_db_schema_delete(adbs); gt_feature_index_delete(fi); return had_err; } GtTool* gt_featureindex(void) { return gt_tool_new(gt_featureindex_arguments_new, gt_featureindex_arguments_delete, gt_featureindex_option_parser_new, gt_featureindex_arguments_check, gt_featureindex_runner); } genometools-1.5.1/src/tools/gt_featureindex.h000066400000000000000000000017611211610345200213260ustar00rootroot00000000000000/* Copyright (c) 2009 Sascha Steinbiss Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_FEATUREINDEX_H #define GT_FEATUREINDEX_H #include "core/tool_api.h" /* the featureindex tool */ GtTool* gt_featureindex(void); #endif genometools-1.5.1/src/tools/gt_fingerprint.c000066400000000000000000000312001211610345200211540ustar00rootroot00000000000000/* Copyright (c) 2008-2012 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/bioseq.h" #include "core/bioseq_col.h" #include "core/fa.h" #include "core/fasta.h" #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/seq_info_cache.h" #include "core/string_distri.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "extended/gtdatahelp.h" #include "tools/gt_fingerprint.h" typedef struct { bool show_duplicates, detect_collisions; GtStr *checklist, *extract; unsigned long width; GtOutputFileInfo *ofi; GtFile *outfp; } FingerprintArguments; static void* gt_fingerprint_arguments_new(void) { FingerprintArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->checklist = gt_str_new(); arguments->extract = gt_str_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_fingerprint_arguments_delete(void *tool_arguments) { FingerprintArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_str_delete(arguments->extract); gt_str_delete(arguments->checklist); gt_free(arguments); } static GtOptionParser* gt_fingerprint_option_parser_new(GT_UNUSED void *tool_arguments) { FingerprintArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *check_option, *collisions_option, *duplicates_option, *extract_option, *width_option; gt_assert(arguments); op = gt_option_parser_new("[option ...] sequence_file [...] ", "Compute MD5 fingerprints for each sequence given " "in sequence_file(s)."); /* -check */ check_option = gt_option_new_filename("check", "compare all fingerprints " "contained in the given checklist file " "with checksums in given " "sequence_files(s). The comparison is " "successful, if all fingerprints given " "in checkfile can be found in the " "sequence_file(s) in the exact same " "quantity and vice versa.", arguments->checklist); gt_option_parser_add_option(op, check_option); /* -duplicates */ duplicates_option = gt_option_new_bool("duplicates", "show duplicate " "fingerprints from given " "sequence_file(s).", &arguments->show_duplicates, false); gt_option_parser_add_option(op, duplicates_option); /* -collisions */ collisions_option = gt_option_new_bool("collisions", "detect hash collisions", &arguments->detect_collisions, false); gt_option_is_development_option(collisions_option); gt_option_parser_add_option(op, collisions_option); /* -extract */ extract_option = gt_option_new_string("extract", "extract the sequence(s) with " "the given fingerprint from " "sequence_file(s) and show them on " "stdout.", arguments->extract, NULL); gt_option_parser_add_option(op, extract_option); /* -width */ width_option = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, width_option); gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); /* option exclusions */ gt_option_exclude(check_option, duplicates_option); gt_option_exclude(extract_option, check_option); gt_option_exclude(extract_option, duplicates_option); gt_option_exclude(collisions_option, check_option); gt_option_exclude(collisions_option, duplicates_option); gt_option_exclude(collisions_option, extract_option); /* option implications */ gt_option_imply(width_option, extract_option); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); gt_option_parser_set_min_args(op, 1); return op; } static void proc_superfluous_sequence(const char *string, GT_UNUSED unsigned long occurrences, GT_UNUSED double probability, void *data) { bool *comparisons_failed = data; gt_assert(string && occurrences && comparisons_failed); printf("%s only in sequence_file(s)\n", string); *comparisons_failed = true; } static int compare_fingerprints(GtStringDistri *sd, const char *checklist, GtError *err) { bool comparisons_failed = false, use_stdin = false; FILE *checkfile; GtStr *line; gt_error_check(err); gt_assert(sd && checklist); if (!strcmp(checklist, "-")) use_stdin = true; checkfile = use_stdin ? stdin : gt_fa_xfopen(checklist, "r"); line = gt_str_new(); /* process checklist */ while (gt_str_read_next_line(line, checkfile) != EOF) { if (gt_string_distri_get(sd, gt_str_get(line))) gt_string_distri_sub(sd, gt_str_get(line)); else { printf("%s only in checklist\n", gt_str_get(line)); comparisons_failed = true; } gt_str_reset(line); } gt_str_delete(line); if (!use_stdin) gt_fa_xfclose(checkfile); /* process remaining sequence_file(s) fingerprints */ gt_string_distri_foreach(sd, proc_superfluous_sequence, &comparisons_failed); if (comparisons_failed) { gt_error_set(err, "fingerprint comparison failed"); return -1; } return 0; } typedef struct { unsigned long long duplicates, num_of_sequences; } FingerprintInfo; static void show_duplicate(const char *fingerprint, unsigned long occurrences, GT_UNUSED double probability, void *data) { FingerprintInfo *info = data; if (occurrences > 1) { printf("%s\t%lu\n", fingerprint, occurrences); info->duplicates += occurrences - 1; } info->num_of_sequences += occurrences; } static int show_duplicates(GtStringDistri *sd, GtError *err) { FingerprintInfo info; gt_error_check(err); gt_assert(sd); info.duplicates = 0; info.num_of_sequences = 0; gt_string_distri_foreach(sd, show_duplicate, &info); if (info.duplicates) { gt_error_set(err, "duplicates found: %llu out of %llu (%.3f%%)", info.duplicates, info.num_of_sequences, (((double) info.duplicates / info.num_of_sequences) * 100.0)); return -1; } return 0; } static int compare_md5s(GtBioseqCol *bsc, const GtSeqInfo *si, unsigned long filenum, unsigned long seqnum, const char *md5, GtError *err) { unsigned long i, seq_a_len, seq_b_len; char *seq_a_upper, *seq_b_upper; char *seq_a, *seq_b; int had_err = 0; gt_error_check(err); gt_assert(bsc && si && md5); seq_a_len = gt_seq_col_get_sequence_length((GtSeqCol*) bsc, si->filenum, si->seqnum); seq_b_len = gt_seq_col_get_sequence_length((GtSeqCol*) bsc, filenum, seqnum); seq_a = gt_seq_col_get_sequence((GtSeqCol*) bsc, si->filenum, si->seqnum, 0, seq_a_len - 1); seq_b = gt_seq_col_get_sequence((GtSeqCol*) bsc, filenum, seqnum, 0, seq_b_len - 1); seq_a_upper = gt_malloc((seq_a_len + 1) * sizeof (char)); seq_b_upper = gt_malloc((seq_b_len + 1) * sizeof (char)); for (i = 0; i < seq_a_len; i++) seq_a_upper[i] = toupper(seq_a[i]); for (i = 0; i < seq_b_len; i++) seq_b_upper[i] = toupper(seq_b[i]); gt_free(seq_a); gt_free(seq_b); seq_a_upper[seq_a_len] = '\0'; seq_b_upper[seq_b_len] = '\0'; if (strcmp(seq_a_upper, seq_b_upper)) { gt_error_set(err, "sequence collision detected for fingerprint '%s'", md5); had_err = -1; } gt_free(seq_b_upper); gt_free(seq_a_upper); return had_err; } static int detect_collisions_on_bsc(GtBioseqCol *bsc, GtError *err) { unsigned long filenum, seqnum; GtSeqInfoCache *sic; gt_error_check(err); gt_assert(bsc); int had_err = 0; sic = gt_seq_info_cache_new(); for (filenum = 0; !had_err && filenum < gt_seq_col_num_of_files((GtSeqCol*) bsc); filenum++) { for (seqnum = 0; !had_err && seqnum < gt_seq_col_num_of_seqs((GtSeqCol*) bsc, filenum); seqnum++) { const GtSeqInfo *si_ptr; const char *md5; md5 = gt_seq_col_get_md5_fingerprint((GtSeqCol*) bsc, filenum, seqnum); if ((si_ptr = gt_seq_info_cache_get(sic, md5))) had_err = compare_md5s(bsc, si_ptr, filenum, seqnum, md5, err); else { GtSeqInfo si; si.filenum = filenum; si.seqnum = seqnum; gt_seq_info_cache_add(sic, md5, &si); } } } gt_seq_info_cache_delete(sic); return had_err; } static int detect_collisions(int num_of_seqfiles, const char **seqfiles, GtError *err) { GtStrArray *sequence_files; GtSeqCol *sc; unsigned long i; int had_err = 0; gt_error_check(err); sequence_files = gt_str_array_new(); for (i = 0; i < num_of_seqfiles; i++) gt_str_array_add_cstr(sequence_files, seqfiles[i]); if (!(sc = gt_bioseq_col_new(sequence_files, err))) had_err = -1; if (!had_err) had_err = detect_collisions_on_bsc((GtBioseqCol*) sc, err); gt_seq_col_delete(sc); gt_str_array_delete(sequence_files); return had_err; } static int gt_fingerprint_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { FingerprintArguments *arguments = tool_arguments; bool extract_found = true; GtBioseq *bs; GtStringDistri *sd; unsigned long i, j; int had_err = 0; gt_error_check(err); gt_assert(arguments); sd = gt_string_distri_new(); if (gt_str_length(arguments->extract)) extract_found = false; /* process sequence files */ for (i = parsed_args; !had_err && i < argc; i++) { if (!(bs = gt_bioseq_new(argv[i], err))) had_err = -1; if (!had_err) { for (j = 0; j < gt_bioseq_number_of_sequences(bs); j++) { if (gt_str_length(arguments->checklist) || arguments->show_duplicates) gt_string_distri_add(sd, gt_bioseq_get_md5_fingerprint(bs, j)); else if (gt_str_length(arguments->extract)) { if (!strcmp(gt_bioseq_get_md5_fingerprint(bs, j), gt_str_get(arguments->extract))) { char *seq = gt_bioseq_get_sequence(bs, j); gt_fasta_show_entry(gt_bioseq_get_description(bs, j), seq, gt_bioseq_get_sequence_length(bs, j), arguments->width, arguments->outfp); gt_free(seq); extract_found = true; } } else if (!arguments->detect_collisions) gt_xputs(gt_bioseq_get_md5_fingerprint(bs, j)); } } gt_bioseq_delete(bs); } if (!had_err && !extract_found) { gt_error_set(err, "could not find sequence with fingerprint '%s' in given " "sequence file(s)", gt_str_get(arguments->extract)); had_err = -1; } if (!had_err) { if (gt_str_length(arguments->checklist)) had_err = compare_fingerprints(sd, gt_str_get(arguments->checklist), err); else if (arguments->show_duplicates) had_err = show_duplicates(sd, err); else if (arguments->detect_collisions) had_err = detect_collisions(argc - parsed_args, argv + parsed_args, err); } gt_string_distri_delete(sd); return had_err; } GtTool* gt_fingerprint(void) { return gt_tool_new(gt_fingerprint_arguments_new, gt_fingerprint_arguments_delete, gt_fingerprint_option_parser_new, NULL, gt_fingerprint_runner); } genometools-1.5.1/src/tools/gt_fingerprint.h000066400000000000000000000017471211610345200211760ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_FINGERPRINT_H #define GT_FINGERPRINT_H #include "core/tool_api.h" /* the fingerprint tool */ GtTool* gt_fingerprint(void); #endif genometools-1.5.1/src/tools/gt_gdiffcalc.c000066400000000000000000000254721211610345200205450ustar00rootroot00000000000000/* Copyright (c) 2012 Dirk Willrodt Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include "core/array2dim_api.h" #include "core/cstr_api.h" #include "core/encseq.h" #include "core/encseq_options.h" #include "core/fa.h" #include "core/log_api.h" #include "core/logger.h" #include "core/ma_api.h" #include "core/showtime.h" #include "core/warning_api.h" #include "core/tokenizer.h" #include "core/io.h" #include "extended/gtdatahelp.h" #include "match/esa-fileend.h" #include "match/genomediff_opt.h" #include "match/index_options.h" #include "match/sfx-opt.h" #include "match/sfx-run.h" #include "match/shu-genomediff.h" #include "tools/gt_gdiffcalc.h" static void* gt_gdiffcalc_arguments_new(void) { GtGenomediffArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->indexname = gt_str_new(); arguments->unitfile = gt_str_new(); arguments->indextype = gt_str_new(); arguments->filenames = gt_str_array_new(); arguments->with_esa = arguments->with_pck = false; return arguments; } static void gt_gdiffcalc_arguments_delete(void *tool_arguments) { GtGenomediffArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->indexname); gt_str_delete(arguments->unitfile); gt_str_delete(arguments->indextype); gt_str_array_delete(arguments->filenames); gt_option_delete(arguments->ref_unitfile); gt_encseq_options_delete(arguments->loadopts); gt_index_options_delete(arguments->idxopts); gt_free(arguments); } static GtOptionParser* gt_gdiffcalc_option_parser_new(void *tool_arguments) { GtGenomediffArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *option_unitfile; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] " "-indexname NAME AVGSHULEN) ", "Calculates Kr: pairwise distances between genomes."); /* options */ option = gt_option_new_string("indexname", "Basename of encseq to construct.", arguments->indexname, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); /*-unitfile*/ option_unitfile = gt_option_new_filename("unitfile", "specifies genomic units, see below for description", arguments->unitfile); gt_option_parser_add_option(op, option_unitfile); arguments->ref_unitfile = gt_option_ref(option_unitfile); /* encseq options */ arguments->loadopts = gt_encseq_options_register_loading(op, arguments->indexname); gt_option_is_development_option( gt_encseq_options_lossless_option(arguments->loadopts)); /* dev options */ /* -max_n */ option = gt_option_new_ulong("max_n", "Number of precalculated values " "for ln(n!) and pmax(x)", &arguments->max_ln_n_fac, 1000UL); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* thresholds */ /* divergence error */ option = gt_option_new_double("thr", "Threshold for difference (du, dl) in " "divergence calculation.\n" "default: 1e-9", &arguments->divergence_threshold, 1e-9); gt_option_is_extended_option(option); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* expected shulen error */ option = gt_option_new_double("abs_err", "absolute error for expected shulen " "calculation.\n" "default: 1e-5", &arguments->divergence_abs_err, 1e-5); gt_option_is_extended_option(option); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* relative expected shulen error */ option = gt_option_new_double("rel_err", "relative error for expected shulen " "calculation.\n" "default: 1e-3", &arguments->divergence_rel_err, 1e-3); gt_option_is_extended_option(option); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* M */ option = gt_option_new_double("M", "threshold for minimum logarithm.\n" "default: DBL_MIN", &arguments->divergence_m, DBL_MIN); gt_option_is_extended_option(option); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* mail */ gt_option_parser_set_mail_address(op, ""); /* doc */ gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); return op; } static int gt_gdiffcalc_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GT_UNUSED GtError *err) { GtGenomediffArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); gt_assert(rest_argc == 1); if (!had_err) arguments->with_units = gt_option_is_set(arguments->ref_unitfile); return had_err; } static int gt_gdiffcalc_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { GtGenomediffArguments *arguments = tool_arguments; int had_err = 0, i; unsigned long lcounter = 0, zcounter = 0; double **shusums = NULL; GtEncseq *encseq = NULL; GtLogger *logger; GtShuUnitFileInfo *unit_info = NULL; GtTimer *timer = NULL; gt_error_check(err); gt_assert(arguments); logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); gt_assert(logger); for (i = parsed_args; i < argc; i++) { gt_str_array_add_cstr(arguments->filenames, argv[i]); } if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description("load encseq"); gt_timer_start(timer); gt_assert(timer); } if (arguments->with_units) { gt_logger_log(logger, "unitfile option set, filename is %s\n", gt_str_get(arguments->unitfile)); } if (!had_err) { GtEncseqLoader *el = gt_encseq_loader_new_from_options(arguments->loadopts, err); encseq = gt_encseq_loader_load(el, gt_str_get(arguments->indexname), err); gt_encseq_loader_delete(el); } if (encseq == NULL) had_err = -1; if (timer != NULL) gt_timer_show_progress(timer, "load units", stdout); if (!had_err) { unit_info = gt_shu_unit_info_new(encseq); if (arguments->with_units) had_err = gt_shu_unit_file_info_read(arguments->unitfile, unit_info, logger, err); } if (timer != NULL) gt_timer_show_progress(timer, "read table", stdout); if (!had_err) { GtIO *table_file = NULL; GtTokenizer *tokenizer = NULL; GtStr *line = NULL; gt_assert(unit_info != NULL); gt_array2dim_calloc(shusums, unit_info->num_of_genomes, unit_info->num_of_genomes); table_file = gt_io_new(gt_str_array_get(arguments->filenames, 0), "r"); tokenizer = gt_tokenizer_new(table_file); line = gt_tokenizer_get_token(tokenizer); while (line != NULL && !had_err) { char *cline = gt_str_get(line); char *elem = strtok(cline, ";"); zcounter = 0; while (elem != NULL && !had_err) { if (*elem != '#') { if (1 != sscanf(elem, "%lf", &shusums[lcounter][zcounter])) { had_err = 1; gt_error_set(err, "couldn't scan"); break; } gt_logger_log(logger,"wert: %lf", shusums[lcounter][zcounter]); zcounter++; } else { gt_logger_log(logger, "name: %s", elem++); } elem = strtok(NULL, ";"); } gt_tokenizer_next_token(tokenizer); gt_str_delete(line); line = gt_tokenizer_get_token(tokenizer); lcounter++; gt_logger_log(logger, "line %ld", lcounter); } } if (!had_err) { unsigned long num_of_seq, file_idx, seq_idx, startpos; GT_UNUSED unsigned long oldpos = 0; gt_assert(unit_info != NULL); gt_assert(lcounter == zcounter); gt_assert(lcounter == unit_info->num_of_genomes); num_of_seq = gt_encseq_num_of_sequences(unit_info->encseq); for (seq_idx = 0; seq_idx < num_of_seq; seq_idx++) { startpos = gt_encseq_seqstartpos(unit_info->encseq, seq_idx); file_idx = gt_encseq_filenum(unit_info->encseq, startpos); gt_log_log("seq: %lu starts at: %lu\n" "belonges to file: %lu which is part of genome: %s", seq_idx, startpos, file_idx, gt_str_array_get(unit_info->genome_names, unit_info->map_files[file_idx])); gt_assert(oldpos <= startpos); oldpos = startpos; } } if (!had_err && shusums != NULL) { had_err = gt_genomediff_calculate_div_from_avg(shusums, arguments, unit_info, logger, timer, err); gt_array2dim_delete(shusums); } if (timer != NULL) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } gt_logger_delete(logger); gt_encseq_delete(encseq); gt_shu_unit_info_delete(unit_info); return had_err; } GtTool* gt_gdiffcalc(void) { return gt_tool_new(gt_gdiffcalc_arguments_new, gt_gdiffcalc_arguments_delete, gt_gdiffcalc_option_parser_new, gt_gdiffcalc_arguments_check, gt_gdiffcalc_runner); } genometools-1.5.1/src/tools/gt_gdiffcalc.h000066400000000000000000000017331211610345200205440ustar00rootroot00000000000000/* Copyright (c) 2012 Dirk Willrodt Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_GDIFFCALC_H #define GT_GDIFFCALC_H #include "core/tool_api.h" /* the foo tool */ GtTool* gt_gdiffcalc(void); #endif genometools-1.5.1/src/tools/gt_genomediff.c000066400000000000000000000336721211610345200207470ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include "core/array2dim_api.h" #include "core/cstr_api.h" #include "core/encseq.h" #include "core/encseq_options.h" #include "core/fa.h" #include "core/log_api.h" #include "core/logger.h" #include "core/ma_api.h" #include "core/showtime.h" #include "core/warning_api.h" #include "extended/gtdatahelp.h" #include "match/esa-fileend.h" #include "match/genomediff_opt.h" #include "match/index_options.h" #include "match/sfx-opt.h" #include "match/sfx-run.h" #include "match/shu-genomediff.h" #include "tools/gt_genomediff.h" static void* gt_genomediff_arguments_new(void) { GtGenomediffArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->indexname = gt_str_new(); arguments->unitfile = gt_str_new(); arguments->indextype = gt_str_new(); arguments->filenames = gt_str_array_new(); arguments->with_esa = arguments->with_pck = false; return arguments; } static void gt_genomediff_arguments_delete(void *tool_arguments) { GtGenomediffArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->indexname); gt_str_delete(arguments->unitfile); gt_str_delete(arguments->indextype); gt_str_array_delete(arguments->filenames); gt_option_delete(arguments->ref_unitfile); gt_encseq_options_delete(arguments->loadopts); gt_index_options_delete(arguments->idxopts); gt_free(arguments); } static GtOptionParser* gt_genomediff_option_parser_new(void *tool_arguments) { GtGenomediffArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *option_unitfile; static const char *indextypes[] = { "esa", "pck", "encseq", NULL }; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] " "(INDEX | -indexname NAME SEQFILE SEQFILE [...]) ", "Calculates Kr: pairwise distances between genomes."); /* options */ option = gt_option_new_choice("indextype", "specify type of index, one of: " "esa|pck|encseq. Where encseq is an encoded " "sequence and an enhanced suffix array will be " "constructed only in memory.", arguments->indextype, indextypes[2], indextypes); gt_option_parser_add_option(op, option); option = gt_option_new_string("indexname", "Basename of encseq to construct.", arguments->indexname, NULL); gt_option_parser_add_option(op, option); /*-unitfile*/ option_unitfile = gt_option_new_filename("unitfile", "specifies genomic units, " "see below for description.", arguments->unitfile); gt_option_parser_add_option(op, option_unitfile); arguments->ref_unitfile = gt_option_ref(option_unitfile); /* encseq options */ arguments->loadopts = gt_encseq_options_register_loading(op, arguments->indexname); gt_option_is_development_option( gt_encseq_options_lossless_option(arguments->loadopts)); /* esa options */ arguments->idxopts = gt_index_options_register_esa_noout(op); gt_option_is_development_option( gt_index_options_spmopt_option(arguments->idxopts)); /* scan */ option = gt_option_new_bool("scan", "do not load esa index but scan " "it sequentially.", &arguments->scan, true); gt_option_is_extended_option(option); gt_option_parser_add_option(op, option); /* dev options */ /* -max_n */ option = gt_option_new_ulong("max_n", "Number of precalculated values " "for ln(n!) and pmax(x).", &arguments->max_ln_n_fac, 1000UL); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -maxdepth */ option = gt_option_new_int("maxdepth", "max depth of .pbi-file, use with " "-indextype pck.", &arguments->user_max_depth, -1); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* thresholds */ /* divergence error */ option = gt_option_new_double("thr", "Threshold for difference (du, dl) in " "divergence calculation.\n" "default: 1e-9", &arguments->divergence_threshold, 1e-9); gt_option_is_extended_option(option); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* expected shulen error */ option = gt_option_new_double("abs_err", "absolute error for expected shulen " "calculation.\n" "default: 1e-5", &arguments->divergence_abs_err, 1e-5); gt_option_is_extended_option(option); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* relative expected shulen error */ option = gt_option_new_double("rel_err", "relative error for expected shulen " "calculation.\n" "default: 1e-3", &arguments->divergence_rel_err, 1e-3); gt_option_is_extended_option(option); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* M */ option = gt_option_new_double("M", "threshold for minimum logarithm.\n" "default: DBL_MIN", &arguments->divergence_m, DBL_MIN); gt_option_is_extended_option(option); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* mail */ gt_option_parser_set_mail_address(op, ""); /* doc */ gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); return op; } static int gt_genomediff_arguments_check(int rest_argc, void *tool_arguments, GtError *err) { GtGenomediffArguments *arguments = tool_arguments; bool prepared_index; int had_err = 0; gt_error_check(err); gt_assert(arguments); if (rest_argc == 0) { gt_error_set(err, "give at least one file (base)name!"); had_err = -1; } if (!had_err) { if (strcmp("esa", gt_str_get(arguments->indextype)) == 0) arguments->with_esa = true; else if (strcmp("pck", gt_str_get(arguments->indextype)) == 0) arguments->with_pck = true; } prepared_index = (arguments->with_esa || arguments->with_pck); if (!had_err && arguments->user_max_depth != -1 && !arguments->with_pck) gt_warning("option -maxdepth does only apply to -indextype pck"); if (!had_err && prepared_index && gt_encseq_options_mirrored_value(arguments->loadopts)) gt_warning("option -mirrored is ignored with esa and pck index"); if (!had_err && prepared_index && rest_argc > 1) { gt_error_set(err, "there should be only one basename argument with " "-indextype esa|pck"); had_err = -1; } if (rest_argc == 1 && gt_str_length(arguments->indexname) != 0) { gt_error_set(err, "Option -indexname is only needed with sequence files, " "if one file is given as argument, this should be an index."); had_err = -1; } if (!had_err && rest_argc > 1 && gt_str_length(arguments->indexname) == 0) { gt_error_set(err, "use -indexname for basename of encseq"); had_err = -1; } if (!had_err) arguments->with_units = gt_option_is_set(arguments->ref_unitfile); return had_err; } static int gt_genomediff_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { bool mirrored = false; int had_err = 0, i; GtEncseq *encseq = NULL; GtGenomediffArguments *arguments = tool_arguments; GtLogger *logger; GtShuUnitFileInfo *unit_info = NULL; GtTimer *timer = NULL; gt_error_check(err); gt_assert(arguments); logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); gt_assert(logger); for (i = parsed_args; i < argc; i++) { gt_str_array_add_cstr(arguments->filenames, argv[i]); } if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description("start"); gt_timer_start(timer); gt_assert(timer); } if (arguments->with_units) { gt_logger_log(logger, "unitfile option set, filename is %s\n", gt_str_get(arguments->unitfile)); } if (timer != NULL) gt_timer_show_progress(timer, "start shu search", stdout); if (gt_str_array_size(arguments->filenames) > 1UL) { GtEncseqEncoder *ee = gt_encseq_encoder_new(); gt_encseq_encoder_set_timer(ee, timer); gt_encseq_encoder_set_logger(ee, logger); /* kr only makes sense for dna, so we can check this already with ee */ gt_encseq_encoder_set_input_dna(ee); had_err = gt_encseq_encoder_encode(ee, arguments->filenames, gt_str_get(arguments->indexname), err); gt_encseq_encoder_delete(ee); } else { gt_str_append_str(arguments->indexname, gt_str_array_get_str(arguments->filenames, 0)); if (arguments->with_esa || arguments->with_pck) { GtStr *current_line = gt_str_new(); FILE *prj_fp; const char *buffer; char **elements = NULL; prj_fp = gt_fa_fopen_with_suffix(gt_str_get(arguments->indexname), PROJECTFILESUFFIX,"rb",err); if (prj_fp == NULL) had_err = -1; while (!had_err && gt_str_read_next_line(current_line, prj_fp) != EOF) { buffer = gt_str_get(current_line); if (elements != NULL) { gt_free(elements[0]); gt_free(elements[1]); } gt_free(elements); elements = gt_cstr_split(buffer, '='); gt_log_log("%s", elements[0]); if (strcmp("mirrored", elements[0]) == 0) { gt_log_log("%s", elements[1]); if (strcmp("1", elements[1]) == 0) { mirrored = true; gt_log_log("sequences are treated as mirrored"); } } gt_str_reset(current_line); } gt_str_delete(current_line); if (elements != NULL) { gt_free(elements[0]); gt_free(elements[1]); } gt_free(elements); gt_fa_xfclose(prj_fp); } } if (!had_err) { GtEncseqLoader *el = gt_encseq_loader_new_from_options(arguments->loadopts, err); if (mirrored) gt_encseq_loader_mirror(el); encseq = gt_encseq_loader_load(el, gt_str_get(arguments->indexname), err); gt_encseq_loader_delete(el); } if (encseq == NULL) had_err = -1; if (!had_err) { unit_info = gt_shu_unit_info_new(encseq); if (arguments->with_units) had_err = gt_shu_unit_file_info_read(arguments->unitfile, unit_info, logger, err); } if (!had_err) { uint64_t **shusums = NULL; if (arguments->with_esa || arguments->with_pck) { shusums = gt_genomediff_shulen_sum(arguments, unit_info, logger, timer, err); if (shusums == NULL) had_err = -1; } else { const bool doesa = true; GenomediffInfo gd_info; Suffixeratoroptions sopts; sopts.beverbose = arguments->verbose; sopts.indexname = arguments->indexname; sopts.db = NULL; sopts.encopts = NULL; sopts.genomediff = true; sopts.inputindex = arguments->indexname; sopts.loadopts = arguments->loadopts; sopts.showprogress = false; sopts.idxopts = arguments->idxopts; gt_assert(unit_info != NULL); gt_array2dim_calloc(shusums, unit_info->num_of_genomes, unit_info->num_of_genomes); gd_info.shulensums = shusums; gd_info.unit_info = unit_info; had_err = runsuffixerator(doesa, &sopts, &gd_info, logger, err); } if (!had_err && shusums != NULL) { had_err = gt_genomediff_kr_calc(shusums, arguments, unit_info, arguments->with_pck, logger, timer, err); gt_array2dim_delete(shusums); } } if (timer != NULL) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } gt_logger_delete(logger); gt_encseq_delete(encseq); gt_shu_unit_info_delete(unit_info); return had_err; } GtTool* gt_genomediff(void) { return gt_tool_new(gt_genomediff_arguments_new, gt_genomediff_arguments_delete, gt_genomediff_option_parser_new, gt_genomediff_arguments_check, gt_genomediff_runner); } genometools-1.5.1/src/tools/gt_genomediff.h000066400000000000000000000017451211610345200207500ustar00rootroot00000000000000/* Copyright (c) 2010 Dirk Willrodt Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_GENOMEDIFF_H #define GT_GENOMEDIFF_H #include "core/tool_api.h" /* the genomediff tool */ GtTool* gt_genomediff(void); #endif genometools-1.5.1/src/tools/gt_gff3.c000066400000000000000000000273471211610345200174730ustar00rootroot00000000000000/* Copyright (c) 2005-2013 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/undef_api.h" #include "core/versionfunc.h" #include "extended/add_introns_stream_api.h" #include "extended/genome_node.h" #include "extended/gff3_defines.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/gff3_parser.h" #include "extended/gtdatahelp.h" #include "extended/load_stream.h" #include "extended/merge_feature_stream_api.h" #include "extended/sort_stream_api.h" #include "extended/typecheck_info.h" #include "tools/gt_gff3.h" typedef struct { bool sort, load, retainids, checkids, addids, mergefeat, addintrons, verbose, strict, tidy, show, fixboundaries; long offset; GtStr *offsetfile; unsigned long width; GtTypecheckInfo *tci; GtOutputFileInfo *ofi; GtFile *outfp; } GFF3Arguments; static void* gt_gff3_arguments_new(void) { GFF3Arguments *arguments = gt_calloc(1, sizeof *arguments); arguments->offsetfile = gt_str_new(); arguments->tci = gt_typecheck_info_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_gff3_arguments_delete(void *tool_arguments) { GFF3Arguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_typecheck_info_delete(arguments->tci); gt_str_delete(arguments->offsetfile); gt_free(arguments); } static GtOptionParser* gt_gff3_option_parser_new(void *tool_arguments) { GFF3Arguments *arguments = tool_arguments; GtOptionParser *op; GtOption *sort_option, *load_option, *strict_option, *tidy_option, *mergefeat_option, *addintrons_option, *offset_option, *offsetfile_option, *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Parse, possibly " "transform, and output GFF3 files."); /* -sort */ sort_option = gt_option_new_bool("sort", "sort the GFF3 features (memory " "consumption is proportional to the input " "file size(s))", &arguments->sort, false); gt_option_parser_add_option(op, sort_option); /* -strict */ strict_option = gt_option_new_bool("strict", "be very strict during GFF3 " "parsing (stricter than the specification " "requires)", &arguments->strict, false); gt_option_is_development_option(strict_option); gt_option_parser_add_option(op, strict_option); /* -tidy */ tidy_option = gt_option_new_bool("tidy", "try to tidy the GFF3 files up " "during parsing", &arguments->tidy, false); gt_option_parser_add_option(op, tidy_option); gt_option_exclude(strict_option, tidy_option); /* -retainids */ option = gt_option_new_bool("retainids", "when available, use the original IDs provided " "in the source file\n" "(memory consumption is proportional to the " "input file size(s))", &arguments->retainids, false); gt_option_parser_add_option(op, option); /* -checkids */ option = gt_option_new_bool("checkids", "make sure the ID attributes are unique " "within the scope of each GFF3_file, as required " "by GFF3 specification\n" "(memory consumption is proportional to the " "input file size(s))", &arguments->checkids, false); gt_option_parser_add_option(op, option); /* -addids */ option = gt_option_new_bool("addids", "add missing \"" GT_GFF_SEQUENCE_REGION"\" lines automatically", &arguments->addids, true); gt_option_parser_add_option(op, option); /* -fixregionboundaries */ option = gt_option_new_bool("fixregionboundaries", "automatically adjust \"" GT_GFF_SEQUENCE_REGION"\" lines to contain all " "their features (memory consumption is " "proportional to the input file size(s))", &arguments->fixboundaries, false); gt_option_parser_add_option(op, option); /* -mergefeat */ mergefeat_option = gt_option_new_bool("mergefeat", "merge adjacent features of the same " "type", &arguments->mergefeat, false); gt_option_is_development_option(mergefeat_option); gt_option_imply(mergefeat_option, sort_option); gt_option_parser_add_option(op, mergefeat_option); /* -load */ load_option = gt_option_new_bool("load", "load the GFF3 features into memory " "(requires space proportional to the input " "file size(s))", &arguments->load, false); gt_option_is_development_option(load_option); gt_option_parser_add_option(op, load_option); /* -addintrons */ addintrons_option = gt_option_new_bool("addintrons", "add intron features " "between existing exon features", &arguments->addintrons, false); gt_option_parser_add_option(op, addintrons_option); /* -offset */ offset_option = gt_option_new_long("offset", "transform all features by the " "given offset", &arguments->offset, GT_UNDEF_LONG); gt_option_parser_add_option(op, offset_option); /* -offsetfile */ offsetfile_option = gt_option_new_filename("offsetfile", "transform all " "features by the offsets given in " "file", arguments->offsetfile); gt_option_parser_add_option(op, offsetfile_option); gt_option_exclude(offset_option, offsetfile_option); /* typecheck options */ gt_typecheck_info_register_options(arguments->tci, op); /* -show */ option = gt_option_new_bool("show", "show GFF3 output", &arguments->show, true); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* -width */ option = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); /* set comment function */ gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); return op; } static int gt_gff3_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GFF3Arguments *arguments = tool_arguments; GtTypeChecker *type_checker = NULL; GtNodeStream *gff3_in_stream, *sort_stream = NULL, *load_stream = NULL, *merge_feature_stream = NULL, *add_introns_stream = NULL, *gff3_out_stream = NULL, *last_stream; int had_err = 0; gt_error_check(err); gt_assert(arguments); /* create a gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); if (arguments->verbose && arguments->outfp) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); if (arguments->checkids) gt_gff3_in_stream_check_id_attributes((GtGFF3InStream*) gff3_in_stream); if (!arguments->addids) gt_gff3_in_stream_disable_add_ids(gff3_in_stream); last_stream = gff3_in_stream; /* set different type checker if necessary */ if (gt_typecheck_info_option_used(arguments->tci)) { type_checker = gt_typecheck_info_create_type_checker(arguments->tci, err); if (!type_checker) had_err = -1; if (!had_err) gt_gff3_in_stream_set_type_checker(gff3_in_stream, type_checker); } /* set offset (if necessary) */ if (!had_err && arguments->offset != GT_UNDEF_LONG) gt_gff3_in_stream_set_offset(gff3_in_stream, arguments->offset); /* set offsetfile (if necessary) */ if (!had_err && gt_str_length(arguments->offsetfile)) { had_err = gt_gff3_in_stream_set_offsetfile(gff3_in_stream, arguments->offsetfile, err); } /* enable strict mode (if necessary) */ if (!had_err && arguments->strict) gt_gff3_in_stream_enable_strict_mode((GtGFF3InStream*) gff3_in_stream); /* enable tidy mode (if necessary) */ if (!had_err && arguments->tidy) gt_gff3_in_stream_enable_tidy_mode((GtGFF3InStream*) gff3_in_stream); if (!had_err && arguments->fixboundaries) gt_gff3_in_stream_fix_region_boundaries((GtGFF3InStream*) gff3_in_stream); /* create load stream (if necessary) */ if (!had_err && arguments->load) { load_stream = gt_load_stream_new(last_stream); last_stream = load_stream; } /* create sort stream (if necessary) */ if (!had_err && arguments->sort) { sort_stream = gt_sort_stream_new(last_stream); last_stream = sort_stream; } /* create merge feature stream (if necessary) */ if (!had_err && arguments->mergefeat) { gt_assert(sort_stream); merge_feature_stream = gt_merge_feature_stream_new(sort_stream); last_stream = merge_feature_stream; } /* create addintrons stream (if necessary) */ if (!had_err && arguments->addintrons) { gt_assert(last_stream); add_introns_stream = gt_add_introns_stream_new(last_stream); last_stream = add_introns_stream; } /* create gff3 output stream */ if (!had_err && arguments->show) { gff3_out_stream = gt_gff3_out_stream_new(last_stream, arguments->outfp); last_stream = gff3_out_stream; gt_gff3_out_stream_set_fasta_width((GtGFF3OutStream*) last_stream, arguments->width); if (arguments->retainids) gt_gff3_out_stream_retain_id_attributes((GtGFF3OutStream*) last_stream); } /* pull the features through the stream and free them afterwards */ if (!had_err) had_err = gt_node_stream_pull(last_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(sort_stream); gt_node_stream_delete(load_stream); gt_node_stream_delete(merge_feature_stream); gt_node_stream_delete(add_introns_stream); gt_node_stream_delete(gff3_in_stream); gt_type_checker_delete(type_checker); return had_err; } GtTool* gt_gff3(void) { return gt_tool_new(gt_gff3_arguments_new, gt_gff3_arguments_delete, gt_gff3_option_parser_new, NULL, gt_gff3_runner); } genometools-1.5.1/src/tools/gt_gff3.h000066400000000000000000000017251211610345200174700ustar00rootroot00000000000000/* Copyright (c) 2005-2008 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_GFF3_H #define GT_GFF3_H #include "core/tool_api.h" /* the GFF3 tool */ GtTool* gt_gff3(void); #endif genometools-1.5.1/src/tools/gt_gff3_to_gtf.c000066400000000000000000000060531211610345200210240ustar00rootroot00000000000000/* Copyright (c) 2007-2009, 2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/gtf_out_stream_api.h" #include "tools/gt_gff3_to_gtf.h" typedef struct { GtOutputFileInfo *ofi; GtFile *outfp; } GFF3ToGTFArguments; static void* gt_gff3_to_gtf_arguments_new(void) { GFF3ToGTFArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_gff3_to_gtf_arguments_delete(void *tool_arguments) { GFF3ToGTFArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_gff3_to_gtf_option_parser_new(void *tool_arguments) { GFF3ToGTFArguments *arguments = tool_arguments; GtOptionParser *op; op = gt_option_parser_new("[GFF3_file ...]", "Parse GFF3 file(s) and show them as GTF2.2."); gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); return op; } static int gt_gff3_to_gtf_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GFF3ToGTFArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream = NULL, *gtf_out_stream = NULL; int had_err; gt_error_check(err); gt_assert(arguments); /* create a gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); /* create a gtf output stream */ gtf_out_stream = gt_gtf_out_stream_new(gff3_in_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gtf_out_stream, err); /* free */ gt_node_stream_delete(gff3_in_stream); gt_node_stream_delete(gtf_out_stream); return had_err; } GtTool* gt_gff3_to_gtf(void) { return gt_tool_new(gt_gff3_to_gtf_arguments_new, gt_gff3_to_gtf_arguments_delete, gt_gff3_to_gtf_option_parser_new, NULL, gt_gff3_to_gtf_runner); } genometools-1.5.1/src/tools/gt_gff3_to_gtf.h000066400000000000000000000017631211610345200210340ustar00rootroot00000000000000/* Copyright (c) 2007, 2001 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_GFF3_TO_GTF_H #define GT_GFF3_TO_GTF_H #include "core/tool_api.h" /* the GFF3 to GTF tool */ GtTool* gt_gff3_to_gtf(void); #endif genometools-1.5.1/src/tools/gt_gff3validator.c000066400000000000000000000075331211610345200213740ustar00rootroot00000000000000/* Copyright (c) 2008-2013 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/typecheck_info.h" #include "tools/gt_gff3validator.h" typedef struct { GtTypecheckInfo *tci; bool strict; } GFF3ValidatorArguments; static void* gt_gff3validator_arguments_new(void) { GFF3ValidatorArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->tci = gt_typecheck_info_new(); return arguments; } static void gt_gff3validator_arguments_delete(void *tool_arguments) { GFF3ValidatorArguments *arguments = tool_arguments; if (!arguments) return; gt_typecheck_info_delete(arguments->tci); gt_free(arguments); } static GtOptionParser* gt_gff3validator_option_parser_new(void *tool_arguments) { GFF3ValidatorArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Strictly validate given GFF3 files."); /* typecheck options */ gt_typecheck_info_register_options(arguments->tci, op); /* -strict */ option = gt_option_new_bool("strict", "be very strict during GFF3 parsing " "(stricter than the specification requires)", &arguments->strict, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); return op; } static int gt_gff3validator_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GFF3ValidatorArguments *arguments = tool_arguments; GtTypeChecker *type_checker = NULL; GtNodeStream *gff3_in_stream; int had_err = 0; gt_error_check(err); gt_assert(arguments); /* create a GFF3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); gt_gff3_in_stream_check_id_attributes((GtGFF3InStream*) gff3_in_stream); /* set different type checker if necessary */ if (gt_typecheck_info_option_used(arguments->tci)) { type_checker = gt_typecheck_info_create_type_checker(arguments->tci, err); if (!type_checker) had_err = -1; if (!had_err) gt_gff3_in_stream_set_type_checker(gff3_in_stream, type_checker); } /* enable strict mode (if necessary) */ if (!had_err && arguments->strict) gt_gff3_in_stream_enable_strict_mode((GtGFF3InStream*) gff3_in_stream); /* pull the features through the stream and free them afterwards */ if (!had_err) had_err = gt_node_stream_pull(gff3_in_stream, err); if (!had_err) printf("input is valid GFF3\n"); /* free */ gt_node_stream_delete(gff3_in_stream); gt_type_checker_delete(type_checker); return had_err; } GtTool* gt_gff3validator(void) { return gt_tool_new(gt_gff3validator_arguments_new, gt_gff3validator_arguments_delete, gt_gff3validator_option_parser_new, NULL, gt_gff3validator_runner); } genometools-1.5.1/src/tools/gt_gff3validator.h000066400000000000000000000017601211610345200213750ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_GFF3VALIDATOR_H #define GT_GFF3VALIDATOR_H #include "core/tool_api.h" /* the GFF3 validator tool */ GtTool* gt_gff3validator(void); #endif genometools-1.5.1/src/tools/gt_gtf_to_gff3.c000066400000000000000000000067211211610345200210260ustar00rootroot00000000000000/* Copyright (c) 2006-2009, 2011 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "extended/genome_node.h" #include "extended/gff3_out_stream_api.h" #include "extended/gtf_in_stream.h" #include "tools/gt_gtf_to_gff3.h" typedef struct { bool tidy; GtOutputFileInfo *ofi; GtFile *outfp; } GTFToGFF3Arguments; static void* gt_gtf_to_gff3_arguments_new(void) { GTFToGFF3Arguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_gtf_to_gff3_arguments_delete(void *tool_arguments) { GTFToGFF3Arguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_gtf_to_gff3_option_parser_new(void *tool_arguments) { GTFToGFF3Arguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); op = gt_option_parser_new("[GTF_file]", "Parse GTF2.2 file and convert it to GFF3."); /* -tidy */ option = gt_option_new_bool("tidy", "try to tidy the GTF file up during " "parsing", &arguments->tidy, false); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_max_args(op, 1); return op; } static int gt_gtf_to_gff3_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GTFToGFF3Arguments *arguments = tool_arguments; GtNodeStream *gtf_in_stream = NULL, *gff3_out_stream = NULL; int had_err; gt_error_check(err); gt_assert(arguments); /* create a GTF input stream */ gtf_in_stream = gt_gtf_in_stream_new(argv[parsed_args]); if (arguments->tidy) gt_gtf_in_stream_enable_tidy_mode(gtf_in_stream); /* create a GFF3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(gtf_in_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(gtf_in_stream); return had_err; } GtTool* gt_gtf_to_gff3(void) { return gt_tool_new(gt_gtf_to_gff3_arguments_new, gt_gtf_to_gff3_arguments_delete, gt_gtf_to_gff3_option_parser_new, NULL, gt_gtf_to_gff3_runner); } genometools-1.5.1/src/tools/gt_gtf_to_gff3.h000066400000000000000000000017611211610345200210320ustar00rootroot00000000000000/* Copyright (c) 2006-2008 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_GTF_TO_GFF3_H #define GT_GTF_TO_GFF3_H #include "core/tool_api.h" /* the GTF to GFF3 tool */ GtTool* gt_gtf_to_gff3(void); #endif genometools-1.5.1/src/tools/gt_guessprot.c000066400000000000000000000043421211610345200206670ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/fileutils_api.h" #include "core/option_api.h" #include "core/versionfunc.h" #include "tools/gt_guessprot.h" static GtOPrval parse_options(int *parsed_args, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOPrval oprval; gt_error_check(err); op = gt_option_parser_new("filenames", "Guess if sequence in filenames is protein or DNA."); gt_option_parser_set_min_args(op, 1U); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } int gt_guessprot(int argc, const char **argv, GtError *err) { int i, parsed_args, retval; GtStrArray *filenametab; gt_error_check(err); switch (parse_options(&parsed_args, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: return 0; } filenametab = gt_str_array_new(); for (i=parsed_args; i < argc; i++) { gt_str_array_add_cstr(filenametab,argv[i]); } retval = gt_files_guess_if_protein_sequences(filenametab,err); gt_str_array_delete(filenametab); if (retval < 0) { return -1; } if (retval == 1) { /*@ignore@*/ exit(EXIT_FAILURE); /* guess it is a protein sequence */ /*@end@*/ } else { return 0; } } genometools-1.5.1/src/tools/gt_guessprot.h000066400000000000000000000017361211610345200207000ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_GUESSPROT_H #define GT_GUESSPROT_H /* the guessprot tool */ int gt_guessprot(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_hop.c000066400000000000000000000466151211610345200174330ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/basename_api.h" #include "core/ma.h" #include "core/undef_api.h" #include "core/seq_iterator_fastq_api.h" #include "core/unused_api.h" #include "extended/feature_type.h" #include "extended/gtdatahelp.h" #include "extended/hpol_processor.h" #include "tools/gt_hop.h" typedef struct { GtStr *encseqinput, *annotation, *map, *outfilename, *atype, *outprefix; unsigned long hmin, clenmax, read_hmin, covmin, mapqmin; bool verbose, map_is_sam, rchk, stats, allow_partial, allow_multiple, aggressive, moderate, conservative, expert, state_of_truth; double altmax, refmin; GtStrArray *readset; } GtHopArguments; static void* gt_hop_arguments_new(void) { GtHopArguments *arguments = gt_malloc(sizeof (*arguments)); arguments->encseqinput = gt_str_new(); arguments->annotation = gt_str_new(); arguments->atype = gt_str_new(); arguments->map = gt_str_new(); arguments->outfilename = gt_str_new(); arguments->outprefix = gt_str_new(); arguments->readset = gt_str_array_new(); return arguments; } static void gt_hop_arguments_delete(void *tool_arguments) { GtHopArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->encseqinput); gt_str_delete(arguments->annotation); gt_str_delete(arguments->atype); gt_str_delete(arguments->map); gt_str_delete(arguments->outfilename); gt_str_delete(arguments->outprefix); gt_str_array_delete(arguments->readset); gt_free(arguments); } static GtOptionParser* gt_hop_option_parser_new(void *tool_arguments) { GtHopArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *ann_option, *aggressive_option, *conservative_option, *moderate_option, *expert_option, *o_option, *reads_option, *stats_option; gt_assert(arguments); /* init */ op = gt_option_parser_new("- -ref -map " "-reads [options...]", "Reference-based homopolymer error correction."); /* -ref */ option = gt_option_new_string("ref", "reference sequence in GtEncseq format\n" "(can be prepared using gt encseq encode)", arguments->encseqinput, NULL); gt_option_is_mandatory(option); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* -map */ option = gt_option_new_string("map", "mapping of reads to reference\n" "it must be in SAM/BAM format, and sorted by coordinate\n" "(can be prepared e.g. using: samtools sort)", arguments->map, NULL); gt_option_is_mandatory(option); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* -sam */ option = gt_option_new_bool("sam", "mapping file is SAM\ndefault: BAM", &arguments->map_is_sam, false); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* -aggressive */ aggressive_option = gt_option_new_bool("aggressive", "correct as much as possible", &arguments->aggressive, false); gt_option_hide_default(aggressive_option); gt_option_parser_add_option(op, aggressive_option); /* -moderate */ moderate_option = gt_option_new_bool("moderate", "mediate between sensitivity and precision", &arguments->moderate, false); gt_option_hide_default(moderate_option); gt_option_exclude(moderate_option, aggressive_option); gt_option_parser_add_option(op, moderate_option); /* -conservative */ conservative_option = gt_option_new_bool("conservative", "correct only most likely errors", &arguments->conservative, false); gt_option_hide_default(conservative_option); gt_option_exclude(conservative_option, aggressive_option); gt_option_exclude(conservative_option, moderate_option); gt_option_parser_add_option(op, conservative_option); /* -expert */ expert_option = gt_option_new_bool("expert", "manually select correction criteria", &arguments->expert, false); gt_option_hide_default(expert_option); gt_option_exclude(expert_option, aggressive_option); gt_option_exclude(expert_option, moderate_option); gt_option_exclude(expert_option, conservative_option); gt_option_parser_add_option(op, expert_option); /* -reads */ reads_option = gt_option_new_filename_array("reads", "uncorrected read file(s) in FastQ format;\n" "the corrected reads are output in the currect working directory " "in files which are named as the input files, each prepended " "by a prefix (see -outprefix option)\n" "-reads allows one to output the reads in the same order as in the input " "and is mandatory if the SAM contains more than a single primary " "alignment for each read (e.g. output of bwasw)\n" "see also -o option as an alternative", arguments->readset); gt_option_parser_add_option(op, reads_option); /* -outprefix */ option = gt_option_new_string("outprefix", "prefix for output filenames (corrected reads)" "when -reads is specified\n" "the prefix is prepended to each input filename", arguments->outprefix, "hop_"); gt_option_imply(option, reads_option); gt_option_parser_add_option(op, option); /* -o */ o_option = gt_option_new_string("o", "output file for corrected reads\n" "(see also -reads/-outprefix) if -o is used, reads are output " "in a single file in the order they are found in the SAM file " "(which usually differ from the original order)\n" "this will only work if the reads were aligned with a software which " "only includes 1 alignment for each read (e.g. bwa)", arguments->outfilename, NULL); gt_option_exclude(reads_option, o_option); gt_option_is_mandatory_either(reads_option, o_option); gt_option_parser_add_option(op, o_option); /* -hmin */ option = gt_option_new_ulong_min("hmin", "minimal homopolymer length in reference\n" "minimal number of consecutive identical symbols on the reference", &arguments->hmin, 3UL, 2UL); gt_option_is_extended_option(option); gt_option_imply(option, expert_option); gt_option_parser_add_option(op, option); /* -read-hmin */ option = gt_option_new_ulong_min("read-hmin", "minimal homopolymer length in reads", &arguments->read_hmin, 2UL, 1UL); gt_option_is_extended_option(option); gt_option_imply(option, expert_option); gt_option_parser_add_option(op, option); /* -altmax */ option = gt_option_new_double_min_max("altmax", "max support of alternate homopol. length;\n" "e.g. 0.8 means: do not correct any read if homop. length in more than " "80\% of the reads has the same value, different from the reference\n" "if altmax is set to 1.0 reads are always corrected", &arguments->altmax, (double) 0.8, 0.0, (double) 1.0); gt_option_is_extended_option(option); gt_option_imply(option, expert_option); gt_option_parser_add_option(op, option); /* -refmin */ option = gt_option_new_double_min_max("refmin", "min support of reference homopol. length;\n" "e.g. 0.1 means: do not correct any read if ref. homop. length " "is not present in at least 10\% of the reads\n" "if refmin is set to 0.0 reads are always corrected", &arguments->refmin, (double) 0.1, 0.0, (double) 1.0); gt_option_hide_default(option); gt_option_is_extended_option(option); gt_option_imply(option, expert_option); gt_option_parser_add_option(op, option); /* -mapqmin */ option = gt_option_new_ulong("mapqmin", "minimal mapping quality", &arguments->mapqmin, 21UL); gt_option_is_extended_option(option); gt_option_imply(option, expert_option); gt_option_parser_add_option(op, option); /* -covmin */ option = gt_option_new_ulong_min("covmin", "minimal coverage;\n" "e.g. 5 means: do not correct any read if coverage " "(number of reads mapped over whole homopolymer) " "is less than 5\n" "if covmin is set to 1 reads are always corrected", &arguments->covmin, 1UL, 1UL); gt_option_is_extended_option(option); gt_option_imply(option, expert_option); gt_option_parser_add_option(op, option); /* -allow-multiple */ option = gt_option_new_bool("allow-muliple", "allow multiple corrections in a read", &arguments->allow_multiple, false); gt_option_is_extended_option(option); gt_option_imply(option, expert_option); gt_option_parser_add_option(op, option); /* -clenmax */ option = gt_option_new_ulong("clenmax", "maximal correction length\n" "default: unlimited", &arguments->clenmax, GT_UNDEF_ULONG); gt_option_hide_default(option); gt_option_is_extended_option(option); gt_option_imply(option, expert_option); gt_option_parser_add_option(op, option); /* -ann */ ann_option = gt_option_new_string("ann", "annotation of reference sequence\n" "it must be sorted by coordinates on the reference sequence\n" "(this can be e.g. done using: gt gff3 -sort)\n" "if -ann is used, corrections will be limited to homopolymers starting" "or ending inside the feature type indicated by -ft option" "format: sorted GFF3", arguments->annotation, NULL); gt_option_is_extended_option(ann_option); gt_option_parser_add_option(op, ann_option); /* -ft */ option = gt_option_new_string("ft", "feature type to use when -ann option " "is specified", arguments->atype, gt_ft_CDS); gt_option_is_extended_option(option); gt_option_imply(option, ann_option); gt_option_parser_add_option(op, option); /* -stats */ stats_option = gt_option_new_bool("stats", "output statistics for each " "correction position", &arguments->stats, false); gt_option_is_development_option(stats_option); gt_option_parser_add_option(op, stats_option); /* -state-of-truth */ option = gt_option_new_bool("state-of-truth", "similar to -stats in -aggressive " "mode, but used to determine the \"state of truth\" set of corrections " "for evaluation; currently the only difference is that if multiple hits " "are present for a read, they are used all independently for " "correction (-reads must be set)", &arguments->state_of_truth, false); gt_option_is_development_option(option); gt_option_exclude(option, stats_option); gt_option_exclude(option, aggressive_option); gt_option_exclude(option, moderate_option); gt_option_exclude(option, conservative_option); gt_option_exclude(option, expert_option); gt_option_parser_add_option(op, option); /* -rchk */ option = gt_option_new_bool("rchk", "debug option; check that ref region " "of aligned segments is compatible with encseq data", &arguments->rchk, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -allow-partial */ option = gt_option_new_bool("allow-partial", "allow insertions also if there are less gaps in read homopolymer " "than the difference in length with the reference\n" "(at most as many symbols as the gaps will be inserted)", &arguments->allow_partial, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); gt_option_parser_set_min_max_args(op, 0, 0); return op; } int gt_hop_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError* err) { GtHopArguments *args = (GtHopArguments*) tool_arguments; int had_err = 0; if (!args->aggressive && !args->moderate && !args->conservative && !args->expert && !args->state_of_truth) { gt_error_set(err, "Select correction mode: " "-aggressive, -moderate, -conservative or -expert"); had_err = -1; } else if (args->aggressive || args->state_of_truth) { args->hmin = 3UL; args->read_hmin = 1UL; args->altmax = (double) 1.00; args->refmin = (double) 0.00; args->mapqmin = 0UL; args->covmin = 1UL; args->clenmax = ULONG_MAX; args->allow_multiple = true; } else if (args->moderate) { args->hmin = 3UL; args->read_hmin = 1UL; args->altmax = (double) 0.99; args->refmin = (double) 0.00; args->mapqmin = 10UL; args->covmin = 1UL; args->clenmax = ULONG_MAX; args->allow_multiple = true; } else if (args->conservative) { args->hmin = 3UL; args->read_hmin = 2UL; args->altmax = (double) 0.80; args->refmin = (double) 0.10; args->mapqmin = 21UL; args->covmin = 1UL; args->clenmax = ULONG_MAX; args->allow_multiple = false; } if (gt_str_length(args->outprefix) == 0) { gt_error_set(err, "outprefix cannot be an empty string"); had_err = -1; } return had_err; } static int gt_hop_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtHopArguments *arguments = tool_arguments; GtEncseq *encseq; GtEncseqLoader *el; GtLogger *v_logger; int had_err = 0; gt_error_check(err); gt_assert(arguments); v_logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(v_logger, "Correction parameters:"); gt_logger_log(v_logger, "hmin = %lu", arguments->hmin); gt_logger_log(v_logger, "read-hmin = %lu", arguments->read_hmin); gt_logger_log(v_logger, "altmax = %.2f", arguments->altmax); gt_logger_log(v_logger, "refmin = %.2f", arguments->refmin); gt_logger_log(v_logger, "mapqmin = %lu", arguments->mapqmin); gt_logger_log(v_logger, "covmin = %lu", arguments->covmin); if (arguments->clenmax == ULONG_MAX) gt_logger_log(v_logger, "clenmax = unlimited"); else gt_logger_log(v_logger, "clenmax = %lu", arguments->clenmax); gt_logger_log(v_logger, "allow-multiple = %s", arguments->allow_multiple ? "yes" : "no"); if (gt_str_length(arguments->annotation) > 0) gt_logger_log(v_logger, "restrict to %s feature in annotation %s", gt_str_get(arguments->atype), gt_str_get(arguments->annotation)); gt_assert(gt_str_length(arguments->encseqinput) > 0); el = gt_encseq_loader_new(); encseq = gt_encseq_loader_load(el, gt_str_get(arguments->encseqinput), err); if (encseq == NULL) { had_err = -1; } if (!had_err) { GtHpolProcessor *hpp; GtSeqposClassifier *spc = NULL; GtSamfileIterator *sfi = NULL; GtSamfileEncseqMapping *sem = NULL; GtAlignedSegmentsPile *asp = NULL; GtFile *outfile = NULL; GtAlphabet *dna = gt_alphabet_new_dna(); GtSeqIterator **readset_iters = NULL; GtStrArray **infiles = NULL; GtFile **outfiles = NULL; unsigned long nfiles = 0, i; hpp = gt_hpol_processor_new(encseq, arguments->hmin); if (gt_str_length(arguments->map) > 0) { if (!arguments->map_is_sam) sfi = gt_samfile_iterator_new_bam(gt_str_get(arguments->map), dna, err); else sfi = gt_samfile_iterator_new_sam(gt_str_get(arguments->map), dna, NULL, err); if (sfi == NULL) had_err = -1; sem = gt_samfile_encseq_mapping_new(sfi, encseq, err); if (sem == NULL) had_err = -1; if (!had_err) { asp = gt_aligned_segments_pile_new(sfi, sem); if (!arguments->rchk) gt_hpol_processor_enable_segments_hlen_adjustment(hpp, asp, arguments->read_hmin, arguments->altmax, arguments->refmin, arguments->mapqmin, arguments->covmin, arguments->allow_partial, arguments->allow_multiple, arguments->clenmax); else gt_hpol_processor_enable_aligned_segments_refregionscheck(hpp, asp); if (arguments->stats || arguments->state_of_truth) gt_hpol_processor_enable_statistics_output(hpp, arguments->state_of_truth, NULL); if (!had_err && gt_str_length(arguments->outfilename) > 0) { outfile = gt_file_new(gt_str_get(arguments->outfilename), "w", err); if (outfile == NULL) had_err = -1; else gt_hpol_processor_enable_direct_segments_output(hpp, outfile); } else if (!had_err) { nfiles = gt_str_array_size(arguments->readset); if (!had_err && nfiles > 0) { GtStr *outfn = gt_str_new(); infiles = gt_calloc((size_t)nfiles, sizeof (*infiles)); outfiles = gt_calloc((size_t)nfiles, sizeof (*outfiles)); readset_iters = gt_malloc(sizeof (*readset_iters) * nfiles); for (i = 0; i < nfiles && !had_err; i++) { char *bn; gt_str_set(outfn, gt_str_get(arguments->outprefix)); infiles[i] = gt_str_array_new(); gt_str_array_add_cstr(infiles[i], gt_str_array_get(arguments->readset, i)); bn = gt_basename(gt_str_array_get(arguments->readset, i)); gt_str_append_cstr(outfn, bn); outfiles[i] = gt_file_new(gt_str_get(outfn), "w", err); if (outfiles[i] == NULL) had_err = -1; readset_iters[i] = gt_seq_iterator_fastq_new(infiles[i], err); if (readset_iters[i] == NULL) had_err = -1; gt_seq_iterator_fastq_relax_check_of_quality_description( (GtSeqIteratorFastQ*)readset_iters[i]); gt_free(bn); } if (!had_err) gt_hpol_processor_enable_sorted_segments_output(hpp, nfiles, readset_iters, outfiles); gt_str_delete(outfn); } } } } if (!had_err && gt_str_length(arguments->annotation) > 0) { spc = gt_seqpos_classifier_new(gt_str_get(arguments->annotation), gt_str_get(arguments->atype)); gt_hpol_processor_restrict_to_feature_type(hpp, spc); } if (!had_err) had_err = gt_hpol_processor_run(hpp, v_logger, err); gt_aligned_segments_pile_delete(asp); gt_samfile_iterator_delete(sfi); gt_samfile_encseq_mapping_delete(sem); gt_seqpos_classifier_delete(spc); gt_file_delete(outfile); gt_hpol_processor_delete(hpp); for (i = 0; i < nfiles; i++) { gt_assert(infiles != NULL); gt_assert(readset_iters != NULL); gt_assert(outfiles != NULL); gt_str_array_delete(infiles[i]); gt_seq_iterator_delete(readset_iters[i]); gt_file_delete(outfiles[i]); } gt_free(infiles); gt_free(outfiles); gt_free(readset_iters); gt_alphabet_delete(dna); } gt_logger_delete(v_logger); gt_encseq_delete(encseq); gt_encseq_loader_delete(el); return had_err; } GtTool* gt_hop(void) { return gt_tool_new(gt_hop_arguments_new, gt_hop_arguments_delete, gt_hop_option_parser_new, gt_hop_arguments_check, gt_hop_runner); } genometools-1.5.1/src/tools/gt_hop.h000066400000000000000000000017141211610345200174270ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_HOP_H #define GT_HOP_H #include "core/tool_api.h" /* the hop tool */ GtTool* gt_hop(void); #endif genometools-1.5.1/src/tools/gt_id_to_md5.c000066400000000000000000000116331211610345200205000ustar00rootroot00000000000000/* Copyright (c) 2010-2012 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "extended/add_ids_stream.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/gtdatahelp.h" #include "extended/seqid2file.h" #include "extended/id_to_md5_stream_api.h" #include "tools/gt_id_to_md5.h" typedef struct { bool verbose, substitute_target_ids; GtSeqid2FileInfo *s2fi; GtOutputFileInfo *ofi; GtFile *outfp; } SeqidsToMD5Arguments; static void *gt_id_to_md5_arguments_new(void) { SeqidsToMD5Arguments *arguments = gt_calloc(1, sizeof *arguments); arguments->s2fi = gt_seqid2file_info_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_id_to_md5_arguments_delete(void *tool_arguments) { SeqidsToMD5Arguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_seqid2file_info_delete(arguments->s2fi); gt_free(arguments); } static GtOptionParser* gt_id_to_md5_option_parser_new(void *tool_arguments) { SeqidsToMD5Arguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Change sequence IDs in given GFF3 files to MD5 " "fingerprints of the corresponding sequences."); /* -seqfile, -matchdesc, -usedesc and -regionmapping */ gt_seqid2file_register_options(op, arguments->s2fi); /* -subtargetids */ option = gt_option_new_bool("subtargetids", "substitute the target IDs with " "MD5 sums", &arguments->substitute_target_ids, true); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); return op; } static int gt_id_to_md5_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtNodeStream *gff3_in_stream, *id_to_md5_stream = NULL, *add_ids_stream = NULL, *gff3_out_stream = NULL; SeqidsToMD5Arguments *arguments = tool_arguments; GtRegionMapping *region_mapping; int had_err = 0; gt_error_check(err); gt_assert(arguments); /* create a gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); if (arguments->verbose && arguments->outfp) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); /* add automatically generated sequence IDs later to avoid collisions */ gt_gff3_in_stream_disable_add_ids(gff3_in_stream); /* create region mapping */ region_mapping = gt_seqid2file_region_mapping_new(arguments->s2fi, err); if (!region_mapping) had_err = -1; if (!had_err) { /* create seqid to md5 stream */ id_to_md5_stream = gt_id_to_md5_stream_new(gff3_in_stream, region_mapping, arguments->substitute_target_ids); /* create add IDs stream */ add_ids_stream = gt_add_ids_stream_new(id_to_md5_stream); /* create gff3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(add_ids_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); } /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(add_ids_stream); gt_node_stream_delete(id_to_md5_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool *gt_id_to_md5(void) { return gt_tool_new(gt_id_to_md5_arguments_new, gt_id_to_md5_arguments_delete, gt_id_to_md5_option_parser_new, NULL, gt_id_to_md5_runner); } genometools-1.5.1/src/tools/gt_id_to_md5.h000066400000000000000000000016361211610345200205070ustar00rootroot00000000000000/* Copyright (c) 2010 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ID_TO_MD5_H #define GT_ID_TO_MD5_H #include "core/tool_api.h" /* the seqids to MD5s tool */ GtTool* gt_id_to_md5(void); #endif genometools-1.5.1/src/tools/gt_idxlocali.c000066400000000000000000000150121211610345200206000ustar00rootroot00000000000000/* Copyright (c) 2009 Z. Tang Copyright (c) 2009 Stefan Kurtz Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/option_api.h" #include "core/ma.h" #include "core/str_array.h" #include "core/unused_api.h" #include "core/tool_api.h" #include "match/idxlocali.h" #include "tools/gt_idxlocali.h" static void *gt_idxlocali_arguments_new(void) { return gt_malloc(sizeof (IdxlocaliOptions)); } static void gt_idxlocali_arguments_delete(void *tool_arguments) { IdxlocaliOptions *arguments = tool_arguments; if (!arguments) { return; } gt_str_delete(arguments->indexname); gt_str_array_delete(arguments->queryfiles); gt_option_delete(arguments->refoptionesaindex); gt_option_delete(arguments->refoptionpckindex); gt_free(arguments); } static GtOptionParser *gt_idxlocali_option_parser_new(void *tool_arguments) { IdxlocaliOptions *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optionesaindex, *optionpckindex, *optiononline, *optioncmp; gt_assert(arguments != NULL); arguments->indexname = gt_str_new (); arguments->queryfiles = gt_str_array_new (); op = gt_option_parser_new ("[options] -q query-file-names [-esa|-pck] indexname", "Find all local alignments using suffix tree."); gt_option_parser_set_mail_address(op, ""); option = gt_option_new_filename_array("q","Specify files containing the " "query sequences", arguments->queryfiles); gt_option_parser_add_option (op, option); option = gt_option_new_long("match", "Specify match score", &arguments->matchscore, 1L); gt_option_parser_add_option(op, option); option = gt_option_new_long("mismatch", "Specify mismatch score", &arguments->mismatchscore, -3L); gt_option_parser_add_option(op, option); option = gt_option_new_long("gapstart", "Specify gap start score", &arguments->gapstart, -5L); gt_option_parser_add_option(op, option); option = gt_option_new_long("gapextend", "Specify gap extension score", &arguments->gapextend, -2L); gt_option_parser_add_option(op, option); option = gt_option_new_ulong_min("th", "Specify the threshold", &arguments->threshold, 0, 1UL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); optionesaindex = gt_option_new_string("esa", "Specify index " "(enhanced suffix array)", arguments->indexname, NULL); gt_option_parser_add_option(op, optionesaindex); arguments->refoptionesaindex = gt_option_ref(optionesaindex); optionpckindex = gt_option_new_string("pck", "Specify index (packed index)", arguments->indexname, NULL); gt_option_parser_add_option(op, optionpckindex); arguments->refoptionpckindex = gt_option_ref (optionpckindex); gt_option_exclude (optionesaindex, optionpckindex); gt_option_is_mandatory_either(optionesaindex, optionpckindex); optiononline = gt_option_new_bool("online","Perform online searches", &arguments->doonline, false); gt_option_parser_add_option(op, optiononline); gt_option_is_development_option(optiononline); optioncmp = gt_option_new_bool("cmp","Compare results of offline and online " "searches", &arguments->docompare, false); gt_option_parser_add_option(op,optioncmp); gt_option_exclude(optiononline,optioncmp); option = gt_option_new_bool("s", "Show alignments", &arguments->showalignment, false); gt_option_parser_add_option(op, option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); return op; } static int gt_idxlocali_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GT_UNUSED GtError * err) { IdxlocaliOptions *arguments = tool_arguments; if (gt_option_is_set(arguments->refoptionesaindex)) { arguments->withesa = true; } else { gt_assert(gt_option_is_set(arguments->refoptionpckindex)); arguments->withesa = false; } return 0; } static int gt_idxlocali_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError * err) { IdxlocaliOptions *arguments = tool_arguments; bool haserr = false; unsigned long idx; gt_error_check(err); gt_assert(arguments != NULL); gt_assert(parsed_args == argc); printf("# indexname(%s)=%s\n", arguments->withesa ? "esa" : "pck", gt_str_get(arguments->indexname)); for (idx = 0; idx < gt_str_array_size (arguments->queryfiles); idx++) { printf("# queryfile=%s\n",gt_str_array_get (arguments->queryfiles, idx)); } printf("# threshold=%lu\n", arguments->threshold); if (!haserr && gt_runidxlocali (arguments, err) != 0) { haserr = true; } return haserr ? -1 : 0; } GtTool *gt_idxlocali(void) { return gt_tool_new(gt_idxlocali_arguments_new, gt_idxlocali_arguments_delete, gt_idxlocali_option_parser_new, gt_idxlocali_arguments_check, gt_idxlocali_runner); } genometools-1.5.1/src/tools/gt_idxlocali.h000066400000000000000000000017361211610345200206150ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_IDXLOCALI_H #define GT_IDXLOCALI_H #include "core/tool_api.h" /* the idxlocali tool */ GtTool* gt_idxlocali(void); #endif genometools-1.5.1/src/tools/gt_interfeat.c000066400000000000000000000101201211610345200206040ustar00rootroot00000000000000/* Copyright (c) 2009 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma_api.h" #include "core/output_file_api.h" #include "extended/feature_type.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/inter_feature_stream_api.h" #include "tools/gt_interfeat.h" typedef struct { GtStr *outside_type, *inter_type; GtOutputFileInfo *ofi; GtFile *outfp; } InterFeatArguments; static void* gt_interfeat_arguments_new(void) { InterFeatArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->outside_type = gt_str_new(); arguments->inter_type = gt_str_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_interfeat_arguments_delete(void *tool_arguments) { InterFeatArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_str_delete(arguments->inter_type); gt_str_delete(arguments->outside_type); gt_free(arguments); } static GtOptionParser* gt_interfeat_option_parser_new(void *tool_arguments) { InterFeatArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Add intermediary " "features between outside features in given " "GFF3 file(s)."); /* -outside */ option = gt_option_new_string("outside", "set outside type", arguments->outside_type, gt_ft_exon); gt_option_parser_add_option(op, option); /* -inter */ option = gt_option_new_string("inter", "set intermediary type", arguments->inter_type, gt_ft_intron); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); return op; } static int gt_interfeat_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { InterFeatArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream, *inter_feature_stream, *gff3_out_stream; int had_err; gt_error_check(err); gt_assert(arguments); /* create a gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); /* create intermediary feature stream */ inter_feature_stream = gt_inter_feature_stream_new(gff3_in_stream, gt_str_get(arguments->outside_type), gt_str_get(arguments->inter_type)); /* create gff3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(inter_feature_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(inter_feature_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool* gt_interfeat(void) { return gt_tool_new(gt_interfeat_arguments_new, gt_interfeat_arguments_delete, gt_interfeat_option_parser_new, NULL, gt_interfeat_runner); } genometools-1.5.1/src/tools/gt_interfeat.h000066400000000000000000000016441211610345200206240ustar00rootroot00000000000000/* Copyright (c) 2009 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_INTERFEAT_H #define GT_INTERFEAT_H #include "core/tool_api.h" /* the intermediary feature tool */ GtTool* gt_interfeat(void); #endif genometools-1.5.1/src/tools/gt_magicmatch.c000066400000000000000000000072741211610345200207400ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/bioseq.h" #include "core/ma.h" #include "core/option_api.h" #include "core/unused_api.h" #include "extended/gtdatahelp.h" #include "tools/gt_magicmatch.h" typedef struct { GtStrArray *seqfiles; bool translate; } MagicMatchArguments; static void* gt_magicmatch_arguments_new(void) { MagicMatchArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->seqfiles = gt_str_array_new(); return arguments; } static void gt_magicmatch_arguments_delete(void *tool_arguments) { MagicMatchArguments *arguments = tool_arguments; if (!arguments) return; gt_str_array_delete(arguments->seqfiles); gt_free(arguments); } static GtOptionParser* gt_magicmatch_option_parser_new(void *tool_arguments) { MagicMatchArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *o; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] -f sequence_file [...] -t", "Compute MD5 fingerprints for each sequence given in " "sequence_file(s)."); /* -f */ o = gt_option_new_filename_array("f", "fasta file names (at least one file " "is required)", arguments->seqfiles); gt_option_is_mandatory(o); gt_option_parser_add_option(op, o); /* -t */ o = gt_option_new_bool("t", "translate the sequences of the files", &arguments->translate, false); gt_option_is_mandatory(o); gt_option_parser_add_option(op, o); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); gt_option_parser_set_min_max_args(op, 0, 0); return op; } static void translate_sequence_file(GtBioseq *bs) { unsigned long i; gt_assert(bs); for (i = 0; i < gt_bioseq_number_of_sequences(bs); i++) { printf("%s\t%s\n", gt_bioseq_get_md5_fingerprint(bs, i), gt_bioseq_get_description(bs, i)); } } static int gt_magicmatch_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { MagicMatchArguments *arguments = tool_arguments; GtBioseq *bioseq; unsigned long i; int had_err = 0; gt_error_check(err); gt_assert(arguments); if (arguments->translate) { for (i = 0; !had_err && i < gt_str_array_size(arguments->seqfiles); i++) { if (!(bioseq = gt_bioseq_new(gt_str_array_get(arguments->seqfiles, i), err))) { had_err = -1; } if (!had_err) translate_sequence_file(bioseq); gt_bioseq_delete(bioseq); } } return had_err; } GtTool* gt_magicmatch(void) { return gt_tool_new(gt_magicmatch_arguments_new, gt_magicmatch_arguments_delete, gt_magicmatch_option_parser_new, NULL, gt_magicmatch_runner); } genometools-1.5.1/src/tools/gt_magicmatch.h000066400000000000000000000017431211610345200207400ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MAGICMATCH_H #define GT_MAGICMATCH_H #include "core/tool_api.h" /* the MagicMatch tool */ GtTool* gt_magicmatch(void); #endif genometools-1.5.1/src/tools/gt_matchtool.c000066400000000000000000000406321211610345200206300ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Kastens Copyright (c) 2011-2012 Sascha Steinbiss Copyright (c) 2011-2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/encseq.h" #include "core/ma.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "extended/match.h" #include "extended/match_blast.h" #include "extended/match_last.h" #include "extended/match_open.h" #include "extended/match_sw.h" #include "extended/match_iterator_api.h" #include "extended/match_iterator_blast.h" #include "extended/match_iterator_last.h" #include "extended/match_iterator_open.h" #include "extended/match_iterator_sw.h" #include "tools/gt_matchtool.h" typedef struct { GtStr *type, *matchfile, *query, *db; unsigned long minlen, maxedist; } GtMatchtoolArguments; static void* gt_matchtool_arguments_new(void) { GtMatchtoolArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->type = gt_str_new(); arguments->matchfile = gt_str_new(); arguments->query = gt_str_new(); arguments->db = gt_str_new(); return arguments; } static void gt_matchtool_arguments_delete(void *tool_arguments) { GtMatchtoolArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->type); gt_str_delete(arguments->matchfile); gt_str_delete(arguments->query); gt_str_delete(arguments->db); gt_free(arguments); } static GtOptionParser* gt_matchtool_option_parser_new(void *tool_arguments) { GtMatchtoolArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optionfile, *optiondb, *optionquery, *optionminlen, *optionmaxedist; gt_assert(arguments); static const char *type[] = { "OPENMATCH", "BLASTOUT", "BLASTALLP", "BLASTALLN", "BLASTP", "BLASTN", "LAST", "SW", NULL }; /* init */ op = gt_option_parser_new("[option ...]", "Parse match formats and/or invoke matching " "tools."); /* -type */ option = gt_option_new_choice("type", "choose match file format:\n" "OPENMATCH: 'open match' format, e.g. " "vmatch\n" "BLASTOUT : tabular BLAST output " "(-m 8)\n" "BLASTALLP: invoke BLASTALL with " "blastp\n" "BLASTALLN: invoke BLASTALL with " "blastn\n" "BLASTP : invoke blastp\n" "BLASTN : invoke blastn\n" "LAST : invoke LAST\n" "SW : use Smith-Waterman", arguments->type, type[0], type); gt_option_parser_add_option(op, option); /* -matchfile */ optionfile = gt_option_new_filename("matchfile", "set input file name", arguments->matchfile); gt_option_parser_add_option(op, optionfile); /* -db */ optiondb = gt_option_new_filename("db", "set database file name", arguments->db); gt_option_parser_add_option(op, optiondb); /* -swminlen */ optionminlen = gt_option_new_ulong("swminlen", "set minimum required alignment length " "(for Smith-Waterman alignment)", &arguments->minlen, 10); gt_option_parser_add_option(op, optionminlen); /* -swmaxedist */ optionmaxedist = gt_option_new_ulong("swmaxedist", "set maximum allowed edit distance " "(for Smith-Waterman alignment)", &arguments->maxedist, 0); gt_option_parser_add_option(op, optionmaxedist); /* -query */ optionquery = gt_option_new_filename("query", "set query file name", arguments->query); gt_option_parser_add_option(op, optionquery); gt_option_imply(optiondb, optionquery); gt_option_imply(optionquery, optiondb); gt_option_is_mandatory_either(optiondb, optionfile); gt_option_parser_set_min_max_args(op, 0, 0); return op; } static int gt_matchtool_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError *err) { GtMatchtoolArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); if (strcmp(gt_str_get(arguments->type), "OPENMATCH") == 0 || strcmp(gt_str_get(arguments->type), "BLASTOUT") == 0) { if (gt_str_length(arguments->matchfile) == 0) { gt_error_set(err, "types OPENMATCH and BLASTOUT require the " "option -matchfile"); had_err = -1; } } if (strcmp(gt_str_get(arguments->type), "BLASTALLP") == 0 || strcmp(gt_str_get(arguments->type), "BLASTALLN") == 0 || strcmp(gt_str_get(arguments->type), "BLASTP") == 0 || strcmp(gt_str_get(arguments->type), "SW") == 0 || strcmp(gt_str_get(arguments->type), "LAST") == 0 || strcmp(gt_str_get(arguments->type), "BLASTN") == 0) { if (gt_str_length(arguments->db) == 0 || gt_str_length(arguments->query) == 0) { gt_error_set(err, "types BLASTALLP, BLASTALLN, BLASTP, BLASTN, LAST, SW " "require the options -db and -query"); had_err = -1; } } return had_err; } static int gt_matchtool_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtMatchtoolArguments *arguments = tool_arguments; GtMatchIterator *mp = NULL; GtMatch *match = NULL; int status, had_err = 0; gt_error_check(err); gt_assert(arguments); if (strcmp(gt_str_get(arguments->type), "OPENMATCH") == 0) { mp = gt_match_iterator_open_new(gt_str_get(arguments->matchfile), err); if (!mp) had_err = -1; } else if (strcmp(gt_str_get(arguments->type), "BLASTOUT") == 0) { mp = gt_match_iterator_blast_file_new(gt_str_get(arguments->matchfile), err); if (!mp) had_err = -1; } else if (strcmp(gt_str_get(arguments->type), "BLASTALLP") == 0) { mp = gt_match_iterator_blastallp_process_new(gt_str_get(arguments->query), gt_str_get(arguments->db), GT_UNDEF_DOUBLE, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, err); if (!mp) had_err = -1; } else if (strcmp(gt_str_get(arguments->type), "BLASTALLN") == 0) { mp = gt_match_iterator_blastalln_process_new(gt_str_get(arguments->query), gt_str_get(arguments->db), GT_UNDEF_DOUBLE, false, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_DOUBLE, GT_UNDEF_INT, GT_UNDEF_INT, err); if (!mp) had_err = -1; } else if (strcmp(gt_str_get(arguments->type), "BLASTP") == 0) { mp = gt_match_iterator_blastp_process_new(gt_str_get(arguments->query), gt_str_get(arguments->db), GT_UNDEF_DOUBLE, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_DOUBLE, err); if (!mp) had_err = -1; } else if (strcmp(gt_str_get(arguments->type), "BLASTN") == 0) { mp = gt_match_iterator_blastn_process_new(gt_str_get(arguments->query), gt_str_get(arguments->db), GT_UNDEF_DOUBLE, false, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_DOUBLE, GT_UNDEF_INT, GT_UNDEF_DOUBLE, NULL, err); if (!mp) had_err = -1; } else if (strcmp(gt_str_get(arguments->type), "SW") == 0) { GtEncseqLoader *el = NULL; GtEncseq *es1 = NULL, *es2 = NULL; GtScoreMatrix *sm = NULL; GtScoreFunction *sf = NULL; el = gt_encseq_loader_new(); es1 = gt_encseq_loader_load(el, gt_str_get(arguments->db), err); if (!es1) had_err = -1; if (!had_err) { es2 = gt_encseq_loader_load(el, gt_str_get(arguments->query), err); if (!es2) had_err = -1; } gt_encseq_loader_delete(el); if (!had_err) { unsigned long i, j; GtAlphabet *a; gt_assert(es1 && es2); a = gt_encseq_alphabet(es1); sm = gt_score_matrix_new(a); for (i = 0; i < gt_alphabet_num_of_chars(a); i++) for (j = 0; j < gt_alphabet_num_of_chars(a); j++) gt_score_matrix_set_score(sm, i, j, (i == j) ? 1 : -1); sf = gt_score_function_new(sm, -1, -1); mp = gt_match_iterator_sw_new(es1, es2, sf, arguments->minlen, arguments->maxedist, err); if (!mp) had_err = -1; } gt_encseq_delete(es1); gt_encseq_delete(es2); gt_score_function_delete(sf); } else if (strcmp(gt_str_get(arguments->type), "LAST") == 0) { GtEncseqLoader *el = NULL; GtEncseq *es1 = NULL, *es2 = NULL; el = gt_encseq_loader_new(); es1 = gt_encseq_loader_load(el, gt_str_get(arguments->db), err); if (!es1) had_err = -1; if (!had_err) { es2 = gt_encseq_loader_load(el, gt_str_get(arguments->query), err); if (!es2) had_err = -1; } gt_encseq_loader_delete(el); if (!had_err) { mp = gt_match_iterator_last_new(es1, es2, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, GT_UNDEF_INT, 10, GT_UNDEF_INT, GT_UNDEF_INT, err); if (!mp) had_err = -1; } gt_encseq_delete(es1); gt_encseq_delete(es2); } else { exit(GT_EXIT_PROGRAMMING_ERROR); } if ((!had_err) && (strcmp(gt_str_get(arguments->type), "OPENMATCH") == 0)) { fprintf(stdout, "seqid1\tseqid2\tstartpos1\tstartpos2\tendpos1\tendpos2\t" "weight\n"); while ((status = gt_match_iterator_next(mp, &match, err)) != GT_MATCHER_STATUS_END) { if (status == GT_MATCHER_STATUS_OK) { GtMatchOpen *matcho = (GtMatchOpen*) match; GtRange range_seq1; GtRange range_seq2; gt_match_get_range_seq1(match, &range_seq1); gt_match_get_range_seq2(match, &range_seq2); fprintf(stdout, "%s\t%s\t%lu\t%lu\t%lu\t%lu\t%lu\n", gt_match_get_seqid1(match), gt_match_get_seqid2(match), range_seq1.start, range_seq2.start, range_seq1.end, range_seq2.end, gt_match_open_get_weight(matcho)); gt_match_delete(match); } else if (status == GT_MATCHER_STATUS_ERROR) { had_err =-1; break; } } gt_match_iterator_delete(mp); } else if ((!had_err) && (strcmp(gt_str_get(arguments->type), "SW") == 0)) { fprintf(stdout, "seqid1\tseqid2\tstartpos1\tstartpos2\tendpos1\tendpos2\t" "alilen\tedist\n"); while ((status = gt_match_iterator_next(mp, &match, err)) != GT_MATCHER_STATUS_END) { if (status == GT_MATCHER_STATUS_OK) { GtMatchSW *matchs = gt_match_sw_cast(match); GtRange range_seq1; GtRange range_seq2; gt_match_get_range_seq1(match, &range_seq1); gt_match_get_range_seq2(match, &range_seq2); fprintf(stdout, "%s\t%s\t%lu\t%lu\t%lu\t%lu\t%lu\t%lu\n", gt_match_get_seqid1(match), gt_match_get_seqid2(match), range_seq1.start, range_seq2.start, range_seq1.end, range_seq2.end, gt_match_sw_get_alignment_length(matchs), gt_match_sw_get_edist(matchs)); gt_match_delete(match); } else if (status == GT_MATCHER_STATUS_ERROR) { had_err =-1; break; } } gt_match_iterator_delete(mp); } else if ((!had_err) && (strcmp(gt_str_get(arguments->type), "LAST") == 0)) { fprintf(stdout, "seqid1\tseqid2\tstartpos1\tstartpos2\tendpos1\tendpos2\t" "score\n"); while ((status = gt_match_iterator_next(mp, &match, err)) != GT_MATCHER_STATUS_END) { if (status == GT_MATCHER_STATUS_OK) { GtMatchLAST *matchl = gt_match_last_cast(match); GtRange range_seq1; GtRange range_seq2; gt_match_get_range_seq1(match, &range_seq1); gt_match_get_range_seq2(match, &range_seq2); fprintf(stdout, "%lu\t%lu\t%lu\t%lu\t%lu\t%lu\t%lu\n", gt_match_last_get_seqno1(matchl), gt_match_last_get_seqno2(matchl), range_seq1.start, range_seq2.start, range_seq1.end, range_seq2.end, gt_match_last_get_score(matchl)); gt_match_delete(match); } else if (status == GT_MATCHER_STATUS_ERROR) { had_err =-1; break; } } gt_match_iterator_delete(mp); } else if (!had_err) { fprintf(stdout, "query\tdbname2\tq.startpos\td.startpos\tq.endpos\t" "d.endpos\tbit score\tevalue\tali length\n"); while ((status = gt_match_iterator_next(mp, &match, err)) != GT_MATCHER_STATUS_END) { if (status == GT_MATCHER_STATUS_OK) { GtMatchBlast *matchb = (GtMatchBlast*) match; GtRange range_seq1; GtRange range_seq2; gt_match_get_range_seq1(match, &range_seq1); gt_match_get_range_seq2(match, &range_seq2); fprintf(stdout, "%s\t%s\t%lu\t%lu\t%lu\t%lu\t%.3f\t%Lg\t%lu\n", gt_match_get_seqid1(match), gt_match_get_seqid2(match), range_seq1.start, range_seq2.start, range_seq1.end, range_seq2.end, gt_match_blast_get_bitscore(matchb), gt_match_blast_get_evalue(matchb), gt_match_blast_get_align_length(matchb)); gt_match_delete(match); } else if (status == GT_MATCHER_STATUS_ERROR) { had_err =-1; break; } } gt_match_iterator_delete(mp); } return had_err; } GtTool* gt_matchtool(void) { return gt_tool_new(gt_matchtool_arguments_new, gt_matchtool_arguments_delete, gt_matchtool_option_parser_new, gt_matchtool_arguments_check, gt_matchtool_runner); } genometools-1.5.1/src/tools/gt_matchtool.h000066400000000000000000000017541211610345200206370ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Kastens Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MATCHTOOL_H #define GT_MATCHTOOL_H #include "core/tool_api.h" /* the matchtool tool */ GtTool* gt_matchtool(void); #endif genometools-1.5.1/src/tools/gt_matstat.c000066400000000000000000000354651211610345200203230ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/defined-types.h" #include "core/error.h" #include "core/option_api.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "match/eis-voiditf.h" #include "match/esa-map.h" #include "match/fmindex.h" #include "match/greedyfwdmat.h" #include "match/optionargmode.h" #include "match/sarr-def.h" #include "match/stamp.h" #include "tools/gt_matstat.h" #include "tools/gt_uniquesub.h" #include "match/esa-minunique.h" #include "match/fmi-fwduni.pr" #include "match/fmi-map.pr" #define SHOWSEQUENCE 1U #define SHOWQUERYPOS (SHOWSEQUENCE << 1) #define SHOWSUBJECTPOS (SHOWSEQUENCE << 2) typedef enum { Fmindextype, Esaindextype, Packedindextype } Indextype; typedef struct { Definedunsignedlong minlength, maxlength; unsigned int showmode; bool verifywitnesspos; GtStr *indexname; GtStrArray *queryfilenames; Indextype indextype; } Gfmsubcallinfo; static GtOPrval parsegfmsub(bool doms, Gfmsubcallinfo *gfmsubcallinfo, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOption *optionmin, *optionmax, *optionoutput, *optionfmindex, *optionesaindex, *optionpckindex, *optionquery, *optionverify; GtOPrval oprval; GtStrArray *flagsoutputoption; int parsed_args; const Optionargmodedesc msgfmsubmodedesctable[] = { {"sequence","matching sequence",SHOWSEQUENCE}, {"querypos","position in query sequence",SHOWQUERYPOS}, {"subjectpos","position in subject sequence",SHOWSUBJECTPOS} }; const Optionargmodedesc gfmsubmodedesctable[] = { {"sequence","matching sequence",SHOWSEQUENCE}, {"querypos","position in query sequence",SHOWQUERYPOS} }; gt_error_check(err); gfmsubcallinfo->minlength.defined = false; gfmsubcallinfo->maxlength.defined = false; gfmsubcallinfo->showmode = 0; gfmsubcallinfo->indexname = gt_str_new(); gfmsubcallinfo->queryfilenames = gt_str_array_new(); flagsoutputoption = gt_str_array_new(); op = gt_option_parser_new("[options ...] -query queryfile [...]", doms ? "Compute matching statistics." : "Compute length of minumum unique prefixes." ); gt_option_parser_set_mail_address(op,""); optionfmindex = gt_option_new_string("fmi", "specify fmindex", gfmsubcallinfo->indexname,NULL); gt_option_parser_add_option(op, optionfmindex); optionesaindex = gt_option_new_string("esa", "specify suffix array", gfmsubcallinfo->indexname,NULL); gt_option_parser_add_option(op, optionesaindex); optionpckindex = gt_option_new_string("pck", "specify packed index", gfmsubcallinfo->indexname,NULL); gt_option_parser_add_option(op, optionpckindex); gt_option_exclude(optionfmindex,optionesaindex); gt_option_exclude(optionpckindex,optionesaindex); gt_option_exclude(optionpckindex,optionfmindex); optionquery = gt_option_new_filename_array("query", "specify queryfiles", gfmsubcallinfo->queryfilenames); gt_option_is_mandatory(optionquery); gt_option_parser_add_option(op, optionquery); optionmin = gt_option_new_ulong_min("min", "only output length " "if >= given minimum length", &gfmsubcallinfo->minlength. valueunsignedlong, 0,(unsigned long) 1); gt_option_parser_add_option(op, optionmin); optionmax = gt_option_new_ulong_min("max", "only output length " "if <= given maximum length", &gfmsubcallinfo->maxlength. valueunsignedlong, 0,(unsigned long) 1); gt_option_parser_add_option(op, optionmax); optionoutput = gt_option_new_string_array("output", doms ? "set output flags (sequence, querypos, subjectpos)" : "set output flags (sequence, querypos)", flagsoutputoption); gt_option_parser_add_option(op, optionoutput); if (doms) { optionverify = gt_option_new_bool("verify","verify witness positions", &gfmsubcallinfo->verifywitnesspos, false); gt_option_is_development_option(optionverify); gt_option_parser_add_option(op, optionverify); } else { gfmsubcallinfo->verifywitnesspos = false; } gt_option_parser_refer_to_manual(op); oprval = gt_option_parser_parse(op, &parsed_args, argc, argv, gt_versionfunc,err); if (oprval == GT_OPTION_PARSER_OK) { if (gt_option_is_set(optionfmindex)) { gfmsubcallinfo->indextype = Fmindextype; } else { if (gt_option_is_set(optionesaindex)) { gfmsubcallinfo->indextype = Esaindextype; } else { if (gt_option_is_set(optionpckindex)) { gfmsubcallinfo->indextype = Packedindextype; } else { gt_error_set(err,"one of the options -esa, -pck must be used"); oprval = GT_OPTION_PARSER_ERROR; } } } if (oprval != GT_OPTION_PARSER_ERROR) { if (gt_option_is_set(optionmin)) { gfmsubcallinfo->minlength.defined = true; } if (gt_option_is_set(optionmax)) { gfmsubcallinfo->maxlength.defined = true; } if (!gt_option_is_set(optionmin) && !gt_option_is_set(optionmax)) { gt_error_set(err,"one of the options -min or -max must be set"); oprval = GT_OPTION_PARSER_ERROR; } } if (oprval != GT_OPTION_PARSER_ERROR) { if (gfmsubcallinfo->minlength.defined && gfmsubcallinfo->maxlength.defined) { if (gfmsubcallinfo->maxlength.valueunsignedlong < gfmsubcallinfo->minlength.valueunsignedlong) { gt_error_set(err,"minvalue must be smaller or equal than maxvalue"); oprval = GT_OPTION_PARSER_ERROR; } } } if (oprval != GT_OPTION_PARSER_ERROR && gt_option_is_set(optionoutput)) { if (gt_str_array_size(flagsoutputoption) == 0) { gt_error_set(err,"missing arguments to option -output"); oprval = GT_OPTION_PARSER_ERROR; } else { unsigned long i; for (i=0; ishowmode, "-output", gt_str_array_get(flagsoutputoption,i), err) != 0) { oprval = GT_OPTION_PARSER_ERROR; break; } } else { if (gt_optionargaddbitmask(gfmsubmodedesctable, sizeof (gfmsubmodedesctable)/ sizeof (gfmsubmodedesctable[0]), &gfmsubcallinfo->showmode, "-output", gt_str_array_get(flagsoutputoption,i), err) != 0) { oprval = GT_OPTION_PARSER_ERROR; break; } } } } } } gt_str_array_delete(flagsoutputoption); gt_option_parser_delete(op); if (oprval == GT_OPTION_PARSER_OK && parsed_args != argc) { gt_error_set(err,"superfluous program parameters"); oprval = GT_OPTION_PARSER_ERROR; } return oprval; } static bool dotestsequence(bool doms,const Gfmsubcallinfo *gfmsubcallinfo) { if (gfmsubcallinfo->indextype == Packedindextype && gfmsubcallinfo->verifywitnesspos && doms) { return true; } return false; } static int gt_greedyfwdmat(bool doms,int argc, const char **argv,GtError *err) { Gfmsubcallinfo gfmsubcallinfo; Fmindex fmindex; Suffixarray suffixarray; void *packedindex = NULL; GtLogger *logger = NULL; bool haserr = false; const GtAlphabet *alphabet = NULL; #ifdef WITHBCKTAB unsigned int prefixlength = 0; #endif unsigned long totallength; bool gt_mapfmindexfail = false; gt_error_check(err); switch (parsegfmsub(doms,&gfmsubcallinfo, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: gt_str_delete(gfmsubcallinfo.indexname); gt_str_array_delete(gfmsubcallinfo.queryfilenames); return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: gt_str_delete(gfmsubcallinfo.indexname); gt_str_array_delete(gfmsubcallinfo.queryfilenames); return 0; } logger = gt_logger_new(false, GT_LOGGER_DEFLT_PREFIX, stdout); if (gfmsubcallinfo.indextype == Fmindextype) { if (gt_mapfmindex(&fmindex,gt_str_get(gfmsubcallinfo.indexname), logger, err) != 0) { haserr = true; gt_mapfmindexfail = true; } else { alphabet = fmindex.alphabet; } totallength = fmindex.bwtlength-1; } else { unsigned int mappedbits; if (gfmsubcallinfo.indextype == Esaindextype) { mappedbits = SARR_ESQTAB | SARR_SUFTAB #undef WITHBCKTAB #ifdef WITHBCKTAB | SARR_BCKTAB #endif ; } else { if (dotestsequence(doms,&gfmsubcallinfo)) { mappedbits = SARR_ESQTAB; } else { mappedbits = 0; } } if (gt_mapsuffixarray(&suffixarray, mappedbits, gt_str_get(gfmsubcallinfo.indexname), logger, err) != 0) { haserr = true; totallength = 0; } else { alphabet = gt_encseq_alphabet(suffixarray.encseq); #ifdef WITHBCKTAB prefixlength = suffixarray.prefixlength; #endif totallength = gt_encseq_total_length(suffixarray.encseq); } if (!haserr) { if (gfmsubcallinfo.indextype == Packedindextype) { packedindex = gt_loadvoidBWTSeqForSA(gt_str_get(gfmsubcallinfo.indexname), false, err); if (packedindex == NULL) { haserr = true; } } } } if (!haserr) { const void *theindex; Greedygmatchforwardfunction gmatchforwardfunction; if (gfmsubcallinfo.indextype == Fmindextype) { theindex = (const void *) &fmindex; if (doms) { gmatchforwardfunction = gt_skfmmstats; } else { gmatchforwardfunction = gt_skfmuniqueforward; } } else { if (gfmsubcallinfo.indextype == Esaindextype) { theindex = (const void *) &suffixarray; if (doms) { gmatchforwardfunction = gt_suffixarraymstats; } else { gmatchforwardfunction = gt_suffixarrayuniqueforward; } } else { gt_assert(gfmsubcallinfo.indextype == Packedindextype); theindex = (const void *) packedindex; if (doms) { gmatchforwardfunction = gt_voidpackedindexmstatsforward; } else { gmatchforwardfunction = gt_voidpackedindexuniqueforward; } } } if (!haserr) { #ifdef WITHBCKTAB if (prefixlength > 0 && gfmsubcallinfo.indextype == Esaindextype && runsubstringiteration(gmatchforwardfunction, theindex, totallength, suffixarray.bcktab, suffixarray.countspecialcodes, alphabet, prefixlength, gfmsubcallinfo.queryfilenames, err) != 0) { haserr = true; } #endif if (!haserr && gt_findsubquerygmatchforward(dotestsequence(doms,&gfmsubcallinfo) ? suffixarray.encseq : NULL, theindex, totallength, gmatchforwardfunction, alphabet, gfmsubcallinfo.queryfilenames, gfmsubcallinfo.minlength, gfmsubcallinfo.maxlength, (gfmsubcallinfo.showmode & SHOWSEQUENCE) ? true : false, (gfmsubcallinfo.showmode & SHOWQUERYPOS) ? true : false, (gfmsubcallinfo.showmode & SHOWSUBJECTPOS) ? true : false, err) != 0) { haserr = true; } } } if (gfmsubcallinfo.indextype == Fmindextype) { if (!gt_mapfmindexfail) { gt_freefmindex(&fmindex); } } else { if (gfmsubcallinfo.indextype == Packedindextype && packedindex != NULL) { gt_deletevoidBWTSeq(packedindex); } gt_freesuffixarray(&suffixarray); } gt_logger_delete(logger); gt_str_delete(gfmsubcallinfo.indexname); gt_str_array_delete(gfmsubcallinfo.queryfilenames); return haserr ? -1 : 0; } int gt_uniquesub(int argc, const char **argv, GtError *err) { return gt_greedyfwdmat(false,argc, argv, err); } int gt_matstat(int argc, const char **argv, GtError *err) { return gt_greedyfwdmat(true,argc, argv, err); } genometools-1.5.1/src/tools/gt_matstat.h000066400000000000000000000017261211610345200203210ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MATSTAT_H #define GT_MATSTAT_H /* the matstat tool */ int gt_matstat(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_maxpairs.c000066400000000000000000000601311211610345200204560ustar00rootroot00000000000000/* Copyright (c) 2007-2013 Stefan Kurtz Copyright (c) 2007-2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/error_api.h" #include "core/str_api.h" #include "core/logger.h" #include "core/ma_api.h" #include "core/unused_api.h" #include "core/option_api.h" #include "core/tool_api.h" #include "core/versionfunc.h" #include "core/format64.h" #include "match/esa-seqread.h" #include "match/esa-mmsearch.h" #include "match/esa-maxpairs.h" #include "match/test-maxpairs.pr" #include "match/querymatch.h" #include "match/greedyedist.h" #include "match/xdrop.h" #include "tools/gt_maxpairs.h" typedef struct { unsigned int userdefinedleastlength; unsigned long samples; bool scanfile, beverbose, forward, reverse, searchspm, extendseed; GtStr *indexname; GtStrArray *queryfiles; GtOption *refforwardoption; } Maxpairsoptions; static int gt_simpleexactselfmatchoutput(void *info, const GtEncseq *encseq, unsigned long len, unsigned long pos1, unsigned long pos2, GT_UNUSED GtError *err) { unsigned long queryseqnum, seqstartpos, seqlength; GtQuerymatch *querymatch = (GtQuerymatch *) info; if (pos1 > pos2) { unsigned long tmp = pos1; pos1 = pos2; pos2 = tmp; } queryseqnum = gt_encseq_seqnum(encseq,pos2); seqstartpos = gt_encseq_seqstartpos(encseq, queryseqnum); seqlength = gt_encseq_seqlength(encseq, queryseqnum); gt_assert(pos2 >= seqstartpos); gt_querymatch_fill(querymatch, len, pos1, GT_READMODE_FORWARD, false, 0, 0, true, (uint64_t) queryseqnum, len, pos2 - seqstartpos); return gt_querymatch_output(info, encseq, querymatch, NULL, seqlength, err); } typedef struct { GtQuerymatch *querymatchspaceptr; GtXdropArbitraryscores arbitscores; GtXdropresources *res; GtFrontResource *frontresource; GtXdropbest best_left; GtXdropbest best_right; GtXdropscore belowscore; GtSeqabstract *useq, *vseq; const GtUchar *query_sequence; unsigned long query_totallength; } GtXdropmatchinfo; static int gt_simplexdropselfmatchoutput(void *info, const GtEncseq *encseq, unsigned long len, unsigned long pos1, unsigned long pos2, GtError *err) { GtXdropmatchinfo *xdropmatchinfo = (GtXdropmatchinfo *) info; GtXdropscore score; unsigned long dbseqnum, dbseqstartpos, dbseqlength, dbstart, dblen, querystart, queryseqnum, querylen, queryseqlength, queryseqstartpos; const unsigned long dbtotallength = gt_encseq_total_length(encseq); if (pos1 > pos2) { unsigned long tmp = pos1; pos1 = pos2; pos2 = tmp; } dbseqnum = gt_encseq_seqnum(encseq,pos1), dbseqstartpos = gt_encseq_seqstartpos(encseq,dbseqnum), dbseqlength = gt_encseq_seqlength(encseq,dbseqnum); if (pos2 < dbseqstartpos + dbseqlength) { queryseqnum = dbseqnum; queryseqstartpos = dbseqstartpos; queryseqlength = dbseqlength; } else { queryseqnum = gt_encseq_seqnum(encseq,pos2); gt_assert(dbseqnum < queryseqnum); queryseqstartpos = gt_encseq_seqstartpos(encseq,queryseqnum); queryseqlength = gt_encseq_seqlength(encseq,queryseqnum); } if (pos1 > 0 && pos2 > 0) { gt_assert(pos1 >= dbseqstartpos && pos2 >= queryseqstartpos); gt_seqabstract_reinit_encseq(xdropmatchinfo->useq,encseq, pos1 - dbseqstartpos,0); gt_seqabstract_reinit_encseq(xdropmatchinfo->vseq,encseq, pos2 - queryseqstartpos,0); gt_evalxdroparbitscoresextend(false, &xdropmatchinfo->best_left, xdropmatchinfo->res, xdropmatchinfo->useq, xdropmatchinfo->vseq, pos1, pos2, xdropmatchinfo->belowscore); } else { xdropmatchinfo->best_left.ivalue = 0; xdropmatchinfo->best_left.jvalue = 0; xdropmatchinfo->best_left.score = 0; } if (pos1 + len < dbtotallength && pos2 + len < dbtotallength) { const unsigned long seqend1 = dbseqstartpos + dbseqlength; const unsigned long seqend2 = queryseqstartpos + queryseqlength; gt_assert(seqend1 >= pos1 + len && seqend2 >= pos2 + len); gt_seqabstract_reinit_encseq(xdropmatchinfo->useq, encseq,seqend1 - (pos1 + len),0); gt_seqabstract_reinit_encseq(xdropmatchinfo->vseq, encseq,seqend2 - (pos2 + len),0); gt_evalxdroparbitscoresextend(true, &xdropmatchinfo->best_right, xdropmatchinfo->res, xdropmatchinfo->useq, xdropmatchinfo->vseq, pos1 + len, pos2 + len, xdropmatchinfo->belowscore); } else { xdropmatchinfo->best_right.ivalue = 0; xdropmatchinfo->best_right.jvalue = 0; xdropmatchinfo->best_right.score = 0; } gt_assert(pos1 >= (unsigned long) xdropmatchinfo->best_left.ivalue && pos2 >= (unsigned long) xdropmatchinfo->best_left.jvalue); querystart = pos2 - xdropmatchinfo->best_left.jvalue; gt_assert(querystart >= queryseqstartpos); dblen = len + xdropmatchinfo->best_left.ivalue + xdropmatchinfo->best_right.ivalue; dbstart = pos1 - xdropmatchinfo->best_left.ivalue; querylen = len + xdropmatchinfo->best_left.jvalue + xdropmatchinfo->best_right.jvalue, score = (GtXdropscore) len * xdropmatchinfo->arbitscores.mat + xdropmatchinfo->best_left.score + xdropmatchinfo->best_right.score; gt_seqabstract_reinit_encseq(xdropmatchinfo->useq, encseq, dblen, dbstart); gt_seqabstract_reinit_encseq(xdropmatchinfo->vseq, encseq, querylen, querystart); gt_querymatch_fill(xdropmatchinfo->querymatchspaceptr, dblen, dbstart, GT_READMODE_FORWARD, false, score, greedyunitedist(xdropmatchinfo->frontresource, xdropmatchinfo->useq,xdropmatchinfo->vseq), true, (uint64_t) queryseqnum, querylen, querystart - queryseqstartpos); return gt_querymatch_output(info, encseq, xdropmatchinfo->querymatchspaceptr, NULL, gt_encseq_seqlength(encseq, queryseqnum), err); } static int gt_processxdropquerymatches(void *info, const GtEncseq *encseq, const GtQuerymatch *querymatch, const GtUchar *query, unsigned long query_totallength, GtError *err) { GtXdropmatchinfo *xdropmatchinfo = (GtXdropmatchinfo *) info; GtXdropscore score; unsigned long querystart, dblen, dbstart, querylen; unsigned long pos1 = gt_querymatch_dbstart(querymatch); unsigned long pos2 = gt_querymatch_querystart(querymatch); unsigned long len = gt_querymatch_querylen(querymatch); const unsigned long dbtotallength = gt_encseq_total_length(encseq); uint64_t queryseqnum; unsigned long dbseqnum, dbseqstartpos, dbseqlength; dbseqnum = gt_encseq_seqnum(encseq,pos1); dbseqstartpos = gt_encseq_seqstartpos(encseq,dbseqnum); dbseqlength = gt_encseq_seqlength(encseq,dbseqnum); if (pos1 > 0 && pos2 > 0) { gt_assert(dbseqstartpos < pos1); gt_seqabstract_reinit_encseq(xdropmatchinfo->useq,encseq, pos1 - dbseqstartpos,0); gt_seqabstract_reinit_ptr(xdropmatchinfo->vseq,query,pos2,0); gt_evalxdroparbitscoresextend(false, &xdropmatchinfo->best_left, xdropmatchinfo->res, xdropmatchinfo->useq, xdropmatchinfo->vseq, pos1, pos2, xdropmatchinfo->belowscore); } else { xdropmatchinfo->best_left.ivalue = 0; xdropmatchinfo->best_left.jvalue = 0; xdropmatchinfo->best_left.score = 0; } if (pos1 + len < dbtotallength && pos2 + len < query_totallength) { gt_seqabstract_reinit_encseq(xdropmatchinfo->useq, encseq,dbseqstartpos + dbseqlength - (pos1 + len),0); gt_seqabstract_reinit_ptr(xdropmatchinfo->vseq, query,query_totallength - (pos2 + len),0); gt_evalxdroparbitscoresextend(true, &xdropmatchinfo->best_right, xdropmatchinfo->res, xdropmatchinfo->useq, xdropmatchinfo->vseq, pos1 + len, pos2 + len, xdropmatchinfo->belowscore); } else { xdropmatchinfo->best_right.ivalue = 0; xdropmatchinfo->best_right.jvalue = 0; xdropmatchinfo->best_right.score = 0; } gt_assert(pos1 >= (unsigned long) xdropmatchinfo->best_left.ivalue && pos2 >= (unsigned long) xdropmatchinfo->best_left.jvalue); querystart = pos2 - xdropmatchinfo->best_left.jvalue; queryseqnum = gt_querymatch_queryseqnum(querymatch); dblen = len + xdropmatchinfo->best_left.ivalue + xdropmatchinfo->best_right.ivalue; dbstart = pos1 - xdropmatchinfo->best_left.ivalue; querylen = len + xdropmatchinfo->best_left.jvalue + xdropmatchinfo->best_right.jvalue, score = (GtXdropscore) len * xdropmatchinfo->arbitscores.mat + xdropmatchinfo->best_left.score + xdropmatchinfo->best_right.score; gt_seqabstract_reinit_encseq(xdropmatchinfo->useq, encseq, dblen, dbstart); gt_seqabstract_reinit_ptr(xdropmatchinfo->vseq, query, querylen, querystart); gt_querymatch_fill(xdropmatchinfo->querymatchspaceptr, dblen, dbstart, GT_READMODE_FORWARD, false, score, greedyunitedist(xdropmatchinfo->frontresource, xdropmatchinfo->useq,xdropmatchinfo->vseq), false, queryseqnum, querylen, querystart); return gt_querymatch_output(info, encseq, xdropmatchinfo->querymatchspaceptr, query, query_totallength, err); } static int gt_simplesuffixprefixmatchoutput(GT_UNUSED void *info, const GtEncseq *encseq, unsigned long matchlen, unsigned long pos1, unsigned long pos2, GT_UNUSED GtError *err) { unsigned long seqnum1, relpos1, seqnum2, relpos2, seqstartpos; if (pos1 > pos2) { unsigned long tmp = pos1; pos1 = pos2; pos2 = tmp; } seqnum1 = gt_encseq_seqnum(encseq,pos1); seqstartpos = gt_encseq_seqstartpos(encseq, seqnum1); gt_assert(seqstartpos <= pos1); relpos1 = pos1 - seqstartpos; seqnum2 = gt_encseq_seqnum(encseq,pos2); seqstartpos = gt_encseq_seqstartpos(encseq, seqnum2); gt_assert(seqstartpos <= pos2); relpos2 = pos2 - seqstartpos; if (relpos1 == 0) { unsigned long seqlen2 = gt_encseq_seqlength(encseq,seqnum2); if (relpos2 + matchlen == seqlen2) { printf("%lu %lu %lu\n",seqnum2,seqnum1,matchlen); } } else { if (relpos2 == 0) { unsigned long seqlen1 = gt_encseq_seqlength(encseq,seqnum1); if (relpos1 + matchlen == seqlen1) { printf("%lu %lu %lu\n",seqnum1,seqnum2,matchlen); } } } return 0; } static int callenummaxpairs(const char *indexname, unsigned int userdefinedleastlength, bool scanfile, Processmaxpairs processmaxpairs, void *processmaxpairsinfo, GtLogger *logger, GtError *err) { bool haserr = false; Sequentialsuffixarrayreader *ssar; gt_error_check(err); ssar = gt_newSequentialsuffixarrayreaderfromfile(indexname, SARR_LCPTAB | SARR_SUFTAB | SARR_ESQTAB | SARR_SSPTAB, scanfile ? SEQ_scan : SEQ_mappedboth, logger, err); if (ssar == NULL) { haserr = true; } if (!haserr && gt_enumeratemaxpairs(ssar, gt_encseqSequentialsuffixarrayreader(ssar), gt_readmodeSequentialsuffixarrayreader(ssar), userdefinedleastlength, processmaxpairs, processmaxpairsinfo, err) != 0) { haserr = true; } if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } return haserr ? -1 : 0; } static void *gt_repfind_arguments_new(void) { Maxpairsoptions *arguments; arguments = gt_malloc(sizeof (*arguments)); arguments->indexname = gt_str_new(); arguments->queryfiles = gt_str_array_new(); return arguments; } static void gt_repfind_arguments_delete(void *tool_arguments) { Maxpairsoptions *arguments = tool_arguments; if (!arguments) { return; } gt_str_delete(arguments->indexname); gt_str_array_delete(arguments->queryfiles); gt_option_delete(arguments->refforwardoption); gt_free(arguments); } static GtOptionParser *gt_repfind_option_parser_new(void *tool_arguments) { GtOptionParser *op; GtOption *option, *reverseoption, *queryoption, *extendseedoption, *scanoption, *sampleoption, *forwardoption, *spmoption; Maxpairsoptions *arguments = tool_arguments; op = gt_option_parser_new("[options] -ii indexname", "Compute maximal repeats."); gt_option_parser_set_mail_address(op,""); option = gt_option_new_uint_min("l","Specify minimum length of repeats", &arguments->userdefinedleastlength, 20U, 1U); gt_option_parser_add_option(op, option); forwardoption = gt_option_new_bool("f","Compute maximal forward repeats", &arguments->forward, true); gt_option_parser_add_option(op, forwardoption); arguments->refforwardoption = gt_option_ref(forwardoption); reverseoption = gt_option_new_bool("r","Compute maximal reverse matches", &arguments->reverse, false); gt_option_parser_add_option(op, reverseoption); sampleoption = gt_option_new_ulong_min("samples","Specify number of samples", &arguments->samples, 0, 1UL); gt_option_is_development_option(sampleoption); gt_option_parser_add_option(op, sampleoption); spmoption = gt_option_new_bool("spm","Search for suffix prefix matches", &arguments->searchspm, false); gt_option_is_development_option(spmoption); gt_option_parser_add_option(op, spmoption); extendseedoption = gt_option_new_bool("extend","Extend seed to both sides", &arguments->extendseed, false); gt_option_is_development_option(extendseedoption); gt_option_parser_add_option(op, extendseedoption); scanoption = gt_option_new_bool("scan","scan index rather than mapping " "it to main memory", &arguments->scanfile, false); gt_option_parser_add_option(op, scanoption); option = gt_option_new_string("ii", "Specify input index", arguments->indexname, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); queryoption = gt_option_new_filename_array("q", "Specify query files", arguments->queryfiles); gt_option_is_development_option(queryoption); gt_option_parser_add_option(op, queryoption); option = gt_option_new_bool("v", "be verbose ", &arguments->beverbose, false); gt_option_parser_add_option(op, option); gt_option_exclude(queryoption,sampleoption); gt_option_exclude(queryoption,scanoption); gt_option_exclude(queryoption,reverseoption); gt_option_exclude(queryoption,spmoption); gt_option_exclude(reverseoption,spmoption); gt_option_exclude(queryoption,spmoption); gt_option_exclude(sampleoption,spmoption); return op; } static int gt_repfind_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GT_UNUSED GtError *err) { Maxpairsoptions *arguments = tool_arguments; if (!gt_option_is_set(arguments->refforwardoption) && arguments->reverse) { arguments->forward = false; } return 0; } static int gt_repfind_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { bool haserr = false; Maxpairsoptions *arguments = tool_arguments; GtLogger *logger = NULL; GtQuerymatch *querymatchspaceptr = gt_querymatch_new(); GtXdropmatchinfo xdropmatchinfo; gt_error_check(err); xdropmatchinfo.querymatchspaceptr = querymatchspaceptr; xdropmatchinfo.useq = gt_seqabstract_new_empty(); xdropmatchinfo.vseq = gt_seqabstract_new_empty(); xdropmatchinfo.arbitscores.mat = 2; xdropmatchinfo.arbitscores.mis = -2; xdropmatchinfo.arbitscores.ins = -3; xdropmatchinfo.arbitscores.del = -3; xdropmatchinfo.frontresource = gt_frontresource_new(100UL); xdropmatchinfo.res = gt_xdrop_resources_new(&xdropmatchinfo.arbitscores); xdropmatchinfo.belowscore = 5L; logger = gt_logger_new(arguments->beverbose, GT_LOGGER_DEFLT_PREFIX, stdout); if (parsed_args < argc) { gt_error_set(err,"superfluous arguments: \"%s\"",argv[argc-1]); haserr = true; } if (!haserr) { if (gt_str_array_size(arguments->queryfiles) == 0) { if (arguments->samples == 0) { if (arguments->forward) { if (callenummaxpairs(gt_str_get(arguments->indexname), arguments->userdefinedleastlength, arguments->scanfile, arguments->searchspm ? gt_simplesuffixprefixmatchoutput : (arguments->extendseed ? gt_simplexdropselfmatchoutput : gt_simpleexactselfmatchoutput), arguments->extendseed ? (void *) &xdropmatchinfo : (void *) querymatchspaceptr, logger, err) != 0) { haserr = true; } } if (!haserr && arguments->reverse) { if (gt_callenumselfmatches(gt_str_get(arguments->indexname), GT_READMODE_REVERSE, arguments->userdefinedleastlength, /*arguments->extendseed ? gt_processxdropquerymatches :*/ gt_querymatch_output, /*arguments->extendseed ? (void *) &xdropmatchinfo :*/ NULL, logger, err) != 0) { haserr = true; } } } else { if (gt_testmaxpairs(gt_str_get(arguments->indexname), arguments->samples, arguments->userdefinedleastlength, (unsigned long) (100 * arguments->userdefinedleastlength), logger, err) != 0) { haserr = true; } } } else { if (gt_callenumquerymatches(gt_str_get(arguments->indexname), arguments->queryfiles, false, true, false, arguments->userdefinedleastlength, NULL, arguments->extendseed ? gt_processxdropquerymatches : gt_querymatch_output, arguments->extendseed ? (void *) &xdropmatchinfo : NULL, logger, err) != 0) { haserr = true; } } } gt_querymatch_delete(querymatchspaceptr); gt_seqabstract_delete(xdropmatchinfo.useq); gt_seqabstract_delete(xdropmatchinfo.vseq); gt_xdrop_resources_delete(xdropmatchinfo.res); gt_frontresource_delete(xdropmatchinfo.frontresource); gt_logger_delete(logger); return haserr ? -1 : 0; } GtTool* gt_repfind(void) { return gt_tool_new(gt_repfind_arguments_new, gt_repfind_arguments_delete, gt_repfind_option_parser_new, gt_repfind_arguments_check, gt_repfind_runner); } genometools-1.5.1/src/tools/gt_maxpairs.h000066400000000000000000000016731211610345200204710ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MAXPAIRS_H #define GT_MAXPAIRS_H /* the repfind tool */ GtTool* gt_repfind(void); #endif genometools-1.5.1/src/tools/gt_md5_to_id.c000066400000000000000000000104501211610345200204740ustar00rootroot00000000000000/* Copyright (c) 2010-2012 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/gtdatahelp.h" #include "extended/seqid2file.h" #include "extended/md5_to_id_stream_api.h" #include "tools/gt_md5_to_id.h" typedef struct { bool verbose; GtSeqid2FileInfo *s2fi; GtOutputFileInfo *ofi; GtFile *outfp; } MD5ToSeqidsArguments; static void *gt_md5_to_id_arguments_new(void) { MD5ToSeqidsArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->s2fi = gt_seqid2file_info_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_md5_to_id_arguments_delete(void *tool_arguments) { MD5ToSeqidsArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_seqid2file_info_delete(arguments->s2fi); gt_free(arguments); } static GtOptionParser* gt_md5_to_id_option_parser_new(void *tool_arguments) { MD5ToSeqidsArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Change MD5 fingerprints used as sequence IDs in " "given GFF3 files to ``regular'' ones."); /* -seqfile, -matchdesc, -usedesc and -regionmapping */ gt_seqid2file_register_options_ext(op, arguments->s2fi, false, true); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); return op; } static int gt_md5_to_id_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtNodeStream *gff3_in_stream, *md5_to_id_stream = NULL, *gff3_out_stream = NULL; MD5ToSeqidsArguments *arguments = tool_arguments; GtRegionMapping *region_mapping = NULL; int had_err = 0; gt_error_check(err); gt_assert(arguments); /* create a gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); if (arguments->verbose && arguments->outfp) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); /* create region mapping */ if (gt_seqid2file_option_used(arguments->s2fi)) { region_mapping = gt_seqid2file_region_mapping_new(arguments->s2fi, err); if (!region_mapping) had_err = -1; } if (!had_err) { /* create seqid to md5 stream */ md5_to_id_stream = gt_md5_to_id_stream_new(gff3_in_stream, region_mapping); /* create gff3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(md5_to_id_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); } /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(md5_to_id_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool *gt_md5_to_id(void) { return gt_tool_new(gt_md5_to_id_arguments_new, gt_md5_to_id_arguments_delete, gt_md5_to_id_option_parser_new, NULL, gt_md5_to_id_runner); } genometools-1.5.1/src/tools/gt_md5_to_id.h000066400000000000000000000016361211610345200205070ustar00rootroot00000000000000/* Copyright (c) 2010 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MD5_TO_ID_H #define GT_MD5_TO_ID_H #include "core/tool_api.h" /* the MD5s to seqids tool */ GtTool* gt_md5_to_id(void); #endif genometools-1.5.1/src/tools/gt_merge.c000066400000000000000000000065561211610345200177440ustar00rootroot00000000000000/* Copyright (c) 2006-2011 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/option_api.h" #include "core/output_file_api.h" #include "core/versionfunc.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/merge_stream_api.h" #include "tools/gt_merge.h" static GtOPrval parse_options(int *parsed_args, GtFile **outfp, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOutputFileInfo *ofi; GtOPrval oprval; gt_error_check(err); op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Merge sorted GFF3 files in sorted fashion."); ofi = gt_output_file_info_new(); gt_output_file_register_options(op, outfp, ofi); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_output_file_info_delete(ofi); gt_option_parser_delete(op); return oprval; } int gt_merge(int argc, const char **argv, GtError *err) { GtNodeStream *gff3_in_stream, *merge_stream, *gff3_out_stream; GtArray *genome_streams; unsigned long i; int parsed_args, had_err; GtFile *outfp; /* option parsing */ switch (parse_options(&parsed_args, &outfp, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: return 0; } /* alloc */ genome_streams = gt_array_new(sizeof (GtNodeStream*)); /* XXX: check for multiple specification of '-' */ /* create an gff3 input stream for each given file */ if (parsed_args < argc) { /* we got files to open */ for (i = parsed_args; i < argc; i++) { gff3_in_stream = gt_gff3_in_stream_new_sorted(argv[i]); gt_array_add(genome_streams, gff3_in_stream); } } else { /* use stdin */ gff3_in_stream = gt_gff3_in_stream_new_sorted(NULL); gt_array_add(genome_streams, gff3_in_stream); } /* create a merge stream */ merge_stream = gt_merge_stream_new(genome_streams); /* create a gff3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(merge_stream, outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(merge_stream); for (i = 0; i < gt_array_size(genome_streams); i++) gt_node_stream_delete(*(GtNodeStream**) gt_array_get(genome_streams, i)); gt_array_delete(genome_streams); gt_file_delete(outfp); return had_err; } genometools-1.5.1/src/tools/gt_merge.h000066400000000000000000000017321211610345200177400ustar00rootroot00000000000000/* Copyright (c) 2006-2007 Gordon Gremme Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MERGE_H #define GT_MERGE_H /* the merge tool */ int gt_merge(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_mergeesa.c000066400000000000000000000063601211610345200204260ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/error.h" #include "core/logger.h" #include "core/option_api.h" #include "core/versionfunc.h" #include "match/test-mergeesa.pr" #include "tools/gt_mergeesa.h" static GtOPrval parse_options(GtStr *indexname,GtStrArray *indexnametab, int *parsed_args, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOPrval oprval; GtOption *option; gt_error_check(err); op = gt_option_parser_new("storeindex ...", "Merge indexes into one index."); gt_option_parser_set_mail_address(op,""); option = gt_option_new_filename_array("ii", "specify input index files (mandatory)", indexnametab); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); option = gt_option_new_string("indexname", "specify index to be created", indexname, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } int gt_mergeesa(int argc, const char **argv, GtError *err) { GtStr *storeindex; GtStrArray *indexnametab; bool haserr = false; int parsed_args; gt_error_check(err); storeindex = gt_str_new(); indexnametab = gt_str_array_new(); switch (parse_options(storeindex, indexnametab, &parsed_args, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: haserr = true; break; case GT_OPTION_PARSER_REQUESTS_EXIT: return 0; } if (!haserr) { unsigned long i; GtLogger *logger; printf("# storeindex=%s\n",gt_str_get(storeindex)); for (i=0; i Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MERGEESA_H #define GT_MERGEESA_H /* the mergeesa tool */ int gt_mergeesa(int argc, const char **argv, GtError *err); #endif genometools-1.5.1/src/tools/gt_mergefeat.c000066400000000000000000000065331211610345200205770ustar00rootroot00000000000000/* Copyright (c) 2009 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma_api.h" #include "core/output_file_api.h" #include "extended/feature_type.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/merge_feature_stream_api.h" #include "tools/gt_mergefeat.h" typedef struct { GtOutputFileInfo *ofi; GtFile *outfp; } InterFeatArguments; static void* gt_mergefeat_arguments_new(void) { InterFeatArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_mergefeat_arguments_delete(void *tool_arguments) { InterFeatArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_mergefeat_option_parser_new(void *tool_arguments) { InterFeatArguments *arguments = tool_arguments; GtOptionParser *op; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Merge adjacent " "features without children of the same type in " "given GFF3 file(s)."); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); return op; } static int gt_mergefeat_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { InterFeatArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream, *merge_feature_stream, *gff3_out_stream; int had_err; gt_error_check(err); gt_assert(arguments); /* create a gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); /* create merge feature stream */ merge_feature_stream = gt_merge_feature_stream_new(gff3_in_stream); /* create gff3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(merge_feature_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(merge_feature_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool* gt_mergefeat(void) { return gt_tool_new(gt_mergefeat_arguments_new, gt_mergefeat_arguments_delete, gt_mergefeat_option_parser_new, NULL, gt_mergefeat_runner); } genometools-1.5.1/src/tools/gt_mergefeat.h000066400000000000000000000016351211610345200206020ustar00rootroot00000000000000/* Copyright (c) 2009 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MERGEFEAT_H #define GT_MERGEFEAT_H #include "core/tool_api.h" /* the merge feature tool */ GtTool* gt_mergefeat(void); #endif genometools-1.5.1/src/tools/gt_mgth.c000066400000000000000000000020451211610345200175710ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "mgth/metagenomethreader.h" #include "tools/gt_mgth.h" int gt_mgth(int argc, const char **argv, GtError *err) { gt_error_check(err); return gt_metagenomethreader(argc, argv, err); } genometools-1.5.1/src/tools/gt_mgth.h000066400000000000000000000017441211610345200176030ustar00rootroot00000000000000/* Copyright (c) 2007 David Schmitz-Huebsch Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MGTH_H #define GT_MGTH_H /* the MetaGenomeThreader tool */ int gt_mgth(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_mkfeatureindex.c000066400000000000000000000217641211610345200216560ustar00rootroot00000000000000/* Copyright (c) 2009 Sascha Steinbiss Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/fileutils_api.h" #include "core/ma.h" #include "core/str_array_api.h" #include "core/unused_api.h" #include "core/xposix.h" #include "extended/anno_db_gfflike_api.h" #include "extended/bed_in_stream.h" #include "extended/feature_index_api.h" #include "extended/feature_stream_api.h" #include "extended/gff3_in_stream.h" #include "extended/gtf_in_stream.h" #include "extended/rdb_api.h" #ifdef HAVE_MYSQL #include "core/password_entry.h" #include "extended/rdb_mysql_api.h" #endif #include "extended/rdb_sqlite_api.h" #include "tools/gt_mkfeatureindex.h" #define GT_SQLITE_BACKEND_STRING "sqlite" #define GT_MYSQL_BACKEND_STRING "mysql" typedef struct { GtStr *backend, *filename, *host, *user, *pass, *database, *input; int port; bool verbose, force; } GtMkfeatureindexArguments; static void* gt_mkfeatureindex_arguments_new(void) { GtMkfeatureindexArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->backend = gt_str_new(); arguments->filename = gt_str_new(); arguments->host = gt_str_new(); arguments->user = gt_str_new(); arguments->pass = gt_str_new(); arguments->database = gt_str_new(); arguments->input = gt_str_new(); return arguments; } static void gt_mkfeatureindex_arguments_delete(void *tool_arguments) { GtMkfeatureindexArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->backend); gt_str_delete(arguments->filename); gt_str_delete(arguments->host); gt_str_delete(arguments->user); gt_str_delete(arguments->pass); gt_str_delete(arguments->database); gt_str_delete(arguments->input); gt_free(arguments); } static GtOptionParser* gt_mkfeatureindex_option_parser_new(void *tool_arguments) { GtMkfeatureindexArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *backend_option, *filenameoption; static const char *backends[] = { GT_SQLITE_BACKEND_STRING, #ifdef HAVE_MYSQL GT_MYSQL_BACKEND_STRING, #endif NULL }; static const char *inputs[] = { "gff", "bed", "gtf", NULL }; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] ", "Creates a new FeatureIndex from annotation data."); /* -force */ option = gt_option_new_bool("force", "force writing to output file", &arguments->force, false); gt_option_parser_add_option(op, option); /* -backend */ backend_option = gt_option_new_choice("backend", "database backend to use\n" "choose from [" #ifdef HAVE_SQLITE GT_SQLITE_BACKEND_STRING #endif #ifdef HAVE_MYSQL "|" GT_MYSQL_BACKEND_STRING #endif "]", arguments->backend, backends[0], backends); gt_option_parser_add_option(op, backend_option); /* -input */ option = gt_option_new_choice("input", "input data format\n" "choose from gff|bed|gtf", arguments->input, inputs[0], inputs); gt_option_parser_add_option(op, option); /* -filename */ filenameoption = gt_option_new_string("filename", "filename for feature database " "(sqlite backend only)", arguments->filename, NULL); gt_option_parser_add_option(op, filenameoption); #ifdef HAVE_MYSQL /* -host */ option = gt_option_new_string("host", "hostname for database connection", arguments->host, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory_either(option, filenameoption); /* -user */ option = gt_option_new_string("user", "username for database connection", arguments->user, NULL); gt_option_parser_add_option(op, option); /* -database */ option = gt_option_new_string("database", "database name for database connection", arguments->database, NULL); gt_option_parser_add_option(op, option); /* -port */ option = gt_option_new_int_max("port", "port for database connection", &arguments->port, 3333, 65534); gt_option_parser_add_option(op, option); #else gt_option_is_mandatory(filenameoption); #endif option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); return op; } static int gt_mkfeatureindex_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GT_UNUSED GtError *err) { GT_UNUSED GtMkfeatureindexArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); return had_err; } static int gt_mkfeatureindex_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtMkfeatureindexArguments *arguments = tool_arguments; GtNodeStream *in_stream = NULL, *feature_stream = NULL; GtRDB *rdb = NULL; GtAnnoDBSchema *adb = NULL; GtFeatureIndex *fis = NULL; int had_err = 0; gt_error_check(err); gt_assert(arguments); #ifdef HAVE_SQLITE if (strcmp(gt_str_get(arguments->backend), GT_SQLITE_BACKEND_STRING) == 0) { if (gt_file_exists(gt_str_get(arguments->filename))) { if (arguments->force) { gt_xunlink(gt_str_get(arguments->filename)); } else { gt_error_set(err, "file \"%s\" exists already. use option -force to " "overwrite", gt_str_get(arguments->filename)); had_err = -1; } } if (!had_err) { rdb = gt_rdb_sqlite_new(gt_str_get(arguments->filename), err); if (!rdb) had_err = -1; } } #endif #ifdef HAVE_MYSQL if (strcmp(gt_str_get(arguments->backend), GT_MYSQL_BACKEND_STRING) == 0) { arguments->pass = gt_get_password("password: ", err); rdb = gt_rdb_mysql_new(gt_str_get(arguments->host), arguments->port, gt_str_get(arguments->database), gt_str_get(arguments->user), gt_str_get(arguments->pass), err); if (!rdb) had_err = -1; } #endif adb = gt_anno_db_gfflike_new(); if (!had_err && !adb) had_err = -1; if (!had_err) { fis = gt_anno_db_schema_get_feature_index(adb, rdb, err); if (!fis) had_err = -1; } if (!had_err) { if (strcmp(gt_str_get(arguments->input), "gff") == 0) { in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); if (arguments->verbose) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) in_stream); } else if (strcmp(gt_str_get(arguments->input), "bed") == 0) { if (argc - parsed_args == 0) in_stream = gt_bed_in_stream_new(NULL); else in_stream = gt_bed_in_stream_new(argv[parsed_args]); } else if (strcmp(gt_str_get(arguments->input), "gtf") == 0) { if (argc - parsed_args == 0) in_stream = gt_gtf_in_stream_new(NULL); else in_stream = gt_gtf_in_stream_new(argv[parsed_args]); } gt_assert(in_stream); feature_stream = gt_feature_stream_new(in_stream, fis); had_err = gt_node_stream_pull(feature_stream, err); } gt_node_stream_delete(feature_stream); gt_node_stream_delete(in_stream); gt_feature_index_delete(fis); gt_anno_db_schema_delete(adb); gt_rdb_delete(rdb); return had_err; } GtTool* gt_mkfeatureindex(void) { return gt_tool_new(gt_mkfeatureindex_arguments_new, gt_mkfeatureindex_arguments_delete, gt_mkfeatureindex_option_parser_new, gt_mkfeatureindex_arguments_check, gt_mkfeatureindex_runner); } genometools-1.5.1/src/tools/gt_mkfeatureindex.h000066400000000000000000000017711211610345200216570ustar00rootroot00000000000000/* Copyright (c) 2009 Sascha Steinbiss Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MKFEATUREINDEX_H #define GT_MKFEATUREINDEX_H #include "core/tool_api.h" /* the mkfeatureindex tool */ GtTool* gt_mkfeatureindex(void); #endif genometools-1.5.1/src/tools/gt_mkfmindex.c000066400000000000000000000020751211610345200206170ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/error.h" #include "match/fmi-mkindex.pr" #include "tools/gt_mkfmindex.h" int gt_mkfmindex(int argc, const char **argv, GtError *err) { gt_error_check(err); return gt_parseargsandcallmkfmindex(argc, argv, err); } genometools-1.5.1/src/tools/gt_mkfmindex.h000066400000000000000000000017361211610345200206270ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MKFMINDEX_H #define GT_MKFMINDEX_H /* the mkfmindex tool */ int gt_mkfmindex(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_mmapandread.c000066400000000000000000000056561211610345200211160ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/error.h" #include "core/option_api.h" #include "core/progressbar.h" #include "core/versionfunc.h" #include "core/xposix.h" #include "tools/gt_mmapandread.h" static GtOPrval parse_options(int *parsed_args, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOPrval oprval; gt_error_check(err); op = gt_option_parser_new("file [...]", "Map the supplied files into memory and " "read them once."); gt_option_parser_set_min_args(op, 1); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } int gt_mmapandread(int argc, const char **argv, GtError *err) { int i, fd, parsed_args; void *map; struct stat sb; unsigned long long j; unsigned int byte = 0; gt_error_check(err); /* option parsing */ switch (parse_options(&parsed_args, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: return 0; } /* iterate over all files */ for (i = parsed_args; i < argc; i++) { /* open file */ fd = gt_xopen(argv[i], O_RDONLY, 0); /* get file statistics */ gt_xfstat(fd, &sb); if (sb.st_size == 0) printf("file \"%s\" is empty\n", argv[i]); else if (!(sb.st_mode & S_IFREG)) printf("\"%s\" is not a regular file\n", argv[i]); else { /* map file */ map = gt_xmmap(0, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0); /* read file */ printf("reading file \"%s\"\n", argv[i]); j = 0; gt_progressbar_start(&j, (unsigned long long) sb.st_size); for (; j < (unsigned long long) sb.st_size; j++) byte |= (unsigned int) ((char*) map)[j]; gt_progressbar_stop(); /* unmap file */ gt_xmunmap(map, sb.st_size); } /* close file */ gt_xclose(fd); } if (!byte) printf("all read files contained only null characters\n"); return 0; } genometools-1.5.1/src/tools/gt_mmapandread.h000066400000000000000000000017671211610345200211220ustar00rootroot00000000000000/* Copyright (c) 2006-2007 Gordon Gremme Copyright (c) 2006-2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_MMAPANDREAD_H #define GT_MMAPANDREAD_H /* the mmap(2) and read tool */ int gt_mmapandread(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_orffinder.c000066400000000000000000000163501211610345200206140ustar00rootroot00000000000000 /* Copyright (c) 2010 Sascha Kastens Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/codon_iterator_encseq_api.h" #include "core/encseq.h" #include "core/fileutils_api.h" #include "core/hashmap.h" #include "core/log.h" #include "core/logger.h" #include "core/ma.h" #include "core/option_api.h" #include "core/str_array.h" #include "core/output_file_api.h" #include "core/safearith.h" #include "core/str_array.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/orf_finder_stream.h" #include "gt_orffinder.h" typedef struct { GtFile *outfp; unsigned int min, max; GtStrArray *types; GtOutputFileInfo *ofi; bool allorfs, verbose; } GtOrffinderArguments; static void* gt_orffinder_arguments_new(void) { GtOrffinderArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); arguments->types = gt_str_array_new(); return arguments; } static void gt_orffinder_arguments_delete(void *tool_arguments) { GtOrffinderArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_str_array_delete(arguments->types); gt_free(arguments); } static GtOptionParser* gt_orffinder_option_parser_new(void *tool_arguments) { GtOrffinderArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optiontypes; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] indexname [GFF3_file ...]", "Identifies ORFs (open reading frames) in " "sequences."); /* types */ optiontypes = gt_option_new_string_array("types", "Specify regions which should be " "searched for open reading frames,\n" "e.g. 'LTR_retrotransposon'", arguments->types); gt_option_parser_add_option(op, optiontypes); /* -allorfs */ option = gt_option_new_bool("allorfs", "search for all ORFs " "instead of only the longest", &arguments->allorfs, false); gt_option_parser_add_option(op, option); /* -min */ option = gt_option_new_uint_min("min", "minimum length of ORF", &arguments->min, 30, 30); gt_option_parser_add_option(op, option); /* -max */ option = gt_option_new_uint_max("max", "maximum length of ORF", &arguments->max, 10000, 1000000); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_min_args(op, 1U); return op; } static int gt_orffinder_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError *err) { GtOrffinderArguments *arguments = tool_arguments; int had_err = 0; int diff; gt_error_check(err); gt_assert(arguments); diff = (arguments->max - arguments->min); if (diff < 0) { gt_error_set(err, "Value for -min must be larger than -max"); had_err = -1; } return had_err; } static int gt_orffinder_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtOrffinderArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream = NULL, *last_stream = NULL, *orffinder_stream = NULL, *gff3_out_stream = NULL; int had_err = 0, i = 0, arg = parsed_args; const char *indexname = argv[arg]; GtLogger *logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stderr); GtHashmap *types; GtEncseqLoader *el; GtEncseq *encseq; gt_error_check(err); gt_assert(arguments); arg++; types = gt_hashmap_new(GT_HASH_STRING, NULL, NULL); if (gt_str_array_size(arguments->types) == 0) { gt_hashmap_add(types, (void*) "all", (void*) 1); } else { for (i = 0; i < gt_str_array_size(arguments->types); i++) { gt_hashmap_add(types, (void*) gt_str_array_get(arguments->types, i), (void*) 1); gt_hashmap_add(types, (void*) "all", (void*) 0); } } /* Set sequence encoder options. */ el = gt_encseq_loader_new(); gt_encseq_loader_set_logger(el, logger); /* Open sequence file */ encseq = gt_encseq_loader_load(el, indexname, err); if (!encseq) had_err = -1; if (!had_err) { last_stream = gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - arg, argv + arg); last_stream = orffinder_stream = gt_orf_finder_stream_new(last_stream, encseq, types, arguments->min, arguments->max, arguments->allorfs, err); if (!orffinder_stream) had_err = -1; if (!had_err) { last_stream = gff3_out_stream = gt_gff3_out_stream_new(last_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(last_stream, err); } gt_node_stream_delete(orffinder_stream); gt_node_stream_delete(gff3_in_stream); gt_node_stream_delete(gff3_out_stream); } gt_encseq_loader_delete(el); gt_encseq_delete(encseq); encseq = NULL; gt_hashmap_delete(types); types = NULL; gt_logger_delete(logger); return had_err; } GtTool* gt_orffinder(void) { return gt_tool_new(gt_orffinder_arguments_new, gt_orffinder_arguments_delete, gt_orffinder_option_parser_new, gt_orffinder_arguments_check, gt_orffinder_runner); } genometools-1.5.1/src/tools/gt_orffinder.h000066400000000000000000000021011211610345200206060ustar00rootroot00000000000000/* Copyright (c) 2010 Sascha Kastens Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2010-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_ORFFINDER_H #define GT_ORFFINDER_H #include "core/tool_api.h" /* the ORF finder tool */ GtTool* gt_orffinder(void); #endif genometools-1.5.1/src/tools/gt_packedindex.c000066400000000000000000000101541211610345200211110ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/cstr_array.h" #include "core/error.h" #include "core/option_api.h" #include "core/str.h" #include "extended/toolbox.h" #include "core/versionfunc.h" #include "match/sfx-run.h" #include "tools/gt_packedindex.h" #include "tools/gt_packedindex_mkctxmap.h" #include "tools/gt_packedindex_trsuftab.h" #include "tools/gt_packedindex_chk_integrity.h" #include "tools/gt_packedindex_chk_search.h" /* rely on suffixerator for on the fly index construction */ static int gt_packedindex_make(int argc, const char *argv[], GtError *err) { return gt_parseargsandcallsuffixerator(false, argc, argv, err); } static void* gt_packedindex_arguments_new(void) { GtToolbox *packedindex_toolbox = gt_toolbox_new(); gt_toolbox_add(packedindex_toolbox, "mkindex", gt_packedindex_make); gt_toolbox_add(packedindex_toolbox, "mkctxmap", gt_packedindex_mkctxmap); gt_toolbox_add(packedindex_toolbox, "trsuftab", gt_packedindex_trsuftab); gt_toolbox_add(packedindex_toolbox, "chkintegrity", gt_packedindex_chk_integrity ); gt_toolbox_add(packedindex_toolbox, "chksearch", gt_packedindex_chk_search); return packedindex_toolbox; } static void gt_packedindex_arguments_delete(void *tool_arguments) { GtToolbox *index_toolbox = tool_arguments; if (!index_toolbox) return; gt_toolbox_delete(index_toolbox); } static GtOptionParser* gt_packedindex_option_parser_new(void *tool_arguments) { GtToolbox *index_toolbox = tool_arguments; GtOptionParser *op; gt_assert(index_toolbox); op = gt_option_parser_new("[option ...] index_tool [argument ...]", "Call packed index tool with name index_tool and " "pass argument(s) to it."); gt_option_parser_set_comment_func(op, gt_toolbox_show, index_toolbox); gt_option_parser_set_min_args(op, 1); gt_option_parser_refer_to_manual(op); return op; } static int gt_packedindex_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtToolbox *index_toolbox = tool_arguments; GtToolfunc toolfunc; GtTool *tool = NULL; char **nargv = NULL; int had_err = 0; gt_error_check(err); gt_assert(index_toolbox); /* determine tool */ if (!gt_toolbox_has_tool(index_toolbox, argv[parsed_args])) { gt_error_set(err, "packedindex tool '%s' not found; option -help lists " "possible tools", argv[parsed_args]); had_err = -1; } /* call sub-tool */ if (!had_err) { if (!(toolfunc = gt_toolbox_get(index_toolbox, argv[parsed_args]))) { tool = gt_toolbox_get_tool(index_toolbox, argv[parsed_args]); gt_assert(tool); } nargv = gt_cstr_array_prefix_first(argv + parsed_args, gt_error_get_progname(err)); gt_error_set_progname(err, nargv[0]); if (toolfunc) had_err = toolfunc(argc - parsed_args, (const char**) nargv, err); else had_err = gt_tool_run(tool, argc - parsed_args, (const char**) nargv, err); } gt_cstr_array_delete(nargv); return had_err; } GtTool* gt_packedindex(void) { return gt_tool_new(gt_packedindex_arguments_new, gt_packedindex_arguments_delete, gt_packedindex_option_parser_new, NULL, gt_packedindex_runner); } genometools-1.5.1/src/tools/gt_packedindex.h000066400000000000000000000017411211610345200211200ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_PACKEDINDEX_H #define GT_PACKEDINDEX_H #include "core/tool_api.h" /* the packedindex tool */ GtTool* gt_packedindex(void); #endif genometools-1.5.1/src/tools/gt_packedindex_chk_integrity.c000066400000000000000000000112371211610345200240370ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /** * \file gt_packedindex_chk_integrity * calls routines to validate basic index integrity */ #include "gt_packedindex_chk_integrity.h" #include "core/error.h" #include "core/logger.h" #include "core/option_api.h" #include "core/versionfunc.h" #include "match/eis-encidxseq.h" #include "match/eis-encidxseq-param.h" #include "match/eis-encidxseq-construct.h" #include "tools/gt_packedindex_chk_integrity.h" #define DEFAULT_PROGRESS_INTERVAL 100000UL struct chkIndexOptions { unsigned long skipCount; unsigned long progressInterval; int checkFlags; bool verboseOutput; enum seqBaseEncoding encType; int EISFeatureSet; }; static GtOPrval parseChkIndexOptions(int *parsed_args, int argc, const char *argv[], struct chkIndexOptions *param, GtError *err); extern int gt_packedindex_chk_integrity(int argc, const char *argv[], GtError *err) { struct encIdxSeq *seq; struct chkIndexOptions params; const char *inputProject; int parsedArgs; int had_err = 0; GtLogger *logger = NULL; gt_error_check(err); switch (parseChkIndexOptions(&parsedArgs, argc, argv, ¶ms, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: return 0; } inputProject = argv[parsedArgs]; logger = gt_logger_new(params.verboseOutput, GT_LOGGER_DEFLT_PREFIX, stdout); seq = gt_loadEncIdxSeq(inputProject, params.encType, params.EISFeatureSet, logger, err); if ((had_err = seq == NULL)) { gt_error_set(err, "Failed to load index: %s", inputProject); } else { fprintf(stderr, "# Using index over sequence %lu" " symbols long.\n", EISLength(seq)); { int corrupt = gt_EISVerifyIntegrity(seq, inputProject, params.skipCount, params.progressInterval, stderr, params.checkFlags, logger, err); if ((had_err = corrupt != 0)) { fputs(gt_error_get(err), stderr); fputs("\n", stderr); gt_error_set(err, "Integrity check failed for index: %s", EISIntegrityCheckResultStrings[corrupt]); } } } if (seq) gt_deleteEncIdxSeq(seq); if (logger) gt_logger_delete(logger); return had_err?-1:0; } static GtOPrval parseChkIndexOptions(int *parsed_args, int argc, const char *argv[], struct chkIndexOptions *params, GtError *err) { GtOptionParser *op; GtOption *option; GtOPrval oprval; bool extRankCheck; gt_error_check(err); op = gt_option_parser_new("indexname", "Map block composition index" "and bwt and check index integrity."); option = gt_option_new_bool("v", "print verbose progress information", ¶ms->verboseOutput, false); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("skip", "number of symbols to skip", ¶ms->skipCount, 0); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("ticks", "print dot after this many symbols" " tested okay", ¶ms->progressInterval, DEFAULT_PROGRESS_INTERVAL); gt_option_parser_add_option(op, option); option = gt_option_new_bool("ext-rank-check", "do additional checks of rank query results", &extRankCheck, false); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 1, 1); oprval = gt_option_parser_parse(op, parsed_args, argc, (const char**) argv, gt_versionfunc, err); gt_option_parser_delete(op); params->checkFlags = EIS_VERIFY_BASIC | (extRankCheck?EIS_VERIFY_EXT_RANK:0); params->EISFeatureSet = EIS_FEATURE_REGION_SUMS; params->encType = BWT_ON_BLOCK_ENC; return oprval; } genometools-1.5.1/src/tools/gt_packedindex_chk_integrity.h000066400000000000000000000017171211610345200240460ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_PACKEDINDEX_CHK_INTEGRITY_H #define GT_PACKEDINDEX_CHK_INTEGRITY_H #include "core/error.h" extern int gt_packedindex_chk_integrity(int argc, const char *argv[], GtError *err); #endif genometools-1.5.1/src/tools/gt_packedindex_chk_search.c000066400000000000000000000311671211610345200232720ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/error.h" #include "core/logger.h" #include "core/minmax.h" #include "core/option_api.h" #include "core/str.h" #include "core/versionfunc.h" #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-param.h" #include "core/encseq.h" #include "match/enum-patt.h" #include "match/esa-mmsearch.h" #include "match/sarr-def.h" #include "match/esa-map.h" #include "tools/gt_packedindex_chk_search.h" #include "match/sfx-apfxlen.h" #define DEFAULT_PROGRESS_INTERVAL 100000UL struct chkSearchOptions { struct bwtOptions idx; long minPatLen, maxPatLen; unsigned long numOfSamples, progressInterval; int flags; bool verboseOutput; }; static GtOPrval parseChkBWTOptions(int *parsed_args, int argc, const char **argv, struct chkSearchOptions *params, const GtStr *projectName, GtError *err); extern int gt_packedindex_chk_search(int argc, const char *argv[], GtError *err) { struct chkSearchOptions params; Suffixarray suffixarray; Enumpatterniterator *epi = NULL; bool saIsLoaded = false; BWTSeq *bwtSeq = NULL; GtStr *inputProject = NULL; int parsedArgs; bool had_err = false; BWTSeqExactMatchesIterator EMIter; bool EMIterInitialized = false; GtLogger *logger = NULL; inputProject = gt_str_new(); do { gt_error_check(err); { bool exitNow = false; switch (parseChkBWTOptions(&parsedArgs, argc, argv, ¶ms, inputProject, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: had_err = true; exitNow = true; break; case GT_OPTION_PARSER_REQUESTS_EXIT: exitNow = true; break; } if (exitNow) break; } gt_str_set(inputProject, argv[parsedArgs]); logger = gt_logger_new(params.verboseOutput, GT_LOGGER_DEFLT_PREFIX, stdout); bwtSeq = gt_availBWTSeq(¶ms.idx.final, logger, err); if ((had_err = bwtSeq == NULL)) break; { enum verifyBWTSeqErrCode retval = gt_BWTSeqVerifyIntegrity(bwtSeq, gt_str_get(inputProject), params.flags, params.progressInterval, stderr, logger, err); if ((had_err = (retval != VERIFY_BWTSEQ_NO_ERROR))) { fprintf(stderr, "index integrity check failed: %s\n", gt_error_get(err)); gt_error_set(err, "aborted because of index integrity check fail"); break; } } if (BWTSeqHasLocateInformation(bwtSeq)) { if ((had_err = !gt_initEmptyEMIterator(&EMIter, bwtSeq))) { gt_error_set(err, "Cannot create matches iterator for sequence index."); break; } EMIterInitialized = true; } { unsigned long totalLen, dbstart; unsigned long trial, patternLen; if ((had_err = gt_mapsuffixarray(&suffixarray, SARR_SUFTAB | SARR_ESQTAB, gt_str_get(inputProject), NULL, err) != 0)) { gt_error_set(err, "Can't load suffix array project with" " demand for encoded sequence and suffix table files\n"); break; } totalLen = gt_encseq_total_length(suffixarray.encseq); saIsLoaded = true; if ((had_err = (params.minPatLen >= 0L && params.maxPatLen >= 0L && params.minPatLen > params.maxPatLen))) { gt_error_set(err, "Invalid pattern lengths selected: min=%ld, max=%ld;" " min <= max is required.", params.minPatLen, params.maxPatLen); break; } if (params.minPatLen < 0 || params.maxPatLen < 0) { unsigned int numofchars = gt_alphabet_num_of_chars( gt_encseq_alphabet(suffixarray.encseq)); if (params.minPatLen < 0) params.minPatLen = gt_recommendedprefixlength(numofchars, totalLen, GT_RECOMMENDED_MULTIPLIER_DEFAULT, true); if (params.maxPatLen < 0) params.maxPatLen = MAX(params.minPatLen, 125 * gt_recommendedprefixlength(numofchars,totalLen, GT_RECOMMENDED_MULTIPLIER_DEFAULT, true)/100); else params.maxPatLen = MAX(params.maxPatLen, params.minPatLen); } fprintf(stderr, "Using patterns of lengths %lu to %lu\n", params.minPatLen, params.maxPatLen); if ((had_err = totalLen + 1 != BWTSeqLength(bwtSeq))) { gt_error_set(err, "base suffix array and index have diferrent lengths!" "%lu vs. %lu", totalLen + 1, BWTSeqLength(bwtSeq)); break; } if ((had_err = (epi = gt_newenumpatterniterator(params.minPatLen, params.maxPatLen, suffixarray.encseq, err)) == NULL)) { fputs("Creation of pattern iterator failed!\n", stderr); break; } for (trial = 0; !had_err && trial < params.numOfSamples; ++trial) { const GtUchar *pptr = gt_nextEnumpatterniterator(&patternLen, epi); GtMMsearchiterator *mmsi = gt_mmsearchiterator_new_complete_olain(suffixarray.encseq, suffixarray.suftab, 0, /* leftbound */ totalLen, /* rightbound */ 0, /* offset */ suffixarray.readmode, pptr, patternLen); if (BWTSeqHasLocateInformation(bwtSeq)) { if ((had_err = !gt_reinitEMIterator(&EMIter, bwtSeq, pptr, patternLen, false))) { fputs("Internal error: failed to reinitialize pattern match" " iterator", stderr); abort(); } gt_assert(gt_EMINumMatchesTotal(&EMIter) == gt_BWTSeqMatchCount(bwtSeq, pptr, patternLen, false)); gt_assert(gt_EMINumMatchesTotal(&EMIter) == gt_mmsearchiterator_count(mmsi)); while (gt_mmsearchiterator_next(&dbstart,mmsi)) { unsigned long matchPos = 0; bool match = EMIGetNextMatch(&EMIter, &matchPos, bwtSeq); if ((had_err = !match)) { gt_error_set(err, "matches of packedindex expired before mmsearch!"); break; } if ((had_err = matchPos != dbstart)) { gt_error_set(err, "packedindex match doesn't equal mmsearch " "match result!\n%lu vs. %lu\n", matchPos, dbstart); } } if (!had_err) { unsigned long matchPos; bool trailingMatch = EMIGetNextMatch(&EMIter, &matchPos, bwtSeq); if ((had_err = trailingMatch)) { gt_error_set(err, "matches of mmsearch expired before fmindex!"); break; } } } else { unsigned long numFMIMatches = gt_BWTSeqMatchCount(bwtSeq, pptr, patternLen, false), numMMSearchMatches = gt_mmsearchiterator_count(mmsi); if ((had_err = numFMIMatches != numMMSearchMatches)) { gt_error_set(err, "Number of matches not equal for suffix array (" "%lu) and fmindex (%lu).\n", numFMIMatches, numMMSearchMatches); } } gt_mmsearchiterator_delete(mmsi); mmsi = NULL; if (params.progressInterval && !((trial + 1) % params.progressInterval)) putc('.', stderr); } if (params.progressInterval) putc('\n', stderr); fprintf(stderr, "Finished %lu of %lu matchings successfully.\n", trial, params.numOfSamples); } } while (0); if (EMIterInitialized) gt_destructEMIterator(&EMIter); if (saIsLoaded) gt_freesuffixarray(&suffixarray); gt_freeEnumpatterniterator(epi); if (bwtSeq) gt_deleteBWTSeq(bwtSeq); if (logger) gt_logger_delete(logger); if (inputProject) gt_str_delete(inputProject); return had_err?-1:0; } static GtOPrval parseChkBWTOptions(int *parsed_args, int argc, const char **argv, struct chkSearchOptions *params, const GtStr *projectName, GtError *err) { GtOptionParser *op; GtOPrval oprval; GtOption *option, *optionProgress; bool checkSuffixArrayValues, tryContextRetrieve, tryFullRegen; gt_error_check(err); op = gt_option_parser_new("indexname", "Load (or build if necessary) BWT index for project" " and perform verification of search" " results."); gt_registerPackedIndexOptions(op, ¶ms->idx, BWTDEFOPT_MULTI_QUERY, projectName); option = gt_option_new_long("minpatlen", "minimum length of patterns searched for, -1 " "implies automatic choice based on index " "properties", ¶ms->minPatLen, -1); gt_option_parser_add_option(op, option); option = gt_option_new_long("maxpatlen", "maximum length of patterns searched for, -1 " "implies automatic choice based on index " "properties", ¶ms->maxPatLen, -1); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("nsamples", "number of sequences to search for", ¶ms->numOfSamples, 1000); gt_option_parser_add_option(op, option); option = gt_option_new_bool("chksfxarray", "verify integrity of stored suffix array positions", &checkSuffixArrayValues, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("full-lfmap", "verify complete backwards regeneration of " "original sequence", &tryFullRegen, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("chkcontext", "verify integrity of regenerated sequence context", &tryContextRetrieve, false); gt_option_parser_add_option(op, option); optionProgress = gt_option_new_ulong("ticks", "print dot after this many symbols " "tested okay", ¶ms->progressInterval, DEFAULT_PROGRESS_INTERVAL); gt_option_parser_add_option(op, optionProgress); option = gt_option_new_bool("v", "print verbose progress information", ¶ms->verboseOutput, false); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 1, 1); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); /* condense boolean options to flags field */ params->flags = (checkSuffixArrayValues?VERIFY_BWTSEQ_SUFVAL:0) | (tryFullRegen?VERIFY_BWTSEQ_LFMAPWALK:0) | (tryContextRetrieve?VERIFY_BWTSEQ_CONTEXT:0); /* compute parameters currently not set from command-line or * determined indirectly */ gt_computePackedIndexDefaults(¶ms->idx, BWTBaseFeatures); gt_option_parser_delete(op); return oprval; } genometools-1.5.1/src/tools/gt_packedindex_chk_search.h000066400000000000000000000020161211610345200232660ustar00rootroot00000000000000/* Copyright (c) 2007 Thomas Jahns Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_PACKEDINDEX_CHK_SEARCH_H #define GT_PACKEDINDEX_CHK_SEARCH_H #include "core/error.h" extern int gt_packedindex_chk_search(int argc, const char *argv[], GtError *error); #endif genometools-1.5.1/src/tools/gt_packedindex_mkctxmap.c000066400000000000000000000123051211610345200230150ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/error.h" #include "core/logger.h" #include "core/option_api.h" #include "core/str.h" #include "core/versionfunc.h" #include "match/eis-bwtseq.h" #include "match/eis-bwtseq-construct.h" #include "match/eis-bwtseq-context-param.h" #include "match/eis-bwtseq-sass.h" #include "match/sarr-def.h" #include "match/esa-map.h" #include "tools/gt_packedindex_mkctxmap.h" struct mkCtxMapOptions { int mapIntervalLog2; bool verboseOutput; }; static GtOPrval parseMkCtxMapOptions(int *parsed_args, int argc, const char **argv, struct mkCtxMapOptions *params, GtError *err); extern int gt_packedindex_mkctxmap(int argc, const char *argv[], GtError *err) { struct mkCtxMapOptions params; const char *projectName; GtLogger *logger = NULL; BWTSeq *bwtSeq = NULL; SASeqSrc *src; int parsedArgs; bool had_err = false; bool saInitialized = false, saiInitialized = false; Suffixarray sa; SuffixarrayFileInterface sai; do { gt_error_check(err); { bool exitNow = false; switch (parseMkCtxMapOptions(&parsedArgs, argc, argv, ¶ms, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: had_err = true; exitNow = true; break; case GT_OPTION_PARSER_REQUESTS_EXIT: exitNow = true; break; } if (exitNow) break; } projectName = argv[parsedArgs]; logger = gt_logger_new(params.verboseOutput, GT_LOGGER_DEFLT_PREFIX, stdout); /* try to find appropriate suffix source */ { unsigned long len; if (streamsuffixarray(&sa, SARR_SUFTAB, projectName, logger, err)) { gt_error_unset(err); if (streamsuffixarray(&sa, 0, projectName, logger, err)) { had_err = true; break; } len = gt_encseq_total_length(sa.encseq) + 1; saInitialized = true; bwtSeq = gt_loadBWTSeqForSA(projectName, BWT_ON_BLOCK_ENC, BWTDEFOPT_MULTI_QUERY, gt_encseq_alphabet(sa.encseq), err); if (!(src = gt_BWTSeqNewSASeqSrc(bwtSeq, NULL))) { gt_error_set(err, "The project %s does not contain sufficient" " information to regenerate the suffix array.", projectName); had_err = true; break; } } else { len = gt_encseq_total_length(sa.encseq) + 1; saInitialized = true; gt_initSuffixarrayFileInterface(&sai, len, &sa); src = SAI2SASS(&sai); saiInitialized = true; } { SeqDataReader readSfxIdx = SASSCreateReader(src, SFX_REQUEST_SUFTAB); BWTSeqContextRetriever *bwtSeqCR; BWTSeqContextRetrieverFactory *bwtSeqCRF = gt_newBWTSeqContextRetrieverFactory(len, params.mapIntervalLog2); if (gt_BWTSCRFReadAdvance(bwtSeqCRF, len, readSfxIdx) != len) { gt_error_set(err, "Creation of context map unsuccessful: %s", gt_error_get(err)); had_err = true; gt_deleteBWTSeqContextRetrieverFactory(bwtSeqCRF); break; } bwtSeqCR = gt_BWTSCRFGet(bwtSeqCRF, bwtSeq, projectName); gt_deleteBWTSeqCR(bwtSeqCR); gt_deleteBWTSeqContextRetrieverFactory(bwtSeqCRF); } } } while (0); if (bwtSeq) { SASSDelete(src); gt_deleteBWTSeq(bwtSeq); } if (saiInitialized) gt_destructSuffixarrayFileInterface(&sai);; if (saInitialized) gt_freesuffixarray(&sa); if (logger) gt_logger_delete(logger); return had_err?-1:0; } static GtOPrval parseMkCtxMapOptions(int *parsed_args, int argc, const char **argv, struct mkCtxMapOptions *params, GtError *err) { GtOptionParser *op; GtOPrval oprval; GtOption *option; gt_error_check(err); op = gt_option_parser_new("indexname", "Build BWT packedindex for project ."); gt_registerCtxMapOptions(op, ¶ms->mapIntervalLog2); option = gt_option_new_bool("v", "print verbose progress information", ¶ms->verboseOutput, false); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 1, 1); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } genometools-1.5.1/src/tools/gt_packedindex_mkctxmap.h000066400000000000000000000020111211610345200230130ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_PACKEDINDEX_MKCTXMAP_H #define GT_PACKEDINDEX_MKCTXMAP_H #include "core/error.h" extern int gt_packedindex_mkctxmap(int argc, const char *argv[], GtError *error); #endif genometools-1.5.1/src/tools/gt_packedindex_trsuftab.c000066400000000000000000000072471211610345200230340ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/error.h" #include "core/logger.h" #include "core/option_api.h" #include "core/str.h" #include "core/versionfunc.h" #include "match/eis-bwtseq.h" #include "core/encseq.h" #include "match/sarr-def.h" #include "match/eis-bwtseq-param.h" #include "tools/gt_packedindex_trsuftab.h" #define DEFAULT_PROGRESS_INTERVAL 100000UL struct trSufTabOptions { struct bwtOptions idx; bool verboseOutput; }; static GtOPrval parseTrSufTabOptions(int *parsed_args, int argc, const char **argv, struct trSufTabOptions *params, const GtStr *projectName, GtError *err); extern int gt_packedindex_trsuftab(int argc, const char *argv[], GtError *err) { struct trSufTabOptions params; BWTSeq *bwtSeq = NULL; GtStr *inputProject = NULL; int parsedArgs; bool had_err = false; GtLogger *logger = NULL; inputProject = gt_str_new(); do { gt_error_check(err); { bool exitNow = false; switch (parseTrSufTabOptions(&parsedArgs, argc, argv, ¶ms, inputProject, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: had_err = true; exitNow = true; break; case GT_OPTION_PARSER_REQUESTS_EXIT: exitNow = true; break; } if (exitNow) break; } gt_str_set(inputProject, argv[parsedArgs]); logger = gt_logger_new(params.verboseOutput, GT_LOGGER_DEFLT_PREFIX, stdout); bwtSeq = gt_trSuftab2BWTSeq(¶ms.idx.final, logger, err); had_err = bwtSeq == NULL; if (had_err) break; } while (0); if (bwtSeq) gt_deleteBWTSeq(bwtSeq); if (logger) gt_logger_delete(logger); if (inputProject) gt_str_delete(inputProject); return had_err?-1:0; } static GtOPrval parseTrSufTabOptions(int *parsed_args, int argc, const char **argv, struct trSufTabOptions *params, const GtStr *projectName, GtError *err) { GtOptionParser *op; GtOPrval oprval; GtOption *option; gt_error_check(err); op = gt_option_parser_new("indexname", "Build BWT packedindex for project ."); gt_registerPackedIndexOptions(op, ¶ms->idx, BWTDEFOPT_MULTI_QUERY, projectName); option = gt_option_new_bool("v", "print verbose progress information", ¶ms->verboseOutput, false); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 1, 1); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); /* compute parameters currently not set from command-line or * determined indirectly */ gt_computePackedIndexDefaults(¶ms->idx, BWTBaseFeatures); gt_option_parser_delete(op); return oprval; } genometools-1.5.1/src/tools/gt_packedindex_trsuftab.h000066400000000000000000000020101211610345200230200ustar00rootroot00000000000000/* Copyright (c) 2008 Thomas Jahns Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_PACKEDINDEX_TRSUFTAB_H #define GT_PACKEDINDEX_TRSUFTAB_H #include "core/error.h" extern int gt_packedindex_trsuftab(int argc, const char *argv[], GtError *error); #endif genometools-1.5.1/src/tools/gt_paircmp.c000066400000000000000000000202101211610345200202570ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include "core/error.h" #include "core/ma_api.h" #include "core/versionfunc.h" #include "core/option_api.h" #include "core/str.h" #include "core/str_array.h" #include "core/types_api.h" #include "match/test-pairwise.h" #include "tools/gt_paircmp.h" typedef struct { GtStr *charlist; unsigned long len; } Charlistlen; typedef struct { GtStrArray *strings, *files; Charlistlen *charlistlen; GtStr *text; } Cmppairwiseopt; static void showsimpleoptions(const Cmppairwiseopt *opt) { if (gt_str_array_size(opt->strings) > 0) { printf("# two strings \"%s\" \"%s\"\n",gt_str_array_get(opt->strings,0), gt_str_array_get(opt->strings,1UL)); return; } if (gt_str_array_size(opt->files) > 0) { printf("# two files \"%s\" \"%s\"\n",gt_str_array_get(opt->files,0), gt_str_array_get(opt->files,1UL)); return; } if (opt->charlistlen != NULL) { printf("# alphalen \"%s\" %lu\n", gt_str_get(opt->charlistlen->charlist), opt->charlistlen->len); return; } if (gt_str_length(opt->text) > 0) { printf("# text \"%s\"\n",gt_str_get(opt->text)); return; } } static GtOPrval parse_options(int *parsed_args, Cmppairwiseopt *pw, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOption *optionstrings, *optionfiles, *optioncharlistlen, *optiontext; GtStrArray *charlistlen; GtOPrval oprval; gt_error_check(err); charlistlen = gt_str_array_new(); pw->strings = gt_str_array_new(); pw->files = gt_str_array_new(); pw->text = gt_str_new(); pw->charlistlen = NULL; op = gt_option_parser_new("options","Apply function to pairs of strings."); gt_option_parser_set_mail_address(op,""); optionstrings = gt_option_new_string_array("ss","use two strings", pw->strings); gt_option_parser_add_option(op, optionstrings); optionfiles = gt_option_new_filename_array("ff","use two files", pw->files); gt_option_parser_add_option(op, optionfiles); optioncharlistlen = gt_option_new_string_array("a", "use character list and length", charlistlen); gt_option_parser_add_option(op, optioncharlistlen); optiontext = gt_option_new_string("t","use text",pw->text, NULL); gt_option_parser_add_option(op, optiontext); gt_option_exclude(optionstrings, optionfiles); gt_option_exclude(optionstrings, optioncharlistlen); gt_option_exclude(optionstrings, optiontext); gt_option_exclude(optionfiles, optioncharlistlen); gt_option_exclude(optionfiles, optiontext); gt_option_exclude(optioncharlistlen, optiontext); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); if (oprval == GT_OPTION_PARSER_OK) { if (gt_option_is_set(optionstrings)) { if (gt_str_array_size(pw->strings) != 2UL) { gt_error_set(err, "option -ss requires two string arguments"); oprval = GT_OPTION_PARSER_ERROR; } } else { if (gt_option_is_set(optionfiles)) { if (gt_str_array_size(pw->files) != 2UL) { gt_error_set(err, "option -ff requires two filename arguments"); oprval = GT_OPTION_PARSER_ERROR; } } else { if (gt_option_is_set(optioncharlistlen)) { long readint; if (gt_str_array_size(charlistlen) != 2UL) { gt_error_set(err, "option -a requires charlist and length argument"); oprval = GT_OPTION_PARSER_ERROR; } pw->charlistlen = gt_malloc(sizeof *pw->charlistlen); pw->charlistlen->charlist = gt_str_ref(gt_str_array_get_str(charlistlen, 0)); if (sscanf(gt_str_array_get(charlistlen,1UL),"%ld",&readint) != 1 || readint < 1L) { gt_error_set(err, "option -a requires charlist and length argument"); oprval = GT_OPTION_PARSER_ERROR; } pw->charlistlen->len = (unsigned long) readint; } else { if (!gt_option_is_set(optiontext)) { gt_error_set(err, "use exactly one of the options -ss, -ff, -a, -t"); oprval = GT_OPTION_PARSER_ERROR; } } } } } gt_option_parser_delete(op); if (oprval == GT_OPTION_PARSER_OK && *parsed_args != argc) { gt_error_set(err, "superfluous program parameters"); oprval = GT_OPTION_PARSER_ERROR; } gt_str_array_delete(charlistlen); return oprval; } static void freesimpleoption(Cmppairwiseopt *cmppairwise) { gt_str_array_delete(cmppairwise->strings); gt_str_array_delete(cmppairwise->files); gt_str_delete(cmppairwise->text); if (cmppairwise->charlistlen != NULL) { gt_str_delete(cmppairwise->charlistlen->charlist); gt_free(cmppairwise->charlistlen); } } static unsigned long applycheckfunctiontosimpleoptions( Checkcmppairfuntype checkfunction, const Cmppairwiseopt *opt) { if (gt_str_array_size(opt->strings) > 0) { bool forward = true; while (true) { checkfunction(forward, (const GtUchar *) gt_str_array_get(opt->strings,0), (unsigned long) strlen(gt_str_array_get(opt->strings,0)), (const GtUchar *) gt_str_array_get(opt->strings,1UL), (unsigned long) strlen(gt_str_array_get(opt->strings,1UL))); if (!forward) { break; } forward = false; } return 2UL; /* number of testcases */ } if (gt_str_array_size(opt->files) > 0) { gt_runcheckfunctionontwofiles(checkfunction, gt_str_array_get(opt->files,0), gt_str_array_get(opt->files,1UL)); return 2UL; } if (opt->charlistlen != NULL) { return gt_runcheckfunctiononalphalen(checkfunction, gt_str_get(opt->charlistlen->charlist), opt->charlistlen->len); } if (gt_str_length(opt->text) > 0) { return gt_runcheckfunctionontext(checkfunction,gt_str_get(opt->text)); } gt_assert(false); return 0; } int gt_paircmp(int argc, const char **argv, GtError *err) { int parsed_args; Cmppairwiseopt cmppairwise; GtOPrval oprval; gt_error_check(err); oprval = parse_options(&parsed_args,&cmppairwise,argc, argv, err); if (oprval == GT_OPTION_PARSER_OK) { unsigned long testcases; gt_assert(parsed_args == argc); showsimpleoptions(&cmppairwise); testcases = applycheckfunctiontosimpleoptions(gt_checkgreedyunitedist, &cmppairwise); printf("# number of testcases: %lu\n",testcases); } freesimpleoption(&cmppairwise); if (oprval == GT_OPTION_PARSER_REQUESTS_EXIT) { return 0; } if (oprval == GT_OPTION_PARSER_ERROR) { return -1; } return 0; } genometools-1.5.1/src/tools/gt_paircmp.h000066400000000000000000000017321211610345200202740ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_PAIRCMP_H #define GT_PAIRCMP_H /* the paircmp tool */ int gt_paircmp(int argc, const char **argv, GtError *err); #endif genometools-1.5.1/src/tools/gt_patternmatch.c000066400000000000000000000253401211610345200213270ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/encseq.h" #include "core/error.h" #include "core/option_api.h" #include "core/str.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "match/cutendpfx.h" #include "match/enum-patt.h" #include "match/esa-map.h" #include "match/esa-mmsearch.h" #include "match/qgram2code.h" #include "match/sarr-def.h" #include "tools/gt_patternmatch.h" typedef struct { unsigned long minpatternlen, maxpatternlen, numofsamples; bool showpatt, usebcktab, immediate; GtStr *indexname; } Pmatchoptions; static void comparemmsis(const GtMMsearchiterator *mmsi1, const GtMMsearchiterator *mmsi2) { if (gt_mmsearchiterator_isempty(mmsi1)) { if (!gt_mmsearchiterator_isempty(mmsi2)) { fprintf(stderr,"mmsi1 is empty but mmsi2 not\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } } else { if (gt_mmsearchiterator_isempty(mmsi2)) { fprintf(stderr,"mmsi2 is empty but mmsi1 not\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } if (!gt_mmsearchiterator_identical(mmsi1,mmsi2)) { fprintf(stderr,"mmsi1 and mmsi2 are different\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } } } #define UNDEFREFSTART totallength static int callpatternmatcher(const Pmatchoptions *pmopt, GtError *err) { Suffixarray suffixarray; unsigned long totallength = 0; bool haserr = false; const GtUchar *pptr; unsigned long patternlen; unsigned int demand = SARR_SUFTAB | SARR_ESQTAB; if (pmopt->usebcktab) { demand |= SARR_BCKTAB; } if (gt_mapsuffixarray(&suffixarray, demand, gt_str_get(pmopt->indexname), NULL, err) != 0) { haserr = true; } else { totallength = gt_encseq_total_length(suffixarray.encseq); } if (!haserr) { unsigned long trial; unsigned long dbstart; Enumpatterniterator *epi; GT_UNUSED unsigned int firstspecial; GtMMsearchiterator *mmsibck = NULL, *mmsiimm = NULL; GtBucketspecification bucketspec; Bucketenumerator *bucketenumerator; Lcpinterval itv; unsigned long refstart; GtEncseqReader *esr1, *esr2; GT_UNUSED int retval; unsigned long idx, maxlcp; GtCodetype code = 0; const GtCodetype **multimappower; const GtAlphabet *alpha; if (pmopt->usebcktab) { multimappower = gt_bcktab_multimappower(suffixarray.bcktab); } else { multimappower = NULL; } epi = gt_newenumpatterniterator(pmopt->minpatternlen, pmopt->maxpatternlen, suffixarray.encseq, err); esr1 = gt_encseq_create_reader_with_readmode(suffixarray.encseq, suffixarray.readmode, 0); esr2 = gt_encseq_create_reader_with_readmode(suffixarray.encseq, suffixarray.readmode, 0); alpha = gt_encseq_alphabet(suffixarray.encseq); for (trial = 0; trial < pmopt->numofsamples; trial++) { pptr = gt_nextEnumpatterniterator(&patternlen,epi); if (pmopt->showpatt) { gt_alphabet_decode_seq_to_fp(alpha,stdout,pptr,patternlen); printf("\n"); } if (pmopt->usebcktab) { if (patternlen < (unsigned long) suffixarray.prefixlength) { mmsibck = NULL; bucketenumerator = gt_newbucketenumerator(suffixarray.bcktab, suffixarray.prefixlength, pptr, (unsigned int) patternlen); refstart = UNDEFREFSTART; while (gt_nextbucketenumerator(&itv,bucketenumerator)) { if (refstart == UNDEFREFSTART) { refstart = ESASUFFIXPTRGET(suffixarray.suftab,itv.left); } else { for (idx=itv.left; idx<=itv.right; idx++) { retval = gt_encseq_check_comparetwosuffixes( suffixarray.encseq, suffixarray.readmode, &maxlcp, false, false, patternlen, refstart, ESASUFFIXPTRGET(suffixarray.suftab,idx), esr1, esr2); gt_assert(retval == 0 && maxlcp == patternlen); } } } gt_freebucketenumerator(bucketenumerator); } else { firstspecial = qgram2code(&code, multimappower, suffixarray.prefixlength, pptr); gt_assert(firstspecial == suffixarray.prefixlength); gt_bcktab_calcboundaries(&bucketspec, suffixarray.bcktab, code); if (bucketspec.nonspecialsinbucket == 0) { mmsibck = NULL; } else { mmsibck = gt_mmsearchiterator_new_complete_olain( suffixarray.encseq, suffixarray.suftab, bucketspec.left, bucketspec.left + bucketspec.nonspecialsinbucket-1, (unsigned long) suffixarray.prefixlength, suffixarray.readmode, pptr, patternlen); } } } if (pmopt->immediate) { mmsiimm = gt_mmsearchiterator_new_complete_olain( suffixarray.encseq, suffixarray.suftab, 0, /* leftbound */ totallength, /* rightbound */ 0, /* offset */ suffixarray.readmode, pptr, patternlen); } if (pmopt->immediate && pmopt->usebcktab) { comparemmsis(mmsibck,mmsiimm); } if (pmopt->usebcktab && mmsibck != NULL) { while (gt_mmsearchiterator_next(&dbstart,mmsibck)) { /* Nothing */; } gt_mmsearchiterator_delete(mmsibck); mmsibck = NULL; } if (pmopt->immediate) { while (gt_mmsearchiterator_next(&dbstart,mmsiimm)) { /* Nothing */; } gt_mmsearchiterator_delete(mmsiimm); mmsiimm = NULL; } } gt_encseq_reader_delete(esr1); gt_encseq_reader_delete(esr2); if (pmopt->showpatt) { gt_showPatterndistribution(epi); } gt_freeEnumpatterniterator(epi); } gt_freesuffixarray(&suffixarray); return haserr ? -1 : 0; } static GtOPrval parse_options(Pmatchoptions *pmopt, int *parsed_args, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOption *option, *optionimm, *optionbck; GtOPrval oprval; gt_error_check(err); op = gt_option_parser_new("[options] -ii indexname", "Perform pattern matches."); gt_option_parser_set_mail_address(op, ""); option = gt_option_new_ulong("minpl","Specify minimum length of pattern", &pmopt->minpatternlen, (unsigned long) 20); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("maxpl","Specify maximum length of pattern", &pmopt->maxpatternlen, (unsigned long) 30); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("samples","Specify number of samples", &pmopt->numofsamples, (unsigned long) 100000); gt_option_parser_add_option(op, option); option = gt_option_new_bool("s","Show generated pattern", &pmopt->showpatt, false); gt_option_parser_add_option(op, option); optionbck = gt_option_new_bool("bck","Use the bucket boundaries", &pmopt->usebcktab, false); gt_option_parser_add_option(op, optionbck); optionimm = gt_option_new_bool("imm","Start with offset 0", &pmopt->immediate, false); gt_option_parser_add_option(op, optionimm); option = gt_option_new_string("ii", "Specify input index", pmopt->indexname, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } int gt_patternmatch(int argc, const char **argv, GtError *err) { bool haserr = false; int parsed_args; Pmatchoptions pmopt; GtOPrval oprval; gt_error_check(err); pmopt.indexname = gt_str_new(); oprval = parse_options(&pmopt,&parsed_args, argc, argv, err); if (oprval == GT_OPTION_PARSER_OK) { gt_assert(parsed_args == argc); if (callpatternmatcher(&pmopt,err) != 0) { haserr = true; } } gt_str_delete(pmopt.indexname); if (oprval == GT_OPTION_PARSER_REQUESTS_EXIT) { return 0; } if (oprval == GT_OPTION_PARSER_ERROR) { return -1; } return haserr ? -1 : 0; } genometools-1.5.1/src/tools/gt_patternmatch.h000066400000000000000000000017561211610345200213410ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_PATTERNMATCH_H #define GT_PATTERNMATCH_H /* the patternmatch tool */ int gt_patternmatch(int argc, const char **argv, GtError *err); #endif genometools-1.5.1/src/tools/gt_prebwt.c000066400000000000000000000077721211610345200201510ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/alphabet_api.h" #include "core/encseq_metadata.h" #include "core/ma.h" #include "core/str.h" #include "core/tool_api.h" #include "match/pckbucket.h" #include "match/eis-voiditf.h" typedef struct { GtStr *indexname; unsigned int maxdepth; } Prebwtoptions; static void *gt_prebwt_arguments_new(void) { return gt_malloc(sizeof (Prebwtoptions)); } static void gt_prebwt_arguments_delete(void *tool_arguments) { Prebwtoptions *arguments = tool_arguments; if (!arguments) { return; } gt_str_delete(arguments->indexname); gt_free(arguments); } static GtOptionParser* gt_prebwt_option_parser_new(void *tool_arguments) { Prebwtoptions *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optionpck; gt_assert(arguments != NULL); arguments->indexname = gt_str_new(); op = gt_option_parser_new("[options] -pck indexname", "Precompute bwt-bounds for some prefix length."); gt_option_parser_set_mail_address(op, ""); optionpck = gt_option_new_string("pck","Specify index (packed index)", arguments->indexname, NULL); gt_option_parser_add_option(op, optionpck); gt_option_is_mandatory(optionpck); option = gt_option_new_uint_min("maxdepth", "specify maximum depth (value > 0)", &arguments->maxdepth,0,1U); gt_option_parser_add_option(op, option); return op; } static int gt_prebwt_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { unsigned long totallength = 0; FMindex *fmindex = NULL; bool haserr = false; GtEncseqMetadata *emd = NULL; Prebwtoptions *prebwtoptions = (Prebwtoptions *) tool_arguments; GtAlphabet *alphabet; const char *indexname = gt_str_get(prebwtoptions->indexname); emd = gt_encseq_metadata_new(indexname, err); if (emd == NULL) { haserr = true; } if (!haserr) { alphabet = gt_encseq_metadata_alphabet(emd); if (alphabet == NULL) { haserr = true; } } if (!haserr) { fmindex = gt_loadvoidBWTSeqForSA(indexname,false, err); if (fmindex == NULL) { haserr = true; } } if (!haserr) { unsigned int numofchars = gt_alphabet_num_of_chars(alphabet); Pckbuckettable *pckbt; totallength = gt_voidpackedindex_totallength_get(fmindex); pckbt = gt_pckbuckettable_new((const void *) fmindex, numofchars, totallength, prebwtoptions->maxdepth); if (gt_pckbuckettable_2file(indexname,pckbt,err) != 0) { haserr = true; } gt_pckbuckettable_delete(pckbt); } gt_encseq_metadata_delete(emd); if (fmindex != NULL) { gt_deletevoidBWTSeq(fmindex); } return haserr ? -1 : 0; } GtTool* gt_prebwt(void) { return gt_tool_new(gt_prebwt_arguments_new, gt_prebwt_arguments_delete, gt_prebwt_option_parser_new, NULL, gt_prebwt_runner); } genometools-1.5.1/src/tools/gt_prebwt.h000066400000000000000000000017241211610345200201450ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_PREBWT_H #define GT_PREBWT_H #include "core/tool_api.h" /* the tagerator tool */ GtTool* gt_prebwt(void); #endif genometools-1.5.1/src/tools/gt_readjoiner.c000066400000000000000000000102221211610345200207500ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/cstr_array.h" #include "core/option_api.h" #include "core/unused_api.h" #include "extended/toolbox.h" #include "extended/gtdatahelp.h" #include "match/rdj-version.h" #include "tools/gt_readjoiner_prefilter.h" #include "tools/gt_readjoiner_overlap.h" #include "tools/gt_readjoiner_assembly.h" #include "tools/gt_readjoiner_asqg.h" #include "tools/gt_readjoiner_cnttest.h" #include "tools/gt_readjoiner_spmtest.h" #include "tools/gt_readjoiner_correct.h" static void* gt_readjoiner_arguments_new(void) { GtToolbox *readjoiner_toolbox = gt_toolbox_new(); gt_toolbox_add_tool(readjoiner_toolbox, "prefilter", gt_readjoiner_prefilter()); gt_toolbox_add_tool(readjoiner_toolbox, "overlap", gt_readjoiner_overlap()); gt_toolbox_add_tool(readjoiner_toolbox, "assembly", gt_readjoiner_assembly()); gt_toolbox_add_hidden_tool(readjoiner_toolbox, "asqg", gt_readjoiner_asqg()); gt_toolbox_add_hidden_tool(readjoiner_toolbox, "cnttest", gt_readjoiner_cnttest()); gt_toolbox_add_hidden_tool(readjoiner_toolbox, "spmtest", gt_readjoiner_spmtest()); gt_toolbox_add_hidden_tool(readjoiner_toolbox, "correct", gt_readjoiner_correct()); return readjoiner_toolbox; } static void gt_readjoiner_arguments_delete(void *tool_arguments) { GtToolbox *readjoiner_toolbox = tool_arguments; if (!readjoiner_toolbox) return; gt_toolbox_delete(readjoiner_toolbox); } static GtOptionParser* gt_readjoiner_option_parser_new(GT_UNUSED void *tool_arguments) { GtOptionParser *op; op = gt_option_parser_new("[option ...] tool [argument ...]", "Readjoiner: a string graph-based sequence assembler."); gt_option_parser_set_version_func(op, gt_readjoiner_show_version); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); gt_option_parser_set_min_args(op, 1); return op; } static int gt_readjoiner_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtToolbox *readjoiner_toolbox = tool_arguments; GtToolfunc toolfunc; GtTool *tool = NULL; int had_err = 0; char **nargv = NULL; gt_error_check(err); gt_assert(readjoiner_toolbox); /* get readjoiner tools */ if (!gt_toolbox_has_tool(readjoiner_toolbox, argv[parsed_args])) { gt_error_set(err, "readjoiner tool '%s' not found; option -help lists " "possible tools", argv[parsed_args]); had_err = -1; } /* call readjoiner tool */ if (!had_err) { if (!(toolfunc = gt_toolbox_get(readjoiner_toolbox, argv[parsed_args]))) { tool = gt_toolbox_get_tool(readjoiner_toolbox, argv[parsed_args]); gt_assert(tool); } nargv = gt_cstr_array_prefix_first(argv + parsed_args, gt_error_get_progname(err)); gt_error_set_progname(err, nargv[0]); if (toolfunc) had_err = toolfunc(argc - parsed_args, (const char**) nargv, err); else had_err = gt_tool_run(tool, argc - parsed_args, (const char**) nargv, err); } /* free */ gt_cstr_array_delete(nargv); return had_err; } GtTool* gt_readjoiner(void) { return gt_tool_new(gt_readjoiner_arguments_new, gt_readjoiner_arguments_delete, gt_readjoiner_option_parser_new, NULL, gt_readjoiner_runner); } genometools-1.5.1/src/tools/gt_readjoiner.h000066400000000000000000000017541211610345200207670ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_READJOINER_H #define GT_READJOINER_H #include "core/tool_api.h" /* the readjoiner toolbox */ GtTool* gt_readjoiner(void); #endif genometools-1.5.1/src/tools/gt_readjoiner_asqg.c000066400000000000000000000277031211610345200217770ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/log_api.h" #include "core/logger.h" #include "core/fa.h" #include "core/ma.h" #include "core/unused_api.h" #include "core/showtime.h" #include "core/spacecalc.h" #include "match/asqg_writer.h" #include "match/rdj-contigpaths.h" #include "match/rdj-cntlist.h" #include "match/rdj-spmlist.h" #include "match/rdj-strgraph.h" #include "match/rdj-filesuf-def.h" #include "match/rdj-version.h" #include "tools/gt_readjoiner_asqg.h" typedef struct { bool verbose, quiet; unsigned int minmatchlength; GtStr *readset; bool gz, sg; unsigned int nspmfiles; } GtReadjoinerAsqgArguments; static void* gt_readjoiner_asqg_arguments_new(void) { GtReadjoinerAsqgArguments *arguments = gt_calloc((size_t)1, sizeof *arguments); arguments->readset = gt_str_new(); return arguments; } static void gt_readjoiner_asqg_arguments_delete(void *tool_arguments) { GtReadjoinerAsqgArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->readset); gt_free(arguments); } static GtOptionParser* gt_readjoiner_asqg_option_parser_new( void *tool_arguments) { GtReadjoinerAsqgArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *v_option; gt_assert(arguments != NULL); /* init */ op = gt_option_parser_new("[option ...]", "Output string graph in SGA asqg format."); /* -readset */ option = gt_option_new_string("readset", "specify the readset name", arguments->readset, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -spmfiles */ option = gt_option_new_uint_min("spmfiles", "number of SPM files to read\n" "this must be equal to the value of -j for the overlap phase", &arguments->nspmfiles, 1U, 1U); gt_option_is_extended_option(option); gt_option_parser_add_option(op, option); /* -l */ option = gt_option_new_uint_min("l", "specify the minimum SPM length", &arguments->minmatchlength, 0, 2U); gt_option_is_extended_option(option); gt_option_parser_add_option(op, option); /* -gz */ option = gt_option_new_bool("gz", "output gzipped file", &arguments->gz, false); gt_option_parser_add_option(op, option); /* -sg */ option = gt_option_new_bool("sg", "first construct a Readjoiner string " "graph, then convert it into SGA format", &arguments->sg, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -v */ v_option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, v_option); /* -q */ option = gt_option_new_bool("q", "suppress standard output messages", &arguments->quiet, false); gt_option_exclude(option, v_option); gt_option_parser_add_option(op, option); gt_option_parser_set_version_func(op, gt_readjoiner_show_version); gt_option_parser_set_max_args(op, 0); return op; } #define GT_READJOINER_ASQG_MSG_INIT \ "initialization" #define GT_READJOINER_ASQG_MSG_CNT \ "parse lists of contained reads" /* encseq + spm -> asqg */ #define GT_READJOINER_ASQG_MSG_VERTICES \ "output vertices in asqg format" #define GT_READJOINER_ASQG_MSG_EDGES \ "output edges in asqg format" /* encseq + sg -> asqg */ #define GT_READJOINER_ASQG_MSG_COUNT \ "build string graph (counting phase)" #define GT_READJOINER_ASQG_MSG_INSERT \ "build string graph (insertion phase)" #define GT_READJOINER_ASQG_MSG_OUTPUT \ "output string graph in asqg format" static int gt_readjoiner_asqg_use_spmfiles(GtSpmproc proc, void *procdata, const char *readset, unsigned int minmatchlength, unsigned int nspmfiles, GtBitsequence *contained, GtError *err) { int had_err = 0; GtSpmprocSkipData skipdata; unsigned int i; GtStr *filename = gt_str_new(); if (contained != NULL) { skipdata.to_skip = contained; skipdata.out.e.proc = proc; skipdata.out.e.data = procdata; } for (i = 0; i < nspmfiles; i++) { gt_str_append_cstr(filename, readset); gt_str_append_char(filename, '.'); gt_str_append_uint(filename, i); gt_str_append_cstr(filename, GT_READJOINER_SUFFIX_SPMLIST); had_err = gt_spmlist_parse(gt_str_get(filename), (unsigned long)minmatchlength, contained == NULL ? proc : gt_spmproc_skip, contained == NULL ? (void*)procdata : (void*)&skipdata, err); gt_str_reset(filename); } gt_str_delete(filename); return had_err; } static inline void gt_readjoiner_asqg_show_current_space(const char *label) { unsigned long m, f; if (gt_ma_bookkeeping_enabled()) { m = gt_ma_get_space_current(); f = gt_fa_get_space_current(); gt_log_log("used space after %s: %.2f MB (ma: %.2f MB; fa: %.2f MB)", label == NULL ? "" : label, GT_MEGABYTES(m + f), GT_MEGABYTES(m), GT_MEGABYTES(f)); } } static int gt_readjoiner_asqg_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtReadjoinerAsqgArguments *arguments = tool_arguments; GtLogger *verbose_logger, *default_logger; GtEncseqLoader *el; GtEncseq *reads; GtTimer *timer = NULL; GtStrgraph *strgraph = NULL; GtBitsequence *contained = NULL; const char *readset = gt_str_get(arguments->readset); bool eqlen; unsigned long nreads; int had_err = 0; if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description( GT_READJOINER_ASQG_MSG_INIT); gt_timer_start(timer); gt_timer_show_cpu_time_by_progress(timer); } gt_assert(arguments); gt_error_check(err); default_logger = gt_logger_new(!arguments->quiet, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(default_logger, "gt readjoiner asqg"); verbose_logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(verbose_logger, "verbose output activated"); gt_logger_log(verbose_logger, "readset name = %s", readset); if (arguments->minmatchlength > 0) gt_logger_log(verbose_logger, "SPM length cutoff = %u", arguments->minmatchlength); el = gt_encseq_loader_new(); gt_encseq_loader_drop_description_support(el); gt_encseq_loader_disable_autosupport(el); reads = gt_encseq_loader_load(el, readset, err); nreads = gt_encseq_num_of_sequences(reads); gt_assert(reads != NULL); eqlen = gt_encseq_accesstype_get(reads) == GT_ACCESS_TYPE_EQUALLENGTH; gt_readjoiner_asqg_show_current_space(GT_READJOINER_ASQG_MSG_INIT); if (!eqlen) { unsigned int i; unsigned long nofreads; GtStr *filename = gt_str_clone(arguments->readset); if (gt_showtime_enabled()) gt_timer_show_progress(timer, GT_READJOINER_ASQG_MSG_CNT, stdout); gt_logger_log(default_logger, GT_READJOINER_ASQG_MSG_CNT); gt_str_append_cstr(filename, ".0" GT_READJOINER_SUFFIX_CNTLIST); had_err = gt_cntlist_parse(gt_str_get(filename), true, &contained, &nofreads, err); for (i = 1U; i < arguments->nspmfiles && had_err == 0; i++) { unsigned long nofreads_i; gt_str_reset(filename); gt_str_append_str(filename, arguments->readset); gt_str_append_char(filename, '.'); gt_str_append_uint(filename, i); gt_str_append_cstr(filename, GT_READJOINER_SUFFIX_CNTLIST); had_err = gt_cntlist_parse(gt_str_get(filename), false, &contained, &nofreads_i, err); gt_assert(nofreads == nofreads_i); } gt_str_delete(filename); gt_readjoiner_asqg_show_current_space(GT_READJOINER_ASQG_MSG_CNT); } if (!arguments->sg) { GtStr *filename = NULL; GtFile *file = NULL; GtAsqgWriter *aw = NULL; if (had_err == 0) { filename = gt_str_clone(arguments->readset); gt_str_append_cstr(filename, arguments->gz ? ".asqg.gz" : ".asqg"); file = gt_file_open(arguments->gz ? GT_FILE_MODE_GZIP : GT_FILE_MODE_UNCOMPRESSED, gt_str_get(filename), "w", err); if (file == NULL) had_err = -1; } if (had_err == 0) { aw = gt_asqg_writer_new(file, reads); if (gt_showtime_enabled()) gt_timer_show_progress(timer, GT_READJOINER_ASQG_MSG_VERTICES, stdout); gt_logger_log(default_logger, GT_READJOINER_ASQG_MSG_VERTICES); had_err = gt_asqg_writer_show_header(aw, 0.0, (unsigned long)arguments->minmatchlength, gt_str_get(arguments->readset), false, false, err); } if (had_err == 0) { had_err = gt_asqg_writer_show_vertices(aw, err); gt_readjoiner_asqg_show_current_space(GT_READJOINER_ASQG_MSG_VERTICES); } if (had_err == 0) { if (gt_showtime_enabled()) gt_timer_show_progress(timer, GT_READJOINER_ASQG_MSG_EDGES, stdout); gt_logger_log(default_logger, GT_READJOINER_ASQG_MSG_EDGES); had_err = gt_readjoiner_asqg_use_spmfiles(gt_spmproc_show_asgq, aw, readset, arguments->minmatchlength, arguments->nspmfiles, contained, err); gt_readjoiner_asqg_show_current_space(GT_READJOINER_ASQG_MSG_EDGES); } gt_str_delete(filename); gt_file_delete(file); gt_asqg_writer_delete(aw); } else { if (had_err == 0) { if (gt_showtime_enabled()) gt_timer_show_progress(timer, GT_READJOINER_ASQG_MSG_COUNT, stdout); gt_logger_log(default_logger, GT_READJOINER_ASQG_MSG_COUNT); strgraph = gt_strgraph_new(nreads); had_err = gt_readjoiner_asqg_use_spmfiles(gt_spmproc_strgraph_count, strgraph, readset, arguments->minmatchlength, arguments->nspmfiles, contained, err); gt_readjoiner_asqg_show_current_space(GT_READJOINER_ASQG_MSG_COUNT); } if (had_err == 0) { if (gt_showtime_enabled()) gt_timer_show_progress(timer, GT_READJOINER_ASQG_MSG_INSERT, stdout); gt_logger_log(default_logger, GT_READJOINER_ASQG_MSG_INSERT); gt_strgraph_allocate_graph(strgraph, eqlen ? gt_encseq_seqlength(reads, 0) : 0, eqlen ? NULL : reads); had_err = gt_strgraph_load_spm_from_file(strgraph, (unsigned long)arguments->minmatchlength, false, contained, readset, arguments->nspmfiles, GT_READJOINER_SUFFIX_SPMLIST, err); gt_readjoiner_asqg_show_current_space(GT_READJOINER_ASQG_MSG_INSERT); } if (had_err == 0) { if (gt_showtime_enabled()) gt_timer_show_progress(timer, GT_READJOINER_ASQG_MSG_OUTPUT, stdout); gt_logger_log(default_logger, GT_READJOINER_ASQG_MSG_OUTPUT); gt_strgraph_set_encseq(strgraph, reads); gt_strgraph_show(strgraph, arguments->gz ? GT_STRGRAPH_ASQG_GZ : GT_STRGRAPH_ASQG, gt_str_get(arguments->readset), arguments->gz ? ".asqg.gz" : ".asqg", false); gt_readjoiner_asqg_show_current_space(GT_READJOINER_ASQG_MSG_OUTPUT); } } if (gt_showtime_enabled()) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } gt_free(contained); gt_strgraph_delete(strgraph); gt_encseq_loader_delete(el); gt_encseq_delete(reads); gt_logger_delete(default_logger); gt_logger_delete(verbose_logger); return had_err; } GtTool* gt_readjoiner_asqg(void) { return gt_tool_new(gt_readjoiner_asqg_arguments_new, gt_readjoiner_asqg_arguments_delete, gt_readjoiner_asqg_option_parser_new, NULL, gt_readjoiner_asqg_runner); } genometools-1.5.1/src/tools/gt_readjoiner_asqg.h000066400000000000000000000017741211610345200220040ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_READJOINER_ASQG_H #define GT_READJOINER_ASQG_H #include "core/tool_api.h" /* the readjoiner_asqg tool */ GtTool* gt_readjoiner_asqg(void); #endif genometools-1.5.1/src/tools/gt_readjoiner_assembly.c000066400000000000000000000462231211610345200226610ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/log_api.h" #include "core/logger.h" #include "core/fa.h" #include "core/ma.h" #include "core/unused_api.h" #include "core/showtime.h" #include "core/spacecalc.h" #include "match/rdj-contigpaths.h" #include "match/rdj-cntlist.h" #include "match/rdj-spmlist.h" #include "match/rdj-strgraph.h" #include "match/rdj-filesuf-def.h" #include "match/rdj-version.h" #include "tools/gt_readjoiner_assembly.h" typedef struct { bool verbose, quiet; unsigned int minmatchlength; unsigned int lengthcutoff, depthcutoff; GtStr *readset, *buffersizearg; bool errors, paths2seq, redtrans, elendistri; unsigned int deadend, bubble, deadend_depth; GtOption *refoptionbuffersize; unsigned long buffersize; unsigned int nspmfiles; } GtReadjoinerAssemblyArguments; static void* gt_readjoiner_assembly_arguments_new(void) { GtReadjoinerAssemblyArguments *arguments = gt_calloc((size_t)1, sizeof *arguments); arguments->readset = gt_str_new(); arguments->buffersizearg = gt_str_new(); arguments->buffersize = 0UL; /* in bytes */ return arguments; } static void gt_readjoiner_assembly_arguments_delete(void *tool_arguments) { GtReadjoinerAssemblyArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->readset); gt_str_delete(arguments->buffersizearg); gt_option_delete(arguments->refoptionbuffersize); gt_free(arguments); } static GtOptionParser* gt_readjoiner_assembly_option_parser_new( void *tool_arguments) { GtReadjoinerAssemblyArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *errors_option, *deadend_option, *v_option, *q_option, *bubble_option, *deadend_depth_option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...]", "Construct string graph and output contigs."); /* -readset */ option = gt_option_new_string("readset", "specify the readset name", arguments->readset, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -spmfiles */ option = gt_option_new_uint_min("spmfiles", "number of SPM files to read\n" "this must be equal to the value of -j for the overlap phase", &arguments->nspmfiles, 1U, 1U); gt_option_is_extended_option(option); gt_option_parser_add_option(op, option); /* -l */ option = gt_option_new_uint_min("l", "specify the minimum SPM length", &arguments->minmatchlength, 0, 2U); gt_option_is_extended_option(option); gt_option_parser_add_option(op, option); /* -depthcutoff */ option = gt_option_new_uint_min("depthcutoff", "specify the minimal " "number of nodes in a contig", &arguments->depthcutoff, 3U, 1U); gt_option_is_extended_option(option); gt_option_parser_add_option(op, option); /* -lengthcutoff */ option = gt_option_new_uint_min("lengthcutoff", "specify the minimal " "length of a contig", &arguments->lengthcutoff, 100U, 1U); gt_option_is_extended_option(option); gt_option_parser_add_option(op, option); /* -redtrans */ option = gt_option_new_bool("redtrans", "reduce transitive edges", &arguments->redtrans, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -errors */ errors_option = gt_option_new_bool("errors", "search graph features which " "may originate from sequencing errors and remove them", &arguments->errors, false); gt_option_is_extended_option(errors_option); gt_option_parser_add_option(op, errors_option); /* -bubble */ bubble_option = gt_option_new_uint("bubble", "number of rounds of p-bubble " "removal to perform", &arguments->bubble, 3U); gt_option_is_extended_option(bubble_option); gt_option_imply(bubble_option, errors_option); gt_option_parser_add_option(op, bubble_option); /* -deadend */ deadend_option = gt_option_new_uint("deadend", "number of rounds of " "dead end removal to perform a dead end", &arguments->deadend, 10U); gt_option_is_extended_option(deadend_option); gt_option_imply(deadend_option, errors_option); gt_option_parser_add_option(op, deadend_option); /* -deadend-depth */ deadend_depth_option = gt_option_new_uint_min("deadend-depth", "specify the " "maximal depth of a path to an end-vertex by which the path shall be " "considered a dead end", &arguments->deadend_depth, 10U, 1U); gt_option_is_extended_option(deadend_depth_option); gt_option_imply(deadend_depth_option, errors_option); gt_option_parser_add_option(op, deadend_depth_option); /* -paths2seq */ option = gt_option_new_bool("paths2seq", "read " GT_READJOINER_SUFFIX_CONTIG_PATHS " and write " "" GT_READJOINER_SUFFIX_CONTIGS, &arguments->paths2seq, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -buffersize */ option = gt_option_new_string("buffersize", "specify size for read buffer" " of paths2seq phase (in bytes, the keywords 'MB' and 'GB' are allowed)", arguments->buffersizearg, NULL); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); arguments->refoptionbuffersize = gt_option_ref(option); /* -v */ v_option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, v_option); /* -q */ q_option = gt_option_new_bool("q", "suppress standard output messages", &arguments->quiet, false); gt_option_parser_add_option(op, q_option); gt_option_exclude(q_option, v_option); /* -elendistri */ option = gt_option_new_bool("elendistri", "output edges lenght" "distribution to " GT_READJOINER_SUFFIX_ELEN_DISTRI, &arguments->elendistri, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); gt_option_parser_set_version_func(op, gt_readjoiner_show_version); gt_option_parser_set_max_args(op, 0); return op; } static int gt_readjoiner_assembly_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError *err) { GtReadjoinerAssemblyArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); if (had_err == 0 && gt_option_is_set(arguments->refoptionbuffersize)) if (gt_option_parse_spacespec(&arguments->buffersize, "buffersize", arguments->buffersizearg, err) != 0) had_err = -1; return had_err; } #define GT_READJOINER_MSG_COUNTSPM \ "calculate edges space for each vertex" #define GT_READJOINER_MSG_BUILDSG \ "build string graph" #define GT_READJOINER_MSG_REDTRANS \ "reduce transitive edges" #define GT_READJOINER_MSG_CLEANSG \ "correct sequencing errors" #define GT_READJOINER_MSG_TRAVERSESG \ "save contig paths" #define GT_READJOINER_MSG_PUMPENCSEQ \ "pump encseq through cache" #define GT_READJOINER_MSG_OUTPUTCONTIGS \ "save contig sequences" static int gt_readjoiner_assembly_count_spm(const char *readset, bool eqlen, unsigned int minmatchlength, unsigned int nspmfiles, GtStrgraph *strgraph, GtBitsequence *contained, GtLogger *default_logger, GtError *err) { GtSpmprocSkipData skipdata; int had_err = 0; unsigned int i; GtStr *filename = gt_str_new(); gt_logger_log(default_logger, GT_READJOINER_MSG_COUNTSPM); if (!eqlen) { skipdata.out.e.proc = gt_spmproc_strgraph_count; skipdata.to_skip = contained; skipdata.out.e.data = strgraph; } for (i = 0; i < nspmfiles; i++) { gt_str_append_cstr(filename, readset); gt_str_append_char(filename, '.'); gt_str_append_uint(filename, i); gt_str_append_cstr(filename, GT_READJOINER_SUFFIX_SPMLIST); had_err = gt_spmlist_parse(gt_str_get(filename), (unsigned long)minmatchlength, eqlen ? gt_spmproc_strgraph_count : gt_spmproc_skip, eqlen ? (void*)strgraph : (void*)&skipdata, err); gt_str_reset(filename); } gt_str_delete(filename); return had_err; } static int gt_readjoiner_assembly_error_correction(GtStrgraph *strgraph, unsigned int bubble, unsigned int deadend, unsigned int deadend_depth, GtLogger *verbose_logger) { unsigned int i; unsigned long retval, retval_sum; gt_logger_log(verbose_logger, "remove p-bubbles"); retval_sum = 0; retval = 1UL; for (i = 0; i < bubble && retval > 0; i++) { retval = gt_strgraph_redpbubbles(strgraph, 0, 1UL, false); retval_sum += retval; gt_logger_log(verbose_logger, "removed p-bubble edges [round %u] = %lu", i + 1, retval); } gt_logger_log(verbose_logger, "removed p-bubble edges [%u rounds] = %lu", i, retval_sum); gt_logger_log(verbose_logger, "remove dead-end paths"); retval_sum = 0; retval = 1UL; for (i = 0; i < deadend && retval > 0; i++) { retval = gt_strgraph_reddepaths(strgraph, (unsigned long)deadend_depth, false); retval_sum += retval; gt_logger_log(verbose_logger, "removed dead-end path edges [round %u] = " "%lu", i + 1, retval); } gt_logger_log(verbose_logger, "removed dead-end path edges [%u rounds] = %lu", i, retval); return 0; } static void gt_readjoiner_assembly_pump_encseq_through_cache( const GtEncseq *encseq) { const GtTwobitencoding *twobitencoding = gt_encseq_twobitencoding_export( encseq); uint64_t sum = 0; /* compute the sum, so that the compiler does no remove the code accessing twobitencoding during optimization */ unsigned long idx, totallength = gt_encseq_total_length(encseq), numofunits = ! gt_encseq_is_mirrored(encseq) ? gt_unitsoftwobitencoding(totallength) : gt_unitsoftwobitencoding((totallength - 1)/2); for (idx = 0; idx < numofunits; idx++) sum += twobitencoding[idx]; gt_assert(sum > 0); #ifndef S_SPLINT_S gt_log_log("encseq codes-sum: %"PRIu64, sum); #endif } static int gt_readjoiner_assembly_paths2seq(const char *readset, unsigned long lengthcutoff, unsigned long buffersize, GtLogger *default_logger, GtTimer **timer, GtError *err) { int had_err; GtEncseqLoader *el = gt_encseq_loader_new(); GtEncseq *reads; if (gt_showtime_enabled()) { gt_assert(timer != NULL); if (*timer == NULL) /* paths2seq */ { *timer = gt_timer_new_with_progress_description( GT_READJOINER_MSG_PUMPENCSEQ); gt_timer_show_cpu_time_by_progress(*timer); gt_timer_start(*timer); } else gt_timer_show_progress(*timer, GT_READJOINER_MSG_PUMPENCSEQ, stdout); } gt_logger_log(default_logger, GT_READJOINER_MSG_PUMPENCSEQ); gt_encseq_loader_drop_description_support(el); gt_encseq_loader_disable_autosupport(el); gt_encseq_loader_mirror(el); reads = gt_encseq_loader_load(el, readset, err); gt_assert(reads != NULL); gt_readjoiner_assembly_pump_encseq_through_cache(reads); if (gt_showtime_enabled()) gt_timer_show_progress(*timer, GT_READJOINER_MSG_OUTPUTCONTIGS, stdout); gt_logger_log(default_logger, GT_READJOINER_MSG_OUTPUTCONTIGS); had_err = gt_contigpaths_to_fasta(readset, GT_READJOINER_SUFFIX_CONTIG_PATHS, GT_READJOINER_SUFFIX_CONTIGS, reads, lengthcutoff, false, (size_t)buffersize, default_logger, err); gt_encseq_delete(reads); gt_encseq_loader_delete(el); return had_err; } static inline void gt_readjoiner_assembly_show_current_space(const char *label) { unsigned long m, f; if (gt_ma_bookkeeping_enabled()) { m = gt_ma_get_space_current(); f = gt_fa_get_space_current(); gt_log_log("used space %s: %.2f MB (ma: %.2f MB; fa: %.2f MB)", label == NULL ? "" : label, GT_MEGABYTES(m + f), GT_MEGABYTES(m), GT_MEGABYTES(f)); } } static int gt_readjoiner_assembly_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtReadjoinerAssemblyArguments *arguments = tool_arguments; GtLogger *verbose_logger, *default_logger; GtEncseqLoader *el; GtEncseq *reads; GtTimer *timer = NULL; GtStrgraph *strgraph = NULL; GtBitsequence *contained = NULL; const char *readset = gt_str_get(arguments->readset); bool eqlen; unsigned long nreads, tlen, rlen; int had_err = 0; gt_assert(arguments); gt_error_check(err); default_logger = gt_logger_new(!arguments->quiet, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(default_logger, "gt readjoiner assembly (version "GT_READJOINER_VERSION")"); verbose_logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(verbose_logger, "verbose output activated"); gt_logger_log(verbose_logger, "readset name = %s", readset); if (!arguments->paths2seq) { el = gt_encseq_loader_new(); gt_encseq_loader_drop_description_support(el); gt_encseq_loader_disable_autosupport(el); reads = gt_encseq_loader_load(el, readset, err); gt_assert(reads != NULL); eqlen = gt_encseq_accesstype_get(reads) == GT_ACCESS_TYPE_EQUALLENGTH; nreads = gt_encseq_num_of_sequences(reads); gt_logger_log(default_logger, "number of reads in filtered readset = %lu", nreads); tlen = gt_encseq_total_length(reads) - nreads + 1; gt_logger_log(verbose_logger, "total length of filtered readset = %lu", tlen); if (eqlen) { rlen = gt_encseq_seqlength(reads, 0); gt_logger_log(verbose_logger, "read length = %lu", rlen); gt_encseq_delete(reads); reads = NULL; } else { unsigned int i; unsigned long nofreads; GtStr *filename = gt_str_clone(arguments->readset); gt_str_append_cstr(filename, ".0" GT_READJOINER_SUFFIX_CNTLIST); had_err = gt_cntlist_parse(gt_str_get(filename), true, &contained, &nofreads, err); for (i = 1U; i < arguments->nspmfiles && had_err == 0; i++) { unsigned long nofreads_i; gt_str_reset(filename); gt_str_append_str(filename, arguments->readset); gt_str_append_char(filename, '.'); gt_str_append_uint(filename, i); gt_str_append_cstr(filename, GT_READJOINER_SUFFIX_CNTLIST); had_err = gt_cntlist_parse(gt_str_get(filename), false, &contained, &nofreads_i, err); gt_assert(nofreads == nofreads_i); } gt_str_delete(filename); rlen = 0; gt_logger_log(verbose_logger, "read length = variable"); gt_assert(reads != NULL); } if (had_err == 0) { if (arguments->minmatchlength > 0) gt_logger_log(verbose_logger, "SPM length cutoff = %u", arguments->minmatchlength); strgraph = gt_strgraph_new(nreads); if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description( GT_READJOINER_MSG_COUNTSPM); gt_timer_start(timer); gt_timer_show_cpu_time_by_progress(timer); } had_err = gt_readjoiner_assembly_count_spm(readset, eqlen, arguments->minmatchlength, arguments->nspmfiles, strgraph, contained, default_logger, err); gt_readjoiner_assembly_show_current_space("(edges counted)"); if (gt_showtime_enabled()) gt_timer_show_progress(timer, GT_READJOINER_MSG_BUILDSG, stdout); gt_logger_log(default_logger, GT_READJOINER_MSG_BUILDSG); } if (had_err == 0) { gt_assert((eqlen && rlen > 0 && reads == NULL) || (!eqlen && rlen == 0 && reads != NULL)); gt_strgraph_allocate_graph(strgraph, rlen, reads); gt_readjoiner_assembly_show_current_space("(graph allocated)"); had_err = gt_strgraph_load_spm_from_file(strgraph, (unsigned long)arguments->minmatchlength, arguments->redtrans, contained, readset, arguments->nspmfiles, GT_READJOINER_SUFFIX_SPMLIST, err); } if (had_err == 0) { if (arguments->elendistri) gt_strgraph_show_edge_lengths_distribution(strgraph, readset, GT_READJOINER_SUFFIX_ELEN_DISTRI); gt_strgraph_log_stats(strgraph, verbose_logger); gt_strgraph_log_space(strgraph); } if (!eqlen && reads != NULL && !arguments->errors) { gt_encseq_delete(reads); reads = NULL; if (had_err == 0) gt_strgraph_set_encseq(strgraph, NULL); } if (had_err == 0 && arguments->redtrans) { if (gt_showtime_enabled()) gt_timer_show_progress(timer, GT_READJOINER_MSG_REDTRANS, stdout); gt_strgraph_sort_edges_by_len(strgraph, false); (void)gt_strgraph_redtrans(strgraph, false); (void)gt_strgraph_redself(strgraph, false); (void)gt_strgraph_redwithrc(strgraph, false); gt_strgraph_log_stats(strgraph, verbose_logger); } if (had_err == 0 && arguments->errors) { if (gt_showtime_enabled()) gt_timer_show_progress(timer, GT_READJOINER_MSG_CLEANSG, stdout); gt_logger_log(default_logger, GT_READJOINER_MSG_CLEANSG); had_err = gt_readjoiner_assembly_error_correction(strgraph, arguments->bubble, arguments->deadend, arguments->deadend_depth, verbose_logger); } if (!eqlen && reads != NULL) { gt_encseq_delete(reads); reads = NULL; if (had_err == 0) gt_strgraph_set_encseq(strgraph, NULL); } if (had_err == 0) { if (gt_showtime_enabled()) gt_timer_show_progress(timer, GT_READJOINER_MSG_TRAVERSESG, stdout); gt_logger_log(default_logger, GT_READJOINER_MSG_TRAVERSESG); gt_readjoiner_assembly_show_current_space("(before traversal)"); gt_strgraph_spell(strgraph, (unsigned long)arguments->depthcutoff, (unsigned long)arguments->lengthcutoff, false, readset, GT_READJOINER_SUFFIX_CONTIG_PATHS, NULL, true, false, verbose_logger); } if (contained != NULL) gt_free(contained); gt_strgraph_delete(strgraph); strgraph = NULL; gt_assert(reads == NULL); gt_encseq_loader_delete(el); } if (had_err == 0) { gt_readjoiner_assembly_show_current_space("(before paths2seq)"); had_err = gt_readjoiner_assembly_paths2seq(readset, (unsigned long)arguments->lengthcutoff, arguments->buffersize, default_logger, &timer, err); } if (gt_showtime_enabled()) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } gt_logger_delete(default_logger); gt_logger_delete(verbose_logger); return had_err; } GtTool* gt_readjoiner_assembly(void) { return gt_tool_new(gt_readjoiner_assembly_arguments_new, gt_readjoiner_assembly_arguments_delete, gt_readjoiner_assembly_option_parser_new, gt_readjoiner_assembly_arguments_check, gt_readjoiner_assembly_runner); } genometools-1.5.1/src/tools/gt_readjoiner_assembly.h000066400000000000000000000020141211610345200226540ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_READJOINER_ASSEMBLY_H #define GT_READJOINER_ASSEMBLY_H #include "core/tool_api.h" /* the readjoiner_assembly tool */ GtTool* gt_readjoiner_assembly(void); #endif genometools-1.5.1/src/tools/gt_readjoiner_cnttest.c000066400000000000000000000163521211610345200225260ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/logger.h" #include "core/ma.h" #include "core/unused_api.h" #include "match/esa-seqread.h" #include "match/rdj-contfind-bottomup.h" #include "match/rdj-filesuf-def.h" #include "match/rdj-ovlfind-gusfield.h" #include "match/rdj-pairwise.h" #include "match/rdj-cntlist.h" #include "match/rdj-version.h" #include "tools/gt_readjoiner_cnttest.h" typedef enum { GT_READJOINER_CNTTEST_SHOWLIST, GT_READJOINER_CNTTEST_BRUTEFORCE, GT_READJOINER_CNTTEST_KMP, GT_READJOINER_CNTTEST_ESA, } GtReadjoinerCnttestTestspec; typedef struct { GtStr *readset, *teststr; GtReadjoinerCnttestTestspec test; bool singlestrand; bool verbose; } GtReadjoinerCnttestArguments; static void* gt_readjoiner_cnttest_arguments_new(void) { GtReadjoinerCnttestArguments *arguments = gt_calloc((size_t)1, sizeof *arguments); arguments->readset = gt_str_new(); arguments->teststr = gt_str_new(); return arguments; } static void gt_readjoiner_cnttest_arguments_delete(void *tool_arguments) { GtReadjoinerCnttestArguments *arguments = tool_arguments; if (arguments == NULL) return; gt_str_delete(arguments->readset); gt_str_delete(arguments->teststr); gt_free(arguments); } static GtOptionParser* gt_readjoiner_cnttest_option_parser_new( void *tool_arguments) { GtReadjoinerCnttestArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("-readset [option ...]", "Test/development tool for readjoiner containments filtering."); /* -readset */ option = gt_option_new_string("readset", "specify the readset name", arguments->readset, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -test */ option = gt_option_new_string("test", "select among the available tests:\n" "showlist: show content of an cnt list (input: cntlist)\n" "bruteforce: memcmp reads vs all suffixes and prefixes (input: encseq)\n" "kmp: variant of Knuth-Morris-Pratt (input: encseq)\n" "esa: own esa-based algorithm (input: esa)", arguments->teststr, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -singlestrand */ option = gt_option_new_bool("singlestrand", "do not use reads " "reverse complements", &arguments->singlestrand, false); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); gt_option_parser_set_version_func(op, gt_readjoiner_show_version); gt_option_parser_set_max_args(op, 0); return op; } static int gt_readjoiner_cnttest_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GT_UNUSED GtError *err) { GtReadjoinerCnttestArguments *arguments = tool_arguments; const char *teststr = gt_str_get(arguments->teststr); int had_err = 0; gt_error_check(err); gt_assert(arguments); if (strcmp(teststr, "showlist") == 0) arguments->test = GT_READJOINER_CNTTEST_SHOWLIST; else if (strcmp(teststr, "bruteforce") == 0) arguments->test = GT_READJOINER_CNTTEST_BRUTEFORCE; else if (strcmp(teststr, "kmp") == 0) arguments->test = GT_READJOINER_CNTTEST_KMP; else if (strcmp(teststr, "esa") == 0) arguments->test = GT_READJOINER_CNTTEST_ESA; else { gt_error_set(err, "illegal argument \"%s\" to option -test", teststr); had_err = -1; } return had_err; } static int gt_readjoiner_cnttest_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { GtReadjoinerCnttestArguments *arguments = tool_arguments; GtEncseqLoader *el = NULL; GtEncseq *reads = NULL; GtBitsequence *bits = NULL; unsigned long nofreads; int had_err = 0; gt_error_check(err); gt_assert(arguments); if (arguments->test == GT_READJOINER_CNTTEST_SHOWLIST) { GtStr *fn = NULL; fn = gt_str_clone(arguments->readset); gt_str_append_cstr(fn, GT_READJOINER_SUFFIX_CNTLIST); had_err = gt_cntlist_parse(gt_str_get(fn), true, &bits, &nofreads, err); gt_str_delete(fn); } else if (arguments->test == GT_READJOINER_CNTTEST_BRUTEFORCE || arguments->test == GT_READJOINER_CNTTEST_KMP) { el = gt_encseq_loader_new(); gt_encseq_loader_drop_description_support(el); gt_encseq_loader_disable_autosupport(el); if (!arguments->singlestrand) gt_encseq_loader_mirror(el); reads = gt_encseq_loader_load(el, gt_str_get(arguments->readset), err); if (reads == NULL) had_err = -1; else { gt_rdj_pairwise_exact(GT_OVLFIND_CNT, reads, !arguments->singlestrand, false, arguments->test == GT_READJOINER_CNTTEST_KMP, 1UL, true, NULL, NULL, false, NULL, &bits, &nofreads); } gt_encseq_delete(reads); gt_encseq_loader_delete(el); } else if (arguments->test == GT_READJOINER_CNTTEST_ESA) { Sequentialsuffixarrayreader *ssar = NULL; unsigned long readlength = 0, firstrevcompl = 0; GtLogger *verbose_logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stderr); ssar = gt_newSequentialsuffixarrayreaderfromfile(gt_str_get( arguments->readset), SARR_LCPTAB | SARR_SUFTAB | SARR_SSPTAB, SEQ_scan, verbose_logger, err); if (gt_error_is_set(err)) had_err = -1; else { nofreads = gt_encseq_num_of_sequences(ssar->encseq); if (!arguments->singlestrand) { nofreads = GT_DIV2(nofreads); firstrevcompl = nofreads; } GT_INITBITTAB(bits, nofreads); if (!arguments->singlestrand) if (gt_encseq_accesstype_get(ssar->encseq) == GT_ACCESS_TYPE_EQUALLENGTH) readlength = gt_encseq_seqlength(ssar->encseq, 0); (void)gt_contfind_bottomup(ssar, false, bits, arguments->singlestrand ? 0 : firstrevcompl, readlength); } if (ssar != NULL) gt_freeSequentialsuffixarrayreader(&ssar); gt_logger_delete(verbose_logger); } else { gt_assert(false); } if (!had_err) had_err = gt_cntlist_show(bits, nofreads, NULL, false, err); gt_free(bits); return had_err; } GtTool* gt_readjoiner_cnttest(void) { return gt_tool_new(gt_readjoiner_cnttest_arguments_new, gt_readjoiner_cnttest_arguments_delete, gt_readjoiner_cnttest_option_parser_new, gt_readjoiner_cnttest_arguments_check, gt_readjoiner_cnttest_runner); } genometools-1.5.1/src/tools/gt_readjoiner_cnttest.h000066400000000000000000000020101211610345200225150ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_READJOINER_CNTTEST_H #define GT_READJOINER_CNTTEST_H #include "core/tool_api.h" /* the readjoiner_cnttest tool */ GtTool* gt_readjoiner_cnttest(void); #endif genometools-1.5.1/src/tools/gt_readjoiner_correct.c000066400000000000000000000107331211610345200225000ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/logger.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "match/esa-seqread.h" #include "match/rdj-errfind.h" #include "match/rdj-version.h" #include "tools/gt_readjoiner_correct.h" #define GT_READJOINER_CORRECT_TAG ".corrected" typedef struct { unsigned long k, c; GtStr *indexname; unsigned long debug_value; bool edit_twobitencoding; } GtReadjoinerCorrectArguments; static void* gt_readjoiner_correct_arguments_new(void) { GtReadjoinerCorrectArguments *arguments = gt_calloc((size_t)1, sizeof *arguments); arguments->indexname = gt_str_new(); return arguments; } static void gt_readjoiner_correct_arguments_delete(void *tool_arguments) { GtReadjoinerCorrectArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->indexname); gt_free(arguments); } static GtOptionParser* gt_readjoiner_correct_option_parser_new( void *tool_arguments) { GtReadjoinerCorrectArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); op = gt_option_parser_new("[options] -ii indexname", "Readjoiner k-mer based error correction."); option = gt_option_new_ulong_min("k","k-mer length", &arguments->k, 31UL, 1UL); gt_option_parser_add_option(op, option); option = gt_option_new_ulong_min("c","minimal trusted count", &arguments->c, 3UL, 1UL); gt_option_parser_add_option(op, option); option = gt_option_new_bool("encseq","correct encoded sequence", &arguments->edit_twobitencoding, true); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); option = gt_option_new_string("ii", "input index", arguments->indexname, NULL); gt_option_is_mandatory(option); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("dbg","(debug value) " "see code for current meaning", &arguments->debug_value, GT_UNDEF_ULONG); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); gt_option_parser_set_version_func(op, gt_readjoiner_show_version); gt_option_parser_set_max_args(op, 0); return op; } static int gt_readjoiner_correct_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { GtReadjoinerCorrectArguments *arguments = tool_arguments; Sequentialsuffixarrayreader *ssar; GtLogger *logger; int had_err = 0; gt_error_check(err); gt_assert(arguments); logger = gt_logger_new(true, GT_LOGGER_DEFLT_PREFIX, stderr); ssar = gt_newSequentialsuffixarrayreaderfromfile( gt_str_get(arguments->indexname), SARR_LCPTAB | SARR_SUFTAB | SARR_ESQTAB | SARR_SSPTAB, SEQ_scan, logger, err); if (ssar == NULL) had_err = -1; else { GtStr *indexname_corrected = gt_str_clone(arguments->indexname); gt_str_append_cstr(arguments->indexname, GT_READJOINER_CORRECT_TAG); had_err = gt_errfind(ssar, gt_encseqSequentialsuffixarrayreader(ssar), arguments->k, arguments->c, arguments->debug_value, arguments->edit_twobitencoding, gt_str_get(indexname_corrected), err); gt_freeSequentialsuffixarrayreader(&ssar); gt_str_delete(indexname_corrected); } gt_logger_delete(logger); return had_err; } GtTool* gt_readjoiner_correct(void) { return gt_tool_new(gt_readjoiner_correct_arguments_new, gt_readjoiner_correct_arguments_delete, gt_readjoiner_correct_option_parser_new, NULL, gt_readjoiner_correct_runner); } genometools-1.5.1/src/tools/gt_readjoiner_correct.h000066400000000000000000000020101211610345200224720ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_READJOINER_CORRECT_H #define GT_READJOINER_CORRECT_H #include "core/tool_api.h" /* the readjoiner_correct tool */ GtTool* gt_readjoiner_correct(void); #endif genometools-1.5.1/src/tools/gt_readjoiner_overlap.c000066400000000000000000000324021211610345200225040ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "core/unused_api.h" #include "core/option_api.h" #include "core/encseq.h" #include "core/intbits.h" #include "core/logger.h" #include "core/minmax.h" #ifdef GT_THREADS_ENABLED #include "core/thread_api.h" #endif #include "match/rdj-spmfind.h" #include "match/rdj-version.h" #include "match/firstcodes.h" #include "tools/gt_readjoiner_overlap.h" typedef struct { bool singlestrand, elimtrans, verbose, quiet, showspm; unsigned int minmatchlength, numofparts, w_maxsize; unsigned long maximumspace, phase2extra; GtStr *encseqinput, *memlimitarg, *phase2extraarg; GtOption *refoptionmemlimit, *refoptionphase2extra; bool radixsmall; unsigned int radixparts; bool onlyallfirstcodes; } GtReadjoinerOverlapArguments; static void* gt_readjoiner_overlap_arguments_new(void) { GtReadjoinerOverlapArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->encseqinput = gt_str_new(); arguments->numofparts = 0; arguments->memlimitarg = gt_str_new(); arguments->phase2extraarg = gt_str_new(); arguments->phase2extra = 0UL; /* in bytes */ arguments->maximumspace = 0UL; /* in bytes */ return arguments; } static void gt_readjoiner_overlap_arguments_delete(void *tool_arguments) { GtReadjoinerOverlapArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->encseqinput); gt_option_delete(arguments->refoptionmemlimit); gt_option_delete(arguments->refoptionphase2extra); gt_str_delete(arguments->memlimitarg); gt_str_delete(arguments->phase2extraarg); gt_free(arguments); } static GtOptionParser* gt_readjoiner_overlap_option_parser_new( void *tool_arguments) { GtReadjoinerOverlapArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optionparts, *optionmemlimit, *q_option, *v_option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [file]", "Compute suffix prefix matches " "from encoded sequence."); /* -readset */ option = gt_option_new_string("readset", "specify the readset name", arguments->encseqinput, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -l */ option = gt_option_new_uint_min("l", "specify the minimum SPM length", &arguments->minmatchlength, 0, 2U); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -parts */ optionparts = gt_option_new_uint("parts", "specify the number of parts", &arguments->numofparts, 0U); gt_option_parser_add_option(op, optionparts); /* -memlimit */ optionmemlimit = gt_option_new_string("memlimit", "specify maximal amount of memory to be used during " "index construction (in bytes, the keywords 'MB' " "and 'GB' are allowed)", arguments->memlimitarg, NULL); gt_option_parser_add_option(op, optionmemlimit); gt_option_exclude(optionmemlimit, optionparts); arguments->refoptionmemlimit = gt_option_ref(optionmemlimit); /* -singlestrand */ option = gt_option_new_bool("singlestrand", "do not use reverse complements " "of the reads", &arguments->singlestrand, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -elimtrans */ option = gt_option_new_bool("elimtrans", "output only irreducible SPMs", &arguments->elimtrans, true); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -wmax */ option = gt_option_new_uint("wmax", "specify the maximum width of w set;\n" "use 0 to disable w set partitioning", &arguments->w_maxsize, 32U); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -showspm */ option = gt_option_new_bool("showspm", "show textual SPMs list on stdout", &arguments->showspm, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -phase2extra */ option = gt_option_new_string("phase2extra", "specify amount of additional space required for " "the second phase of the computation involving the " "processing of the intervals (in bytes, " "the keywords 'MB' and 'GB' are allowed)", arguments->phase2extraarg, NULL); gt_option_parser_add_option(op, option); arguments->refoptionphase2extra = gt_option_ref(option); gt_option_is_development_option(option); /* -v */ v_option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, v_option); /* -q */ q_option = gt_option_new_bool("q", "suppress standard output messages", &arguments->quiet, false); gt_option_parser_add_option(op, q_option); gt_option_exclude(q_option, v_option); /* -radixparts */ option = gt_option_new_uint("radixparts", "specify the radixpart parameter", &arguments->radixparts, 1U); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -radixsmall */ option = gt_option_new_bool("radixsmall", "specify the radixsmall parameter", &arguments->radixsmall, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -onlyallfirstcodes */ option = gt_option_new_bool("onlyallfirstcodes", "only determines allcodes", &arguments->onlyallfirstcodes, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); gt_option_parser_set_version_func(op, gt_readjoiner_show_version); return op; } static int gt_readjoiner_overlap_arguments_check(int rest_argc, void *tool_arguments, GtError *err) { GtReadjoinerOverlapArguments *arguments = tool_arguments; bool haserr = false; gt_error_check(err); if (rest_argc != 0) { gt_error_set(err,"unnecessary arguments"); haserr = true; } if (!haserr && gt_option_is_set(arguments->refoptionmemlimit)) { if (gt_option_parse_spacespec(&arguments->maximumspace, "memlimit", arguments->memlimitarg, err) != 0) { haserr = true; } if (!haserr && !gt_ma_bookkeeping_enabled()) { gt_error_set(err, "option '-memlimit' requires " "GT_MEM_BOOKKEEPING=on"); haserr = true; } } if (!haserr && gt_option_is_set(arguments->refoptionphase2extra)) { if (gt_option_parse_spacespec(&arguments->phase2extra, "phase2extra", arguments->phase2extraarg, err) != 0) { haserr = true; } } #ifdef GT_THREADS_ENABLED if (!haserr) { if (gt_jobs > 1 && gt_ma_bookkeeping_enabled()) { gt_error_set(err, "gt option '-j' and GT_MEM_BOOKKEEPING=on " "are incompatible"); haserr = true; } } #endif return haserr ? -1 : 0; } static int gt_readjoiner_overlap_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtReadjoinerOverlapArguments *arguments = tool_arguments; GtEncseqLoader *el = NULL; GtEncseq *encseq = NULL; GtLogger *default_logger, *verbose_logger; unsigned int kmersize; bool haserr = false; bool eqlen; unsigned long total_nof_irr_spm = 0, total_nof_trans_spm = 0; gt_error_check(err); gt_assert(arguments); default_logger = gt_logger_new(!arguments->quiet, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(default_logger, "gt readjoiner overlap (version "GT_READJOINER_VERSION")"); verbose_logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(verbose_logger, "verbose output activated"); kmersize = MIN((unsigned int) GT_UNITSIN2BITENC, arguments->minmatchlength); el = gt_encseq_loader_new(); gt_encseq_loader_drop_description_support(el); gt_encseq_loader_disable_autosupport(el); encseq = gt_encseq_loader_load(el, gt_str_get(arguments->encseqinput), err); eqlen = gt_encseq_accesstype_get(encseq) == GT_ACCESS_TYPE_EQUALLENGTH; if (encseq == NULL) haserr = true; if (!haserr && !arguments->singlestrand) { if (gt_encseq_mirror(encseq, err) != 0) haserr = true; } if (!haserr) { unsigned int threadcount; #ifdef GT_THREADS_ENABLED const unsigned int threads = gt_jobs; #else const unsigned int threads = 1U; #endif if (eqlen) { GtBUstate_spmeq **state_table = gt_malloc(sizeof (*state_table) * threads); for (threadcount = 0; threadcount < threads; threadcount++) { state_table[threadcount] = gt_spmfind_eqlen_state_new(encseq, (unsigned long)arguments->minmatchlength, (unsigned long)arguments->w_maxsize, arguments->elimtrans, arguments->showspm, gt_str_get(arguments->encseqinput), threadcount, default_logger, verbose_logger, err); } if (storefirstcodes_getencseqkmers_twobitencoding(encseq, kmersize, arguments->numofparts, arguments->maximumspace, arguments->minmatchlength, false, false, arguments->onlyallfirstcodes, 5U, arguments->phase2extra, arguments->radixsmall, arguments->radixparts, gt_spmfind_eqlen_process, gt_spmfind_eqlen_process_end, state_table, verbose_logger, err) != 0) { haserr = true; } for (threadcount = 0; threadcount < threads; threadcount++) { total_nof_irr_spm += gt_spmfind_eqlen_nof_irr_spm(state_table[threadcount]); total_nof_trans_spm += gt_spmfind_eqlen_nof_irr_spm(state_table[threadcount]); gt_spmfind_eqlen_state_delete(state_table[threadcount]); } gt_free(state_table); } else { GtBUstate_spmvar **state_table = gt_malloc(sizeof (*state_table) * threads); for (threadcount = 0; threadcount < threads; threadcount++) { state_table[threadcount] = gt_spmfind_varlen_state_new(encseq, (unsigned long)arguments->minmatchlength, (unsigned long)arguments->w_maxsize, arguments->elimtrans, arguments->showspm, gt_str_get(arguments->encseqinput), threadcount, default_logger, verbose_logger, err); } if (storefirstcodes_getencseqkmers_twobitencoding(encseq, kmersize, arguments->numofparts, arguments->maximumspace, arguments->minmatchlength, false, false, arguments->onlyallfirstcodes, 5U, arguments->phase2extra, arguments->radixsmall, arguments->radixparts, gt_spmfind_varlen_process, gt_spmfind_varlen_process_end, state_table, verbose_logger, err) != 0) { haserr = true; } for (threadcount = 0; threadcount < threads; threadcount++) { gt_spmfind_varlen_state_delete(state_table[threadcount]); total_nof_irr_spm += gt_spmfind_eqlen_nof_irr_spm(state_table[threadcount]); total_nof_trans_spm += gt_spmfind_eqlen_nof_irr_spm(state_table[threadcount]); } gt_free(state_table); } } if (!haserr) { gt_logger_log(default_logger, "number of %ssuffix-prefix matches = %lu", arguments->elimtrans ? "irreducible " : "", total_nof_irr_spm); if (arguments->elimtrans) gt_logger_log(default_logger, "number of transitive suffix-prefix " "matches = %lu", total_nof_trans_spm); } gt_logger_delete(default_logger); gt_logger_delete(verbose_logger); gt_encseq_delete(encseq); gt_encseq_loader_delete(el); return haserr ? -1 : 0; } GtTool* gt_readjoiner_overlap(void) { return gt_tool_new(gt_readjoiner_overlap_arguments_new, gt_readjoiner_overlap_arguments_delete, gt_readjoiner_overlap_option_parser_new, gt_readjoiner_overlap_arguments_check, gt_readjoiner_overlap_runner); } genometools-1.5.1/src/tools/gt_readjoiner_overlap.h000066400000000000000000000021051211610345200225060ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_READJOINER_OVERLAP_H #define GT_READJOINER_OVERLAP_H #include "core/tool_api.h" /* the readjoiner overlap tool */ GtTool* gt_readjoiner_overlap(void); #endif genometools-1.5.1/src/tools/gt_readjoiner_prefilter.c000066400000000000000000000373301211610345200230350ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/log.h" #include "core/logger.h" #include "core/encseq.h" #include "core/fa.h" #include "core/ma.h" #include "core/output_file_api.h" #include "core/option_api.h" #include "core/unused_api.h" #include "core/undef_api.h" #include "match/rdj-contfinder.h" #include "match/rdj-filesuf-def.h" #include "match/rdj-version.h" #include "match/reads_library.h" #include "match/reads2twobit.h" #include "tools/gt_readjoiner_prefilter.h" typedef struct { bool verbose, quiet; bool singlestrand, encodeonly, cntlist, encseq, seqnums, fasta, copynum, libtable, phred64; GtStr *readset; GtStrArray *db; /* rdj-radixsort test */ bool testrs, testrs_print; unsigned long testrs_depth, testrs_maxdepth, maxlow; unsigned int lowqual; } GtReadjoinerPrefilterArguments; static void* gt_readjoiner_prefilter_arguments_new(void) { GtReadjoinerPrefilterArguments *arguments = gt_calloc((size_t)1, sizeof *arguments); arguments->readset = gt_str_new(); arguments->db = gt_str_array_new(); return arguments; } static void gt_readjoiner_prefilter_arguments_delete(void *tool_arguments) { GtReadjoinerPrefilterArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->readset); gt_str_array_delete(arguments->db); gt_free(arguments); } static GtOptionParser* gt_readjoiner_prefilter_option_parser_new( void *tool_arguments) { GtReadjoinerPrefilterArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *singlestrand_option, *encodeonly_option, *cntlist_option, *fasta_option, *seqnums_option, *encseq_option, *readset_option, *v_option, *q_option, *db_option, *copynum_option, *libtable_option, *testrs_option, *testrs_depth_option, *testrs_print_option, *testrs_maxdepth_option, *phred64_option, *maxlow_option, *lowqual_option; gt_assert(arguments); op = gt_option_parser_new("[option ...]", "Remove contained and low-quality reads " "and encode read set in GtEncseq format."); /* -readset */ readset_option = gt_option_new_string("readset", "specify the readset name\n" "default: filename of first input sequence_file", arguments->readset, NULL); gt_option_hide_default(readset_option); gt_option_parser_add_option(op, readset_option); /* -db */ db_option = gt_option_new_filename_array("db", GT_READS2TWOBIT_LIBSPEC_HELPMSG, arguments->db); gt_option_hide_default(db_option); gt_option_is_mandatory(db_option); gt_option_parser_add_option(op, db_option); /* -v */ v_option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, v_option); /* -q */ q_option = gt_option_new_bool("q", "suppress standard output messages", &arguments->quiet, false); gt_option_exclude(q_option, v_option); gt_option_parser_add_option(op, q_option); /* -maxlow */ maxlow_option = gt_option_new_ulong("maxlow", "maximal number of low-quality positions in a read\n" "default: infinite", &arguments->maxlow, GT_UNDEF_ULONG); gt_option_hide_default(maxlow_option); gt_option_is_extended_option(maxlow_option); gt_option_parser_add_option(op, maxlow_option); /* -lowqual */ lowqual_option = gt_option_new_uint_max("lowqual", "maximal quality for a position to be considered low-quality", &arguments->lowqual, 3U, 127U); gt_option_is_extended_option(lowqual_option); gt_option_imply(lowqual_option, maxlow_option); gt_option_parser_add_option(op, lowqual_option); /* -phred64 */ phred64_option = gt_option_new_bool("phred64", "use phred64 scores for FastQ format", &arguments->phred64, false); gt_option_is_extended_option(phred64_option); gt_option_parser_add_option(op, phred64_option); /* -singlestrand */ singlestrand_option = gt_option_new_bool("singlestrand", "do not use reverse complements of the reads", &arguments->singlestrand, false); gt_option_is_development_option(singlestrand_option); gt_option_parser_add_option(op, singlestrand_option); /* -encodeonly */ encodeonly_option = gt_option_new_bool("encodeonly", "do not remove contained reads", &arguments->encodeonly, false); gt_option_is_development_option(encodeonly_option); gt_option_parser_add_option(op, encodeonly_option); /* -encseq */ encseq_option = gt_option_new_bool("encseq", "output reads in GtEncseq format", &arguments->encseq, true); gt_option_is_development_option(encseq_option); gt_option_parser_add_option(op, encseq_option); /* -libtable */ libtable_option = gt_option_new_bool("libtable", "output reads libraries table", &arguments->libtable, true); gt_option_is_development_option(libtable_option); gt_option_parser_add_option(op, libtable_option); /* -fasta */ fasta_option = gt_option_new_bool("fasta", "output reads in MultiFasta format", &arguments->fasta, false); gt_option_is_development_option(fasta_option); gt_option_parser_add_option(op, fasta_option); /* -cnt */ cntlist_option = gt_option_new_bool("cnt", "output contained reads list", &arguments->cntlist, false); gt_option_is_development_option(cntlist_option); gt_option_exclude(encodeonly_option, cntlist_option); gt_option_parser_add_option(op, cntlist_option); /* -seqnums */ seqnums_option = gt_option_new_bool("seqnums", "output sorted sequence numbers", &arguments->seqnums, false); gt_option_is_development_option(seqnums_option); gt_option_exclude(encodeonly_option, seqnums_option); gt_option_parser_add_option(op, seqnums_option); /* -copynum */ copynum_option = gt_option_new_bool("copynum", "[eqlen only] output reads copy number to " GT_READJOINER_SUFFIX_READSCOPYNUM, &arguments->copynum, false); gt_option_is_development_option(copynum_option); gt_option_exclude(encodeonly_option, copynum_option); gt_option_parser_add_option(op, copynum_option); /* -testrs */ testrs_option = gt_option_new_bool("testrs", "run gt_radixsort_str test (match/radixsort_str.[ch])", &arguments->testrs, false); gt_option_is_development_option(testrs_option); gt_option_parser_add_option(op, testrs_option); /* -testrs-print */ testrs_print_option = gt_option_new_bool("testrs-print", "printf gt_radixsort_str test results", &arguments->testrs_print, true); gt_option_is_development_option(testrs_print_option); gt_option_parser_add_option(op, testrs_print_option); /* -testrs-depth */ testrs_depth_option = gt_option_new_ulong("testrs-depth", "depth for gt_radixsort_str test", &arguments->testrs_depth, 0); gt_option_is_development_option(testrs_depth_option); gt_option_parser_add_option(op, testrs_depth_option); /* -testrs-maxdepth */ testrs_maxdepth_option = gt_option_new_ulong("testrs-maxdepth", "depth for gt_radixsort_str test", &arguments->testrs_maxdepth, 0); gt_option_is_development_option(testrs_maxdepth_option); gt_option_parser_add_option(op, testrs_maxdepth_option); gt_option_parser_set_version_func(op, gt_readjoiner_show_version); gt_option_parser_set_max_args(op, 0U); return op; } static void gt_readjoiner_prefilter_list_input_files( GtReadjoinerPrefilterArguments *arguments, GtLogger *verbose_logger) { unsigned long i; GtStr *inputfileslist = gt_str_new(); for (i = 0; i < gt_str_array_size(arguments->db); i++) { gt_str_append_cstr(inputfileslist, gt_str_array_get(arguments->db, i)); if (i + 1 < gt_str_array_size(arguments->db)) gt_str_append_cstr(inputfileslist, ", "); } gt_logger_log(verbose_logger, "input files = %s", gt_str_get(inputfileslist)); gt_str_delete(inputfileslist); } #define GT_READJOINER_PREFILTER_CF_OUTPUT(FUNC, FILESUF, MSG)\ {\ GtStr *fn;\ fn = gt_str_new_cstr(gt_str_get(arguments->readset));\ gt_str_append_cstr(fn, (FILESUF));\ had_err = (FUNC)(contfinder, gt_str_get(fn), err);\ gt_logger_log(verbose_logger, MSG": %s", gt_str_get(fn));\ gt_str_delete(fn);\ } static int gt_readjoiner_prefilter_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtReadjoinerPrefilterArguments *arguments = tool_arguments; int had_err = 0; bool varlen; unsigned long i; unsigned long nofreads_valid, nofreads_invalid, nofreads_input, nofreads_output, tlen_valid, tlen_invalid, tlen_input; GtLogger *default_logger, *verbose_logger; GtReads2Twobit *r2t; default_logger = gt_logger_new(!arguments->quiet, GT_LOGGER_DEFLT_PREFIX, stdout); verbose_logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(default_logger, "gt readjoiner prefilter (version "GT_READJOINER_VERSION")"); /* default readset name: first db argument */ if (gt_str_length(arguments->readset) == 0) gt_str_append_cstr(arguments->readset, gt_str_array_get(arguments->db, 0)); gt_logger_log(verbose_logger, "readset name = %s", gt_str_get(arguments->readset)); if (arguments->verbose) gt_readjoiner_prefilter_list_input_files(arguments, verbose_logger); r2t = gt_reads2twobit_new(arguments->readset); if (arguments->phred64) gt_reads2twobit_use_phred64(r2t); if (arguments->maxlow != GT_UNDEF_ULONG) gt_reads2twobit_set_quality_filter(r2t, arguments->maxlow, (char)arguments->lowqual); for (i = 0; i < gt_str_array_size(arguments->db) && !had_err; i++) { GtStr *dbentry = gt_str_array_get_str(arguments->db, i); had_err = gt_reads2twobit_add_library(r2t, dbentry, err); } if (!had_err) had_err = gt_reads2twobit_encode(r2t, err); if (!had_err) { nofreads_valid = gt_reads2twobit_nofseqs(r2t); nofreads_invalid = gt_reads2twobit_nof_invalid_seqs(r2t); nofreads_input = nofreads_valid + nofreads_invalid; tlen_valid = gt_reads2twobit_total_seqlength(r2t) - gt_reads2twobit_nofseqs(r2t); tlen_invalid = gt_reads2twobit_invalid_seqs_totallength(r2t); tlen_input = tlen_valid + tlen_invalid; gt_logger_log(default_logger, "number of reads in complete readset = %lu", nofreads_input); varlen = (gt_reads2twobit_seqlen_eqlen(r2t) == 0); if (varlen) gt_logger_log(verbose_logger, "read length = variable [%lu..%lu]", gt_reads2twobit_seqlen_min(r2t), gt_reads2twobit_seqlen_max(r2t)); else gt_logger_log(verbose_logger, "read length = %lu", gt_reads2twobit_seqlen_eqlen(r2t) - 1UL); gt_logger_log(verbose_logger, "total length of complete readset = %lu", tlen_input); gt_logger_log(verbose_logger, "low-quality reads = %lu " "[%.2f %% of input]", nofreads_invalid, (float)nofreads_invalid * 100 / (float)nofreads_input); if (!arguments->verbose) gt_logger_log(default_logger, "low-quality reads = %lu", nofreads_invalid); nofreads_output = nofreads_valid; if (arguments->encodeonly) { if (!had_err && arguments->fasta) { GtStr *fn; fn = gt_str_new_cstr(gt_str_get(arguments->readset)); gt_str_append_cstr(fn, GT_READJOINER_SUFFIX_PREFILTERED_FAS); had_err = gt_reads2twobit_write_fasta(r2t, gt_str_get(fn), NULL, err); gt_logger_log(verbose_logger, "readset saved: %s", gt_str_get(fn)); gt_str_delete(fn); } if (!had_err && arguments->encseq) { had_err = gt_reads2twobit_write_encseq(r2t, err); gt_logger_log(verbose_logger, "readset saved: %s.%s", gt_str_get(arguments->readset), varlen ? "(esq|ssp)" : "esq"); } gt_logger_log(default_logger, "number of reads in output readset = %lu", nofreads_output); } else { GtContfinder *contfinder; unsigned long nofreads_contained; contfinder = gt_contfinder_new(r2t); gt_contfinder_run(contfinder, !arguments->singlestrand, arguments->copynum); nofreads_contained = gt_contfinder_nofcontained(contfinder); nofreads_output -= nofreads_contained; gt_logger_log(verbose_logger, "contained reads = %lu [%.2f %% of input]", nofreads_contained, (float)nofreads_contained * 100 / (float)nofreads_input); if (!arguments->verbose) gt_logger_log(default_logger, "contained reads = %lu", nofreads_contained); gt_logger_log(default_logger, "number of reads in filtered readset = %lu", nofreads_output); if (!had_err && arguments->cntlist) { GT_READJOINER_PREFILTER_CF_OUTPUT(gt_contfinder_write_cntlist, GT_READJOINER_SUFFIX_CNTLIST, "contained reads list saved"); } if (!had_err && arguments->copynum) { GT_READJOINER_PREFILTER_CF_OUTPUT(gt_contfinder_write_copynum, GT_READJOINER_SUFFIX_READSCOPYNUM, "reads copy number saved"); } if (!had_err && arguments->seqnums) { GT_READJOINER_PREFILTER_CF_OUTPUT(gt_contfinder_write_sorted_seqnums, GT_READJOINER_SUFFIX_SEQNUMS, "sorted sequence numbers " "saved"); } if (!had_err && arguments->fasta) { GtStr *fn; fn = gt_str_new_cstr(gt_str_get(arguments->readset)); gt_str_append_cstr(fn, GT_READJOINER_SUFFIX_PREFILTERED_FAS); had_err = gt_reads2twobit_write_fasta(r2t, gt_str_get(fn), gt_contfinder_contained(contfinder), err); gt_logger_log(verbose_logger, "suffix-prefix-free readset saved: %s", gt_str_get(fn)); gt_str_delete(fn); } if (!had_err && arguments->encseq) { gt_reads2twobit_delete_sequences(r2t, gt_contfinder_contained(contfinder)); had_err = gt_reads2twobit_write_encseq(r2t, err); gt_logger_log(verbose_logger, "suffix-prefix-free readset saved: %s.%s", gt_str_get(arguments->readset), varlen ? "(esq|ssp)" : "esq"); } if (arguments->testrs) { gt_contfinder_radixsort_str_eqlen_tester(contfinder, !arguments->singlestrand, arguments->testrs_depth, arguments->testrs_maxdepth, arguments->testrs_print); } gt_contfinder_delete(contfinder); } if (!had_err && arguments->libtable) { GtStr *fn; fn = gt_str_new_cstr(gt_str_get(arguments->readset)); gt_str_append_cstr(fn, GT_READS_LIBRARY_TABLE_FILESUFFIX); had_err = gt_reads2twobit_write_libraries_table(r2t, gt_str_get(fn), err); gt_logger_log(verbose_logger, "reads library table saved: %s", gt_str_get(fn)); gt_str_delete(fn); } } gt_reads2twobit_delete(r2t); gt_logger_delete(verbose_logger); gt_logger_delete(default_logger); return had_err; } GtTool* gt_readjoiner_prefilter(void) { return gt_tool_new(gt_readjoiner_prefilter_arguments_new, gt_readjoiner_prefilter_arguments_delete, gt_readjoiner_prefilter_option_parser_new, NULL, gt_readjoiner_prefilter_runner); } genometools-1.5.1/src/tools/gt_readjoiner_prefilter.h000066400000000000000000000020201211610345200230260ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_READJOINER_PREFILTER_H #define GT_READJOINER_PREFILTER_H #include "core/tool_api.h" /* the readjoiner prefilter tool */ GtTool* gt_readjoiner_prefilter(void); #endif genometools-1.5.1/src/tools/gt_readjoiner_spmtest.c000066400000000000000000000163561211610345200225450ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/logger.h" #include "core/ma.h" #include "core/unused_api.h" #include "match/esa-seqread.h" #include "match/rdj-filesuf-def.h" #include "match/rdj-ovlfind-gusfield.h" #include "match/rdj-pairwise.h" #include "match/rdj-spmlist.h" #include "match/rdj-version.h" #include "tools/gt_readjoiner_spmtest.h" typedef enum { GT_READJOINER_SPMTEST_SHOWLIST, GT_READJOINER_SPMTEST_BRUTEFORCE, GT_READJOINER_SPMTEST_KMP, GT_READJOINER_SPMTEST_GUSFIELD, } GtReadjoinerSpmtestTestspec; typedef struct { GtStr *readset, *teststr; GtReadjoinerSpmtestTestspec test; unsigned int minmatchlength; bool singlestrand; bool verbose; } GtReadjoinerSpmtestArguments; static void* gt_readjoiner_spmtest_arguments_new(void) { GtReadjoinerSpmtestArguments *arguments = gt_calloc((size_t)1, sizeof *arguments); arguments->readset = gt_str_new(); arguments->teststr = gt_str_new(); return arguments; } static void gt_readjoiner_spmtest_arguments_delete(void *tool_arguments) { GtReadjoinerSpmtestArguments *arguments = tool_arguments; if (arguments == NULL) return; gt_str_delete(arguments->readset); gt_str_delete(arguments->teststr); gt_free(arguments); } static GtOptionParser* gt_readjoiner_spmtest_option_parser_new( void *tool_arguments) { GtReadjoinerSpmtestArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("-readset [option ...]", "Test/development tool for readjoiner overlap phase."); /* -readset */ option = gt_option_new_string("readset", "specify the readset name", arguments->readset, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -l */ option = gt_option_new_uint_min("l", "specify the minimum spm length", &arguments->minmatchlength, 0, 1U); gt_option_parser_add_option(op, option); /* -test */ option = gt_option_new_string("test", "select among the available tests:\n" "showlist: show content of an spm list (input: spmlist)\n" "bruteforce: memcmp all suffixes and prefixes (input: encseq)\n" "kmp: variant of Knuth-Morris-Pratt (input: encseq)\n" "gusfield: Gusfield all pairs suffix-prefix (input: esa)", arguments->teststr, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -singlestrand */ option = gt_option_new_bool("singlestrand", "do not use reads " "reverse complements", &arguments->singlestrand, false); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); gt_option_parser_set_version_func(op, gt_readjoiner_show_version); gt_option_parser_set_max_args(op, 0); return op; } static int gt_readjoiner_spmtest_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GT_UNUSED GtError *err) { GtReadjoinerSpmtestArguments *arguments = tool_arguments; const char *teststr = gt_str_get(arguments->teststr); int had_err = 0; gt_error_check(err); gt_assert(arguments); if (strcmp(teststr, "showlist") == 0) arguments->test = GT_READJOINER_SPMTEST_SHOWLIST; else if (strcmp(teststr, "bruteforce") == 0) arguments->test = GT_READJOINER_SPMTEST_BRUTEFORCE; else if (strcmp(teststr, "kmp") == 0) arguments->test = GT_READJOINER_SPMTEST_KMP; else if (strcmp(teststr, "gusfield") == 0) arguments->test = GT_READJOINER_SPMTEST_GUSFIELD; else { gt_error_set(err, "illegal argument \"%s\" to option -test", teststr); had_err = -1; } return had_err; } static int gt_readjoiner_spmtest_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { GtReadjoinerSpmtestArguments *arguments = tool_arguments; GtEncseqLoader *el = NULL; GtEncseq *reads = NULL; GtLogger *verbose_logger; int had_err = 0; gt_error_check(err); gt_assert(arguments); if (arguments->test == GT_READJOINER_SPMTEST_SHOWLIST) { GtStr *fn = NULL; fn = gt_str_clone(arguments->readset); gt_str_append_cstr(fn, GT_READJOINER_SUFFIX_SPMLIST); had_err = gt_spmlist_parse(gt_str_get(fn), 0, gt_spmproc_show_ascii, NULL, err); gt_str_delete(fn); return had_err; } verbose_logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stderr); el = gt_encseq_loader_new(); gt_encseq_loader_drop_description_support(el); gt_encseq_loader_disable_autosupport(el); if (!arguments->singlestrand) gt_encseq_loader_mirror(el); reads = gt_encseq_loader_load(el, gt_str_get(arguments->readset), err); if (reads == NULL) had_err = -1; else { Sequentialsuffixarrayreader *ssar = NULL; switch (arguments->test) { case GT_READJOINER_SPMTEST_BRUTEFORCE: gt_rdj_pairwise_exact(GT_OVLFIND_SPM, reads, !arguments->singlestrand, false, false, (unsigned long)arguments->minmatchlength, true, gt_spmproc_show_ascii, NULL, false, NULL, NULL, NULL); break; case GT_READJOINER_SPMTEST_KMP: gt_rdj_pairwise_exact(GT_OVLFIND_SPM, reads, !arguments->singlestrand, false, true, (unsigned long)arguments->minmatchlength, true, gt_spmproc_show_ascii, NULL, false, NULL, NULL, NULL); break; case GT_READJOINER_SPMTEST_GUSFIELD: ssar = gt_newSequentialsuffixarrayreaderfromfile(gt_str_get( arguments->readset), SARR_LCPTAB | SARR_SUFTAB | SARR_SSPTAB | SARR_ESQTAB, SEQ_mappedboth, verbose_logger, err); if (gt_error_is_set(err)) had_err = -1; else gt_rdj_gusfield(ssar, (unsigned long)arguments->minmatchlength, true, true, arguments->singlestrand ? 0 : GT_DIV2(gt_encseq_num_of_sequences(reads)), gt_spmproc_show_ascii, NULL); if (ssar != NULL) gt_freeSequentialsuffixarrayreader(&ssar); break; default: gt_assert(false); } gt_encseq_delete(reads); } gt_encseq_loader_delete(el); gt_logger_delete(verbose_logger); return had_err; } GtTool* gt_readjoiner_spmtest(void) { return gt_tool_new(gt_readjoiner_spmtest_arguments_new, gt_readjoiner_spmtest_arguments_delete, gt_readjoiner_spmtest_option_parser_new, gt_readjoiner_spmtest_arguments_check, gt_readjoiner_spmtest_runner); } genometools-1.5.1/src/tools/gt_readjoiner_spmtest.h000066400000000000000000000020101211610345200225300ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_READJOINER_SPMTEST_H #define GT_READJOINER_SPMTEST_H #include "core/tool_api.h" /* the readjoiner_spmtest tool */ GtTool* gt_readjoiner_spmtest(void); #endif genometools-1.5.1/src/tools/gt_readreads.c000066400000000000000000000153241211610345200205700ustar00rootroot00000000000000/* Copyright (c) 2009 Sascha Steinbiss Copyright (c) 2011 Dirk Willrodt Copyright (c) 2009-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/fileutils_api.h" #include "core/ma.h" #include "core/progressbar.h" #include "core/quality.h" #include "core/seq_iterator_fastq_api.h" #include "core/str_array_api.h" #include "core/unused_api.h" #include "core/fasta.h" #include "tools/gt_readreads.h" #define SEQUENCE_CHAR_SEPARATOR '|' typedef struct { bool verbose, showseq, fasta, colorspace; GtStr *qualformat; unsigned long fastawidth; } GtReadreads; static void* gt_readreads_arguments_new(void) { GtReadreads *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->qualformat = gt_str_new(); return arguments; } static void gt_readreads_arguments_delete(void *tool_arguments) { GtReadreads *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->qualformat); gt_free(arguments); } static GtOptionParser* gt_readreads_option_parser_new(void *tool_arguments) { GtReadreads *opts = tool_arguments; GtOptionParser *op; GtOption *option, *fasta; gt_assert(opts); #ifndef S_SPLINT_S static const char *qualformats[] = { "phred", "solexa", NULL }; #endif /* init */ op = gt_option_parser_new("[option ...] file [...]", "Read in FASTQ reads with PHRED or Solexa " "qualities and print them."); option = gt_option_new_bool("v","be verbose", &opts->verbose, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("showseq","show sequences", &opts->showseq, false); gt_option_parser_add_option(op, option); fasta = gt_option_new_bool("fasta","output reads in fasta format", &opts->fasta, false); gt_option_exclude(fasta, option); gt_option_parser_add_option(op, fasta); option = gt_option_new_ulong("fastawidth","fasta output line width", &opts->fastawidth, 60UL); gt_option_imply(option, fasta); gt_option_parser_add_option(op, option); option = gt_option_new_choice("format", "quality score scale\n" "can be 'phred' or 'solexa'", opts->qualformat, qualformats[0], qualformats); gt_option_parser_add_option(op, option); option = gt_option_new_bool("colorspace", "reads are color space coded", &opts->colorspace, false); gt_option_parser_add_option(op, option); gt_option_parser_set_min_args(op, 1U); return op; } static int gt_readreads_arguments_check(GT_UNUSED int rest_argc, GT_UNUSED void *tool_arguments, GT_UNUSED GtError *err) { GT_UNUSED GtReadreads *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); return had_err; } static int gt_readreads_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { GtReadreads *opts = tool_arguments; GtStrArray *files; GtSeqIterator *siq; int had_err = 0; unsigned long i, totalsize, len; const GtUchar *seq, *qual = NULL; char *desc; GtStr *scores = gt_str_new(); gt_error_check(err); gt_assert(opts); files = gt_str_array_new(); for (i = (unsigned long) parsed_args; i < (unsigned long) argc; i++) { gt_str_array_add_cstr(files, argv[i]); } totalsize = (unsigned long) gt_files_estimate_total_size(files); if (opts->colorspace) { siq = gt_seq_iterator_colorspace_fastq_new(files, err); } else { siq = gt_seq_iterator_fastq_new(files, err); } gt_seq_iterator_set_quality_buffer(siq, &qual); if (opts->verbose) { gt_progressbar_start(gt_seq_iterator_getcurrentcounter(siq, (unsigned long long) totalsize), (unsigned long long) totalsize); } while (true) { had_err = gt_seq_iterator_next(siq, &seq, &len, &desc, err); if (had_err != 1) break; if (opts->fasta) { gt_fasta_show_entry((char*)desc, (char*)seq, len, opts->fastawidth, NULL); } else if (opts->showseq) { unsigned long *lens = gt_malloc(sizeof (unsigned long)*len); gt_str_reset(scores); for (i=0;iqualformat), "phred") == 0) { l = gt_str_length(scores); gt_assert(qual); gt_str_append_uint(scores, gt_quality_fastq_to_phred(qual[i])); lens[i] = gt_str_length(scores) - l; } else if (strcmp(gt_str_get(opts->qualformat), "solexa") == 0) { l = gt_str_length(scores); gt_assert(qual); gt_str_append_int(scores, gt_quality_fastq_to_solexa(qual[i])); lens[i] = gt_str_length(scores) - l; } if (i != len-1) gt_str_append_char(scores, SEQUENCE_CHAR_SEPARATOR); } for (i=0;iverbose) gt_progressbar_stop(); gt_str_array_delete(files); gt_str_delete(scores); gt_seq_iterator_delete(siq); return had_err; } GtTool* gt_readreads(void) { return gt_tool_new(gt_readreads_arguments_new, gt_readreads_arguments_delete, gt_readreads_option_parser_new, gt_readreads_arguments_check, gt_readreads_runner); } genometools-1.5.1/src/tools/gt_readreads.h000066400000000000000000000017451211610345200205770ustar00rootroot00000000000000/* Copyright (c) 2009 Sascha Steinbiss Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_READREADS_H #define GT_READREADS_H #include "core/tool_api.h" /* the readreads tool */ GtTool* gt_readreads(void); #endif genometools-1.5.1/src/tools/gt_regioncov.c000066400000000000000000000066501211610345200206330ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/option_api.h" #include "core/versionfunc.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/regioncov_visitor.h" #include "tools/gt_regioncov.h" typedef struct { unsigned long max_feature_dist; bool verbose; } RegionCovArguments; static GtOPrval parse_options(int *parsed_args, RegionCovArguments *arguments, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOption *o; GtOPrval oprval; gt_error_check(err); op = gt_option_parser_new("[option ...] GFF3_file", "Show which parts of the given sequence regions are " "covered by features."); /* -maxfeaturedist */ o = gt_option_new_ulong("maxfeaturedist", "set the maximum distance two " "features can have while still being in the same " "``cluster''", &arguments->max_feature_dist, 0); gt_option_parser_add_option(op, o); /* -v */ o = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, o); /* parse */ gt_option_parser_set_min_max_args(op, 1, 1); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } int gt_regioncov(int argc, const char **argv, GtError *err) { GtNodeVisitor *regioncov_visitor; GtNodeStream *gff3_in_stream; GtGenomeNode *gn; RegionCovArguments arguments; int parsed_args, had_err = 0; gt_error_check(err); /* option parsing */ switch (parse_options(&parsed_args, &arguments, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: return 0; } /* create gff3 input stream */ gt_assert(parsed_args < argc); gff3_in_stream = gt_gff3_in_stream_new_sorted(argv[parsed_args]); if (arguments.verbose) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); /* create region coverage visitor */ regioncov_visitor = gt_regioncov_visitor_new(arguments.max_feature_dist); /* pull the features through the stream and free them afterwards */ while (!(had_err = gt_node_stream_next(gff3_in_stream, &gn, err)) && gn) { had_err = gt_genome_node_accept(gn, regioncov_visitor, err); gt_genome_node_delete(gn); } /* show region coverage */ if (!had_err) gt_regioncov_visitor_show_coverage(regioncov_visitor); /* free */ gt_node_visitor_delete(regioncov_visitor); gt_node_stream_delete(gff3_in_stream); return had_err; } genometools-1.5.1/src/tools/gt_regioncov.h000066400000000000000000000017461211610345200206410ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_REGIONCOV_H #define GT_REGIONCOV_H /* the region coverage tool */ int gt_regioncov(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_sain.c000066400000000000000000000206751211610345200175750ustar00rootroot00000000000000/* Copyright (c) 2012 Stefan Kurtz Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/unused_api.h" #include "core/fa.h" #include "core/timer_api.h" #include "core/showtime.h" #include "core/logger.h" #include "tools/gt_sain.h" #include "match/sfx-sain.h" typedef struct { bool icheck, fcheck, verbose; GtStr *encseqfile, *plainseqfile, *dir; GtReadmode readmode; } GtSainArguments; static void* gt_sain_arguments_new(void) { GtSainArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->encseqfile = gt_str_new(); arguments->plainseqfile = gt_str_new(); arguments->dir = gt_str_new_cstr("fwd"); arguments->readmode = GT_READMODE_FORWARD; return arguments; } static void gt_sain_arguments_delete(void *tool_arguments) { GtSainArguments *arguments = tool_arguments; if (arguments != NULL) { gt_str_delete(arguments->encseqfile); gt_str_delete(arguments->plainseqfile); gt_str_delete(arguments->dir); gt_free(arguments); } } static GtOptionParser* gt_sain_option_parser_new(void *tool_arguments) { GtSainArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optionfcheck, *optionesq, *optionfile; gt_assert(arguments != NULL); /* init */ op = gt_option_parser_new("[option ...] [file]", /* XXX */ "Compute suffix array using induced " "suffix sorting."); gt_option_parser_set_mail_address(op,""); /* -esq */ optionesq = gt_option_new_string("esq", "specify encseq file", arguments->encseqfile, NULL); gt_option_parser_add_option(op, optionesq); /* -dir */ gt_encseq_options_add_readmode_option(op, arguments->dir); /* -file */ optionfile = gt_option_new_string("file", "specify filename", arguments->plainseqfile, NULL); gt_option_parser_add_option(op, optionfile); /* -icheck */ option = gt_option_new_bool("icheck", "intermediate check of all sorted arrays", &arguments->icheck, false); gt_option_parser_add_option(op, option); /* -fcheck */ optionfcheck = gt_option_new_bool("fcheck", "final check of suffix array", &arguments->fcheck, false); gt_option_parser_add_option(op, optionfcheck); gt_option_imply(optionfcheck, optionesq); gt_option_exclude(optionesq,optionfile); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); return op; } static int gt_sain_option_parser_check(int rest_argc, void *tool_arguments, GtError *err) { int retval; GtSainArguments *arguments = tool_arguments; if (rest_argc > 0) { gt_error_set(err,"%d superfluous argument%s", rest_argc,rest_argc > 1 ? "s" : ""); return -1; } retval = gt_readmode_parse(gt_str_get(arguments->dir), err); if (retval < 0) { return -1; } else { arguments->readmode = (GtReadmode) retval; return 0; } } static int gt_sain_checkmaxsequencelength(unsigned long len,bool forencseq, GtError *err) { unsigned long maxsequencelength; if (forencseq) { maxsequencelength = (unsigned long) (~GT_FIRSTBIT) - 1 - GT_COMPAREOFFSET; } else { maxsequencelength = (unsigned long) (~GT_FIRSTBIT) - 1; } if (len > maxsequencelength) { gt_error_set(err,"sequence of size %lu is too long: sain algorithm " "can only compute sequence of length up to %lu", len,maxsequencelength); return -1; } return 0; } typedef struct { GtTimer *timer; GtLogger *logger; } GtSainTimerandLogger; static GtSainTimerandLogger *gt_sain_timer_logger_new(bool verbose) { GtSainTimerandLogger *tl = gt_malloc(sizeof (*tl)); tl->timer = NULL; tl->logger = gt_logger_new(verbose,GT_LOGGER_DEFLT_PREFIX,stdout); if (gt_showtime_enabled()) { if (verbose) { tl->timer = gt_timer_new_with_progress_description( "allocate suftab and undef entries"); } else { tl->timer = gt_timer_new(); gt_timer_omit_last_stage(tl->timer); } gt_timer_start(tl->timer); } return tl; } static void gt_sain_timer_logger_delete(GtSainTimerandLogger *tl) { if (tl->timer != NULL) { gt_timer_show_progress_final(tl->timer, stdout); gt_timer_stop(tl->timer); gt_timer_delete(tl->timer); } gt_logger_delete(tl->logger); gt_free(tl); } static int gt_sain_runner(int argc, GT_UNUSED const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtSainArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments != NULL); gt_assert (argc >= parsed_args); if (parsed_args < argc) { gt_error_set(err,"superfluous arguments"); had_err = -1; } else { if (gt_str_length(arguments->encseqfile) > 0) { GtEncseqLoader *el = gt_encseq_loader_new(); GtEncseq *encseq = gt_encseq_loader_load(el,gt_str_get(arguments->encseqfile),err); if (encseq == NULL) { had_err = -1; } else { if (gt_sain_checkmaxsequencelength(gt_encseq_total_length(encseq),true, err) != 0) { had_err = -1; } else { if (!gt_alphabet_is_dna(gt_encseq_alphabet(encseq)) && (arguments->readmode == GT_READMODE_COMPL || arguments->readmode == GT_READMODE_REVCOMPL)) { gt_error_set(err,"option -dir cpl and -dir rcl is only " "possible for DNA sequences"); had_err = -1; } } if (!had_err) { GtSainTimerandLogger *tl = gt_sain_timer_logger_new(arguments->verbose); gt_sain_encseq_sortsuffixes(encseq, arguments->readmode, arguments->icheck, arguments->fcheck, tl->logger, tl->timer); gt_sain_timer_logger_delete(tl); } } gt_encseq_delete(encseq); gt_encseq_loader_delete(el); } if (gt_str_length(arguments->plainseqfile) > 0) { GtUchar *plainseq; size_t len; plainseq = gt_fa_mmap_read(gt_str_get(arguments->plainseqfile),&len,err); if (plainseq == NULL) { had_err = -1; } else { if (gt_sain_checkmaxsequencelength((unsigned long) len,false,err) != 0) { had_err = -1; } else { if (arguments->readmode != GT_READMODE_FORWARD) { gt_error_set(err,"option -dir and -file exclude each other"); had_err = -1; } } if (!had_err) { GtSainTimerandLogger *tl = gt_sain_timer_logger_new(arguments->verbose); gt_sain_plain_sortsuffixes(plainseq, (unsigned long) len, arguments->icheck, tl->logger, tl->timer); gt_sain_timer_logger_delete(tl); } } gt_fa_xmunmap(plainseq); } } return had_err; } GtTool* gt_sain(void) { return gt_tool_new(gt_sain_arguments_new, gt_sain_arguments_delete, gt_sain_option_parser_new, gt_sain_option_parser_check, gt_sain_runner); } genometools-1.5.1/src/tools/gt_sain.h000066400000000000000000000017111211610345200175700ustar00rootroot00000000000000/* Copyright (c) 2012 Stefan Kurtz Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SAIN_H #define GT_SAIN_H #include "core/tool_api.h" /* the sain tool */ GtTool* gt_sain(void); #endif genometools-1.5.1/src/tools/gt_sam_interface.c000066400000000000000000000130011211610345200214240ustar00rootroot00000000000000/* Copyright (c) 2011 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/alphabet_api.h" #include "core/ma.h" #include "core/unused_api.h" #include "extended/sam_alignment.h" #include "extended/samfile_iterator.h" #include "tools/gt_sam_interface.h" typedef struct { bool bool_is_sam; int lines; GtOption *ref_idxfile; GtStr *indexfilename; } GtSamInterfaceArguments; static void* gt_sam_interface_arguments_new(void) { GtSamInterfaceArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->indexfilename = gt_str_new(); return arguments; } static void gt_sam_interface_arguments_delete(void *tool_arguments) { GtSamInterfaceArguments *arguments = tool_arguments; if (!arguments) return; gt_option_delete(arguments->ref_idxfile); gt_str_delete(arguments->indexfilename); gt_free(arguments); } static GtOptionParser* gt_sam_interface_option_parser_new(void *tool_arguments) { GtSamInterfaceArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[options] filename", "This tool exists solely as an " "test for the interface."); /* -sam */ option = gt_option_new_bool("sam", "filetype is sam, default is bam", &arguments->bool_is_sam, false); gt_option_parser_add_option(op, option); /* -idxfile */ option = gt_option_new_filename("idxfile", "file containing reference info", arguments->indexfilename); gt_option_parser_add_option(op, option); arguments->ref_idxfile = gt_option_ref(option); /* -lines */ option = gt_option_new_int("lines", "number of lines to print" " leave undefined for all", &arguments->lines, -1); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 1U, 1U); return op; } static int gt_sam_interface_arguments_check(GT_UNUSED int rest_argc, GT_UNUSED void *tool_arguments, GT_UNUSED GtError *err) { GT_UNUSED GtSamInterfaceArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); gt_assert(rest_argc == 1); return had_err; } static int gt_sam_interface_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtSamInterfaceArguments *arguments = tool_arguments; int had_err = 0, count_out = 0; GtSamfileIterator *sa_iter; GtSamAlignment *sa_align; GtAlphabet *alpha = gt_alphabet_new_dna(); gt_error_check(err); gt_assert(arguments); if (arguments->bool_is_sam) { if (gt_option_is_set(arguments->ref_idxfile)) sa_iter = gt_samfile_iterator_new_sam(argv[parsed_args], alpha, gt_str_get(arguments->indexfilename), err); else sa_iter = gt_samfile_iterator_new_sam(argv[parsed_args], alpha, NULL, err); } else { sa_iter = gt_samfile_iterator_new_bam(argv[parsed_args], alpha, err); } while (gt_samfile_iterator_next(sa_iter, &sa_align) > 0 && arguments->lines - count_out) { uint16_t cig_len, idx; cig_len = gt_sam_alignment_cigar_length(sa_align); printf("%s\t%d\t%s\t", gt_sam_alignment_identifier(sa_align), (int) gt_sam_alignment_flag(sa_align), gt_samfile_iterator_reference_name(sa_iter, gt_sam_alignment_ref_num(sa_align))); if (gt_sam_alignment_is_unmapped(sa_align)) printf("*"); else { for (idx = 0; idx < cig_len; idx++) { printf("%d%c", (int) gt_sam_alignment_cigar_i_length(sa_align, idx), gt_sam_alignment_cigar_i_operation(sa_align, idx)); } } printf("\t"); gt_alphabet_decode_seq_to_fp(alpha, stdout, gt_sam_alignment_sequence(sa_align), gt_sam_alignment_read_length(sa_align)); printf("\t%s\n", (char *) gt_sam_alignment_qualitystring(sa_align)); count_out++; } gt_samfile_iterator_delete(sa_iter); gt_alphabet_delete(alpha); return had_err; } GtTool* gt_sam_interface(void) { return gt_tool_new(gt_sam_interface_arguments_new, gt_sam_interface_arguments_delete, gt_sam_interface_option_parser_new, gt_sam_interface_arguments_check, gt_sam_interface_runner); } genometools-1.5.1/src/tools/gt_sam_interface.h000066400000000000000000000017611211610345200214430ustar00rootroot00000000000000/* Copyright (c) 2011 Dirk Willrodt Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SAM_INTERFACE_H #define GT_SAM_INTERFACE_H #include "core/tool_api.h" /* the sam_interface tool */ GtTool* gt_sam_interface(void); #endif genometools-1.5.1/src/tools/gt_script_filter.c000066400000000000000000000131561211610345200215100ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/unused_api.h" #include "extended/script_filter.h" #include "tools/gt_script_filter.h" typedef struct { bool oneline, showinfo, scriptname, validate; } GtScriptFilterArguments; static void* gt_script_filter_arguments_new(void) { GtScriptFilterArguments *arguments = gt_calloc(1, sizeof *arguments); return arguments; } static void gt_script_filter_arguments_delete(void *tool_arguments) { GtScriptFilterArguments *arguments = tool_arguments; if (!arguments) return; gt_free(arguments); } static GtOptionParser* gt_script_filter_option_parser_new(void *tool_arguments) { GtScriptFilterArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [script file(s)]", "Get info about and validate Lua script filters."); /* -showinfo */ option = gt_option_new_bool("showinfo", "show information about filter", &arguments->showinfo, true); gt_option_parser_add_option(op, option); /* -validate */ option = gt_option_new_bool("validate", "validate filter function", &arguments->validate, true); gt_option_parser_add_option(op, option); /* -oneline */ option = gt_option_new_bool("oneline", "show compact information on one line", &arguments->oneline, false); gt_option_parser_add_option(op, option); /* -scriptname */ option = gt_option_new_bool("scriptname", "show script name", &arguments->scriptname, true); gt_option_parser_add_option(op, option); gt_option_parser_set_min_args(op, 1); return op; } static int gt_script_filter_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { GtScriptFilterArguments *arguments = tool_arguments; int had_err = 0; unsigned long i; gt_error_check(err); gt_assert(arguments); for (i = parsed_args; !had_err && i < argc; i++) { GtScriptFilter *sf = NULL; sf = gt_script_filter_new(argv[i], err); if (!sf) { had_err = -1; break; } else { if (arguments->showinfo) { if (arguments->oneline) { const char *name, *version, *author; if (!(name = gt_script_filter_get_name(sf, err))) had_err = -1; if (!had_err) { if (!(version = gt_script_filter_get_version(sf, err))) had_err = -1; } if (!had_err) { if (!(author = gt_script_filter_get_author(sf, err))) had_err = -1; } if (!had_err) { printf("%s v%s (by %s)\n", name, version, author); } } else { const char *out; if (arguments->scriptname) printf("script name:\t%s\n", argv[i]); out = gt_script_filter_get_name(sf, err); if (out) printf("filter name:\t%s\n", out); else had_err = -1; if (!had_err) { out = gt_script_filter_get_version(sf, err); if (out) printf("version:\t%s\n", out); else had_err = -1; } if (!had_err) { out = gt_script_filter_get_author(sf, err); if (out) printf("author:\t\t%s\n", out); else had_err = -1; } if (!had_err) { out = gt_script_filter_get_email(sf, err); if (out) printf("email:\t\t%s\n", out); else had_err = -1; } if (!had_err) { out = gt_script_filter_get_description(sf, err); if (out) printf("description:\t%s\n", out); else had_err = -1; } if (i != argc-1) printf("\n"); } } if (arguments->validate) { GT_UNUSED bool select; GtStr *seqid = gt_str_new_cstr("foo"); GtFeatureNode *fn = (GtFeatureNode*) gt_feature_node_new(seqid, "gene", 23, 42, GT_STRAND_FORWARD); had_err = gt_script_filter_run(sf, fn, &select, err); gt_genome_node_delete((GtGenomeNode*) fn); gt_str_delete(seqid); } gt_script_filter_delete(sf); } } return had_err; } GtTool* gt_script_filter(void) { return gt_tool_new(gt_script_filter_arguments_new, gt_script_filter_arguments_delete, gt_script_filter_option_parser_new, NULL, gt_script_filter_runner); } genometools-1.5.1/src/tools/gt_script_filter.h000066400000000000000000000017651211610345200215200ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SCRIPT_FILTER_H #define GT_SCRIPT_FILTER_H #include "core/tool_api.h" /* the script_filter tool */ GtTool* gt_script_filter(void); #endif genometools-1.5.1/src/tools/gt_select.c000066400000000000000000000370521211610345200201170ustar00rootroot00000000000000/* Copyright (c) 2005-2012 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "extended/genome_node.h" #include "extended/gff3_defines.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/gff3_output.h" #include "extended/gff3_parser.h" #include "extended/gff3_visitor.h" #include "extended/gtdatahelp.h" #include "extended/select_stream.h" #include "extended/targetbest_select_stream.h" #include "tools/gt_select.h" #define GT_STRAND_OPT "strand" #define TARGETGT_STRAND_OPT "targetstrand" typedef struct { bool verbose, has_CDS, targetbest; GtStr *seqid, *source, *gt_strand_char, *targetgt_strand_char; GtRange contain_range, overlap_range; GtStrand strand, targetstrand; unsigned long max_gene_length, max_gene_num, feature_num; double min_gene_score, max_gene_score, min_average_splice_site_prob, single_intron_factor; GtOutputFileInfo *ofi; GtFile *outfp; GtStrArray *filter_files; GtStr *filter_logic; GtStr *dropped_file; } SelectArguments; static void* gt_select_arguments_new(void) { SelectArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->seqid = gt_str_new(); arguments->source = gt_str_new(); arguments->gt_strand_char = gt_str_new(); arguments->strand = GT_NUM_OF_STRAND_TYPES; arguments->targetgt_strand_char = gt_str_new(); arguments->targetstrand = GT_NUM_OF_STRAND_TYPES; arguments->ofi = gt_output_file_info_new(); arguments->filter_files = gt_str_array_new(); arguments->filter_logic = gt_str_new(); arguments->dropped_file = gt_str_new(); return arguments; } static void gt_select_arguments_delete(void *tool_arguments) { SelectArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_str_delete(arguments->targetgt_strand_char); gt_str_delete(arguments->gt_strand_char); gt_str_delete(arguments->source); gt_str_delete(arguments->seqid); gt_str_array_delete(arguments->filter_files); gt_str_delete(arguments->filter_logic); gt_str_delete(arguments->dropped_file); gt_free(arguments); } static GtOptionParser* gt_select_option_parser_new(void *tool_arguments) { SelectArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *contain_option, *overlap_option, *minaveragessp_option, *singleintron_option, *optiondroppedfile; gt_assert(arguments); static const char *filter_logic[] = { "AND", "OR", NULL }; /* init */ op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Select certain features (specified by the used " "options) from given GFF3 file(s)."); /* -seqid */ option = gt_option_new_string("seqid", "select feature with the given " "sequence ID (all comments are selected). ", arguments->seqid, NULL); gt_option_parser_add_option(op, option); /* -source */ option = gt_option_new_string("source", "select feature with the given " "source (the source is column 2 in regular " "GFF3 lines)" , arguments->source, NULL); gt_option_parser_add_option(op, option); /* -contain */ contain_option = gt_option_new_range("contain", "select all features which " "are contained in the given range", &arguments->contain_range, NULL); gt_option_parser_add_option(op, contain_option); /* -overlap */ overlap_option = gt_option_new_range("overlap", "select all features which " "do overlap with the given range", &arguments->overlap_range, NULL); gt_option_parser_add_option(op, overlap_option); /* -strand */ option = gt_option_new_string(GT_STRAND_OPT, "select all top-level features" "(i.e., features without parents) whose strand " "equals the given one (must be one of '" GT_STRAND_CHARS"')", arguments->gt_strand_char, NULL); gt_option_parser_add_option(op, option); /* -targetstrand */ option = gt_option_new_string(TARGETGT_STRAND_OPT, "select all top-level " "features (i.e., features without parents) " "which have exactly one target attribute whose " "strand equals the given one (must be one of '" GT_STRAND_CHARS"')", arguments->targetgt_strand_char, NULL); gt_option_parser_add_option(op, option); /* -targetbest */ option = gt_option_new_bool("targetbest", "if multiple top-level features " "(i.e., features without parents) with exactly " "one target attribute have the same target_id, " "keep only the feature with the best score. If " "-"TARGETGT_STRAND_OPT" is used at the same time, " "this option is applied after " "-"TARGETGT_STRAND_OPT".\n" "Memory consumption is proportional to the input " "file size(s).", &arguments->targetbest, false); gt_option_parser_add_option(op, option); /* -hascds */ option = gt_option_new_bool("hascds", "select all top-level features which " "do have a CDS child", &arguments->has_CDS, false); gt_option_parser_add_option(op, option); /* -maxgenelength */ option = gt_option_new_ulong_min("maxgenelength", "select genes up to the " "given maximum length", &arguments->max_gene_length, GT_UNDEF_ULONG, 1); gt_option_parser_add_option(op, option); /* -maxgenenum */ option = gt_option_new_ulong("maxgenenum", "select the first genes up to the " "given maximum number", &arguments->max_gene_num, GT_UNDEF_ULONG); gt_option_parser_add_option(op, option); /* -mingenescore */ option = gt_option_new_double("mingenescore", "select genes with the given " "minimum score", &arguments->min_gene_score, GT_UNDEF_DOUBLE); gt_option_parser_add_option(op, option); /* -maxgenescore */ option = gt_option_new_double("maxgenescore", "select genes with the given " "maximum score", &arguments->max_gene_score, GT_UNDEF_DOUBLE); gt_option_parser_add_option(op, option); /* -minaveragessp */ minaveragessp_option = gt_option_new_probability("minaveragessp", "set the minimum average splice site probability", &arguments->min_average_splice_site_prob, GT_UNDEF_DOUBLE); gt_option_parser_add_option(op, minaveragessp_option); /* -singleintronfactor */ singleintron_option = gt_option_new_double_min("singleintronfactor", "factor to multiplicate the average splice site " "probability with for single introns before " "comparing it to the minimum average splice site " "probability", &arguments->single_intron_factor, 1.0, 1.0); gt_option_is_development_option(singleintron_option); gt_option_parser_add_option(op, singleintron_option); /* -featurenum */ option = gt_option_new_ulong_min("featurenum", "select feature tree occurring " "at given position in input", &arguments->feature_num, GT_UNDEF_ULONG, 1); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -filter_files */ option = gt_option_new_filename_array("rule_files", "specify Lua files to be used " "for selection", arguments->filter_files); gt_option_parser_add_option(op, option); /* -filter_logic */ option = gt_option_new_choice("rule_logic", "select how multiple Lua " "files should be combined\nchoose from AND|OR", arguments->filter_logic, filter_logic[0], filter_logic); gt_option_parser_add_option(op, option); /* -nh_file */ optiondroppedfile = gt_option_new_filename("dropped_file", "save non-selected features to " "file", arguments->dropped_file); gt_option_parser_add_option(op, optiondroppedfile); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* option exclusions */ gt_option_exclude(contain_option, overlap_option); /* option implications */ gt_option_imply(singleintron_option, minaveragessp_option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); return op; } static int process_gt_strand_arg(GtStr *gt_strand_char, GtStrand *strand, const char *optstr, GtError *err) { int had_err = 0; gt_error_check(err); if (gt_str_length(gt_strand_char)) { GtStrand tmpstrand = gt_strand_get(gt_str_get(gt_strand_char)[0]); if ((gt_str_length(gt_strand_char) > 1) || (tmpstrand == GT_NUM_OF_STRAND_TYPES)) { gt_error_set(err, "argument to option -%s must be one of '" GT_STRAND_CHARS"'", optstr); had_err = -1; } if (!had_err) *strand = tmpstrand; } return had_err; } static int gt_select_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError *err) { SelectArguments *arguments = tool_arguments; int had_err; gt_error_check(err); gt_assert(arguments); had_err = process_gt_strand_arg(arguments->gt_strand_char, &arguments->strand, GT_STRAND_OPT, err); if (!had_err) { had_err = process_gt_strand_arg(arguments->targetgt_strand_char, &arguments->targetstrand, TARGETGT_STRAND_OPT, err); } return had_err; } static int print_to_file_drophandler(GtGenomeNode *gn, void *data, GtError *err) { GtNodeVisitor *v; gt_assert(gn && data); v = (GtNodeVisitor*) data; return gt_genome_node_accept(gn, v, err); } static int default_drophandler(GT_UNUSED GtGenomeNode *gn, GT_UNUSED void *data, GT_UNUSED GtError *err) { gt_assert(gn); return 0; } static int gt_select_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { SelectArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream, *select_stream, *targetbest_select_stream = NULL, *gff3_out_stream; int had_err; GtFile *drop_file = NULL; GtNodeVisitor *gff3outvis = NULL; gt_error_check(err); gt_assert(arguments); /* create a gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); if (arguments->verbose && arguments->outfp) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); /* create a filter stream */ select_stream = gt_select_stream_new(gff3_in_stream, arguments->seqid, arguments->source, &arguments->contain_range, &arguments->overlap_range, arguments->strand, arguments->targetstrand, arguments->has_CDS, arguments->max_gene_length, arguments->max_gene_num, arguments->min_gene_score, arguments->max_gene_score, arguments->min_average_splice_site_prob, arguments->feature_num, arguments->filter_files, arguments->filter_logic, err); if (select_stream) { GtSelectStream *fs = (GtSelectStream*) select_stream; if (gt_str_length(arguments->dropped_file) > 0) { drop_file = gt_file_new(gt_str_get(arguments->dropped_file), "w", err); gff3outvis = gt_gff3_visitor_new(drop_file); gt_select_stream_set_drophandler(fs, print_to_file_drophandler, (void*) gff3outvis); } else { gt_select_stream_set_drophandler(fs, default_drophandler, NULL); } gt_select_stream_set_single_intron_factor(select_stream, arguments->single_intron_factor); if (arguments->targetbest) targetbest_select_stream = gt_targetbest_select_stream_new(select_stream); /* create a gff3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(arguments->targetbest ? targetbest_select_stream : select_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(select_stream); gt_node_stream_delete(targetbest_select_stream); } else { had_err = -1; } gt_file_delete(drop_file); gt_node_visitor_delete(gff3outvis); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool* gt_select(void) { return gt_tool_new(gt_select_arguments_new, gt_select_arguments_delete, gt_select_option_parser_new, gt_select_arguments_check, gt_select_runner); } genometools-1.5.1/src/tools/gt_select.h000066400000000000000000000017351211610345200201230ustar00rootroot00000000000000/* Copyright (c) 2005-2011 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SELECT_H #define GT_SELECT_H #include "core/tool_api.h" /* the select tool */ GtTool* gt_select(void); #endif genometools-1.5.1/src/tools/gt_seq.c000066400000000000000000000153431211610345200174270ustar00rootroot00000000000000/* Copyright (c) 2006-2010 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/bioseq.h" #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/undef_api.h" #include "tools/gt_seq.h" typedef struct { bool recreate, showfasta, gc_content, stat, seqlengthdistri; unsigned long showseqnum, width; GtStr *reader; GtOutputFileInfo *ofi; GtFile *outfp; } SeqArguments; static void* gt_seq_arguments_new(void) { SeqArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->reader = gt_str_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_seq_arguments_delete(void *tool_arguments) { SeqArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_str_delete(arguments->reader); gt_free(arguments); } static GtOptionParser* gt_seq_option_parser_new(void *tool_arguments) { SeqArguments *arguments = tool_arguments; GtOption *option, *option_recreate, *option_showfasta, *option_showseqnum, *option_width, *option_stat; GtOptionParser *op; gt_assert(arguments); op = gt_option_parser_new("[option ...] sequence_file [...]", "Parse the given sequence file(s) and construct " "the corresponding index files."); /* -recreate */ option_recreate = gt_option_new_bool("recreate", "recreate index files, even " "if they exist already", &arguments->recreate, false); gt_option_parser_add_option(op, option_recreate); /* -showfasta */ option_showfasta = gt_option_new_bool("showfasta", "show all sequences (in " "FASTA format)", &arguments->showfasta, false); gt_option_parser_add_option(op, option_showfasta); /* -showseqnum */ option_showseqnum = gt_option_new_ulong_min("showseqnum", "show sequence " "with given number (in FASTA " "format)", &arguments->showseqnum, GT_UNDEF_ULONG, 1); gt_option_parser_add_option(op, option_showseqnum); /* -gc-content */ option = gt_option_new_bool("gc-content", "print GC-content (for DNA files)", &arguments->gc_content, false); gt_option_parser_add_option(op, option); /* -stat */ option_stat = gt_option_new_bool("stat", "show sequence statistics", &arguments->stat, false); gt_option_parser_add_option(op, option_stat); /* -seqlengthdistri */ option = gt_option_new_bool("seqlengthdistri", "show sequence length " "distribution", &arguments->seqlengthdistri, false); gt_option_parser_add_option(op, option); /* -width */ option_width = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, option_width); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); /* option implications */ gt_option_imply_either_2(option_width, option_showfasta, option_showseqnum); /* option exclusions */ gt_option_exclude(option_showfasta, option_stat); gt_option_exclude(option_showfasta, option_showseqnum); gt_option_exclude(option_showseqnum, option_stat); /* set minimal arguments */ gt_option_parser_set_min_args(op, 1); return op; } static int gt_seq_arguments_check(int rest_argc, void *tool_arguments, GtError *err) { SeqArguments *arguments = tool_arguments; gt_error_check(err); gt_assert(arguments); /* option -showseqnum makes only sense if we got a single sequence file */ if (arguments->showseqnum != GT_UNDEF_ULONG && rest_argc > 1) { gt_error_set(err, "option '-showseqnum' makes only sense with a single " "sequence_file"); return -1; } return 0; } static int gt_seq_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { SeqArguments *arguments = tool_arguments; GtBioseq *bioseq; int arg = parsed_args, had_err = 0; gt_error_check(err); gt_assert(tool_arguments); while (!had_err && arg < argc) { /* bioseq construction */ if (arguments->recreate) bioseq = gt_bioseq_new_recreate(argv[arg], err); else bioseq = gt_bioseq_new(argv[arg], err); if (!bioseq) had_err = -1; /* output */ if (!had_err && arguments->showfasta) gt_bioseq_show_as_fasta(bioseq, arguments->width, arguments->outfp); if (!had_err && arguments->showseqnum != GT_UNDEF_ULONG) { if (arguments->showseqnum > gt_bioseq_number_of_sequences(bioseq)) { gt_error_set(err, "argument '%lu' to option '-showseqnum' is too " "large. The sequence index contains only '%lu' sequences.", arguments->showseqnum, gt_bioseq_number_of_sequences(bioseq)); had_err = -1; } if (!had_err) { gt_bioseq_show_sequence_as_fasta(bioseq, arguments->showseqnum - 1, arguments->width, arguments->outfp); } } if (!had_err && arguments->gc_content) gt_bioseq_show_gc_content(bioseq, arguments->outfp); if (!had_err && arguments->stat) gt_bioseq_show_stat(bioseq, arguments->outfp); if (!had_err && arguments->seqlengthdistri) gt_bioseq_show_seqlengthdistri(bioseq, arguments->outfp); /* free */ gt_bioseq_delete(bioseq); arg++; } return had_err; } GtTool* gt_seq(void) { return gt_tool_new(gt_seq_arguments_new, gt_seq_arguments_delete, gt_seq_option_parser_new, gt_seq_arguments_check, gt_seq_runner); } genometools-1.5.1/src/tools/gt_seq.h000066400000000000000000000017261211610345200174340ustar00rootroot00000000000000/* Copyright (c) 2006-2010 Gordon Gremme Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQ_H #define GT_SEQ_H #include "core/tool_api.h" /* the sequence tool */ GtTool* gt_seq(void); #endif genometools-1.5.1/src/tools/gt_seqcorrect.c000066400000000000000000000511251211610345200210070ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/fa.h" #include "core/ma.h" #include "core/unused_api.h" #include "core/option_api.h" #include "core/encseq_api.h" #include "core/log_api.h" #include "core/logger.h" #include "core/intbits.h" #include "core/minmax.h" #include "core/showtime.h" #include "core/undef_api.h" #ifdef GT_THREADS_ENABLED #include "core/thread_api.h" #endif #include "core/warning_api.h" #include "core/xposix.h" #include "tools/gt_seqcorrect.h" #include "match/reads2twobit.h" #include "match/rdj-contfinder.h" #include "match/rdj-twobitenc-editor.h" #include "match/randomcodes.h" #include "match/randomcodes-correct.h" #include "tools/gt_seqcorrect.h" #define GT_SEQCORRECT_FILESUFFIX ".cor" typedef struct { bool usefirstcodes, verbose, quiet, onlyaccum, onlyallrandomcodes, radixlarge, checksuftab, usemaxdepth; unsigned int correction_kmersize, samplingfactor, trusted_count, numofparts, radixparts, addbscache_depth, forcek; unsigned long maximumspace; GtStr *encseqinput, *memlimitarg, *indexname; GtOption *refoptionmemlimit; GtStrArray *db; bool phred64; unsigned long maxlow; unsigned int lowqual; } GtSeqcorrectArguments; static void* gt_seqcorrect_arguments_new(void) { GtSeqcorrectArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->radixlarge = false; arguments->numofparts = 0; arguments->radixparts = 1U; arguments->encseqinput = gt_str_new(); arguments->indexname = gt_str_new(); arguments->memlimitarg = gt_str_new(); arguments->maximumspace = 0UL; /* in bytes */ arguments->db = gt_str_array_new(); return arguments; } static void gt_seqcorrect_arguments_delete(void *tool_arguments) { GtSeqcorrectArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->encseqinput); gt_str_delete(arguments->indexname); gt_option_delete(arguments->refoptionmemlimit); gt_str_delete(arguments->memlimitarg); gt_str_array_delete(arguments->db); gt_free(arguments); } static GtOptionParser* gt_seqcorrect_option_parser_new(void *tool_arguments) { GtSeqcorrectArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optionparts, *optionmemlimit, *q_option, *v_option, *db_option, *maxlow_option; gt_assert(arguments); /* init */ op = gt_option_parser_new("(-ii |-db ) " "-k [option ...]", "K-mer based sequence correction."); /* -db */ db_option = gt_option_new_filename_array("db", GT_READS2TWOBIT_LIBSPEC_HELPMSG, arguments->db); gt_option_hide_default(db_option); gt_option_parser_add_option(op, db_option); /* -indexname */ option = gt_option_new_string("indexname", "specify the indexname to use " "for the input\ndefault: first argument of the -db option", arguments->indexname, NULL); gt_option_hide_default(option); gt_option_parser_add_option(op, option); /* -ii */ option = gt_option_new_string("ii", "specify the input enseq index", arguments->encseqinput, NULL); gt_option_is_mandatory_either(option, db_option); gt_option_exclude(option, db_option); gt_option_parser_add_option(op, option); /* -k */ option = gt_option_new_uint_min("k", "specify the kmer size for the " "correction algorithm", &arguments->correction_kmersize, 31U, 2U); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); /* -c */ option = gt_option_new_uint_min("c", "specify the trusted count threshold", &arguments->trusted_count, 3U, 2U); gt_option_parser_add_option(op, option); /* -sf */ option = gt_option_new_uint_min("sf", "specify the sampling factor", &arguments->samplingfactor, 50U, 1U); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -parts */ optionparts = gt_option_new_uint("parts", "specify the number of parts", &arguments->numofparts, 0U); gt_option_parser_add_option(op, optionparts); /* -memlimit */ optionmemlimit = gt_option_new_string("memlimit", "specify maximal amount of memory to be used during " "index construction (in bytes, the keywords 'MB' " "and 'GB' are allowed)", arguments->memlimitarg, NULL); gt_option_parser_add_option(op, optionmemlimit); gt_option_exclude(optionmemlimit, optionparts); arguments->refoptionmemlimit = gt_option_ref(optionmemlimit); /* -forcek */ option = gt_option_new_uint("forcek", "specify the kmersize for the bucket " "keys", &arguments->forcek, 0); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); /* -usefirstcodes */ option = gt_option_new_bool("usefirstcodes", "use first codes instead of " "random sampled codes", &arguments->usefirstcodes, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -v */ v_option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, v_option); /* -q */ q_option = gt_option_new_bool("q", "suppress standard output messages", &arguments->quiet, false); gt_option_exclude(q_option, v_option); gt_option_parser_add_option(op, q_option); /* -maxlow */ maxlow_option = gt_option_new_ulong("maxlow", "maximal number of low-quality positions in a read\n" "default: infinite", &arguments->maxlow, GT_UNDEF_ULONG); gt_option_hide_default(maxlow_option); gt_option_is_extended_option(maxlow_option); gt_option_parser_add_option(op, maxlow_option); /* -lowqual */ option = gt_option_new_uint_max("lowqual", "maximal quality for a position to be considered low-quality", &arguments->lowqual, 3U, 127U); gt_option_is_extended_option(option); gt_option_imply(option, maxlow_option); gt_option_parser_add_option(op, option); /* -phred64 */ option = gt_option_new_bool("phred64", "use phred64 scores for FastQ format", &arguments->phred64, false); gt_option_is_extended_option(option); gt_option_parser_add_option(op, option); /* -usemaxdepth */ option = gt_option_new_bool("usemaxdepth", "use maxdepth in sortremaining", &arguments->usemaxdepth, true); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -checksuftab */ option = gt_option_new_bool("checksuftab", "check the suffix table", &arguments->checksuftab, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -onlyaccum */ option = gt_option_new_bool("onlyaccum", "only accumulate codes", &arguments->onlyaccum, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -onlyallrandomcodes */ option = gt_option_new_bool("onlyallrandomcodes", "only determines allcodes", &arguments->onlyallrandomcodes, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -addbscachedepth */ option = gt_option_new_uint("addbscachedepth", "only determines allcodes", &arguments->addbscache_depth, 5U); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -radixlarge */ option = gt_option_new_bool("radixlarge", "use large tables for radixsort", &arguments->radixlarge, false); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); /* -radixparts */ option = gt_option_new_uint("radixparts", "specify the number of parts " "for radixsort", &arguments->radixparts, 1U); gt_option_parser_add_option(op, option); gt_option_is_development_option(option); gt_option_parser_set_max_args(op, 0); return op; } static bool gt_seqcorrect_bucketkey_kmersize(GtSeqcorrectArguments *arguments, unsigned int *kmersize, GtError *err) { bool haserr = false; gt_assert(kmersize != NULL); if (arguments->forcek > 0) { *kmersize = arguments->forcek; if (*kmersize >= arguments->correction_kmersize) { gt_error_set(err,"argument %u to option -forcek must be < " "correction kmersize (-k)", *kmersize); haserr = true; } else if (*kmersize > (unsigned int)GT_UNITSIN2BITENC) { gt_error_set(err, "argument %u to option -forcek > %u (machine word size/2)", *kmersize, (unsigned int)GT_UNITSIN2BITENC); haserr = true; } } else { gt_assert(arguments->correction_kmersize > 1U); *kmersize = MIN((unsigned int) GT_UNITSIN2BITENC, arguments->correction_kmersize - 1); } gt_log_log("bucketkey kmersize=%u", *kmersize); gt_assert(*kmersize > 0); return haserr; } static int gt_seqcorrect_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError *err) { GtSeqcorrectArguments *arguments = tool_arguments; bool haserr = false; gt_error_check(err); if (!haserr && gt_option_is_set(arguments->refoptionmemlimit)) { if (gt_option_parse_spacespec(&arguments->maximumspace, "memlimit", arguments->memlimitarg, err) != 0) { haserr = true; } if (!haserr && !gt_ma_bookkeeping_enabled()) { gt_error_set(err, "option '-memlimit' requires " "GT_MEM_BOOKKEEPING=on"); haserr = true; } } #ifdef GT_THREADS_ENABLED if (!haserr) { if (gt_jobs > 1 && gt_ma_bookkeeping_enabled()) { gt_error_set(err, "gt option '-j' and GT_MEM_BOOKKEEPING=on " "are incompatible"); haserr = true; } } #endif return haserr ? -1 : 0; } static int gt_seqcorrect_apply_corrections(GtEncseq *encseq, const char *indexname, const unsigned int threads, GtError *err) { bool haserr = false; GtTwobitencEditor *editor; unsigned int threadcount; editor = gt_twobitenc_editor_new(encseq, indexname, err); if (editor == NULL) haserr = true; gt_log_log("number of correction lists: %u", threads); for (threadcount = 0; !haserr && threadcount < threads; threadcount++) { FILE *corrections; GtStr *filename; filename = gt_str_new_cstr(indexname); gt_str_append_char(filename, '.'); gt_str_append_uint(filename, threadcount); gt_str_append_cstr(filename, GT_SEQCORRECT_FILESUFFIX); corrections = gt_fa_fopen(gt_str_get(filename), "r", err); gt_log_log("apply corrections list %s.%u.%s", indexname, threadcount, GT_SEQCORRECT_FILESUFFIX); if (corrections == NULL) haserr = true; else { unsigned long pos; GtUchar newchar; size_t retval; while ((retval = fread(&pos, sizeof (pos), (size_t)1, corrections)) == (size_t)1) { newchar = (GtUchar)(pos & 3UL); pos >>= 2; gt_twobitenc_editor_edit(editor, pos, newchar); } if (ferror(corrections) != 0) { gt_error_set(err, "error by reading file %s", gt_str_get(filename)); haserr = true; } gt_fa_fclose(corrections); } gt_str_delete(filename); } gt_twobitenc_editor_delete(editor); return haserr ? -1 : 0; } static int gt_seqcorrect_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtSeqcorrectArguments *arguments = tool_arguments; GtEncseqLoader *el = NULL; GtEncseq *encseq = NULL; GtTimer *timer = NULL; GtLogger *default_logger, *verbose_logger; bool haserr = false; gt_error_check(err); gt_assert(arguments); if (gt_showtime_enabled()) { timer = gt_timer_new_with_progress_description("for initialization"); gt_timer_show_cpu_time_by_progress(timer); gt_timer_start(timer); } default_logger = gt_logger_new(!arguments->quiet, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(default_logger, "gt seqcorrect"); verbose_logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); gt_logger_log(verbose_logger, "verbose output enabled"); if (gt_str_array_size(arguments->db) != 0) { GtReads2Twobit *r2t; unsigned long i; bool autoindexname = false; gt_logger_log(verbose_logger, "input is a list of libraries"); if (gt_str_length(arguments->indexname) == 0) { autoindexname = true; gt_str_append_cstr(arguments->indexname, gt_str_array_get(arguments->db, 0)); } gt_logger_log(verbose_logger, "indexname: %s [%s]", gt_str_get(arguments->indexname), autoindexname ? "first input library" : "user-specified"); r2t = gt_reads2twobit_new(arguments->indexname); if (arguments->phred64) gt_reads2twobit_use_phred64(r2t); if (arguments->maxlow != GT_UNDEF_ULONG) gt_reads2twobit_set_quality_filter(r2t, arguments->maxlow, (char)arguments->lowqual); for (i = 0; i < gt_str_array_size(arguments->db) && !haserr; i++) { GtStr *dbentry = gt_str_array_get_str(arguments->db, i); if (gt_reads2twobit_add_library(r2t, dbentry, err) != 0) haserr = true; } if (!haserr) { if (gt_reads2twobit_encode(r2t, err) != 0) haserr = true; } gt_assert(gt_str_length(arguments->encseqinput) == 0); gt_str_append_cstr(arguments->encseqinput, gt_str_get(arguments->indexname)); if (!haserr) { unsigned long nofreads_valid, nofreads_invalid, nofreads_input, tlen_valid; bool varlen; nofreads_valid = gt_reads2twobit_nofseqs(r2t); nofreads_invalid = gt_reads2twobit_nof_invalid_seqs(r2t); nofreads_input = nofreads_valid + nofreads_invalid; tlen_valid = gt_reads2twobit_total_seqlength(r2t) - gt_reads2twobit_nofseqs(r2t); gt_logger_log(default_logger, "number of reads in original read set " "= %lu", nofreads_input); varlen = (gt_reads2twobit_seqlen_eqlen(r2t) == 0); if (varlen) gt_logger_log(verbose_logger, "read length = variable [%lu..%lu]", gt_reads2twobit_seqlen_min(r2t), gt_reads2twobit_seqlen_max(r2t)); else gt_logger_log(verbose_logger, "read length = %lu", gt_reads2twobit_seqlen_eqlen(r2t) - 1UL); gt_logger_log(verbose_logger, "total length of original read set = %lu", tlen_valid + gt_reads2twobit_invalid_seqs_totallength(r2t)); gt_logger_log(verbose_logger, "low-quality reads = %lu " "[%.2f %% of input]", nofreads_invalid, (float)nofreads_invalid * 100 / (float)nofreads_input); if (!arguments->verbose) gt_logger_log(default_logger, "low-quality reads = %lu", nofreads_invalid); if (!haserr) { if (gt_reads2twobit_write_encseq(r2t, err) != 0) haserr = true; if (!haserr) { gt_logger_log(verbose_logger, "number of reads in output read set = %lu", nofreads_valid); gt_logger_log(verbose_logger, "total length of output read set = %lu", tlen_valid); gt_logger_log(verbose_logger, "read set saved as GtEncseq: %s.%s", gt_str_get(arguments->indexname), varlen ? "(esq|ssp)" : "esq"); } } } gt_reads2twobit_delete(r2t); } else { gt_logger_log(verbose_logger, "input is an encseq: %s", gt_str_get(arguments->encseqinput)); } if (!haserr) { el = gt_encseq_loader_new(); gt_encseq_loader_drop_description_support(el); gt_encseq_loader_disable_autosupport(el); encseq = gt_encseq_loader_load(el, gt_str_get(arguments->encseqinput), err); if (encseq == NULL) { haserr = true; } if (!haserr) { if (gt_encseq_mirror(encseq, err) != 0) { haserr = true; } if (!haserr && gt_encseq_has_md5_support(encseq)) { GtStr *md5path = gt_str_clone(arguments->encseqinput); gt_str_append_cstr(md5path, GT_MD5TABFILESUFFIX); gt_xunlink(gt_str_get(md5path)); gt_warning("MD5 support detected -- sequence correction will " "invalidate MD5 table, permanently disabling MD5 support " "in index %s", gt_str_get(arguments->encseqinput)); gt_str_delete(md5path); } } } if (!haserr) { GtRandomcodesCorrectData **data_array = NULL; unsigned int bucketkey_kmersize, threadcount; unsigned long nofkmergroups = 0, nofkmeritvs = 0, nofcorrections = 0, nofkmers = 0; #ifdef GT_THREADS_ENABLED const unsigned int threads = gt_jobs; #else const unsigned int threads = 1U; #endif data_array = gt_malloc(sizeof (*data_array) * threads); for (threadcount = 0; !haserr && threadcount < threads; threadcount++) { data_array[threadcount] = gt_randomcodes_correct_data_new(encseq, arguments->correction_kmersize, arguments->trusted_count, gt_str_get(arguments->encseqinput), GT_SEQCORRECT_FILESUFFIX, threadcount, err); if ((data_array[threadcount]) == NULL) { haserr = true; } } gt_log_log("correction kmersize=%u", arguments->correction_kmersize); haserr = gt_seqcorrect_bucketkey_kmersize(arguments, &bucketkey_kmersize, err); if (!haserr) { if (storerandomcodes_getencseqkmers_twobitencoding(encseq, bucketkey_kmersize, arguments->numofparts, arguments->maximumspace, arguments->correction_kmersize, arguments->usefirstcodes, arguments->samplingfactor, arguments->usemaxdepth, arguments->checksuftab, arguments->onlyaccum, arguments->onlyallrandomcodes, arguments->addbscache_depth, 0, arguments->radixlarge ? false : true, arguments->radixparts, gt_randomcodes_correct_process_bucket, NULL, data_array, verbose_logger, timer, err) != 0) { haserr = true; } } for (threadcount = 0; threadcount < threads; threadcount++) { if (!haserr) { gt_randomcodes_correct_data_collect_stats(data_array[threadcount], threadcount, &nofkmergroups, &nofkmeritvs, &nofkmers, &nofcorrections); } gt_randomcodes_correct_data_delete(data_array[threadcount]); } gt_logger_log(verbose_logger, "total number of k-mers: %lu", nofkmers); gt_logger_log(verbose_logger, "number of different k-mers: %lu", nofkmeritvs); gt_logger_log(verbose_logger, "number of different k-1-mers: %lu", nofkmergroups); gt_logger_log(verbose_logger, "number of kmer corrections: %lu", nofcorrections); gt_free(data_array); if (!haserr) { if (gt_seqcorrect_apply_corrections(encseq, gt_str_get(arguments->encseqinput), threads, err) != 0) { haserr = true; } } } gt_encseq_delete(encseq); gt_encseq_loader_delete(el); if (timer != NULL) { gt_timer_show_progress_final(timer, stdout); gt_timer_delete(timer); } gt_logger_delete(default_logger); gt_logger_delete(verbose_logger); return haserr ? -1 : 0; } GtTool* gt_seqcorrect(void) { return gt_tool_new(gt_seqcorrect_arguments_new, gt_seqcorrect_arguments_delete, gt_seqcorrect_option_parser_new, gt_seqcorrect_arguments_check, gt_seqcorrect_runner); } genometools-1.5.1/src/tools/gt_seqcorrect.h000066400000000000000000000017411211610345200210130ustar00rootroot00000000000000/* Copyright (c) 2011 Stefan Kurtz Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQCORRECT_H #define GT_SEQCORRECT_H #include "core/tool_api.h" /* the seqcorrect tool */ GtTool* gt_seqcorrect(void); #endif genometools-1.5.1/src/tools/gt_seqfilter.c000066400000000000000000000120741211610345200206330ustar00rootroot00000000000000/* Copyright (c) 2008-2010 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "core/bioseq_iterator.h" #include "core/fasta.h" #include "core/ma.h" #include "core/output_file_api.h" #include "core/option_api.h" #include "core/undef_api.h" #include "tools/gt_seqfilter.h" typedef struct { unsigned long minlength, maxlength, maxseqnum, width; GtOutputFileInfo *ofi; GtFile *outfp; } SeqFilterArguments; static void* gt_seqfilter_arguments_new(void) { SeqFilterArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_seqfilter_arguments_delete(void *tool_arguments) { SeqFilterArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_seqfilter_option_parser_new(void *tool_arguments) { SeqFilterArguments *arguments = tool_arguments; GtOption *option; GtOptionParser *op; gt_assert(arguments); op = gt_option_parser_new("[option ...] [sequence_file ...]", "Filter the given sequence_file(s) and show the " "results on stdout."); /* -minlength */ option = gt_option_new_ulong("minlength", "set minimum length a sequence must " "have to pass the filter", &arguments->minlength, GT_UNDEF_ULONG); gt_option_parser_add_option(op, option); /* -maxlength */ option = gt_option_new_ulong("maxlength", "set maximum length a sequence can " "have to pass the filter", &arguments->maxlength, GT_UNDEF_ULONG); gt_option_parser_add_option(op, option); /* -maxseqnum */ option = gt_option_new_ulong("maxseqnum", "set the maximum number of " "sequences which can pass the filter", &arguments->maxseqnum, GT_UNDEF_ULONG); gt_option_parser_add_option(op, option); /* -width */ option = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, option); gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); return op; } static int gt_seqfilter_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { SeqFilterArguments *arguments = tool_arguments; GtBioseqIterator *bsi; GtBioseq *bioseq; unsigned long i; unsigned long long passed = 0, filtered = 0, num_of_sequences = 0; int had_err = 0; gt_error_check(err); gt_assert(tool_arguments); bsi = gt_bioseq_iterator_new(argc - parsed_args, argv + parsed_args); while (!(had_err = gt_bioseq_iterator_next(bsi, &bioseq, err)) && bioseq) { for (i = 0; i < gt_bioseq_number_of_sequences(bioseq); i++) { char *seq; if ((arguments->minlength == GT_UNDEF_ULONG || gt_bioseq_get_sequence_length(bioseq, i) >= arguments->minlength) && (arguments->maxlength == GT_UNDEF_ULONG || gt_bioseq_get_sequence_length(bioseq, i) <= arguments->maxlength) && (arguments->maxseqnum == GT_UNDEF_ULONG || passed + 1 <= arguments->maxseqnum)) { seq = gt_bioseq_get_sequence(bioseq, i); gt_fasta_show_entry(gt_bioseq_get_description(bioseq, i), seq, gt_bioseq_get_sequence_length(bioseq, i), arguments->width, arguments->outfp); gt_free(seq); passed++; } else filtered++; num_of_sequences++; } gt_bioseq_delete(bioseq); } /* show statistics */ if (!had_err) { gt_assert(passed + filtered == num_of_sequences); fprintf(stderr, "# %llu out of %llu sequences have been removed (%.3f%%)\n", filtered, num_of_sequences, ((double) filtered / num_of_sequences) * 100.0); } gt_bioseq_iterator_delete(bsi); return had_err; } GtTool* gt_seqfilter(void) { return gt_tool_new(gt_seqfilter_arguments_new, gt_seqfilter_arguments_delete, gt_seqfilter_option_parser_new, NULL, gt_seqfilter_runner); } genometools-1.5.1/src/tools/gt_seqfilter.h000066400000000000000000000017371211610345200206440ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQFILTER_H #define GT_SEQFILTER_H #include "core/tool_api.h" /* the seqfilter tool */ GtTool* gt_seqfilter(void); #endif genometools-1.5.1/src/tools/gt_seqids.c000066400000000000000000000047741211610345200201350ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/option_api.h" #include "core/unused_api.h" #include "extended/collect_ids_visitor.h" #include "extended/gff3_in_stream.h" #include "extended/visitor_stream.h" #include "tools/gt_seqids.h" static GtOptionParser* gt_seqids_option_parser_new(GT_UNUSED void *tool_arguments) { GtOptionParser *op; op = gt_option_parser_new("[GFF3_file]", "Show sequence IDs from annotation file."); gt_option_parser_set_min_max_args(op, 1, 1); return op; } static int gt_seqids_runner(GT_UNUSED int argc, const char **argv, int parsed_args, GT_UNUSED void *tool_arguments, GtError *err) { GtNodeStream *in_stream, *v_stream; GtCstrTable *cst; int had_err = 0; gt_error_check(err); cst = gt_cstr_table_new(); in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); v_stream = gt_visitor_stream_new(in_stream, gt_collect_ids_visitor_new(cst)); had_err = gt_node_stream_pull(v_stream, err); if (!had_err) { GtStrArray *seqids; unsigned long i; seqids = gt_cstr_table_get_all(cst); for (i = 0; i < gt_str_array_size(seqids); i++) { printf("%s\n", gt_str_array_get(seqids, i)); } gt_str_array_delete(seqids); } gt_node_stream_delete(v_stream); gt_node_stream_delete(in_stream); gt_cstr_table_delete(cst); return had_err; } GtTool* gt_seqids(void) { return gt_tool_new(NULL, NULL, gt_seqids_option_parser_new, NULL, gt_seqids_runner); } genometools-1.5.1/src/tools/gt_seqids.h000066400000000000000000000017561211610345200201370ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQIDS_H #define GT_SEQIDS_H #include "core/tool_api.h" /* the print sequence ids (seqids) tool */ GtTool* gt_seqids(void); #endif genometools-1.5.1/src/tools/gt_seqlensort.c000066400000000000000000000105571211610345200210400ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/str_array.h" #include "core/unused_api.h" #include "match/reads2twobit.h" #include "tools/gt_seqlensort.h" typedef struct { GtStr *indexname; GtStrArray *db; } GtSeqlensortArguments; static void* gt_seqlensort_arguments_new(void) { GtSeqlensortArguments *arguments = gt_malloc(sizeof (*arguments)); arguments->indexname = gt_str_new(); arguments->db = gt_str_array_new(); return arguments; } static void gt_seqlensort_arguments_delete(void *tool_arguments) { GtSeqlensortArguments *arguments = tool_arguments; gt_str_delete(arguments->indexname); gt_str_array_delete(arguments->db); gt_free(arguments); } static GtOptionParser* gt_seqlensort_option_parser_new(void *tool_arguments) { GtSeqlensortArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *indexname_option, *db_option; gt_assert(arguments); /* init */ op = gt_option_parser_new("-db [-indexname ...]", "Encode DNA MultiFasta sequences (with no wildcards) " "in GtEncseq format, sorting the sequences by length."); /* -indexname */ indexname_option = gt_option_new_string("indexname", "specify the indexname to use\n" "default: first argument of -db option", arguments->indexname, NULL); gt_option_hide_default(indexname_option); gt_option_parser_add_option(op, indexname_option); /* -db */ db_option = gt_option_new_filename_array("db", "name of input MultiFasta file(s)", arguments->db); gt_option_hide_default(db_option); gt_option_is_mandatory(db_option); gt_option_parser_add_option(op, db_option); return op; } #define GT_SEQLENSORT_SEQLEN(SEQNUM, SEPPOS) \ ((SEQNUM) == 0 \ ? ((SEPPOS)[SEQNUM]) \ : ((SEPPOS)[SEQNUM] - ((SEPPOS)[(SEQNUM) - 1UL] + 1UL))) static int gt_seqlensort_cmp(const void *a, const void *b, void *data) { const unsigned long seqnum_a = *(const unsigned long*)a, seqnum_b = *(const unsigned long*)b; unsigned long seqlen_a = GT_SEQLENSORT_SEQLEN(seqnum_a, (unsigned long*)data), seqlen_b = GT_SEQLENSORT_SEQLEN(seqnum_b, (unsigned long*)data); if (seqlen_a == seqlen_b) return (int)((seqnum_a > seqnum_b) - (seqnum_a < seqnum_b)); return (int)((seqlen_a > seqlen_b) - (seqlen_a < seqlen_b)); } static int gt_seqlensort_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtSeqlensortArguments *arguments = tool_arguments; int had_err = 0; unsigned long i; GtReads2Twobit *r2t = NULL; gt_error_check(err); gt_assert(arguments); if (gt_str_length(arguments->indexname) == 0) { gt_str_append_cstr(arguments->indexname, gt_str_array_get(arguments->db, 0)); } r2t = gt_reads2twobit_new(arguments->indexname); for (i = 0; i < gt_str_array_size(arguments->db) && !had_err; i++) had_err = gt_reads2twobit_add_library(r2t, gt_str_array_get_str( arguments->db, i), err); if (!had_err) had_err = gt_reads2twobit_encode(r2t, err); if (!had_err) { if (gt_reads2twobit_seqlen_eqlen(r2t) == 0) { gt_reads2twobit_sort(r2t, gt_seqlensort_cmp, gt_reads2twobit_export_seppos(r2t)); } had_err = gt_reads2twobit_write_encseq(r2t, err); } gt_reads2twobit_delete(r2t); return had_err; } GtTool* gt_seqlensort(void) { return gt_tool_new(gt_seqlensort_arguments_new, gt_seqlensort_arguments_delete, gt_seqlensort_option_parser_new, NULL, gt_seqlensort_runner); } genometools-1.5.1/src/tools/gt_seqlensort.h000066400000000000000000000017501211610345200210400ustar00rootroot00000000000000/* Copyright (c) 2012 Giorgio Gonnella Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQLENSORT_H #define GT_SEQLENSORT_H #include "core/tool_api.h" /* the seqlensort tool */ GtTool* gt_seqlensort(void); #endif genometools-1.5.1/src/tools/gt_seqmutate.c000066400000000000000000000077041211610345200206510ustar00rootroot00000000000000/* Copyright (c) 2007-2010 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/bioseq_iterator.h" #include "core/fasta.h" #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "extended/gtdatahelp.h" #include "extended/mutate.h" #include "tools/gt_seqmutate.h" typedef struct { unsigned int rate; /* the mutate rate */ unsigned long width; GtOutputFileInfo *ofi; GtFile *outfp; } MutateArguments; static void* gt_seqmutate_arguments_new(void) { MutateArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_seqmutate_arguments_delete(void *tool_arguments) { MutateArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_seqmutate_option_parser_new(void *tool_arguments) { MutateArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *o; gt_assert(arguments); op = gt_option_parser_new("[option ...] [sequence_file ...]", "Mutate the sequences of the given sequence " "file(s)."); /* -rate */ o = gt_option_new_uint_max("rate", "set the mutation rate", &arguments->rate, 1, 100); gt_option_parser_add_option(op, o); /* -width */ o = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, o); gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); return op; } static int gt_seqmutate_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { MutateArguments *arguments = tool_arguments; GtBioseqIterator *bsi; unsigned long i; GtBioseq *bioseq; GtSeq *mutated_seq; int had_err; gt_error_check(err); gt_assert(arguments); bsi = gt_bioseq_iterator_new(argc - parsed_args, argv + parsed_args); while (!(had_err = gt_bioseq_iterator_next(bsi, &bioseq, err)) && bioseq) { char *seq; for (i = 0; i < gt_bioseq_number_of_sequences(bioseq); i++) { seq = gt_bioseq_get_sequence(bioseq, i); mutated_seq = gt_mutate_seq(gt_bioseq_get_description(bioseq, i), seq, gt_bioseq_get_sequence_length(bioseq, i), gt_bioseq_get_alphabet(bioseq), arguments->rate); gt_fasta_show_entry(gt_seq_get_description(mutated_seq), gt_seq_get_orig(mutated_seq), gt_seq_length(mutated_seq), arguments->width, arguments->outfp); gt_free(seq); gt_seq_delete(mutated_seq); } gt_bioseq_delete(bioseq); } gt_bioseq_iterator_delete(bsi); return had_err; } GtTool* gt_seqmutate(void) { return gt_tool_new(gt_seqmutate_arguments_new, gt_seqmutate_arguments_delete, gt_seqmutate_option_parser_new, NULL, gt_seqmutate_runner); } genometools-1.5.1/src/tools/gt_seqmutate.h000066400000000000000000000017511211610345200206520ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQMUTATE_H #define GT_SEQMUTATE_H #include "core/tool_api.h" /* the seqmutate tool */ GtTool* gt_seqmutate(void); #endif genometools-1.5.1/src/tools/gt_seqorder.c000066400000000000000000000171001211610345200204540ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq.h" #include "core/fasta_separator.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "core/xansi_api.h" #include "match/sfx-bentsedg.h" #include "match/sfx-suffixgetset.h" #include "match/sfx-strategy.h" #include "tools/gt_seqorder.h" typedef struct { bool invert, sort, revsort, shuffle; } GtSeqorderArguments; static void* gt_seqorder_arguments_new(void) { GtSeqorderArguments *arguments = gt_calloc((size_t)1, sizeof *arguments); return arguments; } static void gt_seqorder_arguments_delete(void *tool_arguments) { GtSeqorderArguments *arguments = tool_arguments; if (!arguments) return; gt_free(arguments); } static GtOptionParser* gt_seqorder_option_parser_new(void *tool_arguments) { GtSeqorderArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *invert_option, *sort_option, *revsort_option, *shuffle_option; gt_assert(arguments); /* init */ op = gt_option_parser_new("(-invert|-sort|-revsort|-shuffle) encseq", "Output sequences as MultiFasta in specified " "order."); /* -invert */ invert_option = gt_option_new_bool("invert", "invert order of sequences", &arguments->invert, false); gt_option_parser_add_option(op, invert_option); /* -sort */ sort_option = gt_option_new_bool("sort", "sort sequences lexicographically", &arguments->sort, false); gt_option_exclude(sort_option, invert_option); gt_option_parser_add_option(op, sort_option); /* -revsort */ revsort_option = gt_option_new_bool("revsort", "sort sequences in reverse " "lexicographic order", &arguments->revsort, false); gt_option_exclude(revsort_option, invert_option); gt_option_exclude(revsort_option, sort_option); gt_option_parser_add_option(op, revsort_option); /* -shuffle */ shuffle_option = gt_option_new_bool("shuffle", "shuffle sequences " "pseudo-randomly", &arguments->shuffle, false); gt_option_exclude(shuffle_option, invert_option); gt_option_exclude(shuffle_option, sort_option); gt_option_exclude(shuffle_option, revsort_option); gt_option_parser_add_option(op, shuffle_option); gt_option_parser_set_min_max_args(op, 1U, 1U); return op; } static int gt_seqorder_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GT_UNUSED GtError *err) { GtSeqorderArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments != NULL); if (!(arguments->invert || arguments->sort || arguments->revsort || arguments->shuffle)) { had_err = 1; gt_error_set(err, "order option needed: -invert|-sort|-revsort|-shuffle"); } return had_err; } static void gt_seqorder_sort(GtSuffixsortspace *suffixsortspace, GtEncseq *encseq) { unsigned long i; Sfxstrategy sfxstrategy; defaultsfxstrategy(&sfxstrategy, false); for (i = 0; i < gt_encseq_num_of_sequences(encseq); i++) gt_suffixsortspace_setdirect(suffixsortspace, i, gt_encseq_seqstartpos(encseq, i)); gt_sortallsuffixesfromstart(suffixsortspace, gt_encseq_num_of_sequences(encseq), encseq, GT_READMODE_FORWARD, NULL, 0, &sfxstrategy, NULL, NULL, NULL); } static void gt_seqorder_get_shuffled_seqnums(unsigned long nofseqs, unsigned long *seqnums) { unsigned long i, j; gt_assert(seqnums != NULL); seqnums[0] = 0; for (i = 1UL; i < nofseqs; i++) { j = gt_rand_max(i); seqnums[i] = seqnums[j]; seqnums[j] = i; } } static void gt_seqorder_output(unsigned long seqnum, GtEncseq *encseq) { GtEncseqReader *esr; unsigned long startpos, len, desclen = 0; const char *desc = NULL; unsigned long i; startpos = gt_encseq_seqstartpos(encseq, seqnum); len = gt_encseq_seqlength(encseq, seqnum); gt_xfputc(GT_FASTA_SEPARATOR, stdout); if (gt_encseq_has_description_support(encseq)) { desc = gt_encseq_description(encseq, &desclen, seqnum); gt_xfwrite(desc, (size_t)1, (size_t)desclen, stdout); } gt_xfputc('\n', stdout); esr = gt_encseq_create_reader_with_readmode(encseq, GT_READMODE_FORWARD, startpos); for (i = 0; i < len; i++) { gt_xfputc(gt_encseq_reader_next_decoded_char(esr), stdout); } gt_encseq_reader_delete(esr); gt_xfputc('\n', stdout); } static int gt_seqorder_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtSeqorderArguments *arguments = tool_arguments; int had_err = 0; GtEncseq *encseq; GtEncseqLoader *loader; unsigned long i, nofseqs; gt_error_check(err); gt_assert(arguments != NULL); /* load encseq */ loader = gt_encseq_loader_new(); encseq = gt_encseq_loader_load(loader, argv[parsed_args], err); if (encseq == NULL) had_err = -1; if (had_err == 0 && !gt_encseq_has_description_support(encseq)) gt_warning("%s has no description support", argv[parsed_args]); if (!had_err) { nofseqs = gt_encseq_num_of_sequences(encseq); if (arguments->invert) { for (i = nofseqs; i > 0; i--) gt_seqorder_output(i - 1, encseq); } else if (arguments->shuffle) { unsigned long *seqnums; seqnums = gt_malloc(sizeof (unsigned long) * nofseqs); gt_seqorder_get_shuffled_seqnums(nofseqs, seqnums); for (i = 0; i < nofseqs; i++) gt_seqorder_output(seqnums[i], encseq); gt_free(seqnums); } else { GtSuffixsortspace *suffixsortspace; gt_assert(arguments->sort || arguments->revsort); suffixsortspace = gt_suffixsortspace_new(nofseqs, /* Use iterator over sequence separators: saves a lot of binary searches */ gt_encseq_seqstartpos(encseq, nofseqs-1), false,NULL); gt_seqorder_sort(suffixsortspace, encseq); if (arguments->sort) for (i = 0; i < nofseqs; i++) gt_seqorder_output(gt_encseq_seqnum(encseq, gt_suffixsortspace_getdirect(suffixsortspace, i)), encseq); else for (i = nofseqs; i > 0; i--) gt_seqorder_output(gt_encseq_seqnum(encseq, gt_suffixsortspace_getdirect(suffixsortspace, i - 1)), encseq); gt_suffixsortspace_delete(suffixsortspace, false); } } gt_encseq_loader_delete(loader); gt_encseq_delete(encseq); return had_err; } GtTool* gt_seqorder(void) { return gt_tool_new(gt_seqorder_arguments_new, gt_seqorder_arguments_delete, gt_seqorder_option_parser_new, gt_seqorder_arguments_check, gt_seqorder_runner); } genometools-1.5.1/src/tools/gt_seqorder.h000066400000000000000000000017401211610345200204640ustar00rootroot00000000000000/* Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQORDER_H #define GT_SEQORDER_H #include "core/tool_api.h" /* the seqorder tool */ GtTool* gt_seqorder(void); #endif genometools-1.5.1/src/tools/gt_seqstat.c000066400000000000000000000320531211610345200203200ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2010-2011 Giorgio Gonnella Copyright (c) 2007-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #ifndef S_SPLINT_S #include #endif #include "core/fileutils_api.h" #include "core/xposix.h" #include "core/fa.h" #include "core/ma.h" #include "core/versionfunc.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "core/seq_iterator_fastq_api.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "core/xansi_api.h" #include "core/progressbar.h" #include "core/format64.h" #include "core/unused_api.h" #include "core/types_api.h" #include "core/disc_distri_api.h" #include "core/option_api.h" #include "core/error_api.h" #include "core/logger.h" #include "extended/assembly_stats_calculator.h" #include "match/stamp.h" #include "tools/gt_seqstat.h" typedef struct { bool verbose, dodistlen, binarydistlen, doastretch, docstats, showestimsize; unsigned int bucketsize; unsigned long genome_length; } SeqstatArguments; #define GT_SEQSTAT_BINARY_DISTLEN_SUFFIX ".distlen" static GtOPrval parse_options(SeqstatArguments *arguments, int *parsed_args,int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOption *optionverbose, *optiondistlen, *optionbucketsize, *optioncontigs, *optionastretch, *optionestimsize, *optionbinarydistlen, *optiongenome; GtOPrval oprval; gt_error_check(err); op = gt_option_parser_new("[options] file [...]", "Calculate statistics for fasta file(s)."); optionverbose = gt_option_new_bool("v","be verbose", &arguments->verbose,false); gt_option_parser_add_option(op, optionverbose); optiondistlen = gt_option_new_bool("distlen", "show distribution of sequence length", &arguments->dodistlen,false); gt_option_parser_add_option(op, optiondistlen); optionbucketsize = gt_option_new_uint_min("b", "bucket size for distlen option", &arguments->bucketsize, 100U, 1U); gt_option_imply(optionbucketsize, optiondistlen); gt_option_parser_add_option(op, optionbucketsize); optionbinarydistlen = gt_option_new_bool("binary", "use a binary format for distlen output\n" "output filename: " GT_SEQSTAT_BINARY_DISTLEN_SUFFIX "\n" "bucketsize: 1", &arguments->binarydistlen,false); gt_option_imply(optionbinarydistlen, optiondistlen); gt_option_exclude(optionbinarydistlen, optionbucketsize); gt_option_parser_add_option(op, optionbinarydistlen); optioncontigs = gt_option_new_bool("contigs", "summary of contigs set statistics", &arguments->docstats,false); gt_option_parser_add_option(op, optioncontigs); optionastretch = gt_option_new_bool("astretch", "show distribution of A-substrings", &arguments->doastretch,false); gt_option_exclude(optiondistlen, optionastretch); gt_option_parser_add_option(op, optionastretch); gt_option_is_extended_option(optionastretch); optionestimsize = gt_option_new_bool("estimsize", "show estimated size", &arguments->showestimsize,false); gt_option_parser_add_option(op, optionestimsize); gt_option_is_development_option(optionestimsize); optiongenome = gt_option_new_ulong_min("genome", "set genome length for NG50/NG80 calculation", &arguments->genome_length, 0, 1UL); gt_option_imply(optiongenome, optioncontigs); gt_option_parser_add_option(op, optiongenome); gt_option_parser_set_min_args(op, 1U); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } static void showdistseqlen(unsigned long key, unsigned long long value, void *data) { unsigned long distvalue; unsigned int *bucketsize = data; gt_assert(value <= (unsigned long long) ULONG_MAX); distvalue = (unsigned long) value; printf("%lu--%lu %lu\n", (*bucketsize) * key, (*bucketsize) * (key+1) - 1, distvalue); } static void showdistseqlenbinary(unsigned long key, unsigned long long value, void *data) { unsigned long value_ul; /*@ignore@*/ FILE *file = data; /*@end@*/ gt_assert(value <= (unsigned long long) ULONG_MAX); value_ul = (unsigned long) value; gt_xfwrite(&key, sizeof (key), (size_t)1, file); gt_xfwrite(&value_ul, sizeof (value_ul), (size_t)1, file); } typedef struct { unsigned long long sumA, *mmercount; unsigned long maxvalue, minkey; } Astretchinfo; static void showastretches(unsigned long key, unsigned long long value, void *data) { Astretchinfo *astretchinfo = (Astretchinfo *) data; astretchinfo->sumA += value * (unsigned long long) key; if (key > astretchinfo->maxvalue) { astretchinfo->maxvalue = key; } /*@ignore@*/ printf("%lu %llu\n", key,value); /*@end@*/ } static void showmeroccurrence(unsigned long key, unsigned long long value, void *data) { unsigned long len; Astretchinfo *astretchinfo = (Astretchinfo *) data; for (len=astretchinfo->minkey; len<= key; len++) { gt_assert(len <= astretchinfo->maxvalue); astretchinfo->mmercount[len] += value * (unsigned long long) (key-len+1); } } static unsigned long long accumulateastretch(GtDiscDistri *distastretch, const GtUchar *sequence, unsigned long len) { unsigned long i, lenofastretch = 0; unsigned long long countA = 0; for (i=0; i 0) { gt_disc_distri_add(distastretch,lenofastretch); lenofastretch = 0; } } } if (lenofastretch > 0) { gt_disc_distri_add(distastretch,lenofastretch); } return countA; } static void processastretches(const GtDiscDistri *distastretch, GT_UNUSED unsigned long long countA) { Astretchinfo astretchinfo; unsigned long len; astretchinfo.sumA = 0; astretchinfo.maxvalue = 0; astretchinfo.minkey = 10UL; gt_disc_distri_foreach(distastretch,showastretches,&astretchinfo); astretchinfo.mmercount = gt_malloc(sizeof (*astretchinfo.mmercount) * (astretchinfo.maxvalue+1)); memset(astretchinfo.mmercount,0,sizeof (*astretchinfo.mmercount) * (astretchinfo.maxvalue+1)); gt_disc_distri_foreach(distastretch,showmeroccurrence,&astretchinfo); for (len=astretchinfo.minkey; len<=astretchinfo.maxvalue; len++) { /*@ignore@*/ printf("a^{%lu} occurs %llu times\n", len,astretchinfo.mmercount[len]); /*@end@*/ } gt_assert(astretchinfo.sumA == countA); gt_free(astretchinfo.mmercount); } int gt_seqstat(int argc, const char **argv, GtError *err) { GtStrArray *files; GtSeqIterator *seqit; const GtUchar *sequence; char *desc; unsigned long len; int i, parsed_args, had_err = 0; off_t totalsize; GtDiscDistri *distseqlen = NULL; GtAssemblyStatsCalculator *asc = NULL; GtLogger *asc_logger = NULL; GtDiscDistri *distastretch = NULL; uint64_t numofseq = 0, sumlength = 0; unsigned long minlength = 0, maxlength = 0; unsigned long long countA = 0; bool minlengthdefined = false; SeqstatArguments arguments; gt_error_check(err); /* option parsing */ switch (parse_options(&arguments,&parsed_args, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: return 0; } files = gt_str_array_new(); for (i = parsed_args; i < argc; i++) { gt_str_array_add_cstr(files, argv[i]); } totalsize = gt_files_estimate_total_size(files); if (arguments.showestimsize) { printf("# estimated total size is " Formatuint64_t "\n", PRINTuint64_tcast(totalsize)); } if (!had_err) { /* read input using seqiterator */ seqit = gt_seq_iterator_sequence_buffer_new(files, err); if (!seqit) had_err = -1; if (!had_err) { if (arguments.dodistlen) { distseqlen = gt_disc_distri_new(); if (arguments.binarydistlen) arguments.bucketsize = 1U; } if (arguments.docstats) { asc = gt_assembly_stats_calculator_new(); gt_assembly_stats_calculator_set_genome_length(asc, arguments.genome_length); } if (arguments.doastretch) { distastretch = gt_disc_distri_new(); } if (arguments.verbose) { gt_progressbar_start(gt_seq_iterator_getcurrentcounter(seqit, (unsigned long long) totalsize), (unsigned long long) totalsize); } while (true) { desc = NULL; had_err = gt_seq_iterator_next(seqit, &sequence, &len, &desc, err); if (had_err != 1) break; /* 0: finished; 1: error */ if (arguments.dodistlen || arguments.docstats) { if (!minlengthdefined || minlength > len) { minlength = len; minlengthdefined = true; } if (maxlength < len) { maxlength = len; } sumlength += (uint64_t) len; numofseq++; if (arguments.dodistlen) { gt_disc_distri_add(distseqlen,len/arguments.bucketsize); } if (arguments.docstats) { gt_assembly_stats_calculator_add(asc, len); } } if (arguments.doastretch) { countA += accumulateastretch(distastretch,sequence,len); } } if (arguments.verbose) { gt_progressbar_stop(); } gt_seq_iterator_delete(seqit); } } gt_str_array_delete(files); if (!had_err && arguments.dodistlen) { printf("# " Formatuint64_t " sequences of average length %.2f\n", PRINTuint64_tcast(numofseq),(double) sumlength/numofseq); printf("# total length " Formatuint64_t "\n", PRINTuint64_tcast(sumlength)); printf("# minimum length %lu\n",minlength); printf("# maximum length %lu\n",maxlength); if (arguments.binarydistlen) { FILE *distlenoutfile; GtStr *distlenoutfilename = gt_str_new_cstr(argv[parsed_args]); gt_str_append_cstr(distlenoutfilename, GT_SEQSTAT_BINARY_DISTLEN_SUFFIX); distlenoutfile = gt_fa_fopen(gt_str_get(distlenoutfilename), "wb", err); if (distlenoutfile == NULL) had_err = -1; else { /*@ignore@*/ gt_disc_distri_foreach(distseqlen, showdistseqlenbinary, distlenoutfile); /*@end@*/ printf("# distribution of sequence length written to file: %s\n", gt_str_get(distlenoutfilename)); gt_fa_fclose(distlenoutfile); } gt_str_delete(distlenoutfilename); } else { printf("# distribution of sequence length in buckets of size %u\n", arguments.bucketsize); gt_disc_distri_foreach(distseqlen, showdistseqlen, &(arguments.bucketsize)); } gt_disc_distri_delete(distseqlen); } if (!had_err && arguments.docstats) { asc_logger = gt_logger_new(true, GT_LOGGER_DEFLT_PREFIX, stdout); gt_assembly_stats_calculator_show(asc, asc_logger); gt_logger_delete(asc_logger); } if (asc != NULL) gt_assembly_stats_calculator_delete(asc); if (!had_err && arguments.doastretch) { processastretches(distastretch,countA); gt_disc_distri_delete(distastretch); } return had_err; } genometools-1.5.1/src/tools/gt_seqstat.h000066400000000000000000000017441211610345200203300ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQSTAT_H #define GT_SEQSTAT_H /* the sequence statistics tool */ int gt_seqstat(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_seqtransform.c000066400000000000000000000077501211610345200213660ustar00rootroot00000000000000/* Copyright (c) 2010 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/bioseq_iterator.h" #include "core/fasta.h" #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/trans_table.h" #include "tools/gt_seqtransform.h" typedef struct { bool addstopaminos; unsigned long width; GtOutputFileInfo *ofi; GtFile *outfp; } SeqtransformArguments; static void* gt_seqtransform_arguments_new(void) { SeqtransformArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_seqtransform_arguments_delete(void *tool_arguments) { SeqtransformArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_seqtransform_option_parser_new(void *tool_arguments) { SeqtransformArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *o; gt_assert(arguments); op = gt_option_parser_new("[option ...] [sequence_file ...]", "Perform simple transformations on the given " "sequence file(s)."); /* -addstopaminos */ o = gt_option_new_bool("addstopaminos", "append stop amino acids ('" GT_STOP_AMINO_CSTR"') to given protein sequences, if " "not already present", &arguments->addstopaminos, false); gt_option_parser_add_option(op, o); /* -width */ o = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, o); gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); return op; } static int gt_seqtransform_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { SeqtransformArguments *arguments = tool_arguments; GtBioseqIterator *bsi; unsigned long i; GtBioseq *bioseq; int had_err; gt_error_check(err); gt_assert(arguments); bsi = gt_bioseq_iterator_new(argc - parsed_args, argv + parsed_args); while (!(had_err = gt_bioseq_iterator_next(bsi, &bioseq, err)) && bioseq) { GtAlphabet *alphabet; bool is_protein; alphabet = gt_bioseq_get_alphabet(bioseq); is_protein = gt_alphabet_is_protein(alphabet); for (i = 0; i < gt_bioseq_number_of_sequences(bioseq); i++) { const char *desc, *suffix = NULL; char *seq; unsigned long seqlen; desc = gt_bioseq_get_description(bioseq, i); seq = gt_bioseq_get_sequence(bioseq, i); seqlen = gt_bioseq_get_sequence_length(bioseq, i); if (arguments->addstopaminos && is_protein && seqlen && seq[seqlen-1] != GT_STOP_AMINO) { suffix = GT_STOP_AMINO_CSTR; } gt_fasta_show_entry_with_suffix(desc, seq, seqlen, suffix, arguments->width, arguments->outfp); gt_free(seq); } gt_bioseq_delete(bioseq); } gt_bioseq_iterator_delete(bsi); return had_err; } GtTool* gt_seqtransform(void) { return gt_tool_new(gt_seqtransform_arguments_new, gt_seqtransform_arguments_delete, gt_seqtransform_option_parser_new, NULL, gt_seqtransform_runner); } genometools-1.5.1/src/tools/gt_seqtransform.h000066400000000000000000000016451211610345200213700ustar00rootroot00000000000000/* Copyright (c) 2010 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQTRANSFORM_H #define GT_SEQTRANSFORM_H #include "core/tool_api.h" /* the seqtransform tool */ GtTool* gt_seqtransform(void); #endif genometools-1.5.1/src/tools/gt_seqtranslate.c000066400000000000000000000161231211610345200213420ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/codon_api.h" #include "core/codon_iterator_simple_api.h" #include "core/cstr_api.h" #include "core/fasta.h" #include "core/ma.h" #include "core/output_file_api.h" #include "core/seq_iterator_sequence_buffer.h" #include "core/sequence_buffer.h" #include "core/translator.h" #include "core/unused_api.h" #include "core/warning_api.h" #include "extended/reverse_api.h" #include "tools/gt_seqtranslate.h" typedef struct { GtOutputFileInfo *ofi; GtFile *outfp; unsigned long fasta_width; bool reverse; } GtTranslateArguments; static void* gt_seqtranslate_arguments_new(void) { GtTranslateArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_seqtranslate_arguments_delete(void *tool_arguments) { GtTranslateArguments *arguments = tool_arguments; if (!arguments) return; gt_output_file_info_delete(arguments->ofi); gt_file_delete(arguments->outfp); gt_free(arguments); } static GtOptionParser* gt_seqtranslate_option_parser_new(void *tool_arguments) { GtTranslateArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [files]", "Translates a nucleotide sequence into a protein " "sequence."); option = gt_option_new_bool("reverse", "also translate reverse complements", &arguments->reverse, true); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("fastawidth", "width of the FASTA output", &arguments->fasta_width, 60); gt_option_parser_add_option(op, option); gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_min_args(op, 1); return op; } static int gt_seqtranslate_arguments_check(GT_UNUSED int rest_argc, GT_UNUSED void *tool_arguments, GT_UNUSED GtError *err) { GT_UNUSED GtTranslateArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); return had_err; } static int gt_seqtranslate_do_translation(GtTranslateArguments *arguments, const char *sequence, unsigned long length, const char *desc, GtStr **translations, bool rev, GtError *err) { GtTranslator *tr; GT_UNUSED GtTranslatorStatus trst; GtCodonIterator *ci; char translated; int had_err = 0; GtStr *str; unsigned int frame, i; ci = gt_codon_iterator_simple_new(sequence, length, err); tr = gt_translator_new(ci); trst = gt_translator_next(tr, &translated, &frame, err); while (trst == GT_TRANSLATOR_OK) { gt_str_append_char(translations[frame], translated); trst = gt_translator_next(tr, &translated, &frame, err); } gt_codon_iterator_delete(ci); gt_translator_delete(tr); if (trst == GT_TRANSLATOR_ERROR) return -1; str = gt_str_new(); for (i = 0; i < 3; i++) { if (gt_str_length(translations[i]) > 0) { gt_str_append_cstr(str, desc); gt_str_append_cstr(str, " ("); gt_str_append_ulong(str, i+1); gt_str_append_cstr(str, rev ? "-" : "+"); gt_str_append_cstr(str, ")"); gt_fasta_show_entry(gt_str_get(str), gt_str_get(translations[i]), gt_str_length(translations[i]), arguments->fasta_width, arguments->outfp); gt_str_reset(translations[i]); gt_str_reset(str); } } gt_str_delete(str); return had_err; } static int gt_seqtranslate_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { GtTranslateArguments *arguments = tool_arguments; GtSeqIterator *si = NULL; GtSequenceBuffer *sb = NULL; GtStrArray *infiles; int had_err = 0, rval, i; GtStr *translations[3]; translations[0] = gt_str_new(); translations[1] = gt_str_new(); translations[2] = gt_str_new(); gt_error_check(err); gt_assert(arguments); infiles = gt_str_array_new(); for (i = parsed_args; i < argc; i++) { gt_str_array_add_cstr(infiles, argv[i]); } sb = gt_sequence_buffer_new_guess_type(infiles, err); if (!sb) had_err = -1; if (!had_err) { si = gt_seq_iterator_sequence_buffer_new_with_buffer(sb); if (!si) had_err = -1; } if (!had_err) { char *desc; const GtUchar *sequence; unsigned long len; while (!had_err && (rval = gt_seq_iterator_next(si, &sequence, &len, &desc, err))) { if (rval < 0) { had_err = -1; break; } if (len < GT_CODON_LENGTH) { gt_warning("sequence '%s' is shorter than codon length of %d, skipping", desc, GT_CODON_LENGTH); } else { had_err = gt_seqtranslate_do_translation(arguments, (char*) sequence, len, desc, translations, false, err); if (!had_err && arguments->reverse) { char *revseq = gt_cstr_dup_nt((char*) sequence, len); had_err = gt_reverse_complement(revseq, len, err); if (!had_err) { had_err = gt_seqtranslate_do_translation(arguments, revseq, len, desc, translations, true, err); } gt_free(revseq); } } } } gt_str_delete(translations[0]); gt_str_delete(translations[1]); gt_str_delete(translations[2]); gt_str_array_delete(infiles); gt_seq_iterator_delete(si); gt_sequence_buffer_delete(sb); return had_err; } GtTool* gt_seqtranslate(void) { return gt_tool_new(gt_seqtranslate_arguments_new, gt_seqtranslate_arguments_delete, gt_seqtranslate_option_parser_new, gt_seqtranslate_arguments_check, gt_seqtranslate_runner); } genometools-1.5.1/src/tools/gt_seqtranslate.h000066400000000000000000000017611211610345200213510ustar00rootroot00000000000000/* Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQTRANSLATE_H #define GT_SEQTRANSLATE_H #include "core/tool_api.h" /* the seqtranslate tool */ GtTool* gt_seqtranslate(void); #endif genometools-1.5.1/src/tools/gt_sequniq.c000066400000000000000000000156711211610345200203300ustar00rootroot00000000000000/* Copyright (c) 2008-2011 Gordon Gremme Copyright (c) 2011 Giorgio Gonnella Copyright (c) 2008-2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/bioseq.h" #include "core/fasta.h" #include "core/fileutils_api.h" #include "core/ma.h" #include "core/output_file_api.h" #include "core/option_api.h" #include "core/progressbar.h" #include "core/seq_iterator_sequence_buffer_api.h" #include "core/string_distri.h" #include "core/unused_api.h" #include "extended/md5set.h" #include "tools/gt_sequniq.h" typedef struct { bool seqit, verbose, rev; unsigned long width, nofseqs; GtOutputFileInfo *ofi; GtFile *outfp; } GtSequniqArguments; static void* gt_sequniq_arguments_new(void) { GtSequniqArguments *arguments = gt_calloc((size_t)1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_sequniq_arguments_delete(void *tool_arguments) { GtSequniqArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_sequniq_option_parser_new(void *tool_arguments) { GtSequniqArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *seqit_option, *verbose_option, *width_option, *rev_option, *nofseqs_option; gt_assert(arguments); op = gt_option_parser_new("[option ...] sequence_file [...] ", "Filter out repeated sequences in given in given " "sequence_file(s)."); /* -seqit */ seqit_option = gt_option_new_bool("seqit", "use sequence iterator", &arguments->seqit, false); gt_option_is_development_option(seqit_option); gt_option_parser_add_option(op, seqit_option); /* -nofseqs */ nofseqs_option = gt_option_new_ulong("nofseqs", "number of sequences " "(improves efficiency)\ndefault: unspecified", &arguments->nofseqs, 0); gt_option_is_development_option(nofseqs_option); gt_option_hide_default(nofseqs_option); gt_option_parser_add_option(op, nofseqs_option); /* -rev */ rev_option = gt_option_new_bool("rev", "filter out also sequences whose " "reverse complement is identical to a sequence already output", &arguments->rev, false); gt_option_parser_add_option(op, rev_option); /* -v */ verbose_option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, verbose_option); /* -width */ width_option = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, width_option); gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); /* option implications */ gt_option_imply(verbose_option, seqit_option); gt_option_parser_set_min_args(op, 1U); return op; } static int gt_sequniq_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtSequniqArguments *arguments = tool_arguments; unsigned long long duplicates = 0, num_of_sequences = 0; int i, had_err = 0; GtMD5Set *md5set; gt_error_check(err); gt_assert(arguments); md5set = gt_md5set_new(arguments->nofseqs); if (!arguments->seqit) { unsigned long j; GtBioseq *bs; for (i = parsed_args; !had_err && i < argc; i++) { if (!(bs = gt_bioseq_new(argv[i], err))) had_err = -1; if (!had_err) { GtMD5SetStatus retval; for (j = 0; j < gt_bioseq_number_of_sequences(bs) && !had_err; j++) { char *seq = gt_bioseq_get_sequence(bs, j); retval = gt_md5set_add_sequence(md5set, seq, gt_bioseq_get_sequence_length(bs, j), arguments->rev, err); if (retval == GT_MD5SET_NOT_FOUND) gt_fasta_show_entry(gt_bioseq_get_description(bs, j), seq, gt_bioseq_get_sequence_length(bs, j), arguments->width, arguments->outfp); else if (retval != GT_MD5SET_ERROR) duplicates++; else had_err = -1; num_of_sequences++; gt_free(seq); } gt_bioseq_delete(bs); } } } else { GtSeqIterator *seqit; GtStrArray *files; off_t totalsize; const GtUchar *sequence; char *desc; unsigned long len; files = gt_str_array_new(); for (i = parsed_args; i < argc; i++) gt_str_array_add_cstr(files, argv[i]); totalsize = gt_files_estimate_total_size(files); seqit = gt_seq_iterator_sequence_buffer_new(files, err); if (!seqit) had_err = -1; if (!had_err) { if (arguments->verbose) { gt_progressbar_start(gt_seq_iterator_getcurrentcounter(seqit, (unsigned long long) totalsize), (unsigned long long) totalsize); } while (!had_err) { GtMD5SetStatus retval; if ((gt_seq_iterator_next(seqit, &sequence, &len, &desc, err)) != 1) break; retval = gt_md5set_add_sequence(md5set, (const char*) sequence, len, arguments->rev, err); if (retval == GT_MD5SET_NOT_FOUND) gt_fasta_show_entry(desc, (const char*) sequence, len, arguments->width, arguments->outfp); else if (retval != GT_MD5SET_ERROR) duplicates++; else had_err = -1; num_of_sequences++; } if (arguments->verbose) gt_progressbar_stop(); gt_seq_iterator_delete(seqit); } gt_str_array_delete(files); } /* show statistics */ if (!had_err) { fprintf(stderr, "# %lu out of %lu sequences have been removed (%.3f%%)\n", (unsigned long)duplicates, (unsigned long)num_of_sequences, ((double) duplicates / (double)num_of_sequences) * 100.0); } gt_md5set_delete(md5set); return had_err; } GtTool* gt_sequniq(void) { return gt_tool_new(gt_sequniq_arguments_new, gt_sequniq_arguments_delete, gt_sequniq_option_parser_new, NULL, gt_sequniq_runner); } genometools-1.5.1/src/tools/gt_sequniq.h000066400000000000000000000017271211610345200203320ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SEQUNIQ_H #define GT_SEQUNIQ_H #include "core/tool_api.h" /* the sequniq tool */ GtTool* gt_sequniq(void); #endif genometools-1.5.1/src/tools/gt_sfxmap.c000066400000000000000000001234271211610345200201400ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/encseq_metadata.h" #include "core/error.h" #include "core/logger.h" #include "core/option_api.h" #include "core/str_array_api.h" #include "core/unused_api.h" #include "match/echoseq.h" #include "match/eis-voiditf.h" #include "match/esa-lcpintervals.h" #include "match/esa-map.h" #include "match/esa-seqread.h" #include "match/esa-spmitvs.h" #include "match/index_options.h" #include "match/optionargmode.h" #include "match/pckdfs.h" #include "match/sfx-bentsedg.h" #include "match/sfx-diffcov.h" #include "match/sfx-strategy.h" #include "match/sfx-suffixgetset.h" #include "match/sfx-suftaborder.h" #include "match/stamp.h" #include "match/test-mappedstr.pr" #include "match/twobits2kmers.h" #include "match/sfx-linlcp.h" #include "tools/gt_sfxmap.h" typedef struct { bool usestream, bfcheck, verbose, cmpsuf, cmplcp, inputtis, inputsuf, inputdes, inputsds, inputbwt, inputlcp, inputbck, inputssp, enumlcpitvs, enumlcpitvtree, enumlcpitvtreeBU, diffcovercheck, wholeleafcheck, spmitv, ownencseq2file; unsigned long delspranges; GtStr *esaindexname, *pckindexname; unsigned int sortmaxdepth, scanesa; GtStrArray *algbounds, *streamesq; } Sfxmapoptions; static void deletethespranges(const GtEncseq *encseq, unsigned long delspranges) { GtSpecialrangeiterator *sri; GtRange range; unsigned long rangewidth, nextpos = 0, totallength; const unsigned long fastawidth = 70UL; sri = gt_specialrangeiterator_new(encseq,true); printf(">\n"); while (gt_specialrangeiterator_next(sri,&range)) { gt_assert(range.end > range.start); rangewidth = range.end - range.start; if (rangewidth > (unsigned long) delspranges) { if (range.start == 0) { nextpos = range.end; } else { if (range.start > nextpos) { gt_encseq2symbolstring(stdout, encseq, GT_READMODE_FORWARD, nextpos, range.start + delspranges - nextpos, fastawidth); nextpos = range.end; } } } } totallength = gt_encseq_total_length(encseq); if (nextpos < totallength-1) { gt_encseq2symbolstring(stdout, encseq, GT_READMODE_FORWARD, nextpos, totallength - nextpos, fastawidth); } gt_specialrangeiterator_delete(sri); } static void *gt_sfxmap_arguments_new(void) { Sfxmapoptions *arguments; arguments = gt_malloc(sizeof (*arguments)); arguments->esaindexname = gt_str_new(); arguments->pckindexname = gt_str_new(); arguments->streamesq = gt_str_array_new(); arguments->algbounds = gt_str_array_new(); return arguments; } static void gt_sfxmap_arguments_delete(void *tool_arguments) { Sfxmapoptions *arguments = tool_arguments; if (arguments != NULL) { gt_str_delete(arguments->esaindexname); gt_str_delete(arguments->pckindexname); gt_str_array_delete(arguments->streamesq); gt_str_array_delete(arguments->algbounds); gt_free(arguments); } } static GtOptionParser* gt_sfxmap_option_parser_new(void *tool_arguments) { Sfxmapoptions *arguments = tool_arguments; GtOptionParser *op; GtOption *optionstream, *optionverbose, *optionbck, *optionsuf, *optiondes, *optionsds, *optionbwt, *optionlcp, *optiontis, *optionssp, *optiondelspranges, *optionpckindex, *optionesaindex, *optioncmpsuf, *optioncmplcp, *optionstreamesq, *optionsortmaxdepth, *optionalgbounds, *optiondiffcov, *optionwholeleafcheck, *optionenumlcpitvs, *optionenumlcpitvtree, *optionenumlcpitvtreeBU, *optionscanesa, *optionspmitv, *optionownencseq2file, *optionbfcheck; gt_assert(arguments != NULL); op = gt_option_parser_new("[options]", "Map or Stream and check consistency."); gt_option_parser_set_mail_address(op,""); optionesaindex = gt_option_new_string("esa", "Specify index (enhanced suffix array)", arguments->esaindexname, NULL); gt_option_parser_add_option(op, optionesaindex); optionpckindex = gt_option_new_string("pck", "Specify index (packed index)", arguments->pckindexname, NULL); gt_option_parser_add_option(op, optionpckindex); optionstreamesq = gt_option_new_string_array("stream-esq", "Stream the encoded sequence", arguments->streamesq); gt_option_parser_add_option(op, optionstreamesq); optionsortmaxdepth = gt_option_new_uint("sortmaxdepth", "sort suffixes up to some depth", &arguments->sortmaxdepth,0); gt_option_parser_add_option(op, optionsortmaxdepth); optionalgbounds = gt_option_new_string_array("algbds", "length boundaries for the different " "algorithms to sort buckets of suffixes\n" "first number: maxbound for insertion sort\n" "second number: maxbound for blindtrie sort\n" "third number: maxbound for counting sort", arguments->algbounds); gt_option_parser_add_option(op, optionalgbounds); gt_option_is_mandatory_either_3(optionesaindex,optionpckindex, optionstreamesq); optionstream = gt_option_new_bool("stream","stream the index", &arguments->usestream,false); gt_option_parser_add_option(op, optionstream); optionbfcheck = gt_option_new_bool("bfcheck", "perform check by brute force algorithm " "(this can be slow if lcps are long)", &arguments->bfcheck,false); gt_option_parser_add_option(op, optionbfcheck); optiondelspranges = gt_option_new_ulong("delspranges", "delete ranges of special values", &arguments->delspranges, 0); gt_option_parser_add_option(op, optiondelspranges); optiontis = gt_option_new_bool("tis","input the transformed input sequence", &arguments->inputtis, false); gt_option_parser_add_option(op, optiontis); optiondes = gt_option_new_bool("des","input the descriptions", &arguments->inputdes, false); gt_option_parser_add_option(op, optiondes); optionsds = gt_option_new_bool("sds","input the description end positions", &arguments->inputsds, false); gt_option_parser_add_option(op, optionsds); optionsuf = gt_option_new_bool("suf","input the suffix array", &arguments->inputsuf, false); gt_option_parser_add_option(op, optionsuf); optionlcp = gt_option_new_bool("lcp","input the lcp-table", &arguments->inputlcp, false); gt_option_parser_add_option(op, optionlcp); optionbwt = gt_option_new_bool("bwt", "input the Burrows-Wheeler Transformation", &arguments->inputbwt, false); gt_option_parser_add_option(op, optionbwt); optionbck = gt_option_new_bool("bck","input the bucket table", &arguments->inputbck, false); gt_option_parser_add_option(op, optionbck); optioncmpsuf = gt_option_new_bool("cmpsuf","compare pck derived suftab with " "esa-suftab", &arguments->cmpsuf, false); gt_option_parser_add_option(op, optioncmpsuf); optioncmplcp = gt_option_new_bool("cmplcp","compare pck derived lcptab with " "esa-lcptab", &arguments->cmplcp, false); gt_option_parser_add_option(op, optioncmplcp); gt_option_exclude(optioncmpsuf,optioncmplcp); optionssp = gt_option_new_bool("ssp","input the sequence separator table", &arguments->inputssp, false); gt_option_parser_add_option(op, optionssp); optiondiffcov = gt_option_new_bool("diffcover","check difference covers", &arguments->diffcovercheck,false); gt_option_parser_add_option(op, optiondiffcov); optionwholeleafcheck = gt_option_new_bool("wholeleafcheck", "check if all whole leaves are " "present", &arguments->wholeleafcheck,false); gt_option_parser_add_option(op, optionwholeleafcheck); optionenumlcpitvs = gt_option_new_bool("enumlcpitvs", "enumerate the lcp-intervals", &arguments->enumlcpitvs,false); gt_option_parser_add_option(op, optionenumlcpitvs); optionenumlcpitvtree = gt_option_new_bool("enumlcpitvtree", "enumerate the lcp-interval tree", &arguments->enumlcpitvtree,false); gt_option_parser_add_option(op, optionenumlcpitvtree); optionenumlcpitvtreeBU = gt_option_new_bool("enumlcpitvtreeBU", "enumerate the lcp-interval tree " "(using a bottom-up strategy)", &arguments->enumlcpitvtreeBU,false); gt_option_parser_add_option(op, optionenumlcpitvtreeBU); optionscanesa = gt_option_new_uint("scanesa", "scan suftab and lcptab", &arguments->scanesa,0); gt_option_parser_add_option(op, optionscanesa); optionspmitv = gt_option_new_bool("spmitv", "determine distribution of intervals " "with whole leaves", &arguments->spmitv,false); gt_option_parser_add_option(op, optionspmitv); optionownencseq2file = gt_option_new_bool("ownencseq2file", "write own encseq to file", &arguments->ownencseq2file,false); gt_option_parser_add_option(op, optionownencseq2file); gt_option_imply(optionownencseq2file, optionesaindex); optionverbose = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, optionverbose); gt_option_exclude(optionenumlcpitvs,optionenumlcpitvtree); gt_option_exclude(optionenumlcpitvs,optionenumlcpitvtreeBU); gt_option_exclude(optionenumlcpitvtree,optionenumlcpitvtreeBU); gt_option_imply(optionlcp,optionsuf); gt_option_imply(optionenumlcpitvs,optionesaindex); gt_option_imply(optionsortmaxdepth,optionesaindex); gt_option_imply(optionalgbounds,optionsortmaxdepth); return op; } static int gt_sfxmap_arguments_check(GT_UNUSED int rest_argc, GT_UNUSED void *tool_arguments, GT_UNUSED GtError *err) { return 0; } static void showcomparisonfailureESA(const char *filename, int line, const char *where, const GtEncseq *encseq, GtReadmode readmode, const ESASuffixptr *suftab, unsigned long depth, unsigned long idx1, unsigned long idx2, int cmp, unsigned long maxlcp) { fprintf(stderr,"ERROR: file \"%s\", line %d: ",filename,line); fprintf(stderr,"%s(%lu vs %lu" " %lu=\"", where, idx1, idx2, ESASUFFIXPTRGET(suftab,idx1)); gt_encseq_showatstartposwithdepth(stderr,encseq,readmode, ESASUFFIXPTRGET(suftab,idx1),depth); fprintf(stderr,"\",\""); gt_encseq_showatstartposwithdepth(stderr,encseq,readmode, ESASUFFIXPTRGET(suftab,idx2),depth); fprintf(stderr,"\"=%lu)=%d with maxlcp %lu\n",ESASUFFIXPTRGET(suftab,idx2), cmp, maxlcp); } static unsigned long determinenumberofwholeleaves(const GtEncseq *encseq, GtReadmode readmode) { unsigned long idx, wholeleafcount = 0, totallength; GtEncseqReader* esr; GtUchar cc; bool sequencestart = true; esr = gt_encseq_create_reader_with_readmode(encseq,readmode,0); totallength = gt_encseq_total_length(encseq); for (idx = 0; idx < totallength; idx++) { cc = gt_encseq_reader_next_encoded_char(esr); if (cc == (GtUchar) SEPARATOR) { sequencestart = true; } else { if (sequencestart) { if (cc != (GtUchar) WILDCARD) { wholeleafcount++; } sequencestart = false; } } } gt_encseq_reader_delete(esr); return wholeleafcount; } static int gt_encseq_check_comparefullsuffixes(const GtEncseq *encseq, GtReadmode readmode, unsigned long *maxlcp, unsigned long start1, unsigned long start2, GtEncseqReader *esr1, GtEncseqReader *esr2) { GtUchar cc1, cc2; unsigned long pos1, pos2, totallength; int retval; totallength = gt_encseq_total_length(encseq); if (esr1 != NULL && esr2 != NULL) { gt_encseq_reader_reinit_with_readmode(esr1,encseq,readmode,start1); gt_encseq_reader_reinit_with_readmode(esr2,encseq,readmode,start2); } else { gt_assert(esr1 == NULL && esr2 == NULL); } for (pos1=start1, pos2=start2; /* Nothing */; pos1++, pos2++) { if (pos1 >= totallength) { cc1 = (GtUchar) SEPARATOR; } else { cc1 = (esr1 != NULL) ? gt_encseq_reader_next_encoded_char(esr1) : gt_encseq_get_encoded_char(encseq,pos1,readmode); } if (pos2 >= totallength) { cc2 = (GtUchar) SEPARATOR; } else { cc2 = (esr2 != NULL) ? gt_encseq_reader_next_encoded_char(esr2) : gt_encseq_get_encoded_char(encseq,pos2,readmode); } if (ISSPECIAL(cc1)) { if (ISSPECIAL(cc2)) { if (pos1 < pos2) { *maxlcp = pos1 - start1; retval = -1; /* a < b */ break; } if (pos1 > pos2) { *maxlcp = pos1 - start1; retval = 1; /* a > b */ break; } *maxlcp = pos1 - start1 + 1; retval = 0; /* a = b */ break; } *maxlcp = pos1 - start1; retval = 1; /* a > b */ break; } else { if (ISSPECIAL(cc2)) { *maxlcp = pos1 - start1; retval = -1; /* a < b */ break; } if (cc1 < cc2) { *maxlcp = pos1 - start1; retval = -1; /* a < b */ break; } if (cc1 > cc2) { *maxlcp = pos1 - start1; retval = 1; /* a > b */ break; } } } return retval; } static int gt_checkentiresuftab(const char *filename, int line, const GtEncseq *encseq, GtReadmode readmode, const ESASuffixptr *suftab, unsigned long numberofsuffixes, bool wholeleafcheck, Sequentialsuffixarrayreader *ssar, GT_UNUSED bool specialsareequal, GT_UNUSED bool specialsareequalatdepth0, unsigned long depth, GT_UNUSED GtError *err) { unsigned long idx, maxlcp, currentlcp = 0, countbitsset = 0, wholeleafcount = 0, totallength = gt_encseq_total_length(encseq); int cmp; GtEncseqReader *esr1, *esr2; bool haserr = false; GtBitsequence *startposoccurs; GtEncseqReader *esr; /* #define MAXDIST 100 unsigned long countdist[MAXDIST+1] = {0}; */ gt_error_check(err); gt_assert(!specialsareequal || specialsareequalatdepth0); if (numberofsuffixes == 0) { return 0; } GT_INITBITTAB(startposoccurs,totallength+1); esr = gt_encseq_create_reader_with_readmode(encseq,readmode,0); for (idx = 0; idx < numberofsuffixes; idx++) { unsigned long position = ESASUFFIXPTRGET(suftab,idx); if (GT_ISIBITSET(startposoccurs,position)) { fprintf(stderr,"ERROR: suffix with startpos %lu already occurs\n", ESASUFFIXPTRGET(suftab,idx)); exit(GT_EXIT_PROGRAMMING_ERROR); } GT_SETIBIT(startposoccurs,position); countbitsset++; if (wholeleafcheck) { if (position == 0 || gt_encseq_position_is_separator(encseq, position - 1, readmode)) { /*printf("whole %lu\n",position);*/ wholeleafcount++; } } } gt_encseq_reader_delete(esr); gt_free(startposoccurs); if (wholeleafcheck) { unsigned long expectednumofwholeleaves = determinenumberofwholeleaves(encseq,readmode); if (wholeleafcount != expectednumofwholeleaves) { fprintf(stderr,"wholeleafcount=%lu != %lu=expectednumofwholeleaves\n", wholeleafcount,expectednumofwholeleaves); exit(EXIT_FAILURE); } } if (numberofsuffixes == totallength + 1 && countbitsset != numberofsuffixes) { fprintf(stderr,"ERROR: not all bits are set\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } esr1 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); esr2 = gt_encseq_create_reader_with_readmode(encseq, readmode, 0); gt_assert(numberofsuffixes > 0); gt_assert(ESASUFFIXPTRGET(suftab,0) < totallength); for (idx = 1UL; !haserr && idx < numberofsuffixes; idx++) { if (idx < totallength) { gt_assert(ESASUFFIXPTRGET(suftab,idx) < totallength); cmp = gt_encseq_check_comparefullsuffixes(encseq, readmode, &maxlcp, ESASUFFIXPTRGET(suftab,idx-1), ESASUFFIXPTRGET(suftab,idx), esr1, esr2); if (cmp >= 0) { showcomparisonfailureESA(filename, line, "checkentiresuftab", encseq, readmode, suftab, depth, idx-1, idx, cmp, maxlcp); haserr = true; break; } } else { maxlcp = 0; if (numberofsuffixes == totallength+1) { gt_assert(ESASUFFIXPTRGET(suftab,idx) == totallength); } } if (ssar != NULL) { NEXTSEQUENTIALLCPTABVALUE(currentlcp,ssar); if (maxlcp != currentlcp) { fprintf(stderr,"%lu: startpos=%lu, firstchar=%u, " "startpos=%lu,firstchar=%u", idx, ESASUFFIXPTRGET(suftab,idx-1), (unsigned int) gt_encseq_get_encoded_char(encseq, ESASUFFIXPTRGET(suftab,idx-1), readmode), ESASUFFIXPTRGET(suftab,idx), (ESASUFFIXPTRGET(suftab,idx) < totallength) ? (unsigned int) gt_encseq_get_encoded_char(encseq, ESASUFFIXPTRGET(suftab, idx), readmode) : SEPARATOR); fprintf(stderr,", maxlcp(bruteforce) = %lu != %lu(fast)\n", maxlcp, currentlcp); exit(GT_EXIT_PROGRAMMING_ERROR); } } } gt_encseq_reader_delete(esr1); gt_encseq_reader_delete(esr2); return haserr ? -1 : 0; /* printf("# gt_checkentiresuftab with mode 'specials are %s'\n", specialsareequal ? "equal" : "different"); */ } static int sfxmap_esa(const Sfxmapoptions *arguments, GtLogger *logger, GtError *err) { bool haserr = false; Suffixarray suffixarray; unsigned int demand = 0; if (arguments->inputtis || arguments->delspranges > 0 || arguments->inputsuf) { demand |= SARR_ESQTAB; } if (arguments->inputdes) { demand |= SARR_DESTAB; } if (arguments->inputsds) { demand |= SARR_SDSTAB; } if (arguments->inputsuf) { demand |= SARR_SUFTAB; } if (arguments->inputlcp) { demand |= SARR_LCPTAB; } if (arguments->inputbwt) { demand |= SARR_BWTTAB; } if (arguments->inputbck) { demand |= SARR_BCKTAB; } if (arguments->inputssp) { demand |= SARR_SSPTAB; } if ((arguments->usestream ? streamsuffixarray : gt_mapsuffixarray)(&suffixarray, demand, gt_str_get(arguments->esaindexname), logger, err) != 0) { haserr = true; } if (!haserr && suffixarray.encseq != NULL) { if (arguments->delspranges > 0) { deletethespranges(suffixarray.encseq,arguments->delspranges); } else { unsigned long totallength = gt_encseq_total_length(suffixarray.encseq); if (!haserr && arguments->inputsuf && !arguments->usestream) { if (suffixarray.numberofallsortedsuffixes != totallength + 1 || arguments->bfcheck) { Sequentialsuffixarrayreader *ssar; if (arguments->inputlcp) { ssar = gt_newSequentialsuffixarrayreaderfromfile( gt_str_get(arguments->esaindexname), SARR_LCPTAB | SARR_ESQTAB, SEQ_scan, logger, err); } else { ssar = NULL; } gt_logger_log(logger, "checkentiresuftab"); if (gt_checkentiresuftab(__FILE__, __LINE__, suffixarray.encseq, suffixarray.readmode, suffixarray.suftab, suffixarray.numberofallsortedsuffixes, arguments->wholeleafcheck, ssar, false, /* specialsareequal */ false, /* specialsareequalatdepth0 */ 0, err) != 0) { fprintf(stderr,"gt_checkentiresuftab failed\n"); exit(GT_EXIT_PROGRAMMING_ERROR); } if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } } else { if (suffixarray.numberofallsortedsuffixes == totallength + 1) { gt_suftab_lightweightcheck(suffixarray.encseq, suffixarray.readmode, totallength,suffixarray.suftab, logger); if (arguments->inputlcp) { if (gt_lcptab_lightweightcheck( gt_str_get(arguments->esaindexname), suffixarray.encseq, suffixarray.readmode, suffixarray.suftab, logger,err) != 0) { haserr = true; } } } } if (!haserr) { gt_logger_log(logger, "okay"); } } if (!haserr && arguments->inputbwt) { unsigned long bwtdifferentconsecutive = 0, idx; GT_UNUSED unsigned long longest; gt_assert(suffixarray.longest.defined); longest = suffixarray.longest.valueunsignedlong; if (!haserr && arguments->inputsuf && !arguments->usestream) { gt_assert(suffixarray.numberofallsortedsuffixes == totallength+1); gt_assert(longest < totallength); gt_assert(suffixarray.suftab != NULL); gt_assert(ESASUFFIXPTRGET(suffixarray.suftab,longest) == 0); } if (!arguments->usestream) { for (idx = (unsigned long) 1; idxinputdes && arguments->inputsds) { gt_logger_log(logger, "checkallsequencedescriptions"); gt_encseq_check_descriptions(suffixarray.encseq); } gt_freesuffixarray(&suffixarray); return haserr ? -1 : 0; } static int comparelcpvalue(void *info,unsigned long lcp,GtError *err) { unsigned long currentlcpvalue; Sequentialsuffixarrayreader *ssar = (Sequentialsuffixarrayreader *) info; bool haserr = false; do /* fake loop to allow for the use of a break statement */ { NEXTSEQUENTIALLCPTABVALUE(currentlcpvalue,ssar); if (lcp != currentlcpvalue) { gt_error_set(err,"lcp=%lu != %lu=currentlcpvalue",lcp,currentlcpvalue); haserr = true; break; } break; } while (true); return haserr ? -1 : 0; } static int sfxmap_pck(const Sfxmapoptions *arguments,GtLogger *logger, GtError *err) { bool haserr = false; FMindex *fmindex; unsigned long totallength = 0; unsigned int numofchars = 0; GtEncseqMetadata *encseqmetadata = NULL; Sequentialsuffixarrayreader *ssar; gt_assert(gt_str_length(arguments->pckindexname) > 0); fmindex = gt_loadvoidBWTSeqForSA(gt_str_get(arguments->pckindexname),false, err); if (fmindex == NULL) { haserr = true; } if (!haserr) { encseqmetadata = gt_encseq_metadata_new(gt_str_get(arguments->pckindexname), err); if (encseqmetadata == NULL) { haserr = true; } } if (!haserr) { if (gt_str_length(arguments->esaindexname) > 0 && (arguments->cmpsuf || arguments->cmplcp)) { ssar = gt_newSequentialsuffixarrayreaderfromfile( gt_str_get(arguments->esaindexname), arguments->cmpsuf ? SARR_SUFTAB : SARR_LCPTAB, SEQ_scan, logger, err); if (ssar == NULL) { haserr = true; } } else { ssar = NULL; } } if (!haserr) { unsigned long idx, pos, numofnonspecials; GT_UNUSED unsigned long currentsuffix = 0; GtSpecialcharinfo specialcharinfo; Bwtseqpositioniterator *bspi; gt_assert(encseqmetadata != NULL); totallength = gt_encseq_metadata_total_length(encseqmetadata); specialcharinfo = gt_encseq_metadata_specialcharinfo(encseqmetadata); gt_assert(totallength >= specialcharinfo.specialcharacters); numofnonspecials = totallength - specialcharinfo.specialcharacters; bspi = gt_Bwtseqpositioniterator_new(fmindex,0,totallength); gt_logger_log(logger, "iterate over all suftab values"); for (idx = 0; idx < numofnonspecials; idx++) { if (!gt_Bwtseqpositioniterator_next(&pos,bspi)) { gt_error_set(err,"cannot decode enough symbols"); haserr = true; break; } if (arguments->cmpsuf && ssar != NULL) { NEXTSEQUENTIALSUFTABVALUE(currentsuffix,ssar); gt_assert(pos == currentsuffix); } /*printf("%lu: pos = %lu\n",idx,pos);*/ } gt_assert(idx == numofnonspecials); gt_Bwtseqpositioniterator_delete(bspi); } if (!haserr) { GtAlphabet *alphabet; alphabet = gt_encseq_metadata_alphabet(encseqmetadata); if (alphabet == NULL) { haserr = true; } numofchars = gt_alphabet_num_of_chars(alphabet); } if (!haserr) { if (arguments->cmplcp && ssar != NULL) { gt_logger_log(logger,"perform dfs traversal"); if (gt_fmindex_dfstraverse(fmindex, numofchars, totallength, comparelcpvalue, (void *) ssar, err) != 0) { haserr = true; } } } gt_deletevoidBWTSeq(fmindex); if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } gt_encseq_metadata_delete(encseqmetadata); return haserr ? -1 : 0; } static const Optionargmodedesc stream_esq_operation[] = { {"stream_words","read words from stream",(unsigned int) BSRS_stream_words}, {"stream_single","read single characters from word stream", (unsigned int) BSRS_stream_single}, {"reader_single","read single characters with encseq reader", (unsigned int) BSRS_reader_single}, {"stream_reader_single","read single characters with encseq reader and " "from word stream", (unsigned int) BSRS_stream_reader_single}, {"reader_multi","read kmers with encseq reader", (unsigned int) BSRS_reader_multi}, {"stream_reader_multi","read kmers with encseq reader and from word stream", (unsigned int) BSRS_stream_reader_multi}, {"stream_reader_multi3","read kmers with encseq reader and from word stream", (unsigned int) BSRS_stream_reader_multi3}, {"hashfirstcodes","hash first codes of each sequence in the encseq", (unsigned int) BSRS_hashfirstcodes} }; static int stream_esq(const Sfxmapoptions *arguments,GtError *err) { GtEncseqLoader *el = NULL; GtEncseq *encseq = NULL; bool haserr = false; Bitstreamreadmode brsmode = BSRS_stream_single; int multiarg = 0; unsigned long streamesq_size = gt_str_array_size(arguments->streamesq); if (streamesq_size == 2UL || streamesq_size == 3UL) { int mode; mode = gt_optionargsetsingle(stream_esq_operation, sizeof stream_esq_operation/ sizeof stream_esq_operation[0], "stream-esq", gt_str_array_get(arguments->streamesq,1UL), err); if (mode < 0) { haserr = true; } else { brsmode = (Bitstreamreadmode) mode; if ((brsmode == BSRS_stream_words || brsmode == BSRS_stream_single || brsmode == BSRS_reader_single || brsmode == BSRS_stream_reader_single) && streamesq_size != 2UL) { gt_error_set(err,"if option -streamesq has one of the arguments " "stream_words stream_single reader_single " "stream_reader_single then no other argument " "is allowed"); haserr = true; } else { if ((brsmode == BSRS_reader_multi || brsmode == BSRS_stream_reader_multi || brsmode == BSRS_stream_reader_multi3 || brsmode == BSRS_hashfirstcodes) && streamesq_size != 3UL) { gt_error_set(err,"if option -streamesq has one of the arguments " "stream_multi reader_multi " "stream_reader_multi then one more argument " "is required"); haserr = true; } } } if (!haserr && streamesq_size == 3UL) { if (sscanf(gt_str_array_get(arguments->streamesq,2UL),"%d",&multiarg) != 1 || multiarg < 1) { gt_error_set(err,"if option -streamesq has three arguments, " "then third argument must be positive integer"); haserr = true; } } } else { gt_error_set(err,"option -streamesq must have two or three arguments"); haserr = true; } if (!haserr) { el = gt_encseq_loader_new(); encseq = gt_encseq_loader_load(el, gt_str_array_get(arguments->streamesq,0), err); if (encseq == NULL) { haserr = true; } } if (!haserr && brsmode == BSRS_hashfirstcodes) { if (gt_encseq_mirror(encseq, err) != 0) { haserr = true; } } if (!haserr) { gt_assert(multiarg >= 0); gt_encseq_faststream(encseq,brsmode,(unsigned int) multiarg); } gt_encseq_delete(encseq); gt_encseq_loader_delete(el); return haserr ? -1 : 0; } typedef struct { GtEncseq *encseq; GtReadmode readmode; unsigned int sortmaxdepth; GtSuffixsortspace *sssp; } Checkunsortedrangeinfo; static void sortmaxdepth_processunsortedrange(void *voiddcov, unsigned long subbucketleft, unsigned long width, GT_UNUSED unsigned long depth) { Checkunsortedrangeinfo *curi = voiddcov; gt_checkifprefixesareidentical(__FILE__, __LINE__, curi->encseq, curi->readmode, curi->sssp, subbucketleft, width, (unsigned long) curi->sortmaxdepth); } static int performsortmaxdepth(const Sfxmapoptions *arguments, GtLogger *logger,GtError *err) { bool haserr = false; GtEncseqLoader *el = NULL; Checkunsortedrangeinfo curi; Sfxstrategy sfxstrategy; const char *indexname; indexname = gt_str_get(arguments->esaindexname); el = gt_encseq_loader_new(); curi.encseq = gt_encseq_loader_load(el, indexname, err); if (curi.encseq == NULL) { haserr = true; } if (!haserr) { gt_logger_log(logger,"performsortmaxdepth(%s,%u)", indexname,arguments->sortmaxdepth); defaultsfxstrategy(&sfxstrategy, gt_encseq_bitwise_cmp_ok(curi.encseq) ? false : true); if (gt_str_array_size(arguments->algbounds) > 0 && gt_parse_algbounds(&sfxstrategy,arguments->algbounds,err) != 0) { haserr = true; } } if (!haserr) { unsigned long idx, totallength = gt_encseq_total_length(curi.encseq); curi.sssp = gt_suffixsortspace_new(totallength+1, totallength, true, logger); for (idx=0; idx<=totallength; idx++) { gt_suffixsortspace_setdirect(curi.sssp,idx,idx); } curi.readmode = GT_READMODE_FORWARD; curi.sortmaxdepth = arguments->sortmaxdepth; gt_sortallsuffixesfromstart(curi.sssp, totallength+1, curi.encseq, curi.readmode, NULL, arguments->sortmaxdepth, &sfxstrategy, sortmaxdepth_processunsortedrange, &curi, /* voiddcov */ logger); gt_checksortedsuffixes(__FILE__, __LINE__, curi.encseq, curi.readmode, curi.sssp, 0, totallength+1, false, /* specialsareequal */ false, /* specialsareequalatdepth0 */ (unsigned long) curi.sortmaxdepth); gt_suffixsortspace_delete(curi.sssp,false); } gt_encseq_delete(curi.encseq); gt_encseq_loader_delete(el); return haserr ? -1 : 0; } static int run_diffcover_check(const Sfxmapoptions *arguments, GtError *err) { int had_err = 0; GtEncseqLoader *el = NULL; GtEncseq *encseq = NULL; const char *indexname; indexname = gt_str_get(arguments->esaindexname); el = gt_encseq_loader_new(); encseq = gt_encseq_loader_load(el, indexname, err); if (!encseq) had_err = -1; if (!had_err) { GtReadmode readmode; for (readmode = GT_READMODE_FORWARD; readmode <= GT_READMODE_REVCOMPL; readmode++) { gt_differencecover_check(encseq, readmode); } } gt_encseq_delete(encseq); gt_encseq_loader_delete(el); return had_err; } static int gt_sfxmap_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { bool haserr = false; Sfxmapoptions *arguments = tool_arguments; GtLogger *logger; gt_error_check(err); logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); if (gt_str_length(arguments->esaindexname) > 0) { if (sfxmap_esa(arguments,logger,err) != 0) { haserr = true; } } if (!haserr && gt_str_length(arguments->pckindexname) > 0) { if (sfxmap_pck(arguments,logger,err) != 0) { haserr = true; } } if (!haserr && gt_str_array_size(arguments->streamesq) > 0) { if (stream_esq(arguments,err) != 0) { haserr = true; } } if (!haserr && arguments->sortmaxdepth > 0) { if (performsortmaxdepth(arguments,logger,err) != 0) { haserr = true; } } if (!haserr && arguments->diffcovercheck) { if (run_diffcover_check(arguments, err) != 0) { haserr = true; } } if (!haserr && (arguments->enumlcpitvs || arguments->enumlcpitvtree || arguments->enumlcpitvtreeBU)) { if (gt_runenumlcpvalues(gt_str_get(arguments->esaindexname), arguments->enumlcpitvs ? false : true, arguments->enumlcpitvtreeBU, logger, err) != 0) { haserr = true; } } if (!haserr && arguments->scanesa > 0) { if (gt_runscanesa(gt_str_get(arguments->esaindexname),arguments->scanesa, logger,err) != 0) { haserr = true; } } if (!haserr && arguments->spmitv) { if (gt_process_spmitv(gt_str_get(arguments->esaindexname),logger,err) != 0) { haserr = true; } } if (!haserr && arguments->ownencseq2file) { if (gt_encseq_check_external_twobitencoding_to_file( gt_str_get(arguments->esaindexname), err) != 0) { haserr = true; } } gt_logger_delete(logger); return haserr ? -1 : 0; } GtTool* gt_sfxmap(void) { return gt_tool_new(gt_sfxmap_arguments_new, gt_sfxmap_arguments_delete, gt_sfxmap_option_parser_new, gt_sfxmap_arguments_check, gt_sfxmap_runner); } genometools-1.5.1/src/tools/gt_sfxmap.h000066400000000000000000000017211211610345200201350ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SFXMAP_H #define GT_SFXMAP_H #include "core/tool_api.h" /* the sfxmap tool */ GtTool* gt_sfxmap(void); #endif genometools-1.5.1/src/tools/gt_shredder.c000066400000000000000000000130611211610345200204320ustar00rootroot00000000000000/* Copyright (c) 2008-2010 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/bioseq_iterator.h" #include "core/fasta.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/ma.h" #include "core/unused_api.h" #include "extended/gtdatahelp.h" #include "extended/shredder.h" #include "tools/gt_shredder.h" typedef struct { unsigned long coverage, minlength, maxlength, overlap, width; double sample_probability; GtOutputFileInfo *ofi; GtFile *outfp; } ShredderArguments; static void* gt_shredder_arguments_new(void) { ShredderArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_shredder_arguments_delete(void *tool_arguments) { ShredderArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_shredder_option_parser_new(void *tool_arguments) { ShredderArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *o; gt_assert(arguments); op = gt_option_parser_new("[option ...] [sequence_file ...]", "Shredder sequence file(s) into consecutive pieces " "of random length."); o = gt_option_new_ulong_min("coverage", "set the number of times the " "sequence_file is shreddered", &arguments->coverage, 1, 1); gt_option_parser_add_option(op, o); o = gt_option_new_ulong("minlength", "set the minimum length of the shreddered " "fragments", &arguments->minlength, 300); gt_option_parser_add_option(op, o); o = gt_option_new_ulong("maxlength", "set the maximum length of the shreddered " "fragments", &arguments->maxlength, 700); gt_option_parser_add_option(op, o); o = gt_option_new_ulong("overlap", "set the overlap between consecutive " "pieces", &arguments->overlap, 0); gt_option_parser_add_option(op, o); o = gt_option_new_probability("sample", "take samples of the generated " "sequences pieces with the given probability", &arguments->sample_probability, 1.0); gt_option_parser_add_option(op, o); o = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, o); gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); return op; } static int gt_shredder_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError *err) { ShredderArguments *arguments = tool_arguments; gt_error_check(err); gt_assert(arguments); if (arguments->minlength > arguments->maxlength) { gt_error_set(err, "-minlength must be <= than -maxlength"); return -1; } return 0; } static int gt_shredder_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { ShredderArguments *arguments = tool_arguments; GtBioseqIterator *bsi; unsigned long i; GtBioseq *bioseq; int had_err; GtStr *desc; gt_error_check(err); gt_assert(arguments); /* init */ desc = gt_str_new(); bsi = gt_bioseq_iterator_new(argc - parsed_args, argv + parsed_args); /* shredder */ while (!(had_err = gt_bioseq_iterator_next(bsi, &bioseq, err)) && bioseq) { for (i = 0; i < arguments->coverage; i++) { GtShredder *shredder; unsigned long fragment_length; char *fragment; shredder = gt_shredder_new(bioseq, arguments->minlength, arguments->maxlength); gt_shredder_set_overlap(shredder, arguments->overlap); gt_shredder_set_sample_probability(shredder, arguments->sample_probability); while ((fragment = gt_shredder_shred(shredder, &fragment_length, desc))) { gt_str_append_cstr(desc, " [shreddered fragment]"); gt_fasta_show_entry(gt_str_get(desc), fragment, fragment_length, arguments->width, arguments->outfp); gt_free(fragment); } gt_shredder_delete(shredder); } gt_bioseq_delete(bioseq); } /* free */ gt_bioseq_iterator_delete(bsi); gt_str_delete(desc); return had_err; } GtTool* gt_shredder(void) { return gt_tool_new(gt_shredder_arguments_new, gt_shredder_arguments_delete, gt_shredder_option_parser_new, gt_shredder_arguments_check, gt_shredder_runner); } genometools-1.5.1/src/tools/gt_shredder.h000066400000000000000000000017331211610345200204420ustar00rootroot00000000000000/* Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SHREDDER_H #define GT_SHREDDER_H #include "core/tool_api.h" /* the shredder tool */ GtTool* gt_shredder(void); #endif genometools-1.5.1/src/tools/gt_shulen.c000066400000000000000000000161551211610345200201370ustar00rootroot00000000000000/* Copyright (c) 2010 Stefan Kurtz Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/error_api.h" #include "core/str_api.h" #include "core/logger.h" #include "core/ma_api.h" #include "core/unused_api.h" #include "core/option_api.h" #include "core/tool_api.h" #include "core/versionfunc.h" #include "match/esa-seqread.h" #include "match/esa-shulen.h" #include "match/esa-map.h" #include "tools/gt_shulen.h" typedef struct { bool scanfile, beverbose; GtStr *indexname; GtStrArray *queryfilenames; } Shulengthoptions; static int callmultishulengthdist(const char *indexname, bool scanfile, GtLogger *logger, GtError *err) { bool haserr = false; Sequentialsuffixarrayreader *ssar; gt_error_check(err); ssar = gt_newSequentialsuffixarrayreaderfromfile(indexname, SARR_LCPTAB | SARR_SUFTAB | SARR_ESQTAB, scanfile ? SEQ_scan : SEQ_mappedboth, logger, err); if (ssar == NULL) { haserr = true; } if (!haserr) { if (gt_multiesa2shulengthdist_print(ssar, gt_encseqSequentialsuffixarrayreader(ssar), err) != 0) { haserr = true; } } if (ssar != NULL) { gt_freeSequentialsuffixarrayreader(&ssar); } return haserr ? -1 : 0; } static int callpairswisesshulendistdist(const char *indexname, const GtStrArray *queryfilenames, GtLogger *logger, GtError *err) { bool haserr = false; Suffixarray suffixarray; if (gt_mapsuffixarray(&suffixarray, SARR_SUFTAB | SARR_ESQTAB, indexname, logger, err) != 0) { haserr = true; } if (!haserr) { unsigned long totalgmatchlength = 0; if (gt_esa2shulengthqueryfiles(&totalgmatchlength, &suffixarray, queryfilenames, err) != 0) { haserr = true; } else { printf("%lu\n",totalgmatchlength); } } gt_freesuffixarray(&suffixarray); return haserr ? -1 : 0; } static void *gt_shulengthdist_arguments_new(void) { Shulengthoptions *arguments; arguments = gt_malloc(sizeof (*arguments)); arguments->indexname = gt_str_new(); arguments->queryfilenames = gt_str_array_new(); return arguments; } static void gt_shulengthdist_arguments_delete(void *tool_arguments) { Shulengthoptions *arguments = tool_arguments; if (!arguments) { return; } gt_str_delete(arguments->indexname); gt_str_array_delete(arguments->queryfilenames); gt_free(arguments); } static GtOptionParser *gt_shulengthdist_option_parser_new(void *tool_arguments) { GtOptionParser *op; GtOption *option, *queryoption, *scanoption; Shulengthoptions *arguments = tool_arguments; op = gt_option_parser_new("[options] -ii indexname", "Compute distribution of pairwise " "shustring lengths."); gt_option_parser_set_mail_address(op,""); option = gt_option_new_string("ii", "Specify input index", arguments->indexname, NULL); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); scanoption = gt_option_new_bool("scan","scan index rather than mapping " "it to main memory", &arguments->scanfile, false); gt_option_parser_add_option(op, scanoption); queryoption = gt_option_new_filename_array("q", "Specify query files", arguments->queryfilenames); gt_option_is_development_option(queryoption); gt_option_parser_add_option(op, queryoption); option = gt_option_new_bool("v", "be verbose ", &arguments->beverbose, false); gt_option_parser_add_option(op, option); gt_option_exclude(queryoption,scanoption); return op; } static int gt_shulengthdist_arguments_check(GT_UNUSED int rest_argc, GT_UNUSED void *tool_arguments, GT_UNUSED GtError *err) { return 0; } static int gt_shulengthdist_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { bool haserr = false; Shulengthoptions *arguments = tool_arguments; GtLogger *logger = NULL; gt_error_check(err); logger = gt_logger_new(arguments->beverbose, GT_LOGGER_DEFLT_PREFIX, stdout); if (parsed_args < argc) { gt_error_set(err,"superfluous arguments: \"%s\"",argv[argc-1]); haserr = true; } if (!haserr) { if (gt_str_array_size(arguments->queryfilenames) == 0) { if (callmultishulengthdist(gt_str_get(arguments->indexname), arguments->scanfile, logger, err) != 0) { haserr = true; } } else { if (callpairswisesshulendistdist(gt_str_get(arguments->indexname), arguments->queryfilenames, logger, err) != 0) { haserr = true; } } } gt_logger_delete(logger); return haserr ? -1 : 0; } GtTool* gt_shulengthdist(void) { return gt_tool_new(gt_shulengthdist_arguments_new, gt_shulengthdist_arguments_delete, gt_shulengthdist_option_parser_new, gt_shulengthdist_arguments_check, gt_shulengthdist_runner); } genometools-1.5.1/src/tools/gt_shulen.h000066400000000000000000000016751211610345200201450ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SHULEN_H #define GT_SHULEN_H /* the repfind tool */ GtTool* gt_shulengthdist(void); #endif genometools-1.5.1/src/tools/gt_simreads.c000066400000000000000000000420001211610345200204340ustar00rootroot00000000000000/* Copyright (c) 2009-2010 Giorgio Gonnella Copyright (c) 2010 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/str.h" #include "core/disc_distri_api.h" #include "core/encseq.h" #include "core/fasta.h" #include "core/fa.h" #include "core/file_api.h" #include "core/fileutils.h" #include "core/logger.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/progressbar.h" #include "core/undef_api.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "tools/gt_simreads.h" typedef struct { unsigned long num, minlen, maxlen, coverage; bool show_progressbar, verbose, ds, dl, singlestrand; GtOutputFileInfo *ofi; GtFile *outfp; GtStr *dsfilename, *dlfilename, *distlen_filename; FILE *distlen_file; } GtSimreadsArguments; static void* gt_simreads_arguments_new(void) { GtSimreadsArguments *arguments = gt_calloc((size_t)1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); arguments->distlen_filename = gt_str_new(); arguments->distlen_file = NULL; arguments->dsfilename = gt_str_new(); arguments->dlfilename = gt_str_new(); return arguments; } static void gt_simreads_arguments_delete(void *tool_arguments) { GtSimreadsArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); if (arguments->distlen_file != NULL) gt_fa_fclose(arguments->distlen_file); gt_str_delete(arguments->distlen_filename); gt_str_delete(arguments->dsfilename); gt_str_delete(arguments->dlfilename); gt_free(arguments); } static GtOptionParser* gt_simreads_option_parser_new(void *tool_arguments) { GtSimreadsArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *num_option, *coverage_option, *len_option, *minlen_option, *maxlen_option, *p_option, *v_option, *dl_option, *ds_option, *ss_option, *distlen_option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] ", "Simulate sequencing reads from " "random positions in the input sequence(s)."); /* -num */ num_option = gt_option_new_ulong_min("num", "desired number of reads", &arguments->num, GT_UNDEF_ULONG, 1UL); gt_option_parser_add_option(op, num_option); /* -coverage */ coverage_option = gt_option_new_ulong_min("coverage", "desired coverage of the reads", &arguments->coverage, GT_UNDEF_ULONG, 1UL); gt_option_parser_add_option(op, coverage_option); /* -len */ len_option = gt_option_new_ulong_min("len", "fixed read length", &arguments->minlen, GT_UNDEF_ULONG, 1UL); gt_option_parser_add_option(op, len_option); /* -minlen */ minlen_option = gt_option_new_ulong_min("minlen", "minimal read length", &arguments->minlen, GT_UNDEF_ULONG, 1UL); gt_option_parser_add_option(op, minlen_option); /* -maxlen */ maxlen_option = gt_option_new_ulong_min("maxlen", "maximal read length", &arguments->maxlen, GT_UNDEF_ULONG, 1UL); gt_option_parser_add_option(op, maxlen_option); /* -distlen */ distlen_option = gt_option_new_string("distlen", "use read length distribution file\n" "(in the output format of the seqstat tool)", arguments->distlen_filename, NULL); gt_option_parser_add_option(op, distlen_option); /* output file options */; gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); /* -p */ p_option = gt_option_new_bool("p", "show a progress bar", &arguments->show_progressbar, false); gt_option_parser_add_option(op, p_option); /* -v */ v_option = gt_option_new_bool("v", "be verbose", &arguments->verbose, false); gt_option_parser_add_option(op, v_option); /* -ds */ ds_option = gt_option_new_string("ds", "output distribution of starting" " positions to specified file", arguments->dsfilename, NULL); gt_option_parser_add_option(op, ds_option); gt_option_is_extended_option(ds_option); /* -dl */ dl_option = gt_option_new_string("dl", "output distribution of read lengths" " to specified file", arguments->dlfilename, NULL); gt_option_parser_add_option(op, dl_option); gt_option_is_extended_option(dl_option); /* -ss */ ss_option = gt_option_new_bool("ss", "simulate reads in forward direction " "only", &arguments->singlestrand, false); gt_option_parser_add_option(op, ss_option); gt_option_is_mandatory_either(num_option, coverage_option); gt_option_is_mandatory_either_3(len_option, minlen_option, distlen_option); gt_option_imply(minlen_option, maxlen_option); gt_option_imply(maxlen_option, minlen_option); gt_option_exclude(maxlen_option, len_option); gt_option_exclude(maxlen_option, distlen_option); gt_option_exclude(minlen_option, len_option); gt_option_exclude(minlen_option, distlen_option); gt_option_exclude(len_option, distlen_option); gt_option_exclude(len_option, dl_option); gt_option_parser_set_min_max_args(op, 1U, 1U); gt_option_parser_set_mail_address(op,""); return op; } static int gt_simreads_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError *err) { GtSimreadsArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); arguments->dl = (gt_str_length(arguments->dlfilename) > 0); arguments->ds = (gt_str_length(arguments->dsfilename) > 0); if ((arguments->maxlen != GT_UNDEF_ULONG) && (arguments->minlen > arguments->maxlen)) { gt_error_set(err, "argument to option '-minlen' must be <= argument to option '-maxlen'"); had_err = -1; } /* cannot use imply with outputfile_register_options registered options: */ if (!had_err && arguments->show_progressbar && !arguments->outfp) { gt_error_set(err, "option \"-p\" requires option \"-o\""); had_err = -1; } if (!had_err && gt_str_length(arguments->distlen_filename) > 0) { if (gt_file_exists(gt_str_get(arguments->distlen_filename))) { arguments->distlen_file = gt_fa_fopen(gt_str_get(arguments->distlen_filename), "rb", err); if (arguments->distlen_file == NULL) had_err = -1; } else { gt_error_set(err, "file %s not found", gt_str_get(arguments->distlen_filename)); had_err = -1; } } if (had_err != 0) gt_file_delete(arguments->outfp); return had_err; } static int gt_simreads_plot_disc_distri(unsigned long key, unsigned long long value, GtFile *outfile) { gt_file_xprintf(outfile, "%lu %llu\n", key, value); return 0; } static int gt_simreads_write_dist_file(const char *title, GtDiscDistri *dist, GtStr *filename, GtError *err) { int had_err = 0; GtFile *dfile; gt_assert(filename); gt_assert(dist); gt_error_check(err); dfile = gt_file_new(gt_str_get(filename), "w", err); if (!dfile) { had_err = -1; } else { gt_file_xprintf(dfile, "%s", title); gt_disc_distri_foreach(dist, (GtDiscDistriIterFunc) gt_simreads_plot_disc_distri, dfile); gt_file_delete(dfile); } return had_err; } typedef struct { unsigned long value; unsigned long length; } GtSimreadsDistvalue; static unsigned long gt_simreads_readlen_from_dist( const GtSimreadsDistvalue *dist, const unsigned long value, const unsigned long nofvalues) { unsigned long l = 0, r = nofvalues - 1, m = r >> 1; while (value != dist[m].value) { if (value < dist[m].value) { gt_assert(l <= r); if (m == 0 || value > dist[m - 1].value) return dist[m].length; else r = m - 1; } else { gt_assert(m < nofvalues - 1); l = m + 1; } m = l + ((r - l) >> 1); } return dist[m].length; } static int gt_simreads_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtSimreadsArguments *arguments = tool_arguments; GtEncseq *target = NULL; GtEncseqLoader *target_loader = NULL; GtEncseqReader *target_reader = NULL; GtReadmode readmode; GtStr *read = NULL, *description = NULL; unsigned long output_bases = 0, output_reads = 0, output_rcmode_reads = 0, required_output_bases = 0, target_total_length, startpos, readlen, i; unsigned long long progress = 0; bool fixed_readlen; int had_err = 0; GtUchar ch; GtLogger *logger = NULL; GtDiscDistri *lengths = NULL, *starts = NULL; GtSimreadsDistvalue *input_distlen = NULL; off_t j, nofvalues = 0; gt_error_check(err); gt_assert(arguments); logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stderr); fixed_readlen = (arguments->maxlen == GT_UNDEF_ULONG && arguments->minlen != GT_UNDEF_ULONG); if (arguments->ds) starts = gt_disc_distri_new(); if (arguments->dl) lengths = gt_disc_distri_new(); readlen = arguments->minlen; /* load encseq */ target_loader = gt_encseq_loader_new(); target = gt_encseq_loader_load(target_loader, argv[parsed_args], err); if (target == NULL) had_err = -1; if (!had_err) { target_reader = gt_encseq_create_reader_with_readmode(target, GT_READMODE_FORWARD, 0); } if (!had_err) { target_total_length = gt_encseq_total_length(target); gt_logger_log(logger, "number of templates: %lu", gt_encseq_num_of_sequences(target)); gt_logger_log(logger, "total template length: %lu", target_total_length); if (arguments->coverage != GT_UNDEF_ULONG) { gt_logger_log(logger, "required coverage: %lu", arguments->coverage); required_output_bases = arguments->coverage * target_total_length; if (arguments->show_progressbar) gt_progressbar_start(&progress, (unsigned long long)required_output_bases); } else { gt_assert(arguments->num != GT_UNDEF_ULONG); gt_logger_log(logger, "required number of reads: %lu", arguments->num); if (arguments->show_progressbar) gt_progressbar_start(&progress, (unsigned long long)arguments->num); } read = gt_str_new(); description = gt_str_new(); if (arguments->distlen_file != NULL) { gt_logger_log(logger, "read length distribution file: %s", gt_str_get(arguments->distlen_filename)); nofvalues = gt_file_size(gt_str_get(arguments->distlen_filename)) / (off_t) (sizeof (unsigned long) << 1); input_distlen = gt_malloc(sizeof(GtSimreadsDistvalue) * nofvalues); for (j = 0; j < nofvalues; j++) { (void)gt_xfread(&(input_distlen[j].length), sizeof (unsigned long), (size_t)1, arguments->distlen_file); (void)gt_xfread(&(input_distlen[j].value), sizeof (unsigned long), (size_t)1, arguments->distlen_file); } for (j = (off_t)1; j < nofvalues; j++) { input_distlen[j].value += input_distlen[j - 1].value; } } else if (fixed_readlen) gt_logger_log(logger, "required read length (fixed): %lu", arguments->minlen); else gt_logger_log(logger, "required read length range: %lu-%lu", arguments->minlen, arguments->maxlen); } while (!had_err) { gt_str_reset(read); if (!fixed_readlen) { if (arguments->distlen_file != NULL) { gt_assert(input_distlen != NULL); readlen = gt_simreads_readlen_from_dist(input_distlen, gt_rand_max(input_distlen[nofvalues - 1].value), (unsigned long)nofvalues); gt_assert(readlen <= input_distlen[nofvalues - 1].value); } else { readlen = gt_rand_max(arguments->maxlen - arguments->minlen) + arguments->minlen; } if (arguments->dl) gt_disc_distri_add(lengths, readlen); } gt_assert(target_total_length > readlen); startpos = gt_rand_max(target_total_length - readlen); readmode = (arguments->singlestrand || gt_rand_max(1UL) ? GT_READMODE_FORWARD : GT_READMODE_REVCOMPL); gt_encseq_reader_reinit_with_readmode(target_reader, target, readmode, startpos); for (i = 0; i < readlen; i++) { ch = gt_encseq_reader_next_encoded_char(target_reader); if (ch == (GtUchar)SEPARATOR) { break; } else { gt_str_append_char(read, gt_alphabet_decode( gt_encseq_alphabet(target), ch)); } } if (i < readlen) { /* a separator was found, discard read and restart */ continue; } else { gt_str_reset(description); gt_str_append_cstr(description, "read_"); gt_str_append_ulong(description, output_reads); gt_fasta_show_entry(gt_str_get(description), gt_str_get(read), gt_str_length(read), 60UL, arguments->outfp); output_bases += gt_str_length(read); output_reads++; if (arguments->verbose && readmode == GT_READMODE_FORWARD) output_rcmode_reads++; if (arguments->ds) { if (readmode == GT_READMODE_FORWARD) gt_disc_distri_add(starts, startpos); else gt_disc_distri_add(starts, target_total_length - 1 - startpos); } } /* test break conditions and update progressbar */ if (arguments->coverage != GT_UNDEF_ULONG) { if (arguments->show_progressbar) progress = (unsigned long long)output_bases; if (output_bases >= required_output_bases) break; } else { gt_assert(arguments->num != GT_UNDEF_ULONG); if (arguments->show_progressbar) progress = (unsigned long long)output_reads; if (output_reads == arguments->num) break; } } if (!had_err) { gt_logger_log(logger, "coverage: %.3f", (float) output_bases / target_total_length); gt_logger_log(logger, "total reads length: %lu", output_bases); if (!fixed_readlen) gt_logger_log(logger, "average reads length: %.1f", (float) output_bases / output_reads); gt_logger_log(logger, "number of reads: %lu", output_reads); gt_logger_log(logger, "- forward: %lu", output_reads-output_rcmode_reads); gt_logger_log(logger, "- revcompl: %lu", output_rcmode_reads); } if (!had_err && arguments->dl) had_err = gt_simreads_write_dist_file( "# distribution of read lengths:\n", lengths, arguments->dlfilename, err); if (!had_err && arguments->ds) had_err = gt_simreads_write_dist_file( "# distribution of start positions:\n", starts, arguments->dsfilename, err); if (arguments->show_progressbar) gt_progressbar_stop(); gt_free(input_distlen); gt_str_delete(read); gt_str_delete(description); gt_encseq_reader_delete(target_reader); gt_encseq_loader_delete(target_loader); gt_encseq_delete(target); gt_logger_delete(logger); if (arguments->dl) gt_disc_distri_delete(lengths); if (arguments->ds) gt_disc_distri_delete(starts); return had_err; } GtTool* gt_simreads(void) { return gt_tool_new(gt_simreads_arguments_new, gt_simreads_arguments_delete, gt_simreads_option_parser_new, gt_simreads_arguments_check, gt_simreads_runner); } genometools-1.5.1/src/tools/gt_simreads.h000066400000000000000000000017261211610345200204530ustar00rootroot00000000000000/* Copyright (c) 2009 Giorgio Gonnella Copyright (c) 2009 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SIMREADS_H #define GT_SIMREADS_H #include "core/tool_api.h" /* the simreads tool */ GtTool* gt_simreads(void); #endif genometools-1.5.1/src/tools/gt_skproto.c000066400000000000000000000125411211610345200203350ustar00rootroot00000000000000/* Copyright (c) 2007-2009 Gordon Gremme Copyright (c) 2001 Stefan Kurtz Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef S_SPLINT_S #include #endif #include #include "core/fa.h" #include "core/ma.h" #include "core/option_api.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "core/warning_api.h" #include "tools/gt_skproto.h" #define MAX_LINE_LENGTH 80 static GtOptionParser* gt_skproto_option_parser_new(GT_UNUSED void *tool_arguments) { return gt_option_parser_new("[C-file ...]", "Extract Header-File from C-file(s)."); } static char *forbid[] = { "static ", "typedef ", "int main", "DECLAREARRAYSTRUCT(", "GT_DECLAREARRAYSTRUCT(", "/*@null@*/ static", "/*@unused@*/ static" }; static unsigned char forbiddenstring(GtStr *line) { size_t slen, i; for (i = 0; i < sizeof (forbid) / sizeof (forbid[0]); i++) { slen = strlen(forbid[i]); if (slen <= (size_t) gt_str_length(line) && !strncmp(forbid[i], gt_str_get(line), slen)) { return (unsigned char) 1; } } return 0; } static void removecomments(GtStr *line, int *incomment) { unsigned char *buffer; unsigned long pos=0, bufpos=0; if (!line || !gt_str_length(line)) return; buffer = gt_malloc((size_t) gt_str_length(line) + 1); /* remove comments, except for those used for splint: */ while (pos < gt_str_length(line)) { if (*incomment) { if (!strncmp(gt_str_get(line) + pos, "*/", (size_t) 2)) { *incomment=0; pos+=2; } else pos++; } else { if (gt_str_length(line) > (unsigned long) 2 && gt_str_get(line)[pos] == '/' && gt_str_get(line)[pos+1] == '/') { break; } else if (!strncmp(gt_str_get(line) + pos, "/*", (size_t) 2) && (pos + 2 >= gt_str_length(line) || gt_str_get(line)[pos+2] != '@')) { *incomment=1; pos+=2; } else buffer[bufpos++] = (unsigned char) gt_str_get(line)[pos++]; } } /* remove white spaces */ while (bufpos && buffer[bufpos-1] == ' ') bufpos--; buffer[bufpos]='\0'; /* copy back into line */ memcpy(gt_str_get(line), buffer, (size_t) (bufpos + 1)); gt_str_set_length(line, bufpos); gt_free(buffer); } static void skproto(const char *filename, FILE *fpin) { int linenum = 0, startfunction = 1, incomment = 0; GtStr *line; gt_assert(filename && fpin); line = gt_str_new(); while (gt_str_read_next_line(line, fpin) != EOF) { linenum++; removecomments(line, &incomment); if (gt_str_length(line)) { if (startfunction) { if (isalpha((int) (gt_str_get(line)[0])) || (gt_str_length(line) >= (unsigned long) 3 && strncmp(gt_str_get(line), "/*@", (size_t) 3) == 0)) { if (!forbiddenstring(line)) { if (gt_str_length(line) >= (unsigned long) MAX_LINE_LENGTH) gt_warning("file %s, line %d too long\n", filename, linenum); printf("%s", gt_str_get(line)); if (gt_str_get(line)[gt_str_length(line)-1] == ')') { (void) putchar(';'); (void) putchar('\n'); } else startfunction = 0; (void) putchar('\n'); } } } else { if (gt_str_length(line) >= (unsigned long) MAX_LINE_LENGTH) gt_warning("file %s, line %d too long\n", filename, linenum); printf("%s", gt_str_get(line)); if (gt_str_get(line)[gt_str_length(line)-1] == ')') { (void) putchar(';'); (void) putchar('\n'); startfunction = 1; } (void) putchar('\n'); } } gt_str_reset(line); } gt_str_delete(line); } static int gt_skproto_runner(int argc, const char **argv, int parsed_args, GT_UNUSED void *tool_arguments, GT_UNUSED GtError *err) { FILE *fpin; int i; gt_error_check(err); printf("#ifdef __cplusplus\n"); printf("extern \"C\" {\n"); printf("#endif\n"); if (!argc) skproto("(stdout)", stdin); else { for (i = parsed_args; i < argc; i++) { fpin = gt_fa_xfopen(argv[i], "r"); skproto(argv[i], fpin); gt_fa_xfclose(fpin); } } printf("#ifdef __cplusplus\n"); printf("}\n"); printf("#endif\n"); return 0; } GtTool* gt_skproto(void) { return gt_tool_new(NULL, NULL, gt_skproto_option_parser_new, NULL, gt_skproto_runner); } genometools-1.5.1/src/tools/gt_skproto.h000066400000000000000000000020431211610345200203360ustar00rootroot00000000000000/* Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2001 Stefan Kurtz Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SKPROTO_H #define GT_SKPROTO_H #include "core/tool_api.h" /* the skproto tool */ GtTool* gt_skproto(void); #endif genometools-1.5.1/src/tools/gt_snpper.c000066400000000000000000000131671211610345200201500ustar00rootroot00000000000000/* Copyright (c) 2012-2013 Sascha Steinbiss Copyright (c) 2012-2013 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/trans_table_api.h" #include "core/unused_api.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/gff3_out_stream_api.h" #include "extended/gtdatahelp.h" #include "extended/seqid2file.h" #include "extended/snp_annotator_stream.h" #include "tools/gt_snpper.h" typedef struct { GtSeqid2FileInfo *s2fi; GtOutputFileInfo *ofi; GtFile *outfp; unsigned int ttable; GtStr *desc; } GtSnpperArguments; static void* gt_snpper_arguments_new(void) { GtStrArray *descs; unsigned long i; GtSnpperArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->s2fi = gt_seqid2file_info_new(); arguments->ofi = gt_output_file_info_new(); arguments->desc = gt_str_new_cstr("NCBI translation table number, " "choose from:\n"); descs = gt_trans_table_get_scheme_descriptions(); for (i = 0; i < gt_str_array_size(descs); i++) { gt_str_append_cstr(arguments->desc, gt_str_array_get(descs, i)); if (i != gt_str_array_size(descs)-1) gt_str_append_cstr(arguments->desc, "\n"); } gt_str_array_delete(descs); return arguments; } static void gt_snpper_arguments_delete(void *tool_arguments) { GtSnpperArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_str_delete(arguments->desc); gt_output_file_info_delete(arguments->ofi); gt_seqid2file_info_delete(arguments->s2fi); gt_free(arguments); } static GtOptionParser* gt_snpper_option_parser_new(void *tool_arguments) { GtSnpperArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); op = gt_option_parser_new("[option ...] GFF3_file [GVF_file]", "Annotates SNPs according to their effect on " "the genome as given by a genomic annotation."); /* -trans_table */ option = gt_option_new_uint("trans_table", gt_str_get(arguments->desc), &arguments->ttable, 1); gt_option_parser_add_option(op, option); /* -seqfile, -encseq, -matchdesc, -usedesc and -regionmapping */ gt_seqid2file_register_options(op, arguments->s2fi); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); gt_option_parser_set_min_max_args(op, 1, 2); return op; } static int gt_snpper_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtNodeStream *gff3_in_stream = NULL, *gvf_in_stream = NULL, *gvf_out_stream = NULL, *snp_annotator_stream = NULL; GtSnpperArguments *arguments = tool_arguments; GtRegionMapping *region_mapping = NULL; GtTransTable *tt = NULL; int had_err = 0; gt_error_check(err); gt_assert(arguments); if (!(tt = gt_trans_table_new(arguments->ttable, err))) had_err = -1; if (!had_err) { /* create GFF3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_sorted(argv[parsed_args]); if (!gff3_in_stream) had_err = -1; } if (!had_err) { /* create GVF input stream */ gvf_in_stream = gt_gff3_in_stream_new_sorted(argv[parsed_args+1]); if (!gvf_in_stream) had_err = -1; } if (!had_err) { /* create region mapping */ region_mapping = gt_seqid2file_region_mapping_new(arguments->s2fi, err); if (!region_mapping) had_err = -1; } if (!had_err) { gt_assert(tt); snp_annotator_stream = gt_snp_annotator_stream_new(gvf_in_stream, gff3_in_stream, tt, region_mapping); if (!snp_annotator_stream) had_err = -1; } if (!had_err) { gvf_out_stream = gt_gff3_out_stream_new(snp_annotator_stream, arguments->outfp); if (!gvf_out_stream) had_err = -1; } if (!had_err) { /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gvf_out_stream, err); } /* free */ gt_node_stream_delete(snp_annotator_stream); gt_node_stream_delete(gff3_in_stream); gt_node_stream_delete(gvf_in_stream); gt_node_stream_delete(gvf_out_stream); gt_trans_table_delete(tt); gt_region_mapping_delete(region_mapping); return had_err; } GtTool* gt_snpper(void) { return gt_tool_new(gt_snpper_arguments_new, gt_snpper_arguments_delete, gt_snpper_option_parser_new, NULL, gt_snpper_runner); } genometools-1.5.1/src/tools/gt_snpper.h000066400000000000000000000017311211610345200201470ustar00rootroot00000000000000/* Copyright (c) 2012 Sascha Steinbiss Copyright (c) 2012 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SNPPER_H #define GT_SNPPER_H #include "core/tool_api.h" /* the SNPPER tool */ GtTool* gt_snpper(void); #endif genometools-1.5.1/src/tools/gt_sortbench.c000066400000000000000000000260441211610345200206260ustar00rootroot00000000000000/* Copyright (c) 2010-2011 Sascha Steinbiss Copyright (c) 2010-2011 Stefan Kurtz Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include "core/assert_api.h" #include "core/ma.h" #include "core/mathsupport.h" #include "core/qsort_r.h" #include "core/str.h" #include "core/timer.h" #include "core/radix_sort.h" #include "core/unused_api.h" #include "core/qsort-ulong.h" #include "tools/gt_sortbench.h" #ifdef GT_THREADS_ENABLED #include "core/thread_api.h" #endif typedef struct { GtStr *impl; unsigned long num_values, maxvalue; bool use_aqsort, use_permute, verbose; } QSortBenchArguments; static void *gt_sortbench_arguments_new(void) { QSortBenchArguments *arguments = gt_calloc((size_t) 1, sizeof *arguments); arguments->impl = gt_str_new(); return arguments; } static void gt_sortbench_arguments_delete(void *tool_arguments) { QSortBenchArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->impl); gt_free(arguments); } static const char *gt_sort_implementation_names[] = {"thomas","system","inlinedptr","inlinedarr","direct", "radixinplace","radixlsb",NULL}; static GtOptionParser* gt_sortbench_option_parser_new(void *tool_arguments) { QSortBenchArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...]", "Benchmarks quicksort implementations."); option = gt_option_new_choice( "impl", "implementation\nchoose from " "thomas|system|inlinedptr|inlinedarr|direct|\n" "radixinplace|radixlsb", arguments->impl, gt_sort_implementation_names[0], gt_sort_implementation_names); gt_option_parser_add_option(op, option); option = gt_option_new_ulong("size", "number of integers to sort", &arguments->num_values, 1000000UL); gt_option_parser_add_option(op, option); /* default set to ULONG_MAX-1 to facilitate proper testing of the radixsort implementations (make sure that higher order bits are set) */ option = gt_option_new_ulong("maxval", "maximal integer to sort", &arguments->maxvalue, ULONG_MAX-1); gt_option_parser_add_option(op, option); option = gt_option_new_bool("aqsort", "prepare bad input array using the " "'aqsort' anti-quicksort algorithm", &arguments->use_aqsort, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("permute", "prepare bad input array by " "permutation of unique items", &arguments->use_permute, false); gt_option_parser_add_option(op, option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); return op; } static int gt_sortbench_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GT_UNUSED GtError *err) { GT_UNUSED QSortBenchArguments *arguments = tool_arguments; int had_err = 0; gt_assert(arguments != NULL); return had_err; } static void gt_qbenchsort_permute_ulong_array (unsigned long *arr, unsigned long size) { unsigned long i, j, c; for (i = 0; i < size; ++i) { j = gt_rand_max(size-1); c = arr[i]; arr[i] = arr[j]; arr[j] = c; } } unsigned long *val; /* array, solidified on the fly */ unsigned long ncmp; /* number of comparisons */ unsigned long nsolid; /* number of solid items */ unsigned long candidate; /* pivot candidate */ unsigned long gas; /* gas value = highest sorted value */ #define freeze(x) val[x] = nsolid++ static int gt_sortbench_cmp(const void *px, const void *py) { const unsigned long x = *(const unsigned long*)px; const unsigned long y = *(const unsigned long*)py; ncmp++; if (val[x]==gas && val[y]==gas) { if (x == candidate) { freeze(x); } else { freeze(y); } } if (val[x] == gas) candidate = x; else if (val[y] == gas) candidate = y; if (val[x] < val[y]) { return -1; } if (val[x] > val[y]) { return 1; } return 0; } static void gt_sortbench_aqsort(unsigned long n, unsigned long *a) { unsigned long i; unsigned long *ptr = gt_malloc(sizeof (*ptr) * n); val = a; gas = n-1; nsolid = ncmp = candidate = 0; for (i=0; i (*b)) { return 1; } return 0; } #ifdef QSORTNAME #undef QSORTNAME #endif #define QSORTNAME(NAME) sortbench_##NAME #define sortbench_ARRAY_GET(ARR,RELIDX) ARR[RELIDX] #define sortbench_ARRAY_SET(ARR,RELIDX,VALUE) ARR[RELIDX] = VALUE typedef void * QSORTNAME(Datatype); typedef unsigned long QSORTNAME(Sorttype); static int QSORTNAME(qsortcmparr)(const QSORTNAME(Sorttype) *arr, unsigned long a, unsigned long b, const GT_UNUSED void *data) { cmpcount++; if (arr[a] < arr[b]) { return -1; } if (arr[a] > arr[b]) { return 1; } return 0; } static void gt_sortbench_verify(GT_UNUSED const unsigned long *arr, unsigned long len) { unsigned long idx; for (idx = 1UL; idx < len; idx++) { gt_assert(arr[idx-1] <= arr[idx]); } printf("verified\n"); } #include "match/qsort-array.gen" static void check_inlinedarr_qsort(unsigned long *arr, unsigned long len) { QSORTNAME(gt_inlinedarr_qsort_r) (6UL, false, arr, len, NULL); gt_sortbench_verify(arr,len); } static void check_direct_qsort(unsigned long *arr, unsigned long len) { gt_direct_qsort_ulong (6UL, false, arr, len); gt_sortbench_verify(arr,len); } static int sortcmpwithdata(const void *a,const void *b, GT_UNUSED void *data) { cmpcount++; if (*(Sorttype*)a < *((Sorttype*)b)) { return -1; } if (*(Sorttype*)a > *(Sorttype*)b) { return 1; } return 0; } #include "match/qsort-inplace.gen" static void check_thomas_qsort(unsigned long *arr, unsigned long len) { gt_qsort_r(arr,(size_t) len,sizeof (Sorttype),NULL, sortcmpwithdata); gt_sortbench_verify(arr,len); } static int sortcmpnodata(const void *a,const void *b) { cmpcount++; if (*(Sorttype*)a < *((Sorttype*)b)) { return -1; } if (*(Sorttype*)a > *(Sorttype*)b) { return 1; } return 0; } static void check_gnu_qsort(unsigned long *arr, unsigned long len) { qsort(arr,(size_t) len, sizeof (Sorttype), sortcmpnodata); gt_sortbench_verify(arr,len); } static void check_inlinedptr_qsort(unsigned long *arr, unsigned long len) { gt_inlined_qsort_r(arr, len, NULL); gt_sortbench_verify(arr,len); } static void check_radixsort_lsb(unsigned long *arr, unsigned long len) { /* note that lsb_linear allocates extra temp space of size equal to the area to be sorted */ gt_radixsort_lsb_linear(arr,len); gt_sortbench_verify(arr,len); } static void check_radixsort_inplace(unsigned long *arr, unsigned long len) { gt_radixsort_inplace_ulong(arr,len); gt_sortbench_verify(arr,len); } typedef void (*GtQsortimplementationfunc)(unsigned long *,unsigned long); static GtQsortimplementationfunc gt_sort_implementation_funcs[] = { check_thomas_qsort, check_gnu_qsort, check_inlinedptr_qsort, check_inlinedarr_qsort, check_direct_qsort, check_radixsort_inplace, check_radixsort_lsb }; #define GT_NUM_OF_SORT_IMPLEMENTATIONS\ (sizeof (gt_sort_implementation_funcs)/\ sizeof (gt_sort_implementation_funcs[0])) static int gt_sortbench_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { QSortBenchArguments *arguments = tool_arguments; int had_err = 0; size_t method; GtTimer *timer; unsigned long *array, idx; gt_error_check(err); gt_assert(arguments); if (arguments->verbose) { printf("# number of items = %lu\n", arguments->num_values); printf("# max value items = %lu\n", arguments->maxvalue); printf("# implementation = %s\n", gt_str_get(arguments->impl)); } /* prepare benchmark input data */ array = gt_malloc(sizeof (*array) * arguments->num_values ); if (arguments->use_aqsort) { if (arguments->verbose) printf("# using aqsort\n"); gt_sortbench_aqsort(arguments->num_values, array); } else if (arguments->use_permute) { if (arguments->verbose) printf("# using permuted array\n"); for (idx = 0; idx < arguments->num_values; idx++) { array[idx] = idx; } gt_qbenchsort_permute_ulong_array(array, arguments->num_values); } else { if (arguments->verbose) printf("# using simple array of random numbers\n"); /* use seed initialization to make array deterministic */ srand48(366292341); for (idx = 0; idx < arguments->num_values; idx++) { array[idx] = drand48() * arguments->maxvalue; } } timer = gt_timer_new(); gt_timer_start(timer); /* run implementation */ for (method = 0; method < GT_NUM_OF_SORT_IMPLEMENTATIONS; method++) { if (strcmp(gt_str_get(arguments->impl), gt_sort_implementation_names[method]) == 0) { gt_sort_implementation_funcs[method](array, arguments->num_values); break; } } gt_timer_show(timer, stdout); gt_timer_delete(timer); gt_free(array); if (cmpcount > 0) { printf("cmpcount = %lu\n",cmpcount); } return had_err; } GtTool* gt_sortbench(void) { return gt_tool_new(gt_sortbench_arguments_new, gt_sortbench_arguments_delete, gt_sortbench_option_parser_new, gt_sortbench_arguments_check, gt_sortbench_runner); } genometools-1.5.1/src/tools/gt_sortbench.h000066400000000000000000000017301211610345200206260ustar00rootroot00000000000000/* Copyright (c) CCYY YOUR NAME HERE Copyright (c) CCYY Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SORTBENCH_H #define GT_SORTBENCH_H #include "core/tool_api.h" /* the sortbench tool */ GtTool* gt_sortbench(void); #endif genometools-1.5.1/src/tools/gt_splicesiteinfo.c000066400000000000000000000122011211610345200216450ustar00rootroot00000000000000/* Copyright (c) 2007-2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/versionfunc.h" #include "core/warning_api.h" #include "extended/add_introns_stream_api.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/splice_site_info_stream.h" #include "extended/gtdatahelp.h" #include "extended/seqid2file.h" #include "tools/gt_splicesiteinfo.h" typedef struct { bool addintrons; GtSeqid2FileInfo *s2fi; GtOutputFileInfo *ofi; GtFile *outfp; } SpliceSiteInfoArguments; static void* gt_splicesiteinfo_arguments_new(void) { SpliceSiteInfoArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->s2fi = gt_seqid2file_info_new(); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_splicesiteinfo_arguments_delete(void *tool_arguments) { SpliceSiteInfoArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_seqid2file_info_delete(arguments->s2fi); gt_free(arguments); } static GtOptionParser* gt_splicesiteinfo_option_parser_new(void *tool_arguments) { SpliceSiteInfoArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Show information " "about splice sites given in GFF3 files."); /* -seqfile, -matchdesc, -usedesc and -regionmapping */ gt_seqid2file_register_options(op, arguments->s2fi); /* -addintrons */ option = gt_option_new_bool("addintrons", "add intron features between " "existing exon features\n(before computing the " "information to be shown)", &arguments->addintrons, false); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); return op; } static int gt_splicesiteinfo_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { SpliceSiteInfoArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream = NULL, *add_introns_stream = NULL, *splice_site_info_stream = NULL; GtRegionMapping *region_mapping; int had_err = 0; gt_error_check(err); gt_assert(arguments); if (!had_err) { /* create gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); /* create region mapping */ region_mapping = gt_seqid2file_region_mapping_new(arguments->s2fi, err); if (!region_mapping) had_err = -1; } if (!had_err) { /* create addintrons stream (if necessary) */ if (arguments->addintrons) add_introns_stream = gt_add_introns_stream_new(gff3_in_stream); /* create extract feature stream */ splice_site_info_stream = gt_splice_site_info_stream_new( arguments->addintrons ? add_introns_stream : gff3_in_stream, region_mapping); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(splice_site_info_stream, err); } if (!had_err) { if (!gt_splice_site_info_stream_show(splice_site_info_stream, arguments->outfp)) { gt_warning("input file(s) contained no intron, use option -addintrons to " "add introns automatically"); } } /* free */ gt_node_stream_delete(splice_site_info_stream); gt_node_stream_delete(add_introns_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool* gt_splicesiteinfo(void) { return gt_tool_new(gt_splicesiteinfo_arguments_new, gt_splicesiteinfo_arguments_delete, gt_splicesiteinfo_option_parser_new, NULL, gt_splicesiteinfo_runner); } genometools-1.5.1/src/tools/gt_splicesiteinfo.h000066400000000000000000000017651211610345200216670ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SPLICESITEINFO_H #define GT_SPLICESITEINFO_H #include "core/tool_api.h" /* the splice site info tool */ GtTool* gt_splicesiteinfo(void); #endif genometools-1.5.1/src/tools/gt_splitfasta.c000066400000000000000000000227541211610345200210150ustar00rootroot00000000000000/* Copyright (c) 2003-2010 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/bioseq.h" #include "core/fa.h" #include "core/fasta.h" #include "core/fileutils_api.h" #include "core/ma.h" #include "core/option_api.h" #include "core/output_file.h" #include "core/unused_api.h" #include "core/xansi_api.h" #include "tools/gt_splitfasta.h" typedef struct { unsigned long max_filesize_in_MB, width; unsigned int num_files; GtStr *splitdesc; bool force; } SplitfastaArguments; static void* gt_splitfasta_arguments_new(void) { SplitfastaArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->splitdesc = gt_str_new(); return arguments; } void gt_splitfasta_arguments_delete(void *tool_arguments) { SplitfastaArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->splitdesc); gt_free(arguments); } static GtOptionParser* gt_splitfasta_option_parser_new(void *tool_arguments) { SplitfastaArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *targetsize_option, *splitdesc_option, *o, *numfiles_option; gt_assert(arguments); op = gt_option_parser_new("[option ...] fastafile","Split the supplied fasta " "file."); numfiles_option = gt_option_new_uint_min("numfiles", "set the number of target files " "", &arguments->num_files, 0, 1); gt_option_parser_add_option(op, numfiles_option); targetsize_option = gt_option_new_ulong_min("targetsize", "set the target file " "size in MB", &arguments->max_filesize_in_MB, 50, 1); gt_option_parser_add_option(op, targetsize_option); splitdesc_option = gt_option_new_string("splitdesc", "put every fasta entry in " "a separate file named by its " "description in the given directory", arguments->splitdesc, NULL); gt_option_parser_add_option(op, splitdesc_option); gt_option_exclude(targetsize_option, splitdesc_option); gt_option_exclude(numfiles_option, splitdesc_option); gt_option_exclude(numfiles_option, targetsize_option); o = gt_option_new_width(&arguments->width); gt_option_parser_add_option(op, o); o = gt_option_new_bool(GT_FORCE_OPT_CSTR, "force writing to output file", &arguments->force, false); gt_option_parser_add_option(op, o); gt_option_parser_set_min_max_args(op, 1, 1); return op; } static unsigned long buf_contains_separator(char *buf, int offset, int read_bytes) { char *cc; gt_assert(buf && offset < read_bytes); for (cc = buf + offset; cc < buf + read_bytes; cc++) { if (*cc == '>') return cc - buf + 1; } return 0; } static int split_description(const char *filename, GtStr *splitdesc, unsigned long width, bool force, GtError *err) { unsigned long i; GtBioseq *bioseq; GtStr *descname; int had_err = 0; gt_error_check(err); gt_assert(filename && splitdesc && gt_str_length(splitdesc)); descname = gt_str_new(); if (!(bioseq = gt_bioseq_new(filename, err))) had_err = -1; for (i = 0; !had_err && i < gt_bioseq_number_of_sequences(bioseq); i++) { GtFile *outfp; char *seq; gt_str_reset(descname); gt_str_append_str(descname, splitdesc); gt_str_append_char(descname, '/'); gt_str_append_cstr(descname, gt_bioseq_get_description(bioseq, i)); gt_str_append_cstr(descname, gt_file_suffix(filename)); if (!(outfp = gt_output_file_xopen_forcecheck(gt_str_get(descname), "w", force, err))) { had_err = -1; break; } seq = gt_bioseq_get_sequence(bioseq, i); gt_fasta_show_entry(gt_bioseq_get_description(bioseq, i), seq, gt_bioseq_get_sequence_length(bioseq, i), width, outfp); gt_free(seq); gt_file_delete(outfp); } gt_bioseq_delete(bioseq); gt_str_delete(descname); return had_err; } static int split_fasta_file(const char *filename, unsigned long max_filesize, bool force, GtError *err) { GtFile *srcfp = NULL, *destfp = NULL; GtStr *destfilename = NULL; unsigned long filenum = 0, bytecount = 0, separator_pos; int read_bytes, had_err = 0; char buf[BUFSIZ]; gt_error_check(err); gt_assert(filename && max_filesize); /* open source file */ srcfp = gt_file_xopen(filename, "r"); gt_assert(srcfp); /* read start characters */ if ((read_bytes = gt_file_xread(srcfp, buf, BUFSIZ)) == 0) { gt_error_set(err, "file \"%s\" is empty", filename); had_err = -1; } bytecount += read_bytes; /* make sure the file is in fasta format */ if (!had_err && buf[0] != '>') { gt_error_set(err, "file is not in FASTA format"); had_err = -1; } if (!had_err) { /* open destination file */ destfilename = gt_str_new(); gt_str_append_cstr_nt(destfilename, filename, gt_file_basename_length(filename)); gt_str_append_char(destfilename, '.'); gt_str_append_ulong(destfilename, ++filenum); gt_str_append_cstr(destfilename, gt_file_mode_suffix(gt_file_mode(srcfp))); if (!(destfp = gt_output_file_xopen_forcecheck(gt_str_get(destfilename), "w", force, err))) { had_err = -1; } if (!had_err) gt_file_xwrite(destfp, buf, read_bytes); while (!had_err && (read_bytes = gt_file_xread(srcfp, buf, BUFSIZ)) != 0) { if (bytecount + read_bytes > max_filesize) { int offset = bytecount < max_filesize ? max_filesize - bytecount : 0; if ((separator_pos = buf_contains_separator(buf, offset, read_bytes))) { separator_pos--; gt_assert(separator_pos < read_bytes); if (separator_pos) gt_file_xwrite(destfp, buf, separator_pos); /* close current file */ gt_file_delete(destfp); /* open new file */ gt_str_reset(destfilename); gt_str_append_cstr_nt(destfilename, filename, gt_file_basename_length(filename)); gt_str_append_char(destfilename, '.'); gt_str_append_ulong(destfilename, ++filenum); gt_str_append_cstr(destfilename, gt_file_mode_suffix(gt_file_mode(srcfp))); if (!(destfp = gt_output_file_xopen_forcecheck(gt_str_get(destfilename), "w", force, err))) { had_err = -1; break; } bytecount = read_bytes - separator_pos; /* reset */ gt_assert(buf[separator_pos] == '>'); gt_file_xwrite(destfp, buf + separator_pos, read_bytes - separator_pos); continue; } } bytecount += read_bytes; gt_file_xwrite(destfp, buf, read_bytes); } } /* free */ gt_str_delete(destfilename); /* close current file */ gt_file_delete(destfp); /* close source file */ gt_file_delete(srcfp); return had_err; } static int gt_splitfasta_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { SplitfastaArguments *arguments = tool_arguments; unsigned int num_files; int had_err; off_t file_size; const char* filename; gt_error_check(err); gt_assert(arguments); num_files = arguments->num_files; filename = argv[parsed_args]; if (gt_str_length(arguments->splitdesc)) { had_err = split_description(filename, arguments->splitdesc, arguments->width, arguments->force, err); } else { unsigned long max_filesize; if (num_files) { /* set the maxfile size based on requested number of files */ file_size = gt_file_estimate_size(filename); max_filesize= file_size / num_files ; } else max_filesize= arguments->max_filesize_in_MB << 20; had_err = split_fasta_file(filename, max_filesize, arguments->force, err); } return had_err; } GtTool* gt_splitfasta(void) { return gt_tool_new(gt_splitfasta_arguments_new, gt_splitfasta_arguments_delete, gt_splitfasta_option_parser_new, NULL, gt_splitfasta_runner); } genometools-1.5.1/src/tools/gt_splitfasta.h000066400000000000000000000017551211610345200210200ustar00rootroot00000000000000/* Copyright (c) 2003-2008 Gordon Gremme Copyright (c) 2003-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SPLITFASTA_H #define GT_SPLITFASTA_H #include "core/tool_api.h" /* the splitfasta tool */ GtTool* gt_splitfasta(void); #endif genometools-1.5.1/src/tools/gt_stat.c000066400000000000000000000150151211610345200176060ustar00rootroot00000000000000/* Copyright (c) 2005-2011 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "extended/add_introns_stream_api.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream.h" #include "extended/sort_stream_api.h" #include "extended/stat_stream_api.h" #include "tools/gt_stat.h" typedef struct { bool gene_length_distribution, gene_score_distribution, exon_number_distribution, exon_length_distribution, intron_length_distribution, cds_length_distribution, used_sources, addintrons, verbose; GtOutputFileInfo *ofi; GtFile *outfp; } StatArguments; static void* gt_stat_argument_new(void) { StatArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_stat_arguments_delete(void *tool_arguments) { StatArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_stat_option_parser_new(void *tool_arguments) { StatArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Show statistics about features contained in GFF3 " "files."); /* -genelengthdistri */ option = gt_option_new_bool("genelengthdistri", "show gene length distribution", &arguments->gene_length_distribution, false); gt_option_parser_add_option(op, option); /* -genescoresdistri */ option = gt_option_new_bool("genescoredistri", "show gene score distribution", &arguments->gene_score_distribution, false); gt_option_parser_add_option(op, option); /* -exonlengthdistri */ option = gt_option_new_bool("exonlengthdistri", "show exon length distribution", &arguments->exon_length_distribution, false); gt_option_parser_add_option(op, option); /* -exonnumberdistri */ option = gt_option_new_bool("exonnumberdistri", "show exon number distribution", &arguments->exon_number_distribution, false); gt_option_parser_add_option(op, option); /* -intronlengthdistri */ option = gt_option_new_bool("intronlengthdistri", "show intron length distribution", &arguments->intron_length_distribution, false); gt_option_parser_add_option(op, option); /* -cdslengthdistri */ option = gt_option_new_bool("cdslengthdistri", "show CDS length distribution " "(measured in amino acids)", &arguments->cds_length_distribution, false); gt_option_parser_add_option(op, option); /* -source */ option = gt_option_new_bool("source", "show the set of used source tags " "(column 2 in regular GFF3 lines)", &arguments->used_sources, false); gt_option_parser_add_option(op, option); /* -addintrons */ option = gt_option_new_bool("addintrons", "add intron features between " "existing exon features (before computing stats)", &arguments->addintrons, false); gt_option_parser_add_option(op, option); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); return op; } static int gt_stat_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { StatArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream, *sort_stream, *add_introns_stream = NULL, *stat_stream; int had_err; gt_error_check(err); /* create a gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); if (arguments->verbose) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); /* create add introns stream if -addintrons was used */ if (arguments->addintrons) { sort_stream = gt_sort_stream_new(gff3_in_stream); add_introns_stream = gt_add_introns_stream_new(sort_stream); } /* create s status stream */ stat_stream = gt_stat_stream_new(arguments->addintrons ? add_introns_stream : gff3_in_stream, arguments->gene_length_distribution, arguments->gene_score_distribution, arguments->exon_length_distribution, arguments->exon_number_distribution, arguments->intron_length_distribution, arguments->cds_length_distribution, arguments->used_sources); /* pull the features through the stream , compute the statistics, and free them afterwards */ had_err = gt_node_stream_pull(stat_stream, err); /* show statistics */ if (!had_err) gt_stat_stream_show_stats((GtStatStream*) stat_stream, arguments->outfp); /* free */ gt_node_stream_delete(stat_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool *gt_stat(void) { return gt_tool_new(gt_stat_argument_new, gt_stat_arguments_delete, gt_stat_option_parser_new, NULL, gt_stat_runner); } genometools-1.5.1/src/tools/gt_stat.h000066400000000000000000000017251211610345200176160ustar00rootroot00000000000000/* Copyright (c) 2005-2010 Gordon Gremme Copyright (c) 2005-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_STAT_H #define GT_STAT_H #include "core/tool_api.h" /* the stat tool */ GtTool* gt_stat(void); #endif genometools-1.5.1/src/tools/gt_suffixerator.c000066400000000000000000000021061211610345200213510ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/error.h" #include "match/sfx-run.h" #include "tools/gt_suffixerator.h" int gt_suffixerator(int argc, const char **argv, GtError *err) { gt_error_check(err); return gt_parseargsandcallsuffixerator(true,argc, argv, err); } genometools-1.5.1/src/tools/gt_suffixerator.h000066400000000000000000000017521211610345200213640ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_SUFFIXERATOR_H #define GT_SUFFIXERATOR_H /* the suffixerator tool */ int gt_suffixerator(int argc, const char **argv, GtError*); #endif genometools-1.5.1/src/tools/gt_tagerator.c000066400000000000000000000270061211610345200206260ustar00rootroot00000000000000/* Copyright (c) 2006-2008 Stefan Kurtz Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/option_api.h" #include "core/ma.h" #include "core/str_array.h" #include "core/unused_api.h" #include "core/tool_api.h" #include "match/tagerator.h" #include "match/optionargmode.h" #include "tools/gt_tagerator.h" static const Optionargmodedesc outputmodedesctable[] = { {"tagnum","ordinal number of tag",TAGOUT_TAGNUM}, {"tagseq","tag sequence",TAGOUT_TAGSEQ}, {"dblength","length of match in database",TAGOUT_DBLENGTH}, {"dbstartpos","start position of match in database",TAGOUT_DBSTARTPOS}, {"abspos","absolute value of dbstartpos",TAGOUT_DBABSPOS}, {"dbsequence","sequence of match",TAGOUT_DBSEQUENCE}, {"strand","strand",TAGOUT_STRAND}, {"edist","edit distance",TAGOUT_EDIST}, {"tagstartpos","start position of match in tag (only for -maxocc)", TAGOUT_TAGSTARTPOS}, {"taglength","length of match in tag (only for -maxocc)",TAGOUT_TAGLENGTH}, {"tagsuffixseq","suffix tag involved in match (only for -maxocc)", TAGOUT_TAGSUFFIXSEQ} }; static void *gt_tagerator_arguments_new(void) { TageratorOptions *arguments; arguments = gt_malloc(sizeof (TageratorOptions)); arguments->indexname = gt_str_new(); arguments->tagfiles = gt_str_array_new(); arguments->outputspec = gt_str_array_new(); arguments->outputmode = 0; arguments->numberofmodedescentries = sizeof (outputmodedesctable)/ sizeof (outputmodedesctable[0]); arguments->outputhelp = gt_getargmodekeywords(outputmodedesctable, arguments->numberofmodedescentries, "output"); arguments->modedesc = outputmodedesctable; return arguments; } static void gt_tagerator_arguments_delete(void *tool_arguments) { TageratorOptions *arguments = tool_arguments; if (!arguments) { return; } gt_str_delete(arguments->indexname); gt_str_delete(arguments->outputhelp); gt_str_array_delete(arguments->tagfiles); gt_str_array_delete(arguments->outputspec); gt_option_delete(arguments->refoptionesaindex); gt_option_delete(arguments->refoptionpckindex); gt_free(arguments); } static GtOptionParser* gt_tagerator_option_parser_new(void *tool_arguments) { TageratorOptions *arguments = tool_arguments; GtOptionParser *op; GtOption *option, *optionrw, *optiononline, *optioncmp, *optionesaindex, *optionpckindex, *optionmaxdepth, *optionbest; gt_assert(arguments != NULL); op = gt_option_parser_new("[options] -q tagfile [-esa|-pck] indexname", "Map short sequence tags in given index."); gt_option_parser_set_mail_address(op,""); option = gt_option_new_filename_array("q", "Specify files containing the short " "sequence tags", arguments->tagfiles); gt_option_parser_add_option(op, option); gt_option_is_mandatory(option); option = gt_option_new_long("e", "Specify the allowed number of differences " "(replacements/insertions/deletions)", &arguments->userdefinedmaxdistance, -1L); gt_option_parser_add_option(op, option); optionesaindex = gt_option_new_string("esa", "Specify index (enhanced suffix array)", arguments->indexname, NULL); gt_option_parser_add_option(op, optionesaindex); arguments->refoptionesaindex = gt_option_ref(optionesaindex); optionpckindex = gt_option_new_string("pck", "Specify index (packed index)", arguments->indexname, NULL); gt_option_parser_add_option(op, optionpckindex); arguments->refoptionpckindex = gt_option_ref(optionpckindex); gt_option_exclude(optionesaindex,optionpckindex); gt_option_is_mandatory_either(optionesaindex,optionpckindex); optionmaxdepth = gt_option_new_int("maxdepth", "Use the data in the .pbt file only up to " "this depth (only relevant with option -pck)", &arguments->userdefinedmaxdepth, -1); gt_option_parser_add_option(op, optionmaxdepth); gt_option_is_development_option(optionmaxdepth); optiononline = gt_option_new_bool("online","Perform online searches", &arguments->doonline, false); gt_option_parser_add_option(op, optiononline); gt_option_is_development_option(optiononline); optioncmp = gt_option_new_bool("cmp","compare results of offline and online " "searches", &arguments->docompare, false); gt_option_parser_add_option(op, optioncmp); gt_option_exclude(optiononline,optioncmp); gt_option_is_development_option(optioncmp); optionrw = gt_option_new_bool("rw","Replace wildcard in tag by random char", &arguments->replacewildcard, false); gt_option_parser_add_option(op, optionrw); gt_option_is_development_option(optionrw); option = gt_option_new_bool("nod","Do not compute direct matches", &arguments->nofwdmatch, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("nop","Do not compute palindromic matches " "(i.e. no reverse complemented matches.)", &arguments->norcmatch, false); gt_option_parser_add_option(op, option); optionbest = gt_option_new_bool("best","Compute only best matches, i.e. only " "for smallest edit distance with matches", &arguments->best, false); gt_option_parser_add_option(op, optionbest); gt_option_exclude(optiononline,optionbest); gt_option_exclude(optioncmp,optionbest); option = gt_option_new_ulong_min("maxocc", "specify max number of match-occurrences", &arguments->maxintervalwidth,0,1UL); gt_option_parser_add_option(op, option); option = gt_option_new_bool("skpp", "Skip prefix of pattern (only in pdiff mode)", &arguments->skpp, false); gt_option_parser_add_option(op, option); option = gt_option_new_bool("withwildcards","output matches containing " "wildcard characters (e.g. N); only relevant for " "approximate matching", &arguments->nowildcards, true); gt_option_parser_add_option(op, option); option = gt_option_new_string_array("output", gt_str_get(arguments->outputhelp), arguments->outputspec); gt_option_parser_add_option(op, option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); return op; } static int gt_tagerator_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GtError *err) { TageratorOptions *arguments = tool_arguments; unsigned long idx; if (!arguments->nowildcards && arguments->userdefinedmaxdistance <= 0) { arguments->nowildcards = true; } if (gt_option_is_set(arguments->refoptionesaindex)) { arguments->withesa = true; } else { gt_assert(gt_option_is_set(arguments->refoptionpckindex)); arguments->withesa = false; } if (arguments->userdefinedmaxdistance < 0) { if (arguments->doonline) { gt_error_set(err,"option -online requires option -e"); return -1; } if (arguments->maxintervalwidth == 0) { gt_error_set(err, "if option -e is not used then option -maxocc is required"); return -1; } if (arguments->best) { gt_error_set(err,"option -best requires option -e"); return -1; } } else { if (arguments->skpp && (arguments->userdefinedmaxdistance == 0 || arguments->maxintervalwidth == 0)) { gt_error_set(err,"option -skpp only works in pdiff mode"); return -1; } } for (idx=0; idxoutputspec); idx++) { if (gt_optionargaddbitmask(outputmodedesctable, sizeof (outputmodedesctable)/ sizeof (outputmodedesctable[0]), &arguments->outputmode, "-output", gt_str_array_get(arguments->outputspec,idx), err) != 0) { return -1; } } if (arguments->outputmode == 0) { arguments->outputmode = TAGOUT_TAGNUM | TAGOUT_TAGSEQ | TAGOUT_DBLENGTH | TAGOUT_DBSTARTPOS | TAGOUT_STRAND; if (arguments->maxintervalwidth > 0) { arguments->outputmode |= TAGOUT_TAGLENGTH; } } return 0; } static int gt_tagerator_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { TageratorOptions *arguments = tool_arguments; bool haserr = false; unsigned long idx; gt_error_check(err); gt_assert(arguments != NULL); gt_assert(parsed_args == argc); if (arguments->userdefinedmaxdistance == -1L) { printf("# computing matching statistics\n"); } else { if (arguments->maxintervalwidth == 0) { printf("# computing complete matches"); } else { printf("# computing prefix matches"); } if (arguments->userdefinedmaxdistance == 0) { printf(" without differences (exact matches)"); } else { printf(" with up to %ld differences",arguments->userdefinedmaxdistance); } if (arguments->maxintervalwidth > 0) { printf(" and at most %lu occurrences in the subject sequences", arguments->maxintervalwidth); } printf("\n"); } printf("# indexname(%s)=%s\n",arguments->withesa ? "esa" : "pck", gt_str_get(arguments->indexname)); for (idx=0; idxtagfiles); idx++) { printf("# queryfile=%s\n",gt_str_array_get(arguments->tagfiles,idx)); } if (gt_runtagerator(arguments,err) != 0) { haserr = true; } return haserr ? -1 : 0; } GtTool* gt_tagerator(void) { return gt_tool_new(gt_tagerator_arguments_new, gt_tagerator_arguments_delete, gt_tagerator_option_parser_new, gt_tagerator_arguments_check, gt_tagerator_runner); } genometools-1.5.1/src/tools/gt_tagerator.h000066400000000000000000000017351211610345200206340ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_TAGERATOR_H #define GT_TAGERATOR_H #include "core/tool_api.h" /* the tagerator tool */ GtTool* gt_tagerator(void); #endif genometools-1.5.1/src/tools/gt_tallymer.c000066400000000000000000001024701211610345200204660ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/cstr_array.h" #include "core/defined-types.h" #include "core/error.h" #include "core/format64.h" #include "core/intbits.h" #include "core/logger.h" #include "core/ma_api.h" #include "core/option_api.h" #include "core/str.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "core/minmax.h" #include "extended/toolbox.h" #include "match/optionargmode.h" #include "match/tyr-mkindex.h" #include "match/tyr-show.h" #include "match/tyr-search.h" #include "match/tyr-mersplit.h" #include "match/tyr-occratio.h" #include "tools/gt_tallymer.h" typedef enum { Autoprefixlength, Undeterminedprefixlength, Determinedprefixlength } Prefixlengthflag; typedef struct { unsigned int value; Prefixlengthflag flag; } Prefixlengthvalue; typedef struct { unsigned long mersize, userdefinedminocc, userdefinedmaxocc; unsigned int userdefinedprefixlength; Prefixlengthvalue prefixlength; GtOption *refoptionpl; GtStr *str_storeindex, *str_inputindex; bool storecounts, performtest, verbose, scanfile; } Tyr_mkindex_options; static void *gt_tyr_mkindex_arguments_new(void) { Tyr_mkindex_options *arguments = gt_malloc(sizeof (Tyr_mkindex_options)); arguments->str_storeindex = gt_str_new(); arguments->str_inputindex = gt_str_new(); return arguments; } static void gt_tyr_mkindex_arguments_delete(void *tool_arguments) { Tyr_mkindex_options *arguments = tool_arguments; if (!arguments) { return; } gt_str_delete(arguments->str_storeindex); gt_str_delete(arguments->str_inputindex); gt_option_delete(arguments->refoptionpl); gt_free(arguments); } static GtOptionParser *gt_tyr_mkindex_option_parser_new(void *tool_arguments) { GtOptionParser *op; GtOption *option, *optionminocc, *optionmaxocc, *optionpl, *optionstoreindex, *optionstorecounts, *optionscan, *optionesa; Tyr_mkindex_options *arguments = tool_arguments; op = gt_option_parser_new("[options] -esa suffixerator-index [options]", "Count and index k-mers in the given enhanced " "suffix array for a fixed value of k."); gt_option_parser_set_mail_address(op, ""); optionesa = gt_option_new_string("esa","specify suffixerator-index\n" "(mandatory option)", arguments->str_inputindex, NULL); gt_option_is_mandatory(optionesa); gt_option_parser_add_option(op, optionesa); option = gt_option_new_ulong("mersize", "Specify the mer size.", &arguments->mersize, 20UL); gt_option_parser_add_option(op, option); optionminocc = gt_option_new_ulong("minocc", "Specify the minimum occurrence number for " "the mers to output/index", &arguments->userdefinedminocc, 0); gt_option_parser_add_option(op, optionminocc); optionmaxocc = gt_option_new_ulong("maxocc", "Specify the maximum occurrence number for " "the mers to output/index", &arguments->userdefinedmaxocc, 0); gt_option_parser_add_option(op, optionmaxocc); optionpl = gt_option_new_uint_min("pl", "specify prefix length for bucket boundary construction\n" "recommendation: use without argument;\n" "then a reasonable prefix length is automatically determined", &arguments->userdefinedprefixlength, 0, 1U); gt_option_argument_is_optional(optionpl); gt_option_parser_add_option(op, optionpl); arguments->refoptionpl = gt_option_ref(optionpl); optionstoreindex = gt_option_new_string("indexname", "store the mers specified by options " "-maxocc and -minocc in an index", arguments->str_storeindex, NULL); gt_option_parser_add_option(op, optionstoreindex); optionstorecounts = gt_option_new_bool("counts", "store counts of the mers", &arguments->storecounts,false); gt_option_parser_add_option(op, optionstorecounts); option = gt_option_new_bool("test", "perform tests to verify program " "correctness", &arguments->performtest, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); optionscan = gt_option_new_bool("scan", "read enhanced suffix array sequentially " "instead of mapping it to memory", &arguments->scanfile, false); gt_option_parser_add_option(op, optionscan); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); gt_option_imply(optionpl, optionstoreindex); gt_option_imply(optionstorecounts, optionstoreindex); gt_option_imply_either_2(optionstoreindex,optionminocc,optionmaxocc); return op; } static int gt_tyr_mkindex_arguments_check(int rest_argc, void *tool_arguments, GtError *err) { Tyr_mkindex_options *arguments = tool_arguments; if (rest_argc != 0) { gt_error_set(err,"superfluous arguments"); return -1; } if (gt_option_is_set(arguments->refoptionpl)) { if (arguments->userdefinedprefixlength == 0) { arguments->prefixlength.flag = Autoprefixlength; arguments->prefixlength.value = 0; } else { arguments->prefixlength.flag = Determinedprefixlength; arguments->prefixlength.value = arguments->userdefinedprefixlength; } } else { arguments->prefixlength.flag = Undeterminedprefixlength; arguments->prefixlength.value = 0; } return 0; } static int gt_tyr_mkindex_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { Tyr_mkindex_options *arguments = tool_arguments; GtLogger *logger; bool haserr = false; logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); if (arguments->verbose) { printf("# mersize=%lu\n",arguments->mersize); if (arguments->userdefinedminocc > 0) { printf("# minocc=%lu\n",arguments->userdefinedminocc); } else { printf("# minocc=undefined\n"); } if (arguments->userdefinedmaxocc > 0) { printf("# maxocc=%lu\n",arguments->userdefinedmaxocc); } else { printf("# maxocc=undefined\n"); } printf("# prefixlength="); if (arguments->prefixlength.flag == Autoprefixlength) { printf("automatic"); } else { if (arguments->prefixlength.flag == Determinedprefixlength) { printf("%u",arguments->prefixlength.value); } else { printf("undefined"); } } printf("\n"); if (gt_str_length(arguments->str_storeindex) > 0) { printf("# storeindex=%s\n",gt_str_get(arguments->str_storeindex)); } printf("# inputindex=%s\n",gt_str_get(arguments->str_inputindex)); } if (gt_merstatistics(gt_str_get(arguments->str_inputindex), arguments->mersize, arguments->userdefinedminocc, arguments->userdefinedmaxocc, gt_str_get(arguments->str_storeindex), arguments->storecounts, arguments->scanfile, arguments->performtest, logger, err) != 0) { haserr = true; } if (!haserr && gt_str_length(arguments->str_storeindex) > 0 && arguments->prefixlength.flag != Undeterminedprefixlength) { Definedunsignedint callprefixlength; if (arguments->prefixlength.flag == Determinedprefixlength) { callprefixlength.defined = true; callprefixlength.valueunsignedint = arguments->prefixlength.value; } else { callprefixlength.defined = false; } if (gt_constructmerbuckets(gt_str_get(arguments->str_storeindex), &callprefixlength,err) != 0) { haserr = true; } } gt_logger_delete(logger); return haserr ? - 1 : 0; } static GtTool *gt_tyr_mkindex(void) { return gt_tool_new(gt_tyr_mkindex_arguments_new, gt_tyr_mkindex_arguments_delete, gt_tyr_mkindex_option_parser_new, gt_tyr_mkindex_arguments_check, gt_tyr_mkindex_runner); } typedef struct { GtStrArray *mersizesstrings, *outputspec; GtStr *str_inputindex; GtOption *refoptionmersizes; unsigned long minmersize, maxmersize, stepmersize; GtBitsequence *outputvector; unsigned int outputmode; bool scanfile, verbose; } Tyr_occratio_options; static void *gt_tyr_occratio_arguments_new(void) { Tyr_occratio_options *arguments = gt_malloc(sizeof (Tyr_occratio_options)); arguments->mersizesstrings = gt_str_array_new(); arguments->outputspec = gt_str_array_new(); arguments->str_inputindex = gt_str_new(); arguments->outputvector = NULL; arguments->outputmode = 0; return arguments; } static void gt_tyr_occratio_arguments_delete(void *tool_arguments) { Tyr_occratio_options *arguments = tool_arguments; if (!arguments) { return; } gt_str_array_delete(arguments->mersizesstrings); gt_str_array_delete(arguments->outputspec); gt_str_delete(arguments->str_inputindex); gt_option_delete(arguments->refoptionmersizes); gt_free(arguments->outputvector); gt_free(arguments); } static GtOptionParser *gt_tyr_occratio_option_parser_new(void *tool_arguments) { GtOptionParser *op; GtOption *optionmersizes, *optionesa, *optionminmersize, *optionmaxmersize, *optionstep, *optionoutput, *option; Tyr_occratio_options *arguments = tool_arguments; op = gt_option_parser_new("[options] -esa suffixerator-index [options]", "Compute occurrence ratio for a set of sequences " "represented by an enhanced suffix array."); gt_option_parser_set_mail_address(op, ""); optionesa = gt_option_new_string("esa","specify suffixerator-index\n" "(mandatory option)", arguments->str_inputindex, NULL); gt_option_is_mandatory(optionesa); gt_option_parser_add_option(op, optionesa); optionminmersize = gt_option_new_ulong_min("minmersize", "specify minimum mer size for which " "to compute the occurrence distribution", &arguments->minmersize,0,1UL); gt_option_parser_add_option(op, optionminmersize); optionmaxmersize = gt_option_new_ulong_min("maxmersize", "specify maximum mer size for which " "to compute the occurrence distribution", &arguments->maxmersize,0,1UL); gt_option_parser_add_option(op, optionmaxmersize); optionstep = gt_option_new_ulong_min("step", "specify step size when specifying mer sizes", &arguments->stepmersize,1UL,1UL); gt_option_parser_add_option(op, optionstep); optionmersizes = gt_option_new_string_array( "mersizes", "specify mer sizes as non-empty sequence of " "non decreasing positive integers", arguments->mersizesstrings); arguments->refoptionmersizes = gt_option_ref(optionmersizes); gt_option_parser_add_option(op, optionmersizes); optionoutput = gt_option_new_string_array( "output", "use combination of the following keywords: " "unique nonunique nonuniquemulti relative total " "to specify kind of output", arguments->outputspec); gt_option_parser_add_option(op, optionoutput); option = gt_option_new_bool("scan", "read suffixerator-index sequentially " "instead of mapping it to memory", &arguments->scanfile, false); gt_option_parser_add_option(op, option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); gt_option_exclude(optionmersizes,optionminmersize); gt_option_exclude(optionmersizes,optionmaxmersize); gt_option_exclude(optionmersizes,optionstep); return op; } #define TYROCC_OUTPUTUNIQUE 1U #define TYROCC_OUTPUTNONUNIQUE (1U << 1) #define TYROCC_OUTPUTNONUNIQUEMULTI (1U << 2) #define TYROCC_OUTPUTRELATIVE (1U << 3) #define TYROCC_OUTPUTTOTAL (1U << 4) static int gt_tyr_occratio_arguments_check(int rest_argc, void *tool_arguments, GtError *err) { Tyr_occratio_options *arguments = tool_arguments; bool haserr = false; Optionargmodedesc outputmodedesctable[] = { {"unique","number of unique mers",TYROCC_OUTPUTUNIQUE}, {"nonunique","number of nonunique mers (single count)", TYROCC_OUTPUTNONUNIQUE}, {"nonuniquemulti","number of nonunique mers (multi count)", TYROCC_OUTPUTNONUNIQUEMULTI}, {"relative","fraction of unique/non-unique mers relative to all mers", TYROCC_OUTPUTRELATIVE}, {"total","number of all mers",TYROCC_OUTPUTTOTAL} }; if (rest_argc != 0) { gt_error_set(err,"superfluous arguments"); return -1; } if (gt_option_is_set(arguments->refoptionmersizes)) { unsigned long *mersizes = NULL; unsigned long idx, numofmersizes = gt_str_array_size(arguments->mersizesstrings); if (numofmersizes == 0) { gt_error_set(err,"missing argument to option -mersizes:"); haserr = true; } else { mersizes = gt_malloc(sizeof (*mersizes) * numofmersizes); for (idx=0; idxmersizesstrings,idx), "%ld",&readnum) != 1 || readnum <= 0) { gt_error_set(err,"invalid argument \"%s\" of option -mersizes: " "must be a positive integer", gt_str_array_get(arguments->mersizesstrings,idx)); haserr = true; break; } mersizes[idx] = (unsigned long) readnum; if (idx > 0 && mersizes[idx-1] >= mersizes[idx]) { gt_error_set(err,"invalid argumnt %s to option -mersizes: " "positive numbers must be strictly increasing", gt_str_array_get(arguments->mersizesstrings,idx)); haserr = true; break; } } } if (!haserr) { gt_assert(mersizes != NULL); arguments->minmersize = mersizes[0]; arguments->maxmersize = mersizes[numofmersizes-1]; GT_INITBITTAB(arguments->outputvector,arguments->maxmersize+1); for (idx=0; idxoutputvector,mersizes[idx]); } } gt_free(mersizes); } else { if (arguments->minmersize == 0) { gt_error_set(err,"if option -mersizes is not used, then option " "-minmersize is mandatory"); haserr = true; } if (!haserr) { if (arguments->maxmersize == 0) { gt_error_set(err,"if option -mersizes is not used, then option " "-maxmersize is mandatory"); haserr = true; } } if (!haserr) { if (arguments->minmersize > arguments->maxmersize) { gt_error_set(err,"minimum mer size must not be larger than " "maximum mer size"); haserr = true; } } if (!haserr) { if (arguments->minmersize+arguments->stepmersize > arguments->maxmersize) { gt_error_set(err,"minimum mer size + step value must be smaller or " "equal to maximum mersize"); haserr = true; } } if (!haserr) { unsigned long outputval; GT_INITBITTAB(arguments->outputvector,arguments->maxmersize+1); for (outputval = arguments->minmersize; outputval <= arguments->maxmersize; outputval += arguments->stepmersize) { GT_SETIBIT(arguments->outputvector,outputval); } } } if (!haserr) { unsigned long idx; for (idx=0; idxoutputspec); idx++) { if (gt_optionargaddbitmask(outputmodedesctable, sizeof (outputmodedesctable)/ sizeof (outputmodedesctable[0]), &arguments->outputmode, "-output", gt_str_array_get(arguments->outputspec,idx), err) != 0) { haserr = true; break; } } } if (!haserr) { if ((arguments->outputmode & TYROCC_OUTPUTRELATIVE) && !(arguments->outputmode & (TYROCC_OUTPUTUNIQUE | TYROCC_OUTPUTNONUNIQUE | TYROCC_OUTPUTNONUNIQUEMULTI))) { gt_error_set(err,"argument relative to option -output requires that one " "of the arguments unique, nonunique, or nonuniquemulti " "is used"); haserr = true; } } return haserr ? - 1: 0; } static void showitvdistribution(const GtArrayuint64_t *dist, const GtBitsequence *outputvector) { unsigned long idx; gt_assert(outputvector != NULL); for (idx=0; idx < dist->nextfreeuint64_t; idx++) { if (GT_ISIBITSET(outputvector,idx) && dist->spaceuint64_t[idx] > 0) { /*@ignore@*/ printf("%lu " Formatuint64_t "\n", idx, PRINTuint64_tcast(dist->spaceuint64_t[idx])); /*@end@*/ } } } typedef enum { Onlyshowsum, Showfirst, Showsecond } Summode; static void showitvsumdistributionoftwo(Summode mode, const GtArrayuint64_t *dist1, const GtArrayuint64_t *dist2, const GtBitsequence *outputvector) { unsigned long idx; uint64_t sumoftwo, tmp; gt_assert(outputvector != NULL); for (idx=0; /* Nothing */; idx++) { if (GT_ISIBITSET(outputvector,idx)) { if (idx < dist1->nextfreeuint64_t) { if (idx < dist2->nextfreeuint64_t) { sumoftwo = dist1->spaceuint64_t[idx] + dist2->spaceuint64_t[idx]; } else { sumoftwo = dist1->spaceuint64_t[idx]; } } else { if (idx < dist2->nextfreeuint64_t) { sumoftwo = dist2->spaceuint64_t[idx]; } else { break; } } if (sumoftwo > 0) { if (mode == Onlyshowsum) { /*@ignore@*/ printf("%lu " Formatuint64_t "\n", idx, PRINTuint64_tcast(sumoftwo)); /*@end@*/ } else { if (mode == Showfirst) { tmp = (idx < dist1->nextfreeuint64_t) ? dist1->spaceuint64_t[idx] : 0; } else { tmp = (idx < dist2->nextfreeuint64_t) ? dist2->spaceuint64_t[idx] : 0; } if (tmp > 0) { /*@ignore@*/ printf("%lu " Formatuint64_t " %.3f\n", idx, PRINTuint64_tcast(tmp), (double) tmp/(double) sumoftwo); /*@end@*/ } } } } } } #define ONLYONCE "(counting each non unique mer only once)" #define MORETHANONCE "(counting each non unique mer more than once)" static void showoccratios(const GtArrayuint64_t *uniquedistribution, const GtArrayuint64_t *nonuniquedistribution, const GtArrayuint64_t *nonuniquemultidistribution, unsigned int outputmode, const GtBitsequence *outputvector) { if (outputmode & TYROCC_OUTPUTUNIQUE) { printf("# distribution of unique mers\n"); if (outputmode & TYROCC_OUTPUTRELATIVE) { showitvsumdistributionoftwo(Showfirst, uniquedistribution, nonuniquedistribution, outputvector); } else { showitvdistribution(uniquedistribution,outputvector); } } if (outputmode & TYROCC_OUTPUTNONUNIQUE) { printf("# distribution of non unique mers " ONLYONCE "\n"); if (outputmode & TYROCC_OUTPUTRELATIVE) { showitvsumdistributionoftwo(Showsecond, uniquedistribution, nonuniquedistribution, outputvector); } else { showitvdistribution(nonuniquedistribution,outputvector); } } if (outputmode & TYROCC_OUTPUTNONUNIQUEMULTI) { printf("# distribution of non unique mers " MORETHANONCE "\n"); if (outputmode & TYROCC_OUTPUTRELATIVE) { showitvsumdistributionoftwo(Showsecond, uniquedistribution, nonuniquemultidistribution, outputvector); } else { showitvdistribution(nonuniquemultidistribution,outputvector); } } if (outputmode & TYROCC_OUTPUTTOTAL) { printf("# distribution of all mers " ONLYONCE "\n"); showitvsumdistributionoftwo(Onlyshowsum, uniquedistribution, nonuniquedistribution, outputvector); printf("# distribution of all mers " MORETHANONCE "\n"); showitvsumdistributionoftwo(Onlyshowsum, uniquedistribution, nonuniquemultidistribution, outputvector); } } static int gt_tyr_occratio_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { GtLogger *logger; Tyr_occratio_options *arguments = tool_arguments; bool haserr = false; GtArrayuint64_t uniquedistribution, nonuniquedistribution, nonuniquemultidistribution; logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX, stdout); GT_INITARRAY(&uniquedistribution,uint64_t); GT_INITARRAY(&nonuniquedistribution,uint64_t); GT_INITARRAY(&nonuniquemultidistribution,uint64_t); if (gt_tyr_occratio_func(gt_str_get(arguments->str_inputindex), arguments->scanfile, arguments->minmersize, arguments->maxmersize, &uniquedistribution, &nonuniquedistribution, &nonuniquemultidistribution, logger, err) != 0) { haserr = true; } if (!haserr) { showoccratios(&uniquedistribution, &nonuniquedistribution, &nonuniquemultidistribution, arguments->outputmode, arguments->outputvector); } gt_logger_delete(logger); GT_FREEARRAY(&uniquedistribution,uint64_t); GT_FREEARRAY(&nonuniquedistribution,uint64_t); GT_FREEARRAY(&nonuniquemultidistribution,uint64_t); return haserr ? -1 : 0; } static GtTool *gt_tyr_occratio(void) { return gt_tool_new(gt_tyr_occratio_arguments_new, gt_tyr_occratio_arguments_delete, gt_tyr_occratio_option_parser_new, gt_tyr_occratio_arguments_check, gt_tyr_occratio_runner); } typedef struct { GtStr *str_inputindex; GtStrArray *queryfilenames; GtStr *strandspec; GtStrArray *showmodespec; unsigned int strand, showmode; bool verbose, performtest; } Tyr_search_options; static void *gt_tyr_search_arguments_new(void) { Tyr_search_options *arguments = gt_malloc(sizeof (Tyr_search_options)); arguments->str_inputindex = gt_str_new(); arguments->strandspec = gt_str_new(); arguments->queryfilenames = gt_str_array_new(); arguments->showmodespec = gt_str_array_new(); arguments->showmode = 0; arguments->strand = 0; return arguments; } static void gt_tyr_search_arguments_delete(void *tool_arguments) { Tyr_search_options *arguments = tool_arguments; if (!arguments) { return; } gt_str_delete(arguments->str_inputindex); gt_str_delete(arguments->strandspec); gt_str_array_delete(arguments->queryfilenames); gt_str_array_delete(arguments->showmodespec); gt_free(arguments); } static GtOptionParser *gt_tyr_search_option_parser_new(void *tool_arguments) { GtOptionParser *op; GtOption *option, *optiontyr, *optionqueries; Tyr_search_options *arguments = tool_arguments; op = gt_option_parser_new("[options] -tyr tallymer-index -q queryfile0 " "[queryfile1..] [options]", "Search a set of k-mers in an index constructed " "by \"gt tyr mkindex\"."); gt_option_parser_set_mail_address(op, ""); optiontyr = gt_option_new_string("tyr","specify tallymer-index", arguments->str_inputindex, NULL); gt_option_is_mandatory(optiontyr); gt_option_parser_add_option(op, optiontyr); optionqueries = gt_option_new_filename_array("q","specify query file names", arguments->queryfilenames); gt_option_is_mandatory(optionqueries); gt_option_parser_add_option(op, optionqueries); option = gt_option_new_string("strand", "specify the strand to be searched: " "use f (for forward strand) or " "p (for reverse complemented strand) or " "fp (for both); default is f", arguments->strandspec, "f"); gt_option_parser_add_option(op, option); option = gt_option_new_string_array("output", "specify output flags " "(qseqnum, qpos, counts, sequence)", arguments->showmodespec); gt_option_parser_add_option(op, option); option = gt_option_new_bool("test", "perform tests to verify program " "correctness", &arguments->performtest, false); gt_option_is_development_option(option); gt_option_parser_add_option(op, option); option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); return op; } static int gt_tyr_search_arguments_check(int rest_argc, void *tool_arguments, GtError *err) { Optionargmodedesc showmodedesctable[] = { {"qseqnum","query sequence number",SHOWQSEQNUM}, {"qpos","query position",SHOWQPOS}, {"counts","number of occurrence counts",SHOWCOUNTS}, {"sequence","mer-sequence",SHOWSEQUENCE} }; Optionargmodedesc stranddesctable[] = { {"f","forward strand",STRAND_FORWARD}, {"p","reverse strand",STRAND_REVERSE}, {"fp","forward and reverse strand",STRAND_FORWARD | STRAND_REVERSE} }; unsigned long idx; Tyr_search_options *arguments = tool_arguments; if (rest_argc != 0) { gt_error_set(err,"superfluous arguments"); return -1; } for (idx=0; idxshowmodespec); idx++) { if (gt_optionargaddbitmask(showmodedesctable, sizeof (showmodedesctable)/ sizeof (showmodedesctable[0]), &arguments->showmode, "-output", gt_str_array_get(arguments->showmodespec,idx), err) != 0) { return -1; } } if (gt_optionargaddbitmask(stranddesctable, sizeof (stranddesctable)/ sizeof (stranddesctable[0]), &arguments->strand, "-output", gt_str_get(arguments->strandspec),err) != 0) { return -1; } return 0; } static int gt_tyr_search_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { Tyr_search_options *arguments = tool_arguments; if (gt_tyrsearch(gt_str_get(arguments->str_inputindex), arguments->queryfilenames, arguments->showmode, arguments->strand, arguments->verbose, arguments->performtest, err) != 0) { return -1; } return 0; } static GtTool *gt_tyr_search(void) { return gt_tool_new(gt_tyr_search_arguments_new, gt_tyr_search_arguments_delete, gt_tyr_search_option_parser_new, gt_tyr_search_arguments_check, gt_tyr_search_runner); } static void *gt_tyr_arguments_new(void) { GtToolbox *tyr_toolbox = gt_toolbox_new(); gt_toolbox_add_tool(tyr_toolbox, "mkindex", gt_tyr_mkindex()); gt_toolbox_add_tool(tyr_toolbox, "occratio", gt_tyr_occratio()); gt_toolbox_add_tool(tyr_toolbox, "search", gt_tyr_search()); return tyr_toolbox; } static void gt_tyr_arguments_delete(void *tool_arguments) { GtToolbox *index_toolbox = tool_arguments; if (!index_toolbox) return; gt_toolbox_delete(index_toolbox); } static GtOptionParser* gt_tyr_option_parser_new(void *tool_arguments) { GtToolbox *index_toolbox = tool_arguments; GtOptionParser *op; gt_assert(index_toolbox != NULL); op = gt_option_parser_new( "[option ...] tallymer_tool [argument ...]", "Call tallymer tool with name tallymer_tool and pass " "argument(s) to it."); gt_option_parser_set_comment_func(op, gt_toolbox_show, index_toolbox); gt_option_parser_set_min_args(op, 1U); gt_option_parser_refer_to_manual(op); return op; } static int gt_tyr_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GtToolbox *index_toolbox = tool_arguments; GtToolfunc toolfunc; GtTool *tool = NULL; char **nargv = NULL; int had_err = 0; gt_error_check(err); gt_assert(index_toolbox != NULL); if (!had_err && !gt_toolbox_has_tool(index_toolbox, argv[parsed_args])) { gt_error_set(err, "tallymer tool '%s' not found; option -help lists " "possible tools", argv[parsed_args]); had_err = -1; } /* call sub-tool */ if (!had_err) { if (!(toolfunc = gt_toolbox_get(index_toolbox, argv[parsed_args]))) { tool = gt_toolbox_get_tool(index_toolbox, argv[parsed_args]); gt_assert(tool != NULL); } nargv = gt_cstr_array_prefix_first(argv + parsed_args, gt_error_get_progname(err)); gt_error_set_progname(err, nargv[0]); if (toolfunc != NULL) had_err = toolfunc(argc - parsed_args, (const char**) nargv, err); else had_err = gt_tool_run(tool, argc - parsed_args, (const char**) nargv, err); } gt_cstr_array_delete(nargv); return had_err; } GtTool* gt_tallymer(void) { return gt_tool_new(gt_tyr_arguments_new, gt_tyr_arguments_delete, gt_tyr_option_parser_new, NULL, gt_tyr_runner); } genometools-1.5.1/src/tools/gt_tallymer.h000066400000000000000000000017011211610345200204660ustar00rootroot00000000000000/* Copyright (c) 2008 Stefan Kurtz Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_TALLYMER_H #define GT_TALLYMER_H #include "core/tool_api.h" GtTool* gt_tallymer(void); #endif genometools-1.5.1/src/tools/gt_template.c000066400000000000000000000066231211610345200204530ustar00rootroot00000000000000/* Copyright (c) CCYY YOUR NAME HERE Copyright (c) CCYY Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma.h" #include "core/unused_api.h" #include "tools/gt_template.h" typedef struct { bool bool_option_template; GtStr *str_option_template; } TemplateArguments; static void* gt_template_arguments_new(void) { TemplateArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->str_option_template = gt_str_new(); return arguments; } static void gt_template_arguments_delete(void *tool_arguments) { TemplateArguments *arguments = tool_arguments; if (!arguments) return; gt_str_delete(arguments->str_option_template); gt_free(arguments); } static GtOptionParser* gt_template_option_parser_new(void *tool_arguments) { TemplateArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [file]", /* XXX */ "DESCRIBE YOUR TOOL IN ONE LINE HERE."); /* XXX */ /* -bool */ option = gt_option_new_bool("bool", "bool option template", &arguments->bool_option_template, false); gt_option_parser_add_option(op, option); /* -str */ option = gt_option_new_string("str", "str option template", arguments->str_option_template, NULL); gt_option_parser_add_option(op, option); return op; } static int gt_template_arguments_check(GT_UNUSED int rest_argc, void *tool_arguments, GT_UNUSED GtError *err) { TemplateArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); /* XXX: do some checking after the option have been parsed (usally this is not necessary and this function can be removed completely). */ if (gt_str_length(arguments->str_option_template)) printf("%s\n", gt_str_get(arguments->str_option_template)); return had_err; } static int gt_template_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { TemplateArguments *arguments = tool_arguments; int had_err = 0; gt_error_check(err); gt_assert(arguments); /* XXX */ if (arguments->bool_option_template) printf("argc=%d, parsed_args=%d\n", argc, parsed_args); printf("argv[0]=%s\n", argv[0]); return had_err; } GtTool* gt_template(void) { return gt_tool_new(gt_template_arguments_new, gt_template_arguments_delete, gt_template_option_parser_new, gt_template_arguments_check, gt_template_runner); } genometools-1.5.1/src/tools/gt_template.h000066400000000000000000000017241211610345200204550ustar00rootroot00000000000000/* Copyright (c) CCYY YOUR NAME HERE Copyright (c) CCYY Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_TEMPLATE_H #define GT_TEMPLATE_H #include "core/tool_api.h" /* the template tool */ GtTool* gt_template(void); #endif genometools-1.5.1/src/tools/gt_trieins.c000066400000000000000000000043241211610345200203110ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/error.h" #include "core/option_api.h" #include "core/versionfunc.h" #include "match/test-mtrieins.pr" #include "tools/gt_trieins.h" static GtOPrval parse_options(bool *onlyins,int *parsed_args, int argc, const char **argv, GtError *err) { GtOptionParser *op; GtOption *option; GtOPrval oprval; gt_error_check(err); op = gt_option_parser_new("[options] indexname", "Perform trie insertions and check consistency."); gt_option_parser_set_mail_address(op, ""); option= gt_option_new_bool("ins","perform only insertions",onlyins,false); gt_option_parser_add_option(op, option); gt_option_parser_set_min_max_args(op, 1U, 1U); oprval = gt_option_parser_parse(op, parsed_args, argc, argv, gt_versionfunc, err); gt_option_parser_delete(op); return oprval; } int gt_trieins(int argc, const char **argv, GtError *err) { bool haserr = false; int parsed_args; bool onlyins = false; gt_error_check(err); switch (parse_options(&onlyins,&parsed_args, argc, argv, err)) { case GT_OPTION_PARSER_OK: break; case GT_OPTION_PARSER_ERROR: return -1; case GT_OPTION_PARSER_REQUESTS_EXIT: return 0; } gt_assert(parsed_args == 1); if (gt_test_trieins(onlyins,argv[parsed_args],err) != 0) { haserr = true; } return haserr ? -1 : 0; } genometools-1.5.1/src/tools/gt_trieins.h000066400000000000000000000017321211610345200203160ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_TRIEINS_H #define GT_TRIEINS_H /* the trieins tool */ int gt_trieins(int argc, const char **argv, GtError *err); #endif genometools-1.5.1/src/tools/gt_uniq.c000066400000000000000000000072151211610345200176120ustar00rootroot00000000000000/* Copyright (c) 2007-2009, 2011 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/ma_api.h" #include "core/option_api.h" #include "core/output_file_api.h" #include "core/unused_api.h" #include "core/versionfunc.h" #include "extended/genome_node.h" #include "extended/gff3_in_stream_api.h" #include "extended/gff3_out_stream_api.h" #include "extended/gtdatahelp.h" #include "extended/uniq_stream_api.h" #include "tools/gt_uniq.h" typedef struct { bool verbose; GtOutputFileInfo *ofi; GtFile *outfp; } UniqArguments; static void* gt_uniq_arguments_new(void) { UniqArguments *arguments = gt_calloc(1, sizeof *arguments); arguments->ofi = gt_output_file_info_new(); return arguments; } static void gt_uniq_arguments_delete(void *tool_arguments) { UniqArguments *arguments = tool_arguments; if (!arguments) return; gt_file_delete(arguments->outfp); gt_output_file_info_delete(arguments->ofi); gt_free(arguments); } static GtOptionParser* gt_uniq_option_parser_new(void *tool_arguments) { UniqArguments *arguments = tool_arguments; GtOptionParser *op; GtOption *option; gt_assert(arguments); /* init */ op = gt_option_parser_new("[option ...] [GFF3_file]", "Filter out repeated " "feature node graphs in a sorted GFF3 file."); /* -v */ option = gt_option_new_verbose(&arguments->verbose); gt_option_parser_add_option(op, option); /* output file options */ gt_output_file_register_options(op, &arguments->outfp, arguments->ofi); gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL); gt_option_parser_set_max_args(op, 1); return op; } static int gt_uniq_runner(GT_UNUSED int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { UniqArguments *arguments = tool_arguments; GtNodeStream *gff3_in_stream, *uniq_stream = NULL, *gff3_out_stream = NULL; int had_err; gt_error_check(err); gt_assert(arguments); /* create gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_sorted(argv[parsed_args]); if (arguments->verbose && arguments->outfp) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); /* create uniq stream */ uniq_stream = gt_uniq_stream_new(gff3_in_stream); /* create gff3 output stream */ gff3_out_stream = gt_gff3_out_stream_new(uniq_stream, arguments->outfp); /* pull the features through the stream and free them afterwards */ had_err = gt_node_stream_pull(gff3_out_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(uniq_stream); gt_node_stream_delete(gff3_in_stream); return had_err; } GtTool* gt_uniq(void) { return gt_tool_new(gt_uniq_arguments_new, gt_uniq_arguments_delete, gt_uniq_option_parser_new, NULL, gt_uniq_runner); } genometools-1.5.1/src/tools/gt_uniq.h000066400000000000000000000017131211610345200176140ustar00rootroot00000000000000/* Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_UNIQ_H #define GT_UNIQ_H #include "core/tool_api.h" /* the uniq tool */ GtTool* gt_uniq(void); #endif genometools-1.5.1/src/tools/gt_uniquesub.h000066400000000000000000000017361211610345200206650ustar00rootroot00000000000000/* Copyright (c) 2007 Stefan Kurtz Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GT_UNIQUESUB_H #define GT_UNIQUESUB_H /* the uniquesub tool */ int gt_uniquesub(int argc, const char **argv, GtError*); #endif genometools-1.5.1/testdata/000077500000000000000000000000001211610345200156555ustar00rootroot00000000000000genometools-1.5.1/testdata/Arabidopsis-C99826.embl000066400000000000000000000007351211610345200215650ustar00rootroot00000000000000ID C99826 XX DE gi|3719183|dbj|C99826.1|C99826 C99826 YAC clone CIC8B11 region-specific DE cDNA Arabidopsis thaliana cDNA, mRNA sequence XX SQ AGCCATTGGGGGCAAAAGGAGCAGCAGCAGATGTTGAGCAAGGGACAGTTCAGGTGAGCG ATAAGGTGAAGAAAATGGCTGAGGAGTGTAGAGATGGAGTTGGGAAGATCTCTCAGAGGT TCAAGACCTAAAGTAACAGTCTTTTAACTTTTTTGTATCTTGTTTCTACATGATAAAAAT AAAAGAGAATAATGGGATGGCCATTACATTTACAGTATTGGTCAGTGATGTTCAGAATTC ATAATTGTATCATTTTGTAATCTTTGTTATGTGGTTTACTAATACTTACACTTT // genometools-1.5.1/testdata/Arabidopsis-C99826.fna000066400000000000000000000006421211610345200214070ustar00rootroot00000000000000>gi|3719183|dbj|C99826.1|C99826 C99826 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AGCCATTGGGGGCAAAAGGAGCAGCAGCAGATGTTGAGCAAGGGACAGTTCAGGTGAGCG ATAAGGTGAAGAAAATGGCTGAGGAGTGTAGAGATGGAGTTGGGAAGATCTCTCAGAGGT TCAAGACCTAAAGTAACAGTCTTTTAACTTTTTTGTATCTTGTTTCTACATGATAAAAAT AAAAGAGAATAATGGGATGGCCATTACATTTACAGTATTGGTCAGTGATGTTCAGAATTC ATAATTGTATCATTTTGTAATCTTTGTTATGTGGTTTACTAATACTTACACTTT genometools-1.5.1/testdata/Arabidopsis-C99826.gbk000066400000000000000000000010731211610345200214050ustar00rootroot00000000000000LOCUS C99826 DEFINITION gi|3719183|dbj|C99826.1|C99826 C99826 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ACCESSION atC99826 ORIGIN 1 AGCCATTGGGGGCAAAAGGAGCAGCAGCAGATGTTGAGCAAGGGACAGTTCAGGTGAGCG 61 ATAAGGTGAAGAAAATGGCTGAGGAGTGTAGAGATGGAGTTGGGAAGATCTCTCAGAGGT 121 TCAAGACCTAAAGTAACAGTCTTTTAACTTTTTTGTATCTTGTTTCTACATGATAAAAAT 181 AAAAGAGAATAATGGGATGGCCATTACATTTACAGTATTGGTCAGTGATGTTCAGAATTC 241 ATAATTGTATCATTTTGTAATCTTTGTTATGTGGTTTACTAATACTTACACTTT // genometools-1.5.1/testdata/Atinsert.embl000066400000000000000000001324171211610345200203170ustar00rootroot00000000000000ID AF078689; SV 1; linear; mRNA; EST; PLN; 275 BP. XX AC AF078689; XX DT 28-JUL-1999 (Rel. 60, Created) DT 03-MAR-2000 (Rel. 62, Last updated, Version 2) XX DE AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA DE clone IFA2, mRNA sequence. XX KW EST. XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-275 RA Zhao D., Chen D., Yang C., Zhai Z.; RT "Isolation of intermediate filament-like genes from Arabidopsis"; RL Unpublished. XX DR UNILIB; 6039; 1974. XX CC On Dec 20, 1995 this sequence version replaced gi:1130836. CC Contact: Tan K CC Plant Development Biology CC Institute of Botany CC 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. XX FH Key Location/Qualifiers FH FT source 1..275 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /clone_lib="Arabidopsis thaliana library (Tan K)" FT /clone="IFA2" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:6039" XX SQ Sequence 275 BP; 80 A; 55 C; 70 G; 70 T; 0 other; antnnctacn ncnncnntnn cnncnatnna antanacnna tnntnntann aatnaaannc 60 tanaancnnc nnanaantat ntnnataana aataacaaaa actnannnna tcatnaantt 120 cttcnttata ttatantttt caatctnaat ttcaattccn ccnctcncct ttttcctctc 180 cnccttttcc ntctctccna tctnctcccn ccnccnacct tntnatnatt atanctctna 240 anntccatac aannatataa aaaaaaaaaa aaaaa 275 // ID C99932; SV 1; linear; mRNA; EST; PLN; 852 BP. XX AC C99932; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 88. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-852 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-852 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..852 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 852 BP; 251 A; 167 C; 160 G; 231 T; 43 other; atnrayamtc aaaaatnnan tmtanntttc atatctctcn cttttctctt catcacttcc 60 tcttcanctn anttcatcat tcaacanntc acaaannnca rannaatana ntacaacant 120 tcttacantc tcnannanaa tcttnnantn acrananant tnananaana ncnaccatcn 180 antaanatan tnacaataac aancttctca ntnattaaan ncanannana accctatnaa 240 tcctctnttt ttnannctnc tnnttacaaa tnnanattnn ttttntacnt naatnntaat 300 aaaaacnacn ntnnaaatna tcatatttcc ctttacncaa nnatcnaana nacaaactct 360 cttccattan nttnnnaant naatnttnat ctcaaactct ttntccataa tnnnaancta 420 cacaaatatt tnactnttac anatnnctta rttnaancna tataacaatn csaaaaaana 480 atnnnntttc nnacaattna ttcctcnatc aacattctac aacncnaacn aannttacct 540 ttnaccaann acactnnttc cttttnnntn ncynnaaaan cctttattnt ttaaaccnns 600 tccaccaacm aaraaaawwa ytttctwtym mtyytccaac aysytycccw wcsaatnttt 660 tttcccttnn naaaaanacc tncntttcct cctacctttn nnaaaaanaa anttcntttt 720 tactcccnaa tnaattttcc ccctttnnaa aaaccnaatn cctnnttnna cttannaatt 780 ttaacccccn aaannnnnaa tnnaannaaa naaaaaaccc ctttncccnt tcccaatcct 840 tccctanttt nc 852 // ID C99931; SV 1; linear; mRNA; EST; PLN; 719 BP. XX AC C99931; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 87-1. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-719 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-719 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..719 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 719 BP; 216 A; 140 C; 132 G; 215 T; 16 other; ntnartnttn atctcaaact ctttntccat aatnnnaanc tacacaaata tttnactntt 60 acanatnnct tantnaancn atataacaat ncnaaaaaan aatnnnnttt cnnacaattn 120 attcctcnat caacattcta caacncnaac naannttacc ttnaccanna cactnnttct 180 tttnntnctn anatctttat tnttaaaccn nctcaacaac aananaaant tacattcata 240 tcaaaccctc caaacaatnt tttcacttnn aanatacttc ntttctctac cttnnaanat 300 aaattctatt actccnatna ttttctcntt naanaccnat actnnanact annatttaac 360 ccnaaannnn atnnannann aanaccacat ncacttccaa tcttcctatt tnctcaannc 420 cataanncaa atncanttnc tacaaacact tnnnnancnn ttaatctncn nttaaanaat 480 caacnaartt ctaaccatan acaatatwtc tncacttnnt acccattnna aacnttatnn 540 tktnnnakta acatatctac tnttnctnat taacnancat ccaaannatt ttnntnatna 600 nccytatctt naactnaatn nttaankcct ataccactct ctccctwaat tctccttctt 660 ntcwcnacat cncyttrata aaaaatttat tnataatttt ttaraaactt atttttkta 719 // ID C99930; SV 1; linear; mRNA; EST; PLN; 746 BP. XX AC C99930; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 86. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-746 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-746 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..746 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 746 BP; 227 A; 151 C; 138 G; 220 T; 10 other; ntnaancnat acaacnatnc aaaaaaanan tnnnnattca cacaattnat ttctcttcca 60 acattctaca acncnaacna annntacytt ntncannaca cancttcttt tnntnctnan 120 atcttcatcn ttaacccnac anaaaaacaa nanaaantca cattcatatc aaaccctccn 180 aacaatnttt tcacttnnaa natacttcnt ttctctacct tnnaanataa attctattac 240 tctnatnatt ttctcnttna anaccnatac tnnanattan natttaaccc naaannatct 300 nntnnannna naccacatnc acttccaatc ttcctatatn ctcaanncca taanncaaac 360 ncanttntta caaacacttn nnnancnntt aatctncnnt taaanaatca acnaanctcc 420 aaccacaaac aattatattc tncancttnn taccccnatt cnaancnatt atnntntnnn 480 antnaacaat atcatattna tntcanaanc taaaanatnc atcmaaannn tatatnntna 540 atnatnccat tatcttttna aactnaaatn nttaanntct ctntnaacaa catartctcc 600 scttaaatat atntcactac ttctttatcc cccnnaataa ccttacaaan aaaaattnat 660 natttaattt nttatacnac actttattna tncctntnan ntaaccttnt ttccnctccc 720 cnaatttcct tttttttcct nttttt 746 // ID C99929; SV 1; linear; mRNA; EST; PLN; 668 BP. XX AC C99929; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 85. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-668 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-668 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..668 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 668 BP; 215 A; 138 C; 138 G; 173 T; 4 other; tcaaaatatn natantcaca aatnnantct anntttcaca ttacttnctt tcctcttcat 60 cacttcctct tccnctnanc tcatcattaa acanntcaca cannncanan naatananta 120 caacaactct tacantctca cntcnaatct tnnantnacn acaananant tnananacna 180 ncnaccatca antaanatan tnacaatcac aancttctct ntnattaann acanannana 240 accctatnaa tcatctattt ttnannctnc cnnttacaaa tnnanattan ttttntacnt 300 naannntaat ccnaaanncn ntataaataa tcatatttca ctttacncna nnatanaana 360 nacanaaact cttccaanan nntnnnaant naatnttnat ctcaaactct ttntccacaa 420 tcnnaaktta aanaaatatt tntctnttac anatnnaaca ntnaancnat acaacnatnc 480 aaaaaaanan tnnnnattcn cacaattnat ttctcttcca acattctaca acncnaacna 540 annnttcctt ntnccannac acarcttcct ttnnntnctn araacttcat cnttaacccn 600 accnaaaaac canaaaaaat ccctttcttt tcaaaccccc cnaaacatnt ttttcccttt 660 nnaaaaaa 668 // ID C99928; SV 1; linear; mRNA; EST; PLN; 800 BP. XX AC C99928; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 84. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-800 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-800 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..800 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 800 BP; 255 A; 145 C; 162 G; 238 T; 0 other; nnaanttaaa naaatatttn tctnttacan atnnaacant naancnatac aacnatncaa 60 aaaaanantn nnnattcaca caattnattt ctcttccaac attctacaac ncnaacnaan 120 nntaccttnt ncannacaca ncttcttttn ntnctnanat cttcatcntt aacccnacan 180 aaaaacaana naaantcaca ttcatatcaa accctccana caatnttttc acttnnaana 240 tacttcnttt ctctaccttn naanataaat tctattactc cnatnatttt ctcnttnaan 300 accnatactn nanactanna tttaacccna aannnnatnn annannaana ccacatncac 360 ttccaatctt cctatttnct caannccata anncaaacnc anttnctaca aacacttnnn 420 nancnnttaa tctncnntta aanaatcaac naantactaa ccatanacaa atatattctn 480 cancttnnta cccnattnna ancnnttatn ntntnnnant naacaatatc atactnttan 540 ctnatttaaa cnatncatca aaannatatt tnntnaatna tnccattatc tttnaanctn 600 aaatnnttaa nntctctata accaacatcn tctccnctta aatatctnca cttctttntc 660 tacnatcaat caaccttatn aataaanana tatttnatna ntttntaata anaaaacntt 720 aatntttntn aattntnaan ttattacttc tnttcttctn anttttttta tttcaatnaa 780 aataaaactc ttaccnnttt 800 // ID C99927; SV 1; linear; mRNA; EST; PLN; 797 BP. XX AC C99927; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 83. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-797 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-797 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..797 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 797 BP; 220 A; 140 C; 151 G; 241 T; 45 other; ntnaancnat mcmwcnatnm wmaaaamkar tnknnattyr cayratwnat ytctcttcyw 60 myattctwsw mcncnaayna annntacctt ntnyasnacr mwscttcttt ynntnctnak 120 atcttcatnc nwtamcccna canaaamacm mkakawantc wcattcatat cmwaccctcc 180 raacaatntt ttcacttnna anatacttcn tttctctacc ttnnaanata aattctatta 240 ctctnatnat tttctcnttn aanaccnata ctnnanatta nnatttaacc cnaaannatc 300 tnntnnannn anaccacatn cacttccaat cttcctatat nctcaanncc ataanncaaa 360 cncanttntt acaaacactt nnnnancnnt taatctncnn ttaaanaatc aacnaanctc 420 caaccacaaa caattatatt ctncancttn ntacccnatt cnaancnatt atnntntnnn 480 antnaacaat ataatattna tntcananct aaaanatnca tccaaaannn tatatnntna 540 atnatnccat tatctttnaa nctnaaatnn ttaanntctc tntnacaaac atantctccn 600 tttaaatatc actacttctt tttcaacaac aaccttacna ataaantnna ctttnatnan 660 tttaatttnt tatacnacaa cnttnttnat ncttntnatn taatcnttnt ttctnctctc 720 cnanttttcn ttttactttt tttttcatnt tttnctatca atnaaataaa nntataaaac 780 tctcttnntt ttaaant 797 // ID C99926; SV 1; linear; mRNA; EST; PLN; 371 BP. XX AC C99926; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 82. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-371 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-371 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..371 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 371 BP; 115 A; 83 C; 60 G; 101 T; 12 other; nnaanttaaa naaatatttn tctnttacan atnnaacant naancnatac aacnatncaa 60 aaaaanantn nnnattcaca caattnattt ctcttccaac attctacaac ncnaacnaan 120 nntaccttnt ncannacaca ncttcttttn ntnctnanat cttcatcntt aacccnacan 180 aaaaacaana naaantcaca ttcatatcaa accmtsswrm cmrkrtyytc acttnnaana 240 tacttcnttt ctctaccttn tcacctaaat tcaattcatc ntacccnnat cctcnattct 300 tttncttttt accctnnaan aaatactcat aanccacctc tnttatttac ccccaatctt 360 cacaanaaaa a 371 // ID C99925; SV 1; linear; mRNA; EST; PLN; 565 BP. XX AC C99925; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 81. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-565 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-565 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..565 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 565 BP; 151 A; 117 C; 122 G; 174 T; 1 other; cntctccata cnttnttccc naanacatnt ccttnacaaa nntatacaat cttttccnnc 60 aacttnnntt ncnacatcta ttcnttnttc cccntccttc ccntntnata nncttnatca 120 ccanaaanna tttactnatt nannaaaatn nnnaatcatc ancantnnaa ctccaacant 180 caactantan ntcnntacan tnanacanca acncnnatnn acnctncacn accncttcta 240 nacnatcttt tannttaata aaacanacca aacatataca ancanttnaa nctnntanct 300 aanatcttta ntcnnnccaa ttcttcntcc atacaannat acaancttnt tccncatntt 360 nccacccaaa tccnntatnn annatatatn atcntctctt nanatnnnat tntnttnttc 420 nctaaccnat ctcattctcc nttcacanan antanaaana ttatatatnt ttaanncttt 480 tnattnttnt aattntncaa tctttnawta ttttcttnnt ccctntaaaa taatccacct 540 tttnatatat ttacttnatt aactt 565 // ID C99923; SV 1; linear; mRNA; EST; PLN; 110 BP. XX AC C99923; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 79. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-110 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-110 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..110 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 110 BP; 20 A; 24 C; 23 G; 31 T; 12 other; tctnntccnt ctnanacatc nnatcanntn nnnnntacaa tcatctcncc nttcantann 60 tntttacnna tttcnncnnt cntatanctn ncntnactaa nnctttaacc 110 // ID C99922; SV 1; linear; mRNA; EST; PLN; 815 BP. XX AC C99922; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 78. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-815 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-815 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..815 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 815 BP; 179 A; 125 C; 299 G; 202 T; 10 other; nntranatct acsttnctnn anntnntnnt nnttcnnakn ttncnncnnc nntnnaasta 60 ntatnatccn nanttnaatc nntnnnaant tntnactcaa tcnncsanna asanatacnn 120 ttncatcnna ncanccnttn acnnantttt ttatntnatc nntnnattna aaattnnnaa 180 tnanacctca cncncnntnn cnncncntnc ttatncnanc tctatnnatc ttttcnatnt 240 nnantcncnt cantnnttaa nnantcnttc nnttcctnnc nntnnatntn tantnncnnc 300 ntntncnncn nttnnatatn tntatntnct aaccantcac ncnntnnanc tttcnttttt 360 nncnatttna tncncntcnt cntnntnnaa acaccnnntt tnnaaaaatn ncanaanctn 420 aaaantcccc cnttaccnnc acaanntncs nnttaanatn naaccnntna anntttaacc 480 tncntcnnan tnnaanataa antnncnntn nttcanntnn tnnnatncat tnacnatttn 540 cttcnncnna ntnnnannnn tnananannn attananaaa nccttntntt nctntatnat 600 acnacnnann nanantnnan nanancnncn natttacctn anatnattac acncnccncc 660 tntncntntn tnnantnnta anannnnana ccacnncnca nnattatnnn tacnanaant 720 tnnaanatnc tavcntacnc annatatatt aaantnnnca aaaacaatat cattatnatt 780 nntncacatn tttactntmt naaaancaat ancnt 815 // ID C99921; SV 1; linear; mRNA; EST; PLN; 602 BP. XX AC C99921; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 77. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-602 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-602 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..602 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 602 BP; 157 A; 119 C; 123 G; 164 T; 39 other; cnnnncttct raaanacnca atctnatnta ctcntacatn ctanntncta tctcttctat 60 aatntctnat cctttctncc ctcccacwcn ttnccntanc ckcaaawtct cctktnayat 120 ttmcctnmtc anaytntcct natnnatnsn naynttcacm tanataccaa ancacaanaa 180 attcnaannt nctnnanaaa anncnaccac tttcactaan ancatttnnc tcnannaanc 240 tnatncnany nccatatccn ttnntnanna antaactttn atnnattnnn naaatnctat 300 cntaaannaa atcmcmaakn acnannannn tcntntcact nccttatctn ntntcttnaa 360 tctccaannt tctntwaana ctacaaanct naanctnaca tnncttcctn atactaatna 420 attnntccat ctcrcmttaa canantttna ttatctaatc cccmanaana aactnnaana 480 tnatnatnaa atttnctnat tttnctnaat ccymmcccna aaaannaana cmtttnncmc 540 ttknntnnat tcccaatatt nananaatct tnaaattntt nnaaaatntt tattccccct 600 tt 602 // ID C99920; SV 1; linear; mRNA; EST; PLN; 92 BP. XX AC C99920; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 76. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-92 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-92 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..92 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 92 BP; 17 A; 19 C; 13 G; 43 T; 0 other; tcanctnttt cnttcaacna tctaaactat ctcaatnctt ctttnaatct attntcnntt 60 tccttntact cntcaatttc atnttttttt tn 92 // ID C99919; SV 1; linear; mRNA; EST; PLN; 461 BP. XX AC C99919; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 75. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-461 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-461 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..461 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 461 BP; 85 A; 111 C; 84 G; 120 T; 61 other; ccctcccnct cctnntttct anttnnnttc nnnttctntt atcnnntttt tcncnnnnnt 60 cttttntcnn nnccctnnac cnnaattcnc nnntcnacca actcntcana tntnntnctn 120 cnctacaatn aancaaannn antcacactc tcnnactnan nctctcccct ccncttctnt 180 aaccatancn nctcnacntc tatntctccn atctaaccan ctctnnnnnt tcnannanan 240 ataannanaa aantannnan nnacnantat ncttncccnt tctntncana ctattttnat 300 ntcntctctc tnnncnntca cattnatnaa natcntccta tnnatnctta aantnnnntn 360 tntcccntcc tntncnntna aantnanctc nnnatatnat tncntcntat anccccncnn 420 cncnnccnat atnttcaann tnacccnnat cannaaatca a 461 // ID C99918; SV 1; linear; mRNA; EST; PLN; 556 BP. XX AC C99918; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 74. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-556 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-556 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..556 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 556 BP; 147 A; 119 C; 132 G; 150 T; 8 other; ntttatcacn ccttncattn atcanaascc cttnctacnn cattnancca knctnccnaa 60 nctntttctt cnnnaaattc anatncaant natnccactn caaaanctnn aatcattttn 120 ttncccanca cacatcaact tnacnaanan nttactnmnn aacatantna nnannaaatn 180 actnaanann aaccaactct tctcaantnn ccaaataanc ccnnnattcc anattctnat 240 ttntttnacc ntnatcaatc ntnntttnat nnacctccan annncttcaa tctcacatta 300 tcaaatttcn ctntnatntn nnattcactn tttnnctnnn tatcatcntc ctctctnnca 360 tacatatatn nnaannaana atctnctcat narnanttct tattnnttaa cnnnaannan 420 tacccccnna nnattatcat nntanatnnn ctttcctcan aratcaanca nacaattnct 480 nnnttncctt nccanaactt taccnaaaat cntcactcat ctcannnctn ccaatancna 540 tatccrattt taaaaa 556 // ID C99917; SV 1; linear; mRNA; EST; PLN; 476 BP. XX AC C99917; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 73. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-476 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-476 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..476 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 476 BP; 86 A; 111 C; 98 G; 106 T; 75 other; atanncnana tcccccccaa annattncct natntnanna acatnnnnan atcatcntnn 60 aatcnancnc nnnnantcnc cnntnaantn nntnnntnna cantcncncc cnnacnnacn 120 cnncatnacc ncttcactac nanctnttan ntttntnnna ctnntcctac natataccnt 180 ctcttnntnn tnnnnccncn aaactcnnct cannactnnn ctcctcnaaa ttcnnatnaa 240 nnntntcccn cctntnacna cnnnnttcnn nattnnancn atctannann nnacactctn 300 anaatntnat cnntnattnn tcnntncnct nnatcacatt nctcnccttn ccantaccac 360 ttttnacana nttccccttc tttttcncaa cnnncnatnc tnnnanaann natnnntaac 420 tcnnntnccn nctctnnatc nnanatancn tnntcctctc nnnnttccan annntc 476 // ID C99916; SV 1; linear; mRNA; EST; PLN; 865 BP. XX AC C99916; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 72. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-865 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-865 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..865 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 865 BP; 278 A; 157 C; 171 G; 254 T; 5 other; nntaataaaa acnacnntnn aaatnatcat atttcccttt acncaannat cnaananaca 60 aactctcttc cattannttn nnaantnaat nttnatctca aactctttnt ccataatnnn 120 aanctacaca aatatttnac tnttacanat nncttantna ancnatataa caatncnaaa 180 aaanaatnnn ntttcnnaca attnattcct cnatcaacat tctacaacnc naacnaannt 240 taccttnacc annacactnn ttcttttnnt nctnanatct ttattnttaa accnnctcaa 300 caacaanana aanttacatt catatcaaac cctccaaaca atnttttcac ttnnaanata 360 cttcntttct ctaccttnna anataaattc tattactccn atnatwttct cnttnaanac 420 cnatactnna nactannatt taacccnaaa nnnnatnnan nannaanacc acatncactt 480 ccaatcttcc tatttnctca annccataan ncaaatncan ttnctacaaa cacttnnnna 540 ncnnttaatc tncnnttaaa naatcaacna antactaacc atanacaaat atattctnca 600 ncttnntacc cnattnnaaa cnnttatnnt ntnnnantna acaatatcat actnttanct 660 natttaaacn atncatccaa annatatttn ntnaatnatn ccattatctt tnaanctnaa 720 atnnttaann tctctataac caacatcntc tccncttaaa tatctncmct tctttntcta 780 craycaatcc accttatnaa taaaaaaatt ttaatttnat naatttntta taanaaaact 840 ttaatntttn ttaaatntna aattt 865 // ID C99914; SV 1; linear; mRNA; EST; PLN; 628 BP. XX AC C99914; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 70. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-628 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-628 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..628 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 628 BP; 148 A; 161 C; 150 G; 162 T; 7 other; nnnacnaacc nntntaccac natttnnttc ntcactntct nncctaccca aaancnnatn 60 naatcttnnt naatacatnn naananatnn ancccaaatc attaaantcc cttcaanacc 120 cnaaactttt nnnccnnntc nctcntntac cnntttatcc nnttnntccn ttatncanac 180 cnatacaatc atccacnacc natcacccnn tttttnattn nttaaacaaa caaccaaacn 240 antcnnttct ctacatttcc ttcnnnantn ntnnttctct aacnnctcaa canttaaccn 300 aattnncntn nnnnctcnan nananccanc aacnntttat atnnntnntt cnaccncccn 360 ttnacnnctc ntcttncant nattatttct cnnctaaann cnntntaacc aaanacaaca 420 cnccanaata tctaccaaaa annnttcntn actcstactt tncnataaaa ntttcatnat 480 cccatcatnn ncaccncaan ctnaaatcct aacccatcca nnccnttnnt nnntttttaa 540 cacatttntt nntttnnaac tccactttnn raaaccttcc ttttnccnnc nttcccawtr 600 anaaccttkn cccccttttc ccccaacc 628 // ID C99913; SV 1; linear; mRNA; EST; PLN; 497 BP. XX AC C99913; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 69. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-497 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-497 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..497 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 497 BP; 114 A; 82 C; 148 G; 148 T; 5 other; cctntcccat cnnnccnttr ntnnnttttt nacccattnc nnttnnanct cnacnttsna 60 aancntcntt nncnncnttc cnatsatcnc atnnccactt tttnccnanc anaatatnaa 120 tncnncnttn ctcancnacn aactnnnaat cncantcana ttnnatnatc caaannanna 180 tatttctann tnnaanattn anncnttnnt nannaanntt atnactnana annaanntna 240 ancnatnana annaaantna anaanttnan anactcnncn nanatntcac tnancattna 300 cnntnntnnt ttnncncacn antcnctttn canantcacc aannantntc aacnnttttt 360 nnaacntntc ntnnacttnt cacntnntnc ttaaaaattn ttaccntttt ctaactcttt 420 tattattart tnnttnaatt atacntntcn ttcctctntt anttnttata atataataaa 480 tcnatttact ctttntt 497 // ID C99911; SV 1; linear; mRNA; EST; PLN; 661 BP. XX AC C99911; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 67. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-661 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-661 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..661 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 661 BP; 186 A; 117 C; 149 G; 206 T; 3 other; cntttctncc acattaaaac anaanantnc aacaattnaa nncatanaaa antnncctta 60 tnaancanct nccattnctt tcnannctat tccacntacc ctnnctcaaa actntnnnnt 120 taacntnatc cntactatna ctncattnca annnaancat ncaaatnntn aaaacncatn 180 nactnntatt nacnnnaaca ctnntncaat anctnatatn aaanananca anatatnnna 240 ttcntacaat ntnaanncnc aaactttcaa nacnnctata naancancnt ntatncttct 300 aannnatcna tnatatantn antnnaatca anaanaanca anctcctnna tctnnacctt 360 caaancctac cattnanaca naannanatn canacaacna acaaattctt cccnactaan 420 cnaannnana aacactttnn tctcancata actcaatctc tnttttcact tntttaatnn 480 ttncactctt ttnnctatta tcttcccttn acatatcttt ttaattctnc anttttnact 540 tnnntnanat aaaattttcc caanntnntt tttttttntt tnttttnnna atattaactt 600 ttttnaattt tcntantccc tttnttnntt tttaaaattc caattnttat tnttcttttt 660 n 661 // ID C99910; SV 1; linear; mRNA; EST; PLN; 241 BP. XX AC C99910; XX DT 09-APR-1999 (Rel. 59, Created) DT 09-APR-1999 (Rel. 59, Last updated, Version 1) XX DE Arabidopsis thaliana YAC CIC3B1 region specific cDNA, clone 66. XX KW EST(expressed sequence tag). XX OS Arabidopsis thaliana (thale cress) OC Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; OC Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; OC eurosids II; Brassicales; Brassicaceae; Arabidopsis. XX RN [1] RP 1-241 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT ; RL Submitted (08-OCT-1998) to the EMBL/GenBank/DDBJ databases. RL Reiko Motohashi, Institute of Physical and Chemical Research(RIKEN), RL Laboratory of Plant Molecular Biology; 3-1-1, Koyadai, Tsukuba 305-0074, RL Japan (E-mail:motohasi@rtc.riken.go.jp, Tel:+81-298-36-4359) XX RN [2] RP 1-241 RA Motohashi R., Shinozaki K., Yamaguchi-Shinozaki K.; RT "Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2"; RL Unpublished. XX DR UNILIB; 1782; 1741. XX FH Key Location/Qualifiers FH FT source 1..241 FT /organism="Arabidopsis thaliana" FT /mol_type="mRNA" FT /db_xref="taxon:3702" FT /db_xref="UNILIB:1782" XX SQ Sequence 241 BP; 79 A; 29 C; 50 G; 82 T; 1 other; cncscctaan aannaaaana tnanaanaan aanaanaana aaactnannt ctnaananac 60 ctttaatatt tttncntnnt ctantttact ttnttatcan aaacaaanaa aatcttttnt 120 nncnttannt nttaantaan ntttttnttt tntttnaaac ttaaaaaaaa naactactct 180 tcnttttnta annttataat atntttnntt tantccttat cccaaaaact tncattttnc 240 c 241 // genometools-1.5.1/testdata/Atinsert.fna000066400000000000000000000346371211610345200201510ustar00rootroot00000000000000>gi|5587835|gb|AF078689.1|AF078689 AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence ANTNNCTACNNCNNCNNTNNCNNCNATNNAANTANACNNATNNTNNTANNAATNAAANNCTANAANCNNC NNANAANTATNTNNATAANAAATAACAAAAACTNANNNNATCATNAANTTCTTCNTTATATTATANTTTT CAATCTNAATTTCAATTCCNCCNCTCNCCTTTTTCCTCTCCNCCTTTTCCNTCTCTCCNATCTNCTCCCN CCNCCNACCTTNTNATNATTATANCTCTNAANNTCCATACAANNATATAAAAAAAAAAAAAAAAA >gi|4714049|dbj|C99932.1|C99932 C99932 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 88, mRNA sequence ATNRAYAMTCAAAAATNNANTMTANNTTTCATATCTCTCNCTTTTCTCTTCATCACTTCCTCTTCANCTN ANTTCATCATTCAACANNTCACAAANNNCARANNAATANANTACAACANTTCTTACANTCTCNANNANAA TCTTNNANTNACRANANANTTNANANAANANCNACCATCNANTAANATANTNACAATAACAANCTTCTCA NTNATTAAANNCANANNANAACCCTATNAATCCTCTNTTTTTNANNCTNCTNNTTACAAATNNANATTNN TTTTNTACNTNAATNNTAATAAAAACNACNNTNNAAATNATCATATTTCCCTTTACNCAANNATCNAANA NACAAACTCTCTTCCATTANNTTNNNAANTNAATNTTNATCTCAAACTCTTTNTCCATAATNNNAANCTA CACAAATATTTNACTNTTACANATNNCTTARTTNAANCNATATAACAATNCSAAAAAANAATNNNNTTTC NNACAATTNATTCCTCNATCAACATTCTACAACNCNAACNAANNTTACCTTTNACCAANNACACTNNTTC CTTTTNNNTNNCYNNAAAANCCTTTATTNTTTAAACCNNSTCCACCAACMAARAAAAWWAYTTTCTWTYM MTYYTCCAACAYSYTYCCCWWCSAATNTTTTTTCCCTTNNNAAAAANACCTNCNTTTCCTCCTACCTTTN NNAAAAANAAANTTCNTTTTTACTCCCNAATNAATTTTCCCCCTTTNNAAAAACCNAATNCCTNNTTNNA CTTANNAATTTTAACCCCCNAAANNNNNAATNNAANNAAANAAAAAACCCCTTTNCCCNTTCCCAATCCT TCCCTANTTTNC >gi|4714048|dbj|C99931.1|C99931 C99931 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 87-1, mRNA sequence NTNARTNTTNATCTCAAACTCTTTNTCCATAATNNNAANCTACACAAATATTTNACTNTTACANATNNCT TANTNAANCNATATAACAATNCNAAAAAANAATNNNNTTTCNNACAATTNATTCCTCNATCAACATTCTA CAACNCNAACNAANNTTACCTTNACCANNACACTNNTTCTTTTNNTNCTNANATCTTTATTNTTAAACCN NCTCAACAACAANANAAANTTACATTCATATCAAACCCTCCAAACAATNTTTTCACTTNNAANATACTTC NTTTCTCTACCTTNNAANATAAATTCTATTACTCCNATNATTTTCTCNTTNAANACCNATACTNNANACT ANNATTTAACCCNAAANNNNATNNANNANNAANACCACATNCACTTCCAATCTTCCTATTTNCTCAANNC CATAANNCAAATNCANTTNCTACAAACACTTNNNNANCNNTTAATCTNCNNTTAAANAATCAACNAARTT CTAACCATANACAATATWTCTNCACTTNNTACCCATTNNAAACNTTATNNTKTNNNAKTAACATATCTAC TNTTNCTNATTAACNANCATCCAAANNATTTTNNTNATNANCCYTATCTTNAACTNAATNNTTAANKCCT ATACCACTCTCTCCCTWAATTCTCCTTCTTNTCWCNACATCNCYTTRATAAAAAATTTATTNATAATTTT TTARAAACTTATTTTTKTA >gi|4714047|dbj|C99930.1|C99930 C99930 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 86, mRNA sequence NTNAANCNATACAACNATNCAAAAAAANANTNNNNATTCACACAATTNATTTCTCTTCCAACATTCTACA ACNCNAACNAANNNTACYTTNTNCANNACACANCTTCTTTTNNTNCTNANATCTTCATCNTTAACCCNAC ANAAAAACAANANAAANTCACATTCATATCAAACCCTCCNAACAATNTTTTCACTTNNAANATACTTCNT TTCTCTACCTTNNAANATAAATTCTATTACTCTNATNATTTTCTCNTTNAANACCNATACTNNANATTAN NATTTAACCCNAAANNATCTNNTNNANNNANACCACATNCACTTCCAATCTTCCTATATNCTCAANNCCA TAANNCAAACNCANTTNTTACAAACACTTNNNNANCNNTTAATCTNCNNTTAAANAATCAACNAANCTCC AACCACAAACAATTATATTCTNCANCTTNNTACCCCNATTCNAANCNATTATNNTNTNNNANTNAACAAT ATCATATTNATNTCANAANCTAAAANATNCATCMAAANNNTATATNNTNAATNATNCCATTATCTTTTNA AACTNAAATNNTTAANNTCTCTNTNAACAACATARTCTCCSCTTAAATATATNTCACTACTTCTTTATCC CCCNNAATAACCTTACAAANAAAAATTNATNATTTAATTTNTTATACNACACTTTATTNATNCCTNTNAN NTAACCTTNTTTCCNCTCCCCNAATTTCCTTTTTTTTCCTNTTTTT >gi|4714046|dbj|C99929.1|C99929 C99929 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 85, mRNA sequence TCAAAATATNNATANTCACAAATNNANTCTANNTTTCACATTACTTNCTTTCCTCTTCATCACTTCCTCT TCCNCTNANCTCATCATTAAACANNTCACACANNNCANANNAATANANTACAACAACTCTTACANTCTCA CNTCNAATCTTNNANTNACNACAANANANTTNANANACNANCNACCATCAANTAANATANTNACAATCAC AANCTTCTCTNTNATTAANNACANANNANAACCCTATNAATCATCTATTTTTNANNCTNCCNNTTACAAA TNNANATTANTTTTNTACNTNAANNNTAATCCNAAANNCNNTATAAATAATCATATTTCACTTTACNCNA NNATANAANANACANAAACTCTTCCAANANNNTNNNAANTNAATNTTNATCTCAAACTCTTTNTCCACAA TCNNAAKTTAAANAAATATTTNTCTNTTACANATNNAACANTNAANCNATACAACNATNCAAAAAAANAN TNNNNATTCNCACAATTNATTTCTCTTCCAACATTCTACAACNCNAACNAANNNTTCCTTNTNCCANNAC ACARCTTCCTTTNNNTNCTNARAACTTCATCNTTAACCCNACCNAAAAACCANAAAAAATCCCTTTCTTT TCAAACCCCCCNAAACATNTTTTTCCCTTTNNAAAAAA >gi|4714045|dbj|C99928.1|C99928 C99928 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 84, mRNA sequence NNAANTTAAANAAATATTTNTCTNTTACANATNNAACANTNAANCNATACAACNATNCAAAAAAANANTN NNNATTCACACAATTNATTTCTCTTCCAACATTCTACAACNCNAACNAANNNTACCTTNTNCANNACACA NCTTCTTTTNNTNCTNANATCTTCATCNTTAACCCNACANAAAAACAANANAAANTCACATTCATATCAA ACCCTCCANACAATNTTTTCACTTNNAANATACTTCNTTTCTCTACCTTNNAANATAAATTCTATTACTC CNATNATTTTCTCNTTNAANACCNATACTNNANACTANNATTTAACCCNAAANNNNATNNANNANNAANA CCACATNCACTTCCAATCTTCCTATTTNCTCAANNCCATAANNCAAACNCANTTNCTACAAACACTTNNN NANCNNTTAATCTNCNNTTAAANAATCAACNAANTACTAACCATANACAAATATATTCTNCANCTTNNTA CCCNATTNNAANCNNTTATNNTNTNNNANTNAACAATATCATACTNTTANCTNATTTAAACNATNCATCA AAANNATATTTNNTNAATNATNCCATTATCTTTNAANCTNAAATNNTTAANNTCTCTATAACCAACATCN TCTCCNCTTAAATATCTNCACTTCTTTNTCTACNATCAATCAACCTTATNAATAAANANATATTTNATNA NTTTNTAATAANAAAACNTTAATNTTTNTNAATTNTNAANTTATTACTTCTNTTCTTCTNANTTTTTTTA TTTCAATNAAAATAAAACTCTTACCNNTTT >gi|4714044|dbj|C99927.1|C99927 C99927 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 83, mRNA sequence NTNAANCNATMCMWCNATNMWMAAAAMKARTNKNNATTYRCAYRATWNATYTCTCTTCYWMYATTCTWSW MCNCNAAYNAANNNTACCTTNTNYASNACRMWSCTTCTTTYNNTNCTNAKATCTTCATNCNWTAMCCCNA CANAAAMACMMKAKAWANTCWCATTCATATCMWACCCTCCRAACAATNTTTTCACTTNNAANATACTTCN TTTCTCTACCTTNNAANATAAATTCTATTACTCTNATNATTTTCTCNTTNAANACCNATACTNNANATTA NNATTTAACCCNAAANNATCTNNTNNANNNANACCACATNCACTTCCAATCTTCCTATATNCTCAANNCC ATAANNCAAACNCANTTNTTACAAACACTTNNNNANCNNTTAATCTNCNNTTAAANAATCAACNAANCTC CAACCACAAACAATTATATTCTNCANCTTNNTACCCNATTCNAANCNATTATNNTNTNNNANTNAACAAT ATAATATTNATNTCANANCTAAAANATNCATCCAAAANNNTATATNNTNAATNATNCCATTATCTTTNAA NCTNAAATNNTTAANNTCTCTNTNACAAACATANTCTCCNTTTAAATATCACTACTTCTTTTTCAACAAC AACCTTACNAATAAANTNNACTTTNATNANTTTAATTTNTTATACNACAACNTTNTTNATNCTTNTNATN TAATCNTTNTTTCTNCTCTCCNANTTTTCNTTTTACTTTTTTTTTCATNTTTTNCTATCAATNAAATAAA NNTATAAAACTCTCTTNNTTTTAAANT >gi|4714043|dbj|C99926.1|C99926 C99926 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 82, mRNA sequence NNAANTTAAANAAATATTTNTCTNTTACANATNNAACANTNAANCNATACAACNATNCAAAAAAANANTN NNNATTCACACAATTNATTTCTCTTCCAACATTCTACAACNCNAACNAANNNTACCTTNTNCANNACACA NCTTCTTTTNNTNCTNANATCTTCATCNTTAACCCNACANAAAAACAANANAAANTCACATTCATATCAA ACCMTSSWRMCMRKRTYYTCACTTNNAANATACTTCNTTTCTCTACCTTNTCACCTAAATTCAATTCATC NTACCCNNATCCTCNATTCTTTTNCTTTTTACCCTNNAANAAATACTCATAANCCACCTCTNTTATTTAC CCCCAATCTTCACAANAAAAA >gi|4714042|dbj|C99925.1|C99925 C99925 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 81, mRNA sequence CNTCTCCATACNTTNTTCCCNAANACATNTCCTTNACAAANNTATACAATCTTTTCCNNCAACTTNNNTT NCNACATCTATTCNTTNTTCCCCNTCCTTCCCNTNTNATANNCTTNATCACCANAAANNATTTACTNATT NANNAAAATNNNNAATCATCANCANTNNAACTCCAACANTCAACTANTANNTCNNTACANTNANACANCA ACNCNNATNNACNCTNCACNACCNCTTCTANACNATCTTTTANNTTAATAAAACANACCAAACATATACA ANCANTTNAANCTNNTANCTAANATCTTTANTCNNNCCAATTCTTCNTCCATACAANNATACAANCTTNT TCCNCATNTTNCCACCCAAATCCNNTATNNANNATATATNATCNTCTCTTNANATNNNATTNTNTTNTTC NCTAACCNATCTCATTCTCCNTTCACANANANTANAAANATTATATATNTTTAANNCTTTTNATTNTTNT AATTNTNCAATCTTTNAWTATTTTCTTNNTCCCTNTAAAATAATCCACCTTTTNATATATTTACTTNATT AACTT >gi|4714041|dbj|C99923.1|C99923 C99923 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 79, mRNA sequence TCTNNTCCNTCTNANACATCNNATCANNTNNNNNNTACAATCATCTCNCCNTTCANTANNTNTTTACNNA TTTCNNCNNTCNTATANCTNNCNTNACTAANNCTTTAACC >gi|4714040|dbj|C99922.1|C99922 C99922 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 78, mRNA sequence NNTRANATCTACSTTNCTNNANNTNNTNNTNNTTCNNAKNTTNCNNCNNCNNTNNAASTANTATNATCCN NANTTNAATCNNTNNNAANTTNTNACTCAATCNNCSANNAASANATACNNTTNCATCNNANCANCCNTTN ACNNANTTTTTTATNTNATCNNTNNATTNAAAATTNNNAATNANACCTCACNCNCNNTNNCNNCNCNTNC TTATNCNANCTCTATNNATCTTTTCNATNTNNANTCNCNTCANTNNTTAANNANTCNTTCNNTTCCTNNC NNTNNATNTNTANTNNCNNCNTNTNCNNCNNTTNNATATNTNTATNTNCTAACCANTCACNCNNTNNANC TTTCNTTTTTNNCNATTTNATNCNCNTCNTCNTNNTNNAAACACCNNNTTTNNAAAAATNNCANAANCTN AAAANTCCCCCNTTACCNNCACAANNTNCSNNTTAANATNNAACCNNTNAANNTTTAACCTNCNTCNNAN TNNAANATAAANTNNCNNTNNTTCANNTNNTNNNATNCATTNACNATTTNCTTCNNCNNANTNNNANNNN TNANANANNNATTANANAAANCCTTNTNTTNCTNTATNATACNACNNANNNANANTNNANNANANCNNCN NATTTACCTNANATNATTACACNCNCCNCCTNTNCNTNTNTNNANTNNTAANANNNNANACCACNNCNCA NNATTATNNNTACNANAANTTNNAANATNCTAVCNTACNCANNATATATTAAANTNNNCAAAAACAATAT CATTATNATTNNTNCACATNTTTACTNTMTNAAAANCAATANCNT >gi|4714039|dbj|C99921.1|C99921 C99921 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 77, mRNA sequence CNNNNCTTCTRAAANACNCAATCTNATNTACTCNTACATNCTANNTNCTATCTCTTCTATAATNTCTNAT CCTTTCTNCCCTCCCACWCNTTNCCNTANCCKCAAAWTCTCCTKTNAYATTTMCCTNMTCANAYTNTCCT NATNNATNSNNAYNTTCACMTANATACCAAANCACAANAAATTCNAANNTNCTNNANAAAANNCNACCAC TTTCACTAANANCATTTNNCTCNANNAANCTNATNCNANYNCCATATCCNTTNNTNANNAANTAACTTTN ATNNATTNNNNAAATNCTATCNTAAANNAAATCMCMAAKNACNANNANNNTCNTNTCACTNCCTTATCTN NTNTCTTNAATCTCCAANNTTCTNTWAANACTACAAANCTNAANCTNACATNNCTTCCTNATACTAATNA ATTNNTCCATCTCRCMTTAACANANTTTNATTATCTAATCCCCMANAANAAACTNNAANATNATNATNAA ATTTNCTNATTTTNCTNAATCCYMMCCCNAAAAANNAANACMTTTNNCMCTTKNNTNNATTCCCAATATT NANANAATCTTNAAATTNTTNNAAAATNTTTATTCCCCCTTT >gi|4714038|dbj|C99920.1|C99920 C99920 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 76, mRNA sequence TCANCTNTTTCNTTCAACNATCTAAACTATCTCAATNCTTCTTTNAATCTATTNTCNNTTTCCTTNTACT CNTCAATTTCATNTTTTTTTTN >gi|4714037|dbj|C99919.1|C99919 C99919 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 75, mRNA sequence CCCTCCCNCTCCTNNTTTCTANTTNNNTTCNNNTTCTNTTATCNNNTTTTTCNCNNNNNTCTTTTNTCNN NNCCCTNNACCNNAATTCNCNNNTCNACCAACTCNTCANATNTNNTNCTNCNCTACAATNAANCAAANNN ANTCACACTCTCNNACTNANNCTCTCCCCTCCNCTTCTNTAACCATANCNNCTCNACNTCTATNTCTCCN ATCTAACCANCTCTNNNNNTTCNANNANANATAANNANAAAANTANNNANNNACNANTATNCTTNCCCNT TCTNTNCANACTATTTTNATNTCNTCTCTCTNNNCNNTCACATTNATNAANATCNTCCTATNNATNCTTA AANTNNNNTNTNTCCCNTCCTNTNCNNTNAAANTNANCTCNNNATATNATTNCNTCNTATANCCCCNCNN CNCNNCCNATATNTTCAANNTNACCCNNATCANNAAATCAA >gi|4714036|dbj|C99918.1|C99918 C99918 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 74, mRNA sequence NTTTATCACNCCTTNCATTNATCANAASCCCTTNCTACNNCATTNANCCAKNCTNCCNAANCTNTTTCTT CNNNAAATTCANATNCAANTNATNCCACTNCAAAANCTNNAATCATTTTNTTNCCCANCACACATCAACT TNACNAANANNTTACTNMNNAACATANTNANNANNAAATNACTNAANANNAACCAACTCTTCTCAANTNN CCAAATAANCCCNNNATTCCANATTCTNATTTNTTTNACCNTNATCAATCNTNNTTTNATNNACCTCCAN ANNNCTTCAATCTCACATTATCAAATTTCNCTNTNATNTNNNATTCACTNTTTNNCTNNNTATCATCNTC CTCTCTNNCATACATATATNNNAANNAANAATCTNCTCATNARNANTTCTTATTNNTTAACNNNAANNAN TACCCCCNNANNATTATCATNNTANATNNNCTTTCCTCANARATCAANCANACAATTNCTNNNTTNCCTT NCCANAACTTTACCNAAAATCNTCACTCATCTCANNNCTNCCAATANCNATATCCRATTTTAAAAA >gi|4714035|dbj|C99917.1|C99917 C99917 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 73, mRNA sequence ATANNCNANATCCCCCCCAAANNATTNCCTNATNTNANNAACATNNNNANATCATCNTNNAATCNANCNC NNNNANTCNCCNNTNAANTNNNTNNNTNNACANTCNCNCCCNNACNNACNCNNCATNACCNCTTCACTAC NANCTNTTANNTTTNTNNNACTNNTCCTACNATATACCNTCTCTTNNTNNTNNNNCCNCNAAACTCNNCT CANNACTNNNCTCCTCNAAATTCNNATNAANNNTNTCCCNCCTNTNACNACNNNNTTCNNNATTNNANCN ATCTANNANNNNACACTCTNANAATNTNATCNNTNATTNNTCNNTNCNCTNNATCACATTNCTCNCCTTN CCANTACCACTTTTNACANANTTCCCCTTCTTTTTCNCAACNNNCNATNCTNNNANAANNNATNNNTAAC TCNNNTNCCNNCTCTNNATCNNANATANCNTNNTCCTCTCNNNNTTCCANANNNTC >gi|4714034|dbj|C99916.1|C99916 C99916 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 72, mRNA sequence NNTAATAAAAACNACNNTNNAAATNATCATATTTCCCTTTACNCAANNATCNAANANACAAACTCTCTTC CATTANNTTNNNAANTNAATNTTNATCTCAAACTCTTTNTCCATAATNNNAANCTACACAAATATTTNAC TNTTACANATNNCTTANTNAANCNATATAACAATNCNAAAAAANAATNNNNTTTCNNACAATTNATTCCT CNATCAACATTCTACAACNCNAACNAANNTTACCTTNACCANNACACTNNTTCTTTTNNTNCTNANATCT TTATTNTTAAACCNNCTCAACAACAANANAAANTTACATTCATATCAAACCCTCCAAACAATNTTTTCAC TTNNAANATACTTCNTTTCTCTACCTTNNAANATAAATTCTATTACTCCNATNATWTTCTCNTTNAANAC CNATACTNNANACTANNATTTAACCCNAAANNNNATNNANNANNAANACCACATNCACTTCCAATCTTCC TATTTNCTCAANNCCATAANNCAAATNCANTTNCTACAAACACTTNNNNANCNNTTAATCTNCNNTTAAA NAATCAACNAANTACTAACCATANACAAATATATTCTNCANCTTNNTACCCNATTNNAAACNNTTATNNT NTNNNANTNAACAATATCATACTNTTANCTNATTTAAACNATNCATCCAAANNATATTTNNTNAATNATN CCATTATCTTTNAANCTNAAATNNTTAANNTCTCTATAACCAACATCNTCTCCNCTTAAATATCTNCMCT TCTTTNTCTACRAYCAATCCACCTTATNAATAAAAAAATTTTAATTTNATNAATTTNTTATAANAAAACT TTAATNTTTNTTAAATNTNAAATTT >gi|4714033|dbj|C99914.1|C99914 C99914 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 70, mRNA sequence NNNACNAACCNNTNTACCACNATTTNNTTCNTCACTNTCTNNCCTACCCAAAANCNNATNNAATCTTNNT NAATACATNNNAANANATNNANCCCAAATCATTAAANTCCCTTCAANACCCNAAACTTTTNNNCCNNNTC NCTCNTNTACCNNTTTATCCNNTTNNTCCNTTATNCANACCNATACAATCATCCACNACCNATCACCCNN TTTTTNATTNNTTAAACAAACAACCAAACNANTCNNTTCTCTACATTTCCTTCNNNANTNNTNNTTCTCT AACNNCTCAACANTTAACCNAATTNNCNTNNNNNCTCNANNANANCCANCAACNNTTTATATNNNTNNTT CNACCNCCCNTTNACNNCTCNTCTTNCANTNATTATTTCTCNNCTAAANNCNNTNTAACCAAANACAACA CNCCANAATATCTACCAAAAANNNTTCNTNACTCSTACTTTNCNATAAAANTTTCATNATCCCATCATNN NCACCNCAANCTNAAATCCTAACCCATCCANNCCNTTNNTNNNTTTTTAACACATTTNTTNNTTTNNAAC TCCACTTTNNRAAACCTTCCTTTTNCCNNCNTTCCCAWTRANAACCTTKNCCCCCTTTTCCCCCAACC >gi|4714032|dbj|C99913.1|C99913 C99913 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 69, mRNA sequence CCTNTCCCATCNNNCCNTTRNTNNNTTTTTNACCCATTNCNNTTNNANCTCNACNTTSNAAANCNTCNTT NNCNNCNTTCCNATSATCNCATNNCCACTTTTTNCCNANCANAATATNAATNCNNCNTTNCTCANCNACN AACTNNNAATCNCANTCANATTNNATNATCCAAANNANNATATTTCTANNTNNAANATTNANNCNTTNNT NANNAANNTTATNACTNANAANNAANNTNAANCNATNANAANNAAANTNAANAANTTNANANACTCNNCN NANATNTCACTNANCATTNACNNTNNTNNTTTNNCNCACNANTCNCTTTNCANANTCACCAANNANTNTC AACNNTTTTTNNAACNTNTCNTNNACTTNTCACNTNNTNCTTAAAAATTNTTACCNTTTTCTAACTCTTT TATTATTARTTNNTTNAATTATACNTNTCNTTCCTCTNTTANTTNTTATAATATAATAAATCNATTTACT CTTTNTT >gi|4714031|dbj|C99911.1|C99911 C99911 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 67, mRNA sequence CNTTTCTNCCACATTAAAACANAANANTNCAACAATTNAANNCATANAAAANTNNCCTTATNAANCANCT NCCATTNCTTTCNANNCTATTCCACNTACCCTNNCTCAAAACTNTNNNNTTAACNTNATCCNTACTATNA CTNCATTNCAANNNAANCATNCAAATNNTNAAAACNCATNNACTNNTATTNACNNNAACACTNNTNCAAT ANCTNATATNAAANANANCAANATATNNNATTCNTACAATNTNAANNCNCAAACTTTCAANACNNCTATA NAANCANCNTNTATNCTTCTAANNNATCNATNATATANTNANTNNAATCAANAANAANCAANCTCCTNNA TCTNNACCTTCAAANCCTACCATTNANACANAANNANATNCANACAACNAACAAATTCTTCCCNACTAAN CNAANNNANAAACACTTTNNTCTCANCATAACTCAATCTCTNTTTTCACTTNTTTAATNNTTNCACTCTT TTNNCTATTATCTTCCCTTNACATATCTTTTTAATTCTNCANTTTTNACTTNNNTNANATAAAATTTTCC CAANNTNNTTTTTTTTTNTTTNTTTTNNNAATATTAACTTTTTTNAATTTTCNTANTCCCTTTNTTNNTT TTTAAAATTCCAATTNTTATTNTTCTTTTTN >gi|4714030|dbj|C99910.1|C99910 C99910 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 66, mRNA sequence CNCSCCTAANAANNAAAANATNANAANAANAANAANAANAAAACTNANNTCTNAANANACCTTTAATATT TTTNCNTNNTCTANTTTACTTTNTTATCANAAACAAANAAAATCTTTTNTNNCNTTANNTNTTAANTAAN NTTTTTNTTTTNTTTNAAACTTAAAAAAAANAACTACTCTTCNTTTTNTAANNTTATAATATNTTTNNTT TANTCCTTATCCCAAAAACTTNCATTTTNCC genometools-1.5.1/testdata/Atinsert.gbk000066400000000000000000001233061211610345200201400ustar00rootroot00000000000000LOCUS AF078689 275 bp mRNA linear EST 26-JUL-1999 DEFINITION AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. ACCESSION AF078689 VERSION AF078689.1 GI:5587835 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 275) AUTHORS Zhao,D., Chen,D., Yang,C. and Zhai,Z. TITLE Isolation of intermediate filament-like genes from Arabidopsis JOURNAL Unpublished (1999) COMMENT Contact: Tan K Plant Development Biology Institute of Botany 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. FEATURES Location/Qualifiers source 1..275 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="IFA2" /clone_lib="Arabidopsis thaliana library (Tan K)" ORIGIN 1 antnnctacn ncnncnntnn cnncnatnna antanacnna tnntnntann aatnaaannc 61 tanaancnnc nnanaantat ntnnataana aataacaaaa actnannnna tcatnaantt 121 cttcnttata ttatantttt caatctnaat ttcaattccn ccnctcncct ttttcctctc 181 cnccttttcc ntctctccna tctnctcccn ccnccnacct tntnatnatt atanctctna 241 anntccatac aannatataa aaaaaaaaaa aaaaa // LOCUS C99932 852 bp mRNA linear EST 21-SEP-1999 DEFINITION C99932 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 88, mRNA sequence. ACCESSION C99932 VERSION C99932.1 GI:4714049 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 852) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..852 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="88" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 atnrayamtc aaaaatnnan tmtanntttc atatctctcn cttttctctt catcacttcc 61 tcttcanctn anttcatcat tcaacanntc acaaannnca rannaatana ntacaacant 121 tcttacantc tcnannanaa tcttnnantn acrananant tnananaana ncnaccatcn 181 antaanatan tnacaataac aancttctca ntnattaaan ncanannana accctatnaa 241 tcctctnttt ttnannctnc tnnttacaaa tnnanattnn ttttntacnt naatnntaat 301 aaaaacnacn ntnnaaatna tcatatttcc ctttacncaa nnatcnaana nacaaactct 361 cttccattan nttnnnaant naatnttnat ctcaaactct ttntccataa tnnnaancta 421 cacaaatatt tnactnttac anatnnctta rttnaancna tataacaatn csaaaaaana 481 atnnnntttc nnacaattna ttcctcnatc aacattctac aacncnaacn aannttacct 541 ttnaccaann acactnnttc cttttnnntn ncynnaaaan cctttattnt ttaaaccnns 601 tccaccaacm aaraaaawwa ytttctwtym mtyytccaac aysytycccw wcsaatnttt 661 tttcccttnn naaaaanacc tncntttcct cctacctttn nnaaaaanaa anttcntttt 721 tactcccnaa tnaattttcc ccctttnnaa aaaccnaatn cctnnttnna cttannaatt 781 ttaacccccn aaannnnnaa tnnaannaaa naaaaaaccc ctttncccnt tcccaatcct 841 tccctanttt nc // LOCUS C99931 719 bp mRNA linear EST 21-SEP-1999 DEFINITION C99931 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 87-1, mRNA sequence. ACCESSION C99931 VERSION C99931.1 GI:4714048 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 719) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..719 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="87-1" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 ntnartnttn atctcaaact ctttntccat aatnnnaanc tacacaaata tttnactntt 61 acanatnnct tantnaancn atataacaat ncnaaaaaan aatnnnnttt cnnacaattn 121 attcctcnat caacattcta caacncnaac naannttacc ttnaccanna cactnnttct 181 tttnntnctn anatctttat tnttaaaccn nctcaacaac aananaaant tacattcata 241 tcaaaccctc caaacaatnt tttcacttnn aanatacttc ntttctctac cttnnaanat 301 aaattctatt actccnatna ttttctcntt naanaccnat actnnanact annatttaac 361 ccnaaannnn atnnannann aanaccacat ncacttccaa tcttcctatt tnctcaannc 421 cataanncaa atncanttnc tacaaacact tnnnnancnn ttaatctncn nttaaanaat 481 caacnaartt ctaaccatan acaatatwtc tncacttnnt acccattnna aacnttatnn 541 tktnnnakta acatatctac tnttnctnat taacnancat ccaaannatt ttnntnatna 601 nccytatctt naactnaatn nttaankcct ataccactct ctccctwaat tctccttctt 661 ntcwcnacat cncyttrata aaaaatttat tnataatttt ttaraaactt atttttkta // LOCUS C99930 746 bp mRNA linear EST 21-SEP-1999 DEFINITION C99930 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 86, mRNA sequence. ACCESSION C99930 VERSION C99930.1 GI:4714047 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 746) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..746 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="86" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 ntnaancnat acaacnatnc aaaaaaanan tnnnnattca cacaattnat ttctcttcca 61 acattctaca acncnaacna annntacytt ntncannaca cancttcttt tnntnctnan 121 atcttcatcn ttaacccnac anaaaaacaa nanaaantca cattcatatc aaaccctccn 181 aacaatnttt tcacttnnaa natacttcnt ttctctacct tnnaanataa attctattac 241 tctnatnatt ttctcnttna anaccnatac tnnanattan natttaaccc naaannatct 301 nntnnannna naccacatnc acttccaatc ttcctatatn ctcaanncca taanncaaac 361 ncanttntta caaacacttn nnnancnntt aatctncnnt taaanaatca acnaanctcc 421 aaccacaaac aattatattc tncancttnn taccccnatt cnaancnatt atnntntnnn 481 antnaacaat atcatattna tntcanaanc taaaanatnc atcmaaannn tatatnntna 541 atnatnccat tatcttttna aactnaaatn nttaanntct ctntnaacaa catartctcc 601 scttaaatat atntcactac ttctttatcc cccnnaataa ccttacaaan aaaaattnat 661 natttaattt nttatacnac actttattna tncctntnan ntaaccttnt ttccnctccc 721 cnaatttcct tttttttcct nttttt // LOCUS C99929 668 bp mRNA linear EST 21-SEP-1999 DEFINITION C99929 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 85, mRNA sequence. ACCESSION C99929 VERSION C99929.1 GI:4714046 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 668) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..668 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="85" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 tcaaaatatn natantcaca aatnnantct anntttcaca ttacttnctt tcctcttcat 61 cacttcctct tccnctnanc tcatcattaa acanntcaca cannncanan naatananta 121 caacaactct tacantctca cntcnaatct tnnantnacn acaananant tnananacna 181 ncnaccatca antaanatan tnacaatcac aancttctct ntnattaann acanannana 241 accctatnaa tcatctattt ttnannctnc cnnttacaaa tnnanattan ttttntacnt 301 naannntaat ccnaaanncn ntataaataa tcatatttca ctttacncna nnatanaana 361 nacanaaact cttccaanan nntnnnaant naatnttnat ctcaaactct ttntccacaa 421 tcnnaaktta aanaaatatt tntctnttac anatnnaaca ntnaancnat acaacnatnc 481 aaaaaaanan tnnnnattcn cacaattnat ttctcttcca acattctaca acncnaacna 541 annnttcctt ntnccannac acarcttcct ttnnntnctn araacttcat cnttaacccn 601 accnaaaaac canaaaaaat ccctttcttt tcaaaccccc cnaaacatnt ttttcccttt 661 nnaaaaaa // LOCUS C99928 800 bp mRNA linear EST 21-SEP-1999 DEFINITION C99928 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 84, mRNA sequence. ACCESSION C99928 VERSION C99928.1 GI:4714045 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 800) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..800 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="84" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 nnaanttaaa naaatatttn tctnttacan atnnaacant naancnatac aacnatncaa 61 aaaaanantn nnnattcaca caattnattt ctcttccaac attctacaac ncnaacnaan 121 nntaccttnt ncannacaca ncttcttttn ntnctnanat cttcatcntt aacccnacan 181 aaaaacaana naaantcaca ttcatatcaa accctccana caatnttttc acttnnaana 241 tacttcnttt ctctaccttn naanataaat tctattactc cnatnatttt ctcnttnaan 301 accnatactn nanactanna tttaacccna aannnnatnn annannaana ccacatncac 361 ttccaatctt cctatttnct caannccata anncaaacnc anttnctaca aacacttnnn 421 nancnnttaa tctncnntta aanaatcaac naantactaa ccatanacaa atatattctn 481 cancttnnta cccnattnna ancnnttatn ntntnnnant naacaatatc atactnttan 541 ctnatttaaa cnatncatca aaannatatt tnntnaatna tnccattatc tttnaanctn 601 aaatnnttaa nntctctata accaacatcn tctccnctta aatatctnca cttctttntc 661 tacnatcaat caaccttatn aataaanana tatttnatna ntttntaata anaaaacntt 721 aatntttntn aattntnaan ttattacttc tnttcttctn anttttttta tttcaatnaa 781 aataaaactc ttaccnnttt // LOCUS C99927 797 bp mRNA linear EST 21-SEP-1999 DEFINITION C99927 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 83, mRNA sequence. ACCESSION C99927 VERSION C99927.1 GI:4714044 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 797) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..797 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="83" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 ntnaancnat mcmwcnatnm wmaaaamkar tnknnattyr cayratwnat ytctcttcyw 61 myattctwsw mcncnaayna annntacctt ntnyasnacr mwscttcttt ynntnctnak 121 atcttcatnc nwtamcccna canaaamacm mkakawantc wcattcatat cmwaccctcc 181 raacaatntt ttcacttnna anatacttcn tttctctacc ttnnaanata aattctatta 241 ctctnatnat tttctcnttn aanaccnata ctnnanatta nnatttaacc cnaaannatc 301 tnntnnannn anaccacatn cacttccaat cttcctatat nctcaanncc ataanncaaa 361 cncanttntt acaaacactt nnnnancnnt taatctncnn ttaaanaatc aacnaanctc 421 caaccacaaa caattatatt ctncancttn ntacccnatt cnaancnatt atnntntnnn 481 antnaacaat ataatattna tntcananct aaaanatnca tccaaaannn tatatnntna 541 atnatnccat tatctttnaa nctnaaatnn ttaanntctc tntnacaaac atantctccn 601 tttaaatatc actacttctt tttcaacaac aaccttacna ataaantnna ctttnatnan 661 tttaatttnt tatacnacaa cnttnttnat ncttntnatn taatcnttnt ttctnctctc 721 cnanttttcn ttttactttt tttttcatnt tttnctatca atnaaataaa nntataaaac 781 tctcttnntt ttaaant // LOCUS C99926 371 bp mRNA linear EST 21-SEP-1999 DEFINITION C99926 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 82, mRNA sequence. ACCESSION C99926 VERSION C99926.1 GI:4714043 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 371) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..371 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="82" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 nnaanttaaa naaatatttn tctnttacan atnnaacant naancnatac aacnatncaa 61 aaaaanantn nnnattcaca caattnattt ctcttccaac attctacaac ncnaacnaan 121 nntaccttnt ncannacaca ncttcttttn ntnctnanat cttcatcntt aacccnacan 181 aaaaacaana naaantcaca ttcatatcaa accmtsswrm cmrkrtyytc acttnnaana 241 tacttcnttt ctctaccttn tcacctaaat tcaattcatc ntacccnnat cctcnattct 301 tttncttttt accctnnaan aaatactcat aanccacctc tnttatttac ccccaatctt 361 cacaanaaaa a // LOCUS C99925 565 bp mRNA linear EST 21-SEP-1999 DEFINITION C99925 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 81, mRNA sequence. ACCESSION C99925 VERSION C99925.1 GI:4714042 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 565) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..565 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="81" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 cntctccata cnttnttccc naanacatnt ccttnacaaa nntatacaat cttttccnnc 61 aacttnnntt ncnacatcta ttcnttnttc cccntccttc ccntntnata nncttnatca 121 ccanaaanna tttactnatt nannaaaatn nnnaatcatc ancantnnaa ctccaacant 181 caactantan ntcnntacan tnanacanca acncnnatnn acnctncacn accncttcta 241 nacnatcttt tannttaata aaacanacca aacatataca ancanttnaa nctnntanct 301 aanatcttta ntcnnnccaa ttcttcntcc atacaannat acaancttnt tccncatntt 361 nccacccaaa tccnntatnn annatatatn atcntctctt nanatnnnat tntnttnttc 421 nctaaccnat ctcattctcc nttcacanan antanaaana ttatatatnt ttaanncttt 481 tnattnttnt aattntncaa tctttnawta ttttcttnnt ccctntaaaa taatccacct 541 tttnatatat ttacttnatt aactt // LOCUS C99923 110 bp mRNA linear EST 21-SEP-1999 DEFINITION C99923 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 79, mRNA sequence. ACCESSION C99923 VERSION C99923.1 GI:4714041 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 110) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..110 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="79" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 tctnntccnt ctnanacatc nnatcanntn nnnnntacaa tcatctcncc nttcantann 61 tntttacnna tttcnncnnt cntatanctn ncntnactaa nnctttaacc // LOCUS C99922 815 bp mRNA linear EST 21-SEP-1999 DEFINITION C99922 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 78, mRNA sequence. ACCESSION C99922 VERSION C99922.1 GI:4714040 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 815) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..815 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="78" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 nntranatct acsttnctnn anntnntnnt nnttcnnakn ttncnncnnc nntnnaasta 61 ntatnatccn nanttnaatc nntnnnaant tntnactcaa tcnncsanna asanatacnn 121 ttncatcnna ncanccnttn acnnantttt ttatntnatc nntnnattna aaattnnnaa 181 tnanacctca cncncnntnn cnncncntnc ttatncnanc tctatnnatc ttttcnatnt 241 nnantcncnt cantnnttaa nnantcnttc nnttcctnnc nntnnatntn tantnncnnc 301 ntntncnncn nttnnatatn tntatntnct aaccantcac ncnntnnanc tttcnttttt 361 nncnatttna tncncntcnt cntnntnnaa acaccnnntt tnnaaaaatn ncanaanctn 421 aaaantcccc cnttaccnnc acaanntncs nnttaanatn naaccnntna anntttaacc 481 tncntcnnan tnnaanataa antnncnntn nttcanntnn tnnnatncat tnacnatttn 541 cttcnncnna ntnnnannnn tnananannn attananaaa nccttntntt nctntatnat 601 acnacnnann nanantnnan nanancnncn natttacctn anatnattac acncnccncc 661 tntncntntn tnnantnnta anannnnana ccacnncnca nnattatnnn tacnanaant 721 tnnaanatnc tavcntacnc annatatatt aaantnnnca aaaacaatat cattatnatt 781 nntncacatn tttactntmt naaaancaat ancnt // LOCUS C99921 602 bp mRNA linear EST 21-SEP-1999 DEFINITION C99921 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 77, mRNA sequence. ACCESSION C99921 VERSION C99921.1 GI:4714039 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 602) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..602 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="77" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 cnnnncttct raaanacnca atctnatnta ctcntacatn ctanntncta tctcttctat 61 aatntctnat cctttctncc ctcccacwcn ttnccntanc ckcaaawtct cctktnayat 121 ttmcctnmtc anaytntcct natnnatnsn naynttcacm tanataccaa ancacaanaa 181 attcnaannt nctnnanaaa anncnaccac tttcactaan ancatttnnc tcnannaanc 241 tnatncnany nccatatccn ttnntnanna antaactttn atnnattnnn naaatnctat 301 cntaaannaa atcmcmaakn acnannannn tcntntcact nccttatctn ntntcttnaa 361 tctccaannt tctntwaana ctacaaanct naanctnaca tnncttcctn atactaatna 421 attnntccat ctcrcmttaa canantttna ttatctaatc cccmanaana aactnnaana 481 tnatnatnaa atttnctnat tttnctnaat ccymmcccna aaaannaana cmtttnncmc 541 ttknntnnat tcccaatatt nananaatct tnaaattntt nnaaaatntt tattccccct 601 tt // LOCUS C99920 92 bp mRNA linear EST 21-SEP-1999 DEFINITION C99920 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 76, mRNA sequence. ACCESSION C99920 VERSION C99920.1 GI:4714038 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 92) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..92 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="76" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 tcanctnttt cnttcaacna tctaaactat ctcaatnctt ctttnaatct attntcnntt 61 tccttntact cntcaatttc atnttttttt tn // LOCUS C99919 461 bp mRNA linear EST 21-SEP-1999 DEFINITION C99919 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 75, mRNA sequence. ACCESSION C99919 VERSION C99919.1 GI:4714037 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 461) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..461 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="75" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 ccctcccnct cctnntttct anttnnnttc nnnttctntt atcnnntttt tcncnnnnnt 61 cttttntcnn nnccctnnac cnnaattcnc nnntcnacca actcntcana tntnntnctn 121 cnctacaatn aancaaannn antcacactc tcnnactnan nctctcccct ccncttctnt 181 aaccatancn nctcnacntc tatntctccn atctaaccan ctctnnnnnt tcnannanan 241 ataannanaa aantannnan nnacnantat ncttncccnt tctntncana ctattttnat 301 ntcntctctc tnnncnntca cattnatnaa natcntccta tnnatnctta aantnnnntn 361 tntcccntcc tntncnntna aantnanctc nnnatatnat tncntcntat anccccncnn 421 cncnnccnat atnttcaann tnacccnnat cannaaatca a // LOCUS C99918 556 bp mRNA linear EST 21-SEP-1999 DEFINITION C99918 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 74, mRNA sequence. ACCESSION C99918 VERSION C99918.1 GI:4714036 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 556) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..556 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="74" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 ntttatcacn ccttncattn atcanaascc cttnctacnn cattnancca knctnccnaa 61 nctntttctt cnnnaaattc anatncaant natnccactn caaaanctnn aatcattttn 121 ttncccanca cacatcaact tnacnaanan nttactnmnn aacatantna nnannaaatn 181 actnaanann aaccaactct tctcaantnn ccaaataanc ccnnnattcc anattctnat 241 ttntttnacc ntnatcaatc ntnntttnat nnacctccan annncttcaa tctcacatta 301 tcaaatttcn ctntnatntn nnattcactn tttnnctnnn tatcatcntc ctctctnnca 361 tacatatatn nnaannaana atctnctcat narnanttct tattnnttaa cnnnaannan 421 tacccccnna nnattatcat nntanatnnn ctttcctcan aratcaanca nacaattnct 481 nnnttncctt nccanaactt taccnaaaat cntcactcat ctcannnctn ccaatancna 541 tatccrattt taaaaa // LOCUS C99917 476 bp mRNA linear EST 21-SEP-1999 DEFINITION C99917 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 73, mRNA sequence. ACCESSION C99917 VERSION C99917.1 GI:4714035 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 476) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..476 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="73" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 atanncnana tcccccccaa annattncct natntnanna acatnnnnan atcatcntnn 61 aatcnancnc nnnnantcnc cnntnaantn nntnnntnna cantcncncc cnnacnnacn 121 cnncatnacc ncttcactac nanctnttan ntttntnnna ctnntcctac natataccnt 181 ctcttnntnn tnnnnccncn aaactcnnct cannactnnn ctcctcnaaa ttcnnatnaa 241 nnntntcccn cctntnacna cnnnnttcnn nattnnancn atctannann nnacactctn 301 anaatntnat cnntnattnn tcnntncnct nnatcacatt nctcnccttn ccantaccac 361 ttttnacana nttccccttc tttttcncaa cnnncnatnc tnnnanaann natnnntaac 421 tcnnntnccn nctctnnatc nnanatancn tnntcctctc nnnnttccan annntc // LOCUS C99916 865 bp mRNA linear EST 21-SEP-1999 DEFINITION C99916 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 72, mRNA sequence. ACCESSION C99916 VERSION C99916.1 GI:4714034 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 865) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..865 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="72" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 nntaataaaa acnacnntnn aaatnatcat atttcccttt acncaannat cnaananaca 61 aactctcttc cattannttn nnaantnaat nttnatctca aactctttnt ccataatnnn 121 aanctacaca aatatttnac tnttacanat nncttantna ancnatataa caatncnaaa 181 aaanaatnnn ntttcnnaca attnattcct cnatcaacat tctacaacnc naacnaannt 241 taccttnacc annacactnn ttcttttnnt nctnanatct ttattnttaa accnnctcaa 301 caacaanana aanttacatt catatcaaac cctccaaaca atnttttcac ttnnaanata 361 cttcntttct ctaccttnna anataaattc tattactccn atnatwttct cnttnaanac 421 cnatactnna nactannatt taacccnaaa nnnnatnnan nannaanacc acatncactt 481 ccaatcttcc tatttnctca annccataan ncaaatncan ttnctacaaa cacttnnnna 541 ncnnttaatc tncnnttaaa naatcaacna antactaacc atanacaaat atattctnca 601 ncttnntacc cnattnnaaa cnnttatnnt ntnnnantna acaatatcat actnttanct 661 natttaaacn atncatccaa annatatttn ntnaatnatn ccattatctt tnaanctnaa 721 atnnttaann tctctataac caacatcntc tccncttaaa tatctncmct tctttntcta 781 craycaatcc accttatnaa taaaaaaatt ttaatttnat naatttntta taanaaaact 841 ttaatntttn ttaaatntna aattt // LOCUS C99914 628 bp mRNA linear EST 21-SEP-1999 DEFINITION C99914 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 70, mRNA sequence. ACCESSION C99914 VERSION C99914.1 GI:4714033 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 628) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..628 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="70" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 nnnacnaacc nntntaccac natttnnttc ntcactntct nncctaccca aaancnnatn 61 naatcttnnt naatacatnn naananatnn ancccaaatc attaaantcc cttcaanacc 121 cnaaactttt nnnccnnntc nctcntntac cnntttatcc nnttnntccn ttatncanac 181 cnatacaatc atccacnacc natcacccnn tttttnattn nttaaacaaa caaccaaacn 241 antcnnttct ctacatttcc ttcnnnantn ntnnttctct aacnnctcaa canttaaccn 301 aattnncntn nnnnctcnan nananccanc aacnntttat atnnntnntt cnaccncccn 361 ttnacnnctc ntcttncant nattatttct cnnctaaann cnntntaacc aaanacaaca 421 cnccanaata tctaccaaaa annnttcntn actcstactt tncnataaaa ntttcatnat 481 cccatcatnn ncaccncaan ctnaaatcct aacccatcca nnccnttnnt nnntttttaa 541 cacatttntt nntttnnaac tccactttnn raaaccttcc ttttnccnnc nttcccawtr 601 anaaccttkn cccccttttc ccccaacc // LOCUS C99913 497 bp mRNA linear EST 21-SEP-1999 DEFINITION C99913 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 69, mRNA sequence. ACCESSION C99913 VERSION C99913.1 GI:4714032 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 497) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..497 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="69" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 cctntcccat cnnnccnttr ntnnnttttt nacccattnc nnttnnanct cnacnttsna 61 aancntcntt nncnncnttc cnatsatcnc atnnccactt tttnccnanc anaatatnaa 121 tncnncnttn ctcancnacn aactnnnaat cncantcana ttnnatnatc caaannanna 181 tatttctann tnnaanattn anncnttnnt nannaanntt atnactnana annaanntna 241 ancnatnana annaaantna anaanttnan anactcnncn nanatntcac tnancattna 301 cnntnntnnt ttnncncacn antcnctttn canantcacc aannantntc aacnnttttt 361 nnaacntntc ntnnacttnt cacntnntnc ttaaaaattn ttaccntttt ctaactcttt 421 tattattart tnnttnaatt atacntntcn ttcctctntt anttnttata atataataaa 481 tcnatttact ctttntt // LOCUS C99911 661 bp mRNA linear EST 21-SEP-1999 DEFINITION C99911 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 67, mRNA sequence. ACCESSION C99911 VERSION C99911.1 GI:4714031 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 661) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..661 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="67" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 cntttctncc acattaaaac anaanantnc aacaattnaa nncatanaaa antnncctta 61 tnaancanct nccattnctt tcnannctat tccacntacc ctnnctcaaa actntnnnnt 121 taacntnatc cntactatna ctncattnca annnaancat ncaaatnntn aaaacncatn 181 nactnntatt nacnnnaaca ctnntncaat anctnatatn aaanananca anatatnnna 241 ttcntacaat ntnaanncnc aaactttcaa nacnnctata naancancnt ntatncttct 301 aannnatcna tnatatantn antnnaatca anaanaanca anctcctnna tctnnacctt 361 caaancctac cattnanaca naannanatn canacaacna acaaattctt cccnactaan 421 cnaannnana aacactttnn tctcancata actcaatctc tnttttcact tntttaatnn 481 ttncactctt ttnnctatta tcttcccttn acatatcttt ttaattctnc anttttnact 541 tnnntnanat aaaattttcc caanntnntt tttttttntt tnttttnnna atattaactt 601 ttttnaattt tcntantccc tttnttnntt tttaaaattc caattnttat tnttcttttt 661 n // LOCUS C99910 241 bp mRNA linear EST 21-SEP-1999 DEFINITION C99910 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 66, mRNA sequence. ACCESSION C99910 VERSION C99910.1 GI:4714030 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 241) AUTHORS Motohashi,R., Shinozaki,K. and Yamaguchi-Shinozaki,K. TITLE Arabidopsis thaliana YAC CIC3B1 region specific cDNA,clone 2 JOURNAL Unpublished (1999) COMMENT Contact: Motohashi R Laboratory of Plant Molecular Biology Institute of Physical and Chemical Research(RIKEN) 3-1-1, Koyadai, Tsukuba 305-0074, Japan. FEATURES Location/Qualifiers source 1..241 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="66" /clone_lib="Arabidopsis thaliana library (Motohashi R)" ORIGIN 1 cncscctaan aannaaaana tnanaanaan aanaanaana aaactnannt ctnaananac 61 ctttaatatt tttncntnnt ctantttact ttnttatcan aaacaaanaa aatcttttnt 121 nncnttannt nttaantaan ntttttnttt tntttnaaac ttaaaaaaaa naactactct 181 tcnttttnta annttataat atntttnntt tantccttat cccaaaaact tncattttnc 241 c // genometools-1.5.1/testdata/Atinsert_seqrange_13-17_rev.fna000066400000000000000000000077171211610345200234410ustar00rootroot00000000000000>gi|4714043|dbj|C99926.1|C99926 C99926 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 82, mRNA sequence aaaaanaacacttctaacccccatttattntctccaccnaatactcataaanaanntcccatttttcnttttcttanctcctanncccatnctacttaacttaaatccactnttccatctctttncttcatanaannttcactnntnnnncnnnnntnccaaactatacttacactnaaananaacaaaaanacancccaattnctacttctanantcntnnttttcttcnacacannacntnttccatnnnaancaancncaacatcttacaaccttctctttanttaacacacttannnntnanaaaaaaacntancaacatancnaantnacaanntanacattntctntttataaanaaattnaann >gi|4714044|dbj|C99927.1|C99927 C99927 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 83, mRNA sequence tnaaattttnnttctctcaaaatatnnaaataaantaactatcnttttntactttttttttcattttncttttnancctctcntctttnttnctaatntantnttcntanttnttncaacancatattntttaatttnantantttcanntnaaataancattccaacaacaactttttcttcatcactataaatttncctctnatacaaacantntctctnnaattnntaaantcnaantttctattaccntantaantnntatatnnnaaaacctacntanaaaatcnanactntanttataatataacaantnannntntnntattancnaancttancccatnnttcnacntcttatattaacaaacaccaacctcnaancaactaanaaattnncntctaattnncnannnnttcacaaacattnttnacncaaacnnaataccnnaactcntatatccttctaaccttcacntacaccanannnanntnntctannaaancccaatttannattananntcatanccanaanttnctcttttantantctcattatcttaaatanaannttccatctctttncttcatanaannttcacttttntaacaancctcccannctatacttacnctnananannncanaaanacancccnatnncntacttctanantcntnnntttcttcnnnncannanntnttccatnnnaannaancncnnnntcttannnncttctctntanntannacnnttannnntnannaaaannnntancnncntancnaantn >gi|4714045|dbj|C99928.1|C99928 C99928 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 84, mRNA sequence tttnnccattctcaaaataaaantaactttatttttttnantcttcttntcttcattattnaantnttaantntttntaattncaaaanaataatntttnantantttatananaaataantattccaactaactancatctntttcttcacntctataaattcncctctnctacaaccaatatctctnnaattnntaaantcnaantttctattaccntantaantnntttatannaaaactacntancaaatttantcnattntcatactataacaantnannntntnntattnncnaannttancccatnnttcnacntcttatataaacanataccaatcatnaancaactaanaaattnncntctaattnncnannnnttcacaaacatcnttnacncaaacnnaataccnnaactcntttatccttctaaccttcacntacaccanaannannanntannnnaaancccaatttannatcananntcatanccanaanttnctcttttantancctcattatcttaaatanaannttccatctctttncttcatanaannttcacttttntaacanacctcccaaactatacttacactnaaananaacaaaaanacancccaattnctacttctanantcntnnttttcttcnacacannacntnttccatnnnaancaancncaacatcttacaaccttctctttanttaacacacttannnntnanaaaaaaacntancaacatancnaantnacaanntanacattntctntttataaanaaattnaann >gi|4714046|dbj|C99929.1|C99929 C99929 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 85, mRNA sequence aaaaaanntttccctttttntacaaanccccccaaacttttctttccctaaaaaanaccaaaaanccancccaattnctacttcaanantcntnnntttccttcnacacannaccntnttccttnnnaancaancncaacatcttacaaccttctctttanttaacacncttannnntnanaaaaaaacntancaacatancnaantnacaanntanacattntctntttataaanaaattnaannctaacacctntttctcaaactctanttntaantnaannntnnnanaaccttctcaaanacananaanatannancncatttcactttatactaataaatatnncnnaaancctaatnnnaantncatnttttnattananntaaacattnnccntcnnantttttatctactaantatcccaanannanacannaattantntctcttcnaacactaacantnatanaatnaactaccancnancanananttnananaacancantnannttctaanctncactctnacattctcaacaacatnanataannanacnnnacacactnnacaaattactactcnantcnccttctccttcactacttctcctttcnttcattacactttnnatctnanntaaacactnatanntataaaact >gi|4714047|dbj|C99930.1|C99930 C99930 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 86, mRNA sequence tttttntccttttttttcctttaancccctcncctttnttccaatnnantntccntanttatttcacancatattntttaatttantanttaaaaanaaacattccaataannccccctatttcttcatcactntatataaattcncctctnatacaacaantntctctnnaattnntaaantcaaanttttctattaccntantaantnntatatnnnaaanctacntanaaaatcnaanactntanttatactataacaantnannntntnntattancnaancttanccccatnnttcnacntcttatattaacaaacaccaacctcnaancaactaanaaattnncntctaattnncnannnnttcacaaacattnttnacncaaacnnaataccnnaactcntatatccttctaaccttcacntacaccanannnanntnntctannaaancccaatttannattananntcatanccanaanttnctcttttantantctcattatcttaaatanaannttccatctctttncttcatanaannttcacttttntaacaancctcccaaactatacttacactnaaananaacaaaaanacancccaattnctacttctanantcntnnttttcttcnacacannacntnttncatnnnaancaancncaacatcttacaaccttctctttanttaacacacttannnntnanaaaaaaacntancaacatancnaantn genometools-1.5.1/testdata/Atinsert_seqrange_3-7.fna000066400000000000000000000077171211610345200224230ustar00rootroot00000000000000>gi|4714047|dbj|C99930.1|C99930 C99930 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 86, mRNA sequence ntnaancnatacaacnatncaaaaaaanantnnnnattcacacaattnatttctcttccaacattctacaacncnaacnaannntacnttntncannacacancttcttttnntnctnanatcttcatcnttaacccnacanaaaaacaananaaantcacattcatatcaaaccctccnaacaatnttttcacttnnaanatacttcntttctctaccttnnaanataaattctattactctnatnattttctcnttnaanaccnatactnnanattannatttaacccnaaannatctnntnnannnanaccacatncacttccaatcttcctatatnctcaannccataanncaaacncanttnttacaaacacttnnnnancnnttaatctncnnttaaanaatcaacnaanctccaaccacaaacaattatattctncancttnntaccccnattcnaancnattatnntntnnnantnaacaatatcatattnatntcanaanctaaaanatncatcnaaannntatatnntnaatnatnccattatcttttnaaactnaaatnnttaanntctctntnaacaacatantctccncttaaatatatntcactacttctttatcccccnnaataaccttacaaanaaaaattnatnatttaatttnttatacnacactttattnatncctntnanntaaccttntttccnctccccnaatttccttttttttcctnttttt >gi|4714046|dbj|C99929.1|C99929 C99929 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 85, mRNA sequence tcaaaatatnnatantcacaaatnnantctanntttcacattacttnctttcctcttcatcacttcctcttccnctnanctcatcattaaacanntcacacannncanannaatanantacaacaactcttacantctcacntcnaatcttnnantnacnacaanananttnananacnancnaccatcaantaanatantnacaatcacaancttctctntnattaannacanannanaaccctatnaatcatctatttttnannctnccnnttacaaatnnanattanttttntacntnaannntaatccnaaanncnntataaataatcatatttcactttacncnannatanaananacanaaactcttccaanannntnnnaantnaatnttnatctcaaactctttntccacaatcnnaanttaaanaaatatttntctnttacanatnnaacantnaancnatacaacnatncaaaaaaanantnnnnattcncacaattnatttctcttccaacattctacaacncnaacnaannnttccttntnccannacacancttcctttnnntnctnanaacttcatcnttaacccnaccnaaaaaccanaaaaaatccctttcttttcaaaccccccnaaacatntttttccctttnnaaaaaa >gi|4714045|dbj|C99928.1|C99928 C99928 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 84, mRNA sequence nnaanttaaanaaatatttntctnttacanatnnaacantnaancnatacaacnatncaaaaaaanantnnnnattcacacaattnatttctcttccaacattctacaacncnaacnaannntaccttntncannacacancttcttttnntnctnanatcttcatcnttaacccnacanaaaaacaananaaantcacattcatatcaaaccctccanacaatnttttcacttnnaanatacttcntttctctaccttnnaanataaattctattactccnatnattttctcnttnaanaccnatactnnanactannatttaacccnaaannnnatnnannannaanaccacatncacttccaatcttcctatttnctcaannccataanncaaacncanttnctacaaacacttnnnnancnnttaatctncnnttaaanaatcaacnaantactaaccatanacaaatatattctncancttnntacccnattnnaancnnttatnntntnnnantnaacaatatcatactnttanctnatttaaacnatncatcaaaannatatttnntnaatnatnccattatctttnaanctnaaatnnttaanntctctataaccaacatcntctccncttaaatatctncacttctttntctacnatcaatcaaccttatnaataaananatatttnatnantttntaataanaaaacnttaatntttntnaattntnaanttattacttctnttcttctnantttttttatttcaatnaaaataaaactcttaccnnttt >gi|4714044|dbj|C99927.1|C99927 C99927 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 83, mRNA sequence ntnaancnatncnncnatnnnnaaaannantnnnnattnncannatnnatntctcttcnnnnattctnnnncncnaannaannntaccttntnnannacnnnncttctttnnntnctnanatcttcatncnntancccnacanaaanacnnnananantcncattcatatcnnaccctccnaacaatnttttcacttnnaanatacttcntttctctaccttnnaanataaattctattactctnatnattttctcnttnaanaccnatactnnanattannatttaacccnaaannatctnntnnannnanaccacatncacttccaatcttcctatatnctcaannccataanncaaacncanttnttacaaacacttnnnnancnnttaatctncnnttaaanaatcaacnaanctccaaccacaaacaattatattctncancttnntacccnattcnaancnattatnntntnnnantnaacaatataatattnatntcananctaaaanatncatccaaaannntatatnntnaatnatnccattatctttnaanctnaaatnnttaanntctctntnacaaacatantctccntttaaatatcactacttctttttcaacaacaaccttacnaataaantnnactttnatnantttaatttnttatacnacaacnttnttnatncttntnatntaatcnttntttctnctctccnanttttcnttttactttttttttcatnttttnctatcaatnaaataaanntataaaactctcttnnttttaaant >gi|4714043|dbj|C99926.1|C99926 C99926 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 82, mRNA sequence nnaanttaaanaaatatttntctnttacanatnnaacantnaancnatacaacnatncaaaaaaanantnnnnattcacacaattnatttctcttccaacattctacaacncnaacnaannntaccttntncannacacancttcttttnntnctnanatcttcatcnttaacccnacanaaaaacaananaaantcacattcatatcaaaccntnnnnncnnnntnntcacttnnaanatacttcntttctctaccttntcacctaaattcaattcatcntacccnnatcctcnattcttttnctttttaccctnnaanaaatactcataanccacctctnttatttacccccaatcttcacaanaaaaa genometools-1.5.1/testdata/Atinsert_single_3.fna000066400000000000000000000015571211610345200217270ustar00rootroot00000000000000>gi|4714047|dbj|C99930.1|C99930 C99930 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 86, mRNA sequence ntnaancnatacaacnatncaaaaaaanantnnnnattcacacaattnatttctcttccaacattctacaacncnaacnaannntacnttntncannacacancttcttttnntnctnanatcttcatcnttaacccnacanaaaaacaananaaantcacattcatatcaaaccctccnaacaatnttttcacttnnaanatacttcntttctctaccttnnaanataaattctattactctnatnattttctcnttnaanaccnatactnnanattannatttaacccnaaannatctnntnnannnanaccacatncacttccaatcttcctatatnctcaannccataanncaaacncanttnttacaaacacttnnnnancnnttaatctncnnttaaanaatcaacnaanctccaaccacaaacaattatattctncancttnntaccccnattcnaancnattatnntntnnnantnaacaatatcatattnatntcanaanctaaaanatncatcnaaannntatatnntnaatnatnccattatcttttnaaactnaaatnnttaanntctctntnaacaacatantctccncttaaatatatntcactacttctttatcccccnnaataaccttacaaanaaaaattnatnatttaatttnttatacnacactttattnatncctntnanntaaccttntttccnctccccnaatttccttttttttcctnttttt genometools-1.5.1/testdata/Atinsert_single_3_rev.fna000066400000000000000000000015571211610345200226030ustar00rootroot00000000000000>gi|4714047|dbj|C99930.1|C99930 C99930 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 86, mRNA sequence tttttntccttttttttcctttaancccctcncctttnttccaatnnantntccntanttatttcacancatattntttaatttantanttaaaaanaaacattccaataannccccctatttcttcatcactntatataaattcncctctnatacaacaantntctctnnaattnntaaantcaaanttttctattaccntantaantnntatatnnnaaanctacntanaaaatcnaanactntanttatactataacaantnannntntnntattancnaancttanccccatnnttcnacntcttatattaacaaacaccaacctcnaancaactaanaaattnncntctaattnncnannnnttcacaaacattnttnacncaaacnnaataccnnaactcntatatccttctaaccttcacntacaccanannnanntnntctannaaancccaatttannattananntcatanccanaanttnctcttttantantctcattatcttaaatanaannttccatctctttncttcatanaannttcacttttntaacaancctcccaaactatacttacactnaaananaacaaaaanacancccaattnctacttctanantcntnnttttcttcnacacannacntnttncatnnnaancaancncaacatcttacaaccttctctttanttaacacacttannnntnanaaaaaaacntancaacatancnaantn genometools-1.5.1/testdata/BLOSUM62000066400000000000000000000032501211610345200167510ustar00rootroot00000000000000 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 genometools-1.5.1/testdata/BLOSUM62.gth000066400000000000000000000041121211610345200175300ustar00rootroot00000000000000# Matrix made by matblas from blosum62.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 62 # Entropy = 0.6979, Expected = -0.5209 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 0 -4 R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -4 N -2 0 6 1 -3 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -4 D -2 -2 1 6 -3 0 2 -1 -1 -3 -4 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1 -4 C 0 -3 -3 -3 9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4 Q -1 1 0 0 -3 5 2 -2 0 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1 -4 E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 G 0 -2 0 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -4 H -2 0 1 -1 -3 0 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1 -4 I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -3 -1 3 -3 -3 -1 -4 L -1 -2 -3 -4 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -4 -3 -1 -4 K -1 2 0 -1 -3 1 1 -2 -1 -3 -2 5 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1 -4 M -1 -1 -2 -3 -1 0 -2 -3 -2 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1 -4 F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1 -4 P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2 -4 S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0 -4 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -2 -2 0 -1 -1 0 -4 W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1 1 -4 -3 -2 11 2 -3 -4 -3 -2 -4 Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1 -4 V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -4 B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 1 -1 -4 Z -1 0 0 1 -3 3 4 -2 0 -3 -3 1 -1 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -4 * -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 1 genometools-1.5.1/testdata/BLOSUM62.out000066400000000000000000000034721211610345200175650ustar00rootroot00000000000000 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 0 -4 R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -4 N -2 0 6 1 -3 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -4 D -2 -2 1 6 -3 0 2 -1 -1 -3 -4 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1 -4 C 0 -3 -3 -3 9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4 Q -1 1 0 0 -3 5 2 -2 0 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1 -4 E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 G 0 -2 0 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -4 H -2 0 1 -1 -3 0 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1 -4 I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -3 -1 3 -3 -3 -1 -4 L -1 -2 -3 -4 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -4 -3 -1 -4 K -1 2 0 -1 -3 1 1 -2 -1 -3 -2 5 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1 -4 M -1 -1 -2 -3 -1 0 -2 -3 -2 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1 -4 F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1 -4 P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2 -4 S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0 -4 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -2 -2 0 -1 -1 0 -4 W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1 1 -4 -3 -2 11 2 -3 -4 -3 -2 -4 Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1 -4 V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -4 B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 1 -1 -4 Z -1 0 0 1 -3 3 4 -2 0 -3 -3 1 -1 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -4 * -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 1 genometools-1.5.1/testdata/Copysorttest.embl000066400000000000000000000011311211610345200212340ustar00rootroot00000000000000ID sequence0 XX DE XX SQ ngtgttngtn tnnntggntg tgngtnngnn ttntttgntg gngnggnggg nnnngtntgg 60 gtgntnngng ttnngntngn gntnnttggg ggnggttgtn ggtgngtgng ttngggntnn 120 gngggngnng nttnnttntt ngntgtnngt ntttnntntt ttggggntgt tgtnggngtn 180 tggttnttnt gntggggnnt nntngnntgg ttgnnggtgg ngngtntttt ggggtntgng 240 ggtgnnttnn gntngntngt tntttgntng gtggntnggn ntntnttgnt gnttngtgnn 300 ggnntnggnt nggttnnttn ntgnggtngg ttgtngtnnt gnngttgttg tggggtggtt 360 ggt 363 // genometools-1.5.1/testdata/Copysorttest.fna000066400000000000000000000005631211610345200210710ustar00rootroot00000000000000> ngtgttngtntnnntggntgtgngtnngnnttntttgntggngnggngggn nnngtntgggtgntnngngttnngntngngntnnttgggggnggttgtnggtgngtgngttngggntnng ngggngnngnttnnttnttngntgtnngtntttnntnttttggggntgttgtnggngtntggttnttntg ntggggnntnntngnntggttgnnggtggngngtnttttggggtntgngggtgnnttnngntngntngtt ntttgntnggtggntnggnntntnttgntgnttngtgnnggnntnggntnggttnnttnntgnggtnggt tgtngtnntgnngttgttgtggggtggttggt genometools-1.5.1/testdata/Copysorttest.gbk000066400000000000000000000010171211610345200210630ustar00rootroot00000000000000LOCUS sequence0 DEFINITION ORIGIN 1 ngtgttngtn tnnntggntg tgngtnngnn ttntttgntg gngnggnggg nnnngtntgg 61 gtgntnngng ttnngntngn gntnnttggg ggnggttgtn ggtgngtgng ttngggntnn 121 gngggngnng nttnnttntt ngntgtnngt ntttnntntt ttggggntgt tgtnggngtn 181 tggttnttnt gntggggnnt nntngnntgg ttgnnggtgg ngngtntttt ggggtntgng 241 ggtgnnttnn gntngntngt tntttgntng gtggntnggn ntntnttgnt gnttngtgnn 301 ggnntnggnt nggttnnttn ntgnggtngg ttgtngtnnt gnngttgttg tggggtggtt 361 ggt // genometools-1.5.1/testdata/Duplicate.embl000066400000000000000000000050761211610345200204400ustar00rootroot00000000000000ID Duplicate1 XX DE gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome XX SQ AGCTTTTCAT TCTGACTGCA ACGGGCAATA TGTCTCTGTG TGGATTAAAA AAAGAGTGTC 60 TGATAGCAGC TTCTGAACTG GTTACCTGCC GTGAGTAAAT TAAAATTTTA TTGACTTAGG 120 TCACTAAATA CTTTAACCAA TATAGGCATA GCGCACAGAC AGATAAAAAT TACAGAGTAC 180 ACAACATCCA TGAAACGCAT TAGCACCACC ATTACCACCA CCATCACCAT TACCACAGGT 240 AACGGTGCGG GCTGACGCGT ACAGGAAACA CAGAAAAAAG CCCGCACCTG ACAGTGCGGG 300 CTTTTTTTTT CGACCAAAGG TAACGAGGTA ACAACCATGC GAGTGTTGAA GTTCGGCGGT 360 ACATCAGTGG CAAATGCAGA ACGTTTTCTG CGTGTTGCCG ATATTCTGGA AAGCAATGCC 420 AGGCAGGGGC AGGTGGCCAC CGTCCTCTCT GCCCCCGCCA AAATCACCAA CCACCTGGTG 480 GCGATGATTG AAAAAACCAT TAGCGGCCAG GATGCTTTAC CCAATATCAG CGATGCCGAA 540 CGTATTTTTG CCGAACTTTT GACGGGACTC GCCGCCGCCC AGCCGGGGTT CCCGCTGGCG 600 CAATTGAAAA CTTTCGTCGA TCAGGAATTT GCCCAAATAA AACATGTCCT GCATGGCATT 660 AGTTTGTTGG GGCAGTGCCC GGATAGCATC AACGCTGCGC TGATTTGCCG TGGCGAGAAA 720 ATGTCGATCG CCATTATGGC CGGCGTATTA GAAGCGCGCG GTCACAACGT TACTGTTATC 780 GATCCGGTCG AAAAACTGCT GGCAGTGGGG CATTACCTCG AATCTACCGT CGATATTGCT 840 // ID Duplicate1 XX DE gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome XX SQ AGCTTTTCAT TCTGACTGCA ACGGGCAATA TGTCTCTGTG TGGATTAAAA AAAGAGTGTC 60 TGATAGCAGC TTCTGAACTG GTTACCTGCC GTGAGTAAAT TAAAATTTTA TTGACTTAGG 120 TCACTAAATA CTTTAACCAA TATAGGCATA GCGCACAGAC AGATAAAAAT TACAGAGTAC 180 ACAACATCCA TGAAACGCAT TAGCACCACC ATTACCACCA CCATCACCAT TACCACAGGT 240 AACGGTGCGG GCTGACGCGT ACAGGAAACA CAGAAAAAAG CCCGCACCTG ACAGTGCGGG 300 CTTTTTTTTT CGACCAAAGG TAACGAGGTA ACAACCATGC GAGTGTTGAA GTTCGGCGGT 360 ACATCAGTGG CAAATGCAGA ACGTTTTCTG CGTGTTGCCG ATATTCTGGA AAGCAATGCC 420 AGGCAGGGGC AGGTGGCCAC CGTCCTCTCT GCCCCCGCCA AAATCACCAA CCACCTGGTG 480 GCGATGATTG AAAAAACCAT TAGCGGCCAG GATGCTTTAC CCAATATCAG CGATGCCGAA 540 CGTATTTTTG CCGAACTTTT GACGGGACTC GCCGCCGCCC AGCCGGGGTT CCCGCTGGCG 600 CAATTGAAAA CTTTCGTCGA TCAGGAATTT GCCCAAATAA AACATGTCCT GCATGGCATT 660 AGTTTGTTGG GGCAGTGCCC GGATAGCATC AACGCTGCGC TGATTTGCCG TGGCGAGAAA 720 ATGTCGATCG CCATTATGGC CGGCGTATTA GAAGCGCGCG GTCACAACGT TACTGTTATC 780 GATCCGGTCG AAAAACTGCT GGCAGTGGGG CATTACCTCG AATCTACCGT CGATATTGCT 840 GAGTCCACCC GCCGTATTGC GGCAAGCCGC ATTCCGGCTG ATCACATGGT GCTGATGGCA 900 GGTTTCACCG 910 // genometools-1.5.1/testdata/Duplicate.fna000066400000000000000000000035551211610345200202650ustar00rootroot00000000000000>gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC TTCTGAACTGGTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAA TATAGGCATAGCGCACAGACAGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACC ATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGACGCGTACAGGAAACACAGAAAAAAG CCCGCACCTGACAGTGCGGGCTTTTTTTTTCGACCAAAGGTAACGAGGTAACAACCATGCGAGTGTTGAA GTTCGGCGGTACATCAGTGGCAAATGCAGAACGTTTTCTGCGTGTTGCCGATATTCTGGAAAGCAATGCC AGGCAGGGGCAGGTGGCCACCGTCCTCTCTGCCCCCGCCAAAATCACCAACCACCTGGTGGCGATGATTG AAAAAACCATTAGCGGCCAGGATGCTTTACCCAATATCAGCGATGCCGAACGTATTTTTGCCGAACTTTT GACGGGACTCGCCGCCGCCCAGCCGGGGTTCCCGCTGGCGCAATTGAAAACTTTCGTCGATCAGGAATTT GCCCAAATAAAACATGTCCTGCATGGCATTAGTTTGTTGGGGCAGTGCCCGGATAGCATCAACGCTGCGC TGATTTGCCGTGGCGAGAAAATGTCGATCGCCATTATGGCCGGCGTATTAGAAGCGCGCGGTCACAACGT TACTGTTATCGATCCGGTCGAAAAACTGCTGGCAGTGGGGCATTACCTCGAATCTACCGTCGATATTGCT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC TTCTGAACTGGTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAA TATAGGCATAGCGCACAGACAGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACC ATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGACGCGTACAGGAAACACAGAAAAAAG CCCGCACCTGACAGTGCGGGCTTTTTTTTTCGACCAAAGGTAACGAGGTAACAACCATGCGAGTGTTGAA GTTCGGCGGTACATCAGTGGCAAATGCAGAACGTTTTCTGCGTGTTGCCGATATTCTGGAAAGCAATGCC AGGCAGGGGCAGGTGGCCACCGTCCTCTCTGCCCCCGCCAAAATCACCAACCACCTGGTGGCGATGATTG AAAAAACCATTAGCGGCCAGGATGCTTTACCCAATATCAGCGATGCCGAACGTATTTTTGCCGAACTTTT GACGGGACTCGCCGCCGCCCAGCCGGGGTTCCCGCTGGCGCAATTGAAAACTTTCGTCGATCAGGAATTT GCCCAAATAAAACATGTCCTGCATGGCATTAGTTTGTTGGGGCAGTGCCCGGATAGCATCAACGCTGCGC TGATTTGCCGTGGCGAGAAAATGTCGATCGCCATTATGGCCGGCGTATTAGAAGCGCGCGGTCACAACGT TACTGTTATCGATCCGGTCGAAAAACTGCTGGCAGTGGGGCATTACCTCGAATCTACCGTCGATATTGCT GAGTCCACCCGCCGTATTGCGGCAAGCCGCATTCCGGCTGATCACATGGTGCTGATGGCAGGTTTCACCG genometools-1.5.1/testdata/Duplicate.gbk000066400000000000000000001076611211610345200202670ustar00rootroot00000000000000LOCUS U00096 840 bp DNA linear BCT 11-MAR-2009 DEFINITION Escherichia coli str. K-12 substr. MG1655, complete genome. ACCESSION U00096 REGION: 1..840 VERSION U00096.2 GI:48994873 PROJECT GenomeProject:225 DBLINK Project:225 KEYWORDS . SOURCE Escherichia coli str. K-12 substr. MG1655 ORGANISM Escherichia coli str. K-12 substr. MG1655 Bacteria; Proteobacteria; Gammaproteobacteria; Enterobacteriales; Enterobacteriaceae; Escherichia. REFERENCE 1 (sites) AUTHORS Kang,W.K., Icho,T., Isono,S., Kitakawa,M. and Isono,K. TITLE Characterization of the gene rimK responsible for the addition of glutamic acid residues to the C-terminus of ribosomal protein S6 in Escherichia coli K12 JOURNAL Mol. Gen. Genet. 217 (2-3), 281-288 (1989) PUBMED 2570347 REFERENCE 2 (bases 1 to 840) AUTHORS Blattner,F.R., Plunkett,G., Bloch,C.A., Perna,N.T., Burland,V., Riley,M., Collado-Vides,J., Glasner,J.D., Rode,C.K., Mayhew,G.F., Gregor,J., Davis,N.W., Kirkpatrick,H.A., Goeden,M.A., Rose,D.J., Mau,B. and Shao,Y. TITLE The complete genome sequence of Escherichia coli K-12 JOURNAL Science 277 (5331), 1453-1474 (1997) PUBMED 9278503 REFERENCE 3 (bases 1 to 840) AUTHORS Riley,M., Abe,T., Arnaud,M.B., Berlyn,M.K., Blattner,F.R., Chaudhuri,R.R., Glasner,J.D., Horiuchi,T., Keseler,I.M., Kosuge,T., Mori,H., Perna,N.T., Plunkett,G. III, Rudd,K.E., Serres,M.H., Thomas,G.H., Thomson,N.R., Wishart,D. and Wanner,B.L. TITLE Escherichia coli K-12: a cooperatively developed annotation snapshot--2005 JOURNAL Nucleic Acids Res. 34 (1), 1-9 (2006) PUBMED 16397293 REMARK Publication Status: Online-Only REFERENCE 4 (bases 1 to 840) AUTHORS Arnaud,M., Berlyn,M.K.B., Blattner,F.R., Galperin,M.Y., Glasner,J.D., Horiuchi,T., Kosuge,T., Mori,H., Perna,N.T., Plunkett,G. III, Riley,M., Rudd,K.E., Serres,M.H., Thomas,G.H. and Wanner,B.L. TITLE Workshop on Annotation of Escherichia coli K-12 JOURNAL Unpublished REMARK Woods Hole, Mass., on 14-18 November 2003 (sequence corrections) REFERENCE 5 (bases 1 to 840) AUTHORS Glasner,J.D., Perna,N.T., Plunkett,G. III, Anderson,B.D., Bockhorst,J., Hu,J.C., Riley,M., Rudd,K.E. and Serres,M.H. TITLE ASAP: Escherichia coli K-12 strain MG1655 version m56 JOURNAL Unpublished REMARK ASAP download 10 June 2004 (annotation updates) REFERENCE 6 (bases 1 to 840) AUTHORS Hayashi,K., Morooka,N., Mori,H. and Horiuchi,T. TITLE A more accurate sequence comparison between genomes of Escherichia coli K12 W3110 and MG1655 strains JOURNAL Unpublished REMARK GenBank accessions AG613214 to AG613378 (sequence corrections) REFERENCE 7 (bases 1 to 840) AUTHORS Perna,N.T. TITLE Escherichia coli K-12 MG1655 yqiK-rfaE intergenic region, genomic sequence correction JOURNAL Unpublished REMARK GenBank accession AY605712 (sequence corrections) REFERENCE 8 (bases 1 to 840) AUTHORS Rudd,K.E. TITLE A manual approach to accurate translation start site annotation: an E. coli K-12 case study JOURNAL Unpublished REFERENCE 9 (bases 1 to 840) AUTHORS Blattner,F.R. and Plunkett,G. III. TITLE Direct Submission JOURNAL Submitted (16-JAN-1997) Laboratory of Genetics, University of Wisconsin, 425G Henry Mall, Madison, WI 53706-1580, USA REFERENCE 10 (bases 1 to 840) AUTHORS Blattner,F.R. and Plunkett,G. III. TITLE Direct Submission JOURNAL Submitted (02-SEP-1997) Laboratory of Genetics, University of Wisconsin, 425G Henry Mall, Madison, WI 53706-1580, USA REFERENCE 11 (bases 1 to 840) AUTHORS Plunkett,G. III. TITLE Direct Submission JOURNAL Submitted (13-OCT-1998) Laboratory of Genetics, University of Wisconsin, 425G Henry Mall, Madison, WI 53706-1580, USA REFERENCE 12 (bases 1 to 840) AUTHORS Plunkett,G. III. TITLE Direct Submission JOURNAL Submitted (10-JUN-2004) Laboratory of Genetics, University of Wisconsin, 425G Henry Mall, Madison, WI 53706-1580, USA REMARK Sequence update by submitter REFERENCE 13 (bases 1 to 840) AUTHORS Plunkett,G. III. TITLE Direct Submission JOURNAL Submitted (07-FEB-2006) Laboratory of Genetics, University of Wisconsin, 425G Henry Mall, Madison, WI 53706-1580, USA REMARK Protein updates by submitter REFERENCE 14 (bases 1 to 840) AUTHORS Rudd,K.E. TITLE Direct Submission JOURNAL Submitted (24-APR-2007) Department of Biochemistry and Molecular Biology, University of Miami Miller School of Medicine, 118 Gautier Bldg., Miami, FL 33136, USA REMARK Annotation update from ecogene.org as a multi-database collaboration REFERENCE 15 (bases 1 to 840) AUTHORS Rudd,K.E. TITLE Direct Submission JOURNAL Submitted (26-SEP-2007) Department of Biochemistry and Molecular Biology, University of Miami Miller School of Medicine, 118 Gautier Bldg., Miami, FL 33136, USA REMARK Annotation update from ecogene.org as a multi-database collaboration REFERENCE 16 (bases 1 to 840) AUTHORS Rudd,K.E. TITLE Direct Submission JOURNAL Submitted (12-MAR-2008) Department of Biochemistry and Molecular Biology, University of Miami Miller School of Medicine, 118 Gautier Bldg., Miami, FL 33136, USA REMARK Annotation update from ecogene.org as a multi-database collaboration REFERENCE 17 (bases 1 to 840) AUTHORS Rudd,K.E. TITLE Direct Submission JOURNAL Submitted (22-DEC-2008) Department of Biochemistry and Molecular Biology, University of Miami Miller School of Medicine, 118 Gautier Bldg., Miami, FL 33136, USA REMARK Annotation update from ecogene.org as a multi-database collaboration COMMENT On or before Jun 21, 2004 this sequence version replaced gi:1786181, gi:1786192, gi:2367095, gi:1786217, gi:1786230, gi:1786240, gi:1786250, gi:1786262, gi:1786283, gi:1786298, gi:1786306, gi:1786315, gi:1786327, gi:1786339, gi:1786348, gi:1786358, gi:1786370, gi:1786383, gi:1786395, gi:1786402, gi:1786415, gi:2367098, gi:2367099, gi:1786454, gi:1786465, gi:2367103, gi:2367108, gi:1786501, gi:1786510, gi:1786520, gi:1786532, gi:1786542, gi:1786554, gi:1786568, gi:1786580, gi:1786596, gi:1786603, gi:1786614, gi:1786628, gi:1786639, gi:1786649, gi:1786660, gi:1786671, gi:1786683, gi:1786692, gi:1786705, gi:1786716, gi:1786728, gi:1786739, gi:1786751, gi:1786766, gi:1786782, gi:1786790, gi:1786800, gi:1786808, gi:1786819, gi:1786836, gi:1786849, gi:1786862, gi:1786875, gi:1786888, gi:1786896, gi:1786910, gi:1786920, gi:1786934, gi:1786947, gi:1786955, gi:1786967, gi:1786978, gi:1786988, gi:1786998, gi:1787015, gi:1787025, gi:1787036, gi:1787047, gi:1787058, gi:1787070, gi:1787084, gi:1787097, gi:1787106, gi:1787115, gi:1787125, gi:1787134, gi:1787148, gi:1787156, gi:1787169, gi:1787180, gi:1787189, gi:1787202, gi:2367111, gi:2367113, gi:1787233, gi:1787248, gi:1787256, gi:1787265, gi:1787282, gi:1787293, gi:1787308, gi:1787322, gi:1787332, gi:1787345, gi:1787358, gi:1787371, gi:1787382, gi:1787405, gi:1787417, gi:1787434, gi:1787444, gi:1787453, gi:1787467, gi:1787476, gi:1787486, gi:1787496, gi:1787509, gi:1787523, gi:2367115, gi:1787543, gi:2367117, gi:1787566, gi:1787578, gi:1787588, gi:1787600, gi:1787613, gi:1787633, gi:1787643, gi:1787652, gi:1787665, gi:1787673, gi:1787682, gi:1787695, gi:1787706, gi:1787720, gi:1787730, gi:1787742, gi:1787752, gi:1787764, gi:1787773, gi:1787783, gi:1787790, gi:1787801, gi:1787814, gi:2367119, gi:1787841, gi:1787862, gi:1787875, gi:1787888, gi:1787898, gi:2367121, gi:1787921, gi:1787935, gi:1787945, gi:1787955, gi:1787966, gi:1787978, gi:2367122, gi:1787997, gi:1788011, gi:1788022, gi:1788033, gi:1788045, gi:1788058, gi:1788067, gi:1788078, gi:1788089, gi:1788106, gi:1788117, gi:1788129, gi:1788139, gi:1788154, gi:1788163, gi:1788179, gi:1788189, gi:1788200, gi:1788214, gi:1788229, gi:1788241, gi:1788257, gi:2367124, gi:1788285, gi:2367125, gi:1788298, gi:1788310, gi:2367127, gi:1788338, gi:1788354, gi:1788373, gi:1788382, gi:1788395, gi:1788413, gi:1788425, gi:2367129, gi:1788447, gi:1788456, gi:1788470, gi:1788479, gi:1788489, gi:1788498, gi:1788508, gi:1788520, gi:2367131, gi:1788547, gi:1788555, gi:2367132, gi:1788570, gi:1788582, gi:1788594, gi:1788605, gi:1788623, gi:1788634, gi:1788647, gi:1788659, gi:1788672, gi:1788684, gi:1788694, gi:1788709, gi:1788718, gi:1788731, gi:2367135, gi:2367137, gi:1788763, gi:1788775, gi:1788789, gi:1788805, gi:1788813, gi:1788821, gi:1788839, gi:1788850, gi:1788862, gi:1788870, gi:1788883, gi:1788899, gi:1788907, gi:2367139, gi:1788927, gi:1788939, gi:2367141, gi:2367142, gi:1788975, gi:2367143, gi:2367147, gi:1789011, gi:1789024, gi:1789037, gi:2367149, gi:2367151, gi:2367153, gi:2367155, gi:2367156, gi:1789110, gi:2367157, gi:2367160, gi:1789143, gi:1789153, gi:2367162, gi:2367163, gi:1789185, gi:1789195, gi:2367165, gi:2367168, gi:2367170, gi:1789239, gi:2367171, gi:2367173, gi:1789270, gi:1789282, gi:2367176, gi:2367178, gi:1789319, gi:2367179, gi:1789344, gi:2367181, gi:2367182, gi:2367184, gi:2367186, gi:1789405, gi:2367187, gi:1789431, gi:1789441, gi:1789451, gi:2367189, gi:2367191, gi:2367194, gi:1789499, gi:2367197, gi:1789524, gi:1789536, gi:2367199, gi:1789562, gi:2367201, gi:2367203, gi:1789607, gi:1789619, gi:2367205, gi:2367207, gi:1789659, gi:2367209, gi:2367211, gi:1789694, gi:1789718, gi:1789734, gi:2367213, gi:1789758, gi:2367215, gi:1789783, gi:1789798, gi:2367219, gi:2367220, gi:2367222, gi:2367227, gi:1789840, gi:1789854, gi:1789868, gi:1789880, gi:2367230, gi:2367232, gi:1789910, gi:1789919, gi:1789931, gi:2367235, gi:2367238, gi:1789957, gi:2367241, gi:1789977, gi:1789989, gi:2367244, gi:2367246, gi:2367249, gi:2367251, gi:1790036, gi:2367252, gi:1790063, gi:2367253, gi:2367255, gi:2367258, gi:1790105, gi:2367261, gi:2367266, gi:1790142, gi:2367269, gi:1790166, gi:2367272, gi:1790188, gi:2367276, gi:2367278, gi:2367282, gi:2367291, gi:2367294, gi:2367299, gi:2367306, gi:2367315, gi:2367318, gi:1790295, gi:2367320, gi:2367324, gi:2367326, gi:2367328, gi:1790356, gi:1790374, gi:1790385, gi:2367332, gi:1790404, gi:2367333, gi:2367336, gi:1790440, gi:1790448, gi:1790456, gi:2367338, gi:2367339, gi:2367340, gi:2367344, gi:2367346, gi:2367349, gi:2367351, gi:2367352, gi:1790563, gi:1790574, gi:1790582, gi:2367354, gi:1790607, gi:2367356, gi:2367357, gi:1790649, gi:2367360, gi:1790670, gi:2367361, gi:2367366, gi:1790711, gi:2367368, gi:1790732, gi:2367369, gi:2367372, gi:2367374, gi:1790777, gi:1790789, gi:2367375, gi:2367377, gi:2367380, gi:2367382, gi:2367383, gi:1790858, gi:6626251. Current U00096 annotation updates are derived from EcoGene http://ecogene.org. Suggestions for updates can be sent to Dr. Kenneth Rudd (krudd@miami.edu). These updates are being generated from a collaboration that also includes ASAP/ERIC, the Coli Genetic Stock Center, EcoliHub, EcoCyc, RegulonDB and UniProtKB/Swiss-Prot. FEATURES Location/Qualifiers source 1..840 /organism="Escherichia coli str. K-12 substr. MG1655" /mol_type="genomic DNA" /strain="K-12" /sub_strain="MG1655" /db_xref="taxon:511145" gene 190..255 /gene="thrL" /locus_tag="b0001" /gene_synonym="ECK0001" /gene_synonym="JW4367" /db_xref="EcoGene:EG11277" CDS 190..255 /gene="thrL" /locus_tag="b0001" /gene_synonym="ECK0001" /gene_synonym="JW4367" /function="leader; Amino acid biosynthesis: Threonine" /function="1.5.1.8 metabolism; building block biosynthesis; amino acids; threonine" /note="GO_process: GO:0009088 - threonine biosynthetic process" /codon_start=1 /transl_table=11 /product="thr operon leader peptide" /protein_id="AAC73112.1" /db_xref="GI:1786182" /db_xref="ASAP:ABE-0000006" /db_xref="UniProtKB/Swiss-Prot:P0AD86" /db_xref="EcoGene:EG11277" /translation="MKRISTTITTTITITTGNGAG" gene 337..>840 /gene="thrA" /locus_tag="b0002" /gene_synonym="ECK0002" /gene_synonym="Hs" /gene_synonym="JW0001" /gene_synonym="thrA1" /gene_synonym="thrA2" /gene_synonym="thrD" /db_xref="EcoGene:EG10998" CDS 337..>840 /gene="thrA" /locus_tag="b0002" /gene_synonym="ECK0002" /gene_synonym="Hs" /gene_synonym="JW0001" /gene_synonym="thrA1" /gene_synonym="thrA2" /gene_synonym="thrD" /EC_number="2.7.2.4" /EC_number="1.1.1.3" /function="enzyme; Amino acid biosynthesis: Threonine" /function="1.5.1.8 metabolism; building block biosynthesis; amino acids; threonine" /function="1.5.1.21 metabolism; building block biosynthesis; amino acids; homoserine" /function="7.1 location of gene products; cytoplasm" /experiment="N-terminus verified by Edman degradation: PMID 354697,4562989" /note="bifunctional: aspartokinase I (N-terminal); homoserine dehydrogenase I (C-terminal); GO_component: GO:0005737 - cytoplasm; GO_process: GO:0009088 - threonine biosynthetic process; GO_process: GO:0009086 - methionine biosynthetic process; GO_process: GO:0009090 - homoserine biosynthetic process" /codon_start=1 /transl_table=11 /product="fused aspartokinase I and homoserine dehydrogenase I" /protein_id="AAC73113.1" /db_xref="GI:1786183" /db_xref="ASAP:ABE-0000008" /db_xref="UniProtKB/Swiss-Prot:P00561" /db_xref="EcoGene:EG10998" /translation="MRVLKFGGTSVANAERFLRVADILESNARQGQVATVLSAPAKIT NHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIK HVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAVGHY LESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACL RADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSYFGAKVLHPRTITPIAQF QIPCLIKNTGNPQAPGTLIGASRDEDELPVKGISNLNNMAMFSVSGPGMKGMVGMAAR VFAAMSRARISVVLITQSSSEYSISFCVPQSDCVRAERAMQEEFYLELKEGLLEPLAV TERLAIISVVGDGMRTLRGISAKFFAALARANINIVAIAQGSSERSISVVVNNDDATT GVRVTHQMLFNTDQVIEVFVIGVGGVGGALLEQLKRQQSWLKNKHIDLRVCGVANSKA LLTNVHGLNLENWQEELAQAKEPFNLGRLIRLVKEYHLLNPVIVDCTSSQAVADQYAD FLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLN AGDELMKFSGILSGSLSYIFGKLDEGMSFSEATTLAREMGYTEPDPRDDLSGMDVARK LLILARETGRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEG KVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAG NDVTAAGVFADLLRTLSWKLGV" ORIGIN 1 agcttttcat tctgactgca acgggcaata tgtctctgtg tggattaaaa aaagagtgtc 61 tgatagcagc ttctgaactg gttacctgcc gtgagtaaat taaaatttta ttgacttagg 121 tcactaaata ctttaaccaa tataggcata gcgcacagac agataaaaat tacagagtac 181 acaacatcca tgaaacgcat tagcaccacc attaccacca ccatcaccat taccacaggt 241 aacggtgcgg gctgacgcgt acaggaaaca cagaaaaaag cccgcacctg acagtgcggg 301 cttttttttt cgaccaaagg taacgaggta acaaccatgc gagtgttgaa gttcggcggt 361 acatcagtgg caaatgcaga acgttttctg cgtgttgccg atattctgga aagcaatgcc 421 aggcaggggc aggtggccac cgtcctctct gcccccgcca aaatcaccaa ccacctggtg 481 gcgatgattg aaaaaaccat tagcggccag gatgctttac ccaatatcag cgatgccgaa 541 cgtatttttg ccgaactttt gacgggactc gccgccgccc agccggggtt cccgctggcg 601 caattgaaaa ctttcgtcga tcaggaattt gcccaaataa aacatgtcct gcatggcatt 661 agtttgttgg ggcagtgccc ggatagcatc aacgctgcgc tgatttgccg tggcgagaaa 721 atgtcgatcg ccattatggc cggcgtatta gaagcgcgcg gtcacaacgt tactgttatc 781 gatccggtcg aaaaactgct ggcagtgggg cattacctcg aatctaccgt cgatattgct // LOCUS U00096 910 bp DNA linear BCT 11-MAR-2009 DEFINITION Escherichia coli str. K-12 substr. MG1655, complete genome. ACCESSION U00096 REGION: 1..910 VERSION U00096.2 GI:48994873 PROJECT GenomeProject:225 DBLINK Project:225 KEYWORDS . SOURCE Escherichia coli str. K-12 substr. MG1655 ORGANISM Escherichia coli str. K-12 substr. MG1655 Bacteria; Proteobacteria; Gammaproteobacteria; Enterobacteriales; Enterobacteriaceae; Escherichia. REFERENCE 1 (sites) AUTHORS Kang,W.K., Icho,T., Isono,S., Kitakawa,M. and Isono,K. TITLE Characterization of the gene rimK responsible for the addition of glutamic acid residues to the C-terminus of ribosomal protein S6 in Escherichia coli K12 JOURNAL Mol. Gen. Genet. 217 (2-3), 281-288 (1989) PUBMED 2570347 REFERENCE 2 (bases 1 to 910) AUTHORS Blattner,F.R., Plunkett,G., Bloch,C.A., Perna,N.T., Burland,V., Riley,M., Collado-Vides,J., Glasner,J.D., Rode,C.K., Mayhew,G.F., Gregor,J., Davis,N.W., Kirkpatrick,H.A., Goeden,M.A., Rose,D.J., Mau,B. and Shao,Y. TITLE The complete genome sequence of Escherichia coli K-12 JOURNAL Science 277 (5331), 1453-1474 (1997) PUBMED 9278503 REFERENCE 3 (bases 1 to 910) AUTHORS Riley,M., Abe,T., Arnaud,M.B., Berlyn,M.K., Blattner,F.R., Chaudhuri,R.R., Glasner,J.D., Horiuchi,T., Keseler,I.M., Kosuge,T., Mori,H., Perna,N.T., Plunkett,G. III, Rudd,K.E., Serres,M.H., Thomas,G.H., Thomson,N.R., Wishart,D. and Wanner,B.L. TITLE Escherichia coli K-12: a cooperatively developed annotation snapshot--2005 JOURNAL Nucleic Acids Res. 34 (1), 1-9 (2006) PUBMED 16397293 REMARK Publication Status: Online-Only REFERENCE 4 (bases 1 to 910) AUTHORS Arnaud,M., Berlyn,M.K.B., Blattner,F.R., Galperin,M.Y., Glasner,J.D., Horiuchi,T., Kosuge,T., Mori,H., Perna,N.T., Plunkett,G. III, Riley,M., Rudd,K.E., Serres,M.H., Thomas,G.H. and Wanner,B.L. TITLE Workshop on Annotation of Escherichia coli K-12 JOURNAL Unpublished REMARK Woods Hole, Mass., on 14-18 November 2003 (sequence corrections) REFERENCE 5 (bases 1 to 910) AUTHORS Glasner,J.D., Perna,N.T., Plunkett,G. III, Anderson,B.D., Bockhorst,J., Hu,J.C., Riley,M., Rudd,K.E. and Serres,M.H. TITLE ASAP: Escherichia coli K-12 strain MG1655 version m56 JOURNAL Unpublished REMARK ASAP download 10 June 2004 (annotation updates) REFERENCE 6 (bases 1 to 910) AUTHORS Hayashi,K., Morooka,N., Mori,H. and Horiuchi,T. TITLE A more accurate sequence comparison between genomes of Escherichia coli K12 W3110 and MG1655 strains JOURNAL Unpublished REMARK GenBank accessions AG613214 to AG613378 (sequence corrections) REFERENCE 7 (bases 1 to 910) AUTHORS Perna,N.T. TITLE Escherichia coli K-12 MG1655 yqiK-rfaE intergenic region, genomic sequence correction JOURNAL Unpublished REMARK GenBank accession AY605712 (sequence corrections) REFERENCE 8 (bases 1 to 910) AUTHORS Rudd,K.E. TITLE A manual approach to accurate translation start site annotation: an E. coli K-12 case study JOURNAL Unpublished REFERENCE 9 (bases 1 to 910) AUTHORS Blattner,F.R. and Plunkett,G. III. TITLE Direct Submission JOURNAL Submitted (16-JAN-1997) Laboratory of Genetics, University of Wisconsin, 425G Henry Mall, Madison, WI 53706-1580, USA REFERENCE 10 (bases 1 to 910) AUTHORS Blattner,F.R. and Plunkett,G. III. TITLE Direct Submission JOURNAL Submitted (02-SEP-1997) Laboratory of Genetics, University of Wisconsin, 425G Henry Mall, Madison, WI 53706-1580, USA REFERENCE 11 (bases 1 to 910) AUTHORS Plunkett,G. III. TITLE Direct Submission JOURNAL Submitted (13-OCT-1998) Laboratory of Genetics, University of Wisconsin, 425G Henry Mall, Madison, WI 53706-1580, USA REFERENCE 12 (bases 1 to 910) AUTHORS Plunkett,G. III. TITLE Direct Submission JOURNAL Submitted (10-JUN-2004) Laboratory of Genetics, University of Wisconsin, 425G Henry Mall, Madison, WI 53706-1580, USA REMARK Sequence update by submitter REFERENCE 13 (bases 1 to 910) AUTHORS Plunkett,G. III. TITLE Direct Submission JOURNAL Submitted (07-FEB-2006) Laboratory of Genetics, University of Wisconsin, 425G Henry Mall, Madison, WI 53706-1580, USA REMARK Protein updates by submitter REFERENCE 14 (bases 1 to 910) AUTHORS Rudd,K.E. TITLE Direct Submission JOURNAL Submitted (24-APR-2007) Department of Biochemistry and Molecular Biology, University of Miami Miller School of Medicine, 118 Gautier Bldg., Miami, FL 33136, USA REMARK Annotation update from ecogene.org as a multi-database collaboration REFERENCE 15 (bases 1 to 910) AUTHORS Rudd,K.E. TITLE Direct Submission JOURNAL Submitted (26-SEP-2007) Department of Biochemistry and Molecular Biology, University of Miami Miller School of Medicine, 118 Gautier Bldg., Miami, FL 33136, USA REMARK Annotation update from ecogene.org as a multi-database collaboration REFERENCE 16 (bases 1 to 910) AUTHORS Rudd,K.E. TITLE Direct Submission JOURNAL Submitted (12-MAR-2008) Department of Biochemistry and Molecular Biology, University of Miami Miller School of Medicine, 118 Gautier Bldg., Miami, FL 33136, USA REMARK Annotation update from ecogene.org as a multi-database collaboration REFERENCE 17 (bases 1 to 910) AUTHORS Rudd,K.E. TITLE Direct Submission JOURNAL Submitted (22-DEC-2008) Department of Biochemistry and Molecular Biology, University of Miami Miller School of Medicine, 118 Gautier Bldg., Miami, FL 33136, USA REMARK Annotation update from ecogene.org as a multi-database collaboration COMMENT On or before Jun 21, 2004 this sequence version replaced gi:1786181, gi:1786192, gi:2367095, gi:1786217, gi:1786230, gi:1786240, gi:1786250, gi:1786262, gi:1786283, gi:1786298, gi:1786306, gi:1786315, gi:1786327, gi:1786339, gi:1786348, gi:1786358, gi:1786370, gi:1786383, gi:1786395, gi:1786402, gi:1786415, gi:2367098, gi:2367099, gi:1786454, gi:1786465, gi:2367103, gi:2367108, gi:1786501, gi:1786510, gi:1786520, gi:1786532, gi:1786542, gi:1786554, gi:1786568, gi:1786580, gi:1786596, gi:1786603, gi:1786614, gi:1786628, gi:1786639, gi:1786649, gi:1786660, gi:1786671, gi:1786683, gi:1786692, gi:1786705, gi:1786716, gi:1786728, gi:1786739, gi:1786751, gi:1786766, gi:1786782, gi:1786790, gi:1786800, gi:1786808, gi:1786819, gi:1786836, gi:1786849, gi:1786862, gi:1786875, gi:1786888, gi:1786896, gi:1786910, gi:1786920, gi:1786934, gi:1786947, gi:1786955, gi:1786967, gi:1786978, gi:1786988, gi:1786998, gi:1787015, gi:1787025, gi:1787036, gi:1787047, gi:1787058, gi:1787070, gi:1787084, gi:1787097, gi:1787106, gi:1787115, gi:1787125, gi:1787134, gi:1787148, gi:1787156, gi:1787169, gi:1787180, gi:1787189, gi:1787202, gi:2367111, gi:2367113, gi:1787233, gi:1787248, gi:1787256, gi:1787265, gi:1787282, gi:1787293, gi:1787308, gi:1787322, gi:1787332, gi:1787345, gi:1787358, gi:1787371, gi:1787382, gi:1787405, gi:1787417, gi:1787434, gi:1787444, gi:1787453, gi:1787467, gi:1787476, gi:1787486, gi:1787496, gi:1787509, gi:1787523, gi:2367115, gi:1787543, gi:2367117, gi:1787566, gi:1787578, gi:1787588, gi:1787600, gi:1787613, gi:1787633, gi:1787643, gi:1787652, gi:1787665, gi:1787673, gi:1787682, gi:1787695, gi:1787706, gi:1787720, gi:1787730, gi:1787742, gi:1787752, gi:1787764, gi:1787773, gi:1787783, gi:1787790, gi:1787801, gi:1787814, gi:2367119, gi:1787841, gi:1787862, gi:1787875, gi:1787888, gi:1787898, gi:2367121, gi:1787921, gi:1787935, gi:1787945, gi:1787955, gi:1787966, gi:1787978, gi:2367122, gi:1787997, gi:1788011, gi:1788022, gi:1788033, gi:1788045, gi:1788058, gi:1788067, gi:1788078, gi:1788089, gi:1788106, gi:1788117, gi:1788129, gi:1788139, gi:1788154, gi:1788163, gi:1788179, gi:1788189, gi:1788200, gi:1788214, gi:1788229, gi:1788241, gi:1788257, gi:2367124, gi:1788285, gi:2367125, gi:1788298, gi:1788310, gi:2367127, gi:1788338, gi:1788354, gi:1788373, gi:1788382, gi:1788395, gi:1788413, gi:1788425, gi:2367129, gi:1788447, gi:1788456, gi:1788470, gi:1788479, gi:1788489, gi:1788498, gi:1788508, gi:1788520, gi:2367131, gi:1788547, gi:1788555, gi:2367132, gi:1788570, gi:1788582, gi:1788594, gi:1788605, gi:1788623, gi:1788634, gi:1788647, gi:1788659, gi:1788672, gi:1788684, gi:1788694, gi:1788709, gi:1788718, gi:1788731, gi:2367135, gi:2367137, gi:1788763, gi:1788775, gi:1788789, gi:1788805, gi:1788813, gi:1788821, gi:1788839, gi:1788850, gi:1788862, gi:1788870, gi:1788883, gi:1788899, gi:1788907, gi:2367139, gi:1788927, gi:1788939, gi:2367141, gi:2367142, gi:1788975, gi:2367143, gi:2367147, gi:1789011, gi:1789024, gi:1789037, gi:2367149, gi:2367151, gi:2367153, gi:2367155, gi:2367156, gi:1789110, gi:2367157, gi:2367160, gi:1789143, gi:1789153, gi:2367162, gi:2367163, gi:1789185, gi:1789195, gi:2367165, gi:2367168, gi:2367170, gi:1789239, gi:2367171, gi:2367173, gi:1789270, gi:1789282, gi:2367176, gi:2367178, gi:1789319, gi:2367179, gi:1789344, gi:2367181, gi:2367182, gi:2367184, gi:2367186, gi:1789405, gi:2367187, gi:1789431, gi:1789441, gi:1789451, gi:2367189, gi:2367191, gi:2367194, gi:1789499, gi:2367197, gi:1789524, gi:1789536, gi:2367199, gi:1789562, gi:2367201, gi:2367203, gi:1789607, gi:1789619, gi:2367205, gi:2367207, gi:1789659, gi:2367209, gi:2367211, gi:1789694, gi:1789718, gi:1789734, gi:2367213, gi:1789758, gi:2367215, gi:1789783, gi:1789798, gi:2367219, gi:2367220, gi:2367222, gi:2367227, gi:1789840, gi:1789854, gi:1789868, gi:1789880, gi:2367230, gi:2367232, gi:1789910, gi:1789919, gi:1789931, gi:2367235, gi:2367238, gi:1789957, gi:2367241, gi:1789977, gi:1789989, gi:2367244, gi:2367246, gi:2367249, gi:2367251, gi:1790036, gi:2367252, gi:1790063, gi:2367253, gi:2367255, gi:2367258, gi:1790105, gi:2367261, gi:2367266, gi:1790142, gi:2367269, gi:1790166, gi:2367272, gi:1790188, gi:2367276, gi:2367278, gi:2367282, gi:2367291, gi:2367294, gi:2367299, gi:2367306, gi:2367315, gi:2367318, gi:1790295, gi:2367320, gi:2367324, gi:2367326, gi:2367328, gi:1790356, gi:1790374, gi:1790385, gi:2367332, gi:1790404, gi:2367333, gi:2367336, gi:1790440, gi:1790448, gi:1790456, gi:2367338, gi:2367339, gi:2367340, gi:2367344, gi:2367346, gi:2367349, gi:2367351, gi:2367352, gi:1790563, gi:1790574, gi:1790582, gi:2367354, gi:1790607, gi:2367356, gi:2367357, gi:1790649, gi:2367360, gi:1790670, gi:2367361, gi:2367366, gi:1790711, gi:2367368, gi:1790732, gi:2367369, gi:2367372, gi:2367374, gi:1790777, gi:1790789, gi:2367375, gi:2367377, gi:2367380, gi:2367382, gi:2367383, gi:1790858, gi:6626251. Current U00096 annotation updates are derived from EcoGene http://ecogene.org. Suggestions for updates can be sent to Dr. Kenneth Rudd (krudd@miami.edu). These updates are being generated from a collaboration that also includes ASAP/ERIC, the Coli Genetic Stock Center, EcoliHub, EcoCyc, RegulonDB and UniProtKB/Swiss-Prot. FEATURES Location/Qualifiers source 1..910 /organism="Escherichia coli str. K-12 substr. MG1655" /mol_type="genomic DNA" /strain="K-12" /sub_strain="MG1655" /db_xref="taxon:511145" gene 190..255 /gene="thrL" /locus_tag="b0001" /gene_synonym="ECK0001" /gene_synonym="JW4367" /db_xref="EcoGene:EG11277" CDS 190..255 /gene="thrL" /locus_tag="b0001" /gene_synonym="ECK0001" /gene_synonym="JW4367" /function="leader; Amino acid biosynthesis: Threonine" /function="1.5.1.8 metabolism; building block biosynthesis; amino acids; threonine" /note="GO_process: GO:0009088 - threonine biosynthetic process" /codon_start=1 /transl_table=11 /product="thr operon leader peptide" /protein_id="AAC73112.1" /db_xref="GI:1786182" /db_xref="ASAP:ABE-0000006" /db_xref="UniProtKB/Swiss-Prot:P0AD86" /db_xref="EcoGene:EG11277" /translation="MKRISTTITTTITITTGNGAG" gene 337..>910 /gene="thrA" /locus_tag="b0002" /gene_synonym="ECK0002" /gene_synonym="Hs" /gene_synonym="JW0001" /gene_synonym="thrA1" /gene_synonym="thrA2" /gene_synonym="thrD" /db_xref="EcoGene:EG10998" CDS 337..>910 /gene="thrA" /locus_tag="b0002" /gene_synonym="ECK0002" /gene_synonym="Hs" /gene_synonym="JW0001" /gene_synonym="thrA1" /gene_synonym="thrA2" /gene_synonym="thrD" /EC_number="2.7.2.4" /EC_number="1.1.1.3" /function="enzyme; Amino acid biosynthesis: Threonine" /function="1.5.1.8 metabolism; building block biosynthesis; amino acids; threonine" /function="1.5.1.21 metabolism; building block biosynthesis; amino acids; homoserine" /function="7.1 location of gene products; cytoplasm" /experiment="N-terminus verified by Edman degradation: PMID 354697,4562989" /note="bifunctional: aspartokinase I (N-terminal); homoserine dehydrogenase I (C-terminal); GO_component: GO:0005737 - cytoplasm; GO_process: GO:0009088 - threonine biosynthetic process; GO_process: GO:0009086 - methionine biosynthetic process; GO_process: GO:0009090 - homoserine biosynthetic process" /codon_start=1 /transl_table=11 /product="fused aspartokinase I and homoserine dehydrogenase I" /protein_id="AAC73113.1" /db_xref="GI:1786183" /db_xref="ASAP:ABE-0000008" /db_xref="UniProtKB/Swiss-Prot:P00561" /db_xref="EcoGene:EG10998" /translation="MRVLKFGGTSVANAERFLRVADILESNARQGQVATVLSAPAKIT NHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIK HVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAVGHY LESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACL RADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSYFGAKVLHPRTITPIAQF QIPCLIKNTGNPQAPGTLIGASRDEDELPVKGISNLNNMAMFSVSGPGMKGMVGMAAR VFAAMSRARISVVLITQSSSEYSISFCVPQSDCVRAERAMQEEFYLELKEGLLEPLAV TERLAIISVVGDGMRTLRGISAKFFAALARANINIVAIAQGSSERSISVVVNNDDATT GVRVTHQMLFNTDQVIEVFVIGVGGVGGALLEQLKRQQSWLKNKHIDLRVCGVANSKA LLTNVHGLNLENWQEELAQAKEPFNLGRLIRLVKEYHLLNPVIVDCTSSQAVADQYAD FLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLN AGDELMKFSGILSGSLSYIFGKLDEGMSFSEATTLAREMGYTEPDPRDDLSGMDVARK LLILARETGRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEG KVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAG NDVTAAGVFADLLRTLSWKLGV" ORIGIN 1 agcttttcat tctgactgca acgggcaata tgtctctgtg tggattaaaa aaagagtgtc 61 tgatagcagc ttctgaactg gttacctgcc gtgagtaaat taaaatttta ttgacttagg 121 tcactaaata ctttaaccaa tataggcata gcgcacagac agataaaaat tacagagtac 181 acaacatcca tgaaacgcat tagcaccacc attaccacca ccatcaccat taccacaggt 241 aacggtgcgg gctgacgcgt acaggaaaca cagaaaaaag cccgcacctg acagtgcggg 301 cttttttttt cgaccaaagg taacgaggta acaaccatgc gagtgttgaa gttcggcggt 361 acatcagtgg caaatgcaga acgttttctg cgtgttgccg atattctgga aagcaatgcc 421 aggcaggggc aggtggccac cgtcctctct gcccccgcca aaatcaccaa ccacctggtg 481 gcgatgattg aaaaaaccat tagcggccag gatgctttac ccaatatcag cgatgccgaa 541 cgtatttttg ccgaactttt gacgggactc gccgccgccc agccggggtt cccgctggcg 601 caattgaaaa ctttcgtcga tcaggaattt gcccaaataa aacatgtcct gcatggcatt 661 agtttgttgg ggcagtgccc ggatagcatc aacgctgcgc tgatttgccg tggcgagaaa 721 atgtcgatcg ccattatggc cggcgtatta gaagcgcgcg gtcacaacgt tactgttatc 781 gatccggtcg aaaaactgct ggcagtgggg cattacctcg aatctaccgt cgatattgct 841 gagtccaccc gccgtattgc ggcaagccgc attccggctg atcacatggt gctgatggca 901 ggtttcaccg // genometools-1.5.1/testdata/Duplicate.shreddered000066400000000000000000000152501211610345200216250ustar00rootroot00000000000000>gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] AGCTTTTCATTCTGACTGCAACGGGCAATA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] TGTCTCTGTGTGGATTAAAAAAAGAGTGTC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] TGATAGCAGCTTCTGAACTGGTTACCTGCC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GTGAGTAAATTAAAATTTTATTGACTTAGG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] TCACTAAATACTTTAACCAATATAGGCATA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GCGCACAGACAGATAAAAATTACAGAGTAC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ACAACATCCATGAAACGCATTAGCACCACC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ATTACCACCACCATCACCATTACCACAGGT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] AACGGTGCGGGCTGACGCGTACAGGAAACA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CAGAAAAAAGCCCGCACCTGACAGTGCGGG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CTTTTTTTTTCGACCAAAGGTAACGAGGTA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ACAACCATGCGAGTGTTGAAGTTCGGCGGT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ACATCAGTGGCAAATGCAGAACGTTTTCTG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CGTGTTGCCGATATTCTGGAAAGCAATGCC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] AGGCAGGGGCAGGTGGCCACCGTCCTCTCT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GCCCCCGCCAAAATCACCAACCACCTGGTG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GCGATGATTGAAAAAACCATTAGCGGCCAG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GATGCTTTACCCAATATCAGCGATGCCGAA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CGTATTTTTGCCGAACTTTTGACGGGACTC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GCCGCCGCCCAGCCGGGGTTCCCGCTGGCG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CAATTGAAAACTTTCGTCGATCAGGAATTT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GCCCAAATAAAACATGTCCTGCATGGCATT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] AGTTTGTTGGGGCAGTGCCCGGATAGCATC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] AACGCTGCGCTGATTTGCCGTGGCGAGAAA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ATGTCGATCGCCATTATGGCCGGCGTATTA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GAAGCGCGCGGTCACAACGTTACTGTTATC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GATCCGGTCGAAAAACTGCTGGCAGTGGGG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CATTACCTCGAATCTACCGTCGATATTGCT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] AGCTTTTCATTCTGACTGCAACGGGCAATA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] TGTCTCTGTGTGGATTAAAAAAAGAGTGTC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] TGATAGCAGCTTCTGAACTGGTTACCTGCC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GTGAGTAAATTAAAATTTTATTGACTTAGG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] TCACTAAATACTTTAACCAATATAGGCATA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GCGCACAGACAGATAAAAATTACAGAGTAC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ACAACATCCATGAAACGCATTAGCACCACC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ATTACCACCACCATCACCATTACCACAGGT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] AACGGTGCGGGCTGACGCGTACAGGAAACA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CAGAAAAAAGCCCGCACCTGACAGTGCGGG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CTTTTTTTTTCGACCAAAGGTAACGAGGTA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ACAACCATGCGAGTGTTGAAGTTCGGCGGT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ACATCAGTGGCAAATGCAGAACGTTTTCTG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CGTGTTGCCGATATTCTGGAAAGCAATGCC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] AGGCAGGGGCAGGTGGCCACCGTCCTCTCT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GCCCCCGCCAAAATCACCAACCACCTGGTG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GCGATGATTGAAAAAACCATTAGCGGCCAG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GATGCTTTACCCAATATCAGCGATGCCGAA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CGTATTTTTGCCGAACTTTTGACGGGACTC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GCCGCCGCCCAGCCGGGGTTCCCGCTGGCG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CAATTGAAAACTTTCGTCGATCAGGAATTT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GCCCAAATAAAACATGTCCTGCATGGCATT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] AGTTTGTTGGGGCAGTGCCCGGATAGCATC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] AACGCTGCGCTGATTTGCCGTGGCGAGAAA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ATGTCGATCGCCATTATGGCCGGCGTATTA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GAAGCGCGCGGTCACAACGTTACTGTTATC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GATCCGGTCGAAAAACTGCTGGCAGTGGGG >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] CATTACCTCGAATCTACCGTCGATATTGCT >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GAGTCCACCCGCCGTATTGCGGCAAGCCGC >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] ATTCCGGCTGATCACATGGTGCTGATGGCA >gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome [shreddered fragment] GGTTTCACCG genometools-1.5.1/testdata/Ecoli-section1.fna000066400000000000000000000005451211610345200211250ustar00rootroot00000000000000>gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC TTCTGAACTGGTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAA TATAGGCATAGCGCACAGACAGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACC ATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGACGCGTACAGGAAACACAGAAAAAAG > NTTTTNC genometools-1.5.1/testdata/Ecoli-section2.fna000066400000000000000000000005411211610345200211220ustar00rootroot00000000000000>gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome TTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC TTCTGAACTGGTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAA TATAGGCATAGCGCACAGACAGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACC ATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGACGCGTACAGGAAACACAGAAAAAAG > NTTTTN genometools-1.5.1/testdata/Q1.gz000066400000000000000000001105251211610345200165040ustar00rootroot00000000000000HQ1}]$Is>B7M7"wz22"LMjzLUP=]Z/ߟwJ 5~{Ͽ}߿w~~?; ζ=Wn}kſo7G'~=+]Iv~ؿ{?u{kg>K>}KQ~>wuU}w~?OxJMޮ|'}O~5k~?4^2oo[]o=}gu'݌V(Zn~w[F7Y:}?俧|z<|WH~kwO֧.f#+*7ߟtk7]0nkW[oXt}{(JO^p}#~y| fzv~{Ny=|lWK#ŠZ|{%+ nVٔLVhS*^]oэ-o]jշ봾G+kI6M{G-.-ʳ*wmt{[/} %}e?-}AmjVw#~W|H|oK>d+w(ޕ6з:]@6o仡U$z@~Mt霂ߵjji3k{?\Ov-}y-DgwJR3E>SZ{An4WrA*^X2-z* k4SQD?{ξΤԲՙ>ښKp&vsȭui}C9Q?^O]͏f.PDX*cf>ufx@u> /[ĪZ޾e[Y4[YS{&-N% NK\~UDߦ傫pޠ#xwoTSziElM]ΰ}k+3KV52mf++٭( Xj>tc܆K*@\:ﵧ }{Ju]+k5}|gb_oٶP2JS-o6{vDz]A) tȪW~5~{M'{|egvaïn_wᾇS)Ͱl^w~c/_NĨEsu)h^X_XOWίq!F62YV^МqKA~G|U=V^c)T}z6~ W)a);]E~_yQͣ*ߙ9Y:lٜPݮۅkCi5\\%NƝic!}JOl5Ea-}xTZ4߉5*||:oq'8~[wxgUwh{s}6JDb]%i{~b7vpz(=i"uqwM{qXْvZBYK[_|CN/ڸIi_9EmNZEwK(WVWC| V*:}q*OޞJ՗ji-,W@_i/@jC6A*[ZὊYktcW#S~&t%u.OWBO|!aO+}nc*lL,/rlF՛ o_kk[u9ۗ6@mK!Z߂jc,^N_oӂ"ga}[W ~߂3l'YJ2?@5ً;":fd?pd~m.{]EtSV~!VoZ?@ ~+kkYzƻv÷Pϴt6ͻwM]~ XR~7WߨX/Ψy|w XhvTo2 D  hʷCO-a,P~_@GtVQmP,ȿc}Y mjvg&_i}o~C:mNoC+ im}_H~R9U12:6ʭTʲnWxAN;#j]m6J#yӗRHVW;%')Ź~eB|2qWY_ 1ʷ/jLи0pAnu6fWw_uNgƕ/Հ!T5zEv }eeRɇNvL[*0J ŕTsiDtCYZ@l:> "oHwD5q!BhWy?Jꀿ݇k׾Ww(>fVLyd6WJ*#4i,7 j] i?\gAqC* \ӷiLډQ4SmIm&_$t52PT<ݽTBĝ6o,NjEFuFMj_{l6V<#kcx]._*O_,~r^`\NbzuE޵ӇPz!GX.PujxՑ-9'ʣ<І3l0*PѫZ%aߤkR<4 hkN&xAo`+ay|zJji*?O ])' U yx{VX f]f"4Q64~^F4Z€_3WJO}' Ү̃uhQLoҥr?q1`@أxZtG%0҄G;`G&›ܴȥW̡‘Nn(&:Kߎv;990=qLv]ū#;曱(z󢌈hB/, ÍS{4bG%O =fGwGo娭L_O^{=+Tuu7K TO{UV:a}uFE1Q^ )#[Ȱ%>߸6B_n ~{߯jeui)=_9#إQ '9  ioРn>!נuB\?f4tuVt5RB¸2a!'gs.zsXJl RڂhT x7+pD˭M2GX!gߓT_LLq-Nl);gP^Q-\tG!z(3~L5R|mNzg>=ٵ;r?Gs4ڣhs0S+|iMymw.ޣmf:-Q[Ax/iRp'LtmOU:s*q@gY¨;us'4>/?ad>חyNƹ7 .qL' )J (o^ŐA:xi &QGFkjX2 6#d>UZ4WjYN{>p;f}tQY&s1ܕ?ǑO^׉k Z3`[~dȼ)G Pk'O9[j[.>=J4;XuOCg3jw/{~4#Q&bdSO~]iy 3֎}Wca5lɃ+f"ձ?y]ioڏj[T*4 fc|+lmK&NLY/yY߆4X|ݴkA^}e՜hs\Cۛg&~4}ù S&|u]Dct(t^Hݐ ӼU7bXح7r//Ôxy0<,/یMG2]a2>{Z gv]2WѨsZVukCjfif[`j?$OvrڋT`3wvZTgAV?|]SI+aP#ZϧGr &W9YlnBswB\"]D#j{V^9;bIG>E)͑f=aj˄Gx_dwJVi[eǁ8CA ͉=_D aߴ N 7޾5P3otGT!V8x|kj u :\xU˟Sܢơ0[5KDdYqY P‚?5qU VGUaͣ:.kr&Y]?,2 {8ϋ!*5:WA1ZHL| nPzs=3vwF+lQ3ًW"O]0UD[V)qeH\CTN!*ddM]6ii6d'ŕil֫=5J8о3 $.O%K#xRρ4|P ٹΤqfSsP2֝)Bҋ{k~48EbwU_#FS %3 %EvqHMKc=@T·gmPؠz`Q>THxLn9 FOGP$}OZmƚ]K1:&Exߏ%|i]2!OjOw%60; èL@6S93X Gl]6QiN]'f r(-0= :#LN3䁍ú_RB W%f7_Fv hDC7ӟ=tyeq} }f 1qZh4mhD *Y@Z'p8VE kIZ꺘QGX9ǞziN-InZw4lC;4ۤ0cv W1`(U>bG_^kbl&rV&_]1&`جz2̴9: Wj5n)k^b_dڧI)HT/jΕ̈́ DHJ  F 6ދ)MHDO^(n%yeN=Z~ ?m7m7<2HǫM ~u)zaA2&fe0bid[[rZtcP20@K EohH`iGg dbvٰϢ,aAd#ol"@ =v3' ˟jX:t/D+nǖ;lbs1(5"}كKHhR{0bfgdY ؍ uL@>zeA}KߘlI0p(TSS<>F@Eڋk_eAzz#0 3>h'^ LglxDLJAt`0֝']#vrS/4zdlTؾBp ?'e8ئm70Lu"x>"s l\GTR6DS&.43L^:Gh͸i!!15oͼsB15<[z iNP+Sr³Ȧ(&G~]YdK״8g{X[? =-ֳP 9}vkf|Ǒ;ݣ="a_*&@H,E*znK6J2\xdE@OaWJ-A;%s%Jw !tTc@V#HE0H ^(0.gh. y> @bBDP7fB4q]6.c|N]6N7^CDWyϘs~k+˹eYwKPV ʈo 7&oՙYfFx .rt0(]>t-GbꀐZEeҝ& f8ײbn],Du@6[nxЪy橼kg(SZ' {p-L+P~X[{":kd6A]"*X.;V%qDoZ(]>|ɦ 47M0K}hRp#h} ˶㢱9FƞCA\@D cƜUc`A0q*bjFfkK1~`﹉YiYKz$ К|uV3ug%*&w J3|SbWJ 3wDaA] EYL~4 =fnCz4tT<]CHOWQVj #i,[ -kjc>J-OJ /3W}-[,Vnl] fbָGFl|0˹C?]ŢI4$Z0\XUGchjgWi; ػHl *smMxW /""בoW1m6"/Q{>|:W:{<ŕQojM:;j%~Mh>n} y7 7nzm@Ks%Z6TRrg#b\36ޓį8d ρ@6kΙWgKHx7aa_>ͦ,T6*i+[ZԂF|Eji)q)w.Qnn0=OMS!Mofi:ބ hݴq%pfqή܅qaAORۆL@2˓:FI&-} 4/]#'rf;"};Qk/a'xɜ:ћ}^%=(*>񱕠`=uЌR.(r'"kr ]eJf!X-iCAEj k߳<EϘY+fW=&g(#j_ TS4І@qHhU{yF*{Z@sX}H9඿l;c1|Μԁ3nLtOg_rG-_c|qjo o=T6Dnv"XHA=f2Hs]&@7hI_Y-,#)Сt `OqBʱF0W 6΋l}k1ha>)]SDX@P4d1sm=|3Y|PlÒCEO'y8#aG:ŸۜkevSgK;^A>hO6ZVgK;B ]YDT2ttsm -Ğj1؀SAYVeG>1w}i߄쓂硱:3qlrI7ٱƓ5ČOwpu|{C̘'ɨc9TQθMU=/3Qa-W9Z-3=TC5PU.&)sP?R\J9@b1* rPG$ЦcNL8Ծoa5KۧѶm[cGu[|,#%qK`cg=4ΐ)$֎q-7ym񖊡d&@VdM.L qޥGmؗOoۣh ۂ.ENid67a .ysfwWQٲ'Vcnklai;^(a^cԀx\EY9MĔv3H:~ܚt=DBkA xeyr OG8$iI/q@678~rx?)zl>&•F ^;vnSjEŊKtj\&̺eog90LgQv!p)H+l y+:(:|,H-$6ʹr~`]'T¤B갴$ JrYQHYT<2P6r[AHa־넷:#E Ƣ7L߱pGSWL!e>ga]3\L,RJ`39RomXd=^%>(ő&kQ/a_5ca:i(mQZ+м,,_;v2k}ɰ{jXZRdN0O@&jE؁4_/;"D(ΛLzL!YHKt̚m+Wt ]4)]*ɨ/Y:JG~ APL KbEeǬerAAl:|]bfsx/q}cplG8`_7?c]YyLa1flv?.kDFϜ%+T'T z%Ln]e |JBT3D߰˾NF>w,t?L)ѝl E{s)0ʡ?o80W-"ebnsmic;5awDʂI5ͩ5p )F}v3Vm*VH-Ɣ&}A1O6ᡉN PWSՓ AD H /sHOC,!IZXSnu o47U{^Pl%oX4~f{_2͆۵.x0%QtT(~q@}\$isZ|z1k1!`Ebe2Cc:;']" vƹW4OT]\LSD$T(e m%H,U (.m%0ЕxЀ!e<qkTedD@ѦeH K(3Fv,>$3a +ZeV*h WٞB 0ŠrJK䲥b=Ru}WB=(.ދΦL.a 0qͰn|uQx*3N[?wfIVM"dK!x:9kw^xil,0MOO*iˎ<\hNZ:i+ "u)IU![H,nv/Q:&(>'9,| iy .V1Mup53*LkBTv=iG*ӆVR&Z3D\eߟVӼGN?bO=aڼ7jbDŽ ~40ykn=$ehgEۈag xٺ$jF꜖'x &\߲oݘ!D݆=\5rXAV|5){|ye׵c62_8`y6HE.fNT<9Z,&ͅ} IKavKX^a~m3G&R@M9ЈQG5AlvN5yNDB6JT{%/ Ե/xuz "e VoCwbNjo}݀A8Ďch_G8~buwB̬^aqjI&x@xmBKllCW{&s4 ՜d2R9JnBd*޲c릊P9NGC2.ZPě,j%pT@k|Ώ4x #"''N'!6NnWF&C()?vs&v`DemZ)󸮋&$F7XMf&U%?bC $BMv\'75hv҆%$!_ c2stGy"vbG{_#osَѡ83<4m֘g֋n'j.}OG٩}"3?G"qEC1M1mj]VA?C? :[=9α?{c,TUO<#X#ʘ!eD ׵yn}!w 8Nr@9{b5 lֳ6]iQ☔iߞ庛-6]ro=XX:3$̐q { Q_C?] 5RG)[ {NeP1Tهya<|[OZ5 FaJzum4! CC9X_Q&;θ1],`zU)P|n5)k~(ݛ?և9;96 nH6AUh~fqz?{v(Փl\Y ojGÔ eޘ`H . RZ6~:k&+ފ%M :>kÚЙ/!,kIۊDXkN1pOdcO:݉]&CgLv:@OrLg: dto46wc7缮ۋu$(ƫ : iIzJAc,^vl˘Ũբ 3,]NCvKX=t`]S5zхr\i, y!đ29g&\Kv@I;؈2d0=M@k0[QE23Pq~|٨E5M9#:-c\:X_iԗh]b)j3$ŹI*IH2~{-odV1Q,qz88$rcHkB}Ks9P00q8aI}Rm!M[|ŵ1c,ᰁ vg> mդYjCU(.::Tל=9"2YWAϯӬ-rP+@P1{`1l2Z{ 5Z_Եa]!lYv$тrb`DRO"ytJ/vAUgpj9p㒁]IU55p)Ò́뜉D%*06$LppƜKl ht6ƬAq&f(F!Bm4f=2,z7QB/6)O4՝W2c1)Qr8;/Q3㤧Y -l_JSf1 RXZ?D&\Y \{Iͥvv:n4D; *b2E<3𨘇O&n11&:C)œs5~9n. M\ByCQ AnLTB' d3ϰ/Y5Gc{X,5cq1h>eLyBu{NwE?8E԰Mz!V٢ڦPH'g{MiESQIKG]1'C:w_㎮gRrn^5˜L^yxZƢ\O8iG=Ec v7'{vY;EvX  9Qg)f02:IN1@$fۺ򳴰KF1'ͼ| /ef01:'3n0 D=Ɇr<"X$d>5Ljx6VWݦbb0A O\K:U6pKK5߯4 {R~ldݐ Ynr"H]'7 ]mϗ@&ǹzw$mpsv p lMdg1$O6IVhssb)s;mXBrPi>-H΁ u% CH79TƳ翖*XhLU+ eL׮S. I\u4$M`/ũ'H YrFEmdT/N]JՊWJ| oo7S8GY-PMsٵ7 #)TL׹W͉J"ݨʚbZxR2kDr E alײddǓ>sL?!!/p:C'aL 3?U4/i^y0f {Ūs"2=% tc #aQ%j_ŮA'$:Rf ~GSQDv7ճΊp$[؄{k3WBT1oq{oɝbT[Us+mL9g,mDYPU9$n0gMQi5\*#r1FT|.s̏zcfU\8<K0#k@\{S8],5ߏVnDhFF^r>;\ING^o!vwLLK8sU;6jdp4^H\0:`-as3s?p, 35 /R|@fìR-4Y渤2 ;\36R^b\δcNBL1MG Jx}/Qr')]{ovQPle D\DJuSu>N3tH.|WO')YBgg:yˉMNR..<O/4ګw p1g5X8[e>ptj3T֨gixs1f"Xoi }e$0'?6Mp^@bwG5 1+YO˜:&~g"3)mA!8(sɱuLV17pLM_y'a@)=_x/G|X o)[PK<P qelmd[tH[rnbPRQ9Bx4ku/a`x4y*LgBoJT'RL,1t\9^JٽkikN,RNcס{HPa] "qz-us*:be?t謌<$NG>y SX|/юl/Ȭ҄@wZ #Yoh~=әKX947HgOҟt'}̃F9Tx1XCAہ( `j`:8M$W&`C!MZG옐4au=O:A@7~L}JvdHo?Ξyڒ }/ȡB*@3wCD}#wo1^Eƴ\L n29Cb+6C'p[$ +7]ɹAe/p)wHHOH`H!"*j6CӚ'n90iїG`pDs7CR{:6r8XGRO97^39YMk=L"* oy&1'C?R!siOs;Tnl xq.$PwLCFOlCN"y#X\a򤉥}ABK=?N={orz[8.2ȜìOrҮCxFj'ڽh(3^r~=\u Y̧* ؄0"IbǷi4iLpUSWA:8*ApB^¬/Pf!n|Jv6\h­@48Jqw#rGgD L#(jd* t#s $|gςMp)pOkajx0ЁET:W}NAĥn*1]M!~c&`528q`lua64A%4>v,oFojH ++lќ k0摌)8ޫa+h!GK}(L7DPG;s3Dㄻ#WHř?4 m.vl ֱj`WdѺy,H ڱcQj":n嚓D ğ(p=p ۳.:QG0M`s>,0W=E,pezUvkut5_}$H,#ǡ_!pD*JnC6Hk8%DT~.qŦ o`;SCɻd6#O4g9=CL?3ݨhy3o @;k6>:6T[K8[w!x/Icu7^M+* s26mA80I $C'׶2|PtHu|PjxxdQ.6~u JT vg~mOOgd$cm ٜ )IxUyJ:`{ȭrC+oj deg\h#q|BlJx"qi6|#AX7GZ CZ;^E6hhvq )|[H]9xqGr<|cN3ED~v "&V13Uy*!՗G߶\NǾ,6 AsFy>sBcGE02 v;zsEuh9EH-f*.2齇bIxz{ $ڳ!X)LO~Gd{YnE#\Qסފ9qs-` * G۷zʂ`s*c,k|+<[&hT kydϖpZ5ڶ%#5Le`2Gp|m@:ΰ;XGwϦ@FEFJhl'h[DM̓U"cEq9y77ê_nLrPb[21=5I6, DW57D4ISm]u4' !>9y'H9&O"]' 6jQi_Kl F+b"yDZԖ42>u@MASrkB'R{DPMa,n;(qP]+\=¾mM GPt:?,G3"H0隀Ślp!.1 .ǭux}sm3#V;Pa;IR'αbICrPΖW,B 7@+ؠ )TmG6 Dc7O>O׏ob(V%ـIVӰIuLՎI)<I!q̾)*KKm2 뮢4AU&Te0&T\ b) QQ \+ـN&c 7ۢ<\f7h Yk2в@d; ;De´0V9S6^J1mkj/ϊͱxR8+ޠ)Bd2g&,ffl=KvC *GY4Y}U <$ex P"5<8v\vO]ϟCJd6o{gʌ9Hʃǔ*nc[{KJS[L-˞3XͶ5˂xJ賓W@X I #"EP0hոdC<>"yS1ſ'W?$8u021CS$3j$T#a9q*0HuT%qj8kHOI_PНV4>y}2GԱG'8n-~-x 9Uq%µmDCƿь'U9N[$j5u|6q{O8,f* Dmi-bɃY6eěXP 2"rj.S>jFq[ })޹$j$jBiW 3a&w!vtz+~?›76&A8n$+}OpcZʃϞWզHdWu m;D6ɚ=x'AZ6UP+&:DSGa]PAq Z̟0G2`OTQ~R:yUIUc!e9rpyX٩v,d\8o'o揔 =žwHM4KGqڍ-)$XzHyC\? EĠp-It̛19ZbCfTd=Jøpq+nԝ; 0FF/0V)3( Ȅ](1|G ēXW2O\V16lRIJf.1(H:|bf6V/u2+5ptq3CkMl}V^tefg$q6F<`KʏCf5,( w VP`L{A8av mF2sѼeo01< @ٟIפX!82b} A}v[dx=N}?/'kN)g\CġvEhލ f sby]#'y߄:)2gcpx?}_\|JIfCe*㡆}Ls6(hV/l]UeSIY Ĝ;>դÊ97mL͇q *S"'KD%}! :]_-&b2$!VʦC]‹JCrΡk fD(wc$/. [:A>&Æ0p9̰m`q*A8}'YJr[p< y؃f`qv>F;L؏԰*zBt9(zDb[+WSs"G[X c+(U"|=}[Ph bŸ:y z}ɛ\=hy3ym܃tX nDgj7:c-Bd!ASr GҾ7뙸Ͱΐ^𖴇Zq2Q\^%5N64, UF:݆ja 䨈·U Π.bZN"'vPWlL:M0D?8Ү.ҵ4-G4M_X\h\icrJf@XHf-65 ML:Dx>&OZyuήF9:X3Lj=q>ubC6,("sH>I-h<3([I`RLƦYf왆k=6҈KIKL辽|jy:!|6NG/S8r!9'_yPɵV͚Qn,vi#_q'0IaMya|Gy[yC789Gy:Dq0|]]^r"O?ttQZS8`?7{w`i<}i_‚&BVFNO;R. ^lrbDmO:3vWEdDaj}vd"(jmTbl%!H1[>{(qr/ѤLb"0F2A}͉ ):sm ^AtVuڨ?)5l߉PQ6,^) `dD?(0J$%nׯi󊥢|3>OS,LbԾax*5ZLrsULsmšO1\(_4 +[C{VmNj=ùK~X(;r㔌>~н3'g8Gf/r2 {UD\.()򳼳p8S\l< ͋Z&I\98/aJ`Im!HP:&0T.Ha2IXN*s_sc%ښF#ۯ06 L-XQ@2!OxFXۡqV_x)D <IuS.rW/3d#倔Nf'?Gׅaھ me$r"f~ꜿ5nI'Ri}IL[d!Iʀ [\^ u>q)VMPάC֌ U1yl&!.ٱM"Jyl6Z,Q&E'ig2ƈknpWlAS5^o}U33Lܝ{OʮovfXnv/";r.t"V Mp hF+?͹Դf;2F(iz.qmp).!m )XX3)3 cL#w{؂Nj[;{ ~ h-|N`\c;tT5yͯ+$Q9‚uRV , nR &a'ʺ,i,UA`g.Wd!kSWLݜ fIEj_lB>a׋G0qKp:M!Ftxѩ:9m;+M\0;%XdxX2XƞF L9-Z[R0b* 1* ڶTu1szk")kbqe" I2}yE`Sj ==VSI69z ,L@†s;qUFLh,(imIw"9Ѓlx :XGY|0,mQ[ַw4 Tfqב޿c,4:( 7f7xphCf7u23o4!?J 3 XR+n:mf/a@}ehVp~ b`'{^sCQ#ld3imd91 M:"l4<yCHΕvl܉+QtkYF\p|>GQKݴ~Wft'6)fpӟ讽 Gm|M[:a2`ݚJ**fז0{o$=I436DD\|d uws_w"7SPpD{OU}Lv g:3fN.Fє7u{ST4h(. .QH/{lׂCep@f%%fl׳a`GF_Y8yJ0 T)3@'37K^TN*\* $'Je=&"`%dY*]07%؝ؖe7ZMS915Gu NcYa&C\Wi\{[xoU[Z?W2oq`3 t>/tyՍPժ:L[l>fҢȿ{2DГ&$lu uP9 UW3&0vl0/(A~ 69wᤎp{ɜYusqev?d* w8q:K_ylV$arz T|Vئ!ZVmhOX' B),՗BFYfn]!ŕobVhc&Ӗsm_8Pct넠IcmþO Ik<#-:H=o"7z玘3S|mI ~=N8fd= ڂ"5b]fwMs=\`!6r5ML\E'lӿMHK;e}1ZkMgYQ~x 0g`` 7f>V:`d5ڨ/b25> 8}NBW&hKCIuH;<#cgcoz3#Ǿf.xy/`-0/,%}"ZW&ܹR)^ZIt3Cp1pU[-\ΒgoBA5u'2̊(γ#D<"h_z"YQ5`Al6ߨaベlQ`'^ k;,iYD6 ݅!ki'+1<,;iMB>>?35m @YOևw%3>x5 F+|39C~~pĎ@L;bX֝234nWM6G.[;[E3n,P87X'ĎIF?|1I'I(O١mclP \9bw 9/jW倒䘨l+X_bA'> y'sqi|t,ĄT9KnCbN':$'4㈸U:It@=[-e|!-A" =GͰ>벣12fͯ b+p,rU$8T3ߐhc׎C&Φ Rom.wr杴,*aaZ|nA:`"s17>ҐM r37Og{J\%#DJRϞ29-xƶx!+ద:f74j zbVvqq֑ &Vkceb4(qɧ*l^dүq ]YGqW{3aS`=D9ňfK8'GQ?9ظhȨ"S>zLcukBLݝ=rv6 L& x ~GGKd(ݧ;1wȌE+Ba/Y XD ֟;k8䕨b}OdzF>VI6B{8gG u.uYae+α7?ͧ|?xay\ճ6&hN" c[osx_L&^^!5}y-<3fL~.hw c$'1Ȗѓ .O S转!$2wCcGIk4@GHJ!ȟ<0ЌX,̧z9-ȷ]n:78b=Ϧ4|+M {?w_>)i󹃂Hğ?zw`=>kb b <,ZWǫGrb5diM*k_A}TwԁfL[:bFY1ʇoFs?9BgF=xL|}cbnnPC6DӇ\G…(sKA,>r7<3S'"vR<$k^`d.u&%2)| ?@ɆbLrT"mYSP(Wߤr^ٻVV҈T#^ٮt:ƯTכAiyJ]TDUs[& gy畽w~ Mvcz<3cQ+c5;q>},v,ȲhWg*Pzo/Fm"pW?Uiy95T6uC6{Xm]+X8 $#jj9M,(nɮԪTPnQBqabdDY/εzaƚKx Oa$i R5d'%w``5&LmGyJ'ܸ}}'nN OcUhBTDdŻC:& Ee<[n[1KS-D|8X&9kڠQ@ZY'MSa#Z:=.݃TFwTPu8 љUSY݈(bcnR\>ɿb w$^EMUwa$x6AFf_Tl$DoG$-gvƈuюuƂ.gj0p@bܸ6uܯo{eqc `uf {et=n>┵c}*RP0T-xe`&GR|DLw!a47 xKg>1x1LanJ,<Фcҋ =ELz]@SEKlIGBPѕ5̅o@Yaoy1/2T d!|qbJNhi4lnew:I55 D"{U9i@6ƳɕR2O_ \ %z"P? xyASxNJ'fgbuw63^KAtgrIuqi%pj-< ,'Gi&\$u|ghP8YغOO/(zpF<Ɨ!%'?u[{!Qכ8p0(.g-Ò'#Upu1\8e}&jcW7a4g5'tOB[Ιfz}ˋe/Bx߼ҷMs1g4σLN9L+rF5IѰ(%&c8A"{f!⏷n,튭swiN^\L} f~<5Q E_,ɍ۾.Pc4! (1] mlȪi쬊"QW>/ (yؘY٘ߡc !?kZWH;؞f&z~!(4&?򝕔+"A,6X}J u)9gRP0O/CMf$N@g9ΜNtRܱ;a,U>"/--(î;d`F db[K*D'VLi Iˏi]f }=W,$ (Î}9sG7rp55,ܥ9x~]O%]u'hI]9\*v8hVNa<*ynEDנw/M- 6UНpC Y"k:]y3P;ӫΌl\IUj*ܞunƓ(ݹ{7isR\SwH;0F]>xOR=UE$ ]ձ>ϛ"1信+LHQa 9#ۯN%ZIW =_;ØO$.Rdu^A'Aп㮟wi_ qxp-ŒvX =638(y"C~rwOl blĒP]gܦ&k:j@6Su FE-LjQ#P53{;fmyoǓp\ɮW$hؿ` B`DeZ,o%S ٍfS !eG6W'6Ŝ%yʠ"mg 5@3Tr R>Uu\.C ~uKR6YԶ1SD"2 bPb&nZɁl[ ЕaSNWau/x<*'2vG΅#B.X;o;Kp,H԰ Imm{EJY(@-f'apݣPVmUMLF=/ƦHBۗA[R +Cc,G hCKF9P< Ư+N_8ed77oS= =1Y ۧ=q*1]0‡Av0c3T&ęmU%x+M'd1@uj SK~t]17\5?w*yjyjB|gkw,ٕi #Fp/[xM="cg^IP2< Wv^s2wH Ae3 A 6-ɣ[gq(XE&3Ь<7hf[5{0a3 28ݳOjsÛ1}ɑs/=,XuayP1 ۧ.؇uy ;w=L$ Bj^ !GxUC67޲fn$g+(U]0X-ρhEKQ1`et߇kz~Wg.ѪwQ oz8Y՘QL?0~Ή$3Ȍ&<ڧsT-l#A'c |;y\kqaމ3.MfSx˝%P.3X&8~C}?%4E-*\>}Shk23WHTW㼼:GSa&z}UGo_VO4gxs`Vé}Cܓ쯧lB8jol5 a$5I}7Ȱq{,AWG, SsvkRc*>f]ᢻ k*7 Gyco |P%&a* }oŒ+n#I4C1@uƔ zlDaUQnF 5ځZ9$ذ#d\ڽv;7'|*LOD.1~sD~ahu)"bgpEd7M?| s4vMPDc,ZHœYmzݳq3W9XG=e0ZG(yZts%5*kV*7, ׯ_jia)ZƤDZz%ZV18xo佤dܲ]%.Pl@7A1\).α##D0BiY&zT:4pAIXFP to :6ۙ"ژ&s>(A3ڮE|+f2Ly&*-$'*\(fS| lpd EțT>X$h*P؜u6x4&Si8DLğOEY}\ɋ͞IyTOG؆϶ėc7 .ᖨ -F.3B9='1ʍ%Ogg7uyͫ܈ݓ&RoΏ'XW3 nV+upF ;ήxghMsVO#l[NrR3[5 0ގEEZ!k;@m0'D~`L {nQky Y[d, ߴlL8챚+8"ԘWGuޗ+ K @~\'usS$ $w ;#O/sIߏ8'!0T j Ƹܡ#,W3Vtj5w޸V{8i^%}Ms>D0#Pnzl=mua*R4֌T~챾ax=ɹg{};+0A wox3\c'g1Ľq4uB2 Cs56 c\&mQSyIj"V̩NR(] Yd ? Slc Ptd՞gv6Աb_x|&LܩB!rINyc} 9P0| ?ȈEly*ʇ  ݶ(AOxRq9@ihl^ e{;6'ez["u|e2T?;̌j_MW nf>vU9e =ޔ`6-8"X;~wm*\ˋi9!JiǣI K)R%5ڦzU#Ll  Cr78)";ߢIO|=v FwWJ!&HÆyXW6|LY t) C7( X:]6Ciϔg}[e;x mɔ@myl XGH'q-S@_i{ ㋲1-f+ ms%@e<@r 16+$kOhQɽָD Ek><)7]Fk^F97̇h4X@TZ8L/a|'h {9 h><"{g\B|L#P_yCG.7r]lEMѠ]g8egMOڹVYEsC!Hzba4Ե lfs4}{|Ilpg-&@xF fPO0Acrs}T-'8E1-97A}NoK\o;E`B& c[)%ӎ, /im߄r~rMM'/$KwDbna2muFή8Yԙy;zzf86oA\.E$q;ũpjU2)pK*=3nG9  -!=|Wc?IwjT\]#8q䘩͊͞<\}׆e&Y7tL9ss6cCPl0.-n]h̹B9u ZܙqhaO42_ "XZ1ٯDkRW2Cu\DZ-%vvM%e{] nu9I~c:zxOu?a'-T+_/叹̢pO6x9$<4w6ߵFu =.&U\u&`m}*ъc'LKy&BoExYٱ70;Ҥ2fȓi%NqJU|xR`Wt$N1Sߏ\@ۑ0H4GV1\"b-tyB;R}GV) |Vgs fglbLERb35DSN|!5|!=OV>ܯU91Zmq)Dأ-1x\z};|?j>߸=Pǭl\l*I2 9/?Y,/EJj /;Hofye0fa!]dOC@渞.<;..ɏ"{yghآlSD뚏lbK&=6-6LߠFsm0!AU$mq3>z.2 Ni60s#*,3%-dޑNJK}˔FRths~#"[&•CLN)[w U=E,09>$J4SS߶B%!(g<%Y-.I}WkȮxmSzz#\M1%i;˱8$hG v.c1XRM1At9b%j@EsY%IM#MI] ?u~kD˃q_{CG8<*6U1v[Mi|ǖȞƂ3] >`&T8DF`;"%>yC^{#]kHV҃)>^rEpnefL<8w\\. U8h&0XWo lT!lf Uٝ>AƞkM5Hi* 3ҥ#(HqR%nH4io<҃&9EdblC} ,6/&a]i Y{GTc{o9e@1ffrP_ upaC;KR?9:Wna[2vkBS7̸ҍӭ۬[vN6%1m(5u'gk=܈ zİSD7]1O;揢+.AB7&PO5 |Xx.d:B+VF03;bXK괣$rgR7>p`8ϷIӍm^֜JCJ{W,(u,ޠ +1{<,)>BYH8lgd'3̨b̬C1{1ld:&E٤Zg5; 9+Xv%GZ' sf[0Nk׵GY8q)Is2kcHe̺?ߎ;nJSEUqv+ W)3&K|.!w#ЌY&ͦƲglTɿH~Ӽ$ՉD~ԛ÷e$B;1)A bb^h&N6]qlϜEomƢ%ouۘ`"z,[(#{Ȓ\?g/fj昽3`fu#&qf6 ɭCQv?{_l>2 9{!:SIU6=ivfcM)oե{:6fuKDWa@奃T{!m p߹X7a.1VnbeGMas)e?hrGP54kqỒucEh3q0 U|>2S>P9yocg\c0Qak&Ìa_hv.b)Xt̽qobw ReϹvVBZֽDR8a cy{99:IST6+1iN8M[=i6 L|./%Z7!¨N+'j]H 8,'&fBZtp<Q1V/B<젌y4餖dIO(SǏPuJ3) 3`C4uN8GylvJ"j4B?^Na{2FVn:KNFhN(Ђ-f; v:}+\^/k)̝}r'y\1mg8͙I^&4"Iw׀y1e~} mP|XM6=-*$֓ gTtX3k1yoFҀD"C[M*9cncq* ḇlf]lkL?vv23Նs%kFl ]o 8)zyl&fJooz$s7-yOYy#F1oG_ft1)Xx 9!lP7x2 84dnٛ8y$O0-AU^acY9N?ѿgenometools-1.5.1/testdata/Query1000066400000000000000000000000201211610345200167560ustar00rootroot00000000000000> tcacctttttccg genometools-1.5.1/testdata/Query2000066400000000000000000000000311211610345200167610ustar00rootroot00000000000000> CAATACGATATCCATTTTAAAA genometools-1.5.1/testdata/Query3000066400000000000000000000000361211610345200167670ustar00rootroot00000000000000> AGTGGCTACGGCGGCGGTGGCGGCGAT genometools-1.5.1/testdata/Random-Small.embl000066400000000000000000000001651211610345200210060ustar00rootroot00000000000000ID Random-small XX DE XX SQ acnnnnanan abn 13 // genometools-1.5.1/testdata/Random-Small.fna000066400000000000000000000000201211610345200206210ustar00rootroot00000000000000> acnnnnananabn genometools-1.5.1/testdata/Random-Small.gbk000066400000000000000000000001251211610345200206260ustar00rootroot00000000000000LOCUS Random-small DEFINITION Random-small ORIGIN 13 acnnnnanan abn // genometools-1.5.1/testdata/Random.embl000066400000000000000000000323661211610345200177500ustar00rootroot00000000000000ID Random XX DE XX SQ nnacancaaa cncaccaaac caanancnca cncnanaccc anccnnanna ancccnaacn 60 aacnaaaaan ncnncnanan accnacanaa cannnnncnn caanacnacc nnaaccnaac 120 ncanccancc naaaacacac caaccaannc cnaanccccn ccnnccacna ncccnnnnnc 180 nnacacaann acncacnnnc cnananacan nnccnnnanc acancaacna cacancaaca 240 aacaaaccac caaccacccc acaacaacnn cannacnaca accnaccnca nnaannaacc 300 nanccnannc cnncacnaan cancaanana nnccnancca ccnancaaan aacnancnan 360 cnnaanncac ccncanaccc caaaanacnc nccaccnnca accanncnan nannccccan 420 canaanaacc anacnccnac aacancccca aaanannaaa nacnnacanc naanaannaa 480 ncnncncccn cnnancccna acncacncac cnacaaccnc ccccaannan cncnancnna 540 acncnnanca cccanacnnn annaannaan annnncccnc cncnccanca aanaanncnn 600 acncacancc annnanacna aaaaacacna acccanccan ccncaccann acnnaaanac 660 cnnananann acnnccnanc accaacacaa cacnaacccc cnnacacnna aaacnaaccc 720 anncncannn nncnncaacn acnccacacc aacnanacnc ncnncaanca acaaanccnc 780 ncnnaaacca anancnnana caannanaca nnaaacccnc cnanaacnan aanancaaca 840 nccanacacc aannaaaacc aaaaccanac aancaaaann anannacccc acnacnaann 900 annccnnnnc cnnnaaannc cccaaanncn ncanncnacc cccacacaaa ccncnnanaa 960 naaccanann acnncanaca acncncanaa anacnancna acaaccccnn nnccncccnn 1020 nccancnnaa cancaccnnn cancccnncn aanaacccna cnncnncanc ccccncncaa 1080 anaacccnaa cccnnacnac canancncaa aancnaanaa ccnccnacnn acaancaanc 1140 ncnnnnanca cncncnaann ncancnanac naancnnnaa aanacaccac acnnnannca 1200 naaannnann anaccacnnc ncnaancncn cancccacaa cncccaccnc cnccaannnn 1260 nnnnacccca ncnnncncaa anacancncc acacncacnn accnnanaaa canccccaaa 1320 nancccccnc acnnnannan acaancccna aacaccccac naannacana aaaannaacc 1380 aaacaananc nnnnccnanc cncaananaa cannaannca acncccnncn nnncccaacc 1440 cnncaacann cnnanncacn ncaccnaaac ncannncacn naacnnnaaa cacancaacn 1500 caaaaacacn ccnanaacnc nnaccaaanc cnccannaan nnnnaccaaa nanaancnaa 1560 cacnacccan cccaccaana ccnncacncn canncanaac nnacnnnanc accnaccccc 1620 acanccaaac ccaaaaaaaa acaacnnana ananaacacn ncncnnacnc caacanccaa 1680 naanaccacn anacacnnnn nacnaacanc ncananaaaa nnacncaanc aanaacnncn 1740 ncannnccnn nnacnanncn cacaannnac aanancacca nnaaaananc nnaccnccnc 1800 aaaacccaan ncccncccnc nncnaaaaaa acaaaccaaa cnnaannaac acnancaaca 1860 ccaaanaanc cncanananc nccnncnnaa acanccnaaa acaacnncan cnaanaannc 1920 nncncaanca accaacaaan acacncnacn annnnnnnca ccacancnaa caacnnccaa 1980 caaacccccc acanaaaann aaaaaccaac nanncanaac cccnacccaa acancaccac 2040 nnanccacnn aacnncncna nncaaaaccc cnncaccnnn nnnncaacca ccacccnncc 2100 nnanacccnc caaancanca anccaacanc annannacaa anaancncan ncaaccccca 2160 nacnacacca anacncnncc acncacaaaa ccaannaana nannacccac nancnccccc 2220 nannncacac cacnccacca aaccnnaccc ncacnnacna caccnannnc ccccacnnnc 2280 ccannnnnna accnaanann ncacanacnc aaccacaaaa aacaanncaa nacnccccna 2340 cnannaaanc anaaccncna cncacaannn acaaacacac nacaccacnc caacanccnn 2400 caccnnncan aannnaanna ccccccnnna ccanacancc acncccaacn accnaaaann 2460 naannancan aanacanaan nnaaaancnc nnnccacncn ccccccaana ccnaananan 2520 nncnancaaa nacnnnccaa ncacacannc aancnaacan ccacnaanca cccncanacc 2580 accnannccc ncacncannn nannncccca ncacaaccca naaanncncn ccaaccnanc 2640 cncnanaacc nnncancana nnannaccca ancnacnaca anncaaaaac ccccncacaa 2700 nacnnaccac accanccccn nanncanncn ncacaacaca nnncncaann ccccccnaan 2760 ccncnncaca ccaaanacca nnncnccann ncaccaanca ccnccnacnc acccaacann 2820 nccnannacc aaananccaa aacancaaac cncncacanc cananncnnc accanncnnc 2880 caaccnaann acnancnncc aacacancca aaccnnaaaa acccncaaan naccacnnnn 2940 cnncccanaa cnnncccaac ncnncnacac naaancnaac nnnanannac cnnncnnacn 3000 nccnccnanc ananaccncc ncnaaacann anaaaancan cnccanacnc aannccaccn 3060 cnccacacnn ccnaccaaac cacaanncnc ccanncnccn acacnccanc cnncancccn 3120 ncnncaccan cnanncaanc nnaancnanc ccccncnanc ncaccccacc nanaaccana 3180 naanncccna anccccnnan ncaaaannca cnncaaacac ncancnanaa aacnncccan 3240 nnnnnncccn naanacnnna aanccncaaa caanaaccna nnccanaacn acnnaannaa 3300 cnaacnnaca acnaacacnn ncncnncnnc ncacncaanc ccnanacanc acnncaccaa 3360 ancnnaannc nccaacncna nncncanaca accanncncn nnncnccnnc cnacccacnn 3420 naancaccnc nanncaacnn naaacannna cnnnaaannc cnaannaana cnnnnccnnn 3480 annaanacac aaccacacaa ncacanncnn caacnncncn naaaancnac ccccancncn 3540 ccnaanncan ncaaaacnnc cnncncccnc nacnncncnc nnnaacnana nnnnaanaca 3600 aaacaccaac nannancaac nancnanacc cnaacanaaa cannnccnaa cnnnaanncn 3660 nnanaccnan nnacnannaa cnannannnn cncnncannn ncacacaanc acancananc 3720 annnaanana ncnnaccnaa aacanannnc caccnnannc nnccacnnac nccnnancnc 3780 nncncanccn ncaancnnnn cnaaccnnaa acccacnaca nccacacnaa nccncnnnan 3840 cacnnacnan ncncacannn cacnnnaann cncaannnaa ananancanc aancaaacna 3900 acaancaaaa naancnnnaa cnacaaccnc nnaannnnna ncccacaana nnnaccaccn 3960 aanaaccaaa nacnccnacn accccancnc ccnnnnnncc naaccnccaa aanncancaa 4020 nannccnaac nacncnncaa nannnnncan cnncaaaccn acnncncccc ccaaccnnna 4080 annacnccac nacaacacna cccacnncca anaanacaca naacanncaa nncaacacnn 4140 ancacananc nannnncacn acacnaacca cananacaac cnaaccccna aacnnaaaca 4200 aaanannnna annancncac nanacaacca caacaaccaa aaccacnnac ccacacccnn 4260 nacacncccc nncaacnaan nnancnnnac nacnaaaann annanannnc acaaannana 4320 nnaaccccac canaannccn cnacncnnna ccnnacnacc anaannaann cnancccnna 4380 nnaannaccc ccannccaac caaccnnnnn ccncnccncn ncnacacnna aaaancnacc 4440 aaanacannc nancanccac acccanacnc cnnanannca nnnnnaancc aacaacacca 4500 annaancnna nanannncca nacaccaaan cancancnac naancaancc cccccaaaan 4560 aaaaancnna cnccaaacnn nccncaanan cnananaaca cacaanncnc cacanaaanc 4620 cancnaanca ccnnaannaa ncnaccccac ancncnaacc ancaaananc naaaaanaac 4680 accnccnnaa accaacnnnn cnanacncac acacnaancn cccncnaaaa cnnacncaca 4740 ncnnacanaa naaanaannn anancncnna cnncacaana acnncnnann cccaannncn 4800 ccanacaann cccncnnncc ccaacaacna anacanaccc aaaannnaac acccccanna 4860 nncnacnana cacnananaa nnnaannaan ccnanaaaac aanccaccna cacanncnnc 4920 nccaanccan cncnnccncn aacaaancca nnnaaccncc ncnaacncan acacncncac 4980 nacnnancaa canccnacnc ccacncaann nnnccaaccc nanannnccc anccccaaac 5040 acaannaccc aacncnncac cnacancccn canccanncc nnacnnaacn cnnancaana 5100 cacnnaanna nnncaaacan nacaccnccc ccaccnnana annnananan ccacacacnc 5160 canncnaccn ncacccnnaa aancnnancc nnaaccanca cacnccnanc ncaccnccac 5220 ccnaanacaa ncaacccnna aaacanannn accaanccan ccncaanccc ncncananac 5280 aaacncnnaa acnaacaanc ccaaaaanca anaancncnn anacnccnan anccnncccc 5340 cnnnacannn cnannncncn caaaacccna anaaaacnnn nancannaac aacaccaann 5400 cacnaanacn aanccanccn cacaacnnca aaccncnncn caanccanan aanccacaca 5460 cccanaccna ancacnaccc nnccaanaca ccnannnana nncccacncn aaacnacanc 5520 acnannnacc ncnncnnacn caacccnnnc acancaaccn nacncannan ncaaacnnca 5580 ncnncncccc nnncncanac cccnnanaca nncacnccca caacaccaac accaannanc 5640 naacnanana ccacanccca anannccaca annaaaacan nccnaaaccn ncacanaaaa 5700 acncaacann ccacanaccc nnccccnnnc nannnnaacc cacccnnaan ccncnnnnan 5760 ncnncannnc ncccannnac nnnaacaacc nccaanncnc ccncnncaca nacaccnnan 5820 nnaacacanc ancnnnanac cccccnaana aaaanncnnn aacncnnaaa nncnnnnacn 5880 nnaaacanna ccccacaacc caaannaana accnnannan naccaaaaan cnaacacacn 5940 ncaanncanc cnnacaanna cnnanaanaa acancnnnnn acccnannna nnanannnan 6000 nacnccccnc naacnnanna accnccacca nccnnccaaa ccacnccnan aacnaccnnn 6060 ncncaacanc caccaccacc ccncncanaa cacnncccan cnaccnacna nnccncncnn 6120 cannacnaan cncaancnna acacacnnna ccaaaanncn aacnncnanc nccnaaacca 6180 cannanccnc nacancnaaa aanaccnncc ancanacacc accnncccca cccanncnca 6240 cnnccnccnc anannacncn aacncanacc aannnnaccn cnnncccaaa acnaccanac 6300 ncnncnnnnc ccncancaac aanacnacan ccnnnnncac aaacnaaacn cnaanncaan 6360 accaaccaac anncnanacc cnacanacan acanaacnnc canccaacac aanacanaaa 6420 acnaannncn nnaacaaanc naacnacacn ncnnnnccnc acaanccaan anaanannnn 6480 cancaaanaa nacanccaac cacancnccn caacacanaa cncaccnaan accnnacnaa 6540 cnccacacan acnaaanacn ccaccacccc nacnanaccc ccccnaacca acccaacccc 6600 aancncccca nnncaanncn anccacnanc aaaaanannc cnncncnnna aanaaaanac 6660 cnacacccaa ncncacaacn nananancnc cnnaaancnn ncnnannnca ncannacanc 6720 naacnnaaan cnaancnnnn aanncacnaa cnaccacanc nnaaccnnnn cancaacaan 6780 acnanaacca annnnccaac acaccaanna cancannacc cccnacacaa cnnnanacnc 6840 cnnacaanaa ccnacccccc nanccncanc cnancaccca nncannnaan ccacnccncc 6900 canaanaaan cncccnnnna anancnccna ncnncnacnc annnnanncn cnccacccaa 6960 nacnannacc cnaaacaacc ccncaannna accaannacc canaanannc nnanacccca 7020 caacnanncc cannnnacan cnaanancca anannccann nacccnccan acnanccaaa 7080 nacccacaca nnccncnnna nccnnnncan aacacaccca aacaacccna accncannan 7140 acnccacccc aaaaacnncn aacnccncnn cannaaanca nnnnncnnaa ncannanncc 7200 anaaaaannc cacnaacnnc nncccnncca annccccaaa anccccccna ccncncacan 7260 naaaccannc caccaccccn nacaaccncc acancccann aanncnannn ccancannaa 7320 caccnanacn cacnncncac aacnnacana ccaannacaa cnacaaaccc nccnccaaca 7380 acananacnn ccacaancaa cannccccna acncccaacc cncannanac naacnnccca 7440 nannnnnacn aaccccaaac ncnnccnanc nanncacanc aaaaaaacan caaccccaan 7500 naaacannna annacacnaa nnancccnca ccnaanacaa canncnaaaa cccnancccc 7560 cnncnnnncn cacaccancc aancncaccn acncanaacn cnnanncacn cnnacaaaan 7620 ncanaaaacc acancncccc annnnaancn cccncccaac ancacnnnac accccacann 7680 ccnnaananc annccnacaa cncccacccc anaccnnnna cnccancncc nnacanncca 7740 cccaacnncn acaacnncna naacaccnan nnaaaaancn aaanacnacn cancncnanc 7800 cananannna nanacnnnnc nacanaacan caacnnncac ancancnanc cnnccccann 7860 nncncncnca aanaacnnnc nncacannna nncnacnaca acaanccnnn cccanaaaaa 7920 aancncnnnc annnancccn ccacanccna ncnnnnncaa acncacnaac naanacacna 7980 nnccaccacn ncccnncnnn ncaacnaacc cncnnannac nnnannccan aannanncna 8040 aaanncnncc cananncccn nnanacnncn nacncacccc nanaaanann nacnccnaan 8100 ancncanacc ncancncnac ccacncacnn ccaaaaaccn cnanaaanac aannnnancc 8160 nacncnnann cnccanannn nnccnnaccn ncacannanc cccnncaaan nnccancnna 8220 nncnccancc anaccnncna nacanncann acnaacnaac ncacnccacn nacanaccnn 8280 ccnaaacacc ncaanaccac nnaacaaccc anacnnnacn anacncannn nnnccannnc 8340 cncccaannc ccnaaccncn aancccaaaa cnccccnacc nccacacacn canncncana 8400 aacanannnn cnaaanncan aaacacaaan nncnncaaac anccncacaa acaananacn 8460 ncnacnccca acnaaaaacn annncccacn nccannncac anccccccna cnacnnccca 8520 nnnaccccaa nannccncan annaaccnnc aacnccacnc ccacaacacc aancaaaccn 8580 cnncaccnna nanccnaanc cnacacncac caaaaacaan anncaanacn naacnaaana 8640 acccccnncn ccccaaanca ncanaacann anaacaaaac aacnananac acaaancacc 8700 aannannann ncaanncaac ccaacnnaaa nanaananan nnncnaaanc cnccnacnna 8760 caaaccnacn cncnccnanc acaaanaccc nnnnncnacn nnanaaanan aaacncaaan 8820 aaacacnnca ccaancacnn ccacncncac cacanaancc acnnaaacan ncccaccncc 8880 aaanncncna cacaanaccn aaaannaann acanaanaca nnacanaacn aaaanaaaan 8940 acccanaaaa nncncacaca anccnnnann aanacccccn nnaannancc annacacnac 9000 cnnnncaacn nnnnnaaanc ccncannnac nnaacnccac ncncanncnn aaannanacc 9060 nccacanccc acncnnnaca canaccacaa cccaccccan ancanncncn annnnncaca 9120 cncacncnnn ccnncacacc cnccnnancc ccnnccnaca ncncacaaca acnanccaac 9180 canacaacac aaaanccccc acacaccccn acnnnanccc cnaacncnaa acaacnaacn 9240 acaccnaccc naaccnancn nancancanc nncnnacnna cnnnacacan caaccnanca 9300 acncaanncc anccccnccc acacaannac ccccnaanna caannnacac naaannannn 9360 aancccnnna nccacnancn nncaaanann caaacaacac ncannnccnn nncaanncac 9420 nnncanaaac canannccac nannnnaana cccanacnna naananacnn nanaaacncn 9480 ccccnanana acnnacannn ancncccnan ccnccancna cannncaaaa ancanccccc 9540 naaacancnn ncanncaanc naacnncanc annannccac ncnnaccncc anancacccn 9600 nnacaanana acccnancan nncnncacna acacccnnan nnanacancn nncnaacccn 9660 caanancaan ccacncnnca nnnnnncnca cnnnnnccan annaanaacn nnacccncnn 9720 ancnccnnnn ccnaancaaa cacnaannaa ncnacaacac annncnnnna caccanncnn 9780 ncncnacccc acaacaccac ncanncacnn aannnacnaa caccccaaaa naccnccccn 9840 nnacnancnn nacccannna ncnncnaccn nccccccana ccccnaaana cccaaacncn 9900 ncnanacnna nccccncnca nncnccacca nacccaccaa naccaccaan acnacnannc 9960 cnnnanaanc caccaannan caancancan naaaccncac nnn 10003 // genometools-1.5.1/testdata/Random.fna000066400000000000000000000236441211610345200175740ustar00rootroot00000000000000> nnacancaaacncaccaaaccaanancncacncnanacccanccnnannaancccnaacnaacnaaaaan ncnncnananaccnacanaacannnnncnncaanacnaccnnaaccnaacncanccanccnaaaacacac caaccaannccnaanccccnccnnccacnancccnnnnncnnacacaannacncacnnnccnananacan nnccnnnancacancaacnacacancaacaaacaaaccaccaaccaccccacaacaacnncannacnaca accnaccncannaannaaccnanccnannccnncacnaancancaananannccnanccaccnancaaan aacnancnancnnaanncacccncanaccccaaaanacncnccaccnncaaccanncnannannccccan canaanaaccanacnccnacaacanccccaaaanannaaanacnnacancnaanaannaancnncncccn cnnancccnaacncacncaccnacaaccncccccaannancncnancnnaacncnnancacccanacnnn annaannaanannnncccnccncnccancaaanaanncnnacncacanccannnanacnaaaaaacacna acccanccanccncaccannacnnaaanaccnnananannacnnccnancaccaacacaacacnaacccc cnnacacnnaaaacnaacccanncncannnnncnncaacnacnccacaccaacnanacncncnncaanca acaaanccncncnnaaaccaanancnnanacaannanacannaaacccnccnanaacnanaanancaaca nccanacaccaannaaaaccaaaaccanacaancaaaannanannaccccacnacnaannannccnnnnc cnnnaaannccccaaanncnncanncnacccccacacaaaccncnnanaanaaccanannacnncanaca acncncanaaanacnancnaacaaccccnnnnccncccnnnccancnnaacancaccnnncancccnncn aanaacccnacnncnncancccccncncaaanaacccnaacccnnacnaccanancncaaaancnaanaa ccnccnacnnacaancaancncnnnnancacncncnaannncancnanacnaancnnnaaaanacaccac acnnnanncanaaannnannanaccacnncncnaancncncancccacaacncccaccnccnccaannnn nnnnaccccancnnncncaaanacancnccacacncacnnaccnnanaaacanccccaaanancccccnc acnnnannanacaancccnaaacaccccacnaannacanaaaaannaaccaaacaanancnnnnccnanc cncaananaacannaanncaacncccnncnnnncccaacccnncaacanncnnanncacnncaccnaaac ncannncacnnaacnnnaaacacancaacncaaaaacacnccnanaacncnnaccaaanccnccannaan nnnnaccaaananaancnaacacnacccancccaccaanaccnncacncncanncanaacnnacnnnanc accnacccccacanccaaacccaaaaaaaaacaacnnanaananaacacnncncnnacnccaacanccaa naanaccacnanacacnnnnnacnaacancncananaaaannacncaancaanaacnncnncannnccnn nnacnanncncacaannnacaanancaccannaaaanancnnaccnccncaaaacccaanncccncccnc nncnaaaaaaacaaaccaaacnnaannaacacnancaacaccaaanaanccncananancnccnncnnaa acanccnaaaacaacnncancnaanaanncnncncaancaaccaacaaanacacncnacnannnnnnnca ccacancnaacaacnnccaacaaaccccccacanaaaannaaaaaccaacnanncanaaccccnacccaa acancaccacnnanccacnnaacnncncnanncaaaaccccnncaccnnnnnnncaaccaccacccnncc nnanacccnccaaancancaanccaacancannannacaaanaancncanncaacccccanacnacacca anacncnnccacncacaaaaccaannaananannacccacnancncccccnannncacaccacnccacca aaccnnacccncacnnacnacaccnannncccccacnnncccannnnnnaaccnaanannncacanacnc aaccacaaaaaacaanncaanacnccccnacnannaaancanaaccncnacncacaannnacaaacacac nacaccacnccaacanccnncaccnnncanaannnaannaccccccnnnaccanacanccacncccaacn accnaaaannnaannancanaanacanaannnaaaancncnnnccacncnccccccaanaccnaananan nncnancaaanacnnnccaancacacanncaancnaacanccacnaancacccncanaccaccnannccc ncacncannnnannnccccancacaacccanaaanncncnccaaccnanccncnanaaccnnncancana nnannacccaancnacnacaanncaaaaacccccncacaanacnnaccacaccanccccnnanncanncn ncacaacacannncncaannccccccnaanccncnncacaccaaanaccannncnccannncaccaanca ccnccnacncacccaacannnccnannaccaaananccaaaacancaaaccncncacanccananncnnc accanncnnccaaccnaannacnancnnccaacacanccaaaccnnaaaaacccncaaannaccacnnnn cnncccanaacnnncccaacncnncnacacnaaancnaacnnnanannaccnnncnnacnnccnccnanc ananaccnccncnaaacannanaaaancancnccanacncaannccaccncnccacacnnccnaccaaac cacaanncncccanncnccnacacnccanccnncancccnncnncaccancnanncaancnnaancnanc ccccncnancncaccccaccnanaaccananaanncccnaanccccnnanncaaaanncacnncaaacac ncancnanaaaacnncccannnnnnncccnnaanacnnnaaanccncaaacaanaaccnannccanaacn acnnaannaacnaacnnacaacnaacacnnncncnncnncncacncaancccnanacancacnncaccaa ancnnaanncnccaacncnanncncanacaaccanncncnnnncnccnnccnacccacnnnaancaccnc nanncaacnnnaaacannnacnnnaaannccnaannaanacnnnnccnnnannaanacacaaccacacaa ncacanncnncaacnncncnnaaaancnacccccancncnccnaanncanncaaaacnnccnncncccnc nacnncncncnnnaacnanannnnaanacaaaacaccaacnannancaacnancnanacccnaacanaaa cannnccnaacnnnaanncnnnanaccnannnacnannaacnannannnncncnncannnncacacaanc acancanancannnaananancnnaccnaaaacanannnccaccnnanncnnccacnnacnccnnancnc nncncanccnncaancnnnncnaaccnnaaacccacnacanccacacnaanccncnnnancacnnacnan ncncacannncacnnnaanncncaannnaaananancancaancaaacnaacaancaaaanaancnnnaa cnacaaccncnnaannnnnancccacaanannnaccaccnaanaaccaaanacnccnacnaccccancnc ccnnnnnnccnaaccnccaaaanncancaanannccnaacnacncnncaanannnnncancnncaaaccn acnncnccccccaaccnnnaannacnccacnacaacacnacccacnnccaanaanacacanaacanncaa nncaacacnnancacanancnannnncacnacacnaaccacananacaaccnaaccccnaaacnnaaaca aaanannnnaannancncacnanacaaccacaacaaccaaaaccacnnacccacacccnnnacacncccc nncaacnaannnancnnnacnacnaaaannannanannncacaaannanannaaccccaccanaannccn cnacncnnnaccnnacnaccanaannaanncnancccnnannaannacccccannccaaccaaccnnnnn ccncnccncnncnacacnnaaaaancnaccaaanacanncnancanccacacccanacnccnnanannca nnnnnaanccaacaacaccaannaancnnananannnccanacaccaaancancancnacnaancaancc cccccaaaanaaaaancnnacnccaaacnnnccncaanancnananaacacacaanncnccacanaaanc cancnaancaccnnaannaancnaccccacancncnaaccancaaanancnaaaaanaacaccnccnnaa accaacnnnncnanacncacacacnaancncccncnaaaacnnacncacancnnacanaanaaanaannn anancncnnacnncacaanaacnncnnanncccaannncnccanacaanncccncnnnccccaacaacna anacanacccaaaannnaacacccccannanncnacnanacacnananaannnaannaanccnanaaaac aanccaccnacacanncnncnccaanccancncnnccncnaacaaanccannnaaccnccncnaacncan acacncncacnacnnancaacanccnacncccacncaannnnnccaacccnanannncccanccccaaac acaannacccaacncnncaccnacancccncanccannccnnacnnaacncnnancaanacacnnaanna nnncaaacannacaccncccccaccnnanaannnanananccacacacnccanncnaccnncacccnnaa aancnnanccnnaaccancacacnccnancncaccnccacccnaanacaancaacccnnaaaacanannn accaanccanccncaancccncncananacaaacncnnaaacnaacaancccaaaaancaanaancncnn anacnccnananccnncccccnnnacannncnannncncncaaaacccnaanaaaacnnnnancannaac aacaccaanncacnaanacnaanccanccncacaacnncaaaccncnncncaanccananaanccacaca cccanaccnaancacnacccnnccaanacaccnannnananncccacncnaaacnacancacnannnacc ncnncnnacncaacccnnncacancaaccnnacncannanncaaacnncancnncnccccnnncncanac cccnnanacanncacncccacaacaccaacaccaannancnaacnananaccacancccaanannccaca annaaaacannccnaaaccnncacanaaaaacncaacannccacanacccnnccccnnncnannnnaacc cacccnnaanccncnnnnanncnncannncncccannnacnnnaacaaccnccaanncncccncnncaca nacaccnnannnaacacancancnnnanaccccccnaanaaaaanncnnnaacncnnaaanncnnnnacn nnaaacannaccccacaacccaaannaanaaccnnannannaccaaaaancnaacacacnncaanncanc cnnacaannacnnanaanaaacancnnnnnacccnannnannanannnannacnccccncnaacnnanna accnccaccanccnnccaaaccacnccnanaacnaccnnnncncaacanccaccaccaccccncncanaa cacnncccancnaccnacnannccncncnncannacnaancncaancnnaacacacnnnaccaaaanncn aacnncnancnccnaaaccacannanccncnacancnaaaaanaccnnccancanacaccaccnncccca cccanncncacnnccnccncanannacncnaacncanaccaannnnaccncnnncccaaaacnaccanac ncnncnnnncccncancaacaanacnacanccnnnnncacaaacnaaacncnaanncaanaccaaccaac anncnanacccnacanacanacanaacnnccanccaacacaanacanaaaacnaannncnnnaacaaanc naacnacacnncnnnnccncacaanccaananaanannnncancaaanaanacanccaaccacancnccn caacacanaacncaccnaanaccnnacnaacnccacacanacnaaanacnccaccaccccnacnanaccc ccccnaaccaacccaaccccaancnccccannncaanncnanccacnancaaaaanannccnncncnnna aanaaaanaccnacacccaancncacaacnnananancnccnnaaancnnncnnannncancannacanc naacnnaaancnaancnnnnaanncacnaacnaccacancnnaaccnnnncancaacaanacnanaacca annnnccaacacaccaannacancannacccccnacacaacnnnanacnccnnacaanaaccnacccccc nanccncanccnancacccanncannnaanccacnccncccanaanaaancncccnnnnaanancnccna ncnncnacncannnnanncncnccacccaanacnannacccnaaacaaccccncaannnaaccaannacc canaananncnnanaccccacaacnanncccannnnacancnaananccaanannccannnacccnccan acnanccaaanacccacacannccncnnnanccnnnncanaacacacccaaacaacccnaaccncannan acnccaccccaaaaacnncnaacnccncnncannaaancannnnncnnaancannannccanaaaaannc cacnaacnncnncccnnccaannccccaaaanccccccnaccncncacannaaaccannccaccaccccn nacaaccnccacancccannaanncnannnccancannaacaccnanacncacnncncacaacnnacana ccaannacaacnacaaacccnccnccaacaacananacnnccacaancaacannccccnaacncccaacc cncannanacnaacnncccanannnnnacnaaccccaaacncnnccnancnanncacancaaaaaaacan caaccccaannaaacannnaannacacnaannancccncaccnaanacaacanncnaaaacccnancccc cnncnnnncncacaccanccaancncaccnacncanaacncnnanncacncnnacaaaanncanaaaacc acancnccccannnnaancncccncccaacancacnnnacaccccacannccnnaanancannccnacaa cncccaccccanaccnnnnacnccancnccnnacannccacccaacnncnacaacnncnanaacaccnan nnaaaaancnaaanacnacncancncnanccananannnananacnnnncnacanaacancaacnnncac ancancnanccnnccccannnncncncncaaanaacnnncnncacannnanncnacnacaacaanccnnn cccanaaaaaaancncnnncannnancccnccacanccnancnnnnncaaacncacnaacnaanacacna nnccaccacnncccnncnnnncaacnaacccncnnannacnnnannccanaannanncnaaaanncnncc cananncccnnnanacnncnnacncaccccnanaaanannnacnccnaanancncanaccncancncnac ccacncacnnccaaaaaccncnanaaanacaannnnanccnacncnnanncnccanannnnnccnnaccn ncacannanccccnncaaannnccancnnanncnccanccanaccnncnanacanncannacnaacnaac ncacnccacnnacanaccnnccnaaacaccncaanaccacnnaacaacccanacnnnacnanacncannn nnnccannnccncccaanncccnaaccncnaancccaaaacnccccnaccnccacacacncanncncana aacanannnncnaaanncanaaacacaaannncnncaaacanccncacaaacaananacnncnacnccca acnaaaaacnannncccacnnccannncacanccccccnacnacnncccannnaccccaanannccncan annaaccnncaacnccacncccacaacaccaancaaaccncnncaccnnananccnaanccnacacncac caaaaacaananncaanacnnaacnaaanaacccccnncnccccaaancancanaacannanaacaaaac aacnananacacaaancaccaannannannncaanncaacccaacnnaaananaananannnncnaaanc cnccnacnnacaaaccnacncncnccnancacaaanacccnnnnncnacnnnanaaananaaacncaaan aaacacnncaccaancacnnccacncncaccacanaanccacnnaaacanncccaccnccaaanncncna cacaanaccnaaaannaannacanaanacannacanaacnaaaanaaaanacccanaaaanncncacaca anccnnnannaanacccccnnnaannanccannacacnaccnnnncaacnnnnnnaaancccncannnac nnaacnccacncncanncnnaaannanaccnccacancccacncnnnacacanaccacaacccaccccan ancanncncnannnnncacacncacncnnnccnncacacccnccnnanccccnnccnacancncacaaca acnanccaaccanacaacacaaaancccccacacaccccnacnnnanccccnaacncnaaacaacnaacn acaccnacccnaaccnancnnancancancnncnnacnnacnnnacacancaaccnancaacncaanncc anccccncccacacaannacccccnaannacaannnacacnaaannannnaancccnnnanccacnancn nncaaananncaaacaacacncannnccnnnncaanncacnnncanaaaccanannccacnannnnaana cccanacnnanaananacnnnanaaacncnccccnananaacnnacannnancncccnanccnccancna cannncaaaaancancccccnaaacancnnncanncaancnaacnncancannannccacncnnaccncc anancacccnnnacaananaacccnancannncnncacnaacacccnnannnanacancnnncnaacccn caanancaanccacncnncannnnnncncacnnnnnccanannaanaacnnnacccncnnancnccnnnn ccnaancaaacacnaannaancnacaacacannncnnnnacaccanncnnncncnaccccacaacaccac ncanncacnnaannnacnaacaccccaaaanaccnccccnnnacnancnnnacccannnancnncnaccn nccccccanaccccnaaanacccaaacncnncnanacnnanccccncncanncnccaccanacccaccaa naccaccaanacnacnannccnnnanaanccaccaannancaancancannaaaccncacnnn genometools-1.5.1/testdata/Random.gbk000066400000000000000000000306701211610345200175700ustar00rootroot00000000000000LOCUS Random DEFINITION Random ORIGIN 1 nnacancaaa cncaccaaac caanancnca cncnanaccc anccnnanna ancccnaacn 61 aacnaaaaan ncnncnanan accnacanaa cannnnncnn caanacnacc nnaaccnaac 121 ncanccancc naaaacacac caaccaannc cnaanccccn ccnnccacna ncccnnnnnc 181 nnacacaann acncacnnnc cnananacan nnccnnnanc acancaacna cacancaaca 241 aacaaaccac caaccacccc acaacaacnn cannacnaca accnaccnca nnaannaacc 301 nanccnannc cnncacnaan cancaanana nnccnancca ccnancaaan aacnancnan 361 cnnaanncac ccncanaccc caaaanacnc nccaccnnca accanncnan nannccccan 421 canaanaacc anacnccnac aacancccca aaanannaaa nacnnacanc naanaannaa 481 ncnncncccn cnnancccna acncacncac cnacaaccnc ccccaannan cncnancnna 541 acncnnanca cccanacnnn annaannaan annnncccnc cncnccanca aanaanncnn 601 acncacancc annnanacna aaaaacacna acccanccan ccncaccann acnnaaanac 661 cnnananann acnnccnanc accaacacaa cacnaacccc cnnacacnna aaacnaaccc 721 anncncannn nncnncaacn acnccacacc aacnanacnc ncnncaanca acaaanccnc 781 ncnnaaacca anancnnana caannanaca nnaaacccnc cnanaacnan aanancaaca 841 nccanacacc aannaaaacc aaaaccanac aancaaaann anannacccc acnacnaann 901 annccnnnnc cnnnaaannc cccaaanncn ncanncnacc cccacacaaa ccncnnanaa 961 naaccanann acnncanaca acncncanaa anacnancna acaaccccnn nnccncccnn 1021 nccancnnaa cancaccnnn cancccnncn aanaacccna cnncnncanc ccccncncaa 1081 anaacccnaa cccnnacnac canancncaa aancnaanaa ccnccnacnn acaancaanc 1141 ncnnnnanca cncncnaann ncancnanac naancnnnaa aanacaccac acnnnannca 1201 naaannnann anaccacnnc ncnaancncn cancccacaa cncccaccnc cnccaannnn 1261 nnnnacccca ncnnncncaa anacancncc acacncacnn accnnanaaa canccccaaa 1321 nancccccnc acnnnannan acaancccna aacaccccac naannacana aaaannaacc 1381 aaacaananc nnnnccnanc cncaananaa cannaannca acncccnncn nnncccaacc 1441 cnncaacann cnnanncacn ncaccnaaac ncannncacn naacnnnaaa cacancaacn 1501 caaaaacacn ccnanaacnc nnaccaaanc cnccannaan nnnnaccaaa nanaancnaa 1561 cacnacccan cccaccaana ccnncacncn canncanaac nnacnnnanc accnaccccc 1621 acanccaaac ccaaaaaaaa acaacnnana ananaacacn ncncnnacnc caacanccaa 1681 naanaccacn anacacnnnn nacnaacanc ncananaaaa nnacncaanc aanaacnncn 1741 ncannnccnn nnacnanncn cacaannnac aanancacca nnaaaananc nnaccnccnc 1801 aaaacccaan ncccncccnc nncnaaaaaa acaaaccaaa cnnaannaac acnancaaca 1861 ccaaanaanc cncanananc nccnncnnaa acanccnaaa acaacnncan cnaanaannc 1921 nncncaanca accaacaaan acacncnacn annnnnnnca ccacancnaa caacnnccaa 1981 caaacccccc acanaaaann aaaaaccaac nanncanaac cccnacccaa acancaccac 2041 nnanccacnn aacnncncna nncaaaaccc cnncaccnnn nnnncaacca ccacccnncc 2101 nnanacccnc caaancanca anccaacanc annannacaa anaancncan ncaaccccca 2161 nacnacacca anacncnncc acncacaaaa ccaannaana nannacccac nancnccccc 2221 nannncacac cacnccacca aaccnnaccc ncacnnacna caccnannnc ccccacnnnc 2281 ccannnnnna accnaanann ncacanacnc aaccacaaaa aacaanncaa nacnccccna 2341 cnannaaanc anaaccncna cncacaannn acaaacacac nacaccacnc caacanccnn 2401 caccnnncan aannnaanna ccccccnnna ccanacancc acncccaacn accnaaaann 2461 naannancan aanacanaan nnaaaancnc nnnccacncn ccccccaana ccnaananan 2521 nncnancaaa nacnnnccaa ncacacannc aancnaacan ccacnaanca cccncanacc 2581 accnannccc ncacncannn nannncccca ncacaaccca naaanncncn ccaaccnanc 2641 cncnanaacc nnncancana nnannaccca ancnacnaca anncaaaaac ccccncacaa 2701 nacnnaccac accanccccn nanncanncn ncacaacaca nnncncaann ccccccnaan 2761 ccncnncaca ccaaanacca nnncnccann ncaccaanca ccnccnacnc acccaacann 2821 nccnannacc aaananccaa aacancaaac cncncacanc cananncnnc accanncnnc 2881 caaccnaann acnancnncc aacacancca aaccnnaaaa acccncaaan naccacnnnn 2941 cnncccanaa cnnncccaac ncnncnacac naaancnaac nnnanannac cnnncnnacn 3001 nccnccnanc ananaccncc ncnaaacann anaaaancan cnccanacnc aannccaccn 3061 cnccacacnn ccnaccaaac cacaanncnc ccanncnccn acacnccanc cnncancccn 3121 ncnncaccan cnanncaanc nnaancnanc ccccncnanc ncaccccacc nanaaccana 3181 naanncccna anccccnnan ncaaaannca cnncaaacac ncancnanaa aacnncccan 3241 nnnnnncccn naanacnnna aanccncaaa caanaaccna nnccanaacn acnnaannaa 3301 cnaacnnaca acnaacacnn ncncnncnnc ncacncaanc ccnanacanc acnncaccaa 3361 ancnnaannc nccaacncna nncncanaca accanncncn nnncnccnnc cnacccacnn 3421 naancaccnc nanncaacnn naaacannna cnnnaaannc cnaannaana cnnnnccnnn 3481 annaanacac aaccacacaa ncacanncnn caacnncncn naaaancnac ccccancncn 3541 ccnaanncan ncaaaacnnc cnncncccnc nacnncncnc nnnaacnana nnnnaanaca 3601 aaacaccaac nannancaac nancnanacc cnaacanaaa cannnccnaa cnnnaanncn 3661 nnanaccnan nnacnannaa cnannannnn cncnncannn ncacacaanc acancananc 3721 annnaanana ncnnaccnaa aacanannnc caccnnannc nnccacnnac nccnnancnc 3781 nncncanccn ncaancnnnn cnaaccnnaa acccacnaca nccacacnaa nccncnnnan 3841 cacnnacnan ncncacannn cacnnnaann cncaannnaa ananancanc aancaaacna 3901 acaancaaaa naancnnnaa cnacaaccnc nnaannnnna ncccacaana nnnaccaccn 3961 aanaaccaaa nacnccnacn accccancnc ccnnnnnncc naaccnccaa aanncancaa 4021 nannccnaac nacncnncaa nannnnncan cnncaaaccn acnncncccc ccaaccnnna 4081 annacnccac nacaacacna cccacnncca anaanacaca naacanncaa nncaacacnn 4141 ancacananc nannnncacn acacnaacca cananacaac cnaaccccna aacnnaaaca 4201 aaanannnna annancncac nanacaacca caacaaccaa aaccacnnac ccacacccnn 4261 nacacncccc nncaacnaan nnancnnnac nacnaaaann annanannnc acaaannana 4321 nnaaccccac canaannccn cnacncnnna ccnnacnacc anaannaann cnancccnna 4381 nnaannaccc ccannccaac caaccnnnnn ccncnccncn ncnacacnna aaaancnacc 4441 aaanacannc nancanccac acccanacnc cnnanannca nnnnnaancc aacaacacca 4501 annaancnna nanannncca nacaccaaan cancancnac naancaancc cccccaaaan 4561 aaaaancnna cnccaaacnn nccncaanan cnananaaca cacaanncnc cacanaaanc 4621 cancnaanca ccnnaannaa ncnaccccac ancncnaacc ancaaananc naaaaanaac 4681 accnccnnaa accaacnnnn cnanacncac acacnaancn cccncnaaaa cnnacncaca 4741 ncnnacanaa naaanaannn anancncnna cnncacaana acnncnnann cccaannncn 4801 ccanacaann cccncnnncc ccaacaacna anacanaccc aaaannnaac acccccanna 4861 nncnacnana cacnananaa nnnaannaan ccnanaaaac aanccaccna cacanncnnc 4921 nccaanccan cncnnccncn aacaaancca nnnaaccncc ncnaacncan acacncncac 4981 nacnnancaa canccnacnc ccacncaann nnnccaaccc nanannnccc anccccaaac 5041 acaannaccc aacncnncac cnacancccn canccanncc nnacnnaacn cnnancaana 5101 cacnnaanna nnncaaacan nacaccnccc ccaccnnana annnananan ccacacacnc 5161 canncnaccn ncacccnnaa aancnnancc nnaaccanca cacnccnanc ncaccnccac 5221 ccnaanacaa ncaacccnna aaacanannn accaanccan ccncaanccc ncncananac 5281 aaacncnnaa acnaacaanc ccaaaaanca anaancncnn anacnccnan anccnncccc 5341 cnnnacannn cnannncncn caaaacccna anaaaacnnn nancannaac aacaccaann 5401 cacnaanacn aanccanccn cacaacnnca aaccncnncn caanccanan aanccacaca 5461 cccanaccna ancacnaccc nnccaanaca ccnannnana nncccacncn aaacnacanc 5521 acnannnacc ncnncnnacn caacccnnnc acancaaccn nacncannan ncaaacnnca 5581 ncnncncccc nnncncanac cccnnanaca nncacnccca caacaccaac accaannanc 5641 naacnanana ccacanccca anannccaca annaaaacan nccnaaaccn ncacanaaaa 5701 acncaacann ccacanaccc nnccccnnnc nannnnaacc cacccnnaan ccncnnnnan 5761 ncnncannnc ncccannnac nnnaacaacc nccaanncnc ccncnncaca nacaccnnan 5821 nnaacacanc ancnnnanac cccccnaana aaaanncnnn aacncnnaaa nncnnnnacn 5881 nnaaacanna ccccacaacc caaannaana accnnannan naccaaaaan cnaacacacn 5941 ncaanncanc cnnacaanna cnnanaanaa acancnnnnn acccnannna nnanannnan 6001 nacnccccnc naacnnanna accnccacca nccnnccaaa ccacnccnan aacnaccnnn 6061 ncncaacanc caccaccacc ccncncanaa cacnncccan cnaccnacna nnccncncnn 6121 cannacnaan cncaancnna acacacnnna ccaaaanncn aacnncnanc nccnaaacca 6181 cannanccnc nacancnaaa aanaccnncc ancanacacc accnncccca cccanncnca 6241 cnnccnccnc anannacncn aacncanacc aannnnaccn cnnncccaaa acnaccanac 6301 ncnncnnnnc ccncancaac aanacnacan ccnnnnncac aaacnaaacn cnaanncaan 6361 accaaccaac anncnanacc cnacanacan acanaacnnc canccaacac aanacanaaa 6421 acnaannncn nnaacaaanc naacnacacn ncnnnnccnc acaanccaan anaanannnn 6481 cancaaanaa nacanccaac cacancnccn caacacanaa cncaccnaan accnnacnaa 6541 cnccacacan acnaaanacn ccaccacccc nacnanaccc ccccnaacca acccaacccc 6601 aancncccca nnncaanncn anccacnanc aaaaanannc cnncncnnna aanaaaanac 6661 cnacacccaa ncncacaacn nananancnc cnnaaancnn ncnnannnca ncannacanc 6721 naacnnaaan cnaancnnnn aanncacnaa cnaccacanc nnaaccnnnn cancaacaan 6781 acnanaacca annnnccaac acaccaanna cancannacc cccnacacaa cnnnanacnc 6841 cnnacaanaa ccnacccccc nanccncanc cnancaccca nncannnaan ccacnccncc 6901 canaanaaan cncccnnnna anancnccna ncnncnacnc annnnanncn cnccacccaa 6961 nacnannacc cnaaacaacc ccncaannna accaannacc canaanannc nnanacccca 7021 caacnanncc cannnnacan cnaanancca anannccann nacccnccan acnanccaaa 7081 nacccacaca nnccncnnna nccnnnncan aacacaccca aacaacccna accncannan 7141 acnccacccc aaaaacnncn aacnccncnn cannaaanca nnnnncnnaa ncannanncc 7201 anaaaaannc cacnaacnnc nncccnncca annccccaaa anccccccna ccncncacan 7261 naaaccannc caccaccccn nacaaccncc acancccann aanncnannn ccancannaa 7321 caccnanacn cacnncncac aacnnacana ccaannacaa cnacaaaccc nccnccaaca 7381 acananacnn ccacaancaa cannccccna acncccaacc cncannanac naacnnccca 7441 nannnnnacn aaccccaaac ncnnccnanc nanncacanc aaaaaaacan caaccccaan 7501 naaacannna annacacnaa nnancccnca ccnaanacaa canncnaaaa cccnancccc 7561 cnncnnnncn cacaccancc aancncaccn acncanaacn cnnanncacn cnnacaaaan 7621 ncanaaaacc acancncccc annnnaancn cccncccaac ancacnnnac accccacann 7681 ccnnaananc annccnacaa cncccacccc anaccnnnna cnccancncc nnacanncca 7741 cccaacnncn acaacnncna naacaccnan nnaaaaancn aaanacnacn cancncnanc 7801 cananannna nanacnnnnc nacanaacan caacnnncac ancancnanc cnnccccann 7861 nncncncnca aanaacnnnc nncacannna nncnacnaca acaanccnnn cccanaaaaa 7921 aancncnnnc annnancccn ccacanccna ncnnnnncaa acncacnaac naanacacna 7981 nnccaccacn ncccnncnnn ncaacnaacc cncnnannac nnnannccan aannanncna 8041 aaanncnncc cananncccn nnanacnncn nacncacccc nanaaanann nacnccnaan 8101 ancncanacc ncancncnac ccacncacnn ccaaaaaccn cnanaaanac aannnnancc 8161 nacncnnann cnccanannn nnccnnaccn ncacannanc cccnncaaan nnccancnna 8221 nncnccancc anaccnncna nacanncann acnaacnaac ncacnccacn nacanaccnn 8281 ccnaaacacc ncaanaccac nnaacaaccc anacnnnacn anacncannn nnnccannnc 8341 cncccaannc ccnaaccncn aancccaaaa cnccccnacc nccacacacn canncncana 8401 aacanannnn cnaaanncan aaacacaaan nncnncaaac anccncacaa acaananacn 8461 ncnacnccca acnaaaaacn annncccacn nccannncac anccccccna cnacnnccca 8521 nnnaccccaa nannccncan annaaccnnc aacnccacnc ccacaacacc aancaaaccn 8581 cnncaccnna nanccnaanc cnacacncac caaaaacaan anncaanacn naacnaaana 8641 acccccnncn ccccaaanca ncanaacann anaacaaaac aacnananac acaaancacc 8701 aannannann ncaanncaac ccaacnnaaa nanaananan nnncnaaanc cnccnacnna 8761 caaaccnacn cncnccnanc acaaanaccc nnnnncnacn nnanaaanan aaacncaaan 8821 aaacacnnca ccaancacnn ccacncncac cacanaancc acnnaaacan ncccaccncc 8881 aaanncncna cacaanaccn aaaannaann acanaanaca nnacanaacn aaaanaaaan 8941 acccanaaaa nncncacaca anccnnnann aanacccccn nnaannancc annacacnac 9001 cnnnncaacn nnnnnaaanc ccncannnac nnaacnccac ncncanncnn aaannanacc 9061 nccacanccc acncnnnaca canaccacaa cccaccccan ancanncncn annnnncaca 9121 cncacncnnn ccnncacacc cnccnnancc ccnnccnaca ncncacaaca acnanccaac 9181 canacaacac aaaanccccc acacaccccn acnnnanccc cnaacncnaa acaacnaacn 9241 acaccnaccc naaccnancn nancancanc nncnnacnna cnnnacacan caaccnanca 9301 acncaanncc anccccnccc acacaannac ccccnaanna caannnacac naaannannn 9361 aancccnnna nccacnancn nncaaanann caaacaacac ncannnccnn nncaanncac 9421 nnncanaaac canannccac nannnnaana cccanacnna naananacnn nanaaacncn 9481 ccccnanana acnnacannn ancncccnan ccnccancna cannncaaaa ancanccccc 9541 naaacancnn ncanncaanc naacnncanc annannccac ncnnaccncc anancacccn 9601 nnacaanana acccnancan nncnncacna acacccnnan nnanacancn nncnaacccn 9661 caanancaan ccacncnnca nnnnnncnca cnnnnnccan annaanaacn nnacccncnn 9721 ancnccnnnn ccnaancaaa cacnaannaa ncnacaacac annncnnnna caccanncnn 9781 ncncnacccc acaacaccac ncanncacnn aannnacnaa caccccaaaa naccnccccn 9841 nnacnancnn nacccannna ncnncnaccn nccccccana ccccnaaana cccaaacncn 9901 ncnanacnna nccccncnca nncnccacca nacccaccaa naccaccaan acnacnannc 9961 cnnnanaanc caccaannan caancancan naaaccncac nnn // genometools-1.5.1/testdata/Random.magicmatch000066400000000000000000000000421211610345200211100ustar00rootroot000000000000005142f1ea8ce4a265f8dc4640e5bb9799 genometools-1.5.1/testdata/Random159.embl000066400000000000000000000006151211610345200201770ustar00rootroot00000000000000ID Random140 XX DE n140 XX SQ nnacancaaa cncaccaaac caanancnca cncnanaccc anccnnanna ancccnaacn 60 aacnaaaaan ncnncnanan accnacanaa cannnnncnn caanacnacc nnaaccnaac 120 ncanccancc naaaacaca 139 // ID Random18 XX DE n18 XX SQ caaccaannc cnaanccc 18 // genometools-1.5.1/testdata/Random159.fna000066400000000000000000000002541211610345200200230ustar00rootroot00000000000000>n140 nnacancaaacncaccaaaccaanancncacncnanacccanccnnannaancccnaacnaacnaaaaan ncnncnananaccnacanaacannnnncnncaanacnaccnnaaccnaacncanccanccnaaaacaca >n18 caaccaannccnaanccc genometools-1.5.1/testdata/Random159.gbk000066400000000000000000000005521211610345200200230ustar00rootroot00000000000000LOCUS Random140 DEFINITION n140 ORIGIN 60 nnacancaaa cncaccaaac caanancnca cncnanaccc anccnnanna ancccnaacn 120 aacnaaaaan ncnncnanan accnacanaa cannnnncnn caanacnacc nnaaccnaac 140 ncanccancc naaaacaca // LOCUS Random18 DEFINITION n18 ORIGIN 18 caaccaannc cnaanccc // genometools-1.5.1/testdata/Random160.embl000066400000000000000000000006151211610345200201670ustar00rootroot00000000000000ID Random140 XX DE n140 XX SQ nnacancaaa cncaccaaac caanancnca cncnanaccc anccnnanna ancccnaacn 60 aacnaaaaan ncnncnanan accnacanaa cannnnncnn caanacnacc nnaaccnaac 120 ncanccancc naaaacacac 140 // ID Random18 XX DE n18 XX SQ caaccaannc cnaanccc 18 // genometools-1.5.1/testdata/Random160.fna000066400000000000000000000002551211610345200200140ustar00rootroot00000000000000>n140 nnacancaaacncaccaaaccaanancncacncnanacccanccnnannaancccnaacnaacnaaaaan ncnncnananaccnacanaacannnnncnncaanacnaccnnaaccnaacncanccanccnaaaacacac >n18 caaccaannccnaanccc genometools-1.5.1/testdata/Random160.gbk000066400000000000000000000005531211610345200200140ustar00rootroot00000000000000LOCUS Random140 DEFINITION n140 ORIGIN 60 nnacancaaa cncaccaaac caanancnca cncnanaccc anccnnanna ancccnaacn 120 aacnaaaaan ncnncnanan accnacanaa cannnnncnn caanacnacc nnaaccnaac 140 ncanccancc naaaacacac // LOCUS Random18 DEFINITION n18 ORIGIN 18 caaccaannc cnaanccc // genometools-1.5.1/testdata/Random80.fna000066400000000000000000000001351211610345200177320ustar00rootroot00000000000000>n140 nnacancaaacncaccaaaccaanancncacncnanacccanccnnannaancccnaacnaacnaaaaan >n18 cnaanccc genometools-1.5.1/testdata/RandomN.embl000066400000000000000000000323661211610345200200660ustar00rootroot00000000000000ID RandomN XX DE XX SQ nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 60 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 120 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 180 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 240 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 300 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 360 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 420 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 480 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 540 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 600 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 660 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 720 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 780 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 840 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 900 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 960 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1020 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1080 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1140 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1200 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1260 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1320 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1380 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1440 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1500 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1560 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1620 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1680 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1740 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1800 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1860 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1920 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1980 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2040 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2100 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2160 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2220 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2280 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2340 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2400 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2460 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2520 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2580 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2640 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2700 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2760 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2820 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2880 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2940 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3000 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3060 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3120 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3180 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3240 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3300 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3360 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3420 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3480 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3540 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3600 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3660 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3720 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3780 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3840 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3900 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3960 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4020 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4080 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4140 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4200 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4260 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4320 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4380 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4440 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4500 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4560 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4620 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4680 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4740 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4800 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4860 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4920 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4980 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5040 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5100 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5160 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5220 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5280 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5340 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5400 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5460 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5520 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5580 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5640 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5700 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5760 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5820 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5880 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5940 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6000 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6060 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6120 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6180 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6240 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6300 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6360 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6420 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6480 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6540 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6600 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6660 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6720 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6780 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6840 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6900 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6960 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7020 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7080 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7140 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7200 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7260 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7320 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7380 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7440 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7500 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7560 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7620 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7680 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7740 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7800 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7860 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7920 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7980 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8040 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8100 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8160 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8220 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8280 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8340 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8400 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8460 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8520 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8580 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8640 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8700 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8760 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8820 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8880 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8940 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9000 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9060 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9120 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9180 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9240 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9300 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9360 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9420 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9480 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9540 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9600 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9660 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9720 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9780 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9840 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9900 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9960 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 10000 // genometools-1.5.1/testdata/RandomN.fna000066400000000000000000000236411211610345200177070ustar00rootroot00000000000000> nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn genometools-1.5.1/testdata/RandomN.gbk000066400000000000000000000311341211610345200177020ustar00rootroot00000000000000LOCUS RandomN DEFINITION RandomN ORIGIN 1 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 61 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 121 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 181 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 241 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 301 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 361 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 421 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 481 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 541 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 601 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 661 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 721 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 781 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 841 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 901 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 961 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1021 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1081 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1141 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1201 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1261 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1321 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1381 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1441 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1501 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1561 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1621 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1681 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1741 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1801 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1861 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1921 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 1981 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2041 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2101 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2161 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2221 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2281 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2341 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2401 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2461 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2521 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2581 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2641 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2701 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2761 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2821 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2881 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 2941 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3001 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3061 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3121 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3181 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3241 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3301 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3361 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3421 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3481 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3541 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3601 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3661 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3721 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3781 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3841 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3901 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 3961 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4021 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4081 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4141 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4201 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4261 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4321 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4381 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4441 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4501 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4561 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4621 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4681 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4741 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4801 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4861 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4921 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 4981 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5041 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5101 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5161 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5221 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5281 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5341 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5401 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5461 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5521 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5581 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5641 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5701 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5761 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5821 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5881 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 5941 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6001 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6061 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6121 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6181 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6241 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6301 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6361 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6421 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6481 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6541 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6601 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6661 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6721 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6781 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6841 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6901 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 6961 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7021 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7081 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7141 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7201 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7261 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7321 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7381 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7441 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7501 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7561 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7621 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7681 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7741 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7801 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7861 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7921 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 7981 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8041 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8101 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8161 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8221 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8281 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8341 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8401 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8461 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8521 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8581 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8641 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8701 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8761 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8821 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8881 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 8941 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9001 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9061 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9121 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9181 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9241 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9301 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9361 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9421 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9481 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9541 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9601 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9661 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9721 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9781 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9841 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9901 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn 9961 nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn nnnnnnnnnn // genometools-1.5.1/testdata/RandomN.magicmatch000066400000000000000000000000421211610345200212260ustar00rootroot000000000000005259f373a3b672b7d9b631a8d2b3a11e genometools-1.5.1/testdata/Reads1.fna000066400000000000000000000134041211610345200174640ustar00rootroot00000000000000>L1_S1 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S2 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S3 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S4 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S5 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S6 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S7 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S8 CCCGTCTCTTCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S9 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S10 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S11 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S12 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S13 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S14 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S15 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S16 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S17 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S18 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S19 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S20 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S21 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S22 ACCGTCTGTCCTTCGATCTGTCCGACTCCTACACTCAGTCACACTGACCC >L1_S23 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S24 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S25 ACCGTCTGTCCTTCGATCTGTCCGACTCCTACACTCAGTCACACTGACCC >L1_S26 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S27 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACAGTGACCC >L1_S28 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S29 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S30 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S31 ACCGTCTGTCCTTCGATCTGTCCGACTCCTACACTCAGTCACACTGACCC >L1_S32 CCCGTCTCTTCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S33 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S34 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S35 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S36 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S37 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S38 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S39 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S40 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S41 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S42 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S43 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S44 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S45 ACCGTCTGTCCTTCGATCTGTCCGACTCCTACACTCAGTCACACTGACCC >L1_S46 ACCGTCTGTCCTTCGATCTGTCCGACTCCTACACTCAGTCACACTGACCC >L1_S47 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S48 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S49 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S50 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACAGTGACCC >L1_S51 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACAGTGACCC >L1_S52 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S53 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S54 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S55 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S56 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S57 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S58 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S59 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S60 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S61 ACCGTCTGTCCTTCGATCTGTCCGACTCCTACACTCAGTCACACTGACCC >L1_S62 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S63 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S64 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S65 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S66 ACCGTCTGTCCTTCGATCTGTCCGACTCCTACACTCAGTCACACTGACCC >L1_S67 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S68 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S69 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACAGTGACCC >L1_S70 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S71 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACAGTGACCC >L1_S72 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S73 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S74 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S75 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S76 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S77 CCCGTCTCTTCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S78 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S79 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S80 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACAGTGACCC >L1_S81 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S82 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S83 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S84 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S85 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S86 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S87 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACAGTGACCC >L1_S88 CCCGTCTCTTCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S89 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S90 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S91 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S92 ACCGTCTGTCCTTCGATCTGTCCGACTCCTACACTCAGTCACACTGACCC >L1_S93 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S94 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S95 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACAGTGACCC >L1_S96 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S97 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S98 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S99 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC >L1_S100 CCCGTCTGTCCTTCGATCTGTCCGACTCCTACAGTCAGTCACACTGACCC genometools-1.5.1/testdata/Reads2-spmitv.txt000066400000000000000000000043351211610345200210630ustar00rootroot00000000000000unnecessaryleaves=47 (0.01) wholeleaf[1]:num=1 (0.25), width=1393 (0.27) wholeleaf[2]:num=1 (0.07), width=200 (0.04) wholeleaf[3]:num=1 (0.03), width=200 (0.04) wholeleaf[4]:num=1 (0.02), width=100 (0.02) wholeleaf[5]:num=1 (0.02), width=100 (0.02) wholeleaf[6]:num=1 (0.01), width=100 (0.02) wholeleaf[7]:num=1 (0.01), width=100 (0.02) wholeleaf[8]:num=1 (0.01), width=100 (0.02) wholeleaf[9]:num=1 (0.01), width=100 (0.02) wholeleaf[10]:num=1 (0.01), width=100 (0.02) wholeleaf[11]:num=1 (0.01), width=100 (0.02) wholeleaf[12]:num=1 (0.01), width=100 (0.02) wholeleaf[13]:num=1 (0.01), width=100 (0.02) wholeleaf[14]:num=1 (0.01), width=100 (0.02) wholeleaf[15]:num=1 (0.01), width=100 (0.02) wholeleaf[16]:num=1 (0.01), width=100 (0.02) wholeleaf[17]:num=1 (0.01), width=100 (0.02) wholeleaf[18]:num=1 (0.01), width=100 (0.02) wholeleaf[19]:num=1 (0.01), width=100 (0.02) wholeleaf[20]:num=1 (0.01), width=100 (0.02) wholeleaf[21]:num=1 (0.01), width=100 (0.02) wholeleaf[22]:num=1 (0.01), width=100 (0.02) wholeleaf[23]:num=1 (0.01), width=100 (0.02) wholeleaf[24]:num=1 (0.01), width=100 (0.02) wholeleaf[25]:num=1 (0.01), width=100 (0.02) wholeleaf[26]:num=2 (0.02), width=100 (0.02) wholeleaf[27]:num=2 (0.02), width=100 (0.02) wholeleaf[28]:num=3 (0.03), width=100 (0.02) wholeleaf[29]:num=4 (0.04), width=100 (0.02) wholeleaf[30]:num=4 (0.04), width=100 (0.02) wholeleaf[31]:num=4 (0.04), width=100 (0.02) wholeleaf[32]:num=4 (0.04), width=100 (0.02) wholeleaf[33]:num=4 (0.05), width=100 (0.02) wholeleaf[34]:num=4 (0.05), width=100 (0.02) wholeleaf[35]:num=5 (0.06), width=100 (0.02) wholeleaf[36]:num=5 (0.07), width=100 (0.02) wholeleaf[37]:num=5 (0.07), width=100 (0.02) wholeleaf[38]:num=5 (0.08), width=100 (0.02) wholeleaf[39]:num=5 (0.08), width=100 (0.02) wholeleaf[40]:num=5 (0.09), width=100 (0.02) wholeleaf[41]:num=5 (0.10), width=100 (0.02) wholeleaf[42]:num=5 (0.11), width=100 (0.02) wholeleaf[43]:num=5 (0.12), width=100 (0.02) wholeleaf[44]:num=5 (0.14), width=100 (0.02) wholeleaf[45]:num=5 (0.17), width=100 (0.02) wholeleaf[46]:num=5 (0.20), width=100 (0.02) wholeleaf[47]:num=5 (0.25), width=100 (0.02) wholeleaf[48]:num=5 (0.33), width=100 (0.02) wholeleaf[49]:num=5 (0.50), width=100 (0.02) wholeleaf[50]:num=5 (1.00), width=99 (0.02) genometools-1.5.1/testdata/Reads2.fna000066400000000000000000000134041211610345200174650ustar00rootroot00000000000000>L6_S1 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S2 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S3 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S4 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S5 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S6 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S7 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S8 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S9 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S10 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S11 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S12 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S13 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S14 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S15 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S16 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S17 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCACGCTCTATCGCCTGC >L6_S18 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S19 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S20 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S21 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S22 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S23 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S24 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S25 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S26 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S27 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S28 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S29 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S30 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S31 TTCTAGACGGCCTCAGTTCGCTAGTCGTGCCACCTCGCTCTATCGCCTGC >L6_S32 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S33 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S34 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S35 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S36 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S37 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCACGCTCTATCGCCTGC >L6_S38 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S39 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGA >L6_S40 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S41 TTCTAGACGGCCTCAGTTCGCTAGTGGCCCCACCTCGCTCTATCGCCTGC >L6_S42 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S43 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCACGCTCTATCGCCTGC >L6_S44 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S45 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S46 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S47 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S48 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S49 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S50 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S51 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S52 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S53 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCACGCTCTATCGCCTGC >L6_S54 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S55 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S56 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S57 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S58 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S59 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S60 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S61 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S62 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S63 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S64 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S65 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCACGCTCTATCGCCTGC >L6_S66 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S67 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S68 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S69 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S70 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S71 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S72 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S73 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S74 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S75 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S76 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S77 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S78 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S79 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S80 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S81 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S82 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S83 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S84 TTCTAGACGGCCTCAGTTCGCTAGTGGCCCCACCTCGCTCTATCGCCTGC >L6_S85 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S86 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S87 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S88 TTCTAGACGGCCTCAGTTCGCTAGTCGTGCCACCTCGCTCTATCGCCTGC >L6_S89 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S90 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S91 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S92 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S93 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S94 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S95 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S96 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S97 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S98 TTCTAGACGGCCTCAGTTCGCTAGTGGTCCCACCTCGCTCTATCGCCTGC >L6_S99 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC >L6_S100 TTCTAGACGGCCTCAGTTCGCTAGTCGTCCCACCTCGCTCTATCGCCTGC genometools-1.5.1/testdata/Reads3.fna000066400000000000000000000134041211610345200174660ustar00rootroot00000000000000>L3_S1 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S2 TGCTCGGAGGGATCGGCTTGGTGCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S3 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S4 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S5 TCCTCGGAGGGATCGGCTTGGTTCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S6 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S7 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S8 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S9 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S10 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S11 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTTGCCACCTGGGCGCCGG >L3_S12 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S13 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S14 TGCTCGGAGGGATCGGCTTGGTTCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S15 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S16 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S17 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S18 TCCTCGGAGGGATCGGCTTGGTTCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S19 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S20 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S21 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S22 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S23 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S24 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S25 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S26 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S27 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S28 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S29 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S30 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S31 TGCTCGGAGGGATCGGCTTGGTGCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S32 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S33 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S34 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S35 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S36 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S37 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S38 TGCTCGGAGGGATCGGCTTGGTGCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S39 TGCTCGGAGGGATCGGCTTGGTTCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S40 TGCTCGGAGGGATCGGCTTGGTTCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S41 TGCTCGGAGGGATCGGCTTGGTGCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S42 TCCTCGGAGGGATCGGCTTGGTTCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S43 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S44 TGCTCGGAGGGATCGGCTTGGTGCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S45 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S46 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S47 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S48 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S49 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S50 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S51 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S52 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S53 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S54 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S55 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S56 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S57 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S58 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S59 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S60 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S61 TCCTCGGAGGGATCGGCTTGGTTCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S62 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S63 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S64 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S65 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S66 TCCTCGGAGGGATCGGCTTGGTTCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S67 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S68 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S69 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S70 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S71 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S72 TGCTCGGAGGGATCGGCTTGGTGCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S73 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S74 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S75 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S76 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S77 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S78 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S79 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S80 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S81 TCCTCGGAGGGATCGGCTTGGTTCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S82 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S83 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S84 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S85 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S86 TGCTCGGAGGGATCGGCTTGGTGCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S87 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S88 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S89 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S90 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S91 TGCTCGGAGGGATCGGCTTGGTGCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S92 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S93 TGCTCGGAGGGATCGGCTTGGTGCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S94 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S95 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S96 TCCTCGGAGGGATCGGCTTGGTTCTATCTCCGTAGCCACCTGAGCGCCGG >L3_S97 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S98 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S99 TGCTCGGAGGGATCGGCTAGGTTCTATCTCCGTAGCCACCTGGGCGCCGG >L3_S100 TGCTCGGAGGGATCGGCTTGGTGCTATCTCCGTAGCCACCTGAGCGCCGG genometools-1.5.1/testdata/Reference1000066400000000000000000000000261211610345200175550ustar00rootroot00000000000000> CCNCTCNCCTTTTTCCTCT genometools-1.5.1/testdata/Reference2000066400000000000000000000000151211610345200175540ustar00rootroot00000000000000> acaaacatat genometools-1.5.1/testdata/Repfind-example.fna000066400000000000000000000001461211610345200213640ustar00rootroot00000000000000>sample sequence for repfind gagctcgagcgctgct >another sample sequence for repfind cttaaggaattccccggc genometools-1.5.1/testdata/SKsplintoptions000066400000000000000000000013701211610345200207640ustar00rootroot00000000000000-checks +enumindex -onlyunqglobaltrans -looploopbreak -readonlytrans -retalias -infloopsuncon -declundef -redecl -namechecks -exportheader -exportlocal +charint -warnposix -mustfreefresh -boolops -usereleased -mustfreeonly -compmempass -compdef -kepttrans -predboolint -unrecog -usedef -compdestroy -statictrans -branchstate -temptrans -globstate -dependenttrans -noeffect -nullstate -realcompare -initallelements -aliasunique -nullassign -nullpass -unqualifiedtrans -maintype -observertrans -immediatetrans -castfcnptr -onlytrans -bufferoverflowhigh -uniondef -sefuncon -nullret -sysunrecog -shiftnegative -shiftimplementation +posixlib -duplicatequals -exitarg # added to inhibit system errors on Ubuntu lucid, 20100618 -incondefs -fixedformalarray -mustmod genometools-1.5.1/testdata/Small.embl000066400000000000000000000012621211610345200175670ustar00rootroot00000000000000ID sequence0 XX DE XX SQ naatatcgac atan 14 // ID sequence1 XX DE XX SQ agatctatcc agagcatact acnnnnnnna tatcgtnnnn nnn 43 // ID sequence2 XX DE XX SQ nnnagtacta gcatactcag gactcatcac gac 33 // ID sequence3 XX DE XX SQ nnnnnnnnnn nnnnnnnnnn nnnn 24 // ID sequence4 XX DE XX SQ ntatacgacc atactacgac nnnn 24 // ID sequence5 XX DE XX SQ aagactca 8 // genometools-1.5.1/testdata/Small.fna000066400000000000000000000002441211610345200174130ustar00rootroot00000000000000> naatatcgacatan > agatctatccagagcatactacnnnnnnnatatcgtnnnnnnn > nnnagtactagcatactcaggactcatcacgac > nnnnnnnnnnnnnnnnnnnnnnnn > ntatacgaccatactacgacnnnn > aagactca genometools-1.5.1/testdata/Small.gbk000066400000000000000000000010221211610345200174050ustar00rootroot00000000000000LOCUS sequence0 DEFINITION ORIGIN 1 naatatcgac atan // LOCUS sequence1 DEFINITION ORIGIN 1 agatctatcc agagcatact acnnnnnnna tatcgtnnnn nnn // LOCUS sequence2 DEFINITION ORIGIN 1 nnnagtacta gcatactcag gactcatcac gac // LOCUS sequence3 DEFINITION ORIGIN 1 nnnnnnnnnn nnnnnnnnnn nnnn // LOCUS sequence4 DEFINITION ORIGIN 1 ntatacgacc atactacgac nnnn // LOCUS sequence5 DEFINITION ORIGIN 1 aagactca // genometools-1.5.1/testdata/Smalldup.fna000066400000000000000000000000411211610345200201170ustar00rootroot00000000000000> acctcgaatctac > acctcgaatctacg genometools-1.5.1/testdata/Splintoptions000066400000000000000000000013731211610345200204710ustar00rootroot00000000000000-aliasunique +boolint -boolops -branchstate -bufferoverflowhigh -castfcnptr +charint -checks -compdef -compdestroy -compmempass -declundef -dependenttrans +enumindex -evalorder -exitarg -exportheader -exportlocal -fcnuse -globstate -immediatetrans -incompletetype -infloops -infloopsuncon -kepttrans -looploopbreak -maintype +matchanyintegral -mayaliasunique -mustfreefresh -mustmod -mustfreeonly -namechecks -noeffect -nullassign -nullpass -nullret -nullstate -observertrans -onlytrans -onlyunqglobaltrans -predboolint -predboolothers -predboolptr -readonlytrans -realcompare -redecl -redef -retalias -sefuncon -shiftimplementation -shiftnegative -statictrans -temptrans -type -unqualifiedtrans -unrecog -usedef -usereleased +voidabstract -warnposix -whileempty genometools-1.5.1/testdata/TTT-small.embl000066400000000000000000000001621211610345200202760ustar00rootroot00000000000000ID TTT-small XX DE XX SQ NTTTTNC 7 // genometools-1.5.1/testdata/TTT-small.fna000066400000000000000000000000121211610345200201150ustar00rootroot00000000000000> NTTTTNC genometools-1.5.1/testdata/TTT-small.gbk000066400000000000000000000001161211610345200201210ustar00rootroot00000000000000LOCUS TTT-small DEFINITION TTT-small ORIGIN 7 NTTTTNC // genometools-1.5.1/testdata/TTTN.fna000066400000000000000000000000161211610345200171310ustar00rootroot00000000000000> TTT > NTTTN genometools-1.5.1/testdata/U89959_cds.fas000066400000000000000000000237141211610345200200440ustar00rootroot00000000000000>CDS_1 (joined) (translated) DTGLRDLGQLEQDLVFGDAGAKDVINFLRTNQDTNPENKLRLLMIYATVYPEKFEGDKGVKLMQLARLSPVDMKVISNMQLIAGSPENKAKSGSFSLKFD >CDS_2 (joined) (translated) AKGLSCHQDIAGDGCFSLGMIARFEPALREKGSWMYPRLFWETGVVGQVLYLEAHAMGISATGIGCYFDDPVHEVLGINDSSFQSLYHFTVGGPVVDKRIMTLPAYPGPTTTVA* >CDS_3 (joined) (translated) IAVELFPKSQREITGNFGYPLTGPSISEPSRYKDPLVSGFEMSNPRQRKGEAMMNPTISWRFASSTSLLSIPRTPKSAFIFAMTFSSSSSSSSSSSSVENPNKDDSSSSLELVLKYHNQTKHSLNGYARGPRGLDWANQPNPFRRYLSAPLLPLQHPNHDIDDDSDSPLYSTLFDSLPPPKPISLPTISHLFYHSL >CDS_4 (joined) (translated) AKSPLLCCVTFLLQLISHILHHIQYRVAAHVPVIHQRPSAALQLLFLQLQFCLQTVQNRRSSWMNSPEHVIELHRLIASLSHQLLAELFYVLLYLLREVSSKLEVYAFLSQPPLDHVLCPRQELLNRIVQLHERSFTLSRVSSDDHSS >CDS_5 (joined) (translated) AVLVFHDMLSRGLKPNAVTYNTLIKGLSEAHRYDEIKDILIGGNDAFTTFAPDACTFNILIKAHCDAGHLDAAMKVFQEMLNMKLHPDSASYSVLIRTLCMRNEFDRAETLFNELFEKEVLLGKDECKPLAAAYNPMFEYLCANGKTKQAEKVFRQLMKRGVQDPPSYKTLI >CDS_6 (joined) (translated) HISRQLSSAMVSSVPKLHALFVSKSQPVLRAAKVTNEERSTKSKLARSLARAVNSNPWSDELESSLSSLHPSQTISRTTVLQTLRLIKVPADGLRFFDWVSNKGFSHKEQSFFLMLEFLGRARNLNVARNFLFSIERRSNGCVKLQDRYF >CDS_7 (joined) (translated) FYKQKKERERDLPRDCNMLDYEWDNPSSIVLSGDERNPDSDPTRSSFSFFDPISHYNNDHRHITISPPLLSSFSNQQQQHHLTLYGQTNSNNQFLHHHHHHHSLYGSTTTTTPYGASDPIYHPHSSAPPASLFSYDQTGPGSGSGSSYNFLIPKTEVDFTSNRIGLNLGGRTYFSAADDDFVSRLYRRSRPGESGMANSLSTPRCQAEGCNADL >CDS_8 (joined) (translated) LTITAAAVNVTNQPPPPKTPAPARLLQSHRTIRVLKRHRHRRPTRRLRYHWSASGKGSSKRQRLHPRQRLRLQIQCFSPADSYKLYSYDILCLK* >CDS_9 (joined) (translated) TVALGSCIPTELPTPRSWNVDILVDTIKQLQAPGISWRKVIENLDHDGFDIPNMESFSFFMRIYKAACKEPFPLDAVCGSVWKNMDGQLSFLKHAISAPPEVFTFMHSPRKLVYIDNMHSQEQQLGLSNHAWLSLDLLDVLCQLAERGHAVLVSSLLQYPLTQCPRTLLLGMT >CDS_10 (joined) (translated) VIEQALSRISSGNLESDASVSHPGPSQSFPGNGELSGSGIGQPALQLSSPLQLQQKNEVPSVPSNEAKPLLPSLSTTSVDVSVNPKNPGIPTSSSTSTGFVRPARATTSTRFGSALNIETLVAAAERRENAIEAPPSDVQDKVSFIINNISTTNIESKGKEFAEI >CDS_11 (joined) (translated) PQQYYPWFAQYMVMKRASIEPNFHDLYLKFLDKVDSKLLFKEILQNTYENCKVLLGSELIKSSSEERSLLKNLGSWLGRLTIGRNYVLRAREIDPKSLIVEAYEKGLMIAVIPFTSKVLEPCQNSIAYQPPNPWTMAILGLLAEIYSMPNLKMNLKFD >CDS_12 (joined) (translated) TNTLMDEEKVATLGLPEQLPSPQGLFQSTPSPLFSISQLSAALPNIGNHVVINQKLSAFGMHFPFQRVVPLAMDRAIKEIVSGIVQRSVCIACQTTKELVLKDYALEPDESRIYNAAHLMVASLAGSLAHVTCKEPLRTSISGHLRNSLQGLNISNDALEQIVQLVTNDNLDLGCAAIEQAATEKAIQTIDADIAQQLLLRRKHRDGAGSSFFDPNILSQNSVSFIPESLRPKPGHLSLSQQRVYEDFVQHPWQK >CDS_13 (joined) (translated) SSSSGDVALGSGYGPVSGKVASEFLSNAGNARMDMVSRPSDISVDGFESSPVSLLSSQVDPAGDSSSLQFTKSLPTSELNLAESSDAATKETGTSLQTLTSAATMERLGAS >CDS_14 (joined) (translated) RVVKELTSWVIYSEEDRKLNKDITIGLIQRELLSLAEYNVHMAKHLDGGRNKTATDFAISLLQSLVTEESSVISELHSLVDALAKLASKSGSSESLQQLIDIIRNPVTNTAGLSDSSTGNDNNDRQKDEKVACNTTNTEESTSLDYVESDPAGFQNRVSTLFKNWYQICELPGANETACSQYVLHL >CDS_15 (joined) (translated) GWPYVQRLLVDLLQFLEPFLRNAELGGPVHFLYKGTLRVLLVLLHDFPEFLCDYHFTFCDVIPSSCIQMRNIILSSFPRNMRLPDPSTPNLKIDLLPEIVEAPCILSEVDAALKAKQMKNDVDEYLTSRQQNSTFLSELKTKLLLSSSEASSAGTRYSVPLINSLVLYTGMQAIQQLQAGETQAQNVVALQMFKYLSMELDTEGRYLFLNAIANQLRYPNNHTHYFSFIMLYLFFESDQEIIQEQITRVLLERLIVNRPHPWGLLITFIELIKNPRYSFWKQAFIRCAPEIEKLFESVARSCGGLKPVDEGMVSGGWVSDNSH* >CDS_16 (joined) (translated) ELSETQPPETIPSSTGFRPPQDLATDSNSFSISGAHLMKACFQKLYLGFFISSMNVIRSPHGCGLFTISRSNSTLVICSCMISC >CDS_17 (joined) (translated) TTGNRFVWKMDIEQKQAEIIDQLVKRASTCKSEALGPLIIEATSHPSLFAFSEILALPNVAQLEGTTDSVYLDLLRLFAHGTWGDYKCNATRLPHLSPDQILKLKQLTVLTLAESNKVLPYDTLMVELDVSNVRELEDFLINECMYAGIVRGKLDQLKRCFEVPFAAGRDLRPGQLGNMLHTLSNWLNTSENLLISIQDKIKWADNMSEMDKKHRKEAEEGVEEVKKSLSMKGDVDIRGNKEMFGEPSGVMDYEEDGIRPKRRRHPVTR* >CDS_18 (joined) (translated) EEPVKQPHQDPNGKEHSDHVTTSSDCYKTKLVVRHKNLKEILDAVQDYFDKAASAGDQVSAMLEIGRAELDRSFSKLRKTVYHSSSVFSNLSASWTSKPPLAVKYKLDASTLNDEQGGLKSLCSTLDRLLAWEKKLYEDV >CDS_19 (joined) (translated) QQLCKVTSDNTLHTYMHISIRILHKQRVGCSKFTVCCGGGGVPNGGTEPSRRHGLVASSANDPQPSSSLPSGNAFSSLTTPKSPRLHCTRRTSHDTPLAPLLLFSVAPLS >CDS_20 (joined) (translated) EKRERDLWLCIARCSSSHRSKTMNPEYDYLFKLLLIGDSGVGKSCLLLRFSDDSYVESYISTIGVDFKIRTVEQDGKTIKLQIWDTAGQERFRTITSSYYRGAHGIIIVYDVTDEESFNNVKQWLSEIDRYASDNVNKLLVGNKSDLTENRAIPYETAKAFADEIGIPFMETSAKDATNVEQAFMAMSASIKERMASQPAGNNARPPTVQIRGQPVAQKNGCCST* >CDS_21 (joined) (translated) SRSRERKKKREGMAAEEATEFYLRYYVGHKGKFGHEFLEFEFREDGKLRYANNSNYKNDTIIRKEVFLTPAVLKECKRIVSESEILKEDDNNWPEPDRVGKQELEIVLGNEHISFATSKIGSLVDCQSSNDPEGLRIFYYLVQDLKCLVFSLISLHFKIKPI* >CDS_22 (joined) (translated) FRFPDTETMPTDSKMAKFLQSYGYDLILGSVAAIYVVMAPYTKVEESFNVQSMHDILYHRHHLDSYDHLEFPGVVPRTFIGAFIVSVFASPVVSIISCLGFPKVYSLVAARLVLGCIILSTLRFFRIQIKKKFGNQVETFFVLFTSLQFHFLFYCTRPLPNILALGLVNLAYGNWLKGNFYPALSFLIFATVIFRCDTMLLLGPIGLELLLTKSISF >CDS_23 (joined) (translated) PANVAGEEWVHIDTFGAMNGISRFCEDDFPWRYSKEEEIVVEELRNRNFTYLVNEHSSVDGYKCLFYEEGFERLELRRGFPPIVLVKKAKVYLHREMKKEDPFHKKWPGC* >CDS_24 (joined) (translated) RREMLLQAAVQNRNVPLASSASYSRLLRCRSPVVSVAALSKKTAAIVCSISQVYGYGTVDYERRPIVQWNAIYKKISLMEKPELGAASVLNQWEKAGRKLTKWELCRVVKELRKYKRANQALEVYDWMNNRGERFRLSASDAAIQLDLIGKVRGIPDAEEFFLQLPENFKDRRVYGSLLNAYVRAKSREKAEALLNTMRDKGYALHPLPFNVMMTLYMNLREYDKVDAMVFEMKQKDIRLDIYSYN >CDS_25 (joined) (translated) LLSLYGSLGNKKELYRVWHVYKSVVPSIPNLGYHALVSSLVRMGDIEGAEKVYEEWLPVKSSYDPRIPNLLMNAYVKNDQLETAEGLFDHMVEMGGKP >CDS_26 (joined) (translated) GKCRRKARRRRTLARLGYLILHVIFSTLLLSNVLKNLDQTRVNARIILMCTRNARRKRGKLDWNAIRHGRCSRECRSSNTNDVSEHHLASSILLFHLQWLCLYDLSK* >CDS_27 (joined) (translated) CIVVFLTRFGNPIRLHLIPSLPRIIMYPPPPSSIYAPPMLVNCSGCRTPLQLPSGARSIRCALCQAVTHIADPRTAPPPQPSSAPSPPPQIHAPPGQLPHPHGRKRAVICGISYRFSRHELKGCINDAKCMRHLLINKFKFSPDSILMLT >CDS_28 (joined) (translated) DLSSRSPDCLNNSKTASLLVTSDSSSQSLKKPDSINTLGLQLLDPSAEKAFLRQVKASEIHLFLV* >CDS_29 (joined) (translated) LHSIIDACHSGTVLDLPFLCRMNRAGQYVWEDHRPRSGLWKGTAGGEAISISGCDDDQTSADTSALSKITSTGAMTFCFIQAIERSAQGTTYGSLLNSMRTTIRNTGNDGGGSGGVVTTVLSMLLTGGSAIGGLRQEPQLTACQTFDVYAKPFTL* >CDS_30 (joined) (translated) SGTSQHLHQAHLLSKTFSFSVFCFSRFFENPPARAITLGIQRIKHDMKNEISILELILLFLSLSSVLASSKLHGNSAHEMVSILNQNRTARKLGKLNESPGLGCMALQYVELCEGNCNVNNTLSCEHPEDDFTQVFAPNCGVELPTFGTITGHILGCSSKYAAPEVAFSDILFRDSSALSVLRNRSHTEVGVGMARLHKGTFFWCLLFSD >CDS_31 (joined) (translated) LKYLWMASRPGALTEWPWSPLGSFKYLLVAPLVMASMHSYVTAVDEEKDLSRLMIVVLMLWRIVHSQIWISVSRQRTAKGTNKIVDKPIEFEQVDRERTWDDQVIFNTLLMYLANIKLPGASHLPPWRLDGAILMALLHAGPVEFLYYWFHRALHHHFLYSRYHSHHHSSIVTEPITSVVHPFAEH >CDS_32 (joined) (translated) LNGSGEMYVQKYPKLKIRLVDGSSMAATVVINNIPKEATEIVFRGNLTKVASAVVFALCQKGVKVVVLREEEHSKLIKSGVDKNLVLSTSNSYYSPKVWLVGDGIENEEQMKAKEGTLFVPFSHFPPNKLRKDCFYQSTPAMRVPKSAQNIDSCENWLGRRVMSAWKIGGIVHALEGWEEHDCGNTCNVLRLHAIWEAALRHDFQPLPPSPL* >CDS_33 (joined) (translated) RHKHITFDGIMATKPGVLTDWPWTPLGSFKYIVIAPWAVHSTYRFVTDDPEKRDLGYFLVFPFLLFRILHNQVWISLSRYYTSSGKRRIVDKGIDFNQVDRETNWDDQILFNGVLFYIGINLLPEAKQLPWWRTDGVLMAALIHTGPVEFLYYWLHKALHHHFLYSRYHSHHHSSIVTEPITCNYCFLP* >CDS_34 (joined) (translated) DGIMATKPGVLTDWPWTPLGSFKYIVIAPWAVHSTYRFVTDDPEKRDLGYFLVFPFLLFRILHNQVWISLSRYYTSSGKRRIVDKGIDFNQVDRETNWDDQILFNGVLFYIGINLLPEAKQLPWWRTDGVLMAALIHTGPVEFLYYCGDT >CDS_35 (joined) (translated) EKAILEADKKGVKVLSLGLMNQGEELNRNGEVYIHNHPDMKVRLVDGSRLAAAVVINSVPKATTSVVMTGNLTKVAYTIASALCQRGVQVSTLRLDEYEKIRSCVPQECRDHLVYLTSEAL >CDS_36 (joined) (translated) KDGKCMSVAHPFFSRIWTKYGKPVSATASSLSSFHIIKTPTLEDFRRMRATRSVLLFLMIQLFHAQMNYETYIKRTHIFMHIKLLVIMVLIESN* >CDS_37 (joined) (translated) EGTTREEQEKATKGTLFIPFSQFPLKQLRRDCIYHTTPALIVPKSLVNVHSCENWLPRKAMSATRVAGILHALEGWEMHECGTSLLLSDLDQVWEACLSHGFQPLLLPHH* >CDS_38 (joined) (translated) FICAWKSWIIRKRSTERVALILLKSSKVGVLMMWKEERLEAVAETGFPYLVQIREKKGCATLMHFPSF* >CDS_39 (joined) (translated) FICAWKSWIIRKRSTERVALILLKSSKVGVLMMWKEERLEAVAETGFPYLVQIREKKGCATLMHFPSF* >CDS_40 (joined) (translated) FICAWKSWIIRKRSTERVALILLKSSKVGVLMMWKEERLEAVAETGFPYLVQIREKKGCATLMHFPSF* >CDS_41 (joined) (translated) INLVSLTQEVSQALITSIDTAEKKKNPYDDAQGTEIGEHKLGQETIKKKRAGFFHRMIQKFVKKIHLCSSISRT* >CDS_42 (joined) (translated) KMANPVGFRFRPTDGEIVDIYLRPKNLESNTSHVDEVISTVDICSFDPWDLPSHSRMKTRDQVWYFFGRKENKYGKGDRQIRKTKSGFWKKTGVTMDIMRKTGDREKIGEKRVLVFKNHGGSKSDWAMHEYHATFSSPNQMMTYTVCKVEFKGEETEISSSSTG >CDS_43 (joined) (translated) VSYSLLIFFCGMFITVDGFNKTGIPTALWDLMEPYAKIDQAKGIAVLAVVILVLSNVASNVPTVLLLGARVAASAMGREEEKKAWLLLAWVSTVAGNLTLLGSAANLIVCEQARRAVSHGYTLTFTKHFKFGLPSTLIVTAIGLFLIK* >CDS_44 (joined) (translated) CLALQKVNLTGIPHGLSFEETKELWVRADLDGNGVFDYEELKKIWNMTMVNQPGNCKESVMESKKEEGEDEAIGLKVNKAILFPQEAEKGLWPENYNISDHACLTVQFSPVKMLCS* >CDS_45 (joined) (translated) LREFERKTQMQSHQNRSRLSLILRSRFIPSFSSPLSLFVVLAAVPLPIYFSGLLSGRNNKPLSVMRLNSNLASSMVESNISCTTFNILAPIYKRVDQKNHSTRESDFRTLWLARNQRILDLLLHQRSSVICLQEVWVGNEELVNMYHHQLSSSGYTIYQLARTNSRGDGLLTAIHKDHFKVVNYRELLFNDFGDRVAQLLHVKTVIPFPLNGKQDVQQEVIIVNTHLLFPHDSSLSIVRLHQVYKILEYLEAYQKENKLNHMPIILCGDWNGSKRGHVYKFLRSQGFISSYDDAHQYTDSDAHRWVSHRNHRGNICGVDFIWLCNP >CDS_46 (joined) (translated) RNTSRELLPKTSNAPHTTGLGVMGSLVREWVGFQQFPAATQEKLIEFFGKLKQKDMNSMTVLVLGKGGVGKSSTVNSLIGEQVVRVSPFQAEGLRPVMVSRTMGGFTINIIDTPGLVEAGYVNHQALELIKGFLVNRTIDVLLYVDRLDVYRVDELDKQVVIAITQTFGKEIWCKTLLVLTHAQFSPPDELSYETFSSKRSDSLLKTIRAGSKMRKQEFEDSAIAVVYAENSGRCSKNDKDEKALPNGEAWIPNLVKAITDVATNQRKAIHVDKKMVDGSYSDDKGKKLIPLIIGAQYLIVKMIQGAIRNDIKTSGKPL* >CDS_47 (joined) (translated) HCVDSGILCGNEKFVQGRFIMADSCCIRLHLLASVFLLLFSSFNLQGIAAENLSKQKLTSLILQNEIVKEVNENPNAGWKAAFNDRFANATVAEFKRLLGVIQTPKTAYLGVPIVRHDLSLKLPKEFDARTAWSHCTSIRRILGRGHCGSCWAFGAVESLSDRFCIKYNLNVSLSANDVIACCGLLCGFGCNGGFPMGAWLYFKYHGVVTQECDPYFDNTGCSHPGCEPTYPTPKCERKCVSRNQLWGESKHYGVGAYRINPDPQDIMAEVYKNGPVEVAFTVYEDFAHYKSGVYKYITGTKIGGHAVKLIGWGTSDDGEDYWLLANQWNRSWGDDGYFKIRRGTNECGIEQSVVAGLPSEKNVFKGITTSDDLLVSSV* >CDS_48 (joined) (translated) VGYILNNVLLWSTITLWFWFLLGHCGSCWAFGAVESLSDRFCIKYNLNVSLSANDVIACCGLLCGFGCNGGFPMGAWLYFKYHGVVTQECDPYFDNTGCSHPGCEPTYPTPKCERKCVSRNQLWGESKHYGVGAYRINPDPQDIMAEVYKNGPVEVAFTVYEDFAHYKSGVYKYITGTKIGGHAVKLIGWGTSDDGEDYWLLANQWNRSWGDDGYFKIRRGTNECGIEQSVVAGLPSEKNVFKGITTSDDLLVSSV* >CDS_49 (joined) (translated) LLASVFLLLSICWTLELQGIAAENLSKQKLTSLILQNEIVKEVNENPNAGWKAAFNDRFANATVAEFKRLLGVIQTPKTAYLGVPIVRHDLSLKLPKEFDARTAWSHCTSIRRILGRGHCGSCWAFGAVESLSDRFCIKYNLNVSLSANDVIACCGLLCGFGCNGGFPMGAWLYFKYHGVVTQECDPYFDNTGCSHPGCEPTYPTPKCERKCVSRNQLWGESKHYGVGAYRINPDPQDIMAEVYKNGPVEVAFTVYEDFAHYKSGVYKYITGTKIGGHAVKLIGWGTSDDGEDYWLLANQWNRSWGDDGYFKIRRGTNECGIEQSVVAGLPSEKNVFKGITTSDDLLVSSV* >CDS_50 (joined) (translated) CDPYFDNTGCSHPGCEPTYPTPKCERKCVSRNQLWGESKHYGVGAYRINPDPQDIMAEVYKNGPVEVAFTVYEDFAHYKSGVYKYITGTKIGGHAVKLIGWGTSDDGEDYWLLANQWNRSWGDDGYFKIRRGTNECGIEQSVVAGLPSEKNVFKGITTSDDLLVSSV* >CDS_51 (joined) (translated) GIEKKIIRRERSMADNCIRLLHSASVFFCLGLLISSFNLLQGIAAENLSKQKLTSWILQNEIVKEVNENPNAGWKASFNDRFANATVAEFKRLLGVKPTPKTEFLGVPIVSHDISLKL genometools-1.5.1/testdata/U89959_cds.gff3000066400000000000000000000773671211610345200201350ustar00rootroot00000000000000##gff-version 3 ##sequence-region 1877523 1 106973 1877523 gt csa gene 1074 1540 . + . ID=gene1 1877523 gt csa mRNA 1074 1540 . + . ID=mRNA1;Parent=gene1;Target=8721428 1 303 + 1877523 gt csa exon 1074 1171 1 + . Parent=mRNA1 1877523 gt cds CDS 1076 1171 . + 0 ID=CDS1;Parent=mRNA1 1877523 gt csa exon 1259 1354 1 + . Parent=mRNA1 1877523 gt cds CDS 1259 1354 . + 0 ID=CDS1;Parent=mRNA1 1877523 gt cds CDS 1432 1539 . + 0 ID=CDS1;Parent=mRNA1 1877523 gt csa exon 1432 1540 1 + . Parent=mRNA1 ### 1877523 gt csa gene 2779 3506 . + . ID=gene2 1877523 gt csa mRNA 2779 3506 . + . ID=mRNA2;Parent=gene2;Target=8732738 1 337 +,19843099 1 426 + 1877523 gt csa exon 2779 2801 0.696 + . Parent=mRNA2 1877523 gt csa exon 3043 3506 0.974 + . Parent=mRNA2 1877523 gt csa mRNA 3025 3506 . + . ID=mRNA3;Parent=gene2;Target=19837778 1 327 +,19843099 1 426 + 1877523 gt csa exon 3025 3506 0.974 + . Parent=mRNA3 ### 1877523 gt csa gene 3041 3651 . - . ID=gene3 1877523 gt csa mRNA 3041 3651 . - . ID=mRNA4;Parent=gene3;Target=8732878 1 536 - 1877523 gt csa exon 3041 3550 0.996 - . Parent=mRNA4 1877523 gt cds CDS 3230 3550 . - 0 ID=CDS2;Parent=mRNA4 1877523 gt cds CDS 3626 3649 . - 0 ID=CDS2;Parent=mRNA4 1877523 gt csa exon 3626 3651 1 - . Parent=mRNA4 ### 1877523 gt csa gene 4768 5357 . - . ID=gene4 1877523 gt csa mRNA 4768 5357 . - . ID=mRNA5;Parent=gene4;Target=19871046 1 591 + 1877523 gt csa exon 4768 5357 0.987 - . Parent=mRNA5 1877523 gt cds CDS 4769 5356 . - 0 ID=CDS3;Parent=mRNA5 ### 1877523 gt csa gene 9505 10058 . + . ID=gene5 1877523 gt csa mRNA 9505 10058 . + . ID=mRNA6;Parent=gene5;Target=8682455 1 554 + 1877523 gt csa exon 9505 10058 1 + . Parent=mRNA6 1877523 gt cds CDS 9615 10058 . + 0 ID=CDS4;Parent=mRNA6 ### 1877523 gt csa gene 12024 12542 . - . ID=gene6 1877523 gt csa mRNA 12024 12542 . - . ID=mRNA7;Parent=gene6;Target=8688760 1 519 + 1877523 gt csa exon 12024 12542 1 - . Parent=mRNA7 1877523 gt cds CDS 12026 12541 . - 0 ID=CDS5;Parent=mRNA7 ### 1877523 gt csa gene 13014 13465 . - . ID=gene7 1877523 gt csa mRNA 13014 13465 . - . ID=mRNA8;Parent=gene7;Target=2748705 1 459 + 1877523 gt csa exon 13014 13465 0.881 - . Parent=mRNA8 1877523 gt cds CDS 13016 13465 . - 0 ID=CDS6;Parent=mRNA8 ### 1877523 gt csa gene 15955 16603 . + . ID=gene8 1877523 gt csa mRNA 15955 16603 . + . ID=mRNA9;Parent=gene8;Target=19878194 1 649 + 1877523 gt csa exon 15955 16603 0.997 + . Parent=mRNA9 1877523 gt cds CDS 15962 16603 . + 0 ID=CDS7;Parent=mRNA9 ### 1877523 gt csa gene 17165 17684 . + . ID=gene9 1877523 gt csa mRNA 17165 17684 . + . ID=mRNA10;Parent=gene9;Target=19798999 1 396 - 1877523 gt csa exon 17165 17247 0.97 + . Parent=mRNA10 1877523 gt cds CDS 17167 17247 . + 0 ID=CDS8;Parent=mRNA10 1877523 gt cds CDS 17374 17577 . + 0 ID=CDS8;Parent=mRNA10 1877523 gt csa exon 17374 17684 0.989 + . Parent=mRNA10 ### 1877523 gt csa gene 25221 26100 . + . ID=gene10 1877523 gt csa mRNA 25221 26100 . + . ID=mRNA11;Parent=gene10;Target=8690053 1 521 + 1877523 gt csa exon 25221 25310 1 + . Parent=mRNA11 1877523 gt cds CDS 25221 25310 . + 0 ID=CDS9;Parent=mRNA11 1877523 gt csa exon 25510 25626 1 + . Parent=mRNA11 1877523 gt cds CDS 25510 25626 . + 0 ID=CDS9;Parent=mRNA11 1877523 gt csa exon 25713 25841 1 + . Parent=mRNA11 1877523 gt cds CDS 25713 25841 . + 0 ID=CDS9;Parent=mRNA11 1877523 gt cds CDS 25916 26098 . + 0 ID=CDS9;Parent=mRNA11 1877523 gt csa exon 25916 26100 1 + . Parent=mRNA11 ### 1877523 gt csa gene 27900 29817 . + . ID=gene11 1877523 gt csa mRNA 27900 28989 . + . ID=mRNA12;Parent=gene11;Target=8726341 1 499 + 1877523 gt csa exon 27900 28003 1 + . Parent=mRNA12 1877523 gt cds CDS 27902 28003 . + 0 ID=CDS10;Parent=mRNA12 1877523 gt csa exon 28269 28424 1 + . Parent=mRNA12 1877523 gt cds CDS 28269 28424 . + 0 ID=CDS10;Parent=mRNA12 1877523 gt csa exon 28507 28579 1 + . Parent=mRNA12 1877523 gt cds CDS 28507 28579 . + 0 ID=CDS10;Parent=mRNA12 1877523 gt csa exon 28686 28753 1 + . Parent=mRNA12 1877523 gt cds CDS 28686 28753 . + 2 ID=CDS10;Parent=mRNA12 1877523 gt cds CDS 28892 28987 . + 0 ID=CDS10;Parent=mRNA12 1877523 gt csa exon 28892 28989 1 + . Parent=mRNA12 1877523 gt csa mRNA 28990 29817 . + . ID=mRNA13;Parent=gene11;Target=8726286 1 477 + 1877523 gt csa exon 28990 29037 1 + . Parent=mRNA13 1877523 gt cds CDS 28991 29037 . + 0 ID=CDS11;Parent=mRNA13 1877523 gt csa exon 29134 29242 1 + . Parent=mRNA13 1877523 gt cds CDS 29134 29242 . + 1 ID=CDS11;Parent=mRNA13 1877523 gt csa exon 29331 29477 1 + . Parent=mRNA13 1877523 gt cds CDS 29331 29477 . + 0 ID=CDS11;Parent=mRNA13 1877523 gt csa exon 29571 29618 1 + . Parent=mRNA13 1877523 gt cds CDS 29571 29618 . + 0 ID=CDS11;Parent=mRNA13 1877523 gt cds CDS 29693 29815 . + 0 ID=CDS11;Parent=mRNA13 1877523 gt csa exon 29693 29817 1 + . Parent=mRNA13 ### 1877523 gt csa gene 30278 32362 . + . ID=gene12 1877523 gt csa mRNA 30278 31820 . + . ID=mRNA14;Parent=gene12;Target=8690080 1 524 +,8689616 1 333 + 1877523 gt csa exon 30278 30391 1 + . Parent=mRNA14 1877523 gt cds CDS 30278 30391 . + 0 ID=CDS12;Parent=mRNA14 1877523 gt csa exon 30477 30562 1 + . Parent=mRNA14 1877523 gt cds CDS 30477 30562 . + 0 ID=CDS12;Parent=mRNA14 1877523 gt csa exon 30658 30763 1 + . Parent=mRNA14 1877523 gt cds CDS 30658 30763 . + 1 ID=CDS12;Parent=mRNA14 1877523 gt csa exon 30990 31085 1 + . Parent=mRNA14 1877523 gt cds CDS 30990 31085 . + 0 ID=CDS12;Parent=mRNA14 1877523 gt csa exon 31234 31386 1 + . Parent=mRNA14 1877523 gt cds CDS 31234 31386 . + 0 ID=CDS12;Parent=mRNA14 1877523 gt csa exon 31538 31720 1 + . Parent=mRNA14 1877523 gt cds CDS 31538 31720 . + 0 ID=CDS12;Parent=mRNA14 1877523 gt cds CDS 31793 31819 . + 0 ID=CDS12;Parent=mRNA14 1877523 gt csa exon 31793 31820 1 + . Parent=mRNA14 1877523 gt csa mRNA 31855 32362 . + . ID=mRNA15;Parent=gene12;Target=8689215 1 334 +,9784594 1 269 + 1877523 gt csa exon 31855 32022 1 + . Parent=mRNA15 1877523 gt cds CDS 31856 32022 . + 0 ID=CDS13;Parent=mRNA15 1877523 gt csa exon 32118 32220 1 + . Parent=mRNA15 1877523 gt cds CDS 32118 32220 . + 1 ID=CDS13;Parent=mRNA15 1877523 gt csa exon 32300 32362 1 + . Parent=mRNA15 1877523 gt cds CDS 32300 32362 . + 0 ID=CDS13;Parent=mRNA15 ### 1877523 gt csa gene 32928 34560 . + . ID=gene13 1877523 gt csa mRNA 32928 34560 . + . ID=mRNA16;Parent=gene13;Target=19875482 1 227 +,9782568 1 427 + 1877523 gt csa exon 32928 32955 1 + . Parent=mRNA16 1877523 gt cds CDS 32929 32955 . + 0 ID=CDS14;Parent=mRNA16 1877523 gt csa exon 33191 33317 0.98 + . Parent=mRNA16 1877523 gt cds CDS 33191 33317 . + 0 ID=CDS14;Parent=mRNA16 1877523 gt csa exon 33418 33518 1 + . Parent=mRNA16 1877523 gt cds CDS 33418 33518 . + 2 ID=CDS14;Parent=mRNA16 1877523 gt csa exon 33783 33917 1 + . Parent=mRNA16 1877523 gt cds CDS 33783 33917 . + 0 ID=CDS14;Parent=mRNA16 1877523 gt csa exon 33996 34076 1 + . Parent=mRNA16 1877523 gt cds CDS 33996 34076 . + 0 ID=CDS14;Parent=mRNA16 1877523 gt cds CDS 34472 34558 . + 0 ID=CDS14;Parent=mRNA16 1877523 gt csa exon 34472 34560 1 + . Parent=mRNA16 ### 1877523 gt csa gene 35628 37208 . + . ID=gene14 1877523 gt csa mRNA 35628 37208 . + . ID=mRNA17;Parent=gene14;Target=2759121 1 451 +,5841805 1 479 +,8683519 1 604 -,8682814 1 522 -,8690927 1 566 -,5845530 1 547 -,8717375 1 521 -,2048630 53 438 + 1877523 gt csa exon 35628 35712 1 + . Parent=mRNA17 1877523 gt cds CDS 35629 35712 . + 0 ID=CDS15;Parent=mRNA17 1877523 gt csa exon 35820 36011 1 + . Parent=mRNA17 1877523 gt cds CDS 35820 36011 . + 0 ID=CDS15;Parent=mRNA17 1877523 gt csa exon 36101 36205 1 + . Parent=mRNA17 1877523 gt cds CDS 36101 36205 . + 0 ID=CDS15;Parent=mRNA17 1877523 gt csa exon 36297 36431 1 + . Parent=mRNA17 1877523 gt cds CDS 36297 36431 . + 0 ID=CDS15;Parent=mRNA17 1877523 gt csa exon 36521 36721 1 + . Parent=mRNA17 1877523 gt cds CDS 36521 36721 . + 0 ID=CDS15;Parent=mRNA17 1877523 gt cds CDS 36816 37070 . + 0 ID=CDS15;Parent=mRNA17 1877523 gt csa exon 36816 37208 1 + . Parent=mRNA17 ### 1877523 gt csa gene 36812 37235 . - . ID=gene15 1877523 gt csa mRNA 36812 37235 . - . ID=mRNA18;Parent=gene15;Target=8735393 1 424 +,19741846 1 380 +,8738747 1 395 +,8679389 1 133 + 1877523 gt cds CDS 36812 37063 . - 0 ID=CDS16;Parent=mRNA18 1877523 gt csa exon 36812 37235 0.998 - . Parent=mRNA18 ### 1877523 gt csa gene 37669 40032 . - . ID=gene16 1877523 gt csa mRNA 37669 40032 . - . ID=mRNA19;Parent=gene16;Target=8738841 1 588 -,19831991 1 401 -,19840745 1 390 -,5843191 1 490 -,19869427 1 606 +,8722075 1 568 + 1877523 gt csa exon 37669 37891 1 - . Parent=mRNA19 1877523 gt cds CDS 37867 37891 . - 1 ID=CDS17;Parent=mRNA19 1877523 gt csa exon 37972 38060 1 - . Parent=mRNA19 1877523 gt cds CDS 37972 38060 . - 0 ID=CDS17;Parent=mRNA19 1877523 gt csa exon 38656 38794 1 - . Parent=mRNA19 1877523 gt cds CDS 38656 38794 . - 1 ID=CDS17;Parent=mRNA19 1877523 gt csa exon 38927 38997 1 - . Parent=mRNA19 1877523 gt cds CDS 38927 38997 . - 0 ID=CDS17;Parent=mRNA19 1877523 gt csa exon 39104 39148 1 - . Parent=mRNA19 1877523 gt cds CDS 39104 39148 . - 0 ID=CDS17;Parent=mRNA19 1877523 gt csa exon 39239 39328 1 - . Parent=mRNA19 1877523 gt cds CDS 39239 39328 . - 0 ID=CDS17;Parent=mRNA19 1877523 gt csa exon 39438 39526 1 - . Parent=mRNA19 1877523 gt cds CDS 39438 39526 . - 2 ID=CDS17;Parent=mRNA19 1877523 gt csa exon 39614 39689 1 - . Parent=mRNA19 1877523 gt cds CDS 39614 39689 . - 0 ID=CDS17;Parent=mRNA19 1877523 gt cds CDS 39798 39983 . - 0 ID=CDS17;Parent=mRNA19 1877523 gt csa exon 39798 40032 0.996 - . Parent=mRNA19 ### 1877523 gt csa gene 42783 43204 . - . ID=gene17 1877523 gt csa mRNA 42783 43204 . - . ID=mRNA20;Parent=gene17;Target=19858773 1 422 + 1877523 gt csa exon 42783 43204 1 - . Parent=mRNA20 ### 1877523 gt csa gene 44029 44540 . + . ID=gene18 1877523 gt csa mRNA 44029 44540 . + . ID=mRNA21;Parent=gene18;Target=402959 1 423 + 1877523 gt csa exon 44029 44263 0.991 + . Parent=mRNA21 1877523 gt cds CDS 44029 44263 . + 0 ID=CDS18;Parent=mRNA21 1877523 gt cds CDS 44354 44538 . + 2 ID=CDS18;Parent=mRNA21 1877523 gt csa exon 44354 44540 0.947 + . Parent=mRNA21 ### 1877523 gt csa gene 45542 45941 . - . ID=gene19 1877523 gt csa mRNA 45542 45941 . - . ID=mRNA22;Parent=gene19;Target=8682693 1 322 +,402964 1 388 + 1877523 gt csa exon 45542 45941 0.924 - . Parent=mRNA22 ### 1877523 gt csa gene 45843 45920 . + . ID=gene20 1877523 gt csa mRNA 45843 45920 . + . ID=mRNA23;Parent=gene20;Target=8720010 1 78 - 1877523 gt csa exon 45843 45920 0.949 + . Parent=mRNA23 ### 1877523 gt csa gene 49874 52242 . - . ID=gene21 1877523 gt csa mRNA 49874 50547 . - . ID=mRNA24;Parent=gene21;Target=19837290 1 412 + 1877523 gt csa exon 49874 50284 1 - . Parent=mRNA24 1877523 gt cds CDS 49876 50205 . - 0 ID=CDS19;Parent=mRNA24 1877523 gt csa exon 50547 50547 1 - . Parent=mRNA24 1877523 gt csa mRNA 50433 52242 . - . ID=mRNA25;Parent=gene21;Target=19807151 1 426 -,8731976 1 441 -,19805724 1 385 -,19866668 1 647 +,2747604 1 362 +,2596256 1 446 +,2596953 1 336 +,5839790 1 404 +,403229 1 350 +,9785390 1 263 + 1877523 gt csa exon 50433 50834 0.978 - . Parent=mRNA25 1877523 gt cds CDS 50738 50834 . - 1 ID=CDS20;Parent=mRNA25 1877523 gt csa exon 51113 51216 1 - . Parent=mRNA25 1877523 gt cds CDS 51113 51216 . - 0 ID=CDS20;Parent=mRNA25 1877523 gt csa exon 51319 51474 1 - . Parent=mRNA25 1877523 gt cds CDS 51319 51474 . - 0 ID=CDS20;Parent=mRNA25 1877523 gt csa exon 51552 51623 1 - . Parent=mRNA25 1877523 gt cds CDS 51552 51623 . - 0 ID=CDS20;Parent=mRNA25 1877523 gt csa exon 51711 51758 1 - . Parent=mRNA25 1877523 gt cds CDS 51711 51758 . - 0 ID=CDS20;Parent=mRNA25 1877523 gt csa exon 51849 51896 1 - . Parent=mRNA25 1877523 gt cds CDS 51849 51896 . - 0 ID=CDS20;Parent=mRNA25 1877523 gt csa exon 51983 52055 1 - . Parent=mRNA25 1877523 gt cds CDS 51983 52055 . - 1 ID=CDS20;Parent=mRNA25 1877523 gt csa exon 52163 52242 1 - . Parent=mRNA25 1877523 gt cds CDS 52163 52242 . - 0 ID=CDS20;Parent=mRNA25 ### 1877523 gt csa gene 50475 50702 . + . ID=gene22 1877523 gt csa mRNA 50475 50702 . + . ID=mRNA26;Parent=gene22;Target=8727457 1 228 + 1877523 gt csa exon 50475 50702 1 + . Parent=mRNA26 ### 1877523 gt csa gene 53602 54829 . - . ID=gene23 1877523 gt csa mRNA 53602 54829 . - . ID=mRNA27;Parent=gene23;Target=8697180 1 427 -,19803773 1 627 -,19840006 1 413 -,19823046 1 417 -,2393553 57 528 +,19843722 1 431 -,8696505 49 568 +,5839694 1 477 +,9778953 1 365 +,19865963 1 414 +,9784661 1 248 +,933584 1 311 +,8696543 49 319 + 1877523 gt csa exon 53602 53914 0.994 - . Parent=mRNA27 1877523 gt cds CDS 53855 53914 . - 0 ID=CDS21;Parent=mRNA27 1877523 gt csa exon 54159 54335 1 - . Parent=mRNA27 1877523 gt cds CDS 54159 54335 . - 0 ID=CDS21;Parent=mRNA27 1877523 gt cds CDS 54574 54825 . - 0 ID=CDS21;Parent=mRNA27 1877523 gt csa exon 54574 54829 0.992 - . Parent=mRNA27 ### 1877523 gt csa gene 53632 56652 . + . ID=gene24 1877523 gt csa mRNA 53632 53909 . + . ID=mRNA28;Parent=gene24;Target=8697126 1 279 + 1877523 gt csa exon 53632 53909 0.991 + . Parent=mRNA28 1877523 gt csa mRNA 54991 56652 . + . ID=mRNA29;Parent=gene24;Target=19874826 1 651 + 1877523 gt csa exon 54991 55057 0.985 + . Parent=mRNA29 1877523 gt cds CDS 54991 55057 . + 0 ID=CDS22;Parent=mRNA29 1877523 gt csa exon 55145 55230 1 + . Parent=mRNA29 1877523 gt cds CDS 55145 55230 . + 2 ID=CDS22;Parent=mRNA29 1877523 gt csa exon 55300 55341 1 + . Parent=mRNA29 1877523 gt cds CDS 55300 55341 . + 0 ID=CDS22;Parent=mRNA29 1877523 gt csa exon 55453 55498 1 + . Parent=mRNA29 1877523 gt cds CDS 55453 55498 . + 0 ID=CDS22;Parent=mRNA29 1877523 gt csa exon 55618 55704 1 + . Parent=mRNA29 1877523 gt cds CDS 55618 55704 . + 2 ID=CDS22;Parent=mRNA29 1877523 gt csa exon 55818 55873 1 + . Parent=mRNA29 1877523 gt cds CDS 55818 55873 . + 2 ID=CDS22;Parent=mRNA29 1877523 gt csa exon 56036 56153 1 + . Parent=mRNA29 1877523 gt cds CDS 56036 56153 . + 0 ID=CDS22;Parent=mRNA29 1877523 gt csa exon 56281 56339 1 + . Parent=mRNA29 1877523 gt cds CDS 56281 56339 . + 2 ID=CDS22;Parent=mRNA29 1877523 gt csa exon 56449 56520 1 + . Parent=mRNA29 1877523 gt cds CDS 56449 56520 . + 0 ID=CDS22;Parent=mRNA29 1877523 gt csa exon 56635 56652 1 + . Parent=mRNA29 1877523 gt cds CDS 56635 56652 . + 0 ID=CDS22;Parent=mRNA29 ### 1877523 gt csa gene 58115 62646 . + . ID=gene25 1877523 gt csa mRNA 58115 59001 . + . ID=mRNA30;Parent=gene25;Target=19741042 1 460 - 1877523 gt csa exon 58115 58209 0.958 + . Parent=mRNA30 1877523 gt cds CDS 58115 58209 . + 0 ID=CDS23;Parent=mRNA30 1877523 gt csa exon 58461 58526 1 + . Parent=mRNA30 1877523 gt cds CDS 58461 58526 . + 1 ID=CDS23;Parent=mRNA30 1877523 gt csa exon 58624 58717 1 + . Parent=mRNA30 1877523 gt cds CDS 58624 58717 . + 1 ID=CDS23;Parent=mRNA30 1877523 gt cds CDS 58796 58873 . + 0 ID=CDS23;Parent=mRNA30 1877523 gt csa exon 58796 59001 0.983 + . Parent=mRNA30 1877523 gt csa mRNA 59010 59976 . + . ID=mRNA31;Parent=gene25;Target=8715845 1 475 +,19864079 1 653 +,9787190 1 255 +,397215 1 333 + 1877523 gt csa exon 59010 59526 0.989 + . Parent=mRNA31 1877523 gt cds CDS 59158 59526 . + 0 ID=CDS24;Parent=mRNA31 1877523 gt cds CDS 59607 59975 . + 0 ID=CDS24;Parent=mRNA31 1877523 gt csa exon 59607 59976 0.991 + . Parent=mRNA31 1877523 gt csa mRNA 60190 60487 . + . ID=mRNA32;Parent=gene25;Target=398270 1 298 + 1877523 gt csa exon 60190 60487 0.987 + . Parent=mRNA32 1877523 gt cds CDS 60192 60485 . + 0 ID=CDS25;Parent=mRNA32 1877523 gt csa mRNA 61186 61974 . + . ID=mRNA33;Parent=gene25;Target=2722481 1 371 +,19837990 1 398 - 1877523 gt csa exon 61186 61281 0.99 + . Parent=mRNA33 1877523 gt cds CDS 61186 61281 . + 0 ID=CDS26;Parent=mRNA33 1877523 gt csa exon 61565 61641 1 + . Parent=mRNA33 1877523 gt cds CDS 61565 61641 . + 0 ID=CDS26;Parent=mRNA33 1877523 gt cds CDS 61724 61874 . + 1 ID=CDS26;Parent=mRNA33 1877523 gt csa exon 61724 61974 1 + . Parent=mRNA33 1877523 gt csa mRNA 62196 62646 . + . ID=mRNA34;Parent=gene25;Target=2747645 1 448 + 1877523 gt cds CDS 62196 62645 . + 0 ID=CDS27;Parent=mRNA34 1877523 gt csa exon 62196 62646 0.921 + . Parent=mRNA34 ### 1877523 gt csa gene 60319 61000 . - . ID=gene26 1877523 gt csa mRNA 60319 61000 . - . ID=mRNA35;Parent=gene26;Target=19801463 1 682 +,8692149 1 559 +,19827386 1 453 +,7610825 1 500 +,8736724 1 496 +,19828552 1 452 +,19838343 1 409 +,397216 1 390 + 1877523 gt csa exon 60319 61000 0.997 - . Parent=mRNA35 1877523 gt cds CDS 60518 60715 . - 0 ID=CDS28;Parent=mRNA35 ### 1877523 gt csa gene 63106 64320 . + . ID=gene27 1877523 gt csa mRNA 63106 64320 . + . ID=mRNA36;Parent=gene27;Target=8701755 1 598 -,8735505 1 490 -,19798134 1 412 +,5846657 1 345 + 1877523 gt csa exon 63106 63178 1 + . Parent=mRNA36 1877523 gt cds CDS 63108 63178 . + 0 ID=CDS29;Parent=mRNA36 1877523 gt csa exon 63271 63391 1 + . Parent=mRNA36 1877523 gt cds CDS 63271 63391 . + 1 ID=CDS29;Parent=mRNA36 1877523 gt csa exon 63468 63683 1 + . Parent=mRNA36 1877523 gt cds CDS 63468 63683 . + 0 ID=CDS29;Parent=mRNA36 1877523 gt cds CDS 63755 63814 . + 0 ID=CDS29;Parent=mRNA36 1877523 gt csa exon 63755 64320 0.979 + . Parent=mRNA36 ### 1877523 gt csa gene 64196 65033 . - . ID=gene28 1877523 gt csa mRNA 64196 65033 . - . ID=mRNA37;Parent=gene28;Target=19877649 1 632 + 1877523 gt csa exon 64196 64605 1 - . Parent=mRNA37 1877523 gt cds CDS 64196 64605 . - 2 ID=CDS30;Parent=mRNA37 1877523 gt cds CDS 64812 65031 . - 0 ID=CDS30;Parent=mRNA37 1877523 gt csa exon 64812 65033 0.995 - . Parent=mRNA37 ### 1877523 gt csa gene 65467 66157 . + . ID=gene29 1877523 gt csa mRNA 65467 66157 . + . ID=mRNA38;Parent=gene29;Target=19875812 1 621 + 1877523 gt csa exon 65467 66058 0.992 + . Parent=mRNA38 1877523 gt cds CDS 65527 66058 . + 0 ID=CDS31;Parent=mRNA38 1877523 gt cds CDS 66130 66155 . + 2 ID=CDS31;Parent=mRNA38 1877523 gt csa exon 66130 66157 0.964 + . Parent=mRNA38 ### 1877523 gt csa gene 67358 68396 . + . ID=gene30 1877523 gt csa mRNA 67358 68396 . + . ID=mRNA39;Parent=gene30;Target=396603 1 749 +,19742246 1 423 - 1877523 gt csa exon 67358 67550 1 + . Parent=mRNA39 1877523 gt cds CDS 67359 67550 . + 0 ID=CDS32;Parent=mRNA39 1877523 gt csa exon 67636 67908 0.969 + . Parent=mRNA39 1877523 gt cds CDS 67636 67908 . + 0 ID=CDS32;Parent=mRNA39 1877523 gt cds CDS 68011 68184 . + 0 ID=CDS32;Parent=mRNA39 1877523 gt csa exon 68011 68396 0.99 + . Parent=mRNA39 ### 1877523 gt csa gene 69163 70072 . + . ID=gene31 1877523 gt csa mRNA 69163 69968 . + . ID=mRNA40;Parent=gene31;Target=19872996 1 536 +,19869130 1 603 +,19870921 1 486 +,7612059 1 362 + 1877523 gt csa exon 69163 69265 0.971 + . Parent=mRNA40 1877523 gt cds CDS 69176 69265 . + 0 ID=CDS33;Parent=mRNA40 1877523 gt csa exon 69375 69598 1 + . Parent=mRNA40 1877523 gt cds CDS 69375 69598 . + 0 ID=CDS33;Parent=mRNA40 1877523 gt cds CDS 69685 69940 . + 1 ID=CDS33;Parent=mRNA40 1877523 gt csa exon 69685 69968 0.996 + . Parent=mRNA40 1877523 gt csa mRNA 69196 70072 . + . ID=mRNA41;Parent=gene31;Target=905849 1 455 +,7612059 1 362 + 1877523 gt csa exon 69196 69265 0.986 + . Parent=mRNA41 1877523 gt cds CDS 69197 69265 . + 0 ID=CDS34;Parent=mRNA41 1877523 gt csa exon 69375 69598 1 + . Parent=mRNA41 1877523 gt cds CDS 69375 69598 . + 0 ID=CDS34;Parent=mRNA41 1877523 gt csa exon 69685 69831 0.816 + . Parent=mRNA41 1877523 gt cds CDS 69685 69831 . + 1 ID=CDS34;Parent=mRNA41 1877523 gt csa exon 70063 70072 0.4 + . Parent=mRNA41 1877523 gt cds CDS 70063 70072 . + 1 ID=CDS34;Parent=mRNA41 ### 1877523 gt csa gene 71414 72803 . + . ID=gene32 1877523 gt csa mRNA 71414 72009 . + . ID=mRNA42;Parent=gene32;Target=17520 1 168 +,8734707 1 319 + 1877523 gt csa exon 71414 71479 1 + . Parent=mRNA42 1877523 gt cds CDS 71414 71479 . + 0 ID=CDS35;Parent=mRNA42 1877523 gt csa exon 71579 71779 0.985 + . Parent=mRNA42 1877523 gt cds CDS 71579 71779 . + 0 ID=CDS35;Parent=mRNA42 1877523 gt csa exon 71914 72009 1 + . Parent=mRNA42 1877523 gt cds CDS 71914 72009 . + 0 ID=CDS35;Parent=mRNA42 1877523 gt csa mRNA 72121 72753 . + . ID=mRNA43;Parent=gene32;Target=2597031 1 221 +,958004 1 484 +,3449674 1 333 + 1877523 gt csa exon 72121 72753 0.929 + . Parent=mRNA43 1877523 gt cds CDS 72430 72714 . + 0 ID=CDS36;Parent=mRNA43 1877523 gt csa mRNA 72137 72803 . + . ID=mRNA44;Parent=gene32;Target=1159193 1 351 +,8737761 1 497 -,2749490 79 466 +,7610337 1 466 -,19829297 1 429 -,19829716 1 434 -,19831127 1 431 -,8731753 1 480 -,19839622 1 421 -,2762921 1 237 +,2762922 1 337 +,19825274 1 460 -,19855736 1 420 -,8695920 1 405 -,3449674 1 333 + 1877523 gt csa exon 72137 72296 1 + . Parent=mRNA44 1877523 gt cds CDS 72138 72296 . + 0 ID=CDS37;Parent=mRNA44 1877523 gt cds CDS 72369 72542 . + 0 ID=CDS37;Parent=mRNA44 1877523 gt csa exon 72369 72803 1 + . Parent=mRNA44 ### 1877523 gt csa gene 72359 74920 . - . ID=gene33 1877523 gt csa mRNA 72359 72827 . - . ID=mRNA45;Parent=gene33;Target=19841232 1 443 +,19826275 1 444 +,19834843 1 430 +,19828253 1 431 +,19825742 1 430 +,19828054 1 455 +,19844666 1 418 +,19829934 1 418 +,19842362 1 417 +,19837074 1 417 +,8728304 1 365 +,19827775 1 416 +,19855995 1 403 +,8694120 1 354 +,19831839 1 401 +,19833332 1 405 +,8732348 1 369 +,8695842 1 280 + 1877523 gt csa exon 72359 72827 0.992 - . Parent=mRNA45 1877523 gt cds CDS 72426 72632 . - 0 ID=CDS38;Parent=mRNA45 1877523 gt csa mRNA 72390 74046 . - . ID=mRNA46;Parent=gene33;Target=8728304 1 365 +,8694120 1 354 +,2597485 1 163 - 1877523 gt csa exon 72390 72789 0.978 - . Parent=mRNA46 1877523 gt cds CDS 72426 72632 . - 0 ID=CDS39;Parent=mRNA46 1877523 gt csa exon 74021 74046 0.615 - . Parent=mRNA46 1877523 gt csa mRNA 72390 74920 . - . ID=mRNA47;Parent=gene33;Target=8728304 1 365 +,8694120 1 354 +,3450080 1 166 - 1877523 gt csa exon 72390 72800 0.919 - . Parent=mRNA47 1877523 gt cds CDS 72426 72632 . - 0 ID=CDS40;Parent=mRNA47 1877523 gt csa exon 74901 74920 0.75 - . Parent=mRNA47 ### 1877523 gt csa gene 79098 79663 . - . ID=gene34 1877523 gt csa mRNA 79098 79663 . - . ID=mRNA48;Parent=gene34;Target=19857409 11 314 - 1877523 gt csa exon 79098 79127 0.767 - . Parent=mRNA48 1877523 gt csa exon 79241 79487 0.866 - . Parent=mRNA48 1877523 gt cds CDS 79290 79487 . - 0 ID=CDS41;Parent=mRNA48 1877523 gt cds CDS 79636 79662 . - 0 ID=CDS41;Parent=mRNA48 1877523 gt csa exon 79636 79663 1 - . Parent=mRNA48 ### 1877523 gt csa gene 86444 89957 . - . ID=gene35 1877523 gt csa mRNA 86444 89957 . - . ID=mRNA49;Parent=gene35;Target=19873300 87 582 + 1877523 gt csa exon 86444 86516 0.767 - . Parent=mRNA49 1877523 gt cds CDS 86445 86516 . - 0 ID=CDS42;Parent=mRNA49 1877523 gt csa exon 89440 89702 0.683 - . Parent=mRNA49 1877523 gt cds CDS 89440 89702 . - 2 ID=CDS42;Parent=mRNA49 1877523 gt cds CDS 89794 89950 . - 0 ID=CDS42;Parent=mRNA49 1877523 gt csa exon 89794 89957 0.823 - . Parent=mRNA49 ### 1877523 gt csa gene 90829 91133 . + . ID=gene36 1877523 gt csa mRNA 90829 91133 . + . ID=mRNA50;Parent=gene36;Target=5845361 1 307 + 1877523 gt csa exon 90829 91133 0.948 + . Parent=mRNA50 ### 1877523 gt csa gene 91050 91786 . - . ID=gene37 1877523 gt csa mRNA 91050 91786 . - . ID=mRNA51;Parent=gene37;Target=8735154 1 543 - 1877523 gt csa exon 91050 91401 1 - . Parent=mRNA51 1877523 gt cds CDS 91145 91401 . - 2 ID=CDS43;Parent=mRNA51 1877523 gt csa exon 91524 91713 1 - . Parent=mRNA51 1877523 gt cds CDS 91524 91713 . - 0 ID=CDS43;Parent=mRNA51 1877523 gt csa exon 91786 91786 1 - . Parent=mRNA51 ### 1877523 gt csa gene 92903 94384 . - . ID=gene38 1877523 gt csa mRNA 92903 93265 . - . ID=mRNA52;Parent=gene38;Target=9786193 1 266 + 1877523 gt csa exon 92903 93008 1 - . Parent=mRNA52 1877523 gt csa exon 93106 93265 1 - . Parent=mRNA52 1877523 gt csa mRNA 93551 94384 . - . ID=mRNA53;Parent=gene38;Target=19806050 1 401 -,2047981 81 377 +,19857902 1 407 - 1877523 gt csa exon 93551 93913 0.957 - . Parent=mRNA53 1877523 gt cds CDS 93689 93913 . - 0 ID=CDS44;Parent=mRNA53 1877523 gt csa exon 94017 94124 1 - . Parent=mRNA53 1877523 gt cds CDS 94017 94124 . - 0 ID=CDS44;Parent=mRNA53 1877523 gt csa exon 94367 94384 1 - . Parent=mRNA53 1877523 gt cds CDS 94367 94384 . - 0 ID=CDS44;Parent=mRNA53 ### 1877523 gt csa gene 94706 96614 . - . ID=gene39 1877523 gt csa mRNA 94706 96614 . - . ID=mRNA54;Parent=gene39;Target=9782167 1 392 +,19866748 1 646 +,9778306 1 422 +,9778321 1 398 + 1877523 gt csa exon 94706 94771 0.871 - . Parent=mRNA54 1877523 gt cds CDS 94706 94771 . - 0 ID=CDS45;Parent=mRNA54 1877523 gt csa exon 94877 94985 0.954 - . Parent=mRNA54 1877523 gt cds CDS 94877 94985 . - 1 ID=CDS45;Parent=mRNA54 1877523 gt csa exon 95071 95147 1 - . Parent=mRNA54 1877523 gt cds CDS 95071 95147 . - 0 ID=CDS45;Parent=mRNA54 1877523 gt csa exon 95234 95454 1 - . Parent=mRNA54 1877523 gt cds CDS 95234 95454 . - 2 ID=CDS45;Parent=mRNA54 1877523 gt csa exon 95842 95947 0.991 - . Parent=mRNA54 1877523 gt cds CDS 95842 95947 . - 0 ID=CDS45;Parent=mRNA54 1877523 gt csa exon 96036 96140 1 - . Parent=mRNA54 1877523 gt cds CDS 96036 96140 . - 0 ID=CDS45;Parent=mRNA54 1877523 gt csa exon 96232 96330 1 - . Parent=mRNA54 1877523 gt cds CDS 96232 96330 . - 0 ID=CDS45;Parent=mRNA54 1877523 gt cds CDS 96418 96612 . - 0 ID=CDS45;Parent=mRNA54 1877523 gt csa exon 96418 96614 0.987 - . Parent=mRNA54 ### 1877523 gt csa gene 98857 100804 . - . ID=gene40 1877523 gt csa mRNA 98857 100804 . - . ID=mRNA55;Parent=gene40;Target=19836538 1 392 -,8737545 1 333 -,2446000 47 535 +,5846455 1 525 -,8734273 1 383 -,397246 1 362 +,19863867 1 661 +,19870774 1 577 +,958152 1 437 +,8732177 1 326 + 1877523 gt csa exon 98857 99121 1 - . Parent=mRNA55 1877523 gt cds CDS 99053 99121 . - 0 ID=CDS46;Parent=mRNA55 1877523 gt csa exon 99200 99361 1 - . Parent=mRNA55 1877523 gt cds CDS 99200 99361 . - 0 ID=CDS46;Parent=mRNA55 1877523 gt csa exon 99443 99511 1 - . Parent=mRNA55 1877523 gt cds CDS 99443 99511 . - 0 ID=CDS46;Parent=mRNA55 1877523 gt csa exon 99613 99877 1 - . Parent=mRNA55 1877523 gt cds CDS 99613 99877 . - 1 ID=CDS46;Parent=mRNA55 1877523 gt csa exon 100102 100226 1 - . Parent=mRNA55 1877523 gt cds CDS 100102 100226 . - 0 ID=CDS46;Parent=mRNA55 1877523 gt csa exon 100327 100434 1 - . Parent=mRNA55 1877523 gt cds CDS 100327 100434 . - 0 ID=CDS46;Parent=mRNA55 1877523 gt csa exon 100539 100646 1 - . Parent=mRNA55 1877523 gt cds CDS 100539 100646 . - 0 ID=CDS46;Parent=mRNA55 1877523 gt cds CDS 100749 100802 . - 0 ID=CDS46;Parent=mRNA55 1877523 gt csa exon 100749 100804 0.982 - . Parent=mRNA55 ### 1877523 gt csa gene 103616 106973 . + . ID=gene41 1877523 gt csa mRNA 103616 105860 . + . ID=mRNA56;Parent=gene41;Target=2580948 1 435 +,8722221 103 366 +,623629 87 375 +,9778203 71 401 +,8731408 68 518 +,937871 1 457 +,9781141 22 358 +,7611662 1 549 -,19801855 1 495 -,8695006 1 452 -,8702125 1 452 -,19825204 1 402 -,2748033 88 460 -,19835442 1 367 -,8734878 1 354 -,19823987 1 352 -,19841468 39 385 -,2747682 1 302 +,2412846 1 302 +,17325 1 277 -,3449578 65 370 +,19859011 1 296 - 1877523 gt csa exon 103616 103753 0.975 + . Parent=mRNA56 1877523 gt cds CDS 103616 103753 . + 0 ID=CDS47;Parent=mRNA56 1877523 gt csa exon 103982 104035 0.981 + . Parent=mRNA56 1877523 gt cds CDS 103982 104035 . + 0 ID=CDS47;Parent=mRNA56 1877523 gt csa exon 104118 104198 0.975 + . Parent=mRNA56 1877523 gt cds CDS 104118 104198 . + 0 ID=CDS47;Parent=mRNA56 1877523 gt csa exon 104295 104455 0.932 + . Parent=mRNA56 1877523 gt cds CDS 104295 104455 . + 0 ID=CDS47;Parent=mRNA56 1877523 gt csa exon 104649 104724 0.934 + . Parent=mRNA56 1877523 gt cds CDS 104649 104724 . + 1 ID=CDS47;Parent=mRNA56 1877523 gt csa exon 104803 104928 0.841 + . Parent=mRNA56 1877523 gt cds CDS 104803 104928 . + 0 ID=CDS47;Parent=mRNA56 1877523 gt csa exon 105010 105228 0.863 + . Parent=mRNA56 1877523 gt cds CDS 105010 105228 . + 0 ID=CDS47;Parent=mRNA56 1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA56 1877523 gt cds CDS 105315 105428 . + 0 ID=CDS47;Parent=mRNA56 1877523 gt csa exon 105500 105535 1 + . Parent=mRNA56 1877523 gt cds CDS 105500 105535 . + 0 ID=CDS47;Parent=mRNA56 1877523 gt cds CDS 105630 105764 . + 0 ID=CDS47;Parent=mRNA56 1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA56 1877523 gt csa mRNA 103616 105860 . + . ID=mRNA57;Parent=gene41;Target=2580948 1 435 +,2759743 1 460 +,5840051 1 700 +,8722221 103 366 +,623629 87 375 +,9781141 22 358 +,7611662 1 549 -,19801855 1 495 -,8695006 1 452 -,8702125 1 452 -,19825204 1 402 -,2748033 88 460 -,19835442 1 367 -,8734878 1 354 -,19823987 1 352 -,19841468 39 385 -,2747682 1 302 +,2412846 1 302 +,17325 1 277 -,3449578 65 370 +,19859011 1 296 - 1877523 gt csa exon 103616 103753 1 + . Parent=mRNA57 1877523 gt csa exon 103982 104035 1 + . Parent=mRNA57 1877523 gt csa exon 104118 104198 1 + . Parent=mRNA57 1877523 gt csa exon 104295 104724 0.921 + . Parent=mRNA57 1877523 gt cds CDS 104584 104724 . + 0 ID=CDS48;Parent=mRNA57 1877523 gt csa exon 104803 104928 0.841 + . Parent=mRNA57 1877523 gt cds CDS 104803 104928 . + 0 ID=CDS48;Parent=mRNA57 1877523 gt csa exon 105010 105228 0.863 + . Parent=mRNA57 1877523 gt cds CDS 105010 105228 . + 0 ID=CDS48;Parent=mRNA57 1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA57 1877523 gt cds CDS 105315 105428 . + 0 ID=CDS48;Parent=mRNA57 1877523 gt csa exon 105500 105535 1 + . Parent=mRNA57 1877523 gt cds CDS 105500 105535 . + 0 ID=CDS48;Parent=mRNA57 1877523 gt cds CDS 105630 105764 . + 0 ID=CDS48;Parent=mRNA57 1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA57 1877523 gt csa mRNA 103706 105860 . + . ID=mRNA58;Parent=gene41;Target=8686177 99 409 +,453733 78 357 +,9778203 71 401 +,8731408 68 518 +,937871 1 457 +,9781141 22 358 +,7611662 1 549 -,19801855 1 495 -,8695006 1 452 -,8702125 1 452 -,19825204 1 402 -,2748033 88 460 -,19835442 1 367 -,8734878 1 354 -,19823987 1 352 -,19841468 39 385 -,2747682 1 302 +,2412846 1 302 +,17325 1 277 -,3449578 65 370 +,19859011 1 296 - 1877523 gt csa exon 103706 103731 0.885 + . Parent=mRNA58 1877523 gt cds CDS 103706 103731 . + 0 ID=CDS49;Parent=mRNA58 1877523 gt csa exon 103799 103826 0.518 + . Parent=mRNA58 1877523 gt cds CDS 103799 103826 . + 1 ID=CDS49;Parent=mRNA58 1877523 gt csa exon 103982 104035 0.944 + . Parent=mRNA58 1877523 gt cds CDS 103982 104035 . + 0 ID=CDS49;Parent=mRNA58 1877523 gt csa exon 104118 104198 0.951 + . Parent=mRNA58 1877523 gt cds CDS 104118 104198 . + 0 ID=CDS49;Parent=mRNA58 1877523 gt csa exon 104295 104455 0.888 + . Parent=mRNA58 1877523 gt cds CDS 104295 104455 . + 0 ID=CDS49;Parent=mRNA58 1877523 gt csa exon 104649 104724 0.934 + . Parent=mRNA58 1877523 gt cds CDS 104649 104724 . + 1 ID=CDS49;Parent=mRNA58 1877523 gt csa exon 104803 104928 0.841 + . Parent=mRNA58 1877523 gt cds CDS 104803 104928 . + 0 ID=CDS49;Parent=mRNA58 1877523 gt csa exon 105010 105228 0.863 + . Parent=mRNA58 1877523 gt cds CDS 105010 105228 . + 0 ID=CDS49;Parent=mRNA58 1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA58 1877523 gt cds CDS 105315 105428 . + 0 ID=CDS49;Parent=mRNA58 1877523 gt csa exon 105500 105535 1 + . Parent=mRNA58 1877523 gt cds CDS 105500 105535 . + 0 ID=CDS49;Parent=mRNA58 1877523 gt cds CDS 105630 105764 . + 0 ID=CDS49;Parent=mRNA58 1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA58 1877523 gt csa mRNA 105009 105860 . + . ID=mRNA59;Parent=gene41;Target=8734901 1 533 -,19801855 1 495 -,8695006 1 452 -,8702125 1 452 -,19825204 1 402 -,2748033 88 460 -,19835442 1 367 -,8734878 1 354 -,19823987 1 352 -,19841468 39 385 -,2747682 1 302 +,2412846 1 302 +,17325 1 277 -,3449578 65 370 +,19859011 1 296 - 1877523 gt csa exon 105009 105228 0.864 + . Parent=mRNA59 1877523 gt cds CDS 105010 105228 . + 0 ID=CDS50;Parent=mRNA59 1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA59 1877523 gt cds CDS 105315 105428 . + 0 ID=CDS50;Parent=mRNA59 1877523 gt csa exon 105500 105535 1 + . Parent=mRNA59 1877523 gt cds CDS 105500 105535 . + 0 ID=CDS50;Parent=mRNA59 1877523 gt cds CDS 105630 105764 . + 0 ID=CDS50;Parent=mRNA59 1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA59 1877523 gt csa mRNA 106097 106973 . + . ID=mRNA60;Parent=gene41;Target=19871766 1 425 +,17300 1 350 +,7612621 1 248 +,935362 1 377 +,936803 1 374 +,7612394 1 366 +,2733258 26 261 +,8729681 1 298 +,2759942 1 130 +,9778889 1 162 + 1877523 gt csa exon 106097 106290 0.995 + . Parent=mRNA60 1877523 gt cds CDS 106168 106290 . + 0 ID=CDS51;Parent=mRNA60 1877523 gt csa exon 106566 106619 1 + . Parent=mRNA60 1877523 gt cds CDS 106566 106619 . + 0 ID=CDS51;Parent=mRNA60 1877523 gt csa exon 106702 106782 1 + . Parent=mRNA60 1877523 gt cds CDS 106702 106782 . + 0 ID=CDS51;Parent=mRNA60 1877523 gt csa exon 106878 106973 1 + . Parent=mRNA60 1877523 gt cds CDS 106878 106973 . + 0 ID=CDS51;Parent=mRNA60 ### 1877523 gt csa gene 105662 105806 . - . ID=gene42 1877523 gt csa mRNA 105662 105806 . - . ID=mRNA61;Parent=gene42;Target=8735385 30 173 + 1877523 gt csa exon 105662 105806 0.855 - . Parent=mRNA61 ### genometools-1.5.1/testdata/U89959_csas.gff3000066400000000000000000000520501211610345200202730ustar00rootroot00000000000000##gff-version 3 ##sequence-region 1877523 1 106973 1877523 gt csa gene 1074 1540 . + . ID=gene1 1877523 gt csa mRNA 1074 1540 . + . ID=mRNA1;Parent=gene1;Target=8721428 1 303 + 1877523 gt csa exon 1074 1171 1 + . Parent=mRNA1 1877523 gt csa exon 1259 1354 1 + . Parent=mRNA1 1877523 gt csa exon 1432 1540 1 + . Parent=mRNA1 ### 1877523 gt csa gene 2779 3506 . + . ID=gene2 1877523 gt csa mRNA 2779 3506 . + . ID=mRNA2;Parent=gene2;Target=8732738 1 337 +,19843099 1 426 + 1877523 gt csa exon 2779 2801 0.696 + . Parent=mRNA2 1877523 gt csa exon 3043 3506 0.974 + . Parent=mRNA2 1877523 gt csa mRNA 3025 3506 . + . ID=mRNA3;Parent=gene2;Target=19837778 1 327 +,19843099 1 426 + 1877523 gt csa exon 3025 3506 0.974 + . Parent=mRNA3 ### 1877523 gt csa gene 3041 3651 . - . ID=gene3 1877523 gt csa mRNA 3041 3651 . - . ID=mRNA4;Parent=gene3;Target=8732878 1 536 - 1877523 gt csa exon 3041 3550 0.996 - . Parent=mRNA4 1877523 gt csa exon 3626 3651 1 - . Parent=mRNA4 ### 1877523 gt csa gene 4768 5357 . - . ID=gene4 1877523 gt csa mRNA 4768 5357 . - . ID=mRNA5;Parent=gene4;Target=19871046 1 591 + 1877523 gt csa exon 4768 5357 0.987 - . Parent=mRNA5 ### 1877523 gt csa gene 9505 10058 . + . ID=gene5 1877523 gt csa mRNA 9505 10058 . + . ID=mRNA6;Parent=gene5;Target=8682455 1 554 + 1877523 gt csa exon 9505 10058 1 + . Parent=mRNA6 ### 1877523 gt csa gene 12024 12542 . - . ID=gene6 1877523 gt csa mRNA 12024 12542 . - . ID=mRNA7;Parent=gene6;Target=8688760 1 519 + 1877523 gt csa exon 12024 12542 1 - . Parent=mRNA7 ### 1877523 gt csa gene 13014 13465 . - . ID=gene7 1877523 gt csa mRNA 13014 13465 . - . ID=mRNA8;Parent=gene7;Target=2748705 1 459 + 1877523 gt csa exon 13014 13465 0.881 - . Parent=mRNA8 ### 1877523 gt csa gene 15955 16603 . + . ID=gene8 1877523 gt csa mRNA 15955 16603 . + . ID=mRNA9;Parent=gene8;Target=19878194 1 649 + 1877523 gt csa exon 15955 16603 0.997 + . Parent=mRNA9 ### 1877523 gt csa gene 17165 17684 . + . ID=gene9 1877523 gt csa mRNA 17165 17684 . + . ID=mRNA10;Parent=gene9;Target=19798999 1 396 - 1877523 gt csa exon 17165 17247 0.97 + . Parent=mRNA10 1877523 gt csa exon 17374 17684 0.989 + . Parent=mRNA10 ### 1877523 gt csa gene 25221 26100 . + . ID=gene10 1877523 gt csa mRNA 25221 26100 . + . ID=mRNA11;Parent=gene10;Target=8690053 1 521 + 1877523 gt csa exon 25221 25310 1 + . Parent=mRNA11 1877523 gt csa exon 25510 25626 1 + . Parent=mRNA11 1877523 gt csa exon 25713 25841 1 + . Parent=mRNA11 1877523 gt csa exon 25916 26100 1 + . Parent=mRNA11 ### 1877523 gt csa gene 27900 29817 . + . ID=gene11 1877523 gt csa mRNA 27900 28989 . + . ID=mRNA12;Parent=gene11;Target=8726341 1 499 + 1877523 gt csa exon 27900 28003 1 + . Parent=mRNA12 1877523 gt csa exon 28269 28424 1 + . Parent=mRNA12 1877523 gt csa exon 28507 28579 1 + . Parent=mRNA12 1877523 gt csa exon 28686 28753 1 + . Parent=mRNA12 1877523 gt csa exon 28892 28989 1 + . Parent=mRNA12 1877523 gt csa mRNA 28990 29817 . + . ID=mRNA13;Parent=gene11;Target=8726286 1 477 + 1877523 gt csa exon 28990 29037 1 + . Parent=mRNA13 1877523 gt csa exon 29134 29242 1 + . Parent=mRNA13 1877523 gt csa exon 29331 29477 1 + . Parent=mRNA13 1877523 gt csa exon 29571 29618 1 + . Parent=mRNA13 1877523 gt csa exon 29693 29817 1 + . Parent=mRNA13 ### 1877523 gt csa gene 30278 32362 . + . ID=gene12 1877523 gt csa mRNA 30278 31820 . + . ID=mRNA14;Parent=gene12;Target=8690080 1 524 +,8689616 1 333 + 1877523 gt csa exon 30278 30391 1 + . Parent=mRNA14 1877523 gt csa exon 30477 30562 1 + . Parent=mRNA14 1877523 gt csa exon 30658 30763 1 + . Parent=mRNA14 1877523 gt csa exon 30990 31085 1 + . Parent=mRNA14 1877523 gt csa exon 31234 31386 1 + . Parent=mRNA14 1877523 gt csa exon 31538 31720 1 + . Parent=mRNA14 1877523 gt csa exon 31793 31820 1 + . Parent=mRNA14 1877523 gt csa mRNA 31855 32362 . + . ID=mRNA15;Parent=gene12;Target=8689215 1 334 +,9784594 1 269 + 1877523 gt csa exon 31855 32022 1 + . Parent=mRNA15 1877523 gt csa exon 32118 32220 1 + . Parent=mRNA15 1877523 gt csa exon 32300 32362 1 + . Parent=mRNA15 ### 1877523 gt csa gene 32928 34560 . + . ID=gene13 1877523 gt csa mRNA 32928 34560 . + . ID=mRNA16;Parent=gene13;Target=19875482 1 227 +,9782568 1 427 + 1877523 gt csa exon 32928 32955 1 + . Parent=mRNA16 1877523 gt csa exon 33191 33317 0.98 + . Parent=mRNA16 1877523 gt csa exon 33418 33518 1 + . Parent=mRNA16 1877523 gt csa exon 33783 33917 1 + . Parent=mRNA16 1877523 gt csa exon 33996 34076 1 + . Parent=mRNA16 1877523 gt csa exon 34472 34560 1 + . Parent=mRNA16 ### 1877523 gt csa gene 35628 37208 . + . ID=gene14 1877523 gt csa mRNA 35628 37208 . + . ID=mRNA17;Parent=gene14;Target=2759121 1 451 +,5841805 1 479 +,8683519 1 604 -,8682814 1 522 -,8690927 1 566 -,5845530 1 547 -,8717375 1 521 -,2048630 53 438 + 1877523 gt csa exon 35628 35712 1 + . Parent=mRNA17 1877523 gt csa exon 35820 36011 1 + . Parent=mRNA17 1877523 gt csa exon 36101 36205 1 + . Parent=mRNA17 1877523 gt csa exon 36297 36431 1 + . Parent=mRNA17 1877523 gt csa exon 36521 36721 1 + . Parent=mRNA17 1877523 gt csa exon 36816 37208 1 + . Parent=mRNA17 ### 1877523 gt csa gene 36812 37235 . - . ID=gene15 1877523 gt csa mRNA 36812 37235 . - . ID=mRNA18;Parent=gene15;Target=8735393 1 424 +,19741846 1 380 +,8738747 1 395 +,8679389 1 133 + 1877523 gt csa exon 36812 37235 0.998 - . Parent=mRNA18 ### 1877523 gt csa gene 37669 40032 . - . ID=gene16 1877523 gt csa mRNA 37669 40032 . - . ID=mRNA19;Parent=gene16;Target=8738841 1 588 -,19831991 1 401 -,19840745 1 390 -,5843191 1 490 -,19869427 1 606 +,8722075 1 568 + 1877523 gt csa exon 37669 37891 1 - . Parent=mRNA19 1877523 gt csa exon 37972 38060 1 - . Parent=mRNA19 1877523 gt csa exon 38656 38794 1 - . Parent=mRNA19 1877523 gt csa exon 38927 38997 1 - . Parent=mRNA19 1877523 gt csa exon 39104 39148 1 - . Parent=mRNA19 1877523 gt csa exon 39239 39328 1 - . Parent=mRNA19 1877523 gt csa exon 39438 39526 1 - . Parent=mRNA19 1877523 gt csa exon 39614 39689 1 - . Parent=mRNA19 1877523 gt csa exon 39798 40032 0.996 - . Parent=mRNA19 ### 1877523 gt csa gene 42783 43204 . - . ID=gene17 1877523 gt csa mRNA 42783 43204 . - . ID=mRNA20;Parent=gene17;Target=19858773 1 422 + 1877523 gt csa exon 42783 43204 1 - . Parent=mRNA20 ### 1877523 gt csa gene 44029 44540 . + . ID=gene18 1877523 gt csa mRNA 44029 44540 . + . ID=mRNA21;Parent=gene18;Target=402959 1 423 + 1877523 gt csa exon 44029 44263 0.991 + . Parent=mRNA21 1877523 gt csa exon 44354 44540 0.947 + . Parent=mRNA21 ### 1877523 gt csa gene 45542 45941 . - . ID=gene19 1877523 gt csa mRNA 45542 45941 . - . ID=mRNA22;Parent=gene19;Target=8682693 1 322 +,402964 1 388 + 1877523 gt csa exon 45542 45941 0.924 - . Parent=mRNA22 ### 1877523 gt csa gene 45843 45920 . + . ID=gene20 1877523 gt csa mRNA 45843 45920 . + . ID=mRNA23;Parent=gene20;Target=8720010 1 78 - 1877523 gt csa exon 45843 45920 0.949 + . Parent=mRNA23 ### 1877523 gt csa gene 49874 52242 . - . ID=gene21 1877523 gt csa mRNA 49874 50547 . - . ID=mRNA24;Parent=gene21;Target=19837290 1 412 + 1877523 gt csa exon 49874 50284 1 - . Parent=mRNA24 1877523 gt csa exon 50547 50547 1 - . Parent=mRNA24 1877523 gt csa mRNA 50433 52242 . - . ID=mRNA25;Parent=gene21;Target=19807151 1 426 -,8731976 1 441 -,19805724 1 385 -,19866668 1 647 +,2747604 1 362 +,2596256 1 446 +,2596953 1 336 +,5839790 1 404 +,403229 1 350 +,9785390 1 263 + 1877523 gt csa exon 50433 50834 0.978 - . Parent=mRNA25 1877523 gt csa exon 51113 51216 1 - . Parent=mRNA25 1877523 gt csa exon 51319 51474 1 - . Parent=mRNA25 1877523 gt csa exon 51552 51623 1 - . Parent=mRNA25 1877523 gt csa exon 51711 51758 1 - . Parent=mRNA25 1877523 gt csa exon 51849 51896 1 - . Parent=mRNA25 1877523 gt csa exon 51983 52055 1 - . Parent=mRNA25 1877523 gt csa exon 52163 52242 1 - . Parent=mRNA25 ### 1877523 gt csa gene 50475 50702 . + . ID=gene22 1877523 gt csa mRNA 50475 50702 . + . ID=mRNA26;Parent=gene22;Target=8727457 1 228 + 1877523 gt csa exon 50475 50702 1 + . Parent=mRNA26 ### 1877523 gt csa gene 53602 54829 . - . ID=gene23 1877523 gt csa mRNA 53602 54829 . - . ID=mRNA27;Parent=gene23;Target=8697180 1 427 -,19803773 1 627 -,19840006 1 413 -,19823046 1 417 -,2393553 57 528 +,19843722 1 431 -,8696505 49 568 +,5839694 1 477 +,9778953 1 365 +,19865963 1 414 +,9784661 1 248 +,933584 1 311 +,8696543 49 319 + 1877523 gt csa exon 53602 53914 0.994 - . Parent=mRNA27 1877523 gt csa exon 54159 54335 1 - . Parent=mRNA27 1877523 gt csa exon 54574 54829 0.992 - . Parent=mRNA27 ### 1877523 gt csa gene 53632 56652 . + . ID=gene24 1877523 gt csa mRNA 53632 53909 . + . ID=mRNA28;Parent=gene24;Target=8697126 1 279 + 1877523 gt csa exon 53632 53909 0.991 + . Parent=mRNA28 1877523 gt csa mRNA 54991 56652 . + . ID=mRNA29;Parent=gene24;Target=19874826 1 651 + 1877523 gt csa exon 54991 55057 0.985 + . Parent=mRNA29 1877523 gt csa exon 55145 55230 1 + . Parent=mRNA29 1877523 gt csa exon 55300 55341 1 + . Parent=mRNA29 1877523 gt csa exon 55453 55498 1 + . Parent=mRNA29 1877523 gt csa exon 55618 55704 1 + . Parent=mRNA29 1877523 gt csa exon 55818 55873 1 + . Parent=mRNA29 1877523 gt csa exon 56036 56153 1 + . Parent=mRNA29 1877523 gt csa exon 56281 56339 1 + . Parent=mRNA29 1877523 gt csa exon 56449 56520 1 + . Parent=mRNA29 1877523 gt csa exon 56635 56652 1 + . Parent=mRNA29 ### 1877523 gt csa gene 58115 62646 . + . ID=gene25 1877523 gt csa mRNA 58115 59001 . + . ID=mRNA30;Parent=gene25;Target=19741042 1 460 - 1877523 gt csa exon 58115 58209 0.958 + . Parent=mRNA30 1877523 gt csa exon 58461 58526 1 + . Parent=mRNA30 1877523 gt csa exon 58624 58717 1 + . Parent=mRNA30 1877523 gt csa exon 58796 59001 0.983 + . Parent=mRNA30 1877523 gt csa mRNA 59010 59976 . + . ID=mRNA31;Parent=gene25;Target=8715845 1 475 +,19864079 1 653 +,9787190 1 255 +,397215 1 333 + 1877523 gt csa exon 59010 59526 0.989 + . Parent=mRNA31 1877523 gt csa exon 59607 59976 0.991 + . Parent=mRNA31 1877523 gt csa mRNA 60190 60487 . + . ID=mRNA32;Parent=gene25;Target=398270 1 298 + 1877523 gt csa exon 60190 60487 0.987 + . Parent=mRNA32 1877523 gt csa mRNA 61186 61974 . + . ID=mRNA33;Parent=gene25;Target=2722481 1 371 +,19837990 1 398 - 1877523 gt csa exon 61186 61281 0.99 + . Parent=mRNA33 1877523 gt csa exon 61565 61641 1 + . Parent=mRNA33 1877523 gt csa exon 61724 61974 1 + . Parent=mRNA33 1877523 gt csa mRNA 62196 62646 . + . ID=mRNA34;Parent=gene25;Target=2747645 1 448 + 1877523 gt csa exon 62196 62646 0.921 + . Parent=mRNA34 ### 1877523 gt csa gene 60319 61000 . - . ID=gene26 1877523 gt csa mRNA 60319 61000 . - . ID=mRNA35;Parent=gene26;Target=19801463 1 682 +,8692149 1 559 +,19827386 1 453 +,7610825 1 500 +,8736724 1 496 +,19828552 1 452 +,19838343 1 409 +,397216 1 390 + 1877523 gt csa exon 60319 61000 0.997 - . Parent=mRNA35 ### 1877523 gt csa gene 63106 64320 . + . ID=gene27 1877523 gt csa mRNA 63106 64320 . + . ID=mRNA36;Parent=gene27;Target=8701755 1 598 -,8735505 1 490 -,19798134 1 412 +,5846657 1 345 + 1877523 gt csa exon 63106 63178 1 + . Parent=mRNA36 1877523 gt csa exon 63271 63391 1 + . Parent=mRNA36 1877523 gt csa exon 63468 63683 1 + . Parent=mRNA36 1877523 gt csa exon 63755 64320 0.979 + . Parent=mRNA36 ### 1877523 gt csa gene 64196 65033 . - . ID=gene28 1877523 gt csa mRNA 64196 65033 . - . ID=mRNA37;Parent=gene28;Target=19877649 1 632 + 1877523 gt csa exon 64196 64605 1 - . Parent=mRNA37 1877523 gt csa exon 64812 65033 0.995 - . Parent=mRNA37 ### 1877523 gt csa gene 65467 66157 . + . ID=gene29 1877523 gt csa mRNA 65467 66157 . + . ID=mRNA38;Parent=gene29;Target=19875812 1 621 + 1877523 gt csa exon 65467 66058 0.992 + . Parent=mRNA38 1877523 gt csa exon 66130 66157 0.964 + . Parent=mRNA38 ### 1877523 gt csa gene 67358 68396 . + . ID=gene30 1877523 gt csa mRNA 67358 68396 . + . ID=mRNA39;Parent=gene30;Target=396603 1 749 +,19742246 1 423 - 1877523 gt csa exon 67358 67550 1 + . Parent=mRNA39 1877523 gt csa exon 67636 67908 0.969 + . Parent=mRNA39 1877523 gt csa exon 68011 68396 0.99 + . Parent=mRNA39 ### 1877523 gt csa gene 69163 70072 . + . ID=gene31 1877523 gt csa mRNA 69163 69968 . + . ID=mRNA40;Parent=gene31;Target=19872996 1 536 +,19869130 1 603 +,19870921 1 486 +,7612059 1 362 + 1877523 gt csa exon 69163 69265 0.971 + . Parent=mRNA40 1877523 gt csa exon 69375 69598 1 + . Parent=mRNA40 1877523 gt csa exon 69685 69968 0.996 + . Parent=mRNA40 1877523 gt csa mRNA 69196 70072 . + . ID=mRNA41;Parent=gene31;Target=905849 1 455 +,7612059 1 362 + 1877523 gt csa exon 69196 69265 0.986 + . Parent=mRNA41 1877523 gt csa exon 69375 69598 1 + . Parent=mRNA41 1877523 gt csa exon 69685 69831 0.816 + . Parent=mRNA41 1877523 gt csa exon 70063 70072 0.4 + . Parent=mRNA41 ### 1877523 gt csa gene 71414 72803 . + . ID=gene32 1877523 gt csa mRNA 71414 72009 . + . ID=mRNA42;Parent=gene32;Target=17520 1 168 +,8734707 1 319 + 1877523 gt csa exon 71414 71479 1 + . Parent=mRNA42 1877523 gt csa exon 71579 71779 0.985 + . Parent=mRNA42 1877523 gt csa exon 71914 72009 1 + . Parent=mRNA42 1877523 gt csa mRNA 72121 72753 . + . ID=mRNA43;Parent=gene32;Target=2597031 1 221 +,958004 1 484 +,3449674 1 333 + 1877523 gt csa exon 72121 72753 0.929 + . Parent=mRNA43 1877523 gt csa mRNA 72137 72803 . + . ID=mRNA44;Parent=gene32;Target=1159193 1 351 +,8737761 1 497 -,2749490 79 466 +,7610337 1 466 -,19829297 1 429 -,19829716 1 434 -,19831127 1 431 -,8731753 1 480 -,19839622 1 421 -,2762921 1 237 +,2762922 1 337 +,19825274 1 460 -,19855736 1 420 -,8695920 1 405 -,3449674 1 333 + 1877523 gt csa exon 72137 72296 1 + . Parent=mRNA44 1877523 gt csa exon 72369 72803 1 + . Parent=mRNA44 ### 1877523 gt csa gene 72359 74920 . - . ID=gene33 1877523 gt csa mRNA 72359 72827 . - . ID=mRNA45;Parent=gene33;Target=19841232 1 443 +,19826275 1 444 +,19834843 1 430 +,19828253 1 431 +,19825742 1 430 +,19828054 1 455 +,19844666 1 418 +,19829934 1 418 +,19842362 1 417 +,19837074 1 417 +,8728304 1 365 +,19827775 1 416 +,19855995 1 403 +,8694120 1 354 +,19831839 1 401 +,19833332 1 405 +,8732348 1 369 +,8695842 1 280 + 1877523 gt csa exon 72359 72827 0.992 - . Parent=mRNA45 1877523 gt csa mRNA 72390 74046 . - . ID=mRNA46;Parent=gene33;Target=8728304 1 365 +,8694120 1 354 +,2597485 1 163 - 1877523 gt csa exon 72390 72789 0.978 - . Parent=mRNA46 1877523 gt csa exon 74021 74046 0.615 - . Parent=mRNA46 1877523 gt csa mRNA 72390 74920 . - . ID=mRNA47;Parent=gene33;Target=8728304 1 365 +,8694120 1 354 +,3450080 1 166 - 1877523 gt csa exon 72390 72800 0.919 - . Parent=mRNA47 1877523 gt csa exon 74901 74920 0.75 - . Parent=mRNA47 ### 1877523 gt csa gene 79098 79663 . - . ID=gene34 1877523 gt csa mRNA 79098 79663 . - . ID=mRNA48;Parent=gene34;Target=19857409 11 314 - 1877523 gt csa exon 79098 79127 0.767 - . Parent=mRNA48 1877523 gt csa exon 79241 79487 0.866 - . Parent=mRNA48 1877523 gt csa exon 79636 79663 1 - . Parent=mRNA48 ### 1877523 gt csa gene 86444 89957 . - . ID=gene35 1877523 gt csa mRNA 86444 89957 . - . ID=mRNA49;Parent=gene35;Target=19873300 87 582 + 1877523 gt csa exon 86444 86516 0.767 - . Parent=mRNA49 1877523 gt csa exon 89440 89702 0.683 - . Parent=mRNA49 1877523 gt csa exon 89794 89957 0.823 - . Parent=mRNA49 ### 1877523 gt csa gene 90829 91133 . + . ID=gene36 1877523 gt csa mRNA 90829 91133 . + . ID=mRNA50;Parent=gene36;Target=5845361 1 307 + 1877523 gt csa exon 90829 91133 0.948 + . Parent=mRNA50 ### 1877523 gt csa gene 91050 91786 . - . ID=gene37 1877523 gt csa mRNA 91050 91786 . - . ID=mRNA51;Parent=gene37;Target=8735154 1 543 - 1877523 gt csa exon 91050 91401 1 - . Parent=mRNA51 1877523 gt csa exon 91524 91713 1 - . Parent=mRNA51 1877523 gt csa exon 91786 91786 1 - . Parent=mRNA51 ### 1877523 gt csa gene 92903 94384 . - . ID=gene38 1877523 gt csa mRNA 92903 93265 . - . ID=mRNA52;Parent=gene38;Target=9786193 1 266 + 1877523 gt csa exon 92903 93008 1 - . Parent=mRNA52 1877523 gt csa exon 93106 93265 1 - . Parent=mRNA52 1877523 gt csa mRNA 93551 94384 . - . ID=mRNA53;Parent=gene38;Target=19806050 1 401 -,2047981 81 377 +,19857902 1 407 - 1877523 gt csa exon 93551 93913 0.957 - . Parent=mRNA53 1877523 gt csa exon 94017 94124 1 - . Parent=mRNA53 1877523 gt csa exon 94367 94384 1 - . Parent=mRNA53 ### 1877523 gt csa gene 94706 96614 . - . ID=gene39 1877523 gt csa mRNA 94706 96614 . - . ID=mRNA54;Parent=gene39;Target=9782167 1 392 +,19866748 1 646 +,9778306 1 422 +,9778321 1 398 + 1877523 gt csa exon 94706 94771 0.871 - . Parent=mRNA54 1877523 gt csa exon 94877 94985 0.954 - . Parent=mRNA54 1877523 gt csa exon 95071 95147 1 - . Parent=mRNA54 1877523 gt csa exon 95234 95454 1 - . Parent=mRNA54 1877523 gt csa exon 95842 95947 0.991 - . Parent=mRNA54 1877523 gt csa exon 96036 96140 1 - . Parent=mRNA54 1877523 gt csa exon 96232 96330 1 - . Parent=mRNA54 1877523 gt csa exon 96418 96614 0.987 - . Parent=mRNA54 ### 1877523 gt csa gene 98857 100804 . - . ID=gene40 1877523 gt csa mRNA 98857 100804 . - . ID=mRNA55;Parent=gene40;Target=19836538 1 392 -,8737545 1 333 -,2446000 47 535 +,5846455 1 525 -,8734273 1 383 -,397246 1 362 +,19863867 1 661 +,19870774 1 577 +,958152 1 437 +,8732177 1 326 + 1877523 gt csa exon 98857 99121 1 - . Parent=mRNA55 1877523 gt csa exon 99200 99361 1 - . Parent=mRNA55 1877523 gt csa exon 99443 99511 1 - . Parent=mRNA55 1877523 gt csa exon 99613 99877 1 - . Parent=mRNA55 1877523 gt csa exon 100102 100226 1 - . Parent=mRNA55 1877523 gt csa exon 100327 100434 1 - . Parent=mRNA55 1877523 gt csa exon 100539 100646 1 - . Parent=mRNA55 1877523 gt csa exon 100749 100804 0.982 - . Parent=mRNA55 ### 1877523 gt csa gene 103616 106973 . + . ID=gene41 1877523 gt csa mRNA 103616 105860 . + . ID=mRNA56;Parent=gene41;Target=2580948 1 435 +,8722221 103 366 +,623629 87 375 +,9778203 71 401 +,8731408 68 518 +,937871 1 457 +,9781141 22 358 +,7611662 1 549 -,19801855 1 495 -,8695006 1 452 -,8702125 1 452 -,19825204 1 402 -,2748033 88 460 -,19835442 1 367 -,8734878 1 354 -,19823987 1 352 -,19841468 39 385 -,2747682 1 302 +,2412846 1 302 +,17325 1 277 -,3449578 65 370 +,19859011 1 296 - 1877523 gt csa exon 103616 103753 0.975 + . Parent=mRNA56 1877523 gt csa exon 103982 104035 0.981 + . Parent=mRNA56 1877523 gt csa exon 104118 104198 0.975 + . Parent=mRNA56 1877523 gt csa exon 104295 104455 0.932 + . Parent=mRNA56 1877523 gt csa exon 104649 104724 0.934 + . Parent=mRNA56 1877523 gt csa exon 104803 104928 0.841 + . Parent=mRNA56 1877523 gt csa exon 105010 105228 0.863 + . Parent=mRNA56 1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA56 1877523 gt csa exon 105500 105535 1 + . Parent=mRNA56 1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA56 1877523 gt csa mRNA 103616 105860 . + . ID=mRNA57;Parent=gene41;Target=2580948 1 435 +,2759743 1 460 +,5840051 1 700 +,8722221 103 366 +,623629 87 375 +,9781141 22 358 +,7611662 1 549 -,19801855 1 495 -,8695006 1 452 -,8702125 1 452 -,19825204 1 402 -,2748033 88 460 -,19835442 1 367 -,8734878 1 354 -,19823987 1 352 -,19841468 39 385 -,2747682 1 302 +,2412846 1 302 +,17325 1 277 -,3449578 65 370 +,19859011 1 296 - 1877523 gt csa exon 103616 103753 1 + . Parent=mRNA57 1877523 gt csa exon 103982 104035 1 + . Parent=mRNA57 1877523 gt csa exon 104118 104198 1 + . Parent=mRNA57 1877523 gt csa exon 104295 104724 0.921 + . Parent=mRNA57 1877523 gt csa exon 104803 104928 0.841 + . Parent=mRNA57 1877523 gt csa exon 105010 105228 0.863 + . Parent=mRNA57 1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA57 1877523 gt csa exon 105500 105535 1 + . Parent=mRNA57 1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA57 1877523 gt csa mRNA 103706 105860 . + . ID=mRNA58;Parent=gene41;Target=8686177 99 409 +,453733 78 357 +,9778203 71 401 +,8731408 68 518 +,937871 1 457 +,9781141 22 358 +,7611662 1 549 -,19801855 1 495 -,8695006 1 452 -,8702125 1 452 -,19825204 1 402 -,2748033 88 460 -,19835442 1 367 -,8734878 1 354 -,19823987 1 352 -,19841468 39 385 -,2747682 1 302 +,2412846 1 302 +,17325 1 277 -,3449578 65 370 +,19859011 1 296 - 1877523 gt csa exon 103706 103731 0.885 + . Parent=mRNA58 1877523 gt csa exon 103799 103826 0.518 + . Parent=mRNA58 1877523 gt csa exon 103982 104035 0.944 + . Parent=mRNA58 1877523 gt csa exon 104118 104198 0.951 + . Parent=mRNA58 1877523 gt csa exon 104295 104455 0.888 + . Parent=mRNA58 1877523 gt csa exon 104649 104724 0.934 + . Parent=mRNA58 1877523 gt csa exon 104803 104928 0.841 + . Parent=mRNA58 1877523 gt csa exon 105010 105228 0.863 + . Parent=mRNA58 1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA58 1877523 gt csa exon 105500 105535 1 + . Parent=mRNA58 1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA58 1877523 gt csa mRNA 105009 105860 . + . ID=mRNA59;Parent=gene41;Target=8734901 1 533 -,19801855 1 495 -,8695006 1 452 -,8702125 1 452 -,19825204 1 402 -,2748033 88 460 -,19835442 1 367 -,8734878 1 354 -,19823987 1 352 -,19841468 39 385 -,2747682 1 302 +,2412846 1 302 +,17325 1 277 -,3449578 65 370 +,19859011 1 296 - 1877523 gt csa exon 105009 105228 0.864 + . Parent=mRNA59 1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA59 1877523 gt csa exon 105500 105535 1 + . Parent=mRNA59 1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA59 1877523 gt csa mRNA 106097 106973 . + . ID=mRNA60;Parent=gene41;Target=19871766 1 425 +,17300 1 350 +,7612621 1 248 +,935362 1 377 +,936803 1 374 +,7612394 1 366 +,2733258 26 261 +,8729681 1 298 +,2759942 1 130 +,9778889 1 162 + 1877523 gt csa exon 106097 106290 0.995 + . Parent=mRNA60 1877523 gt csa exon 106566 106619 1 + . Parent=mRNA60 1877523 gt csa exon 106702 106782 1 + . Parent=mRNA60 1877523 gt csa exon 106878 106973 1 + . Parent=mRNA60 ### 1877523 gt csa gene 105662 105806 . - . ID=gene42 1877523 gt csa mRNA 105662 105806 . - . ID=mRNA61;Parent=gene42;Target=8735385 30 173 + 1877523 gt csa exon 105662 105806 0.855 - . Parent=mRNA61 ### genometools-1.5.1/testdata/U89959_csas.gff3md5000066400000000000000000001226541211610345200207110ustar00rootroot00000000000000##gff-version 3 ##sequence-region md5:063b1024d68e26716b7f38caf958316f:1877523 1 106973 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 1074 1540 . + . ID=gene1 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 1074 1540 . + . ID=mRNA1;Parent=gene1;Target=md5:14c0ff5e76ef8ac009fdcc923f701356:8721428 1 303 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 1074 1171 1 + . Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 1259 1354 1 + . Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 1432 1540 1 + . Parent=mRNA1 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 2779 3506 . + . ID=gene2 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 2779 3506 . + . ID=mRNA2;Parent=gene2;Target=md5:527995da853a37f9c47e616ce237d523:8732738 1 337 +,md5:a9dcd316817972a94c0af505715b10bc:19843099 1 426 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 2779 2801 0.696 + . Parent=mRNA2 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 3043 3506 0.974 + . Parent=mRNA2 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 3025 3506 . + . ID=mRNA3;Parent=gene2;Target=md5:f1a0d426e93585553b21aa1a47aa2970:19837778 1 327 +,md5:a9dcd316817972a94c0af505715b10bc:19843099 1 426 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 3025 3506 0.974 + . Parent=mRNA3 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 3041 3651 . - . ID=gene3 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 3041 3651 . - . ID=mRNA4;Parent=gene3;Target=md5:cabe5b677d534fb65e0d2245f61e2bd1:8732878 1 536 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 3041 3550 0.996 - . Parent=mRNA4 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 3626 3651 1 - . Parent=mRNA4 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 4768 5357 . - . ID=gene4 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 4768 5357 . - . ID=mRNA5;Parent=gene4;Target=md5:e40253c45f8d96170d6af32f8d8e3e05:19871046 1 591 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 4768 5357 0.987 - . Parent=mRNA5 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 9505 10058 . + . ID=gene5 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 9505 10058 . + . ID=mRNA6;Parent=gene5;Target=md5:f28eda487869903339de7a431f00fccd:8682455 1 554 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 9505 10058 1 + . Parent=mRNA6 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 12024 12542 . - . ID=gene6 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 12024 12542 . - . ID=mRNA7;Parent=gene6;Target=md5:300d9c80d9f566412745a6bda32e3e12:8688760 1 519 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 12024 12542 1 - . Parent=mRNA7 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 13014 13465 . - . ID=gene7 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 13014 13465 . - . ID=mRNA8;Parent=gene7;Target=md5:c6826f50615c7fb2eb70e294bb7202cb:2748705 1 459 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 13014 13465 0.881 - . Parent=mRNA8 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 15955 16603 . + . ID=gene8 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 15955 16603 . + . ID=mRNA9;Parent=gene8;Target=md5:bceada3d0ee38c76dafe93fd74e71dfe:19878194 1 649 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 15955 16603 0.997 + . Parent=mRNA9 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 17165 17684 . + . ID=gene9 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 17165 17684 . + . ID=mRNA10;Parent=gene9;Target=md5:8bbc72e5847196327c25661544c6bdf9:19798999 1 396 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 17165 17247 0.97 + . Parent=mRNA10 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 17374 17684 0.989 + . Parent=mRNA10 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 25221 26100 . + . ID=gene10 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 25221 26100 . + . ID=mRNA11;Parent=gene10;Target=md5:ff7357d7a1877d31d94543a13d64fa0e:8690053 1 521 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 25221 25310 1 + . Parent=mRNA11 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 25510 25626 1 + . Parent=mRNA11 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 25713 25841 1 + . Parent=mRNA11 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 25916 26100 1 + . Parent=mRNA11 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 27900 29817 . + . ID=gene11 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 27900 28989 . + . ID=mRNA12;Parent=gene11;Target=md5:c69c15ebe466171a13ee5aa610e90e61:8726341 1 499 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 27900 28003 1 + . Parent=mRNA12 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 28269 28424 1 + . Parent=mRNA12 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 28507 28579 1 + . Parent=mRNA12 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 28686 28753 1 + . Parent=mRNA12 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 28892 28989 1 + . Parent=mRNA12 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 28990 29817 . + . ID=mRNA13;Parent=gene11;Target=md5:0870e7d5d9d76766ebd3dce1758b733f:8726286 1 477 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 28990 29037 1 + . Parent=mRNA13 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 29134 29242 1 + . Parent=mRNA13 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 29331 29477 1 + . Parent=mRNA13 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 29571 29618 1 + . Parent=mRNA13 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 29693 29817 1 + . Parent=mRNA13 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 30278 32362 . + . ID=gene12 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 30278 31820 . + . ID=mRNA14;Parent=gene12;Target=md5:97350772e29b7881b149afbedf09290d:8690080 1 524 +,md5:cc954bf1761c4c9f05f8822afb1079e3:8689616 1 333 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 30278 30391 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 30477 30562 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 30658 30763 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 30990 31085 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 31234 31386 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 31538 31720 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 31793 31820 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 31855 32362 . + . ID=mRNA15;Parent=gene12;Target=md5:70facb44682374068ef43fd0a6e116b5:8689215 1 334 +,md5:c7084aa0f01934072f9e244363059ca0:9784594 1 269 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 31855 32022 1 + . Parent=mRNA15 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 32118 32220 1 + . Parent=mRNA15 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 32300 32362 1 + . Parent=mRNA15 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 32928 34560 . + . ID=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 32928 34560 . + . ID=mRNA16;Parent=gene13;Target=md5:4e8ae3a74fefacbbb8650ba892c2b2da:19875482 1 227 +,md5:f53ad09e45a4038f2261b9ee90353658:9782568 1 427 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 32928 32955 1 + . Parent=mRNA16 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 33191 33317 0.98 + . Parent=mRNA16 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 33418 33518 1 + . Parent=mRNA16 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 33783 33917 1 + . Parent=mRNA16 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 33996 34076 1 + . Parent=mRNA16 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 34472 34560 1 + . Parent=mRNA16 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 35628 37208 . + . ID=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 35628 37208 . + . ID=mRNA17;Parent=gene14;Target=md5:a7fa97bc84c3aebaea34e169b73094c9:2759121 1 451 +,md5:cdced248d13c7c0f89e7e889cc30164a:5841805 1 479 +,md5:0d914f8b8fdfef05d05e32a617ce8737:8683519 1 604 -,md5:634e9a3d54562a834a900edb41abe7d4:8682814 1 522 -,md5:e24a612b49c52c8aca23eb196c1ebe06:8690927 1 566 -,md5:835eb4298c428885b3d16d0e4514c30b:5845530 1 547 -,md5:b280ddc383280ca975eeaa3329e34c14:8717375 1 521 -,md5:3ff6374febf91a5f28c3f7bcc4ccd774:2048630 53 438 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 35628 35712 1 + . Parent=mRNA17 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 35820 36011 1 + . Parent=mRNA17 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 36101 36205 1 + . Parent=mRNA17 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 36297 36431 1 + . Parent=mRNA17 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 36521 36721 1 + . Parent=mRNA17 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 36816 37208 1 + . Parent=mRNA17 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 36812 37235 . - . ID=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 36812 37235 . - . ID=mRNA18;Parent=gene15;Target=md5:26ebd521c00f7b4d595086f162ab00e1:8735393 1 424 +,md5:7f0facaa45cacec8ffaa0c98a51edf56:19741846 1 380 +,md5:275dc2512038a6501b7d27e38165bec7:8738747 1 395 +,md5:af2486ba93823b9389100222c0ddffdb:8679389 1 133 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 36812 37235 0.998 - . Parent=mRNA18 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 37669 40032 . - . ID=gene16 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 37669 40032 . - . ID=mRNA19;Parent=gene16;Target=md5:b1da76b1bfdf36225429a5be70ff88a2:8738841 1 588 -,md5:354c93700a73d01ea73f641c62c593cd:19831991 1 401 -,md5:f42df1d200fb31e1bed322fab31540d6:19840745 1 390 -,md5:f55d7bcc44b78111563b02f8a19805ee:5843191 1 490 -,md5:a3f1555a0375aea877145c8c372ae4af:19869427 1 606 +,md5:a5f947d297585356da9380d22ac8c974:8722075 1 568 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 37669 37891 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 37972 38060 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 38656 38794 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 38927 38997 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 39104 39148 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 39239 39328 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 39438 39526 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 39614 39689 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 39798 40032 0.996 - . Parent=mRNA19 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 42783 43204 . - . ID=gene17 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 42783 43204 . - . ID=mRNA20;Parent=gene17;Target=md5:bdc426cd84a477b9b48d7e7d1538fc85:19858773 1 422 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 42783 43204 1 - . Parent=mRNA20 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 44029 44540 . + . ID=gene18 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 44029 44540 . + . ID=mRNA21;Parent=gene18;Target=md5:0f6d1e4ce29d042b5804f8ae8bd9c43a:402959 1 423 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 44029 44263 0.991 + . Parent=mRNA21 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 44354 44540 0.947 + . Parent=mRNA21 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 45542 45941 . - . ID=gene19 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 45542 45941 . - . ID=mRNA22;Parent=gene19;Target=md5:7ba0b8c1bb50abf3c5a844abacf9fe67:8682693 1 322 +,md5:38229ac075d9c6d15fd1152c4eccc834:402964 1 388 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 45542 45941 0.924 - . Parent=mRNA22 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 45843 45920 . + . ID=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 45843 45920 . + . ID=mRNA23;Parent=gene20;Target=md5:6d3b4b9db4531cda588528f2c69c0a57:8720010 1 78 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 45843 45920 0.949 + . Parent=mRNA23 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 49874 52242 . - . ID=gene21 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 49874 50547 . - . ID=mRNA24;Parent=gene21;Target=md5:494051ed1147d22a2b2967b64c329678:19837290 1 412 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 49874 50284 1 - . Parent=mRNA24 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 50547 50547 1 - . Parent=mRNA24 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 50433 52242 . - . ID=mRNA25;Parent=gene21;Target=md5:634ef96163dc4d4f8a585fe8059d867b:19807151 1 426 -,md5:754b35896aef0625da39ee42e61db715:8731976 1 441 -,md5:741ff4d6dd193d77cc75fb61f373ca5b:19805724 1 385 -,md5:597ada174987f3f2f0b2e4046f09247d:19866668 1 647 +,md5:8fdc30d821ff25b48b6182936cf72cd5:2747604 1 362 +,md5:26e5980fbaaefb58d84de6755d521845:2596256 1 446 +,md5:d342e4ee66b1c4db3e83e076c5dd7d44:2596953 1 336 +,md5:7f11e59ff50ce68b25c6120418df3d51:5839790 1 404 +,md5:b0183ab4aa646b9e8f95f61daf0e23a3:403229 1 350 +,md5:8ed84d5653334535562a21058880db81:9785390 1 263 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 50433 50834 0.978 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 51113 51216 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 51319 51474 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 51552 51623 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 51711 51758 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 51849 51896 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 51983 52055 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 52163 52242 1 - . Parent=mRNA25 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 50475 50702 . + . ID=gene22 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 50475 50702 . + . ID=mRNA26;Parent=gene22;Target=md5:950b7715ab6cc030a8c810a0dba2dd33:8727457 1 228 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 50475 50702 1 + . Parent=mRNA26 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 53602 54829 . - . ID=gene23 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 53602 54829 . - . ID=mRNA27;Parent=gene23;Target=md5:16258f1ad08d9c0c91c627eefad05949:8697180 1 427 -,md5:2642a22855698a3125c99a9759f9147c:19803773 1 627 -,md5:752fa8c75ecef45cfa9cf0c5a59afe49:19840006 1 413 -,md5:0743a82e324754dfc94ed4c0cd8a8816:19823046 1 417 -,md5:198a4aa7626135303d0e996d4e2775ef:2393553 57 528 +,md5:f692730f2bd8700f690f8a231d2e446b:19843722 1 431 -,md5:18fb5ebf5d11ec1db0d36de3ea2a049d:8696505 49 568 +,md5:ed9e14d2b83e7ea606c9d1d5fdbeb857:5839694 1 477 +,md5:7db3e698f27f19f0343e6b23af07a5b3:9778953 1 365 +,md5:6021387359d7e25495b6b804ebbbb0aa:19865963 1 414 +,md5:72f3e9cbd94835f59aa0a43b22a01b0f:9784661 1 248 +,md5:2fa0ef57b1f4391f7a2ae4283410311c:933584 1 311 +,md5:215d14a53287c2aca2d8bd12b09aca14:8696543 49 319 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 53602 53914 0.994 - . Parent=mRNA27 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 54159 54335 1 - . Parent=mRNA27 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 54574 54829 0.992 - . Parent=mRNA27 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 53632 56652 . + . ID=gene24 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 53632 53909 . + . ID=mRNA28;Parent=gene24;Target=md5:5a03dd7605925c94812a9550acc2d354:8697126 1 279 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 53632 53909 0.991 + . Parent=mRNA28 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 54991 56652 . + . ID=mRNA29;Parent=gene24;Target=md5:dd287e28fe668e94028c1a241a6a1c7d:19874826 1 651 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 54991 55057 0.985 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 55145 55230 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 55300 55341 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 55453 55498 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 55618 55704 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 55818 55873 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 56036 56153 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 56281 56339 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 56449 56520 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 56635 56652 1 + . Parent=mRNA29 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 58115 62646 . + . ID=gene25 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 58115 59001 . + . ID=mRNA30;Parent=gene25;Target=md5:a12796a152e829b54f2f56b4910d701c:19741042 1 460 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 58115 58209 0.958 + . Parent=mRNA30 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 58461 58526 1 + . Parent=mRNA30 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 58624 58717 1 + . Parent=mRNA30 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 58796 59001 0.983 + . Parent=mRNA30 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 59010 59976 . + . ID=mRNA31;Parent=gene25;Target=md5:cc404517a12f1a399ab48b948f4e71ff:8715845 1 475 +,md5:33eefc92073ab38229f0ce775746b219:19864079 1 653 +,md5:cdbabc0602366c37167aba18498d8232:9787190 1 255 +,md5:e72969c46cd2e7d078d339cda62260a8:397215 1 333 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 59010 59526 0.989 + . Parent=mRNA31 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 59607 59976 0.991 + . Parent=mRNA31 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 60190 60487 . + . ID=mRNA32;Parent=gene25;Target=md5:322e03bbf0f0ddac43d4ca12dd0cc795:398270 1 298 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 60190 60487 0.987 + . Parent=mRNA32 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 61186 61974 . + . ID=mRNA33;Parent=gene25;Target=md5:3ab44e284886cca199c6a4d221725734:2722481 1 371 +,md5:f63fe9c59e53d9587766136a15864412:19837990 1 398 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 61186 61281 0.99 + . Parent=mRNA33 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 61565 61641 1 + . Parent=mRNA33 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 61724 61974 1 + . Parent=mRNA33 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 62196 62646 . + . ID=mRNA34;Parent=gene25;Target=md5:77ba8b822b44308184b4dcab6ecfa75e:2747645 1 448 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 62196 62646 0.921 + . Parent=mRNA34 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 60319 61000 . - . ID=gene26 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 60319 61000 . - . ID=mRNA35;Parent=gene26;Target=md5:c94289917098254e5d5b7c3ed48e81b7:19801463 1 682 +,md5:48f4c66f41d3805c7213639bcb949d6a:8692149 1 559 +,md5:1b775af1ef6f8f8b80ba60a8245cba0b:19827386 1 453 +,md5:2acbf49eaca817b303d60c7c22dfdd15:7610825 1 500 +,md5:9b6924737e47f2eed133a565b35dd804:8736724 1 496 +,md5:653662b06e7e300256655269264f4004:19828552 1 452 +,md5:81a8f87434a337a21077462e2a1cb5c9:19838343 1 409 +,md5:1634572862a7fc3d7dcb1ca5950cf137:397216 1 390 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 60319 61000 0.997 - . Parent=mRNA35 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 63106 64320 . + . ID=gene27 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 63106 64320 . + . ID=mRNA36;Parent=gene27;Target=md5:c4e23aeca494361878d3407ae5c05e3d:8701755 1 598 -,md5:bbbbef70abd153db9376c364e9fafbae:8735505 1 490 -,md5:67e8b62becffff524bac4f51bfa344e1:19798134 1 412 +,md5:3b10d6f56bfea7b6b57a41146f6c140b:5846657 1 345 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 63106 63178 1 + . Parent=mRNA36 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 63271 63391 1 + . Parent=mRNA36 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 63468 63683 1 + . Parent=mRNA36 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 63755 64320 0.979 + . Parent=mRNA36 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 64196 65033 . - . ID=gene28 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 64196 65033 . - . ID=mRNA37;Parent=gene28;Target=md5:e5089d2bdb42934617cd38749662eb21:19877649 1 632 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 64196 64605 1 - . Parent=mRNA37 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 64812 65033 0.995 - . Parent=mRNA37 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 65467 66157 . + . ID=gene29 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 65467 66157 . + . ID=mRNA38;Parent=gene29;Target=md5:f19b5223816de3060184fb9250936fce:19875812 1 621 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 65467 66058 0.992 + . Parent=mRNA38 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 66130 66157 0.964 + . Parent=mRNA38 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 67358 68396 . + . ID=gene30 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 67358 68396 . + . ID=mRNA39;Parent=gene30;Target=md5:893d07af699d973ed4e8e3423fc87165:396603 1 749 +,md5:3b9295d3ee44af4cf4f79b2e27003f1b:19742246 1 423 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 67358 67550 1 + . Parent=mRNA39 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 67636 67908 0.969 + . Parent=mRNA39 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 68011 68396 0.99 + . Parent=mRNA39 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 69163 70072 . + . ID=gene31 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 69163 69968 . + . ID=mRNA40;Parent=gene31;Target=md5:79435902b3753af094ba24f8a4847978:19872996 1 536 +,md5:811cb37790973c1b417241d62fe2a569:19869130 1 603 +,md5:bce4ec40fb993e1733ea6d2d16398ed0:19870921 1 486 +,md5:979a4ec86ab17d2a4625c90ed575c145:7612059 1 362 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 69163 69265 0.971 + . Parent=mRNA40 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 69375 69598 1 + . Parent=mRNA40 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 69685 69968 0.996 + . Parent=mRNA40 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 69196 70072 . + . ID=mRNA41;Parent=gene31;Target=md5:49b16de93b5b34374e7e2a7e71253124:905849 1 455 +,md5:979a4ec86ab17d2a4625c90ed575c145:7612059 1 362 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 69196 69265 0.986 + . Parent=mRNA41 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 69375 69598 1 + . Parent=mRNA41 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 69685 69831 0.816 + . Parent=mRNA41 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 70063 70072 0.4 + . Parent=mRNA41 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 71414 72803 . + . ID=gene32 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 71414 72009 . + . ID=mRNA42;Parent=gene32;Target=md5:e311a17e67c458d42ed86de05242f87b:17520 1 168 +,md5:1f44f865b53e6414d5296a088f0a75e7:8734707 1 319 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 71414 71479 1 + . Parent=mRNA42 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 71579 71779 0.985 + . Parent=mRNA42 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 71914 72009 1 + . Parent=mRNA42 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 72121 72753 . + . ID=mRNA43;Parent=gene32;Target=md5:7d5ceada204939fc948a837d482fe57c:2597031 1 221 +,md5:a8b76267e5f1749ca29c5465c631ab8e:958004 1 484 +,md5:b7056f0f128b406b094ebf5cb33fb74f:3449674 1 333 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 72121 72753 0.929 + . Parent=mRNA43 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 72137 72803 . + . ID=mRNA44;Parent=gene32;Target=md5:7882e88f260382672a97918b652cad4a:1159193 1 351 +,md5:fa15dcef7c84118ca9ee3f95600132c8:8737761 1 497 -,md5:03636fa4a9e17baae04ad57d13cdc386:2749490 79 466 +,md5:9a5ec5d4597ac1be9d10ba63ecc457c1:7610337 1 466 -,md5:df066a65ac8236486c7d59f90157d43e:19829297 1 429 -,md5:ace313cc0542136c91ac52da3c676d77:19829716 1 434 -,md5:2d0e152a577c91a47f0b5781e67cd3b0:19831127 1 431 -,md5:6db92a6a61672ceedb192c31b975e370:8731753 1 480 -,md5:14f58b2b12e291455a69d48e56728992:19839622 1 421 -,md5:1c07f0f3b1115fb653b7f47df5b1344b:2762921 1 237 +,md5:061cac88caefa5d8bba4a1ff47031dc3:2762922 1 337 +,md5:9b19d8ea196896df9be4cf56b285abf2:19825274 1 460 -,md5:a179a430866ce2f2826fec132cd9e71f:19855736 1 420 -,md5:b2925aa2103833c4c0e3e2ba4e27e66f:8695920 1 405 -,md5:b7056f0f128b406b094ebf5cb33fb74f:3449674 1 333 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 72137 72296 1 + . Parent=mRNA44 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 72369 72803 1 + . Parent=mRNA44 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 72359 74920 . - . ID=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 72359 72827 . - . ID=mRNA45;Parent=gene33;Target=md5:80d8c2289eb0b45dd9ab395572f44eae:19841232 1 443 +,md5:3c0dc775fc37af77e71cd10a45d4723c:19826275 1 444 +,md5:f2f65df067412c3be8da37366e71763f:19834843 1 430 +,md5:faf314d3fa8ba5d3d99734b83ebb7f7b:19828253 1 431 +,md5:897eae7810009eb141a5f887289d95c8:19825742 1 430 +,md5:e252994eb503f22fdc871a97738a525a:19828054 1 455 +,md5:11f83a01fda0f6e2061e6e17dc9cc0fe:19844666 1 418 +,md5:8e8cf2914e87c5de17ca1cea5185961d:19829934 1 418 +,md5:c39b7a42d0e463287ec636842fe38b67:19842362 1 417 +,md5:dc0b347c18391d65d897b1c1f14bc31f:19837074 1 417 +,md5:5a9fcf1a7370455e62e2701803939c8e:8728304 1 365 +,md5:3f342edcab14d21711f3d75e3ff81743:19827775 1 416 +,md5:a3891b57fd37552bdad1be4e20266a5a:19855995 1 403 +,md5:cc7281740fd5e50cb1f19a22a728e790:8694120 1 354 +,md5:b9d8ea84787a6573a7bd2acdb795af44:19831839 1 401 +,md5:d056310e74cdfca4f2f5de040aabc6c6:19833332 1 405 +,md5:fd4ec29ab7c96a341ad546c954b7f557:8732348 1 369 +,md5:fd65d023d2d6b71c478da3cfa418cbbc:8695842 1 280 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 72359 72827 0.992 - . Parent=mRNA45 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 72390 74046 . - . ID=mRNA46;Parent=gene33;Target=md5:5a9fcf1a7370455e62e2701803939c8e:8728304 1 365 +,md5:cc7281740fd5e50cb1f19a22a728e790:8694120 1 354 +,md5:2c08f2fc011c03e5aa709690db242c3b:2597485 1 163 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 72390 72789 0.978 - . Parent=mRNA46 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 74021 74046 0.615 - . Parent=mRNA46 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 72390 74920 . - . ID=mRNA47;Parent=gene33;Target=md5:5a9fcf1a7370455e62e2701803939c8e:8728304 1 365 +,md5:cc7281740fd5e50cb1f19a22a728e790:8694120 1 354 +,md5:44f49124e83c2c61713d3c50b3a9a47c:3450080 1 166 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 72390 72800 0.919 - . Parent=mRNA47 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 74901 74920 0.75 - . Parent=mRNA47 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 79098 79663 . - . ID=gene34 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 79098 79663 . - . ID=mRNA48;Parent=gene34;Target=md5:e7ffec1ba9f35a3e29c9946f86b8fe72:19857409 11 314 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 79098 79127 0.767 - . Parent=mRNA48 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 79241 79487 0.866 - . Parent=mRNA48 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 79636 79663 1 - . Parent=mRNA48 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 86444 89957 . - . ID=gene35 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 86444 89957 . - . ID=mRNA49;Parent=gene35;Target=md5:2276b4a96eb715159638ed0f90239b89:19873300 87 582 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 86444 86516 0.767 - . Parent=mRNA49 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 89440 89702 0.683 - . Parent=mRNA49 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 89794 89957 0.823 - . Parent=mRNA49 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 90829 91133 . + . ID=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 90829 91133 . + . ID=mRNA50;Parent=gene36;Target=md5:88e24a075574a85734a081b57a7ec852:5845361 1 307 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 90829 91133 0.948 + . Parent=mRNA50 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 91050 91786 . - . ID=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 91050 91786 . - . ID=mRNA51;Parent=gene37;Target=md5:b18a91dba09f9ffefbe7b4a6aed19945:8735154 1 543 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 91050 91401 1 - . Parent=mRNA51 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 91524 91713 1 - . Parent=mRNA51 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 91786 91786 1 - . Parent=mRNA51 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 92903 94384 . - . ID=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 92903 93265 . - . ID=mRNA52;Parent=gene38;Target=md5:ddbfcce4683cac59087c5f26e674349b:9786193 1 266 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 92903 93008 1 - . Parent=mRNA52 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 93106 93265 1 - . Parent=mRNA52 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 93551 94384 . - . ID=mRNA53;Parent=gene38;Target=md5:d9d61048b8d25d868bda7f00a0831100:19806050 1 401 -,md5:a0d33d57c705a829d80c318c595fcccb:2047981 81 377 +,md5:41d17c6950c12d0d8ec2b305108f08ac:19857902 1 407 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 93551 93913 0.957 - . Parent=mRNA53 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 94017 94124 1 - . Parent=mRNA53 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 94367 94384 1 - . Parent=mRNA53 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 94706 96614 . - . ID=gene39 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 94706 96614 . - . ID=mRNA54;Parent=gene39;Target=md5:da4c1ce6a2ee20bb9c4c5d9462be98de:9782167 1 392 +,md5:c9a4247a29baa59833607fc71f58bb40:19866748 1 646 +,md5:e6343ecf374a95dd0356831650af82f1:9778306 1 422 +,md5:29b2d16dd6ee3e8669ae77b4e053ee20:9778321 1 398 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 94706 94771 0.871 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 94877 94985 0.954 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 95071 95147 1 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 95234 95454 1 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 95842 95947 0.991 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 96036 96140 1 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 96232 96330 1 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 96418 96614 0.987 - . Parent=mRNA54 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 98857 100804 . - . ID=gene40 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 98857 100804 . - . ID=mRNA55;Parent=gene40;Target=md5:4a2861ff4a54b0b8a099c7ca178c113f:19836538 1 392 -,md5:432d83294aa0f2f3fc1b7673977ea4d1:8737545 1 333 -,md5:50590ee6555b56ad95151d25d300c6fe:2446000 47 535 +,md5:08f77d13c4ad88c1c44c0314426f2218:5846455 1 525 -,md5:d75212b190b11adfcbc1b62e6d392ed1:8734273 1 383 -,md5:dd3ace06137c29bf383632984aadf8af:397246 1 362 +,md5:eaca300e106a2e1c1897455c6a2cb618:19863867 1 661 +,md5:1fd1b5316d6ec8962be7986ceebf3ce6:19870774 1 577 +,md5:8bfbb0491705b51d42ef6d8ba0c3e2ef:958152 1 437 +,md5:8e46b5509ea749211c8c5cacdc1e2500:8732177 1 326 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 98857 99121 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 99200 99361 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 99443 99511 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 99613 99877 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 100102 100226 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 100327 100434 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 100539 100646 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 100749 100804 0.982 - . Parent=mRNA55 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 103616 106973 . + . ID=gene41 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 103616 105860 . + . ID=mRNA56;Parent=gene41;Target=md5:0c4c41ad6668fd55d5f1140088f1064d:2580948 1 435 +,md5:b9155494bf5b0de513f322e685542888:8722221 103 366 +,md5:0e851efbbe2bfb244a388865f785495d:623629 87 375 +,md5:f1cb6a33be382d29ff291be589f1ed70:9778203 71 401 +,md5:b289385ff9ca374ceb056d5950d090b5:8731408 68 518 +,md5:ddab1d6f7c76a6508e85423cd56d46e5:937871 1 457 +,md5:257d2dc2f7c0bb730fe685a8052aaa63:9781141 22 358 +,md5:649b4501a3ba1d922dce7b623c7f6de9:7611662 1 549 -,md5:c24d4bd4c7cae864049bd096522750b1:19801855 1 495 -,md5:52b0aff6e54274ccb35b371b7630b68a:8695006 1 452 -,md5:085f029e3f483828cb30f70b141fa58a:8702125 1 452 -,md5:174d324a9dca8baddcdcd0dbef55f969:19825204 1 402 -,md5:0920b24475a189fbfc148593eec03cb6:2748033 88 460 -,md5:15ed737c8deffb63f79d93a8fecb5a93:19835442 1 367 -,md5:f8e9d021f04423c2ad6499f4ce6eca57:8734878 1 354 -,md5:a45d1a65f8024adcc2ce8bdcdfb36569:19823987 1 352 -,md5:07c4180bd9082b53416a778fee66e3f3:19841468 39 385 -,md5:15adef11b8ee98d85e7a5e3106495193:2747682 1 302 +,md5:f74aca5cee266c7bc442898be20363ae:2412846 1 302 +,md5:5db2b668ce1df476a932c078b6e77122:17325 1 277 -,md5:e6338114b6c0dcc78811d3be5b36ff63:3449578 65 370 +,md5:940e92280507db531e4654cc1f1054ef:19859011 1 296 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 103616 103753 0.975 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 103982 104035 0.981 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104118 104198 0.975 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104295 104455 0.932 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104649 104724 0.934 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104803 104928 0.841 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105010 105228 0.863 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105500 105535 1 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 103616 105860 . + . ID=mRNA57;Parent=gene41;Target=md5:0c4c41ad6668fd55d5f1140088f1064d:2580948 1 435 +,md5:d4793f2935cfa07221be201386cb079b:2759743 1 460 +,md5:e47b883ccda180d280195029954ea7f5:5840051 1 700 +,md5:b9155494bf5b0de513f322e685542888:8722221 103 366 +,md5:0e851efbbe2bfb244a388865f785495d:623629 87 375 +,md5:257d2dc2f7c0bb730fe685a8052aaa63:9781141 22 358 +,md5:649b4501a3ba1d922dce7b623c7f6de9:7611662 1 549 -,md5:c24d4bd4c7cae864049bd096522750b1:19801855 1 495 -,md5:52b0aff6e54274ccb35b371b7630b68a:8695006 1 452 -,md5:085f029e3f483828cb30f70b141fa58a:8702125 1 452 -,md5:174d324a9dca8baddcdcd0dbef55f969:19825204 1 402 -,md5:0920b24475a189fbfc148593eec03cb6:2748033 88 460 -,md5:15ed737c8deffb63f79d93a8fecb5a93:19835442 1 367 -,md5:f8e9d021f04423c2ad6499f4ce6eca57:8734878 1 354 -,md5:a45d1a65f8024adcc2ce8bdcdfb36569:19823987 1 352 -,md5:07c4180bd9082b53416a778fee66e3f3:19841468 39 385 -,md5:15adef11b8ee98d85e7a5e3106495193:2747682 1 302 +,md5:f74aca5cee266c7bc442898be20363ae:2412846 1 302 +,md5:5db2b668ce1df476a932c078b6e77122:17325 1 277 -,md5:e6338114b6c0dcc78811d3be5b36ff63:3449578 65 370 +,md5:940e92280507db531e4654cc1f1054ef:19859011 1 296 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 103616 103753 1 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 103982 104035 1 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104118 104198 1 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104295 104724 0.921 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104803 104928 0.841 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105010 105228 0.863 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105500 105535 1 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 103706 105860 . + . ID=mRNA58;Parent=gene41;Target=md5:41ccefe046c76c005c6f83a09aac40de:8686177 99 409 +,md5:556ae7f08b7cc887b54786f0bc100dd4:453733 78 357 +,md5:f1cb6a33be382d29ff291be589f1ed70:9778203 71 401 +,md5:b289385ff9ca374ceb056d5950d090b5:8731408 68 518 +,md5:ddab1d6f7c76a6508e85423cd56d46e5:937871 1 457 +,md5:257d2dc2f7c0bb730fe685a8052aaa63:9781141 22 358 +,md5:649b4501a3ba1d922dce7b623c7f6de9:7611662 1 549 -,md5:c24d4bd4c7cae864049bd096522750b1:19801855 1 495 -,md5:52b0aff6e54274ccb35b371b7630b68a:8695006 1 452 -,md5:085f029e3f483828cb30f70b141fa58a:8702125 1 452 -,md5:174d324a9dca8baddcdcd0dbef55f969:19825204 1 402 -,md5:0920b24475a189fbfc148593eec03cb6:2748033 88 460 -,md5:15ed737c8deffb63f79d93a8fecb5a93:19835442 1 367 -,md5:f8e9d021f04423c2ad6499f4ce6eca57:8734878 1 354 -,md5:a45d1a65f8024adcc2ce8bdcdfb36569:19823987 1 352 -,md5:07c4180bd9082b53416a778fee66e3f3:19841468 39 385 -,md5:15adef11b8ee98d85e7a5e3106495193:2747682 1 302 +,md5:f74aca5cee266c7bc442898be20363ae:2412846 1 302 +,md5:5db2b668ce1df476a932c078b6e77122:17325 1 277 -,md5:e6338114b6c0dcc78811d3be5b36ff63:3449578 65 370 +,md5:940e92280507db531e4654cc1f1054ef:19859011 1 296 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 103706 103731 0.885 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 103799 103826 0.518 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 103982 104035 0.944 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104118 104198 0.951 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104295 104455 0.888 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104649 104724 0.934 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 104803 104928 0.841 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105010 105228 0.863 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105500 105535 1 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 105009 105860 . + . ID=mRNA59;Parent=gene41;Target=md5:c6730817f9a41f80296421e6b7da6f25:8734901 1 533 -,md5:c24d4bd4c7cae864049bd096522750b1:19801855 1 495 -,md5:52b0aff6e54274ccb35b371b7630b68a:8695006 1 452 -,md5:085f029e3f483828cb30f70b141fa58a:8702125 1 452 -,md5:174d324a9dca8baddcdcd0dbef55f969:19825204 1 402 -,md5:0920b24475a189fbfc148593eec03cb6:2748033 88 460 -,md5:15ed737c8deffb63f79d93a8fecb5a93:19835442 1 367 -,md5:f8e9d021f04423c2ad6499f4ce6eca57:8734878 1 354 -,md5:a45d1a65f8024adcc2ce8bdcdfb36569:19823987 1 352 -,md5:07c4180bd9082b53416a778fee66e3f3:19841468 39 385 -,md5:15adef11b8ee98d85e7a5e3106495193:2747682 1 302 +,md5:f74aca5cee266c7bc442898be20363ae:2412846 1 302 +,md5:5db2b668ce1df476a932c078b6e77122:17325 1 277 -,md5:e6338114b6c0dcc78811d3be5b36ff63:3449578 65 370 +,md5:940e92280507db531e4654cc1f1054ef:19859011 1 296 - md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105009 105228 0.864 + . Parent=mRNA59 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105315 105428 0.912 + . Parent=mRNA59 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105500 105535 1 + . Parent=mRNA59 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105630 105860 0.827 + . Parent=mRNA59 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 106097 106973 . + . ID=mRNA60;Parent=gene41;Target=md5:1adc4b78b212af1a83a6460bd27222f0:19871766 1 425 +,md5:21c1b9817f74d01695e650726543cfbc:17300 1 350 +,md5:c446b7e0b708aafe5473ef397e104ae3:7612621 1 248 +,md5:5b0a1904c2c8e69fe643091fee181037:935362 1 377 +,md5:11a2689b92ee76c83cd57591ae940971:936803 1 374 +,md5:d1a97200c69d88855784612802e7c024:7612394 1 366 +,md5:5ae608a9518c5417787d0da5f4dc93b7:2733258 26 261 +,md5:7be43cab2c3d57b779ea0f8ceeacfc0c:8729681 1 298 +,md5:802e6347770300a7bbc0064a90f1f061:2759942 1 130 +,md5:e5c6d7f52bae4b6b57c6320ef95f9b66:9778889 1 162 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 106097 106290 0.995 + . Parent=mRNA60 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 106566 106619 1 + . Parent=mRNA60 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 106702 106782 1 + . Parent=mRNA60 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 106878 106973 1 + . Parent=mRNA60 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa gene 105662 105806 . - . ID=gene42 md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa mRNA 105662 105806 . - . ID=mRNA61;Parent=gene42;Target=md5:816e83d74c3a633c3ccc005f1c14d55a:8735385 30 173 + md5:063b1024d68e26716b7f38caf958316f:1877523 gt csa exon 105662 105806 0.855 - . Parent=mRNA61 ### genometools-1.5.1/testdata/U89959_csas.gff3md5old000066400000000000000000001117221211610345200214020ustar00rootroot00000000000000##gff-version 3 ##sequence-region md5:063b1024d68e26716b7f38caf958316f 1 106973 md5:063b1024d68e26716b7f38caf958316f gt csa gene 1074 1540 . + . ID=gene1 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 1074 1540 . + . ID=mRNA1;Parent=gene1;Target=md5:14c0ff5e76ef8ac009fdcc923f701356 1 303 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 1074 1171 1 + . Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f gt csa exon 1259 1354 1 + . Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f gt csa exon 1432 1540 1 + . Parent=mRNA1 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 2779 3506 . + . ID=gene2 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 2779 3506 . + . ID=mRNA2;Parent=gene2;Target=md5:527995da853a37f9c47e616ce237d523 1 337 +,md5:a9dcd316817972a94c0af505715b10bc 1 426 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 2779 2801 0.696 + . Parent=mRNA2 md5:063b1024d68e26716b7f38caf958316f gt csa exon 3043 3506 0.974 + . Parent=mRNA2 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 3025 3506 . + . ID=mRNA3;Parent=gene2;Target=md5:f1a0d426e93585553b21aa1a47aa2970 1 327 +,md5:a9dcd316817972a94c0af505715b10bc 1 426 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 3025 3506 0.974 + . Parent=mRNA3 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 3041 3651 . - . ID=gene3 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 3041 3651 . - . ID=mRNA4;Parent=gene3;Target=md5:cabe5b677d534fb65e0d2245f61e2bd1 1 536 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 3041 3550 0.996 - . Parent=mRNA4 md5:063b1024d68e26716b7f38caf958316f gt csa exon 3626 3651 1 - . Parent=mRNA4 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 4768 5357 . - . ID=gene4 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 4768 5357 . - . ID=mRNA5;Parent=gene4;Target=md5:e40253c45f8d96170d6af32f8d8e3e05 1 591 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 4768 5357 0.987 - . Parent=mRNA5 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 9505 10058 . + . ID=gene5 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 9505 10058 . + . ID=mRNA6;Parent=gene5;Target=md5:f28eda487869903339de7a431f00fccd 1 554 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 9505 10058 1 + . Parent=mRNA6 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 12024 12542 . - . ID=gene6 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 12024 12542 . - . ID=mRNA7;Parent=gene6;Target=md5:300d9c80d9f566412745a6bda32e3e12 1 519 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 12024 12542 1 - . Parent=mRNA7 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 13014 13465 . - . ID=gene7 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 13014 13465 . - . ID=mRNA8;Parent=gene7;Target=md5:c6826f50615c7fb2eb70e294bb7202cb 1 459 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 13014 13465 0.881 - . Parent=mRNA8 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 15955 16603 . + . ID=gene8 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 15955 16603 . + . ID=mRNA9;Parent=gene8;Target=md5:bceada3d0ee38c76dafe93fd74e71dfe 1 649 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 15955 16603 0.997 + . Parent=mRNA9 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 17165 17684 . + . ID=gene9 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 17165 17684 . + . ID=mRNA10;Parent=gene9;Target=md5:8bbc72e5847196327c25661544c6bdf9 1 396 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 17165 17247 0.97 + . Parent=mRNA10 md5:063b1024d68e26716b7f38caf958316f gt csa exon 17374 17684 0.989 + . Parent=mRNA10 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 25221 26100 . + . ID=gene10 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 25221 26100 . + . ID=mRNA11;Parent=gene10;Target=md5:ff7357d7a1877d31d94543a13d64fa0e 1 521 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 25221 25310 1 + . Parent=mRNA11 md5:063b1024d68e26716b7f38caf958316f gt csa exon 25510 25626 1 + . Parent=mRNA11 md5:063b1024d68e26716b7f38caf958316f gt csa exon 25713 25841 1 + . Parent=mRNA11 md5:063b1024d68e26716b7f38caf958316f gt csa exon 25916 26100 1 + . Parent=mRNA11 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 27900 29817 . + . ID=gene11 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 27900 28989 . + . ID=mRNA12;Parent=gene11;Target=md5:c69c15ebe466171a13ee5aa610e90e61 1 499 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 27900 28003 1 + . Parent=mRNA12 md5:063b1024d68e26716b7f38caf958316f gt csa exon 28269 28424 1 + . Parent=mRNA12 md5:063b1024d68e26716b7f38caf958316f gt csa exon 28507 28579 1 + . Parent=mRNA12 md5:063b1024d68e26716b7f38caf958316f gt csa exon 28686 28753 1 + . Parent=mRNA12 md5:063b1024d68e26716b7f38caf958316f gt csa exon 28892 28989 1 + . Parent=mRNA12 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 28990 29817 . + . ID=mRNA13;Parent=gene11;Target=md5:0870e7d5d9d76766ebd3dce1758b733f 1 477 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 28990 29037 1 + . Parent=mRNA13 md5:063b1024d68e26716b7f38caf958316f gt csa exon 29134 29242 1 + . Parent=mRNA13 md5:063b1024d68e26716b7f38caf958316f gt csa exon 29331 29477 1 + . Parent=mRNA13 md5:063b1024d68e26716b7f38caf958316f gt csa exon 29571 29618 1 + . Parent=mRNA13 md5:063b1024d68e26716b7f38caf958316f gt csa exon 29693 29817 1 + . Parent=mRNA13 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 30278 32362 . + . ID=gene12 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 30278 31820 . + . ID=mRNA14;Parent=gene12;Target=md5:97350772e29b7881b149afbedf09290d 1 524 +,md5:cc954bf1761c4c9f05f8822afb1079e3 1 333 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 30278 30391 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f gt csa exon 30477 30562 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f gt csa exon 30658 30763 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f gt csa exon 30990 31085 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f gt csa exon 31234 31386 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f gt csa exon 31538 31720 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f gt csa exon 31793 31820 1 + . Parent=mRNA14 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 31855 32362 . + . ID=mRNA15;Parent=gene12;Target=md5:70facb44682374068ef43fd0a6e116b5 1 334 +,md5:c7084aa0f01934072f9e244363059ca0 1 269 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 31855 32022 1 + . Parent=mRNA15 md5:063b1024d68e26716b7f38caf958316f gt csa exon 32118 32220 1 + . Parent=mRNA15 md5:063b1024d68e26716b7f38caf958316f gt csa exon 32300 32362 1 + . Parent=mRNA15 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 32928 34560 . + . ID=gene13 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 32928 34560 . + . ID=mRNA16;Parent=gene13;Target=md5:4e8ae3a74fefacbbb8650ba892c2b2da 1 227 +,md5:f53ad09e45a4038f2261b9ee90353658 1 427 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 32928 32955 1 + . Parent=mRNA16 md5:063b1024d68e26716b7f38caf958316f gt csa exon 33191 33317 0.98 + . Parent=mRNA16 md5:063b1024d68e26716b7f38caf958316f gt csa exon 33418 33518 1 + . Parent=mRNA16 md5:063b1024d68e26716b7f38caf958316f gt csa exon 33783 33917 1 + . Parent=mRNA16 md5:063b1024d68e26716b7f38caf958316f gt csa exon 33996 34076 1 + . Parent=mRNA16 md5:063b1024d68e26716b7f38caf958316f gt csa exon 34472 34560 1 + . Parent=mRNA16 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 35628 37208 . + . ID=gene14 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 35628 37208 . + . ID=mRNA17;Parent=gene14;Target=md5:a7fa97bc84c3aebaea34e169b73094c9 1 451 +,md5:cdced248d13c7c0f89e7e889cc30164a 1 479 +,md5:0d914f8b8fdfef05d05e32a617ce8737 1 604 -,md5:634e9a3d54562a834a900edb41abe7d4 1 522 -,md5:e24a612b49c52c8aca23eb196c1ebe06 1 566 -,md5:835eb4298c428885b3d16d0e4514c30b 1 547 -,md5:b280ddc383280ca975eeaa3329e34c14 1 521 -,md5:3ff6374febf91a5f28c3f7bcc4ccd774 53 438 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 35628 35712 1 + . Parent=mRNA17 md5:063b1024d68e26716b7f38caf958316f gt csa exon 35820 36011 1 + . Parent=mRNA17 md5:063b1024d68e26716b7f38caf958316f gt csa exon 36101 36205 1 + . Parent=mRNA17 md5:063b1024d68e26716b7f38caf958316f gt csa exon 36297 36431 1 + . Parent=mRNA17 md5:063b1024d68e26716b7f38caf958316f gt csa exon 36521 36721 1 + . Parent=mRNA17 md5:063b1024d68e26716b7f38caf958316f gt csa exon 36816 37208 1 + . Parent=mRNA17 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 36812 37235 . - . ID=gene15 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 36812 37235 . - . ID=mRNA18;Parent=gene15;Target=md5:26ebd521c00f7b4d595086f162ab00e1 1 424 +,md5:7f0facaa45cacec8ffaa0c98a51edf56 1 380 +,md5:275dc2512038a6501b7d27e38165bec7 1 395 +,md5:af2486ba93823b9389100222c0ddffdb 1 133 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 36812 37235 0.998 - . Parent=mRNA18 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 37669 40032 . - . ID=gene16 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 37669 40032 . - . ID=mRNA19;Parent=gene16;Target=md5:b1da76b1bfdf36225429a5be70ff88a2 1 588 -,md5:354c93700a73d01ea73f641c62c593cd 1 401 -,md5:f42df1d200fb31e1bed322fab31540d6 1 390 -,md5:f55d7bcc44b78111563b02f8a19805ee 1 490 -,md5:a3f1555a0375aea877145c8c372ae4af 1 606 +,md5:a5f947d297585356da9380d22ac8c974 1 568 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 37669 37891 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f gt csa exon 37972 38060 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f gt csa exon 38656 38794 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f gt csa exon 38927 38997 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f gt csa exon 39104 39148 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f gt csa exon 39239 39328 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f gt csa exon 39438 39526 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f gt csa exon 39614 39689 1 - . Parent=mRNA19 md5:063b1024d68e26716b7f38caf958316f gt csa exon 39798 40032 0.996 - . Parent=mRNA19 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 42783 43204 . - . ID=gene17 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 42783 43204 . - . ID=mRNA20;Parent=gene17;Target=md5:bdc426cd84a477b9b48d7e7d1538fc85 1 422 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 42783 43204 1 - . Parent=mRNA20 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 44029 44540 . + . ID=gene18 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 44029 44540 . + . ID=mRNA21;Parent=gene18;Target=md5:0f6d1e4ce29d042b5804f8ae8bd9c43a 1 423 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 44029 44263 0.991 + . Parent=mRNA21 md5:063b1024d68e26716b7f38caf958316f gt csa exon 44354 44540 0.947 + . Parent=mRNA21 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 45542 45941 . - . ID=gene19 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 45542 45941 . - . ID=mRNA22;Parent=gene19;Target=md5:7ba0b8c1bb50abf3c5a844abacf9fe67 1 322 +,md5:38229ac075d9c6d15fd1152c4eccc834 1 388 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 45542 45941 0.924 - . Parent=mRNA22 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 45843 45920 . + . ID=gene20 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 45843 45920 . + . ID=mRNA23;Parent=gene20;Target=md5:6d3b4b9db4531cda588528f2c69c0a57 1 78 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 45843 45920 0.949 + . Parent=mRNA23 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 49874 52242 . - . ID=gene21 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 49874 50547 . - . ID=mRNA24;Parent=gene21;Target=md5:494051ed1147d22a2b2967b64c329678 1 412 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 49874 50284 1 - . Parent=mRNA24 md5:063b1024d68e26716b7f38caf958316f gt csa exon 50547 50547 1 - . Parent=mRNA24 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 50433 52242 . - . ID=mRNA25;Parent=gene21;Target=md5:634ef96163dc4d4f8a585fe8059d867b 1 426 -,md5:754b35896aef0625da39ee42e61db715 1 441 -,md5:741ff4d6dd193d77cc75fb61f373ca5b 1 385 -,md5:597ada174987f3f2f0b2e4046f09247d 1 647 +,md5:8fdc30d821ff25b48b6182936cf72cd5 1 362 +,md5:26e5980fbaaefb58d84de6755d521845 1 446 +,md5:d342e4ee66b1c4db3e83e076c5dd7d44 1 336 +,md5:7f11e59ff50ce68b25c6120418df3d51 1 404 +,md5:b0183ab4aa646b9e8f95f61daf0e23a3 1 350 +,md5:8ed84d5653334535562a21058880db81 1 263 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 50433 50834 0.978 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f gt csa exon 51113 51216 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f gt csa exon 51319 51474 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f gt csa exon 51552 51623 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f gt csa exon 51711 51758 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f gt csa exon 51849 51896 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f gt csa exon 51983 52055 1 - . Parent=mRNA25 md5:063b1024d68e26716b7f38caf958316f gt csa exon 52163 52242 1 - . Parent=mRNA25 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 50475 50702 . + . ID=gene22 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 50475 50702 . + . ID=mRNA26;Parent=gene22;Target=md5:950b7715ab6cc030a8c810a0dba2dd33 1 228 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 50475 50702 1 + . Parent=mRNA26 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 53602 54829 . - . ID=gene23 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 53602 54829 . - . ID=mRNA27;Parent=gene23;Target=md5:16258f1ad08d9c0c91c627eefad05949 1 427 -,md5:2642a22855698a3125c99a9759f9147c 1 627 -,md5:752fa8c75ecef45cfa9cf0c5a59afe49 1 413 -,md5:0743a82e324754dfc94ed4c0cd8a8816 1 417 -,md5:198a4aa7626135303d0e996d4e2775ef 57 528 +,md5:f692730f2bd8700f690f8a231d2e446b 1 431 -,md5:18fb5ebf5d11ec1db0d36de3ea2a049d 49 568 +,md5:ed9e14d2b83e7ea606c9d1d5fdbeb857 1 477 +,md5:7db3e698f27f19f0343e6b23af07a5b3 1 365 +,md5:6021387359d7e25495b6b804ebbbb0aa 1 414 +,md5:72f3e9cbd94835f59aa0a43b22a01b0f 1 248 +,md5:2fa0ef57b1f4391f7a2ae4283410311c 1 311 +,md5:215d14a53287c2aca2d8bd12b09aca14 49 319 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 53602 53914 0.994 - . Parent=mRNA27 md5:063b1024d68e26716b7f38caf958316f gt csa exon 54159 54335 1 - . Parent=mRNA27 md5:063b1024d68e26716b7f38caf958316f gt csa exon 54574 54829 0.992 - . Parent=mRNA27 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 53632 56652 . + . ID=gene24 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 53632 53909 . + . ID=mRNA28;Parent=gene24;Target=md5:5a03dd7605925c94812a9550acc2d354 1 279 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 53632 53909 0.991 + . Parent=mRNA28 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 54991 56652 . + . ID=mRNA29;Parent=gene24;Target=md5:dd287e28fe668e94028c1a241a6a1c7d 1 651 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 54991 55057 0.985 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f gt csa exon 55145 55230 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f gt csa exon 55300 55341 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f gt csa exon 55453 55498 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f gt csa exon 55618 55704 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f gt csa exon 55818 55873 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f gt csa exon 56036 56153 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f gt csa exon 56281 56339 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f gt csa exon 56449 56520 1 + . Parent=mRNA29 md5:063b1024d68e26716b7f38caf958316f gt csa exon 56635 56652 1 + . Parent=mRNA29 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 58115 62646 . + . ID=gene25 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 58115 59001 . + . ID=mRNA30;Parent=gene25;Target=md5:a12796a152e829b54f2f56b4910d701c 1 460 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 58115 58209 0.958 + . Parent=mRNA30 md5:063b1024d68e26716b7f38caf958316f gt csa exon 58461 58526 1 + . Parent=mRNA30 md5:063b1024d68e26716b7f38caf958316f gt csa exon 58624 58717 1 + . Parent=mRNA30 md5:063b1024d68e26716b7f38caf958316f gt csa exon 58796 59001 0.983 + . Parent=mRNA30 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 59010 59976 . + . ID=mRNA31;Parent=gene25;Target=md5:cc404517a12f1a399ab48b948f4e71ff 1 475 +,md5:33eefc92073ab38229f0ce775746b219 1 653 +,md5:cdbabc0602366c37167aba18498d8232 1 255 +,md5:e72969c46cd2e7d078d339cda62260a8 1 333 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 59010 59526 0.989 + . Parent=mRNA31 md5:063b1024d68e26716b7f38caf958316f gt csa exon 59607 59976 0.991 + . Parent=mRNA31 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 60190 60487 . + . ID=mRNA32;Parent=gene25;Target=md5:322e03bbf0f0ddac43d4ca12dd0cc795 1 298 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 60190 60487 0.987 + . Parent=mRNA32 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 61186 61974 . + . ID=mRNA33;Parent=gene25;Target=md5:3ab44e284886cca199c6a4d221725734 1 371 +,md5:f63fe9c59e53d9587766136a15864412 1 398 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 61186 61281 0.99 + . Parent=mRNA33 md5:063b1024d68e26716b7f38caf958316f gt csa exon 61565 61641 1 + . Parent=mRNA33 md5:063b1024d68e26716b7f38caf958316f gt csa exon 61724 61974 1 + . Parent=mRNA33 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 62196 62646 . + . ID=mRNA34;Parent=gene25;Target=md5:77ba8b822b44308184b4dcab6ecfa75e 1 448 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 62196 62646 0.921 + . Parent=mRNA34 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 60319 61000 . - . ID=gene26 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 60319 61000 . - . ID=mRNA35;Parent=gene26;Target=md5:c94289917098254e5d5b7c3ed48e81b7 1 682 +,md5:48f4c66f41d3805c7213639bcb949d6a 1 559 +,md5:1b775af1ef6f8f8b80ba60a8245cba0b 1 453 +,md5:2acbf49eaca817b303d60c7c22dfdd15 1 500 +,md5:9b6924737e47f2eed133a565b35dd804 1 496 +,md5:653662b06e7e300256655269264f4004 1 452 +,md5:81a8f87434a337a21077462e2a1cb5c9 1 409 +,md5:1634572862a7fc3d7dcb1ca5950cf137 1 390 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 60319 61000 0.997 - . Parent=mRNA35 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 63106 64320 . + . ID=gene27 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 63106 64320 . + . ID=mRNA36;Parent=gene27;Target=md5:c4e23aeca494361878d3407ae5c05e3d 1 598 -,md5:bbbbef70abd153db9376c364e9fafbae 1 490 -,md5:67e8b62becffff524bac4f51bfa344e1 1 412 +,md5:3b10d6f56bfea7b6b57a41146f6c140b 1 345 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 63106 63178 1 + . Parent=mRNA36 md5:063b1024d68e26716b7f38caf958316f gt csa exon 63271 63391 1 + . Parent=mRNA36 md5:063b1024d68e26716b7f38caf958316f gt csa exon 63468 63683 1 + . Parent=mRNA36 md5:063b1024d68e26716b7f38caf958316f gt csa exon 63755 64320 0.979 + . Parent=mRNA36 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 64196 65033 . - . ID=gene28 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 64196 65033 . - . ID=mRNA37;Parent=gene28;Target=md5:e5089d2bdb42934617cd38749662eb21 1 632 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 64196 64605 1 - . Parent=mRNA37 md5:063b1024d68e26716b7f38caf958316f gt csa exon 64812 65033 0.995 - . Parent=mRNA37 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 65467 66157 . + . ID=gene29 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 65467 66157 . + . ID=mRNA38;Parent=gene29;Target=md5:f19b5223816de3060184fb9250936fce 1 621 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 65467 66058 0.992 + . Parent=mRNA38 md5:063b1024d68e26716b7f38caf958316f gt csa exon 66130 66157 0.964 + . Parent=mRNA38 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 67358 68396 . + . ID=gene30 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 67358 68396 . + . ID=mRNA39;Parent=gene30;Target=md5:893d07af699d973ed4e8e3423fc87165 1 749 +,md5:3b9295d3ee44af4cf4f79b2e27003f1b 1 423 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 67358 67550 1 + . Parent=mRNA39 md5:063b1024d68e26716b7f38caf958316f gt csa exon 67636 67908 0.969 + . Parent=mRNA39 md5:063b1024d68e26716b7f38caf958316f gt csa exon 68011 68396 0.99 + . Parent=mRNA39 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 69163 70072 . + . ID=gene31 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 69163 69968 . + . ID=mRNA40;Parent=gene31;Target=md5:79435902b3753af094ba24f8a4847978 1 536 +,md5:811cb37790973c1b417241d62fe2a569 1 603 +,md5:bce4ec40fb993e1733ea6d2d16398ed0 1 486 +,md5:979a4ec86ab17d2a4625c90ed575c145 1 362 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 69163 69265 0.971 + . Parent=mRNA40 md5:063b1024d68e26716b7f38caf958316f gt csa exon 69375 69598 1 + . Parent=mRNA40 md5:063b1024d68e26716b7f38caf958316f gt csa exon 69685 69968 0.996 + . Parent=mRNA40 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 69196 70072 . + . ID=mRNA41;Parent=gene31;Target=md5:49b16de93b5b34374e7e2a7e71253124 1 455 +,md5:979a4ec86ab17d2a4625c90ed575c145 1 362 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 69196 69265 0.986 + . Parent=mRNA41 md5:063b1024d68e26716b7f38caf958316f gt csa exon 69375 69598 1 + . Parent=mRNA41 md5:063b1024d68e26716b7f38caf958316f gt csa exon 69685 69831 0.816 + . Parent=mRNA41 md5:063b1024d68e26716b7f38caf958316f gt csa exon 70063 70072 0.4 + . Parent=mRNA41 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 71414 72803 . + . ID=gene32 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 71414 72009 . + . ID=mRNA42;Parent=gene32;Target=md5:e311a17e67c458d42ed86de05242f87b 1 168 +,md5:1f44f865b53e6414d5296a088f0a75e7 1 319 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 71414 71479 1 + . Parent=mRNA42 md5:063b1024d68e26716b7f38caf958316f gt csa exon 71579 71779 0.985 + . Parent=mRNA42 md5:063b1024d68e26716b7f38caf958316f gt csa exon 71914 72009 1 + . Parent=mRNA42 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 72121 72753 . + . ID=mRNA43;Parent=gene32;Target=md5:7d5ceada204939fc948a837d482fe57c 1 221 +,md5:a8b76267e5f1749ca29c5465c631ab8e 1 484 +,md5:b7056f0f128b406b094ebf5cb33fb74f 1 333 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 72121 72753 0.929 + . Parent=mRNA43 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 72137 72803 . + . ID=mRNA44;Parent=gene32;Target=md5:7882e88f260382672a97918b652cad4a 1 351 +,md5:fa15dcef7c84118ca9ee3f95600132c8 1 497 -,md5:03636fa4a9e17baae04ad57d13cdc386 79 466 +,md5:9a5ec5d4597ac1be9d10ba63ecc457c1 1 466 -,md5:df066a65ac8236486c7d59f90157d43e 1 429 -,md5:ace313cc0542136c91ac52da3c676d77 1 434 -,md5:2d0e152a577c91a47f0b5781e67cd3b0 1 431 -,md5:6db92a6a61672ceedb192c31b975e370 1 480 -,md5:14f58b2b12e291455a69d48e56728992 1 421 -,md5:1c07f0f3b1115fb653b7f47df5b1344b 1 237 +,md5:061cac88caefa5d8bba4a1ff47031dc3 1 337 +,md5:9b19d8ea196896df9be4cf56b285abf2 1 460 -,md5:a179a430866ce2f2826fec132cd9e71f 1 420 -,md5:b2925aa2103833c4c0e3e2ba4e27e66f 1 405 -,md5:b7056f0f128b406b094ebf5cb33fb74f 1 333 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 72137 72296 1 + . Parent=mRNA44 md5:063b1024d68e26716b7f38caf958316f gt csa exon 72369 72803 1 + . Parent=mRNA44 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 72359 74920 . - . ID=gene33 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 72359 72827 . - . ID=mRNA45;Parent=gene33;Target=md5:80d8c2289eb0b45dd9ab395572f44eae 1 443 +,md5:3c0dc775fc37af77e71cd10a45d4723c 1 444 +,md5:f2f65df067412c3be8da37366e71763f 1 430 +,md5:faf314d3fa8ba5d3d99734b83ebb7f7b 1 431 +,md5:897eae7810009eb141a5f887289d95c8 1 430 +,md5:e252994eb503f22fdc871a97738a525a 1 455 +,md5:11f83a01fda0f6e2061e6e17dc9cc0fe 1 418 +,md5:8e8cf2914e87c5de17ca1cea5185961d 1 418 +,md5:c39b7a42d0e463287ec636842fe38b67 1 417 +,md5:dc0b347c18391d65d897b1c1f14bc31f 1 417 +,md5:5a9fcf1a7370455e62e2701803939c8e 1 365 +,md5:3f342edcab14d21711f3d75e3ff81743 1 416 +,md5:a3891b57fd37552bdad1be4e20266a5a 1 403 +,md5:cc7281740fd5e50cb1f19a22a728e790 1 354 +,md5:b9d8ea84787a6573a7bd2acdb795af44 1 401 +,md5:d056310e74cdfca4f2f5de040aabc6c6 1 405 +,md5:fd4ec29ab7c96a341ad546c954b7f557 1 369 +,md5:fd65d023d2d6b71c478da3cfa418cbbc 1 280 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 72359 72827 0.992 - . Parent=mRNA45 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 72390 74046 . - . ID=mRNA46;Parent=gene33;Target=md5:5a9fcf1a7370455e62e2701803939c8e 1 365 +,md5:cc7281740fd5e50cb1f19a22a728e790 1 354 +,md5:2c08f2fc011c03e5aa709690db242c3b 1 163 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 72390 72789 0.978 - . Parent=mRNA46 md5:063b1024d68e26716b7f38caf958316f gt csa exon 74021 74046 0.615 - . Parent=mRNA46 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 72390 74920 . - . ID=mRNA47;Parent=gene33;Target=md5:5a9fcf1a7370455e62e2701803939c8e 1 365 +,md5:cc7281740fd5e50cb1f19a22a728e790 1 354 +,md5:44f49124e83c2c61713d3c50b3a9a47c 1 166 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 72390 72800 0.919 - . Parent=mRNA47 md5:063b1024d68e26716b7f38caf958316f gt csa exon 74901 74920 0.75 - . Parent=mRNA47 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 79098 79663 . - . ID=gene34 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 79098 79663 . - . ID=mRNA48;Parent=gene34;Target=md5:e7ffec1ba9f35a3e29c9946f86b8fe72 11 314 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 79098 79127 0.767 - . Parent=mRNA48 md5:063b1024d68e26716b7f38caf958316f gt csa exon 79241 79487 0.866 - . Parent=mRNA48 md5:063b1024d68e26716b7f38caf958316f gt csa exon 79636 79663 1 - . Parent=mRNA48 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 86444 89957 . - . ID=gene35 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 86444 89957 . - . ID=mRNA49;Parent=gene35;Target=md5:2276b4a96eb715159638ed0f90239b89 87 582 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 86444 86516 0.767 - . Parent=mRNA49 md5:063b1024d68e26716b7f38caf958316f gt csa exon 89440 89702 0.683 - . Parent=mRNA49 md5:063b1024d68e26716b7f38caf958316f gt csa exon 89794 89957 0.823 - . Parent=mRNA49 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 90829 91133 . + . ID=gene36 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 90829 91133 . + . ID=mRNA50;Parent=gene36;Target=md5:88e24a075574a85734a081b57a7ec852 1 307 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 90829 91133 0.948 + . Parent=mRNA50 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 91050 91786 . - . ID=gene37 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 91050 91786 . - . ID=mRNA51;Parent=gene37;Target=md5:b18a91dba09f9ffefbe7b4a6aed19945 1 543 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 91050 91401 1 - . Parent=mRNA51 md5:063b1024d68e26716b7f38caf958316f gt csa exon 91524 91713 1 - . Parent=mRNA51 md5:063b1024d68e26716b7f38caf958316f gt csa exon 91786 91786 1 - . Parent=mRNA51 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 92903 94384 . - . ID=gene38 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 92903 93265 . - . ID=mRNA52;Parent=gene38;Target=md5:ddbfcce4683cac59087c5f26e674349b 1 266 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 92903 93008 1 - . Parent=mRNA52 md5:063b1024d68e26716b7f38caf958316f gt csa exon 93106 93265 1 - . Parent=mRNA52 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 93551 94384 . - . ID=mRNA53;Parent=gene38;Target=md5:d9d61048b8d25d868bda7f00a0831100 1 401 -,md5:a0d33d57c705a829d80c318c595fcccb 81 377 +,md5:41d17c6950c12d0d8ec2b305108f08ac 1 407 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 93551 93913 0.957 - . Parent=mRNA53 md5:063b1024d68e26716b7f38caf958316f gt csa exon 94017 94124 1 - . Parent=mRNA53 md5:063b1024d68e26716b7f38caf958316f gt csa exon 94367 94384 1 - . Parent=mRNA53 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 94706 96614 . - . ID=gene39 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 94706 96614 . - . ID=mRNA54;Parent=gene39;Target=md5:da4c1ce6a2ee20bb9c4c5d9462be98de 1 392 +,md5:c9a4247a29baa59833607fc71f58bb40 1 646 +,md5:e6343ecf374a95dd0356831650af82f1 1 422 +,md5:29b2d16dd6ee3e8669ae77b4e053ee20 1 398 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 94706 94771 0.871 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f gt csa exon 94877 94985 0.954 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f gt csa exon 95071 95147 1 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f gt csa exon 95234 95454 1 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f gt csa exon 95842 95947 0.991 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f gt csa exon 96036 96140 1 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f gt csa exon 96232 96330 1 - . Parent=mRNA54 md5:063b1024d68e26716b7f38caf958316f gt csa exon 96418 96614 0.987 - . Parent=mRNA54 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 98857 100804 . - . ID=gene40 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 98857 100804 . - . ID=mRNA55;Parent=gene40;Target=md5:4a2861ff4a54b0b8a099c7ca178c113f 1 392 -,md5:432d83294aa0f2f3fc1b7673977ea4d1 1 333 -,md5:50590ee6555b56ad95151d25d300c6fe 47 535 +,md5:08f77d13c4ad88c1c44c0314426f2218 1 525 -,md5:d75212b190b11adfcbc1b62e6d392ed1 1 383 -,md5:dd3ace06137c29bf383632984aadf8af 1 362 +,md5:eaca300e106a2e1c1897455c6a2cb618 1 661 +,md5:1fd1b5316d6ec8962be7986ceebf3ce6 1 577 +,md5:8bfbb0491705b51d42ef6d8ba0c3e2ef 1 437 +,md5:8e46b5509ea749211c8c5cacdc1e2500 1 326 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 98857 99121 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f gt csa exon 99200 99361 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f gt csa exon 99443 99511 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f gt csa exon 99613 99877 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f gt csa exon 100102 100226 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f gt csa exon 100327 100434 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f gt csa exon 100539 100646 1 - . Parent=mRNA55 md5:063b1024d68e26716b7f38caf958316f gt csa exon 100749 100804 0.982 - . Parent=mRNA55 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 103616 106973 . + . ID=gene41 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 103616 105860 . + . ID=mRNA56;Parent=gene41;Target=md5:0c4c41ad6668fd55d5f1140088f1064d 1 435 +,md5:b9155494bf5b0de513f322e685542888 103 366 +,md5:0e851efbbe2bfb244a388865f785495d 87 375 +,md5:f1cb6a33be382d29ff291be589f1ed70 71 401 +,md5:b289385ff9ca374ceb056d5950d090b5 68 518 +,md5:ddab1d6f7c76a6508e85423cd56d46e5 1 457 +,md5:257d2dc2f7c0bb730fe685a8052aaa63 22 358 +,md5:649b4501a3ba1d922dce7b623c7f6de9 1 549 -,md5:c24d4bd4c7cae864049bd096522750b1 1 495 -,md5:52b0aff6e54274ccb35b371b7630b68a 1 452 -,md5:085f029e3f483828cb30f70b141fa58a 1 452 -,md5:174d324a9dca8baddcdcd0dbef55f969 1 402 -,md5:0920b24475a189fbfc148593eec03cb6 88 460 -,md5:15ed737c8deffb63f79d93a8fecb5a93 1 367 -,md5:f8e9d021f04423c2ad6499f4ce6eca57 1 354 -,md5:a45d1a65f8024adcc2ce8bdcdfb36569 1 352 -,md5:07c4180bd9082b53416a778fee66e3f3 39 385 -,md5:15adef11b8ee98d85e7a5e3106495193 1 302 +,md5:f74aca5cee266c7bc442898be20363ae 1 302 +,md5:5db2b668ce1df476a932c078b6e77122 1 277 -,md5:e6338114b6c0dcc78811d3be5b36ff63 65 370 +,md5:940e92280507db531e4654cc1f1054ef 1 296 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 103616 103753 0.975 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f gt csa exon 103982 104035 0.981 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104118 104198 0.975 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104295 104455 0.932 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104649 104724 0.934 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104803 104928 0.841 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105010 105228 0.863 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105315 105428 0.912 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105500 105535 1 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105630 105860 0.827 + . Parent=mRNA56 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 103616 105860 . + . ID=mRNA57;Parent=gene41;Target=md5:0c4c41ad6668fd55d5f1140088f1064d 1 435 +,md5:d4793f2935cfa07221be201386cb079b 1 460 +,md5:e47b883ccda180d280195029954ea7f5 1 700 +,md5:b9155494bf5b0de513f322e685542888 103 366 +,md5:0e851efbbe2bfb244a388865f785495d 87 375 +,md5:257d2dc2f7c0bb730fe685a8052aaa63 22 358 +,md5:649b4501a3ba1d922dce7b623c7f6de9 1 549 -,md5:c24d4bd4c7cae864049bd096522750b1 1 495 -,md5:52b0aff6e54274ccb35b371b7630b68a 1 452 -,md5:085f029e3f483828cb30f70b141fa58a 1 452 -,md5:174d324a9dca8baddcdcd0dbef55f969 1 402 -,md5:0920b24475a189fbfc148593eec03cb6 88 460 -,md5:15ed737c8deffb63f79d93a8fecb5a93 1 367 -,md5:f8e9d021f04423c2ad6499f4ce6eca57 1 354 -,md5:a45d1a65f8024adcc2ce8bdcdfb36569 1 352 -,md5:07c4180bd9082b53416a778fee66e3f3 39 385 -,md5:15adef11b8ee98d85e7a5e3106495193 1 302 +,md5:f74aca5cee266c7bc442898be20363ae 1 302 +,md5:5db2b668ce1df476a932c078b6e77122 1 277 -,md5:e6338114b6c0dcc78811d3be5b36ff63 65 370 +,md5:940e92280507db531e4654cc1f1054ef 1 296 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 103616 103753 1 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f gt csa exon 103982 104035 1 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104118 104198 1 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104295 104724 0.921 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104803 104928 0.841 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105010 105228 0.863 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105315 105428 0.912 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105500 105535 1 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105630 105860 0.827 + . Parent=mRNA57 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 103706 105860 . + . ID=mRNA58;Parent=gene41;Target=md5:41ccefe046c76c005c6f83a09aac40de 99 409 +,md5:556ae7f08b7cc887b54786f0bc100dd4 78 357 +,md5:f1cb6a33be382d29ff291be589f1ed70 71 401 +,md5:b289385ff9ca374ceb056d5950d090b5 68 518 +,md5:ddab1d6f7c76a6508e85423cd56d46e5 1 457 +,md5:257d2dc2f7c0bb730fe685a8052aaa63 22 358 +,md5:649b4501a3ba1d922dce7b623c7f6de9 1 549 -,md5:c24d4bd4c7cae864049bd096522750b1 1 495 -,md5:52b0aff6e54274ccb35b371b7630b68a 1 452 -,md5:085f029e3f483828cb30f70b141fa58a 1 452 -,md5:174d324a9dca8baddcdcd0dbef55f969 1 402 -,md5:0920b24475a189fbfc148593eec03cb6 88 460 -,md5:15ed737c8deffb63f79d93a8fecb5a93 1 367 -,md5:f8e9d021f04423c2ad6499f4ce6eca57 1 354 -,md5:a45d1a65f8024adcc2ce8bdcdfb36569 1 352 -,md5:07c4180bd9082b53416a778fee66e3f3 39 385 -,md5:15adef11b8ee98d85e7a5e3106495193 1 302 +,md5:f74aca5cee266c7bc442898be20363ae 1 302 +,md5:5db2b668ce1df476a932c078b6e77122 1 277 -,md5:e6338114b6c0dcc78811d3be5b36ff63 65 370 +,md5:940e92280507db531e4654cc1f1054ef 1 296 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 103706 103731 0.885 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa exon 103799 103826 0.518 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa exon 103982 104035 0.944 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104118 104198 0.951 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104295 104455 0.888 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104649 104724 0.934 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa exon 104803 104928 0.841 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105010 105228 0.863 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105315 105428 0.912 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105500 105535 1 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105630 105860 0.827 + . Parent=mRNA58 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 105009 105860 . + . ID=mRNA59;Parent=gene41;Target=md5:c6730817f9a41f80296421e6b7da6f25 1 533 -,md5:c24d4bd4c7cae864049bd096522750b1 1 495 -,md5:52b0aff6e54274ccb35b371b7630b68a 1 452 -,md5:085f029e3f483828cb30f70b141fa58a 1 452 -,md5:174d324a9dca8baddcdcd0dbef55f969 1 402 -,md5:0920b24475a189fbfc148593eec03cb6 88 460 -,md5:15ed737c8deffb63f79d93a8fecb5a93 1 367 -,md5:f8e9d021f04423c2ad6499f4ce6eca57 1 354 -,md5:a45d1a65f8024adcc2ce8bdcdfb36569 1 352 -,md5:07c4180bd9082b53416a778fee66e3f3 39 385 -,md5:15adef11b8ee98d85e7a5e3106495193 1 302 +,md5:f74aca5cee266c7bc442898be20363ae 1 302 +,md5:5db2b668ce1df476a932c078b6e77122 1 277 -,md5:e6338114b6c0dcc78811d3be5b36ff63 65 370 +,md5:940e92280507db531e4654cc1f1054ef 1 296 - md5:063b1024d68e26716b7f38caf958316f gt csa exon 105009 105228 0.864 + . Parent=mRNA59 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105315 105428 0.912 + . Parent=mRNA59 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105500 105535 1 + . Parent=mRNA59 md5:063b1024d68e26716b7f38caf958316f gt csa exon 105630 105860 0.827 + . Parent=mRNA59 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 106097 106973 . + . ID=mRNA60;Parent=gene41;Target=md5:1adc4b78b212af1a83a6460bd27222f0 1 425 +,md5:21c1b9817f74d01695e650726543cfbc 1 350 +,md5:c446b7e0b708aafe5473ef397e104ae3 1 248 +,md5:5b0a1904c2c8e69fe643091fee181037 1 377 +,md5:11a2689b92ee76c83cd57591ae940971 1 374 +,md5:d1a97200c69d88855784612802e7c024 1 366 +,md5:5ae608a9518c5417787d0da5f4dc93b7 26 261 +,md5:7be43cab2c3d57b779ea0f8ceeacfc0c 1 298 +,md5:802e6347770300a7bbc0064a90f1f061 1 130 +,md5:e5c6d7f52bae4b6b57c6320ef95f9b66 1 162 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 106097 106290 0.995 + . Parent=mRNA60 md5:063b1024d68e26716b7f38caf958316f gt csa exon 106566 106619 1 + . Parent=mRNA60 md5:063b1024d68e26716b7f38caf958316f gt csa exon 106702 106782 1 + . Parent=mRNA60 md5:063b1024d68e26716b7f38caf958316f gt csa exon 106878 106973 1 + . Parent=mRNA60 ### md5:063b1024d68e26716b7f38caf958316f gt csa gene 105662 105806 . - . ID=gene42 md5:063b1024d68e26716b7f38caf958316f gt csa mRNA 105662 105806 . - . ID=mRNA61;Parent=gene42;Target=md5:816e83d74c3a633c3ccc005f1c14d55a 30 173 + md5:063b1024d68e26716b7f38caf958316f gt csa exon 105662 105806 0.855 - . Parent=mRNA61 ### genometools-1.5.1/testdata/U89959_ests.checklist000066400000000000000000000147101211610345200214450ustar00rootroot0000000000000097350772e29b7881b149afbedf09290d ff7357d7a1877d31d94543a13d64fa0e cc954bf1761c4c9f05f8822afb1079e3 70facb44682374068ef43fd0a6e116b5 300d9c80d9f566412745a6bda32e3e12 41ccefe046c76c005c6f83a09aac40de 0d914f8b8fdfef05d05e32a617ce8737 634e9a3d54562a834a900edb41abe7d4 7ba0b8c1bb50abf3c5a844abacf9fe67 f28eda487869903339de7a431f00fccd af2486ba93823b9389100222c0ddffdb c446b7e0b708aafe5473ef397e104ae3 d1a97200c69d88855784612802e7c024 979a4ec86ab17d2a4625c90ed575c145 649b4501a3ba1d922dce7b623c7f6de9 2acbf49eaca817b303d60c7c22dfdd15 9a5ec5d4597ac1be9d10ba63ecc457c1 3b10d6f56bfea7b6b57a41146f6c140b 08f77d13c4ad88c1c44c0314426f2218 835eb4298c428885b3d16d0e4514c30b 88e24a075574a85734a081b57a7ec852 f55d7bcc44b78111563b02f8a19805ee cdced248d13c7c0f89e7e889cc30164a e47b883ccda180d280195029954ea7f5 7f11e59ff50ce68b25c6120418df3d51 ed9e14d2b83e7ea606c9d1d5fdbeb857 44f49124e83c2c61713d3c50b3a9a47c b7056f0f128b406b094ebf5cb33fb74f e6338114b6c0dcc78811d3be5b36ff63 061cac88caefa5d8bba4a1ff47031dc3 1c07f0f3b1115fb653b7f47df5b1344b 802e6347770300a7bbc0064a90f1f061 d4793f2935cfa07221be201386cb079b a7fa97bc84c3aebaea34e169b73094c9 03636fa4a9e17baae04ad57d13cdc386 c6826f50615c7fb2eb70e294bb7202cb 0920b24475a189fbfc148593eec03cb6 7882e88f260382672a97918b652cad4a 15adef11b8ee98d85e7a5e3106495193 77ba8b822b44308184b4dcab6ecfa75e 8fdc30d821ff25b48b6182936cf72cd5 5ae608a9518c5417787d0da5f4dc93b7 3ab44e284886cca199c6a4d221725734 2c08f2fc011c03e5aa709690db242c3b 7d5ceada204939fc948a837d482fe57c d342e4ee66b1c4db3e83e076c5dd7d44 26e5980fbaaefb58d84de6755d521845 0c4c41ad6668fd55d5f1140088f1064d 3ff6374febf91a5f28c3f7bcc4ccd774 a0d33d57c705a829d80c318c595fcccb 50590ee6555b56ad95151d25d300c6fe f74aca5cee266c7bc442898be20363ae 198a4aa7626135303d0e996d4e2775ef 0e851efbbe2bfb244a388865f785495d 556ae7f08b7cc887b54786f0bc100dd4 38229ac075d9c6d15fd1152c4eccc834 0f6d1e4ce29d042b5804f8ae8bd9c43a b0183ab4aa646b9e8f95f61daf0e23a3 322e03bbf0f0ddac43d4ca12dd0cc795 dd3ace06137c29bf383632984aadf8af 1634572862a7fc3d7dcb1ca5950cf137 e72969c46cd2e7d078d339cda62260a8 893d07af699d973ed4e8e3423fc87165 5db2b668ce1df476a932c078b6e77122 21c1b9817f74d01695e650726543cfbc e311a17e67c458d42ed86de05242f87b a12796a152e829b54f2f56b4910d701c 7f0facaa45cacec8ffaa0c98a51edf56 3b9295d3ee44af4cf4f79b2e27003f1b 67e8b62becffff524bac4f51bfa344e1 8bbc72e5847196327c25661544c6bdf9 c94289917098254e5d5b7c3ed48e81b7 c24d4bd4c7cae864049bd096522750b1 2642a22855698a3125c99a9759f9147c 741ff4d6dd193d77cc75fb61f373ca5b d9d61048b8d25d868bda7f00a0831100 634ef96163dc4d4f8a585fe8059d867b 0743a82e324754dfc94ed4c0cd8a8816 a45d1a65f8024adcc2ce8bdcdfb36569 174d324a9dca8baddcdcd0dbef55f969 9b19d8ea196896df9be4cf56b285abf2 897eae7810009eb141a5f887289d95c8 3c0dc775fc37af77e71cd10a45d4723c 1b775af1ef6f8f8b80ba60a8245cba0b 3f342edcab14d21711f3d75e3ff81743 e252994eb503f22fdc871a97738a525a faf314d3fa8ba5d3d99734b83ebb7f7b 653662b06e7e300256655269264f4004 df066a65ac8236486c7d59f90157d43e ace313cc0542136c91ac52da3c676d77 8e8cf2914e87c5de17ca1cea5185961d 2d0e152a577c91a47f0b5781e67cd3b0 b9d8ea84787a6573a7bd2acdb795af44 354c93700a73d01ea73f641c62c593cd d056310e74cdfca4f2f5de040aabc6c6 f2f65df067412c3be8da37366e71763f 15ed737c8deffb63f79d93a8fecb5a93 4a2861ff4a54b0b8a099c7ca178c113f dc0b347c18391d65d897b1c1f14bc31f 494051ed1147d22a2b2967b64c329678 f1a0d426e93585553b21aa1a47aa2970 f63fe9c59e53d9587766136a15864412 81a8f87434a337a21077462e2a1cb5c9 14f58b2b12e291455a69d48e56728992 752fa8c75ecef45cfa9cf0c5a59afe49 f42df1d200fb31e1bed322fab31540d6 80d8c2289eb0b45dd9ab395572f44eae 07c4180bd9082b53416a778fee66e3f3 c39b7a42d0e463287ec636842fe38b67 a9dcd316817972a94c0af505715b10bc f692730f2bd8700f690f8a231d2e446b 11f83a01fda0f6e2061e6e17dc9cc0fe a179a430866ce2f2826fec132cd9e71f a3891b57fd37552bdad1be4e20266a5a e7ffec1ba9f35a3e29c9946f86b8fe72 41d17c6950c12d0d8ec2b305108f08ac bdc426cd84a477b9b48d7e7d1538fc85 940e92280507db531e4654cc1f1054ef eaca300e106a2e1c1897455c6a2cb618 33eefc92073ab38229f0ce775746b219 6021387359d7e25495b6b804ebbbb0aa 597ada174987f3f2f0b2e4046f09247d c9a4247a29baa59833607fc71f58bb40 811cb37790973c1b417241d62fe2a569 a3f1555a0375aea877145c8c372ae4af 1fd1b5316d6ec8962be7986ceebf3ce6 bce4ec40fb993e1733ea6d2d16398ed0 e40253c45f8d96170d6af32f8d8e3e05 1adc4b78b212af1a83a6460bd27222f0 79435902b3753af094ba24f8a4847978 2276b4a96eb715159638ed0f90239b89 dd287e28fe668e94028c1a241a6a1c7d 4e8ae3a74fefacbbb8650ba892c2b2da f19b5223816de3060184fb9250936fce e5089d2bdb42934617cd38749662eb21 bceada3d0ee38c76dafe93fd74e71dfe e24a612b49c52c8aca23eb196c1ebe06 48f4c66f41d3805c7213639bcb949d6a cc7281740fd5e50cb1f19a22a728e790 52b0aff6e54274ccb35b371b7630b68a fd65d023d2d6b71c478da3cfa418cbbc b2925aa2103833c4c0e3e2ba4e27e66f 18fb5ebf5d11ec1db0d36de3ea2a049d 215d14a53287c2aca2d8bd12b09aca14 5a03dd7605925c94812a9550acc2d354 16258f1ad08d9c0c91c627eefad05949 c4e23aeca494361878d3407ae5c05e3d 085f029e3f483828cb30f70b141fa58a cc404517a12f1a399ab48b948f4e71ff b280ddc383280ca975eeaa3329e34c14 6d3b4b9db4531cda588528f2c69c0a57 14c0ff5e76ef8ac009fdcc923f701356 a5f947d297585356da9380d22ac8c974 b9155494bf5b0de513f322e685542888 0870e7d5d9d76766ebd3dce1758b733f c69c15ebe466171a13ee5aa610e90e61 950b7715ab6cc030a8c810a0dba2dd33 5a9fcf1a7370455e62e2701803939c8e 7be43cab2c3d57b779ea0f8ceeacfc0c b289385ff9ca374ceb056d5950d090b5 6db92a6a61672ceedb192c31b975e370 754b35896aef0625da39ee42e61db715 8e46b5509ea749211c8c5cacdc1e2500 fd4ec29ab7c96a341ad546c954b7f557 527995da853a37f9c47e616ce237d523 cabe5b677d534fb65e0d2245f61e2bd1 d75212b190b11adfcbc1b62e6d392ed1 1f44f865b53e6414d5296a088f0a75e7 f8e9d021f04423c2ad6499f4ce6eca57 c6730817f9a41f80296421e6b7da6f25 b18a91dba09f9ffefbe7b4a6aed19945 816e83d74c3a633c3ccc005f1c14d55a 26ebd521c00f7b4d595086f162ab00e1 bbbbef70abd153db9376c364e9fafbae 9b6924737e47f2eed133a565b35dd804 432d83294aa0f2f3fc1b7673977ea4d1 fa15dcef7c84118ca9ee3f95600132c8 275dc2512038a6501b7d27e38165bec7 b1da76b1bfdf36225429a5be70ff88a2 49b16de93b5b34374e7e2a7e71253124 2fa0ef57b1f4391f7a2ae4283410311c 5b0a1904c2c8e69fe643091fee181037 11a2689b92ee76c83cd57591ae940971 ddab1d6f7c76a6508e85423cd56d46e5 a8b76267e5f1749ca29c5465c631ab8e 8bfbb0491705b51d42ef6d8ba0c3e2ef f1cb6a33be382d29ff291be589f1ed70 e6343ecf374a95dd0356831650af82f1 29b2d16dd6ee3e8669ae77b4e053ee20 e5c6d7f52bae4b6b57c6320ef95f9b66 7db3e698f27f19f0343e6b23af07a5b3 257d2dc2f7c0bb730fe685a8052aaa63 da4c1ce6a2ee20bb9c4c5d9462be98de f53ad09e45a4038f2261b9ee90353658 c7084aa0f01934072f9e244363059ca0 72f3e9cbd94835f59aa0a43b22a01b0f 8ed84d5653334535562a21058880db81 ddbfcce4683cac59087c5f26e674349b cdbabc0602366c37167aba18498d8232 950b7715ab6cc030a8c810a0dba2dd33 genometools-1.5.1/testdata/U89959_ests.checklist_uniq000066400000000000000000000146471211610345200225120ustar00rootroot0000000000000003636fa4a9e17baae04ad57d13cdc386 061cac88caefa5d8bba4a1ff47031dc3 0743a82e324754dfc94ed4c0cd8a8816 07c4180bd9082b53416a778fee66e3f3 085f029e3f483828cb30f70b141fa58a 0870e7d5d9d76766ebd3dce1758b733f 08f77d13c4ad88c1c44c0314426f2218 0920b24475a189fbfc148593eec03cb6 0c4c41ad6668fd55d5f1140088f1064d 0d914f8b8fdfef05d05e32a617ce8737 0e851efbbe2bfb244a388865f785495d 0f6d1e4ce29d042b5804f8ae8bd9c43a 11a2689b92ee76c83cd57591ae940971 11f83a01fda0f6e2061e6e17dc9cc0fe 14c0ff5e76ef8ac009fdcc923f701356 14f58b2b12e291455a69d48e56728992 15adef11b8ee98d85e7a5e3106495193 15ed737c8deffb63f79d93a8fecb5a93 16258f1ad08d9c0c91c627eefad05949 1634572862a7fc3d7dcb1ca5950cf137 174d324a9dca8baddcdcd0dbef55f969 18fb5ebf5d11ec1db0d36de3ea2a049d 198a4aa7626135303d0e996d4e2775ef 1adc4b78b212af1a83a6460bd27222f0 1b775af1ef6f8f8b80ba60a8245cba0b 1c07f0f3b1115fb653b7f47df5b1344b 1f44f865b53e6414d5296a088f0a75e7 1fd1b5316d6ec8962be7986ceebf3ce6 215d14a53287c2aca2d8bd12b09aca14 21c1b9817f74d01695e650726543cfbc 2276b4a96eb715159638ed0f90239b89 257d2dc2f7c0bb730fe685a8052aaa63 2642a22855698a3125c99a9759f9147c 26e5980fbaaefb58d84de6755d521845 26ebd521c00f7b4d595086f162ab00e1 275dc2512038a6501b7d27e38165bec7 29b2d16dd6ee3e8669ae77b4e053ee20 2acbf49eaca817b303d60c7c22dfdd15 2c08f2fc011c03e5aa709690db242c3b 2d0e152a577c91a47f0b5781e67cd3b0 2fa0ef57b1f4391f7a2ae4283410311c 300d9c80d9f566412745a6bda32e3e12 322e03bbf0f0ddac43d4ca12dd0cc795 33eefc92073ab38229f0ce775746b219 354c93700a73d01ea73f641c62c593cd 38229ac075d9c6d15fd1152c4eccc834 3ab44e284886cca199c6a4d221725734 3b10d6f56bfea7b6b57a41146f6c140b 3b9295d3ee44af4cf4f79b2e27003f1b 3c0dc775fc37af77e71cd10a45d4723c 3f342edcab14d21711f3d75e3ff81743 3ff6374febf91a5f28c3f7bcc4ccd774 41ccefe046c76c005c6f83a09aac40de 41d17c6950c12d0d8ec2b305108f08ac 432d83294aa0f2f3fc1b7673977ea4d1 44f49124e83c2c61713d3c50b3a9a47c 48f4c66f41d3805c7213639bcb949d6a 494051ed1147d22a2b2967b64c329678 49b16de93b5b34374e7e2a7e71253124 4a2861ff4a54b0b8a099c7ca178c113f 4e8ae3a74fefacbbb8650ba892c2b2da 50590ee6555b56ad95151d25d300c6fe 527995da853a37f9c47e616ce237d523 52b0aff6e54274ccb35b371b7630b68a 556ae7f08b7cc887b54786f0bc100dd4 597ada174987f3f2f0b2e4046f09247d 5a03dd7605925c94812a9550acc2d354 5a9fcf1a7370455e62e2701803939c8e 5ae608a9518c5417787d0da5f4dc93b7 5b0a1904c2c8e69fe643091fee181037 5db2b668ce1df476a932c078b6e77122 6021387359d7e25495b6b804ebbbb0aa 634e9a3d54562a834a900edb41abe7d4 634ef96163dc4d4f8a585fe8059d867b 649b4501a3ba1d922dce7b623c7f6de9 653662b06e7e300256655269264f4004 67e8b62becffff524bac4f51bfa344e1 6d3b4b9db4531cda588528f2c69c0a57 6db92a6a61672ceedb192c31b975e370 70facb44682374068ef43fd0a6e116b5 72f3e9cbd94835f59aa0a43b22a01b0f 741ff4d6dd193d77cc75fb61f373ca5b 752fa8c75ecef45cfa9cf0c5a59afe49 754b35896aef0625da39ee42e61db715 77ba8b822b44308184b4dcab6ecfa75e 7882e88f260382672a97918b652cad4a 79435902b3753af094ba24f8a4847978 7ba0b8c1bb50abf3c5a844abacf9fe67 7be43cab2c3d57b779ea0f8ceeacfc0c 7d5ceada204939fc948a837d482fe57c 7db3e698f27f19f0343e6b23af07a5b3 7f0facaa45cacec8ffaa0c98a51edf56 7f11e59ff50ce68b25c6120418df3d51 802e6347770300a7bbc0064a90f1f061 80d8c2289eb0b45dd9ab395572f44eae 811cb37790973c1b417241d62fe2a569 816e83d74c3a633c3ccc005f1c14d55a 81a8f87434a337a21077462e2a1cb5c9 835eb4298c428885b3d16d0e4514c30b 88e24a075574a85734a081b57a7ec852 893d07af699d973ed4e8e3423fc87165 897eae7810009eb141a5f887289d95c8 8bbc72e5847196327c25661544c6bdf9 8bfbb0491705b51d42ef6d8ba0c3e2ef 8e46b5509ea749211c8c5cacdc1e2500 8e8cf2914e87c5de17ca1cea5185961d 8ed84d5653334535562a21058880db81 8fdc30d821ff25b48b6182936cf72cd5 940e92280507db531e4654cc1f1054ef 950b7715ab6cc030a8c810a0dba2dd33 97350772e29b7881b149afbedf09290d 979a4ec86ab17d2a4625c90ed575c145 9a5ec5d4597ac1be9d10ba63ecc457c1 9b19d8ea196896df9be4cf56b285abf2 9b6924737e47f2eed133a565b35dd804 a0d33d57c705a829d80c318c595fcccb a12796a152e829b54f2f56b4910d701c a179a430866ce2f2826fec132cd9e71f a3891b57fd37552bdad1be4e20266a5a a3f1555a0375aea877145c8c372ae4af a45d1a65f8024adcc2ce8bdcdfb36569 a5f947d297585356da9380d22ac8c974 a7fa97bc84c3aebaea34e169b73094c9 a8b76267e5f1749ca29c5465c631ab8e a9dcd316817972a94c0af505715b10bc ace313cc0542136c91ac52da3c676d77 af2486ba93823b9389100222c0ddffdb b0183ab4aa646b9e8f95f61daf0e23a3 b18a91dba09f9ffefbe7b4a6aed19945 b1da76b1bfdf36225429a5be70ff88a2 b280ddc383280ca975eeaa3329e34c14 b289385ff9ca374ceb056d5950d090b5 b2925aa2103833c4c0e3e2ba4e27e66f b7056f0f128b406b094ebf5cb33fb74f b9155494bf5b0de513f322e685542888 b9d8ea84787a6573a7bd2acdb795af44 bbbbef70abd153db9376c364e9fafbae bce4ec40fb993e1733ea6d2d16398ed0 bceada3d0ee38c76dafe93fd74e71dfe bdc426cd84a477b9b48d7e7d1538fc85 c24d4bd4c7cae864049bd096522750b1 c39b7a42d0e463287ec636842fe38b67 c446b7e0b708aafe5473ef397e104ae3 c4e23aeca494361878d3407ae5c05e3d c6730817f9a41f80296421e6b7da6f25 c6826f50615c7fb2eb70e294bb7202cb c69c15ebe466171a13ee5aa610e90e61 c7084aa0f01934072f9e244363059ca0 c94289917098254e5d5b7c3ed48e81b7 c9a4247a29baa59833607fc71f58bb40 cabe5b677d534fb65e0d2245f61e2bd1 cc404517a12f1a399ab48b948f4e71ff cc7281740fd5e50cb1f19a22a728e790 cc954bf1761c4c9f05f8822afb1079e3 cdbabc0602366c37167aba18498d8232 cdced248d13c7c0f89e7e889cc30164a d056310e74cdfca4f2f5de040aabc6c6 d1a97200c69d88855784612802e7c024 d342e4ee66b1c4db3e83e076c5dd7d44 d4793f2935cfa07221be201386cb079b d75212b190b11adfcbc1b62e6d392ed1 d9d61048b8d25d868bda7f00a0831100 da4c1ce6a2ee20bb9c4c5d9462be98de dc0b347c18391d65d897b1c1f14bc31f dd287e28fe668e94028c1a241a6a1c7d dd3ace06137c29bf383632984aadf8af ddab1d6f7c76a6508e85423cd56d46e5 ddbfcce4683cac59087c5f26e674349b df066a65ac8236486c7d59f90157d43e e24a612b49c52c8aca23eb196c1ebe06 e252994eb503f22fdc871a97738a525a e311a17e67c458d42ed86de05242f87b e40253c45f8d96170d6af32f8d8e3e05 e47b883ccda180d280195029954ea7f5 e5089d2bdb42934617cd38749662eb21 e5c6d7f52bae4b6b57c6320ef95f9b66 e6338114b6c0dcc78811d3be5b36ff63 e6343ecf374a95dd0356831650af82f1 e72969c46cd2e7d078d339cda62260a8 e7ffec1ba9f35a3e29c9946f86b8fe72 eaca300e106a2e1c1897455c6a2cb618 ed9e14d2b83e7ea606c9d1d5fdbeb857 f19b5223816de3060184fb9250936fce f1a0d426e93585553b21aa1a47aa2970 f1cb6a33be382d29ff291be589f1ed70 f28eda487869903339de7a431f00fccd f2f65df067412c3be8da37366e71763f f42df1d200fb31e1bed322fab31540d6 f53ad09e45a4038f2261b9ee90353658 f55d7bcc44b78111563b02f8a19805ee f63fe9c59e53d9587766136a15864412 f692730f2bd8700f690f8a231d2e446b f74aca5cee266c7bc442898be20363ae f8e9d021f04423c2ad6499f4ce6eca57 fa15dcef7c84118ca9ee3f95600132c8 faf314d3fa8ba5d3d99734b83ebb7f7b fd4ec29ab7c96a341ad546c954b7f557 fd65d023d2d6b71c478da3cfa418cbbc ff7357d7a1877d31d94543a13d64fa0e genometools-1.5.1/testdata/U89959_ests.fas000066400000000000000000002775411211610345200202620ustar00rootroot00000000000000>gi|8690080|dbj|AV529797.1|AV529797 AV529797 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL48c08R 5', mRNA sequence ACTAATACTTTGATGGATGAGGAGAAAGTAGCAACTCTTGGCTTGCCAGAACAGCTCCCG TCACCTCAAGGACTGTTCCAGTCAACTCCATCGCCATTGTTTTCTATTAGTCAGCTGTCA GCAGCACTTCCCAATATTGGAAATCATGTTGTTATCAATCAGAAATTAAGCGCATTTGGT ATGCACTTTCCATTTCAAAGAGTGGTACCACTTGCCATGGACAGAGCTATCAAGGAGATT GTGTCTGGTATTGTTCAGCGAAGTGTTTGTATTGCATGCCAAACAACAAAGGAGCTTGTG CTAAAGGATTACGCCCTGGAACCCGATGAGTCACGTATTTATAATGCAGCTCACTTGATG GTTGCGAGTTTAGCTGGGAGTTTGGCTCATGTGACTTGCAAGGAACCCCTGCGCACTTCA ATATCCGGTCATCTACGGAATTCGCTTCAGGGTCTGAATATTTCAAATGATGCTCTTGAA CAAATTGTGCAACTTGTCACCAATGACAACCTGGATTTGGGTTG >gi|8690053|dbj|AV529770.1|AV529770 AV529770 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL47a02R 5', mRNA sequence ACTGTAGCCCTTGGTTCCTGCATTCCAACTGAACTTCCCACGCCAAGGTCGTGGAATGTT GATATTCTAGTTGACACAATCAAGCAGCTTCAGGCTCCTGGCATAAGCTGGAGGAAAGTA ATTGAGAATCTCGATCATGACGGATTTGACATCCCTAATATGGAGTCTTTCTCATTTTTT ATGCGGATCTATAAAGCTGCTTGCAAGGAGCCATTTCCTCTTGATGCTGTATGTGGTTCT GTCTGGAAAAATATGGATGGTCAATTATCCTTTCTTAAGCACGCAATATCTGCTCCACCA GAAGTATTCACCTTTATGCATTCTCCAAGGAAGCTGGTATATATTGATAACATGCACAGC CAAGAGCAACAGTTAGGACTATCCAATCATGCATGGCTGTCGCTCGATCTCTTGGATGTA CTGTGCCAATTGGCCGAGAGAGGTCATGCTGTTTTAGTTAGTTCGTTACTCCAGTATCCA CTCACACAGTGTCCTAGAACCTTGCTTCTTGGAATGACACA >gi|8689616|dbj|AV529333.1|AV529333 AV529333 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL34a01R 5', mRNA sequence TACGGAATTCGCTTCAGGGTCTGAATATTTCAAATGATGCTCTTGAACAAATTGTGCAAC TTGTCACCAATGACAACCTGGATTTGGGTTGTGCTGCTATTGAACAGGCTGCTACAGAAA AGGCAATACAAACAATTGATGCGGACATTGCTCAACAATTGTTGTTACGGAGAAAGCATA GAGATGGTGCTGGATCCTCCTTTTTCGATCCAAACATTCTATCACAGAATTCCGTCAGTT TTATACCCGAATCCCTCCGTCCAAAACCTGGACACCTCTCCCTGTCTCAGCAGAGAGTTT ATGAGGACTTTGTTCAACATCCTTGGCAAAAGC >gi|8689215|dbj|AV528932.1|AV528932 AV528932 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL23a03R 5', mRNA sequence ATCAAGCTCATCTGGTGATGTTGCGCTTGGTAGTGGTTATGGTCCAGTATCAGGAAAAGT TGCTTCTGAATTTTTGTCTAATGCTGGAAACGCTCGGATGGACATGGTCTCCCGGCCATC AGATATTTCTGTGGATGGTTTTGAATCTTCTCCAGTCTCACTTTTGAGCTCACAAGTCGA TCCAGCTGGTGACTCATCCAGTCTTCAATTTACTAAGTCACTACCAACCTCTGAATTGAA TCTGGCTGAATCCTCTGACGCTGCTACGAAAGAAACTGGAACATCACTGCAGACATTGAC TTCAGCTGCTACCATGGAACGACTTGGTGCTAGT >gi|8688760|dbj|AV528477.1|AV528477 AV528477 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL10c02R 5', mRNA sequence AGCAGTGCTTGTGTTTCATGACATGCTGAGTAGAGGGCTGAAACCCAATGCTGTTACTTA CAATACTCTGATCAAGGGGCTCTCTGAGGCTCACAGATATGATGAGATCAAAGATATCTT GATTGGAGGGAACGACGCATTTACCACTTTCGCTCCAGATGCCTGCACTTTTAATATTTT GATCAAAGCCCACTGCGATGCTGGTCATTTGGATGCAGCGATGAAGGTGTTCCAAGAAAT GCTGAATATGAAGTTGCATCCTGATTCAGCTTCTTATAGTGTTTTGATTCGTACTCTGTG CATGAGAAACGAATTTGATAGAGCTGAGACATTGTTCAATGAGTTATTTGAGAAGGAAGT ATTGTTAGGTAAGGATGAATGCAAGCCTCTCGCTGCAGCTTATAACCCAATGTTTGAATA CTTATGTGCCAATGGGAAAACAAAACAAGCGGAGAAAGTTTTCAGGCAGCTGATGAAAAG AGGAGTGCAAGATCCGCCCTCTTACAAGACTTTGATAAC >gi|8686177|dbj|AV526649.1|AV526649 AV526649 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZ18c11R 5', mRNA sequence CCACCATTGAGGTTTAACTTATACAAACAGATCTTTTTGAAATTGGATTCATCTAAGAAG CAGACTCTGTTTTCATGGCTGTTTACAATACCAAACTCTGTTTGGCCTCTGTTTTCTTGC TCTTAGGGCTTCTCTTGGCTTTTGACTTGAAGGGTATAGAAGCAGAAAGTCTTACCAAAC AGAAACTGGACTCGAAGATACTTCAGGATGAGATTGTGAAGAAAGTCAACGAAAACCCAA ACGCTGGATGGAAAGCTGCTATAAATGATCGATTTTCAAACGCCACTGTTGCAGAGTTTA AGCGTCTTCTCGGTGTTAAACCAACACCAAAGAAGCATTTCTTAGGTGTTCCTATTGTGA GCCATGATCCATCTTTGAAGCTACCTAAAGCTTTTGATGCTAGAACTGC >gi|8683519|dbj|AV523991.1|AV523991 AV523991 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL47e02F 3', mRNA sequence TCCTAAAATCTCTCCTACTGTATGTATAATTGTTACAACATAATATCAAAATACGCATAC ATATATACAAGTTGAAAGCTAAAGAGCTAGTGAGAATTGTCTGAGACCCAACCTCCCGAA ACCATTCCCTCGTCGACAGGCTTCAGGCCACCACAGGATCTGGCTACCGATTCAAACAGC TTCTCAATCTCAGGCGCACATCTGATGAAGGCTTGTTTCCAGAAGCTATATCTTGGGTTC TTTATTAGCTCAATGAATGTGATTAGAAGTCCCCATGGATGTGGCCTGTTCACAATTAGC CGTTCCAACAGCACTCTAGTTATTTGCTCCTGTATGATCTCCTGATCAGATTCGAAGAAT AGATAGAGCATGATGAAAGAAAAGTAATGAGTGTGGTTGTTGGGGTATCGAAGCTGATTG GCGATTGCATTAAGGAACAGATACCGCCCTTCCGTATCAAGTTCCATACTTAAATACTTG AACATCTGCAAGGCCACAACATTTTGAGCCTGTGTCTCACCGGCCTGAAGCTGCTGAATA GCCTGCATTCCAGTATATAGCACAAGCGAGTTGATCAATGGTACACTGTAACGGGTTCCA GCTG >gi|8682814|dbj|AV523286.1|AV523286 AV523286 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL23a03F 3', mRNA sequence ATACGCATACATATATACAAGTTGAAAGCTAAAGAGCTAGTGAGAATTGTCTGAGACCCA ACCTCCCGAAACCATTCCCTCGTCGACAGGCTTCAGGCCACCACAGGATCTGGCTACCGA TTCAAACAGCTTCTCAATCTCAGGCGCACATCTGATGAAGGCTTGTTTCCAGAAGCTATA TCTTGGGTTCTTTATTAGCTCAATGAATGTGATTAGAAGTCCCCATGGATGTGGCCTGTT CACAATTAGCCGTTCCAACAGCACTCTAGTTATTTGCTCCTGTATGATCTCCTGATCAGA TTCGAAGAATAGATAGAGCATGATGAAAGAAAAGTAATGAGTGTGGTTGTTGGGGTATCG AAGCTGATTGGCGATTGCATTAAGGAACAGATACCGCCCTTCCGTATCAAGTTCCATACT TAAATACTTGAACATCTGCAAGGCCACAACATTTTGAGCCTGTGTCTCACCGGCCTGAAG CTGCTGAATAGCCTGCATTCCAGTATATAGCACAAGCGAGTT >gi|8682693|dbj|AV523166.1|AV523166 AV523166 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL18h09F 3', mRNA sequence CAACGTAATGAGAGCTTAAAAATAAATGAGAAACTTGGACATAATCAGTTGATGGAGTAG GAACGAGAACAGACAGTCTGGAGAGATTCAGTGAAGAGAGATGAGAAGCTGGTCAAGGCC TGGAATACATTGGGCAGGCCGGTTTGTAGATTGTTGAGAGTCATAGCTCGTGTCACCTCC ACAGCCTTCACGTGCCTCATTACCTCATCCTCCACCTGCCTCTGACATGCCGCCAGCTCA CATTTCTTAGATAGCGGGTCCCGTGAGTCCAACACCTCCGGTCCAGGGCCTATCCCAACC GTCGAGTATGCCTGGTAGTACT >gi|8682455|dbj|AV522928.1|AV522928 AV522928 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL10c02F 3', mRNA sequence ATTTCATGCTTACAATATGTTTATAACCCAAATGTAAATTATAACAATTAGGAAGAGGTG AGGCTGCGGATGAGAAGGCCTTCGAAGGTGATTCCAGGTCCGAAAGCTAAGCCAAGTCCC CACTCTTGTGCTGCGTCACCTTTCTTCTTCAGCTCATCTCTCATATACTCCATCACATAC AGTATCGTGTTGCTGCTCACGTTCCCGTAATCCACCAACGCCCTTCTGCTGCTCTCCAGC TTCTCTTTCTCCAGCTTCAGTTTTGTCTCCAGACGGTTCAGAATCGCAGGTCCTCCTGGA TGAACAGCCCAGAACATGTCATTGAACTCCATCGACTCATCGCCAGCCTTTCCCATCAGC TTCTTGCAGAACTCTTCTATGTTCTCCTCTATCTTCTGCGGGAGGTCTCGTCCAAGCTTG AAGTTTATGCCTTCCTCAGTCAACCTCCCCTCGATCACGTTCTGTGTCCCCGGCAAGAAC TGCTGAACCGCATAGTGCAGCTCCATGAAAGGAGCTTCACACTCTCTCGGGTCAGCTCCG ATGATCACAGCAGC >gi|8679389|dbj|AV519862.1|AV519862 AV519862 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APD69d04F 3', mRNA sequence TAGAAAACATGTTTGTGAATCTTGAAGTTAAATAAATAAACTAAGACTCCTAAAATCTCT CCTACTGTATGTATAATTGTTACAACATAATATCAAAATACGCATACATATATACAAGTT GAAAGCTAAAGAG >gi|7612621|dbj|AV442217.1|AV442217 AV442217 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APZ38e01_r 5', mRNA sequence TGATTACTGGAACTCGTTGAGGGATTGAGAAAAAAATAATCACTACGAGAAAGATCCATG GCTGATAATTGTATCAGACTTCTTCACTCATCCTCTGTTCTCTTCTGTTTAGGGCTTCTA ATTTCATCCTTCAACTTGTAGCAGGGTATTGCAGCTGAAAATCTTTCCAAGCAGAAACTG ACCTCATGGATTCTTCAGAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTCGA TGGAAAGC >gi|7612394|dbj|AV441995.1|AV441995 AV441995 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APD19b11_r 5', mRNA sequence GGAACTCGTTGAGGGATTGAGAAAAAAATAATCAGAAGAGAAAGATCCATGGCTGATAAT TGTATCAGACTTCTTCACTCAGCCTCTGTTTTCTTCTGTTTAGGGCTTCTAATTTCATCC TTCAACTTGTTGCAGGGTATTGCAGCTGAAAATCTTTCCAAGCAGAAACTGACCTCATGG ATTCTTCAGAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGATGGAAAGCT TCTTTCAATGATCGGTTTGCAAACGCCACTGTTGCAGAGTTTAAGCGCCTTCTTGGTGTT AAACCAACACCAAAGACGGAATTTTTGGGTGTGCCTATTGTAAGCCATGATATATCTTTG AAGCTTCCAAAAGAATTTGATGCTAGAACCGCTTGGTCACAGTGCACCAGTATTGGAAGG ATC >gi|7612059|dbj|AV441666.1|AV441666 AV441666 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APD33a12_r 5', mRNA sequence CAGGAGTCCTCACCGATTGGCCTTGGACACCCCTCGGAAGTTTCAAGTACATCGTAATAG CACCATGGGCTGTCCATAGCACATACAGGTTTGTGACAGATGATCCAGAGAAGAGGGATC TCGGGTACTTCCTTGTGTTCCCATTCTTGCTCTTCAGAATTCTGCACAACCAGGTTTGGA TCTCTCTGTCCCGTTACTATACGTCCTCGGGAAAGAGACGCATCGTCGACAAGGGAATCG ACTTCAATCAGGTCGACAGGGAGACCAACTGGGATGACCAAATATTGTTCAACGGAGTGC TGTTCTATATAGGCATCAACCTATTGCCGGAGGCCAAACAACTTCCCTGGTGGAGAACTG AC >gi|7611662|dbj|AV441278.1|AV441278 AV441278 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APZ38e01_f 3', mRNA sequence CTAAATGGTATATACAATAGACTTCTTTTTGGGTTGAAAGTCGTTTTATTTCATTGGTAA CAACAACACAGTGGGAAATTATGTATTACAGAGTAGAGACACATATTCCTGTTTAAAATG AGGAAACAAGAAGATCATCTGAAGTAGTAATACCTTTAACTACGTTCCTGTCTGAAGGTA AACCAGCTACAACACCATGTTCAATGCCACATTCGTTTGTTCCTCTCCTGATCTTGAAGT ACCCATCATCACCCCAGCTTCGGTTCCATTGATTTGCAAGCAACCAATAATCTTCACCGT CATCAGAAGTTCCCCAGCCAATAAGTTTAACAGCATGACCTCCAATGTTAGTACCTGTTA TGTGCTTGTACACTCCAGATTTGTAATGCGCAAAGTCCTCGTAAACAGTGAAGGCAACCT CAACAGGTCCATTTTTGTAAACTTCTGCCATAATGTCATCAGGGTGAGATCTGACCTTGT ACGCACTAACACCATAATGTTTTGATTCACGCCAAAGCTGGTTTCCGCTAACACATTTCC TTGCACATTTTGGTGTAGGGTAAGCGGGTTCACATCCCGGGTGCGAGCAACCAGTATTGT CGAAGTATGGATCACACTCTTCAGTGACTACAC >gi|7610825|dbj|AV440461.1|AV440461 AV440461 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APD64c02_f 3', mRNA sequence GGCACAAAAAGGGACACAGCTCTTACATTCATGTTTCACTAGGCAGTCTCTTGTGTACAT TATACATATTTCGCATTTCCTCAGTTGACTCCGGTTACAAGATTCGTTTTTTAAAGCAAA GATCTAGGACTATCAGATTACAAATCATCTTGTAGCTGTGTTAGAAGCGCATCGGTCTCA TGGGCATCGATTTCACTGTTGGTTACTGTTCTGTTTTCGTCCACATCAATAAGAGCTAGG TAAGATTTGTCTTCAAGATCCCCCGACTGCCTTAACAATTCCAAAACGGCCTCTTTACTG GTAACATCCGATTCCTCTTCACAGAGCTTGAAGAAACCAGACAGCATCAACACCTTGGGC CTCCAATTGCTGGACCCTTCAGCCGAAAAAGCATTTCTAAGACAAGTCAAAGCCTCTGAA ATACACCTCTTTCTGGTATGACCAACAGCTAGAATCTCCCACGTACTTGAACTTGGTTTT CCTCCCATTTCAACCATGTG >gi|7610337|dbj|AV439986.1|AV439986 AV439986 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APD33a12_f 3', mRNA sequence GGAAATAGTACTCTTATTAATACCATAGTCATCGTTCTTAATTTGACTCTATCAATACCA TAATCGCCAAAAGTTTGATATGCATAAATATATGCGTGCGCTTTATATATGTTTCATAGT TCATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCA TTCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAG CCGTGGCTGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCA CACTCATGCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCACTC ATCGCCTTTCTCGGTAACCAGTTCTCACAGGAGTGGACATTCACCAGAGATTTTGGAACT ATCAATGCTGGTGTGGTATGATAGATACAATCTCTACGTAACTGCT >gi|5846657|gb|AI999752.1|AI999752 701557284 A. thaliana, Columbia Col-0, rosette-3 Arabidopsis thaliana cDNA clone 701557284, mRNA sequence GATCTNTAACAAAATGTGCCATCTATTCTTTAGTCTTTACAAACAAGCAGCAAATGGTTT GCCTTTCAGAATCAAAATTTAAGGTGTTTCTCGAATAGACAGAAGGAAGAGAAGAGAAGT CCCAGAAAGCTGTTCAGAAGGCGCATACAAATCATGTGTGCGTTGCTGCTGCAAGGAAAA NCACTTCCGCTGTAGCAGCCTGTTCTTTGTTTGATACCCCGGNCGTTATCTTCCAGTACA AAGGAGGAGTTTTTCACACCATCGCTAAAGAGAAGACACCAAAAGAAGGTACCTTTATGC AACCTAGCCATTCCCACTCCAACCTCGGTATGCGACCTGTTTCTG >gi|5846455|gb|AI999550.1|AI999550 701556366 A. thaliana, Columbia Col-0, rosette-3 Arabidopsis thaliana cDNA clone 701556366, mRNA sequence TTTAACNAGAAAGCATGGCAATCTTTTCTTTGAACAAATCTCCATAAATTACAGACAAAG ATAAAGCCGGAAACAAGAAAATGTTGCAGATAAAATCTAACAAAAGAAAGAACAATCGAA AAACTCTTCTTCTCCTTGTAATTTGCTCACAACAAAACCTCTTCTTCAGAGCCTCTTAAA GTGGCTTTCCACTTGTCTTGATATCATTTCTGATTGCTCCTTGAATCATCTTAACGATCA AATACTGAGCGCCTATGATAAGAGGGATGAGTTTCTTTCCTTTATCATCAGAGTAAGATC CATCTACCATCTTCTTGTCTACATGAATTGCTTTCCTCTGGTTTGTTGCTACATCAGTTA TCGCCTTAACCAAGTTCGGGATCCACGCTTCACCATTTGGAAGAGCCTTTTCGTCCTTAT CGTTCTTGCTGCATCTTCCGCTGTTCTCTGCATAGACTACCGCGATTGCAGAATCCTCAA ACTCTGTTTTCGCATCTATTTAACAGCCCGGATAGTTTTGAGGAG >gi|5845530|gb|AI998625.1|AI998625 701546353 A. thaliana, Columbia Col-0, rosette-2 Arabidopsis thaliana cDNA clone 701546353, mRNA sequence AATCTTGAAGTTAAATAAATAAACTAAGACTCCTAAAATCTCTCCTACTGTATGTATAAT TGTTACAACATAATATCAAAATACGCATACATATATACAAGTTGAAAGCTAAAGAGCTAG TGAGAATTGTCTGAGACCCAACCTCCCGAAACCATTCCCTCGTCGACAGGCTTCAGGCCA CCACAGGATCTGGCTACCGATTCAAACAGCTTCTCAATCTCAGGCGCACATCTGATGAAG GCTTGTTTCCAGAAGCTATATCTTGGGTTCTTTATTAGCTCAATGAATGTGATTAGAAGT CCCCATGGATGTGGCCTGTTCACAATTAGCCGTTCCAACAGCACTCTAGTTATTTGCTCC TGTATGATCTCCTGATCAGATTCGAAGAATAGATAGAGCATGATGAAAGAAAAGTAATGA GTGTGGTTGTTGGGGTATCGAAGCTGATTGGCGATTGCATTAAGGAACAGATACCGCCCT TCCGTATCAAGTTCCATACTTAAATACTTGAACATCTGCNAGGGCCACAACATTTGAGNC TGTGTCT >gi|5845361|gb|AI998456.1|AI998456 701545753 A. thaliana, Columbia Col-0, rosette-2 Arabidopsis thaliana cDNA clone 701545753, mRNA sequence GCNTTTTGAAGAATTGGGAAGAAACAAAACCAATTACTTTTTATTGCTTTTTGAAGAATT GGGAAGAAACAAAACCAATTACTTTTTATCTGACTGGTTACATTTAAGTACAACACAGAA GAATTCTTTNCACAAANTTACTATTTTTCTTCTATAGAAGACTACCAGTCAGACCCATAG TTGTGATACTGTTTGTTTTTCAATGATGCAAATATGGATATTATAACTATTATTAAATTA CATAAGTGTGGAAATAAAACCTAGCTATAAACACTGGNTCNTGAAAAAAGAAAGCNTNTA TGCAGAG >gi|5843191|gb|AI996286.1|AI996286 701551019 A. thaliana, Columbia Col-0, inflorescence-2 Arabidopsis thaliana cDNA clone 701551019, mRNA sequence GCTAATGAGGGAAATCAAACATAACAAGGGGTTATTGTGAGAGAGAACANAGGATCTTAT ACAAGTTGAAAATCCGCAACCANATAATCATAATCTACTCTCGGTAAATGGAATGTCAAT CCGCACTGACCATTTGCTCTCTCTTGCTCCTCTACCTTGTTANAGGATGNCTCCTCCTCT TTGGTCGGATCCCATCTTCTTCGTAGTCCATCACTCCACTTGGTTCCCCAAACATCTCCT TATTCCCTCTGATGTCAACATCCCCCTNCATGNACAGAGACTTCTTCACTTCTTCCACCC CTTCTTCTGCTTCCTTACGATGTTNTNTTGTCCATCTCACTCATATTGTCCGCCCATTTG ATCTTGTCTTGAATTGAAATGAGCAGATTTTCTGACGTGTTCAACCAGTTGGACAATGTG TGTAACATATTCCCTAGTTGNCCTGGGCTTAGATNCCTACCAGCTGNGAACGGAACTCAA AACATCTTTT >gi|5841805|gb|AI994900.1|AI994900 701500362 A. thaliana, Ohio State clone set Arabidopsis thaliana cDNA clone 701500362, mRNA sequence GGGTTGGCCATATGTTCAGCGCCTGCTGGTGGACTTGCTTCAGTTTCTTGAGCCATTTTT AAGAAATGCTGAACTCGGAGGACCGGTTCATTTCCTATACAAAGGGACATTGAGAGTATT ACTGGTTCTGCTTCATGATTTCCCAGAGTTCCTATGTGATTATCATTTTACTTTCTGTGA TGTGATTCCTTCAAGTTGCATACAAATGCGGAATATTATCCTCAGTTCTTTTCCACGGAA CATGAGGCTTCCTGATCCTTCTACCCCAAATTTAAAGATTGATTTGTTACCTGAGATAGT AGAAGCTCCCTGTATCCTTTCTGAGGTTGATGCTGCGCTAAAGGCAAAGCAAATGAAGAA TGACGTGGATGAGTATCTTACGTCGAGGCAGCAAAATTCAACTTTCTCAAGTGAGTTGAA GACAAAGTTACCTCTATCGTCCAGCGGGGCTAATTCCAGCTGGAACCCGTTACAGTGTA >gi|5840051|gb|AI993146.1|AI993146 701495464 A. thaliana, Ohio State clone set Arabidopsis thaliana cDNA clone 701495464, mRNA sequence CATTGTGTTGATTCTGGAATTCTTTGTGGGAACGAGAAATTTGTACAAGGGAGATTCATC ATGGCTGATAGTTGTTGTATCAGACTTCACTTATTAGCCTCTGTTTTCTTGCTCTTATTT TCATCCTTCAACTTGCAGGGTATTGCAGCGGAAAATCTTTCCAAGCAGAAACTGACCTCA CTGATTCTTCAGAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGTTGGAAA GCTGCTTTCAATGATCGGTTTGCAAATGCCACCGTTGCAGAGTTTAAGCGACTCCTCGGT GTTATACAAACACCAAAGACGGCATACTTAGGTGTACCTATTGTAAGACATGATTTACGT TGAACTTCCTAAAGAATTTGATGCTAGAACCGCTTGGTCACATTGCACCAGTATTCGAAG GATCTTAGGTCGGTTTTAATCTCTTAGCTTCCACTATCTCTGTCATTAACCCAATGATTT ACTGACTCTTCTTATGTCTTGTTCAAATTATCTCCTCTTTAGTGCACTAAAGATCAGGTG AACATCATTCCATTGAGTGGGTATATATTGACAATGTGTACTCTGGTNACNGATAGCTTA TGGTTTGGGTTCTTTTGGGTCATGTGGTCTTGCTGGCGATTGGTGCTGTGATCACTGCCG GCAGTTCTGCATCGAGTATACTTNGATGTTCCGTATCTCC >gi|5839790|gb|AI992885.1|AI992885 701493873 A. thaliana, Ohio State clone set Arabidopsis thaliana cDNA clone 701493873, mRNA sequence CTCTAGGCTCTGTATCGCTCGCTGCTCTTCCTGCCACAGATCGATAACCATGAATCCTGA GTACGACTATCTTTTCAAGCTCCTGCTTATCGGGGATTCTAGCGTAGGCAAGTCTTGTCT TCTCTTGAGATTCTCCGATGATTCTTATGTAGCGAGTTACATTAGCACTATTGGAGTCGA TTTTAAACATCAGGACTGTGGATCAAGATGGCACTACAACTAAGCTCCATATTTGGGCCA CTGCTGGTCAAGACCGGTTCAGGACTATTACCCGCAGTTGCTACCGTGGGGCACATGGAA TTATTATTGTCTACGATGTCACCGATGATGAATGCTTCAATAATGTCAACCACTGGTTGG GTGAAATTGGCCGCTACGCTACCGACAATGTCAACTAACCCGTTCCTGGGGACAATTCTT GACCTAGGGGAAACCAAGGGCCTTCCCTTTCGAAACTGCCCGGCCT >gi|5839694|gb|AI992789.1|AI992789 701493549 A. thaliana, Ohio State clone set Arabidopsis thaliana cDNA clone 701493549, mRNA sequence AAGAAAAAAAGACAAGGCATGGCCGCGGAAGAAGCGACGGAGTTCTACCTGAGATACTAT GTCGGTCACAAAGGGAAATTTGGACACGAGTTCCTGGAGTTCGAGTTTAGAGAGGACGGT AAGCTCCGTTACGCCAATAACTCTAACTACAAGAACGCTACTATTATCCGCAAGGAGGTA TTTCTCACCCCCGCCGTGCTCAAGGAGTGCAAGCGTATCGGCTCCGACAGCGAGATTCTG ACAGAAGCCGACAGCAATTGGCCGGAACCTGCACGTGTTGGCCAGCAAGAGCTCGAGATC GACTTGGGTAATGAGCATATCTCATTCGCTGCATCTAAGACTGGACCTCATGTTGCTTGC CAGCGCAGTAAAGATCCTGGAGGGCTTCGCATCTTCTACTATCTGGTTCAAGACCTGTGA TGGCATGATTTGGCGCTCATCTCACAGCACTTCCGAAATCAAGCCTCTCTAGGGGAGGAA ATCAGCTTCGTCACAAGC >gi|3450080|gb|AI100119.1|AI100119 34494 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105B20XP 3', mRNA sequence GTGCTTNTTTTCCTTATGATCCAGCTCTTCCACGCNCNCATGAACTATGAAACATATATA ANGCGCNCNCATTTTATGTTTCCNCGCNCACATATATTTATGCATATCAAGCTTTTGGTG ATTATGGTATTGATAGAGTCAAATTAAGCTCGGTGACTATGGTATTAATAAGAGTACTAT TTCCTTATCTCTTTGTGAACTAAGANNCATATATATATATATATATATATAAAGCAAACA TGTTCCAGAAT >gi|3449674|gb|AI099935.1|AI099935 34088 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138J5XP 3', mRNA sequence CCTTAGANGGTGGGAAATTGCATGAGTTTGGCACATCCCTTNTTCTNNCGGATTTNGGAT CNNAGTATGGGAAGCCCTGTCTCAGCCTNNGCTTCCAGCNTCTCCTCCTTCCACATCNTT AAAACTCCAACCTTGGAAGATTTTAGGAGAATGAGAGCGACACGCTCTGTGCTTCTTTTC CTTATGATCCAGCTCTTCCACGCACAAATGAACTATGAAACATATATAAAGCGCACACAT ATATTTATGCATATCAAGCTTTTGGTGATTATGGTATTGATAGAGTCAAATTAAGCTCGG TGACTATGGTATTAATAAGAGTACTATTTCCTT >gi|3449578|gb|AI099839.1|AI099839 33992 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127K5XP 3', mRNA sequence TTTCCAANTCGGGGNGTTTTACAANTTCCATANCGGGTACTTAAGNTTTGGNGGTNCATG CCANTTAANCTCATTGGCTGGGGAACTTCTGATGACGGCGAAGATTATTGGTTGCTTGCA AATCAAATGGANCCGAAGCTGGGGTGATGATGGTTACTTCAAGATCAGGNGAGGAACGAA CGAATGTGGCATTGAACAGAGTNTTGTAGCTGGTTTACCTTCAGNGAAGAACGTATTTAA AGGTATTACCACTTCAGATGATCTTCTGGTTTCCTCAGTCTAAACAAGACGATGTGTCCC TACTTCTGTAATATATCATTTGCAACTGTGTTGTAAGTTTAATATACCATTGAAAGAATC ACCTTCAATC >gi|2762922|gb|T46227.1|T46227 9490 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138J5T7, mRNA sequence CCAAAATCTCTGGTGAATGTCCACTCCTGTNAGAACTGGTTACCGAGAAAGGCGATGAGT GCAACTAGAGTGGCCGGCATATTGCACGCCTTAGAAGGATGGGAAATGCATGAGTGTGGC ACATCCCTTCTTCTCTCGGATTTGGACCAAGTATGGGAAGCCTGTCTCAGCCACGGCTTC CAGCCTCTCCTCCTTCCACATCATTAAAACTCCAACCTTGGAAGATTTTAGGAGAATNAG AGCGACACGNTCTGTGCTTCTTTTCCTTATGATCCAGCTCTTNCACGGACAAATGNACTA TGNAACATNTTNTAAAGGNGNACACATNTNTTTTNTG >gi|2762921|gb|T46226.1|T46226 9489 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138J4T7, mRNA sequence CCAAAANCTCTGGTGAATGTCCACTCCTGTNAGAACTGGTTACCGAGAAAGGCGATGAGT GCAACTAGAGTGGCCGGCATATTGCACGCNTTAGAAGGATGGGAAATGCATGANTNTGGC ACATCCCTTCTNCTCTCGGATTTGGACCAAGTATGGGAAGCCTNTCTCAGCCACGGCTTC CAGCCTCTCCTNCTTCCACATCATTAAAACTCCAACCTTGGANGATTTTAGGAGAAT >gi|2759942|gb|T42274.1|T42274 5537 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111I3T7, mRNA sequence ACTTCTTCACTCAGCCTCTGTTTTNTNCTGTTTAGGGCTTCTAATTTNATCCNTCAACTT GTTGCAGGGTATTGCAGCTGAAAATCTTTCCAAGCAGAAACNGACCTCATGGATTCTTCA GAATGAGATT >gi|2759743|gb|T44958.1|T44958 8221 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127K5T7, mRNA sequence CATTGTGTTGATTCTGGAATTCTTTGTGGGAACGAGAAATTTGTACAAGGGAGATTCATC ATGGCTGATAGTTGTTGTATCAGACTTCACTTATTAGCCTCTGTTTTCTTGCTCTTATTT TCATCCTTCAACTTGCAGGGTATTGCAGCGGAAAATCTTTCCAAGCAGAAACTGACCTCA CTGATTCTNCAGAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGTTGGAAA GCTGCTTTCAATGATCGGTTTGCAAATGCCACCGTTGCAGAGTTTAAGCGGCTCCTCGGT GTTATACAAACACCAAAGACGGGATACTTAGGGNGTACCNATTGTAAAGACATGATTTAN CGTTTNAAGNTTCCCAAAAGAATTTAATNCTAGGACCCGCTNGGNCANANNGCACCNGTT TTCGAGGGTCTTAGGGCGGNTTTAANCNNTNGGTTCCACT >gi|2759121|gb|T44328.1|T44328 7591 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124H12T7, mRNA sequence GGGTTGGCCATATGTTCCAGCGCCTGCTGGTGGACTTGCTTCAGTTTCTTGAGCCATTTT TAAGAAATNCTGAACTCGGAGGACCGGTTCATTTCCTATACAAAGGGACATTGAGAGTAT TACTGGTTCTNCTTCATGATTTCCCAGAGTTCCTATGTNATTATNATTTTACTTTCTGTN ATGTGATTCCTTCAAGTTGCATACAAATGCGGAATATTATCCTCAGTTCTTTTCCACGGA ACATGAGGCTTCCTGATCCTTCTACCCCAAATTTAAAGATTGATTTGTTACCTGAGATAG TAGAAGCTCCCTGTATCCTTTCTNAGGTTGATGCTGCGCTAAAGGCAAAGCAAAATTNAA GGATGACGTGGATGAGTATCTTACGGCGNGGCAGGAAANTTCAACCTTTCNAAGGTNGGT TNAGGCAAAGGTACTTCTTTTGGCCNGCGGGGGTNGTTCAANTTGGACCCNGTNNAAGGG NCCCCTTGG >gi|2749490|gb|AA651247.1|AA651247 31361 Lambda-PRL2 Arabidopsis thaliana cDNA clone 178C3XP 3', mRNA sequence CCCAAACAGGTTTCCTTNGGGNAGGNCCCCAGGGGNGGCCGGNAAACCCCNAAGGGGNNN TTTTTTCCCCNTTTCCCANGCCCCCCNAAGGGGTTTCCGTGCGGNTTTNCTTTCNTCCCC CCCCGCCNTTGTTGNTCCCAAATCTCCGGGGAATTCCCACCCCTGGGAGAACTGGTTCCC GGGAAAGGCNGATGGAGTGCAACTAGAGTGGCCNGGCATATTGCACGCCTTAGAAGGATG GGGAAACGCATGGAGTGTGGCACATCCCTTCTTCTCTCGGATTTGGACAAAGTATGGGAA GCCTGTCTCAGCCAACGNTTCCAGCCTCTCCTCCTTCCACATCATTAAAACTCCAACCTT GGAAGATTTTTGGAGAATGAGAGCGACACGCTCTGTGCTTCTTTTCCTTATGATCCAGCT CTTCCACGCACACATGAACTATGAAACATATATAAAGCGCACACATTTTATGTTTTACGC ACACATATATTTATGCATATCAAGCTTTTGGTGATTATGGTATTGATAGAGTCAAATTAA GCTCGGTGACTATGGTATTAATAAGAGTACTATTTCCTT >gi|2748705|gb|N95878.1|N95878 21603 CD4-16 Arabidopsis thaliana cDNA clone H1B11T7, mRNA sequence CATATTTCGCGGCAACTTTCTTCTGCAATGGTATCTNCTGTACCTAAACTCCATGCTTTG TTTGTCTCCAAGTCTCAACCAGTTCTCCGAGCCGCCAAAGTTACCAATGAAGAAAGGTCC ACCAAATCAAAACTCGCCAGGTCCTTGGCCCGTNCCGTGAACTCTAACCCGTGGTCGGAC GAACTCGAGTCTTCACTATCATCTCTTCATCCGTCCCAAACCATCTCCAGAACCACCGTT CTCCAAACCCTGCGTCTCATCAAGGTCCCTGCGGATGGTCTCCGGTTCTTTNACTGGGTT TCCAACAAGGGGTTTTCTTAACAAAGNGNAAGTCTTTCTTNCCTCATGTTAGAGTTCCTC GGGTNGAGCTNGGNAATNTCAAATGTGGGTTGGAAATNCCTTTGTNCTCCATNGNNGGGA GGTTAATTGGTTGNGTAAGGTCAAGGGTNGNTATTTTAA >gi|2748033|gb|N95955.1|N95955 21140 CD4-14 Arabidopsis thaliana cDNA clone F3F3T7, mRNA sequence CGTTTTATTTCATTGGTAACAACAACACAGTGGGAAATTATGTATTACAGAGTAGAGACA CATATTCCTGTTTAAAATGAGGAAACAAGAAGATCATCTGAAGTAGTAATACCTTTAACT ACGTTCCTGTCTGANGGTAAACCAGCTACAACACCATGTTCAATGCCACATTCGTTTGTT CCTCTCCTGATCTTGAAGTACCCATCATCACCCCAGCTTCGGTTCCATTGATTTGCAAGC AACCAATAATCTTCACCGTCATCAGAAGTTCCCCAGCCAATAAGTTTAACAGCATGACCT CCAATGTTAGTACCTGTTATGTGCTTGTACACTCCAGATTTGTAATGCGNAAAGTCCTCG TAAACAGTGNAGGNANCCTCAACAGGNNCNTTTTTGTAAAACTTCTGCCNNAATGNATCA GGGGNGGGTCTGNCCTGTTCGGGCTNACANCNTAAGTTTTGTTACGCCAANNGGTTCCGT NAAAAATTCTTGACATTTNGGTG >gi|1159193|gb|N38051.1|N38051 19278 Lambda-PRL2 Arabidopsis thaliana cDNA clone 217D15T7, mRNA sequence AGAAGGAACAACAAGAGAAGAGCAGGAAAAAGCCACAAAAGGGACATTGTTTATACCATT CTCACAGTTCCCCCTCAAGCAGTTACGTAGAGATTGTATCTATCATACCACACCAGCATT GATAGTTCCAAAATCTCTGGTGAATGTCCACTCCTGTGAGAACTGGTTACCGAGAAAGGC GATGAGTGCAACTAGAGTGGCCGGCATATTGCACGCCTTAGAAGGATGGGAAATGCATGA GTNTGGCACATCCCTTCTTCTCTCGGATTTGGACCAAGTATTGGGGAGCCTGTNTTAAGC CACGGTTTCCAGCNTTTTCCTNCTTTCCANAATNTTTNAAAACNTCCAACCCTTTGGANG GTTTTTGGGGGGATTTGNGGGCCCACACGCTTTTGNGTTTTTTTCCCCTTANNGNCCCAN TTTTTTNCGGGGNAAAA >gi|2747682|gb|H76955.1|H76955 17386 Lambda-PRL2 Arabidopsis thaliana cDNA clone 199P18T7, mRNA sequence CACATAACAGGTACTAACATTGGAGGTCATGCTGTTAAACTTATTGGCTGGGGAACTTCT GATGACGGTGAAGATTATTGGTTGCTTGCAAATCAATGGAACCGAAGCTGGGGTGATGAT GGGTACTTCAAGATCAGGAGAGGAACAAACGAATGTGGCATTGAACATGGTGTTGTAGCT GGTTTACCTTCAGACAGGAACGTAGTTAAAGGTATTACTACTTCAGATGATCTTCTTGTT TCCTCATTTTAAACAGGAATATGTGTCTCTACTCTGTAATACATAATTNCCCACTGTGTT GTTGTTACCAATGAAATAAAACGGCTTTCAACCCAAAAAGGAAGTCTATTGTATATACCA TTTAGGCTTTTNGTTCATATTCAATTATAATGTGTTGTTGTTNCCATGNAAGATCCAANG GCATTCANCTNTTNCTNCATATNAA >gi|2747645|gb|H76651.1|H76651 17082 Lambda-PRL2 Arabidopsis thaliana cDNA clone 199N11T7, mRNA sequence TGCATCGTCGTCTTCCTCACGCNATTTGGTAATCCNATTCGTCTTCATCTAATTCCCTCC CTTCCNAGAATAATAATGTACCCGCNACCTCCCTCAAGCATCTACGCTCCTCCAATGCTG GTNAATTGCTCCGGTTGCCGGACGCCTCTCCAGCTCCCATCCGGCGCCCGANCTATTCGC TGCGCTCTCTGCCAGGCTGTNACTCATATCGCCGACCCTCGCACCGCCCCTCCTCCGCAA CCTTCCTCCGCCCCTTCTNCGCCTCCCCAAATCCACGTGGCTCCCGGTCAGCTGCCTCAC CCCCATGGCAGGAAGAGGGCCGTNATCTGTGGCATCTGGTATCGTTTCTTTTNGNCACGA GCTCAAAGGCTGCATCAACGGCGGCAAGTGCATGNGTAACTTCTTATNAACAAANTNAAT TNNTCCCAGATTNATTCTATGCTTACCGGGGAGAACT >gi|2747604|gb|H76393.1|H76393 18098 Lambda-PRL2 Arabidopsis thaliana cDNA clone 194B12T7, mRNA sequence TTTTAAAATTAGGACTGTGGAACAAGATGGCAAAACANTTAAGCTCCAAATTTGGGACAC TGCTGGTCAAGAACGGTTCAGGACTATTACTAGCAGTTACTACCGTGGGGCACATGGAAT TATTATTGTNTACGATGTCACAGATGAAGAAAGCTTCAATAATGTCAAGCAATGGTTGAG TGAAATTNATCGTTATGCTAGTGACAATGTCAACAAACTCCTTGTTGGAAACANGTCTGA TCTTACTGAAAACAGAGCCATTCCTTATGAAACTNCCAAGGCTTTTGCCGNTGAAATCGG GGTTCCCTTTTATGGGGGCTNGGTGCAAAANATGCTNCAAAACGGTNGNCCAGGGTTTCA TNGGCAATGTNTNNA >gi|2733258|gb|H37487.1|H37487 15616 Lambda-PRL2 Arabidopsis thaliana cDNA clone 182E10T7, mRNA sequence GGGCAGCCCACTGAGCCTGGGAACANNGTTGAGGGATTGAANAAAAAATAATCAGAAGAG AAAGATCCATNGCTGATAATTGTATCAGACTTCTTCACTCAGCCTCTGTTTTCTTCTGTT TAGGGCTTCTAATTTCATCCTTCAACTTGTTGCAGGGTATTGCAGCTGAAAATNTTTCCA AGCAGAAACTGACCTCATGGATTCTTCAGAATGAGATTNTAAAGGAAGTCAAATGAGNAT TCNAACGGCTGGNNTGGAAAA >gi|2722481|gb|AA712564.1|AA712564 31697 Lambda-PRL2 Arabidopsis thaliana cDNA clone 172P13T7, mRNA sequence GGGAAATGTCGACGAAAGGCGCGGCGGCGGCGTACCCTAGCGCGGCTCGGATATCTGATT CTCCATGTTATCTTCAGTACTCTGCTTCTNTCAAATGTNTTGAAGAATTTGGATCAGACA AGAGTAAATNCCAGGTTCATTTTNATGTGTACAAGGAATGCAAGAAGAAAGAGAGGGAAG CTCGACTGGAACGCAATAAGACACGGTCGTTGTTCTCGTGAATNCAGATCCTCGAATACC AATGATGTCTCAGAACATCACCTAGCTAGTAGTATCCTGTTGTTTCATTTGCAATGGCTG TGTTTGNATGANCTATCTAAGTAAACAAGTGGGAAGTTTTTNTNAATGTTACTTTTTACC CCCCTTGGNGG >gi|2597485|gb|R82906.1|R82906 5044 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109D5T7, mRNA sequence AGCTCTTCCACGCACACATGAACTATGAAACATATATAAAGCGCACACATTTTATGTTTT ACGCACACATATATTTATGCATATCAAGCTTTTGGTGATTATGGTATTGATAGAGTCAAA TTAAGCTCGGTGACTATGGTATTAATAAGAGTACTATTTCCTTATCTCTTTGTGAACTAA GAAACATATATATATATATATATATATAANGNAAACATGTTCCAG >gi|2597031|gb|T22420.1|T22420 4428 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105B20T7, mRNA sequence AGGTATGGCTGGTGGGAGAAGGAACAACAAGAGAAGAGCAGGAAAAAGCCACAAAAGGGA CATTGTTTATACCATTCTCACAGTTCCCCCTCAAGCAGTTACGTAGCGATTGTATCTATC ATACCACACCAGCATTGATAGTTCCAAAATCTCTGGTGAATGTCCACTCCTGTNAGGTAA GTNTTCAAAGCTACCCAATCCAACTAAATTTNTTAGAAGAGGTNGGCCNTATTTATAAAA AAAAACATCTTGCAGAACCTNGTTNCCCCGGAAANGCGNTNNAGTG >gi|2596953|gb|T22318.1|T22318 4326 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103P9T7, mRNA sequence CTTTTCAAGCTCCTGCTTATCGGGGATTCTGGCGTAGGCAAGTCTTGTCTTCTTTTGAGA TTCTCTGATGATTCTNATGTAGAAAGTTACATTAGCACTATTGGAGTCGATTTTAAAATT AGGACTGTGGAACAAGATGGCAAAACAATTAAGCTCCAAATTTGGGACACTGCTGGTCAA GAACGGTTCAGGACTATTACTAGCAGTTACTACCGTGGGGCACATGGAATTATTATTGTC TACGATGTCACAGATGNNGGAAGCTTCAATAATGTCAAGCAAATGGTTGAGTGNAATTNA TCCGTTATGCTAGTGNCAATGTCAACCAAACTCCCTGTTTGGGAACAAGTCCNGATCCTT CTTNNAAAACAAGAGCCCNTCCCTTTTGAAANNTNCCAAGGNTTTTTCCCNNTGG >gi|2596256|gb|T21132.1|T21132 3140 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90H7T7, mRNA sequence CTGGCTCTGTATCGCTCGCTGCTCTTCCTCCCACAGATCGAAAACCATGAATCCTGAGTA CGACTATCTTTTCAAGCTCCTGCTTATCGGGGATTCTGGCGTAGGCAAGTCTTGTCTTCT TTTGAGATTCTCTGATGATTCTAATGTAGAAAGTTACATTAGCACTATTGGAGTCGATTT TAAAATTAGGACTGTGGAACAAGATGGCAAAACAATTAAGCTCCAAATTTGGGACACTGC TGGTCAAGAACGGTTCAGGACTATTACTAGCAGTTACTACCGTGGGGCACATGGAATTAT TATTGTCTACGNTGGTCACAGATGANGAAAGCTTCAATAATGTCANGCAATGNNTTGAGT GNAATTAATCGTNATGCTAGTGNCAATNTCAACAAAACTCCTNNTTGGGAACAAGTTTTN TNCTTNCTTNAAACAANGGCCTTNCT >gi|2580948|gb|AA650856.1|AA650856 30970 Lambda-PRL2 Arabidopsis thaliana cDNA clone 288E9T7, mRNA sequence CATTGTGTTGATTCATGGAATTCTTTGTGGGAACGAGAAATTTGTACAAGGGAGATTCAT CATGGCTGATAGTTGTTGTATCAGACTTCACTTATNAGCCTCTGTTTTCTTGCTCTTATT TTCATCCTTCAACTTGCAGGGTATTGCAGCGGAAAATCTTTCCAAGCAGAAACNGACCTC ACTGATTCTTCAGAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGTTGGAA AGCNGCTTTCAATGATCGGTTTGCAAATNCCACCGTTGCAGAGTTTAAGCGACTCCTCGG TGTTATACAAACACCAAAGACGGCATACNNAGGTGTACCTATTGTAAGACATGATTTATC GTTGAAGCTTCCNAAAGAATTTGATGCAAGAACCGCTTGGGCACATTGGACCAGNATCCG AAGGACCTAAGGCCGGGTTAACCCCTANNTCCANAACCCCGGCANNAACCCANNGNTNCC GGGCCCCCCAAGGNTNGGNCAAAAAACCCCCCCT >gi|2048630|gb|AA395265.1|AA395265 27216 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124H12XP 3', mRNA sequence TGNNCCCANACCCNCCATCTTCTTCATCAGCCTNCTATTCTCGATCTGATCNGGGATNTN CAGGGCAATACTAGAGTCTGTTGGACCGGCTATTGTGACAGGCCACATCCATGGGGACTT CTAATCACATTCATTGAGCTNATAAAGACCCCAAGATATAGCTTCTGGAAACAAGCCTTC ATCAGATGTGCGCCTGAGATTGAGAAGCTGTTTGAATCGGTAGCCAGATCCTGTGGTGGC CTGAAGCCTGTCGACGAGGGAATGGTTTCGGGAGGTTGGGTCTCAGACAATTCTCACTAG CTCTTTAGCTTTCAACTTGTATATATGTATGCGTATTTTGATATTATGTTGTAACAATTA TACATACAGTAGGAGAGATTTTAGGNGTCTTAGTTTATTTATTTAACTTCAAGATTCACA AACATGTTTTCTAATTAC >gi|2047981|gb|AA394770.1|AA394770 26567 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165D3XP 3', mRNA sequence TTNGGGACCTTGCCNGTGGNAAACCCACCCTGGNAACCTCCAAGGGGNTTTTTGNTGGNN GNTTTAGGAAGGGAGGAGGGGGGANGTTGAGNCAACCGGNTTGGAAGGTGATTAAGGCAT TTTTGGTTCCCACCAAGGAAGCNGGAGGAAAGGATTGTTGCCCGGGGATTTACCATATAA CCCGATCCATGCTTGTCTCCCCGTACAAATCTNCNCCAGTCAAAATGCTTTTGTAGCTAA ATTTTGTTTAATTACGGCTCTTGTAAATGTAAAGAAGCAATGAGATTGAGATTTGCAATG AGACATCTTTACGAACCTTATGGAGTGTGCTGTATAGTTTTGTCTGTTTAAAGATTTTTT ATTTATTTTCATGAATC >gi|2446000|gb|AA605472.1|AA605472 30508 Lambda-PRL2 Arabidopsis thaliana cDNA clone 190I17XP 3', mRNA sequence CGGTCCCCCCAACTTCCGGCTGTNTAAGTCCGAAACCAGGGTTGNGGATCNCCATCCCGG TAGCTNNCCNNNGACCNCGGAANTCCCNCNAGACNGTTAGGNCCGAAAGGCNCTCCCAAA TGGTGAAGCGTGGANCCCGACTTGGTTAAGGCCGATAACTGATGTGGCAACCAACCCAGA GGAANGCCAATTCCATGTAGCCAAGAAGATGGTAGATGGATCTTACTCTGATGATAAAGG AAAGAAACTCATCCCTCTTATCATAGGCGCTCNGTATTTGATCGTTAAGATGATTCAAGG AGCAATCAGAAATGATATCAAGACAAGTGGAAAGCCACTTTAAGAGGCTCTGAAGAAGNG GTTTTGTTGTGAGCAAATTACAAGGAGAAGAAGNGTTTTTCGATTGTTCTTTCTTTTGTT AGATTTTATCTGCAACATTTTCTTGTTTCCGGCTTTATCTTTGTCTGTAATTTATGGAGA TTTGTTCAAAGAAAAGATTGCCATGCTTTCTGGTTAAATGAAATGGATGTTTCCC >gi|2412846|gb|AA597423.1|AA597423 29694 Lambda-PRL2 Arabidopsis thaliana cDNA clone 197P18T7, mRNA sequence CACATAACAGGTACTAACATTGGAGGTCATGCTGTTAAACTTATTGGCTGGGGAACTTCT GATGACGGTGAAGATTATTGGTTGCTTGCAAATCAATGGAACCGAAGCTGGGGTGATGAT GGGTACTTCAAGATCAGGAGAGGAACAAACGAATGTGGCATTGAACATGGTGTTGTAGCT GGTTTACCTTCAGACAGGAACGTAGTTAAAGGTATTACTACTTCAGATGATCTTCTTGTT TCCTCATTTTAAACAGGAATATGTGTCTCTACTCTGTAATACATAATTTCCCACTGTGTT GTTGTTACCAATGAAATAAAACGGCTTTCAACCCAAAAAGGAAGTCTATTGTATATACCA TTTAGCTTTTTTGTNCATATTCAATATAATGGGGTTGGTGGTTCCCATGGAAGGATCCAA AGGCATTCCACCTNTCTTCCATTTCG >gi|2393553|gb|AA586141.1|AA586141 28790 Lambda-PRL2 Arabidopsis thaliana cDNA clone 80B1XP 3', mRNA sequence CAGGGGTNTNCCCCCCCCCCCCGTCNAGNATCCAAGCGTNCCCTCCCGNGNCCGGGNTTT TNAAAGAANGCCGTAACCAATGGCCCGGGACCCTGCCCGNTTGGAAANCAAGNGCNCCGG AAANCNCTGGGGTAATGGNGCATATCCCCATCCGCNAACATCNTAAGATGGGATCNCTTG GTGGATNGCCCAGAGCAGTAATGACCCTGAAGGGACTTCGCATCTTCTACTATCTTGTTC CAGGACTTGAAATGTCTTGTTTTTTCGCTCATCTCTCTGCACTTCAAAATCAAGCCTATC TAGAGAAGAAAATCAGTTTGTGACATGTCAAGACGCGATGAATTTGTTGGGAACATGAGG ACTTTGTGACTGAAGTTTGGTTGTTTTTATGTCTCTGGTTCTCTGTTTTTTTTTTTTTGT TGGATTTGGGTGAAAGTGGGTATGTAAGATGTTCTACCTCAACTTTTGGTCCTTTTTTGT GTCAACATCCCATGTGAAGAACCTTTCATGAACCACAACCTATCTTCT >gi|623629|emb|Z47590.1|Z47590 ATTS4446 Strasbourg-A Arabidopsis thaliana cDNA clone FAI255 5', mRNA sequence AGCAGACTCTGTTTTCATGGCTGTTTACAATACCAAACTCTGTTTGGCCTCTGTTTTCTT GCTCTTAGGGCTTCTCTTGGCTTTTGACTTGAAGGGTATAGAAGCAGAAAGTCTTACCAA ACAGAAACTGGACTCGAAGATACTTCAGGATGAGATTGTGAAGAAAGTCAACGAAAACCC AAACGCTGGATGGAAAGCTGCTATAAATGATCGATTTTCAAACGCCACTGTTGCAGAGTT TAAGCGTCTTCTCGGTGTTAAACCAACACCAAAGAAGCATTTCTTAGGTGTTCCTATTGT GAGCCATGATCCATCTTTGAAGCTACCTAAAGCTTTTGATGCTAGAACTGCTTGGCCACA GTGCACTAGTATTGG >gi|453733|emb|Z29751.1|Z29751 ATTS2195 Ors-A Arabidopsis thaliana cDNA clone OAO139 5', mRNA sequence CAGATCTTTTTGAAATTGGATTCATCTAAGAAGCAGACTCTGTTTTCATGGCTGTTTACA ATACCAAACTCTGTTTGCCTCTGTTTTCTTGCTCTTAGGGCTTCTCTTGGCTTTTGACTT GAAGGGTATAGAAGCAGAAAGTCTTACCAAACAGAAACTGGACTCGAAGATACTTCAGGA TGAGATTGTGAAGAAAGTCAACGAAAACCCAAACGCTGGATGGAAAGCTGCTATAAATGA TCGATTTTCAAACGCCACTGTTGCAGAGTTTAAGCGTCTTCTCGGTGTTAAACCAACACC AAAGAAGCATTTCTTAGGTGTTCCTATTGTGAGCCATGATCCCATCTTTGAAGCTAC >gi|402964|emb|Z26362.1|Z26362 ATTS1481 Gif-SeedA Arabidopsis thaliana cDNA clone YAY048 3', mRNA sequence TTTAAATGAGAAAGATTGTGAGTCCTCACAAAACCACAAGACTCAATTTAATCAATCCTC AAATTTACATGATACCAACGTAATGAGAGCTTAAAANTAAATGAGAAACTTGGACATAAT CAGTTGATGGAGTAGGAACGAGAACAGACAGTCTGGAGAGATTCAGTGAAGAGAGATGAG AAGCTGGTCAAGGCCTGGAATACATTGGGCAGGCCGGTTTGTAGATTGTTGAGAGTCATA GCTCGTGTCACCTTCCACAGCCTTCACGTGCCTCATTACCTCATCCTTCCACCTGGCCTT TGACATGCCGGCAGTCACATTTTCTTCTCAGATAGGGGGGTCCCGTGAGTTCCACAACTT CGGTTCCAGGGGCTATTCCAACCGTTGGGGTATTGCCT >gi|402959|emb|Z26361.1|Z26361 ATTS1480 Gif-SeedA Arabidopsis thaliana cDNA clone YAY048 5', mRNA sequence GAAGAGCCTGTTAACAACCACATCAAGACCCAAATGGCAAAGAGCACTCTGACCATGTTA CCACTTCTTCCGACTGCTACAAGACCAAATTGGTGGTAAGGCACAAGAATTTGAAGGAGA TCCTTGACGCCGTTCAAGACTACTTCGACAAGGCTGCCTCCGCTGGGGACCAGGTCTCCG CCATGCTTGAGATCGGCCGGGCTGAGCTCGACCGCAGCTTCAGCAAGCTGAGGAAGACGG TGTATCATTCAAGCAGTGTGTTCAGCAACTTGAGCGCAAGCTGGGACCTCAAAACCCCCA TTGGCAGTCAAATACAAGCTCGATGCATCTACCCTGAATGATGAACAAGGCGGCCTCAAG AGCCTCTTGTTCACTCTAGACCGACTTCTCGCTTGGGAAAAGAAGCTTTATTGAGGATGT AAA >gi|403229|emb|Z26415.1|Z26415 ATTS1541 AC16H Arabidopsis thaliana cDNA clone TAI278 5' similar to A.Thaliana mRNA for ara-5,partail sequence, mRNA sequence GAAAAGAGAGAGAGAGATCTCTGGCTCTGTATCGCTCGCTGCTCTTCCTCCCACAGATCG AAAACCATGAATCCTGAGTACGACTATCTTTTCAAGCTCCTGCTTATGGGGGATTCTGGC GTAGGCAAGTCTTGTCTTCTTTTGAGATTCTCTGATGATTCTTATGTAGAAAGTTACATT AGCACTATTGGAGTCGATTTTAAAATTAGGACTGTGGAACAAGATGGCAAAACAATTAAG CTCCAAATTTGGGACACTGCTGGTCAAGAACGGTTCAGGACTATTACTAGCAGTTACTAC CGTGGGGCACATGGAATTATTATTGTCTACGATGTCACAGATGAAGAAAA >gi|398270|emb|Z25982.1|Z25982 ATTS1259 Versailles-VB Arabidopsis thaliana cDNA clone VBV38-10992, mRNA sequence ACCTCTTGAGTTTGTATGGCAGCCTTGGTAACAAGAAAGAGCTGTACCGAGTCTGGCACG TCTACAAATCTGTTGTCCCGAGCATTCCCAATTTGGGTTACCATGCCTTGGTCTCGTCGC TGGTNAGGATGGGAGACATTGAAGGGGCCNAGAAGGTATATGAGGAATGGCTTCCAGTCA AGTCTTCTTATGACCCCAGGATACCAAATCTTCTGATGAATGCGTATGTCAAAAACGACC AACTAGAGACAGCTGAGGGGTTGTTCGNCCACATGGTTGAAATNGGAGGAAAACCAAG >gi|397246|emb|Z25655.1|Z25655 ATTS1120 Versailles-VB Arabidopsis thaliana cDNA clone VBVYA12, mRNA sequence CAATCGCGGTAGTCTATGCAGAGAACAGCGGAAGATGCAGCAAGAACGATAAGGACGAAA AGGCTCTTCCAAATGGTGAAGCGTGGATCCCGAACTTGGTTAAGGCGATAACTGATGTAG CAACAAACCAGAGGAAAGCAATTCATGTAGACAAGAAGATGGTAGATGGATCTTACTCTG ATGATAAAGGAAAGAAACTCATCCCTCTTATCATAGGCGCTCAGTATTTGATCGTTAAGA TGATTCAAGGNGCAATCAGAAATGNTATCAAGACAAGTGGAAAGCCACTTTAAGAGGCTC TGAAGAAGAGGTTTTTGTTGTGAGCAAATTTCCAAGGNGGAAGAAGAGTTTTTCGATTGC CC >gi|397216|emb|Z25629.1|Z25629 ATTS1092 Versailles-VB Arabidopsis thaliana cDNA clone VBVID01, mRNA sequence GGACACAGCTCTTACATTCATGTTTCACTAGGCAGTCTCTTGTGTACATTATACATATTT CGCATTTCCTCAGTTGACTCCGGTTACAAGATTCGTTTTTTAAAGCAAAGATCTAGGACT ATCAGATTACAAATCATCTTGTAGCTGTGTTAGAAGCGCATCGGTCTCATGGGCATCGAT TTCACTGTTGTTTACTGTTCTGTTTTCGTCCACATCAATAAGAGCTAGGTAAGATTTGTC TTCAAGATCCCCCGACTGCCTTAACAATTCCAAAACGGCCTCTTTACTGGTAACATCCGA TTCCTCTTCACAGAGCTTGAAGAAACCAGACAGCATCAACACCTTGGGNCTCCAATTGCT GGNCCCTTCAGCCGAAAAAGCATTTCTAAG >gi|397215|emb|Z25628.1|Z25628 ATTS1091 Versailles-VB Arabidopsis thaliana cDNA clone VBVID01, mRNA sequence CGGTTGTCTGCAAGTGATGCTGCAATCCAGCTCGACTTAATCGGCAAAGTGCGTGGCATT CCAGACGCCGAAGAGTTCTTCCTCCAGCTCCCTGAGAATTTTAAGGACCGGAGAGTTTAT GGTTCCCTCCTCAATGCCTATGTGAGGGCCAAGTCGAGAGAAAAGGCTGAAGCCTGCTCA ACACCATGAGGGACAAAGGTTACGCCCTGCACCCGCTTCCCTTCAACGTCATGNTGACTC TCTACATGAACCTCAGGGAGTATGACAAAGTCGACGCTATGGTCTTCGAGATGAAGCAGA AAGNTATACGTCTCGACATTTACTCCTACAACA >gi|396603|emb|Z25487.1|Z25487 ATTS1001 Grenoble-B Arabidopsis thaliana cDNA clone GBGe40, mRNA sequence ACTAAACGGGTCTGGAGAAATGTACGTGCAAAAGTATCCGAAGTTGAAGATAAGACTAGT GGACGGGAGCAGCATGGCAGCTACGGTGGTTATCAACAATATTCCAAAGGAAGCCACGGA AATTGTCTTTAGAGGAAATCTCACAAAGGTGGCTTCGGCTGTTGTCTTTGCTCTGTGCCA AAAGGGCGTCAAGGTGGTCGTGTTACGCGAGGAGGAACACAGCAAACTCATCAAATCTGG GGTTGACAAGAATCTGGTACTGTCTACAAGCAATAGTTATTACTCCCCAAAGGTGTGGTT GGTGGGGGATGGAATAGAGAACGAAAGAGCAGATGAAAGCAAAGAAGGACCTCTTTGTTC CCTTTTCTCACTTTCGCCCAACAAACTCGCAAGACTGTTTCTACCAGTCCACTCCAGCTA TGCGTGTTCCCAAGTCTGCCCAAAACATCGACTCCTGTGAGAACTGGCTGGGGAGGAGGG TGATGAGTGCATGGAAAATAGGAGGTATAGTGCATGCACTTGAGGGTTGGGAGGAGCATG ACTGCGGCAACACTTGCAACGTCCTCCGTCTCCACGCCATATGGGAAGCTGCTCTTCGCC ATGATTTCCAACCTCTCCCACCATCTCCTCTATGTGCTTTTTTCATATTGATATATCTAT GTCCCCTTTCTTGATTATATCTACTTCCCTTCCATCATTGTTTCCTGTTTACTATGTTTT TCTATCGACTATATATAAGTACCCTTGTT >gi|17325|emb|Z18783.1|Z18783 ATTS0641 Versailles-VB Arabidopsis thaliana cDNA clone VBV12-30792 3' similar to cathepsin B-like cysteine proteinase precursor (EC 3.4.22.-). Swiss-Prot entry P05689, mRNA sequence TGAATATGAACAAAAAGCTAAATGGTATATACAATAGACTTCTTTTTGGGTTGAAAGTCG TTTTATTTCATTGGTAACAACAACACAGTGGGAAATTATGTATTACAGAGTAGAGACACA TATTCCTGTTTAAAATGAGGAAACAAGAAGATCATCTGAAGTAGTAATACCTTTAACTAC GTTCCTGTCTGAAGGTAAACCAGCTACAACACCATGTTCAATGCCACATTCGTTTGTNCC TCTCCTGATCTTGAAGTACCCATCATCACCCCAGCTTCGGTTCCNTTGATTTGCAAGCAA CCAATAATCTTCACCGTCATCAGAAGTTCCCCAGCCAATAAGTTTAACAGCATGACCT >gi|17300|emb|Z18780.1|Z18780 ATTS0623 Versailles-VB Arabidopsis thaliana cDNA clone VBV12-30792 5' similar to Cathepsin B-like cysteine proteinase precursor. Swiss-Prot entry P25792, mRNA sequence GCAAATCATTGTNNTTNATTACTGGAACTCGTTGAGGGATTGAGAAAAAANTAATCAGAA GAGAAAGATCCATGGCTGATAATTGTATCAGACTTCNTCACTCAGCCTCTGTTTTCTTCT GTTTAGGGCTTCTAATTTCATCCTTCAACTTNTTGCAGGGTATTGCAGCTGANAATCTTT CCAAGCAGAAACTGACCTCATGGATTCTTCAGAATGAGATTGTAAAGGAAGTCAATGAGA ATCCAAACGCTGGATGGAAAGCTTCTTTCAATGATCGGTTTGCAAACGCCACTNTTGCAG AGTTTAAGCGNNTTCTTGGNGTTAAACCANCACCAAAGACGGAATTTTTG >gi|17520|emb|Z18418.1|Z18418 ATTS0793 Grenoble-B Arabidopsis thaliana cDNA clone GBGa464 5', mRNA sequence GAGAAAGCGATACTGGAGGCAGATAAGAAAGGAGTGAAGGTGCTTAGTCTGGGTCTCATG AACCAAGGGGAGGAGCTTAACAGGAACNAGAGGTGTATATCCACAACCATCCAGTATATG AAAGTGAGACTGGTCGACCGGCAGTAGATTAGCAGCAGCTGTTGTGAT >SQ;19741042 GGATGAATTTGTTGAATCCATTAAAGTAAGTCAGTAACAAGCATCTCCGTTGTTACATTA CATCATGTCCTCTCTGAGGAATGCTACATTACATCGACCCAAAACATTGTCTCTATTTGT AGGATTACCTAACATCCAGGCCATTTCTTATGAAAAGGATCTTCCTTCTTCATCTCCCGG CTGCAAGTATACTTTGGCTTTTTTTACCAAGACAATGGGAGGGAAACCTCGCCGCAGCTC AAGTCTCTCAAAGCCTTCTTCATAAAATAAGCACTTGTATCCATCTACAGAGGAATGCTC GTTCACCAGGTACGTGAAATTTCGGTTTCGCAACTCCTCCACTACTATCTCTTCTTCTTT GGAATATCTCCACGGAAAATCATCTTCACAAAAGCGAGATATCCATTCATCGCACCAAAA GTGTCTATGTGAACCCACTCTTCCCAGCTAGATTTGGAGG >SQ;19741846 AATTAGAAAACATGTTTGTGAATCTTGAAGTTAAATAAATAAACTAAGACTCCTAAAATC TCTCCTACTGTATGTATAATTGTTACAACATAATATCAAAATACGCATACATATATACAA GTTGAAAGCTAAAGAGCTAGTGAGAATTGTCTGAGACCCAACCTCCCGAAACCATTCCCT CGTCGAAAGGCTTCAGGCCACCACAGGATCTGGCTACCGATTCAAACAGCTTCTCAATCT CAGGCGCACATCTGATGAAGGCTTGTTTCCAGAAGCTATATCTTGGGTTCTTTATTAGCT CAATGAATGTGATTAGAAGTCCCCATGGATGTGGCCTGTTCACAATTAGCCGTTCCAACA GCACTCTAGTTATTTGCTCC >SQ;19742246 GAAGATTTTTATTGAGTTTTATAAAATTTAACTAAGCATATCATACGACGAATTTTTTTG CCCTTTCTAACATATATGAAGCACGTGGCACCAAGGGTAACAAGGGTACTTATATATTGT CGATAGAAAAACATAGTAAACAGCAAACAATGATGGAAGGGAAGTAGATATAATCAAGAA AGGGGACATAGATGTATGAATATGAAAAAAGCTCATAGAGGAGATGGTGGGAGAGGTTGG AAATCATGGGGAAGAGCAGCTTCCATATGGCGTGGAGACGGAGGACGTTGCAAGTGTTGC CGCAGTCATGCTCCTCCCAAACCTCAAGTGCATGGACTATACCTCCTATTTTCCATGCAC TCATCACCCTCCTCCCCAGCCAGTTCTCACAGGAGTCGATGTTTTGGGGAGACTTGGGAA CAG >SQ;19798134 GGATAAAGGAAAACATTGATTTGGTGATTCGATAACAAAATGTGCCATCTATTCTTTAGC TCTTTACAAACAAGCAGCAAATGGTTTGCCTTTCAGAATCAAAATTTAAGGTGTTTCTCG AATAGACAGAAGGAAGAGAAGAGAAGTCCCAGAAAGCTGTTCAGAAGGCGCATACAAATC ATGTGTGCGTTGCTGCTGCAAGGAAAAGCACTTCCGCTGTAGCAGCCTGTTCTTTGTTTG ATACCCCGGCCGTTATCTTCCAGTAAAAAGGAGGAGTTTTTCAAACCATCGCTAAAGAGA AGAAACCAAAAGAAGGTACCTTTATGCAACCTAGCCATTCCCACTCCAACCTCGGTATGG GACCTGTTTCTGAGCACCGACAAGGCACTGCTATCTCTAAAGAGAATGTCTG >SQ;19798999 ACGACAAACGAAACGAGAGACATGAAATAAAACGTTACACATTACCGACTAATTCAGATG ATAGACAGCTAGCATTAACTAGCTGATATTGAAGAGTCCTTTGATTTCTCATTTTAAGCA TAATATATCATATGAGTAAAGCTTATAACTATCCGCTGGAGAAAAACATTGAATTTGAAG ACGAAGACGCTGACGTGGATGAAGACGCTGTCGTTTGGAACCGCCTTTGCCGGAAGCACT CCAGTGATATCGTAGGCGGCGCGTTGGACGACGGTGACGATGACGCTTTAACACCCGAAT CGTTCGGTGACTTTGGAGTAGTCTTGCCGGTGCCGGCTGTCTTGGGTGGCGGAGGCTGAT TGGTGACATTTACGGCGGCGGCGGTTATGGTCAGCA >SQ;19801463 CGGCTAATCCAGTTCCCTAAGCAACACTAATTCCAAATAGCTGTCACAAAAAGGGACACA GCTCTTACATTCATGTTTCACTAGGCAGTCTCTTGTGTACATTATACATATTTCGCATTT CCTCAGTTGACTCCGGTTACAAGATTCGTTTTTTAAAGCAAAGATCTAGGACTATCAGAT TACAAATCATCTTGTAGCTGTGTTAGAAGCGCATCGGTCTCATGGGCATCGATTTCACTG TTGTTTACTGTTCTGTTTTCGTCCACATCAATAAGAGCTAGGTAAGATTTGTCTTCAAGA TCCCCCGACTGCCTTAACAATTCCAAAACGGCCTCTTTACTGGTAACATCCGATTCCTCT TCACAGAGCTTGAAGAAACCAGACAGCATCAACACCTTGGGCCTCCAATTGCTGGACCCT TCAGCCGAAAAAGCATTTCTAAGACAAGTCAAAGCCTCTGAAATACACCTCTTTCTGGTA TGACCAACAGCTAGAATCTCCCACGTACTTGAACTTGGTTTTCCTCCCATTTCAACCATG TGGTCGAACAACCCCTCAGCTGTCTCTAGTTGGTCGTTTTTGACATACGCATTCATCAGA AGATTTGGTATCCTGGGGTCATAAGAAGACTTGACTGGAAGCCATTCCTCATATACCTTC TCGGCCCCTTCAATGTCTCCCT >SQ;19801855 GAAAACAACAACACATTATATTGAATATGAACAAAAAGCTAAATGGTATATACAATAGAC TTCTTTTTGGGTTGAAAGTCGTTTTATTTCATTGGTAACAACAACACAGTGGGAAATTAT GTATTACAGAGTAGAGACACATATTCCTGTTTAAAATGAGGAAACAAGAAGATCATCTGA AGTAGTAATACCTTTAACTACGTTCCTGTCTGAAGGTAAACCAGCTACAACACCATGTTC AATGCCACATTCGTTTGTTCCTCTCCTGATCTTGAAGTACCCATCATCACCCCAGCTTCG GTTCCATTGATTTGCAAGCAACCAATAATCTTCACCGTCATCAGAAGTTCCCCAGCCAAT AAGTTTAACAGCATGACCTCCAATGTTAGTACCTGTTATGTGCTTGTACACTCCAGATTT GTAATGCGCAAAGTCCTCGTAAACAGTGAAGGCAACCTCAACAGGTCCATTTTTGTAAAC TTCTGCCATAATGTCATCAGGGTGAGATCTGACCTTGTACGCACTAACACCATAATGTTT TGATTCACGCCAAAGCTGGTTTCCGCTAACACATTTCCTTGCACATTTTGGTGTA >SQ;19803773 GGTAAGAAAACAGCAAGTATATGGTTTTTAGAAGATAGGTTGTGGTTCATGAAAGGTTCT TCACATGGGATGTTGACACAAAAAAGGACTAAAAGTTGAGGTAGAACATCTTACATACCC ACTTTCACCCAAATCCAACAAAAAAAAAAAACAGAGAACCAGAGACATAAAAACAACCAA ACTTCAGTCACAAAGTCCTCATGTTCCCAACAAATTCATCGCGTCTTGACATGTCACAAA CTGATTTTCTTCTCTAGATAGGCTTGATTTTGAAGTGCAGAGAGATGAGCGAAAAAACAA GACATTTCAAGTCCTGAACAAGATAGTAGAAGATGCGAAGTCCTTCAGGATCATTACTGC TCTGGCAATCAACAAGAGATCCAATCTTAGATGTAGCGAATGAGATATGCTCATTACCCA AGACGATCTCGAGCTCTTGCTTTCCAACACGGTCAGGTTCCGGCCAATTGTTATCGTCTT CTTTCAGAATCTCGCTCTCGGAGACGATACGCTTGCATTCCTTGAGCACGGCGGGGGTGA GAAATACCTCCTTGCGGATAATAGTATCGTTCTTGTAGTTAGAGGTATTGGCGTAACGGA GCTTACCGTCCTCTCTAAACTCGAACT >SQ;19805724 AATAACCAACCAAAGGAGCTTAATTACAGACAAGACAGATTTGGGGGGATGTTGTGTAAA AACCAAGTAGTAGTGAATTGGAGCCTAGTCAAAAGAAGGAACACGTGTTCTAAGATTGGA AAGGATATTGCTAGGCTGGTCACGTCAATCAAGTTGAGCAGCAGCCGTTCTTCTGTGCCA CAGGCTGTCCTCTGATCTGCACGGTCGGTGGTCTTGCATTATTCCCAGCTGGTTGGCTAG CCATTCTCTCTTTGATGGATGCAGACATTGCCATGAAAGCCTGTTCTACGTTTGTAGCAT CTTTTGCACTAGTCTCCATAAAAGGAATCCCGATTTCATCGGCAAAAGCCTTGGCAGTTT CATAAGGAATGGCTCTGTTTTCAGT >SQ;19806050 AGATTCATGAAAATAAATAAAAAATCTTTAAACAGACAAAACTATACAGCACACTCCATA AGGTTCGTAAAGATGTCTCATTGCAAATGTCAATCTCATTGCTTGCTTTACATTTACAAG AGCCGTAATTAAACAAAATTTAGCTACAAAGCATTTTGACTGGAGAGAATTGTACGGTGA GACAAGCATGATCGGATATATTGTAATTCTCCGGGCAAAATCCTTTCTCTGCTTCTTGTG GAAACAAAATTGCTTTATTCACTTTAAATCCGATTGGTTAATCTTCTACTTCTTCTTTCT TACTCTCCATAAAACTCTCTTTGCAGTTTAAAGGTTGATTTACCATCGTCATGTTCAAAA TTTTGTTAAGTTCTTCATAGTCGAAGAAACCATTTCGATCA >SQ;19807151 GAAAAAACAATTTGTGGGTTTTAAATCGAGTCGTAAAACATTGTTATGCGAAGAAACCCA TAGAAAACCACTAAAGGCAGAAATGAAAAACAAGAATGTTGGAAAGATGAGGACCTCATC ATGAGGTAAAGCAAATAGGAAACGTGAAAAACAGAATAATAACCAACCAAAGGAGCTTAG TTACAGACAAGACAGATTTGGGGGGATGTTGTGTAAAAACCAAGTAGTAGTGAATTGGAG CCTAGTCAAAAGAAGGAACACGTGTTCTAAGATTGGAAAGGATATTGCTAGGCTGGTCAG GTCAATCAAGTTGAGCAGCAGACCGTTCTTCTGTGCCACAGGCTGTCCTCTGATCTGCAC GGTCGGTGGTCTTGCATTATTCCCAGACTGGTTGGCTAGCCATTCTCTCTTTGATGGATG CAGACA >SQ;19823046 CGGTTTTTAGAAGATAGGTTGTGGTTCATGAAAGGTTCTTCACATGGGATGTTGACACAA AAAAGGACCAAAAGTTGAGGTAGAACATCTTACATACCCACTTTCACCCAAATCCAACAA AAAAAAAAAAACAGAGAACCAGAGACATAAAAACAACCAAACTTCAGTCACAAAGTCCTC ATGTTCCCAACAAATTCATCGCGTCTTGACATGTCACAAACTGATTTCCTTCTCTAGATA GGCTTGATTTTGAAGTGCAGAGAGATGAGCGAAAAAACAAGACATTTCAAGTCCTGAACA AGATAGTAGAAGATGCGAAGTCCTTCAGGATCATTACTGCTCTGGCAATCAACAAGAGAT CCAATCTTAGATGTAGCGAATGAGATATGCTCATTACCCAAGACGATCTCGAGCTCTT >SQ;19823987 TGTGGGTTGAAAGTCGTTTTATTTCATTGGTAACAACAACACAGTGGGAAATTATGTATT ACAGAGTAGAGACACATATTCCTGTTTAAAATGAGGAAACAAGAAGATCATCTGAAGTAG TAATACCTTTAACTACGTTCCTGTCTGAAGGTAAACCAGCTACAACACCATGTTCAATGC CACATTCGTTTGTTCCTCTCCTGATCTTGAAGTACCCATCATCACCCCAGCTTCGGTTCC ATTGATTTGCAAGCAACCAATAATCTTCACCGTCATCAGAAGTTCCCCAGCCAATAAGTT TAACAGCATGACCTCCAATGTTAGTACCTGTTATGTGCTTGTACACTCCAGATTTGTAAT GCGCAAAGTCCTCGTAAACAGTGAAGGCAACCTCAACAGGTCCATTTTT >SQ;19825204 CGGTTGAAAGTCGTTTTATTTCATTGGTAACAACAACACAGTGGGAAATTATGTATTACA GAGTAGAGACACATATTCCTGTTTAAAATGAGGAAACAAGAAGATCATCTGAAGTAGTAA TACCTTTAACTACGTTCCTGTCTGAAGGTAAACCAGCTACAACACCATGTTCAATGCCAC ATTCGTTTGTTCCTCTCCTGATCTTGAAGTACCCATCATCACCCCAGCTTCGGTTCCATT GATTTGCAAGCAACCAATAATCTTCACCGTCATCAGAAGTTCCCCAGCCAATAAGTTTAA CAGCATGACCTCCAATGTTAGTACCTGTTATGTGCTTGTACACTCCAGATTTGTAATGCG CAAAGTCCTCGTAAACAGTGAAGGCAACCTCAACAGGTCCATTTTTGTAAACTTCTGCCA TAATGTCATCAGGGTGAGATCTGACCTTGTACGCAC >SQ;19825274 GGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAGTA CTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACCAA AAGCTTGATATGCATAAATATATGTGTGGGCTTTATATATGTTTCATAGTTCATTTGTGC GTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTAAA ATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCTGA GACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATGCA TTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCACTCATCGCCTTTC TCGGTAACCAGTTCTCACAGGAGTGGAAATTCACCAGAGA >SQ;19825742 GGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAGTA CTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACCAA AAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGTGC GTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTAAA ATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCTGA GACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATGCA TTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCACTCATCGCCTTTC TCGGTAACCAGTTCTCACAGGAGTG >SQ;19826275 AGATATTCTGGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAG GAAATAGTACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCAT AATCACCAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTT CATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCAT TCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGC CGTGGCTGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCAC ACTCATGCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCACTCA TCGCCTTTCTCGGTAACCAGTTCT >SQ;19827386 GCATTATACATATTTCGCATTTCCTCAGTTGACTCCGGTTACAAGATTCGTTTTTTAAAG CAAAGATCTAGGACTATCAGATTACAAATCATCTTGTAGCTGTGTTAGAAGCGCATCGGT CTCATGGGCATCGATTTCACTGTTGTTTACTGTTCTGTTTTCGTCCACATCAATAAGAGC TAGGTAAGATTTGTCTTCAAGATCCCCCGACTGCCTTAACAATTCCAAAACGGCCTCTTT ACTGGTAACATCCGATTCCTCTTCACAGAGCTTGAAGAAACCAGACAGCATCAACACCTT GGGCCTCCAATTGCTGGACCCTTCAGCCGAAAAAGCATTTCTAAGACAAGTCAAAGCCTC TGAAATACACCTCTTTCTGGTATGACCAACAGCTAGAATCTCCCACGTACTTGAACTTGG TTTTCCTCCCATTTCAACCATGTGGTCGAACAA >SQ;19827775 GCTGGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATA GTACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCAC CAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTG TGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCTTTCTCCT AAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGT TGAGACAGGCTTCCCATACTTGGTCCAAATCCGATAGAAGAAGGGATGTGCCCCACTCAT GCTATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCAGTCAT >SQ;19828054 CGGGAGAAGAAAAACTTAGATATTCTGGAACATGTTTGCTTTATATATATATGTTTCTTA GTTCACAAAGAGAAAAGGAAATAGTACTCTTATTAATACCATAGTCACCGAGCTTAATTT GACTCTATCAATACCATAATCACCAAAAGCTTGATATGCATAAATATATGTGTGCGCTTT ATATATGTTTCATAGTTCATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACA GAGCGTGTCGCCTCTCATTCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAA GGAGGAGAGGCTGGAAGCCGTGGCTGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGA GAAGAAGGGATGTGCCACACTCATGCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGG CCACTCTAGTTGCACTCATCGCCTTTCTCGGTAAC >SQ;19828253 GGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAGTA CTCTTATTAATACCATAGTCACCGAGCCTTAATTTGACTCTATCAATACCATAATCACCA CAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGTG CGTGGAAGAGCTGGATCATAAGGAAAAGAAGGACAGAGCGTGTCGCTCTCATTCTCCTAA AATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCTG AGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATGC ATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCACTCATCGCCTTT CTCGGTAACCAGTTCTCACAGGAGTGG >SQ;19828552 CGTCACAAAAAGGGACACAGCTCTTACATTCATGTTTCACTAGGCAGTCTCTTGTGTACA TTATACATATTTCGCATTTCCTCAGTTGACTCCGGTTACAAGATTCGTTTTTTAAAGCAA AGATCTAGGACTATCAGATTACAAATCATCTTGTAGCTGTGTTAGAAGCGCATCGGTCTC ATGGGCATCGATTTCACTGTTGTTTACTGTTCTGTTTTCGTCCAAATCAATAAGAGCTAG GTAAGATTTGTCTTCAAGATCCCCCGACTGGCTTAACAATTCCAAAAGGGCCTCTTTACT GGTAACATCCGATTCCTCTTCACAGAGCTTGAAGAAAACCAGACAGCATCAACACCTTGG GCCTCCAATTGCTGGACCCTTCAGCCGAAAAAGCATTTCTAAGACAAGTCAAAGCCTCTG AAATACACCTCTTTCTGGTATGACAACAGCTA >SQ;19829297 CACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACCAAAAGCTTGATA TGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGTGCGTGGAAGAGC TGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTAAAATCTTCCAAG GTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCTGAGACAGGCTTC CCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATGCATTTCCCATCC TTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCACTCATCGCCTTTCTCGGTAACCA GTTCTCACAGGAGTGGACATTCACCAGAGATTTTGGAACTATCAATGCTGGTGTGGTATG ATAGATACA >SQ;19829716 AAGGAAATAGTACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATAC CATAATCACCAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATA GTTCATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCT CATTCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGA AGCCGTGGCTGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGC CACACTCATGCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCAC TCATCGCCTTTCTCGGTAACAGTTCTCACAGGAGTGGACATTACCAGAGATTTTGGAACT ATCAATGCTGGTGT >SQ;19829934 GGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAGTA CTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACCAA AAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGTGC GTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTAAA ATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCTGA GACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATGCA TTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCACTCATCGCCTT >SQ;19831127 AAGGAAATAGTACTCTTATTAATACCATAGCTCACCGAGCTTAATTTGACTCTATCAATA CCATAATCACCAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCAT AGTTCATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTC TCATTCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGG AAGCCGTGGCTGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTG CCACACTCATGCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTACTTGCA CTCATCGCCTTTCTCGGTAAACAGTTCTCACAGGAGTGGACATTCACCAGAGATTTTGGA ACTATCAATGC >SQ;19831839 ACTGGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATA GTACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCAC CAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTG TGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCT AAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGC TGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCAT GCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACT >SQ;19831991 AAGTGGGCAGAGAGACACCAAATTTGCTAATGAGGGAAATCAAACATAACAAGGGGTTAT TGTGAGAGAGAACAGAGGATCTTATACAAGTTGAAAATCCGCAACCAAATAATCATAATC TACTCTCGGTAAATGGAATGTCAATCCGCACTGACCATTTGCTCTCTCTTGCTCCTCTAC CTTGTTACAGGATGCCTCCTCCTCTTTGGTCGGATCCCATCTTCTTCGTAGTCCATCACT CCACTTGGTTCCCCAAACATCTCCTTATTCCCTCTGATGTCAACATCCCCCTTCATGGAC AGAGACTTCTTCACTTCTTCCACCCCTTCTTCTGCTTCCTTACGATGTTTTTTGTCCATC TCACTCATATTGTCCGCCCATTTGATCTTGTCTTGAATTGA >SQ;19833332 GAGAGAAGAAAAACTTAGATATTCTGGAACATGTTTGCTTTATATATATATGTTTCTTAG TTCACAAAGAGAAAAGGAAATAGTACTCTTATTAATACCATAGTCACCGAGCTTAATTTG ACTCTATCAATACCATAATCACCAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTA TATATGTTTCATAGTTCATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAG AGCGTGTCGCTCTCATTCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGG AGGAGAGGCTGGAAGCCGTGGCTGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGA AGAAGGGATGTGCCACACTCATGCATTTCCCATCCTTCTAAGGCG >SQ;19834843 GGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAGTA CTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACCAA AAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGTGC GTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTAAA ATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCTGA GAAAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATGCA TTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCACTCATCGCCTTTT CGGTAACCAG >SQ;19835442 GGGTTGAAAGTCGTTTTATTTCATTGGTAACAACAACACAGTGGGGAATTATGTATTACA GAGTAGAGACACATATTCCTGTTTAAAATGAGGAAACAAGAAGATCATCTGAAGTAGTAA TACCTTTAACTACGTTCCTGTCTGAAGGTAAACCAGCTACAACACCATGTTCAATGCCAC ATTCGTTTGTTCCTCTCCTGATCTTGAAGTACCCATCATCACCCCAGCTTCGGTTCCATT GATTTGCAAGCAACCAATAATCTTCACCGTCATCAGAAGTTCCCCAGCCAATAAGTTTAA CAGCATGACCTCCAATGTTAGTACCTGTTATGTGCTTGTACACTCCAGATTTGTAATGCG CAAAGTCCTCGTAAACAGTGAAGGCAACCTCAACAGGTCCATTTTTGTAAACTTCTGCCA T >SQ;19836538 GATTGGGAAACATCCATTTCATTTAACCAGAAAGCATGGCAATCTTTTCTTTGAACAAAT CTCCATAAATTACAGACAAAGATAAAGCCGGAAACAAGAAAATGTTGCAGATAAAATCTA ACAAAAGAAAGAACAATCGAAAAACTCTTCTTCTCCTTGTAATTTGCTCACAACAAAACC TCTTCTTCAGAGCCTCTTAAAGTGGCTTTCCACTTGTCTTGATATCATTTCTGATTGCTC CTTGAATCATCTTAACGATCAAATACTGAGCGCCTATGATAAGAGGGATGAGTTTCTTTC CTTTATCATCAGAGTAAGATCCATCTACCATCTTCTTGTCTACATGAATTGCTTTCCTCT GGTTTGTTGCTACATCAGTTATCGCCTTAACC >SQ;19837074 ATGGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAG TACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACC AAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGT GCGTGGAAGAGCTGGATAATAAGGAAAAGAAGCCCAGAGCGTGTCGCTCTCATTCTCCTA AAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCT GAGACAGGCTTCCCATACTTGGTCCAAATCGAGAGAAGAAGGGATGTGCCATACTCATGG CTTTCCCATCCTTCTAAGGGGTGCAATATGCGGGCAACTCTAGTTGCCCTCATCGCC >SQ;19837290 GGTGCAACACGAATACAATTGATTACATCATTTCGTTTAACAGAGTCTCTGCTCATATTC ATATGAGTAGGTAGGTATAACAACAACTTTGCAAAGTAACGTCCGATAATACATTACATA CATACATGCATATATCCATCCGCATTCTGCACAAACAGAGAGTAGGGTGTAGCAAATTTA CTGTTTGTTGCGGCGGAGGAGGCGTTCCAAATGGTGGAACTGAGCCTTCAAGGCGGCATG GTCTTGTCGCATCCTCTGCAAACGATCCTCAACCATCATCATCTCTTCCCTCAGGAAATG CATTCTCTTCTCTAACCACCCCAAAGTCTCCCCGTTTACACTGTACTCGTCGTACCTCTC ATGATACTCCACTTGCCCCCCTCCTCCTTTTTTCAGTAGCACCACTATCGTC >SQ;19837778 GGACAACAAAACGCAAATATGATAGAGCGGAAGCTCATTAAAAAATCGTTTTAGAGCAAT GTCACCAAACAAAGAAAATCCATTTCCCAATAAAAAAACAACGAATATAAAATTCGATTA TATATTTACCATCAACCACTTAACAGACCACAAAATGAAGGCTGTTTACGGATTCAACAC AGATTAACGGGTATGTATGTATGATCTAGGCAACGGTGGTGGTGGGACCAGGATAAGCAG GAAGAGTCATGATCCGCTTGTCTACAACTGGACCTCCCACAGTGAAATGGTACAGACTCT GAAAGCTAGAGTCATTAATCCCCAGAA >SQ;19837990 AACTAAATAAATAACCACTTGCTCTCAAAGTTTAACAGGTATACACCATGATTCACCAAT GGGGAGTAAAAAGTAACATTAACAAACACTTTCCACTTGTTTACTTAGATAGATCATACA AACACAGCCATTGCAAATGAAACAACAGGATACTACTAGCTAGGTGATGTTCTGAGACAT CATTGGTATTCGAGGATCTGCATTCACGAGAACAACGACCGTGTCTTATTGCGTTCCAGT CGAGCTTCCCTCTCTTTCTTCTTGCATTCCTTGTACACATCAAAATGATCCTGGCATTTA CTCTTGTCTGATCCAAATTCTTCAAGACATTTGAGAGAAGCAGAGTACTGAAGATAACAT GGAGAATCAGATATCCGAGCCGCGCTAGGGTACGCCGC >SQ;19838343 AAGGGACACAGCTCTTACATTCATGTTTCACTAGGCAGTCTCTTGTGTACATTATACATA TTTCGCATTTCCTCAGTTGACTCCGGTTACAAGATTCGTTTTTTAAAGCAAAGATCTAGG ACTATCAGATTACAAATCATCTTGTAGCTGTGTTAGAAGCGCATCGGTCTCATGGGCATC GATTTCACTGTTGTTTACTGTTCTGTTTTCGTCCACATCAATAAGAGCTAGGTAAGATTT GTCTTCAAGATCCCCCGACTGCCTTAACAATTCCAAAACGGCCTCTTTACTGGTAACATC CGATTCCTCTTCACAGAGCTTGAAGAAACCAGACAGCATCAACACCTTGGGCCTCCAATT GCTGGACCCTTCAGCCGAAAAAGCATTTCTAAGACAAGTCAAAGCCTCT >SQ;19839622 AAAGGAAATAGTACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATA CCATAATCACCAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCAT AGTTCATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTC TCATTCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGG AAGCCGTGGCTGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTG CCACACTCATGCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCA CTCATCGCCTTTCTCGGTAACCAGTTCTCACAGGAGTGGACATTCACCAGAGATTTTGGA A >SQ;19840006 GGTTTTTAGAAGATAGGTTGTGGTTCATGAAAGGTTCTTCACATGGGATGTTGACACAAA AAAGGACCAAAAGTTGAGGTAGAACATCTTACATACCCACTTTCACCCAAATCCAACAAA AAAAAAAAAACAGAGAACCAGAGACATAAAAACAACCAAACTTCAGTCACAAAGTCCTCA TGTTCCCAACAAATTCATCGCGTCTTGACATGTCACAAACTGATTTTCTTCTCTAGATAG GCTTGATTTTGAAGTGCAGAGAGATGAGCGAGAAAACAAGACATTTCAAGTCCTGAACAA GATAGTAGAAGATGCGAAGTCCTTCAGGATCATTACTGCTCTGGCAATCAACAAGAGATC CAATCTTAGATGTAGCGAATGAGATATGCTCATTACCCAAGAGGATCTCGAGC >SQ;19840745 AATGGGCAGAGAGACACCAAATTTGCTAATGAGGGAAATCAAACATAACAAGGGGTTATT GTGAGAGAGAACAGAGGATCTTATACAAGTTGAAAATCCGCAACCAAATAATCATAATCT ACTCTCGGTAAATGGAATGTCAATCCGCACTGACCATTTGCTCTCTCTTGCTCCTCTACC TTGTTACAGGATGCCTCCTCCTCTTTGGTCGGATCCCATCTTCTTCGTAGTCCATCACTC CACTTGGTTCCCCAAACATCTCCTTATTCCCTCTGATGTCAACATCCCCCTTCATGGACA GAGACTTCTTCACTTCTTCCACCCCTTCTTCTGCTTCCTTACGATGTTTTTTGTCCATCT CACTCATATTGTCCGCCCATTTGATCTTGT >SQ;19841232 GGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAGTA CTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACCAA AAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGTGC GTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTAAA ATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCTGA GACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATGCA TTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTTCTAGTTGCACTCATCGCCTTT CTCGGTAACCAGTTCTCACAGGA >SQ;19841468 GAGTTGAAAGTCGTTTTATTTCATTGGTAACAACAACACAGTGGGAAATTATGTATTACA GAGTAGAGACACATATTCCCTGTTTAAAATGAGGAAACAAGAAAGATCATCTGAAAGTAG TAATACCTTTAAACTACGTTTCCTGTCTGAAGGTAAACCAGCTACAACACCATGTTCAAT GCCACATTCGTTTGTTCCTCTCCTGATTTTGAAAGTACCCATAATCACCCCAGCTTCGGT TCCATTGATTGCAAGCAACCAATAATCTTCACCGTCATCGGAAGTTCCCCAGCCAATAAG TTTAACAGCATGACCTCCAATGTTAGTACCTGTTATGTGCTTGTACACTCCAGATTTGTA ATGCGCAAAGTCTCGTAAACAGTGAAGGCAACCTCAACAGGTCCATTTTTGTAAACTTCT GCCATAATGTCATCAGGGG >SQ;19842362 AGGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAGT ACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACCA AAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGTG CGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTAA AATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCTG AGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATGC ATTTCCCATCCTTCTAAGGGGTGCAATATGCCGGCCACTCTAGTTGCACTCATCGGC >SQ;19843099 AGAGCAATGTCACCAAACAAAGAAAATCCATTTCCCAACTAAAAAAACAACGAATATAAA ATTCGATTATATATTTACCATCAACCACTTAACAGACCACAAAATGAAGGCTGTTTACGG ATTCAACACAGATTAACGGGTATGTATGTATGATCTAGGCAACGGTGGTGGTGGGACCAG GATAAGCAGGAAGAGTCATGATCCGCTTGTCTACAACCTGGACCTCCCACAGTGAAATGG TACAGACTCTGAAAGCTAGAGTCATTAATCCCCAGAACCTCGTGCACTGGATCATCGAAA TAGCACCCAATCCCGGTTGCTGAGATCCCATTGCGTGTGCTTCAGGTAAAAACTGTCAAC AACACCGTCTCCCAGAACAGTCGAGGGTACATCCATGAGCCCTTCTCCCGCAGTGCTGGT TCAAAC >SQ;19843722 GGTTCATGAAAGGTTCTTCACATGGGATGTTGACACAAAAAAAGGACCAAAAGTTGAGGT AGAACATCTTACATACCCACTTTCACCCAAATCCAACAAAAAAAAAAAACAGAGAACCAG AGACATAAAAACAACCAAACTTCAGTCACAAAGTCCTCATGTTCCCAACAAATTCATCGC GTCTTGACATGTCACAAACTGATTTTCTTCTCTAGATAGGCTTGATTTTGAAGTGCAGAG AGATGAGCGAAAAAACAAGACATTTCAAGTCCTGAACAAGATAGTAGAAGATGCGAAGTC CTTCAGGATCATTACTGCTCTGGCAATCAACAAGAGATCCAATCTTAGATGTAGCGAATG AGATATGCTCATTACCCAAGACGATCTCGAGCTCTTGCTTTCAACACGGTCAGGTTCGGC CAATTGTTATC >SQ;19844666 GGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAGTA CTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACCAA AAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGTGC GTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTAAA ATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCTGA GACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATGCA TTTCCCATCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCACTCATCGCCCTTTG TGGG >SQ;19855736 GGGAAATAGTACTCTTATAATACCATAGTCACCGAGCTTAATTTGACTCTATAATACCAT AATCACCAAAAGCTTGATATGCATAAATATTATGTGTGCGCTTTATATATGTTTCATAGT TCATTTGTGCGTGGAAGAGCTGGGATCATAAGGAAAAGAAACACAGAGCGTGTCGCTCTC ATTCTCCTAAAAATTTTTAAGGGTTGGGAGTTTTAAATGATGTGGGAAGGAGGGAGAGGC TGGAAAGCCGTGGGCTGAGAACAGGGCTTTCCCCATACTTGGGTCCAAAATCCGAGAGAA GAAGGGATGTGCCACACTCATGCATTTCCCATCCTTCTAACGCGTGCAATATGCCGGCCA CCTCTAGTTGCACTCATCGCCTTTCTCGGTAACCAGTTCTCACAGGAGTGGACATTCACC >SQ;19855995 GGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAGTA CTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACCAA AAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGTGC GTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTAAA ATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCTGA GACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATGCA TTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGT >SQ;19857409 AAGTCAACTGATACAAATTTGTCTTCTCTAACCACTTTCTTATCACAGTTTCACCATCTT TATATATTAAGACACACATACAGTTATGGAAAAGTTACAAAACAAGATATACATAGCAAA AAAAGATTTTGGAAAGTAAAATGGTGTTTTTGATCTCATTTACTGCTATTATGTTCTTGA GATAGAAGAACATTGGTGAATTTTCTTGACGAATATTTGTATCATCCTGTGAAAGAAACC AGCTCGTTTCTTCTCTCGAGTCTCTTGACCCAATTTTTGCCCTCCAGCCCCAGTCCCTTG TGCATCATCATAAGGACTCTTAATCTTCTCGGGTGTATCAATACTGGTTATCAGAGCTTG GCTCACCTCTTGAGTTAGTGACACTAAGTTGATTTGGTCTGAGC >SQ;19857902 GCAAATCTCAATCTCATTGCTTCTTTACATTTACAAGAGCCGTAATTAAACAAAATTTAG CTACAAAGCATTTTGACTGGAGAGAATTGTACGGTGAGACAAGCATGATCGGATATATTG TAATTCTCCGGCCACAATCCTTTCTCTGCTTCTTGTGGAAACAAAATTGCTTTATTCACT TTCAATCCGATTGCTTCATCTTCTCCTTCTTCTTTCTTACTCTCCATCACACTCTCTTTG CAGTTTCCAGGTTGATTTACCATCGTCATGTTCCAAATTTTCTTAAGTTCTTCATAGTCG AAGACACCATTTCCATCAAGATCAGCTCGGACCCATAGCTCTTTTGTCTCTTCGAAGCTA AGTCCATGTGGAATACCCGTTAGATTTACCTTTTGAAGTGCTAGGCA >SQ;19858773 AACAACCTTCAGAGTTCAGATTTCAGAGCGTTTCTTGACCGAGGTGAGGTTTCTTTGTTT TGCACAATTATTAGAAAATACAACCAAAAATAAAACAAGGGGAGGCCCGGCCCACATATC TCGACCATGAGCCTAAACTAAATCAAAAGCACAGATAACGCAGACAAGTTCGTGTTTCCT TCGTTTTCTGCTCAGCACCCAGAGAAAGGCCTTTCTAACTTTGTGCAATCAATCATCATT CCTTACAAATTAGGTAAACCAAGCACTATCAGATTCTACCCACCACCAGGGGTTTTCCTC CAACTGTATTAACTAACGTACCAGTTGCAAGTTCCGGGGATTCAATGCAATACAAACCCT CCTCCTTTTCAAGGTGATGACGCTGATGAGCTCATTCTTTCACCGCCCCCTTCTCTTGTG AA >SQ;19859011 AGTTGAATGTCTTTTGATTCTTTCATTGGAAACAACAACACATTATATTGAATATGAACA AAAAGCTAAATGGTATATACAATAGACTTCTTTTTGGGTTGAAAGTCGTTTTATTTCATT GGTAAAAACAACACAGTGGGAAATTATGTATTACAGAGTAGAGACACATATTCCTGTTTA AAATGAGGAAACAAGAAGATCATCTGAAGTAGTAATACCTTTAACTACGTTCCTGTCTGA AGGTAAACCAGCTACAACACCATGTTCAATGCCACATTCGTTTGTTCCTCTCCTGATCTT GAAGTACCCATCATCACCCCAGCTTCGGTTCCATTGATTTGCAAGCAACCAATAATCTTC ACCGTCATCAGAAGTTCCCCAGC >SQ;19863867 TGGGAACACATCGAGAGAGCTTCTTCCAAAAACCTCAAACGCTCCTCACACAACGGGTTT AGGAGTGATGGGGTCTCTCGTTCGTGAATGGGTTGGGTTTCAGCAATTTCCAGCAGCTAC CCAGGAAAAGCTGATTGAATTCTTCGGAAAATTGAAGCAAAAGGATATGAACTCAATGAC AGTTCTTGTTCTGGGTAAAGGCGGTGTCGGAAAATCATCCACTGTCAATTCTCTTATCGG CGAACAAGTCGTCCGTGTCAGTCCTTTCCAAGCTGAAGGATTGAGACCAGTGATGGTTTC AAGAACAATGGGAGGGTTCACTATCAACATTATTGACACCCCTGGACTTGTGGAAGCTGG ATATGTCAATCACCAAGCTCTCGAGTTAATCAAAGGGTTTCTTGTGAACAGAACAATAGA TGTCTTGCTCTATGTTGATCGTTTGGATGTGTATAGAGTCGATGAGCTAGATAAGCAAGT TGTTATAGCAATCACCCAAACCTTTGGAAAAGAGATATGGTGCAAAACCTTGCTTGTTCT GACTCATGCTCAATTTTCCCCTCCCGATGAACTTTCCTACGAAACTTTTTCCTCCAAGAG ATCAGATTCTCTCCTCAAAACTATCCGGGCTGGTTCTAAGATGCGAAAACAAGAGTTTGA GGATT >SQ;19864079 GAACGAGTAACGACGAGAGATGCTTCTTCAGGCGGCGGTGCAGAACCGCAATGTTCCACT GGCTTCTTCCGCCTCCTACTCTCGTCTCCTTCGCTGCAGATCTCCTGTCGTTTTCGTAGC TGCTCTCTCGAAGAAGACGGCAGCAATCGTGTGCTCCATCTCCCAGGTTTATGGCTACGG CACGGTGGACTACGAGAGAAGGCCGATTGTCCAGTGGAATGCCATCTACAAGAAGATTTC GCTGATGGAGAAGCCAGAGCTTGGCGCTGCTTCCGTCTTGAATCAGTGGGAGAAAGCCGG CCGCAAGCTTACCAAGTGGGAGCTCTGTCGGGTCGTCAAGGAGCTTCGCAAGTACAAGCG TGCCAACCAAGCTATCGAGGTGTACGACTGGATGAACAACAGAGGCGAAAGGTTTCGGTT GTCTGCAAGTGATGCTGCAATCCAGCTCGACTTAATCGGCAAAGTGCGTGGCATTCCAGA CGCCGAAGAGTTCTTCCTCCAGCTCCCTGAGAATTTTAAGGACCGGAGAGTTTATGGTTC CCTCCTCAATGCCTATGTGAGGGCCAAGTCGAGAGAAAAGGCTGAAGCCCTGCTCAACAC CATGAGGGACAAAGGTTACGCCCTGCACCCGCTTNCCTTCAACGNCATGATGA >SQ;19865963 GAATCTCGATCTCGAGAAAGAAAGAAAAAAAGAGAAGGCATGGCCGCGGAAGAAGCGACG GAGTTCTACCTGAGATACTATGTCGGTCACAAAGGGAAATTTGGACACGAGTTCCTGGAG TTCGAGTTTAGAGAGGACGGTAAGCTCCGTTACGCCAATAACTCTAACTACAAGAACGAT ACTATTATCCGCAAGGAGGTATTTCTCACCCCCGCCGTGCTCAAGGAATGCAAGCGTATC GTCTCCGAGAGCGAGATTCTGAAAGAAGACGATAACAATTGGCCGGAACCTGACCGTGTT GGAAAGCAAGAGCTCGAGATCGTCTTGGGTAATGAGCATATCTCATTCGCTACATCTAAN AATGGATCTCTTGGTNGATTGGCAGAGCAGTAATGATCCTGAAGGACTTNGCAT >SQ;19866668 GGAGAGATCTCTGGCTCTGTATCGCTCGCTGCTCTTCCTCCCACAGATCGAAAACCATGA ATCCTGAGTACGACTATCTTTTCAAGCTCCTGCTTATCGGGGATTCTGGCGTAGGCAAGT CTTGTCTTCTTTTGAGATTCTCTGATGATTCTTATGTAGAAAGTTACATTAGCACTATTG GAGTCGATTTTAAAATTAGGACTGTGGAACAAGATGGCAAAACAATTAAGCTCCAAATTT GGGACACTGCTGGTCAAGAACGGTTCAGGACTATTACTAGCAGTTACTACCGTGGGGCAC ATGGAATTATTATTGTCTACGATGTCACAGATGAAGAAAGCTTCAATAATGTCAAGCAAT GGTTGAGTGAAATTGATCGTTATGCTAGTGACAATGTCAACAAACTCCTTGTTGGAAACA AGTCTGATCTTACTGAAAACAGAGCCATTCCTTATGAAACTGCCAAGGCTTTTGCCGATG AAATCGGGATTCCTTTTATGGAGACTAGTGCAAAAGATGCTACAAACGTAGAACAGGCTT TCATGGCAATGTCTGCATCCATCAAAGAGAGAATGGCTAGCCAACCAGCTGGGAATAATG CAAGACCACCGACCGTGCAGATCAGAGGACAGNCTGTGGCCAAAANA >SQ;19866748 TGTTGAGAGAATTCGAAAGAAAAACTCAAATGCAAAGCCATCAGAATCGAAGCAGGCTGA GCCTTGATTCTACGGTCTAGATTCATCCCTTCCTTCTCTTCACCACTCTCCCTCTTCGTC GTCCTCGCTGCTGTTCCTCTTCCGATCTACTTTTCCGGTCTACTCTCCGGCAGAAACAAC AAGCCGCTTTCAGTTATGAGACTCAACTCCAACTTAGCTTCTTCAATGGTGGAATCGAAT ATTTCTTGTACCACTTTCAATATCTTGGCTCCGATTTATAAACGCGTTGATCAAAAGAAT CATAGCACTCGAGAGAGCGATTTCCGCACGCTTTGGTTAGCTCGTAACCAGAGGATTTTA GATTTGTTACTCCATCAACGCTCTTCAGTTATCTGTCTCCAGGAAGTTTGGGTTGGGAAT GAGGAATTAGTGAACATGTACCACCACCAGCTTTCATCTTCAGGCTACACTATTTATCAG TTGGCTAGAACAAACAGTCGTGGNGATGGTCTTTTAACAGCCATTCATAAGGACCATTTT AAAGTTGTAAATTACCGGGAGCTGCTCTTTAACGATTTTGGAGACCGTGTTGCTCAGCTC TTACATGTCAAAACAGTTATTCCCTTTCCGCTTAATGGAAAGCAAG >SQ;19869130 GGTGACGACACAAACATATTACATTCGACGGTATAATGGCCACAAAACCAGGAGTCCTCA CCGATTGGCCTTGGACACCCCTCGGAAGTTTCAAGTACATCGTAATAGCACCATGGGCTG TCCATAGCACATACAGGTTTGTGACAGATGATCCAGAGAAGAGGGATCTCGGGTACTTCC TTGTGTTCCCATTCTTGCTCTTCAGAATTCTGCACAACCAGGTTTGGATCTCTCTGTCCC GTTACTATACGTCCTCGGGAAAGAGACGCATCGTCGACAAGGGAATCGACTTCAATCAGG TCGACAGGGAGACCAACTGGGATGACCAAATATTGTTCAACGGAGTGCTGTTCTATATAG GCATCAACCTATTGCCGGAGGCCAAACAACTTCCCTGGTGGAGAACTGACGGAGTGTTGA TGGCAGCGCTTATTCACACCGGACCGGTGGAGTTCCTCTATTATTGGCTCCACAAAGCTC TCCACCATCACTTTCTTTATTCCCGCTACCATTCCCACCACCACTCCTCTATCGTCACTG AGCCCATCACTTGTAACTATTGGTTCTTACCTTGATTTTTACGCTGCCTATATTTCCGTT TTT >SQ;19869427 GAGTTTGGGATTTTATTCGTTATTAGTGTGGTAAGAAAGAAAACCCTAAACCACCGGAAA TCGATTTGTTTGGAAGATGGATATCGAGCAGAAGCAAGCCGAGATCATTGATCAGCTCGT GAAGCGAGCTTCTACTTGCAAATCCGAGGCTCTGGGCCCGCTCATCATCGAAGCCACATC GCATCCTTCTCTCTTCGCCTTCTCCGAGATTTTGGCTCTACCCAATGTTGCCCAGCTTGA AGGAACCACAGATTCTGTGTACCTGGATCTACTACGCTTGTTTGCCCATGGCACCTGGGG AGACTACAAATGCAATGCCACCCGTCTTCCGCACTTGTCCCCTGACCAAATTCTTAAGCT TAAGCAGCTCACTGTCCTCACCCTTGCTGAGTCTAACAAGGTATTGCCCTATGATACACT AATGGTCGAGTTAGATGTTTCCAATGTTCGCGAACTCGAGGACTTTCTTATCAATGAATG CATGTATGCGGGTATAGTTAGGGGAAAACTGGATCAGTTAAAAAGATGTTTTGAGGTTCC GTTTGCAGCTGGTANGGATCTAAGGCCAGGTCAACTAGGGAATATGTTACACACATTGTC CAACTG >SQ;19870774 GGCGGAACACATCGAGAGAGCTTCTTCCAAAAACCTCAAACGCTCCTCACACAACGGGTT TAGGAGTGATGGGGTCTCTCGTTCGTGAATGGGTTGGGTTTCAGCAATTTCCAGCAGCTA CCCAGGAAAAGCTGATTGAATTCTTCGGAAAATTGAAGCAAAAGGATATGAACTCAATGA CAGTTCTTGTTCTGGGTAAAGGCGGTGTCGGAAAATCATCCACTGTCAATTCTCTTATCG GCGAACAAGTCGTCCGTGTCAGTCCTTTCCAAGCTGAAGGATTGAGACCAGTGATGGTTT CAAGAACAATGGGAGGGTTCACTATCAACATTATTGACACCCCTGGACTTGTGGAAGCTG GATATGTCAATCACCAAGCTCTCGAGTTAATCAAAGGGTTTCTTGTGAACAGAACAATAG ATGTCTTGCTCTATGTTGATCGTTTGGATGTGTATAGAGTCGATGAGCTAGATAAGCAAG TTGTTATAGCAATCACCCAAACCTTTGGAAAAGAGATATGGGGCAAAACCTTGCTTGTTC TGACTCATGCTCAATTTTCCCCTCCCGATGAACTTTC >SQ;19870921 GGACGACACAAACATATTACATTCGACGGTATAATGGCCACAAAACCAGGAGTCCTCACC GATTGGCCTTGGACACCCCTCGGAAGTTTCAAGTACATCGTAATAGCACCATGGGCTGTC CATAGCACATACAGGTTTGTGACAGATGATCCAGAGAAGAGGGATCTCGGGTACTTCCTT GTGTTCCCATTCTTGCTCTTCAGAATTCTGCACAACCAGGTTTGGATCTCTCTGTCCCGT TACTATACGTCCTCGGGAAAGAGACGCATCGTCGACAAGGGAATCGACTTCAATCAGGTC GACAGGGAGACCAACTGGGATGACCAAATATTGTTCAACGGAGTGCTGTTCTATATAGGC ATCAACCTATTGCCGGAGGCCAAACAACTTCCCTGGTGGAGAACTGACGGAGTGTTGATG GCAGCGCTTATTCACACCGGACCGGNGGAGTTCCTCTATTATTGGCTCCACAAAGCTNTN CACCAT >SQ;19871046 AATTGCAGTGGAGTTGTTCCCCAAGTCACAGAGAGAAATCACAGGCAATTTTGGTTATCC CTTAACCGGTCCATCCATATCTGAACCGTCCCGGTACAAAGATCCGTTGGTTTCTGGTTT TGAGATGTCGAATCCCAGACAGAGGAAAGGAGAAGCAATGATGAATCCGACGATTTCGTG GAGGTTCGCGTCTTCGACCTCTCTTCTCTCCATTCCTCGAACACCAAAAAGTGCCTTTAT CTTCGCCATGACCTTCTCTTCTTCTTCTTCTTCTTCTTCTTCTTCTTCTTCTGTGGAAAA CCCTAACAAGGACGATTCCTCCTCTTCGCTTGAATTGGTCCTCAAGTACCACAACCAGAC GAAGCACTCCTTGAACGGTTACGCGAGAGGTCCTCGTGGTCTCGACTGGGCCAATCAGCC TAATCCCTTCCGCCGGTACCTCTCTGCTCCTCTTCTTCCTTTCCAACACCCCAATCACGA CATCGACGACGACTCCGACTCTCCTCTCTACTCTACTNTATTCGACTCGCTTCCTNCGCC CAAACCCATCTCTCTTCCTACAATCTCTTACCTTTTNTACCATTTCTCTCG >SQ;19871766 GAGAAAAGAAAACTTTGTACCTTTTCCAAAGTCTAAGCAAATCATTGTTTTTGATTACTG GAACTCGTTGAGGGATTGAGAAAAAAATAATCAGAAGAGAAAGATCCATGGCTGATAATT GTATCAGACTTCTTCACTCAGCCTCTGTTTTCTTCTGTTTAGGGCTTCTAATTTCATCCT TCAACTTGTTGCAGGGTATTGCAGCTGAAAATCTTTCCAAGCAGAAACTGACCTCATGGA TTCTTCAGAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGATGGAAAGCTT CTTTCAATGATCGGTTTGCAAACGCCACTGTTGCAGAGTTTAAGCGCCTTCTTGGTGTTA AACCAACACCAAAGACGGAATTTTTGGGTGTGCCTATTGTAAGCCATGATATATCTTTGA AGCTTCCAAAAGAATTTGATGCTAGAACCGCTTGGTCACAGTGCACCAGTATTGGAAGGA TCTTAGATCAGGGTCACTGTGGTTCTTGCTGGGCCTTTGGTGCTGTTGAATCACTGTCTG ACAGATTCTGCATCAAATATAACATGAATGTTTCTTTATCTGGCAATGATCTTT >SQ;19872996 TTGGACACAGTGACGACACAAACATATTACATTCGACGGTATAATGGCCACAAAACCAGG AGTCCTCACCGATTGGCCTTGGACACCCCTCGGAAGTTTCAAGTACATCGTAATAGCACC ATGGGCTGTCCATAGCACATACAGGTTTGTGACAGATGATCCAGAGAAGAGGGATCTCGG GTACTTCCTTGTGTTCCCATTCTTGCTCTTCAGAATTCTGCACAACCAGGTTTGGATCTC TCTGTCCCGTTACTATACGTCCTCGGGAAAGAGACGCATCGTCGACAAGGGAATCGACTT CAATCAGGTCGACAGGGAGACCAACTGGGATGACCAAATATTGTTCAACGGAGTGCTGTT CTATATAGGCATCAACCTATTGCCGGAGGCCAAACAACTTNCCTGGTGGAGAACTGACGG AGTGTTGATGGCAGCGCTTATTCACACCGGACCGGTGGAGTTCCTCTATTATTGGCTCCA CAAAGCTCTCCACCATCACTTTTCTTTNTTCCCGCTACCATTTCCACANCACTCCT >SQ;19873300 GAATCTAAGTTGCAGAACCATGGCCAAAACTCTCTACTGCAATTTTTTTTGATCTTTTCT TTTACTTTTTCTCTTCGTAATCGCTGGTTCGAGAAATGGAGAATCCGGTGGGTTTAAGAT TCCGTCCGACCGACAAGGAGATCGTCGTCGATTACCTCCGACCAAAAAACTCCGATAGGG ACACGAGTCATGTTGATCGAGTCATTAGCACAGTCACTATCCGTAGCTTCGACCCTTGGG AGTTACCTTGCCAGTCTAGGATCAAACTGAAAGATGAGTCTTGGTGTTTCTTCAGCCCTA AGGAGAACAAATATGGCAGAGGTGATCAACAAATTAGAAAAACGAAATCTGGTTACTGGA AGATTACTGGCAAACCAAAGCCTATCTTGCGTAACCGCCAAGAGATCGGTGAGAAAAAGG TTTTGATGTTTTACATGAGTAAGGAACTTGGTGGATCCAAATCCGACTGGGTTATGCACG AGTACCATGCTTTCTCTCCTACTCAGATGATGATGACATATACAATATGTAAAGGTTTGT TTAAGGGTGACGTGAGAGAGATTTCTTCTTCTTCTGNTTCCT >SQ;19874826 CTCCGATTCCCCGATACAGAGACGATGCCGACGGATTCGAAAATGGCCAAGTTTCTTCAA TCCTATGGATATGATTTGATTCTGGGATCTGTAGCTGCAATCTATGTGGTCATGGCACCA TATACTAAGGTGGAAGAGAGCTTCAACGTTCAGTCAATGCACGACATTCTTTACCATCGC CATCATTTGGACTCTTATGATCATTTGGAGTTCCCCGGTGTTGTCCCTCGAACTTTTATT GGAGCCTTCATAGTCTCTGTTTTTGCATCACCTGTTGTATCAATTATCAGCTGCCTTGGC TTCCCCAAGGTTTATAGCCTTGTTGCAGCTCGTTTGGTGTTGGGCTGCATCATATTGTCC ACACTAAGATTTTTCCGGATTCAGATAAAAAAAAAGTTTGGAAATCAAGTGGAAACTTTC TTTGTACTTTTCACCAGTCTTCAGTTTCATTTTCTTTTCTACTGCACTCGTCCTCTTCCT AATATTCTAGCTTTGGGATTAGTCAATCTGGCATATGGTAATTGGTTAAAGGGAAATTTT TATCCAGCTTTGAGTTTCCTGATTTTTGCCACTGTAATCTTCAGATGCGATACGATGTTA CTGCTTGGGCCTATTGGTCTTGAACTTTTATTGACCAAATCGATCTCCTTC >SQ;19875482 GCGTGTTGTTAAAGAGCTCACTAGTTGGGTGATTTATTCAGAGGAGGATCCGGAAGCTCA ACAAAGATATTACTATTGGTCTTATCCAGCGTGAGTTGCTTAGCCTAGCGGAGTACAATG TCCACATGGCGAAGCATCTTGATGGAGGGAGAAACAAGACCGCAACTGACTTTGCTATTT CTCTACTCCAATCCTTGGTCACTGAGGAGTCNAGTGTCATTTNNTAG >SQ;19875812 ACATTATAAACAAGTACCTCCAAATTGCACTTCCTTCAAACTTATTCGACAGTAGACTAG CTCAAGTACCTTTGGATGGCGTCGAGGCCCGGAGCTCTTACGGAGTGGCCATGGAGTCCC CTTGGTAGCTTCAAGTACCTCTTGGTGGCCCCGTTGGTGATGGCGAGCATGCACTCGTAC GTGACGGCTGTGGATGAGGAGAAAGACCTCAGCAGACTTATGATAGTCGTGTTGATGCTG TGGAGAATAGTTCACAGCCAGATATGGATCAGCGTGTCTCGCCAGAGGACGGCTAAGGGA ACGAACAAGATCGTGGACAAGCCCATTGAGTTTGAGCAAGTGGACCGAGAGCGCACTTGG GACGACCAAGTCATCTTCAACACTCTCCTCATGTATCTCGCAAACATCAAGCTCCCAGGC GCCTCCCACCTTCCCCCATGGAGGCTAGACGGGGCCATCCTCATGGCTCTACTTCACGCT GGTCCCGTCGAGTTTCTCTACTACTGGTTTCACAGAGCTCTNCACCACCATTTTCCTCTA CTCTCGCTACCATTCTCACCACCACTCCTNCATTGTCACCGAGCCCATCACGTNTGTGGT GCACCCCTTCGCCGAGCACAT >SQ;19877649 ATTCTGGGACCAGTCAACATCTCCATCAAGCTCATCTCCTTTCAAAAACTTTCTCCTTTT CTGTTTTTTGTTTTTCTCGATTTTTCGAAAATCCGCCAGCTCGAGCTATTACGCTGGGAA TTCAGAGGATAAAACACGATATGAAGAACGAAATCAGCATTTTGGAGTTGATTTTACTGT TTCTGTCACTCTCATCAGTGCTAGCTAGCTCCAAATTGCACGGAAACTCAGCTCATGAAA TGGTGAGCATCTTGAACCAGAACAGAACAGCTCGGAAACTAGGCAAACTAAATGAGAGTC CCGGTCTTGGCTGCATGGCCCTCCAGTATGTTGAGCTCTGCGAGGGGAATTGCAATGTCA ACAACACTCTCAGCTGTGAACACCCTGAAGACGACTTCACTCAGGTGTTTGCCCCAAACT GTGGTGTAGAACTCCCCACTTTTGGTACCATAACTGGCCATATCCTCGGCTGCAGCTCTA AGTATGCAGCACCAGAAGTCGCTTTCTCAGACATTCTCTTTAGAGATAGCAGTGCGTTGT CGGTGCTCAGAAACAGGTCGCATACCGAGGTTGGAGTGGGAATGGCTAGGTTGCATAAAG GTACCTTCTTTTGGTGTCTTCTCTTTAGCGAT >SQ;19878194 GTCTTGATTTTATAAACAAAAGAAAGAAAGAGAGAGAGATCTTCCTCGGGATTGCAACAT GTTGGACTACGAATGGGATAATCCTTCCTCCATCGTTCTCTCCGGAGATGAAAGAAACCC GGACTCTGACCCGACCCGGTCATCCTTCTCCTTTTTCGACCCCATCTCCCATTACAACAA CGACCACCGTCACATCACCATTTCTCCTCCCCTCCTCTCTTCCTTCTCTAACCAACAACA ACAGCAACACCTCACCCTCTACGGTCAGACCAACAGCAACAACCAGTTTCTTCATCATCA CCATCACCACCACTCCTTGTACGGGTCCACCACCACCACCACTCCTTACGGCGCCTCCGA TCCCATCTACCATCCCCACTCTTCCGCTCCGCCAGCCTCCTTGTTCTCCTACGACCAGAC AGGACCGGGCTCGGGATCCGGATCTTCCTACAACTTCCTCATCCCCAAGACAGAAGTGGA TTTCACGTCCAACAGGATCGGGCTGAACCTGGGAGGCCGTACGTACTTCTCAGCGGCGGA CGACGACTTCGTGAGCAGGCTATACAGGAGGTCTCGACCAGGTGAGTCAGGGATGGCGAA CTCGCTGAGCACGCCGCGGTGCCAAGCANAGGGATGCAACGCGGATCTG >SQ;8690927 TGTGAATCTTGAAGTTAAATAAATAAACTAAGACTCCTAAAATCTCTCCTACTGTATGTA TAATTGTTACAACATAATATCAAAATACGCATACATATATACAAGTTGAAAGCTAAAGAG CTAGTGAGAATTGTCTGAGACCCAACCTCCCGAAACCATTCCCTCGTCGACAGGCTTCAG GCCACCACAGGATCTGGCTACCGATTCAAACAGCTTCTCAATCTCAGGCGCACATCTGAT GAAGGCTTGTTTCCAGAAGCTATATCTTGGGTTCTTTATTAGCTCAATGAATGTGATTAG AAGTCCCCATGGATGTGGCCTGTTCACAATTAGCCGTTCCAACAGCACTCTAGTTATTTG CTCCTGTATGATCTCCTGATCAGATTCGAAGAATAGATAGAGCATGATGAAAGAAAAGTA ATGAGTGTGGTTGTTGGGGTATCGAAGCTGATTGGCGATTGCATTAAGGAACAGATACCG CCCTTCCGTATCAAGTTCCATACTTAAATACTTGAACATCTGCAAGGCCACAACATTTTG AGCCTGTGTCTCACCGGCCTGAAGCT >SQ;8692149 CCAAATAGCTGTCACAAAAAGGGACACAGCTCTTACATTCATGTTTCACTAGGCAGTCTC TTGTGTACATTATACATATTTCGCATTTCCTCAGTTGACTCCGGTTACAAGATTCGTTTT TTAAAGCAAAGATCTAGGACTATCAGATTACAAATCATCTTGTAGCTGTGTTAGAAGCGC ATCGGTCTCATGGGCATCGATTTCACTGTTGTTTACTGTTCTGTTTTCGTCCACATCAAT AAGAGCTAGGTAAGATTTGTCTTCAAGATCCCCCGACTGCCTTAACAATTCCAAAACGGC CTCTTTACTGGTAACATCCGATTCCTCTTCACAGAGCTTGAAGAAACCAGACAGCATCAA CACCTTGGGCCTCCAATTGCTGGACCCTTCAGCCGAAAAAGCATTTCTAAGACAAGTCAA AGCCTCTGAAATACACCTCTTTCTGGTATGACCAACAGCTAGAATCTCCCACGTACTTGA ACTTGGTTTTCCTCCCATTTCAACCATGTGGTCGAACAACCCCTCAGCTGTCTCTAGTTG GTCGTTTTTGACATACGCA >SQ;8694120 AAGGAAATAGTACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATAC CATAATCACCAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATA GTTCATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCT CATTCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGA AGCCGTGGCTGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGC CACACTCATGCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAG >SQ;8695006 TATACAATAGACTTCTTTTTGGGTTGAAAGTCGTTTTATTTCATTGGTAACAACAACACA GTGGGAAATTATGTATTACAGAGTAGAGACACATATTCCTGTTTAAAATGAGGAAACAAG AAGATCATCTGAAGTAGTAATACCTTTAACTACGTTCCTGTCTGAAGGTAAACCAGCTAC AACACCATGTTCAATGCCACATTCGTTTGTTCCTCTCCTGATCTTGAAGTACCCATCATC ACCCCAGCTTCGGTTCCATTGATTTGCAGGCAACCAATAATCTTCACCGTCATCAGAAGT TCCCCAGCCAATAAGTTTAACAGCATGACCTCCAATGTTAGTACCTGTTATGTGCTTGTA CACTCCAGATTTGTAATGCGCAAAGTCCTCGTAAACAGTGAAGGCAACCTCAACAGGTCC ATTTTTGTAAACTTCTGCCATAATGTCATCAGGGTGAGATCTGACCTTGTACGCACTAAC ACCATAATGTTTTGATTCACGCCAAAGCTGGTTTCCGCTAACACAT >SQ;8695842 GGAACATGTTTGCTTTATATATATATGGTTTTTTTTTCACAAAGAGAAAAGGAAATAGAA CTGTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACCAA AAGCTTGATATGCATAAATATATGTGAGCGCTTTATATATGTTTCATAGTTCATTTGTGC GTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTAAA ATCTTCCAAGGCTGGAGTTTTAATGATGTGGAAGGAGGAG >SQ;8695920 AAGGAAATAGTACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATAC CATAATCACCAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATA GTTCATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCT CATTCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGA AGCCGTGGCTGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGC CACACTCATGCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCAC TCATCGCCTTTCTCGGTAACCAGTTCTCACAGGAGTGGACATTCA >SQ;8696505 GAATTCCCGGGCCCGGGCCCGGGACGGCTGCGAGAAGACGACAGAAGGGGAATCTCGATC TCGAGAAAGAAAGAAAAAAAGAGAAGGCATGGCCGCGGAAGAAGCGACGGAGTTCTACCT GAGATACTATGTCGGTCACAAAGGGAAATTTGGACACGAGTTCCTGGAGTTCGAGTTTAG AGAGGACGGTAAGCTCCGTTACGCCAATAACTCTAACTACAAGAACGATACTATTATCCG CAAGGAGGCATTTCTCACCCCCGCCGTGCTCAAGGAATGCAAGCGTATCGTCTCCGAGAG CGAGATTCTGAAAGAAGACGATAACAATTGGCCGGAACCTGACCGTGTTGGAAAGCAAGA GCTCGAGATCGTCTTGGGTAATGAGCATATCTCATTCGCTACATCTAAGATTGGATCTCT TGTTGATTGCCAGAGCAGTAATGATCCTGAAGGACTTCGCATCTTCTACTATCTTGTTCA GGACTTGAAATGTCTTGTTTTTTTCGCTCATCTCTCTGCACTTCAAAATCAAGCCTATCT AGAGAAGAAAATCAGTTTGTGACATGTC >SQ;8696543 GAATTCCCGGGCCCGGGCCCGGGACGGCTGCGAGAAGACGACAGAAGGGGAATCTCGATC TCGAGAAAGAAAGAAAAAAAGAGAAGGCATGGCCGCGGAAGAAGCGACGGAGTTCTACCT GAGATACTATGTCGGTCACAAAGGGAAATTTGGACACGAGTTCCTGGAGTTCGAGTTTAG AGAGGACGGTAAGCTCCGTTACGCCAATAACTCTAACTACAAGAACGATACTATTATCCG CAAGGAGGCATTTCTCACCCCCGCCGTGCTCAAGGAATGCAAGCGTATCGTCTCCGAGAG CGAGATTCTGAAAGAAGAC >SQ;8697126 GAAGATAGGTTGTGGTTCATGAAAGGTTCTTCACATGGGATGTTGACACAAAAAAGGACC AAAAGTTGAGGTAGAACATCTTACATACCCACTTTCACCCAAATCCAACAAAAAAAAAAA ACAGAGAACCAGAGACATAAAAACAACCAAACTTCAGTCACAAAGTCCTCATGTTCCCAA CAAATTCATCGCGTCTTGACATGTCACAAACTGATTTTCTTCTCTAGATAGGCTTGATTT TGAAGTGCAGAGAGATGAGCGAAAAAAACAAGACATTTC >SQ;8697180 GATAAGAAAACAGCAAGTATATGGTTTTTAGAAGATAGGTTGTGGTTCATGAAAGGTTCT TCACATGGGATGTTGACACAAAAAAGGACCAAAAGTTGAGGTAGAACATCTTACATACCC ACTTTCACCCAAATCCAACAAAAAAAAAAAACAGAGAACCAGAGACATAAAAACAACCAA ACTTCAGTCACAAAGTCCTCATGTTCCCAACAAATTCATCGCGTCTTGACATGTCACAAA CTGATTTTCTTCTCTAGATAGGCTTGATTTTGAAGTGCAGAGAGATGAGCGAAAAAAACA AGACATTTCAAGTCCTGAACAAGATAGTAGAAGATGCGAAGTCCTTCAGGATCATTACTG CTCTGGCAATCAACAAGAGATCCAATCTTAGATGTAGCGAATGAGATATGCTCATTACCC AAGACGA >SQ;8701755 ATCGAATCACCAAATCAATGTTTTCCTTTATTCTTTTGAAAGAAAAATAAAAATAAGAAA CAAAAGGTGGTTATATGGACGGATTCTCAAATCACACTCGCTATACATAAAAAGTGACTT GTCCTTTACTAGAGAGTGAAAGGCTTTGCATAGACATCGAATGTTTGGCAAGCAGTCAGT TGAGGCTCCTGTCTTAATCCCCCAATCGCACTTCCCCCTGTCAGAAGCATGCTCAGCACA GTCGTCACAACTCCACCACTACCACCACCATCATTCCCTGTATTCCTTATTGTGGTGCGC ATAGAATTCAGAAGGCTTCCATAGGTTGTGCCTTGTGCGCTGCGTTCAATTGCTTGAATA AAACAGAAAGTCATAGCACCCGTAGACGTGATCTTCGACAGCGCTGATGTGTCGGCCGAA GTCTGATCATCATCACATCCACTAATTGAAATGGCTTCTCCACCAGCAGTTCCTTTCCAC AAACCTGACCTAGGCCGATGATCCTCCCACACATACTGCCCAGCTCTGTTCATTCTGCAT AGGAAGGGTAAATCCAGAACGGTACCACTATGGCAAGCATCGATAATTGAATGGAGCT >SQ;8702125 TTTTTTTTTTTGGGTTGAAAGTTGCTTTATTTCATTGGTAACAACAACACAGTGGGAAAT TATGTATTACAGAGTATAGACACATATTCCTGTTTAAAATGAGGAAACAAGAAGATCATC TGAAGTAGTAATACCTTTAACTACGTTCCTGTCTGAAGGTAAACCAGCTACAACACCATG TTCAATGCCACATTCGTTTGTTCCTCTCCTGATCTTGAAGTACCCATCATTACCCCAGCT TCGGTTCCATTGATTTGCAAGCAACCAATAATCTTAACCGTCATCAGAAGTTCCCTAGCC AATAAGTTTAACAGCATGACCTCCAATGTTAGTACCTGGTATGTGCTTGTACACTCCAGA TTTGTAATGCGCAAAGTCCTCGTAAACAGTGAAGGCAACCTCAACAGGTCCATTTTTGTA AACTTCTGCCATAATGTCATCAGGGTGAGATCTGACCTTGTACGCACTAACACCATAATG CTTTGATTCACCGCCAAAGCTGGCTTCCGGTAACACA >SQ;8715845 CATCGGCCTTTGGGCTTTGAGTTACGCGTCACAATTGAATCAATTGGTCCTTTTAATTAG TTTTACCAATATACCCCTCCGTCTTTTCCCCCTTCTCGTTTAGGAAAAAAAATCATTAGC TTCGACTTATCCGAAACCTAACGAGTAACGACGAGAGATGCTTCTTCAGGCGGCGGTGCA GAACCGCAATGTTCCACTGGCTTCTTCCGCCTCCTACTCTCGTCTCCTTCGCTGCAGATC TCCTGTCGTCTCCGTAGCTGCTCTCTCGAAGAAGACGGCAGCAATCGTGTGCTCCATCTC CCAGGTTTATGGCTACGGCACGGTGGACTACGAGAGAAGGCCGATTGTCCAGTGGAATGC CATCTACAAGAAGATTTCGCTGATGGAGAAGCCAGAGCTTGGCGCTGCTTCCGTCTTGAA TCAGTGGGAGAAAGCCGGCCGCAAGCTTACCAAGTGGGAGCTCTGTCGGGTCGTC >SQ;8717375 GTAATTAGAAAACATGTTTGTGAATCTTGAAGTTAAATAAATAAACTAAGACTCCTAAAA TCTCTCCTACTGTATGTATAATTGTTACAACATAATATCAAAATACGCATACATATATAC AAGTTGAAAGCTAAAGAGCTAGTGAGAATTGTCTGAGACCCAACCTCCCGAAACCATTCC CTCGTCGACAGGCTTCAGGCCACCACAGGATCTGGCTACCGATTCAAACAGCTTCTCAAT CTCAGGCGCACATCTGATGAAGGCTTGTTTCCAGAAGCTATATCTTGGGTTCTTTATTAG CTCAATGAATGTGATTAGAAGTCCCCATGGATGTGGCCTGTTCACAATTAGCCGTTCCAA CAGCACTCTAGTTATTTGCTCCTGTATGATCTCCTGATCAGATTCGAAGAATAGATAGAG CATGATGAAAGAAAAGTAATGAGTGTGGTTGTTGGGGTATCGAAGCTGATTGGCGATTGC ATTAAGGAACAGATACCGCCCTTCCGTATCAAGTTCCATAC >SQ;8720010 TTTTTTTTTTTTTTTTTCCTGACAAAACCCCAAGACTCAATTTAATCAATCCTCAAATTT ACATGATACCAACGTAATGGGAGCTTAAAAATA >SQ;8721428 GAGACACAGGACTTCGGGATCTTGGGCAGCTGGAACAAGATCTTGTTTTTGGAGATGCAG GTGCCAAGGACGTTATCAACTTTCTGAGGACGAATCAGGACACAAACCCGGAAAACAAAT TACGGCTTTTGATGATTTATGCAACAGTGTACCCCGAGAAGTTTGAAGGTGACAAGGGTG TGAAGCTAATGCAGCTTGCTAGATTATCACCTGTGGATATGAAGGTTATAAGCAACATGC AATTGATAGCTGGATCCCCAGAAAACAAAGCTAAGTCCGGTAGTTTCTCCCTCAAATTTG ACG >SQ;8722075 TGTGGTAAGAAAGAAAACCCTAAACCACCGGAAATCGATTTGTTTGGAAGATGGATATCG AGCAGAAGCAAGCCGAGATCATTGATCAGCTCGTGAAGCGACTTCTACTTGCAAATCCGA GGCTCTGGGCCCGCTCATCATCGAAGCCACATCGCATCCTTCTCTCTTCGCCTTCTCCGA GATTTTGGCTCTACCCAATGTTGCCCAGCTTGAAGGAACCACAGATTCTGTGTACCTGGA TCTACTACGCTTGTTTGCCCATGGCACCTGGGGAGACTACAAATGCAATGCCACCCGTCT TCCGCACTTGTCCCCTGACCAAATTCTTAAGCTTAAGCAGCTCACTGTCCTCACCCTTGC TGAGTCTAACAAGGTATTGCCCTATGATACACTAATGGTCGAGTTAGATGTTTCCAATGT TCGCGAACTCGAGGACTTTCTTATCAATGAATGCATGTATGCGGGTATAGTTAGGGGAAA ACTGGATCAGTTAAAAAGATGTTTTGAGGTTCCGTTTGCAGCTGGTAGGGATCTAAGGCC AGGTCAACTAGGGAATATGTTACACACA >SQ;8722221 TTGGATTCATCTAAGAAGCAGACTCTGTTTTCATGGCTGTTTACAATACCAAACTCTGTT TGGCCTCTGTTTTCTTGCTCTTAGGGCTTCTCTTGGCTTTTGACTTGAAGGGTATAGAAG CAGAAAGTCTTACCAAACAGAAACTGGACTCGAAGATACTTCAGGATGAGATTGTGAAGA AAGTCAACGAAAACCCAAACGCTGGATGGAAAGCTGCTATAAATGATCGATTTTCAAACG CCACTGTTGCAGAGTTGAAGCGTCTTCTCGGTGTTAAACCAACACCAAAGAAGCATTTCT TAGGTGTGCCTATTGTGAGCCATGATCCATCTTTGAAGCTACCTAAAGCGTTTGATGCTA GAACTG >SQ;8726286 GCCCCAACAGTATTATCCTTGGTTTGCACAGTACATGGTTATGAAAAGAGCGAGCATCGA GCCGAATTTTCATGATCTGTACCTGAAGTTCTTGGACAAAGTTGATTCCAAGCTGCTGTT TAAGGAGATACTTCAAAATACTTACGAAAATTGCAAGGTTCTTTTGGGCTCAGAGCTCAT AAAGTCGAGTTCTGAAGAGCGTTCTCTTCTTAAAAATTTAGGCAGTTGGCTTGGAAGGTT GACCATTGGAAGGAATTATGTTTTAAGGGCGCGAGAAATAGATCCAAAATCCTTGATTGT GGAGGCCTATGAAAAAGGGTTGATGATAGCAGTCATTCCGTTCACTTCAAAGGTTCTGGA GCCATGCCAAAACAGTATTGCTTATCAACCTCCCAATCCTTGGACGATGGCTATACTAGG GTTGCTTGCTGAGATCTATTCAATGCCAAACCTAAAAATGAATCTGAAGTTTGACAT >SQ;8726341 CTGTTATTGAACAAGCACTTTCAAGGATATCATCTGGTAATTTAGAATCAGATGCCTCTG TTTCACACCCTGGTCCCTCACAATCTTTCCCTGGAAATGGCGAGTTGAGTGGTTCTGGAA TTGGCCAACCTGCATTACAGCTTTCTTCTCCCCTACAGCTTCAACAGAAAAATGAAGTGC CAAGTGTGCCATCTAACGAGGCAAAGCCACTTCTGCCATCGTTATCAACTACTTCCGTTG ATGTTTCTGTCAATCCTAAGAATCCTGGCATTCCAACTTCTTCATCAACCTCAACTGGTT TTGTTCGTCCAGCTCGTGCAACCACTTCAACAAGGTTTGGCTCGGCTTTGAACATAGAAA CCTTGGTTGCAGCAGCAGAAAGAAGGGAAAACGCAATCGAGGCTCCACCTTCAGATGTTC AGGACAAAGTTTCGTTCATAATCAATAATATCTCTACAACAAACATTGAATCTAAAGGGA AAGAGTTTGCTGAAATTTT >SQ;8727457 GTTATGCAAAGAAACCCATAGAAAACCACTAAAGGCAGAAATGAAAAACAAGAATGTTGG AAAGATGAGGACCTCATCATGAGGTAAAGCAAATAGGAAACGTGAAAAACAGAATAATAA CCAACCAAAGGAGCTTAATTACAGACAAGACAGATTTGGGGGGATGTTGTGTAAAAACCA AGTAGTAGTGAATTGGAGCCTAGTCAAAAGAAGGAACACGTGTTCTAA >SQ;8728304 AAAGGAAATAGTACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATA CCATAATCACCAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCAT AGTTCATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTC TCATTCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGG AAGCCGTGGCTGATACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTG CCACACTCATGCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCA CTCAT >SQ;8729681 GGGATTGAGAAAAAAATAATCAGAAGAGAAAGATCCATGGCTGATAATTGTATCAGACTT CTTCACTCAGCCTCTGATTTCTTCTGTTTAGGGCTTCTAATTTCATCCTTCAACTTGGTG CACGGTATCGCAGCTGAAAATCTTTCCAAGCAGAAACTGACCTCATGGATTCTTCAGAAC GAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGATGGAAAGCTTCTTTCAATGAT CGGTTTGCAAACGCCACTGTAGCAGAGTTTAAGCGCCTTCTTGGAGTTAAACCAACAC >SQ;8731408 ACTTCTTCACTCAGCCTCTGTTTTCTTCTGTTTAGGTCTTCTAATTTCATCCTTCAACTT GTTGCAGGGTATTGCAGCTGAAAATCTTTCCAAGCAGAAACTGACCTCATGGATTCTTCA GAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGATGGAAAGCTTCTTTCAA TGATCGGTTTGCAAACGCCACTGTTGCAGAGTTTAAGCGCCTTCTTGGTGTTAAACCAAC ACCAAAGACGGAATTTTTGGGTGTGCCTATTGTAAGCCATGATATATCTTTGAAGCTTCC AAAAGAATTTGATGCTAGAACCGCTTGGTCACAGTGCACCAGTATTGGAAGGATCTTAGA TCAGGGTCACTGTGGTTCTTGCTGGGCCTTTGGTGCTGTTGAATCACTGTCTGACAGATT CTGCATCAAATATAACATGAATGTTTCTTTATCTGTCAATGATCTTTTAGCATGTTGTGG ATTCCTTTGCGGTCAAGGTTGTAATGGTGGATACCCAA >SQ;8731753 CTGGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAATAG TACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCACC AAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATAGTTCATTTGT GCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCCTA AAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGGCT GAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGCCACACTCATG CATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCACTCATCGCCTT TCTCGGTAACCAGTTCTCACAGGAGTGGACATTCACCAGAGATTTTGGAACTATCAATGC >SQ;8731976 GTTATGCAAAGAAACCCATAGAAAACCACTAAAGGCAGAAATGAAAAACAAGAATGTTGG AAAGATGAGGACCTCATCATGAGGTAAAGCAAATAGGAAACGTGAAAAACAGAATAATAA CCAACCAAAGGAGCTTAATTACAGACAAGACAGATTTGGGGGGATGTTGTGTAAAAACCA AGTAGTAGTGAATTGGAGCCTAGTCAAAAGAAGGAACACGTGTTCTAAGATTGGAAAGGA TATTGCTAGGCTGGTCACGTCAATCAAGTTGAGCAGCAGCCGTTCTTCTGTGCCACAGGC TGTCCTCTGATCTGCACGGTCGGTGGTCTTGCATTATTCCCAGCTGGTTGGCTAGCCATT CTCTCTTTGATGGATGCAGACATTGCCATGAAAGCCTGTTCTACGTTTGTAGCATCTTTT GCACTAGTCTCCATAAAAGGA >SQ;8732177 ATGGGGTCTCTCGTTCGTGAATGGGTTGGGTTTCAGCAATTTCCAGCAGCTACCCAGGAA AAGCTGATTGAATTCTTCGGAAAATTGAAGCAAAAGGATATGAACTCAATGACAGTTCTT GTTCTGGGTAAAGGCGGTGTCGGAAAATCATCCACTGTCAATTCTCTTATCGGCGAACAA GTCGTCCGTGTCAGTCCTTTCCAAGCTGAAGGATTGAGACCAGTGATGGTTTCAAGAACA ATGGGAGGGTTCACTATCAACATTATTGACACCCCTGGACTTGTGGAAGCTGGATATGTC AATCACCAAGCTCTCGAGTTAATCAA >SQ;8732348 TTCTGGAACATGTTTGCTTTATATATATATGTTTCTTAGTTCACAAAGAGAAAAGGAAAT AGTTCTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATACCATAATCA CCAAAAGCTTGATATGCATAAATATATGTGGGCGCTTTATATATGTTTCATAGTTCATTT GGGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCTCATTCTCC TAAAATCTTCCAAGGGTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGAAGCCGTGG CTGAAACAGGCTTCCCATACTTGGTCCAAATCCGAAAGAAAAAGGGATGTGCCACACTCA TGCATTTCC >SQ;8732738 AGTTTTTTTTTTTTTTTATTTGAATGATAGAGCGGTTGCTCATTAAAAAATCGTTTTAGA GCAATGTCACCAAACAAAGAAAATCCATTTGCCGATGAAAAAACACCGAATATAAAATTC GATTATATATTGACCATTAACCATGTTACTGACCGGGAACTGAGGGGTGGTGACGGGTTC AACACAGATTCCACAAAGGGAGAGAATGACCTACGCAACGGGGGAGGTGGGACTTCCATA ACTTACGAAGAGTCATGATCCGCTAGACTACAACTGGACCTCCCACAGAGAAATGGTACA GACTCTGAAAGCTAGAGTCATTAATCCCCAGAACCTC >SQ;8732878 GTATGATAGAGCGGAAGCTTATTAAAAAATCGTTTTAGAGCAATGTCACCAAACAAAGAA AATCCATTTCCCAATAAAAAAACAACGAATATAAAATTCGATTATATATTTACCATCAAC CACTTAACAGACCACAAAATGAAGGCTGTTTACGGATTCAACACAGATTAACGGGTATGT ATGTATGATCTAGGCAACGGTGGTGGTGGGACCAGGATAAGCAGGAAGAGTCATGATCCG CTTGTCTACAACTGGACCTCCCACAGTGAAATGGTACAGACTCTGAAAGCTAGAGTCATT AATCCCCAGAACCTCGTGCACTGGATCATCGAAATAGCACCCAATCCCGGTTGCTGAGAT CCCCATTGCGTGTGCTTCCAGGTACAAAACTTGTCCAACAACACCCGTCTCCCAGAACAG TCGAGGGTACATCCATGAGCCCTTCTCCCGCAGTGCTGGTTCAAACCGAGCTATCATGCC TAAGCTGAAGCATCCATCCCCTGCAATGTCCTGATGACATGATAGCCCTTTTGCCA >SQ;8734273 GAACAAATCTCCATAAATTACAGACAAAGATAAAGCCGGAAACAAGAAAATGTTGCAGAT AAAATCTAACAAAAGAAAGAACAATCGAAAAACTCTTCTTCTCCTTGTAATTTGCTCACA ACAAAACCTCTTCTTCAGAGCCTCTTAAAGTGGCTTTCCACTTGTCTTGATATCATTTCT GATTGCTCCTTGAATCATCTTAACGATCAAATACTGAGCGCCTATGATAAGAGGGATGAG TTTCTTTCCTTTATCATCAGAGTAAGATCCATCTACCATCTTCTTGTCTACATGAATTGC TTTCCTCTGGTTTGTTGCTACATCAGTTATCGCCTTAACCAAGTTCGGGATCCACGCTTC ACCATTTGGAAGAGCCTTTTCGT >SQ;8734707 TAGTCTGGGTCTCATGAACCAAGGGGAGGAGCTTAACAGGATCGGTGAGGTGTATATCCA CAACCATCCAGATATGAAAGTGAGACTGGTCGACGGCAGTAGATTAGCAGCAGCTGTTGT GATCAACAGTGTACCCAAAGCAACTACAAGCGTCGTGATGACAGGCAATCTCACTAAGGT TGCCTACACCATCGTCTCTGCTCTCTGCCAGAGAGGCGTTCAGGTCTCCACTCTGCGCCT AGACGAGTATGAGAAAATAAGATCATGCGTTCCACAAGAATGCAGAGACCATTTGGTCTA TTTAACCTCTGAAGCACTC >SQ;8734878 GGGTTGAAAGTCGTTTTATTTCATTGGTAACAACAACACAGTGGGAAATTATGTATTAGC AGAGTAGAGACACATATTCCTGTTTAAAATGAGGAAACAAGAAGATCATCTGAAGTAGTA ATACCTTTAACTACGTTCCTGTCTGAAGGTAAACCAGCTACAACACCATGTTCAATGCCA CATTCGTTTGTTCCTCTCCTGATCTTGAAGTACCCATCATCACCCCAGCTTCGGTTCCAT TGATTTGCAAGCAACCAATAATCTTCACCGTCATCAGAAGTTCCCCAGCCAATAAGTTTA ACAGCATGACCTCCAATGTTAGTACCTGTTATGTGCTTGTACACTCCAGATTTGTAATGC GCAAAGTCCTCGTAAACAGTGAAGGCAACCTCAACAGGTCCATTTTTG >SQ;8734901 GGGTTGAAAGTCGTTTTATTTCATTGGTAACAACAACACAGTGGGAAATTATGTATGGCA GAGTAGAGACACATATTCCTGTTTAAAATGAGGAAACAAGAAGATCATCTGAAGTAGTAA TACCTTTAACTACGTTCCTGTCTGAAGGTAAACCAGCTACAACACCATGTTCAATGCCAC ATTCGTTTGTTCCTCTCCTGATCTTGAAGTACCCATCATCACCCCAGCTTCGGTTCCATT GATTTGCAAGCAACCAATAATCTTCACCGTCATCAGAAGTTCCCCAGCCAATAAGTTTAA CAGCATGACCTCCAATGTTAGTACCTGTTATGTGCTTGTACACTCCAGATTTGTAATGCG CAAAGTCCTCGTAAACAGTGAAGGCAACCTCAACAGGTCCATTTTTGTAAACTTCTGCCA TAATGTCATCAGGGTGAGATCTGACCTTGTACGCACTAACACCATAATGTTTTGATTCAC GCCAAAGCTGGTTTCCGCTAACACATTTCCTTGCACATTTTGGTGTAGGGTAAGCGGGTT CACATCCCGGGTGCGAGCAACCAGTATTGTCGAAGTATGGATCACAC >SQ;8735154 TAACTATTATTAAATTACATAAGTGTGGAAATAAAACCTAGCTATAAACACTGGTTCTTG AAAAAAGAAAGCATATATGCAGAGTGAGCTATGATTTACTTGATAAGGAAGAGACCAATC GCAGTGACGATGAGTGTTGAAGGCAAACCGAATTTGAAATGTTTAGTGAAAGTGAGAGTG TATCCATGGCTCACTGCTCTACGAGCTTGCTCACACACTATCAGGTTTGCTGCTGAACCA AGCAACGTCAAGTTTCCAGCCACTGTGCTCACCCACGCCAGCAACAACCACGCCTTCTTC TCCTCCTCCCTCCCCATCGCTGATGCCGCCACTCTTGCTCCCAACAAAAGCACGGTTGGT ACATTAGAGGCTACATTGGAGAGGACAAGAATCACAACTGCTAGAACCGCGATTCCTTTG GCTTGATCAATTTTGGCATATGGCTCCATTAGGTCCCATAGAGCGGTAGGGATACCAGTT TTGTTGAATCCATCAACGGTTATGAACATCCCGCAGAAAAAGATCAAAAGCGAATACGAT ACC >SQ;8735385 GTTTTATTTCATTGGTAACAACAACACAGGGGGAAATTATGTATTACAGAGTAGAGACAC ATATTCCTGTTTAAAATGAGGAAACAAGAAGATCATTTGAAGTAGTAATACCTTTAACTA CGTTCCTGGCTGAAGGTAAACCAGCTACAACACCATGTTCAATGCCACATTCG >SQ;8735393 AAAGGAATAATAGTGTTTTTTTTTTTTGTAATTAGAAAACATGTTTGTGAATCTTGAAGT TAAATAAATAAACTAAGACTCCTAAAATCTCTCCTACTGTATGTATAATTGTTACAACAT AATATCAAAATACGCATACATATATACAAGTTGAAAGCTAAAGAGCTAGTGAGAATTGTC TGAGACCCAACCTCCCGAAACCATTCCCTCGTCGACAGGCTTCAGGCCACCACAGGATCT GGCTACCGATTCAAACAGCTTCTCAATCTCAGGCGCACATCTGATGAAGGCTTGTTTCCA GAAGCTATATCTTGGGTTCTTTATTAGCTCAATGAATGTGATTAGAAGTCCCCATGGATG TGGCCTGTTCACAATTAGCCGTTCCAACAGCACTCTAGTTATTTGCTCCTGTATGATCTC CTGA >SQ;8735505 ATCGAATCACCAAATCAATGTTTTCCTTTATTCTTTTGAAAGAAAAATAAAAATAAGAAA CAAAAGGTGGTTATATGGACGGATTCTCAAATCACACTCGCTATACATAAAAAGTGACTT GTCCTTTACTAGAGAGTGAAAGGCTTTGCATAGACATCGAATGTTTGGCAAGCAGTCAGT TGAGGCTCCTGTCTTAATCCCCCAATCGCACTTCCCCCTGTCAGAAGCATGCTCAGCACA GTCGTCACAACTCCACCACTACCACCACCATCATTCCCTGTATTCCTTATTGTGGTGCGC ATAGAATTCAGAAGGCTTCCATAGGTTGTGCCTTGTGCGCTGCGTTCAATTGCTTGAATA AAACAGAAAGTCATAGCACCCGTAGACGTGATCTTCGACAGCGCTGATGTGTCGGCCGAA GTCTGATCATCATCACATCCACTAATTGAAATGGCTTCTCCACCAGCAGTTCCTTTCCAC AAACCTGACC >SQ;8736724 GTCACAAAAAGGGACACAGCTTTTTCATTCATGTTTCACTAGGCAGTCTCTTGTGTACAT TATACATATTTCGCATTTCCTCAGTTGACTCCGGTTACAAGATTCGTTTTTTAAAGCAAA GATCTAGGACTATCAGATTACAAATCATCTTGTAGCTGTGTTAGAAGCGCATCGGTCTCA TGGGCATCGATTTCACTGTTGTTTACTGTTCTGTTTTCGTCCACATCAATAAGAGCTAGG TAAGATTTGTCTTCAAGATCCCCCGACTGCCTTAACAATTCCAAAACGGCCTCTTTACTG GTAACATCCGATTCCTCTTCACAGAGCTTGAAGAAACCAGACAGCATCAACACCTTGGGC CTCCAATTGCTGGACCCTTCAGCCGAAAAAGCATTTCTAAGACAAGTCAAAGCCTCTGAA ATACACCTCTTTCTGGTATGACCAACAGCTAGAATCTCCCACGTACTTGAACTTGGTTTT CCTCCCATTTCAACCA >SQ;8737545 GGGAAACATCCATTTCATTTAACCAGAAAGCATGGCAATCTTTTCTTTGAACAAATCTCC ATAAATTACAGACAAAGATAAAGCCGGAAACAAGAAAATGTTGCAGATAAAATCTAACAA AAGAAAGAACAATCGAAAAACTCTTCTTCTCCTTGTAATTTGCTCACAACAAAACCTCTT CTTCAGAGCCTCTTAAAGTGGCTTTCCACTTGTCTTGATATCATTTCTGATTGCTCCTTG AATCATCTTAACGATCAAATACTGAGCGCCTATGATAAGAGGGATGAGTTTCTTTCCTTT ATCATCAGAGTAAGATCCATCTACCATCTTCTT >SQ;8737761 AAGGAAATAGTACTCTTATTAATACCATAGTCACCGAGCTTAATTTGACTCTATCAATAC CATAATCACCAAAAGCTTGATATGCATAAATATATGTGTGCGCTTTATATATGTTTCATA GTTCATTTGTGCGTGGAAGAGCTGGATCATAAGGAAAAGAAGCACAGAGCGTGTCGCTCT CATTCTCCTAAAATCTTCCAAGGTTGGAGTTTTAATGATGTGGAAGGAGGAGAGGCTGGA AGCCGTGGCTGAGACAGGCTTCCCATACTTGGTCCAAATCCGAGAGAAGAAGGGATGTGC CACACTCATGCATTTCCCATCCTTCTAAGGCGTGCAATATGCCGGCCACTCTAGTTGCAC TCATCGCCTTTCTCGGTAACCAGTTCTCACAGGAGTGGACATTCACCAGAGATTTTGGAA CTATCAATGCTGGTGTGGTATGATAGATACAATCTCTACGTAACTGCTTGAGGGGGAACT GTGAGAATGGTATAAAC >SQ;8738747 AAGGAATAATAGTGTTTTTTTTTTTTGTAATTAGAAAACATGTTTGTGAATCTTGAAGTT AAATAAATAAACTAAGACTCCTAAAATCTCTCCTACTGTATGTATAATTGTTACAACATA ATATCAAAATACGCATACATATATACAAGTTGAAAGCTAAAGAGCTAGTGAGAATTGTCT GAGACCCAACCTCCCGAAACCATTCCCTCGTCGACAGGCTTCAGGCCACCACAGGATCTG GCTACCGATTCAAACAGCTTCTCAATCTCAGGCGCACATCTGATGAAGGCTTGTTTCCAG AAGCTATATCTTGGGTTCTTTATTAGCTCAATGAATGTGATTAGAAGTCCCCATGGATGT GGCCTGTTCACAATTAGCCGTTCCAACAGCACTCT >SQ;8738841 AAATTCAAAGCCATTTTTCTTTTAATGGGCAGAGAGACACCAAATTTGCTAATGAGGGAA ATCAAACATAACAAGGGGTTATTGTGAGAGAGAACAGAGGATCTTATACAAGTTGAAAAT CCGCAACCAAATAATCATAATCTACTCTCGGTAAATGGAATGTCAATCCGCACTGACCAT TTGCTCTCTCTTGCTCCTCTACCTTGTTACAGGATGCCTCCTCCTCTTTGGTCGGATCCC ATCTTCTTCGTAGTCCATCACTCCACTTGGTTCCCCAAACATCTCCTTATTCCCTCTGAT GTCAACATCCCCCTTCATGGACAGAGACTTCTTCACTTCTTCCACCCCTTCTTCTGCTTC CTTACGATGTTTTTTGTCCATCTCACTCATATTGTCCGCCCATTTGATCTTGTCTTGAAT TGAAATGAGCAGATTCTCTGACGTGTTCAACCAGTTGGACAATGTGTGTAACATATTCCC TAGTTGACCTGGCCTTAGATCCCTACCAGCTGCAAACGGAACCTCAAAACATCTTTTTAA CTGATCCAGTTTTCCCCTAACTATACCCGCATACATGCATTCATTGAT >SQ;905849 CNACGGTATAATGGCCACAAAACCAGGAGTCCTCACCGATTGGCCTTGGACACCCCTCGG AAGTTTCAAGTACATCGTAATAGCACCATGGGCTGTCCATAGCACATACAGGTTTGTGAC AGATGATCCAGAGAAGAGGGATCTCGGGTACTTCCTTGTGTTCCCCTTCTTGCTCTTCAG AATTCTGCACAACCAGGTTTGGNTCTCTCTGTCCCGTTACTATACGTCCTCGGGAAAGAG ACGCATCGTCGACAAGGGAATCGACTTCAATCAGGTCGACAGGGAGACCAACTGGGATGA CCAAATATTGTTCAACGGAGTGCTTGTTCTATATAGGCATCAAACCTATTNCCGGAGGCA AACAACTTTCCCTGGGTGGAGAACTTNACGGAGTGTTTNATGGAAGCGCTTTTTNAAAAC GGACCCGTGGAGTTCCNCTANTATTGGTTCNNAAAGGTTTCANCATAACTTTNTTNATTC CGNTNCCATTCCACAACAATCTTTNTNGGNNTTGGCCATAATTGGNGA >SQ;933584 AAGTAAAAAAAGACAAGGCATGGCCGCGGAAGAAGCGACGGAGTTCTACCTGAGATACTA TGTCGGTCACAAAGGGAAATTTGGACACGAGTTCCTGGAGTTCGAGTTTAGAGAGGACGG TAAGCTCCNTTACGCCAATAACTCTAACTACAAGANCGATACTATTATCCGCAAGGAGGT ATTTCTCACCCCCGACGTGCTCAAGGAATGCAAGCGTATCNTCTCCGNGAGCGAGATTCT GAANGANGNCGATAACAATTGGCCGGAACCTGACCGTNTTGGAAAGCANGNAGCTTCGAG ATCGGTCTTTGGGTAAATATGCATATCTCATTCCGCTACANCCTAAAGATTGGGTNCTCC TTGTCGANTNNCCAGAGCNGNNATG >SQ;935362 GATTACNGGAACTCGTTGAGGGATTGAGAAAAAAATAATCAGAAGAGAAAGATCCATGGC TGATAATTGTATCAGACTTCTTCACTCAGCCTCTGTTTTCTTCTGTTTAGGGCTTCTAAT TTNATCCNTCAACTTGTTGCAGGGTATNGCAGCTGAAAATCTTTCCAAGCAGAAACNGAC CTCATGGNTTCTTCAGAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGATG GAAAGCNTCTTTCAATGATCGGTTTGCAAACGGCACTGTTGCAGAGTTTAAGCGCCTTCT TTGGTGTTAAACCAACACCAAAGGNCGGANTTTTTNGGGTGTGCTATTGTAAGCCATTGA TAATANCTTTTNANGTTTCNAAANGAATTTAATGCTAGAACCGTTNGGTCACAGTGGANC AGTATTT >SQ;936803 GGAACTCGTTGAGGGATTGANAAAAAAATAATCAGAAGAGAAAGATCCATGGCTGATAAT TGTATCANACTTCTTCACTCAGCCTCTGTTTTCTNCTGTTTAGGGCTTCTAATTTNATCC TTCAACTTGTTGCAGGGTATTGCAGCTGAAAATCTTTCCAAGCAGAAACTGACCTCATGG ATTCTNCAGAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGATGGAAAGCT TCTTTCAATGATCGGTTTGCAAACGCCACTGTTGCAGAGTTTAAGCGCCTTCTTGGTGTT AAACCAACACCAAAGNCGGGGATTTTTTGGGGTGTGCCCTATTTGTAAGGCCATGGTNAT NTCCTTTNAAGGTTTCCCAAAAGNATTTTNATNCNNGGACCCCCTTTGGGCAAAGGGGCN CCCCTNTTTTGGAGGGCCCTTTNGGTC >SQ;937871 AAAGANTTTNATGCTAGAACCGCTTGGTCACAGTGCACCAGTATTGGAAGGNTCTTAGAT CAGGGTCACTGTGGTTCTTGCTGGGCCTTTGGTGCTGTTGAATCACTGTNTGACAGATTC TGCATCAAATATAACATGAATGTTTCTTTATCTGTCAATGATCTTTTAGCATGTTGTGGA TTCCTTTGCGGTCAAGGTTGTAATGGTGGATACCCAATTGCTGCGTGGCGGTACTTTAAG CACCACGGTGTAGTCACTGAAGAGTGTGATCCATACTTCGACAATACTGGTTTGNTCGCA CCCGGGATGTGAACCCGCTTACCCTACANCAAAATGTGCAAGGAAATGTNTTAGCGGAAA CCCAGCTTTGGNGTGAATCAAAACAATTATGGTGTAGTGCGGTCAAGGTCAGATCTCACC CTGNTGCAATATGGCAGAAGGTTNCAAAAATGGGCCTTTTAGGTTCCTCACTNNTTNNNG GCNTTTCGGATTAAAATCTGGGGTTC >SQ;958004 AGGTATGGCTGGTGGGAGAAGGAACAACAAGAGAAGAGCAGGAAAAAGCCACAAAAGGGA CATTGTTTATACCATTCTCACAGTTCCCCCTCAAGCAGTTACGTAGCGATTGTATCTATC ATACCACACCAGCATTGATAGTTCCAAAATCTCTGGTGAATGTCCACTCCTGTGAGGTAA GTATTCAAAGCTACCCAATCCAACTAATTTATTAGAAGAGGTAGTCCTTATTATAAAAAA AACATCTGCAGAACTGGTTACCGAGAAAGGCGATGAGTGCAACTAGAGTGGCCGGCATAT TGCACGCCTTAGAAGGATGGGAAACGCATGAGTNTGGCACATCCCTTCTTCTCTCGGATT TTGACAAAGTATTGGAAGCCTGTNTCAGCCACGGGTTTCAGCTTTTCCTCCTTCCACATC ATTAAACTCCAACCTTGGGAGGTTTTTTGGGGATNAGAGNGNCACGGTTTGTGCTTTTTT CCTATNTCCAGTTTTCACGGCACATGACTTTGACATTTTAAGGGGCAAATTTTGGTTCGC AAATTC >SQ;958152 AACGCTCCTCACACAACGGGTTTAGGAGTNATGGGGTCTCTCGTTCGTNAATGGGTTGGG TTTCAGCAATTTCCAGCAGCTACCCAGGAAAAGCTGATTGANTTCTTCGGAAAATTGAAG CAAAAGGATATGAACTCAATGACAGTTCTTGTTCTGGGTAAAGGCGGTGTCGGAAAATCA TCCACTGTCAATTCTCTTATCGGCGAACAAGTCGTCCGTGTCAGTCCTTTCCAAGCTGAA GGATTGAGACCAGTGATGGTTTCAAGAACAATGGGAGGGTTCACTATCAACATTATTGAC ANCCCTGGNCTTGTGGAAGCTGGNTATGTCAATCACCAAGCTCTCGGGTTAATCAAAGGG GGTTCTTGTGANCAGGACAATAGNTGTNTTTGCNCTATGTTGANCGTTTGGTTGTNTATA GNGCCGTTGGCTGGTAANAAANTTGTTTTGNATTCCCCAACCTTTGGAAAGGGTTTTGGG AAAACCTGTTNTCTNCNANGCCAATTCCCCCCGT >SQ;9778203 TTACTATACCAAACTCTGTTTGGCCTCTGTTTTCTTGCTCTTAGGGCTTCTCTTGGCTTT TGACTTGAAGGGTATANAAGCAGAAAGTCTTACCAAACAGAAACTGGACTCGAAGATACT TCAGGATGAGATTGTGAAGAAAGTCAACGAAAACCCAAACGCTGGATGGAAAGCTGCTAT AAATGATCGATTTTCAAACGCCACTGTTGCAGAGTTTAAGCGTCTTCTCGGTGTTAAACC AACACCAAAGAAGCATTTCTTAGGTGTTCCTATTGTGAGCCATGATCCATCTTTGAAGCT ACCTAAAGCTTTTGATGCTAGAACTGCTTGGCCACAGTGCACTAGTATTGGAAACATCTT AAATCAGGGACATTGTGGTTCTTGCTGGGCATTTGGTGCTG >SQ;9778306 ACGAGAAATGCAAAGCCATCAGAATCGAAGCAGGCTGAGCTTGATTCTACGGTCTAGATT CATCCCTTCCTTCTCTTCACCACTCTCCCTCTTCGTCGTCCTCGCTGCTGTTCCTCTTCC GATCTACTTTTCCGGTCTACTCTCCGGCAGAAACAACAAGCCGCTTTCAGTTATGAGACT CAACTCCAACTTAGCTTCTTCAATGGTGGAATCGAATATTTCTTGTACCACTTTCAATAT CTTGGCTCCGATTTATAAACGCGTTGATCAAAAGAATCATAGCACTCGAGAGAGCGATTT CCGCACGCTTTGGTTAGCTCGTAACCAGAGGATTTTAGATTTGTTACTCCATCAACGCTC TTCAGTTATCTGTCTCCAGGAAGTTTGGGTTGGGAATGANGAATTAGTGAACATGTTACA CA >SQ;9778321 ACGAGAAATGCAAAGCCATCAGAATCGAAGCAGGCTGAGCTTGATTCTACGGTCTAGATT CATCCCTTCCTTCTCTTCACCACTCTCCCTCTTCGTCGTCCTCGCTGCTGTTCCTCTTCC GATCTACTTTTCCGGTCTACTCTCCGGCAGAAACAACAAGCCGCTTTCAGTTATGAGACT CAACTCCAACTTAGCTTCTTCAATGGTGGAATCGAATATTTCTTGTACCACTTTCAATAT CTTGGCTCCGATTTATAAACGCGTTGATCAAAAGAATCATAGCACTCGAGAGAGCGATTT CCGCACGCTTTGGTTAGCTCGTAACCAGAAGATTTTAGATTTGTTACTCCATCAACGCTC TTCAGTTATCTGTCTCCANGAAATTTGGGTTGGGAATG >SQ;9778889 ACTAGTCTCGAAAACCCAAACGCTGGATGGAAAGCTGCTATAAATGATCGATTTTCAAAC GCCACTGTTGCAGAGTTTAAGCGTCTTCTCGGTGTTAAACCAACACCAAAGAAGCATTTC TTAGGTGTTCCTATTGTGAGCCATGATCCATCTTTGAAGCTACCTAAAGCTTTTGATGCT AGAACTGCTTGGCCACAGTGCACTAGTATTGGAAACATCTTAGATCAGGGACATTGTGGT TCTTGCTGGGCATTTGGTGCTGTTGAATCACTATCAGATAGATTCTGTATCCAATTTGGG CA >SQ;9778953 GGAGTTCTACCTGAGATACTATGTCGGTCACAAAGGGAAATTTGGACACGAGTTCCTGGA GTTCGAGTTTAGAGAGGACGGTAAGCTCCGTTACGCCAATAACTCTAACTACAAGAACGA TACTATTATCCGCAAGGAGGTATTTCTCACCCCCGCCGTGCTCAAGGAATGCAAGCGTAT CGTCTCCGAGAGCGAGATTCTGAAAGAAGACGATAACAATTGGCCGGAACCTGACCGTGT TGGAAAGCAAGAGCTCGAGATCGTCTTGGGTAATGAGCATATCTCATTCGCTACATCTAA GATTGGATCTCTTGTTGATTGCCAGAGCAGTAATGATCCTGAAAGACTTCGCATCTTCTA CTATC >SQ;9781141 CAGGAATGCCGCACGAGCATGAATGTTTCTTTATCTGTCAATGATCTTTTAGCATGTTGT GGATTCCTTTGCGGTCAAGGTTGTAATGGTGGATACCCAATTGCTGCGTGGCGGTACTTT AAGCACCACGGTGTAGTCACTGAAGAGTGTGATCCATACTTCGACAATACTGGTTGCTCG CACCCGGGATGTGAACCCGCTTACCCTACACCAAAATGTGCAAGGAAATGTGTTAGCGGA AACCAGCTTTGGCGTGAATCAAAACATTATGGTGTTAGTGCGTACAAAGTCAGATCTCAC CCTGATGACATTATGGCAGAAGTTTACAAAAATGGACCTGTTGAAGTTGCCTTCACTG >SQ;9782167 ACGAGCTTACATGACAAAACAGTTATTCCCTTTCCGCTTAATGGAAAGCAAGACGTCCAA CAAGAAGTTATTATAGTGAACACTCACCTCTTGTTTCCTCACGATTCTAGTTTGTCTATT GTAAGACTGCATCAGGTTTACAAAATTCTTGAATATCTGGAAGCTTACCAAAAGGAAAAT AAACTTAATCACATGCCCATTATTCTCTGCGGTGACTGGAATGGAAGCAAACGCGGGCAT GTTCTACAAATTTTTGAGATCTCAAGGGTTTTATTTCATCATACGATGATGCTCATCAGT ATACCGACAGTGATGCTCATAGGTGGGTTTAGCCACAGAAACCACAGGGGGAAATATTTG CGGAATTTGATTTCATATGGCTCTGTAACCCT >SQ;9782568 AATTCGGCACGAGGAGAAACAAGACCGCAACTGACTTTGCTATTTCTCTACTCCAATCCT TGGTCACTGAGGAGTCGAGTGTCATTTCAGAGCTCCACAGTCTTGTTGATGCGCTGGCAA AGCTTGCCTCAAAATCCGGATCTTCTGAGTCATTGCAACAGCTAATTGACATCATACGAA ATCCAGTTACTAACACAGCTGGCCTCTCTGATAGTTCAACCGGAAATGATAACAACGATA GGCAAAAGGATGAGAAGGTTGCGTGCAACACCACTAACACAGAAGAGAGTACCAGCTTGG ATTATGTGGAATCAGATCCTGCGGGTTTCCAGAATCGGGTGTCCACGCTATTTAAAAACT GGTATCAAATCTGCGAACTTCCTGGTGCAAATGAAACCGCATGTTCACAATATGTCCTGC ATTTGCA >SQ;9784594 GGAAAAGTTGCTTCTGAATTTTTGTCTAATGCTGGAAACGCTCGGATGGACATGGTCTCC CGGCCATCAGATATTTCTGTGGATGGTTTTGAATCTTCTCCAGTCTCACTTTTGAGCTCA CAAGTCGATCCAGCTGGTGACTCATCCAGTCTTCAATTTACTAAGTCACTACCAACCTCT GAATTGAATCTGGCTGAATCCTCTGACGCTGCTACGAAAGAAACTGGAACATCACTGCAG ACATTGACTTCAGCTGCTACCATGGAACG >SQ;9784661 ANANGACGGTAAGCNCCGTTACGNNAATAACTCTAACTACAAGAACGANACTATTATCCG CAANGAGGTATTTCTCACCCCCGCCGTGCTCAAGGAATGCAAGCGTATCGTCTCCGAGAG CGAGATTCTGAAAGAAGACGATAACAATTGGCCGGAACCTGACCGTGTTGGAAAGCAAGA GCTCGAGATCGGCTTGGGTAATGNGCATATCTCANNCGCTACATCTAAGATTGGATCTCT TGCTGATT >SQ;9785390 GAGAGACCTCTGGCTCTGTATCGCTCGCTGCTCTTCCTCCCACAGATCGAAAACCATGAA TCCTGAGTACGACTATCTTTTCAAGCTCCTGCTTATCGGGGATTCTGGCGTAGGCAAGTC TTGTCTTCTTTTGAGATTCTCTGATGATTCTTATGTAGAAAGTTACATTAGCACTATTGG AGTCGATTTTAAAATTAGGACTGTGGAACAAGATGGCAAAACAATTAAGCTCCAAATTTG GGACACTGCTGGTCAAGAACGGT >SQ;9786193 AAGAAAATTGGAAAAGGGCTGACTTTTTTGGTTTGGTGAAGTTCGTCGTGGGGACTCGGG ACAATATAATAAAGATGAGTCCTCGCTTACTCTGAGTGTTATCTATGTAGTTGCTTCAAT TTTTGTCACTCATTTGCCTTCGATTCCTCCTTAAGAAACTGACGATTCTTCTATTGGGAA TCGGTCAACGTCCTCAAGTTTATCAGAGATCTTAGGGTTTCTAATCAGATATTTGATTCA TCAAAATCACCAACTAGGGTTTACAA >SQ;9787190 GAGATGCTTCTTCAGGCGGCGGTGCAGAACCGCAATGTTCCNCTGGCTTCTTCCGCCTCC TACTCTCGTCTCCTTCGCTGCAGATCTCCTGTCGTCTCCGTAGCTGCTCTCTCGAAGAAG ACGGCAGCAATCGTGTGCTCCATCTCCCAGGTTTATGGCTACGGCACGGTGGACTACGAG AGAAGGCCGATTGTCCAGTGGAATGCCATCTACAAGAAGATTTCGCTGATGGAGAAGCCA GAGCTTGGCGCTGCT >SQ;8727457 GTTATGCAAAGAAACCCATAGAAAACCACTAAAGGCAGAAATGAAAAACAAGAATGTTGG AAAGATGAGGACCTCATCATGAGGTAAAGCAAATAGGAAACGTGAAAAACAGAATAATAA CCAACCAAAGGAGCTTAATTACAGACAAGACAGATTTGGGGGGATGTTGTGTAAAAACCA AGTAGTAGTGAATTGGAGCCTAGTCAAAAGAAGGAACACGTGTTCTAA genometools-1.5.1/testdata/U89959_ests.magicmatch000066400000000000000000000404231211610345200215710ustar00rootroot0000000000000097350772e29b7881b149afbedf09290d gi|8690080|dbj|AV529797.1|AV529797 AV529797 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL48c08R 5', mRNA sequence ff7357d7a1877d31d94543a13d64fa0e gi|8690053|dbj|AV529770.1|AV529770 AV529770 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL47a02R 5', mRNA sequence cc954bf1761c4c9f05f8822afb1079e3 gi|8689616|dbj|AV529333.1|AV529333 AV529333 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL34a01R 5', mRNA sequence 70facb44682374068ef43fd0a6e116b5 gi|8689215|dbj|AV528932.1|AV528932 AV528932 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL23a03R 5', mRNA sequence 300d9c80d9f566412745a6bda32e3e12 gi|8688760|dbj|AV528477.1|AV528477 AV528477 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL10c02R 5', mRNA sequence 41ccefe046c76c005c6f83a09aac40de gi|8686177|dbj|AV526649.1|AV526649 AV526649 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZ18c11R 5', mRNA sequence 0d914f8b8fdfef05d05e32a617ce8737 gi|8683519|dbj|AV523991.1|AV523991 AV523991 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL47e02F 3', mRNA sequence 634e9a3d54562a834a900edb41abe7d4 gi|8682814|dbj|AV523286.1|AV523286 AV523286 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL23a03F 3', mRNA sequence 7ba0b8c1bb50abf3c5a844abacf9fe67 gi|8682693|dbj|AV523166.1|AV523166 AV523166 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL18h09F 3', mRNA sequence f28eda487869903339de7a431f00fccd gi|8682455|dbj|AV522928.1|AV522928 AV522928 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL10c02F 3', mRNA sequence af2486ba93823b9389100222c0ddffdb gi|8679389|dbj|AV519862.1|AV519862 AV519862 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APD69d04F 3', mRNA sequence c446b7e0b708aafe5473ef397e104ae3 gi|7612621|dbj|AV442217.1|AV442217 AV442217 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APZ38e01_r 5', mRNA sequence d1a97200c69d88855784612802e7c024 gi|7612394|dbj|AV441995.1|AV441995 AV441995 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APD19b11_r 5', mRNA sequence 979a4ec86ab17d2a4625c90ed575c145 gi|7612059|dbj|AV441666.1|AV441666 AV441666 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APD33a12_r 5', mRNA sequence 649b4501a3ba1d922dce7b623c7f6de9 gi|7611662|dbj|AV441278.1|AV441278 AV441278 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APZ38e01_f 3', mRNA sequence 2acbf49eaca817b303d60c7c22dfdd15 gi|7610825|dbj|AV440461.1|AV440461 AV440461 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APD64c02_f 3', mRNA sequence 9a5ec5d4597ac1be9d10ba63ecc457c1 gi|7610337|dbj|AV439986.1|AV439986 AV439986 Arabidopsis thaliana above-ground organ two to six-week old Arabidopsis thaliana cDNA clone APD33a12_f 3', mRNA sequence 3b10d6f56bfea7b6b57a41146f6c140b gi|5846657|gb|AI999752.1|AI999752 701557284 A. thaliana, Columbia Col-0, rosette-3 Arabidopsis thaliana cDNA clone 701557284, mRNA sequence 08f77d13c4ad88c1c44c0314426f2218 gi|5846455|gb|AI999550.1|AI999550 701556366 A. thaliana, Columbia Col-0, rosette-3 Arabidopsis thaliana cDNA clone 701556366, mRNA sequence 835eb4298c428885b3d16d0e4514c30b gi|5845530|gb|AI998625.1|AI998625 701546353 A. thaliana, Columbia Col-0, rosette-2 Arabidopsis thaliana cDNA clone 701546353, mRNA sequence 88e24a075574a85734a081b57a7ec852 gi|5845361|gb|AI998456.1|AI998456 701545753 A. thaliana, Columbia Col-0, rosette-2 Arabidopsis thaliana cDNA clone 701545753, mRNA sequence f55d7bcc44b78111563b02f8a19805ee gi|5843191|gb|AI996286.1|AI996286 701551019 A. thaliana, Columbia Col-0, inflorescence-2 Arabidopsis thaliana cDNA clone 701551019, mRNA sequence cdced248d13c7c0f89e7e889cc30164a gi|5841805|gb|AI994900.1|AI994900 701500362 A. thaliana, Ohio State clone set Arabidopsis thaliana cDNA clone 701500362, mRNA sequence e47b883ccda180d280195029954ea7f5 gi|5840051|gb|AI993146.1|AI993146 701495464 A. thaliana, Ohio State clone set Arabidopsis thaliana cDNA clone 701495464, mRNA sequence 7f11e59ff50ce68b25c6120418df3d51 gi|5839790|gb|AI992885.1|AI992885 701493873 A. thaliana, Ohio State clone set Arabidopsis thaliana cDNA clone 701493873, mRNA sequence ed9e14d2b83e7ea606c9d1d5fdbeb857 gi|5839694|gb|AI992789.1|AI992789 701493549 A. thaliana, Ohio State clone set Arabidopsis thaliana cDNA clone 701493549, mRNA sequence 44f49124e83c2c61713d3c50b3a9a47c gi|3450080|gb|AI100119.1|AI100119 34494 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105B20XP 3', mRNA sequence b7056f0f128b406b094ebf5cb33fb74f gi|3449674|gb|AI099935.1|AI099935 34088 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138J5XP 3', mRNA sequence e6338114b6c0dcc78811d3be5b36ff63 gi|3449578|gb|AI099839.1|AI099839 33992 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127K5XP 3', mRNA sequence 061cac88caefa5d8bba4a1ff47031dc3 gi|2762922|gb|T46227.1|T46227 9490 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138J5T7, mRNA sequence 1c07f0f3b1115fb653b7f47df5b1344b gi|2762921|gb|T46226.1|T46226 9489 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138J4T7, mRNA sequence 802e6347770300a7bbc0064a90f1f061 gi|2759942|gb|T42274.1|T42274 5537 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111I3T7, mRNA sequence d4793f2935cfa07221be201386cb079b gi|2759743|gb|T44958.1|T44958 8221 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127K5T7, mRNA sequence a7fa97bc84c3aebaea34e169b73094c9 gi|2759121|gb|T44328.1|T44328 7591 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124H12T7, mRNA sequence 03636fa4a9e17baae04ad57d13cdc386 gi|2749490|gb|AA651247.1|AA651247 31361 Lambda-PRL2 Arabidopsis thaliana cDNA clone 178C3XP 3', mRNA sequence c6826f50615c7fb2eb70e294bb7202cb gi|2748705|gb|N95878.1|N95878 21603 CD4-16 Arabidopsis thaliana cDNA clone H1B11T7, mRNA sequence 0920b24475a189fbfc148593eec03cb6 gi|2748033|gb|N95955.1|N95955 21140 CD4-14 Arabidopsis thaliana cDNA clone F3F3T7, mRNA sequence 7882e88f260382672a97918b652cad4a gi|1159193|gb|N38051.1|N38051 19278 Lambda-PRL2 Arabidopsis thaliana cDNA clone 217D15T7, mRNA sequence 15adef11b8ee98d85e7a5e3106495193 gi|2747682|gb|H76955.1|H76955 17386 Lambda-PRL2 Arabidopsis thaliana cDNA clone 199P18T7, mRNA sequence 77ba8b822b44308184b4dcab6ecfa75e gi|2747645|gb|H76651.1|H76651 17082 Lambda-PRL2 Arabidopsis thaliana cDNA clone 199N11T7, mRNA sequence 8fdc30d821ff25b48b6182936cf72cd5 gi|2747604|gb|H76393.1|H76393 18098 Lambda-PRL2 Arabidopsis thaliana cDNA clone 194B12T7, mRNA sequence 5ae608a9518c5417787d0da5f4dc93b7 gi|2733258|gb|H37487.1|H37487 15616 Lambda-PRL2 Arabidopsis thaliana cDNA clone 182E10T7, mRNA sequence 3ab44e284886cca199c6a4d221725734 gi|2722481|gb|AA712564.1|AA712564 31697 Lambda-PRL2 Arabidopsis thaliana cDNA clone 172P13T7, mRNA sequence 2c08f2fc011c03e5aa709690db242c3b gi|2597485|gb|R82906.1|R82906 5044 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109D5T7, mRNA sequence 7d5ceada204939fc948a837d482fe57c gi|2597031|gb|T22420.1|T22420 4428 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105B20T7, mRNA sequence d342e4ee66b1c4db3e83e076c5dd7d44 gi|2596953|gb|T22318.1|T22318 4326 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103P9T7, mRNA sequence 26e5980fbaaefb58d84de6755d521845 gi|2596256|gb|T21132.1|T21132 3140 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90H7T7, mRNA sequence 0c4c41ad6668fd55d5f1140088f1064d gi|2580948|gb|AA650856.1|AA650856 30970 Lambda-PRL2 Arabidopsis thaliana cDNA clone 288E9T7, mRNA sequence 3ff6374febf91a5f28c3f7bcc4ccd774 gi|2048630|gb|AA395265.1|AA395265 27216 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124H12XP 3', mRNA sequence a0d33d57c705a829d80c318c595fcccb gi|2047981|gb|AA394770.1|AA394770 26567 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165D3XP 3', mRNA sequence 50590ee6555b56ad95151d25d300c6fe gi|2446000|gb|AA605472.1|AA605472 30508 Lambda-PRL2 Arabidopsis thaliana cDNA clone 190I17XP 3', mRNA sequence f74aca5cee266c7bc442898be20363ae gi|2412846|gb|AA597423.1|AA597423 29694 Lambda-PRL2 Arabidopsis thaliana cDNA clone 197P18T7, mRNA sequence 198a4aa7626135303d0e996d4e2775ef gi|2393553|gb|AA586141.1|AA586141 28790 Lambda-PRL2 Arabidopsis thaliana cDNA clone 80B1XP 3', mRNA sequence 0e851efbbe2bfb244a388865f785495d gi|623629|emb|Z47590.1|Z47590 ATTS4446 Strasbourg-A Arabidopsis thaliana cDNA clone FAI255 5', mRNA sequence 556ae7f08b7cc887b54786f0bc100dd4 gi|453733|emb|Z29751.1|Z29751 ATTS2195 Ors-A Arabidopsis thaliana cDNA clone OAO139 5', mRNA sequence 38229ac075d9c6d15fd1152c4eccc834 gi|402964|emb|Z26362.1|Z26362 ATTS1481 Gif-SeedA Arabidopsis thaliana cDNA clone YAY048 3', mRNA sequence 0f6d1e4ce29d042b5804f8ae8bd9c43a gi|402959|emb|Z26361.1|Z26361 ATTS1480 Gif-SeedA Arabidopsis thaliana cDNA clone YAY048 5', mRNA sequence b0183ab4aa646b9e8f95f61daf0e23a3 gi|403229|emb|Z26415.1|Z26415 ATTS1541 AC16H Arabidopsis thaliana cDNA clone TAI278 5' similar to A.Thaliana mRNA for ara-5,partail sequence, mRNA sequence 322e03bbf0f0ddac43d4ca12dd0cc795 gi|398270|emb|Z25982.1|Z25982 ATTS1259 Versailles-VB Arabidopsis thaliana cDNA clone VBV38-10992, mRNA sequence dd3ace06137c29bf383632984aadf8af gi|397246|emb|Z25655.1|Z25655 ATTS1120 Versailles-VB Arabidopsis thaliana cDNA clone VBVYA12, mRNA sequence 1634572862a7fc3d7dcb1ca5950cf137 gi|397216|emb|Z25629.1|Z25629 ATTS1092 Versailles-VB Arabidopsis thaliana cDNA clone VBVID01, mRNA sequence e72969c46cd2e7d078d339cda62260a8 gi|397215|emb|Z25628.1|Z25628 ATTS1091 Versailles-VB Arabidopsis thaliana cDNA clone VBVID01, mRNA sequence 893d07af699d973ed4e8e3423fc87165 gi|396603|emb|Z25487.1|Z25487 ATTS1001 Grenoble-B Arabidopsis thaliana cDNA clone GBGe40, mRNA sequence 5db2b668ce1df476a932c078b6e77122 gi|17325|emb|Z18783.1|Z18783 ATTS0641 Versailles-VB Arabidopsis thaliana cDNA clone VBV12-30792 3' similar to cathepsin B-like cysteine proteinase precursor (EC 3.4.22.-). Swiss-Prot entry P05689, mRNA sequence 21c1b9817f74d01695e650726543cfbc gi|17300|emb|Z18780.1|Z18780 ATTS0623 Versailles-VB Arabidopsis thaliana cDNA clone VBV12-30792 5' similar to Cathepsin B-like cysteine proteinase precursor. Swiss-Prot entry P25792, mRNA sequence e311a17e67c458d42ed86de05242f87b gi|17520|emb|Z18418.1|Z18418 ATTS0793 Grenoble-B Arabidopsis thaliana cDNA clone GBGa464 5', mRNA sequence a12796a152e829b54f2f56b4910d701c SQ;19741042 7f0facaa45cacec8ffaa0c98a51edf56 SQ;19741846 3b9295d3ee44af4cf4f79b2e27003f1b SQ;19742246 67e8b62becffff524bac4f51bfa344e1 SQ;19798134 8bbc72e5847196327c25661544c6bdf9 SQ;19798999 c94289917098254e5d5b7c3ed48e81b7 SQ;19801463 c24d4bd4c7cae864049bd096522750b1 SQ;19801855 2642a22855698a3125c99a9759f9147c SQ;19803773 741ff4d6dd193d77cc75fb61f373ca5b SQ;19805724 d9d61048b8d25d868bda7f00a0831100 SQ;19806050 634ef96163dc4d4f8a585fe8059d867b SQ;19807151 0743a82e324754dfc94ed4c0cd8a8816 SQ;19823046 a45d1a65f8024adcc2ce8bdcdfb36569 SQ;19823987 174d324a9dca8baddcdcd0dbef55f969 SQ;19825204 9b19d8ea196896df9be4cf56b285abf2 SQ;19825274 897eae7810009eb141a5f887289d95c8 SQ;19825742 3c0dc775fc37af77e71cd10a45d4723c SQ;19826275 1b775af1ef6f8f8b80ba60a8245cba0b SQ;19827386 3f342edcab14d21711f3d75e3ff81743 SQ;19827775 e252994eb503f22fdc871a97738a525a SQ;19828054 faf314d3fa8ba5d3d99734b83ebb7f7b SQ;19828253 653662b06e7e300256655269264f4004 SQ;19828552 df066a65ac8236486c7d59f90157d43e SQ;19829297 ace313cc0542136c91ac52da3c676d77 SQ;19829716 8e8cf2914e87c5de17ca1cea5185961d SQ;19829934 2d0e152a577c91a47f0b5781e67cd3b0 SQ;19831127 b9d8ea84787a6573a7bd2acdb795af44 SQ;19831839 354c93700a73d01ea73f641c62c593cd SQ;19831991 d056310e74cdfca4f2f5de040aabc6c6 SQ;19833332 f2f65df067412c3be8da37366e71763f SQ;19834843 15ed737c8deffb63f79d93a8fecb5a93 SQ;19835442 4a2861ff4a54b0b8a099c7ca178c113f SQ;19836538 dc0b347c18391d65d897b1c1f14bc31f SQ;19837074 494051ed1147d22a2b2967b64c329678 SQ;19837290 f1a0d426e93585553b21aa1a47aa2970 SQ;19837778 f63fe9c59e53d9587766136a15864412 SQ;19837990 81a8f87434a337a21077462e2a1cb5c9 SQ;19838343 14f58b2b12e291455a69d48e56728992 SQ;19839622 752fa8c75ecef45cfa9cf0c5a59afe49 SQ;19840006 f42df1d200fb31e1bed322fab31540d6 SQ;19840745 80d8c2289eb0b45dd9ab395572f44eae SQ;19841232 07c4180bd9082b53416a778fee66e3f3 SQ;19841468 c39b7a42d0e463287ec636842fe38b67 SQ;19842362 a9dcd316817972a94c0af505715b10bc SQ;19843099 f692730f2bd8700f690f8a231d2e446b SQ;19843722 11f83a01fda0f6e2061e6e17dc9cc0fe SQ;19844666 a179a430866ce2f2826fec132cd9e71f SQ;19855736 a3891b57fd37552bdad1be4e20266a5a SQ;19855995 e7ffec1ba9f35a3e29c9946f86b8fe72 SQ;19857409 41d17c6950c12d0d8ec2b305108f08ac SQ;19857902 bdc426cd84a477b9b48d7e7d1538fc85 SQ;19858773 940e92280507db531e4654cc1f1054ef SQ;19859011 eaca300e106a2e1c1897455c6a2cb618 SQ;19863867 33eefc92073ab38229f0ce775746b219 SQ;19864079 6021387359d7e25495b6b804ebbbb0aa SQ;19865963 597ada174987f3f2f0b2e4046f09247d SQ;19866668 c9a4247a29baa59833607fc71f58bb40 SQ;19866748 811cb37790973c1b417241d62fe2a569 SQ;19869130 a3f1555a0375aea877145c8c372ae4af SQ;19869427 1fd1b5316d6ec8962be7986ceebf3ce6 SQ;19870774 bce4ec40fb993e1733ea6d2d16398ed0 SQ;19870921 e40253c45f8d96170d6af32f8d8e3e05 SQ;19871046 1adc4b78b212af1a83a6460bd27222f0 SQ;19871766 79435902b3753af094ba24f8a4847978 SQ;19872996 2276b4a96eb715159638ed0f90239b89 SQ;19873300 dd287e28fe668e94028c1a241a6a1c7d SQ;19874826 4e8ae3a74fefacbbb8650ba892c2b2da SQ;19875482 f19b5223816de3060184fb9250936fce SQ;19875812 e5089d2bdb42934617cd38749662eb21 SQ;19877649 bceada3d0ee38c76dafe93fd74e71dfe SQ;19878194 e24a612b49c52c8aca23eb196c1ebe06 SQ;8690927 48f4c66f41d3805c7213639bcb949d6a SQ;8692149 cc7281740fd5e50cb1f19a22a728e790 SQ;8694120 52b0aff6e54274ccb35b371b7630b68a SQ;8695006 fd65d023d2d6b71c478da3cfa418cbbc SQ;8695842 b2925aa2103833c4c0e3e2ba4e27e66f SQ;8695920 18fb5ebf5d11ec1db0d36de3ea2a049d SQ;8696505 215d14a53287c2aca2d8bd12b09aca14 SQ;8696543 5a03dd7605925c94812a9550acc2d354 SQ;8697126 16258f1ad08d9c0c91c627eefad05949 SQ;8697180 c4e23aeca494361878d3407ae5c05e3d SQ;8701755 085f029e3f483828cb30f70b141fa58a SQ;8702125 cc404517a12f1a399ab48b948f4e71ff SQ;8715845 b280ddc383280ca975eeaa3329e34c14 SQ;8717375 6d3b4b9db4531cda588528f2c69c0a57 SQ;8720010 14c0ff5e76ef8ac009fdcc923f701356 SQ;8721428 a5f947d297585356da9380d22ac8c974 SQ;8722075 b9155494bf5b0de513f322e685542888 SQ;8722221 0870e7d5d9d76766ebd3dce1758b733f SQ;8726286 c69c15ebe466171a13ee5aa610e90e61 SQ;8726341 950b7715ab6cc030a8c810a0dba2dd33 SQ;8727457 5a9fcf1a7370455e62e2701803939c8e SQ;8728304 7be43cab2c3d57b779ea0f8ceeacfc0c SQ;8729681 b289385ff9ca374ceb056d5950d090b5 SQ;8731408 6db92a6a61672ceedb192c31b975e370 SQ;8731753 754b35896aef0625da39ee42e61db715 SQ;8731976 8e46b5509ea749211c8c5cacdc1e2500 SQ;8732177 fd4ec29ab7c96a341ad546c954b7f557 SQ;8732348 527995da853a37f9c47e616ce237d523 SQ;8732738 cabe5b677d534fb65e0d2245f61e2bd1 SQ;8732878 d75212b190b11adfcbc1b62e6d392ed1 SQ;8734273 1f44f865b53e6414d5296a088f0a75e7 SQ;8734707 f8e9d021f04423c2ad6499f4ce6eca57 SQ;8734878 c6730817f9a41f80296421e6b7da6f25 SQ;8734901 b18a91dba09f9ffefbe7b4a6aed19945 SQ;8735154 816e83d74c3a633c3ccc005f1c14d55a SQ;8735385 26ebd521c00f7b4d595086f162ab00e1 SQ;8735393 bbbbef70abd153db9376c364e9fafbae SQ;8735505 9b6924737e47f2eed133a565b35dd804 SQ;8736724 432d83294aa0f2f3fc1b7673977ea4d1 SQ;8737545 fa15dcef7c84118ca9ee3f95600132c8 SQ;8737761 275dc2512038a6501b7d27e38165bec7 SQ;8738747 b1da76b1bfdf36225429a5be70ff88a2 SQ;8738841 49b16de93b5b34374e7e2a7e71253124 SQ;905849 2fa0ef57b1f4391f7a2ae4283410311c SQ;933584 5b0a1904c2c8e69fe643091fee181037 SQ;935362 11a2689b92ee76c83cd57591ae940971 SQ;936803 ddab1d6f7c76a6508e85423cd56d46e5 SQ;937871 a8b76267e5f1749ca29c5465c631ab8e SQ;958004 8bfbb0491705b51d42ef6d8ba0c3e2ef SQ;958152 f1cb6a33be382d29ff291be589f1ed70 SQ;9778203 e6343ecf374a95dd0356831650af82f1 SQ;9778306 29b2d16dd6ee3e8669ae77b4e053ee20 SQ;9778321 e5c6d7f52bae4b6b57c6320ef95f9b66 SQ;9778889 7db3e698f27f19f0343e6b23af07a5b3 SQ;9778953 257d2dc2f7c0bb730fe685a8052aaa63 SQ;9781141 da4c1ce6a2ee20bb9c4c5d9462be98de SQ;9782167 f53ad09e45a4038f2261b9ee90353658 SQ;9782568 c7084aa0f01934072f9e244363059ca0 SQ;9784594 72f3e9cbd94835f59aa0a43b22a01b0f SQ;9784661 8ed84d5653334535562a21058880db81 SQ;9785390 ddbfcce4683cac59087c5f26e674349b SQ;9786193 cdbabc0602366c37167aba18498d8232 SQ;9787190 950b7715ab6cc030a8c810a0dba2dd33 SQ;8727457 genometools-1.5.1/testdata/U89959_genomic.fas000066400000000000000000003240411211610345200207110ustar00rootroot00000000000000>gi|1877523|gb|U89959.1| Arabidopsis thaliana BAC T7I23, complete sequence AAGCTTGCTGCTGCAATTTGGGACTGTATCTCAAAATATAAAGCCATTCCCAACTTCCCCCAGACCGAAA CATGTGAGCTGCTCATTGTGGATAGATCAGTGGATCAGGTTTTAAGGCTCATCTACTACATTTACTCCTC AAGTCCATATTGATAGTTTATTTCTCTAAACGATTGAGGTGTAACTGTAGATCGCTCCTATCATACACGA ATGGACCTATGATGCTATGTGCCATGATTTGCTTGACATGGAGGGGAATAAACATGTCATTGAGGTAATT CTATTTTTCTTTCTTATCCTTCAACTTTTTTCCGTTTCTGAAAGGCCCCGATCCGGACTGCCTAAAGTCC GGTCGAGAGAAGTCCTAGCCAACGATCCTATTGAGGATCGCGGGCGTTACAGTTTCTCTCTTCCTAATCT CTCTACCATATGCTAGGTTCCCAGTAAAACTGGTGGGCCTCCGGAGAAAAAGGAGATAGTGCTTGAAGAT CATGATCCAGTGTGGCTTGAGCTTCGACACACACATATAGCAGATGTATAACACAATTATATACATCATC TTTTCACTGAATAGCTCACCATGTTGACACCATCATTTTTGGTTTATAAATAGGCTAGCGAGCGTTTGCA TGAGAAAATGACCAACTTTGCTTCAAAAAACAAAGCCGCACAAATGAGATCAAGGTCAGCGCTAAGAACT TATCTTTCTGTCTTCATAACCGAGTGCTTAGACAATGGAACAGTTGCCTAAGTTTGATATCTGGAAGACT TTAAGTTTCTTGTTATCCTCGATATGGATTCGTGATCCCTCACAGACTTTTTTGATATGTATTGCTAACA TCTTTGGCTAATGTGACGCAGGGACGGTAGCGAGTTGTCTACACGAGATCTACAGAAAATAGTTCAGGCT TTGCCGCAATATGGAGAACAAGTTGACAAACTCTCCACTCATGTAGAGGTTTGTCTCACCATTAAATTAT CTCAAAATTCAATGTTAGATGTGGTTGCTGACAGTTTTTTTTTTTTACTTTATAATCAAATTCAGCTAGC TGGAAAAATTAATAGAATAATCAGAGACACAGGACTTCGGGATCTTGGGCAGCTGGAACAAGATCTTGTT TTTGGAGATGCAGGTGCCAAGGACGTTATCAACTTTCTGAGGACGAATCAGGTGAATAAGTTTGAAACAT GACAAAAAAAACTTGATAGCCGCATTGATTTAGTGTTTGAAATGACACATCATGTATTTAAAATGCAGGA CACAAACCCGGAAAACAAATTACGGCTTTTGATGATTTATGCAACAGTGTACCCCGAGAAGTTTGAAGGT GACAAGGGTGTGAAGCTAATGCAGGTAGCTTTTCGTGTGATAGAGACCCCTTGTAATGCATGGAACAACT TGCTAAACAAATACTGCATTTATGTTATCAGCTTGCTAGATTATCACCTGTGGATATGAAGGTTATAAGC AACATGCAATTGATAGCTGGATCCCCAGAAAACAAAGCTAAGTCCGGTAGTTTCTCCCTCAAATTTGACG CTGGAAAGGTAACAGATTCAGTTTAATTATGAAAAATCAACACTAGTTACCGAGAATAAGAAGAAGAATC TGACGGATATGTATACTCTTTTGCTATAGACAAAACAAGCAAACAGGAAAGATCGATCTGGTGAAGAAGA AACATGGCAACTGTTCCGGTTTTATCCCATGATCGAGGTAGATGAACACCCCGGCTTATAAGCTACATAT CCACTATGTAAACATGAAGTGGCTGAGATACATCTTTGTTATGTTGCAGGAGCTGCTTGAGAAACTCGTG AAAGGCGATCTATCTAAAAGCGACTATCTATGTATGAACCAATCAAGTCATAAGGAGGAGAGTGAAGCAA GAACAGGATCTGTCAGGAAGAGTTCTGCTCCTACAGCGGTTCCAGAGAGAAAAGCCACCCCTCATTCTAT GAGATCAAGACGAACTGCAACTTGGGCGCGTCCTCATTCTTCTGACGATGGATATTCCAGGCATTCTATT TTACATAATGATTTCTTATTTTTTGGTCCATTTGAGAGGAGCTTGGATTTTTTCTAAGAGTAGTTCATAT CTTTCTTCACACCCAGTGACTCAGTGTTGAAAAGTGCTTCTACGGAGTTCAAGAAGCTGGGGCAACGCAT CTTTGTATTCATAATTGGTGGGGCAACTCGATCCGAGGTATACATTCAAACAAATCCGACCTTAAATGAA TGCTATATATGTTTCTTTTTGTCAAAGCTTGTGTCAACATTGGCATAACTTTTTGACAGCTCCGAGTTTG CCACAAGTTGACAAGCAGTTTGAGGAGAGAAGTGGTACTAGGCTCCACTAGTTTCGATGATCCCCCACAG TACATCACGGTAACACAACATATCCCTTTTAAGAGTTGCTGATTGCTAAATACAAAAAAAAATACCATGG AACCTCAAAGACTGGTGACTGATTTAAATTCTTAATCCAACTGTGTTTTAAATGTTGTCGCAGAAGCTGA AATTGCTGTCGGAAAAAGACATACAAGGGGCTCCTGCTCAGCCCTTCAAACCACAATACTGGTGAATTTG ACACAGCTTGAGTCTCAAAAATGTATTTAGGAGAAGTAAAAAAAAAGGCTAATAATTTTGCAATTGAAAG AAGAGTGGATAAGTAAACCTTGTCCAGAGACAAGACTTGGGATCAGGTTAGTAGAAACGTTATGGTGAAG ACTTATTTTTTGTTCTTGCTTCTCCTTGACCCCAAACCGTCGCCTTTCCCTTATTTTTTTTCTTCATATG GGTCATTTGGTTCATACTCTATATACTTTTGTGTCACAATTTAACTCTATATATTAGTCTCTACGTCGAC TTAATGGAAAAAGTGAAGATGATAGCTTCTAATTTGCTTTATTTATTTATAAACTTTTGGCTATTATTGA TTCTTCTGATGTAAGTTAATTTTAAGTTTCGAGTTATATAGCAATCGTTAAGTTGGCAAAAGATTTTAAC CCTCGAGACTTTTTGGACAACAAAACGCAAATATGATAGAGCGGAAGCTCATTAAAAAATCGTTTTAGAG CAATGTCACCAAACAAAGAAAATCCATTTCCCAATAAAAAAACAACGAATATAAAATTCGATTATATATT TACCATCAACCACTTAACAGACCACAAAATGAAGGCTGTTTACGGATTCAACACAGATTAACGGGTATGT ATGTATGATCTAGGCAACGGTGGTGGTGGGACCAGGATAAGCAGGAAGAGTCATGATCCGCTTGTCTACA ACTGGACCTCCCACAGTGAAATGGTACAGACTCTGAAAGCTAGAGTCATTAATCCCCAGAACCTCGTGCA CTGGATCATCGAAATAGCACCCAATCCCGGTTGCTGAGATCCCCATTGCGTGTGCTTCCAGGTACAAAAC TTGTCCAACAACACCCGTCTCCCAGAACAGTCGAGGGTACATCCATGAGCCCTTCTCCCGCAGTGCTGGT TCAAACCGAGCTATCATGCCTAAGCTGAAGCATCCATCCCCTGCAATGTCCTGCATCCATCAACCACAAT GATTCAGTAACCAAGTGAAATATATTGTTAATTACAACTCTATCCGACTCTGTACCTGATGACATGATAG CCCTTTTGCCAGCCTCTGGCAATCACCCTCGGCGAGCTTGTACAGAGGAAGATTGTCCGGACATCCATCT GGTTTAGTCCACTCAAATTCAGGCCTCGTAGCTGTCTTGAGATCACTGAGATGATCCTCGTTTCTGACTA GGAGATACAGTCCCTTAGGCAAACCCGAAACTCTGTGAACAAACAAGGCAAGATGAACCTCAGCAGTATC CCAAGGAAGAGCTCGAAACGGCAGCGCAAGTTGCTCTTTTTGGGACTCGCCTGTGGAAGGAAGACAGTGC ATCAGCATCTGGTAAAACGAAGACATGTCTATACAAGTAACAGCGTCCATATCAACAGCACTTCTTCTCG TCCTTACAACTTGCCTCACCGTTAACTTATTATATGAACTGTGGCTAAACAGAGCACGACTGCTTGTGAA GGAAGCAACATCAATTGAAGAAGAAGAGGTGGAGTAGATCAATGGAGGCTTTTCTACAGCCTTGGCTGTC CTGTAGATGATATCCCAACACAAATGCTCTTTGCTCAGAGTATTGGGGTTTCCAGTCCATTCTAGGCTTG GGAAGTCTCTAAGGGCAGAGCTAATTGCGAGGTAGTCTAAGTTGAGATGTTCTCTACTAGTTCCGTTGGG GAAAACAAGGAGTAAGCAGTCAGGATGCTCGAATTCAATCTCAGGGAGCTCAGCTTTACCTTTACCTTCA GGTAACTGAAATTCGGGGAGACCCATAAGCCTCTTGAGATCATCAGCTCCGAAAGCGTCGAGAAGCTTCA AGTCCCAGCCTAGGTCTGCGGCTGCAATGGAGAGAGCGGCAATGGCGTGGCCGACGTCGTGGTTACAGTA ACGAAACGCTCGTTCTCCGTACTTCCAAGCTTCACGCCAGAAAATTGAAGAAATTCCGATGAGAAAAGAA TTCTCCGGGAAGAAGTTGGGGAAAAAGGAAGAGGGGATGTGAGCTCTAACCTCCAAAGAATGCTCTTTGG GAGCATAGTGGGAGACGAAAGCGGATTGGGAGAGGGAAGGGATGGGAGGAGCAATGAGATAGGCCTCGGT GGGATGCAAGTTACCGCTGCTGGGGTTGACGCGGAGGGGCCACGTGGAGGATCCGGTGGTCTTCCAGGCG GAGAGAGCGAGAGAATGGTAGAAAAGGTGAGAGATTGTAGGAAGAGAGATGGGTTTGGGCGGAGGAAGCG AGTCGAATAGAGTAGAGTAGAGAGGAGAGTCGGAGTCGTCGTCGATGTCGTGATTGGGGTGTTGGAGAGG AAGAAGAGGAGCAGAGAGGTACCGGCGGAAGGGATTAGGCTGATTGGCCCAGTCGAGACCACGAGGACCT CTCGCGTAACCGTTCAAGGAGTGCTTCGTCTGGTTGTGGTACTTGAGGACCAATTCAAGCGAAGAGGAGG AATCGTCCTTGTTAGGGTTTTCCACAGAAGAAGAAGAAGAAGAAGAAGAAGAAGAAGAAGAGAAGGTCAT GGCGAAGATAAAGGCACTTTTTGGTGTTCGAGGAATGGAGAGAAGAGAGGTCGAAGACGCGAACCTCCAC GAAATCGTCGGATTCATCATTGCTTCTCCTTTCCTCTGTCTGGGATTCGACATCTCAAAACCAGAAACCA ACGGATCTTTGTACCGGGACGGTTCAGATATGGATGGACCGGTTAAGGGATAACCAAAATTGCCTGTGAT TTCTCTCTGTGACTTGGGGAACAACTCCACTGCAATTACACCTTTGTTTTCTTTCCTTTTTTTAAAGAAG AAGAAGAAAGTGCAATCTAAAGGCGTGACTCGTTAGAGCTTTTTTGTTGTCCAAAAGTTACGGTGGTCTC TCTGTCTCTTAGTCGGCAAAATTCCCTCTTTAAGAGTATATAAGTAATTTTGGGTATTCTTTTTTTATTT CATTGGCATAACGAAACACACGACTTGAGCAACAACAAACCACGTCACTCGATCACGCTTTCATGCTTTA CCATTTTCCCACACAAATCGACTACTATCACATGATTTCCCTCATTACCTAACTCACTTGTGTTCTTTGA CCACATCAAAATTTGTCCTCAATACGTACACTTGGAGAATTTTACTACATTACTTGGAATCAAAGGTGGT AATTACTATAGTTTGACCAATCTGATCAAGCATTAAAAAACCGACGAGGCCATCTCTTCCTCCTCCGATG GCGCTGGGAGATTTAGATCTATCAAGCTAATTATTATTCCTGATCTTCTCGTGAATTCATTATTAGCGGA AGCGTGAGATCTTTTGTGACCTCCGAGAGCTTGACCAGATGTGAAGACTTTGGCACAGATTGGACATTCA TGGTGACTACTAGTACTCTTCTTCTTCTTCTTCTTCAACTCATCTGAGCCTAATTGATCTGTTTCTGCTA TCTTCTTCTTGTGGCTTGCTCTGTGTCCCCCTAACGCCTGATACGACTTAAACACTTTCTCGCAAGTCTC GCACTCGAACCACTTATTCCTCTTCTTCTTCCATCTCTCTTCATCACTTTCCTCTTCCTCCTTCTCCCAC TTGTCTCTCGACAGCAACATGAGACTCAAGGCCACGTCTTCTTCCGTTGTTGCAGCGTCCGACACCGAAC TCATCGGTTCCTGCTCCGTACACGACTCACTGAGTTCTTGAACCCCGATCTTGATATCTGCTGCTCTTGC GGTTTCACTTTTCCCTTCTTCGTTGGATTGTTGATGACGTAATGATGAGATGGATCTCCGGTTAAGTCTG GATCGTTTGCGGGAGGGCTTCTTGGACGACTCGGTTTCACTCTCTCTGTCCTGAAGAACAAACCCTGGAT CAGCCATGGAAGACGAATATGACTCGGGCTGACTGGGGAGAGGGTGAATGAGCATGTGAGACCTCATGTG ACCTCCCAAAGCCCTTCCATTAGCGAAGCTCTTCCAACATAACTTGCACTTATGCCTCTCTTCCATTTCC TCAATTTACCAAAACAGAGCAGAAATAGAAGAAAAAGGAGAGAGAGAGAGAGGGAGAATATAAGAAGAAG AAGAAGAAGAAGTCGGAGTAGGTTACAAGCACTCTTCCACCAACACTTAAGCTAATATACGAAGTCCCAA CAACAAGTTAATGTTTTCTTTTTAAGGAAAAGAATTAATGGGATACTTAAGAATATCAACGAAAGCAGTT TACTTTCTTTTTTAATATCAGAAACGGCTAAATAAAAGACCTGTCTGTTGTGTAAACATAAATACAAATA AGCCTCTAAATATATATAATTATCAGTTATGTTTTTCTTATTTTATTGACAGATTGAGCCAAAAAAAAAG AAAAAAAAAAGAGTATTGAATGATGAAGTGAAGAGCCGTTGATCAAACATGTAACATGCGATCTCACACC TTTATTCCTCCACGCTGACTTTTTTTCTCCTCTAATTTTTCAAATACACTCTTCTACTAGCCCAAAAATA CTAGTATGTAAATAGTAAATACTAGTATGTAACTGAAAATTTCAATACTTTGTTGATTAGAAAAGAGTTT GTGGATGAGGGTATTCATTTTGGTAAAGTTGCAAACAAAAACCGTTGAGGTTTTGTTGTAACGACTAAAC AACACTAGCACTGGCCCCTCTATTTCTAACTTTACCAAATTTTAATGATTCTGTGACAAATACACCAACT CTCCTTAAATCATAGGTTGACACGTGTGACTAAACTGCTGACTTCCCGCATCGTATAGTTAGTGCTATCT TTGACTCTCATACTCACACGCCCTTTTGGTGTTGACTCACCTCTTGTCATTTATTTGGATGAAATTTCAA TATAAGAATCTAAATTTCATTACTCTACAAATTTCTACTAACAAAAATATTTTCCCAAGCATGTCTAAAT AATTTTAACCTTATCTCGTTGAGACGTTATTACCTCATACTAGACCAAAATTTCCTTGTATCAATAGCGT GCAACTCTTGTACGTGTCTATATGTGTCAATTGTTGTTAAAGTACATGTCCTCAAGTTAATTGATTAAAG ATCTTTTGAGTGGCCCAAAGAGTCATATACTTTGCTTGAGCTTTTCTCAAAGAGAAATTGGAGGATATCA GTTGACATTAATCAAATTCCCCCCGCTAATCCTAGTTTTCAGCTGATGGTTGGTGGGCTTCCTAAAGTCA AAAGTTCATAACTTGTAATGGCAACCACTCATTAATAACATATATGCGAGATAAAAATGACTCTTTTCTT GTAATCGTATTGAGAGAAATGACCCTTTCCTTGCAATCGGTGCTTAATTAAGAACCACCAAAATTATCAA TTCCGTTGAGGCGTTGACTCATGTTCATGTGTTTTCAGTGTAGTAAGAGCCTTTTGATTATTAACATGAT TAAAATATATATGGGCATATCACGAGAGTTATTTGATACGTGATATTCGTTTATTTATTTGATATTTTTC TTCTTTGTGATTTCTTAATTTCGAATTTACAATTTCTTTTCTGGAAAACTTCAAAATTATATCTCCTTCT TGATGGCTTAACAAGTAAATTATATCACTCTGTAAGATTACAAACATGAAATTAAAACATTTGCGCTTAT ATGAGCAAGGAGCCCTTGGTTATCTTACTTTATTCTCAACGTATATAATAATAAAAAATGATACAATTAT CTATCTTGTATATTAACTAGTTGTGAAACTTAATTTCTTACTTATATCTTTGTATATATTGGACTAGAAC TCCTTATGGCTCTCTAAATCTGCAGAAGACGCCAAGTGTAATTCATATAAATCCATAAACTCTATATATA AACTCATGCACTTAATTGTATATATGTAAAGAATATAAACGAATGAAAGTTAAAAGAATATAATTAGCAA CTTAATTAAATTAGTCAGTCGTCAAGACCAATCACCACTTGCGAGTTTTAACCACGAAGATGAAGTAGCG TTGTGATTATTGCCACCACCATCTCTCTCGATCATCCCTACGCTCATGGCCGTTGGATCGACGGAATATT CTTGGCAAGCTAAGTTGAGATCGAGAGATGGTTGATCTAACGGCTGCGGTCTGCCGACGGAATGATGATG ATCGTGGAGCGACGTCATACGAAGATAATTGGAAGGTGTTAGCCAATGGCATCGCTTGTGGCCTCCTAAG GCCTGTCCCGAAGAGAAGACGCGATGGCAGATGGTGCATTCGTGAGCGTTGGATCTCTTTCTTGCGATAT GAGCCGTTGATTTGTCTTCCTCATCCTCCTCCTCATCTTCGTCCTCGTCGTTGTCGTCGTCGTCTTCTTT GTATTCCTCTTCCTCTTCCTCTTCTTTATCTTGAGAGGCAAAACAACCCTTCACTTTCTTGTGGCTTGCC CTGTGTCCACCCAATGCCTGATGCGACGTGAACACCTTCTTGCAAGCTTTGCATTGGAAAACCTGGGCGG TTTTTTGCTTTTTGACGGTTTTGCCCTTACCATGTCCATGTTGTTTATGCTGATCACCACCATGCGCATC CCCTGAATTGGACAACAAGACAAGACAGTTGGCAAGCTCTTCGTCTTCGTTTGGAGACAAGTTAAGATGA TGATGCTGAGTGGACATCGATCTCTCCCTCTTCCACGGAGGACGACGTGACATGTTGTCCTCATCGTGTT GTCCACGACTGAACATTACGAAATCAATGCATGGTGAGTTCATGGCTCCATGCATGTGTGTGTTCAAAGT GTTTTGGTGTGAATTAAAAAGAAGAAAGCCCTTGTTTTTAGTGGAAGTAACGGGTTTGGTGTCTTCTTGT TCATGTGGTTCCAAGTAGCTAAGCACTTGCTTTAACGACACGTGGTGCAACTTTTGACTTTTTCCAACAT TCCTAGTCACATGCATCTATTCTATATAGATGTTGTTTAACAAATAATACTCTCATTTCATGCTTACAAT ATGTTTATAACCCAAATGTAAATTATAACAATTAGGAAGAGGTGAGGCTGCGGATGAGAAGGCCTTCGAA GGTGATTCCAGGTCCGAAAGCTAAGCCAAGTCCCCACTCTTGTGCTGCGTCACCTTTCTTCTTCAGCTCA TCTCTCATATACTCCATCACATACAGTATCGTGTTGCTGCTCACGTTCCCGTAATCCACCAACGCCCTTC TGCTGCTCTCCAGCTTCTCTTTCTCCAGCTTCAGTTTTGTCTCCAGACGGTTCAGAATCGCAGGTCCTCC TGGATGAACAGCCCAGAACATGTCATTGAACTCCATCGACTCATCGCCAGCCTTTCCCATCAGCTTCTTG CAGAACTCTTCTATGTTCTCCTCTATCTTCTGCGGGAGGTCTCGTCCAAGCTTGAAGTTTATGCCTTCCT CAGTCAACCTCCCCTCGATCACGTTCTGTGTCCCCGGCAAGAACTGCTGAACCGCATAGTGCAGCTCCAT GAAAGGAGCTTCACACTCTCTCGGGTCAGCTCCGATGATCACAGCAGCTGCACCATCTCCAAACAGAGCA GCTCCAACTAGGTCGTACGGACGCGCTTTGTTTGGTGGCCGAAATCCGAGAATGGTGGTTTCAGAGGTTG TGAGCAGAACACGGCTTCCGGGGTTGTTCTCAGCAATGTCTTTGGCCACACGGAGGCCAGTCACACCTCC GTAGCATCCCAGAAAATACAGCATCACTCTGTTCACGTCATTCCTCAGGCCTAGCTTTGCTGAGAGGTAA AGGTCACCACCGGGTAAACGGATCTCGCTTGAGGAAACGTAGACAATGTGAGTGATGTCTTCCACTGGCC TTCCCCATTCCTTGATGCAACCTAAACTGGCTTCCAATGCCATTTCCACAACCGCCTCGTTTGCAATTTC AAGTCTTTGCTTGATTGTTGGTGAACCCTCTGTTGTTAGCTCAGGGTATTTAGCCAGTATCTCTCGCGTC AACACAGTGTATCGCGTCTTCACGGTTGTCGTTTTGCCTAAACAACAGCACAAAACATTAGAAAGCTTTC AGCATTTCACAAGAGAGCATAGCTGTCTGAAAAAAATATAAAGAGACTGAGGCTTACACAAGTGTTCCAG CTTTTCTTTGATAAACGCGTCATCACATTTGGTGTCTCGTAGAAATCCTTCCACTAGATTCTCCTGAGGA ACGACTTGGCTTGGGAAGGCTTTGCCAAGAGCAAGCAGTGTTGCCTTTCCGGCATTTGCGACACGCCTTG TGGATTTGCTGCTTAGCTTCTCAACACCATTCATCCTAGAATTCGACATTTCTTTTCAAGCGCAGAAGGA AAAAACTCAATTAGATATTGGGAAGAAAGATGGTGGATGCAGAATATCAGCAAATGGCAAAGGATTATAA AGGAAGGGTTGAGGGTTTTCTTGGGGAGAGTTTGGTGCTGAAGAGTGAAGATCATGTAAAGAGAGAAACG GTTATTTTATTAGGGTTTGGTGATTCTTTGGCCTGTGTTGGTTAGAAATGCAAAAAACACCATGAAACCT ATTTTCCCGGGATAAGTAATATAAGCCTAATCTACTTAGGAAATAGGTACCATGAAGGTGAAAGTTAGGA ACAGAGAGTTGCAACGTCCATAGAGACCTGTAACAGACACGATGAATACAAACTTGCTTAATTGCTGAGG GCCAAAAATTTTACAATTGCCAATGGATAATTTTAGACACAGAATTGAAAACGGAACAAAGAGAGAGGAT CCTGTTTACCAGAAACCAGATGCACGGTCTATCCTTCATTCTAATACAGAGCAATCATCTGATTCTCTCA ATGTAGCCATCCTCTTTGACACAAACTGAAGTTCTTCCCACTTTCCAGCAGCCTCTAAGGCATTCCTCAA AACCACGTGGCAGCTAAGCTGTTGGTGGTTTCCTAGTTCTACTAATTCATTGTACAAACTAAACGCTTCA GAGTGTCTCTTATGCTTACAGAGTCCTTCTATGACCGTGTTGCATGTGTCGATATCTACCATTTGACTTT TTTCCAGACAAAACAGAACAAGTGTATGTGCATCAAGTAGTTTTCTATTCTCGCAGAGGTAACCAAGTAA TTCCTCCATCTTAACCAAATACCCGTTATCATAAAGCAACCTAACAATCAGAAATGCCTTCTCTTTCTGT GCACTACTAAAAAGCAATCTGACAACCTGCGTTGAAAGATCAATGTTCTGTCTTATTCGTTTTTCCAACA TTAGCGTTACCAAGCAGAAAGACTCGTTAGCAAATTTCCTTTTCGCAAGTTCTGCAAGTACAGAATGGAA AGTGGTTGCAACAGGAAGATAAGAGCTCCTTAGCATCCTTTGTAGGGTATCGTGAGCAAGAAGAGCTTCA CCTATCTTCAACAGTCCATCAATCAATAACTCGTAAGTTTCAAGATCAGGTACAAATTCCCGCCTGAGCA TTAGAACCAACAGCTCATAAGCAGGCTTGAATTTACCTTCTCTGCAGTGACCCGTTATCAAAGTCTTGTA AGAGGGCGGATCTTGCACTCCTCTTTTCATCAGCTGCCTGAAAACTTTCTCCGCTTGTTTTGTTTTCCCA TTGGCACATAAGTATTCAAACATTGGGTTATAAGCTGCAGCGAGAGGCTTGCATTCATCCTTACCTAACA ATACTTCCTTCTCAAATAACTCATTGAACAATGTCTCAGCTCTATCAAATTCGTTTCTCATGCACAGAGT ACGAATCAAAACACTATAAGAAGCTGAATCAGGATGCAACTTCATATTCAGCATTTCTTGGAACACCTTC ATCGCTGCATCCAAATGACCAGCATCGCAGTGGGCTTTGATCAAAATATTAAAAGTGCAGGCATCTGGAG CGAAAGTGGTAAATGCGTCGTTCCCTCCAATCAAGATATCTTTGATCTCATCATATCTGTGAGCCTCAGA GAGCCCCTTGATCAGAGTATTGTAAGTAACAGCATTGGGTTTCAGCCCTCTACTCAGCATGTCATGAAAC ACAAGCACTGCTTCATCAATTTCCTGCTTCATACAATAGCCTCGCACCAGAGTAGTGTAACTAACAACGT TGGGATGCACATCGGTTGCTTTCTTCAACATTCCACTCAAAACATTATGTGCAATCTTGACCTTGCCGGC TCTGCATAACCCATCGATGATCGTGTTATATGTAACAACGTCAGGATTGCAATGATACAGCTCCATATCC TTAAAAATCCTAAAGGCTTCATCGACCATGGAGTTCTTACAAAACCCATTTATCAATGTATTGAAAGTAT AGGAGTCTGGGGTAACCCCGTAGGTACGACGCATTTCGTCGAACAAGTCATGGGCCATTCCAGTTCTGCC ACGCTTGAGCAAAATGGAGAGAAGACTGTTGAAGGTAAGAACGGAAGGGGAGATGCCCATCTGCTTCATG GTCTGGAACAGCTTCACTGACTCCTGGAAGAGCCCAGCGTTCCCGTAGCTCCTAATCAAGCTGTTGAAGT AGCGATCCTGGAGCTTGACGCAGCCATTAGACCTTCTCTCGATGGAGAACAAGAAATTGCGAGCCACATT GAGATTGCGAGCTCGACCGAGGAACTCTAACATGAGGAAGAAAGACTGCTCTTTGTGAGAAAACCCCTTG TTGGAAACCCAGTCAAAGAACCGGAGACCATCCGCAGGGACCTTGATGAGACGCAGGGTTTGGAGAACGG TGGTTCTGGAGATGGTTTGGGACGGATGAAGAGATGATAGTGAAGACTCGAGTTCGTCCGACCACGGGTT AGAGTTCACGGCACGGGCCAAGGACCTGGCGAGTTTTGATTTGGTGGACCTTTCTTCATTGGTAACTTTG GCGGCTCGGAGAACTGGTTGAGACTTGGAGACAAACAAAGCATGGAGTTTAGGTACAGAAGATACCATTG CAGAAGAAAGTTGCCGCGAAATATGGCGGCACACGTCCGCCGCTCCTCCACCCCTTCCGGCGGACCAAGA GAACAAACCCTTTCTTCTTCATTCTATAACTCTCTAAGGCCCAATCTAAATGGGCTCCTCTTTGTTCTAG ATAACTTTACTTTAGGCCCAATTATAGAGGTGGCCCCGACACAATATTTTGTTTTGTTTTAAACTTTAAA AAAAAAAGGAGAAGAAGCAACAGCATATAATTAAGTCCTAGCTATTAATCATCATCCATAGCATATCAGT AAGTTTTTGAAGATAGATTGTTTGATTGCATACAGATTTTAAAATAATGTTAAACCCTGAAGTAAACTTG TAACTGCACCAACACAAGACGTGGTGTATGGATGATCTACTACATTCCGTTTCCCTTTCATTGGGAATCA ATTTGCGGACTAGTTTAAAACAATCGCATATGCATAATACTTGCGCAGTAATTAGGGAAGAAAGGAGGTG GGGGTAATGAGTGAGAAAGTGCAATAAGTGGGTATCTCTCAAATTAAGAGAGAGATGTTGACAAGGCAAC AAGTTTGGTGTAACATTATCCTCCTCCTTTTATTTTGCCTTTTTCTCTATTTTTATATATATGCACAGTC TTTTTTACTCTTAATAAAATACACTGTTAATTCCTCGGATACCAACGGAATCGGTTGAATAAATTATGGA TGTTACAGTATACACACTATGTAGGGACTTCTTAATTTATTTTGGTATAGTTAGAAAGATAGCTTATCGT TAGAGCGATTGAGAGCTTTTCATTATAATTAGGAGTTAGTTTACTTTAATTGTGATAACTGCCTTAGTAG ATACATAAGTACACTATCAATTGACTACTTTGAGTGAATTAAAAAAGCCTCCTAACAGCGTACTATATGT ACATCAGAATAAGTTGTAGTAGGAGCAGCATTCCTATTTTCAATATTGTACACTGTATTAAAACAAAAAC AAAAAAGTAGAAGACAGGATTATGCATATAAATATATATCCCAGAACCAAATATGAAAATAGAAAATTTG GTTTTCGGGTTTATAATTTGTTTTAGAAAAAAAAAAAAGAGAGAGAGAGAGGGGCAAGGATAATAGAGAC AGGAGTCCGTACGGTTTCGGGGGTCAACGTCGATGGCAGCCTTTGAGCACCTAAAAATAGGGGACCCACG CCATTACCAATTACAAAACCTCACTCTCTCGTCTATGCTCAGCTAACCCTACTCTCTTCCCTGTGCTGCC ACGTGATCACCATCCGATTAATCGGGACCGTTCGATTAAGTAGAGATAGCAGCGCGTGAGGTAGAGAAAG AAGAGAGAGAGAGAGTTGGCGAATAATAGTAATTTGTTGTTTGGGGGTGAGTGGGTGTACGTTAGCAAGA TACGATCGGTCATTCTGTCTTCCCTAAAACGATCAACCTCCAACTTGCTACCTATTTACACTTTTGCCAT CCTGTCTTTCGAAACCCCAACACCGTTTTTGCCTCTTATCTCTCTCTCTTTTTTGGCCTTTTCCTCCTTT TTTTTTTGTGGTTAATTGAAATAGATATTTTATTTCTCTCTATTCTTAAAAAAAACCACGTATAAACTTG TAACTGACTACGATGATTTATCTCATTCTCATATCTTATTTATCGCTAGTAAAAAAGAAAACAAATGTAA GAGAGAGGCCCAGCAGGGGAACAGAAGCGGGTCCCGACATAATTAAATAAGTGTAGAACAAACGCGTTTT TTACTCTTCTTTTTCCTTAACCACACGATCACCACCAATACTAGCTAGACCCTTTTCTTTCTTTTTTTTT AAAGTCCTGCGGGGGCTATATATGTATCATCCATATATACAATACGCTGTTAAAAAATAACATAGTAAGA GTCTGTCTATACATACTTGTGTGTTTAATTTGTTTGTCAAACAAAAGTTCAATTAGAGGCTCCATCAACA GTTGCTAAGTAGTGAGTTACGTTTTTTCGATATTCAAATTAATCCTACGTAGGTACTACTAAGATTACAA ATTAGAAAGCTTTGAAAAATACTAGTAGTAAAAAGGGGCAGATGATTGGTAAATAATAATTTAAATTGTT TTTAGTAAAAAAGGGCACAGACACTCACACACACACTGCTTTCACGACCCATGTGAGTTTTCTTTCTTCT CCATCTTCACTTTTTTAAGTAGCTAGATGACAAGACAGACAGCTATCTCTCTTTTTTTTTTACGAAGAAG AAGATCAAAAAAAAAATGAATTTTAAAAAGGGACCTTTAAGAGAGATGGTGGGAGAGAGAGCAATAGAGA GAGAAGGAAATCCACCCCCACAAATAGAAAGTTAGGGTTTATTGGAAAAAAAGAAAGAGAGTGTGTCTCT GTGTGTGATTCTAATAGAGGTGTAGTACGTCGCTTTGCTTTCAGTCCATTAAAACCATTCCATAACCTAT TCCGCACCGACATGTCTCCTCCCCCTTTCCTTTATTAGCCTCTCTCTCTCTTTTTCACTACTCCGTCTTG ATTTTATAAACAAAAGAAAGAAAGAGAGAGAGATCTTCCTCGGGATTGCAACATGTTGGACTACGAATGG GATAATCCTTCCTCCATCGTTCTCTCCGGAGATGAAAGAAACCCGGACTCTGACCCGACCCGGTCATCCT TCTCCTTTTTCGACCCCATCTCCCATTACAACAACGACCACCGTCACATCACCATTTCTCCTCCCCTCCT CTCTTCCTTCTCTAACCAACAACAACAGCATCACCTCACCCTCTACGGTCAGACCAACAGCAACAACCAG TTTCTTCATCATCACCATCACCACCACTCCTTGTACGGGTCCACCACCACCACCACTCCTTACGGCGCCT CCGATCCCATCTACCATCCCCACTCTTCCGCTCCGCCAGCCTCCTTGTTCTCCTACGACCAGACAGGACC GGGCTCGGGATCCGGATCTTCCTACAACTTCCTCATCCCCAAGACAGAAGTGGATTTCACGTCCAACAGG ATCGGGCTGAACCTGGGAGGCCGTACGTACTTCTCAGCGGCGGACGACGACTTCGTGAGCAGGCTATACA GGAGGTCTCGACCAGGTGAGTCAGGGATGGCGAACTCGCTGAGCACGCCGCGGTGCCAAGCAGAGGGATG CAACGCGGATCTGAGCCACGCGAAACACTACCACAGAAGGCACAAAGTGTGCGAATTCCACTCAAAAGCA TCGACGGTTGTAGCCGCCGGACTAAGCCAAAGGTTTTGCCAGCAATGCAGCAGGTTTGTGCCCCCTAAAG TTGCCACCTTTGACCTTTTTTAAATAAATAAAAAAATACTATAGCTGTGGGGTTTCGGCTATCTTCTCTT CTCTTCGTCCGTACATCCTTAATCTTGTTCTATCTTAGTTTTTAGATCTTCTTTGGATCTCCTTTTTTTT CATTAGTTAGTTAGCTTCCCTTTTTGTTTATTAATTAATTTACAATCACTGCTAAAGGATCGACACAATC ATTGAGAGGGTTCGTACTGTGTGGTGTGGGGGATCCCGATATGGCTTTCTCTCGTCCTTTCCAACCAAAT CATTTTAGCCCTAACTAACCAACCAAACTCTTATCACTAATTCTCCATCTCATCATCATCATCTGATTTA TACATATATATATCGAAATAATCAATACAGGTTCCATTTGCTGTCGGAATTCGACAACGGGAAACGGAGC TGCCGTAAGCGACTTGCTGACCATAACCGCCGCCGCCGTAAATGTCACCAATCAGCCTCCGCCACCCAAG ACACCGGCACCGGCAAGACTACTCCAAGTACGTACTTAATTCTCTTATCATATATATATATATATATATA TCCTCTTTCAAATTAAGATAATCTCTAGATATATGTGTGCATTTAATTAATAAATGGGAATATGTGATGA TGATGATGACCAGAGTCACCGAACGATTCGGGTGTTAAAGCGTCATCGTCACCGTCGTCCAACGCGCCGC CTACGATATCACTGGAGTGCTTCCGGCAAAGGCAGTTCCAAACGACAGCGTCTTCATCCACGTCAGCGTC TTCGTCTTCAAATTCAATGTTTTTCTCCAGCGGATAGTTATAAGCTTTACTCATATGATATATTATGCTT AAAATGAGAAATCAAAGGACTCTTCAATATCACTAGTTAATGCTAGCTGTCTATCATCTGAATTAGTCGG TAATGTGTAACGTTTTATTTCATGTCTCTCGTTTCGTTTGTCGTTTTCATATTGTTTTTGACTTAGTAGA GGTTTATTTAATTAACCAACAACATATCAGATTTCTGATTCTATTATCAATATCTCCTTACAAAAATAAC AATTTTCAAAAGATGTCTTCAAAAGAAAAAAAGAAAGAAATTGAAAGTGTGATTGATATATTATTGCTGG TAAAAGCAAAGACCGGGGAGAGTACTCGTGCATGGTGGTTCGTTCATCGTTTATTCATTTCGGGGAACTG AATTATTGACTCTCTCTCTCTCTCTCTGTCTGCTGTCTGATGCTGAGCTGCTGGAATTTTCCTATAAAAC TACAAGAAACCAATATTTTAGAAAGTGACCGATCAATGTACGTCCACGTGGTTTTACCGTCTTTTAAAAA CAAAATAATATAAAGAAATACAGTAGTATTAGGTTGTTGTTGTCCCCCATTTTGAAGCTAAAAATCATAC AATTTTTTTGTCAAATTAAATCAGTATCCCCACCGAGATTAATAATTTGCACTTTGATCGGTTGTGATAT TAGTAAATGCTTGTCTACCCCACAACGGATGGATGATATAGGAGACGTTGACAAAATTAAGCGATTTTCC AAGCTAGTACCAAGTAGTAGTATATATGCTCCGCGTTACTTGATTTTTGTTACTTGCCAAAATTCATGAT AAAACAATTGCTATGATGAAATAAAAAGAGCCGATCTGAGTATTGTTTGTTGCATATGTATATTCATTCC TCCCCTTGCTATTGTTATGCCGTAAGAACTCAACGAGGACTTTGCCATTGGTTCCCCTGATTCCAGCTGG GTGGGTCCATCGTTTTGCACACGTGTCATATTTGGGTTGGATTTTTTGGCAAAGTGGTTGGGTCTGCGAG CTAATTTTCATCAGAGCGCTGCACCCACACGTGATCATTTTCTGGCACTAACCTCCCGGTACGGTGTGGT GGGGATGCATCAAAATAAAGGCCCAAATGCATGGCCCAACCATTTATAACACTACACACACTCGTATACT ATCTATTTATTATCCCTTCCTTTTCACTAATTAGGCCACGGATCAAATTGATGAATGATATTCCGAAGAC TAGGGCTCTCTGATTATGGACCGCCCCACTCGCATCTCCTATGTAGTTTACGTATTAGTAGATTTATGTC AATTATATGTGTATGCATATGTCGCTGTTACATAAAGTCCTATGTTTTATTATACAACCTAAGTTATCTA ACTCTTTGCCGTGACAGGGATCGGACTGTCCACATTCATGTAATTTATTCATGTCCCGCCCTATTTATTT TTGTTAATTGAATTGAACCAACTCATTTTTATTTCTATATATCCACTAAATAAATAAAATGAACAGACAA GAAAGAAAAAGCGTTGTGGTGCTGAAAAGTCAATGATTACAGACAAATGTGGAGGAGACTTGTATCATTT TATTTATCATCCAAGGACTTTGGGAAGAGAGTATCCAAAGTCTTAGCATTATACAACTGCTTCAATCATT ACGTCACCACGTGTACGACTATATATTATCACTTTCTCATTTCATCTCATGTGTATATCTCAATCTTATT ATAAGAATCACGACACAAAATAAAAAGTTTAGCAATAGCCTATATATACAAGTAAAAAATGTTCTAACAA ATGCAAAGCATAGTGTTATGTAGAAAAGATGATCAAATCAATAGTTTGATGTGTCCCTCGAGGACTTGAC TTCAGTAAAATATATGAATTTTATTCAGTCTAATTTTTGTGGATGTTCGATAACATTTACATGCATTTTT AAAGGAACGCCTAAAAAAAGATTGTTACAAAATAAATGTGCAAGCTTTTAAGTTGTTACACCTAGTATTT GCGAGCATTAAATCCGTAGTTTCATTATAAAACTATACATCAAATAACCATAGTATATAACAATATAATG GTGATGGATGATATACTACTTTCTTACATTTTAAAAATTGATTACTATATTATGCTGAGTTGGTGGAATA AACTTTTCAAAAGATAATATTACATAAGGTGTATTTAATTTTATGGGACAATATAAGTTACGTTGATGCA AAAAAAGTTCTTCTAAACTTGCTGTGATTATATGGGCCAGTATCAGTGTTGAGGAACCCAAACAAGTTAA TTTTCGAGCCCACTATGATTTAAATCCCATTGTTTCTTCCCTACTAACTTACTACGAAATATATTTTTCT GTTGGCATATCACATATGTATGTGAATGGCCTAATGGGATTATATAACTCTTTTTGATGCCCGTTATGGA TTCCATTTTTCAAGATCAAAAAAAAAAAAAAAAACGGCTGTGTCATTTAATTACTGGACAAGGAGCTGGC TATTTGTCTGTATTCATAAACAGTGTTTGTATCATTATTTAACGAATATTGTTTCCATAAGTACACACGA ATATATTCTTATACATACGGGATATTTAGACAGGATTGGTACGATTCGTAGTCGATACACCATACTAATT TAGACCGACCCTTATTATTATTACATGTACTAAGTGCTTCTAGTACTAGCTAGCTATTACCCCCACTTCT TCTTTTCATTCTAGTATATGTTTTTCCCCACCGTTCGTATTTATATACAAAAAATATATATATATAATAT TCCTTTGGTCCACATATTAATTCCCGTATCAAATTGTAAATCACGTACTTGTTGATTTTGTGAATGTACA CGCGTACGCCTCCCTAACATTTGTTGACAATTAGGGTTTGCGGATATGTATCTTGATTTATACGATTTTA CACGAATCACGATGACTTCCGATTGTACTCGCATTATTAATGGTATTTAACGACGAAACCTAAAGGAACC CAGACCTATATTTATATATACGTGGATGTTAAGTTTAATAAAGATCTTTACGAAAGGTTTTAAAGAAAAA GGAGTCTTTTACGCAAATTGCAGTTATTAATAGCTTATATGGTGATTAAGAAAACACAAGCTCACGCCAA ACACACATTCATTTCATATATATAAACACAAAGTAAAAAGGAAAAAAGGATGAAAACAAACAACGACGTT TTCTTTTTTAATTTGCTCTCTCCGTAGTCTAATTATACATAATTTAATCACACAGTCTCGAAAGAGTAGT ATGATTATAGTAAGTCTTCTAATACCTCTCGTTTAGGTGGAACTAACACATGACATCTTTGAGAAGCTTG TACCTTCGTGTGGCCGTCTTAGGCGACGTAACTCCGCCTCCATCTCCAGCAACGCCCTTGGCTACTTGAT CGTGACGGTTATTGTTATGCTTGATCCGGTGGCCGGGCGAATATTCCGATCTGTTTGAGAAGTCATTTTC ATATTTAACCGAAGAAGAAGGCTTCTTTGAAGAAGAACCGCCATGTCTAGCAACGTTGCTCAGCTTCCGG TCGTCGCTGCGGCACCAGTCGCAAATCTCGGTAGGCTCCGCAAACTGGCCGTAGTAGTTGCTACAATAAC TATATATATATATACACACATATATGATCAATTAAGAAACCCATTAATAGCCGTGAATGGTCACTCTGAT ATACATATGCATGAATGATGAAGGAGGACTACTTACGAGTGTTGGAAGCGGCAGCGGCAGTGACCGCAGC TGAAGAGCTTGTCGGAGAAACCGACATCACCGCACATGCAACACACTCTCTCCATGATATATCTTCACAA TCTTTATTATTTATATATATCGACCCTTGTATATATATGTTAGGCCGTGATGTTTAAAGTAATTATACAA CTATGCGTGTTAGTAAAAATGTACAGGTAGACTAGAGAGTTTGCTTGCCGTCGTTTTCACTTTTCGGTTT TAGAGAGAAAGCCAACCTTAAAATGGGGAGTTTTTCGGAAATGACTGTTTTCTCCTTCCTTTTGTGTTTT TCCCCTGTCTTGTCATTTTCTAGTTTTTTCACTCTTCGTGCACATATGGTGGATGGATCCTTCTCCATGC CTACGGAAAGCGCAATGCAGTGACTTGTGGTCTTTTCTTTCTTTCAAATTATAGGCTTTCAAATAAAATA AATGTTGTATATCACGTATCATCAAATTCATTAGAACTCGATCGACCATCAGTTTTTTTAACTTTATAAC GATGTTGACGTGACGAAACGCATGCTGCTGTGCGAGTGAGAGAGTGTTAAGCGATGTGAACAACAGAACA AACAGTTTGCGACAATAATTAACAACACCAATTTTTTCATCCAACTTAGTAGTAGTGCTGCTTTTTCTCC CTTTTCACATAAAGCGGAAAAAATATATTGGGATTATCTCTTGGTGGTGATGTATAGATCGCACACTAAC ATGTAAGTTAGTGGGAGTTCAGGCTTGAAGATCTAGTTCTTTAGCGAGTCTTCGTTGGTCCGGCGGCTTA TTATCAACGTACGTGTACATGATGAGCTCTAGCTATAGTAGGGTCCAACTTGTCGCCAAGACTGATTAAT TCGTCATATACTAGTTAATTACTCTAAACGTATAGCTAAAGAAGAACATTATATATAGAATATTTTGTTA ACTATGATTTGTTTATGGTGTTAGACATATAAGTTTGTTTAATGTAACTTCAAATTATGTTGATGGATAG AGATGGATTTAATGAGGAGGGTTAGGTTATATACAATTTGGTACCCATTTATTGTTTGCTTTCCCAATAT TTATTGCGGTTTGCATGTTTTATAAAAACTGGTTAATATATTTTTCGGGAGATTAAATATAAGGAAACTT TGATGCGACTCGACGACTTTGAGTGTAAAATTGATTAAACGCACCAGTCACATGATATGGAGGCAATCGG AGGGGAAACAAAACCGACGGCGATGTGAAGTTCCCGGTGGTTTCGCTAACTTGGAACCTAAACGGTCGGA GAGGGATCCACGTGGCAGAATTCAGGAGATATTTTTGGAGTTTGGTTGGCCATGTTAAGCACATGCCCTG TCTTCTTCTCCCTATCTCTCATCCTTTGCGTTGCTTCCTCTTTTCACTGATACTATATTTTTTATTTCCA CCTATCAGTCATTTACCATGTACATTAGTACGCAACGCACAATTCGGTGCCAAATTAGAGTTTCAGGGTC TCACCTCTCTCTAATCTGTTTGTATAAACTTTGAATGGAGGGAGACTTAGACCATGTACATGGGTGATAT TTTTAGAGTATCATCAGTTTAAAAATTATTTTTATATTAACCAAACAATTAGAATGAGCTTGATTAGTAT CATTCCAATGATTTTTTTGATATTACTATCATTTACGTGGCATCTCCTGATTGGTCGCATTTGTCAAAAA TAAGAAAAAAATATTTATCTATTAAACAAATATTATAAATAATACTAAAATTTTTTAATGATAGTTTGTT AGTATCACCTATAACCATGCTCTTAATAATTAGGATATAAAACATGTGAATGAGAGAAGTGGACCCTAGT GATCTTTGTTTGTAGTGGCCTCAAGATTTTACTTTAGTCCCAAATTCGGAGGAAATTATTTTTGTTAATT AATCATTTATTCTTTCTTTTGTTCTACCTCATTCCAACTTACAAATTCAGTATCCAATTCATAAGTTGAA CCAAAAGGAAAGACATCATTCAACCCAAGATTAGACCAACTGTCTTTCGTGACACACTTGCAATTAATAT GATTCTTAAAAAATGTTAATGATTTTGTTTGGAACCAAAAGACAATAAGTTAGCAGTCAAAAAAGCAGTA AATGTAATTAGAAAGAAGAGACATGGTAATATAATAGATATTATGGATGGTGTGACGAATAATTGATCTA ATAATCATTTCAGACAAGTGGACAACCCTACCTCCTGAGATGATCTTTTTAGCATTCTATGTATGTACTG GTTAAAAAAAGGTTTCAGAATCAAAATGATGATGATCGTATATTTGAAAAGAAGCCAATGATCTCTACTT TGAAAGAAGAGAAGATGAAAAGAAGCCAATTATGAAGATGAAGAAAGGGCATAACAGAAGATTGAGTGTT ATCCTTTGTTGAGGAGTGCCCAACACAAATTAAAGAATGCTTCTTTTCCTTTGTTGGATATAATGTATTC AAAGACAATTGAAAATCCAGACGAGACGAGTCCACGAATAATGTGGGCCTTAAAAAGAGTCAGGTAAGGG AAGGCCCAATAACGAAAATAATGGGCTTATTATTAGCAGCGGCGGTGAGTTATTATATGTGTGGAAAGAA GGGCCAAAATCACAACTCACAACCCCCAAAACGCAAAAAACGCAAAATCGCAGAAAGAAACTTTGCAATC AAATCTCTCTCTCGGATCTCTGAGAGAGCGTTCTCGTAAATCCCTAACTATAGCTACTCTCGTGGATCCA CCGAAAACCCTAGAAGGAAGAGCCCCTCTCCCGTCGTCCCTGGCATTTCGGATCTCGGATTTCCTTACCT CATGACTCCCTCCAAGGTCGCCGGTCATACCCGGTTCTTGCTCCACAGCTTTCATGATTCCGATGTCGAC TCCATCGCCCTCCAGCTTTCTCAGGTACTTCGTTTTCTGTCTCTCACTTGCCGTCTAGTTCGGAGATCAG CATACGAAGAAATTTGGTTGGGTTTCTGATTTTTTTTAAAAAAAAATCAATTTGGGCAGTTTGTTGATTT TGGAGTCGAGACTAGTATTCCAGTTCTCAAGACCTGCCTGGATTGCTTCACCGCCCGGAGAAGCCATCCT AATTCGTTGCAGCTTGAGAAAGTTGTATCCTTGCTCTTTAAACATGTGCTCAAGTTGTCAAACCTTGCCA CCCTGCTTCCTCACGCCCTCAATGATTTTGAGCTCACTCAAGAATCCGTGGATGATTTGACTACTACTTT GAATTTTTCAATCTCTGAGAATATTGGCTTTGCTCTCGCCCTGACCGATTTTGAAAGATTAGATGCAAAG ACCACTGGTAAGACTGTCTCTTACTAGTTCTCTCATCTCTCTTTCGCTTTATCTACCATTTGATGACATT TTGCTCTTTCCTTTTCTAGGACGGAACTTACTGTTGGCTCAGATTGAGCAACTCTGTGCCAATACTGGCC AGATTCTTTCATCTGAGCTAATCCATTCTGTTCTTTCGTTTCTCCGCAAATCTGAGGATCTTTCCATGCA TTTGGATTCCTTCTTACAGTTTTTGTCTTCTGCTCAACCTAGAGATGACTTCTCTTTTGCTCTAACACCT ATGCTTGCTCAACAAGTTCATGAAGCTCCTGTTTTCAGGTGCTGCTTATGAGTTGCTTTCTTCTCTTATC CCTTATGTTCCGAATGCGTTTCTCAACAAAATTTTCCTCTTCTCCTGCAGGAGCATGGATTTTCACACTG ATTCTGCTGATAACGACCTTGATGCTATCTTAGCTGAAATCGATAAGGAAGTCAGCGTTGGAGATCTCAT GGGAGAATTAGGTTGTGGATTCACTGCTGATGCCCAACAATGCAAAGAAATCTTGTCTAGTTTTGCTCCA CTAGGAGAGGCTACTATCTCAAGAATTGTTGGCAATGTTTCTCGGACCTGTGCTGATCTTGAAGATAATC AAACCACCTTTTCAACGTTTACTGTAGCCCTTGGTTCCTGCATTCCAACTGAACTTCCCACGCCAAGGTC GTGGAATGTTGATATTCTAGTTGACACAATCAAGCAGCTTGTAAGTCATCTGAAACTCTTATTACTTTGT CTAATCAATATCGTTGATAGTTTCAAAACTTCAGTTAGCCTTTTTTTGTGTGTATGTGTGTCTCACTAGC ATGCATGATTATGTTTCTTTTACCAATGGAGCTGTGAAGACGCATCTAGCTTATTGTTAAGTGTTATGTG GTTCATGCTCTTAAGATTTTATGCTAAAGCAGGCTCCTGGCATAAGCTGGAGGAAAGTAATTGAGAATCT CGATCATGACGGATTTGACATCCCTAATATGGAGTCTTTCTCATTTTTTATGCGGATCTATAAAGCTGCT TGCAAGGTGTGTTCTCATACTCTCTAATTTGACTGTTTAAAAATATGTTTACTTCATTTTGTTGTTTGAG GGTGTTAATCTGATTCTTGCAGGAGCCATTTCCTCTTGATGCTGTATGTGGTTCTGTCTGGAAAAATATG GATGGTCAATTATCCTTTCTTAAGCACGCAATATCTGCTCCACCAGAAGTATTCACCTTTATGCATTCTC CAAGGAAGCTGGTGAGATACCACACATCTGTGCTTAGAGCTGTTCTTCCTTGTCCCAGTCACTATTCTGA CCAGTTGTATTTCAGGTATATATTGATAACATGCACAGCCAAGAGCAACAGTTAGGACTATCCAATCATG CATGGCTGTCGCTCGATCTCTTGGATGTACTGTGCCAATTGGCCGAGAGAGGTCATGCTGTTTTAGTTAG TTCGTTACTCCAGTATCCACTCACACAGTGTCCTAGAACCTTGCTTCTTGGAATGACACACATCAAAGTA TTTCTCCTCGACTGGTCTTTGGTGATATATGCTTGTAATCTTGCTTCTTTTTGTTTGGCTAAGTATGTCA ATCCTCTTATTGCAGACTGCCTATAACCTCATACAGCGTGAAGTGGTTTCTGCTATTCTGCCAGTGATAA TAACGAGTCCCCAGGATAGTGGTTTTATCCATAATCTCTGGCATCAAAATGCAGAACTCGTTCTGTGGGG GATTATAGATGCCCAACATCTCAAAGCAGACAGCATGCTCCGAATAATTGAAATCTGCCATGAGCTAAAG GTGAATAGAAAAATGCGTGGCAGTGGCTCAAATTATCTCATTATACTGTTTTTCTCTTTCTTACAGCAGC CTCTCTGTGTCTATGTACTAATCATGGCTTATTTATTTCAGATTCTCTCTGTTGTCTTAGAATCAGTTCC AGTCTCATCCAGTATCAGATTGGCAGTCCTTGCCTCATTGAGAGGTCTTTTGGACATTGAGAACTGGTTG CCTAACTGCTTGTATATGTATAAGGATCTCTTTGCTGAGGTAACATATCGTTTCACAATCATAGTTCTAT TTCTAATTTTCTAGAGTTGAGAAGATGCTAATCTAACATTTTTTTTTCTTTTTCTTTTTCATATTTCAGG AGTGCCTCAAATTTGTCAAAAATGTGCATTTTAGCGAATCAGACGATTTCAGGGCCAAAATTTTTCATCC TTCTGATCCATTATCAGATCTTCATTTGGAAGCAACAACTTCCCTTTTAAAAGTTAGTTAGTTTCCCTTT TTGGTTTGGTTTTCGGCTCGTCCTTAACTTCATATCTACTGAATTATTTTGTTTGATAATGTATTAAAGG TTTTGAAAGCTCATGATAATGCGATTACTTCATCTCAACTGGTCGAGGAGATTGAAAAAGTCAATGCAGC TATTTTGGATTGTAATCCTAAGCTGCAGAATGGTGAGGCTAAAGATTCATCAGCTCCCAATGCATATGGA GATGATGTTGAGGCAGAGGCAAACGCATATTTTCATCAAATGTTTTCTAGTCATTTGAGTGTTGACGCAA TGGTTCAAATGCTTTCCCGATACAAGGAATCTTTGGTTCCAAGGTTTGATATTGACAAACTATACATATT TGAGAATTTTAATTTTTCTCGTCATGTTTGTCATGCTCCTCATGCATAATGAAAATAACGAGATTGTTTT TTTTTTGGGCAGGGAAAAATTAATTTTTGAATGCATGATTGCTAATCTGTTTGAAGAATATCGGTTTTTC CCCAAGTATCCTGAGAGACAGCTGAAAATAGCCTCCATACTCTTTGGTGAGTAGGATATTTTACTTTGAT ATAGCGGGTGGTTTTTGTTGGGGAGGGGGAGACCATCATATCTTCTATGCTATTGTGTAGCCCCCAACAT TTCTTACTGTACTATTTGAGCGTCTCTTCAGATTTGTATTGTTGTCGTGACATTCTCTTGAATCTACTGC GACTTATACAAATTTCAGGTTCTGTTATAAAACACCAGCTTATAAGTTCGCTCACTCTGGGGATGGCCCT GCGTCTAGTGTTGGATTCTTTGCGTAAACCTGCAGATTCAAAAGTATGGATTCTTTTGTAATTTATTTCT GTCTCCCGGCTTTTCCTGTGAGAGATCTGTCATCTTCTTTCTTTCCTGATTCGTGCAGATGTTTCTGTTT GGAAGCAAAGCTCTGGAACAGTTTGTGAATCGTCTGGTTGAATTGCCTCAATACTGTAACCATATTTTGC AAATATCTCATCTGCGTAGTACTCACCCGGAGTTAGTCACTGTTATTGAACAAGCACTTTCAAGGATATC ATCTGGTAATTTAGAATCAGATGCCTCTGTTTCACACCCTGGTCCCTCACAATCTTTCCCTGGAAATGGC GAGGTAGGATTTGGTTTATTAGTTTTCTTTTGATTGAATGTTCTAATTGTCTCAATTTTGATCAACAATC TGTTTCAAACATGAGATCATATAGCTAGAGTTATCTATTGAAAAGGGAAAGAAAATTGATTGATCATTTC TGTTTCTAGTGTCATGCCTTTCATTTTTAGCCCTTTAGCCATAATGGGGAATTACTGTAAGCTGTAAATC GGTTTTTTGGATTTTTATGGTGAGATGAAATTAAAACTCTTTTTGTTTCCGTTGACAGTTGAGTGGTTCT GGAATTGGCCAACCTGCATTACAGCTTTCTTCTCCCCTACAGCTTCAACAGAAAAATGAAGTGCCAAGTG TGCCATCTAACGAGGCAAAGCCACTTCTGCCATCGTTATCAACTACTTCCGTTGATGTTTCTGTCAATCC TAAGGTGATGAATTTCTCTTGTTTTTCTTTTATAGACGTGTGTGGATGGAAGGGTTTTCATTTCATCTTG CTAGTTATTCCTGCAGAATCCTGGCATTCCAACTTCTTCATCAACCTCAACTGGTTTTGTTCGTCCAGCT CGTGCAACCACTTCAACAAGTAATCTCCAGTCAACTTAGTTTTATAACTGTTTTTTGAAATATAATAGGG ACTATAGTTCTTTCCTATCAAGAGAAGAAATGTTATTAAAATTCGATTTTCACAGGGTTTGGCTCGGCTT TGAACATAGAAACCTTGGTTGCAGCAGCAGAAAGAAGGGAAAACGCAATCGAGGTACTTTACTATTTTAC TACTGTCTATGCACATTCAGAATTATTTGCTTTTGGTTTTACATTGCATAAGGAATTGTCAGTATGCCAA ATGTCTACTTTTTAGTATAAGTGACAATAATAATGTATTTTTTTTTTCCAGGCTCCACCTTCAGATGTTC AGGACAAAGTTTCGTTCATAATCAATAATATCTCTACAACAAACATTGAATCTAAAGGGAAAGAGTTTGC TGAAATTTTGCCCCAACAGTATTATCCTTGGTTTGCACAGTACATGGTTATGAAAAGGTACTGATAGTTG TATTCTTCATGCAAGGTTTCTTTCTTATTTTTTCCCTCCAAGTGTGTAATACCTGATAGAGCGATGTGTT TAATACCTGATAGAGCGAGCATCGAGCCGAATTTTCATGATCTGTACCTGAAGTTCTTGGACAAAGTTGA TTCCAAGCTGCTGTTTAAGGAGATACTTCAAAATACTTACGAAAATTGCAAGGTTATTTTTCTTCACACA AGTGATTTGCGGTGATAAGTGTACTTTTTTTCAGCAAATTTTTCTCTTCTTAATTTCTTTTGTTTTGCAG GTTCTTTTGGGCTCAGAGCTCATAAAGTCGAGTTCTGAAGAGCGTTCTCTTCTTAAAAATTTAGGCAGTT GGCTTGGAAGGTTGACCATTGGAAGGAATTATGTTTTAAGGGCGCGAGAAATAGATCCAAAATCCTTGAT TGTGGAGGTAATTGCTGCTATTTCCTTTAAATTGATCTCGTTCATTTGTAATACACAGTCAAATTGTAGA TATGAACTTTGTTTTCGCATCCTTTGACAGGCCTATGAAAAAGGGTTGATGATAGCAGTCATTCCGTTCA CTTCAAAGGTTGGTGATGGTTGATTGGCGTTCATAGCTGTTCTAGGGTTGATTTCCTGAGTTCTAATTTA CTGTTTATTCAGGTTCTGGAGCCATGCCAAAACAGTATTGCTTATCAACCTCCCAATCCTTGGACGATGG CTATACTAGGGTTGCTTGCTGAGATCTATTCAATGCCAAACCTAAAAATGAATCTGAAGTTTGACATAGA GGTATCTGATAGTTCCTATTGAGCATCACGAGTTATTTTACATCACTTTTATTTGTGTATTTTATGTGTT GTTCTCATTTCGTCTTTCTCTTCAGGTTTTATTCAAGAACCTTGGTGTTGAAATGAAGGAAGTAGTGCCA ACTTCCCTTCTAAAGGATCGGAAGAGAGAAATAGATGGCAATCCTGATTTTAGTAACAAAGATCCTGGAG TAACACAGATATCTCAGCCACAGATGATTCCAGAGCCTAAAACAATTTCTCCTCTTAAACAAATTGACCT ACCTCTTGATGTTGCAAATTCGCCTAATACAGATGTTCCCTCGAAGTTATTATCACAGGTTATTTTATGT GTAGTCTTTTTTTTCTCTTTCTTTAAGCTATAATGTCTGTTTTACTTATCAATGATAATTATCCCCTTGG TTTTCCTTTTCAGTATGTAGCCCCACAACGTGTTTATACTAATACTTTGATGGATGAGGAGAAAGTAGCA ACTCTTGGCTTGCCAGAACAGCTCCCGTCACCTCAAGGACTGTTCCAGTCAACTCCATCGCCATTGTTTT CTATTAGTCAGGTACGATTTTCATAGGAATGTAGATTAAAGTTATTATATAGATGATTGCTCAAATCCTT TCTACTTTTAATGTGATGGCCAGCAGCTGTCAGCAGCACTTCCCAATATTGGAAATCATGTTGTTATCAA TCAGAAATTAAGCGCATTTGGTATGCACTTTCCATTTCAAAGGTTTGTGACTAATGGTCTCCTACTGGTG AAATCATTATGATTGTAGAGCATTGAAGCTATATTCTATTACACACTAAACTATTATCCATTGTCAGAGT GGTACCACTTGCCATGGACAGAGCTATCAAGGAGATTGTGTCTGGTATTGTTCAGCGAAGTGTTTGTATT GCATGCCAAACAACAAAGGAGCTTGTGCTAAAGGTTGGCCAATCTAAACCTTTCTGCTTTTTTTTTTTGT TCTTTTCCTTTATTACTTTTACGTAACTTGTTTTTTAGTTTCGTGCCTCAAAATTTTCCTTAACCCCCAT TCGATTTCCATTGCTTTTGACTCCACAACTAAATTTTTTTATTTCCATTTATCACAAACATCTTCAGGGT TTTGATCTTATTTATTTATCGTTAATTGTTGTTTCTTTTTTGACTCCAGGATTACGCCCTGGAACCCGAT GAGTCACGTATTTATAATGCAGCTCACTTGATGGTTGCGAGTTTAGCTGGGAGTTTGGCTCATGTGACTT GCAAGGTTTTTCCTTCTTATAAGGCCTTGGATTCTGAAGATTCTTTAGCTTTTTGTTTACACATTTACAA TAATGCTATTATATCTCGGCCCTGTTACCCTAAACCAACAAGATCTATTTTTTCTCTGGTTTTTAATGCT CTTGTATTTTTAGGAACCCCTGCGCACTTCAATATCCGGTCATCTACGGAATTCGCTTCAGGGTCTGAAT ATTTCAAATGATGCTCTTGAACAAATTGTGCAACTTGTCACCAATGACAACCTGGATTTGGGTTGTGCTG CTATTGAACAGGCTGCTACAGAAAAGGTTTGTGTCAGATATTAGATCTCGGACTTTATTTCTGTTTCAGC TGATTGAATCAAATAACCGAAGTAGGTTTCCCTGGAGTGTAGGCACTTCCGTTTACCAGAGGGTTAATTT CTTCTAGTTACTAATTTTTATGTCCGTGTCACTACAGGCAATACAAACAATTGATGCGGACATTGCTCAA CAATTGTTGTTACGGAGAAAGCATAGAGATGGTGCTGGATCCTCCTTTTTCGATCCAAACATTCTATCAC AGAATTCCGTCAGTTTTATACCCGAATCCCTCCGTCCAAAACCTGGACACCTCTCCCTGTCTCAGCAGAG AGTTTATGAGGTACTGTTTTTAACAGGTAGCCTCTGGTATGTTCTGTGTTTGTATGACTAAACAAGATGT GTGCATTTTCAGGACTTTGTTCAACATCCTTGGCAAAAGCAGTCGACCCAAACTTCACACGGTTTATCTG CTGCATCAAGCTCATCTGGTGATGTTGCGCTTGGTAGTGGTTATGGTCCAGTATCAGGAAAAGTTGCTTC TGAATTTTTGTCTAATGCTGGAAACGCTCGGATGGACATGGTCTCCCGGCCATCAGATATTTCTGTGGAT GGTTTTGAATCTTCTCCAGTCTCACTTTTGAGGTGCTTAGTTGTAAAGCAGATCGATAAAACTGCTCTCA TTTCTATTCGTATATTTCACAGCTGAATGTTGACATATCATTTTACCTGTCTTAAAGCTCACAAGTCGAT CCAGCTGGTGACTCATCCAGTCTTCAATTTACTAAGTCACTACCAACCTCTGAATTGAATCTGGCTGAAT CCTCTGACGCTGCTACGAAAGTGAGATATACTGTGTTTTCAAATGATTACTCGCTTAGGTTTATAATGAA TTACTAAGCTGTGCTTATTTATATACAAGGAAACTGGAACATCACTGCAGACATTGACTTCAGCTGCTAC CATGGAACGACTTGGTGCTAGTAATATTACACAGCCTTCACTGTCCACGAGAGATGCACTGGATAAATGT CAAATTGTTACTCAGAAGGTTACTAAAGTGGTTATCCTGTGTTTTCCTTGCTGCATTTTTTTTTTGCTGC TTTATATGTGAGAAACTTCTTGAAACTGTTTCAGATGGAGGAATTAGTGGCTAATAATGCAGGAGATGAT GAAATCCAGGTATTTGATTTCCTAGTGCCTAGGTGGTTATAGTGCAGAATTGTTATCCATTTACGTGCAC CTAGAATAAATGAAATTAGAAGTTAATTTTGAAAACCTTCTCTAACTTTTGGAAATGGTTTCTGTGTTTT CCAATTGATGCCTATTTTCTTCTATCCAGTATGAATTCAATAACTAATGCAGATCTCATTGATTTTTCAG GCCGTAATTTCTGAAGTTCCTGAAATCATCCTCAGATGTATAAGCAGAGATGAAGCCGCTTTTGCTGTCG CTCAAAAAGCTTTCAAGGCTCTTTACGAGAATGCATCAAGTAACCTTCACGTCAGTGCTAACCTAGCAAT ACTTGTTGCTATCCGTGATGTTTGCAAGCGTGTTGTTAAAGAGCTCACTAGTTGGGTATGTTTACAACCT TTTCAAGATTTCACTTCGCTGATGTGCTTTGTTCAGTTACTTCTCCATTAATTTGTCACTATTTCTGTCA GAACACATAGGATAACACATATCATATAAGTGCTAGGTCGAGTCTGTTTCCTGTAGTTGGAGCCTATCCT CAACTGGTTATAGATACTAGATTTGTTTCTTTGGTATTTTTAGTTATAATTAATTATCTTTCTTCAAACT TTTGACACAGGTGATTTATTCAGAGGAGGATCGGAAGCTCAACAAAGATATTACTATTGGTCTTATCCAG CGTGAGTTGCTTAGCCTAGCGGAGTACAATGTCCACATGGCGAAGCATCTTGATGGAGGGAGAAACAGTA TGCTGAATTGCTTAACCTTTGTTGATGTCCTTGTGTGGTAACATTCTTTTTTTGTTTTGGCTAGTGAACT TGTTTTAACAAGTTGTTTGTTACGCAGAGACCGCAACTGACTTTGCTATTTCTCTACTCCAATCCTTGGT CACTGAGGAGTCGAGTGTCATTTCAGAGCTCCACAGTCTTGTTGATGCGCTGGCAAAGGTTGCAATTTTA ACATTCTTCTGCGTTTGTTGTTGCAGTCGCATATTCTTGTTCTATTATATAAAAAAACAGTTAATAGGTG TGAAAACATACAACTAGGGAAGGGATAGGTTCAATTTTTTTTTTTTGTGGTTAAATCTACTGCATAACAC TGTTTATCATATAATGCCAACTGACAAGTATTGTGGTTAGGTTCAAATATTATGAAATTTGGCATTGTTA TATTTGGTGACGCTGCAATTTGTATTCTTGTTTTGGTTGTAGCTTGCCTCAAAATCCGGATCTTCTGAGT CATTGCAACAGCTAATTGACATCATACGAAATCCAGTTACTAACACAGCTGGCCTCTCTGATAGTTCAAC CGGAAATGATAACAACGATAGGCAAAAGGATGAGAAGGTGTCAGATGTCTTCATTACCGAATGTTGCCTG TAATCAGACTGTAAATGTATATTTGACATGTTAGCTTTTTCTTAGGTTGCGTGCAACACCACTAACACAG AAGAGAGTACCAGCTTGGATTATGTGGAATCAGATCCTGCGGGTTTCCAGAATCGGGTAATTGTCTGCAT GTTATTAGCGTTTATGAACTTCTATATTGATTTAGAGCTCTACCTTTTCTTTTTTAAAAGTTGATTGGGA ATTGCATATATCTAAATTTTTCACTTGCAAAAGAGTAAATCAAAAGCTAAAATGTTTGTATCAGCACAAT GAATTTGCAAGCTACAAAAAGGATTTCAAAACAAACGTTTCTATGAAGCTATTTTCGTTCAGTATGCATG TTTTTTTCCTTATTTTTGTCTTGTAGATGGATTTTAAATTTTCACTTTAATTCGATGTATTTAGATACAT GTGTTTGTAGTTTGTTATCTCTTCAGTTTTATGTTTGAACATACATCTCTCGTACTTCTTGTTTATATCT TGTTTTTGTCTTCCTCTGTATGGTTTGGCAGGTGTCCACGCTATTTAAAAACTGGTATCAAATCTGCGAA CTTCCTGGTGCAAATGAAACCGCATGTTCACAATATGTCCTGCATTTGCACCAGACTGGATTACTTAAGG GAGATGATACAACAGAGAGTTTTTTCCGAATTCTTCTGGTGATTTTACCTTTTAAGAATGTTTTAGCATC AGCACTTTCAAATCTTGAGAGGCATCATTATTGATTTTGGCTTTCCTTTCTGTAGGAACTTTCTGTTGCT CATTGTATATCTTCTGAAGATATTAATTCCGGTGCTGTGCAATCTCCTCAGCAACCTCAGAGTCCATCAT TCCTTATCATTGATATGTATGCAAAGCTTGTTTTTTCAATATTGAAGGTAGAGTGCTCATTTTTTTTTTT GCATTCTTCGTGGATAATTATACCCAAAATACATTGCCGGCTAAGCTTTTTTTGTTTTGTTTGTTTCTTA TGACAATCTGTTCAGTATTTCCCTGAGCAGGAGTCTAGCAGTAGGTTATTTCTTCTTTCAGAGGTAAGGG GACACATACTCTTATTGGAAATAAATCTAACTTCTACTATAATGGATGGAAAAGGTGAGTGGTATTGATT ACCTGTTTCAGATCATGGCTGACACAGTGAGATTTATTCAAAAGGACGCAGAAGATAAAAAGACATCACT CAATTCTAAACCATATTTCCGATTGTTCATCAACTGGCTACTGGACTTGTGTTCCCTGGATCCTGGGACG GATGGTGCAAACTTTCAGGTGCATTTTGTTGTCCTTGAAGTAGCTGCTATTAATTGTTATCACTTTAATT AATCTTTTGTTGCAGGTTCTCACAGCTTTTGCCAACGCCTTCCACGCATTGCAGCCTCTTAAGATTCCTG CTTTCAGGTTAGGACACAAACCTATTTCTCACCGTGCTTCTATTAAAACTTAAAAATTTGAATCTCTCAG GAAATTTGAGGGCAGTCAAATACCTATGTTGTCAAACATTTCATGTTGTTGACATATGTATCTTCTTTTC TTTGATCTGTGATCCGTGTTTTATACATTTTTTTTCTTCTCCACTGAGGTTTTTATAAATTTTTCCAGTT TTGCATGGCTAGAACTTGTCAGCCACAGAAGCTTCATGCCCAAACTACTTACAGTAAATGGCCAGAAGGG TTGGCCATATGTTCAGCGCCTGCTGGTGGACTTGCTTCAGTTTCTTGAGCCATTTTTAAGAAATGCTGAA CTCGGAGGACCGGTTTGTGCCTTTTTCTCTTCTGTAATTGTTTTGCATTGGACACTAAAGGATATAGTCG ATGGTAACTTAAAGTGGTCTCTTTTTTGGTGTGTTTATTAATTGCGTAGGTTCATTTCCTATACAAAGGG ACATTGAGAGTATTACTGGTTCTGCTTCATGATTTCCCAGAGTTCCTATGTGATTATCATTTTACTTTCT GTGATGTGATTCCTTCAAGTTGCATACAAATGCGGAATATTATCCTCAGTTCTTTTCCACGGAACATGAG GCTTCCTGATCCTTCTACCCCAAATTTAAAGGTACGAGATGATAGTGGAGATTCCAGCATGTTCAACATA TTTTAAAGAAAATATATTCCTTGTAGGCTGAATTATCGTGTTCATTGCAGATTGATTTGTTACCTGAGAT AGTAGAAGCTCCCTGTATCCTTTCTGAGGTTGATGCTGCGCTAAAGGCAAAGCAAATGAAGAATGACGTG GATGAGTATCTTACGGTAATGGGAACACCTGATTCTTCAATTTACTTATATTCACTTTGGTATTCTTGAG ATTATATCAAGAGATACTCATATAATTTTTCTGCAGTCGAGGCAGCAAAATTCAACTTTCCTAAGTGAGT TGAAGACAAAGTTACTTCTATCGTCCAGCGAGGCTAGTTCAGCTGGAACCCGTTACAGTGTACCATTGAT CAACTCGCTTGTGCTATATACTGGAATGCAGGTATGGGTCTAATTTCTATACAGCCTTTTCTTTTGATTT CTAGTTTATTATATATATATATATGCAAATAACCGACATTGCGATAACAGGCTATTCAGCAGCTTCAGGC CGGTGAGACACAGGCTCAAAATGTTGTGGCCTTGCAGATGTTCAAGTATTTAAGTATGGAACTTGATACG GAAGGGCGGTATCTGTTCCTTAATGCAATCGCCAATCAGCTTCGATACCCCAACAACCACACTCATTACT TTTCTTTCATCATGCTCTATCTATTCTTCGAATCTGATCAGGTGAGTTTGCTTTGCTTGTCAAGAGTTGT GTGGAAAAATTAGTGAGCATGGAAATCTGATTTTTTTTTTCTTTTTCTTGGGATGAATGAAACAGGAGAT CATACAGGAGCAAATAACTAGAGTGCTGTTGGAACGGCTAATTGTGAACAGGCCACATCCATGGGGACTT CTAATCACATTCATTGAGCTAATAAAGAACCCAAGATATAGCTTCTGGAAACAAGCCTTCATCAGATGTG CGCCTGAGATTGAGAAGCTGTTTGAATCGGTAGCCAGATCCTGTGGTGGCCTGAAGCCTGTCGACGAGGG AATGGTTTCGGGAGGTTGGGTCTCAGACAATTCTCACTAGCTCTTTAGCTTTCAACTTGTATATATGTAT GCGTATTTTGATATTATGTTGTAACAATTATACATACAGTAGGAGAGATTTTAGGAGTCTTAGTTTATTT ATTTAACTTCAAGATTCACAAACATGTTTTCTAATTACAAAAAAAAAAAACACTATTATTCCTTTATCCT TGCTCTTAAGGGTCTGTTTGAGAATTAGTTAGGTGAAAACATGTTTGAGAAATCGGCGGGGATTGTGTTT TCATGGTCATAAAACATGACCATAAACACTGAAAGAGATTATGATTATGCTGAGGGAGTGTGAGAAATCG GCAGGGATTGTCATCATATAGTACTAGACTACTAGTACTTTGTATAACGTTCTCAGGAACATGTTTCGGT CAGAATTCCGATGGTGGGATCTAGTCGATGACGTAATAAACAACACTTTCATGCCCGCCTAAGAGGCAGC TGTCGCAGACTAAGCAGGTTTCAACATGTGAGGGGCCAAGGCGCTGGCTAGTGGTCAAAAGACGGAACAC TGAGAATATCTGTATCATTCCATATGATCCAAGCGCCTAGCTTTGCTCAAGTGTCAAGACTATTGATTAC TGAATACTAAATTCAAAGCCATTTTTCTTTTAATGGGCAGAGAGACACCAAATTTGCTAATGAGGGAAAT CAAACATAACAAGGGGTTATTGTGAGAGAGAACAGAGGATCTTATACAAGTTGAAAATCCGCAACCAAAT AATCATAATCTACTCTCGGTAAATGGAATGTCAATCCGCACTGACCATTTGCTCTCTCTTGCTCCTCTAC CTTGTTACAGGATGCCTCCTCCTGCGTTCCAAAGTTGAATGTGTGTATGTTATATCATCTCCTTTGTACT TATCATCTCACTCATATCTAATATTCGTTACCTCTTTGGTCGGATCCCATCTTCTTCGTAGTCCATCACT CCACTTGGTTCCCCAAACATCTCCTTATTCCCTCTGATGTCAACATCCCCCTGCCCACAACGTAAGTAAG ACTATATCGACCACCACCCTTCCCAATCATATTTCAGACACAAAAAACCAAACGAACCTTGTTTCATTTC ATTTAACAATCAGACAATAACCAAGTACTACCATTCCAAACAATTCATGTCCTCTAATGACTTTAACACT TCACTAACAGCCGTTGTGATTGCGTTCCTTGTTTGTTTTTAATTAAAGAAAACTTCATAATATATGTTTA CATCCAACATGTAAGATTTCTTGTTCCACGAAAGAACGGTTAAAAAAGCCCGCCACAGTTGGCTGATCGA TTCGTTTGTTATTAAGAAACATAACTTTTTAATCTATGATAGGACTGGACTTGGAAAGCTCAAAGACCTA GAAAGATTTTTTTATCAAGTCTCTCCCATCCCCGCTTACATAGACCTAAGCTATTAATAAGAAGAAACCC ACTACAATTCTCTGAAGAAATATAAGACAGAATAGCTGACTGGACTCTAACTCATGGTCACAAGACAGTA ACCAAGAAAGAATGTAACCAATATTAGTTACATAATATACTTAGTAGGGAAAAGTGAAGCCAATAGGACT CCAAGCGCGACTGACCTTCATGGACAGAGACTTCTTCACTTCTTCCACCCCTTCTTCTGCTTCCTTACGA TGTTTTTTGTCCATCTCACTCATATTGTCCGCCCATTTGATCTTGTCTTGAATTGAAATGAGCAGATTCT CTGACGTGTTCAACCTAGACATCAATTTGGGCCAACACATAAAAGAGTAGGACGTCATTAGCCATGTATT CTAACATCACGTACAAGTTCTTATAATTAGATATAGAAGGCAAAAAATCCTGGATCTAAGGGAAGAAGAA AACTACCAGTTGGACAATGTGTGTAACATATTCCCTAGTTGACCTGGCCTTAGATCCCTACCAGCTGCAA ACGGAACCTGCATGGTTGCAAGAGATATATGATGTTTAGAAGGGGGGGCTCGTACGTTTAGAAACAAAGC ACAATGGTTAAAATAGGAAAAGGAGGCCCAAACCAAAACACACCTCAAAACATCTTTTTAACTGATCCAG TTTTCCCCTAACTATACCCTGCAAAGTGTAAAAGAAAAAAAATGAGCACCATGCGTTGTCACAGTTAGTT GTCAAATAGAGATTAGAAGACTGCTAAAGAGTACTCACCGCATACATGCATTCATTGATAAGAAAGTCCT CGAGTTCGCGAACATTGGAAACATCTAACTCGACCATTAGTGTATCATAGGGCAATACCTATAACAAGCA GAGTGAGAGAGACATTCAGTTAGGCAAACAGCAGGGGAAAAAGATAATGGAACAGAGTAGATAGCAGGAG CAAATCATGAACCTAAGACAAATATACCTTGTTAGACTCAGCAAGGGTGAGGACAGTGAGCTGCTTAAGC TTAAGAATTTGGTCAGGGGACAAGTGCGGAAGACGGGTGGCATTGCCTAGTGTTTCGATGAAAGCAAGTC AAGAGGAGAGAATATGACAAAAGGGAAAACGAATTGAAATAGCATATGACAAAGGGGTCATACATTTGTA GTCTCCCCAGGTGCCATGGGCAAACAAGCGTAGTAGATCCAGGTACACAGAATCTGTGGTTCCTTCAAGC TGCACAATTACGATTAATCAGCTACTAGTATCTATCAAGTTGTTATGATCAGCGAAGAACAAAAGCATGT AAAACCCTAGATCGTGAAAAGCATAAAGTAGTAGTACCTGGGCAACATTGGGTAGAGCCAAAATCTCGGA GAAGGCGAAGAGAGAAGGATGCGATGTGGCTTCGATGATGAGCGGGCCCAGAGCCTCGGATTTGCAAGTA GAAGCTCGCTTCACGAGCTGATCAATGATCTCGGCTTGCTTCTGCTCGATATCCATCTTCCAAACAAATC GATTTCCGGTGGTTTAGGGTTTTCTTTCTTACCACACTAATAACGAATAAAATCCCAAACTTCTTCTCTC TGCTCCTTCCTTCTTCCGTTTTTATATTACTGTTTTTTTTATGTGACCGACCGAATTCTTCTAGAATCTT GTTTAATAATTGGGCTCAAATTTCGTAGTTTCTGGGCCAAGGCCTACTAAGAGAAATATTAGAAACCGCG TCTGGTGAGCCCAAACAATCCCGGGGAAGAGAGAGACTATTGAATATTCTTCTTCCTTCATTTTGGCTGA GAGAGCGACGACGATGGCGGAATCTCGCAGCAACAGAGCGGCGGTTCAGGCTACTAACGACGATGCATCC GCCAGTAAATTGTACGCCTACCTCTTTCTCTCTTCTTTAATTAGGGCTCTTCTTTTTTTTTTGTTGTTGT TGTGGATCTTTGAGCCTAGATAATATTTTTAAAGGTCTTGTGTCAAAAAGGGATATATGAAAGACGACTA TGTTCATCTCTTTGTGAAAAGACCTGTTCGAAGATCTCCCATCATTAATCGAGGTTACTTTTCCCGTTGG GCTGCCTTCCGAAAGCTTATGTCTCAGTTTCTTCTAAGCGGGACAAGTTCTAAGAAACAGATACTGTCTC TCGGAGCTGGCTTTGATACTACCTATTTTCAGTTGCTGGTGCGTCTTCTTTTTCTTCTCCTTTTTGTTAG CTTTTACCAAATTCACCATTCTTCGGCTTATTCCAGGGATCTCTCGCTTCTTCTCTTCTCATTTTGTAGG ATGAGGGGAATGGGCCCAATCTCTATGTGGAACTTGATTTTAAGGAGGTACTACTGGATGAGCGTGCTGA CAAAAGTATCCATCATGTGTTTTGAGTCTAATGCCTAAATGGATTTGCTTCTTACGTTAGGTGACTAGCA AGAAGGCTGCTGTTATACAAAACTCCAGCCAACTCAGGGACAAACTAGGAGCCAATGCATCTATTTCTAT TGGTAAGAGCCTTTTTTCCCCCCATGTATTATTATGTAGAATGATCCTTTTCATTATGATGCATTTCAGC TTGTGCACTCATATTTTTCTTCATTCCGCTTCTACTAGCTACTAACTCAACCACCCCCTTTTACTTTGTA CCGTTAGCGTCTAGTTTCAGTTGCTTACTCTTAACTCGTTGGGCTGTTTATCTCTACAGACGAAGGACAA GTTCTCAGTGATCATTACAAGTTACTTCCAGTTGACCTGCGCGATATACCAAAATTAAGAGATGTTATAT CCTTTGCAGATATGGATCTAAGGTATCCATGAATAATTTTTATTTATTTTACACACTGTTATCTTGAACC TTCAACCCTCTTCTTCTACCCGGGTTTAAGATATATGGTAACAGATACTTACTGGTGATAGACCTACTTG ATCCCTAATATCATTATCAGTCTGCCGACGTTTATTATTGCAGAATGTGTTTTGATTTATCTGGACCCCG ATTCAAGCCGTGCCATCGTCAATTGGTCGTCAAAAACGTTTTCAACTGCAGTATTTTTCTTATATGAGCA GGTTAGCTCAACTGTGATTTTCCTTGTCTGCATAATATTGCAGATACGAATCTTATTGCTTATGTGTCTA ACCCGTTGGGTTTCTGTTTGCAGATCCATCCAGATGATGCATTTGGGCATCAAATGATTAGAAATTTGGA GGTAAGAACGTGTACTCTACTACTCTAGTTACAGCGACATCTTCATTAGTAAAGCTTTTTTGAGATTTTT GTCAAAATATGGATACTAGTATGACACTAAAATATTCTAGTATTGCCACATGGGTTCATGTTGTACTGAT CAATTACCTTCATTTAAACTTGTTCTGAAAGCTTAACGGTGTTTCTGTTCTTCAGAGTCGGGGATGTGCA CTCTTAAGCATTGATGCATCACCAACTTTACTTGCAAAGGAGAGATTGTTTCTTGATAATGGATGGCAGG TTCGTTTTGCAGTTAGAATATTATGATTAAAGCAGGGCTAACTTTCATGTATAATTTCTGATATAAGGAC TCTCATTTCTTTACCCTCTTCTTTATTCTGGTGTTTCAGAGAGCTGTTGCCTGGGACATGCTAAAAGTGT ATGGTAGTTTTGTTGATACTCAAGAAAAACGCAGGTCAGTACTGTACGTTTTGTTAAAACTGTGTAAGGG CGTTATGTTATTCATACCTAGTATCTGGCTGAACTCTGTCAAGAAATATCTAAAAAATGCTGTTGCCCGT GACTTTTGAGCTTTCCAATGTTTTTTAGATGAACCTCTTACAGTCTTACTATATATATCCTGTTTTTTGT TTTTTCTTCTCTCTCACTCTCTCTCTCACTATCCTGTTTTGGCTCTCTTGTTTCTTCAATTCATGAGCTT TCATTAGAAAGCCTACTTCTCTTGGAATATATCTTAAATGAGAATGTCGTGTTTCTAGGATCGAGCGATT GGAGTTGTTTGACGAATTTGAAGAGTGGCACATGATGCAGGCAAGTCTGTCTATACCTCATTAACTAGAT GTTGCACCTCTATGTATGTATGGGAAAGCATAAAAAGACCAAAAGATGATTGGTGTTGAATATCAACGGT ATCCATTATATATTTTTGATGATGCATGCGTCAGATCTTGTTCTAGTGTGTAGGTAGTTGAGCATTATTT AACCGTTTATATTCAACAGGAACATTACTGTGTCACATATGCTGTCAATGATGCAATGGTACGTACATGA GTCTCTACAAGTCATTGTACTTTTTAGATTCTGGAATGTTTTTTTGATTAAAAAAATGCAGGGAATATTT GGTGATTTCGGTTTCACAAGAGAAGGGGGCGGTGAAAGAATGAGCTCATCAGCGTCATCACCTTGAAAAG GAGGAGGGTTTGTATTGCATTGAATCCCCGGAACTTGCAACTGGTACGTTAGTTAATACAGTTGGAGGAA AACCCCTGGTGGTGGGTAGAATCTGATAGTGCTTGGTTTACCTAATTTGTAAGGAATGATGATTGATTGC ACAAAGTTAGAAAGGCCTTTCTCTGGGTGCTGAGCAGAAAACGAAGGAAACACGAACTTGTCTGCGTTAT CTGTGCTTTTGATTTAGTTTAGGCTCATGGTCGAGATATGTGGGCCGGGCCTCCCCTTGTTTTATTTTTG GTTGTATTTTCTAATAATTGTGCAAAACAAAGAAACCTCACCTCGGTCAAGAAACGCTCTGAAATCTGAA CTCTGAAGGTTGTTTTTCTTCTTCTTTCGGTGGTGAAAAAATTATCTTTATGAAAAGACAAAAAAGTTTT TGAAAAAAGGAAATTTTTTTCAAAAAAACAGACTGAGAGAGAGAGAGAGAGAGTGTGTTGTTGGCCATGG GATGCACGGCCTCCAAGCTCGACAGTGAGGATGCTGTCCGTCGCTGCAAGGAGCGGCGCCGTCTTATGAA GGACGCCGTCTACGCTCGTCACCATCTCGCCGCCGCTCACTCTGACTACTGCCGCTCCCTTCGTCTCACT GGCTCTGCCCTCTCCTCCTTCGCCGCCGGCGAGCCCCTCTCCGTCTCCGAGAATACTCCCGCTGTTTTTC TCCGCCCTTCCTCCAGTCAGGACGCGCCACGTGTCCCTTCTTCCCATTCCCCAGAACCCCCTCCTCCGCC CATCCGCAGCAAGCCTAAGCCTACTAGGCCTAGGAGGCTTCCACACATTCTCTCCGACTCCTCTCCTTCT TCCTCTCCTGCCACCAGTTTCTATCCCACTGCTCACCAGAACTCTACTTACTCTCGCTCTCCATCTCAAG CTTCCTCTGTCTGGAACTGGGAGAATTTCTACCCTCCCTCTCCCCCCGACTCCGAGTACTTCGAACGCAA AGCTCGCCAGAACCACAAGCACCGTCCTCCTTCCGACTACGACGCCGAAACTGAAAGATCCGACCACGAT TACTGCCACTCACGGAGAGATGCCGCCGAGGAAGTTCACTGCAGCGAGTGGGGCGACGACCACGACCGTT TCACTGCCACCTCTTCGTCCGACGGAGATGGGGAGGTCGAAACTCACGTTTCCAGATCCGGTATTGAAGA AGAGCCTGTGAAACAACCACATCAAGACCCAAATGGCAAAGAGCACTCTGACCATGTTACCACTTCTTCC GACTGCTACAAGACCAAATTGGTGGTAAGGCACAAGAATTTGAAGGAGATCCTTGACGCCGTTCAAGACT ACTTCGACAAGGCTGCCTCCGCTGGGGACCAGGTCTCCGCCATGCTTGAGATCGGCCGGGCTGAGCTCGA CCGCAGCTTCAGCAAGCTGAGGAGTAAGTCTCACACTCTACTAACTAGATGTAGATGATGATGCATTGAA ACCCATCTCATTCTCTTACTCTCTCTATATTTGTTGTCTGCAGAGACGGTGTATCATTCAAGCAGTGTGT TCAGCAACTTGAGCGCAAGCTGGACCTCAAAACCCCCATTGGCAGTCAAATACAAGCTCGATGCATCTAC CCTGAATGATGAACAAGGCGGCCTCAAGAGCCTCTGCTCCACTCTAGACCGACTCCTCGCTTGGGAAAAG AAGCTTTATGAGGATGTCAAGGTACATTCCCTGTTTTTGTTTTCGGTTTTCGGCTTACCAACGGTTACGA AATAAACTTGTGAATTCGAATTTAGGCAAGAGAAGGAGTTAAGATTGAGCACGAGAAGAAGCTGTCTGCG CTGCAGAGTCAGGAGTATAAGGGAGGTGATGAATCCAAGCTAGACAAGACTAAAACTTCCATAACCAGAC TGCAATCACTCATCATTGTTTCTTCAGAAGCTGTTTTAACCACGTCTAATGCCATTCTCCGCCTCCGGGA CACTGACCTTGTCCCTCAGCTTGTTGAACTCTGCCACGGGTCAGTCTTTTTTTTGTAGTTGTGTTTGTGT TTCATTGTTCCTTGAGGGCTGCTGGTTCGGTCTAGGCTTGTTTATATGCTTCTGCAAACTCATGTGAACC CGAATTAGGCATATGTAATACCAAACCCATTGCTGTTCTGCCAGTGGGGGATTTTATAGGTAAGTTCGAA ATAAAAGTAGGGAGGATTTGTATGTGTCTCTAACCACCTTGAAATGCAGATTAATGTACATGTGGAAGTC AATGCACGAGTATCACGAAATCCAGAACAACATCGTGCAACAAGTCCGTGGCCTGATCAACCAAACAGAG AGAGGTGAGTCAACATCAGAGGTACACCGGCAGGTGACGCGGGACCTAGAGTCAGCTGTGTCCTTGTGGC ATTCGAGCTTCTGTCGCATCATTAAATTCCAGAGGGAGTTCATATGCTCTCTCCACGCATGGTTCAAGCT GAGCCTGGTTCCCCTGAGCAACGGAGACCCAAAGAAACAGCGGCCAGACTCATTTGCCTTGTGCGAGGAG TGGAAGCAGAGCCTGGAACGGGTGCCTGACACAGTGGCGTCAGAAGCCATAAAGAGCTTTGTAAACGTGG TACATGTGATATCAATAAAGCAGGCGGAAGAGGTGAAGATGAAGAAACGCACGGAGAGTGCAGGAAAGGA GCTGGAGAAGAAAGCATCCTCACTGAGGAGCATAGAGAGGAAGTACTACCAGGCATACTCGACGGTTGGG ATAGGCCCTGGACCGGAGGTGTTGGACTCACGGGACCCGCTATCTGAGAAGAAATGTGAGCTGGCGGCAT GTCAGAGGCAGGTGGAGGATGAGGTAATGAGGCACGTGAAGGCTGTGGAGGTGACACGAGCTATGACTCT CAACAATCTACAAACCGGCCTGCCCAATGTATTCCAGGCCTTGACCAGCTTCTCATCTCTCTTCACTGAA TCTCTCCAGACTGTCTGTTCTCGTTCCTACTCCATCAACTGATTATGTCCAAGTTTCTCATTTATTTTTA AGCTCTCATTACGTTGGTATCATGTAAATTTGAGGATTGATTAAATTGAGTCTTGTGGTTTTGTGAGGAC TCACAATCTTTCTCATTTAATACATGAGCAGACACGGCACCTAACTAATGGCCCAAAGGTGGCCCGCCAA ATTGAATACAAGGGTAAGAAATGGGCCAAGAAAGTGAGAGCCCAAAAGAGGCCGATCGTTCGTTTTTGAC TCAATGGCCGTTGACGTTGACATCGTACGCCGCACCCAACGACCGCCAAACAGCAAACAACAACACTTTC CCCTTTCTCTCTCTAAACATGGCGATGCTTTCTACTGCTTCCGTTTCGGGGAGCGTCGACCTTCCTCGAG GAACCATGAAGGTTGACTCGTCTGCGTCTCCGGAGGTCGTATCCGATCTCCCACCATCTTCCCCAAAGGG CTCACCTGATCGCCATGACCCTTCCACTTCTTCTCCGAGCCCCAGTCGTGGTGGTGACAATCAGGTATCT GATGAATTCTCTCTGCTTCGATCTATTCGTTTCCTTGGTTTATGACCTGGATTTCTTCTTACTTATTCTC CTCTAGTCTGAAGTCATATCCAAGAGTGAAGAGTATCGGCAATTGTTTCGGCTTCCAGCTGACGAAGTAA GTATTGCCTCTCTCGTCTTGAAATTCCATCAATGAGAGAAGTACTGACTCCACCATTGCTTCCGAATTGT GTAGATCCTTGTTCAAGATTTTAACTGTGCTTGTCAGGAGAGTATTCTTATGCAGGTTAGGTACTTTTAT CTTTCTCTCTTTGCGAATACTTACCTTATCTTTTAATCATCTTTACTTTTTGTTGCAGGGTCATATGTAC CTCTTCATCCATTATATCTGCTTTTACTCCAACATCTTTGGTTATGAGACCAAGGTGCCGCCATTGTTGC TCTCCTCCACTCACTTTTGTTTCTTCCCTTTTTCCTCTTCAATATTGATCGGAACTCTCTTTGCAGAAAA TTATCCCATTTGCTGAAATATCTTGTGTTAAACGAGCCAAGACTGCTGGTATTTTTCCTAATGCCATTGA GATTTTAGCTGGAGGGAAGAAGGTACCACTAGTTCCCTCTTTACTCGATATTGGTTGGTGCGTCTGTCCT GATCTTTGAACCGCATTCTCTCCCAGTACTTTTTTGCATCGTTTCTTTCCCGCGATGAAGCTTTCAAGCT TATCCATGATGGATGGTTGGAATATGGTAGTGCTGTCAAATCAGAAGGCGAGATTCTGGTGACCGAACCG CAGGTGGGTGCAACACACACTCTTATTTTACTGCTTAATCCTTGTTTCCTTATCTGAGTCCAAAATCCAG GTAAGCGATGGAGTTGTTAAAAGGGCACGCAGTTCCATGGATTTGGCCAATGAACTAGATATTCCAGTAA GGTGCGTTTATCTCTTCCATATGGTGTTCCATCTTTCTGTTTCTTACTGCTTTATCGCTCACTATACTTC CTTCTCAGGGATGAAACTCTTCATCTTTCCAGCAGTTCCAGTCTTCCTGTCATTAGTCAGAATGGCGTTC CACCTTCATCCGTTCAGCGGCACGCTGAACCAGATGTAGATGTTGTGGCGGCCAATACTTTCAACTGGAA GCCTGAAGATACAGATGCACCTAAATGTAGTTAAACTCCTTCCTCGCTTTTACCTTAGTTCTTTTTGGTT GGTTTGGGTAGTGTGGTAGATTATCTTTTTCAAGTCAACTGTTTAAGGATGTGAATGCTAGTGTTTTCAG TAAATTCAACGGGTTTTTTTTTTTTTGCTGGGGTCAGGTCAACCTGTTGGTAAAGAGTATTAAAAATGCA GACGCTTGGGTTTCTCCTAACTCCTTTAAAGTTCCTTTAAAGTGGACAATCAGTTAACTTCTTACTGTTT CTAGGTATATGTCATTATGTGTCTATCTTTTAGCTTGTTTTCTTTGCAATATAAATTGTTTGAAATTTAA ATGGTCAATGGGAAACGGTCTCTTAATGGTTTTGCTAAATAAGGCCTATCAGGATGGGGTAGCTTAGCTT TATGATCTTGTCTTTTGGTGCTACTTCACAAGTTGCACTAGTTCTCAGTTTGTCCCAACGAGCTTGCACT CAGTATGGAGATCCTATATTACTGAACCGGTTATTTCGTTTTTGCATACATGATCTCTCATCTATTTCTT TTGGTTATCGTGATCTCTTTTCTTGTTCTCATTTGTATTCACCACACAAATTTGTGTTCCTTGCACGCAG TGTCATCTGACTTTACAAAGGTAGCAGAGGCAAAGTTTTCGGTAATGTCTCGTTCTTTGTCTTATCAGCT AGAGGAAATTATGGAACCATTCTCATTCAAATTTATGAGAATATAAGCATTGACTGGATGCAGAAGTTTC ATATACCTAAATAGACTTTAGTTTATATTTGCAGATTCCAGTAGAAGAGTTCTTTAGATTGTTTTTTTCA GATGGTGCTGTCAGTTTTGTTGAATCTTTCCATAAAAATTGTGGAGACAAAGGTAAAGCTATAAGTGATG GAATCATTTTGCTCCTGTGTTTAGCTGTTTTCTCTCTCTTTCTCGGTGTTCTTTTAACCAGAAGAGATAT TTGTACTTGCAGAGTTTAGGTGTACCTCTTGGCAACCTCATGAAAAGCTTGGACACACCCGCAATGTCTC ATTTCAACATCCGATAAAAATTTATTTTGGTAATATTTTTTCTTTCCTATAGATAAACAGTACTAGATTA CGGTTTATATCAAATATATATTTTTTTGGTGTAATTATATAAAATAGATTACGGTTTATATCAAATATAT GTATGCATGACTCTGGCTTTCGTTTAAAGGTGCAAAGTTTGGTGGCTGCCAGGAGTCACAGAAATTTCGG ATGTACAGAAATAGGTACAGAAATTTTGTAATGTTTTTTGGTTTTATTCTATATCGTCAAAGCAAAGCTA GTCTGAACTCATGCATGCTTATCCTCTGTTAGCTAATATTGTAATTTCCTATGCTAGCCATCTGGTTATT GAAACATCACAGGAGATCAGCGATGTGCCTTATGCAGATTATTTTACGGTAGAGGTAGGGGAAATTTACA TCAAATGCTATCAATATTTTGTTGTTTGATGTGTGTTACATGTGAAAAATTTTACCTTTGGCTGATCCCA GGGAGTCTGGGACTTGAAAAGAGATTGCAGAGACTCGGTAGAAGGTTGTATATTGGATGTTTATGTCAAT GTGGCCTTCTCTAAAAGAACAGTGTGGAAAGGTTTGTTAAGCCTAATTTACTCTTCTTTATCCTTGATTT TTTTCACTCTTGCCTCCTATCAATGAAGAAATTTCAATTAATAGTTCAAGAGTGTTTGCTGCGGATTCTC GTTCTTATAGATTTGGAAATCTTTCAGCTTTGTTGAATTTGATGGTTCTTGAATCTGGCTTGACGTCTAT GAATTTTTACAGGGAAAATAGTGCAGTCTACTTTAGAAGAATGTAGAGAAGCTTATGCACATTGGATAAG AATGGTACTTGATCAGGGGCCATTGGGTCAACATTTTTTTTTTTTTAGTTTCTGCAGGAATTTAAACAAG TTTATATATATTTTTCTTCATTATTATCTTTGGAGGCACATGAACTGTTGAAGCAGAAGAAGCTGGAGAA CCAAGAAGGTTAGTGTTGTAGACTGATGATTAACAGAAGCTTTTCCCCGAAGAAAGCTGGCTGACACCAT ATTCTACAGGGAATAAGTTGATTGAGGATGGTGAACCGCTAGCAGCAAGGGAAGAAAGAGTATCTGAATG TGACGAGGAGGGGAAGGTGGAAATGGTGGGCGAAGGGGTAGTTAAAAAAAGCTTAAAGGAAGCATGGGTG AATCTGACTTCATTTGTGAAGAGGCAAAGCGGGACAAGGCAGGTTATAGTATTAGCGTTTGCAGTAATCT TACTGATGCAGGTATGTGTATTTTGGATAAATTGGTAGTGAAAGAGAGAGAGAGGGAGATAGAGAAAAAA AAAAGCTAACAATAGGTGGAAGTGTGGACAGGTGACGATAGTGGTGCTACTGAAAAAAGGAGGAGGGGGG CAAGTGGAGTATCATGAGAGGTACGACGAGTACAGTGTAAACGGGGAGACTTTGGGGTGGTTAGAGAAGA GAATGCATTTCCTGAGGGAAGAGATGATGATGGTTGAGGATCGTTTGCAGAGGATGCGACAAGACCATGC CGCCTTGAAGGCTCAGTTCCACCATTTGGAACGCCTCCTCCGCCGCAACAAACAGTAAATTTGCTACACC CTACTCTCTGTTTGTGCAGAATGCGGATGGATATATGCATGTATGTATGTAATGTATTATCGGACGTTAC TTTGCAAAGTTGTTGTTATACCTACCTACTCATATGAATATGAGCAGAGACTCTGTTAAACGAAATGATG TAATCAATTGTATTCGTGTTGCACCTGTATCAAAGATTAAATTCACACTGGTGACTCCACTTTCTCGCTA TTGGATTCTCTCAATGTCTCAATCAAACAAACAAAAGTTGATTCTAATTTAAATTCCCGAGACGATTATC TTTGTTTTCAATGATGATCACGTTTGATATAGGAAAAAACAATTTGTGGGTTTTAAATCGAGTCGTAGAA CATTGTTATGCAAAGAAACCCATAGAAAACCACTAAAGGCAGAAATGAAAAACAAGAATGTTGGAAAGAT GAGGACCTCATCATGAGGTAAAGCAAATAGGAAACGTGAAAAACAGAATAATAACCAACCAAAGGAGCTT AATTACAGACAAGACAGATTTGGGGGGATGTTGTGTAAAAACCAAGTAGTAGTGAATTGGAGCCTAGTCA AAAGAAGGAACACGTGTTCTAAGATTGGAAAGGATATTGCTAGGCTGGTCACGTCAATCAAGTTGAGCAG CAGCCGTTCTTCTGTGCCACAGGCTGTCCTCTGATCTGCACGGTCGGTGGTCTTGCATTATTCCCAGCTG GTTGGCTAGCCATTCTGCATCCAAACCACAGAGATCAATTTCTCTCATATATCACACGAACGCACACTCT CTGCAAATTGATTAAGTACAACTACTTGAATTTTCAATTTGAACACTGCAAGGTCAACATCAGTCATTTA TTTATTTCACTCCAAGGTCACTTACACAGTGACACTTTCTGAGATCTATATAAACACTTACAAAAATGAG ATTATGGCTTCGCAAAAGTTCCATCAGGTATGATGAGTATATTAACCGCAGTTACTTAAAAAGAACGATG TAAGATAAATACCTCTCTTTGATGGATGCAGACATTGCCATGAAAGCCTGTTCTACGTTTGTAGCATCTT TTGCACTAGTCTCCATAAAAGGAATCCCGATTTCATCGGCAAAAGCCTATGAATGTTTCGAAGTAATCAG GAAAGTAATAATAGCCTTAGAGTTTGATGATTTTCAAAACTTGAGAAGAAAGAATTGGTTCAAGTGGCAT ATATATACCTTGGCAGTTTCATAAGGAATGGCTCTGTTTTCAGTAAGATCAGACTTGTTTCCAACAAGGA GTTTGTTGACATTGTCACTAGCATAACGATCAATTTCACTCAACCATTGCTTGACATTATTGAAGCTTTC TTCATCTGTGACATCGTAGACAATCTACCAGGTGCAAGAACTAAATTAGGACATAAACTTAAAGGAGTCA ACAGAAAGAACCTAGATAAGATGTTGCTTACAATAATTCCATGTGCCCCACGGTAGTAACTGCTAGTAAT AGTCCTGAACCGTTCTTGACCAGCAGTGTCCCACTGAAAATAAGTGAAGAGGGAAAAATATGAATTAAGG GAAAGAGACGTAGAGCTATTAACTTGACAAGTGTGAAAATAGTTACATACAATTTGGAGCTTAATTGTTT TGCCATCTTGTTCCACAGTCCTAATTTTCTGAACAAGAGATATATAAGAAAAAAAAAAAGGTCAGATCAA AGCATCGTCATCAGTAGCAAGAAGAAAAAAAAGAAAACATCAACTTACAAAATCGACTCCAATAGTGCTA ATGTAACTTTCTACATAAGAATCATCCTGCAGCAGAACAACAAACATGAACAAATGTAGAAAGCTACAGT GTTTGATCTCTGAGAAAGAAAAAGACAAAAAAAAAAACTTACAGAGAATCTCAAAAGAAGACAAGACTTG CCTACGCCAGAATCCCCGATAAGCAGGAGCTTGAAAAGATAGTCGCTGCAAATCCCAAAACGCTAATTAA ACCCTAGGAACCACCCGGAGAATCAAATATATAACAGAGGTAATTTCGACCCAAGTATGTGTCGATGGAG AAAGGAACTTACTACTCAGGATTCATGGTTTTCGATCTGTGGGAGGAAGAGCAGCGAGCGATACAGAGCC AGAGATCTCTCTCTCTCTTTTCTGATTTTCTCTCGCGATTTACAAGAGGAGGAGATTCAGTGTTTGGGCC TTGAATAATAATATGAGCGAAGGCCCAATAATGCAAAAGATTAAAATTCATTCTTCTTTCACAAGTTTAG GGTTCCTACGATCCACTCAGCAACGAAAATGGATCAAGCCCGACAGAGTCCAGAGGAGCGGAGGCCCAAT AACGCCAAGATTAAAATTCATTCTTCTTTCACAAGTTTAGGGTTGTAAATTGGCCCTTCCTACGATCCAC TCAGCAATTGGAGATTGTTTTGTGGTTCCCAGATGTTGGATCTATACTAGTCTTCTTGATTCATTTTTCC AATTGTTGCTTGCTTTTTGATTGACATCTATATTTTAAGTTGGGAGATATACTCTAACTCTTTCTGGAGG AGGAGGTTAAAACAAGGTAAGGCTTGGACTCGGGTCCCATCTTCCAGTAGAAGCTCTCTCTCCAGTTGAT GCCTTGTCGATTTCAGCACCGTCTGCCAAACAAACACAAATTTACTTACACTCAGTCTCTGAAGACTGAG TTGATCTCTTAAAGTCAAAGCTATATGGAGGAGAAAGGCTACGTTAAAATCCATGTAAAAAAAAAAAAAA AAAAATCCATGTAGGAATCCCGCATTGTGAGCCACTTATCATCCATCACCTTGAACGCAATGCAATATCG AATATCAAATGCGGACTCGTTTTCTAACAATAAATTATACACCATCCAATTGTCAATATATATGGCTTCG CGTTTATCTCTCTTAACCCAAAGCTGCTGTAACTAACTAACTAACCAGCTACTAATGTTTCCCCGACCAT CTTAAAAGGTAACTAACTAACTAGCTGATGCTAGTTGGTGCCTGAGCAGGGGTGAGATCAAAGGAATAAC GAGAGTGGTGATCCCTTTTCTGTGCACAAACACAAGCCAGTCCCCGCCCTAACCATGCACCTGATCCTGC CACAAGATGAAATATGCATGTGACTCTCTGCAACACACTACAACAAGGTAAAGGAGACTAGTGCGTGCTT AACCTGAGGATGAATGGCAGGTGCGTCCTCTGTCTAGGCTGTGAGTAATCCGCCTGACACTGACAAATGA ATCCTCCATTGTTCTTCCCGATTCATAAAAAGCTACTCTTGATATCTTCAATGCAAAACCAGATTTACGG GTTTTGGAGGAGCAGTTTGAATGGTCCGAGGGCGTTTTTTTAGAATGGAAACAATCCTAATTATCGACTA ATCCAGCTAGTTTTTGATACTTTGTATTTTAGATAGATCACATTCCTTAGTTTAAATTGGCTTGAGGGAA AAGAAACATGCATCATATGTAGATGTACATTAGGGAGAGTGAATGATTTGTGATAAGAAAACAGCAAGTA TATGGTTTTTAGAAGATAGGTTGTGGTTCATGAAAGGTTCTTCACATGGGATGTTGACACAAAAAAGGAC CAAAAGTTGAGGTAGAACATCTTACATACCCACTTTCACCCAAATCCAACAAAAAAAAAAAACAGAGAAC CAGAGACATAAAAACAACCAAACTTCAGTCACAAAGTCCTCATGTTCCCAACAAATTCATCGCGTCTTGA CATGTCACAAACTGATTTTCTTCTCTAGATAGGCTTGATTTTGAAGTGCAGAGAGATGAGCGAAAAAACA AGACATTTCAAGTCCTGCAACCATGAAAGTTTCAAAAGGAATATGTTAGAGCACAAATAAATACAGAAAC TAAAAAAAAAAAAACTACAGAACCATGTAAGGGATGAGTGTTAACAGCCAAACCCTAAATGTTAAAGTTT GAGACAGTGAATACGTTAAAAGGCAGAGTCCTAAATATATAATCGAGTCCAATAGAGTTAAGGGATTAGG TAAAAGAAAAGATGGTAAGGCAAGGGGTGGAAGAAAAAGAGAGGAGACCTGAACAAGATAGTAGAAGATG CGAAGTCCTTCAGGATCATTACTGCTCTGGCAATCAACAAGAGATCCAATCTTAGATGTAGCGAATGAGA TATGCTCATTACCCAAGACGATCTCGAGCTCTTGCTTTCCAACACGGTCAGGTTCCGGCCAATTGTTATC GTCTTCTTTCAGAATCTACCCGCAGACAAATAATCACATGTCAGGTTGTACAAAATCATCCATTATTCCT AGATAATAGCATTAACAACGAAGAGGGTTCTAAACCTACAACACTAGTCAGGAAAGATGCCCTAGATCGA CAAAAATCGAAGCAAAATCACTAAAACCCTAATTGGCTATTATAGCGTCGATTGACCAAAACGCGGACAA TTAACAAGAGAGAAGCAAATCGGAAGAGAGAGAGAAAAAGGACCTCGCTCTCGGAGACGATACGCTTGCA TTCCTTGAGCACGGCGGGGGTGAGAAATACCTCCTTGCGGATAATAGTATCGTTCTTGTAGTTAGAGTTA TTGGCGTAACGGAGCTTACCGTCCTCTCTAAACTCGAACTCCAGGAACTCGTGTCCAAATTTCCCTTTGT GACCGACATAGTATCTCAGGTAGAACTCCGTCGCTTCTTCCGCGGCCATGCCTTCTCTTTTTTTCTTTCT TTCTCGAGATCGAGATTACCTCTCCGTGTCCTTTGCCCTTCTTTAAGTCCGTCCCCGCAAAAGAAAAAAG GTAATGGGCTTACATATTGGGCCAGAACCCATTTGTAACCCGAAAAGTTAAGGCCCAGTTTTAGTTTTTC TGTTTCCATCGAAATTGTGTGTGTATCCGGGCTGCCTGATTTCCGATTCCCCGATACAGAGACGATGCCG ACGGATTCGAAAATGGCCAAGTTTCTTCAATCCTATGGTAATTTCTTCGTTTCGTCTTCTTAGGCGGCCA GATGATCTCTTTTTCTTTTTTTATATAACTGAAACTTTCGATTGGTGGGAGCAGGATATGATTTGATTCT GGGATCTGTAGCTGCAATCTATGTGGTCATGGCACCATATACTAAGGTGGAAGAGAGCTTCAACGTTCAG GTAGGTTTTCAAAGTATTTAGAGTCACACTCTTTCTCCGTTTTACTGAAACCGTTTCACTCGTCTCAAGT CAATGCACGACATTCTTTACCATCGCCATCATTTGGACTCTGTGAGTGACCTCTCTTTTTACTTCTTCTC TGAAGCTTTACTCTTTTTTTTTTTATCTCTAGAGTGATGTCAATTTTTACCGACTTCTGTCTTTTTATTT TTTTCCTATCAGTATGATCATTTGGAGTTCCCCGGTGTTGTCCCTCGAACTTTTATTGGTAAGGAGGGCT GTTGAATTTCGCTCTCTGTTTTTGCATCACCTGTTGATGGTTTTTTTTTTATCATTATACATTAGTGGAT GGTTTTTTTTTTATTCCACTCTGATTTGTTCTTGCAGGAGCCTTCATAGTCTCTGTTTTTGCATCACCTG TTGTATCAATTATCAGCTGCCTTGGCTTCCCCAAGGTTTATAGCCTTGTTGCAGGTTTCTCTTCTGTTTC TCCCTCCCTATATAATTCCTTAATGAATCGCTAACTATTTTCCCCTAAACACAGACAAAACCAATTCACA TCATAGTTTTATCATTTTGTCTTGCAGCTCGTTTGGTGTTGGGCTGCATCATATTGTCCACACTAAGATT TTTCCGGATTCAGGTATGAAGTTCCTTTAGTGCTTCTTTCCATACCACACTTCTGACTCCCCTATCTGAT TCTTTGTCCCTTCCCATGTCCTTGGAATTGGGATCTCTTACATGCATCTTGTTGGCTGTTTTTCTCCTAT ATACTGCCACTGACCAAAATCTACTGGTTTGTCAGATAAAAAAAAAGTTTGGAAATCAAGTGGAAACTTT CTTTGTACTTTTCACCAGTCTTCAGTTTCATTTTCTTTTCTACTGCACTCGTCCTCTTCCTAATATTCTA GCTTTGGGATTAGGTAATTACTTCTATTCATCTTACTCTACTAGTAGTGGTCCTTCAGATGTCCTAGCAA TCTTTCCCATGACCCATCTAGCGTAGGCCTTACTAGGTTCTGCTTATGTTTTTAAATTTTGATTTTGCAG TCAATCTGGCATATGGTAATTGGTTAAAGGGAAATTTTTATCCAGCTTTGAGTTTCCTGGTATGTATTAT CTTTGTGGTGACATATTTTCTCGATTATAGATTTAGAAAATCGGTCATGCTATCCAGAACTATGGGGTTT GCTGACATCTCTGTTATCCGATAATCAGATTTTTGCCACTGTAATCTTCAGATGCGATACGATGTTACTG CTTGGGCCTATTGGTCTTGAACTTTTATTGGTGAGCTGGTGACGAATATTAAATAGTTTGGGTTCTCAAC TTCTGTATATGTATAATTGGCCGTATACTTTACCGTTCCATCTGATGCGGGTGCTTTATGTTTGTCAATG ACAGACCAAATCGATCTCCTTCTGGAAAGCACTTAAGTATTGTGTTGGAACCGCTCTGTTGGCCGTAGGT TGGTTAAAATTCCTCTTCTTTCTGTGATCTATTTTGCTTTTTCCCTTCAGACACTAATTCCCGAGTCTAT TTTCTGTGGTCATGGAATAATCCTTAGCACAGGTCTTACCATTTTCGTTGACTCTATCATGTGGAAGAAG TTTGTCTGGCCAGAATTTGAAGTTTTCTGGTTTAACTCCATTCTAAACCGGAGTTCTGATTGGGGTGTAT CCTTCAAAAAAATTGTTTCCTCAATTGATTTATTTTTCATATGATGCATAATGTTCTAGCATTTTTCTAC TGCCTGATTAAAGGATTGCGTTCTGTACAATGATAACCGTTTGGAATTTCCAATTCAAAGTTTAATATTG TGGCACTTGCATTTGTATGAAATGATGTGTTGTCCTTGAAAATTAGTTGCTAAACTAGACACATTCCATA CATTGGTACTTCACCTCAGCACTCCCACGGTCTTTACTTGTAGCTTATCCACTTTCATTGGTAAATACCA GACTTCCTAACATCTGTGATAGTGTTTGTCTTGTTCCTTTCTAGTTAGGATCGCTAATTGTATCTCTACA AATTTTCTTATTTGGTTTCTTTTTATGCAGCTTGGTACTTTAGTTGACAGAAGGGTTCCATTCTTTATAG TTCCAGTTTTATCGTTCGTTATACTATACTCTAAACTTCCACACAAGGTATTCAGATGGATTACTTATCT CAGTAGCCATCAACGTTTCTTAACCATTTTCTGACATCGGCTTACCTATCTTTCTTGATTTATGAAGGAA CTCCGATTTATCATTAGTTCAGTGCCAATGTTCAACTTGTCTGCTGCAGTTGCTGCTAGCAGAATGTATG AGTTCTATCAGATGTTTGCTAGCTAAGCTTTCAATCATAGCTAGGACGTTCTTTGATTCTGTATCTTAAG AGCTCTTTGGAGTTTGGATACACATAATTTCTGTATGCCACTTTAAATTACTACCAATGCGGGCCGACCT CTTAATATAATCCGATTTTGTTGTACAGCTACAATAATAGGAAGAAAACGATTTGGAAACTGGTGAATAT GGTTATGCTAGCGTTTTTTGCAATCAGGTAGAAATAGTAAACAATTATCTTTGCTATGTAAGAGAAGGAA AGAGATTTGCTAGTCTACTAAACCTGGTTCTATAGTGCAGGGTGCACGGTTGTAACATTCATGGCATCTT ACTACAATTATCCTAGCGGCTATGCTTTAAAGCGCTTGCATCAGATTGGTGAGTGACTTATTCTGTTATT GGGGTTTGTTATTAATGCAGCAGCATTGACTTGGCTATCAAACAAGAAACATCTGCTGGTCAGCGTTTGT TTTGTGGTGTCTATCTACCTCTGGTTGATAATTTGCCTACAATATGATTAATTGACTTGGTGCCTTCCAT GGTTCTCAGGCCATCCTGCAAATGTAGCTGGGGAAGAGTGGGTTCACATAGACACTTTTGGTGCGATGAA TGGAATATCTCGCTTTTGTGAAGATGATTTTCCGTGGAGGTATGTTAGCTGTACTACCTCGTTTTAGGGT TGGTAAAAGTAAAGGAAATATCAATGTACATGGAAAAAAGTTGCCACTCGGAAGCACCCATTTGTGCGAG ATGAGGCATCTGTTTGTTTTTCATGTTCATTTTCTTGGATACGAATATCACTTTGTTGGAAAAGGGATCA TTCTACATTGCCTTTGAATACATAGAAGAGGTATCTGTTTATCTATTTAGGAGGATATAAAATTTTGTTG TGCAATGCAGATATTCCAAAGAAGAAGAGATAGTAGTGGAGGAGTTGCGAAACCGAAATTTCACGTACCT GGTGAAGTGAGTATTTCATCATATAGTAGAAAGCAATTCATAGTAAATAAAAAAAGATACCACTGGTGGT CAACATGTAACACTGTTGTCATGCTTGGTGCAGCGAGCATTCCTCTGTAGATGGATACAAGTGCTTATTT TATGAAGAAGGCTTTGAGAGACTTGAGCTGCGGCGAGGTTTCCCTCCCATTGTCTTGGTAAATCGGTGGG CGTGGGGCTAGTATTTCATCAAAATAGGTGCATGGAATGTAATGTAATGTAATGTTGAATTGCAGGTAAA AAAAGCCAAAGTATACTTGCACCGGGAGATGAAGAAGGAAGATCCTTTTCATAAGAAATGGCCTGGATGT TAGGTAATCCTACAAATAGAGACAATGTTTTGGGTCGATGTAATGTAGCATTCCTCAGAGAGGACATGAT GTAATGTAACAACGGAGATGCTTGTTACTGACTTACTGTAATGGATTCAACAAATTCATCCAGAAGCATC ATCGGCCTTTGGGCTTTGAGTTACGCGTCACAATTGAATCAATTGGTCCTTTTAATTAGTTTTACCAATA TACCCCTCCGTCTTTTCCCCCTTCTCGTTTAGGAAAAAAAATCATTAGCTTCGACTTATCCGAAACCTAA CGAGTAACGACGAGAGATGCTTCTTCAGGCGGCGGTGCAGAACCGCAATGTTCCACTGGCTTCTTCCGCC TCCTACTCTCGTCTCCTTCGCTGCAGATCTCCTGTCGTCTCCGTAGCTGCTCTCTCGAAGAAGACGGCAG CAATCGTGTGCTCCATCTCCCAGGTTTATGGCTACGGCACGGTGGACTACGAGAGAAGGCCGATTGTCCA GTGGAATGCCATCTACAAGAAGATTTCGCTGATGGAGAAGCCAGAGCTTGGCGCTGCTTCCGTCTTGAAT CAGTGGGAGAAAGCCGGCCGCAAGCTTACCAAGTGGGAGCTCTGTCGGGTCGTCAAGGAGCTTCGCAAGT ACAAGCGTGCCAACCAAGCTCTCGAGGTCCGTGTCCTCCTTGTATTTGCCCTCGCTTTATTTTGTATCTT TAACACTACTTACTTGATCGCGTATCGTTTTCATAGGTGTACGACTGGATGAACAACAGAGGCGAAAGGT TTCGGTTGTCTGCAAGTGATGCTGCAATCCAGCTCGACTTAATCGGCAAAGTGCGTGGCATTCCAGACGC CGAAGAGTTCTTCCTCCAGCTCCCTGAGAATTTTAAGGACCGGAGAGTTTATGGTTCCCTCCTCAATGCC TATGTGAGGGCCAAGTCGAGAGAAAAGGCTGAAGCCCTGCTCAACACCATGAGGGACAAAGGTTACGCCC TGCACCCGCTTCCCTTCAACGTCATGATGACTCTCTACATGAACCTCAGGGAGTATGACAAAGTCGACGC TATGGTCTTCGAGATGAAGCAGAAAGATATACGTCTCGACATTTACTCCTACAACATCTGGCTCTCCTCT TGCGGCTCCTTAGGATCAGTTGAGAAAATGGAACTAGTGTATCAGCAGATGAAATCGGATGTTTCCATTT ATCCCAACTGGACCACGTTTAGCACAATGGCCACAATGTACATAAAGATGGGTGAAACTGAGAAAGCCGA AGATGCACTGAGGAAGGTTGAAGCAAGGATTACTGGTCGTAATCGCATTCCGTATCACTACCTCTTGAGT TTGTATGGCAGCCTTGGTAACAAGAAAGAGCTGTACCGAGTCTGGCACGTCTACAAATCTGTTGTCCCGA GCATTCCCAATTTGGGTTACCATGCCTTGGTCTCGTCGCTGGTGAGGATGGGAGACATTGAAGGGGCCGA GAAGGTATATGAGGAATGGCTTCCAGTCAAGTCTTCTTATGACCCCAGGATACCAAATCTTCTGATGAAT GCGTATGTCAAAAACGACCAACTAGAGACAGCTGAGGGGTTGTTCGACCACATGGTTGAAATGGGAGGAA AACCAAGTTCAAGTACGTGGGAGATTCTAGCTGTTGGTCATACCAGAAAGAGGTGTATTTCAGAGGCTTT GACTTGTCTTAGAAATGCTTTTTCGGCTGAAGGGTCCAGCAATTGGAGGCCCAAGGTGTTGATGCTGTCT GGTTTCTTCAAGCTCTGTGAAGAGGAATCGGATGTTACCAGTAAAGAGGCCGTTTTGGAATTGTTAAGGC AGTCGGGGGATCTTGAAGACAAATCTTACCTAGCTCTTATTGATGTGGACGAAAACAGAACAGTAAACAA CAGTGAAATCGATGCCCATGAGACCGATGCGCTTCTAACACAGCTACAAGATGATTTGTAATCTGATAGT CCTAGATCTTTGCTTTAAAAAACGAATCTTGTAACCGGAGTCAACTGAGGAAATGCGAAATATGTATAAT GTACACAAGAGACTGCCTAGTGAAACATGAATGTAAGAGCTGTGTCCCTTTTTGTGACAGCTATTTGGAA TTAGTGTTGCTTAGGGAACTGGATTAGCCTTTGTTCTCTTGTTTGATTGTTGTTACTTGTTAAGACTAAT ATTGGAGAGGTTAGGTTGTGCTCTTTTATTTTGGGCCGGACGGATAAAAGGCCCGATATTGAATATATAA GTCTGAGAGTCTCAAAGGCCCATCTCCATTAAGATATCTTCGCGGAATCGGTTGTGAGAGAGAGAGACGG TGATCGGGAAATGTCGACGAAAGGCGCGGCGGCGGCGTACCCTAGCGCGGCTCGGATATCTGATTCTCCA TGTTATCTTCAGTACTCTGCTTCTCTCAAATGTGAGTCATGCTCCTGATCTCACCCTTTGTGATTGTTTC TTCGAGGATAGGATTTGACATGTTATCTTCAGTACTGTCAAGTTCCATAACGAATTAGCATTGATTAGAT CTCATCTATTTCATTATGCTTCCTCAAGGTGATTAGATTAGTGGGTTGAATCCCATGTCAGTGATTCGAT TTAGGTCCCATCAATTGATAACGTCGGGTTTGATTCCTGATTGTTTATGTGTTTCCGTTTTCATTAGTTA TGCCTCTTAGCTTGACCCCTTGATTTCTTATCAGGTCTTGAAGAATTTGGATCAGACAAGAGTAAATGCC AGGATCATTTTGATGTGTACAAGGAATGCAAGAAGAAAGAGGTTGTTGTTGTGAATGAATATTTAGGCTT TTGGCGTTTCCAACTTCTTTGCTGCTTTACCTATGTGTTATTTTGTTTCTCAGAGGGAAGCTCGACTGGA ACGCAATAAGACACGGTCGTTGTTCTCGTGAATGCAGATCCTCGAATACCAATGATGTCTCAGAACATCA CCTAGCTAGTAGTATCCTGTTGTTTCATTTGCAATGGCTGTGTTTGTATGATCTATCTAAGTAAACAAGT GGAAAGTGTTTGTTAATGTTACTTTTTACTCCCCATTGGTGAATCATGGTGTATACCTGTTAAACTTTGA GAGCAAGTGGTTATTTATTTAGTTAGAGAGTTAGAGCTTCTCCACCACCATATTGAATAAGAAGATCTTT CTCTCATTCTTTTACTTTACTCTGGCGTCTGAAACAGATCCAGGGATTCCAGTAGTGAATTGGGCTTAAA AACTGTTATATGGGCTTTCGAAAGTAAAAGGTTCGGTGAGCTGCCAAAGAAAAGTCAGATGCCTTTAATC GCATTTGACGACGATTCTTTACGTGCGCCATTGACTGCATCGTCGTCTTCCTCACGCGATTTGGTAATCC GATTCGTCTTCATCTGATTCCCTCCCTTCCGAGAATAATAATGTACCCGCCACCTCCCTCAAGCATCTAC GCTCCTCCGATGCTGGTGAATTGCTCCGGTTGCCGGACGCCTCTCCAGCTCCCATCCGGCGCCCGATCTA TTCGCTGCGCTCTCTGCCAGGCTGTTACTCATATCGCCGACCCTCGCACCGCCCCTCCTCCGCAACCTTC CTCCGCCCCTTCTCCGCCTCCCCAAATCCACGCGCCTCCCGGTCAGCTGCCTCACCCCCATGGCAGGAAG AGGGCCGTGATCTGTGGCATCTCGTATCGTTTCTCTCGCCACGAGCTCAAAGGCTGCATCAACGACGCCA AGTGCATGCGTCACCTTCTCATCAACAAATTCAAATTCTCCCCAGATTCAATTCTCATGCTTACCGGTAC AGAGTATTTCTATCTTTTCAAATGCCTATGTTTGCTACTATACTACTATTCCTTGGATTTTGAATACAAT TTTCCTTGGCCTCTTCAATCTGATAAACACACATTCCAAGTTACCATTTCGAACCACTTTGATAAAAATG TGTTGCATTCCATAGCTGACTAACTAATTGTTCATCATGGATGGTTTTCATTCTCAGAGGAAGAAACTGA TCCATATCGTATCCCGACCAAGCAAAACATGAGGATGGCATTGTATTGGCTCGTACAGGGATGCACAGCA GGCGACTCACTTGTCTTCCACTACTCTGGTCATGGTTCGCGTCAAAGAAACTACAACGGTGATGAAGTTG ATGGCTATGATGAAACACTCTGTCCTCTGGATTTTGAAACTCAGGGGATGATTGTAGACGATGAGATCAA CGCAACCATTGTACGCCCTCTTCCACATGGTGTCAAGCTCCATTCAATTATCGATGCTTGCCATAGTGGT ACCGTTCTGGATTTACCCTTCCTATGCAGAATGAACAGGTTATTAGTCCCTCAACCGCTTCTAAAAGGGA TGTTGCTTACCTCTCTCGTTATATTTAACATACATCCATTTTTTTTTTTAATTGAAACAGAGCTGGGCAG TATGTGTGGGAGGATCATCGGCCTAGGTCAGGTTTGTGGAAAGGAACTGCTGGTGGAGAAGCCATTTCAA TTAGTGGATGTGATGATGATCAGACTTCGGCCGACACATCAGTAAGTAGAACGACTCTAATCATACGTCT TGCTGTTGTAGTTGGTTCCTCCTCTCATGATTAAAACACATACACAGGCGCTGTCGAAGATCACGTCTAC GGGTGCTATGACTTTCTGTTTTATTCAAGCAATTGAACGCAGCGCACAAGGCACAACCTATGGAAGCCTT CTGAATTCTATGCGCACCACAATAAGGAATACAGGGAATGATGGTGGTGGTAGTGGTGGAGTTGTGACGA CTGTGCTGAGCATGCTTCTGACAGGGGGAAGTGCGATTGGGGGATTAAGACAGGTAAAATTCTTTCTTGC TCTCTTGTGTTGATACAGATCGATAAATGTTTTCTTAAATCTGTTTTTTGACAGGAGCCTCAACTGACTG CTTGCCAAACATTCGATGTCTATGCAAAGCCTTTCACTCTCTAGTAAAGGACAAGTCACTTTTTATGTAT AGCGAGTGTGATTTGAGAATCCGTCCATATAACCACCTTTTGTTTCTTATTTTTATTTTTCTTTCAAAAG AATAAAGGAAAACATTGATTTGGTGATTCGATAACAAAATGTGCCATCTATTCTTTAGTCTTTACAAACA AGCAGCAAATGGTTTGCCTTTCAGAATCAAAATTTAAGGTGTTTCTCGAATAGACAGAAGGAAGAGAAGA GAAGTCCCAGAAAGCTGTTCAGAAGGCGCATACAAATCATGTGTGCGTTGCTGCTGCAAGGAAAAGCACT TCCGCTGTAGCAGCCTGTTCTTTGTTTGATACCCCGGCCGTTATCTTCCAGTACAAAGGAGGAGTTTTTC ACACCATCGCTAAAGAGAAGACACCAAAAGAAGGTACCTTTATGCAACCTAGCCATTCCCACTCCAACCT CGGTATGCGACCTGTTTCTGAGCACCGACAACGCACTGCTATCTCTAAAGAGAATGTCTGAGAAAGCGAC TTCTGGTGCTGCATACTTAGAGCTGCAGCCGAGGATATGGCCAGTTATGGTACCAAAAGTGGGGAGTTCT ACACCACAGTTTGGGGCAAACACCTGAGTGAAGTCGTCTTCAGGGTGTTCACAGCTGAGAGTGTTGTTGA CATTGCAATTCCCCTCGCAGAGCTCAACATACTGGAGGGCCATGCAGCCAAGACCGGGACTCTCATTTAG TTTGCCTAGTTTCCGAGCTGTTCTGTTCTGGTTCAAGATGCTCACCATTTCATGAGCTGAGTTTCCTGCA ACCATTCTAACTAACACTTAGTCCGCCTAAAACGAATCAACATAATATAAACTGTCGAATCTGGTTCTGA CTAAAGAAAGCGAACTCGAGATTAAATCAGAGGGAGTGGCTGTAAATTCAAAATAAAGCCTGGCCAAATG CTGAACGAGAAATCCAAGTCTATATTCGCATATGTTATGAGGGGATAAAGCAAGGAGTTACCGTGCAATT TGGAGCTAGCTAGCACTGATGAGAGTGACAGAAACAGTAAAATCAACTCCAAAATGCTGATTTCGTTCTT CATATCGTGTTTTATCCTCTGAATTCCCAGCGTAATAGCTCGAGCTGGCGGATTTTCGAAAAATCGAGAA AAACAAAAAACAGAAAAGGAGAAAGTTTTTGAAAGGAGATGAGCTTGATGGAGATGTTGACTGGTCCCTG AATAAATGAAAAATGTGTTGCATTATTTCTATTATTGAGAAGAAAAAAACCAGGCATTTTGGTTATTGGG CTTTGATTTGATGTTGGGCTCTCAACCATTGAAATTGAATGAAGAAAGAAGGAAAGTACGTGACTTGAAT TTCATTTACTTCATTAAATGGGCGGCGTTGGGGCCGGTGGAGGTGGGCCAATGACATTGATGTGTAAACA GAGGTAAAGCCGAATTTTGGCTAAGGCGAATCAATGCCCATTGGCTCCTCTCCTTACATATTTGAAGTTT GAGGTTTCCTTCCTTTTCTTAAATTAAATGTTGCTGTAACATTTCTACTATTGTAAACCGGGGCTCCACC ACCATGTGCTTCTTCAACACTGTATCATCAGAGCCCACATGGTCATGCCTCTATATAATACTTTGTATTA TTATTATTCTTATGTCACATTATAAACAAGTACCTCCAAATTGCACTTCCTTCAAACTTATTCGACAGTA GACTAGCTCAAGTACCTTTGGATGGCGTCGAGGCCCGGAGCTCTTACGGAGTGGCCATGGAGTCCCCTTG GTAGCTTCAAGTACCTCTTGGTGGCCCCGTTGGTGATGGCGAGCATGCACTCGTACGTGACGGCTGTGGA TGAGGAGAAAGACCTCAGCAGACTTATGATAGTCGTGTTGATGCTGTGGAGAATAGTTCACAGCCAGATA TGGATCAGCGTGTCTCGCCAGAGGACGGCTAAGGGAACGAACAAGATCGTGGACAAGCCCATTGAGTTTG AGCAAGTGGACCGAGAGCGCACTTGGGACGACCAAGTCATCTTCAACACTCTCCTCATGTATCTCGCAAA CATCAAGCTCCCAGGCGCCTCCCACCTTCCCCCATGGAGGCTAGACGGGGCCATCCTCATGGCTCTACTT CACGCTGGTCCCGTCGAGTTTCTCTACTACTGGTTTCACAGAGCTCTCCACCACCATTTCCTCTACTCTC GCTACCATTCTCACCACCACTCCTCCATTGTCACCGAGCCCATCACGTGTACGTACCTTTATCCACCATT TGCTTCTATTCTATATACATTCATTCATATCTTTAATCAAACTTGGCAGCTGTGGTGCACCCCTTCGCCG AGCACATCGCCTACACACTACTCTTTGCCATACCTATGGTAACGGCGTCCCTGTGTGGGATCCTCTCCAT CGTTTCCATCATGGGATACATTACTTACATTGACTTCATGAACAACATGGGACATTGCAACTTCGAGCTT TTCCCTAAGCGTCTCTTCCACCTCTTCCCTCCCCTCAAGTTCCTCTGTTACACCCCCTCGTACGTCGTTT GTAAAAACACTACTATTTATTTGGATTTGAATATATGCATGCATTTATAACATGGCATCAAATATGTTGA AGGTTTCACTCGCTCCACCACACGCAGTTCCGGACCAACTACTCTCTGTTCATGCCAATATACGACTTCA TCTACGGGACGACTGATAATTTGACCGACTCACTATACGAGAGGTCGTTGGAGATAGAGGAAGAATCACC CGACGTCATCCACCTCACTCACCTCACCACACACAACTCCATCTACCAAATGCGCCTTGGTTTCCCGTCC CTCTCCTCTTGCCCCTTGTGGTCTCGACCCCCATGGTACCTCACATGCTTCATGTGGCCCTTCACTCTCC TCTGCTCATTTGCCCTCACTTCAGCTATCCCTTTGCGCACCTTTGTCTTTGAGCGAAACCGTCTCCGTGA CCTCACCGTTCACTCTCACCTCCTTCCCAAGTTTTCCTTTCACGTAAGCATTTTACACGCATGCATATGC ACTTTCCCTCTCTCTCGCTCTCTTGACACAAACGGGTTTACTTATTATGTTGTACTTCACACCACTATTT TCCAAACTTTCACACACAAAAAAAACATTGATTCTCACTTAACTTGTACGTACTACGTAGGAAGGACATA ACCTTTTATACAAAAAGAAAATTAAAACAACCTAAAAATGAACAATGAACATTTTCTTGTGGGTATACCT TTTGTAAGTTGCATCTAAAGTTTATTAATAATTTTGCCTCATAAACATGCGGCGGTAGTATAAATCACAG CGCCACCATGAGTCCATCAACACTATCATAGAGGAAGCTATCCTTGAAGCAGATGAAAAGGGTGTGAAAG TAATGAGTCTTGGCCTGATGAACAATGTAAGTTTATTTACTTCAAATCCCCCTAAATATATATGAATCAC TATTGGATAAGTACTGTAACTAATTACACACGCTGGCAAAAGAAAAAAGTAACTAATCAACACACAATTA ATTAATGAGAGGGAGGAACTAAACGGGTCTGGAGAAATGTACGTGCAAAAGTATCCGAAGTTGAAGATAA GACTAGTGGACGGGAGCAGCATGGCAGCTACGGTGGTTATCAACAATATTCCAAAGGAAGCCACGGAAAT TGTCTTTAGAGGAAATCTCACAAAGGTGGCTTCGGCTGTTGTCTTTGCTCTGTGCCAAAAGGGCGTCAAG GTTTGTGAATATATGAGGGAATTGGAATATATATACTCAGCTTCTCATATCAAACAAAAAATAATGTAGT AATGTGTATATATAGGTGGTCGTGTTACGCGAGGAGGAACACAGCAAACTCATCAAATCTGGGGTTGACA AGAATCTGGTACTGTCTACAAGCAATAGTTATTACTCCCCAAAGGTGTGGTTGGTGGGGGATGGAATAGA GAACGAAGAGCAGATGAAAGCAAAAGAAGGAACCCTCTTTGTTCCCTTTTCTCACTTTCCGCCCAACAAA CTCCGCAAGGACTGTTTCTACCAGTCCACTCCAGCTATGCGTGTTCCCAAGTCTGCCCAAAACATCGACT CCTGTGAGGTACATCTTTGAATTCTTATAGATATATCTGTAACTTTTATATTATATAAGCTGATAGATGT GTTCATCTATAATGAATGAATGGTTGTTATATATATATAGAACTGGCTGGGGAGGAGGGTGATGAGTGCA TGGAAAATAGGAGGTATAGTGCATGCACTTGAGGGTTGGGAGGAGCATGACTGCGGCAACACTTGCAACG TCCTCCGTCTCCACGCCATATGGGAAGCTGCTCTTCGCCATGATTTCCAACCTCTCCCACCATCTCCTCT ATGAGCTTTTTTCATATTCATACATCTATGTCCCCTTTCTTGATTATATCTACTTCCCTTCCATCATTGT TTGCTGTTTACTATGTTTTTCTATCGACAATATATAAGTACCCTTGTTACCCTTGGTGCCACGTGCTTCA TATATGTTAGAAAGGGCAAAAAAATTCGTCGTATGATATGCTTAGTTAAATTTTATAAAACTCAATAAAA ATCTTCAGAAACAGTGCTATGATCATTACATCTTAACTAAGTGATATATATCTGCGTGCCTATTTAACAA AATAAACAAAAAAACAAAACAAAATATATTTGGGTGCATCATCAAATCAAAGTAGTTGCAAAAACTGGAC GAGGTTTTTACTTAAATGGTCCTTACCCCGCATGGTCCACTTGCTACCTAATTAAGGATTGGTAGGGTGC GTATACGTATATAAATTGTGGCGGTGGGAGATGGAGTTACTAAAAACGAAACGTACAAGTATTATTCATA GCTCTCGTATAAGGGGTTAGTCCTTAGATCTAGATATTTTCACTTTTCTTTCATTTATGTCGGAGCAACA GACACTAGCTGGCGCTTCAACGTGCATGATCTTGATTGGCTAGTAAATTCCAAGCATCAATACCTAACAC ATGCCCAACTTGGTTCATTAGTATTCTTTCATTGGTAAAATACCCTTACCTTTCAATAATATCCAGAAAT AAATATATGAAGCCATCCATCAACCGGTGCATTTCCTCAAGGCATGGATATGATATCAGAACATCGATGA AGGTGGGAGGGGGTAATTAGCTGAGTGTCATAAATGAGGATCCATGTGGAGATCATCGAATGGTAGTAGT ACATGTTTGGTCTTAGCTGGCCCCACCACAAGGAATTGGACTGGTGGGAAGATAGGGGTGGTTACGTCAT TCCACATATCTACCAATTAAGGAGTTTAATATAAACCTTGCTATATAATGTACCTTGGCTCACAAGAGTT GAAGAGACACAGTGACGACACAAACATATTACATTCGACGGTATAATGGCCACAAAACCAGGAGTCCTCA CCGATTGGCCTTGGACACCCCTCGGAAGTTTCAAGGTGCACTCTGTTTTCTTGTCCTTTAAATTTAAAAA AACGCGTGCTTATGATCGAATCCCGTTACGTTACTGATATATATGTTTTTCTTGACATTGAAACAATACA AAAGTACATCGTAATAGCACCATGGGCTGTCCATAGCACATACAGGTTTGTGACAGATGATCCAGAGAAG AGGGATCTCGGGTACTTCCTTGTGTTCCCATTCTTGCTCTTCAGAATTCTGCACAACCAGGTTTGGATCT CTCTGTCCCGTTACTATACGTCCTCGGGAAAGAGACGCATCGTCGACAAGGGAATCGACTTCAATCAGGT CGACAGGGAGACCAACTGGTGCGCTTTTCTAAATTTTTAACTACCTGCGTGCCTCGTGAGTATATGTAAT CAACGTAACTAATGAAATCCTGATATATGCGCAGGGATGACCAAATATTGTTCAACGGAGTGCTGTTCTA TATAGGCATCAACCTATTGCCGGAGGCCAAACAACTTCCCTGGTGGAGAACTGACGGAGTGTTGATGGCA GCGCTTATTCACACCGGACCGGTGGAGTTCCTCTATTATTGGCTCCACAAAGCTCTCCACCATCACTTTC TTTATTCCCGCTACCATTCCCACCACCACTCCTCTATCGTCACTGAGCCCATCACTTGTAACTATTGTTT CTTACCTTGATTTTTACGCTGCCTATATTTCCGTTTTTCTTTTTATAATTATTATACGTAAAATATACAT CGTTCACGTCCTAACTAGTAGCTTTTATCTGTATATAATGGGATTTGATCAAATGTATGCAGCGGTGATA CATCCGTTTGCGGAGCACATAGCATACTTCATCCTCTTCGCGATACCACTACTTACCACGTTGCTAACAA AAACGGCGTCAATAATTTCGTTCGCCGGATACATAATCTACATAGACTTCATGAACAACATGGGACACTG CAACTTCGAGCTAATCCCTAAGCGCCTTTTCCACCTCTTTCCTCCCCTCAAGTTCCTCTGTTACACCCCC TCGTAAGTCCTTAATTAACAACTCCTCTTCTGTTTCATACACTACCAATTTGGCGTAGTAAAAGCATTTA CAAGAAACCATTCTTGATGATCTGATACAAATACCTAGTTAGATCATATTAATTAATCCTCTTATGGTCA TCATAAAATCTAAGCAAATGATAAATCATACTAATACAGGGGATATATGCTATTATAATAGAATTCCATA CACGTACTCCATTCCTGTATAAAATAAAGGTGACGTGATACAGTTGTATGCTTAATATGATCGTCAACTA CTGAATCCCTGGACCACAACAGAAAAAAAAACAATTATTTAATATATCTTACATGGTTCAACTTATCGGC ACATAATCCAATTTCCCACAACTTTACGCATTGATAGCATCTTTAACCAAACATCCTTTGAGAACTATTT TAAATATCAAATTCATTAGTCGATATGTAGCAGGTGGTCCCTCTAAACGCTCAAGTTATATTAAACCTTC TGGATTCATATTTACTTTTAAATATTTGTGACTTTTTTTCCTTCGGTATTAATTTAGCGCAATGTGAAAG CAAAATTTAATAGTTAAAATACATTAAAGTTTGGATAATAAATGGAGCATGAGAATTGCAGATACCACTC GCTGCACCACACGCAGTTCCGGACCAACTACTCCCTCTTCATGCCCTTGTATGACTACATCTACGGCACA ATGGATGAAAGCACGGATACGTTGTACGAGAAAACTCTAGAAAGAGGAGATGATATAGTGGACGTGGTGC ACTTAACTCACCTGACGACGCCAGAATCCATATACCATTTGCGCATTGGCTTGGCCTCATTTGCCTCCTA CCCCTTCGCTTATAGATGGTTCATGCGCCTTTTGTGGCCTTTCACCTCTCTCTCCATGATATTCACGCTC TTCTACGCCCGCCTCTTTGTCGCTGAGAGAAACTCCTTCAACAAGCTCAACTTGCAGTCTTGGGTGATAC CTAGATATAATCTACAGGTCCTCATCATCATCATCATCATCATCATATATATAGGCTGGTTAACTTGCTG ATGCATATATATTAATGGTGATATATATATGATGCATGCAGTACTTGTTAAAATGGAGGAAAGAAGCGAT CAATAACATGATTGAGAAAGCGATACTGGAGGCAGATAAGAAAGGAGTGAAGGTGCTTAGTCTGGGTCTC ATGAACCAAGTAAAGAAACTATCTCTGACTGTTTTGGTTTTATATTGGGTAGATGCCGTACGTACTACGT AGTGTATGTTAAAGCTTTAATTTGATGAACTGAAACAGGGGGAGGAGCTTAACAGGAACGGAGAGGTGTA TATCCACAACCATCCAGATATGAAAGTGAGACTGGTCGACGGCAGTAGATTAGCAGCAGCTGTTGTGATC AACAGTGTACCCAAAGCAACTACAAGCGTCGTGATGACAGGCAATCTCACTAAGGTTGCCTACACCATCG CCTCTGCTCTCTGCCAGAGAGGCGTTCAGGTCCTTTGTTTTCCTTTTGCTCCTATGTTGTGATATCAAAT TGATGATCTCTAGGAGAAAAATAAAATCCAAGCTTTATCTACATGTATTTATGCTCATGACTCGTAACAT TTTCATGTGAATGTCATCCGCAGGTCTCCACTCTGCGCCTAGACGAGTATGAGAAAATAAGATCATGCGT TCCACAAGAATGCAGAGACCATTTGGTCTATTTAACCTCTGAAGCACTCTCATCAAACAAGGTAATTCAG TATACAAAAGAAGCACAATTAATCAAAGAATCAGAAGGAAAATATTCAAAGAGCTTATATAAAGAAAACT AATGAAGGGATTTTGGGTGAAGGTATGGCTGGTGGGAGAAGGAACAACAAGAGAAGAGCAGGAAAAAGCC ACAAAAGGGACATTGTTTATACCATTCTCACAGTTCCCCCTCAAGCAGTTACGTAGAGATTGTATCTATC ATACCACACCAGCATTGATAGTTCCAAAATCTCTGGTGAATGTCCACTCCTGTGAGGTAAGCATTCAAAG CTACCCAATCCAACTAATTTATTAGAAGAGGTCCTTATTATAAAAAAAACATCTGCAGAACTGGTTACCG AGAAAGGCGATGAGTGCAACTAGAGTGGCCGGCATATTGCACGCCTTAGAAGGATGGGAAATGCATGAGT GTGGCACATCCCTTCTTCTCTCGGATTTGGACCAAGTATGGGAAGCCTGTCTCAGCCACGGCTTCCAGCC TCTCCTCCTTCCACATCATTAAAACTCCAACCTTGGAAGATTTTAGGAGAATGAGAGCGACACGCTCTGT GCTTCTTTTCCTTATGATCCAGCTCTTCCACGCACAAATGAACTATGAAACATATATAAAGCGCACACAT ATATTTATGCATATCAAGCTTTTGGTGATTATGGTATTGATAGAGTCAAATTAAGCTCGGTGACTATGGT ATTAATAAGAGTACTATTTCCTTTTCTCTTTGTGAACTAAGAAACATATATATATAAAGCAAACATGTTC CAGAATATCTAAGTTTTTCTTCTCCCACTCCTAGACTTTATAGTTCTACAAAATTTAAGTAGCATAGAAC ATAGCATTTGGATCGCTTGATGCTATTACTAGGACAATTCAAATGGTCTCTCATCACTTATAGGAGAAAC ACCTATCTTATTCAAATCATTTGGTGGTCAATAACCGTTTTGAATACATTGATTGGTGTTAGTTAGTAGT TAGTTCTCATACACAGTGGCTAGAGCCGGGCAAAACGGATACCACCACCGTTTTTTAAATTATTTATTGG TTTTCTTAAATAAACTAACAAATAATTAAATTAGTGATAATGTACTATTTAAAAAATAATTATGTAAATA AAAATATGAAGTTACGAATAAATTCATGAAATTTAAAAATTTAACACTTATCAAAAACAAAACCTAATAG AAATATAAAAATATAATTTTAAAAACAATAAAAACAAGTGTTAAAATTAAAAAAATGTGTAAACCGTATT GAACCTAAGACACCTTTTTGGGGTTTGGATGTTATGTCCAATTAAGTTACACAAAATTTAAAAAATTAAC ATTTATCAAAAACGAAACTTTATAATTTTTAATAGTAATATAAAAATAGAATTTTAAAAACATTTTTTAA TAAATAAAAACAAGTGTTAAAAATTTAAATTATGAGTATTGAACCTAGGACAACTCTTTGTGAAATCGTT AATGACCACGGTTAAATGGCAGGATCAAAAATCCGATTAGATTTCACAACGTCATATTCATTTAGTATTT ATAAAACCTTCTAAAAAAAAATTAAGAAAAGAGTTGAAAAACTTTTAAGAAAAAATAAAATAAAAATAAA TGCTAAATATACATAAAGATGTGAAAAACATGTTGGACTTGTGAAATCGCTAATGGCCACGGTTAAATGG CGGGATCCAAAATCCGGTGAGATTTCACAACGTCATATTAATTTAGTGTTTGTAAATACTTTTTAAAAAA TAAAAAATAAAGAGTTGAAAACCTTTTAAGAAAATAAAATAAAAATTAAATTATAAATATACATGAAGAT GAGAAAATATTTTGGATTTGTGGAATCGCTAATGACCACGGTTAAATGGCGGGATCCAAAATCCGGTTAG ATTTCACAACATCATATTAATTTAACATTTATAAAACCTTTTAAAATAAAATAAAATAAAAAAGTTGGAA ACCTTTTAAGAAAATAAATGCTACATATACATGAAGATATGAAAAACATGTTGGACTTGTGGAATCGCTA ATGACCACAGTTAAATGGCGGGATCCAAAATCCGGTTAGATTTCACAACGTCATATTAATTTAGTATTTA TAAAACCTTTTAAAAATAAAAAATAAAAAGATAACAAAAATCGAAAGAGTTGAATACCTTTTAAGAAAAT AAAATAAAAAATAAATGCTAAATATATATGAAAATGTGAAAAAACATGTTGGATTTGTGGAATCGCTAAT GACCACGGCTGAATGGCGGGATCCAAAATCCGATTAGATTTCACAACGTCATATTAATTTAATATTTATA AAACCTTTTTTAAAAAAAAAAAATTGAAAGAGTTGAAAACCTTTTAAGAAAAAAAATAAAAAAAATAAAT GCTAAATATATATGAAGATGTGAAAAACATGTTGGATTTATGGAATCGCTAATGACCACGGTTCAATGGC GGGATCCAAAATCCGGTTAGATTTCACAACGTCATATTAATTTAGTATTTGTAAAACCTTTTGAAAATAA AATAAAAAAAAAAAGACAAAAAAAATAAAGAATTAAAAACCTTTTAAGAAAATAAAATAAAAAATAAATG CTAAATATACATGAAGATGTGAAAAACATGTTGGATTTGTGGAATTGCTAATGACCATGGTTAAATGGCG GGATCCAAAATCCGATTAGATTTTATAACGTCATATTAATTTAGTATTTATAAAAACCTTAAAAATTATT TATTTAAATGTTTTAGTGAAAGTTTTAAACTAATTAGTTTTAGTTTTGGTTAAAACAATTTTTTAAAGAA AGGAAGAAAAAAAAGTAGAATGAAGAAAGTAAATACCTTATTGGATTTGGTTGTAAAGAAGGCCTCATAC AGCAAAGCCCATTCCAAAATCCTAGTGTAGCTCTGTCGTGACATCATCCACCACTTTTAGGTCAATTTTG TAAGTAAATTACTCATACAAATAAATTAAAAAAGGAAATTGATCACATCAATATTAAAAAGTGACCGTTA CAAATAAATTAAAAAAGGAACTACATAGAAACAGTATCCCGATAATTGCTTTCATCATAACAGATTCTCA CACCTTTGCAATTGTGGCTTTAAGAGATTCCAAATTGTTGATTTGAGTTTGAAATATAATTTTAAAATAT CAATAAAGAAGTAAAGAAAGTATTATACCTGATTGGACCTCGTTTGGGCCGTCACAGGAAAAGCCCATTA CCAAATTCTTCGTCACTGCTCTGTTCTGTAGTTGATGACATCGATGAAACTCAAACTATCGCACTCGTCG TCATTACCAAGTCCACTGAACATGATCTGTTCCATCGCCAAGTTATTCTTCGCTGCCACTGAACTGGTCG TCGTCTTCACTAATCTCATGAGAACGGTGAAATTAGGGTAGACCCGATTGACAGAAAACAGAGGATGGTG ATCAATCACGAAACGAGATGAAATCGTTTCATAAATCATCGGCATACTCTGAATGGGTCATCTCTTTCAC GCTCTGGATTCTTTTGTTTTCCTTTTGAAGAAGAAGATGAATGGAGAATTATGATTTCACAAGGGAGAAA GAGTATTTATAAAACAAACGTTTTCAATAGAAAAATGAAATTTTGGATTGTTTCCTTTTTTTACAACGGT GTTAAGAAAAAAGGAAATTTCAGTTATACTGCAAAAAATAATGAAAATTTGCTCACAACGGTCATATTTG TTATTGTGCATAATATTATTTGAGTTTTAATGGGTAACAATTTATCAAGAAAATTATTTGGGTTTTAGTT CGTAACGGTCATATTTGTTATTTGTGCAAAAAAATTATCTTAGTTCACAACAATTAATCTAGATAAATCA TTTGAGTTTTCTTATTTGTTAAAACAGAGAATGCGCCGTTGAGATAGAGAGGAGCAAAGTCGGGATCGTG TGTAGTTACTTATCTTTGGTTACTTTGTAAAAACACAATTACAAACTCAAAACTGTTACAAAAAACAACA ACTTTTCACTCATTAAAGAACACTAACAATCATCATCCATGATACAAAACAGAACAGAGCATTCTTTAAT CATCATCCCGGAAGCTTTAGATCTGTGTCTCGCTTCAGACCATACCCTTCACCACCCCCAGGTTATTTAA TTTACTTACAAAAAGTTCATACTTTAACTTTGTAAACCAAAAATGTTTTATTTATACATTTTCAGTCTTA ATTATTTTCTTGGAAAAATTATCTATTCATTTATTTATTTTTAAAACAATAATTTTGGTTAATTTTGTTT GGTCTTTATTACAAGTTGTTCAGATAAAACTGAATTACTGTATTTCCAATTTGGTTTGAGTTTCAAGATC ACTTTATTTTTAAGTTTCATGTGATTTTAAGTTGAGAAGTTTATAACCAAATTTGAAATATATTTGACTA TTTTTAGATGCTGAAGGAGAACAAGAACATGGTCGAAGATTAAGGTGGAGATTATTGCAATGGCTTAGAC GAGCTTCTCCCAATAGTTCACTCTCAGTATTCTCATCAATTCGATTATTTTCATTGGGGTTGTTTCACCG ATCTAACGCATGTACGCATATAAAATAATATTATGTTTTAAAAGAAAATAATAATCTGGTTATCAAAACG ACTTTTTCAAATATATAATTTATTCACATATATAAGTTCATATCATAATAGTTATGGTACAAGTTTCCTA AAACTAAAAAATAAAAACAAATTTTGGCTTCACAGTCATTGGAACAAGGTGAATCCAGCGGTCTCCTTCT CGGAGAAAATGGCCACGCGGACGGACGATACACCACAGAAAAGTCCAACGTGAGTTAACTCTAAAGAAAA CATTTTATTTGCCAAATATAACGAATAATTATTTATTATTTTCAGAAAATATTATTATAGTTGTGATTCT CTGTTTCGCAAGAGTTGGGAGTAGGGAATGTGAAGTAGTAGTGGTGGCCCAAGTTATGTTTCCAAACGCC AGTAACGACCAAATCTAGGCATGTAGATTTCATTGGGTCACGTGGATGCATCAAATTTAACGCGCCGCAT TTACTTTTCAACGAATGGCACAGTTTCAACTACCTCGAGAAAAATCCAAAACCAAAAAAGCTATTTGGAA TCTTTAAAATCTTTTTACAAATTTCTTCTATTATAGTATTGCTTTGTTGTACTATATTTCACGACCTTTC ATGAATATTTTAAATATAAATAGAAGTGGTAGGCGCATATCTTTTTATATTCAAAAGATTCATATCCAAT GACACAACTAATCAATGTTCAACCGACCTTAGTAGCCAAGTTCCGTTATGGTCAATACGAGAGGTTGAAG AGTGATTAAGCTCAATTATACCAGATTTACCACAACGACTAATATCCTTCCTTATCTTCACTTTTGAACT CTACTTTGCAGACAATATATGCTCTCTGTCGTCAAAGCCCATAAGATATCTCACTAAAACGTTCAAACTC ACTCTACGTATAAGATCATATACCACACGTAGACAAAAATTGAACCTACTCAGGCTGATCTTTGTTTCAA GTTTTATTTTTAACAAATTTATAAAGAAAATATACGACATGTATCTTAGTAACCATTGTGTAGAGATATA TCAGATTGTGATTTGAAGAGGTGGTCCTGATGTTTGAAACACAACACTCTCAGCTTTAGGCAATAGTTTA ACTAAGATGGATGGTAATTTTTACAAATAACATGCACGTACGATTTGTTTAACTATTTCTCGACAACCTA AACCAAATAGGATATAATATATGATCGTGTTAATTAAGTAAGATAATATATATATATATATATATATATA TATATATATATGTACCAAATAACCTAAAATTTGATTGTTTTAGGGCTAATCGGCAGATTCTCTCATAACA TCGTTGAGAAAAAAGGACACGGTGATTAAACATCATAAATTCGGAATATTACCTGATTAGGAGGCAAAAA CGTTGGTTGATACACGTGCATTACCCAATCGGATTTGGATCCATTGATGTTTTCATACGATTGGAAAACC AAAACTTGTTTCTCACCAATTTTAACACCATTACTAGTTATCCACTTGCCAATGATTGGTGTGTTGGATA CAGTTTCTTTCCAATAACCCGAATTCGTTTTCAATATTTCTTCGTTATATTCATCACAACTAAAGAAGAA CCATACCATAGTATCAGCCCACTCGCTCTTTGATTTGGCTATAATAATTATTAAAAAAAAAAACCTAAAT CAGAAATCAGCCTATAATCAATGATTGAATCAGAAAATCATGATCTAGCATTAATTGACCAAAACTTTCA TGGCACATGCCAAGGATCGTAACTAGAGATTTTAACGGTGGTAATGAAATGATGATATTGCCTTCCTTGA TGCCGAGATGTTTTAGCAGGAGGTAATATTCGATGATAACGTCATCTGTCGGCCGGAATCTGAAATCCGC CGGATATTTCATTCTTATCGAATAAACCCATAAAGTTAAAAACAATAGAGAGCGATGAAAAATGCAAAAT AGGGTTTACAATTTTTATATGTAGGTAATTTAGAAAAACAAAATTCTTTTTTTTTGGGCAACATAAAAAA ATTCCTTAATTCTGAAGAAGATATAACGAATAAGGTACGTAATTTGATGTATAATAAACGAAAGCAAAGT CTTTGAACGCCGAAACAGAGGAATTAACAAGAAACAGAATGAAAGTGATGTAGAAGAAAAAGAAAGATTA CTAAAATTACATGATATAGGATAATGTAAACAAATAAACAATAGTCTAATGGGTTTTGGATTTAGCCATC AACATGACAACATGCACGTGTACATATATGATGTAGACTTGAAAGTCCAAAAAAAGACTCTTGACATTAC TGAAATGAAGCATCTTAATTTGAAATTTATTCTTGTTTTCTTTCGTTGAATGGAATTTGTTTATGGGGTT AGGTAGGACTAGAATAGTACTTCGAGGTTGATTGATACTTGATAGGGTACGTCAAATAAAATTTGAGCAT TTGGTTAGCTGTATGAGCAGAAATTATACAACTTTGTCTTCACAATGGAGCATACATACAAGATGAGAAA GTAACAAAACAAGATAGACATTATTATGTCAATGGATACAAATTTGTCTTCACAAATTTACCAGTTTTAT ACATATCACACATACAGTATGGTAAAGTTACAAACCAAGATAGACATCATAGCATACACTTGTACTGTTG TAAATAATTTGGAAAGTAGAAAAGGTGTTATTGATCACTTTTATTGTTATCAAGTTCTTGAGATGGAAGA ACATAGGTGAATTTTCTTGACGAATTTTTGTATCATCCTGTGAAAGAAACCAGCTCTTTTCTTCTTGATC GTCTCTTGACCCAATTTATGCTCACCAATCTCAGTCCCTTGTGCATCATCATAAGGATTCTTCTTCTTCT CGGCGGTATCAATACTGGTTATTAGAGCTTGGCTCACCTTGAATCATAACAAAGAAACAAAGTCGTTGTA ATGAGTGTTGGCACAAAGTAGCATCATTGATTGTTTGTGTTGTTAGTAGTGATGGCACAAAGTAGCATTA AGGATTGTTTGCCTCAGTGAAAGATAGAGAGATAAGAAAGCTCACCTCTTGAGTTAGTGACACTAAGTTG ATTGTTGAGGTAGGAGATTCTTGCAGGTCTTTGATCTGGTCTATGCGATGATTTGAGCTACCAAAACTAT CACAAGTGCTCGAAGTTTGAATAGAGTTCTGTCAAATGAATGAAACAAAAACTTGAGCTTTGTAAGGTGA AATACGAAAACAGAGGATTATAAAGGTACAAAAGTAGAAATTTGCTTACTGTTTTTGGAGTTAGCAAATC AGAATCATTATCATCACTGCTAACATCATCACTGAAGACACCAGTTAATGAGTTTGGAGGTCTGTAATCA CTTCGATTATCATGCATAAACATGATACTCTTCTCCTTAGCATCATCAATATCATTCAACCATGTTTCCC ATTCCTCAATCGGTATAGCATCCTCGATTTGAGCATCATCCTCATCATTCATCAGCCATTTTACCAATTC CTCGGTCAGTTTAGCATCCTCGATTGGAGCTTCTTGCAGCACATCACCAAACTGACTTGGATCTTCTCTG TGAAGTGAGGATCCCTGAAAAAGGGGGAGAACGCAAAAGAAGTCGTTGTCAGATTTAAAACAGAAAAGAA GTTTTGAGATGAACCCACCTCAGAATTGTTGACAAGCTGAGGGATTAAAGAGTCACGACGACTCTGCTCA ATTCCACTAACACCAGAAGAAGAAGGAGAAGAGGAAGACTTCTCTCTCATGCCACCATTAAACATAACTT TACAGAGTGTGTATGTCATCATCATCTGCAAAAATTCGATAAAAAAACTCAGAATCGCAGCAATAGTAAG TAACACAAAAAAAAAACAGAGAGTACCTGGTTATGAGAGAAACCGTGGTACTCGTGTATAACCCAATCGG ATTTGGATTCCTTACTCGTGTAAAACATCAAAATCTTTTTCTCACCGATCTGTTGGCGATTACGCATGAT AGGCTTTGGTCTGCCAGTACTCTTCCAAAACCCAGATTTCGTTTTTCTCATCTGCTGATCACCTCTGCCA TATTTGTTCTCCTTAGGTCTGAAGAAACACCAAGCCACATCTTTCAGTTTGATCCTTGACTGGCCTACCA TACCAAAACGAGAAAACGCTAAAATCAGAAAGTAGCGGATGATTCGATTGAACAGTGAGAAGGACGACAC TCGGTGATATGAATGACTTACAAGGTAACTCCCAAGGATCGAGTCTACAGACAGGGACTGTGTTAATGAA TCGATCGACATGGCTCGTGTCTCTATCGGAATTTTTCGGCCAAAGGTAATCGACGACGATCTCCTCGTCG GTCGGACAGAATCTTAAACCCACAGGAGTTTCCATTTCTCTGCAGCGATCAAAAAAGAAGGGAAAAGGAA AAGATCAAAAAAATATGCATTGGAGAGCTTTCGCCATGGTTGATGTTCTTCTGCAACTTAAAATGATGGA GAAGAAAGACGTATAGGGTTTTGTATTTATGCGGAAATTCTCAAATTCAAAAAAATAAAAAAAATAATAC AACAATAAAAGAGTAAAAATATTAAATAGTCATGACGGTATACTTGTCGAATTCGATTACGCTAAGACAG GACATTCAAAGGGTTAAGTTTCGGAATGGTAAATACGTGGTGCGTTTGTTTATCACTTGTCTTATAAATT TTGTAATTATTTTTTCCATACGACCATACCAATCTTCAATCCATGAAATTGAAAATATTCCCCATAAATT CTCTTACATTGTGTGACTTGTTAAAAAAATATCAATCAGAAAAGGAGGGTGGAAAAAGAGGATTTGCAAG CTGCAAGTTTGCATAAATTTAATCAGATAGTGACATATCTTTTCATCATGGGACGGTAGTTTCGCCCAAC ACGTAACGACGAAATTACATTTCTTTCTTGAACTTGTTTGATGTTTCTCTTTATTATATTTTGTTGGCCC ATTTGGAAATTATATAATGATTAACGTTGCCCACAAAAAAAATAAATATAATGATTAACGTTAACGTCGA TCGTCCGTTATCTATGTAGAAACAGAAACATAGATACGATGACAAAAAGTATCTCTATATGCTATTATGC TAATAGGTAGAGCTGTCAATTAGACAGGCGGCTCATGAACTTGCCCAGTCCAAATGCATATGGACGAACT ATATTCTGGACCATAAAACAAATGGTCCAATTGGGCATATAACCAGTTTTGTCCACGAATAATATGAGTT TGACCATATGGACAATGGGCTGCCCATGGGCATGAATTGAGGGAAAAATACAATTTCTCCGATTTTACGA TTTTGACGGAAAAACGTAATTCTGCAAATTTCCTCTAAAACGCGATTTTATTATTTTGGCGAGAACACAA TTTTACAGTTTCGACGGGAAAACGCAATTCTCCGATTTTACGGTTTTGGCGGGAAAACGCAATTTTTCTA CCAAAATCGTGATTTTATTATATTGGCGAAAAACACAATTTTACAGTTTTGGTGAGAAAACACAATTCTA CGTTTTGGCGAGAAAAAACAATTTTACGATTCTACCGTTTTGGCGAAAAAAAACAATTTCATAATTTTTC CGCCAAAATCGTGATTTTATTGTATTGGTAAGAAAAACACAATTTTACCGTTTTGTCGGAAAAATGCAAA ATGCAAAAACATAATTCTTTAAAATCATGATTTTTGATTTATCAATAATAAAATGGGCTATACATGGGCT TGCCCATATGGACATGGTCTTTATTGGGCATGGACATTTTTCGGACCATTGTCCATTATGGACCGTCCAA CTTGACCCATAAAAAGAATTGTCCCTACGGACACGCCCAATGGTCCCTGGACGGATCATTTGACAGTTAT ACTAATAGGAAGCTTCGTAGAAGCCGTAAGCCGAAATAATCTAAAGCCCTTTTAAGATTTGGGGATAAAT ATTTATATATAAGGCTAGACATGGGGAAAAAAAATTAAATATTTATAGACATGCATGCTATATACCAGAT TACCAGGTCCAGAAATAATCTAAAGAGAGCATACAAAGTGAATATTAAATTGCAAAAATGGGGGAAAATA AAAACAAGAATAGACATGCATGCTATATACGCATATGCAGAGTGAGCGATCACTTGATGAGAATTTTTTG TAAAACGATTATCGCAATTTGAGCATCTTTATTGATGAAATACTTATAGAAAGTTTCTCAAATAAAATAC TACTAATATATTTATTTATTTTTTGTTTTGAGAGTTTTACATATATAGGGTTCTCATATATAGATTCTCA ATTATGAACCTTTTGTACTAAAAACTCTACTATTCTAGAAACTTACCTTTTTTTTAAAAAAAATGTGTGA ATACTATGGATGGAAATGTCTTTAGTTGCTATGAAAACTAATTTGTGTTATTTATACGGTTATACCTAAC GTTTCTAGTTATCACAAAAATTAATGGTGTATTAATGTATTTAATAAAGTAAGTTAAGTTGTTGCACAGA AAAGAAAGTGTAAGTTGGGTAAATTGTGTGAGCCAAAAAAGATTGTAAATTGTGAGTTTGTGACGCTGAA GAGTGAAGACAATTCAAAAGGTTATATCTTATATGCGACGGCGTAGGTCAGTTTTGGAATGGTAAACACG CGGCAAGTTTGGTTATCATCATTTGTCACAATCATATATATTTACTCATATAACATACATACATTGCTTT ATCGTCATCTTTGGTTCATGAATAAGAAAAATGTTCTCCCACAAAATATCTTTACCCTTTGGTTTATATT TTAGTTTTTTTTTTTTTTTTTTTTTTGTCAACCGATATAAATTAAACCTCAAAAGAGCCAATCCCGAGGG ATATTGTTTACATACGTGACATGATGCGGTACGGTACGAATCTTTCGTGCCAACTTATCCGCTTTTACAT TTGCACTACGAGAAATTAAAGATAAAGAGAAATTTGTGAATTCTTCCCTATCACTTTGCAACTCCTCCAA ATACACTGAAAACGCCGGCCATTCGGTTGGAGAAGACACCATCTTCACCAAGTCTGAACAGTCTGTAAAG AAAGCTACGTTCTGATTATCTGCTCCAATCATGCACTTCATCGCCCAAAGAAGAGCTTCCATTTCGGTAT GTAGAGGAGATAGACTTCTACGAACGTTGGCGGCTCCCATGGTTGGCGACTCTCCAAGAGATGATAGACA GAACCATCCTGTTCCTGAGAACTGGTCACTTGCTTTCCAAGATCCATCAATAAAACACCGAAAGCCAGAA AAAGTTGTATCTTGTGATACATCCCTCACCCGAATTCGACTATCTATAGACAAGGAACCATGTTTTTCAC TATGGAGCTCGACTTGAGCTTCCTGCCACGATTGAGCCTCTTTTACCGATAAGAGCAATATTTCCATTGG ATCTTTATCCACATTTTCAAAAACTTTTTCATTTCTTGCTTTCCATATATACCAAATTATCCATGGGTAA GAAGCCGAATCGACGCCTGAAGGAATTCTCCAAAACAAATGATCCAAATTCGTAAAAATTGAATTCGAAG GAAAAATCCTTGGGGCCGTAGGAATTTGTGATAGTGCCCAAATCTGCCTTGCAGGATGGCATAGAAAAGG TTTATATTTTAGTTTTAATATAAAAAAGAGGGGAAAAGAGTATTTGCAAGTTGCAAGTTTTTAAAATATA CATTAATCAAAAGACTGACATATAATTATTGCACTTATCATGTGACAGTTACGCTGTTAATCCCACATTT TTTTTTCTATTTTTGCTCTGTTAAATTCGATAGTTCATTATTTATGTCGAAGCAAACGATGTAAAAATGT AAACCACATATAATGATTTTGTATATAGGAAACTTCGTAGGAGGCGTAGATAAAAGAACTAGACAGCTCC AACCAAATACTCCTCCTCCTACTTAGTAATTTTTTTTGCTAAATACAGCTTATTAGTTCGTTATAAGAGT TACCAAGGAGTAGTAAAGCTAAAGTATTAGCAAGTTGCAATTTAGGATTTTCATTAATTAATTGAACAGT GAAGTAGTGGTGGGCCAGGACATGTTACCAAACACCAACAACGACCAAATCTAAAATATGTGAGCTAATT GGGCCACGTGGAAGCATTTTAATTACACGCGCCGTGCATACTTTTCAACCAAGGCACAGTTTCAACTTTC AACTAAGGCCATAATATTTTCTGGCCATAAAATATTCTTTCAGATTTAGAGAAAATGTTTTTTTTTTTGT TTTTTTTTTAAATTTTAGAGAAATGTTTGGTAACAGTTTGCTGAAATGATTTTGATTTGGATTGGTTGTA TTTAGCCAAAGAATCTTGTTCATTATTTGTTAATAAAATAAAAAATCTCAAAATGAGGAAGAAAACAAAA AGTTAGCATCAGTCAAATGGGGTTTGGACTCAAAGATAAAAGTGACAATATGCTGCACGTAAGATGTAGA CTAAAAGTCTTATAGAAAACTCTTGACATTATTAAAATCGAAGCATCTTGATTTGATATTATCCTTGTTT CCTTTTGTTGAGAACCTGACATCTTTTGTGGGGATTAGGTAGGACTATAGCCTCAAGGTTGATTGTGATC ATTTTCATCTTTTGTCAAAGAAAGTGACCATTTTATTAGTTGTATCGTGTATGAATTGAAAATTATCCAA CTTTCTCTTCTCGGACTTCTCATCACAAATTTACCGTTTTTATATATTGGACCAACATAAAATAGGGAAA TTTTACACAAAAAAGGATAGACATAACATTTTGGTAGTTGTATTAATTGAATTCATACAACTTTATCTTC TCTAACAACTTCGTATCACAAATCCACCCTTTTTATATAGAGAGAGTACATACATGAAGTCACACAATCT GATCAAAGTTTACAAAACAAGATAGACATAACTTATATTTCTACAAATTTGGAAAAGTACTAAAAGGTGT TCTTGGTCTCATCTATTGTTATCATGTTCTTGAGATAGAATAACATTGGTGAATTTTCTTGACTAATCTG TGTATCATCCTGTAAACGAAACTAGCTCTTTTCTTCTTGACAGACTCTTCACCCAATTTATGCTCTCGAA TCACAGTCACTTGACCCGGACCTTGGCTCACCTGCAAAATATATTAAAGAACCAACCATTTAAATAATTT CTCTAATCTGGTCTCAATGTTGTGAGTGGTGAAATTAACAAAGTAACATGATTAGCATTTAGAGTTAAAT GAGATAATAAATCTCACCTCTTGAGTTAATGACACTAGCTGGACTGTTGAGTCAGGAGAATGTTGAGTTT GGTCTATCTGATGATTTGAGCTAGCAAAACTAGCACAAGTGCTCGAAGTTCCAATAGAATTCTGTCATAT GAAACAAAAACTTTAGCTTTCTGATGTCAAATCTGAAAACAGAGGATTATCAAGATGCAGAGTAAAATTT TGCTTACTGTTTTAGGAGATATCAAATCAGAATCATTATCATCACTGCTATCATCACTGAAGACACCAGT TAACGACTTTAGAGGTGTGTAATCGCTGCGATGATCTTGCATAAACATGATATTCCTCTGCTCATCACCA TCATTATTCAACCATGTTTTCCATTCCTCCTCAATCGGTGTAGTTGCATCATCGATTTGAGATTCTCCCT GCACATTAGCAAAGACACCAGACTGACTTGAATTCTGTAATTCTTGGCTGTGAAACGACGAACCCTGAAA AAGGGGAGGAACACTAATGTCAGATATTTCAAAGTTTCTAAAGACAAAACAGAGAAAGTTTGAGATTCTC CCACCTCAGATCCTCCAGAACTGTTCACAAGAGGGATTAAAGAGTGAATCTGTTCAATTTCACTACCAGT AGAAGAAGAAGAGATCTCTGTCTCTTCACCCTTAAACTCAACTTTGCAGACTGTATACGTCATCATCTGT ACAAATAATCAAATCAAAACACGATCACCACCACAAAACACCAGAATTAGGTCAATTAACAAGAGAGATA GAAAAAACCCTAGGAATCTGGAATTAGGTCAATCAACAACAAAAAACCCTAAAAGTTTGGAATTGAAAAA TTACCTGATTAGGAAACAAGGACGTAGCGTGATACTCGTGCATAACCCAGTCGGTCTTTGAACCATCTCG ATTCTTAAAAACCAAAACCCTTTTCTCACCGATCTTCTCACGATTTCCTCTTTTGCGCATGACAGTCATT GTTTTTCCAGTTTTCTTCCAAAACCCAGAGTTTGTTCTTCTTCTCTGTTGATCACCTCTGTTATACTTCA TCTCCTTAACACTAAAGAAATACCAAACCCCATCTCTCGATTTGATCATCGACTTGGCTGTGAAAAAAGA GGGAGAGGAAATCAGAGCAAATGATTTCGAATTCGATACAACAGTTTGGGAAAAAATAACTCGACTTACA AGGTAAATCCCAAGGCTCGAAGCTACAGATATCGACTGTGCTAATGACTTCATCGACATGGCTAGTGTCA CTATCGAGATTTTTTGGCCGGAGGTAATGGTCGACGATCTCCTCGTCGTTTGGACGGAATCTGAAACCCA CCGGATTCATCATTGTCCGAGAGCGACTAAAGTTTCAGATAAAAGACAAAATTGGTGAGAAAAAGTCAAA ATATGTAGCAGAGAGGTTTCGCCATTAACGATGCTCTGCAAGTTATGTGTGAGTTTTTTTGTTTTTAGGA GGAAGACGAAGTGTGTGTTTATAATTTTTTATAAAAAGGCTGTGACGGGAGTAAGTGACGTCAACTATGA CCAGATGATGGGACCCACTAAGTGGATGACGTCATGTATGATGAAAGCAGGACACATCACACCAAGTTCA CATGGCGGCGGCTGGCACTTATCCTAATGACCCCACCATGATTTTTCCAATCCCCACACACTTGTTTTAT TTGTTTACACTTTCTGACAAATTCTCTAAATACTCTTTTTCATTCCGTTTTATTTTACCGGATTAATGAC ATTTTCACATTCCGATTTAGTATAATTTTTAACACGTTTTATAGTAAATACATAGTAAAATCACTTTTTT TAAAAGTCGGTAACGTGGAAAATAATAAAACAACTGGTAAAGAAAGATAAAATTTATCAAATTGAATGAT GACGACCGTTAAGACGTTCAAATAAAATAAAAGTTATGATTAGTCTAATGGCGGGTTTTGGGCTTAAACA TCTAACATGACAAGATATTCGCGTGGCACACATCTATAAAAGTCCAAAAGAGACTCGTGACATTGCTAGA ATTAAGATTAAAGCATCTTTGATTTGATGATACTGTTATTTTATTTTGTTGAACGAAATCTTTTGTGGGG TTAAGTAGGACTAGCTGACTAGATGAGTAGAGGTTGATTGCTACGAAAAATTGTCTATTTTGTTAGGTTG ATTGCTACAGCTTTTGATATCCATATTGTATCTCTAGTTTTCTTCCATTAAAAAGGAGGGAAAATCCGAA TATTTTTCGGGGATTCTAAAATAAAACAAAACAATACATAATTATGGGAGTTATTATGTCACGTTACTAC CAAAAAAAAAAAAAAGATGTGGTTTGACCATTTTGTTAGTTGAATCAAATGAAGTGATACATCTTTCTTT CCTCTAACCACATCTTATCACAAATTCACCATTATATTTTAATATATCTCAGGGCACACATACAATGTGT AAAAGTTACAAAACCAGATAGACACATATTACATACTACTACAGATTTTGGAAAGTACAAAATTGATATC ATGTTCTTAGGTGAATTTTCTTGACGAATTTTTGTATCATCCTGTGAAAGAAACCAGCTCTTTTGTTCTT GATCGTCTCTTGACCCAATTTATGCTCACCAATCTCAGTCCCTTGTGCATCATTATCAATACCGGTTCCC GGTGTTTTGCTCACCTTAAATCACATCATAGAACCCAAAATGCTGTGAGTACTGGCACAAAGTAGCTTGG TTAATTAGCAGTTTAGAATGGTTGGTCTTTAAGAAAAGGAGATGATAAAGCTCACCTCTTGAGCTAATGA CACTAACTTGATTGAGTTAGGAGATTCCTGCAAGTCAGTGATTTGGTATAGAGGATTTGAGCTACCAAAA CTAGGACAAGTGCTTAAAGTTTGAATGGAAATCTGTCGTATTAAACAAAACTATAGCTTTGTGAGAAAAA ACTGAAAACAGAGGAGATAGTAAAGGTAAAATAGGAAAATTTTGCTTACAGTTGTTGCAGAAATCGGATC AGAATCACTACCATCGGTGCTATGATCACTGAAGACACCGGTCAATGGCTTTTGAGGTGTGTGGTTGTTG CGATCATCTTGCATAGAAACAATCTTACTCTGCTCATCGTCATCATTAAAGAAGCCTTTGAAATCATCAC TCAAAATATTGCAGAAGTCCCTATCTAGTGCATCCACATCAAGAAAGCCAGAAAACTGACTTGGATTCTG TGATTCTTGGCTGTGAAACAACGATCCCTGAAAAAAGGAACAACGTAACACAGATGAAAAAACTATGTGT ACGAGATATGATTTTGAAGATTTAAAAGAGAAACAGGGAAAGTTTTTGAGATTGACTCACCTCTGTCTCT ACACTCAAAACTCCAGAATTGTTGGTAGGAGGGATTAAAGAGTGAGTATGCTTAATTCCACTACCAGTAG CAACTGAAAATTCTCTCCTTTCACCCTTAAACTTAACTTTGCAGAGTGTGTATGTCATTATCTACAGATC AACTCAGCATAAATGATTACCATAAACTCAGATTTTTCCCGTTTACGAGAAATAAAATCACGGTAAGAAA ACAACAACAACAAGTTAAAGAAGCCTAAACAAGAGAATCGAAAAATGACCTGATTAGGAGACGAGAACGT AGCGTGATACTCATGCATAGCCCAATCGGACTTGGAACCACCGTGATTCTTAAACACCAAAACCCTTTTC TCACCGATCTTCTCACGATCTCCCGTTTTGCGCATTATATCCATGGTAACGCCAGTTTTCTTCCAAAAAC CAGACTTGGTTTTTCTTATCTGTCGATCACCTTTACCATATTTGTTCTCCTTACGGCCGAAGAAATACCA AACCTGATCTCTTGTTTTCATCCTAGAATGGGCTGGGAAAGACAGAACATGATCAGAAATTACCGGGATG ATACAACAGTTGGGAACCAAAGAAAAACAAACACTCGCGTTAGAAAGACTTACAAGGTAAGTCCCAAGGG TCGAAGCTACAAATATCAACTGTGCTAATGACTTCATCGACATGGCTCGTGTTACTTTCGAGATTTTTCG GTCGGAGGTAAATGTCGACGATCTCCCCGTCAGTCGGACGGAATCTAAAACCCACCGGATTCGCCATTTT TCAACAGCTACAAAAAGGTTCAGATCAAAACTAAGAGAGGGAAAGATATCAAAATATGAAGTAGAGAGCT TTCTCTATGGTCGCTCTTCGCCCGCTCGTCTACAAGTTTATATCATAAGAGCAAGTCCAACAAAGGGATT TAAAGCATATCTTAACTGTTGAGAACCAAATTTAAAAAACTACCGCTGGTCATGCTCTAAGCAGGCAAGA TGGGTTTGTGCGCTTATATAAGGCACAATAAAGGAGATCCTAAAAAAAAAAAAAAAAAAAAAAATTGAGA TCCTTGGTAGATTTCGTCAACTATTTTACGGACAGGTTTTGGACCCCATAATGCAGATGTTGGGTCACAT AATTTCTTTCCTACCAGATCATCTTCTTGATACCCTACCCACTTAAGTCAAAGTGCGCTTAGTCATGTGA TGTGACAGTTACTCCTAACGTTAACGTCAATGGTTAATTTATCTTGAAGCTTATATAAGATCACAAAAAG TAAACCACATTGAAATTTGTATATAGGAAACTTCGTAGAAGTCGTAAATAAAAAGAACCAGCCACAAATA TAAGGATTTGCCGAGTATGGAACATAGCATACAATACAATGTGAATATTAAATTACAAAAGACAAAAAAA AAGAGGGGCGCTTACATATACATTCATAAATTCCTCAGCTCTACATACACACATCTGCGGAGTAGAAGAA CCACTTCAACTTGAAAAATGCTATACCATTTTCTTACTTATATAGGGTGTGACTGATAAAAAATGGACGA AATGAGATGAAAAATAAACGAAGAAAAGTGAAGAAAAGAAAAAGCAAAAAGCAGAAGAATTTTCTCTCTC ATGTATTTGAAGTGGGATGAATTCTTCCTTTTCACGTTGCTTTTTGAAGAATTGGGAAGAAACAAAACCA ATTACTTTTTATTGCTTTTTGAAGAATTGGGAAGAAACAAAACCAATTACTTTTTATCTGACTGGTTACA TTTAAGTACAACACAGAAGAATTCTTTTTCTTCTCACTATTTTTCTTCTATAGAAGACTACCAGTCAGAC CCATAGTTGTGATACTGTTTGTTTTTCAATGATGCAAATATGGATATTATAACTATTATTAAATTACATA AGTGTGGAAATAAAACCTAGCTATAAACACTGGTTCTTGAAAAAAGAAAGCATATATGCAGAGTGAGCTA TGATTTACTTGATAAGGAAGAGACCAATCGCAGTGACGATGAGTGTTGAAGGCAAACCGAATTTGAAATG TTTAGTGAAAGTGAGAGTGTATCCATGGCTCACTGCTCTACGAGCTTGCTCACACACTATCAGGTTTGCT GCTGAACCAAGCAACGTCAAGTTTCCAGCCACTGTGCTCACCCACGCCAGCAACAACCACGCCTTCTTCT CCTCCTCCCTCCCCATCGCTGATGCCGCCACTCTTGCTCCCAACAAAAGCACTACAAACGATTAAAAAAA AAAGAAAAAATAATCATTCGCATGGTCTTGTGGTTCCTTTTGAATCAAGAAATTGTTCGTGGAGCCAACC ATACATGTTTGGCTTTAAAAATAATGACATTACCGGTTGGTACATTAGAGGCTACATTGGAGAGGACAAG AATCACAACTGCTAGAACCGCGATTCCTTTGGCTTGATCAATTTTGGCATATGGCTCCATTAGGTCCCAT AGAGCGGTAGGGATACCAGTTTTGTTGAATCCATCAACGGTTATGAACATCCCGCAGAAAAAGATCAAAA GCGAATACGATACCTGCAAAAGTTACAACTTTGATAAGATCTTTGAATTGTATCTCTAAAGAGTTTAAGA AAATTTGGTTTTCACCTTCTCGAGAGACGGCCTTGCGTCTTTGAAATCAAGAACCACGAGTGCTAGAGCC GCGGTAATTGCGGTCCACGACATGTTTAAACCCATAAGCAGAGATATTAGCATTCCTAATGTGATGAAAT AAACACTTGATTTCCATAAAACTCTTCTCCATCTCTTGGTCTGGAACATATTGTTGGTATTATTGCTCTC TCCTTGAGACTCTGCGTCGTTGTGTTGTTCTCTCGACGCATTTGAATTGCAGCTTATTAACTCGCTCTCA CCCGCTGAACCCGCTCTGTTTCTGAGAGTCTCGGCGGCATCCATTCTCAAGTTCGAATCTTCGGATGAGA CTGGCGAAAATGTAGCTGGCGAGAACCTATGAGATTGGACATCTTCTTGGGCAACAACTTCAGAATCAGC ATTTTGTACTTCTTCTTCATCCTCTTTATGATCTGACAATAACCGCCAATACATACCGAGAAGAAGCATA GCGTTAACGGTAATACCAACAATCATCGCAGGAAAAACACCAAGAAGAAACTCCCAAAACGGGATCTTGC TTTGAACCGCAATAACAAGATTCTGCGGATTCCCAATGGGAGTAGCAGAAGAACCAATATTCGCACTCGT GGCTAAAGCGAGCAAAAACGGGTGAGGCGGGAGATTCTTTTGCCTAGCGATCTTCAACACAAACTCGGTT AAAACCACACAAGATGTATCGTTAGTAAACAGAGCGCTTGAAACAGCGGAAACAAGACAGACTCTACATA GCAAGTCTTTCGGACCTCTGCTTTTCCACGAAAGCAATGTGCCTAAGTACTTGAACATATCAGCTCTCTC AAGGTATATACTAACAACCATCGTTCCAAAGAGAAGACCGAGTATCGGGAGATCAATGGCTGCATAAGCT TGTTCCGGGGTTATCACTTGGAAGATAACCATTAGCATTGCACCGAACAGAGAACCGGCGGTTCGACCAA TTGGTAGGAATGGTACAGAGGGAAACACTGCTAATATCCAGAAAATGGCAAAGGCAACTGAACCTAAGAC CAGCTTTATTACTGGAGCCATTGCCATTTTCTTGCAAATATTTCTTGAAAGCTCTCTGATCAATGATCGA AAAGCATGGACTTTGTAAACCCTAGTTGGTGATTTTGATGAATCAAATATCTGATTAGAAACCCTAAGAT CTCTGATAAACTTGAGGACGTTGACCGATTCCCAATAGAAGAATCGTCCTGTTGAAAAAACAAGAAAAGG GCAATCAGTTACGAATTCAGAACGACAAGTATTGGATAATCAAACAAACTTGACCAGTTTCATGGTTAAA CATACAGTTTCTTAAGGAGGAATCGAAGGCAAATGAGTGACAAAAATTGAAGCAACTACATAGATAACAC TCAGAGTAAGCGAGGACTCATCTTTATTATATTGTCCCGAGTCCCCACGACGAACTTCACCAAACCAAAA AAGTCAGCCCTTTTCCAATTTTCTTTAGTTTCCAAAAAGTGAAGACAAGATACCGAGAAGAAGTCTCTCT GTTGTGTTCGCTGTTTCAGATCTTTCTTCTTCCCCTTTTTCAATTTTCATGAAATTAACAATTTGACCTG CCACGTCCTTTAGATTAATTAAAGTGTTTTCTTTTACATAACAGCCAAAATTGAAGTGTTATAACGAGTC AACAAATCCTACACGATACTGTATTTTAAAAATAATTAAAATTTAACTTCATCTTATTGGCTTAACATTT TAAATTTATCACTTTTACTCCACTAAAATTTGATTCATGAAAATAAATAAAAAATCTTTAAACAGACAAA ACTATACAGCACACTCCATAAGGTTCGTAAAGATGTCTCATTGCAAATCTCAATCTCATTGCTTCTTTAC ATTTACAAGAGCCGTAATTAAACAAAATTTAGCTACAAAGCATTTTGACTGGAGAGAATTGTACGGTGAG ACAAGCATGATCGGATATATTGTAATTCTCCGGCCACAATCCTTTCTCTGCTTCTTGTGGAAACAAAATT GCTTTATTCACTTTCAATCCGATTGCTTCATCTTCTCCTTCTTCTTTCTTACTCTCCATCACACTCTCTT TGCAGTTTCCAGGTTGATTTACCATCGTCATGTTCCAAATTTTCTGACATTACATAACACAACACATCAG AGTCTTGATTGACGTTTTAAACAAAGCTACCGGTTTGTGATTTCTGTTATGTACCAATTGGTTTAGTTTT ATTTACCTTAAGTTCTTCATAGTCGAAGACACCATTTCCATCAAGATCAGCTCGGACCCATAGCTCTTTT GTCTCTTCGAAGCTAAGTCCATGTGGAATACCCGTTAGATTTACCTACCACACAATATCAAATTTTGTTG TCAGCATAAAAGTCCATTCGTCTTTGAAAGAATTTGTAAAAATCTGGAAGAACTTATTTGATCCTTATTC TACTGTTATGATAAGTGAAATCTCTAGATGATCACAAAGTTTTTTCAGAAGTGTCAAATTCCAATTAGAA TGTGCAAATCTAAGATTTTTTTATCAGCATTTGTGGAAAATTGAGGTCTACTTTTTCCTGAAGAGAATGT ATTTACCTTTTGAAGTGCTAGGCAAAAGTCAGAGTAGGTTAGTGAATCACTGTGATTTTTTGCCCCAAGA AAAGTAAAGGCATCGTCCTCGGCTATGGAAGCTTTGTGTAGTTGATACTGGAAGAAACCATCAAGAGAAA TCAGAAATAGACAAAATGAACATGAAAATATCGTTTAGGAAAAAGTAAATTTGGAAAGAATGAGACAAGA CATGGTAAGTATGATGTGACTTTAACATTTTGTAAAGGTATAGTGCTTAATATCTTAGTTTTCCGAATAT CTCACCTTGATAATGCTGAAAACAGCTTCCACCCAACTTGTTCTCAATGGTTTTCTTGAATCACTAGGGT TACAGAGCCATATGAAATCAACTCCGCAAATATTTCCCCTGTGGTTTCTGTGGCTAACCCACTGAAGAAA TAAATGGAAGAATGACGGATAAGGATGTGTCTTTTACAATATGAGGCGTTTTAAATAACAGAAGGCTGGA GGAAGTTTTTTTGAAGAGATGTTTACCCTATGAGCATCACTGTCGGTATACTGATGAGCATCATCGTATG ATGAAATAAACCCTTGAGATCTCAAAAATTTGTAGACATGCCCGCGTTTGCTTCCATTCCAGTCACTGCA ATAAGCATAATTCAAAAGTCTGTGATTACATTGAACTGGCGGATGGACACAATATCAAGACTCAAAGACT AGAAGCTAACCCGCAGAGAATAATGGGCATGTGATTAAGTTTATTTTCCTTTTGGTAAGCTTCCAGATAT TCAAGAATTTTGTAAACCTGTGAAAAGAAGCAATCAAATTAAACTATCACAAGATTCAAGGTGAACGGTC TCAAAATGCAAAATGATGGAAAGGATGACCAACCTGATGCAGTCTTACAATAGACAAACTAGAATCGTGA GGAAACAAGAGGTGAGTGTTCACTATAATAACTTCTTGTTGAACGTCTTGCTTTCCATTAAGCGGAAAGG GAATAACTGTTTTGACATGTAAGAGCTGAGCAACACGGTCTCCAAAATCGTTAAAGAGCAGCTCCCGGTA ATTTACAACTTTAAAATGGTCCTTATGAATGGCTGTTAAAAGACCTGTAAGAAAGATATTCAAGTCCACA AATGAGACATCAAAAGCGAAGAAGCCTATCTTTCATCGCATGCGATCAGCTAGAGGAGTCCAAACATATA GCATTGACTTTGAATTTTAGACAATATTTCTACTCCATCCATAAGATTGCCTTTTAATACGGCATCCTAC TAACAACGACGTTAAGATCATATAAACACCAACAAGAACACTTTGACACCAGAAAGATCCTGAACTACCA GTTTCCAAGTCATGAAAAGGTATAGATTTGGACAACCCTACACTATTTACTGAAGCATATCAAGCAGTAA CATTGAGCCTCTTAACTTTCTAATGACTCTGGACAGAGACCATATTCAATCAAAAACATGATAAAAAATA AAGAATCTTACCATCACCACGACTGTTTGTTCTAGCCAACTGATAAATAGTGTAGCCTGAAGATGAAAGC TGGTGGTGGTACATGTTCACTAATTCCTCATTCCCAACCCAAACTTCCTACGAACAGTCACAATTGCTAA GAGTCAGCTTAACAAAAAAAAAAAAAAGTCAAAATTTGACTCTTTCTAAGAGACAAAGTGTGTACCTGGA GACAGATAACTGAAGAGCGTTGATGGAGTAACAAATCTAAAATCCTCTGGTTACGAGCTAACCAAAGCGT GCGGAAATCGCTCTCTCGAGTGCTATGATTCTGTTAATAACACCCAACACAATCAACCAATGTCGTCGAT TCCAGAATCAACAAGGTAAAGAGTGAAGAAATCAGAAGAATAGAAGCAAACCTTTTGATCAACGCGTTTA TAAATCGGAGCCAAGATATTGAAAGTGGTACAAGAAATATTCGATTCCACCATTGAAGAAGCTAAGTTGG AGTTGAGTCTCTGCACAAACAAACAAACACAATCGGCGAATCAAATCTCAGAACAAACAAAAAAAAGAAG GAAAGTGGAGGAAGAGCGACGACGAACCATAACTGAAAGCGGCTTGTTGTTTCTGCCGGAGAGTAGACCG GAAAAGTAGATCGGAAGAGGAACAGCAGCGAGGACGACGAAGAGGGAGAGTGGTGAAGAGAAGGAAGGGA TGAATCTAGACCGTAGAATCAAGCTCAGCCTGCTTCGATTCTGATGGCTTTGCATTTGAGTTTTTCTTTC GAATTCTCTCAACAGATCTTTTTTCTCATCTTATAATGAATTTCTATCGGATTTATTCTTTTTGGCAGTA CTTGATTATTATTATTATTATTATTTTATTCATAAGTTAAAAAAAAATATGAACCGTTGGTTTCGTAAAT ATCTAATTTCAGTGAAATAAAGACAATGTAATTTCTTCATAATTGCAATGAAATAAAGAAAAATTAGTCT ATTGACCAATGGTAGATTTTGGTATTTTTGTTTTGGCCATTCATGGAAGTTTACAACGATCATAACGTTT TAAATCGTACTTGTATTTTTTGTAGATTTATGAGAAAAGGTAAGTACAATAAAGAGTAATTGCAGGGAAG AAGAGGGATATTAATGATTGGAGAAGGAGAACCGCGTATCAGGCTGGGCTATGTCGGTTTCTCATGACAC GGTCTTGTTGTATCACACCGATTATATATTATCGTTTTACAGCAATGTTTATATCATGCCTACAAAATAT AGGGATTCAAATTGCTTAACCACGTTGTATTCTTCTTCTTCTTCTTGTCCAACTTTTTCTACGAAATTAT AGCAAATCAAATTCATGCTATTTATTGAACGCAAATGTTTAATTTTCAGACAAATCAGATTCTTACTTTT GCTGTTCAAACCCCAAAATTCAATGAAGAAATTTTATAATATTCATCAGATACTGAGCGGATTTTAAGCA AAAAACCAAGAGAAGTGATAGATACTGAGCGAGTTTGATATGAAGATTATCTTGGCCGGAGGTTGATTAT CGTCTTTCCAACGAAGCAACTGCAACACCATTATATGGATATTTGGTGTCTCGTCATCAGAGTCGTGCCA ATGAATTTTGATGCTATAAACAAAAAAATATAGTTTAATATTTTAATAAATAATGTAAACATAACAAAAA AATTATTTATTAAAATATACACATAACAAAGAAGACGGAAAGCTCCTCTCTCACAAGCCAGGCTATCTCG CCACCTGCTATACCTTTGAATATTTCAAAGGTCTTTTTTGAGAAGTATTTCAAAGGTCCGTCTTCTTGAC ACTACCGGCGACAAGAGACATTTTTACAACGAAAGAGTTCGATAATAGAAAGGTTAGTAAAAAAATAAAA ATATTCTTTGTCGTAATTATTTCAAAGGTCATTTTTGAGAAGTCAATAAAACTATGTTTTGTTTTGTTAA CAACATGCATTATACCGTTTGATTGATAACATAATAACGACACTAGCACATTTTACTAGTTTACACATTA TAATCAACCTAATCGTTTTTGGTCATATTTTTGTTCTAAATTATTTATGTTTTGCTTAAAATTTGCTTAA TTTATTATTAAACTTTAAATATTAATTATTTTTTTTGTTATGTTTATAATATTTATTAAAATATTAAATC ATATTTTCGCGTATGGTATCAAATTTTTTTGGCACGTTCTGTTTGGATGTTATGTCACAAAAATTAAAAA TTTAGTACTTACAAAAAAAACAAAACATGGTTGAAAAAATCTTTCAATCAATTACTAAAAAAAAAAGTAA ATGAAGAAAGCAATACCTCATGCAGCAGCTTGTGATATGATCCAAAAACAAATCGGGACAGCTAAAGGTC TTGGCTGGTACAAGCAAAAACTCGGTCTCCTTGAGCCCATCCAGCTTCTTTCAGGTACTACAACATATTA AAAAGATTGCACATGTCAAAATGACTATTACCATATCCAAATTTCGATTGTTTCCTACTTTCCTTTTATC TTCAACAGTTGTTTCCTTTTTCTTATTTGAGAACGTTCGAGAAATCTGGACCGTCTATTTTCATCATATT GCAACTGTGAGATCTGATGGTGATTATCTAATCTAAACGGTAAGTTTGTTAGATTATGTGGGACCGGGAC GATCTATTTCTTAAACCTCTGTTACAAACAAACACTCATGTCTATTAGTATTAGGAAATAAGAGATGGAT ATGATGATGATTCCGAACCAATTCTCAATAAACTGTTTATAATGGAACAGAAGCAGCAGTGATTGATGAT CTAACAGACATTGACATCAGGCTACCAATGCTAGTCTTCCTGTGGGAGATAGAAGCGGCCTTGGTTATGC CGAGTTTTCTGTTGATCTGTGTTTATGTAATCACCCGAGGATGCAAACAATTAATCCCATCAGCTAAAAG ACTTGTTTGATTCAAAACAGACTTTAGCAGATCATTTGTTTTTCTTATCTACAGAACATAATATATTCTT TTTTTGGTGATATTATGATTGGGAAACATCCATTTCATTTAACCAGAAAGCATGGCAATCTTTTCTTTGA ACAAATCTCCATAAATTACAGACAAAGATAAAGCCGGAAACAAGAAAATGTTGCAGATAAAATCTAACAA AAGAAAGAACAATCGAAAAACTCTTCTTCTCCTTGTAATTTGCTCACAACAAAACCTCTTCTTCAGAGCC TCTTAAAGTGGCTTTCCACTTGTCTTGATATCATTTCTGATTGCTCCTTGAATCATCTTAACGATCAAAT ACTGCAAAGTAGAAGAAAGGATTTCACTTGTTTACCAAATTCGAACAAGACAATAAATCAAACTGTGTCT CTTTCTTACCTGAGCGCCTATGATAAGAGGGATGAGTTTCTTTCCTTTATCATCAGAGTAAGATCCATCT ACCATCTTCTTGTCTACATGAATTGCTTTCCTCTGGTTTGTTGCTACATCAGTTATCGCCTTAACCAAGT TCGGGATCCACGCTTCACCATTTGGAAGAGCCTGAACCGAGAGCAGGTAAGCAACTTTTAACAGTCAGTC TCTCTCCAAGTCGGATCAAATCAGAGATTCGAAAACACAAACCTTTTCGTCCTTATCGTTCTTGCTGCAT CTTCCGCTGTTCTCTGCATAGACTACCGCGATTGCAGAATCCTACAAGCCAGTAAAGAATGAAACTGATT CTTGCTACAATGAACCAAACATACATTGGTATAACAATTTTCGGAGACAGGTATATGTATAAATAACCAT ACCTCAAACTCTTGTTTTCGCATCTTAGAACCAGCCCGGATAGTTTTGAGGAGAGAATCTGATCTCTTGG AGGAAAAAGTTTCGTAGGAAAGTTCATCGGGAGGGGAAAATTGAGCATGAGTCAGAACAAGCAAGGTTTT GCACCATATCTCTTTTCCAAAGGTTTGGGTGATTGCTATAACAACTTGCTTATCTAGCTCATCGACTCTA TACACATCCAAACGATCAACATAGAGCAAGACATCTATTGTTCTGTTCACAAGAAACCTGTCCAAAATCC GAGAAACACAACAACTATCGTAAAACTTCCACACACACTCCAATATACAGCTTCAGCGTAAACCAGATAC TCATAATTCACAATTTCAACAGAAACCCACAAGTAAACATGTTAACCACATATATACTTAGCTTAATTAA TTCAAAAACGAATGAGATAATCCTATATGCAACAATCAACGAAGAGATATTCCAAAAGAGTAGCTACTGA CCCTTTGATTAACTCGAGAGCTTGGTGATTGACATATCCAGCTTCCACAAGTCCAGGGGTGTCAATAATG TTGATAGTGAACCCTCCCATTGTTCTTGAAACCATCACTGGTCTCAATCCTTCAGCCTACAAAATCAACA AAACAGAGCCATCAAATATCTTGAAATGACTACTCTTTCTTAATCCAAATTAAAAAAATCAAGCTTAGGG AAACTGAATTACGTACTTGGAAAGGACTGACACGGACGACTTGTTCGCCGATAAGAGAATTGACAGTGGA TGATTTTCCGACACCGCCTTTACCCAGAACAAGAACTGTCATTGAGTTCATATCCTGCAATTACAAAAAC CTCCCATCATTATCTCCTAATCACAACGGAGAATCCGAGAAACCGACTTAAGCACCAAAGAAACAGGAAC AACAACAACAAAACACACCTTTTGCTTCAATTTTCCGAAGAATTCAATCAGCTTTTCCTGGGTAGCTGCT GGAAATTGCTGAAACCCAACCCATTCACGAACGAGAGACCCCATCACTCCTAAACCCTTCAGCAAAAAAA TTCTTTTGGTAAATAATCGCTGAGTGATGACGATGATGATAATTAATTTCGAAAGCGATAACGTTTTGGG AGATTTGGAGGAGCTTACCGTTGTGTGAGGAGCGTTTGAGGTTTTTGGAAGAAGCTCTCTCGATGTGTTC CGCAGAGAAAAGCTAAAGAATGTGACCTTATCGGTAATTTGTTTAATAGTTCAAATTATTTTCACTTTTA CTCCTCTATTTCTTTAGTGTTTCTTTTTAGTGCCTTCAAATTTTGAAAACTAACAAACTCAACCCCAAAC CAAATCCAGTTACCAAGTTGCAGCATTACACTTCATATTTTCATGGAAGACTACATTAGGTGGAACATTG AATTAGCATAGCGTCACGGGAGCTCAAGCGATTCTCTGAACCTTTCTTCGCTTGTAAGTCAAGGAAAACA AATGGTCACTATTGGCTTCTCGAGCATGATTGTCTTCGCTCAGGACCCCCAGCGGTTTTCTCAGAGCCTT GGCTTCCCTCTGAAAGTTATTACTAGACGAAATCCTCTTGCTCTCTGTTGTTTCAGAGCCTCTGTCAACA GTCCTAGGCTTAAAACCAGGAGACTTCAGGTGGTACCGGACATATTCTTCTTGCTTTAGAGGTATATTCT GTTCTGTGATGGAGTAATTTGAAACACGGAGAGCACTGGGAACAGTGTGTGTTGGATCATGAAACACCGG TTCTGTACCTTGGATTGATCTTTGTGTAGTTTCCAAATAGGTTAAGAAAGGGTCTGGGATAGAACAGCCA AGAGTTCCGTAGGGTGGTTTCTCAAATGTCGTACCTAAGTATGGAGACGCTGCAAATCTAGTACTCTTTG AACCGGTTTCATGGATTTGCAGGAGATTGTTTCCTGGAGCTACATAGGGTTTCCTGAGGATGGCAGAAGA AGATTTAGGGACTAATTTGAGAACACCCTTTGGCAAAGTCTGATGATGATGGCCAGCAGAAACTAAGCTG GAACCTTGATACCGGAATACTCCTTCCTTGGTTATCTTTATCTTGAGACTGTTCTTGGAGCTGCCACTGC GAGGGAAGGTTAAACTTTTCGATCTATTTCTTTCCACGGGTTTCACTACATTGGGAGTTTTGAATCTACA TGTAGCACTATCCATTTCCTTAGATGGAACTCTATTGAGGTCCAGTAGCTTGAGATTACCGGTTTGAGTT CGTCCTGACCAAATGAGGAGCCTTGAGTAATTGCCCAATTTATTTCCATACTGAACCCACACCCTTTGCA TTTCGGTAAATGTCCTGATCAGCTTTTCATGATAGAACTTTAAAGAGTAGTAATACTTTCTCCTCTTGAC AAACATAACACCTTCTTTGAAACAAGCTACCTTTGGAGTAAACAATCCACCTAGCAAATTCTTGTAAAAC TTATCCTCTGGATTCCCAAAATATAAATTGGCACCATCAAGAAGTTCCTGCATCGTCAAACTGAAAGTCT GTGGATCCATATCTGGCAGAAAACATGAGAGGAAGAATCTTTCTTCTTCAGTCAGAAGTGAGTTCCAAGT CTCAACAGACAATATTCCCGTTAAATCTGGTAGATCGTAGAGCTCGTATGGTATGTTACAGAGCTGACCT TCAACCAAAGCTAGCTCACAGTTTACTTGCGCAATGTCGTAATCATCAGAGTCATCATCTTCAGAGTCTA GCCCAACTGTTTGATTCTTATTCATCTGTAGTTAACCACTTACTACCCTTAAAACACAAGTACTTCAAAT CTCCAACCACAAACTCAGTAGAAAGGAACACAAGCAGGAGATACCTAGATAGAAAATGTTAAAGACTCAT CATCAGCAATTCACATTACAAGAATTCTACTACAATACAATGGACAGCGAGAAGCTGAGTATGTTACTAA TCAGAAATCAAACGAACATAAATAGCATTTTACTCACTGATTTCAGCAACAACAACACTAAAGGCTATAT AAAACACGAAATATACATTGTGAGATCAATGAAGCACTCAAAAAGAAGAAGATACACAACACCAGAAAAT CTCCCAGATCGGATCAGCTACAAAGCTTAAACGTAATCGATCGCGAACTCAATCAATAACCAAAATCAAA AGCTCCAACAAGGCAAATAACTAGAGAGCGAAAACCCTTGGATTTGACAACAAAAATGTGCAGACAATTT GAATAAAAAACAAGTATCATACAAATCTCAGCACAAATCAGCTCCAATGAGTTTCAAAAACCTACCGGAA CTAATAAAAAAAAAGAATCTCGAGATATTCAGAGAAATCGATCGGAAAGCGTAAAAGACGAGGAGCTTAC CGGCTCTAAAGACAGGTGAAATTAGCAGATTAGGGTCGAAGAAACCATATCCCTTTGGCTACAGATACGA ACTTCATCGCCTTCAAAGATTCTCTGCTTCCTTTCTAGAGATTTCTATGGCTTTTCGATCGATGCGACAG TAGAGTAGAGACTAGAGAGACTAATTACTGTTACACTTGTATTTTGATTTCTTTAATTAAAGCCGCCTAA AGTAACTAATGCCTTGATTACTTTAATTAATAATCATTTTTAAATTGTGATTTATAATCAAGTTAGACAT TACTTCACAAATAGTTTGGGCCTGGAAACGTATAGGCCCATGTAAACTTTAATAAAAGAATCACCTTGCA GGTAAGTATAATATCCTGATATTATTATTTACTTGATAGAATGGGCCTATAATAAAAGAAATCACCATTA AAGAATTATAGGCCCATGATATCAAGTAAATATCAAGAAATGATGATTAATGATCAAGTTAGACATCATT ACTTGATATTTTGGTAAGTAGGATCAATCAACGGTCAGGATCCTTTTAGTAAAATCATGTGTCATTTTCA GTTTGTCTAAAAGATAAGCCTTTCACTTTCTCTCTCTGTCTTATTAGAAAAGAAAATTTGTACCGTTTCC AAAGTCTGAGCCAATCATTGTGTTGATTCTGGAATTCTTTGTGGGAACGAGAAATTTGTACAAGGGAGAT TCATCATGGCTGATAGTTGTTGTATCAGACTTCACTTATTAGCCTCTGTTTTCTTGCTCTTATTTTCATC CTTCAACTTGCAGGTACTTTAAACTTTCGTAATCTGTGTGTTAAAATTGCTTACTAAGATCGATTTGTTG GACTCTTGAGCTACAAGTTAAAAAAAAACAAAATAAATCAAACTTTGTGATTTTTTTCTCTGCGTATCAA TCTAAGACATATGAAGGGGAAATGTATATATGGTTTTTTGTAATTGTTTCTATATCAGTAAAGTTTTAAA CTTTTGAAGCTGGTTTATCTCTTAATCTCAGGGTATTGCAGCGGAAAATCTTTCCAAGCAGAAACTGACC TCACTGATTCTTCAGGTTTTGATCTTAATCCACACAATTATCTGTATTGTTTTCGTCTCTTTTAGATTGC CTAAACGTTGATGATCAACTTTTGCAGAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGTT GGAAAGCTGCTTTCAATGATCGGTTTGCAAATGCCACCGTGAGTTTATTATCACCTCCATGCTCTTATCT CTTTAAGAGCTACGTTACTTATCATTGTTCCTGAAAGTTTGTGTTTTTGTGTATGTATGTGCAGGTTGCA GAGTTTAAGCGACTCCTCGGTGTTATACAAACACCAAAGACGGCATACTTAGGTGTACCTATTGTAAGAC ATGATTTATCGTTGAAGCTTCCTAAAGAATTTGATGCTAGAACCGCTTGGTCACATTGCACCAGTATTCG AAGGATCTTAGGTCGGTTTTAATCTCTTAGCTTCCACTATCTCTGTCATTAACCCAATGATTTACTGACT CTTCTTATGTTTTGTTTCAAATTATCTCCCTCTTTATTGCACTAAAGATCAGGTGAAACATCATTTCATT TGAGTGGGTTATATATTGAACAATGTGTTACTCTGGTCGACGATAACTTTATGGTTTTGGTTTCTTTTGG GTCATTGTGGTTCTTGCTGGGCATTTGGTGCTGTTGAATCACTGTCCGACAGGTTCTGCATCAAATATAA CTTGGTAACACAACTTTCTCCATCAAGCCAAGATTGACGATTGCTACAGCTTTTTAATGTAATTGCTCTT CTTCCCTTGCAGAATGTTTCCTTATCTGCCAATGATGTCATAGCATGTTGTGGATTACTTTGCGGTTTTG GTTGTAATGGTGGTTTCCCAATGGGTGCATGGTTGTACTTTAAGTACCACGGTGTAGTAACCCAAGAGGT AAATTCTCAGCAAAGAACAAATAATAATGGCAATGTGGTCAAAGTGTATTGAACTTTTGTAATGCTGTTG GTTCTTCAGTGTGATCCATACTTTGACAATACTGGTTGCTCTCACCCGGGATGTGAACCCACTTACCCTA CACCAAAATGTGAGAGGAAATGTGTAAGCAGAAACCAGCTATGGGGTGAATCAAAACACTATGGTGTCGG CGCATACAGAATCAATCCTGACCCTCAAGACATTATGGCTGAGGTTTACAAGAATGGACCTGTCGAGGTT GCTTTTACCGTTTACGAGGTAATGAAAAAGATTTTTGATTGATCAAACCATATTGATTATATCTTGGTGA AGTCCACATTTTCATGTATCTTTTTGTTCTTCAGGACTTTGCACATTACAAATCAGGAGTATACAAGTAC ATAACGGGTACTAAGATTGGAGGTCATGCAGTTAAGCTCATTGGCTGGGGAACTTCTGATGACGGCGAAG ATTATTGGGTATGAATTCTCTGGATTTTGATTCAGATCAAGCTGAAAAAGTAATAACATTTTCTTGTTCG TTGTTGCAGTTGCTTGCAAATCAATGGAACCGAAGCTGGGGTGATGTAAGTTCTTCTTTTCTCCAATCAA AACTTTTAAATTAGACCTTCCAAGTAAACAAAAGCACAGAACCTGAGATAGAAAATGTGAAAATCTCAGG ATGGTTACTTCAAGATCAGGAGAGGAACGAACGAATGTGGCATTGAACAGAGTGTTGTAGCTGGTTTACC TTCAGAGAAGAACGTATTTAAAGGTATTACCACTTCAGATGATCTTCTGGTTTCCTCAGTCTAAACAAGA CGATGTGTCCCTACTTCTGTAATATATCATTTGCAACTGTGTTGTAAGTTTAATATACCATTGAAAGAAT CACCTTCAATCAAAACAAAAGTATGTATAGCTTCTGTTAATATTCAATTTTACATGTTACCATGCAAGAG GACTGTTACAGTGTTTATTTGGTTTTGGTAAATTATAGCCACCTAAAAGTAACGCCTTAATTAATCATTT TAAATTATGATTAACAATCAAGTAAGTGGAACAAATCAACGGTCAGGATCTTATCCTCGCAGTAATATGA TCTGTCATTCTCTAACTAAAAAGATAAGCCTCTCTCTGTCTCTTCCTAGAAAAGAAAACTTTGTACCTTT TCCAAAGTCTAAGCAAATCATTGTTTTTGATTACTGGAACTCGTTGAGGGATTGAGAAAAAAATAATCAG AAGAGAAAGATCCATGGCTGATAATTGTATCAGACTTCTTCACTCAGCCTCTGTTTTCTTCTGTTTAGGG CTTCTAATTTCATCCTTCAACTTGTTGCAGGTACTTGAACCTTCATAATCTGTGTTTGAAATTGCTTACG AATATTTATGCATGTTAGTGCTTTCTTCTAGTTACGATCTGTTTCGTAGCCTTCTCGGGTTTTTCTGGGT TTGATCATGTTTGCTTATTTGTTGGACTCTTGAAGCTAGAAGTTTTAAAAAAAAAAATCGAAATTTTCTG GGTCTTAATCGAATCAATGAACGGGAAACATATTTGTGATATCAGAATTGTTTAAAGTTTTAAACTTTTG AAGCTGGGTTGTCTCTTAATCTCAGGGTATTGCAGCTGAAAATCTTTCCAAGCAGAAACTGACCTCATGG ATTCTTCAGGTTTTGATCTTAATCCACCCAATTTTCTGTTTTGTTTTCGTCTCTTTTAGATTGCCTAAGC GTTGATGATCAACTTTTGCAGAATGAGATTGTAAAGGAAGTCAATGAGAATCCAAACGCTGGATGGAAAG CTTCTTTCAATGATCGGTTTGCAAACGCCACTGTGAGTTTCTGATTACCTCCACCATTCCTTACATATAT CCTATCAATGCTTATCACTGTTCCTGAAAACTTGTGTTTTTGTGAATCTATGTGTAGGTTGCAGAGTTTA AGCGCCTTCTTGGTGTTAAACCAACACCAAAGACGGAATTTTTGGGTGTGCCTATTGTAAGCCATGATAT ATCTTTGAAGCTT genometools-1.5.1/testdata/U89959_genomic.magicmatch000066400000000000000000000001531211610345200222300ustar00rootroot00000000000000063b1024d68e26716b7f38caf958316f gi|1877523|gb|U89959.1| Arabidopsis thaliana BAC T7I23, complete sequence genometools-1.5.1/testdata/U89959_ginums.corrupt000066400000000000000000000000331211610345200215070ustar00rootroot000000000000008690053 1 10 -8689616 1 10 genometools-1.5.1/testdata/U89959_ginums.out000066400000000000000000000005741211610345200206320ustar00rootroot00000000000000>8690053 1 10 gi|8690053|dbj|AV529770.1|AV529770 AV529770 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL47a02R 5', mRNA sequence ACTGTAGCCC >8689616 1 10 gi|8689616|dbj|AV529333.1|AV529333 AV529333 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL34a01R 5', mRNA sequence TACGGAATTC genometools-1.5.1/testdata/U89959_ginums.txt000066400000000000000000000000321211610345200206270ustar00rootroot000000000000008690053 1 10 8689616 1 10 genometools-1.5.1/testdata/U89959_sas.gff3000066400000000000000000002667631211610345200201520ustar00rootroot00000000000000##gff-version 3 ##sequence-region 1877523 1 106973 1877523 gth gene 1074 1540 1 + . ID=gene1;Target=8721428 1 303 + 1877523 gth exon 1074 1171 1 + . Parent=gene1 1877523 gth five_prime_cis_splice_site 1172 1173 0.866 + . Parent=gene1 1877523 gth three_prime_cis_splice_site 1257 1258 0.994 + . Parent=gene1 1877523 gth exon 1259 1354 1 + . Parent=gene1 1877523 gth five_prime_cis_splice_site 1355 1356 0 + . Parent=gene1 1877523 gth three_prime_cis_splice_site 1430 1431 0.745 + . Parent=gene1 1877523 gth exon 1432 1540 1 + . Parent=gene1 ### 1877523 gth gene 2779 3355 0.84 + . ID=gene2;Target=8732738 1 337 + 1877523 gth exon 2779 2801 0.696 + . Parent=gene2 1877523 gth five_prime_cis_splice_site 2802 2803 0.459 + . Parent=gene2 1877523 gth three_prime_cis_splice_site 3041 3042 0 + . Parent=gene2 1877523 gth exon 3043 3355 0.84 + . Parent=gene2 ### 1877523 gth gene 3025 3351 1 + . ID=gene3;Target=19837778 1 327 + 1877523 gth exon 3025 3351 1 + . Parent=gene3 ### 1877523 gth gene 3041 3651 0.996 - . ID=gene4;Target=8732878 1 536 - 1877523 gth exon 3041 3550 0.996 - . Parent=gene4 1877523 gth three_prime_cis_splice_site 3550 3551 1 - . Parent=gene4 1877523 gth five_prime_cis_splice_site 3625 3626 0.741 - . Parent=gene4 1877523 gth exon 3626 3651 1 - . Parent=gene4 ### 1877523 gth gene 3077 3506 0.974 + . ID=gene5;Target=19843099 1 426 + 1877523 gth exon 3077 3506 0.974 + . Parent=gene5 ### 1877523 gth gene 4768 5357 0.987 - . ID=gene6;Target=19871046 1 591 + 1877523 gth exon 4768 5357 0.987 - . Parent=gene6 ### 1877523 gth gene 9505 10058 1 + . ID=gene7;Target=8682455 1 554 + 1877523 gth exon 9505 10058 1 + . Parent=gene7 ### 1877523 gth gene 12024 12542 1 - . ID=gene8;Target=8688760 1 519 + 1877523 gth exon 12024 12542 1 - . Parent=gene8 ### 1877523 gth gene 13014 13465 0.881 - . ID=gene9;Target=2748705 1 459 + 1877523 gth exon 13014 13465 0.881 - . Parent=gene9 ### 1877523 gth gene 15955 16603 0.997 + . ID=gene10;Target=19878194 1 649 + 1877523 gth exon 15955 16603 0.997 + . Parent=gene10 ### 1877523 gth gene 17165 17684 0.985 + . ID=gene11;Target=19798999 1 396 - 1877523 gth exon 17165 17247 0.97 + . Parent=gene11 1877523 gth five_prime_cis_splice_site 17248 17249 1 + . Parent=gene11 1877523 gth three_prime_cis_splice_site 17372 17373 0.994 + . Parent=gene11 1877523 gth exon 17374 17684 0.989 + . Parent=gene11 ### 1877523 gth gene 25221 26100 1 + . ID=gene12;Target=8690053 1 521 + 1877523 gth exon 25221 25310 1 + . Parent=gene12 1877523 gth five_prime_cis_splice_site 25311 25312 0.993 + . Parent=gene12 1877523 gth three_prime_cis_splice_site 25508 25509 0.439 + . Parent=gene12 1877523 gth exon 25510 25626 1 + . Parent=gene12 1877523 gth five_prime_cis_splice_site 25627 25628 0.998 + . Parent=gene12 1877523 gth three_prime_cis_splice_site 25711 25712 0.996 + . Parent=gene12 1877523 gth exon 25713 25841 1 + . Parent=gene12 1877523 gth five_prime_cis_splice_site 25842 25843 0.63 + . Parent=gene12 1877523 gth three_prime_cis_splice_site 25914 25915 0.926 + . Parent=gene12 1877523 gth exon 25916 26100 1 + . Parent=gene12 ### 1877523 gth gene 27900 28989 1 + . ID=gene13;Target=8726341 1 499 + 1877523 gth exon 27900 28003 1 + . Parent=gene13 1877523 gth five_prime_cis_splice_site 28004 28005 0.999 + . Parent=gene13 1877523 gth three_prime_cis_splice_site 28267 28268 0.995 + . Parent=gene13 1877523 gth exon 28269 28424 1 + . Parent=gene13 1877523 gth five_prime_cis_splice_site 28425 28426 0.936 + . Parent=gene13 1877523 gth three_prime_cis_splice_site 28505 28506 0 + . Parent=gene13 1877523 gth exon 28507 28579 1 + . Parent=gene13 1877523 gth five_prime_cis_splice_site 28580 28581 0.989 + . Parent=gene13 1877523 gth three_prime_cis_splice_site 28684 28685 0.994 + . Parent=gene13 1877523 gth exon 28686 28753 1 + . Parent=gene13 1877523 gth five_prime_cis_splice_site 28754 28755 0.999 + . Parent=gene13 1877523 gth three_prime_cis_splice_site 28890 28891 0.999 + . Parent=gene13 1877523 gth exon 28892 28989 1 + . Parent=gene13 ### 1877523 gth gene 28990 29817 1 + . ID=gene14;Target=8726286 1 477 + 1877523 gth exon 28990 29037 1 + . Parent=gene14 1877523 gth five_prime_cis_splice_site 29038 29039 0.907 + . Parent=gene14 1877523 gth three_prime_cis_splice_site 29132 29133 0 + . Parent=gene14 1877523 gth exon 29134 29242 1 + . Parent=gene14 1877523 gth five_prime_cis_splice_site 29243 29244 0.84 + . Parent=gene14 1877523 gth three_prime_cis_splice_site 29329 29330 1 + . Parent=gene14 1877523 gth exon 29331 29477 1 + . Parent=gene14 1877523 gth five_prime_cis_splice_site 29478 29479 0.983 + . Parent=gene14 1877523 gth three_prime_cis_splice_site 29569 29570 0.998 + . Parent=gene14 1877523 gth exon 29571 29618 1 + . Parent=gene14 1877523 gth five_prime_cis_splice_site 29619 29620 0 + . Parent=gene14 1877523 gth three_prime_cis_splice_site 29691 29692 0.993 + . Parent=gene14 1877523 gth exon 29693 29817 1 + . Parent=gene14 ### 1877523 gth gene 30278 31355 1 + . ID=gene15;Target=8690080 1 524 + 1877523 gth exon 30278 30391 1 + . Parent=gene15 1877523 gth five_prime_cis_splice_site 30392 30393 0.985 + . Parent=gene15 1877523 gth three_prime_cis_splice_site 30475 30476 0.918 + . Parent=gene15 1877523 gth exon 30477 30562 1 + . Parent=gene15 1877523 gth five_prime_cis_splice_site 30563 30564 0.938 + . Parent=gene15 1877523 gth three_prime_cis_splice_site 30656 30657 0.973 + . Parent=gene15 1877523 gth exon 30658 30763 1 + . Parent=gene15 1877523 gth five_prime_cis_splice_site 30764 30765 0.996 + . Parent=gene15 1877523 gth three_prime_cis_splice_site 30988 30989 1 + . Parent=gene15 1877523 gth exon 30990 31085 1 + . Parent=gene15 1877523 gth five_prime_cis_splice_site 31086 31087 0.644 + . Parent=gene15 1877523 gth three_prime_cis_splice_site 31232 31233 0.987 + . Parent=gene15 1877523 gth exon 31234 31355 1 + . Parent=gene15 ### 1877523 gth gene 31265 31820 1 + . ID=gene16;Target=8689616 1 333 + 1877523 gth exon 31265 31386 1 + . Parent=gene16 1877523 gth five_prime_cis_splice_site 31387 31388 0.996 + . Parent=gene16 1877523 gth three_prime_cis_splice_site 31536 31537 0.99 + . Parent=gene16 1877523 gth exon 31538 31720 1 + . Parent=gene16 1877523 gth five_prime_cis_splice_site 31721 31722 0.994 + . Parent=gene16 1877523 gth three_prime_cis_splice_site 31791 31792 0.995 + . Parent=gene16 1877523 gth exon 31793 31820 1 + . Parent=gene16 ### 1877523 gth gene 31855 32362 1 + . ID=gene17;Target=8689215 1 334 + 1877523 gth exon 31855 32022 1 + . Parent=gene17 1877523 gth five_prime_cis_splice_site 32023 32024 0 + . Parent=gene17 1877523 gth three_prime_cis_splice_site 32116 32117 0.558 + . Parent=gene17 1877523 gth exon 32118 32220 1 + . Parent=gene17 1877523 gth five_prime_cis_splice_site 32221 32222 0.912 + . Parent=gene17 1877523 gth three_prime_cis_splice_site 32298 32299 0.895 + . Parent=gene17 1877523 gth exon 32300 32362 1 + . Parent=gene17 ### 1877523 gth gene 31907 32349 1 + . ID=gene18;Target=9784594 1 269 + 1877523 gth exon 31907 32022 1 + . Parent=gene18 1877523 gth five_prime_cis_splice_site 32023 32024 0 + . Parent=gene18 1877523 gth three_prime_cis_splice_site 32116 32117 0.558 + . Parent=gene18 1877523 gth exon 32118 32220 1 + . Parent=gene18 1877523 gth five_prime_cis_splice_site 32221 32222 0.912 + . Parent=gene18 1877523 gth three_prime_cis_splice_site 32298 32299 0.895 + . Parent=gene18 1877523 gth exon 32300 32349 1 + . Parent=gene18 ### 1877523 gth gene 32928 33488 0.967 + . ID=gene19;Target=19875482 1 227 + 1877523 gth exon 32928 32955 1 + . Parent=gene19 1877523 gth five_prime_cis_splice_site 32956 32957 0.985 + . Parent=gene19 1877523 gth three_prime_cis_splice_site 33189 33190 0.999 + . Parent=gene19 1877523 gth exon 33191 33317 0.98 + . Parent=gene19 1877523 gth five_prime_cis_splice_site 33318 33319 0.956 + . Parent=gene19 1877523 gth three_prime_cis_splice_site 33416 33417 0.983 + . Parent=gene19 1877523 gth exon 33418 33488 0.944 + . Parent=gene19 ### 1877523 gth gene 33296 34560 1 + . ID=gene20;Target=9782568 1 427 + 1877523 gth exon 33296 33317 0.636 + . Parent=gene20 1877523 gth five_prime_cis_splice_site 33318 33319 0.956 + . Parent=gene20 1877523 gth three_prime_cis_splice_site 33416 33417 0.983 + . Parent=gene20 1877523 gth exon 33418 33518 1 + . Parent=gene20 1877523 gth five_prime_cis_splice_site 33519 33520 0.993 + . Parent=gene20 1877523 gth three_prime_cis_splice_site 33781 33782 0.99 + . Parent=gene20 1877523 gth exon 33783 33917 1 + . Parent=gene20 1877523 gth five_prime_cis_splice_site 33918 33919 0.705 + . Parent=gene20 1877523 gth three_prime_cis_splice_site 33994 33995 0.988 + . Parent=gene20 1877523 gth exon 33996 34076 1 + . Parent=gene20 1877523 gth five_prime_cis_splice_site 34077 34078 0.961 + . Parent=gene20 1877523 gth three_prime_cis_splice_site 34470 34471 0.999 + . Parent=gene20 1877523 gth exon 34472 34560 1 + . Parent=gene20 ### 1877523 gth gene 35628 36362 0.921 + . ID=gene21;Target=2759121 1 451 + 1877523 gth exon 35628 35712 0.959 + . Parent=gene21 1877523 gth five_prime_cis_splice_site 35713 35714 0.988 + . Parent=gene21 1877523 gth three_prime_cis_splice_site 35818 35819 0.971 + . Parent=gene21 1877523 gth exon 35820 36011 0.979 + . Parent=gene21 1877523 gth five_prime_cis_splice_site 36012 36013 0.955 + . Parent=gene21 1877523 gth three_prime_cis_splice_site 36099 36100 0.992 + . Parent=gene21 1877523 gth exon 36101 36205 0.924 + . Parent=gene21 1877523 gth five_prime_cis_splice_site 36206 36207 0.99 + . Parent=gene21 1877523 gth three_prime_cis_splice_site 36295 36296 0.979 + . Parent=gene21 1877523 gth exon 36297 36362 0.697 + . Parent=gene21 ### 1877523 gth gene 35628 36392 0.984 + . ID=gene22;Target=5841805 1 479 + 1877523 gth exon 35628 35712 1 + . Parent=gene22 1877523 gth five_prime_cis_splice_site 35713 35714 0.988 + . Parent=gene22 1877523 gth three_prime_cis_splice_site 35818 35819 0.971 + . Parent=gene22 1877523 gth exon 35820 36011 1 + . Parent=gene22 1877523 gth five_prime_cis_splice_site 36012 36013 0.955 + . Parent=gene22 1877523 gth three_prime_cis_splice_site 36099 36100 0.992 + . Parent=gene22 1877523 gth exon 36101 36205 1 + . Parent=gene22 1877523 gth five_prime_cis_splice_site 36206 36207 0.99 + . Parent=gene22 1877523 gth three_prime_cis_splice_site 36295 36296 0.979 + . Parent=gene22 1877523 gth exon 36297 36392 0.922 + . Parent=gene22 ### 1877523 gth gene 36370 37156 1 + . ID=gene23;Target=8683519 1 604 - 1877523 gth exon 36370 36431 1 + . Parent=gene23 1877523 gth five_prime_cis_splice_site 36432 36433 0.994 + . Parent=gene23 1877523 gth three_prime_cis_splice_site 36519 36520 1 + . Parent=gene23 1877523 gth exon 36521 36721 1 + . Parent=gene23 1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene23 1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene23 1877523 gth exon 36816 37156 1 + . Parent=gene23 ### 1877523 gth gene 36402 37106 1 + . ID=gene24;Target=8682814 1 522 - 1877523 gth exon 36402 36431 1 + . Parent=gene24 1877523 gth five_prime_cis_splice_site 36432 36433 0.994 + . Parent=gene24 1877523 gth three_prime_cis_splice_site 36519 36520 1 + . Parent=gene24 1877523 gth exon 36521 36721 1 + . Parent=gene24 1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene24 1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene24 1877523 gth exon 36816 37106 1 + . Parent=gene24 ### 1877523 gth gene 36531 37190 1 + . ID=gene25;Target=8690927 1 566 - 1877523 gth exon 36531 36721 1 + . Parent=gene25 1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene25 1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene25 1877523 gth exon 36816 37190 1 + . Parent=gene25 ### 1877523 gth gene 36546 37186 0.99 + . ID=gene26;Target=5845530 1 547 - 1877523 gth exon 36546 36721 0.969 + . Parent=gene26 1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene26 1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene26 1877523 gth exon 36816 37186 1 + . Parent=gene26 ### 1877523 gth gene 36594 37208 1 + . ID=gene27;Target=8717375 1 521 - 1877523 gth exon 36594 36721 1 + . Parent=gene27 1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene27 1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene27 1877523 gth exon 36816 37208 1 + . Parent=gene27 ### 1877523 gth gene 36812 37235 0.998 - . ID=gene28;Target=8735393 1 424 + 1877523 gth exon 36812 37235 0.998 - . Parent=gene28 ### 1877523 gth gene 36816 37208 0.964 + . ID=gene29;Target=2048630 53 438 + 1877523 gth exon 36816 37208 0.964 + . Parent=gene29 ### 1877523 gth gene 36827 37206 0.997 - . ID=gene30;Target=19741846 1 380 + 1877523 gth exon 36827 37206 0.997 - . Parent=gene30 ### 1877523 gth gene 36840 37234 1 - . ID=gene31;Target=8738747 1 395 + 1877523 gth exon 36840 37234 1 - . Parent=gene31 ### 1877523 gth gene 37071 37203 1 - . ID=gene32;Target=8679389 1 133 + 1877523 gth exon 37071 37203 1 - . Parent=gene32 ### 1877523 gth gene 37669 39259 1 - . ID=gene33;Target=8738841 1 588 - 1877523 gth exon 37669 37891 1 - . Parent=gene33 1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene33 1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene33 1877523 gth exon 37972 38060 1 - . Parent=gene33 1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene33 1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene33 1877523 gth exon 38656 38794 1 - . Parent=gene33 1877523 gth three_prime_cis_splice_site 38794 38795 0.976 - . Parent=gene33 1877523 gth five_prime_cis_splice_site 38926 38927 0.977 - . Parent=gene33 1877523 gth exon 38927 38997 1 - . Parent=gene33 1877523 gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene33 1877523 gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene33 1877523 gth exon 39104 39148 1 - . Parent=gene33 1877523 gth three_prime_cis_splice_site 39148 39149 0.991 - . Parent=gene33 1877523 gth five_prime_cis_splice_site 39238 39239 0.998 - . Parent=gene33 1877523 gth exon 39239 39259 1 - . Parent=gene33 ### 1877523 gth gene 37691 38766 0.995 - . ID=gene34;Target=19831991 1 401 - 1877523 gth exon 37691 37891 0.99 - . Parent=gene34 1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene34 1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene34 1877523 gth exon 37972 38060 1 - . Parent=gene34 1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene34 1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene34 1877523 gth exon 38656 38766 1 - . Parent=gene34 ### 1877523 gth gene 37692 38756 1 - . ID=gene35;Target=19840745 1 390 - 1877523 gth exon 37692 37891 1 - . Parent=gene35 1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene35 1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene35 1877523 gth exon 37972 38060 1 - . Parent=gene35 1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene35 1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene35 1877523 gth exon 38656 38756 1 - . Parent=gene35 ### 1877523 gth gene 37716 39118 0.967 - . ID=gene36;Target=5843191 1 490 - 1877523 gth exon 37716 37891 0.977 - . Parent=gene36 1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene36 1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene36 1877523 gth exon 37972 38060 1 - . Parent=gene36 1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene36 1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene36 1877523 gth exon 38656 38794 0.953 - . Parent=gene36 1877523 gth three_prime_cis_splice_site 38794 38795 0.976 - . Parent=gene36 1877523 gth five_prime_cis_splice_site 38926 38927 0.977 - . Parent=gene36 1877523 gth exon 38927 38997 0.93 - . Parent=gene36 1877523 gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene36 1877523 gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene36 1877523 gth exon 39104 39118 0.933 - . Parent=gene36 ### 1877523 gth gene 38927 40032 0.996 - . ID=gene37;Target=19869427 1 606 + 1877523 gth exon 38927 38997 0.986 - . Parent=gene37 1877523 gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene37 1877523 gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene37 1877523 gth exon 39104 39148 1 - . Parent=gene37 1877523 gth three_prime_cis_splice_site 39148 39149 0.991 - . Parent=gene37 1877523 gth five_prime_cis_splice_site 39238 39239 0.998 - . Parent=gene37 1877523 gth exon 39239 39328 1 - . Parent=gene37 1877523 gth three_prime_cis_splice_site 39328 39329 0.974 - . Parent=gene37 1877523 gth five_prime_cis_splice_site 39437 39438 0.999 - . Parent=gene37 1877523 gth exon 39438 39526 1 - . Parent=gene37 1877523 gth three_prime_cis_splice_site 39526 39527 0.453 - . Parent=gene37 1877523 gth five_prime_cis_splice_site 39613 39614 0.986 - . Parent=gene37 1877523 gth exon 39614 39689 1 - . Parent=gene37 1877523 gth three_prime_cis_splice_site 39689 39690 0.973 - . Parent=gene37 1877523 gth five_prime_cis_splice_site 39797 39798 0.999 - . Parent=gene37 1877523 gth exon 39798 40032 0.996 - . Parent=gene37 ### 1877523 gth gene 38938 40006 0.998 - . ID=gene38;Target=8722075 1 568 + 1877523 gth exon 38938 38997 1 - . Parent=gene38 1877523 gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene38 1877523 gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene38 1877523 gth exon 39104 39148 1 - . Parent=gene38 1877523 gth three_prime_cis_splice_site 39148 39149 0.991 - . Parent=gene38 1877523 gth five_prime_cis_splice_site 39238 39239 0.998 - . Parent=gene38 1877523 gth exon 39239 39328 1 - . Parent=gene38 1877523 gth three_prime_cis_splice_site 39328 39329 0.974 - . Parent=gene38 1877523 gth five_prime_cis_splice_site 39437 39438 0.999 - . Parent=gene38 1877523 gth exon 39438 39526 1 - . Parent=gene38 1877523 gth three_prime_cis_splice_site 39526 39527 0.453 - . Parent=gene38 1877523 gth five_prime_cis_splice_site 39613 39614 0.986 - . Parent=gene38 1877523 gth exon 39614 39689 1 - . Parent=gene38 1877523 gth three_prime_cis_splice_site 39689 39690 0.973 - . Parent=gene38 1877523 gth five_prime_cis_splice_site 39797 39798 0.999 - . Parent=gene38 1877523 gth exon 39798 40006 0.995 - . Parent=gene38 ### 1877523 gth gene 42783 43204 1 - . ID=gene39;Target=19858773 1 422 + 1877523 gth exon 42783 43204 1 - . Parent=gene39 ### 1877523 gth gene 44029 44540 0.972 + . ID=gene40;Target=402959 1 423 + 1877523 gth exon 44029 44263 0.991 + . Parent=gene40 1877523 gth five_prime_cis_splice_site 44264 44265 0.99 + . Parent=gene40 1877523 gth three_prime_cis_splice_site 44352 44353 0.998 + . Parent=gene40 1877523 gth exon 44354 44540 0.947 + . Parent=gene40 ### 1877523 gth gene 45542 45866 0.991 - . ID=gene41;Target=8682693 1 322 + 1877523 gth exon 45542 45866 0.991 - . Parent=gene41 ### 1877523 gth gene 45559 45941 0.924 - . ID=gene42;Target=402964 1 388 + 1877523 gth exon 45559 45941 0.924 - . Parent=gene42 ### 1877523 gth gene 45843 45920 0.949 + . ID=gene43;Target=8720010 1 78 - 1877523 gth exon 45843 45920 0.949 + . Parent=gene43 ### 1877523 gth gene 49874 50547 1 - . ID=gene44;Target=19837290 1 412 + 1877523 gth exon 49874 50284 1 - . Parent=gene44 1877523 gth three_prime_cis_splice_site 50284 50285 0.587 - . Parent=gene44 1877523 gth five_prime_cis_splice_site 50546 50547 0.677 - . Parent=gene44 1877523 gth exon 50547 50547 1 - . Parent=gene44 ### 1877523 gth gene 50433 51134 0.978 - . ID=gene45;Target=19807151 1 426 - 1877523 gth exon 50433 50834 0.978 - . Parent=gene45 1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene45 1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene45 1877523 gth exon 51113 51134 1 - . Parent=gene45 ### 1877523 gth gene 50475 50702 1 + . ID=gene46;Target=8727457 1 228 + 1877523 gth exon 50475 50702 1 + . Parent=gene46 ### 1877523 gth gene 50475 51193 1 - . ID=gene47;Target=8731976 1 441 - 1877523 gth exon 50475 50834 1 - . Parent=gene47 1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene47 1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene47 1877523 gth exon 51113 51193 1 - . Parent=gene47 ### 1877523 gth gene 50590 51354 1 - . ID=gene48;Target=19805724 1 385 - 1877523 gth exon 50590 50834 1 - . Parent=gene48 1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene48 1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene48 1877523 gth exon 51113 51216 1 - . Parent=gene48 1877523 gth three_prime_cis_splice_site 51216 51217 0.988 - . Parent=gene48 1877523 gth five_prime_cis_splice_site 51318 51319 1 - . Parent=gene48 1877523 gth exon 51319 51354 1 - . Parent=gene48 ### 1877523 gth gene 50758 52232 0.991 - . ID=gene49;Target=19866668 1 647 + 1877523 gth exon 50758 50834 0.948 - . Parent=gene49 1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene49 1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene49 1877523 gth exon 51113 51216 1 - . Parent=gene49 1877523 gth three_prime_cis_splice_site 51216 51217 0.988 - . Parent=gene49 1877523 gth five_prime_cis_splice_site 51318 51319 1 - . Parent=gene49 1877523 gth exon 51319 51474 1 - . Parent=gene49 1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene49 1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene49 1877523 gth exon 51552 51623 1 - . Parent=gene49 1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene49 1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene49 1877523 gth exon 51711 51758 1 - . Parent=gene49 1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene49 1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene49 1877523 gth exon 51849 51896 1 - . Parent=gene49 1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene49 1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene49 1877523 gth exon 51983 52055 1 - . Parent=gene49 1877523 gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene49 1877523 gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene49 1877523 gth exon 52163 52232 0.986 - . Parent=gene49 ### 1877523 gth gene 51139 51852 0.915 - . ID=gene50;Target=2747604 1 362 + 1877523 gth exon 51139 51216 0.718 - . Parent=gene50 1877523 gth three_prime_cis_splice_site 51216 51217 0.988 - . Parent=gene50 1877523 gth five_prime_cis_splice_site 51318 51319 1 - . Parent=gene50 1877523 gth exon 51319 51474 0.974 - . Parent=gene50 1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene50 1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene50 1877523 gth exon 51552 51623 1 - . Parent=gene50 1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene50 1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene50 1877523 gth exon 51711 51758 0.979 - . Parent=gene50 1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene50 1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene50 1877523 gth exon 51849 51852 1 - . Parent=gene50 ### 1877523 gth gene 51334 52222 0.905 - . ID=gene51;Target=2596256 1 446 + 1877523 gth exon 51334 51474 0.766 - . Parent=gene51 1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene51 1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene51 1877523 gth exon 51552 51623 1 - . Parent=gene51 1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene51 1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene51 1877523 gth exon 51711 51758 1 - . Parent=gene51 1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene51 1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene51 1877523 gth exon 51849 51896 0.979 - . Parent=gene51 1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene51 1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene51 1877523 gth exon 51983 52055 1 - . Parent=gene51 1877523 gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene51 1877523 gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene51 1877523 gth exon 52163 52222 1 - . Parent=gene51 ### 1877523 gth gene 51376 52048 0.939 - . ID=gene52;Target=2596953 1 336 + 1877523 gth exon 51376 51474 0.854 - . Parent=gene52 1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene52 1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene52 1877523 gth exon 51552 51623 1 - . Parent=gene52 1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene52 1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene52 1877523 gth exon 51711 51758 1 - . Parent=gene52 1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene52 1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene52 1877523 gth exon 51849 51896 0.979 - . Parent=gene52 1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene52 1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene52 1877523 gth exon 51983 52048 1 - . Parent=gene52 ### 1877523 gth gene 51376 52224 0.91 - . ID=gene53;Target=5839790 1 404 + 1877523 gth exon 51376 51474 0.848 - . Parent=gene53 1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene53 1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene53 1877523 gth exon 51552 51623 0.931 - . Parent=gene53 1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene53 1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene53 1877523 gth exon 51711 51758 0.823 - . Parent=gene53 1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene53 1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene53 1877523 gth exon 51849 51896 0.958 - . Parent=gene53 1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene53 1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene53 1877523 gth exon 51983 52055 0.959 - . Parent=gene53 1877523 gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene53 1877523 gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene53 1877523 gth exon 52163 52224 0.927 - . Parent=gene53 ### 1877523 gth gene 51446 52242 0.996 - . ID=gene54;Target=403229 1 350 + 1877523 gth exon 51446 51474 0.966 - . Parent=gene54 1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene54 1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene54 1877523 gth exon 51552 51623 1 - . Parent=gene54 1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene54 1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene54 1877523 gth exon 51711 51758 1 - . Parent=gene54 1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene54 1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene54 1877523 gth exon 51849 51896 1 - . Parent=gene54 1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene54 1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene54 1877523 gth exon 51983 52055 0.986 - . Parent=gene54 1877523 gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene54 1877523 gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene54 1877523 gth exon 52163 52242 1 - . Parent=gene54 ### 1877523 gth gene 51599 52231 0.993 - . ID=gene55;Target=9785390 1 263 + 1877523 gth exon 51599 51623 1 - . Parent=gene55 1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene55 1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene55 1877523 gth exon 51711 51758 1 - . Parent=gene55 1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene55 1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene55 1877523 gth exon 51849 51896 1 - . Parent=gene55 1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene55 1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene55 1877523 gth exon 51983 52055 1 - . Parent=gene55 1877523 gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene55 1877523 gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene55 1877523 gth exon 52163 52231 0.986 - . Parent=gene55 ### 1877523 gth gene 53602 54271 0.994 - . ID=gene56;Target=8697180 1 427 - 1877523 gth exon 53602 53914 0.992 - . Parent=gene56 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene56 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene56 1877523 gth exon 54159 54271 1 - . Parent=gene56 ### 1877523 gth gene 53602 54710 0.995 - . ID=gene57;Target=19803773 1 627 - 1877523 gth exon 53602 53914 0.994 - . Parent=gene57 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene57 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene57 1877523 gth exon 54159 54335 1 - . Parent=gene57 1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene57 1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene57 1877523 gth exon 54574 54710 0.993 - . Parent=gene57 ### 1877523 gth gene 53624 54279 0.989 - . ID=gene58;Target=19840006 1 413 - 1877523 gth exon 53624 53914 0.988 - . Parent=gene58 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene58 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene58 1877523 gth exon 54159 54279 0.992 - . Parent=gene58 ### 1877523 gth gene 53624 54283 0.992 - . ID=gene59;Target=19823046 1 417 - 1877523 gth exon 53624 53914 0.988 - . Parent=gene59 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene59 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene59 1877523 gth exon 54159 54283 1 - . Parent=gene59 ### 1877523 gth gene 53631 54335 0.866 - . ID=gene60;Target=2393553 57 528 + 1877523 gth exon 53631 53914 0.991 - . Parent=gene60 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene60 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene60 1877523 gth exon 54159 54335 0.664 - . Parent=gene60 ### 1877523 gth gene 53632 53909 0.991 + . ID=gene61;Target=8697126 1 279 + 1877523 gth exon 53632 53909 0.991 + . Parent=gene61 ### 1877523 gth gene 53645 54320 0.99 - . ID=gene62;Target=19843722 1 431 - 1877523 gth exon 53645 53914 0.991 - . Parent=gene62 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene62 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene62 1877523 gth exon 54159 54320 0.988 - . Parent=gene62 ### 1877523 gth gene 53829 54829 0.991 - . ID=gene63;Target=8696505 49 568 + 1877523 gth exon 53829 53914 0.971 - . Parent=gene63 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene63 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene63 1877523 gth exon 54159 54335 1 - . Parent=gene63 1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene63 1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene63 1877523 gth exon 54574 54829 0.992 - . Parent=gene63 ### 1877523 gth gene 53850 54807 0.913 - . ID=gene64;Target=5839694 1 477 + 1877523 gth exon 53850 53914 0.746 - . Parent=gene64 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene64 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene64 1877523 gth exon 54159 54335 0.887 - . Parent=gene64 1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene64 1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene64 1877523 gth exon 54574 54807 0.979 - . Parent=gene64 ### 1877523 gth gene 54167 54769 0.997 - . ID=gene65;Target=9778953 1 365 + 1877523 gth exon 54167 54335 0.994 - . Parent=gene65 1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene65 1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene65 1877523 gth exon 54574 54769 1 - . Parent=gene65 ### 1877523 gth gene 54178 54828 0.979 - . ID=gene66;Target=19865963 1 414 + 1877523 gth exon 54178 54335 0.953 - . Parent=gene66 1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene66 1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene66 1877523 gth exon 54574 54828 0.996 - . Parent=gene66 ### 1877523 gth gene 54212 54697 0.952 - . ID=gene67;Target=9784661 1 248 + 1877523 gth exon 54212 54335 0.96 - . Parent=gene67 1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene67 1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene67 1877523 gth exon 54574 54697 0.944 - . Parent=gene67 ### 1877523 gth gene 54263 54808 0.93 - . ID=gene68;Target=933584 1 311 + 1877523 gth exon 54263 54335 0.815 - . Parent=gene68 1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene68 1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene68 1877523 gth exon 54574 54808 0.966 - . Parent=gene68 ### 1877523 gth gene 54321 54829 0.992 - . ID=gene69;Target=8696543 49 319 + 1877523 gth exon 54321 54335 1 - . Parent=gene69 1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene69 1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene69 1877523 gth exon 54574 54829 0.992 - . Parent=gene69 ### 1877523 gth gene 54991 56652 0.998 + . ID=gene70;Target=19874826 1 651 + 1877523 gth exon 54991 55057 0.985 + . Parent=gene70 1877523 gth five_prime_cis_splice_site 55058 55059 0.896 + . Parent=gene70 1877523 gth three_prime_cis_splice_site 55143 55144 1 + . Parent=gene70 1877523 gth exon 55145 55230 1 + . Parent=gene70 1877523 gth five_prime_cis_splice_site 55231 55232 0.997 + . Parent=gene70 1877523 gth three_prime_cis_splice_site 55298 55299 0 + . Parent=gene70 1877523 gth exon 55300 55341 1 + . Parent=gene70 1877523 gth five_prime_cis_splice_site 55342 55343 0.997 + . Parent=gene70 1877523 gth three_prime_cis_splice_site 55451 55452 0.898 + . Parent=gene70 1877523 gth exon 55453 55498 1 + . Parent=gene70 1877523 gth five_prime_cis_splice_site 55499 55500 0.237 + . Parent=gene70 1877523 gth three_prime_cis_splice_site 55616 55617 0.997 + . Parent=gene70 1877523 gth exon 55618 55704 1 + . Parent=gene70 1877523 gth five_prime_cis_splice_site 55705 55706 0.991 + . Parent=gene70 1877523 gth three_prime_cis_splice_site 55816 55817 0.952 + . Parent=gene70 1877523 gth exon 55818 55873 1 + . Parent=gene70 1877523 gth five_prime_cis_splice_site 55874 55875 0.983 + . Parent=gene70 1877523 gth three_prime_cis_splice_site 56034 56035 0.0357 + . Parent=gene70 1877523 gth exon 56036 56153 1 + . Parent=gene70 1877523 gth five_prime_cis_splice_site 56154 56155 0.99 + . Parent=gene70 1877523 gth three_prime_cis_splice_site 56279 56280 0.703 + . Parent=gene70 1877523 gth exon 56281 56339 1 + . Parent=gene70 1877523 gth five_prime_cis_splice_site 56340 56341 0.464 + . Parent=gene70 1877523 gth three_prime_cis_splice_site 56447 56448 0.287 + . Parent=gene70 1877523 gth exon 56449 56520 1 + . Parent=gene70 1877523 gth five_prime_cis_splice_site 56521 56522 0.187 + . Parent=gene70 1877523 gth three_prime_cis_splice_site 56633 56634 0.791 + . Parent=gene70 1877523 gth exon 56635 56652 1 + . Parent=gene70 ### 1877523 gth gene 58115 59001 0.984 + . ID=gene71;Target=19741042 1 460 - 1877523 gth exon 58115 58209 0.958 + . Parent=gene71 1877523 gth five_prime_cis_splice_site 58210 58211 0.856 + . Parent=gene71 1877523 gth three_prime_cis_splice_site 58459 58460 1 + . Parent=gene71 1877523 gth exon 58461 58526 1 + . Parent=gene71 1877523 gth five_prime_cis_splice_site 58527 58528 0.784 + . Parent=gene71 1877523 gth three_prime_cis_splice_site 58622 58623 0.977 + . Parent=gene71 1877523 gth exon 58624 58717 1 + . Parent=gene71 1877523 gth five_prime_cis_splice_site 58718 58719 0 + . Parent=gene71 1877523 gth three_prime_cis_splice_site 58794 58795 1 + . Parent=gene71 1877523 gth exon 58796 59001 0.983 + . Parent=gene71 ### 1877523 gth gene 59010 59484 1 + . ID=gene72;Target=8715845 1 475 + 1877523 gth exon 59010 59484 1 + . Parent=gene72 ### 1877523 gth gene 59148 59880 0.991 + . ID=gene73;Target=19864079 1 653 + 1877523 gth exon 59148 59526 0.989 + . Parent=gene73 1877523 gth five_prime_cis_splice_site 59527 59528 0.993 + . Parent=gene73 1877523 gth three_prime_cis_splice_site 59605 59606 0.997 + . Parent=gene73 1877523 gth exon 59607 59880 0.993 + . Parent=gene73 ### 1877523 gth gene 59164 59418 0.996 + . ID=gene74;Target=9787190 1 255 + 1877523 gth exon 59164 59418 0.996 + . Parent=gene74 ### 1877523 gth gene 59643 59976 0.991 + . ID=gene75;Target=397215 1 333 + 1877523 gth exon 59643 59976 0.991 + . Parent=gene75 ### 1877523 gth gene 60190 60487 0.987 + . ID=gene76;Target=398270 1 298 + 1877523 gth exon 60190 60487 0.987 + . Parent=gene76 ### 1877523 gth gene 60319 61000 0.997 - . ID=gene77;Target=19801463 1 682 + 1877523 gth exon 60319 61000 0.997 - . Parent=gene77 ### 1877523 gth gene 60410 60968 1 - . ID=gene78;Target=8692149 1 559 + 1877523 gth exon 60410 60968 1 - . Parent=gene78 ### 1877523 gth gene 60450 60902 0.998 - . ID=gene79;Target=19827386 1 453 + 1877523 gth exon 60450 60902 0.998 - . Parent=gene79 ### 1877523 gth gene 60459 60958 0.996 - . ID=gene80;Target=7610825 1 500 + 1877523 gth exon 60459 60958 0.996 - . Parent=gene80 ### 1877523 gth gene 60463 60958 0.996 - . ID=gene81;Target=8736724 1 496 + 1877523 gth exon 60463 60958 0.996 - . Parent=gene81 ### 1877523 gth gene 60508 60959 0.983 - . ID=gene82;Target=19828552 1 452 + 1877523 gth exon 60508 60959 0.983 - . Parent=gene82 ### 1877523 gth gene 60542 60950 1 - . ID=gene83;Target=19838343 1 409 + 1877523 gth exon 60542 60950 1 - . Parent=gene83 ### 1877523 gth gene 60558 60947 0.995 - . ID=gene84;Target=397216 1 390 + 1877523 gth exon 60558 60947 0.995 - . Parent=gene84 ### 1877523 gth gene 61186 61922 0.957 + . ID=gene85;Target=2722481 1 371 + 1877523 gth exon 61186 61281 0.99 + . Parent=gene85 1877523 gth five_prime_cis_splice_site 61282 61283 0.316 + . Parent=gene85 1877523 gth three_prime_cis_splice_site 61563 61564 0.959 + . Parent=gene85 1877523 gth exon 61565 61641 0.948 + . Parent=gene85 1877523 gth five_prime_cis_splice_site 61642 61643 0 + . Parent=gene85 1877523 gth three_prime_cis_splice_site 61722 61723 0.994 + . Parent=gene85 1877523 gth exon 61724 61922 0.945 + . Parent=gene85 ### 1877523 gth gene 61212 61974 1 + . ID=gene86;Target=19837990 1 398 - 1877523 gth exon 61212 61281 1 + . Parent=gene86 1877523 gth five_prime_cis_splice_site 61282 61283 0.316 + . Parent=gene86 1877523 gth three_prime_cis_splice_site 61563 61564 0.959 + . Parent=gene86 1877523 gth exon 61565 61641 1 + . Parent=gene86 1877523 gth five_prime_cis_splice_site 61642 61643 0 + . Parent=gene86 1877523 gth three_prime_cis_splice_site 61722 61723 0.994 + . Parent=gene86 1877523 gth exon 61724 61974 1 + . Parent=gene86 ### 1877523 gth gene 62196 62646 0.921 + . ID=gene87;Target=2747645 1 448 + 1877523 gth exon 62196 62646 0.921 + . Parent=gene87 ### 1877523 gth gene 63106 63942 1 + . ID=gene88;Target=8701755 1 598 - 1877523 gth exon 63106 63178 1 + . Parent=gene88 1877523 gth five_prime_cis_splice_site 63179 63180 0 + . Parent=gene88 1877523 gth three_prime_cis_splice_site 63269 63270 0.999 + . Parent=gene88 1877523 gth exon 63271 63391 1 + . Parent=gene88 1877523 gth five_prime_cis_splice_site 63392 63393 0.823 + . Parent=gene88 1877523 gth three_prime_cis_splice_site 63466 63467 0 + . Parent=gene88 1877523 gth exon 63468 63683 1 + . Parent=gene88 1877523 gth five_prime_cis_splice_site 63684 63685 0.999 + . Parent=gene88 1877523 gth three_prime_cis_splice_site 63753 63754 0.992 + . Parent=gene88 1877523 gth exon 63755 63942 1 + . Parent=gene88 ### 1877523 gth gene 63306 63942 1 + . ID=gene89;Target=8735505 1 490 - 1877523 gth exon 63306 63391 1 + . Parent=gene89 1877523 gth five_prime_cis_splice_site 63392 63393 0.823 + . Parent=gene89 1877523 gth three_prime_cis_splice_site 63466 63467 0 + . Parent=gene89 1877523 gth exon 63468 63683 1 + . Parent=gene89 1877523 gth five_prime_cis_splice_site 63684 63685 0.999 + . Parent=gene89 1877523 gth three_prime_cis_splice_site 63753 63754 0.992 + . Parent=gene89 1877523 gth exon 63755 63942 1 + . Parent=gene89 ### 1877523 gth gene 63910 64320 0.979 + . ID=gene90;Target=19798134 1 412 + 1877523 gth exon 63910 64320 0.979 + . Parent=gene90 ### 1877523 gth gene 63935 64280 0.986 + . ID=gene91;Target=5846657 1 345 + 1877523 gth exon 63935 64280 0.986 + . Parent=gene91 ### 1877523 gth gene 64196 65033 0.998 - . ID=gene92;Target=19877649 1 632 + 1877523 gth exon 64196 64605 1 - . Parent=gene92 1877523 gth three_prime_cis_splice_site 64605 64606 0.942 - . Parent=gene92 1877523 gth five_prime_cis_splice_site 64811 64812 0.991 - . Parent=gene92 1877523 gth exon 64812 65033 0.995 - . Parent=gene92 ### 1877523 gth gene 65467 66157 0.992 + . ID=gene93;Target=19875812 1 621 + 1877523 gth exon 65467 66058 0.992 + . Parent=gene93 1877523 gth five_prime_cis_splice_site 66059 66060 1 + . Parent=gene93 1877523 gth three_prime_cis_splice_site 66128 66129 0.994 + . Parent=gene93 1877523 gth exon 66130 66157 0.964 + . Parent=gene93 ### 1877523 gth gene 67358 68298 0.982 + . ID=gene94;Target=396603 1 749 + 1877523 gth exon 67358 67550 1 + . Parent=gene94 1877523 gth five_prime_cis_splice_site 67551 67552 0.896 + . Parent=gene94 1877523 gth three_prime_cis_splice_site 67634 67635 0.998 + . Parent=gene94 1877523 gth exon 67636 67908 0.969 + . Parent=gene94 1877523 gth five_prime_cis_splice_site 67909 67910 1 + . Parent=gene94 1877523 gth three_prime_cis_splice_site 68009 68010 0.999 + . Parent=gene94 1877523 gth exon 68011 68298 0.983 + . Parent=gene94 ### 1877523 gth gene 67871 68396 0.99 + . ID=gene95;Target=19742246 1 423 - 1877523 gth exon 67871 67908 0.947 + . Parent=gene95 1877523 gth five_prime_cis_splice_site 67909 67910 1 + . Parent=gene95 1877523 gth three_prime_cis_splice_site 68009 68010 0.999 + . Parent=gene95 1877523 gth exon 68011 68396 0.99 + . Parent=gene95 ### 1877523 gth gene 69163 69893 0.98 + . ID=gene96;Target=19872996 1 536 + 1877523 gth exon 69163 69265 0.971 + . Parent=gene96 1877523 gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene96 1877523 gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene96 1877523 gth exon 69375 69598 1 + . Parent=gene96 1877523 gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene96 1877523 gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene96 1877523 gth exon 69685 69893 0.964 + . Parent=gene96 ### 1877523 gth gene 69171 69968 0.997 + . ID=gene97;Target=19869130 1 603 + 1877523 gth exon 69171 69265 0.989 + . Parent=gene97 1877523 gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene97 1877523 gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene97 1877523 gth exon 69375 69598 1 + . Parent=gene97 1877523 gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene97 1877523 gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene97 1877523 gth exon 69685 69968 0.996 + . Parent=gene97 ### 1877523 gth gene 69173 69853 0.992 + . ID=gene98;Target=19870921 1 486 + 1877523 gth exon 69173 69265 0.989 + . Parent=gene98 1877523 gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene98 1877523 gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene98 1877523 gth exon 69375 69598 1 + . Parent=gene98 1877523 gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene98 1877523 gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene98 1877523 gth exon 69685 69853 0.982 + . Parent=gene98 ### 1877523 gth gene 69196 70072 0.932 + . ID=gene99;Target=905849 1 455 + 1877523 gth exon 69196 69265 0.986 + . Parent=gene99 1877523 gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene99 1877523 gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene99 1877523 gth exon 69375 69598 0.991 + . Parent=gene99 1877523 gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene99 1877523 gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene99 1877523 gth exon 69685 69831 0.816 + . Parent=gene99 1877523 gth five_prime_cis_splice_site 69832 69833 0.48 + . Parent=gene99 1877523 gth three_prime_cis_splice_site 70061 70062 0.999 + . Parent=gene99 1877523 gth exon 70063 70072 0.4 + . Parent=gene99 ### 1877523 gth gene 69219 69775 1 + . ID=gene100;Target=7612059 1 362 + 1877523 gth exon 69219 69265 1 + . Parent=gene100 1877523 gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene100 1877523 gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene100 1877523 gth exon 69375 69598 1 + . Parent=gene100 1877523 gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene100 1877523 gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene100 1877523 gth exon 69685 69775 1 + . Parent=gene100 ### 1877523 gth gene 71414 71679 0.958 + . ID=gene101;Target=17520 1 168 + 1877523 gth exon 71414 71479 1 + . Parent=gene101 1877523 gth five_prime_cis_splice_site 71480 71481 0.948 + . Parent=gene101 1877523 gth three_prime_cis_splice_site 71577 71578 0.982 + . Parent=gene101 1877523 gth exon 71579 71679 0.931 + . Parent=gene101 ### 1877523 gth gene 71458 72009 0.99 + . ID=gene102;Target=8734707 1 319 + 1877523 gth exon 71458 71479 1 + . Parent=gene102 1877523 gth five_prime_cis_splice_site 71480 71481 0.948 + . Parent=gene102 1877523 gth three_prime_cis_splice_site 71577 71578 0.982 + . Parent=gene102 1877523 gth exon 71579 71779 0.985 + . Parent=gene102 1877523 gth five_prime_cis_splice_site 71780 71781 0.998 + . Parent=gene102 1877523 gth three_prime_cis_splice_site 71912 71913 0.977 + . Parent=gene102 1877523 gth exon 71914 72009 1 + . Parent=gene102 ### 1877523 gth gene 72121 72340 0.966 + . ID=gene103;Target=2597031 1 221 + 1877523 gth exon 72121 72340 0.966 + . Parent=gene103 ### 1877523 gth gene 72121 72603 0.931 + . ID=gene104;Target=958004 1 484 + 1877523 gth exon 72121 72603 0.931 + . Parent=gene104 ### 1877523 gth gene 72137 72552 0.917 + . ID=gene105;Target=1159193 1 351 + 1877523 gth exon 72137 72296 1 + . Parent=gene105 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene105 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene105 1877523 gth exon 72369 72552 0.845 + . Parent=gene105 ### 1877523 gth gene 72185 72753 1 + . ID=gene106;Target=8737761 1 497 - 1877523 gth exon 72185 72296 1 + . Parent=gene106 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene106 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene106 1877523 gth exon 72369 72753 1 + . Parent=gene106 ### 1877523 gth gene 72204 72660 0.856 + . ID=gene107;Target=2749490 79 466 + 1877523 gth exon 72204 72296 0.634 + . Parent=gene107 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene107 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene107 1877523 gth exon 72369 72660 0.926 + . Parent=gene107 ### 1877523 gth gene 72214 72751 0.987 + . ID=gene108;Target=7610337 1 466 - 1877523 gth exon 72214 72296 1 + . Parent=gene108 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene108 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene108 1877523 gth exon 72369 72751 0.984 + . Parent=gene108 ### 1877523 gth gene 72231 72731 0.998 + . ID=gene109;Target=19829297 1 429 - 1877523 gth exon 72231 72296 1 + . Parent=gene109 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene109 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene109 1877523 gth exon 72369 72731 0.997 + . Parent=gene109 ### 1877523 gth gene 72246 72753 0.995 + . ID=gene110;Target=19829716 1 434 - 1877523 gth exon 72246 72296 0.98 + . Parent=gene110 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene110 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene110 1877523 gth exon 72369 72753 0.997 + . Parent=gene110 ### 1877523 gth gene 72252 72753 0.988 + . ID=gene111;Target=19831127 1 431 - 1877523 gth exon 72252 72296 1 + . Parent=gene111 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene111 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene111 1877523 gth exon 72369 72753 0.988 + . Parent=gene111 ### 1877523 gth gene 72252 72803 1 + . ID=gene112;Target=8731753 1 480 - 1877523 gth exon 72252 72296 1 + . Parent=gene112 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene112 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene112 1877523 gth exon 72369 72803 1 + . Parent=gene112 ### 1877523 gth gene 72262 72754 1 + . ID=gene113;Target=19839622 1 421 - 1877523 gth exon 72262 72296 1 + . Parent=gene113 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene113 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene113 1877523 gth exon 72369 72754 1 + . Parent=gene113 ### 1877523 gth gene 72264 72572 0.966 + . ID=gene114;Target=2762921 1 237 + 1877523 gth exon 72264 72296 0.939 + . Parent=gene114 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene114 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene114 1877523 gth exon 72369 72572 0.966 + . Parent=gene114 ### 1877523 gth gene 72264 72670 0.93 + . ID=gene115;Target=2762922 1 337 + 1877523 gth exon 72264 72296 0.97 + . Parent=gene115 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene115 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene115 1877523 gth exon 72369 72670 0.93 + . Parent=gene115 ### 1877523 gth gene 72270 72801 0.998 + . ID=gene116;Target=19825274 1 460 - 1877523 gth exon 72270 72296 0.963 + . Parent=gene116 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene116 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene116 1877523 gth exon 72369 72801 0.998 + . Parent=gene116 ### 1877523 gth gene 72275 72752 0.872 + . ID=gene117;Target=19855736 1 420 - 1877523 gth exon 72275 72296 1 + . Parent=gene117 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene117 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene117 1877523 gth exon 72369 72752 0.872 + . Parent=gene117 ### 1877523 gth gene 72277 72753 1 + . ID=gene118;Target=8695920 1 405 - 1877523 gth exon 72277 72296 1 + . Parent=gene118 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene118 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene118 1877523 gth exon 72369 72753 1 + . Parent=gene118 ### 1877523 gth gene 72359 72801 0.985 - . ID=gene119;Target=19841232 1 443 + 1877523 gth exon 72359 72801 0.985 - . Parent=gene119 ### 1877523 gth gene 72367 72810 1 - . ID=gene120;Target=19826275 1 444 + 1877523 gth exon 72367 72810 1 - . Parent=gene120 ### 1877523 gth gene 72371 72801 0.995 - . ID=gene121;Target=19834843 1 430 + 1877523 gth exon 72371 72801 0.995 - . Parent=gene121 ### 1877523 gth gene 72372 72801 0.99 - . ID=gene122;Target=19828253 1 431 + 1877523 gth exon 72372 72801 0.99 - . Parent=gene122 ### 1877523 gth gene 72372 72801 1 - . ID=gene123;Target=19825742 1 430 + 1877523 gth exon 72372 72801 1 - . Parent=gene123 ### 1877523 gth gene 72374 72827 0.992 - . ID=gene124;Target=19828054 1 455 + 1877523 gth exon 72374 72827 0.992 - . Parent=gene124 ### 1877523 gth gene 72383 72801 0.995 - . ID=gene125;Target=19844666 1 418 + 1877523 gth exon 72383 72801 0.995 - . Parent=gene125 ### 1877523 gth gene 72384 72801 1 - . ID=gene126;Target=19829934 1 418 + 1877523 gth exon 72384 72801 1 - . Parent=gene126 ### 1877523 gth gene 72386 72802 0.993 - . ID=gene127;Target=19842362 1 417 + 1877523 gth exon 72386 72802 0.993 - . Parent=gene127 ### 1877523 gth gene 72386 72803 0.974 - . ID=gene128;Target=19837074 1 417 + 1877523 gth exon 72386 72803 0.974 - . Parent=gene128 ### 1877523 gth gene 72390 72754 0.997 - . ID=gene129;Target=8728304 1 365 + 1877523 gth exon 72390 72754 0.997 - . Parent=gene129 ### 1877523 gth gene 72390 72804 0.98 - . ID=gene130;Target=19827775 1 416 + 1877523 gth exon 72390 72804 0.98 - . Parent=gene130 ### 1877523 gth gene 72399 72801 1 - . ID=gene131;Target=19855995 1 403 + 1877523 gth exon 72399 72801 1 - . Parent=gene131 ### 1877523 gth gene 72400 72753 1 - . ID=gene132;Target=8694120 1 354 + 1877523 gth exon 72400 72753 1 - . Parent=gene132 ### 1877523 gth gene 72404 72804 0.998 - . ID=gene133;Target=19831839 1 401 + 1877523 gth exon 72404 72804 0.998 - . Parent=gene133 ### 1877523 gth gene 72422 72826 0.998 - . ID=gene134;Target=19833332 1 405 + 1877523 gth exon 72422 72826 0.998 - . Parent=gene134 ### 1877523 gth gene 72424 72753 0.929 + . ID=gene135;Target=3449674 1 333 + 1877523 gth exon 72424 72753 0.929 + . Parent=gene135 ### 1877523 gth gene 72437 72805 0.981 - . ID=gene136;Target=8732348 1 369 + 1877523 gth exon 72437 72805 0.981 - . Parent=gene136 ### 1877523 gth gene 72522 72801 0.971 - . ID=gene137;Target=8695842 1 280 + 1877523 gth exon 72522 72801 0.971 - . Parent=gene137 ### 1877523 gth gene 72653 74046 0.978 - . ID=gene138;Target=2597485 1 163 - 1877523 gth exon 72653 72789 0.978 - . Parent=gene138 1877523 gth three_prime_cis_splice_site 72789 72790 0 - . Parent=gene138 1877523 gth five_prime_cis_splice_site 74020 74021 0.514 - . Parent=gene138 1877523 gth exon 74021 74046 0.615 - . Parent=gene138 ### 1877523 gth gene 72653 74920 0.919 - . ID=gene139;Target=3450080 1 166 - 1877523 gth exon 72653 72800 0.919 - . Parent=gene139 1877523 gth three_prime_cis_splice_site 72800 72801 0 - . Parent=gene139 1877523 gth five_prime_cis_splice_site 74900 74901 0.919 - . Parent=gene139 1877523 gth exon 74901 74920 0.75 - . Parent=gene139 ### 1877523 gth gene 79098 79663 0.866 - . ID=gene140;Target=19857409 11 314 - 1877523 gth exon 79098 79127 0.767 - . Parent=gene140 1877523 gth three_prime_cis_splice_site 79127 79128 0 - . Parent=gene140 1877523 gth five_prime_cis_splice_site 79240 79241 0 - . Parent=gene140 1877523 gth exon 79241 79487 0.866 - . Parent=gene140 1877523 gth three_prime_cis_splice_site 79487 79488 0.899 - . Parent=gene140 1877523 gth five_prime_cis_splice_site 79635 79636 0.999 - . Parent=gene140 1877523 gth exon 79636 79663 1 - . Parent=gene140 ### 1877523 gth gene 86444 89957 0.741 - . ID=gene141;Target=19873300 87 582 + 1877523 gth exon 86444 86516 0.767 - . Parent=gene141 1877523 gth three_prime_cis_splice_site 86516 86517 0.999 - . Parent=gene141 1877523 gth five_prime_cis_splice_site 89439 89440 0.999 - . Parent=gene141 1877523 gth exon 89440 89702 0.683 - . Parent=gene141 1877523 gth three_prime_cis_splice_site 89702 89703 0.846 - . Parent=gene141 1877523 gth five_prime_cis_splice_site 89793 89794 0.933 - . Parent=gene141 1877523 gth exon 89794 89957 0.823 - . Parent=gene141 ### 1877523 gth gene 90829 91133 0.948 + . ID=gene142;Target=5845361 1 307 + 1877523 gth exon 90829 91133 0.948 + . Parent=gene142 ### 1877523 gth gene 91050 91786 1 - . ID=gene143;Target=8735154 1 543 - 1877523 gth exon 91050 91401 1 - . Parent=gene143 1877523 gth three_prime_cis_splice_site 91401 91402 1 - . Parent=gene143 1877523 gth five_prime_cis_splice_site 91523 91524 0.917 - . Parent=gene143 1877523 gth exon 91524 91713 1 - . Parent=gene143 1877523 gth three_prime_cis_splice_site 91713 91714 0.848 - . Parent=gene143 1877523 gth five_prime_cis_splice_site 91785 91786 0.993 - . Parent=gene143 1877523 gth exon 91786 91786 1 - . Parent=gene143 ### 1877523 gth gene 92903 93265 1 - . ID=gene144;Target=9786193 1 266 + 1877523 gth exon 92903 93008 1 - . Parent=gene144 1877523 gth three_prime_cis_splice_site 93008 93009 0.987 - . Parent=gene144 1877523 gth five_prime_cis_splice_site 93105 93106 0.925 - . Parent=gene144 1877523 gth exon 93106 93265 1 - . Parent=gene144 ### 1877523 gth gene 93551 94053 0.957 - . ID=gene145;Target=19806050 1 401 - 1877523 gth exon 93551 93913 0.957 - . Parent=gene145 1877523 gth three_prime_cis_splice_site 93913 93914 0.992 - . Parent=gene145 1877523 gth five_prime_cis_splice_site 94016 94017 0.996 - . Parent=gene145 1877523 gth exon 94017 94053 0.919 - . Parent=gene145 ### 1877523 gth gene 93552 93837 0.83 - . ID=gene146;Target=2047981 81 377 + 1877523 gth exon 93552 93837 0.83 - . Parent=gene146 ### 1877523 gth gene 93633 94384 1 - . ID=gene147;Target=19857902 1 407 - 1877523 gth exon 93633 93913 1 - . Parent=gene147 1877523 gth three_prime_cis_splice_site 93913 93914 0.992 - . Parent=gene147 1877523 gth five_prime_cis_splice_site 94016 94017 0.996 - . Parent=gene147 1877523 gth exon 94017 94124 1 - . Parent=gene147 1877523 gth three_prime_cis_splice_site 94124 94125 0.998 - . Parent=gene147 1877523 gth five_prime_cis_splice_site 94366 94367 0.994 - . Parent=gene147 1877523 gth exon 94367 94384 1 - . Parent=gene147 ### 1877523 gth gene 94706 95368 0.95 - . ID=gene148;Target=9782167 1 392 + 1877523 gth exon 94706 94771 0.871 - . Parent=gene148 1877523 gth three_prime_cis_splice_site 94771 94772 0.993 - . Parent=gene148 1877523 gth five_prime_cis_splice_site 94876 94877 0.985 - . Parent=gene148 1877523 gth exon 94877 94985 0.954 - . Parent=gene148 1877523 gth three_prime_cis_splice_site 94985 94986 0.957 - . Parent=gene148 1877523 gth five_prime_cis_splice_site 95070 95071 0.958 - . Parent=gene148 1877523 gth exon 95071 95147 1 - . Parent=gene148 1877523 gth three_prime_cis_splice_site 95147 95148 0.992 - . Parent=gene148 1877523 gth five_prime_cis_splice_site 95233 95234 0.937 - . Parent=gene148 1877523 gth exon 95234 95368 0.956 - . Parent=gene148 ### 1877523 gth gene 95317 96614 0.995 - . ID=gene149;Target=19866748 1 646 + 1877523 gth exon 95317 95454 1 - . Parent=gene149 1877523 gth three_prime_cis_splice_site 95454 95455 0.938 - . Parent=gene149 1877523 gth five_prime_cis_splice_site 95841 95842 0.988 - . Parent=gene149 1877523 gth exon 95842 95947 0.991 - . Parent=gene149 1877523 gth three_prime_cis_splice_site 95947 95948 0.999 - . Parent=gene149 1877523 gth five_prime_cis_splice_site 96035 96036 0.993 - . Parent=gene149 1877523 gth exon 96036 96140 1 - . Parent=gene149 1877523 gth three_prime_cis_splice_site 96140 96141 0.869 - . Parent=gene149 1877523 gth five_prime_cis_splice_site 96231 96232 0.996 - . Parent=gene149 1877523 gth exon 96232 96330 1 - . Parent=gene149 1877523 gth three_prime_cis_splice_site 96330 96331 0.996 - . Parent=gene149 1877523 gth five_prime_cis_splice_site 96417 96418 0.958 - . Parent=gene149 1877523 gth exon 96418 96614 0.987 - . Parent=gene149 ### 1877523 gth gene 95905 96592 0.989 - . ID=gene150;Target=9778306 1 422 + 1877523 gth exon 95905 95947 0.907 - . Parent=gene150 1877523 gth three_prime_cis_splice_site 95947 95948 0.999 - . Parent=gene150 1877523 gth five_prime_cis_splice_site 96035 96036 0.993 - . Parent=gene150 1877523 gth exon 96036 96140 1 - . Parent=gene150 1877523 gth three_prime_cis_splice_site 96140 96141 0.869 - . Parent=gene150 1877523 gth five_prime_cis_splice_site 96231 96232 0.996 - . Parent=gene150 1877523 gth exon 96232 96330 1 - . Parent=gene150 1877523 gth three_prime_cis_splice_site 96330 96331 0.996 - . Parent=gene150 1877523 gth five_prime_cis_splice_site 96417 96418 0.958 - . Parent=gene150 1877523 gth exon 96418 96592 0.977 - . Parent=gene150 ### 1877523 gth gene 95929 96592 0.984 - . ID=gene151;Target=9778321 1 398 + 1877523 gth exon 95929 95947 0.947 - . Parent=gene151 1877523 gth three_prime_cis_splice_site 95947 95948 0.999 - . Parent=gene151 1877523 gth five_prime_cis_splice_site 96035 96036 0.993 - . Parent=gene151 1877523 gth exon 96036 96140 0.981 - . Parent=gene151 1877523 gth three_prime_cis_splice_site 96140 96141 0.869 - . Parent=gene151 1877523 gth five_prime_cis_splice_site 96231 96232 0.996 - . Parent=gene151 1877523 gth exon 96232 96330 1 - . Parent=gene151 1877523 gth three_prime_cis_splice_site 96330 96331 0.996 - . Parent=gene151 1877523 gth five_prime_cis_splice_site 96417 96418 0.958 - . Parent=gene151 1877523 gth exon 96418 96592 0.977 - . Parent=gene151 ### 1877523 gth gene 98857 99326 1 - . ID=gene152;Target=19836538 1 392 - 1877523 gth exon 98857 99121 1 - . Parent=gene152 1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene152 1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene152 1877523 gth exon 99200 99326 1 - . Parent=gene152 ### 1877523 gth gene 98861 99271 1 - . ID=gene153;Target=8737545 1 333 - 1877523 gth exon 98861 99121 1 - . Parent=gene153 1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene153 1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene153 1877523 gth exon 99200 99271 1 - . Parent=gene153 ### 1877523 gth gene 98861 99511 0.9 - . ID=gene154;Target=2446000 47 535 + 1877523 gth exon 98861 99121 0.992 - . Parent=gene154 1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene154 1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene154 1877523 gth exon 99200 99361 0.883 - . Parent=gene154 1877523 gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene154 1877523 gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene154 1877523 gth exon 99443 99511 0.594 - . Parent=gene154 ### 1877523 gth gene 98878 99663 0.987 - . ID=gene155;Target=5846455 1 525 - 1877523 gth exon 98878 99121 0.996 - . Parent=gene155 1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene155 1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene155 1877523 gth exon 99200 99361 1 - . Parent=gene155 1877523 gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene155 1877523 gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene155 1877523 gth exon 99443 99511 1 - . Parent=gene155 1877523 gth three_prime_cis_splice_site 99511 99512 0.998 - . Parent=gene155 1877523 gth five_prime_cis_splice_site 99612 99613 0.999 - . Parent=gene155 1877523 gth exon 99613 99663 0.882 - . Parent=gene155 ### 1877523 gth gene 98909 99450 1 - . ID=gene156;Target=8734273 1 383 - 1877523 gth exon 98909 99121 1 - . Parent=gene156 1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene156 1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene156 1877523 gth exon 99200 99361 1 - . Parent=gene156 1877523 gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene156 1877523 gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene156 1877523 gth exon 99443 99450 1 - . Parent=gene156 ### 1877523 gth gene 98987 99504 0.962 - . ID=gene157;Target=397246 1 362 + 1877523 gth exon 98987 99121 0.9 - . Parent=gene157 1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene157 1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene157 1877523 gth exon 99200 99361 1 - . Parent=gene157 1877523 gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene157 1877523 gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene157 1877523 gth exon 99443 99504 1 - . Parent=gene157 ### 1877523 gth gene 99613 100804 0.998 - . ID=gene158;Target=19863867 1 661 + 1877523 gth exon 99613 99877 1 - . Parent=gene158 1877523 gth three_prime_cis_splice_site 99877 99878 0.981 - . Parent=gene158 1877523 gth five_prime_cis_splice_site 100101 100102 0.978 - . Parent=gene158 1877523 gth exon 100102 100226 1 - . Parent=gene158 1877523 gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene158 1877523 gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene158 1877523 gth exon 100327 100434 1 - . Parent=gene158 1877523 gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene158 1877523 gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene158 1877523 gth exon 100539 100646 1 - . Parent=gene158 1877523 gth three_prime_cis_splice_site 100646 100647 0 - . Parent=gene158 1877523 gth five_prime_cis_splice_site 100748 100749 0.995 - . Parent=gene158 1877523 gth exon 100749 100804 0.982 - . Parent=gene158 ### 1877523 gth gene 99698 100804 0.997 - . ID=gene159;Target=19870774 1 577 + 1877523 gth exon 99698 99877 0.994 - . Parent=gene159 1877523 gth three_prime_cis_splice_site 99877 99878 0.981 - . Parent=gene159 1877523 gth five_prime_cis_splice_site 100101 100102 0.978 - . Parent=gene159 1877523 gth exon 100102 100226 1 - . Parent=gene159 1877523 gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene159 1877523 gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene159 1877523 gth exon 100327 100434 1 - . Parent=gene159 1877523 gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene159 1877523 gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene159 1877523 gth exon 100539 100646 1 - . Parent=gene159 1877523 gth three_prime_cis_splice_site 100646 100647 0 - . Parent=gene159 1877523 gth five_prime_cis_splice_site 100748 100749 0.995 - . Parent=gene159 1877523 gth exon 100749 100804 0.982 - . Parent=gene159 ### 1877523 gth gene 99801 100766 0.933 - . ID=gene160;Target=958152 1 437 + 1877523 gth exon 99801 99877 0.76 - . Parent=gene160 1877523 gth three_prime_cis_splice_site 99877 99878 0.981 - . Parent=gene160 1877523 gth five_prime_cis_splice_site 100101 100102 0.978 - . Parent=gene160 1877523 gth exon 100102 100226 0.948 - . Parent=gene160 1877523 gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene160 1877523 gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene160 1877523 gth exon 100327 100434 1 - . Parent=gene160 1877523 gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene160 1877523 gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene160 1877523 gth exon 100539 100646 0.972 - . Parent=gene160 1877523 gth three_prime_cis_splice_site 100646 100647 0 - . Parent=gene160 1877523 gth five_prime_cis_splice_site 100748 100749 0.995 - . Parent=gene160 1877523 gth exon 100749 100766 1 - . Parent=gene160 ### 1877523 gth gene 100105 100634 1 - . ID=gene161;Target=8732177 1 326 + 1877523 gth exon 100105 100226 1 - . Parent=gene161 1877523 gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene161 1877523 gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene161 1877523 gth exon 100327 100434 1 - . Parent=gene161 1877523 gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene161 1877523 gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene161 1877523 gth exon 100539 100634 1 - . Parent=gene161 ### 1877523 gth gene 103616 104455 0.96 + . ID=gene162;Target=2580948 1 435 + 1877523 gth exon 103616 103753 0.975 + . Parent=gene162 1877523 gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene162 1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene162 1877523 gth exon 103982 104035 0.981 + . Parent=gene162 1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene162 1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene162 1877523 gth exon 104118 104198 0.975 + . Parent=gene162 1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene162 1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene162 1877523 gth exon 104295 104455 0.932 + . Parent=gene162 ### 1877523 gth gene 103616 104478 0.909 + . ID=gene163;Target=2759743 1 460 + 1877523 gth exon 103616 103753 1 + . Parent=gene163 1877523 gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene163 1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene163 1877523 gth exon 103982 104035 0.981 + . Parent=gene163 1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene163 1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene163 1877523 gth exon 104118 104198 1 + . Parent=gene163 1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene163 1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene163 1877523 gth exon 104295 104478 0.78 + . Parent=gene163 ### 1877523 gth gene 103616 104819 0.952 + . ID=gene164;Target=5840051 1 700 + 1877523 gth exon 103616 103753 1 + . Parent=gene164 1877523 gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene164 1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene164 1877523 gth exon 103982 104035 1 + . Parent=gene164 1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene164 1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene164 1877523 gth exon 104118 104198 1 + . Parent=gene164 1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene164 1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene164 1877523 gth exon 104295 104724 0.921 + . Parent=gene164 1877523 gth five_prime_cis_splice_site 104725 104726 0.953 + . Parent=gene164 1877523 gth three_prime_cis_splice_site 104801 104802 0.814 + . Parent=gene164 1877523 gth exon 104803 104819 0.765 + . Parent=gene164 ### 1877523 gth gene 103706 104416 0.829 + . ID=gene165;Target=8686177 99 409 + 1877523 gth exon 103706 103731 0.885 + . Parent=gene165 1877523 gth five_prime_cis_splice_site 103732 103733 0 + . Parent=gene165 1877523 gth three_prime_cis_splice_site 103797 103798 0 + . Parent=gene165 1877523 gth exon 103799 103826 0.518 + . Parent=gene165 1877523 gth five_prime_cis_splice_site 103827 103828 0.326 + . Parent=gene165 1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene165 1877523 gth exon 103982 104035 0.778 + . Parent=gene165 1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene165 1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene165 1877523 gth exon 104118 104198 0.84 + . Parent=gene165 1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene165 1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene165 1877523 gth exon 104295 104416 0.844 + . Parent=gene165 ### 1877523 gth gene 103713 104391 0.812 + . ID=gene166;Target=453733 78 357 + 1877523 gth exon 103713 103731 1 + . Parent=gene166 1877523 gth five_prime_cis_splice_site 103732 103733 0 + . Parent=gene166 1877523 gth three_prime_cis_splice_site 103797 103798 0 + . Parent=gene166 1877523 gth exon 103799 103826 0.518 + . Parent=gene166 1877523 gth five_prime_cis_splice_site 103827 103828 0.326 + . Parent=gene166 1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene166 1877523 gth exon 103982 104035 0.778 + . Parent=gene166 1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene166 1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene166 1877523 gth exon 104118 104198 0.84 + . Parent=gene166 1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene166 1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene166 1877523 gth exon 104295 104391 0.809 + . Parent=gene166 ### 1877523 gth gene 103746 104415 0.824 + . ID=gene167;Target=8722221 103 366 + 1877523 gth exon 103746 103753 0.875 + . Parent=gene167 1877523 gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene167 1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene167 1877523 gth exon 103982 104035 0.778 + . Parent=gene167 1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene167 1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene167 1877523 gth exon 104118 104198 0.84 + . Parent=gene167 1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene167 1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene167 1877523 gth exon 104295 104415 0.835 + . Parent=gene167 ### 1877523 gth gene 103746 104440 0.829 + . ID=gene168;Target=623629 87 375 + 1877523 gth exon 103746 103753 0.875 + . Parent=gene168 1877523 gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene168 1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene168 1877523 gth exon 103982 104035 0.778 + . Parent=gene168 1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene168 1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene168 1877523 gth exon 104118 104198 0.84 + . Parent=gene168 1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene168 1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene168 1877523 gth exon 104295 104440 0.842 + . Parent=gene168 ### 1877523 gth gene 103982 104683 0.818 + . ID=gene169;Target=9778203 71 401 + 1877523 gth exon 103982 104035 0.759 + . Parent=gene169 1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene169 1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene169 1877523 gth exon 104118 104198 0.84 + . Parent=gene169 1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene169 1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene169 1877523 gth exon 104295 104455 0.826 + . Parent=gene169 1877523 gth five_prime_cis_splice_site 104456 104457 0.522 + . Parent=gene169 1877523 gth three_prime_cis_splice_site 104647 104648 0 + . Parent=gene169 1877523 gth exon 104649 104683 0.971 + . Parent=gene169 ### 1877523 gth gene 103982 104881 0.909 + . ID=gene170;Target=8731408 68 518 + 1877523 gth exon 103982 104035 0.944 + . Parent=gene170 1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene170 1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene170 1877523 gth exon 104118 104198 0.951 + . Parent=gene170 1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene170 1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene170 1877523 gth exon 104295 104455 0.888 + . Parent=gene170 1877523 gth five_prime_cis_splice_site 104456 104457 0.522 + . Parent=gene170 1877523 gth three_prime_cis_splice_site 104647 104648 0 + . Parent=gene170 1877523 gth exon 104649 104724 0.934 + . Parent=gene170 1877523 gth five_prime_cis_splice_site 104725 104726 0.953 + . Parent=gene170 1877523 gth three_prime_cis_splice_site 104801 104802 0.814 + . Parent=gene170 1877523 gth exon 104803 104881 0.861 + . Parent=gene170 ### 1877523 gth gene 104394 105201 0.83 + . ID=gene171;Target=937871 1 457 + 1877523 gth exon 104394 104455 0.887 + . Parent=gene171 1877523 gth five_prime_cis_splice_site 104456 104457 0.522 + . Parent=gene171 1877523 gth three_prime_cis_splice_site 104647 104648 0 + . Parent=gene171 1877523 gth exon 104649 104724 0.921 + . Parent=gene171 1877523 gth five_prime_cis_splice_site 104725 104726 0.953 + . Parent=gene171 1877523 gth three_prime_cis_splice_site 104801 104802 0.814 + . Parent=gene171 1877523 gth exon 104803 104928 0.841 + . Parent=gene171 1877523 gth five_prime_cis_splice_site 104929 104930 0.881 + . Parent=gene171 1877523 gth three_prime_cis_splice_site 105008 105009 0.99 + . Parent=gene171 1877523 gth exon 105010 105201 0.768 + . Parent=gene171 ### 1877523 gth gene 104803 105220 0.852 + . ID=gene172;Target=9781141 22 358 + 1877523 gth exon 104803 104928 0.841 + . Parent=gene172 1877523 gth five_prime_cis_splice_site 104929 104930 0.881 + . Parent=gene172 1877523 gth three_prime_cis_splice_site 105008 105009 0.99 + . Parent=gene172 1877523 gth exon 105010 105220 0.858 + . Parent=gene172 ### 1877523 gth gene 104912 105793 0.887 + . ID=gene173;Target=7611662 1 549 - 1877523 gth exon 104912 104928 0.824 + . Parent=gene173 1877523 gth five_prime_cis_splice_site 104929 104930 0.881 + . Parent=gene173 1877523 gth three_prime_cis_splice_site 105008 105009 0.99 + . Parent=gene173 1877523 gth exon 105010 105228 0.863 + . Parent=gene173 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene173 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene173 1877523 gth exon 105315 105428 0.912 + . Parent=gene173 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene173 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene173 1877523 gth exon 105500 105535 1 + . Parent=gene173 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene173 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene173 1877523 gth exon 105630 105793 0.902 + . Parent=gene173 ### 1877523 gth gene 105009 105793 0.884 + . ID=gene174;Target=8734901 1 533 - 1877523 gth exon 105009 105228 0.864 + . Parent=gene174 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene174 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene174 1877523 gth exon 105315 105428 0.912 + . Parent=gene174 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene174 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene174 1877523 gth exon 105500 105535 1 + . Parent=gene174 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene174 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene174 1877523 gth exon 105630 105793 0.89 + . Parent=gene174 ### 1877523 gth gene 105069 105815 0.876 + . ID=gene175;Target=19801855 1 495 - 1877523 gth exon 105069 105228 0.831 + . Parent=gene175 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene175 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene175 1877523 gth exon 105315 105428 0.912 + . Parent=gene175 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene175 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene175 1877523 gth exon 105500 105535 1 + . Parent=gene175 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene175 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene175 1877523 gth exon 105630 105815 0.892 + . Parent=gene175 ### 1877523 gth gene 105090 105793 0.878 + . ID=gene176;Target=8695006 1 452 - 1877523 gth exon 105090 105228 0.82 + . Parent=gene176 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene176 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene176 1877523 gth exon 105315 105428 0.912 + . Parent=gene176 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene176 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene176 1877523 gth exon 105500 105535 0.972 + . Parent=gene176 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene176 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene176 1877523 gth exon 105630 105793 0.902 + . Parent=gene176 ### 1877523 gth gene 105091 105793 0.857 + . ID=gene177;Target=8702125 1 452 - 1877523 gth exon 105091 105228 0.786 + . Parent=gene177 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene177 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene177 1877523 gth exon 105315 105428 0.886 + . Parent=gene177 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene177 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene177 1877523 gth exon 105500 105535 0.972 + . Parent=gene177 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene177 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene177 1877523 gth exon 105630 105793 0.896 + . Parent=gene177 ### 1877523 gth gene 105140 105793 0.88 + . ID=gene178;Target=19825204 1 402 - 1877523 gth exon 105140 105228 0.798 + . Parent=gene178 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene178 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene178 1877523 gth exon 105315 105428 0.912 + . Parent=gene178 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene178 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene178 1877523 gth exon 105500 105535 1 + . Parent=gene178 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene178 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene178 1877523 gth exon 105630 105793 0.902 + . Parent=gene178 ### 1877523 gth gene 105170 105793 0.862 + . ID=gene179;Target=2748033 88 460 - 1877523 gth exon 105170 105228 0.686 + . Parent=gene179 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene179 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene179 1877523 gth exon 105315 105428 0.904 + . Parent=gene179 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene179 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene179 1877523 gth exon 105500 105535 1 + . Parent=gene179 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene179 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene179 1877523 gth exon 105630 105793 0.896 + . Parent=gene179 ### 1877523 gth gene 105175 105793 0.901 + . ID=gene180;Target=19835442 1 367 - 1877523 gth exon 105175 105228 0.87 + . Parent=gene180 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene180 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene180 1877523 gth exon 105315 105428 0.912 + . Parent=gene180 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene180 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene180 1877523 gth exon 105500 105535 1 + . Parent=gene180 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene180 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene180 1877523 gth exon 105630 105793 0.902 + . Parent=gene180 ### 1877523 gth gene 105189 105793 0.896 + . ID=gene181;Target=8734878 1 354 - 1877523 gth exon 105189 105228 0.875 + . Parent=gene181 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene181 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene181 1877523 gth exon 105315 105428 0.912 + . Parent=gene181 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene181 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene181 1877523 gth exon 105500 105535 1 + . Parent=gene181 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene181 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene181 1877523 gth exon 105630 105793 0.884 + . Parent=gene181 ### 1877523 gth gene 105190 105793 0.906 + . ID=gene182;Target=19823987 1 352 - 1877523 gth exon 105190 105228 0.872 + . Parent=gene182 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene182 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene182 1877523 gth exon 105315 105428 0.912 + . Parent=gene182 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene182 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene182 1877523 gth exon 105500 105535 1 + . Parent=gene182 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene182 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene182 1877523 gth exon 105630 105793 0.902 + . Parent=gene182 ### 1877523 gth gene 105199 105793 0.845 + . ID=gene183;Target=19841468 39 385 - 1877523 gth exon 105199 105228 0.833 + . Parent=gene183 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene183 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene183 1877523 gth exon 105315 105428 0.904 + . Parent=gene183 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene183 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene183 1877523 gth exon 105500 105535 0.972 + . Parent=gene183 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene183 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene183 1877523 gth exon 105630 105793 0.805 + . Parent=gene183 ### 1877523 gth gene 105348 105815 0.895 + . ID=gene184;Target=2747682 1 302 + 1877523 gth exon 105348 105428 0.914 + . Parent=gene184 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene184 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene184 1877523 gth exon 105500 105535 1 + . Parent=gene184 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene184 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene184 1877523 gth exon 105630 105815 0.887 + . Parent=gene184 ### 1877523 gth gene 105348 105815 0.899 + . ID=gene185;Target=2412846 1 302 + 1877523 gth exon 105348 105428 0.914 + . Parent=gene185 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene185 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene185 1877523 gth exon 105500 105535 1 + . Parent=gene185 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene185 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene185 1877523 gth exon 105630 105815 0.892 + . Parent=gene185 ### 1877523 gth gene 105371 105813 0.897 + . ID=gene186;Target=17325 1 277 - 1877523 gth exon 105371 105428 0.931 + . Parent=gene186 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene186 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene186 1877523 gth exon 105500 105535 0.972 + . Parent=gene186 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene186 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene186 1877523 gth exon 105630 105813 0.886 + . Parent=gene186 ### 1877523 gth gene 105382 105851 0.986 + . ID=gene187;Target=3449578 65 370 + 1877523 gth exon 105382 105428 0.979 + . Parent=gene187 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene187 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene187 1877523 gth exon 105500 105535 0.903 + . Parent=gene187 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene187 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene187 1877523 gth exon 105630 105851 0.986 + . Parent=gene187 ### 1877523 gth gene 105394 105860 0.827 + . ID=gene188;Target=19859011 1 296 - 1877523 gth exon 105394 105428 0.971 + . Parent=gene188 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene188 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene188 1877523 gth exon 105500 105535 1 + . Parent=gene188 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene188 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene188 1877523 gth exon 105630 105860 0.827 + . Parent=gene188 ### 1877523 gth gene 105662 105806 0.855 - . ID=gene189;Target=8735385 30 173 + 1877523 gth exon 105662 105806 0.855 - . Parent=gene189 ### 1877523 gth gene 106097 106973 0.998 + . ID=gene190;Target=19871766 1 425 + 1877523 gth exon 106097 106290 0.995 + . Parent=gene190 1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene190 1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene190 1877523 gth exon 106566 106619 1 + . Parent=gene190 1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene190 1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene190 1877523 gth exon 106702 106782 1 + . Parent=gene190 1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene190 1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene190 1877523 gth exon 106878 106973 1 + . Parent=gene190 ### 1877523 gth gene 106133 106934 0.966 + . ID=gene191;Target=17300 1 350 + 1877523 gth exon 106133 106290 0.962 + . Parent=gene191 1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene191 1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene191 1877523 gth exon 106566 106619 0.981 + . Parent=gene191 1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene191 1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene191 1877523 gth exon 106702 106782 1 + . Parent=gene191 1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene191 1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene191 1877523 gth exon 106878 106934 0.912 + . Parent=gene191 ### 1877523 gth gene 106148 106751 0.966 + . ID=gene192;Target=7612621 1 248 + 1877523 gth exon 106148 106290 0.948 + . Parent=gene192 1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene192 1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene192 1877523 gth exon 106566 106619 1 + . Parent=gene192 1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene192 1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene192 1877523 gth exon 106702 106751 0.98 + . Parent=gene192 ### 1877523 gth gene 106149 106973 0.924 + . ID=gene193;Target=935362 1 377 + 1877523 gth exon 106149 106290 0.979 + . Parent=gene193 1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene193 1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene193 1877523 gth exon 106566 106619 0.944 + . Parent=gene193 1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene193 1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene193 1877523 gth exon 106702 106782 0.975 + . Parent=gene193 1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene193 1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene193 1877523 gth exon 106878 106973 0.786 + . Parent=gene193 ### 1877523 gth gene 106156 106973 0.915 + . ID=gene194;Target=936803 1 374 + 1877523 gth exon 106156 106290 0.97 + . Parent=gene194 1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene194 1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene194 1877523 gth exon 106566 106619 0.981 + . Parent=gene194 1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene194 1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene194 1877523 gth exon 106702 106782 1 + . Parent=gene194 1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene194 1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene194 1877523 gth exon 106878 106973 0.729 + . Parent=gene194 ### 1877523 gth gene 106156 106973 1 + . ID=gene195;Target=7612394 1 366 + 1877523 gth exon 106156 106290 1 + . Parent=gene195 1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene195 1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene195 1877523 gth exon 106566 106619 1 + . Parent=gene195 1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene195 1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene195 1877523 gth exon 106702 106782 1 + . Parent=gene195 1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene195 1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene195 1877523 gth exon 106878 106973 1 + . Parent=gene195 ### 1877523 gth gene 106161 106750 0.967 + . ID=gene196;Target=2733258 26 261 + 1877523 gth exon 106161 106290 0.962 + . Parent=gene196 1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene196 1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene196 1877523 gth exon 106566 106619 0.981 + . Parent=gene196 1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene196 1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene196 1877523 gth exon 106702 106750 0.724 + . Parent=gene196 ### 1877523 gth gene 106168 106917 0.981 + . ID=gene197;Target=8729681 1 298 + 1877523 gth exon 106168 106290 0.976 + . Parent=gene197 1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene197 1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene197 1877523 gth exon 106566 106619 0.981 + . Parent=gene197 1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene197 1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene197 1877523 gth exon 106702 106782 0.988 + . Parent=gene197 1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene197 1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene197 1877523 gth exon 106878 106917 0.95 + . Parent=gene197 ### 1877523 gth gene 106224 106710 0.959 + . ID=gene198;Target=2759942 1 130 + 1877523 gth exon 106224 106290 0.94 + . Parent=gene198 1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene198 1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene198 1877523 gth exon 106566 106619 0.981 + . Parent=gene198 1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene198 1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene198 1877523 gth exon 106702 106710 1 + . Parent=gene198 ### 1877523 gth gene 106716 106973 0.847 + . ID=gene199;Target=9778889 1 162 + 1877523 gth exon 106716 106782 0.806 + . Parent=gene199 1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene199 1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene199 1877523 gth exon 106878 106973 0.875 + . Parent=gene199 ### genometools-1.5.1/testdata/U89959_sas.gff3md5000066400000000000000000004523041211610345200205440ustar00rootroot00000000000000##gff-version 3 ##sequence-region md5:063b1024d68e26716b7f38caf958316f:1877523 1 106973 md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 1074 1540 1 + . ID=gene1;Target=md5:14c0ff5e76ef8ac009fdcc923f701356:8721428 1 303 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 1074 1171 1 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 1172 1173 0.866 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 1257 1258 0.994 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 1259 1354 1 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 1355 1356 0 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 1430 1431 0.745 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 1432 1540 1 + . Parent=gene1 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 2779 3355 0.84 + . ID=gene2;Target=md5:527995da853a37f9c47e616ce237d523:8732738 1 337 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 2779 2801 0.696 + . Parent=gene2 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 2802 2803 0.459 + . Parent=gene2 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 3041 3042 0 + . Parent=gene2 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 3043 3355 0.84 + . Parent=gene2 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 3025 3351 1 + . ID=gene3;Target=md5:f1a0d426e93585553b21aa1a47aa2970:19837778 1 327 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 3025 3351 1 + . Parent=gene3 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 3041 3651 0.996 - . ID=gene4;Target=md5:cabe5b677d534fb65e0d2245f61e2bd1:8732878 1 536 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 3041 3550 0.996 - . Parent=gene4 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 3550 3551 1 - . Parent=gene4 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 3625 3626 0.741 - . Parent=gene4 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 3626 3651 1 - . Parent=gene4 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 3077 3506 0.974 + . ID=gene5;Target=md5:a9dcd316817972a94c0af505715b10bc:19843099 1 426 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 3077 3506 0.974 + . Parent=gene5 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 4768 5357 0.987 - . ID=gene6;Target=md5:e40253c45f8d96170d6af32f8d8e3e05:19871046 1 591 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 4768 5357 0.987 - . Parent=gene6 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 9505 10058 1 + . ID=gene7;Target=md5:f28eda487869903339de7a431f00fccd:8682455 1 554 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 9505 10058 1 + . Parent=gene7 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 12024 12542 1 - . ID=gene8;Target=md5:300d9c80d9f566412745a6bda32e3e12:8688760 1 519 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 12024 12542 1 - . Parent=gene8 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 13014 13465 0.881 - . ID=gene9;Target=md5:c6826f50615c7fb2eb70e294bb7202cb:2748705 1 459 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 13014 13465 0.881 - . Parent=gene9 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 15955 16603 0.997 + . ID=gene10;Target=md5:bceada3d0ee38c76dafe93fd74e71dfe:19878194 1 649 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 15955 16603 0.997 + . Parent=gene10 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 17165 17684 0.985 + . ID=gene11;Target=md5:8bbc72e5847196327c25661544c6bdf9:19798999 1 396 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 17165 17247 0.97 + . Parent=gene11 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 17248 17249 1 + . Parent=gene11 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 17372 17373 0.994 + . Parent=gene11 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 17374 17684 0.989 + . Parent=gene11 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 25221 26100 1 + . ID=gene12;Target=md5:ff7357d7a1877d31d94543a13d64fa0e:8690053 1 521 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 25221 25310 1 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 25311 25312 0.993 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 25508 25509 0.439 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 25510 25626 1 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 25627 25628 0.998 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 25711 25712 0.996 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 25713 25841 1 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 25842 25843 0.63 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 25914 25915 0.926 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 25916 26100 1 + . Parent=gene12 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 27900 28989 1 + . ID=gene13;Target=md5:c69c15ebe466171a13ee5aa610e90e61:8726341 1 499 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 27900 28003 1 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 28004 28005 0.999 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 28267 28268 0.995 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 28269 28424 1 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 28425 28426 0.936 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 28505 28506 0 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 28507 28579 1 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 28580 28581 0.989 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 28684 28685 0.994 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 28686 28753 1 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 28754 28755 0.999 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 28890 28891 0.999 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 28892 28989 1 + . Parent=gene13 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 28990 29817 1 + . ID=gene14;Target=md5:0870e7d5d9d76766ebd3dce1758b733f:8726286 1 477 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 28990 29037 1 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 29038 29039 0.907 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 29132 29133 0 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 29134 29242 1 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 29243 29244 0.84 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 29329 29330 1 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 29331 29477 1 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 29478 29479 0.983 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 29569 29570 0.998 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 29571 29618 1 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 29619 29620 0 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 29691 29692 0.993 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 29693 29817 1 + . Parent=gene14 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 30278 31355 1 + . ID=gene15;Target=md5:97350772e29b7881b149afbedf09290d:8690080 1 524 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 30278 30391 1 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 30392 30393 0.985 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 30475 30476 0.918 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 30477 30562 1 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 30563 30564 0.938 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 30656 30657 0.973 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 30658 30763 1 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 30764 30765 0.996 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 30988 30989 1 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 30990 31085 1 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 31086 31087 0.644 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 31232 31233 0.987 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 31234 31355 1 + . Parent=gene15 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 31265 31820 1 + . ID=gene16;Target=md5:cc954bf1761c4c9f05f8822afb1079e3:8689616 1 333 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 31265 31386 1 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 31387 31388 0.996 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 31536 31537 0.99 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 31538 31720 1 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 31721 31722 0.994 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 31791 31792 0.995 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 31793 31820 1 + . Parent=gene16 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 31855 32362 1 + . ID=gene17;Target=md5:70facb44682374068ef43fd0a6e116b5:8689215 1 334 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 31855 32022 1 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 32023 32024 0 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 32116 32117 0.558 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 32118 32220 1 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 32221 32222 0.912 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 32298 32299 0.895 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 32300 32362 1 + . Parent=gene17 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 31907 32349 1 + . ID=gene18;Target=md5:c7084aa0f01934072f9e244363059ca0:9784594 1 269 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 31907 32022 1 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 32023 32024 0 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 32116 32117 0.558 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 32118 32220 1 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 32221 32222 0.912 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 32298 32299 0.895 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 32300 32349 1 + . Parent=gene18 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 32928 33488 0.967 + . ID=gene19;Target=md5:4e8ae3a74fefacbbb8650ba892c2b2da:19875482 1 227 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 32928 32955 1 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 32956 32957 0.985 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 33189 33190 0.999 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 33191 33317 0.98 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 33318 33319 0.956 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 33416 33417 0.983 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 33418 33488 0.944 + . Parent=gene19 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 33296 34560 1 + . ID=gene20;Target=md5:f53ad09e45a4038f2261b9ee90353658:9782568 1 427 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 33296 33317 0.636 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 33318 33319 0.956 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 33416 33417 0.983 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 33418 33518 1 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 33519 33520 0.993 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 33781 33782 0.99 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 33783 33917 1 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 33918 33919 0.705 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 33994 33995 0.988 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 33996 34076 1 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 34077 34078 0.961 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 34470 34471 0.999 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 34472 34560 1 + . Parent=gene20 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 35628 36362 0.921 + . ID=gene21;Target=md5:a7fa97bc84c3aebaea34e169b73094c9:2759121 1 451 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 35628 35712 0.959 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 35713 35714 0.988 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 35818 35819 0.971 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 35820 36011 0.979 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36012 36013 0.955 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36099 36100 0.992 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36101 36205 0.924 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36206 36207 0.99 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36295 36296 0.979 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36297 36362 0.697 + . Parent=gene21 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 35628 36392 0.984 + . ID=gene22;Target=md5:cdced248d13c7c0f89e7e889cc30164a:5841805 1 479 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 35628 35712 1 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 35713 35714 0.988 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 35818 35819 0.971 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 35820 36011 1 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36012 36013 0.955 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36099 36100 0.992 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36101 36205 1 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36206 36207 0.99 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36295 36296 0.979 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36297 36392 0.922 + . Parent=gene22 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 36370 37156 1 + . ID=gene23;Target=md5:0d914f8b8fdfef05d05e32a617ce8737:8683519 1 604 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36370 36431 1 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36432 36433 0.994 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36519 36520 1 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36521 36721 1 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36816 37156 1 + . Parent=gene23 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 36402 37106 1 + . ID=gene24;Target=md5:634e9a3d54562a834a900edb41abe7d4:8682814 1 522 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36402 36431 1 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36432 36433 0.994 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36519 36520 1 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36521 36721 1 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36816 37106 1 + . Parent=gene24 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 36531 37190 1 + . ID=gene25;Target=md5:e24a612b49c52c8aca23eb196c1ebe06:8690927 1 566 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36531 36721 1 + . Parent=gene25 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene25 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene25 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36816 37190 1 + . Parent=gene25 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 36546 37186 0.99 + . ID=gene26;Target=md5:835eb4298c428885b3d16d0e4514c30b:5845530 1 547 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36546 36721 0.969 + . Parent=gene26 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene26 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene26 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36816 37186 1 + . Parent=gene26 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 36594 37208 1 + . ID=gene27;Target=md5:b280ddc383280ca975eeaa3329e34c14:8717375 1 521 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36594 36721 1 + . Parent=gene27 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene27 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene27 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36816 37208 1 + . Parent=gene27 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 36812 37235 0.998 - . ID=gene28;Target=md5:26ebd521c00f7b4d595086f162ab00e1:8735393 1 424 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36812 37235 0.998 - . Parent=gene28 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 36816 37208 0.964 + . ID=gene29;Target=md5:3ff6374febf91a5f28c3f7bcc4ccd774:2048630 53 438 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36816 37208 0.964 + . Parent=gene29 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 36827 37206 0.997 - . ID=gene30;Target=md5:7f0facaa45cacec8ffaa0c98a51edf56:19741846 1 380 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36827 37206 0.997 - . Parent=gene30 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 36840 37234 1 - . ID=gene31;Target=md5:275dc2512038a6501b7d27e38165bec7:8738747 1 395 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 36840 37234 1 - . Parent=gene31 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 37071 37203 1 - . ID=gene32;Target=md5:af2486ba93823b9389100222c0ddffdb:8679389 1 133 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 37071 37203 1 - . Parent=gene32 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 37669 39259 1 - . ID=gene33;Target=md5:b1da76b1bfdf36225429a5be70ff88a2:8738841 1 588 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 37669 37891 1 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 37972 38060 1 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 38656 38794 1 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 38794 38795 0.976 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 38926 38927 0.977 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 38927 38997 1 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39104 39148 1 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 39148 39149 0.991 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39238 39239 0.998 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39239 39259 1 - . Parent=gene33 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 37691 38766 0.995 - . ID=gene34;Target=md5:354c93700a73d01ea73f641c62c593cd:19831991 1 401 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 37691 37891 0.99 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 37972 38060 1 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 38656 38766 1 - . Parent=gene34 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 37692 38756 1 - . ID=gene35;Target=md5:f42df1d200fb31e1bed322fab31540d6:19840745 1 390 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 37692 37891 1 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 37972 38060 1 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 38656 38756 1 - . Parent=gene35 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 37716 39118 0.967 - . ID=gene36;Target=md5:f55d7bcc44b78111563b02f8a19805ee:5843191 1 490 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 37716 37891 0.977 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 37972 38060 1 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 38656 38794 0.953 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 38794 38795 0.976 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 38926 38927 0.977 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 38927 38997 0.93 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39104 39118 0.933 - . Parent=gene36 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 38927 40032 0.996 - . ID=gene37;Target=md5:a3f1555a0375aea877145c8c372ae4af:19869427 1 606 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 38927 38997 0.986 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39104 39148 1 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 39148 39149 0.991 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39238 39239 0.998 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39239 39328 1 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 39328 39329 0.974 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39437 39438 0.999 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39438 39526 1 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 39526 39527 0.453 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39613 39614 0.986 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39614 39689 1 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 39689 39690 0.973 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39797 39798 0.999 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39798 40032 0.996 - . Parent=gene37 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 38938 40006 0.998 - . ID=gene38;Target=md5:a5f947d297585356da9380d22ac8c974:8722075 1 568 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 38938 38997 1 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39104 39148 1 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 39148 39149 0.991 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39238 39239 0.998 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39239 39328 1 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 39328 39329 0.974 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39437 39438 0.999 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39438 39526 1 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 39526 39527 0.453 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39613 39614 0.986 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39614 39689 1 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 39689 39690 0.973 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 39797 39798 0.999 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 39798 40006 0.995 - . Parent=gene38 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 42783 43204 1 - . ID=gene39;Target=md5:bdc426cd84a477b9b48d7e7d1538fc85:19858773 1 422 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 42783 43204 1 - . Parent=gene39 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 44029 44540 0.972 + . ID=gene40;Target=md5:0f6d1e4ce29d042b5804f8ae8bd9c43a:402959 1 423 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 44029 44263 0.991 + . Parent=gene40 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 44264 44265 0.99 + . Parent=gene40 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 44352 44353 0.998 + . Parent=gene40 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 44354 44540 0.947 + . Parent=gene40 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 45542 45866 0.991 - . ID=gene41;Target=md5:7ba0b8c1bb50abf3c5a844abacf9fe67:8682693 1 322 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 45542 45866 0.991 - . Parent=gene41 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 45559 45941 0.924 - . ID=gene42;Target=md5:38229ac075d9c6d15fd1152c4eccc834:402964 1 388 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 45559 45941 0.924 - . Parent=gene42 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 45843 45920 0.949 + . ID=gene43;Target=md5:6d3b4b9db4531cda588528f2c69c0a57:8720010 1 78 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 45843 45920 0.949 + . Parent=gene43 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 49874 50547 1 - . ID=gene44;Target=md5:494051ed1147d22a2b2967b64c329678:19837290 1 412 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 49874 50284 1 - . Parent=gene44 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 50284 50285 0.587 - . Parent=gene44 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 50546 50547 0.677 - . Parent=gene44 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 50547 50547 1 - . Parent=gene44 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 50433 51134 0.978 - . ID=gene45;Target=md5:634ef96163dc4d4f8a585fe8059d867b:19807151 1 426 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 50433 50834 0.978 - . Parent=gene45 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene45 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene45 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51113 51134 1 - . Parent=gene45 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 50475 50702 1 + . ID=gene46;Target=md5:950b7715ab6cc030a8c810a0dba2dd33:8727457 1 228 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 50475 50702 1 + . Parent=gene46 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 50475 51193 1 - . ID=gene47;Target=md5:754b35896aef0625da39ee42e61db715:8731976 1 441 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 50475 50834 1 - . Parent=gene47 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene47 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene47 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51113 51193 1 - . Parent=gene47 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 50590 51354 1 - . ID=gene48;Target=md5:741ff4d6dd193d77cc75fb61f373ca5b:19805724 1 385 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 50590 50834 1 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51113 51216 1 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51216 51217 0.988 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51318 51319 1 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51319 51354 1 - . Parent=gene48 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 50758 52232 0.991 - . ID=gene49;Target=md5:597ada174987f3f2f0b2e4046f09247d:19866668 1 647 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 50758 50834 0.948 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51113 51216 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51216 51217 0.988 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51318 51319 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51319 51474 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51552 51623 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51711 51758 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51849 51896 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51983 52055 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 52163 52232 0.986 - . Parent=gene49 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 51139 51852 0.915 - . ID=gene50;Target=md5:8fdc30d821ff25b48b6182936cf72cd5:2747604 1 362 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51139 51216 0.718 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51216 51217 0.988 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51318 51319 1 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51319 51474 0.974 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51552 51623 1 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51711 51758 0.979 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51849 51852 1 - . Parent=gene50 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 51334 52222 0.905 - . ID=gene51;Target=md5:26e5980fbaaefb58d84de6755d521845:2596256 1 446 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51334 51474 0.766 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51552 51623 1 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51711 51758 1 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51849 51896 0.979 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51983 52055 1 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 52163 52222 1 - . Parent=gene51 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 51376 52048 0.939 - . ID=gene52;Target=md5:d342e4ee66b1c4db3e83e076c5dd7d44:2596953 1 336 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51376 51474 0.854 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51552 51623 1 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51711 51758 1 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51849 51896 0.979 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51983 52048 1 - . Parent=gene52 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 51376 52224 0.91 - . ID=gene53;Target=md5:7f11e59ff50ce68b25c6120418df3d51:5839790 1 404 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51376 51474 0.848 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51552 51623 0.931 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51711 51758 0.823 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51849 51896 0.958 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51983 52055 0.959 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 52163 52224 0.927 - . Parent=gene53 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 51446 52242 0.996 - . ID=gene54;Target=md5:b0183ab4aa646b9e8f95f61daf0e23a3:403229 1 350 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51446 51474 0.966 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51552 51623 1 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51711 51758 1 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51849 51896 1 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51983 52055 0.986 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 52163 52242 1 - . Parent=gene54 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 51599 52231 0.993 - . ID=gene55;Target=md5:8ed84d5653334535562a21058880db81:9785390 1 263 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51599 51623 1 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51711 51758 1 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51849 51896 1 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 51983 52055 1 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 52163 52231 0.986 - . Parent=gene55 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 53602 54271 0.994 - . ID=gene56;Target=md5:16258f1ad08d9c0c91c627eefad05949:8697180 1 427 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 53602 53914 0.992 - . Parent=gene56 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene56 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene56 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54159 54271 1 - . Parent=gene56 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 53602 54710 0.995 - . ID=gene57;Target=md5:2642a22855698a3125c99a9759f9147c:19803773 1 627 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 53602 53914 0.994 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54159 54335 1 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54574 54710 0.993 - . Parent=gene57 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 53624 54279 0.989 - . ID=gene58;Target=md5:752fa8c75ecef45cfa9cf0c5a59afe49:19840006 1 413 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 53624 53914 0.988 - . Parent=gene58 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene58 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene58 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54159 54279 0.992 - . Parent=gene58 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 53624 54283 0.992 - . ID=gene59;Target=md5:0743a82e324754dfc94ed4c0cd8a8816:19823046 1 417 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 53624 53914 0.988 - . Parent=gene59 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene59 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene59 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54159 54283 1 - . Parent=gene59 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 53631 54335 0.866 - . ID=gene60;Target=md5:198a4aa7626135303d0e996d4e2775ef:2393553 57 528 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 53631 53914 0.991 - . Parent=gene60 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene60 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene60 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54159 54335 0.664 - . Parent=gene60 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 53632 53909 0.991 + . ID=gene61;Target=md5:5a03dd7605925c94812a9550acc2d354:8697126 1 279 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 53632 53909 0.991 + . Parent=gene61 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 53645 54320 0.99 - . ID=gene62;Target=md5:f692730f2bd8700f690f8a231d2e446b:19843722 1 431 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 53645 53914 0.991 - . Parent=gene62 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene62 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene62 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54159 54320 0.988 - . Parent=gene62 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 53829 54829 0.991 - . ID=gene63;Target=md5:18fb5ebf5d11ec1db0d36de3ea2a049d:8696505 49 568 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 53829 53914 0.971 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54159 54335 1 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54574 54829 0.992 - . Parent=gene63 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 53850 54807 0.913 - . ID=gene64;Target=md5:ed9e14d2b83e7ea606c9d1d5fdbeb857:5839694 1 477 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 53850 53914 0.746 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54159 54335 0.887 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54574 54807 0.979 - . Parent=gene64 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 54167 54769 0.997 - . ID=gene65;Target=md5:7db3e698f27f19f0343e6b23af07a5b3:9778953 1 365 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54167 54335 0.994 - . Parent=gene65 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene65 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene65 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54574 54769 1 - . Parent=gene65 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 54178 54828 0.979 - . ID=gene66;Target=md5:6021387359d7e25495b6b804ebbbb0aa:19865963 1 414 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54178 54335 0.953 - . Parent=gene66 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene66 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene66 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54574 54828 0.996 - . Parent=gene66 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 54212 54697 0.952 - . ID=gene67;Target=md5:72f3e9cbd94835f59aa0a43b22a01b0f:9784661 1 248 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54212 54335 0.96 - . Parent=gene67 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene67 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene67 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54574 54697 0.944 - . Parent=gene67 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 54263 54808 0.93 - . ID=gene68;Target=md5:2fa0ef57b1f4391f7a2ae4283410311c:933584 1 311 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54263 54335 0.815 - . Parent=gene68 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene68 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene68 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54574 54808 0.966 - . Parent=gene68 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 54321 54829 0.992 - . ID=gene69;Target=md5:215d14a53287c2aca2d8bd12b09aca14:8696543 49 319 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54321 54335 1 - . Parent=gene69 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene69 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene69 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54574 54829 0.992 - . Parent=gene69 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 54991 56652 0.998 + . ID=gene70;Target=md5:dd287e28fe668e94028c1a241a6a1c7d:19874826 1 651 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 54991 55057 0.985 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 55058 55059 0.896 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 55143 55144 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 55145 55230 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 55231 55232 0.997 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 55298 55299 0 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 55300 55341 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 55342 55343 0.997 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 55451 55452 0.898 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 55453 55498 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 55499 55500 0.237 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 55616 55617 0.997 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 55618 55704 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 55705 55706 0.991 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 55816 55817 0.952 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 55818 55873 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 55874 55875 0.983 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 56034 56035 0.0357 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 56036 56153 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 56154 56155 0.99 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 56279 56280 0.703 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 56281 56339 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 56340 56341 0.464 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 56447 56448 0.287 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 56449 56520 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 56521 56522 0.187 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 56633 56634 0.791 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 56635 56652 1 + . Parent=gene70 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 58115 59001 0.984 + . ID=gene71;Target=md5:a12796a152e829b54f2f56b4910d701c:19741042 1 460 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 58115 58209 0.958 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 58210 58211 0.856 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 58459 58460 1 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 58461 58526 1 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 58527 58528 0.784 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 58622 58623 0.977 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 58624 58717 1 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 58718 58719 0 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 58794 58795 1 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 58796 59001 0.983 + . Parent=gene71 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 59010 59484 1 + . ID=gene72;Target=md5:cc404517a12f1a399ab48b948f4e71ff:8715845 1 475 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 59010 59484 1 + . Parent=gene72 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 59148 59880 0.991 + . ID=gene73;Target=md5:33eefc92073ab38229f0ce775746b219:19864079 1 653 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 59148 59526 0.989 + . Parent=gene73 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 59527 59528 0.993 + . Parent=gene73 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 59605 59606 0.997 + . Parent=gene73 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 59607 59880 0.993 + . Parent=gene73 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 59164 59418 0.996 + . ID=gene74;Target=md5:cdbabc0602366c37167aba18498d8232:9787190 1 255 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 59164 59418 0.996 + . Parent=gene74 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 59643 59976 0.991 + . ID=gene75;Target=md5:e72969c46cd2e7d078d339cda62260a8:397215 1 333 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 59643 59976 0.991 + . Parent=gene75 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 60190 60487 0.987 + . ID=gene76;Target=md5:322e03bbf0f0ddac43d4ca12dd0cc795:398270 1 298 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 60190 60487 0.987 + . Parent=gene76 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 60319 61000 0.997 - . ID=gene77;Target=md5:c94289917098254e5d5b7c3ed48e81b7:19801463 1 682 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 60319 61000 0.997 - . Parent=gene77 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 60410 60968 1 - . ID=gene78;Target=md5:48f4c66f41d3805c7213639bcb949d6a:8692149 1 559 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 60410 60968 1 - . Parent=gene78 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 60450 60902 0.998 - . ID=gene79;Target=md5:1b775af1ef6f8f8b80ba60a8245cba0b:19827386 1 453 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 60450 60902 0.998 - . Parent=gene79 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 60459 60958 0.996 - . ID=gene80;Target=md5:2acbf49eaca817b303d60c7c22dfdd15:7610825 1 500 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 60459 60958 0.996 - . Parent=gene80 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 60463 60958 0.996 - . ID=gene81;Target=md5:9b6924737e47f2eed133a565b35dd804:8736724 1 496 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 60463 60958 0.996 - . Parent=gene81 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 60508 60959 0.983 - . ID=gene82;Target=md5:653662b06e7e300256655269264f4004:19828552 1 452 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 60508 60959 0.983 - . Parent=gene82 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 60542 60950 1 - . ID=gene83;Target=md5:81a8f87434a337a21077462e2a1cb5c9:19838343 1 409 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 60542 60950 1 - . Parent=gene83 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 60558 60947 0.995 - . ID=gene84;Target=md5:1634572862a7fc3d7dcb1ca5950cf137:397216 1 390 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 60558 60947 0.995 - . Parent=gene84 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 61186 61922 0.957 + . ID=gene85;Target=md5:3ab44e284886cca199c6a4d221725734:2722481 1 371 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 61186 61281 0.99 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 61282 61283 0.316 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 61563 61564 0.959 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 61565 61641 0.948 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 61642 61643 0 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 61722 61723 0.994 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 61724 61922 0.945 + . Parent=gene85 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 61212 61974 1 + . ID=gene86;Target=md5:f63fe9c59e53d9587766136a15864412:19837990 1 398 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 61212 61281 1 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 61282 61283 0.316 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 61563 61564 0.959 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 61565 61641 1 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 61642 61643 0 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 61722 61723 0.994 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 61724 61974 1 + . Parent=gene86 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 62196 62646 0.921 + . ID=gene87;Target=md5:77ba8b822b44308184b4dcab6ecfa75e:2747645 1 448 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 62196 62646 0.921 + . Parent=gene87 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 63106 63942 1 + . ID=gene88;Target=md5:c4e23aeca494361878d3407ae5c05e3d:8701755 1 598 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 63106 63178 1 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 63179 63180 0 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 63269 63270 0.999 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 63271 63391 1 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 63392 63393 0.823 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 63466 63467 0 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 63468 63683 1 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 63684 63685 0.999 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 63753 63754 0.992 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 63755 63942 1 + . Parent=gene88 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 63306 63942 1 + . ID=gene89;Target=md5:bbbbef70abd153db9376c364e9fafbae:8735505 1 490 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 63306 63391 1 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 63392 63393 0.823 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 63466 63467 0 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 63468 63683 1 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 63684 63685 0.999 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 63753 63754 0.992 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 63755 63942 1 + . Parent=gene89 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 63910 64320 0.979 + . ID=gene90;Target=md5:67e8b62becffff524bac4f51bfa344e1:19798134 1 412 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 63910 64320 0.979 + . Parent=gene90 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 63935 64280 0.986 + . ID=gene91;Target=md5:3b10d6f56bfea7b6b57a41146f6c140b:5846657 1 345 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 63935 64280 0.986 + . Parent=gene91 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 64196 65033 0.998 - . ID=gene92;Target=md5:e5089d2bdb42934617cd38749662eb21:19877649 1 632 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 64196 64605 1 - . Parent=gene92 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 64605 64606 0.942 - . Parent=gene92 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 64811 64812 0.991 - . Parent=gene92 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 64812 65033 0.995 - . Parent=gene92 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 65467 66157 0.992 + . ID=gene93;Target=md5:f19b5223816de3060184fb9250936fce:19875812 1 621 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 65467 66058 0.992 + . Parent=gene93 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 66059 66060 1 + . Parent=gene93 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 66128 66129 0.994 + . Parent=gene93 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 66130 66157 0.964 + . Parent=gene93 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 67358 68298 0.982 + . ID=gene94;Target=md5:893d07af699d973ed4e8e3423fc87165:396603 1 749 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 67358 67550 1 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 67551 67552 0.896 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 67634 67635 0.998 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 67636 67908 0.969 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 67909 67910 1 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 68009 68010 0.999 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 68011 68298 0.983 + . Parent=gene94 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 67871 68396 0.99 + . ID=gene95;Target=md5:3b9295d3ee44af4cf4f79b2e27003f1b:19742246 1 423 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 67871 67908 0.947 + . Parent=gene95 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 67909 67910 1 + . Parent=gene95 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 68009 68010 0.999 + . Parent=gene95 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 68011 68396 0.99 + . Parent=gene95 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 69163 69893 0.98 + . ID=gene96;Target=md5:79435902b3753af094ba24f8a4847978:19872996 1 536 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69163 69265 0.971 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69375 69598 1 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69685 69893 0.964 + . Parent=gene96 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 69171 69968 0.997 + . ID=gene97;Target=md5:811cb37790973c1b417241d62fe2a569:19869130 1 603 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69171 69265 0.989 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69375 69598 1 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69685 69968 0.996 + . Parent=gene97 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 69173 69853 0.992 + . ID=gene98;Target=md5:bce4ec40fb993e1733ea6d2d16398ed0:19870921 1 486 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69173 69265 0.989 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69375 69598 1 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69685 69853 0.982 + . Parent=gene98 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 69196 70072 0.932 + . ID=gene99;Target=md5:49b16de93b5b34374e7e2a7e71253124:905849 1 455 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69196 69265 0.986 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69375 69598 0.991 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69685 69831 0.816 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69832 69833 0.48 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 70061 70062 0.999 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 70063 70072 0.4 + . Parent=gene99 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 69219 69775 1 + . ID=gene100;Target=md5:979a4ec86ab17d2a4625c90ed575c145:7612059 1 362 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69219 69265 1 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69375 69598 1 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 69685 69775 1 + . Parent=gene100 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 71414 71679 0.958 + . ID=gene101;Target=md5:e311a17e67c458d42ed86de05242f87b:17520 1 168 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 71414 71479 1 + . Parent=gene101 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 71480 71481 0.948 + . Parent=gene101 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 71577 71578 0.982 + . Parent=gene101 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 71579 71679 0.931 + . Parent=gene101 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 71458 72009 0.99 + . ID=gene102;Target=md5:1f44f865b53e6414d5296a088f0a75e7:8734707 1 319 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 71458 71479 1 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 71480 71481 0.948 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 71577 71578 0.982 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 71579 71779 0.985 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 71780 71781 0.998 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 71912 71913 0.977 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 71914 72009 1 + . Parent=gene102 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72121 72340 0.966 + . ID=gene103;Target=md5:7d5ceada204939fc948a837d482fe57c:2597031 1 221 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72121 72340 0.966 + . Parent=gene103 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72121 72603 0.931 + . ID=gene104;Target=md5:a8b76267e5f1749ca29c5465c631ab8e:958004 1 484 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72121 72603 0.931 + . Parent=gene104 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72137 72552 0.917 + . ID=gene105;Target=md5:7882e88f260382672a97918b652cad4a:1159193 1 351 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72137 72296 1 + . Parent=gene105 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene105 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene105 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72552 0.845 + . Parent=gene105 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72185 72753 1 + . ID=gene106;Target=md5:fa15dcef7c84118ca9ee3f95600132c8:8737761 1 497 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72185 72296 1 + . Parent=gene106 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene106 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene106 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72753 1 + . Parent=gene106 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72204 72660 0.856 + . ID=gene107;Target=md5:03636fa4a9e17baae04ad57d13cdc386:2749490 79 466 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72204 72296 0.634 + . Parent=gene107 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene107 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene107 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72660 0.926 + . Parent=gene107 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72214 72751 0.987 + . ID=gene108;Target=md5:9a5ec5d4597ac1be9d10ba63ecc457c1:7610337 1 466 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72214 72296 1 + . Parent=gene108 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene108 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene108 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72751 0.984 + . Parent=gene108 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72231 72731 0.998 + . ID=gene109;Target=md5:df066a65ac8236486c7d59f90157d43e:19829297 1 429 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72231 72296 1 + . Parent=gene109 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene109 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene109 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72731 0.997 + . Parent=gene109 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72246 72753 0.995 + . ID=gene110;Target=md5:ace313cc0542136c91ac52da3c676d77:19829716 1 434 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72246 72296 0.98 + . Parent=gene110 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene110 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene110 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72753 0.997 + . Parent=gene110 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72252 72753 0.988 + . ID=gene111;Target=md5:2d0e152a577c91a47f0b5781e67cd3b0:19831127 1 431 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72252 72296 1 + . Parent=gene111 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene111 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene111 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72753 0.988 + . Parent=gene111 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72252 72803 1 + . ID=gene112;Target=md5:6db92a6a61672ceedb192c31b975e370:8731753 1 480 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72252 72296 1 + . Parent=gene112 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene112 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene112 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72803 1 + . Parent=gene112 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72262 72754 1 + . ID=gene113;Target=md5:14f58b2b12e291455a69d48e56728992:19839622 1 421 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72262 72296 1 + . Parent=gene113 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene113 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene113 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72754 1 + . Parent=gene113 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72264 72572 0.966 + . ID=gene114;Target=md5:1c07f0f3b1115fb653b7f47df5b1344b:2762921 1 237 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72264 72296 0.939 + . Parent=gene114 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene114 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene114 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72572 0.966 + . Parent=gene114 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72264 72670 0.93 + . ID=gene115;Target=md5:061cac88caefa5d8bba4a1ff47031dc3:2762922 1 337 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72264 72296 0.97 + . Parent=gene115 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene115 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene115 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72670 0.93 + . Parent=gene115 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72270 72801 0.998 + . ID=gene116;Target=md5:9b19d8ea196896df9be4cf56b285abf2:19825274 1 460 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72270 72296 0.963 + . Parent=gene116 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene116 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene116 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72801 0.998 + . Parent=gene116 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72275 72752 0.872 + . ID=gene117;Target=md5:a179a430866ce2f2826fec132cd9e71f:19855736 1 420 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72275 72296 1 + . Parent=gene117 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene117 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene117 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72752 0.872 + . Parent=gene117 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72277 72753 1 + . ID=gene118;Target=md5:b2925aa2103833c4c0e3e2ba4e27e66f:8695920 1 405 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72277 72296 1 + . Parent=gene118 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene118 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene118 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72369 72753 1 + . Parent=gene118 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72359 72801 0.985 - . ID=gene119;Target=md5:80d8c2289eb0b45dd9ab395572f44eae:19841232 1 443 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72359 72801 0.985 - . Parent=gene119 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72367 72810 1 - . ID=gene120;Target=md5:3c0dc775fc37af77e71cd10a45d4723c:19826275 1 444 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72367 72810 1 - . Parent=gene120 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72371 72801 0.995 - . ID=gene121;Target=md5:f2f65df067412c3be8da37366e71763f:19834843 1 430 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72371 72801 0.995 - . Parent=gene121 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72372 72801 0.99 - . ID=gene122;Target=md5:faf314d3fa8ba5d3d99734b83ebb7f7b:19828253 1 431 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72372 72801 0.99 - . Parent=gene122 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72372 72801 1 - . ID=gene123;Target=md5:897eae7810009eb141a5f887289d95c8:19825742 1 430 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72372 72801 1 - . Parent=gene123 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72374 72827 0.992 - . ID=gene124;Target=md5:e252994eb503f22fdc871a97738a525a:19828054 1 455 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72374 72827 0.992 - . Parent=gene124 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72383 72801 0.995 - . ID=gene125;Target=md5:11f83a01fda0f6e2061e6e17dc9cc0fe:19844666 1 418 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72383 72801 0.995 - . Parent=gene125 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72384 72801 1 - . ID=gene126;Target=md5:8e8cf2914e87c5de17ca1cea5185961d:19829934 1 418 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72384 72801 1 - . Parent=gene126 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72386 72802 0.993 - . ID=gene127;Target=md5:c39b7a42d0e463287ec636842fe38b67:19842362 1 417 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72386 72802 0.993 - . Parent=gene127 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72386 72803 0.974 - . ID=gene128;Target=md5:dc0b347c18391d65d897b1c1f14bc31f:19837074 1 417 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72386 72803 0.974 - . Parent=gene128 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72390 72754 0.997 - . ID=gene129;Target=md5:5a9fcf1a7370455e62e2701803939c8e:8728304 1 365 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72390 72754 0.997 - . Parent=gene129 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72390 72804 0.98 - . ID=gene130;Target=md5:3f342edcab14d21711f3d75e3ff81743:19827775 1 416 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72390 72804 0.98 - . Parent=gene130 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72399 72801 1 - . ID=gene131;Target=md5:a3891b57fd37552bdad1be4e20266a5a:19855995 1 403 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72399 72801 1 - . Parent=gene131 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72400 72753 1 - . ID=gene132;Target=md5:cc7281740fd5e50cb1f19a22a728e790:8694120 1 354 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72400 72753 1 - . Parent=gene132 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72404 72804 0.998 - . ID=gene133;Target=md5:b9d8ea84787a6573a7bd2acdb795af44:19831839 1 401 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72404 72804 0.998 - . Parent=gene133 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72422 72826 0.998 - . ID=gene134;Target=md5:d056310e74cdfca4f2f5de040aabc6c6:19833332 1 405 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72422 72826 0.998 - . Parent=gene134 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72424 72753 0.929 + . ID=gene135;Target=md5:b7056f0f128b406b094ebf5cb33fb74f:3449674 1 333 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72424 72753 0.929 + . Parent=gene135 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72437 72805 0.981 - . ID=gene136;Target=md5:fd4ec29ab7c96a341ad546c954b7f557:8732348 1 369 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72437 72805 0.981 - . Parent=gene136 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72522 72801 0.971 - . ID=gene137;Target=md5:fd65d023d2d6b71c478da3cfa418cbbc:8695842 1 280 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72522 72801 0.971 - . Parent=gene137 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72653 74046 0.978 - . ID=gene138;Target=md5:2c08f2fc011c03e5aa709690db242c3b:2597485 1 163 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72653 72789 0.978 - . Parent=gene138 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72789 72790 0 - . Parent=gene138 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 74020 74021 0.514 - . Parent=gene138 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 74021 74046 0.615 - . Parent=gene138 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 72653 74920 0.919 - . ID=gene139;Target=md5:44f49124e83c2c61713d3c50b3a9a47c:3450080 1 166 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 72653 72800 0.919 - . Parent=gene139 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 72800 72801 0 - . Parent=gene139 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 74900 74901 0.919 - . Parent=gene139 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 74901 74920 0.75 - . Parent=gene139 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 79098 79663 0.866 - . ID=gene140;Target=md5:e7ffec1ba9f35a3e29c9946f86b8fe72:19857409 11 314 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 79098 79127 0.767 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 79127 79128 0 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 79240 79241 0 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 79241 79487 0.866 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 79487 79488 0.899 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 79635 79636 0.999 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 79636 79663 1 - . Parent=gene140 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 86444 89957 0.741 - . ID=gene141;Target=md5:2276b4a96eb715159638ed0f90239b89:19873300 87 582 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 86444 86516 0.767 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 86516 86517 0.999 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 89439 89440 0.999 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 89440 89702 0.683 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 89702 89703 0.846 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 89793 89794 0.933 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 89794 89957 0.823 - . Parent=gene141 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 90829 91133 0.948 + . ID=gene142;Target=md5:88e24a075574a85734a081b57a7ec852:5845361 1 307 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 90829 91133 0.948 + . Parent=gene142 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 91050 91786 1 - . ID=gene143;Target=md5:b18a91dba09f9ffefbe7b4a6aed19945:8735154 1 543 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 91050 91401 1 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 91401 91402 1 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 91523 91524 0.917 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 91524 91713 1 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 91713 91714 0.848 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 91785 91786 0.993 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 91786 91786 1 - . Parent=gene143 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 92903 93265 1 - . ID=gene144;Target=md5:ddbfcce4683cac59087c5f26e674349b:9786193 1 266 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 92903 93008 1 - . Parent=gene144 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 93008 93009 0.987 - . Parent=gene144 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 93105 93106 0.925 - . Parent=gene144 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 93106 93265 1 - . Parent=gene144 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 93551 94053 0.957 - . ID=gene145;Target=md5:d9d61048b8d25d868bda7f00a0831100:19806050 1 401 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 93551 93913 0.957 - . Parent=gene145 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 93913 93914 0.992 - . Parent=gene145 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 94016 94017 0.996 - . Parent=gene145 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 94017 94053 0.919 - . Parent=gene145 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 93552 93837 0.83 - . ID=gene146;Target=md5:a0d33d57c705a829d80c318c595fcccb:2047981 81 377 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 93552 93837 0.83 - . Parent=gene146 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 93633 94384 1 - . ID=gene147;Target=md5:41d17c6950c12d0d8ec2b305108f08ac:19857902 1 407 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 93633 93913 1 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 93913 93914 0.992 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 94016 94017 0.996 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 94017 94124 1 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 94124 94125 0.998 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 94366 94367 0.994 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 94367 94384 1 - . Parent=gene147 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 94706 95368 0.95 - . ID=gene148;Target=md5:da4c1ce6a2ee20bb9c4c5d9462be98de:9782167 1 392 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 94706 94771 0.871 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 94771 94772 0.993 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 94876 94877 0.985 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 94877 94985 0.954 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 94985 94986 0.957 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 95070 95071 0.958 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 95071 95147 1 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 95147 95148 0.992 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 95233 95234 0.937 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 95234 95368 0.956 - . Parent=gene148 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 95317 96614 0.995 - . ID=gene149;Target=md5:c9a4247a29baa59833607fc71f58bb40:19866748 1 646 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 95317 95454 1 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 95454 95455 0.938 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 95841 95842 0.988 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 95842 95947 0.991 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 95947 95948 0.999 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 96035 96036 0.993 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 96036 96140 1 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 96140 96141 0.869 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 96231 96232 0.996 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 96232 96330 1 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 96330 96331 0.996 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 96417 96418 0.958 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 96418 96614 0.987 - . Parent=gene149 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 95905 96592 0.989 - . ID=gene150;Target=md5:e6343ecf374a95dd0356831650af82f1:9778306 1 422 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 95905 95947 0.907 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 95947 95948 0.999 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 96035 96036 0.993 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 96036 96140 1 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 96140 96141 0.869 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 96231 96232 0.996 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 96232 96330 1 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 96330 96331 0.996 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 96417 96418 0.958 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 96418 96592 0.977 - . Parent=gene150 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 95929 96592 0.984 - . ID=gene151;Target=md5:29b2d16dd6ee3e8669ae77b4e053ee20:9778321 1 398 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 95929 95947 0.947 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 95947 95948 0.999 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 96035 96036 0.993 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 96036 96140 0.981 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 96140 96141 0.869 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 96231 96232 0.996 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 96232 96330 1 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 96330 96331 0.996 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 96417 96418 0.958 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 96418 96592 0.977 - . Parent=gene151 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 98857 99326 1 - . ID=gene152;Target=md5:4a2861ff4a54b0b8a099c7ca178c113f:19836538 1 392 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 98857 99121 1 - . Parent=gene152 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene152 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene152 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99200 99326 1 - . Parent=gene152 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 98861 99271 1 - . ID=gene153;Target=md5:432d83294aa0f2f3fc1b7673977ea4d1:8737545 1 333 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 98861 99121 1 - . Parent=gene153 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene153 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene153 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99200 99271 1 - . Parent=gene153 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 98861 99511 0.9 - . ID=gene154;Target=md5:50590ee6555b56ad95151d25d300c6fe:2446000 47 535 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 98861 99121 0.992 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99200 99361 0.883 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99443 99511 0.594 - . Parent=gene154 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 98878 99663 0.987 - . ID=gene155;Target=md5:08f77d13c4ad88c1c44c0314426f2218:5846455 1 525 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 98878 99121 0.996 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99200 99361 1 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99443 99511 1 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99511 99512 0.998 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99612 99613 0.999 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99613 99663 0.882 - . Parent=gene155 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 98909 99450 1 - . ID=gene156;Target=md5:d75212b190b11adfcbc1b62e6d392ed1:8734273 1 383 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 98909 99121 1 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99200 99361 1 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99443 99450 1 - . Parent=gene156 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 98987 99504 0.962 - . ID=gene157;Target=md5:dd3ace06137c29bf383632984aadf8af:397246 1 362 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 98987 99121 0.9 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99200 99361 1 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99443 99504 1 - . Parent=gene157 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 99613 100804 0.998 - . ID=gene158;Target=md5:eaca300e106a2e1c1897455c6a2cb618:19863867 1 661 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99613 99877 1 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99877 99878 0.981 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100101 100102 0.978 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100102 100226 1 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100327 100434 1 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100539 100646 1 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100646 100647 0 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100748 100749 0.995 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100749 100804 0.982 - . Parent=gene158 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 99698 100804 0.997 - . ID=gene159;Target=md5:1fd1b5316d6ec8962be7986ceebf3ce6:19870774 1 577 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99698 99877 0.994 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99877 99878 0.981 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100101 100102 0.978 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100102 100226 1 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100327 100434 1 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100539 100646 1 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100646 100647 0 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100748 100749 0.995 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100749 100804 0.982 - . Parent=gene159 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 99801 100766 0.933 - . ID=gene160;Target=md5:8bfbb0491705b51d42ef6d8ba0c3e2ef:958152 1 437 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 99801 99877 0.76 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 99877 99878 0.981 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100101 100102 0.978 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100102 100226 0.948 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100327 100434 1 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100539 100646 0.972 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100646 100647 0 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100748 100749 0.995 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100749 100766 1 - . Parent=gene160 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 100105 100634 1 - . ID=gene161;Target=md5:8e46b5509ea749211c8c5cacdc1e2500:8732177 1 326 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100105 100226 1 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100327 100434 1 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 100539 100634 1 - . Parent=gene161 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 103616 104455 0.96 + . ID=gene162;Target=md5:0c4c41ad6668fd55d5f1140088f1064d:2580948 1 435 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103616 103753 0.975 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103982 104035 0.981 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104118 104198 0.975 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104295 104455 0.932 + . Parent=gene162 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 103616 104478 0.909 + . ID=gene163;Target=md5:d4793f2935cfa07221be201386cb079b:2759743 1 460 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103616 103753 1 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103982 104035 0.981 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104118 104198 1 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104295 104478 0.78 + . Parent=gene163 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 103616 104819 0.952 + . ID=gene164;Target=md5:e47b883ccda180d280195029954ea7f5:5840051 1 700 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103616 103753 1 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103982 104035 1 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104118 104198 1 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104295 104724 0.921 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104725 104726 0.953 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104801 104802 0.814 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104803 104819 0.765 + . Parent=gene164 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 103706 104416 0.829 + . ID=gene165;Target=md5:41ccefe046c76c005c6f83a09aac40de:8686177 99 409 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103706 103731 0.885 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 103732 103733 0 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 103797 103798 0 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103799 103826 0.518 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 103827 103828 0.326 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103982 104035 0.778 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104118 104198 0.84 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104295 104416 0.844 + . Parent=gene165 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 103713 104391 0.812 + . ID=gene166;Target=md5:556ae7f08b7cc887b54786f0bc100dd4:453733 78 357 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103713 103731 1 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 103732 103733 0 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 103797 103798 0 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103799 103826 0.518 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 103827 103828 0.326 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103982 104035 0.778 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104118 104198 0.84 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104295 104391 0.809 + . Parent=gene166 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 103746 104415 0.824 + . ID=gene167;Target=md5:b9155494bf5b0de513f322e685542888:8722221 103 366 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103746 103753 0.875 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103982 104035 0.778 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104118 104198 0.84 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104295 104415 0.835 + . Parent=gene167 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 103746 104440 0.829 + . ID=gene168;Target=md5:0e851efbbe2bfb244a388865f785495d:623629 87 375 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103746 103753 0.875 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103982 104035 0.778 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104118 104198 0.84 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104295 104440 0.842 + . Parent=gene168 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 103982 104683 0.818 + . ID=gene169;Target=md5:f1cb6a33be382d29ff291be589f1ed70:9778203 71 401 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103982 104035 0.759 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104118 104198 0.84 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104295 104455 0.826 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104456 104457 0.522 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104647 104648 0 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104649 104683 0.971 + . Parent=gene169 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 103982 104881 0.909 + . ID=gene170;Target=md5:b289385ff9ca374ceb056d5950d090b5:8731408 68 518 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 103982 104035 0.944 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104118 104198 0.951 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104295 104455 0.888 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104456 104457 0.522 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104647 104648 0 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104649 104724 0.934 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104725 104726 0.953 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104801 104802 0.814 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104803 104881 0.861 + . Parent=gene170 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 104394 105201 0.83 + . ID=gene171;Target=md5:ddab1d6f7c76a6508e85423cd56d46e5:937871 1 457 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104394 104455 0.887 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104456 104457 0.522 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104647 104648 0 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104649 104724 0.921 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104725 104726 0.953 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 104801 104802 0.814 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104803 104928 0.841 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104929 104930 0.881 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105008 105009 0.99 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105010 105201 0.768 + . Parent=gene171 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 104803 105220 0.852 + . ID=gene172;Target=md5:257d2dc2f7c0bb730fe685a8052aaa63:9781141 22 358 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104803 104928 0.841 + . Parent=gene172 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104929 104930 0.881 + . Parent=gene172 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105008 105009 0.99 + . Parent=gene172 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105010 105220 0.858 + . Parent=gene172 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 104912 105793 0.887 + . ID=gene173;Target=md5:649b4501a3ba1d922dce7b623c7f6de9:7611662 1 549 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 104912 104928 0.824 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 104929 104930 0.881 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105008 105009 0.99 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105010 105228 0.863 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.912 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105793 0.902 + . Parent=gene173 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105009 105793 0.884 + . ID=gene174;Target=md5:c6730817f9a41f80296421e6b7da6f25:8734901 1 533 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105009 105228 0.864 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.912 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105793 0.89 + . Parent=gene174 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105069 105815 0.876 + . ID=gene175;Target=md5:c24d4bd4c7cae864049bd096522750b1:19801855 1 495 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105069 105228 0.831 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.912 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105815 0.892 + . Parent=gene175 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105090 105793 0.878 + . ID=gene176;Target=md5:52b0aff6e54274ccb35b371b7630b68a:8695006 1 452 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105090 105228 0.82 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.912 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 0.972 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105793 0.902 + . Parent=gene176 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105091 105793 0.857 + . ID=gene177;Target=md5:085f029e3f483828cb30f70b141fa58a:8702125 1 452 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105091 105228 0.786 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.886 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 0.972 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105793 0.896 + . Parent=gene177 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105140 105793 0.88 + . ID=gene178;Target=md5:174d324a9dca8baddcdcd0dbef55f969:19825204 1 402 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105140 105228 0.798 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.912 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105793 0.902 + . Parent=gene178 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105170 105793 0.862 + . ID=gene179;Target=md5:0920b24475a189fbfc148593eec03cb6:2748033 88 460 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105170 105228 0.686 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.904 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105793 0.896 + . Parent=gene179 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105175 105793 0.901 + . ID=gene180;Target=md5:15ed737c8deffb63f79d93a8fecb5a93:19835442 1 367 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105175 105228 0.87 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.912 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105793 0.902 + . Parent=gene180 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105189 105793 0.896 + . ID=gene181;Target=md5:f8e9d021f04423c2ad6499f4ce6eca57:8734878 1 354 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105189 105228 0.875 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.912 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105793 0.884 + . Parent=gene181 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105190 105793 0.906 + . ID=gene182;Target=md5:a45d1a65f8024adcc2ce8bdcdfb36569:19823987 1 352 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105190 105228 0.872 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.912 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105793 0.902 + . Parent=gene182 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105199 105793 0.845 + . ID=gene183;Target=md5:07c4180bd9082b53416a778fee66e3f3:19841468 39 385 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105199 105228 0.833 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105315 105428 0.904 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 0.972 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105793 0.805 + . Parent=gene183 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105348 105815 0.895 + . ID=gene184;Target=md5:15adef11b8ee98d85e7a5e3106495193:2747682 1 302 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105348 105428 0.914 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105815 0.887 + . Parent=gene184 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105348 105815 0.899 + . ID=gene185;Target=md5:f74aca5cee266c7bc442898be20363ae:2412846 1 302 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105348 105428 0.914 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105815 0.892 + . Parent=gene185 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105371 105813 0.897 + . ID=gene186;Target=md5:5db2b668ce1df476a932c078b6e77122:17325 1 277 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105371 105428 0.931 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 0.972 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105813 0.886 + . Parent=gene186 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105382 105851 0.986 + . ID=gene187;Target=md5:e6338114b6c0dcc78811d3be5b36ff63:3449578 65 370 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105382 105428 0.979 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 0.903 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105851 0.986 + . Parent=gene187 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105394 105860 0.827 + . ID=gene188;Target=md5:940e92280507db531e4654cc1f1054ef:19859011 1 296 - md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105394 105428 0.971 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105500 105535 1 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105630 105860 0.827 + . Parent=gene188 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 105662 105806 0.855 - . ID=gene189;Target=md5:816e83d74c3a633c3ccc005f1c14d55a:8735385 30 173 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 105662 105806 0.855 - . Parent=gene189 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 106097 106973 0.998 + . ID=gene190;Target=md5:1adc4b78b212af1a83a6460bd27222f0:19871766 1 425 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106097 106290 0.995 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106566 106619 1 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106702 106782 1 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106878 106973 1 + . Parent=gene190 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 106133 106934 0.966 + . ID=gene191;Target=md5:21c1b9817f74d01695e650726543cfbc:17300 1 350 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106133 106290 0.962 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106566 106619 0.981 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106702 106782 1 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106878 106934 0.912 + . Parent=gene191 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 106148 106751 0.966 + . ID=gene192;Target=md5:c446b7e0b708aafe5473ef397e104ae3:7612621 1 248 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106148 106290 0.948 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106566 106619 1 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106702 106751 0.98 + . Parent=gene192 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 106149 106973 0.924 + . ID=gene193;Target=md5:5b0a1904c2c8e69fe643091fee181037:935362 1 377 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106149 106290 0.979 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106566 106619 0.944 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106702 106782 0.975 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106878 106973 0.786 + . Parent=gene193 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 106156 106973 0.915 + . ID=gene194;Target=md5:11a2689b92ee76c83cd57591ae940971:936803 1 374 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106156 106290 0.97 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106566 106619 0.981 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106702 106782 1 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106878 106973 0.729 + . Parent=gene194 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 106156 106973 1 + . ID=gene195;Target=md5:d1a97200c69d88855784612802e7c024:7612394 1 366 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106156 106290 1 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106566 106619 1 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106702 106782 1 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106878 106973 1 + . Parent=gene195 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 106161 106750 0.967 + . ID=gene196;Target=md5:5ae608a9518c5417787d0da5f4dc93b7:2733258 26 261 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106161 106290 0.962 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106566 106619 0.981 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106702 106750 0.724 + . Parent=gene196 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 106168 106917 0.981 + . ID=gene197;Target=md5:7be43cab2c3d57b779ea0f8ceeacfc0c:8729681 1 298 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106168 106290 0.976 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106566 106619 0.981 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106702 106782 0.988 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106878 106917 0.95 + . Parent=gene197 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 106224 106710 0.959 + . ID=gene198;Target=md5:802e6347770300a7bbc0064a90f1f061:2759942 1 130 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106224 106290 0.94 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106566 106619 0.981 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106702 106710 1 + . Parent=gene198 ### md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 106716 106973 0.847 + . ID=gene199;Target=md5:e5c6d7f52bae4b6b57c6320ef95f9b66:9778889 1 162 + md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106716 106782 0.806 + . Parent=gene199 md5:063b1024d68e26716b7f38caf958316f:1877523 gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene199 md5:063b1024d68e26716b7f38caf958316f:1877523 gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene199 md5:063b1024d68e26716b7f38caf958316f:1877523 gth exon 106878 106973 0.875 + . Parent=gene199 ### genometools-1.5.1/testdata/U89959_sas.gff3md5old000066400000000000000000004212551211610345200212440ustar00rootroot00000000000000##gff-version 3 ##sequence-region md5:063b1024d68e26716b7f38caf958316f 1 106973 md5:063b1024d68e26716b7f38caf958316f gth gene 1074 1540 1 + . ID=gene1;Target=md5:14c0ff5e76ef8ac009fdcc923f701356 1 303 + md5:063b1024d68e26716b7f38caf958316f gth exon 1074 1171 1 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 1172 1173 0.866 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 1257 1258 0.994 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f gth exon 1259 1354 1 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 1355 1356 0 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 1430 1431 0.745 + . Parent=gene1 md5:063b1024d68e26716b7f38caf958316f gth exon 1432 1540 1 + . Parent=gene1 ### md5:063b1024d68e26716b7f38caf958316f gth gene 2779 3355 0.84 + . ID=gene2;Target=md5:527995da853a37f9c47e616ce237d523 1 337 + md5:063b1024d68e26716b7f38caf958316f gth exon 2779 2801 0.696 + . Parent=gene2 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 2802 2803 0.459 + . Parent=gene2 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 3041 3042 0 + . Parent=gene2 md5:063b1024d68e26716b7f38caf958316f gth exon 3043 3355 0.84 + . Parent=gene2 ### md5:063b1024d68e26716b7f38caf958316f gth gene 3025 3351 1 + . ID=gene3;Target=md5:f1a0d426e93585553b21aa1a47aa2970 1 327 + md5:063b1024d68e26716b7f38caf958316f gth exon 3025 3351 1 + . Parent=gene3 ### md5:063b1024d68e26716b7f38caf958316f gth gene 3041 3651 0.996 - . ID=gene4;Target=md5:cabe5b677d534fb65e0d2245f61e2bd1 1 536 - md5:063b1024d68e26716b7f38caf958316f gth exon 3041 3550 0.996 - . Parent=gene4 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 3550 3551 1 - . Parent=gene4 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 3625 3626 0.741 - . Parent=gene4 md5:063b1024d68e26716b7f38caf958316f gth exon 3626 3651 1 - . Parent=gene4 ### md5:063b1024d68e26716b7f38caf958316f gth gene 3077 3506 0.974 + . ID=gene5;Target=md5:a9dcd316817972a94c0af505715b10bc 1 426 + md5:063b1024d68e26716b7f38caf958316f gth exon 3077 3506 0.974 + . Parent=gene5 ### md5:063b1024d68e26716b7f38caf958316f gth gene 4768 5357 0.987 - . ID=gene6;Target=md5:e40253c45f8d96170d6af32f8d8e3e05 1 591 + md5:063b1024d68e26716b7f38caf958316f gth exon 4768 5357 0.987 - . Parent=gene6 ### md5:063b1024d68e26716b7f38caf958316f gth gene 9505 10058 1 + . ID=gene7;Target=md5:f28eda487869903339de7a431f00fccd 1 554 + md5:063b1024d68e26716b7f38caf958316f gth exon 9505 10058 1 + . Parent=gene7 ### md5:063b1024d68e26716b7f38caf958316f gth gene 12024 12542 1 - . ID=gene8;Target=md5:300d9c80d9f566412745a6bda32e3e12 1 519 + md5:063b1024d68e26716b7f38caf958316f gth exon 12024 12542 1 - . Parent=gene8 ### md5:063b1024d68e26716b7f38caf958316f gth gene 13014 13465 0.881 - . ID=gene9;Target=md5:c6826f50615c7fb2eb70e294bb7202cb 1 459 + md5:063b1024d68e26716b7f38caf958316f gth exon 13014 13465 0.881 - . Parent=gene9 ### md5:063b1024d68e26716b7f38caf958316f gth gene 15955 16603 0.997 + . ID=gene10;Target=md5:bceada3d0ee38c76dafe93fd74e71dfe 1 649 + md5:063b1024d68e26716b7f38caf958316f gth exon 15955 16603 0.997 + . Parent=gene10 ### md5:063b1024d68e26716b7f38caf958316f gth gene 17165 17684 0.985 + . ID=gene11;Target=md5:8bbc72e5847196327c25661544c6bdf9 1 396 - md5:063b1024d68e26716b7f38caf958316f gth exon 17165 17247 0.97 + . Parent=gene11 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 17248 17249 1 + . Parent=gene11 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 17372 17373 0.994 + . Parent=gene11 md5:063b1024d68e26716b7f38caf958316f gth exon 17374 17684 0.989 + . Parent=gene11 ### md5:063b1024d68e26716b7f38caf958316f gth gene 25221 26100 1 + . ID=gene12;Target=md5:ff7357d7a1877d31d94543a13d64fa0e 1 521 + md5:063b1024d68e26716b7f38caf958316f gth exon 25221 25310 1 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 25311 25312 0.993 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 25508 25509 0.439 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f gth exon 25510 25626 1 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 25627 25628 0.998 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 25711 25712 0.996 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f gth exon 25713 25841 1 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 25842 25843 0.63 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 25914 25915 0.926 + . Parent=gene12 md5:063b1024d68e26716b7f38caf958316f gth exon 25916 26100 1 + . Parent=gene12 ### md5:063b1024d68e26716b7f38caf958316f gth gene 27900 28989 1 + . ID=gene13;Target=md5:c69c15ebe466171a13ee5aa610e90e61 1 499 + md5:063b1024d68e26716b7f38caf958316f gth exon 27900 28003 1 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 28004 28005 0.999 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 28267 28268 0.995 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth exon 28269 28424 1 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 28425 28426 0.936 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 28505 28506 0 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth exon 28507 28579 1 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 28580 28581 0.989 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 28684 28685 0.994 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth exon 28686 28753 1 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 28754 28755 0.999 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 28890 28891 0.999 + . Parent=gene13 md5:063b1024d68e26716b7f38caf958316f gth exon 28892 28989 1 + . Parent=gene13 ### md5:063b1024d68e26716b7f38caf958316f gth gene 28990 29817 1 + . ID=gene14;Target=md5:0870e7d5d9d76766ebd3dce1758b733f 1 477 + md5:063b1024d68e26716b7f38caf958316f gth exon 28990 29037 1 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 29038 29039 0.907 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 29132 29133 0 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth exon 29134 29242 1 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 29243 29244 0.84 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 29329 29330 1 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth exon 29331 29477 1 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 29478 29479 0.983 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 29569 29570 0.998 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth exon 29571 29618 1 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 29619 29620 0 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 29691 29692 0.993 + . Parent=gene14 md5:063b1024d68e26716b7f38caf958316f gth exon 29693 29817 1 + . Parent=gene14 ### md5:063b1024d68e26716b7f38caf958316f gth gene 30278 31355 1 + . ID=gene15;Target=md5:97350772e29b7881b149afbedf09290d 1 524 + md5:063b1024d68e26716b7f38caf958316f gth exon 30278 30391 1 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 30392 30393 0.985 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 30475 30476 0.918 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth exon 30477 30562 1 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 30563 30564 0.938 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 30656 30657 0.973 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth exon 30658 30763 1 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 30764 30765 0.996 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 30988 30989 1 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth exon 30990 31085 1 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 31086 31087 0.644 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 31232 31233 0.987 + . Parent=gene15 md5:063b1024d68e26716b7f38caf958316f gth exon 31234 31355 1 + . Parent=gene15 ### md5:063b1024d68e26716b7f38caf958316f gth gene 31265 31820 1 + . ID=gene16;Target=md5:cc954bf1761c4c9f05f8822afb1079e3 1 333 + md5:063b1024d68e26716b7f38caf958316f gth exon 31265 31386 1 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 31387 31388 0.996 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 31536 31537 0.99 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f gth exon 31538 31720 1 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 31721 31722 0.994 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 31791 31792 0.995 + . Parent=gene16 md5:063b1024d68e26716b7f38caf958316f gth exon 31793 31820 1 + . Parent=gene16 ### md5:063b1024d68e26716b7f38caf958316f gth gene 31855 32362 1 + . ID=gene17;Target=md5:70facb44682374068ef43fd0a6e116b5 1 334 + md5:063b1024d68e26716b7f38caf958316f gth exon 31855 32022 1 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 32023 32024 0 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 32116 32117 0.558 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f gth exon 32118 32220 1 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 32221 32222 0.912 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 32298 32299 0.895 + . Parent=gene17 md5:063b1024d68e26716b7f38caf958316f gth exon 32300 32362 1 + . Parent=gene17 ### md5:063b1024d68e26716b7f38caf958316f gth gene 31907 32349 1 + . ID=gene18;Target=md5:c7084aa0f01934072f9e244363059ca0 1 269 + md5:063b1024d68e26716b7f38caf958316f gth exon 31907 32022 1 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 32023 32024 0 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 32116 32117 0.558 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f gth exon 32118 32220 1 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 32221 32222 0.912 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 32298 32299 0.895 + . Parent=gene18 md5:063b1024d68e26716b7f38caf958316f gth exon 32300 32349 1 + . Parent=gene18 ### md5:063b1024d68e26716b7f38caf958316f gth gene 32928 33488 0.967 + . ID=gene19;Target=md5:4e8ae3a74fefacbbb8650ba892c2b2da 1 227 + md5:063b1024d68e26716b7f38caf958316f gth exon 32928 32955 1 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 32956 32957 0.985 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 33189 33190 0.999 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f gth exon 33191 33317 0.98 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 33318 33319 0.956 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 33416 33417 0.983 + . Parent=gene19 md5:063b1024d68e26716b7f38caf958316f gth exon 33418 33488 0.944 + . Parent=gene19 ### md5:063b1024d68e26716b7f38caf958316f gth gene 33296 34560 1 + . ID=gene20;Target=md5:f53ad09e45a4038f2261b9ee90353658 1 427 + md5:063b1024d68e26716b7f38caf958316f gth exon 33296 33317 0.636 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 33318 33319 0.956 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 33416 33417 0.983 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth exon 33418 33518 1 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 33519 33520 0.993 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 33781 33782 0.99 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth exon 33783 33917 1 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 33918 33919 0.705 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 33994 33995 0.988 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth exon 33996 34076 1 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 34077 34078 0.961 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 34470 34471 0.999 + . Parent=gene20 md5:063b1024d68e26716b7f38caf958316f gth exon 34472 34560 1 + . Parent=gene20 ### md5:063b1024d68e26716b7f38caf958316f gth gene 35628 36362 0.921 + . ID=gene21;Target=md5:a7fa97bc84c3aebaea34e169b73094c9 1 451 + md5:063b1024d68e26716b7f38caf958316f gth exon 35628 35712 0.959 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 35713 35714 0.988 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 35818 35819 0.971 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f gth exon 35820 36011 0.979 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36012 36013 0.955 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36099 36100 0.992 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f gth exon 36101 36205 0.924 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36206 36207 0.99 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36295 36296 0.979 + . Parent=gene21 md5:063b1024d68e26716b7f38caf958316f gth exon 36297 36362 0.697 + . Parent=gene21 ### md5:063b1024d68e26716b7f38caf958316f gth gene 35628 36392 0.984 + . ID=gene22;Target=md5:cdced248d13c7c0f89e7e889cc30164a 1 479 + md5:063b1024d68e26716b7f38caf958316f gth exon 35628 35712 1 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 35713 35714 0.988 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 35818 35819 0.971 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f gth exon 35820 36011 1 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36012 36013 0.955 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36099 36100 0.992 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f gth exon 36101 36205 1 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36206 36207 0.99 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36295 36296 0.979 + . Parent=gene22 md5:063b1024d68e26716b7f38caf958316f gth exon 36297 36392 0.922 + . Parent=gene22 ### md5:063b1024d68e26716b7f38caf958316f gth gene 36370 37156 1 + . ID=gene23;Target=md5:0d914f8b8fdfef05d05e32a617ce8737 1 604 - md5:063b1024d68e26716b7f38caf958316f gth exon 36370 36431 1 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36432 36433 0.994 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36519 36520 1 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f gth exon 36521 36721 1 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene23 md5:063b1024d68e26716b7f38caf958316f gth exon 36816 37156 1 + . Parent=gene23 ### md5:063b1024d68e26716b7f38caf958316f gth gene 36402 37106 1 + . ID=gene24;Target=md5:634e9a3d54562a834a900edb41abe7d4 1 522 - md5:063b1024d68e26716b7f38caf958316f gth exon 36402 36431 1 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36432 36433 0.994 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36519 36520 1 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f gth exon 36521 36721 1 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene24 md5:063b1024d68e26716b7f38caf958316f gth exon 36816 37106 1 + . Parent=gene24 ### md5:063b1024d68e26716b7f38caf958316f gth gene 36531 37190 1 + . ID=gene25;Target=md5:e24a612b49c52c8aca23eb196c1ebe06 1 566 - md5:063b1024d68e26716b7f38caf958316f gth exon 36531 36721 1 + . Parent=gene25 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene25 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene25 md5:063b1024d68e26716b7f38caf958316f gth exon 36816 37190 1 + . Parent=gene25 ### md5:063b1024d68e26716b7f38caf958316f gth gene 36546 37186 0.99 + . ID=gene26;Target=md5:835eb4298c428885b3d16d0e4514c30b 1 547 - md5:063b1024d68e26716b7f38caf958316f gth exon 36546 36721 0.969 + . Parent=gene26 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene26 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene26 md5:063b1024d68e26716b7f38caf958316f gth exon 36816 37186 1 + . Parent=gene26 ### md5:063b1024d68e26716b7f38caf958316f gth gene 36594 37208 1 + . ID=gene27;Target=md5:b280ddc383280ca975eeaa3329e34c14 1 521 - md5:063b1024d68e26716b7f38caf958316f gth exon 36594 36721 1 + . Parent=gene27 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene27 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene27 md5:063b1024d68e26716b7f38caf958316f gth exon 36816 37208 1 + . Parent=gene27 ### md5:063b1024d68e26716b7f38caf958316f gth gene 36812 37235 0.998 - . ID=gene28;Target=md5:26ebd521c00f7b4d595086f162ab00e1 1 424 + md5:063b1024d68e26716b7f38caf958316f gth exon 36812 37235 0.998 - . Parent=gene28 ### md5:063b1024d68e26716b7f38caf958316f gth gene 36816 37208 0.964 + . ID=gene29;Target=md5:3ff6374febf91a5f28c3f7bcc4ccd774 53 438 + md5:063b1024d68e26716b7f38caf958316f gth exon 36816 37208 0.964 + . Parent=gene29 ### md5:063b1024d68e26716b7f38caf958316f gth gene 36827 37206 0.997 - . ID=gene30;Target=md5:7f0facaa45cacec8ffaa0c98a51edf56 1 380 + md5:063b1024d68e26716b7f38caf958316f gth exon 36827 37206 0.997 - . Parent=gene30 ### md5:063b1024d68e26716b7f38caf958316f gth gene 36840 37234 1 - . ID=gene31;Target=md5:275dc2512038a6501b7d27e38165bec7 1 395 + md5:063b1024d68e26716b7f38caf958316f gth exon 36840 37234 1 - . Parent=gene31 ### md5:063b1024d68e26716b7f38caf958316f gth gene 37071 37203 1 - . ID=gene32;Target=md5:af2486ba93823b9389100222c0ddffdb 1 133 + md5:063b1024d68e26716b7f38caf958316f gth exon 37071 37203 1 - . Parent=gene32 ### md5:063b1024d68e26716b7f38caf958316f gth gene 37669 39259 1 - . ID=gene33;Target=md5:b1da76b1bfdf36225429a5be70ff88a2 1 588 - md5:063b1024d68e26716b7f38caf958316f gth exon 37669 37891 1 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth exon 37972 38060 1 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth exon 38656 38794 1 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 38794 38795 0.976 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 38926 38927 0.977 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth exon 38927 38997 1 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth exon 39104 39148 1 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 39148 39149 0.991 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39238 39239 0.998 - . Parent=gene33 md5:063b1024d68e26716b7f38caf958316f gth exon 39239 39259 1 - . Parent=gene33 ### md5:063b1024d68e26716b7f38caf958316f gth gene 37691 38766 0.995 - . ID=gene34;Target=md5:354c93700a73d01ea73f641c62c593cd 1 401 - md5:063b1024d68e26716b7f38caf958316f gth exon 37691 37891 0.99 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f gth exon 37972 38060 1 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene34 md5:063b1024d68e26716b7f38caf958316f gth exon 38656 38766 1 - . Parent=gene34 ### md5:063b1024d68e26716b7f38caf958316f gth gene 37692 38756 1 - . ID=gene35;Target=md5:f42df1d200fb31e1bed322fab31540d6 1 390 - md5:063b1024d68e26716b7f38caf958316f gth exon 37692 37891 1 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f gth exon 37972 38060 1 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene35 md5:063b1024d68e26716b7f38caf958316f gth exon 38656 38756 1 - . Parent=gene35 ### md5:063b1024d68e26716b7f38caf958316f gth gene 37716 39118 0.967 - . ID=gene36;Target=md5:f55d7bcc44b78111563b02f8a19805ee 1 490 - md5:063b1024d68e26716b7f38caf958316f gth exon 37716 37891 0.977 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth exon 37972 38060 1 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth exon 38656 38794 0.953 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 38794 38795 0.976 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 38926 38927 0.977 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth exon 38927 38997 0.93 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene36 md5:063b1024d68e26716b7f38caf958316f gth exon 39104 39118 0.933 - . Parent=gene36 ### md5:063b1024d68e26716b7f38caf958316f gth gene 38927 40032 0.996 - . ID=gene37;Target=md5:a3f1555a0375aea877145c8c372ae4af 1 606 + md5:063b1024d68e26716b7f38caf958316f gth exon 38927 38997 0.986 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth exon 39104 39148 1 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 39148 39149 0.991 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39238 39239 0.998 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth exon 39239 39328 1 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 39328 39329 0.974 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39437 39438 0.999 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth exon 39438 39526 1 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 39526 39527 0.453 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39613 39614 0.986 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth exon 39614 39689 1 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 39689 39690 0.973 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39797 39798 0.999 - . Parent=gene37 md5:063b1024d68e26716b7f38caf958316f gth exon 39798 40032 0.996 - . Parent=gene37 ### md5:063b1024d68e26716b7f38caf958316f gth gene 38938 40006 0.998 - . ID=gene38;Target=md5:a5f947d297585356da9380d22ac8c974 1 568 + md5:063b1024d68e26716b7f38caf958316f gth exon 38938 38997 1 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth exon 39104 39148 1 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 39148 39149 0.991 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39238 39239 0.998 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth exon 39239 39328 1 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 39328 39329 0.974 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39437 39438 0.999 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth exon 39438 39526 1 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 39526 39527 0.453 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39613 39614 0.986 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth exon 39614 39689 1 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 39689 39690 0.973 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 39797 39798 0.999 - . Parent=gene38 md5:063b1024d68e26716b7f38caf958316f gth exon 39798 40006 0.995 - . Parent=gene38 ### md5:063b1024d68e26716b7f38caf958316f gth gene 42783 43204 1 - . ID=gene39;Target=md5:bdc426cd84a477b9b48d7e7d1538fc85 1 422 + md5:063b1024d68e26716b7f38caf958316f gth exon 42783 43204 1 - . Parent=gene39 ### md5:063b1024d68e26716b7f38caf958316f gth gene 44029 44540 0.972 + . ID=gene40;Target=md5:0f6d1e4ce29d042b5804f8ae8bd9c43a 1 423 + md5:063b1024d68e26716b7f38caf958316f gth exon 44029 44263 0.991 + . Parent=gene40 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 44264 44265 0.99 + . Parent=gene40 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 44352 44353 0.998 + . Parent=gene40 md5:063b1024d68e26716b7f38caf958316f gth exon 44354 44540 0.947 + . Parent=gene40 ### md5:063b1024d68e26716b7f38caf958316f gth gene 45542 45866 0.991 - . ID=gene41;Target=md5:7ba0b8c1bb50abf3c5a844abacf9fe67 1 322 + md5:063b1024d68e26716b7f38caf958316f gth exon 45542 45866 0.991 - . Parent=gene41 ### md5:063b1024d68e26716b7f38caf958316f gth gene 45559 45941 0.924 - . ID=gene42;Target=md5:38229ac075d9c6d15fd1152c4eccc834 1 388 + md5:063b1024d68e26716b7f38caf958316f gth exon 45559 45941 0.924 - . Parent=gene42 ### md5:063b1024d68e26716b7f38caf958316f gth gene 45843 45920 0.949 + . ID=gene43;Target=md5:6d3b4b9db4531cda588528f2c69c0a57 1 78 - md5:063b1024d68e26716b7f38caf958316f gth exon 45843 45920 0.949 + . Parent=gene43 ### md5:063b1024d68e26716b7f38caf958316f gth gene 49874 50547 1 - . ID=gene44;Target=md5:494051ed1147d22a2b2967b64c329678 1 412 + md5:063b1024d68e26716b7f38caf958316f gth exon 49874 50284 1 - . Parent=gene44 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 50284 50285 0.587 - . Parent=gene44 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 50546 50547 0.677 - . Parent=gene44 md5:063b1024d68e26716b7f38caf958316f gth exon 50547 50547 1 - . Parent=gene44 ### md5:063b1024d68e26716b7f38caf958316f gth gene 50433 51134 0.978 - . ID=gene45;Target=md5:634ef96163dc4d4f8a585fe8059d867b 1 426 - md5:063b1024d68e26716b7f38caf958316f gth exon 50433 50834 0.978 - . Parent=gene45 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene45 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene45 md5:063b1024d68e26716b7f38caf958316f gth exon 51113 51134 1 - . Parent=gene45 ### md5:063b1024d68e26716b7f38caf958316f gth gene 50475 50702 1 + . ID=gene46;Target=md5:950b7715ab6cc030a8c810a0dba2dd33 1 228 + md5:063b1024d68e26716b7f38caf958316f gth exon 50475 50702 1 + . Parent=gene46 ### md5:063b1024d68e26716b7f38caf958316f gth gene 50475 51193 1 - . ID=gene47;Target=md5:754b35896aef0625da39ee42e61db715 1 441 - md5:063b1024d68e26716b7f38caf958316f gth exon 50475 50834 1 - . Parent=gene47 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene47 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene47 md5:063b1024d68e26716b7f38caf958316f gth exon 51113 51193 1 - . Parent=gene47 ### md5:063b1024d68e26716b7f38caf958316f gth gene 50590 51354 1 - . ID=gene48;Target=md5:741ff4d6dd193d77cc75fb61f373ca5b 1 385 - md5:063b1024d68e26716b7f38caf958316f gth exon 50590 50834 1 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f gth exon 51113 51216 1 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51216 51217 0.988 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51318 51319 1 - . Parent=gene48 md5:063b1024d68e26716b7f38caf958316f gth exon 51319 51354 1 - . Parent=gene48 ### md5:063b1024d68e26716b7f38caf958316f gth gene 50758 52232 0.991 - . ID=gene49;Target=md5:597ada174987f3f2f0b2e4046f09247d 1 647 + md5:063b1024d68e26716b7f38caf958316f gth exon 50758 50834 0.948 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth exon 51113 51216 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51216 51217 0.988 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51318 51319 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth exon 51319 51474 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth exon 51552 51623 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth exon 51711 51758 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth exon 51849 51896 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth exon 51983 52055 1 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene49 md5:063b1024d68e26716b7f38caf958316f gth exon 52163 52232 0.986 - . Parent=gene49 ### md5:063b1024d68e26716b7f38caf958316f gth gene 51139 51852 0.915 - . ID=gene50;Target=md5:8fdc30d821ff25b48b6182936cf72cd5 1 362 + md5:063b1024d68e26716b7f38caf958316f gth exon 51139 51216 0.718 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51216 51217 0.988 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51318 51319 1 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth exon 51319 51474 0.974 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth exon 51552 51623 1 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth exon 51711 51758 0.979 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene50 md5:063b1024d68e26716b7f38caf958316f gth exon 51849 51852 1 - . Parent=gene50 ### md5:063b1024d68e26716b7f38caf958316f gth gene 51334 52222 0.905 - . ID=gene51;Target=md5:26e5980fbaaefb58d84de6755d521845 1 446 + md5:063b1024d68e26716b7f38caf958316f gth exon 51334 51474 0.766 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth exon 51552 51623 1 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth exon 51711 51758 1 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth exon 51849 51896 0.979 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth exon 51983 52055 1 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene51 md5:063b1024d68e26716b7f38caf958316f gth exon 52163 52222 1 - . Parent=gene51 ### md5:063b1024d68e26716b7f38caf958316f gth gene 51376 52048 0.939 - . ID=gene52;Target=md5:d342e4ee66b1c4db3e83e076c5dd7d44 1 336 + md5:063b1024d68e26716b7f38caf958316f gth exon 51376 51474 0.854 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth exon 51552 51623 1 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth exon 51711 51758 1 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth exon 51849 51896 0.979 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene52 md5:063b1024d68e26716b7f38caf958316f gth exon 51983 52048 1 - . Parent=gene52 ### md5:063b1024d68e26716b7f38caf958316f gth gene 51376 52224 0.91 - . ID=gene53;Target=md5:7f11e59ff50ce68b25c6120418df3d51 1 404 + md5:063b1024d68e26716b7f38caf958316f gth exon 51376 51474 0.848 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth exon 51552 51623 0.931 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth exon 51711 51758 0.823 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth exon 51849 51896 0.958 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth exon 51983 52055 0.959 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene53 md5:063b1024d68e26716b7f38caf958316f gth exon 52163 52224 0.927 - . Parent=gene53 ### md5:063b1024d68e26716b7f38caf958316f gth gene 51446 52242 0.996 - . ID=gene54;Target=md5:b0183ab4aa646b9e8f95f61daf0e23a3 1 350 + md5:063b1024d68e26716b7f38caf958316f gth exon 51446 51474 0.966 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51474 51475 0.889 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51551 51552 0.984 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth exon 51552 51623 1 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth exon 51711 51758 1 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth exon 51849 51896 1 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth exon 51983 52055 0.986 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene54 md5:063b1024d68e26716b7f38caf958316f gth exon 52163 52242 1 - . Parent=gene54 ### md5:063b1024d68e26716b7f38caf958316f gth gene 51599 52231 0.993 - . ID=gene55;Target=md5:8ed84d5653334535562a21058880db81 1 263 + md5:063b1024d68e26716b7f38caf958316f gth exon 51599 51623 1 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51623 51624 0.986 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51710 51711 0.977 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth exon 51711 51758 1 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51758 51759 0.962 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51848 51849 0.637 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth exon 51849 51896 1 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 51896 51897 0.99 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 51982 51983 0.978 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth exon 51983 52055 1 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 52055 52056 0.887 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 52162 52163 0.902 - . Parent=gene55 md5:063b1024d68e26716b7f38caf958316f gth exon 52163 52231 0.986 - . Parent=gene55 ### md5:063b1024d68e26716b7f38caf958316f gth gene 53602 54271 0.994 - . ID=gene56;Target=md5:16258f1ad08d9c0c91c627eefad05949 1 427 - md5:063b1024d68e26716b7f38caf958316f gth exon 53602 53914 0.992 - . Parent=gene56 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene56 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene56 md5:063b1024d68e26716b7f38caf958316f gth exon 54159 54271 1 - . Parent=gene56 ### md5:063b1024d68e26716b7f38caf958316f gth gene 53602 54710 0.995 - . ID=gene57;Target=md5:2642a22855698a3125c99a9759f9147c 1 627 - md5:063b1024d68e26716b7f38caf958316f gth exon 53602 53914 0.994 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f gth exon 54159 54335 1 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene57 md5:063b1024d68e26716b7f38caf958316f gth exon 54574 54710 0.993 - . Parent=gene57 ### md5:063b1024d68e26716b7f38caf958316f gth gene 53624 54279 0.989 - . ID=gene58;Target=md5:752fa8c75ecef45cfa9cf0c5a59afe49 1 413 - md5:063b1024d68e26716b7f38caf958316f gth exon 53624 53914 0.988 - . Parent=gene58 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene58 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene58 md5:063b1024d68e26716b7f38caf958316f gth exon 54159 54279 0.992 - . Parent=gene58 ### md5:063b1024d68e26716b7f38caf958316f gth gene 53624 54283 0.992 - . ID=gene59;Target=md5:0743a82e324754dfc94ed4c0cd8a8816 1 417 - md5:063b1024d68e26716b7f38caf958316f gth exon 53624 53914 0.988 - . Parent=gene59 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene59 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene59 md5:063b1024d68e26716b7f38caf958316f gth exon 54159 54283 1 - . Parent=gene59 ### md5:063b1024d68e26716b7f38caf958316f gth gene 53631 54335 0.866 - . ID=gene60;Target=md5:198a4aa7626135303d0e996d4e2775ef 57 528 + md5:063b1024d68e26716b7f38caf958316f gth exon 53631 53914 0.991 - . Parent=gene60 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene60 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene60 md5:063b1024d68e26716b7f38caf958316f gth exon 54159 54335 0.664 - . Parent=gene60 ### md5:063b1024d68e26716b7f38caf958316f gth gene 53632 53909 0.991 + . ID=gene61;Target=md5:5a03dd7605925c94812a9550acc2d354 1 279 + md5:063b1024d68e26716b7f38caf958316f gth exon 53632 53909 0.991 + . Parent=gene61 ### md5:063b1024d68e26716b7f38caf958316f gth gene 53645 54320 0.99 - . ID=gene62;Target=md5:f692730f2bd8700f690f8a231d2e446b 1 431 - md5:063b1024d68e26716b7f38caf958316f gth exon 53645 53914 0.991 - . Parent=gene62 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene62 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene62 md5:063b1024d68e26716b7f38caf958316f gth exon 54159 54320 0.988 - . Parent=gene62 ### md5:063b1024d68e26716b7f38caf958316f gth gene 53829 54829 0.991 - . ID=gene63;Target=md5:18fb5ebf5d11ec1db0d36de3ea2a049d 49 568 + md5:063b1024d68e26716b7f38caf958316f gth exon 53829 53914 0.971 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f gth exon 54159 54335 1 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene63 md5:063b1024d68e26716b7f38caf958316f gth exon 54574 54829 0.992 - . Parent=gene63 ### md5:063b1024d68e26716b7f38caf958316f gth gene 53850 54807 0.913 - . ID=gene64;Target=md5:ed9e14d2b83e7ea606c9d1d5fdbeb857 1 477 + md5:063b1024d68e26716b7f38caf958316f gth exon 53850 53914 0.746 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f gth exon 54159 54335 0.887 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene64 md5:063b1024d68e26716b7f38caf958316f gth exon 54574 54807 0.979 - . Parent=gene64 ### md5:063b1024d68e26716b7f38caf958316f gth gene 54167 54769 0.997 - . ID=gene65;Target=md5:7db3e698f27f19f0343e6b23af07a5b3 1 365 + md5:063b1024d68e26716b7f38caf958316f gth exon 54167 54335 0.994 - . Parent=gene65 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene65 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene65 md5:063b1024d68e26716b7f38caf958316f gth exon 54574 54769 1 - . Parent=gene65 ### md5:063b1024d68e26716b7f38caf958316f gth gene 54178 54828 0.979 - . ID=gene66;Target=md5:6021387359d7e25495b6b804ebbbb0aa 1 414 + md5:063b1024d68e26716b7f38caf958316f gth exon 54178 54335 0.953 - . Parent=gene66 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene66 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene66 md5:063b1024d68e26716b7f38caf958316f gth exon 54574 54828 0.996 - . Parent=gene66 ### md5:063b1024d68e26716b7f38caf958316f gth gene 54212 54697 0.952 - . ID=gene67;Target=md5:72f3e9cbd94835f59aa0a43b22a01b0f 1 248 + md5:063b1024d68e26716b7f38caf958316f gth exon 54212 54335 0.96 - . Parent=gene67 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene67 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene67 md5:063b1024d68e26716b7f38caf958316f gth exon 54574 54697 0.944 - . Parent=gene67 ### md5:063b1024d68e26716b7f38caf958316f gth gene 54263 54808 0.93 - . ID=gene68;Target=md5:2fa0ef57b1f4391f7a2ae4283410311c 1 311 + md5:063b1024d68e26716b7f38caf958316f gth exon 54263 54335 0.815 - . Parent=gene68 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene68 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene68 md5:063b1024d68e26716b7f38caf958316f gth exon 54574 54808 0.966 - . Parent=gene68 ### md5:063b1024d68e26716b7f38caf958316f gth gene 54321 54829 0.992 - . ID=gene69;Target=md5:215d14a53287c2aca2d8bd12b09aca14 49 319 + md5:063b1024d68e26716b7f38caf958316f gth exon 54321 54335 1 - . Parent=gene69 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene69 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene69 md5:063b1024d68e26716b7f38caf958316f gth exon 54574 54829 0.992 - . Parent=gene69 ### md5:063b1024d68e26716b7f38caf958316f gth gene 54991 56652 0.998 + . ID=gene70;Target=md5:dd287e28fe668e94028c1a241a6a1c7d 1 651 + md5:063b1024d68e26716b7f38caf958316f gth exon 54991 55057 0.985 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 55058 55059 0.896 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 55143 55144 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth exon 55145 55230 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 55231 55232 0.997 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 55298 55299 0 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth exon 55300 55341 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 55342 55343 0.997 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 55451 55452 0.898 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth exon 55453 55498 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 55499 55500 0.237 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 55616 55617 0.997 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth exon 55618 55704 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 55705 55706 0.991 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 55816 55817 0.952 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth exon 55818 55873 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 55874 55875 0.983 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 56034 56035 0.0357 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth exon 56036 56153 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 56154 56155 0.99 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 56279 56280 0.703 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth exon 56281 56339 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 56340 56341 0.464 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 56447 56448 0.287 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth exon 56449 56520 1 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 56521 56522 0.187 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 56633 56634 0.791 + . Parent=gene70 md5:063b1024d68e26716b7f38caf958316f gth exon 56635 56652 1 + . Parent=gene70 ### md5:063b1024d68e26716b7f38caf958316f gth gene 58115 59001 0.984 + . ID=gene71;Target=md5:a12796a152e829b54f2f56b4910d701c 1 460 - md5:063b1024d68e26716b7f38caf958316f gth exon 58115 58209 0.958 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 58210 58211 0.856 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 58459 58460 1 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f gth exon 58461 58526 1 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 58527 58528 0.784 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 58622 58623 0.977 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f gth exon 58624 58717 1 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 58718 58719 0 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 58794 58795 1 + . Parent=gene71 md5:063b1024d68e26716b7f38caf958316f gth exon 58796 59001 0.983 + . Parent=gene71 ### md5:063b1024d68e26716b7f38caf958316f gth gene 59010 59484 1 + . ID=gene72;Target=md5:cc404517a12f1a399ab48b948f4e71ff 1 475 + md5:063b1024d68e26716b7f38caf958316f gth exon 59010 59484 1 + . Parent=gene72 ### md5:063b1024d68e26716b7f38caf958316f gth gene 59148 59880 0.991 + . ID=gene73;Target=md5:33eefc92073ab38229f0ce775746b219 1 653 + md5:063b1024d68e26716b7f38caf958316f gth exon 59148 59526 0.989 + . Parent=gene73 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 59527 59528 0.993 + . Parent=gene73 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 59605 59606 0.997 + . Parent=gene73 md5:063b1024d68e26716b7f38caf958316f gth exon 59607 59880 0.993 + . Parent=gene73 ### md5:063b1024d68e26716b7f38caf958316f gth gene 59164 59418 0.996 + . ID=gene74;Target=md5:cdbabc0602366c37167aba18498d8232 1 255 + md5:063b1024d68e26716b7f38caf958316f gth exon 59164 59418 0.996 + . Parent=gene74 ### md5:063b1024d68e26716b7f38caf958316f gth gene 59643 59976 0.991 + . ID=gene75;Target=md5:e72969c46cd2e7d078d339cda62260a8 1 333 + md5:063b1024d68e26716b7f38caf958316f gth exon 59643 59976 0.991 + . Parent=gene75 ### md5:063b1024d68e26716b7f38caf958316f gth gene 60190 60487 0.987 + . ID=gene76;Target=md5:322e03bbf0f0ddac43d4ca12dd0cc795 1 298 + md5:063b1024d68e26716b7f38caf958316f gth exon 60190 60487 0.987 + . Parent=gene76 ### md5:063b1024d68e26716b7f38caf958316f gth gene 60319 61000 0.997 - . ID=gene77;Target=md5:c94289917098254e5d5b7c3ed48e81b7 1 682 + md5:063b1024d68e26716b7f38caf958316f gth exon 60319 61000 0.997 - . Parent=gene77 ### md5:063b1024d68e26716b7f38caf958316f gth gene 60410 60968 1 - . ID=gene78;Target=md5:48f4c66f41d3805c7213639bcb949d6a 1 559 + md5:063b1024d68e26716b7f38caf958316f gth exon 60410 60968 1 - . Parent=gene78 ### md5:063b1024d68e26716b7f38caf958316f gth gene 60450 60902 0.998 - . ID=gene79;Target=md5:1b775af1ef6f8f8b80ba60a8245cba0b 1 453 + md5:063b1024d68e26716b7f38caf958316f gth exon 60450 60902 0.998 - . Parent=gene79 ### md5:063b1024d68e26716b7f38caf958316f gth gene 60459 60958 0.996 - . ID=gene80;Target=md5:2acbf49eaca817b303d60c7c22dfdd15 1 500 + md5:063b1024d68e26716b7f38caf958316f gth exon 60459 60958 0.996 - . Parent=gene80 ### md5:063b1024d68e26716b7f38caf958316f gth gene 60463 60958 0.996 - . ID=gene81;Target=md5:9b6924737e47f2eed133a565b35dd804 1 496 + md5:063b1024d68e26716b7f38caf958316f gth exon 60463 60958 0.996 - . Parent=gene81 ### md5:063b1024d68e26716b7f38caf958316f gth gene 60508 60959 0.983 - . ID=gene82;Target=md5:653662b06e7e300256655269264f4004 1 452 + md5:063b1024d68e26716b7f38caf958316f gth exon 60508 60959 0.983 - . Parent=gene82 ### md5:063b1024d68e26716b7f38caf958316f gth gene 60542 60950 1 - . ID=gene83;Target=md5:81a8f87434a337a21077462e2a1cb5c9 1 409 + md5:063b1024d68e26716b7f38caf958316f gth exon 60542 60950 1 - . Parent=gene83 ### md5:063b1024d68e26716b7f38caf958316f gth gene 60558 60947 0.995 - . ID=gene84;Target=md5:1634572862a7fc3d7dcb1ca5950cf137 1 390 + md5:063b1024d68e26716b7f38caf958316f gth exon 60558 60947 0.995 - . Parent=gene84 ### md5:063b1024d68e26716b7f38caf958316f gth gene 61186 61922 0.957 + . ID=gene85;Target=md5:3ab44e284886cca199c6a4d221725734 1 371 + md5:063b1024d68e26716b7f38caf958316f gth exon 61186 61281 0.99 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 61282 61283 0.316 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 61563 61564 0.959 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f gth exon 61565 61641 0.948 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 61642 61643 0 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 61722 61723 0.994 + . Parent=gene85 md5:063b1024d68e26716b7f38caf958316f gth exon 61724 61922 0.945 + . Parent=gene85 ### md5:063b1024d68e26716b7f38caf958316f gth gene 61212 61974 1 + . ID=gene86;Target=md5:f63fe9c59e53d9587766136a15864412 1 398 - md5:063b1024d68e26716b7f38caf958316f gth exon 61212 61281 1 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 61282 61283 0.316 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 61563 61564 0.959 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f gth exon 61565 61641 1 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 61642 61643 0 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 61722 61723 0.994 + . Parent=gene86 md5:063b1024d68e26716b7f38caf958316f gth exon 61724 61974 1 + . Parent=gene86 ### md5:063b1024d68e26716b7f38caf958316f gth gene 62196 62646 0.921 + . ID=gene87;Target=md5:77ba8b822b44308184b4dcab6ecfa75e 1 448 + md5:063b1024d68e26716b7f38caf958316f gth exon 62196 62646 0.921 + . Parent=gene87 ### md5:063b1024d68e26716b7f38caf958316f gth gene 63106 63942 1 + . ID=gene88;Target=md5:c4e23aeca494361878d3407ae5c05e3d 1 598 - md5:063b1024d68e26716b7f38caf958316f gth exon 63106 63178 1 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 63179 63180 0 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 63269 63270 0.999 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f gth exon 63271 63391 1 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 63392 63393 0.823 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 63466 63467 0 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f gth exon 63468 63683 1 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 63684 63685 0.999 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 63753 63754 0.992 + . Parent=gene88 md5:063b1024d68e26716b7f38caf958316f gth exon 63755 63942 1 + . Parent=gene88 ### md5:063b1024d68e26716b7f38caf958316f gth gene 63306 63942 1 + . ID=gene89;Target=md5:bbbbef70abd153db9376c364e9fafbae 1 490 - md5:063b1024d68e26716b7f38caf958316f gth exon 63306 63391 1 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 63392 63393 0.823 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 63466 63467 0 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f gth exon 63468 63683 1 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 63684 63685 0.999 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 63753 63754 0.992 + . Parent=gene89 md5:063b1024d68e26716b7f38caf958316f gth exon 63755 63942 1 + . Parent=gene89 ### md5:063b1024d68e26716b7f38caf958316f gth gene 63910 64320 0.979 + . ID=gene90;Target=md5:67e8b62becffff524bac4f51bfa344e1 1 412 + md5:063b1024d68e26716b7f38caf958316f gth exon 63910 64320 0.979 + . Parent=gene90 ### md5:063b1024d68e26716b7f38caf958316f gth gene 63935 64280 0.986 + . ID=gene91;Target=md5:3b10d6f56bfea7b6b57a41146f6c140b 1 345 + md5:063b1024d68e26716b7f38caf958316f gth exon 63935 64280 0.986 + . Parent=gene91 ### md5:063b1024d68e26716b7f38caf958316f gth gene 64196 65033 0.998 - . ID=gene92;Target=md5:e5089d2bdb42934617cd38749662eb21 1 632 + md5:063b1024d68e26716b7f38caf958316f gth exon 64196 64605 1 - . Parent=gene92 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 64605 64606 0.942 - . Parent=gene92 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 64811 64812 0.991 - . Parent=gene92 md5:063b1024d68e26716b7f38caf958316f gth exon 64812 65033 0.995 - . Parent=gene92 ### md5:063b1024d68e26716b7f38caf958316f gth gene 65467 66157 0.992 + . ID=gene93;Target=md5:f19b5223816de3060184fb9250936fce 1 621 + md5:063b1024d68e26716b7f38caf958316f gth exon 65467 66058 0.992 + . Parent=gene93 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 66059 66060 1 + . Parent=gene93 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 66128 66129 0.994 + . Parent=gene93 md5:063b1024d68e26716b7f38caf958316f gth exon 66130 66157 0.964 + . Parent=gene93 ### md5:063b1024d68e26716b7f38caf958316f gth gene 67358 68298 0.982 + . ID=gene94;Target=md5:893d07af699d973ed4e8e3423fc87165 1 749 + md5:063b1024d68e26716b7f38caf958316f gth exon 67358 67550 1 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 67551 67552 0.896 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 67634 67635 0.998 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f gth exon 67636 67908 0.969 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 67909 67910 1 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 68009 68010 0.999 + . Parent=gene94 md5:063b1024d68e26716b7f38caf958316f gth exon 68011 68298 0.983 + . Parent=gene94 ### md5:063b1024d68e26716b7f38caf958316f gth gene 67871 68396 0.99 + . ID=gene95;Target=md5:3b9295d3ee44af4cf4f79b2e27003f1b 1 423 - md5:063b1024d68e26716b7f38caf958316f gth exon 67871 67908 0.947 + . Parent=gene95 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 67909 67910 1 + . Parent=gene95 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 68009 68010 0.999 + . Parent=gene95 md5:063b1024d68e26716b7f38caf958316f gth exon 68011 68396 0.99 + . Parent=gene95 ### md5:063b1024d68e26716b7f38caf958316f gth gene 69163 69893 0.98 + . ID=gene96;Target=md5:79435902b3753af094ba24f8a4847978 1 536 + md5:063b1024d68e26716b7f38caf958316f gth exon 69163 69265 0.971 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f gth exon 69375 69598 1 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene96 md5:063b1024d68e26716b7f38caf958316f gth exon 69685 69893 0.964 + . Parent=gene96 ### md5:063b1024d68e26716b7f38caf958316f gth gene 69171 69968 0.997 + . ID=gene97;Target=md5:811cb37790973c1b417241d62fe2a569 1 603 + md5:063b1024d68e26716b7f38caf958316f gth exon 69171 69265 0.989 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f gth exon 69375 69598 1 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene97 md5:063b1024d68e26716b7f38caf958316f gth exon 69685 69968 0.996 + . Parent=gene97 ### md5:063b1024d68e26716b7f38caf958316f gth gene 69173 69853 0.992 + . ID=gene98;Target=md5:bce4ec40fb993e1733ea6d2d16398ed0 1 486 + md5:063b1024d68e26716b7f38caf958316f gth exon 69173 69265 0.989 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f gth exon 69375 69598 1 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene98 md5:063b1024d68e26716b7f38caf958316f gth exon 69685 69853 0.982 + . Parent=gene98 ### md5:063b1024d68e26716b7f38caf958316f gth gene 69196 70072 0.932 + . ID=gene99;Target=md5:49b16de93b5b34374e7e2a7e71253124 1 455 + md5:063b1024d68e26716b7f38caf958316f gth exon 69196 69265 0.986 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f gth exon 69375 69598 0.991 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f gth exon 69685 69831 0.816 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69832 69833 0.48 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 70061 70062 0.999 + . Parent=gene99 md5:063b1024d68e26716b7f38caf958316f gth exon 70063 70072 0.4 + . Parent=gene99 ### md5:063b1024d68e26716b7f38caf958316f gth gene 69219 69775 1 + . ID=gene100;Target=md5:979a4ec86ab17d2a4625c90ed575c145 1 362 + md5:063b1024d68e26716b7f38caf958316f gth exon 69219 69265 1 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69266 69267 0.981 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 69373 69374 0 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f gth exon 69375 69598 1 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 69599 69600 0.996 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 69683 69684 0.993 + . Parent=gene100 md5:063b1024d68e26716b7f38caf958316f gth exon 69685 69775 1 + . Parent=gene100 ### md5:063b1024d68e26716b7f38caf958316f gth gene 71414 71679 0.958 + . ID=gene101;Target=md5:e311a17e67c458d42ed86de05242f87b 1 168 + md5:063b1024d68e26716b7f38caf958316f gth exon 71414 71479 1 + . Parent=gene101 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 71480 71481 0.948 + . Parent=gene101 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 71577 71578 0.982 + . Parent=gene101 md5:063b1024d68e26716b7f38caf958316f gth exon 71579 71679 0.931 + . Parent=gene101 ### md5:063b1024d68e26716b7f38caf958316f gth gene 71458 72009 0.99 + . ID=gene102;Target=md5:1f44f865b53e6414d5296a088f0a75e7 1 319 + md5:063b1024d68e26716b7f38caf958316f gth exon 71458 71479 1 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 71480 71481 0.948 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 71577 71578 0.982 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f gth exon 71579 71779 0.985 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 71780 71781 0.998 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 71912 71913 0.977 + . Parent=gene102 md5:063b1024d68e26716b7f38caf958316f gth exon 71914 72009 1 + . Parent=gene102 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72121 72340 0.966 + . ID=gene103;Target=md5:7d5ceada204939fc948a837d482fe57c 1 221 + md5:063b1024d68e26716b7f38caf958316f gth exon 72121 72340 0.966 + . Parent=gene103 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72121 72603 0.931 + . ID=gene104;Target=md5:a8b76267e5f1749ca29c5465c631ab8e 1 484 + md5:063b1024d68e26716b7f38caf958316f gth exon 72121 72603 0.931 + . Parent=gene104 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72137 72552 0.917 + . ID=gene105;Target=md5:7882e88f260382672a97918b652cad4a 1 351 + md5:063b1024d68e26716b7f38caf958316f gth exon 72137 72296 1 + . Parent=gene105 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene105 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene105 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72552 0.845 + . Parent=gene105 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72185 72753 1 + . ID=gene106;Target=md5:fa15dcef7c84118ca9ee3f95600132c8 1 497 - md5:063b1024d68e26716b7f38caf958316f gth exon 72185 72296 1 + . Parent=gene106 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene106 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene106 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72753 1 + . Parent=gene106 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72204 72660 0.856 + . ID=gene107;Target=md5:03636fa4a9e17baae04ad57d13cdc386 79 466 + md5:063b1024d68e26716b7f38caf958316f gth exon 72204 72296 0.634 + . Parent=gene107 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene107 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene107 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72660 0.926 + . Parent=gene107 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72214 72751 0.987 + . ID=gene108;Target=md5:9a5ec5d4597ac1be9d10ba63ecc457c1 1 466 - md5:063b1024d68e26716b7f38caf958316f gth exon 72214 72296 1 + . Parent=gene108 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene108 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene108 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72751 0.984 + . Parent=gene108 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72231 72731 0.998 + . ID=gene109;Target=md5:df066a65ac8236486c7d59f90157d43e 1 429 - md5:063b1024d68e26716b7f38caf958316f gth exon 72231 72296 1 + . Parent=gene109 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene109 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene109 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72731 0.997 + . Parent=gene109 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72246 72753 0.995 + . ID=gene110;Target=md5:ace313cc0542136c91ac52da3c676d77 1 434 - md5:063b1024d68e26716b7f38caf958316f gth exon 72246 72296 0.98 + . Parent=gene110 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene110 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene110 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72753 0.997 + . Parent=gene110 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72252 72753 0.988 + . ID=gene111;Target=md5:2d0e152a577c91a47f0b5781e67cd3b0 1 431 - md5:063b1024d68e26716b7f38caf958316f gth exon 72252 72296 1 + . Parent=gene111 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene111 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene111 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72753 0.988 + . Parent=gene111 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72252 72803 1 + . ID=gene112;Target=md5:6db92a6a61672ceedb192c31b975e370 1 480 - md5:063b1024d68e26716b7f38caf958316f gth exon 72252 72296 1 + . Parent=gene112 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene112 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene112 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72803 1 + . Parent=gene112 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72262 72754 1 + . ID=gene113;Target=md5:14f58b2b12e291455a69d48e56728992 1 421 - md5:063b1024d68e26716b7f38caf958316f gth exon 72262 72296 1 + . Parent=gene113 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene113 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene113 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72754 1 + . Parent=gene113 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72264 72572 0.966 + . ID=gene114;Target=md5:1c07f0f3b1115fb653b7f47df5b1344b 1 237 + md5:063b1024d68e26716b7f38caf958316f gth exon 72264 72296 0.939 + . Parent=gene114 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene114 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene114 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72572 0.966 + . Parent=gene114 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72264 72670 0.93 + . ID=gene115;Target=md5:061cac88caefa5d8bba4a1ff47031dc3 1 337 + md5:063b1024d68e26716b7f38caf958316f gth exon 72264 72296 0.97 + . Parent=gene115 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene115 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene115 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72670 0.93 + . Parent=gene115 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72270 72801 0.998 + . ID=gene116;Target=md5:9b19d8ea196896df9be4cf56b285abf2 1 460 - md5:063b1024d68e26716b7f38caf958316f gth exon 72270 72296 0.963 + . Parent=gene116 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene116 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene116 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72801 0.998 + . Parent=gene116 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72275 72752 0.872 + . ID=gene117;Target=md5:a179a430866ce2f2826fec132cd9e71f 1 420 - md5:063b1024d68e26716b7f38caf958316f gth exon 72275 72296 1 + . Parent=gene117 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene117 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene117 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72752 0.872 + . Parent=gene117 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72277 72753 1 + . ID=gene118;Target=md5:b2925aa2103833c4c0e3e2ba4e27e66f 1 405 - md5:063b1024d68e26716b7f38caf958316f gth exon 72277 72296 1 + . Parent=gene118 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene118 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene118 md5:063b1024d68e26716b7f38caf958316f gth exon 72369 72753 1 + . Parent=gene118 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72359 72801 0.985 - . ID=gene119;Target=md5:80d8c2289eb0b45dd9ab395572f44eae 1 443 + md5:063b1024d68e26716b7f38caf958316f gth exon 72359 72801 0.985 - . Parent=gene119 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72367 72810 1 - . ID=gene120;Target=md5:3c0dc775fc37af77e71cd10a45d4723c 1 444 + md5:063b1024d68e26716b7f38caf958316f gth exon 72367 72810 1 - . Parent=gene120 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72371 72801 0.995 - . ID=gene121;Target=md5:f2f65df067412c3be8da37366e71763f 1 430 + md5:063b1024d68e26716b7f38caf958316f gth exon 72371 72801 0.995 - . Parent=gene121 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72372 72801 0.99 - . ID=gene122;Target=md5:faf314d3fa8ba5d3d99734b83ebb7f7b 1 431 + md5:063b1024d68e26716b7f38caf958316f gth exon 72372 72801 0.99 - . Parent=gene122 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72372 72801 1 - . ID=gene123;Target=md5:897eae7810009eb141a5f887289d95c8 1 430 + md5:063b1024d68e26716b7f38caf958316f gth exon 72372 72801 1 - . Parent=gene123 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72374 72827 0.992 - . ID=gene124;Target=md5:e252994eb503f22fdc871a97738a525a 1 455 + md5:063b1024d68e26716b7f38caf958316f gth exon 72374 72827 0.992 - . Parent=gene124 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72383 72801 0.995 - . ID=gene125;Target=md5:11f83a01fda0f6e2061e6e17dc9cc0fe 1 418 + md5:063b1024d68e26716b7f38caf958316f gth exon 72383 72801 0.995 - . Parent=gene125 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72384 72801 1 - . ID=gene126;Target=md5:8e8cf2914e87c5de17ca1cea5185961d 1 418 + md5:063b1024d68e26716b7f38caf958316f gth exon 72384 72801 1 - . Parent=gene126 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72386 72802 0.993 - . ID=gene127;Target=md5:c39b7a42d0e463287ec636842fe38b67 1 417 + md5:063b1024d68e26716b7f38caf958316f gth exon 72386 72802 0.993 - . Parent=gene127 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72386 72803 0.974 - . ID=gene128;Target=md5:dc0b347c18391d65d897b1c1f14bc31f 1 417 + md5:063b1024d68e26716b7f38caf958316f gth exon 72386 72803 0.974 - . Parent=gene128 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72390 72754 0.997 - . ID=gene129;Target=md5:5a9fcf1a7370455e62e2701803939c8e 1 365 + md5:063b1024d68e26716b7f38caf958316f gth exon 72390 72754 0.997 - . Parent=gene129 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72390 72804 0.98 - . ID=gene130;Target=md5:3f342edcab14d21711f3d75e3ff81743 1 416 + md5:063b1024d68e26716b7f38caf958316f gth exon 72390 72804 0.98 - . Parent=gene130 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72399 72801 1 - . ID=gene131;Target=md5:a3891b57fd37552bdad1be4e20266a5a 1 403 + md5:063b1024d68e26716b7f38caf958316f gth exon 72399 72801 1 - . Parent=gene131 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72400 72753 1 - . ID=gene132;Target=md5:cc7281740fd5e50cb1f19a22a728e790 1 354 + md5:063b1024d68e26716b7f38caf958316f gth exon 72400 72753 1 - . Parent=gene132 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72404 72804 0.998 - . ID=gene133;Target=md5:b9d8ea84787a6573a7bd2acdb795af44 1 401 + md5:063b1024d68e26716b7f38caf958316f gth exon 72404 72804 0.998 - . Parent=gene133 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72422 72826 0.998 - . ID=gene134;Target=md5:d056310e74cdfca4f2f5de040aabc6c6 1 405 + md5:063b1024d68e26716b7f38caf958316f gth exon 72422 72826 0.998 - . Parent=gene134 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72424 72753 0.929 + . ID=gene135;Target=md5:b7056f0f128b406b094ebf5cb33fb74f 1 333 + md5:063b1024d68e26716b7f38caf958316f gth exon 72424 72753 0.929 + . Parent=gene135 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72437 72805 0.981 - . ID=gene136;Target=md5:fd4ec29ab7c96a341ad546c954b7f557 1 369 + md5:063b1024d68e26716b7f38caf958316f gth exon 72437 72805 0.981 - . Parent=gene136 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72522 72801 0.971 - . ID=gene137;Target=md5:fd65d023d2d6b71c478da3cfa418cbbc 1 280 + md5:063b1024d68e26716b7f38caf958316f gth exon 72522 72801 0.971 - . Parent=gene137 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72653 74046 0.978 - . ID=gene138;Target=md5:2c08f2fc011c03e5aa709690db242c3b 1 163 - md5:063b1024d68e26716b7f38caf958316f gth exon 72653 72789 0.978 - . Parent=gene138 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72789 72790 0 - . Parent=gene138 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 74020 74021 0.514 - . Parent=gene138 md5:063b1024d68e26716b7f38caf958316f gth exon 74021 74046 0.615 - . Parent=gene138 ### md5:063b1024d68e26716b7f38caf958316f gth gene 72653 74920 0.919 - . ID=gene139;Target=md5:44f49124e83c2c61713d3c50b3a9a47c 1 166 - md5:063b1024d68e26716b7f38caf958316f gth exon 72653 72800 0.919 - . Parent=gene139 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 72800 72801 0 - . Parent=gene139 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 74900 74901 0.919 - . Parent=gene139 md5:063b1024d68e26716b7f38caf958316f gth exon 74901 74920 0.75 - . Parent=gene139 ### md5:063b1024d68e26716b7f38caf958316f gth gene 79098 79663 0.866 - . ID=gene140;Target=md5:e7ffec1ba9f35a3e29c9946f86b8fe72 11 314 - md5:063b1024d68e26716b7f38caf958316f gth exon 79098 79127 0.767 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 79127 79128 0 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 79240 79241 0 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f gth exon 79241 79487 0.866 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 79487 79488 0.899 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 79635 79636 0.999 - . Parent=gene140 md5:063b1024d68e26716b7f38caf958316f gth exon 79636 79663 1 - . Parent=gene140 ### md5:063b1024d68e26716b7f38caf958316f gth gene 86444 89957 0.741 - . ID=gene141;Target=md5:2276b4a96eb715159638ed0f90239b89 87 582 + md5:063b1024d68e26716b7f38caf958316f gth exon 86444 86516 0.767 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 86516 86517 0.999 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 89439 89440 0.999 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f gth exon 89440 89702 0.683 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 89702 89703 0.846 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 89793 89794 0.933 - . Parent=gene141 md5:063b1024d68e26716b7f38caf958316f gth exon 89794 89957 0.823 - . Parent=gene141 ### md5:063b1024d68e26716b7f38caf958316f gth gene 90829 91133 0.948 + . ID=gene142;Target=md5:88e24a075574a85734a081b57a7ec852 1 307 + md5:063b1024d68e26716b7f38caf958316f gth exon 90829 91133 0.948 + . Parent=gene142 ### md5:063b1024d68e26716b7f38caf958316f gth gene 91050 91786 1 - . ID=gene143;Target=md5:b18a91dba09f9ffefbe7b4a6aed19945 1 543 - md5:063b1024d68e26716b7f38caf958316f gth exon 91050 91401 1 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 91401 91402 1 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 91523 91524 0.917 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f gth exon 91524 91713 1 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 91713 91714 0.848 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 91785 91786 0.993 - . Parent=gene143 md5:063b1024d68e26716b7f38caf958316f gth exon 91786 91786 1 - . Parent=gene143 ### md5:063b1024d68e26716b7f38caf958316f gth gene 92903 93265 1 - . ID=gene144;Target=md5:ddbfcce4683cac59087c5f26e674349b 1 266 + md5:063b1024d68e26716b7f38caf958316f gth exon 92903 93008 1 - . Parent=gene144 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 93008 93009 0.987 - . Parent=gene144 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 93105 93106 0.925 - . Parent=gene144 md5:063b1024d68e26716b7f38caf958316f gth exon 93106 93265 1 - . Parent=gene144 ### md5:063b1024d68e26716b7f38caf958316f gth gene 93551 94053 0.957 - . ID=gene145;Target=md5:d9d61048b8d25d868bda7f00a0831100 1 401 - md5:063b1024d68e26716b7f38caf958316f gth exon 93551 93913 0.957 - . Parent=gene145 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 93913 93914 0.992 - . Parent=gene145 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 94016 94017 0.996 - . Parent=gene145 md5:063b1024d68e26716b7f38caf958316f gth exon 94017 94053 0.919 - . Parent=gene145 ### md5:063b1024d68e26716b7f38caf958316f gth gene 93552 93837 0.83 - . ID=gene146;Target=md5:a0d33d57c705a829d80c318c595fcccb 81 377 + md5:063b1024d68e26716b7f38caf958316f gth exon 93552 93837 0.83 - . Parent=gene146 ### md5:063b1024d68e26716b7f38caf958316f gth gene 93633 94384 1 - . ID=gene147;Target=md5:41d17c6950c12d0d8ec2b305108f08ac 1 407 - md5:063b1024d68e26716b7f38caf958316f gth exon 93633 93913 1 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 93913 93914 0.992 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 94016 94017 0.996 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f gth exon 94017 94124 1 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 94124 94125 0.998 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 94366 94367 0.994 - . Parent=gene147 md5:063b1024d68e26716b7f38caf958316f gth exon 94367 94384 1 - . Parent=gene147 ### md5:063b1024d68e26716b7f38caf958316f gth gene 94706 95368 0.95 - . ID=gene148;Target=md5:da4c1ce6a2ee20bb9c4c5d9462be98de 1 392 + md5:063b1024d68e26716b7f38caf958316f gth exon 94706 94771 0.871 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 94771 94772 0.993 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 94876 94877 0.985 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f gth exon 94877 94985 0.954 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 94985 94986 0.957 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 95070 95071 0.958 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f gth exon 95071 95147 1 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 95147 95148 0.992 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 95233 95234 0.937 - . Parent=gene148 md5:063b1024d68e26716b7f38caf958316f gth exon 95234 95368 0.956 - . Parent=gene148 ### md5:063b1024d68e26716b7f38caf958316f gth gene 95317 96614 0.995 - . ID=gene149;Target=md5:c9a4247a29baa59833607fc71f58bb40 1 646 + md5:063b1024d68e26716b7f38caf958316f gth exon 95317 95454 1 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 95454 95455 0.938 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 95841 95842 0.988 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth exon 95842 95947 0.991 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 95947 95948 0.999 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 96035 96036 0.993 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth exon 96036 96140 1 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 96140 96141 0.869 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 96231 96232 0.996 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth exon 96232 96330 1 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 96330 96331 0.996 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 96417 96418 0.958 - . Parent=gene149 md5:063b1024d68e26716b7f38caf958316f gth exon 96418 96614 0.987 - . Parent=gene149 ### md5:063b1024d68e26716b7f38caf958316f gth gene 95905 96592 0.989 - . ID=gene150;Target=md5:e6343ecf374a95dd0356831650af82f1 1 422 + md5:063b1024d68e26716b7f38caf958316f gth exon 95905 95947 0.907 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 95947 95948 0.999 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 96035 96036 0.993 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f gth exon 96036 96140 1 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 96140 96141 0.869 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 96231 96232 0.996 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f gth exon 96232 96330 1 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 96330 96331 0.996 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 96417 96418 0.958 - . Parent=gene150 md5:063b1024d68e26716b7f38caf958316f gth exon 96418 96592 0.977 - . Parent=gene150 ### md5:063b1024d68e26716b7f38caf958316f gth gene 95929 96592 0.984 - . ID=gene151;Target=md5:29b2d16dd6ee3e8669ae77b4e053ee20 1 398 + md5:063b1024d68e26716b7f38caf958316f gth exon 95929 95947 0.947 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 95947 95948 0.999 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 96035 96036 0.993 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f gth exon 96036 96140 0.981 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 96140 96141 0.869 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 96231 96232 0.996 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f gth exon 96232 96330 1 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 96330 96331 0.996 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 96417 96418 0.958 - . Parent=gene151 md5:063b1024d68e26716b7f38caf958316f gth exon 96418 96592 0.977 - . Parent=gene151 ### md5:063b1024d68e26716b7f38caf958316f gth gene 98857 99326 1 - . ID=gene152;Target=md5:4a2861ff4a54b0b8a099c7ca178c113f 1 392 - md5:063b1024d68e26716b7f38caf958316f gth exon 98857 99121 1 - . Parent=gene152 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene152 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene152 md5:063b1024d68e26716b7f38caf958316f gth exon 99200 99326 1 - . Parent=gene152 ### md5:063b1024d68e26716b7f38caf958316f gth gene 98861 99271 1 - . ID=gene153;Target=md5:432d83294aa0f2f3fc1b7673977ea4d1 1 333 - md5:063b1024d68e26716b7f38caf958316f gth exon 98861 99121 1 - . Parent=gene153 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene153 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene153 md5:063b1024d68e26716b7f38caf958316f gth exon 99200 99271 1 - . Parent=gene153 ### md5:063b1024d68e26716b7f38caf958316f gth gene 98861 99511 0.9 - . ID=gene154;Target=md5:50590ee6555b56ad95151d25d300c6fe 47 535 + md5:063b1024d68e26716b7f38caf958316f gth exon 98861 99121 0.992 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f gth exon 99200 99361 0.883 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene154 md5:063b1024d68e26716b7f38caf958316f gth exon 99443 99511 0.594 - . Parent=gene154 ### md5:063b1024d68e26716b7f38caf958316f gth gene 98878 99663 0.987 - . ID=gene155;Target=md5:08f77d13c4ad88c1c44c0314426f2218 1 525 - md5:063b1024d68e26716b7f38caf958316f gth exon 98878 99121 0.996 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f gth exon 99200 99361 1 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f gth exon 99443 99511 1 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99511 99512 0.998 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99612 99613 0.999 - . Parent=gene155 md5:063b1024d68e26716b7f38caf958316f gth exon 99613 99663 0.882 - . Parent=gene155 ### md5:063b1024d68e26716b7f38caf958316f gth gene 98909 99450 1 - . ID=gene156;Target=md5:d75212b190b11adfcbc1b62e6d392ed1 1 383 - md5:063b1024d68e26716b7f38caf958316f gth exon 98909 99121 1 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f gth exon 99200 99361 1 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene156 md5:063b1024d68e26716b7f38caf958316f gth exon 99443 99450 1 - . Parent=gene156 ### md5:063b1024d68e26716b7f38caf958316f gth gene 98987 99504 0.962 - . ID=gene157;Target=md5:dd3ace06137c29bf383632984aadf8af 1 362 + md5:063b1024d68e26716b7f38caf958316f gth exon 98987 99121 0.9 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f gth exon 99200 99361 1 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene157 md5:063b1024d68e26716b7f38caf958316f gth exon 99443 99504 1 - . Parent=gene157 ### md5:063b1024d68e26716b7f38caf958316f gth gene 99613 100804 0.998 - . ID=gene158;Target=md5:eaca300e106a2e1c1897455c6a2cb618 1 661 + md5:063b1024d68e26716b7f38caf958316f gth exon 99613 99877 1 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99877 99878 0.981 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100101 100102 0.978 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth exon 100102 100226 1 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth exon 100327 100434 1 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth exon 100539 100646 1 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100646 100647 0 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100748 100749 0.995 - . Parent=gene158 md5:063b1024d68e26716b7f38caf958316f gth exon 100749 100804 0.982 - . Parent=gene158 ### md5:063b1024d68e26716b7f38caf958316f gth gene 99698 100804 0.997 - . ID=gene159;Target=md5:1fd1b5316d6ec8962be7986ceebf3ce6 1 577 + md5:063b1024d68e26716b7f38caf958316f gth exon 99698 99877 0.994 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99877 99878 0.981 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100101 100102 0.978 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth exon 100102 100226 1 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth exon 100327 100434 1 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth exon 100539 100646 1 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100646 100647 0 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100748 100749 0.995 - . Parent=gene159 md5:063b1024d68e26716b7f38caf958316f gth exon 100749 100804 0.982 - . Parent=gene159 ### md5:063b1024d68e26716b7f38caf958316f gth gene 99801 100766 0.933 - . ID=gene160;Target=md5:8bfbb0491705b51d42ef6d8ba0c3e2ef 1 437 + md5:063b1024d68e26716b7f38caf958316f gth exon 99801 99877 0.76 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 99877 99878 0.981 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100101 100102 0.978 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth exon 100102 100226 0.948 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth exon 100327 100434 1 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth exon 100539 100646 0.972 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100646 100647 0 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100748 100749 0.995 - . Parent=gene160 md5:063b1024d68e26716b7f38caf958316f gth exon 100749 100766 1 - . Parent=gene160 ### md5:063b1024d68e26716b7f38caf958316f gth gene 100105 100634 1 - . ID=gene161;Target=md5:8e46b5509ea749211c8c5cacdc1e2500 1 326 + md5:063b1024d68e26716b7f38caf958316f gth exon 100105 100226 1 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100226 100227 1 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100326 100327 0.999 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f gth exon 100327 100434 1 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 100434 100435 0.979 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 100538 100539 0.922 - . Parent=gene161 md5:063b1024d68e26716b7f38caf958316f gth exon 100539 100634 1 - . Parent=gene161 ### md5:063b1024d68e26716b7f38caf958316f gth gene 103616 104455 0.96 + . ID=gene162;Target=md5:0c4c41ad6668fd55d5f1140088f1064d 1 435 + md5:063b1024d68e26716b7f38caf958316f gth exon 103616 103753 0.975 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f gth exon 103982 104035 0.981 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f gth exon 104118 104198 0.975 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene162 md5:063b1024d68e26716b7f38caf958316f gth exon 104295 104455 0.932 + . Parent=gene162 ### md5:063b1024d68e26716b7f38caf958316f gth gene 103616 104478 0.909 + . ID=gene163;Target=md5:d4793f2935cfa07221be201386cb079b 1 460 + md5:063b1024d68e26716b7f38caf958316f gth exon 103616 103753 1 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f gth exon 103982 104035 0.981 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f gth exon 104118 104198 1 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene163 md5:063b1024d68e26716b7f38caf958316f gth exon 104295 104478 0.78 + . Parent=gene163 ### md5:063b1024d68e26716b7f38caf958316f gth gene 103616 104819 0.952 + . ID=gene164;Target=md5:e47b883ccda180d280195029954ea7f5 1 700 + md5:063b1024d68e26716b7f38caf958316f gth exon 103616 103753 1 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth exon 103982 104035 1 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth exon 104118 104198 1 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth exon 104295 104724 0.921 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104725 104726 0.953 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104801 104802 0.814 + . Parent=gene164 md5:063b1024d68e26716b7f38caf958316f gth exon 104803 104819 0.765 + . Parent=gene164 ### md5:063b1024d68e26716b7f38caf958316f gth gene 103706 104416 0.829 + . ID=gene165;Target=md5:41ccefe046c76c005c6f83a09aac40de 99 409 + md5:063b1024d68e26716b7f38caf958316f gth exon 103706 103731 0.885 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 103732 103733 0 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 103797 103798 0 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth exon 103799 103826 0.518 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 103827 103828 0.326 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth exon 103982 104035 0.778 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth exon 104118 104198 0.84 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene165 md5:063b1024d68e26716b7f38caf958316f gth exon 104295 104416 0.844 + . Parent=gene165 ### md5:063b1024d68e26716b7f38caf958316f gth gene 103713 104391 0.812 + . ID=gene166;Target=md5:556ae7f08b7cc887b54786f0bc100dd4 78 357 + md5:063b1024d68e26716b7f38caf958316f gth exon 103713 103731 1 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 103732 103733 0 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 103797 103798 0 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth exon 103799 103826 0.518 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 103827 103828 0.326 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth exon 103982 104035 0.778 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth exon 104118 104198 0.84 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene166 md5:063b1024d68e26716b7f38caf958316f gth exon 104295 104391 0.809 + . Parent=gene166 ### md5:063b1024d68e26716b7f38caf958316f gth gene 103746 104415 0.824 + . ID=gene167;Target=md5:b9155494bf5b0de513f322e685542888 103 366 + md5:063b1024d68e26716b7f38caf958316f gth exon 103746 103753 0.875 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f gth exon 103982 104035 0.778 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f gth exon 104118 104198 0.84 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene167 md5:063b1024d68e26716b7f38caf958316f gth exon 104295 104415 0.835 + . Parent=gene167 ### md5:063b1024d68e26716b7f38caf958316f gth gene 103746 104440 0.829 + . ID=gene168;Target=md5:0e851efbbe2bfb244a388865f785495d 87 375 + md5:063b1024d68e26716b7f38caf958316f gth exon 103746 103753 0.875 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 103754 103755 0.99 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 103980 103981 0.996 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f gth exon 103982 104035 0.778 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f gth exon 104118 104198 0.84 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene168 md5:063b1024d68e26716b7f38caf958316f gth exon 104295 104440 0.842 + . Parent=gene168 ### md5:063b1024d68e26716b7f38caf958316f gth gene 103982 104683 0.818 + . ID=gene169;Target=md5:f1cb6a33be382d29ff291be589f1ed70 71 401 + md5:063b1024d68e26716b7f38caf958316f gth exon 103982 104035 0.759 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f gth exon 104118 104198 0.84 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f gth exon 104295 104455 0.826 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104456 104457 0.522 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104647 104648 0 + . Parent=gene169 md5:063b1024d68e26716b7f38caf958316f gth exon 104649 104683 0.971 + . Parent=gene169 ### md5:063b1024d68e26716b7f38caf958316f gth gene 103982 104881 0.909 + . ID=gene170;Target=md5:b289385ff9ca374ceb056d5950d090b5 68 518 + md5:063b1024d68e26716b7f38caf958316f gth exon 103982 104035 0.944 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104036 104037 0.997 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104116 104117 0.982 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth exon 104118 104198 0.951 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104199 104200 0.992 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104293 104294 1 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth exon 104295 104455 0.888 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104456 104457 0.522 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104647 104648 0 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth exon 104649 104724 0.934 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104725 104726 0.953 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104801 104802 0.814 + . Parent=gene170 md5:063b1024d68e26716b7f38caf958316f gth exon 104803 104881 0.861 + . Parent=gene170 ### md5:063b1024d68e26716b7f38caf958316f gth gene 104394 105201 0.83 + . ID=gene171;Target=md5:ddab1d6f7c76a6508e85423cd56d46e5 1 457 + md5:063b1024d68e26716b7f38caf958316f gth exon 104394 104455 0.887 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104456 104457 0.522 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104647 104648 0 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f gth exon 104649 104724 0.921 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104725 104726 0.953 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 104801 104802 0.814 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f gth exon 104803 104928 0.841 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104929 104930 0.881 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105008 105009 0.99 + . Parent=gene171 md5:063b1024d68e26716b7f38caf958316f gth exon 105010 105201 0.768 + . Parent=gene171 ### md5:063b1024d68e26716b7f38caf958316f gth gene 104803 105220 0.852 + . ID=gene172;Target=md5:257d2dc2f7c0bb730fe685a8052aaa63 22 358 + md5:063b1024d68e26716b7f38caf958316f gth exon 104803 104928 0.841 + . Parent=gene172 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104929 104930 0.881 + . Parent=gene172 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105008 105009 0.99 + . Parent=gene172 md5:063b1024d68e26716b7f38caf958316f gth exon 105010 105220 0.858 + . Parent=gene172 ### md5:063b1024d68e26716b7f38caf958316f gth gene 104912 105793 0.887 + . ID=gene173;Target=md5:649b4501a3ba1d922dce7b623c7f6de9 1 549 - md5:063b1024d68e26716b7f38caf958316f gth exon 104912 104928 0.824 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 104929 104930 0.881 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105008 105009 0.99 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth exon 105010 105228 0.863 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.912 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene173 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105793 0.902 + . Parent=gene173 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105009 105793 0.884 + . ID=gene174;Target=md5:c6730817f9a41f80296421e6b7da6f25 1 533 - md5:063b1024d68e26716b7f38caf958316f gth exon 105009 105228 0.864 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.912 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene174 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105793 0.89 + . Parent=gene174 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105069 105815 0.876 + . ID=gene175;Target=md5:c24d4bd4c7cae864049bd096522750b1 1 495 - md5:063b1024d68e26716b7f38caf958316f gth exon 105069 105228 0.831 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.912 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene175 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105815 0.892 + . Parent=gene175 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105090 105793 0.878 + . ID=gene176;Target=md5:52b0aff6e54274ccb35b371b7630b68a 1 452 - md5:063b1024d68e26716b7f38caf958316f gth exon 105090 105228 0.82 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.912 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 0.972 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene176 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105793 0.902 + . Parent=gene176 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105091 105793 0.857 + . ID=gene177;Target=md5:085f029e3f483828cb30f70b141fa58a 1 452 - md5:063b1024d68e26716b7f38caf958316f gth exon 105091 105228 0.786 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.886 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 0.972 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene177 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105793 0.896 + . Parent=gene177 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105140 105793 0.88 + . ID=gene178;Target=md5:174d324a9dca8baddcdcd0dbef55f969 1 402 - md5:063b1024d68e26716b7f38caf958316f gth exon 105140 105228 0.798 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.912 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene178 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105793 0.902 + . Parent=gene178 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105170 105793 0.862 + . ID=gene179;Target=md5:0920b24475a189fbfc148593eec03cb6 88 460 - md5:063b1024d68e26716b7f38caf958316f gth exon 105170 105228 0.686 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.904 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene179 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105793 0.896 + . Parent=gene179 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105175 105793 0.901 + . ID=gene180;Target=md5:15ed737c8deffb63f79d93a8fecb5a93 1 367 - md5:063b1024d68e26716b7f38caf958316f gth exon 105175 105228 0.87 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.912 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene180 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105793 0.902 + . Parent=gene180 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105189 105793 0.896 + . ID=gene181;Target=md5:f8e9d021f04423c2ad6499f4ce6eca57 1 354 - md5:063b1024d68e26716b7f38caf958316f gth exon 105189 105228 0.875 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.912 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene181 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105793 0.884 + . Parent=gene181 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105190 105793 0.906 + . ID=gene182;Target=md5:a45d1a65f8024adcc2ce8bdcdfb36569 1 352 - md5:063b1024d68e26716b7f38caf958316f gth exon 105190 105228 0.872 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.912 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene182 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105793 0.902 + . Parent=gene182 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105199 105793 0.845 + . ID=gene183;Target=md5:07c4180bd9082b53416a778fee66e3f3 39 385 - md5:063b1024d68e26716b7f38caf958316f gth exon 105199 105228 0.833 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f gth exon 105315 105428 0.904 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 0.972 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene183 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105793 0.805 + . Parent=gene183 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105348 105815 0.895 + . ID=gene184;Target=md5:15adef11b8ee98d85e7a5e3106495193 1 302 + md5:063b1024d68e26716b7f38caf958316f gth exon 105348 105428 0.914 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene184 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105815 0.887 + . Parent=gene184 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105348 105815 0.899 + . ID=gene185;Target=md5:f74aca5cee266c7bc442898be20363ae 1 302 + md5:063b1024d68e26716b7f38caf958316f gth exon 105348 105428 0.914 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene185 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105815 0.892 + . Parent=gene185 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105371 105813 0.897 + . ID=gene186;Target=md5:5db2b668ce1df476a932c078b6e77122 1 277 - md5:063b1024d68e26716b7f38caf958316f gth exon 105371 105428 0.931 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 0.972 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene186 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105813 0.886 + . Parent=gene186 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105382 105851 0.986 + . ID=gene187;Target=md5:e6338114b6c0dcc78811d3be5b36ff63 65 370 + md5:063b1024d68e26716b7f38caf958316f gth exon 105382 105428 0.979 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 0.903 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene187 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105851 0.986 + . Parent=gene187 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105394 105860 0.827 + . ID=gene188;Target=md5:940e92280507db531e4654cc1f1054ef 1 296 - md5:063b1024d68e26716b7f38caf958316f gth exon 105394 105428 0.971 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f gth exon 105500 105535 1 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene188 md5:063b1024d68e26716b7f38caf958316f gth exon 105630 105860 0.827 + . Parent=gene188 ### md5:063b1024d68e26716b7f38caf958316f gth gene 105662 105806 0.855 - . ID=gene189;Target=md5:816e83d74c3a633c3ccc005f1c14d55a 30 173 + md5:063b1024d68e26716b7f38caf958316f gth exon 105662 105806 0.855 - . Parent=gene189 ### md5:063b1024d68e26716b7f38caf958316f gth gene 106097 106973 0.998 + . ID=gene190;Target=md5:1adc4b78b212af1a83a6460bd27222f0 1 425 + md5:063b1024d68e26716b7f38caf958316f gth exon 106097 106290 0.995 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f gth exon 106566 106619 1 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f gth exon 106702 106782 1 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene190 md5:063b1024d68e26716b7f38caf958316f gth exon 106878 106973 1 + . Parent=gene190 ### md5:063b1024d68e26716b7f38caf958316f gth gene 106133 106934 0.966 + . ID=gene191;Target=md5:21c1b9817f74d01695e650726543cfbc 1 350 + md5:063b1024d68e26716b7f38caf958316f gth exon 106133 106290 0.962 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f gth exon 106566 106619 0.981 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f gth exon 106702 106782 1 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene191 md5:063b1024d68e26716b7f38caf958316f gth exon 106878 106934 0.912 + . Parent=gene191 ### md5:063b1024d68e26716b7f38caf958316f gth gene 106148 106751 0.966 + . ID=gene192;Target=md5:c446b7e0b708aafe5473ef397e104ae3 1 248 + md5:063b1024d68e26716b7f38caf958316f gth exon 106148 106290 0.948 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f gth exon 106566 106619 1 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene192 md5:063b1024d68e26716b7f38caf958316f gth exon 106702 106751 0.98 + . Parent=gene192 ### md5:063b1024d68e26716b7f38caf958316f gth gene 106149 106973 0.924 + . ID=gene193;Target=md5:5b0a1904c2c8e69fe643091fee181037 1 377 + md5:063b1024d68e26716b7f38caf958316f gth exon 106149 106290 0.979 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f gth exon 106566 106619 0.944 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f gth exon 106702 106782 0.975 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene193 md5:063b1024d68e26716b7f38caf958316f gth exon 106878 106973 0.786 + . Parent=gene193 ### md5:063b1024d68e26716b7f38caf958316f gth gene 106156 106973 0.915 + . ID=gene194;Target=md5:11a2689b92ee76c83cd57591ae940971 1 374 + md5:063b1024d68e26716b7f38caf958316f gth exon 106156 106290 0.97 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f gth exon 106566 106619 0.981 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f gth exon 106702 106782 1 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene194 md5:063b1024d68e26716b7f38caf958316f gth exon 106878 106973 0.729 + . Parent=gene194 ### md5:063b1024d68e26716b7f38caf958316f gth gene 106156 106973 1 + . ID=gene195;Target=md5:d1a97200c69d88855784612802e7c024 1 366 + md5:063b1024d68e26716b7f38caf958316f gth exon 106156 106290 1 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f gth exon 106566 106619 1 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f gth exon 106702 106782 1 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene195 md5:063b1024d68e26716b7f38caf958316f gth exon 106878 106973 1 + . Parent=gene195 ### md5:063b1024d68e26716b7f38caf958316f gth gene 106161 106750 0.967 + . ID=gene196;Target=md5:5ae608a9518c5417787d0da5f4dc93b7 26 261 + md5:063b1024d68e26716b7f38caf958316f gth exon 106161 106290 0.962 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f gth exon 106566 106619 0.981 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene196 md5:063b1024d68e26716b7f38caf958316f gth exon 106702 106750 0.724 + . Parent=gene196 ### md5:063b1024d68e26716b7f38caf958316f gth gene 106168 106917 0.981 + . ID=gene197;Target=md5:7be43cab2c3d57b779ea0f8ceeacfc0c 1 298 + md5:063b1024d68e26716b7f38caf958316f gth exon 106168 106290 0.976 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f gth exon 106566 106619 0.981 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f gth exon 106702 106782 0.988 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene197 md5:063b1024d68e26716b7f38caf958316f gth exon 106878 106917 0.95 + . Parent=gene197 ### md5:063b1024d68e26716b7f38caf958316f gth gene 106224 106710 0.959 + . ID=gene198;Target=md5:802e6347770300a7bbc0064a90f1f061 1 130 + md5:063b1024d68e26716b7f38caf958316f gth exon 106224 106290 0.94 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106291 106292 0.97 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106564 106565 0.986 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f gth exon 106566 106619 0.981 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106620 106621 0.998 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106700 106701 0.973 + . Parent=gene198 md5:063b1024d68e26716b7f38caf958316f gth exon 106702 106710 1 + . Parent=gene198 ### md5:063b1024d68e26716b7f38caf958316f gth gene 106716 106973 0.847 + . ID=gene199;Target=md5:e5c6d7f52bae4b6b57c6320ef95f9b66 1 162 + md5:063b1024d68e26716b7f38caf958316f gth exon 106716 106782 0.806 + . Parent=gene199 md5:063b1024d68e26716b7f38caf958316f gth five_prime_cis_splice_site 106783 106784 0.997 + . Parent=gene199 md5:063b1024d68e26716b7f38caf958316f gth three_prime_cis_splice_site 106876 106877 1 + . Parent=gene199 md5:063b1024d68e26716b7f38caf958316f gth exon 106878 106973 0.875 + . Parent=gene199 ### genometools-1.5.1/testdata/U89959_sas.minus_targets000066400000000000000000000706221211610345200221740ustar00rootroot00000000000000##gff-version 3 ##sequence-region 1877523 1 106973 1877523 gth gene 3041 3651 0.996 - . ID=gene1;Target=8732878 1 536 - 1877523 gth exon 3041 3550 0.996 - . Parent=gene1 1877523 gth three_prime_cis_splice_site 3550 3551 1 - . Parent=gene1 1877523 gth five_prime_cis_splice_site 3625 3626 0.741 - . Parent=gene1 1877523 gth exon 3626 3651 1 - . Parent=gene1 ### 1877523 gth gene 17165 17684 0.985 + . ID=gene2;Target=19798999 1 396 - 1877523 gth exon 17165 17247 0.97 + . Parent=gene2 1877523 gth five_prime_cis_splice_site 17248 17249 1 + . Parent=gene2 1877523 gth three_prime_cis_splice_site 17372 17373 0.994 + . Parent=gene2 1877523 gth exon 17374 17684 0.989 + . Parent=gene2 ### 1877523 gth gene 36370 37156 1 + . ID=gene3;Target=8683519 1 604 - 1877523 gth exon 36370 36431 1 + . Parent=gene3 1877523 gth five_prime_cis_splice_site 36432 36433 0.994 + . Parent=gene3 1877523 gth three_prime_cis_splice_site 36519 36520 1 + . Parent=gene3 1877523 gth exon 36521 36721 1 + . Parent=gene3 1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene3 1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene3 1877523 gth exon 36816 37156 1 + . Parent=gene3 ### 1877523 gth gene 36402 37106 1 + . ID=gene4;Target=8682814 1 522 - 1877523 gth exon 36402 36431 1 + . Parent=gene4 1877523 gth five_prime_cis_splice_site 36432 36433 0.994 + . Parent=gene4 1877523 gth three_prime_cis_splice_site 36519 36520 1 + . Parent=gene4 1877523 gth exon 36521 36721 1 + . Parent=gene4 1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene4 1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene4 1877523 gth exon 36816 37106 1 + . Parent=gene4 ### 1877523 gth gene 36531 37190 1 + . ID=gene5;Target=8690927 1 566 - 1877523 gth exon 36531 36721 1 + . Parent=gene5 1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene5 1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene5 1877523 gth exon 36816 37190 1 + . Parent=gene5 ### 1877523 gth gene 36546 37186 0.99 + . ID=gene6;Target=5845530 1 547 - 1877523 gth exon 36546 36721 0.969 + . Parent=gene6 1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene6 1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene6 1877523 gth exon 36816 37186 1 + . Parent=gene6 ### 1877523 gth gene 36594 37208 1 + . ID=gene7;Target=8717375 1 521 - 1877523 gth exon 36594 36721 1 + . Parent=gene7 1877523 gth five_prime_cis_splice_site 36722 36723 0.91 + . Parent=gene7 1877523 gth three_prime_cis_splice_site 36814 36815 0.968 + . Parent=gene7 1877523 gth exon 36816 37208 1 + . Parent=gene7 ### 1877523 gth gene 37669 39259 1 - . ID=gene8;Target=8738841 1 588 - 1877523 gth exon 37669 37891 1 - . Parent=gene8 1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene8 1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene8 1877523 gth exon 37972 38060 1 - . Parent=gene8 1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene8 1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene8 1877523 gth exon 38656 38794 1 - . Parent=gene8 1877523 gth three_prime_cis_splice_site 38794 38795 0.976 - . Parent=gene8 1877523 gth five_prime_cis_splice_site 38926 38927 0.977 - . Parent=gene8 1877523 gth exon 38927 38997 1 - . Parent=gene8 1877523 gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene8 1877523 gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene8 1877523 gth exon 39104 39148 1 - . Parent=gene8 1877523 gth three_prime_cis_splice_site 39148 39149 0.991 - . Parent=gene8 1877523 gth five_prime_cis_splice_site 39238 39239 0.998 - . Parent=gene8 1877523 gth exon 39239 39259 1 - . Parent=gene8 ### 1877523 gth gene 37691 38766 0.995 - . ID=gene9;Target=19831991 1 401 - 1877523 gth exon 37691 37891 0.99 - . Parent=gene9 1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene9 1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene9 1877523 gth exon 37972 38060 1 - . Parent=gene9 1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene9 1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene9 1877523 gth exon 38656 38766 1 - . Parent=gene9 ### 1877523 gth gene 37692 38756 1 - . ID=gene10;Target=19840745 1 390 - 1877523 gth exon 37692 37891 1 - . Parent=gene10 1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene10 1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene10 1877523 gth exon 37972 38060 1 - . Parent=gene10 1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene10 1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene10 1877523 gth exon 38656 38756 1 - . Parent=gene10 ### 1877523 gth gene 37716 39118 0.967 - . ID=gene11;Target=5843191 1 490 - 1877523 gth exon 37716 37891 0.977 - . Parent=gene11 1877523 gth three_prime_cis_splice_site 37891 37892 0.935 - . Parent=gene11 1877523 gth five_prime_cis_splice_site 37971 37972 0.873 - . Parent=gene11 1877523 gth exon 37972 38060 1 - . Parent=gene11 1877523 gth three_prime_cis_splice_site 38060 38061 0.978 - . Parent=gene11 1877523 gth five_prime_cis_splice_site 38655 38656 0.856 - . Parent=gene11 1877523 gth exon 38656 38794 0.953 - . Parent=gene11 1877523 gth three_prime_cis_splice_site 38794 38795 0.976 - . Parent=gene11 1877523 gth five_prime_cis_splice_site 38926 38927 0.977 - . Parent=gene11 1877523 gth exon 38927 38997 0.93 - . Parent=gene11 1877523 gth three_prime_cis_splice_site 38997 38998 0.768 - . Parent=gene11 1877523 gth five_prime_cis_splice_site 39103 39104 0.491 - . Parent=gene11 1877523 gth exon 39104 39118 0.933 - . Parent=gene11 ### 1877523 gth gene 45843 45920 0.949 + . ID=gene12;Target=8720010 1 78 - 1877523 gth exon 45843 45920 0.949 + . Parent=gene12 ### 1877523 gth gene 50433 51134 0.978 - . ID=gene13;Target=19807151 1 426 - 1877523 gth exon 50433 50834 0.978 - . Parent=gene13 1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene13 1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene13 1877523 gth exon 51113 51134 1 - . Parent=gene13 ### 1877523 gth gene 50475 51193 1 - . ID=gene14;Target=8731976 1 441 - 1877523 gth exon 50475 50834 1 - . Parent=gene14 1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene14 1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene14 1877523 gth exon 51113 51193 1 - . Parent=gene14 ### 1877523 gth gene 50590 51354 1 - . ID=gene15;Target=19805724 1 385 - 1877523 gth exon 50590 50834 1 - . Parent=gene15 1877523 gth three_prime_cis_splice_site 50834 50835 0.998 - . Parent=gene15 1877523 gth five_prime_cis_splice_site 51112 51113 0.998 - . Parent=gene15 1877523 gth exon 51113 51216 1 - . Parent=gene15 1877523 gth three_prime_cis_splice_site 51216 51217 0.988 - . Parent=gene15 1877523 gth five_prime_cis_splice_site 51318 51319 1 - . Parent=gene15 1877523 gth exon 51319 51354 1 - . Parent=gene15 ### 1877523 gth gene 53602 54271 0.994 - . ID=gene16;Target=8697180 1 427 - 1877523 gth exon 53602 53914 0.992 - . Parent=gene16 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene16 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene16 1877523 gth exon 54159 54271 1 - . Parent=gene16 ### 1877523 gth gene 53602 54710 0.995 - . ID=gene17;Target=19803773 1 627 - 1877523 gth exon 53602 53914 0.994 - . Parent=gene17 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene17 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene17 1877523 gth exon 54159 54335 1 - . Parent=gene17 1877523 gth three_prime_cis_splice_site 54335 54336 0.998 - . Parent=gene17 1877523 gth five_prime_cis_splice_site 54573 54574 0.951 - . Parent=gene17 1877523 gth exon 54574 54710 0.993 - . Parent=gene17 ### 1877523 gth gene 53624 54279 0.989 - . ID=gene18;Target=19840006 1 413 - 1877523 gth exon 53624 53914 0.988 - . Parent=gene18 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene18 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene18 1877523 gth exon 54159 54279 0.992 - . Parent=gene18 ### 1877523 gth gene 53624 54283 0.992 - . ID=gene19;Target=19823046 1 417 - 1877523 gth exon 53624 53914 0.988 - . Parent=gene19 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene19 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene19 1877523 gth exon 54159 54283 1 - . Parent=gene19 ### 1877523 gth gene 53645 54320 0.99 - . ID=gene20;Target=19843722 1 431 - 1877523 gth exon 53645 53914 0.991 - . Parent=gene20 1877523 gth three_prime_cis_splice_site 53914 53915 0.991 - . Parent=gene20 1877523 gth five_prime_cis_splice_site 54158 54159 0.994 - . Parent=gene20 1877523 gth exon 54159 54320 0.988 - . Parent=gene20 ### 1877523 gth gene 58115 59001 0.984 + . ID=gene21;Target=19741042 1 460 - 1877523 gth exon 58115 58209 0.958 + . Parent=gene21 1877523 gth five_prime_cis_splice_site 58210 58211 0.856 + . Parent=gene21 1877523 gth three_prime_cis_splice_site 58459 58460 1 + . Parent=gene21 1877523 gth exon 58461 58526 1 + . Parent=gene21 1877523 gth five_prime_cis_splice_site 58527 58528 0.784 + . Parent=gene21 1877523 gth three_prime_cis_splice_site 58622 58623 0.977 + . Parent=gene21 1877523 gth exon 58624 58717 1 + . Parent=gene21 1877523 gth five_prime_cis_splice_site 58718 58719 0 + . Parent=gene21 1877523 gth three_prime_cis_splice_site 58794 58795 1 + . Parent=gene21 1877523 gth exon 58796 59001 0.983 + . Parent=gene21 ### 1877523 gth gene 61212 61974 1 + . ID=gene22;Target=19837990 1 398 - 1877523 gth exon 61212 61281 1 + . Parent=gene22 1877523 gth five_prime_cis_splice_site 61282 61283 0.316 + . Parent=gene22 1877523 gth three_prime_cis_splice_site 61563 61564 0.959 + . Parent=gene22 1877523 gth exon 61565 61641 1 + . Parent=gene22 1877523 gth five_prime_cis_splice_site 61642 61643 0 + . Parent=gene22 1877523 gth three_prime_cis_splice_site 61722 61723 0.994 + . Parent=gene22 1877523 gth exon 61724 61974 1 + . Parent=gene22 ### 1877523 gth gene 63106 63942 1 + . ID=gene23;Target=8701755 1 598 - 1877523 gth exon 63106 63178 1 + . Parent=gene23 1877523 gth five_prime_cis_splice_site 63179 63180 0 + . Parent=gene23 1877523 gth three_prime_cis_splice_site 63269 63270 0.999 + . Parent=gene23 1877523 gth exon 63271 63391 1 + . Parent=gene23 1877523 gth five_prime_cis_splice_site 63392 63393 0.823 + . Parent=gene23 1877523 gth three_prime_cis_splice_site 63466 63467 0 + . Parent=gene23 1877523 gth exon 63468 63683 1 + . Parent=gene23 1877523 gth five_prime_cis_splice_site 63684 63685 0.999 + . Parent=gene23 1877523 gth three_prime_cis_splice_site 63753 63754 0.992 + . Parent=gene23 1877523 gth exon 63755 63942 1 + . Parent=gene23 ### 1877523 gth gene 63306 63942 1 + . ID=gene24;Target=8735505 1 490 - 1877523 gth exon 63306 63391 1 + . Parent=gene24 1877523 gth five_prime_cis_splice_site 63392 63393 0.823 + . Parent=gene24 1877523 gth three_prime_cis_splice_site 63466 63467 0 + . Parent=gene24 1877523 gth exon 63468 63683 1 + . Parent=gene24 1877523 gth five_prime_cis_splice_site 63684 63685 0.999 + . Parent=gene24 1877523 gth three_prime_cis_splice_site 63753 63754 0.992 + . Parent=gene24 1877523 gth exon 63755 63942 1 + . Parent=gene24 ### 1877523 gth gene 67871 68396 0.99 + . ID=gene25;Target=19742246 1 423 - 1877523 gth exon 67871 67908 0.947 + . Parent=gene25 1877523 gth five_prime_cis_splice_site 67909 67910 1 + . Parent=gene25 1877523 gth three_prime_cis_splice_site 68009 68010 0.999 + . Parent=gene25 1877523 gth exon 68011 68396 0.99 + . Parent=gene25 ### 1877523 gth gene 72185 72753 1 + . ID=gene26;Target=8737761 1 497 - 1877523 gth exon 72185 72296 1 + . Parent=gene26 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene26 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene26 1877523 gth exon 72369 72753 1 + . Parent=gene26 ### 1877523 gth gene 72214 72751 0.987 + . ID=gene27;Target=7610337 1 466 - 1877523 gth exon 72214 72296 1 + . Parent=gene27 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene27 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene27 1877523 gth exon 72369 72751 0.984 + . Parent=gene27 ### 1877523 gth gene 72231 72731 0.998 + . ID=gene28;Target=19829297 1 429 - 1877523 gth exon 72231 72296 1 + . Parent=gene28 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene28 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene28 1877523 gth exon 72369 72731 0.997 + . Parent=gene28 ### 1877523 gth gene 72246 72753 0.995 + . ID=gene29;Target=19829716 1 434 - 1877523 gth exon 72246 72296 0.98 + . Parent=gene29 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene29 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene29 1877523 gth exon 72369 72753 0.997 + . Parent=gene29 ### 1877523 gth gene 72252 72753 0.988 + . ID=gene30;Target=19831127 1 431 - 1877523 gth exon 72252 72296 1 + . Parent=gene30 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene30 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene30 1877523 gth exon 72369 72753 0.988 + . Parent=gene30 ### 1877523 gth gene 72252 72803 1 + . ID=gene31;Target=8731753 1 480 - 1877523 gth exon 72252 72296 1 + . Parent=gene31 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene31 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene31 1877523 gth exon 72369 72803 1 + . Parent=gene31 ### 1877523 gth gene 72262 72754 1 + . ID=gene32;Target=19839622 1 421 - 1877523 gth exon 72262 72296 1 + . Parent=gene32 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene32 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene32 1877523 gth exon 72369 72754 1 + . Parent=gene32 ### 1877523 gth gene 72270 72801 0.998 + . ID=gene33;Target=19825274 1 460 - 1877523 gth exon 72270 72296 0.963 + . Parent=gene33 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene33 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene33 1877523 gth exon 72369 72801 0.998 + . Parent=gene33 ### 1877523 gth gene 72275 72752 0.872 + . ID=gene34;Target=19855736 1 420 - 1877523 gth exon 72275 72296 1 + . Parent=gene34 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene34 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene34 1877523 gth exon 72369 72752 0.872 + . Parent=gene34 ### 1877523 gth gene 72277 72753 1 + . ID=gene35;Target=8695920 1 405 - 1877523 gth exon 72277 72296 1 + . Parent=gene35 1877523 gth five_prime_cis_splice_site 72297 72298 0.995 + . Parent=gene35 1877523 gth three_prime_cis_splice_site 72367 72368 0.696 + . Parent=gene35 1877523 gth exon 72369 72753 1 + . Parent=gene35 ### 1877523 gth gene 72653 74046 0.978 - . ID=gene36;Target=2597485 1 163 - 1877523 gth exon 72653 72789 0.978 - . Parent=gene36 1877523 gth three_prime_cis_splice_site 72789 72790 0 - . Parent=gene36 1877523 gth five_prime_cis_splice_site 74020 74021 0.514 - . Parent=gene36 1877523 gth exon 74021 74046 0.615 - . Parent=gene36 ### 1877523 gth gene 72653 74920 0.919 - . ID=gene37;Target=3450080 1 166 - 1877523 gth exon 72653 72800 0.919 - . Parent=gene37 1877523 gth three_prime_cis_splice_site 72800 72801 0 - . Parent=gene37 1877523 gth five_prime_cis_splice_site 74900 74901 0.919 - . Parent=gene37 1877523 gth exon 74901 74920 0.75 - . Parent=gene37 ### 1877523 gth gene 79098 79663 0.866 - . ID=gene38;Target=19857409 11 314 - 1877523 gth exon 79098 79127 0.767 - . Parent=gene38 1877523 gth three_prime_cis_splice_site 79127 79128 0 - . Parent=gene38 1877523 gth five_prime_cis_splice_site 79240 79241 0 - . Parent=gene38 1877523 gth exon 79241 79487 0.866 - . Parent=gene38 1877523 gth three_prime_cis_splice_site 79487 79488 0.899 - . Parent=gene38 1877523 gth five_prime_cis_splice_site 79635 79636 0.999 - . Parent=gene38 1877523 gth exon 79636 79663 1 - . Parent=gene38 ### 1877523 gth gene 91050 91786 1 - . ID=gene39;Target=8735154 1 543 - 1877523 gth exon 91050 91401 1 - . Parent=gene39 1877523 gth three_prime_cis_splice_site 91401 91402 1 - . Parent=gene39 1877523 gth five_prime_cis_splice_site 91523 91524 0.917 - . Parent=gene39 1877523 gth exon 91524 91713 1 - . Parent=gene39 1877523 gth three_prime_cis_splice_site 91713 91714 0.848 - . Parent=gene39 1877523 gth five_prime_cis_splice_site 91785 91786 0.993 - . Parent=gene39 1877523 gth exon 91786 91786 1 - . Parent=gene39 ### 1877523 gth gene 93551 94053 0.957 - . ID=gene40;Target=19806050 1 401 - 1877523 gth exon 93551 93913 0.957 - . Parent=gene40 1877523 gth three_prime_cis_splice_site 93913 93914 0.992 - . Parent=gene40 1877523 gth five_prime_cis_splice_site 94016 94017 0.996 - . Parent=gene40 1877523 gth exon 94017 94053 0.919 - . Parent=gene40 ### 1877523 gth gene 93633 94384 1 - . ID=gene41;Target=19857902 1 407 - 1877523 gth exon 93633 93913 1 - . Parent=gene41 1877523 gth three_prime_cis_splice_site 93913 93914 0.992 - . Parent=gene41 1877523 gth five_prime_cis_splice_site 94016 94017 0.996 - . Parent=gene41 1877523 gth exon 94017 94124 1 - . Parent=gene41 1877523 gth three_prime_cis_splice_site 94124 94125 0.998 - . Parent=gene41 1877523 gth five_prime_cis_splice_site 94366 94367 0.994 - . Parent=gene41 1877523 gth exon 94367 94384 1 - . Parent=gene41 ### 1877523 gth gene 98857 99326 1 - . ID=gene42;Target=19836538 1 392 - 1877523 gth exon 98857 99121 1 - . Parent=gene42 1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene42 1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene42 1877523 gth exon 99200 99326 1 - . Parent=gene42 ### 1877523 gth gene 98861 99271 1 - . ID=gene43;Target=8737545 1 333 - 1877523 gth exon 98861 99121 1 - . Parent=gene43 1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene43 1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene43 1877523 gth exon 99200 99271 1 - . Parent=gene43 ### 1877523 gth gene 98878 99663 0.987 - . ID=gene44;Target=5846455 1 525 - 1877523 gth exon 98878 99121 0.996 - . Parent=gene44 1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene44 1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene44 1877523 gth exon 99200 99361 1 - . Parent=gene44 1877523 gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene44 1877523 gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene44 1877523 gth exon 99443 99511 1 - . Parent=gene44 1877523 gth three_prime_cis_splice_site 99511 99512 0.998 - . Parent=gene44 1877523 gth five_prime_cis_splice_site 99612 99613 0.999 - . Parent=gene44 1877523 gth exon 99613 99663 0.882 - . Parent=gene44 ### 1877523 gth gene 98909 99450 1 - . ID=gene45;Target=8734273 1 383 - 1877523 gth exon 98909 99121 1 - . Parent=gene45 1877523 gth three_prime_cis_splice_site 99121 99122 0.995 - . Parent=gene45 1877523 gth five_prime_cis_splice_site 99199 99200 1 - . Parent=gene45 1877523 gth exon 99200 99361 1 - . Parent=gene45 1877523 gth three_prime_cis_splice_site 99361 99362 0 - . Parent=gene45 1877523 gth five_prime_cis_splice_site 99442 99443 0.798 - . Parent=gene45 1877523 gth exon 99443 99450 1 - . Parent=gene45 ### 1877523 gth gene 104912 105793 0.887 + . ID=gene46;Target=7611662 1 549 - 1877523 gth exon 104912 104928 0.824 + . Parent=gene46 1877523 gth five_prime_cis_splice_site 104929 104930 0.881 + . Parent=gene46 1877523 gth three_prime_cis_splice_site 105008 105009 0.99 + . Parent=gene46 1877523 gth exon 105010 105228 0.863 + . Parent=gene46 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene46 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene46 1877523 gth exon 105315 105428 0.912 + . Parent=gene46 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene46 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene46 1877523 gth exon 105500 105535 1 + . Parent=gene46 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene46 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene46 1877523 gth exon 105630 105793 0.902 + . Parent=gene46 ### 1877523 gth gene 105009 105793 0.884 + . ID=gene47;Target=8734901 1 533 - 1877523 gth exon 105009 105228 0.864 + . Parent=gene47 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene47 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene47 1877523 gth exon 105315 105428 0.912 + . Parent=gene47 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene47 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene47 1877523 gth exon 105500 105535 1 + . Parent=gene47 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene47 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene47 1877523 gth exon 105630 105793 0.89 + . Parent=gene47 ### 1877523 gth gene 105069 105815 0.876 + . ID=gene48;Target=19801855 1 495 - 1877523 gth exon 105069 105228 0.831 + . Parent=gene48 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene48 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene48 1877523 gth exon 105315 105428 0.912 + . Parent=gene48 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene48 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene48 1877523 gth exon 105500 105535 1 + . Parent=gene48 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene48 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene48 1877523 gth exon 105630 105815 0.892 + . Parent=gene48 ### 1877523 gth gene 105090 105793 0.878 + . ID=gene49;Target=8695006 1 452 - 1877523 gth exon 105090 105228 0.82 + . Parent=gene49 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene49 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene49 1877523 gth exon 105315 105428 0.912 + . Parent=gene49 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene49 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene49 1877523 gth exon 105500 105535 0.972 + . Parent=gene49 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene49 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene49 1877523 gth exon 105630 105793 0.902 + . Parent=gene49 ### 1877523 gth gene 105091 105793 0.857 + . ID=gene50;Target=8702125 1 452 - 1877523 gth exon 105091 105228 0.786 + . Parent=gene50 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene50 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene50 1877523 gth exon 105315 105428 0.886 + . Parent=gene50 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene50 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene50 1877523 gth exon 105500 105535 0.972 + . Parent=gene50 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene50 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene50 1877523 gth exon 105630 105793 0.896 + . Parent=gene50 ### 1877523 gth gene 105140 105793 0.88 + . ID=gene51;Target=19825204 1 402 - 1877523 gth exon 105140 105228 0.798 + . Parent=gene51 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene51 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene51 1877523 gth exon 105315 105428 0.912 + . Parent=gene51 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene51 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene51 1877523 gth exon 105500 105535 1 + . Parent=gene51 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene51 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene51 1877523 gth exon 105630 105793 0.902 + . Parent=gene51 ### 1877523 gth gene 105170 105793 0.862 + . ID=gene52;Target=2748033 88 460 - 1877523 gth exon 105170 105228 0.686 + . Parent=gene52 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene52 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene52 1877523 gth exon 105315 105428 0.904 + . Parent=gene52 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene52 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene52 1877523 gth exon 105500 105535 1 + . Parent=gene52 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene52 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene52 1877523 gth exon 105630 105793 0.896 + . Parent=gene52 ### 1877523 gth gene 105175 105793 0.901 + . ID=gene53;Target=19835442 1 367 - 1877523 gth exon 105175 105228 0.87 + . Parent=gene53 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene53 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene53 1877523 gth exon 105315 105428 0.912 + . Parent=gene53 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene53 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene53 1877523 gth exon 105500 105535 1 + . Parent=gene53 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene53 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene53 1877523 gth exon 105630 105793 0.902 + . Parent=gene53 ### 1877523 gth gene 105189 105793 0.896 + . ID=gene54;Target=8734878 1 354 - 1877523 gth exon 105189 105228 0.875 + . Parent=gene54 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene54 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene54 1877523 gth exon 105315 105428 0.912 + . Parent=gene54 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene54 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene54 1877523 gth exon 105500 105535 1 + . Parent=gene54 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene54 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene54 1877523 gth exon 105630 105793 0.884 + . Parent=gene54 ### 1877523 gth gene 105190 105793 0.906 + . ID=gene55;Target=19823987 1 352 - 1877523 gth exon 105190 105228 0.872 + . Parent=gene55 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene55 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene55 1877523 gth exon 105315 105428 0.912 + . Parent=gene55 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene55 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene55 1877523 gth exon 105500 105535 1 + . Parent=gene55 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene55 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene55 1877523 gth exon 105630 105793 0.902 + . Parent=gene55 ### 1877523 gth gene 105199 105793 0.845 + . ID=gene56;Target=19841468 39 385 - 1877523 gth exon 105199 105228 0.833 + . Parent=gene56 1877523 gth five_prime_cis_splice_site 105229 105230 0.996 + . Parent=gene56 1877523 gth three_prime_cis_splice_site 105313 105314 0.995 + . Parent=gene56 1877523 gth exon 105315 105428 0.904 + . Parent=gene56 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene56 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene56 1877523 gth exon 105500 105535 0.972 + . Parent=gene56 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene56 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene56 1877523 gth exon 105630 105793 0.805 + . Parent=gene56 ### 1877523 gth gene 105371 105813 0.897 + . ID=gene57;Target=17325 1 277 - 1877523 gth exon 105371 105428 0.931 + . Parent=gene57 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene57 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene57 1877523 gth exon 105500 105535 0.972 + . Parent=gene57 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene57 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene57 1877523 gth exon 105630 105813 0.886 + . Parent=gene57 ### 1877523 gth gene 105394 105860 0.827 + . ID=gene58;Target=19859011 1 296 - 1877523 gth exon 105394 105428 0.971 + . Parent=gene58 1877523 gth five_prime_cis_splice_site 105429 105430 0.955 + . Parent=gene58 1877523 gth three_prime_cis_splice_site 105498 105499 0.994 + . Parent=gene58 1877523 gth exon 105500 105535 1 + . Parent=gene58 1877523 gth five_prime_cis_splice_site 105536 105537 0.957 + . Parent=gene58 1877523 gth three_prime_cis_splice_site 105628 105629 0.503 + . Parent=gene58 1877523 gth exon 105630 105860 0.827 + . Parent=gene58 ### genometools-1.5.1/testdata/Verysmall.embl000066400000000000000000000005311211610345200204730ustar00rootroot00000000000000ID sequence0 XX DE XX SQ ac 2 // ID sequence1 XX DE XX SQ nn 2 // ID sequence2 XX DE XX SQ nt 2 // genometools-1.5.1/testdata/Verysmall.fna000066400000000000000000000000171211610345200203170ustar00rootroot00000000000000> ac > nn > nt genometools-1.5.1/testdata/Verysmall.gbk000066400000000000000000000003001211610345200203110ustar00rootroot00000000000000LOCUS sequence0 DEFINITION ORIGIN 1 ac // LOCUS sequence1 DEFINITION ORIGIN 1 nn // LOCUS sequence2 DEFINITION ORIGIN 1 nt // genometools-1.5.1/testdata/addintrons.gff3000066400000000000000000000014361211610345200205750ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 # comment ctg123 . gene 1000 9000 0.500000 + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ### genometools-1.5.1/testdata/addintrons.out000066400000000000000000000022011211610345200205460ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 # comment ctg123 . gene 1000 9000 0.5 + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . intron 1501 2999 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . intron 3903 4999 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . intron 5501 6999 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . intron 1501 4999 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . intron 5501 6999 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . intron 1501 2999 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . intron 3903 4999 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . intron 5501 6999 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ### genometools-1.5.1/testdata/additional_attribute.gff3000066400000000000000000000002031211610345200226120ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 . + . ID=gene1;foo=bar seq . exon 1 1000 . + . Parent=gene1 ### genometools-1.5.1/testdata/at100K1000066400000000000000000002246461211610345200166370ustar00rootroot00000000000000>the first 100000K of at1MB AGTGGCTACGGCGGCGGTGGCGGCGATGGAAGTAGACGGATGGTGGTAGGAATGAAAGGCTAGAAGCGGC GGAGAAGTATGTGGATAAGAAATAACAAAAACTGAGGGGATCATGAAGTTCTTCGTTATATTATAGTTTT CAATCTGAATTTCAATTCCGCCGCTCGCCTTTTTCCTCTCCGCCTTTTCCGTCTCTCCGATCTGCTCCCG CCGCCGACCTTGTGATGATTATAGCTCTGAAGGTCCATACAAGGATATAAAAAAAAAAAAAAAAA ATGRAYAMTCAAAAATGGAGTMTAGGTTTCATATCTCTCGCTTTTCTCTTCATCACTTCCTCTTCAGCTG AGTTCATCATTCAACAGGTCACAAAGGGCARAGGAATAGAGTACAACAGTTCTTACAGTCTCGAGGAGAA TCTTGGAGTGACRAGAGAGTTGAGAGAAGAGCGACCATCGAGTAAGATAGTGACAATAACAAGCTTCTCA GTGATTAAAGGCAGAGGAGAACCCTATGAATCCTCTGTTTTTGAGGCTGCTGGTTACAAATGGAGATTGG TTTTGTACGTGAATGGTAATAAAAACGACGGTGGAAATGATCATATTTCCCTTTACGCAAGGATCGAAGA GACAAACTCTCTTCCATTAGGTTGGGAAGTGAATGTTGATCTCAAACTCTTTGTCCATAATGGGAAGCTA CACAAATATTTGACTGTTACAGATGGCTTARTTGAAGCGATATAACAATGCSAAAAAAGAATGGGGTTTC GGACAATTGATTCCTCNATCAACATTCTACAACGCGAACGAAGGTTACCTTTGACCAAGGACACTGGTTC CTTTTGGGTGGCYGGAAAANCCTTTATTGTTTAAACCNGSTCCACCAACMAARAAAAWWAYTTTCTWTYM MTYYTCCAACAYSYTYCCCWWCSAATGTTTTTTCCCTTNGGAAAAANACCTNCGTTTCCTCCTACCTTTG GGAAAAANAAANTTCNTTTTTACTCCCGAATGAATTTTCCCCCTTTGNAAAAACCGAATNCCTGGTTGGA CTTAGGAATTTTAACCCCCNAAAGGGGGAATGGAANGAAAGAAAAAACCCCTTTGCCCNTTCCCAATCCT TCCCTANTTTGC GTGARTGTTGATCTCAAACTCTTTGTCCATAATGGGAAGCTACACAAATATTTGACTGTTACAGATGGCT TAGTGAAGCGATATAACAATGCGAAAAAAGAATGGGGTTTCGGACAATTGATTCCTCGATCAACATTCTA CAACGCGAACGAAGGTTACCTTGACCAGGACACTGGTTCTTTTGGTGCTGAGATCTTTATTGTTAAACCG GCTCAACAACAAGAGAAAGTTACATTCATATCAAACCCTCCAAACAATGTTTTCACTTGGAAGATACTTC GTTTCTCTACCTTGGAAGATAAATTCTATTACTCCGATGATTTTCTCGTTGAAGACCGATACTGGAGACT AGGATTTAACCCGAAAGGGGATGGAGGAGGAAGACCACATGCACTTCCAATCTTCCTATTTGCTCAAGGC CATAAGGCAAATGCAGTTGCTACAAACACTTGGGGAGCGGTTAATCTGCGGTTAAAGAATCAACGAARTT CTAACCATAGACAATATWTCTGCACTTGGTACCCATTGGAAACGTTATGGTKTGGGAKTAACATATCTAC TGTTGCTGATTAACGAGCATCCAAAGGATTTTGGTGATGAGCCYTATCTTGAACTGAATGGTTAAGKCCT ATACCACTCTCTCCCTWAATTCTCCTTCTTNTCWCNACATCNCYTTRATAAAAAATTTATTGATAATTTT TTARAAACTTATTTTTKTA GTGAAGCGATACAACGATGCAAAAAAAGAGTGGGGATTCACACAATTGATTTCTCTTCCAACATTCTACA ACGCGAACGAAGGGTACYTTGTGCAGGACACAGCTTCTTTTGGTGCTGAGATCTTCATCGTTAACCCGAC AGAAAAACAAGAGAAAGTCACATTCATATCAAACCCTCCGAACAATGTTTTCACTTGGAAGATACTTCGT TTCTCTACCTTGGAAGATAAATTCTATTACTCTGATGATTTTCTCGTTGAAGACCGATACTGGAGATTAG GATTTAACCCGAAAGGATCTGGTGGAGGGAGACCACATGCACTTCCAATCTTCCTATATGCTCAAGGCCA TAAGGCAAACGCAGTTGTTACAAACACTTGGGGAGCGGTTAATCTGCGGTTAAAGAATCAACGAAGCTCC AACCACAAACAATTATATTCTGCAGCTTGGTACCCCGATTCGAAGCGATTATGGTGTGGGAGTGAACAAT ATCATATTGATGTCAGAAGCTAAAAGATGCATCMAAAGGGTATATGGTGAATGATGCCATTATCTTTTGA AACTGAAATGGTTAAGGTCTCTGTGAACAACATARTCTCCSCTTAAATATATNTCACTACTTCTTTATCC CCCGNAATAACCTTACAAAGAAAAATTGATGATTTAATTTGTTATACNACACTTTATTNATGCCTGTGAN GTAACCTTGTTTCCGCTCCCCNAATTTCCTTTTTTTTCCTGTTTTT TCAAAATATGGATAGTCACAAATGGAGTCTAGGTTTCACATTACTTGCTTTCCTCTTCATCACTTCCTCT TCCGCTGAGCTCATCATTAAACAGGTCACACAGGGCAGAGGAATAGAGTACAACAACTCTTACAGTCTCA CGTCGAATCTTGGAGTGACGACAAGAGAGTTGAGAGACGAGCGACCATCAAGTAAGATAGTGACAATCAC AAGCTTCTCTGTGATTAAGGACAGAGGAGAACCCTATGAATCATCTATTTTTGAGGCTGCCGGTTACAAA TGGAGATTAGTTTTGTACGTGAAGGGTAATCCGAAAGGCGGTATAAATAATCATATTTCACTTTACGCGA GGATAGAAGAGACAGAAACTCTTCCAAGAGGGTGGGAAGTGAATGTTGATCTCAAACTCTTTGTCCACAA TCGGAAKTTAAAGAAATATTTGTCTGTTACAGATGGAACAGTGAAGCGATACAACGATGCAAAAAAAGAG TGGGGATTCNCACAATTGATTTCTCTTCCAACATTCTACAACGCGAACGAAGGGTTCCTTGTGCCAGGAC ACARCTTCCTTTGGGTGCTGARAACTTCATCGTTAACCCGACCGAAAAACCAGAAAAAATCCCTTTCTTT TCAAACCCCCCGAAACATGTTTTTCCCTTTGGAAAAAA GGAAGTTAAAGAAATATTTGTCTGTTACAGATGGAACAGTGAAGCGATACAACGATGCAAAAAAAGAGTG GGGATTCACACAATTGATTTCTCTTCCAACATTCTACAACGCGAACGAAGGGTACCTTGTGCAGGACACA GCTTCTTTTGGTGCTGAGATCTTCATCGTTAACCCGACAGAAAAACAAGAGAAAGTCACATTCATATCAA ACCCTCCAGACAATGTTTTCACTTGGAAGATACTTCGTTTCTCTACCTTGGAAGATAAATTCTATTACTC CGATGATTTTCTCGTTGAAGACCGATACTGGAGACTAGGATTTAACCCGAAAGGGGATGGAGGAGGAAGA CCACATGCACTTCCAATCTTCCTATTTGCTCAAGGCCATAAGGCAAACGCAGTTGCTACAAACACTTGGG GAGCGGTTAATCTGCGGTTAAAGAATCAACGAAGTACTAACCATAGACAAATATATTCTGCAGCTTGGTA CCCGATTGGAAGCGGTTATGGTGTGGGAGTGAACAATATCATACTGTTAGCTGATTTAAACGATGCATCA AAAGGATATTTGGTGAATGATGCCATTATCTTTGAAGCTGAAATGGTTAAGGTCTCTATAACCAACATCG TCTCCGCTTAAATATCTGCACTTCTTTGTCTACGATCAATCAACCTTATGAATAAAGAGATATTTGATGA GTTTGTAATAAGAAAACGTTAATGTTTGTGAATTGTGAAGTTATTACTTCTGTTCTTCTGAGTTTTTTTA TTTCAATGAAAATAAAACTCTTACCGGTTT GTGAAGCGATMCMWCGATGMWMAAAAMKARTGKGGATTYRCAYRATWGATYTCTCTTCYWMYATTCTWSW MCGCGAAYGAAGGGTACCTTGTGYASGACRMWSCTTCTTTYGGTGCTGAKATCTTCATGCGWTAMCCCGA CAGAAAMACMMKAKAWAGTCWCATTCATATCMWACCCTCCRAACAATGTTTTCACTTGGAAGATACTTCG TTTCTCTACCTTGGAAGATAAATTCTATTACTCTGATGATTTTCTCGTTGAAGACCGATACTGGAGATTA GGATTTAACCCGAAAGGATCTGGTGGAGGGAGACCACATGCACTTCCAATCTTCCTATATGCTCAAGGCC ATAAGGCAAACGCAGTTGTTACAAACACTTGGGGAGCGGTTAATCTGCGGTTAAAGAATCAACGAAGCTC CAACCACAAACAATTATATTCTGCAGCTTGGTACCCGATTCGAAGCGATTATGGTGTGGGAGTGAACAAT ATAATATTGATGTCAGAGCTAAAAGATGCATCCAAAAGGGTATATGGTGAATGATGCCATTATCTTTGAA GCTGAAATGGTTAAGGTCTCTGTGACAAACATAGTCTCCGTTTAAATATCACTACTTCTTTTTCAACAAC AACCTTACGAATAAAGTGGACTTTGATGAGTTTAATTTGTTATACGACAACGTTGTTGATGCTTGTGATG TAATCGTTGTTTCTGCTCTCCGAGTTTTCGTTTTACTTTTTTTTTCATGTTTTGCTATCAATGAAATAAA GGTATAAAACTCTCTTGGTTTTAAAGT GGAAGTTAAAGAAATATTTGTCTGTTACAGATGGAACAGTGAAGCGATACAACGATGCAAAAAAAGAGTG GGGATTCACACAATTGATTTCTCTTCCAACATTCTACAACGCGAACGAAGGGTACCTTGTGCAGGACACA GCTTCTTTTGGTGCTGAGATCTTCATCGTTAACCCGACAGAAAAACAAGAGAAAGTCACATTCATATCAA ACCMTSSWRMCMRKRTYYTCACTTGGAAGATACTTCGTTTCTCTACCTTGTCACCTAAATTCAATTCATC GTACCCGGATCCTCGATTCTTTTGCTTTTTACCCTGGAAGAAATACTCATAAGCCACCTCTGTTATTTAC CCCCAATCTTCACAAGAAAAA CGTCTCCATACGTTGTTCCCGAAGACATGTCCTTGACAAAGGTATACAATCTTTTCCGGCAACTTGGGTT GCGACATCTATTCGTTGTTCCCCGTCCTTCCCGTGTGATAGGCTTGATCACCAGAAAGGATTTACTGATT GAGGAAAATGGGGAATCATCAGCAGTGGAACTCCAACAGTCAACTAGTAGGTCGGTACAGTGAGACAGCA ACGCGGATGGACGCTGCACGACCGCTTCTAGACGATCTTTTAGGTTAATAAAACAGACCAAACATATACA AGCAGTTGAAGCTGGTAGCTAAGATCTTTAGTCGGGCCAATTCTTCGTCCATACAAGGATACAAGCTTGT TCCGCATGTTGCCACCCAAATCCGGTATGGAGGATATATGATCGTCTCTTGAGATGGGATTGTGTTGTTC GCTAACCGATCTCATTCTCCGTTCACAGAGAGTAGAAAGATTATATATGTTTAAGGCTTTTGATTGTTGT AATTGTGCAATCTTTGAWTATTTTCTTGGTCCCTGTAAAATAATCCACCTTTTGATATATTTACTTGATT AACTT TCTGNTCCGTCTNANACATCGNATCAGGTGGNGNGTACAATCATCTCNCCGTTCANTAGGTGTTTACGGA TTTCNGCGGTCGTATANCTNGCNTGACTAAGGCTTTAACC GGTRAGATCTACSTTGCTGGAGGTGGTGGTGGTTCGGAKGTTGCGGCGGCGGTGGAASTAGTATGATCCG GAGTTGAATCGGTGGGAAGTTGTGACTCAATCGGCSAGGAASAGATACGGTTGCATCGGAGCAGCCGTTG ACGGAGTTTTTTATGTGATCGGTGGATTGAAAATTGGGAATGAGACCTCACGCGCGGTGGCGGCGCGTGC TTATGCGAGCTCTATGGATCTTTTCGATGTGGAGTCGCGTCAGTGGTTAAGGAGTCGTTCGGTTCCTGGC GGTGGATGTGTAGTGGCGGCGTGTGCGGCGGTTGGATATGTGTATGTGCTAACCAGTCACGCGGTGGAGC TTTCGTTTTTGGCGATTTGATGCGCGTCGTCGTGGTGGAAACACCGGGTTTGGAAAAATGGCAGAAGCTG AAAAGTCCCCCGTTACCGGCACAAGGTGCSGGTTAAGATGGAACCGGTGAAGGTTTAACCTGCGTCGGAG TGGAAGATAAAGTGGCGGTGGTTCAGGTGGTGGGATGCATTGACGATTTGCTTCGGCGGAGTGGGAGGGG TGAGAGAGGGATTAGAGAAAGCCTTGTGTTGCTGTATGATACGACGGAGGGAGAGTGGAGGAGAGCGGCG GATTTACCTGAGATGATTACACGCGCCGCCTGTGCGTGTGTGGAGTGGTAAGAGNGGAGACCACGGCGCA GGATTATGGGTACGAGAAGTTGGAAGATGCTAVCGTACGCAGGATATATTAAAGTGGGCAAAAACAATAT CATTATGATTGGTGCACATGTTTACTGTMTGAAAAGCAATAGCGT CGGGGCTTCTRAAAGACNCAATCTNATGTACTCGTACATGCTANGTNCTATCTCTTCTATAATGTCTNAT CCTTTCTGCCCTCCCACWCGTTNCCGTAGCCKCAAAWTCTCCTKTGAYATTTMCCTGMTCAGAYTGTCCT GATGGATGSGGAYGTTCACMTAGATACCAAAGCACAAGAAATTCGAAGGTGCTGGAGAAAAGGCGACCAC TTTCACTAAGAGCATTTGGCTCGAGGAAGCTGATGCGAGYGCCATATCCGTTGGTGAGGAAGTAACTTTG ATGGATTGGGGAAATGCTATCGTAAAGGAAATCMCMAAKGACGAGGAGGGTCGTGTCACTGCCTTATCTG GTGTCTTGAATCTCCAAGGTTCTGTWAAGACTACAAAGCTGAAGCTGACATGGCTTCCTGATACTAATGA ATTGGTCCATCTCRCMTTAACAGAGTTTGATTATCTAATCCCCMANAAGAAACTGGAANATGATGATGAA ATTTGCTGATTTTGCTGAATCCYMMCCCNAAAAANGAANACMTTTGGCMCTTKGGTNGATTCCCAATATT GAGAGAATCTTGAAATTGTTGGAAAATNTTTATTCCCCCTTT TCAGCTGTTTCGTTCAACGATCTAAACTATCTCAATGCTTCTTTGAATCTATTGTCGGTTTCCTTGTACT CGTCAATTTCATGTTTTTTTTG CCCTCCCNCTCCTNNTTTCTANTTNGNTTCNGNTTCTGTTATCGNGTTTTTCNCNNGGGTCTTTTNTCGN NGCCCTGGACCGGAATTCNCGNGTCGACCAACTCNTCAGATGTGGTGCTNCNCTACAATGAANCAAANNG ANTCACACTCTCGGACTNANNCTCTCCCCTCCGCTTCTGTAACCATANCNNCTCNACNTCTATGTCTCCN ATCTAACCANCTCTNNGGGTTCGAGGAGANATAAGGAGAAAAGTANGGANGGACGANTATGCTTGCCCGT TCTGTNCAGACTATTTTGATNTCNTCTCTCTNNGCNGTCACATTGATGAANATCNTCCTATGGATGCTTA AANTGGGGTNTGTCCCGTCCTGTGCGGTGAAAGTGAGCTCNGGATATGATTGCNTCNTATANCCCCNCGN CNCNGCCNATATGTTCAAGGTGACCCNGATCANGAAATCAA GTTTATCACGCCTTGCATTGATCAGAASCCCTTGCTACGGCATTGAGCCAKGCTGCCGAAGCTGTTTCTT CGGGAAATTCAGATGCAAGTGATGCCACTGCAAAAGCTGGAATCATTTTGTTGCCCAGCACACATCAACT TGACGAAGAGGTTACTGMGGAACATAGTGAGGAGGAAATGACTGAAGAGGAACCAACTCTTCTCAAGTGG CCAAATAAGCCCGGGATTCCAGATTCTGATTTGTTTGACCGTGATCAATCGTGGTTTGATGGACCTCCAG AGGGCTTCAATCTCACATTATCAAATTTCGCTGTGATGTGGGATTCACTGTTTGGCTGGGTATCATCGTC CTCTCTGGCATACATATATGGGAAGGAAGAATCTGCTCATGARGAGTTCTTATTGGTTAACGGGAAGGAG TACCCCCGGAGGATTATCATGGTAGATGGGCTTTCCTCAGARATCAAGCANACAATTGCTGGGTTGCCTT GCCAGAACTTTACCGAAAATCGTCACTCATCTCAGGGCTGCCAATANCGATATCCRATTTTAAAAA ATAGGCGANATCCCCCCCAAANGATTNCCTGATGTGAGGAACATGGGGANATCATCNTGGAATCGAGCNC NNGNAGTCNCCGGTNAAGTNGGTGGGTNNACANTCNCNCCCNNACNGACNCNGCATGACCNCTTCACTAC NANCTGTTANGTTTNTGGGACTGNTCCTACGATATACCNTCTCTTGGTGGTGGNNCCNCGAAACTCNNCT CAGGACTNGGCTCCTCGAAATTCNGATGAAGNNTGTCCCGCCTGTGACNACGNNNTTCNGGATTGGANCG ATCTANGAGNNGACACTCTGAGAATGTGATCGGTGATTNNTCGGTNCNCTGNATCACATTNCTCNCCTTN CCANTACCACTTTTNACANANTTCCCCTTCTTTTTCNCAACGNGCGATNCTNGNAGAANGNATGGNTAAC TCGGNTNCCNGCTCTGNATCGNAGATANCGTNGTCCTCTCGGGGTTCCAGAGGNTC GGTAATAAAAACGACGGTGGAAATGATCATATTTCCCTTTACGCAAGGATCGAAGAGACAAACTCTCTTC CATTAGGTTGGGAAGTGAATGTTGATCTCAAACTCTTTGTCCATAATGGGAAGCTACACAAATATTTGAC TGTTACAGATGGCTTAGTGAAGCGATATAACAATGCGAAAAAAGAATGGGGTTTCGGACAATTGATTCCT CGATCAACATTCTACAACGCGAACGAAGGTTACCTTGACCAGGACACTGGTTCTTTTGGTGCTGAGATCT TTATTGTTAAACCGGCTCAACAACAAGAGAAAGTTACATTCATATCAAACCCTCCAAACAATGTTTTCAC TTGGAAGATACTTCGTTTCTCTACCTTGGAAGATAAATTCTATTACTCCGATGATWTTCTCGTTGAAGAC CGATACTGGAGACTAGGATTTAACCCGAAAGGGGATGGAGGAGGAAGACCACATGCACTTCCAATCTTCC TATTTGCTCAAGGCCATAAGGCAAATGCAGTTGCTACAAACACTTGGGGAGCGGTTAATCTGCGGTTAAA GAATCAACGAAGTACTAACCATAGACAAATATATTCTGCAGCTTGGTACCCGATTGGAAACGGTTATGGT GTGGGAGTGAACAATATCATACTGTTAGCTGATTTAAACGATGCATCCAAAGGATATTTGGTGAATGATG CCATTATCTTTGAAGCTGAAATGGTTAAGGTCTCTATAACCAACATCGTCTCCGCTTAAATATCTGCMCT TCTTTGTCTACRAYCAATCCACCTTATGAATAAAAAAATTTTAATTTGATGAATTTGTTATAANAAAACT TTAATGTTTGTTAAATGTGAAATTT GGGACGAACCGGTGTACCACGATTTGGTTCGTCACTGTCTGGCCTACCCAAAAGCGGATGGAATCTTGGT GAATACATGGGAAGAGATGGAGCCCAAATCATTAAAGTCCCTTCAAGACCCGAAACTTTTGGGCCGGGTC GCTCGTGTACCGGTTTATCCGGTTGGTCCGTTATGCAGACCGATACAATCATCCACGACCGATCACCCGG TTTTTGATTGGTTAAACAAACAACCAAACGAGTCGGTTCTCTACATTTCCTTCGGGAGTGGTGGTTCTCT AACGGCTCAACAGTTAACCGAATTGGCGTGGGGGCTCGAGGAGAGCCAGCAACGGTTTATATGGGTGGTT CGACCGCCCGTTGACGGCTCGTCTTGCAGTGATTATTTCTCGGCTAAAGGCGGTGTAACCAAAGACAACA CGCCAGAATATCTACCAAAAANGGTTCGTGACTCSTACTTTGCGATAAAAGTTTCATGATCCCATCATGG GCACCGCAAGCTGAAATCCTAACCCATCCAGGCCGTTGGTGGGTTTTTAACACATTTGTTGGTTTGGAAC TCCACTTTGGRAAACCTTCCTTTTGCCGGCGTTCCCAWTRANAACCTTKGCCCCCTTTTCCCCCAACC CCTGTCCCATCGGGCCGTTRGTGGGTTTTTGACCCATTGCGGTTGGAGCTCGACGTTSGAAAGCGTCGTT GGCGGCGTTCCGATSATCGCATGGCCACTTTTTGCCGAGCAGAATATGAATGCGGCGTTGCTCAGCGACG AACTGGGAATCGCAGTCAGATTGGATGATCCAAAGGAGGATATTTCTAGGTGGAANATTGAGGCGTTGGT GAGGAAGGTTATGACTGAGAAGGAAGGTGAAGCGATGAGAAGGAAAGTGAAGAAGTTGAGAGACTCGGCG GAGATGTCACTGAGCATTGACGGTGGTGGTTTGGCGCACGAGTCGCTTTGCAGAGTCACCAAGGAGTGTC AACGGTTTTTGGAACGTGTCGTGGACTTGTCACGTGGTGCTTAAAAATTGTTACCGTTTTCTAACTCTTT TATTATTARTTGGTTGAATTATACGTGTCGTTCCTCTGTTAGTTGTTATAATATAATAAATCGATTTACT CTTTGTT CGTTTCTGCCACATTAAAACAGAAGAGTGCAACAATTGAAGGCATAGAAAAGTGGCCTTATGAAGCAGCT GCCATTGCTTTCGAGGCTATTCCACGTACCCTGGCTCAAAACTGTGGGGTTAACGTGATCCGTACTATGA CTGCATTGCAAGGGAAGCATGCAAATGGTGAAAACGCATGGACTGGTATTGACGGGAACACTGGTGCAAT AGCTGATATGAAAGAGAGCAAGATATGGGATTCGTACAATGTGAAGGCGCAAACTTTCAAGACGGCTATA GAAGCAGCGTGTATGCTTCTAAGGGATCGATGATATAGTGAGTGGAATCAAGAAGAAGCAAGCTCCTGGA TCTGGACCTTCAAAGCCTACCATTGAGACAGAAGGAGATGCAGACAACGAACAAATTCTTCCCGACTAAG CGAAGGGAGAAACACTTTGGTCTCAGCATAACTCAATCTCTGTTTTCACTTGTTTAATGGTTGCACTCTT TTGGCTATTATCTTCCCTTGACATATCTTTTTAATTCTGCAGTTTTGACTTNGGTGAGATAAAATTTTCC CAAGGTGGTTTTTTTTTGTTTGTTTTGGGAATATTAACTTTTTTGAATTTTCNTANTCCCTTTGTTGGTT TTTAAAATTCCAATTGTTATTGTTCTTTTTG CGCSCCTAAGAAGGAAAAGATGAGAAGAAGAAGAAGAAGAAAACTGAGGTCTGAAGAGACCTTTAATATT TTTGCGTGGTCTAGTTTACTTTGTTATCAGAAACAAAGAAAATCTTTTGTGGCGTTAGGTGTTAAGTAAG GTTTTTGTTTTGTTTGAAACTTAAAAAAAAGAACTACTCTTCGTTTTGTAAGGTTATAATATGTTTGGTT TAGTCCTTATCCCAAAAACTTGCATTTTGCC ATTTTCTTGTATGTTGGAATGGATGCCTTGGACATTGACAAGTGGAGATCCGTGAGTGACACACCGGGAA CATCGATCGCAGTGAGCTCAATCCTAATGGGTCTGGTCATGGTTGGAAGAGCAGCGTTCGTCTTTCCGTT ATCGTTTCTATCTAACTTAGCCAAGAAGAATCAAAGCGAGAAAATCAACTTTAACATGCAGGTTGTGATT TGGTGGTCTGGTCTCATGAGAGGTGCTGTATCTATGGCTCTTGCATACAACAAGTTTACAAGGGCCGGGC ACACAGATGTACGCGGGAATGCAATCATGATCACGAGTACGATAACTGTCTGTCTTTTTAGCACAGTGGT GTTTGGTATGCTGACCAAACCACTCATAAGCTACCTATTACCGCACCAGAACGCCACCACGAGCATGTTA TCTGATGACAACACCCCAAAATCCATACATATCCCTTTGTTGGACCAAGACCGTTCATTGAGCCTTCAGG GAACCACAATGTGCCTCGGCCTGACAGTATACGTGGCTTCTTGACACGGSCCCCTCSAACCGTGCATTAC TACTGGGAGACAATTTGATGACTCCTTCCTGCGACCCGTCTTTGGGAGGTCGTGGCTTTGTACCCTTTGT TTCCARGGTTCTCCAACTGAR GGTTTATTACCGATGCAATCCTATGTCTCACCACCGTATCGGGGATAAGTATAAGATATATCCAACATAT GACTTTGCTTGCCCGTTTGTTGATTCCCTTGAAGGTATAACGCATGCTCTTCGGTCTAGTGAGTATCATG ACCGAAATGCTCAGTACTTTAAAGTTCTGGAGGATATGGGACTGCGACAGGTTCAGCTTTACGAATTCAG CCGGTTAAACCTAGTTTTTACACTTCTCAGTAAGCGCAAGCTTCTCTGGTTTGTCCAAACTGGATTGGTT GACGGGTGGGATGATCCACGTTTCCCGACAGTCCAAGGAATTGTTCGTAAAGGTTTGAAAATCGAGGCTC TGATTCAATTCATTCTCGAGCAGGGGGCTTCGAAGAATCTAAATTTGATGGAATGGGACAAACTTTGGTC TATAAATAAGAGAATAATTGATCCTGTGTGCCCTARACACACTGCTGTGGTTGCAGAACGTCGTGTACTA TTTACCTTAACGGATGGTCCTGATGAACCGTTTTGTTCGCATGATACCAAAGCACAAAAAATTCCAAAGG TGCTGGAAAAAAAGGCGAACACTTTCCCTAAAAAACATTTGGCTCCAAGGAAACTGATGCCAATTGCCCA TATCCGTTGGGTGAAGGAAATTTACTTTTGAAG CTTGAATGCGGAAGCTAGGTGTATGACAAAGGCAAGAAAGCTCGGGGTTTGTACTCCAGTCCTATATGCT GTGGATACTCTGCTTCACTCTTTAACACTTGAGTACATTGAGGGGGTCTCTGTTAAGGATATTTTCCTTG AGTTTGGGACCAATGGGGTTGTTGAGGAACGTTTAGATGATGTTGCTGCTCAGATTGGGGCTGCAATTGC TAAGCTCCATGATGGTGGCTTGGCTCATGGTGATTTGACCACATCAAATATGTTAGTCAGAAGTGGAACA AATCAGCTGGTACTAATTGATTTTGGCTTGAGCGTCACATCGACCTTGCCTGAAGACAAAGCTGTTGATT TATATGTACTTGAAAGAGCCTTACTCTCAATGCATTCGTCATGCGGGAATGTGATGGATCGTATACTGAC GGCGTATARGAATCCTCAAAGCAATGGTCAGCCACGTTTAACAAAGCTCGCACAAGTGAAACACCGAAGG GAAAAAAGCGGACTATGATTGGATGAAGGCGANGAACCCAAGTTCTCCCATTGGTACTGTCCTTAAAACT TTGAACMCAAAACCCCCCAAAWCTGTCCYGTTATWATTAATCC TGGATCATTCATAAGCTTCTACTCACTGGCGTTTATGGGATGGTGTTCTTGATGTACAACTCTAGGTGGA GAGAAAAATTGCCTGCAAGGCCTGCATTCTACAACTACATAATCATCATGTTCGCCTTATACAGCCTTTA CCTAGTTGCATCTGCGTTTACCGCAAACAACGCGCATTTTGGTTTCTGGTTATATGGGATCATGAGTGTT TGCTACCACGCATTATACCTTCCTCTTCTTTACATAACGTTCCTCGCAGACTTTTTCCAGGAAGAAGATT TGAACTTGGAGAATGTATACTACTCAGAGATGAAGGATGCTGGATTTTTCGACTCTGATTGGGAATAGGA CTAGGGTAACAAACATCTTCCTCATTTTCTCAATCTGTAAATACACGTTGGGTAGGATCTCCTAGAAGTC ATGGCTGCTTTTTCCGGCTTTGGCGGGTTACATTTTARGGTCTAATCTTTTGTATGTCTGTACTTTTTCC TCATGTTTCTTTCTCTTTTATAAATCCAAAATGTCTTGTGAATCTCTTTGTTCCTTAAAKCCTGAATAAT CT CCAAAGGAAGAGGCCCAAACCGAGAAGATAGCTATTGAAACGGTTATGATTGATGAGTCAAACCTTGCGG ATTATGTAGGAAAACCGGTATTCCATGCAGAGAAGCTCTATGAGCAGACACCGGTAGGTGTTGTGATGGG TCTAGCTTGGACATCAATGGGTGGTTCAACATTGTACATAGAGACGACTGTTGTGGAGGAAGGGGAAGGT AAAGGTGGCCTGAATATAACGGGTCAGCTCGGTGATGTGATGAAAGAAAGTGCACAAATTGCTCACACAG TCGCCAGAAAGATCATGCTAGAGAAAGAACCAGAGAATCAGTTCTTTGCAAACTCCAAGCTTCATCTCCA TGTTCCTGCAGGAGCCACTCCCAAGGATGGTCCAAGTGCAGGCTGCACCATGATCACATCTTTACTATCA CTTGCCACGAAAAAACCCGTTAGGAAGGACCTTGCAATGACTGGAGAAGTCACACTAACCGGAAAAATTC TTCCTATTGGTGGGGGTGAAAGAAAAAACTATACCGGCGAAGGCGGAATCCGATTAAAACCAATAATATT TCCCNAAGCAANCCGAAAAACTTGATAACTGCNAAAAATGTNAAAAAAGGNTTATTTTCCTTCCTGGATG ATATGGAAAAACTCCAACCTGCCTTTGGTT CAGGTCCTGGTCCGGAATCCCGGGTCGACCCACGCGTCCGGAAGCGACAGTGGTAGATGGAAATGGAACA GAGACTGGACATATCATTGTGACTACTATTGGTGGTAGAAATGGCCAACCAAAACAGACAATTAGCTACA TGGCTGAGCGTGTTGTTGGTCACGGATCTTTTGGTGTTGTGTTCCAAGCGAAATGTCTTGAGACAGGAGA AACTGTTGCGATAAAGAAAGTTTTACAAGATAGGAGGTACAAGAACCGTGAGCTTCAAACCATGAGGCTA CTTGACCATCCTAATGTTGTGTCTCTGAAACATTGTTTCTTCTCAACCACTGAAAAAGATGAGCTTTACC TCAATCTTGTTCTTGAGTACGTTCCACAAACTGTTCATCGTGTTATCAAACACTACAACAAACTGAATCA GAGAATGCCTCTTATATACGTCAAACTTTACACTTATCAGATTTTTAGAGCCTTATCTTACATTCACCGA TGCATTGGTGTGTGTCATCGTGACATAAAACCTCAAAACTTGTTGGTAAATCCGCACACTCATCAAGTAA AGCTATGTGATTTTGGAAGTGCAAAAGTATTGGTAAAAGGAGAACCAAACATTTCCTACATCTGCTCGAG GTATTACAGAGCACCTGAACTTATTTTTGGAGCAACCGAGTATACGACAGCCATTGATGTCTGGTCTGCA GGATGTGTTCTAGCTGAACTATTGCTTGGACAGCCCTTGTTCCCTGGTGAGAGCGGTGTTGATCAACTTG TAGAGATTATCAAGGTCTTGGGAACCCCTACCTAAAANAAGAAATCAAGTTGCATGAACCAAACTACACG GAATTCAAATTCCCTCAGATTAAAGCTCATCCATGGCACAAGATTTTCCACAAACGCNTGCCTCCCAAAA CCTGTTGAATTGGGTCTCAAGAANTTCTTCAATACTCCTCCTAATCTACNAAATTGCCGCTCCCCAACCA TTAATTCCACCCATTCCTTGATGAATTAAGAAAANCAAA CAGCGAACACGGAGTTCCGGCATCATTTAAGGTTCCAACTGGAGTTGTCATACCTTTTGGATCGATGGAA TTAGCTTTAAAGCAAAATAATTCGGAAGAAAAGTTTGCGTCTTTGCTAGAAAAACTAGAAACCGCCAGAC CTGAGGGTGGTGAGCTAGACGACATATGTGACCAGATCCATGAAGTGATGAAAACGTTGCAAGTGCCTAA AGAAACAATCAACAGCATAAGCAAAGCGTTTCTCAAAGATGCTCGTCTCATTGTTCGTTCAAGTGCTAAC GTCGAGGACTTAGCCGGAATGTCAGCTGCAGGACTCTATGAATCAATCCCTAACGTGAGTCCCTCGGATC CTTTGGTGTTTTCAGATTCGGTTTGCCAAGTTTGGGCTTCTCTCTACACAAGAAGACTGTTCTAAGCCGT AGAGCTGCTGGTGTCTCTCAAAGAGAARCTTCAATGGCTGTTCTCGTTCAAGAAATGCTTTCGCCGGACT TATCATTCGTTCTGCACACAGTGAGTCCAGCTGATCCGGACAGTAACCTTTGTTGGAAGCCCGAAAATCG CTCCTGGGTTTAAGGTGAAAACTTTAACCTTCCGGAACCAGAAGGAACCCCCC ACCAAACCAAAGTATCTCTAAGGAATCGCTGTCCTTCGATGAGGACATACCTGCCGGTTCAATGGTTGAG GACGAAGTGACGAGTGAACTCTCTGTGCGTTTCCCCCCAAGAGGATCTCCCTCACCATCTATTCCTCAAG TTATCAGCATTGGACAGCTCATGGAATCTGCGCTTGAGGTCGCTGGTCAAGTGGTTGGGTCATCTGTCTC TACTTCTCCGCTTCCTTATGACACAATGACTAACCGCTGTGAAACCTTTGGGACTGGTACTAGAGAGAAG CTCTCAAGGTGGTTGGCCACTGAGAACCGTCAGATGAATGGGCTCTATGGAAATTCACTTGAGGAATCAT CTGCACTTGAGAAGGTAGTATAAGATGGGAACATCTATGGGAGAGAATCTGGAATGTTGCAGGATTCATG GTCCATGATGAGACTACCTCCAGCTAGTCCCTTTGACAATTTCCTCMAAGCASCAGGAGCTGGAAGATGA TTCCACTAACTTGATCATATCAATCTCTGTTAAAAAGTGTGTAATCTTGTTGTTCTTATTGGGATTTGTT AAAAAACTAACTTTTTCTAGGGGCAATCCCCAAGCTTCTCCTTATTATCTAAAATCATTAATTAATTTAT GCCTGTTTCCTTTAGGAC AGCAGGGGGCTTCGAAGAATCTAAATTTGATGGAATGGGACAAACTTTGGTCTATAAATAAGAGAATAAT TGATCCTGTGTGCCCTAGACACACTGCTGTGGTTGCAGAACGTCGTGTACTATTTACCTTAACGGATGGT CCTGATGAGCCGTTTGTTCGCATGATACCAAAGCACAAGAAATTCGAAGGTGCTGGAGAAAAGGCGACCA CTTTCACTAAGAGCATTTGGCTCGAGGAAGCTGATGCGAGTGCCATATCCGTTGGTGAGGAAGTAACTTT GATGGATTGGGGAAATGCTATCGTAAAGGAAATCACAAAGGACGAGGAGGGTCGTGTCACTGCCTTATCT GGTGTCTTGAATCTCCAAGGTTCTGTAAAGACTACAAAGCTGAAGCTGACATGGCTTCCTGATACTAATG AATTGGTCAATCTCACATTAACAGAGTTTGATTATCTAATCACCAAGAAAAAACTGGAAGATGATGATGA AGTTGCTGATTTTGTGAATCCTAACCCCAAGAAGGAACATTGGCMCTTGGTGATTCCAATATGAAGAATC TGAAATGTGGAAATKTGATTCCCCTTTGAAAAGGAAAAGGCTATTTCCSAATTTGATGTTGCCTTTTGTT CAAATCCTCCCAARCCCMCTTTGTTCTTATTCCCCCCTTCCCCAAATGGAAAAAA TCAGNGGACGATGTCAAAGATCAAAACATACCTATTGATGCAGTGCATACATCGATGATTNTCTCTTGTG TGATCNAGTTTNAANNCCNNNATGNTANNCGGATNCTCTCTTTCATCAGANTCCGGTCCGTGTAAGTAGA TGGGTCTAACCCGGANCTNTNTGGGTGGNCCAACCTTCTCCATAAAAACTGNTGTTGTGGAGGA CTCTGTCTCTTTCTTCTTCTTCTTCTTCTTCTCATTAAAAGCTGAACACAAAGATCTATTCTTTCACTAA CACATTACCAGTTTCTGCATTTGTATTATATCCTTTTCTAAAACTTTTAACCATTCTTTCTCCATTCCCA GTTCTTAGAAAGAGTCAAGAGCAATGAGGAAGCTTTTCTTGTTAGGGTTTATAGTTGCAGGACTGGTTCT TGGGAATGAGGCAAATGGGTATTTAGAGTTCAATGTCACCTAAATTCAATTCACCCATGGTACCCGGATC CTC GCCTCATGAAANAATCATGGACACTTGATTTACCTCATGGTGGACATCTTTCTCATGGTTANCANACTGA CACNAAGAAAATATCNGCTGTATCCATCTTTTTTGAGACAATGCCATACAGATTGGATGANAACACTGGT TACATTGATTATGACCAGCTAGAAAAGAGTGCCGTGCTTTTCAGACCGAAACTTATTGTTGCGGGTGCAA GTGCTTATGCTCGTCTATATGACTATGCACGTATTCGTAAGGTCTGTAACAAGCAAAAGGCAGTTATGTT GGCTGATATGGCTCATATTAGTGGGTTGGTTGCTGCTGGCGTTATTCCTTCTCCTTTTGAGTATGCAGAT GTTGTTACGACTACAACTCACAAATCTCTTCGCGGTCCTAGAGGGGCTATGATATTCTTTAGGAAGGGGT TAAAAGAGATTAACAAACAAGGGAAAGAAGTCATGTATGACTATGAAGACAGAATTAATCAAGCTGTTTT TCCTGGACTGCAAGGTGGTCCACATAATCACCTATAACGGGTCTAACAGTTGCTCTGAAACCAGCAAGAA CCCCTGAATTCAAGGCCTACCAGGAAACAATTTCTCCGTAATTGCCCCCAATTTGCCTGAAACTTTGCTT GCGAAAGGATATGATTTAGTGTCTGGAGGCACTGATAATCATTTAGTTTTGGTGAATCTGAAAAACAAGG GAATAGATGGATCAAGAGTGGAAAAAGTATTAGAATTAGTACATATTGCAGCAAACAAGAATACTGTTCC TGGGTGATGTTTCTGCCATGGGTTCCCCGGTGGGCATCCATATGGGAAACAACCAGCCCTCACATCAAGA AGATTCATTGAAGAAGATTTTGCAAAAGTTGGCGGAATATTTTGATTTAACCNTCCAAAATANCCTTAAA GAACCAAACCANAATTCTCCAAGGAACCAAAATTTGAAAANANTTTTGTTTNCCAACCAATGCCNATCCA ATTGANAAAATTACCNTTCCNAAAATTTNCAAACCTCCCTTGAAAATNGTTAAAAAAAA CCATGGTACCCGGATCCTCGAATTCTTTTGCTTTTTACCCTGGAAGAAATACTCATAAGCCACCTCTGTT ATTTACCCCCAATCTTCACAAGAAAAACTGAGRATAGGAACGTGTGGAACAGGAGGATGAGGATGANCAA GGTGAAACACAGTGTGGAGCATGTGGTGAGAGCTATGCAGCTGATGAGTTCTGGATTTGCTGTGACCTCT GTGAGATGTGGTTTCATGGAAAGTGTGTTAAGATAACACCAGCAAGAGCTGAGCACATCAAGCAATACAA GTGCCCTTCTTGCAGCAACAAAAGGGCTCGTTCCTAAATTTGTTGANCGCTCGCTTCTGTGTATCTACCT TTGCATATGATGATGAACANCTTAACTGTTTGGTTTAGATCAGATTTGTCNTATGGATTTGGTAATTTTA GGAAGA GTGGTGGAGGAAGCAGCTGGTCCCGAGGTGGTAGTAGTTCCAGAGGAAGTTCTGATGATTGGTTGATCGG TGGCAGAAGTTCATCAAGCAGCAGAGCTCCTTCGCGGGAGAGAAGTTTTGGAGGTTCATGCTTCATTTGT GGGAAATCTGGACACAGGGCAACAGATTGTCCTGATAAGAGAGGATTTTAGAGTTATCGTAGCAAATGGT TTCTGCTCTTGGGAGAAAGATCCTTGTCCTTTTTGGTGTTCTTAATGCGAATCTTTTCGTGCTTGCTTCA ACGGTTTGTTTCAGACGGTAGAGAAGCAATCAGGGAGGAGGATACATGCTTCGGACAAGGTAGAGCAGAA ATAAATAAGAGAGAGGCAATAGCAAAAGTAAAGGAGAAGGTTTTCCTCAAATTGGCATTTTCAGAGTTTG CGTGAGAAACAAGGGAAAGCTGATGGATCTTTTTATGTTAGGGTTATTATAATAGTCTTAATGATCAGTT TCCATGTTTCTAAGGTTTTGTTTGATTTAAGTTGGTTATTAATTCAGTCTACTTACACTACTTTTATTTT CATTTTTGTACSTTTTCAATTGTTATATGTTAATTCCGATCMCATTTTTTTGGACAGAATTACTATTTCT TTATAATAAAATCTTATGCC ATTTGTAATAATCTTCGTAGAAAAAATGGATTCTGATTCTTGGAGTGATCGTCTCGCATCGGCTTCAAGA AGATATCAGCTCGATTTCTTGTCTCGATCTGACAATTTCTTGGGGTTTGAGGAGATAGAAGGAGAAGATG ACTTCAGGGAGGAGTATGCTTGCCCGTTCTGTTCAGACTATTTTGATATCGTCTCTCTATGCTGTCACAT TGATGAAGATCATCCTATGGATGCAAAAAATGGGGTATGTCCCGTTTGTGCGGTGAAAGTGAGCTCTGAT ATGATTGCTCATATAACCCTACAACATGCAAATATGTTCAAGGTGACGCGGAAAAGGAAATCAAGAAGAT GCGGGGCTCAATCCATGCTATCGATCTTGAAGAGAGAGTTTCCTGATGGAAATTTTCAGAGCCTATTTGA AGGAACATCACGTGCTGTATCCTCTTCTTCTGCCAGTATAGCTGCTGATCCTTTACTGTCTTCATTCATT TCACCAATGGCTGATGACTTTTTCATTTCTGAATCAAGTCTATGTTGCANAACACCAATTTCTGCCCCAG AAAAACATTGGAATCCCAAATTTTGCCCTGAAAAGGGAAATGTTTGAAAAAAACCATTTCTCCTTTT ATAAATATGGGTAATATATCTATCTTGCTTCTACTCTCTCTTTTCACTTTTTCTCTGTGTCTATTTGTCT CTCCGTAAGAAACATTATGCCTTCATCTGATTCCACGATGATGAAGAAAGGAACAAAGCGCAAAATCGAA ATAAAGAAACGAGAAACCAAAGAGCAACGAGCCGTGACTTGCTCTAAACGTCGTCAAACTGTTTTTTCCA AAGCCGCCGATCTCTGTCTTAACTCCGGTGCCAACATCGCCGTCTTCGTAACCTCTCCCTCCGATAGTTC CGATGTTGTCTATTCCTTCTCCGGTTACTCCTCTGCCTACGAAATCGCTGATTGTCACCTAAATTCAATT CACCCATGGTACCCGGATCCTCGAA AAGTGTCGAACAAATACTACTTAGGTCCAGCTCCATTGGAAGAAATGGCGAGGCAAATCGCTACGGCTTC GGGACCTTGTGGGAACAACCGAGAGTATCTTTTCAAGCTAGAGAAAGCAATGTTCGACATTGAGCATGAG GAAGAGTATGTGATTGAGTTAGCGAATGAGGTTAGGAAGCAACTCGATTTACCGGAGGAAGTGAAGGCAT TGTTGAAGCCTATTGTTTCTCATGTATCCGTCAAGTCTCAAGCTCATGTTTCCACTCGTCAACGGGTCTT TGCATCATGAAGACAGCAAAAGTTATGGAGCTAACTTAAAAAAGCATTGTGGTGACGAGGCTAATGTTAA CTCTTTATCTTTCAGCTTAATATTTGATCACATCTTGACCTTGAGATGTTTTGTTTTGCTCTGCATTTAT TGAGAATTCATAACATTGTATGATATGAGATGCAATTTATGAGAATAATAACCGATCTTTAGCTCTGCC CGTTCTTTCTCTCGCAAACCCAAATTCTCTCAGCGCCGGTCAAATACTTGTCTCTCTCTCTCTCTCTCTT TCACTCTTGTCTTGTCTCCTTCGAAGCTGTTTGTTCTGTAAGAAAGATGGAAGCAGGTGGCGCGTACAAT CCACGCACTGTTGAAGAGGTGTTTAGGGATTTTAAGGGTCGTAGAGCTGGCATGATTAAGGCTTTAACCA CTGATGTTCAGGAGTTTTTCCGACTTTGTGATCCCGAAAAGGAGAACCTTTGCCTTTACGGACATCCAAA TGAGCACTGGGAAGTGAATTTGCCAGCTGAAGAGGTTCCTCCTGAGCTCCCAGAGCCTGTCTTGGGTATC AATTTTGCCAGAGACGGGATGGCGGAAAAGGATTGGTTGTCCCTTGTTGCTGTCCACAGTGATGCTTGGC TTCTTGCTGTTGCTTTCTTTTTTGGAGCCAGGTTTGGATTTGACAAAGCTGATAGGAAGAGGCTTTTCAA TATGGTGAATGACCTCCCAACAATCTTTGAGGTTGTAGCTGGCACTGCTAAGAAACAAGGAAAAGATAAG TCCTCTGTTTCCAACAACAGCAGCAACAGATCCAAATCAAGCTCCAAGCGAGGATCTGAATCCCGTGCCA AGTTCTCAAAGCCGGAGCCGAAAGATGATGAGGAGGAGGAAGAGGAAGGTGTGGAAGAGGAGGATGAGGA TGAGCAAGGTGAAACACAGTGTGGAGCATGTGGTGAGAGCTATGCAGCTGATGAGTTCTGGATTTGCTGT GACCTCTGTGAGATGTGGTTTCATGGAAAGTGTGTTAAGATAACACCAGCAAGAGCTGAGCACATCAAGC AATACAAGTGCCCTTCTTGCAGCAACAAAAGGGCTCGTTCCTAAATTTGTTGACCGCTCGCTTCTGTGTA TCTACCTTTGCATATGATGATGAACAGCTTAACTGTTTGGTTTAGATCAGATTTGTCATATGGATTTGGT AATTTAGGAAGACATTTTAGTTTTTTCCTTGTTACATTTTTGGGCGAATTGAAAGGGATAACTCCTTTGT TTTAAGGGGGTTAATGGAACCTTTTGGCCCCCGTTTTTAAWAGTTTTGGTTT GTGAATGTTGATCTCAAACTCTTTGTCCATAATGGGAAGCTACACAAATATTTGACTGTTACAGATGGAA CAGTGAAGCGATACAACGATGCWAAAAAAGAGTGGGGATTCACACAATTGATTTCTCTTCCAACATTCTA CAACGCGAACGAAGGGTACCTTGTGCAGGACACAGCTTCTTTTGGTGCTGAGATCTTCATCGTTAACCCG ACAGAAAAACAAGAGAAAGTCACATTCATATCAAACCCTCCAAACAATGTTTTCACTTGGAAGATACTTC GTTTCTCTACCTTGGAAGATAAATTCTATTACTCTGATGATTTTCTYGTTGGAGACCGATACTGGAGACT AGGATTTAACCCGAAAGGATCTGGTGGAGGAAGACCACATGCACTTCCAATCTTCCTATATGCTCAAGGC CATAAGGCAAACGCAGTTGTTACAAACACTTGGGGAGCGGTTAATCTGCGGTTAAAGAATCAACGAAGCT CCAACCACAAACAATTATATTCTGCAGCTTGGTACCCGATTCGAAGCGATTATGGTGTGGGAGTGAACAA TATAATATTGATGTCAGAGCTAAAAGATGCATCAAAAGGGTATATGGTGAATGATGCCATTATCTTTGAA GCTGAAATGGTTAAGGTCTCTGTGACAAACATAGTCTCCGTTTAAATATCACTACTTCTTTTTCAACAAC AACCTTACGAATAAAGTGGACTTTGATGAGTTTAATTTGTTATACGACAACGTTGTTGATGCTTGTGATG TWATCGTTGTTTCTGCTCTCCGAGTTTTCGTTTTACTTTTTTTTTCATGTTTTGCTATCCAATGAAAATA AAAGGTTTAAAACTCTCCTTTGGTTTTTAAAAGT GGCTGAGGAGTACAAGAACAACGTTCCCGAGCACGAGACACCAACGGTCGCAACAGAGGAATCACCAGCG ACGACAACAGAGGTTACGGATCGTGGATTGTTTGATTTCTTGGGGAAGAAGGAAGAGGAAGTGAAACCTC AAGAGACAACGACGCTGAAGATTGAGGCGATGGTGAGGAAGGTTATGGCTGAGGACGAAGGTGAAGAGAT GAGAAGGAAAGTGAAGAAGTTGAGAGACACGGCGGAGATGTCACTTAGTATTCACGGTGGTGGTTCGGCG CATGAGTCGCTTTGCAGAGTCACGAAGGAGTGTCAACGGTTTTTGGAATGTGTCGGGGACTTGGGACGTG GTGCTTAGTAATGGTTACTGTTTTCTAGCTCTTTAGTGGTTGAATTTACTTGTCGTTTCTTAATGTGTAT TTTTCATTGTAATAGAATAATCGATGTTTTGTAATATATTAATGTATTTGATATTTCTCAACTAATTTCC ATTGTAATATTG GGCGAGGGAATGGAGAGTTGCTGTCGGAGCGTCATAGCTTCAAGGACGTTTCATCTGCGGTCAAGTGGCC GTCTATTTCCCTCTCTTAGCTTAACTCATCTCAAGGGCAAGCTATCTCTCTCCATCAACTCGTTTTCCTC CAAGATTCAGTCTCATGCTCTCCGAGGAGTTGGTATAGGCGAGTCAGATAAGAAAAATCCCCTGCCGCGA GGGGCCGGAGAAGGAGTCAAGGAAGATGCGAGGAGTAAGCTGCTTCATGTAGTTTTGGTCTCTCCTCAGA TTCCTGGGAATACAGGTTGCATTGCAAGAACATGTGCTGCCTCAGCTGTTGGTCTGCATTTAGTCGGGCC ATTAGGTTTTCAAGTGGATGACGCCAGAGTTAAGCGAGCTGGTTTGGATTATTGGCCCTTTGTGGTTGTC AAAGCGCATAGCTCATGGGCTGAATTTCAAGAATATTTCAGGCTTCAGGAAGGGANAAAAAACCAATGAT ANCTTTTACCANNAAGAAGAAACAAGGATACTTTC ATTTGTAATAATCTTCGTAGAAAAAATGGATTCTGATTCTTGGAGTGATCGTCTCGCATCGGCTTCAAGA AGATATCAGCTCGATTTCTTGTCTCGATCTGACAATTTCTTGGGGTTTGAGGAGATAGAAGGAGAAGATG ACTTCAGGGAGGAGTATGCTTGCCCGTTCTGTTCAGACTATTTTGATATCGTCTCTCTATGCTGTCACCT AAATTCAATTCACCCATGGTACCCGGATCCTCGAATTCAGCTTGGACTTAACCAGGCTGAACTTGCTCAA AAGGTGGGGACTACCCACCAAA AAAACAACGCGCATTTTGGTTTCTGGTTATATGGGATCATGAGTGTTTGCTACCACGCATTATACCTTCC TCTTCTTTACATAACGTTCCTCGCAGACTTTTTC AGTTTTTGATCAACGAGTTTAACCGTTGTTCTTATGAGATTCCTCATAATTGGTTGTTACTCGACTCGCT CCCACTCGCTAGAGAGAACATGAAGTCTGTAGAGCCAACGGTTAAGCTAAGTTCATCGTTGGAAGCGCTT GCTGACTACTATAGTCTTACAAGGGAGGGTGATGCTCACAGGGCCTTGTCAGATGTGTTACTCTTATCTA AGGTGTTCCAGAAACTCACCATTGATCTCAAGCTCTCACTCTCTGATCTCGTCCTTCGCTGTCACACTGC ATCTGATATCAGTGCTGCCATGGCCAAGAACAAGAAGGCCTGAAACATTTTAGACATAGCTATAAGCTTA TTTTGGGATATTCATCTCTCATTCTATTGTTAATGTACCTAACTCTGAAATTATGTAACCGATTATTTAA TCTGATCTTAAAATCAAAAAAAAAAAAAA AACTNNTCCCAAAGGTGGGGACTACNNAGCANCCCTANTGCTNGACANNTCNTGNATNCCTCTNCNGCTA AGTTCGGGCTNCCTNACGTCCCAACGCGGCGCAAGAATTAATTANAGCACTTNTNNCAGTCTCCATNACA ATCTNGGAGTGATGCCANACTTGACAGGTCANCGACCNCCGACTACGATNGTCACCATNCNCNGCCTCNC AGNGATTACANGCTNAGGATAACCCGGTGNNACCNCNGTTTCGNAGCTGCTGNTCACTNGNNGAGATAGG TNNTGTGGATNATTNGTA GGACTCGAGCAGAGCCAGCAACGGTTCGTATGGGTGGTTCGACCACCGGTCGACGGTTCGTGTTGTAGCG AGTATGTCTCGGCTAACGGTGGTGGAACCGAAGACAACACGCCAGAGTATCTACCGGAAGGGTTCGTGAG TCGTACTAGTGATAGAGGTTTCGTGGTCCCCTCATGGGCCCCACAAGCTGAAATCCTGTCCCATCGGGCC GTTGGTGGGTTTTTGACCCATTGCGGTTGGAGCTCGACGTTGGAAAGCGTCGTTGGCGGCGTTCCGATGA TCGCATGGCCACTTTTTGCCGAGCAGAATATGAATGCGGCGTTGCTCAGCGACGAACTGGGAATCGCCGT CNGATTGGATGATCCAAAGGAGGATATTTCTANGTGGAANATTGAAGCGTTGGTGAAGAANGTTATGACT GAAAAGGAANGTGAANCGATGAAAANGAAAGTGAAAAAATTTGAAANACTCNGCGGANATGTCACTGAAC CATTGACNGTGGGTGGTTTGGCGCCCCAAATCCCCTTTTGCCNNAATTCCCCCAAGGAATTTTCCACCGG TTTTTTGGAAACNTTTTCCTTGGAACTTGTTCCCCTTTGTTGCCTTAAAAAAA CACAAATGGAGTCTAGGTTTCACATTACTTGCTTTCCTCTTCATCACTTCCTCTTCCGCTGAGCTCATCA TTAAACAGGTCACACAGGGCAGAGGAATAGAGTACAACAACTCTTACAGTCTCACGTCGAATCTTGGAGT GACGACAAGAGAGTTGAGAGACGAGCGACCATCAAGTAAGATAGTGACAATCACAAGCTTCTCTGTGATT AAGGACAGAGGAGAACCCTATGAATCATCTATTTTTGAGGCTGCCGGTTACAAATGGAGATTANTTTTGT ACGTGAAGGGTAATCCGAAAGGCGGTATANATAATCATATTTCACTTTACGCGAGGATAGAAGAGACAGA AACTCTTCCAAGAAGGTGGGAAGTGAATGTTGATCTCAAACTCTTTGTCCACAATCGGAAGTNAAAGAAT ATTGTCTGTTACAGATGGACATGAANCGATCCACNATGCNAAAAAAGATGGGGATCCACATTGATTCTCT CCACATCTCACCGAAGAAGGTACTTTCAGACCACTCTTTGGTGCTGANACTCTCNTTACCGACGAAACAG AAATCCTTCTTCNACCNCCNAAANTTCCTGGAGACTCTTCCCNCTGGAGAATCATANCGAGATTCTNTGA ACGAACGGAACAGATACCNAGGACGGTGAGAAACATNCTCACTCTTTTCCAGCTAGGAACCTTTTCANNT TGGGACGTNCCCCGTNAGACCCAACCCCCCCCTTNTCC ACCAGGGGGCATNCAAAAATCTAAATTAGATNTGAATGGGACAGTCTTTNGTCAATAATNAAGATAATCA AGAGATCCTGTGTGCCCTAGTACACCCTGCTGTAGNTGCCTAACGTCCATGTACTATGTTACGTGTAACT GATGGGTCTGATGAGCCGTTTGTNCGGTGGTATCCCAATTCTCAATNAAATACGAATGTGCTGGAGAA GACGAAAGCAATCAGAAACTCAGGTGAATCAGAAGCATGATTCGAGTTACGAAACCAAAAGCGATCATCG AATCACTGAGTTACCATCTTATCCAAAGATGCTCCGCAAGTGGAACTCCTAAAGGAAAAGCAAAGCTGAA GACAGGTCAGCCATTGAAGCGTAACAAACTCTCCATCAAGAAAGGTGGTGGCGGCGGCGGAGCACCTGTT GAAGGAGAGGAAGCAGTTAAAGGAAAAGGTAGAATTTCCGATGAGAAGCAGAAACTCTACGAGCAATGCT TAAACGCTCCTTGTCCTGTTCGCTACTTGACCCCCCAAGAGATCGAGCGTGAGGCGCAACGTGAGAAGCT AGGTTTGATTAGTAAAGAGAACAACGAGATATGGAGATCCAGAAGAAAGGAGGAGTATGCTTGCCCGTTC TGTTCAGACTATTTTGATATCGTCTCTCTATGCTGTCCCTAAATTCCATTCACCCATGGTACCCGGACCT CNAATTCACTTGGACTTAACCAGGCTGACTTGCTCCAAAGGTGGGGATCCCCAC CAAATTCTCTCCGTGTTTCCTTCTGCTTCAGGTGATATTTTAACAAANTTCTTANTACAATGGGATCTGT TGATGCTGCTAATGGAANTGGGAAAAAACCTACAGTTATATTTGTTCTTGGTGGTCCAGGAANTGGAAAA GGTACCCAGTGTGCTTATATTGTTGAACATTATGGTTACACACATCTGANTGCTGGANATCTTCTTAAAG CTGANATTAAATCAGAACTATGATCCAGAATATGATTAAAGAGGGGAAGATTGTACCTTCTGAGGTTACT ATCAAGCTTCTACAGAAAGCTATTCAGGAAAACGGGAATGACAAGTTCCTCATTGATGGTTTCCCTCGTA ATGAGGAAAACCGAGCAGCATTTGAAAAAGTTACTGAGATTGAACCAAAGTTTGTCTTATTCTTCGATTG TCCTGAGGAAGANATGGAGAANCGCCTGTTGGGCCGAAACCAGGGGAGAAAAGATGACAATATTGAAACT ATNANGAANCGCTTTAAGGTGTTTCTTGAATCTANCTTACCANTGATTCNTTACTACCAAACCTAAGGGG AAANTTAGGAAGANTAATTGCTGCCAAACCCCTTTGAAACTTTCTTCCAAGAANGTNAAAGCANTTTTTC CNCCCGAAACTNAAAAAGGTTA TGGGGCNACCANCAANCTAANGAAGATCGAATTGGACACACTCNCGTCTATCACGCCAACANCNCTGCAT CTCTGTCTGCCCNATACGACTGCACGTG GGCTGAAGCAGCGAGAAGACAAGGTGGTGGGAGACCATTACCGCCACCTCCGAGAGGCGTTAACCAACAA CCTCCTCGCCCTAAACCTGAACCTGTCGATCGTGAAAAGACATGTCCCCTTCTTCTTCGTGTTTTCACCA AGAGTGGTGGTCATCATACTAGTGAAGATTATGCTGTGAGAGGCAAAGAACCAAAGGATGAAGTTCAAAT CTACACTTGGAAAGATGCCAGTCTTCGCGAGCTAACAGATTTGGTTAAAGAAGTTTCTGTANCAGCTAGG AGAAGGAATGCTAGATTGTCTTTTGCGTTTGTTTATCCTAACAATAAAGGTGGCTATAATGTNANAAAAG TTGGGGAGACGATGGCTTATCCNAACCGAAAACAACCANATGACANTAAAACNCTTTCCCAACTTCCGTT TGAGATTGGAGATTATCTGGATGTGGCAATTTATTANGAGGTTTCTGTTTCTTGTTAAGTGGGATTTGGG TGCGTGCACCATGGAAGAAGTACACATTCNTATGGTTGTATCATCTTAAACTTCGTTTANACATGTTTGT NTTTTTT GAGGAATTTTGCCAACATACAGTTACAACCATTTGGCATTACCATGGAGGATGCGTTGTGGGCAGAGTGG TCGATGGGGATTATAAAGTTATTGGTATCGACCGGCTTAGAGTCATTGATATGTCGACCGTTGGTTATTG TCCCGGGACAAATCCTCAAGCCACGGTTATGATGCTTGGCAGGTATATGGGTGTGAAGATCTTGAGAGAG AGACTCACCAAGAAGTAGGGTTTTGAATCGGATCAGGGGTTTTGGGAAAACGTTATATTAAAAATGAAAT GAATCAAGATATTACTAATCGATGTTATTAATAGCTGAATATGTATTGTTCTTGGTAATTTCTGTTTGGT ACTTATTATTAGACCAAACTGAGATGTATACGGAAATATATGTATAGACTCATTCCCAATTTTCAAAAAA AAAAAAA TTTNGGNGGNCCTNGTAAGGAATTCNTGGGTCGACCCACTCNTCCGATTTGTAATAATCTTCGTAGAAAA AATGGATTCTGATTCTTGGAGTGATCGTCTCGCATCNGCTTCAAAAATATATCAGCTCGATTTCTTGTCT CGATCTGACAATTTCTTGGGGTTTGAGGAGATANAAGGAGAAGATGACTTCAGGGAGGANTATGCCATGG TACCCGGATCCTC GGACGAACCGGTGTACCACGATTTGGTTCGTCACTGTCTGGCCTACCCAAAAGCGGATGGAATCTTGGTG AATACATGGGAAGAGAATAGTTCAGGGAGGAGTTAGACTANCCATGATACTAAACCGGGTTTTTAGTGAC GATCATGCTATTGCTGGTGTTGCTGCCACTTGAACCAAACCCGACATACCGGGTCATCAAAGCATTTGAT TAAGAGATTATTTGATACATTCACAAAATTAATTAAGGCTGATCAGACATTCTTTTCTTTTAGTAGCTTT ATCTATGTGACAGCTAATGCCTGTGGACTGCTTTGTTTAGAAGTGTTTAGCATTAGATCATATGCTAATT CAATGTTATTAAGTCATCGTATGATCGTTTTAG GCAAGAGCTTTGATAAACTATCGTATCAAGGAAAACATTGGCACAGGAAGCTCCTCGAGTGCCCCAGTTC CATTTGCAAAGAAGTTCTTTATGCAGAACCTTAGACCAACAAGTCCACAGCCTTCTCCTGCAACCACATC GAGAATCTTACCCTTTATTTGCCCAAAACAACCTTCCAGAAGCAGCANATCATCCTTAGCAGCAACTTCC GGTATTGACAGAATTATGGCAGCAGCCTTGGAAAGCCGCAGCTACCAGCGGCCTCAGCAGAGATTTGCAA ATCCGCCTTATGTTCCTATGAGGCAATTTAGATCGCAATGCCATGGGATGGCTCCACCTGTCNCAATCAG AACCGCTGTACCGGTCTTCTCTGCACCTCCAATGCCTCCTCCACCATGTACAAACAACACTCAGCTACCT TCTTCTGTGTATGTCCCATCGCTGATGCGAACTGCACCACCTGTGANGATCGCGCCGCCTGTCACAATCA GAACCGCGGTGCCCGTATTTGCTTCTGCGCCACCGGTTAGAATTANAACCGCTGTGAAGCCCACAGTTGA AGGCAGGAGAAAACCCGCNTATCATCNNTCCCAGAAAAAGGAGAATTATNCCCNGTCTTGGCCTGATANT CTTGAAAATT AGCTCGTCAATCAATGGCGTCGTCTCTATCTCCACCGGAAGAAGCTTCGTATCACCACCGTCATACCAAA AGGTACACCTCCTCCGCTTCCTCCGCTTCCTCCACCACCAACGGAACCGTCGAATCATCGGTTTCCGATT TCGTCANACGTCCCAAAATCTCTCATCCGAATTACATATCAAGTTCCGAGATCGAATCAGAGTTTTCTCA TCACGATCCAGATTTCGCAAGAATCNACAACGGTAGTTTTGGTTGTTGTCCGTCATCAATCCTAGCTTTA CAACGAGATTGGCAGCTCCGGTTCCTTCGTCAACCGGATCGATTCTATTTCGACGAACTCNANCCANAAA TCTCCGATTCTAGATCTGTAATCNAACGGTTAATAAACGCCGAGCATGGCGATGAAGTCTCGATCGTCGA TAACGCAACAACCGCAGCTTGCAATCGTTCTTCACAAACCCCTTGGGCTTTTTCCTTGAAGGTCGGTTCG ATAAAAGGCGNANGCGGTGGTTATGCTTCATTAAGCTTATGGGCTCTGTTGAAAAAAA AAGAGTATTCTAAAAGCAACCTTTTCTTGGTGGGGAAGTCACCGGAAGGTTCTGTAGCGTCAGGGATAAA CGTAAGAAGCGACACGCCTGAGCTTGGACCGATCGGGAATTTGTTAACGGAAAGCGAAAGTGTTTCGACG GTGGCATCAGTGTTGGTGGTGCAACAGTATATAGCAAGCCGTCCGGTCGGAATTTCGAAGAACGTCACGA CTGAAGAGTCTCAAGGAACAAAGTTGAAAGACTTTGTAGCAACAATGCAATCAAATGAGAAATTACAGTC AGAGATGTCAAAGCTCCGTGAGATGGTAGAAGAATATGCTAAGCAATTCCCAACGATTGGGTTCGAGAAA GAGACGATGAGATACCNNGAGTAGTTTTCATCGTGTGGATTGACACGTTTCCCCATCTCTGANATGCTTT AGTGATCATGGACCANAGGCGCCACCGATGGTCTGAAGTATCGCTGAAACTAAAGTTGAACTAAAAAAAT CGCACTCCAATGTTTGTCTCTTACCCTTTCCCTTTTGTCTCTCAAATTTTTATCTTTGGCTT GTCGGCTCGTTCTGCGATCACNNAGCAAAAGCTGGCTCGATCCTTTGGGGAAAGTCTGATTGGTGCCTCN CGTTCGGNGGTTTCGACTCNAGGACCGGCGATTCGGTNCTTCNCTGACGAGANNGGTCGTGTGCTCANCG GANAGGAACNCGCGANACANAGCATGTCTATNCCANAAATGGAGAGGGANNGACTGGAGAACAAGAGGAA ACTCGAGCCAGATANGCTANATGGTGAGAAAGGANGTGCCCACAANAANCCTGACACCAGCNAGCCATGA GTTTATCACTCACAGTATACNTGAANCCTGTCNTAAGGCAAGCAGTAGTNAAAAACAATAATGCCTTTGA CCTGGTTTCTCTCTTGGTATGAGAGATCTTGTACTTGTNCAGAGATCTTTGTCCNTCTGACGTGTGTGTT NGTNTGTTCTAANAAATCAANTTTNCATAATCC ATTTCGATTCTCTGTAATTAAAGACAAAATTGGAATAGAGGAGACATTGTCTCTTTGATTCTTGAGCTTA TTTGGGGGAGAGAAAGAGAGAGCGAGAGGATCTGATGTGTATCTCAATCTCGCAAGTCTCTAGATTGAGA ATCCATTCATTTGGAAGTTCTTGCTGTGAGCGTGTTCATGGATGGATCAAGAACAGCTCTAGCTTGAAGC TGCTTGATGTTAGAGCTTCTTCTGTTGATGGTAAAGCAAGATGGATCAGACGTAACGTGAGTACAACTAC ACAAGGTAGTAGAAGCAACACTAANANCAGTGTGTTGGGAGGAACAGTTCCTGTTACCAGGGATTATAGA TNAAGAGAGTANAACCNAGGTACAGCCTTTTGGTAATCTTCAGCAACGGCTTGCGCNAGATAAAGATCTG TCTAAGCTCCTCNCGGTTTATAGTCTCTGATCTTTGAAACAACTGGGTTTGCATCNGGAAAAATGAGCNG ATAATTTGAAATTTGCCANCTCCGGAATNTAACTTNGGTGGGTNGGGGTTCNACCACCATTTTCAAAANC TCNTTGTTCCACCCCCGGGGGTGTTTNGTTTCCCC AGGNTCCTCTACGATCGACCTGACTANNCTACNNCTGCNTGCGACATCTTTTNNCTTCTCTAATGTNGCC TACANNTNTNCCNGACNTGGTGGTCNGANCCTCAACTCCAANCNNGACANCTNNANGNTGAACTGGTNCC ACGTGTGAGGACTATCCACCAATGGACCGATATCAAAGAAATGAAGGCGATACAAGTCCACCAATGGACC GATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGAAATGAAGGCGATACAAG TCGACCAATGGATCGATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGAAAT GAAGGCCCNGATATCTGAAAAGCATAATAAATGAATCAATATCTAAAATCTGGTGTTTTTCTCTCTTTCT TCTTCCCAACAATGATTGAAAAACTCTTTCTTGTTATGAATAAAGATGGATGCCCATTATAAGGGCCATC NTCTAAGCCCATCATCTANATGTTTCTAGGGTTTTACCCTTTCCTTGTTCTCCTATATAAAGAACCTTTA TCTCATGGATACCNCTCCTTCTCT CAAAGCGTTCTAAAAGAATTTCAAAGAAGAAGTGAAAATGGAAACCACTGCTTATAACACAACATCACGA ATTGGAAACTGGTCATCGGCTATTTCTCGACCTCTACAANCATGTGGATCTTTCAAGTGCCAATTACCAC CACGAANAGGTGTTATTGTAGCTGANCTTCGAAACTCAAACTTCCGATGGAGGAAAGCAACGACAACAAG CAGAGGAAATGTTGCAGCNGAGGCAGTTAAAATTCCTACGTCAGTACCAGTAAGAGTGGCGCGTGAGCTA GCTCAAGCAGGATACCGCTATCTCGACGTGAGGACACCAGACGAATTCAGCATCGGACATCCGACTAGAG CCATCAACGTACCTTACATGTNCAGAGTCGGATCANGAATGGTTAANAACCCGAGTTTTCTAAGACAGGT CTCGTCCCACTTCAGGGAAACACGATGAAATCATAATCNGTTGTGAGANCNGTCCAATGTCTTTATGGNC TCACTGATCTTCTCCCTGCTGGCTTCNCGGGGANCACNGACATTGCTGGANGATACTCCCTGGACAAAAA TGACTGCC AGACGACTTTCBACTGAATATCTAGCTAGCTCACACTCTAGCTGTAACTGTGTTTATTCTCACTAGCTAA TAATTAGATATTATATATTGAGTTGGTTTAATTTTGCTAGTAAAGGATGGACTGATAGGGTTTGATCAAT GGGACAAGAGAGCCACTAAGGTGAAGGGACATGACTTCATTGGTGGAGCCAACAAGCTTGCCTCCGACAA AGACAGCTGGAACCGCCGTGGAACAGCCGAGCCGGAGAAGAGCCTTCTCGATCTCACGGCAGTCCGGGTC GTTGTCGATCTCGTGGATGGTTGGTTGAACCCTAAGGTCACGGAACAGGATCTGAACGGCGTAMAGAAGA ACAACATGAGCTCTTCGTGAAGATCACCACTCCTTTCTCTGAAGACATTCTCATCACTTTGTCCATGAYC CTCAGAAGTCTGAAGATCTGATGATGGCGAGGGGTTWAAACTTTAGCGTTTTGA CACGAAAGTCTTACGCGTCTCCTTGAAGATGCGAAATCTATTATTGAGAAATATTGGAAACTCAGATGGA GCAGACACGTTTGCAGGAAGTACAGGTACATCAAAAAACTCGAATCGATAGAACTTGAATTAGTAAGGGT AGCACGTGAGATACAAGTCCACCAATGGACCGATATCAAAGAAATGAAGGCGATACAAGTCCACCAATGG ACCGATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGAAATGAAGGCGATAC AAGTCGACCAATGGATCGATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGA AATGAAGGCCAGATATCTGAAAAGCATAATAAATGAATCAATATCTAAAATCTGGTGTTTTTCTCTCTTT CTTCTTCCCCACAATGATTGAAAAACTCTTCTTGTTATGAATAAAGATGGATGCCCATTTATAAGGGCCA TCATCTAAGCCCATCATCTAGATTTTT CACGAAAGTCTTACGCGTCTCCTTGAAGATGCGAAATCTATTATTGAGAAATATTGGAAACTCAGATGGA GCAGACACGTTTGCAGGAAGTACAGGTACATCAAAAAACTCGAATCGATAGAACTTGAATTAGTAAGGGT AGCACGTGAGATACAAGTCCACCAATGGACCGATATCAAAGAAATGAAGGCGATACAAGTCCACCAATGG ACCGATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGAAATGAAGGCGATAC AAGTCGACCAATGGATCGATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGA AATGAAGGCCAGATATCTGAAAAGCATAATAAATGAATCAATATCTAAAATCTGGTGTTTTTCTCTCTTT CTTCTTCCCCACAATGATTGAAAAACTCTTCTTGTTATGAATAAAGATGGATGCCCATTTATAAGGGCCA TCATCTAAGCCCATCATCTAGATTTTTCTAGGGGTTTTACCCCTTCCCTTGTTCCCCCTATATTNAAAGA AANCCCTTTTATCTCCCATTGGGAAATAAACCCC GTTNACGANCANGGTAAATANATGATNNTNAANNTTNTCANCTNGATACACTCCGCNNATANTTCCCNGA TNNTCCACTGCGGTGGTTCGGCNCCNNAGTCGCANNTGCNCATTCACCACCGATTNTCTACGGNCNCTGG NNTCTGTCGNGGACNTGGGACGTGGTGCTTANTAATGGTTACTGTTTTCTAGCTCTTTAGTGGTTGAATT TACTTGTCGTTTCTTAATGTGTATTTTTCATTGTAATAGAATAATCGATGTTTTGTAATATATTAATGTA TTTGATATTTCTCAACTAATTTCCATTGTAATATTG CCTACGGAGGTCTANNCCCCCTTCCGGTACANGNNCGNAATNNNCAGGNCGGTNCTNGCTTACGANAAAT GTNAGCAAATGAGAAGGAAGTTGANGANGTTGACAAACGTGGCGGAAATATCACTGAAATTTACACAAGT GGNGGTACGGCGCNNAAATCTCTCTGCATATTCACGNTGGAGTNTCNGCGGTT TNAGTCGNCGGNNGCTCCATAGGATCCTNACTTACGTACNCNTGCANGCGACTTCGNNACTNNTCTATNC TGTCANCTAAATNCAATTNNNGGGGCNNCATTANAATCCCNCTNCTNCCACTNCNNATCCGGAAACCATG NCNACCAGGGANTANCGGATGTNGCTTCTCGGANTCCGCNGGCCCTNTATGAAAGTTCAANGTTTNTGGG TTCCNGGGGGAATATGGTCCCAAGGCTNANNCTTAAGAGATTTGACTAAAGGGCGNCCGNTCTTTAGGAG CCCNACTAACATCCGCTTGCNTNCNACTTCCTACCTCTTCTAAAGTGTCCCTGGATNCANTNCTCNCATG GTNCCCAGANCCNCGNATNCNTCTTGGACTTCACCATGCTGAGNTTNCTCGGGGAGTGGGGACTACCGCC AAAAACTTNNNNGAATTGACNAAAGGGCGGNCGCTCTANAAGACCANCTTACTTCCCTNCNTGCNACNTC TNCTCTTCTATNNTGTCCCTNNATCCNTCCCCCNTGGTNCCNGATCCNCCAATCNCTTGGACTTNNCCNG GCTGAACTTGCTCCNNNGGTGGGGAA CCCGCCCTTTNAANCGAGTACAANACNGGGGGAAANGTTCCGAATAAAAAGTGGGG GNANTCGATCATACCCAGNANAGGTGTCGTATGAGGTGGTGTCNANCAATCNGTCNCACGGNACNTTGTG GTTGCGACTTCTTTTCGGTGTNCCNCGNCCTTCCCGTGTAATANGCTNNATNANCNCAAANGATTTGGTG ATTGAGNAANATGGGGAATCANCGTCNCTGGATCTCCNCCAGTNNNCTACTAGGTCNGTACNNTNAGACA CCGGCNCGGANGGANTCTGCNNNACCGCTTCNAGACAATCTTNTATGTNAATACNTCANACGAGGCATAT ACAANGCAGTTGAAGCTGGTANCTAGCATCTTTAATCGGGCCAATTCTTCGTCCATACAAGGATACGNGC TTGTCCCGCATNTTGCCNCCCNCATCCGGTNTGGAGGATATGTGATCGNCTCTTGAGATGGGATCGTGTT GTTTCGCTAGCCGATCTCATTCTCCGTTCCCAGAAGAGTTAGAANAGATTATTTATGNTAANACGGCNTT CAGAATTGTTTGTTAAATTTGTTGCCNAATCCTTTTGNATANTTNTTCCCTCGGGGTNCCCTCGTTT ATGGTGGTGACGTCTTTCTCTTCAGCGCCGCCTATCTTCTTCTTACCTGGAGCTGATGCTCAGTTTTCTT CTTCCAATGGAAGGTTTGCTATTCCTTCCTCTTCTCTCGTAAAGGGACTAAGAAGACACCAAGATGCAAA GTTGGTGGGCAACAGAGCCAGAGTTGGAGTANTACGAGTCCTAGCGAACCCAAATGTATCTCCTCCTCCT CCTCCAGGAAAAGCAAAGGTAAAAAAAGAGGTAATCATGGTAGACCCTCTTGAGGCTAAGCGGTTAGCTA GTAAGCAAATGGAAGAGATTAAAGGCAGAGAAAAGCAACAGAGAAGGCGTGAAATAGAGGCTATTAACGA AGCATGGGCAATCATANGACTCATGATAGGGCTGGTGATCGAAGCTCAAACGGGGAAGGGTATTCTGGCT CATTGGCTGGTTATTGGTCTGCANTTGTCCATTTGTTCACTCCATCAACTTANAATGAATTAAGTTTCAT TTGGTTTTCTCTACTCTCAACTGTGACCAAATCTAATGTTGTGTTCATGCCAGTTAANTTGTTAAACACA TACCTTTGTTAATCCTCCCTTGTTTCAAAACTTCNAATCCTGCCNTTTGTTAAAAAACAAAATTTAAANA TTTTACNCTTAAATAAAANCNACNTCCCTTTTGTTAC AGNCNGGNGCCGCTCTACANGAACCAAACTNANNTTNACNTNCGNNCTAATCNCNCCTCTNCGNTNCTGT AACATATNTTCNCTTACNCCNATGGTCCCACGGATCCTCTACTTCTGGGTCTGANGACACTGNNNGAAAA TAATCACTATCACCGGATNAGTATATCTTAGCCCCTNCCGTCCCAACTAAAAACGGGAATCGTCTCTCTA TGCTGTCACATTGATGAAGATCATCCTATGGATGCAAAAAATGGGGTATGTCCCGTTTGTGCGGTGAAAG TGAGCTCTGATATGATTGCTCATATAACCCTACAACATGCAAATATGTTCAAGGTGACGCGGAAAAGGAA ATCAAGAAGATGCGGGGCTCAATCCATGCTATCGATCTTGAAGAGAGAGTTTCCTGATGGAAATTTTCNG AGCCTATTTGAAGGAACATCACGTGCTGTATCCTCTTCTTCTGCCAGTATACTGCTGATCCTTTACTGTC TTCATTCATTTCCCCAATGGCTGATGACTTTTTCCTTTCTGAATCAATCTATGTGCA CCATGGTACCCGGATCCTCCGAATTCTTTTGCTTTNTACCCTGGAAGAAATACTCATAAGCCACCTCTGT NATTTACCCCCAATCTTCACAAGAAAAACTGGNGATTTNGATATCGTCTCTCTATGCTGTCACCTANATT CAATTCACATTGATGAAGATCATCCTATGGATGCNAAAAATGGGGTATGTCCCGTNTGTGCGGTGAAAGT GAGCTCTGATATGA AAGATTGANGCNATGGTNACNAAAGTTAAGGCTGAGGACNAANGTGAATAGANGANAAGGAAANTNAANA AATNNAAACACNCGGCNGACATGTCACTTAGTNTTCTCCGNGGTGGTTCNGCCCNTGAGTCGCNGGGCNC ANTCGCCAAGGAGTGTCAACGGTGNCCTGGGAATGTGTCNGGGACGGGGGACNTGGGGNNTCCCTAATGG TNACTG TGGATCCAGGATGGGGTTTCTAANATCAGACTCCGACCAAATCCCAAACAGCTTGANNTAGTTCTCCAAA CTCGCGAACTCGGATGAGCTTAACTCCTCCTTAACCCGATATTGCCANGGGATCCANTATCNGGTTTGGT GACCGAACGCATGGGCATTGATATCCTTCTTTCTCCATCCACAGACTTTGACTTAAGTTTGTTTAACCCC CATAC CGGGTTGGTGGGGAACCCATGGGTTGATGACTGTGCGGCCGCACGGGTTTCATCTGACAACACTCGCCTA TCTCCTTAACCCCATACTAGATCT GGAAATTCGAAACTCGATTGGTTGGTTGACTTCTCTCTCTTCTCTCCCTAATATTTTTCAGAGAGAGAGG TTCTTATATGTTATCTCCGTCCGGTTTGTTTTTACCGGAGTTTATACTCGGATGAAGTCCGGTTCTGCTG TTAGTTAGCCGTCAACACGACTTCTCCGTTGTCGTGTTCTTGCCGTCAACACAGCTTTTTCGTTGCTGTG TTCTTACCGTTAACATGGCTTTCTATTGCCATGTCCTTTTGCTCATACAAAAGCTTGATGTTGAAGACTA TGGCTTCTAGGATTGTTGAATCGGGAGAGTTTCGTATGCGCCAAATCTATTCTCTTTTGCCATAATATAC TTCATCCATTGAGATTTTGCTTTTGGATCTGATGGTTTTCTAACGATGTGTGGTTTTCACTTCCACACAA AAACGTTGGATCCATCGGATTTACGACAGCTTATGTTACCTGCGTCTAAGGTTTGGTTAAAAACTCATTT CCATCTTAAATTTCGATTCCCTTTTGCTGCTTATAAAAATATTCAGAGATTCACTTATATTATCAAGGGT GGATTACTTCAATCTCTACATCTTATTTCATGATTACGATGGTTTTCTTATGAATCTATCAATCATTTGA GATTAGTAGATTGATTTGTTCTGTAATCCATTATTATCATTATCAGTGAGAAAAAAAGAAGAATTCGTAA TCGGTTGTAGTTCCGGCAACGTATTCTGATTCACTGGATTTGGAATCTCTGCATGCGGTGAAGGATGTGA AATAAACACGTATCCTCAACTTATCCCCATCGATGAGACACGTTCTTGAGTTTATCCTTTCTTGGGCCTC TTGTTTGGGCTTCGTTGAAAGTTGTCTTTGATGTTTATGTAATTGGGTGTGATGTTATGTATTATTATTT CAATAAAACTGCAGTTTCAGAGG CTTTTCTGTCTAGAGAGAGAAGCTTTTATCTTTCATCGCCGTTAACAGGGCTATTCCGTTGCCGTGTTCT TGCCGTCAACATGATTTTTTCATTGCCGTAGACATGGCTTTCCGTTGCCGTGTTTTTATGTCGTCGCTTT TGTTAGGTGTTGTTTGTTTGCTTCCAATAAAGGGGAATTGTCTTTCGTCTCTGTCTTTACAGAGTTTTAT GAGAGATGACACACCTATCTTATATGTTTATAGTTTATACAAGTGTTTTTATGTTTGTTGGATTTGAAGC GAAGCTTAACCATCTTATGGTGACTTAGATCTATTTAGAACCTTTAGTTGGTGGCTTTTCTCCGGATCGT CATGTTGGGTATACGGATTACTGAAATTTCAAGGATAGTTTGCAAATAAAATTGAAGAAAAGAAAGAAAT TTCCTTCGCGATTTTAAGATGCCTTTTAGCCGTGATTTCAATTGTTCGGAGTTTTGATTCGTTTTGCAAC CAGCTTTGTCGGTGAAAATCAGAAGAATCAATAGTCGAATTTCAGTTATCGGCAATGATTTTCTTCACCA GAATCAGCATCTTAGATGGCGGTGGTGATGTCGGAAAGCTTTTAGAATTTTCATCCAACACGTGTACCAC TGTTGACACGTTTGTTTGGGAATGAAACTAATGATAAACTTTCTTCAAGTTGAAGCAATATATTGTGTGG GCCTTTATGGGCTGTAATCTGTTTTGTAACCCATGTTGTTATGAATAAAATCCTAATCTTGCGAG CCACGCGTCCGGTGTTGGCTGGCTCTTGCCCGGCAGCGTTGTTTCCATGAGCGTCGTTGGCCGGATTTGG TTTGTATCCAACGTTGTTTTGTTTTTCTTTCAATAATCTCATAGATCTTATGTTGGTGATAATGGTTTAG GTGATTTTTCGCTTAAAGATCTTTATTATCCAATTCGATCTTTTGAGTTTGAGATTTGCAGGAATCAATT TAGAGATTTGCATCTTAAGTTGAAGAAAAGAAGAAGTTTTCGTTGCATATTAATATTGCCCTTAGCTGCT AAGTTTTTATCTGGAAGTTCGATTGGTTTGTTTAAGGTGAAACCCAGAAGAATCAAACTTGCTTTCATTA TCAATGTTGATTTTTCTCACCGGAATCAATCTCAGACGGCAAAGGAAGATGTCGGAAATGCTTTTAGATT ACTCATCCAAACGTGTGCTGTGTTGTTTTCAGCTGTTGACACGTAAGATTGGTTGGAGCCACAATATCAG TTCTTCATCTTTAAGCAATGTTCTTGGACTCATTTAGGACTTCAAATGTTCTTGTAATCTCAGTGTATGT TGGGCTTTTGGTTTTTTAGCCCATGTATGGTTGGTTAACGTTAATAAGATTTTCCACTTATGAG CCACGCGTCCGATAATGGTGTCAGAGTTCTCTCCCTTCTCTCTCTAGGATTTTGATTTATGTTCTTCTTT GTCGTTGTCTTTCACCGCCGTTAACATGGCTATTCCGTTGCCGTGTTCTTGCCGTCAACATGGCTATTCC GTTGTCGTGTTTTATGTCGTAGACATGGCTTTCCGTTGCCATGTTTTTATGTCGTTGCTTTTGTTAGGTG TTGTTTGTCTGCTTCCAATAAAAGGGAATTGTCTATCGTCTCTGTCTTTACAGAGTTTCATGAGAGATGA CACACCTATCTTATATGTTTCTAGTTTATACAAGTGTTTTTATGTTCGTTGGATTTGAAGCGAGGCTTTA CCATCTATGGTGAATCAGATCTATTTAGAACCTTTAGTTGGTGGCTTTTCTCCTTATCGTCATGTTGGGT ATATGGATTACAGAAATTTCAGGGATAGTTGCAAATAATGTTGAAGAAAAGAAGAAATTTCATTCACCAT TTTAAGATGCCTTTTATCCGTGATTTCAAGTGTTTGATCAAGTTTTGATTCGTATTGCAACCAGCTTTAT CGGTGAAAATCAGAAAAATCAATGGTCGAATTTCAGTTATCGTCAATGGCGGAGGTTGATGTTGGAAAGC TTTTAGAATTTCATCCAACATGTGTACCAGTGTTGACACGTTTGTTTGGAGATGAAATCAATGAGAAACT TTCTTCAGATTGAAGCAATATTTTGTGTGGGCCTTTATGAGCTGTAATCTGTTTTGTAACCCATCTTGTT ATGAATAAAATCTTAATATTGAG AGAGGGGAGGGAGAGAAATGGAAGGCAAAGAAGAAGATGTACGAGTGGGAGCTAACAAGTTCCCGGAGAG GCAACCCATCGGTACATCGGCTCAGTCCACCGACAAGGACTACAAAGAGCCACCTCCTGCGCCACTGTTC GAGCCCGGCGAGCTCAGCTCATGGTCTTTCTACAGAGCCGGAATAGCTGAGTTTATCGCTACTTTCTTGT TTCTCTAACA GAAACCCAAACCCTCATTCCAAAAAATGGGGTCTCGCTCTCAAAACCTCTCCTTTCTCGTCCTCCTCCTC CTTGGCTTCGTTGCCGTCTCCTATGCTTGCGACTGTACCCCTCCTAAACCATCACCAGCACCTCACAAAC CACCAAAACATCCAGTCAAACCGCCTAAACCTCCTGCCGTCAAACCACCTAAACCACCGGCAGTAAAACC ACCTACTCCAAAACCTNCCACCGTGAAACCCCATCCTAAACCACCCACCAAACCTCACCCCCACCCAAAA CCTCCCATCGTAAAGCCACCAACCAAGCCTTCTCCGTCCACCCCTAAACCTNCCACCAAACCTTCCCCGT CCACACCTAAACCTTCCACGACCAAGCCT TGACTACTGACATATAGAAAAAGAGAGAGGAGGATAATAATATGGCGAGCAAGAAAGCAGCTATGGCTAT GATGGCGATGATCGTGATAATGGCTATGTTGGTCGANACATCAGTAGCGATAGATNTCTGCGGCATGAGC CAGGATGAGTTGAATGAGTGCAAACCAGCGGTTAGCAAGGAGAATCCGACGAGCCCATCACAGCCTTGCT GCACCGCTCTGCAACACGCTAATTTTGCATGTCTTTGTGGTTACAAGAACTCTCCATGGCTCGGTTCTTT CGGTGTTGATCCTGAACTCGCTTCTGCTCTCCCC TGACTAATGACTGGAGGGTTTCTGTCTATGCGGCAAGGGGCTGGTGCTGCTTCGAGATCAGCTATTTTTG GAGGGGTTTTGCTTGCTTTGATTGAAGGAGCTGGGATCATGTTGAACAAGGTACTGGCTCAGCCTCGGAA TATGGTGATGGAGGACCCTGGAATGCAAGGAATG TGTAACTGACAGAGTGGGATAAGAGACAAATAAGGAGAATCAAACAAGCAATCCGATCGATCTACCAGAT CGCCATGATTCTTACAAGATGCTTACCCTTGATATGGCTATCTCTACTTACTGTGTGTGCTGCTGGGAGG ACATTGCACCCTCTCCCCTGTTAAAGGACCCAAAACTGTCAAGCTTCAACTTCCGACTTCACGTCCTTAT AACATCGCACACAGAGGTTCCAATGGAGAGATCCCAGAAGAAACTACAGCTGCATACTTGAAAGCAATTG AAGAAGGCACAGACTTCATAGAAACAGATATCTTATCATCCAAAGATGGTGTGCTCATATGTTTCTATGA TTGTATTCTCGACGAAACA TGACTAACTGACGGGGAATACGACTTCTGATTTGAACAGTTAAAAACGAAAAGTCTAATAAAAGCTATAC TTAACGGATAGCTTTCGCGACATAGGAAAGGGACATGATGCGTCGTGTAAATATTCTTTGCTCATTTGCT CTGCTTTTTGCCAGCCATACTAGCCTGGCGGTAACTTATCCATTACCCCCGCGCGGCCGCGCGGCCGCGC GG TGACTAACTGACGATGGTGGTGGTGGTATNACAGGTGATGATATTGTTAGGACAAGAGATTGGTAAAGTG TCGTCGACTCTATACAAAGTTGGGGACATGGACGCTTGGGGCATCCCAATTGATGCTAAGGTCNACTCCA AATGGCCCAAATCTCACTCTTTCAAAATCGGTGACTCCCTCTTGTTCTTGNACCCACCAAGCGAAGACTC ACTGATTCAAGTGACGCCTTCCAATTTCAAGAGCTGCAACACC GCAAGGACAAAAAANGGGGGAAGAAATTAAGGGAAAATTAAGGACAAAGAACGCNCCAACAGATTTGTTN TTCNGGAGNGGAGGGGGTATTTGGAGAAAAGAAATTTTTCNTTCTTTATTNAAGGNAAATAATTTTTAAN GNGCACGGTAAACGGCCTTCCTTCCAGTAAATGGAATNGGAATAAAAAAAAGTTGGTGTNTGGNTTTCAA GTATAAATAGACCGCAANNATNAATCTNGGTTTCCTCGTCATGGTTCTCGTTCCCTTTCTTCCTGGTTTC TTTTTNGGCACAANATTTCAAGNTATACCAAGCATACAATCAACTCCAAGTGAATTCGGAAAAATTAAGA TANGGAGGGANTCTNGAAGTTGTCAACTTTGGTGATTGTGTGCATGTTAGTGACCGCTCCAANGGCGTCC GAGGCAGCAATNTCGTGCGGCGCAGTCACCGGCAGCTTAGGTCAATGCTATAANNACTNGACCCGAGGCG GTTTCATTCCTAGAGGGTGTTGNTCNGGCGTTCAGAGGNTCAACAGCTTGGNTNGNACCACCCGTGACCG CCAACAAGCTTGTNGTTGTATCCAGGGTGCAGCGAGAGCCTTGGGTTCTCGACTNAACGCTGGTCGTGCT GCTNGTCTCCCCTGGTGCTTGCCGTGTTAGGATNTCTNACCCCATCAGTGCCAGAACC GGACTAACTGACGATGTTTGTTGCGGGGCATATCTACCGCTATAATGTTGATCAGTTNGGCTGGTCAGCT AAGTCCAGTGAATTTCTGGAAAAAAGGCAGCTGAAGTGGGGCAGTATTTTATTCCATTACGGAATNGNAT TTGTTTTCTTTGGTCATGTAGCAGGTATTTTGGTTCCAAAGGCATTNTATGAAATGATTGGTGTAACAGA CCATATG TGACTAACTGACCATCCNACCTCATTTACTGTTCTGTTTCACTTTCTCTCTCTCTGTANACTCTCTAAAT GATGGCAAAAAACTGTAATTTAGTCAGTGTTCTATGTGTATTTTTGGTATTGACCCTCTTTAACAAACCC ATCACCGTCGCCGGGCAGAATATTCCGGCGGTGGGCTTGTTCACCTTTGGTGACTCCAACTTNGACGCC AGGAGGAGAGTAGTGAACGGAATTAACCAGACAATTCACTCACAACCTAGCTAGCTAGTGAACAGTATTT TCTATATACCAAAAATGGCTTCAAGTTCCATAGCTCTTTTCTTGGCTCTCAATCTTCTCTTTTTCACAAC AATCTCCGCCTGTGGTAGCTGTACTCCGTGCGGCGGAGGTTGCCCCTCTCCCAAGCCAAAGCCAACTCCT TTGGAGTTGACGGAATGATTATAAACCTTGCCACACTTCTAGCTAACATCGTGACGAATCCGTTTAATAA CGGATATTACCAAGGCCCACCAACTGCACCGCTTGAAGCTGTGTCTGCTTGTCCTGGTATATTCGGGTCA GGTTCTTATC AGATGGGAAGTGGCATGATAAGGACATTGGTTATTCTAGCAATAGCTTTATACATGATCGGTTCCGACAA CGTCCACGTGGCAAAAGCCCAGGTCTGTGGAGCTAACTTGTCGGGACTGATGAACGAATGTCAACGCTAC GT AGAGAGATAGTAAGAGTAGGCGCCCTCAAGAAAACAGAGTAAAAATGGATCAAACTTTGTATCGCAAGTG TCTGGTTACTTTATCGATGATGGCAATGATCGGCACATCAATGGCTACATATGCCGGGACCCCATGGCGT ACAGCCTCAGCC TCACAGGAGGAACGGGTAGCTTAGGTACAGTCACTGGTGGAACGGGTAGCTAGATAACAAAATAACGGAG TTGAAAATGATGTTTAATAAAATATCCCTAATCACTGCTCTGTTGTTTTTTCTATTAGGAACGAATGTGT TCGCCCATTCCCATTTAGAAGATTCATCTCCTAAAGATGGCGCAGTGCTAACTGAATCATTGAAAGAAAT CAAACTAACATTTGAAACGAGCCTTGAACCAACTAGTACATTTACG CTCGTTGAAGACCAACAATTTCAAATCTCACTTCCTTATCACAATGTCTTCCTCTATCTCTCCCCTCCTC ACAACCGTCATCTTCGTGTCGAGCCTCCTCTTCCTTACTATCTCCAAAGCGGCGACAATTCCAAACATCC AC TTCTCTCCAACTCGCGGAGCTCTTCGTGAGCTCTATTGTGCATTTGCTTTATGGGTTTTATATATTTAGC TCCGCCGTTGCCGGAGATATCTCTCAGACGTTGAATGATTACTTGTTTAAGTCCAATGTCGCTTTCGGAG AAACCGGTCAAAATCAAACCAATGTTGAGGGTTTGCCACCTATTGTATTGGC AGTGGTGGTTTCCGGCTTAAAGATGAAAGCTTTCTACGTATTCGTTGTTGCTCTTCTTCTCACCTTGAAT TATAGGGGAGAAGCAAGTGGTTCTGTTTTCTTCATTGATGGATCCAACAATCAATATCTTCGTCCACGAT CATCCAGTGAGGCACTTCCCATGTCGCCTGTTGAAATATCTGCAGCAGTGTCTGCCTTGTTGGGTTTTGC ACCTTCAGCAACTTTGACAGCTGATGGCTCATCCAAGTTGAACAAGATTCTAAAACCTAATCCA AAGTTACTGCCGCCACGGCTGCTGCTACAAAGGTTAACACCCATACAAGAGTCACGGGTCACATTTAAGC TTCAACTATATATTTGCATGTTATTTGCCAAAAGGATTTGACAATAATGCAACAAGAGTTTCATTGAAAA TTTCAAGAACCCTAGTTAATAACGATAATGGGTTCGAGAGTTTTGGCTTCCTTCTTTGTTTTCTTAATCT TCACGGTCATCACATTGCCTCCCACGATCCAAGCTTGCACTCCTTGTACTCGTCCTCATCCTCCGGTTCC GAAACCTCCACAACACGGCGGTGGTGGAGGTGGTGGTAGCAAGCCGCCCCCACATCACGGTGGAAAAGGT GGTGGTAAACCCCCACCCCACGGTGGAAAAGGTGGAGGACCGCCGCATCATGGTGGAGGAGGAGGAGGAG GAGGGGAATCACCGCCGGTTGTTAGACCTCCTCCCGTAGTGGTGAGGCCACCGCCAATCATAAGACCTCT TCGGTCGTCTATCCACCACCAATTGTGAGGCCACCGCCAATCACAAGACCTTCCATCATAATCCCTCCAA TTCAACCCG AGCATAATTATCGATCATGTTTATCATCTATCTTTTTATCTTTCTCTCATCTGCCATTATAGATTCAGAT GGGGTTGCAATGGCCCAAAAGATCGAGGCAATTGGTGGGAAGGGAGGGAAACGGTGGGATGACGGTGCGA ACCATGAT CACACAACACAGACCTAAAAAAATGTCTTCTCTGCGTTTGCGTTTATGCCTTCTTCTACTCTTACCTATC ACAATTAGCTGCGTCACAGTCACTCTCACTGACCTCCCCGCGTTTCGTGAAGCTCCGGCGTTTCGAAACG GCAGAGAATGCTCCAAAACGACATGGATACCTTCGGATCACGAACACAACCCATCAATCATCCACATCGC TATGACT AAACTAAAACAACTCTCTCATAATCTCTCTCCCTCACTCTAACACCAAAAGAAGAAGAAGCATTTTCCAA AGAGAAAGAGAGAGAAATGGGTTCTAAGATTGTCCAAGTTTTCTTGATGTTGGCTCTATTCGCCACTTCA GCACTCGCTCAAGCCCCTGCTCCTACTCCCACCGCCACTCCTCCTCCCGCAACTCCCCCTCCAGTCGCAA CTCCTCCTCCAGTGGCTACCCCACCACCTGCTGCAACCCCTGCCCCAGCCACGCCACCACCTGCTGCAAC CCCAGCTCCTGCCACTACTCCACCGTCAGTTGCTCCTTCTCCTGCTGATGTTCCCACCGCCTCTCCACCA GCACCGGAAGGTCCT CGGAAGGTCTTCGCAACTATCGAACGGACCTCTTATCAAACACCAAACCACACCAGAACAGAACTCAGCC ATGGCTTCTTCTTCTTCTTCTCTTCTAATCCTAGCCGTTGCTTGTTTCGTCTCGCTAATCTCACCGGCGA TTTCACAACAGGCTTGCAAATCACAGAACTTGAACTCCGCCGGTCCGTTG GGAGATGTTTTGGAAGACGAAGAGAGATTCGATTTCTCTGGATTTTTCAAAAATGATTCTCCAATCGCAA AAGCTATGGACGATGTTTCTAATTCTAGCGATTTGGTCCCCAATTTCATACTCGCTTCACTTTGATCTAC ACTCAGGTCGCACAAAGTGTATCGCCGAAGAC TCAAACCTCACTCACCATGAGACACCTTAGCTCACCTCCATGGCCTCTCCTCCTTCTCCTCCTCCTCTCT TCTTTCACCTCCGGCGAATCCTCTCTGTCCGCAGAAAAAAACAAATTGCAA CAGAGGGGTTCCACGCGATGACGACGTTTTCAACGAGCTTTCTTTTCCTTTTGTTGGTTTTCTGTTTGAT CGATCCACTAGCTGCCGATGATCTCCAACATAAATCCGGTCGTGACGTCTGCTCCGGTGGG CGGAAGGTCTTCGCAACTATCGAACGGACCTCTTATCAAACACCAAACCACACCAGAACAGAACTCAGCC ATGGCTTCTTCTTCTCCTTCTCTTCTAATCCTAGCCGTTGCTTGTTTCGTCTCGCTAATCTCACCGGCGA TTTCACAACAGGCTAGCAAATCACAGAACTTGAACTCCTCCGGTCCGTTC TGGAGATTGGAGCGGAGATCTCTTGAATAACGGCGAAGCAACAACAAAAGGAGATTAAAAGAGGAGCTAC GGGTAAGATGATATCCTTAAGAATGAAAGGGCTTGGTCATTGCCTAGTTTATGTCGTGGTCTTTAGTGTC ATTGCGGCTATAGTGACAGCATACGACTCACCCTCTTCAACACCACAATACACTTCCCCTTATCCACCTA AAAACTATTCTCCTTATCTCTCAGAATCACCCCTG ATACAACAATGGCTTCGTCATCTACAAGTATCTCTCTCCTTCTCTTCGTCTCTTTCCTTCTTCTTCTCGT TAACTCGCGTGCAGAGAATGCGTGG GTATTCTTTGATGAATCGTGAAATGACGTCAAGCTTTCTTCTCCTGACGTTCGCCATATGTAAACTGATC ATAGCCGTGGGTCTAAACGTGGGCCCCAGTGAGCTCCTCCGCATCGGAGCCATAGATGTCGACGGCCACT TCACC TGGAGGAGGAAGTACAATGAGAATATTAAGCTACGGAATCGTTATTCTCTCTTTACTCGTTTTCTCTTTC ATTGAATTTAGCGTTCACGCTCGTCCCGTTGCTCTCGTCCTCTCAAATGACGATCTC CTGGTTGATACTTGAACCTACCCTTTGGTCCCTTTACGGCAACATGGACTCCTCCAAACTCTCATCTCTC TCTCTTTGCCTCTTCCTCATTTGCATTATCTATCTCCCCCAACATTCTCTCGCATGCGGCTCG GAAATCTCCCAAGAACCCGAAAAAGCGCCATGTCGCTCACTATCCCGACGAATCTCGTTCTCAACCCGAG ATCTAACAAATCTCTCACTCAATCCGTACCTAAATCCTCCGCAAGATTCGTCTGCTCCGATGACAAATCC TCCTCCTCCGCACCTCAATCCATGAAAGCTTTCTCCGCCGCCGTCGCCCTCTCTTCCATCCTCCTCTCTG CTCCTATGCCAGCTGTCGCTGATATCTCAGGTTTGACTCCTTGCAAGGACTCAAAACAGTTCGCT TGATTCAAAAATAATTTGGTTAGAGAGTCTTAAACGAAACTAAGAGAGCACACAAGTTTCTCAACATGGC CAGTCCTAATTGGCCATCTTTACTTATGGTGGTCTTAGCCTTGTATCCCATGGCTGCGTATACAAGTGCT CAATACTCTCCAACACCAA AGAGAGAAAAAGCAAAAGCAAAAATGGCTCGATCTTTCGCTATTGCTGTGATCTGTATCGTCCTCATCGC CGGCGTTACTGGTCAAGCTCCGACTTCACCACCAACCGNTACACCAGCTCCACCAACTCCAACAGCTCCT CCACCAGCAGCAACTCCTCCTCCTGTCTCAGCACCACCACCAGTCACAACATCTCCTCCTCCAGTCACCA CTGCTCCTCCTCCAGCAAATCCACCACCACCAGTCTCTTCTCCTCCTCCTGCTTCTCCTCTG GCAGCTTTTGCTTCTTCGATAGAAAATCTAATTATCATCAATCATGTCTAAGTTCACGGGATTCTCATCT CTCGCTATCTCTTATTTTCTCTTGGTTTCAACGATTGTTGCAGCCACCGATGTTCACTACTGCGATAATA ACGAAGAGTATGAAGTAAAAGTACAAGGAGTTGATATAACTCCTTATCCTATAGCTAGAGGCGAGCCAAC TACTTTCAGAATTTCTGCTAACACAGACACTGAGATCTCGAGCGGCAAGTTGGTGATCGAAGTTTCCTAC TTTGGATGGCATATTCATTCTGAGACACATGATCTTTGTGATGAGACAAGTTGTCCTGTGGCCATTGGAG ATTTCTTGGTAGCGCACTTG AAATTCTGTTTCAGTGTTCTTCAAATTCTCAATCTTTCTCTCAATTCATCTAAAGGGTTCCTCAAAGTTT CAATCTTTCTCTCTGAATCTAAACCATGGCTCGTTGTAGCAACAATCTCGTAGGGATACTCAATTTCCTA GTATCTCTTCTCTCGATCCCAATCTTAGCTGGTGGAATCTGGCTAAGC CGACATCTTCTAAGAAAGAAACAAAGAAAGACTTCACATTTTACCATTATTTGCTCTGAGCTCAGTAGGA GAGTTCAGAAACAATGGCAAAGATGCAATTATCAATCTTTATCGCTGTCGTTGCGCTTATCGTCTGCTCT GCATCTGCTAAGACCGCAAGCCCTCCAGCTCCAGTGCTGCCACCGACACCAGCTCCAGCACCAGCCCCGG AAAATGTGAATCTCACCGAGCTTTTAAGT CTCGTTGAAGACCAACTTTCCCAAAATCATTTAGTAACATCAAAATTTACAAAAAACAAAAAAACATGCT ATCTCTCAAACTCTTCCTCGTAACACTCTTCTTACCTCTTCAAACACTCTTCATTGCTTCTCAAACTCTT CTTCCTTCTTCTTCAAACACTTCATCAACCATCTGCAAAACAACACCCGATCCAAAATTCTGCAAATCAG TGTTCCCACAAACATCT TTCTTCTCATTTTCCCTCTATATATTCATATACTCTTTCGTATAGTTGCACCATCCACTCTACTCAACAT GGACTCCTCCAAACTCTCATCTCTCTCTCTTTGCCTCTTCCTCATTTGCATTATCTATCTCCCCCAACAT TCTCTCGCATGCGGCTCTTGCAACCCACGGAAGGGCGGAAAGCACTCCCCTAAAGCCCCTAAGCTACCAG TTCCTCCGGTGACCGTCCCTAAGCTACCAGTTCCTCCGGTGACCGTCCCTAAGCTACCAGTCCCTCCGGT GACCGTCCCTAAGCTACCCGTTCCTCCTGTGACCATCCCTAAGCTACCCGTT TTGTTAGAGAGGGCCATGTCTCCAAGAATTGTTAATGAAGCTCGTTCAGATCTCATTCTCTGTTTCTTCT TCCTCTCTCTTCCTTCCTTCTCTTCCCTTCCATCCTTCCAAACCCTATTCCCCAATTCTCATTCCCTTCC TTGTGCTTCTCCCGTCTCCTTCCAACCCGGCTCCGACTCCGAGTCACTGCTAGAATCCGAATTTGAATCT CGATAATGCTTGTGCTTGTTAAAGTTCTGAGATTATCCAAGACCCCAGCATTTCGTGTACAAATTGCTTC ACTAATTGGTTTGTTAATTCGGCATTCTACTTCAATCGAAGATGACTTGGCAAATTCTGGTATTTTAGAC TCTCTT CAATTTTTCCTAAAGAGTAAAGAAACTTCTCTCCTGTCTTTTCTCCTTCTCTATCTCTCTCCCTCAAAGC TAATAAATACAACATTTGCATCTAACGTTTCTCTAGCACAAAAATATGCACTCGAGTTGTTTATTGTACC TCACCGTCCTCGTCGTCTTCATTGTCTCTTTCGCCGGCGGCGAGAGATTCAAAGAAGCTCCAAAGTTCTT CAACTCCCCGGAGTGTCTAACCATCGAGAACGATGAAGATTTCGCTTGTTCAGACAAAGCCATCCACGTG GCAATGACCTTAGAC ATTCAACAAAACATAGAAAAAAACAAAGCAAATTCTTTTTTTCTCCTTAGTTACTTCTTTTACAGATTAT CTCAATCTTACAGAGCACCATGGATCGTTGTATCTATGGTTGCTCCGTCATTACTATCTTCTTCTCCTTC TTCTTCCTCCTCAATGCATCCGCTTTAGAATCGGGTCACCACAACATAACTGGGTCGGGTCAAATAAACT CAAACTCCGTCCTCGTAGCTCTCCTCGATT CTCGTTGAAAAACAACAATGACGAAGCTCTTCTTCTTCTTCTTCTTCTCCTTCCTCTACACAATCACAAC CCTAACATTTCCGCCATTAACAACCTCAGCAGCAACATCATGCCGAACATTATGCGGCAACATCCCAATA AACTACCCGTTCGGCATCGACGGCGGTTGCGGATCTCCTCAATACAGAGGAATGTTCAATTGCTCCACCG ATCTATATTTCACCACTCCTTCCGGCAGC CAGATCTACCGGAAGATGAACGGAGAAGAGATGATAAAACTCTTCGAGACTGGAGCAGATGTTGTGGTAA TTGGAAGTGGGATAGGAGGATTATGTTGTGGTGCTATGTTCTCTATGTTTGGATTCTTCGTTCAAGCCAT CGTCACTGGTAAGGGACCGATAGAGAACCTTGCT TAAGGCAATGCAAGCTTTGATCTTTCTTGGTTTCTTGGGCACTTCATGTCTCGCTCAAGCTCCTGCACCA GCACCAACC AAAACACAAATCTTGGTTCATTTTAAATCTCTCCAAGAAACAAAATGGCAGCTTCCATGAAATTTCTCTG CATTCTTGGTCTGATCCTCCTCATCGGAACAGTCGTTGACGGTGCAGGGGAGTGTGGTAGATCTTCGCCA GACAATGGGGCGATGAAGCTGGCTCAATGTGCTGGTGCAGCTCAGGACGCTAACTCCGCCGTGCCAGGAG GTTGCTGTACTCAGATTAAGAGATTTTCTCAAAACCCTAAATGG TAGAGATAGTTGATTAGGTAAGCTACAGTTATTTTTATACCAGATTCAGTCCCATACAAAGAGTATAGTA GGTCACATTGGTGATTAGTCATAAGTAACAGAAAGAATTATTATATAATGACATCTTCGACATTCTCGTC CATGATATTTCTCCTCGTCCTCCTGTTTTCCCTTCATATGGGTGAAGCTCTTGGTGCTCAAACTGAGATC CGCAAAATCAAAGAGACAATTAGGATGAGGAGGAATTTGGAAGGCAATGACTACAGAAACTCTAAAATTT GGACTGGACGGAGCTATTCA CACCGTCGAAGCTTTCTCTTTCCGATCTTTCAATGGCGATTCTCAAATCTCACTTCTTCTTACTCTTCCC TCTTCATCTTCTCCACTTTCACACTGTCTCCTTTGCTCAGACGCTTTTTGTGTTCGGAGATGGTCTTTAC GACGCCGGCAACAAACAGTTTCTCTCTCAGAACCGAGTTGACGCAAGT GAACAGAAAATGGAAATGATACTGATCTCGTCATCGACACTCAGGTTCCATCCATTGAGGACATCACAAA GAATCGCCACCGGAACCAATAGAAGACGAACCACCACCGTGTGTGCAGACTACTACAGAGGAGGAAGAAC GGTGGACGANAACATGGTGGTCCTTAGGAAACGAATCCATGAGATGAANATGGTTGAACGCAACTTTGAA CCTCCTTCTCATTGGATGCAATGGGAGAAACGTTTCTACTGCAACTACGACGCTACTATATGTGATGCAC TCACTCTTCTCCAAACTTTTCTCATGAACTCTCGTCCCA GGAGTCGCCATTAACATATTTCATCAAGCTCAGTCCACTCTTCTCATGAAACTTCATCATCATCGACCTT GACCCTGATAGGTTTCAGACGACACCCATTATTGTAAATCTGCTGCTGGAGTCTTTTTTGTCTGAATCTT CTTCTTGTTGAGACACTGTTTCTTCTTGGTCTGTGATTTTTGTTTTGTTCTCATTAGGACGTTCTTTATT CCGGTTCAGATTTACTGGATCGTCATTTTCTCTTTGAAATTGTATTTTTTTGTTCCTTTTCTGGTATGTT GTGAAAGCTATGA GGCCGGTAACAGCAACGGGAATTTTCATGGCGGCGAGGTCACCGGACGTTATATAATTTGTATCCCAAAT CAAAATTCTGAGAAGGAAGAGAAAGCAATGGAGGACGAATTGGAAGGTCTACGAGCTCATTTTCCTGTTT CGTTCGGTAAGACATCGAAGGTTTCGGCGTCAACTGAAGCCATTCACAGCGCAACTCGCCGCACCGATGT AGCCAACGACGCCGGAGTTTCGTCGGATATCACCACGAAGAAACCTGATTCCGATAAATCTGGATTCCCG TCTCTATCTTCCTCATCTCAAACCTGGCTCCGAAGTGTTCGCGGTCCGAATCGTAACCCTAACAGCTCCG GTGATGTTACAATGGGTCCGCCACCGCCACCGTCATCTAAACGGACCC AATATTTTCTTCCAGCTGTTTTGGGTGGTTTTTCTCTTTTTTATCTCTTTTCTTGAAAAAAAACTAGTAG TCTTTTTTTTATTTCTTCTTGGGAGGATATTTTT NACCCCCCCGAGGAACACGAGACCCAAGAAAAAGATTTCAAAATGCTCACGACACCTCCACGAACCTTTG TCTCTGTCCCTTTCTTCTTCTTCTTCCTCCTCTTCCTTTCTCTACCTCTCTCATCTTTCTCTCAATCGAA CTCTGTATACAACTCTTTCCTCAA GAGCTCCAAAAAGTCGGTGGTGGTGGAAANATCCGGCGTCGTCGGATCCGAAAAAAAAAATGAAGGTTTC AAGCGGTGTGGTCGCTTCTGTCATTGCCGTCTCCACCGCTGCTCTCTCTTCTTCCTCCATTCTTCCTCCA GTCTCCCCAAAGGTTTGGGAATCGAGGAAAACGAATGGGTCGGACAATTTCGAGCCGAGGTTTGATGGGT TAAGGTTCATAAA GGCAGCCGAACCCTAGCTTTCATAAAATTTTCATTCATCATCGTTCTTGCTTCTTGCTAAAGGCCTTGCC TTGTGCTTCCTCGTCCTATCTCTCTTACCTCCGTAATTTGTTCGTAAGAAAAGTATCGTGATGGGTACTG AGAGAAAGAGGAAAATTAGTCTGTTCGATGTTATGGACGATCCGTCTGCTCCGGCGAAAAACGCCAAAAC CAGTGGTCTTCCCGACGGCGGAATCAACAGTCTGATCAATAAATGGAACGGGAAGCCTTATTCACAGA GACACCACCATTGAATTGAACTTCCCTCACACGCAAGTACCACACCTTCTCTCTCTCTCTCTCTATCATC TCTTTTCTTTTTCTCTCATCGCCTTGAAGCTCTGAGAAGTAGAGAGAAGCTCCGATCTGATAGGAACTGT GAGTTTCCTTGAGTCTCCGGAGAAAGAAGTCGCCGATTTGCTCCTGATAATCTTAGTCTCGAAATCAAAA CGATGTTTTGCGATTGCTTCTACTGGAATAAAGGTTTCTCCGAGTTGGAATCGGAATCGTCCGAGTCAAA GCCCTTCTCGCTTCCATCTCCTCTTCCTCAATGGCCACAAGGCAGAGGTTTTGCTACTGGAAGGATAAGT CTTGGAGAAA GAGCCTTAAAACCAGGCAGCCACTAAAAAAAGGAAAAATATTGAGGGAAAAAAATCACTTTGATAAATTC GCCGCCAATCTAAACCCGTTAATTTTCTTATTCGGAAAAAAAAAATGATTGGAAGCAAAAGGAAGGCAAC CCCGGCAATTAGGAC GATCCTCAAGCGATAACACCACAAACAAAACAATAATCCAAAAAAAAAAAGAAAAAAGAAAAAAAGAGCA AATCTCCATCATCATCATGGACTCGTCTCCAAACGACGGTGTACACCAACCGCTTCTCCATCCTCAACCA TCTCCATCTCCGCCGGATTTAACCAACGGGGAACTAAAAACTGTCCTCTCCGAC GGTCTCTCTGTCTCTTCAATTTCATTCGTTTTCTGAGATAAAAGTGAGAGAGAAATCTAAATTCGAGAGG AGAAGTTTTAATTTTTCTGAGTTAGATTCAATGGAAGAGATCACGGAAGGAGTTAACAACATGAACTTGG CTGTTGATACCCAGAAGAAGAATCGGATTCAAGTTTCCAACACTAAGAAACCATTGTTCTTCTACGTCAA TCTCGCCAAGAGGTACATGCAGCAGTACACTGATGTCGAATTGTCTGCACTAGGAATGGCTATTGCCACT GTTGTTACGGTCGCTGAGATATTGAAGAACAATGGCTTTGCTGTTGAAAAGAAGATCATGACATCGACTG TGGATATCAAGGGATGATTCAAGGGGTCGTCCTGTGCAGAAAGCTAAGATTGAGATCACGCTTGCCAAGT CTGA GAAAGTAGACAATGAATGATTAGGGATAGCGAATGAAGAAGGTGGAAGATGATGTTAACTTCGGATTGGC GCGAAATAAGATAAAAAAGCTTGTTCTTCAGAGAAGAAAGTGTTTATGATTGGACAAAGAAAGAAAGAAG CAAAGCCTATCCACTTCTCATCTTCTCTATTACCAACAAACCTTCCCCTTCTCTGTCGGTTCCTCCTTTT CTATTATTTTTAATTCCAGATAATAAAAAGAAAATCTTTTTTTGCTTAAAGAGCTCAAACCGAAACCCAT TTCAAGATTTCATCCTCCGGAGTGTTTCAACGAAGCTTGGGTACATAAGTCTGATATGAGAGGTTTCGTC ATAACTTGTCTTCTAAGGTAAGTTTCCTCACCTGTGGCGTAGATTGCATCATCAATCCATGGACGTTGAA TGACTAAAATATTTATTTTTATTTTCCTTCAAAAAATCTCCATTCGGTATCAGCCATAGCCAAACCTCTC TTCTCTCTTATTGTTGGGATCGACAAATTTTGCCTTGATTAGCTCGGAAACTTGTAAATCAGAGACCCTC GTAGAAACTACCCAGAAACAGCATCTCCAAGGAACAAATTAATCATTATACTAATGCCTCTGATGCTCTT CTTTTGATTTTGTGATCGACTTCTCTTTATTAAGTCTACACCTACCAGATGCAGATTATAGGTTCATTTT TTTGTATTGAACTTTAAGCCGATATAGAGTTGTTGTCATAGATATATACAGCGAGTTATTGAAGCAATGG ATGTTAATGAGGTTGAAGAAAATTTCTTTGCCCCTGGTGATGCCAAGCTACACGGAAAAATGTGCAATGC CCTTTCAGTGATCTACTGCAAGATCATGTCTATTTTCCCGTCGCTTGAAGCTGCTA GTCACTAACCTTCTTCCTTCACAGTGAATCAATGGCGTCTTCTTCTCTATCAACTCTTTGCAGCTCAACT TCTTCTTCTCTACATCCCAACTCCAAACTCTCACATTCTCTTTCAGCTAAATTATCCTCCAAAGCAAATG TTTCCGTCCAATTTCTGGGAAAGAAACAGTCTCCGCTTCTCTCCTCAACTCCGAGATTTCTCACTGTTAT CGCCATGGCTCCACCTAAACCCGGAGGCAAAGCTAAAAAAGTTGTGGGAGTTATCAAACTTGCTTTAGA GGGTAAAACTGTAAAGACAGAGAGAAGAGCACTCCCCAGTCTCAGTGGTGCGGTGAGGAGAGCTTCGTTG TCTTCCCCATTGCAATTAGGGTTTTCAAAACGGGTAATCGAATTCGGTGGTGCTCGGCTTTGAAATTGAG GATGAGATCCTTTCCACTTCCTTCTACCTGCTGACAATGGGCAACTGCGGTACTAGAGACGAGGCTGCCG TCTTCACTCCTCAAGCTCAAGCCCAACAGCTCCAGAAGAAGCACTCCCGATCCGTCTCAGATCTGAGCGA TCCATCCACTCCTCGCTTCCGAGACGACTCTCGCACTCCTATTTCGTATGCCCAAGTCATCCCCTTTACT TTGTTTGAGCTTGAGACCATCACCAAGAGCTTCCGCCCAGATTATATACTCCGGAAAAAGTGGTTTCGGT ACCGTCTACAAAGGGTTACATTGATGACAATCTCCGCGTTCGGCTCAAGTCTCTCCCTGTTGCCGTC GATGTCTTTCACTCTCTCTCTCTCTCTATATCCAAAGAATTAAAAACCATAATAAAAAAAGAAGATAAAA AGACGAATTCCAGAAAAAAAAGACGCAAAATCGTCGTCGTCGTCTTCGTCTTTGCATTTCGTCGGAATCT TTTGATTCTTGAATCGGAATATCTCTGTTTTTGTTTTATCCGGACTCAAGATCAATTCGGATTCTTGGAA TTTATTTGATTTTTTGTTGTTGTTGTTGAAAAAGTGGATTCTTTGGTTTCGATTTGTAATAATCTTCGTA GAAAAAATGGATTCTGATTCTTGGAGTGATCGTCTCGCATCGGCTTCAAGAAGATATCAGCTCGATTTCT TGTCTCGATCTGACAATTTCTTGGGGTTTGAGGAGATAGAA GAAAAACAGAACACAAACAAAAACACATTGTAACATTAGTTTAAGCATTAAGCTTCTTTATGTCGAATAA TAATAATTCTCCGACCACCGTGAATCAAGAAACGACGACGTCTCGTGAAGTCTCAATCACATTGCCTACT GATCAATCTCCTCAAACCTCACCAGGATCATCTTCTTCTCCTTCACCGAGACCTTCCGGTGGATCACCGG CGAGAAGAACGGCGACTGGATTATCCGGCAAGCACTCTATTTTCAGGGGGATTCGACTACGTAACGGAAA ATGGGTATCGGAGATTAGAGAGCCACGTAAAACGACAAGAATTTGGCTCGGGACTTATCCGGTACCGGAG ATGGCTGCCGCCGCTTACGACGTGGCTGCGTTAGCTTTAAAAGGACCGACGCCGTTTTGAATTTTCCTGG TTTAGCTTTGACTTACGTGGCTCCGGTTTCAAACTCTGCTGCGGATATAAAAACGCTGCTATTA GATCCATTGCTTAGGGAGAGAAGAGATAATGCTGAGAGCTTCGCTGCTCTGTTCTTCGACCTCAATCACT TTCACACCAATTCAACTATTCAATCCCAATAGTTCCCATCGTTTCCCAAGATTCGAACTATCTCGTCCTG TCTCGGCTTTGTCTCGTACCAAATGTCACTTGAGTCTCCTGAGAGCTCGTGGGAAATCCAGCTTCCTCAC TCGCAGCACCGCTACTGATGAAGCTGTTGAAACTAGTAGTAACAGTGGATTGGATTTGGTTGAGGTTGGA TTCTTGTCTGGTGTTCATGGCCTTCAAGGCGAGATTTGCATAAAACCAAACACTGATTTTCCTGATTTAC GTTTCTCTAAGCCTGGTAGAAGATGGTTAAAACAACAATTGTTGGGACAAGATAAGATTGATGAGGTTGA ATTAGTC TGGAGCAAGAACAATAAGAAGAAGAGAAGATGGGATTTGAAGAACGGAGGGATTCTATTAAAGGAGCTAA TCGCTTCCTTCGACGGCAAAACCAATCCGATTCGTTGCTTCTCCTCCGATCAGATCCTTAAAGCTACCGA CAATTTCTCCGAAAGCCGAATTATCTCCAGCTGGGGATACTTCATATGGTACAAAGGCGTAATCGAA GCTCTCTCCTCTCTCGCTCGCTGGCTTCGAGGAGAAAAAAGAAAAATTGGAGAAATAATTTAACTGGTTC TCGGAAAATCTAGGGTTCTTTTTAGCCACGCCTTGCTGATCTCCTTCGTGAATTCGATTCCGATTCTCAC CTGAAAAAAACTTCTTTAAATTGGGTTAAAGCTGCTGCTA AGTGTCAAATTCTGAGATCTGTAAAAGATGAGCGACGGAAACGACGCTGCTAAACGCCGTACCGCGGCGG TGACTGATTACCGGAAGAAGCTCCTTCATCACAAGGAGCTCGAATCCCGTGTCCGAACAGCTAGGGAGAA TTTAAGAGCAGCTAA GATCATCTGGTATCCACTATCCACAACTGGGGTCAGCTTCTGGTTCTCTCTCTCGGTAACTTTCTGAGCT GAAGAACCCTAATTCTTATCTTCACCGGATTCCGGGTATAGGGCTTTGTAAAGTTGTTGAATTTACAAAG AAAGATATGCTGGTTTGTCTGGGTTTTGTAGAA TGAATCGTCGTTATCAAGGTGATTTCTTTCTCTGCCTCAAACATCGCTTACCCTCTTGATTGATTCCTCC AATCTTCTTCGTGTGGTTTCACAGGTTTTACTTATGGTTAATGCAATCAAAGGAGTGTTCGTCTCTTGCG ATATTCCGATGACACAATTCATAGTGAACATGAACAATTCGATGCCTCCGTCTCAGAAATTCATAATTCA TGTACTTGATAGTACTCACTTGTTCGTGCAACCACATGTAGAGCAAATGATCCGCAGCGCCATTTCTGAT TTTAGAGATCAAAACTCTTACGAGAAAGCCCACTTCTTAGATCACATCACATTCACACTTGCTTCTTTGT TTTTCTTTCATTT GATCTCCANAATCAAAGATAAACGGAGGAGAAGAGAGCTTCGTCGTCTTCTTCTTCTTCGCCTCCATGAA TCTCCTCAAGACGATTCATTACCAGTCTACCATTACTCGATTTTACCGTTTTGCCCCTACACGCTCCTTT GCTTCTTCTGTGTCACTCTCTCCACAGAGACACATAATCTCTCTCGTTTCTATCTCTAATCGTGGAAGGT GCTTCGCATTCTCGAGCGTCTCTTGGTGCTTCGCTTTATAATAATCAT GGTGTATATAATTGTTCATTTCCTTGAAAACGGTTACAGAATTAGGGTTTTGTTTCTTCTCTCTCGCCGA TTGATCTTGAAATGTCTTCCCCAATTATAATTAGGGCACCGAAGAAGCAACCGCCGGAGCCGCCATGTCT GATTTCGTTACTCCCCGAAGAAATCGTCGTCGATATCGTAGCCCGTGTCCCTAGATGCTATTACCCTACT CTCTCCCAAGTTTCAAGGCGTTTCCGATCACTCGTCGCTTCTCCGGAGATTTACAAGAGACGATCCTTCT TCGGGATGCACAGAAACAATGTCTCTACATCGCAATCTCCAAAGATCAAACCTCT GANTCACTTAACCAAACATGTCTGAAAAGGGGTTGATAAAAAAAGAAGACCACATGTTTCAAGAGGAGAA GAGAAAGACAAACTATGGAGCAATTGGCTTGGCTTGCTTCATTTCTTGTTTCTTTGCATTCCAATTCATG AAAATCGTAACAACACAACCTTCNACAACAACAACATCATCCATTGCCGTTATCGATAGCCCAATGTCCT CCCATAAGCTATCTGATAGGAGAGAAATATGGAGAGTTATCCCACCATCTACCTATTGTCTCAAAATCGA ATCTTTCATAAAATTCGCCACTTCTCCAAACGCC AACCATATAAAGCTTGTTCTTCTCCTTCCTTCTCCAATTTCGTAAGCTCAAAAATTTCGATTTCGATTTT GATTATTGCCAAAGGTTTAAAGATGGATATTTTCGACAACTCTGATCTTGAATACCTTGTTGATGAATTT CACGCT GAACAGAAAATGGAAATGATACTGATCTCGTCATCGACACTCAGGTTCCATCCATTGAGGACATCACAAA GAATCGCCACCGGAACCAATAGAAGACGAACCACCACCGTGTGTGCAGACTACTACAGAGGAGGAAGAAC GGTGGACGANAACATGGTGGTCCTTAGGAAACGAATCCATGAGATGAAGATGGTTGAACGCAACTTTGAA CCTCCTTCTCATTGGATGCAATGGGAGAAACGTTTCTACTGCAACTACGACGCTACTATATGTGATGCAC TCACTCTTCTCCAAACTTTTCTCATGAACTCTCGTCCCAGCGTCGCGTTTGGAACGTGTCTTCTTCTCCT CGTCAGCGTTCCCGTCTCCTCCGCCCGTTTTTGCTTTTCGCATCCTTGATCTACTCTTTGGCTTTTGGAC GCCCGTTC GACCTCCACTTTCCCTTTTGCCCCTCTTTTTTACAGATTTCACTCTCTGCTCTACTACTCTCTCCTCCTC CTCCTCCTAAAGAAAGTTCTTAACTCTCCTGGGTTCTTCAGGTTTTTCCTTTTCTGGAATAAAAAGAAGA AGAAATGGGTGTTCTTGATCATGTCTCTGAAATGTTTGACTGCTCTCATGGTCACAAGATTAAAAAGCGC AAACAGTTGCAGGTACTTTCCCTCTTCCTTTTCTTATCTTAGCAGATTCAGCTGATAACTTAGATCTTGG TTTGCAAAAAAACAAACATAATAATTCGTTGAAAAGTTATGATGAATGAGTCTAGTTAGAAACTAGCTTC GATGGTTACTA TGATCACATCCTCACACACAAAAATAAATCATCACAAGACCAGAGTTAAAAGAGAGACATGTCGACTTCA TTCACAATGATCGGCGGTGAAGGTCCCAACAGTTACCGGGAACATTCGAAATACCAGGGAGCACTGGTTA TAGCTGCAAAGGAAAAGATGAATGAAGCCATCTCCACGAAACTCGATATCGACTTTACTTCAAATCTTGT TAACATAGCTGATTTTGGTTGTTCCTCTGGACCGAACACTTTCACCGCGGTACAAACCTTAATTGATGCT GTGGAAAACAAGTATAAGAAAGAAACAGGGAGCACTGGTTATAGCTGCAAAGGAAAAGATGAATGAAGCC ATCTCCACGAAACTCGATATCGACTTTACTTCAAATCTTGTTAACATAGCTGATTTTGGTTGTTCCTCTG GACCGAACACTTTCACCGCGGTACAAACCTTAATTGATGCTGTGGAAAACAAGTATAAGAAAGAAA TTTTTTGATGATGACAAGGTCTTAGCTTTGGTGGACATAACTCCCCAGGGTCCTGTTCACATCCTCCTTA TTCAAAAAGTGAGGGATGGCCTAACTGGCCTCTCTAAGGCTGAGGAAAGGCACATCGACATCTTGGGCCA CCTACTCTACACTGCCTAACTTTTCTCAAAACAAAAAGGCCTAGCA GACCTCATCATTCTTCCTTCTGGTTAACTGAAAATGGAGTGTAGTTCAGTGAGTGTACTAGGAATATTAC TGGTATTTCCTCTCCTTCATAACCTTGTCACCATCTCCGGGCAGAATCTTCCGGCGGTGGGTTTGTTCAC TTTCGGAGATTCCAACTTCGACGCTGGAAATAAAAAGTTCCTCACAAGTGCTCCACTTCCTCAAAACTTT TGGCCTTACGGTAAATCTCGAGATGACCCTAAGGGCAAGTTTTCTGATGGCAAAATTGTCCCGGACTTTA TTGCTACTCGTTTTTATAGGTACTCTATACTAAATGGAAATTTTGATTGGTAATTAAAGATATATGAAAT TGATGAGGGGTGAATAAATCACAGCAAAATTCATGGGGATACCACACGATTTACCGCCGGCGCTAAAACC C GGTCTTCTTCTTCTACATAAAATTGATTCGCCTCGAAATTTACACAGACTTGTCGCTCTCTCTTTCTCTC TTATTTCACAGAGCCCCTAAACATTTCCAAAAATCTTGCAAAGGAAGAAAAACAATGGACAAATTTTGGA CTTTCCTCACTGCTCTTCATTCAGGCGCTGGGCCTATCGTGATGTTACTTTATCCATTGTACGCATCGGT GATAGCAATGGAGAGCACAACAAAAGTGGACGATGAACAGTGGCTTGCGTATTGGATAATATATTCCGTT CCTCTCACTCACGGAACTGATTCTGCAATCCGCTTATTGAGTGGATTCCGATTTTGGTATACGGTGAAAC TTGTTGTTCGTGGCTTGGCTAGTTCTTCCTCCAGTTTCAAGGGCGCAGCTTTTATCTACAACCGTGTTGT TTAGAGAACAAGTTCAAGAAAACACGGGGGTCCTCCGGCTCCACCCACTCCAAAGCCCACCAAGCCCCAA CATCCTCCACTCCATTTTT GGCTACCAAACTTCGCTAAACTTTAGTGCTTTACTCCAAAACCCAGAGTCCATCACACAAGTCCAAGCCC GAAAACAAGGGTTCTTGCTCCGACACGACAACAAATCCAGATTTTGAGCTTAGGGAAACTTGAGAAGGAG AAAAAAATGTCGAACATAGACATAGAAGGGATCTTGAAGGAGCTACCTAATGATGGGAGGATCCCAAAGA CGAAGATAGTTTGCACATTAGGACCAGCTTCTCGCACTGTTTCCATGATCGAAAAGCTTTTGAAAGCCGG TATGAATGTGGCTCGCTTCAACTTCTCACATGGAAGCCATGAATACCATCAAGAGACACTCGACAACCTC CGCTCTGCTATGCAA GGTTTTTTCGTTTTTGTTAACTTCGCCGTGTAGTTGTGGTGGTGAGATTGTGAGAGATATGGAGGCGGAG AAAATGGAATTGAAGCTCTACAACACGATGACGCAACAGAAAGAAGTTTTGATTCCAATCACTCCTGGCA AAATCGGATTATACGTCTGTGGTATCACCGCTTACGATTTCAGCCATATCGGCCATGCTCGCGCCGCCGT TTCCTTCGATGTTCTTTACAGATACTTGAAGCATTTGGATTATGATGTTACTTTTGTCCGCAATTTCACT GATGTTGATGACAAGATTATTGATCGTGCTAATAAGAATGGAGAAGACCCGTTAGATTTGAGTAATCGGT TTTGCGATGAATATTTGGTAGATATGGGTGCTCTGCAGTGCCTCCCTCCCACCCAACAGCCTCGTGTC CTTCCATTACTTTCTTTGCTTAAAGTTAATAACATTGGTATTTTGTTTAATCTCATCAGCAAGACTTTTT AGATCTTAGGACAGCAAAAGAATTTAACTTATTGTTATGCACTGGAAACGAAAGTTGAAAAAAAAAAATC TTATTTCCAAATGAGATCACCCATGAACTTAAGTGCGGGAACCCCTCTTATCTCTGCGTCTAGCAATGGC GATTGGATCAATTTTAACCCCGAAAGTTCTGTATCATTCTGAATAAGTCCAAGCACACGCGTTTGTTCCT TTCGTCTTATTGAGCAAAATTTGCAATCGGATTCAGATTGAGGTAGAAGCTGATTAACAATAAGCCGGTG GACTGGCACA TCGAAAATGGCGCAGCGATCTAGGGTTATCACCATGTCTCCTCTCATTCTCGATCAAGAAGTTGATCTCG ATCTCTGGGAAGTTGTTAATCCTTCTGATGGAGAGTTCTCCGACGATTCTTTCTCCGTCGATAGTCTTTC CGACGATGACGTCATATCTCTTGACGACGCTTCCTTTGTCGCACCCTCTGTCATTTCTCCGCCGCATGAG ATAATTCCTATTGCTGACGGTGGTGATCTCGCCGNGGATCTGGATGGTGATGATGATGTTGGNGATGATG TCGNTCGCGATGAAGTTGATGAGAATGA ATTTCTGATCATTTACACCCCTAAAAAGAGTAGAGCTTTCGTGAAGCCACCATGTGTGGAGGAGCTATAA TCTCCGATTTCATACCTCCGGCGAGGTCCCTCCGCGTCACTAACGAGTTTATCTGGCCGGATCTGAAAAA CAAAGTGAAAGCTTCAAAGAAGAGATCGAATAAGCGATCCGATTTCTTCGATCTTGACGATGATTTCGAA GCTGATTTCCAAGGGTTTAAGGATGACTCGGCTTTTGACTGCGAAGACGATGATGATGTCTTCGTCAATG TTAAGCCCTTTTCGGTCTTCACCGCAAACTACTAAGCCCGTAGGCTTCCCGCTTTCGTCTTCCACTGGTT CAGCATATGCCAAGAAAACTGGTAGAGTCCGCTGAGCAAGCTGAGAAATCTTCTTAAGAGGGAGGAGGGA GGAATCAATTCCGCGGGATTTAGGCAGCGTCCCTTGGGGGAAAATT GGTGGTTGTGTGGTGGTAGTAACACTAAAGATAGAGCAGAAGAAAGAGTCAATTCCTAAAGGATCTTCTT CACTTAGTCCTTCACTGAAGAAGACTACTACTAGTAAGACTGGTTCTTCCTCTTCATCAGTGAAGAAGAC CACGAGAGGATGGATTGGTAGAGGAGGATCAGGATCAGGAGGGGAAGAGGATAAGATTGGGAATGTGGCG TTTCCTGAACCTGATGATCCAGAGTGGT AGATAAATAATCTTCACCTCTACCATCGAAGACAAGTGGGATAAAACTCTCGCCTAAAAACAAGCAATGC CATAAGGCCCATAACCCTTATTTGGATTAATCTGTGAGGTGAAACAATAGCAGCAACTACATATGTATCA TTTAGCTCTGTGAGAGCTCGCGGCTTCGTTTAGCTGCAGCAACAACTGCATTCATAAGTGTTGCCCGGAA AGAGCCTTTCTCTAGTTCATGAACTCCGGCTATTGTAGTGCCGCCAGGTGAGGTAACATCATCTTTCAAC ACACCTGGGATGCTTCCCAGTTTGGCTAACCATCGTTGCAGCTCCAAGGAACGGTCTGTGAAGCTAAACT CAATGCAAGCTCTCGGGGGTAAACCAGCAGGTACTCCTCCATCGGCTTAAAGCTTCCAATTGGCTAAAAA TTTGT CGGACGAGGAGCATACTTTCCTTCTTATTTAGGTATGATGCTTGTTATAACGTGGGCGATCTGCACCTTC ATCGAGCTTCTGTCAATGTGGAATTTGACGAGACGAGAAGTTCAGCTATGCAATATGTTATCCCCTGAGG CTCCCCGTCTCTCTCTTGCAACTTACAACTGGGGACTTGTTTTTGTAGCAATGCTTGTAGACAACTTCCT ATATCCGATATCAGCTTTCCGGTCTCATTTTTCTCAATCCATAAACTGGTCTGGAATCAGATACCACTTG AAAGATGGAAAGATATTCACGATGGAGAGACGAAAGGATATGGGACCAACAAAGACTGATTTAGGAGGCA AACATTTGTTTGGTAAGAAAGGAGCTCCCTCAGAAAGCTTCATTCCT TCAACCGTCTTGTCAGGCTTCACAACAGCTGGGCTTATCCTACTCGCTAAGCAGCTTTCATCAGAAAAAG AGTGAATTCATAATCCTTCAGGGGTGGTCTCTATTACTCTCATGTACAGTGCCAAATATTCAAATTTACA ATAGCAAATTTTTCTACTTCCTCTGTCTATGCGTTAAACTATGGAATGTGTTGAGTGTATATTCTTATAG AGAAAACGAAATATCTTTGTTATGAATAATTGAAGTTTGCCA CCGGTCCTCAATATAAGAAAACTTGACAAAGAAGAAACACAATGTCTATTGCTCATAAAATTTGGAGAGA CTCGAATACAAAGACGGGTAAAAAGTCTGGGAAAAATAAAATCTGAAAATTGTWTCACTGGTCACCAGGA ATTGACTTGATAATGTCAGAATCACCAGGATCAACAATGCTCAGACAAGAAACACGGAAGTACTTTCCGC AAGCTGTTCCCAAATCAACGTTATTTCCATTGTAATGGTGGACACCAACTTTAGCGAGCATTGCGTAGTA CTCAATCTCTGATCTTCTCAACGGTGGGCAATTGGTGGAGATTAGAATCAGTTTCCCTTTGGAGCCACGG AGGGATTTGAGAACAGACTTGTAACCAAGAGTGT CGCTTAGCTACTGGCTTCACTTATCTCGGCCCCAAATTTATGAAAGAAAATGGCATAAAGCATGTGGTGT TTTCAACTGCAGACGGAGCACTGGAGGNAGCTCCAGCGATGGGGATAGCTGANGCCATCTTGGATCTCGT GAGTAGTGGTATAACACTCAAAGAGAACAACTCGAAAGAAATTGAAGGAGGTGTTGNGCTGGCAAAGCCA GGCGGCA GTAGTTTTGTTCACTTTCGGAGACTCTTACTACGACGCCGGAAACAAAGTGTCTCTCAGCCAAAGGAAAG ATCTCCTACAAACCTATTGGCCCTACGGAAAATCCCGCGACTACCCCAACGGTAAGTTTTCCGAGGGACA CATCGTCCCCGACTTCATCGTTGATTTCATCTCTATCCCGAATGGAGTACTCCCACCGGTGTTTATACCG GGTGTTGATATTTCACGTGGAGTCAGCTCTGACGCCGTCGATGCTTCT TGTTCGCGAACTCGTCAAATTACTTGGTTGAATCTGAAGGTGGTGGGGTACCTCTCCCATCAGGAGGCAT TCTTACTCCTAAGGGTCTTCAAACTCTTGGTCTTTCTGGTTTAGGATCAAGTACTGGTTTTGAGCGYCTG CATTATATGTTGGAGAGAGTATGGGATCCTATTTTAGTTACTGGMGCTCCAAAGTGTATTAGYCAGTCCT TCTTAAACGCTTTTGAGAGTTGGCATTCTTTTGATACAAMTCCACTATATGCTCTTCTCCACGAGGCCAT ATACTGTGGAGGGTGCTTCATCAGGATGGTCTGCTCATMGATTACGGGATAAATATGAGTACAAATTCGA CGCAA CAATCTTCAAAATCTCTTCCTTCCATGATTCCGTTATCGTAAAGATTTGTCCTTTATCCAAATTTTAGGA TTTTGAATTCTTCTTCTTTCCGATTACCGGATTCCAATGGCGCCTTTTGTTGAAGTCTGTAGGTATAAGC CATTACCGCTTTCATTGAGCTCTCTCTGTACATGCCCTTGCCGTTCCTCTCCAAGGAAATATCTAATNCT TCCTCAATTCTCTGAAAAGTACCCGAAACCATTGTTGTCTCATTCTCGCTTTACTCCGATTTCTGTTAAC CGGAGAGTTATCACGGCCGTT AAAAAAATGGGATCTTCACCACCGAAGAAGACGACTCTGCAACGGTACTTGTCACAGCTTCAACAACATC CTTTAAGAACAAAGGCAATAACTGCTGGAGTTTTGTCTGGTGTTAGCGATGTTGTATCACAGAAGCTCTC TGGCATACAGAAGATTCANCTGAGAAGGGTTCTNCTCAAAGTGATATTGCTGGTGGGTTTCTTGGACCAG CAGGGCATTTCTT TAATCACGAAAGAGGGGCTCGTCCAAATCCTGTGAAGGAAAAAGAAAGAGCTTCAGAAAGGGAATGGTCT GGTTCATCTGATAGAAGGAATCGTGAGGATAAAGATGCTGGTTATGAAAGGGACATACCGAGGGAGAAAG ATGTTGGTCACGGTTATGATATGCCAGAGAGAAGGCATCGTGATGATAGAGACACCGGTCGTGAGCGTGA GAGGGAACATCATCATAAGGATCGTGAACGTTCAGAGAACATGTTCGTGA AAACTTACACTTCATTCAGTTGCAGCCAAGATTCATTACCTGAATTTGCTAATAATCCTATCACTCCATG CGACCTCGATATCTTGATAGCAAAACTCGCCCCTGGTCAGGAAATCGAGCTCGAAGCTCATGCGGTTAAG GGCATTGGTAAAACACATGCAAAGTGGTCTCCAGTAGGGACTGCTTGGTATAGAATGCATCCTGAGGTGG TTCTACGTGGGGAAGTTGAGGATGAACTTGCTGAACGACTTGTAACGATGCCCACAGAATGTTT CTCTGAGCCACAAGAAGTGTTTTTNGTNGAAGGATCTACTGAACTGGTTTGTAATATGGGGGAAGATACA AAGGCAACCATTGAGCCAACCGCAAACAAGACTACTTCTCTTGAAAAGCCATCAGAGGCTATGGCTGGAA AGGAGAATGCTGGGGGTAAGGAAACACAAGANCTGGCGAAAGATGAGGATATGGCTGAGCCAGACAATAT GGAGATAGATGCTCAGATTAAGAAAGATGATGAAAAAGCTGAGACGAAGATAAGAGTCA AAATAATTGAGTTTTTTTTTTAATTAGAACAATGGGGTTGAGTGGTGTTCTTCATGTGGAGGTTGAGGTT AAGTCTCCGGCTGAAAAGTTCTGGGTAGCCTCGCGACGGCATCAATCTCTTCCCCAAAGCTTTCCCTAAC GACATCAAAACCATCCAAGTTCTAGCCGGCGACGAACGCTCCTGGCTCCATTCGCCTCATTACTTAGGAG AAGGTCTCCAC GAGAATGCTTGCCTAGAAAGCTATCAAGCGCAACGAGCCTTGGAAGCATGGAGGAGAGCTATTTTCTGCA AGCTTCTCTTGATTCTTCAGATAAATTTTCTGAGAGCACGTGCCTGAGGCAACTATGAGTCCGTACTACA TGAAGAGCATCACACCGAGTGCTTATGAAGCCACACTTCGACAGAAAGAGGGTGAACTTGCGGCATACAT GACCCGCTTGGCATCAATGGAGTCTATCCGAGATTCCCTGGCTGAAGAACTAGTCAAATGACAGCAGAGT GTGAGAGCTACGGGGAGGCAGATAGGTCCGGCATAAGCAGAGCTGGAA GAAAGCTGTTCGATCAACAATACTAGAAAACCTCCCAAATACTGCAAGGAAAGCTAACAACACAGGAAGC TTCTCTTTTGCACCTATCGTACACAACAACATCAACAACAGAACACCAATAGAGATCAACTCTCCTATGA GATTCCCTCTCTT GCGGTGATAGCAGAAGTGGATCGTGTTTTGAGACCGGAAGGGAAACTGATAGTTCGAGACGATGCGGAAA CAATACAGCAAGTGGAAGGCATGGTGAAAGCAATGAAATGGGAAGGTTCGAATGCTTATTCTAAGGAAAA AGAA AAGAGAATAAACAATGGTGGGTTCTCACAAAGCAAGCGGAGTGCTTCTTGTGCTACTAGTGGTTATGGCC ACCACAATAGCAAACGGGACACCGGTTGTCGATAAAGCAAAAAATGCAGCTACAGCAGTTGAAGATACAG CAAAAATGCAGCTACAGCAGTTGGCGGTGCAGCTGCATCAGTTGGTGCTAAAGTATCAGGTGCCAAACCA GGCGCGCATCGATGTTAAGCATCAGGAGCCAAAGGAGACGGCAAACTGATGAATG CTAGCCTCTCTATCTTTATCTCTCACAACAAAATCTTTGAAATGGCGATCTCTAAGGCTTCCATTGTTGT TCTCATGATGGTGATTATCTCCGTCGTTGCATCGGCACAATCTGAGGCACCAGCACCAAGTCCTACTTCT GGATCTAGTGCGATCTCAGCGTCTTTCGTGTCAGTGGAGTTGCAGCAGTCG CCTATGACGGTACCGCCGCCAAGTATGGAACCGTTGATAGCGCCTCTCTCATTATCTTATCCGACTATTT CATGGCCGTTAACATCGTCGTTAACAACACTGCGCCACGACCAGATGGTAAAACTAAGGGAGCACAAGCT TTATCCATGAGAATCTCCGGAAATTTGCTGCTTTCATCAAACTGCAAATTCTACGGTTTCAAGACACAAT CTGTGACGATACAGGAAACATTCTCAAGGATGTACGTCGAG GCACGAGGACCCTTCTCTTCAATTCCCTCTAAAACCCTAACCCCACACCAAAAGTCTTCCTTTGAATCAA CTCTCCACCATTCCCTAATCACCCACGACACTGATGAAGCATGGAAGGTCTTCCGATCCTTCGCTGAAGA TTCTTCTCTCCCGGACAAGCGTCTCCTCAATTCTCTCATCACCCACTTGTGCCTCCTTCCACAACACAGA TCAAAACACCTCCCTCAGGCACAGACTCAAGCGTGCTTTGTTCACGACGG CTGTCTTGAGCTTAANATCTACGGTCAGTGGATGTCCGGTGGTCAACGACGGCTCTCCCGGGTCGCCAAC CCGACCAACCATCTCTCGGTCGTTGGGAACTTTGTTGGGGCCTTGCTTGGTGCGTCCATGGGGCTTAGAG AAGGCCCTATATTCTTCTATGCTGTTGGGATGGCTCATTACTTGGTTCTNTTCGTGACTCTCTACCAAAG GCTACCGACCAACNANACTTTGCCTAAAGATCTTCATCCTGTCTTCTTCCTCTTCGTTGCGGCTCCAAGT GTTGCTTCCATGGCTTGGGCTAAGGTCACTGGCTCCTTCCATTATGGCTCCAAAGTTTGTTACTTTATCG CCATTTTCCTCTATTTCTCATTGGCTGTTCGGATCAATTTC GGAACAGGAAACATAGGGAAGAGTGATGCCAATCTAATCGTGGCACTGATCTACATCTATGTAGCGGGTT TCGCGTGGTCATGGGGACCGTTGGGATGGTTGGTTCCTANTGAGATATCTCCACTAGAGATCCGATCAGC AGCTCAAGCCATAAACGTTTCGGTCAACATGTTCTTCACATTCCTTGTGGCTCAGCTCTTCCTCACTATG CTTTGTCACATGAAATTCGGACTATTCTTCTTCTTCGCCTTCTTTGTTGTCATAATGACAATATTCATCT ACTTGATGTTGCCTGAGACAAAGAATGTGCCAATCGAAGAGATGAACAGAGTGTGGAAGGCACATTGGTT CTGGGGAAAGTTTATTCCTGATGAAAGCTGTCAATATGGGTGCTGCTGAAATGCAACAGAAGTCCGTATG ATGATGATCAAG ATTTCTGTCTCTGTGGAGACAGCTGAAGAAGCAGCAGCACTATCAATGGCGTCTCTGAGATTGTTCTCAA CGAATCATCAATCTCTTCTCCTTCCATCATCTCTCTCACAAAAGCCTCTAATATCTTCACCAAGATTCGT CAATAACCCTAGCAGACGGAGTCCAATACGATCCGTTCTTCAATTTAATCNCNAACCGGAACTCGCCGGA GAAACGCCGCGTATCGTCGTTATCACCTCCGGAAAAGGCGGTGTTGGAAAGACGACAACCACCGCAAATG TCGGTCTCTCTCTCGCTCGTTACGGTTTCTCAGTTGTCGCCATTGACGCCGACCTTGGTCTCCGTAACCT CGATCTCCTCCTAGGGTTAGAGAATCGAGTCAATTACACTTGCGTCGAGGTTATAAACGGAGATTGTCGT CTCGATCAAGCTCTGGTACGTGATAAGCGTTGGTCGA GGAAAATAGGGAAAGCCATGCGCATAGAGGTTGATCGAAGTGGAATGATTCCAAGGTTGAGGTTCCATGA TCGTGAATCGTATGCAAGCAATAAAACCAAGGAGTATGATGACATTGCCATCAAATTCTTATCCTATGTG CTCCTCCTCCTTGTCATTGGCTTGTCCATATATTCTCTCGCTTATGAACGCCACAAGAGCTGGTATTCTT GGATACTATCTTCACTAACAAGCTGTGTCTACATGTTCGGTTTCATCATGATGTGTCCTCAGCTATTCGT CAACTACAAGCTAAAATCAGTGGCACATTTACCATGGAGACAGATGACTTACAAGTTCCTCAACACCATT ATCGACGATCTCTTTGCCTTTGTCATCAAAATGCCGATTTTACATCGACTTTCTGTATTCAGAGATGATG TGATATTCTTGATATACTTATAC TGATTTCTCTACCACTCACTACACCGATTTTACCCAGCCGGTGTCTCCTCCACAAAACCCGCCGGCAAAA CTCGACTCGCCGCCGCTTATTGATTCGATCATCATCGAGCTTACAAGACCAATTCACCGTGGAGACGACG AAGCGAGTGGTTCTTGTGAGACATGGACAGAGCACGTGGAACGAAGAAGGGAGGATTCAAGGAAGCTCCG ATTTCTCCGTTTTGACGAAGAAAGGCGAGTCTCAGGCTGAAATTTCTCGTCAGATGCTCATCGACGACTC CTTCGATGTCTGCTTCACCAGTCCATTGAAGAGATCAAAGAAAACAGCTGAAATCATATGGGGAAGTAGA GAAAGTGAGATGATTTTCGATTACGATCTCAGAGAAATCGATCTCTACTCTTTTCAANGTCTACTTAAGA A ATCCCATTGTGCAAGATCAATGGAGTGAACCAGAGTCAGAACACAAAGAAGCCATCTCAAAAGTACCTTG AAATAGTCACAATCGATAACTTCGACTTCTGGTTCATGGGATTCGTGAGCTACCAGAAAGCTTTCAACTG TCTCGAGAAAGCGCTAAACAATGATGAGCAATAAACCGCAGTGGTTTTCTCTGACGGAGCTAATTAGTGC AGGTGGAACAAGAAATATTTCATTTCTACTTTCCCCTGTTTCAGTCAGAGAATGTTTGTACAAACTCACA AATTCTTTTTTTTTGCTTTACCCACTTTGGTTTCCATTGTAGACACGAGAAAGAGATGAATATATTTAGT TGATCTCATCTGTTAACCTT genometools-1.5.1/testdata/at1MB000066400000000000000000036406071211610345200165240ustar00rootroot00000000000000>gi|5587835|gb|AF078689.1|AF078689 AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence AGTGGCTACGGCGGCGGTGGCGGCGATGGAAGTAGACGGATGGTGGTAGGAATGAAAGGCTAGAAGCGGC GGAGAAGTATGTGGATAAGAAATAACAAAAACTGAGGGGATCATGAAGTTCTTCGTTATATTATAGTTTT CAATCTGAATTTCAATTCCGCCGCTCGCCTTTTTCCTCTCCGCCTTTTCCGTCTCTCCGATCTGCTCCCG CCGCCGACCTTGTGATGATTATAGCTCTGAAGGTCCATACAAGGATATAAAAAAAAAAAAAAAAA >gi|4714049|dbj|C99932.1|C99932 C99932 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 88, mRNA sequence ATGRAYAMTCAAAAATGGAGTMTAGGTTTCATATCTCTCGCTTTTCTCTTCATCACTTCCTCTTCAGCTG AGTTCATCATTCAACAGGTCACAAAGGGCARAGGAATAGAGTACAACAGTTCTTACAGTCTCGAGGAGAA TCTTGGAGTGACRAGAGAGTTGAGAGAAGAGCGACCATCGAGTAAGATAGTGACAATAACAAGCTTCTCA GTGATTAAAGGCAGAGGAGAACCCTATGAATCCTCTGTTTTTGAGGCTGCTGGTTACAAATGGAGATTGG TTTTGTACGTGAATGGTAATAAAAACGACGGTGGAAATGATCATATTTCCCTTTACGCAAGGATCGAAGA GACAAACTCTCTTCCATTAGGTTGGGAAGTGAATGTTGATCTCAAACTCTTTGTCCATAATGGGAAGCTA CACAAATATTTGACTGTTACAGATGGCTTARTTGAAGCGATATAACAATGCSAAAAAAGAATGGGGTTTC GGACAATTGATTCCTCNATCAACATTCTACAACGCGAACGAAGGTTACCTTTGACCAAGGACACTGGTTC CTTTTGGGTGGCYGGAAAANCCTTTATTGTTTAAACCNGSTCCACCAACMAARAAAAWWAYTTTCTWTYM MTYYTCCAACAYSYTYCCCWWCSAATGTTTTTTCCCTTNGGAAAAANACCTNCGTTTCCTCCTACCTTTG GGAAAAANAAANTTCNTTTTTACTCCCGAATGAATTTTCCCCCTTTGNAAAAACCGAATNCCTGGTTGGA CTTAGGAATTTTAACCCCCNAAAGGGGGAATGGAANGAAAGAAAAAACCCCTTTGCCCNTTCCCAATCCT TCCCTANTTTGC >gi|4714048|dbj|C99931.1|C99931 C99931 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 87-1, mRNA sequence GTGARTGTTGATCTCAAACTCTTTGTCCATAATGGGAAGCTACACAAATATTTGACTGTTACAGATGGCT TAGTGAAGCGATATAACAATGCGAAAAAAGAATGGGGTTTCGGACAATTGATTCCTCGATCAACATTCTA CAACGCGAACGAAGGTTACCTTGACCAGGACACTGGTTCTTTTGGTGCTGAGATCTTTATTGTTAAACCG GCTCAACAACAAGAGAAAGTTACATTCATATCAAACCCTCCAAACAATGTTTTCACTTGGAAGATACTTC GTTTCTCTACCTTGGAAGATAAATTCTATTACTCCGATGATTTTCTCGTTGAAGACCGATACTGGAGACT AGGATTTAACCCGAAAGGGGATGGAGGAGGAAGACCACATGCACTTCCAATCTTCCTATTTGCTCAAGGC CATAAGGCAAATGCAGTTGCTACAAACACTTGGGGAGCGGTTAATCTGCGGTTAAAGAATCAACGAARTT CTAACCATAGACAATATWTCTGCACTTGGTACCCATTGGAAACGTTATGGTKTGGGAKTAACATATCTAC TGTTGCTGATTAACGAGCATCCAAAGGATTTTGGTGATGAGCCYTATCTTGAACTGAATGGTTAAGKCCT ATACCACTCTCTCCCTWAATTCTCCTTCTTNTCWCNACATCNCYTTRATAAAAAATTTATTGATAATTTT TTARAAACTTATTTTTKTA >gi|4714047|dbj|C99930.1|C99930 C99930 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 86, mRNA sequence GTGAAGCGATACAACGATGCAAAAAAAGAGTGGGGATTCACACAATTGATTTCTCTTCCAACATTCTACA ACGCGAACGAAGGGTACYTTGTGCAGGACACAGCTTCTTTTGGTGCTGAGATCTTCATCGTTAACCCGAC AGAAAAACAAGAGAAAGTCACATTCATATCAAACCCTCCGAACAATGTTTTCACTTGGAAGATACTTCGT TTCTCTACCTTGGAAGATAAATTCTATTACTCTGATGATTTTCTCGTTGAAGACCGATACTGGAGATTAG GATTTAACCCGAAAGGATCTGGTGGAGGGAGACCACATGCACTTCCAATCTTCCTATATGCTCAAGGCCA TAAGGCAAACGCAGTTGTTACAAACACTTGGGGAGCGGTTAATCTGCGGTTAAAGAATCAACGAAGCTCC AACCACAAACAATTATATTCTGCAGCTTGGTACCCCGATTCGAAGCGATTATGGTGTGGGAGTGAACAAT ATCATATTGATGTCAGAAGCTAAAAGATGCATCMAAAGGGTATATGGTGAATGATGCCATTATCTTTTGA AACTGAAATGGTTAAGGTCTCTGTGAACAACATARTCTCCSCTTAAATATATNTCACTACTTCTTTATCC CCCGNAATAACCTTACAAAGAAAAATTGATGATTTAATTTGTTATACNACACTTTATTNATGCCTGTGAN GTAACCTTGTTTCCGCTCCCCNAATTTCCTTTTTTTTCCTGTTTTT >gi|4714046|dbj|C99929.1|C99929 C99929 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 85, mRNA sequence TCAAAATATGGATAGTCACAAATGGAGTCTAGGTTTCACATTACTTGCTTTCCTCTTCATCACTTCCTCT TCCGCTGAGCTCATCATTAAACAGGTCACACAGGGCAGAGGAATAGAGTACAACAACTCTTACAGTCTCA CGTCGAATCTTGGAGTGACGACAAGAGAGTTGAGAGACGAGCGACCATCAAGTAAGATAGTGACAATCAC AAGCTTCTCTGTGATTAAGGACAGAGGAGAACCCTATGAATCATCTATTTTTGAGGCTGCCGGTTACAAA TGGAGATTAGTTTTGTACGTGAAGGGTAATCCGAAAGGCGGTATAAATAATCATATTTCACTTTACGCGA GGATAGAAGAGACAGAAACTCTTCCAAGAGGGTGGGAAGTGAATGTTGATCTCAAACTCTTTGTCCACAA TCGGAAKTTAAAGAAATATTTGTCTGTTACAGATGGAACAGTGAAGCGATACAACGATGCAAAAAAAGAG TGGGGATTCNCACAATTGATTTCTCTTCCAACATTCTACAACGCGAACGAAGGGTTCCTTGTGCCAGGAC ACARCTTCCTTTGGGTGCTGARAACTTCATCGTTAACCCGACCGAAAAACCAGAAAAAATCCCTTTCTTT TCAAACCCCCCGAAACATGTTTTTCCCTTTGGAAAAAA >gi|4714045|dbj|C99928.1|C99928 C99928 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 84, mRNA sequence GGAAGTTAAAGAAATATTTGTCTGTTACAGATGGAACAGTGAAGCGATACAACGATGCAAAAAAAGAGTG GGGATTCACACAATTGATTTCTCTTCCAACATTCTACAACGCGAACGAAGGGTACCTTGTGCAGGACACA GCTTCTTTTGGTGCTGAGATCTTCATCGTTAACCCGACAGAAAAACAAGAGAAAGTCACATTCATATCAA ACCCTCCAGACAATGTTTTCACTTGGAAGATACTTCGTTTCTCTACCTTGGAAGATAAATTCTATTACTC CGATGATTTTCTCGTTGAAGACCGATACTGGAGACTAGGATTTAACCCGAAAGGGGATGGAGGAGGAAGA CCACATGCACTTCCAATCTTCCTATTTGCTCAAGGCCATAAGGCAAACGCAGTTGCTACAAACACTTGGG GAGCGGTTAATCTGCGGTTAAAGAATCAACGAAGTACTAACCATAGACAAATATATTCTGCAGCTTGGTA CCCGATTGGAAGCGGTTATGGTGTGGGAGTGAACAATATCATACTGTTAGCTGATTTAAACGATGCATCA AAAGGATATTTGGTGAATGATGCCATTATCTTTGAAGCTGAAATGGTTAAGGTCTCTATAACCAACATCG TCTCCGCTTAAATATCTGCACTTCTTTGTCTACGATCAATCAACCTTATGAATAAAGAGATATTTGATGA GTTTGTAATAAGAAAACGTTAATGTTTGTGAATTGTGAAGTTATTACTTCTGTTCTTCTGAGTTTTTTTA TTTCAATGAAAATAAAACTCTTACCGGTTT >gi|4714044|dbj|C99927.1|C99927 C99927 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 83, mRNA sequence GTGAAGCGATMCMWCGATGMWMAAAAMKARTGKGGATTYRCAYRATWGATYTCTCTTCYWMYATTCTWSW MCGCGAAYGAAGGGTACCTTGTGYASGACRMWSCTTCTTTYGGTGCTGAKATCTTCATGCGWTAMCCCGA CAGAAAMACMMKAKAWAGTCWCATTCATATCMWACCCTCCRAACAATGTTTTCACTTGGAAGATACTTCG TTTCTCTACCTTGGAAGATAAATTCTATTACTCTGATGATTTTCTCGTTGAAGACCGATACTGGAGATTA GGATTTAACCCGAAAGGATCTGGTGGAGGGAGACCACATGCACTTCCAATCTTCCTATATGCTCAAGGCC ATAAGGCAAACGCAGTTGTTACAAACACTTGGGGAGCGGTTAATCTGCGGTTAAAGAATCAACGAAGCTC CAACCACAAACAATTATATTCTGCAGCTTGGTACCCGATTCGAAGCGATTATGGTGTGGGAGTGAACAAT ATAATATTGATGTCAGAGCTAAAAGATGCATCCAAAAGGGTATATGGTGAATGATGCCATTATCTTTGAA GCTGAAATGGTTAAGGTCTCTGTGACAAACATAGTCTCCGTTTAAATATCACTACTTCTTTTTCAACAAC AACCTTACGAATAAAGTGGACTTTGATGAGTTTAATTTGTTATACGACAACGTTGTTGATGCTTGTGATG TAATCGTTGTTTCTGCTCTCCGAGTTTTCGTTTTACTTTTTTTTTCATGTTTTGCTATCAATGAAATAAA GGTATAAAACTCTCTTGGTTTTAAAGT >gi|4714043|dbj|C99926.1|C99926 C99926 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 82, mRNA sequence GGAAGTTAAAGAAATATTTGTCTGTTACAGATGGAACAGTGAAGCGATACAACGATGCAAAAAAAGAGTG GGGATTCACACAATTGATTTCTCTTCCAACATTCTACAACGCGAACGAAGGGTACCTTGTGCAGGACACA GCTTCTTTTGGTGCTGAGATCTTCATCGTTAACCCGACAGAAAAACAAGAGAAAGTCACATTCATATCAA ACCMTSSWRMCMRKRTYYTCACTTGGAAGATACTTCGTTTCTCTACCTTGTCACCTAAATTCAATTCATC GTACCCGGATCCTCGATTCTTTTGCTTTTTACCCTGGAAGAAATACTCATAAGCCACCTCTGTTATTTAC CCCCAATCTTCACAAGAAAAA >gi|4714042|dbj|C99925.1|C99925 C99925 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 81, mRNA sequence CGTCTCCATACGTTGTTCCCGAAGACATGTCCTTGACAAAGGTATACAATCTTTTCCGGCAACTTGGGTT GCGACATCTATTCGTTGTTCCCCGTCCTTCCCGTGTGATAGGCTTGATCACCAGAAAGGATTTACTGATT GAGGAAAATGGGGAATCATCAGCAGTGGAACTCCAACAGTCAACTAGTAGGTCGGTACAGTGAGACAGCA ACGCGGATGGACGCTGCACGACCGCTTCTAGACGATCTTTTAGGTTAATAAAACAGACCAAACATATACA AGCAGTTGAAGCTGGTAGCTAAGATCTTTAGTCGGGCCAATTCTTCGTCCATACAAGGATACAAGCTTGT TCCGCATGTTGCCACCCAAATCCGGTATGGAGGATATATGATCGTCTCTTGAGATGGGATTGTGTTGTTC GCTAACCGATCTCATTCTCCGTTCACAGAGAGTAGAAAGATTATATATGTTTAAGGCTTTTGATTGTTGT AATTGTGCAATCTTTGAWTATTTTCTTGGTCCCTGTAAAATAATCCACCTTTTGATATATTTACTTGATT AACTT >gi|4714041|dbj|C99923.1|C99923 C99923 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 79, mRNA sequence TCTGNTCCGTCTNANACATCGNATCAGGTGGNGNGTACAATCATCTCNCCGTTCANTAGGTGTTTACGGA TTTCNGCGGTCGTATANCTNGCNTGACTAAGGCTTTAACC >gi|4714040|dbj|C99922.1|C99922 C99922 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 78, mRNA sequence GGTRAGATCTACSTTGCTGGAGGTGGTGGTGGTTCGGAKGTTGCGGCGGCGGTGGAASTAGTATGATCCG GAGTTGAATCGGTGGGAAGTTGTGACTCAATCGGCSAGGAASAGATACGGTTGCATCGGAGCAGCCGTTG ACGGAGTTTTTTATGTGATCGGTGGATTGAAAATTGGGAATGAGACCTCACGCGCGGTGGCGGCGCGTGC TTATGCGAGCTCTATGGATCTTTTCGATGTGGAGTCGCGTCAGTGGTTAAGGAGTCGTTCGGTTCCTGGC GGTGGATGTGTAGTGGCGGCGTGTGCGGCGGTTGGATATGTGTATGTGCTAACCAGTCACGCGGTGGAGC TTTCGTTTTTGGCGATTTGATGCGCGTCGTCGTGGTGGAAACACCGGGTTTGGAAAAATGGCAGAAGCTG AAAAGTCCCCCGTTACCGGCACAAGGTGCSGGTTAAGATGGAACCGGTGAAGGTTTAACCTGCGTCGGAG TGGAAGATAAAGTGGCGGTGGTTCAGGTGGTGGGATGCATTGACGATTTGCTTCGGCGGAGTGGGAGGGG TGAGAGAGGGATTAGAGAAAGCCTTGTGTTGCTGTATGATACGACGGAGGGAGAGTGGAGGAGAGCGGCG GATTTACCTGAGATGATTACACGCGCCGCCTGTGCGTGTGTGGAGTGGTAAGAGNGGAGACCACGGCGCA GGATTATGGGTACGAGAAGTTGGAAGATGCTAVCGTACGCAGGATATATTAAAGTGGGCAAAAACAATAT CATTATGATTGGTGCACATGTTTACTGTMTGAAAAGCAATAGCGT >gi|4714039|dbj|C99921.1|C99921 C99921 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 77, mRNA sequence CGGGGCTTCTRAAAGACNCAATCTNATGTACTCGTACATGCTANGTNCTATCTCTTCTATAATGTCTNAT CCTTTCTGCCCTCCCACWCGTTNCCGTAGCCKCAAAWTCTCCTKTGAYATTTMCCTGMTCAGAYTGTCCT GATGGATGSGGAYGTTCACMTAGATACCAAAGCACAAGAAATTCGAAGGTGCTGGAGAAAAGGCGACCAC TTTCACTAAGAGCATTTGGCTCGAGGAAGCTGATGCGAGYGCCATATCCGTTGGTGAGGAAGTAACTTTG ATGGATTGGGGAAATGCTATCGTAAAGGAAATCMCMAAKGACGAGGAGGGTCGTGTCACTGCCTTATCTG GTGTCTTGAATCTCCAAGGTTCTGTWAAGACTACAAAGCTGAAGCTGACATGGCTTCCTGATACTAATGA ATTGGTCCATCTCRCMTTAACAGAGTTTGATTATCTAATCCCCMANAAGAAACTGGAANATGATGATGAA ATTTGCTGATTTTGCTGAATCCYMMCCCNAAAAANGAANACMTTTGGCMCTTKGGTNGATTCCCAATATT GAGAGAATCTTGAAATTGTTGGAAAATNTTTATTCCCCCTTT >gi|4714038|dbj|C99920.1|C99920 C99920 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 76, mRNA sequence TCAGCTGTTTCGTTCAACGATCTAAACTATCTCAATGCTTCTTTGAATCTATTGTCGGTTTCCTTGTACT CGTCAATTTCATGTTTTTTTTG >gi|4714037|dbj|C99919.1|C99919 C99919 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 75, mRNA sequence CCCTCCCNCTCCTNNTTTCTANTTNGNTTCNGNTTCTGTTATCGNGTTTTTCNCNNGGGTCTTTTNTCGN NGCCCTGGACCGGAATTCNCGNGTCGACCAACTCNTCAGATGTGGTGCTNCNCTACAATGAANCAAANNG ANTCACACTCTCGGACTNANNCTCTCCCCTCCGCTTCTGTAACCATANCNNCTCNACNTCTATGTCTCCN ATCTAACCANCTCTNNGGGTTCGAGGAGANATAAGGAGAAAAGTANGGANGGACGANTATGCTTGCCCGT TCTGTNCAGACTATTTTGATNTCNTCTCTCTNNGCNGTCACATTGATGAANATCNTCCTATGGATGCTTA AANTGGGGTNTGTCCCGTCCTGTGCGGTGAAAGTGAGCTCNGGATATGATTGCNTCNTATANCCCCNCGN CNCNGCCNATATGTTCAAGGTGACCCNGATCANGAAATCAA >gi|4714036|dbj|C99918.1|C99918 C99918 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 74, mRNA sequence GTTTATCACGCCTTGCATTGATCAGAASCCCTTGCTACGGCATTGAGCCAKGCTGCCGAAGCTGTTTCTT CGGGAAATTCAGATGCAAGTGATGCCACTGCAAAAGCTGGAATCATTTTGTTGCCCAGCACACATCAACT TGACGAAGAGGTTACTGMGGAACATAGTGAGGAGGAAATGACTGAAGAGGAACCAACTCTTCTCAAGTGG CCAAATAAGCCCGGGATTCCAGATTCTGATTTGTTTGACCGTGATCAATCGTGGTTTGATGGACCTCCAG AGGGCTTCAATCTCACATTATCAAATTTCGCTGTGATGTGGGATTCACTGTTTGGCTGGGTATCATCGTC CTCTCTGGCATACATATATGGGAAGGAAGAATCTGCTCATGARGAGTTCTTATTGGTTAACGGGAAGGAG TACCCCCGGAGGATTATCATGGTAGATGGGCTTTCCTCAGARATCAAGCANACAATTGCTGGGTTGCCTT GCCAGAACTTTACCGAAAATCGTCACTCATCTCAGGGCTGCCAATANCGATATCCRATTTTAAAAA >gi|4714035|dbj|C99917.1|C99917 C99917 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 73, mRNA sequence ATAGGCGANATCCCCCCCAAANGATTNCCTGATGTGAGGAACATGGGGANATCATCNTGGAATCGAGCNC NNGNAGTCNCCGGTNAAGTNGGTGGGTNNACANTCNCNCCCNNACNGACNCNGCATGACCNCTTCACTAC NANCTGTTANGTTTNTGGGACTGNTCCTACGATATACCNTCTCTTGGTGGTGGNNCCNCGAAACTCNNCT CAGGACTNGGCTCCTCGAAATTCNGATGAAGNNTGTCCCGCCTGTGACNACGNNNTTCNGGATTGGANCG ATCTANGAGNNGACACTCTGAGAATGTGATCGGTGATTNNTCGGTNCNCTGNATCACATTNCTCNCCTTN CCANTACCACTTTTNACANANTTCCCCTTCTTTTTCNCAACGNGCGATNCTNGNAGAANGNATGGNTAAC TCGGNTNCCNGCTCTGNATCGNAGATANCGTNGTCCTCTCGGGGTTCCAGAGGNTC >gi|4714034|dbj|C99916.1|C99916 C99916 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 72, mRNA sequence GGTAATAAAAACGACGGTGGAAATGATCATATTTCCCTTTACGCAAGGATCGAAGAGACAAACTCTCTTC CATTAGGTTGGGAAGTGAATGTTGATCTCAAACTCTTTGTCCATAATGGGAAGCTACACAAATATTTGAC TGTTACAGATGGCTTAGTGAAGCGATATAACAATGCGAAAAAAGAATGGGGTTTCGGACAATTGATTCCT CGATCAACATTCTACAACGCGAACGAAGGTTACCTTGACCAGGACACTGGTTCTTTTGGTGCTGAGATCT TTATTGTTAAACCGGCTCAACAACAAGAGAAAGTTACATTCATATCAAACCCTCCAAACAATGTTTTCAC TTGGAAGATACTTCGTTTCTCTACCTTGGAAGATAAATTCTATTACTCCGATGATWTTCTCGTTGAAGAC CGATACTGGAGACTAGGATTTAACCCGAAAGGGGATGGAGGAGGAAGACCACATGCACTTCCAATCTTCC TATTTGCTCAAGGCCATAAGGCAAATGCAGTTGCTACAAACACTTGGGGAGCGGTTAATCTGCGGTTAAA GAATCAACGAAGTACTAACCATAGACAAATATATTCTGCAGCTTGGTACCCGATTGGAAACGGTTATGGT GTGGGAGTGAACAATATCATACTGTTAGCTGATTTAAACGATGCATCCAAAGGATATTTGGTGAATGATG CCATTATCTTTGAAGCTGAAATGGTTAAGGTCTCTATAACCAACATCGTCTCCGCTTAAATATCTGCMCT TCTTTGTCTACRAYCAATCCACCTTATGAATAAAAAAATTTTAATTTGATGAATTTGTTATAANAAAACT TTAATGTTTGTTAAATGTGAAATTT >gi|4714033|dbj|C99914.1|C99914 C99914 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 70, mRNA sequence GGGACGAACCGGTGTACCACGATTTGGTTCGTCACTGTCTGGCCTACCCAAAAGCGGATGGAATCTTGGT GAATACATGGGAAGAGATGGAGCCCAAATCATTAAAGTCCCTTCAAGACCCGAAACTTTTGGGCCGGGTC GCTCGTGTACCGGTTTATCCGGTTGGTCCGTTATGCAGACCGATACAATCATCCACGACCGATCACCCGG TTTTTGATTGGTTAAACAAACAACCAAACGAGTCGGTTCTCTACATTTCCTTCGGGAGTGGTGGTTCTCT AACGGCTCAACAGTTAACCGAATTGGCGTGGGGGCTCGAGGAGAGCCAGCAACGGTTTATATGGGTGGTT CGACCGCCCGTTGACGGCTCGTCTTGCAGTGATTATTTCTCGGCTAAAGGCGGTGTAACCAAAGACAACA CGCCAGAATATCTACCAAAAANGGTTCGTGACTCSTACTTTGCGATAAAAGTTTCATGATCCCATCATGG GCACCGCAAGCTGAAATCCTAACCCATCCAGGCCGTTGGTGGGTTTTTAACACATTTGTTGGTTTGGAAC TCCACTTTGGRAAACCTTCCTTTTGCCGGCGTTCCCAWTRANAACCTTKGCCCCCTTTTCCCCCAACC >gi|4714032|dbj|C99913.1|C99913 C99913 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 69, mRNA sequence CCTGTCCCATCGGGCCGTTRGTGGGTTTTTGACCCATTGCGGTTGGAGCTCGACGTTSGAAAGCGTCGTT GGCGGCGTTCCGATSATCGCATGGCCACTTTTTGCCGAGCAGAATATGAATGCGGCGTTGCTCAGCGACG AACTGGGAATCGCAGTCAGATTGGATGATCCAAAGGAGGATATTTCTAGGTGGAANATTGAGGCGTTGGT GAGGAAGGTTATGACTGAGAAGGAAGGTGAAGCGATGAGAAGGAAAGTGAAGAAGTTGAGAGACTCGGCG GAGATGTCACTGAGCATTGACGGTGGTGGTTTGGCGCACGAGTCGCTTTGCAGAGTCACCAAGGAGTGTC AACGGTTTTTGGAACGTGTCGTGGACTTGTCACGTGGTGCTTAAAAATTGTTACCGTTTTCTAACTCTTT TATTATTARTTGGTTGAATTATACGTGTCGTTCCTCTGTTAGTTGTTATAATATAATAAATCGATTTACT CTTTGTT >gi|4714031|dbj|C99911.1|C99911 C99911 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 67, mRNA sequence CGTTTCTGCCACATTAAAACAGAAGAGTGCAACAATTGAAGGCATAGAAAAGTGGCCTTATGAAGCAGCT GCCATTGCTTTCGAGGCTATTCCACGTACCCTGGCTCAAAACTGTGGGGTTAACGTGATCCGTACTATGA CTGCATTGCAAGGGAAGCATGCAAATGGTGAAAACGCATGGACTGGTATTGACGGGAACACTGGTGCAAT AGCTGATATGAAAGAGAGCAAGATATGGGATTCGTACAATGTGAAGGCGCAAACTTTCAAGACGGCTATA GAAGCAGCGTGTATGCTTCTAAGGGATCGATGATATAGTGAGTGGAATCAAGAAGAAGCAAGCTCCTGGA TCTGGACCTTCAAAGCCTACCATTGAGACAGAAGGAGATGCAGACAACGAACAAATTCTTCCCGACTAAG CGAAGGGAGAAACACTTTGGTCTCAGCATAACTCAATCTCTGTTTTCACTTGTTTAATGGTTGCACTCTT TTGGCTATTATCTTCCCTTGACATATCTTTTTAATTCTGCAGTTTTGACTTNGGTGAGATAAAATTTTCC CAAGGTGGTTTTTTTTTGTTTGTTTTGGGAATATTAACTTTTTTGAATTTTCNTANTCCCTTTGTTGGTT TTTAAAATTCCAATTGTTATTGTTCTTTTTG >gi|4714030|dbj|C99910.1|C99910 C99910 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 66, mRNA sequence CGCSCCTAAGAAGGAAAAGATGAGAAGAAGAAGAAGAAGAAAACTGAGGTCTGAAGAGACCTTTAATATT TTTGCGTGGTCTAGTTTACTTTGTTATCAGAAACAAAGAAAATCTTTTGTGGCGTTAGGTGTTAAGTAAG GTTTTTGTTTTGTTTGAAACTTAAAAAAAAGAACTACTCTTCGTTTTGTAAGGTTATAATATGTTTGGTT TAGTCCTTATCCCAAAAACTTGCATTTTGCC >gi|4714029|dbj|C99909.1|C99909 C99909 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 65, mRNA sequence ATTTTCTTGTATGTTGGAATGGATGCCTTGGACATTGACAAGTGGAGATCCGTGAGTGACACACCGGGAA CATCGATCGCAGTGAGCTCAATCCTAATGGGTCTGGTCATGGTTGGAAGAGCAGCGTTCGTCTTTCCGTT ATCGTTTCTATCTAACTTAGCCAAGAAGAATCAAAGCGAGAAAATCAACTTTAACATGCAGGTTGTGATT TGGTGGTCTGGTCTCATGAGAGGTGCTGTATCTATGGCTCTTGCATACAACAAGTTTACAAGGGCCGGGC ACACAGATGTACGCGGGAATGCAATCATGATCACGAGTACGATAACTGTCTGTCTTTTTAGCACAGTGGT GTTTGGTATGCTGACCAAACCACTCATAAGCTACCTATTACCGCACCAGAACGCCACCACGAGCATGTTA TCTGATGACAACACCCCAAAATCCATACATATCCCTTTGTTGGACCAAGACCGTTCATTGAGCCTTCAGG GAACCACAATGTGCCTCGGCCTGACAGTATACGTGGCTTCTTGACACGGSCCCCTCSAACCGTGCATTAC TACTGGGAGACAATTTGATGACTCCTTCCTGCGACCCGTCTTTGGGAGGTCGTGGCTTTGTACCCTTTGT TTCCARGGTTCTCCAACTGAR >gi|4714028|dbj|C99908.1|C99908 C99908 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 64, mRNA sequence GGTTTATTACCGATGCAATCCTATGTCTCACCACCGTATCGGGGATAAGTATAAGATATATCCAACATAT GACTTTGCTTGCCCGTTTGTTGATTCCCTTGAAGGTATAACGCATGCTCTTCGGTCTAGTGAGTATCATG ACCGAAATGCTCAGTACTTTAAAGTTCTGGAGGATATGGGACTGCGACAGGTTCAGCTTTACGAATTCAG CCGGTTAAACCTAGTTTTTACACTTCTCAGTAAGCGCAAGCTTCTCTGGTTTGTCCAAACTGGATTGGTT GACGGGTGGGATGATCCACGTTTCCCGACAGTCCAAGGAATTGTTCGTAAAGGTTTGAAAATCGAGGCTC TGATTCAATTCATTCTCGAGCAGGGGGCTTCGAAGAATCTAAATTTGATGGAATGGGACAAACTTTGGTC TATAAATAAGAGAATAATTGATCCTGTGTGCCCTARACACACTGCTGTGGTTGCAGAACGTCGTGTACTA TTTACCTTAACGGATGGTCCTGATGAACCGTTTTGTTCGCATGATACCAAAGCACAAAAAATTCCAAAGG TGCTGGAAAAAAAGGCGAACACTTTCCCTAAAAAACATTTGGCTCCAAGGAAACTGATGCCAATTGCCCA TATCCGTTGGGTGAAGGAAATTTACTTTTGAAG >gi|4714027|dbj|C99907.1|C99907 C99907 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 63, mRNA sequence CTTGAATGCGGAAGCTAGGTGTATGACAAAGGCAAGAAAGCTCGGGGTTTGTACTCCAGTCCTATATGCT GTGGATACTCTGCTTCACTCTTTAACACTTGAGTACATTGAGGGGGTCTCTGTTAAGGATATTTTCCTTG AGTTTGGGACCAATGGGGTTGTTGAGGAACGTTTAGATGATGTTGCTGCTCAGATTGGGGCTGCAATTGC TAAGCTCCATGATGGTGGCTTGGCTCATGGTGATTTGACCACATCAAATATGTTAGTCAGAAGTGGAACA AATCAGCTGGTACTAATTGATTTTGGCTTGAGCGTCACATCGACCTTGCCTGAAGACAAAGCTGTTGATT TATATGTACTTGAAAGAGCCTTACTCTCAATGCATTCGTCATGCGGGAATGTGATGGATCGTATACTGAC GGCGTATARGAATCCTCAAAGCAATGGTCAGCCACGTTTAACAAAGCTCGCACAAGTGAAACACCGAAGG GAAAAAAGCGGACTATGATTGGATGAAGGCGANGAACCCAAGTTCTCCCATTGGTACTGTCCTTAAAACT TTGAACMCAAAACCCCCCAAAWCTGTCCYGTTATWATTAATCC >gi|4714026|dbj|C99906.1|C99906 C99906 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 62, mRNA sequence TGGATCATTCATAAGCTTCTACTCACTGGCGTTTATGGGATGGTGTTCTTGATGTACAACTCTAGGTGGA GAGAAAAATTGCCTGCAAGGCCTGCATTCTACAACTACATAATCATCATGTTCGCCTTATACAGCCTTTA CCTAGTTGCATCTGCGTTTACCGCAAACAACGCGCATTTTGGTTTCTGGTTATATGGGATCATGAGTGTT TGCTACCACGCATTATACCTTCCTCTTCTTTACATAACGTTCCTCGCAGACTTTTTCCAGGAAGAAGATT TGAACTTGGAGAATGTATACTACTCAGAGATGAAGGATGCTGGATTTTTCGACTCTGATTGGGAATAGGA CTAGGGTAACAAACATCTTCCTCATTTTCTCAATCTGTAAATACACGTTGGGTAGGATCTCCTAGAAGTC ATGGCTGCTTTTTCCGGCTTTGGCGGGTTACATTTTARGGTCTAATCTTTTGTATGTCTGTACTTTTTCC TCATGTTTCTTTCTCTTTTATAAATCCAAAATGTCTTGTGAATCTCTTTGTTCCTTAAAKCCTGAATAAT CT >gi|4714025|dbj|C99905.1|C99905 C99905 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 61, mRNA sequence CCAAAGGAAGAGGCCCAAACCGAGAAGATAGCTATTGAAACGGTTATGATTGATGAGTCAAACCTTGCGG ATTATGTAGGAAAACCGGTATTCCATGCAGAGAAGCTCTATGAGCAGACACCGGTAGGTGTTGTGATGGG TCTAGCTTGGACATCAATGGGTGGTTCAACATTGTACATAGAGACGACTGTTGTGGAGGAAGGGGAAGGT AAAGGTGGCCTGAATATAACGGGTCAGCTCGGTGATGTGATGAAAGAAAGTGCACAAATTGCTCACACAG TCGCCAGAAAGATCATGCTAGAGAAAGAACCAGAGAATCAGTTCTTTGCAAACTCCAAGCTTCATCTCCA TGTTCCTGCAGGAGCCACTCCCAAGGATGGTCCAAGTGCAGGCTGCACCATGATCACATCTTTACTATCA CTTGCCACGAAAAAACCCGTTAGGAAGGACCTTGCAATGACTGGAGAAGTCACACTAACCGGAAAAATTC TTCCTATTGGTGGGGGTGAAAGAAAAAACTATACCGGCGAAGGCGGAATCCGATTAAAACCAATAATATT TCCCNAAGCAANCCGAAAAACTTGATAACTGCNAAAAATGTNAAAAAAGGNTTATTTTCCTTCCTGGATG ATATGGAAAAACTCCAACCTGCCTTTGGTT >gi|4714024|dbj|C99904.1|C99904 C99904 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 60, mRNA sequence CAGGTCCTGGTCCGGAATCCCGGGTCGACCCACGCGTCCGGAAGCGACAGTGGTAGATGGAAATGGAACA GAGACTGGACATATCATTGTGACTACTATTGGTGGTAGAAATGGCCAACCAAAACAGACAATTAGCTACA TGGCTGAGCGTGTTGTTGGTCACGGATCTTTTGGTGTTGTGTTCCAAGCGAAATGTCTTGAGACAGGAGA AACTGTTGCGATAAAGAAAGTTTTACAAGATAGGAGGTACAAGAACCGTGAGCTTCAAACCATGAGGCTA CTTGACCATCCTAATGTTGTGTCTCTGAAACATTGTTTCTTCTCAACCACTGAAAAAGATGAGCTTTACC TCAATCTTGTTCTTGAGTACGTTCCACAAACTGTTCATCGTGTTATCAAACACTACAACAAACTGAATCA GAGAATGCCTCTTATATACGTCAAACTTTACACTTATCAGATTTTTAGAGCCTTATCTTACATTCACCGA TGCATTGGTGTGTGTCATCGTGACATAAAACCTCAAAACTTGTTGGTAAATCCGCACACTCATCAAGTAA AGCTATGTGATTTTGGAAGTGCAAAAGTATTGGTAAAAGGAGAACCAAACATTTCCTACATCTGCTCGAG GTATTACAGAGCACCTGAACTTATTTTTGGAGCAACCGAGTATACGACAGCCATTGATGTCTGGTCTGCA GGATGTGTTCTAGCTGAACTATTGCTTGGACAGCCCTTGTTCCCTGGTGAGAGCGGTGTTGATCAACTTG TAGAGATTATCAAGGTCTTGGGAACCCCTACCTAAAANAAGAAATCAAGTTGCATGAACCAAACTACACG GAATTCAAATTCCCTCAGATTAAAGCTCATCCATGGCACAAGATTTTCCACAAACGCNTGCCTCCCAAAA CCTGTTGAATTGGGTCTCAAGAANTTCTTCAATACTCCTCCTAATCTACNAAATTGCCGCTCCCCAACCA TTAATTCCACCCATTCCTTGATGAATTAAGAAAANCAAA >gi|4714023|dbj|C99903.1|C99903 C99903 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 59, mRNA sequence CAGCGAACACGGAGTTCCGGCATCATTTAAGGTTCCAACTGGAGTTGTCATACCTTTTGGATCGATGGAA TTAGCTTTAAAGCAAAATAATTCGGAAGAAAAGTTTGCGTCTTTGCTAGAAAAACTAGAAACCGCCAGAC CTGAGGGTGGTGAGCTAGACGACATATGTGACCAGATCCATGAAGTGATGAAAACGTTGCAAGTGCCTAA AGAAACAATCAACAGCATAAGCAAAGCGTTTCTCAAAGATGCTCGTCTCATTGTTCGTTCAAGTGCTAAC GTCGAGGACTTAGCCGGAATGTCAGCTGCAGGACTCTATGAATCAATCCCTAACGTGAGTCCCTCGGATC CTTTGGTGTTTTCAGATTCGGTTTGCCAAGTTTGGGCTTCTCTCTACACAAGAAGACTGTTCTAAGCCGT AGAGCTGCTGGTGTCTCTCAAAGAGAARCTTCAATGGCTGTTCTCGTTCAAGAAATGCTTTCGCCGGACT TATCATTCGTTCTGCACACAGTGAGTCCAGCTGATCCGGACAGTAACCTTTGTTGGAAGCCCGAAAATCG CTCCTGGGTTTAAGGTGAAAACTTTAACCTTCCGGAACCAGAAGGAACCCCCC >gi|4714022|dbj|C99902.1|C99902 C99902 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 58, mRNA sequence ACCAAACCAAAGTATCTCTAAGGAATCGCTGTCCTTCGATGAGGACATACCTGCCGGTTCAATGGTTGAG GACGAAGTGACGAGTGAACTCTCTGTGCGTTTCCCCCCAAGAGGATCTCCCTCACCATCTATTCCTCAAG TTATCAGCATTGGACAGCTCATGGAATCTGCGCTTGAGGTCGCTGGTCAAGTGGTTGGGTCATCTGTCTC TACTTCTCCGCTTCCTTATGACACAATGACTAACCGCTGTGAAACCTTTGGGACTGGTACTAGAGAGAAG CTCTCAAGGTGGTTGGCCACTGAGAACCGTCAGATGAATGGGCTCTATGGAAATTCACTTGAGGAATCAT CTGCACTTGAGAAGGTAGTATAAGATGGGAACATCTATGGGAGAGAATCTGGAATGTTGCAGGATTCATG GTCCATGATGAGACTACCTCCAGCTAGTCCCTTTGACAATTTCCTCMAAGCASCAGGAGCTGGAAGATGA TTCCACTAACTTGATCATATCAATCTCTGTTAAAAAGTGTGTAATCTTGTTGTTCTTATTGGGATTTGTT AAAAAACTAACTTTTTCTAGGGGCAATCCCCAAGCTTCTCCTTATTATCTAAAATCATTAATTAATTTAT GCCTGTTTCCTTTAGGAC >gi|4714021|dbj|C99899.1|C99899 C99899 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 55-2, mRNA sequence AGCAGGGGGCTTCGAAGAATCTAAATTTGATGGAATGGGACAAACTTTGGTCTATAAATAAGAGAATAAT TGATCCTGTGTGCCCTAGACACACTGCTGTGGTTGCAGAACGTCGTGTACTATTTACCTTAACGGATGGT CCTGATGAGCCGTTTGTTCGCATGATACCAAAGCACAAGAAATTCGAAGGTGCTGGAGAAAAGGCGACCA CTTTCACTAAGAGCATTTGGCTCGAGGAAGCTGATGCGAGTGCCATATCCGTTGGTGAGGAAGTAACTTT GATGGATTGGGGAAATGCTATCGTAAAGGAAATCACAAAGGACGAGGAGGGTCGTGTCACTGCCTTATCT GGTGTCTTGAATCTCCAAGGTTCTGTAAAGACTACAAAGCTGAAGCTGACATGGCTTCCTGATACTAATG AATTGGTCAATCTCACATTAACAGAGTTTGATTATCTAATCACCAAGAAAAAACTGGAAGATGATGATGA AGTTGCTGATTTTGTGAATCCTAACCCCAAGAAGGAACATTGGCMCTTGGTGATTCCAATATGAAGAATC TGAAATGTGGAAATKTGATTCCCCTTTGAAAAGGAAAAGGCTATTTCCSAATTTGATGTTGCCTTTTGTT CAAATCCTCCCAARCCCMCTTTGTTCTTATTCCCCCCTTCCCCAAATGGAAAAAA >gi|4714020|dbj|C99898.1|C99898 C99898 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 55-1, mRNA sequence TCAGNGGACGATGTCAAAGATCAAAACATACCTATTGATGCAGTGCATACATCGATGATTNTCTCTTGTG TGATCNAGTTTNAANNCCNNNATGNTANNCGGATNCTCTCTTTCATCAGANTCCGGTCCGTGTAAGTAGA TGGGTCTAACCCGGANCTNTNTGGGTGGNCCAACCTTCTCCATAAAAACTGNTGTTGTGGAGGA >gi|4714019|dbj|C99896.1|C99896 C99896 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 53, mRNA sequence CTCTGTCTCTTTCTTCTTCTTCTTCTTCTTCTCATTAAAAGCTGAACACAAAGATCTATTCTTTCACTAA CACATTACCAGTTTCTGCATTTGTATTATATCCTTTTCTAAAACTTTTAACCATTCTTTCTCCATTCCCA GTTCTTAGAAAGAGTCAAGAGCAATGAGGAAGCTTTTCTTGTTAGGGTTTATAGTTGCAGGACTGGTTCT TGGGAATGAGGCAAATGGGTATTTAGAGTTCAATGTCACCTAAATTCAATTCACCCATGGTACCCGGATC CTC >gi|4714018|dbj|C99895.1|C99895 C99895 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 52, mRNA sequence GCCTCATGAAANAATCATGGACACTTGATTTACCTCATGGTGGACATCTTTCTCATGGTTANCANACTGA CACNAAGAAAATATCNGCTGTATCCATCTTTTTTGAGACAATGCCATACAGATTGGATGANAACACTGGT TACATTGATTATGACCAGCTAGAAAAGAGTGCCGTGCTTTTCAGACCGAAACTTATTGTTGCGGGTGCAA GTGCTTATGCTCGTCTATATGACTATGCACGTATTCGTAAGGTCTGTAACAAGCAAAAGGCAGTTATGTT GGCTGATATGGCTCATATTAGTGGGTTGGTTGCTGCTGGCGTTATTCCTTCTCCTTTTGAGTATGCAGAT GTTGTTACGACTACAACTCACAAATCTCTTCGCGGTCCTAGAGGGGCTATGATATTCTTTAGGAAGGGGT TAAAAGAGATTAACAAACAAGGGAAAGAAGTCATGTATGACTATGAAGACAGAATTAATCAAGCTGTTTT TCCTGGACTGCAAGGTGGTCCACATAATCACCTATAACGGGTCTAACAGTTGCTCTGAAACCAGCAAGAA CCCCTGAATTCAAGGCCTACCAGGAAACAATTTCTCCGTAATTGCCCCCAATTTGCCTGAAACTTTGCTT GCGAAAGGATATGATTTAGTGTCTGGAGGCACTGATAATCATTTAGTTTTGGTGAATCTGAAAAACAAGG GAATAGATGGATCAAGAGTGGAAAAAGTATTAGAATTAGTACATATTGCAGCAAACAAGAATACTGTTCC TGGGTGATGTTTCTGCCATGGGTTCCCCGGTGGGCATCCATATGGGAAACAACCAGCCCTCACATCAAGA AGATTCATTGAAGAAGATTTTGCAAAAGTTGGCGGAATATTTTGATTTAACCNTCCAAAATANCCTTAAA GAACCAAACCANAATTCTCCAAGGAACCAAAATTTGAAAANANTTTTGTTTNCCAACCAATGCCNATCCA ATTGANAAAATTACCNTTCCNAAAATTTNCAAACCTCCCTTGAAAATNGTTAAAAAAAA >gi|4714017|dbj|C99894.1|C99894 C99894 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 51, mRNA sequence CCATGGTACCCGGATCCTCGAATTCTTTTGCTTTTTACCCTGGAAGAAATACTCATAAGCCACCTCTGTT ATTTACCCCCAATCTTCACAAGAAAAACTGAGRATAGGAACGTGTGGAACAGGAGGATGAGGATGANCAA GGTGAAACACAGTGTGGAGCATGTGGTGAGAGCTATGCAGCTGATGAGTTCTGGATTTGCTGTGACCTCT GTGAGATGTGGTTTCATGGAAAGTGTGTTAAGATAACACCAGCAAGAGCTGAGCACATCAAGCAATACAA GTGCCCTTCTTGCAGCAACAAAAGGGCTCGTTCCTAAATTTGTTGANCGCTCGCTTCTGTGTATCTACCT TTGCATATGATGATGAACANCTTAACTGTTTGGTTTAGATCAGATTTGTCNTATGGATTTGGTAATTTTA GGAAGA >gi|4714016|dbj|C99892.1|C99892 C99892 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 49, mRNA sequence GTGGTGGAGGAAGCAGCTGGTCCCGAGGTGGTAGTAGTTCCAGAGGAAGTTCTGATGATTGGTTGATCGG TGGCAGAAGTTCATCAAGCAGCAGAGCTCCTTCGCGGGAGAGAAGTTTTGGAGGTTCATGCTTCATTTGT GGGAAATCTGGACACAGGGCAACAGATTGTCCTGATAAGAGAGGATTTTAGAGTTATCGTAGCAAATGGT TTCTGCTCTTGGGAGAAAGATCCTTGTCCTTTTTGGTGTTCTTAATGCGAATCTTTTCGTGCTTGCTTCA ACGGTTTGTTTCAGACGGTAGAGAAGCAATCAGGGAGGAGGATACATGCTTCGGACAAGGTAGAGCAGAA ATAAATAAGAGAGAGGCAATAGCAAAAGTAAAGGAGAAGGTTTTCCTCAAATTGGCATTTTCAGAGTTTG CGTGAGAAACAAGGGAAAGCTGATGGATCTTTTTATGTTAGGGTTATTATAATAGTCTTAATGATCAGTT TCCATGTTTCTAAGGTTTTGTTTGATTTAAGTTGGTTATTAATTCAGTCTACTTACACTACTTTTATTTT CATTTTTGTACSTTTTCAATTGTTATATGTTAATTCCGATCMCATTTTTTTGGACAGAATTACTATTTCT TTATAATAAAATCTTATGCC >gi|4714015|dbj|C99891.1|C99891 C99891 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 48, mRNA sequence ATTTGTAATAATCTTCGTAGAAAAAATGGATTCTGATTCTTGGAGTGATCGTCTCGCATCGGCTTCAAGA AGATATCAGCTCGATTTCTTGTCTCGATCTGACAATTTCTTGGGGTTTGAGGAGATAGAAGGAGAAGATG ACTTCAGGGAGGAGTATGCTTGCCCGTTCTGTTCAGACTATTTTGATATCGTCTCTCTATGCTGTCACAT TGATGAAGATCATCCTATGGATGCAAAAAATGGGGTATGTCCCGTTTGTGCGGTGAAAGTGAGCTCTGAT ATGATTGCTCATATAACCCTACAACATGCAAATATGTTCAAGGTGACGCGGAAAAGGAAATCAAGAAGAT GCGGGGCTCAATCCATGCTATCGATCTTGAAGAGAGAGTTTCCTGATGGAAATTTTCAGAGCCTATTTGA AGGAACATCACGTGCTGTATCCTCTTCTTCTGCCAGTATAGCTGCTGATCCTTTACTGTCTTCATTCATT TCACCAATGGCTGATGACTTTTTCATTTCTGAATCAAGTCTATGTTGCANAACACCAATTTCTGCCCCAG AAAAACATTGGAATCCCAAATTTTGCCCTGAAAAGGGAAATGTTTGAAAAAAACCATTTCTCCTTTT >gi|4714014|dbj|C99890.1|C99890 C99890 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 47, mRNA sequence ATAAATATGGGTAATATATCTATCTTGCTTCTACTCTCTCTTTTCACTTTTTCTCTGTGTCTATTTGTCT CTCCGTAAGAAACATTATGCCTTCATCTGATTCCACGATGATGAAGAAAGGAACAAAGCGCAAAATCGAA ATAAAGAAACGAGAAACCAAAGAGCAACGAGCCGTGACTTGCTCTAAACGTCGTCAAACTGTTTTTTCCA AAGCCGCCGATCTCTGTCTTAACTCCGGTGCCAACATCGCCGTCTTCGTAACCTCTCCCTCCGATAGTTC CGATGTTGTCTATTCCTTCTCCGGTTACTCCTCTGCCTACGAAATCGCTGATTGTCACCTAAATTCAATT CACCCATGGTACCCGGATCCTCGAA >gi|4714013|dbj|C99889.1|C99889 C99889 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 46-1, mRNA sequence AAGTGTCGAACAAATACTACTTAGGTCCAGCTCCATTGGAAGAAATGGCGAGGCAAATCGCTACGGCTTC GGGACCTTGTGGGAACAACCGAGAGTATCTTTTCAAGCTAGAGAAAGCAATGTTCGACATTGAGCATGAG GAAGAGTATGTGATTGAGTTAGCGAATGAGGTTAGGAAGCAACTCGATTTACCGGAGGAAGTGAAGGCAT TGTTGAAGCCTATTGTTTCTCATGTATCCGTCAAGTCTCAAGCTCATGTTTCCACTCGTCAACGGGTCTT TGCATCATGAAGACAGCAAAAGTTATGGAGCTAACTTAAAAAAGCATTGTGGTGACGAGGCTAATGTTAA CTCTTTATCTTTCAGCTTAATATTTGATCACATCTTGACCTTGAGATGTTTTGTTTTGCTCTGCATTTAT TGAGAATTCATAACATTGTATGATATGAGATGCAATTTATGAGAATAATAACCGATCTTTAGCTCTGCC >gi|4714012|dbj|C99888.1|C99888 C99888 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 45, mRNA sequence CGTTCTTTCTCTCGCAAACCCAAATTCTCTCAGCGCCGGTCAAATACTTGTCTCTCTCTCTCTCTCTCTT TCACTCTTGTCTTGTCTCCTTCGAAGCTGTTTGTTCTGTAAGAAAGATGGAAGCAGGTGGCGCGTACAAT CCACGCACTGTTGAAGAGGTGTTTAGGGATTTTAAGGGTCGTAGAGCTGGCATGATTAAGGCTTTAACCA CTGATGTTCAGGAGTTTTTCCGACTTTGTGATCCCGAAAAGGAGAACCTTTGCCTTTACGGACATCCAAA TGAGCACTGGGAAGTGAATTTGCCAGCTGAAGAGGTTCCTCCTGAGCTCCCAGAGCCTGTCTTGGGTATC AATTTTGCCAGAGACGGGATGGCGGAAAAGGATTGGTTGTCCCTTGTTGCTGTCCACAGTGATGCTTGGC TTCTTGCTGTTGCTTTCTTTTTTGGAGCCAGGTTTGGATTTGACAAAGCTGATAGGAAGAGGCTTTTCAA TATGGTGAATGACCTCCCAACAATCTTTGAGGTTGTAGCTGGCACTGCTAAGAAACAAGGAAAAGATAAG TCCTCTGTTTCCAACAACAGCAGCAACAGATCCAAATCAAGCTCCAAGCGAGGATCTGAATCCCGTGCCA AGTTCTCAAAGCCGGAGCCGAAAGATGATGAGGAGGAGGAAGAGGAAGGTGTGGAAGAGGAGGATGAGGA TGAGCAAGGTGAAACACAGTGTGGAGCATGTGGTGAGAGCTATGCAGCTGATGAGTTCTGGATTTGCTGT GACCTCTGTGAGATGTGGTTTCATGGAAAGTGTGTTAAGATAACACCAGCAAGAGCTGAGCACATCAAGC AATACAAGTGCCCTTCTTGCAGCAACAAAAGGGCTCGTTCCTAAATTTGTTGACCGCTCGCTTCTGTGTA TCTACCTTTGCATATGATGATGAACAGCTTAACTGTTTGGTTTAGATCAGATTTGTCATATGGATTTGGT AATTTAGGAAGACATTTTAGTTTTTTCCTTGTTACATTTTTGGGCGAATTGAAAGGGATAACTCCTTTGT TTTAAGGGGGTTAATGGAACCTTTTGGCCCCCGTTTTTAAWAGTTTTGGTTT >gi|4714011|dbj|C99887.1|C99887 C99887 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 44, mRNA sequence GTGAATGTTGATCTCAAACTCTTTGTCCATAATGGGAAGCTACACAAATATTTGACTGTTACAGATGGAA CAGTGAAGCGATACAACGATGCWAAAAAAGAGTGGGGATTCACACAATTGATTTCTCTTCCAACATTCTA CAACGCGAACGAAGGGTACCTTGTGCAGGACACAGCTTCTTTTGGTGCTGAGATCTTCATCGTTAACCCG ACAGAAAAACAAGAGAAAGTCACATTCATATCAAACCCTCCAAACAATGTTTTCACTTGGAAGATACTTC GTTTCTCTACCTTGGAAGATAAATTCTATTACTCTGATGATTTTCTYGTTGGAGACCGATACTGGAGACT AGGATTTAACCCGAAAGGATCTGGTGGAGGAAGACCACATGCACTTCCAATCTTCCTATATGCTCAAGGC CATAAGGCAAACGCAGTTGTTACAAACACTTGGGGAGCGGTTAATCTGCGGTTAAAGAATCAACGAAGCT CCAACCACAAACAATTATATTCTGCAGCTTGGTACCCGATTCGAAGCGATTATGGTGTGGGAGTGAACAA TATAATATTGATGTCAGAGCTAAAAGATGCATCAAAAGGGTATATGGTGAATGATGCCATTATCTTTGAA GCTGAAATGGTTAAGGTCTCTGTGACAAACATAGTCTCCGTTTAAATATCACTACTTCTTTTTCAACAAC AACCTTACGAATAAAGTGGACTTTGATGAGTTTAATTTGTTATACGACAACGTTGTTGATGCTTGTGATG TWATCGTTGTTTCTGCTCTCCGAGTTTTCGTTTTACTTTTTTTTTCATGTTTTGCTATCCAATGAAAATA AAAGGTTTAAAACTCTCCTTTGGTTTTTAAAAGT >gi|4714010|dbj|C99886.1|C99886 C99886 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 43-2, mRNA sequence GGCTGAGGAGTACAAGAACAACGTTCCCGAGCACGAGACACCAACGGTCGCAACAGAGGAATCACCAGCG ACGACAACAGAGGTTACGGATCGTGGATTGTTTGATTTCTTGGGGAAGAAGGAAGAGGAAGTGAAACCTC AAGAGACAACGACGCTGAAGATTGAGGCGATGGTGAGGAAGGTTATGGCTGAGGACGAAGGTGAAGAGAT GAGAAGGAAAGTGAAGAAGTTGAGAGACACGGCGGAGATGTCACTTAGTATTCACGGTGGTGGTTCGGCG CATGAGTCGCTTTGCAGAGTCACGAAGGAGTGTCAACGGTTTTTGGAATGTGTCGGGGACTTGGGACGTG GTGCTTAGTAATGGTTACTGTTTTCTAGCTCTTTAGTGGTTGAATTTACTTGTCGTTTCTTAATGTGTAT TTTTCATTGTAATAGAATAATCGATGTTTTGTAATATATTAATGTATTTGATATTTCTCAACTAATTTCC ATTGTAATATTG >gi|4714009|dbj|C99885.1|C99885 C99885 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 43-1, mRNA sequence GGCGAGGGAATGGAGAGTTGCTGTCGGAGCGTCATAGCTTCAAGGACGTTTCATCTGCGGTCAAGTGGCC GTCTATTTCCCTCTCTTAGCTTAACTCATCTCAAGGGCAAGCTATCTCTCTCCATCAACTCGTTTTCCTC CAAGATTCAGTCTCATGCTCTCCGAGGAGTTGGTATAGGCGAGTCAGATAAGAAAAATCCCCTGCCGCGA GGGGCCGGAGAAGGAGTCAAGGAAGATGCGAGGAGTAAGCTGCTTCATGTAGTTTTGGTCTCTCCTCAGA TTCCTGGGAATACAGGTTGCATTGCAAGAACATGTGCTGCCTCAGCTGTTGGTCTGCATTTAGTCGGGCC ATTAGGTTTTCAAGTGGATGACGCCAGAGTTAAGCGAGCTGGTTTGGATTATTGGCCCTTTGTGGTTGTC AAAGCGCATAGCTCATGGGCTGAATTTCAAGAATATTTCAGGCTTCAGGAAGGGANAAAAAACCAATGAT ANCTTTTACCANNAAGAAGAAACAAGGATACTTTC >gi|4714008|dbj|C99884.1|C99884 C99884 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 42, mRNA sequence ATTTGTAATAATCTTCGTAGAAAAAATGGATTCTGATTCTTGGAGTGATCGTCTCGCATCGGCTTCAAGA AGATATCAGCTCGATTTCTTGTCTCGATCTGACAATTTCTTGGGGTTTGAGGAGATAGAAGGAGAAGATG ACTTCAGGGAGGAGTATGCTTGCCCGTTCTGTTCAGACTATTTTGATATCGTCTCTCTATGCTGTCACCT AAATTCAATTCACCCATGGTACCCGGATCCTCGAATTCAGCTTGGACTTAACCAGGCTGAACTTGCTCAA AAGGTGGGGACTACCCACCAAA >gi|4714007|dbj|C99883.1|C99883 C99883 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 41, mRNA sequence AAAACAACGCGCATTTTGGTTTCTGGTTATATGGGATCATGAGTGTTTGCTACCACGCATTATACCTTCC TCTTCTTTACATAACGTTCCTCGCAGACTTTTTC >gi|4714006|dbj|C99882.1|C99882 C99882 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 40, mRNA sequence AGTTTTTGATCAACGAGTTTAACCGTTGTTCTTATGAGATTCCTCATAATTGGTTGTTACTCGACTCGCT CCCACTCGCTAGAGAGAACATGAAGTCTGTAGAGCCAACGGTTAAGCTAAGTTCATCGTTGGAAGCGCTT GCTGACTACTATAGTCTTACAAGGGAGGGTGATGCTCACAGGGCCTTGTCAGATGTGTTACTCTTATCTA AGGTGTTCCAGAAACTCACCATTGATCTCAAGCTCTCACTCTCTGATCTCGTCCTTCGCTGTCACACTGC ATCTGATATCAGTGCTGCCATGGCCAAGAACAAGAAGGCCTGAAACATTTTAGACATAGCTATAAGCTTA TTTTGGGATATTCATCTCTCATTCTATTGTTAATGTACCTAACTCTGAAATTATGTAACCGATTATTTAA TCTGATCTTAAAATCAAAAAAAAAAAAAA >gi|4714005|dbj|C99881.1|C99881 C99881 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 39, mRNA sequence AACTNNTCCCAAAGGTGGGGACTACNNAGCANCCCTANTGCTNGACANNTCNTGNATNCCTCTNCNGCTA AGTTCGGGCTNCCTNACGTCCCAACGCGGCGCAAGAATTAATTANAGCACTTNTNNCAGTCTCCATNACA ATCTNGGAGTGATGCCANACTTGACAGGTCANCGACCNCCGACTACGATNGTCACCATNCNCNGCCTCNC AGNGATTACANGCTNAGGATAACCCGGTGNNACCNCNGTTTCGNAGCTGCTGNTCACTNGNNGAGATAGG TNNTGTGGATNATTNGTA >gi|4714004|dbj|C99880.1|C99880 C99880 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 38, mRNA sequence GGACTCGAGCAGAGCCAGCAACGGTTCGTATGGGTGGTTCGACCACCGGTCGACGGTTCGTGTTGTAGCG AGTATGTCTCGGCTAACGGTGGTGGAACCGAAGACAACACGCCAGAGTATCTACCGGAAGGGTTCGTGAG TCGTACTAGTGATAGAGGTTTCGTGGTCCCCTCATGGGCCCCACAAGCTGAAATCCTGTCCCATCGGGCC GTTGGTGGGTTTTTGACCCATTGCGGTTGGAGCTCGACGTTGGAAAGCGTCGTTGGCGGCGTTCCGATGA TCGCATGGCCACTTTTTGCCGAGCAGAATATGAATGCGGCGTTGCTCAGCGACGAACTGGGAATCGCCGT CNGATTGGATGATCCAAAGGAGGATATTTCTANGTGGAANATTGAAGCGTTGGTGAAGAANGTTATGACT GAAAAGGAANGTGAANCGATGAAAANGAAAGTGAAAAAATTTGAAANACTCNGCGGANATGTCACTGAAC CATTGACNGTGGGTGGTTTGGCGCCCCAAATCCCCTTTTGCCNNAATTCCCCCAAGGAATTTTCCACCGG TTTTTTGGAAACNTTTTCCTTGGAACTTGTTCCCCTTTGTTGCCTTAAAAAAA >gi|4714003|dbj|C99879.1|C99879 C99879 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 33, mRNA sequence CACAAATGGAGTCTAGGTTTCACATTACTTGCTTTCCTCTTCATCACTTCCTCTTCCGCTGAGCTCATCA TTAAACAGGTCACACAGGGCAGAGGAATAGAGTACAACAACTCTTACAGTCTCACGTCGAATCTTGGAGT GACGACAAGAGAGTTGAGAGACGAGCGACCATCAAGTAAGATAGTGACAATCACAAGCTTCTCTGTGATT AAGGACAGAGGAGAACCCTATGAATCATCTATTTTTGAGGCTGCCGGTTACAAATGGAGATTANTTTTGT ACGTGAAGGGTAATCCGAAAGGCGGTATANATAATCATATTTCACTTTACGCGAGGATAGAAGAGACAGA AACTCTTCCAAGAAGGTGGGAAGTGAATGTTGATCTCAAACTCTTTGTCCACAATCGGAAGTNAAAGAAT ATTGTCTGTTACAGATGGACATGAANCGATCCACNATGCNAAAAAAGATGGGGATCCACATTGATTCTCT CCACATCTCACCGAAGAAGGTACTTTCAGACCACTCTTTGGTGCTGANACTCTCNTTACCGACGAAACAG AAATCCTTCTTCNACCNCCNAAANTTCCTGGAGACTCTTCCCNCTGGAGAATCATANCGAGATTCTNTGA ACGAACGGAACAGATACCNAGGACGGTGAGAAACATNCTCACTCTTTTCCAGCTAGGAACCTTTTCANNT TGGGACGTNCCCCGTNAGACCCAACCCCCCCCTTNTCC >gi|4714002|dbj|C99878.1|C99878 C99878 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 31, mRNA sequence ACCAGGGGGCATNCAAAAATCTAAATTAGATNTGAATGGGACAGTCTTTNGTCAATAATNAAGATAATCA AGAGATCCTGTGTGCCCTAGTACACCCTGCTGTAGNTGCCTAACGTCCATGTACTATGTTACGTGTAACT GATGGGTCTGATGAGCCGTTTGTNCGGTGGTATCCCAATTCTCAATNAAATACGAATGTGCTGGAGAA >gi|4714001|dbj|C99877.1|C99877 C99877 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 30, mRNA sequence GACGAAAGCAATCAGAAACTCAGGTGAATCAGAAGCATGATTCGAGTTACGAAACCAAAAGCGATCATCG AATCACTGAGTTACCATCTTATCCAAAGATGCTCCGCAAGTGGAACTCCTAAAGGAAAAGCAAAGCTGAA GACAGGTCAGCCATTGAAGCGTAACAAACTCTCCATCAAGAAAGGTGGTGGCGGCGGCGGAGCACCTGTT GAAGGAGAGGAAGCAGTTAAAGGAAAAGGTAGAATTTCCGATGAGAAGCAGAAACTCTACGAGCAATGCT TAAACGCTCCTTGTCCTGTTCGCTACTTGACCCCCCAAGAGATCGAGCGTGAGGCGCAACGTGAGAAGCT AGGTTTGATTAGTAAAGAGAACAACGAGATATGGAGATCCAGAAGAAAGGAGGAGTATGCTTGCCCGTTC TGTTCAGACTATTTTGATATCGTCTCTCTATGCTGTCCCTAAATTCCATTCACCCATGGTACCCGGACCT CNAATTCACTTGGACTTAACCAGGCTGACTTGCTCCAAAGGTGGGGATCCCCAC >gi|4714000|dbj|C99876.1|C99876 C99876 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 29, mRNA sequence CAAATTCTCTCCGTGTTTCCTTCTGCTTCAGGTGATATTTTAACAAANTTCTTANTACAATGGGATCTGT TGATGCTGCTAATGGAANTGGGAAAAAACCTACAGTTATATTTGTTCTTGGTGGTCCAGGAANTGGAAAA GGTACCCAGTGTGCTTATATTGTTGAACATTATGGTTACACACATCTGANTGCTGGANATCTTCTTAAAG CTGANATTAAATCAGAACTATGATCCAGAATATGATTAAAGAGGGGAAGATTGTACCTTCTGAGGTTACT ATCAAGCTTCTACAGAAAGCTATTCAGGAAAACGGGAATGACAAGTTCCTCATTGATGGTTTCCCTCGTA ATGAGGAAAACCGAGCAGCATTTGAAAAAGTTACTGAGATTGAACCAAAGTTTGTCTTATTCTTCGATTG TCCTGAGGAAGANATGGAGAANCGCCTGTTGGGCCGAAACCAGGGGAGAAAAGATGACAATATTGAAACT ATNANGAANCGCTTTAAGGTGTTTCTTGAATCTANCTTACCANTGATTCNTTACTACCAAACCTAAGGGG AAANTTAGGAAGANTAATTGCTGCCAAACCCCTTTGAAACTTTCTTCCAAGAANGTNAAAGCANTTTTTC CNCCCGAAACTNAAAAAGGTTA >gi|4713999|dbj|C99875.1|C99875 C99875 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 26, mRNA sequence TGGGGCNACCANCAANCTAANGAAGATCGAATTGGACACACTCNCGTCTATCACGCCAACANCNCTGCAT CTCTGTCTGCCCNATACGACTGCACGTG >gi|4713998|dbj|C99874.1|C99874 C99874 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 25, mRNA sequence GGCTGAAGCAGCGAGAAGACAAGGTGGTGGGAGACCATTACCGCCACCTCCGAGAGGCGTTAACCAACAA CCTCCTCGCCCTAAACCTGAACCTGTCGATCGTGAAAAGACATGTCCCCTTCTTCTTCGTGTTTTCACCA AGAGTGGTGGTCATCATACTAGTGAAGATTATGCTGTGAGAGGCAAAGAACCAAAGGATGAAGTTCAAAT CTACACTTGGAAAGATGCCAGTCTTCGCGAGCTAACAGATTTGGTTAAAGAAGTTTCTGTANCAGCTAGG AGAAGGAATGCTAGATTGTCTTTTGCGTTTGTTTATCCTAACAATAAAGGTGGCTATAATGTNANAAAAG TTGGGGAGACGATGGCTTATCCNAACCGAAAACAACCANATGACANTAAAACNCTTTCCCAACTTCCGTT TGAGATTGGAGATTATCTGGATGTGGCAATTTATTANGAGGTTTCTGTTTCTTGTTAAGTGGGATTTGGG TGCGTGCACCATGGAAGAAGTACACATTCNTATGGTTGTATCATCTTAAACTTCGTTTANACATGTTTGT NTTTTTT >gi|4713997|dbj|C99873.1|C99873 C99873 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 24, mRNA sequence GAGGAATTTTGCCAACATACAGTTACAACCATTTGGCATTACCATGGAGGATGCGTTGTGGGCAGAGTGG TCGATGGGGATTATAAAGTTATTGGTATCGACCGGCTTAGAGTCATTGATATGTCGACCGTTGGTTATTG TCCCGGGACAAATCCTCAAGCCACGGTTATGATGCTTGGCAGGTATATGGGTGTGAAGATCTTGAGAGAG AGACTCACCAAGAAGTAGGGTTTTGAATCGGATCAGGGGTTTTGGGAAAACGTTATATTAAAAATGAAAT GAATCAAGATATTACTAATCGATGTTATTAATAGCTGAATATGTATTGTTCTTGGTAATTTCTGTTTGGT ACTTATTATTAGACCAAACTGAGATGTATACGGAAATATATGTATAGACTCATTCCCAATTTTCAAAAAA AAAAAAA >gi|4713996|dbj|C99872.1|C99872 C99872 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 23, mRNA sequence TTTNGGNGGNCCTNGTAAGGAATTCNTGGGTCGACCCACTCNTCCGATTTGTAATAATCTTCGTAGAAAA AATGGATTCTGATTCTTGGAGTGATCGTCTCGCATCNGCTTCAAAAATATATCAGCTCGATTTCTTGTCT CGATCTGACAATTTCTTGGGGTTTGAGGAGATANAAGGAGAAGATGACTTCAGGGAGGANTATGCCATGG TACCCGGATCCTC >gi|4713995|dbj|C99871.1|C99871 C99871 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 22, mRNA sequence GGACGAACCGGTGTACCACGATTTGGTTCGTCACTGTCTGGCCTACCCAAAAGCGGATGGAATCTTGGTG AATACATGGGAAGAGAATAGTTCAGGGAGGAGTTAGACTANCCATGATACTAAACCGGGTTTTTAGTGAC GATCATGCTATTGCTGGTGTTGCTGCCACTTGAACCAAACCCGACATACCGGGTCATCAAAGCATTTGAT TAAGAGATTATTTGATACATTCACAAAATTAATTAAGGCTGATCAGACATTCTTTTCTTTTAGTAGCTTT ATCTATGTGACAGCTAATGCCTGTGGACTGCTTTGTTTAGAAGTGTTTAGCATTAGATCATATGCTAATT CAATGTTATTAAGTCATCGTATGATCGTTTTAG >gi|4713994|dbj|C99870.1|C99870 C99870 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 21, mRNA sequence GCAAGAGCTTTGATAAACTATCGTATCAAGGAAAACATTGGCACAGGAAGCTCCTCGAGTGCCCCAGTTC CATTTGCAAAGAAGTTCTTTATGCAGAACCTTAGACCAACAAGTCCACAGCCTTCTCCTGCAACCACATC GAGAATCTTACCCTTTATTTGCCCAAAACAACCTTCCAGAAGCAGCANATCATCCTTAGCAGCAACTTCC GGTATTGACAGAATTATGGCAGCAGCCTTGGAAAGCCGCAGCTACCAGCGGCCTCAGCAGAGATTTGCAA ATCCGCCTTATGTTCCTATGAGGCAATTTAGATCGCAATGCCATGGGATGGCTCCACCTGTCNCAATCAG AACCGCTGTACCGGTCTTCTCTGCACCTCCAATGCCTCCTCCACCATGTACAAACAACACTCAGCTACCT TCTTCTGTGTATGTCCCATCGCTGATGCGAACTGCACCACCTGTGANGATCGCGCCGCCTGTCACAATCA GAACCGCGGTGCCCGTATTTGCTTCTGCGCCACCGGTTAGAATTANAACCGCTGTGAAGCCCACAGTTGA AGGCAGGAGAAAACCCGCNTATCATCNNTCCCAGAAAAAGGAGAATTATNCCCNGTCTTGGCCTGATANT CTTGAAAATT >gi|4713993|dbj|C99869.1|C99869 C99869 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 20, mRNA sequence AGCTCGTCAATCAATGGCGTCGTCTCTATCTCCACCGGAAGAAGCTTCGTATCACCACCGTCATACCAAA AGGTACACCTCCTCCGCTTCCTCCGCTTCCTCCACCACCAACGGAACCGTCGAATCATCGGTTTCCGATT TCGTCANACGTCCCAAAATCTCTCATCCGAATTACATATCAAGTTCCGAGATCGAATCAGAGTTTTCTCA TCACGATCCAGATTTCGCAAGAATCNACAACGGTAGTTTTGGTTGTTGTCCGTCATCAATCCTAGCTTTA CAACGAGATTGGCAGCTCCGGTTCCTTCGTCAACCGGATCGATTCTATTTCGACGAACTCNANCCANAAA TCTCCGATTCTAGATCTGTAATCNAACGGTTAATAAACGCCGAGCATGGCGATGAAGTCTCGATCGTCGA TAACGCAACAACCGCAGCTTGCAATCGTTCTTCACAAACCCCTTGGGCTTTTTCCTTGAAGGTCGGTTCG ATAAAAGGCGNANGCGGTGGTTATGCTTCATTAAGCTTATGGGCTCTGTTGAAAAAAA >gi|4713992|dbj|C99868.1|C99868 C99868 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 19, mRNA sequence AAGAGTATTCTAAAAGCAACCTTTTCTTGGTGGGGAAGTCACCGGAAGGTTCTGTAGCGTCAGGGATAAA CGTAAGAAGCGACACGCCTGAGCTTGGACCGATCGGGAATTTGTTAACGGAAAGCGAAAGTGTTTCGACG GTGGCATCAGTGTTGGTGGTGCAACAGTATATAGCAAGCCGTCCGGTCGGAATTTCGAAGAACGTCACGA CTGAAGAGTCTCAAGGAACAAAGTTGAAAGACTTTGTAGCAACAATGCAATCAAATGAGAAATTACAGTC AGAGATGTCAAAGCTCCGTGAGATGGTAGAAGAATATGCTAAGCAATTCCCAACGATTGGGTTCGAGAAA GAGACGATGAGATACCNNGAGTAGTTTTCATCGTGTGGATTGACACGTTTCCCCATCTCTGANATGCTTT AGTGATCATGGACCANAGGCGCCACCGATGGTCTGAAGTATCGCTGAAACTAAAGTTGAACTAAAAAAAT CGCACTCCAATGTTTGTCTCTTACCCTTTCCCTTTTGTCTCTCAAATTTTTATCTTTGGCTT >gi|4713991|dbj|C99867.1|C99867 C99867 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 18, mRNA sequence GTCGGCTCGTTCTGCGATCACNNAGCAAAAGCTGGCTCGATCCTTTGGGGAAAGTCTGATTGGTGCCTCN CGTTCGGNGGTTTCGACTCNAGGACCGGCGATTCGGTNCTTCNCTGACGAGANNGGTCGTGTGCTCANCG GANAGGAACNCGCGANACANAGCATGTCTATNCCANAAATGGAGAGGGANNGACTGGAGAACAAGAGGAA ACTCGAGCCAGATANGCTANATGGTGAGAAAGGANGTGCCCACAANAANCCTGACACCAGCNAGCCATGA GTTTATCACTCACAGTATACNTGAANCCTGTCNTAAGGCAAGCAGTAGTNAAAAACAATAATGCCTTTGA CCTGGTTTCTCTCTTGGTATGAGAGATCTTGTACTTGTNCAGAGATCTTTGTCCNTCTGACGTGTGTGTT NGTNTGTTCTAANAAATCAANTTTNCATAATCC >gi|4713990|dbj|C99866.1|C99866 C99866 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 17, mRNA sequence ATTTCGATTCTCTGTAATTAAAGACAAAATTGGAATAGAGGAGACATTGTCTCTTTGATTCTTGAGCTTA TTTGGGGGAGAGAAAGAGAGAGCGAGAGGATCTGATGTGTATCTCAATCTCGCAAGTCTCTAGATTGAGA ATCCATTCATTTGGAAGTTCTTGCTGTGAGCGTGTTCATGGATGGATCAAGAACAGCTCTAGCTTGAAGC TGCTTGATGTTAGAGCTTCTTCTGTTGATGGTAAAGCAAGATGGATCAGACGTAACGTGAGTACAACTAC ACAAGGTAGTAGAAGCAACACTAANANCAGTGTGTTGGGAGGAACAGTTCCTGTTACCAGGGATTATAGA TNAAGAGAGTANAACCNAGGTACAGCCTTTTGGTAATCTTCAGCAACGGCTTGCGCNAGATAAAGATCTG TCTAAGCTCCTCNCGGTTTATAGTCTCTGATCTTTGAAACAACTGGGTTTGCATCNGGAAAAATGAGCNG ATAATTTGAAATTTGCCANCTCCGGAATNTAACTTNGGTGGGTNGGGGTTCNACCACCATTTTCAAAANC TCNTTGTTCCACCCCCGGGGGTGTTTNGTTTCCCC >gi|4713989|dbj|C99864.1|C99864 C99864 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 15, mRNA sequence AGGNTCCTCTACGATCGACCTGACTANNCTACNNCTGCNTGCGACATCTTTTNNCTTCTCTAATGTNGCC TACANNTNTNCCNGACNTGGTGGTCNGANCCTCAACTCCAANCNNGACANCTNNANGNTGAACTGGTNCC ACGTGTGAGGACTATCCACCAATGGACCGATATCAAAGAAATGAAGGCGATACAAGTCCACCAATGGACC GATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGAAATGAAGGCGATACAAG TCGACCAATGGATCGATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGAAAT GAAGGCCCNGATATCTGAAAAGCATAATAAATGAATCAATATCTAAAATCTGGTGTTTTTCTCTCTTTCT TCTTCCCAACAATGATTGAAAAACTCTTTCTTGTTATGAATAAAGATGGATGCCCATTATAAGGGCCATC NTCTAAGCCCATCATCTANATGTTTCTAGGGTTTTACCCTTTCCTTGTTCTCCTATATAAAGAACCTTTA TCTCATGGATACCNCTCCTTCTCT >gi|4713988|dbj|C99863.1|C99863 C99863 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 14, mRNA sequence CAAAGCGTTCTAAAAGAATTTCAAAGAAGAAGTGAAAATGGAAACCACTGCTTATAACACAACATCACGA ATTGGAAACTGGTCATCGGCTATTTCTCGACCTCTACAANCATGTGGATCTTTCAAGTGCCAATTACCAC CACGAANAGGTGTTATTGTAGCTGANCTTCGAAACTCAAACTTCCGATGGAGGAAAGCAACGACAACAAG CAGAGGAAATGTTGCAGCNGAGGCAGTTAAAATTCCTACGTCAGTACCAGTAAGAGTGGCGCGTGAGCTA GCTCAAGCAGGATACCGCTATCTCGACGTGAGGACACCAGACGAATTCAGCATCGGACATCCGACTAGAG CCATCAACGTACCTTACATGTNCAGAGTCGGATCANGAATGGTTAANAACCCGAGTTTTCTAAGACAGGT CTCGTCCCACTTCAGGGAAACACGATGAAATCATAATCNGTTGTGAGANCNGTCCAATGTCTTTATGGNC TCACTGATCTTCTCCCTGCTGGCTTCNCGGGGANCACNGACATTGCTGGANGATACTCCCTGGACAAAAA TGACTGCC >gi|4713987|dbj|C99862.1|C99862 C99862 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 13, mRNA sequence AGACGACTTTCBACTGAATATCTAGCTAGCTCACACTCTAGCTGTAACTGTGTTTATTCTCACTAGCTAA TAATTAGATATTATATATTGAGTTGGTTTAATTTTGCTAGTAAAGGATGGACTGATAGGGTTTGATCAAT GGGACAAGAGAGCCACTAAGGTGAAGGGACATGACTTCATTGGTGGAGCCAACAAGCTTGCCTCCGACAA AGACAGCTGGAACCGCCGTGGAACAGCCGAGCCGGAGAAGAGCCTTCTCGATCTCACGGCAGTCCGGGTC GTTGTCGATCTCGTGGATGGTTGGTTGAACCCTAAGGTCACGGAACAGGATCTGAACGGCGTAMAGAAGA ACAACATGAGCTCTTCGTGAAGATCACCACTCCTTTCTCTGAAGACATTCTCATCACTTTGTCCATGAYC CTCAGAAGTCTGAAGATCTGATGATGGCGAGGGGTTWAAACTTTAGCGTTTTGA >gi|4713986|dbj|C99861.1|C99861 C99861 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 12, mRNA sequence CACGAAAGTCTTACGCGTCTCCTTGAAGATGCGAAATCTATTATTGAGAAATATTGGAAACTCAGATGGA GCAGACACGTTTGCAGGAAGTACAGGTACATCAAAAAACTCGAATCGATAGAACTTGAATTAGTAAGGGT AGCACGTGAGATACAAGTCCACCAATGGACCGATATCAAAGAAATGAAGGCGATACAAGTCCACCAATGG ACCGATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGAAATGAAGGCGATAC AAGTCGACCAATGGATCGATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGA AATGAAGGCCAGATATCTGAAAAGCATAATAAATGAATCAATATCTAAAATCTGGTGTTTTTCTCTCTTT CTTCTTCCCCACAATGATTGAAAAACTCTTCTTGTTATGAATAAAGATGGATGCCCATTTATAAGGGCCA TCATCTAAGCCCATCATCTAGATTTTT >gi|4713985|dbj|C99860.1|C99860 C99860 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 11, mRNA sequence CACGAAAGTCTTACGCGTCTCCTTGAAGATGCGAAATCTATTATTGAGAAATATTGGAAACTCAGATGGA GCAGACACGTTTGCAGGAAGTACAGGTACATCAAAAAACTCGAATCGATAGAACTTGAATTAGTAAGGGT AGCACGTGAGATACAAGTCCACCAATGGACCGATATCAAAGAAATGAAGGCGATACAAGTCCACCAATGG ACCGATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGAAATGAAGGCGATAC AAGTCGACCAATGGATCGATATCAAAGAAATGAAGGCGATACAAGTCGACCAATGGACCGATATCAAAGA AATGAAGGCCAGATATCTGAAAAGCATAATAAATGAATCAATATCTAAAATCTGGTGTTTTTCTCTCTTT CTTCTTCCCCACAATGATTGAAAAACTCTTCTTGTTATGAATAAAGATGGATGCCCATTTATAAGGGCCA TCATCTAAGCCCATCATCTAGATTTTTCTAGGGGTTTTACCCCTTCCCTTGTTCCCCCTATATTNAAAGA AANCCCTTTTATCTCCCATTGGGAAATAAACCCC >gi|4713984|dbj|C99859.1|C99859 C99859 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 10, mRNA sequence GTTNACGANCANGGTAAATANATGATNNTNAANNTTNTCANCTNGATACACTCCGCNNATANTTCCCNGA TNNTCCACTGCGGTGGTTCGGCNCCNNAGTCGCANNTGCNCATTCACCACCGATTNTCTACGGNCNCTGG NNTCTGTCGNGGACNTGGGACGTGGTGCTTANTAATGGTTACTGTTTTCTAGCTCTTTAGTGGTTGAATT TACTTGTCGTTTCTTAATGTGTATTTTTCATTGTAATAGAATAATCGATGTTTTGTAATATATTAATGTA TTTGATATTTCTCAACTAATTTCCATTGTAATATTG >gi|4713983|dbj|C99858.1|C99858 C99858 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 9, mRNA sequence CCTACGGAGGTCTANNCCCCCTTCCGGTACANGNNCGNAATNNNCAGGNCGGTNCTNGCTTACGANAAAT GTNAGCAAATGAGAAGGAAGTTGANGANGTTGACAAACGTGGCGGAAATATCACTGAAATTTACACAAGT GGNGGTACGGCGCNNAAATCTCTCTGCATATTCACGNTGGAGTNTCNGCGGTT >gi|4713982|dbj|C99856.1|C99856 C99856 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 7, mRNA sequence TNAGTCGNCGGNNGCTCCATAGGATCCTNACTTACGTACNCNTGCANGCGACTTCGNNACTNNTCTATNC TGTCANCTAAATNCAATTNNNGGGGCNNCATTANAATCCCNCTNCTNCCACTNCNNATCCGGAAACCATG NCNACCAGGGANTANCGGATGTNGCTTCTCGGANTCCGCNGGCCCTNTATGAAAGTTCAANGTTTNTGGG TTCCNGGGGGAATATGGTCCCAAGGCTNANNCTTAAGAGATTTGACTAAAGGGCGNCCGNTCTTTAGGAG CCCNACTAACATCCGCTTGCNTNCNACTTCCTACCTCTTCTAAAGTGTCCCTGGATNCANTNCTCNCATG GTNCCCAGANCCNCGNATNCNTCTTGGACTTCACCATGCTGAGNTTNCTCGGGGAGTGGGGACTACCGCC AAAAACTTNNNNGAATTGACNAAAGGGCGGNCGCTCTANAAGACCANCTTACTTCCCTNCNTGCNACNTC TNCTCTTCTATNNTGTCCCTNNATCCNTCCCCCNTGGTNCCNGATCCNCCAATCNCTTGGACTTNNCCNG GCTGAACTTGCTCCNNNGGTGGGGAA >gi|4713981|dbj|C99855.1|C99855 C99855 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 6, mRNA sequence CCCGCCCTTTNAANCGAGTACAANACNGGGGGAAANGTTCCGAATAAAAAGTGGGG >gi|4713980|dbj|C99854.1|C99854 C99854 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 5, mRNA sequence GNANTCGATCATACCCAGNANAGGTGTCGTATGAGGTGGTGTCNANCAATCNGTCNCACGGNACNTTGTG GTTGCGACTTCTTTTCGGTGTNCCNCGNCCTTCCCGTGTAATANGCTNNATNANCNCAAANGATTTGGTG ATTGAGNAANATGGGGAATCANCGTCNCTGGATCTCCNCCAGTNNNCTACTAGGTCNGTACNNTNAGACA CCGGCNCGGANGGANTCTGCNNNACCGCTTCNAGACAATCTTNTATGTNAATACNTCANACGAGGCATAT ACAANGCAGTTGAAGCTGGTANCTAGCATCTTTAATCGGGCCAATTCTTCGTCCATACAAGGATACGNGC TTGTCCCGCATNTTGCCNCCCNCATCCGGTNTGGAGGATATGTGATCGNCTCTTGAGATGGGATCGTGTT GTTTCGCTAGCCGATCTCATTCTCCGTTCCCAGAAGAGTTAGAANAGATTATTTATGNTAANACGGCNTT CAGAATTGTTTGTTAAATTTGTTGCCNAATCCTTTTGNATANTTNTTCCCTCGGGGTNCCCTCGTTT >gi|4713979|dbj|C99853.1|C99853 C99853 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 4, mRNA sequence ATGGTGGTGACGTCTTTCTCTTCAGCGCCGCCTATCTTCTTCTTACCTGGAGCTGATGCTCAGTTTTCTT CTTCCAATGGAAGGTTTGCTATTCCTTCCTCTTCTCTCGTAAAGGGACTAAGAAGACACCAAGATGCAAA GTTGGTGGGCAACAGAGCCAGAGTTGGAGTANTACGAGTCCTAGCGAACCCAAATGTATCTCCTCCTCCT CCTCCAGGAAAAGCAAAGGTAAAAAAAGAGGTAATCATGGTAGACCCTCTTGAGGCTAAGCGGTTAGCTA GTAAGCAAATGGAAGAGATTAAAGGCAGAGAAAAGCAACAGAGAAGGCGTGAAATAGAGGCTATTAACGA AGCATGGGCAATCATANGACTCATGATAGGGCTGGTGATCGAAGCTCAAACGGGGAAGGGTATTCTGGCT CATTGGCTGGTTATTGGTCTGCANTTGTCCATTTGTTCACTCCATCAACTTANAATGAATTAAGTTTCAT TTGGTTTTCTCTACTCTCAACTGTGACCAAATCTAATGTTGTGTTCATGCCAGTTAANTTGTTAAACACA TACCTTTGTTAATCCTCCCTTGTTTCAAAACTTCNAATCCTGCCNTTTGTTAAAAAACAAAATTTAAANA TTTTACNCTTAAATAAAANCNACNTCCCTTTTGTTAC >gi|4713978|dbj|C99852.1|C99852 C99852 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 3, mRNA sequence AGNCNGGNGCCGCTCTACANGAACCAAACTNANNTTNACNTNCGNNCTAATCNCNCCTCTNCGNTNCTGT AACATATNTTCNCTTACNCCNATGGTCCCACGGATCCTCTACTTCTGGGTCTGANGACACTGNNNGAAAA TAATCACTATCACCGGATNAGTATATCTTAGCCCCTNCCGTCCCAACTAAAAACGGGAATCGTCTCTCTA TGCTGTCACATTGATGAAGATCATCCTATGGATGCAAAAAATGGGGTATGTCCCGTTTGTGCGGTGAAAG TGAGCTCTGATATGATTGCTCATATAACCCTACAACATGCAAATATGTTCAAGGTGACGCGGAAAAGGAA ATCAAGAAGATGCGGGGCTCAATCCATGCTATCGATCTTGAAGAGAGAGTTTCCTGATGGAAATTTTCNG AGCCTATTTGAAGGAACATCACGTGCTGTATCCTCTTCTTCTGCCAGTATACTGCTGATCCTTTACTGTC TTCATTCATTTCCCCAATGGCTGATGACTTTTTCCTTTCTGAATCAATCTATGTGCA >gi|4713977|dbj|C99851.1|C99851 C99851 Arabidopsis thaliana library (Motohashi R) Arabidopsis thaliana cDNA clone 2, mRNA sequence CCATGGTACCCGGATCCTCCGAATTCTTTTGCTTTNTACCCTGGAAGAAATACTCATAAGCCACCTCTGT NATTTACCCCCAATCTTCACAAGAAAAACTGGNGATTTNGATATCGTCTCTCTATGCTGTCACCTANATT CAATTCACATTGATGAAGATCATCCTATGGATGCNAAAAATGGGGTATGTCCCGTNTGTGCGGTGAAAGT GAGCTCTGATATGA >gi|4699972|dbj|AB018246.1|AB018246 AB018246 Arabidopsis thaliana library (Shinozaki K) Arabidopsis thaliana cDNA clone CIC3B1-1, mRNA sequence AAGATTGANGCNATGGTNACNAAAGTTAAGGCTGAGGACNAANGTGAATAGANGANAAGGAAANTNAANA AATNNAAACACNCGGCNGACATGTCACTTAGTNTTCTCCGNGGTGGTTCNGCCCNTGAGTCGCNGGGCNC ANTCGCCAAGGAGTGTCAACGGTGNCCTGGGAATGTGTCNGGGACGGGGGACNTGGGGNNTCCCTAATGG TNACTG >gi|4239698|emb|AJ132770.1|AJ132770 AJ132770 Arabidopsis thaliana library (Josefsson LG) Arabidopsis thaliana cDNA, mRNA sequence TGGATCCAGGATGGGGTTTCTAANATCAGACTCCGACCAAATCCCAAACAGCTTGANNTAGTTCTCCAAA CTCGCGAACTCGGATGAGCTTAACTCCTCCTTAACCCGATATTGCCANGGGATCCANTATCNGGTTTGGT GACCGAACGCATGGGCATTGATATCCTTCTTTCTCCATCCACAGACTTTGACTTAAGTTTGTTTAACCCC CATAC >gi|4239697|emb|AJ132768.1|AJ132768 AJ132768 Arabidopsis thaliana library (Josefsson LG) Arabidopsis thaliana cDNA, mRNA sequence CGGGTTGGTGGGGAACCCATGGGTTGATGACTGTGCGGCCGCACGGGTTTCATCTGACAACACTCGCCTA TCTCCTTAACCCCATACTAGATCT >gi|4239694|emb|AJ132747.1|AJ132747 AJ132747 Arabidopsis thaliana library (Josefsson LG) Arabidopsis thaliana cDNA clone LJ119, mRNA sequence GGAAATTCGAAACTCGATTGGTTGGTTGACTTCTCTCTCTTCTCTCCCTAATATTTTTCAGAGAGAGAGG TTCTTATATGTTATCTCCGTCCGGTTTGTTTTTACCGGAGTTTATACTCGGATGAAGTCCGGTTCTGCTG TTAGTTAGCCGTCAACACGACTTCTCCGTTGTCGTGTTCTTGCCGTCAACACAGCTTTTTCGTTGCTGTG TTCTTACCGTTAACATGGCTTTCTATTGCCATGTCCTTTTGCTCATACAAAAGCTTGATGTTGAAGACTA TGGCTTCTAGGATTGTTGAATCGGGAGAGTTTCGTATGCGCCAAATCTATTCTCTTTTGCCATAATATAC TTCATCCATTGAGATTTTGCTTTTGGATCTGATGGTTTTCTAACGATGTGTGGTTTTCACTTCCACACAA AAACGTTGGATCCATCGGATTTACGACAGCTTATGTTACCTGCGTCTAAGGTTTGGTTAAAAACTCATTT CCATCTTAAATTTCGATTCCCTTTTGCTGCTTATAAAAATATTCAGAGATTCACTTATATTATCAAGGGT GGATTACTTCAATCTCTACATCTTATTTCATGATTACGATGGTTTTCTTATGAATCTATCAATCATTTGA GATTAGTAGATTGATTTGTTCTGTAATCCATTATTATCATTATCAGTGAGAAAAAAAGAAGAATTCGTAA TCGGTTGTAGTTCCGGCAACGTATTCTGATTCACTGGATTTGGAATCTCTGCATGCGGTGAAGGATGTGA AATAAACACGTATCCTCAACTTATCCCCATCGATGAGACACGTTCTTGAGTTTATCCTTTCTTGGGCCTC TTGTTTGGGCTTCGTTGAAAGTTGTCTTTGATGTTTATGTAATTGGGTGTGATGTTATGTATTATTATTT CAATAAAACTGCAGTTTCAGAGG >gi|4239693|emb|AJ132746.1|AJ132746 AJ132746 Arabidopsis thaliana library (Josefsson LG) Arabidopsis thaliana cDNA clone LJ177, mRNA sequence CTTTTCTGTCTAGAGAGAGAAGCTTTTATCTTTCATCGCCGTTAACAGGGCTATTCCGTTGCCGTGTTCT TGCCGTCAACATGATTTTTTCATTGCCGTAGACATGGCTTTCCGTTGCCGTGTTTTTATGTCGTCGCTTT TGTTAGGTGTTGTTTGTTTGCTTCCAATAAAGGGGAATTGTCTTTCGTCTCTGTCTTTACAGAGTTTTAT GAGAGATGACACACCTATCTTATATGTTTATAGTTTATACAAGTGTTTTTATGTTTGTTGGATTTGAAGC GAAGCTTAACCATCTTATGGTGACTTAGATCTATTTAGAACCTTTAGTTGGTGGCTTTTCTCCGGATCGT CATGTTGGGTATACGGATTACTGAAATTTCAAGGATAGTTTGCAAATAAAATTGAAGAAAAGAAAGAAAT TTCCTTCGCGATTTTAAGATGCCTTTTAGCCGTGATTTCAATTGTTCGGAGTTTTGATTCGTTTTGCAAC CAGCTTTGTCGGTGAAAATCAGAAGAATCAATAGTCGAATTTCAGTTATCGGCAATGATTTTCTTCACCA GAATCAGCATCTTAGATGGCGGTGGTGATGTCGGAAAGCTTTTAGAATTTTCATCCAACACGTGTACCAC TGTTGACACGTTTGTTTGGGAATGAAACTAATGATAAACTTTCTTCAAGTTGAAGCAATATATTGTGTGG GCCTTTATGGGCTGTAATCTGTTTTGTAACCCATGTTGTTATGAATAAAATCCTAATCTTGCGAG >gi|4239690|emb|AJ132744.1|AJ132744 AJ132744 Arabidopsis thaliana library (Josefsson LG) Arabidopsis thaliana cDNA clone EM179, mRNA sequence CCACGCGTCCGGTGTTGGCTGGCTCTTGCCCGGCAGCGTTGTTTCCATGAGCGTCGTTGGCCGGATTTGG TTTGTATCCAACGTTGTTTTGTTTTTCTTTCAATAATCTCATAGATCTTATGTTGGTGATAATGGTTTAG GTGATTTTTCGCTTAAAGATCTTTATTATCCAATTCGATCTTTTGAGTTTGAGATTTGCAGGAATCAATT TAGAGATTTGCATCTTAAGTTGAAGAAAAGAAGAAGTTTTCGTTGCATATTAATATTGCCCTTAGCTGCT AAGTTTTTATCTGGAAGTTCGATTGGTTTGTTTAAGGTGAAACCCAGAAGAATCAAACTTGCTTTCATTA TCAATGTTGATTTTTCTCACCGGAATCAATCTCAGACGGCAAAGGAAGATGTCGGAAATGCTTTTAGATT ACTCATCCAAACGTGTGCTGTGTTGTTTTCAGCTGTTGACACGTAAGATTGGTTGGAGCCACAATATCAG TTCTTCATCTTTAAGCAATGTTCTTGGACTCATTTAGGACTTCAAATGTTCTTGTAATCTCAGTGTATGT TGGGCTTTTGGTTTTTTAGCCCATGTATGGTTGGTTAACGTTAATAAGATTTTCCACTTATGAG >gi|4239689|emb|AJ132743.1|AJ132743 AJ132743 Arabidopsis thaliana library (Josefsson LG) Arabidopsis thaliana cDNA clone EMR03, mRNA sequence CCACGCGTCCGATAATGGTGTCAGAGTTCTCTCCCTTCTCTCTCTAGGATTTTGATTTATGTTCTTCTTT GTCGTTGTCTTTCACCGCCGTTAACATGGCTATTCCGTTGCCGTGTTCTTGCCGTCAACATGGCTATTCC GTTGTCGTGTTTTATGTCGTAGACATGGCTTTCCGTTGCCATGTTTTTATGTCGTTGCTTTTGTTAGGTG TTGTTTGTCTGCTTCCAATAAAAGGGAATTGTCTATCGTCTCTGTCTTTACAGAGTTTCATGAGAGATGA CACACCTATCTTATATGTTTCTAGTTTATACAAGTGTTTTTATGTTCGTTGGATTTGAAGCGAGGCTTTA CCATCTATGGTGAATCAGATCTATTTAGAACCTTTAGTTGGTGGCTTTTCTCCTTATCGTCATGTTGGGT ATATGGATTACAGAAATTTCAGGGATAGTTGCAAATAATGTTGAAGAAAAGAAGAAATTTCATTCACCAT TTTAAGATGCCTTTTATCCGTGATTTCAAGTGTTTGATCAAGTTTTGATTCGTATTGCAACCAGCTTTAT CGGTGAAAATCAGAAAAATCAATGGTCGAATTTCAGTTATCGTCAATGGCGGAGGTTGATGTTGGAAAGC TTTTAGAATTTCATCCAACATGTGTACCAGTGTTGACACGTTTGTTTGGAGATGAAATCAATGAGAAACT TTCTTCAGATTGAAGCAATATTTTGTGTGGGCCTTTATGAGCTGTAATCTGTTTTGTAACCCATCTTGTT ATGAATAAAATCTTAATATTGAG >gi|17479|emb|Z18386.1|Z18386 ATTS0760 Grenoble-B Arabidopsis thaliana cDNA clone GBGa314 5' similar to hypothetical protein 1 - garden pea, mRNA sequence AGAGGGGAGGGAGAGAAATGGAAGGCAAAGAAGAAGATGTACGAGTGGGAGCTAACAAGTTCCCGGAGAG GCAACCCATCGGTACATCGGCTCAGTCCACCGACAAGGACTACAAAGAGCCACCTCCTGCGCCACTGTTC GAGCCCGGCGAGCTCAGCTCATGGTCTTTCTACAGAGCCGGAATAGCTGAGTTTATCGCTACTTTCTTGT TTCTCTAACA >gi|4210261|gb|AI253275.1|AI253275 EST161 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence GAAACCCAAACCCTCATTCCAAAAAATGGGGTCTCGCTCTCAAAACCTCTCCTTTCTCGTCCTCCTCCTC CTTGGCTTCGTTGCCGTCTCCTATGCTTGCGACTGTACCCCTCCTAAACCATCACCAGCACCTCACAAAC CACCAAAACATCCAGTCAAACCGCCTAAACCTCCTGCCGTCAAACCACCTAAACCACCGGCAGTAAAACC ACCTACTCCAAAACCTNCCACCGTGAAACCCCATCCTAAACCACCCACCAAACCTCACCCCCACCCAAAA CCTCCCATCGTAAAGCCACCAACCAAGCCTTCTCCGTCCACCCCTAAACCTNCCACCAAACCTTCCCCGT CCACACCTAAACCTTCCACGACCAAGCCT >gi|4210260|gb|AI253274.1|AI253274 EST145 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TGACTACTGACATATAGAAAAAGAGAGAGGAGGATAATAATATGGCGAGCAAGAAAGCAGCTATGGCTAT GATGGCGATGATCGTGATAATGGCTATGTTGGTCGANACATCAGTAGCGATAGATNTCTGCGGCATGAGC CAGGATGAGTTGAATGAGTGCAAACCAGCGGTTAGCAAGGAGAATCCGACGAGCCCATCACAGCCTTGCT GCACCGCTCTGCAACACGCTAATTTTGCATGTCTTTGTGGTTACAAGAACTCTCCATGGCTCGGTTCTTT CGGTGTTGATCCTGAACTCGCTTCTGCTCTCCCC >gi|4210259|gb|AI253273.1|AI253273 EST91 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TGACTAATGACTGGAGGGTTTCTGTCTATGCGGCAAGGGGCTGGTGCTGCTTCGAGATCAGCTATTTTTG GAGGGGTTTTGCTTGCTTTGATTGAAGGAGCTGGGATCATGTTGAACAAGGTACTGGCTCAGCCTCGGAA TATGGTGATGGAGGACCCTGGAATGCAAGGAATG >gi|4210258|gb|AI253272.1|AI253272 EST59 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TGTAACTGACAGAGTGGGATAAGAGACAAATAAGGAGAATCAAACAAGCAATCCGATCGATCTACCAGAT CGCCATGATTCTTACAAGATGCTTACCCTTGATATGGCTATCTCTACTTACTGTGTGTGCTGCTGGGAGG ACATTGCACCCTCTCCCCTGTTAAAGGACCCAAAACTGTCAAGCTTCAACTTCCGACTTCACGTCCTTAT AACATCGCACACAGAGGTTCCAATGGAGAGATCCCAGAAGAAACTACAGCTGCATACTTGAAAGCAATTG AAGAAGGCACAGACTTCATAGAAACAGATATCTTATCATCCAAAGATGGTGTGCTCATATGTTTCTATGA TTGTATTCTCGACGAAACA >gi|4210257|gb|AI253271.1|AI253271 EST52 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TGACTAACTGACGGGGAATACGACTTCTGATTTGAACAGTTAAAAACGAAAAGTCTAATAAAAGCTATAC TTAACGGATAGCTTTCGCGACATAGGAAAGGGACATGATGCGTCGTGTAAATATTCTTTGCTCATTTGCT CTGCTTTTTGCCAGCCATACTAGCCTGGCGGTAACTTATCCATTACCCCCGCGCGGCCGCGCGGCCGCGC GG >gi|4210256|gb|AI253270.1|AI253270 EST47 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TGACTAACTGACGATGGTGGTGGTGGTATNACAGGTGATGATATTGTTAGGACAAGAGATTGGTAAAGTG TCGTCGACTCTATACAAAGTTGGGGACATGGACGCTTGGGGCATCCCAATTGATGCTAAGGTCNACTCCA AATGGCCCAAATCTCACTCTTTCAAAATCGGTGACTCCCTCTTGTTCTTGNACCCACCAAGCGAAGACTC ACTGATTCAAGTGACGCCTTCCAATTTCAAGAGCTGCAACACC >gi|4210255|gb|AI253269.1|AI253269 EST19 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence GCAAGGACAAAAAANGGGGGAAGAAATTAAGGGAAAATTAAGGACAAAGAACGCNCCAACAGATTTGTTN TTCNGGAGNGGAGGGGGTATTTGGAGAAAAGAAATTTTTCNTTCTTTATTNAAGGNAAATAATTTTTAAN GNGCACGGTAAACGGCCTTCCTTCCAGTAAATGGAATNGGAATAAAAAAAAGTTGGTGTNTGGNTTTCAA GTATAAATAGACCGCAANNATNAATCTNGGTTTCCTCGTCATGGTTCTCGTTCCCTTTCTTCCTGGTTTC TTTTTNGGCACAANATTTCAAGNTATACCAAGCATACAATCAACTCCAAGTGAATTCGGAAAAATTAAGA TANGGAGGGANTCTNGAAGTTGTCAACTTTGGTGATTGTGTGCATGTTAGTGACCGCTCCAANGGCGTCC GAGGCAGCAATNTCGTGCGGCGCAGTCACCGGCAGCTTAGGTCAATGCTATAANNACTNGACCCGAGGCG GTTTCATTCCTAGAGGGTGTTGNTCNGGCGTTCAGAGGNTCAACAGCTTGGNTNGNACCACCCGTGACCG CCAACAAGCTTGTNGTTGTATCCAGGGTGCAGCGAGAGCCTTGGGTTCTCGACTNAACGCTGGTCGTGCT GCTNGTCTCCCCTGGTGCTTGCCGTGTTAGGATNTCTNACCCCATCAGTGCCAGAACC >gi|4210254|gb|AI253268.1|AI253268 EST11 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence GGACTAACTGACGATGTTTGTTGCGGGGCATATCTACCGCTATAATGTTGATCAGTTNGGCTGGTCAGCT AAGTCCAGTGAATTTCTGGAAAAAAGGCAGCTGAAGTGGGGCAGTATTTTATTCCATTACGGAATNGNAT TTGTTTTCTTTGGTCATGTAGCAGGTATTTTGGTTCCAAAGGCATTNTATGAAATGATTGGTGTAACAGA CCATATG >gi|4210253|gb|AI253267.1|AI253267 EST54 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TGACTAACTGACCATCCNACCTCATTTACTGTTCTGTTTCACTTTCTCTCTCTCTGTANACTCTCTAAAT GATGGCAAAAAACTGTAATTTAGTCAGTGTTCTATGTGTATTTTTGGTATTGACCCTCTTTAACAAACCC ATCACCGTCGCCGGGCAGAATATTCCGGCGGTGGGCTTGTTCACCTTTGGTGACTCCAACTTNGACGCC >gi|4210252|gb|AI239412.1|AI239412 EST162 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence AGGAGGAGAGTAGTGAACGGAATTAACCAGACAATTCACTCACAACCTAGCTAGCTAGTGAACAGTATTT TCTATATACCAAAAATGGCTTCAAGTTCCATAGCTCTTTTCTTGGCTCTCAATCTTCTCTTTTTCACAAC AATCTCCGCCTGTGGTAGCTGTACTCCGTGCGGCGGAGGTTGCCCCTCTCCCAAGCCAAAGCCAACTCCT >gi|4210251|gb|AI239411.1|AI239411 EST160 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TTGGAGTTGACGGAATGATTATAAACCTTGCCACACTTCTAGCTAACATCGTGACGAATCCGTTTAATAA CGGATATTACCAAGGCCCACCAACTGCACCGCTTGAAGCTGTGTCTGCTTGTCCTGGTATATTCGGGTCA GGTTCTTATC >gi|4210250|gb|AI239410.1|AI239410 EST157 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence AGATGGGAAGTGGCATGATAAGGACATTGGTTATTCTAGCAATAGCTTTATACATGATCGGTTCCGACAA CGTCCACGTGGCAAAAGCCCAGGTCTGTGGAGCTAACTTGTCGGGACTGATGAACGAATGTCAACGCTAC GT >gi|4210249|gb|AI239409.1|AI239409 EST156 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence AGAGAGATAGTAAGAGTAGGCGCCCTCAAGAAAACAGAGTAAAAATGGATCAAACTTTGTATCGCAAGTG TCTGGTTACTTTATCGATGATGGCAATGATCGGCACATCAATGGCTACATATGCCGGGACCCCATGGCGT ACAGCCTCAGCC >gi|4210248|gb|AI239408.1|AI239408 EST154 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TCACAGGAGGAACGGGTAGCTTAGGTACAGTCACTGGTGGAACGGGTAGCTAGATAACAAAATAACGGAG TTGAAAATGATGTTTAATAAAATATCCCTAATCACTGCTCTGTTGTTTTTTCTATTAGGAACGAATGTGT TCGCCCATTCCCATTTAGAAGATTCATCTCCTAAAGATGGCGCAGTGCTAACTGAATCATTGAAAGAAAT CAAACTAACATTTGAAACGAGCCTTGAACCAACTAGTACATTTACG >gi|4210247|gb|AI239407.1|AI239407 EST153 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CTCGTTGAAGACCAACAATTTCAAATCTCACTTCCTTATCACAATGTCTTCCTCTATCTCTCCCCTCCTC ACAACCGTCATCTTCGTGTCGAGCCTCCTCTTCCTTACTATCTCCAAAGCGGCGACAATTCCAAACATCC AC >gi|4210246|gb|AI239406.1|AI239406 EST147 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TTCTCTCCAACTCGCGGAGCTCTTCGTGAGCTCTATTGTGCATTTGCTTTATGGGTTTTATATATTTAGC TCCGCCGTTGCCGGAGATATCTCTCAGACGTTGAATGATTACTTGTTTAAGTCCAATGTCGCTTTCGGAG AAACCGGTCAAAATCAAACCAATGTTGAGGGTTTGCCACCTATTGTATTGGC >gi|4210245|gb|AI239405.1|AI239405 EST137 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence AGTGGTGGTTTCCGGCTTAAAGATGAAAGCTTTCTACGTATTCGTTGTTGCTCTTCTTCTCACCTTGAAT TATAGGGGAGAAGCAAGTGGTTCTGTTTTCTTCATTGATGGATCCAACAATCAATATCTTCGTCCACGAT CATCCAGTGAGGCACTTCCCATGTCGCCTGTTGAAATATCTGCAGCAGTGTCTGCCTTGTTGGGTTTTGC ACCTTCAGCAACTTTGACAGCTGATGGCTCATCCAAGTTGAACAAGATTCTAAAACCTAATCCA >gi|4210244|gb|AI239404.1|AI239404 EST130 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence AAGTTACTGCCGCCACGGCTGCTGCTACAAAGGTTAACACCCATACAAGAGTCACGGGTCACATTTAAGC TTCAACTATATATTTGCATGTTATTTGCCAAAAGGATTTGACAATAATGCAACAAGAGTTTCATTGAAAA TTTCAAGAACCCTAGTTAATAACGATAATGGGTTCGAGAGTTTTGGCTTCCTTCTTTGTTTTCTTAATCT TCACGGTCATCACATTGCCTCCCACGATCCAAGCTTGCACTCCTTGTACTCGTCCTCATCCTCCGGTTCC GAAACCTCCACAACACGGCGGTGGTGGAGGTGGTGGTAGCAAGCCGCCCCCACATCACGGTGGAAAAGGT GGTGGTAAACCCCCACCCCACGGTGGAAAAGGTGGAGGACCGCCGCATCATGGTGGAGGAGGAGGAGGAG GAGGGGAATCACCGCCGGTTGTTAGACCTCCTCCCGTAGTGGTGAGGCCACCGCCAATCATAAGACCTCT TCGGTCGTCTATCCACCACCAATTGTGAGGCCACCGCCAATCACAAGACCTTCCATCATAATCCCTCCAA TTCAACCCG >gi|4210243|gb|AI239403.1|AI239403 EST128 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence AGCATAATTATCGATCATGTTTATCATCTATCTTTTTATCTTTCTCTCATCTGCCATTATAGATTCAGAT GGGGTTGCAATGGCCCAAAAGATCGAGGCAATTGGTGGGAAGGGAGGGAAACGGTGGGATGACGGTGCGA ACCATGAT >gi|4210242|gb|AI239402.1|AI239402 EST148 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CACACAACACAGACCTAAAAAAATGTCTTCTCTGCGTTTGCGTTTATGCCTTCTTCTACTCTTACCTATC ACAATTAGCTGCGTCACAGTCACTCTCACTGACCTCCCCGCGTTTCGTGAAGCTCCGGCGTTTCGAAACG GCAGAGAATGCTCCAAAACGACATGGATACCTTCGGATCACGAACACAACCCATCAATCATCCACATCGC TATGACT >gi|4210241|gb|AI239401.1|AI239401 EST119 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence AAACTAAAACAACTCTCTCATAATCTCTCTCCCTCACTCTAACACCAAAAGAAGAAGAAGCATTTTCCAA AGAGAAAGAGAGAGAAATGGGTTCTAAGATTGTCCAAGTTTTCTTGATGTTGGCTCTATTCGCCACTTCA GCACTCGCTCAAGCCCCTGCTCCTACTCCCACCGCCACTCCTCCTCCCGCAACTCCCCCTCCAGTCGCAA CTCCTCCTCCAGTGGCTACCCCACCACCTGCTGCAACCCCTGCCCCAGCCACGCCACCACCTGCTGCAAC CCCAGCTCCTGCCACTACTCCACCGTCAGTTGCTCCTTCTCCTGCTGATGTTCCCACCGCCTCTCCACCA GCACCGGAAGGTCCT >gi|4210240|gb|AI239400.1|AI239400 EST106 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CGGAAGGTCTTCGCAACTATCGAACGGACCTCTTATCAAACACCAAACCACACCAGAACAGAACTCAGCC ATGGCTTCTTCTTCTTCTTCTCTTCTAATCCTAGCCGTTGCTTGTTTCGTCTCGCTAATCTCACCGGCGA TTTCACAACAGGCTTGCAAATCACAGAACTTGAACTCCGCCGGTCCGTTG >gi|4210239|gb|AI239399.1|AI239399 EST102 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence GGAGATGTTTTGGAAGACGAAGAGAGATTCGATTTCTCTGGATTTTTCAAAAATGATTCTCCAATCGCAA AAGCTATGGACGATGTTTCTAATTCTAGCGATTTGGTCCCCAATTTCATACTCGCTTCACTTTGATCTAC ACTCAGGTCGCACAAAGTGTATCGCCGAAGAC >gi|4210238|gb|AI239398.1|AI239398 EST101 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TCAAACCTCACTCACCATGAGACACCTTAGCTCACCTCCATGGCCTCTCCTCCTTCTCCTCCTCCTCTCT TCTTTCACCTCCGGCGAATCCTCTCTGTCCGCAGAAAAAAACAAATTGCAA >gi|4210237|gb|AI239397.1|AI239397 EST100 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CAGAGGGGTTCCACGCGATGACGACGTTTTCAACGAGCTTTCTTTTCCTTTTGTTGGTTTTCTGTTTGAT CGATCCACTAGCTGCCGATGATCTCCAACATAAATCCGGTCGTGACGTCTGCTCCGGTGGG >gi|4210236|gb|AI239396.1|AI239396 EST099 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CGGAAGGTCTTCGCAACTATCGAACGGACCTCTTATCAAACACCAAACCACACCAGAACAGAACTCAGCC ATGGCTTCTTCTTCTCCTTCTCTTCTAATCCTAGCCGTTGCTTGTTTCGTCTCGCTAATCTCACCGGCGA TTTCACAACAGGCTAGCAAATCACAGAACTTGAACTCCTCCGGTCCGTTC >gi|4210235|gb|AI239395.1|AI239395 EST098 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TGGAGATTGGAGCGGAGATCTCTTGAATAACGGCGAAGCAACAACAAAAGGAGATTAAAAGAGGAGCTAC GGGTAAGATGATATCCTTAAGAATGAAAGGGCTTGGTCATTGCCTAGTTTATGTCGTGGTCTTTAGTGTC ATTGCGGCTATAGTGACAGCATACGACTCACCCTCTTCAACACCACAATACACTTCCCCTTATCCACCTA AAAACTATTCTCCTTATCTCTCAGAATCACCCCTG >gi|4210234|gb|AI239394.1|AI239394 EST093 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence ATACAACAATGGCTTCGTCATCTACAAGTATCTCTCTCCTTCTCTTCGTCTCTTTCCTTCTTCTTCTCGT TAACTCGCGTGCAGAGAATGCGTGG >gi|4210233|gb|AI239393.1|AI239393 EST089 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence GTATTCTTTGATGAATCGTGAAATGACGTCAAGCTTTCTTCTCCTGACGTTCGCCATATGTAAACTGATC ATAGCCGTGGGTCTAAACGTGGGCCCCAGTGAGCTCCTCCGCATCGGAGCCATAGATGTCGACGGCCACT TCACC >gi|4210232|gb|AI239392.1|AI239392 EST088 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TGGAGGAGGAAGTACAATGAGAATATTAAGCTACGGAATCGTTATTCTCTCTTTACTCGTTTTCTCTTTC ATTGAATTTAGCGTTCACGCTCGTCCCGTTGCTCTCGTCCTCTCAAATGACGATCTC >gi|4210231|gb|AI239391.1|AI239391 EST118 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CTGGTTGATACTTGAACCTACCCTTTGGTCCCTTTACGGCAACATGGACTCCTCCAAACTCTCATCTCTC TCTCTTTGCCTCTTCCTCATTTGCATTATCTATCTCCCCCAACATTCTCTCGCATGCGGCTCG >gi|4210230|gb|AI239390.1|AI239390 EST083 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence GAAATCTCCCAAGAACCCGAAAAAGCGCCATGTCGCTCACTATCCCGACGAATCTCGTTCTCAACCCGAG ATCTAACAAATCTCTCACTCAATCCGTACCTAAATCCTCCGCAAGATTCGTCTGCTCCGATGACAAATCC TCCTCCTCCGCACCTCAATCCATGAAAGCTTTCTCCGCCGCCGTCGCCCTCTCTTCCATCCTCCTCTCTG CTCCTATGCCAGCTGTCGCTGATATCTCAGGTTTGACTCCTTGCAAGGACTCAAAACAGTTCGCT >gi|4210229|gb|AI239389.1|AI239389 EST080 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TGATTCAAAAATAATTTGGTTAGAGAGTCTTAAACGAAACTAAGAGAGCACACAAGTTTCTCAACATGGC CAGTCCTAATTGGCCATCTTTACTTATGGTGGTCTTAGCCTTGTATCCCATGGCTGCGTATACAAGTGCT CAATACTCTCCAACACCAA >gi|4210228|gb|AI239388.1|AI239388 EST067 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence AGAGAGAAAAAGCAAAAGCAAAAATGGCTCGATCTTTCGCTATTGCTGTGATCTGTATCGTCCTCATCGC CGGCGTTACTGGTCAAGCTCCGACTTCACCACCAACCGNTACACCAGCTCCACCAACTCCAACAGCTCCT CCACCAGCAGCAACTCCTCCTCCTGTCTCAGCACCACCACCAGTCACAACATCTCCTCCTCCAGTCACCA CTGCTCCTCCTCCAGCAAATCCACCACCACCAGTCTCTTCTCCTCCTCCTGCTTCTCCTCTG >gi|4210227|gb|AI239387.1|AI239387 EST065 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence GCAGCTTTTGCTTCTTCGATAGAAAATCTAATTATCATCAATCATGTCTAAGTTCACGGGATTCTCATCT CTCGCTATCTCTTATTTTCTCTTGGTTTCAACGATTGTTGCAGCCACCGATGTTCACTACTGCGATAATA ACGAAGAGTATGAAGTAAAAGTACAAGGAGTTGATATAACTCCTTATCCTATAGCTAGAGGCGAGCCAAC TACTTTCAGAATTTCTGCTAACACAGACACTGAGATCTCGAGCGGCAAGTTGGTGATCGAAGTTTCCTAC TTTGGATGGCATATTCATTCTGAGACACATGATCTTTGTGATGAGACAAGTTGTCCTGTGGCCATTGGAG ATTTCTTGGTAGCGCACTTG >gi|4210226|gb|AI239386.1|AI239386 EST064 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence AAATTCTGTTTCAGTGTTCTTCAAATTCTCAATCTTTCTCTCAATTCATCTAAAGGGTTCCTCAAAGTTT CAATCTTTCTCTCTGAATCTAAACCATGGCTCGTTGTAGCAACAATCTCGTAGGGATACTCAATTTCCTA GTATCTCTTCTCTCGATCCCAATCTTAGCTGGTGGAATCTGGCTAAGC >gi|4210225|gb|AI239385.1|AI239385 EST060 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CGACATCTTCTAAGAAAGAAACAAAGAAAGACTTCACATTTTACCATTATTTGCTCTGAGCTCAGTAGGA GAGTTCAGAAACAATGGCAAAGATGCAATTATCAATCTTTATCGCTGTCGTTGCGCTTATCGTCTGCTCT GCATCTGCTAAGACCGCAAGCCCTCCAGCTCCAGTGCTGCCACCGACACCAGCTCCAGCACCAGCCCCGG AAAATGTGAATCTCACCGAGCTTTTAAGT >gi|4210224|gb|AI239384.1|AI239384 EST123 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CTCGTTGAAGACCAACTTTCCCAAAATCATTTAGTAACATCAAAATTTACAAAAAACAAAAAAACATGCT ATCTCTCAAACTCTTCCTCGTAACACTCTTCTTACCTCTTCAAACACTCTTCATTGCTTCTCAAACTCTT CTTCCTTCTTCTTCAAACACTTCATCAACCATCTGCAAAACAACACCCGATCCAAAATTCTGCAAATCAG TGTTCCCACAAACATCT >gi|4210223|gb|AI239383.1|AI239383 EST053 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TTCTTCTCATTTTCCCTCTATATATTCATATACTCTTTCGTATAGTTGCACCATCCACTCTACTCAACAT GGACTCCTCCAAACTCTCATCTCTCTCTCTTTGCCTCTTCCTCATTTGCATTATCTATCTCCCCCAACAT TCTCTCGCATGCGGCTCTTGCAACCCACGGAAGGGCGGAAAGCACTCCCCTAAAGCCCCTAAGCTACCAG TTCCTCCGGTGACCGTCCCTAAGCTACCAGTTCCTCCGGTGACCGTCCCTAAGCTACCAGTCCCTCCGGT GACCGTCCCTAAGCTACCCGTTCCTCCTGTGACCATCCCTAAGCTACCCGTT >gi|4210222|gb|AI239382.1|AI239382 EST049 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TTGTTAGAGAGGGCCATGTCTCCAAGAATTGTTAATGAAGCTCGTTCAGATCTCATTCTCTGTTTCTTCT TCCTCTCTCTTCCTTCCTTCTCTTCCCTTCCATCCTTCCAAACCCTATTCCCCAATTCTCATTCCCTTCC TTGTGCTTCTCCCGTCTCCTTCCAACCCGGCTCCGACTCCGAGTCACTGCTAGAATCCGAATTTGAATCT >gi|4210221|gb|AI239381.1|AI239381 EST046 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CGATAATGCTTGTGCTTGTTAAAGTTCTGAGATTATCCAAGACCCCAGCATTTCGTGTACAAATTGCTTC ACTAATTGGTTTGTTAATTCGGCATTCTACTTCAATCGAAGATGACTTGGCAAATTCTGGTATTTTAGAC TCTCTT >gi|4210220|gb|AI239380.1|AI239380 EST152 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CAATTTTTCCTAAAGAGTAAAGAAACTTCTCTCCTGTCTTTTCTCCTTCTCTATCTCTCTCCCTCAAAGC TAATAAATACAACATTTGCATCTAACGTTTCTCTAGCACAAAAATATGCACTCGAGTTGTTTATTGTACC TCACCGTCCTCGTCGTCTTCATTGTCTCTTTCGCCGGCGGCGAGAGATTCAAAGAAGCTCCAAAGTTCTT CAACTCCCCGGAGTGTCTAACCATCGAGAACGATGAAGATTTCGCTTGTTCAGACAAAGCCATCCACGTG GCAATGACCTTAGAC >gi|4210219|gb|AI239379.1|AI239379 EST036 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence ATTCAACAAAACATAGAAAAAAACAAAGCAAATTCTTTTTTTCTCCTTAGTTACTTCTTTTACAGATTAT CTCAATCTTACAGAGCACCATGGATCGTTGTATCTATGGTTGCTCCGTCATTACTATCTTCTTCTCCTTC TTCTTCCTCCTCAATGCATCCGCTTTAGAATCGGGTCACCACAACATAACTGGGTCGGGTCAAATAAACT CAAACTCCGTCCTCGTAGCTCTCCTCGATT >gi|4210218|gb|AI239378.1|AI239378 EST025 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CTCGTTGAAAAACAACAATGACGAAGCTCTTCTTCTTCTTCTTCTTCTCCTTCCTCTACACAATCACAAC CCTAACATTTCCGCCATTAACAACCTCAGCAGCAACATCATGCCGAACATTATGCGGCAACATCCCAATA AACTACCCGTTCGGCATCGACGGCGGTTGCGGATCTCCTCAATACAGAGGAATGTTCAATTGCTCCACCG ATCTATATTTCACCACTCCTTCCGGCAGC >gi|4210217|gb|AI239377.1|AI239377 EST014 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CAGATCTACCGGAAGATGAACGGAGAAGAGATGATAAAACTCTTCGAGACTGGAGCAGATGTTGTGGTAA TTGGAAGTGGGATAGGAGGATTATGTTGTGGTGCTATGTTCTCTATGTTTGGATTCTTCGTTCAAGCCAT CGTCACTGGTAAGGGACCGATAGAGAACCTTGCT >gi|4210216|gb|AI239376.1|AI239376 EST078 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TAAGGCAATGCAAGCTTTGATCTTTCTTGGTTTCTTGGGCACTTCATGTCTCGCTCAAGCTCCTGCACCA GCACCAACC >gi|4210215|gb|AI239375.1|AI239375 EST037 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence AAAACACAAATCTTGGTTCATTTTAAATCTCTCCAAGAAACAAAATGGCAGCTTCCATGAAATTTCTCTG CATTCTTGGTCTGATCCTCCTCATCGGAACAGTCGTTGACGGTGCAGGGGAGTGTGGTAGATCTTCGCCA GACAATGGGGCGATGAAGCTGGCTCAATGTGCTGGTGCAGCTCAGGACGCTAACTCCGCCGTGCCAGGAG GTTGCTGTACTCAGATTAAGAGATTTTCTCAAAACCCTAAATGG >gi|4210214|gb|AI239374.1|AI239374 EST006 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence TAGAGATAGTTGATTAGGTAAGCTACAGTTATTTTTATACCAGATTCAGTCCCATACAAAGAGTATAGTA GGTCACATTGGTGATTAGTCATAAGTAACAGAAAGAATTATTATATAATGACATCTTCGACATTCTCGTC CATGATATTTCTCCTCGTCCTCCTGTTTTCCCTTCATATGGGTGAAGCTCTTGGTGCTCAAACTGAGATC CGCAAAATCAAAGAGACAATTAGGATGAGGAGGAATTTGGAAGGCAATGACTACAGAAACTCTAAAATTT GGACTGGACGGAGCTATTCA >gi|4210213|gb|AI239373.1|AI239373 EST143 Arabidopsis pSMASH Library Arabidopsis thaliana cDNA 5', mRNA sequence CACCGTCGAAGCTTTCTCTTTCCGATCTTTCAATGGCGATTCTCAAATCTCACTTCTTCTTACTCTTCCC TCTTCATCTTCTCCACTTTCACACTGTCTCCTTTGCTCAGACGCTTTTTGTGTTCGGAGATGGTCTTTAC GACGCCGGCAACAAACAGTTTCTCTCTCAGAACCGAGTTGACGCAAGT >gi|3868979|dbj|AB015130.1|AB015130 AB015130 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-111, mRNA sequence GAACAGAAAATGGAAATGATACTGATCTCGTCATCGACACTCAGGTTCCATCCATTGAGGACATCACAAA GAATCGCCACCGGAACCAATAGAAGACGAACCACCACCGTGTGTGCAGACTACTACAGAGGAGGAAGAAC GGTGGACGANAACATGGTGGTCCTTAGGAAACGAATCCATGAGATGAANATGGTTGAACGCAACTTTGAA CCTCCTTCTCATTGGATGCAATGGGAGAAACGTTTCTACTGCAACTACGACGCTACTATATGTGATGCAC TCACTCTTCTCCAAACTTTTCTCATGAACTCTCGTCCCA >gi|3868978|dbj|AB015129.1|AB015129 AB015129 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-110, mRNA sequence GGAGTCGCCATTAACATATTTCATCAAGCTCAGTCCACTCTTCTCATGAAACTTCATCATCATCGACCTT GACCCTGATAGGTTTCAGACGACACCCATTATTGTAAATCTGCTGCTGGAGTCTTTTTTGTCTGAATCTT CTTCTTGTTGAGACACTGTTTCTTCTTGGTCTGTGATTTTTGTTTTGTTCTCATTAGGACGTTCTTTATT CCGGTTCAGATTTACTGGATCGTCATTTTCTCTTTGAAATTGTATTTTTTTGTTCCTTTTCTGGTATGTT GTGAAAGCTATGA >gi|3868977|dbj|AB015128.1|AB015128 AB015128 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-109, mRNA sequence GGCCGGTAACAGCAACGGGAATTTTCATGGCGGCGAGGTCACCGGACGTTATATAATTTGTATCCCAAAT CAAAATTCTGAGAAGGAAGAGAAAGCAATGGAGGACGAATTGGAAGGTCTACGAGCTCATTTTCCTGTTT CGTTCGGTAAGACATCGAAGGTTTCGGCGTCAACTGAAGCCATTCACAGCGCAACTCGCCGCACCGATGT AGCCAACGACGCCGGAGTTTCGTCGGATATCACCACGAAGAAACCTGATTCCGATAAATCTGGATTCCCG TCTCTATCTTCCTCATCTCAAACCTGGCTCCGAAGTGTTCGCGGTCCGAATCGTAACCCTAACAGCTCCG GTGATGTTACAATGGGTCCGCCACCGCCACCGTCATCTAAACGGACCC >gi|3868976|dbj|AB015127.1|AB015127 AB015127 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-108, mRNA sequence AATATTTTCTTCCAGCTGTTTTGGGTGGTTTTTCTCTTTTTTATCTCTTTTCTTGAAAAAAAACTAGTAG TCTTTTTTTTATTTCTTCTTGGGAGGATATTTTT >gi|3868975|dbj|AB015126.1|AB015126 AB015126 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-107, mRNA sequence NACCCCCCCGAGGAACACGAGACCCAAGAAAAAGATTTCAAAATGCTCACGACACCTCCACGAACCTTTG TCTCTGTCCCTTTCTTCTTCTTCTTCCTCCTCTTCCTTTCTCTACCTCTCTCATCTTTCTCTCAATCGAA CTCTGTATACAACTCTTTCCTCAA >gi|3868974|dbj|AB015125.1|AB015125 AB015125 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-106, mRNA sequence GAGCTCCAAAAAGTCGGTGGTGGTGGAAANATCCGGCGTCGTCGGATCCGAAAAAAAAAATGAAGGTTTC AAGCGGTGTGGTCGCTTCTGTCATTGCCGTCTCCACCGCTGCTCTCTCTTCTTCCTCCATTCTTCCTCCA GTCTCCCCAAAGGTTTGGGAATCGAGGAAAACGAATGGGTCGGACAATTTCGAGCCGAGGTTTGATGGGT TAAGGTTCATAAA >gi|3868973|dbj|AB015124.1|AB015124 AB015124 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-105, mRNA sequence GGCAGCCGAACCCTAGCTTTCATAAAATTTTCATTCATCATCGTTCTTGCTTCTTGCTAAAGGCCTTGCC TTGTGCTTCCTCGTCCTATCTCTCTTACCTCCGTAATTTGTTCGTAAGAAAAGTATCGTGATGGGTACTG AGAGAAAGAGGAAAATTAGTCTGTTCGATGTTATGGACGATCCGTCTGCTCCGGCGAAAAACGCCAAAAC CAGTGGTCTTCCCGACGGCGGAATCAACAGTCTGATCAATAAATGGAACGGGAAGCCTTATTCACAGA >gi|3868972|dbj|AB015123.1|AB015123 AB015123 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-104, mRNA sequence GACACCACCATTGAATTGAACTTCCCTCACACGCAAGTACCACACCTTCTCTCTCTCTCTCTCTATCATC TCTTTTCTTTTTCTCTCATCGCCTTGAAGCTCTGAGAAGTAGAGAGAAGCTCCGATCTGATAGGAACTGT GAGTTTCCTTGAGTCTCCGGAGAAAGAAGTCGCCGATTTGCTCCTGATAATCTTAGTCTCGAAATCAAAA CGATGTTTTGCGATTGCTTCTACTGGAATAAAGGTTTCTCCGAGTTGGAATCGGAATCGTCCGAGTCAAA GCCCTTCTCGCTTCCATCTCCTCTTCCTCAATGGCCACAAGGCAGAGGTTTTGCTACTGGAAGGATAAGT CTTGGAGAAA >gi|3868971|dbj|AB015122.1|AB015122 AB015122 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-102, mRNA sequence GAGCCTTAAAACCAGGCAGCCACTAAAAAAAGGAAAAATATTGAGGGAAAAAAATCACTTTGATAAATTC GCCGCCAATCTAAACCCGTTAATTTTCTTATTCGGAAAAAAAAAATGATTGGAAGCAAAAGGAAGGCAAC CCCGGCAATTAGGAC >gi|3868970|dbj|AB015121.1|AB015121 AB015121 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-100, mRNA sequence GATCCTCAAGCGATAACACCACAAACAAAACAATAATCCAAAAAAAAAAAGAAAAAAGAAAAAAAGAGCA AATCTCCATCATCATCATGGACTCGTCTCCAAACGACGGTGTACACCAACCGCTTCTCCATCCTCAACCA TCTCCATCTCCGCCGGATTTAACCAACGGGGAACTAAAAACTGTCCTCTCCGAC >gi|3868969|dbj|AB015120.1|AB015120 AB015120 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-98, mRNA sequence GGTCTCTCTGTCTCTTCAATTTCATTCGTTTTCTGAGATAAAAGTGAGAGAGAAATCTAAATTCGAGAGG AGAAGTTTTAATTTTTCTGAGTTAGATTCAATGGAAGAGATCACGGAAGGAGTTAACAACATGAACTTGG CTGTTGATACCCAGAAGAAGAATCGGATTCAAGTTTCCAACACTAAGAAACCATTGTTCTTCTACGTCAA TCTCGCCAAGAGGTACATGCAGCAGTACACTGATGTCGAATTGTCTGCACTAGGAATGGCTATTGCCACT GTTGTTACGGTCGCTGAGATATTGAAGAACAATGGCTTTGCTGTTGAAAAGAAGATCATGACATCGACTG TGGATATCAAGGGATGATTCAAGGGGTCGTCCTGTGCAGAAAGCTAAGATTGAGATCACGCTTGCCAAGT CTGA >gi|3868968|dbj|AB015119.1|AB015119 AB015119 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-97, mRNA sequence GAAAGTAGACAATGAATGATTAGGGATAGCGAATGAAGAAGGTGGAAGATGATGTTAACTTCGGATTGGC GCGAAATAAGATAAAAAAGCTTGTTCTTCAGAGAAGAAAGTGTTTATGATTGGACAAAGAAAGAAAGAAG CAAAGCCTATCCACTTCTCATCTTCTCTATTACCAACAAACCTTCCCCTTCTCTGTCGGTTCCTCCTTTT CTATTATTTTTAATTCCAGATAATAAAAAGAAAATCTTTTTTTGCTTAAAGAGCTCAAACCGAAACCCAT TTCAAGATTTCATCCTCCGGAGTGTTTCAACGAAGCTTGGGTACATAAGTCTGATATGAGAGGTTTCGTC ATAACTTGTCTTCTAAGGTAAGTTTCCTCACCTGTGGCGTAGATTGCATCATCAATCCATGGACGTTGAA >gi|3868967|dbj|AB015118.1|AB015118 AB015118 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-93, mRNA sequence TGACTAAAATATTTATTTTTATTTTCCTTCAAAAAATCTCCATTCGGTATCAGCCATAGCCAAACCTCTC TTCTCTCTTATTGTTGGGATCGACAAATTTTGCCTTGATTAGCTCGGAAACTTGTAAATCAGAGACCCTC GTAGAAACTACCCAGAAACAGCATCTCCAAGGAACAAATTAATCATTATACTAATGCCTCTGATGCTCTT CTTTTGATTTTGTGATCGACTTCTCTTTATTAAGTCTACACCTACCAGATGCAGATTATAGGTTCATTTT TTTGTATTGAACTTTAAGCCGATATAGAGTTGTTGTCATAGATATATACAGCGAGTTATTGAAGCAATGG ATGTTAATGAGGTTGAAGAAAATTTCTTTGCCCCTGGTGATGCCAAGCTACACGGAAAAATGTGCAATGC CCTTTCAGTGATCTACTGCAAGATCATGTCTATTTTCCCGTCGCTTGAAGCTGCTA >gi|3868966|dbj|AB015117.1|AB015117 AB015117 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-92, mRNA sequence GTCACTAACCTTCTTCCTTCACAGTGAATCAATGGCGTCTTCTTCTCTATCAACTCTTTGCAGCTCAACT TCTTCTTCTCTACATCCCAACTCCAAACTCTCACATTCTCTTTCAGCTAAATTATCCTCCAAAGCAAATG TTTCCGTCCAATTTCTGGGAAAGAAACAGTCTCCGCTTCTCTCCTCAACTCCGAGATTTCTCACTGTTAT CGCCATGGCTCCACCTAAACCCGGAGGCAAAGCTAAAAAAGTTGTGGGAGTTATCAAACTTGCTTTAGA >gi|3868965|dbj|AB015116.1|AB015116 AB015116 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-90, mRNA sequence GGGTAAAACTGTAAAGACAGAGAGAAGAGCACTCCCCAGTCTCAGTGGTGCGGTGAGGAGAGCTTCGTTG TCTTCCCCATTGCAATTAGGGTTTTCAAAACGGGTAATCGAATTCGGTGGTGCTCGGCTTTGAAATTGAG GATGAGATCCTTTCCACTTCCTTCTACCTGCTGACAATGGGCAACTGCGGTACTAGAGACGAGGCTGCCG TCTTCACTCCTCAAGCTCAAGCCCAACAGCTCCAGAAGAAGCACTCCCGATCCGTCTCAGATCTGAGCGA TCCATCCACTCCTCGCTTCCGAGACGACTCTCGCACTCCTATTTCGTATGCCCAAGTCATCCCCTTTACT TTGTTTGAGCTTGAGACCATCACCAAGAGCTTCCGCCCAGATTATATACTCCGGAAAAAGTGGTTTCGGT ACCGTCTACAAAGGGTTACATTGATGACAATCTCCGCGTTCGGCTCAAGTCTCTCCCTGTTGCCGTC >gi|3868964|dbj|AB015115.1|AB015115 AB015115 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-88, mRNA sequence GATGTCTTTCACTCTCTCTCTCTCTCTATATCCAAAGAATTAAAAACCATAATAAAAAAAGAAGATAAAA AGACGAATTCCAGAAAAAAAAGACGCAAAATCGTCGTCGTCGTCTTCGTCTTTGCATTTCGTCGGAATCT TTTGATTCTTGAATCGGAATATCTCTGTTTTTGTTTTATCCGGACTCAAGATCAATTCGGATTCTTGGAA TTTATTTGATTTTTTGTTGTTGTTGTTGAAAAAGTGGATTCTTTGGTTTCGATTTGTAATAATCTTCGTA GAAAAAATGGATTCTGATTCTTGGAGTGATCGTCTCGCATCGGCTTCAAGAAGATATCAGCTCGATTTCT TGTCTCGATCTGACAATTTCTTGGGGTTTGAGGAGATAGAA >gi|3868963|dbj|AB015114.1|AB015114 AB015114 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-86, mRNA sequence GAAAAACAGAACACAAACAAAAACACATTGTAACATTAGTTTAAGCATTAAGCTTCTTTATGTCGAATAA TAATAATTCTCCGACCACCGTGAATCAAGAAACGACGACGTCTCGTGAAGTCTCAATCACATTGCCTACT GATCAATCTCCTCAAACCTCACCAGGATCATCTTCTTCTCCTTCACCGAGACCTTCCGGTGGATCACCGG CGAGAAGAACGGCGACTGGATTATCCGGCAAGCACTCTATTTTCAGGGGGATTCGACTACGTAACGGAAA ATGGGTATCGGAGATTAGAGAGCCACGTAAAACGACAAGAATTTGGCTCGGGACTTATCCGGTACCGGAG ATGGCTGCCGCCGCTTACGACGTGGCTGCGTTAGCTTTAAAAGGACCGACGCCGTTTTGAATTTTCCTGG TTTAGCTTTGACTTACGTGGCTCCGGTTTCAAACTCTGCTGCGGATATAAAAACGCTGCTATTA >gi|3868962|dbj|AB015113.1|AB015113 AB015113 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-84, mRNA sequence GATCCATTGCTTAGGGAGAGAAGAGATAATGCTGAGAGCTTCGCTGCTCTGTTCTTCGACCTCAATCACT TTCACACCAATTCAACTATTCAATCCCAATAGTTCCCATCGTTTCCCAAGATTCGAACTATCTCGTCCTG TCTCGGCTTTGTCTCGTACCAAATGTCACTTGAGTCTCCTGAGAGCTCGTGGGAAATCCAGCTTCCTCAC TCGCAGCACCGCTACTGATGAAGCTGTTGAAACTAGTAGTAACAGTGGATTGGATTTGGTTGAGGTTGGA TTCTTGTCTGGTGTTCATGGCCTTCAAGGCGAGATTTGCATAAAACCAAACACTGATTTTCCTGATTTAC GTTTCTCTAAGCCTGGTAGAAGATGGTTAAAACAACAATTGTTGGGACAAGATAAGATTGATGAGGTTGA ATTAGTC >gi|3868961|dbj|AB015112.1|AB015112 AB015112 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-83, mRNA sequence TGGAGCAAGAACAATAAGAAGAAGAGAAGATGGGATTTGAAGAACGGAGGGATTCTATTAAAGGAGCTAA TCGCTTCCTTCGACGGCAAAACCAATCCGATTCGTTGCTTCTCCTCCGATCAGATCCTTAAAGCTACCGA CAATTTCTCCGAAAGCCGAATTATCTCCAGCTGGGGATACTTCATATGGTACAAAGGCGTAATCGAA >gi|3868960|dbj|AB015111.1|AB015111 AB015111 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-82, mRNA sequence GCTCTCTCCTCTCTCGCTCGCTGGCTTCGAGGAGAAAAAAGAAAAATTGGAGAAATAATTTAACTGGTTC TCGGAAAATCTAGGGTTCTTTTTAGCCACGCCTTGCTGATCTCCTTCGTGAATTCGATTCCGATTCTCAC CTGAAAAAAACTTCTTTAAATTGGGTTAAAGCTGCTGCTA >gi|3868959|dbj|AB015110.1|AB015110 AB015110 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-81, mRNA sequence AGTGTCAAATTCTGAGATCTGTAAAAGATGAGCGACGGAAACGACGCTGCTAAACGCCGTACCGCGGCGG TGACTGATTACCGGAAGAAGCTCCTTCATCACAAGGAGCTCGAATCCCGTGTCCGAACAGCTAGGGAGAA TTTAAGAGCAGCTAA >gi|3868958|dbj|AB015109.1|AB015109 AB015109 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-80, mRNA sequence GATCATCTGGTATCCACTATCCACAACTGGGGTCAGCTTCTGGTTCTCTCTCTCGGTAACTTTCTGAGCT GAAGAACCCTAATTCTTATCTTCACCGGATTCCGGGTATAGGGCTTTGTAAAGTTGTTGAATTTACAAAG AAAGATATGCTGGTTTGTCTGGGTTTTGTAGAA >gi|3868957|dbj|AB015108.1|AB015108 AB015108 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-78, mRNA sequence TGAATCGTCGTTATCAAGGTGATTTCTTTCTCTGCCTCAAACATCGCTTACCCTCTTGATTGATTCCTCC AATCTTCTTCGTGTGGTTTCACAGGTTTTACTTATGGTTAATGCAATCAAAGGAGTGTTCGTCTCTTGCG ATATTCCGATGACACAATTCATAGTGAACATGAACAATTCGATGCCTCCGTCTCAGAAATTCATAATTCA TGTACTTGATAGTACTCACTTGTTCGTGCAACCACATGTAGAGCAAATGATCCGCAGCGCCATTTCTGAT TTTAGAGATCAAAACTCTTACGAGAAAGCCCACTTCTTAGATCACATCACATTCACACTTGCTTCTTTGT TTTTCTTTCATTT >gi|3868956|dbj|AB015107.1|AB015107 AB015107 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-77, mRNA sequence GATCTCCANAATCAAAGATAAACGGAGGAGAAGAGAGCTTCGTCGTCTTCTTCTTCTTCGCCTCCATGAA TCTCCTCAAGACGATTCATTACCAGTCTACCATTACTCGATTTTACCGTTTTGCCCCTACACGCTCCTTT GCTTCTTCTGTGTCACTCTCTCCACAGAGACACATAATCTCTCTCGTTTCTATCTCTAATCGTGGAAGGT GCTTCGCATTCTCGAGCGTCTCTTGGTGCTTCGCTTTATAATAATCAT >gi|3868955|dbj|AB015106.1|AB015106 AB015106 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-76, mRNA sequence GGTGTATATAATTGTTCATTTCCTTGAAAACGGTTACAGAATTAGGGTTTTGTTTCTTCTCTCTCGCCGA TTGATCTTGAAATGTCTTCCCCAATTATAATTAGGGCACCGAAGAAGCAACCGCCGGAGCCGCCATGTCT GATTTCGTTACTCCCCGAAGAAATCGTCGTCGATATCGTAGCCCGTGTCCCTAGATGCTATTACCCTACT CTCTCCCAAGTTTCAAGGCGTTTCCGATCACTCGTCGCTTCTCCGGAGATTTACAAGAGACGATCCTTCT TCGGGATGCACAGAAACAATGTCTCTACATCGCAATCTCCAAAGATCAAACCTCT >gi|3868954|dbj|AB015105.1|AB015105 AB015105 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-70, mRNA sequence GANTCACTTAACCAAACATGTCTGAAAAGGGGTTGATAAAAAAAGAAGACCACATGTTTCAAGAGGAGAA GAGAAAGACAAACTATGGAGCAATTGGCTTGGCTTGCTTCATTTCTTGTTTCTTTGCATTCCAATTCATG AAAATCGTAACAACACAACCTTCNACAACAACAACATCATCCATTGCCGTTATCGATAGCCCAATGTCCT CCCATAAGCTATCTGATAGGAGAGAAATATGGAGAGTTATCCCACCATCTACCTATTGTCTCAAAATCGA ATCTTTCATAAAATTCGCCACTTCTCCAAACGCC >gi|3868953|dbj|AB015104.1|AB015104 AB015104 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-65, mRNA sequence AACCATATAAAGCTTGTTCTTCTCCTTCCTTCTCCAATTTCGTAAGCTCAAAAATTTCGATTTCGATTTT GATTATTGCCAAAGGTTTAAAGATGGATATTTTCGACAACTCTGATCTTGAATACCTTGTTGATGAATTT CACGCT >gi|3868952|dbj|AB015103.1|AB015103 AB015103 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-62, mRNA sequence GAACAGAAAATGGAAATGATACTGATCTCGTCATCGACACTCAGGTTCCATCCATTGAGGACATCACAAA GAATCGCCACCGGAACCAATAGAAGACGAACCACCACCGTGTGTGCAGACTACTACAGAGGAGGAAGAAC GGTGGACGANAACATGGTGGTCCTTAGGAAACGAATCCATGAGATGAAGATGGTTGAACGCAACTTTGAA CCTCCTTCTCATTGGATGCAATGGGAGAAACGTTTCTACTGCAACTACGACGCTACTATATGTGATGCAC TCACTCTTCTCCAAACTTTTCTCATGAACTCTCGTCCCAGCGTCGCGTTTGGAACGTGTCTTCTTCTCCT CGTCAGCGTTCCCGTCTCCTCCGCCCGTTTTTGCTTTTCGCATCCTTGATCTACTCTTTGGCTTTTGGAC GCCCGTTC >gi|3868951|dbj|AB015102.1|AB015102 AB015102 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-59, mRNA sequence GACCTCCACTTTCCCTTTTGCCCCTCTTTTTTACAGATTTCACTCTCTGCTCTACTACTCTCTCCTCCTC CTCCTCCTAAAGAAAGTTCTTAACTCTCCTGGGTTCTTCAGGTTTTTCCTTTTCTGGAATAAAAAGAAGA AGAAATGGGTGTTCTTGATCATGTCTCTGAAATGTTTGACTGCTCTCATGGTCACAAGATTAAAAAGCGC AAACAGTTGCAGGTACTTTCCCTCTTCCTTTTCTTATCTTAGCAGATTCAGCTGATAACTTAGATCTTGG TTTGCAAAAAAACAAACATAATAATTCGTTGAAAAGTTATGATGAATGAGTCTAGTTAGAAACTAGCTTC GATGGTTACTA >gi|3868950|dbj|AB015101.1|AB015101 AB015101 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-56, mRNA sequence TGATCACATCCTCACACACAAAAATAAATCATCACAAGACCAGAGTTAAAAGAGAGACATGTCGACTTCA TTCACAATGATCGGCGGTGAAGGTCCCAACAGTTACCGGGAACATTCGAAATACCAGGGAGCACTGGTTA TAGCTGCAAAGGAAAAGATGAATGAAGCCATCTCCACGAAACTCGATATCGACTTTACTTCAAATCTTGT TAACATAGCTGATTTTGGTTGTTCCTCTGGACCGAACACTTTCACCGCGGTACAAACCTTAATTGATGCT GTGGAAAACAAGTATAAGAAAGAAACAGGGAGCACTGGTTATAGCTGCAAAGGAAAAGATGAATGAAGCC ATCTCCACGAAACTCGATATCGACTTTACTTCAAATCTTGTTAACATAGCTGATTTTGGTTGTTCCTCTG GACCGAACACTTTCACCGCGGTACAAACCTTAATTGATGCTGTGGAAAACAAGTATAAGAAAGAAA >gi|3868949|dbj|AB015100.1|AB015100 AB015100 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-55, mRNA sequence TTTTTTGATGATGACAAGGTCTTAGCTTTGGTGGACATAACTCCCCAGGGTCCTGTTCACATCCTCCTTA TTCAAAAAGTGAGGGATGGCCTAACTGGCCTCTCTAAGGCTGAGGAAAGGCACATCGACATCTTGGGCCA CCTACTCTACACTGCCTAACTTTTCTCAAAACAAAAAGGCCTAGCA >gi|3868948|dbj|AB015099.1|AB015099 AB015099 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-51, mRNA sequence GACCTCATCATTCTTCCTTCTGGTTAACTGAAAATGGAGTGTAGTTCAGTGAGTGTACTAGGAATATTAC TGGTATTTCCTCTCCTTCATAACCTTGTCACCATCTCCGGGCAGAATCTTCCGGCGGTGGGTTTGTTCAC TTTCGGAGATTCCAACTTCGACGCTGGAAATAAAAAGTTCCTCACAAGTGCTCCACTTCCTCAAAACTTT TGGCCTTACGGTAAATCTCGAGATGACCCTAAGGGCAAGTTTTCTGATGGCAAAATTGTCCCGGACTTTA TTGCTACTCGTTTTTATAGGTACTCTATACTAAATGGAAATTTTGATTGGTAATTAAAGATATATGAAAT TGATGAGGGGTGAATAAATCACAGCAAAATTCATGGGGATACCACACGATTTACCGCCGGCGCTAAAACC C >gi|3868947|dbj|AB015098.1|AB015098 AB015098 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-49, mRNA sequence GGTCTTCTTCTTCTACATAAAATTGATTCGCCTCGAAATTTACACAGACTTGTCGCTCTCTCTTTCTCTC TTATTTCACAGAGCCCCTAAACATTTCCAAAAATCTTGCAAAGGAAGAAAAACAATGGACAAATTTTGGA CTTTCCTCACTGCTCTTCATTCAGGCGCTGGGCCTATCGTGATGTTACTTTATCCATTGTACGCATCGGT GATAGCAATGGAGAGCACAACAAAAGTGGACGATGAACAGTGGCTTGCGTATTGGATAATATATTCCGTT CCTCTCACTCACGGAACTGATTCTGCAATCCGCTTATTGAGTGGATTCCGATTTTGGTATACGGTGAAAC TTGTTGTTCGTGGCTTGGCTAGTTCTTCCTCCAGTTTCAAGGGCGCAGCTTTTATCTACAACCGTGTTGT TTAGAGAACAAGTTCAAGAAAACACGGGGGTCCTCCGGCTCCACCCACTCCAAAGCCCACCAAGCCCCAA CATCCTCCACTCCATTTTT >gi|3868946|dbj|AB015097.1|AB015097 AB015097 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-33, mRNA sequence GGCTACCAAACTTCGCTAAACTTTAGTGCTTTACTCCAAAACCCAGAGTCCATCACACAAGTCCAAGCCC GAAAACAAGGGTTCTTGCTCCGACACGACAACAAATCCAGATTTTGAGCTTAGGGAAACTTGAGAAGGAG AAAAAAATGTCGAACATAGACATAGAAGGGATCTTGAAGGAGCTACCTAATGATGGGAGGATCCCAAAGA CGAAGATAGTTTGCACATTAGGACCAGCTTCTCGCACTGTTTCCATGATCGAAAAGCTTTTGAAAGCCGG TATGAATGTGGCTCGCTTCAACTTCTCACATGGAAGCCATGAATACCATCAAGAGACACTCGACAACCTC CGCTCTGCTATGCAA >gi|3868945|dbj|AB015096.1|AB015096 AB015096 RIKEN-PMB-FL1 Arabidopsis thaliana cDNA clone FL-32, mRNA sequence GGTTTTTTCGTTTTTGTTAACTTCGCCGTGTAGTTGTGGTGGTGAGATTGTGAGAGATATGGAGGCGGAG AAAATGGAATTGAAGCTCTACAACACGATGACGCAACAGAAAGAAGTTTTGATTCCAATCACTCCTGGCA AAATCGGATTATACGTCTGTGGTATCACCGCTTACGATTTCAGCCATATCGGCCATGCTCGCGCCGCCGT TTCCTTCGATGTTCTTTACAGATACTTGAAGCATTTGGATTATGATGTTACTTTTGTCCGCAATTTCACT GATGTTGATGACAAGATTATTGATCGTGCTAATAAGAATGGAGAAGACCCGTTAGATTTGAGTAATCGGT TTTGCGATGAATATTTGGTAGATATGGGTGCTCTGCAGTGCCTCCCTCCCACCCAACAGCCTCGTGTC >gi|3805663|gb|AI223460.1|AI223460 sp22.1 Arabidopsis thaliana cell suspension Arabidopsis thaliana cDNA similar to ATPase, mRNA sequence CTTCCATTACTTTCTTTGCTTAAAGTTAATAACATTGGTATTTTGTTTAATCTCATCAGCAAGACTTTTT AGATCTTAGGACAGCAAAAGAATTTAACTTATTGTTATGCACTGGAAACGAAAGTTGAAAAAAAAAAATC TTATTTCCAAATGAGATCACCCATGAACTTAAGTGCGGGAACCCCTCTTATCTCTGCGTCTAGCAATGGC GATTGGATCAATTTTAACCCCGAAAGTTCTGTATCATTCTGAATAAGTCCAAGCACACGCGTTTGTTCCT TTCGTCTTATTGAGCAAAATTTGCAATCGGATTCAGATTGAGGTAGAAGCTGATTAACAATAAGCCGGTG GACTGGCACA >gi|511963|emb|Z33723|Z33723 ATTS2814 Strasbourg-A Arabidopsis thaliana cDNA clone FAFK75 5', mRNA sequence TCGAAAATGGCGCAGCGATCTAGGGTTATCACCATGTCTCCTCTCATTCTCGATCAAGAAGTTGATCTCG ATCTCTGGGAAGTTGTTAATCCTTCTGATGGAGAGTTCTCCGACGATTCTTTCTCCGTCGATAGTCTTTC CGACGATGACGTCATATCTCTTGACGACGCTTCCTTTGTCGCACCCTCTGTCATTTCTCCGCCGCATGAG ATAATTCCTATTGCTGACGGTGGTGATCTCGCCGNGGATCTGGATGGTGATGATGATGTTGGNGATGATG TCGNTCGCGATGAAGTTGATGAGAATGA >gi|511962|emb|Z31677|Z31677 ATTS2690 Strasbourg-A Arabidopsis thaliana cDNA clone FAFJ30, mRNA sequence ATTTCTGATCATTTACACCCCTAAAAAGAGTAGAGCTTTCGTGAAGCCACCATGTGTGGAGGAGCTATAA TCTCCGATTTCATACCTCCGGCGAGGTCCCTCCGCGTCACTAACGAGTTTATCTGGCCGGATCTGAAAAA CAAAGTGAAAGCTTCAAAGAAGAGATCGAATAAGCGATCCGATTTCTTCGATCTTGACGATGATTTCGAA GCTGATTTCCAAGGGTTTAAGGATGACTCGGCTTTTGACTGCGAAGACGATGATGATGTCTTCGTCAATG TTAAGCCCTTTTCGGTCTTCACCGCAAACTACTAAGCCCGTAGGCTTCCCGCTTTCGTCTTCCACTGGTT CAGCATATGCCAAGAAAACTGGTAGAGTCCGCTGAGCAAGCTGAGAAATCTTCTTAAGAGGGAGGAGGGA GGAATCAATTCCGCGGGATTTAGGCAGCGTCCCTTGGGGGAAAATT >gi|511961|emb|Z31676|Z31676 ATTS2689 Strasbourg-A Arabidopsis thaliana cDNA clone FAFJ28, mRNA sequence GGTGGTTGTGTGGTGGTAGTAACACTAAAGATAGAGCAGAAGAAAGAGTCAATTCCTAAAGGATCTTCTT CACTTAGTCCTTCACTGAAGAAGACTACTACTAGTAAGACTGGTTCTTCCTCTTCATCAGTGAAGAAGAC CACGAGAGGATGGATTGGTAGAGGAGGATCAGGATCAGGAGGGGAAGAGGATAAGATTGGGAATGTGGCG TTTCCTGAACCTGATGATCCAGAGTGGT >gi|511960|emb|Z31674|Z31674 ATTS2687 Strasbourg-A Arabidopsis thaliana cDNA clone FAFJ25 3', mRNA sequence AGATAAATAATCTTCACCTCTACCATCGAAGACAAGTGGGATAAAACTCTCGCCTAAAAACAAGCAATGC CATAAGGCCCATAACCCTTATTTGGATTAATCTGTGAGGTGAAACAATAGCAGCAACTACATATGTATCA TTTAGCTCTGTGAGAGCTCGCGGCTTCGTTTAGCTGCAGCAACAACTGCATTCATAAGTGTTGCCCGGAA AGAGCCTTTCTCTAGTTCATGAACTCCGGCTATTGTAGTGCCGCCAGGTGAGGTAACATCATCTTTCAAC ACACCTGGGATGCTTCCCAGTTTGGCTAACCATCGTTGCAGCTCCAAGGAACGGTCTGTGAAGCTAAACT CAATGCAAGCTCTCGGGGGTAAACCAGCAGGTACTCCTCCATCGGCTTAAAGCTTCCAATTGGCTAAAAA TTTGT >gi|511959|emb|Z31673|Z31673 ATTS2686 Strasbourg-A Arabidopsis thaliana cDNA clone FAFJ22, mRNA sequence CGGACGAGGAGCATACTTTCCTTCTTATTTAGGTATGATGCTTGTTATAACGTGGGCGATCTGCACCTTC ATCGAGCTTCTGTCAATGTGGAATTTGACGAGACGAGAAGTTCAGCTATGCAATATGTTATCCCCTGAGG CTCCCCGTCTCTCTCTTGCAACTTACAACTGGGGACTTGTTTTTGTAGCAATGCTTGTAGACAACTTCCT ATATCCGATATCAGCTTTCCGGTCTCATTTTTCTCAATCCATAAACTGGTCTGGAATCAGATACCACTTG AAAGATGGAAAGATATTCACGATGGAGAGACGAAAGGATATGGGACCAACAAAGACTGATTTAGGAGGCA AACATTTGTTTGGTAAGAAAGGAGCTCCCTCAGAAAGCTTCATTCCT >gi|511958|emb|Z31672|Z31672 ATTS2685 Strasbourg-A Arabidopsis thaliana cDNA clone FAFJ20, mRNA sequence TCAACCGTCTTGTCAGGCTTCACAACAGCTGGGCTTATCCTACTCGCTAAGCAGCTTTCATCAGAAAAAG AGTGAATTCATAATCCTTCAGGGGTGGTCTCTATTACTCTCATGTACAGTGCCAAATATTCAAATTTACA ATAGCAAATTTTTCTACTTCCTCTGTCTATGCGTTAAACTATGGAATGTGTTGAGTGTATATTCTTATAG AGAAAACGAAATATCTTTGTTATGAATAATTGAAGTTTGCCA >gi|511957|emb|Z31671|Z31671 ATTS2684 Strasbourg-A Arabidopsis thaliana cDNA clone FAFJ19, mRNA sequence CCGGTCCTCAATATAAGAAAACTTGACAAAGAAGAAACACAATGTCTATTGCTCATAAAATTTGGAGAGA CTCGAATACAAAGACGGGTAAAAAGTCTGGGAAAAATAAAATCTGAAAATTGTWTCACTGGTCACCAGGA ATTGACTTGATAATGTCAGAATCACCAGGATCAACAATGCTCAGACAAGAAACACGGAAGTACTTTCCGC AAGCTGTTCCCAAATCAACGTTATTTCCATTGTAATGGTGGACACCAACTTTAGCGAGCATTGCGTAGTA CTCAATCTCTGATCTTCTCAACGGTGGGCAATTGGTGGAGATTAGAATCAGTTTCCCTTTGGAGCCACGG AGGGATTTGAGAACAGACTTGTAACCAAGAGTGT >gi|511956|emb|Z31670|Z31670 ATTS2683 Strasbourg-A Arabidopsis thaliana cDNA clone FAFJ09, mRNA sequence CGCTTAGCTACTGGCTTCACTTATCTCGGCCCCAAATTTATGAAAGAAAATGGCATAAAGCATGTGGTGT TTTCAACTGCAGACGGAGCACTGGAGGNAGCTCCAGCGATGGGGATAGCTGANGCCATCTTGGATCTCGT GAGTAGTGGTATAACACTCAAAGAGAACAACTCGAAAGAAATTGAAGGAGGTGTTGNGCTGGCAAAGCCA GGCGGCA >gi|511955|emb|Z31669|Z31669 ATTS2682 Strasbourg-A Arabidopsis thaliana cDNA clone FAFJ08 5', mRNA sequence GTAGTTTTGTTCACTTTCGGAGACTCTTACTACGACGCCGGAAACAAAGTGTCTCTCAGCCAAAGGAAAG ATCTCCTACAAACCTATTGGCCCTACGGAAAATCCCGCGACTACCCCAACGGTAAGTTTTCCGAGGGACA CATCGTCCCCGACTTCATCGTTGATTTCATCTCTATCCCGAATGGAGTACTCCCACCGGTGTTTATACCG GGTGTTGATATTTCACGTGGAGTCAGCTCTGACGCCGTCGATGCTTCT >gi|511954|emb|Z31668|Z31668 ATTS2681 Strasbourg-A Arabidopsis thaliana cDNA clone FAFJ03, mRNA sequence TGTTCGCGAACTCGTCAAATTACTTGGTTGAATCTGAAGGTGGTGGGGTACCTCTCCCATCAGGAGGCAT TCTTACTCCTAAGGGTCTTCAAACTCTTGGTCTTTCTGGTTTAGGATCAAGTACTGGTTTTGAGCGYCTG CATTATATGTTGGAGAGAGTATGGGATCCTATTTTAGTTACTGGMGCTCCAAAGTGTATTAGYCAGTCCT TCTTAAACGCTTTTGAGAGTTGGCATTCTTTTGATACAAMTCCACTATATGCTCTTCTCCACGAGGCCAT ATACTGTGGAGGGTGCTTCATCAGGATGGTCTGCTCATMGATTACGGGATAAATATGAGTACAAATTCGA CGCAA >gi|17654|emb|Z18525|Z18525 ATTS0901 AC16H Arabidopsis thaliana cDNA clone TAY097 5', mRNA sequence CAATCTTCAAAATCTCTTCCTTCCATGATTCCGTTATCGTAAAGATTTGTCCTTTATCCAAATTTTAGGA TTTTGAATTCTTCTTCTTTCCGATTACCGGATTCCAATGGCGCCTTTTGTTGAAGTCTGTAGGTATAAGC CATTACCGCTTTCATTGAGCTCTCTCTGTACATGCCCTTGCCGTTCCTCTCCAAGGAAATATCTAATNCT TCCTCAATTCTCTGAAAAGTACCCGAAACCATTGTTGTCTCATTCTCGCTTTACTCCGATTTCTGTTAAC CGGAGAGTTATCACGGCCGTT >gi|17643|emb|Z18516|Z18516 ATTS0892 AC16H Arabidopsis thaliana cDNA clone TAY089 5', mRNA sequence AAAAAAATGGGATCTTCACCACCGAAGAAGACGACTCTGCAACGGTACTTGTCACAGCTTCAACAACATC CTTTAAGAACAAAGGCAATAACTGCTGGAGTTTTGTCTGGTGTTAGCGATGTTGTATCACAGAAGCTCTC TGGCATACAGAAGATTCANCTGAGAAGGGTTCTNCTCAAAGTGATATTGCTGGTGGGTTTCTTGGACCAG CAGGGCATTTCTT >gi|17629|emb|Z18506|Z18506 ATTS0882 AC16H Arabidopsis thaliana cDNA clone TAY148 5', mRNA sequence TAATCACGAAAGAGGGGCTCGTCCAAATCCTGTGAAGGAAAAAGAAAGAGCTTCAGAAAGGGAATGGTCT GGTTCATCTGATAGAAGGAATCGTGAGGATAAAGATGCTGGTTATGAAAGGGACATACCGAGGGAGAAAG ATGTTGGTCACGGTTATGATATGCCAGAGAGAAGGCATCGTGATGATAGAGACACCGGTCGTGAGCGTGA GAGGGAACATCATCATAAGGATCGTGAACGTTCAGAGAACATGTTCGTGA >gi|17604|emb|Z18486|Z18486 ATTS0862 AC16H Arabidopsis thaliana cDNA clone TAY143 5' similar to DNA-DIRECTED RNA POLYMERASES I AND III 40 KD POLYPEPTIDE, mRNA, mRNA sequence AAACTTACACTTCATTCAGTTGCAGCCAAGATTCATTACCTGAATTTGCTAATAATCCTATCACTCCATG CGACCTCGATATCTTGATAGCAAAACTCGCCCCTGGTCAGGAAATCGAGCTCGAAGCTCATGCGGTTAAG GGCATTGGTAAAACACATGCAAAGTGGTCTCCAGTAGGGACTGCTTGGTATAGAATGCATCCTGAGGTGG TTCTACGTGGGGAAGTTGAGGATGAACTTGCTGAACGACTTGTAACGATGCCCACAGAATGTTT >gi|17589|emb|Z18476|Z18476 ATTS0852 AC16H Arabidopsis thaliana cDNA clone TAY055 5', mRNA sequence CTCTGAGCCACAAGAAGTGTTTTTNGTNGAAGGATCTACTGAACTGGTTTGTAATATGGGGGAAGATACA AAGGCAACCATTGAGCCAACCGCAAACAAGACTACTTCTCTTGAAAAGCCATCAGAGGCTATGGCTGGAA AGGAGAATGCTGGGGGTAAGGAAACACAAGANCTGGCGAAAGATGAGGATATGGCTGAGCCAGACAATAT GGAGATAGATGCTCAGATTAAGAAAGATGATGAAAAAGCTGAGACGAAGATAAGAGTCA >gi|17563|emb|Z18457|Z18457 ATTS0832 Grenoble-B Arabidopsis thaliana cDNA clone GBGy8 5', mRNA sequence AAATAATTGAGTTTTTTTTTTAATTAGAACAATGGGGTTGAGTGGTGTTCTTCATGTGGAGGTTGAGGTT AAGTCTCCGGCTGAAAAGTTCTGGGTAGCCTCGCGACGGCATCAATCTCTTCCCCAAAGCTTTCCCTAAC GACATCAAAACCATCCAAGTTCTAGCCGGCGACGAACGCTCCTGGCTCCATTCGCCTCATTACTTAGGAG AAGGTCTCCAC >gi|17552|emb|Z18447|Z18447 ATTS0822 Grenoble-B Arabidopsis thaliana cDNA clone GBGy16 5', mRNA sequence GAGAATGCTTGCCTAGAAAGCTATCAAGCGCAACGAGCCTTGGAAGCATGGAGGAGAGCTATTTTCTGCA AGCTTCTCTTGATTCTTCAGATAAATTTTCTGAGAGCACGTGCCTGAGGCAACTATGAGTCCGTACTACA TGAAGAGCATCACACCGAGTGCTTATGAAGCCACACTTCGACAGAAAGAGGGTGAACTTGCGGCATACAT GACCCGCTTGGCATCAATGGAGTCTATCCGAGATTCCCTGGCTGAAGAACTAGTCAAATGACAGCAGAGT GTGAGAGCTACGGGGAGGCAGATAGGTCCGGCATAAGCAGAGCTGGAA >gi|17541|emb|Z18437|Z18437 ATTS0812 Grenoble-B Arabidopsis thaliana cDNA clone GBGa496 5', mRNA sequence GAAAGCTGTTCGATCAACAATACTAGAAAACCTCCCAAATACTGCAAGGAAAGCTAACAACACAGGAAGC TTCTCTTTTGCACCTATCGTACACAACAACATCAACAACAGAACACCAATAGAGATCAACTCTCCTATGA GATTCCCTCTCTT >gi|17530|emb|Z18427|Z18427 ATTS0802 Grenoble-B Arabidopsis thaliana cDNA clone GBGa486 5', mRNA sequence GCGGTGATAGCAGAAGTGGATCGTGTTTTGAGACCGGAAGGGAAACTGATAGTTCGAGACGATGCGGAAA CAATACAGCAAGTGGAAGGCATGGTGAAAGCAATGAAATGGGAAGGTTCGAATGCTTATTCTAAGGAAAA AGAA >gi|17507|emb|Z18407|Z18407 ATTS0782 Grenoble-B Arabidopsis thaliana cDNA clone GBGa425 5', mRNA sequence AAGAGAATAAACAATGGTGGGTTCTCACAAAGCAAGCGGAGTGCTTCTTGTGCTACTAGTGGTTATGGCC ACCACAATAGCAAACGGGACACCGGTTGTCGATAAAGCAAAAAATGCAGCTACAGCAGTTGAAGATACAG CAAAAATGCAGCTACAGCAGTTGGCGGTGCAGCTGCATCAGTTGGTGCTAAAGTATCAGGTGCCAAACCA GGCGCGCATCGATGTTAAGCATCAGGAGCCAAAGGAGACGGCAAACTGATGAATG >gi|17496|emb|Z18397|Z18397 ATTS0772 Grenoble-B Arabidopsis thaliana cDNA clone GBGa383 5', mRNA sequence CTAGCCTCTCTATCTTTATCTCTCACAACAAAATCTTTGAAATGGCGATCTCTAAGGCTTCCATTGTTGT TCTCATGATGGTGATTATCTCCGTCGTTGCATCGGCACAATCTGAGGCACCAGCACCAAGTCCTACTTCT GGATCTAGTGCGATCTCAGCGTCTTTCGTGTCAGTGGAGTTGCAGCAGTCG >gi|17452|emb|Z18367|Z18367 ATTS0741 Grenoble-B Arabidopsis thaliana cDNA clone GBGa263 5', mRNA sequence CCTATGACGGTACCGCCGCCAAGTATGGAACCGTTGATAGCGCCTCTCTCATTATCTTATCCGACTATTT CATGGCCGTTAACATCGTCGTTAACAACACTGCGCCACGACCAGATGGTAAAACTAAGGGAGCACAAGCT TTATCCATGAGAATCTCCGGAAATTTGCTGCTTTCATCAAACTGCAAATTCTACGGTTTCAAGACACAAT CTGTGACGATACAGGAAACATTCTCAAGGATGTACGTCGAG >gi|17377|emb|Z18789|Z18789 ATTS0681 Ors-A Arabidopsis thaliana cDNA clone OAOM5 5', mRNA sequence GCACGAGGACCCTTCTCTTCAATTCCCTCTAAAACCCTAACCCCACACCAAAAGTCTTCCTTTGAATCAA CTCTCCACCATTCCCTAATCACCCACGACACTGATGAAGCATGGAAGGTCTTCCGATCCTTCGCTGAAGA TTCTTCTCTCCCGGACAAGCGTCTCCTCAATTCTCTCATCACCCACTTGTGCCTCCTTCCACAACACAGA TCAAAACACCTCCCTCAGGCACAGACTCAAGCGTGCTTTGTTCACGACGG >gi|3719207|dbj|C99850.1|C99850 C99850 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTGTCTTGAGCTTAANATCTACGGTCAGTGGATGTCCGGTGGTCAACGACGGCTCTCCCGGGTCGCCAAC CCGACCAACCATCTCTCGGTCGTTGGGAACTTTGTTGGGGCCTTGCTTGGTGCGTCCATGGGGCTTAGAG AAGGCCCTATATTCTTCTATGCTGTTGGGATGGCTCATTACTTGGTTCTNTTCGTGACTCTCTACCAAAG GCTACCGACCAACNANACTTTGCCTAAAGATCTTCATCCTGTCTTCTTCCTCTTCGTTGCGGCTCCAAGT GTTGCTTCCATGGCTTGGGCTAAGGTCACTGGCTCCTTCCATTATGGCTCCAAAGTTTGTTACTTTATCG CCATTTTCCTCTATTTCTCATTGGCTGTTCGGATCAATTTC >gi|3719206|dbj|C99849.1|C99849 C99849 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GGAACAGGAAACATAGGGAAGAGTGATGCCAATCTAATCGTGGCACTGATCTACATCTATGTAGCGGGTT TCGCGTGGTCATGGGGACCGTTGGGATGGTTGGTTCCTANTGAGATATCTCCACTAGAGATCCGATCAGC AGCTCAAGCCATAAACGTTTCGGTCAACATGTTCTTCACATTCCTTGTGGCTCAGCTCTTCCTCACTATG CTTTGTCACATGAAATTCGGACTATTCTTCTTCTTCGCCTTCTTTGTTGTCATAATGACAATATTCATCT ACTTGATGTTGCCTGAGACAAAGAATGTGCCAATCGAAGAGATGAACAGAGTGTGGAAGGCACATTGGTT CTGGGGAAAGTTTATTCCTGATGAAAGCTGTCAATATGGGTGCTGCTGAAATGCAACAGAAGTCCGTATG ATGATGATCAAG >gi|3719205|dbj|C99848.1|C99848 C99848 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ATTTCTGTCTCTGTGGAGACAGCTGAAGAAGCAGCAGCACTATCAATGGCGTCTCTGAGATTGTTCTCAA CGAATCATCAATCTCTTCTCCTTCCATCATCTCTCTCACAAAAGCCTCTAATATCTTCACCAAGATTCGT CAATAACCCTAGCAGACGGAGTCCAATACGATCCGTTCTTCAATTTAATCNCNAACCGGAACTCGCCGGA GAAACGCCGCGTATCGTCGTTATCACCTCCGGAAAAGGCGGTGTTGGAAAGACGACAACCACCGCAAATG TCGGTCTCTCTCTCGCTCGTTACGGTTTCTCAGTTGTCGCCATTGACGCCGACCTTGGTCTCCGTAACCT CGATCTCCTCCTAGGGTTAGAGAATCGAGTCAATTACACTTGCGTCGAGGTTATAAACGGAGATTGTCGT CTCGATCAAGCTCTGGTACGTGATAAGCGTTGGTCGA >gi|3719204|dbj|C99847.1|C99847 C99847 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GGAAAATAGGGAAAGCCATGCGCATAGAGGTTGATCGAAGTGGAATGATTCCAAGGTTGAGGTTCCATGA TCGTGAATCGTATGCAAGCAATAAAACCAAGGAGTATGATGACATTGCCATCAAATTCTTATCCTATGTG CTCCTCCTCCTTGTCATTGGCTTGTCCATATATTCTCTCGCTTATGAACGCCACAAGAGCTGGTATTCTT GGATACTATCTTCACTAACAAGCTGTGTCTACATGTTCGGTTTCATCATGATGTGTCCTCAGCTATTCGT CAACTACAAGCTAAAATCAGTGGCACATTTACCATGGAGACAGATGACTTACAAGTTCCTCAACACCATT ATCGACGATCTCTTTGCCTTTGTCATCAAAATGCCGATTTTACATCGACTTTCTGTATTCAGAGATGATG TGATATTCTTGATATACTTATAC >gi|3719203|dbj|C99846.1|C99846 C99846 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TGATTTCTCTACCACTCACTACACCGATTTTACCCAGCCGGTGTCTCCTCCACAAAACCCGCCGGCAAAA CTCGACTCGCCGCCGCTTATTGATTCGATCATCATCGAGCTTACAAGACCAATTCACCGTGGAGACGACG AAGCGAGTGGTTCTTGTGAGACATGGACAGAGCACGTGGAACGAAGAAGGGAGGATTCAAGGAAGCTCCG ATTTCTCCGTTTTGACGAAGAAAGGCGAGTCTCAGGCTGAAATTTCTCGTCAGATGCTCATCGACGACTC CTTCGATGTCTGCTTCACCAGTCCATTGAAGAGATCAAAGAAAACAGCTGAAATCATATGGGGAAGTAGA GAAAGTGAGATGATTTTCGATTACGATCTCAGAGAAATCGATCTCTACTCTTTTCAANGTCTACTTAAGA A >gi|3719202|dbj|C99845.1|C99845 C99845 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ATCCCATTGTGCAAGATCAATGGAGTGAACCAGAGTCAGAACACAAAGAAGCCATCTCAAAAGTACCTTG AAATAGTCACAATCGATAACTTCGACTTCTGGTTCATGGGATTCGTGAGCTACCAGAAAGCTTTCAACTG TCTCGAGAAAGCGCTAAACAATGATGAGCAATAAACCGCAGTGGTTTTCTCTGACGGAGCTAATTAGTGC AGGTGGAACAAGAAATATTTCATTTCTACTTTCCCCTGTTTCAGTCAGAGAATGTTTGTACAAACTCACA AATTCTTTTTTTTTGCTTTACCCACTTTGGTTTCCATTGTAGACACGAGAAAGAGATGAATATATTTAGT TGATCTCATCTGTTAACCTT >gi|3719201|dbj|C99844.1|C99844 C99844 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CACTGTCACAGCGAGAGACTCATACAACTTCCTTGTCAACTGGTTCAAGAGATTTCCCCAGTACAAGTCA CACGACTTCTACATTGCCGGAGAAAGCTACGCCGGCCATTACGTCCCACAACTTTCGGAGCTCATCTACA AAGAAAACAAGATTGCGTCGAAGAAAGATTTCATTAATCTCAAGGGTTTAATGATAGGAAACGCGTTATT GGATGACGAAACGGATCAAAAGGGGATGATAGAATATGCATGGGATCACGCGGTGATATCAGATGCATTG TACGAGAAAGTTAATAAAAACTGCGATTTCAAACAAAAACTTGTGACCAAGGAATGCAACGACGCTTTAG ATGAGTATTTTGATGTATACAAGATCCTTGACATGTACAGTCTGTACGCTCCAAAGTGTGTCCCACCTCC ACGAACTCCTCTATTTCTCATTCCAGTCGCCGGAAACCGCC >gi|3719200|dbj|C99843.1|C99843 C99843 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CCTTTTTATATGTCTTTCAATTTATGCAGTTCCCAAACGTGATTGGGTTTGTTCTAGGTGCACTTCAAAT GATACTCTATGTGGTTTACAAATACTGCAAAACGCCGTCGGATTTGGTTGAGAAAGAACTTGAGGCTGCG AAATTGCCAGAAGTGAGCATCGATATGGTGAAGTTAGGTACACTCACATCTCCTGAACCAGTAGCGATCA CCGTCGTCCGATCGGTGAACACATGTAACTGTAACGATCGAAATGCTGAGATTGAAAATGGTCAGGGAGT TAGAAACAGTGCTGCAACTACTTGAGTTTGCCCAAGAAACCCTAATAAGAAACCTATTTGTTGACTATTT TGACTTTGTACCCTTCTTGATATACCTATCAATCACCATTGTCCACGTGTACTAGTTTCGTTGTAGTAAT TTTCAAAGTTTATCGAAGTATGCGTATTCNAAGGATTAATTAAATCGGGAATTACATT >gi|3719199|dbj|C99842.1|C99842 C99842 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AAAGTTTCTGTTTCCTTTACTCACACCATTAAAGCCATGGAGCCTTTCTTCTCTGTTTTATTGTCTGCTA TGTTTCTCGGGGAGAAACCTACTCCATGGGTACTCGGTGCCATTGTACCAATTGTTGGTGGAGTTGCACT TGCTTCAATTTCGGAGGTCTCATTCAACTGGGCTGGATTTTCGAGTGCAATGGCATCAAACTTGACTAAC CAATCCCGTAATGTGCCGAGTAAGAAAGTCATGGTTAAGAAAGATGATTCTCTTGACAACATCACTCTCT TCTCAATTATAACATTGATGTCTCTCGTTCTGATGGCTCCTGTGACTTTCTTTACGGAAGGCATCAAGTT CACTCCTTCATACATTCAATCAGCTGGTGTGAATGTTAAACAAATATATACAAAGTCTCTTATCGCTGCA CTCTGCTTCCACGCATACCAACANGTGTCGTACATGAATATTG >gi|3719198|dbj|C99841.1|C99841 C99841 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ANAAGCTTTGAAGAACCATGGCGATGTCTCATGTCCAGCCTGTGCTTTTCTTCCTCGCATCACTCTTCTT CTTACTGGCTTTGTGCAGCGCCAACGATTTTGAATATTGCACCAAAAATGGACATGATTATGGTGTCGTC TCTTGGATCGAGGTCTTTCGGGTTGGGCCTCAGGAAAACCCAACCCTCACTATAAATGTATTTGGTACTG CGACGAAAGAAATATCCGCGGGAACCCTTGTATATGTAGCCTATAGATCTGGGGATTTTACAGGCCTTTT AAAAACTTACGACCTATGTGATGTGAGTTTGGCATGTAACATTGATTCTGAGATTGAAGCTGGCGACGTG TTTGACTTCAGTCTTAAAGACTTCTTTATGTTGGTTTTGATGAGGGAATCAAGTATTCCGTATCTTTGCG TCNAAAAACCGCAGAGGAAGAGGACCCNTAATAAAAATGTGT >gi|3719197|dbj|C99840.1|C99840 C99840 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AAAGAATAGAGGAAGAGAAGAAAGAAGGATCAGTTAATCGAGATGCTGTTCTGGCTAGAGTTGAGACAGA GAAGAGGATGTCACTTATCAAAGCTTGGGAAGAGGCTGAGAAATGCAAAGTGGAGAACAAAGCTGAGAAG AAGCTTTCTTCAATTGGATCATGGGAGAACAACAAGAAAGCAGCTGTGGAAGCTGAGCTCAAGAAAATGG AGGAGCATTTGGAGAAGAAAAAAGCAGAGTATGTGGAGCAGATGAAGAACAAAATAGCTCAAATTCACNA GGAAGCAGAAGAGAAGAGAGCGATGATTGAAGCTAAGCGTGGAGAAGAAATTCTCAAAGCAGAGGAATTA GCAGCCAAGTAACGTGCCACTGGAACCGCTCCCAAAAAGCTTTTCGGATGCATGTGATCTCTAATCATCT CGATGGGGANACANATGAAATATGGTATTGATGT >gi|3719196|dbj|C99839.1|C99839 C99839 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GAGTAGCCAAATCGCTTTGTCACCGGCCATCGCCGCCGCCATTCGCCGTCCGTCCTCTCACGACTGTCTA TCCGCTTCCGCCACTACTGTTACCGCCACCCCCATGGCTCTCAAATCTTGCATCGTCGCGCCTCTCTCGC TATTCACCTCTCAATCTCAAATCAAACACTCAAGCTCAAGAAAAACTTCTCGAACCACGATTCGATGCGA TGTAGCGATAAAATCCGCAGATTCGATAAACGCAGACGCCAATCCTTCGTCCTCACCGTCATCAGAGGAA GAAATCGAAGCGGAAGCGAAGGCGAAGATAGGATCTAGGGTTAGAGTAACTGCACCGTTGAAGGTTTATC ATGTAAATCGAGTTCCAGAGGTTGATTTANAANGTATGGAAGGTNAACTCAAAGATTACGTTTGCTGTTT GGAA >gi|3719195|dbj|C99838.1|C99838 C99838 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GCAACGANAGCAANAAATGGGTAGTTTCAATCTCTGACTCTCCAAAACCACCGTCTGAGAGAATCACCTT CACGTTCCCGGTCATCAACTCATCTGCACATGTAGCTCTAGTTGTTTGCGGTTCTGGGAAAGCTGAAGCT GTGGAGGCAGCTTTAAAGAAGACTGGGAATGTACCACCTGCTGGTTCTGTTTCTGCTGAAGACAANTTGG TTTGGTTCCTGGACAAACCAGCATCTTCCAAGCTCTAAAAACAGGTGCTATGCTTCCCATTCCNGTGAAC TTACCAGTGTGACTAGTCCGGTTTTAGTTTTTGGATTTTGACTCNTTGGTTCTCTCCC >gi|3719194|dbj|C99837.1|C99837 C99837 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CAATATTCTTATATTTGGGCGTGATTTAAAGCAGGAGATGAGCGTGGGGCCGAGTGCATATCCTCTGCTC AAGGATTGGATCCGAAGTTCGGATGGAAAGCTGAGTTTCTTGGGGTACGCTAAGTTCTTGCATGGTGTGA CCGTACGAAGCTCAAGCTCGAGACCTAGGTGACACACCATGATGTAAAAAGTCTTCTAACATGTGAATTG AGTTTCAAGAAACATCCTAAACAATGTCGTCGTCAGAGACCTTGGATTCNAAGATTAAAAAAAAAAACTT GAAATGGAATTGAANTCNGGTAGGTNTTTCCTTTGTAAATNATNCTTTGANCATTTTGTTTTCGAAACAA >gi|3719193|dbj|C99836.1|C99836 C99836 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AGAAGACATCTAAAGCCATCAAAAATATATCCATAGAAGCTTCATCGAAATGGCGAATCAAGCAGCTGCT GCAGCATTCTTCCTTTTCGCTTTAGCCGTCTTCTCCAACTTGGAGCTCTCAGCTTCTTCACTTGTCAGTG GCAAGATCTCTTGCCTTGACTGCCACCGCGATTTCGACTTCTCAGGCATTAAGGTCCTCCTTAAATGCGA CGGAAAGAAGAAACAAATAACCGCGATGGCAGCTGCAGACGGATCTTTCCGGTCAGTGCTTCCAACGGCT GACAAAAAAGGCTCCATAAATTGTCTTGCAAAGCTCTTGGGAGGCCCTGAGCAACTCTATGCTCACAAAC ACAACTTGGTCTCTGAATTGGTCAAGTCTAAACACGATTCCNAAGTTTTAACTACCTCAAACCCACTTGC CTTCTCTCTCTCCTTGC >gi|3719192|dbj|C99835.1|C99835 C99835 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CGCGATAGCTGAGGCTACAGAGCATTTGAAGCAACACTGCTTGAACAACATCTGTCCACACGTGTATGCT CCTCAAATAGAGGAAACGGTCGATGTGACTTCTGATTTATGTGCTTACAAGGTCCAACTTTCTGAAAAGC TGATGAGCAATGTGATCTTCAAGAAGCTGGGAGATTCAGAAGTAGCTTGGGTGGATTCCGAAGTAGGGAA GACAGAGAGGGACATGAGGTCTCTACTACCGATGCCAGGTGCTGCTTCGCCACACAAACCTGTTCTAGTA GGTGATCTGAAAATCGCAGACTTCAAGCAGTTTCTGTCGAGCAAGGGTGTTCAGGTAGAATTTGCAGGTG GAGGAGCTTTACGTTGTGGTGAATATGTCACTCTACCAAANGTTGGACCGACGGGTCA >gi|3719191|dbj|C99834.1|C99834 C99834 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CGAGTCTTCGACGAGTCTCCGGCTGCNAGTTTCTCTTGCTCCGGCAAACAGACCTGTCATTGCTTCTCTC TCCGGCTAACTACACAGAAGCATGGTGTTTGGACAAGTAGTAATAGGTCCTCCAGGATCGGGAAAGACCA CTTATTGTAATGGAATGTCTCAGTTCCTCTCTCTAATGGGCAGGAAGGTTGCTATTGTTAATCTGGATCC TGCAAATGATGCATTACCTTATGAGTGTGGTGTGAATATAGAAGAATTGATCAAGTTAGAAGATGTTATG TCGGAACACTCGCTTGGTCCTAATGGAGGTCTTGTATATTGTATGGAGTACTTGGAGAAAAACATTGACT GGCTGGAATCTAAACTAAAGCCTCTTCTGAAGGATCATTACATTCTCTTTGAT >gi|3719190|dbj|C99833.1|C99833 C99833 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GAAGAACAGTGAACCGGTTATATGAGAATAAGGCACAGATGAATTCTATATCAATGCATCTTGGAGAGAG TGTTGCGATTGCTCGAACAGTTGGGCATTTGTCGAAGAGCGCAGAGGTTATGAAGCTTGTTAATAATCTC ATGAAGGCTCCACAGATGGCTGCAACAATGCAAGAATTTAGCAAAGAGATGACTAAGGCCGGAGTTATTG AAGAGTTTGTGAATGAGGCCATTGACAATGCTCTANATTCAGAGGATATGGAAGAAGAGATTGATGAAGA GGTTGATAAAGTATTGACAGCAATTGCTGGAGAAACCGCTGCAGAGCTCCCAGTANCTGTTANGAAGGAG AGGATAAAGGTACCTGCACAGAAGGCGAACACTTCACGTGAGGAAGA >gi|3719189|dbj|C99832.1|C99832 C99832 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CGACATCGATCCAGGAGATGTTTAGGCGTGTGAGCGAACAGTTCACAGCGATGTTCAGAAGAAAAGCTTT CTTGCATTGGTACACAGGTGAAGGAATGGACGAGATGGAGTTCACAGAGGCAGAGAGCAACATGAATGAT TTGGTATCAGAGTATCAACAGTACCAAGACGCAACGGCTGATGAGGAAGAAGGGTATGAGTATGAAGAAG ACGAAGTGGAAGTGCAGGAGGAGCAATAACAACAGCTTCTCTGTTTTTCTTGATTCCTTTTTTTTNCTCG TTTGTGTGAGTTTAGTGTCTTGTTATTCATTTNCTCTTCTGGTTTTCTTGTGTTGACATTTGGCTATGTG TGATGGTGCGTTTATGTCTAAGGCTTAGGAAAATATATGTTTAT >gi|3719188|dbj|C99831.1|C99831 C99831 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CAGACGAAATGGCTCAGAAAGTGGTGCTGAAGGTTTTAACCATGACTGATGATAAGACCAAGCAGAAAGC CATAGAAGCTGCAGCTGATATCTTCGGTGATTATTTCTTCCTACTACTTCTTCTTTTCTTTAACTACTTT TTGATTGAATTTCAATTCTTGTTTCTGTTTATTATTGTACTTTTTAGATTTTTAGGATTTGAAAAAACAA AAAGAAAGGATTAATCAAGTTTGCTGCTGGTGTTTTCACTCACTAAATTACCATTTTTAGCTNAAGTTAT ACGAAACAATCGGTATGAAATCTAGCTCGATTGTAGTATAATTGCGTCAGAATCTTGAGAGCTTGGATTA TTTGACCTTTTTGACACATAGTCCACGAAATGATATTCTGAACATTTTGAAAGCCCGTATTTTATGGGCC GGA >gi|3719187|dbj|C99830.1|C99830 C99830 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CAATCTTCGAAAAGAGGCTGAAGAAGAGAGCCAGCGGATTTCAAAGTTGCAGTATGAATTGGAAGTTGAA CGAAAAGCCTTGTCCATGGCCAGATCGTGGGCCGAGGAGGAAGCAAAGAAAGCTAGAGAACAAGGGAGGG CCTTAGAAGAAGCTAGAAAGCGATGGGAAACAAATGGACTGAGAGTTGTTATTGACAAAGACCTTCAAGA GACGAGCAGCAGAGAGACAGAACAAAGCATAGTACTAAACGAGATGGAGAGATCCTCAGTTGAAGAAACT GAGAGGAGAGCCAAAACCCTGATGGATAAGCTGAAGGAGATGGCTGGAACCGTGAGTGGAAAGTCCCGGG AAGTGATCTTCCCTGTGATGGA >gi|3719186|dbj|C99829.1|C99829 C99829 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CAAAGGAGTGACATACAAAAATAAAGCAGGCGAAGAAACAACAGCCTTGGCACCTCTCACTGTAGTATGC GACGGTTGCTACTCAAACCTTCGTCGGTCTCTAAACGATAACAATGCTGAGGTTCTGTCTTACCAAGTTG CTTACATCTCGAANAATTGTCGGCTTGATGATCCCAAAAACCTTCATTTGATAATGTCCAAACCCTCCTA CATCATGTTGTACCAATTAAGCAGCACTGATGTTCGTTGTGGTTTTGAACTTTTCTCCGCCAATTTTCCT TCCATTGCAAAAGGTGAAATGGCTACTTTTGCGAAGAACACTCTAGCTCCTCAGGTACCTCCAAAACTTC GCAAAATATTCTTGAAAGGTCTAGATNAAGGAGCACACATNAAAGCGGTGCCAGCAAAGCGCATGACAGC TTCTTTAACCAAGA >gi|3719185|dbj|C99828.1|C99828 C99828 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CGGATGGGGTCACCTCCACGAAACCACGATGAAAACTATGACTTGGTAAGCCACAGATCAAATAGAGACC CAAGCCCCACTGAAAGTCAGAAAGGAGGAAGATTCCAGTCACTCGTCATAAATAGGGAGAGGAGAGGAAG ATTTTCAAACTTCGAGGGTCCTGTTTCAAATTTTTCAAGTGGAAATATGCCTGCTCCAAACATCCGCCCT TCAAATATGTTCAAGCAGAGAGGGAACCATATGCCAGTTGAACAAGGGATCGATTCTCCTTCTGAAGAAA ATATTGTTGAAGACATAATGGGAAAGCACAATCAATTTGTCAGCTCTATGCAGTCTCGTTTGGCTAAGTT ACAGGTAGTTCGTANATATTGGGAAAGGAATGATGTTAAAAATTCGATAGGCTCGATAGA >gi|3719184|dbj|C99827.1|C99827 C99827 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTCGCATTTTCTTCATCCTTTTTGCCTCAGAGCTCCGTGGAGAGCAGCAATCAGTAGCCATGGCTGAGCA GACTGAGAAAGCTTTTCTTAAGCAACCCAAGGTCTTCCTTAGCTCGAAGATATCTGGGAAAGGAAAGAGA CCTGGTAAAGGTGGAAACCGTTTCTGGAAGAACATTGGTTTGGGTTTCAAGACTCCTCGTGAAGCCATTG ATGGAGCTTACATTGACAGTAAATGTCCATTCACTGGAACCGTTTCTATCAGAGGACGTATCTTAGCTGG TACTTGCCACAGTGCCAAGATGCAGAGAACCATCATTGTTCGTAGGAATTACCTTCACTTTGTGAAGAAG TATCAACGATATGAGAAGANACATTCCAACATCCCTGCCCATGTCTCACCGTGTTTCCGTGTCAAGGAAN GTGACCATGTCNTCATTGG >gi|3719183|dbj|C99826.1|C99826 C99826 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AGCCATTGGGGGCAAAAGGAGCAGCAGCAGATGTTGAGCAAGGGACAGTTCAGGTGAGCGATAAGGTGAA GAAAATGGCTGAGGAGTGTAGAGATGGAGTTGGGAAGATCTCTCAGAGGTTCAAGACCTAAAGTAACAGT CTTTTAACTTTTTTGTATCTTGTTTCTACATGATAAAAATAAAAGAGAATAATGGGATGGCCATTACATT TACAGTATTGGTCAGTGATGTTCAGAATTCATAATTGTATCATTTTGTAATCTTTGTTATGTGGTTTACT AATACTTACACTTT >gi|3719182|dbj|C99825.1|C99825 C99825 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AGATTAACGGCGGTTTTATCCCGCCGGCGATAATAAACTCAATCGAAGCACCGGAAACATCCGCCGCAGC CGGAGTTTCAGTCGGATCGAAACGATTGAGAAGACCTAGCGTTAGGTTAGGAGACATCGGCGGTGACCAG TACCACCAACACGTGGTTGCGGCGTACGATTCTCCGCAAGTCCGACGGCCGAAATGGAGACCTANTGGTG GTGGTGGTGGTGGTGGTGGTAACAGGAAGGAGCCGAATAATCANAGTGGGAAGACGACGTCTTCTTCGAG GACTCGAACTATGACGAATTTGAGCTCCGGTGGGTATGAGAATACTGGAACCCTAGATGAAGACCGGTTT CNATTGGGAGTTGGCGGG >gi|3719181|dbj|C99824.1|C99824 C99824 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TGATACAATTCCTCCTCGAGCACAGGTACAATCTCCGCTTGAAGTGATGAACATCCGCCCTAGTAGGGAT GTTGCAGTTTTGGATTTCTCCTACAAGTTTGGTACAAACGTGGTCAGTGCCAAATTACGCATCCCGGCAA CCTTGAATAAGTTTCTTCAACCTCTACAATTGACATCTGAAGAGTTCTTCNCTCAATGGAGAGCAATCTC AGGGCCACCCTTGAAACTTCAGGAAGTGGTAAGAGGTGTAAGACCTCTAGCTCTTCCGGAAATGGCAAAT CTGTTCAACAGTTTTCATGTGACGATATGCCCTGGGCTTGATCCAAACCCTAATAATCTAGTGGCAAGCA CAACCTTCTACTCTGAAACTACAGGANCCATGCTCTGTTTGGCAAGAATTGAAACAGACCAGCGGACAGA ACCCACTAC >gi|3719180|dbj|C99823.1|C99823 C99823 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TCCTTCACCTGTTCTTCTCCATCTTCGATTTTACCTATTATTGATACGAGAAGTGGGAATTTGCGATGCA CATTTCAGTCTCAGGTTTCTTGTGGGATTCAGAGAGATGATAATGGACGCCGTGTTTGGCGGAGGAGAAC ATTGACGAAGAAGGACGATATGTTGCGTTACAAAATGCAAAGAGTTCCNTTTGTGGAAGAGCAAGTGAGG AAGATAAGAGAAGTTGGGAAAGTAATGACAATGGACATAGAGCAGCTTCTTTTGAGGGAAGACAATCGGT TTGAATTTGTCAATAGCGTAGCAGCTGAAGCAACAGAGTACGTGGACAAGAACAGAGACGAATATGGAGG TTCCAAAAAAGCTATCTTTCATGTTCTAAGCAACCGTGTGAACGATCTCGGCTTTGACCGCCCTGAGGCT TATGT >gi|3719179|dbj|C99822.1|C99822 C99822 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AGATTCATCGTTAAGGGAACGGTTGAAGAGAGAATGGAGGCGGTTCAGGCGAGGAAGCAGAGAATGATCT CTGGGGCTTTAACCGATCAAGAAGTACGAAGTGCACGTATAGAGGAACTCAAGATGTTATTTACCTGAAA CTATAGAAACTGTTCTCAAGCCTGAAGTCGATCATACAATTCTACATATNTGGGAAACTTGTCACACTAT ATGCAAGGAGAATCAGAGATTATAACGCATCTAAAAACGGGTTTTGTTCTTTTCAAGAGATATGATGGAC AATTGTCACAGTTTTGGGGAATGTGCAGTGAGAGTTCCCAAGTGTACCATAAGCCTATCTGGGTTTTGTT GTTTTGTAATGGAAATCAGATTGTTTTTTGTACTTTTTCATTTATAATGAACTGTAACTTTATACTATTA TATAGTTACTCAATATGACAAATTTGCAC >gi|3719178|dbj|C99821.1|C99821 C99821 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TCTCCCCAGCAGAGAGAGGGGAAGTCTCTAAACCCTTGCTTGTCATCAAATCGATTCCTCGAGTGAGGAA ACATTTCTCTTTTCGTGGATCTTACGAGACCGAGAAGAGAGTAAGATATGTCCGGCGCATCGTCTGAGGA TAGCAGTATTTTCGCTCGCTGTGAAGACGTAGACTGTAACAAGAAAATACCTGTAGAGCTTGTAAGGATG CACATTTGTTATGCTATGTTCCATAGGACTCTGGCTCGAGGTTTTGGGACACAAACTCAGGCTAAGAAGA AACCTACAAACAAGAAGAAGTCAACAACATCTCTTACCGATTTTGCTGTCTTCATGAATCATTTCCGTAA ATCTTTTAGAACAGATTATAATGGTGCATTGGTGAAAGAAGGTTCAAAGATCGGTTGGGAAATGTGGAAT CTATGACTGAGGATGAG >gi|3719177|dbj|C99820.1|C99820 C99820 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTTTTTCCGGGCTGAGCTGCAGAAGATGGGATTTGAGGTACTTGGAGACAATGATTCCCCAGTCATGCCT ATAATGCTTTACAACCCAGCAAAAATCCCAGCTTTCTCAAGAGAATGTCTGCGACAAAAAGTGGCAGTGG TGGTCGTGGGTTTCCCAGCTACACCTCTACTGCTGGCTAGGGCACGTATTTGCATCTCCGCATCTCATTC AAGAGAAGATCTTATAAGAGCCCTCAAGGTTATAAGCAAAGTAGGTGACCTTAGCGGAATCAAATATTTC CCGGCAGAGCCGAAGAAAATAGAACAGTCGAAAAACGACATCAAGCTGGATTGAAGAATTAACCAATGAA ATAGAGATGCATCCCGGAAAACGCAAGCAAATGCTGTGTTATGTGTTAACTTCTCCATATCTCTCTGATG TGACACAAATCTGATTTCTCAGGGGTC >gi|3719176|dbj|C99819.1|C99819 C99819 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GAGTCTTAAAGATGATCAGTCGGCGAGTTTTGTGATAAGCAATTTGGGTTCATCCGCAAAAGCAGATATC AAGGTTAGTTTTAATGTGAACGATATTTGGGATCTACCTGTCACGTTCGAGAGAAGCAATGTTGGTAAAT TACTCACCGGGCTCTCAAGCATAAGGGACCTAACTATAAGTGGAACAACTTTGATGATCATTTGTCACTA CTTGAAGCACGAACCGATGCCTCAGTTTTGTAACATGGTGCGGTTAAATGCGAGATTCTATGATTGTGAT TTGGAAATGTTGCCATGCGTTCTTGAGAGCTGTCCAAATCTCAAATCCCTTGTCTTGGGTCTACTATCTT CCGCTGAGACGGAACAACAATCAAGAATCTCGTCTGTGCCTCCGTGTTTCCTATCATCGCTAGAATTTGT AGANAATAAGAACCAGACTCTGTAGAAAGCGTTATGTGATGA >gi|3719175|dbj|C99818.1|C99818 C99818 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GATTGCGTTACGGGGAACTGTCCCAAGTGATGTGAGTGATTGGATACATAACAGCCGTATTGTACTCGAG AAACTCCATGGCGGGGGTAAGCATATGCATGTCATTAGAAAAATCTATTCTTTGGTGGCCAAACACGGAA ACACAGCTGTCTGGATCGCTGGACACTCTTTAGGAGCTGGCCTGGCACTACTCGCGGGAAAGGACATGGC CATGTCTGGACTCCCTGTTGAGGCTTACATCTTCAACCCACCTATCTCCTTGATTCCTCTAGAGCAGTGC GGTTACAATCACGAACTTAATTTTGTGTNTCGACTCACCANGGATCTCTTCAAAGCTGGCATAGCCAAAA GTCGTANACCTTGATGAAGGTCAAGAAGGTCCACGATATAAGAACTTAGCTTCTTGGANACTCATTTGTT TGTGAACCAATCTGATGTTATATGCTCAAAATATATT >gi|3719174|dbj|C99817.1|C99817 C99817 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AGAGNTTAGCGGTTCTGTGAAATTGCCTCACGTTCCTAGGCCAAAGATGAAGNTTTGCATGCTTGGTGAT GCCCAGCACGTCGAAGNGGCTGAGAAGNTTGGATTGGAATCTATGGATGTTGAAGCTCTTAAGAAGTTGA ACAAGAACAAGAAACTTGTTAAGAAGCTTGCTAAGAAATTCCATGCTTTCCTTGCTTCTGAATCTGTCAT TAAGCAGATTCCTCGTCTTCTTGGTCCTGGTCTCAACAAGGCAGGAAAATTCCCAACTCTTGTTAGCCAC CAAGAGTCTTTGGAATCCAAAGTGAATGAGACAAAGGCAACAGTGAAGTTCCAGCTCAAGAAGGTTCTAT GTATGGGAATTGCTGTCGGTAATCTTTCCATGGGAGGAAAAACAGATCTTTCAAAATGTTCAGATGAATG TTTACTTCCTCGTTTCTCTCTTGAAGA >gi|3719173|dbj|C99816.1|C99816 C99816 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CGAGCAATTTCACTCTTCCGAGAACAACCCTAGATTCCGATGATGAGGGGTCTCGTTTCCGGCGCCAAGA TGCTATCATCAACCCCATCGTCGATGGCGACAAGCATCGCCACTGGTAGAAGAAGCTACAGTCTGATTCC GATGGTTATTGAGCACTCATCGCGAGGAGAGAGAGCTTACGACATCTTCTCTCGTTTGCTTAAGGAGCGT ATTATCTGCATCAACGGTCCCATTAATGACGACACATCTCACGTCGTCGTCGCTCAGCTTCTTTACCTCG AGTCTGAGAATCCTTCGAAGCCGATCCATATGTATCTCAATTCCCCTGGCGGCCATGTCACCGCCGGTCT TGCAATTTATGATACTATGCAGTACATTCGTTCTCCTATTAGCACAATTTGTTTGGGTCANGNTGCATCA ATGGCTTCTCTTCTGTTGGCAGCGGGTGCCAA >gi|3719172|dbj|C99815.1|C99815 C99815 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ACTGTCCTACGATGTGGTCACACTATGCATCTAGAATGCACGAAAGATATGGGGCTACATAACCGATACA CATGCCCTGTATGCTCCAAATCCATATGTGACATGTCTAATCTGTGGAAGAAACTTGATGAAGAGGTTGC TGCATACCCAATGCCAAAGATGTATGAAAACAAGATGGTATGGATTCTCTGCAATGACTGCGGCTCAAAC ACGAACGTTCGGTTTCATTTGATCGCGCATAAATGCAGTAGCTGTGGTTCCTACAATACAAGACAGACAC AGAGAGGCTCTGATAGTCACTCTTGCTCCTCTGGAATGCCTCAGGTTGTTGGTTCAACCGGTTAATTTTT AACCAGANCTGGTTTTGGTGTCTGAATTTCCCATGAAGANATTATTTGTACTTTCTATAAGTTTGGTATC AGTCAATGCCTTTGGTTGTTAACAATTATATCATCACAGAATCCAAAGCTGCNTTGACCC >gi|3719171|dbj|C99814.1|C99814 C99814 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GCTAGAGGCATTGTAACCGCAGTTTGTTATCAACCTGATGGGCAGGCAGTGATTATCGGAACTTTGACAA GCGATTGTCGCTTCTACAATGTATCAGGCCACTGCCTTCAACTTGATGGTCATATATGTCTGCACAACAA AAAGAAGTCGTCGAATAAACGAATAATCGGCTTTCAGTTTCTTCTGCAGTTTGATTCTACTGACCCAAGC AGAGTCATGGTGGCATCAGCAGATTCACAAGTGAGGATCATTAGTGGTCGCAACGTTGTCCACAAATACA AAGGATCTCGAAATGCTGGAAACCAGATATCGGCATCTTTTACAGCAGACGGGAAGCATATAGTCTCTGC GTGTTGACGNATTCATCGGTCTACGTCTGGAAACTGCGTTGGGACACGACCCTGAAACAGTTCGTCTCCT GGTTTTTTCTCTCACACCCAAACGACTTAAAATCCGATCATTCG >gi|3719170|dbj|C99813.1|C99813 C99813 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AGCAAAAATAACTCACTCCCTAGAAAAGTTTGAAAATGGCGAAGGCAGATAAGAAACCAGCGGAGAAGAA ACCGGCAGAGAAAACTCCGGCAGCCGAACCAGCAGCAGCGGCAGAGAAGAAACCAAAAGCCGGAAAGAAA CTCCCCAAGGAACCAGCCGTCGCCGGAGACAAGAAGAAGAAGAGATCAAAGAAGAACGTTGAGACATACA AGATCTACATCTTCAAGGTGTTGAAGCAAGTTCATCCAGACATCGGAATCTCAAGCAAAGCCATGGGAAT CATGAACAGTTTCATCAACGATATCTTTGAGAAGCTTGCTGGTGAGTCTTCGAAGCTTGCAAGGTACAAC AAGAAGCCGACGATTACTTCCAGGGAGATTCAGACTGCGGTTAGACTTGTTGTTGCCCGGTGAGTTGGCG AAACATGCTGTGTCTTGAAGGGACTAAGGCGGTTAC >gi|3719169|dbj|C99812.1|C99812 C99812 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GAAACCAAGAACGAGGGGGTTGTTGTAGAAGAAAGCCGGACACTTTGAGTCTCCCGGTAAACAGTCATGA TTTAGCCTTCACGAAGCTGAAGGAAATGAACAGCTGGGCGGATGATAACTTAATAAGGGATGTATTGTTA TCCACAGAGGATGATTTTGAAATGGCCTTAGCTTTTTTGAAAGGAATGGTTTCTTCTGGTAAGGAGGATG AGGAGCCAACTTCAAAGATTGAGGGGTATTCATCCGATAACAGAAGATCGGAATATAGAACATTTGAGAA AACAGTTACAAGTTCGGTGAAGATGGCTGCAAGTTCCACATTTGAGGATGCTGGCAAGTATGATCTGGAA AATAGTGATGGAAGCTCGTTTCTGGTCAATGCATCTTGACAATGAAAAGTTCCCTGATGATATTTCTGAA CTAGATAGTATCATTCAGCGGCTTCAGTCCATTCCGA >gi|3719168|dbj|C99811.1|C99811 C99811 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CACGGAGATAACTACAGTGACCTAAGCCGCAAAATCAAGCTAGCTATGCGACTAGTTGAGCTTTACCAGC CTTACTTACTCTTCAAGGGCATATTTGATGATTTAAATACCGAAAGACTGCGAATGAAAAGAAAGGAGAA TATCAAAGAGTTAGATGGATCGTTCGAGTTCGATCCCAAGTCCATTGATTGGGACAATTATATCACAAAC ACCCACATTCCTGGCCTCATCACCCATGTGCTTAAACAATAAATTATGCTGGTAATATGTTTGGAACTAT TGTGAATCTCGTGTGTAATATTATTAAAGAATACGATTATATCATTCTAATCTTGTAATTTACAGTTTGT GTTGGCGTGTAATATCAAAATAAATAAAAAAAAACTTATTCCACAATGGATAAGACTTTGAATCATGC >gi|3719167|dbj|C99810.1|C99810 C99810 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CACGAGGCAACGTGAGGATCGGGGTTGGAAACACGGTTGGTGAGCGTGTCTCCAATGTCTTTGTTGATGT CAAGAAGTTCCAAGAAAGATACGCTAAAGCTATGAGCAGAACCACAAAAGAGACCTCCCAGAGAGAAGTA CAAATAAGTGCAGTAGAGGCGATAAGGTCTATATCCAATTGGCTATACTGGAGATCATCACCGTACACAA AACCACTGAGTCCAGATTCAAACATGAGTCTAACTTTTATCAAAAGAAAGAAAGCGGTTGATCCAGATAT CAGAAAGCTTCAAGATGTTGTGGCAGCGATGAAACAAGCAGAACAAAGCGGAAAACCCNAAGAGAAAGGA TCAGCTTACTTGCTTGGGAGAAGATTATTGGAGTCCATCAAACGCAGCTCTTCCCTCATCTGGAAACAAC AACGGTTCC >gi|3719166|dbj|C99809.1|C99809 C99809 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTAAAAAAAAACCTAACAACCTCTCTTCTCTCTTCCTCGTTCAACGACAATGGAGTTCTGGGGAGTTGCG GTGACACCAAAAAACGCTACTAAGGTGACTCCTGAANAANACAGCCTTGTCCACATTTCTCAGGCTTCAC TTGACTGCACAGTGAAATCTGGANAATCTGTGGTTTTGAGTGTGACTGTTGGTGGGGCTAAACTTGTTAT TGGAACACTTTCACAANACAAGTTCCCTCANATTAGCTTTGATTTGGTTTTTGATAAAAAATTTGAGCTT TCACACAGCGGTACCAAAGCAAATGTTCATTTCATTGGGTACNAATCCCCCAACATCGANCAGGATGACT TCCCTANTTCGGATGAAGAGGATNTTCCTGAA >gi|3719165|dbj|C99808.1|C99808 C99808 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTGATGAATCACTTGGAGATTGGGCAAACTTGGAAACGATGCGGTATTGCCATCCGATGTATTTTGCCAG GAGGATGGCCGAGGTTGCTTCAACTGACCCTGTAAATTGGATGGATCAGCCGTCCGCTGGCCTTGCTATC CAAGGGCTCTTGAGTCGTGTCGTANTGGAANATCACTCGGATATCCAAAAACATATCTCTGGTTGTATAT CTACAGGCACTGACAAAAACAAGGATGGAGAAAACTCANAAAGANAAATTTGAAGGCNTTANTGANAATG AATCTGANATATTGCAGGTTGAAAATTCCAANAAATGCTATATCCGTACTACNAGCTGGANATAATA >gi|3719164|dbj|C99807.1|C99807 C99807 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTCCCGGTGCAGCACTTACTCCACCGCANAAGTTAGAGATTGCCAGGCAGCTANCTAAACTCCGAGTAGA CATCATGGAAGTTGGTTTTCTGGTGTCGTCTGAGGAAAAATTCNAANCTATTAAAACCATCGCCAAGACC GTGGGGAACGAGGTGGATGAGGAAACCGGTTNCGTTCCTGTGATATGCGGCATTGCACGATGCTTTTTTT ANANACATCNAGGCNNCTTGGGAGGCACTNAANTATGCNAANAGGCCNAAGGGTTATTGCT >gi|3719163|dbj|C99806.1|C99806 C99806 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GTGGAGCCAAACATGGTCTTTACTCCACTTGTTCCCTCACAGCCTCATTACAATGTGAATCTGCTGAGCA TCTCAGTAAATGGCCAAGCTTTACCTATCAATCCATCGGTCTTCTCTACATCAAACGGCCAGGGAACAAT CATTGACACTGGTACAACATTGGCATACCTTTCTGAAGCAGCCTATGTTCCTTTCGTTGAAGCTATTACA AATGCTGTTTCGCAGTCTGTCAGACCCGTTGTTTCGAAAGGGAACCAATGTTACGTAATAACCACAAGTG TCGGANACATATTTCCTCCAGTTAGCTTGAACTTTGCTGGTGGGAACATCTATGTTTCTTGAATCCNCCA GGGATTACCTCCATACAGCANAAACAATGTC >gi|3719162|dbj|C99805.1|C99805 C99805 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GCTAATANAAGCACGAACGGCGTCGGGTTAGTCCGACGGAGGAACATGTCCTCGTCTCTTCTTCTCTCCG GTTCTACTGTATCTTCTTCGTTTATCGCTCCATCTAAGCCTTCTCTCGTACGAAATTCCAGTAAGACATC ACTGTTACCATTTCGTAATGTTTCGAGAAGCTTCAAAACCGTTAAGTGCACCGTTGATTCTTCATNTGGA GGCAATGTTCCCACGTTCCCTCGGACNAAAGTTTGGGACCCGT >gi|3719161|dbj|C99804.1|C99804 C99804 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AATGGCCAAACACCGGAGCTCAACCTTGCCGGCCACTGCAACCCTGCGGCGAACACTTGCACCCATTTTG GCTCTCAGGTCAAAGATTGTCAGTCTCGTGGCATCAAGGTTATGTTGCCTCTCGGCGGCGGGATTGGAAA CTACTCGATTGGGTCGAGGGAGGACGCAAAAGTTATCGCTGATTATCTGTGGAACAACTTCTTGGGAGGA AAATCATCATCACGACCCTTAGGTGATGCTGTTCTANATGGTATCGATTTCAATATCGAGCTTGGCTCTC CTCAACACTGGGATGATCTCGCCAGGACTCTCTCAAAGTTTANCCNCNGAAGGAAGAAAAATNTNTCTNA >gi|3719160|dbj|C99803.1|C99803 C99803 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTTCGTTTCATTCATAATCGTCTTATAACCACAGATTCTAAAACATGGGAGAAGAAGTAAAACCAGAGGC AAAGGAGGCAGCCTCTGCTCCACAGGCCGTCCCCGCTGAGGAGGAGGAGAAGAAGAAAGATGTNGCGGAG GAGAAGAAAGTGGCGGCTGAGGAGGAGAAACCAAAGGAGGAAGAGGAGCCGCAACCACCACCACCGCCTC CACCCTTCATACTCTACGTCGACTTGCATTGTGTTGGATGCGCTAANAANATTGAAAGATCTATTCTAAA AATTAGAGGTGTGGAANAAGTGGTTGATGGATATNAATGANAACCNNNTTGACNAT >gi|3719159|dbj|C99802.1|C99802 C99802 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TCGATGGCGGTTCGTAAATTCTGATGAGTGCTTATTGACGAGAATGCAAGAAATGTCATTGGATTACCAT TTCACTGTTGAGCAAGAAGTGGGTTCATCAACACATGCTTTTTTCGGCTTCAACGGAACCGCCGGAATAT GGAGAATAGCGGCGATAAATGAAGCTGGTGGGTGGAAAGATCGGACCACCGTGGAAGATATGGATCTCGC CGTCCGAGCAAGTCTTCGCGGCTGGAAATTTCTCTACCTCGGTGACCTTCAGGTGAAAAGTGAGCTTCCA AGTACTTTTAGAGCCTTCCGTTTTCAGCAACATANATGGTCTTGTGGACCTGGC >gi|3719158|dbj|C99801.1|C99801 C99801 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TATCCACAAGTACGTCCATGAGTGGCCTTCAAACCCTCCTTCTTTCAAGGAAATAGTAAGTAAATACAGT AGAGAAGTAAGAGAAGTGGGATTTAAAATAGAGGAATTAATATCAGAGAGCTTAGGTTTAGAAAAAGATT ACATGAAGAAAGTGCTTGGTGAACAAGGTCAACACATGGCAGTAAACTATTATCCTCCATGTCCTGAACC TGAGCTCACTTACGGTTTACCTGCTCATACCGACCCAAACGCCCTAACCATTCTTCTTCAANACACTACT GTTTGCGGTCTCCAAATCTTGATCGACGGTCCAGTTGGTTCCGCCGTTAATCCGCATCCTGATGCTTTTG TC >gi|3719157|dbj|C99800.1|C99800 C99800 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GATGCCTCAAGAAGGCTGCGTCTTCAGGTTAACCTTAACAGCCACAAGTCAGAAACTGACAGTACACAAC TTCAATTTATCAAGAAAGAGGTTAAGGACACAACAACGGAAACTATGACGAAAGGATGTGGAAATTTCAC AAGATCAAAGAGCAGGACTAGTTTCATATTCAAGAAAATTGCAGCCATGGGATGTTCATACAGAGGGCTT TTCAGAGTCGGTGTGGTANCGGTTGTGTGTGTGATGTCGGTCTGCANTCTAATCNCATAAATCCGCTGAA TGTGATGTTTGTTCCGATCAATTCATATANTAAG >gi|3719156|dbj|C99799.1|C99799 C99799 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AGAGAAAGAAAGAAAACAGAGCAATTACTTGAAGAATCCATAGGAAGCTGAAGATGAGAAGAATTCCTCG TATCAAATTTCCTCAGAGACATTCTATCTCATCTGGTTCTGGACCGGCGCCGGGATCTGTTTCCGGCGTT AAGAAAAATGTGACGGCGAGTTCTGATGTTCCGGCAGCTCCGAAGAACACTGCTGATGGAGGGAAAGCAT CTCTCCAGCCGAAACGTNCACCTGTCTCCGACAAAGAAATCGAATCTATTATGTTGGGTGGTTGCATATG ACATTTGGGGAGTTACGAANATTTGATCGAACNCNTTGGTGTTCTTGTCTNGTTCGGCTGGTGANGTTTA T >gi|3719155|dbj|C99798.1|C99798 C99798 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTCTCTGAACCATAGAACTCCAAGCTTGTACTGTACTCTACTAATACGTCGTCGTTTATATCTTACTCTT TTGTTTCCTCTTACCAGAAAAAATAAATAAACAGCAATATTTTCAATTTTCGACTCAAATCATGCAAACC ATTTCGCCTGCGTTCTCGTGCGATCTCAAATCCGTAATTCAACCAAATCTAACGGCTAAAAACGCGCGTT ACTCGCACGTAAATGGAAAGCGCGTGTCTATTCGTTGCAGTTACAGGTCTGAGTCGTTTAGCTTCCCTAA CGGTGTTGGNCAAGCCGAGCCGATTGGNAAAGCTCATGCGCCATCTTAGCCAGTAAAGTANTTTCGGNTG AAAATTCAAGCTCCGTCGCCGTCGTTAA >gi|3719154|dbj|C99797.1|C99797 C99797 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TGGATCTGCTTTCTCGTCGGCGGCTAATCAAATTCTTCCAGAGGGTTTTGACAGAAATTTCTCGAGATGG GTCAAGCTCAAAGTGACGAGAACTCAATTCCGACGACGACGACAACGAACACTCCTCCTCCTTCTGCGAA CTCACCTCGGGATTCTGAAGATACTTCGTCGCCATCGATGGATTCTCTTCTTGCAGAAGCTGCAGCATAT GGTGAAGATGATAATGAGAATGAGTCTCTTGAAGCCAAAGCACAGAGAGCTCTCGATTGTCCTTGTATAN CANATTTGCGTAATGGCTCTTGCGGGTCTCANTTTCTCCG >gi|3719153|dbj|C99796.1|C99796 C99796 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GTTTGTTGCAGAGCAATTGTGGTGTAAGTGTATTGGACTTCATACCAAGAGCTGACGGTGGATCTCCTCA CGTATGTCTTAATCGACTAAATCAGACACCTAATTCGCCTCTAGCTGGTGGAAGTTCTGGTGGCCGGAAA GCTAGTAAGCAGATTATACTTGTCTGCCATGGTCAGGGGAATAATGAGGATTCTGCTGTTATTAACCAAG CAGCTAATAATGATCAGGCAATGAACATGCTTGGTGTGATACATTCACAGAAAACCGCANAGCTTCTACT TGATCTAAGGGGTTATTCAATANTTTGCA >gi|3719152|dbj|C99795.1|C99795 C99795 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AACAAGTCAAAGCCAAGCTGGGATGACATTTGTGCGTTTAAAGTATTTCCTTTCAAATGCCAAACATTTC TACAGTTATTTGAACTTGACGATGAGTACATTCAACAAGAGATAAGAAAGCCTCCCAAGCAGACTACTTG TAATTATAAAACAGGATGGTTCTCTGAAGCGCTGCTTGACAATTTGAAACTCCGTGTANCTGTNATGTTT GTATCTGTGTNNCCNGAGCCAGGTNTCGAANA >gi|3719151|dbj|C99794.1|C99794 C99794 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AAAGAACCAAAGCTCTTGGAGGAGGTGATCTTCTCTTCTCAGATCATCTTCTACTCTTGAGTATACCCTT CCTTTGAAGATAATTCCTAGTTTGGGACTTATCCTTACTTCTCCGGGATTTCACTTTAATCCACCGAAGA GTTTTGACATCTGAATTGTATTGTTTTGGGTGTGATCCCGATAGAATTCGAGGGTAGGAATCGGAAAGTA GGGTGATTTGGTTTANAANAAGAAAGAAATGGAGGGTTTTGTCGATCACTACATTGTTCTAGGTTTAGCT TCTGGAGAGGAANCTCTGAANCTTACCGANAANGAAATTGC >gi|3719150|dbj|C99793.1|C99793 C99793 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CATGGTCAGACACTTAAGTACAACATGAAAGTTAGAGCTGGAAAAGGATTCACTCTTGAAGAGCTTAAGG TTGCTGGTATCCCAAAGAAGTTGGCTCCAACAATCGGAATTTCTGTTGATCACCGACGCAAGAACCGTTC TTTGGAGGGTCTTCAGTCCAATGTCCAAAGGTTAAAGACTTACAAGGCTAAGTTGGTGGTGTTCCCTCGC CGTTCCCGTCAAGTCAAGGCTGGTGATTCTACTCCAGAGGAGCTTGCCAATGCTACTCAAGTTCAAGGTG ATTACATGCCAATTGCCAGTGTCAAGGCAGCTATGGAGCTANTTAAGCTGACTGCANATTTTGAANGCGT TCA >gi|3719149|dbj|C99792.1|C99792 C99792 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CGAAGCTATTCCTTGTGATCAATTCGACGTTGCGTTTCAGGCGGTGGAGCTTTGGATCGCCGATCGTGCT GTTCTCCCAGTTGAGAACTCTCTCGGTGGTTCGATTCATANAAATTACGATCTTCTCCTCCGTCACCGTC TCCACATCGTCGGAGAAGTTCANATCCCGGTTCACCACTGTCTCTTANCTCTTCCCGGAGTTCGTATGGA TTGCATCNCGCGAGTGATNTCGCNTCCTCNANCTCTGGNTCANANGGAANGATCGCTC >gi|3719148|dbj|C99791.1|C99791 C99791 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ACTTGATCTCACGACTCCATCTTCTAAAATTCAGAATCTTTCTTTGAAACTTTTTTCGTGTGAAGAAAAT GGCACCAAAGGCAGAGAAGAAGCCGGCAGAGAAGAAACCAGTGGAAGAGAAATCAAAAGCCGAGAAAGCT CCGGCGGAGAAGAAACCAAAAGCCGGCAAGAAACTCCCGAAGGAAGCCGGTGCCGGCGGCGATAANAATA AGAAGATGAAGAAGAAGAATGTTGAGACGTACAANATCTACATCTTCANGGTTCTGAAACAAGTTCATCC AGATATTGGTATTTCAAGCAAAGCTATGGGGGATTATGAACAGTTTTCATCAACGACATCTTCCGNANAA ATTGGCATCGGGAATCTTCCGAA >gi|3719147|dbj|C99790.1|C99790 C99790 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AAGCAAATTAAGATCATAAAANGGTTTAGAGCTTTTCTAACAAACGTCAAAGCAAATCATCATCGGAGCA ATCTTCAAATCATCATGATAACAGTAGCCATCGCAGCCGAGTTGCTTGAANAATATACGGNGGCGCTCAC ACGCATCACCGCCANNCTCCTCCCTCCANNANCTANNAGTCNNCGTCGAAGTGTCCGANCTCCTA >gi|3719146|dbj|C99789.1|C99789 C99789 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AAGGCGGCCAGCGATTTTATCCAACAAGACCTCAAGATGGACTATGTGTATGACTACATGTACCATCTTT TAACCGAATACTCGAAACTCCTCCAGTTTAAACCCGAGATTCCGCGGAATGCCGTGGAGATTTGCTCGGA AACAATGGCATGTCTGAGGAGTGGGAATGAGCGGAAGTTCATGACAGAATCACTCGTGAAGCAACCTGCG GATTCTGGTCCGTGTGCCATGCCTCCTCCTTATGATACGGCTACGTATTACGAGGTTGTGAAGANGA >gi|3719145|dbj|C99788.1|C99788 C99788 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GGCTAAAGTAATAAAATTAATGGCAACTTCAGGGTTTAAGCATTTGGTGGTTGTGAAGTTTAAGGAAGAT ACAAAGGTTGATGAGATCTTGAAGGGCTTGGAGAATCTTGTTTCTCAGATTGATACTGTCAAATCCTTTG AATGGGGAGAANATAAAGAGAGTCACGATATGCTTAGACAAGGATTCACTCATGCATTTTCGATGACCTT TGAGAACAAAGATGGTTACGTCGCCTTCACAAGCCATCCTCTTCATGTTGAATTCTCANCCGCTTTCACC GCCGTCATCGACAANATCGTTCTCCTCGATTTCCCCGTCGCCGCTGTCAAATCTTCCGTTGTTGCAACAC CATGAATCTTGTTGATGGTTACATATCNTCTATGACNCATATCNAACTTGT >gi|3719144|dbj|C99787.1|C99787 C99787 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GGGATTTAGGGCTTGCGTCGTGCTTGANGCTGAATCTATGTCATCCGAGTTATACGTAATTGATATCAAG GTATGTTGTCNCTTGAGTGGTAAACNCANCAACCTCTTTGATTCCGCTGACTGTCGGGATNCCTNCTNNA CNCCTCANATGGATNNTCNTTTGGTTATATTNGACCGTNGTCTCCCCCCAAACCAA >gi|3719143|dbj|C99786.1|C99786 C99786 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CGTTCTCACAAGATCAAGAATATCANGAAACAAGATCACTTCTCAATCCTCGAAGATGACATTGAGCAGA GTTCATCAACAAGTTATTGCATTTCCTGCTGTCAATACTGCTCCGGTGGGTTACTTGCCTGATCCAGCTT CCATCAACAAGCTTCAAATCCCAACTTCTTCAAAGGTTTCGATGCTTCAAAAGAAGAAAACCGATTTNTT CTCTNNCGGAGCAAGAGATCGGGACAAGTTAGGACCCAAGCTAACCGAAACAGTAAAGNAGAAAGCTATC CTTTGGGAGCTNAGATCCTTCCAATGGGGAGG >gi|3719142|dbj|C99785.1|C99785 C99785 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GTTGATCTCTTCAGTTTAGGGTGTGTNCTGTTTAACTGTATGACTGGAGGTAAACATCCTTACGGAGACA ATTATGAGAGGGACGTTNACGTTTTGAATGATCNNNAGGATCTTTTCTTGATCGANANTCTNCCANAANC TGTNCATCTNCTCNNTGGTCTCCTAAACCCGGATCCNNNTTNGAGACCGANANC >gi|3719141|dbj|C99784.1|C99784 C99784 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CGAAGAAACTAGAAAACGAGATCGACGTTATGTCATCGTTACCTTATCACCCACACGTGTTAAGCTTTCT CGGCCATGCCGAGAAAAAACTCATGGTCGTTGAGTACATGCCAAACGAATCGTTATACCAATTATTACAC GTGTCNACTGATCCTCTTCCCACGTGGCTTAAACGCATCGAAATCGCTCTTCANATCGCGAGTGCGGTTN TNTTCCTCCATGAACACGGTATCACCCACCGCGATA >gi|3719140|dbj|C99783.1|C99783 C99783 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GGAAGAAATACGAGAGAAAGATCTCACCGACTCTAAACCATCTCCACCGCAACCACCACCGAAACGTGGT CTCATCAGCCGCAAAAGACAGCTTGTGTTTCTCTCTTTCATGATTTTATTAGCCGCAAAAGGACTCGTTG GGATCGGAGAAATAGCGTTTGTAATCTTGTGTTATATCTACTTGTATGAGTTTCTCTCAAGATTTGCCTT CCCTCGCAAGCAAACAGAACAGAAGAAGAGACTCTCNNACCCTAAAAACAAACTCTTTCAAGCTTACTTC CTCGCCACTGCAATTATAGGCCTACTCTTCCCTCTTTGTTACATCGGAGATGGAATATNCCGTGGAGACA TTCCGGGGCTGGAGCCGCCGCN >gi|3719139|dbj|C99782.1|C99782 C99782 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ATATAAAABCCCACTTAAGTTACATTTGATCTCACTACAAATACCACTGCTCTTCCACATTACATTCTAT TTTATCGACCTTTTTGAGTACACTAWAACAATTGGCCAACCTGACTATGTWACAAAGAAGAATGATATGA CGAGTCTTAAGGGGATATGATACAACAACAATGAAGTAACACAAAAGTATTTGCTAAGTTTGAGATCAAA CAAATTTTCAGCTGTGTCGGAATTTAGGCCGCACTGTGATAACTCCTGGCCTTGTCTCGTCAAACCTATA CCTGTTATCTTCAAAGAATGTCTTCACGGCTAGAGGAAGTGAAGCCTGTCCGCGACTGTGTTTACCAATA CCTGTTATAACCTGCAATGAGTTTCTCAGTTCTCTAGAAGAAGTTCTTTGACAGTGCATGCCTTCCTCAT CTAATCTACCAAAAGGCTCTTGTGATGCAGATCGCAGAGCTVDTTTCTTTGACCTACCTCTATTTGGTGA TACTGAACGGTTCACAGTAAAGTGACCTTCAATCATTTGCAAACGTTCTTGAAGGCTTGAACAGCTYATG TGGCATGGAGACCAT >gi|3719138|dbj|C99781.1|C99781 C99781 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TGTTCAAAACTAGATACATCAAATATCTTTAATGTCTATCATCTATACATGCAATACACTTGTCTAGAAT CAAGCAATGTGCTCTTCCTTCTCTCTGTACACGCAGATCACTTTTGAAGTTTGTGCTTCACCCTAGCTTT TCGAATAGAGTTGCCACGAGATCTTCCCGAGCTTTCTCTAAGGCACTTGGGAGATTTTCAGGCTTTCTGC GCCTGCCTGAGCAAAATTGGGCTTTCCACCACCTCCTCCGCCACACAGCTTAGCTATGGGGCCAATGAAT TTCCCTGCTTGAACACCTAGGGAGACTACTCCAGGACTAAATGCAGCAACTAAACTAACCTTGTCTTTTT CTGGAGATGAKCCTAGTACCACAGSGACTGGATCTTCCAATGTGCTTATCAAATGSTCAGCTGCACTCTT TAATGAG >gi|3719137|dbj|C99780.1|C99780 C99780 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AAATGAGACAANTACAAATCAGTTCAATCATCTTTGTTATCACCGGAGAAGTAAATCTCACAAGACCTAG GAAGAAACACAGGCAACAAGAGACCAAACAGATTATAAAACCACATCACCGTGTTAACCGATGCAATCAC TCTTCCTCCGTACAATCTCAACGGACCACCAGGACGTTGAGTGTCGGAGAATTCTGCTTTAACCCAATCC AAAAGAGCGAAAATCCTACGAGCGTTGTAGAAAACCGGTCCAAGAATACCTATTGGCATCGAATACTTGT CAGAGAAACCAWTAGGTTCTGTGAAAGCTTGACCTGRGAGGAGAAATAGATGTGGTGCGGSGG >gi|3719136|dbj|C99779.1|C99779 C99779 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TATGYCCATGATRGTTATTATCAAGACATATGATCATGATTCCTACBATTATCATACGTCTAGAACAAAA TGTTGGTAGGAATGTAGAATCGAACATCAATGCTGTTACATTGACTTGTATATATATGCCTACTAGACAA ACACAAAGGCCAAAGATATATGTATCTTAGTTGTTTAGAAAATTCTCGAGGCAATGTTCTTGGTCCAGAT TCCTACTCCAAAACTTCTTGTAATACTCTGCATAAGTGAAATCTTTGTAGACTGGTTTCGTTTCATCGTC CTCAGCTTCCCACAAGGGCTTGGCGGGCTCATGACAGCACAGTCAGCTGGGCACARAAACGATGCGACCG AWAKTC >gi|3719135|dbj|C99778.1|C99778 C99778 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ACCAAGAATGAAGTACACGTATACAGATAAAAATAAAGAAGAAAAAAACAGAGACAACTTTTCCGGAGAT TTTACTTTAGAAAGCAAAGAAAACTAAATCAAACCAAGCCTTCAAAAATTAGGTAGCTCTTATAAACCGG ATCATAAAACCAAACATCAAAACATATGTATGCTCTTTCAAAACATGGTACCAACTCACGAGTCTTTTCA TCAGGGCCGATTCTCACCATCACTCAATGGTCTAGACACCATCAGTTTGGGGTTCAACTTCTGATCTTTT GGGTGGTGGTGGAGGTGGTGATCTGTCGTAATGCTCAGCAACAAGTGAACCATGAGAAGAAGGAAGAAAA ACCTGASGAGACTCCAYCGATGGAAAAWAAGAGGATGGTA >gi|3719134|dbj|C99777.1|C99777 C99777 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ACATTATCCGARGATAACAAAATTAAATGCTACTTACTACAAACGATAAATATATCATTCTGTTTAGCGA TTGTTCTTCTGCTTGGATTTAGATGGTTGTTTTCTTTTTGTAACCAACCCAACCTTTTAACCCGACCCGA TTCGATATTTGACCCGCAATTCATAAACTCTCACCANNBGCGGCAAGTTTGACCCGGCCACGTCAGCGTT TCTCTCAACCGTTTTTTCCGCCGTTTCAGTTTAACAACCCGACGCAAAACGCTCATCCATAACGGCAAAC TCTTCAACGGTTCCGCCAAACACGCCACTATCTCCGCCGTGATCTCCCCGAAACACGGTCGTGATTTCCM CSGTCAGATGAAACGCWT >gi|3719133|dbj|C99776.1|C99776 C99776 YAC clone CIC8B11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GAATTATATAAAGATCATAAAATCTGTGGGTAGAGAAAATATCAAAAGGGAAAAGTAGGAAGTTTCTTAT TGCCTAGAAAATGATGAATGAGCTGAAGAGCTTCTCTAGGTTTAAATGTCGGAACCTGGTGTCCCGCTCC TCTTACCGTCACAAACATTAAACCGTCATACTCCACCGTCCACCCTCCGACCTGTAGTTTGGTGTACCAA GGTGTCCAGTCTTGGACTATCTTAAGACCTAGCTTCTTTAGTGAGTATCTGGTTGCGGTCACGGGGATTC GCCCGTCTGTATCCCCACTGAAAACCCATACGCGTAATCCCGCTGAAACAAGTGTTCTTAAGGTTGGAAG CATAGAAGCGGGAGCCAAGACCAGAATGAGACAGTGTCACTGCAATGAGTCCAAGGGTAAGAGATGTTGG TGACATTAGCGTGAAGTGCCTCCTGAACATCTTTTCTGTTCAWATATTTTTCTGCGGACSSGTGGGTCGA CCCGGGAATTCCGACCGGTACCTGCAGGCGTACCAACTTTCCCTCCATGGTACCCGGATCCTCGAATTCT TTTGCTTTTTACCCTGGAAAAATAYTCATAAGCCACCTCTGTTATTTACCCCCAATCT >gi|3719132|dbj|C99775.1|C99775 C99775 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GAAGAGGAAGAGAGAGGACAAGAGAATCATAAGAAGAAGACATAGTCATGGGAGAGGTGAAAGTAGACGA CGATGCGATTCTTAAATCCTTCCTCGCCGAGGTCGGAGAANTTGAGAGAGATAACGAAGTCGGCAGGATT CTCTCATGCTTCAAGCTGAATCCGTTTGAGCATCTTAACCTCTCTTTCGATTCTTCCACGGATGATGTTA AAAGGCAGTACAGAAAGATTTCTTTGATGGTTCATCCTGATAAATGCAAACATCCACAAGCACAGGAGGC TTTCGGAGCATTGGCAAAAGCGCAACAACTGCTGCTAAACGACCNAGAAAGAGATTATATTCTTACCCAA GTCCATGCTGCAAAAGAAGAGCTTAAGATGAAGAGAAAGAGACAGTT >gi|3719131|dbj|C99774.1|C99774 C99774 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GAGTCTTAAAGATGATCAGTCGGCGAGTTTTGTGATAAGCAATTTGGGTTCATCCGCAAAAGCAGATATC AAGGTTAGTTTTAACGTGAACGATATTTGGGATCTACCTGTCACGTTCGAGAGAAGCAATGTTGGTAAAT TACTCACCGGGCTCTCAAGCATAAGGGACCTAACTATAAGTGGAACAACTTTGATGATCATTTGTCACTA CTTGAAGCACGAACCGATGCCTCAGTTTTGTAACATGGTGCGGTTAAATGCGAGATTCTATGATTGTGAT TTGGAAATGTTGCCATGCGTTCTTGAGAGCTGTCCAAATCTCAAATCCCTTGTCTTGGGTCTACTATCTT CCGCTGAGACGGAACAACAATCAAGAGTCTCGTCTGTGCCTCCGTGT >gi|3719130|dbj|C99773.1|C99773 C99773 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GTTTCTTGTTGTTAAAAATATCGTACAAAAATGGCCGATGAGGTCACAATCGGGTTTCGCTTCTATCCCA CGGAAGAAGAACTGGTTTCGTTCTACCTACGAAACCAGCTCGAAGGAAGGAGTGATGACTCAATGCATCG TGTCATTCCCGTACTTGACGTCTTTGAGGTCGAGCCTAGTCATCTTCCAAATGTTGCTGGAGTGAGATGT CGAGGAGACGCTGAGCAATGGCTCTTCTTCGTGCCACGACAAGAACGCGAAGCAAGAGGAGGCAGACCGA GTANAACTACTGGTTCAGGATACTGGAAAGCAACTGGATCACCTGTCCAGTCTTTTCC >gi|3719129|dbj|C99772.1|C99772 C99772 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GACGAGCAAGACATGGGGTAAGAAGGGAAGGCCACAGAAGCAGGTCGTCAAGTCAAGGACATCAACAGTT CATGGTGTTCTCTTCGCAACCTAATGCTTCTTCTCCTCCACCTCATCCTCCCATGCCTTCTTCTCCATCT CAGAGAGATGAGAGTGACACAGTGTCAAACCTTCCTCACAATGCTTTANGGGANGGTTCTCATCAGTCAA ACACGCAGCCACCAACTTCTTCTCATCCCCGCCAGGTTTCTCCCTCAGCATCTGATTCAAACAGCAGGCC TCTTAATCAATCTTCCCCAAGTGAACAAGATANAGCTGGACCATCAGAACTCCNGCCATTTTCGGAATCA CTTAANTCTCGATTAAACGCTGTCTCCACNAGATACNAAGAATC >gi|3719128|dbj|C99771.1|C99771 C99771 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CGTATAGCCGGTTTATGAAGAACAAGCTGGAGGCATATGTGGATTTCCCGCTAGATAATCTTGATCTATC AAGCTACATCTCCTACAAGAATGGTCAGACAACATATCGTTACATGCTCTATGCGATTAGCAATCACTAT GGGAGCATGGGAGGTGGTCATTACACTGCATATGTTCACCATGGAGGTGATCGATGGTATGACTTTGATG ATAGCCATGTCCACCAAATCAGCCAAGAAAAGATCAAGACCTCGGCTGCTTACGTTCTGTTCTATAAACG CCTTGTAGACTAAAGAAACTGAAGCGGAAAAGACAAGAAAGAGGTATTTGCATTTTTGCCGGGTTTGGCT TATTTAAAAACATCATTGGCTTGATTCTAATTCACTACAAGATCAAGATGAAAGCAGCTCTGCGTTGAGG CTAATTTACAGA >gi|3719127|dbj|C99770.1|C99770 C99770 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CACGGAGATAACTACAGTGACCTAAGCCGCAAAATCAAGCTAGCTATGCGACTAGTTGAGCTTTACCAGC CTTACTTACTCTTCAAGGGCATATTTGATGATTTAAATACCGAAAGACTGCGAATGAAAAGAAAGGAGAA TATCAAAGAGTTAGATGGATCGTTCGAGTTCGATCCCAAGTCCATTGATTGGGACAATTATATCACAAAC ACCCACATTCCTGGCCTCATCACCCATGTGCTTAAACAATAAATTATGCTGGTAATATGTTTGGAACTAT TGTGAATCTCGTGTGTAATATTATTAAAGAATACGATTATATCATTCTAATCTTGTAATTTACAGTTTGT GTTGGCGTGTAATATCAAAATAAATAAAAAAAAACTTATTCCCCAATGGATAAGACTTTTGAATCNTGC >gi|3719126|dbj|C99769.1|C99769 C99769 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ANAGATTAGCGGTTCTGTGAAATTGCCTCACGTTCCTAGGCCAAAGATGAAGATTTGCATGCTTGGTGAT GCCCAGCACGTCGAAGAGGCTGAGAAGATTGGATTGGAATCTATGGATGTTGAAGCTCTTAAGAAGTTGA ACAAGAACAAGAAACTTGTTAAGAAGCTTGCTAAGAAATTCCATGCTTTCCTTGCTTCTGAATCTGTCAT TAAGCAGATTCCTCGTCTTCTTGGTCCTGGTCTCAACAAGGCAGGAAAATTCCCAACTCTTGTTAGCCAC CAAGAGTCTTTGGAATCCAAAGTGAATGAGACAAAGGCAACAGTGAAGTTCCANCTCAAGAAGGTTCTAT GTATGGGAGTTGCTGTCGGTAATCTTTCCATGGAGGAGAAGCAGATCTTTCAAAATGTTCAGATGA >gi|3719125|dbj|C99768.1|C99768 C99768 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GTTTGTTGCAGAGCAATTGTGGTGTAAGTGTATTGGACTTCATACCAAGAGCTGACGGTGGATCTCCTCA CGTATGTCTTAATCGACTAAATCANACACCTAATTCGCCTCTAGCTGGTGGAAGTNCTGGTGGCCGGAAA GCTANTAAGCAGATTATACTTGTCTGCCATGGTCAGGGGAATAATGAGGATTCTGCTGTTATTAACCAAG CAGCTAATAATGATCAGGCAATGAACATGCTTGGTGTGATACATTCACAGAAAACCGCAGAGCTTCTACT TGATCTAAGGGTTAGTTCAATAGTTTGCAGCCCTAAAACAGCCTCCATTGAGTCTTCTGGAGTAATATCC CGGGTGCAAGAAGCTGCGGGTTGTTTAGGTGTNGATAATG >gi|3719124|dbj|C99767.1|C99767 C99767 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AGCCATCAAAAATATATCCATAGAAGCTTCATCGAAATGGCGAATCAAGCAGCTGCTGCAGCATTCTTCC TTTTCGCTTTAGCCGTCTTCTCCAACTTGGAGCTCTCAGCTTCTTCACTTGTCAGTGGCAAGATCTCTTG CCTTGACTGCCACCGCGATTTCGACTTCTCAGGCATTAAGGTCCTCCTTAAATGCGACGG >gi|3719123|dbj|C99766.1|C99766 C99766 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TCGATGGCGGTTCGTAAATTCTGATGAGTGCTTATTGACGAGAATGCAAGAAATGTCATTGGATTACCAT TTCACTGTTGAGCAAGAAGTGGGTTCATCAACACATGCTTTTTTCGGCTTCAACGGAACCGCCGGAATAT GGAGAATAGCGGCGATAAATGAAGCTGGTGGGTGGAAAGATCGGACCACCGTGGGAAGATAT >gi|3719122|dbj|C99765.1|C99765 C99765 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CACGACTACTTTCTTGCAACGCATCATCATCTTCTTCTCCTCCCGATAGCAGCTCCAGTGAATACCTCAA AGACTCCGGCCTCTGGGAAACACCGGTTGGGGACATGAGCGTGGTTTTGTCGCTGCAAATTCANACAAAA TGTTCTGATTTGTTTGCTGAAACTCCTGCTGTGTCTTGAGTCTCTCTTCTTCTGTATCNTTTNTCTCGAG TTCTTANGCNCNNCAGGGCTTCTTT >gi|3719121|dbj|C99764.1|C99764 C99764 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GNGATTTAGGGCTTGCGTCGTGCTTGATGCTGAATCTATGTCATCCGAGTTATACGTAATTGATATCAAG GTATGTTGTCGCTTGAGTGGTAAACGCAGCAACCTCTTTGATTCCGCTGACTGTCGGGATGCCTTCTTTA CACCTCAGATGGATAGTCATTTGGTTATATTTGATTGTTGTTTCCCTCTAAACCAAGATNACNTTCGTCT AGCTGAACTGAACAATGATNAGGTGGTCACANAAGTTTCAGTTCACTANTATTTCTCGCTGCAAATAACA GGAGTCGGTATACGCTTCCTCAGGGACTGT >gi|3719120|dbj|C99763.1|C99763 C99763 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TGATACAATTCCTCCTCGAGCACAGGTACAATCTCCGCTTGAAGTGATGAACATCCGCCCTAGTAGGGAT GTTGCAGTTTTGGATTTCTCCTACAAGTTTGGTACAAACGTGGTCAGTGCCAAATTACGCATCCCGGNAA CCTTGAATAAGTTTCTTCAACCTCTACAATTGACATCTGAAGAGTTCTTCCCTC >gi|3719119|dbj|C99762.1|C99762 C99762 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTGATGTTTTGTCTCTCTGATTGAAAAAGGTAAAGATCGGGTTTTGCAAGATGGGAAACAAAGCTACAAC GGTAAAAGAAGAACGGGAAGANATCCNTTTGAAGATTGTNCCTCCATTGGACAAANTTTTTCTGCGTNGG CTCNCAANANATCTCCANANANTTCNTGGATTCNA >gi|3719118|dbj|C99761.1|C99761 C99761 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GGGAAAACGGAGGATTCCAAAGTATCTAGCAGTAATTCAGCTGCTCATGATTCTTCAGATGATGATTGGG AAGCTCTTGCAGATGTTGAACCGANTAAGTTACTCCCCGTAGAANAGTTGCCTGAAATATCANAGCTTTC GGCTGAANAACCTNNNNTTCAAGGACCTNNNANACGTGGANGGGGA >gi|3719117|dbj|C99760.1|C99760 C99760 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CACAAAAGCCCATTTCTATAACTGTTCATAGGTTTGCCCATAAACCAATTGGTGTACCAAAGAGAAACTC TCGATGGCCTATGGCTGATGAATTCGACACCAAATCCGATCTGTCGACTCCGGTGGTTCACTCTCTGCCG CCGAGGCCAAGGGTGGCTCANCTTGCTCGATCAANAAANCCNCCGTCCANGGTGGANT >gi|3719116|dbj|C99759.1|C99759 C99759 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TAAAACGANCGTCANANGANGCTGGTNGTCCTCCTGGCGNCGTAACTAATGTTGTATGAGATGATTGCCT CCTCTCAAGAAAATCNTCCAAGAAGCCATCAACAACTTTCCAATAATCTTCNTCGTCAAAANTGCATGCA CCNANGATNTNTGTTNGCTTCCTANTCGGCAGGGANGNCCNTGNCTAGACTANTTNNTCGGNGC >gi|3719115|dbj|C99758.1|C99758 C99758 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GGAGGCAACCACTTCTTGAGCTTGATGCAGCTCCTAGCTTGTCTCAGAAACATCAGCAAATTGCAAAGAG GGAAGAANCTGTCAAGGAGAATATCATCTTGTCACAAGAGAGACATATCCAGAGGCTAAACGACCTTGTN CGAAGTCTTCAAATGCAGTTACNGCGATGC >gi|3719114|dbj|C99757.1|C99757 C99757 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TATGCTTGATATGGAGTGCTTCTCATACTTGAACCGTGCTCTTGAGAGCTCATTATCTCCGATNGTGATA TTTGCAACAAATAAAGGTGTTTGCAACGTAAGAGGGACTGATATGCCCANCCCCCATGGAGTCCCTATTG ATCTATTANATCGATTGGTTATCATCCGGACTCAAATCTATGATCCCTCTGAAATGATCCNTATTATNNC CNTTCGTGCGCAANTNGAANAAT >gi|3719113|dbj|C99756.1|C99756 C99756 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TGAATTGGCAAAGTCTATAAAAAGACCCAAAAATAATACAATGAAAAGGAGAAAAGACAGAAGCAAATAT TGGAGATCACTAAGATGCGCATGTTGATCACTGCTGGGCACATTGCACACGCTGAGCACCGCCTGGGTGA TCTTCCTCATCGTCATCATAAGCCTCTCTTTGAGCTTGCGCCTTCCTTTTCATCTCATCCTCAATGTTCA CATCATGCAGAGTCGTCTCTTCGCAGTCGTCTATTTCCATATCGCTTATAGCTGCCTTGGTTGGCTTTGG CAAAACTGCTTCAATGGCCTTTGTCTGATCCGGGCTCAGCGATTCSGGGAATTCACCCGTGAAGTGAATG TATAGCTYMCCCTTCATGAACCGCCTTTKGGTATATTGSCATC >gi|3719112|dbj|C99755.1|C99755 C99755 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GTTACATAACCAAACAACTCAAACTTCGTTTAAATTAAGAAACAAGTTCGATATGAGTCATATGACGATA TGTAACCATCACAAGATTCATGGTGTTGCAACAACGGAAGATTTGACAGCGGCGACGGGGAAATCGAGGA GAACGATCTTGTCGATGACGGCGGTGAAAGCGGCTGAGAATTCAACATGAAGAGGATGGCTTGTGAAGGC GACGTAACCATCTTTGTTCTCAAAGGTCATCGAAAATGCATGAGTGAAACCTTGTCTAAGCATATVGTGA CTCTCTTTATCTTCTCCCATTCAAAGGATTTGACAGTATCAATCTGAGAAACAAGATTCTCCAAGCCCTT HAAGATCTTATCAAYCCT >gi|3719111|dbj|C99754.1|C99754 C99754 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TTATCGATTTCAATTACAACACAAGTCTTGAAGTTTACTACAGATAAACTTCATCAAATTACAGAGAAAG TTTGGGTCTAACAAATGATCATTTGTTAGACGGATTCATCTTCCATTACCTTTGACGTCTTGAAGCTGAC CGCTTTTCTCGGATGCTCCCTTATGTTCAAGCTAAACACTTCAGGCCTCGAGTAATGTCCGACCACATCA AAATCAAACTTGGCTCGTGCTATGTCCCCAAGATCTAGATCAGCTGTGATAAGAGCTTCTCCTCTATAGT TTGGTCCAGCTAAAACAATTCCCAAAGGTGAAATGATAGAGCTTCCACCAGCGCAGACAACAGAGTCCGG GTGTTAGGCTCTCTTCTGAACCGGAAAACATGTATYCCGGSGGAGAAGGATAGTCTTTCCGACGAMAAAA CTGGTTAGCTGA >gi|3719110|dbj|C99753.1|C99753 C99753 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CAGCATGAAGAGTGCATAAAGGAAGGTTCTGAGGTTTTGGGATATGATGCAAGGAATGTCAAAGCCCTAT ACAGAAGGGGTCAAGCTTACAGAGATTTGGGCTTGTTTGAAGATGCCGTCTCTGATCTAAGCAAGGCCCA TGAAGTTTCCCCAGAAGATGAGACAATTGCCGATGTGTTAAGAGATGTTAAGGAAAGATTGGCTGTCGAG GGACCTGGCAAGGCATCAAGAGGTGTGGTGATTGAAGACATAACTGAAGAAAATAATGTTACTTCCGGAG AGAATAAAAAACCGTCNAAAGAGGCTAATGGTCATGCTCAGGGCGTNAAGACTGATGTTGATGGATTGCA AGCTCTCANAGATAATCCAGAAGCAATCAGAACTTTCCAGAATTTCATTTCAAAAACTGATCCCGATACA CTTGCTGCTCTAAGCGGANGCNAAGCTGGANACATTTCNCCGGACATTTCNAAACTGCGTCCAGTTTGAT AGGC >gi|3719109|dbj|C99752.1|C99752 C99752 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TTCTAAAGAAAATTTATACAAAACTCAGAAATCCAAAGATGCAGAGTAATGAAATTACTCGAAAGGTAGA TTTTACATTTGAAGCGCAGAAAAGAGTAGATATTTTAGACAGGTTCAGGTCATAGAAGCTGAGCTCGGTC TGTGGTCTTTGTGGCTGCTCAACCTTCTCCTTCTCATCCACTTTGTCTCACTAGAAGCTGGAGAAACGGC TCCATCAGCTGACGGGAGTTCGCAAGGAAGTGCCATAGCCGAGCTGGTGAAGGCGTTGAGAACAAGGAAC GCCAAAATGGGAGACAAATCTAATCCTCCAAGAGGCGGTATGAATCCCGGAAAATGTTCAAGTATGGATC ACATAAAGTGCTGAGGGGGTTAACAATGGCAGGAGGAGCACTCGGGAACCAGGTGAGTWCTAAACGAMCG ACAAGGATGGTGTTAATATATKTTG >gi|3719108|dbj|C99751.1|C99751 C99751 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ACATTAGATACCAACATAAAGCAAAATCAACACACACTGAAACAATGAAATCAACACAAAAACAAACACA AACACAAACAACATGATTACATCTGCACACAAGATGTAACCTCAAAACACAATAGGAATCAAACTTATAC AAGTTTAGGATTTAGGCCTCTTGCCTTCCTTGTCTTCCCCACAAACAGATCCTTAGACTTGATCAAACCA GGGAGGCAACCAACAACTGTCACAAACGGAAACTGAGCCACCGAGTCCTTCTTCCTAAAGATACAATGGC CAACTCTGGACCGGGCTTGTAAGTBGACATCTTCTTCTTTTTCCCACCTGACANTCATTACCTTT >gi|3719107|dbj|C99750.1|C99750 C99750 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GCYTCCCTGTSTCTGATGTATTTGGAAAGACGAATGAAGTTGGTGATGTACAAAGGGAAGAAACACAGAC ACAAGAAGAGAGAGTCTGAGATTATCCTCGAGAAGACCAATATCTATCAATGTCAACAACAGCAAAAACA AATGAAGGCAGAGATCAGCCTTTCTTGACCGGCCTTTGGASTAATGATTTGTTCGGATCCTCTGTCTTCA ATTTTGGAGGTCGCGTCTCTCCTTTTTTGGCCTTCTTTCCTGCTTTCTGAAAGTCTCTCCAGCTTGATAC CCTTTTTTCTCTTGTTCCTTCCCACTGTTCTTCATGCTCACGCTTTTTTCTTCCATATCTCCTTTTGTTC TGCTTCATCCTTCTTCAGTCTCCCCTCTTCTTCTGATATTCTCMATTGCCATTTTTCTTCTACGCCAMTC TTGGTCTGTTAATATCTCTCGGACCTTTAACTTGAGCTCCTTCTGAAACTCCTCAGATTG >gi|3719106|dbj|C99749.1|C99749 C99749 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GGATCATGTGCGGATGAGGAATGTGGAAACGTGATATTCCAACTAGGAGTGTTGATGTTGGAGCTGATCA CAGGACAATCATCAGACAGACAAGGCAATGACTTGATCGAATGGGTACAAGACTCGTGTATTGCAAACTC AATTGATAAGATGATTGATCCAGATTTAGGTAACAACTATAGCTCTAGAGAACTCCAGAAAGTCTTAGCC GTGGCTCGACTCTGCATAAAAACGAGGTATGAGCCTCCTTCATTCTCAATTACACATGTATACCGGTATC TACAGAAGAAGATCGATGTTGCAACTTGAATACTAGTTTTTTTTTTGTGAATTGAATTTAGGTGACATNT GGTTTANCNCCCTTATTTAGTCTTTNGCCTATTTTTACNCCNTNCTAAATNTAATANCNNCTTATAGTGT ATANCATTGTACTTGTCTTGAAATAACTTTTGANATTTGTACTGATGGCAATTGATTTCTTTCTTACCTT ATTTGAA >gi|3719096|dbj|C99748.1|C99748 C99748 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CGAAGCTATTCCTTGTGATCAATTCGACGTTGCGTTTCAGGCGGTGGAGCTTTGGATCGCCGATCGTGCT GTTCTCCCAGTTGANAACTCTCTCGGTGGTTCGATTCATANAAATTACGATCTTCTCCTCCGTCACCGTC TCCACATCGTCGGAGAAGTTCAGATCCCGGTTCACCACTGTCTCTTAGCTCTTCCCGGAGTTCGTACGGA TTGCATCNCGCGAGTGATTTCGCATCCTCAAGCTCTGGCTCAGACGGAAGGATCCGCTCACNAACTCACN CCNAAAAGCAGCCGATTGAAAGCGTTTCACGACACAGCCCG >gi|3719095|dbj|C99747.1|C99747 C99747 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTTAGACTTTTTCTTCTTGCTTTTGTGATCCTCATTGTTGACTTCTTCTTCTTCTGACTTATTTCTCTTA GAGCTCTTCTTGCGTTTTCGATCTTCTTTAGATTGTTCCTCTTCTGYTGATTTATTGTGATAGGCATCAA AGGTTTCATCATCGGCATCAAGCVATTAATGCTTTGCATTCCTTGAGCTTTTTTTCTAAGGGTTGAGCGT TGAATACATTCACTGAAGGGAGAAGCAACGTTCTCACCTTCTTAGCTGACTTATCGTTATMAGAAATCGG GTTTCCYCGAATATTCAGATTTCGCAAGCAARATAGTGTMCCCAAAMCCTCTAAACCAGAGAGTTGCGWA AWCAMATTGTTCCCCA >gi|3719094|dbj|C99746.1|C99746 C99746 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CTCTCTGAACCATAGAACTCCAAGCTTGTACTGTACTCTACTAATACGTCGTCGTTTATATCTTACTCTT TTGTTTCCTCTTACCAGAAAAAATAAATAAACAGCAATATTTTCAATTTTCGACTCAAATCATGCAAACC ATTTCGCCTGCGTTCTCGTGCGATCTCAAATCCGTAATTCAACCAAATCTAACGGCTAAAAACGCGNGTT ACTCGCACGTAAATGGAAAGCGCGTGTCTATTCGTTGCAGTTACAGGTCTGAGTCGTTTAGCTTCCCTAA CGGTGTTGGCCAAGCCGAGCCGATTGGCAAAGCTCATGCGCCATCTTAGCCAGTAAAGTAGTTTCGGCTG ANAATTCAAGCTCCGTCGCCCGTCGTTAACGGACACAGTAACGGNTCCGTTGATTTAAGCCTTGGTTCCG G >gi|3719093|dbj|C99745.1|C99745 C99745 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence TTAAATCATAGTTGAAACAATACTCAGCCTAGAAGGAGACAATCATTCCTATTCACTACAAATCTTTCTT TATATACAAAACTAGTTAGAAAACAAAATCATAAGAATACTTGTGGGTGTGGGTGTTTGTGTCAAGAGTC AAGACCAATTTCGCTCCTGTCAAATGTGGTTTGTTTTCTCCTTATCCAAACATAAACGAGAGATCATCCA TAGGAACCTCATCAAGACCTGCTGTATCAATATCCTGAAGACCCTCGAACCAGTTTCCAAGATCTGCCTG TTCATCTATTTCGTCTAGATCACGGAACGCTAATTTCGAGAAATCTATGGGAGCTTCGTCGTCGACTGCA CCATCTCCAGAGGTAACYCCYCGGTTTGAGGCCCCYCTGCTTGCKG >gi|3719092|dbj|C99744.1|C99744 C99744 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence ATAATAGTATAAAGTTACAGTTCATTATAAATGAAAAAGTACAAAAAACAATCTGATTTCCATTACAAAA CAACAAAGCCCAGATAGGCTTATGGTACACTTGGGAACTCTCACTGCACATTCCCCAAAACCGTGACAAT TGTCCATCATATCTCTTGAAAAGAACAAAACCCGTTTTTTAGATGCGTTATAATCTCTGATTCTCCTTGC ATATAGTGTGACAAGTTTCCCATATATGTAGAATTGTATGATCGACTTCAGGCTTGAGAACAGTTTCTAT AGTTTCAGGTAAATAACATCTKTGAGTTYCCTCTATACGTGCACTTCGTACTTCBTGGATCGGKTAAAGC CCCAA >gi|3719091|dbj|C99743.1|C99743 C99743 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GTGGCTTTVANATTCGAACATTTTAGAGGCTGCGGTGGTGGGGGTGGTTGAGGCGGTGGGATTYTTGTGG YTTGTCTAATGGAAGCACGATGTTTGTTTTTAAAGCGGTGACGATTTCGCGACGAGCTTTAAGCCATGTT TAG >gi|3719090|dbj|C99742.1|C99742 C99742 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AATAACATTCTCTTTTCTCTCTGAAACAACACAACTACTAACTCGGGACATAAGKCTYCCCCAGCCCAGC CCACTGATGAAGAAAGACATTGTCTGAAGAAACAGGTAGATGAAGTAATTGTTCTTCCCGTGCACAAAGT CATAGCATCCGCACACGAACAAGAAAGCCGCAAATCCAAGCTCCAATGTATTCAATCGATCAGGCAATTT GAAGATTCTTGGGAACCTTTTGATCCCTTTAGTGTTTCCTTTAGCGCTCTGACCGCTTCCAAGCTTAGCA GTCACTACCCACTCGTTAGCCCTTCCTGCCTCAAACAGACCAATGAGAGTGGCCTTTGTCCGGTGCAGCG ACATCACATTCTCGAATAGAMCTCCAATAGAMCAGCAGATGAATTSACCTTGGA >gi|3719089|dbj|C99741.1|C99741 C99741 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence AAAAGTTTTGAAACTCTTCTATACACATACATTCTCCGGATGTGGTTGTTACTAACTTCAAAATATAAAA ATTTAACAAAACAATTGTTATCATCATTTCCTACGAGTCATTAAACCCAATCCCACTCGCCGTCGCCGGA AAACACCTCGGAAAATCAGCCACCGAAAACGATCTCCAGGCACAAAAACCCAACGACGACTGAGACGAAT AAATTACCAAAAGACCCTTGACTCCTAGGATACAACGGAGGAAGCTTCTTCATCTGATGTTGATGATGAT GTAGCTGCCTCGGAGGAGATCCAGAAGTCGTCGGWYTTGATCCCGGCGACGAGTCACCTCCGGAAGAAGA TCCTTCTCCGGTCATCACACCAGCGGCAACAGCTWATWGCTAGYGTCAAAGCGTTTCTGCTAAGCGGACG >gi|3719088|dbj|C99740.1|C99740 C99740 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence GTTCAYTTTTKACCAMHACWAGTGTTCATCATTAGTCGAACGGTTAAATGGCAGGCATTCTGAGTTCAAG CAAAACTAGAATCCGCTCTTAAACCCCAGAAACATCATAAATTCATCTGCBAATYYAGAAAAAAAAAACC TTCGTTGTACAGACATGGAGATTCCAATAGAGACTTCTTGGAAAAAATTTGCCTGGAAACCGATGCGATT GGCTTCTTATCTCTTTCTCTTGGCACCAGAGCCTCTYCCTGTAGCTTTCTTCTCAGCAGGCGTACCACCT TTCCCTCCATGGTACCCGGATCCYCGAATTCTTTTGCTTTTTACCCTGGGAAGAAATAYTCA >gi|3719087|dbj|C99739.1|C99739 C99739 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CAACAAGGTGTTGATTCATCGAGGACGTATTACCGTGGCCAAATAGATCCAAAATCAGGAATGGAGAAGC AAGGCAGTGATCCAAGAGCTCAACCACAACACCAAGAAAATCCAAAAACCGGTTATGATAATAACCGTGG GGTGCANACATTTGAAGGTCTTGAACAGAAGTTCATGGATGATATAACAAGACTAGCANAAGATCAAATC GAAGCANAGGATGCAGAGATCGCCNGACATCGAGAGAAAATAAACACTATAAACGCTAGATACGAAGAAC AGTTAGCTACACTTAGNAGCACGGCACACAGGTTAGANAGAANANATCNTGAGGAAAGAATCNCTANCTA GGCAGCAACAATTCCAGCAGCAAACCATGGGGATGATGGACCCATNCCNTCC >gi|3719086|dbj|C99738.1|C99738 C99738 YAC clone CIC7E11 region-specific cDNA Arabidopsis thaliana cDNA, mRNA sequence CAGCAAAATTBYAGGGCAAGCTAGAGTAAAATGACCCTTTTTAAATGATATCTTCAACTATTCTTYTCTT TCTGCACAACATCCGATTCTCTTAGGCTTCTGTTTCTCCAGCTTTGGACAAAATGTGATTCCGCAAATAA GTGGTACAGCAAAGAAGAGTATATAATTCAAGACCGTAAACTCCATCCACGTGCAGCCAATTCACGCCGT ATTCTCGTAGCTGCCTCTGCTGTGTCATTCAATGGCGGATAACTCCAACTTTCCGACATATYTTCGAAAC CTGTAAATGAGCGGACAACTCCTCGCTCCCTMAAAGACTTTTGGAMTTCTGCA >gi|3638925|gb|AI138148.1|AI138148 EST 2 Arabidopsis thaliana cell suspension Arabidopsis thaliana cDNA clone sp12 similar to hypothetical protein, mRNA sequence CAAAGGANCCCATCTTATCATATGTACTGATAAAAGCTTCACAATAATGTCGCGGCTAANAATGAAATAT TCAAATATTTCAAAGAGACAGCANAAATAAAACTAAATCCATTGCCCTAAAACCCCAAACTTCAAACCCT GCAAATTTTGATTGCACCTCCTATTTACACAACAAACCACTCATCACTGCTGTATCCAGCATCTTNGGCT TTAGACTCATCATCACCGACTGCATCTTTTGAGAGTTCCATCATTTGAATANCTCCTGGTTTCTCTGTTT TAACATNGGGCATAATAGCTTCAGCTTTGTCTACAACTACATATTCGTCATCTGAATGACCTTTATCACC TTCACCACTCTCATCATCANAATCGTTGTANAAATCAAACGTATCAACGGGGGGAATTTNCCTACNAGGT CGGATCAGATATGGTAAAGGGAACTCCGTTGCANCCTCCCCTCTTCCGAGAATGCANAACANAAACAGCA TGAACTGGGTGCCAATGTTGCCATGTCCTGATTCAAAAATGGTACCTTATCGAAAATTCANANAAAATCG TTTATCATATCTTGANAAATTTGATCGTCNACAAATTATCAAAACTCAGTAAGAAAAAAACAAGACATCN GCGGTGGCNAAAACTAAAAATTC >gi|3638924|gb|AI138147.1|AI138147 EST 1 Arabidopsis thaliana cell suspension Arabidopsis thaliana cDNA clone sp2 similar to cytochrome P450, mRNA sequence TTTTTTTTTTTTTTTTTTTATTGTAAGTAAAACTTTGTTATATTAAATGTTATCAAAAATGTAACTTGAC ACATCTTTTATACAAAGCATCAAAACTCCAGACACAGATAAAGAAAAGTAAACTTTAAACAAGAAAACTC AATTCAACATCCTTCTTACTTAAGCTGTGTAGAGTTTTGGATCGGACAACCTTGGAACAGGAATAGCCAC AAGTGGAGACTTCAACTTAAGAACAAGACCAAACTTCTCTTCAACCTCAAACTTCTGTCCTTGAGGAGCT TTCCAATCAAAAGAGTGAAGAAGTGAAGCAATGTTGAACAGAACAAGTCTCTCAGCCATGTTTATCGCCG CACAAATCCTCCTTCCTGACCCAAAAGGCAAATACTTAAAATCACCTCCATTGAAATCAAGCGAATTCTC CAAAAACCTCTCAGGTTTGAACTCGTTTGGTTCATCCCAATTCTTAGGATCTCTATGAATCGCCCAAACG TTGATGAAAATCTTGGAGTCTTTAGGCACAGTGTATCCCGCAACCACCGAGGTTTCGCTGTTTCTGTGAG GAACAAGAAGAGGAAGCGTTGGGTGAAGCCTAAGAGTCTCTTTCATAACCGCTTGTAGGTAAGGAAGCTT AGGTAAATGTGATTCCTCAACGATGTTGTCTTTGCCAACAACTTGGTCAAGTTCTAGTCGGATCTTGTTT AAACTTCCGGTCTGCTCCCAATCTC >gi|3450634|gb|AI100673.1|AI100673 35048 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99P9XP 3', mRNA sequence TTGCCGTTTACCCNCCCATGCCTGGNCTTACCNTCCAATAATGNTTGNTGNCCCATATATCCATNTNCCA CCAAGNTAAGAAGAAAGCCCAACTAGTGAATAATTGATTGATGGAGATAATATGTGGTTAGAGAAATTCC TAGAGGAAAGCCAAGAGGTAGATATTTTGGTTCCTGAAGCGACGACAACAGAAAAGGGGGACACCTTGGC TTTTGACGTTGATCAACTTTGGAGTCTTTTCGATGGAGAGACTGTGAAATTTGATTAGTGTTTCGAACAT TTGTTTGCGTTTGTGTATAGGTTTGCTTTCACCTTTTAATTTGTGTGTTTTGATAAATAAGCTAATAGTT TTTAGCATTTTAATGAAATATTTCAAGTTTCCGTGTTAC >gi|3450633|gb|AI100672.1|AI100672 35047 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99P4XP 3', mRNA sequence GGACCNCGATCCAGGTGANTCCAGCCCGCCGCANTCATCTAGTCAGTGAAGCTGGGAAGTCACTGAACAG CCCAGAGTCTAAGAAAGTGCTGAGCAATCTCATTTACAACTATAAGCCTACTTACTGTGGATNCGCAGGG ATTGGTTACGACGAGGTTTACATCTTCACACAACAACGANCCCTTCTCTAATAACTATANCCTCTCCTGT GTANCCTCTCGTGTGTATAGTGAAATATGTNCCTTCGACTCTGTTATTATCTGTGAACTTGTTGTAACTT TGAACGTCAGCCTATGGCTTGTGTTTGACATTAAACTAGATAATGTACGCTTTTCTATCTTT >gi|3450632|gb|AI100671.1|AI100671 35046 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99P23XP 3', mRNA sequence GCTTCCAGGCTTTNTCAAATCGACTTTTNCANTNGGANCCCTTGAAGACCNCTGTGAAGAGGGGGACCCC NATAACTACAACGAAAATACCATTCAGACCAGCCCGTTGANCCTATCCTTCATATCTGCTTCTACGGCAT GGCTTTCTCTTACCTTGTCGCTCTCCCTAATGAGCGTCGCCATCTTGAGCATCAGCAGCATGCTAAGGAG CACGGTGGTCATTGATCTCGTGGGAATCGTTTCGATCTCGAGATGATTTTAGGGGGGTTGCTGTGAAATC TTTCTCTGCTTGATGGTGACGACGACTCAAGAATTGTGTCTTATTGTTTCGTTTTCTTGAATTTTCCTGG ATAATGTTGACCTAAAGGAAAACCTTTCTTTCGAATTAC >gi|3450631|gb|AI100670.1|AI100670 35045 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99P18XP 3', mRNA sequence AAGACCGGATTTGTTGGGGTTGNTGGAGNATNTTGCCNCGGCGGATGGCCNAGTNTAATACCATGTGGGG GCCCAGTATATAGTGTTTTAAGTCCCCAGGGGGAAAGTAGAAGAAATAGTACTNTAGTTGTCTTGTCTGA TTTTTTTGAGTGGAACTCGTTTTGAAAAGTCGTTGGTGATGACGTGGCAGCTGATCAACGTTTTTATTCA GAAAGAAACACGGCAACGCGAAAGCGGTGATTTCACACCCACCGCACTGTTTTTGTATTCTTCTAGTTTC CGTTGTAAATAGTTCAGTTTAAATGTTATTTTATCTGTATATGCTATTGTCAAACAAAATGTATTTGTTT CTGTTTACGTGTTGTTGGAATGCGATTTTCCTTGATGAGT >gi|3450630|gb|AI100669.1|AI100669 35044 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99N17XP 3', mRNA sequence GGNAGATTTTAAAATNTTAGTGGAAAAAATGGTGGGACCATTNCCGACCGCCGAATCCTTGGATACCAAG AAACCTGTTCCCCGTGTGGACCACAGAGGTCGATCTCGTGAATCTGAAGCCGTTCATCACCGCTCTTACT GAAGCTGGCCGGCTCAACTACGTGACCGCACCGTCCGCTGCTTGAATGTTGCCAGGAGTTAAAATTGTCG GTGGATCAGGTAGTTATTTTTCTTTCCGGTCAGTAAGAGGTTGGGGATTATGTGTCGGGTCGACAACCAC ACATACTGTCTCTGGTTCCAATGCTTTGGACGTTGACATGTGATTTGCTTTACTTTTTTGTCTATAATGT GTGTTATCCTCAATTTTAGCGTCTATCTTCG >gi|3450629|gb|AI100668.1|AI100668 35043 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99M17XP 3', mRNA sequence GAGATTTGAAGGAATNGGGAGTGGATTTTNCCCAAGAACCCCAACGNTGGNAAGGATGGAGGATATCNCC CTTCATTAAGGATCCCTGATGGCTACTGGATCGAGATCTTTGATCTCAAGACTATCGGAACTACTACCGT AAACGCAGCTTGATCTCAAGACTATCGGAACTACTACCGTAAACGCAGCTTGATCTCAAGACTATCGGGA CTACTACCGGAAACGCAGCTTGAGGAAGTAGCGATTGCGCTATTTGTGTTCTTTTGCTCATTCCACCCGA GTGTGTGCATACAGTTAAAGAATTTTCATGTTTCATCGAATAATCGGAACAAGATGGTCGTTGTTTATCA ATGTGGTCTGTTTCTTGAC >gi|3450628|gb|AI100667.1|AI100667 35042 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99M14XP 3', mRNA sequence CCTTTTTNAGCTACCGATNTGTTTGCCTTAACCCTTCANCCAGCTTGAAGGCCCCGAACATGTCCCCANG TTGTTATGGAATTAAACGAGTGTTTGACCATCTGAAAATTCCAAGGGGAGGAGCCGATTCGAGACATGGA CTCAGAAGGTTCTATAGAAGTAAGCTTGACCTTTGGTACCGAAGTGACCCCATTGGCTCGGTAGTTTACA TGAAGAATTCAGCTTCTTTTTGAATTTTTGAATGGTTTCTTCTAAACACCATGTGAGAATAAGTCATCCA CATATAACCATACAATGTTTTTCTAAGTTTTCTTACTCTCAAAATTTTGTGTTCAGCTTGAGGTTAATCG AGGTATCCTAGTGGTTAATCGAAGTATACTTCTTC >gi|3450627|gb|AI100666.1|AI100666 35041 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99M10XP 3', mRNA sequence CTTTTTACCAGNAGNCCCCCGTTTGANAAATCTTCATCAAGCTGGNATCTGCCCAGGGAAAACCGCAAAG ATGCTACTGGAGAAGGCCCAAAAAGTCGTTGGAGCATTAATGAGTTCTTGAAGCCGGCTGATGGAAAGAG GTACAACGGGAGAGGTGGAGGCTCCCGCGGAAGAGGAGGTCGCGGTGGTCNTGNTGAAGGAGGAAACCAA AGGTATGCAAAAGAAGCTGCAGCTCCGGCGATTGGAGACACAGCTCAGTTCCCTTCGTTGGGCTAGTAAA GACCCCTGGTCCTTCAGCCTCGCTATCTCTGTCTTTCGTTTCTCTTTGGTTGAATTTTGTTAGTTTTATA ATTTTTTGTTACACTTTCTGAAGGTCTTTTCTGCGAAACTATTACGTTTTTTAAGTTATGAAAAAAATTA TTAAG >gi|3450626|gb|AI100665.1|AI100665 35040 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99I5XP 3', mRNA sequence TCCTCACANNGAAACGNCAGCCACATCAATGCATCAANACACATAAANGNGAGATTTACTACAAANGAAA GNGNAACNAAGAACGATATGGCANGACTCAATCAACAAGATCGGAGACGCACTCCACATTGGAGGAGGCA AACAAGGAAGGTGAGCACAAGAAGGAAGAGGAACACAAAGAAACACGTTGACGAGCACAAGAGTGGTGAG CACAAAGAAGGTATTGTTGACAAGATCAAAGACAAGATCCACGGTGGTGAAGGTAAAAGCCACGACGGAG AAGGCAAAAGCCACGACGGTGAGAAG >gi|3450625|gb|AI100664.1|AI100664 35039 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99F4XP 3', mRNA sequence CCATGCGGAAACCCCAATTTGNGCGTTCACTGCACGGTATGTCTTGGGGNCCCCCCNAATAGGGTAAGTC CATCGAGACACCAGTAAGGCCGCATTTNCCCCCGCGCTGAGTTCCAAGTGAAACTCTAGCCCGGAGATCT TAAAATTATATAGCAAACGAGAGAGAGAGAGAGAAAGCAGAAGAAGAAGTCTAAAGAAGAAGGTACTTGA GGCGTTTTGTGTTTATATATAAAACTCTTTCTAGATTTATTTTAAGTTAAATNTTCGCGGTCGCAGAGCC TGCCCGGTATCTTTGAACAACTCAACAACTTTGGTCTAAACCTTTCTCCTTTCTTTAGTCTCCAAACACA CAAAAATTTGATTATTTTTGTTGTTGTTGAAATACCCTTTGGATATTTTTATGACTTATTTAAGACATTT GGAGAAATTTTAT >gi|3450624|gb|AI100663.1|AI100663 35038 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99F3XP 3', mRNA sequence TCAGGAAGTTCCANAAGACCCTGACTTCTACCCGTAGCTTCCTTCCAGCGCTGGTCGTGAGATAGCCTCG GATTCCAAGCCGGATCTGAGGTTCCAGAGCCANTGCTGTGCTGCTTACCAAGAGGCTGCTGAGGCTTACC TTGTTGGTTTGTTTGAAGACCACTAACCNTTGCGCCCATTCACGCTAAGAGGGTCCACCATCATGCCCTA AGGATATCCCAGCTCGCGAGGAGAATCAGAGGAGAAAGAGCTTGAAGACTGTTGTTATGGTTTATATCTT TTGATTTAGTTCGTCAATGGAACTCTATTTCTGGATTTTGATTTGCGTTTTAGTAGTAATGGGTTCTTGT AAGTGTTGAGCTTTGGCTCGTTTTAATTTTCAGTTGTTAGGTACTTTGGTTTAGTTAGCCTTGAAGTGTT CGATGAAATACCCCAACGAAACTCTCTCCTGTTTAATAGAACTTATTTTCCTT >gi|3450623|gb|AI100662.1|AI100662 35037 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99E21XP 3', mRNA sequence TTCAGCCGGAGGATCCTCTGGATGGNCCCCTCTNGCTCTGCCACTTTTTGGNAGACCATGGNTTCNCCGG CTGATAATGAGTGNTAGATAATGTTAATGGAGANGCTGTCCATAGGAAAGTNCCCCGCTCTTACAAGCCC GGGAGGAAGAGTTTGTGTATGAGAGTTGTTCCCAGTTTTCCCAACAACTGCTGGATCCCATTGATGGCTC TTTCACCTTTGTACCTGGAAGTTTGAGAGATCCAAAAGGGAGTCAATTCGAAGTCAAAGTCGTAGAGTTT CCTCTGGAGTTACCGGACTACATCTTCTGAACTCTTTCTGGCACAAGGTTCGTTACTCTTTCAAGATAAT TTGTTGTATCGTTTGCTTTGTCCGTACAGCATGCAATGTCCTAATAAAATAAAGGTGTTGGATCAACTGG TTTACAAGTTCATGAGAACAGATTATTCTT >gi|3450622|gb|AI100661.1|AI100661 35036 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99D14XP 3', mRNA sequence GCGATCCATGGCNCCGGGNTACCCCATTGGCTGAGGCTTGATGAGTTCCGAAGACCAGNTGAAGGAAATT GGAGAGCCATCTGCAACCCCAATCCATTGCCCAAGATGTACCCAAGGAGCTGGTGGTGAAAGCCGNTGGT CCCAGGTGCCTCTGGTATGGACGATGATGCTCCCCCCTGCTTCAGGCGGTGCTGGACCTAAGATCGAGGA GGTCGACTAATTTGTTGGACATTGACCTCTCTCTTTCTCCTATCTCTATCTCTTTTACTTGCTTTTTTTT GATCTGTTAAGACTTTTTATGTTGGGCTTTTTTAAAGAAGCCCATTTTGTGGTGTTTTTTGGTTAGTACT ATTTTGAACAATGGTTGG >gi|3450621|gb|AI100660.1|AI100660 35035 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99C8XP 3', mRNA sequence GGTANGCTCCCNCACATGTCCCCNCCTGCCTTTCATTGCNCCCTCTTGCTGNCTTAGCCAAGAGCNCCTC GACGTAGTCTCTTCCAAGGTCGATGTTGACCGAATTGAACACTNTTGCTGAGGGAGTTTAAAGTTCCAGG CAATGCCCAACGTTTATCTTCATGAAAGAAGGAGAGATCAAGGAGACTGTGGTTGGTGCTGCTAAAGAAG AAATCATTGCCAATCTCGAGAAGCACAAGACAGTTGTTGCTGCTGCTTGATTTGCTTTTCTCTCTTACCT ATTTTGCTAAAATATGTTTGGTGTTTTAATAAATCCTTTGTTCGCCCGAGTCTTTTCACCTTAAATGTGC TCTTATGTGTGGTGGTGAATAAATGTTGTTGCAAACTTGATTACTCGCAGCTATGCTAATTGTTCGTTCA TGGTTATGTTT >gi|3450620|gb|AI100659.1|AI100659 35034 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99B20XP 3', mRNA sequence CTGGATATTCTGGGGTGGGGCCCATTCATTGGGGGCNGCGATAGCTGCATTTNTCCCCCAATTTGTCCTA AGGGCTTCAGGTTCCAAGTCACTTGGATCCTTCAGAAGTNCAGCCAACGTTTGNGTTTTTGCCNCNCAAA AAAAAACCTNTCATAATNACCACNATTNCAAAATGGTTGTGTTATTATGTATGTACAAAAATTGGCAACT TTGCTTGTAAAACTATGCNCTATATTTCTTCTTGTTTTTCTGTTTTCATTGTGGTGTAATACTTTGATAT GTGCCAATGCCAATGTTTGTGTACTCGGGAAAACAATTAATGAAAACCAAATTGTTTTGCCTT >gi|3450619|gb|AI100658.1|AI100658 35033 Lambda-PRL2 Arabidopsis thaliana cDNA clone 99B10XP 3', mRNA sequence CCTTTTCNATTAAATCTGACCCTNTTGACGTNTCCCGTTTACCNACCCACNNTTGGNATGGTTAACTCCG TGGGAAGTCACNACAGCCGNAGTTCCATGCAAAGTGCTCGTACCAAAGCTTTGATGTTGAGCAATGGCTT GCGTCCGATACATCGCCGTATGAGCTCANTGCTGTTCGGAATAACTGNCCAGTTTCGCTTAGGGAAAGTG TCGGTCGGGNCGGGCCTGAGATCCGGAAGACTCTCTCTTGGATCGTGTGAGAGTAGTGAATGAAATGTCA AATGTGTATGTGTGTGTGTAACTTGGAGAGTTGTTCTTTGTTGTCTTGTGAACGTGTGATGGCNATAATG AAAATGATTCGNTCGAATAAAAGTTCCGTTCTTTGTT >gi|3450618|gb|AI100657.1|AI100657 35032 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98O4XP 3', mRNA sequence ACGCCCCTTAGNCCCAAAGGGGGNTNATTTTCCAAAGGAAGCATTAATTATGCNTTATGGTAATNANCTA AATATGTGTATATGTNGTCGAGTATGTNTTTTCCTCGAATATATATGCATATTANCCCAATAATTGTTGT TGATCATGGTTTTTTCTCCCTTATTTTTCTCCTCTATATGTTTTACCACTTAATNCCTTGTTGGTTTGTG GGTAAAAAGAAAGATAATTATAAAAAGAAAATAAAGAATCAAGAGTAGGAGAGGGAAGAAAGTTGAGGAG TGAAAATTAGAAGTATAATTTATTGTTTTTAATGAGGTTTTTTACCTTGTTGGAGTAAGAAATATTTAAT GATGAATGTTGTGTGTTGTAC >gi|3450617|gb|AI100656.1|AI100656 35031 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98N1XP 3', mRNA sequence TCCTGNTTTTTNCNNCTNGGTCCCTNAGAGGTTCTCCATTCCGCTGTTATGANGATNCCTTACTTCTTCA AGNGGATCTACCCAACCCCTTGGAAACTTTTCCAAGGCTACATTCGATTGCTACAGAAGNCCATATGGGT TCCTTACACCAGAGTTCTGGAAAGAGACTAGATTCTCCCAGATCGCCGTACCAAGAGCACACTGATTTCC TGTCGACTAAGGCTGTTTCTGCAACCAAGGTTATCACTGAGGGTGAAGACCAAGCTTAAGACCTTCATGA GATGAGTTTGGTTTATAGGTTTTGGTTATCGCAAATATTTATCTTTCCGGTCTTGTTTCTTGGTTGTCTT TTATCAGTTTTTGATATTGGAGTTTCAGTTACAAGGATAATCATAATTTAGTTATGTTTGGCTTTTGTT >gi|3450616|gb|AI100655.1|AI100655 35030 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98N18XP 3', mRNA sequence CGGNCTACCCCNCGCGTCCGATTTATGCNAGAAGGGNATTNCCNCCNGGAATGTCCCCTCATCTTCCTCC AATGGNTCCTCCCCGCCAGTTCGANCGTATTTATATACTTTTGGGTCCCCTGAGCCAAAGGCCCGATCCA CTTGAGGAAATACAGGCACTGCTCAACAACTCTGTGCAATAATATCCATTTTTCTTTTTCTTTTTGGGTA AATGNTCATATATATAAGTCGATTGTTGTTATTTGGTGTGAGTTTGAATGTGATCCGTGTGCGTATCAAA TTTTGGATGGGAAATTTGAAACAGTAAAAATTTGTATATTCCTCGTTTGGGAAAAATGTATGTTTTGGTT AGTTATATGCAAAAATGTTGTTGAAGAAGTTTATACATAAAAAGTTAAATACAAAAAGATGGTAAGAAAA C >gi|3450615|gb|AI100654.1|AI100654 35029 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98L24XP 3', mRNA sequence TTGCCCCCNCATTCCCCGGTAAGCTTTGGGGGGNGGTNNCATTGGGAANATNTTGGAGAANCGCCCCCNA CGTTCAAGAAANCATTAAAGAAGTNTTTGGACTTTGCTAAGTCGAATGACTTGAGTCATCTTTTGGTTTA GTTTTTGTTATTATATAAGCNCAATAATAATAGGAGGGCACTTCCCCTGTTCTGAGAGTTTGTGAACATA TTACTCAGTGGTTTAAATCACACATATGTATTTGTTTCCCCAATCGTAGGAACTCAATGGTTTCAAATCT CATTATATAAACATAAAAATGAATAAAGGCATATTAAATTTGTCT >gi|3450614|gb|AI100653.1|AI100653 35028 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98K18XP 3', mRNA sequence CTTCCCCGTTTGAATTCCTCTGTGAGCCAAATCNCCAAAATGGGNCCACTCAAATGTTCTGNAACTCTCA TCCGAAGGAAGTACGNTCCTGGATCTCGTTTATGCCGTGTGTGCGGGAACTCACACGGGCTTATCAGGAA GTATGGTTTGAATTGCTGCAGACAGTGTTTCCGCAGTAACGCCAAGGAGATCGGATTCATTAAGTACCGT TAAAGAGGCCTTTGACTGATGCTTATAATACACAAACATGTTGGTGTTGATGAATTGGCCTTGAATCTTT TAAGTTGTTGTTGCATTCTTCTTTAAAGTTTATCTCTTATTTGGAACAATGATCTTTTGGTTTTGATTAA TATTTTGCTTGTTAATATAGACCATTTTGGCAT >gi|3450613|gb|AI100652.1|AI100652 35027 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98K16XP 3', mRNA sequence TGATATGTGAGTTATAAATTTATAACTGTTTTGTTTGGTTNTAACTGGTTCTCCAAGTTTGTTAGCATGT GCATGCTNCTNTATATTNCATTTTAATTNGTGAGGCTTTTNATGGGACAAGATAGTAGTGTTNCAAAAGG TGGCACATTACTTAAAAATGTTGTNAATTTTTTTGTTTGTNTGTAGCTTTGTAAGTGTGGTGCATGGTGA TCGATGTAAGAATTGTGTTTCTTTTGGCTTTAAANTATTTTCCATTTACTCC >gi|3450612|gb|AI100651.1|AI100651 35026 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98K15XP 3', mRNA sequence AAAAATTCCTCTACTTCATCCAGGCCNTAGTTCTCCNGTTTCTATCAAANCCCACCGCTCCCTCCGTCTC CACCGAGAATAACGACGNTTACGAAGAATCCGTGTTATGGTTGTTATGTTCNCCGTAATTCCAGAAATAT CTACCTTGTTCACAACGGCAATCACTGGCAATAACGTGAAGAATCTTCGAATATACGATT >gi|3450611|gb|AI100650.1|AI100650 35025 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98J7XP 3', mRNA sequence AGCTCANTAGNTCCCCATATCNTGCCAGCCNCTGGNCGGCCTCGGGNCACAGNATTANCGGAATGGGGAT NGACTTGTTTCGGNAAGAAGTGGATTGTTTCTTCAAGATTCTGTTATCGGGGAGAGACACATTACTAGAG NACCTAAGGTCGATGGGTGCATCAACCCTACAGGCAACATCGCCAAAAAAGGCTGCCGGAAAAAATTACA GAGGATTCTGATAAACTATAAATGTTTGTACAGATGGTTTTACTTCAAGTGTTCCATCTTCTTGGTATTG AATGTATTATTAGGTTTTTGTGCAATCTTAGTCGTTTGTATGAGATGCTTTGAAAGTAGTAGTTGTATAA GTAAAGGTTTTACC >gi|3450610|gb|AI100649.1|AI100649 35024 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98J3XP 3', mRNA sequence GGGCTTTCAACGNGACCGTNGCCCAACGTCGGCCCGNCCAAACTCTTCCATTCCAAATCAAAGGTNGTCG CANGTCCCGGNATCTAAAGCTTCGCATCAAGGTCNCCCCTTAGTGTCCTGTATTTTAAGACANTGAACGA GAAGCAATCTTTTAGTGTCACTGTTACAGGCAGCGACGTTGACTCGGAAGTCCCTTCGTCTGCAAATCTA ATTTGGTCTGACGGTACCCATAACGTGAGAAGTCCCATTGTTGTTTACATAATGGTTGTTGATGAGGCAT GAGCAATTCATCATCGTCGTCAGTCATCACAAATAAATCTTTATTGTCGTTGTAACGTTTCTTCATTTTG TGTTTACGTTATTTGATTGCTCTATGATGTTTCAGCTTCTTTTACTAT >gi|3450609|gb|AI100648.1|AI100648 35023 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98J11XP 3', mRNA sequence AAGTTTGGTTTGGCCAGACAAGATGAGCCACATCTNTACCGGAGGCGGTGCTAGTTTGGAGCTTCTTGAG GGTAAGCCACTTCCAGGAGTCCTCGCTCTCGACGAAGCTTGAAAANCCTCACGTTGGATTTCATCGCTAT TTTGTGTTGTTATATGTATAACAAGTCGTCTGGTTATCTTGTGACCAGACGAGCAAGCCATTATTTATCA GCTTGAGATTTTCGTCTACGGCTCTCTTTTTATGAGTTTTTTAGTTTGGAGCCTTTTTTTAATAATAAGA GATGAAACTCTGATTGACGAC >gi|3450608|gb|AI100647.1|AI100647 35022 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98I13XP 3', mRNA sequence CCCCTGGTTGGGCTGTAAAATGGCNNCTGGNATTGATGGCCCCCGGNCGACATCTCNACTNCCTACTCCA ATAGNTTTAAATCCCGGCGGATGTGGCTGCTACCATGGACAGCTTCCGGAAACGCTCTCAGAAGCTGTTG AAGCTCTGGACAAAGACAAAGTTCTCCCACGATTTGCTCGGACAAAAGCTTTTAGTTGCCATAAAAGGAG TCCGTAAGGCTGAGGTCGAGTATTATTCGAAGAATCCGGATGCATATAAGCAACTCATTCACCGATACTA ATCCTTTGAGCATCTCTATGATGATTGTTGGATCATTTGGTTTTATTGTGGACTTTGTGTCACATGAAGG GTCGTATTTGCAAAATACTTGACATAAAGATGTGGTTCAGAAAATTAATAAACTAAATTTCAT >gi|3450607|gb|AI100646.1|AI100646 35021 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98F3XP 3', mRNA sequence TTGACCNGGGGAATCGGAGGNGGGGAAGGTTCNCCNTNAAAGAGNCTTTTAAAGGGNCCCNTCCTTACCA TGGCTCATCCTCTTAANTTAACNCCTGTCACTCGACAACCACCCTTGACTTGGGATATGACACTGAATTT GCAGACAATAAAAATAGATTTCNCTCTATTTTTTGTTTATGGGTTTCCCGGTATTAGTCTGGTTTGGCAT TTGTAGAGGAGGATGTTGGGGCAATGATGTTGATCTTGTTTCTCGAACAGACCCTCTGTCGTTTTTACAT TTAAATGGTTAAATTATTTTGTAATTCAGACTTGAGT >gi|3450606|gb|AI100645.1|AI100645 35020 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98F23XP 3', mRNA sequence TAGGCCTTGCCAATTTNGCCATCGGATCCGGTTCCGNGATTAGATAGCCCCCCCTAGAGGACTCCATGCC GTTGACCCGGAAAGCTATCGTTCCANACCGGGTNGGGCCAGAANCTGAGTTTTGTTGTTAGGGTTAAGAC CCACAGAGGTGAAGTTGTCCACCAGGAGCCGACAAATGTGGAGACTGGTCATATGGTTTGGTCAGATGGG AAACGGAATGTGACAAGTCCCTTGGTGGTCACTCTTCAACAACCTCTTTGAAGGGTTTTAGAATCTGGTG ACCGGGAAAATTCTGGTCTCTGTTTGTTGTACTAGTGAAAAAGAAAGATCATAAGTTGTTGTTGTCGTCG TCTATGATCTTTGTTGGTGTAATATAAATATGTATCTTTGTTTTGTTGTTAAGAAAGATAGAGCGTCTAA AG >gi|3450605|gb|AI100644.1|AI100644 35019 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98F21XP 3', mRNA sequence CCTATNCCCCACTGNTCNTTCCACTTGCTCCTCGAAGAACAGCTGTTTCGTCGTGCTCTTCNCCCTTTGG GACTGATTCATCATTTATTTTATGTTATGAGCAATTGTATTCNCATTGTTGTATTTGCATTATTGTATAC TTTCTGCTGATNTCAAGAAAAAATCGTTGGTTTATGTGAGGAATTTATTTATTTCGTTTAATTTGTACAA TTGGTAAAATNTTNCAATGAGCAGGTTTGGATTCCGGACC >gi|3450604|gb|AI100643.1|AI100643 35018 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98E6XP 3', mRNA sequence TCCAGCCCTAATGCCACTGACACAATCCCCTTGGTGAGAGAATACGCTGATGGCACTCAAAAATTCTTCA ATGCTTTTGTGGAAGCAATGAATAGAATGGGAAACATTACACCTCTCACTGGAACTCAAGGACAAATCAG ACAGAATTGTAGGGTGGTTAACTCCAACTCGCTGCTACATGATGTGGTCGAAATCGTTGACTTTGTCAGC TCTATGTAACATAACGTTGTCTCGATATATGTGGCAACCAAAAATATGTTTTATGAAATAAAGTGTTCTC AAAATGTTTATGAAGAACATTTCGTCTT >gi|3450603|gb|AI100642.1|AI100642 35017 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98C2XP 3', mRNA sequence CGGTCGACCCCACGCGTCCGCGTCTTCTTCAACTCCCAGAGAGAGACCGTAGCAAAACAGGGCTTACCGG AGCAGAACGGAAAACCCCATTTCGAAGCTGGAGATGATCGTGCTAAGGAGTACGTCAGTCTCTTGAAATC GAACGATCCAATTGGATTCAACATTGTTGATGTTCTTGCTTGGGGTTCTATTGGACACATCGTTGCTTAC TACATCTTGGCTACTTCCAGCAATGGATACGACCCAAGCTTCTTTGGATGATTCGTTTCAATGTCAATCT CTCGTATATGTATATGTATATGTTTGACTTGTGTTGCAAGCTATCTAATCTGTTCTCTATCTCTGTTTCT TCTTCTGTTGTTGTTGTTGTTGTCTAAGACTTGTCCCTCTTTTTGCAAATGTTTTATTTCTCCATTTACA AAGATTGGTTTGCAGAGTTTT >gi|3450602|gb|AI100641.1|AI100641 35016 Lambda-PRL2 Arabidopsis thaliana cDNA clone 98B15XP 3', mRNA sequence CATGGTTGATGNCATATCCNCTGATGTTGCTCACCCAGATCAGGCAAGAATCTTGCCCNTGAATGCCTCA TTTTCCCTCAAAACTGNTGGACACTTTGTTATCTCAATCAAGGCCAACTGTATCGACTCTACAGTTGCAG CAGAAGCAGTCTTCCAGAGCGAGGTGAAGAAGCTGCAACAAGAGCAGTTTAAGCCAGCAGAACAGGTGAC TCTCGAGCCGTTTGAGCGTGACCATGCCTGTGTTGTTGGTGGTTACCGCATGCCGAAGAAACAAAAGACC CCAGCCTCATAGAGGAACTGTGGACAGTAGTGCCTGTGTATTAAGACTTATTTACTGGGTTTTGTTTTTA TCTCCTTGCTTGTTGTATTAAGCTAGAGATGGATAATGCTTTTATGTCTCATTTGGAAAATTTTATCCTC GTTTTAGAACTAATATATATTGATGCAACATTTTCGTCC >gi|3450601|gb|AI100640.1|AI100640 35015 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97P6XP 3', mRNA sequence GGAAAAAGTCCCTTGGCCCCCGGCTTNATCCTGCCTGGGGGGACCATTTTGGGGTATGGCCATCCGCAAA AAGNATCCAATTGGAGGTGCAGAAAGGCTATCTTCCATANTTCGGGGGACAATTGTCCTTCCCCCCAACA GGTGCCGCTCATGGTCTTCTGTGTACGGAAGGGGAAAAAGGATGGATGATGGGNTNCCTCTATGTCACTT ACAGCGGAGAAACACATTTGGATTTGGATCTCCATAATAGAGACCTCTTGCTGGATATTTCATTTTACTC CTCTCTATTTTCACCAAATATTTCATCTTCTTATTAATTACTAAGCAAGCAAGCCACCTATGTACTTATT CTCTAAGGACCTTTGGTCGGGCGTTAATATGTACAGAAAACATAAAATAATGTATATAATCTTCTTTC >gi|3450600|gb|AI100639.1|AI100639 35014 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97P23XP 3', mRNA sequence CCTTGTGATGGAGCCATTNGTGGTTGATGTCCCGGAGGGAACCNCANAGGATGAGACTTGTTACTTTGTT GAAGCTTTAATCAAATGCAATCTTAAATCTTTAGCTGATATCTCTGAACNTCTTGCGGTTCAAGNCACGA CAGAATCGAGAGTCTAAAGATCAAAGGAGTAAGAAACTATTGAATCAGAGAGATTTTGGTTGCCATGGAT GAAGCTCTCAAAGGGAAAAAGAGAGAGTGGGTGAGTTTCTTTGAGGATGGACAAGGCAAAAAAAGTATCA TCATTTATCCAGTTACATAATAAGTTTCTCATTTGCTATTTTTGGGGTCATTTCACTTTCAAACCCTCTT TTTAATTTCATGTGTCTAATTTAATGAATGTGTTTTTGGTTT >gi|3450599|gb|AI100638.1|AI100638 35013 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97P17XP 3', mRNA sequence TGCTGCTGNTTATGGAAGGAAAGAGTGTGTAACCCNCCNCCTAGAGAATANTGCTGCAGTACCTCAGCAA AACTTGGACANTAAAAANCCCATTGATGTGGCCAGGCTAAACAATCAGCTAGATGTGGTGAAACTACTTG AGAAGGACGCTTTCCTCTGNGCTGCTTTGACTCTTGANGGATATGTTTCTTCTCTGTCATGTAATAGTGT CNCAGAGTCTGATTGCANCCTTGTCTTCTGNGGGGGTTTTCATCATTAAATCTGGAAAAAAGATGGAGAA AATGGATGTTTATTATGGTTTTGTAATGAATTATTTTCTTCTTGAATTGGTTTTTTCTTTTGGCTCTT >gi|3450598|gb|AI100637.1|AI100637 35012 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97P15XP 3', mRNA sequence CGTTCCTTTTGGNGGAATCTGAAGGNGGTNTCAAGNCCAAATTTGTGTGGAAGTGACTACCANCTCAACT TNCCTCGCTGTTCATAAACTTTGGAGGGNCCACTNGTAAGATCTGTTTCGACTTNCGGAATGTCTTTTCT GTTGGTTACTAATAGCTGAAATCATGGTGGTATGTGTTGTTTATTATATTCTGTTTCGACTTTCGAAAAT GTGAATGGATTCTTTCATGTAACACAAGACCAG >gi|3450597|gb|AI100636.1|AI100636 35011 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97P11XP 3', mRNA sequence TATTGCTNCATGTGTGCTTGCTCTGCTGCNACCAGTAAACGTAGTTGATGGCTTGAAAACCGCAGANGCC AACTGAAAAATGCCCCGCTTTGCCCGTGAGGATGGGGGTTTATAAAGGTGCTGTTCACTTGGATGAGCTC AATATTTTACTTAAGCGAAGCTGCAGAGACTATTGGGAAGAAAGGCGTAAAACAGAGAGAGCAGAAAGGT TACAACAAGCAAAGGAATATTGGGATTACCAATGCCGAAGCTTCACTGGAATATGATATAGTTTGATTTG TGGCTTCTTAAGTGAGATTCTTGATTTTGATAATAAGATAGTAAAAATAATCTTAATTTTGATTTGCTTT CCTCTGTGAGTGTGTTTCCTTGCACAGAGAGTGACGATTTCTTTGTGAAAAAACTGAAAACTCTTAAGCA TTAAATATGGTTTATAAGTTTGCAT >gi|3450596|gb|AI100635.1|AI100635 35010 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97O24XP 3', mRNA sequence TGTATCTTCCTCCNCCAGCTTCATGCATTCAACGTCNCGAANCGAAGANGAAGAAGCTGGTGAAACCCAA GAACAAGGGGAAGNGGANCCCAAAGAAGCTGAATCAGAGACAAACTCTAGCAGCTCCACCAACAGGAGAG GTCGAGGGAGATGGAGAGGCAGAGGCAGAAGCAGAGGCCGGGGNCCTACTGTCAATGAAAGGAAGCCGAA TTCGCAAGATCCAAGAAAACCGACGAGACAATGGGTGCAGAGAGCCAGAGAAGGAGACAAATAATTTATG CTAATCTTGTGTGATACATCAAACTCAAACTCAAACACAAGATATATATATATTGTGAGCATATTACCAA CGAAAATACATTTCTGTGAGC >gi|3450595|gb|AI100634.1|AI100634 35009 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97O20XP 3', mRNA sequence ATTCCCGCTGATGGCTATGTGGCATTTGCTGATGATGTTGCCTTNCTAAAAGGTGCTTGTGGCAAAGCCT CTTGCGTCTTTCCCCTCAAGGCTGTTTATTCCTCGNCCGCCATTNAGGTGGNCTTTAGGAGCTTCGAGAC CCNTAAGAACCAAGATCCACTGCAGTTCCCTGCTAATGGGGGAGAAATTTGGGGAGCTNCCTTCAAGGTG GAAGGAGCAACAGTTCTTGCAGATTGAAAATGAAAGAGAAACACAAAAGAAGTTTCATGTCTCTTAAAGC TCTCGAACTGTAACAGCACAAACAAAAAAAAATATGTAGGAAAAACAAAAAGCTGTTCTATGAGTACTTG AAGCTATCAATGGTTGGTGATAATGTGTGTAGTGTTGTATCTCTCTTATGTCTTATGCTTCTTTGTACAG CACGTGTGTGTCTTCTGGTGTTAT >gi|3450594|gb|AI100633.1|AI100633 35008 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97O14XP 3', mRNA sequence TTTTCCCTCGTACGGGNCCATTGGTTCCATGGCACCCNTTTGCGGTCCCTTNCCTCTACTACAATTCCCA TCTGNTANTCTCGAAAACNCCATTTGATAGACGTGCCAGAGATCTTCANCTTGCTTGATTGGGAAAAGAA GAAACGACTCTTTCAAGCTCGCTTACATTATCCTCACTCTCTTTCTCACCATTTTCTGGTTAATCTATTC AACACTTGATGATTACGAGGACTGAATCACGCTTGAAGATACACCCCTGTGACAGGCGACAACAAACGGT TTGGTCAAACCCCTCTCTTAGTACTTGACACCGCGCTTGATACAATGGCATGAGAAGGAAGGCTTTTAGG TTATGTAAGTTAATTAATGTGGCATTAGAGAGCTGTGTAAACCAGATTTTATAGTCATTAGAATTTCATT GTGGATCTTTGTGGTGAAGCCAAGCAGTGAATTGTTAACCATGATTGGAACCCTCTAACT >gi|3450593|gb|AI100632.1|AI100632 35007 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97O10XP 3', mRNA sequence GAGGNCAAAACTGATGCCGCTGAANCCAGCGGTTTTNCGTTNCACCGCGAGTCCCCTCTTTATNCCGTTG CANCNCCTTACTNGACTTAGGCATTNATATATATTAATGCTTTGGTATGTTATGTTGTGGATCTTTCTCT TCATGGATTCTGGTTTTATATATGTGTTTTTCTTCTCTAAGTTGTTTTCGTTAATTGTTATGTGATTTTA GTTATTTTAGTCAAATCATCTTTGCTCT >gi|3450592|gb|AI100631.1|AI100631 35006 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97N9XP 3', mRNA sequence GGCTAGTNCCAGGCTTACTTAAACGTTGGGGAAGTTNCTTCTCCTATTGCTAAGGCCNTTAGGCAAAGAC TTGCAGTNCCGATGCACGAGCTGAGCCCGCAACCAATCAAATTCAACCAATCCGACCAAGGTGCGGGAAC ATCTCAAGCTACTCAGAAATCAGCATGTTGCGGCACATAAAAATTGGGTCCACGACGCCTGTCAAAGGAG AGAATCTGGCTAGTGAAAGAGAAATGGTATTTGGAAAGAAAAAATGAAAAAGGAAATCAATCTTCTTTTG CTTTTCTTCTATATGAGATGGTGTTTCTACGTATTCTTTTAAGATTCTCTCTTTCCCTAATGGTATAGTG TGACTGTGAAGGACACAATTCGTATTCCATATTTCTGGAATGGATTCTCTGACATCAGATTATGACTTAT GATAATATCAGTTTATCTC >gi|3450591|gb|AI100630.1|AI100630 35005 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97N7XP 3', mRNA sequence GGCTGCTNGGCCCTGGTNCCAGTTTTTCNCGGGATTCCAGCCCCAGCCGGGGTNNCCAGGAACCACCGCG GGGGCCNCAACCANTGGGTTTCCCCCTGATCATAACANCTGGGCGGGGATATTATCTTTNCCATTTAGNG GATCATCATCAGATTTTAGCTTCAAGGNCCGGTTTTGTGGTTTATACATAAGTTATAGTGACTTGATTTT TTTGTTTTGTTACAAAGTTACCATCTTTGGATTAGAATTGGGAAATTGAATCTGTTTGTATATTGTATTA TTTGGAACATTGTGGATGCCCATGGATATGTTTCTGTTCAATTATTTTGGTTTTGGGTAATGAAATTTGA AACCAACGAAAAACC >gi|3450590|gb|AI100629.1|AI100629 35004 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97I5XP 3', mRNA sequence TTGATNCTAAAGTTACCCTTTGNTNGNGGAGCCNGGAAGATCCAAGGGGNTTTGGATTTGNCCAACTCCA ATGGATGAGGCCCTTGCAACNTGCTGCCATATCAGAGATGGCCGGAAAGGAACTGAATGGTCGTCACATC CGAGTGAATCCTGCTAATGATAGACCAAGTGCTCCACGGGCTTATGGAGGCGGTGGTGGATACAGCGGAG GAGGTGGTGGTGGCTATGGAGGAGGAGGTGGCAGCTACGGTGGTGGTGATGGTGGTGGTTACTAAACAGA GGATGTGGTTGTGAAGAAGAGTTAATGGTTCTGTTTAGTTGGTTTCTTCTATTGAATCTTATGTTAGTAC AAAACCTGAATGGGATTTGCTGAAAACTCATTACTCTTTTTTTTTTGGTTACCAATCAATTTGGTTGAAA TATTTTATTGCC >gi|3450589|gb|AI100628.1|AI100628 35003 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97F17XP 3', mRNA sequence GTCTTTACCTTGGTCCCAGCTNCTTGGCTTTAATGCCCAACAGGNTGNATAANTGATANCCCGAGATTGG AGTCCNCTNAGGGAAAGGACTTGAAANCCATTGGCCGATGGGGTTCAACTGTATCGGATGCCCACACAAT TCTGGAACTGTGCTCGTGCCTGTCCAAAGGGATTGACCCCAGGGAAACAGATCACACACATCAAGCAGCT TCAGAAATCTGGTTGAACAACAAATGAATCAGGCAGTACCTAATGGATTTTTGATTCTAATAATCTGCAA GAAACTCCAATTTTGGATTCATTCTTGTATTGCTGTCACAACTATCAGAATTAGATTATTTTGTGGTATA TCTTGATGAATTTTTTTTGCCTACAACAAGCAATAAAACTCTGCTTTTTTTATC >gi|3450588|gb|AI100627.1|AI100627 35002 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97F13XP 3', mRNA sequence CAAGAAGGTTTATTTCCCNCCGTAACAGCTTCCTTTCAAACAAGNAAGGATTTGGGAGATTCCTGTCTCC ATCCCCATTCCTCCTCTTCCTCGGGCTACCGGTACTGTCTCNAATCCCTGGAATAAAAAAACAAAAAGAA CAGCGTCGTATATGAATCTGTGTCTTGTCTTATTTATCATGTCCCGGAGAGAGTTCAGACGACAGAACTA GGGGCAATACAAAGGGATGGTGAGTCTCTCTGCTCCTGTCGCTGTCTCTTTCCGAGACTATTTTTGGCTT GCTTGCTCTTTTTTTTTTTTTGTTTTAATAATTTGGTTCAGTGGAGACTACTAATAAGTTTTGTTGCTTG AAGCCAGTTTTTGGGTAAAACATCATGGTTTTGTGTTTGGTAATGAATTATTATGTTTGCGTTAACATAA ACATC >gi|3450587|gb|AI100626.1|AI100626 35001 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97E4XP 3', mRNA sequence CCATGGAACGTCCTCTACGGAGGGTCCNCCATGTGGGTCAAGGTTCCCATTGATCCCAATGNCCNACATA NTCTCACACTACTTATACTTCCTTGGCCTCATGGGTNTTGGAAGAGAAGACNCGGGGCCAAACGATGNGC TCANTGCGCAGAACAGAAACCTTTCAACCCTTCAACTGTACCTTCCTCTTCCTCTTCGTAAGTCTTATGA TATATCNCCGTTGCTCTCAAGTCTCTCTTGCTTAATGTTACGTAATAAGTGAAATTGCTTGTGGTAAAAA AGAAGAAGTGTGTTTTTGTCCCTCTAGNACTTNTAATGCAAACAACATTACATTTTATATTTTTCTGTAT GTAAAACCATATTTAATTATTGTATTGG >gi|3450586|gb|AI100625.1|AI100625 35000 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97D21XP 3', mRNA sequence TGATTTCCAAGGGATCCACCCTTTNGTTGANGGAAAGAAGATTTCCTTGTGCCGCTTATCATGGNCCCTT AAGCTGTTACTTTAATTGGAGCTTCGATGCTTTCAATTCGGTGCAAAACATAAGAGTCTTCGTTCGATTC CTTATCGGCGAGGATTTCTTACCGGAATCGGCGCTCAACGGTGGAGGTTGTTGCCGGAAAAACTTGTGAT TACTCATCAGGCGTGGGACGTGGTTTAACCGGTTGTCGACACGTTTCCATGGATGGAGTTTAGATTGAAA TTCTTCTACAGAAGTCGGTTATCTATTTGGTCTTTGTTGGCTATTTCTGTAAACCTGCTGTTTGGGCTTT TGTTAAAGCCTATGTATGATATTGTGA >gi|3450585|gb|AI100624.1|AI100624 34999 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97D19XP 3', mRNA sequence CGGGACNTCGGAATCCNGGTTTTTGAAGGCCGAGGAGGAAACCGTTTGCCCGAGCTTTTTGAAGGNAAGC TGGCCGTTCCCGGNACNTACAAGGCCCAANTCGCTCCCAGATCTTGATTGANCCAATGGCAAGNCNTCCG AGGAAAGAGTCTTCTGCTAAGAAATGGCCCAGCCTCGGTTTCAAGTCTGAGGAAAAAATTATCATATAAA ATAAATCATCCACATATATATTCAATATTTTATTTTATTGTTATTGTTATATTTTTTATCTGATCTATTT TCTGTATCATAATCTGAGGTTGATGAATTAATTTCATGTATAGTGTTTTTATTTGAGTTTGGTGAAATAC TGCCAAGATGGTGAGCTGTTTGTTTGAGTTTGAAATTTCTTTAATTCAATCACTTTTTTCTTCTTCTGAT >gi|3450584|gb|AI100623.1|AI100623 34998 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97C9XP 3', mRNA sequence TTTCCGGACTCGGGCCATCAAGATTGCNCGTGCCTTCNCCTTCATCGTGACCACCTTAAAGGTTTTCNCG GTNCNTTAGACNCGGCTGAGAAANNCNCCGGAACCGGCGGAAAGAAGCGAGGACAAGCTCAGCTACGTGT TTACAATCTGGGAAACACGTCCCCCGNTTCCGGTTGGGAGATTGGTCTCGATCTTGGAAGGATTGTTAGG GACAAAAGCTAAGAAGCATCTTATCAAAATGCCAAGAAACGGTGACGTGCCTTACACGCATGCTAATGTG AGTTTAGCGTATAAAGATTTCGGGTACAAACCGACGACGGATCTCGCGGCGGGGCTGAGGAAGTTCGTCA AGTGGTACGTTGGTTATTATGGGATTCAGCCGAGGGTAAAAAAGGAAACTTCTCACGCCGAAGATTCCGC TTAATAATTTTCTCTCTACCACCATCTCTCTCATCATCACATGCTTGTTTATTTTTCTTAC >gi|3450583|gb|AI100622.1|AI100622 34997 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97C6XP 3', mRNA sequence CAAGTTTGGCCACNTCGTTCCNTAGGGAAGGTGCCGTCAANTCGCGTGGTTCNCCCAATCCCGATCTTAG CCCCTATGGGAAGGATCCCCGAGCCCCGAGCCCATCCATTGGACCGTTTTATTAGGATTCCGCCGACCAT CCCTTGAGGTTCGGACCCGAGTTCGGGAAGTCGATGGTCAAAATGAGTCTCATAGAAGTTAAGACTGGAT CAGATGGGGAGATTCGTCGGGTTTGTTCCGCCATCAACTAAGATTTAAAAAAACACAAATGTGAGCTTTG TTTTTCATTTATGAATTCGTTAATTAATAATCACTTGTTTTAAATAAAAGCTTGCTACAGCATTTTGTGG TCGATGGTTACGTTTTGATTNCCAAGTGTAAGATTGTACTTGTAAACAAAAAATGTATTATATAAAAGTG TTATTTGTTT >gi|3450582|gb|AI100621.1|AI100621 34996 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97C5XP 3', mRNA sequence AGAAGGAGGGGCTAACCCGTGGAGTTCCGGTCCTCGCAAGCTGCGGAGGAGAAGAANCCANCCTTAGAAG AGGAGAAGAAGACGGCGCCNNTGGAAGAGAAGAAGCCAGCTGTGGAAGAGGAGAAGAAGCCTGCCGTGGA AGAGAAGAAACCTGTGGAGGAGGAGAAAAAAGAAGTTGTTGCCGCTGTTCCGGTGGCTGAAACTCCTTCG ACTAAGGCTCCCGAAACTCCGGTGGTTGAAACTCCGGCCAAGGCTCCGGAAACTCCGGCGCTGCGCCACA AAAGGCTTGAATTTTCTTCATGGTACATTTTTCTAAAAAAATATTGATTGTCTTTGTGTGGATAATTTAT TTTCTTTGTTTATTTGTCTTATTATCCATGTGAATTTCCTCTATAAATTAATTTGCTTGCTTGAATTATA TATTCTTATGATC >gi|3450581|gb|AI100620.1|AI100620 34995 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97C1XP 3', mRNA sequence TAGACGGAGTNTNAGCCCANTACAAAGCAGATTTGAGGNCNATGGCTTACAAGTCTTGGGTNCAGAGTTT GGGGANTGANGGGTGCACAATGGAACAGCTTCTCTGGTTGTCCAGTNCCCAAGAGAACCTTCAAGTCCCT AACTCCATCTACTATGTCGCCTGATTAAATCTTATTTACTAACAAAACAATAAGATCAGAGTTTCATTCT GATNCTTGAGTCTTTTTTTTCTCTCTCCCTCTTTTCATTTCTGGTTTATATAACCAATTCAAATGCTTAT GATCCATGCATGAACCATGATCATCTTTGTGTTTTTTTTTCCTTCTGTATTACCATTTTGGGCCTTTGTG AAATTGATTTTGGGCTTTTGTT >gi|3450580|gb|AI100619.1|AI100619 34994 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97C19XP 3', mRNA sequence GACGATTCCGTTNCGNTTCGNGGAAAGCTTTTTGCAGAGTCANGGGCCAAGGTTCAAAGGCCGGTTTGCG AAAAGAACNGANACAGAANACGACGACATTTCCCTTAGTCATGTTTATGCTTCAGCAGCACNCGCACAGT ACGGTNTCGTACCAACGTTCTGATTCGAATCTACGGTGGATAAACAATCAACCTGAAGACTTCATNNCCT CCACCGTTGATTTACAGTCGCGCTGTATAATAAGTATAGTGAGTCTTACCGTAGACAAACATCTTATCCT CTTTACCGTTTTAATTACTTTTTTTTTACCGCGNTCTCACTGCCACTGTAACTCTTTTTTTTTCNCTTCC CTATATATGTATGCTTATTTTTATTTAGAAAATGTTATGAAATC >gi|3450579|gb|AI100618.1|AI100618 34993 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97C10XP 3', mRNA sequence CCTTTAGCCAATACTATGTGCCCTTTGCCAAAGAAGNACGTNGAGCCCGCAGGAAGNTTCTTTAACCCAG GTTTCANTGCTCAGTCCACCNTGNTTGTGATNCCNCCCNTAGAACAAACCATGGGTCGTAAGTGAAGCTT ACATTGAGTCGAGTGGTCTAAACAGCACTTGTAATATTGAGTCGAGTGAAGCTTACACNCGTTGTGAAAA CAAGTGTTTCTGTGGAACTCGAATCATGATCCTTGTTTTTTGCTTACTTTTTGAATAAGCCCTCTCTGGA TGTAATTTGTCGCGTGTCTTTCTTTTTTTTTATCGAAAAACAAACATATGTATATCTTTATTGTACGNAT TTGTTTTGAC >gi|3450578|gb|AI100617.1|AI100617 34992 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97B9XP 3', mRNA sequence CCTNCCTGTGNAATGATCCCCCCNGTNCAATCTTGNGGACCCNGGGAAGGTTTTCCNCCACCCTTATCCC AACCATTAATCTACCAAAGGAATCCGCATTCAAGNCTTTGTAGTGTCTGATTTCTCCGACAAATACTCAA AGTTCTTGGAGTTTGTGCTTCCCCACATTAGAGAAGGGAAGATAACNTACGTGGAAGATGTAGCTGATGG GCTTGAGAAAGCTCCCGAAGCTCTTGTGGGACTCTTCCATGGTAAGAATGTTGGGAAACAAGTTGTTGTT GTTGCTCGTGAGTGAAACTATGTTTGATACTTGTACTTTATCCAATTAGAGTTTGTGTGGGTGGTTTTTG TTTTATGGATAAAGAGAATGTTTGTTATGGTTTCGAATCAAATAGATACAAAATTCGGTT >gi|3450577|gb|AI100616.1|AI100616 34991 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97B20XP 3', mRNA sequence CCAATTTTCNTCTTANAACGGATTNCGCATTCCAGGGCTTTGGTAGTGCCCTGATTTTCTCCGACAAATC CCCAAAGTTCTTGGAGTTGGTGCTNCCGCGCATTAAAGAAGGGAAGATNCCGTATGTGGAAGATGTAGCT GATGGGCTCGAGAAAGCTCCTGAAGCTCTTGTGGGGCTTTTCCATGGTAAGANCGTTGGGAAACAAGTTG TTGTTATTGCTCGTGAGTGAAGAATACTTATTTGGGAGTAATGTCTTATTGCGCGTGAGTGAAGAATACT TATTTGGGAGAAATGTTATATTTATCCAACAAGAGTTGGTATGTCTGTTGAACCCAACCGTGAGTTTTTG GTTTATGAATAATAATAATTATAGT >gi|3450576|gb|AI100615.1|AI100615 34990 Lambda-PRL2 Arabidopsis thaliana cDNA clone 97A11XP 3', mRNA sequence GTTTCCCTCTATGNCCAACATTCCGGTTATTTCCCACTTCTCGCCATGTATGTCCTGTCTGTAATTCCAT GGATGATTGATGTGCATTGNTGGCTAAGGAAGAGGTTAGACAGCNAAGACAAGGAATAGAAGAGACTGGG AGTTTGTTGGTCTGTATGTGTTTGTCAGATTGAAAGAAAGAAAAGAAGAAAAGGGTNGTGAAAGAGTAAT AATGGGGAAAAAAACAAATGGTGATGTGAAGAAGCTTTGTTATTTGCAGAGCAATCAATCAAACAATCAA AGGAGGAGGAAAATAGATGTGTTTGGGTTCATCAGGGAAATGTGTTTGCAGGATGTTGAAGTTAACAACA AGCAAAAGCTTTTCCTGATCTTTTTTTTTTAATATTCTTATTACTATTATTATTGTTATTTGTAATTGGA TGATCTCTTGAGGATATCAAATTTGGATTCGGCTGTTT >gi|3450575|gb|AI100614.1|AI100614 34989 Lambda-PRL2 Arabidopsis thaliana cDNA clone 96P12XP 3', mRNA sequence GCATCNCATTGGTCTATTTTTTCAGGCTGCTATATCCCGTGGTACTGGCCCATCCTCATGCTGGGAACTT GTGGTTTCTTGCATTAAGGCGGTACTCTATTCTATCGTAAGGCTCATCTTTTCACGGCGAGAAAAGCCAA GGCAGAGCTGAATAGCTTTTACTTTTGATGAANTTACAGCAGGAATCCAATCCTTGTGTATATAATGTGG TTTTGGTCAAAGAGGCAAACCAGTGAACCTTACCTTCACCTGTATTACTACCTACAGAGAAGATAAACTC CGTTTTGTGAAAGATCCCATGGAAAAGCTTTTGACTTGTTTTGTTGTCATTGGTAAAATTGTTATTTT >gi|3450574|gb|AI100613.1|AI100613 34988 Lambda-PRL2 Arabidopsis thaliana cDNA clone 96L18XP 3', mRNA sequence GGCCATGGCTGCTGCGGCTGCTTTCTTNGCNTCAGNTGATTCTTCTTACATCACTGGAGAAACTTTGGTT GTCGCTGGNGGAATGCCTTCAAGACTCTAAACAATTTCACATCAATAATAGCGTAAAGAATGCAATCAGG GTATCAAGTAAGTAGAGATGTTTTTTTTAGNGTTTTCAACTAAACAAGACTTTAAGAAACGAAAGATGTT CCAATAATATCACGAGGCCATTGGATACTTGTTGGTCTTGTAAAAGATAATTTCTTCATC >gi|3450573|gb|AI100612.1|AI100612 34987 Lambda-PRL2 Arabidopsis thaliana cDNA clone 96K23XP 3', mRNA sequence CCCTAAAGGGCCGTTCCAATATTTTTTCNGATCCGGGNACCTTACCAGGTCCCNCCNTTCCCTTGGTATT AAGGACNCCATTTGGTNTTACANCTTNCACCANAAATCGAATCATAATCATGGCTTCAGATATCAATTAA CTATTTCCATATTGATGCATCCGAGATGACAATGTAATGTGATCGAAGGTGTATGTGAGAAAGAAACTCT CATTTACNGTTTCCTATAATTTTATTTAAATATTGAATTAAATATAAATAAGAAATTTTCCCCTTTTTTG ACAGATACATAAGGGCNTGTACATATAGATATCAAAGAAAATAGAAAAAAATATTAAAAGTTCCCTTTTT GCTTCAACCCGTCAACTAAAAAAAGGGTATAAAAGGAAAATAACAATAGTTGATA >gi|3450572|gb|AI100611.1|AI100611 34986 Lambda-PRL2 Arabidopsis thaliana cDNA clone 96K12XP 3', mRNA sequence CCAACAGGTTTTGTTTTCGTGCNACCGGAGTNTGACCCCCCAAGNATTCCCTGAATCAGGTTTCTCTATG GGATGCCATTATTCCTGCCCAGGGAACATGCCAAATNCCGGATTCAAGTCTCAAACAAGTCCCGTTTCAT CGATCAGGGACAGAATCTTCGGGGCAAAGACTTCAACTTGACATTACACTGGCATGTCATGCCCAAGACC GGGAAGATGTTTGCTGACAAGATAGTCTTGCCTGGTTACAGTTTACCAGATGCATACAGATGATGAAGAT TGAATAAAACATCAAACCTAGTCCAAGACTTTTTGTATTTCAGTTTTCTGAAAAGTTTTAGACTTTCTTT TATTCCAAAGAAAACTAATTCAAAAGTACTATTGTTCTCTTAGAATCAAACAAAACTATTCTTTTTAGTG ATCTTAATTAGTTGTTAATG >gi|3450571|gb|AI100610.1|AI100610 34985 Lambda-PRL2 Arabidopsis thaliana cDNA clone 96H23XP 3', mRNA sequence GGATCCCTGTTGAACAGCTCTGGATNCCCCGTNCCTTGCNAATTTGCACGGCCCNGATGATGNGCCAATC TGTCAAAAGCCCATCCTCTTTTGAGTTCGGACAACAGCCTCTGGATGGAGGAACAGATAAAAGAGATGAT CTACCAAGAAGCCATAGCACTCAATCCAACATACGGTTAGAAGTGCAGCAGCCCCGTGAATGCCTGGTAT TACCCAATAACCATCCGAATGGCTACTTAGTATCTTTGCCTGTTCTTTTATTCATGTACTTCTTCCACAT ATGTAATCTTGTAACTTTTATTTGTTTGTTCATGTTATTTACTGCTAGTGATTAAGTGTAGCTCCAATGT AAAGTACTCCAGTTATTAAAGAATA >gi|3450570|gb|AI100609.1|AI100609 34984 Lambda-PRL2 Arabidopsis thaliana cDNA clone 95H10XP 3', mRNA sequence CAGGAGCTTAGGTNCCCCGAAACATTTTTCCAGTCACTCGACCTGGNCATGGACTCTCCTCAGAATCTTC CCCCGTGAGTTACTTCACCGTATACCCGCGAAAACCCTTGATCAGTTTTACAGTCGCGATACCACCAACT GAAGAACATAGTTTCTACTGCCTTGGTGTGATGATATGTCCAAATGCATCTTTATTTTTTACTTCTGCGG TTGGATCACACCTCTGAGTCGTCCGTCCCAATAAATGGTGTTTGTTCCCAATCGCTAGACCCTTTATTAT TGTCTTCGAAACTGAGCAAGCCAGGTTGATTATTCTTTTTGTAAGAGAAATTGAAATTCTTGTATAATTT ATGAGATTTTGCNTCTTTTTTTTGGGGTACC >gi|3450569|gb|AI100608.1|AI100608 34983 Lambda-PRL2 Arabidopsis thaliana cDNA clone 95D10XP 3', mRNA sequence CCAAGCCTCTTAAAAGGAACCGNTTGTTTTCCCTGGGGCCTTAAGNCCGCGNCNTTNCGATTTNCTGNAC AAAAATCTGGGATCTTGCAAGCTAAGTGGATGCCCGATCCAAGNGTATGTAGCCCACCCTGGAACCAAGG AGGACGAGATGTTCCAAGTCATGGCTAACATTGCCCAAAAGAAGTGTGAGGAAGAATACTTGGGATTCGC CATTGTGCCCAACTACCACATCATCTGGTAAAGAGAGCTTTATCTACTGCAATGCGGATCATGCCAAGCG CCTTAAAGTATCGCGTGACCAAGCCTCTGCTTCTCTCTGAAAACATTCTCATCTGATTCTGTTTGATCTC GGCATGTGTGTGTCCAGTGTGTACAAAACAGGAAACTTTCTTCTATATTATTCCGATTCTACAAAATTGC GTCTAAATATTTAAGTTTATACCATCTCTATGAGCCACTGTAAAACTTGCCATCGACTTCTAGTCTATTT CCAGTGATGGTTTGATTCTCCC >gi|3450568|gb|AI100607.1|AI100607 34982 Lambda-PRL2 Arabidopsis thaliana cDNA clone 95C1XP 3', mRNA sequence CGGCTTATCGNCCGCCTTTGGGCTTCCNNCAGGTGCTTAACCNNCTCGGGATTTCTTGCNNCTGTTGAAG ACTGTACTCGGTATGATCGGNCCTGTGGATGCTGACGGCGATGGGAATGTTAATTTCGAAGAGTTTCAGA AGATGATGACGTCGTCTTCTCTCCTCAACAGCAATGGATCCGCCGCTCCTCCTTCGACCTAGGGAGTTTT CCAGATTTCAGATCTGGATTTCGGGAATNAGAATAACTATGGAAATTAGGTACTCTTTTCTTCTTAAATG TGATCAATCATCATCNGTCTAACTTCAATCGGATCTCTTTTCATTCATACATNGTTGAGATTTAGATCTG >gi|3450567|gb|AI100606.1|AI100606 34981 Lambda-PRL2 Arabidopsis thaliana cDNA clone 95A1XP 3', mRNA sequence TTTCTTNCACCCTCTTGGGTTTGGGAAAGGTTGAGAAGTCACTGAAGGAGTTTGAAACTCAAGGAGGTCA AGAACGGTAGACTGGCTATGCTCGCCATCCTCGGTTACTTTATCCAAGGACTAGTGACCGGTGTGGGACC TTACCAGAACCTGCTTGATCACTTGGCTGATCCCGTCAACAACAACGTCTTGACCAGCCTCAAGTTCCAC TGAGGTGATCATCATCTCATGTGTTTTTATGTCTCTTGTATCGTACAATATTTCCATCTTTCGCTACCAT TGGCTTCTTCGTATTGTAACACCCTGTGTAAACATATTCGTGTTTTGTAAGAAATGACAATGTCAATGGC CAAACGAAAAAACTTTTAGGNTT >gi|3450566|gb|AI100605.1|AI100605 34980 Lambda-PRL2 Arabidopsis thaliana cDNA clone 94N15XP 3', mRNA sequence GAGNGGGGCATTCCCACCAGTGAAGTNGCCCCAGGTTCTAGACTCGGCAGTGGCGAGTTTACCGCCTTGC TGCTCGCAGAACCTTCCGATCTATACAGAGATTCAGAAGTGCATGGGAATCATANGAAACCAGATTCTNG CCCTCGTACCCTCCTAAAGTANNAATCCTAAAACCATAACTTAACCTTTGTGTCTCTTCATAATGCTTGT TTCTCTTTGTAAAATCAATATCTCCTTATNCNAAATCCTTTTATATACCCCATTTATTTGGAGTGACTCA CAACAGTTTCTCGATTTCACATTTATTTATATGTAACACATCATTTGTT >gi|3450565|gb|AI100604.1|AI100604 34979 Lambda-PRL2 Arabidopsis thaliana cDNA clone 94M15XP 3', mRNA sequence ANATCCCAATTACCCTTTTTCATCACCCNGTGCCTCCAAGGTCTTCTCAATCTCGATCTCTTCNTCTNTC ACCAGCTTCCCTTCCACGATATCAACGAAGCCATGCAGCTGCTTCACCAAGGCAAAGCTCTTCGTTGCCT TCTCCACCTCTAAACTGAACAAACATCTTTTACATTTTCCAAATCCGTTTGANTGATTGTTCTNCTGCTT TTAGNGTTTCCTTATTGGGTCTGGTCCNCCCCCNTACTAANATAANAGTTGGAAATGTTTTCTCC >gi|3450564|gb|AI100603.1|AI100603 34978 Lambda-PRL2 Arabidopsis thaliana cDNA clone 94I6XP 3', mRNA sequence ATTCCAGGNGAGGAGNTAGTGGCCGGTGNGAATACCCCCATGAAGGTTTTTAGGACTGGNAAGNTCCCCG TGATGGAGCCAGCTCCAAGGTGTATGAGATCCGATTTCCAATTTTATTCCCCAGTCTGGAAGAAGATTGC GTCTGCAAAATCACTATGATATGGGAGAAGCGCAACGATGATTCCCCCGAACCAAGCAGCTACATGCAAC TCCTCAAGAGCATGGTTATTGATATGGAGGATCACGTCCTTAAAGCTTAATCAACATCACCATCATCCCT ATATGTTTATTAAGTTGTTTTCAATTATATCTAATAAAGTGTGTTTCCTTTCGGAATACTATATTTTCAA TTATATAGAATAAAGTGTGTTTCCTTTCGGAATACTATATACGTACCATGTGGTTTCTTAAATCAATATA TAAGAAAATGGGTTTTGTGG >gi|3450563|gb|AI100602.1|AI100602 34977 Lambda-PRL2 Arabidopsis thaliana cDNA clone 93C1XP 3', mRNA sequence TAAGCCCTGGCGCCGGATGGAANCCGTGACTTGNGAGATAAATTATNTGACCCACTAGGTTTACTCGGCC CATTGTCCCCATTCATGTCCGGNTTTTCCGCTCGGCGGCCAACTATCCGCAGTACCACCATATCGTCCCA GAAGGTGCCCTTTCTGTTATCCTCCTCCTCCCCCAAAGGCTTTCCCAAAAAACTCACCAAGTCACTGATG TCACTATAGCTACGAAATTGCGTCAATAAATGTATGCACGTTAATTTGTTTCATTTGTGATGTGTGGGGC TCTTTATCTATTATATGCATGTCACGTGTTTGTCATATTTGCAATGTATCATGTATGTGGCTCTTTATCT ATTATATGCATGTGTTTGTCAATTGTCATATTTGCGATGTATCATGTATGATGTATGTGGGCTCTTTATT TATTATATGCATGTGTTTTTC >gi|3450562|gb|AI100601.1|AI100601 34976 Lambda-PRL2 Arabidopsis thaliana cDNA clone 93C17XP 3', mRNA sequence CGTCTTCAGGTCATTNGCCCCATCCCATCACCGGACCGGTATCAACCCGGCTCGTGCTTTGGAGCTGCCG TTATTTCCAACAACGAAAAGGCCTGGGGACGACCAATGGATTTTTTGGGTTGGACCGATGATCGGAGCAG CAGCAGCAGCGTTTTACCATCAGTTTATTTTAAGAGCGGCTGCGATTAAAGCTCTTGGCTCATTTGGCTC CTTTGGCTCCTTTAGGAGCTTTGCTTAATATACATTTATTTTAAATTAAACCACAAGTTATAAATCTTTG ATCAAAATTAAAAGGATGATTACAAATGAATTAAGTGGAAGTTACATGTGATCTTCTTTATATGTTTCTG TTTTTTTGTTCTCTCTTTCATTTCATGGAATTTCCCATTCGTGTAATTGTAAATGTGGTTTTAATTAATG TTGCTTTAAGAT >gi|3450561|gb|AI100600.1|AI100600 34975 Lambda-PRL2 Arabidopsis thaliana cDNA clone 93B9XP 3', mRNA sequence CCCCCGTGTTAGGCAACTNGGCCATGTTGATAGATTCCAAGGNCGGNCANGGAATTGAAGCNNTCNTCAC ACTGCCTGAAGAGAACATGTCGTCCTTCGAGCAGNACCCAGAGTTGCTCGCCTTTGCTACCATGAACCCT AGTGTCTTGGTTTAAATCCTGTACTGAAATTTGTTGTTTCCTCAATAAAGATTTGGATACACCGAATCTA TATATATCTTCAAGATGTAATGCAAGAAATGTAAACTACTGGAATATCATTTATGTTTTAACT >gi|3450560|gb|AI100599.1|AI100599 34974 Lambda-PRL2 Arabidopsis thaliana cDNA clone 93B10XP 3', mRNA sequence GAGAAGGAAGCCTTCTTCAGCTTNTCTCTGACANAGCCACTATTNGACGACCCTGTTTTCCGNCCNTTGG TCGAGAAATACGCNGCNGNTGAAGATNCCTTTTTCGCTGATTACGCTGAGGCCCACATGAAGCTTTCTGA GCTTGGGTTTGCTGATGCTTAAGCTGTGACGTATGCTCTGTGTGTGTGTGTGTGTCTCCCCGAGAGTCAT GGCTGTTTTTGGTTGGGGGCTGGAGGGGTCGCATTGCATTTGAACTTTGTCATATGATTGCTTAATGTAC TCTCGGATTTACGTATCTGTTTTTTTCGGTGGGTTGCGATTTGAACACATCCGTTGCGCTTTTGCTGCTT AGACACATTAATAAAATTAATTTCTCTCG >gi|3450559|gb|AI100598.1|AI100598 34973 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92O13XP 3', mRNA sequence ACAAGGGGATCCTTGTGTTGAATCGAGTTAGAGCNCGGATTTGTGTCCCTGAGCACGGAAACACTCCCGG ATACTACGATGGACGGTACTGGACAATGTGGAAGCTTCCATTGTTCGGATGCACCGACTCCGCTCAAGTN TTGAAGGAAGTTGAAGAATGCAAGAAGGAGTACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACA CCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATTTCTTTT CTAAAACATTCTTATGAATTATCTCTGCTCATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGA GACAATTTCTATCGGATTGTCAAATGTCTGATTTATGAATATGTAATTTATAT >gi|3450558|gb|AI100597.1|AI100597 34972 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92N7XP 3', mRNA sequence TGGGAANCTTGTTCCNCTGCAGGTACCGTCCGGAATCCCCGGNTCGCCCCACGCGTCCGGAGAACGCTCC GTTTATGATCGGAGGATGTTGCGNCGGAGCCGTCCTTTGACCGTCGGAACCTCCGGNTTGGGAAGCTACG TCGGACGGAACTGGGAAACCGATCAGTGTTGGTAGTGAGTTAACTCGGTGACCGAGTTAGTAGAACGAGT TAATTAGTGTAAATACGAAGCCATAAAATCCTTGTAATTTAATCATAGTAAGCTAACATGGACGGGAACT AGTGTGCTAACATACGCCATGTGCTTACCGTACGCTCCCTCCCCCACGAGCGATCGGTGCCGTTTGTATC CGTGTTTACGTAGGATC >gi|3450557|gb|AI100596.1|AI100596 34971 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92N23XP 3', mRNA sequence GGCAANCCGTGGCGNCCTTTACNCCTGNGGAATTTGAAAGAAAGACAGGCTANGGGATTGCAAGCCCCAG AAATTCAGAACATTCTCACAGNTCCTGTAATGAGACAGGTACTGTCTGATCTCCNGGAGAATCCAGCAGC AGCACAAAAGCACATGCAGANCCCAATGATCATGAACAAAATCCAAAAGCTTATCAGCTCAGGAATCGTC CAGATGAAATAAACGAAGCCAAGACATTGATTTCGATTTTGCTGAGTCATTACTCTTTTATAACTCCAAA CACTAAGATCGAATTCTTCTCATTTTTCAGACTTTTCTGATATATCAATTTTTCTTTC >gi|3450556|gb|AI100595.1|AI100595 34970 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92N19XP 3', mRNA sequence CCTATGNGCNGTGTTTTAATCGTAAGAGGTGCATATAAGTTGGATTTAGTTACATTCAGGAGCCCTTNTA CCAATTCCGTTCTTCTTCTTCAATATGCTGTCCCNCCANCCATGAATCTAGGTACAATTACTCAGTTATT TGGAACTGGGGAGANTGAATGCTCAGTGATTATGCTCTGGACTTACTCTTTGGCTTCGATTGCACTCACT GTTTGGCCAACATTCTTCATGTGGCTTGTAGCTTAGAATAGACCCCCATACTCATCATGTTACATGTATT GTTTTGTTCCATTGATTCAAGAATTGTTCTTGGACTTCCAGATGATTGGATCAAGTATAATAGAGAACAT ATACTTAT >gi|3450555|gb|AI100594.1|AI100594 34969 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92M9XP 3', mRNA sequence ACTGTAGTTTAGTCAGTAGGTGCTAGTGTGCTCCATTGAAGGTAGTAGCCTCAAGTGTTGGTGCCCAAGA GGTCAAAACTTTGTGTGTTAGCTTCCAAGGAATGTTGTGAAGCTAAGAACTACGAAGGGTGTGTGAGATG TTTGCAGCAAGTGGATATTGAGTACAAGGCGTTAAAGACAAAGCTTCAAGATATGTTCAATCTTGAGAAA CAGATCATTCAAGCTGGTGGTATAGTTCCTCAAGTGGATATTAACTAAAGAGACTAGTCCATAAGAAGAA AAAAGATGATGACTTTCTTTCTTTAGTTTCTCTTCTAAATTATTTTGGATTTGGTGTTTGCTCAAAAACT CAATAAAATATGTGCAAAAAGAAACAAAAACAAGTGATGGTTGTTTATAAATCAGTAGTATGTATTGTTT GATCTC >gi|3450554|gb|AI100593.1|AI100593 34968 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92M3XP 3', mRNA sequence TTTGGTTGGGAAAGACTTGGGCCNCGAATTNCCAGAATGNGCCNCGATATGGTGAAGTTAGGTCCACTCA CACTCCTGAACCAGTAGCGATCACCGTCGTCCGATCGGTGACCACTGTAACTGTAACGATCGAAATGCTG AGATTGAAAATGGTCAGGGAGTTAGAAACAGTGCTGCAGCTACTTGAGTTTGCCCAAGAAACCCTAATAA GAAACCTATTTGTTGACTATTTTGACTTTGTACCCTTCTTGATATACCTATCAATCACCATTGTCCACGT GTACTAGTTTCGTTGTAGTGATTTTCAAAGTTTATCGAAGTATGCATATTCAAGGATTAATTAAATCAGG ACTTACATTTTCCTGAGTTAATTTTTTCTCTTTTTCTTTTACTTATGGGACAATGTAATGAAACTATATG TTGCATATAAATATTTTCCAAGTTG >gi|3450553|gb|AI100592.1|AI100592 34967 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92L4XP 3', mRNA sequence GCCGTCCAAGGCTTGTCCCAGCNTCATGCAATGCCCNNTTCACCCCAGGNTCTTGANTNCCTAAGCCCAC TTTGNAAAGTTTGCTCTGGATCCCCATGTCACTCCTTGGCTCTGCTGTGTCGTACCCTACCCTTGCTGCT CACCGCATATGTTCATCAATCGTACAAGAATGCCTTGGCTATTGCTGTTGCCCACTGAGTACACCTTCCC TCAAGCAGAGAAGGTCAAGGAATACTTGAAGGATCCAAGCAAGTTTGCTGTTGCTTCAGTAGCTGCGGTG TCTGCTGATGCAGGTGGTGGTGCCCCAGCTGCTGCTAAGGTAGAGGAGAAGGAAGAGTCCGACGAAGAAG ACTATGGAGGTGATTTCGGTTTGTTCGATGAAGAGTAGATTTTGTCGGTTAAGATCTTACCTTTTTGTCG TGGATTATAAGTGTTGCTTTGTTTTTAGTATGTTGGACCTCAATTTTCTTGGTTTTAGCCAATCCAGTTT TATGTT >gi|3450552|gb|AI100591.1|AI100591 34966 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92K12XP 3', mRNA sequence AATTGCTCCNTCCAAAACTTGTNCAGGTCCAGCAATTTTACCAGCCTTTTNGNGANAAGTTAGCCATTTG AAAATGNNCGGNCTTTTGTTCCCCTTTTGGATGGCCCNATATCTTTGTTAGGATGGAAGTAGAGATAGAC ATATTTTNGCTCTTTTATCATCCTGACTATTTAACTGGTTTCACCTGAACTCAATGTACAATCTTATTTT TTTACATCCTTTTTTCAGTGAGAAAATAATGTTTCATACTTGACCCTTTTGTAATCATCATGGTGGAAAA CTAAAGACTAATCAGTAATCACTGTCCGGTTCTATCGATGTTCATGGATTGTGTCCTAGTTATTTAAGAA CATGGAAATTGCG >gi|3450551|gb|AI100590.1|AI100590 34965 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92J23XP 3', mRNA sequence CTATGCGGCGAGANCANAGAGTAGCCCAGATGCTGAGAAGTATTACTCAGAAACTGTCCTCGAGTTTGAA CAATGTCCTNGCCCAAGCNCGGTTAANGAAGAAAGACTTGCGTTGTAATCTGTTGATGTCGATGTTATTA TAATTACTGCTATCCAAGTACNTTGTCTTTCTCCTTCTCNTCNTGTCTGATCAAATCGGTTATCTCTAAT TTCAGTTTCAAGTTTTANCCAATATATTGGCTGGCTCTTTAGCAAAACATTATATATTCGTCCTCGAGCT NACCACTTTGT >gi|3450550|gb|AI100589.1|AI100589 34964 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92J13XP 3', mRNA sequence CTGGGCTNTCCCTGAAGCAANAGGTAAACCATGGTACGGTTTGCTGATGCTGCTGAGNAAATACCCGGAG CATTTCGTCATCAACACGAGATCAAAGGGAAGAGTTACCCTTGAATTCGTTTCCCTCGTTACCCTACTCT CATGAGAACTTTACCTTAGTGACTCGGATTAAGATTTAAGAAGCTTTTCTCTCTTTTCTTTGTTTCATAT GTNAAATATTTTGGCATTGATTAGTAACACGCTGTGTCGTTTTTCTGCACC >gi|3450549|gb|AI100588.1|AI100588 34963 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92I8XP 3', mRNA sequence TTGGCCCTANTTACCGTTTTTGNTGGTCCNCCACCCAAGGCTCNTTGTTGTNCACTTCTCAAGGNCTTGC TAATNCTGGAAGCTGCGGTTTGGTCTCTGCACCGCTCTTTAAGCCAATGTCTTGGGNATTAATCTCAATG TTCCTATTGATCTAACCTTGCTGTTGAACTATTGTGGCAAGAAAGTTCCTCATGGTTTCCAATGTTCTTG AAGATTTGAGACTTTAAAAGAGAAAAATCTCTTTGGTTTGCTATGTTTTTATATGTTTGTTTCTACTGTT ATCTATTGTTTTTGTGAGAAAAAGCTTTGTTCTGTCACTGTTGAGTTTGATGTAATGCTTGAGCTTGTTC ATGATAGAACCTTTGTTCTCTCAATATTGAGTTTGATGTAATGCTTGAGCTTGTTAATGGATTTT >gi|3450548|gb|AI100587.1|AI100587 34962 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92I20XP 3', mRNA sequence ATTCCANGCCAAGCCCAAGGCAAAGNAGGATCCCNCCGNATCAGCAGNGATTGATCTCNCCGGAAAGCCG CTCCGAAGATGGCGTACTNTGGCTGACTCCACATCCAGAAAGAATCTNCACTTCATCTTGTGTTGAGGCT TAGAGGAGGTATTATTGNGCCTNCCTNGATGATGCTTGCCCGTAAGTACAATCAGGATAAGATGATATNC CGCAAGTGCTATGCTCGTCTTCACCCAAGAGCTGTCAACTGCAGGAAGAAGAAGTGTGGTCACAGCAACC AGTTGAGGCCTAAGAAGAAGATCAAGTAGAGAGACTCTTATCAAGAATCCCATCTCTTGCTTGCTTCTTT TTGTTGTCTTCCCTTTGATAGGGTTTGTTTTTCTTGTTTCAGTGACTTTCTATGTTAAACGATAATGTCA GTAAAAGGATTTGGTTTTCTATT >gi|3450547|gb|AI100586.1|AI100586 34961 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92I17XP 3', mRNA sequence CGAATCNCCCCTTCCAAACGGATGGGGGGGNGGTATAACGAACGCNTATNCATTTNAAGACNCTTTTGGT NANNGATTAGATGTATGNAGGACCCGCGAAAGGCTTCATCAGTGATNAGAATTTGGGGANAGTTCTCTTA CAAGATTGTAANGAAGTTGATAGNAAAGTTGANATGGATGNTGATNGTTCCGTTAATTTTGATGAGTTTA AGAAGATGATGAGTAATGGTGGTGGTGCTTGAGGATTTGAAAGATTTCGCCGGAGATTAGATTAGTCGAC GGTGATGATTCGTATTAGCAGATTAATTTTAGTGACGGCGATTAAAANCCCTAGAAGTATGTGGTGATTG ATGAATATTGATTTTAACTATATAAGGTTGTTTCTATATCTTCTGCTCTTTTTATAATTAATATGCTTTG TTGAGTGTTATTAGTCTTTAATATTCTGAATTAATTACTGATTTAACAGCT >gi|3450546|gb|AI100585.1|AI100585 34960 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92H7XP 3', mRNA sequence TCGGAAGGTAAANTCNNCGCGAAAGNTCCTCTCCCATCCGGATCNCGNCTAGTGAAGAAGATGNGTCNCN GGGGACTGAAAGGTGATGATCCGACGGATTNTTCCATGGCTTTTCCCCTATCTGCTGNNTTCAATTAGTA TCAGAACCAATCTACAGAAATTTCTAGGGTTTTCTCCGCCNCGAGGAGCTGCTGGTGCTGGTGGTTTGTT CCCCATGCCTGATCCTAAGACCAACTGATCACTCCTTTGAGGTTTTTTTTTTTTGTTTTTGTTGAGATTT TTGGAACAATTTTCATATAAACACACAGTTACAAGTTTTTGCAATCATCTGATGATTTTGGT >gi|3450545|gb|AI100584.1|AI100584 34959 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92H21XP 3', mRNA sequence TGNGCNTGCNATACAGTCCAGNTTTTTNTGTNCATTTGGGCCAACCNCCGGAATTGGCNTNCATGGGAAG NCCCTCAGGCTGCAGGTTGTTTTANCTCAGATTGAANGGNCTACCANGANGGGGCCAAGGAATTCAAGTG GACTGAGGAAGAGGAAGAAGCGTTCAAGAAGAAAACGGTGGATGCGTATGAGAGAGAGGCAAATCCTTAC TACTCGACGGCGAGACTTTGGGATGATGGAGTGATTGATCCTTGTGATACCAGAAAGGTTTTGGGACTTT GTCTCTCTGCTGCTTTAAACCGTCCTTTAGAAGATACTCGATTTGGTGTCTTTAGAATGTAAACAACTTT TAACCAATAAACATTTTCAAATAAATGTATAAACTTTTGT >gi|3450544|gb|AI100583.1|AI100583 34958 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92H17XP 3', mRNA sequence TGCCAGACATTNTCGCGCANCAACTCATGNCCATTCGTAACCTGCCATTCCTGGTTNTGGATNACCCNTT GGGCTACATNTTGCNTTATNCCCATCGGCCATGNTCATGNCGTCTTGAGGACGTTAACTCTCTTGTTGGN AAATCAGCTAGNCCAGAGTATCTGCAGAAACTAACTTACCTGTGTTGGAACCACCATAAAGCCATTAGGC ACATTGACACAGTGAGGGCATACACATTTGGCTCTCATTATTTTGTGGAGGTTGATATTGTTCTCCCAGC TGACATGCCTCTGCAAGTGGCTCACGACATTGGAGAATCGCTGCAAGAGAAGCTCGAGCTACTAGAGGAG ATCGAACGGGCTTTTGTGCATCTTGATTATGAGTACACTCACAAACCTGAGCACGCTAGATCCCACTGTT AGCTGTTTATCCTTTTTAAAGATCTCTACGTTTCTATATCTTTACAAATTAATCTTCACTGTATTGTTGT TTAGTAGACAATTGTGAGATAAAGGAATACCTTTGTAACT >gi|3450543|gb|AI100582.1|AI100582 34957 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92E2XP 3', mRNA sequence GTTCCCCGTGGGCTTTGATNCATGGTGAATCCATGNGGTGNGTATGCCGTAAAAAAACNGTACCCGNGCA CTTGCTCTCGTCAATGGAGTAAATAGACAGCTTACAACGCGACTNTTGGTGTCTTGGAAGTTCCAATAGT GGAAAGACTGGACCCAAGTAAGAGAAACCAAGAGTTAAAGAGTAGGTAGGAGGAAGATGTTGAGATGATG CAAGTTTAGGTGTGGAGTTAGTTTTGAGATAGCTATAGGTGGATTCTCAAATAGCTGACACTTAGTCTCT CTACTTCCATAATGTACGTCTCTTCTATACCAAAAATTCTCACCCCCAAAGTTTCTTTCCAACGCTTTTC CTCACCTCATCATTTTTTCTTACGTTTCGAGTACCACCTATTTCAACAACATTAAATATTTTCTATAATT TGACTATCAATTTTTAAT >gi|3450542|gb|AI100581.1|AI100581 34956 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92D4XP 3', mRNA sequence ANCACTGGATNTGCAACCCAGTTCACAAGCACCGTGAGTCAGAGGATTACCTCAGAGGGAAAGAAGAACA GAGGTCNCCGGGGAAAGGGTCACAACAACCACAAGAACCGNCCATCTCNCAGGGCTACATGGNAGAAAAA CAACTCTCNCAGCCTTCGNCGTTACCGTTGATTGCCTTTTGCTTNTATTATTACTGTNATCATCTTCTAG GTTCCATGTTGTTGCACTTNTATCTCTCTCAGGATGACTTGTTTTTGCAAATTTTGGAGACTATACAATT ATGCTTTGAACCT >gi|3450541|gb|AI100580.1|AI100580 34955 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92D2XP 3', mRNA sequence CGATTGTTACNCGGTTGTGATTCCTTCTTCACCGGAANCGGTGCTCGGACGACAAAGGAAGAAGTCGGTT CACTTTTAGGCTTCTCGTCTCACACGTATAGGTCTTTCTCCTATTGACGACACGTGATCTGAGATAGAGA CAAATTCCAGTTTCNTCTTCTGTAGGAAANCTCTTTGGGCCTTGTTGGGTCTAAATAATTTCTGTAATCT TGCATTTTGAAAAGGCTTNTCTTAGGCCTTGTNTGAGTTGGATATGTTTAATACAAAATTTCTCTTGTG >gi|3450540|gb|AI100579.1|AI100579 34954 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92D21XP 3', mRNA sequence CCCCGGAACCCGCTNTGCCCATGATTNCNCCAAGCTCTAATCCGACTCACTATNGGNAAAGCTGTACCGC CTGCAGTCCCGTCCCGGAATCCCCGGTCGACCCCACGCGTCCCGAGCGAGGAAAACACGTGGAAAGAGCT TTGGATGATTCCAACGATGTTGATTGTGACGTACGAAGGAGAGCACCGTCATCACCAGTCCACGATGCAG GAGCATGTAACTCCTAGCGTGAGTGGTTTGGTGTTTGGTTCGGCTTGAAGAATTAATTAGTTTGGTAGTT TTGTAATATTTTGAGAAATTGAGGGGTTGGTTTTGTAATTTTTTTTCTATAACAAAATTAGTTTTAGATT TTTCTTTAGTAGTCTTTTGAATGGATTTTAATCTTACCACCGAGAAAGAAAAAATTCTTACTACATTTTC >gi|3450539|gb|AI100578.1|AI100578 34953 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92D20XP 3', mRNA sequence CTGCCAATCCGGGAAGCGAAGCGCATCNCCTCGACCATTCTTNGGGGAGCNCGGTCCCATGATATGAAGA GGCTCTCGTCGCTATTGACCGAAGATCCCAGCAATCATGGAGAGACGCAGTGCCATCTCAAAGCGGCTAG AATTGTATCGAGCAGCCCAATCCGAGATCGATGCTGTTGCTTGGTCCCAAGTGATACCGGCATGTCATGT CCACTGTTTTGCTCGGTTCTGGTCGGTGTGGCTCAGACTCGGAGCAGAGATTTAGGGTCTGTAATTTGTA TAAGATGATCTTCCCGATACCATGCAGTATCGTTTTATATAACATCCACATTGTTTGTCCTACCTCTATG TTTTTTGTCCATCACCCGATATG >gi|3450538|gb|AI100577.1|AI100577 34952 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92D17XP 3', mRNA sequence AGCCGTTNGGATTGGGCCGNTACCATTCCCCGGACCGTTTGCCCTGTTCCCCNAGTTTATCGGCCCCCCT TGGGNAAGCTGTTNCCNCCTGCNGTCCCCGTCCGGATCCCCCGGTCGGCCCCACGGTCCGTCTNCCACTT CAAGCCCCNCCGTNCCATGNGNAGAANCCCAACTCCAGGATTCCATCCGGTTCCCACCCACCATCCGAGA TGTTGGGGGGAAGAGCCAAGGAGATCCAGATCACTCCCTGAGCCATCACCGCATGAAACAATAATAAGTA TCTGCTTTTGTATTCTCGATTTTTGTTTCCAAGTGGTTTAATCATCAGTCAAAAGTATAATTTTAATTTG CATATAAAATTTGGAAAAAANAAATATATATATTATATGGCGATGCTTGTTAATTATGATAATGTTCTGA TGCTGGTTCAATCTCTATTCTTCTTTATATAGAGATTAAAATGTTTTGCATTATGTACAAGAAAATATAA GATACTAATATCAATGTCGTCTGACTATTGAAGCTGTTGATG >gi|3450537|gb|AI100576.1|AI100576 34951 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92D13XP 3', mRNA sequence TGATGNGGAAGGNNCTNTGCCCCAAGAATATGTGCCCAATGNCCTGGNTGAGGATGNGGAGAAGAAGAAG NCCGTCACCAAGATCACCCACCAGAAGCGTCGTGACGAAGCGATGAGTAACTAAACCCTCTCTGTGCTTA GAGAGTGTAATGAGAATGTGTGTTTGCTTAGCCTCAAAAACTACTAAATAAAGAGCTAAGTCACATACCT TTCTACATAATATCTTCCGACGTTGGTGTTGTGTTTGTTTGAATCTCTGTATTATTACTACAGAGTCTTC GTACTGGTTCATAATAAGACCTTTAAGTGGTATTGGGTCACCATGTAACTGTTGCTACTCTGTTTCGTTT TCTATCTATCGTTTTGTGTTATG >gi|3450536|gb|AI100575.1|AI100575 34950 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92D11XP 3', mRNA sequence AAGCNGGGGAGTTGTNNTTGTCCCTTGTCGTGGTTTAGTGATTGACCCGACCGGTTCAGATTTAATTNNC CCTTAATTNNATAGTTAAACCGTTNATGGTTTNGTACAAACTCTTTAAAATTCCAGTTTCCACGCATATA AATAAATAAATAACCCTTCCTGTAATCCTGTTCTAGCTCTTTGAAACTCTTTGTTATGTTTGAATGTTCA AATCGGTCTGGTTATT >gi|3450535|gb|AI100574.1|AI100574 34949 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C7XP 3', mRNA sequence TGGGTNNGTGCCGTTGTTCTCTTAGNTTTGAACCGGTGGGGGGCAAATTCCAGNGTTGGGTTCTCTGNCG GAGTCGGANCANTAAAGGTCTCGTCNTCGAGATGGTGANGATTTGGGGTCGTCTAAACGTNTACGCCAAA GCCGTNGACCCAAGAACGNTAGTTTGGAACANTCGACAAATCNCATAGGTTNCACGTTGGAGCTAACATC TNGGCGGTGGAGTTTCAGCGGAGTTNCATGAACCCAGCCGTTGNTTTCGGACCAGCCGTCGTAAGCTGGA CGTGGACCAACACTGGGTTTACTGGGNTGGTCCTCTTATTGGTGGTGGANTCGCCGGAATTACTACGACT TTGTNTTCATCGATGAAAATGCCCACGAGCAATTGCCTACCACCGATTACTGAAGACGTCAAATTCAACG TTGTTAATCTGATGAATTTTTCGTGATTTGCTTTTTTAATTTGCATCGTAATGGGTTTNTGGNCGTTGGA TCATTTTTAGATGAATCTTTGTCTANTGATTGATCATTTATGTGTNTTTGGGTTTGTTGTTGGAGTTGTA ATATCTCTGGAAGGCTTTTGTGCAATTGTATTGTACGGTTTAATAACTATAATTGAGAAAACCAGGGAAT GTGAATTATG >gi|3450534|gb|AI100573.1|AI100573 34948 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C6XP 3', mRNA sequence CANTTNTGGAGGCTTCTTTGAACTCAAGATNTCGAAAGAGCGAGCAAAAGCTGNAGTTGAGNATTGATTT GCANACAGNTGGTTTGAAACGNTAATCGGGTGTTTACATGGANTTNCTTCAATGGAGNAAGNTNACAAAA CCAAGAATGNTTTACATGTAGGAGAAGAATCAGATAGAGAGAAAGGAATGAATTTGCACATTCATANTCC TGATGGTTTACCAAAACTGAACAANANTTGGAGGAAGAAGAGAAATCGAAAATGCCGGATTCAGCTTTCA CTAGATTGCTTAGAAGTAAAGGAACTANCCCTGCTTGGTTNTCTCACGCTCCTGACCACGAAACCGACTG AAAGCGGATTACGGATTACGGTACCTTTAGAAAGTTGTTATCTTATCACAGTTATANGTAAATATAGTTC TTGGTTTTGCTTTAGTTCATGTAGTCTATCTTTTGTTAAGATGTGATCATANTGCCATAGAAATGTGGTT GTTANTACTTGATGTTCGCCCAATGTTGAATTTGTTTAATGCTGTGTGCCTATTATAGTACTACGCATT >gi|3450533|gb|AI100572.1|AI100572 34947 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C3XP 3', mRNA sequence CNCCTCCTTCAAAATNGTCGNNAGTGNCNTCAAGAAGANCAAGACCGACAAGCCTTCGGAATTAACGGCA GCATGGACTTGAGGGACGGCGTNGACCNCCGGCAGAAAGGGCAAGGGATACGGTGTTTACAAGTACGTCG ACAAGTATGGAGCTAACGNCGATGGATACAGTCCTATTTACAACGAGAACGANTGGTCANCGAGTGGTGA CGTGTACAAGGGAGGAGTCACTGGATTGGCAATTTGGGCGGTAACTCTCGCCGGAATTCTTGCCGGAGGT GCTCTTCTTGTGTACAACACAAGTGCTTTGGCTCAGTAAATCTTAAAGTTGTTAGCGCATGTGTAANCAT GTTTCTATAAATGTTTNTGTGTTGTTCTATNTCTCTCTAATGTTGTAAAACTCAGACATACTTTGAATTT ATAAGACTTCTAGTGTTTGTAT >gi|3450532|gb|AI100571.1|AI100571 34946 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C2XP 3', mRNA sequence TCTGGTCCTNACGANACGAGTTCTTNTGGAGNCTAAGTAACGTTGAGACCTGGNTTAGTGCTTCCTTNNC GGATGAGACAACGTGTCTGGATGGTTTCGATGGAAAGGTTATGGACGGTNTGGTCAAATCNGCGATTAGA AGAAGAGTGGTTCATGTGGCTCGAGTTACTNGTAATGCATTGGCTCTTGTAAACCGGTTCGCGGCTNGGC NTAAGTCATAGAATATTCGGCTAATAAATTAAAATTCGGTCCTTAATAAGGTTTTGTCATGTATTTTCTT TTTTGTCCTAGTGGGTGATTTGTTTCTTTATGATACTTTGTATTTATGTGTAGGCTTGGGATGTTTATGC TTTTGTCATGGTTTCGACTAGAGATAACGATGATTTTAACGGGTTTATGGAGAANAAAANT >gi|3450531|gb|AI100570.1|AI100570 34945 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C24XP 3', mRNA sequence CCCGCANNCGTTTTCANGATATNCNGTTTATCGCCTCCTCGCGTNTCAGTCTCNANGGCAAATGAAGATC GTAACATANCCCATTNNCCACACGAAGAANTCCAAATANCATAGAAGAAGCATAAAAAGAGTGCATCAGA TCTTGATGATCTTGACACGACCAATCCTTGACAATGATTAAGAGATTGGTCCTAAGATTATTCTTGCTTA ATTACAAAGGTGTTGTGAGTTTGATAATGATTGGATGGTGATAGATGTCTTGATTGGAGATAAATATATA TGTTCAAGTTTGTAATTGTAGTTCGAATCTAAAATTGGTTAAAGTTTATTAACAAGAAGAACCTTNTGGC TGG >gi|3450530|gb|AI100569.1|AI100569 34944 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C23XP 3', mRNA sequence CTGGANCCTGGGTACAAGTTCCGGCCATCGTTCCGGNCCAAGATCTATNCCNATGCTANCCCGNCTGGAC CATCGAGCTGATTCCCATCAAGAAGAGTCCCCGAAGTGAATCCACAAGGAGGGATAAGAGAGATGGAGCC ATCCCGGCTCATATATTGGCTTACTACTCTCTGGCTGGCCCAGAGAACAGATTGTCCCAACAACTGTTAG AGTCCTGAAGGAGCCAATATGATATGACCCAAAAAACAGGTTTGTATATAAAGATTTTTAGTCTCGAGTT TTGGGGTTTCCACAAACTGTGTACTATACTACTTTGGTTCTTTTTTTGTTTCATGTTGTGTCGTCGATGT TTTTGGGAGATTACATAGAGTCAGTCTTGTTTGTTGTATGGTCATTACTTCTTTATTTTTCCTCAGGGGT CTGTTTACTTTAATTTCTTTAATAAAACCCCGAAGATTTTGAG >gi|3450529|gb|AI100568.1|AI100568 34943 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C21XP 3', mRNA sequence CGANNACCCCNCTTTTTNCGGGTTGAATAACCCCGTGTNCNTTTGGNGAGNGNTNTANGGGGTTTNCANT GAAGTTTTGGNAGATGGCATCATGTCCGCGATAGATTTCTATTGCTCTGTCGACAAAATCAAAGGAGTGG ATGGTAACAATCGCGTGGTTGTGACGCTTGATGGAAAGTATCTTTCGCATTCCGAACAGAGGACGGAGAA TATGGTCTCAAGGCTAAATCTCAAGGGAGGTACAAGCGAATGATAAGAAAGCCTTTACGTATCCATGAAG GCCTTATTGTAAGTGGTAACGTTGTAATACCTATGTGTTTGTTTATCTGTAATATATGCAACTTCAGCAT CTAGATTAAAAGCTGTTTCAGGTTGAATAACAGTGAATAAACAAAACTTATAAAACCTTTCTATG >gi|3450528|gb|AI100567.1|AI100567 34942 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C1XP 3', mRNA sequence CCCCNTTNATAATCTTGGCCCTTNATGGAATATGGGATGTGATCTCTANCCCNNGAGCNTNTAGGAGGAT TGTCCTCCTCAACGCTNGANCCGCCCTAAAGCCGCCTATGCCGATTAGTTGGAGCAAGCCGTTTCGGCCT GGGAGAAAAAGGAGGACGAGGATACCCCCTGGGATGATAATNTCAGTCGTCTGCCTATTNCCTCCATTCT TCTTCATCGTCANCTCTATCACAACATCATCATGCCATGACGATTTTAAAGTAAAACTTTGTGTTGTAAA TAGATCAGCGATGATGTTACATTTGTAACATTCCTTTTGAAATCCGAAATGCNTTTTTTTGGTCGAAGCC >gi|3450527|gb|AI100566.1|AI100566 34941 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C16XP 3', mRNA sequence GGTTTTNNNCCCCGAAATTGNCCCTNNNAANCCATTCNTGNATTCCGGNTNAAGNTTATCCCCGGTTTGN TTACCAANCAGGATCGGNTCCAAANCCACAGTTACACTGGGNCCCCTGCCACTNTTGAGTACATCACTCG CTACCATGCTGCCCTTCAACCAGAGTATACCCNAAATGTGGTGTCCAGACCCCTCGTCTTTCTACTCTTA TCGTTGGCTTTGACCCCTTACTCTCGCCTCCCTTCCCCTATATCAGACTGATCCTTCTGGGACTTTCTCT GCTTGGAAAGCTAATGCTACCGGCAGAAACTCCAACTCTATTAGGGAATTCCTCGAGAAGAACTACAAAG AATCCTCTGGCCAAGAAACTATTAAACTCGCTATCCGTGCTCTGCTTGAGGTAGTTGAGAGTGGCGGAAA GAACATTGAGGTTGTCGTAATGACACGGGAGGAAACTGGTGCGCCAGCTAGAAGAAGCTGAAATTGATTC AATCGTGGCCAAGATCGAAGCTG >gi|3450526|gb|AI100565.1|AI100565 34940 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C11XP 3', mRNA sequence CTAGTGGTTTTANCATCCGAAAGNCCAGGGNCCCAATNCATCGAAAGTGCCACCACATTTACCACGGACA AGNCACTGCCAAGGTCGCAAGGCAAGAGTTNCTTCTACAAGTGCTTCTGCCGCTGAAGCGATGCTGCAGC TGCCAGTGACTCGCAAAGTGCTGCTGCACGTGCAAAGGGTAAGGTANTTCCGCATCAAGGGTGAAGGGTT CCTCTGAGAAGAAGAAGAAGGACCGCAAAGGAAAAAAGGATTGAGCGTGAGGTGATCTCATATTCTCATG CATGCGTATTCCTCAAACCTATATATTAATGATATCTTAAAAACTACAAACTCACAATCTCTTTCTTGTT CATAAATAAAACCAGAGATT >gi|3450525|gb|AI100564.1|AI100564 34939 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92C10XP 3', mRNA sequence CCGGCCCCNNNGTGGCNNAATGGGTCNGTGTNCTCGGCCAGCAGACGCTNTGGCTCAGGCGCTAAAGCCA TNCCTCTTAGCGAAACTCGAGTTCTTTCCAGGACGATCGTTGACTGGTTTAGNCGATTTGAGAATTGAGC TGTCTCATGTATTGTTGAAAACAATGTTAAGATATCTNCCGACGAACAAGACTAGCGTTGATCAGCTTCA AGACCNAAAAAACAACTGGTAAAAATATGTCTACATGTATATACATGGTCGACGCCTTACAAAGATTTCC ATTGTTAATCACCTTTAATGCAGAATAACGAATATTGGTCTTGTTGAAGATTGGTTT >gi|3450524|gb|AI100563.1|AI100563 34938 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92B3XP 3', mRNA sequence ATACGATGTGCCAGCAGTCATTGCGTTGCCCCATCCCTGGTGGGNGCGCCNAGTATTTAGAATGGTTGAA AAACAGTACCAAGGNACTGAGATCTCGACACCTCGTAGCTGCCCATCGTCAATGGCTTTCTAGTATTAGT TNCTTTTACATTTCAGTAACCTCTGTATTAAAGATAANACGTGTGAAGTGTAATACTGGACCAGTTCGTC AAATGAAATAAACAATGACATTGTTCCATAT >gi|3450523|gb|AI100562.1|AI100562 34937 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92B20XP 3', mRNA sequence GGAACCCAATTGCTTCTCATGGGTTGGTTGAANAGCAACGATGGGTCGATTTTCTTNACCCCGGATTNTC AATCGTTGAATTGGNCAACGCCATGTTCGAAGNCCGCCGAGAATTCGCGAACTATACCGNCGATCAGGAT ACCCCGNTGGGAGATTCTTCGATCCGTTGGGTCTCGCCGGGAAAAACCGCGACGGTGTTTATGAGCCGGA CTTTGAGAAGCTGGAGANGCTGAAATTGGCAGAGATTAAGCACTCGAGGCTCGCAATGGTTGCCATGTTG ATCTTTTACTTTGAGGCCGGGCAGGGGAAAACGCCTCTCGGTGCTCTTGGTTTGTGAGAAAACGGCATGA TGTTTTTGATTCTGTAGATACAATTTCTCTTCCAAAAACCTAATGTTT >gi|3450522|gb|AI100561.1|AI100561 34936 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92B1XP 3', mRNA sequence TGAAAGATGAAGAGTNCAAAGGAGAGATTTGGGTGGNTCTCTACNTTCAAGCTTTCGGAAAACAGAACCA GGGGTATGGNCGAGGAGTCATATGGGGGCTGGAAAAACTCTGAAGNANCATANTAAGAGAAGAAACAATT GTGCGTGTAACTGTTTGATTTGAGTCTTGGGAACAAAATGTTGAGTTTTNATTTGAAAGNGTATTTTTTG TTAAGATTGTTTTTAATGATTTCATAAAATCGTGAGATTTTTGATTNTTCTTTTNTAGAACTTGTTTTGG T >gi|3450521|gb|AI100560.1|AI100560 34935 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92B11XP 3', mRNA sequence CATGGCCTCCGACTAATGGGTNTCCCAANCCTTAGNCCCAGANNTGGACGNNGGATATNNCAAGTTTTAG CACACATTTGGTTGGANTCTGAGACTTATGCTGGCTCTACATTAGTAGACATCGCATCTTCTTCATCATC TGCTGTGGTGTCAGCATCGTCCAAGAAAGGTGAGAGGTCTGATTTTGAGAAGAAACTGGTGAGTTTTTCA AGCATCAAATCGAGTCGGATTCTTCATCGGCATATGGGGATGGGTTCAGGCAAGGTAACCAAGCAGTTCT TAAGCATGGTCTGAGGCGAATCCTCGACCATATTCGCTTGACCGGTACATTTCCTTAAATGGAATTTAAA CTATAAAAAGAGAGAAAACAAGCTTTGTTATAGTTTTTTAGAGTATAGACTTGAGAAGAAAAGAAAAAGA AAAATGTATAGGTTACAACAATACACACATTTAAGTGTCATAAAGTTTCCACTTTTTAAGTAAAAAATCA AGAGTCAAGAAACAAGACC >gi|3450520|gb|AI100559.1|AI100559 34934 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92A6XP 3', mRNA sequence AAGCGAGTCNGGTNCAGCNGGATCAGGCATGGGTTGAATGGGAGGCATGGNCTNCTAGATCCNCTAAATT CTGTCTTTTGTTTTCNCCAATCACCATCTTAACTTGAGAAGAGAGATACGATTCTTTTAGGAGTTTTAGT CTTCGTCTTTGCCTTATTGTTGCTCAATAACCTCAAAAGTTTTACAATAANCAGAGCACACTTGGCAATG TTNNGAGACACACTATTAGCATCAACAAATTTTCCTAAGGC >gi|3450519|gb|AI100558.1|AI100558 34933 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92A5XP 3', mRNA sequence GCGTNCCCACACNCAGTTTTGGAAAGATTTGGAAAAGTTTGAAAGACCCNCCNANGCTGTGAAAGTTATT AAGGAAAGGAGTTTNTTTGCAGCTGGTGCTGCATTCACACTCTTCACCGCCATTGTCTCTCAGTTCNACT ACGTTTGCTACTCTCGTGCTAGAGATGCGTACCAGAATCCCTCCTACTAAAAATGTCAACTTCCACAGCA AGCAAACGTTTAAGCATCAAGAGTTGGAATTTGTCTTTTTGTGTTTGTTTAGTATTGTCCAGTGTTTAGT TATCCTATCAGGATGTTTAGGTTTTATGTTGTCTCTTAAGCAAACACTGATATGTTATATTCTAAGATTC GTATATTGTTATGTTCTCTGTTGTAATGTGTGAATGAATATTAAAGAATAG >gi|3450518|gb|AI100557.1|AI100557 34932 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92A24XP 3', mRNA sequence CCTCNTAGGCCCTTGCTAAGGNCCCTGAGCACAGGNGCTCTTTCTCAAAGTCANAGAGATCAAGAACGGG AGATTAGCCATGTTTGCGATGCTCGGTTTCTTTATCCAAGCGTATGTTACCGGAGAAGGTCCTGTTGAGA ACCTTGCAAAGCATNTCAGTGATCCTTTTGGAAACAACTTGCTTACCGTCATCGCTGGAACTGCCGAGAG AGCTCCCACTCTCTAAGCCATTTCTACTTTTTTTAAGAGCTTCCAAAATGTACACTTTGTTCGATTGGAA CTCCTTTTGACAATGTTAAAAAAACTTCCATCTG >gi|3450517|gb|AI100556.1|AI100556 34931 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92A23XP 3', mRNA sequence TCGCTAGTTTCNCTCTTGGATGGGTTTTNCCATGNTGCGGNTCTTGCACCTCCCCNATNACCACTTCCCC CAGAAGAATGNTGATGNCGTCTGGTGAAGCTNTCAAGTCCAAGAGTTCTTTGGACGCCTTCAAGCAGATC CTCAAGAATGAAGGAGCCAAGTCACTCTTCAAGGGAGCTGGTGCCAACATTCTGCGTGCTGTTGCAGGTG CTGGTGTGCTTTCTGGTTACGACAAATTGCAGCTGATTGTCTTCGGTAAGAAGTACGGATCAGGAGGTGC CTAAGCATTGCTTCTTCCTCCTTTTTTCGATTTTAATTGCGGTTTTAAGGCCCGCAATAAACTGAGATGT TGATGAAATTTTTTTTGCTTAAGACTTAGGGAGGCATGTGCCCTAAACCAAATTTTATATCGTTCTGACG CCAACTATTTTTACTTATGGAATAATTCATGTTTGAGAGAGTTTGTTAGACTCTTCGATTTTAAAGAATT TTGGATTTATGAGTTAAATTCTTCTTTTTT >gi|3450516|gb|AI100555.1|AI100555 34930 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92A21XP 3', mRNA sequence TATGTCATCAGCAATGGAGCATTTGNCCTGACATTTTGAAAGAACAATGGAGTCCNNCACTCACCATATC GAAGGTTTTGCTTTCGATATGTTCATTGTTAACGGNCCCAAACCCAGATGATCCATTGGTTCCAGAGATT GCTCACATNTACAAAACCGNTAGAGCAAAGTATGAGTCTACTGCGAGAAGCTGGACTCAGAAATATGCAA TGGGATGAAAGTTTGTGTCCTTTGATCCCTCNCAGACTCGGTTTTAATAGAGAGAGAGAGAGAAAGAGAG AGGACTTCTTCACATAGGGATCTTCCATGAAATAAGTTAGATTCCTATGTTTTATCATCTCTTTGTTTGA AACCTCTTTAATCTCAAACAAAAACATTACTTCACCTCTTTATTATCC >gi|3450515|gb|AI100554.1|AI100554 34929 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92A19XP 3', mRNA sequence CAAAGACATATTNGGGNGCAGCTGAATCAAAGGGGGCNGAAGAAGAAGAAGAGCCTTTTTGAGGCCATTN ATGAATTGGAATGAAGGATNTCAAAAGAATCTAACACAAAGGCCACGTCCTTCCTTCAATCCTTTCCTTC TTGTAACTAAATAATTTTCATCCTTTCTCTCTCNCTGTCTCTGGCTCTTTTTTAGCTCAAAGTATCNTCC ATTTATGTCAAAGTGTTGTAAATTCCTCAAGACTATATATGAGATGTTTTGTTTC >gi|3450514|gb|AI100553.1|AI100553 34928 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92A18XP 3', mRNA sequence AGTCGGCCATCGGACCGGGGNGGACTTAATTTGCCCAATCCATTCCACGGACGATTCCGTTCTTAGCNCG ATCTGACGGAGTCTCAGGCTNCTCGTTTTCCCAGCAGCTACGTATCTCAATGGGAAGAGAGTTCCCCTTC TCTCCACTTACTCGTCCGTCAATGTGGCTTGCCGTCGTTTTGCGCGATTACGGTTACTCGATCGTGGGAT GTGCCACGCGTTCCTACACCAAAAGATTACCGGATGGGAGTGATAATGCGCACCACCTATAACGACGCAN TTTTGCAGCGGAGTCAGGGTAAAACTGTCATTATTATAAGATAGTCGGTGTTGAGCATTTTACTGGGCCT TATGTTAATGATGGACAAGGCCCAACTTCTGTGAACGATTGCAAGGCCAAGTGCGATCGTGATTGCAAGT GTTTGGGTTACTTCTACAAAGAGAAAGACAAGAAATGTTTGCTTGCTCCTCTGCTTGGTACACTTATCAA AGATGCCAACACTTCTTCTGTTGCTTACATCAAATATTAGTGTTTTTTTGGGAAAGTTATTTACCGAATT CTTTTTGAATTCTTAGAGATTTAATGAATAATCGGTGTGCTTGTAATGATCCACCGTTGAATATATTGTA TTACCTT >gi|3450513|gb|AI100552.1|AI100552 34927 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92A16XP 3', mRNA sequence GGATTTGTGCCACTAGCTCTTCCCAGAGTTCAGAAGCGATCAATCCCTGAATGGAGCAGATTTGGATGGA AGACAATAAGAGCCCCAGAGGCTGAGGCTAGCCACCNAGAGGCCATTTTGAGCGNTCACACCTCTTTCAT ATTCTCAAAAAATGCAAATTCTGGAGGGTTCCTTTGAAGCATATAGGGTTAGTGGAAAATGGCGGTTTCA GACAGTAACTAAAACTCACTGCTGGTGCACGCTAGGCTTTATCCGCCTTTGATGCATGAAGGTCGTTAAG GAATGGTCTTTTTTTGAGAAAGATAACAATTAGATTAAAGCAGAGAACCCATGTTTCTTGTCTGTTCGAA TCCTGCGAGATTGGTTGTAGTTGAAGTTGCATTTTCTTCTTGTCTTTTTTGTTGGTATTTTGACACAATT TGGCTTTTTGGCATATGAGAGTGACTGTAGCAGTCTGTTTTATTTGATGTTCTTGATCTTCTTATGTTCT GAAAACCAGTTTTCCTAAAACTTAACAAATTTCGATATGGAACAAGAAATTTTCTGG >gi|3450512|gb|AI100551.1|AI100551 34926 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92A15XP 3', mRNA sequence CACTTTCCCGTTGGCGCCGATGGATTTTCATGGGGTTCATGATGACCTCTAAGTGCNCCAGTTGATGGCC NACTCAATGGCCTTTGCGCCCTCTAGAAGAACTCCTGGAAGGGCTCATTGCGATTGCGAGGGTTACAAAA GGGAAGCAGCGGCTTCAAATCGNCCCTTACACCCTACCGTGATTAAAATCAAAGGCTCAGTGATCGCGAG GTTGGTGACCCAAACGGGCATATATGATACGACTTTCTCATCATTTAAATAATCCCCACAAAAAAACTGT TTATAATCTTCTCACTTTCAGTAGAGACTAGTTGCAAAAAGTGTGAACGTTTTAAAGAAGCACCATGTTA ATGCATCATCTGTCATCACTGTTCTTGTTTACAAGAAGTTAAGAGATCAGAGATTGCTTCTGAAGAACTG AAAATGTTGGGCTTCTCTTATATTGGCCCGGCAATATTCTTATTCATTTGTCTGAAACTTTTAGGTCT >gi|3450511|gb|AI100550.1|AI100550 34925 Lambda-PRL2 Arabidopsis thaliana cDNA clone 92A13XP 3', mRNA sequence GGGATNACCACTTGGATATNTTGGGTTAGGACCATTCATTGGAGNNTGCGATAGCTGCATTCTACCACCA ATTCGTTCTGAGAGCTTCAGGTTCTAAGTCTCTCGGATCATTCAGAAGTGCTGCCAACGTCTAAACACAC CAAACCAGATTTCTCAAGAATAAATGAAGTTGTAATCTCTCTGTACAAAATCTAAATCAGTCACTTTGCA GTTTTCATTTCCCTTTCTTATATTTGTGTTGTCCACTTGCTCTTTTGTGAATTTTCTTCGGTGTAATTGT TTTTTCTTTCGCTTTTAATCGAGTGATTGGAATTATAATCAATG >gi|3450510|gb|AI100549.1|AI100549 34924 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91P23XP 3', mRNA sequence GGGATTAGGTATTGGCCATATTTTCCTATAATCCCATTATCCNGNTTGGNATTTACCCCAGGAGCTCCCA TAGGTAACCCCAATTACTAACCATTTGGGTATTATAGGTGCTTCTCTCTATATGGCTTCTCTTCTAACCA GATCCCAAACCCCTGACGACCCCTCTGGTGCCCAGGATNGCTCACATATACAAAACTGACAAGACCAAAT ATGGAAGCCATGGCTCGAAGCTGGACCCAGAAGTATGCCTTGTTTTAAAGCTCACAATTCCTCTTTTTTT CCTTTTTATTTTGGTTTGGTCTTATTTGTAATAAAAAAAGAAGAAGAAGAAATTGTTATAATTTTAATAC AAACATATATAATATATAAAGTAGAGTTTTCAAAGTTGTTAACTCATATGATTGATGAGATATCGACATG TATTAAATCTAATTTTGTTAATATATAAAAAATCTTCTAACCTATCGGGAAAAT >gi|3450509|gb|AI100548.1|AI100548 34923 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91P22XP 3', mRNA sequence CTTGGCGTTGCCCNCCTCGTGGCCCTCTCTGGATCTTGGGGAGATGTGTTCCTTGGNAAATCCCNCNCCG TATTNGACTTTGGTAACGAACAGGTCGGGTTTGCAGAGGCAGCCTAAACACGATCGGGTTGGTGTCNCGT ATGGTTTTAGTATGNACAATCTGCGTCTCAAGTGTTGTTTGTATGTTTTCTGGAGTTGAGGACTTTGAGT CGTAGTAGAAATGGTGGCGCAGTTCCTTTTAAGTTGTTTCCTAACGAAAAAAGGCCTTTGTAGTTTTGAA GGCATTGGCTTTGTAAATNCCTTCTAAGTAAGTTCGATGGTGAAAAAACTGAAAACTTTAATAAAGCCTG CCTCTTTTGTTT >gi|3450508|gb|AI100547.1|AI100547 34922 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91O4XP 3', mRNA sequence AGTGTGTGCAAGAGTGGTTGCGGATGAAGAGNTGGNGCCCANTCTGCAATGCCACAGCCGAAACCTCCTC TANATACCCGTCTTCNNCTTCTTCCTCGTTCGTTGTATTAGTTCTTTCATCTAAAGCCTGTGAACAACAA TGGAACCTGCGTAAAAAAGGCCTCACNATTTCCTTTGTGTACATACCAATTCACACCGGCTCTGTCTNTC TCTCCCTTTTGTCTNATGACAANGCTATCCTGTGTTTCTCT >gi|3450507|gb|AI100546.1|AI100546 34921 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91O23XP 3', mRNA sequence CCTAAGGGTAANTTGNTACCCTGGTGGAATCTTAACCCCGCTTAACTTGGCTNCCTACGCAAGAGGCCAA GGAGAAAGAGCTAGCAAACGGGAGGTTGGCCGATGTTGGCATTCTTAGGGTTTTGTGGTTCAACACAATG TGACTGGAAAAGGACCATTTGAGAATCTGTTGCAGCACTTGTCTGACCCATGGCACAACACTATTGTCCA AACCTTCAACTAAAGAGTGAAGACAGACTTATGATCTCATACCTATCTATCTTCCATCACTTTCATGTCT GTCTGTGAGTGTGTTTCATCTTAGAGTTCTTGGTTTTTGAGCTTGAATTATTGTTGAACCGTTGTAGCTC CATGAACAAATTTGGAATCTTCAATGTACAGAGGAACTAAGTTAATCAACATTGTTGTACTCTTTAATAT CT >gi|3450506|gb|AI100545.1|AI100545 34920 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91O11XP 3', mRNA sequence TGNTAACTANCAGAGATTAATCTTCTGCCTGCTCGAGAAGGCAATGCTCGACATTTGGGCNTGAGGAGGA CTATGTTATAGAGCTGGCAAACGAGGTGAGGAAGGTTCTGGCCGAGTCCTCGACTAAGAAGGTGACACCG GTGAAGGAATCAAGAGCAAGCCGTGTAGCTAACAAGTCGAAGAACAATGTCCCCACGGCTCATCAGATAC TACCTCATCATCCAGAAGCTGTTGCCACTACAATATAACTCTTGTAGTTTTCTTCTTAATTGGCTTTAGA GATGAGTGAAATCAGGTCTTTTTTTTAATAATAATAACAAAGTAAGTTTGTTTTCTGAGT >gi|3450505|gb|AI100544.1|AI100544 34919 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91L8XP 3', mRNA sequence GTCCGTTTAACCATGGCTTTGTCCANCCNGGGGAATGGAGTGGTTGAANCCGNGTCACTTCCCCTNTGTT TCCCAACTGGNGGAAGGGGNATTCNCCAATGGAGGATCTACTGATTCCAGCTTAAAAAAGAAATGATGTC CATCGCAGACCCGCAAGTTAGCTCAACCCTTGGAAGGTAATGAGGAAGGCAGGACAGACCCAAAGGGACT AGTGGTGAAATGTTGCGTGATGTGAAAAGAGGTAATGAGGAATTTATAAGAATTTAAGAGACAAAACAAT GTATATAAACAGCATTTGAAGGGCTTTGAGATTGGCCTAAGAACCCTTTCTTCTATAGGCCTTCTTAATC CTACCATTTGATTATGTATTATGTAATATTTGAGAATATATTCACCAAAAACAGGTGCCCTTAATAAACC TCCACTCTTCTTC >gi|3450504|gb|AI100543.1|AI100543 34918 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91K5XP 3', mRNA sequence GGTTGAGAGGTTTGCCCCGATGGTTGGNGAATCCAGGNACATGGTGCAAAGCCTGATGGGTACTGGCCCT AGGTATTAGCCCGAAAGACGCAGCTAGTGGTTGATGCTGTTAAAGAGTCTGTTGATAAAAACTATCAACA GATTAGTCTCTCTGGTCGTTGAAGGAAAGGACTCAGACTATAAATGTTGTCGTGTGTTCTCTCCTCTCTC GCTCTCTATGTTCAAACTTCGATCAACCGTTTAAGTGTTTGTTACCACTTACCAATATGTTCTGTCTTCT GCTGTGTCCNCCTGTATGTATGTTAATTGTTTTAGACTCCAATTACTAGCCTTCAATTACTAAGTAAGTC AATACTAAAAGTTACAGTTTAT >gi|3450503|gb|AI100542.1|AI100542 34917 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91K10XP 3', mRNA sequence GCCGCCTAATAACNCCTGAAGTGCTTTTACCGGGAGTTCCACCTCGGATTTTGTAGTGATGAACTAATGC TGATGCTCTCAAAGGCCAAAGGTCTCGTCCATGGAGAGCCACATTCTTGATGATTCGGTATCGGTAGAGC ATGCGAGAGATTATGGACATATCCATATATCTGAGATAGTAAATCATGCTGAAAAGTTTGAAAACAAAGC AATCCTGCTAATCCACTTTTCGGCTCGGTATACAGTGAAGGAAATCGAAGATGCGGTTTCTGCATTGCCT CCACCTTTAGAGGGACGTGTGTTTGCACTAACACAAGGATTCTAAACATTATAACACTCTTATAGGTTTT ACATACTTTTGTTTTTGTATTCCACATGTAAACATTGTATTCTGTTGTTAATTTTAAGATTT >gi|3450502|gb|AI100541.1|AI100541 34916 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91J9XP 3', mRNA sequence AAATGGATNGGCNTTNTANCTTCCNTCGGNTACAAAGGTGTGGACTATNCCGNAAACCGGNTGNCGAGTN GCCCAAGACTGGACCGTAAAGATTCNGTGATTGAACGNTTTGAACCAGTTTCACTCATGGCCGTTAGAGT GGCCGAAATCTGCTTTTCCGGCGACGGAATATCACACTTTTTAATATATGTTTGGAGATTTAGACTTAAA TAGTTGTAAGAGCTAACAGTTTGAAAGTCACTTTGCATTGTTGTTTATCTTCATATAAATGAGTTTAGAT TTTGATAATTTCAGAATTCGTGGAATCATAATTAACAATTTTGATAGGGAAAAATAATTTGTTTTTTT >gi|3450501|gb|AI100540.1|AI100540 34915 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91J7XP 3', mRNA sequence GATTATAGGNACGCANTTCACGNTGCTGCAGAATGCTGACATATCTCTTGCACAAGCAATTGTGGTCANT GCAGGAGTCANTTGTTCAGANCACANNTCTCACAGTCTGCTATGACGAGAGAGGTGCTAAAGTATGAGCT ACCTAAGTATGTTCTAAGCGAGCCTACCAACTTGGAGGAAGAAAATTGATTTAAGATCAAGAATATTCGA AAAGACAAGANAAGAANAGAACCAAATGTAAATCTTGTGTGTAAGTAGTTACATTAGGATTCTCTNCTTT TGTCTATTTAAACACTTATTAAAAAGATTGANTCCC >gi|3450500|gb|AI100539.1|AI100539 34914 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91J4XP 3', mRNA sequence CTTCACTTGGTTCTTNGCCTTCGGGGTGNAGCTTCAAAGCTTTTTGTNATCNGATGANAAGTGGNTTGGT TCGTGTCTCATGCANTTGGGAGGTGATCTATTTCACCTGGTGTAGTTTGTGTTNCCGTCAGTTGGAAAAA CTTATCCCTATCGATTTCGTTTTCATTTTCTGCTTNTCTTTTATGTACCTTCGTTTGGGCTTGTAACGGG CCTTTGTATTTCAACTCTCAATAATA >gi|3450499|gb|AI100538.1|AI100538 34913 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91J3XP 3', mRNA sequence ATTCCNTCGTCCANGTNATGGGGAATAGGCATGNATGAAAGTGGCTTCTTTATCCTGAATTCNTTCACCA TGGATTGAAGAAGAAGGTCGAATCGAGGTNTAAACTTGTCAAAAAGAACAACATTGACTGCAGCCTTAGA GAAATGCTGGACTGTAACACAAAGAAATTCCATGAGAAGTTTGGCTTTTCGGAGGTAACTGCAAGCTCCT AGCTTTTATATCTCTCTCTAGTTTTTTCCTTCATCAGGCTCTCTCTGTAAGCTGTTTTCAGCTTGTGCAC CAATTTCTAGCACGAGCTTTACCTTGAGTGATTNTGATATCAATAGAGTGTTTTCTTCCAG >gi|3450498|gb|AI100537.1|AI100537 34912 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91J2XP 3', mRNA sequence CGTGNCAACTTCATTCNACGGGATCAAAGNATCAAACNAACGCTGNGGTTGATTTCTCCGGCCNCATGGT NCCGGACCCATTAGGATGATTGAGCCCTGCGATTCATGCCCATGGCTGGATAAGTTCCAATGATGTTGAT TTCGTCAAATTAGATGTTGATGNACTTCCTGATGTGGCTAAAGAGTTTAATGTGACGGCAATGCCTACCT TTGTGCTGGTGAAAAGGGGTAAAGAAATTGAAAGAATCATTGGTGCCAAAAAGGACGAACTTGAGAAGAA AGTTAGCAAACTCAGAGCATAATGAGCATTGTTAACGCCTTAACCAATAGTCTTGTGTAAACTCAATAAT AAATGGTATGTTTATGGGGAATGTGATGTTCTATACTCTCTGCTAATGTAAGACCTTCTGTGTGATGCCA TGATTGATTGAAATGGTTTGTTG >gi|3450497|gb|AI100536.1|AI100536 34911 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91J23XP 3', mRNA sequence CGGNAACGGTATGGCCCCNCCAAATCCGATGCCATTTCCCGCATATCCANAAAACACGGTGAACCCGCTG CATCCTAGGGCCATTTGNGGAATAATATCTTCTTTTCCGGTTCCCCATCTTTCTTCTTCTTTGTTTTGGG GTTCCAGTCTCCGGCCCTTTGTAATTTGTGGAGAGGCCGAGTTTATTTCATTCTTTGCATCCCTGTGTAG TTATGGAAACTCACAGGGGTTATTTGTTTGCCATTTTGGTTTTGTCATAGAATGGCTTTAGGTGTGTTTG ATGCTGTCCTGCCCAGAGAGGGGAGGAGAGTATTGTTTTAGCAATTACTTATTTGTTGGTTTGGGCGAGT TCTTATACTCGTTTTGGGAAATTGTAATGAATGAACTAGAATTTGTTTTCACTATTTATATAGGCTGCAC ATCTTATATT >gi|3450496|gb|AI100535.1|AI100535 34910 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91J21XP 3', mRNA sequence CATCAATGCTGACTTCCCCGTGGCTTGGTCTACTGGNCCAATCAAANCCCGGTGCTCCNTNGCAAATNCC GAGCGTCTTGCCAANTCAAACCAGCTTTNGCGGTATTGAGGAGGAGTTGGNANTCAGAGGCAATTTACGC TGGAGTCAACTTCCGCAAACCTGTAGANCCNTACTAAATGGAGCTTTTAGAAGCAAAGTGGTCTTCTTTG TGACGAGGAGAAGATGACCTGAGTTTGATCATTTGCTTTAATTAAATAAAACGTTCTGTTTTTGTTTCTT CTTTGTTTGGTTTCTTACGTCTTTTGTTGAACCCTTTTTGGGAAAAGTTACTCATTTTTGTAAGGGAAAC ATGAGAATGCTCTGCCTTTGTCGAGGACGGTAGCCCCTTATTTCAATCTAATTTCGGCTTTACTCTTT >gi|3450495|gb|AI100534.1|AI100534 34909 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91J18XP 3', mRNA sequence AAACCATTGNGGAAGGNTTTTTGACCCGTGGTGAGGAAAAATTGAGCCTTTTTGGTGNACCAAAAACCCG AAAATCTTCGCTCACAGGCACAAGGATTTCAGAACAACAGGAACGCAGATGAGAAGAAAGATGTGGCTTC AGAACATGAAGATAAAACTCATAGTGCTCGCCATCATTATCGCACTGATTCTCATCATCGTGCTCTCAGT TTGCCATGGGTTTAAGTGTTAAGCCCAGAAAATTCAAAACTTCTGAGATCTTTCTCACTCGGTACATCGT AGTGCCTTCTCTTTTATTGTTCGATCTTCAATCTAATGTTTCTGCTTGAATTGGTTTTGTATAGATAGAC ATATATGTATGCTACTCATTTGCTATATTGCTTGCATCTGATGACATTGATCCC >gi|3450494|gb|AI100533.1|AI100533 34908 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91I9XP 3', mRNA sequence CTGAAACGAATTTGCANTANCGAANAAGGAGAAGTTAGAAGAAGAGTACAATCGGAGAATGGGGAAGTTG AGTTTGGAGGATGCACAGGAGAGAAGGAGGAGGAGNTACGAGGAGTTAGANGCAATNCAGAGAGGGCAGA GAGAGTTTTNTNAAATGAAGATGAGAATGGAGGAAGAGANGAGAGGGCTTCTCACCAAAATGGAAATGAC GAAGCAGANTCTGGCCTTGTAATATTTGTAGTAGTAAATCACATGTAATGTACACAGAAACCTCCTCCTN GTATGTAACCTAAAGATCAATGTAAGGTCTTTTCTTTTAGAG >gi|3450493|gb|AI100532.1|AI100532 34907 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91I8XP 3', mRNA sequence GGCCNCGNAANTTATCTACGGTAAAGGANCCCAGCAAGTAAAACCTGCCAGTTCNTGAAGGGTGTACTGA TCCTGTGGCTGAAAACTNTGATCCAACGGCTAGAAGTGACGATGGANCCTGTGTCTACAACTTTTGAGCT ATATTATCCTGCTTATTAANTTGCTGTTNTACTCCTATTGTCTCTTNTGGTTTATTTTTCTCCTTTGTGT AATTGTGGATTGGATCTTGTCCTCTTTTGTTCCCTTTTTTTTTTTATGATNTACAACACATTGGT >gi|3450492|gb|AI100531.1|AI100531 34906 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91I22XP 3', mRNA sequence AGCCTGGGNAGAGGAGAAGAGGTCCCNCAGTCNCGTTGTTAGCCCAAGAAGGAGTGAGTATGACGGACCA AGGCTGGAGTTTGGTTCCCATCCACTTGGAGCCAATCCCGCAGCACGAAGTGAGAAGTCCCCGTGCCATT CTCTTGGAACCGGTTTTGATAAAAAAACTAACATCCCTAGTGATGATGTTTTCTATTTAAGTTATCTTGA TTGGGTTTAGGCTAAACCAAAGCCCATCATGAGCCATAAGTAGTGGGAAGTGTTCTTGTGTGGTTTGGTT TGAGTCATTGAGTGTGTAGGTGAAAGCATCCCAAAAAAAGTTAGGGATGATAAAAGAAAATGTTGTCAGG AAAAGAACGTTGATGT >gi|3450491|gb|AI100530.1|AI100530 34905 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91I21XP 3', mRNA sequence TCCAAACCACGNCAACTCCNGCAGNGACCCCNCGGNGTCNGGATAATGGGAATGCTTTCTAGCCCCAGAA GCCCCCACGGCGATATGGAATATGACCCACCATTCCATATACTTTGCTGCTTTTATAGTTTGGAATTTNC CAGCGAAGAGTTATATGTATCTTCATTTCTTTGNTTCCACCTGCTTGCTTCATTTTTTATTGTTAATATA TAATAGTCTTTTTTGTCATTTTTTCTTTTAAGGATTTTTCGAAGAGTGTCCTTTGTTGGTCTCTGCGTAG TGTTTCTTTTTATTTGTGTCTTTGTTTGTTAACTTGAATAATGAATTATTATTTGTCCCTGTGAAAAC >gi|3450490|gb|AI100529.1|AI100529 34904 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91I19XP 3', mRNA sequence CCTCAAAATCTCCCNTTCAAGNCGCTGCATNTGNCAAAACTCAGGGGAAATGGCCCTCTTNGATCCCCTC CAGGTCTCAAGCTCCTCTTCATATCAGGACCCAAGATGCGTGGCTTGGCNGAAGAAGAAAGAGAACCCAC CAGATGGTTTCATGTGTCCCTCTGGTTGGAAGGTGTTGGTTGATTACTACGACAGTCTCAGTGCAGAGTC TGGTAATGGAAGGGTTTCAGAGGCTGTTGCTTCTGCTTAAATGCAAAAGGTTCCTTGCCCCACAAGTTTC ACATTTTCTGGTTGTTAAGTAACTATGCTCTGTAAGAAACAGCTTCCAATAAAACCAATGTAACAACTGT GTGTTCTTTGCGTCTCTGTTGTCAAACTTGTCATCGGGTCGCATCTATTTGTACCATATTTGCTTATTGT GTT >gi|3450489|gb|AI100528.1|AI100528 34903 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91I18XP 3', mRNA sequence GACTTGGTGGCCCCCTACAATGNCNAGGACTTCTTTCAAACCCCGTGNTCGCGCACAAGGCTTCTATTCT ATGACATGGAAGATGGACTTCAAATCCGTGGTTTCCCTACACGTGGTGTTTAACTCAACGGAACACAAAG GGACATGAACATAATGGGTGCTGATTTGATGATGGAGCCCAACAAGAGATCTATCGGTCGTTGGTGGGAC AGGTGACTTCTTCATGGCTCGTGGGATCGCTACCTTCGTGACTGATTTATTTCAAGGGGCTAAGTATTTC CGAGTTAAGATGGATATTAAGCTCTATGAATGTTACTAAGTAGCTAAGAATGTGTGTTTTGTTTGAAAAT TTTATGTTGACACAGAGAAATGTGTTTACAATAATTAAGTTTTTTTTTTGCCTTTTCTTTTGCTGTTGTC TTTTTGTTTATCTATAATTATTATGTGATTTATTTC >gi|3450488|gb|AI100527.1|AI100527 34902 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91I15XP 3', mRNA sequence AGGAAGTTGACTACCTTCTCCGCAANCAAGTGGANTCCNNNGTGTNNGAATTCGAGTTAGAGCACGGATT TTGTGTACCCGTGAGCCACGGAAACACTCCCGGATACTACGATGGACGGTACTGGACAATGTGGAAGCTT CCATTGTTCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGTACCCGG GCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAA GCCCCCAAGCTTCACCGAAGCTTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCTCATTTCAT TTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGATTGTCAAATGTCTGATTTATG AATATGTAATTTAT >gi|3450487|gb|AI100526.1|AI100526 34901 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91I10XP 3', mRNA sequence CCAAAGNAAGGANCCTAGGACCNATCGCNTCCAATCGCCATCGGCTNNATAGTTTGGTGCCAACAATCCT CGCTTNCTGGGTCCATTCAGTGNTGGCTCCATGAATCCAGCAAGGTCGTTCGGACCAGCTGTTGNCAGTG GTGACTTGTCCCAAATCTGGATCTATTGGGTGGGACCACTTGTGGGTGGTGCACTCGCGGGACTTATCTA CGGTGATGTGTTCATCGGTTCTTATGAAGCGGTAGAAACACGTGAGATCCGAGTGTAATTGACTGGGTTT TGTGATTGCTTGATGGTTGGTTGATGTTTTGTTTGCGTGTGTATGTTTGGTGTCCACTTTCTTGCAAGAT TGTATGTAGAGAAAAGAAAAAAAGTTATGTCCTGTTAATAAGAAAATGTATATACATTTCACTTC >gi|3450486|gb|AI100525.1|AI100525 34900 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91H4XP 3', mRNA sequence GTGGATGATGGAAACAGCCAGAGTGGTTTCCAGAGGAAAAAGCTAAAGCTTGGTGTGCTTCAAAGGGGAA CATTCCTTACTTTGAGACCTCTGCCCAAGGTAGGTACTAATGTGGAGGAAGCTCTCCAATGCATTGCCAA GGACGCATTGAAGAGCGGAGAAGAAGAAGAACTATACTTGCCAGACACAATCGATGTAGGGACGAGCAAT CAACAGAGGTCTACAGGGTGTGAATGCTAAGGAGTATCACCAGAAGGAAACGAGGCCTCTCCTCCCATTA TCTCTTTTCGCAAGTTATGTCTACATTATTACTATGTTGTAAATTTTTTCTTTTGTGTGGAAAAGGGATG AGAACAAAAAAAGAAGGAACCCT >gi|3450485|gb|AI100524.1|AI100524 34899 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91G9XP 3', mRNA sequence GATCCGAATTGCTAAGGAAGTGACTTCCTTTACCGCAACAAGTGGATCCCTTGTGTTGAATTCGAGTTGG AGCCCCGGATTTGTGTACCGTGAGCACGGTAACTCACCCGGATACTATGATGGACGGTACTGGACAATGT GGAAGCTTCCCTTGGTTCGTTGCACCGACTCCGCTCAAGTGTTGAAGGAAGTGGAAGAGTGCAAGAAGGA GTACCCCAATGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAGTGCATCAGTTTCATT GCCTACAAGCCACCAAGCTTCACCGGTTAATTTCCCTTTGCTTTTGTGTAAACCTCAAAACTTTATCCCC CATCTTTGATTTTATCCCTTGTTTTTCTGCTTTTTTCTTCTTTCTTGGGTTTTAATTTCCGGACTTAACG TTTGTTTTCCGGTTTGCGAGACATATTCTATCGGATTCTCAACTGTCTGATGAAATAAATATGTAATGTT CTATAAGTCTTTCAATTTGATATGCATATCAAC >gi|3450484|gb|AI100523.1|AI100523 34898 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91G4XP 3', mRNA sequence ATTCTTGCTCCCTCAGCACATTCCAGCCAGATGTGGACCTCCAAGGCCGAGTATGATGAGGCAGGNCCAG GAATCGGTTCACCAGAAAATGTTTCTAAGCTCTCAAGATCAAAGGCTTAAAAAGCTGGGGTTTTATGAAT GGGATCAAAGTTTCTTTTTTTCTTTTATATTTGCTTCTCCATTTGTTTGTTTCATTTCCCTTTTTGTTTT CGTTTCTATGATGCACTTGTGTGTGACAAACTCTCTGGGTTTTTACTTACGTCTGCGTTTCAAAAAAAAA AACCGCTTTCGTTTTGCGTTTTAGTCCCATTGTTTTGTAGCTCTGAGTGATCGAATTGATGCCTCTTTAT TCCTTTTGTTCCCTATAATTTCTTTCAAAACTCAGAAGAAAAACCTTGAAACTCTTTGCAATGTTAATAA GTATTGTATAAGATTTTTATT >gi|3450483|gb|AI100522.1|AI100522 34897 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91G2XP 3', mRNA sequence CCGGCTCATATATTGGCTTACTACTCTCTGGCTGGCCAGAGAACAGATTGTCCAACAACTGTTAGAGTCC TGAAGGAGCCAATATGATATGACCCAAAAAACAGGTTTGTATATAAAGATTTTTAGTCTCGAGTTTTGGG GTTTCCACAAACTGTGTACTATACTACTTTGGTTCTTTTTTTGTTTCATGTTGTGTCGTCGATGTTTTTG GGAGATTACATAGAGTCAGTCTTGTTTGTTGTATGGTCATTACTTCTTTATTTTTCCTCAGGGGTCTGTT TACTTTAATTTCTTTAATAAAACCCCGAAGATTTTGAGAG >gi|3450482|gb|AI100521.1|AI100521 34896 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91G18XP 3', mRNA sequence CAACTGCTCTCTTCCAATATCTCAGGAGGAGCCGAGTTCCCAGCCGCATCCAATAGTTTTAAAGCATCTT CAAACAACCACCCTCCCTTTTTCAGAAGATATANCGGTTACGGACCCATGATTTTCTCCAGAAGATGGCT TCTTCAACAACAGTGATATCTATGGTGGCTTGTAATATCCAAACAACAGATGCATTGGTACTTTGACTAA CACAGTGAAAGAGAGTGTAGGCTTATTGTTCTCATTTAGGTTGGTTTGGTCTTTCATCTTTGTATAGAAA CCTCAGTGATATGAGAGACCAAAGGAGTTTGTGATTTGCTGTAACCTACGGTCTACCGACCCATAGACAC TAGATTTTTGTTTTTGTTTTTTGTTTCTCTGCCCTTTTAGTGATAGTGGGGTGAAATCTTAGATTATGAT TTCTGCTAACACACTATGAAGTAATCATATTCTTTGTTTTTGCTTTTACTTTGATAACGATCTGTTAATA G >gi|3450481|gb|AI100520.1|AI100520 34895 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91G15XP 3', mRNA sequence TAGTTGAAGCTGAGGATNCAAGGAGCTTTGTAGTGGGTTGTCCCGAGCCCCATCCTGTTACTTTGGAAAT CCGGGGAATCNGAAAACATGCTGGATGCCATTATGTATCCGAGGTGAAAGGTGTAGAACAAGAGTTTGAT GGGGAAGATGAAGAGGGAACGTTGTCTGGAGAGATGAGAGTAGAGTAGGAGACCTCCTCTTTGCTCTTTA GTGTACAGAAAAATAAATCCCACTTTTTTCTTCAATCCTTGGTGTTGTTTCTGGGCTTTTGAATCACACT CAAGGATCTGTTTACTGAGAGATCTGAGTTGTTGTTTTTTTGTAGCTTTTGTTGACTTACACTTGTTTTG ATTATTTGAGGTTAAGCAACGAAAGATGTACCAGAATATTTGAAATTTCCGAGTATTATAACACGATTTA CAAG >gi|3450480|gb|AI100519.1|AI100519 34894 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91G12XP 3', mRNA sequence AGCTCGAGATGAACTCCACAGNTCCTGAATGAGGACGAGCTGCGTGATGCTGTGTTGCTTTGTGTTGCCA ACAAGCCAAGATCTTCCCAAATGCTATGAACGCTGCTGAAATCACAGATAAGCTTGGCCCTTCACTCCCT CCGTCAGCGTCATTGGTATATCCAGAGCACATGTGCCACTTCAGGTGAAGGGCTTTATGAAGGTCTGGAC TGGCTCTCCAACAACATCGCTGGCAAGGCATGATGAGGGAGAAATTGCGTTGCATCGAGATGATTCTGTC TGCTGTGTTGGGATCTCTCTCTGTCTTGATGCAAGAGAGATTATAAATATTATCTGAACCTTTTTGCTTT TTTGGGTATGTGAATGTTTCTTATTGTGCAAGTAGATGGTCTTGTACCTAAAAATTTACTAGAAGAACCC TTTTAAATAGCTTTCGTGTATTGTGCCTGGATTAATATGATTGATTGTTTTGCTTTCT >gi|3450479|gb|AI100518.1|AI100518 34893 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91F24XP 3', mRNA sequence TGCCAGGAGGGGATCCACGCTTCCATTAGGAATTCCATTAGCTTTGACNCCCAAGCTCCACGAAGAGATC AAGCTGTCTTCAAGAAGGNTATGAGGGAGCTCCCAAGTTTTTGCTCCCCAGGCTCAGTGACTTCCAATTC TTTGTTGGGGAGGGTATGCATGATGACAGCACTTTGGTCTTTGCTTACTACAAGGAGGGTTCAACTAACC CAACATTTTTGTACTTCGCTCATGGTTTGAAGGAGGTCAAGTGCTGAGAGAGAAGCTCTCGTTGGGTTAC TGTGGTCGGTCGCAGCGACTCTCTAAGTTTATGTTTCTTTATATTGTCCTGTGTTTCGTCGTCGTCCCCT ATTAAAATTACCTGCCAGTTTACTTTTCTCTCTTCTTGTTTTCTGTGTTGGAAGATTCTCAAGTTATTTA TTCCGCAAAAAACGGTTTATCATTTACAATTAGTTGAATTTTGGTCGTTACTTTTTGTGTT >gi|3450478|gb|AI100517.1|AI100517 34892 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91F19XP 3', mRNA sequence GGGGAAGTTACTGCCGCCACGGCTGCTGCTACAAAGGTTACCATGGCTGCTCAAGGTGTTGTTCATATGC CGGAGAAGCGGTTCAGACTCAGTCTGGTCACTAAATCTACATAATATATCAACCACCATGAGTGTACGAT TTCATTTATATATACACTTACGTGTGTATGTGATATGACAATACACTTACGTTTGTAATGAAGTGCCTTA AGTTTAAGAGGAGAAACTATCGGAATAAAGTTTCATAATGTAATGCCTTTGTGTTTATTTAAGTTGTTAT TTGCGATGTTTGCATAATAAAGTTGTTTCTAGTTGAAGTT >gi|3450477|gb|AI100516.1|AI100516 34891 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91F18XP 3', mRNA sequence GTCTCNCTTCTGAGCTTAANCTCGCTGGCTCTTCCCTNCGTTNTTTGCGACGTTTCCTCTCTCCCCTGGT TTTTCTACTGCGAAATCGGAAAGGTTCGGGAGTGACTTTTCNTTCTCGGAACTAAGGATGCTGAAGCCGC CGTTGCGAAAGCTGTTGACGCCGGAGCTGTGAAAGTGGAGGTTACGGAGGCAGAAGTTGAACTGGGATTC AAAGGAAAAGTTACGGATCCTTTTGGTGTCACTTGGATCTTCGCGGAGAAGAAGACCGTGATCACCGACG AGAACAAAGAGGTTTAGAATCTGTCGTCGGATCTAATTCTTCGTCGGTTTCTGAACAAAAAAAACTATCT ATTATCCTAGGTTTATGCTTTTATTTTGTCTTTTGTGGAATCCGGTAATCAGTAAACCGGATCGAGTAGG CTAATGACTTTCGGATTCT >gi|3450476|gb|AI100515.1|AI100515 34890 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91F15XP 3', mRNA sequence TTAGATGNCCGATTCATCAAGCCCGNTAGCGTCAACCATGACCCATCTTCCCAAACNACAAACTGACGGG CACAGACTTTGGTTACCCAGGTGGGTTATGGTTCGACCCGTTGGGTTGGGGATCCGGTAGCCCGGCTAAA CTCAAGGAGTTGAGGNCCAAGGAGATCAAGAACGGAAGGTTGGCTATGTTGGCAGTGATGGGTGCTTGGT TCCAACACATCTACACGGGCACTGGTCCTATTGATAACCTTTTTGCACATCTTGCTGATCCTGGTCACGC CACAATCTTCGCTGCTTTCACACCCAAGTGAGACAACGAAAAAGGGTTATGGGGAGGTGAATGCGTTTGT GTGTGATCATGTTTGTACAAATATCATTTTGAACTTAAAATTATTATGTACTTTATATAAATTGTGGTCG AATGCAAATTAAGGTTCCCCGT >gi|3450475|gb|AI100514.1|AI100514 34889 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91F14XP 3', mRNA sequence ACGCGCCAATGCTTTTGANCTCATGTATGACCANGTCAAAGCTCTTAAGAATGGTATANCCGTCGAGAAA CCGATTTATAACCATGTCCACTGGACTTCTTGACCCTCCGGAGCTTATTCAGCCCTCCTAAGATTCTTGT CATCGAAGGTCTTCACCCAATGTTTGATGAGCGAGTAAGAGACTTACTAGACTTCAGTATCTACTTGGAC ATTAGCAACGAAGTCAAATTCGCTTGGAAAATTCAGAGGGACATGGCTGAAAGAGGTCACAGTTTGGAGA GCATCAAAGCGAGTATCGAAGCCCGAAAGCCCGACTTCGATGCATTCATCGACCCGCAAAAGCAGTACGC GGATGCGGTCATAGAAGTGCTTCCTACGACTCTGATCCCAGATGACAACGAAGGGAAAGTGTTGAGAGTG AGATTGATAATGAAGGAAGGTGTTAAGTACTTCAGCCCGGTTTACCTGTTCGATGAAGGTTCAACCATCT CGTGGATTCCTT >gi|3450474|gb|AI100513.1|AI100513 34888 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91F13XP 3', mRNA sequence CACGGAGNATTTGATTCTCTTCCCGAACAGGCCTTTTACTTAGTGGGTAACATCGATGAAGCTACTGCGA AGGCTACGAACTTAGAAATGGAGAGTAAATTGAAGAAATGACCTTAAATCTTTGTNTACTGACTCCGAAT CGAATTGTTTGGGATTCAGAAGTAAAAGAAATCATTTTATCTACTAATAGTGGACAAATTGGTGTATTAG CAAACCACGCGCCGATTGCCACAGCTGTTGATATAGGTATTTTGAAAATACGCCTTGCTAACCAATGGTT AACGATGGCTCTG >gi|3450473|gb|AI100512.1|AI100512 34887 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91F11XP 3', mRNA sequence CCGCGGACCACAGAGGNCTTACTTGNCCACTGAATCCAGTCTTTNCACCGTGGATCCCCTCGTCGTGACA CGGCGAAAATCGAGNTGCCTTTNCACACACAGACGCGTTGCTTTGGGTAGAGTACGAGAAAACGCGGAGG CCNTGTAGCGTTTGCGAGAGCCAACCGGTGACGGAGTTTTCAATGCGATCATATGGGATGTTGTGGTTGA TCCCATCGTTTCAAAGCTGTGGACTTGGGAAGGCGGTGATGGAGCGGTTGATTGAGGATTTACAGGTGAA AGGGATTTGTAACATTGCTCTGTATTCAGAGCCTCGAGTTCTCGGGTTTTATCGCCCGCTTGGGTTCGTC TCTGACCCGGATGGGATCAAAGGAATGGTTTTTATACGCAAACAGAGAAACAAGAAATAAAAAGTTTGAA ACTTTATAAATTTTAATTTCGTAAATGCACAGATTACAATGTCTCTTTAACTACACTTTCTTGTACAAGC TAAGAGAGTAATGAGAAGCACTTCTTCGTCT >gi|3450472|gb|AI100511.1|AI100511 34886 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91F10XP 3', mRNA sequence TCCATTGCCCCCAACCACAGTTGTGACTGCGAAGGCCTCTTCTTGCTTGGGGATGTGTGGAACCTATTCA GGCTNTTCCCGCCAAGACTCCAGGAGGAATTTCATCTCAAGAATGCGCCTTGTGGATCCATTGCATGGNT CCACTGTTGCTTGCACTGGTGTGCTTTGTGCCAGGAACACAGGGAGATGAAGAATCATCTTTCTGATACA GAAGCCTCATCATCAACTACTATGGATCCTCCCCCAGTTCAAGAGATGAACACTGAGGAGAGAAGAGACG CTTCATCTTCTTCGTCCTCATCCCCATCATCTGCCAAAAGCCAACACAATGATCTCGAGATGGTCCCTCT ATAGGAAACGTTCCTTATTAATCTCTGCTGCTTATGCTTTAAGCTGTTTTTTCTGTGCAGAGAAGTTTTC GTACCAGATGACTCTATTGTCCTTAGGTTTTAAATATGCAAAAGTTTGTTCTAAGAACAAGTTCAATAGT ACTCTTAAGTTTTACAGAACTT >gi|3450471|gb|AI100510.1|AI100510 34885 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91D6XP 3', mRNA sequence CATCTCTTCCGTCGACTTGCATTGTGTTGGATNCCTTAAGAAGATTGAAAGATCTATTCTAAAAATTAGA GGTGTGGAAGAAGTGGTGATGGATTATGAATGAGAACCAAGTGACGATAAAGGGAGTGTTGGATCCGCAA GCAGTGTGCAACAAAATCAAGAAGAAGACTAAAAGAATGGCCAAAGTCCTCTCGCCGCTTCCGGCAGCTG AGGGAGAGCCTCTGCCACCAATCATAACCTCTCAGGTCTCCGGCGGCCTCACCACCGTCGAGCTCAGCGT TAACATGCACTGCCAAGCTTGTGCTGACCAGCTCAAGAAGAAGATTCTCAAAATGAGAGGGGTCCAAACA ACTGTGACAGAGCACACCACGGGAAAAGTAATAGTGACTGGGACAATGGACGCTGAGAAGCTTGTGGATT ACGTCTACCGTCGGACCAAAAAGCAAGCCCGAATCGTACCCCAACCTGACCCGGAACCTG >gi|3450470|gb|AI100509.1|AI100509 34884 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91D3XP 3', mRNA sequence GCAAACCAGCCATGCTTTCTAACCGGATCAAGGAGAGGGAAAAAATTCTTAGGGCTCAACCAGGAGCAGT GGGATCAGCATAACCAAGGCCACAATATGCCTCCCCCTCTGCCACCGCAGCAGCACCAAATCCAGCATCC TTACATGCTCTCTCATCAGCCATCTCCTTTTCTCAACATGGGTGGTCTGTATCAAGAAGATGATCCAATG GCAATGAGGAGGAATGATCTCGAACTGACTCTTGAACCCGTTTACAACTGCAACCTTGGCTNTTCGCCGC ATGAAGCATTTCCATATATATATTTGTAATCGTCAACAATAAAAACAGTTTGCCACATACATATAAATAG TGGCTAGGCTCTTTTCATCCAATTAATATATTTTGGCAAATGTTCGATGTTCTTATATCATCATATATAA ATTAGCAGGCTCCTTTCTTC >gi|3450469|gb|AI100508.1|AI100508 34883 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91D2XP 3', mRNA sequence CCCGCGATGACATCAGAGGATTGGTGGAGAAGGCCTTTGAGCAGATAGGAGGAATTCCTGACCGTGCAGT GACACTGACGTTGGACATCCAAAAGACATACCGGTAAGTTGNTGAAGGACTTCAACAAGGGTTTGGTGAA CAACAAAGATCTCGATCAGCTCAAGGCTGATGTCGAGAAGTTCTCGGCGTCTTATGAGATGCCTGGATTC CTCATGTCTGAGATGAAGTACAAGGATTAGAGATCTTTCTCTATATGCAAGAGTAATCTTCTATTATTAT CTACCATATATATAAAATATGCTTTTGTAGGATCGCCTTAAAGGCGAAGAGATGAAGATGCAAACAGTAA AAAAAAAGGGTTTTCTTTTCAGCTATTTCTTCTTGAATGTTTTTTTTCTTTTTCTTTTGGTTTCTTATTG AAATTGTTGTATTTTTGTTGGCTTTTTTCTAATAATATCAGCGAGTTTTTCTTTC >gi|3450468|gb|AI100507.1|AI100507 34882 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91D1XP 3', mRNA sequence TCCCCTCCTGNCAAAGTTATTGATTGTCCGGTTGGAAACTTGAAGAAGNTTGACTTTGCCAGCTCGAGTT GNCTAAATTTGTGGGGTTAACTGGATTTCCAGGATATTGTCGAGGACTGCTTTGCTTTGCTCGCGTATGA AAGCCTGAGGAATCATCGGTCTGGTATTTCCTAGAAGACTCACAGAGGGAATTAGTGGCTGATGCGGTGA ATGCAGCAATACTATCAACAAATCCAAATAAGAAAGATGTGCAGAGAAGCTGTCACTTGCAATCCCATCT AGAGAAACTGCTAAGACAGTTAACCGTGTGCTGTTTAGAAAGGCGGTCACTGAATGGAGACCAAGGTGAA ACATTCCGGCTTCGACATGTTCTTAACAACAACAGATAAAGAAGATGAAAATGGCTTAGCCGCGCATATA TTTTGAAAACTCTGTTTTTCTATGGTCGTTATCATCATAAGTGGCTTTTGTTCATTACTTGTGTGATATT ATGTTGAACTTTCCATTATGTAAAGGAGAAAGTTAGAAAAATGGGTTCGACGTT >gi|3450467|gb|AI100506.1|AI100506 34881 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91D13XP 3', mRNA sequence AGCCCAGCGATTCCGTCGTCTTGCTCGTAGAGGAGGTNTGAAGAGAATCCAGTGGATTGATCTATGAAGA AACGAGAGGTGTGTTGAAGATTTTTCTGGAGAATGTGATTAGAGATGCTGTTACTTACACTGAGCATGCG AGGAGGAAGACGGTGACTGCTATGGATGTTGTTTATGCCTTGAAGAGACAAGGAAGAACTCTATATGGAT TTGGTGGTTGATCAATTTGAGATCTGGGTTTTCTGGTGAATGATGATAATTTAAGTCTTGCGATCAAGAA ATTCCAGAAATTGGGTTGAATTTTAGGGTTTCGTTTTGTGTTGTAATTAGGGCAGCATTGTAATGGATTA ATGATAAGTACCATTTGCTCT >gi|3450466|gb|AI100505.1|AI100505 34880 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91D12XP 3', mRNA sequence CTTTCGTNAANCTTTTGACCGGGAAGACCCATCACCCCTTGAAAGTGGAAAGCTCCGACTCCATTGACAA CGTCAAGGCCAAGATCCAGGACAAGGAAGGTATTCCTCCGGNCCAGCAGCGTCTCATCTTCNCTGGAAAG CAGCTTGAGGATGGACGTACTTTGGCCGACTACAACATCCAGAAGGAGTCTACTCTTCACTTGGTCCTGC GTCTTCGTGGTGGTTTCTAAATCTCGTCTCTGTTATGCTTAAGAAGTTCAATGTTTCGTTTCATGTAAAA CTTTGGTGGTTTGTGTTTTGGGGCCTTGTATAATCCCTGATGAATAAGTGTTCTACTATGTTTCCGTTCC TGTTATCTCTTTCTTTCTAATGACAAGTCGAACTTCTTCTT >gi|3450465|gb|AI100504.1|AI100504 34879 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91D11XP 3', mRNA sequence TGAAGGTTGCCCCCAATCGGAAGAGAAGTTGNGCNCTTTCTTCCTCCCTGCCNTTAGTGCCGTTGAATTG GCTAAGGAAGTTGCTTCCTTCTCCGCAACAAGTGGATCCCTTGTGTTGAATTCGAGTTGGAGCACCGGAT TNGTGTACCGTGAGCACGGAACCACTCCCGGATACTATGATGGACGGTACTGGACAATGTGGAAGCTTCC ATTGGTTCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGTACCCTGG CGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAG CCCCCAAGCTTCACCGAAGCTTAATCCCCTTTCTGGAATATTCAGCGTTGATTATTCTGGAACCCATTTC TATGTGGTCAATGCAAATTTAAGAAATTATTTGCCGACTTAAAAGTTGAGGAACTATTGTTTGAAAGTGA AAATGTTATTCCTATCAGTTTCTCTATAATTATAGTTATCATTTCATTTC >gi|3450464|gb|AI100503.1|AI100503 34878 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91D10XP 3', mRNA sequence TCAACTCAATGTTCGNTAATGGAGCCCCTTNTCCTTCAGGTCCCGGNTAAGAGTCTAGCGGAAAAAGCAG GATTANCATCCGANNTCCCGGGGTTTTGCTGGTAAATATAGTGCTTGGAGATATCATTGTTGCAGTTGAT GACAAACCTGTGAAGAACAAAGCCGAGTTGATGAAGATATTGGATGAGTACAGTGTAGGTGATAAGGTGA CACTTAAGATTAAGAGAGGAAATGAAGATTTGGAGTTAAAGATCTCATTGGAAGAGAAAAGTTCATGAAA ATATTATTGACAACATTTCATCTCTTCCTTTTGAATCTCTCTGTTTTTTCCCCCTTTGAGAATAGCAAAA TTACAATCNTTGTCTAAATTCTCTGAATATATATATGTCTATGGGAATTTTTTTTATTAAT >gi|3450463|gb|AI100502.1|AI100502 34877 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91C9XP 3', mRNA sequence GTTTTTGCCNAAAGCCAACCAAGGCCAGCTNTNAAGNCGATNTGGGAAATNGACCNCTGCGAAGAGCCGA CTCTGGCATGATGTGACCATTGAGGATGAGATGAAAAGGAAGGCGCAAGCTCAAAGAGAGGCTTATGATG ACGATGAGGAAGATCACCCAGGCGGTGCTCAGCGTGTGCAATGTGCCCAGCAGTGATCAACATGCGCATC TTAGTGATCTCCAATATTTGCTTCTGTCTTTTCTCCTTTTCATTGTATTATTTTTGGGTCTTTTTATAGA CTTTGCCAATTCAGTGGGAAGAACCTCGTCCTAATTCAAATCCTTGTTACACCATTTTTTTTGGTTTGAG AAATAAACTTGTAGTTCTTGAG >gi|3450462|gb|AI100501.1|AI100501 34876 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91C23XP 3', mRNA sequence GTATTTTCCAACCGGCTTTAGAGCCTTGGGCTCAAGTTGGGCAACTCGACATCGTGNACCNACGTAGGTT TGAGTTATTTTGTAACNACCAAATGNNGAAANTGGNAAGCCCNCAAAAAATGAAGNATGAGNGCATCTGA AAACAGNGGACTACTCTGAATAAATAGAGGGGTTGCTGCTGATATTTATTTTTACTCTGCGGCGGAATTA GAAAATTTGAAAAACATCATGTATTGATAAGTTGTAAATATCAGAAAAAGGTGGGGGTGCAAAAATTTGT ACTTTTTAGCTTTTGAAAGAGGCAAGTTTTTCGAATGTTTGTTTGATTTGTAAACAATTTCAGAATTATA TAAACTTGGTTCC >gi|3450461|gb|AI100500.1|AI100500 34875 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91C20XP 3', mRNA sequence AAGACCCCNCNAAGATTTCATCCCCCNGTGGGTTTCCATGTCCTTNCCATCAACAGTCTCCAGTGCCAAT TGCAGTGTTTCTGTTCACAATNCCATTACCGTACCTTGGGGTTGCATCATCACTACCNAAAGGGTTCATG GGAGGGACAATCATACTTGTATTGGGAATGAGTCTTTATAGTTGGACACCNCNCGGAGCTAACTCTTCTC ATACTGATTCAGTCATTCCTTCACCTCCTCCNACATAGAGAGGGCTTNACTAAGGGGTTTTGCTTTTATN TAAAGATTTGAGAGATTTNTNCAAATTCGGTTTGTGTTTNAATAAACTTATATTTGATCATATGATGTTA ATGGAAAAGTTGAC >gi|3450460|gb|AI100499.1|AI100499 34874 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91C19XP 3', mRNA sequence CATTTAGCCNCAGTGCCTTNGCCGAATGTTCCTTTGGCCGATGAGCNCAGGTTCTTCTGTTTCTGGCAAT GCCNCCTACGTTTCCGGGTCCTCGGGNTCANTCATTCCTGGACCCGTGTCCCCGAGCTGAAGAGAGATGC TGATGCTTACGGTAGAGCTGCAGTCTAGTGAAACAGACTGCAAAAGAAAAAAGAAAAAAAAAGCAAGAAA CATATCTTGGGATTCTTTGATAGGATTCAATTCATCAATCATTTCATATTTTGTGGAGTTAGAGAAGGTC AGATTCTTTCCTCAAGTAAACCACATTGTCTTTAGATCATACATGTTCCTTTCGGTTATTCTGGTTTCCT ATTTTTATGTTGTTTGCATATTCTGAGATAAGAAATCTGTACAGGTTCATTTCTTCATTCATGTGTAAAC AAAGAAATTTTGTTTCAGCAGTTTTCCACAAGCCATTAATAATAAAAAGGAGAGATAGTTTC >gi|3450459|gb|AI100498.1|AI100498 34873 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91C11XP 3', mRNA sequence CCGGCCACTGGGTTCCTCAACCNTTCTGCGCCACCTGGCCGTTTACGATCTGGAGCTCCTTATTACGCTC ATGGATATCAAACTGTTCCCAGTCCCATGGTGGTGTTGCTGAAGGAAGACCTGTCAGACAACGTCGCCTT CCTTGCTGTGGAATTGGTCTTGGATGGTTCCTGTTCATTGTTGGATTTTTCCTTGGAGCAATCCCTTGGT ATGTCGGATTGTTCATCATGATGTTTGGAAGGAGAATCGATTACAGGGAGAAACCAGGATACATTGCCTG CACTATCGCTGCTATTCTAGCAACAATCGCTGTGATTCTGGGTGTATCTAAAGGAGCAGACGACTGGTGA TGGATCAATCATCTTGTGGGGTTACTCTAAAAATGTTTGTATAGGTTTCTTTATCGTGTGTTGTATTATC TACTTCCTTTTTTACTTACTCTATGAAGAAACAAG >gi|3450458|gb|AI100497.1|AI100497 34872 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91B7XP 3', mRNA sequence CCATTNGTGCGGATTGCACCCGACTCCCGCTCAAGTGTTGGAAGGAAGNTTGAAGAATGCCNAGAAAGGN GTACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATT GCCTNCAAGCCCCCAAGCTTCACCGAAGCTTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCT CATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGATTGTCAAATGTCT GATTTNTGAATATGTAATTTATAT >gi|3450457|gb|AI100496.1|AI100496 34871 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91B24XP 3', mRNA sequence CCCCCGTTGGAGGAGTCNTCCNTTCTGGGGGAGCTGNTCCGNTTNANGCGGNCTCCGTCGGTGATTGCTC AGGTTCCNATGCCTTCNCCCTTTCGAGAGGTCTTTTTACTGCTGTGAGCCCTATCTGCAGCCCGGCTGGA GACGGAATGGAGTTGGTTTAGATTCCATGTTGATCTCCGCAAATCCTGAGACTGAGAGGCCTCTTTATCT TACGTAGAATAACNTCCCTTTTCTCTTTCTTTTGGACAACTATGGATATGAGACATTGTGCTATTCTCTC GCAGGGAGGTCTAGGCATATCCTCCCTGCCTTAAAGAGAGCTTTTATCTTAGTAATGTTGAACTTTATGT AGTACTTATGTAGGAGAGACTTTATAATTCTAATGCTTTATTCTGGATCTT >gi|3450456|gb|AI100495.1|AI100495 34870 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91B10XP 3', mRNA sequence GTGTTGAATTTCGAGTTTAGAGGCCCGGNTTTTTGTGTACCNTGAGCNNCGGAAACCACTCCCGGATACT ACGATGGACGGTACTGGACAATGTGGAAAGCTTCCATTGTTCGGATGCACCGACTCCGCTCAAGTGTTGA AGGAAGTTGAAGAATGCAAGAAGGAGTACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCG TCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATTTCTTTTCTAA AACATTCTTATGAATTATCTCTGCGTCATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGAC AATTTCTATCGGATTGTCAAATGTCTGATT >gi|3450455|gb|AI100494.1|AI100494 34869 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91A18XP 3', mRNA sequence CCGGATGAACCCCCTGGTAAAGCTNCCTTTTTGGAGTAGTGCCAATGTGCATTGGGACGGGGATGGGTGC AGCACTGTGTTTGAGAGAGGAGATGGAGTTGATGGACGTCGCAACGCAAGGAAAGTTGAAGCGCAAGGTC TTTTGTCCAAGGACGCTCGCTAGAGAGGACCATGCACCAAAACCGTTTTTCACCTCACCTCTCTCTTTTC TGGTCTTCTTGTCACTTTCTTCAGATATTATTATAGTTTCGAATAAAGCACACAACCAATGTTTGCCTGA GTCTTGTGTTGTTCTTGACCAGGTCATGTGTTTAGTATTTTTTTTAAGTGAAGGGGGATAATCTTTAAAT CTTTTATATGTAAGAATATTGTTCTTCTCGAATTTCATCAGTTGTTGCTTCTAGAAATTTTAGATTTTTT GGGTGGCAGCC >gi|3450454|gb|AI100493.1|AI100493 34868 Lambda-PRL2 Arabidopsis thaliana cDNA clone 91A13XP 3', mRNA sequence TGAGATGAAGTNCATTTTGCCTAGAGGTGGACAGGATCTTGCGGCCGAGTGGATATGTTATAATCCGAGA ATCGAGTTATTTCATGGACGCAATCCACAACGTTAGCGAAAGGGATAAGGTGGAGTTGCCGGAGAGAGGA GACTGAGTATGCAGTCAAAAGTGAGAAGATTCTGGTTTGCCAGAAAAAGCTATGGTTTTCGTCAAACCAA ACCTCTTGATGAGACCACCTGTATCATAGTGTTTATCATCTCCTGTGATGCACACTACAGAGAGAAGGAT CTAGTCCTTTGAGTCCAAGATATAGCTCTATAAACAATCTCCTTTTTTTGTTCTCTTTAATTTCTTGGGT ATTTCACGGTATAGATTGATATTATATATTTTTTAATTATATTTTTAATATATAGATATATTAGTATGTG GTTTAAACACT >gi|3450453|gb|AI100492.1|AI100492 34867 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90P19XP 3', mRNA sequence TTCGTCCTGGTCCGTTCCGGTAACATTGGCCNGCAGGNAATCATTTGGTCACCCGGNTATCATATGGTTC AACCGGTTCAAATNCGGGTCAGTTCTTCACAATACCNTCATGTNCCAATGGGATACCACCAACNTCAGAC TCATCAGATGGCTGGTCCGGGTCAAGTTATATGGTGGAACGGTTAGGCCGGTTATGATGGCCAGTTGATG GAATGAACCGGACGGGTTATTATGGAATGAAAACACCCGGTCCGGTTCAAATGTATCAGCATCACACTGG TATGGTTGTTCCTGGTGTAGAAGAACAACAACAATACAGAACCGAAACGGATTCGGATACGGGTCGGGCT TCTTAGCTGTTTGAAGAAGAAATATGAAAAATTATCACATCCGGGGTTTTCGTCTTTTCATTGGAGTCGT TCTTATTCGTTACTGTGTGAACTGTGTATTATTTTTTGTTTTACTTTTGTAAAATTTATTTTTGTGTGTA ATAATTTTGTATTACAAAAT >gi|3450452|gb|AI100491.1|AI100491 34866 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90O6XP 3', mRNA sequence TGGACTATTNGCCNTCACTGANTTCCGCCGGNCGGTGAAGGAATAAGAGTGCTNCCCTCTTTTGTGGGTC ATTCTTTCCCACNTGGGAGTGTATTGGACAAATGGCTAGGTTTCTAGGTCTTCTTGTCCTTCTTGTCGCA GGATTCTTACGCCGGTGAGATGTGACCGGTGTGGTCATGCTTCTACGGCGGAGATGAAAGATCAAGCTCA TCGTCATCAACATCACCAACACTCTTCTACTACCATTCCTACGTTTCTTCCTTAATTAACACTAATTTTT GTTTTATTATGGCAATAATTAATTGCATAAAAGTTATGTAAAGTGAGTTTAATTAGGATTAGAGAGATCT TTTAAAGTTTTTCTCTCTTTTCTCCTTGTTGTAATCCAGTGTATTTAATCAAATCTCAGATGGAGTTC >gi|3450451|gb|AI100490.1|AI100490 34865 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90O24XP 3', mRNA sequence CGGATCTATGGGGGTTAGATGAATGGGGTACTATGTAGGTTTTACAAGGAAGNGAGGAGCAAGTAAGCTT CTGAATGAGCAAGAGGGTTTCATGGACGAAGTACTAATGGAGGATGAGACCAAAGTTGTTNTTAACGAAG CAGAGAGAAGAAATGATGAAGAGATAATGATGATGACGTCGATGAAACTTCCAAGGACGTGTTCGCTGGC TCATTTGTTGGAAATGGATTACATGGGACCCGTCTCTCACATTGATAATTTTAGTCAGTTCGATCATCTT CATCAACCTGATTCGGAGTCTAGTTGGTTCGGGGATCTACAGTTTAACCNAGNCGNGATCTTAAACCNTC ATCNTCAAGCTATGTTTAAGTTTTAGTGATGGGGTCNGT >gi|3450450|gb|AI100489.1|AI100489 34864 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90N7XP 3', mRNA sequence GGAAAACCCCGTGGAGCTTGGAGCTTAGGTGAGGATCAATTCCAGCTGGAAGGAGCTTTTGAAGTGATCG ATGGTCCCTAGTTGTAAATAAAGCTGTGTGGGATTTTGCCTGTTGGGGGATGGTACAAGTCACACCTCAA GCTCTATGCATTGGTATCTCATGAGCCTCTCTTCCATAGAGAGTTTCTCTTTTAATTTTGTCGAAATAAA AAAGGTGTGATGAAGTAAATAGAGGTATAATAATATCTATCTATTAAGTCTTGTTTTGTTCTTTCATTTT TGTATTTCTTTTCTATTTAAAAGACAGTTTATTAGTCTTCTGAGCTCTCTTTTTGATCTTTGTTATAGCG TATCATCACCCTCGAAAGTGTAATGTTTTGTACCCCCAAACTTGTTTAGCATTATAATAAAGTCTCTTTG GAACT >gi|3450449|gb|AI100488.1|AI100488 34863 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90M3XP 3', mRNA sequence CCTATGGGNCAATGTCGAANGAAAGCATAGATCTTNGAANGGGTTTNCGTTAGATTTTATGTTGTTGTGA TATCAAAAGATTATNGGATTTGAAGGTTTTAGGTTNCCTGAAAGGTTTCTAGGTTTGCTATATATNCCTT TTGTACAGAGTATCTTGAACTGGTCAATTCGGTTACTTTGCCCCCATGTGAGATGCTTATACATAGAAAA GGAAATAGAT >gi|3450448|gb|AI100487.1|AI100487 34862 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90M17XP 3', mRNA sequence TACCATGTCATCCTGGGCCTTNCGATAACTGGGTTCAATGCCTTGNCAGACGAGCTGGTGCAGAGACCAT CCCNGGATAAGGGAGTACTTTTGTAGAGCCCNTAACAAAGTCTACTACAAACCTGCAAAGCTTGAGGTTG TAGAATGCGGAAGAAGAAGACTGCACTTAACTAGAGGTAAGTAGACAAGGAATTATATAGAGAGAAAGAG AGAGAGAGATCAAGAGCCGCCATTAGAGGTCTTTATCGTCCTGTACTGGGTTGTCTTAGTTATTTGCTGT GCTTTTTGGTTCGTTTTGGTCATTTTGTATTGTATTAATTAATCTCCTCTGATCACAATCGGTCTTGAAT GAAATCGCTACCCTTTGTATCCAAAAATACCATTGTGGTATAACTTCCACTATTCAATTCAAAATCCACT CTCCAACT >gi|3450447|gb|AI100486.1|AI100486 34861 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90M15XP 3', mRNA sequence CCGCTTAACTTTGCTCCNTACGCAAGAGNCCAAGGAGAAAGAGCTAGCAAACGGGAGGTTGGCCGATGTT GGCATTCTTAGGGTTTGTGGTTCAACACAATGTGACTGGAAAAGGACCATTTGAGAATCTGTTGCAGCAC TTGTCTGACCCATGGCACAACACTATTGTCCAAACCTTCAACTAAAGAGTGAAGACAGACTTATGATCTC ATACCTATCTATCTTCCATCACTTTCATGTCTGTCTGTGAGTGTGTTTCATCTTAGAGTTCTTGGTTTTT GAGCTTGAATTATTGTTGAACCGTTGTAGCTCCATGAACAAATTTGGAATCTTCAATGTACAGAGGAACT AAGTTAATCAACATTGTTGTACTCTT >gi|3450446|gb|AI100485.1|AI100485 34860 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90L23XP 3', mRNA sequence TACCCCCCACTAAGGAACCTNTTTGACGGGCGTCCACATNTCAGTGCTTGGGTTGCTGACATCACTTCTA GGCCTTCTGCTAAGAAGGTTCTTTAAGTGNCNCNCAAACTGTTAATCAGNAGATTGAATAAAGTGGCGAT GNCCTCATTGCCCTAATTCTCATAAACAATAAAAGTGGCGATGACCTAATTGCCAAATTCTCATACACTC TGNGATTTTTTTGTGT >gi|3450445|gb|AI100484.1|AI100484 34859 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90L20XP 3', mRNA sequence TTTCAGCCCTTGNGGGCTTTTTGCAACCATCNGCATTGCCGGGGTTCCAAATGGGGCCAATTGGNGGAGG CACTTCACAGGCTTGTCCCCACACTGCCAACTGGTCCTTGGGGGCTCGCTTANCCGTGGATTCAGTGCAT AGAANCCCTAANCCGTCTTCGCATTTGTTTATNCCNCCAATCCCCAAATATTCCTATTTCGATTTGTTAT GATTAAATCAGTATTCTCTCTGTATATCTCAGTATCATTTCCGTCGTCAGTGTGTAATTTCAAATTATGT ATTTGCCATGTACAGAAGCTTNTAGAACTAAAGTTGAATGTATANAAGGTTTGTATATTATGATGTAAAC TTGGGAGTTGTCAATCTCATGGATGGTTTACTTTTTGT >gi|3450444|gb|AI100483.1|AI100483 34858 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90L19XP 3', mRNA sequence CTTTGATCTTGAACCGNCAAANCATTTGCTGCATGCATATGGNTAATTTGGAAGAAGCTGAGACTCTACT ACTTGAAGGCACTCAACCAGGGATGCTAAAGGACCCCAGAAACTCTTGCAAACCTCGTTGTATGCAGTCT TCACGTCGGGAAATCATCTTCTCGCTACCTAAACCAGCTGAAACTTTCACATCCAGAACACGTCCTTGTG AAGCGAGCAGCATCAGCTGAAGATAACTTCGAGAGAGCACTTCAATCTTTCGCCTGAAGTACCTCAAAGT CCATGGAATCAATTTGCCTTATGATCTACCAGAAGAACATCATATTATTACCGACCCTATCTTGAAATTA TCATAGATAAACAGTTTTTTCCATTGGATATGTTGCATTTTACTTTGATTTCTCACTGAAGCTTTTGTTT TCATTGAGTTTCGAATCCAAC >gi|3450443|gb|AI100482.1|AI100482 34857 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90K7XP 3', mRNA sequence ACCGTCAAGTCCGCGTGGTTCTCCAATCCGATCTAGTCNTATGGAAGGATCCCGNGCCCCGAGCCCTTCA TTGAACGTTTATTAGGATTACGCCCGACCATCCCTTGAGGTTCGGAACCGAGTTCGGGAAGTCGATGGTC AAAATGAGTCTCATAGAAGTTAAGACTGGATCAGATGGGGAGATTCGTCGGGTTTGTTCCGCCATCAACT AAGATTTAAAAAAACACAAATGTGAGCTTTGTTTTTCATTTATGAATTCGTTAATTAATAATCACTTGTT TTAAATAAAAGCTTGCTACAGCATTTTGTGGTCGATGGTTACGTTTTGATTTTCAAGTGTAAGATTGTAC TTGTAAACAAAAAATGTATTATATAAAAGTGTTATTTGTTTCTTC >gi|3450442|gb|AI100481.1|AI100481 34856 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90J7XP 3', mRNA sequence TAAAGTTTNTTGGATTCTNCAGCCATNGTTTGTGTGGAACAATCCCCAACAAACGGACCTTTGCTCCACA TTCCTTTACAGACTTTGAGAACAACCCCGAGGTTGGGAGGGACCCGGAATTACTCGGTCTTGCAAGCTAC GACACTAACTGCACCTGAAAAAATTGGCAAAACCTGAAAATGAAGAATTGGGGGGTGACCTTGTAAGAAC ACTTCACCACTTTATCAAATATCACATCTACTATGTAATAAGTATATATATGTAGTCCAAAAAAAAAATG AAGAATCGAATCAGTAATATCATCTGGTCTCAATTGAGAACTTTGAGGTCTGTGTATGTAAAATTTCTAA ATGCGACTTTCGCGTACTGTAATGTTCGGTTGTGGGATTCTGAGAAGTAACATTTGTATTGGTATGGTAT CAAGTTGTTCTGCCTTGTCTGC >gi|3450441|gb|AI100480.1|AI100480 34855 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90J19XP 3', mRNA sequence TGTTAACCAGCTGGGGTTCCCATTTGCNCTGATCTGGTGGAAGGTCTGATGAGGTTGATGGAGGGAGAAC ATGTCGGTCCATTTAACCTTGGTACCCCCGTGAATTCACCATGCTCGAGCTCGCTAAGGTGGTTCAAGAG ACAATTGGACCCGAACGCAAAGATAGAGTTCAGACCAAACACAGAGGACGACCCACACAAGAGGAAACCA GACATCACAAAGGCCAAAGAGCTTCTTGGTTGGGAACCAAAGGTGGCTCTACGCCAAGGACTCCCACTTA TGGTCAAAGATTTCCGTCAACGTGTCTTTGGCGACCAAAAGCAGGATTCTTCCACCACTTCATCATCAAC AGAGTAACTGTCGCTGGAGATTCTCGTTTCTCTTCGTTTTCATTTTTAATTTTGATATTTCTATTCCTGT CAATGTAGTGATATTGAAACCTCACCGATTTTAAAGTTTT >gi|3450440|gb|AI100479.1|AI100479 34854 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90I22XP 3', mRNA sequence GAAGAAGCCGAGGACAAGCTCANCTACGTGTTTCCAATCTTNGGAAACACGTCCCCGNTNCCGGTTGGGA GATTGGTCTCGATCTTGGAAGGATTGTTAGGGACAAAAGCTAAGAAGCATCTTATCAAAATGCCAAGAAA CGGTGACGTGCCTTACACGCATGCTAATGTGAGTTTAGCGTATAAAGATTTCGGGTACAAACCGACGACG GATCTCGCGGCGGGGCTGAGGAAGTTCGTCAAGTGGTACGTTGGTTATTATGGGATTCAGCCGAGGGTAA AAAAGGAAACTTCTCACGCCGAAGATTCCGCTTAATAATTTTCTCTCTACCACCATCTCTCTCATCATCA CATGCTTGTTTATTTTTCTTAC >gi|3450439|gb|AI100478.1|AI100478 34853 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90G12XP 3', mRNA sequence TTACCCCTCGCCCAGTTCAANTCCCCAGACTGGTTTCTTNACCAGCCAAAAGGATTACCAAGGATGGGAA ATACTCCCCAAGTTGTTTTCCCAATGCTCTTGACATGAAGTTGAGAGATGATCTTGAGCGTCTCAAGAAG NTCAGAAACCATCGTGGTCTGAGGCACTACTGGGGTCTCCGTGTACGTGGACAGCACACCAAAACCACCG GACGCCGTGGAAAGACTGTTGGTGTTTCCAAGAAGCGTTAAAAAGAGTTTGAGCTTGGTTCAATGGCTTT GTTTTGTTTTTTGTATTGTTGTNTTTTGCAGAAGAGATAGTTTAAGAGATGTTGTTTCATCAAAAGACGG TCTTAGCTTTTACAATATATAATTGAATCC >gi|3450438|gb|AI100477.1|AI100477 34852 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90G10XP 3', mRNA sequence AGTTGGGANAAGAAGTTCNCCCNGCCATACCCCGNGGTTGGACNGCCTATACTGCTGCCACTGTCGATGG AAAGAATGGCCCCCCTCATGCATGGGCGGAAAGCTTCCGACCAACGAGCGAACTGATGATCTCTACTTCT ATGCGGTCAATTCAGCTTAATGCGTGTCAAGATTTGTGTTGTGTGTGTGGCNCGTTAATATTTATTACTA TCCAATAAGGAGCCCTAATGGTTTGCTGTATTATTACAAATTATCTGTGTGTGGGACTCGTCGAGCTTTT TTACTCTAATGAGGCCTACTCATGGTTGTGTGAGTGGTTCCTCAAGTATCATTGTCCAATAAGGAGCCAA TTTATTTATGGCTGGCTGTTTTATTACAAATTATGTGTATGTGTTAATAATTAAAGATTGAATTATCTAC >gi|3450437|gb|AI100476.1|AI100476 34851 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90F8XP 3', mRNA sequence AAGGAGATTGGATGCNACCAGGGACCATCATGNCCCCGGTCCCTGTGTGAGATTTGCCNCCAACAGTGAG TCTTATGCTTCCAGGGTCTGAAGATGGTACCAATCAGAATTTGGCAAACTGGACCGGTGAATCCCTGAAG AGATCCAGCGAGTCAAAGCCGAAGCAGAGTGTGGATGAGGTTGCTCGTAAGATTGAAGGCTTTCACATTA ACAAGGAAGGAAAAACCGCAGAGAAACCATCTGATGCTTAAACCAAGAAAAGAACCAAGAAAAATGGCTG CTTCTCTTTGTCTTCTTACTGTGTTTTTACTTCCAGACTGAATATACGGAAATTCAAAACAAGTGTTTGA AAAACAGTCGTTGTCAATCTTCATTCGAGTCAAGTTTATGGATGTGGCTGAAAATTTACG >gi|3450436|gb|AI100475.1|AI100475 34850 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90F16XP 3', mRNA sequence ACAAATCTTCCCGGAAAGTCCCNGTTTNGTTAAGCTGGGTGAAATCTNCCTTGAGCCAGCCNGCAACAAC AATTTGGAGGGATTATGGTAACAACAATCGTCGAATCCGATTCTCGTGGACGAGCTTCTGGATTCGAGTC TTAGGGAGCAGTGATGCCAAGTGACGGAACTGGCCACTGAGTTGTACACAGCAAGATCCGGCAATGAGAC CAACGATGAGAGATGCGGTGAAACTGTTGGAAGATGTGAAACATCTGGCAAGAAGCTGCTCCTCTGATTC AGTTCGGTAATCTCGTTACTTTGTGCAGAGCAGGAGGAGGAAACTAAAGGACTGTTATCAGTGGTAACGT AACTGGGCTTACTGGTAATATAACTGGGCCAATAATGTAAAATATGGCTTATTGAAGGCCCAAATATGAC GGCCCTTTAATTGTAACCGTGTTTGTTTGTGAAATAAAATCTCGTTTATC >gi|3450435|gb|AI100474.1|AI100474 34849 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90E8XP 3', mRNA sequence GAAAAGCCTAGGTTCCCCCAGAATGCTTAGATCTATGCCNTAATAGCCCATCTAAAGACGGCCCAAGATC CATCATCCATGGATTGTGTTTCCTAATGGTTTTGTCCTAGGTCTGATAGCTGTTTCGCTAGTTTGACTTG AAAAAAGCTCATCGTTGAAAAAATTGTTTTAAACCGTCGGTTTAGGGACCCACTTGGATCAAATCCGGTT TTCTGATTTGAAATTTTCGTCGGTAAATCAAAAATTGGTTTCTGTATGTGTTTTTGCCGGATTTGTTGTT GTACTTTTGGAAAATTTTGGGCTAAAAGAATAATTTGGTGCTCTGTTTCTGTCTTTTATTCTTTCTCCAA TTGCTAGCTAATATTCGGAATTCTGTTGCTGTGAGCTTAGTTAAACAAGAACAAAATGAAATGAAAATAT GTTTATACT >gi|3450434|gb|AI100473.1|AI100473 34848 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90E3XP 3', mRNA sequence TGAAGCTGCTCCAGTTCCTTGTAAACCGTGTCCTGCCCTTTTTAAGACTCAAGAAGGNTGATGGTGGAGA TGATAGGCCCCAGCAGCAGCAATTCATCTCAGGGAAATGAAAAACAAGATTAGATGCGAACAGTAGATCA GGTACTGATCTCGACGTGGTGATAGGCGAAGCAAGAAAGGATACAAACTAAGGATATCAAAGTAAAATAT ACTATAGCCATGCTGGTGGAATAGGAAAACAAAGTTCTTGAAGCTTAACAGAACTAAGAAATCTCTCTGA GTTTTGAGTAATCTCCTGCATTTTCCGGTTTTTGCATTGTAATGTGTAACAGTGTATTTTACAATTATAC GTTTAAATGAATTTGGGAATCACAAGT >gi|3450433|gb|AI100472.1|AI100472 34847 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90E2XP 3', mRNA sequence TGGACGGGTACTGGNCAAATGNTGGAANCTTCCATTTGNTCGGATGAACCGACNCCGCTCAAGTGTTGAA AGGAAGTTGAAGAATGCAAGAAGGNGTACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCG TCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACTGATGCTTAAATCCTTTTCTGG AATATTCAATGTTGACTATCCGGAACCCAATTTTGTATGGTCAATGTAAATTTAAGTAATTATTTTGCCA AAGTGAAAAAACTGAAGGTTTGTTTTTCTATCGTTTCCTCTATAAAAATCTCTATTCATATC >gi|3450432|gb|AI100471.1|AI100471 34846 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90E16XP 3', mRNA sequence GAAAGATNCCGTGGAGATACCCATCNTCAGGNGCNCGAGGAAATGNTTCCAAGGAGGATAGATTTGGAAC CAGGAGATCTTGAGGGATACCGAGTACAACCTGGAGCCAGTCTGTTGATGCTCTTTGTGGGAGTTAGCCG AGTGGGATCCCAATCCTAGAGGAGCTTCCAGGAGATGGGCTTCTGTGATGATGTGACGAACAAGAGACTG CTGAAGAAGAACAATGGAAGCATCAAAGGCGTGGTAATGGATCTCCTCACAGGGGAGAAGGAGGCTTGAT GAGCTCTTTGGTTTCTGGCAACTCTTCTCTATCTCTCTTATCTATCAGGAATAATTATGTTTTATAAATA AAACCTGATCTCTTAGTTTGGTTTCGTGCTGCGTCACATGGTCTGTTCCTTTGCTTTGTGTTGGGATGAT GTTACTATGTTAACTCTATCTAAGACATGGATGGTTTCTTTCTT >gi|3450431|gb|AI100470.1|AI100470 34845 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90D8XP 3', mRNA sequence CTCCCCCTTCATATGACCACCTGGCAGCAGCCAGCAGTTAGCAGTAGTGGTAGTAGCCTGATGAAAGGGT GTTTGCTATTCTTGTTTTGATTCATTTGTAGAAGATGTAGTTAAGATGATTCTAGACACAAGACAACCCC ATTGGTTGAGTCTAGGGCTCCACTAAACCCACTTGCTTCAATTGTCTAGATTTGTTAGAAAATTCAATTT CTTTTGTTAAGATCCTCAATCATTACTTTTAGCATTGTACATGATGATACAAGTGCGATTAATTTTCATT AAAAAAGAAGTTTAACTTTT >gi|3450430|gb|AI100469.1|AI100469 34844 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90D5XP 3', mRNA sequence TAATGTGTNCCCNAAGCTCTTTGGGGGAAGCGTNGAAGGACCCATTGAACGACTCGGTGGTTCCCTGGAT GGGTACCAAGAATTACCCTCGACCTGTGCTTAAGCCAGCAACTTCGTACCGCTAGGCTCTGAAGAGTTTT CTTTGCTTGATACTCGATATGGTTAATCACATTTGACTTGCTTCGTCCTTCTTCTTCGTCTTCTTCGTCA TCTCGCTTTGAATAATTTCGCAGTTTAAAAACTGGCGATGCCCTTATTTATATGTAGCAATGTAATAGTT AATGTACGATCGTCATATGGCGGAATTTTAGTACTATTTTTCGTTTTCAATGCAACATTAATACAATTGA TCGTTTCTACTCTGAGAAGGATATGTGGGATATTTGTAATCTTCGTATATATTGACATTTTCTCTATTGA TTTCGTT >gi|3450429|gb|AI100468.1|AI100468 34843 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90C21XP 3', mRNA sequence GAAGTGTTGCCTTTCTGCAAGNGAAAGGGCCTTACCGCCGCCGTTNGAACCNGTGAAGANCGATGAGCTT TACCATTGCCGTTTGAGAGGCTTCGCAAGAACCGATGTTCGTTACAGATTTGTGGTTGATGTTGCAGGAA GTAATCTGGTGGAGGAGGCTGCAACAACTACAAACTAAAGAGGGCAGGGCACATTGATACATGAACGAAA AATTGTAACGGGCTTGTTTGTCCAACGAATGTTTTGTTGTTGTCTTTTTCAAATGGTTCAAACACGAATG CTTTGGCTTTATTTTTTTCTAATCAATGTGGATTTTCTGTTTACGTGTGTTTGTCACAAGAAAATCATTA TGATAAGAATTTTCTTC >gi|3450428|gb|AI100467.1|AI100467 34842 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90B7XP 3', mRNA sequence TGANGGATGGAGTACCCTATCCCGAAGAATTCGCGTTTGTGCGNCCGGGCAAAGNGNACGACNTACTAGG CCTTTGTAAGGNAGATATACGAGCTTACGTGAAATTCGTCATATCCATACACGTTTGAGTATNTCTTGGG AAGACTTGCAAGGTTACAAACAATGAGAGAGGATATATGTAGTAACAATCTAGTTTGACGTGATCTCAGC TCGAGGTCTAAATTTTTATGTAATTCGAATTTGAAGTTCCAGTTTTTCTTTATATGCTTTTGTCATTCAT GTTCTTTTAATTTTCTTTCCTTTTTCT >gi|3450427|gb|AI100466.1|AI100466 34841 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89P9XP 3', mRNA sequence GCAAGCNGCGGCAAGNCATCNTTGTATTGTTGAAGGTTGTTCTTTCGTTATGGNTCTTTATTTGTTNCAT TTCTAAATCTCTGAACTCATTTTATTTTTTATTGAGCTTTTTTTGTGAAGCAAAANTCTTCTTTTTAGTT TGGTTTTTGTCCTTTTTGATTTCGCTCGGTCTATCTGTAGATACAACTTTTGCATCTTGATGTTNTGGTA ATGTAAAGTTTTTCAGTT >gi|3450426|gb|AI100465.1|AI100465 34840 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89O24XP 3', mRNA sequence TGAGCATGGNCGAATCCNGAAATGCAGGAGTGATTCATTACCAATGGAACCATGAACCCGTGGCTAGCCA TTGCCGATGAACCAATACAAGTCTCTCTGGACTAAATATGTTGATAACGAAATGGAGTTTGTGCAGATGT GCAATTTTGGTCTCTAAAGAGAGAACGATGAAAACAAACAAACCGGAAAGAGGAAAAAATAGGGAGAAGA GGTAACCTCGGATCGATGTGTTTCTGTCTTTCTCGGCATTCTTTAACTGATGATACGTTTATCTTTATAT AGGGTTAC >gi|3450425|gb|AI100464.1|AI100464 34839 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89N8XP 3', mRNA sequence GTTATGAAAGNGGTAACCGTCGTAGTGTGATCTCCCGNGTAAAAAAACCCCCTTACAAGGGCGAGAATCT CAGAGCAGGATGTGGTGAAAACAAAGCAGGTTGGAGATGAGGACCCTAGCAAGGGCAAGCACTGCATATC TTTCTTTACTCCCTTCAGAAAGCCCCGTTACTAGTTCTTCTGATCATCAACAGTTACNCGATTCAAGGCA TTATTTTCTGGCCTGCCTTGTACAGTTTCTTTTTTGCTTGACCTAGTTTTTGACCTTAGAGACTGTTTTT CTCCTTTTAGTTACTCTTTGATTCCTTTCCACTTAGAAATTNGAAACGCTCTATTACGTTTTCCTCTTTT TTTTACCTTCATAAGAAAGGAAGTTTAATAGAGTTGCATATTCATTAGATTNTGCNCGAACCATTTAATT >gi|3450424|gb|AI100463.1|AI100463 34838 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89N21XP 3', mRNA sequence TTTATGGGGAAGCAGAAGCTGAAGGAGGTNCATTGTCCCATCCCACACGNTTAAAGAAGAGATTGTGGTT GAGAAGCTGAAGAGTTTTTATCCCACCATTACAACTCCCCAAAGAAATACATTGATGCGGAAGATAGAGT GAAGGTGAGTTCAGAGAAATTGCAGAAGTTGGGTTGGACTTACCGGCCGTTGGAGGAAACACTTGTGGAT TCTGTTGAGAGCTACCGGAAAGCTAAGCTTGTGGACTGAAAACTTGGAAAGAAGAGCAAAATAGTGTTTT AGCTTCATATGTTATAGTTATAGTGTTCCATTCTGCACACACACACACACTCTCTCATCGTTTACTCAAT AATAAGAGTTGTGCATTCACCATGGATTTCTGAGTTTTTGTTATTTTCTTTTTAGATATCATTACTTTTA TTACCAATCTACAATTTTCTTTCCATAAT >gi|3450423|gb|AI100462.1|AI100462 34837 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89L22XP 3', mRNA sequence CTCTGTCAAGAGAAGTNCTTAGNGGGGCTTCCTTCTTGCACCGTCTTTGTTNTCAAGGGTCGGACAATCT CAACTCCTGCAACTAATGGACCAATTCTTGAAGGGATTCCGCGGAAAAGTGTGATGGAGATCGCAAGTGA TCCAAGGTTATCAGGTAGTAGAGAAGGCAGTTCATGTGGATGAAGTAATGGATGCAGATGAAGTTTTTTG CACCGGAACTGCTGTAGTAGTTGCTCCCGTGGGCACTATCACATATCAGGAAAAAAGAGTAGAGTATAAA ACCGGGGATGAATCTGTCTGCCAGAACTGCGTTCAGTCCTCGTAGGTATCCAGACAGGATTGATTGAAGA TAACAAGGGATGGGTCACAGATATCAACTGAAGAATAACAATCTTCAATATTTTGCCACAAAGGAGATTA CTCTGCATTTTAAGCTGTGTATACACGACAATGAAGAACACTATAAACATATATATGAGATAGAAACAG >gi|3450422|gb|AI100461.1|AI100461 34836 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89K24XP 3', mRNA sequence CACCCGGTTAATGTGCCTGGATGAATGGAAGGNTGAAGAGGAGTTCCTCCATTGGCCAAGGANTTAGAGG TGGGAGANTGGGAAGAGGAAGAGGTTCCAGGCCNTTCTGGAAGACGCTTTCCAGTCCAACAAAACCAACA AGGTGGTCGAGGTGGTCGAGGCGGGGTCCGTGGTAGAGGCAGAGGTGCTGGTGGAGGCAGAGGGAATAAA AGTGGTGGCCGAGGTGGAAAGAAGCCGGTGGAGAAGTCTGCTGCGGATCTCGACAAAGATCTCGAAAGCT ATCATGCTGAAGCTATGAACATCTCTTAAAGCAAGACTTCGCATCTTGTCATGTACTTTTGTGTTCTTTA TTCGTAGTCTCTGACTAAATATGTGCCAAAGTCTGGTTTGGTTTAATTACGTTTAGGATGGCTCTACTCT GCTTTCGTTTTCCTCTTTTCTTGTTTCACACTTTCACAGTCACTTTTGGTTATTGAAGTTAAAAGAGATT TAGCTGT >gi|3450421|gb|AI100460.1|AI100460 34835 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89K19XP 3', mRNA sequence CCGTTAGTNGCACTCCTCCAAGTTCCAGAAGGNNCCCAAGCTTTGGCCGGAGGAGTTACAGCCCTCGTGC AANATCTCCCCCTCCTCCAAGGCGCCGCAGTCCTTCTCCTCCTCCTGCCCGTGGCCGCAGCTNCAGTNGA TCNCCACCTCCATACAGAGCNCNTGAGGAAGTGCCATATGCTAATGGAAATGGACTGAAAGAAAGNCNCA GAAGCAGGAGCTGAGTGAGTGATTTTGCAAGAAAACGAGTGTGTGGGAGGATACTTTGGAAGAGAAGAAG AGAGGGACTAAGGGAAGTTACTATCATCTATGAATTTCAGTAAGAGAACATGTTTTAGGTCTGCTGGGTT GGATAAAGCTTGCTACTTTTGCTTTTGGATATGAAACGTACGTAGTTGTGTATCTACCAATAGGTAAAAG AACACTTGATTCGT >gi|3450420|gb|AI100459.1|AI100459 34834 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89J22XP 3', mRNA sequence ACTGGGATGGGATATGGATGCTGTCCAATGGTCTGGGAAAACCNGCCAGCAGAATTCCGATGCTNTATTC CGCCAAGTGAAACCATGGGGCACCCCTTCTGAACCCGCTTGTNTAGCCACCGGGAACNTGGGAGATGGAA CTTGATGTATAAAAGTTACAGATGCAATGCCTATGNAGGATGCAAAGCTGATGAAAGTGTTTCCTGAGGT AGTGAGATCTCTGTATGAACTGGATGTGCTTGCGGAAGACACCATTCTGCACTGGTATCGCAAAGGGACC AACCCTAAGGGCAGGCAAACGTTTGTGAAGGGATTGGAACCGTTTGTGAATTGGCTCGAAGAGGCCGAAG AAGAGGAGTGAGTGAGACGCTCTGCTTCTTGTTTTCTCTTTTTACTCTCTTCTAATAAAAGAAAGACAAT ATTTTACTTCTCTTAACGCAAAATTCAGATGCTCTACATTGTTGGTGACTTGGTGTGATCTCTTTTTTGA ATGAATAAGTACTTCTTTAGTTG >gi|3450419|gb|AI100458.1|AI100458 34833 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89I22XP 3', mRNA sequence ACGNTTTTCCACGGTNTCGNTTGTTGGTGGAACGTTCGCAGGNNGAGAACCGTTTTAAGCTTTCTTTTAT GTCAGAAGGTAAAGGAGCGTTCAANACAGGGCATTTTAGGTNTGTTGCTGATTCGNATCGAACGAGGCTA ACGTTTTATAGTGCNTNTTATCATACAAAGCTTCATGACTTCGGCCATCTTTNTGGGCCTGGTCTTGATA GCGTTGTTGTTACCCTGGCCCNTTAACAATTTGTGGCTTTTAATTCTTATTAGACTGAATATTCGAAACA CTATACTCTATTCGTAACGAATTTGTGGTTGCACT >gi|3450418|gb|AI100457.1|AI100457 34832 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89I19XP 3', mRNA sequence GGGATTTTTTCCCTATTAAAAGCNCCCTGNTNGCGCCCGCGGTGAACTTGNNGATTACCTATGTGGACGA GGAACTACGGTTATCNAAGCGNTGACAAAGGGAACTTGTTTATATTGAAGATGTTTGATCCCNCTTATCG AATCCCTCTTTGATCTACCAAACAAATGGTACCGAGCCATCCATCATACATACTTGCTACAACTTGCTAT GTCTCTCTTCATCATGTATGTAATCTAACATAAGAAAAATTAATAAGNGGGAAAAAATGAGACGAGCTTC TGTCATTGTTTCAACTTGTTCAAATCAAAGATTCTGAATCTTGATTTGGTTGAGCNGTTNGTTCCAATCC TAAACTATGTGATGCTCAAGCNGTACAACAAGAAGACCTTGAAGCTCCTCAAAAATGCTTNGATNATTTT CTCTCT >gi|3450417|gb|AI100456.1|AI100456 34831 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89H14XP 3', mRNA sequence CATTGCCCATGGGGNNCCCTCTACAAAGCCAGGGGGACTAAGTTTNCCCAAGGATGGTATGAGTCCCCAC TCGAGGACNATTATAGCGAAGGAGATGTATGGTGTGTTTGAGCTACTCAGAACTCGGGATTTCGTTCTCG AAGTCACCGCCTTTCGTGTCAATGAGTATGTGTGCCCAAAAAAGATTTCCCTTTCATCAGCGATCTTGCA GGTAGCTTTCCAAAGTTAAAATTTTATGTAGGGGTCTCTTAACCATTCTCTCTCTTGCATTGGTTGTCTC TGTTCTAGTAGTGTTTTGAGTGAAATTTCAGGTTCCTATGTTTGGATGTGGATAAGTATTTGACGATTAT AATAACCTCTGAGTGGGAAACTCTTTGTTTGAGTGGTAGCTAGGTTCAAAAGTAGAGTTGTATATACTTT TATCTTCATCAGGATAATTATGTTTATTTGAATTGTTGATTATTATGGGTTTGTGTGGGTGAATCCAT >gi|3450416|gb|AI100455.1|AI100455 34830 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89H13XP 3', mRNA sequence ATCCTCCGCCGCATATGATGCCCCCNCCTTCTTCCTCGGAGTTCNAAGTGCCTTTTNCCGGTGAACCNCA TGTCGTCCACCAAAACGCCGTTGGGTACTTTCATGGNTGGAAGGGGACTTTACGGAGNTGGCATGGAGTC TATGGCCGGAGAAGTAAAGACTCATGGTGGTTCTTTGCCGGAGATGAGGAGGTTCNCCGGAGATAGTGAT CGGAGTAGCGGAATTAAGTTAGAGAATGGTATTGGGCTGGACCTCCATTTAAGCCTTGGGCCATGAATGA TTATAATTTTGGCCCAGTAAAGATCTGTAAAATACTACTAGGATTTCATTTTTATAGAGTATGTTTTTTT CCTTAATTTCGGTTGAAATTGGTGAATATTTTTATCTCTTACTTACCAAATCTCATATTTCTATGTATGC GTTTGCTTTCACTTTTTTTTTTTATATAATTCTTCTTGT >gi|3450415|gb|AI100454.1|AI100454 34829 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89F7XP 3', mRNA sequence CAGGTTGCAAACNTCTCCTNTCCCGTTTTTTGTCCCCCACTCGATTAGGGGNTTCCCGNTAGGTGNCNTC NAGGAACNTCCATGGTTCCTAAAGAACCTGCCAAGGGAACTTACAGAAATAGCTCAAGCTGCATACTTCA GGAAAGAGAACCCGACATTCTCACTCCAAAGCGTCGAAGAGATAATGAAGATTGTGGAAGAGGCAAAAAC TCCAGCTCGTGTTTCTCGGTCGATTGGAGCATTTGGGTGGGGAGGAGGAGAAGATGCCGAGGGCAAGGAG GAAGATGCAGAGGAAGAAGTTGAGGAAGTAGAAGAAGAAGAAGACGAAGAAGATGAGTATGATAAGACGG TGAAGCAA >gi|3450414|gb|AI100453.1|AI100453 34828 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89E5XP 3', mRNA sequence AGCCGGTTTTTGAGGGNCCNAATGATTGTGGAACCNTTCGCTGGACNAGGCCAAGGTCATGGTGGACTAC GNTTCTAAAGGAAAAGGCGGGTTTAGACGTGGGAGGCTTGTGTTCAAGGCAGTNTCGGCCAGGACACGTG TCACTTTCTTGNGCACGTTTTACCACATGAAAAGCGATCACTCTGGCTCGCTATGTGGTCCGGTGATCGA TGACGTTAGGCTGGTAGCGGTTGGGAAACTCCGAGGATGAAAGTTGGGGTCGTTGACTCATTCGGTTGAA TATACTACATTAATGGATAATTGTAATTCATGTTACATAATAAAAATGTAATTTACGAACTAGTCCCACA AAATTTATTAACTAGTTAATCACCGTTTCAACATATATTATATATAACGGAGTTTCATTTTTT >gi|3450413|gb|AI100452.1|AI100452 34827 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89E10XP 3', mRNA sequence TCTTTNGAACCCGAAGATTCTTAGCTTTTGGAAAAGTCCAGCTTTGTTTCCGGGGCCGACGCGATNCCAA TCCAAAGTTTCTGCGGGAAAAATCGGAAATTTCTCTCTTGGTTCGAATTCAAAAGTTNGTGAGACTTGTG GAGCCAAAGGAGCAATTGAATGTCCCGGTTGCAAGGGAACAGGTAAAAATAAGAAGAACGGAAATATGTT TGAGAGGTGGAAATGTTTTGATTGTCAAGGATTTGGTATGAAGAGTTGTCCTAAATGTGGCAAGGGAGGC TTGACGCCTGAACAGAGAGGGGAACGATAGACTTATACTATTTGTTTTTCCTACATAAGTTAATTTTGTG ATACAAACATGTCTCTATTCCTATAACATTTCAGTCGTATAATTTGCATGTAAAAATAAAAATCATTAAT >gi|3450412|gb|AI100451.1|AI100451 34826 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89B5XP 3', mRNA sequence GAGTTTTGGGCCTACCGTTTACTTTAACCATCCNCTGTTTGGTGGGCTTCTTNGGGNGGCTGAAGAAGAA TTTGGGTTTTCNCNAGAAGGTGGAATCNCTNTCCCTTGNCCTTACTCAGATTTCAAACGGGTCCAAACCC GAATTGAATCCGGGTCGGGTTTCTGTAAATTTCCCTGGAGCCNGCCGGTGGCAATAACGNCGGTGGAAGA AGATGATGATGATGAAAAAGTTCTTTAACTCTTTTTTACTATTTTCTNCCTTTTCNCTTTTGTTACTATT TTTNCCCTTTTGTTAGATATGTACATATTCTGTATGTGAAAAGTGAGGTTTGAATTTAGGCGATAATGTN AATAA >gi|3450411|gb|AI100450.1|AI100450 34825 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89B3XP 3', mRNA sequence CCTTCTCAGNCCGGTGGGGCCAGAAATCCCCTCCNCCATCCGNTGCCGGTGGTCAAGGNTNATTACTANC CTCCGCCGTATTCCAGGAAACTATCCTTACGCCGCCCTCCGCCGAATCCCGANCGTCCCTTATTTCCCGT TTTACTATCATACTCCACCACCAGGTTCTGGCTCAGATCGGTTTATGAGTTCTTACTCTATTATTTTTGC TCTTTTTGCTGTCTTTCTCTGTTTAGTGTGACGGAAAATAGTCGGAAATTCGCCGGGAAAATGACGAAGA AAAAGTCGAAATAATGTGGCAGATCCGTAGATCTATAAATCTTTAGATTTCTTTGATCATGGAAACTAAA TGATGTTGGATCTTTTACTTTCTTCGATCTGTTTTAACTTTTTCTTTTGTTGTTGACAATTTGTATTTAA TTGTTCTTGATTATTAATATATTAATTACTCGT >gi|3450410|gb|AI100449.1|AI100449 34824 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89B11XP 3', mRNA sequence CCGGTTTTTTGCCAAACCCCGTTCCCTAGACAACNTGAGAGATGTTCTGNCCTGATCTTCTCGAGCCCCG GNTACTGTACGAGGCCATGTAAAGGCGATGGATGCCCCATGCCCCAGAGGAGTAATTCCGCTCCCGCCTT CTTCTCCCGTAAAACATCGGAAGCTGATGTTCTCTGGTTTAATTGTGTACATATCAGAGATTGTCGGAGC GTTTTGGATGATATCTTAAAACAGAAAGGGAATAACAAAATAGAAACTCTAAACCGGTATGTGTCCGTGG CGATTTCGGTTATAGAGGAACAAGATGGTGGTGGTATAATCATACCATTTCAGATTACATGTTTGACTAA TGTTGTATCCTTATATATGTAGTTACATTCTTATAAGAATTTGGATCGAGTTATGGATGCTTGTT >gi|3450409|gb|AI100448.1|AI100448 34823 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89B10XP 3', mRNA sequence AAGGCTACCGAATNCCCAGAAAATGGCCCATTGGGGAGAGCCCGAGGACTTGCTTTACCCCGNTGGCAGC TTCGACCCATTGGGTTTGGCTCCCGCCCCAGAGGCATTCGCTGAGTTGAAGGTGAAGGAGCTCAAGAACG GAAGATTGGCTATGTTCTCTATGTTTGGATTCTTCGTTCAAGCCATCGTCACTGGTAAGGGACCGATAGA GANCCTTGCTGACCATTTGGCCGATCCAGTTAACAACAACGCATGGGCCTTCGCCACCAACTTTGTTCCC GGAAAGTGAGCCAAGTTTTATCTGTATTTTGCTTCAGTCTTTGCTTCGTGAGTGTGAGAGGAGAAAGAGA GCTTGTTTAGATGTAAAATTTGCAAGACTTTGTATTTTTTTTCATTAATCAAATAACTCGTTTTTCTCTC >gi|3450408|gb|AI100447.1|AI100447 34822 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88P8XP 3', mRNA sequence GATCCTGGACCAATTTGCTNGCCAACGNCAGNGAGGANCAAAGNGATTTGGGCCTTGTGATGAAGCAATA TGTGCAGCCATAAGGAAAAATCCCATGAGCCATAGGAGGAGGCGGGGCATTTTTCTTGGGNTTCAGCCCA ATCGCCAGTTGAATTCATAAACGCCCTGATCGAATCTCAGAGCAAGGATCTAAAGGTCGTTGCGGGAGAA GCCAGTCGAAATGCTGAGAGAGAACGTCGATCAGACTTCTTCAACCAACCTTGGGTCGAAGATGCAGTTA TACGTTACTTGAACCGGAGGCCAGCAGCTGGGAACGATGGGCCAGGGAGTTGGTGAGTTTCTTGACGATA CAAGTCTCTTCATCTGTTTGAGCATTTTTAGTAGAAGATATTGTTGAGATTAGTCTGGTTTAAAAGTGAA CTAGTGTATCTGTAATCTTGTGTATGTTGAAACATTACTACTTTATATAATTAGCTTTGTTTTGT >gi|3450407|gb|AI100446.1|AI100446 34821 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88P16XP 3', mRNA sequence AAGCTTTAGTTTATTGGNCCCAAGCAAAGCCNGAAGGGGCTAACATGTAATGTTNCCTTCTGTGCCAGGG NTCCAATAGCAAGTGGATTGTCCATAGACTNCGGAAAGTTTGTAGTCCATGCACTTGATGAGAAAGCCCA GAGGTTATTTCAATTTGGAAAGCCTTTGGTCTGCTGAATCCTCTGGTACTGATACTTCAGATCAGGATCT CCAAAACGTTTTTGTAAAGGTCCGACCAAAGAACAATTCGAAAAGGAAACCGGCTAAAGTGAGTTCTTGA TCCTGTCCGATGGATACAATTTCTCATAAACTTCTCGAGTCTAGACGAGTTAAGAATAGGAGGATTTTAA AGCCTATTAAGTATTTATCTCCTTAATATTTTTTTTTGGTAAGTTTTATCTCCTTAATATTTGTAGTCAT CTATCTATTTTTTCCTTAATATCTTTGCTT >gi|3450406|gb|AI100445.1|AI100445 34820 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88O4XP 3', mRNA sequence CGTATGAGGGTCTTAAGAANCNCGAGGTCGAACCCATCAAGGATTNCGTCGAGGAGATGAACCGATACCG TTGNCCGTTTGACCAAATCTGTTCAAGAACTGAAGTTGTGTGGGAGTGCCCAAAGATCCAAGACCAGTTT GCGTACCACATGAGTAATGCTCAGACTTGGACTAGTGCGGCTTTGACTGACGAGAACACTTGCTCCGATG GGTTCTCGGGTCGGGTTATGGATGGGAGGATCAAGAACTCGGTTCGGGCTAGAATCATGAACGTGGGACA TGAAACCAGCAACGCTTTGTCCTTGATTAATGCCTTTGCTAAAACTTACTAATTTAAAACTATATTTTGT CCTGTAAAATATATATATAGATAAATGTAATGTCTTGCTAAGAGTTTGATGTGATATATTTTTTTCGATT TTGGTAGTTTCTTTTTGTTTTGTAACGTGGTTTATAATAGTATAATGTGTATTTTGAGCT >gi|3450405|gb|AI100444.1|AI100444 34819 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88N23XP 3', mRNA sequence GAAAAGTTNCGTCTGGAACAGCGNCCANCNTCAGGCGNGGAAGATGCAGGNGAGAGGATNGANGCCGAGG TGGNTCATGAAGGAGAAAGGAAGCGAGTCTTACCGNTACAAAGGNGGTTACTGGGAAGCCCGAGAGGATG GATCATGGGTAGACTGTCCAGACATCTTCGGCCACATCGATTCCGATCAACAAATGATAGAGTAAAACGA AATTACCATTCACATCGATTCTTGAATCACGAAGTATTAAATTCCTCCTATCTTCCTTTCTAATTACGTT TTCGTTT >gi|3450404|gb|AI100443.1|AI100443 34818 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88N18XP 3', mRNA sequence AAGAGGGTATATGGATGGAAAAAGCCAAATCCATTTTCTGTGTATCTATCCAGTAGAAGGGTTTNTCAAC AATGCACCAATGACAAAAACTTACGCCCAAGTTCAAGCTGCGGGTATTGGATCAAGTTAGCTGGAATCAT GTTGAGGAATCAGGTTTGAGCTGGTTTGATGCAGAACTTCGGACCAAAGTGGCTTTGCGGATTTCATGCC TCTGGGGAAACTAAATGAACCTTATTTGGTAAAGGATAAGCTTTATGTGGGAGTTGAGTTTGAAGTCGTT TCTACCACTTATTACTGTTAGCTTCTAGGCTGTAATAAGTCTTATTGTGAGCTAAAAATAACAAGAAATG TTATAATGTATTGAATAAAATGTTGGAGAATGTACCTACTGAGACTTGGAGGTGGAACTACATTGACCTA GTCTTAGCCAAAGTC >gi|3450403|gb|AI100442.1|AI100442 34817 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88M6XP 3', mRNA sequence GANTTCACCCCCCTTGNCCTTACCAGCTTGNTNCCAAGGGTTCTCTCTTGGCTCCGANCCCANGCAATTC TCTGTAGCCTGTGCACTCGAGCGTTGGANCGAACTCATACAAGCCCAGAGATTACTGTAGACTTGGAAGA CTATGGGTGCAGAGAGAGGACATTTGAGTCTCTAGGAGAAGAGAGTGGAACAGTGATGTATCAGACGTTT GAGAAGCTTGGTAAGTACTGTGGATCGCCTAGATCTACCTTGAAGTGTGAATGGAGCAGCAACAATAGCT GCAGCAGCGAGGACGAGAAGGACGAGGGAATCTAGCAGAATTTTTCTTCCTAATAACTATTTTCGAGCTT TCTGTTTTTGTTCTTTCTTTTTAAAAAACTTATTAAGTTCTTATGAATAATGACTTGTGAAGTTTGAGTT CGTCTCCTTCACAAGCAAGTTGTATTGGTGTTTTCTACTTTATGAATATGGGTTTTATAT >gi|3450402|gb|AI100441.1|AI100441 34816 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88M20XP 3', mRNA sequence TGGCCCCTTCTCATCCGGATAAGGCTTGGTCTGCCCCTGAATTTCCCNAGTGTCCTACTATGAGATTCTC CAATTCTTCAGACCAAAGCTTGTAACATGGCCCAAACAGGCTTTTGAGGAGGCCCATAGCTGAGCTTGAC ACTCTGGGAGAGGAATCCTACAAAGACAGCACTCTCATAATGCAGTTGCTGAGGGACAATTTAACCCTTT GGACCTCCGATATGCAGGAGCAGATGGACGAGGCCTGAGGATCTAGATGAAGGGGGGGAGGGTTGTTACG CGATGTTTCTGCCACCAAATCGATCTCAAAATCCCCATAACCTTTGCTCAAAAACTGTGAAAAAAGATTG AAGTGTTTATGATGATTATGATTGTGCACAGCTTGATGATTTATCTACTCTACTAAACCTCTGTGCTCTT AATATTTATTGTCTCGACTCTGCTCAAGCCTTAAAAACATCTTTCTCCTT >gi|3450401|gb|AI100440.1|AI100440 34815 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88M1XP 3', mRNA sequence CANGGCTGAAAACCCGATAGCGGCTTTCAANTGCAATGGTGCCCTNCTAGGNTCTTNTCCCGATAAAGGG GGANTCCATCCAAAGACACCGGTTCGTTCCCCGTGCTATCCCGCGACATCCAAATGCATTAACCGTAGCT ACAAGNNTTATATATATTTCTGCTCCTCACAGACATGTAAAGAATGTTTGTCTGAAACTTCTGGTTCTTC TGTTTTCCCGTATGTAATGCTAGAAGCTTGATGATGCTTCTGTTGCCTTTTGCTTTTGGGTAAATCTCTT AGGGAGAGTTTTTTCGATTTGGGTTCCTACGTTTAGTAGTTTACACAGAGCAGAAGAGTAAAACACTGAG AGAGGCTTTTGAAGATTGTCTCTGTTTTTTAGTTATTTATACTCTTACCCCTGAAGTTATTAGAAACTTG CTTTGGTGCTT >gi|3450400|gb|AI100439.1|AI100439 34814 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88M13XP 3', mRNA sequence CCGTTCGTTCCCCAATGCCTTACCNGNGGNGGATTGGATTACTTACTGCTGCAAACCTATTCCTACTCCC ATTTTTGGAAAGTAAATGAATATGTTTTTGTTTTTCATCTTCTCCTAAGAGAGAGAGAGAGGGAAGAGGA AGGAGGAAGATGAAGATCAGTTACCGTCGCCGGTCACCGTTTAACTGTTTTATTCAGGTTAGTGTTTGTA TATAAAGATGCAGTATTTAAAAGAAGTGTCGAATCTATGTATTCGTTTGGTGTTTTTCTGGGTCGGGCGG ATCTTTATTACTGTTTCATATATAACTAAGAGGGAAGATTAGAAGAAGAAGAAGCTGTAAAATTTTCTTG GGAAGAAAACTCTGGTTTCTATCTTCTCGTTGTAATATAGATAATCAACTTGGATTTATCTTCTTTCAGA TT >gi|3450399|gb|AI100438.1|AI100438 34813 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L7XP 3', mRNA sequence CTGTTATGGTGNTACCCCTCCACTCCTGGTTATGGAGGTTATCCCTCCTGCACCTGGTCCATGGTGGTTA CCCTCCTGCTGCTATCCTGCTCATCACTCAGGACACGCAGGAGGAATTGGGGNTATGATTGCAGGTGCTG CAGCTGCCTATGGAGCTCACCACGTAGCTCATAGCTCTCACGGNCCTTACGGACATGCTGCATATGGTCA CGGTTTTGGCCATGGTCATGGCTATGGCTATGGTCATGGTCATGGTAAGTTCAAGCATGGGAAGCACGGG AAGTTCAAGCATGGGAAGCATGGAATGTTTGGAGGAGGCAAGTTCAAGAAGTGGAAGTGATCTAGTTAAT ACCTTTTGTGAATCTGTCTGGACTGACCAATGTTTCAAATAAGCCCTAAACATTATATAAGTTGACTTTC GTCGGTT >gi|3450398|gb|AI100437.1|AI100437 34812 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L4XP 3', mRNA sequence TTCCCTAGNGCCGTAGATTTCCNGCGGTAATCTAGCGTTCCAGANTGAATGGTCCNGTGGAGGATTCATG GGAAGAATCTGATGGTGGATGTTGGTGGGTGGAGTCCGATGCTCGGGGATTTTTGACNGCGGGTCAAGTC GAGTCAACCCGATTGTAATGGGTGGGCTACAATTNGAAGGCTTTATATTGGACTTTGATTTGGGTAACTC AATGATGGGCTTTGGACAAAGAACACGCTCTGAANTCACTTCGTTGTAATACAGAAACCTTTGTAATTGT AACCTTCTAATTATCTGGTAGATATCCTCAATTTTGATCTCTTTTGNGTGTACTCTTTTCTTACAATNCC TGC >gi|3450397|gb|AI100436.1|AI100436 34811 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L24XP 3', mRNA sequence TCAAAATTGCCCCCATGCGTCAAGAGGTTCAAGCCGACAACCCTCGGAATTACGGCGCCTGGACTTGAGG GACCGCGTCGGACCCTCCGGCAGAAAGGGCAAGGGATNCGGTGTTTACAAGTACGTCGACAAGTATGGAG CTAACGTCGATGGATACAGTCCTATTTACAACGAGAACGAGTGGTCAGCGAGTGGTGACGTGTACAAGGG AGGAGTCACCGGATTGGCAATTTGGGCGGTAACTCTCGCCGGAATTCTTGCCGGAGGTGCTCTTCTTGTG TACAACACAAGTGCTTTGGCTCAGTAAATCTTAAAGTTGTTAGCGCATGTGTAATCATGTTTCTATAAAT GTTTCTGTGTTGTTCTCTTTCTCTCTAATGTTGTAAAACTCAGACATACTTTGAATTTATAAGACTTCTA GTGTTTGTAT >gi|3450396|gb|AI100435.1|AI100435 34810 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L23XP 3', mRNA sequence TGCCTTGTGCGTTGAATGGCTAGGGAGTTGCTCCTTCNCCGCACAGTGGTTCCTTGTGTTGATTCGAGTT GGACCNCGGATTTGTGTCCCGTGGGCACGGAACCACTCCCCGGTACTATGATGGNCGGTACTGGACAATG TGGAAGCTTCCATTGTTCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGG AGTACCCTGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCAT TGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATCCCCTTTCTGGAATATTCAGCGTTGATTATTCTGG AACCCATTTCTATGTGGTCAATGCAAATTTAAGAAATTATTTGCCGACTTAAAAGTTGAGGAACTATTGT TTGAAAGTGAAAATGTTATTCCTATCAGTTTCTCTATAATTATAGTTATCATTTCATTTC >gi|3450395|gb|AI100434.1|AI100434 34809 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L22XP 3', mRNA sequence CGGTGNCACTTCGACCCCATGGNTTTGGCTACCGACCCAGAGGCATTCGCTGAGTTGAAGGTGAAGGGAG CTCAAGAACGGAAGATTGGCTATGTTCTCTATGTTTTGGATTCTTCGTTCAAGCCATCGTCACTGGTAAG GGACCGATAGAGAACCTTGCTGACCATTTGGCCGATCCAGTTAACAACAACGCATGGGCCTTCGCCACCA ACTTTGTTCCCGGAAAGTGAGCCAAGTTTTATCTGTATTTTGCTTCAGTCTTTGCTTCGTGAGTGTGAGA GGAGAAAGAGAGCTTGTTTAGATGTAAAATTTGCAAGACTTTGTATTTTTTTCATTAATCAAATAACTCG TTTTTCTCTC >gi|3450394|gb|AI100433.1|AI100433 34808 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L20XP 3', mRNA sequence CTGGGNCGGTTCACATTCAAGCGGNTCCGGTGTAGCAACTTGGCTGCGTGAATCAGCCACACTGAAACTC TTAATCCTCCATGACCACATAACAACCGCCACAGCTNCTACTACAACAATGAAATCAACAGACCAACAAC AACGGAAACAGACGTCGTTTGCTTTACAGCCTCTTCTTTTGTAGCTTAGTGTATGATGTAAAAGTAAAAC AATTTGTGTTGATCATTAAAGTGTATAGGACCAATGGTCCTAACAATGTTTGGCTCTGTGCTAATATTTG TAACAAAGCAACTCGATTGATTATGTGAAAATCGTTTTGTCTT >gi|3450393|gb|AI100432.1|AI100432 34807 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L19XP 3', mRNA sequence CTGGAGGTCCCTTTGNCCCTTACTGGCTCCATTTCCNGTGGGTTTGTCTCCTCGGNAAACGCTGTCNTAC GTGCAGACACTCAACCCAGGACAGGTCATGNTTTTCCCCACAGGGGCTTGCTTCATTTCCCAGATCAACG CGGGGAAAATCCTCTGCTTCCAGCCGTTGTCACTTTCAACAGCGCTAATCCGGGTCTGCAGATTCTCGAC TTCGCACTCTTTGCTAACAGTCTTCCCACTGAACTCGTCGTGGGTACTACTTTCCTTGACGCCACTACAG TCAAGAAGCTAAAGGGTGTTCTTGGAGGAACTGGCTAAAAAAAGACTTAGGACTACTCCTTGACTAAAAC ACCAAAACCTGTTTCTTCATCTTTTTTTCTCTTTAATTGATTCTTGTCTTCTCTGTTTTGTGTGCCTTGT AATTCTTCAAAACCTGTCAAAATTGTTAC >gi|3450392|gb|AI100431.1|AI100431 34806 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L18XP 3', mRNA sequence CGTGTTTNTGTGAGCTGGCGAGATGGCAATGTGNACNCNGGGTTGTTAAGCAAAGCACGTGTTTNGAGCT GGCGAGCTGGCAATGCAAATGGACGTTAACGGCGATCGTTATTAACGTGGTTAACGTTTACTTTCTTTNC CTTTTTGTATAAGAGCAACATGTTATGCTCATGCTTTCATTATCGAATAATCTGGTTGTCATCTCTCTCT AGAGACTTCTAGATTTCCCTCATCGTTTTACCGGAGCTCTCGTCGAGTCTCTTGTAGGTGAGAAGTTGAT ATCGCGTCTCTTAACGAACGTTGTATCAAGTGTGTTAATCGGAGTACTTTGTTTTCATCTCTCTGTTCTA TTGATTTCAAACTCTGTTTATTCATTTCTGGTTTACG >gi|3450391|gb|AI100430.1|AI100430 34805 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L16XP 3', mRNA sequence TAAATCNGGAACCATTTGTTTCAAGGAAATTTCCTTATGTGNGCATAGTTTTCTAAACAAACCCCCCAAA AACNCCAAAACACAAACACACACACACACACATCTGACACCACAAACTGAAATATCAAGGTCTCATCGAT CTTCGATTTTTCAGTGAATACAATTCTTTTTCACATTCTTTCCCTTTTGTTCTTTTCTTTCTCACTGTCT CTTGTTTGTTTCTTCTTGTTCATTGTTTTCTTCTTCCAACCCCCACATGAACAAAAAACTCTAGCTAAAA GGTCTTTTAGATTATTTTGGAGTTGTAATTTCATCAGCAAGTCTCACACTTTTTTTTTTTCTCTTAAAAC ATTTGTTGATTGGTT >gi|3450390|gb|AI100429.1|AI100429 34804 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L11XP 3', mRNA sequence CCACGTGTNCCTCGCTAAACTTTGANCGGCGNTGGNCCCAATATCTACGNCCNCCTATGNTGGACGCTCT ACATTTGCGCTCACGGAATCGGGGAACTATCGCGTTTGGTGCAGGCGATCAGGGTCCAGCTTGGAACAGA GCTTGGTAAGNCCAAAAAGAAAGGTGTGTCCCGGAAAAAGTGGATATCGATCTCAGCTAGCTTGCTGACT TATGTGGTTTGGTTGGCAAGAACTACGTTTGACATCAAGGAAACAAAAACGCACGAAATTTGCGTTTGCT TTTTATGTTCATAAGACTTGGAAGCTTGTACAAAAAGGGGAATAACATAAACTTGTCTTTAACATTTCAT TGTATAGGGTTTTAGATTATTCTAATTGTTCATTGGTTAAGTTTTAGGTTATGTTGTTAATAATTATCAA ATAATTTCATTAAATC >gi|3450389|gb|AI100428.1|AI100428 34803 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88L10XP 3', mRNA sequence CTTTTGGGCCCCTAATCCTTTGCGGAGCCCTTCAGGCCCTCGNGAAAGGGTTCTCCCCNAAGNCCCTTTG GANCATCNCTTAAGAATTGTGTAAAGAAGGTGTTTACTGGGGAGCTGCTGGTGGAGTGTACCATTGGAAC AGAATACGGAATCGAACGTATCCCGTGGCCAGCAGAGATTGGAAAAACGCAATGTTAGCAGGCGCGGCGA CAGGAGCAGTGCTCTCAGCGGTTGGTAAGAAAGGCAAAGACACTATTGTGATCGATGCCATTCTTGGTGG CGCGCTTGCAACCGCTTCTCAGTTCGTTAACAATCATTATTTCTACTGATTCTCCATCTTCCTTTAGGGA CCAATTTGGTTCATATGGTGTGGATTCCTTTGTTTACTCTTTAAATAATAATAAAAAACAATGTAGTGTT TTTGAAATGAATACATTCGAGTATTGTTGACGTT >gi|3450388|gb|AI100427.1|AI100427 34802 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88K20XP 3', mRNA sequence TTAAAGGGATTTCNCCGGTTGAAAANCNNTTGAAAGAAGCTNTTTGATGAGTATGTGGATGCACGTGGGA TGAGATTACTCGGGCTTNCGGTGCAGACTTATTTGNCCGGACGTTCGCTACAAACGTCATCAAAGGTTCT GAGGCTAATGTTTATAGCTTTGTTGTTACTTTTGTTTGGTCGTGATCAAATTCGTCATACTAGGTACGAC TGTGGCCGTCTCTAGAGATTTGATGGACATTTTGTATTTTTTAGTGTGAGGTTGTGTGCTTTAAACTTTT TTTGTGTGTTTCTTTTTCTTATAACATCCTCCTTTCTCAATATAACAAGAGTTTAC >gi|3450387|gb|AI100426.1|AI100426 34801 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88J13XP 3', mRNA sequence ATGTTAAACTGNTAGGCTTCCAGNGTAACNCCACCGATAAACCGATGCACAGGACGATCCNNCTGACTCA TGTTCTTGATGACTGCAGGGCCATTTTGAACATCTAGTANCCGGAAAGATAATGACTTTTTAATCGTCTC GAGTTGGGAATAAAGTTAAGACAGTTCTCCCTCCATTAGCGTTTGCAGATTCCAAATCCTCAACGTAATT ACTAACTGGACTATGCAATGATGGTGTAGACATTCTCTGAATTGGTTGCTGCTGCGTTTGCCTCACCGCC AAGAACGAAGGATCAAACTTCCCATTAGTCGTCGGTGATCCAAATCCATTACTAGTCGGTGATCCAAACT GTCCATTACTCGTCGGTGAACTGAATCCACCATTAGTCGGTGAACCAAAATGCGCAGCTGCGATTTGACG GTGGAACTGAGGCGGTTGTAAATGAGGATTAANTGCTGCA >gi|3450386|gb|AI100425.1|AI100425 34800 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88I23XP 3', mRNA sequence CAAGTTCTTATTGCATTANACGAATGTTTGGTATCTGAAAATTCNNGGGGAGGANCGAGTAGGGACATGG ACTCAAAGAGTTCCCTAGAGGTAAGCTTGACATTTGATACTGATGTGAGCCCAACGGCTAGGTAGATTAC ATGAAATATTATCATGCGGTATCACATAAATTTGTTTATATGTTTCTATTTACAGAACTATCCTCAAATT TTTATCTCTCTTCTAGGCCACCTTTGTTAATGAACTCTGAACTTTTTGTCATTGATACATGTGAATAAAA GTTCAAAGTCTATTATT >gi|3450385|gb|AI100424.1|AI100424 34799 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88I13XP 3', mRNA sequence CTTGGACCCNTAACATTGTGCTCAGGCAGACCNCATTTTNAACCACCCCGGAGTTGCAAATTGTGATAGA GATGAAGGGCCCAGTGTCTCTCACATTTNCCCTGNGGGTACATGAATCCCTTCACAAGGGCAACTCCATT GTCAGNCACAGTGACAATCAGCTTATCGTCGGAGTTGCCAGTGGTTGTGGAGTATAAGGTTGCTGAGATG GGTTACATTCGTTACTACTTGGCTCCTAAGATTGAAGAAGAAGAAGACACTAATCCCTAAGACCCCTTTT ATATCCACAATTTCTCTTCATTCTAAAATGTTGAAGATTTATTGACAATGTTGGTGTTTTTTTTTGGTGA GATTCCTTTGTATCC >gi|3450384|gb|AI100423.1|AI100423 34798 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88H7XP 3', mRNA sequence TCTCGACGTGGGNCCCCNGCGATTCAGCATCGGACATCCGACTAGNGCCATCAACGTNCCTTACATGTAC AGAGTCGGATCAGGAATGGTTAAGANCCCGAGTTTTCTAAGACAGGTCTCGTCCCCACTTCAGGAAACAC GATGAAATCATAATCGGTTGTGAGAGCGGTCAAATGTCATTTATGGCCTCAACTGATCTTCTCACTGCTG GCTTCACGGCGATCACAGACATTGCTGGAGGATACGTCGCTTGGACAGAGAATGAGCTGCCGGTAGAAGA GTGAAAACAA >gi|3450383|gb|AI100422.1|AI100422 34797 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88H5XP 3', mRNA sequence TGCTACGGAACATTTTAAGCCCANCCTTTTANCCGTTGCTGCCCACCACTATTACGGCCCATCACAAGAA AATNCATGCAAGTGGAANCGGTGATAGTAGCAGCTGGTATGACACGTTGGTNGCAGTAGCGGTGGTAATG CCGATAGCGTGAGCGGCAATGGAAGCATTGGTGGTGTCAGAAGCAGTCATCAACGGGGACTTTCTATTTT TGTATCATGTCTATTTGACATAGTAGATAGGTCGAGGATTGAAGTCTGGTTAGATGTTTTATATTTTTAA ACACTTGCAAATTTTTGTAGATTTGTTGGATTAACATTTTATTATTGATTCTTGAGAGAATTTGATAAGT T >gi|3450382|gb|AI100421.1|AI100421 34796 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88F5XP 3', mRNA sequence GACATGCCTTAATCAAAGTTGNNNTGCCGGGGGCCNTTTTGACCGGTNCTTGCACAAATGCACCCACACC GCATCGCAGCCACACCCGCATATTCCCACCATCACATGTATGGTGGGAGGACGAGTTATGGTTGGGGCAG CAAGTCCAATGGTGCCTTTCTACACTGTCTATCCTTATCATCAATCTCAAGCCATCGGGTTTCCACAACC TTCATTTTCGAAACCTCTTTCTTTTTCCACTCCTCCTATATCAGGCACAGTTGGAGGAGAGAGCATACAG AAGAAGGCCATACATTGATAGGCTAGAAGCTGTTAATCAAACGATTGACTCAGCCCAAAATTATTCATTT TATCCATCTCACTAAGCTTTATTTTTT >gi|3450381|gb|AI100420.1|AI100420 34795 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88F24XP 3', mRNA sequence GTAANCCAAGGTGGCCTTTGGCCATTTCGNCTGNGGCCTTAAGTGGATTAGTTGGNCCNTAAGGCCAAGT TATAGAGATGTGTTTACGGGTAAAGATGAANGCTTTAGGTTTTGATGTAATCTTCTTCGGTTTTTCAATT CTCTGTATTTCTCTATCTTTTTAGTTTATCAAGTTTAAGTTTTATTTGGGGTTTCTTCTTCGTTTGGGTA TCTTTCTGTTTTTCCTTAAGGTTCTTCGTTTGTTTCCGTGTCGTCTNGGTTAAGTCAAAGTAAAGAGATG TAATTACTGGTTAGATGAATCTTAAGGTTTCCATGTAACCGTTTGTACTACAATTCTCTGTACTTCTCTA TCTTTAATATTATCGAATTTAAGTTT >gi|3450380|gb|AI100419.1|AI100419 34794 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88E7XP 3', mRNA sequence GCCCTGGTGCTCCCCCTTGCCATGCCAGGAAGTCCCACGTNTAGCTGGTGGNCAGCAAGGGTNTGTGGAA TTCGGGAGAAGAAGGCGGATAACATTTGGTTGGCAGCAGAAGGAGTCTACCTTCCCCTTAATGAGAGCAG CAAGTAAGGTTAAGAGTGAAAAAACTTCTCTGGAGGACTTTGAATCTTATCTCTTACTCTCTAAACTCAC AATCAAGAAAATAGAGATATATATTTCTTAATTTTCGATTGGTAATACTTTTAGTGGCACGAATATATCT TGTTTTGGTAGATATTCTGCATTTATCTCTTTTTTAGGTCACCCTTAAGAGACACTATCTTATTATCCTG ATAGTAAATCCAACAATCCTCTAAAAATATCGTCTTGTCTTTCT >gi|3450379|gb|AI100418.1|AI100418 34793 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88E3XP 3', mRNA sequence CTAGGTTTNTTAAGNGGTTGGTTGGGGTTNTTACGGNGCCCACNTCTCACCCTCNGAGACCGCTGGCATC TGGAACTCTTANTGGTCTCAGGCTGATTCGATCCTTGGGACAGAAACTTGCANGCCNTCTGAACGTGNGG CCAAGCATCTAGAGNCCAATCTCCATATAAGCTCANTCTATGTGAGGTACAATCAATCTCATCGATCTAT CATCGCTTGGTCGTTAAATCCGTCAAAAAGATAATCACATGTGTTGTTGTTTCTTGTCTATATAATAATA ATGCTTGTAATCCCAAAAACTCATGTTTCCTTCNTTTCTACTCTCACTGTCTTTGTAATCTCTTTTTACA ATAAATCAATGTTTCTTGAAGC >gi|3450378|gb|AI100417.1|AI100417 34792 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88E2XP 3', mRNA sequence ACGGGCCTTAAGNCGGGTACCCTCACGTGNGGTGGCCCCTTTCCCGTCCTCGCCCCACTCCAGGTCCCTT CCCCGCCGGTGATGGCTCTCATGAGNCATCAGGTTTGGGACTATNCTGCGTGGGAACCGGAAGTNTTCAA GGAAAGGAAAGGGGTTGGNCGATGAGAATATGGTGATACGTTCAGAGGACTAGAAGGTCACGTCATGGAG CAGCTTAAAGTGTATGATCTCATATATCAGTTCAGCCAAAAGTCTCCCGATGATATCGTATGCAAGATCA CAATGATTTGGGAGAAGCGAACCGATGATTCGCCTGAGCCTAGCAACTACATGAAGTTCCTCAAAAGCGT TGTTGCTGACATGGACGAGCATGTTCTCAAAGCCTAAATCCCTTTCGAACCATCGTCATCACCTATCATC ATCATCATCATCATCATCATACATCTCCCTTTGTGTGTGTACTTGTATGGGTGTTTGAATCTTTCATTTG CGTAGTACAAAATCATTTTTAAATAAATTATGGTTTGAGT >gi|3450377|gb|AI100416.1|AI100416 34791 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88E1XP 3', mRNA sequence GATCTGAATTAAAAGNTTTAGNTTGTGGTGGTCTTTAACNAACTTAATTGAGAGATAACGATTCAAAGAG AAAGATTCAAAAACAGNGTTTTTTGTTCTGTTTCTTGAAACAGAGTAAATATNGCTCTGAAACTGCTCGG GTTCTTGGGGAGAGATGTTTCATACANTCATACTTTGTGAATGTTTACCTCATCGGTAAAAAGAGAGATG CTTAAAATGGTCTTAAGCATAAAAGTGTGAGAAAGATCTAAATCTAAACTTTAGCTGTAACTCTGTCTCC ATTAAAGAGAAAGGTTTTGTGGTATTAGAAAGATCTAATCTGAAGATTATCTTTGTGTTTTTCACTTTTT >gi|3450376|gb|AI100415.1|AI100415 34790 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88E11XP 3', mRNA sequence GGGATGGCACCTGCTCAACCTGTCCNNTAGGACCCAAAGGAAAGNGCAATTGCTACCACTTGGNTTCGNT ACCATTTGGNAGGGGAAATNCNTCCACTTAATGTATTGAGCCAGGGAACCAAGTCAGGTTTGATTGAGGA AAAACCGNGCATACCTCCGATCAATGAGCAGTGTGGCTCAAATACTGCACCANCCTAAGCAAAACCGAAA GAAGAAGAGAAGTGTGATGCCCATTCCACTTTGGTGTTTTAATGAGCATTTCGGTGTTTGTCATGAAACC AAGTTTTGAAATGGCACTTGTCTACCTAAGTGTAACAGATTCTTAATTTCAACAATTTTGTTAGATAATT TGTATTCATTCTCACTTAGTGCTTCCGTTGTTCTATCGTTATAAACGTTTTAAGATATACGCATGTAACT GAAAGAAGAAAAGCCATTATTGATCC >gi|3450375|gb|AI100414.1|AI100414 34789 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88D9XP 3', mRNA sequence GTTGATCTTCTTCCAGATCCNTTTGATTTTGNTNGATATGGAGGTTTCTTTGNCCACTNATGCTGCTGAG TTTTGATCAAGGATTCGATGGGAAGAATGTATTACCAAGCACCTTCCGAATTTGGCTTTTGGAAAGAATG GGTGAGATGGTTAAGAAATCAAGTGGAAACAGGAGCCCGAGATCGATTGTGGAACCAGCTAAGTATGCGG AAAAGCCAGCGAAATGGGGAAACCAGAGGGTTGCTGCTGCTCCGAGAAACATCCACCAGCCTCGCTGAAG AGATATGTTGTTAACTAGTCAGAGAAGTCAGAGCAGTTCGGTCTGTGTATCTTTAGCCACCACTGTACCT TTGTAATTTTTAGTATTTGCTTCCACAACAAAAATCTGTAACTTTGTATCTTTATGATGTTCATTCTCAA ACTTGCTATCACAAAAATGTAAAAACAT >gi|3450374|gb|AI100413.1|AI100413 34788 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88D7XP 3', mRNA sequence CAAGNTTGNGAAGATGCTCCCTGGCCCNGNTAACTTCTCCCGGAATNTGGCCCGACATGGGAGCTGATGG GGTCACTNTCAAACGCTAAAGTGAAAGTCCCGGTNAAGTCCATAATCCGGCGCCCAAGATCTGACATATC ACATTCCCGGTAGCAAGAAGTACATCCACGATGGCCGGTTTAAGAGCCATGTCCCGTTGTTGGACGAAGT TGTGGTAATTAAAGGCGTCGGTCATTTTATCCACGAGGAAAGGCCTGACGAGATAAGTAAACACATTCAC GACTATTTTCTTACTTTTTAGAGCTAAATTGTATTTAGAAATCACAAACAAAAAGGAATAAAGAGTTATA TACATCTTCCTTATCATGTGAAAGGGCAGAGCAAATAAAACGCTTTATTTGTCACAAACGAAAACGATTA AAGCGTTATATTTCTTCCTTCT >gi|3450373|gb|AI100412.1|AI100412 34787 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88C3XP 3', mRNA sequence CAAATTCGCTGNTTCTTGCAACGCAGTTTCNCTGGCCTTTGAGNCCGTCGACTCGCGCTNTAACCNCCGC AGTGTTCGTTAATCAGTCTACATNATCTTCAGAGCATATGGGAGTTTTGTCGACTGATCAGGAGCTTGTT AAGGACCCCAAGGACTNTCCGCTTGTAAAGACTTTCGCAGAGCAATCACCTCAGATATTCAGACAGCAGT TTGCTGTGTCGATGGCTAAGCTGGTCAACGTTGGTGTTCTCACTGGTGAAGATCGCGTCGGAGAGATCAG GAAGGTTTGCAGCAAATCTAACTCCAGAGCTTACTAAATTATAATCATCATCCCTCATGAGAAGGATCTT TTGTTTCTTGAAATAATTTCTTGTTTGGTTTTTGAGCTCTTTTCTATTGCAATTTTGTAATTTGTTGTAT GAACAAGAACAAAAACTGTGAATTATTTTCGTTGCAACTTCG >gi|3450372|gb|AI100411.1|AI100411 34786 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88A5XP 3', mRNA sequence CGGGCNTTGGGGCCGACTCCATNCAAGCCCGGGGTTTCCTTTGGACTTGGAAGACTTTTGGGTTCCAGAG AGAGGCCATTTGAGTCTCTAGGNGGAAGAGAGTGGACCANTGATNTATCCAGACGTTTGAGAAGCTTGGT AAGTACTGTGGATCGCCTAGATCTACCTTGAAGTGTGAATGGAGCAGCAACAATAGCTGCAGCAGCGAGG ACGAGAAGGACGAGGGAATCTAGCAGAATTTTTCTTCCTAATAACTATTTTCGAGCTTTCTGTTTTTGTT CTTTCTTTTTAAAAAACTTATTAAGTTCTTATGAATAATGACTTGTGAAGTTTGAGTTCGTCTCCTTCAC AAGCAAGTTGTATTGGTGTTTTCTACTTTATGAATATGGGTTTTATATACCT >gi|3450371|gb|AI100410.1|AI100410 34785 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88A20XP 3', mRNA sequence TCCCCTGTANCCGTTCCAANATGTTTATGGNGCCTCGACCAACAAATTGGGGGAATCCTCAGATTTTCCT TCCTCATTNCNTGTTTTTGCCAAATCTCTTGATTGATGATTTTGGCCATGCAGATGGAATTGAATCTCTG TTTGTGTAGCCTCCCTTCTCTGTTTAGCAGTTTCCGGTGAGAAAAAAACAAAAATCGATGGTTGCCCTTT TTCGACGTTGATTGTGTTCACCGGATCGGAGTCTTTGACGGCAAAGGATGACAGGAACGTTTCATCGCTT CTCTTGCAACACGTGTCTTGTTATACGATCGTGTTTTGTTAAAGAGATATCCTTCCTTTAAAGAAATGTA ACTAAGTGGACCTTTGTTGGGCTGTATTCTGTGGATCATTAATAAACATAATCTTTCCAGTG >gi|3450370|gb|AI100409.1|AI100409 34784 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88A17XP 3', mRNA sequence GGGCCCCGATTTCAAAAGGTAGCGNGTTCCCTTAGCCGGTTANAAGNTCCNNCCCGAGTNTTNGTTGACC CNCGATAGTCTTTAAGGTCCCAGGTGATGTTTGGTTTGGCTCCGGCGTTGTTCTCAAGGGCAAAGTGNCA GTAAAGGCAAACNCCGGGACTAAACTTGAAATCCCTGACAATGCCGTGCTCGAGAATAAGGACATCAACG GTCCAGNGGATCTGTGAAAAAACTTAAAAGACTTACTTTGATGCGTCTTCTTCTGTTTTTCACTTCTCTT GTAAATGAGAGCACTTTTGATATGAAACCTCTTTCATGTGAAAAGACACAAGAATNACGAGAGTTGAATA TGTTTTTGGCAGTTTAATTTAATCCCTCC >gi|3450369|gb|AI100408.1|AI100408 34783 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88A15XP 3', mRNA sequence TCATCCGCGTGGTNCCCGGATATTGCTAAGGTGAGAAGCCAAGATNATCTNCGCAAGCTCTAAGGACAGG TTCAAGNGGGAACTNGATGGGATTCAAGTAGAGCTACAGGCAACTGATCCAACAGAGATGGATCNTCGAT NTTTTCAGAAGCCGTGCCAACTAAAGAGTAAAAACCAAAGTTTATTATCATCATCCCCTTGAAAGATCTA TTCTCTTATTCTGTTATTTTTGAGTGATGGTACTGGTACTTGATTATGTTTTTACATTGTGTTGTGAAGT TATGAACCTATAAACAACTTCATTCTATCGGTGTTTCGGTCTTGTGTTCGATGTTGTCTTTGGTTTTAAA ATGGTGTGTAAGGACCCCAAATCGTCTATTGAAGATGAACCCTTTTAGGT >gi|3450368|gb|AI100407.1|AI100407 34782 Lambda-PRL2 Arabidopsis thaliana cDNA clone 88A13XP 3', mRNA sequence ATCTGTTTAGGTAACNCCNATGNTTAATAAATCCATTTCAAAAAAAAAAAANGGGGGTCGCCGCTCGCGN TCTTAGAACTAGTCTACAAGGNGGANACATGACATGTCCTTCCNTCCGGCGCTGACAAGCTTCCTCCAAG ATGCAACTGTTGTCTTGCTCCCAAAAATTGTCCTCTCCATCTCGCTGATTCTACTACTNTCCATTGTAGC AAATGATATATATCTAGTAAGAANTACCTGATGGTNTCCCTCCTTCGAANCCCATCCATTCCTCCCACTC NTCGATTTCCCCCATTTCTGTAATCNCCATTTCTTCTTCTTCTTTCTTAAACTTTTGCATCAAACACTGA AAATGTGATTAATATAAGGAAAATGGTTTCAATT >gi|3450367|gb|AI100406.1|AI100406 34781 Lambda-PRL2 Arabidopsis thaliana cDNA clone 87H8XP 3', mRNA sequence CTGGAATGATCCCNNTGAGAGGAGTGGTTGGTGCGACCCCNTAGNTTTGTGCCAGAGGACGCANCTGATT NCCCAGAACTATCAAGTCATATGAAACACNCCTTTGGGGGCATCGGTTGTTTTNAATTTCTTCTATACTA TCTGGTGTTGGATTTCGCTCTTTTTTTTGGATGCCAAAAGTACAATCTTAATTTTCTCGGATTTTGCTAG GATATTTCTTTCTCAACTTAATTCTAAGACATTATACATATTCATATCTTCTTTTTTTACCAACTTCTTT TTCAATGTTTTAAGGATACAAGTACGATTTACAATCGTTTTTTTACTTCT >gi|3450366|gb|AI100405.1|AI100405 34780 Lambda-PRL2 Arabidopsis thaliana cDNA clone 87H6XP 3', mRNA sequence GAGAACCNGTCCAGGGAAGGAGGCCAAAAAGAGTCCTCCAGCTGGNCACCAGAAGNCTGGAAAGAAANCA ACTTGCGGAAGTCAAGCCAGTGAGAGCCCNCCGGAATGTAAGCAGCCAGTGAAGAAGTGAAGAATCTTGG CTTAGTTATGATGAAGAAGAAGAGTGAAGAGTGTCTTTGAGCCGAGGTTGTGTTTCTTTAATTTGCAGAG TCATGGTCCGGTTTATTATATATCAGTTTTGGGTGATTGGTTTGCTATTTAAAAAAAAAAAATGGGTTCT TTGGTTTGGTTTGTGTCTCTTGATTTTTCCTTTTGTAATGATCTTATGAATTTGTTTCGAGTTAATGTCG TTCTCTGGTCAGATTTCGAATTCAATTCTATTTATCCTCCCTCGTTAATGAGAGAATTTGTGAGACAATC >gi|3450365|gb|AI100404.1|AI100404 34779 Lambda-PRL2 Arabidopsis thaliana cDNA clone 87G1XP 3', mRNA sequence TTGATTTGATTAAGCCGGGATTGATGGAATATGAAGNTGGTTGCCTGGAGTTTCCCCCCCGTATAAAGGA NCGNTTGATGTGCCTTGAAACCGGTGAAGCGGAAGGGATAATGTCTTNGTATAAAGGTTTTATCCCGACG GTTTCGAGACAAGCCACCGTTCACGGTGGTTTTGTTTGTTACGCTTGAACAAGTTAAGAAGTTGTTCAAG GACTATGACTTTTGAAAAAAACAAGAGTTGAATTATGTTGAAGAAGATGAATGATGGTGGCGACAATAAG CTTCTCTTTTTTTCTGGTTATAATTTTCTTTTGATTATTTGAGTAGTTTTAAATTGTTTCCCATTTGTTG GAATAGATCTATGATATGATAATTCTTCTCATGGAGAAGAAAGAAAGAAAGAAACAGTTCATTTGATTC >gi|3450364|gb|AI100403.1|AI100403 34778 Lambda-PRL2 Arabidopsis thaliana cDNA clone 87F9XP 3', mRNA sequence CATTTCCCANGTTNCCCGGGNAAAACCAGTNTGCCNATCAACTTGACAACCGGCTTCNAAAGGGNACTGG ATCCAGTTAAGGCGTTAAGGCAAAAGGGGCCAAAGTGGTGGTATCCCATCATGTACGTTCTTTTGGTCGG ACTCATCGGTCTAATTTTGGGATACATTATGAAGAGGACATAAACCACCCACCTTGAAATTAATCCCTCA CCCGCCACGAAGGAAAAAAAAAAGACTTTTAACTCTTTTCAGTCGGACATTTTTTTCTCTTCTGTATTTG TCAATTTCGCCTTAAAAAGGTGTCCTAGAAGATTTGTGTTTCGTAACTCAGTTTGCTATGTTTTTTTCAA CTTTTGTAATCCAAATGACTTTGCGTTGGTTCTTTCTCCACT >gi|3450363|gb|AI100402.1|AI100402 34777 Lambda-PRL2 Arabidopsis thaliana cDNA clone 87F10XP 3', mRNA sequence GGACNCAATGGGAGAAGTGGGNTTCCGGACCTGGAGGTTAAGCNCATGCCCTGGCNATTACCATTGCCCT GGTTCTCATCATCATCCTCTCAATTTGTGGGGGATTCAACTGCGGTAAATAAGTCTGGAACATTTCTTCC CGGCGTTATCGACTGCGCTCTGTGCTTCCCAAGATCTCTGAGAATATCTTCATTCAGTTCGTTGTGCTAC CTTTTTTTTGTTTTTGTTTTTGTGATTTCTATATTCTCATACTATATGTTTCTTCTTAGATTGTACTTCT TGAAATTTGTTTTGTATAGGCTATATATATTATACATATATGTATGCATGTTCGACAATCTGCAATGTTG CTATTGCTGGTACTGACACTAATTCTTGCAAACCAATATTTGGACGATACTTGTACTTGGCAATTTACT >gi|3450362|gb|AI100401.1|AI100401 34776 Lambda-PRL2 Arabidopsis thaliana cDNA clone 87E9XP 3', mRNA sequence CCTTTCCAATTACGGAGCTCTTGGAGGGAACCCTNTACTGNAAGCCCCCATTTCGCTCAGCTCTTCCAGG GAGAAGGGANNTTACAACCACTTAATCAAATCCGCTTCCATCAAACGCTCTGCAGCCGCAGCAGTCGCCG CCGGTGTACCAGCAGCCTCCGTTCCTGAATCTTAAAATCCAATAATTTCTCCTCTCTAGTCTAAAATTTG AAGTTAATGCCAAACTGATTCAGTTTGATTTCTCTTTGTGAGAGCGTGTGTGTAATCTATGCTTTGATGT TCTTATTTCCATTGATGTCTCCTAAAATTCTATGTTTGTGTGGTGATTTGGTTATCTATAAAAAGTCTGA AACTTTCCTT >gi|3450361|gb|AI100400.1|AI100400 34775 Lambda-PRL2 Arabidopsis thaliana cDNA clone 87E12XP 3', mRNA sequence TACTTAACAAACCTNTTTGNGGGTTTCCGGATTNGTAAAAACNCCCGGATTTCGATACATTTGGGGNTCC TTTTGNGTGTGGAATGTTGTATGNTAGGGTTTTGCGACCCGTGGAGCATCGANCCGAGTAGGACGTGATA CGGAGAAAGAGGGGAAAGGATACTTTGGAGGACAGGAGGCCAGCTTCGAACATGGANCCTTACATTGTTA CTTCCATGATTGCAGAGACCACCATCCTCTGGAATCCTTGATGATCATCAGATCAAGAAAAAATCTTGAA TGTCACTCAAATTTGTGTTTCTTGCAAGATTCAAAGTTTGTGTTCTCTATCAAGCAATGTCTTAGGATAA GTCAAAGATTTGCTCTGCTTATTCTGCTTTTTATTTACTTCACATCCTATTGAAAACATTTCTGTGTATT ATTTATGAATAAACATTATCTT >gi|3450360|gb|AI100399.1|AI100399 34774 Lambda-PRL2 Arabidopsis thaliana cDNA clone 86F12XP 3', mRNA sequence ACTTCGGTGGCCGTNCTGGNCAATTTGGAAGCTCCCATTGTCCGGATGCNCCGGCTCCGCTCAAGTGTTG AAGGNAAGTTGAAGATGCNAGGAAGGNGTCCCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACC CGTTAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGTTCACCGAAGCTTAATTTCTTTTCTA AAACATTCTTATGAATTATCTCTGCTCATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGAC AATTTCTATCGGATTGTCAAATGTCTGATTTATGAATATGTAATTTATATATCCGTGCGTCTTGATTTTT TCCGATGGTTAACTAGTTTGAAAATTTCCGATGAGATAAGACAACATAC >gi|3450359|gb|AI100398.1|AI100398 34773 Lambda-PRL2 Arabidopsis thaliana cDNA clone 86D9XP 3', mRNA sequence GGCACGGTTCCTTNTCCTACGCACGTCTTGCAGGACACTTGTCTGAAACATGGNCGGNCAGCCCCGNGAC CGTTGACCGCAGCTCAGACCACTCTCTTGGCCCGTGCCAAGGCCAATTCGTTGGCTCAGCTCGGAAAATA CACCGGTGAGGGTGAGTCCGAAGAGGCTAAGGAGGGCATGTTCGTCAAAGGGTACACCTATTGAAGAGAT GATGCTGTGAAAAAAGAGATGAAGCAGATGTTTTAATCACATTTGTTTTTGAGTTTGCTTGTTATTAATC ATGTCAAATCATTATTTTCTCTGCTTACTTTGCGTTAGCTACTCCTTCTAATAAGTTCTATTATATTGAA GTTATCTATCTCTCTTGATCTATTTAAACTTGAAACTACAACTATTCCAT >gi|3450358|gb|AI100397.1|AI100397 34772 Lambda-PRL2 Arabidopsis thaliana cDNA clone 86A6XP 3', mRNA sequence TTCGATTGAAACATTCCGGGGNAAAGGACATGACGGAAGGGGATCNNGGAAATTTGTTGAGATTGCTCTT AACTGTGTGAGTTCAAGACCTAAAGAGAGATGGTCAATGTTTCAGGCATACCAGTCACTGAAAGCTATTG CTGAGAAACAAGGCTATTCGTTCTCCGAACAAGACGACGACTTCCCTTTGATTTTCGACACGCAAGAGAA CGAGAAAGTGTGAAAATGAACCTTTTATGATACGAGGAGGAAGTAAGAGTATAATTATTTGTTGTCTATA TCATCTTGTACTACTTGTAGAGACACTATATGTTATTGTAAAAACAGAAATGTATATGTTATTTGTTTTC TCTTG >gi|3450357|gb|AI100396.1|AI100396 34771 Lambda-PRL2 Arabidopsis thaliana cDNA clone 86A4XP 3', mRNA sequence TTTGCCCATTATTCCCCCAAGCTNTTAATCCGACTCACTATNGGNAAACTTGTACNCCCTGCAGTTCCCG GTCCGGAATCCCCCGNTTCGACCCNACGCGTCCGCTTGCTATCCACCGNTGGCTCCCGGCTTNTTTGAAG GAAGCTTATGGACAGGTCAAGCTTCGTCAGCTTGTGTATCCTACGAAGCTGTTTTACACTTTCTACTTGA AAGGTGTTGCTGCTGATTTACCTGTGGAGCTTACCGGAAAACATGTTGAGCCGTCGAAGGAAGTGAAACC GGCGGCTGAAGCTCAGGCGACTCAGCCCGGCGCTACGATCGCTAACTTTACTAATTGAAATCTAAATCTT TGTGGGTGTCTTTGTCATGGATCTTATTGGGCTGTTGTTCATTGTGTTTACATTTTAATAATGGGCCTAA ATAATGAGCCTTTGTATTGGGCCGTTCTCGT >gi|3450356|gb|AI100395.1|AI100395 34770 Lambda-PRL2 Arabidopsis thaliana cDNA clone 85D1XP 3', mRNA sequence TGAAGAGTTGTGGAGGCCAAGNTCAATCTCCAGGAGTGTTGCCGTTTGAAAAGGCTTTCCTNCACCGACA GGAAAACATGTCAGATTTGCCCGGTGATGAATGAGTTCAGTTTGAATCTTTCTTCTTGGAGTTGTGACAA AAAGCCTCATATGTCTCGACTTTTTTTTTTTTTTTTTCTTGTTGTTGCTTGAAGATTCACAAATCTGATT CTTGTTATTACCTTGTTGTTATTTTTCAATAACTAAAAGTGTAATCGGAATATGACTCTTTTCATTTTTA TCTTCTCTTGCTTGTTGTGAAAAAAGGCTTTCAATTGTAGTCTATCCTAAACACTTAAAAATAAAAACCG GACTTAACCGAT >gi|3450355|gb|AI100394.1|AI100394 34769 Lambda-PRL2 Arabidopsis thaliana cDNA clone 85B2XP 3', mRNA sequence GTCCCCGCGTGGNAGACTCCTTTTCAANTGTCCACGTTNNCCCCTGGGTGGCCCCCNTCTTAACCCGNCC AGNCCNTCAATGCTTCACAAGTGCCCTGCTCGATCCCTGCCCCAAAGCGTCCAGTACGTGCGTAACGACC GTGGCACCCCCCATGTGCTAGACAACAATTACTACCGTAACATCCTAGACAACAAGGGTTTGCTCCTTGT GGACCATCAGCTCGCACACGACAAACGAACCAGACCAATCGTTAAGAAGATGGCTAAGGACCAGGCCTAC TTCTTCAAGGAGTTCACTAGGGCAATCCAGATCTTATCCGAGAACAACCCCTTGACTGGCTCTAAGGGTG AGATCAGGAAGCAATGTAATCTCGCAAACAAGAACCATTGAAGTTGGAAAAAGTGAGAAAGACAGGGGCT CTGGTGTGTTGAGTTCTCTGCTTGGTACGAACCAAGATGAATAAAAAAATCTTTTAAGTT >gi|3450354|gb|AI100393.1|AI100393 34768 Lambda-PRL2 Arabidopsis thaliana cDNA clone 85A8XP 3', mRNA sequence AATTTCCCCCTCCCGNTTAAAAAATGGCCCTTNGGAGACTCCGNAGAAGNTGACCNCTAATGGNNCAGAA CCCCGCAAGATNTTTCAAGNNGGAAACTGGTGNCAAGGTTCTCTTTATTACTAANGACCCACTTCCCTTT AGTCTCCTTTGTAAATCTCTCCAGGAACACCTGGAAGCTCAAGCCAAGTACTAATATCTACTTAACCAAG ACTTTNTATAAATAAGTTTATGCAGAAAAAAAAAGTTATTAGGAGATTTCTAGGTTAAGTAATAATATCG AAGAATTCTCCTAGTAGTAGTGTCTCAAATAGATTTCTCTAGTACTTGTTATAATCAACTGTATCAATAT TTACTCTGTTTTTCTCTGTCTCGTGCCAACAAAGTGATGAAATCATTAGCCTTTTTTACC >gi|3450353|gb|AI100392.1|AI100392 34767 Lambda-PRL2 Arabidopsis thaliana cDNA clone 85A11XP 3', mRNA sequence CAAATTTTGCCCACCCATGGAGTTTTNGCATCTTGAAACTATTGATTTTGGACTAAACTTNAGGTTAATG TTTGTCTTTCCAATTTTCCGGTAGAGTTGTCTTCTTCCTCNGCGGATTTTATAATTTCCCTTCAATAAAT TCTCCATTTCTGCTCTTGAGGAACCAACCATTGGGAACTCTGTAATAAAAAGAACAAGCTGTTGTGCTGC TATGTTGGTTATGATTCGTTTTCCTTTTTCCTTATTGTTTGCTAGAAAAAAGAAAGAAAATAATAAATCG TTGTGAGTTGCGTTATTTGGGCAACTACTACTACTATTCAT >gi|3450352|gb|AI100391.1|AI100391 34766 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134M21XP 3', mRNA sequence CGTATTTGCTAACANGCAGGATCCNCCCAAATGCTATGAATGCAGCTGAGATCACGGATAAGCTTGGTCT CCACTCTTCTCCGTCAGCGTCACTGNTACATCCCAGAGCACATGTGCCACTTCAGGCGAGGGGCTTTACG AAGGTCTTGACTGGTTGTCCAACAACATTGCCGGCAAGGCGTAGAGGGAAAGTTCGTGGTGGAGTTGATT TGCTGAGCAAATCTGGATGCAGGGGCAAACATTATCTGAATTTTTTTTTTGGTTTCCGTTTTCGTTATTG TTCTGCTTTTTTTTTTGGGATATGTCGATGGATTTTGTGATTGTACGTAGAACTTAGAAAAAAACTACCT TTTATATAGTTTTGGTAAAACTGTAATCGAAGATTTCACCTACTGCTTT >gi|3450351|gb|AI100390.1|AI100390 34765 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124B1XP 3', mRNA sequence AAGCTTAGGAGACATTCGCTGATNACCCCNTNAACGGGGATTGTNTAGCNGCTTTGGGNCGNGGTGGAGG AGCTGANTGCGNCGGCGAGTCATGCTAGGGACAAGAAGAAAGCTGTTGGCTCCGATCCTTTGGAAGAGTA TTGCAATGATAATCCTGAGACTGATGAGTGTCGTACTTATGATAATTAAAAAATATGTTTTTGATGTTCG AATTATGAAACTTTAGGTATGGATCAATGTTTGTTCTTCTTGTCCCTTGTTGTTATGTTTGTGTTTTTGG TTTGGTTGATGATTGTAATGTGATAAATGAATATGAATAGTACAATACACAACATATGTTTCATAATGTG TTTGGTTCGATTAC >gi|3450350|gb|AI100389.1|AI100389 34764 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122H4XP 3', mRNA sequence CCGGATCGGCGAAAGAAGTGNGGNCAANCTCAGCTACGTGTTACAATCTAGGAAACACGTCTCCTGTTCC GGTTGGGAGATTGGTTTCGATCTTGGAAGGATTGTTAGGGACAAAAGCTAAGAAGCATCTTATCAAAATG CCAAGAAACGGTGACGTGCCTTACACGCATGCTAATGTGAGTTTAGCGTATAAAGATTTCGGGTACAAAC CGACGACGGATCTCGCGGCGGGGCTGAGGAAGTTCGTCAAGTGGTACGTTGGTTATTATGGGATTCAGCC GAGGGTAAAAAAGGAAACTTCTCACGCCGAAGATTCCGCTTAATAATTTTCTCTCTACCACCATCTCTCT CATCATCACATGCTTGTTTATTTTTCTTAC >gi|3450349|gb|AI100388.1|AI100388 34763 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121M20XP 3', mRNA sequence TGAGAATGTCAATGNANGCAAAGGCTTATTTGCACCTCTANTTGTTGTCACACGCAACCTAGTAGGCAAG AAGAGGTTTAATCAGCTCAGAGGAAAAGCCATTGCCTTACACTCTCAGGTGATCACTGAGTTTTGCAAAT CGATTGGAGCAGATGCAAAACAGAGACAAGGGCTTATCAGGCTTGCTAAGAAGAATGGAGAGAGGCTTGG TTTCCTTGCTTAGGTCTTAAAAAGAACAAATCTTTCTCTCTGCTTGTGTCTGATATATACACTCACAACT CCTCTTGTTGTTCTTGTCTAGATGTATTTTGTCNAAACCTATAATCTTGATTTTTGTTAC >gi|3450348|gb|AI100387.1|AI100387 34762 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120M20XP 3', mRNA sequence CTTCCGGTGAGCCNGCCTCTGAGGNAGGCTTTGACAACAATCNAGTGNCACCANCAAACATTCTGGAGTC ATCATCTCAGGAAGTTGGTGGGAAACCCTACTATTACTTGTCTGTGTTGACAAGAACGGCTGATGGAGCC GAAGGTGGGAAGCATCAGCTGATCACAGCAACCGTGAATGGAGGGAAGCTTTACATCTGCAAAGCACAAG CTGGAGACAAGAGGTGGTTCAAGGGAGCCAGGAAATTTGTCGAGAGCGCAGCCACTTCTTTCAGTGTTGC TTGAGTGAAAGCAACACAACGTAACAATGCTCTGCTTGCTTTCTTCATTTGTCTCTTGTAAAAAATGGAA AATGAAACTGAGCTTTTGAG >gi|3450347|gb|AI100386.1|AI100386 34761 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116D9XP 3', mRNA sequence CCGTTGGGNAATGGCCGGAGAACTTGTCCCGNCNCCNGATTAGGTCAGAGGATTGTNACATTGGNNGCTT GGATCGTTGATTCAATGCTTTGAATGGGAGAATGTGAAAGGGGAAGAGATGGATATGTCTGAGAGTACTG GGTTGGGTATGCGTAAGATGGATCCTTTACGGGCCATGTGTAGGCCTAGGCCCATTATATCTAAGCTTTT ACTCTAATAAGATGAGTAGAGGTT >gi|3450346|gb|AI100385.1|AI100385 34760 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116D8XP 3', mRNA sequence CCATCGACAGTGCTGANCCAANATCAANTCTCAGCTNGGAAGNTCAGTTCAGCTCACCAAAAAGTGNCAC CCAATGGTTCNCGAAAGATGGAGTTCTTGTTGAGGGTTTATTCTGGAAAGACGTAGAAGCACTAATCAAG AACTATGCAGAAGAAGAACCAAAGAAGAAGAAATGATCATCTTCCAGAGAAATATATGCTTTTGAAACTC CATATGTTGGCGTTTTAGAATACTAAATCGATGGTGACTTTGTTTAGAGATGAAACTAATATTTGGATTT TTCCTTATAGCCAACTTTTTGAATTAATCCGAGATTTTATGATCACTA >gi|3450345|gb|AI100384.1|AI100384 34759 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116D4XP 3', mRNA sequence GCCCATTGTGCCAAACNCTTTGGGTGGAGGCNGNANGGAGCAAAAGAAACCGCTGAGCTTTGGGNGAGNA TCCCGAAGGAGACTTCTTCNCCTGAGCCCAAAGTTGTTAAAAGATTTCGATAAAGTTTGAGCTGATACTA CANGCTTTGGAATATNANCANGAGCAAGGGAAAGATCTAGAAGAGTTTTTCCAATCAACAGCAGGTAAGT NCCAGACTGATATAGNCAAGGCTTGGGCGTCAGAGATTGTTTCAAGAAGACGAAAGCAACATTAGTTCTC ACTTGACTCTTTCTTTTTGTTTCTTAACGTCTAGCTCAGTGGAGTTCAAATACTCGTNCGTTTCAAATTT AATCATCTAAGTTTTTTTTAAT >gi|3450344|gb|AI100383.1|AI100383 34758 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116D3XP 3', mRNA sequence AAGNGCCCTGNGGAAGGACACAGCTTTTCCATNTCCAAGATGGTCTTCTGATCACATNGCACTTTTGGCT GAATTTCGCTGCATGCCCCAGGGCCAGACGGAACANTATTTTATAGAGATACTGCAGCTGTAATAACCCG ATACCAAAGACTGGTTCCAATGGATATGGTTAAGCTACATGAAGTAGATAGCATGGCCATGTCCCTGGGG TTTCTCCCGCTGGGTTTTTCGCTTGCGTTCTACTCTGTATCACAGTTTTATTTACTGCTTGGTTCGCTTG GCTTTTCTTTCTATAGTTATTTCCTCTTTGCCAGAAAGTTTTGTCTTCACTGGCTTGTGATTGTAACAAT GTAAACAATTAGATTCTTCAAGAAAATAGTGACTTCACCTTTTCCATATT >gi|3450343|gb|AI100382.1|AI100382 34757 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116D22XP 3', mRNA sequence CTTGTTGGCCTAANCCCGNTCNGTNGGAGCTAACGACCCGTNTTCAAGAGCTCCGGTTGATGGAAACTAT AGAACAACCGCACAGGATCATAACAATTATCGCGGTGGTGGCTCGGGTCTTGATTCAAACGGGTTTGGTA ATAGAAGAGATCATTTGTTTGGTAACAACAAAGTTTTGGATAACGAAAGTTAGAATCTTTGGATTACTTG CAAATTCTGGCACGTTAATCACCACTTACTTCAAAAATTGTAATCTTTGTAACTTTATATAAACGCTAAA GGGTTTTATT >gi|3450342|gb|AI100381.1|AI100381 34756 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116D18XP 3', mRNA sequence TCAAGGGAGGACCACAATCCCAAANCAAGNGCAGGCTTTTTACAANCGCATTCATTCAAAACTCGCTGGN GGACAGATTTTAGCCATGTGCGTATGCGTTTNCCCTTTTGTTAAATANAAAANCTATTTGTTTNGTTTGT TNGACTTGATAGCTTTTTGTGGGATTGAGGATTGAGAGAGATAGAGAGATTTTACAAACTTTCTCTCTTT CTCTCTTTCTCTCTTTCTCATGGATAATTCGTGTCTCTTTGATTT >gi|3450341|gb|AI100380.1|AI100380 34755 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116C9XP 3', mRNA sequence CTGACCCAGGAACCGATCAAATTCATGCCNTGGGNAGAGAGATTGNTTCCCACNTTTCCCTGTCCCATCG AATCATCGCACGATCCCTNGCTTGTGGCATAGACACNNCTGAGAGAAGTTGTGTCAGAACTCTACAGTCN CCTGGGAGAATTCTATCAGGCTTNATGATCAATGTATAAAAGAAAACTGGGGACTTGTTTGATCGATCAA AACTTGTTTATGATGTAACTATAACTGGTTTCCNATGTACATTGTGAGCTTTCCAAGAACAATTGTTNTA ATTAATTAAACACAAGTTATCGAC >gi|3450340|gb|AI100379.1|AI100379 34754 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116C6XP 3', mRNA sequence CCGGATTGCCCNTTACGAGANCAGCTTGAATGTATTTGAGGGCTGAGACANGGACAGAAGCTGCGTTTGT TAGGCTGGTTAGGACTTCTGATCCGACAGCAATTGTGGTAATGTTGGTCGCAGGGTAATATGCAGCTACA TTTCTAGTCACCCAATTGGCTGCGGTTGCATTTGATTGGCTGATACCGAGAAGCTGGTCGTTAGGTACTG AGATTATAACTTGAACCCCGGTGTGAGCAAACGCGAGAAGCATTGAGCGGTCTGCGTCATAGAGGCGGAC GCGGTTGATGTTCTGTGATTTGAGGAGTGCTACTACTTGTGTTGGACTTGGCATGTTTGTCACTTCAGTA CCAATATTCACACCGATC >gi|3450339|gb|AI100378.1|AI100378 34753 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116C24XP 3', mRNA sequence TGGGTTTTGACCAAAACNTTTGATTACCTTCCGAGNAAGNTCNATGTCATGNCAGGGGCAAAACAGACCN TTNAAGTTGATGTTGATGCTTGCAAGCATCTTGNTGTAGTGGATGAGTATGGAAAGAGGAGANTCCCAAT GGGTGAGCATAAGCTGCACATTGGTGACCTTAAACATNCTATTTTGGTCCAACCGCAACTTTGACGGACG CATAAAAAAACCAACAAATAAGGAAAGCATTTTAACAAAGTGGAGTGTTTCCTCTTATTTATATAA >gi|3450338|gb|AI100377.1|AI100377 34752 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116C23XP 3', mRNA sequence ACCTTTTGTGGNTGCNACCTNCAAGNTTGNCCGCTGNGGACTAAGAGAGNGGGTACCCAAATGCCNTAGA GTCGATAGCTCCCCAAATTGGGGCCGNTCAATCTAAACCGGAANTCATACACAAATTCACAAGCTCAGCA TCTTCTCCCTCTTGTCTTGTCCCCTCTCTTTCGTTACATGTTTGAGTTACATTGAGAAAATAATTTCAAA CCACAATGTTCTAAACGCGTTTATGTACATGTTTGAGGTGGGATTTGGAAAGGATGTCGAGTTTTGTGAA ACTTTGGAATTACGAGACTACTAGACTTTTGTTTCTCTGTTTACGTTTCTTAAATCAATAAATAAATAAG TTTTTATTTCATC >gi|3450337|gb|AI100376.1|AI100376 34751 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116C19XP 3', mRNA sequence AAGGTTGAAGGCCACNACCCCTTTAGTCTCCATTGTTGACATCCGTGCTGCAAGAAAAAGATCAAAGNTG CTTTCCAAGAGATGTATGCCATTCAGACNAAGAAAGCAACACCCTCATTAGGCCCGATGGAACANAGAAG GCGTATGTGAGGTTGACTCCTGATTATGATGCTTTGGATGTGGCTAACAAAATCGGGATCATCTAATCTG ATCATTGTCGCTCTGTGATTTTACTTTTTCTGGTTTTTCTCTTCCATAGTCTCAGTTTTGCTAGAGAAGT TAAGATATTACTATCACCATCTCTTTGTTATGCTTTTATCTTTGGATTCAAAAAGATTATATGTTTGGTA TTTGTTGATGCGTCATAGTTTCTATTCAGATCGTGTTCCAATTCTT >gi|3450336|gb|AI100375.1|AI100375 34750 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116C15XP 3', mRNA sequence TTCATCTCGGGCAAACCGACCCNCGGCAGGATTTTCCCCCGCGGTCTGGATNTTGAGACCCCCTNGTNCA AGNGGGANCTGGATAGAATGGTTGTGAGCTATGAGAAGCTGCTGGCTATAGGAGAAACAGATGATGCTTC CTTCATCAAGACCCTCAAGAGGATTCCTTTGGTTACTTCTTTAGCCTCTGAGATCTTGGCTGCTTATCTC ATGCCTCCTGTTGAGTCTGGCTCTGTTGATTTCGCCGAGTTTGAGCCTAATCTTGTCTATTAGTAGCTGC AATGTCAAGTCTTGAGTTTACGGCTGGTTCTTGATTTCTTGTAATTGAATGATCGAAACTGAGAAACATC GTCTTTTTTTTTTTGCAATAAACTTTTACTGCATATATTTGATC >gi|3450335|gb|AI100374.1|AI100374 34749 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116B2XP 3', mRNA sequence TAACCGNTCAAGCCNACTCNCCATTGTCCNGAAGCAGACGGGATTACACGGCTGTCGATTCTCCGATTCG TCGCCCTCGTCGAGCCAATCTGGTCAAGTGCCTTACCACGGATGATCAGCTTAAAGCCATCTTTAGAATG TTTGACCGCGATGGAAACGGTTACATAACGGCGGCGGAGTTAGCCCATTCGATGGCGAAGCTAGGTCACG CGTTGACGGCGGAGGAGTTAACGGGAATGATCAAAGAAGCTGATCGAGACGGCGATGGTTGTATTGATTT CCAAGAGTTTGTTCAAGCGATTACTTCAGCTGCGTTTGATAATGCTTGGGGTTGAAGAAAGAAAGGTATA TATATACATAGTTTGAAATACTTGTGTTTTGTTTTTTTGGCTTCATCCTCAAATCAAAGACATTTGGAAG TATATGTGTGTAGGTGCGATTCCATGGAAAATGTGTGTTATTTATTGTTT >gi|3450334|gb|AI100373.1|AI100373 34748 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116B24XP 3', mRNA sequence TCGAGTTAGCGCCCGGATTTTTNTACCGTGAGCNCGGAACACTCCCGGATACTCCGATGGACGGTNNTGG NCAATGTGGAAGCTTCCATTNGTTCGGATGCACCGACNCCCGCTNAAGTGTTGAAGGAAGTTGAAGAATG CAAGAAGGAGTACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCANC AGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATNTCTTTTCTAAAACATTCTTATGAATT ATCTCTGCTCATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGATTGT CAAATGTCTGATTTATGAATATGTAATTTATAT >gi|3450333|gb|AI100372.1|AI100372 34747 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116B15XP 3', mRNA sequence CATTCAAGGCTNGCCCGGCNCCANTTTGGAAGNCAAAAACAGCAAAAAGGATAAGCGTTTGGTATTGGCC AATGGAAGATCTTTCAAAAGCTTTGCGTGAGTATGGTNTGAACGTGAAGCATCCAGAATATTTTGCTGAT AGCCCTTCGACTGGAATGGACCCTGCAACAAGGGACGAATAGAAACCAGGAATTCCTCAAAATCTTTGCC TAGTAAGGACGGTCATGTGTCTCAGATCCCTGATTCTCTGTTGTGTTTCAGTTAAAAACAAAACTCACTT GTCTTGCTAGTCCTCAATTACTACATTACATGTATATTCGTTTGTTGTTTGTTCTCTGGTGATTTTTGGG GTTCTACATCACTTATCCACCATT >gi|3450332|gb|AI100371.1|AI100371 34746 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116A6XP 3', mRNA sequence CCAGCACTGGTTTGGTGGTATCTCCAAGTTGCCCNGTTCTCTGATCAGTACACTCTCACCTCGACAGTGC TGATCCAAATTCATCTCAGCTGGGAAGTCAGTTCAGCTCACCAAAAGTGTCACCCAATGGTTCACGAAAG ATGGAGTTCTTGTTGAGGGTTTATTCTGGAAAGACGTAGAAGCACTAATCAAGAACTATGCAGAAGAAGA NCCAAAGAAGAAGAAATGATCATCTTCCAGAGAAATATATGCTTTTGAAACTCCATATGTTGGCGTTTTA GAATACTAAATCGATGGTGACTTTGTTTAGAGATGAAACTAATATTTGGATTTTTCCTTATAGCCAACTT TTTGAATTAATCCGAGATTTTATGATCACTATTTAGAAAAGAATAAAAAGCTTTACCT >gi|3450331|gb|AI100370.1|AI100370 34745 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116A3XP 3', mRNA sequence CCCTCAAGCCGCGNGAAGCTCCTGCAAGAAAGNCCGTGTTGATGTCCGATGTNCAGTGNTGCTGCAAAGG CTCATGNTGNCTAAGTCGTCCCTGATTCTCTTGCTCTATCTGCANTCACACACCTACAATGTGCATCCAC ACGATAGGTATCACTCTCCTAAGGAAGTTTCTCGACTCCTTTCCCNTCGTCAGCGCCCGTTCATGAGCTA TTTGTGGATACACACTCTTCTCTGTACATACAGATCTCGTTCTTTCCTTTATCCAGAAGCTATANGATGA CTACATGTATACGTAAAACAAGTCTTGGTGGTGGAAACACAATACCTCGCGATGAAAGTGCCATCGATTC TGTATTTGTAACTTACTGTTTGAGAATGTTGTCTATGGATAAAAAGACTTCCATAGATGAGGGTTTGATA CAGAGAACCATCATTTCTTTGTATCCTCCAACCGTCAAACACAGTTGGTGTTTTAACTCTTAAGCCCAAA AGATCTTTTATTTGTGCCATAAGATAGAGATGTTGAAACACTATTTACAT >gi|3450330|gb|AI100369.1|AI100369 34744 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115M6XP 3', mRNA sequence GGATTAGGGCCTTTTGNCCCCCCNAAGNACCGGTTTAAACCCNTTTCCGGGNTGGNCATCTNCAGNTNAC GTGTTTGGTGCACCCCTTAAAGGTTNGCCGCTGAGGACTAAGANGNGNGGGTTCCCAAAATGCCCTAGAG TCGATAGCTCCCAAAATTGGGGCCGGTCATATCTAAACCGNAANTCATACACAAATCACAAGCTCAGCAT CTTCTCCCTCTTGTCTTGTCCCCTCTCTTTCGTTACATGTTTGAGTTACATTGAGAAAATAATTTCAAAC CACAATGTTCTAAACGCGTTTATGTACATGTTTGAGGTGGGATTTGGAAAGGATGTCGAGTTTTGTGAAA CTTTGGAATTACGAGACTACTAGACTTTTGTTTCTCTGTTTACGTTTCTTAAATCAATAAATAAATAAGT TTTT >gi|3450329|gb|AI100368.1|AI100368 34743 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115M21XP 3', mRNA sequence CCGATTCCNCTAAATTTTTTGAAGGAATTTTGAANATTGCCAANAGGGNNTTCCCCGNGCGCCTTCATNG GATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTNCATTGCCTACAAGCCCCCAAGCTTC CCCGAAGCTTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCTCATTTCATTTCCTATTGTCTG TGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGATTGTCAAATNTCTGATTTATGAATATGTAATTTA TATATCCGTGCGTCT >gi|3450328|gb|AI100367.1|AI100367 34742 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115L23XP 3', mRNA sequence GCCCCTTGGGCCCCTGGNGGGGTTCTNAGGACCNTTTCNAGTAGCCATCGTNCCGCTNTGNCCCCAGAAA GGNGCTCCNCCCTGCNAGATCTCCNGGGCTGCTTCCAAAGGTGNCCCCCAGGTGGCTGAAAGAGCCAGAG GAGGCAAGAGGTTGCCCATTATAGAGAAATGGATCCAGTGAGTATTACAGAGATTTAAGAGAAGAGCAAT AGAGGAGCCAAACAAAAGTTTATTGCACTAAAAATCAACAAATAAAGAAACTAGGTGTTTTTGATTCGGT TCGTGTAACAAAGTAAAAGCTTCACCAGGAATTTGTATTCCCTCAAACAAAATAATCTGATGTTTGTTTC TCTATGGAGTGAATTCTGTAACTAATATCTGATTATATCGTGGCATTCATGAAAATGTTATGGAACAAAA C >gi|3450327|gb|AI100366.1|AI100366 34741 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115L16XP 3', mRNA sequence TCCGGNTGGCCTGNTTAATCGGNTTCCCCGNACCAACAAACCTCACAACAAGGCTTGCCNGGGAAATTCA TGCGTTGGGNGGCTCAATTGGAAGCTTCCAAAATCCGAAGTCATCAAATATTGCATAGGTCCACTTGTGT CGGATTTCAGCAGTGGGACTCGCCGTCCTCGTATCATGATTTAAAGTACGATCCCAACACTCAACACTGC TCTCTGCTTACAGGCTTAAAAGCCAAATTGATAACTTGTCATTTTTATTTGAATCCCATCAATATGCCAT ATTATTTTTTTCTGGCGATCAGAGAATATTATTGTTTCTGTGATCTATTTTGCCATCATCCTTTCTAGGT GTCAGGGTTTGAAAATTTGCACCGAGAATTATGTTA >gi|3450326|gb|AI100365.1|AI100365 34740 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115L14XP 3', mRNA sequence TCCAGTTCAANTTTGATAGAACAGGCAAAGTGAGTTCTCTTCCTGGATNCNAGACATTCCCANATCTCGN TGNCAANATCTTAGGANCGTTCCTTGTNGTAGAAGAAAACCTCACCATATGAAACTNACCTTGTAGGCTT GTAGTGATCAACATTTGTTCTTTATTNCCTTCACTTCAAGAAATCTATCTGAGTGTGATCTGATTGAAAG TGTGCCTTTAGGGTCTAGTTTTTCAAATTTATGAGCTGTAAATCTATTTATTNCAATATTTCAATTGATC TATCAAAGTGTGTGTTGTGGATTTTTACT >gi|3450325|gb|AI100364.1|AI100364 34739 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115K17XP 3', mRNA sequence ACCNAGNCTTTAGCCAAAGTAAAGGNACAGTTTAACTNGGAACCNAAAANTTTTCTCTGAGGGAGGGACT GCCTCGCATGGTTAGTGACTTCCGTAACCGAATCTTAAACGAAGNCGAAGGTAAAGGTCTCTAAGTCAGT CACACAGAGATATAGAGTATAATCCTTCTTCTGCTTTGATTTGATATATGTATAGTCTCTTTTTCAAGAG CTCTGCTAAGTCTTTTTGTTCTCTCTGTTTTTTCTTTTTGGTTCTATCTCCAAGACACAGATTACTACTT ATATTAGCTAATGTTTTTGACTTGGGATTTTGTCATTGGGCCATTCACCACTAGGCTCAATATTAGTGGA AAGGTATTGATAT >gi|3450324|gb|AI100363.1|AI100363 34738 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115J17XP 3', mRNA sequence ACCCCANGTCCNAAATGCTGCCGTTACTTGTGNGGAATAGTGGNCCCAANTGCNAGGCAACCGGAGGCNT NGATTTGGATGTAGCAATGTTCAATCAAATAGACACCGATGGTTTTGGCTATCAACAAGGCCATCTCATT GTTGACTACCAATTTGTCGACTNTGGCAATGAGCTCATTGGGCANCCTGATTCCAGAAACATGCTTGTTT CGGCCATTGATCGCGTTTGATATTATGTAATGATTTTGAGGTCAATATCGATCGGTCTACATAAAAATAA TAAAGACCGCTATATATGTATTGTCGAGGGATATATGTTTCGTATCAATAAGGAAATTTTAAATATTATT ATCATTCGAT >gi|3450323|gb|AI100362.1|AI100362 34737 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115J14XP 3', mRNA sequence TCCTTCCATNTCACTAAANTTGGGTTCTTGTAAAAAGTTAGCAGAAGCNGTAGTGGAAGTGAAGNTTGGA ATTGTTAGNAGAGACGAANGGAAGCTCTTCTTCTTCTTTTTAACATGGTTTTAAAAAGTTNTCTTCTTTT TTAGGATTTTGTACAAAAGAATAGCAATAAGTATAAGTACTAGGAAAACAAAAGAAACTCTCTTTTTAAA CTTATGGAAAAAGTTGTACATAAAGAAATTCCTAAACTGGTTTTAATATTATTGTATATTTGGGTACCC >gi|3450322|gb|AI100361.1|AI100361 34736 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115I6XP 3', mRNA sequence TAAGGTGGAGANAGTCCGAGGNCCAATGTTGTTTNTCAAGTNTGAACGNNGANCAGATGAGGCGANAAGT CAGNACCATCTGGAACACGGCGAGATGGAAANCCGTCAGGTGACACGCCTCTTTTGTCATCGCACCTGAA ACGAGAAGGATCCTTTAGCTGCTTCAAACATCTTCAAGTCNCGNTTANGCTATNGCAACGTGCTAAAACT CATCAGTAATTATTTCAGCTTAAGTTGGTTGGTTTCGGATTTCTGCTTGTCGCTTCAATAATTGACCCAT CTTTTGGGATTTCACGTAACGTACTACACTTTGCTTTTTAGTTTTCTGCGAAACTAATGTATTTTGTAGC CTCTCAATCCTGGCTCTCTGTCCCATACTTCAGTTTTTTACACAACGCACTGCTTATAAAAGNCNCAGTT AAAGGTGTCTAAAGGAGAATGGTGTGTCTTTGACTGAGGCAACAAATAAAACAGTGAAAAGTTAAGGTTT T >gi|3450321|gb|AI100360.1|AI100360 34735 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115I17XP 3', mRNA sequence CATTCCAGGNTTGAGTCACATCGTCCCNCGNCTTGTCCTNCAACTACNCTTGAGGGGTGATNCCGTCTCG GNGACCGNGTTTTTNCCCTTTATCGAGGNANTCCCNTANCCTGGGATTTTCCCNCTCAGGACGTTTCAAC TGCTCCTACCTGATGTGAACGAGTGGTCANGCCTCTCATGAAACAATGNCATGATGCTCGTTATCTATCT ATCATCCCTCATCCGGAGTGTAATNCGCTCCACACTGATCAACAACAAGTTACTGAACAGGAACTGAAAA AGCAGAGGACTCAAAGCCGTGGCCTACCTGCCACCAGCTAGATCAGGTTTTCTCGTGACTTACTGTAGTC ATCATTGCCCGCGATGAAGGCAGCTATTGTGTGTTCTCTTCCCCAAAACAAAGGTCAAGTCAGGGTGGGG GAACGAACGAGTTTAGTTTGATATCGACATTGTTGATTTCTCTCAGTTGTTCTGATTCAGAATGTATCAA AGAGTCTTTTTTCATTTTATCTTTCAAGTTCGTTAGGCTTAGGCCTCTTTTTGAGGGGGTTTTAAGATAC AAAAGTTCACGTCAATGTGTCGAAATCTCTTCAGAGATGGTCTTAACCTATTGAAATTAAGATATTTTTT TTCACATT >gi|3450320|gb|AI100359.1|AI100359 34734 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115H1XP 3', mRNA sequence TGCCGCAATCCCAAAGCGTNCCATGCTTGCGCCTTCCTGATTNCNCNGTAGCTCCACGCTCGCANTGAAT GAAGAGCGTGATGCCGAGNGGTCCATCTNTNCCCGGCACANCACGTCCGAGTNCTGATCCCGGCTCACAG GTCCCACCGAGGGCATGAGAACATCATCGTTATGAAGATCGGTATGAGCTGTACGGCTCAGTTCCCGATA GTCGTCCTCGATGGCTGAAGTCACCAGACTCATTGAGGAGGTTTCTCATTCATCTGGCTCCCCAAACCTG TATCCGACGATTTTTTGGGGGTCTAAATGATTGATTTGAATATTGTTTGGGGTCAAGTTGCAATTCTTGA ATAGTGTCGACCCCACTTCCCGCCTTTTTTCTACTTCTTCTTCTTTGTTCTTGTTCTAGTTTGTTCGTTA ATTCTTGAGCCTCAAATTGAGATGAGACCTATCAGTTTCTTTTTTTCTTTCTTTCTACTTTTCTTTATTT CCAAAGTTTTAAAAATGTCTATAAAACTATTGCTTTTGCTAATTTTTGTATAAATATATAGTTGATTGCG TGTGAATAAATTGGTTTTTGTTTTCTTC >gi|3450319|gb|AI100358.1|AI100358 34733 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115H13XP 3', mRNA sequence AGATCAGCATTTTCCGACGCAANTCGTGTTCTTCCGTCGCCCGTNATCGNCCCGCGGTTTCTGAACANNC GTGACGTAGTTTCATCCGGCTATCGAATGGCTCGATATATACAGTGGTGTTCTGATGGTCAGAGTTTGCT CAGTTGGTTCCCANCATTCCTGGGATCGTCAGCCTTGTCAGCCATTAGAGATCTGTGTGATCCTTATCTT AATCTCTTCAGGAACATTATCCCTCCAGTCTTTGATACGCTTGACGTTAGCCCTTTGCTTGCTTTCGCCG TTTTGGGAACTCTAGGTTCGATTCTCAACAACAGCAGAGGATAGTCAATAGCCACTACTTACTCTGCTTT GAGTGATGATGCAAAGGTTATGGATCGTATTCCGTTTATCTTTGGCGTTTATATTGTCTATAGTTATAGC ATTTGGAAGTATTTATAAGGTAATGATGTATTAGACTCTAAAGTTTCAGTCTTTACTTCTGTTATGTGTT ATTTATGTAAATGCACGAATATGGTTTCAAT >gi|3450318|gb|AI100357.1|AI100357 34732 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115H10XP 3', mRNA sequence TACCCAGCTTNTTCGNTCACTATGGGANAGCTTGTACNCTGCAGTACGTTCCGNATTCCNGTTCGACCCC GCGTCCGATTCTGATNNTACNANAANCTTTTTTCAGACACNATTCNAAAATCTTGCCTTGAGTAGATCAA GTTCTTTACATTATCGTTAGAAGATGAGCCANTACGATCACANCCAGTCTGCAGGAGCTANCCCACCGCC ACCGATGTCTACCGTACATCACCACCACCGCCGATTGGTTACCCGACTAACCANCCGAGTCATGGTTCGG TAGCTCAGGGTAAAGTGGAAACCAAGTCTAAGGGTGACGGATTCTTCAAAGGCTGTCTTGCGGCCATGTG TTGCTGTTGTGCCCTGGACATTTGCTTCTAAGCCATTTGGGAATTGGGATGGNCTATTTATGACGAGTTT ATGTGAATGTGATGTGAATTATTATTATTATTCTCTCCGTCCNTATTGTATAAATTCTCTATTTTTTGTT TATTATTNTCTTGTAATACTTTGTGAGACGAAC >gi|3450317|gb|AI100356.1|AI100356 34731 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115E14XP 3', mRNA sequence CGGACGCACACGTGATCGCTNTCATCGATGATGGAAAAGTGGCTGAACANGGATCGCATTCGCATCTTCT CAAGAACCTCCTGATGGAATCTACGCGCGATGATACAGTTGCAAAGATTTACGCATACACAGTGATTGGT ATGACGTCAGGTTCAAGTTCTAGGGTTAAGGAAGATGATGCTTAGTACTTACTACTTTGGTCATATAGAA GAAAAAAGAAGGAGAGTAAAAAACAACAAACACCAGAAGATGTTTCTGATAAAAAACTCTACGAACTCAT CATTTTCTCTTTTTTTCTTTCTGTTTTGATTTTGGGGTTACTTATTTTTGGAATACGTTTCAGATTTGAT GGTATAGTATTATTATTGTGTATTATCATAATTAATCTAATTTTTCACC >gi|3450316|gb|AI100355.1|AI100355 34730 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115E13XP 3', mRNA sequence TGACNCCCTGGATAACCGTGAAGTGGACCCCGACNGTAGCNAGACCCCCTGTGGNCCNTGGTCCCTCACA TTTGTTCNCCCTNTGGTCCCTTCCCCNTGTGGAAGTGGTGTATCTGTTGTGGGATTTGCTGAAGGAAGAA CTTTACTCGCTGAGCGGTTCGATTATTCACTCCTTGCTTCAGTCCTACAGATACTGGTTGTGTGCTGCTA CTGAGATAGCATTAGGATTTGGGATCTTGAGAGCAAGTCTGTTGTTGAGGACTTGAAGGTTGATCTCAAG TCTGAGGCAGAGAAGAATGAAGGTGGTGTTGGAACTGGTAACCAGAAGAAGGTTATCTACTGCACAAGCT TGAACTGGAGTGCAGATGGAAGCACATTGTTCAGTGGTTACACTGATGGAGTTGTCAGGGTCTGGGGTAT TGGTCGTTACTAGAGACACAACAAGATGAAGAAGAAGTCACGAAATCTCCGGAAAAAAGTTTAGCTGCTT TTAATTTTTNCCAGATGCGTCAGTATTGTATTAGTCTCTCGCAAACCTCTATTTTGGCAATTTTTGTTTA ATTTCCAGAAGAGAAAAAAACAATCCATTGATTATCATATCACTATATATCAAAAGGTCACGATTTTGAT TAC >gi|3450315|gb|AI100354.1|AI100354 34729 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115B13XP 3', mRNA sequence TTTTTGGATTTGCGTCCNTCCCCGGNCCGCTTCCCTTTTCCCACCTATCGCCCTTGGAACTGTCCCCTCG GTCCGCCGATCCCGNCGCCCCCTCCGTTCAAGCTCAATTTGCCTCTTAGATCGTAAATGCCAGCCAGCCA NCGCAGAATCCCCTGGNGAAGCCCCGAGAAGCCACTGGCGACGAANCGCAGGAATCCGCTCCACCCCGAG NNTGAAGANNCCACCAGTTCCGTCCGGAACAGTAGCGTGCGTGAAATCAGAAGTATCAAAAAGCACAGAG CTTTGACCCGTAGCTTCCTTCCGAGATTGGTTCGTGAGATAGCTCAAGATTTCAGACGGATCTGAGGTTT CAGAGTAGTGCAGTCGCAGCTCTTCAGGAAGCAGCTGAAGCTTATTTGGTTGGTTTGTTTGAAGATACTA ATCTCTGTGCTATTCATGCTAAGAGGGTTACGATTATGCCGAAGGATATTCAACTTGCGAGGAGGATTAG AGGTGAGAGGGCTTAAGATTTGAAGAAGATGAAGAAAAACAATGGTGTAGAATAGATTTGCTTGTTTGCT TTCATCAGATTTGTAGATTCATGTTTTAGATCTGGTTTTGAGTTTCTTAGTCTTTTGTTCTGAAGTGTCT TCCAGATGTTCGATGAAATGCCCAAATGAAAATTTTAATCTACTTTTGCTACTTTCTAAG >gi|3450314|gb|AI100353.1|AI100353 34728 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115A22XP 3', mRNA sequence TTTGCNACAGGCCNTCCGTTGTGGTCGGCCCTTGGTCGNCGAGGTTGGNCCCTCCTNGCAGTTTTACATG CCNTTCCGNCCCTGACTATGAATGTTTCNCCAGGGCCCCGGTCNTNTTTTTCGCACTCTGCTCAGAGGTT NTGGCTTTGGGGGAACCCGNGCCACTTGTGGACCAGACCTGGCCTCCAGCTGTGGACTAAGNCCTCTGAG GAGTCCTACTGAACAGAGCTAGGCNCGTGACTTTACATTACGACCTCACGTTGCCAGCCTACACTTGAAG AGGATCCGTGATGCAAACTACATGTGACTCGCGACCACACTTTCTAAGAGATCATGCATCAAGCAATCAG CACAGAGCTCGTCAGCTTAACCCCACGAGTGAATACGCGCCTGGACTTGAGGACACACTTATCTTAACCA TGAAGGGTATTGCTGCAGGATTGCAAAACACCGGTTAAGTGAGTCAGTGAAAGAAAACAAAACTTCGAAT CTCTCTTTTTTATCTACCCTTTTTAATAATCTCTTTTTTTCTAGAATCCAAAATAATTACGGTTGGATTA CAGTTTACTTTATGTATCCACCGTTGAAATCTTAATCTTCCATTGTATCAAACGTCACTGACTCTGTTTC TGGAAGTGTAAACAAGAACAGAGACAGTGAATCTTAATGTTATCTTCTTTGTCTT >gi|3450313|gb|AI100352.1|AI100352 34727 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115A20XP 3', mRNA sequence GCCCGGTTTCCNAAATCATGGACATCGTCCGGTTCNNGGTTTCCCCGTNTTCCCANCGTCCGCTGAGCTC CACGTCCGTTTGGCNCCCTCCGATGGGTTGCGTGTTATGGTCCTTGGCCCACTTTCCGATCACGNACCGN ATCACCCCGNCTAGGAGTTNCGGAGCTGCCGTATCTTAACAGAGCAGCCCTGGGATGNCCANGGATATTC TGGGTGGGNCCTTCATTGGAGCTGCGATAGCTGCATTTTATCACCATTTGTCCTAAGGGCTTCAGGTTCC AGTCACTTGGATCCTTCAGAAGTGCAGCCAACGTTTGAGTTTTTGCCACACAAAAAAAAACCTATCATAA TAACAACAATTACAAAATGGTTGTGTTATTATGTATGTACAAAAATTGGCAACTTTGCTTGTAAAACTAT GCACTATATTTCTTCTTGTTTTTCTGTTTTCATTGTGGTGTAATACTTTGATATGTGCCAATGCCAATGT TTGTGTACTCGGGAAAACAATTAATGAAAACCAAATTGTTTTGTCCTTCTCCTCCCTCTTTTTATTTTAT ACAGATGATATTACCAGCTAAAAGCATATCTACATAGACTAC >gi|3450312|gb|AI100351.1|AI100351 34726 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115A12XP 3', mRNA sequence CAGTTTGGGGGGNCCAGTCNTGGAGTGATCTGACCTTGGGANGACTGNNCCTCGACCCTGCTGGACTGAG TTCCATTGTCNGCCAGGGACTTTCCATGAGNGTCGCCGTTCTGTTGCTGTCCTANCTGGTTTGGAACTGG NTGGGCTAANGCCGCGTTCGNCATCCCCTGTTAGGTTGACTGGTTGTAAATCCCCCACACTCNGGACTGC AGGGATGTGACNCCTATCAGGTTGATTGAGAAGAGAATCCAGATTTGATGAGAGAGAGAGGCAAGCCCGA AAGAGAAGAAGCTTTCAAGAGTGCACGCCATCAAAACGACTTCGGGTAGGCAGCAATGAGAGCCCTTCAT CTCTTCTGAAGAAACGAAAGCAGCTGTCATGGATGATTATGGAAAGCGTAGGAAATAAGAAGGCTTGTGT TGAATCCATCACTAAGTAATCAGAAAGATTTATGATCACTTCTAGGTTTGATTCCGAATCGGAGAATTAG TTAGAAAAAGCTCCTTAGAGAGAAGGATCTAATATTTTGTACCCGCAAGCATCACTGCATTGTCTCCGAC TTCTCTTATTTCTTCAACGTGTATTTTACTCTATTTTGTTTGTAGAAATATTCACCAC >gi|3450311|gb|AI100350.1|AI100350 34725 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114L2XP 3', mRNA sequence CAAAAAAGANGATATCCTCAAATTCTNTCTCCTNTTGGTNCTCTTCCTTCATAAACTTCAAGAGGCTATG AATCAGGTGGATGAAGAATCCGAAGCCCTGCAAGAAAAGTTCCTAGAGAAGGAGATTGATACAGCAGCAT TTGTGCAGAAATACAAGAAGCTTCGTACTACCTATCATCGACGAGCATTGATCCATCTTGCCNCTAAAAC GTCAAACATTTGANATTAAAAAGCTTTACACATTGAATTCGAGACTTTGGTTGTGTATTATGACTCTTAC CCATTGTTGTAAAANAAATGCTTTGCTGTTT >gi|3450310|gb|AI100349.1|AI100349 34724 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114L1XP 3', mRNA sequence TTTGCCCCACCTCCTTAGNTAGCCAATTNGGCCTCCNGAATCAGGANTAATAGTGCCAGGCCTTGGTTAA GGAAGCCNATAGCTGNTNACNGTCAGGCAGCTGCTGCATTGAAAGCCCATTGGCTGGGAATCATGTCTNC CCAACAACAGAAAGATGTTCCTTGTCCAAAGGGACTTCTATGACGAGAAAGACCTCAAGGATGATAAGAA AGCAAAAGAGTCAACTGAAACAGACGCCGAAAACGGAACTGATGCTGAAGAAGATGAGGACGCGGTGTCG GAAGATGGAGTGGAAAGTGACTCTGACGCAGATGAGGACGCAGTGTCAGAAAATGATGAAGAAGACGAGT CAGATTCTGCTGAGTAATTTGGTTACACATGCAAAATTTTGTTTTTTGTTACTTGTAAACTTTTTTTTGT CTTAATTAACTCAAAAGTGAGACTCTTATC >gi|3450309|gb|AI100348.1|AI100348 34723 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114K7XP 3', mRNA sequence CCCTTCCCGAACATGGGNTTCCTTNGGTTGGATTCGNNTTAGGGCCCGGATTTTTTTNCCTNGNGCACGG AACCANTCCCGGATACTACGATGGNCGGTACTGGNCCATTTTGGAANGTTCCATTGTTCGGATGCACNGA NTCCGCTCAANTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGTACCCGGGCGCCTTCATTAGGATCATC GGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAG CTTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCTCATTTCATTTCCTATTGTCTGTGTTCTT TTTCTCTTTATGAGACAATTTCTATCGGATTGTCAAATGTCTGATTTATGAATATGTAATTTATATATCC GTGCGTCTTGATTT >gi|3450308|gb|AI100347.1|AI100347 34722 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114K3XP 3', mRNA sequence TTTTGTGAACCCATTCCGGNTAAACCCTNNTAGNTGAGGGAGCTTTTAACCTCNNCAAGGATCNANTGAG CTATCAGCNCANTTGATTTACGTNTNCGCCACTCCACAGAAGCTAGAAGCTTTACTCTTATCCTGTCACA CCACAGGATTGTTCCCAACTTCTTCAATAGTGAAAACCAAAAAGGTTTGATCAATCTAAAAAAATCATCT TAAAAGAGCTTTTGCCCCCCATCATTGGTTTAGGTATAGAATATCCGCAGTTATGTTCCTGGCCCAGCCG GATTTTGTACTGTGTCTGTCTGTATTTGATGATATATATCTGCAGTTGAACATTTTCAGAGAAACC >gi|3450307|gb|AI100346.1|AI100346 34721 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114J24XP 3', mRNA sequence AGGGGTCCCCAGTNTCTTTGAAAGGGAACTTCCAGCTGANGTTATGAGTNCAANGCTTTGATCAGCATCC CCNTCAAGAATCGATGCGCGCGTCAGGAGACCGNGGACTTAAGAAGAAGAACGCCAGTGGACAAGCTAGT TAANCCACCGCAACATCTCTCCAGGTGTCTCTTCTTCTTCTTCTTCTTCTTTGCCTCTTAGCTGTAATCT TCTTAATAGTATGAGCTATGGATGTAGCTTCTTCAGACGGATCAGAAACCTTATGAATCTCTGTTGTAAA ATTAGGATAAAACGGAACGGAGCCAACCAACTAGGTCTTTTTATTTTATCCTTTTTTACTTTGGATGTTT CTGCATCTTTTGGGAACATTTTCAGGCTGATCCATTGTCGTATATTATCATCTATCTATCTAGTCTTTTC AGAC >gi|3450306|gb|AI100345.1|AI100345 34720 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114J22XP 3', mRNA sequence CCTTCGATGTNAGAAAGCCTNTGAAGCTGCTCAAGTTTCCTGTAAACAGTGTCCTGACCTTTTTAAGACT CCAAGAAGGNTGATGGTGGAGATGATAGGCCCCAGCNGCAGCAATTCCATCNTCAGGGAAATGAAAAACA AGATTAGATGCGAACAGTAGATCAGGTACTGATCTCGACGTGGTGATAGGCGAAGCAAGAAAGGATACAA ACTAAGGATATCAAAGTAAAATATACTATAGCCATGCTGGTGGAATAGGAAAACAAAGTTCTTGAAGCTT AACAGAACTAAGAAATCTCTCTGAGTTTTGAGTAATCTCCTGCATTTTCCGGTTTTTGCATTGTAATGTG TAACAGTGTATTTTACAATTATACGTTTAAATGAATTTGGGAATCACAAGTAGG >gi|3450305|gb|AI100344.1|AI100344 34719 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114J21XP 3', mRNA sequence CATTGCANTCTCAGCTATTGGTCCCATCCAGNTTTGCCCAGCCTNCAACAAATTCCAGACGCAGAACCCT ACTGGACCCGGTACTAAGGCTCTGAAATAAAGGTCACTGAATCGCAAGGTTCGCCCCACGGGGAGATTCC GTAGGCGGAGAGAGCAGAACGAGGTGATGATGGATTCATTATTTTTGAGTTTTTCTTACTGTATCTTCAT AATTTACCATCATCGCTGGTAAAATAAGTGTACCATTTACTCTTTGTCCTCTACTGGAAAAATGCTAGAG ATCCTCTGTGTGTGTTTTTTTTGTTCTCTTCATAATTTTCCCATACACATACTAATAAGTTCTTTGATGT TTGGTTGAAAACTTGAATTGGATACATTTC >gi|3450304|gb|AI100343.1|AI100343 34718 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114J1XP 3', mRNA sequence TTCCCACCCAGTTCCAAGTGGGAANNAGAGATTGAGCATGCAACGAGTTTGTGAAGAAGAAGTTTGAGGA GTTATATTACCAGAACNACGGCGCCGGATAGAGTGGACAGGGTATTCAAAATCTACAGGACGACGGCTTT GGACCAGAAGCTTGTAAAGAAAACGTTCAAGCTCGTAGATGAGACACTAAGAAGGAGAAATTTACTGGAG GCTGGCCTTTTATGACCTTATTATTACATATCTCTAGTAAATTACCTCTCCTTATTATTATAAGAAAAAC TCGAAAACTGAATGACCGTGTAATTTATCTTTCGGGACAAAAGACTTAGCGATTCAAAATCTAATGTGTC TCGATGGCTACGACTAGTTTCTATTTTATCATTGTTTTTGTTAAC >gi|3450303|gb|AI100342.1|AI100342 34717 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114J17XP 3', mRNA sequence CCAGTNCAGCTTTTACTNCAACCGCATTNACGACTGCTANTACTTCTGTTGNAGCCTGCAGAGCTTAACA AGCAGATTCCTGCTGGTATCAAAACTCCTGTTAACAACTATGCCAGAGCTGAAGGACAGAACNCCGGCAA CTTCCTCACTGACCGTCCTTCGACCAAAGTTCACGCAGCTCCGGGAGGAGGATCATCCTTGGATTATCTC TTCACTGGTGGCAAGTAAAATAATTGCAAAGACCTTTATCTATCCATTGTCTTTGCTGCGTTATCTCACT ATGAAACTGTTTGATGTGAGCCTTTAAATGATAAGAAGTCGGTTTCTTGTCTCAACTCTTATCTGTAATA TTTTGCTGAAAAAATGTTTGAATC >gi|3450302|gb|AI100341.1|AI100341 34716 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114J15XP 3', mRNA sequence TGCAGTACCGGTCCGGATTCCCCGGNTCGACCCCNCGCGTCCNGAGGNTAATTCCGAGGCATCTTCTTCT CGCGATAAGGAACGATGAAGAATTGGGGANACTTCTGAGTGGTGTCACAATCGCTCACGGTGGTGTTTTG CCTAACATCAACTCTGTTCTATTGCCTAAGAAGTCTGCCACTAAACCAGCTGAAGAAAAGGCTACCAAAT CACCAGTCAAGTCTCCAAAGAAAGCTTAATCTGCTAGAGTTTTCGTTGCTAGTTTGTGTTTGAGCTCTGG TGAATGTAGAAATTTGAAGCTTTTGGATCTTAGTTTCTATGTATTTGGTGATTTAGAATGTTGTTCAAAA TCCTTTTCCTAATC >gi|3450301|gb|AI100340.1|AI100340 34715 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114I5XP 3', mRNA sequence AGTCTTGTGGGAGATCTTAACCGGCGNGGNACCCATATGNTTAATATGCACCNCCGGTGCTTATNATGTA GTGGGATANGTTGAACAACACACTGAGGCCGNCCATACCGAGCTACTNTGACTCGGACTGGCGAATATTA ATGGAGGAGTGTTGGGCGCCTAACCCAACAGCAAGGCCATCCTTCACGGAGATAGCTGGTCGGTTACGTG TTATGTCAACTGCAGCTACTTCGAACCAATCCAAACCACCAGCTCACAAGGCTTCAAAGTGAAACAGATT CGATATTTTATAGGTTTCTCTTTACTCTTTCCAAGTGTTTTGGGGTCAGGAGGGAGATATTTGTTGACCC TTTTNTCCTTTCCCCCTTTTTTTNCCAAAACAAAAC >gi|3450300|gb|AI100339.1|AI100339 34714 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114I3XP 3', mRNA sequence AATTTTGTCCCCTAAAGTAAACTTTGCCGNGNAACCAGTCNCTCTGCAAAGCTTAAACCGTCAGGTGTTN CCGTATTCCCACTTCTTACCNCGTGCTGATGGCCAAGTCGAATCCTCTCATGCTCTCTTGCCAAGTTCCC AGAAACTGAGAGAGGCGATAGAGAGACNCAATGTAGGAAGTATCAGTAACATCTCTTCTTCAGCTTCTGA GAAAGTTGAAGATTCAAGTGAATAATCAATGCCTGGTTCAGATTGATCNCAGATTATTTTGTTAAATCGC TTCCCTGTATATATGTTGACTGCATTTTCCATGTGGTGCATCATAATTTTTGTACATAAATAAATGAGTC TGACTTCGAGTT >gi|3450299|gb|AI100338.1|AI100338 34713 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114I2XP 3', mRNA sequence CAGAACTTTGTGGNCCAGTTGAGAGGTTACCANGCCCCATGAAGTTCCCTTTGCACAAGACCGAAGCAAG CTCTTGCGCTCTTCAAGGCTTTTATATCTGGAACTCCATTGTCCACACATGAGAACAGCATCAGCCGCGA CATGTCTGAACTCGTTAGTGACTCATAATGAGTTCTGATTTGATGTAATGTGTGATTTGGATTCTCAATC AAAAACTTTCCACATAGGCCGTTGAAATAAGAAGAGGGAAAGAGAATAAATCAGTGTTTTAAGTGATACG TTCAATGCTTCTTCTTCTTCTGGTTGTTTGTTTGTTTGGATAAACATTTGCTGCTTGGAATCTAATAAAA GAAGTTTCTACC >gi|3450298|gb|AI100337.1|AI100337 34712 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114I14XP 3', mRNA sequence TGGACGGTTACTGGACNATGTGGAAGCTTCTCATTGTTCGGAGCACCGACTCCGCTAAGTGTTGAAGGAA GTTGAAGAATGCAAGAAGGAGTACCCGGGCNCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAG TCCAATGCATCAGTNTCATTGCCTACAAGCCCCNAAGCTTCACCGAAGCTTAATTTCTTTTCTAAAACAT TCTTATGAATTATCTCTGCTCATTTCATTTCCTATTGTCTGTGTTCTTTNTCTCTTTATGAGACAATTTC TATCGGATTGTCNAATGTNTGATTTATGAATATGTAATTTATAT >gi|3450297|gb|AI100336.1|AI100336 34711 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114I13XP 3', mRNA sequence TTTTTCGATGCACCGANTCCGCTNAAGTNNTGANGGAAGTTGACGNATGCAAGAAGGNGTACCCGGGCGC CTTCATTAGGATCATCGGATTCGACNACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCC CCAAGCTTCACCGAAGCTTAANTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCTCATTTCATTTCC TATTGTCTGTGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGNTT >gi|3450296|gb|AI100335.1|AI100335 34710 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114H5XP 3', mRNA sequence TTGCCNGGNGGNTNTNCATNCCTTTCTTCCAGNGGCGCANGGCTCACCGAAGAAGTTGTGNCNGTTCAAC AATGCTACCATGGANCTTGTCCCANGTTGGTGAAGGAGAAGCTAAGCCCCCATTGATCCTTACTTTGACA AGCTTGCAGATGCTATGGTCACTTGGATTGAAGCTTGGGATGAGCTTAACCCACCCACTAAAGCTTGAGC AGCAAAAAAACCACCACCGCAGTTTTGGTTATTAGCTCAACATATCATCTATCTTCTCCGTTTTGTTTTT GTTTTGTCTTTTCTCAAATTTTCCGGCGATTCTTCAGTTCGTTTTTAAGTTGCCGGAGTTTATTTAAATA GTGAATGGTGTAGTTCTATTT >gi|3450295|gb|AI100334.1|AI100334 34709 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114G21XP 3', mRNA sequence CACCCANCAGCTTCAGGNTTTTGNACAACCCTTCCAGCGTATGGGTATGGTCAAGCCGCCCACAGGGATA TGGGTCTTATGGAGGATACACACAACCTGCTGCTGGTGGAGGTTACTCTTCAGACGGGTCTGCTGGAGCC ACTGCTGGTGGTGGTGGTGGTACACCAGCTTCACAGAGTGCTGCTCCACCTGCTGGACCGCCCAAAGCAT CCCCGAAAAGTTGATATGTGTATGGATAAATTTCTACTGTTATACAAAACATGCTTCCATGCTCTTATCT TTTTCTTGAGGATTTATCAATGTTTGTGTTTCACATTT >gi|3450294|gb|AI100333.1|AI100333 34708 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114F8XP 3', mRNA sequence TTAGGGACCAGGCCAAAANTTGAGAGTTGTTCCCTTTGNTATTTTGGGNACCTTTTCGACGGGCAATCCA GNTTGCATCCAGGAAAGTTGTTTTNCCCATCTGATGTATCAGGCTAGAGTTAGTACGAAGCTGGATCGAC TTTTTGGTTGGGGAAAGATCGTCGGAGGAAAAGGNAAATCGATTGGAATTGATACGTTTGGAGCAAGTGC ACCAGCAGGAAAGCTTTATAAAGAGTTTGGTATCACCATTGAAGCTATGGTTGAAGCAGCCAAGTCACTT ATTTAAAAAAGTATCTTACAGGTACTACCGAGGTTTGCATTTGAAGTAAGAGACATTCCATAAGCATTAT CTTCTTTGTCCAAATAAAAATATACTCCTTCCAATCTTTTTATAAATGATGTTTTAAGCTTTCATTTTGG TTTTTAAATAAATGATGTTTTAAATTTTC >gi|3450293|gb|AI100332.1|AI100332 34707 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114E7XP 3', mRNA sequence CTGGTTTTCTATGNAGGTNANCCCGNAGGATNGAACCCGATCNATTTCNTGGAAATCCTGAAACGGGAAC TGGATGCANTGGAGAAGGAGAAGGCAGAATTCCATCAGTGACTTCTCGAAAGAGGATTACGAGGATATTA TAGGCGGGTGGAAGTCAAAGCTACTTAGGAGCTCAAGTGGTGAGCAGAAGTGGGGTTTGTTCATCGCCAA GAGAAACTGATTATGGCATTTACTATAAGTTGGAAATAAATTTGGGTATGTATGTAGATCATCAAAACCC AGTACCCTGCTATTATCTCTACAAGCTATATATATGTGGCTGTGAGGTTCCTTTAATGTCTCCATTTTAC AGCATATCCAGTTTGGTATTTAATATATGTGATATTTTG >gi|3450292|gb|AI100331.1|AI100331 34706 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114D24XP 3', mRNA sequence AAACCNTCTCNACTTNTACGGGCATGAACCTTTGGCATATTTCNCCGATATCTCTNGGTGCACGACGNTT AGCCTTGACCAGCGATGANGGCTCTCCTAGTTTNAGTTCCAGAAGGCAGCAACTCCAAAAGCTGATTTGA AGACTAAGCTGAGGATGTTCCCTTTCTACTGATTCACAACTCTTGTACCAAGAAAAAGTGTCAAAAATAT GGCCTCTTGAATAATGGTTGAGACAATACCAACCACTTGTGATTAGTTTGTGTGTTTTTTCTGGTATGAT CAGT >gi|3450291|gb|AI100330.1|AI100330 34705 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114C6XP 3', mRNA sequence AAGTGGTTGCCTATAAAGGCCAACNTGNGGCCAAAAAGNGTTTAAGCCAAAGGGCAGNAGANAGGNTTCA TTTCCCCACAGACATNTTGCCCAAATGTGNCCACTTCTTTTACCCTGCACCACCGATNCCAGGAATGGGA GGTGGTGGTGGGTATGGTCNTCCACCACAAATGGGCCGGTATGCCAGGAATGCCTCCCATGCCACCATAT GGAATGCCACCGATGGGCGGCTACTAAAGCAGACCAGCTTATGCTTTAATATCCGCATTTGGAAAAGTAT CAGTAGCGCATAGAGTCGGCCCAATTTGCTAGGGCGGTGTTCATCTGCTAGCTAGCTTATATGTCTGACC AGAATTTGTCTGGGAATAATGTGGATAATAACCTCCTTTCGTTGTAATATTCTGTTGGGTTTAGGTGAGT AATTTTTTTTTAACTTTTTGTCAAAAGCCATTTTTGAGTATAT >gi|3450290|gb|AI100329.1|AI100329 34704 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114C19XP 3', mRNA sequence CATGCNGTATGTGCTGATTNTCCCCGAGTNCCGTCAACTACAGGGGACATCAAANAGCTTCCCCCCNTCA CCGTCTAGCTGAAATCCGTCGCTTCTTTGGGGGACTNCAAGAAGAACGAGAACAAGAAAGTCGACGTTGA AGCTTTCCTTCCCGCTCAAGCTGCCATAGACGCTATCAAGGACTCCATGGATCTTTACGCAGCTTACATC AAAGCTGGCCTGCAACGCTAATGAAGAAACCAGTCCTTTTCCGTTCCTCCCGGTTTGCTTAGACATCACT GAAGCCGCCTTCTATACTACATGCATGTTAGATAAAATTTCAATTGGTGCATTTAATTTCGTAATGCTCA TCAGAAAACATTGTTGAACTTAAAGCTTTCTGATGATGATGAAAAATTTCCAGTACAATCAT >gi|3450289|gb|AI100328.1|AI100328 34703 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114C16XP 3', mRNA sequence TCCCCCCTCAGGNCCCGTCCGGATCCCCGGTCGGCCCACGCGTCCGNGAAGGCCATGTTGAACGAAATGG TGTCGAANTGACAAGTGTGTGCTGGGACAAATGCATCACAAGCGCACCGGGAAGTAAGTTCAGCTCAAGC GAGAGTTCTTGCCTCACTCATTGCGCTCAACGCTACATGGATATGAGTATGATCATCATGAAACGCTTTA ATTCGCAGTAAGATTGATTGGAGATATCATACTTGTTGGGATTTTAATTTATCCTTTTTTTGTTTCTCTT GGCAAGTGTTGAAATCCCTTTTATTACTCTAGTGATCTTGCAAGAGTATTCTCGGATAAGTGTTTTAGGT GTTTCTTTATGGTTATGTGATTGAGATTGTTATTGATGGCTAGTAATATATTAAGAGACAAGTGTTGAAT AATGTGGTTTTAAT >gi|3450288|gb|AI100327.1|AI100327 34702 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114B3XP 3', mRNA sequence GGGAAAGGCCTGGNGAAGAAGAGGNACCTCGAGCCAGNTAAGCTAGGNTGGTGAGNAANGNANGTGCCCA ACCAAGAACCTGNGACCAAGCAAGCCATGAGTTTATCACTCACNGTATACAGAATCCGGTCATAAGGCAA GCAGTAGTGAAAAACAATAATGCCTTTGACCTATGTTCTCTCTTGGTATGAGAGATCTTGTACTTGTACA GAGATCTTTAACCTTCTGATGTGTGTGTTTGTATGTTCTAAGAAATCAAGTTTAAAATAATCGAAAAAAA CAACCATATGCGTTGATTCAAAATACCAAAATGGTTACCAAACATATTTGTGTTTACAAAAAGCTTCCCT ATACATT >gi|3450287|gb|AI100326.1|AI100326 34701 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114B11XP 3', mRNA sequence AATTTGGTANCCCTGGTGGAAACNTNAACCCGNTAACTTGCCCCNACCCCAGAGGCCNAAGGNGAAAGNN CCTAGCAAACGGGGAGGTTGNCGATGTTAGGCATTCTTAGGGGTTTGTGGTTNAACACAATGTGNCTGGA AAAGGACCATTTGAGAATCTGTTGCAGCACTTNTCTGACCCATGGCACAACACTATTGTCCAAACCTTCA ACTAAAGAGTGAAGACAGACTTATGATCTCATACCTATCTATCTTCCATCACTTTCATGTCTGTCTGTGA GTGTGTTTCATCTTAGAGTTCTTGGTTTTTGAGCTTGAATTATTGTTGAACCGTTGTAGCTCCATGAACA AATTTGGAATCTTCAATGTACAGAGGAACTAAGTTAATCAACATTGTTGTACTCTTTAAT >gi|3450286|gb|AI100325.1|AI100325 34700 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114A9XP 3', mRNA sequence TTACGGGCGATTTTCGGCCGCAATTCCGGTAACGTNGNGNCAATNCTCAGGNGGTTACTTCCTCCATCCC AGTCTTCAATCACNTCTCTTCNTCGCCACTGCGGCCGATTCCTATTTTCCGNCGGGTTGTACCGGGAAGC TGANGTACATAAGCAGAGTTGATTATCTGTGGGAACATGTGAGGAGGAATGAGATAGAGATGCCGGAGTT TGTATACGATCACGATGATGATCTGGAGTATCGTCCGATGATGGATTACGGTCAAGAAAGCGATCACGCG AGGGTTTTCGCCGGAGCCGCCGTGGATTCATCAGTCTCAAGTTTCTCCATGAGGTGTATCTCATAGCGTA AAAGGCTAAAACTCCACCCACTAGATATCGGATCGTATCTTATAAACCATATAATATACGAATACGATTA ATAATATATC >gi|3450285|gb|AI100324.1|AI100324 34699 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114A17XP 3', mRNA sequence CCCAATGGCCCAANCCCCTTCGTTNATCTNACAAAGGNTCCCCCCNAGGTNGTGCCCAAGCTCCTTGGAA GCCCAAGTCCTTNCCCCCACAAGGCCGCATTTGTGGGANCCAGAAAGAGTTCCGTGACCCTTGACGCTGA CCAATGGCGTCGTCTCNAATGGGTTCGTATGAAGTGGACCCTCCTACAACTACTGTACCGACCGGACTAG GTTCCCGGTTATGCCCAGCTGAATGTAAAAGGGACAGAGACGCATAAGTTACTACTCTTGAGGGTTTTAA TGAATTTATGCTATCATTATTATTTGAATTATGCTTGTTCAAGAGATTGATATATGTATTGTTTGTTGGC CCATGATGTTTATGCTATATTTGGGCCTAAAATTACATGTTATAATTCATATATGTATTGATTAGCTATG TATTTTCATATGTTATGATCTACTTACAAGTTTTATTCTTTAACGTGGT >gi|3450284|gb|AI100323.1|AI100323 34698 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114A13XP 3', mRNA sequence CAAGATGNTTTCGAGCTTAGTTATNTGAATCTGTTCTCGTCTGGTTTATGATCTAANTGGAATCTTTTGT GACTGTGTTACTTGCATTTANTTTTATGTCGTCTTTGNTTGGTCCACTGTATNGCTTGGGACTGAATTCT TTTGGGATTTATTATCTTTCGNGAGAGGATNCTATTGAGAGCTTGAGATGGAGATNGCAGGATATTTTGA TTGCAGATACTTTTGTGGNTTCATTTCTCATTCCATTTGAT >gi|3450283|gb|AI100322.1|AI100322 34697 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113P20XP 3', mRNA sequence ACCCGNGCCCTCTCTCCTCAANTGCTTCGAGTTCCTTNTTGTCGAAATCCCGGNGCCCATGGCTTCTCAT NTGGCCCCATCATGAGTGCCNTGGNCACTGCTGATGTGCTGAGTCTCNCCAAGTGAGTGGAGGNCCGCTT CGAGNTCCACGATCGACGTGGCCCAAGAGTTTTATGGAGAAGNTTTGATGACGCGACAGAGATCCCGACT GACCTCTCACCCGTCAACTGGATGGACCCGAAGACGTCGCTTGGGACTTGCTTGAATCTACCTTAACATA CCAGCACACGACTTATGCGGAGCCATTAAGAAGGCCACTTCAAAACCANTCGCATCTTAGAGGTCGTCTC TCTTTACAAACACCTCAAATCATGTGGTGGCTACGATTCCATTCTTTCTTTTTAAAAAAAAAATTCTCCC AACAGAAACCTTCTCTTCCCTTATTTTAGGCCATTCTAAACAAATATATCATGGTGGTTGATTCTAGTTT ACGTTTTCCTTGTTATATAGTATTACTATTAATGTTTTTGAAATTCCTTTGTTTTGAAGCTTTATATCTT GTATTTGTCCGAAACTAAAAAGGGAATGGTTTGTGCAAACT >gi|3450282|gb|AI100321.1|AI100321 34696 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113P12XP 3', mRNA sequence CGCCCCCGTGCTCGTAAGTGCNCTCCNACTTCTCTCCCTCNNCCCTCACTTGCGTTCTCCTCTCCTCCTC ACGCCACCACATCGCNCCGCCGTCTCAGCTGTNCACCGCTCTATGGTAAGACCCGTGGTACCNGCTCACT GATCGCAACGTCCTACCGCCTTTTCCAGGCTCGTCTCTGTTCTCATCTTTCCCANCACTCGAATTTCCTC GAGAGCCCTAACTCTACGTCCGTGAGAAAGAAGCGTCTATGATCTTGAAACTAGCTGGTGGGCTCTGTGT TGTAATCTTTTGCCCTGAGTGGATCGTTCTTGTTCTCGCCTTTTTCTTGAAGTACTACGCTTATGTCGAT GGTGATAACAATGGAGTTGCTATGAAAAGGACTGGTAAGGTTCAGAGTGAAGAGACTCTCAAAAATTCCC CATGGGCGTTCCAAGTTTGAAGAAAAATTCACTTCTTGTAATGATTTTGTTTAAGAGAAGAGAGGTTGTA TCAAATGTTAGTTTGATCTGTGTTTNCAGGGTTTGGTTTATATGTATTGAAGAATTGAATTGGTTGATTA CTTTGTTGATG >gi|3450281|gb|AI100320.1|AI100320 34695 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113P10XP 3', mRNA sequence CCTTCGTCATCCCCGCTAANCTCCNTTTTCCCGTNCCCCAGCCACACGNATTCTCCATCACAGCACGAGG AGGTNGCTGCTGAGGTTGCCCCATCGGAAGAGAANTTGAACTCTTCTTCCTCCTNNCTTAGTGACGTGAT TGGCTAAGGAAGTGACTCCTTCTCCGCACAGTGGATTCCTGTGTTGATTCGAGTTGGAGCACGGATTTGT GTACCGTGAGCACGGAACACTCCCGGATACTATGATGGACGGTACTGGACAATGTGGAGCTTCCATTGTT CGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGTACCTGGCGCCTTCA TTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAG CTTCACCGAAGCTTAATCCCCTTTCTGGAATATTCAGCGTTGATTATTCTGGAACCCATTTCTATGTGGT CAATGCAAATTTAAGAAATTATTTGCCGACTTAAAAGTTGAGGAACTATTGTTTGAAAGTGAAAATGTTA TTCCTATCAGTTTCTCTATAATTATAGTTATCATTTCATTTC >gi|3450280|gb|AI100319.1|AI100319 34694 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113O13XP 3', mRNA sequence TTCTGTGGGGAGCAAGTGCAAGGGANNNTGAGCGTGATCCNAGAAANCTNATCCGTTCAGGNTTTAGAGG TGATCTGATGAAGAGTACAGAGCTTCGTATCNCATCCANTGACTCCTAAGCATGGAGGTTCAGGGAGTNT GGTGCATGGCACTCGAGTATGAGAAAATAACGAGGAGGTGGCTCATCCTGAGACTCTCCTCCAGTTTNCC GTCGAAGTCTCCAAAGAAATCGACGAACATCTCTTGGCCGAGGAATAGAGGAGAATATTCCTCGTGTGAC TATCTATTATCCTGTCCGTACATGTATGTGTGATTGAAGCATGCCGATTTTTATCACTCTTTGAATGTGG AAAAATAAAGAGTTGTGTTGGATATATGAGAGTCATGTTGTATGTTTTTAAAGTGCTATACTCTAAATCT GTATACGTATAATGTGTTTTGTTTGTTTAATAAAGTGTAAAATGTTTTTTTAATAAAATCTTAAGCCTCG TCTTTTCTTT >gi|3450279|gb|AI100318.1|AI100318 34693 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113N4XP 3', mRNA sequence TTCCTTGGAATTTTCCCACAGATTGGAAGTGGTACCNTAGGATCCAACTNTGTACTGGNCCATNTTCCCC TCCCGTGGAGTTNTNTGCNCTTTNTGCCCGATTGAGATCTGNGAAGAAAGGTCACTCTACTCAGAATCTC AACGNGGGTGATGAATCCTGACTCTCTAACCCATTATGCACGCCAGGGAGTGTCCTTCATGTTGACAACT GCTCAACCACAGCAAGATTGGGTTCGAGGAATGGGCGCCCGGTTTGACTACATCCTGACCCAACAAGCTC TTGTGGCTGTGGACAGTGGTGCAGCAATCAACAGAGACCTAATCAGTAACTTCTTCTCTGATCCAGTCCA TGGTGCCATTGAGGTCTGCGCACAGCTCAGGCCTACCGTTGATATCTCTGTGCCTGCTGATGCAGACTTT GTTCGACCTGAGTTGCGTCAATCTAGCAACTGAGTGAAGGGTTGAAAGTTTGTCAGTCTCTTATTTGTAA TCGGAGTATTAAGTCGAGAGTTTGTGATGTTTTCTTAGGCGTGACTGTTTGTTTTGTTTGAAGGATTATG TCTCTTTGCTTTGGTCTTAAAATCTACTTAAATCAATAAAATAGTTTAACG >gi|3450278|gb|AI100317.1|AI100317 34692 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113N15XP 3', mRNA sequence CGTTGGCTCGCGATCCGNTTTTCGTCACCTCCTCCTTGATGACAGGTATCGACTGCAACGTGCTAAGTCC ACGTAGTACNTCGCTAAACCAGTGAACGANCGGATGGTCCNATAAGTCTAACGAACTCCTATACTGGAAC GCTCATACATTTGCGCTCACGGATCGGGGAAGCTATTCGCGTTTGGTGCAGGCGATCAGGGTCAGCTTGG AACAGAGCTTGGTAAGAACCAAAAAGAAAGGTGTGTACCGGAAAAAGTGGATATCGATCTCAGCTAGCTA GCTGACTTATGTGGTTTGGTTGGTAAGAAACTACGTTTGACATCAAGGAAACAAAAACGCAAGAAAATTT GCGTTTGCTTTTTATGTTCATAAGACTTGGAAGCTTGTACAAAAAGGGGAATAACATAAACTTGTCTTTA ACATTTCATTGTATAGGGTTTTTAGATTATTCTAATTGTTCATTGGTTAAGTTTTAGGTTATGTTGTTAA TAATTATCAAATAATTTCATTAAATCAAATTATTGTCAG >gi|3450277|gb|AI100316.1|AI100316 34691 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113M8XP 3', mRNA sequence GGGCTAAGTGTCACCGGTTNCATGGCCCAGTGGTCGTTGTCCGGTTNGCAGTCCCCAAAGTACCTCCAGN GNTNTTGGATCANGGGCCCCAAGCTGGTTCTTCTGGAGNCTTCCCCAACTCAGTCTCAACCCCTGACAAT ATCCAAAGGATTGGCTCTACTGGAAACTTTGGGGTCGCTTCAGTGGTGAACAAGTTCATCGTACNTACGA ACCCATCAGCAGTCAAAGTTAACTCTAATGGTGAAGTTCTTCAAACCATTCCTCTCAAAGATAAATTTGG AGACACTTTGCTCAGCGAAGTCAACGAATTCGAGGGCAATTTATATATAGGAACTCTCACCGGACCATTT GCTGGAATTCTTAAGCTCGAAAAGGGTTCTTGTCCTNCCACTTAGATCTCTTATTTGAATGCAGCCGATG TGTTACAATCATATATATATATTTGAGCTTTTTATT >gi|3450276|gb|AI100315.1|AI100315 34690 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113M5XP 3', mRNA sequence ATTCATCTTGNACTGGCCATCAANCCTTTCACCCTGAGAGCNCGTTGCATTTCCTTGAAGCTGTTGATNN CCGNGACACTTACAAGTTCTCTACATTCACCCGCCCATTACATTGTNTCGCAGAACGATATGGTTGGTTT GTGGGAGGAAAAGATCGGTNAGACTCTCGAAAAGACTTATGTTTCAGAGGAAGAACTCCTCAAAACCATC CAAGAGAGTAAGCCTCCAATGGATTTTTTGGTGGGTCTGATCCATACAANCCTTTGTGAAGAGTGACTTT ACCTCCTTCACTATAGATCCTTCTTTTGGAGTTGAGGCTTCCGAGCTTTACCCTGAAGTCAAGTACACTA GTGTTGATGAGTTTCTTAACCGGTTTATCTGAAAAAAATTCGTCCATTATTTTGTGTGTGTAGCTACTGT TAATTCGAGTTTCGATATGGACGCAAATCTTATTTC >gi|3450275|gb|AI100314.1|AI100314 34689 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113L3XP 3', mRNA sequence AAGGGAACGTNTCAACGGAAAGGNNACTTTGTTTGGCCCCTGGGGNTAATTACGAATTCTGCAACGGTNC ACCGTCAGATTCGGACTTAGTTACGTTGATTTCAATAATGTCACTGCTGATAGAGACCTCAAAGCTTCTG GCTTATGGTACCAGTCGTTCTTGAGAGATCCACCAAGAACCAAGATATCCTCCGCTCAAGTCTGCCCTTT AAGAACGGGGATAGGAAGAGCCTCACATGAAAGACCAAAACCACTTTATGCCCATCGAGATCATCT >gi|3450274|gb|AI100313.1|AI100313 34688 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113K15XP 3', mRNA sequence AACTTTNGGCCCNCGAATTTCCCAGAAATTGGCCTCGATATTGGGGAAGTTTGGNNCACTCANATCTCCT GAACCAGTTGCGATCNCCGTCGTCCGATCGGTGAACCCATGTAACTGTTACGATCGAAATNCTGAGATTG AAAATGGTCAGGGAGTTAGAAACAGTGCTGCAGCTACTTGAGTTTGCCCAAGAAACCCTAATAAGAAACC TATTTGTTGACTATTTTGACTTTGTACCCTTCTTGATATACCTATCAATCACCATTGTCCACGTGTACTA GTTTCGTTGTAGTGATTTTCAAAGTTTATCGAAGTATGCATATTCAAGGATTAATT >gi|3450273|gb|AI100312.1|AI100312 34687 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113J6XP 3', mRNA sequence TGAAACTTTATTCCNAGGGCTTGGGGGNACCCATCGCAGNAACCTGGCTGGTATGGGNANCATCCCTCTG TGTTTCAAGGCTGGGGGAGGACGCNGAACCCCTTGGACTCCACTGGTCATGAACGCTACACAGTCCACCT CCTACAAAAGTTAGTGACATTAGACCCGGTCAAGACGTCACTGTAACCACTGACAGTGGCAAATCCTTTG TCTGCACCCTGCGTTTTGATACAGAGGTGGAATTGGCATACTATGATCACGGCGGTATTCTACCATACGT CATCCGGAGTTTGAGCGCCAAGTGATCTCAAAGTGTTTTTCGCCTTTTGTTTTCTTCTTATGTTAAGATC CCAATAAAGCAAGTTTTGTGAGCATCTTTTTTCTTTCAGGTTACACTAAACCTTTGTTGGCAAGAGTTGC TATAAGAAAATGCAAAAATACACACTTCATTTTATAAACAGTTTAACGT >gi|3450272|gb|AI100311.1|AI100311 34686 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113J4XP 3', mRNA sequence AACCGNCATTAAACNCNTCTTTGAGCCGTGTGTNCCGAGGTTCCCGTCTGAGGCTACTGGGCGATATCAT CATCCAACTCGCATCGGCTCGTGGAGTTTGTCCATGGCTGAAAGCGCGATAGCGGCTCTCAACTGCAGTG GTGNCCTTCTTGGTTCTTTACCGATAAGGGTGAGTCCATCAAAGACACCGGTTCGTTCCCGTGCTATCCC GCGACATCAAATGCATTAACCGTAGCTACAAGTTTTATATATTTCTGCTCCTCACAGACATGTAAAGAAT GTTTGTCTGAAACTTCTGGTTCTTCTGTTTTCCCGTATGTAATGCTAGAAGCTTGATGATGCTTCTGTTG CCTTTTGCTTTTGGGTAAATCTCTTAGGGAGAGTTTTTTC >gi|3450271|gb|AI100310.1|AI100310 34685 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113J22XP 3', mRNA sequence CCCGGTTTTNTGACGTTTACCCNGGGAACCNTTTTTNATGGGCAAGAACAGTCCGTTTAGCGTGAAGGCT TTAAAGCGTNCACCCGCAATACCGTTCTNGGCAAAGNGCAGAAAGCNCATTGCGTAAGAAGNGGAAGNCA AAAACATTGNGAATTCATCAAAAGCATTTTATGTTGTTGTTGTTCAGATTTAAAAATTGCTGATTCTGCT GCTGAGGTTTTCTGTACATATAAAACCTCTCCCTAAGTTTCATTCAGTTTCATCATTGTTAAAGTAACTA ACTCAGAACAAATGGGTTTGGTTATTAATCTCTTTCAACT >gi|3450270|gb|AI100309.1|AI100309 34684 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113J10XP 3', mRNA sequence CTANTATGGAAAACGCTATNGTTNTCCNCCACATTGCTTCTGCTTCCAAGTGGACTCGTNAAGGAATGGT CCNTTGCAGCTCTCAACGTCCTCGGAAGAGTCAAAGGTACCCGATTTGGCATGACCCGAACCGAGTCGAT CCATTCTTGAACGAAAACGCTTCACCGCCCAATGCCAGTCCAAGCATCGTCAACTCAAAGGCCTTAGGAT TGCCTGTTTCGAAGCTATGAGTTAAGTATGAAGAAGGGGAGATTTGGAAGAATCCTTTTAGTGAATATAT GATGGTGTCAAGTTGTGTTTATGTATTGTATATGAAACAACCATGTTGGATCATATAAATCACTCCTTTA AAGTGTTACATTGTTGATGAGTCTATTAGACGATTACCCACTCTCTTTATTTCATAAATTTGCTAAGAAT AC >gi|3450269|gb|AI100308.1|AI100308 34683 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113I2XP 3', mRNA sequence AAATTTTTTAANAAGGCAAGTTTGTTNCNCCCATGGNATGGGGAATTGGCTACTTGCCCCCAAAGGCCCC CTTAAGGAGNAGAGATGTGCAAGTAGTTATGGGACAAAGNTGGCTGTGAAGGTTGCTGGTGGTGAGATCG TGGAATCTGAACGNTGCGTGACCGACGACAAGCTGGTCACAGCCGCATCAACTTCCGATCTNCCCCCCTT TTTGTATGCATTGTCGACTGCACTTGGTCTCTCTGTTGTATTCTAATGTCAAGTGGTGCTTTAACGTCTA ATGCCT >gi|3450268|gb|AI100307.1|AI100307 34682 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113I20XP 3', mRNA sequence GACCGTTTTTCACCNCCNAAGCAGGCTTTGATGATNCATCGCTGGGTAGATCCATGGGTGGGGAATCATA CAGGGCCAGTACCNCTGATTATGCAGCTTCTTAGAGACANTCTCACTCTCTGGACTTCAGATATGACTGA CGAAGCAGGAGATGAGATTAAGGAGGCATCAAAGCCCGATGGTGCCGAGTAAACCCGAAGAAGAGGAAGA GTCATTTTATAATGGTAGAAAACTTTCATGTGATAATCTGAGTGAGGGATAGCTCAGGATTCTTATAAGA GACACAGTTTTATTGTTGTTTGTTTGTTTTGAAACTACTTGCGATTTATCATTCCTCCTTTAGCTTCCTC AATATTTCCTATTCTCCTTTCTAATGAAATCAAAACTTGGTTATTTCTG >gi|3450267|gb|AI100306.1|AI100306 34681 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113H5XP 3', mRNA sequence GGTCATTGGTACCAAATTNGTGCTGGAGACTNANGGTAATGTTNNCAGTGGGTTCCATGGAAGAGATGGT GGTTCTTCTGATGCTATTGGAGTATATTTCTCTCCAATGATATCTTCCTAAGCTACAGAAGTTTGTTCAT GCATGGCTTCACGTATCTTTTACTACTTTAAAATACTTATCGATTCCGATGTTGTCAACTATGAACATCT ATGTAACGAAATAAAAGTTTATCCAAAACTAATTTCAATATGTCATTTAAAATATTTTCGATCTATATTT TATAATAAAACTTCAATTTTAC >gi|3450266|gb|AI100305.1|AI100305 34680 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113H20XP 3', mRNA sequence TGAGAATTCCCACTNAGGNTTCCTTAAGATCACTTCCAGAAANGCNCNCTNTGGTNAAGGTACCAATACT TGGGGACAGGTTGAGCTCAGGGTTCACAANCGTGTCATCGATCTCTTCAGCTNCCCCTGACGTTGTTAAG CAAATCACGTCTATCACCATTGAGCCCGGTGTTGAGGTCGAGGTCACTATTGCTGACTCTTAGACACTTG TTCCAAAACCGCTTCAAAAGAATGTATTTTATCGTTTCTGGTCCTCCATTTTTGTTTNCAACCTTGTTTC TTGGGTTTTNATAGTTCTGAGGTNGTTTTTGTCTATCGAATTTTTTTCATCTATAAGAGACCTTAATNAA CC >gi|3450265|gb|AI100304.1|AI100304 34679 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113H1XP 3', mRNA sequence CCGGNACTTNTCAACCCCTNNCTTGAACCTNCTTCTGAATATTTNATTCTCCAGAGGAAGTCATGGACNC TTAAGCTCTTAGCTGGTTGTGCACTCAACAAGTATATATCTTCTTGACGACTTCTTGCTCGCAACAACTC TCTACCAGCTATCAAATGCATCGTACGGTTGTTGTCTGAGGAGAACATAACTGAGTCGTCGTCACAAACA AGAGGAACATATGCAGTTTCGGTCAGAACCAGTCGTGTGAATGGTAGATATATGTATGTGTGTGTAGAAA ATGGTTACCAATTGTATCTTCTTTTTGATAATTATTTTTTCATGCCTTTTGTAATATGTAAGTTTCTTTA CCTCGTTCTCTGATTGGTTATTTTCTCGTTATCTGTTTAACC >gi|3450264|gb|AI100303.1|AI100303 34678 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113G6XP 3', mRNA sequence ATGGGCACTCATGNCTATGGCTTCTTCAAAAGGGCTTTGCTNGGGAGTGTGAGCGAGTATTGCGCCAAAC GAGTCAAGTGTCCTGTGGTTATCNTCAAGAANCAAGCTCAAGATAATTAAGCTCATATGATTGCATTGTG TATATGTTNCGAAAGAACTGGTGTAACNCTTGAGTCAATCTTCGTATGCGATAATAAAATACATNACGNT TTAA >gi|3450263|gb|AI100302.1|AI100302 34677 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113G2XP 3', mRNA sequence GGATTNGNTCCCCANGCCAAGGNGATACCNAAAGATTGTTGAAGGGAGAGCTTCGACTTCCAGACCAGGA ATGATTGNCAATTTAACCTTGACCTAAAAGAGAGGAGGAACCGGAAGNTTCTTGAAAACTGCGGCTTACG GACACTTTGGAAGAGACGACCCTGACTTCACCTGGGAAGTCGTCAAGCCACTCAAGTGGGACAAACCTCA AGCTTAAATTTTACCTACTCTGTTTCTGTCTTCATTCCACAAACCAATTATCTGCTCACTTTTTTATTTC TCTGTTTTTGTGGTTTATTGTGTTTATGTATCATTGTACTTGAGCTATTTCAATTGGGTGTTTGTTTTTA TGGCGACTTTTACACGGCTTGGAGT >gi|3450262|gb|AI100301.1|AI100301 34676 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113G21XP 3', mRNA sequence AAGGNAGAGTTTCCGGGAGTCCTNCCCNGANCACTNCAAGNCAAGGCCCAACNCNNNCAAACTAGCCAGC CAATGAGGAATGAGTCATCCATTATGGTTTTGGTTACGCTAAAATAAAAAGAAGACCTTTGGCTTTTGTT CTTCAATCCTTATGCATGCTTTCTAAAGTGGTTATGATGGATTTTGCTTGATGTTCCACATTATGGGTTA TTCTATTTTCTTTGTTCTTGTAAGATGATGCTTCAGAAGAGTTTGTTACTTTTTACCGTATTTGTNATTT ACATTTTCACTGAAAACAATTGGCGAGTAAAAAAGTGTCCTTGTCTT >gi|3450261|gb|AI100300.1|AI100300 34675 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113G12XP 3', mRNA sequence ACCGTANCATCCCTTTCCGATGAANTGGACNNAANATTCCCAGGATTTNNGAGCCCCAANANCTATTGCT NAAGGANCCTAATTGGGACTCTTANGGGAGATTCTTGGAACGTGTGTCTCTGTGGGATGCACTGTTGATG GGAAAGACCCTAAGGATCTTCAGCAGGAGATTCAAGAAGNTGAGATTGAGATTCCTGAGAATTAAGGAAC AATGGAGTTTTTTTNTCTTCTTATGGGAATTTGAAATGCTTCTGTTGTTATCTTTCTCGTTTTACCATAT TTTGTTTTTGTTTGGGAACTTAGCTGCTATGATGTTTCACTTAGAATGACTCTCAAGTTTTGGATTCTTA TTATTCTCTGTTTCAAAACCCCAATGGTTCTCTATC >gi|3450260|gb|AI100299.1|AI100299 34674 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113G11XP 3', mRNA sequence ACCCGGNGCTNACNTTTCACCGGACGTGANCNCCTTTGGNGNGCAACCAACGTGGTTCACGCATCACCCA GATTCGGATGTTCGTGATGNCCCTGAAGAAATTAGAGCTTCTCAAGGACTGAAACCTAAAATAAAACGAT CACATCTCCAGTCATCAATGGGTTGGTACCAAATGCGAACTATCTTTTTCATATTGACCACATGGTTTGG TTTGTTTTATTACTTCGTCGTACATAAGCTGCCGGAAATACCTAACTCTTCATATGGTTGTCTCTTTGAC ACCTACCGGATTTTACTTCATTTATGCAAAGTATTGTAATAATAAAAAGAAAAAGAGGAT >gi|3450259|gb|AI100298.1|AI100298 34673 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113C1XP 3', mRNA sequence ATNCTNTTGGAGATTTTCCNGGGGGANTTTTANTGATGTCTGCCAGAAGCTTGANATAATNGAAAGGNTG TGATGCTATTGGGNTTAGCTGCAGCTCCGGNGCAATGGAGAAATCGAAGATGAGAGCTTAAAAGATGGAA CATGACAAAGCTTTCTAATTATACAAAAATATGTGCGATCTCTTTTGGTGGTGTTTTTAAATTTCAAAAC ATCAATATCTCTAGTTTCTGAGATTTTTAAAAGAAGTAAGTAAGACCACGAATGTAAGGAAATGAAGAAG AATTAAAAATGATCTATTTTTGTTGTTTGTTTGTTGCTTTAGTCAGTAAACTGGTCGTTGTTTTATGTTT TGTGTTTGATTTGGATGTGTGGTTGACTTCT >gi|3450258|gb|AI100297.1|AI100297 34672 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113A23XP 3', mRNA sequence TTTGCCCCCCTGGGGACCGCCCCTGCTTGACTAAGNGTTTGGGNAAGGNCAGCTGNNTAACGGNCAAGCN TGGGNGATACTGGATGGCATTGCCCAAGGGGACTGCGGAAGTTGTAACTCCGCTGGAACATACCAGGCAG AACAAATGCCCAGTCTGGTTGTGGCGAGCCGACACAAAGATGGTATCATGTTCCGCGTTCGTGGTTGAAG CCAAAAGGGAACTTGTTAGTACTTTTTGAAGAACTTGGTGGAGATATATCCAAAGTCTCTGTTGTGAAGA GATCAGTAAACTAACTT >gi|3450257|gb|AI100296.1|AI100296 34671 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113A22XP 3', mRNA sequence AATTTNAAAGNTTCAGCCGGNACAATTGNNGGCATTAACANCATGNCCTAGTGGGTGGTTCGTGAGTTCC GCTTTCAACTTTATGTTTGAATGGAGCGCACAAGGAACATTTTACATATTTGCGGCTGTCGGAGGAATGT CATTCATTTTTATTTGGATGCTCGTACCGGAAACCAAAGGACAATCATTGGAAGAATTAACAANTTCGCT TACGGGGACATCCTAAATGCACATTTATATTGTAATATACTATTAATTTTGTTTGGTAAAAAGATAAAAT TTATTTTCTGTTGTCAGTCGCATTGCAAATAATAAATGTATTTTGTAACATTATTTGCATATTGATATTA ATAATATTTTACATTTTTTTCCTTCGC >gi|3450256|gb|AI100295.1|AI100295 34670 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113020XP 3', mRNA sequence CGGTCTTGGCTNCCGTCCTTGCCAAGGTCTCCACTTGATCTCCTGGTCCGCAAGGAAGCGCACNCNCGCC AACGGGAGCGCAAAGCCGAACTGCAGATCCACGTNCAGAATNTCNTTCCCCCATTCCACTGGTGGACANT CTATGCTGCTCCACATGNCCTGCAGGTCCAACCATCCCANTACACGCACCACCACAANTACCGCGGGACC CAGCCACAACTTCTATGGGAAGCCGCGTGGTCCACCTGGTCCAAACCGCTACCCTCCTAGCGGAAACCAG AGCGGGGGTTATAATCAAAGCCGAGGAGGTTACAGCAGTGGATCATATCCTCCACAAGGACGTGGAGCTC CTTATGTGGCTGGTCCTAGAGGGCCTAGTGGTGGCCCGTACGGGGTTGGACCTCCTAACTACACACAAGG TGGTCAGTATGGTGGCTCTGGTAGCTCGGGAAGAGGGCAGAATCAGAGAAACCAGCAATACGGATGGCAA CAGTAAAGAGCTCTAATGATTTGTTGATCTGATATCTTACTCTTACATTTAATGTGATACTAGTAATAAG CTAATAATAGATTAATATGAGAAACTGAATCTCTTTCTTTTCCC >gi|3450255|gb|AI100294.1|AI100294 34669 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113017XP 3', mRNA sequence TACAAACCNCCGGTTNTGATCCCCAAGAAGCCTGCCCCCGCCGNTACCGGTATACAAACCACCGGTAGTG GTGATTCCAAGANGCCATGTCCGCCANTTCCACAGCTTCCACCACTTCCAAAGTTTCCACCTCTTCCTCN TAAATACATTCACCACCCCAAGTTCGGGAAATGNCCTCCGTTGCNTCCACACCNTTGAGAAACATTAAAT ACGTATATATATAGATATACGTATACTCATGTATAATCAACGTGTTACCTTTTTTTAAATATTTTATCTT TGCATATGTTTTATATTTTGTTTCATTTGTTGGCTTTGAGTTGTCTATGTGTAGACTGTTTGTTTATATT CCCGTCAATCTTCCAACAATAATATGGTAATGATACGTTTCTCTT >gi|3450254|gb|AI100293.1|AI100293 34668 Lambda-PRL2 Arabidopsis thaliana cDNA clone 113014XP 3', mRNA sequence CTTTTGCANCCGNCGGAACGGAGGAACAAAAGCAGAGAGCTAATCAATCATGGGAAAGGTTCACGGATCT TTGGCTCGTGCCGGTAAGGTTAGAGGACAAACTCCAAAGGTTGCGAAGCAAGATAAGAAAAAGAAGCCCA GAGGTCGTGCTCACAAGCGTCTGCAGCACAACCGTCGTTTTGTCACCGCAGTTGTTGGTTTCGGAAAGAA GAGAGGACCCAACTCTTCTGAGAAATAGAAGAAGTTAGAGAGAAAGATGTTGTCGTGAAACTTCTCAAGG TCATTTGTAACTTTTTGTTTTCTTTGGCACCGAACTATTATGTTTTGATTCTATGCCTATGAAATACTGT TTTTTCACTTATGATTTTGGTCAATTAAACATAAGATATGATTTTTGCC >gi|3450253|gb|AI100292.1|AI100292 34667 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111O9XP 3', mRNA sequence GCTTGGGCAGGGNCTGNTNCCCAAATCGGGCAATTGGAGGACCGAAGCTNCGNGAATTTCCCAAAGATGT TGTGGATATGCTTCTGAAAAATGTGCCCACAGTGAACAACTGAGTATAATATCTCAAGGAAAACCATCAA CTGTAAAATGGTGTGATATTTTCAGTGGATACGTTCATTCCTTTCTTTATATTGTTTTGTGGAATCCAGA CTCGTCTGTTGCTATTGATTTTGAAATTGTGTCTTGAAGCATTGTATTCATTTCTACAGAAAGTCGCTTA GGACTTTTGTGTGTTGTAATAAAATTGAGAACAAAGGAGCCCATTGGATTTTGTTTCATCAAGAAGATTG AAAATATTCGAACAAGAACCGTCGGTTGTTTTGC >gi|3450252|gb|AI100291.1|AI100291 34666 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111O21XP 3', mRNA sequence CCCCANCCCCATTGNCCAGACTCCCTTTTGCTAGAAGGCTTCNCTTCACCGNTTCTTGGAGAAGAGAAAG GNCAGAGTTNCGTCAAAGGCNCCATACCAATTATGCGATCCAGCCAAAGCGTCTTCAAACCCTCAANCCA CAGGCAACATGTCGTGGCTCGGTTTAGCAGCTGAAATATGAATGCTAACCNCCCTCAAGCCGTACCAAGA AATTCTTTTGACGACGTTGCTTCAAGACAAGATATAAAAGCNCCTATCTTCATGCTTTTTGATTTAAGAT ACAAACTACTCAATGATTAGGAAACTTCATATATTTGTATGTATTGATTAGTGATCAATTATTGTTAGT >gi|3450251|gb|AI100290.1|AI100290 34665 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111N9XP 3', mRNA sequence CGAAATNCCGCGGCCTAAANCAGNCCACCTGGTAACGTCACAGCTGGTGCTTTAACTCTCTCGCCATCCT CGGTATCCCCCAAGCCATTACGTTTAGCATTTCCTTTTNGCACTAGCTTCCATATTTCAACCAATTTCCG GTGCCGGCCAAGGACTTTCCCTNGGTGTTCTGAATCTAGCCATTGTCGTCCCTCAGATGGTAATATCTGT GGGAGGTGGACCATTCGACGAACTATTCGGTGGTGGAAACATTCCAGCATTTGTGTTAGGAGCGATTGCG GCAGCGGTAAGTGGTGTATTGGCGTTGACGGTGTTGCCTTCACCGCCTCCGGATGCTCCTGCCTTCAAAG CTACTATGGGATTTCATTGAATTTTAGCAGTGGTTGTTTGGCTCTCTTTCTCTCATAAAACAGTAGTGTT GTGCAAATCCTACAT >gi|3450250|gb|AI100289.1|AI100289 34664 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111M8XP 3', mRNA sequence AGCTTTNTTTCGCCGGCCTNCTTTCCCGGANANTGAAAAATGGGATGATTTTCTTCCTTTTCCGNTAACT TTATATTCTTCACATAACCTGCCTTTTGGCNATTCACTCTCAGATATGTTTTTGTGAGTCGTTAGAATTT GAATCATGAAGAATTCAAAGGAGAAGAGGCAACAAGAAAAAATGAGTGTTCGTTGAGTTATGGCCCCCCT TTCGACTTTTTGTTTGGTTGTATNCCTCTCTATAGGCTATATGGCTTCTGATTATTTTGCGTGGGCGGCA AAGAAAATAAGATCGAACATTGTAGTTTTTTCTTTGGTTTAAATTAGTCTTTTTCCATT >gi|3450249|gb|AI100288.1|AI100288 34663 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111M18XP 3', mRNA sequence CGGTATTCTNCGGACCATCGTTCCGNCNGCGGGGAAAAGAGAGAGAGGGATNTGAAACAGGCCCCNTCGT CGTGCGTGNTGGAGGCTTTTNCGCCNTAGNGTTNTGAGGAAGACCTNTGGAGGAGGAATAGAGGAAGATC ATTCGGCGCGTACACGGAAAACGAAGCGCGTGGATATGTGAAACGCAATGATAGGCCTCAGCATCTTAGC TTCTTGGATCATATCCGTATTTTCGTATCTTCTCCATGTGATTGATTTTTATTTCTTTCGTGGTCTCTCC CGCTCGTCGCTTTTCTATGTTTGTTTGTTTTTTTCTCGGGACAAAAGAAAC >gi|3450248|gb|AI100287.1|AI100287 34662 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111K6XP 3', mRNA sequence GGATTTTGGAAGCCAGTTNTTTGGAACAAGCACCCCNGNGCATNTCNCTCATCGCGNTGNTGCTTAGCNC CTCAGTTCCTTCATTGCTGACCGGCTCGAAACAGCAGTGAAGAANGTCATCGCTGAAGGAAAGTCCCGGA CGAAAGATCTTGGTGGAACAAGCACGACTCAAGAGGTCGTTGATGCGGTCATTGCAAAACTAGACTGACT TTGACAAATTACGTGTTCCCGCTCTGCATAAATCATCAAATTCCTGATACAGATTTTGTGTTGCCAAAAT ATGGGGTATGATCCAAGCACAACGGTTATCTGGTTTTGTACCTCGAGTTTTATTATATTCTTTAGCCGTG GAATATTTCGATAAGAAAAAAAAACATGTTCCAAATAATTCATGTTGCTACGTTTGTTGGCGCCTTTTGT CATGTCAAAGTTTCTTAAACACTTGTTCGTGGAATATGCAAACTTTTATGGATTCGTAATTTC >gi|3450247|gb|AI100286.1|AI100286 34661 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111K12XP 3', mRNA sequence TGTTCGACACGTTTTACGATTTCTCGCTCCTCCACTGTGAAAGTACCGACGGTTGCGTTCCATTTCACGG GAGGGAAGTCGCTGATTGCCGCGAAGAATTATCTGATCCCTGTGGATGATAGTGGAACGTTTCTGTCGCT TTTGCTCCACGTCGTCGTCGTTGTCGATCATCGGGAATGTGCAGCAGCAAGGGACACGTATCACTTACGA TCTATCCAAAAATGTTATCGGATTGTCAGGGAATAAATGCTAAACATGTCAAAGTAGAAAAATTAATAGT TTTACGGGTAATCAGTAAAACTTTTTATGGTACTAGCTAGCTACGGTAACAAGATGAAAACAAAATCCTT AAGTGTGAATTTTTGTACCTTTTTTTTAATTAATCATAAGTTATTGTCGTCTTTTATCGAAT >gi|3450246|gb|AI100285.1|AI100285 34660 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111J7XP 3', mRNA sequence ANCCNGTGCNAANCCACGCNGTCCAGNGGTCACCTTGGAAGTCCAGCCTGAAGAAGNCGGTGGNTCTCTC CCCGNAGGTCCAAGNGTTCTTGGNCCGNTTCGCAAAACGCAAACCGCAACGTTGAGTAAGAGACAGAGAC TTGGCACTTCATGCCAGTTTTGAGAGNCGTATAGTAAAAAGTAAAACTCGAGAAGTTAAAAGAGACAGTA TGGAGTAAAAAACTGAAGACTTCTTCTTCAGTTCTATGGTAGTAAAAAACTAGTAGTTACTTTTGGAAGG TTTGGCTTATGACAAGCGACGAGGTGAAGAAAAGGGGTTTTGTTTGTTTGTTTTTTTAACTGTTTTGTAA ATATTTCTTTTACTACTCTTTGTGATCTTCTTTGTTTGTTTGTTTGGTTTTTTTTTTGCCCCTTTTATCA CCTTCTCTTGTTTTTTTCTTTGGTATGTCCTTGTGGCTTGGCCTTGTCCCATAAATAATATTAGTCTTCT TTCACT >gi|3450245|gb|AI100284.1|AI100284 34659 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111J24XP 3', mRNA sequence CAAAGCNCAGCTAAGAGGCCGCTAAGAAATCTNGGNNAAGTGTNCCATNAGCTTGTTAATTNCCAGCATC TGATCCCTACTCGTACACACTCGACGTGGATCTCAAGGAANTGGCGACTCTTGATGCTCTTCAGAGTAAG GATAAGAAGGTTGCTGCTCTTAAGGAAGCTAAGGCTAAGCTTGAGGAGAGGTTCAAGACTGGTAAGAACA GATGGTTCTTTNCCAAGCTCAGGTTCTGAAGAAATTTTCTATTTCGTGNGGAATTCATTTTGAGCTTTTT GTTATCGTGTTTTTTAGTTTCTAGGGTTCATTTCCCATGGTGAAAAATGTGGATCCTGTTTTGGATTGTG GAAGATGTTTTGTTGAAGTTTGGATTATGGATTTGATCTTTTATTTTGATTCTCTAATGCATTCTTATTT ACTC >gi|3450244|gb|AI100283.1|AI100283 34658 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111F24XP 3', mRNA sequence CACTCATGGTTTCTAGGACAGCACGTAACATTGCCCGGTTGACCATCGTGCTTCCGNTCCCCAACTTGAA GNCGTTAGGACTGATCTCCAAAGNGGTTNTGGAAAGCTGACCCNCCAGNGNTAGCNCTTACTGACAACTC CATTGTGGATCAGGCTCTCGGAAAGCATGGGATCATCTGCGTTGAGGATCTCATCCACGAGATCATGACT GTTGGACCTCACTTCAAGGAAGCCAACAACTTCCTGTGGCCATTCCAATTGAAGGCACCACTCGGTGGCC TTAAGAAGAAGAGAAACCACTACGTCGAAGGTGGTGATGCTGGAAACAGGGAGAATTTCATCAACGAGCT TGTCAGGAGAATGAATTGATGAAAGCTTCCTTCTTTATCTTTGCAAATTTCAAAGATTTTGGGACCGAGT TTTTTTTTTTTTGTTCAAGTTATCAGAGACTTGTGATCTTTTATCCGAGATAGGCTTTTTATGACTAATC ATGTTATTTTCC >gi|3450243|gb|AI100282.1|AI100282 34657 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111E24XP 3', mRNA sequence GGAGCCGCAGAGTCTGAGAGTNGTGGCACNACAAGNGCTTTCACATTGGTGGAGATTTTAGNTGGGAAAA TCNAGNAAATNGCAGAAATTTGGGTACATGTAAATGGAAGTATGGCTAAGATTGTGGNGGNAAATACTTT GTTTGAAGATGTAACCTGATTTGAAATTTAAACAATTAATTCGGGACAAGACTGTAATAACTAATTATAC ATTTGTCTTGGCGAACAAGTCCCTTTTAG >gi|3450242|gb|AI100281.1|AI100281 34656 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111E18XP 3', mRNA sequence TCACCCCATGGTGANCTGAGNGCCCTANCCTATNGCCCTGCCTTANGGCCTATTCCACAGGCCTCTTCTT GTTCGAGAAATGGCTCTTTGATGNGCAAAGCCNCGATATGATCCATCAATAACATGTCACTAGNGGGTCA GGAAGTGTTGTTCTAGAAAGCATTAAAGTTTGNCGATTTGCTTGAGGANCCACGAGGCTTAGTTATAAAC AATTTGTATAATTAAGTACTCTTTAGTTTTGTTTTCAANCCTTATTATGATCATATTGCAGTAATTAGGG ATTTTAGTCTTTAGTAGTAACTCTTAAGTTTTAACACATTTTTCTCTATCTTTTTAGTAGTAACTCTTTA TTTTTTCCTTAAATCTTTGTCGACGTGGAGATGATATCTTCTATGTAGTAGAAACTCAAAAGTGTACATC ATCTTTATTAATGTAACGTCTTTTT >gi|3450241|gb|AI100280.1|AI100280 34655 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111E17XP 3', mRNA sequence TTGGGGAACCCTTNACNCCCGNGACCCGGCTGACTCAATGAGCTTGGCTCACTGNCATTNACCCAAACTC TAAAATGGTAATTTCTGGTGCCTATGCTGTATCAACCCTTAAAGATGCTGCAGTTGGGGACAGATTCCAA TTCGAGAGGCTNGGTTATTACGCGGTGGACAAGGACTCTGAGCCNGGAAAGCTTGTGTTCAACCGGACGG TCACACTCAGAGACAGCTACGGGAAAGGTGGAAAGTAAAACACTCCACCCATATTAACATTTTGTTGGTC AAAATTCCCCCGAAAGGGTTTTATAACAACAGTAAATGAAATCGTTTGGTTTGATACGCACATTGTACAA CAGTTGGTTTTTTATTTCTTGAATC >gi|3450240|gb|AI100279.1|AI100279 34654 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111E10XP 3', mRNA sequence CGGCTNTGAAGGGCTCCNNCGAGATAAGCTTGCCTAACTTTAAGGCTCGAACCGGTGTCACGTGCGTATC ANGTGGTACCTGTTAAGAAGAGAAGGATCNGCGTGTTTGGCACGTGTCAGAAGGAGAGCACGTGTAAGAC TGAGCTTATGCTCTAAGCTCCGTTTTAGCTATNCTCAGAAGTTTTGCCCCCATCAGCTCTATTCGGCTCG GCTCTGATGATCTTCAAGTCGAGCCGGTAACTTTTTTTTAATATATAGTTCTCTATTTCCCCCTTTAATG TTCACTTTCCATTTGTGACAAAAGAATAGAGTATATGTACAAAATTATTTACAGAGATTNNTTCAAGAAT TGGCTGAGATATTATCTATTTTTTAACGAATAAAAGCAAAAAATTTAT >gi|3450239|gb|AI100278.1|AI100278 34653 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111D11XP 3', mRNA sequence CCCCAACTTGTGTAGCCCATCTCCNCAGTGGGCANTTCAGNGGCCAGACTNTAAAGGAAGGAACATCTCC TGCTGCAAAGNGGGTGTNCAATAAACGGAGGCCAAGTTATTGGATACTTACATCAGTTGGGAACAGAACT TCCAGTGACGTCAGATGTAGCTGGAGAAGTCCTTAAGCTTCTTTCAGATGACGGAGACTCCGTAGGTTAT GGAGATCCTCTGGTTGCAGTCTTGCCATCTTTCCACGACATCAACATCCAGTGATGATGGTTTCTTCAGC CCAATTCCATAGCAAATGAATAGTCTTTCATCCGGAGACTGTACTATTCATCTTCTCCTGTGTTTGTTCA ATGAAGATTTGTAATCTGTTTAGTTGCAAAGAGTCTACTTTGATCTTGCTCTCATCATTTGTCACGTAAT GTGGATTTTCTGCACCAGAGAAAAAAAACAATTGTGGAATTTTTATAG >gi|3450238|gb|AI100277.1|AI100277 34652 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111C4XP 3', mRNA sequence TGCTGGGNCCTTGGACCNCCAGNGGTCGTTCGTTTCCATGGGANTATCNCCGNTGGCTCTTACAGCGTTC CATCAGGACTTCCTCCTCCNNCCCTGTAACTNGNCGCAATGGANACTGGAGTATTGTCCAAGGCCTTCCG ATTGATGAAGTATCAAGGAAGAAGNTGGATTTGACTGCAGANGAGCTCAAGGAAGAGAAGGACTTGGCGT ACTCATGCCTCTCTTAAACCCTTCTGGAGCAAAATTTTCATCTATAAGGTGTGAGATCATTTAAAGCCTT TCAGGGCTTTGTCCGAATAAGAAGTGTGTTTGAAAGATCTCCAAACACTGTTTTATAACCTCTTTGGTCT CTTTGATGAGTATTGTCCCTGGTCTGTTTCTAAACCAGGATATCGTTTTTTTCAATGTGTCTGATTTGGT TTACCCATGAAAAGAAG >gi|3450237|gb|AI100276.1|AI100276 34651 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111B9XP 3', mRNA sequence CTGAGCNCTAAGGGTTTGCTGGGAAGGNAGGCTCTTTTCCTCGNGCCCTCTGCTTTAACGCACCATGTCG GAAACTCCTTCAACACTCTAATGACTCANTATNCAATCCCGTGAACAAGAAGAATCTTGCATCTGAAGGC GACTCAAATAACCCCGGTTCATTGGCTGGTAAGAAGATTCTCATCCCAGGTTCTGGACAGGAGATTCCCG CTAAGACCAGCACTTGTTGTACTTCTTCTTGATCTGTCTCCTACTCAAGCAAGATTCATTTTTTTTCCTC CTGAAATTTGTGATAGAGAATGCTACTTTCATTGTATATTCTTTTTCGAATCTGGCTTGTTTGCTAGTTC ATTAAACATTGGTGTGCAATTGGACACCGATAGAAAGTATTGGAACAAATAGCTTTTGAATGAAATATGA AACAAACAGTCTTTGAGAGTT >gi|3450236|gb|AI100275.1|AI100275 34650 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111B21XP 3', mRNA sequence ACNTCCAGTGGNGCTCCAGATGGTTACNGGGGGACCTGCCCAATATGGAGACTGAGGNTGGCAAAGCGAA CCTTCATCCATGNTACCACGGGTNTTGNGAGCCCGTTAGATATGGNGAGATATTGGCTGAAGAAGAGGAA GACAGATCTGCAGGACGCGGGAATGACAATCACAACAGGCTTTCAATTTGGGAACAATCCCGCTGCTCCC GTTGGTGGATTCAAATTTGCCTGAAAAAGGTATACAGTAGTACAAATTGAAATCCTTTGGTTTGGGAAAC ATGAGATTCAGCTTTTGCAACTGTTATTGACAATTGCCAGGTTCAAGTTCGACTTTTTGAGTTCTGGTGC AAAAAGGCTTATTTTTCTGTTTTTTTTTTCTTTTTGTTGTTGATGTTGTCCTTATTTGTCTGAATCATTC TCTGATTCTGTATCTTAAACTCTGCTATGAATTATGTGTAGTGTGGTTTCTGGTTTAGGATATGGTACAC TTTGTATTTGTCACTTT >gi|3450235|gb|AI100274.1|AI100274 34649 Lambda-PRL2 Arabidopsis thaliana cDNA clone 111A12XP 3', mRNA sequence GAATTATNCGGGCCNTTTGNTTTTTTGGTGCCGAGAGAGTGNATTTNCGTCGGATCANTCGCTCNAGTCG AAAAGGNTCTTGGGCCTTNATCTATGCGGGGNCCAGGGATATTAGCTGGAAGTGCCCCATCTTCAGAGTG GAATGAGCTTGATCTTAAGATATCTCAGTTCACCAAGTCAATTGAATATGAAGCAACAACATCTCTACAG GCGATTAATTGAAGAAAGAGTAACATTTGTATTTGATTGTTTTGTTTGTATGGGGGATAAGGGGTTCTCA CAATAAGAAAGCAATGTTGTCTCTCTTGTAAATTAAAAAAGAAATGCTTTAATTTGTTAATGGGCCGAGC CTTTTCGGGTTGTAACTAGGGCAGGCCTATCATGAATGTTCATAGGCCTAGCTGTTATGATTGTTAATGA GC >gi|3450234|gb|AI100273.1|AI100273 34648 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110P7XP 3', mRNA sequence TTGGGAACCTCCCTTTTGGAGNTTATGNACNTNCCCCTTCACAACCACTGATTGCCCAGTTCCTCTTACT GNCCCAACTCTATGTTGGTAGGCTGTTGTTGCCCATGCAGCCCCTGATGACCCTCGGAAAGGGAGGCCAT GAACTCAGCCTGGCTACTGGAAACGCAGGCGGCCGTGTTGCTTGCGGCATCATTGGTCTCCAGGGCTAAA GCTGCTNCGTTTCCAAAGAAGAGATTGATGTAATAAGGAGGTCCAACCTTAGACCTGGGTTTGGTAGTTG TGTGTATCTTCTGGTGTGTGGCTAAAAACCTTTGAGCTTAGTGTGGCTCAAAGCATCTTTAATTCAGACA GAAAACAGAGAAAATTCCGTACTTTTATTATTTCATGAATAAAAAAGAGTTGGTTTACAGTT >gi|3450233|gb|AI100272.1|AI100272 34647 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110P5XP 3', mRNA sequence AAAAAGTGGTTGATTNTTAAAGACTGGGTTTGNGATTCCTATGGCNCNTTCCTGGTTGTCCCACCCTTTG NTGCCNTACCAGAACCCNTGTTAGGCCAGAGAATGAGAGACTTCACTCTATGCTCTGATCCAAAAAAACC AACAGATATGGTCTGAGAAACTTAATCAGACAGCTGAAGAACCGTGGCAACCAGCAGCCATGTTAGAAGA ACAAGGACTGAAGCATGGATTCAATTCAACACTCATCTTTTGAAAAGTACATATGATAAACATATTGAAT GCTTGTCTGACACAATGATGTGGTTAGTGCATAAAATATAAATATAAAGGAAAGAGCTGCAGCATC >gi|3450232|gb|AI100271.1|AI100271 34646 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110P4XP 3', mRNA sequence CCATTGAAGTTTGGGTTANCCCTTGTTCCCCCTTTTCCGGGTGGTNATCNCGACCTTTGNANNCATTTTC TTGCCNGGNGCCNAAAGGGATCCCGATAGGGGAGTGGGTCAAGTGTGGAGTCACACTGGTATTGGTCAAG GTTTGTGGAGGATGGTGAGTATGGGAATGCGCTTGAGATGGGCAAGAACAGTAACCAAGCTGGAACGAAG CATGTTTGATTTATCATTGTTTTTAATGAGAGTTTTAAGAAAGAAAGNAAAAAGATTTGTAATTTCTAAT GTCGTAAAGGAAAAAGTGTATTAGCCTAGATATTTATTGGTGTTTATATAATTCAATACCACATGAAGAA ATTATGCATATGATTCTTCGTT >gi|3450231|gb|AI100270.1|AI100270 34645 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110P18XP 3', mRNA sequence TCATTAAGGAAAGGTTTTAGGAANANNCTTGTTGTTGGCCGCTCNAAGAAGAGTGGGCATAAATAAAGNT GCCCNTTCTGTGTGTGTGTGTGAAAATTGCTGTGTTTTTTAAGCTTTTGTGTGTCTCTAGGGAAGGTNGA GATATGGGAAAATGGATGTAAAAAAGAATGTAAATAGAGAGCCCCCAAAGGCAAAGTGAGAGCATCATCA TTAAGATAAAGCCAAATCGGCTTTTCTTTTGTAATTCAGCTCCTTTCCACGGGAGAGAGAGGGAATGGCA AAAGTGTTGTTCCCTCTCTTTTGTTTCGAAAAAAGTGTGAATGAAAAGATCTTTGTT >gi|3450230|gb|AI100269.1|AI100269 34644 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110O22XP 3', mRNA sequence TGGCCCCCATTNCCTGATTTTGTGATCATCCCATCCCCCGAAAGAAGATNGATNTATCCATTGCNCCCTG CTCAGGTTGTTACTCAAGCTGCTTTTGTACCCGGAAGCTCCATTACCCACCACAGATTATCCCAGCAATG CCCAGTTGCTTAGAGAGCCTTTTCGTTTTCTGGTTTAAAACCCNATGGGGATGGTTCTTTTTTTGGGACA GTACTCGNTNTCTCATGTTATTCTAAGTTAATACTTAAAGTTCTGGNGGTTGAATTACATCAAGGATATG NATGTNTGTTTTTCGTTATCTTTTGTTTAAATTTTATTTATCTNTTANCGATTTGTCTTTTTTTAATTNG NAAATTTGT >gi|3450229|gb|AI100268.1|AI100268 34643 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110O13XP 3', mRNA sequence AAAAGCCNCTAACCCCTCCCGTACTGGGGCCGNGCGTTTCCCNACTTTGTCCCTACCNTGANCCTNGCCT TGCTTGNCCCAATTCACAATGTCACCATACTCCAAGGACTTGAATGATCTAAGTCCACTGGAATTGGTAT TGGTTCTGATGATAATTGGATTGTTGTTGTCCTCACTACTAGCACACCGGAGGGTAGCTATTCTCCGGCC TCTAACTCAGGANTTTCGCGTTCGGAGTTAATGGCCTTGTTTCTTCAAGTTTGATGTTTCTTCTCTTTTG TTTCTTCATGTTTTGAGTCCCTTTTATGGTGTTTATCTAAACTACCTCCCTGTCTTTGTTTCTTATTATG TTGTTATTATGGTGATTTGTATGAATTCGTAAGGCATTAAAGAGAATAACAATATTATCATTAAGTTTCT GCT >gi|3450228|gb|AI100267.1|AI100267 34642 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110N9XP 3', mRNA sequence TTGTAGGNCCCGGTNGTGACANTTCGAAAGAGGCCCGGCNCCCTNTTGATGATGATTNCGAGCCAAACCG CACTNCCCNTAGAGGAAGTGAGTCTCCTTAACTTTGATGGCTCATGGCCACGGCTTGCAGGCATTGTAGC ATGTATACTATTGGATCGACTGTTCCTTTCTCTTTTAAGTGTGTTTGCTTTAGAACCTTTTAAGTTTCAT GTTACCAAGAGTTTTTTCATTTGAGACATAATGTTGTTGCGTTTCTTTTGGACAAGTTTTCGAAGATTGT TATAAGGATTTATAAAAGTTTC >gi|3450227|gb|AI100266.1|AI100266 34641 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110N24XP 3', mRNA sequence GCAATTCGNGGACGGAATTCGGGGGGAAGCNCCCGGCCCGGGACCCTTCGATGCGAACNCCGNTGCAACC ACGAACGGATCTCAGTTCTCCATCTGCACCGTGAAGACCGATTGGCTTGATGGGAAGCACGTGGTNTTTG GGCCAGGTCGTGGAAGGCTTAGACGTGGTAAAGGCCATCGAGAAGGTTGGATCATCATCTGGAAAGCCGA CGAAGCCTGTGGTTGTTGCCGATTGTGGTCAGCTCTCTTAGGATCTTCCTATCATCATCCTTAATTTAGC ATCATCGTCGTCATTGTGGTGTCTCTTTATGCTTTTGCTTTTGTTATGGAGTCGTTTTAAAATTTGTAGT CATAAGTTTGGTGTGTGTTCTCATGGGAACATATATAAACTTGCCCCTTTAATATTAACTACCAG >gi|3450226|gb|AI100265.1|AI100265 34640 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110M3XP 3', mRNA sequence CCCTCCCCNAAAGGGGCTCCCTNTTTTAATTCGGTTGGCCCCGGTTTTTTCCCGGGGCCCGGAACCCNCC CCGGTTCTNTGNTGGCCGGTACTGGACCAATGTGGAAGCTCCATGTTCGGATGCACCGACTCCGCTCAAG TGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGTCCCCTGGCGCCTTCATTAGGATCATCGGATTCGACAA CACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATCCCCT TTCTGGAATATTCAGCGTTGATTATTCTGGAACCCATTTCTATGTGGTCAATGCAAATTTAAGAAATTAT TTGCCGACTTAAAAGTTGAGGAACTATTGTTTGAAAGTGAAAATGTTATTCCTATCAGTTTCTCTATAAT TATAGTTATCATTTCATTTC >gi|3450225|gb|AI100264.1|AI100264 34639 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110L11XP 3', mRNA sequence CAATTTTTCCTTCCCTNTGACCCGTTGGCCCATTGACCNGGAAGTCCNTNCCCAACCAAGTCANGAGTTC CCCGATGGCTGAGGAATTGCTGGCCCAAGACCGTGAGTGCTGATGTCGCTGCTACAACCCCGCATCATTT ATGGGGGGATCCGTCAATGGTGGTAACTGCAAGGAGCTAGGTGGACAGGCCGATGTTGATGGTTTCTTGG TCGGTGGTGCTTCTCTAAAGCCTGAGTTTATCGACATCATTAAGGCCGCAGAGGTGAAGAAAAGTGCCTA ATGAGCTCATTAAGCAATTTAAAAGTCCTTTGCTTTTCCAGTCGCAACTCTGAAAAAATGAATAAGTTGG TATTATGATATGATACATTTTGCTTCAGTTGTATTTGGCAAAAGTTTCTCTCTTACTATATTGTTTTGAG AACGCAACAATC >gi|3450224|gb|AI100263.1|AI100263 34638 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110L10XP 3', mRNA sequence ACCGNATGGCCCTGGACNCCGNGGNACGTCGTTCCCTGGGGTTACCCCGTGCTNTACGCGTCCATCAGGC TTATCNACCCCTCCCCTNTACTTGTCGCATGGAGACTGGAGTATTGTCCCAAGGCCTCCCGATTGATGAA GTATCCAAGGAAGAAGATGGATTTGACTGCAGAGGAGCTCAAGGAAGAGAAGGACTTGGCGTACTCATGC CTCTCTTAAACCCTTCTGGAGCAAAATTTTCATCTATAAGGTGTGAGATCAGTTAAAGCCTTTCAGGGCT TTGTCCGAATAAGAAGTGTGTTTGAAAGATCTCCAAACACTGTTTTATAACCTCTTTGGTCTCTTTGATG AGTATTGTCCCTGGTCTGTTTCTAAACCAGGATATCGTTTTTTTCAATGTGTCTGATTTGGTTTACCCAT GAAAAGAAGAAAATTGGC >gi|3450223|gb|AI100262.1|AI100262 34637 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110K9XP 3', mRNA sequence CAAAAAAGATCCGNTGGTGGTTGGCCAGAGGAANNCGGTTNGGTGGTGNTGGAGGAAATCGGTTTGGCCG NTGNTGGTGGCAGAGGGAAGAGGAGGCAGTGGTGGTAGAGGCCAGAGATATTGAAAACTGGAACCCAACT TCTCCTTTCTATATAAAAAGAAACTAAACTCCGTCTTATAATTTCATTACTATCTTCTTACGCTGATGTT TTCTACACTATAATAGGTGGCTTTTCTGTGTTTTCCTTTTTCTTTCCTTGAACAAACTTATGGAGGCTCT CTTGTACCCTCTTATCAATTTTGTGTAATGTTGGATGATAATGATGATTAAATTATTATTCGTC >gi|3450222|gb|AI100261.1|AI100261 34636 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110K22XP 3', mRNA sequence TTNTTCTCTGCCCGATTGCTTCAGGGGGGGACNCTGCTCCAGTCCNCTTTTAAGTGGATCCGTTCTTGGT ACAACCCTGTTGAAGTGCTTCCCCAGATCGACANTACTATGTCCAAATTGCTTCAACNGNGGAACTCTGC TTCAAGTTCNCTTGTAAGTTGAATCATTCTTAGCAAGGNCCTANCCAGCGGTAAATATCCTTTCTTGCAT TTATCACACTCGATTGATATCTCTTGTATCGCAATAACGGGTTGTTT >gi|3450221|gb|AI100260.1|AI100260 34635 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110J2XP 3', mRNA sequence TTCTGTTCATCCCCGCTTCGGCAAATCGCTGAAGGGNCTTTACGGNCCCTTGGGGCAGGCAGTCACTTTT NTCAGNGGTTTTTCCCCATGCTTGCTGACCTCGTCACCGGCGGANTCAACAAGTGCAACAAATGAGTCGG TTCTTAAAGTGGCTCTAGCCCATGGGAAGCAAGCCGGAGTGATCAAGTCACATGACAGAGTTGTGGTCTG TCAGAAAGTGGGAGATGCGTCCGTGGTCAAAATCATCGAGCTAGAGGATTAGAAGAAGCAGAGTGAGTCG TTGTCTCGGTCTTTTTTGTTCTGTTACTAATCAATTTTATTTCCTTCACTAAAACTCTTGGTGCCGTCCA AGAAAAATCCTTGCAATCATTGTTTCTCGCCGGCTATATGCTAGATACCGGAGTGAAAATATATCTCCTG GGCTTTTGTTTTCGTATTTAGGAGATTGATGTTTCCAAGTTATGATATAAACCACTTTCCACTT >gi|3450220|gb|AI100259.1|AI100259 34634 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110I18XP 3', mRNA sequence TCCGCCGAAATCAAGAGCCATCAAGGNGAATCTGAAGGCCAAATGAAGGGAATTTGGGATCACTGAGGAT GATGTTGTGTCTACCGACTTTGTTGGTGACAACAGGTCAAGCATTTTCGATGCCAAGGCTGGGATTGCAT TGAGCGACAAGTTTGTGAAGTTGGTGTCATGGTACGACAACGAATGGGGTTACAGTTCTCGTGTCGTTGA CCTTATCGTTCACATGTCAAAGGCCTAAGCTTACACCGGCGAGAGTTTGTGTGTGGTTGAGTTCGTACTG TTCTGAATAAAAAAAAGGAGAAAAGAAAACTCGAGTTGTTATGTTTTTTCACTGATTCCATGCGCAGTCA TGAGAGTTTGTAGCTTTTGTCTTTTTGCTTTCTCTTAATGTTTCCCTGCTTTATTTACTGAAACCATTGG TTTGGTTTTTTATGTTAATTAAGTTTTTAGTTC >gi|3450219|gb|AI100258.1|AI100258 34633 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110H22XP 3', mRNA sequence GACCCAGCGTCACCCGAAGGACTCCAGACTATTTCCTGTGATCACTGGACACAGACTCATCTCAATCAGC AGCTGCAGGCACCCNCAAGTGAAAAGTCNCAGTTGGCTAACTCAAGATTCTGGTCCTATGCATTGTGTTC AGGTTGCTCTGTTTAAAATTCAACTTAGTGCCCNCCNCCGGAATATAGTGTGTATTNTAGGCGAAGAAGG CTTCTTATCTTCCTCTNTAACCAAGAAAAGAAAAAAGATNCCCATTNTGAACATTGTTTTGTTGATGTTA TTAGCTTCTTCTTCTTCTCCCTTNTGCATCAGAATGTGGTTTCATGTGNG >gi|3450218|gb|AI100257.1|AI100257 34632 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110H21XP 3', mRNA sequence CCAAAAAGTTNCTTGAAGCNCCCAACAGNGGNGATCTATGGTGTTCCTCAAGGNTTCTTCCATTTCAGCT AAACTCTGGGAAAGCCCTGCCTTGGCCTTTGTCGCATTCGGAAGCTCCTCCCCAGGGCTCCAAATTCTAC CATTTGCTCTGTTTNCAAACGATTTGCCTTCAGAACTTGTTGAAGCCACAACGTTCCTTAGCGATGCAGA AGTTAAGAAGCTTAAGGGTGTGCTTGGGGGAACTAATTAAGCTTCTCTTAGTTTCATTGTTCATTTTTTT AAAAATGTGGTTGTGCGTTTTGTTATTTCGAGTTCCTTTAGCATTTTGAGTTTGTTTCTTCTAATGATTT GGTTTTTCTTTATGAGTTGTTATTGTTCTCAATGTTTCATTTTATAGTCTCTTTGGCTTCAAATTGTAAT AACTAATAAGCATTATATTGCAGATTTCT >gi|3450217|gb|AI100256.1|AI100256 34631 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110H13XP 3', mRNA sequence CCCACATGCCCCTAGCCAGTCCAAAAGGNTTTAGCTGAGTTCCAACAGNACTTGCNTCTGCCACANCAGN TCTTGAGAAAGCAGAGGCACAGATTGGTGTTGAAGTTCACAGTGCCATCAACGCAGCTCTCTCGGGCTAA AAGAAGGTTTCTTNCTTTATTTCNTCGAAGAAACAANNAAAAAACTAAATCATTTGGCTTTTCAAGTGAT TAGTGAAGTCCCTTTTTACTACTGCAAAGGATGGAATATTGANTCTTCTTGTTTAATCGTGTTGGACTTT TGTTTGAATAAATGATTTTGTTTAACGGGCACAAAAACCCACAAAAGTTTCTTGTGTTCATATCTCTGCA CCTTTGTTTTTGTGTATGACTTTGTTGTGTTGAGAAACTAAGTTGGAATTTCTTA >gi|3450216|gb|AI100255.1|AI100255 34630 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110H10XP 3', mRNA sequence GGTTGCAAAACCAACTTGGCAGGCACTTGGCCATACCCAACTCCTTCATTTTCTGCTTTTTGACACTTGG CAATGCAAAGTCTGTGCAACAATATGACNNTATTTGGGCGCAGTTGGGTGATCTAGCACTCATCCTCAAA TCCTTACATGTGGCCTTGCCCTTACTACTTTTTTCATTACTATGCATGCCCGTGGCATTCCTTTTTGGCG TGATCACTGCAATTGCCCATGTGAAATGGCTTTTAGTCACCATTAGCATTATATCTGGTGGATTCTTCCT TTTCGCAATCTTTATCCTTGGCCCTCACGTCATGCTACAGCGCTCACACCTTCCGCCCAGTTCTGGTATA TTTCTCAAGACTTTTATGCTGACTATAGACATATCTGAGTTGTTTGTGATTTTGATCAAAGCTTGTTTTG GTTGTGTGGCGTGTTCCGAATAAATCATCAAAAGTTTATAGATCAAAGGATATTTTTCTTCTC >gi|3450215|gb|AI100254.1|AI100254 34629 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110G24XP 3', mRNA sequence TCCGGTGCCCCCGTCGTCATTGATTCCGGAAATTCTGCTTGNGGAACTCGATTGACTGCTCAGTNCGCAC GGTGTGNGGTGCAAAATGTCCCTGCCTGGGTTCCCGCGNGACACCACACTGAGCTTTTGTCTTGGNCTTG CACCCGCGATGAAGAATCAGTACGAGGCTTCAGGGGAGAGTAACAACGCTGAGAACGATGCTTGCAAGTG TGGATCTGACTGCAAGTGTGANCCTTGCACCTGCAAGTGAAGAAGCCTTTTTAAATAAGCAGAGATAATC GAGTCTCTTTAATTAATTAAGTTATTCAATAAGTAAACCATATATAGGATGGTGTTTTTAGGTTTGGTTT ATGTGTAATAATGGCTTCAGCTTATCTTTTAGCCGATCATTGTCTTTTGTGTTTGTTTTGATCATATCTT TTAGATGTCTAGCAACTCTGCCATGTGATGAGTTTGTACTTCCAGTGGAATGATAATAATATTATAGTTT TAAATCTC >gi|3450214|gb|AI100253.1|AI100253 34628 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110F23XP 3', mRNA sequence TCCACCGNAGATTGGTCCATGTTATTGGTATAGTGGTTAGTTGGTTAGTTGGTTATACCGGTTATTTTGA TCGGGATTAGTTCAGCGAGTTCTTTCCNGCCGAATTGACTTGGTGGATAGGGCTTCATCGTGATTTATTT TATCAGTGGAATCGGNCAAATCGNAGNAAAAACNTCAAATTTAGTTAAACTNCCCCGGCAAACTTTTGCT TCACTTAAGATAATTTTTATATGTAGTTGTGAGAATATTTGGGTTTGCTATTTTTCGTTTTGTGAAAATA TNCAAAGTGATGTTGTATAATAATTGTTATTTGGAAAGGTATTGTTCAAAT >gi|3450213|gb|AI100252.1|AI100252 34627 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110F21XP 3', mRNA sequence CATTGTGACTGGTGAGGGGTTATCCNCCCNACCAAGATGGCTTTTNCCGGGGTTCTGTACTCACCGTGGT TGTGGGAGGACTGACTTCAGGGAAGGANGCTCAGATCAACTCTNCGAGTCTGTACATTCACAGATATTTA CATTGCCAAAGGACACATTGATCTATCCTGCTCACGACTACAAAGGTTTCGAGGTAAGTACAGTTGGAGA AGAGATGCAACACAACCCGCGTCTAACTAAAGATAAAGAAACATTCAAAACCATTATGTCAAATCTGAAT CTGTCGTATCCGAAGATGATTGATGTTGCAGTACCAGCAAATATGGTCTGTGGGTTACAAGATGTGCCTT CTCAAGCCAACTAAAAAAAACTCTTACATATAATGTTTGTCTTTTTATCGATGTCA >gi|3450212|gb|AI100251.1|AI100251 34626 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110F12XP 3', mRNA sequence GGAGAAGGAATTTTGCTATCATGNGCAGCAGCACAACTCACCATTCCCAAACACAAGTAGTGATCAACAT CCAAGTCAACAGCAAGAGATTCTTCAATGGTTTGGGAGCAGTAACTTTCAGACAGAAGCAATCAACGATA TGTTCATAAACAACAACAACAACAACAACATAGTGAATCTTGAGACCATCGAGAACACAAAAGTCTATGG AGACGCCTCAGTAGCCGGAGCCGCTGTCCGAGCAGCTTTGGCCGGAGGGACAACGAGTACATCGGCGGAT CAAAGTACAATAAGTTGGGAGGATATAACTTCTCTAGTTAATTCCGAAGATGCAAGTTACTTCAATGCGC CAAATCATGTGTAACATTTTGTTTAAAACTTTATTTGTACTTACATACATAAAGAGGGGTTTTCTATTTT GT >gi|3450211|gb|AI100250.1|AI100250 34625 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110E2XP 3', mRNA sequence GTTCCCCTGTTGCCTTCCACCNTGGCCATTTTCAACTTCCAGCTTCGAGTTTGTCNCCGCATACCAGTGG TGGACACCATGACCTCCNAGGCAAGCTGAGGGNTCCCTNCCATCTCTTCTTCCNCGGGCACAANGCTTCA GGCCGATTACTGTAGATACAGACCGCACTGTGGTTGCATTTTACAAGTTCTTAAGGAAACACGCAACGAT CCCATTCAAACTGGAGAAACCTGCATCAACCGAATCACCTAAAACTGCAGAGTCCACNCCAAAAGTAGAA ACTACCGAGACCAAAGAATCACCCGATAGCACGACAAAGAGTAGCCAAAGTGACTCGAAGGACGAATTGT GATCAGAAAAGGGTATAATATATATTACATGTCTCCTTAAGTTGTTATATGTATGATCAGAATTGTCACA TCATGAGTTTGGACTAGATAAAGATGGGAATTAAAGTAATTTTAGTTTTGAG >gi|3450210|gb|AI100249.1|AI100249 34624 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110E22XP 3', mRNA sequence TCCCAGGTATGAAACCCANAAGGTGGTTCCGCTGGCATTCTAAGACAAAGCNCTAGATGGCACGGCCCTG CAGTGCTGGTGTCTGACTTCCATGGCGAGTTACTGTTGCTCGGTCAAGGACTTTCAGCTGGTTGCGACCG TTGACCAAAGTCACCGAGCGGTAAAGGCGATGAAGAAACAGTTCTTCTNCAGTTTGGTAAAGTGGGAGAT GACACTTTCACTATGGATTATAGACAGCCTCTCTCTGCATTTCAGGCTTTTGCTATCTGTCTCACAAGTT TCGGCACTAAACTTGCCTGCGAGTGAAACCCAACAAAAGGCAACAGAAAAGAAAAAGTGAACTGGCTTTG CAAAAATGTAATGTTTTGATGTAATCATGTGTAAGTGTAAACACAAAGGTATGTGGAAAGGAGAAGCACA TAAGTATTATTATGTAAGAAACATTATTTAAAACCCATAATCATAATGTATCTCTTAAGT >gi|3450209|gb|AI100248.1|AI100248 34623 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110D1XP 3', mRNA sequence CAAACCGTNAAGNGCTCCGTNTGGNGTGGCATTTACACTGGTGGCATTNGCAGATTCTTTTGCTAATTCG TTTGGGACCAGCAGTTNTGAAGATCAACGCAATAAATNGCGCCGACTGAAGCGGGCTTGCCTCATCTTAG TGTCGACGAAACCGTGAAGAACCCTAAATCTGAGAGCGCACAGGGAGACGCCGCAGGTGCAATGGGGAGA GGACGCGGTGGAGGTCGTGGCCGTGGAATGCGAAGGCGATAAGCTCCGTCTCTAATGCCAAACTTGTGGG ATTCTTCTTCTTCTTCTCTAATTTCGATTTTGTTGAATTTTTGTTTTGAAGTTAAAAAACCTATTATTGG GTTTGTGTTTGTTCAATTAGAATACTGGTTGGGTATGTATGTCTATACAATCTGTGAAACATAAGTTTTA GTGTTGTTTTGGTT >gi|3450208|gb|AI100247.1|AI100247 34622 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110D18XP 3', mRNA sequence CGTCGGTCGNGTGGTTANCGGGTTAGTTGATTCCGGTTGAATTGGGNGTTTATGAATTTAAGGGAAGCNC GCGACGATTCGAAGTGTGACCNNGCAAGATGCCAGGNGCTATGAGAAATACTGTATCGGTGACGTGACCA GTCAACGGTTCCGGTGACGCAACAGTATATTCCGCCGTGGGAGAAGGAATCTACGGCGGCGGAAACAACT AAAGAAGAATCTGGAAAGAAGCTGCTTATCTACTTAATTCCTCTCTTGATACTCGGCGTTGNTTTCGCTC TCAGATTCTACAACAACAAGTAGACCAAATTATGATGAACAGATTGATAAGAGTTTCTTACTGTTCTTGG TTTTCGTTTGTTGGTAATAACGGGCTTCTTATGTGAAGATTTGGGCCATTTGGCCCATCGCTCAGAATTG GACTATAATGTCTTATTTATTTTATGTTAATGGGCCGTATCAGTAGGCCCTTTGTTGATATATGCCAATC CCAATT >gi|3450207|gb|AI100246.1|AI100246 34621 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110D11XP 3', mRNA sequence GTGATCCGTTGGAAGGAGNGGAGGAGGAAAAGAGCCAAAAGGTTGGTTATATGGATACTGATGGTATTAG TTGCAGCCAAGCAGCCAGGGTTTTGTGATGTGAAGATCTCAAGCATTAGTAGAACAGGCAGCTTCTCTAC TCTGCCTGCACCACCTTCTTCTTCTTCAAAGTCTCACTTTTGGACGAATGTGTATGCAGGACTAAAGCAA GTGGTTCCATGGAAGAGCAAGAAGACTACAGTTTGAGATTCTGCCATATCAAAGATTCGAAAGATAAAAC ACCAAGTAACAAGAAAGCTTCTATGGTTTCTACAAGTATTTTTAAGCTTTTGTTTATGATTTTTTTCAAT ATTTCCAAGAAAATGACACGACTAGTAAAACCATTGTGAAACCCAGTTTTTTTTCACGCTTGTTGTTGTG TTTGAATGTTTTTGAGACTTTTGTAAAGAGAAACAGAGAATCTTACGATGT >gi|3450206|gb|AI100245.1|AI100245 34620 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110C2XP 3', mRNA sequence CCCTGAGAATTTCCCCGCNTCNGGGAAGGGCTTAGACTTCTGACCTTCCCGGAAGGATNCTANGTTTCCC CCGTCGCAACCTATCNAGGCCGGTTACTNTGGCTGGTCCACCTANTGCTCAGGGGCTAGAAGATCAGCAA AAGGAAGTGAACCANTACAAGTCAGAGAGAGAAAATGGCTAATGAGTCTTGGTTACAGAGTCTGGGGNAT GATGGGTGACCAATGGAGTAGCTTTGCAGGCTGTCCTCTTCCCAGGAGAACCTTCAAGCTCCCTAACTCC ATCTACTATGTCGCCTGATCAAAACCAAACACAAAACTTTGATTTAGCTTCAAACAAAAAGAAGAATCCA CGAATAAGAGAGAGCTGTTTTGAATCTGTTTCTTGTTTATTTTCCCCTTTTTCGTGTCATATTATATTGA GAGACTTATGCATCCAAAAGAACAAACAAATGGTTATATGTAACAGAGAGAAATCAAATCAAAATCACAC ATTATC >gi|3450205|gb|AI100244.1|AI100244 34619 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110C18XP 3', mRNA sequence TGGCGNGGCCACTGCTTTNGGCCTTCATGAANCCTGAGTGCAAGNGGCAATGNGCACACACCGTCCAAAC CGTGGTTGAGAACTTTTACATGACAAACTCGATCACAAGAGCATTCAAAGATCATGGCGCAGTGCAGTGC CGTGCTCTTGAAAAAGTGAGAGCTTTAACTTGGGTTTTCACATTTTCTCTCTTTTCGCAAAAATAAAGAT ACTGATTCTTCGTTTGCTGTCCTCTTTATAGACCTTTTGTTTAAGCCTGAGTATCACTGTATCTCGGGTT TAGCTTGCGGTGAAATCTATAAGCAATTTGCAATAAGCACATTGTTAGATTCAAAACTTTGCAGTGTTAA TTGGATGCTTTGTGGCATCTTGTATTGTTCTTATTAGGACTCCCTTTTACATTTGCATATATGAATTTGG AGGCATGGCGAT >gi|3450204|gb|AI100243.1|AI100243 34618 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110C16XP 3', mRNA sequence ACGAGGCTGGGNTTCTGCTNCCCCAATGTAAATCATTNTCCCCCTGGTAGAGTTTTCTTCCAGGCCGATT GGTTTCCAGNCCAGTTAAGNAAACGGAGGTAGATTCGATACTGAACGGTGCGTAGAGAAGCTAACGGAAG AGACCCGGAGACTCCAGAAGAGGCTATGGAGCTTCGAACTCTCAAGCTGTCTCCACAATTCTACGGTCAG ATGACTCCACCAACTACACTCATCATGTGTCCTTCGTGCGAGCGTGTGGGTGGCCCATCATCATCGAACC ATCACCACAATCACAGGCCCGTTTCTATCAATCCGTGGGTTGCTTGTGCTGGTCAGGTGGCTCATGGGCT GAATTTTGAAGCCTTGCGTCCACGATCGTGATTTTTTATTTTAGTGGTGGGAAAAGGGTGTTTTGGTATT TTTCGTTATCGTTATATAGTCTATCTGTGTGGGGTCATTGTAATTTTGGATGATTGGCCTTCTCATGAAC TAGTCCTATGTATGATGCAACCTTAAAAAGATTTAAATTAGCNAAAATTAGTTAC >gi|3450203|gb|AI100242.1|AI100242 34617 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110C10XP 3', mRNA sequence CACACGGGAATTNCCTCATGAGGTGCCCCAATGGAAGAAGATTTGGCTTTTCTTNCCNCCTGCCTTAGTG CGTCGAATGGCTAAGGAAGTTGACTNCTTCTCCGCAACAAGTGGATCCNTTGTGTTGAATTCGAGTTAGA GCACGGATTTGTGTACCGTGAGCACGGAAACACTCCCGGATACTACGATGGACGGTACTGGACAATGTGG AAGCTTCCATTGTTCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGT ACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGC CTACAAGCCCCCAAGCTTCACCGAAGCTTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCTCA TTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGATTGTCAAATGTCTGA TTTATGAATATGTAATTTAT >gi|3450202|gb|AI100241.1|AI100241 34616 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110B6XP 3', mRNA sequence GTTAAANCTNCTGGGACCANTTTTCAGCCATTTGNTTGACCCCNGCCAACCNTTTTTCCNAAGAGAAGCT AATTNGCCAAGGCCCTTGATNTNTCCGGGCTAGGCTGAAGGNGTTCAGTATTGGCTGGTGAACTTTCCAC TTTGACCGATCTTCACCACATTCCCGTGATTCAATACCTGCTCGGAACTCCCACCAAGAAGCTCTTCACG GAGCGTCCACGTGTCAACGAGTGGGTGGCTGAGATCACCAAGAGGCCAGCTTCAGAGAAGGTTCTGTGAG AAATTTCTAAAAGGACAAAAGTGGTTTTGCTTCAGTCACAGTAATAATGCTACAAGTAAATAAGCGTCTG CCTCATTGCCCAGTTTCTCAGTACTTTCTTTCTGTTGTATCCTCTGTTTTTGTTTCAGCTTATGTGAGTG TGTGTACGTTCTTGAGAGTATCTTAGGCAAAAACTATTTATCT >gi|3450201|gb|AI100240.1|AI100240 34615 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110B23XP 3', mRNA sequence CTTGTGCCCCACTTGACTTTGTNNCCCCTGGTAAAGGCTTCGTATCCCCAAGCTTCAAGGGCCCGTTGCC TTTCCATNTGACGCTGTGGCACAACCGGAGCTGGAGATTCTTTGTCGGTGCTCTCTAAACCAGATTGTCG ATGATCGATCCGTTCTCGAGGACGAAGAGAGATTGANGAAAGTGCTGAGATTCGCAAATGCTTGTGGAGC AATCACAACGACCAAAAAAGGAGCCATTCCAGCTCTTCCCTCAGATGCTGAAGTTCGGAGCTTTCTCGAA AAGAAATAGAAACAAAACAACTCAAGCTTCTATTACGTAATCTGTTTCCGCGATTATCTTCTCTTTTTGT ATTCTTGTTTTCGGATGGTTGAATCGAGAAGAGAAACAAATTCGGCATTCCGCTCTGTTTTTGTTTCTCT TCTTCAAATGTAATGATTTAGAAAAGACGTATGTTGCAATTTAAGGCTTCACTTGCTAATAAAATGATAA GGTTTTTCC >gi|3450200|gb|AI100239.1|AI100239 34614 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110B22XP 3', mRNA sequence TCTTTTANCCCAGTTGCCGATGACCGATCCGTTCTCGAGACGACGNGNGATTGCCGGAAAAGTCCTGAGA TTCGCAAATGCTTGTGGAGCAATCACAACGACCAAAAAAGGAGCCATTCCAGCTCTTCCCTCAGATGCTG AAGTTCGGAGCTTTCTCGAAAAGAAATCGAAACAAAACAACTCAAGCTTCTATNACGTAANCNGTTNCCG CGATNATCNTCNCTTTTTGNATTCTTGTTTTCGGATGGTTGAATCGAGAAGAGAAACAAATTCGGCATTC CGCTCTGTTTTTGTTTCTCTTCTTCAAATGTAATGATTTAGAAAAGACGTATGTTGCAATTTAAGGCTTC ACTTGCTAATAAAATGATAAGGTTTTTCC >gi|3450199|gb|AI100238.1|AI100238 34613 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110B20XP 3', mRNA sequence TCTTCCCGCCCCTGAAGGTTANCCCGNTCANTCGTGGCCTTGGGTCCNGGACGNCCCTTGAATCCCGGNT GNTTCCGATTTACTNTGGCNCCGATATCCGTGAATTTGGCAAACGGACCCGCATTTCCGGCCATCGTTTA CACAGCTGATGCAAAGTTTGAAGCGGCTTCAGGGTCTAAACATAAGCACCAGAGCGAATACGAGTGAAAG TTTGATGTAAGATACGTTAGACAGAAGATGTTGCCTTACCTGGTCTGGTTCAAAGAGCCAACGGGTGGGG ATTGCCATTCTTCTTTGCTTTTTTTTGTTCTTTTTGTTATTACGGTCAGACGAGAGGAGACAAACAAAAA AAGATTGATGGGTTGGGGAAAAGCTTGTGGAGTTCAATCGAAGTGGGAGCTCAACAAGAAAAGAAAAAGC CCTATTCTTAACCCTTTGTAACTATTATTATTATCATCATTGTTGTTGCTACTTGTAACGATAAAATTAG GTGAATGAAC >gi|3450198|gb|AI100237.1|AI100237 34612 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110B16XP 3', mRNA sequence AGTCCGTCCCAACCGTCATGCCAGGGGCCATAANTCCAACATACCGCGCGAACTTGGTCCGACGTCCGTG ACATCNCCGTCTTTCTGGANCACTGGANCTAANCATATTGCTGAGTTTACGCAAGATCTTTTCCCGTAAC TCGTTGCTACAGGAGAGGTGTTCCGCTCGAGTCAGAGGTTAGAGTCTGTGAGGAGTGTAAGACAGGAGAT ACGNTGACGATCGAGCTGAGTGATAGTGGTGGTTTATTGACTAATCACACGACCGGTAAAAACTATAAGC TGAAGTCGATCGGTGATGCTGGACCGGTTATTGATGCTGGTGGTATTTTTGCTTATGCGAGGATGATGGG AATGATTCCATCATTAGCTTAATCCTCTTCCATAACCATGATGGTGTTCTTGTATGCATAACTATTTGAT GAATATTTGTGTTTTAGAGTTTTCTATTTTCTTAACTTTTTTATGTTTGTTTGATTTGGTATTGTTGTTG TTACCTAAAGAATAAGAAATCAAAAGCAAAATAGACCGACATGTTCCAAGAT >gi|3450197|gb|AI100236.1|AI100236 34611 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110A17XP 3', mRNA sequence GCAAGNGGCCAAGGNGAAGAGCTTGNCAACGGGNAGGTTGCCATTTGGNATCCTAGGGTTTGTGGTTCAA CNCAATGTGACTGGAAAAGGCCCATTGGAGAATCTGTTGCAGCCACTTGTCTGACCCCATGGCACAACAC TTATTGTCCAAACCTTCAACTAAAGAGTGAAGACAGACTTATGATCTCATACCTATCTATCTTCCATCAC TTTCATGTCTGTCTGTGAGTGTGTTTCATCTTAGAGTTCTTGGTTTTTGAGCTTGAATTATTGTTGAACC GTTGTAGCTCCATGAACAAATTTGGAATCTTCAATGTACAGAGGAACTAAGTT >gi|3450196|gb|AI100235.1|AI100235 34610 Lambda-PRL2 Arabidopsis thaliana cDNA clone 110A12XP 3', mRNA sequence GGGTTTTCAAAGACNCNTCGATTGGTGAGAGGTGCNGCTGGTATNCNCCTGATATTGTAGGGGGTCACCC AATACTAGAATNCAGGGCTTGAACACTTCTTCCCATCAGTCAGACCATGTCCTCGCCTTTGACCAGCCAT CTACATCACTGCTTGGGGCCGAAGAACAGTTGGATAAGGTTTCAGGAGATAATCTTTGAGTTGTTGAGTG TACCACATGTAGTGTTGTTTATCCTAATCCTTATTAGTTAGGAGTTTCCTCTAATAATGTGATCACAAGT CGTTAATTCTCTAGGCACTATCACGAGCATGAAGAATGAATATGTCTGTGTTGTGCTGTAATTTGGTAGA CACAAAACAAAATTACTCTTATTCCC >gi|3450195|gb|AI100234.1|AI100234 34609 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109P5XP 3', mRNA sequence CTGGGTCTTGCCCGCCGCTTTGGAGATGGTTNCAGNGAATTGNTTCCCGTCGAGAAGTGGATATGATGAG TCCACCGGAAAGTCAAAGTTTCCCCGGTGAGGTTGTAACCGAGAAAGAAATGGTGTTTGAAGAGTATATG ACCGTATCTGAGGTCATCTTCCGGCGTATCCAGACGGCTAAGGAGAAAGGTTTAGAGCTTTTGACGGCTG AGATGGAAGGAGAGTTTGCTGGTTCGTGGAAAGAAGATGGGAAAGAGAAGAAAGTTGTTAGGTATCCGAT TTATCTGTTGATCGGAAGAGTTGCAGAAGAACGTGTATAAATTGATATCTCTCAGTTAGGCATTTCGTCG AACACCTTGTACTTACACACAAGAAGACATTAGTTTTGATTGGTTCAATGTAAAAATAAAACTTTGTCGT TCCAGCATTCCTGGGGATCTCTAATCTTTCCTTTTTTACCCC >gi|3450194|gb|AI100233.1|AI100233 34608 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109O2XP 3', mRNA sequence AAACCCCTTCAACAGNCAAGGAGGGTCTGTTCAAACCATTTTCAAGGTCCCGGTNTCCTCCGGTGTATCC CAGTTTAGGGTGAATATGAAAAGCTAGGCTACACTACCATTATCTCTTTCGAAGCAGATTCCCGGTGCGG CCTTACAGACACAATGAGTATGAGAGATTTATCCCCACTGCGTATCCTTATTATGGAGCCTGCTTTACGA CGATGGCTGGTTTCTTCGTCTTCAGCTTCGTCTACCTCTACCATAAGTAGAATCCCTTAAATGGTGGCCA AGTCCCATAAAGTAAGCCAAACCTCCATATTTAGATGAGAAAAAACAACTTTCGAACTAGAGACCAATAT TTTTGGGCAGCAAGGTTTTCATATGTTTCTAGTTTTAGCCAAACAGTTGCAACCTTCTTTTTGTTTCCCA GATATTTCTATGTTAACGTAACTTTACACCC >gi|3450193|gb|AI100232.1|AI100232 34607 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109O17XP 3', mRNA sequence CCCNCGGACTTCNTAAAGCCGGGNGAGAAAAGGGTCCCNGTCCCGTTNTNGCCAGGAAGGNTTGGTTTNC CCGACCAGGCTGAGTTNGGTTCCCATCACTGGGGCCATCCCGCAGCNCGAAGTGAGAAGTCCCCGTGCAT CCTCTTGGAACCCCGNTTTGATAAAAAAATCTTACCATCCCCTAGTGATGATGTTTTCTATTTAAGTTAT CTTGATTGGGTTTAGGCTAAACCAAAGCCCATCATGAGCCATAAGTAGTGGGAAGTGTTCTTGTGTGGTT TGGTTTGAGTCATTGAGTGTGTAGGTGAAAGCATCCCAAAAAAAGTTAGGGATGATAAAAGAAAATGTTG TCAGGAAAAGAACGTTGATGTCGTCATATGTAGTGCTTCAAGTTTCTTCATTTTAACCATCATACTGATG TAATAGTATCTTTCAAATAAGCAACAAAAGTAATGTG >gi|3450192|gb|AI100231.1|AI100231 34606 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109N9XP 3', mRNA sequence ACCCCGCGTTCCTNNCCATTAACTGGGANCTCTNTAGNGTGGATCCNCCAAAGGAGGCTATTTCTCGTCG AAGATGNGGCGATGGTGANGAAGGTTATGGNCTGAGGACGAAGGTGAAGAGATGAGAAGGAAAGTGAAGA AGTTGAGAGNCACGGCGGAGATGTCACTTAGTATTCACGGTGGTGGTTCGGCGCATGAGTCGCTTTGCAG AGTCACGAAGGAGTGTCAACGGTTTTTGGAATGTGTCGGGGACTTGGGACGTGGTGCTTAGTAATGGTTA CTGTTTTCTAGCTCTTTAGTGGTTGAATTTACTTGTCGTTTCTTAATGTGTATTTTTCATTGTAATAGAA TAATCGATGTTTTGTAAT >gi|3450191|gb|AI100230.1|AI100230 34605 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109N11XP 3', mRNA sequence CCTTGGCANATACNCTCCCGTTTNACCNCCCNAGGGCNTCTCTGATTCCAGGCNCTCACTTTCCTGGNAG GTTNAATTGNGCCCAAGAAAGGACGTTGTGACTGTATTTAGGCCCCCAAACTATTGCTACCCGTTGTGGC AACATGGCTGCGATTCTAGAGATCGGTGAGAACATGGACCAGAATTCCCTTCAGTTTGATCCCAGCTCCA CGTCAAGTCGAACCCGAAACCACTCGCAAGACTCCAGATTATTTTTTGTAAGTACCAAAAGAACTAAAGC TGCAATTCCACACACTAGCTCTTCGTCTCTTTTGCTTCTATTCTTAACCACTTTTTGTAATTTCATATNC CTTACGTCTATTTCTGTTTGTTAAACTCTCCATTGTCTTTTAAAATCCGTAAACTTTTGTGTGCAAAGAT TCTGGTACAAGTAACTGAAACCGCTATCACC >gi|3450190|gb|AI100229.1|AI100229 34604 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109M7XP 3', mRNA sequence CCCCGTCGNTACGTTTTGGGGGGTTCATTAGTCCCCCGNANCCCTGNTCCACTACGGTTCNAATCGGCCG NCGTGAGAGATCCCNAAGCGATCCCGTGGTGAAAGCNGCGGAGCTTCAGAAGATATGATCAGAGCCGTTC GATGCGTTGACTTTTCCCTCTCGTAAGTCTTCATTTCTACGCGTATGTGTGTCCTCCGTCCCCCGAGAAA TACGGATGGTGTCGATTTGATTGATCTCAGCCGTTGGATCAAAAATGGTTTATTATTGTAAAAGATTGAT TATGTATTTATCAAAGGGACACGTGTCACGTGGTTTTAGGATGGAGCCNTTTCGCTTTTTCTCCTTCATT TTATTTTCTTTTTCCTTTCAGAAAGAAATAAGATTATTCGCGTTGGCTTTTTCTTTTTAT >gi|3450189|gb|AI100228.1|AI100228 34603 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109M2XP 3', mRNA sequence GGGGAAGNGNNCTAGATTGCTTGCCAAGAGGAGGAAATTGCTAAGGCTTAATTCCTGATNCTGCTGATTC CCCAGANGCTTCTCNCCTCGAGGTTGAAGGACCAGCGTGACAGGAGGAGTGAGAGTTTGGCAAAGAAGAG GTCGAGACTCTCTTCTGCTGCTGCCAAGCCCTCTGTCACAGCTTAAAAAAGCTTGAGAATCAAATCAAAG ATGTCNCCTTTCTAGTTTTGTTCTCTTTTCTTCTCCGGCTATTAAAAAGTTAGTTCGAGTTCATATTCAG CTGTTTTTGTTCCAAGACATGGGTACACAATCGCTTTGGGCTTGTTTCATGATTTATGCTTTTAGTTGAA GACCATTTTAAACTC >gi|3450188|gb|AI100227.1|AI100227 34602 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109M16XP 3', mRNA sequence CCACTACTNGAACCCCNTTNCTGNTCCGGTATCGNCTCTCCCCGGGACACCCAGTTGGACCCTCCCCAGT ACAGCTCAACACTCATCCGGTTCAGATTCCCTAGAGGACTGGGAGAAGTTTCTTGATGATGAAACAAGTG ATTCTTGCTGGAAAAGTTTCTTAGACTTAACGTCACCCACATCGTCACCTGTCCCATGGTAGAACTGGAT TTTGTTCGGGTCGTATACTCATAGTTTTAAAGACAATACATACACAAAGATATTCGATTAATACTCTTAA TTTTGTTTGTTATTAAATATTGATTTAAAGTTTGTATATTTTCTTGTAAAGGAATTCTTATTTGTAATTT GTTCTTATTTGGTTTGGTTGTTGTGTAAAGAAACACATTGTAATCACC >gi|3450187|gb|AI100226.1|AI100226 34601 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109L6XP 3', mRNA sequence TTCAAGAAGACTTCAAGNCACTGAANTTNAGGTGGGAAGTTNTGAAGNGCTNNTGACCCNTCTCTTCCGT CCCCTGAGAACAGGGGAGATCGACGAGCACTTNACGGCCATTAGTGAACGTGACTGATCACTTTCACTGG AACATTCAGTCGGGACTTTGCATCTCTTTCTTTTGCTTTAAATCTATCTAAGATGATTCACGTTTCAGAG AAACGTGTTTCCATTAGTCATGAGTCGTGTAGTTTTCATTTGAATCATCTGCTTCCTCCTAATAGGAGTT ACATGTAAGGGTGTCAAATTAAGGTCGAATGAGATGGTTTAAGGTTTTGAATTTTAAAAGGCAAAACAAA GAAAGTTATTTAC >gi|3450186|gb|AI100225.1|AI100225 34600 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109L23XP 3', mRNA sequence CGAAGTTTTNCCCCTCCTGGNGCCATGNCCTCTGCAGCTTCGNCNTTCCCAAAGNTCGNGCCTGCGTNTA AGTCCACTGCAAGCCGATCCTGCTCGATCTCAGCTGTTGACCCTAAACTCTATTCCNAAGAGGTTCAGAG ACTTCATCANTAGGATCTTCCATTGAAGAGGGCTAAAGACANGAAGGCTAAAGTTTTTAACTAACATTCT CGGCTCTACGGAAATGTGAAGAAACTGCGCGGGAAGAGTAAAAAGGTAAATCTCAAGGATAGAAGAAAAG CGATTTCGGAATTTTATGTTTATATATTTTGAGATGACCAATCAAGTTTTTGGGTTGGGGAGGGGCTTTA TTTATTTTTGTGGTGAGCCGTTTATATATATAATATTTATATATGTGAATATAGATTGAAGGTTTTTAGT >gi|3450185|gb|AI100224.1|AI100224 34599 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109K4XP 3', mRNA sequence TCTGAGCCANTCCCCCCGATCNTGTTGATCCATTGGAAGGNGATTAAGCCCTNTGGATCTNGCCGCCAAG TCTAACTTGGGGAATCCTTCAAAAGATTGGGAGGGAAGATGCTGCCAACAGAGTCCATGCAAATGAACAT CGACACTGGTGTATATGACCCTGTTGCTGAAAATATTACCAATGATGAACAGCTAAAGAGGTATGCAAAA ATTCTCTCGGACGAAAGGAAATTAAGGAGACTAAGAAGCGACACAATGATTAAAGATTCATCAAATGAAT CACAAGAGATAAAATAAAAGGAAATCATTCGTGCTTTTGTGTGAAATTGTTTGTTGCATATGTTTTACGT GGTGACGTCCATTACTTTATATGCTGTGAGATGAAATTTTTTAAATAAAATTGGTTATCT >gi|3450184|gb|AI100223.1|AI100223 34598 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109K21XP 3', mRNA sequence TTTTTNCCTAANCACCTTTAAATTTGGGGNGTTCCCTACCNGGNGNGATATANCTGTTGGTTCTGAGTTG GGACAACAAGTTGGACCTGGAAAGAGGNTTTTGTTCTCTGATGTGAGCGCTTATGAGGTCGATTTGGGAA CCGATGCTAGGCATTGCTTCTGTAAAGAGAGTGACTTGTTGGCCCTCGTTGAGTGAAGTCTTGTCCAAGA GGGAGAGATTTGAAGATTTTACAAGTTTTCTGTAATTTTCAGACAGCAATTGTTGTTTCTAGTTAATCCT TCAATTTAATATCAATTGAGATCACTTTCAGAGATAGTCATATTC >gi|3450183|gb|AI100222.1|AI100222 34597 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109K19XP 3', mRNA sequence TGTGCCNTGAACCAGTTGATGNGGGGGAAGGATTTNGCTGTCCAATCCTTGTGGAATGTGATGNGCTCCN TCATCATCCATTTACTTCAAAGCCCTGTTGTTCTTTTGACCCATNCCAGAGGAAAGAACAAGAAAGAAGC CCTTGAGATTTGTTTTGAGATGAAGCTGCACATCTTGTCTTTTTGGATATGATATTTGTAAATGCAATAA GTATATATAGTTCGGTTGGAAGATGTTTTTCATCGAGTCAGTTGTGATTTTAGCCGTTTGGTGTTTTTAA GCAACGGATAAATTAGATTAATGTACGGTGATGAACCATGCATGTTTATAT >gi|3450182|gb|AI100221.1|AI100221 34596 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109J4XP 3', mRNA sequence TGGAACCCCGGTCAAGGNTCTCCCANGTGGGTCTCCCGGCTTNGTCCTACCGTNTGANGCCAAGGAAGGA GATTGGNTGCTTGTTGGCGATGTCCCGTGGGGGATGTTTATTGGTTCAGTGAGAAGGCTCCGGATAATGA AAACATCGGAGGCTACTGGTAAAGCTCAGATGATATTATGAAGCAAATAATAATCTACGAAGAACCCTTT ATGTTTGAAGCAGTAATAAGACAGATCACAGATCAAAGAGAAGACAAAAACATTGTAAGAAGCTTCTTCT TCTTCTCTCCCCTTTACAGTTTCTTTTTTGGCTCTGCCATTTTTCTTTTAGTTAGTTATATGTTCTCTTT GTAAATCACACTTTAAAAATCTATAAGAAAACCCTTTCTTGCAC >gi|3450181|gb|AI100220.1|AI100220 34595 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109J15XP 3', mRNA sequence GGANCGNCCNCGGGNGTTTTCGGGCAATCTGCCCATGGTACATCCTGTTCTATGAGAGCCCTTGGCCCGA CCAAGTGAAAGCTGAGAAAGCNGAAAGAAGGACTTTCCTCGTTTTTTTTCNCTTAACTATTATTAGTAAT GGTATATGTTTGTCTTAAAAGTCAAACTCAATTGACAGTAACTTTTTTTTTTTTTTGGTTTTTGTTCTTT CTCTGTGTCTCTCTCCCNAAGATATTTGGTGAGTTTTAAAATTGGAAGTTTTAACTGGAATTTGTATACT TTGAAAAAGGCCATNTACAGTTTATGGC >gi|3450180|gb|AI100219.1|AI100219 34594 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109I5XP 3', mRNA sequence ATCCCCCAGNTTCNGATNTTTCGTGATGNCCTTGAAGAAATTTNGAGCTTCTCAAGGACTGAAACCTAAA ATAAAACGATCNCATCTCCAGTCATCAATGGGTTGGTACCANATGCGAACTATCTTTTNCATATTGACCA CATGGTTTGGTTTGTTTTATTACTTCGTCGTACATAAGCTGCCGGAAATACCTAACTCTTCATATGGTTG TCTCTTTGACNCCTNCCGGATTTTACTTCATTTATGCAAAGTATTGTAATAATAAAAAGAAAA >gi|3450179|gb|AI100218.1|AI100218 34593 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109H23XP 3', mRNA sequence CACCGTAGACCANCTGGNTCGGCCCTCACACCTGAGGCCNTCCNGATCCCACGAGTCTTACGCTCAGGCA TGNGCAACCCTTGGCCCTATGAGTATGGTGAAATCATCCATGATTGNGGAGCTCTGAAGAGATCCAGTTC ATGTAAATAAGCTGCATGTTTGTGAGTTCCCGCATCGTTCGTTTATCAACCTCCAAAACTTTCTAATGTC TGTTACTTGCATCTTCTTCTGCTGTCTCTGTCTGTCTCTCTCAGGAGTTCCTGTTTGCATTGCGAGAAGC CATGAGCCTCTATCTTGAGGGTAGTTGTGATGAAGTTAAGTAGAGGCTTATTTTTAGGGGTTGTGGTAGT TTTTGTTTTAGTGAATCTTTTGAATTCGTTTGTGTTTTGTTTTTGTTACTTTATGCCCCAAAACTCCTTT AACATTTGTCATAATGTGTTTGAACCTCTCATCTGTTTAATCAAATAAATCTTCTTTGTATGCT >gi|3450178|gb|AI100217.1|AI100217 34592 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109H1XP 3', mRNA sequence ATGATGGACGATACTGGACCAATGTGGAAGCTTCCATTGTTCGGATGCACCGACTCCGCTCAAGTGTTGA AGGAAGTTGAAGAATGCAAGAAGGAGTACCCTGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCG TCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATCCCCTTTCTGG AATATTCAGCGTTGATTATTCTGGAACCCATTTCTATGTGGTCAATGCAAATTTAAGAAATTATTTGCCG ACTTAACAGTTGAGGAACTATTGTTTGAAAGTGAAAATGTTATTCCTATCAGTTTCTCTAT >gi|3450177|gb|AI100216.1|AI100216 34591 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109H17XP 3', mRNA sequence TTCCGGGGACATCGNAGTGGAGCANCTCANCTGGACGCATGACCAGGCACCAACCCTGGCACGTGTCCTT CTCCTACGCACGTGCGTTGCAGAACACTTNTCTGAAACATGGGNCTGCAGACCCGAGNACNTGAACGCAG CTCAGACCACTCTCTTGGCCCNTGCCAAGGCCAATTCGTTGGCTCAGCTCGGAAAATACACCGGTGAGGG TGAGTCCGAAGAGGCTAAGGAGGGCATGTTCGTCAAAGGGTACACCTATTGAAGAGATGATGCTGTGAAA AAAGAGATGAAGCAGATGTTTTAATCACATTTGTTTTTGAGTTTGCTTGTTATTAATCATGTCAAATCAT TATTTTCTCTGCTTACTTTGCGTTAGCTACTCCTTCTAATAAGTTCTATTATATTGAAGTTATCT >gi|3450176|gb|AI100215.1|AI100215 34590 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109F3XP 3', mRNA sequence CTTCTAAGGGGGAAGGTTTCCTGATTCCGGCCCGGGAGATTTNCCCGNGCTTTTTCGGGNATNCAAACGC CGGCGATCGTNAGCAAGTATGCGGNGGATCCAGTGGCTTTCTTCGAGCAATTCTCGAAAGTCGATGGTAA AGATGGGGAACATTTTGAACTCTGAAAGCTTGNCTGATGGAGAAGTTNGAAGAAATTGCAGATTTGTGAA TACATGATTCATCAACAACGAAACTAAAAAATGGAGAAAATAATCTATTTCTGATCTTTATTTATATAAG AAAGAAAAAATTTAATTTGATGTTATTCTTTCCCTTATTTATTTCTACATTTTTAAAACTATAGGGTTCT TGAATGTTTAAANCCTTATTCTAATGATTTTCAATTGATCTG >gi|3450175|gb|AI100214.1|AI100214 34589 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109F21XP 3', mRNA sequence GATTGGCCCCCNTTTGTGATGCCTCCAGATAAGTCCNGNCCGGAAATGGNAAGAGGAAGNTCANCCNNAC AGGAGGGGNTGGGCCAAANCCCAGTTCNTCNTTGGGGAATTTGCTGGAGAAGTTACTGCCTTGAGAGAAA AGGTAACTATGTGTGGATAAAACGTACTGTAAAATGTGTATTATGTATGATCTAGAGGGCCTTAGTGTGA TGTATGACTTGGTCAGGGATTTTGGTGGTTTGCCCGAAGTCAAACCGAACCAAAACTGGTTTTCGGTTAC TTTAGACTTTAGTCATAGTAAAATGAACATGTCTATAAATGAATAATATGCAACTCTTCCAATTGGTAGG CTTGCTTTTGTCTATGTAATATCAATCCTTCTTGTTATGTATTTATCTTTGGCCAAATGTGATATTTTCT GTAGTTTT >gi|3450174|gb|AI100213.1|AI100213 34588 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109F15XP 3', mRNA sequence ATTTGTTTTTGAAGGGTTGGTTGGNGTCCCNGGTGCACCTGNCACGGTNCCCCCATTTTGNTTAGGGTGT TAAGATCCCTTNCGNCTTGGANCAATCCCTCGCCAGGTGATGGGAAGAGGCATGGATGAAGTGCTCTTAT CCCTGAATTCTTTCNCCCATGGATTGAAGAAGAAGGTCGAATCGAGGTTTAAACTTGTCAAAAAGAACAA CATTGACTGCAGCCTTAGAGAAATGCTGGACTGTAACACAAAGAAATTCCATGAGAAGTTTGGCTTTTCG GAGGTAACTGCAAGCTCCTAGCTTTTATATCTCTCTCTAGTTTTTTCCTTCATCAGGCTCTCTCTGTAAG CTGTTTTCAGCTTGTGCACCAATTTCTAGCACGAGCTTTACCTTGAGTGATTGTGATATCAATAGAGTGT TTTCTTCCAGATATCATCGATTATTCACTATGCATTCGTTTATCATGGATTCTACACTTCCTTTTGAAAA TTACCT >gi|3450173|gb|AI100212.1|AI100212 34587 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109E3XP 3', mRNA sequence CGCCCNTCACTTGGTTTCCTCCGCGTGGAGGTATNCAGATCTCGTCAAGACTTGGACCGGGAAAGCCATC ACCCCTTGAAAGTGGAAAGTCCGACACCATTGACAACGTCAAGGCCAAGATCCCAGGACAAGGAAGGTAT TCCTCCGGACCAGCAGCNTCTCATCTTCGCTGGAAAGCAGCTTGAGGATGGACGTACTTTGGCCGACTAC AACATCCAGAAGGAGTCTACTCTTCACTTGGTCCTGCGTCTTCGTGGTGGTTTCTAAATCTCGTCTCTGT TATGCTTAAGAAGTTCAATGTTTCGTTTCATGTAAAACTTTGGTGGTTTGTGTTTTGGGGCCTTGTATAA TCCCTGATGAATAAGTGTTCTACTATGTTTCCGTTCCTGTTATCTCTTTCTTTCTAATGACAAGTCGAAC TTCTTCTT >gi|3450172|gb|AI100211.1|AI100211 34586 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109E16XP 3', mRNA sequence GAAGGCAGTGGAATCGCTGTTAAAGACCGGTCANTTTGGTCTTGACTTNCGACTATCTCAATCTTCATAG AGTTTTTTTNCATAATTTATAGAGAAACATCAAACCCCTTTTGGTTGGGANTATCATGTGTTTGTTCCAC TTGTGTGTTGAAGTCATTTTCCTTCTTCTGTCTTATTGAGGCAGGGACTAATGTTTGTTTTATCTTTCAG TTGTNTCGTTTAAATTCCACATTTGTNCAATGAACTGGTTGGTGTTTCTTTANGATATAATCATTTTGCC >gi|3450171|gb|AI100210.1|AI100210 34585 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109E12XP 3', mRNA sequence GTGTCCCCCAANCCTCGGCGTTCCCCNTATCCAATCCGGCCGCNCACACAGTNCCTTATGGATTGGTAAC ATCCCATNATGCCCCCTGGNGCACTGCCGCCACCGCCGCTGGAACGTTGCCGCCGCATTGATGAATAATA CACCCAACCAAATGCAGCTCAGCAACAAGCGCAACAAGGTCAGAGTTTTCATCCCACCGGGTATGATGTA TTTTGGACCTCCACACCATTCTTAAGGTTAGTAAAAACAAACCAAAAAATCCAATTAGTTCTAGTATTAG ATAGTTTCTGACCCACTTTATTTTATTTCATGTAACGCATATTGTAGAAAGTAGAAACGAGATCTTTTGT CTTACAAATCTTGTACCTTGAGCTGTTTAGTCAATTTTTCTTCTTTGTAACATAGTTAGACTTCTATTGT GTATCTGCGTTACATTTATATCTAGTATGCGTTTGTTTCAT >gi|3450170|gb|AI100209.1|AI100209 34584 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109D17XP 3', mRNA sequence CCCGGGTTCNATATGGCTCAACTTTTGGAANCCGGAACCNTGGGGCTGCNTTTAGTTCTTCAGATGTATT GGGCTCCCCAACCCAGNCCCACTTAAACCAGTTGTTCGACAAAGTTAAAGACTACTTTGGGGATGCAAAA GAGTCATTCGGGNAAGCTATCATCGCTGAACCCGGGGAGTGACGAAAAAACTGAAGAAACCTCGGATGAG AAAGCCAAGGCCTGAGGCTGAACAATTGACACTTGGTTGGTTGATTTTGATGTCTCAACCGTCTCGGTAT GGGCTGCAGAAGGTCACTGGATATGACGAGACTACCGCTATTTTGTGCACATTTTCTCTATACATCTCTC ACAGAAACAGCTTCTGTTAAATCTCTTGTAACATATAACTTATTGTGTATTGTAGATTTGTTGAAAGAAA GAGCCATTGGTTAC >gi|3450169|gb|AI100208.1|AI100208 34583 Lambda-PRL2 Arabidopsis thaliana cDNA clone 109C5XP 3', mRNA sequence GGGGGNAGCCTTCCTTTTCCGGACCNCAAGCTTTCGAAGAAGCGTNACTGTCCGGCATGCNCCNTGGNTC NCAAGNTGGTCAAGGNGAAGTTGAGCCCCTAGNCCCCGTACTTGGCCAAGCTTGCAGGTTCCCATGGTTA CATGGATTGAAGCTTGGGATGAGCTTAACCCACCAGCAGCCAGTGGCAAAGCTTGAGAGCAGTATGAGCC AAAAAGAAAAAGCCACCAAAGTTTTGGTTATTTTTAGCTCAAATTATCGTTACTTTTAAATTTCTGATTT TACGAACCTTTCTTGCTTTTTTTACACATTTGAGTAGTTTTCATCATCAGTACTTTCTCATTGTCCGGTT ATGGTTTTTGCATTTGGTTTAAATATCACCGGTTTATTTATAAACAGTGGTGGATTAGTAGTACTATTTT CTGAGTTTTTTTCTTTGTTTCATTAATAAAAAGGCCTTTTC >gi|3450168|gb|AI100207.1|AI100207 34582 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108O9XP 3', mRNA sequence TTCTTTCTCTGAGTAGAAGCTCACACATTTTCATGCTGCAAGGCCCGNAAAAATGGCAAGACTAAGCANG CTAGGAAGAGGCAGAGAAAGAGATTGCCGATTACAAAGCTCAAACAGAGCAAGACTTCCAGAGGAAACTT GAGGAGACAAGCGGAGACTCTGGTGCGAATGTGAAGAGGCTGGAGCAAGAGACTGATACCAAAATCGAGC AGTTGAAGAACGAAGCATCGAGGATTTCCAAAGATGTTGTCGAAATGCTTCTGAAACATGTGACCACAGT GAAGAACTGAGAGATATTTTTATAAGAAAGTAAAAAAAAAGTTTATGAAAAAAGTGGGAGTCATTTTTGA GTGATCTGCTCTCTTTCTCTTTTGTGGGTATTTCTGGATTTGAGAGACTCATCTTATATTATTGTTGCTA CTT >gi|3450167|gb|AI100206.1|AI100206 34581 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108O19XP 3', mRNA sequence TCCGTGCTCTTGATGGAGCCGNAGATTTCTACGNGTNCTCGTTTGTGGAGTCGACTCTGACTGATCCTCC TTTCTTNGCATCNCGNGTTAAGATAGGGAAGAACGNTCTTGAAGCTGTGATTGAGTCNGNCCTTCAGGGA TTGACTGAGTATGAGCAGAAAGCNCTAGAAGCTCTTAAGGTAGAATTGAAAGCTAGCATTGACAAGGGTG TCGCATTTGCAAACAAACCANTGCTGCAGCAGCTAACTAGATCGCAAGCTGATAACATTTTTCTTCTGAT CATTTCGAGTTTTGTTTTATTTTTCATATTTGTTGCATCGGCGAGACATTTTCGTGTTGTAGAATAAAGA ATGTATTTGCTTCAGTTTG >gi|3450166|gb|AI100205.1|AI100205 34580 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108N3XP 3', mRNA sequence CCGGGTNCNGCTGGACGCCCTCTGGCCCTGTGNTGNGCTGTCCTCGCCTCTATGATAGNTTGGGNCCTTT CACGACCCCCCTTTGGACAACTGCTCATACCANCGNGTNTGNTGCTCCATACACTTGGCCACACTNTTGT TGATGTGTTGAACATGTATAAATTGATCACCGGAAAGGAACTGGATCTAAGTGTGGATCTTAACGCAGCT AGTGCTGCAGAGGAGGAATGATGGAAAATATTGCAAGCTCTGTCTCTCTCTGTTAGTCACCAAATGATGT AACCGGTTCTCTTTCTCCCTCTTCTTAAAAGTTGTCTCACCAAATGTTCTGTTAAAATACTAAATCAAAC CGATCTCATCATGCGTACCTATTCCCGGTTATCGCAGTCTGTTTTTTTCTTCTCAAAAAACTAAAATGTT GGATTTCGTGGTTTT >gi|3450165|gb|AI100204.1|AI100204 34579 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108N1XP 3', mRNA sequence CCTGCCNGAGGAAGAGTTTTCCCCGCANGAGTAGAGATCGTGACAGCACNATGACCACCGAGANCATGAC AGAAACTATAATCAGTCACGTGGCTATGACTCAAGAAGCCGGCGCANTTCACGGTCCCGNTCTAGGGAAA GACCGAGGGATCATGATCGCCGCAGACGCCATGACCGCTACTAAANCCCTGCCAAAGATGGTTGCACCTG GTTTAAGAGGTTCTTACAGATGCGTTTAGGATCTATTTGGAGTTACAAACACTTTCTTTTTTCTTTGCTC AAGTGTTTTAAGGATTTTTGAGATTGTAACTTACTTTAAGTTTGTAAGAGGAGCTTCTTCAGAT >gi|3450164|gb|AI100203.1|AI100203 34578 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108N12XP 3', mRNA sequence CCGTTGANTTCCCCCNTGGAATTCCGTTCGATTAACCCGGTGGTTNTGGTTAANGCTCCTCCGGAGGGAG AGTNTCCGGAGAGGTGGAGAAGAGTTTTCCAGGAAGCTAAGGAGACATGCGCTGATGATCCGGTGAGCGG GGAGTGTGTACCCGGCTTGGGACGAGGTGGAGGAGCTGAGTNCGGCGGCGAGTCATGCTAGGGACAAGAA GAAAGCTGGTGGCTCCGATCCTTTGGAAGAGTATTGCAATGATAATCCTGAGACTGATGAGTGTCGTACT TATGATAATTAAAAAATATGTTTTTGATGTTCGAATTATGAAACTTTAGGTATGGATCAATGTTTGTTCT TCTTGTCCCTTGTTGTTATGTTTGTGTTTTTGGTTTGGTTGATGATTGTAATGTGATAAATGAATATGAA TAGTACAATACAC >gi|3450163|gb|AI100202.1|AI100202 34577 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108M8XP 3', mRNA sequence CTGCANTGGAGNAAGTTCGGAAGTANCCAGGAGTCATNAGTCACAATCTCCACTGGTGGTGGAGCCAGCT TGGAGCTGTTGGAAGGAAAAGTACTTCCCGGTGTGATCGCCCTTGATGAAGCAATCCCAGTCACTGTTTA GAAACTCTNACCATCTATAAGGCAAACGTTGTATACTTAAAAGAGTTTCTTTCGCTTTAAATCTACCTAT GCAAAACTTTACTATGTATCAGAGTCTCATTCCCCNGAAANGAAAACTCACATATTAAAATT >gi|3450162|gb|AI100201.1|AI100201 34576 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108M6XP 3', mRNA sequence CGATCAGTCTAGCAGGTTGTGATGAATTTGNGGGNTAAGTTGAAGGNGCTCGAGAGTTTTTTGCACCCCG NTCATAGCAAAGATGTCCCAAGGCGGTGAAGCTGNTGGTCCCAGCTGCAGGAGGAATGGACGAGGATGTN CCCCCTTCTGCCGGAGGTGCAGNCCCCAAGATTGAGGAAGTCGACTAATAACTTTCTCTCTTACTCTCAG TCTTTGTGTTTGTATTTCAACATTTNCCTGTTTTGNCCCCTAGTTTTTGTTTTTTTTTTCTTTCTTGTAT TGACTCTATTTTGGGGGCTCGNTTCTTTCGATGAGCTCCTTATTTTTTTTAATCTATANCAGGAATGTTT TGATT >gi|3450161|gb|AI100200.1|AI100200 34575 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108M20XP 3', mRNA sequence GAACNCCTTAGNCNTGGGTAAATTGATTNAGGGGGAGAGGANTGAAGAATGACCAGGAGTGAAAAGGCAA GCGAGNTTCGAAGTTGCAGCANCAGCTCGATGATGATGATCACTTAACGCCAGCAGAAAGGCGATACATA GAGCAGAAACAAAGATTGGATGTGCAGAAGCTAGCTAAGGAAGCGAACAAGTCTCACCGTAACAGGATTG AGGATTTCAATCAGTATCTGGCTAACATGAGTGAGCACTACGATATCCCTAAAGTCGGACCTGGTTAATA TAATTCTTTCTTGTCTTTGTTTTACTCTGCTTATCTATTTTGCATCGTTAAACGACTACTTTGGATGTCT GTTATGTTTAGTCCCTTTAACTTTTGAATGATGTGATCGCAAATCTGTAATGTCAAAAACACATTTTCTT GG >gi|3450160|gb|AI100199.1|AI100199 34574 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108M12XP 3', mRNA sequence CAAAGNGGCTGNCGAAATTCCCCCNGCCACCCAATTNNCTNCANTGGTGCTGATCCCCTTGATTCCGTGG AGGTTAGTTATGGGATTAGAGGAAGAGTTTGGGGATTGAAATGGCGGAGGAGAAAGCACAGTCTATCGCC CACAGTTGAGCAAGCAGCTGCACTCATTGAGGAGCTCTTGTTGGAAAAGGCCAAGTAGAAAATCCTTTAC TACATTAGCAAAAACGAAAAAAACCAAAACCCAAACCACTATCTTCTTATTGTTTGGTTAGCTAGAGAGC AATTGTGTCCGTTGAGATTTTATGCTATTTTCGGATAATTATTACAAGGCTTGTATTTTAATATTTACTT TCGTCTGAAACATTTTACTTTCACCTTTAAAATATTAGTACTTTCTGGT >gi|3450159|gb|AI100198.1|AI100198 34573 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108L21XP 3', mRNA sequence TGTGTTCNAGAAGANTCTTCCAGAGAGCCTTCAATGGNTGACATTCTTGTGATGATGANCAGTTCACTGT TACTTTACCGATTCCAAAGCGATCTGGGTTTCTTCTTCGANCCATGAAAGACTCTAGAGATCCNCGCTCA GGAGGTTCTGCTTCTGATCACTCTGCAACAAGCAAGTCTTTGCCTTTGTCTGTTGACGATTCTTCCATCA CTATAGTTTATCCTCGTTGACTTCAACAATTAGTTCCAGTAATGTTATGTTGTAACTTGTAACTATGTGA AACAAAGCAAAAACTTATTT >gi|3450158|gb|AI100197.1|AI100197 34572 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108K7XP 3', mRNA sequence GCTTCCGCCTCCCCAAGGGNCANGACCCGTCTTCCGGCTNGCCCCATTTTGGCATGGCCCGCGCTTGGAC CCCNGGCNAACTGGTTAGNNCGAGAAATTATGGATTTCGTGAAGAGCTCGAGTCGTCATGTGTAACACTG TTGAGACAGGGAAATGACCCAAGGATCTTGCCCTTTTAATCCATGGTCCCAAGGTGAGTAGGGATTTGTT TTTGNACACGGAAGAGTTCATTGATGCAGTAGCCTCCAAGCTCAAAACACAGTTCAAAGAGCTTCCTCTT GTCTGACCATTCCTGGGAATTGGGAACAATACAAAAATAATGCTCGCAATAATTCATAACCCAACACAAA ACAAAAATAATATTGGCGGGTTTATATGAATATTTTGGTTGGAAATAAACGTTTTTGCTTAATTTTTCCA ATTTATTTTAAAAATTTGAGTGAC >gi|3450157|gb|AI100196.1|AI100196 34571 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108K18XP 3', mRNA sequence CCGTNCTTAAAGGCCNTCGTTGAAATCGAACCCGCGGCTNGTCTCGGCACTACCCTCAAGCTCAAAGCTC TTGNCCNTCATCTTTTATGTCCCTGTTGCTCTTCAGCTTCNCCTTACCTGTGGCAAAAATCCACTCCGGG CTACACTTGTTCCATATGATAAACTCACTCCACTTATAAAGGATGCTTTGGAGAAAAAAGTGAGAAGAGA ATGGCAGAGCTCCAATCTTNCCTGTCTTGGTTTACCAAATACATCATATCAAATCCTATCCCTTTGATTC TTTCCTCTATCGTTCCCTTATGCTTGTATCATTAATTAATGTGTGCTTTTTAGATTAATGATTCTTCTCT TGTATTAAAGTATGATTTGAAATCCT >gi|3450156|gb|AI100195.1|AI100195 34570 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108K14XP 3', mRNA sequence CCTTAAGGGGCTGCCGAATTNCGCTTCCCNCCAAATTCTCCCCTTGNGCTGATCCCCTTGATCCGTGGAG TTGTGATGGGACCTAGGGGAAGAGTCCGGGATNGAAATGNCGGAGGAGAAAGCCNCAGTCAATCGCCCAC AGTTGAGCCAAGCANTGCGCTCATTGAGGAGCTCTTGTTTGAAAAGGCCAAGTAGAATATCTTTATTACA TTAGCAAAAACGAAAAAAATCAAAACCCAAACCACTATCTTATTGTTTCGTTAGCTAGAGAGCAATTGTG TCTGTTGAAAGATTTTATGTTATTTTGGGGAAATTATTACAAGGCTTGTATCTGACTTTTATCTTTCTTC TAAAACATTTTACTTTCAGCCTTCATCAAACTCTCTTACGAAACTTATGTAGTCTCATTTCCTAAATAAA GATGTTTTTCCCT >gi|3450155|gb|AI100194.1|AI100194 34569 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108K12XP 3', mRNA sequence TCCTCCCNCCGTCTTGGCTGCAGCCAGTGACCTGAATCTGGATGGAGGNAATTCCCCGGAGATGATCCAG AAGTGAGCATGTTGCTGAGCAGCTGTCAAGACCATTCCAGCCAGAGGTCTAACTCCTTGTTCCCTTATGA ACTTCTGGAGGTTGTGCATGCTAAAGCTGAGGTAACCGGCGAGGCTGCAAAATACAACATGCTACTGAAG TTGAAGAGGGGAGAAAAAGAGGAAAAGTTCAAGGTGGAAGTTCACAAGAACCATGAAGGTGCTCTTCATC TCAACCACGCGGAGCAACACCATGACTAGTCCCTCTCCTTTGTTTATGTACTTTTGAGTGTTTACTTACT CTGTAAGATATTTTAACTTCTGATGTAAAACTCTAAAACCTTAAATAACAAATCAGGAGAATAAATTAAG TTTCAT >gi|3450154|gb|AI100193.1|AI100193 34568 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108K11XP 3', mRNA sequence CCCTGGGTCCATCACTCCCTGTCAGAGGTTTCCCGNTAAGCCCCCGTTCTTCNAGTTCCGNTTTNGANCC CGTAATTTTCGGGCGGCAATCCAATCCTTAAGCCGCTCCAAACTTGAATATGGCCCTTCCGGTTGCGGAG CCCAATCTGTTTCTGCTTGAGAAGAATGAAGANCCAACAAAAGAAATTATCCCAACTTCTTGGATCTTAT TGGCAAAACTACAAATCAAGGTACATGATATTCACTTTCCTATGTGTTATTGGCGTAATCCCAACTCCTA TAAAACTTATAAGCGCAAAAATAGTATATAACATGTCCAATTCACCCCGGAATGTTAATCTCAAGGAATT GTATTGGCTACTAAATTGTTTTCCATTTTCCTTGTTATTAGCTTCAAAAATAGATTGTGAAACGAAGATT TAACATT >gi|3450153|gb|AI100192.1|AI100192 34567 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108K10XP 3', mRNA sequence AAATCTTCTCCGGCGGTGCAACCCGGTCCCCNGCAATNCGGGCTCCCTCTTCNCCAAGNTTGTTGCCATG GGNGGCAGATCCAATGNGCTGGNGCAAAGCATCAATGATCTAAGGGCCGAGATGGGAGTAGAAGGCCACT CCTCCTCCAGCCTCCAAATCAGGCGNTGANCCCCAAAACACCGGCTAGTTCCTCTTAAAAAGGAATGTGG TGTTCATTGACATGTCCGAAGGAAAAAGAAAAACTATGAAATATGTTAAGAGCAGTATTACTTTTAAAAT TCCTGTTTTAAGAAACGAGTTTGTTGTTTATTAAAGTTCATCAAATAGATTGATGATGTGGTGCATTACA TTATTCTCCACCTATGAATTGCATTTCTATTTTGGTCTTGAGAGAACTAAGAAGTCTTCTTATGCTCCTA T >gi|3450152|gb|AI100191.1|AI100191 34566 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108J24XP 3', mRNA sequence CCATTTGGTNATCCGGGAAGGTAGTGNCAGTATTGNATNTGNTGTACCAAAGTCGAAGCTGAAGGAATCC AGAGTGGAACTCCTAAGAGTAAAGTGTTGATTGTAGNCANTGGTGAGCTTCCCCTGTAACTCAACAACTC TAGTTNTCTCCATCTGATCATCCATTGATGTGAGCTCTAGTGTGCTTGATGACTTTTGTGTTAAAACGAG TGTCTTGGTTACTTTATGAAAGATTCTACCGGCTTTATTTCTTTCGTCTGCTTTCTAGCTCGAGCTATGT CTGACTTTATACACAAATGTCTTTCAGTAGCAAAAATTCTGCACTTATGCCGTTTTGCATTGTCAACATT TGTAGAATTTATAGAAGTTACACGATAATATAT >gi|3450151|gb|AI100190.1|AI100190 34565 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108J1XP 3', mRNA sequence GCAACATACTTTCTTCTCNTCTGTTTCCCAAGAAACTTGGGAAGTTAAATCCGTTTAAAAATGGGTCTAA GGATACTCGCACATAGNTGAAGATCTTGGAGGTGTTGACATTACTAAGCCAAGGAGNCGAAGATTCNCAA TCTCTTAAAAGAAACCGTTTGATCTAAGTGCTTTTGNGTGTTGTGTATAACTCTTTTAGACTAGTGTGCT TATTGTTCCCTTCTTGATGCGTGATTTTTTTTTTTGGGTGTGTGTGTTTATTGTTTAATGNGCTTGGTTA ATAAAATGAAAATCGAANCCAGATTGATTTNCT >gi|3450150|gb|AI100189.1|AI100189 34564 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108I1XP 3', mRNA sequence CCCTTTTTNGGCAGAATTCCATTGGGAACCCATCCGGGTCGGGGAANCCGGAATTCTNTTTGGCGNTCAC GATCNATATNCCCAGTATTTCGAGACCTTTNGAGAAGGAAAAAGCCAGTGAACTCGGCTTCTTCGGGTTC TAAGTTAGCTTAAAGAAGGTGTAAACTTTGCCTGAGGCAAAAAAGCAGAGCAGAAGAGGCTTTAGCTTCT GTGCCCACCTCAAACACAGACAATTTGTGGTGGCACTTGGGTTAGACTACTTTTTTTTGTTGTTGTTGAA ACGAAATTTTCTCTTTAGTCATTTATGTTTTTTTGTTACTTTTTACAAGTTAAAAAACTTATGTGATAGA CGCT >gi|3450149|gb|AI100188.1|AI100188 34563 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108I19XP 3', mRNA sequence GGGGTTCCATGCTCGTACCCTCNGAAGAGTGCAGCATCAGCGGTCTAAATGCATGGTGNCCATCTAAACT GACAAAGAGGATACCATAGCTGAGGAAGAAGATAATGAAACAGTTGCAGAGCTTACTGATAAAGTTGCTT CTCTTCACAATTCTTAAAAATGATTTAGTTATTTTTTTTCTTTTCTTTTCTTTTTTCACGAAAGTTTTCT GGTGAAAAGAAATTGGTTTCTCCATTCATCCACATCTATCTTCGTGGTTGGGTTTGATTTGTTGTATTTA ATAGTTTTGGGGGTTTGATGAAACTTTAAATAAAAACATCGATCTCCATGTAATTTTTTTGTTTCTCTCT TTTCTTTAAACACTCATATTTTGAAATTATTTATATACT >gi|3450148|gb|AI100187.1|AI100187 34562 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108I11XP 3', mRNA sequence CGGTTCTCGGCCTTGTTCCCCCNTAGACCTGGATTGCTCTACTNTGNACCAACCACGGGNAGNTCCACAG AATTTGGCATGGCCCCGTCACAGCGCCAAGCAGATCTCCCCACATCCCTTCACCACTGGAGGAAGAGCTC GAAACAAATCCCATTATGCGTGTTGATAAGCCCAGAGATACAGGAGAAACTCGGTTGCAAGTCGCCAATT GATACAATGAGGGAAGTTCGGAACAAGAAGGATCAGTGGAGGGGATGATGATAAATGGAGAGCTTCTTGC CTATGTTTTGTGTACTTGTGTTGAATGATCCTGTAAAAGGTGTATGAACCAGTAATGTTGATATTCTGTG TGAAACTGTGAACCGGTTTGGTAAACCGAAATCAGACCGACCTGTAAGCCGTACTCCCTTTTTGAATTTT CAGTTTACTATGGATAAT >gi|3450147|gb|AI100186.1|AI100186 34561 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108I10XP 3', mRNA sequence TTNCCCACATTCCTCTGATGCGNGCTTGAACCNTTGGGCCATTCGCAGATCATCTTTGGCAAGTAATATC CGGGATACCCCGCAGGAGAGTATGTTGAACAAGGACTCTCGGTCATCAATCTCAAAGGAAATAAGGGATC TTCATAGTTTCAGTGTTCAGCCGTGAACCAGTTGCATTCATGGGTCGACAAATATTTCCTACTTCCTGCT GATTCTGAAGTTTTGAAATCTTTGCTTTTGTTAAAGCAACAGATGTTGATGAACTCAGAATTTGGTTGAA TTTAGGACTTGTATTTGTTTCATTTGAACCGGTGTAAACTTTTTTATTGGTCAACTACAAAGAAGAATAA AAAGCAATAGTTATGCCGTTCCCTTGT >gi|3450146|gb|AI100185.1|AI100185 34560 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108H7XP 3', mRNA sequence TAGGGAAAAGCTGGTACCCCTTCCAGGTNCCCGGTCCCGGATTTCCCGGTTCGACCCCACGCGTCCNGAG AGGTTCTACCCAAAACACTCGGAAACTTTGTTAAGGCGACATTCGATTGCTTACAGAAGACATATGGGTT CCTTACACCAGAGTTCTGGAAAGAGACTAGATTCTTCCAGATCGCCCTACCAAGAGCACACTGATTTCCT GTCGACTAAGGCTCTTCAGGCCGCCAAAGTTGTCACCGAGGGTGAAGAACAAGCTTAAGACCTTCATGAG ATGAGCTTGGTTTTATAGGTTCTGGTTGTGGCAAATATCTTTATCTTTTCTGGTCATGTTTCTTGGTTGT CTTATCAGTTTTTGATATTGGAGATTTAATTACAAGGATAATCATATTTAGTTATGTTTGGGTT >gi|3450145|gb|AI100184.1|AI100184 34559 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108G21XP 3', mRNA sequence TTCCTGACCCNAGGTTGGTTNTACNGCTTCNATCTGGGGCCTGTCCAGGACCTCTGTGTTAGAAATGGTT GCCGCTTTGAAAAAGCTTCCCGGCAAGAAAATCCCGATTAAGCTCTGTCCCGAGAAGGTCAGGAGATGCC AACAGCCAGTTTATGCTTCAACAGAGAAGGCTGAGAAAGAACTTGGCTGGAAGGCAAAATATGGAGTGGA TGAGATGTGCAGAGATCAGTGGAAATGGGCAAACAATAATCCATGGGGTTACCAGAATAAGCTTTGAATT TACTTCTTTTGTTTGGAGTTACCATTTCTAATTACTCAAATCTAAAAGAAAGAAATATACATACATATGA TGATATAGTTGTGCTTTATATTCCACATGTATCGAACTGATCTCTTACTTCGATGAATAAAATGGAAAGT TGATTT >gi|3450144|gb|AI100183.1|AI100183 34558 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108F4XP 3', mRNA sequence GTTCCGGAGCGACAATCCTGAATGGGCCGATTGGNTGGNAGGCNAATAGGTCTCAGAGCTGAGCTAGGCC ACCAAGGNGCCAATTGGGGCGGTCACACTCTTTCCATATCTCCAAAAAATGCAAATTCTGGNANGGTCTT TGAACCATATANGGTTNGTGGAAAATGGCGGTTTCCAGACAGTAACTAAAACTCACTGCTGGTGCCACGC TAGGCTTTATCCGCCTTTGATGCATGAAGGTCGTTAACGAATGGTCTTTTTTTGANAAAGATNACAATTA GATTAANNCANAGAACCCATGTTTCTTGTCTGTTCGAATCCTGCGAGATTGGTTGTAGTTGAAGTTNCAT TTTCTTCTTGTCTTTTTTGTTGGTATTTTGACACAATTTGGCTTTTTGGCATATGAGAGTGACTGTNCCA GTCTGTTTT >gi|3450143|gb|AI100182.1|AI100182 34557 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108F10XP 3', mRNA sequence ATTTCCGGNAATTCCGGATTTTATGCGGGGTCAGACGGGTTTACCNCCNCTTGATNATTAAACGGAGACC AGCGCCATGGGGAAGANTCCATTACTCCAGGGATTCTTTTCCCTCTACATTGGCTGGATGGATTGGGTGG GTTGGAAGAAGCTACTTAATAGCTATTAGTGGTGAGAAGAAACCCGCGATGAAAGAGATCATCATCGATG TTCCTTTGGCTAGTCGGATCATCTTCCGTGGTTTCATTTGGCCCGTTGCTGCCTACAGAGAGTTTCTCAA TGGTGATCTCATTGCTAAGGATGTTTAAAAAGGGAACTTGTTTTCTGCTTTTGTGTTACTCTCTCTAATC TCTTTGTTTTCCATTGTACTTATTGAAAAACAATGCATTGTCGAAAACCTTATAAAATTTGGATTGCGCA >gi|3450142|gb|AI100181.1|AI100181 34556 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108D19XP 3', mRNA sequence GCTTTTTAACCGGNGTTTTTGATGGAACTTCGGGACCAACCCTANCCCTTGTTTNTTNTGGNCGGGTATG GAACCCGAGAATGGTCGTGACTACTGGATGTGAAAAAACTCGAGGGGNCGACACATGGGGGGAAGCTGGC TACCATGAAGATGGCTCGCAACATTGCCCAATCCCAAGAGGCCCTATGTGGCATCGCAATGCGAGCTTCA TACCCTCTCAAGAACTCGTTTTCTACGGATAAAGTTTCGGTTGCCTAATAATATGAACTAAATGTATGCC ATGGAACGGATCGGTTAAGCCATTATCGTTATTCGACTTTGAAGGAAACTAAAAAGTAATGTGGTCGATT GGTTTGGTTTTGTTATATATTATGCATTTGTATGGGGGTCAGTCAATGTTTGAACTTTGTATAATATTTC TTTGGGTCTAGTGATAAATATTTTCCCTTTTGCG >gi|3450141|gb|AI100180.1|AI100180 34555 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108C7XP 3', mRNA sequence ATCCCTTGTTTGGAATTCGTNTTGGANCACGGNTTGTGTTCCGTGAGCACGGNAACCCTCCCGNNTACTA TGATGGACGGTANTGGACAATGTGGAAGCTTCCNTTGTTCGGATGCACCGACTCCGCTCAAGTGTTGAAG GAAGTTGAAGAATGCAAGAAGGAGTACCCTGGCGCCTTCATTAGGATCATCGGATTTCGACAACACCCGT CAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATCCCCTTTCTGGA ATATTCAGCGTTGATTATTCTGGAACCCATTTCTATGTGGTCAATNCAAATTTAAGAAATTATTTGCCGA CTTAAAAGTTGAGGAACTATTGTTTGAAAGTGAAAATGTTATTCCTATCAGTTTCTCTATAATTATAGTT ACCATTTCATTTC >gi|3450140|gb|AI100179.1|AI100179 34554 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108C4XP 3', mRNA sequence CCTTACCACGGNTTAGGANGTTCCCCNAGNGTGCTTAGCCGACNTTTNAGGACCTCCTTGAAAGANCCNG CANCCTTTTNAAGTTGCTAAGCCAAAGNGGGAAGCTGTGTTCAAGAGNTAAGACTTGGGATGAGTTTATC CAAGCTCTTAACGAAAGAAACTCATTTTGGCTCCCTGGTGTGATGAAGAGGAAGTGGAAAGAGATGTTAA GGCACGTACGAAAGGTGAAACAGGAGCAGCTAAAACCCTTTGTTCTCCATTTGATCAGCCTGAACTCCCT GAAGGCACTCTCTGCTTTGCTTCAGGAAAACCTGCAAAGAAATGGACCTATTGGGGCAGGAGTTACTAAG TGTTCATCATGTTTTGATTCAATTCATGAAAATTTACTTTTGGCTTGTAAAGACTCTCTCAAGTGCATTG TGCTTTGATCTGATATTTTGACCAAAAGCTATTTGAGTTATTTTGACTGTGATTGCACTAAGAATTATAA AGAGTTGTTTGATTC >gi|3450139|gb|AI100178.1|AI100178 34553 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108C1XP 3', mRNA sequence CACAGGTTCCCCCGAACCATCCGTATGGTGTCNTCCNCCTGGAGGCCCCATTTTCCAAGGCTNCCTNAGG NGAATTGCCGNGATTATGAGGTTAGGNCCCCAATGCTNCTTCTGTTCCATTCCNGACTCACTTTGGAGGT GGTAAATCTTCTGGATATGGTTTGATCTATGATACTGTCGAGAACGCTAAGAAGTTTGAGCCCTAAGTAC AGACTTATCAGGAATGGGACTTGACCACCAAGATTGAGAAATCCAAGGAAACAGATCCAAGGAGAGGAAG AACAGGGCGAAGAAGATCCCGTGGTGTTAAGAAGACCAAGGCTGGTGATGCCAAGAAGAAGTAAGACGTT TGAAGAGGACAGAAGCAGCAATATGGTTTTTGTTCTGCATCACTCCTTTGAAGCCATGTTTGCTATTAGA CATCTTCTAATTATTTCTCGATTTTGTGCTTCTTTTTGTCACACTTGCTCTATTTTGGTTTGGATCTTGT TTTAGAGAAACATGTGGTTAAGATTTTGTTTGAATACATTGATTTTAAACTT >gi|3450138|gb|AI100177.1|AI100177 34552 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108C10XP 3', mRNA sequence CCTCGTTTTGGTAGGCTTGGAAGCACATGGCACACCGTACTGGGCCCTCACGCTCTCATGGGTGCCAGTT GTCTCTGCATTGCCCCGAAAGCGTTTTTGGAATCCATTTAACATCAAGAGATGCCTCCAGATCCGGAAGA AGGGTCTCCAAAAAGACTCCATGAAGAAAGAATGAATCTTCCAGGTTTAAGTTACTACCAAGAATTTCCT TCTTCTGAAGTTGTTGGTTTCTTGAAAAGCTTCTGTTCTGAATCTTTTGTAAGACTTGTACTCTTTAGTT TTCTAAGTTTTTTATATTTTAAGATTAAAAACCCTAACGTACACGAATAATTTACTTCCTCTGTTTCTAT TTATTAATTTAAGCAGTGTTGTATTGAATGTGTTTTTGCT >gi|3450137|gb|AI100176.1|AI100176 34551 Lambda-PRL2 Arabidopsis thaliana cDNA clone 108A22XP 3', mRNA sequence CTACCCCACNGTGTGGCCCCNCATCATCTGTGCCGGATCNCCCGNNCNNGCTTCGGGGNCTTNCATGGCC TATGACCCTNTAGGCCCAGCTATGGATGGTATTTGCCGGCTTATATGGAAAGGAAGTTGAAGGAAATTAC CCCCTCTCTCAGAAATATTAGCTATGACCATTGCTGACCCTTTACAATTTTATTGATGGTCTTGCTGACT TGAGCGCTTTGGTCTATGACCCACTCGATAAGTGCATATCTGCCATATGACAGGCAATGGATTAAGCAGA AGGCATTTCACCATCTGAAGAGAATTGCCAATGGAGGCAGATGAAGAAGAAGCATCATATGAAATTGTCT TACCTGAAGAAACATATGTTGAGAGAGGCCATTTAAAGCATCATCACTCGTTATTATATATATTTGCCAA TGTAACATTAATTAATATGCATAGAAAGAGTTGTGGTTCTCTTGGATGTGTTAGCCACTAAAAGTATCTT TGCTATCC >gi|3450136|gb|AI100175.1|AI100175 34550 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107O1XP 3', mRNA sequence TTTTTTCGGGCTTGAGAGTTTAAANAACCTGGGATCCGGGACTCCCCTTTTGGNGNCNCTGCATACTGGA GCACGCTNCCAAGCTAGAGCCCCAGCGATCCCTTTGGATGTCATCTTGCTTTGGTAAGTTTTGGTGCTTG CAAGCTTCTAAGTCCAGAAAATGCCCAAGGCTCAATGTCGAAGTCATTGATGAACATCCTCCAGAGTCAA GACCTGAGAGCTCTCCAGTTGAGAGGATATACATATACAGAACAGTCGCAGGACCGAGAATGGATACGCC TGAATTTGTGTGGACGATACACAAGAATCCTGAGAATGGAGTTTCACATCTAGCCATAAAGTAAACTTGC TGCTTCAGTCATATTTTCCTTTCCATCTTCAGTTTTTGCAGACATTGTTGTGGGAGAGATTCACCTTCCA TTTNTTCCCTTTCATATTGTTTTTACTNANATATTAGAATATCAGTGATAGAAGC >gi|3450135|gb|AI100174.1|AI100174 34549 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107N1XP 3', mRNA sequence CCGAATTTGGGCTTGGAAATCCAGGGGTCCCTTCTTTCCGCGGTTCNAACCGTGGGTCCCCGGGGAAGAA NCGACCTGGGGNGGGAGGTTTAAAATGTTAGTGAAAAAATGGTGGGACCATTACGACGACGAATCNTGGA TACCAAGAAACCTGTTACCGTTGTGGACACAGAGTCGATCTCGTGAATCTGAAGCCGTTCATCACCGCTC TTACTGAAGCTGGCCGGCTCAACTACGTGACCGCACCGTCCGCTGCTTGAATGTTGCCAGGAGTTAAAAT TGTCGGTGGATCAGGTAGTTATTTTTCTTTCCGGTCAGTAAGAGGTTGGGGATTATGTGTCGGGTCGACA ACCACACATACTGTCTCTGGTTCCAATGCTTTGGACGTTGACATGTGATTTGCTTTACTTTTTTGTCTAT AATGTGTGTTATCCTCAATTTTAGCGTCTATCTTCGAATATCAAACTTGAGTGACAAAATAAATATTCCA AAT >gi|3450134|gb|AI100173.1|AI100173 34548 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107N19XP 3', mRNA sequence CCCTTGCAATCTTGCAACCCCCGTCNTTCAAGNCCCNACTGGTTCTTGACNGGCANNAGTTTCCAAAGTT GGNCAGTTATTCTCAAGTTNTCCTCCAATNCTCTGGACATGAAGCTGAGAGATGATCTTGGAACGTCTCA AGAAGATCAGAAACCACCGTGGTTTGGAGGCATTACTGGGGTCTCCGTGTCAGAGGACAACACACCAAGA CTACTGGTCGCAGAGGAAAGACTGTTGGTGTCTCAAAGAAGCGTTAAGAAAGATCCAATGTTGCTACTTA CTTCTGTATTGGATACTTCATAAGGACCTGTTTTTATTTCGTACTAGGACCTTTTTGTGTGACGCTTTTC GAGCTTTTTGTGATCACATTCCTCTGTTTTTCATTCTTGATCCCTCCAGTTTCCCTGAATAGTCTTATTT ATTTTAATTTCCAGCTT >gi|3450133|gb|AI100172.1|AI100172 34547 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107M22XP 3', mRNA sequence CCGGGATAACGCGTTGGAGGAGGAGGGAGTAGTAATCAGATGTTTCCCGCTACCAGGATATGTTCATNTA CATNCAGAAGCCCTTACTAGAAGGGAATTCCTTTCCTGCCGCCGAAACGCAACGCAAAACGACCCTCGTT TTTGCGTTTATGGCAACACGAGACCGTTTTATATGGTCAATGAGTGTGCCGATTCGGCCATTAGATTTCT GTTCAGTCTTCGTTTATTCTATAGNCCGTCCGATTTCAGATCATCCCTAATCGGACGGTGGTCGTTGGAT GTATCAGTAGTGTATTACTGTGTTAGGTAGAAGAAAATCCACTTGTTCTTAAATTGGCATAAAAGTCAGA AGCTAATATTTATATGTGCCGCAATCAATTTAATATTTTCTGTCT >gi|3450132|gb|AI100171.1|AI100171 34546 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107M17XP 3', mRNA sequence ACCCACCATGAGCTTTCTCAGCCTTGGGACCCGGTGATTGTCCNCGAGAGCGGTTTAGAGAGNCCATTGG NCCATGCCCTTCGTGCATCTACAAGGATCCCACTAGATGGTTGCCCAGCTTCTGTGGAAGCCCAAGTACT GTGCCCACACAAGGCCGCATGCCCTGGGATCAGAAAGAGTTCCGTGACCTTGACGCTGAACAATGGCGTC GTCTCAAATGGGTTCGTATGAAGTGGACCATCTACAACTACTGTACCGACCGGACTAGGTTCCCGGTTAT GCCAGCTGAATGTAAAAGGGACAGAGACGCATAAGTTACTACCCTTGAGGGTTTTAATGAATTTATGCTA TCATTATTATTTGAATTATGCTTGTTCAAGAGATTGATATATGTATTGTTTGTTGGCCCATGATGTTTAT GCTATATTTGGGCCTAAAATTACATGTTATAATTCATATATGTATTGATT >gi|3450131|gb|AI100170.1|AI100170 34545 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107L1XP 3', mRNA sequence CTCATCTTCAGGTGCTAAGCCAGTTCNCCCGATATCGGAAATCTCCAGCAAAGCGATGGGGATCTGAACA GTTTCCATAACGATATCTTCGAGAAGCTTGCTCAAGAGGCGTCGANGCTTGCGAGGTACAATAAGAAACC TACGATCACTTCTCGGGAGATTCAGACTGCTGTGAGATTGGTGCTTCCTGGAGAGTTGGCGAAGCATGCC GTTTCTGAGGGGACTAAAGCCGTCACGAAATTCACCAGCTCTTGAATAATTGAGTTAGGGTTCTTATCAT ATGGATGTTGCTCTGCTTTAGGGTTAATGGAATTTGGAAGATCTGAGTTAGGGTTTTAGAATGTCCTTTA AGTATCTCTGTTTCGTTTGGAATTTCTACGTTTTGTAAGTACTGCTGCTATTGATAATGTTTGGAGTCTA TATTTGCTCTTTGTGTCCC >gi|3450130|gb|AI100169.1|AI100169 34544 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107K20XP 3', mRNA sequence CCGTTTTGACTGAGTGGGNCGAGTTTAAGTCGTANGTTNCCCAGAGGTTTTCGACAACTGCCAGAAACCG GCTTTATCCTCGACGGAAGAAACCATTATGAATGTTAACAAGTTAAGAGAGATTGGTNTCATTGTTTACT CCATTGGTAAGCCACTTGACCCATGGCTCAAGGACATGCCTGCCTTTGTCTAATCACAAGGCAAAACCTG GTTGATTCTTGTNTCTTACTTTCATTGTTTGTGCTTTTTTGCTTTCGCTTTCATATAAATTTTAGTCTCA AGATTCGATTTGTGAAGTCTTGAAGAGTTGTTTCTTACATTTTACAATGTGTTTCTTATGCTA >gi|3450129|gb|AI100168.1|AI100168 34543 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107J2XP 3', mRNA sequence CCCAGCTCAACCCNTTATATCCCNAAATTTCCCACAAATCAAATNTCCNTNANTTTCCNAATTTCTATCC CCNAACAACTTCCCATTCAATTTTCCCACCAGCATTTCCAACAATCCCATTCTTCNCTCCACCACCTTCC AAATGAGAAGCTAATTAAGCTCTATAGCTAGCTACTGCCACACAACACATGACCACGATACCATCTATCT ATTGTTTGCATATTATGTGTTGTAAACTTGTAATGTTTTTTATTCTTTTTTTTNTCTAAGTTTGTTATTC TTTTACTGTCGTTTGATGTTATCCTTGTTGTTGATGTTGTTTTCTTTTAATCAGTTGTTTTTGTAATATA TACAGCTTATTCTT >gi|3450128|gb|AI100167.1|AI100167 34542 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107J19XP 3', mRNA sequence AGCAATCTTGGGCTGATAACCCCTNCTCTGTGCCNTGCANTGACAATCGNTTCAGAACCCTAGGGACCCT CTCAGGACTGTACCAGTGAAACCCTTGCCCCACGGATATCCTCAGTTATTGACCGCGACTGGTTCTGCTT CTAAGCCAATGGGNTCCATTGAGGAGTATGATACGCCAGTGAGATTACTGGAGGGATAAGTCTTCCTCTT TTTCTAAGCTTGTGGCTGAGTACACCTCAAGATCTAGTTCCAGTTTCGATTGAAGCAAAGACTCTGCTAT TTTCCTGCTGATGATGACGATGAAGAAAAACTTAGGATGTCTGAATCTGGTTTAGCCACAACACTAGCTG GATTATGATTCACACAAGAAGAAACACTATCTTTTGTTAAAAGCTTTTGTTCTTAGTTTATAGCTTCTAC TACTGTTGAACCCCTAAAAACGATTATTCTACATCGCTAGTTTCAAATCAATGCAATAAAAGATTGTTC >gi|3450127|gb|AI100166.1|AI100166 34541 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107I4XP 3', mRNA sequence AATACTCCAACGTCTTTTTAGCGTCAAAAAGGAGGTGGGATGATNATGTTAGTATTCAAAANCCAGNCAC GTGGTGAAATGAANGCTCCTAAGCNCTNCATCAATGATACAATCAGGAATGACTTCCACAGNAANTTCCT GCNTAGATACATGAAGTGATTGTTTGTCAAGAGTGTTATTGCTACTTCTTTGTATGATGATTNTGACTAA AAGCTTTTATTCTGTCTGGAATTACGATGTCTNTGTACTCAAACAACAAATGTTTTTAAGCTTTATATCA AAAACTTNTGCATTTGATTTT >gi|3450126|gb|AI100165.1|AI100165 34540 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107G13XP 3', mRNA sequence AACTTGTCCCCCNTCNGGTCCCGTCCGGATTCCCGGTNGCCCCNAGGGTCCATCGNTGGGCCATGGACCC CCGGNAACCNGTCCCGGTGCTTTGACCATTACCNTGGCCATTNGTATTCCAGGTTTGGNCCAATGATGGA GTTATTGGGAGTGCTGAACCTTAGAGTGGTCGTGAATACAAGCCAAAGGGAGATTCTCAATACCATTCTT CTTCTTCCCATCACATGAAGCCAATATTGAGCCATTGGAGGAGCTTATAAGTGAGGAAAACCCGCCTTGT TATAAAAAGTACAATTGGGGAAAGTTCTTTGTTTCAAGAAACAGAAGTGATTTCAAGAAACTCGAGGTTG AGAATATCCAGATTGATCACTTCAAGGCTTAGTTAATCACATTATAATTAAACCTTATGTTGATTTCTAT TGGTTCTTTTTATATAAGTTAGCCAAGTTCATATTTCCCC >gi|3450125|gb|AI100164.1|AI100164 34539 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107F20XP 3', mRNA sequence TTCCTGGGGNAATTTTGGGNTTNCCTCCGGTTCGGCCAGGTCCTCCGCGGGAATTTGGGGAAGGCCAAGT TTTTTTGGAAACCAAGGCAACCCCGGTGGCATNGCTTCTCTNATCGCGTGGTGCTTTAGACCCNTTCAGT TTCCTTCATTTGCTGACCCGGCTCGAAACAGCAGTGAAGAAAGTCATCGCTGAAGGAAAGTGCCGGACGA AAGATCTTGGTGGAACAAGCNCGACTCAAGAGGTCGTTGATGCGGTCATTGCAAAACTNGACTGACTTTG ACAAATTACGTGTTCCCGCTCTGCATAAATCATCAAATTCCTGATACAGATTTTGTGTTGCCAAAATATG GGGTNTGATCCAAGCNCAACGGTTATCTGGTTTTGTNCCTCGAGTTTTATTATATTCTTTANCCGTGGAA TATTTCGNTAAGAAAAAAAAACATGTTCCAAATAATTCATGTTGCTACGTTTGTTGGCGCCT >gi|3450124|gb|AI100163.1|AI100163 34538 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107E23XP 3', mRNA sequence GGAGATGTCTAGCCATGGCCCTTANCGGATAAATCTCAACCNTTTCCAGAGGCGTGTTCCNCTGTTCAGT ACAATACAGACAGTTTAATAGAGAGGTTCAAGGAACGACCCTCGAAGCATATGGTTCTTCAGCTAAGTCG AGGCTTCCGTTNCCCCCAACATCAGGCCAGTGGAATGGCATGGAGCCAAACACACTCTTACGTGTTTTGT GTTACCGTAACGACGAATCTGCCACGAGGTTTCTCAAGAAGACATATAATCTACCTAAGAAGCTTTAGTA AACTTACGGCTACTACTGCAACGTATAATAACCTCACAAGATGAAGAGTGTGTGTTCCACTTGCAGGAGG GAGCCTCCGAGATTTGTATAGTGAGTTTCATTTTTTTTGTTTTATGGTTTTTTTTCTAATACATTCCTAT ACGTACTATATAATTCATTTATATC >gi|3450123|gb|AI100162.1|AI100162 34537 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107A8XP 3', mRNA sequence TAGGTTCCNCCACCTNATCGAACCGGCGAAATCCNGGAGGTGGAAAGCCAGAAGAAGGAAGAATTGGAGC AAGGAAAGCAAAGGAGAAGGTGAACAACATGGTGCTGTTTGATCAAGCTACTTATGACAAGCTTCTCACT GAAGCTCCCAAGTTCAAGCTCATTCACCCCTTCCATTCTCTCTGACCGTATGAGGATCAATGGGTCGCTA GCAAGGAGAGCGATTAGGGAGCTAATGGCCAAAGGTGTGATCAGGATGGTCGCTGCTCACTCGAGCCAGC AGATCTACACTCGTGCCACCAACACCTAAGATGTTTGGTTTCTTTATCCACCTAAGATGTTTGGCTTCTT TTTCTTATCTCTTGTTGTTTGATTCTTCAGGAACTTGTTAGAATCTTTTGTTTCGTATTCCGTTTTTTTG AGATATATGGTTATTTAAAACGCATC >gi|3450122|gb|AI100161.1|AI100161 34536 Lambda-PRL2 Arabidopsis thaliana cDNA clone 107A4XP 3', mRNA sequence CTTAATGAAACCGNCCCACCNGCATCAAGCTTTAAGGTGGTTACCTACGCATNCTACCAGGTTCCGNTGG TATTAGTATGTTTNATGNAGCCACCNGAGAAGTGGTATTTTTCTCCNCCTTATTTTACCACGGTGGAAGT TGTACAAAGGGACGCAGCACGCCGTTCAACAATTTGCAGAGTTGTGATTTATATGTAAATAAGCTTGGGA AGGGTTTGTTATTGCNCCCCAAGAAAGAAGATGAAGAAGAAGAAGAAGCACATTGAGACTGGAGAATCTA AGTCCATGTGTAGATTCTTTTGGTAGGAGCAAAACTGGGATTAGTTTATTCTCTGAGTTTTGCTTTGAAC GTGTTTGTTGTTGCTGTTGTTGTAGTCGATACTATTAGATGAGACATTCTCTGCAATTATCTCATTGCTA AATTTATGTAATGGTTTTTCTTTCTTTCTATGGAATGAAGCATATCAGTCTTGAAGT >gi|3450121|gb|AI100160.1|AI100160 34535 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106H21XP 3', mRNA sequence GGGCATTAGGGCTTTACATGGCGGNATCTTNGACCAAATTCCGAATCCTCTACTGTCATGTGATTGAANC GAGATGAANNCAATGGGAGAAGTACATGCTTGTCCTCACACACTAATGCCGATGAGGAAACCCTTTAAGG GGACTTTTATCTCCGCAGGAGGTTTCACGAGGGAAGATGGGAATGAGGCTGTGTCAAAGGGAAGAACTGA TTTGGTGGCTTATGGTCGATGGTTTCTAGCCAACCCGGACCTGCCAAAGAGGTTCCAAGTGGATGCACCG CTGAATAAGTACGATAGACCAACGTTTTACACTTCTGATCCAGTCAGTCGTTACACCGATTACCCTTTCC TCGAATCAACAGCTTAAAATTGTTTCAATAATGTAATGTAGTGTGTTTCCCTTATATAAGATGTAATAAG TTTCTGGC >gi|3450120|gb|AI100159.1|AI100159 34534 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106H18XP 3', mRNA sequence GTTACCCCGTTCGCAACCGTTANCCAAGCGGTNCCGGACATCNCCCAACCNCATGGTNCACGTGGNGCTA CACCNCCTGGTGGACTTCAGCGNGCTCCAGAACCCCACCGTTGCTTTCGGCCCNCCGTCGTAAGCTGGAC GTGGCCCACCCACTGGGTTTACTGGGCTGGNCCTCTTATTGGTGGTGGACTCGCCGGAATTATCTACGAC TTTGTCTTCATCGATGAAAATGCCCACGAGCAATTGCCTACCACCGATTACTGAAGACGTCAAATTCAAC GTTGTTAATCTGATGAATTTTTCGTGATTTGCTTTTTTAATTTGCATCGTAATGGGTTTCTGGCCGTTGG ATCATTTTTAGATGAATCTTTGTCTATTGATTGATCATTTATGTGTCTTTGGGTTTGTTGTTGGAGTTGT AATATCTCTGGAAGGCTTTTGTGCAATTGTATTGTACGGTTTAATAACTATAATTGAGAAAACCAGGGAA TGTGAATTATGAAAATGATTTTTTTTGTT >gi|3450119|gb|AI100158.1|AI100158 34533 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106H10XP 3', mRNA sequence TCTTTGGTTCTTCAACTCTTTCCACATCCCTGCAATGNGACCGCTCAGNCTCAGGGCCACCACCNGAGAA GAGTCTGATGNGGATGNGGTTAAGANATGGTTCACGCCCCTTAGAANGCGAACNCGGGTTAGAAGAAGNC GATAATCAACAACNATACANAGAAGGAGANTCATCATCATCATCACTCTTGAAGAACTNCGAGCTCATGA TACATTGATAAAAGATATTTATTTTGGATATCAATATGACAATATGTATGATGGAAAGGTAGAGAGATAG TAGAGAAAATGTATTNCCTATAGTTTTTTAATTGGCATTATTTTTAGTAGCCTGTAGATAAAACAGAGCT GGTCAAAAGATGCACACTATACTAAAAGTCTAAAACTATATATCTGGAAGATTCTTTCTTTAGTCTTAGA GAATCTTGAAG >gi|3450118|gb|AI100157.1|AI100157 34532 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106G7XP 3', mRNA sequence CTCCGGGATGGCCATTAAGTTCCCCTTTGCCCATTTGCCGGTGCAACCGTTTGCCGCTTGCTGATTCNCC GTCGATGATGCTCCAGNGCATGGAGAGGGCTTTTAATTTTGCAGTAATCCAAGTGCTGAAGCTGTATGGG TTTAGCCACAGGGGACTGTTGAGTCCCCAAGATTAAAAGGATCAGAAATGAGACAGTCTCTCCTCTGGAG TCAGTAGACAAGTTTGATATTCGAAGAATGCACATGGAAACCAAACCATAGAGCTAGGAAAATCAATGAG TGAACGGAATCACAGTTTGGCAAGATTACANGAAACATATAGATGATATACAAATACTCTCACAAACACA ATGCAATTTGTTTACCCTGCACTTGTTCCTTGTGCTTCATTGTTTGGTCTCATGAAGATAAGTTTTAACT GTCAAATTCTTATTCCATAGATGTTTCTTGTCATTGTTGGTCAATATATGGAGAAATTTGATACTGC >gi|3450117|gb|AI100156.1|AI100156 34531 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106G4XP 3', mRNA sequence TCCCCTGGTGGNGCAAACTGGGTGGAGCTNTNGACNCAGGACCAGGAAACCGTCATCTCNGACACAGCTC CAGTGACAAATGGGCCATGNGTGTTGTTTGAAGCCNCCATTGATGTTCACAGACTACAGAGGTCATCGCC AAAGCGGTTGATTCGGCGGCGAATGTTCAACCGGAAAATGTGGAGTCGGTGTGGAACCTAAGAGGAGTTC TTCAAACTTCGTGGCACCGTGTCCTTCTCCGGCTTGGCCACTCTAACTTGTAGACCAAGTTACCACTATG CGTCTGGTCTCTCTTTATCTTTTCTTTAAGAACTAAAACATCCTTGAATATGCTTGTCCTTGTGGATCTG TGAGAGCAAAATACTGTTTATAGTTAAATAAAATGGGAAAACCCATCTGTTGTCATGTGGTGGATTATAA ATTATTTATTTATATGATAGAACTGTTATTCACTATTATATATTAATGAAATCATATGGTTGAGC >gi|3450116|gb|AI100155.1|AI100155 34530 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106F9XP 3', mRNA sequence CCCAACCCCGGTTGGTGCCCACACGGGACCTTGGGATGTCCAGGNCTACATCACCCCTGAATTCAAATGG GCAAACTTCACATTGGAGGAGCAAGCTAAAGTCATTGTGGCTCCAAGAAGCAACAACGAGATGGATGCTT CCAAGCTCAAGAAAGAGTTCCCTGAGCTACTCTCTATCAAGGAGTCTCTGATTAAGTATGCATACGGGCC AAACAAGAAAACCTGAAGAGAATGATTGTGATTCGTCATTAGATAATCACCTTTAATATCAGTTTCGTGT ATTTTGTTTTGTTATTGTTTAATTACCCCTTCTTTCATTAGATTTGCTTAAGGGGTGTATTTGTAGTTCG AATATTATATGTAATAAGAGCTTGTTCTCATTTGTGTCATAAGTTGCTCTACTCTTATTATATTAGAATC >gi|3450115|gb|AI100154.1|AI100154 34529 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106F1XP 3', mRNA sequence GAAAGCCTTGATGAGCTATAGTGATGAGAGGAGTGATAAGGTTATTGGNGCTCCATGTGCGGTCCTGATG CAGCTGAGATCATGCAGGGGATTGCAATTGCGCTCAAGTGTGGAGCAACCAAAGCACAATTTGATAGCAC GGTTGGGATACATCCATCTTCTGCAGAGGAATTTGTGACAATGCGCAGTGTGACCAGACGCATTGCCCAC AAACCCAAACCTAAGACAAATCTATGAACCGCAAAATATAAAGAGCTATATAGCATGAAAACTCGGTACA CTTAGTTTGATCAAAGAGTCAGACAACGATGAGTTTAATCATACTCGTGTCCCAATAAAGGATTTGTAAT TTTTGTTTGTTTGTATGATGCTTCTCTTCTTACTTACTTGAGAAAACATCAAGGTTTCTTCTCTTATTGC TTAGTGGAACTTTATTACAAAGAATTATTCTATG >gi|3450114|gb|AI100153.1|AI100153 34528 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106F16XP 3', mRNA sequence CGGCGGTGCAGCCTNAAGCCCCGGGANTTTGACCNAGCCCTTTTTTAAGCAATCCNGCCTTCCNTAGGGT GAAGTGGCTCCCTGGNGGAATCTTTACCCCGCTTAACTTTGCCTCNTACGCAAGAGCCCAAGGAGAAANA GCTAGCCAAACGGGAGGTTGGCCGATGTTGGCATTCCTTAGGGTTTGTGGTTCAACACAATGTGACTGGA AAAGGACCATTTGAGAATCTGTTGCAGCACTTGTCTGACCCATGGCACAACACTATTGTCCAAACCTTCA ACTAAAGAGTGAAGACAGACTTATGATCTCATACCTATCTATCTTCCATCACTTTCATGTCTGTCTGTGA GTGTGTTTCATCTTAGAGTTCTTGGTTTTTGAGCTTGAATTATTGTTGAACCGTTGTAGCTCCATGAACA AATTTGGAATCTTCAATGTACAGAGGAACTAAGTTAATCAACATTGTTGTACTCTTTAATATCTATTATT CATGTGGCAACAGTTATAT >gi|3450113|gb|AI100152.1|AI100152 34527 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106E17XP 3', mRNA sequence CTCTTTCTTCCNCCCTGCCCTTAGTGNCGTTGAATTGGCTAGGGAAGTTGCTTCCCTTCTCCGGCAACAA GTGGATCCTTGTGTTGAATTCGAGTTGGAGCNCGGATTTGTGTNCCGTGAGCACGGAAACACTCCCGGAT ACTATGATGGACGATACTGGACAATGTGGAAGCTTCCATTGTTCGGATGCACCGACTCCGCTCAAGTGTT GAAGGAAGTTGAAGAATGCAAGAAGGAGTACCCTGGCGCCTTCATTAGGATCATCGGATTCGACAACACC CGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATCCCCTTTCT GGAATATTCAGCGTTGATTATTCTGGAACCCATTTCTATGTGGTCAATGCAAATTTAAGAAATTATTTGC CGACTTAACAGTTGAGGAACTATTGTTTGAAAGTGAAAATGTTATTCCTATCAGTTTCTCT >gi|3450112|gb|AI100151.1|AI100151 34526 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106D14XP 3', mRNA sequence AGGGTNAACTTGTCCNTTAAANGAAGGTTCTCGTNCGATGATTGANCTTGATGACNAATTNCTTNCTNAG CACATGGCTAAGCTTNGAATGGATAATGAAGAAATGAGTGTTGATGAGGGAAGCGAAGATGAAGAAGACA CTGGAATGGGAGAAGTCGATATCGATGGAGGTANCGGGATAATTGAATGAACAAAAGCAAAAGCATTGTA ACTGCTGTTTCTGCTTTAGATCCTACAATTTTGTTTCCCTTTGAGCAAAAACAGTATTTTTTGTTTGACC CCAAACATGGTTAGTAGTACAAGCATCTCTTATTC >gi|3450111|gb|AI100150.1|AI100150 34525 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106D13XP 3', mRNA sequence CCCCGGTTGGGNCCCCCGTGGTNGCGATTTAGGAAAGGAGGANTGGCGATTTCGTTTTAGCGGATGATAN GGANGTTTTCACCGTGGNACGGGAAAGGAGANGCGATAATGNTTGTGNTCGATAGGGAAAAGAANACGGT GGAAGCTGATAATGGATACTACTATCTTGTTTGTGGCTGATGGTGGGATGAAGTTNGATAGAGGATTGGT GTTGAAGGAGAAAGGAGTGAATGAGAGCTTAGGAATGGTTGTTTTGGTCGTTAGGCCGCCGAGAGATGAT GATGATGAGTGGCAGATAAATGATGAAGATTGGGATTAGAATTCAATTAGAAGAATAGTTAAACAAATAC TTATATGCTTTTGGTTTTGGCAAATATGTAATTTTTTGTTTGATTGCTTTTTATCTCATAAATGTTTCTT TC >gi|3450110|gb|AI100149.1|AI100149 34524 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106C5XP 3', mRNA sequence GTGGGGAAGGTTAATTATTGNTTCCCGTGGTTNTTCAGNCGTTGGNTTGNAGANCGAAGCCATAAAGTTG AATGTACCCCTTTGGATTTNGTGGGTTGCGNCAGCNGCNGAGATTGGCGANCGACGGTGAAANCGNTGGC GGTGGAGATTGATGATAATCATGGTGAGCGGTAACGGCTCTAACGCTTTTTTTCAAGGAAATGACTGAAA TGCCAACAGTTTCTTTGACTGTTGAGTTTTTTTTTTTTTGGGTTATTTAATTATGTTTTAAAAAATTTAA TGTTAATTTCTTCTCTTAATTAATTAGTTTTGGCTAATGGCGTTTCTGAATCTTCTGATACTAAACTGGC ATGTTATTTTAAATAATATAGTTTTTTGCCGTT >gi|3450109|gb|AI100148.1|AI100148 34523 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106C1XP 3', mRNA sequence GCACCNGCAGAACTCGAAGATATTGTCCCTTCTTCCCACAATTGTGGATGTCCTCATNTCAACCGTACTG ATTATCAGCTGATTGACATTTCTGAAGATGGATATGTCAGTTTGTTGACTGATAACGGTAGTACCAAGGA TGACCTTAAGCTCCCTAATGATGACACTCTGCTCCAACAGATCAAGAGTGGGTTTGATGATGGAAAAGAT CTAGTGGTGAGTGTGATGTCAGCTATGGGAGAGGAACAGATCAATGCTCTTAAGGACATCGGTCCCAAGT GAGACTAACAAAGCCTCCCCTTTGTTATGAGATTCTTCTTCTTCTTCTGTAGGCTTCCATTACTCATCGG AGATTATCTTGTTTTTGGGTGACTCCTATTTTGGATATTTAAACTTTTGTTAATAATGCCATCTTCTTTA ACC >gi|3450108|gb|AI100147.1|AI100147 34522 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106B4XP 3', mRNA sequence TCTTTCCCCCGTTTAAAGGTTTTTGGCCGGGGTCCCNCCTCCTTNTTGNCCAAGGTCAAGNGAATGGTCC ATCCCTGATGCTCTCAAGGTGTTGAGGCTTCANGCTGGTCACAAGTACTGCTTGTTGGGACGTTTGTCTT CTGAAGTTGGCTGGAACCATTACGATACCATCAAGGAGCTTGAGGTGAAGAGAAAGGAGAGGTCACAAGC TTTGTATGAGCGTAAGAAGCAACTCACCAAGCTCAGGGCAAAGGCCGANAAGGTTGCAGAGGAGAAACTT NGATCCCAGCTCGATGTTCTTGCATCGATCAAGTACTGAAGAAAATCAGCATCTATCTTTTGGTTTAACT CTTGTTTTGGTTTTTATCTATTCAGATTTTGTTTTCTTCCTTGTATCACTGTTGAAGTTTATCACCTCAT TTCAGTTTTATTTATC >gi|3450107|gb|AI100146.1|AI100146 34521 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106A14XP 3', mRNA sequence GGGCAAGGNAGGGGCCCANTTCNCCCCCTGAAGNCTTACCAGTGCCCCCCNATGCTCTGGTTTTCCCGAT GGAGCTCCATTGGCCATTACCCTCGCCCAGCTGTGCATTTGGGGCCGCTTGCTTGTTACTGGAGGCCACA GCAGAAGACCCGCAAGCCGAGGAGAAGGTGAAACTAAACTACAAGAAGGTCTTGATGTTTTCATAACTTA CAGACAACAAACACAAAGGCTCTTGTTTGGAGTTGATATACCAAAGTCGCTTCCTGCAGGTCCTTTCCTT GTAACTTTTGTCTCTGATTTTGAAAGATAGTCCAGATTCTTGTCTTGAATTTTGGGATACAAACACAGAG AGACACTTGTGAATGTTGGGATCTTTATAGGAATCTTTATAGTGGTTTATAAATTTGTATTGGATCATAT GGTTAGAGTTGTTGTGTAAGAATTCAAGATGAGTCTTCTTTGTCT >gi|3450106|gb|AI100145.1|AI100145 34520 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106A13XP 3', mRNA sequence CCGGGCTTTCCTTGNCGATNTTCTCCGTTCAGCANTCNCCAAACTGGACTGTTGAAGGGCNCTCACTTGG AATNGTNACCACANGGAGCTGAGATTGACTGAAGGTCCATTGGAGAGGAGTACCAGCGCAGGAACAGCAT TCCTTTGGAGAAAGCTATTACCAAAGACACTCGTGGAGATTACGAGAAGATGCTCGTCGCACTTCTCGGT GAAGATGATGCTTAATCAATCAATCCTCCACAGAGAAACATAAGCTGCTCTACAGCTTCTGTTATCTCTT ATCTCCCTCTCTCTCTCTTTGATGAGTTTCAAATCGTTTGATTTTGTTTCTACAAAAACCTTGTTTGTTT CTGTTGTGTGTTTTGAGTTCCTAAATAATGCAAAAGAGAGAGACAGAGAGAACCAGTGTGGTCTCTTAAG TTATATATATATGAAGAGCATTGGCCT >gi|3450105|gb|AI100144.1|AI100144 34519 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105P15XP 3', mRNA sequence AATCTGTTGTAATGTCNNGAGGATTTNCAGATCATTAAAGCCAAGGCTGTGCCNAANTCGTTTGCCTCCT TTCCCTAATGGATGNATGTTTCATANTGAGACAGGNCTTAAGAGCTTTGACCATCCGACTAATATGATGA AGGCAATGCCGAGGATTGATAGTGAAGGTGTTCTTTGTGGAGCTAGTTTCAAAGTTGATGCTTGTTCTAA GATCAATAGTATCCCTAGAAGAGGAAGTGAAGCTAACTGGGCGCTGGCTAATTCTCGTTGATTTTGCTTC TAGTTTCGTTAACTCTTGCTTCTTTGTTGCGTTTTCTTTTTATGTACTCTTGTTTATGTAAATATAGCCT TATGAAGACGATAAAGAAATAAAATTGATTTGCTTCTTCGTG >gi|3450104|gb|AI100143.1|AI100143 34518 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105P10XP 3', mRNA sequence CGTTCCTNTTTCNCCGGTAGTACGAAGTGGNCGNTAGACCNAGCCCGGAGAATCTTCTCGTAAGTCATGG GAAGTACTATCCGCTGACTCTGACTTCACCTACAGAAGATCCTTGAAGAGTTGCCATCATCCCACAAGAG ACCCGCAACAAGATTGCTGGATTCTCCACCCATTGATGAACGTATCCAGAAGGGACCAGTCCGTGGAATC TCACTCAAGCTTCAAGAAGAAGAGCGTGAACGCCGTATGGACTTTGTTCCCGATGAGTCTGCTATCAAGA CTGATGAGATCAAGGTCGACAAAGAGACTCTTGAGATGCTTGCTTCTCTAGGAATGTCTGACACTCTCGG CATCTCTGCAGTCGACCCACAACAAGCTATGGCACCAATCCCTGCTTTCGGCGGCGGCAGGGCACCCAGA AGATACTAAGATGGACGATTGGCTCTCTTTTTTCACAGTTAGGGACAAGAAAGACTTGTGTGGTTGTTTA TTGTTTCTTTTGATTATGTCTTAAACTCAATGTGAGTATCTTTCGTATTAAGGTTTTTGNATTNNGTGG >gi|3450103|gb|AI100142.1|AI100142 34517 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105O6XP 3', mRNA sequence AAACACCACATCACNANAGGGCAAANCCTAGATGATGTTGTTGTTGTTGATCNTGAGGCNNGTGATGTTA GCTCCTCCAATTCAGAAACCTNGAAGATCAATACCCTTGGCGAAGAAGCAGCAGCTTCATGGGACTATCA ACTATTGGATCATTCGNTAGGATAACCGCCCGTGGCTCGGGAAGGATCGCANCCGAAAACGAGCTGATGG ACAAACCAATATTGTGAGGGATCGATTCCGTTTTAAGGGACATTTTGGGGCATGGGGGAGCAATTAAAAA GATGAGGGGTGAAAATTGTGAGAATGTATAAAATATAGATGAATTTATGTTAGATCTTTTGTTGAAGGGA GGAAGATTGAAATAAGGAAAAAGATGTGGGGAGGTGTGTAATGNCAAGGATTTGTTGTTTCTTTGATTAA GTTTGGCCCAAAATTGTTTGTTGTTACTTGATATGAAAGGGAAACCCATAATCTTTTTGTCTC >gi|3450102|gb|AI100141.1|AI100141 34516 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105O21XP 3', mRNA sequence TCATGTTTNCGTGGCCCCCCGTCAGGAGCNCAATTCCGNTTTGNCCAGAGTCTCATCTGAAAGATCGGTG ATGGNTCCCCCTTAGGCCNTTGNTTNTCAATCCCCAGACCTGCCCCCATGCTCTGTCAGGGATGATTAAC TCTAAGCTCCGCTGGGTCATCCAACACATNGCTCAAACATAGCCAGAAGGTCTTCTTGGTATCAACTTTT ACGCCACGATTTTGTATCTCTGGAGATTCAGGAGGTGGAGGAGCAATCACCGGAAGGGATTACCTCGCAT TACTCCAGAAACACAAGCCAACTTTCCGTTGGGATAAAGAGAGCGGCGAACATCTTTTCATGTATAGAGA TGATAAGAACATCAAGCATGCTGTTTTCTATCCTACATTGATGTCAATCCTTCTACGGCTTGAGAATGCT CGTCTCTGGGGAATCGGCATTTCAATCTGGGAAATCGGACAAGGTTTAGATTATTTCTTTGATCTATTGT AAGTTCCATACATTGCATCATGTTATGTTTTCTTAATGTTATACTTGATCCTC >gi|3450101|gb|AI100140.1|AI100140 34515 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105O10XP 3', mRNA sequence CATATCCTTGTCAACCCGTAAAGACTACTATGGTCGCGGTCCGNTCCAATCACTGGAACTACAACTATGG TGCAGCCGNAANGTTCCCTGGACTTCCTCTCTTGAAGGACCCANATATGGTGGCTCGTAGCCCAACTGTG GCTTTCCAGTGTGCCATGTGGTTTTGGAACAAGAATGTGCGTCCGGTTTTGAGCCAAGGGTTTGGTGCAA CCACGAGGAGGATCAACGGTGGTGAATGTAATGGTGGGCNTCCAGCTGCAGTGCAGAGCAGGGTTAACCA TTACTTGGACTTCTGCAAGAAGCTTGGGGTCACTCCTGGAACCAATCTCTCATGTTGAAGACACTACTAG TTTATGAGGGTTTTTCATTAATGTCGTCTGGTTAAGAATTTCGTATCGAATAATAAAGTGAAGTCGAAAA TACTAGAACTTATAAAATTTGTAAGAGATTAGAAGTTATATTGTGTGGTTGATGTCTCTTAAGGT >gi|3450100|gb|AI100139.1|AI100139 34514 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105N3XP 3', mRNA sequence CCGAGTTTTTTCCCGACCATAAGAGCTTATGTCNCTTTGGGCNCCCAACGAATTTGCCCACCATCCNAGT GGTTCTACTCACGCGGTGGAATCGTTCTCGAGACNTCGTGGTGCCGTCCGATGATCGCGTGCCCNTTTTG CGGAGCAATGATGAACGCGACACTCCTCAACGAAGAGCTTGGCGTTGCCTCCGCTCTAAGAAACTACCGT CGGAGGGANTGATTACGAGGGCGGAGATCGAGGCGTTGGTGAGAAAGATCATGGTGGAGGAGGAAGGTGC TGAGATGAGAAAGAAGATAAAGAGCTGAAAGAGACCGCTGCCGAATCGCTGAGTTGCGACGGTGGAGTGG CGCATGAATCGTTGTCAAGAATCGCCGACGAGAGCGAGCATCTTTTGGAGCGTGTCAGGTGCATGGCACG TGGTGCCTAGGAACGCTTACCGTTTATAGTATGTTACTTATAAACTGCGTGTCGTTTTACCCTTTTGGGT ATCTTGTATTATATAGTTTCCGAGTCTTGGTTGCCACATGGTATCACGTGGTTTTGTTTTGGTCAATGCT AGTCCCTATCAGTAATGTATTTTACAATGTAAAATAAATAATTAGTGTTTTAATTTGT >gi|3450099|gb|AI100138.1|AI100138 34513 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105N21XP 3', mRNA sequence TGACACTTGCACACATGGAGGCTTTTTANCCGGATTCTGCANCGNGTTNGTCANCATGTCCGACCTCANT ACGNTTGGGAAGCTTCCCGCACCANCACTCGCGAACCAAACGAAAGTATAGCATATACCAGTACGTGCTA TTCGTAGTTGNCAGTGGTTCTACTTGTGGTTGGGTTAACTGTTGCATTAGTGATGCTTTTCAAAGGAGAG AATGGGAACAAACATTGCAAATGGTGTCATTACCTTAGCTGTTTCCCAACTTCTAAATGGACCTGCTAAT CATCATCATCATCATCATAATCATATAGTAAAAGCTTTTATATGTGTTCATGTTAACATTTAATCTCTTT GATCTCTCTAGCCTTTGATTACTTATATATGTGTACATTACAAAATTCGTCTTGTGTAAAAGGGGATAGA AATAAAAGAGTGTATAATTTGGTTTATAGTACACACTTTATATAATCCATCTTAGGTCTTGT >gi|3450098|gb|AI100137.1|AI100137 34512 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105M24XP 3', mRNA sequence GGTTGGAATAGAAGTGTGANACNTTTGAGTTGTGCCTATTTGCTAGTTTTTCTTAGGTCNTGGTTACGGA AATTAAGCNGGTCNACNGGTGTTCTGTGCNTGGATGCNAATATTGCATGCAAAATGGATCCCATAAACAT GTGTCGTTCCTAGGTTACCTAATTCATATGACCCTTCAAGCCGCTACTTCAGAATTTCTTTGTCATGTAA GACATCATTAGAACTATAGATGTACTTGTTGGTTTCCATATCTCTGGTCTCTATGGCAGTTGAAGGAAAG AGAGCCTCAGATTCTAAATTCTCTGTTCGTGGGACTGCGTTTTTGCTGGCTTCTGATGCTACACAGTTTC TTTGTTTCTGTAATAGATTTTAGATAAACTTTTGTTGATACTTGCTTTCTGTTAATTTTGAATGAAGCGC CAGAAAACT >gi|3450097|gb|AI100136.1|AI100136 34511 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105M17XP 3', mRNA sequence CCTTTCCCAGNGGGAAANGGCTCTTGTTGGCTTGGNCCCCGTACCCNCATTGGCCTTCCAGTTTGTCATT AGAGTCTCTTNAGGCCCATCNCCCCAGAANTGTTATGGCCGAGACCATCTCTCCGCGTCCCTNAAGCCGT CGATCATCTCTTCTCCTAGAATCGACCGCTTAGAAGCCTCTTTATAGCGACTCGGGCTGTTGCCGANTCG CGAGGCTAGTGGAATACGGAGAATGCACAGCGCATACCCTTGCTAACATCAGCGCGTGCGTTGCTTGGCC CAGTCGGGAACGNTGGAAGCGGCTGAGTACATAAAGGTCGTGGAGGCAGAGCTGGTGGAAGTTCAATGGA GAGGACAACAACTAATGGAGTATCAAAGTCAGCACCAGCAGCAACATAATCAACGGCGGAGAGGAAGCGA GAGAGAGACCACGACGACGATGACGTTGATGGATGAAAACGGTGAGCCGTTGACTCCAGCATCAGCGTGG AGAGCGGCTGAGAAACTGGCTAAGTTAGCTATGATGAAGAAGAGCGACTTGCACGGCTTCGAAAACGCTA GGTTTTAAATGTTATTTTTTTTGTTTCGTCCAGAAATATGAATAATTTTTAATTCTGAC >gi|3450096|gb|AI100135.1|AI100135 34510 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105M13XP 3', mRNA sequence CTTGCCCTNTTTCCGCCAGCTCTATNCGACTNCTTAGGGAAGCTGGTCCGCTTCAGTCCCGTCCGGNTTC CCGNTCGCCCACGCGTCCGAGNAGTCGTGTCTCTCCTTGCATGATACTTACGAGTGCTGAAGGGAGCCNC CTTTGCGNNCCTGAGCCCTNTGNGCAGCCAACTGTATCTGATGGACNAGNCCTCATTCCGTTCCAAGGAT NCACACCGATCTAAGAGAGTTATTGTGAATGCTGGGACGCAGNCATGAACCAGAGNCCGTCGTTTCTGGA CATTCTCAAGAGACTTGAAAAGATCAAGGAAACTCTACCATCAGATCACCATTGGGGCTTATTCACTTCA TAATACACAAAATCCATTATTTAAGCACAAAAACAACCAGAAACAAGAAAGTATCATTCTCTGTTTGCCT TATTAATCTCTGTTTCATTTCTTTTGTAAAGATTGTTTCTTTTTCATCTTTTCATTTGCTTTAAAAGAGT GTGAGATAGAAAGCTTTTATTGTTGTTACATGGATTGGATTGAGTTTGCAGGTTAATGAGAAGTTCATAT CATATCAG >gi|3450095|gb|AI100134.1|AI100134 34509 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105K5XP 3', mRNA sequence GCTGGTGTCGCATCCGTGGAATGTTTAACGAAGGTCCATGGNTCCACTGAGGACGGCCCATGCGTCTTCT TGNTANGTTGGGNGCGATATCTCAAAGGCGTTAAAATGAGGAGCTCTCGTTGCTTGCCACAAGTCGGTTT ATATCGTGTACACATGCTAGGGGATGTTAGCTCTTCCTTGTTGGCAAGACGAGTATGATGAACTTGCTTT GGCAGAAACCTCTATATCATAACAGCNGCTGTGAAAGCGTATGTGGAAAGCCGCCTACAGAGCGAGTGTT TTTGGATAAATATGGAAGGATTTGCTTGTGCCTTGATGAAATCGTTTGGAACGGACTTCTGGAGAACACC GACAAAGACAGGATCAAGCGACTCATCAGATTGAAACCTCCTTCTGAAGTTTGATATGCTCCAACCAACC ACACATTCTTCTTCTACTCATTTTAAGAGCTTNCTCATTCTCCACCGATTGTTGTTTGTTGAATCACTTC TCTATATCACATATTCACTATCAACTACTGCTGTTGTTCGATCAGTCCATNTTGTAGTGNTGTTTTTTAA ATCTCCAGTTTTTAGTGTTACATANCAAAGAACNAATTNCTATCC >gi|3450094|gb|AI100133.1|AI100133 34508 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105K20XP 3', mRNA sequence TACCCCATCATCNCAGCAGTTTACCAGANATCNGGCGNAGCNCCAGGTGCAGGAGGAGAACCACCGACAG AGGAGGAAGATGAGTCTCACGNTGAGCTCTAGATGTCCTTCGGTTATTGTTAATTTATTAAACCNTAGAG ACAAGTTTTGAGGATGAAACTCCGTTTTTGTTTTTTGTATTTGGTTTCCTTTTTCTTANGGATTTTTAGG AAAGGGGAGAGATTAAGTAGCGTCCCTTCTTTAGTCTCCCTGGACNTTCTCTTTATGTTCATCTGATAAC TTTACTTCTTCATAACAAATACCTTTTTTTCTATTCAAC >gi|3450093|gb|AI100132.1|AI100132 34507 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105K1XP 3', mRNA sequence TTTGNTTCACCCGGTTAGCCACCTGTCGCTCCNTCACCGNTTGATGTCTCCGTGCTTCCCGTCNCCGCAN CCCNCAGNCATCACTTCCTCGCAGCACGGGGAAGAGTNGCTNCATGAAGGTGTNGCCACCATTGGAAGAG AAGTNTGAGACTCTATCTTACCTCCCTGACTTAGTGACGTCGATTGGCNAGGAAGTTGACTACCTTCACC GCANCAGTGGATTCCCTGTGTTGAATTCGAGTTAGAGCACGGATTTGTGTACCGTGAGCACGGAAACACT CCCGGATACTACGATGGACGGTACTGGACAATGTGGAAGCTTCCATTGTTCGGATGCACCGACTCCGCTC AAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGANTACCCGGGCGCNTTCATTAGGATCATCGGATTCGA CAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATTT CTTTTCTAAAACATTCTTATGAATTATCTCTGCTCATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTT TATGAGACAATTTCTATCGGATTGTCAAATGTCTGATTTATGAATATGTAATTTATAT >gi|3450092|gb|AI100131.1|AI100131 34506 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105J21XP 3', mRNA sequence CAGNCCAAATCCTCCATCGNCACGNAGTCCTCNCCACGTCAATCTCTCTACGTCNCCGNTTCCGTACCCG TNTTCTCCCGTTTCTCTCTATTGAGATCGTTGGGGAGTAGAGATGGCGACGTTGGAGCTNTACAGGAGNT CGACGACGGGATGTGTCTGACGGAGACTTGGNCGAGTGGTTCAGAGCGGTACGCTGANCCTGAGCTAGCT ATCCAGTCCTGTTCAATTTGACANGTCCTGACTGAAGCTCTGGAGAGCCAANTGAAGACCAAGGTGTCCA TCAAGGGACACCTGCACACTTACAGGTTCTGTGACAATGTCTGGACCTTCATATTACAGGACGCAATGTT CAAGAGTGACGATCGTCAAGAGAATGTGAGCCGGGTGAAGATAGTGGCATGTGATTCCAAGCTGCTCACA CAGTGAGATGCAAATTGTCTGCAGGGAATTTACTTTCCTTTGTACTAGATTTTGAGTTTTTTCACTTTGT AAACTCAGCACTTGCTATATATGTTGAGCACTTGCTATATGTTGAGCTCCATCTGCAGCCATCAATTTAG CCTATATGTAAATTCTCGGCCCAAGGACATAAGGATACATTCTGTTGCTATGAGAAAGTTCTTGAGCTT >gi|3450091|gb|AI100130.1|AI100130 34505 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105J16XP 3', mRNA sequence GGTTNCCTTTCTCCGCCGTTTTNTTGATTTGGCGGTACCATTCCCCGGNACACTTNCCCTGNTCCCCNAG TNTATCGCTCCCTTGGGGAAGCTGGTCCCCCTCAGTCCCGTCCGGATTCCNGGTNGCCCCACGCGTCCGG AACCCTNTCTGNTCAGCGATCTTGGTNCNGGAATCGTCNCCGTGCTGCTTCTCCGTTCTCCGCCATTTCA AGTCCCAAAATTAGGNTAATGGAGGAGGATTAGGGATGGTGATAGAGTGTTCGTCGAGGCCACAGAAGAA TCGACGGCTCATCACAGGAAGACGAGCCGAAGAAGACTCAGCCTGGGACATTAAGAGAAGCCTACTGTTT ACGCTCCTCTTCCTCCTCTTCCGGCGGAATGGAGTCCGTTCACTCTCGCTTCTGACGACGGTGGTGCTGC CACTGCTGCGGGAGATTTGGTTTCAGGCGCTGCCTAGTTGGTATGAGTTATCTGCTGATTTGGTTGTAAT CTAGTTTGAGAACTTTTGTTGTTGTTTACTGTGTTTTCAGTTTTCTGATGTTTGTTGTTGGGTTTGTTTG TGTTTGATTGGTGAATGAATGGACCAAATTTGCGATTTATAAAGCTTCAACCTTTCTCCT >gi|3450090|gb|AI100129.1|AI100129 34504 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105I6XP 3', mRNA sequence AATTCGAGTTGGAGCACGGATTTGTGTCAACGTGAGCACGGANCACTCCCGGATACTATGNTGGNCGATA CTGGACANTGTGGAGCTNCNATTNCCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATG CNAGAAGGNGTNCCCTGGCGCCTTCATTNGGATCATCGGATTCGNCNACNCCCGTCAAGTCCAATGCATC AGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTATCCCCTTTCNGGAATATTCAGCGTTGATT ATTCTGGAACCCATTTCTATGTGGTCAATGCAAATTTAAGAAATTATTTGCCGACTTAACAGTTGAGGAA CTATTGTTTGAAAGTGAAAATGTTATTCCTATCAGTTTCTCTATAATTATAGTTATCATTTCATTTC >gi|3450089|gb|AI100128.1|AI100128 34503 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105I4XP 3', mRNA sequence TCAAGAAATANCGATTAAGATCCCGTTTCCCGGGGCCNTCATGAGGNTAACTCTCATCCANTCACCGTGG ANTNCCCGACTCGTTGAGCCCANATCAGNCCATGCACTGGAAGCTGTTCTACCTANCCCGTCNCCGCTCA NTTGAGTGACATGGAGATAGTGAATGCGAGGAGACCACNNACACGATGTCAACATTGAGGATGAGATGAG GAGGAAGGCACAGCTCAAAGAGAGGCTTATGATGATGACGATGAAGATGATGACCATCCGGGTGGTGCTC AAAGGGTGCAATGTGCCCAGCAGTAAGTAACTCCTTAGAGAGACTTTGACCCACATGGGTTTGGGCTCCA ACCAATTTGTCTCTTGCTTTTTCATTCTAAGTGTATTGGAGTCTTTATGGGAGTTTGGTACGGTTTAAGA ATTTGCCCACTTCGGTGGAACATCGAAACTTGTTTTCTCTTTTTCCTCTGACTTTAAAAATTAAGGCCTT ATTACAATTTTGTGTTTTTTCTTTATGATTAAATTTGTAGTAATTTAATGTCTAAGAACATATATACTGT GTGTTTTCTAT >gi|3450088|gb|AI100127.1|AI100127 34502 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105G11XP 3', mRNA sequence GCGGAAATTAAGTTGTTTAACNNCAGAAGNTAAGGGCGGAAAGAAGCCCAAAAGAAAGTATTGGGGTCGT TTTGATAAANATTATTTTGTAGGGGTGGTTTAAATGTGTGAAGTGGATAAACCATNNGGGTAACTGNTAA CCGCGTNTNTACCAAACCCTNTCACTCCCCACTTGTCTTTGTACATTTTGGTTTAATGGAAAAAAAGGAT AGGGCTATTTTCAAGAAATGACAAAACGATCCTTTTCTTTTGGTT >gi|3450087|gb|AI100126.1|AI100126 34501 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105E8XP 3', mRNA sequence CACAACTTCGAGCCTCAGATATNCAAATTGGAGAGAGGAGCTCGTNACAAGCTCATTAATGACTNCAACA CAATGAGCATTTGGGACTTTAATGACAAGTATGGTGATGTATGGGATTTCACCATTGAGAAAGATGATNT CGCCACACGATAAGATATGGATTATGATCTCGTTATAATCATGACTTTTGATGTAAACTGTTTTATAAAA TTGATGAATGAACGGGGTACAATGTGTATAATATGGATTGTTCATTCTCTTATTTTTCTTTAGTACCAT >gi|3450086|gb|AI100125.1|AI100125 34500 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105E4XP 3', mRNA sequence CAGGCTTCATTCCTGNTTGATGGGGGATATGTTCGTTGATTGNGNCCGAGNTATTTGATATGCCGTTTCN CTTGCCGGATGNCTGATTTGACCNCGAAGAAGATCNAGATCATCCNCTTCGAGNAATACCTTATGATTAT GNCCTCCGAGNCNTCTGCCNCGTATCGTAGTGTCTGAAGAAGGAGCTGAAGATTTCCTTATTTGAAGCNG TGAAATTAGCTGATGTGAAGAGATTAGAGATTCTTTAATGAAGCTGAGGAAGAGCTNTTAGAATATTATG CCACAGAGAGAGCNTGAAGCTATGATATCTACTCGCANCTAAAACGCGCAAAGATCTGAGTTTATCAGAT TCCACGTACGATATGTTCTTTAAAAGCTCAAAGATTCACACNCATGCATGTCCTGATTCTTTCGGCTTAC AATTTTTGAGACATTACGGCTTCTTTTGCTGATAGAACCAAGACTGATCAAGAGTGACAAAGATGGGTTT TTATAAGATAGAAATGTAAATTGTAGACTTGGATTTATTAGAGAGGAGAAGAGATACATTTTTTTTTTCT TTACATGAGAGATATGTAAAATGGTGGTGTGTTATTTTGGAAGTTAACATATGAATTTCTTTT >gi|3450085|gb|AI100124.1|AI100124 34499 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105E19XP 3', mRNA sequence TTAATCTGCGTTCTCNTTCGTGACCTNCGCCCTTATGCTCCCAAATCGAGCGAGTCTCCAAACTAGCTGG GGTGAAGACGCGTCAAGAANCTTCCCCTAGNACCATNNTCGCCCCTGCAAATGTCGNTNTGAAGCAAGTN CTGAACAATATGGCTATTTGGCCAATCTGGTGNAATTAAACCCGGCAAACCAAATACGCCCTGTTCATGT GATGGATGTCGCCCCAGGNTCTGGCGAACCTTATGTCGAACCCTCAGATCTCGGGAACTCTCTCGCTACC TGGACCTTCGACCTTGACCTATGAATATCTTCTGGACCTCGTATCATCAATCGCTATCACGGAACCTTCT AAGGCCCCTGTCTTGCCGAAGGCAGTTGCGACTGCGCTTGCCAAGGTCGCTCAGAACGTCTGGTGGCCAG CCCTCAGTCCTGATGAGGTCGAACGCCGGTACATCGACGATGCTGATGTCGAGGGCGATTGGGCTGCAGT TGGTGTCGAGCCAACGGAGATCGAGAGCCACGCAGTCAAGTACCTAAGGCGTTATCGATCTGCGGAGAAT TCGTCCGCCCAGCGGTATTCCCCGCCAGACCCTCGTTGGCTTCCGAATAGAGCAGTAGATCGTAGACGCC TGAATATAATTGTCTTTGAGGTTTCGCGAG >gi|3450084|gb|AI100123.1|AI100123 34498 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105C1XP 3', mRNA sequence TGCCAATCCTACCCTGAGGTTTNTTCCCAACCCGTGAGGNTNTTANCCAAGCCCAGATCGCCCGTATATG GCTTANCCCGNCTTTGACCCACCTANCCCACGGTGGGTTTCTTGATGGGCTCTTCAAGGGTCAAATGGCC AAAGGNTCAGAGTGGGCTAGGCACGTTTCTAGGGCANCACAAGAGCCAAGAGGCTAAAAAGAGTCAGGAC ATGGGAAGCTCTTGGGGCAACATGACCAGAAGAAAACTCATGAGACAAACAGTGGTCTTAATGGCCTTGG AATGTTCATTAACAATGGTGAGAAGAAACATAGGAGGAAAAGTGAGCACAAGAAGAAGAACAAGGATGGG CATGGCAGTGGTAATGAGAGTGGAAGCAGCAGCGGTAGCGACAGCGACTGAATATCATATGCTTGCTCTG AAGAAAGTAACGCTTCTAAGAGTGACTAAATTAAGTACTTGGATGTAATACTTAAAATAAAATCACTTAG GTGGTTGTCTTTGTGTGTCCTATATAACCTCGCTACTACATGAATCTACTTTTAT >gi|3450083|gb|AI100122.1|AI100122 34497 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105C14XP 3', mRNA sequence GAAGAAGAAGAAGAAGAAGGAGAAAAGATGATTTACCGAAAGTGGAGTTTGCTGTCCGGCCCACCGGTTA TCCTCGGCGGAGCGGTAATTGCTGCCGTCGCCGTCGGATTCGTCTTGCAAAACGTAACGAAAGGGGAGCA GAAGAAGAATGTCTCAACAAACAAGTGAGAAGACAAATGGAGAGATGCTACAAAATGTGGTGATCATGTG ATTTGATACAATTTAGTTCTTGCAGTGTATAAGCTCAATAATGCTTTTGTAAGCTTTTGAATACACAGAT CTTTGTGGTGTTTTTAGATTCTTGTTACTAATAATGATATTTCATTTTCC >gi|3450082|gb|AI100121.1|AI100121 34496 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105C11XP 3', mRNA sequence TTCCCCAGCTCTATTCGCCCACTTTGGGGAACTGGTCCGCCTCAGTCCCGTCCGNATCCCGNTCGNCCAC GCGTCCGAATNCACAGTTCCGCTTANGCCCTCANATTGAAGGGAGANAGAGATGGGTTTGTTGCCATGGT GAAGAACTAGGTTTCATCTCTTTCTTCTAGTTTCAGCTTCAGCGTTTGCTCTCTGTTCTGCAGGCCGATC ATCCATTTTATCTATAGCCAAGAAGTGATCATCCCGAGGTAGTAGAAAGAGATACATGAGCATGAGAGAA TTCTGAGAATGAATTCAAGAGACTATGGCCACTCCAGTCCTAAACCAAAGCTCGTGAGACCTCCTTTCAA GCTTATTCCCAACTGATCATGCATATCACCGATCGACTATATATAGATGCCAGACTTTCTGAGATGTATA ATATATGTAAACCTAAATACTAACACTGCAATAAGTTTGAATGATAATCATATATATAAGTTTCAAGATA TGTTTTCTAGTAAATTAATGATTAGATAGTGCTCTTTGCTATCATGCAGAATGTAAATTTGGTGAATAGT CATCATTAGATGAATATTACAATT >gi|3450081|gb|AI100120.1|AI100120 34495 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105B3XP 3', mRNA sequence AAAAACCCTTTTTTCTAGGANCCACTCATATTCCTCCCGTGCTTTGNGTGATTCNCTGCCCGTTTACGTC TATNCCNCTCGCTCAGCATTCCCGTGGGCTCTNCCTCCACCTCCTGGCTCACCGCCTCATGGCCTCGTCG ACGCCTACCCCTATTCAGGCCTCCTGGCTCGCCGCTCTCATGGCCTCGCCGACCTCCTACCTCCTATTCA GAACTTCCTGGCTCACCCGCTCATCATGNCCTCGGTGTAGACTGGTCATTATCGGGCTTCTACCCNAGGA TATGGATTATCTTTAGGTTCTGAGTCAGCAAGGATTGGAAAAGTGAGGACCAGAACTCTACGGTATCTCG ATCCTTGTCCTATTCTGAAAGGTAACTAGCTGAAAAGTGATATGGAGAGTTTGTGCCATTGCCAAGAGGT ATTTATAGGAGAGGAAACAAGAGCGGGAAAGAGGGTTATCGACTCAAACTTCTGTCGGAACTTGATCATA TTACTATAGGATTTCTATTTTGTCGCTTGAGGATATATATTATATATCCATCTTCTTGTTTTATGTTAAT TTCTTTATCCATCAGTTTCTGTTTTCGTTATTTATCCACTTTTCACTGTTGTTAACTATAATAAATCGGA AAGTTGATC >gi|3450080|gb|AI100119.1|AI100119 34494 Lambda-PRL2 Arabidopsis thaliana cDNA clone 105B20XP 3', mRNA sequence GTGCTTNTTTTCCTTATGATCCAGCTCTTCCACGCNCNCATGAACTATGAAACATATATAANGCGCNCNC ATTTTATGTTTCCNCGCNCACATATATTTATGCATATCAAGCTTTTGGTGATTATGGTATTGATAGAGTC AAATTAAGCTCGGTGACTATGGTATTAATAAGAGTACTATTTCCTTATCTCTTTGTGAACTAAGANNCAT ATATATATATATATATATATAAAGCAAACATGTTCCAGAAT >gi|3450079|gb|AI100118.1|AI100118 34493 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104P22XP 3', mRNA sequence TCACGNGATCGAAACGGTTTGATCAGGAGAACTGGGATGTTCTCCNTNCCAACAAGTGTTATCANTTGGA TTTCACGGAAAGANCAACGNGTTCACTCTAATTCGANTGGTTCCAANNCAGTGGGAGTAGTATNGCTGNT GCATGCTCTNCTAAAGCTTCAGAGAGAGATCTGAAAGGTGCTTTGGANTGGGCTTGTGGTCCTGGAAATG TTGATTGCACANCTATTCAGCCAGCCAGCCTTGTTTTCAACCAGATACTTTGGTTTCTCATGCTTCTTTC GTGTTCAATAGCTATTTCCAACAGAACAGAGCNACAGACGTTGCTTGCAGCTTTGGAGGAGCTGGTGTTA AAGTCNACAAGGACCCTAGTTATGACAAATGCATATACATTACTGCAGGAGGGAACAAAACCAAGGCGAC GAATGCAACTGCATTGACCTCCTCTGCTTCAACTCCACGTGGAAACGAACTACTCCAATGGATTTTGAAA CTCTGTCTCATGATCTCGTTGTTCTTCAGTTTGCAAACTATGAATTCACAGGCACTGTAACCGAAATCTG AAAGAAATGTAGCAATAGCAAGAAAAAGCAAAATTTGTTCCTG >gi|3450078|gb|AI100117.1|AI100117 34492 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104P21XP 3', mRNA sequence CCAAGGCNGCCAAAACGGCCAAGGTTACATCTCCGGCTAAGAAAGCTNTTNCTNCCNCGAAGAAAGTTGC TNCGGTGGCCACAAAGAAGAAGACNCCGGTTAAGAAGGTTNTGAAGCCAAAGACGGTTAAGTNTCCNGCA AAGAGGGCTTCTTCTAGGGTTAAGAAGTGAAGTTAGGGTTTGTAGGTAGAAGAATGGTTAACGATAGTTT AGACTTGTATAATTCAATCATCTTTATGCGACTTTGTTTGCTTTTCTT >gi|3450077|gb|AI100116.1|AI100116 34491 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104O22XP 3', mRNA sequence GGATTTTTACCCCCGNTTACTTGCTCCTACGCAGGAGCCCAGGAGAAGNGCTACAANCGGGAGTTGNCGA TNTTGGCATTCNGAGGGTTTGTGGTTCAACACATGTGACTGGAAAGGACCTTTGAGAATCTGTTGCAGCA CTTGTCTGACCCTGGCACAACACTATTGTCNAANCNTTCAACTAAAGAGTGAAGACAGACTTATGATCTC ATACCTATCTATCTTCCATCACTTTCATGTCTGTCTGTGAGTGTGTTTCATCTTAGAGTTCTTGGTTTTT GAGCTTGAATTATTGTTGAACCGTTGTAGCTCCATGAACAAATTTGGAATCTTCAATGTACAGAGGAACT AAGTTAATCAACATTGTTGTACT >gi|3450076|gb|AI100115.1|AI100115 34490 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104O12XP 3', mRNA sequence TCACACGACATTGAGCTGGTCCTCTCACTNCNCCATCCACACCACCGAGCGAATGANGCTATTTGTTGAT GCGTCAGAAGGATTTATTTACCTTGTGAGCTCATTGGATTGACTGTTCACGATCATCTGTAAGCGGAAAG GTTCAGTCGCTCTGAAGGATATCAAGAGGCGACAGACAAGCCGGTGGCAGTCGGTTTTGGAATATCAAAG CCGGAGCATGTGAAACAGATAGCTGGATGGGGAGCTGATGGAGTGATCGTAGGCAGTGCATGGTAAAGCT ATTGGGTGATGCAAAGTCGCCAACTGAAGGACTTAAGGAGCTTGAGAAACTAACCAAGTCTCTTAAATCT GCTCTTCTTTGAAACACAAACATTTGCAGACAACATCTTTAGATTGTGTTTTTGATTATTATCGGTGTGT GACAATGATGTNTCAATCTTTTGATACATTTCAAGTATGATTAATAAGTTACTGTGACTCAAGCCACACA ACC >gi|3450075|gb|AI100114.1|AI100114 34489 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104N23XP 3', mRNA sequence CAGGTGTTTGAGNTATCGACTCGAGANTNGGANGCNTGGTCNCCCCAAGTGTCATTTGTTGCCATGATTC TTTACTTCTAAGAGCTTGAAGATATCGTTCCTTCTTCCCACATTGTGATGTTCCACATGTGAATCGTGTT GATTATCAGTTGATTGATATCTCTGAAGATGGCTTTGTTAGTCTTCTTACTGATAATGGTAGCACTAAGG ATGATCTGAAGCTGCCAACAGATGAAGCTTTACTCACACAGCTCAAGAATGGATTTGAGGAGGGTAAGGA TATTGTTGTGTCTGTCATGTCTGCAATGGGAGAGGAGCAGATGTGTGCNCNCAAGGAAGTTGGNCCCAAN TNATAATAATAAGTAAGCATTCTCTCTTTTACAGAGGCTATGTATTATCAAGTTTGACAGAGTCAAATGT TATAAGAACAAAGTTTGGNCCT >gi|3450074|gb|AI100113.1|AI100113 34488 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104N20XP 3', mRNA sequence CCTCTCCTCAGCCACTNTGAACCGAGTCTGCNGCTATATTAACNTAACAATGGTGCAAGACTTTCCCNAC TGAGTTTCGGATGGGTTATGTAAAAGACGTAGCCATGCGCACATCCAAGCATTGAGGTCCCTCAGCTAAT GGGCGTTATTGTTTGGTCGAGCGTGTCGTTCACCACTCCGAGATTGTTAACATTCTACGTGAGCTTTNCC CAATCTCCCACTACCTGAAAGGTGTGTGGACGAGAATCCCTACGTGCCNACGTATCAAGTGTCCAAGGAT AAAACGNGGAGCCTTGGCATAGACTACATACCCTTGAAGGTTAGCATCAAGGNGACCNTCGANTCCTTGA AGGNNAAAGGTTTCGCNCAGTTCTGAGAAAGCATTTGAGCCAATGGATTTAATCCAGATTAGATAAAGTA TTTGGAAGACTATTTCAGAAATAATATTTGGANCATGTCAATGTTCTCAAGGAGATATTAGTATGTTCTT GTGTACTTTATTGTTGTTCCATCAAATGAGTTANTTTTCCTTTT >gi|3450073|gb|AI100112.1|AI100112 34487 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104M7XP 3', mRNA sequence CCTTGGACATTCCCCGTCGTTTCTTGTGACAACTCCCATCCGACGTCAAGAATGCTAGGATCTGNGATCC GTTCCCCATCAACCACCATGAGCTACTCAGCCTTGGAACNCGATGATTGGCCCCGAGAGGCGTTTAGAGA GNCCATGGNCCATGCNCCTTTCGTTGCATCTACAANGATNCCACATAGATGNTNCCCAGCTCTGTGGAAG CCCAGTACTGTCCCACACAAGCCCGCATGTGGTGGAATCAGAAGANTNCCGTGACCCTTGACGCTGACCA TGGCGTCGTCTCAATGGGTCCGTATGAAGTGGNCCATNTACAACTACTNTACCGACCGGACTAGGTTCCC GNTTATGCCAGCTGAATNTAAAAGGGACAGAGACGCNTAAGTTACTACCNTTGAGGGTTTTAATGAATTT ATGCTATCATTATTATTTGAATTATGCTTGTTCAAGAGATTGATATATGTATTGTTTGTTGGCCCATGAT GTTTATGCTATATTTGGGCCTAAAATTACATGTTATAATTCATATATGTATTGATTAGCTATGTATTTTC ATATGTTATGATCT >gi|3450072|gb|AI100111.1|AI100111 34486 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104M18XP 3', mRNA sequence ACCACACCACCGGTCCAATCCCAATTCGCCAACTCCCAATCCCAATCCCTATTCNTCNCCGATCCCGTGC AAGCCTTCATTTCCTCCGCCCCGCAATCCTNGCTTTAATCGCCCNTTCGCTCCTCCTCGATGCCGAGCGA TGGAGAAGCACAGCTCTCGATTCAATCTCACGCTCCCATCTCGTTGTTGAGTTTCTCTTCTTGATGTTCG CTCTCGACAAGGTCTATTACTCTCCGCTTGGTAACTTCATGGATCAAGAGACGCTTCCTCAAAGAGAAGC TCGCGAGTGTTAAGGACACTTCGACTGAAGTAAGGAGCTCGATGAGCAAGCCGCCGCCGTGATGAGAGCA GCTAGGGCTGAGATCGCCGCCGCGCTTAACAAGATGAAGAAGGAGACTCAGGTTGAAGTCGAGGAGAAGC TAGCGGAGGGAAGGAAGAAGGTGGAGGAAGAGCTAAAAGAAGCTTTGGCGAGCTTGGAGAGTCAGAAAGA AGAAACCATTAAAGCTTTGGATTCTCAGATTGCTGCTCTTAGTGAAGACATTGTCAAGAAGGTTCTTCCT TCTTAAATTATATTTTTGTTAACTGTGTAATTCTCTGTCTCTCTATCTCAAAACTTATTTACAAGAAATT ACTGTAAATC >gi|3450071|gb|AI100110.1|AI100110 34485 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104L23XP 3', mRNA sequence CAATNNGGGTCCATGGCTTCCAAGCTGGATCAACCGGNGCTATTCNCATTNTGGTCCCGACCTTCCGTTG GCCCTCCGACAGGAAGAGGATCTTATGATNCCGATCACGGGAGAAAGTGCTTGCATGNCACCGGACTTGA ACGCCTCAACATCTCCCCTCAAGGTCGCTGCATTGACAAACTCAGGGGAAATGGCCCTCTTTGATCCCTC CAGGTCTCAAGACTTCCTCTTCATATCAGGAACCAAGATGCGTGGCTTGGCGAAGAAGAAAGAGAACCCA CCAGATGGTTTCATGTGTCCCTCTGGTTGGAAGGTGTTGGTTGATTACTACGACAGTCTCAGTGCAGAGT CTGGTAATGGAAGGGTTTCAGAGGCTGTTGCTTCTGCTTAAATGCAAAAGGTTCCTTGCCCCACAAGTTT CACATTTTCTGGTTGTTAAGTAACTATGCTCTGTAAGAAACAGCTTCCAATAAAACCAATGTAACAACTG TGTGTTCTTTGCGTCTCTGTTGTCAAACTTGTCATCGGGTCGCATCTATTTGTACCATATTTGCTTATTG TGTTAAAAATGTAACAATATTTGTGTATAAACTATTTCTCGTGG >gi|3450070|gb|AI100109.1|AI100109 34484 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104L1XP 3', mRNA sequence CCTTCCAGTNGCTCAGACTCCNCCGTCTCGAGATCTTCNGGATAGTAGGTTGGTCAGANNCCTGTTCTGA ACTCTGCCACNATAGGTTCAAGGCTATTTCTCACTGGGGCATCCNTACAGTTTCCAGGGTCCGATCTCTT TTCTGTTACGTCGCTGGTCTAAGCTGGTCTATCACGAGATTATTCGCTACTCATCTCGGCTTTAAGGAGC TCTAGGCTTTGCACCTTCATGGCACTTGTGGCTCAGATACAGCAGCTTTTTATTGCTATACCTACCGGTA TCACCAGCGAAGTTGGTCTTATCTACCTTGCCTTACCACACATCAAGACATCGGAGATGTACAGCGTTAG GATGCCTAACATATTGAACTTCTCATTTGACTTCTTCTATGCAACGATACTCGTCCTTGCAATCTATGTC CCAGGTAGCCCACACATGTACAGGTACATGCTTGGTCAGCGAAAGAGAGCTCTCTCCAAATCCAAGAGGG AATAAAAGAAAAGATTTAGAAAGAGACGAAAAAGCTCATCAACTGTTTTCTCCTCTTGTCTTGTTCGTTC ATGTACTACTAGTCTACTACTACAACTTGTCTT >gi|3450069|gb|AI100108.1|AI100108 34483 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104L12XP 3', mRNA sequence TGCCAGATCCCTTCCCAGTGACCANTCCNTGCTATAGTGATGGATGAGAGTCTTGAGTCAGGGAAGATAT CACCACCGCACCGCTTCAGATGGTTTATTATTTACTGAACAGACCGNCCAAATGGTCAGGCTTGTCTTGA TACGAAAGAGTTCAATATTTTGAGCAAAATGATGCAAGCCGTTGATGAAGAGCGATATGATGAAGCCGCT GAGTGGAGAGACAAGCTTGGTCAGTTTCGGGCCAAACGTAACTTGAGGAAATACACATGAGAGAGCTCGA TCAACAATTATTGGCTGTGTACATAAACTAAGAAGAAAGTCATTGGTCGGAATCAAAGTGGAGGAAGAAG CCTGAAGTGTCGTCTCTGTATGATGGAGATCGAAGAATGCTTCTGCACTTTACCCATTTCCCTAAAAAAT AAACAAAAAAAAATGTATAATGTATGTATGTAGCGTGATGTGTACATATTACTTATTAATCTATGCAAAT TAAGCTC >gi|3450068|gb|AI100107.1|AI100107 34482 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104K2XP 3', mRNA sequence ACGAAGAAGAAAATGNTGAAGNTGATGTGGGTTNCCGTTTTAGCTCTGGCGNCGGCGATCTCCTTTGACG GTCCCCGGTGNCAGAAGGGNTGACGTGCTCGCCCTATGCAGCCGCCATCGGAGGCGTNTTGCACAAAGCT GAGAGAGCANCAGCCATGCCTTTGTGGGTACATGAGGAACCCTACCCTCCGCCAATACGTTAGCTCCCCT AACGCAAGGAAAGTCTCCAACAGTTGCAAGATTCCTTCCCCAAGCTGTTAAGGAAATGTTAATCATGATT AATTAGTGACAAGTTTCGCTGATTATAGTGGTTAATGCTGGTCTTATCTTCGTCACTACTATTTAGAATA ATAAATGAAGTGATGATGATTGATGATTGATGATTGATGATTATCATCATCATGCTTGAATGTTATGTTT TCTATCTTATAAAATATGAAATATACTTTAG >gi|3450067|gb|AI100106.1|AI100106 34481 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104K18XP 3', mRNA sequence ATGNTTTGCATCCTGAANATCTTCTNAAGGNNCANCGNTCCATATTNTGGACNCTCAAATCCATCGTTCC NTCAAGGGAGCTGTTTGNGAACCCCTTNTTCAATCGTGGCNAGAGCTCTTCGTCCTGGTGGANTTNTGTN CANTCAGCTGAAAGCTTGTGGCTTCACNGGACATCATCGAAGACATTGTTTCCAACNCCGTGAGATCTTC AAGGGTTCTGTGAACTATGCTGGACCANCGTTCCAACATACCCCANTGGGGTCATTGGATTTATGCTTTG TTCAACTGAAGGACCTGATGTTGACTTCAAACACCCACTGANCCCAATTGACGAGAGCTCCAGCAAATCA AATGGACCTTTGAAGTTTTACAATGCCGAGATTCATTCAGCTGCATTCTGCTTGCCTTCTTTCGCCAAGA AGGTCATTGAGTCAAAAGCCAATTGAAAAGGGAAAGAAAACTAATCTGGAGGATCGTTGAATTTATCAAA AAATAAAAGCTTTTTACAGTTTTTAGAATGTTCTGTTGTTTCACTCATGTTTCTGTAACACAATGCAAGA GCNACTATGTCTTCTTTTAGCA >gi|3450066|gb|AI100105.1|AI100105 34480 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104K13XP 3', mRNA sequence CATAGGAACTTACCAGATCGTGGGTTTGGATTGTNTCATGAGTTCTTTGGNCGANCTGAGNCACTGTGGA GAAGTTCANCCGTTATGATCNTAACGGNCGTCTACTAACNTAAACAAGNCANCTCCAGNGGATCACGTCC AGAACGTNCGCCTCGGGTATATGANCCGCATTCAGAGTATATGTAGGGAATCTACCATGGGATGTGGACA ATGGCCGTCTAGAACAGCTTTTCAGTGAGCATGGTAAAGTTGTGGAAGCTAGGGTGGTTTACGACCGTGA GACAGGTCGTTCACGTGGATTCGGGTTTGTCACAATGTCTGACGTGGATGAACTCAACGAAGCCATCTCT GCCCTCGATGGACAGAACTTGGAGGGTAGAGCAATCAGAGTGAATGTAGCGGAAGAGCGTCCTCCAAGGC GTGGATATTAAAGCTGAGATCTAGCTGTGCCCTCTCTCTCTCCCTATCTTGCATTTTGTTTAGACGAGAT TCTTACACTCTTCAACGATTGTTTTTGGCTGAACTCTGAATGTGAAAGTTAAGCTGCTTCTAAAGTAATT TGTATC >gi|3450065|gb|AI100104.1|AI100104 34479 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104K11XP 3', mRNA sequence ACTTCCCGGCTCCTTCACTCTTCACCTTCCCAATTGCCAAGGTTTCCCCGCGGTTGGGAATGTTCCCCCG GTAGGGGTGGCCCACCCTGTCGTGTTGGGATTTAANCAGGAAGTGAAGTAAGAAAAGAAAANAACTGATA AAATAGAGAGACCCTTAATAACCAAAAAGATGCAGAGGTGTAAAANATAAAAAGCAGGAAATTTGATGTA AGAGATAGGAGAAGAGAAAGAAGGAAGATTGTTGTACCATTTCTCTAGTTTTAATGTGTTATGTGATGAT GGACCACACAAGATGATGTAATATGATNTGATATGATATATATAATATAGGACAAGAAGTGTAATCTCTC TAAAGNTATACAAAAGNAAAGAGAGATTATCATTTGAGTTTG >gi|3450064|gb|AI100103.1|AI100103 34478 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104I4XP 3', mRNA sequence CCCTCGGTCTCAAAGGACCAGGTCCCATGTTGGGNTNCACGAAGGCCGACCGAGTTATTCGTAGGAAGAT TGGCNCCAGTTGGGNAATAGCATTTTCCACTGATAGGAGAGATTATTACCGGGAAAGGAGCATTAGCTCA ACTCAACATTGAGACCGGTATACCAATTCAAGATATCGAACCACTTGTCCTCTTAAACGTTGCTTTCTTC TTCTTCGCTGCCATTAATCCTGGTAATGGAAAATTCATCACCGATGATGGTGAAGAAAGCTAAATTATCA TGTACTTAAATTTAGTAGAGAGTGTGTGACCTTCTCTTCATGTTGAGACAAAAGGAAATGGACAGCTTAA ATTGTTGTAATACTTATATCCTTTTGTTTTTAACTTGGAATTTTCTGATT >gi|3450063|gb|AI100102.1|AI100102 34477 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104H9XP 3', mRNA sequence GTTCGAGTTCGAAACCTNGTTTCCCATCNCCCCCGGTCTTGAANCCTCTGTTGTGGCCCAGCCCAACGAN CGGTGGCAAGGATCTCCGTGTGCGTTTGTGACCACTTAAGNGCGATTCCGAGAAGCATGACCCAGAATAA GTTGGCTCAGGATATAATGAAATTCTGCCGGGAGAAGCTTCCGGCATATTGGGTCCCAAAGTCAGTGGTG TTTGGGCCGTTACCAAAGACAGCAACTGGAAAAATTCAGAAGCATATTCTGAGGACCAAGGCCAAAGAGA TGGGACCAGTACCAAGAAGCAGGTTATANGAAGTGATAAAGCTTTAAGAACAACATTTTGAAAATAATGT GTTGTATGTTTTTGCGGAACTTTGCCTTGTGTGTAAACTTTCAAATGATAACAGAAAATATTCTCTTTAT TTTC >gi|3450062|gb|AI100101.1|AI100101 34476 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104H3XP 3', mRNA sequence GCCCCGTTCCCATGGGTTGGGAATNCCCCCAAAGGTTNGTTTGGTTCCCTTNNGATCCAAACCNCTCGGC CCTACCNGTATATATGCGATCCGATTCCTGGGGTGGNTTAANCTTTAACCNCACCATATTAATTACTAAT TTTTGNTTGGTTGGATTAATTTGTGGTNTGGTAAAGTTGCGANAGAACTCCACCAAGGAGTGCGACAACT GTAGCTGTGGATCAAACTGCAGCTGTGGGTCAAACTGTAACTGTTGATGAAATTATTATGGTCTAAAATC ATATATATGGCAGAAAAATTGGGGAAAATATGTGTTTTATGCTAAGAGATGTGTGTGTGTTGTTGGAATA AAGACGTGACCGTTGTGTTGCGTATCAACTCTCTTAAGCTTTGACTTTTCCCAGCTTTGTATTTTCCTAT GTATGGTAATGGTGTGATTGTGTAATGTTTTCATATGTAACGTAAAAAAAATATTTATGTGACATTGACT TTTGTGACT >gi|3450061|gb|AI100100.1|AI100100 34475 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104H10XP 3', mRNA sequence TTGGTNCAAGTCCATGGGGGGATTTCTGGNAATGATAGCGGNCCCACGCTACTACTTCTGGNCATTTGGT GTACCCCCGGATGACGGATCGACGTCCCTTGAAAACTCCATCTTTTCCTCAAGGCCCCTATTTGCTGATG AGCCCAGTCGTGATTGCAAGGCCCAGAAGATGTGAGATTTGCTCATGCGCCTTTTGATGAAATCCACCAA GACTGAATCTTGATCCTCCACAAAACACCAGCCACAACGCACAGTTCAAGTGTACTCAGATAATGTTATT GACTCTTGACCTTTATAGTTGTGGATAATGTGGAAGTGAGATAGTGTTGGCTCTGATTTTTTTCCCTAGT TTTCTGTCTGCTTTTCTTGTCCGATACAAATGTGTTTCCTCCTTGTGCATATGAACTCAAATTGTGTACA AAGTCTTCAAAAGTGCTAGTTTATAGTTTCGTC >gi|3450060|gb|AI100099.1|AI100099 34474 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104G4XP 3', mRNA sequence GAATTTTAGAATGGATAATTCGNGAAGGTNAAAGTTGAACCTTATNTTTGGGTTAATAAGATATCCTAGA ATTTATGGAGAATGGGATTTCCGAGGAATGGAGANTGGTTCCACGCGGAGAATTCCGTGGAGACTTTTAG AAAAATGTTGGAATGGAACAAGAATCCAAATGGGAAGAGCATGGAGGAGGCTGTAGGATCATTATTATCG TCAGGGGATTAATTCTTGATGAGCTTGGCTAATCTTAGCAGAAGAGAGTAAGTGAGTAAGTAAAGAGTGG GTTTTGAATAATGTGTTGTTGGAACTTGAAACAGAGTCTTCTATGTGATTTTGTTTGTGTTGTTATGGAT ATCTTGTTGGCACTTTTTCTGATTTCAGTTGGAAACAGGTGCGTTTGCGGGCAATAGTTGCTTCGGANTG GTTGTAGTAACAATTTATCATAAAGCCTACTAATATTATAG >gi|3450059|gb|AI100098.1|AI100098 34473 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104G22XP 3', mRNA sequence CGAGACCCGTCTTNGGNGGGCTTCCAGTCCATTTCCAAAGGTTAAAGACTTTACNAGGCTAAGTTGGTGG TGTTCCCCTCGCCGTCCCGTCAAGTCCAAGGCTGGTGATTCTACTCCAGAGGAGCTTGCCCAATGCTACT CAAGTTCNAAGGTGATTACATGCCCAATTGCCCAGTNTCAAGGCAGCTATGGAGCTAGTTAAGCTGACTG CAGATTTGAAGGCGTTCAAGGCTTACGATAAGATTCGTTTGGAGCGCACAAACGCACGTCATGCTGGTGC CAGAGCCAAGAGGGCTGCCGAGGCTGAGAAAGAAGAGAAGAAGTAAAATTCGTTGCTTTATAGAGCTTAA TCATTCTTGAATTCTTGTTCTTCTGGTTTTTGATTTTGTGCACGACTCTGTTTTCTTTTTGGTGCGGTTT ATCAATACATAGATCTCAAAGGTTTCTGGT >gi|3450058|gb|AI100097.1|AI100097 34472 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104F23XP 3', mRNA sequence GAATTGCCCAGGTCATCATGATCCAGTCTGGTCAAAGCTCAAGCGATGGGCGGCATGGGATCCGGATATG ATGCTGGTGGCTACGGTGGTGAGCACCACGAGAAGAAGGGGATGATGGACAAGATCAAGGAAAAGCTTCC CGGTGGTGGCCGTTAAGCTTCGAACAATCGTGTATACATATTAAATAAAAATAATGAGGGTTTGTAACGC AGTCGCATTCGGTCGTTGTATTGTGCTTTTTATGTATGTACGTCCTGCGATGTGTGTTGTTTACTTACAT GAGTGTGTAATGAGCATCTGGCTCTTTTTATGTTCTGAGATGTTTGTGTTATGTAATTTCACATCTATAT AAATCTACTTTCTTCTGCTT >gi|3450057|gb|AI100096.1|AI100096 34471 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104F19XP 3', mRNA sequence TATCCNAAAGAAGGACCCTTGGGNCCCATCGNTCCAATCGCCATCGGCTTCATANTTGGTGCCCAACATC CTCGGCTGCTGGNCCCATCCAGTGGTGGCTCCATGAATCCAGCAAGTCGTTCGGACCACTGTTGTCAGTG GTGACTTGTCCCCAAATCTGGATCTATTGGGTGGGACCACTTGTGGGTGGTGCACTCGCGGGACTTATCT ACGGTGATGTGTTCATCGGTTCTTATGAAGCGGTAGAAACACGTGAGATCCGAGTGTAATTGACTGGGTT TTGTGATTGCTTGATGGTTGGTTGATGTTTTGTTTGCGTGTGTATGTTTGGTGTCCACTTTCTTGCAAGA TTGTATGTAGAGAAAAGAAAAAAAGTTATGTCCTGTTAATAAGAAAATGTATATACATTTCACTTCATCT C >gi|3450056|gb|AI100095.1|AI100095 34470 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104E3XP 3', mRNA sequence CAAAGAACCCGTTTGGATTTCTAANCAAAACNCTTGGACCGCTANCTATGNNTTTNCCGGCTNGTTTGAT CNCCCGAGAANNATCTTCCTTCCCGGAGGTGACTNCTTCGCCGGNATCAAGTCCCGACGACTTCTGGATC TCCTCCGAGGCAGCTACATCATCATCAACATCCAGATGAAGAAGCTTCCTCCGTTGTATCCTAGGAGTCA AGGGTCTTTTGGTAATTTTGCTTCGTCTCAGTCGTCGTTGGGTTTTTGTGCCTGGAGATCGTTTTCGGTG GCTGATTTTCCGAGGTGTTTTCCGGCGACGGCGAGTGGGATTGGGTTTAATGACTCGTAGGAAATGATGA TAACAATTGTTTTGTTAAATTTTTATATTTTGAAGTTAGTAACAACCACATCCGGAGAATGTATGTGTAT AGAAGAGTTTCAAAACTTTTGAATGGATCATCCACATCTTTTTTTTCC >gi|3450055|gb|AI100094.1|AI100094 34469 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104E20XP 3', mRNA sequence TACGGNAGNCCCTAAACCGGGACAGTCATGGTTNCCCNACAGGNTTGCTTCATTNCCAGATCAACGCGGG AAAATCCTCTGCTTCCAGCCCGTGTCACTTTCAACAGCGCTAATCCGGGTCTGCAGATTCTCGACTCGCA CTCTTTGCTAACAGTCTTCCCACTGAACTCGTCGTGGGTACTACTTTCCTTGACGCCACTACAGTCAAGA AGCTAAAGGGTGTTCTTGGAGGAACTGGCTAAAAAAAGACTTAGGACTACTCCTTGACTAAAACACCAAA ACCTGTTTCTTCATCTTTTTTTCTCTTTAATTGATTCTTGTCTTCTCTGTTTTGTGTGCCTTGTAATTCT TCAAAACCTGTCAAAATTGTTACATTGTATGTGAGTTTTTTCAATTAAGATCCTGAGTTGGTCACACCGT T >gi|3450054|gb|AI100093.1|AI100093 34468 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104E1XP 3', mRNA sequence TAGACAATGCGGGGNGAATGAAAATCATGGTGCCCTGANCTTCCGCCCCCTTACTTTGTTTTNTNNATAT TGTTTTNGTGNACTTTATCAGAGTGGATAAAGTGNCGGGGAATGTTTTTCTTTTGTACAAAAAACTGTCT TCCCNCCTAAGCAANGTGTGTTAGTTTCTGTTTTGGGCTGTGTTTTGCAAGTTTTTGTATTTCAGAGTTG TAGTGTAGTTGCAAGTGGCGGTTGGATCTTTCACTATCTTGTTGGANTTTGATGATGGTTGATGCTTTTG CTTTAATGTTAAATAAATAAGCATACTTTTGCTAGGTACCATTGCATC >gi|3450053|gb|AI100092.1|AI100092 34467 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104E16XP 3', mRNA sequence AATCCCCATTCNTGGCCCCATTGCCNGGNCCAAGGCCTTTGNCCCCGCCAGNGGGAATTGTCAAGATTTT GGCTGTTAAGGGGCCGNCCAGATCTTGGGAGTTCACATTATGTCACCAACGCAGGAGAATTGATCCCATG AGGCGGTTCTAGCTATCAACTATGATGCATCAAGTGAAGACATTGCTCGAGTCTGTCACGCTCATCCCAC CATGAGTGAGGCTATCAAGGAAGCTGCCATGGCTACCTATGACAAGCCCATTCACATGTAGAAGCCCTCA GGAGATGTGGATTGAGAGGGAGAAGGAAGTAAAGCCGCCTACGACAAGCCAAATCAAGATGACTTTGGTT TAAACTTTTGATTTTTAATTTCTGGTGGATATGAGATGAGCTGAAAGAAAATACTTTAACGGTTTTACCA CT >gi|3450052|gb|AI100091.1|AI100091 34466 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104E13XP 3', mRNA sequence GCTTCTTCCAAGTTAGGNGGGGNCCCAGAGGAAANTNAAAAAACGNNAGGTTCCCAAGGCCAAACCGGNT ATGCCCCAGGCTTATGNCCCAANTCCCATACCGGNGTCCCTGCGCCTTCGTTCCAGCCGGCGGGCAGAAC AATGCCNCCAACANCATCTCTTCATTCAGANTCTCCCCACACGAGACAACAAGCATGATGCTACAGCTTC TCTTCGAACAGTCCCCTGGATTCAAAGAGATAAGAATGATCGACGCAAAACCAGGAATCGCGTTTGTAGA GTACGAAGATGATGTTCAAGCTTCCATAGCTATGCAACCTCTTCAAGGTTTCAAAATCACTCCCCAGAAT CCAATGGTCATCTCTTTCGCCAAGAAATGATAAGAGTCTTGTTTTTGTTTGTTTGTTGTCCTTTAAGACG ATAGTACTGGACCAACCAAACCTGGTGTGTATAACCAACCAACGGTTCTATTGGTTAACGGATTAATCCG GTTTTGGTTT >gi|3450051|gb|AI100090.1|AI100090 34465 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104D23XP 3', mRNA sequence CAAGNAAGTGATCGCCACATTTGAGAAAGTNGCCNGAGGAAGAGGAANGAGANGGCGAGGCTGGTGAGGN TGAGGCCGAAGCTGCCGGGGCTGCACCAGCAGAACAAGGTGGTGGTGGTGCAGGTGACCAAGACGTGGCT CCAATGGAAATGTAAGGCTTGTGTGTGTAACGCTGGATGGAACTATTTTATTTCGATGTTAGTTGGATTT TTACTTTGCAAAATGGCTGCGGGTTTAGATTATATGCTTGAGAAGTTGAAACCATTTCGTCATTTTAACT CAATAGCTGCCATCAAGACTTTCTCGT >gi|3450050|gb|AI100089.1|AI100089 34464 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104D22XP 3', mRNA sequence CCTTCTTCATTGCCATGGTCNCCGNCACTTCCAAAGTGAGAGGCCAGATGATTTTACGCGAGCTCTAANG ATAGGTTCANGAGGGAACCTAGATGGGAATTTCAAGTGGAACTTCAAGCTACTGATNCCAACAGAAATGG GTCTTGATGTTTTCCAAAAGCCGCACCAACTAAGTAAAACAAAACCCTGTAAGGGCATTTGAATAAGTTT GGTTTCTGGAGTGAATATGTTTCCTCTGACTGTTATGAAAACTTTTTAACACCTTCAACTTCATTCTACT TGGTATTATTGTATGTCTTTGATGTGTTATGTGTGCCTTGTGATGGTTTTCAATTAGTTTTACATGTACA ATACTTGAAATCAGATTGTTGCTAGGCTTCAAGCCTTGTCTCAGTTATCTATCTGATAATTTATTCGTAT ATGTTTGGAGTCCT >gi|3450049|gb|AI100088.1|AI100088 34463 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104D20XP 3', mRNA sequence ACCGTTTCTACGTGCANCCATCAACCCAGGACAGNTCATNGTTTTCCCCCAAGGCTTGCTTCATTTCCCA NATCAACGCGGGAAAATCCTCTGCTTCCANCCTTGTCCACTTTCAACANCGCTAATCCCGGGTCTGCAGA TTCTCGACTTCGCACTCTTTGCTAACAGTCTTCCCACTGAACTCGTCGTGGGTACTACTTTCCTTGACGC CACTACAGTCAAGAAGCTAAAGGGTGTTCTTGGAGGAACTGGCTAAAAAAAGACTTAGGACTACTCCTTG ACTAAAACACCAAAACCTGTTTCTTCATCTTTTTTTCTCTTTAATTGATTCTTGTCTTCTCTGTTTTGTG TGCCTTGTAATTCTTCAAAACCTGTCAAAATTGTTACATTGTATGTGAGTTTTTTCAATTAAGATCCTGA GTTGGTCACACCGTT >gi|3450048|gb|AI100765.1|AI100765 34462 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104D14XP 3', mRNA sequence CGTTANACGACCTTACTTTTTCCTGAACNNCCCCCNTNAAATTCCCTNCGTCGCNTTNCCCCCCGTNTGG NAAACCCAATTTCCCGGNTTCGNGCTGGTAAATCCCGTACCCCGGTTTGGTTTCTGGCCGATTTGGAAAG AGTTTGGTAAAGTAAAGTAACCAGCCCACGTCAGGAGAATAACTAAATAAAGGCTGCTTACGTGTCTGTG TGTGGTTGGTTTGTTTGTTGTATGGGTTAAAAAGGATTTTGTTGCTGTTTTAAACGCGGTGTGGGCTTCT GAGGCTACGGTCGCGTTTGGNTGTCGCTAGTTTTTTTTTTTTTTTAAGTTGTTTGTCTGAAAATTCGTGT GGGTTTGTGTTTTTTAGTGGGAGCAAGTATGGGGAAACCCAAATCGACTTGTTGTCCCGTTGCGTTTGAT GTAACGTTTGCTTATGTTATAATTGAAATAAAAAAGTGCTTTTGGGATCT >gi|3450047|gb|AI100764.1|AI100764 34461 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104C2XP 3', mRNA sequence CAATCCAAGGCTGAGAAGCTTAGGGAGAANCTCTGTCTGATCAGTTTGAGGCTAAGAGGNCGAAGNACCA AGGCTTAGCCCGAGAAAGGAAGCATGCTAGGAGAGAGGACGTTTAGCTTAAGGGTCCCGGTGGAGATGTT GCGCCTGTAGCTGCTCCAGCACCTGCTGCTACACCTGCTCCAACTGCAGCTGTACCGAAGAAGAAGTCTA AGAAGTGAAGAGGATATATAGTGTGAAGCTATATCGATCATCAGTTCACGGATTAGACTCTGAAGAAGGT TTTGAATGTTTTATCGAATGCGTTTGTGGAATAACTTTTATTTTCGCAAAGAACATAACTTATGTCAGTT AATCTTTATGCTTTCAGATTTTTAGCTTACAGTGTTTCAACAGACCTACTTTGCAAGTTGTTCTTTTTTT GGTTG >gi|3450046|gb|AI100763.1|AI100763 34460 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104C12XP 3', mRNA sequence CGGTCCGGGCCTTCGTGGGNTTNCCCCNCCCTCTCAAATTCCTTACCCGNCGGATAATTTCCCCTCAGAT CATNTTGACGGAAACTCCCATTTAGGCCACGGGGAGAAGCTTCTGGAGAAACAGAGATTGTTCCCAGAGC ATCCCAAAGGCACACTTACTTGAAAGGACCAATGGACAAGATCACTTCTGTTGCTATTCCTATTGCCTTG GCTGCAAGTTCTCTCTACATGATTGGAACAGGAATCTACAACATGTCGAATGGAATCGGCAAAAAGGAAT AAGCAGCTTCTTGATTTTTCCTTCTTTTTTATATGCTTTTGGTTTCTCAATGTATCAGTCACTGCCCATA TGCAGTAGCAGACTAAGGTTGCACTGGTCTTTTTCTTGAAGCTGTTTATTCCGTCTTGCCAAATAATTGC TTAGTTGCAGACAATGTCGAAAGCTAAAGATGTTTGATGTTATAAAGTTCCAATATTTTGGGGAT >gi|3450045|gb|AI100762.1|AI100762 34459 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104A7XP 3', mRNA sequence GCACTAGCCNGCGAGCTTGCCCCCTCACAGAAGGAAGCTGCAGGCATCTCTCCTGGGTCTTGTACGAATG TCGGTGGGNTATGTGGGTACATTGGAGCAGAAGTGGACACAATTCGAGAAAGCATTCCTCAGAATGTAAA ATGTCTTCTTCTATATATGATGGTTTTCTTTCCCCCAAATACCAACAATTCATCATCTGCGTTATATGTA TGATGTGGCCAATGTTCAGTCTCTTATTTGTTATATCACAATGTTCTAGTCTTCGGGAGTCTTTTCTTGC ATATGTAACTAAAAAATATTTGTGTTTTTGGTTAGAAAGTGAAATTTACCTATAAAAAAAACANCAAGGG TATCCG >gi|3450044|gb|AI100761.1|AI100761 34458 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104A18XP 3', mRNA sequence TTTACCCAAAGAAAGGTTCCACCGGGNCCNATTGCTCCAATGCTATCGGTTNCATCGTTGGTGCCCAACA TCCTCGCAGCGGGTCCCTTTAGCGGTGGGTTCCATGAACCCGGCCAGGTCATTTGGACCAGCTGTTGTCA GTGGTGACTTCTCTCAGATATGGATCTACTGGGTGGGTCCACTAGTCGGTGGTGCACTTGCCGGACTCAT CTACGGAGACGTCTTCATCGGATCCTACGCTCCAGCTCCCACCACAGAAAGCTACCCTTGATCAATCCTA TAGCGTTTTAATTTGCTTGGCTTGCTTTTTGTTGTGTGAAAATGTTTGGTCCTCGTTTCTTCCAAAAATG AATGATTGAATGTGGAGAAAAAGATCAAAGTTGTACTTTGTGTTGGTTATAAATAAGAATTGTATATTTT CAAATTTT >gi|3450043|gb|AI100760.1|AI100760 34457 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103P8XP 3', mRNA sequence CGATATGAACGTGGAATTCNCCCCACTCCAGAAATAAAGNGGAAGCTGCAATTACTNGAGACCGGGACAC CGAGCTGAGGAAGATCCCAGTGAGCTAAGAAGAAGGCTTAGTCGTGTTGGTGCTACAGAGAAGAGATTTT GTGTGTGCATGTGTGTTTGTGGATGCGAGTACTCATTCAGGTAATCTTATGCTATGGATTGCTAATATAT GAAGGTGCTTACAGTTTTGATTCTGGTTTGTTTCTATACAACAAGACAATAGGGTTTTGGTGGGTAAATA TGCGATTCTACTGTCGTAAACGACGATTGTTATACGTTTTGGGGGTTTGAATTCTAATTATCTTTTACCA TTACAGATTGTCTCTGTTTCTGTTAAATGTATTCACTCTTGGATG >gi|3450042|gb|AI100759.1|AI100759 34456 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103P12XP 3', mRNA sequence CCCCTGGGNTATACTTGTTAGGCTTGACCTCTTGCCGGGGTTGACCTGGAATCCATCTTCTCCATTGCCA ACTACCCTTGGGGTATACTCCCTTATGGACCATGCCTTGGCCGAAGGATACTCCTCCTATATTCAAATGT AAAGCTCGACTAAGAAATGAAACAGGCTTCAAAAACGGCAAAAGGACACTGATTTTCTCTACAGGTCGTT CGTTTACATATTTTTGTGTGTATCAAGCCGTGTTTCTCAACTGGCCGCCTTTGAAACCGGTGTCATTTGA ATGTTTAAAGAGAAGGATGAAACTTTTGGTGGTCAGAGCAGTTGATGTGTTATGTGTATATTGCCATATT GGTTGCATTCTCTACTTATAATTATTTTCTTTCTTACATACATTTTGAGTCTCAGTCCTAATAATAAAAG ACCACTTTGGAC >gi|3450041|gb|AI100758.1|AI100758 34455 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103O2XP 3', mRNA sequence GCCTGGTCAATATATCAAGATTAGAAGCACCTNTCCACAGCTCAATGNNATGTTGNATTCAAAANGAAAN AGNCTTANTAAGCCGGGTGGNTCACAAGGTACTTGAAGANGGACAGNAGGTAAGATATCTGATCAATACA GGGGAACTCATCGACACCATTGAGAAGTGGAAGCTACTTAAGGAGGCTAAGGATAAGGAAACCACCCAAG TTNCAGTTACCTCCGCATCTTAGCGTCTCATTTCTTTCTTCTTCAGTGCACTTTTGATATAATAGACCTA TGCATTGGATGGATGTATTGAAACCCTTTTAAGGTNAATTATAATATTTCTGCTCCC >gi|3450040|gb|AI100757.1|AI100757 34454 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103N6XP 3', mRNA sequence AGGCTNGTAGTCAGACCGCCGGAGATNCACTTCCGGCACCGCNTCGTCGGATAGTCTTCCNACCACCGCT GCTGCTGCNCCCGGCGAAAGTTCCGNCCGCTAAGGCTAAACCTCCTCCAATTGGCCCAAAGAGAGGATCC AAGGTCAAGATTCTANGGAAAGAATCATACTGGTACAAGAACGTTGGATCAGTTGTGGCCGTTGATCAGG ACCCGAAGACCCGATATCCGGTTGTGGTCCGGTTCGCCAAGGTGAATTACGCGAATATATCGACCAACAA CTACGCATTGGACGAGGTGGAAGAAGTAAAATGAGAGACATGGTTTATCTCTAAACCGGTTCGTCTGTTT GTAATCTTAAACAAAACCGTATGTACCAAAAAGTTAACCAACAATTCATCTTTTATCTTTTACAATCTCA AGATCGATTTCC >gi|3450039|gb|AI100756.1|AI100756 34453 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103N4XP 3', mRNA sequence AGGGNACCAGTCAATGTATCTACNGGGTNCCGTTGAGCACGTCTCAGTACTTCATTGAGACAAGACCGTC CTCTTGCCGGTTTACGTGGTGGACATGGTATTGTTGCCGGAAGAGATGTTTGGAGAACGTAAGATCTCAC CGATGGCGCCTCCACCAAAATCAAAATCTCCTGATGTCTCAGATGATTCAGAGTCCTCTAAGAAAGCGGC TGCTCCGTCAGAGTCAGAGAAGTCTGGCTCCGGTGAGATGAATACTGGATTAGGGCTTGGTCTTGGACTT GTTGTGTTGTGTTTGAAATTCCTCCTTTGAGTTTGTTTATATATATTGATTTAATTGTGCGGGTTGTAAT AAGAAATTTCTATATGTTTATTATGATGCATGATTTGAAAACTGAAATAAGAGATTATTATTTCGTGTGC AT >gi|3450038|gb|AI100755.1|AI100755 34452 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103N12XP 3', mRNA sequence AGAGCAAAAGACNGCCGGTTTCTCANCGCATTCATGTCGCNCCGATACNCTTTTGGGNCAGATNCNTGGA CCGGATACTGAACTTANCANTAGTTTTGTTAGAATGGGAGTATGATTAGGCCATTCATTACAGTTTATGA TTAGAGGCATGCGTATCCCTTGAGCTTTGGAGTAAGAAAATGGGGAAATGGTATAGATGTGAATGAAGTA TAATTTTTCCTTTGGTATCATATCACCATCATTTGTCCGTCCATTCTAGCCCAATCTCTGGCAGGCGTTT AATGTTCGAACCTTAAGTTTGCATTTTTGGTTGCTGGTTTTTAAAAATGTGTTAGTTAAGACTT >gi|3450037|gb|AI100754.1|AI100754 34451 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103M24XP 3', mRNA sequence GCTTCCTTCNNCGGCAACAAGTGGATCCTTGTGTTGGAATCGGATTTAGAGCNCCGGATTTGTGTACCGT GAGCACGGAAACACTCCCGGATACTACGATGGACGGTACTGGACAATGTGGAAGCTTCCATTGTTCGGAT GCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGTACCCGGGCGCCTTCATTAG GATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTC ACCGAAGCTTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCTCATTTCATTTCCTATTGTCTG TGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGATTGTCAAATGTCTGATTTATGAATATGTAATTTA TAT >gi|3450036|gb|AI100753.1|AI100753 34450 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103L23XP 3', mRNA sequence GGAATTTCCAGTGTGGCGNCCCCACAGCTTGGCATTCCCAACGGCGATCTTAGTCGGCAATCCCCNCCGC CAATTGGATGCCAGGATGGAAGCAAAGAATCCCCCTATGGAACTGATTAGTGAGGTTCCACCTATCAAAG TTGATGGAAGGATTGTTGCTTGTGAAGGAGACNCCAATCCGGCCCTAGGTCATCCAATCGAGTTCATATG CCTCGACCTAAATGAGCCTGCGATCTGCAAGTACTGCGGCCTTCGTTATGTTCAAGATCATCNCCATTGA GGCAAATTCTGAAAGTGAATTGCTGGTCTCTCTCCCCTTTTTATTGCATTTTTAAGTTTGTGTATTGTTT TTTTCTGGTGTGCCTACTACATCTTCAGCTATATTATCTAATAAAGGATTCGATCAAAGTCGGGTAAGTT TGATT >gi|3450035|gb|AI100752.1|AI100752 34449 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103L16XP 3', mRNA sequence TTTTCCAAGGAAAAATTTCTGAAAAATTCNGGGACCACNAGAATGCCTTCCAAGCCCGTCAGGCCGCTGG CCAAGCTGAGGAGAAGAGCAATGTTCTGCTGGACAAGGCCAAGGATGCTGCTGCTGCAGCTGGAGNTTCC GCNCAACAGGCGGGAAAGAGTATATCGGATGCGGCAGTGGGAGGTGTTAACTCGTGAAGGACAAGACCGG CCTGAACAAGTAGCGATCCGAGTCAACTTTGGGAGTTATAATTTCCCTTTTCTAATTAATTGTTGGGATT TTCAAATAAAATTTGGGAGTCATAATTGATTCTCGTACTCATCGTACTTGTTGTTGTTTTTAGTGTTGTA ATGTTTTAATGTTTCTTCTCCCTTTAGATGTACTACGTTTGGAACTTTAAGTTTAATCAACAAAATCTAG TTTAAGTTC >gi|3450034|gb|AI100751.1|AI100751 34448 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103L14XP 3', mRNA sequence CCGGGAAGCTCAAGCCGCCAACGGATCCNAGGAAACGGATTGTGATAGACTTCACTGCAACATGGTGCCC CACCTTGCCGTTTCATGCCACCCGTCTTTGCTGACTTAGCCCAAGAAGCACCTTGACGTAGTCTTCTTCA AGGTCGATGTTGACGAATTGAACACTGTTGCTGAGGAGTTTAAAGTTCAGGCAATGCCAACGTTTATCTT CATGAAAGAAGGAGAGATCAAGGAGACTGTGGTTGGTGCTGCGAAAGAAGAAATCATTGCCAATCTCGAG AAGCACAAGACAGTTGTTGCTGCTGCTTGATTTGCTTTTCTCTCTTACCTATTTTGCTAAAATATGTTTG GTGTTTTAATAAATCCTTTGTTCGCCCGAGTCTTTTCACCTTAAATGTGCTCTTATGTGTGGTGGTGAAT AAATGTTGTTGCAAACTTGATTACTC >gi|3450033|gb|AI100750.1|AI100750 34447 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103K9XP 3', mRNA sequence TCCACACCGGTCCCATGGGCTTTCTCTCCAATCTATCCTGGAAANTCCGNTNCCATCGTGGTTGAGTCCC TCANAGCTTCCGATGTTGAGGTACATGTCCAATATGTTCCAGGTAATTTTGGTGAAAAATGCAGGAACCA TTCTGGGGGAAACGAGAATACTCACTGGAGAATTGAAGGTTTAATGTTAAGTTCATTGTCGGACCTAGAC ATGGACTGGGAAGTGCTGCAACAGTCAATGCCGTACCTCAGGACCGTGACCGCAAACTGGTGTCCAGAGC TAGAGTCTTTCGCGATTGAAGATGTTGGCTTTAGAGGCGGAGTGTGGATGAAAACACCATTGCACAGAAC CTGATGAAACGTTTTAAGCAACTAGATCAATGTTTATTAAACAGTGACAATAAGTTGGTGTATTACATAT ACCTTGATACAATGTAATGTTGCTTTGACCGTTTGGATTTC >gi|3450032|gb|AI100749.1|AI100749 34446 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103J24XP 3', mRNA sequence TTTGGGCCGNATCCGGAACCTGGAAAACCCNGGAGGGTTTTACCCCCGGANGGTTTATTGATTCCCCTGG GATTACAAAGGACCATAGCTTTGAGTTGTTNCCATTTGGTTCTGGTCCGGAGAATTTGTCCCAGGAATAG CTATGGCGATCGCAACCATTGAATTGGGGCTCTTGAATTTGCTCTACTTCTTTGATTGGAATATGCCTGA GGAGAAGAAAGATATGGACATGGAAGAAGCTGGTGATCTCACTGTTGATAAGAAAGTTCCTCTTGAGCTT CTGCCAGTTATTCGCATCAGTTTGTAGATGAGCTTGGAGAAAAACATATGGTATGCTTATCGTATAAACC AGAACGCTTTTTCTTTCTATTTTGTTTTTTGAATCTAATGTTAAATTATATTCAAAATAAAAATAATCGT TGTTAC >gi|3450031|gb|AI100748.1|AI100748 34445 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103J22XP 3', mRNA sequence TGATCCAAGGAGTTGTGGAGCCACGAGGTTGGTAAGANCGGAGTATCCAGACAAGTGATGAAAGGATTGT ACTATGGAACGAGAGAGAGTGTAGGATTGGCTGCAGAGATGGTGAAGAGGAATTTGGTTGGAAGAAGTGA GCTTAGATTCTTTGATGGGTATTGTGGTTGGGAAAAAGAGCAGTTAAAAGCAGAGATCTTGGGAGGGTAT TGGACTGTTGCTGCTTGTAGCTCCACTGTTGTTGAGCTTGGTTCAGCTGTCCAAAGTCATGGTCTTTGGG ATGAGGTTCTTGGGCTTATTGGGCCTCAAACGGGCTCTGTTATCTAAACCTTGTTTTTGTACTGCATTTC ACTAATGGTTTATGGTATGACTATGTGTATGGTTTATCAATGTACTGTATGTATTAAACATCCATCACTA ATTTATATTTGTTTGTTTCTCGTTT >gi|3450030|gb|AI100747.1|AI100747 34444 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103G2XP 3', mRNA sequence CAACCGATCCAACCGAGATGGANCTTGATGTTTTCAAAANCCGAGCCAATTGATGAAAGAAATCCCCTGA AAATTTCGGTTGAATCAAACTTTTTCGTACTATTACNCAGTGATGCTTTTNCCTAAAGTTTGCTGTGACG GTACCAACCTGAACAGCTNCATTTTANCAGTTTGGNCTTTGNCTTTGTCTTTGGTCTCCTTTTTGGGTCC T >gi|3450029|gb|AI100746.1|AI100746 34443 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103G20XP 3', mRNA sequence TTCCGGGGCAAAACCCGGGTCGATTTCCCCNGGGNTTCACATACATCGNCGATTNTAGTGAAGGATNTTT AGGATCTCTGGATTCATCGGGTAAAAGTNCCGGNNCGGNTGGTAAAAAACGTGGAGCAGCACGTACCGGA TATTTAACCTGGGAAACACATCTCCGGTTACAGTACCGATTCTGGTGGATATATTGGAGAAGCATTTAAA GGTGAAAGCGAAGAGGAACTTCGTGGAGATGCCAGGAAACGGCGACGTACCGTTCACACATGCCAATATT AGCTCAGCCCGAAATGAATTCGGGTATAAACCGACAACCGATTTGGAAACCGGGTTGAAGAAGTTCGTTA GATGGTATCTTTCTTATTACGGATACAATACTAAAG >gi|3450028|gb|AI100745.1|AI100745 34442 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103G1XP 3', mRNA sequence GGNTAATNATGTTATCAAGAAANGTATNCCTCCTGAAGNTGAGCATCTTAANTACATTAGAGCTCGTATG GAGNAACTCAATATCAAATCTGCTTGATAAGGTTTTANAAAAATTCTAATGCTCACAGTATGTGTCTTTT GTTCTTGTGTCAGTTGCTATGTTCTGTCACTTAATGTTTGCTATATTGAAACACGAAAATTTGAAGT >gi|3450027|gb|AI100744.1|AI100744 34441 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103G18XP 3', mRNA sequence CTGCCTTAGTGCCGTTGATTGGCTAAGGAGNTTGCTTCCTTCCCGCAACAAGTGGATTCCTTGTGTTGAA TTCGAGTTGGAGCACGGATTTNTGTACCGTGGGCACGGAACCCTCCCGGATACTATGATGGACGGTACTG GACAATGTGGAAGCTTCCCATTGTTCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATG CAAGAAGGAGTACCCTGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATC AGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATCCCCTTTCTGGAATATTCAGCGTTGAT TATTCTGGAACCCATTTCTATGTGGTCAATGCAAATTTAAGAAATTATTTGCCGACTTAAAAGTTGAGGA ACTATTGTTTGAAAGTGAAAATGTTATTCCTATCAGTTTCTCTATAATTATAGTTATCATTTC >gi|3450026|gb|AI100743.1|AI100743 34440 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103G15XP 3', mRNA sequence AAAGCCGAGACCNGCCCCGCGNGCCCCGATCCCCGACCCGACCGGGCGGTTACAATTCTCCTTGCTGNGA ACCTTNCAGGCTCNNTCCTTTNCCCCAACAGGAGACGAGAGTTTACGAAACTTATCGGAGAATCGTGGAG CATCTCTCTACCGAAGAACGAATGGTTTATCAAGACATTGGATTGAAGGATAAGGAAAGGTATCAGAGGG AGTTGAATGAGTACAGAGAAACGTTGAGACTTAGGGATGGTGACATGACAAACGGCAAGGCTTTTTAGGT GATTTAGTTAAAACGGCAAGTCGTTTTGTTGTAGGTCGTTTCTCTCTTTTAAGATTGGACGCCTCGCCGT TTCTTTTATTTTCTAGCTTATTGTAGTTGTCCATGCTTGCTTAACTAGGCTCAGTGAGAGGCTAGACTTG CCAAACTTGAAGAGTCTTTATTTATTTAAGAATTTTAGATGTTCTAATGTATTAATCCTTTTTCGT >gi|3450025|gb|AI100742.1|AI100742 34439 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103F6XP 3', mRNA sequence GCCACTTTTTTCATCACTCNCCATACAAGCAACAAGNCTTTGATTCTGATTTGGCTTACCTCNGTTGGTT TGTGTTATTAGAATACCTGGAATTACCGGTGGCTTTGGTTCTTCTCGCCGTGGTGGCACCAAATTTGATT GCTGGCACATTCAGAGACAGTTGGATTGGTTTAGCTATATGTTTAGGTATTGGATGTTACTTGCTTCAAG AACACATTAGAGCTTCAGGTGGATTCAGAAATGCATTTACTAAAGCCAATGGTATCTCCAACACCGTCGG GATCATCTGTCTCGTCGTCTTCCCCGTCTGGGCTCTTATCTTTTAAGTTAACTCTTCAGTTTCTTTTTCC ATTTGTCTTTTTTTTTCATGTAAGAGTGATTGCTTTGTACGATCTGTCTCTCCTCGTAACTCTATCAATG AATGTGATTTGAAT >gi|3450024|gb|AI100741.1|AI100741 34438 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103F4XP 3', mRNA sequence GGTTCCATTCNGTGGGTTCNGGTTTTGGACCCGATCAGAGNTTCGAGGGGGCTNTCTAGNAGGATCCATT GAGATCNCAATGTGATGTTGAAGTTGACCCCTTATGCTAAGCCCGCGAAGGGGGATGTCACTGTTAGCTG AAGCNCAGGGAGTTAAGGCTAAGAAGGAGAAGCTCGCCAAGAAGAGGAAAACCGTTACCAAGGAGGAGGC GTTGGCAATCAAAGCAGCAGGCAAGTCGTGGTACAAGACTATGATCTCCGACAGTGATTACNCCGAGTTT GATAACTTCNCCAAATGGCTCGGTGCTAGCCAGTAATAATCTCGTCTGCTTTGGAACACTTTCCATATTT TAGTCAAAAGATTTTGGTTTTTTTAATCTGTTTTGTCTTTGGGTGTCTGGATATCAAGTTGAATTATGAA CAAGTTTCACTTTTTTACATCTCCATTTCTT >gi|3450023|gb|AI100740.1|AI100740 34437 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103E3XP 3', mRNA sequence CACTTTTCATCCGTGCCNCTAGTGTGAANGNTGGTGGAAAGCTGTGATGATTGGACTCTCACAAGCTGGT TCCCGTTGGAGAAATTGACATNANTCCGACTTGTTCGTGGAAAGATNAAAGTTATAGGNTCTTATGGAGG AAGAGCAAGACAGGATCTTCCTAAAGTAGTGAAATTGGCAGAGTCAGGGATTTTCAATCTCACAAACGCA GTCTCAAGTAAATACAAGTTTGAAGATGCAGGAAAAGCATTTCAAGATCTCAACGAAGGCAAAATCGTGA GCCGAGGTGTTGTTGAGATACTATAACCAATATAGCCTTTTGATTCTGGTTTGTGAATGACTGCTTCACA CCTGTTTCACTGAGGTCTATTTTTAGTTGCTACAATCTTCAGACAAGGTCATTGTTAATCTGATATTTGT GTTTGTTTAGACAGTGAAAAGG >gi|3450022|gb|AI100739.1|AI100739 34436 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103C8XP 3', mRNA sequence CGGGATTANCCTTTTAGNCCCTNCACANAATGCCGTNCGAAATGATCCCAAGGATCAACTGGGATCTGCA ACCCCTTGCACAAGCACAGAGACTCAGAGGTCTCACCTCCGAAGGAAAGAAGAATCGTGGTCTTCGTGGA AAGGNTCACAACAACCACAAGAACAGACCTTCCCGCAGGGCAACCTGGAAGAAGAACAACAGTATCTCTC TCCGTCGTTACCGGTGATCAGTTTTATGTTTTGTTTTTTCTCGAACTGGTATATCTTCAGTGTGGATTGT GTTTCGGAATTCTGGAATTACATTGGGATGGAAGACTTTCACATTCAAGAGTTTGTTTCAAGTTTTGAGT TCTTTGATTCTGACCATAAAGCAATGTTTCTTAGTTATTACTTATTTTTGATGATTAATTTTTCCCTACT T >gi|3450021|gb|AI100738.1|AI100738 34435 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103C6XP 3', mRNA sequence CAATCACCAGGCNTATCGCGGGCCCTTACTCCTGGGGATTGAAGGGGGNCAGGCAAGGGATTGCAGCCCC AGAAATCCAGACCATCCTCACAGATCCTGTAATGAGACAGGTACTGTCTGATCTTCAAGAGAATCCAAGC GCAGCACAGAAGCACATGCAAAATCCAATGGTTATGAACAAGATTCAAAAGCTTATTAGCGCTGGGATCG TCCAGATGAAATAAACTCAGAAGAGTTGAAACATCGAATATCCGTTTTGGCAGATTCATTTTTTCTCTTA TATCTTTGCAATCTGCAACAATTCTAGATTTGTGACCGGCTGATTTCCCATGTTTACTGACGTTGTGTTC CGAACAAATTGCAATCATATTTTCTTCTGATATAACATTTACTGCGATCCTTAAAGTTATGTTGCTTTAC ATC >gi|3450020|gb|AI100737.1|AI100737 34434 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103C24XP 3', mRNA sequence GCAATNTTCCTANCGTGGCGATAAGGNGGTCTGNAACCTGGTTGTTGACCGGTTCGGCTCCGGTCCGGCG ACCCAAGTGTAGGGTATAATTGGGATATGNGCAATTCTCGATGGTTAAAACTGGAAACACATGATAAATA TGAAGGCCACGTTCAAGCTGGTTGCTTCTTGGAGATATAAAAAAACTTTAGAAAAGGTTCCGAATCTTTT GTATGTCGTCCTTGCGAAATGACGGTAAATTTGGTCGGTTGATTTTTTCAAGTGTGACTGTATAAATATT ATATTGTTATAGATAAATTTGTTAGCTTGATTGTAAAAAAATTATTGTCGAGTGATTTTATAGTTTTTAA ACTTATTTTTGAAGTTGTTGTGTGATGTTACTAAAGTTAGCGTTAGATTTTATACTTAAAAAATTTAATG TTAGTCCT >gi|3450019|gb|AI100736.1|AI100736 34433 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103C16XP 3', mRNA sequence TNCAGCGAAAGCAAGCGCGNGTNCAACAGGNGAGTGCGTGATGTTGTTGAGCAAAGCTGGACTGCTGACT AGTAGTAGTTTGTTGTAAGCGTTGTAGCTCTCTCTACTTTCTCTCAATCNCGATTCNGCAACNGCTTTCT TCTCTTTTCATTCATGTNTTGTGTTTCCAAAACTNTTTAAGTGATTCCATGCTTTGATGTAACCCAACAT CCTTAAAAAAACAACTTTGTACC >gi|3450018|gb|AI100735.1|AI100735 34432 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103B2XP 3', mRNA sequence TTCNCATAACAATCAACCAAACCANTTGNCCACCATGGTTAGGAATTTCAGGTGAGAGGTATTCATCACC TCTTTANCTCTCTTTTTTACTCTTCTTNCCTCTGTTTCTTCAAGACTAAAAACTCTCTTTTATGTAATTT GTTGTCATANCTTGTAAGCTGTGTGTTTCTGATTCTATGTAAGAAAACTAAAACCTTTCATTTTCCATCC TCGGTGGTTGGAGAATGAAACTGTGATTGCAATATTTTACTTTNATCTGAT >gi|3450017|gb|AI100734.1|AI100734 34431 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103B24XP 3', mRNA sequence AGAACGTTTTCCGCGGCNCCAAATCTTTTCCCNGATTCGGTTGGGGTAAGGNNGANGGATGGTGGGAAGT GGNNCCCCNCGGGNGGGAAGTCCACNNCAACTGCAAGCATGCGTAGGAGGAAAGCCGGCCNGCGGTGCTT GTTGGAGGAGGTGCCTCTGGTGGTGCAGCCGGATCCATGCTTCAGTTCTACACCGATGACGCACCTGGTC TCAAGATCTCCCCCAATGTTGTTCTTATCATGAGCATCGGTTTCATTGCTTTCGTCGCTGTGCTTCATGT TATGGGCAAGCTCTACTTTGTCAAATGATGACAAAGATAATAGTTGAAGACAATGCCACCCTAAGTGACT GCTAGTGATCCAAATATTATACAGTGGTTTCAAGTTAATGTTTTAATTTTGTGGTTTATTACCAGAGTAT AAACGATCTTTCACAATTCCAGTTTCTTTACATTCAAATTTTCAATATTCTTCACAC >gi|3450016|gb|AI100733.1|AI100733 34430 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103A17XP 3', mRNA sequence TGNCAAGAACANTCTTACCACCAAACTGCGGCAATAATNTCCTGCAATTTATGANGAGCNCAAAGNCGAA GACGGGTTTCTNTNCATGAGTTACAGTGGTGAGAACACGTTCGGGATCTTCTTCTAATGCGCTTGGAATA TGTGGATGCATCAGATTATCAATGTACAGTCTGTCTATTTCTCTGCTTGTCTCTAGTTTTCATGACATTG GACGAAGCTTTTGAAACTTGCATGCTATGTTATTAACATGATAAGGTCTTCCGTTCATGGTGTTAATTTG GCTTTATGCTACACTTAATTTCAAACTTAGTCGCTATANATAGTTGAGTTC >gi|3450015|gb|AI100732.1|AI100732 34429 Lambda-PRL2 Arabidopsis thaliana cDNA clone 103A14XP 3', mRNA sequence GGCTTGATTGTTGGATATGGGNACTGCGGTTCCACTGGTCCAAATGTCTGTGTAAGATTGAAGCTTCAGG TGGTGAGCTCACTGAGACGTTGCAGAAGACTTTCCCACCTGATTGGAGCTCGCATCATCATCACCATGGC TTCTTAGATCAAGTTTCTGATGTTGACTCCGATGAAGATGATGTTGATGGTGAAGATGGTGAGGACGATG AAGATGTTAACTCTGTTTCGGATTTATTATCNCCTTACAAGTAAGAAAAAACTGATATTGTAACAACTTA AGGAAAGAGCAATATCAGCATATTTTTGTAATTTTGTTTTCTTGTGTTTTACGTTTTTGCAAAATAAACC TTATTGAACG >gi|3450014|gb|AI100731.1|AI100731 34428 Lambda-PRL2 Arabidopsis thaliana cDNA clone 102B8XP 3', mRNA sequence TGTTAAACCGGCTTCNCCCCGCCATCCTCCTCAGGATTGCAAATTTTGCNCNTTTAAGGAGGAAAGGCCC CAAATGCCGGGCTCTTGATATAANCCGGGAGGATTCAGNAACTCTCTGCTTTGACACTGATGGGAGCTCC GCTGGTTGATATGGAGATCAGAGGTGTCCCCTGCTCTGCGCTTCTTGGGCGATATCATTTGGAAATAAGA TCATTACATATTATCNCCACAAGGATGAAGAACAAGCAGGTTCACTTGTATGAGATAGTGTTGGTTAATA CATTACATAGTTTTTGGTATAGATGTTGATGTTTGTCTTTGATGGGTTTGGTCTTTGGCTAAAAATGAAT ATCGACGAGTTTTTCAAACTGTTAACAGATTCAGTATTTGCTACATTTTGGTGGGTGT >gi|3450013|gb|AI100730.1|AI100730 34427 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147K6TM 3', mRNA sequence GATTTGGAGTCNTATAACGTCAGGGAATCAAACTGTCCANTCCATGGTGTGTGCTGAAGGAGACCTNTCA GACAAGTCNCTTTCCTTGCTGGGGAATTGTTCTTGGATGGTTCCTGTTCATTGTTGGATTTTTCCTTGGA GCAATCCCTTGGTATGTCGGATTGTTCATCATGATGTTTGGAAGGAGAATCGATTACAGGGAGAAACCAG GATACATTGCCTGCACTATCGCTGCTATTCTAGCAACAATCGCTGTGATTCTGGGTGTATCTAAAGGAGC AGACGACTGGTGATGGATCAATCATCTTGTGGGGTTACTCTAAAAATGTTTGTATAGGTTTCTTTATCGT GTGTTGTATTATCTACTTCCTTTTTTACTTACTCTATGAAGAAACAAGAAAAAAAAAAGTGTAAACTTCA CAAGAATTATTTGAGTTTTGTTATCTAAATAAGAAGAAGTC >gi|3450012|gb|AI100729.1|AI100729 34426 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147K5TM 3', mRNA sequence GACCAGGGNGTTTTCTAGAANATCAGAATATAGTTCGCANNTAGAGTGGGAGATTACNAATNGCAGTGAG ACTTGGCACTCACTTAATCCGGCCTTCAGTTNTTCTTCGCNGATCAACCAAGAAGACGGTGACATTTTTC ATCCCCCCAAAAATCAGCAGATGGTAGCATGGGGACTACGGGTAACTCGTCTTCCTTTCCTTAAGGATAG ACATGTCAGATTTCAGCATATGGACTACAGTACATACTACATAAGTTGGGGACACTCTTGAACATTGTAC ATTTTACTGTAAGTCTTGGTAAATAAACTGTTTATATCGTTGATCATTTCTCATTTGCAATTNATGTGTT ACCAATGCAATGCTCTTTCTTATTNACCCGAGGGGGTAACTCTGTAACATTGAGGGTGAGAGTGTGCAAT CTGTAGATATTTCCTTACCTCTTAATAAATAGAAATTTCTC >gi|3450011|gb|AI100728.1|AI100728 34425 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147J24TM 3', mRNA sequence GCCAGTCATGGGGGGAAGGCCGGNTTGAATTTGGGNTTGACCATGTATTGNCACCATATCCTTTTTTAAC GGGGAGCTGGGGATTGTTGNTCAGATAAATTCACAGTTTGCNGATGCCAAATGGATCAGATAGGATCACT TCACATACATTCAGGGANTTCTTAAAAAGACCATCGAAGACCCTGAGATCAAAGGGTGGTTAGCTTTGGG CATCAAGAAGAAGAAAGGTGGTGGAAAGAAGAAGAAAGCCCAAAAGGCGGGAGAGAAAGGAGAGGCTTCA ACAGAGGCTGAGCCAATGGACGCAAGTAGTAATGCTCAAGAATGAGTAGGAAGATTTGTCTTTGTTTCTT TTAAAGAATTTTTGAAACTTGAGGTACCTCTTTCGTTGTATGTTTGGGTTTCAAGAGAGT >gi|3450010|gb|AI100727.1|AI100727 34424 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147H10TM 3', mRNA sequence GGGACCGGACCCCCTTNTCAGTATATTCCTAGGGATCCACGGGGGNGGTTGNTTTTTTAAGGNGGAGGAA CAAACAGGGGNAAGGTACAGGAGGTNGAATNGTGTAAGTCGATGGTTCAATACCCAGGAAGCACGGGGAT CAATACCGTAGACTCCTAACGGTTGTTGAGGGCTTCCGTGAAAATGAGGCTTCATCAAGTGCATCTATAA ACAATAAAGAAGAAGAAGCAGTCAACTGTGAAGAAGACGATTTTATTGACATTGAGTCTCTTTTGAACGA TGACACATTGATGATGTCTATTTCTCCTTGATTTTACTTTCTGACTCGTATTCATTTTTCCTTCTTTTAC TTTCTAACTTTATTTCTTCTCTGTAAATACCATAGTTGATATTTACCGCTTAATTTATTACTTGGATTGA AAT >gi|3450009|gb|AI100726.1|AI100726 34423 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147G6TM 3', mRNA sequence AGGGNAAAATTGAGAAGATNCCGAGGAGAGGAGTGAAGTTGAGGANTTTTAGGAACCCNAAAATTTTTTT NTTTGCTAAACTTCAAANGAATCAAAACCAGCAACAGTCCAAGGTGTTCATCAAAGTCCCCTTGTTCAAT CGAGCGAAGTCTTTCAACAAGGTTTTGCGAGTCTTTTATCGACTGGAGATAAACCATGAAACACTGGAAC ATCGTCGCACATATATATAGATTATACAAAGCAAAAGAATTCTCAAGGTGTTGTCTCATTTTTTCCTACC TAAATACCTCACTTCTTTAAATGACAGTTGAGTTCTTCTTTGTTGTAAGCTATAGAATAATTTGTTCCTT CAATCATTCATAATTTGATCTTATTCCATTTT >gi|3450008|gb|AI100725.1|AI100725 34422 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147F18TM 3', mRNA sequence GTAAANACCNGGAGGGGGGGAGCATTGAACGGNTNGAAGGGGAGGGGTTGATCGTGCGGATGTTCTGGGA AGTGTTTTTGGCGTGTAAACAAGAATGAAGAAATTGCAGCTAATTACCTTCTAAGATCAACATGCATGGA GTTTGGAGGATCAATAAACAGAGCAAATCCATTCCTCCCTCTAAACTCAGACCATCTTTCGGTTTCTTTT TCTTCTTCTTTTNAAAANGATAATTTTTTCTCCAATGCCATTTGACAGTTTCATGTTTATGTTCATGGGA GTTGATGTGTTTATGTTACTATTAAAACTATCATAGTTTATCTGGTTTGAAGATGCTCCTCTTTTATCAT ANTATTAGCCTTTGAATC >gi|3450007|gb|AI100724.1|AI100724 34421 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147E14TM 3', mRNA sequence TTAAAGGNCCANTCAGGGTTGTATAGAAATCCAGGGGGTGGTAGGGAGCATTTCAGCATTCAGGAAAGGA TGTTTGGGCAAAATGTTATGGGGGGAGATATTTTTTCGGGAGGAGAGTTNTTAAAGAAACAGGCGGCAGG TAAGAAGAGAATGAAAGCCATAGGTAGAGTTGATGTCCCTCAAGAAGCTTTCATGGCCGTTTTCAAACTT GAACGAGAAGTATTGTGACATNTTGNGGGTTTTTCCACTGAGTCACTCAAGATTCACTACATCATATTTT ATTTTATCATTTTGTAATATTNTGCAAACTAATTTCACATAATGCAATTATTTTTCGCATTTC >gi|3450006|gb|AI100723.1|AI100723 34420 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146P14TM 3', mRNA sequence TCAGGCGGTTCATTGGTTTTCAGGGGAATTTCAGGGATGGATCCNTCAGAGATNCCGTATAGCACAAANT CATTNACNTCNTCATACTCCAAAGANCCATTTCAAATTGGTCAGCCCCTTTGGNTCCCATTGGAGCACCT GANTCAACCACAAGGAGAAGAAACGATATTAACAAAGAGAGAAGAATGGCTTCTAAGGTCAAAGGCAAAA GAATCGTTGTTTGAGATAATAATTATTATTCATCTCCAAATTTCAAAAGTTTCCTTTTTGATAGATTGAG >gi|3450005|gb|AI100722.1|AI100722 34419 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146K17TM 3', mRNA sequence AAATTTTTGTNGATTCCCAACCGGAAATGNTTNATCTGGAANGTAAANTTCAGGATGGCCCGANGAAGAT TNGTTTCAGATTTTAAGATTGNTGGGAAATCACTACCACAAAACGGTAAAGGNGGTGTAATAGAATTAGT CACTCCTGAGGAGGAGAGATGGGACATCAACGCAAACATTGCCTTTGACATGGACATGTTAATGTTCACA CAATGTTCCGGAGGAAAAGAGAGATCAAGAGCTGAGTTTGAAGCTTTGGCTGCAGCTTCTGGCTTCTCCC ATTGCCAGTTTGTTTGCCAAGCTTATCACTGCTGGATTATTGAGTTCTGTAAATAATATGTCTAAAATTA TAATTAAAACTAAATCCTCATAATTGTTAATTTCATCTGTATTTCAGTTTTTTGTTTGAAATGGTCATGC CTCTCTTTGTCTTTCGAGCAATATGAAATAAAAATCTTTTCTATTTTTG >gi|3450004|gb|AI100721.1|AI100721 34418 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146H12TM 3', mRNA sequence GGAAAAATTCCCGGGAAAATTNAGNTGGGGAGNAAANCTGGACAAGGNGGAAGTTTNCCATTTGTTCGGA ATGCCACCGATTCGCGGTTCAAGTTGTTGAAGGAAGGTGAAAGAATGCAAGAAGGGAGNACCCTGGCGCC TTCATTAGGATCATTGGGATTNGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCC CCAAGGTTCACCGAAGCTTAATCCCCTTTTTGGAATATTCAGCGTTGATTATTNTGGAACCCATTTTTAT GTGGTCAANGCAAATTTAAGAAATTATTTGCCGANTTAACAGTTGAGGAACTATTGTTTGAAAGTGAAAA TGTTATTCCTATCAGTTTCTCTATAATTATAGTTATCATTTCATTTCATTTTTG >gi|3450003|gb|AI100720.1|AI100720 34417 CD4-16 Arabidopsis thaliana cDNA clone H7B3RP 3', mRNA sequence GGAACCAATTTCCNTCTGTTGTTTTNCCCCTAGCTACCCCNTNTCTTGGTCATCGGTGGCTATCAGGCTA TAGACTGTGGAACACAATGGAGAACAAATGTATGACNTTAGCAGGCCACGAGTGTGTGATCTCTGCCTTG GCTCAGTCGCCTTCGACGGGANTGGTTGCGTCTGCAAGTCATGACAAATCCGTAAAGATTTGGAAGTAGA AATATTTCTATGTTCGTCTGAAAAGAAAAGGAAAAAAGAAGAAATAGCAGAGAGCTCAGGACTTTTTTTG GGTCTAATTTTTTTTTTTTTTTTAATGTTACATTAATAAGTTGGTTTTTTTTTTAAATTGGGTTTGTTTA TGTCAAAAGCAAAGAGACTTGTGATATTTC >gi|3450002|gb|AI100719.1|AI100719 34416 CD4-15 Arabidopsis thaliana cDNA clone G2A1RP 3', mRNA sequence TATTGGAATNATACAACGGTCCACNTTTTAAGGGACTTCCTCAATGTACTTCTGTTGTTGGGACCCCAAC GGAAGATTGGTGGCGTCTGTTAGTGAAGACGCTGTAAAATTATGGTCACTGGAGTTCCAGGAGATTGCAT CCCACGAGCTTAGCAACAGTGGAAACAAGTTCCACTCTGTTGTTTTTCACCCTAGCTATCCCGATCTCTT GGTCATCGGTGGCTATCAGGCTATAGAGCTGTGGAACACAATGGAGAACAAATGTATGACGGTAGCAGGC CACGAGTGTGTGATCTCTGCCTTGGCTCAGTCGCCTTCGACGGGAGTGGTTGCGTCTGCAAGTCATGACA AATCCGTAAAGATTTGGAAGTAGAAGCGGC >gi|3450001|gb|AI100718.1|AI100718 34415 CD4-13 Arabidopsis thaliana cDNA clone E4D12RP 3', mRNA sequence CCCAACTTNAAGACCTTTAAGGACTGNTNTTCAAAAGGGTTNTGGAAANTGNAACCACCGNGGATAGCCC TTACTGACAANTCCCATTNTGGGATCAGGCTCTCGGGAAAGCATGGGNATCCATCTGCGTTGAGGATCTC ATCCACGAGATCATGACTGTTGGACCTCACTTCAAGGAAGCCAACAACTTCCTGTGGCCATTCCAATTGA AGGCACCACTCGGTGGCCTTAAGAAGAAGAGAAACCATACGTCGAAGGTGGTGATGCTGGAAACAGGGAG AATTTCATCAACGAGCTTGTCAGGAGAATGAATTGATGAAAGCTTCCTTCTTTATCTTTGCAAATTTCAA AGATTTTGGGACCGAGTTTTTTTTTTTTTGTTCAAGTTATCAGAGACTTGTGATCTTTTATCCGAGATAG GCTTTTTGCGGCC >gi|3450000|gb|AI100717.1|AI100717 34414 CD4-13 Arabidopsis thaliana cDNA clone E1D6RP 3', mRNA sequence TTCACACCCTTTAATAACGGTGGCAAAGTTTGCATTNTNCCCCCNTGNCNNTAATTCCCCTTNGGGCCAN AAGAACNTTAGATAACCCTTTGGGTATACATACCCAACAGGACCTCCCCCATCCAACATTGGGGGAATCC AGATCTCTCCGGCGTTGACTNGATGGTTGGCTATTGATGGTCAAGAAGCCTTTGGAGTTGACTTTTATCA GTTGCTCGTTTATTATCCTTGTCTCTGGCTGGAGTCCATCTAATTCAGACCAGGGACTGCTTTTAAGGTT TCCAAGGCAGAGCTCCTTGAATTTCTCCTGAATATCTTCAACACTTTTCAGTGGGACAACCCATTCTTGT TGAAGCTTCTTGTCACGTGCTCGCGGACGTGAGAACTGATGATCCGAGAGTGCGCGGCC >gi|3449999|gb|AI100716.1|AI100716 34413 CD4-13 Arabidopsis thaliana cDNA clone E1B6RP 3', mRNA sequence CCTTGCTTNAATCCTTTGGGCNCCAANCCCTTTCGGAAGTTANAGACNNTTNTTGTAGGNAGTCCCACAA ACTTGTCGTTAACGGATACATGAGAGTTATGATTTCGCCGTCAGTTTTTAAAGAGTTCATACATAGATTT AGCCCATGCAGGTCTCATCTCCGGTTCAATGGCACAGAAGAACACATAATCGAAGATGAGGTCGAATAAT TCAGTAGGACGCCACGTGAAAACATCTTCCTTCACGAACGAAAAGTACTCTGCCTTTGGTGAGGAGCCGT AAGTCTCATTAGCTTTCGCGAGTGCGCTTTCGGAAATATCCAATCCAACAACGAAGCGTTCAGGACTTGC CATCGCAACGACGTCGTGTCCTCCACCACAGCCGGGGACCAGAGCACGGCC >gi|3449998|gb|AI100715.1|AI100715 34412 CD4-13 Arabidopsis thaliana cDNA clone E12A9RP 3', mRNA sequence AAATGNTGGNGCCATTCTACGTGGGAGAGATTGATCCACNACATACCAAGNAAGTCAAATACACCCTCCT AAACAGCCTCACTTACATCCAAGACAAGACCTCTGAATTCATAATCAAGCTCCTTCCAGTTCCTCGTACC CCTTGCCATTCTTGGTTTAGCAGTCGGAATCCGTATCTACACCAAATCNGGGTAGGCTTCTTTTTTTTCT GAGCATTACTTCCTTATATCTTATATATAGAGAGAAAGATTCAAGTCTTTTGAAAAGACAAATCTGAAAG TCTCTCCCTTTGTTATTGTCTCTTCCCATATTTTGCTGTTTGAATGTATTTTGGATAATTTCTTATCTAT TGTGGTGTAAGCGGCCG >gi|3449997|gb|AI100714.1|AI100714 34411 CD4-13 Arabidopsis thaliana cDNA clone E10E12RP 3', mRNA sequence TCCAATCNTGGCCCCCNAGGGAACNTCTTTTNTGAACCCTCNATGGNAAACCCCCCGTTCCCCCAAAGGG ACTTTGGGACTTAATCTCCCGGATTTCAACNTCAGNTTCTTTGGGAAATGGNATCTCTCCACATTTCTCC AGCGGCAATGTCAGTCTTCCCAATACTGGCACATCCCACAATCAGATCAACCTTGATTCTGTAAGGTATG ATCATCCCGGGGTTGATATCGTTGTAAGTGCTCTTGATGTCATCATAGATCAACGTCAATGGTATCTTCA CAGTTTCTTCTCCATGAGCCTTGAGTGTTCCAGCATCCGGGATCAAACCAGAAACCAGTTTCCTCCCATC GCTCTCGACCAGGTAGTTGACATCGATGAGAGGGATAGGAACTGGATTCGGGTTCTTGACAAGCACATCC ACAACAATATGCGGCC >gi|3449996|gb|AI100713.1|AI100713 34410 Lambda-PRL2 Arabidopsis thaliana cDNA clone 48C3XP 3', mRNA sequence AANCCCGGNAACCAAATGATACGGTTGTTTGACCCGGNGAAGTGTCTTACTCCGCCGCNGGTGGGTCCAC TTGTAAGATTCNAAGAGCCATAGTTGTTTATCTGGCATCTCAGGTCAATAATTTTATCATTTCAAGAAAA TTCTCAAATTCAGANAAAAAAAAAAAAAAATTTTTTAGGAAATTTGCATTTTTATTTCGTGTTGTGTTTG ATTTTATGTACAACGAATCATGTAGATATCGTTATTTTGTGATCTTTTGATGTATACGTAAAGTTTGTAG TTGGGGTTTGTTGTTAAAATGTATATTTGTAAGGTCATAAACGAGAAAATGAAAACTTGTATGGACCAAA CTAGAAATAATGTTAATAACTCTCC >gi|3449995|gb|AI100712.1|AI100712 34409 Lambda-PRL2 Arabidopsis thaliana cDNA clone 246E4XP 3', mRNA sequence GCTTNCCTTTTNCCNTTNTTGGANTTAAGCCAGGCTCGTANCCNTTATGGCGGGTTTTGGGNGCATCACC TTACCGCCNTTTTCGGTTGAAACAAATGGATTCATGCTTTGGGCCTCACTGGTTTTCTAATTTCTACGNA TAGTTGAAAATAAGCNAATAAATACTACGATTTAAATTAACGGATATTGGGATTTGGGTTTGAGATGACG AAGTGAGGTTTTTTTTTTTTTTTTGTATAATTTCTTCTTATGATGCTTCTATATTATGTCAGTCTCTTCT CCTCCATTTCTCTTATTGTGCGTTGANGTATTCTCACATATATATATTATGATAATTTAATGTNATATTT ATNACTTACATTTATATTGT >gi|3449994|gb|AI100711.1|AI100711 34408 Lambda-PRL2 Arabidopsis thaliana cDNA clone 231F12XP 3', mRNA sequence CCGNTTTCCCTTTNACTCCCAGGTCNCNATTTTGNGCTCNCCGNTCCTTGGGGGACTGATTGNCCGTTNG TGAAAGAGAGCCNAAGTGGTAGCTTTCATAAAAGGATCAAGGAGTGCTCCTCAAATGTGGATTCTCACAG AGAGTTGTTGGGATTCTTGAAAGCCAAGGAGTTGATTATGAAACTGTTGATGTTCTTGACGATGAGTATA ATCATGGGCTAAGGGAGACGCTTAAGAACTACAGCAATTGGCCAACGTTTCCACAGATATTTGTGAAAGG AGAACTTGTAGGAGGATGTGATATTTTGACCTCAATGTATGAAAATGGTGAACTTGCCAATATCTTGAAC TAGTTTCATCCGATTTTCTTCTCTATTTCTAGTTGTAACTCCAAACATTCATTATAGAGAAAACATGCTT GGATTCTCTTC >gi|3449993|gb|AI100710.1|AI100710 34407 Lambda-PRL2 Arabidopsis thaliana cDNA clone 214H4XP 3', mRNA sequence CTGCCCANTGGTNATCNACCTGGATCTNTGATCCCAGATGGGGAATNTAGGTGAAGTGATCAATCATTCC TTAGGACTGNCCCGAAAGAGNNCCTACAATGCAAGAAGTCACAGGATGGTTACGGGAGATCACGGGATTG TCACCGAACGATGCTACACCGAAATTGTCACCTCTTTGGTGGGCAGAGTTGGAGGTTTTGTCCACGGCGT AAGAGAGACCCCTTCACTAATAAAACTGTATATATTTTGAAGATGTGAGTTTTGTAAGTGTCTGTTTTAT TTATCTCTCGTAATATTGGTAAAGCAAAATTGAAGTTCTCTTCAAGTTTAGTAAATTTACAAACATGTAT ATGATAAATTAGTGTGCATATCGGAAAAAAGTTCTTGTGAAAATTATATCCGTTTTCTTCT >gi|3449992|gb|AI100709.1|AI100709 34406 Lambda-PRL2 Arabidopsis thaliana cDNA clone 204J16XP 3', mRNA sequence TTTTGTCTAAGGTACAAAACGTGGTNGAAAAGCCACATTAATGTCCNTTTTGCCATTNTTGGAAGCCAGC AGGTTTGTGTNATATGGCCATCATATCACAAGTTCAACAAGTGAATCTGTTCGCNTTTCATGACNGTAAG CTTCTTATGGNGACATGTCAAGAAGCCAAAAATCTGCGCAAGATTGTCACTCTCTTCTNCCTCGATTGAT TCACATTCACTCTTTATTTTCTTCTCGTTNCAAAACAGNGAAGATAATCCTCCTTGTAAATTATGAATCT TGATTAAACAAACACACACAACCNCAATTATATTCTTTTGTCTAAATTTTGATACACATC >gi|3449991|gb|AI100708.1|AI100708 34405 Lambda-PRL2 Arabidopsis thaliana cDNA clone 176M9XP 3', mRNA sequence CTTTCGGTNCTTNAACNTGGCNATNNCGNGTTTCACTTCCCGAAAGATCCNCCCCNTTGATTGGTTTNCA ACTAAGGGCTTGGGAGTTCCCNGTGTTCAGTNCGCTGCTGGAGGANTGGCGACNCCGGCGGATGCCGGCG TTGATGATGCAGTTGGGATGTGATGGAGTGTTTGTTGGGTCGGGTGTTTTCAAGAGTGGAGATCCGGTGA AGAGGGCTAAGGCTATTGTTCAGGCGGTTACGAATTATAGAGACGCGGCNGTGTTGGCGGAGGTGAGCTG TGGTTTAGGTGAAGCCATGGTTGGTCTTAATTTGGATGATAAGGTTGAGAGGTTCGCTAGTCGTTCTGAG TAACCAATCAAATTTCAGATGTTTTTATCCATAACGTTTGTCACTTTAATATGTATCCACAAACCAATAT TCTCGATTTATTCAAGATTTTATAG >gi|3449990|gb|AI100707.1|AI100707 34404 Lambda-PRL2 Arabidopsis thaliana cDNA clone 172L4XP 3', mRNA sequence CGGGGCCTTTCAACGAGCCAGNGTTGGACAACTGCNTNATATCAACGGGCTATNATGTTACAACACNCTT TGNAGACAACTNTTGCGGATGTNTTGAACATGTATACTCTAATCACCGGAAAGCAACTGGACCTAAGTNT TGACCTGAGTGCCGNAAGTNCTGCAGAGGAATGAAGAATCACCAGATCGCGCTCTCTCTCTCTCTCTCTA GTTGATTTTCTAAAAGCTTGTTTTGCTCATTTCTCTGTTTCCGACTCTTGCTTTCGTGTTCTTTTTTGGT TTGAACTTTGAATACAAAATCAGAATGATCCTTCATGTTTNGCAACTAACAACCATGTGTCTCCGTTTGA TGTTGGATTCCTCGGTTAAAGACTTATAAATGCTCTTT >gi|3449989|gb|AI100706.1|AI100706 34403 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162J6XP 3', mRNA sequence TTCCAAGGAGGAGGAGGACGATCCCAAGGAGGCCGTGGGCGACAAGGAGGAGGGGGAAGTNGGGGAAGTT ACTGCCGCCACGGCTGCTGCTACNGAGGTTACAACGGCTGCTCANGATGCTGCTCGTATGCCGGAGAAGC TGTTCAGACTCAGCCCGGTCACTAACACNATATATTANCCAATCACCNCCATGCATGTATTGCATTATGT ATGTATGCATTTTAAGTAAACCATGGTGCGTTTGTAATGAACTGCCTCAAGTTTTTGAGGCNCTATAGAT TAAGAAGAGAACTATGGGAATAAAGTTTGATTATGTAATGTTTTATGTGGTTTGAGTTGTAATACTTGCT GTTTGCATAATAAAATCGTTTGTAGTTTATGTT >gi|3449988|gb|AI100705.1|AI100705 34402 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162J1XP 3', mRNA sequence CAGGAGGTTGTTGCCAGGTGCAACGGAGTNTCATGTGCCCAGGACCAGCTGCAGAGCCAGTCAAGAAAGA GGATGCATGAAGCTAAACTGGTTGAAATCNATGGGGAAAGAAGAGGTTCTCTTGGGAGCNGCAGTAGTNT CANTGTCGCAACCGTTGCCGTGNTTACAGCATTTACAGAAGGTCAGGTTAAGAACCTGAACCACCCTCCT CTTTTTACACTTTTAAGNAGAAACTTNATTTTTGGTAGCCNTATNATAGAAGTAAAGGAAGAAAAGAANA CATGGAGAGGTNATAATCTTTTGGAACTATATAACCATCATTTGGTTTCGGTATGGGCAATGCAGGAATG GGATGTAATCTTGCTTTTGACTCGGTTTAGTTTGGTTTATCTTATTATGTTGTCATTGGAAT >gi|3449987|gb|AI100704.1|AI100704 34401 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162J11XP 3', mRNA sequence AAANAGAGAGCTGCTGCGTTCCAGCGGGCTTTGTGTAGAGCAAAGAGTTTTGCCACGGAATGTNTTTGTT GTCAAAGTNGTCGTATATCTGGTTATGGGAAAGTGACAGATTTAGNNNAATTAAGTTGAATCCCTTNTTA GTCATATGCATTAAGTTAAGTAAACTTAATAAGTTGTGTGGCTTAGAAATAATATTGTTTTGTCTATTTT TGGAGTGGGTTGCTCTTGGNGTGTAGAAAAATGTCACTCTTCATTGGATTAAGTGATATACATTTTTTTG TTC >gi|3449986|gb|AI100703.1|AI100703 34400 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162I9XP 3', mRNA sequence GCCCCAGGGGTTTTGGAAGCCCCCCCGTNCNNGGCTATGTANACATCGTTGCCCCTTTCACTGNCTTTGT AGCTGTGTTTGTNCGGTTCCNNATCATAATGTTGAAGAACTCAGCAGATAAAGAAGAGAAGAAGAAGAAA AGGAGAAACTGAGGGGATGTAAAGTAAATTTAACTTTATGGTTGTTATCCGTGTGTGGCCACTTTGAAGA TATTACTTGTTAGCACTCTCTATTNGTGACCAGACATGTTTCCACTNAAAAGGATCTGCTTGTTTCACTT CTGCACAAGTACCATCTTCAGATTGTAAATGACTCGNGTGTTGTTCTTCTTTTCATAAACTTTTGTTCTT TAAGAGTTTGGTTCTACTGATTGCATCTTA >gi|3449985|gb|AI100702.1|AI100702 34399 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162I8XP 3', mRNA sequence GTCCCCAAGGNCATGCNTTGCNCCGATTGCATNGGCCCGGTTGATGTGTNCAAAGCCGTGAAGTTATTAG NTAGTCACCCAAGAGCTAGGAGGAAAGATCACTAGAGAAGCCGGCCCTCTTCCTGGACTCGGCACCAAGA TTGTCTCATTCCTTGATCCAGATGGCTGGAAAACGGTTTTGGTGGACAACAAAGATTTTCTCAAGGAACT GGAATGAGAAGAGCGATGAATGAAGGTCGAGATCACAAAACCATAATAATAAAAATGTGATCATAAAATA AAAGGAAGACTTAGAGTTTGATCTNAAATAAGAAGATGTGGTTTAGTTTGTGTCGTGCTATGTGTGTGTG CTCGTTTCTTTTGTCTTTGAGCTTAAAAGTTAAAACTCTAGTCTATATGGACCTGAATNAAAATATTTCC ACC >gi|3449984|gb|AI100701.1|AI100701 34398 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162I10XP 3', mRNA sequence GCTAACGAGACNAAATCGTATACNGTGACGTTTACTGTAGACTCGTCGAAGCCGTCTGGCTCTAACAGCT TTGGGAGTATTGAATGGTCGGATGGGAAACACGTGGTGGGAAGTCCCGTGGCGATTAGCTGGACATAGTC GTCAATTATGAGAAATGAAAGGGGTNTTATGGAAAAGCAAAGGTGTTTACAGATTTATTGTAATGCCGTT NTTAGATACGAAGAAACCTCTGTTTAGCAAAAACGACATGCAGTCTGTTAAGACTTGCCTAGTTTGTTTT TGGGATGTCTTGCTGTTTTTAATTTTAAACNNAAATATATTCTCCGGCTACAACAGTAGCTGGGTCTCTC TAGGTGTTTTATC >gi|3449983|gb|AI100700.1|AI100700 34397 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162G2XP 3', mRNA sequence TGGCGCCCCTTGGTTGGCCGTACATTTNCAATNCCCGATCACAAATGTGATCCATCCCGNGTATGAAGAG GTGGTTCCTAAAGAGGGAATGCCACTCCAGAAAGCTCAGACANAGAAAGGGCACTTAAGGATCAAGTTCN ATATCAAGTTTCCAGCGAGATTAACTGCGGAACAGAAAGCTGGGTTTAAGAAGCTTATTGNGTGATGATT AAAGCATCTCTGTCTTGTGATGTGTGGAGATTGGGATNAATTTGGTCATATNCCNTTTATAGGGAATTAT CTCCCTCTTCATTAAATTTCGTGTTGTTAAACAAGTCTTCTTTTTAAAGAATAGTTTTTTCAAG >gi|3449982|gb|AI100699.1|AI100699 34396 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162G21XP 3', mRNA sequence AAGGAGTTCCNGCACCNACATCATCTGTCCTAATGCAGGTTACCACAAGCTCATTTGAGGCCTTTGGAGG CAAAGGTTATATTGTGGAAACACCCGATGAGCTTAAATCCCCTCTCGCTGAGTCGTTCGCCGCAAGAAAA CCCGCGGTGGTAAATGTTATTATTGANCCTTTTGCTNGTGCTGAGAGTGGGAGATTACAGCACAAGAACT NAAAAGCTTTGTGGAGAGTCCCTTTAAATAATGTTGAAGTTGTTTGTTGTGAACAAAAAGGATATACGTT TTAGTTTTCTGTTTTTCACTATTGTAAACCGGATCATAAACCGGTCCATTTTAAACCATAATTGAATAAA AACACGTTTCCGGTTC >gi|3449981|gb|AI100698.1|AI100698 34395 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162G1XP 3', mRNA sequence AAGGCCAAAAGGGCTCACACTGGNCAAGTGGTAATCATTGTCCACACGCTCTCNAAATAGTCGAGGTCAC GAGGTTAAAACGCCATTGTTGTTGGACTGTTCTAAAGTCAGCTAGCTCACCGGACAGGTTGCTTGTTGAA TGAAGGGAAAGTCTCGAGTTGGTGTCTGATGGGTTNTTAGAGGCTCGTTGTGCACAAGTGTTGACNTCTT TCCTNTATTATTTTGTATTGTTTTGGACAATTTATTTCAGCATTTTTACACAGAAGATTAGACATTACTA GAGAAATTCTAGCAAAAGCTTGGTTGTATTTTAGTGTATTTNTCTNTTTTACGTGGATATNTATTGCGAT ATCTTTAATNTCATTCGAACTCTTTCTTTTGC >gi|3449980|gb|AI100697.1|AI100697 34394 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162E9XP 3', mRNA sequence GGCCCCTTTNCNCTGGNTTTAANGACCGNCCACNCGNTTTTNTCCCACTGGACCCGCATTGATGATGGGA AGAAAGTGGCAACGGATGAATTTGTATTCCACAACCAGTACTGGGGAAAGNACATTCGACGGAGAAAGCT TNAGAAGCNTTATATCAGGAGTGTTGTTGGTGGCTGGATCGCCACTTAATTCACTAAGTCTGCCTCATGC TTTGTATCAAAGTGTGTGAGGATATTCTTTTAACTCGGAACTTATTACTTAATTTGATGTTAAATCTCTT TCCCGCTTAAGTTTTCAGCAATCTGGAATATGAAGGGAATTATGTATTCTTATCAGTCTTTTGATGAAGT GAGGTCTACTTCTGGGATT >gi|3449979|gb|AI100696.1|AI100696 34393 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162D11XP 3', mRNA sequence GCATTAGCTTTTCTCANCCGGTCTCGGGCATCGTCGGGAATCNCCGGGAAGNTCACCATGGTTGCCGATN ATCTCAACAAGGCCGTCTTTACAATTTCTACTGGCTTGTGGCCGTACTTGTTGCCTTGAACTTCCTCATT TTCCTAGTTTTCTCCAAGTGGTACGTTTACAAGGNAAAAAGACTAGCTGAGGTGGGGATTGAGTTGGATG ATGAGCCGAGTATNCCAATGGGTCATTGATCATGAATTCATGATCATGATCATGATGATGAACATTATGC ATGTCTATGTTGATATGTTTGAATTTGATTTTGAGTTTTGTTTGTATATTTTATGATGCTTTTCTTAATT ACCTCTTGTTTCCGAGTCGACAAATAATGGACCGACCGATAAGGGATAAAAGTTAAAGTTTTCCCATCAG GTTCTGTATAAAAGCAGAAATTGTAAC >gi|3449978|gb|AI100695.1|AI100695 34392 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162A23XP 3', mRNA sequence CATTGCAGCTCTTCCAACACACGAGCGATTGCGCCTCCTGTTCTTCCTCAATCGACAAAACCNATATCTT CCCATGTATTGCCTCCAGAANGCAAGCAAGAACTTTTTGTTGCTNAAAAAACTGAGGCATAGATTGATGA TCATNACAAAGAAAGNNAAAGCAAAAGATTGATGATCAATTTGATCATTGGTCACAAAAGCAAAACACAC ATTTGTCTTCTTCATTTGATTTGTTGTTGNTCTTATACTGTTACATTTTTCCATTTGTGTTTGNGTGTTG GAAATGCGAGGATTATGTATNATATACTCTATATTCTTGATCCAGGAAAAGTTACCTGGATAATATGTTT TC >gi|3449977|gb|AI100694.1|AI100694 34391 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161P4XP 3', mRNA sequence CTCAGGNTCCCTCTGGGGCAAAATTGGCATTGGCGCCGAGNCGGTTGTGTTGCAGGGCACCCCAACTACT ACTAACGNGCCTCTCAGATTAACAGTTGGGCAGTGTGGTAAGATAATTTTGGGTTCCACGATTAGTTCTC AATGAACACTTATGGTGAATACTGGATCTCTCTAAGCATGTTGTTTCAGCTCTATCCTGTACTTGTACAT AGGTAAGATCCAGAACCTTGACTGTTGTCTGACCTAGAATGCTAATATGCCCAAAATTGAATTTGTCACT CTTTTGTTTGTTCCATGTTCCACTTTCTTTTTTTGTACATCTGAGATTTCACGAACTCAACATTTCCTGT TGAGAAACGAGTGTAATGTGTACAACAACAAATCTTTACCAGTGAAACCTATCCATCTGTGTGTTAAGTA AG >gi|3449976|gb|AI100693.1|AI100693 34390 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161O4XP 3', mRNA sequence TCCCGGGNCTCCGTTCAAGCTTNNCAAAAACCGGAACCGGATTGGATTAATGTGCCCGATGACATTCCGA CCAAGGGACTTTGGTTCTGCGCTTTNGGATATGATTCGTGGTAAAGGAACNGGGTACACAATCNAAGGTA ATATTNATGTTGATACNCCATTTGGAGCTATGAAGCTTCCTATTATCAAGGAAGGTGGAGAGACCCGTCT GAAGAAGGAAGATGATGATGACGACGATGAGGAATAAGGAAACAAAGTGCTGCAGAGACAGAAT >gi|3449975|gb|AI100692.1|AI100692 34389 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161M1XP 3', mRNA sequence GGAAGTTTGGTTGGAGATTTTCACAGGACTNTGTTGTACCGTGGGATTTACGGGTACCCTCGTGACGCAA AGCGCCNAAATGGAACGCTTAGGCTTTTGTATGCGTGTGCACCAATGAGTTTCATTGTTGAACAAGCTGG AGGGAAAGGTTCTGATGGACATTCGAGAGTACTAGATATCCAACCGACTGAGATACATCAGAGGGTTCCT CTATACATTGGAAGCACAGAGGAAGTAGAGAAGTTGGAGAAGTACTTGGCTTGACTCATGTACCAAACAT AAGGCATTTAATTTCTATTGTAAGCCAGTTTCTGACTACATGGTATATGCAAATAGATGCATAATGGTGA AAGTCCTATTTTGTTGTC >gi|3449974|gb|AI100691.1|AI100691 34388 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161M14XP 3', mRNA sequence CAAGCCAGAGATCACTGTAGACTTGGAAGCCTATGGGTGCAGAGAGAGGACATCTGAGTCTCTNGGAGAA GAGAGTGGAACAGTGATGTNTCAGACGTCTGAGAAGCTTGGTAAGTACTGTGGATCGCCTAGATCTACCT TGAAGTGTGAATGGAGCAGCAACAATAGCTGCAGCAGCGAGGACGAGAAGGACGAGGGAATCTAGCAGAA TTTCTCTTCCTAATAACTATTNTCGAGCTTTCTGTTTTTGTTCTNTCTTTTTCAAAAACTTATTAAGCTC TTATGAATAATGACTTGTGAAGTTTGAGTTCGTCTCCTTCACAAGCAAGTTGTATTNGTGTTTTCTACTT TATGAATATGGGTTTTAT >gi|3449973|gb|AI100690.1|AI100690 34387 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161L4XP 3', mRNA sequence ACCTTCGGAAAGTGGAGGAGGGTCCACAGGNTCTTATNCGGTGCACTGCCTGCAGAGAATCACCACCACA ATCACCAGTCTCAGCTTTACTATGAACAATGGATGCAGAAACTCATCAGACCATAAGGGNAAAGGCAAGN ACTGATGATCTCAATTATTGCATCTTTGGTNTTGTTCAAATCCTCATNTTGTATGTTTATCTTTGGTTTA TCTCAACACAAATGTTAATCTCTTTTGTTGTCTGATGTGTGTTAGGGTTTTGTTCTACATATGTATTGAG GGTCTTTGGAAATCTTTTTGCATTGTGCTTGTAATGTTGTATTTTGTGATAATAGCATTTTGTTTGTGAG TTTATAATTCAATTTTTGAATGTTATTTTTGCC >gi|3449972|gb|AI100689.1|AI100689 34386 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161F8XP 3', mRNA sequence CAATTGGGCNGTCGCAGAAGCTTTGGACTCTGCCCCTATGGCTCTNGCAGAGNACAGTGGATTACAGCCC ANTGAGCCACTTTCTGCGGTTAAATCTCAGCAAATTAAGGAGNATATTCCCTTCTATGGAATAGATTGCA ATGACGTGGGCACAAACGATATGAGGGAGCAGAACGTGTNTGAAACATTGATCGGGAAACAGCAGCAGAT TTTGCTAGTACGCAAGTCGTTAAGATGATTCTAAAGATCGACGATGTCATCTCCAATTCTGAATACTGAT GTGTTGCTACCATTGTACTACCCTTTGGCTTCTTGGGTGTTTTTTGTTTGCTTTCTATTAGCTTTTGATA CTCTTCGACATCGTTTNCCTTAACTTGTTCCCTTCGTTTTGCAACCTTTTCTATAAGAACATCGTCAGGT CT >gi|3449971|gb|AI100688.1|AI100688 34385 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161F5XP 3', mRNA sequence AGANGAGTGTGGACACTTTACAAGATCTCCATCTTTCAAGGTTCTGAANCAAGTTCATCCAGATATTGGT ATCTCAAGCAAGGCTATGGGTATTATGAACAGTTTCATCAACGACATCTTCGAGAAATTGGCATCGGAAT CTTCAAAGCTCGCTAGGTATAACAAGAAGCCGACGATTACTTCTCGGGAGATTCAGACTGCTGTTAGACT CGTTCTTCCTGGTGAGCTCGCTAAACACGCTGTTTCTGAAGGAACCAAGGCTGTTACCAAATTCACAAGC TCTTGAATTAGTNAATTAGGGTTTGTATACTCTGAATTTGATTCTGATGTTGTCATAACTTGTGTTAGGA TTTCTCTTTCGTTTTATTAAGCTTTAATTATC >gi|3449970|gb|AI100687.1|AI100687 34384 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161E21XP 3', mRNA sequence GCTTGCACGAAGANCCATACCACTANAGGNACTGANCTTGATGTTNGACGCGGAGAAGATCCATNGGNTA TATGTTNTGGATGATTTTGGTNNCCTTGAAGGACTCATCACTCTTAGAGACNTCATTGCNAGACTTGTCC ATGAGCCATCCGGCTATTTTGGAGATTTCTTTGATGGTGTTATGCCTCTTCCCGAAAACTACCGAGTCTG AGAGAAAAATGGTATCTTTCTTCTGTAAATTGTCTTTTGTTTGGTGATAATGCTTCTGTCTGTTTGTGCT TAAGTTCTCGAAATTGTGTTATTAACGTTTAACAGAAATAAGAAAAGAAGAAAGAGCCTGTCTTTGAGTG AATATGTCTGAAATACAATAACCCTTAAGATT >gi|3449969|gb|AI099657.1|AI099657 34383 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161E14XP 3', mRNA sequence ACCGGCGAACCGTTATCTCCNCNGGCAGTAGATNTCCTCTTGAGAGAGTNCCCTAAAGGTATNAAAGGGA TGAGCACGNGTCTATTGTTGAGCACATTNGCATTNGGCTTTTTCTTCAGCTCGGTTCTCGTCACAATCGT CGAGAAATTCACCGGGAAAGCTCATCCATGGATTGCCGATGATCTCAACAAGGGCCGTCTTTACAATTTC TACTCGGCTTGTGGCCGTACTTGTTGCCTTGAACTTCCTCATTTTCCTAGTTNTCTCCAAGTGGTACGTT TACAAGGCAAAAAGACTAGCTGAGGTGGGGATTGAGTTGGATGATGAGCCGAGTATNCCAATGGGTCATT GATCATGAATTCATGATCATGATCATGATGATGAACATTATGCATGTCTATGTTGATATGTTTGAATTTG ATTTTGAGTTTTGTTTGT >gi|3449968|gb|AI099656.1|AI099656 34382 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161D15XP 3', mRNA sequence GCCCNNCCTTTTGTTTTGGCCTCNNGCATTCAAAACTNTTCACCCGGAAAANTGGNTGGGAGCTTNCGCC GGCCAGGAAGGAATTTNTGGGGCCACCCACAACAAGTCCAACTTCATCACCACCACCACCCGTTTTAGTT TCCACTTTTCACTGCCTCGTCCGTCGTCACTCTTTTTTTTGTTTTTCTTTTTGGTTCTTGGGGTTGGGTT TTGGGTAACGTCACGTGATGATGACGTGTCGCGATCCTAGCGGCGTTAATCACGTGACCGACGACGACGG GAGCCTAAAATTTTTAGTGAACGTTGGAAAATCAAACCTCATTTAATTGTTAATTATTNANNAAAATTAT ATCTTTGGGCT >gi|3449967|gb|AI099655.1|AI099655 34381 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161A8XP 3', mRNA sequence CCCNGTTAAAGTCCCGGGGCCCCTTGGNNCCCCCGCTNCTGGCCGACCGACGCNCNTCAATTNCTAGCCA GCTGTGNCTCTTACTTCCCAAGCATCGTNCCCATCCAAGNCAACAGCAACGCCAGTGATCATGACAATGA CCGGAGCTGTTNCGCCGACGTCTTTGTGCCCACCACTTCACCGTCGCACGATCANCACGGTGAATCATTG GCTTTCTGGGGATGGCCTTAGAAAACCACTCTGATAATAAATGTGTGTTTATTTAAGTTCAAGAGTCATC TTCTTGTTGTTTCCATGTTGACGATAATTGTTGACTCGTGGAATAATTCCGCTGTTCAACGGTATTTTTA TCAGTTGCATT >gi|3449966|gb|AI099654.1|AI099654 34380 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161A5XP 3', mRNA sequence CCTTGANGCCCCCAATGTGGAGACNGCATTTCANNCCGTGTTAGCAGAGATTTACCACATCATCAGCAAA AACAGCTTTGGCTGCTCNAGAAGCAGCGGTTGCTAATTCTGCCATTCCGGGGCAAGGAACNACGATTAAC GTTGAAGACACATCTGGAGCTGGCAAAAGAGGTTGCTGCTCTACTTAATTGAAAGTTTAAACTTTCGTTT TCTATTGCTTATTCACTGTCTTTTTTTCTCTTCAAGTTTTGGGTGATGAAATGTAACAACGATGCAAGAC CATGTAGAATATATATCTCTTCATTTACTCTTGTCGTACC >gi|3449965|gb|AI099653.1|AI099653 34379 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160P18XP 3', mRNA sequence CACCGGTNGGGAGTTGCCCCCAAAGGGAACTGTTGATGTNCATCGCNNTGTTGTNTAAGCCNGCTGATTA TNTGACCCNGAGGNGGTGAAACCGGANTATTCNCTCCGATGCATATGATTCTCTGCAGAAAACCGGAGTC ACCGGAGGAGAGTTCTTGAGAAAGGTAGAAAGGAAACATCNCCGGAAAAAGTATGGAGAATTTTCTCAAT TTGTTTTTATTTTTAAGTTAAATCAACTTGGTTATTGTACTATTTTTGTGTTTTAATTTGGTTTGTGTTT CAAGAATTATTAGTTTTTTTTTGTTTTGTTGCATATGAGAATCTTACTCTTGATTTCTCCGCCGTAGTGC CGGCGAGACATAGGGGATTATTAGTATTTTTAAGTGTGTTTAAGATTGATTAACAAGTTAGT >gi|3449964|gb|AI099652.1|AI099652 34378 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160P16XP 3', mRNA sequence CCCCAAACCGTTNCCCCNAAGACGGTNGCCCGGAAAANCGCCCCAACCCCNAAGGTTCCACGTGGGGCTA CACCCNCCCTGGTGGACTTNCAGCGGAGCTTCCATGACCCCAGCCGTTGCTTTCGGACCAGCCGTCGTAA GCTGGACGTGGACCAACCACTGGGTTTACTGGGCTGGTCCTCTTATTNGTGGTGGACTCGCCGGAATTAT CTACGACTTTGTCTTCATCGATGAAAATGCCCACGAGCAATTGCCTACCACCGATTACTGAAGACGTCAA ATTCAACGTTGTTAATCTGATGAATTTTTCGTGATTTGCTTTTTTAATTTGCATCGTAATGGGTTTCTGG CCGTTGGATCATTTTTAGATGAATCTTTGTCTATTGATTGATCATTTATGTGTCTTTGGGTTTGTTGTTG GAGTTGTAATATCTCTGGAAGGCTTTTGTGCAATTGTATTGTACGGTTTAAT >gi|3449963|gb|AI099651.1|AI099651 34377 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160O21XP 3', mRNA sequence TGCCAAGGCCTNNGCATTCTCAGCTATTGGCCCAATCCCAAGATTTGCCCAGACTACAACAAATTCAGAC CGCAGAACCCTACTGGACCCGGTACTAAGGCTCTGAAATAAAGGTCACTGAATCGCAAGGTTCGCCCACG GGGAGATTCCGTAGGCGGAGAGNTCAGAACGAGGTGATGATGGATTCATTATTTTTGAGTTTCTCTTACT GTATCTTCATNATTTACCATCATCGCTGGTAAAATAAGTGTACCATTTACTCTTTGTCCTCTACTGGANA AATGCTAGAGATCCTCTGTGTGTGTTTTTTTTGTTCTCTTCATAATTTTCCCATACACATACTAATAAGT TCTTTGATGTTTGGTTGAAAACTTGAATTGGATACATTTCATTTCTTCTTGTGAAACTCT >gi|3449962|gb|AI099650.1|AI099650 34376 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160O13XP 3', mRNA sequence CCTAGAAAANGGGGNCCACNCCTCCGGTGGAATATTACCNCCANCCCTCTGGCCCCCACCCGGNGCCTTN CCCAGATNTGGTCCCGGGGTNGAGTTNTGNATANGTTTGGTTTTGACGCTACTTGGGTATATCCCTGGGA TCATATACGCCATTTATGTCCTCACCAAATGATTTNCCATCTATCATCATCTCCTTGAACAGCTGTTCCG TCGTGTTCTCCTATCTTTGTGACTGATTCAGCGTTTCTTTTTCTTTCATCAGAGTTTTTATGTTTCAAGT AATTTAATTAATCATCACTGTTGTGTTTGCATTGTTATATAAATGTTGTGTTGATATAAAAGAAGAGAGC GTTGGTTTGTACTTTGTGTGAACATTTTTTAAAAATATAGTTGGTTTATTACAATAAATTGGAAATTGTG TTGCCTTGGTGGATCACAGGACCACCATTAACCATTAT >gi|3449961|gb|AI099649.1|AI099649 34375 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160N20XP 3', mRNA sequence TCCAANTCANAACCNGCAGGGAGGAGGGATGAGAAGAGGAAGAGGCGGGTTTCGTGCTNGAGGGCGTGGT AATGGTGGCCCGTGGTCGTGGTGGTGGAAGAGGCAATGGAAAGAAGCCAGTGGAGAAGTCAGCTGCTGAT CTTGACAAAGATCTTGAGAGCTATCACGCTGATGCCATGAACACCTCTTAAATCGTGTTGTGTTGTTCTT ACTAAACTAGTTTCAGATGAAATCATGCTTCTCTTTTTTTCATGCTCTTCGTTGGTTTTGTTGGATGTTG ATTGTAAAGTAAATGGAAGCCTTTTAGAATTT >gi|3449960|gb|AI099648.1|AI099648 34374 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160M19XP 3', mRNA sequence CAAATCTGGCTGTTATTGGGTTTNTCGGGGGAAAGGTCANTGTGGAGGAGAAGNCTGCCTGGGTTAATAA TGNTTCNCCAANGGGATTTACAGCTCTCGAGAAACTGTTGGTGAATTGCGCTGGGACACATGCGACTCGT GATGAAATTTACCTGGCTGATCTCTTTCTGGCACCACAGATCCACGGAGCAATCAACAGATTCCAGATTA ACATGGAACCGTACCCAACTCTTGCAAAATGTTACGAATCATACAACGAACTGCCTGCGTTTCAAAATGC ACTACCGGAAAAGCAGCCAGATGCTCCTTCTTCCACCATCTGATTCTGTGAACCCATAAGCTACTCTCAC TTTAATAAAACCTCAGACAACAACAACAACAACAATGATCATNATAATACCTTGTACTCATACATGTATC ATATAAACCAGTTACGTATATTATACC >gi|3449959|gb|AI099647.1|AI099647 34373 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160J23XP 3', mRNA sequence ACCCCAATAATNGTGTTNAAAACCCGTTGACTAAGNGGANTACATTTGTACNCCAGGTATTCATCATAGC GTGTGTCAAAAGAGGATGTGCTGATAAACTGGCAGATATTCTCAACTGATCTCATAGATAAAGAATTTGT TGANGCTTCCGTTGGGCTCCACCCTTTCCGGGACCTGAAGGTAGGCCTTGAGGGAATGGNCCGTGTGGAN ACAGACTTTGTGTATCTATTTTGAAGGAACAGAATCAGAACATGGTTGATGTGTTGTTAGGGTTGCTTGT GTATAAGAGCACATGTGAGTGTGTATTTGTATGTGTGTGTGATTTACGAGTGTATATTCCAATTCAT >gi|3449958|gb|AI099646.1|AI099646 34372 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160I7XP 3', mRNA sequence CCTTGNGCTCTCTGTCCCTGAGACNTTGGATCTGCTAGATCTTTGCGAACAAGCTGGTTCTGCATAAGCC GAAACGATCAACTTNGCAATGCCACGTTGCAAAGAGGGGGATCGTNTTGTATGAANTCTNTCNATATATG TAAGACCTACCGTAAGAGCGTAAGCTTTTGGGATTTAGTTAAGAGTCGGATTCAAATGTATGTTTACTAA GAAGGGATGAGAGTATGTGTGGTCTTAAGGCAAGCAAAAGAGCGAAGAGGCTCTGCCGNATAAGCGACTA CTCTTGTTCTGTGTCGTGTCTGATGTGTGAGTGTGTGTCTGTGTTTGTGAGAGATTCGATACTCTTTGAA ACAAAGATTTATGTAGAAGAATATAGAGAAAGAAAGACTACTATAAACAGAGCCAAAAAATGATGTGAGC T >gi|3449957|gb|AI099645.1|AI099645 34371 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160I23XP 3', mRNA sequence CTTTGCAGNAAACAACAGACCTTAACCCCCGGGGGTTTTGACTGGTTGNNCCNATAACNNTGNGTAACAT TNGNNCCAATTGGTGGTNAATTCGGNTCCCCNTCTTTTAAACNNACCCGGGAAGTTGCAAATCATCGCTT CTTGGAAGAATCGAGAAAGTTCCAAATTCTCAAAAGAAGGAACTGTCTATCCTGCATCGATAATGATGGT TAACATTGCTGCGGATCATAGAGTTCTAGATGGGGCAACGGTAGCTCGGTTTTGCTGCCAGTGGAAAGAG TATGTCGAGAAACCGGAGCTGCTGATGCTTCAAATGAGATAAGAAGGAAAGGTTCATGTTTATTTGTGAA TCATTATGTATGAAACCTTCATGTTCGAATAAGATCAAGAACTGAGCTAGCAGTTGTAAACTAAACAAGA AAGTAAAAGTCATATCTAAT >gi|3449956|gb|AI099644.1|AI099644 34370 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160G9XP 3', mRNA sequence AGGGCTAAGGCTGCAGGNNAAGGTACCCCAATTGGAAGCTAACAGGAAAGCTATGTCGATTCAGTGCAAG GTTTGTATGCACACATTCATCTGCACGACATCGGAAGTGAAATGCAGGGAGCACGCGGAGGCGANGCATC CGAAAGCCGATGTTGTCGCTTGTTTCCCTCACCTCAAGAAGTGATGAAAGCTATTATCTCAACTATAAAG GATTCCAATGTATNACGTATGGATCCTCATCTTTCCTATGTTTGTATCAAAGTCTCGACAAATTTTATGG TTTCTATTTCTCTCTACTTGTTTCAACAATAAGTCTCTTGCTATGATTATATAATGAAGCTTTGTGTGGA ACCTTTTTTTTT >gi|3449955|gb|AI099643.1|AI099643 34369 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160G18XP 3', mRNA sequence TTCCCNCTCCGGCCATCAGCATCGTCNGGATGNGATTTGCCGACCCCAGAGCATNCNGGTAGGANTCAAC AGTGTTGGTGATCTGGCACTCCAGGGAGGAGATNTCAGTCGTTGCTAAGCTGGCGTGCCCCGCGTGCCAC TGCTCTCTTCGNCTTGTTCTGTCTGATAGCTGCAGTGNCCNNATATATAACTCCCTTCCAGGTTGTGGCT TTTGCCATTGGCTTGTATGTGCTTAGACACCCGAGGCTCAGGTACAAGCTCCCATCAGTTCCACTTAACT TCTTCAGGAGGCTTCCAGCAAGAACTGATTGCATGCTCTGAGTNACTTAAGATTTCTCCATTTCAAGAAA GACTCCTCTGTTCTAGTTTGTTATCGTTTTGAAGTCCTTACCTCTTCTTTGTGATGTTGGATGATCATGT TTTTTTCTGTTTGACATNATTTATGTTTATGTCCTTTTGAAAACTTTCTTTGGAAAGTGGTAACTAGTAA GATAAGTTTGTGTT >gi|3449954|gb|AI099642.1|AI099642 34368 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160F7XP 3', mRNA sequence CCAAGTTNTGCCCATTACAGGCGAGTGGACAACGTNTATGGAGCCCGTAATCTGGTGTGCACTCTCCAAC CGGCGAACGAAGAACAGGCTGCAGCTGCAGTGTCTGCTTAAATGAAGCCACTATGAAGCGATTCGCACTC GCACCAAAACCCACAATGGGGCGATTCGGACTCATACCGGATCCAGAAACGTATCTTTACTGGCTTTTAC TTCTCTTCCCAGCCTCATCATCACTTTCACTTTCACTTCCTGTACAATGTACATACGTAGTCCTAAGTTC TTCCCTCATTTATTTAATGAAATACATTTCTTTATGTTCCACTNTCTTATACGTATAACATTCCATTTGG ATGATGTGATCACCATCGTGGTTATATTTATGCCATATGATCTCTTTG >gi|3449953|gb|AI099641.1|AI099641 34367 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160F5XP 3', mRNA sequence TCCGNGAAGTAAGCGGGGAGATCGGTTCGACGNGATCNCNCCGNGNCGGATTTGAGAGCCCCCCTGGTCT CGCCGTTGTCGGACTTGACGTTCGCTGACCCGGAGGACCCCCGCAGTGGACGAGACGTTCTCGTTGGAGA AGTATCCGTCGTACGAGATCGATTGGGATTCGATTCTAGCTTAGGGGCAAAATAGGAAATTCAGCCGCTT GCAATGGAGTTTTTGTGAAATTGCATGACTGGCCCAAGAGTAATTAATTAAATATGGATTAGTGTTAAAT TTCGTATGTTAATATTTGTATTATGGTTTGTATTAGTCTCTCTGTGTCGGTCCAGCTTGCGGTTTTTTGT CAGGCTCGACCATGCCACAGTTTTCATTTTATGTAATCTTTTTTTCTTTTGTCTTATGTAATTTGTAGCT TCAGTTTCTTCATCTATAATGCAATTTTATTATGATTATGT >gi|3449952|gb|AI099640.1|AI099640 34366 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160E8XP 3', mRNA sequence CTTTGGNACNGAAGTCNATGCNCACAGGGCTTGTTGATTCTGTGATGGGTCCCCGGACCATTCGGCATGC NGCNTGTTGAGGCTGCTTCTGCATCTGCAGGCCCCTGCTGGAAGCTGCCATGCTNTCTAGCACCTGTGAC ATTCATGCTAAGGCTTTCACAAGATTGCATCGGCAGCTATGGAAGCGAGATTCGCAAATGTCAGTTCTAC ATGGACATGTTGTCCGAGTGCAGGAAGAACTCTGGTTCCGTGATTGGTGCCTAGAGTTTCCATTTCTCCT ATTTGTTTTATCTTAAAGAATTATCCAGCTGTGATGATGCTGAGAATTTGGATATGATGATAT >gi|3449951|gb|AI099639.1|AI099639 34365 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160E15XP 3', mRNA sequence TGCGTCGAATTGGCNANGGAGTTACTACCTTCTCCGNAAACAGGGGGNCCCCTGGTGTNGACTTCGAGTT TGGAGCACGGGATCTTGTGTACCGTGAGCACGGAACACTCCCGGATACTACGATGGACGGTACTGGACAA TGTGGAAGCTTCCATTGTTCGGATGCACCGACTCTGCTCAAGTATTGAAGGAAGTTGAAGAATGCAAGAA GGAGTACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAGTGCATCAGTTTC ATTGCCTACAAGCCCCCAAGCTTCACTGATGCTTAAATCCTTTTCTGGAATATTCAATGTTGACTATCCG GAACCCAATTTTGTATGGTCAATGTNNATTTAAGTAATTATTTTGCCAAAGTGAAAAAACTGAAGGTTTG TTTTTC >gi|3449950|gb|AI099638.1|AI099638 34364 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160D7XP 3', mRNA sequence ATTGATNCCTTGTTANCCANTGGTCCACCGTGAAGATGCTACCAGGATTGGGATCTGCCTAGTNTGGTTA GGANGCCAGGCTGTTGNTATCTCTCCTCCTANGACGTGTGAACCAAGCGATCATTCTTGCTTACAACTGG TGCACGTGAAGCTGCCTTTAGAAACATCAAGACAATCGCTGAGTGCCTTTGCTGATGAACNCCATCAATG CTGCAAAGGGATCTTCCAACAGCTATGCCATCAAGAAGAAAGATGAGATTGAGAGAGTTGCTAAGGCCAA TCGTTAAGGGATCTCCCTTTCCTCTAAGTTTGCATTATATCAAAGAGTTTTTGTGTTGTTTCCATTAGCT TTGGATATGTTTCAGATGANCTCTCTATCTTTAATGAAATTTTGACGCTTATAATC >gi|3449949|gb|AI099637.1|AI099637 34363 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160C2XP 3', mRNA sequence TGGGNTAANCCAGTCAACGGTCTNAGCCCCCAAATGATCTCGCTCTGGNACGGGGCGTTGGATCGTCGAA GGCTGTGATTCTTTNAGGGCTTGNCCTCGGTCCAGACGATCTATTGAAGAAGGTGGAAGAGTTNGAAGGC CACTTCACTGGCTGCAGACACACTTACACAGCTATGGTCTTGTCAAATACTGATGGTGCAGCAGAGGATT ACGTGGATGAAAAGGACCGGTCCGAAGAGTATTATAGTGACATAGACGATGACTTTGATGACGAGTGTTC CGATGATGAGTCGCTAGANCCGGTTGGTCCAGTGGGATCTTTACCCGTTGACAAGATAGTTAGGAAGTTG AGGGAAAGACTNAAATAGAGCAAAAGTGTTACTGTATTCTCATCATTGTTTTGTGTAAATGTTGTANACA TACATACTNAAAACCCAAGTGCCATAACGAAGTACTTCTAGAG >gi|3449948|gb|AI099636.1|AI099636 34362 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160C23XP 3', mRNA sequence GGATTAGAGNNCTTTCTCNATATGCAAGAGTAATCNTCTATTATCTNCCNCATATATNAAATANGCTTTT GTAGGATCGCCTTAAAGGCGAAGAGATGAAGATGCAAACAGTNAAAAAGGGTTTTCTTTTCAGCTATTTC TTCTTGAATGTTTTTTTTTCTTTTTATTTTGGTTTCTTATTGAAATTGTTGTATTTTTGTTGGCTTTTTT TCTAATAATATCAGCGAGTTTTTTCTTTCC >gi|3449947|gb|AI099635.1|AI099635 34361 Lambda-PRL2 Arabidopsis thaliana cDNA clone 160C13XP 3', mRNA sequence CTAGNTTCTTCCCCCCGGGGTTTCAGAACCGGTNCNCCGCNTGACATCGAGAGGATTNGTGGAGAAGGAC TTTGAGAGATAGGAGAGTTCCNTGCACCGTGCCGTGACAATCCACGTTGGACATCCAGGAGCAGTACGGT AAGGTGATGAAGGACTTCAACANGGGTTTNGTGAACAACAAGGAGATCGATGAGATAAAGGCTGACGTTG AGGAGTTCACGTACGATTTTGATATGCCTGGATTTTTCATCTCTGAGTCAAGGAACGATTAGAGATCTCT CACTCTCTACCCAATAGTAATCTTCTGTTATTTGTGTTTTTGTATGTTAAGCAAGCAAACAATNAAAAAC TNATAAGCTTCAGTTATTTTTTCTTCTTGACTATTTTATTTCGTTGGATTTCTTAATAGTAACAGCAAAT TTACTATATTTAACGAATAAATACAG >gi|3449946|gb|AI099634.1|AI099634 34360 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159P22XP 3', mRNA sequence CCCTTGTTTCGTCCCGTNTCGATTTNCACNCCGTCTCGTGGATCCGCNGGANAATNTTACNCCGATTCTC GTACGAATTCTCGNTTTCGGTNTGGGACNCACAATGCATATGGTTNCGGAAGGGAACGTGCACTCGAAGC TATGTGAGTACCAAGNTCTTACTTCTTCTTCGATGGACGTCACACACCAGAGAAGGCTCAGGAGGAAATG GCTCATCTTCTATATGGAGCCGACCCTGACGTGGTCCAGCCAATGACGGTCCGTGAGCTAATCGTCTACC CAACTGGAGAAACTATGCGTGAGTATTGGGAACCCAACAACTTGGCTATCCGTCGTCGGCCGTCTCGTGA CTTTTACTTGGGCCTCGCCGCCTATTATTAGTTGGATGGCTTTGAGCTGAATATTTCGATATATATGAGA GCTATTGTCTTATAATGTATAATCGATATCGTAACGTGGAATTATGCCTATATGACGTCAAATTATGCCT TTGACGTTGTCGAATAAACTGCTTTTGAAT >gi|3449945|gb|AI099633.1|AI099633 34359 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159P13XP 3', mRNA sequence ACTTTGCNGANTACACCTCCCAGAAGGAGTCCNCGNTTCATTGGTCTTNCCTTCNNCANGGAGGTATGCA NATCNTCGTAAAGACTTTNACCGGAAAGACCNATCACTCTTGAAAGTGAGAGCTCCGACACCATTGATAA CGTGAAGGCTAAGATCCAGGACAAGGAAGGCATTCCTCCGGACCAGCAGCGTCTCATCTTCGCTGGAAAG CAGCTTGAGGATGGACGTACTTTGGCCGACTACAACATCCAGAAGGAGTCTACTCTTCACTTGGTCCTCC GTCTCCGTGGTGGTTTCTAAACCTTGTCTCTCTNTCTTATGGTTACTGAACCAAGTTCATGTATCGTTTC ATCTAGTACTTTGGTGGTTTATGTTTTGGGGCCATGTACAGCCTNTGATAAATAATTGATCGACTATGTT TCNGTTT >gi|3449944|gb|AI099632.1|AI099632 34358 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159O18XP 3', mRNA sequence GGGCCTTTGGCCAAGAGAAATCNAAGGTTTTGCAACAGTGGNGCNGGCNTTTTANCATTTTCNTCATCAT GGCCANAGGCGATTGGANGCNGATAGGTTTTTTCAACGNGTGATTTCANTGAAAACGATTTACACNAAGA AGGGGCTTGAATGGGTGAATACTACAGAGAGTCTCAAGGATGTGATTGATCGTCATTATCCTGATATGAC AGACAAATGGATGAACTCTGAAAGTGCATTTTCAGTATGGGATTCACCTCCACTTACCAAAAATCCAATC CCTCTCTATCTCCGAATTCCCTCTTAATTTGATCATTTTAATGTGATCTATGGCACTTCGAATGATTTTT TTTCTTCCTTTTTTGGCATTTGTTGGCTGTGAGCTGTGTTTCGACATTGTAATGTACTATACAGATAAAT NAATGGGTGATATACATGTGATTC >gi|3449943|gb|AI099631.1|AI099631 34357 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159M9XP 3', mRNA sequence CACTTCCCANNCCTTAAGNCCCCACTCACCACTGGAACNGCGATTGAAGAGNTTGAGGACAACAACACTC TTGTTNCCATTGGTGGCCATTCGTGCTGACCAAGAAGANGATTAAGGATGCTGTTAAGAAGATGTATGAC ATCCAGACCAAGAAAGTGAACACACTCATCAGGCCTGATGGAACCAAGAAGGCTTACGTGAGGCTTACAC CAGACTATGATGCTTTGGATGTTGCTAACAAGATCGGCATCATCTAAGTCTATCTATCTCTGCAGTTATA AAGACTATTGTGGTTTTGTCTCTTGTAGTCTCAGTTTTGCTTTTAAGATATTTATTATTACTATCATCTG GTAATTGTAGTATTTTGGAGCAAAAACGTTTTACAATACATTCATGTTGCNGTTTATTGTTGAATTCAAG TTCTATGTTTTTGACTTAAAAAAG >gi|3449942|gb|AI099630.1|AI099630 34356 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159I8XP 3', mRNA sequence GGGGGAAAGTTCCNCCTTGCTTTNAGTTGCGTTAAAAGGGGATCGTAAACAGCGGGNGTCCAGNATTTTG GACATTTTCCCGGCGANTCAAGGTCCCNCCTCGATCTCAGNGTGTTACAGCTNTGGGAAGNTGATGTGGA GCTGCTTTTGCCTTNGGTACGATCCGAATTCACAAGCCGGGGAAGAGAGAGAAGTCAAGATTCAGATTTG CAGAAAACGTCATCCATTTGATTCCTCTCATTCTTCTTCTCTGTGTTGCAATCCTCTGGCTCTCCTCTTA TTCAGCAGCGTTAAGGAGTTGAGTTCAAGAAGCAACATGTTGTCTTGTCTCCATGGAAACTCATCATATT CAGTTTTGGGAAAGGAAACAATTATTTTACCGCCGGTGATTATGTGCCGCAAACCATACGTAACTCTTGT AATTTTTGGTTCTGTAGACACATAAAAGGATCTCTCGTTTTCATGAAATGTATGTTTAATAGTTCACTAT >gi|3449941|gb|AI099629.1|AI099629 34355 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159I6XP 3', mRNA sequence TCAAATCACCGGCTCCAAANGCCTATCGACAAACGCCNTNTNTCNCTCCCAGGAAATCCGTGAAACCGGA GAATACATAGCCGAACTCAAGCTTTCACCCCGATGTCACTGCTCGAGTTAAGATCAATGTTTCCGCTAAC TAAACCTTCAACGATTCAAGNCTCCTACTGCATCCCAAGGAACGTATAGAGAGTGGACAAAGAGAGTAGC CTCTTGTGGTGAGGATTGAAGGTTGTGAAGTTTTTCCTTTAGATTGTTTGATGCATTTGTATTTTTGCTA TTTTTGGAATCTGGAAACGCTAAAAGTATNATATTCTCTTGCAAGTTATGATATTTACTTGAAGTT >gi|3449940|gb|AI099628.1|AI099628 34354 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159G22XP 3', mRNA sequence GCCCCGCGGGNGCNTAAGCCTGTGGTGCCGGAATCTTCCGTTAGGATCCTTTTCCAGGAACTGTGTAGCT NCAGNTGAGTTTNCCCCGTTGGAATCGGAGGTTAGGATTTGCGACGAGTGCAAAACAGGGGATGTGGTGA CAATCGAACACAAGGAAGNCGGTAGTAGTTTGCTGNTCAATCATACGACGAGGAAAGAATACAAACTGAA ACCGCTCGGTGATGCCGGTCCGGTGATCGACGCCGGTGGAATCTTCGCTTATGCAAGAAAAGCCGGCATG ATTCCTTCTGCTTGAATGTAATCGGATCCATAATTTATCGGTTCTGAGTTTAATCCGGTTTGGTTTATTT GGTTCGAGAACCGGTACTAACGAAATAAATTATTACCAAACC >gi|3449939|gb|AI099627.1|AI099627 34353 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159E18XP 3', mRNA sequence GGCTGAATNNNCCGGACTTNAAAGGATTTGACTCCAATGGNGGNCTTCCCACACTCGGTATTGTGAAGGN TGACTACTTGATGATTAAGGGGTGCNGTGTTGGTCCCAAGAAGAGAGTTGTAACTCTCAGACAGTCACTT CTCANTCAGACTTCCCGTCTTGCCTTGGAGGAGATCAAACTCAAGTTTATTGACACCGCCTCCATTTTTG GACATGGTCGCTTCCAGACCTCCCTTGAGAAGATGAGGTTTTACAACCGTGTCACGAAGTAAGAGTTGTT TTATCACAATTCTTCTTAGAAAGTTTCATGTTTGGTTATCTGTTGCTACTTATCTCAGAGATGTTATCCT TTAAACAATGTTATGGAGTTTTCTTTTGCTTTTAGTTTGTTACTTTTTTGGAAGTTNAAACGATTTGCTT CTC >gi|3449938|gb|AI099626.1|AI099626 34352 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159D2XP 3', mRNA sequence TATGGGACCAGGANTAAAGCAGCANGCAGTGTTTNCTCCCACNGGACCCTGTTGCGGTTTACCCAAGTNA ACCGCGNTCNTCTACCCGAAGGCAATCCNTGGGTACTGATGTCCCCTCCAATGCCTGCTCCCAGCTCCTG CTCCTANTCGTTAGTGCTCCTTCGGATTCTCCTTCAGTTGCTGATTCTGAAGGAGCTTCTTCACCAAAGT CCTCACACAAGAACTCCGGACAAAAGCTGCTACTTGCACCAATCTCCATGGTTATTTCCGGTTTGGTGGC ATTGTTCTTGTGATCAGATGGTTTTGCAGATTGAGTTATGTTTTTAAGTTACAATGTGAAAGATTGTATT ACATCATTTGAATTGTCTTTTTGATTTTTGAAACCCATTTTTTATTATACATTTTTATCATTATTATTGT TTGTCATTACGATTGTTGTGAATTGAAATTGTTCCTCC >gi|3449937|gb|AI099625.1|AI099625 34351 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159D24XP 3', mRNA sequence CCCTGGAATTNACCCNGCNCATTTGGAACCGTTNTTNACCCGCTGACCGTCTTCGGTCCNTNTACCCCCG GACAGGACGAGGCTGACCGTCGGGACCCTNTTAGCCCGAACAACAGGTGTTTCAGCTGTAACAAGAAGGT TGGTGTAATGGGGTTTAAGTGCAAATGCGGTAGCACGTTTTGCGGGAGTCATAGGTACCCGGAGAAGCAT GAGTGTAGCTTCGATTTCAAAGAAGTTGGACGTGANGCAATCGCAAAGGCGAATCCTTTGGTTAAGGCTG ATAAAGTTCAGAGGATTTGAAGAANACAAACTTTGTTATTNTTAAGTATTTCTTTGTCTTCTGCATTTGA TCAGTTTCTGCCTGGGATGTTCGATGTTTGGTTTCCATGAATCAAAATGAAAATTGCTGCT >gi|3449936|gb|AI099624.1|AI099624 34350 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159D22XP 3', mRNA sequence GGCCCCGCTTNGGCNNTGGACCTTTTGTGAGCCCCGNGTTTGTTACCCCTCGGAGCCTTNACATTTGGTA TGTGCCCAAGAAGATGGATATCTTCAGAAAACCAGACGATGTGTTAACAGCTGCTGAGAAGTNCATTGCA GAGAATGGACCTGATGCTTTTGAGAAGNTCTTAAGCCGGGCTGATAAATCNCANAGATATCATAAGCATG AATATGAAAGCTATGAAACGATGTATGGTGAGGGTTATCAGTACTAAGAGAAATTTGAAAAAGCTNTTAA TTTTAGAATGTGTGAAGCAACTTCATGTCTTTGTTGTTTGTTTATGCTTCCTTTTTGTGGATCTCTCTCG TGTAAAAAAGTTGCTAATTAAAATAAAGATGCTTTCTGCTCC >gi|3449935|gb|AI099623.1|AI099623 34349 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159D20XP 3', mRNA sequence AGTCATGGGCCGCAGATGNNCCATNCGTTTCNTAGCAGGGAAGNGCCNCCATAAGGATGTGAAAGGCCGC ACAAGCTGGCNTTTTAGACTCTACCTATGGGAAACCNGGATATTTATGTGTTACCTGCCTGTGNCTCTTG CGGAGGTTCTGGTATATCATCCCTTCTTCTCATTGCAAAGAACCAATCTGAAAATCTCCTGAATGTCGTA GTTGCTACATTAACACAGATTTCACCACTCTCTTTTCTCCTGGCTTTGACATTGTTCGGTTGGTCGATGA AGCAGACCATTAATGTCATTCAGATGAAAACTGCTGCAGACGTTTGTGTACTGTATGATATAGAGAAGCA GCAGAAGCCTTGATCATCTTCCTTTGTCTCAACCTGAAACTCTTTTTTTTCTTTCATTGTTTGTTCTCTT TTCACTGTGGATGTAGATAATTGTTTTTAATGAAATGAAGAAATATTGATTTGCCTTTTGAC >gi|3449934|gb|AI099622.1|AI099622 34348 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159D1XP 3', mRNA sequence CCCAAGTGGNTCCCAAGGGGNAGGNGCCACAGGGGTTTACCGTCCCTGGTTTGGNANNTNACCCATCCAT TGTTCATGCAGCTCCTGAAAGANCCAGAANCGAGTATGGATTCGATCAAAAGGNCACCATCACAATTCCT TGTCACGTGGAGGAGTTTCGTTACGTTCAAGCTTTGATAGATGGAGAGAGATCAGTTNACAATGGTNACA ACCATCATCATAGACATGGTGGCCGTGACCAGTATCATCATCTTGTTGGATGCTTCAGAGCTTGATGAAT AATGATGAAATGAAATGATGGGTGGTGATTGTATGTGTTCAAATTTTAATGTTTTTTCTGGTTTAATCTT GTGGAGTTGTGGAGCCAAAACTGGCCTAACCCACAAAAGAAGTGAATCTTCTAAATTCTATCGATTTGTA GTATCTTTTTCTGTAATTTTAATGGAATTTTAAGATTT >gi|3449933|gb|AI099621.1|AI099621 34347 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159D16XP 3', mRNA sequence CTANAAGGTTTCCCGGGACCTACNCCAAAGCTGCGAGTTAAGCTACATCGGTGCCTCCTAGTCGCACCGT TGGCGCTCNTGTTCCACTAGTGACGTAAGATTTTCCGGCGGTAGATCTAGCGTTGCAGAGTGAGATGGTG CGGTGGAGGATTCATGGGAAGAATCTGATGGTGGATGTTGGTGGTGGAGTCCGATGCTCGGGGATTGTTG ACGGCGGGTCAAGTCGAGTCAACCCGATTGTAATGGGTGGGCTACAATTAGAAGGCTTTATATTGGACTT TGATTTGGGTAACTCAATGATGGGCTTTGGACAAAGAACACGCTCTGATTCACACTTCGTTGTAATACAG AAACCTTTGTAATTGTAACCTTCTAATTATCTGGTAGATATCCTC >gi|3449932|gb|AI099620.1|AI099620 34346 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159C4XP 3', mRNA sequence AGCTNACGATTNTGGAATTGGCGGTTNTTACCACTTTTCCCTTATTTTCTCAGGGAAAGTATTGGGGATT GCTTGGTTTGCAAGTTAGGGTTTACTTTAAAGATTAGGGCTATATTGTTTTTTTTGTCTTTTCTGGTGTG TTGTGTCTTGTTTGGTATGTAGTCTTGTAGAGAGGCTGAAGCGGCTGCAGAAAGAAAGGGTTGGGATAAA GATTCATGTAGCCCGCAGCTCTCTTTTACGTTATGATTGTANTNAAGTATATATATATCATGAAGAAATT AAACATGGTTTCTTCGATTTATATAAAT >gi|3449931|gb|AI099619.1|AI099619 34345 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159B14XP 3', mRNA sequence CCTACNCATGGNCCCACAAACCGCANCCCGTNNNTCAAAGGTATTNGACAGGCTGNCAGAATTNTTTTGA TAGATCCTCCAAAGTTTTTGGACTACATACNTCCACACAGTNAGAGACAGGGAAGATAACATATGTTGAG GATATAGCCCAAGGACTTGAGAATGGACCTTCTGCTTTGATCGGANTCTTCCACGGTAAGAACGTCGGGA AACAACTTGTCGCAAGTTGCTCGCGAGTGAGATTAAAATTAACAAATGTTTTATTACCGTTTGGTTTTAG TTGTTGCTGGAAATAAGATCGGTTTGTACAAGCTGTGACAATGTTTTGTTTGTTGGTCAGAAATAAATGG ACTTTGTTTGTCTGT >gi|3449930|gb|AI099618.1|AI099618 34344 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159B11XP 3', mRNA sequence TAAGCCTGGAGATTTTTCCCTGCATCCAACGGATGCTCGGCTACTTNTCGCAAGGCTGGCGTGCCTGCCT TTGGGTTCTCTNCCCATATCAAAACACCCCGAGTCTGCTTCATGACCACAATGAGTATTTGGGTAAAGCT GAGTACTTGAAAGGCATTGAGGTGTATGTTTCAATCATCAAAGCTTATGCATCATATGAAAGCAAAAGTG GTTCACGAGATGAGTTATGAGGGTCTCAACACAGCCCATTCAAGTCTTCCTTTCGCAAATTTGTACAATC AATAAGATCTGAATCCATCCTGTGTTTGTTGTGGTAAATCAGAGACATCTTGTTCTTGTTGTGAGACAGT TGGCATTGGCAAATTGTATTATTCATTCCTGCTTTTTC >gi|3449929|gb|AI099617.1|AI099617 34343 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158P6XP 3', mRNA sequence CCCTTTTCCCGGCGAAGGTNCGGGATCAGTTTTTAGCCTTATACTGGATCAGTTGCGCTTTCAAAGCATC TCGTAGGAACCCACCCAATACTTCCGCATAGCTGTCAGTTTTGGGNGTGTTAAGTCACTGATAAGCATGC CATGCTTCATGTCACATGCANGCATACCTGCAGAAGTTCGTGAGGCCAGAGGTTTGACGGAAGATCTTGT CCGTATATCTGCAGGAATTGAAGATGTTGATGATTTGATATCTGATCTTGACATTGCCTTCAAAACCTTC CCTCTCTAGTTTTGGTTTGTTCTTGTCTCAGCTTTTGTAGTTTCATAGGTTCTTGAAATAAGGATCTATG TAACAAACCATAAAACATAATTTGGTGTTTGAAAACACATCAAGCAATAAATTCATTATTGTT >gi|3449928|gb|AI099616.1|AI099616 34342 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158N17XP 3', mRNA sequence AAACCTCCCACTTTTACNTGGCNAATCGGATNTTACCCATTNTTAAAAGTTATGGGTGGGGCCATGAACA TGTCTCAAATTAAGTGTACCTTTCAAGATTTGTAGTGTTCAACACAAGTCACAATNACTTAAAGCNCAAA TGTCATTTTCTTGACACAGATACATCATAATCTNACGTACAAAAATGAAACACAGACATGGCAAGAGCAT TAGCAGCTCCAGATACAGAGCATCCGAATGGAACAGAAGGTCACGATAGCAAAGGAATGAGTGTTATGCA ACAACATGTTGCTTTCTTCGACCAAAACGACGATGGAATCGTCTATCCTTGGGAGACTTATAAGGGTAAT TATTACTTGTTATAGTCTCTTCAAAGACTTCAATCTTCAG >gi|3449927|gb|AI099615.1|AI099615 34341 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158M17XP 3', mRNA sequence CCGTGCCTGNTTCCCCATGGGAAACAAGTTCCCCTAGANCCACGGTTGCGTCTCAGCCCCAACGGGGCCN AAGGATAGGNAAATGGCCNAGGTGAAANCCGCCCNGATGCGACCAGAACTGAAGAGGCCCNAAAAGCTTA GGANGNCTTTCGGGTGTTTCCGCTAAATTTGATTATTGGGNATGTTTTTTTCAAGACCAACAATCCTTAA CTCTAGTTTCAAACGACCAAAGTGACAGAAGTGCAGAGGAAGAACGAAGAGTGGAGGATAGTCTCTCTTG TATAGGATCGTTTTTTCTTCTTTCTTTATAAAAAAAATTGTTTGATTTTTGTGACTAAAGGATTATTTGA TTTGGTTTGGTGTTGGTTTTTTCGGACAAAACCTCCTCAACTTAATATGAAGCTTGTCGTGAACAATGGA TTATGACTTCACTTTTAAAAGTCGTGTAATAATTAATATCTTTGGTTATTGTTACTTTTCTACC >gi|3449926|gb|AI099614.1|AI099614 34340 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158L10XP 3', mRNA sequence TTGGGCTCCCNAAAGGNCATCCGGTAGTTGTTGGAGGGACTTCAACAAGGGTTTGGGTGACCACAAAGGA TCCTCGATCAGCTCAAGGCTGNATGTCGAGAAGTTCTCGGCGTCTTATGAGATGCCTGGATTCCTCATGT CTGAGATGAAGTACAAGGATTAGAGCATCTTTCTCTATATGCAAGAGTAATCCTCTATTATTATCTCCCC CATATATCAAATATGCTTTTGTAGGATCGCCTTAAAGGCGAAGAGATGAAGATGCAAACAGTAAAACAAA AGGGTTTTCTTTTCAGCTATTTCTTCTTGAATGTTTTTTTTCTTTTTCTTTTGGTTTCTTATTGAAATTG TTGTATTTTTGTTGGCTTTTTTCTAATAATATCAGCGAGTTTTTC >gi|3449925|gb|AI099613.1|AI099613 34339 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158K21XP 3', mRNA sequence ATTACGCNCTGNTCGAAGCNGCGGCTATGCTGGAGCATATCATGAGGGNCGTGCGCTGGACTNGCTCCGG GGAACCACCATGATCATGGAANTCAAAGGGAACATGAAGAAGCATGAATCTAAGGACCNTNAATTAGCTC ATAATTTAAGAGTCTNTAATNTGTGTCGTTGTTTGGCCCTTATATAATGTTCCTCAATTATGAAAGCTTG TGTTTCTGAGAGACCAAAGAGCTTTTAGTTTGGTCTCTGTAGCGTGTGAAGTNACTTGTATTTGTAGTAA TCCGGATGGGTTGGTATATTTTGCAAGTGTGTCTAGGTTGGACCATAATTTCAATATCTCTTATGATTTT GTTTCATATGTTTGTAAAACAGCTTATCTTTTGAGATATATAATCATGGTTTTGGTTCA >gi|3449924|gb|AI099612.1|AI099612 34338 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158K20XP 3', mRNA sequence CACAAACCCTCAGGGCCAGAGGGGGNTNGGAAGAAGTGAGGNCCTCCAAACCNTATGGCAACATCTCGTT NGATGATGTGATTGAGATNGCTNAGATAATGCGTCCCTAGANTCTATCGCTAAGGAATTGAGTGGAACNG TGAAGGAGATTCTTAGGACACTTGTGTCTCTTTTGGTTGCACTGTTGATGGTAAAGACCCTAAGGNTCTT CAGGAAAATTNACCGTGCGTGACATTGATATTCCTNACGNGTGATAAAGGTTTTTACTTTTGAGTTCTCT ATCGTTTTATNTTTTGTATTTGATTTTGAGGATTTNGTATTAGTAATACTATATTTCGGAAGTTGAGAAT TGTTGGCTTTTGCCCATTTGAATCCTTTCTTGGGATTAATCAAAATGTTCAATTTTCTAC >gi|3449923|gb|AI099611.1|AI099611 34337 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158K15XP 3', mRNA sequence AGTACTTGACAAAAGAAGTNCTTGAAGAAAGCACAACCTTGAGGGATTGGCTTTAGAGTGATTGCGGCGA ACAAGGACCCGTAACCTCTATGAGTTGAGGTACTTCAACATTGCCGAGAACGAAGCTGAGGAAGAAGATT AAAACCGGTTTTGGTCTNGTGCTATATCCTCTGTTCCTCTATTTCTGTTGGTTTGGTTTTGATTCTTCAG TTTTGTGTTAGATATTATTATGTAGTTTGATTGAAGTAATAGCTCTTTGCTTTTGTTCGTTGCCGTACGT TGAGATTTTCTATGGAGTCTATTTCTTCCAAACAGTAATGATGTGAAATTGGACTAATATGATTTAGGGT TTGATTAAGTT >gi|3449922|gb|AI099610.1|AI099610 34336 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158J6XP 3', mRNA sequence CCCCTTNTCCCACNGCCTCGGGACTNCCTTGCTCGNCTTCTCTTCTGGNGCANGCTATTGGGGCCATTNT CTCCNGNGTTTGGAANATCGAATGGAACTGATGGAGGGCCCTGTCTTTTGACATGCGATGCCAATGGGTC TGAGAACGTCCGCTTGAAGCTATCTTTATACATCTCAACATTGTCTTACATGCGTATCAGCGGCCTTGAC ACTCTTAAACCAACAAAGTGGGCAAGTGACTAGGAGACAGGCCAGCCTTTGAGCTTTAGCTCTTGCACAT ATATGCAGCTTTGTGCTGGCCTGAAAATTCATGGGCGAGGTAAAGTGTAACATAAGAAATCACTTCTACT AAAATTATTTTTCGTTGCATTATCGTGTGATGGATCTGCAAAGCAATAAAGCTAAGTGTAATTGTATTCA GGAATATACTCGTTTGGTCATTAAGTATAGTTTGTCCTAC >gi|3449921|gb|AI099609.1|AI099609 34335 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158J1XP 3', mRNA sequence AANTTGACCCCCNCCCTGGGCGCCAAATGGGAAGTTCCCTGGACGGGCCAAGACCGNTTAGTTTGNGGNC NACATTTCCCCCTGATTTGGAACCCCCCTTGCTGGCCCAATCTCGTGATGAGTNGCNNTCAGNCCTGAGT TTTGAAGGATGGGTGTCAGCTACTTGAGAAATGTATGCGTGTGCTTCTTTACCCGTGACAGATCTGCTAT TAACAAGCTTCAGATAGCGAAGATCACGGAAGAGGGCGTGACGGTCTCACAGCCATACTCATTGAAGACA TACTGGGAATTCTCGTCATTCCACAACCCAACTGCTGGTGCTGCAGGCTCCTGGTAAGAAGCCAAGCAAC CACATCGGCTGGCGATCTTTTAAGGAAGCTTTTATTTTATTTTATGTGATGTTGTTAAACACTTTGTACT GTAGTTGTTTTACTATTAAACTTGGTGGTTTCTTTCTGACAGTCCAGAGTTTAGATCAATGAGGATTTAT AAAAAGTTCTGGATATCTTTGGGTAGTAATCCATACCTTTGTTCATTGTTAATCGTTCTCC >gi|3449920|gb|AI099608.1|AI099608 34334 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158I5XP 3', mRNA sequence ACCCTCANGGCCCCTAAGGGCTTGGNACATTCCACTGNACNGNTCTAACTGCTATGGATGCTCAAACCGG AAGCAATGGATCGATTCGGGGTCATCCACTTCTACTATGGAGGCCCTGGNCAAAACCAGAAGTGTCCATA AGCTAGGCTCCCAAGTNGTAGTGGCTCGTCTCTCGAGTTATCTTGTCTTGTGAATTCACCTTGTCTCTTT CTACACACACTCACTCAAATCCGCCNTCTTGGGTAGTTCTTAGGGATGGTCAAAGTTATGTAATGGTNAA AGTTTGGTGTCTTTTTCTCCATGTAAGTAGGTGGGGAAGAAGTGGAAAGGTGTGGCTTAAGTTTCTTTGA AAACTCAGAAACTTTGGCCCTTNGTGTAATTTTACTTTGTCTCCTTTGTATTGTGATTTGTTTAAACAAG TGAATGAATCTCTC >gi|3449919|gb|AI099607.1|AI099607 34333 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158H11XP 3', mRNA sequence GTGATGTAGGGACCAACGTTTGGAGCTATGATGATATCGGGGACAAAAGGCGGGACAACTTGCTCTTAAG GCTTTGGGGCTACCGAATGCTATTGATGGAACTCTCGTCGGAAACCTAAGCCCGGAGCTGGTCTTAGCCG CAGCAGATTCAGCTGAAACCGTAGATGCTTAAAATCAAAAGGTTTTAACTTTTAAGAAAATGTCCCTGTN TCTTCGGATGTTGAAGGAGTGCAATAAAAGGAGTTTAGGTGTTTTATATGTCTTGAACTTTTCTNGTGTC TTTGTTTCT >gi|3449918|gb|AI099606.1|AI099606 34332 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158H10XP 3', mRNA sequence TANATTGTTTTTGTGTACTTTATCCGAGTGGATAAAGTNNCGGGGAATGTTTTTCTTTTGTACAAAAAAC TGTCTTCCCNCCTAAGCAATGNGTGTTAGTTTCTGTTTTGGGCTGTGTTTTGCAAGTTTTTGTATTTCAG AGTTGTGTAGTGTAGTTGCAAGTGGCGGTTGGATCTTTCNCTATCTTGTTGGATTTTGATGATGGTTGAT GCTTTTGCTTTAATGTTNAATAAATAAGCATACTTTTGCT >gi|3449917|gb|AI099605.1|AI099605 34331 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158G3XP 3', mRNA sequence GCNCAATGAAGGCCTTTCCCGTTTCACATTTGCAANCCAGGCGGGACTTNACATGCTGGAGGACNACATT AGNTNCTCCTTCAGNCATCCTCTTTAGAGGAAGATATTTGATGACAATGGAAGAAAGACTCTTTGCTCTG AGTTCCCACAGCTCATGCAACAGGGNTTCGCGTGCCTTCAAGGCGGGATATGTCTCTCAAGCATGGGGAG ACCAGTNTCGTATGAGAGNGCAGTTGCTTGGAAAGTACTAAATGAAGAAGNAAATGCTCATTGCATCTGC TTTGTGTTCATCAATTGGTCCTTTGTGTGAGATTTATTGTATTTTGTATTNTCAGACTAAGCTTTTGCCT TTTGGCTGTATTGTAAAACGGTCATGTTGTTGTTGTTGTTGTTCTTGATGTTGCTGTGAACACGTAAAAC AGTGTTTTGTTTCAAAACTCAAGAAATGCTTGCTT >gi|3449916|gb|AI099604.1|AI099604 34330 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158G23XP 3', mRNA sequence TAATCTTNACCAAGGGCAAGCCNTTGGATGACCCCCTGGATATTCTGGGGGTGGGGCCCATTCCATTGGG AGGCCTCGATAGCTGCATTTTATCACCAATTCGTTCTAAGGGCCTCAGCTCCAAGTCCCTCGGTTCATTC AGAGGTGCAGCCAACGTTTAAACTTAGCCACGAAAGGANAAAAGTGTGCCTACAATTATGTNGAAACATA TCCTCTTTTCCACTCGTNTCTTAGCTTCTTCCTATTTTCTATTTCTAACTGTGTGATTCCATATTAAATC GNGTGAAATGTTTTTCAATTCATCTTTGCAACGTATGTAAGTTTGGTGTATTGAGAANGAAAATCGNGAA AGACAACTTTTTCTTCGCT >gi|3449915|gb|AI099603.1|AI099603 34329 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158G14XP 3', mRNA sequence CCTTTGGGCGTGTTAACCAACCNTTGTGATTGGGACCTCCNCAAAGGTTGCCATTTCTGGNGTCCACCAC TGNGNAATTCGNTGGCCAAGTTTTTTTGGAAAGGTTGCTGAGAAGAAGAAGAAGNAAACAGAAGGCGAAT TCTTCGAAGCTGAGAAAGAGGAGAAGAAGGAGATCCCACAGGAGAAGAAGGAAGACCAGAAAACCGTTGA TGCTGCTCTGATCAAATCCATTGAAGCTGTCCCAGAGCTCAAGGTTTACCTTGGAGCCAGGTTCTCATTG AGTCAAGGAATGAAACCACATGAGCTTGTTTTCTAGATTTCGTAATTGTTTCTCGAATTTTAAGAATATC TGTTTCCCCGAGTTTTTTCATCTTTAATCGTCCTTGGATCTTAAAGACTATTTTCTCTGNTTTTATATAT CAAATTTTCGAGC >gi|3449914|gb|AI099602.1|AI099602 34328 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158G13XP 3', mRNA sequence TGGTGCCTCCATCGNTCNCCAAACCGGTTCCATGNTCCCCAAAGAAACTGGGGACNCTACTCGACGNATG AGCCCACAAACGCGTTCCAACTCAAGAATTGCTTTCTGCCCTCNACATGCATAACGAAGCTGTCAGAGCC ATTGAGGTTTCCTCCTAACACTCACAAGGAGAANGAAAGCGATGAGAAGAGGAGAGAGAGGAAGCNACAG GAAGAAGNGCTTGCTAAGCATATGGCTGAGGAAGACGATGATGATTNTTAGACAAAGGTCATCTATNTCT NATAAGAGTTGACTCTCCATCTGTCTCACTTNTTTTATGTTCACAAGTTTACTTGGTACTCTTCTCATCG TCTCTAAGTGTTTCTTTATTGAGGATTTTTATCCTCAGGAACCTTTTTATTACTCTGGTTTCACTTTAGG AAAAGATATTTATCTTGTTGGTTTC >gi|3449913|gb|AI099601.1|AI099601 34327 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158F8XP 3', mRNA sequence CGTGGGCAATTTCACAGGAGGGTGCAATGTANTCGTTNCCCTCAAATCCGGTTACCCAACGGGNGCTCTC CAAGCTGCAACCACNAGCNTGGGANAAGTNCCAAGACGTTTTCTTACTGTCTCAAAGCTCTTAGANAGCC ACAGGAATCTCNCACAGTACCTGGCTCTGGATTTGGACAGAAAGNAGGTGTGTNCCATCTGAGGACNACA ATCCTGCCAGCAGAAGATGAGATGCCGGAGATCATGGATAGCTTCAAGAAGTTCAACGACGAGTTCATGA CTCAGTATGATAATNACTTTGGTTATTCGAAAATGTGATTACTTCTTCTTCTGAACGACTATTGTGTTCT GCTACACTCTTTAAAGCTAAATCTCTGTAGTACACTCTTTCTCTTTGCCCTATTCTATAAACC >gi|3449912|gb|AI099600.1|AI099600 34326 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158F20XP 3', mRNA sequence GCCCCAACNNAGTGGTGATTCCTNTTGGGGAACAAGTTCCGATCTTCGTCNACTTGGTGGCANTCCAAAN CAGNAGAGGCTAAACCCTTTGCTGAGANAGAATCCCCCTCTATTTCATGGAGACTTCAACCTCTAGNCCG CAACCCCATGTTGAAAACCGCATTCCACGGAAGTGCTCACTCAATCCCACAAGATNGTGAGCAAAAGAAG TGTTGATGGAGGAGGAGAGTCGGCTGATTTACCGGGAAAAGGAGAGACGATAAACGTTAAAGAAGACGGA TCGGTTCTTAAGAGAATGGGTTGCTGCTCTAACTAGAGTGGGGGGATTGTAGATTTGGCTTGATTTGGTT AGGGTGAGACNACAAATGATAATCTCTTTGGGTCTTGCAATCAAAAAAGAAATNAGAAACGATTACTTTT AAGNTCATGTGTATGCTTTGGTAACTTTGGCCTGTAAGGTCCTTTAAAATTTAAGTACATGATTGGT >gi|3449911|gb|AI099599.1|AI099599 34325 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158F13XP 3', mRNA sequence TTCCAGTTTAGGCCCCCTGGCATGTACNTCACTGGAAACCGGGNGAGGCTGAATTTGGTNCCCGATAATT CTTCCTTNAAGACGGTGACCAGGNTCGATTTACACGCTCGACATCTCGAAATGGGTTCCAAGACGCTNCC TCTGTNGGAGCCCAATGTGAAGGGNTCTTTCGCATGGTCGTTGCTAGACNATCTCGAATGGGCAATGGGA TACNCGGTCCGGTTTGGATTGGTTTATGTGGATCTCAAAGACGGATGTNAGAGATATCCCAAGNAATCNG CTGAATGGTTCAGAACAGTTATTGANTGAAAAGAAAAACGATTGATGATGATGAGATATGTATATTTCAT TATATTAGTTTCTCTGTTACTCTTGAGAGATTTATATATTTTTCCCCCCCTTTGGAAATAAAGAGAAATG GTTTTAGCT >gi|3449910|gb|AI099598.1|AI099598 34324 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158D6XP 3', mRNA sequence ACCTGGACNTCAAGNATTTTGATTAGCCCGCGCGACAAAGTCGGTGTCGGAGGAGNAGGAAGGACGATAC AGGCCAGGTCTACTATCTGTACGAGATAGATGGGGTTGGAAAGCACAGCCTGATCACAGTCACTTGCTCC AAGAACAAGCTCTACGCCCATTTCGTAAACGCCCCTGCGCCCGAGTGGAACCGCGACCACGATACATTAA CCCACCTTCGCGACTCCTTCAAGACTGTCTCTTCTTCTTGAAATTTCAATGTTTGCTTGTCGAAATGTAT TTAATTTGGTGAGAACGAGAATGGGATACATAAACTGGAGTTTGTTTTGTGATCCTTTAATTATCATCAA TTNTTATATAGGT >gi|3449909|gb|AI099597.1|AI099597 34323 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158D16XP 3', mRNA sequence CAAATTCGGNCNGGGGCCCTTAAGTTTTCAAGCTCTCTGGGTGCCCCCAACCCAGNTGATCCGTTTCTNG AGGAACATTGCTAAGCACTGGNAGGGGTAATGAGGGCAGAAGCTGTGGATACAGCTAAGGAATGGACCCG TCTTTATGCAAGCGGCGCATGATAAATTGGAGGGTGAAAACTGNAAAGATCTCTTTCATCCAAATNACAT TACATTTGCTGAAATCTATCTCAACATCAAAGTTATAAGAAAGCTTTTATTTTGCTGGTTATTTCCCCCC GCCACTGCTCTGTAATCTCTCTGAATCACACTGTATCATTACTCCTAGGATCAATACTCGTTCTTATATT TGAAGTTCGTCAAAGTCTTTTGAGTCAAAAATATCTATGTTTCTCT >gi|3449908|gb|AI099596.1|AI099596 34322 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158D13XP 3', mRNA sequence AAATCCCTTTNAGGGTTNGGCCCCCTAATTTTAACATCCCTCGNGGGCAGNCATAGCCCGGAAGCCATGG ACCAAAGTTCATCNAATTCTGAAANCCAGCCACTTNGCAGTTCCTGAGGCTGTTGATTTTGTGGACAAGT TGCTGAGATATGATCACCAAGAAAGGCCAACAGCTAAAGAAGCAATGGCGCATCCATATNTCTATCCGAT TAGAAATGCAGAGAGCAGCCGTACGCCGCGCAGCCAGTGATCTCGAAAACATTTGCTTGTTCAATCTTCT GATTTNTCATNTCTTTACGGATTCAAATTTGTTATAAATCGATCTGTCATTGTTTCATTCTCTCAAGTGT GCGTGTGTTACTGTT >gi|3449907|gb|AI099595.1|AI099595 34321 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158D12XP 3', mRNA sequence GTGGCCAATTANGGAGGAAAGGGATGGNAGNTCCCATTGAAAAATCCCAGGGAAGTNCCGATCAGGTANA TCCGTTAAGCCTTTGTGAGTGTGAGAAGACCCAAAATAGGAATCGTCGTTGTGTAAATGGCCAAATGNGT GTTAGTAAGTGACTTGTTGTGTCTTTGTTGCTTTTGTTTTCAGGAAAACCCCTTGTGATCAAAATTTGAG GGGTTTTTGTTTTAGCTTGAGTTTCTGAATGTATATCAATTCAGCTACCCGTTTATNTNATAAATAATCT CCAATTTTAAATGTTACTCTCTTTTCTTTTTGTGTGTTTTCTTCTTACTAGTGACCAATGTAACTTGACA GTGTCTTCTTGTACTAGCGTACTAGCGTTTGCTTGTCCC >gi|3449906|gb|AI099594.1|AI099594 34320 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158C8XP 3', mRNA sequence AATTTCCCGGNCCANGCCCGNGGCCGTTTNNTGTTNCTNCGTGCCGNTCCCCACATCCAACTCCTCTATT CAGATCTGGAATTTCATCGTTGATGGGNACACAATGGAGCAGCTCAAAGGGGAAGATAGACGTAGATGAA AGAGAACCAAGTCGGTGTCTTTCTTAGCTCTTGAAGGAGATGTGTTAAAGCNATATAAGAGCTATAAGAT AACACTTGACGTTGTTCCTAAGGATCATAAAGTTTGTATTGCAAAGTGGACATGGGAATACGAGAAGTTA AATGACGACGTTCCTCCCCCTACCAGATCACTGCGTTCGTTGAAGATTACACACGCGACCTCGAGACTAG ATTGTTGTCTGAATCATGAATATATCATCAATGTCTCCGAGTTCCTTGTCAAATAAATCAGATCTTGCTA TGAAAATAATATTTTTAT >gi|3449905|gb|AI099593.1|AI099593 34319 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158B8XP 3', mRNA sequence CTGTAGGNCTTGGAAGNCTATGGGTTGCAGGAGAGGNGGCCATTGGAGTCTCTGGGAGAAGAGAGTCGGA ACCAGTGATGTATCAGACGTCTGAGAAGCTTGGTAAGTACTGTGGATCGCCTAGATCTACCTTGAAGTGT GAATGGAGCAGCAACAATAGCTGCAGCAGCGAGGACGAGAAGGACGAGGGAATCTAGCAGAATTTCTCTT CCTAATAACTATTTTCGAGCTTTCTGTTTTTGTTCTCTCTTTTTCAAAAACTTATTAAGCTCTTATGAAT AATGACTTGTGAAGTTTGAGTTCGTCTCCTTCACAAGCAAGTTGTATTGGTGTTTTCTACTTTATGAATA TGGGTTTTATATACCTAAAGACTTGTTATGTTATTATTCT >gi|3449904|gb|AI099592.1|AI099592 34318 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158A5XP 3', mRNA sequence ACCTTNTTTCCAATTTNNAAAGCNGCGGGGGACNCCCTTTACCCCAGGTTCCAGGNTCCAGGTTCCCATT TTTGATTGGTTCCACCACCTCAGGTGTCTGCTTTTAGCCCGGGAGCGTCCAAGGGCGNCGGGGACAACAC CAACACAGGCACCTGCACCGGATACTCCCGCGGATGGACCAACGGGACCCACAACTAAATCAGGAATTCG ACCCGTAGATCAGCCCATGCAACCCACCGGCCTCGCTCAATCTTCTACTTCTCCATTTCTCCCGTTGCTT TTCATATCTCTTATCCTGTTGAACTTATAAGCCCAATCGACGTGTAAAGTCTTTAACCTGTTATGCATGT GTTGTCAGATATTTTCATT >gi|3449903|gb|AI099591.1|AI099591 34317 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158A15XP 3', mRNA sequence TGGCCANACTTCTTTGCAGTTCCCCNTTGGCATTTTTGNAGATGGAAGCCCGGGGCTAGCTTGAAAGGCT CTTGCAGTGGCTGAGAAGANGACTGTTGGGAGNTCGTTGGCCAGAGTACTACGACACCCGNTCTGGCAAA TTCATTGGAAAGCAGTCTCGCCTCTACCAGACATGGACAGTCGCTGGATTCTTGACTTCTAAACTCCTCC TNGCAAATCCAGAGATGGCATCACTGTTATTCTGGGAAGAAGATTACGAACTTCTCGATATTTGTGCATG TGGTCTTAGAAAATCTGACCGGAAGAAATGCTCCCGAGTCGCTGCCAAGACTCAGATTCTTGTTCGATGA ATGCAANACAGTCTCTTTTGCTACTCTGAACATTCGAACACAATAAGCTTTTTAGGCT >gi|3449902|gb|AI099590.1|AI099590 34316 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157P9XP 3', mRNA sequence CCCACAGGCCCCAAAGGGGGGTTTCAGGGCGGCCCCAAAGGGNGGGAGAAGGATCCCCATCGACTTTTGT TCTTGGGNTTTATGACAAAAACAAGGNTCAGTTCTATGAGGACTAATCCCACTTCTAAAGAAGGTGGATG AGAAAGAAGGCACCACCACCGGAGGCCGAGGAACCGTTCGCGGTGGTAAAAACTCAGCTCCGACGCCTGT GCCGAAGAAGAGCGAGGGTGGATTTGGTGGCTTAGGAAGCCTCTTCAAGAAATAGAAGNCNNAAATGTAT AGTNATTTGCATTATTCATGCCTCTGTTTTCATTCTCTATAATTCTTCGGATTTCACTNATATATAAGCT ACTCTTTCTTAATCTTATTTGAC >gi|3449901|gb|AI099589.1|AI099589 34315 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157P7XP 3', mRNA sequence GAANCCGGGTTTCCCNGGCAGGTAAGGTTCCCGGAACAAAGTTGGGGGTATCNCAGTCCGATGTGGCGCG CCCCTTAGTATTTGCTGCCATTGGAGCCGGGATATGCTCTTGCCTTATCCGTCCCCTCCACGGGCCAATG GATCGGTTGCGCGCTGGGAGACTTGGCTGGTCCGATGGTTGTTTCGGTTTGCCTGCAGAAGACTCTTCAA GCTGATTATTAAGTTCTTGTGTGGAAATTGAATTCTTCTACTTGAATCTTGATGATCCAAATGAAATCAT AGAGCTTGTTTTTTGTTTCTGAAATTTCTTATTGTCTTCACTGAACCTTAAACACAATGATCAATAGATT TCTCAAAATGTACCTACTTTTGACAACAGCACAATAAGTCAGGTATTTATTTTCCTC >gi|3449900|gb|AI099588.1|AI099588 34314 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157P5XP 3', mRNA sequence GCAAGGAACGAGAGGCCTTGGGAGCTCTACCACTATACCAGCGCACACTCCCATANGCATNCCTTTCCCC TTNTCTTGTGGTCAACGCTGCTTCTCTGCATAAATCTGCAACATTGATATTTTNGTGCTCACTTTCTGNA CAGAGCTATTTACTATTTGNAAAAGCATAAATCTGTGATAGTTTTCCTAAGTGGATATGTTGCTAGTTAC ATTTTTATCGCTTTTGCTGGCTTGAATAAAATCGACGACGCAACTCAAGTCTGTCTCGATGATTT >gi|3449899|gb|AI099587.1|AI099587 34313 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157P3XP 3', mRNA sequence CCATGGGGNGAAAATCCGGAGGGACCTTCCAGGGCCTTTTTTAAATCCTACGTTGAAGTGGATGGCCAAT ATGTGGAGGNGGGATGCGTGGGCCAAACCATGTAAGATATGCAAAAAGGACCCCAAAGGGTGAGGCAAGA CAAGTGGACAAGTTAGGGAGATATGCTCATGTCTCTTGTCTTCAAAATCCTCCCTCTGGAAATTTCTTCA CCAGGCTCTTCTCTAGATGATGATGATCAATTTCCCAAATCATATGAATGTGTTTGCTTGTAACTAAATT ACTCTTGAAATTTTGTGTGTATTTTTATAGAAATCGAAATTCGTTCTACATACCAANACAAACATCACGG TTATTTGGGATCTTGTTAAACAAGAGACAGAAGTGGATGTATACATTTTTGGTTTAAATGTTTTCAAGTT TTTAT >gi|3449898|gb|AI099586.1|AI099586 34312 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157P24XP 3', mRNA sequence GGAGGNCNTTCCAAGGAGCCGGTGGGCCGACAAGGAGGACGGGGGACAGTCGGGGAAGTNACTGCCGCCA CGGCTGCTGCTACAGAGGTTACAACGGCTGCTCAAGATGCTGCTCGTATGCCGGAGAAGCTGTTCAGACT CAGCCCGGTCACTAACACNATATCTTAACCAATCACCACCATGCATGTATNGCATTATGTATGTATGATN TTAAGTAAACCATGGTGCGTTTGTAATGAACTGCCTCAAGTTTNTGAGGCACTATAGATTAAGNAGAGAA CTATGGGAATAAAGTTTGATTATGTAATGTTTTATGTGGTTTGAGTTGTAATACTTGCTGTTTGCATAAT AAAATCGTTTGTAGTT >gi|3449897|gb|AI099585.1|AI099585 34311 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157O14XP 3', mRNA sequence CCGGGGGGATTCCAACGCTNCGGGCTTTGCACAGCCNTCTTCNGGATGTGCCCCNAAATTCAAGAGTTCT TTTGGTGATGGTNAATTNGCAAGTGGCAACCGAGCTCAANGCTTATGGCAGGAGGAGACTCAGATGGGNT CAGAAATACTTNATGNTCNATNATTATTGCTCTGATCTCAAAAGGTTCCCTCGTGGATTCCCTCCAGAAT GCAAGAAGTCCAGAGTCTGATGAACACATATTACCTCATATTTCTCTGCTTGTTTGATGCAATTCTTAAA TTCCTCTGTTATTCCATTGTACATTGTCAAGNTCAATAAAGCATTCCTGGTTTC >gi|3449896|gb|AI099584.1|AI099584 34310 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157M6XP 3', mRNA sequence CCCAGGACCATTTTTTGAANCCCGNTACAAGGGATTCATCGTTACACAGGATGATAATGGAGNGGTTATA TGTGAAGGATACGATGAAGGTCCTCGTTGTCCCACACANGTCCCAATGGTAGCTTCTTACTCAAGAGAGG TGGGAGATTCTTGATCTTCTGCAAAGAAGTTATCCAGGAGCTGAGCGATTCAAACAAGGATGGTCAAAGA CCGATAATTGCTTCAGAACAAGAGTTCATGATGATCAAATGGAGCAGCTTTGACTTCCTCTAAATCCCCT TTCTTTTTTCTTCATCGAAACATCAAAATCTGGTTCTCTCTTCAAAAAGGCCTCTTGAATAAGAATGTAC AGAAAAAAGGCTATGAAAGAAGCAGCGATTTGCTTCTTTCTTGTTTCTCTTTTGTAAGAAA >gi|3449895|gb|AI099583.1|AI099583 34309 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157M14XP 3', mRNA sequence TCCCAAGGACCCCGGNCNTAGNAAGTNNTTGAGCCTCTTCTCTACCTTTTCANGAAGCANATGACTGGNA AACTGTTTTGCTTCACAGACGGGGATCCATTTGTCCAGCACAAGGAGCNAAATTAGTAGCCGGGAGAGAT ACTAAGAGTGGTTAAAAGAAGCGGAATGGCATCCATCACTTCACTGGAAAATCAATGCCAACAGAATTCG CAGATGACTCTCCTTATGATCTTGTTTCAGCAGATGGCAAACAGACAGTAAATTCTTCAGAATGGACTTA TTTCTGGGAAGAACAATGGGACTAAACATTTCAACACACACAACAACAACAACAAGACCCTATCTTCACA TAATTCACTGTCTTAATGTGATAAAGCTTTGCATTAGATTGTTTACATTACAAGTGTCTCTGCTATAATC TGATTCAGTTTCGCTCG >gi|3449894|gb|AI099582.1|AI099582 34308 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157L22XP 3', mRNA sequence GGTTTTTGGTNCCCAGGCTGCCNCTNNCGCCACCCNGATCNCNTATGGNAAGNGTGCCCCGGAGGGGGGG TTNGCCCNAGGGAGTGNCCTATGTNATGNTGGGTGNTTTACCACCACCACCATTNAAACNGAGTNTTTTG GGTTCGAGGAAGAGACTGACCCATGAGCTGGATGAACATTGTGGGAGAAAGCTGATGATAGTTGCTTGGA CATCTTCTGAGAATTGGGGAGGTCTCAATTCTGATTCTCTCTTAGACCAATCTAGCAGCAATTACCCTAA CTGGTGGGAGTTTTGGTCATAAAAGCATATAAGAAAAAAACAGAACATAAGCGAAGAGAAAGAGTGTGAA TAGTTTGTAAATTATGTGTTAAGAAAAATAAATTTAGTTTAGTTTAAATCTTGTTTCGATCTATGTATCT ACTATGTTCAATACTCTTTGTAGCTAATTAGTAGCTTATAATGAGACTAGAAAAGTTTTGAAGTCACCAA GGTT >gi|3449893|gb|AI099581.1|AI099581 34307 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157L21XP 3', mRNA sequence CCTNTTNCAAAGTCTGGAANGCCGAAGCCGTTGAGATTTGGTCAAGAAGCTGGGCTAACTTTGTCCCCCA GAAGATGCCCCTTCTAGAAAGTTGCTCGAGGAGGTGAAGAACAGCTACTATTTGGTAAGCTTNGTGGACA ACAATTACATCAATGGTGATATCTTCTCTGTCTTTGCTTGATCTCCGAGAAAACCACCGGCGAAGAGGAA ACATTCGATTTCGAGATTTGTTTTGTNCCTTTTAAAGTTATTTTTGATTCGTAATANCCTTACTTTGATG AATCAACAAAAACATCAGTTTGATTGCAATGAAAAAAATCGCCTTAGCGGTTTGTTCTTTCAAAC >gi|3449892|gb|AI099580.1|AI099580 34306 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157K5XP 3', mRNA sequence ATNAAAGGAATTNAGGCCNGCAAACGGCCAGCNCNGTAGCNGTGNAATGTGAAGCNACNGCAAGCGNAAA GACTCTGNTAAACTTAGGAACAGTTNAAAAGTGAATGACGNTCACCAGAAGTCCCAGATGTTGTCGTTGT GTCTCCATTCGCCATGACATTCACAAGAATCAAACTCAATATCTTCAAAGTAGGCTCCTCTATACTATTC TGTACCATTGTCTTGTAAATTGAGGATATGCAGATTCCATACATTTTGCAATGAAACACTGTGATAAGAA ATATGTTGTTACATATGTGTTTTTGACTTATAATAAAGCATTTCATTTGTCT >gi|3449891|gb|AI099579.1|AI099579 34305 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157J7XP 3', mRNA sequence GAGGGNTTGCCCTTAAGGNTCTTGGTTCATGGGGCCAAAGCGGTGAAAGCAAACNGGGGGCAATTGNTCC GGTAGATGGAGGGNCCAAGCCGGACNAGANNCAAAGCCGGAGTNAACCAAGAAACCAGCCTCGTGGTGAA GAGATGAAAGNTCTGTTCAAGAGTGATATGGGCGAGAAGANACAGGGCAGAGCGGTGCCGCGGCTGCAGC AAAACCTCGGACGAAGTCGAAGAACTCATTCAAGAGCAAAGCCAGATATAAGCGTAGGTNAAAGGNAAAA GCATTTTTGAGAAGATATCGAAGGACAAACCCACGAGAAGAAGGACATTTCATTGAGAAGGGTTTAAACA ANNTAAATTATTGTTGTAATATCATAATTTAGAACAAAACTGGTTAAGATGTTCGAAATTTTGTTTTCTT TGTCCTATGGTTTTTATAATCTTTCAT >gi|3449890|gb|AI099578.1|AI099578 34304 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157J6XP 3', mRNA sequence CCTTGCCNTTNNTGCCGTCGAATTGCTAAGGAAGTTGCTACCTTCTCCGCAACAATGGATCCCTTGTGTT GAANTCGAGTTGGAGCNCGGATTTGTGTACCGTGAGCACGGAANCACTCCCGGGATACTACGATGGACGG TACTGGACAATGTGGAAGCTTCCATTGTTCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAG AATGCAAGAAGGAGTACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATG CATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACTGATGCTTAAATCCTTTTCTGGAATATTCAATGT TGACTATCCGGAACCCAATTTTGTATGGTCAATGTAAATTTAAGTAATTATTTTGCCAAAGTGAAAAAAC TGAAGGTTTGTTTTTCTATCGTTTCCTCTATAAAAATCTCTATTCATATC >gi|3449889|gb|AI099577.1|AI099577 34303 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157J17XP 3', mRNA sequence TTACCCCGTTTTNTCACCGGTTCTAGAAATCTTTTGAACACNCTGANNTCCTTCNCGGATACTGCCCGTG ATNCGNACGAGGATGATTNNGACTTAAAATCGCCGCGGACNTACGACGAAGGAGAAGGATTNANCGGATN CTCGAAACGGATGTTGGAACGGAGAGTGGGATGGTAAATCTGGAGTTTGTCCGAGGGTATTTTGGAGATT TTGGAGTTTTGGTGTTCGGGAAAGTAAGAGAGCTATGACGGCGATACCTGTGCCGCCGTCAATCGCTCTG CACCAGCTGTACTCGGTTCCTCCGACGGGTCGGGTCATGGATTTGGGTACCCGATTTGGCTCACTCATTA TCCTTGAGAAAGAAGAGAGATTGTTTTCACTTTTTTGGGATTTTAAGATTTTACTTGTATCATATATTGT CAGGTGGGTAAATATGGGGAAGATACAGTGACGTACCTTTTACTCGGTTAAGTGTAATTTTTCCGGTTTA TCAACCAAATAGAAATGATTTTGC >gi|3449888|gb|AI099576.1|AI099576 34302 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157H6XP 3', mRNA sequence ACCCTACCTCAGCCAAAGTTTAGGGNCANCCCCCCCGTGTTTTTCTCGGGGTATGGGGATGAGATGTTAC CGGATGGTCAGNNNCGATTGTTGGTCCACTAATGACCGCACGTGGNGTGTTNGCAGTTGTACCACGGTGA CTCAAGGAGTCAGCCACCGTTAGGGATGGTCCGATGGAGTGTGACATGCCGGGTGATGNAAATATNGTGA CCTGATCTTCCGCCACCTTACTTTGTNNCNNTTATATTGTTTTTGTGTACTTTATCNGAGTGGATAAAGT GACGGGGAATGTTTTTCTTTTGTACAAAAAACTGTCTTCCCACCTAAGCAATGNGTGTTAGTTTCTGTTT TGGGCTGTGTTTTGCAAGTTTTTGTATTTCAGAGTTGTGTAGTGTAGTTGCAAGTGGCGGTTGGATCTTT CACTATCTTGTTGGATTTTGATGATGGTTGATGCTTTTGCTTTAATGTTAAATAAATAAGCATACTTTTG CT >gi|3449887|gb|AI099575.1|AI099575 34301 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157H19XP 3', mRNA sequence TGCCANCAATNTNCCGNTATTGACAACGCGACCAGCCGGCTCGAGGATTTATTNCTCTTGGTGAGTATTT CCAACGGCTTAGAGCCTTGAGCTCAAGTTGGGCAACTCGACATCGTGAACCAACGTAGGTTTGAGTTATT TTGTAACAACCAAATGAAGAAAATGGAAAGACCTCAAAAAATGAAGAATGAGTGCATCTGAAAACAGAGG ACTACTCTGAATAAATAGAGGGGTTGCTGCTGATATTTATTTTTACTCTGCGGCGGAATTAGAAAATTTG AAAAACATCATGTATTGATAAGTTGTAAATATCAGAAAAAGGTGGGGGTGCAAAAATTTGTACTTTTTAG CTTTTGAAAGAGGCAAGTTTTTCGAATGTTTGTTTGATTTGTAAACAATTTCAGAATTATATAAACTTGG TTCC >gi|3449886|gb|AI099574.1|AI099574 34300 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157G9XP 3', mRNA sequence ACAGGACCACACTGTTCCCCCAGACTGATGCATCACTCAATCCCCCNCAAAGNGAAACCTACCCGTTCTC CATCTGGCTCTCGGACCACCAGCACAACTCCTGCTCATGTGAATGATGATCTGATTTTTAACCATACGGT ATTGAAGATGTCAATAGCAATATCACATCTTCAAGCGGTCAAGAATCAGGAGCTTCAGCTTCAGCTGCAT GGCCTGATCATCTATTGGATGATTCTATATTTTCCGACATTCCTTAGCCTTCTTTTGTCTTTACTTTCAG GTATGTACTTTGGAGGAACTCAAATCAAATTTACTCTTGGAATTGTGCTTGTTGGAGATTTTTATTTGCC TATCTATATATATATAAATACTGTAGAGACATCATATATTTGTAACTCATGTTGTAGAATGTACAGTACA GAGATTTCATACTCATATGCATATGTTGTTGTCAATGTTCTTTAGC >gi|3449885|gb|AI099573.1|AI099573 34299 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157G24XP 3', mRNA sequence AGGANTTCCAGGNTTGGGAGAGGGTAGTCCCGAAGGAATCTTGNGCTAGGCGTATCCTTGAGNGCTCGTT CTGAAACCCAGGCTCTCGTTACTGTTTGCAAAGGGTAATGGCAATAATACTACCATGATGTCGAAGCAGG AGTCTGCTGTGCTCTTGTTGGAATCCCTGCTGTTGGGTTCCCCTGCTTTGGCTTCTGGGAGTAAACNTCA TTTGCCTATTCCCTTATATGTCCCACACAAAGTGTTGCCTCCTACGTCCAGAACCAGAAAAGCTGGTTCT AAACGGGCTCGGGAGTAGTAGCAAACCGTCTTATACCGGCGTTAGTCGGAGATGTAAGGGTTCGAGGCCT AGGATGAAATACCAAATCTTAACCCTTGCGGCGTGACAACGCCTTTTTTAACTGCTTCTTTTGCGCATTT TGAGTTGTAGATGAGTGTCTTTTAGTTTTCTCTCTCTTGTTTTGTATTTCGCTGTTGAAAGTTTTCTGTC TAATATCGATAAGTTAACAGTG >gi|3449884|gb|AI099572.1|AI099572 34298 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157G22XP 3', mRNA sequence CGTAAGGCCGNTCTGACCAAGGTTGGAGCCACCCATTAGGAGCTATTAATGGAATGGAATGTAACCCGTG GTAATTCCGGTGCAGTCAACGCAAGGATTGGATACTATAGAGACTATTGTGGACAGCTTCNGTGTGGACC CCTGGTCCTAACCTTAGTTGCTAAAAAACCTTTGAACCCAAACACGGACATATGTGACGTGGCATGTAAT AAGTGAGATATACTAAAATTTCACACGTATGTACTTTATGTCGGGTCTCGGTGTTCCCTGCGTCACAAGC AAAAAATTGTTGTAATAAACTTGTGAAAGTGATTTTCTTCTCTTATGTGACTTCTTATGAAAGAGAATTT TAAGATTGATAGATGTTTGAGTTTGACACTTGCAGTATCTGATTTTGGGATACTCGCATAAATTGATATT ATAAT >gi|3449883|gb|AI099571.1|AI099571 34297 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157G19XP 3', mRNA sequence AAGCCCGACAAGCCCNTCGGAATTACGGCAGCCATGATCTTGAGGGACNGCGTTCNGAACCTCCGGCAGA AAGGGCAAGGNTACCGGTGTTTTACAAGTACCNTCCGACAAGTATGGGANCTTAACGTCGATGGATACCA GGTCCTATTTACAACGAGAACGAGTGGTCAGCGAGTGGTNACGTGTACAAGGGAGGAGTCACCGGATTGG CAATTTGGGCGGTAACTCTCGCCGGAATTCTTGCCGGAGGTGCTCTTCTTGTGTACAACACAAGTGCTTT GGCTCAGTAAATCTTAAAGTTGTTAGCGCATGTGTAATCATGTTTCTATAAATGTTTCTGTGTTGTTCTC TTTCTCTCTAATGTTGTAAAACTCAGACATACTTTGAATTTATAAGACTTCTAGTGTTTGTAT >gi|3449882|gb|AI099570.1|AI099570 34296 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157G15XP 3', mRNA sequence GGGGCCCAAACTCCGGTTTTGGTACGNACCACGTGCTCGGAGTGGNNCCCGATGCTTAGGNTGCGGTTAC NAAGGGCATCGAACCTTGTGNGTACCAACGNCTTCCTATNCTCGACGGACGTCACAANCCGAGAAGGCGC AAGAAATGTTTGCCCATCTTCTTTTTGGGAGCCGATACAATGTTGTCCAACCNNTGAACGTCCGTGAGCT TACTGTTTACCCAGTCGATGAACCCATGCGTGAATTTTGGGTGCCTCCAACGCCAGCTACTGTCCACGCC AGCGACTCTAGCTCGTCCACTAGCCGCGGTTACGAGTATTACTGAGTCTTTTTAAAACTCAATCTTTAGG GTCAATCAGGTTTTCTACAATGGTCATGAGTTNATTTATAACCGAATCAAAATCGGAATCTTGATGTTTT TGATTTGCAATGTTTTCCTGTTTCTCTAGTGAGTTTTTCTCTATAATAAAAGATTGATCTTATCAACTC >gi|3449881|gb|AI099569.1|AI099569 34295 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157G14XP 3', mRNA sequence CTTTNAATCCCGGAGAACCCTATGGATTCTTGACCGCAACCGCAGGATNTCTNCAGGNCATTCCCTTTNC GNTTAGGTACNCGATCGTATCTTCTAGCCAGTTAAGAGCAAGANCACAGCTACTGGAGAGAAGCTTCATC GCTTCTCCAAGACGTTTNACATCCGAAACATAACCAAGGACTCCATCAGAGGACACGAGAGATCTCTCAA GCTCTTGAACCGTAGCAAAGACTCTCAGGACAGCGGATATTGGAGCAATNGTGTGACGGATATGATCAGA GAAAGGAGAAGCCTTCCATCTCTCAACTTTAAGATCAGCTTCTAAAGACGACNACTTATGGTTGATCTCT TCAATCTTGGATCCAGTCTTGTTAAGAACCAATGAAAAGGTTTCAGATTTCTCCATCTCACTCTTCAATA AACTTCTCATTGCTTT >gi|3449880|gb|AI099568.1|AI099568 34294 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157F22XP 3', mRNA sequence GCCCATTGGTAACCNGCCATTTTTGGTGCTTCNACTTNGCACCTGNTTCCCNGCCCTCTCTAATCTTCAT CCCCCAGGACCTCGGGNAATGCCCCGCATGGTACCANCCGTCTTAGTGATTCGATCTCGCACACCGCGTT TTTGACATTAATACTATGTGAATCTGAAAGAGCTAAAGGNCTTATCCAGCGGATCAAGAGTTGTTTTCCA GCCCTAATGCCACTGACACAATCCCCCTTGGTGAGAGAATACGCTGATGGCACTCAAAAATTCTTCAATG CTTTTGTGGAAGCAATGAATAGAATGGGAAACATTACACCTCTCACTGGAACTCAAGGACAAATCAGACA GAATTGTAGGGTGGTTAACTCCAACTCGCTGCTACATGATGTGGTCGAAATCGTTGACTTTGTCAGCTCT ATGTAACATAACGTTGTCTCGATATATGTGGCAACCAAAAATATGTTTTATGAAATAAAGTGTTCTCAAA ATGTTTATGAAGAACATTTCGTCTT >gi|3449879|gb|AI099567.1|AI099567 34293 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157B8XP 3', mRNA sequence GATTGGGTTTTANCAAGGGGGTTGGCCTAAATCTTTGCNCCATTCCTACAGGGTGTATGTCCCATAGTGA AGGGGGTTNATGAGCTTTGNGCATCCAATGAACAAGCTCAAGGCGATGCCGAGGTAGACAGTGAAGGAGT TCTATGCNGTGCCAACTTCAAGGTGGATGTGNACAATCGTGTTAACAGTATCCCTCGTCGAGGAAGTGAA GCCAATTGGTCTCTCTGAATACTNTTAATAACACTNTCAATTTGGTTTCTNTTTCGCACTTGTGCTTCTT CTCCGCTTTCATCTTAGTTATGGACTGTTCCTAAGCTTGCCATGAATAAAACTGTGAATNATAAAGCTTT TAATGTTCTGTTTCTTACTTTAAGTCAGACAATAAACTTTTAACACTTGTGATC >gi|3449878|gb|AI099566.1|AI099566 34292 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157B12XP 3', mRNA sequence GANCGAGTGCCTTATGATATCCAACGGCCNCGGAATGTTGCTAGGGATCCGCACAAAGTCTTGNAGGCTA AAAAATGCTAACAGGCCTAAAACTATATATAACTACATGGCCANCCNATAACTATNTNCAAATGTATNTG ANTAACTCAAAACTATATTATGACAACAACAAAAANAAACGTATAAACAATAAAATGNCACTNAAAAAGG CTATACACTNAATTCCGAATTGAGTTTTTCTGCAATTCTTTAGCTATCTTGTTAACTATGAATGTTTTTG GAATGTGAACGATTTATGATCCATAGAACTATGTAAAGAGCATTAAATT >gi|3449877|gb|AI099565.1|AI099565 34291 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157A23XP 3', mRNA sequence ACAAGGNCGGACTTGAAGAGGTTGTGAGGAAGCTATACGAGACATTGGAGANAAAGNAGAAAGTCTCTTA CAGAGTCTGAAGCTANGTATNAGNTCNGGATAACGANACAAGAAGATCACAAGGAAGGAGGTNACAAGAA GGAAGGTAATGCTCAAGGTGTTCTTGTTGGAGCTGCCAGTTCAAGCCAGTAAAACTCTATATTTGGCAGT TTGTTTTACTGTTGTATCTCTTTTTTGGNTCTTATGGTTAAAAGCCGTAAACTTTGCTGGANAAAATCAA CATGTTTTGAATGTC >gi|3449876|gb|AI099564.1|AI099564 34290 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157A22XP 3', mRNA sequence TCCCATCAANTTGGATATGCCTTTGCATCAAGATNGAAATCACTTCACGGTAGGTAAGNGCATACTTCAA CCTGTNCCTGATGATAAGGACGAGGGGAAGGCACTCCCTTNACTTATGTGGTCCAGAAGACGGCTTTGGN GCAAATGCACCACCAAGTTTNTCAAGCATCCAATGCTTAGGCGCATTAAGCCTCNTCAGATGCTTCTTCA AACCCCTCGCCATGTTTTGAGTTTNGCAAGCGTAGCTCCGANCCGAACTACCTGTTGTTNTCTTAGAAAC AGCTCCGAACCACTGACTAGTTCT >gi|3449875|gb|AI099563.1|AI099563 34289 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156G19XP 3', mRNA sequence GACGTTNTGGGAGGATNCCAAGGTTTGANCCTACCCCTAATTCCCATCTTNNCCGNGATGTAGGGGGTCC GCCTCAGNTGGGGGCAAGNTATGATATGNGTGTGGAGAGGTGTGTAAACTTGGATGGTCTGACAGAGCCA CAGATTCTAAAGGCCCTTGAAAACCTTGTGAAATCCGGAGCTACAAAGGCCTAAGTTTGTTTGTTTGTTT GTTTTTCTCTATATGATCCCGAATAAGATTAAACCGCAANACAATCATTTGACATTTCCTGTCATTCTAC TACTTTGTAACTCCGTGGTGTCATATCGCCTTGCATTTGAGTTGGTTTTTTTGTGTAATCCTTGAACTTG GAATTAAACCATTCCGTATAATTGAAATCACAGAAAGGAGAAAAATAAACCATCTCTGTTT >gi|3449874|gb|AI099562.1|AI099562 34288 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156F22XP 3', mRNA sequence CGGCTCNGAATTCTTGGCNTAACAGAAAGTTNCCTTNCCGGNTTCAAGTTCCCGTGTGGAAGCACTTCTG TGGAACTNCATAGATATCCAGAGAGTCCACGAGTGCCAATTCGATTTCAAAGGAGTTGCGAGAGAAGCTA TTGCTAAAGCTAATCCTGTNGTGAAGGCTGATAAGGTTGATAGGATATGAATTCGTGAAGAAACTGTTGT GTTCTCTTTTGTTNTTTTATTTTCAAGTCTCGTGATGTTNGTGGTTTGGCTCTCTGTTTTCTGCTCTTAT TATGGTTTTATTTGCTTTTAGGGTNTCTTAGGAAAGGCCTTAGATTCTGCTATTATGTGGTTTCATGTTT TGCAACATTGGATTTGTTGTTCTGTAATAAAGTGTTGGTTATATT >gi|3449873|gb|AI099561.1|AI099561 34287 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156C5XP 3', mRNA sequence TTANGACCANGGNATCCNAANGCATNCTTTGCCAAGGTNCCCCAATACCAGGAGGGTAAGGCAGTCTTGC TGCTCAAAGGAAAGCGTCGTTATGACCGTAAACAATCTGGTTATGGTGGTCAGACTAAGCCTGTCTTCCA CAAAAAGGCTAAGACCACGAAGAAGATTGTTTTGAGGCTTCNGTGTCAAAGCTGCAAGCACTTTTCGCAG CGTCCTATCAAGAGGTGCAAGCATTTCGAGATCNGTGGTGACAAGAAGGGAAAGGGAACATCTCTGTTTT AAGTTGGTTTCATCTTATTTTCTGCGATTTTTGTACTTGCTGGATTTGGAATCCATTTGTTTTAGCTCTC TCGTACAAGATTGTCTCATCTTTGCTTGTTAACTCTATATTTTGAATCATCAAGATATGGTTTTGCTGTT >gi|3449872|gb|AI099560.1|AI099560 34286 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156C18XP 3', mRNA sequence CCCACGCGTCCGGCGAAGAAGGGNAGGAGTNGGAGGAAAGACGACAGAGGAGCTCCAGTGGTTGTGGAGG AAGAGNAGAACCAGAGGCAGAGGAGGAGAAACCCGCCGTGGAAGCCTCCGTGACAGCTCCAGTGGAGAAG GCTGATGAGTAAATGTGAAGNAAAAAACTGTCTTTTGAAAGACAAAAGAAGAAGAAAATGTTAGCAAGTA ATTTATTTGCTACTTTAAGTACTTTGTGTCTTGTTATGTTTTTGAGTCTATGA >gi|3449871|gb|AI099559.1|AI099559 34285 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156C11XP 3', mRNA sequence AAATCTGTAAGNACNAGACCCAGATGCTCCGGTCCCAGATTTACTCCGATGATNCTAAGAGGATGAACGA AGTTGTGACTCATGCAACAAAGCTCAATGACGCAATCTCTGGTATGAAAGGTGTNCCTGTCGTAAGAGCT CAAATATCTTTTGGGGGTCACTACGATGGACTTTGAATCTCAGCCATCATAATAGTTCATAATGTACATA CATGAATGTAGTATAAGGTTTTGTAAATCTCTATTATTTTGTTCAAATATTGATTAATTATGTGGTGTTA ATAGATCTTTGTGAAATNTCATGTNNTNNNTTATTATTATTATTGTCAGTAAGAAGTTAAG >gi|3449870|gb|AI099558.1|AI099558 34284 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156B23XP 3', mRNA sequence TCGGGCCCACGTNTCACCCACGAGGATCCCGCGGCATCTGGATCNCTTACTGGTCTCAGGCTGATCGATC CTTGGGACAGAAACTTGCAAGCCGTCTGAACGTGAGGCCAAGCATCTAGAGGCCAATCTCCATATAAGCT CAGTCTATGTGAGGTACAATCAATCTCATCGNTCTATCATCGCTTGGTCGTTAAATCCGTCAAAAAGATA ATCACATGTGTTGTTGTTTCTTGTCTATATNATAATAATGCTTGTAATCCCAAAAACTCATGTTTCCTTC CTTTCTACTCTCACTGTCTTTGTAATCTCTTTTTACAATAAATCAATGTTTCTTGAAGC >gi|3449869|gb|AI099557.1|AI099557 34283 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156B20XP 3', mRNA sequence CCCTTGGNGATCCCATGTGATGTGAAGNTGGACCCCTATGCTAGGCCCNCGAAGGGATGTCCCCTGTTAG CTGAAGCNCCAGAGAGTTAAGGCTAAGAAGGAGANGCTCGCCAAGAAGAGGAAANCCGTTACCAAGGAGG AGGCGTTGGCAATCAAAGCNGCAGGCAAGTCGTGGTACAAGACTATGATCTCCGACAGTGATTACACCGA GTTTGATAACTTCACCAAATGGCTCGGTGCTAGCCAGTNATAATCTCGTCTGCTTTGGAACACTTTCCAT ATTTTAGTCNAAAGATTTTGGTTTTTTTAATCTGTTTTGTCTTTGGGTGTCTGGATATCAAGTTGAATTA TGAACAAGTTTCACTTTTTTACATCTCC >gi|3449868|gb|AI099556.1|AI099556 34282 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156A23XP 3', mRNA sequence AGCCTCNGANAATAATGCATTAAGGCAACNGTTTCCTCTAGCAGTTTNCGTGGTGGACAGTGTGTTGTTG CCGGAGGAGTTATTCGGNACAAAGACCACTCCCACCGGAGCTCCTGCCCCGAAATCCTCAACTTCATCGT CTGATGCCGATTCTCCAGCTGCTGATGATGAGCACAAATCTGCCGGATCAAGCGTGAAGAGGACAAGTCT AGGGATTGTTGTTAGCTTTGCATTGTTTTGTTGCTCGGTTATATATATTGCTTGAACCTTTAACTAAAAG CGAGGGAAACGTTCCCGAAAAACAAACATTTATTTGCATG >gi|3449867|gb|AI099555.1|AI099555 34281 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156A22XP 3', mRNA sequence GGGCTCCCAAGCCCACCGNTGTTCATCGACGGACGGCANTAACGGCACTAAGNCTGNGCACACTCCTCGC GGAAGAGCCCCATCCGAAAGAAGAAGGAGCGTCGCTGCTTGTTGATGTAAGAGCCCTGTGATTGGTCACT CTAACATCGACTCGAGATCTGCACTATTACTATTTTATTTGTCGTTTTTAACTTTATTTAATCAAAAAAC CCTNTCAACCAATAAGCCACGATAAGAGTCGTGCAGTCAAATTTATTTTGGTAGCCCTTGGATCTGCTAT CAAGATTTTCTTGTATTATCGACTTGTAATTAATAGGACTGTAGCGATATCGTGCTTCTTTATTTATTTC AAT >gi|3449866|gb|AI099554.1|AI099554 34280 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156A17XP 3', mRNA sequence GCTTNGTNCCAAACCAGTGGCTCAAAGTAGCCACAATAGTGCGATTAGAGATTTGAAAGACGCTCTCGAT TTGTATGATCTGGATCGTCACGGAAGGNTCTCGGCTAATGAGNACACTCGGTTATGNAGAATCTTNGTGA GAAGTGTTCGATTCAAGATTGTCAAAGGATGATTAGTAAAGTTGANTCTGATGGTGATGGTTGTGTTGAT TTTGAAGAGTTTAAGAAGATGATGATGATAAATGGTAGTGCTTGATAGAATCGATTTAGAATTTGGAAAA GTGATATCCTTTTTTTTGTTTGTAAATATTTTGTTTTATGATTTCGTTAATCTAATC >gi|3449865|gb|AI099553.1|AI099553 34279 Lambda-PRL2 Arabidopsis thaliana cDNA clone 156A11XP 3', mRNA sequence AGACTGGTTTTGGATTTCTCCGCNCTANTGGGGTTTTTAGGNTCTGGCAAAGCCGAAGTACCCCAAAATC CAGGCTCTGCAGAAGGCGCCGCCATTATTGTGTAGATAAAGNAAGATGATAGGCTTATCTTTTCCTTCCT TTTTTTTTTTNTCTTCTTCTTCTTCGTNTCTTAGATTCCCTCTATGTAAAAGATCGATCATTTCATTTGG TCGGTCAAAACTATGGAAACTCAAGTTCGATCCGTCTCAGAAAACTAGAATATGGACGGCACTTTGAATA TGTTTAACAATGAGTTACATATATAGTTTAGCTTCATTATATAAGCTCTCTTATTACATC >gi|3449864|gb|AI099552.1|AI099552 34278 Lambda-PRL2 Arabidopsis thaliana cDNA clone 155M12XP 3', mRNA sequence CGAAGCTTGNGAAGAAGANAAGGCAAGNGGANTCNAAAGGATCCNCCTGCTGAATCCGACGCTGAGGAAG ANGCAGAAGATGNTGACAATGAAGGAGATGACTCAGACAATGAATCAAAGTCTGAGGAAACCAAGGAGGC CGAGGAANCCAAGGAAGCCGAGGAAACCGATGCCGCCCATGACGAGCTCTAAGCAAAGAAGGTGGAGGAT TAAAAAGTTTTCAGAGTCTTAATTGTTCTNTTAAACTTNTCTTTTAAAAGGAANTCTTTAGCTCTAGTTT GGTTGGAATGTAGAACNTNTTAGCTATTATTATGGTGAAATGGTTGTGGTAACTTTGTTTTAGACTTTGA GAAAATCCTGACTTTCTCCT >gi|3449863|gb|AI099551.1|AI099551 34277 Lambda-PRL2 Arabidopsis thaliana cDNA clone 155I2XP 3', mRNA sequence CCGGAACCNCNCCCGGTCCTTTGGTGGCCNNACTGGGCCCATTTGGAAGGTTCCCATNGTTCGGATGCCC CCGGCTCCGCTCAAGTGTTGAGGGNAAGTTGAAGATGCAAGAAGGAGTACCCTGGCGCCTTCATTNGGAT CATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGTTCACCG AAGCTTAATCCCCTTTCTGGAATATTCAGCGTTGATTATTCTGGAACCCATTTCTATGTGGTCAATGCAA ATTTAAGAAATTATTTGCCGACTTNACAGTTGAGGAACTATTGTTTGAAAGTGAAAATGTTATTCCTATC AGTTTCTCTATAATTATAGTTATCATTTCATTTC >gi|3449862|gb|AI099550.1|AI099550 34276 Lambda-PRL2 Arabidopsis thaliana cDNA clone 155C4XP 3', mRNA sequence AATTTTGGGCCGGGTTNAACCTGGGGGGGNAAACCGGGNCTCGATCCGGNTTTGANGCCGGGAGAACGTT TGCCGNGCTTTTGAGGAACTGGCGGTCGCGGACTACAAAGCCAAGTCGCTCCAGAATCTGATTGATCCAA ATGCAAGACCTCCGAAGAAAGAGTCTTCTGCTAAGAAATGGCCCAGCCTCGGTTTCAAGTTCTGAGGNCN NNATTATCATATNAAATAAATCATCCACANATATATTCAATATTTTATTTTATTGTTATTGTTATATTTT TTATCTGATCTATTTTCTGTATCATAATCTGAGGTTGATGAATTAATTTCATG >gi|3449861|gb|AI099549.1|AI099549 34275 Lambda-PRL2 Arabidopsis thaliana cDNA clone 155C22XP 3', mRNA sequence GTAATGGTANNCATTGGGGTGGTNCCGGTTTACACTAACCAACCCATTATGGCTNATGATNTCAATATGT ATTGATTAACCCAGTTAATCCACATAATTAGATGCCCCTTTTTTGTCTTTTTATCTTAAAATTTAGCCCA TTTTGGTGTTTTTGGGTTGGTGTGATGATGTAATTATAGTACATGCATCTTTGATTGGTTGGAAGGATAA ATATACCCNTCATATATATATTGGGGCATATATATATGAGTTGTACTTTGTCATGTATTGGTGTGTGTTT TGTNATAATTATATGATNATATATGTTTATGTT >gi|3449860|gb|AI099548.1|AI099548 34274 Lambda-PRL2 Arabidopsis thaliana cDNA clone 155C21XP 3', mRNA sequence GGGGGCNCAGGGCTTGGTANCTGCCAGNCCNCNTAATNCACACACCAGTTNTTGCAGAAGCTTGAGCTTT CTGCTTTTTGCGTAACCTGCTCTACAAAGCCGGTTTGGATTTGTTCGGTTCAATTAGGTGCCACTGTGCT AGGTGTTTTGAAATATTTGGCTTGAATCTCGAGCCTTTACTCTATTTTTGTTCTGTTCCAGTATCAGCAA CCATGATTTGGTCCAAAAGACTGAAAAACTGTGCGACTTACATCTATGAATAAGGGGCTAAGCTAGTTGT ACTTTACCAAAAAT >gi|3449859|gb|AI099547.1|AI099547 34273 Lambda-PRL2 Arabidopsis thaliana cDNA clone 155A6XP 3', mRNA sequence TTTTGGTTTTTCANCNTCCCCTAANGAGAGAGAGAGAGGGAAGAGGAAGGAGGAAGATGAAGNTCAGTTA CCGTCGCCGGTCACCGTTTAACTGTCTTATTCAGGTTAGTGTTCGTATATACAGATGCAGTATTTCAAAG NAGAGTCGAATCTATGTATTCGTTTGGTGTTTTTCTGGGTCGGGCGGATCTTTAGTACTGTCTCATATAT AACTAAGAGGGAAGATTAGAAGATGAAGAAGCTGTAAAATTNTCTTGGGAAGAAAACTCTGGTTTCTATC TTCTCGTTGTNATATAGATAATCAACTTGGATTTATTTCTTTCAGATTCACCATTGT >gi|3449858|gb|AI099546.1|AI099546 34272 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154P7XP 3', mRNA sequence CTTCCCAGGGCCGGGTTCCCCCAATCTTCCCAAAACCGGATGCNTTTGGCGGNCCCNGGGAAGCANCCGA TTGGNGTCCCTGTNCCCAAAAGGACCTCGTTGAGACCATCGCTGCCAATGGGAGACCAAGGATTCACAGA CTTTGTGGCTCCATCTTCTTGAGATAAACCCAAAGAAGCGTCCTTCTGCAGCAGAGGCTCTGAAGCACCC TTGGCTTTCATATCCATACGAACCAATCTCTGCTTANACAATTGGTGTCTGATTAGTGGAAATGTGAAAT TTGAGATGAAAAGAANAAANACATTTGTGAAATTTGATTAGAGTGTAACAATGTGTTGTTAAACTTGTGA TTATTATTCTCTTAGAACTGATTTAAGTNGTAAAACTTTTTGTATCATCTACTGATCCTTAGTNGTTAGT CCTTTGATT >gi|3449857|gb|AI099545.1|AI099545 34271 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154O12XP 3', mRNA sequence CTTGNTTCGGCCCCCAGCCATCCCNGTAGCTNGCCCCCCGGCNTTGGGCCGACCCATNCAACCCGNGATT NCTGTAGNCTGGAAGCCTATGGGTGCAGAGAGAGGNCATTTGAGTCTCTAGGAGAAGAGAGTGGAACAGT GATGTNTCAGACGTTTGAGAAGCTTGGTAAGTACTGTGGATCGCCTAGATCTACCTTGAAGTGTGAATGG AGCAGCAACAATAGCTGCAGCAGCGAGGACGAGAAGGACGAGGGAATCTAGCAGAATTTTTCTTCCTAAT AACTATTTTCGAGCTTTCTGTTTTTGTTCTTTCTTTTTAAAAAACTTATTAAGTTCTTATGAATAATGAC TTGTGAAGTTTGAGTTCGTCTCCTTCACAAGCAAGTTGTATTGGTGTTTTCTACTTTATGAATATGGGTT TTATAT >gi|3449856|gb|AI099544.1|AI099544 34270 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154N18XP 3', mRNA sequence TCTGNTCCTTACTGGTCTCAGGTCTGAAATCTTGATCNCTGGTTACTGTCATTGTCTCGTTCTTCAAGTC TCAGCCGTTGAAAAGTTGTCAAGTNTTAAACATTTTTGACTGATTGGTNNNAAATGTGTGAAACAGGCTG ATAAGTCTTTGGGACAGAAGCTGGCAAGCCGTCTGAACGTGAGNCCAAGCATCTAAAACGAGTGAAAGAA TTCTTGATTGGCCTTTCTGTGGTTGTTAATTAGCAGAGAAAAGNAAATGGGAAGAGATCAAAGTTGCGAT AATACAATCTTCATCATGTGGATCTTCTGTGCTATGTTATAATAGTATCTGTTTAAAGACC >gi|3449855|gb|AI099543.1|AI099543 34269 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154K13XP 3', mRNA sequence TTGACTCAGAATTGGNGNNTGGGAAAACCATTGGGTTCCCCTTTNGGAANGCGGNTTTGGTTGAGGATCN GAACCAGGTTGGGGACCAAAGGAAGTCCGTACGAGTTCAAGCCAGCGACATCATCGAGCATCAACGAAAA CTTGTCTGCTTTGAACATCCTTTATCAATCTTCTATCGATAAACCAATCCAAGGGTCCCTCATCTTGCAA GACTAGCCAATTTGCACCCCCTTTTCTATTGTCTGATCTTCTCTGTATCACACTTAGCCTCTTTATTCAT CTCATCTCAGCCACTTTCAATATAGTTTTGGTAC >gi|3449854|gb|AI099542.1|AI099542 34268 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154J19XP 3', mRNA sequence GCTTAAGNCTTTNACCCAAACCAGNTNTCCNTGCCNATGCATTATGTTGGCTCACATCCCCGGGGCAAAG ACGACCGAGAAAGAGTTTGAGGCATTCGCCAAGCATCAGGCTTCAAGGGCATCAAAGTTGCTGCGACGCT TTTGGTGTTAACCTTATTGAGTTACTCAAGAAGCTCTAAAAACAAACAATGTTCCTATGAAGATGATTTA TATGTAAACATTATCTCATATCTCCTTCCACGGTTCCAAAACTATGCTGTTTAATAATGGTTTTTACAAG AATTTGATTATGAGTTTGTATTTTTGTTTGTTTGGAACAAAATTATGTGATTATAGGGAAAAATAAAATG AGCTATTATTGAAG >gi|3449853|gb|AI099541.1|AI099541 34267 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154I9XP 3', mRNA sequence GAAACCGAAGGAATTTCCGTGTGNANTGGTTAGNTCNCAAGNCTTTAACCCTTGGGNTAAGGAAACCGTT GAGNCCCCAGTGAGAAAGCTGGNCAGGCTTCTTATTAGCCATGAAGCTCCTGTTACANGAGGCTTTGGGG CCGAGATCGCTGCAACTATAGTTGAGCGTTGCTTCTTGAGGTTAGAAGCACCTGTAAGCAGAGTTTGTGG CCTGGACACTCCTTTCCCTCTAGTGTTCGAACCTTTCTACATGCCAACCAAGAACAAGATATTGGATGCA ATCAGATCCACTGTGAATTACTAGCCCATCTTAGCATTGTACACATGATTCTCTGTCTCCTATCTTCGAA ATAATTATTGATGCTGGTGGTTCAGACATGTAATGGATACTGTAATCACCACTTTTGTTATTTAATCTAT GATCTTGAAACTCTCC >gi|3449852|gb|AI099540.1|AI099540 34266 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154I7XP 3', mRNA sequence ATTCGGGGCCGGAGTCCTGGGGATANAAGATCGGCCCTTGGGGAACGAACTTGTNNCTTGCTGAGGNTGN NTTGAGACCCCCCCGTCCTGATGCTGAAGAGCGGATTTGTCTCGAAGCAGCGACGCTGGTGGTCGTAAGG CCGACTNGTGTGGCTTCCGATGATAACGATGTTGAGCTGGTGACGGAGCGTTCGCCGGAGATGGCGACGA TTGTATGTACGGAGAAGCTGTTACGGCGTTGCTTAAGCGTAGGAGAAATGTGTTAGAGATGAATTCTTTC TAAGGCCTAGTGGGCTTTTTTTGGGCTTCCGTTTGTTTGGCCCTTTTTAATGTATATACATACGCATCGT ACAAAGCCAACTGTACTATTGGCGTACGACTTTTGGGTCAAATGACATCAAATCCGAATTATTCCTCTAA TATCATATGATTACCACATT >gi|3449851|gb|AI099539.1|AI099539 34265 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154I3XP 3', mRNA sequence CAGCTGTNCGAAACNCCCNGAGAAAATGGTTCCCCAAGAAAACGATTTGGNATCCGTTTTNCCCCGGTCA GCTTNCGAGGAGCCCGAGCTGTTCCACAGAGCNTGCGGGNCTTGCTGCTACAGGTGCCAACTGTGTGCCC CCCGGNTACGTACGGAAACTACGACAAGTGCCCAAGTCTACGCTAGCCTCACCACCCACGGTGGACGCCG CAAGTGCCCCATAAGAAGAAACAAAGCTCTTAATTGCTGCGGATAATGGGACGATGTCGTTTTGTTAGTA TTTACTTTGGCGTATATATGTGGATCGAATAATAAACGAGAACGTACGTTGTCGTTGTGAGTGTGAGTAC TGTATTATTAATGGTTCTATTTGTTGTAACTTGCAAGTTTTCTTGTTTTGAATTTGTTTTTTTCATATTT GTATATCGATTCGTGCATTATTGTATTATTTCAATTTGTAATAAGATTTTGTTACCTTTGAGTGGTTGTT TATCAT >gi|3449850|gb|AI099538.1|AI099538 34264 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154I1XP 3', mRNA sequence AGGAGAGCAAANGNATATCCCNGACTCGGATGGCGCANTACGCAGCTGAGTTATGGGAGTTGNTGAAGAA AGACAACACTTTTGTTNACATGTNTGGACTCAAGGGAATGGAGAAAGGAATTGATGACATTATGGTCTCA TTGGCTGCAAATGACGGTATTGACTGGTTTGATTNCAAGAAGCAGTTGNAGAAGGCAGAGCAATGGAACG TTGAAGTCTNCTGATCAAAAAGCCTTTGACATTTCTGTAGCAAAGTATAGCTGAACAAAACTGTAATTTT CGCTTCTGAATTTCTGTATTTTGAAGATAAGTTTTTTAG >gi|3449849|gb|AI099537.1|AI099537 34263 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154I13XP 3', mRNA sequence TCTGCGGACGGGCCGNTCCCCCGGGNTTTCCGTGCTNGCTTTTCGCACAAGTTTGCGTCCGATTCACTGT TTATGGCCCNANCAANGGCTTCTCTCTGGAGAACCCCCTTCANAATACAGAGTCATCGNCTTGAAAGAAT CCNCAGNGGGATACTTCNAGAAAGGCCTCGATGGAACATCGTATCTGTCGCATTACAAGATATGAAAGNA AAANACAATTGAAAGAGTAAATCATCTCAAGTTTATTGTAAGATATTGGTTCGTTTCATGCATCTATTGG GTTCAGGTACTNGTCCAATTGTCAGATCTTGACAAATAAGTAAACCATTTCCTTTGTACCAAAAACAAAA ACAACAAAGAAAGGTGTGTGTGTGTGTGTGTGTATAATTTTAGTGAATGCTTTAAATTGGGAATAAAGGT TCAAACTTG >gi|3449848|gb|AI099536.1|AI099536 34262 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154H21XP 3', mRNA sequence CAAGGGNCCTGCCACTTATGGACTTNAGCAATTCATGCCACTTCAATGGAAACTCCGAGCCGAGGAAGAG CCGGTTTTATGGGCGCCCTCGTGTGTGGTTTGGCCGTGNTAATTCCGAGTGGCAGGGAGCTAGAGGACGT GGTGGTCGTGGCCAGTNGTGGAAGAGGACGTGATGAAAACGTATCTGCAGAGGATCTTGATGCTGAATTG GACAAGTACCACAAAGAGGCAATGGAAACAAGTTAGAAAGGGGAGATTAAACCTATTGCATGTCTACATG TATTCCTTCCTTTAGTGCCGATATGCTTTTGTATTAGTATGATCTTTAGATTGAATGTCAATGGGTCTGA CATTTTCGAGCTTTAGCTTTTGTTTTTTCTTCTCTTGGTGAGCTTCTTAGCTTTTTGCAGTTGAGTTCAG AGAAACAAGCATTGTGTGTACCGTGGAACTCAAAACTCTTCTAAAATATCAATTCAAAAC >gi|3449847|gb|AI099535.1|AI099535 34261 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154H13XP 3', mRNA sequence TTCCCCCAGCCTTTNTCGGCCNCCCTTTTGGGNAANCTGGTCCCCCTGNAGNTCCCGTCCGGAATTCCCC GGNTNGCCCCCACGGNCCCCTTGGNCGNGCTTGGTTTACGGGGAAAGTCNCTTGGGCACCCTCTCGNCCA AATTCTACGGGGAAGTCACTCAACAAATGCTCAAACATGCTGATTTCCCGGGTAGCAACAACGGTACTGG TCTTTTCCAAACCATTGTTGGATTGAAGNTCAGAGATCTCTATGAGCAGCTCATTGCCAACAAAGCCACT GCTCGTGCAGAAGCTAAAGCCTAANACAAACGAAGCGAAGCCAAATAGAACGCGTCGATAAATACATCCG CAGTTTCTTCTTTTTCTTATTTCTTTCTTTCTTTATGCGTTGTTTACCGCGGATTTTCATGGCGAAAAGG ACGGTCTTGCTTGTTTGT >gi|3449846|gb|AI099534.1|AI099534 34260 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154G4XP 3', mRNA sequence GCCGAAGGAAANAAGAGCNANCCAAATNGGGAAGGGAAGGAAGGGAGGATGGTGATAAAGGAAATCGANT ATGCATAGGATNACGAAGATNACAATGGAGTTCTTGGTGGTGGGTGCTGACGCCGTCACAATCTTCTTAA GGCAATCTTCTCCACCTCCTCCGGCTCTACTCCGCCATGGTCTCTACTCATACTCTGCCTCCCCTAATCC TCCTTCTTCCCATTACATCATCGGCTTTCTTCCCTAAGTTTGTAATCGTTTCGTTTTAATGCTTTGTACA TACTATACATATGTATATTCTTGCCTTTTTNTTTTATAATGAATGTCCTTGTATATTAATTTCTTAATTT TCGAATAAATCACCTCTCACCTTACTTTCTCTATATGTATGTTTATTTTTATAAACAAGAACTAGTTTTT AGCC >gi|3449845|gb|AI099533.1|AI099533 34259 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154G22XP 3', mRNA sequence CCTTTCAACNCCCCAGTTCGGTTGGAACCAATTTGTTCCAGCCCTNTGGAGGGCCTGGNCCTGGGCCNTC ATCAATCCCCCCNTTTCATCATCATCATCNCNTCCTTGGTAGAGNAGAGGTTCCGGAACTGAACTGTTGA AGAAACAGGATTTATGGCGAGGATAACAGCNGTGTTAAGAAGGAGACCAAGACCACCACCTTATAGCTCA GGACGACCTGGTCAAAACAATTGATTCTGATTAACACTCCTGAAGACAAGCTTGTGTCTCTCCGTGTGGA TCTTCTTGTTGTTTAAAATTCACTTATGATCTTTATTTTTTTTTACCATCTTTTTGGTTATGTGAGCGGT TTGCTTTTTTTTTTCTTAATTTATCTGAAATAAGACAAAATTGGTAAGACTCTTTTGTAAAATAGTTTTC ATGTTTACCTTCTTAAAATACGTGAGACTTTTTTT >gi|3449844|gb|AI099532.1|AI099532 34258 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154E24XP 3', mRNA sequence AANTCAAATGTTTCCGTNAGCTCGAGAACAATNGCCTGTGATTANCCCTGATGGAGAACTTCTCCNAAGA GGCNCCCTGGTGTTANGCCGAGAAAAGCAGAAGACAAGAAGTGATGCTGCACCAAGCACGATCAATATCT CTTGGTGTAATCTCATTGATTTGACAAATCTAGCTTTTCGGAATGTAAGATCGTTTGCTGTGTGCAACTC GATATGTGTCTCAAGCTTNGGGTTTCGACTGATAGATTTGTATTGTTTTCTTGTTTATGTGAACCNCAAT GGATGAACTTTTGGTCAGGAACCGGGACTATGACACTGTTATGGAAGCTATTGAAGCTCTGGGAATNAAA ACCAATTTTTATAGGC >gi|3449843|gb|AI099531.1|AI099531 34257 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154E1XP 3', mRNA sequence CCGGTTTTCTGCAAAGGACCCACCNTCCTTGAACTTCAGCGTCCATCACAATGTCCCCATCATCATCAAA CCTGTACAAGCCAGTGGCGATCCTAACATTGTAGAAGTTGATAGCATTTTTGCAAGTGGAGGGAGCACTT GTGTTTCTCCACGTATTGCTGTCTTGATTAAAGCGGTTGTCAACTCTGTAAAGTCCCTCTACTTCAATAG GTATGGTAAATGAGTTTGATTCTGGGAATAGGTTGTGGTTGTTATAAAGAATGCTCCACTCAGCAGCGTT GAGCCAGCGCTGTGTTGATGTTTGAAGCACAGCTGCTACATCTGTCAAAAATAGCAACCAAACATATG >gi|3449842|gb|AI099530.1|AI099530 34256 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154C7XP 3', mRNA sequence ATGNTGGGTANCCGACTTGCTCNCTGTTGCTGGNGANAAAGGGAGGAAACCGNTCCGATCAGGGGNTGGT AGACCAGNTAAGGCTCTTCGGATTTTTTCACGTCCGGTGCAAATTTACCGTTTGTGAATCTTGATGANAT AGATATGTATGAACTTGAGATCAACGGAGGGAAGCCGGATTTCGTAAACTACACGATTCATGGGGTCGGA GACAAAGGTGTTGTTTTGGTTTTTCCCAAGCAAAACTTTGCAAGGATTGTAAGTGTAGTGATGCCTGAAG AAGNCCTTGCAAAACTCAAGGAGGAGGTGACTNATATGATTATATAACTTTGTATCTTCTTCTTGTTGTT ATACATAAATGCTGTTTTTTACTCTTTGTAATTTCATTATCGAATTGTTGGGAAGCCTATCAATAAATTG TTTGAACTGTTT >gi|3449841|gb|AI099529.1|AI099529 34255 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154B9XP 3', mRNA sequence CCGGGGATTAAAGCTCTGGGGNTTCNACTGCCTNGACATTTGGATGCCGTAGCNAGNGAAGATGATGCAC TGAGGAGTCTNTTTAGAACTTTTATNTCAGACAGAGAGTCTCAAAGCTTNATAAATGTACATCTGGTNTT TGTNATATATAAGAGTTAATCATTGGTNTTTTACTTTTTTTTTGGTCCAGAGAGACATTTGATCTGATCT GATATTCCCATGTCTTCAAGACACTAGACGATGAGATTACATAAGCAATCTGTGTTTATAAGCATTTTAA TTAATTAAGGAGATAATTAGAACATACTGTAATAATTATCTCATGCATGTCTGCAAAACTCTTTTTGAAA AAAGAAGATGAAATTTTTATT >gi|3449840|gb|AI099528.1|AI099528 34254 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154B21XP 3', mRNA sequence GGATCTTTTNTCCAATCTTCTCANGGTGGCCTTCCCCGNTTATTCCNTNAAGGNGTTCACCCTCAATTGN TGGNGNCCCAGNCCGNGACAACTTCAAATTCCGAATCTCACTCTGAGGACGAGGAAGTGTNAAAATGACA CTGCTTGTTTGGGCTCTTCAGGATCTCTTGTCAAGACCAAGAGCTGCCGAATTCGGACAACCAAGAGCAA GTGAAAAGACGTGAAATAGAACGACCATATTTCTATACCTGATACCAAAATGTGGAATATCGAATAAGAC TAGTGTTGTAGGCTTGTGTAGCATGTCCCGCTGTTTCTCTTTTAAACAGTTGTTGTATATGTATATCTCT GTTTCCTTGCTCTTTCACTTATTTAACAAAGAGTTCATGTT >gi|3449839|gb|AI099527.1|AI099527 34253 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154B20XP 3', mRNA sequence CCCAAATGGCTAAGGAAGTTGCTCCCTTCCCNGAAAAGGGGNCCCCCTGTGTTGAATTCGNGTTAGGGCC CGGGATTTGGTGTNCCCNGNGCCCCGGAANCACTNCCCGGATACTACGATGGCCGGTACTGGACAATGTG GANGCTTCCATTGTCCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAG TACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTG CCTACAAGCCCCCAAGCTTCACCGAAGCTTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCTC ATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGATTGTCAAATGTCTG ATTTATGAATATNTTATTTATAT >gi|3449838|gb|AI099526.1|AI099526 34252 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154A1XP 3', mRNA sequence TCATCCGGNAGCNTACNTTGTTATTCCGCATTCGGAAAANCCCCCNTGGTTTAAGGNCAACTGGTTAAAG CCAGGGCTGCAGTAATTGATGTTGGAACTAATGCAGTCAGCGACCCGAGCAAGAAATCAGGATACCGGTT GGTTGGAGATGTTGATTTCGCAGAAGCTTCAAAAGTTGCAGGTTTCATAACTCCGGTCCCTGGTGGTGTA GGCCCAATGACAGTGGCAATGCTTCTCAGGAACACCGTAGACGGTGCCAAGCGTGTCTTTGGCGAGTAAA ACAATCTACTGTATGTAATAAAGAAACCAAGAGTTTCTCCATTCTGTAATTGTGTACTTGGCTTGACGAT ATTTTTCCACTCAAATAAATTGAAATTGGCGTT >gi|3449837|gb|AI099525.1|AI099525 34251 Lambda-PRL2 Arabidopsis thaliana cDNA clone 154A12XP 3', mRNA sequence TCCAGGGGCCCCAGGCGNACCNATTNCCCAACANTTCCCNATCCAGGTTGAAGGGTTGGACACTCNAGGG GGGGGTNCAATTGGNACAAGGTAAGCGTTGGGCTTACACCTACAGGGCAAAGNCAAANGAGGANCGGTTC TTCACTACCGTNGCATTTGGGGCAAAGTCACTAGGCCTCATGGTAACAGCGGTGTTGTCCGTTCTAAGTT CACNTCAAACCTACCACCCAAGTCAATGGGAGCTAGAGTCAGAGTCTTCATGTACCCTAGCNACATATGA GGAGGATAGATTTCAAGAAGTATCGGAAGGAATCGCCATTATCATTTCTCAGGAGCTGTAGTTTATCTAT TCACTTTTGTTCTAAACTCTCTGTTGGTTTTGATTTTATCTTTAGACGAAGTAAAACATTTTTCTTCTTG AGATAATATTAATGGNACTTC >gi|3449836|gb|AI099524.1|AI099524 34250 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153K3XP 3', mRNA sequence GATGATTTGGCAAACGGATGNGGTTGAAGANTCTGTNATTGGTACCCCTTCTAAGCTGATTTTGCAGTTT TCGGTGAGCAAANACGAAAATCGACGATCACAAACCAAAATTCTGACGTCGATGGAGGTCACCGGAATCG AAGACGTTGACGGCAAAGGATGATGGGGAAAGTTACGCAGCTCTCATGCAACACGTGTCTTTGTTATCTA TTTGCTGGATATTGTGTTTGCTTGAGTATATCCTTCTTTTTCTTAGAATTGTAATCGTATGGGCTTTATG GGCCTTTTTGGGATTGTAAACCTTGAATATTNATAAAGGTCACTTATGAG >gi|3449835|gb|AI099523.1|AI099523 34249 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153I21XP 3', mRNA sequence TCCACTACCCCAATGCCGAAGGTTTGNCGTGTTACCGCCANCTCGATGACTTGTCGCTTGAATNCCGACG CGAAAGAGAAGTTTGACTGTATGCTAGTCATGCCATGGACAATGGTTGGATCCTTCCCGAGTTTGGGATT TCTGCAACTCAGTGATTAGTGGTTCTCTTATCAGTTTCTTGTGTTTGTGCTTACGATACTTTCCTCACTA TCTACATATATGTATGGATTCAGTTAGTAGATAAACATGAGATGTTTATATGTTCATGTGTTTCTGTCTG GTTGTTGTGTTTTGTCTTTGTACTGATATCTTTTAGTGTGTTCTAATTTCTGATGGATTTTTGTTACATT GAAAATAAGTTATTAGCATGGTTAATTTGTGTTAACTT >gi|3449834|gb|AI099522.1|AI099522 34248 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153I12XP 3', mRNA sequence GCTTGCTTTTGCCGGAAGANGGCCGANATTTGCCGTTGCCCGTCTTGGGGGTGCTATCCAATTTTGTCAA ACATGTTAAAAAGACGTGTTTGATATACATTTTAGATCTCTTCTTCTGGTTATGTGTGTCCACGTTTTGG GTTTGTATCTTTAATTTTCTTTAATTTTATGAATGAATCCGAATTTGACTTGAGGTCTTGTTTACTTTCA TGACTATTGATTGATTCAGGGTATGTTNCCCATCTTTTGTATATGTGTGTTTTATCTTTTGTATAAAAGC CATTCATTCTTTCCAACTNGGGGAACNCNAAAAAAGAAAGCANCCCAATTTTGTTCTCTTTCT >gi|3449833|gb|AI099521.1|AI099521 34247 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153H3XP 3', mRNA sequence CCCCAANTTGTGCGTTNTCAGGCCCCCAAGTGGCTTCTTNCGCTTATCAATGACCCGTTGAGGNGGGGGA GAAAGTGGCACCTCCTTGGCCAANTGGCTGCGGAATGCCACAGCCACAGGCGATTCAAGTCACACATGAG GAACGTGAAGCCCATTGAACGGCTTGAAGCGATGGGATTTGAGAGAGCATTCNCGTTTGGAAGTGTTCTT TGCGTGCAACAAGAATGAAGAGTTGGCTGCAAACTATCTTCTAGATCACATGCATGAATTCGAGGAATAA GCTTCTTCAGATTACTTTACCTACTCTCTATCTTTCGCATTGGTCCATATGTTTTAGCTATATATGTGTG GGATGCCAAATCCATGACCTCGTCACTTTGTCCATGTTCATGGCTCAGTTCTCAGTTTAAAATGAAGTTT GTC >gi|3449832|gb|AI099520.1|AI099520 34246 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153G20XP 3', mRNA sequence CCTGAGGCATANTCTGACCAGTATCGNAGAGACAGCTGGCGCCTAATGAGCTCGATGAGTGGCNCAAGGA GGTGGATGTTGGACCCGATGGAAAGATCCGGTATGAAGATCTCATCGCAAGGATGGTTGCTAAGTGAGNT CTAATCTNTTATGTTTTGAAAGTTGACACNTTTAAGAAGAGATTCTTTGTGTNTTTTTCACTTGTTTGTT TGATCTCGAGCGAATCCTAGCTNGGGTTTGTTTTATCATTGTGGAATTTGCTTACTAACTTTGTCTTCTT CATGTTTGTTTTCATTTTTAATGGAAATGTTGTCTGTGTGATTCCTCT >gi|3449831|gb|AI099519.1|AI099519 34245 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153G18XP 3', mRNA sequence TGGAGCANCCCAGGCATGGGGANACCGGCAACCACCTGGACCACGAATGCCTGATGGGAGCCAGAGGATT CTCAATGGGACGGGCGAAAGCCGGTTATGGNTCAGGCAGAGTGANCCAGAGCTGTTTTGCAAAGGAGGTG ATGTGGAATTGTGAATGGTCNCAAAGGGAGCTAAATAGAGAGAGAGCAAGAGAGANAGAGAGAGATTTAT CCTTCCCATGGGGATTGGCTAGTTTTGCAGACTTTATATTTGTCTTACTTACTTCGAAATACTTTTCAAT TACGCTTCTCTTACAAGGAAACAACANNAAAACTACATTTTCCTC >gi|3449830|gb|AI099518.1|AI099518 34244 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153G15XP 3', mRNA sequence CCGATCTTCTGGATCNCGGAGGGGACTACTCGTCTAATGGNTCATCATAAGGGGAAGTTATAGCTTCTGT TGCAAGAAACGGCTCCCACGCGAATTCTTGAGCAGACAATGCGAAAGCCATGTCTACTTCATGTTTCACG GGTTCTTGTTTGGTTGGGAGAGAAAAGACTCGCTTTCTCTTGTTTATNATTTGCCTCTCCATGTNAAATT CGTTTGCTTCGTCGGAACTCTNACAGGGAGANACTTATATAGAGCAAANACTCACGAGAGAGAGAAAGAG AAAGAGATGGTTTGGTAATGTATGTGAAAGGAGTAATGCNATATATATTAACTCATGTGATATTTGACAC GATCGATCACACTTTATGAAGTTATTTCTTTTG >gi|3449829|gb|AI099517.1|AI099517 34243 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153F18XP 3', mRNA sequence CTTTCCCGGAANTTTTCCGCTTGCCCAAATGNTGGCAATTNCCTAACCGGGGTGGGGGGAAGCCCCCTTC AAGTCCCCTGGNATTAAAGGGGAAGAGGAGGGGGGNGAACCAGAGGGNCGTGAGTTTTGTGGNCAAATNC GGTTCAGTGTTCCTCAGTCATATGGACATGGCCAAACTCACTTGCTATGTATATNTTTTGTGTAGAACNA AANACAGAAGATAATTTCTTCTTTTTGTCATTCCACATCTTTATGGGGCTGTATGCATAAGTTTGTATAG TTTATAAACGCGTTACTGTATNACAAACACAAGAACTCCGGCTCGTTGCAATT >gi|3449828|gb|AI099516.1|AI099516 34242 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153E8XP 3', mRNA sequence TGGTTTGNGNACCCCCTTTNGCAAGTTTGGCCCAATCNTAAGCCCGGGGNGTGTTACATGGACGTAAGAC CGGGAGAAACAGAGTCTTTGCCTCTCTTTCTTTTACAAGCGGTGAAGAACGTGATGCGGCTTTATCATTC AATGGAACACAATATGAAGGTCGCAGAATCATCGTCAGAGAAGGTATCGAGAAGAGTGAGTCGTAAACCA ACTGTTCTGCTTTTGCTGCAAAGACATCTCTTGGACACAAACAATGTGTAATGAATGTCTTCTGATTTCT TCGACAAGTAACCTTTACATATTATATCCTTCTCGATTTTGTTTATCACCCATTATATCTACCTGTATAA TTCTCTTTTCGATC >gi|3449827|gb|AI099515.1|AI099515 34241 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153E1XP 3', mRNA sequence ACCCCTTTTGGGGGTTTCAAGGGGCGACCCCAAGGGCCTTGGCTTGTAGAAAAGTCCTGAACANGGNGAT CAAAGTGGNTGAATCCATAACACACAACTTGACCTTGGGAGAAATCAATAAGGCTNTCGATCTATTGCAC GAAGGTACTTGCCTTCGTTGTGTCCTCGATACCNGCAAATGACTATATGGGTCCTCTCTGCTTTAATCTA TGTGTTCTTGTGACTTTCGTCTTTTATCGGTATTGACATTTCCTAAGNGCAACAGACTACTCTACTCGTG TGTGTCTCGTTTCTATCTTATGCTTCAATAAAATATCAATTAAGACCG >gi|3449826|gb|AI100087.1|AI100087 34240 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153D23XP 3', mRNA sequence CCCAANGGCCGAGGANNATGCCNAANGAAGGTCGAGTATGCNATCAAAAGCAACNGAAGTCACAAGTGAA GGGNAATATCCCCAAGAGTGCTGCACCCAAGGCTGCTAAGATGGGTGGTGGTGGAGGCAGACGTTGAATG GAGCTATAGAGTAGCCCACTCTTCTCTCTTCACTTATCTTTCTTTCTTGTTTTGACATTGTTTTGTTTTG TCAGCCATTTTTTAGTTTTGCACCAGNTNTAATATATTCAGTTTATG >gi|3449825|gb|AI100086.1|AI100086 34239 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153D10XP 3', mRNA sequence GCGGGATTCCTTTGANGAATTGGTGGGTNATCAGGACCGTTTCCCCAANTCTGTAATCCCGGGGCCATGG NTATTGGCGGAGGAGGAGGAAGCTAAGGNTTAGGTAGTAGGATGNGAAGGAGGTTGCTGCTGGATTCACC CTCAACAGGAGGTTACCGCTGATGGTTTTTAAGACGCNNTTTATCTATTGGTCTTATAAGAGAGACACAG AGTCAGGGTATGTTTCAGCCCCCAAATTCTGTACATTTGTACTTTTGTGCACATTAAAGTGACAGTCTAA AGCTAAGATTGGCTTAGTGACTTTCAAAACTGT >gi|3449824|gb|AI100085.1|AI100085 34238 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153C9XP 3', mRNA sequence AGNCCCTCAGGGAAAAAGGTTNCTTCCCNGCCTGTTGATTNGTTAGGCCANCGTNAGNCCCATGGGCNCC CNAAAAGGCCCGGTGTTTTCATGGTACCTTGGAAGATAATGCTGGAGTGATTGTGAACCCTAAGGGAGAA ATGAAAGGTTCTGCAATTACTGGACCTATTGGGAAAGAGTGTGCGGATCTCTGGCCAAGGATTGCTAGTG CTNTAACGCCATTGTCTGAAGATCATTTATCACTTTTGCTGGTTATGTATCTGTCTTCAACGAAACGCGA AATAGTTGGTGTTTTGAGTGTTTTAAGTAGAGACGACAATCTTTTGTGAGCTTCAGACATATTTCCAGTT TCTAAGAGATTTTGCTTAGATT >gi|3449823|gb|AI100084.1|AI100084 34237 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153C19XP 3', mRNA sequence TATTCNTTCCNTTAAAGCCNAGNTTATTGGGANGGAAAAAGGGTGNCCTCCCAAACCAATTGTCGGCCAT TGCCCAAAGGTCCGCACCCAGGCTTATCCACCCTCNTACACTCCCTCAGGAGGTTGAAGCCGTCCATCCA GTCGTCTATGAAGAAATAAACCGCCATTCTCTTCCTGTTATCTTACCTTGTCTGTTCGGTAATTTATCAG GCTTCTGTCTGCTTCCGGTTCTCTAAACCGNAAATTAGTTTCGTTTAATCAGATAATGGATTTTATCGAG TTGAGTTTTATTGAGCTTTCTATCTACATTTTTTTGTCGTTTTCAACAAGAAGTTAANACTCATAAATAT CTGTCCAAAAGACAAAATCAGAACTTG >gi|3449822|gb|AI100083.1|AI100083 34236 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153A24XP 3', mRNA sequence GAAGCACTCAGCTCAAGAAAGCTGATGAATGCTTACTGTGACCGGCAATCTGTGGACATGAACTCCATTG CTNTCTNGTTTGATGGGCGTCGTCCTTCGTGCTGAGCAAACTCCCGATGAGCTTGACATGGAGGATGGTG ATGAGATCGATGCGATGCTCCATCAGACTNGTGGCAGCNGTGGTGGTGCTACGGCCTGACACTTCGTCCA GGTTTAGGGCTTGTGTGTGATATGAATGGTTAAGGAGTAATCGGCATTAGGATTTGCAGACTTGTTTTTT TATCGTGACCATTCTCTTTAGAAACTAAGTTATTATGGTCACGAAGGTTAAAGAACCCTTTGGTTGATTT TTTGTCTTGTTCGTTTNGTATCGGATCCTATGATACTACTATTTCGGCTTAAAGGTGTTATTAACCCAAT T >gi|3449821|gb|AI100082.1|AI100082 34235 Lambda-PRL2 Arabidopsis thaliana cDNA clone 153A14XP 3', mRNA sequence CCCNATNTTTCCATACCACAAATGGGTGGCTTANTCCATATNCCCGCCCGGAGCTTNCGACAAGAGAGCC CCGCCGGGTTTTNTGAGGAAGTCGGNGCAGGCTNAGGCGCAGCCGGGAAGTACTGACGATAAGCTCATGT CCCTCTTTAGCGACGAGAACCCTAACGCCTGCACCGTTATGTGAATAAGTATAGATNGCATGAGCCGATG TTATAATTTGTAATGTATAACGTTTTATGAAGTTAAAGTACTGGAACCTTTTTTGTTACTGTATTATGTG AGAAGCAACGCAANATATAGT >gi|3449820|gb|AI100081.1|AI100081 34234 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152P8XP 3', mRNA sequence TTCCGCCTATGGCGAANNCTTGTGACAACCGNGNCAGTTGGNGAAGAAGGGGTTCCCNATGGACTGTTTA GNGATGAAGAACTAACTACGTCCTCGCCAAAGCTGTGCTANCTATGCGGNTCAAGGGATTGGGTTTGTGT CAAATGGCTATGGACTAGGAGATAGTAACTGGTCGCCATTCACGAGGAGGGGTGCTTGGGATAACAACAT GGGAATATCAGCTGATTTGATTGCTGCTCAGGCTGTCTCGGCGCTACAGATATCTGAAAATGCTGATGGG AACGCCTTTGTGTTCAATGGGATGTTCCGGGGATGACAGATGCCACGACTCGTCCTCATTCGGTTTTTAA AATAAACATTTGCCTTCTGCTTGCTTTGGTGTCAATGCTCTGTTTTTTTCTCTTGACGTTAGACCTTATA CTCTGTTTTCGTTCGCTGTAATATNAAAGACGCATTTTGAGTTGT >gi|3449819|gb|AI100080.1|AI100080 34233 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152K2XP 3', mRNA sequence CTTCCCGCAACAGGGGTCCCTGGGTTGAATTNGNGTTGGGNCCCGGNTTTGTTTCCCGTGGNCCCGGAAC CCNCCCGGNTNCTATGNTGGCCGGTNCTGGCCAATGTGGAAGCTCCATTGTTCGGATGCACCGACTCCGC TCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGTNCCCTGGCGCCTTCATTAGGATCATCGGATTC GACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGTTCACCGAAGCTTAATC CCCTTTCTGGAATATTCAGCGTTGATTATTCTGGAACCCNTTTCTATGTGGTCAATGCAAATTTAAGAAA TTATTTGCCGACTTNAAAGTTGAGGAACTATTGTTTGAAAGTGAAAATGTTATTCCTATCAGTTTCTCTN TAATTATAGTTATCATTTCATTTC >gi|3449818|gb|AI100079.1|AI100079 34232 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152G2XP 3', mRNA sequence CACATTNGAACCCCCTTTNNACACTGCGNTGGACCGAAGTGAGCCACAGTTTTTTAGCAGGACAGCNCCA TAACTGTTGGAACACAGCACTTGGCTTGNCCCCCTTGCCCTCTGTGAAGGCTCGTGTCAATAGTGCGGGT ATTGCAAGTGCTCTCATTCAACACGAGTGGAAACCCAAGTCATTCTTCACAATCTCTGGAGAAGTCGACA CAAAGTCAATTGACAAGAGTGCTAAAGTTGGATTGGNTCTCGCACTCAAGCCTTGAAACTGAGATGGAAG AAGAAGTTGCAATAGTTTTTTTAAACTAGTTTCTTTCTACGTACTCTGTTTTTTCTCTGCTTGGTTCATG GTTTGAGTGGGCAACTACTGATCTTTCCCATTTTCCTGCCGGATTTGTAGAAGAATNAAAAGGTTGAAAA TGATCATCTTGAGATGGT >gi|3449817|gb|AI100078.1|AI100078 34231 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152G10XP 3', mRNA sequence CAGGCCCNNTTTTGGANCNATGGGCCCATGGAAANCTGGGGAAACCAAGGAAAAGGNTGTGTATAAGNCG ATCCNGGGTATTTGGAATGNGGAACCCCACACCAATGCCCACATCATCATCCAACATGTCTGTACCTATA CAGACATTGGATCCCCCTACCCGGAGAAAATGTGTTATTTGGTCACATCCCCATCATCGCATATTCAAAC CTTTCTACTCTTTGTTTGGGGCTTCTAATCAATTCATATTTGATCTCTTTTGTGGTTCTCTTAGTTTCTT ATTTGTATAATCCCAAAACTGGTTACAACAGAAAGTTGTTTAGCGAGCAATCTAGGGTTTGAATGAATAG TTGGGGAAGATTTATTTATATATACCGTTTTTGATATATATATTCTTCATTATTAAGGTGTGATATCTAA CACAGTGGTATTACATATCTTTGGAAAAAAATCATTTGATAAG >gi|3449816|gb|AI100077.1|AI100077 34230 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152A2XP 3', mRNA sequence CATGAAATGCTTATGCGAAAGCGGCTCCCCGTACCCCTCAGTCCCCATTTGTGGAGTTTCCCAAGTGGAT GCATATGGATACATGGCTGTCTGGTGGTGAAGTTTACTGGAAAACAAACTNGCAATTTCTCGAAAAGTAT GCGCCTGAGAAAAGGAAAGAAGATACAGGAAGGTAACGATCAACGATGCTGTGTTTAGAGGAAGATTCGA CTCACTTATTTCCTATTGCAACCTGAAACGACGGTATTGTTTGTTATAAGCATGTGTATACGTATGTTGC ATTTGGGAGTGACAGATACAACTTGTTCAGAGAGTGAGATATTGGACAGGAACTTTTGTAAGCAGAACCA GCTAGTGGAGATGGCAAGTGTAAGCTAATCAGATGCATTTGCTTCGTCTC >gi|3449815|gb|AI100076.1|AI100076 34229 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151O2XP 3', mRNA sequence TCTTGGTAATAAGGTNATATTGATGGGGGAATTGCCGAGTGGTATCTGANAGAAGGCTAGNGAATCGTGT GCTGAAAAGGGANNCATNGTCTATTTCGAGACATCGGCTAAAGAAGATTNCAATGTCGATGACTCCTTCT TGTGCATCACAAAACTTGCCCTTGCAAATGAACGCGACCNAGATATATATTTCCAGCCAGATACTGGTTC GGTGCCTGAGCAAAGAGGAGGTTGTGCTTGCTGAATGCTGAAGAAACATNTCTTACTCTCTTGANTTATG CATTACTTGTTGTGTGTGTCTATAATCTTAATGCTGAGAAGGACCAATAANACTTGTATTGTTCCCTAAG TAAGGTTTTGTTNCCTTTCTGGTTCTTCATCTTTGACATTTGGTGGTTCACGATTTGTATGTNACAACAG TTCAAGTGT >gi|3449814|gb|AI100075.1|AI100075 34228 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151N20XP 3', mRNA sequence GTTCCCTAAGCTTCGNCGGCCAGGACCAGGGCCCCAGTTGGGGGGCCTNAAGGAGGAGGCAGGACGCCAG TTGAGGACGTCAAGGATGGAGCCCTGAAAGGAGAAGTGTGGTTTGTGTCCCCTTAGCTGCTAGCTNAGTT TGGTAGTTTTGAGGCACATACACAGAAGAAGACAGAGCTCTGAGTAGACAGAGAGAAGACAAAGAGAGAG ACGACAGACAGACAGAGAATCTCTTTATCTATTCATTAGGCTCTTATATGTGCACTCTTCAGAACAATAA TGGCTGCCTCCTTTTCTTTTTTTTGGTTGATGTTACCTTTTTTTGTTTGAATTCAGTTCTCCTTTAATAT AGTTTTTGAGGC >gi|3449813|gb|AI100074.1|AI100074 34227 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151L4XP 3', mRNA sequence TCAAGGGGAGCTGGGTGCCCAACCATTCTGCGGTGCCTGTTTGCCAGGTGCCGGGTGTGCCTTTCCCGGT TACCGACAACATTTGCAGCTGATTGTCTTCGGGTAAGAAGTACGGATCAGGAGGTGCCTAAGCATTGCTT CTTCCTCCTTTTTTCGATNTNAATTGCGGTTTTAAGGCCCGCAATAAACTGAGATGTTGATGAAATNTCT TTTGCTTAAGACTTAGGGAGGCATGTGCCCTAAACCNAATTTTATATCGTTCTGACGCCAACTTTTTTCA CTTATGGAATAATTCNTGTTTGAGAGAGTTTGTTAGACTCTTCGATTTTAAAGAATTTTGGATTTATGAA ATAAATTCTTCTTTTTTATC >gi|3449812|gb|AI100073.1|AI100073 34226 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151L19XP 3', mRNA sequence TTTTTNACCGGTTCCCCCTTAGGCCCNAANAATTNGCCAAGNTTCCCTTTCCCTCANGATCNTTCNGCCC AACTTTGGCCCCNGNCNAACCNTGGCCAACCCTGGAGGAAGCTAGCAGGACNGTTCCAGGAACAGGCTTC TNGTGANGNTAATGCCGCCTCAGCACCCATACAAGAAGAGGATGATGACGATGTCCCAGAGCTTGTTGGA GAGACATTCGAAACTGCTGCTGAAGAGAAAGCACCAGCTGCTGCTGCTTCTTCTTAGAGAGAAAAGAGCG AGACCACATCCAAAAAAAAACCGCACTTTGATTTTTACATATCTTTATAATATGTTTGTTCGCTCGATCC TTTTTGTAGTTTCCGACCAGAATCTTGTTTTCCATCTAATGACTTAAGGTTTTTATCCAATT >gi|3449811|gb|AI100072.1|AI100072 34225 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151K18XP 3', mRNA sequence AACTGGAGAACATCNGCAACCCAATCATTCGCCNNGATGTCCCAAGGAGCTGGTGCGTGAACGCCGGTGG NCCAGGTGCCTCTGGTATGGCCGATGATGCTCCCCCTGCTTCAGGCGGTGCTGGACCTAAGATCGAGGAG GTCGACTAATTTGTTGGACATTGNCCTCTCTCTTTCNCCTATCTCTATCTCTTTTACTTGCTTTTTTTTG ANCTGTTAAGACTTTTTATGTTGGGCTTTTTTAAAGAAGCCCATTTTGTGGTGTTTTTTGGTTAGTACTA TTTTGAACAATGGTTGGTTCTATACCAGTTTAGCTACGATGACGGATAAAATTAAAAGTTTGCC >gi|3449810|gb|AI100071.1|AI100071 34224 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151J22XP 3', mRNA sequence CCTCCAAGGATTCCCTCGGTGAACCNTCCGCNCGTGTTTCAGCACGAAGAACGTTGGCGTCACGCGCCTA GGATACGCCGTACCGGAGATTCACCTCGTGCTTCATAGCAAAGACGTCCGTTTGGAGAATCTTTGGAGCT AACTCGATGGTGAGTGTCAGTGATGACGTCATCTGTTTGGGTTTCGTTGACGGAGGAGTCAACCCAGGAG CCTCTGTGGTGATCGGAGGGTTCCAGTTGGAGGATAATTTGATCGAATTTGATTTGGCGAGTAACAAATT TGGGTTTAGTTCCACGTTATTGGGCCGTCAAACTAACTGCGCCAACTTTAATTTCACTTCCACTGCTTGA TTNAATTTAGTTGATGCACTTTCTCCAAAATAAATGTGTTTCAGTAACACTANATAAATGTATTGTATTA TGTTTAATTTGATCAGG >gi|3449809|gb|AI100070.1|AI100070 34223 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151J12XP 3', mRNA sequence AAAATGGGGGGAACCCAAAGGGGCCCTTGTGAACCCCCCGTATTGNCTGGCTAGTTNCCAAAGGATGGGG NTTAGGCCCCTNGGGAAAATCGAAGGGCCCCATCCAANGGTTNCCGCCAATCTCGGTCCATCCTCACCGA CCCTATGGAAAGCTTTTCCCACTGGGGGAAAAGATGTGAGCCATNGGGAATCTGCATCAAGGTTACACAC ACATCTTGGAATCCACATTTGAGAGTAAAGAAGCTGTTGCAGAGTACATTGCTCATCCTGCTCACGTTGA ATTCGCCACCATCTTCCTTGGCAGCTTGGATAAAGTTTTGGTTATTGACTACAAGCCTACCTCTGTCTCT CTCTAATTATCTTGTAGCAGCATTTTCATCATTGATCTTTTTCTCGGGTATGCATCTTGTATGTTGAATA AAGTATATTCCTTTTGAGTTTT >gi|3449808|gb|AI100069.1|AI100069 34222 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151I21XP 3', mRNA sequence CCTGNGCCAGCCGCTNGNAATACCGGTTGGNTGGTTGNTGGTGGGTCCTACTNCTGGACTCTCCTGCAGG AATCCCCCAAAACTCTTCCGGNNCCAGGTAATGGATTCGAAAACCGTACCAGTAGGAGAAGGAGACGGAC CCCCATCGTCTGATGGAAGCTCTATCAAGTTCTCATTTCCTCTTATTGCCTTCTTCTCCGCGGTTTCCTA CATGGCAATCTTCTGAGTTACTATTTTCCCATACGCTTTTGTGCCACTCAGATTGCATTCTTTATTTGTC CCTATTTATTCACATTTCGTTGTGATTTTGTGTGATGTATTTTATGCTCTGTAAATCCCTACTCTCCGGG TGATATTGCTTTGTTGTACCAACGGAGAGCATTTTGGATCTCTTTACCTTTTATAATAAACATTACTTTC CAG >gi|3449807|gb|AI100068.1|AI100068 34221 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151H24XP 3', mRNA sequence CTGGGAAAATTGNGGGGTTANTNACAAAACAAGGCCTACTGTAGCCATGACCAGATTTCAAGACTGACTC TTGTAAGCAATCATTCANTTCTTGGGANTCAATCGTTTTTTTTTGGCCTCAGAAGCTTCATTCTTGACCA GAGGGATTATTCTCTGACTTTCCTTGTCCAAACTCCGGTTTCTTCTTCTTCTTCNTCAGGCGTCTCACAC TGATCAGGGTTCCATGAATTTTGTTCTTCTCTTGGTAGTTANAAAGGCAGGGAAGGAGATTTAGAGTAAT TTAAACAATATGTGATTGTTGTATATGCCTTTGTATTTGTTTGTATACTCATAAATGTTTTTCTGTTTTG TACTCGGCATTCTTGTAAATTAAAGACATTATCCACATT >gi|3449806|gb|AI100067.1|AI100067 34220 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151H19XP 3', mRNA sequence AAGNAAGNCCCCAGCTTCCCAGCTAAGGCCTGAGATCCAAACCAATGCTCGGTTAAGCCCATGGCTGGAT CCCTTGGGTTTTCCGGTTTCAGGCGGCNTGCAACCGGTAAAGGACCGCTCAACAACTGGGCGACTCACCT TAGTGACCCACTTCACACCACCATTATCGATACCTTCTCTTCCTCCTGATGTGGTGGCTTTTAGCTTCTA CTGGTGTCATGTAATGATGTGGTGGCTTTTAGCTTCTACTGGTGTCATGTAATGATGTAACGTCGTTATT TTAAAGNAAATTTGGCACCTTTTGTATAAACGG >gi|3449805|gb|AI100066.1|AI100066 34219 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151H18XP 3', mRNA sequence GTTTGCCCNCGNATGNTATGAGTTCACACTCGGGACCCACTATAGGCGAAGGAGATGAATGTGTGNNTGA GCTACNCAGAACTCCGGGATCNCGCTCTCGAAGTCACCGCCTTTCGTGTCAATGAGTATGTGTGACCAAA AAAGATTTCCCTATCATCAGCGNTCTTGCAGGTAGCTTTCCAAAGTCNNACTCNTATGTAGGGGTCTCTT AACCATTCTCTCTCTCGCATTGGTTGTCTCTGTTCTAGTAGTGTTTTGAGTGAAATCTCAGGTTCCTATG TTTGGATGTGGATAAGTATTTGACGATTATAATAACCTCTGAGTGGGAAACTCTTTGTTTGAGTGGTAGC TAGGTTCAAAAGTAGAGTTGTATATACTTTTATCTTCATCAGGATAATTATGTTTATTTG >gi|3449804|gb|AI100065.1|AI100065 34218 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151H12XP 3', mRNA sequence TTANGATATGNCCTCTCCCTCTCTCTCNCTCTCGTTACCTGCAGAGTNATATATNTCATATGATAGCGNG TGCTATCATCGGATTACAAGTCCAAACACCAACACAACGTCATGTTAAGTTTTGGTTGAGAGATTATTCA TCAAATCTCTATGTACNCTNATAGAATTGGTTCNAATTATATGGCCCNGAATAGTAAAGCGGTGCGATGA TAAGAATTGTTTTTTGGGCAAATATAATCATGAAATAGTAAAGGGAAAACCAAAATTCC >gi|3449803|gb|AI100064.1|AI100064 34217 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151G21XP 3', mRNA sequence TTTACCCAAACATGGGTTCTCTACNTAGGCCTCGATCCTCTGTTTCTACCAAACNATTCTTCCAGTNCTG AAGATGTTGCTTGCCAATGAAGAAACCCCNATTTAAGAGGAATCTTCACAATTCCAGGTTCATCAGAGAG TGAACTANCAGCGAGTTCTTGGCAAGGTCACAATTCTTATGGTTCCACTGGTCCAGTGAATCTTGATTGC GTTTGGAAATTCTGAATTTGGAAAATCGAAAATTTGGATGTTAACTAGGGGGTATATAGGGTTTTTAAAA ACAGTGTATATATGCGTTATGTGTTAGCTTTAGATTCTAGGATATACAAAGATGACACTAATAGATTCTT ATAACATTTTGTAAAAAAAAAATCATTGTAGTGAATACTCTCTTGCCATTTGAAATCCATTGTGTTTGCA T >gi|3449802|gb|AI100063.1|AI100063 34216 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151G18XP 3', mRNA sequence TGGTTTCCTGCGGGCCAGGCCATTGGATAATGCCTATGATTGCCCGGGNTGAAAAGGTGACAAGATCATT GCAGTGTGTGTTGATGATCCTGGAATATAAGCACTACACTGACATCAAAGAACTTCCTCCTCACCGTCTC TCTGAAATCCGTCGTTTCTTCGAAGACTACAAGAAAAACGAGAACAAGGAAGTTGCNGTGAATGATTTTC TGCCATCTGAGTCTGCGGTTGAAGCTATCCAGTACTCAATGGACCTCTATGCTGAATACATTCTCCACAC CCTGAGGCGTTGAAGCTTCTCCTCAGAAGATTTCTGCAGCATCTATGTTTCTGTTACTTTTCATTGATAA TAAGAAGCATATGATCCTAATTGATATTACTTTTATCTCTGCATTTTTCTTCCTTATCATTTGGTCCTTC TGTAATTTCGTTTTAAAGACCCTTTCTTGGNNTTG >gi|3449801|gb|AI100062.1|AI100062 34215 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151G15XP 3', mRNA sequence CCTTAAACCCNATANTCCCGGTNGCCCATCCTACCCNGTTNCTAAANGGGGAGGAACATTGGCCCATGAG AATTTTGGGTGGNACCATTCCGATAGTTAGAAGCCATTCGGGACAAGGTGGAAGNACCATGTATNAACAT CAAGAGTCTATCCCAACAACTGCAATCTATGGAGCAGCCAAGCTCTTCTTGTTCAATAATGCTCTTGATG CGACGGTTACGGCGTCGTTTACAGTTTGGCAAATGAACAGTGCTTTTATTCATCCTTACTCTGACGAAGC TGTCCGTGCTCTCTCCCGTACCTGATTATTTTTACTTCCTTCTCATTTTTTATACATAGATTTATCTGTA ATAATTAATGTTTTTTTCCGATTTATTTGATATTTGATTTAGAAAAAAAAGGCACTGAAACATCATTATC AC >gi|3449800|gb|AI100061.1|AI100061 34214 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151B24XP 3', mRNA sequence CTTTGGNTCCNTAAACCGGGCTNCAAACANGCCCNTTTCCNGAAGCTGAAGCAGTGGCCTGGGTNAAACC TGTTTCCGCATCTTGCCACAGGGGGGGTATNTACACTGGGAGACAAGCTTGGGATTATGCNNCTTAAGGC CGACGGTATCAAGACCGAACTCATGGACCTGAGGAAAGACTAAGCNCCTTTAGTGCATTTAGCCAACCTT ATCGGTTTGTTATTTCACTTCAACATCGAGCTTCCTGAGTTGTAGAACTCGTATGAAATGCTACTGGGTT TGATNTTTTACAGTNAAAATCATGACTCGTGTTTGAAGTTTCTCCAAAACTGTTNCCTTATGTATNAGAA TCACTCGAATCCTTGTCTTAAATCAATGTTTCTCTCACT >gi|3449799|gb|AI100060.1|AI100060 34213 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151B13XP 3', mRNA sequence TGGGANTCAATCGTTTTTTNTTGGCCTCAGAAGCTTCATNCNTGACCAGAGGGATTATTCTCTGACCCNC CTTGTCCAAACTCCGGTCTCTTCTTCTTCTTCNTCAGGCGTCTCACACTGATCAGGGCTTCCATGAATTT TGTTCCTTCTCTTGGTAGTTACAAAGGCAGGGAAGGAGATTTAGAGTAATTTACACAATATGTGATTGTT GTATATGCCTTTGTATTTGTTTGTATACTCATAAATGTTTTTCTGTTTTGTACTCGGCATTCTTGTAAAT TAAAGACATTATCCACATT >gi|3449798|gb|AI100059.1|AI100059 34212 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151A8XP 3', mRNA sequence CCCACAGGAANCCCGCAACGCCATCTCTTAACCCCACTTGTAAAGNCGCTCTTAACTTAAGGTATGTGCT AACCGTGTTGGATGTGGTTAAGGTTTCTCTACCACCAACGTCCAACTGTTGCGCTCTTATCAAAGGTCTA GTTGATCTTGAAGCCGCGGTCTGTCTTTGCACTGCCCTAAAGGCTAATGTTCTTGGTATCAACCTTAATG TTCCCATTTCTTTGAACGTTGTCCTAAACCATTGTGGTAAGAAGGTTCCATCTGGTTTCAAATGTGCCTA GAGATTACACATTTTAAATTGAGGTTCTATATACCATATTTCATTCTTGTTTTTCAAATTCCGCGTTTGA TGATATCTTTATCTATTGTTGTAATTTGTTATATGTTTCATATATCAATGAAATAAAGTGTTTCCTTTTT CG >gi|3449797|gb|AI100058.1|AI100058 34211 Lambda-PRL2 Arabidopsis thaliana cDNA clone 151A15XP 3', mRNA sequence GAANCGAANCCCTTGGGCCCTTCTTACANCNACNACCTTAACCCTTGGGCCGTGGAGTNCTCCAATCCGG ATCAAGNCCTTTGNACCCGATCCAGCCACTAGCCCCATAGTGCAACCAATTGATGGCTCCTAGGAAGCCA CCTTCAACGTTGAGTTTGCGAGGTCAATGGTCAGAATGAGTAATATCGGTGTGGTTACCGGAGCTAATGG GGAAATCCGTAGGGTTTGCTCTGCGGTTAATTAATTAACCGATTAGAATCTGTCGTGATAAACTTTCATG ACGCAAAGTACTTGTTTCGAGTGTGGTTTTAATCTGAACAATAAATAAACCAATAGAAAACGACATACAA AGNAAAAACCCAAAAGTGGGTTGATGAAAATTGTATCTATAAGGTGTTGGTATTCGATTTCTTTTGGTTT TAGTTAAAAAAAACTGTAATGTCTTCANAAAAATATTATAATGAGTTTGGTCCTAGTTTGGATTCTT >gi|3449796|gb|AI100057.1|AI100057 34210 Lambda-PRL2 Arabidopsis thaliana cDNA clone 150P23XP 3', mRNA sequence CAAAAGGGNTCCCTGGTTGAATTCGGTTNGNGCCCCGGATTTGTGTNCCCGTGNGCCCCGGAACCACCCC CNGGTACTTCCGATGGACCGGTACTGGCCAATGTGGAAGNTTCCCATTGTTCGGATGCACCGACTCCGCT CAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGTACCCGGGCGCCTTCATTAGGATCATCGGATTCG ACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATN TCTTTTCTAAAACANTCTTATGAATTATCTCTGCTCATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCT TTATGAGACAATTTCTATCGGATTGTCAAATGTCTGATTTATGAATATGTNATTTATATATCCGTGCGTC TTGATTT >gi|3449795|gb|AI100056.1|AI100056 34209 Lambda-PRL2 Arabidopsis thaliana cDNA clone 150P19XP 3', mRNA sequence CCCCTTTGGGGAAAGCTGGTACCNCCTGCAGGTCCCCGGTCCGGGATTCCCCGGTCGNCCCCACGCGTCC GGTCCGAAAGACGCCTTCAATCATAAATGTCTTTGACATCCAATTATACCACTGAAATTCTTTTTCATTT TTGAATGGCAGTTCCACAAAAACGTACTTCTATCTCGCAAAAGCGTATTCGTNAACACATTTGGAAAAGG AAGGGATATTGGACATCGTTGAAAGCTTTNTCATTAGGGAAATCACTTTCTACAGGTAATTCAAAAAGTT TTTTTGTACAGCNANATAAATCNAAAACACTATNATAATTAGAATTAGCCTAACTTAAAAACCAATTTGT TTAAATACATCTAAAAAAAATAGGAAGC >gi|3449794|gb|AI100055.1|AI100055 34208 Lambda-PRL2 Arabidopsis thaliana cDNA clone 150P17XP 3', mRNA sequence GTGGCCTTCCCCCNTTNNATTTAAAANTTGNTACCAGGAACCTTTTCCNCCNTGGAATTAATTGCTTGAA NAGGGAATTTTGGGAAATTCNNCCATTGCCCCCTAGAAGATCCCGACCTGATNATCCGAGTCCGACGACT GCGACGTTGAATTTTCGAAAATCGGAGTTCGAGCGTAGGATTGTGCTGGTTTGACTAGCGACGGGAGGAG CTGAATGACGGAAACGCCGAGTTGTTTCGCGGCGGATTCTGCTTCTTTGGATTGGATTACGAAGCTTGGC TTATCCATTGCGGGTTGATCCGGTTTGGGTCGCGTAAATGGGTCGGGTTATTTTTAGATGGGAGAGATCC GGGAAATGAGGAATTATGAAATGGAAGCTCGAGAAACAAACTATTTATAGATACAACAACGTAGGAAACT ACATTACGC >gi|3449793|gb|AI100054.1|AI100054 34207 Lambda-PRL2 Arabidopsis thaliana cDNA clone 150N18XP 3', mRNA sequence GCTGNGGTTNGACTTGGAAGGCCCNTGGGGGNGGGGTTTCCCNGCCCCAGNACCGGCATCCCTTNGGNGG AAAGCCTNTTCCCNAAAGCCCTCGTGGAGATTCCGAGAAGATGCTCGTCGCACTTCTCNGGTGAAGATGA TGCTTAATCAATCAATCCTCCACAGAGAAACATAAGCTGCTCTACAGCTTCTGTTATCTCTTATCTCCCT CTCTCTCTCTTTGATGAGTTTCAAATCGTTTGATTTTGTTTCTACAAAAACCTTGTTTGTTTCTGTTGTG TGTTTTGAGTTCCTAAATAATGCAAAAGAGAGAGACAGAGAGAACCNGTGTGGTNTCTTAAGTT >gi|3449792|gb|AI100053.1|AI100053 34206 Lambda-PRL2 Arabidopsis thaliana cDNA clone 150M14XP 3', mRNA sequence AAGTTNTTTGNNAATTCNGTGCCCCATTCACNAAGGNGGGGATTCCCCCCAAGTCTTGACCTGGGAGGAG CTCTTTGCTTACTTATGTCAGCGCTACCTCTACCGGCGAAGTTCTTCCCATCAAGAGAGGTCCTCAGGAG CCGCCTAAGCTCGGNCCTCGCGGCAAGCTCTGATCTATATTCATGTTNCCTTTCTCTTCTTCCTTCTAAA ACTCATCAACATTTCTCAATACTGCAAACCCTTTTAAGTNNTNTTATGTATATTATGTTTATCTGTTACA TTTGAGANGTTTTTTCTTCCCCT >gi|3449791|gb|AI100052.1|AI100052 34205 Lambda-PRL2 Arabidopsis thaliana cDNA clone 150L23XP 3', mRNA sequence CCCTTTCTGGAGGTCCCNGGNCNNCGGGTTTCCCCNACATTGGGGTCCCGGTTNCCCCCAATGGCCTTTG ANCCCGGGTANCCCAGGCCCCNTAANTCCNGTTTTAACCAGTATGTGCTCGTGAATCCGGGAAACAAGTA TGGTCTCATGGATGGCTGGATGGCTCTGCACTGTACATAAAACAGAGTCCTCACTTTCATTTCTCTCCAA GATAAACTTTAAGGTGTTGTGGTTTAATCACTCGTTTATCTAAAGTTTACGCTGATGAATAGTAATTTGT GACAAAACTCTGAAAACGGGTATTTGATCAAAACTGATTCGGTGTGGTTCAAAAAACAGAATGTGATTTA GTGTGTTTAATACACTCTTGCTTTGGAG >gi|3449790|gb|AI100051.1|AI100051 34204 Lambda-PRL2 Arabidopsis thaliana cDNA clone 150C17XP 3', mRNA sequence ACCCCCAAACTTGTTCCGAGAAGGCTGAGGAGTGGCCCCAGNCTTTCAGNCNGGGGATTGCCGCAAGCAG AANCCATGCTCGTGCAGACATCGTCGCTTCCACCCTGAGAGTGGACTGACGCTGAGTTCTGACGGGATAC TAGGACCACTCGGATCTGAGTTACCAGATGATGGCGTAGATCTAACGGTCGACGACATTCCTTCTGCAGT TGATATTTAGATTCTAAAGCTTTAGTGTATTTTTTCATACACAAAAACACCTCCTTGAGCTTAATTGAAT ATGTAGTTTACTTCCTACAAGACATTTTATCATGTGTACTTTGTCTTTTGTAATCGATATGTTCTGTTAC AATGTCAAGAAACCAAAGAAAGGCTTTGCCCAAG >gi|3449789|gb|AI100050.1|AI100050 34203 Lambda-PRL2 Arabidopsis thaliana cDNA clone 150B17XP 3', mRNA sequence TTTCCNCTAGACCCGGAGGCCGGTTTACCTGATGACCCCCCGGGATACCCGATTCTNTCAGGCCAAGTGA GGCCGGGAAAGGTCCGTGANCCACGATTGGACAACCCAACCCTTTAAGAAGAAGAAGGTGCTCTACAGGT CCCAAACCCCANGCATAAGATTATGTGTCCCGATCTTTGAATGAATGNAGAAACAAGAAAGATGGTTGGG AATNNTAANTCATTTAATTTAGTACGNTTATTCATTTGTGTATTTTTGAAACCTNAAAGAAGGTTTGTGT TTTATGGATGGTTTTGATTTGTTTTGGTGATGGGATTTTTTTTTGTTGATGANTCTNATATATACAAAAT ATTTGTGTGCCAATGTGATTACCATTCAATTTTTTTGCTATGTGTGTAAATTTGNACTTATATTAGTCTT TTTCT >gi|3449788|gb|AI100049.1|AI100049 34202 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149P21XP 3', mRNA sequence CCTGCCNTTAGTGNCGCCGAATGGCTAGGAAGTTGCTTCCTTCTCCGCAACAAGTGGATCCTTGTGTTTG AATTCGAGTTAGAGCCACGGATTTGTGTACCGTGAGCACGGAAACACTCCCGGATACTACGATGGACGGT ACTGGACAATGTGGAAGCTTCCATTGTTCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGA ATGCAAGAAGGAGTACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGC ATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATTTCTTTTCTAAAACATTCTTATGA ATTATCTCTGCTCATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGAT TGTCAAATGTCTGATTTATGAATATGTAATTTATAT >gi|3449787|gb|AI100048.1|AI100048 34201 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149P15XP 3', mRNA sequence ACCCCGGGGAAACCCTCCAATGGCTATCCGATTCCCGTTTTGGCCGCCCGGGGAAACCCTGCAAATNCNA ACGAAGAGCCTCCATTTCCCAGTTAATGGGAACATAGTCTCTGTTTTGTGTTGCCCATTTACTTTGCCCC TCCAGTTTTACAAGATTCGAGCCATTCATTATCAGCCCTTTCTCTTTTTGTTCTGATTTTTGGTACAAAA ACTTTTATTTGAACATGAAATTGAATTGTATAGTTGTGACCTTTGTAG >gi|3449786|gb|AI100047.1|AI100047 34200 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149N17XP 3', mRNA sequence TTAGGGGCCCTTGGTAATTTGGGTCCTCCACCATCCAATACCNCCATNAGTGGGAGGTCTTNCATTNNCA TTGGGATTTGTCTGGGAGTACAGAGATTTACTATTGGCTTCTTCTTTCTTCTCTTTTGGGATGAAATCTC TTGTATGCATTGCTCACATTATATGGTTTGGGTCTGTGGCTTTAGTACTTTTGGTCCTTGGACAACTTCT CTGCTTCTGATCCAGTATGTTGCGCT >gi|3449785|gb|AI100046.1|AI100046 34199 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149M3XP 3', mRNA sequence TTGGGGCCCGTNCCNTGNCCAAANGGGTTTGACCCCNGGAAACCGGNCCATCACATCANGCAACTCCAGC GTGGAAACAGCTAAGTTTGTGTGCGGGATCCCGTTGGGAAACTCATCAGTCTTAACGTTTGAAGCTNATA ATCTTCACAAAACCTCTTCGGATTTTCAANTCANTCTTGTATTGTTGTTGCCAAATATTAGCGCCTTAAA AAAACTCGTTTGCAAGTCTTCCCAAGTAGATGAGCTTTGTGGTTGTATCTTGCTGAAAATCTCCTCTTTA AGAATAAAACTCGAGTAAACTTAAACCT >gi|3449784|gb|AI100045.1|AI100045 34198 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149M15XP 3', mRNA sequence AGAGGCTACTACTCCCCCCAGTNGTGAGCCGACAAACTCTCGGACAAGAGTCACATTGAGCACAGAGTCG TGGTAGATGGAAATGGTCATCACAAGCAGAGCTCCAGGGACTGCAATGGAGTTTTCACTTGCCATTGTCG AAAAGTTTCACGGGCGAGAGAAAGCTCTTCAGCTCGGAAAGGCAACACTTGTGTGATCTCAAACAATGAA AGTATGAGAGTGGCTTGAATAAAAAGAAGGCTTTGCCTNTTAGTTATCTCTCTCCATTAGTAATNACTTA CTTTATGATATATGACATATGAGCTTGGCTTAGTGATTNGTGTGTAACTTTATGCCTTTATAAATGAATA AACGAGATTTTTCT >gi|3449783|gb|AI100044.1|AI100044 34197 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149L5XP 3', mRNA sequence AACATCCCNTCATGTNNACCCCCCTCAGGTAGGGTGAGGANCAAGAGTTCTTGGAGCAAGTATCTTCTCT TCTAACCCCANTGATGATATCCTTGTGGTTGTCAGAGTGGAGCCAGATCCTTAAAAGCCACAACTGAACT TGTTGCTGCAGGTTACAAGAAAGTGAGAAACGTGGGAGGTGGCTACTTGGCTTGGGTGGATCACAGCTTT CCCATCAACACGGAGGAGGAGGAGCCATCTGCTAATTAATAATCTTAAGATTCTCTTCTTTTCTTAATCA AATAATATAACTGCCTGTGTGATGTAGTAATCATTTTCAATTTAAAATTCCAGTTTCTTGTAATCAAAAC TTTCGTGTACCAAATTCAATAAAAGCTGTGTTTCTCT >gi|3449782|gb|AI100043.1|AI100043 34196 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149L3XP 3', mRNA sequence CCAATGGTAGNGATCCCNTTCGNTACCCTTCTCTACAAATTNGACTGGAGTCTACCNTAAGGGTTTAACC CGGAGGATATAAAGTGGACGTCATGACTGGACTCGCTATGCACAAGAAAGAACACCTCGTTCTTGCACCA ACGAAACACATCTGATGCTATATATATCATTAGGACGTTTCTGCTGGTAGATATGGCGTGACCAATGGTT ATTTTTCATTGCAATATCCCTTTTTGTTTTAATGAGTACTATGTTCTCATTTTAACGAATAAAAATGTAT CAGTGCTCTTGTTTTTGGACTAGAAAAGAAAGTAGTCCGATGTTTAAT >gi|3449781|gb|AI100042.1|AI100042 34195 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149L16XP 3', mRNA sequence AGGAAGTCTCCTTGTACCCAGGCTTGNNCAAACCCATTGGCCCNAACTTNTGTACGTNGTGANNAANNGA ATCAAAGCTTGGAGCTGCAAAAGCCATCTTTGGCCTTTGTCAAGACACATTACCACCAACTGCGGCATTG ATGTCTGCAATCCTACGAAGAACACAAAGNCGAAGACGGGTNTCTCTACATGACATACAGTGGAGAGAAC ACATTTGGTGGCATCTTTCTACTGCTAATTACCTCAGCTTCTACGTCTGATCCTCTTGATGATTGTACAT TCTCGTCGACCTTAATAATGTCATTTTACTNTCTTGGTTTAACCTTTTGAGCTCTCTTACTATCTCTTGC ATTTGAAGATGGTATTTGAAACAAGATTCTAATTTGACTCTCT >gi|3449780|gb|AI100041.1|AI100041 34194 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149K24XP 3', mRNA sequence TTCCCCTTCCCCNCATCCCATCCCCAATCTGGGGAAGGAGCCCCNCCCCCAGGACTGNACCNATGTGGGC CCCCATCAAGTCAGCTATAGNGCTGTGATCGAGTCCCCTCTCGGTATNACTCTCACCGTGACCCCACCAC ACTCGTGTTTAAGTCTGCAGCTAAGAGAGTACTCACTTTCTCGGTTAAGGCTAAAACAAGTCACAAAGTC AACACTGGCTACTTCTTTGGAAGCTTNACATGGAGTGATGGTGTTCATGATGTNATAATCCCTGTCTCTG TTAAGACAACGATTTCGATGTAATAAAAAGAGCCATATGATGCTCATTGTGTTTGTTCTTATGTAATTTG TTGCAAATCTAAGTCTAAAATGTCAAATCAAGATTCAAGATCATCATAATAAAAGATCAAATCAC >gi|3449779|gb|AI100040.1|AI100040 34193 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149J19XP 3', mRNA sequence GGGGAGGTTCCTCCATAGNCCTCCGTGCCCCNTCGNTCTCTTTGGGCCAGCTCGTCCACAGACCCACTTT AAAGGAGGNACTTATTAAAACTTTAAAAACAAGAAACAGCGGAATCAAAAGTCTTGAAGAAGCATACTCA TCACAAAGCTTGGAAGGATGTTTTAAAAAAGATCTTTGTTAATTAAGTNGNGTGAGATTCTCTTGATTAG AACTTTATGGTTTTTGCTTTATGANGTATCTCTCCAGAGAAGATTGTAAATTTGGGTTGAAACTTTGTNA TATATTTAGATACAACAAATAAGTTTG >gi|3449778|gb|AI100039.1|AI100039 34192 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149I19XP 3', mRNA sequence CTTCAAAAAACGGCCCGGGCAACCCNNGNGCAAAGGAGCCCCAGCCCCAGTTGGNTTTTGCCNNAAAATA TCCATATCTCCCTGATTACCCGCATGCCCGTTGTACTATTTTAGAGCTCTTTGTTATTTTGGTCTCACAT AAAATACATCATAGTTGGAAGTCTTTTATTTGCATTGGGATTTGTCTGGAGTACAGAGATTTACTATTTG CTTCTTCTTTCTTTTTTTTTTGGGATGAAATCTCTTGTATGATTGATCAATTATATGGTTTGGGTCTGTG GCTTTAGTACTTTTGGTCCTTGGACAACTTCTCTGCTTCTGATCCAGTATGTTGCGCTACTGCGTTTAAT TTAAAAAAATCTCTTCCAAT >gi|3449777|gb|AI100038.1|AI100038 34191 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149H23XP 3', mRNA sequence GTTTCCCNTGGTGGATTNTGCCCGGGAAGTNTCCNGGGGTTNGTATATGGAATCNGCCGGCGTATAATCC TAGTATGGGACCCATACAGCCGCGTTGGTNGATTATGTGGCTAATNGTGGTGGAGGAGGATACGAGAGGA TCGTCGGAGCGGTTCTGGTGGAGAAAGNAGATGCNGTGGTGAGGCAAGAGCACACGGCGAGGTTGTTATT AGAGACTATATCGCCGAAATGCGAATTCAAAGTGTTTCATTGCTATGAAGCTTAGAGAATCATTTAATTA TCCGNAAAATAAAGGAATTTTTTAAAAAAAGGAATAAAAAGAAAATGAGACTTTTTAATTCTTAAAAGTG TTGAAATTGACGAC >gi|3449776|gb|AI100037.1|AI100037 34190 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149H11XP 3', mRNA sequence TTTNCGCCCANTTGGNCCCTTAACGTCGAAAGCCAGAGANCGNAGNCGCNCGTTAGTATGATTCACCACG GACGTTATCTTGAAAGGCCCAAGCATCAGCTTCTTGGAAAAGAAGCTTCCAGCAAAATGGCTCGTCGTGA TCCTGACCCAATCTATGACCGTGAATGGGAAGACGACAAGAGGAGAGCAGAAAGGAAGCGGAGAGATCGG AAGTAGAGAGTGATGATTTGCAGATCCTTTGGTTTGTTCAACGAAGAGAGAGACAAATACTGGTATTGAA CACTGCTTATGTTGTACACGTACTATTCAATGACCGTGCGGGTCTACTTTGTCATTTGCTCCGCCGAGTT TGATAAATGACTTGCCAGACTTCAGAT >gi|3449775|gb|AI100036.1|AI100036 34189 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149G7XP 3', mRNA sequence TTTTNCCGTTTTCCNGGGCCCCCATTGAGGGTTTTAATGGGCCCAAGNACNCCTGTCCCAAACGGAATCC CAACGGGCCANCCCTTGTGGCTGTCCCNAACCGTTATCCATTTGAAGNTGATTGAAGAGCCTGTTGAACA AAGCGCAGTGGAAAGTGCAGTCTGAAAGACGGGCTCATGCATATAACCGATAAGGACATTCTCTTCAACA AAGCNACAGGCGAGTTCGACTTCTGATCTTGACACTAGTAATGCTTCTAGGAAAGTCAGAGTCCNTCAAA TGTCGGATGTCTTTCTTTGTACCTTATGATTTAGACCGACCTCCGAGTGAGAGACATGATNATTTATGGG AATATGTACTCTGGTTGGCTTGTTGTACAAAAAGNACAGATTTTTCCGGCCGAAGAAGGCTTATCAACTT TGACTTGTTTC >gi|3449774|gb|AI100035.1|AI100035 34188 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149G15XP 3', mRNA sequence GGCCTCGGCCTCNNGCCCGGGNATGTTGCCAATTACCCNTGNCCNTAAAGNGNGGNGGAACCGGAAGGTT CTNGAAACTGCGGGCTTACGNCCACTTGGGAAGAGACGACCCCTGACTTCACCTGGGAAGTCGTCAAGCC ACTCAAGTGGGACAACCTCAAGCTTAAATTTTACCTACTCTGTTTCTGTCTTCATTCCACAAACCAATTA TCTGCTCACTTTTTTATTTCTCTGTTTTTGTGGTTTATTGTGTTTATGTATCATTGTACTTGAGCTATTT CAATTGGGTGTTTGTTTTTATGGCGACTTTTACACGGCTTGGAGTAAGTTTCATGTTGTTCTTATATAAT TATAACCATGNNAANTTAATAT >gi|3449773|gb|AI100034.1|AI100034 34187 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149G13XP 3', mRNA sequence AATTCCCNCAACCGCANGGNCAAGGACGTTCGCCGGGATACTCANGGATTGTCATCTTCTGGAAGCTGTT AGACTTAGTTTTTGGTCAGCTTCTCTCAATCCCCTTTTACATTCTCTTGTGGATTCTCTTGGAATAAGCC ATATAGAGATGACTGTAATCATATACTTGTTCTGGCTTTTTTTTNCCTTTTTTTTTTCTTCTTCTGGTTA CTGTGTTAAGATCACATCTCTTTCTNTCTATCATTGTGGACAAAAGAGAGATTTATAACATCAGATGTAT TTCAGAATAAAATTTGTCTTTC >gi|3449772|gb|AI100033.1|AI100033 34186 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149E17XP 3', mRNA sequence ANCCGATCGTNAAGATGGGNAATANCTCCTCCCGTGAACAGGCCGCCCAAGGGAGNNCTCCAGGCCGCNA TCCTGGTCCGGGGGGTTACCCTGGCTTATTAATACAATCCATCTTTATAATTATGTGCAATATAATGCTT TCGTTTCTCATTGAGTTTTCAATTTCTTTTGGCTTTGTTTGCATGAGTGTGTATCATATGTTTATTACTC AAATCTGATTTTGTTTCGG >gi|3449771|gb|AI100032.1|AI100032 34185 Lambda-PRL2 Arabidopsis thaliana cDNA clone 149E11XP 3', mRNA sequence TTCGCAAACCGCCTNTTCCCCGCGGCGATTNNCCGATTCATTNATGCAGCTNGCACGACAGGTTTCCCGA CTGGAAAGCGCGGCAGTGAGCGCNACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTT ACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCCGGATNACNATTTCACACAGGANACAG CTATGACCATGATTACG >gi|3449770|gb|AI100031.1|AI100031 34184 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148N24XP 3', mRNA sequence CCCATACGACGGCNCGTGGGATAGTACNGTGAAGACGGTTAAAAACGNAGGAGCCATGGCTCTTTATAAA GGCTTTGTNCCTACAGTTTGTAGGCAAGGTCCTTTCACTGTTGTTCTCTNCGTTACGTTGGAGCAAGTTA GGAAGCTGCTTCGAGATTTTTGATACCANTCTTNTATTGATGATGATGATGGCGACTGNTTATATTGATT TATTCATTTTTGAAATAGTGAACACAAGAAGGAANTAGGAAGAGGGGGATTCAATATATTNTTTGTTCAA GCATTGTTGTTAAATACAANTCAATTTTAGTTTCTAT >gi|3449769|gb|AI100030.1|AI100030 34183 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148M5XP 3', mRNA sequence CGAGAANTCCCAGCGAGAGGATGGTNNCGACCATCCCTGGGGTTCTGACANCCGTTTATTGGGCGGAGAG CCGTTTTNGCCTTACAAAGGCCAAGCCCGTAGNTGCTGATACCAAAGGGAAGAATCGAAAGCTTGATTGA TGTATTGATTCAGATTACCGACTCTTCTGTTTTCTTGAAATTGATGAAACACTTCGATAAATNTCTTTAC TTTGTGGAATTTTTTTTGGACTTCTGTTATTTTACCAGGACCGTTATTTATCATCTGATTTCTGCTAGTA TTTGTTCCTTTTGTTTGGCGAATCATTGTTAACTTTACTTCAATGATNACAAAATTTTTGTATT >gi|3449768|gb|AI100029.1|AI100029 34182 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148K17XP 3', mRNA sequence ACCNTTTCAAGATTCGTGCTATACCCCNTCTTCTAGATGAGCCGCCAAGTCAAATCCTAAATCCNCCACA ACCCTCGCCCGTATGGCCTTATCCAACCATGTGGANCTNATATCGGGAGTCAAGTTACGGCAGTAGGAGA GAATTCTTGCAGACAAATTCCGAGGCCTCCTAAAACCAAAAAGAGGAAAATTCCAAAGCCTCTTAAAACC AAANAGAAGAAAATCTCAAAGCCTCATGCAGCAGTTCCGTGATCTCCAAACAAGANNGTGTGGGAAAGGC TTTCACAGATAAAACTACCACTTAGAATCCTTTTTTGGAATACACTTATCCTTTGAAAACTCATCAAGTA TTTTATTGGATTGTACAATAAATCCTCGTTCTTC >gi|3449767|gb|AI100028.1|AI100028 34181 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148K16XP 3', mRNA sequence CCTTGGGGGAGTGNATCCCCGNTTTAAGCTAACCCGGNGNCCCAACTCCTTGTTCCGTTGGGGATGGGTG ACCCCTGTNAAAGGCCNGTCTTGGAAGATCATCCAAGCTCACCTTCCCTCACTTGATTCTTCCCCTTCTT GCACCATCCCACTTGATTTGATCGATATCGATTTCTCGGGACTANCCGTGGGATTGAGGNTCAAATATCT TATATATATTTCTAGTTGTGAATTGTTTTCCAATAAATCCTTTACAATGGTAAAGGAAAGTTTGTTTCTT CGATGATCTTTACGATTTCGTGCTCAATGTAGTGTTATTTCTCTAATAAATTACGGTGATATTAGCTGAA TTCTAGACTCTGGACTCGAGATTTCGACTTATATTTGGTTTTGAAGTTATAGTTGTAATAAAACTACGAG ATTTGATTGAAACCTAAGAGCCTTGAGTTG >gi|3449766|gb|AI100027.1|AI100027 34180 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148I16XP 3', mRNA sequence CCTTACGCGATTGCCCGTGACNAAAAANTTATGGGACAAACCCTGATGAGTTTACCCCTGATAGGTNCCT TGAACAGCTCAATAGATTACAGAGGACTGAACTTTGAGCTATNACCGTTTGGNTCTNGTAGGAGGGATAT GTCCAAGGGATTGNCAATGGGGACTCGCCATTGTTGAATTGGGACTATTGAATTTGCTTTACTTCTTCGA CTGGGGGCTACCAGACGAAGGAAGAAGCCAAGGAGATCATCACCGGGAATGAAGTTGCTCTTGACCTTGT TCAAGTTTNTCTCCACTGAATATGTGTTTTGGTTATGGAATGTTTGTACTACACTAAGCTTGATTCTCAN TTNATNACATCTTACAAGTA >gi|3449765|gb|AI100026.1|AI100026 34179 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148I10XP 3', mRNA sequence ACCTTTNGAAANNCTNGGGAGGAANTTCCCCCAAGGAAGAACATGCTTGTGGNTGAATGCCACCAGCAAT TGACANTTAAATATGGACCNTCCTGGGAAACANTATAATAGCTGGCCACTTTCTCTCCCTTTGAATTTTG TCATTTGCTTTTTACATATTGTTGTTTGCTTCGAAATAAAGCTTTTCGAGACATCAAATTTCAATGAGAT TGTTTTTGTTTAGATTTG >gi|3449764|gb|AI100025.1|AI100025 34178 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148H3XP 3', mRNA sequence TCAAACAAGCCTNCTTTANGTACAAGTGANTGGTGATACNCAAATGCACACCTTAGCTNCAGCTTCCACT AAGCAGAAACCCAATCTCTGAAGAGTTCGACTACACCTCTGGACCAACCATTGAGGTAGCGAAGAAAGTT GGGGAAGTGATAGCAAAATCTTGCTTGGAGAAAGGTATCACAAAGGTAGCCTTTGACCGTGGTGNTTACC CTTACCATGGACGTATTGAGGCTCTTGCTGCTGCAGCACGTGAACACGGTCTTCAGTTTTAACCGTCGTT TTCTTTCCTTGTTTCTTTCCGATGAACAGCAGTGTATGAATGTAGAGAACCCATTTTCCCCAATTGAAAT GTTGAGATTTTTCT >gi|3449763|gb|AI100024.1|AI100024 34177 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148G18XP 3', mRNA sequence GTATCCCCCTNGAAAATTTTGTNGGAGCNAATGANCTAATGGAACCATNAGGTATAGGCNCAAAGGACTT TGTGACANCCAGGGGGGNTATTATAGANCTTTTGGCACCCGGGAACTTTTTATCTGAAAGAGGTTGATNC CTTGTACCGGAGATTCTTTGGCAAGAAAGGTGAAGATGGATCTGTAGCCAATGGACACTGATTCTTGAAA GGGANCAANTCATAAAAAGTCCCCTGAAAATGTTATGTTTTACTTGCACCATTTTAATCGTTTTATAAGT TTGTTGTTACTTTGATTTAGGGACAAAGAAGGAATGTATTCTCTGTTTTTATTT >gi|3449762|gb|AI100023.1|AI100023 34176 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148E21XP 3', mRNA sequence CTNTCCAGGGCCTTANGAAGGNGTTTAGCCTNNAGCCANGGTCNCTNAAANGCCCTTTAAGNNAGGATTC CTNCTGCAATGGCACCCGTCGTNCCAGGACCTCTGANTTTAGGCCAGGTTANTCCAGCTTCAAGGTGATC AGAGGAAGANCGTATCTACGTTCCTTGTTCAGGCTGGGCTTGTGAAGAAGGATAACATNAAAACCCATGG TTTTTGAGCAATTCTAGAGATACTCCTTGTTCAGCTTGTATTTACGGGATCAGCCAGTCCCAAAAGGAAT TTATAAACCATTACTTAAATGTATTAATGCTTTTATTATGTATTGTGTCAAAAAAATAATCTAATAGTTT GCTTATGAGCGTATATATAAATGTATCAACTTTTGGTATGCATTTGTACTTGTAGTGTGAGTTTATCAAT AAAATTTGCTTTGTG >gi|3449761|gb|AI100022.1|AI100022 34175 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148E10XP 3', mRNA sequence CCAAGTTGATGGNTTAACTCCTGGGCAACGTCGTGAAGAGATGCAAAAGCATTGCAAGNGAAGACTGCAA AGAAAGCTGCTCAAGCCGCTGCTGCAGCTAGTTCCGGAGGAGGAGGAGGCAAAGGNAACNATAAGTGNGC NNAAATGNTCTATGCTTCGATGTTTGTAACTGTGCTTTTGAATATGAAAGTTTGGTGTTTGTGTTGAGAA TGTTTTGGCTTCGTTTGGTTTGAGTTTGTNTCAANACTTAGACTTGGTGATGTACTTTGATTAAACCAAT GATTACTCTTNCNATATCTATGATTACAAGTACATTTGTCC >gi|3449760|gb|AI100021.1|AI100021 34174 Lambda-PRL2 Arabidopsis thaliana cDNA clone 148D11XP 3', mRNA sequence TTTTTAGGCCGGTGNCCCNAANCCCCCCNGTGGGAGGGGGCCAANCNCCGCCCNTNGTTTNAAAATNCAT CCTTTTTCCGGTAACCACATTTAACCTCTTTTTATAAACCCGCGGGTTGTCCGGTGTGTGTTCTTGTGGT TNCCCATACACTTCAGCTCAAAGTGTGATTTGTATTTTGCGGTTTCGTGGTTGTTATTTTTATTGAGTTG GTTTTTAAGCCGTTAGGGCTTTCTAATGTAAGTTCGAGCTTAAACTGTTGGGAGATTATAAGCATTACTA CGGGAC >gi|3449759|gb|AI100020.1|AI100020 34173 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147K18XP 3', mRNA sequence TAACCTGAGAAAAAANNTNCCCATTGGNGGNNCCAAAATCCGTCTTCNGTTGAAAGCNAGNTCAGATGCA AATTTGCCGGAGTTTCATCAGATGGAAGATGCCGGTGATAAAGTGGTGATGAAGTGGAANCCCATGATGC TTGATGTTGCAAGCCCTGTGTCTTCCGGAGCAGCTACTGTTGTCTGCTAAAAGGATTTTGTAATTCTCTT CGAGGNNNNATATATATAATTGTTTNTCTTGTATTTTTTTCGGCTGATTGTATTTAAAAAGTTTCTTAAT GTTTGAGAAAAACAAGAATAAAGCCATTTTTTAAACTGTTAATTGTATTTTAATGTAAAAGACTTGTTTG ATTGAATAAAAGGAAAGAGAAGTTGG >gi|3449758|gb|AI100019.1|AI100019 34172 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147K13XP 3', mRNA sequence ACTANCGAANNACCANCCCCATAATGGCTCAAAGGNNTCGCAAGTNGAAAGTTCCTGGGAGAGTTAAANG CCACAAGCAGAAGCCCAAGAAGAAGCGTGAGCCCAAGNAAAAAACAGGNGTACACGCCAGAACAAGCAAG GAGCCAAAGCCCTGTCCCTAGGCAGAGCAGGAGCCCGACCCCAGTCCCTCGTGGAGCNCNAAATGGAGAC CGTTCTCCAAGCCAGTGATTTAACNCCATGTATCTCTCTACTCTTCAGTTTTTCAGTCTTGTTCTGTTTG ATCAGATATTTTGTTTGCCTCAGATTGATATTTCCCTACTTAGACAGATNTTTGTAGTGCTATTGGTATT TTGCTTTATGTTTGATCC >gi|3449757|gb|AI100018.1|AI100018 34171 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147H3XP 3', mRNA sequence CCAAGGGTACCCTGAGNTCGAAGTGGATGTCACTGGTGTGTNCTACTTTGTCAAGCCTGACGCATANCTA GTCTGCATGGCCTTAGCAAGTCTGTCATATGAAAATGAAGTCGGGATCATCGGAAATTATCAGCAGAAAA ACCAGAGAGTNATATATGATACCACACAAGAGAGGCTAGGAATTGTCGGAGAAAACTGCAGAGTCTGATG CCTACNCCATNACTTNATATCCATTTGTGTGCTCCCTTCATATCATGAAAGCCAATCATCTNTTTTGGCA AAGCCAATTTGANTTCTCCC >gi|3449756|gb|AI100017.1|AI100017 34170 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147F15XP 3', mRNA sequence CGTGGAAAGGATACCTTNGGTTGGGTCNCTTGGGGGTTAANTACGNATTCTGGCAACGNTACCACNGTCA GGATTCNGACTTNAGTTACGTTGGTTCTCAATAATGTCACTGCTGATAGAGACCTCAAAGCTTCTGGCTT ATGGTNCCAGTCGTTCTTGAGAGATACCACCAAGAACCAAGATATCCTCCGCTCAAGTCTGCCCTTTAAG AACGGGGATAGGAAGAGCCTCACATGAAAGACCAAAACCACTTTATGCCCATCGAGATCATCT >gi|3449755|gb|AI100016.1|AI100016 34169 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147E1XP 3', mRNA sequence AGGCACAGGAAAGGANCATGTAGCCCAGATGATNCGAAGACGCTGANCCATNTGNAAGGCGAGGCTCNTT AGGACGCCAAATGCCTTAAGTGAAAAGGCTCTNAGATCTCCGTAGAGGTTNACTCTGTTACNCGTGTTNT GATACCATCNAGAGAGTCCTTACCACCTTNTGAATCGNACTCGGGTTTAAGAACTAGTTGCTTCTCAATG TTATTTTGACAGAATATTGTTCTNAAATACATTACAACTTCTAGTTATTGTNTTAATTTTGTTTTTTATT ATCCAAACTCGTGTGTGTGACATTCTCTGTTTAAATTAGTTGCTTGGAAGATGCAAAGAATCTCGTTTAA TGGGGCATACTGAATTTCATTTTAAAGTTGT >gi|3449754|gb|AI100015.1|AI100015 34168 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147D12XP 3', mRNA sequence CCNATTGGGGTCCACTTTGGATTAATCGGAGAAGAAGNTCAGGAATTCCATACNCAGCTTGTCAATGGAT NNCAGTCTCTCACCGCAGAACTCTCCCATTACATCCCTGCTATCTTATCCGAACTTTAGTGTATCTTTGT CAGTTTTTGTTACGAGTTTTGTGCTTTTTTCTTCCACCATTTGGCTTGGCTATATGTTTATCATTTCTGT AATTCTTAGTTTAATGACAACAAGTGAGNNNNNANTTATAAATGACAATTGGTTGACTTCTAATTCAGAA GCTTATGTTAT >gi|3449753|gb|AI100014.1|AI100014 34167 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147C20XP 3', mRNA sequence CCTGCAAGAAGTTAGACTNGATATGGAAAAGNCAATGTTAATGGAGGANCNATNGCTATTGCCNACCCCC TGNGTCTTANAGNAGCTCGATGTGTTGCGACATTTTGCACGAGATGAAGCGGAGAGGAAAAAGATTGCCC GCTTTGGAGTAATCTCAATGTGCATAGGCACTGGAATGGGAGCTGCAGCTGTTTTTGAGAGGGGAGACTC TGTTGATAACTTGTCCAACGCTCGTGTGGCTAACGGGGATAGTCATTAGAACATCGAAGAGAGCTTGAAT AAGTAGAAGTAATGATGCATTGAGTCTNATAAATATGATGCTTTAGCTCTTTCACATTGCTGAACAATGA AAACTTTTGTCATTCTGAGTTTAAAATCAACTACTTTTCTCTG >gi|3449752|gb|AI100013.1|AI100013 34166 Lambda-PRL2 Arabidopsis thaliana cDNA clone 147C18XP 3', mRNA sequence CGGAAAAGATTTANGATNTCAGAGAAGAAATCAGCAGTTTCTTCAGGCAAGCTGATCGAGAACTGATGCT GGAGATGTNTCAAGAGGTTTNGTCTGTGTGGAAACCGGTCTNATATACACTTACACACATACTTTGAACA TTTCAGCTTGATGGTGTTTTGTTTATAGTCTTCTTGTTCTCTTCTGTGTGTGTAACTAACAACAACTCTG GATTTTGTTGTATCACTCTGTCTAATGTATAGTATTGAGTGG >gi|3449751|gb|AI100012.1|AI100012 34165 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146O7XP 3', mRNA sequence AACCAGGATAAGACCTNTCCCCNAGAAGCGGGACTNCTGAGGAAGAAGAACTNNGCNGCATTAACAGNCT GAGATGGCCCNCTAAGGTTANTCACCTCTCCGAGCAGAGACATGTATGCATTGATAGACACGAACAGACG ATGTATATAAGGATCTGAATCAGATTAATTCGGAGCGAAAAACTTTTATAATCCCCGTCGTTAATGTTAT CTGCAATTTGAGTGTTCTTCACATAATTTATCTTTTGTAATTTTTGTATCTTTTTATGACNCTTTTTCCT TTGGTTAATAATCACTTTACTCCTATGTTC >gi|3449750|gb|AI100011.1|AI100011 34164 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146N6XP 3', mRNA sequence CCGGTTACTACGATTGGACGGTNCTGGACAATGTGGAAGNTTCCCATTGTTCGGATGCACCGANTCCGNT CAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGTACCCGGGCGCCTTCATTAGGATCATCGGATTCG ACAACACCCGTCAAGTCCAATGCATCAGTTTCCCCNCNTACAAGCCCCCAAGCTTCANTGATGCTTAAAT CCTTTTNTGGAATATTCAATGTTGACTATCCGGAACCCNCATTTGTATGGTCAATGTAAATTTAAGTAAT TACTTTGCCCAAAGTGAAAAAACTGAAGGTTTGTTTTTNTATCGTTTCCTC >gi|3449749|gb|AI100010.1|AI100010 34163 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146N22XP 3', mRNA sequence ACCGAACACCATTGANAACGTGAAGGCTTAANNCCAAGGACACAAGGAAAGGCATTCCTCCGGNACCAGC AGCGTATCATCTNCGCTGGNAAAGCNAGCTTGAGGATGGACGTACTATGGCCGACTACAAACATCCAGAA GGAGTCTACTCTTCACTTGGTCCNCCGTCTCCGTGGTGGTTTCTAAACCTTGTCTCTCTCTCTTATGGTT ACTGAACCAAGTTCATGTATCGTTTCATNTAGTACTTTGGTGGTTTATGTTTTGGGGCCNTGTNCAGCCT CTG >gi|3449748|gb|AI100009.1|AI100009 34162 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146N14XP 3', mRNA sequence TGATGCTAATNATCCTGGTAAAGNAATGTGTTATATGTTTGGTCTGAACCACGAGACACCACTGTTCTTC CATGTCGACATATGTGTATGTGTAGCNGGATGTGCTAAGGTATTGAGGTTTCAGACAAATCGATGCCCCA TTTGCAGGCAACCTGTTGAAAGGCTTTTGGAGATAAAAGTTCACGGNNACANCGGAAGCGGGAATAACAC CGGACAGGGAGAAACAGTTGAACAAGACCCCCCTAAACACGGCCGAGTATGGACCNAAATGCCATCGAAA TATTAGTAGTATATGCATGTTCGATCCTTGTATGTTAACAACAAAATGTGTGATTGTCAATTCATAATAT AGAGATTACG >gi|3449747|gb|AI100008.1|AI100008 34161 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146M2XP 3', mRNA sequence CGGGATGGCGGAAGCGACGAANGCAAAGGAGTGGTTTTTCGGAAAAAGGCGGATTGATCTTTGCNATATT AAATGCTCGTTTTAGCAATGGTCCTTCACCGTCTCGGCTATATTGGAAACTAGAGGAAACAACGGTATCT TAAGGCTTAATCCTTCGTGAAGATAAAACCAGTCTTCGGTGGGTTCGTTTAGTTTGTAAAACTGTANCCT CGTTTTATCTTCTTTTTCTTTCCTCCNACTCTCAGCTTTTTGTTAGTCCCCTTGTGTCTAACCTTCTTTA CACTTTCTTCTGTNGTGAATTTTAAATTAGAG >gi|3449746|gb|AI100007.1|AI100007 34160 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146M15XP 3', mRNA sequence TTTTNGCCCANGGGCCCCNAAGGGTGTTTTTTGGNAGGNTTNCCCCAANTCNGTTNAACCCCTTGCCATT TCCAAAGGATTTGGCNCCTCCGGGAACCTTTTGGGTCCGCTTCAGTGGTGAACCAAGATCATCGTACCTA CGACCCCATCAGCNGTCAAAGTTAACTCTAATGGTGAAGTTCTTCAAACAATTCCTCTCAAAGATAAATT TGGAGACACTCTGCTCAGCGAAGTCAACGAATTCGAGGGCAATTTATATATAGGNACTCTCACCGGNCCA TTTGCTGGAATTCTTAAGCTCGAAAAGGGTTCTTGTCCTGCCNCTTAGATCTCTTATTTGAATGCATCCG ATGTGTTACAATAATATATATATATGAGCTTTTTATTTATTTCTG >gi|3449745|gb|AI100006.1|AI100006 34159 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146L14XP 3', mRNA sequence GTCNTCTTGGCCNTAATGCCTCCGAAACCAGGGGACTNCTACTGGGCTCGTGGTTNTCACAAGAGCNTTG ACTCAACAGCTCAACAAAGGATGAGATGGNTGCAGAGGAACTACATGATCTATAATTATTGTACGGATGC GAAGAGGTTCCCTCAAGGTCTTCCTAAAGCGTGCTTAGCTGCATAGAGAGAGTAAAGAGTTGAGAGAGGA ACAAGATTTTATTTTTCTTTGTGGTTATAAAATTCTCCCTCATTTTATTGTAGATCACGTGAATTTTATC CATTTCNTTTGTAGTATAC >gi|3449744|gb|AI100005.1|AI100005 34158 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146K2XP 3', mRNA sequence GGACAGTCCCAACTTTCACGGCGGAGTTACATTCGAATTCTCNCCGGAAGATTGTAGAGATGAGGAAGCC GTATCAGTCCGGTGACGGTGACGGTGATCGGAAAGATTGTGGATAAAAAGTGATTAGGATTAATTTTTAT TTTTTCGGNGAAACTTTTTTTTTTTTTTTTCGTTTAATTTCTCTTTATTTGTTTTTAAAGTCTGTTTTAG GGTTTTGCAGTTGGAATTTAGGTTTTTAATTT >gi|3449743|gb|AI100004.1|AI100004 34157 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146K20XP 3', mRNA sequence CCCGGGNCCCGGGAACCCNCCCGGATANTNCGGATGGCCGGTACTGGCCAATTTGGNAAGCTTCCNATTG TTCGGGATGCCACCGACTCCGCTCAAGTGTTGGAAGGAAGTTGGAAGAATGCAAGAAGGAGTACCCGGCG CCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCC CCCAAGCTTCACCGAAGCCCTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCTCATTTCATTT CCTATTGTCTGTGTTCTTTTTCTCTTCCCTGAGACAATTTCTATCGGATTGTCAAATGTCCGATTCCTGA ATATGTAATTTATATATCCGTGCGTCTTGATTTTTTCCGATGGTTAACTAGTTTG >gi|3449742|gb|AI100003.1|AI100003 34156 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146K10XP 3', mRNA sequence CCGGGAAATTGAACCCCCNAACCCCTGGGTTGNTTCGGCCTTGCCGAATGCATCTATGTGGTTTCTTCCC AAGAAGCTTNCCCTGTGATGCAATCGTGGAAGGACCAAACTTTGAGTTTGCAACCGAGACACATGAGGAA ACTTCTGTATGACAAAGAGAAGCTTCTTGAGAATGGAGATAGGTGGGAGACAGAGATTGCAGAGAATCTG AGGTCGGAGAGCCTCTACCGCTGAATATTGATCCGAAAATGCCTTTTGCCTAATTCTTAAGGAAACGTTT TCGTTTGCTTCTGTTACAAATAAAGATGCTTCAGCCTTTGCACTGTTACCCCTATCTGTATTTCTTGAGT TCATACCGATGGCAAAACCAAATTTGGCTTTGTTTCCGGTTTGAGCTGGACCGTGCGGTAAATGGATTAT GATATG >gi|3449741|gb|AI100002.1|AI100002 34155 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146J24XP 3', mRNA sequence ATCTGGGACAANTGTTGGAANGTTNCCATTTTTCGGGATTGCACNGACTCCGCTCAAGTGTTTGAAGGAA GTTGAAGAAATGCAAGAAGGNGTACCCGGGCGCCTTCATTAGGATCATCGGATCCGACANCACCCGTCAA GTCCAATGCATCAGCNTCATTGCCTACAAGCCCCCACAGCTTCACCGAAGCTTAATTTCTTTTCTAAAAC ATTCTTATGAATTATCTCTGCATGATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTACGCAGACAA TTTCTATCGGATTGTCAAATGTCTGATTTATGAATATGTNATTTATAT >gi|3449740|gb|AI100001.1|AI100001 34154 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146I19XP 3', mRNA sequence TTTNGAATNCCAAANGCTGGGATTNCATTGNGCGACAAGTTTGTGAAANTTGGTGTCATGGTACGACAAC GAATGGGGGTTACAGTTCTCGTGTCGTTGACCTTATCGTTCACATGTCAAAGGCCTAAGCTTACACCGGC GAGAGTTTGTGTGTGGCCNGAGTTCGTACTGTTCTGAATANAAAAAAGGAGAAAAGAAAACTCGAGTTGT TATGTTTTTTCACTGATTCCATGCCCCGTCATGAGAGTTTGTAGCTTTTGTCTTTTTGCTTTCCCTTAAT GTTTCCCTGCTTTATTTACTGAAACCATTGGTTTGGTTTTTTATGTT >gi|3449739|gb|AI100000.1|AI100000 34153 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146I15XP 3', mRNA sequence TTGTTNCCCNCCCAGTATTCCATTGAACCCTCGNCCGAANGNCATGAGGCTACTCTTCGCTCTGGCGATG AAAACGCGGTTTCCATGCCTGTAGCCGCGGCTGCAAACCGAGGCTTTTANGAAGGCGAGAAGCTTGGGAC TAGGAGATCTCGACTTCTCTGCTGTGATTGAAGCTGTGAAATTCTCCCGCGAATAGCAAACTGTTTCAAA ACATCCACTCATTTGGATAGGCTGAGTTACTGAAATCATTGTTATCTTCCCAAATAGAGATTTACTCATT TGGCCAAACACACATTTTAATCCTTCACCAAATAAAAAGTCTTAACCAC >gi|3449738|gb|AI099999.1|AI099999 34152 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146H10XP 3', mRNA sequence TTCCAAANAATNCTGGCTAATNGCTTTTGCCCNCTNGANTACCACCTTCCCNTCAAAANCAGGAGAAAGN TCAAANGAATACTTGAAACGATCNAAANAAAGTTGCTGTTGCTTCAAGTAGCTGCGGTGTCTGCTGAATG CAGGTGGTGGTGCCCCCAGCTGCTGCTAAAGGTAGAGGAGAAGGAAGANTCCGACGAAGAAGACTATGGA GGTGAATTTCGGTTTGTTCGATGAAGAGTAGATTTTGTCGGTTAAGATCTTACCTTTTTGTCGTGGATTA TAAGTGTTGCTTTGTTTTTAGTATGTTGGACCTCAATTTTCTTGGTTTTAGCCAATCCAGTTTTATGTTA CTACTGTCTTTTATTTTTTGG >gi|3449737|gb|AI099998.1|AI099998 34151 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146G18XP 3', mRNA sequence TTNGGGGGNGGAAATTGCCTTNGAATCTTTGGATCNCCCCAAACCATTTGCCCTTCAGTTCGGGTNCCCG GTNCCCCCGTGGCCAAAATGCAAGGCTCTGTTCATNTCTTGAAACACTACNNATNTCAAGAACACAGTGT CAAGAGTTTGATTCTTCTTTGGCNAAATCTCACAACTCTTGATTACAAGAAATGGAGAGAAGTGTGTTTG AATGCTATCTATACCGTATGTTTTGAATTTCNATTCATCAAATAAAATATCTTGTTATAACCTTTTGTNT CAGAACATGGTCCTCAAAGTTTTAAAACTAAAGGTTAAAAATATCCTCTTC >gi|3449736|gb|AI099997.1|AI099997 34150 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146D2XP 3', mRNA sequence GCCCCTCTGGGNAGCCCCATGGNTTTTCGGGGTTGGCCCCATNCATTGGNNCANTCTAGCAGCACTATAT CNCCAGATTGTCATCAGAGCGATTCCTTTCAAGAGCAAGAGTTAGAGACACACAGAAAGATTCCACGGTC CAGAATTTGTTCTTTAGTAGTTTCTTTGCTTATCTATCTAATGTAGCTTGTGTTTTGCAATGTAATGAGC CTTTCAAGAATATGTATTTGGGATTTCTAATCAGCTTTTGTCTATGTAAAAACTATGTGTTTCTTTTTTC TTCCTATACTCGTCTCAGATGCTTTATGGC >gi|3449735|gb|AI099996.1|AI099996 34149 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146C9XP 3', mRNA sequence TTGGGCCCNGTGANGGGAGATTCTTGGNACCGTGTATCNCTGTGGGGATGCACTNTAGATGGGAAAGNCC CNAAGGATCTTCNNCAGGAGATTCAAGAAGGTGAGATTGAGATTCCTGAGAATTAAGGAACAATGGAGTT TTTTTTCTTCTTATGGGAATTTGAAATGCTTCTGTTGTTATCTTTCTCGTTTTACCATATTTTGTTTTTG TTTGGGAACTTAGCTGCTATGATGTTTCACTTAGAATGACTCTCAAGTTTTGGATTCTTATTATTCTCTG TTTCAAAACCCCAATGGTTCTCTATCATCACTGTTTAATT >gi|3449734|gb|AI099995.1|AI099995 34148 Lambda-PRL2 Arabidopsis thaliana cDNA clone 146B15XP 3', mRNA sequence CCCCCGGGGCCCNCCGGGGGGNGGGTCCCCCGGAAANGGCCCCCTTTAGNCCCCCCCAACAGGTCCNGCG GAACAGTAAGTCCNCTAACGCAGCGGTTGGCGNGAGCCACACCGTCGTTGTTCCACCCGCATTGGTCACG ATCGCCGCCATAGCCGTCTCCGTGTCTCTCTGCTCTTAAAACCTTTCGTAATTACGCAGGCTGCCACTCC CTTTGTTTATTTTTAATTTAATTATCTTTTCAATTTTTATTTTTGTGGTTATGTGTTGTTGAGTTTGAAA ACATGGGATTAGTGAGTGAGGTTTTATTTAAATCGTTTGTTAATCACATTTTCATTATTGCTTTCAGTGT TGATCTGATAGTATCTTGTTGAG >gi|3449733|gb|AI099994.1|AI099994 34147 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145P10XP 3', mRNA sequence AAGCATATTGNCTATATGGCGTGTCCAGTTGTGCTAATGGGGTTCCATTGAAGGNTNCAGAATCGGAGTG GTCCTCTTGGGGAAGGGCTTGACCCGCTTTACCCGGGCGGGGCCTCGACCCGTTGAACTTAGCGGAGGAT CCAGAAGCGTTTTCAGAGTTGAAAGTGAAGGAGCTTAAAAACGGTCGTCTTGCTATGTTCTCAATGTTTG GATTCTTTGTCCAAGCCATAGTTACCGGTAAAGGTCCGATCGAAAATCTGTTCGATCACATTGCAGACCC TGTGGCTAACAATGCTTGGTTACGCCACCAACTTCGTCCCCGGAAAATAGAGTTTGATCGGATAATTTAT GTAAATTATATCTTTTAAACATTTATCAATGCATTAAAGTTATCCCTATATTTGATAC >gi|3449732|gb|AI099993.1|AI099993 34146 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145O5XP 3', mRNA sequence CAAGGAGNAGAAGGNTGCCAGGGAAGTCCCNGNGAGGATCNCCCAGCGGATGCCTCGTTGGCTTNGCCGT AATGTTGGTCCTGTGTGTGATGCCGGTGTCGTTTNGCCGTCATGAGTGTAATGCTCGCATGGTTTTATTT GTGATGAAAAGCTTTTTTTTTTTTGTGCTGATAAATTGTTATTTTTTATTACTCATGATTTTCTGCCATG TGGGTGATTTTGGGGATATATTTGTGTCTTGGTTTTCATACGATTTTGTGTTAATCAATCCATTTGTTTT TTATATTTTCGTTTATTTTTATTAATACAAATCATATTTTCCGTTTTCGTGCGAGTGAGAATTGTGTTTT TGTTAATATCTCGTTTATCTTTGCTT >gi|3449731|gb|AI099992.1|AI099992 34145 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145O4XP 3', mRNA sequence AGTTGGGGTATCCAAANACCTGGGCTNGGGACCCAGCTTGCCATNTATGGGGAAAACCAGCTTGNACCCA GGCGATTTTCTAGGACCACTGGTGGGTAGCAGCTCTAGCATTCGGGGAAGGATGCCACAACATCACCATG CTTTGGAGTCNCAGCTCGACACGGCTTAGAATGGGTGGCAACTTGATATGACTTGGGTACGTCGTTAAGT TCCTTCAAGCCATCGGTTTAGCAACTGATGTCAAGCTCCCATCGGAAGCTCAGAAACAAAGAATGGCATT CACCAGCGACTGATCTTAAAAAACTACATGGTTATGCCTAAAGTCAAAACTGTCGGTTCGATTGAAGCTA TGAAGGTTTTAAAAAAGGATTTTGTTCTGCTTTTTTGTGTTTACTTAAAGGTATATATCTGTGCAAGAGA TTGTATGTGACAAACTGATTATGAATAATATCTATAATTACATTCAAT >gi|3449730|gb|AI099991.1|AI099991 34144 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145O16XP 3', mRNA sequence CCTGGGGGGCCATCCCGGGGCCCCCCNTGCGCNCGTTTTTTGGTCCCGTGAAGCTGGGNAGGCCCTGGAC CAGGCCCGGGTCTCAGAAAGTGCTGGGCATCTCATATTCAACTATAAGCCCTACTTACTGTGGATACGCC GGGAGGGGTTACGACGAGGTTTACATTTTTACNCNACCAAGATCCCCGTTTCTAAGAACTTTACTCGTCG TCTTGTGTGTTTGTTTGTAACTCTTATTTACATTTAGGGAGCCGGATTGTCTTGCATGATTTCCCTTGTT GATTTTATCTCTTTGGAATTACATTTCNAAAGATACAAACTGTGTTTGATTCGTCTTTCTTGCAAATAAC ATTTNACTTTTGAG >gi|3449729|gb|AI099990.1|AI099990 34143 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145N10XP 3', mRNA sequence GTTTCGNTACAGCCATNGCCCCCAAAANCGGGNGTCTTGGAACAATNGCNCCCNATCGCAACCGGTTCCA TTGTTGGNGCCNAACATCTTAGCTGGGAGGAGCTTTCTCTGGGAGCCTCCCATGAATCCCCGCCGTGGCT TTCGGACCAGCGGTGGTGAGCTGGACATGGCCCAACCACTGGGTCTACTGGGCCGGACCTCTCGTCGGCG GTGGAATCGCTGGACTCATCTACGAAGTTTTCTTCATCAACACCACACACGAGCAGCTCCCAACCACAGA CTACTGAATTAATCTCTCTTTTTCTCTCTTGTGTAATTTTATTCGACTTTGAATTTGAATTTTAATGTCT TTTTAATTTCCGTTTGTGTAATTTCGAATCATCAAGGGGTTTATGATCGTTCGATCTTTTAGATGAATCC TTGTCCGTTGGTTTCAAGAGTGGCCATTGCAATTTCGACTATATAATGTGAATTATGTATCAATCTCATC TTAAGTTTTC >gi|3449728|gb|AI099989.1|AI099989 34142 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145F8XP 3', mRNA sequence GTTCTTAGNCCAAGNGGTATTGGNGGTGTCTGAACCNACCCCNTTNTTCTCAAAGTTAGCANCCGGTTTG TATCACNCCATTGTGGNCCCTCAACGTGGTCGCATTTTTGGGTTTGGCGATAACGAAAGAGCTCAGCTTG GTCACGACTCACTCCGTGGCTGCTTAGAACCTACCGAAATCTTTCTCCATTCTGGCCGTTCTCGTAGCCG GCTTTGTTGATCCAAGGTATAGATAAACAACCATGTTTGTATGAACCGGATTGAGATTCGATTTACCGGT TAGTGTATCTTGTATTGATTTGTATCTGTTTGATTTCTTCAAGTTGTGAGNGTNA >gi|3449727|gb|AI099988.1|AI099988 34141 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145E22XP 3', mRNA sequence CGTTCTTGTGCACNTCCAACCGGCCTTCAGATCCTAGGTNTGGGNCCGTCCCNTTCACCACCNATGNGCT TTNCTCACCCTTNGGACNCGGTTGTTGGCCCNCGGGGGCGGTTTAGGGAGCCCAATGGNCCAATGCCCTT TCGGTGCATCTTNCAAGGGNTCCCNCATAGATGGTTNCCANGCTTCTGTGGAANCCAAGTACTGTGCCCA CACAAGNCCGCATGTGGTGGNATCAGAAAGAGTTCCGTGCCCTTGACGCTGAACAATGGCGTCGTCTCAA ATGGGTTCGTATGAAGTGGNCCATCTACAACTACTGTACCGACCGGACTAGGTTCCCGGTTATGCCAGCT GAATGTAAAAGGGACAGAGACGCATAAGTTACTACTCTTGNGGGTTTTAATGAATTTATGCTATCATTAT TATTTGAATTATGCTTGTTCAAGAGATTGATATATGTATTGTTTGTTGGCCCATGATGTTTATGCTATAT TTGGGCCTAAAATTACATGTTATAATTCATATATGTATTGATTAGCTATGTATTTTCATATGTTATGATC TACTTACAAGTTTTATTCTTT >gi|3449726|gb|AI099987.1|AI099987 34140 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145C2XP 3', mRNA sequence TCTCCCNCCTTTTGGCTTTCCCGTTCNCTCTNCACAGGGATGCCCCGATGTCTCCNNTTCGGNGTCCNCC TCTGATAGTGAATNCGTCCTCGTCTTGACCACTTACTTGCAGCACACTCACCCTCGTTNCNTCACTNCGA TTCATCCAGAGTGGGACTGGCTCAGGGGAGTTTGGCTACCGTAGCCAGAGACTACGGAATCTTGAACAAG GTGTTCCACAACATTACAGACACACACGTGGCTCATCACCTGTTCTCGACAATGCCGCATTATAACGCAA TGGAAGCTACAAAGGCGATAAAGCCAATTCTGGGAGACTATTACCAGTTCGATGGAACACCGTGGTATGT AGCGATGTATAGGGAGGCAAAGGAGTGTATCTATGTAGAACCGGACAGGGAAGGTGACAAGAAAGGTGTG TACTGGTACAACAATAAGTTATGAGGATGATGGTGAAGAAATTGTCGACCTTTCTCTTGTCTGTTTGTCT TTTGTTAAAGAAGCTATGCTTCGTTTTAATAATCTTATTGTCCATTTTGTTGTGTTATGACATTTTGGCT GCTCATTATGTTATGTGGGAAGTTAGTGTTC >gi|3449725|gb|AI099986.1|AI099986 34139 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145C1XP 3', mRNA sequence CCAAATATTGGGTTTGNGCCTGGAGGCCNTAATATGCTTNGGNTCCAAACCTATTAGGAAACCGTCNCCC CCCTTGGGAATTGAAGCTGGCACAGCCTCGAACTCAAAGAAGAAGGTTGCAAGATCGTCGGGTTTCATGG AAAAGTAAGTGCGGTGCTTCATCAGTTTGGAGTCCATGTCCTTCCTGTCACCAACTGATCCTCNCATATA TATATATATATATATATATATATATATATATGTCTCTTCTATACCNCCAAGTTTGTCNCGTGTGATATCT TCATTAAGTTTTAAGTTTTCTAATTTTTCTTGTTCTGTTTATCTATGTTTTAAGTGTCTTTAAGTATGGT GTTTTGTGAAGTTGTTATGCCTGTAATATTATATGTGATTGGCTTTAATAAAAGTGGGTGATTATTATAC >gi|3449724|gb|AI099985.1|AI099985 34138 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145A20XP 3', mRNA sequence CCTTGGGNCCNGCAATAATCCGGTNGAACAACCGGGGCCCNCANCNGTGGCCTTNGGCCTTTGGGATCCC GGTCCCGCTGCCGNGACTTGCCNGACCAACCCCGGTTTCCTCCTAGNGCTTAGGGNAACCTTCAAACCTC AATACTGTCTTCTGCACTGGCCNCNTCAAGGTCGACTTNGGCAAACCGATGTGGTGAACCCNGATCTATG GAAGCTTCGTNCCGGTCTTAAAAGGNGGGGAAATTGNCATGGGGAATCTTGGTTGATCATTCGATAGTAG AAGGATTCGCACAAGGTGGAAGATCATGTATTACCTCAAGAGTATATCCCACAAAAGCTATCTATGGAGC TACAAAGCTCTTCTTGTTCAATAACGCCATTGATGCGACCGTTACGGCGTCGTTTACAGTCTGGCAAATG AACAATGCTTTTATTCATCCTTACTCTTCAGACGATCTCGGTGTTCCTTCCAGCACCTGATGAGTATTCT CATCCTTCTTGTTAGTCTTTTGATTGTTGTTAAATAATGGGTTTGATTTTATCTGTGTTTGATTCATCAT GTGAGTGAAGAGAAGAAAATAACATTTATTTTCTCCTTTTTTGAAAGAGTAAATTATTTTCTTCGT >gi|3449723|gb|AI099984.1|AI099984 34137 Lambda-PRL2 Arabidopsis thaliana cDNA clone 145A11XP 3', mRNA sequence GACTTNTTTGACCCTGACCCNTTCGACTTCCNAAGAGCTTAAGTGAGGCCCTGGGCCAAAAGCNCCCTTN GTGGNGAGGTGCAGGCCGGTTCTCAACATGCCNTGAGTTAAGGCCTCTACGGTTATCCCTTNGGGGATGG ATCCTGGGTTTAANCNTTTCCCAGCTGNCGTTGTTAANGCATTGNCCCACACTGGAGGTTGTGAATAAGA CCCTTGAAGCGTATTACGACGCATGGGACAAGTACATCGATGCTTGGGTCGTCATCAAAATCCAGGACCC AAGTTATGTATACCGGTGGCGTCTTCAGGCGGAAATCGCCATGAGGCAGGATGGCCAAGCTGGGATGTCG GATGAGGAGGTGAATGACTTTGTGTCGCGGTATTTGCCGGCGTATAAGGCCTATCTTCCAACTCTTTACG CGGAAGGGCCAAGCGGCTCAGACCCAGACCGTGTCCTTGCGATAGATATCGATGAAGAAAGGAACCCGAT ACTCGCAAACTAATGCGATGCTGTCTCCATTGCCTTTATAGTATATCATCATTGTATGTAAAGGAGAGTA ACATTACGTTCTTCTTCCTTCTATTTGACATTCTTTTTCCTACACTATACTTTCACATATATACATATTC TTTTCTTG >gi|3449722|gb|AI099983.1|AI099983 34136 Lambda-PRL2 Arabidopsis thaliana cDNA clone 144O23XP 3', mRNA sequence CNAAAATTGTTCTNAACCTCCAACAATGGGCNCCAATTTCCGGNAGAAATCACCCNCCCTTGGNGCTCCC AANGAGGATCCCNTATCTGACTCAAGACCTGTTTCAGTCTNTCAGAGTCATGCAANGGAGAACTCACGTC TGGCCTTTAACAGATCACAGGCGAGACGAAGAGAGAGCAAGACAGTGAGGTGGGTTACATTTGTTCACCA TTTCTTCTGGTGTNAAAATCTGTGTTAGNATTTATAGGAATCGCTTTAATGGTTTTGGCAATTTGTTATA GCATTTTGTTGACATTTTCTTCTGTGATTTGTAAATCTTAAATCTTTCTTCTCTTTGGGCAGTATAACAT AATCTGATTCGAAT >gi|3449721|gb|AI099982.1|AI099982 34135 Lambda-PRL2 Arabidopsis thaliana cDNA clone 144N22XP 3', mRNA sequence CTATCGCCCTTTGGGAACTGTCCCTCAGTCCGCCGGATCCNGGTNCCCANGTCGCCAACCCCTGGCGACA TCCCGTTCCTGGTGATGCCGNCCCTTAAGGTTCAATTCNTNGTCCGANCATTCNCNGTCCTAAGCCNTNC CCCNTCAACTCGTCCCCGGGAAAGAANCCCCGTCGCACAAGTTGTCCGCCATTACCCCTGGAAAACCCTA CGTCTTATCCTTCTCTGTCGGAGATGCTAGCAACCTGCGCCGGATCAATGATCGTCGAACTTTCGCCGGA AAAGACACGATCAAGGTCCCGTATGAATCGAAAGGGAAAGGAGGATTCAAGCGATCGTCATTGAGATTCG TCGCTGTCTCGAGTCGGACTAGAGTTATGTTCTACAGTACGTTTTACGCGATGAGAAACGACGATTTCTC GAGCTTATGTGGACCGGTGATCGACGACGTTAAGCTTCTCAGTGCTCGGAGGCCGTGAGCTTGCGGCGAC GAGTTGATTCACGGGACAATGAATGATGACAGTCACTGTGGGTTTCTCGCGTCTAGTGAGAAATTGGGCT TTTAGGCCCAGTGGCCCACTGTTTTTGTTGTTGTTTTAAAGCTTAATGTTATTTGACAAAG >gi|3449720|gb|AI099981.1|AI099981 34134 Lambda-PRL2 Arabidopsis thaliana cDNA clone 144N17XP 3', mRNA sequence CTTGGTAAGNTCCGCCAACCGGCNCCAANAATCCGGTTTACCGGTAAGCTCCGCGTNCCGGGTTACTTCC CGATAAACCGGATTTTGGTGGGGTTTAGGTTCTTTCCCNCATGTTCCAAGACCAATCCGGTTGCCTTCTT CTTCANGAGGATTCTGCTTTCACCAAACTCACTTTTCCCTTTATAAGGGAGTAATATCTTCACCGTCCCT TGGAAGGGCCCTCCAAGATAGGTATTAGGTGAAGCTTTCCTTTGAAGACTAGATTGAGAGATCTCTGAAT TTATTTCAAGGTGGTGGCATGGAATCTTCAGCTGATGGAATCCGGCGAATTATGTGGAAGAAGCTCTTGG TGTTGATTTGATTAAGCCCGACCGACGGAGCAGAGGTGGATCGTGGATCAGCCGGCAACGTCAGTTTCAA CATCTCTTCATCTCACGTTGGACACGTGTTGGCAACGTGGCACTTTTTTTGTCTTAGCCTTATCTTTAGA ATTGGGTGGGTTAAGCTGGGCTTTAAATTTTAATCAAAGTTGTAAATGGTGAGGGATTGGGCTTTTCATC AGCATCTGTAACACCCTTTATTGGGTTTTAATATCCAATATGAAATTTGGCCGAC >gi|3449719|gb|AI099980.1|AI099980 34133 Lambda-PRL2 Arabidopsis thaliana cDNA clone 144M9XP 3', mRNA sequence CCCGTCCCCGANCCAATGAGGGATCCAATGGGGCCTNTGGATGGACCAATGGATCCGTTACNNGGGCCCC ACCACTTCTCCCNCTGCTTGGTTTGCTTAAAATTAGGGGAAAACTTGGTTATGGTTGGTGCACCAGCAGA CCCGCTCGAGCTTCCTGTTTTTCCTCTCATCTTTGGGCGGAAGATGGTGGTGGGTAGTATGGTAGGAGGT ATAAAGGAGACGCAAGAGATGGTGGATTTGGCTGGAAAACACAACATCACGGCGGATATTGAGCTCATCT CTGCGGATTATGTCAACACCGCCATGGAACGGCTTGCAAAGGCTGACGTTAAGTACCGATTTGTGATTGA TGTTGCCAACACGATGAAGCCAACTCCTTAACTAGAAAGCTTAAGAATTGAATATCCCCAAAGCTTTTTT CATGTTTTTGCTTGTTTGTTTGATGTTGTTTGCTGGCGACTTTGTGTGTAGTATTACCACACTGCATGTA CTTTATCAGTTGAATAAACTTGAATATTGTATTTAATAAGCTATCTACATTAGATT >gi|3449718|gb|AI099979.1|AI099979 34132 Lambda-PRL2 Arabidopsis thaliana cDNA clone 144J4XP 3', mRNA sequence GAGCTCGCTTTGCCCTCGCTGTTATGCCCCCGAGGATGAGGTATGCTACCCGGCTGACAAATCGCCACTT TGGTGAAACTGCTGGTGTTACCATTGAGTCATACTGGCCCAATGCTATTCGCCCAAGATGGCTGAGAAAC GTAATGTCACTGATCTCATCATGAACGTTGGTGCTGGTGGTGGAGGTGGTGCGCCTGTTGCAGCTGCTGC TCCTGCTGCTGGCGGTGGTGCTGCCGCTGCTGCTCCTGCTGCCGAGGAGAAGAAGAAGGACGAACCAGCA GAAGAGAGTGATGGAGATTTGGGTTTTGGCTTGTTCGATTAAGTGCATTTTACTTGTTTTTTCTTCTTCG ATTTGAGACTATTTTTTTTTCGTATCGAGCTATTACTTGTTTTGGTCTGGCTGAAGAACTATAATTAGTT GTTTTCTGAACCATATGTTGTATGACACAAGTTTTCAAGCAAACCCATCGGCTCCTTCTTTCCTTAG >gi|3449717|gb|AI099978.1|AI099978 34131 Lambda-PRL2 Arabidopsis thaliana cDNA clone 144I9XP 3', mRNA sequence GCCCCCAAGGTTTGGACCCCCAGTGTAACCCCTTTTTTTCTAGGGCGGGTNCNCTGGGGGTCTCCGGTTC NGGCGTATGAAAAGATCCGTGTTATGCCCCCTNTTAGAGNTGAAAGGCATTNCACTTCTTGAGAGTGGTT TGAAAGTGAGGGATTNCGACTNTTGAGGAGGAACTTCAGTGACACTGGCTGCTTTGGATCCGNTATCCCA GGAGCACATTGATCTTGGAATCAAGTACGANCCTTCTACCGGTATCTNCGGTATGGATTTCTACGTTGTT CTTGAACGTCCAGGATACCGTNTGGCCCGTCGCCGTAGATGCAAGACTCGCGTAGGTATCCAACATAGAN TTACCAAGGATGATGCCATGAAGTGGTTCCAAGTTAAGTATGAAGGAGTTATCCTCAACAAGTCTCAGAA CATCACTGGTTGAAGAGTTTTTTTTCATTTTGTTTTGTTTCAAGTTCTTATATTTAAGATTCTGGATAGT AAGGATTTCGTGTTGTGGTAACCTTTTTGACTTAAGTTGGTTAAGAATCTT >gi|3449716|gb|AI099977.1|AI099977 34130 Lambda-PRL2 Arabidopsis thaliana cDNA clone 144I14XP 3', mRNA sequence AAACCNTTTTGCCTGGNCGGGAAACCACCCATACANCNTCCCTNGGNTTGGNACCCGGGNCTAATAATNT CAGGGGCCNACCNNTGNCCATGGTTGACATGCTTCTGGGCAAGCATCCAGAAGCTTTGGGCTTGAGGAAC CTGATGGNGGAACCCCTNTGGAGAAGGGGGATGGATATCCCTCCCNTTCAGGGATTATCCAGGAAAATCT CCAGCTCGTAATGGCACTAAAGGTGGCTGCCAAGGCCTACGGAACTGGGGACTGGCCCACGAGGTGCCTC AGCCCAAGGACTGGAGCAGTGTGCTGAGAGCAGCATGTACAGCCCNTCGTATCGAAGTACCGCTGAGGAT AAGCTTAATCTAATTTGTTATGTCTCATACGACTCTTATGGCCATTTCTCTCCTCTCCTATTCGTTCACC TTCCACTTCCCGTGAGATTTTTGTTTGTTTGTTTGTCAGCATCTTTAAAATCTTGTGTTGTAATCACTGT TTCCCTTGTTGTTTCTTTTTAAGTCCGTAATAATCCTCCTATGGAAATTGTTTCTCTGGGCC >gi|3449715|gb|AI099976.1|AI099976 34129 Lambda-PRL2 Arabidopsis thaliana cDNA clone 144H20XP 3', mRNA sequence AAGGTNGGCTAGCCTTGATNGGGTNTNGGGATTGGCCCCCGAGGGGGTTTTAAGGGNGTTNGGGGTTCCA GNGNTTCCCCAGTCCCCATGGCCTGCCCCGNTGGTTGTTGTTAGATTCCTGATGATAAGGNTGGGGAAGA TGGGAAATCCCGGCGACCATGGTGGGGAGAATCTGATGGACCAGTGATAACTTCCATACCAGTGCCCTGA GGTGGCTGAAGAAGAGGGAGATAAGGATGAGTACCATGATGCTTCGGATAAGCCAGTAGCCAGCAAGGCT TTCATGTTGCCAGAAGGAGACCTCCCTAAGGAGACTTAGAAAGAAAAGAAAGCGTTCCTTTGCCCTTGGT TTGTGTTCTTGAGTGTGCTTAATTGTGTTGTTTTTGGGGTTTGGGGTATTCTAGATCTCTTTTGTAAGTA TTCTCTTGTTTCTTGGTTTTGTTTTAAACTCTATGGAATTTGGGATGAGTGGATTCGATGTCTTTTGTTT GTCTTTGAAAAAGCAGTGAAAAGAATTTCAGTGGTCTTGTATATCTCTGCAGTTGAATAGTTGGTACAAA ATAACATCTTTGACGGTTCCAAATAATATATCTTGTCAGTAATGACCATTAAAT >gi|3449714|gb|AI099975.1|AI099975 34128 Lambda-PRL2 Arabidopsis thaliana cDNA clone 144H18XP 3', mRNA sequence CAAAGTCCTTCCAGGTNTTTGGAAGGCTGGANTCNTTNTGAGCCNGGGAAGGAGATGGGATTNCCNAGNG NGGGGGAGGTTGAGTTTAGCATTAAGGAATTGTTGGAAGGAGAGGGANCAAGGGNTGGAGGAAGACGTGA AGAAATGGAGAGACTTGGCTGTCAAGTCCACTCAATGAAGGAGGTTCTACGGATACTAACATTGATACAT TTGTATCAAGGGTTCAGAGCAAATAGGTNACTCACATACAGTAGCAAAGGTCCTTCTATAATATCTTGTT TTGTACGTCTTTCATTCAGCATAATCTTTTGTTGACTTTTCTTATGTTGTATGTTCAAATCCCCATATTG CTTCTTGTTGTATGTTCAAATCCCCATATTGCTTCTTGTTGACAATAATAATAATAAAAACAATGCAACT TTACCACC >gi|3449713|gb|AI099974.1|AI099974 34127 Lambda-PRL2 Arabidopsis thaliana cDNA clone 144D5XP 3', mRNA sequence CCAAGGGTGGAAGGATTAAGTTCCNGAAGGGTTTTTTACCGNTGNTGAAACCCGGGACCCNGTTTGGGGG AAAAGCTTCGNGGCCATTACCCGGGAGGACCGGTTTNACAGTATCCAGCCNCAACTGGATGCCAGGATGC GTCGTTGCCAGGTCAATGGTGATCCAAGATGAGAGAGGCTTAATCTGTGTCCACTCNCCAGTCTGGAAGA TTGAATCAAAGGGATGCAAATCTTTCTTAATTTCTTAATTTTTATCTTCTTGGGTTGCTTTTTTTTTATG NCACCACGATTAAAGCTTTTTAGGCATATAAAGTTGTAAGAGTTGTGTGTTTGATATCCTGGCTAATGAG CGAGCTGAGTATGGGGATCAAGAGAGAAAAACCGTGTTGGCCTTTGGCTGTGTGTAGATATTTTGTATAA TCTTGTGTTGATAAAAGATAATATCATC >gi|3449712|gb|AI099973.1|AI099973 34126 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143P20XP 3', mRNA sequence TAATGGTGACCCGTGGNCGATCCNTAGNGACCNAGATCTTTGGACCNGACCCGGAGNGGTTTACCCCTGA GAGTTCACCGGTGGAGAAGGNGAAAAAGATGNTGTCCGTATGCTGATAGCGTTTGGAAGCGGACGGAGAA TATGTCCCGGTGTTGGACTAGCGCACAAGATTGTGACATTAGCGTTAGGATCGTTAATTCAATGCTTTGA TTGGAAAAAGGTGAACGAAAAAGAGATTGATATGAGTGAGGGTCCGGGGATGGCTATGCGTATGATGGTG CCGTTACGAGCCTTGTGTAAGACTCGACCCATAATGAATAAGCTCCCGGCCTACACGAAAGTTTAGTTAT GTTTTTGTATTTTTCAATGGAAAAATTGTTACATTATGTTGTGTAACCAAGACTACGAGTGTAATGCGCG AATATATTGAAATAAAATGCTATATTTAGC >gi|3449711|gb|AI099972.1|AI099972 34125 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143N21XP 3', mRNA sequence ACGTTACGCCCCGGGCTTACCAACCGNGNTTTTGCCCCCCGNAACGTTCTCCCCGGTGGATTGGTCCGAT CTGGAAAGCTTCCCGGAAAGGATTGGGGAAACCAATATGNTGCAAAGCTTCTCGCCAACATGGACGTAAG TCCAGCCATTGNGTACCGTAATCTACTTTATGGTCGGCAACATATCCTTAATGGGCCAGGCTTTAGGTCT ATTTGAAAAATATAGCCCCATCAACTTTATTTGATTTCTTTTACATGTATGTAGAAATGGAGATTCCACA CCAAGCAGGGATAGGACATTTCTATCACATTTTCTATGAAGGATGTCTCACTGATCACGAAGTCGGAGAA GACGAAGAAGCTTCTAGTCTTTATCCTGACGTCAAGTACAAACGCATGGATGATTACTTAAGAATGTTCC TCTGATTTGACCAAGTCTTATCTATACTAAATACACATATCAAAAGTTTGATGTTTTATATTCATTCATG TTCTGCTATATATGCAAATTTAAAAATATATTCTTCATGC >gi|3449710|gb|AI099971.1|AI099971 34124 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143N14XP 3', mRNA sequence TTCCCTGGCCATCGGGGTTCTCTCCCTNTTAAAACNGTTCCTTTCCGGAGTTTCCCCACGGNGGAAGAAG TTGGATTTCCAATCATCCAAGTGTCTTGGTACGGGAGGGGAAAAGCTTTGTCGATGTATCTTGGCCTTAA TGTGAATGAGATATTCAGCCCATATGAGAAGATTTATGTTCGAGCCAAGCTTCGAGCTCTTAACCAACTC AATCTCAGTAACATCGAAAGGGAACTCGATATTTGGTACAATGGTCCGGGATATGGAGAATATAGCTGGG GTTTCCCTGAGTTTATCTATTTCCCTTATCTCACAGATTCATCAAAGGGTTTCGTTAAGAACGATGTGTT GATGGTTCAAGTTGAAATGGAGGCCATTTCTTCAACCAAGTACTTCCCGAGTTAGATTTTCTCTAAGCAA AGAACTTGTACCTACCTCCATGTGTTTGATTTGTTATCAAATACTAATAAGAATTTGATTATGCATTTC >gi|3449709|gb|AI099970.1|AI099970 34123 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143L23XP 3', mRNA sequence TGGAAGNTGCCCCCCAATTGGAAAGAAGAANTTTGGGCCTTTTCTTCCNCCCTGGCCTTTAGTNCCNTCG GAATTGGCTAAGGAAGTTGACTCCNTTCTCNGCAACAAATGGNTCCCTTGTGTTGAATTCGAGTTAGGGC NCGGATTTGTGTCCCGTGAGCCCGGAAACACTCCCGGATACTACGATGGACCGGTACTGGACAATTGTGG AAGCTTCCCATTGTTCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAG TACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTG CCTACAAGCCCCCAAGCTTCACCGAAGCTTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCTC ATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGATTGTCAAATGTCTG ATTTATGAATATGTAATTTATAT >gi|3449708|gb|AI099969.1|AI099969 34122 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143K8XP 3', mRNA sequence GTCACTAGCAAACCTATTGACATATCCCATTTGTGAGAGAAGGACTTGTGAAGGGAACACTTGCTTTGAA GGGAGGCTACTTATGCTTCGTCAAGGGTGCTTTTGAGCTTTGGGGACTTGAATTTGGCCTCTCCGAAACT AGCTCTGTATGAACCAATCCATCATCATCATCATCATCATGACCATCCATCATCATCATCATTATTATCA TCGTATATAATATATATCTACCCCATATGTAATTTGTAATGTGCCTTTGACTGTGATGAGTTATCTCTCC CTCTCTACCAACTTTCTTCATATATATAAAACAAAAAGGAAAAGC >gi|3449707|gb|AI099968.1|AI099968 34121 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143K7XP 3', mRNA sequence GGGCCAANGTCACGNAACACGGCTTTCAACAGNTTGGGGNCTTGGGGNCTNCTTTTGAGGGNATCCATTG CTTNGGAACNCTTAACCCTTCTTCTGGTTTCAAACCCTCAAAATCCTCTGTAACCCTCTGTTGAAGCTTT TGAAGCTGCAATTCGCATTGCAGACATTGTTGTTCCACGCAAAACGGTTATTCTTCGATGACAGTATTCG TAACATCGCTAGTGCTAAAGCAACAGGGCTAAAAACCGTGTTTGTGGGGGAATCAGTGCTAGTTCCAGGT GCTGACTATGCACTAAGCAGCATTCATAACATAAAGGAAGCAATACCTGATTTATGGGAAGACAACAAAG ATGAGAAGCTCGAGCCAATTGTTCAGCAAGCCGCGGTTGCAACCATGGTCAATGCTTAGAGAGACATTCT AATAAGAATCCCACATCGATTAAAAGAACTTATAACTCATGTATCCGAAATATATAATAAATAAAAGACC NGAATTTG >gi|3449706|gb|AI099967.1|AI099967 34120 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143H16XP 3', mRNA sequence CCGTTNTTTTTNAAGNCCGGGGACCATCCAGCCTTNGAACCNTTGCTGNGCCTTGGAAGGTTCGAGGGTT TTCCNCAAACCGNTCTTCTGNGCCCGNGTTCATCAGACCCTNGATTATATGTTCTCGTTCGTTAAAATGG TCGAAGATGATTTGGTTGGGGAAGTCATAGCAGAGGAGAATAATGCGAGTTCTAAGAAACGGAAGAGAGA AAATCATTCTAAAGGGACCAGAGATAGACGCAGGTGTAAACCATTGTCCAGACGAAAACAGAGAAGCAAT GTCAAACGAAGAAGATAATATCAAGGAAAATCAAGAACTCAAAGCAAAATGATAAGATGATAATTGGTCC GGATTCTTGAAAATTGCTTTCACTGTGACTCTAGTTTGTGTTTGGTCATCGTTGATGCCCTTAATGAACC TTGGATAGTATTTTGCCAATTTAAAGGTT >gi|3449705|gb|AI099966.1|AI099966 34119 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143G1XP 3', mRNA sequence CCCGATCAANAAATGCTTTNCCGGAGTCTNTANTGGGTGCTCNTCTCTTCACTGNTGGACTCANTCTCNC NGAGAAATGACTGCGGGTTTGCANAANCCAGCAGCAGTACAGAGACATCTACAGAGATCTCTGGTGAGGA ACATGAAGATGACTGGCANTTACTTTGAACACTTCTCCTAGCCATTCTTTTCATTGTGTGACTTTGTTCA ATTATCAAAATNCCATTCTTTTTACATCGATACTAAGATTTGATGTTGTATAAATAAAGAAAACCCCAGA TTAAAGTATCACCCACTCTCACTTGATTTATGTATTAAGTATTAACT >gi|3449704|gb|AI099965.1|AI099965 34118 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143E5XP 3', mRNA sequence GAACGGTTGTGNTANCGTTGAANGAGGTTCCCCCACTGGGTCTTGCCAGAAATTTGCNNCGTTTTAGAAG GGGGCTTTCGNACTGGNTGCCNCCGTCGAGAGGATTGCAGGAGCTGATGTCCCAATGCCGTATGCAGCTA ACCTAGAGAGGATTGGCTCTTCCTCAGATAGAGGACATCGTTCGTGCATCAAAGAGAGCTTGTTACAGAT CGAAATAAAATCGTCAACATCAACACATTTCTTCTTTGATCTTTAAAGGGAAAGGAAAATAAGAAAAAAG GAGAAAAATGATCTCTCTGTCTCTCACTTTTGCTATAAGAAACCACCATTCCTCGTGATTTATTTCATCT TTTGCTATTATTCTTTACTGCAGCGGTTTTCGTTTTTCTTTTTGTCCCTTCCCAAATTGATAATTCTAAT CTTTGGGGTTAATTGATAAAAATTGATCG >gi|3449703|gb|AI099964.1|AI099964 34117 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143B19XP 3', mRNA sequence CCAACTGGGNGGATTATGGGCCCGTTNACAATACTCGGGNGGGGGATCNCGCATTTCNGGGGAGAGCCCC TTTTACCTANCCCGACTTNGCCCTTAACCTAACCNCCGATNGCTCCCGCGATCNCCCATGGTTGGTACGT TAATTACGTTGAGATCACGACGGCTGGTGTTCACGCACAGTGCTCGACGCAGGATTTTGAGATTGAGCAA TGGCTCGCTACTGATACTTCTCCTTATGAGCTCACCGCCGTACGGAACAATTGTCCGGTCAAGCTTAGGG ATAGTGTTAGTCGGGTCGGGTCTGAGATTCGGAAAAAGCTTTCTTGGGTCGTTTAAGTGATGTGTTGTGA TTCGTGAGACTTGTCTGTATTTGTATTCTCGTTGTTCTTGTGAGTGTAATGTGGCGTTAATGAAATATGA TTCAATAAAATAAAACCTTTTTNGTT >gi|3449702|gb|AI099963.1|AI099963 34116 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142M7XP 3', mRNA sequence CTGGTTCCATCGGAACCATTTGGCAAGGGTCTAGAATCTGNAAGNGCTTNTTNTCCAGCCCGGGTTCCAA GTTGGNGTTNGATCTTNCCCGGGNAATCGAGTGGTCTGAAACTGGNTTACTCTGCACCAAATGCTATGCC AGAATCAAGGCCTGCGATGNAACAAGTGGTGCAATACCTTAACCAAGACTTACCCTTACCGATTTTCTCG CCGTCTACTCCAGGTATCGGGGCTTTTATGCCCAGTTTCTATGGAAGCATTATCTGCCATTGGGGTCTCC AGTGTAAGGAACTCATCAGTTTCTATGTTTGTTACTCACACAATCTTGGACGGGCATGGAAGATAAGATC TAAGAAATTCTATACTCTATACTCTTTTACTCTCTGCATCTAAATCTGTTTAGCTACGTAAATGTTTTAA CTTAATGTATTGACTATGTTGTTGGTTGATGTTGTACTCAAACTTCTTTAGGTATCAATTGACAAATAAA ACAGTTCTTCT >gi|3449701|gb|AI099962.1|AI099962 34115 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142L7XP 3', mRNA sequence TTCCCATGGCTTNCAATTTCCCANGGTTCCATTAAGGCTTCANAANGGNGTGGCCCNCCGGAAAGGCTTG CCCCGTTTATCCCCGAGTGCTTCGACCCCATGAACTTGCTGAGGATCCCAGAGCTTCTCTGAGCTGAAGT GAAGAGCTCAAGAACGGTCGTCTTGCCCATGTTCTCTATGTTTGGATTCTTTGTCCAAGCCATTGTTACT GGTAAAGGTCCCATTGAGAACTTATTTGATCATTTGGCTGATCCTGTGGCTAACAACGCCTGGTCTTACG CTACTAACTTTGTCCCCGGAAAGTAATTATCTTATGTATTTGCTTCATAATCTCTCTGCTTTGTAAACTC GTGATTGTGTAATATTGACGTTTGATGTGAATTTGGCACTTAATGATGTTTCTTGGGACTT >gi|3449700|gb|AI099961.1|AI099961 34114 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142L21XP 3', mRNA sequence CCCTGGCCCCTTTTNGGGAAAGGTTCCAGNAGNCTTNTCCCAACGNCCCAGNTTACTGCATGGGCCGTTT TTCCCCGGTGGTGGGATGGNTTTAACTACAAGTATGTGCCACTGCACTTCCGGGTCATCTTGCACAGCCT GGTCGCATTCTTTTGGGGAATTTTCCTAACCCTGCGAGCGAGGTCAATGACACTAGCTTTGGCAAAGGCT AAGTGATTAGGAAACACATGGATCGTGACAGAGAACTCAAGCCTTGGGACTCATTATGATCACTTAGTAC TCTGTAAGTTAAAGCAAATCAAACAGCTCTGAAACCAAATAAAAATCTGTATTAAGATGATACCATTCTA GGATAGCAATATGTTTTAAGTTATTACAAACACATTCAC >gi|3449699|gb|AI099960.1|AI099960 34113 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142K12XP 3', mRNA sequence TCCCCNCGCCGTGGGGAATCNTAGGATGACTNCCATGGTCCNTGGTGGTTGAACNTTTGCANCCAGGGTC CACNCAAAGTTCCACCACACTTCCGTTGGTGGAGGTCATGTCAAGACCGCGAGTTTCAAGTTCAAGCGGT TGAGGCAAGAACTAGAATTACTTTCTTCAGTGGTTTTTACCATACCAAGAAGACTGATACTGTATCTTTA TGTGGTCCTGTCATTGACGAGATTGTGGTTTCTCATGTCGCTTAGATTAAGTTTTCTCTTTATGACAACT GCACTTGTGTTCTTAGACTGGTCATGGACTTGGTGCCTTGCTTTGTATGTCTTGGCTCCTTTTGGAATTG AGTTATTGTCATCAAGTTAAAATGAATGATATATTATTGT >gi|3449698|gb|AI099959.1|AI099959 34112 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142I5XP 3', mRNA sequence TCGGGTCCTGGCTGGAGAAAGGAANGNCCTTTTGATGCCCGGTTTGCAACTCAAGTACTTTGAGCTTGGA AGGTGGTTGGTCCTGGGTGGGTCCTCCGGATGGTCACGGTGACGAAGACGATGAGCACCACCACTGATTC CGGCCTCTCCNTTGCCGCAAATTTTTCTTTTTATATTTGCACATTTGCATATCTTTAAAAATTTTATGAA TGGNATAAAACAAAATATCTACCGTTTTGGTGAAACACAGTTGAAAATGTTTTTTGATCTTTTTTGAACA AGACTCGGCATCNGAGTTTCCCAAGTGCCAAAACTCTTATGACCGTTGTTCCTATTTTTGTAACACTCTT GAATCAGAATCAGAATCATTCTTGCCTTTTGNTNNTT >gi|3449697|gb|AI099958.1|AI099958 34111 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142H19XP 3', mRNA sequence CTTACTTTNTTAACCCAAGCGGTCAGGTCCGATCCCCTTTTGGGNTAAAGCNCTTCCCNNGNGGGGGNTA ATTCCCTTTCGCCCCTGGTCCAAGGTTTTTAGGGGTTNCCAATTTGGTGGCCCCCCAGTATGGNCCCTTC CAATTAACCAATTATCTTTCCCCAAGTTGCTGGGAATTATAGCAACTAGTTAAAATGGTTAATTGATGTT TGTCCTTTTTTACCCGTGAGCAAAAACAAAATTTCATTGTTAGGATAAGTTTTCCGGCGATGATCAATTG ACCGGAGTTGAGCTCTTTGTGCGATGGAGGTTGGTGGGATAACACGTGTCCTCATACGTATCGTTAGACA CGTCCTTTGAAGCATATCTTCTTCTTTGGTTTTTTGCTTGGGCTTCTTTGTAAGCTTTTGTTGTAATTGG ACTGGCTTGTTGGGCTTGTAAAAGTTTATCAATAATAAAACAGTTGAGAC >gi|3449696|gb|AI099957.1|AI099957 34110 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142G24XP 3', mRNA sequence CCCCCCCCTNGGCACCGGGTTNACCCCCGTGTGCNTTTTCGCCGNAATGCTTNTGTGCCCCAAGGGCTCT GATCGTCATCGGTCGTTGATTTCGAAGGTGGGATGGAGGAAGAGATCTCNGCTGTTAGATCTAGATCTTN ATTGCCTCCTCCATCGGAACAGGCCTGAGCTTTTAACGGTGTCGTTTCAATTCGAAGCGCATGCGTTTCT TCTTCTTTTTGAGCTGTGAAAATTCGTTTTCTCATAGTTTTTCCTCTCTCTCTCTCTCAGTCTAAATTTA TTACCAGTTTTTAGAAAGAAAAAACAGATTAAATCTGAGAGAGAAAAATATAATTTTAGCTGACATGGAT CGTTATGTACATATTATTACATAACCGGAGATCTGAACTG >gi|3449695|gb|AI099956.1|AI099956 34109 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142G17XP 3', mRNA sequence GATCANGAATTTNCNGANTNCTTAGNTNTCCTTTTACTAAGGANGAAGAAGAGGANCGATCGGTGGATTG GGATTATCGATCTTTGTTCTCTACGTAATCTGAGCAGTTTGGAGATCAATAAGACCGGAAAATTGAATTC TGGTAGAGAAAACAAAATGTTTTTCCGTAAAGGAGAAGTTGGTGATTGGAAGAACTATTTGACTCCTGAA ATGGAGAACAAAATCGACATGATCATTCAAGAGAAACTTCAAAACTCTGGTTTGAAATTCTGAGTTTGTG CATTGTAATAATAAGACTACCTCTTATGCTGTTGTTCTATCCCTTTTGATGTACAATGATTACCCATAAT GGTCTTTGTTTTCGTTCCCC >gi|3449694|gb|AI099955.1|AI099955 34108 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142G13XP 3', mRNA sequence CTTGNCGGAANGCACTTTTCCCGTTTTTCCGCNCCCACTATNCCGGGATTTGANCAACCTGGCGCAATGT GGGCCTTGATGNGAGCTTAATGTGCTCATCCCAGTTCTAAAGCCCGCCGGAAAAGAANTCGCCTTTTCTG TGACCCCCGTTATCCCAGTGACCACCATGCTTCAAATTAACAATTCTACAAAAGTTGTATACTGGCAAGA GGATCTAGAGACGGAAACTGCTCAATTGGGACCTTAATGGTACTGATAATAGAGCATTAGACATGTAGCT GTTGACAGTGATGGCATCGAGCAGAAGGAACAAGTCAAGTCTGTACTGTGATTTTAGCATCTCTCACATC TATGTTTGTCTAAAATGTGTGTGTGTTTTTAGTCTTCTCTCTGAATAATATTAGATTCTCATTTGTACTC TCTATTTATTTAGGAGAACCCAAATTCAAAACTTTTTTTAGTCTC >gi|3449693|gb|AI099954.1|AI099954 34107 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142D9XP 3', mRNA sequence TCGNCTGTTCGGTACNATCGGGTNTCAACCATGNCTTGTNTCAACCATGTTACCGNCNTGGTGGATTCNA AGAAGTTTGGGGTTCTTGCAAAACTGGCAAAGACAGTNNCACAATGGAGGACNATACTGACTCAATTGAA GAAGGAGATGGCTGCATCGCATAACCGGAAGCTTGTTCAACCTCCCGAAGGAACTTTCTTCTAATACTCT CAAAGCCTACCTTTGAGGGGCTTCTCCATTGTTGGTCTTCACNCTTTTCTTTCGTACCTTAAAGTAAAAA CAATGGTGTCTGTCGATGAATGATGATGTTCGATTGATCATCTGGAGTCCCAATCCTTGTGTGCAAATAT ATCTAGACAACCCTGTCCCACGACTTCATCTTCTCAGTTTAGATATAATATGGGAAACAACCTTNTAGAA TC >gi|3449692|gb|AI099953.1|AI099953 34106 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142D4XP 3', mRNA sequence AGCGTTTGACGGCCCAGCCATCNATTGCGCGGTTCGACCGTTCGATCATGTCGCAACGNGAATTCTGCCT TCCCGATTNGGTCCCGNAGTCNCACCNCCNCGGTTCTNTGAATCCCCCGAGATTTTAGAGGTTGNCGGTT ATGGTGTTTTATTGATAGCGAGAGACCAGAGTCAGCCTCATTGGGAAGTTGAAGACGATTCGATGAAATG GAAGGTAATTATGGATACGATTCGGCTTCCGGTGACGACGATGACTTCGGTTTTTGCTGGAAGTTTGAGT GGCCAAGCGGTGGCAATGATTGGCGGTGGTGGTGAAGAAAGTGGAACGATGATGGTGAAGACNNCGGCGG AGAAGAATGGCGGGAAGTGGAGCCACGTCAACACTCCCTCTGGTTTTTCGAGTCTTCCTTTCTCGTGTTC CCCAATCTACGTTTGAAGAATCTCTGTTGTAGAACACNTTGACTTAAGTCAACGTTAATAGTTAATACTT AATACATAAATCAAGTGAG >gi|3449691|gb|AI099952.1|AI099952 34105 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142D24XP 3', mRNA sequence AGGAATGTGTGCTTGGNGGATCTCCCCCNCGATTGGACCANTCTACNCGGGGATNNTGGCCAGGNGGGGG NNGAAGAAGGGATTACCCCAAAGTCCAGGNGAATTGCCAGTCATCATGATCAGTCTGGTCAAGCTCAAGC GATGGGCGGCATGGGNATCCGGATATGATGCTGGTGGCTACGGTGGTGAGCNCCNCGAGAAGAAGGGGAT GATGGACAAGATCAAGGAAAAGCTTCCCGGTGGTGGCCGTTAAGCTTCGAACAATCGTGTATACATATTA AATAAAAATAATGAGGGTTTGTAACGCAGTCGCATTCGGTCGTTGTATTGTGCTTTTTATGTATGTACGT CCTGCGATGTGTGTTGTTTACTTACATGAGTGTGTAATGAGCATCTGGCTCTTTTTATGTTCTGAGATGT TTGTGTTATGTAATTTCACATCTNTATAAATCTACTTTCTTCTG >gi|3449690|gb|AI099951.1|AI099951 34104 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142D15XP 3', mRNA sequence ACATGAGGGCANCCGCANCCTCCGGTTCAGCTTCGNTTGACCTGGGACCTTNTGGGGCTCTGTGCTTTTG GGNTCGGCTAACGTGGTTCGCACTCTCCCCCGCGCATTGCCGAGGGGTACGAAGGACGCGGTTAGTGNTC CGGTTAGGGAAGCTACCAGNGCTTGTNCCTACCATGGCCAAGCAAACCAACACTGCAGACATGTTAGAAG AAGCAGTAGAATACGTGAAAGTTCTTCAAAGGCAGATCCAGGAGTTAACAGAAGAACAGAAGAGGTGCAC ATGCATACCTAAGGAAGAACAATAAGGTTTGCTCCTGATTTGTTTTATATTTGCTTAACGGCAATGATCT GATCGAAAAATTCGAAAGATGATCTTAGCTTGAATTTAGATGGATGTCATGTTGAAAAGTATATTATNCG ATAAATGGATGTAGGTCTAATATAAAATTTTTGTACAATAATGAAGAAAGTTAAAAAGAATTAATGAAAA CATATATTCTTTATGATATT >gi|3449689|gb|AI099950.1|AI099950 34103 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140P1XP 3', mRNA sequence TGGCCCCGTTCNNTGGGNCTTCTTCCCNCCNCGTTCTTTGCCTNCTGTCTTCACATCCCCAAGTCCNGGN CCGTCATCCGAAGTGCTTCCNCAGTCCCTCGGNCCAGTCTTGCCAAGGTCGCAAGGCAAGAGTTTCTTCT GCAAGTGCTTCTGCCGCTCCAGGTGAGGCTGCAGCTGCCAGTGACTCGCAAAGCTGCTGCTGCACGTGCA AAGGGTAAGGTACTTCCGCATCAAGGGTGAAGGGTTCCTCTGAGAAGAAGAAGGGCAAAGGAAAGAAGGG CAAAGGAAAAAAGGATTGAGCGTGAGGTCATCTCATATTCTCATGCATGCGTATTCCTCAAACCTATATA TTAATAATATCCTAAAAACTACAAACTCACAATCTCTTTCTTGTTCATAAATAAAACCAGAGATT >gi|3449688|gb|AI099949.1|AI099949 34102 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140P11XP 3', mRNA sequence GGGGAAAAACGCCCNTTCAGTTGATGTTGATTCTTNCAAGCNTCTGGTTTAGTGGATGATTTGGAAAGGG GAGACCCCCAATGGGTGAGCATAAGCTGCACATTGGTNCCCTTAAACATACTATTTTGGTCCAACCGCAA CTTTGNCGGACGCATATAAAAGCCNACAAATNNGGAAAGCATTTTAACAAAGTGGAGTGTTNCCTCTTAT TTATATAATATAGAGAGATAGGTTTATTTTCTTATGAAATTATTACTCAAGAAAGTATGAATTTGTAAAG AAGCNCCAAAGGGTTGCTTCTTGGTTGTGTCTTTTTTCCTTTAATTTTTTTTTGGACCAAAGGTATTGTA ACTTGTGGCTCCCAACATAAGAAATACAAGGAGCCCTTGT >gi|3449687|gb|AI099948.1|AI099948 34101 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140O22XP 3', mRNA sequence TGCGACCCCACGCGGAGGGTCCGAAGTNACCTTGGGTTAATTGGGCGTTTGGTTGTGCCCACCCTATNCA AGTGGACCGNTGNCCGTNTCAACCTGTCCAATCCGGGTCCGTGGATTGTCNCNGTTGGGTTGTGNTAAGG TTTTGGTAATGGTGGCTGAGAAAGATGCGTTGGTGAGGCCAGGNTTGGGGTTACGCGGCTAAGCTTGAGA AGTCTGGTTGGAAAGGAGAGGTTGAAGTGGTGGAGAGTGAAGGAGAAGATCATGTTTTTCATTTGTTGAA NCCTGAATGTGATAATGCTATTGAAGTCATGCATAAATTCTCAGGGTTTATTAAGGGAGGGAACTAGCTT TGTGCTCTCTAGAGATATTGGAATAATTTGGTACTNCATATTTTAGTTGCGTCTCTCAGTTTCTGTAATG TTTCAGTGATTGGCTTTTCGCCCAAAGCAACACAATAAAAATTGAAGATGAAAATATTTTAGT >gi|3449686|gb|AI099947.1|AI099947 34100 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140O19XP 3', mRNA sequence AGGTTCATTCCCCGGACCGTTNCCTTGTTCNCCAGTTTATCGCCCCTTTGGGNAACTGTCCCCTNCNGTC CCGGTCCGNATTCCCGGTGGCCCCNNGGTCCGATGGCTTCTCTCAATGCTGNGATTGCATGCCGGTTTTT GGGAAAACTGACTCTGGTATCGATTGGNTTATGGAATNGCCGACGTGAGTACTCCACCACCAGGAATGGG CGAAATAGCACCAACAGCTGTTGACTCAACCCCGAGATGATCGAATACCAAGCACACTTCTCAACTTCTG ATCCCAAATGTGTTACCTCACAACACTCCCTAAAATCATATACAAGGAGGGAGCAACTACAGAACGTGTA TGAACCAATGGCAGGTGCGTTCCATACAATGTACCATTAGATTATGATTCATTTATCGCCTAGAGTGATG TTGTAGAGGAGCACCGAGAAACTAATGTAAGTTTAACAGAGAATGTACTTCATCGGCTGCATTGGTACAC TATTTGATTATAATATTTTTGACC >gi|3449685|gb|AI099946.1|AI099946 34099 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140O12XP 3', mRNA sequence AACCCCTATTCAGGCAACGAAACTCTACNGCTAGTCCCCCTAGGTTAGGTTGGGTAGGGNNATGGGAAAG CCTTTACNAGTTCCGAACTTCCCTNAACTCGGGNTTTTAATCCGCTTAATCGTCAGGTCCCTGGGTAATC ATAGTGGCTTTGTCCATTCGTCTGTGTCTTAAGTGGATTAGTTGGTCGTAAGACAAGTTATAGAGATGTG TTTACGGGTAAAGATGAAGCTTAGGTTTTGATGTAATCTTCTTCGGTTTTTCAATTCTCTGTATTTCTCT ATCTTTTTAGTTTATCAAGTTTAAGTTTTATTTGGGGTTTCTTCTTCGTTTGGGTATCTTTCTGTTTTTC CTTAAGGTTCTTCGTTTGTTTCCGTGTCGTCTAGGTTAAGTCAAAGTAAAGAGATGTAATTACTGGTTAG ATGAATCTTAAGGTTTCCATGTAACCGTTTGTACTACAATTCTCTGTACTTCTCTATCTTTAATATTATC GAATTTAAGTTTTATC >gi|3449684|gb|AI099945.1|AI099945 34098 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140N8XP 3', mRNA sequence CCCCATATGAATGGCACCACATCCATTNCTTTGGNNCTTGGCTTCNANCTGTCTAATNCTACNCCCAGGN CACCAGAGGNCNATGCTGGTNAGTGCTGTACCCGTTGNTGGAGCAGGTTGAGGCAGAGTCTGCAGCCAAA GTGACTGGGATGCTTTTGGAGATGGACCAGACTGAAGTGCTCCATCTGTTGGAGTCACCCAGAAGCTCTC AAGGCCAAAGTTGCAGAGGCTATGGATGTTCTCAGGAGTGTCGCTGCTGGTGGTGCAACCGAGCAGCTCG CTTCCTTGAACCTCTCTTAAATTGCTTTTTATCATTTGATCTTTGGCTTTTGTCTCTCCCATACAATTGG AGTTGTTTCTTTGCTATTCGTTTTCTCCCTGGGAATTTGGATTCCTCCACATAACTGCGTTTGTGTTATT TTAAACCTTCGTTTTTAAACCACAAAGGAAAAACCTATCTGCTTTGTTCTTTTGATT >gi|3449683|gb|AI099944.1|AI099944 34097 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140N23XP 3', mRNA sequence GCACGAATTNCGGCATCTCAACCCGGGATTTTACTACCCTGNCATCCCNCAAGTCGAAATGGATCCCGGT AGCCGAACCCCCTCGATCTAGCTACTACCGTCTGCCCTAAACGTCGTGGACTTTTGAGTCTGACGCTGCA TGACTATGAATCCTGCGGCATTGGCTCAGGTCAAACCNTCGCCGGAGGATCGGAGCAAGAGTTCTTTGCT GAGTTCTCCAACTCCATGGAGAAAATGGGAAGGATTGGGGTCAAAACAGGGTCGGATGGGGAGATTCGAA GAACATGTGCATTTGTTAACTAAAAGTGTTTCTTACTTTTTCTTTCGCAACTTTTTTGTTTTGTTTTAAA TATCTTTTATATTGGTTTTTATGTTCCTTTTGTCAACTTTTTTGGGTGTTTGGAAGAATTTCGAGATATG TATTATTGTATGTGGTGAATATGTGATTTTCAAATAAATTTCACGTCTGTGAAAATCGTTGAACT >gi|3449682|gb|AI099943.1|AI099943 34096 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140N18XP 3', mRNA sequence CTGGGAGTTCGCCAGTGGTCCTTGGTNTTTGGGNTCCCNCCGGGNTAAAAGGGNNCCTCTNCCNCCGAGN TCCCGCTAATAATTTCCCTCTTCCCNCCTCTCTCTCATCATCACATGCNTGTTTATTTTTCTTACCAAAA AAANAAATCATTTACAGGGACAGATTTCTGTATTTNTCTTTATTTAAAAATTGCTCCCCAAAAAAAAAAA ATCATAAATGTTTTTGTGGTGGTCCTTTTTTTAGGGGGATCAAAGTGTGGGAATTAAATTGTTACAGCTG TATGTTATAATAGAAAGATATATAGAAATGAGGAGAGGAAAAAAAAGAAGAAAGGGGTAGAAGAATTGAA AATATATGTGGGATTGTTATGTAATAAATGAAATAGGTTATGATCTTGCTGGAAAGTGTTTAGAGCAGAT CTTAGCCGTTGGATTTTTATAATCAAGGAATGAAACCTGTGATCCATTATTAT >gi|3449681|gb|AI099942.1|AI099942 34095 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140L20XP 3', mRNA sequence TTGTTTGAAAGTNCCNTCCCCAGNANCCNTTCCATCCACCCTTTTGGTNTNCCCAANTNGCTTTNACGGG TTGCTGCCCTTCAATCAGGAAGGCTCCCCNCNCGAGAAGAGTTAGAGGAGAGGCTACGAGCTCGATACTA ATGACGGCCGGGTGTAGCCTTCTTCCAGGGATGAACGAGCGGTTGGAATGTGGGATTAGGATGATAAGAC CTTGCGGATCACCCATTAACGTGGTTAGAGCTATGGATCCAGTGCTGGATGCATGGCGAGGAGCATCTGC ATTTGCTGCTAATTTGAACTTCTTGGGGAATGCCTTTACTAAGATGGATTACGACGAGAAAGGTGAAGAT TGGCTTAGAAATTATCAAATTCGATACAACTATTTGTGATTCCTCCAGTTGCTATTAATTGTGGAGTTTC TTATTTGATTAGCTTTAGCTGTCTCTAGATCAATGAACGATGCTTTAGGACAAAAATACCAAAATTTATT TGGAC >gi|3449680|gb|AI099941.1|AI099941 34094 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140H7XP 3', mRNA sequence CCTTTCCCCACCTTATCGCCCCTTGGGAACTGTCCCCNTCGNTCCGNCCGGATCCCGGCACCCNCCTCCG NCAACAGTGGCTCCCAGACCGTGTGCCCAGTGNCAGTTTTATGAGAGTGTGTTCTGAACGAACAGTGGAN GCCATTAAGGAAATCTCAGAATATGTTCTCCAACTTAGGAGACTTGGCCAAAGGACATGGAACATGGCAT TTCGATCAGGAGCTTCTTGGTGCTGCTGCTTAATCTGAGTTTTAGCTGTAATCTCGCAGTTTGGTTAACT TTTGAGTTATTTTGAGTATGAGATGTAACTTTTAAGGTAGATTTGATCAATATCGATTCTGTTGTGAGAG AAAACAAGCTATTACGCTCCTTGGGGTTAACTTTCTTTGTGTTTTCAGTATTATGGTTTTGTCCCTTCGT AATATCACTTTCCTTTAGAACATTTCAAATCAGCAGTTGTTTTGAGGTGTAATGTAATGGTCACTGATAT TTTCT >gi|3449679|gb|AI099940.1|AI099940 34093 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140H23XP 3', mRNA sequence TTCCCCCCCGTTGGGATGGACCTCTGGACCCCGGCACTTTACCCATCGGGAGNTGATGTGATNCGGGAGC NTTCCGGTACATGGCNCAGNGNGGACCCCTTTTCNCAGGTACNCTGCCGTTGGCCAAGGAATCACAGCCT TGCACCAAGCAGCATGAAGATTAAGGTCGTGCACCACCTGAAAGGAAGTACAGTGTCTGGATCGGTGGTT CCCATTCTTGCTTCCCCTCAGCACATTCCAGCAGATGTGGATCTCCAAGGCCGAGTATGATGAGGCAGGT CCAGGAATCGTTCACAGAAAATGTTTCTAAGCTCTCAAGATCAAAGGCTTAAAAAGCTGGGGTTTTATGA ATGGGATCAAAGTTTCTTTTTTTCTTTTATATTTGCTTCTCCATTTGTTTGTTTCATTTCCCTTTTTGTT TTCGTTTCTATGATGCACTTGTGTGTGACAAACTCTCTGGGTTTTTA >gi|3449678|gb|AI099939.1|AI099939 34092 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140G21XP 3', mRNA sequence GANTTGCTAAAGCCCGGGNGCTTTTTNCATGNCCNAACNCGCCCATTTNCTGAGGTGTTCCCCCGTTTGA TCNCAAGTTGATCTTATGTNCCCCCAAACGTGCTTCGTTCACTGGTATGTGGGTGAGGGTATGGAAGAAG GAGAATTCTCAGAGGCACGTGAGGATCTTGCCAGCATTGGAGAAGGATTATGAAGAGGTCGGTGCTGAAG GTGGTGACGATGAAGATGATGAAGGAGAGGAATACTAAGAAGAATGTTTCTAAAAACTTTGGATTTGTGT GGGTTTCTCTATAATCTCGTCTTGTGAGAATGGGCTCAAAACTCTTGGGAGTCTTTAATCGTGTGTGTTT TAAAACCTACTTCTCTATCTTTTCGTAGCCATGTTATCTCTCTATTATCTATTTCCTTTGTGTGTTAAAT C >gi|3449677|gb|AI099938.1|AI099938 34091 Lambda-PRL2 Arabidopsis thaliana cDNA clone 139J2XP 3', mRNA sequence CGTTAACCCATCCCTNCCTTTCTCGTGGCCCCAGGCGAAAACATGNCCCCCNGGNNTNGCCTGATAACAT CCCTTATAGTTCNCNGATATNGTAGTNCGCACTGATTATGCAGTCCCTAAGATGCATTCTCGGNGCAGCC AGCCGTTTAGTGGGNTTATTTTTTTCGGGTCCCCCTGAGCAAAATCGGTTCTTGGCCTCTGGGTTTACCT AGAGCAAAACCAGTTCCGATGGTTACTTGAGTTTTGCTCAGTTCTTATGGGATTGGAGTGGAAGGTCGTG CGCTCGGCAGCATGGAAGCTTTCTCCTTTCAATCAGCTTCAGTAGAGTTTTGGTTTCTTTGTTTGTTTTT TATTTGCTTTAAGAATTTAATGTAAATAAAAATCCAATGAGGATTATCATACAATGTCATGAAGGATCTA TGAATTAGTATCTAATGTTAGTATATATTATGGTTTTTCCTAAGTTGGTACTTTCTCTGTTTGAAGTTTG ATTATCATACATGTATTTGTTA >gi|3449676|gb|AI099937.1|AI099937 34090 Lambda-PRL2 Arabidopsis thaliana cDNA clone 139A18XP 3', mRNA sequence TTATTTTGGGGCNAATCNGGGAATTTGGNCCCNGGTCCGAGNCTCTTTTGGGGACCCNNNGTATGGNCCC CNGGCTTGGTTCNTCTTCCCAGATCTGAGAGAGNCCNTNANCNCCGAGAGGAGTGCCTCAAGTAAAGCCN TCTCGTCAAAAGGAAGGTTTATGGTTTNGTAAGATTTCCCGGTTTAATTACTTAATTAGTCGGTTAAGTG GTTAAGTAAGTCGATGTCTAATACTTAAAATCGAAAACGACGTATCTATTATTGCAAATTCGGATTAGAT GTGAATGTGATCGATTAAATCGATTTCGTGTTAGATCAGTTTTTTTTTTTTTGGGAGGGGTTTAGAGGTT TTTTAAAAGTTGGTATATGGGATCTGGAGGACTTTGTAAATGTATAAATTTCGTTTTAATTAAATCTGTA ATCTTTTGTTGTTATTTCAAATGTTTAATGTTATAATT >gi|3449675|gb|AI099936.1|AI099936 34089 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138K1XP 3', mRNA sequence CCCCCATTAAGGTTAAACTGACACTTNANCGAAGGGGANATATGNTNACCCAACTCCNNTACNAAGGNTG GAAAGAGTGGCAGATATATGCACTNCTNTTTGCTTGTCANTGGCATCAGTGATAGCTTGCATACGTATTC TTCGAGAACTCAGATTCGTTTTGGAAGTTACCAATGGGAAAAGATCAAAAAAGACCAAAGATTAGTCTAT TTGGAGGTTCCTCCTCCACGCCTTCTGAGGATCATAGTAGGTGGAACTTGGACCTATAGAAAGATTATGT AACTTTCCTCTGCTTTTTCTTCTTTCTTCCTTATCTTGTTGCAGCGTTTTTTTTTGTTTTTTTCCTTTCT TCTGATTTTGCTCTGACAAATACCTGTTGATTAATTGATTTATTTACAGACAATTACTGTTGCT >gi|3449674|gb|AI099935.1|AI099935 34088 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138J5XP 3', mRNA sequence CCTTAGANGGTGGGAAATTGCATGAGTTTGGCACATCCCTTNTTCTNNCGGATTTNGGATCNNAGTATGG GAAGCCCTGTCTCAGCCTNNGCTTCCAGCNTCTCCTCCTTCCACATCNTTAAAACTCCAACCTTGGAAGA TTTTAGGAGAATGAGAGCGACACGCTCTGTGCTTCTTTTCCTTATGATCCAGCTCTTCCACGCACAAATG AACTATGAAACATATATAAAGCGCACACATATATTTATGCATATCAAGCTTTTGGTGATTATGGTATTGA TAGAGTCAAATTAAGCTCGGTGACTATGGTATTAATAAGAGTACTATTTCCTT >gi|3449673|gb|AI099934.1|AI099934 34087 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138J22XP 3', mRNA sequence TCCCCNANTGANNTTGAAGATTNNCTTTCCCANGGTTTTCAGAGGGGGGCTNAAACCAGNGATTTCTCCC CTTTCACTCGCNNTCAACGCGCATAGATCTGAGCTCNCCNTGCAAATTCCGTGACTGGATCTTAGAAAAG CCTTTCATATACAGAAGCTTCAAGACTCAATGCACTTGAGCCTACACTGATGATTCTCGCCAGCTTAATG ACCTATACAATTTTCCAACCCCTATGGCCTTTTTCGCTGATTGAATTCAGTGGGTTTATTCATATAGTAG TAATGTAAATGGTATAGAGATGAGCAAAAGCTATATTATATATTATATTCATTAGAGGGG >gi|3449672|gb|AI099933.1|AI099933 34086 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138D19XP 3', mRNA sequence CCGTAACTGGGNTCTTTNCCAAACCGGGTTTCCNNTGAAGGGAAAAANGTGAAATGCACTTATGTGGTTN GCATAGCCAGGAAACTTGGTGCTCCATTTCTTACTCCCTGAAGATATAATCGAGGTGAATCCAGAAGATG ATGCTGACATTGACGGCGAGTATAATGTATTGGACTCTAAAGCAACCTCTTCATCTGAATAAGCCTATCG GATCTCCTGATAGCCACAATGGAAGTTTACTCGATGATTCTACGTCAGATTCCTCTATAGAATAAAATTG TTTTACTGTGAAATTATATATTCTTAAGAACTTTATATGAATGATGTTATTAATTATTTTGCTCCTTTGT ATTTTTTGGGTGTAAAAACTATATTAAAATTGAAATGTCATCAACGAAT >gi|3449671|gb|AI099932.1|AI099932 34085 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138A20XP 3', mRNA sequence AACGTACATCCCGGACAGTTTGCCTGTTCCCCAGNTATCGCTCCTTNGGAAGCTGTCCCCTCAGTCCCGT CCGGATCCCCGGTCGACCCACGCGCCCGAAGAGAGGAACTNCAATGTTAATCATCAAAGNGAGTAAGANA ATNGCAGTTCTAACTGTGGATGTGGCTCNTCCTGCAAATGTGGTGACTCTTGCAGTTGCGAGAAGAACTA CAACAAGGAGTGCGACAACTGTAGCTGTGGATCAAACTGCAGCTGTGGGTCAAACTGTAACTGTTGATGA AATTATTATGGTCTAAAATCATATATATGGCAGAAAAATTGGGGAAAATATGTGTTTTATGCTAAGAGAT GTGTGTGTGTTGTTGGAATAAAGACGTGACCGTTGTGTTGCGTATCAACTCTCTTAAGCTTTGACTTTTC CCAGCTTTGTATTTTCCTATGTATGGTAATNGTGTGATTGTGTAATGTTTTCATATGTAACGTAAAAAAA ATATTTATGTGAC >gi|3449670|gb|AI099931.1|AI099931 34084 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137O14XP 3', mRNA sequence GTTCTCCAATTGCCCGACCCAAGCAGATACGTANCTGAACTCTAGNTNCTAGAAGGCCGATGCGAAGGAG ATGATTTTGTGAGGCCGGTGGAGAAAAATGCACGTTGATCCTTCTCGTTGTGGGTAGTCGTGGCCTTGGC AAGATCNAAAGAGNCGTTTCTTGGGAGCGTTAGCGATTACTGCGCTCATCACGCCAACTGCCCCATCCTT ATTGTCAAGCCNCCTAAGGAGATGACTAAGTAATATGGAGCTGTTTACATGNTTGGGTTATTAGTACGAA TTTTATAATGAGTGTGCCATAATTTACCT >gi|3449669|gb|AI099930.1|AI099930 34083 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137N1XP 3', mRNA sequence ATTNCCCNTAAGNTTAAAGCTCTGGCCCTCAATCTTTTATGGCCCCTNTTGCTCTTCAGCTTCNCCTNNC CTGTGGCAAAAATCCCACCTCCGGGCTACACTTGTTCCATATGATAAACTCACTCCACTTATAAAGGATG CTTTGGAGAAAAAAGTGAGAAGAGAATGGCAGAGCTCCAATCTTTCCTGTCTTGGTTTACCAAATATATC ATATCAAATCCTATCCCTTTGATTCTTTCCTCTATCGTTCCCTTATGCTTGTATCATTAATTAATGTGTG CTTTTTAGATTAATGATTCTTCTCTTGTATTAAAGTATGATTTGAAATCCT >gi|3449668|gb|AI099929.1|AI099929 34082 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137N11XP 3', mRNA sequence ATTCTNATCNGTGATNCAGTTCNTCTACTNCANCTTCTTCTTCTTCTTCTGTGTAAGTTGTTCAGTATAC CANACTGATAATGAATAATATGCTTCTTACTTTNCAAGATCTCAGANCCCATGAAGCAGATGTGATGATT CAGTTGTAAAAGGAAGCATACCTTTATAAACGTGTGAATGTATTATGTATGACAGTATATTTGTAATTCT GAAGGACATGATAATAAACCTAGACTGAAAC >gi|3449667|gb|AI099928.1|AI099928 34081 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137L9XP 3', mRNA sequence GGTCTGAGATNTGGCNGGATCTGCTTTTTCCCGAAAGGAAAGNTCTGGGNTCGGTATGTTCTNAGACAAC AGTTTGCGACCNGATTTACTAGCTACGGTCAAAATCCTGATGTTGTGATCTTGTCCGCAAAGGAATCTTG TTAGCATCGAATATGGAAAGTGAGATTCGTGTTTTCCGGTGTACTGCCTTCATCAGATTNTACTGCGCTT GTTTTTTCCGTTTTAGGCCNCTTCGTTTTTGTATATGTGTAATCTCTTACGGCCCATCAGCCAAAGCCTA ATTCGGGANGTAATNATATATATATATT >gi|3449666|gb|AI099927.1|AI099927 34080 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137L6XP 3', mRNA sequence CATCGTTTTTNCCCCCGATACCGNNAGGTTGGGATGGAAAAGCTAACCATGGCTGCCCATCACATTCTTG GGGATGATNGATTGGAGATGTTGCAACCGAATNGCGTGACCCTTGGAGCTAAACTCATCGGAGGATGTTG CCAGGACTACACCTTCCACCATTAACGCTATCTCCCAGAGATTTGAAACGAAGATGATTTTTCTTCAGGG AGAAAAGACTGAAGATTCTTTTTCAACTTTTTAACTAGCTTGACCATTGTTAGGGCTATCTATCTGTTTT CTGTTGTTTTCTTGTTGTTCACGTTTTCTTTGTGGTTTGATGATATGTATTCGTAAACTAGGCCTTGGGC GTTTTCAATGTAATGGCCCATAAAATATTTTCTTTATCAAAATTACCCGATTTGAATCTTT >gi|3449665|gb|AI099926.1|AI099926 34079 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137L4XP 3', mRNA sequence TGCCCACCAAGNGGAAGGTTATTTACCNGCACAAGCNTTAACTGGANNCGCTGATGGAAGCCACCCTCTN NAGTGTTCCNCCGATGGAGTCATTAGAGTTTGGGGTATTNGNTCGTTACTAGTAATCTCATCACTTGTGC TGTCGTTGCTCTCTGCTATCTGCTTGTTGGTTTTANCTATCACTTATGTTTTTATCGACAACTCATGAAG TNCCTTGAGGTTTTTGGAAGGATGTTTGTTTTCTTGTCAATCTAGGTTTTTGCTTCTTTATCTTATCGTT CGAGATCTTGGTTTTTAGAGTTACTTCTCCCATTTTGTGGCAAATGATTCCCATT >gi|3449664|gb|AI099925.1|AI099925 34078 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137J6XP 3', mRNA sequence GTCCCCCNTNGTTTTTNCCTCATTGNATTTNCGCCACCAATGGCACGCCGGATCAGAGCCATTGACGCCT CCGCCANTCCATTGCCCGCCTCGCTGTCTCCAAACGCGGCATCTAAGGGAGTCATGAGCTATGGAATAAT TGGAGTCACGATGATATTGATGTACGCTGTTATGACCTAAATAACAGGGTGGAAACAGAGCATTGTTTTG CTCCATGTCTTTTTTGGTCGGCGGCCTTTGGAAATACTACANCNCTACGTGCTCTTTTGTGTGTAACGGA ATTTTTTTGCCATTGACAATTTTTCCTTCTTCCTTCTTTTTTTAATTACTTGTAGGGGTTGATAAACGTT ATAGCCATCT >gi|3449663|gb|AI099924.1|AI099924 34077 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137J4XP 3', mRNA sequence TCCTTGCCTNATAAACACATTTGAGGCNCCTNCGANAAGCTTGAGCTTTTTAAGCCATTTTTGCAGTGAC GGTAGTTGTGGCTGTTGTGGTTTTAATAGCCGCCGTGATATACCGGAGACAGAAACGGGAAGATGGTTAC CAATCACTTAGTACTTAAAAAAGAGCAAAAACCATGTCGACTCTATATATGTCTTCAAAGTGAATTCTGT TTGTATACATAGAATAAAAGATTATTTTGTTGTCATCTTCCTCTGATGTGATATCTCTGTAATAGTTACG TGTAAGAAGCACTTTTCTTTNTC >gi|3449662|gb|AI099923.1|AI099923 34076 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137J19XP 3', mRNA sequence TTAATTGCCCTTGGCNCACCGAATGGAACNNCCGTGAACTTGGANAGGATAAATTTATGCTNATTCCACT AGGTTTTACNCGGCCCATTGTCCCCATTCATGTTCCGGGTTTTCCGCCTCGGCGGCCAACTATTCCGCAG TTACCACCATATCGTCCCAGAAGGTGCCCTTTCTGTTATCCTCCTCCTCCCCCAAAGGCTTTCCCAAAAA ACTCACCAAGTCACTGATGTCACTATAGCTACGAAATTGCGTCAATAAATGTATGCACGTTAATTTGTTT CATTTGTGATGTGTGGGGCTCTTTATCTATTATATGCATGTCACGTGTTTGTCAT >gi|3449661|gb|AI099922.1|AI099922 34075 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137H18XP 3', mRNA sequence CGCATTTCTCCAAATCCTAGGCCCCTTNTGCAAGAAAGCTAATCAGTGTTCAGANNGCTGGATCAANTCC CTTATGTTGTCGAGCTTNATGNAAGAGANGGATGNTTGGCGCATCANAGACTGCACTTGGGAGAGATTTG TTGGAAGGCGAACAGTACCGCAAGTCTTCATTAACGGAAAACATCTCGGAGGATCAGATGATACCGTAGA TGCGTATGAGAGCGGTGAACTCGCCAAGCTTCTTGGTGTTTCCGGGAACAAAGAAGCTGAACTCTAGGTT ATATATAGTTGGAAGAATTGATAACACTCTCTGTGATGCTTAGGTGTAAGCAATTCAATTTCCATTTGTA TTGTGTTCTGCAGCTTGATCATGACCTTGTGACAGCTTGATCTTGCCTTTTAAACGTATCTTATCAAAGA CCACATTCTGAGTT >gi|3449660|gb|AI099921.1|AI099921 34074 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137H16XP 3', mRNA sequence CTCCGGGTTCACTGGTCCATATGTNNACTCACNCCACTTATAAAAGGATGCTTTNGNGNAAAAAGTNAGA NGNGAATGGCAGNGCTCCATCTTNCCTGTCTTGGGTTTACCAAATATATCNTATCAAATCCTATCCCTTT GATTCTTTCCTCAATCGTCCCTTATGCTTGTATCATTAATTAATGTGTGCTTTTTAGATTAATGATTCTT CTCTTGTATTAAAGTATGATTTGAAATCCTTTTTTTTTCTCTATCTCTTTTTATTGAATGGAATTGACTG CGTTCATGATACTGTCAAAAAGAGAGAAAAAGAGTACAATTTTATATATTTTTCGTATTAGTTGAACGAC AAAATAAATTACATTTTAAAATGTAAAATATAAAATACAATGCCATTGAAAATATTTACAGGGGTGTNTT GGAAG >gi|3449659|gb|AI099920.1|AI099920 34073 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137B8XP 3', mRNA sequence TTGACTGGTTTNTGAATCCCGCTCGAGTTCAGGACNTGCAAGAAGTTNCGACACTNTGATTCGACTGATC GATGANGAGATCCANGTGAGTTTGATGACAGAGAGAGGCAAGCCCGCAAAGAGAAGAAGCTCGCGAAGAG TGCAACACCNTCTAAGCGACCTTTAGGNAGACAAGCAAGTGAGAGTCCTTCATCGACGAANAAGCGGAAG CNCCTGTCGATGAGATGAGATTATGTGTTTACGGATCTGTCGAGTCTTTGTTGTTACATATAGTTAAGCT AATGTTAAANACATAGCAAATGGATTTCATTCTGCTTTCATGAATGTTTGTCCTGGTTTGACTTGGATTT AATGAAATGACTTAATTAT >gi|3449658|gb|AI099919.1|AI099919 34072 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137A5XP 3', mRNA sequence TAATTTGGAAACTTTTTGCNTTTGGTGAGAACCTCACCGTGACTGCNAANCCCTGACTTGGACCTACTCT GGATATGTTGATGCTGCAGAGGAAGGTCATGAACACTTAAGCTCNTAGCTGTTTGTGCACTCAACAAGTT ATATATCTTCTTGACGACTTCTTGCTCGCAACAACTCTCTACCNGCTATCAAATGCATCGTACGGTTGTT GTCTGAGGAGAACATAACTGAGTCGTCGTCACAAACAAGAGGAACATATGCNGTTTCGGTCAGAACCAGT CGTGTGAATGGTAGATATATGTATGTGTGTGTAGAAAATGGTTACCAATTGTATCTTCTTTTTGATAATT ATTTTTTCATGCCTTTTGTAATATGTAAGTTTCTTT >gi|3449657|gb|AI099918.1|AI099918 34071 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137A20XP 3', mRNA sequence GTCTTCAATTCGNTCCAACCNGCCCCGNTAGCCGCAGCTTTGTNCACTTTTCGATCAAACGTNCCCTGTG CCCGCTTCCATGGCATCCAGGAAAATGCATTCGNATGGGGATCATCTGAATTCCCACACTCTGNGGNCGC ATTCAGTGACTCAACATGCTGCAAATTATCTAGTCAGTGAAGCCAGAAAGTCAATGAACAGACCATCTTC TGAGAAAGTGCTGAGCAATCTCATCTACAACTACAAGCCTACGTACTCCGGATACAAAGGGAGCGGTGAC GACGAGGTTTATATTTTCACGTAACAAAGATCCCTTCTCTGTGTGTTTTCGCCAAAACATAGCAATTTAT ATTAGTTACTAAGAGCAATACAGTGTTTCTCCTTATCCACCATTGATTGTAAGTTGTAACCAAGGTGTTG AACTATAATTTAAAAAAACACAGTATAGATC >gi|3449656|gb|AI099917.1|AI099917 34070 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137A14XP 3', mRNA sequence CAAAGTTTTTCCNCTCCGTTTTGGAAACNATCTTATNCCTGGGGAGANNTACCCNGACATCTGGGCCNAT GGNNCCAGATTTTCACAGNTGNCCCTNTGGGCTGATACAGAGACGCTGGAATGGAGGAANTGGGAGATGG GTTTGGATCGNTGGAGCATCCCGGTCCTAGAGGATGGTGCGCGTTTGCAGCTGGATCACGAGATGGTAAG CAAGGTCTGTTGGTTTATGGCGGGAACTCGCCGAGCAATGATAGGCTTGATGATATCTTCTTCTTCACTC CCAACACTCTACTCAAGTGATTGGTAACTAAGTATGGTTTGGTTTTCTTGCCGGTGAGAGGGGCTGTGTG AATGTTCCTTTTTTTTTAGTTTCCTTTTGGATTGGATGAACTATGAAGATGTGTGATGTGTTTCATTTTC CTCTGTTATTTGTAATTAAATAATCGAAATTTTTCATTAAAGAAGATAACGAATAACATCAGCTT >gi|3449655|gb|AI099916.1|AI099916 34069 Lambda-PRL2 Arabidopsis thaliana cDNA clone 136O1XP 3', mRNA sequence TGTTTNCCCCTGGNACCCCTGGGGTNTTNTCCCTTGNTCAAGAAGCTTTTCCTTTCCNGCAAGCATCTTN GGGGGACCGGGAAGGTTAGGGTTCCCAAATTCAGGCTGATTCTTGTTAGAGAGCCGGATCCCATCGTCTT GCTCCGTTACTCCAAGAAGACCAAGAAGCTCCCACCCGTCTGGAAGTACGAGTCTACAACTGCAAGCACT CTTGTGGCTTGAGAAGAATAGAGTTGATCATGTCCTTCAAGAAGGACCATTTCATTGTCTGCATTGCAAC TCAAAGCTCTTCTTCTTTTGAACCTATGTATCTGTTTTCGCTNGTTTTGATGGGTTACAACTTGCTATGA GATTTTGATTTTAGGGAACGAATTTGTTTATGCGAATCTTTCCATTATCGTTACAGCTTATCTTTCAATT AACGTTAATTATCGTTCTCAGAG >gi|3449654|gb|AI099915.1|AI099915 34068 Lambda-PRL2 Arabidopsis thaliana cDNA clone 136D14XP 3', mRNA sequence CTTTCCGNCTTCCTTGGNCCNTTTGGGCCCCCCNAGNCTAGCTTTCGTTANGGNGGGGGCTTNNGCTNTG ATTGACGTGATGAAAAGTTCTNGCNNGACACATGGCTAAGCTNCTCTTGACAATGAANAAATGAGCCGGC GATGAAGATAGCGNAGACGAAGAAGAGGACACTGGTATGGGCGAAGTGGATCTCGATGCAGTTGCCGGAA TCATCGAGTAAGATTGCCGGATTTTTCTTTCTATTAAATCTACCCAATCTCAACAGTCCCAGTATTTTGG TTTAAGCTTTGACAAGGCAGTAGAAAAACCTCCGAGAGGATTTATGTGCTTTTTGATGACTCTGAGGCAT TTTGTTTTACCCATAGGGGGTGGTTACATATCAATCATACATTCATGGTTTTATAAAAGATTTGATTCTT TGC >gi|3449653|gb|AI099914.1|AI099914 34067 Lambda-PRL2 Arabidopsis thaliana cDNA clone 136D11XP 3', mRNA sequence CCCNGGTTCCCCGGTGTGAAACNCGCCNAATGCTACCGATTCCCNGTNGGGTTGAGTTCAAACANACCNA ATCGCGCAATTCAACACTTTTCGCGGGGACGAACCCTTCAGTCTTTGAGNGGGTTTTCCCACTTGAAGTC ATACCCAATGGGTTCCAANTCTCCCCCGANGAAGCAAGGAGGGTCAAGTTCAACACGCTCGAGACCACTT TGACTCACAGCAGTGGCCCAGCTAGCTACGGAAGGCCAAGGGTGGCTGCAGCTTAAGAGCTTAAAACTGC AGCTTAACAATGAACCTCGAGTACTGTAAAAGGAAGTTAAACAGTACGTAGTAATAATAATAATGTACGA AAATGTGACTAGTTTTGTTGAGGTTTACCTGTAAAATGCAACTCCTTTTCTGAATAAAATCTTTTCAATT TTCGATCAAGTC >gi|3449652|gb|AI099913.1|AI099913 34066 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135P9XP 3', mRNA sequence AGGAAATCCCTGGGGATGAGGATTCATGATGGAGGTTGCCTGTANTTATCCAGGGAAGATCTCTGTCCAA CCCNTNTCACCTACTTCCAACAATGATGCTGATGAAGAGGATTTTGATGGAGATGATGATGGTGACGAAG AGGGAGAAGAAGACGATGACGATGAAGAGGAGGAAGATGGTGAGGAATGATGGGAGCCCAAAGATAACAC ATTGCTGGCTTGCTTCTATAACAGATGTGTAAAGTTTGTGTTATGAGGTTCTCAATTTTAGCAATGATGA GACTAAGCTTTCTCTTTTGGAATATTTAGTTTATTTACTATCAATAGCTACATTCTGTTTGTACGAACCA TTTCATCATCCATGTCCTAAATCTTGCC >gi|3449651|gb|AI099912.1|AI099912 34065 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135P7XP 3', mRNA sequence CCAGNCCGTGCCGGGGTCANTGCCGGGTTGATACTGNGGATGGTTATGAAGAGGAGGGAGGNCGATGACC TAAGAAGNCTGAATGTTGGTAGCATTTAGTATAGATGGCTGCAAAAATCTCTCTGTTTTTATTCTTTACT TGAAATGTTAAACGGGGCTGATTAAAATGGGTCTTTCTTTTTATCTTTTTATATTTCCACAATCTCTCAC TAAAGCCCTCTGAATGGAGAAAGTGAATTGTAGAATGTTTAGATGGTGAAAGAGAGACTTGCAGCTCTGT ACTCTTTGCTTTATAAAACGATTTAGTTTTCTTTTCTCAGTTTATTATATTGTTGAATTGATGATGATGT TAGCTAAATTTCTTTATACTTTGT >gi|3449650|gb|AI099911.1|AI099911 34064 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135P21XP 3', mRNA sequence TCCAGANGGNTTACCCGGGCGCCTTCCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCA TCNGTTTCATTGCCTACAAGCCCCCAAGTTCACCGAAGCTTAATTTCTTTTCTAAAACATTCTTATGAAT TATCTCTGCTCATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGATTG TCAAATGTCTGATTTATGNATATGTNATTTAT >gi|3449649|gb|AI099910.1|AI099910 34063 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135P18XP 3', mRNA sequence GCGTTCACNAGGAGAAGANCNTNTTGGANTATTGAAGTCACATTTAAGAGCNTTTGTGCTCGNCNGAGGA GTCGGATTCCGTGCCCGGTTCATGAATTCGNGTCGATCGAATGGACAGACGGTGAACACGTTGTTAAGAG TCCGGTGGCCGTCCAATGGGGTCAGGGATCAGTTCAGTCCTTCTGATTGATCATTGAAATTGGGCTCTGG TTGTATGTTTTCATT >gi|3449648|gb|AI099909.1|AI099909 34062 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135N9XP 3', mRNA sequence GAAAGNGCTTAAGGTAACCCTTGACGTCTGNTGATGAGCCTCNTGGCTCTGTTGACNTTCAGGTGCTCCG ATGTATCCTCCACTATTGATTCTTCCCTCACAATGGTTATGGGAGATGATATGGTTAAAGTGATTGCTTG GTATGACAATGAATGGGGTTACTCACAGAGAGTCGTTGATTTGGCTGACATTGTTGCCAATAACTGGAAG TGAAGACTCAACAACCTCTTGATGTCTGCTCCATTATTTTTTACTGTTACATGATTCGGAATGTATAATT GTAGTTCCTGAGTTTATTATGTATTTGTGCTCTATAATTTATAGTAATAAACTTGATTCAAAC >gi|3449647|gb|AI099908.1|AI099908 34061 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135N12XP 3', mRNA sequence ATCAAAAAGTTNTGNCCCTAAACTCNTAAAAAGCACATTCTNTCTNCCTCGTTCTCTAGGAATCCATCAA TTTCGAGATTTTTCTTATTATGNCATTTTGCTGCATTGAGATTTCTTTGGGTAGATCAANTAAACAGAGA GAAACTTAATTTATGTTTCCAATGAGAAAGATTAGGGCAGAGGGCACGAAACGTCTATTTCTTTTTGATG CTTCCTACTTTGTGAAACTTTCAAAAAGCCACTNCCAATTCTTTCTCACCTTCNTGGTTTGTCAAGTATT TGTTTTTATTTCTTTAANCC >gi|3449646|gb|AI099907.1|AI099907 34060 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135L1XP 3', mRNA sequence GCCGAAAANTGGCCNAAGCTGATGCTGGCCTGTGGCTCCTNGAGAGCCAANCCAAATGCCTCCATGACGA TCAGCTCAGTCCGTGATAGTTGAGGATGTACAATTCATGGTGGAGAGGTGTTTTGTGGACTGTGTTGATA GCTTCACACGCAATCTCTGCAGAAACAAGAGGAGACTTGTGTGATGCGTTGCGCTGAGAAGTTCCTTAAG CATACGATGCGTGTTGGTATGCGGTTTGCTGAGCTCAATCAGAACGCACCAACCCAAGACTGATATAGTC TGCTTTTTTCTGTTTGGTATTTCGTACGGTTTACGAGTCCGAAACCAGAATAAACCGGTTGTTTAGTTGT TCAGGTTACTACTCCGATACTGTTTTTTGAACTTCTTGTACTGTGAAATTATTTTGACTATATCCAGTTC TGATATTGATATTGATTTGTATTTCAATGGAGTCTAGAGAAAATCATATCATATCAAT >gi|3449645|gb|AI099906.1|AI099906 34059 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135K20XP 3', mRNA sequence ACAACCATTACCGGGNCCACTNGCGGGTNNATCAACTTNAAGCAATGGCATCNATNNCCATGCCGCTCCT TCTTCCCGGCCTCGCCAAGGTCCNTNAGCCACCGNCGNCGAAGGCTTCCGTAGTCAGGCCTCCACGAGCG ACAACACACCCAGCTTAGAAGTCAAGGAACAGAGCAGCACCACAATGAGGAGGGACCTCATGTTCACGGT GCAGCTGCAGCGGTTTGTTCTTTGGCTAAGGTAGCCATGGCTGAAGAAGAAGAGCCCAAGCGAGGGACAG AGGCGGCCAAGAAGAAATACGCACAAGTTTGTGTCACNAATNTACGGCCAAGATCTGCCGCTACTGATTC AACAACCTACCTTCTGCATGTCTATCTCTCTCTTTCAATTTCGGTAAATTTTCTCAATTAAGTTTGGTCT GTAATCGTATATTTGATCATCAATTTACCAAAAGCCCTTTTATC >gi|3449644|gb|AI099905.1|AI099905 34058 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135K13XP 3', mRNA sequence CACGCAAACTCTTGGATTTCACTGAGANACTGAAGCCNCTTGTGTTGGGACAGTGGCGTCNGGGAAAATG CCCAAAGATCTTGCACTCATCATTCACGGCTCAAAGCTTTCGAGGGACACGTNCCTGAACACAGAGGNGT TCATCGATGCNGTCGCTGCTGAGCTCAAAGAAAGACTCAATGCTTAAGAAACTGANGAAATTGGGTAAAA TTCGAACGTCTCAGTTCCTAAGTGTCTTATCTGGTTGGTGGGGTTGGTTGGGATCGGGNGGNATAAACTT TTGTGGAGAGGNGTGTTGAGAACGATTTGTTTCCTCTCTTATAATATTTCCAAAATATTGCGACATTTTT CCATTTTTATTCNGATCTCGAATTTTATGTTTGATTGATTGGTT >gi|3449643|gb|AI099904.1|AI099904 34057 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135K12XP 3', mRNA sequence TTTGNCCCTTCCGNGTTTGCCCCGCAGGTGGAGATNAGTTCCGAGNTTTTNACGTGTTGAAACCGGACCG NTTGGNGAAAGCTTCGNNCNGTACTCGGGGGACGGTTTAACAGTATCAGTCTCAAACTGATGCAAGATGC CGTCGTTGCAGGTCAATGGTGATACAAGATGAGAGAGGCTTAATCTGTGTCACTCACCAGTCTGGAAGAT TGAATCAAAGGGATGCAAATCTTTCTTAATTTCTTAATTTTTATCTTCTTGGGTTGCTTTTTTTTTATGA CACCACGATTAAAGCTTTTTAGGCATATAAAGTTGTAAGAGTTGTGTGTTTGATATCCTGGCTAATGAGC GAGCTGAGTATGGGGATCAAGAGAGAAAAACCGTGTTGGCCTTTGGCTGTGTGTAGATATTTTGTATAAT CTTGTGTTGATAAAAGATAATATCATCAATTTTTCTTGTGATC >gi|3449642|gb|AI099903.1|AI099903 34056 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135J9XP 3', mRNA sequence TTCCCCCTGCCTTAGGCGTGATGNCTAGNAGTGCTNCTTCCCGCANAGTGNTCCTTNTGTTGAATCGAGT GGNGCNCGGATTTTTTTCCGTGNGCACGNAACACTCCCGGTNCTATGATGGCCGGTACTGGAAATGTGGA AGCTTCCATTGTTCGGATGCACCGATCCGNTCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGGAGTAC CCTGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCT ACAAGCCCCCAAGCTTCACCGAAGCTTAATCCCCTTTCTGGAATATTCAGCGTTGATTATTCTGGAACCC ATTTCTATGTGGTCAATGCAAATTTAAGAAATTATTTGCCGACTTAAAAGTTGAGGAACTATTGTTTGAA AGTGAAAATGTTATTCCTATCAGTTTCTCTATAATTATAGTTATCATTTCATTTC >gi|3449641|gb|AI099902.1|AI099902 34055 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135J16XP 3', mRNA sequence CTGGGGCCATCTCCCNTTCCGCTTTTGTTGNCCCATGGATGTTTGCAAACTGTCCAAAGCTGAGAAAGCT TCCATTAAATGCTACAAGTGTCCCATTNGTTGACGAATTTCAAATATGTATGTATCCTCCAGGACAGGGA NATGAGCTTGAATGGGAGGACGANGATACCAAAAATCGATTCTTGCCTTTAATCAAACCGTACTNGTACG TCGTCGACTAAAGATCCATTACTCAGGAATGGGATTCCTCAATGTCAAAAATCAGNATTCACGCTTCTTC TTCTTCTATTGCTTTATCTATCTTCTTGTNGTGACGGTGTGTTGTTCATTTGGATTGTATAAACTGATTT GCATTCTGATATCTTTGANGTGTGTTGTGCTGTTC >gi|3449640|gb|AI099901.1|AI099901 34054 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135I12XP 3', mRNA sequence GTCCANATTGATTCAGGNATTGGCCCTGGAATCNNCCCATCAATTGGGACTTAACCCATTGTTGATGNAA ATTATTCCAAGTGGCAGGTGAAGAGGCTATTGAAACAGNCCAAGCTTCTTGCCCCTCAAAGAAGGATTAC TGGTGGGAATATCCTCTGGGAAGCCCAGCAGCGGCTGCGTTAAAGGTTGCAAAGCGGCCAGAAAACGCGG GGAAACTCATTGTGGTGGTTTTTCCTAGTGGAGGAGAACGTTATTTATCGACTAAACTGTTCGATTCGAT TAGATATGAAGCAGAGAATTTGCCTATTGAATGAATGTTGGACGTGTGCCGGTTTCGTGTGTAATAAGAG ACGTTCGTTCCAAGAGTCCAAGATTTCAATTTGCTTATTACTGGTCAATGTGAAATGTATAAAAAGTTGC ATATTCGATTATGAATAATTTTAGTTGACTACTTCC >gi|3449639|gb|AI099900.1|AI099900 34053 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135H4XP 3', mRNA sequence TTCCATGCATTTCNTGCGTTTTAGGTAATTTTTCAAGGACAAGCGTTCTTGTGGNGGTTTCCCNCAGTCN AAGGCTTAAAGGCTGGGANAAGCTCTTTCTAATCANTTTGAGGCTNANNGGGCGAAGGACCAAGGCTTAG CCGAGAAAGNAGCATGCTAGGAGAGAGGAGCGTTTAGCTAAGGTTCCCGNTGGAGATGTTGCGCCTGTAG CTGCTCCAGCACCTGCTGCTACACCTGCTCCAACTGCAGCTGTACCGAAGAAGAAGTCTAAGAAGTGAAG AGGATATATAGTGTGAAGCTATATCGATCATCAGTTCACGGATTAGACTCTGAAGAAGGTTTTGAATGTT TTATCGAATGCGTTTGTGGAATAACTTTTATTTTCGCAAAGAACATAACTTATGTCAGTTAATCTTTATG CTTTCAGATTTTTAGCTTACAGTGTTTCAACAGACCTACTTTGCAAGTTGTTCTTTTTTTGGTTT >gi|3449638|gb|AI099899.1|AI099899 34052 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135H24XP 3', mRNA sequence CCAACCANNGGTTTACCNGGCCTGGTCCTCTTANTGGTTGGTGGCCTCGNCCGGAATATCTACGACTTTG TCTTCATCGATGAAAATTGCCCACGNGCAATTGCCTACCACCGATTACTGAAGACGTCAAATTCAACGTT GTTAATCTGATGAATTTTNCGTGATTTGCTTTTTTAATTTGCATCGTAATGGGTTTCTGGCCGTTGGATC ATTTTTAGATGAATCTTTGTCTATTGATTGATCATTTATGTGTCTTTGGGTTTGTTGTTGGAGTTGTAAT ATCTCTGGAAGGCTTTTGTGCAATTGTATTGTACGGTTTAATAACTATAATTGAGAAAACCNGGGAATGT GAATTATGAAAAT >gi|3449637|gb|AI099898.1|AI099898 34051 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135H16XP 3', mRNA sequence GNTTTTCCCCGGNGTTAAAACCCTCAACGGGNTTGGCNAAGNCGNCCCCNAGCCGTCAGCAAGCTGCCAA TTGCCATTCAAGGTCCCGCTAGACCCTTAGGCTNTGGTCTCAACGCTGGCCCGTGCAGCTGGAATTCCTA AGGCNATGTGGAGTCAATATTCCTTACAAAATCAGCACCAGCACCAACTGCAAAACCGTGAGGTGATGAG CTAGCAACGGTGAGATGATGCTACTACCGGAAGTTTCGAATCCTTATTATATAATGGATGAGATTAATAT TAAATAAGATGTTCGAATGTTTGTTTTTAGAGTTTTTAATTTCTTGTCTTTTTCTATTGTGGTGTTCTTG TTATATGGGTTTGTCTGTACTATGTTCGCAGGCAACAACGTTATATGAAATTTCAGNGTACTTGANGTTT >gi|3449636|gb|AI099897.1|AI099897 34050 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135G2XP 3', mRNA sequence TTGGAATCCTCTTCAACCATCCAATCCGAGATTGCGAAACTGCGCCATGAAGTCGAGGAATTCGCTAAGC AGTTCCCAACAATTGGGTTTGAGAAAGAAACCATGAAGTACAAGAACTAAACTGTTTCACCCCACAAGTG TTNTNTGTTATGCTNTGAATTCCCATGGAATGTATAGATGATACATGTAAAACTCTATTTTCACGCTATC CGAAAAATAATGATCTGTTAAATTTTCTCTCT >gi|3449635|gb|AI099896.1|AI099896 34049 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135G20XP 3', mRNA sequence TCAATTTCCCCCATGGGGCTTTTGAGGCTTCAGNTCCCCCGNANATTTCCATGGGNGAAACCNAGGACTT GCTTNCCCCAGTGGGAGCTTCGACCCCATGGGCCCTCGCTACTNNCCCCCGAGGCTTTCGCCGGANTTGA AGGTGAAGGAGCTCAAGAACGGAAGGTTGGCTATGTTCTCTATGTTTGGGATTCTTCGTTCAGGCCATTN TCACCGGAAAGGGACCGTTGGAGAACCTCGCGGACCACTTGGCTGATCCAGTCAACAACAATGCATGGGC CTTCGCTACCAACTTCGTCCCCGGAAAGTGAGTTTAATTTGTGATCGAGTTGTGTGTATCCGGTTTGTTG CATCTTGGAAATGTGATGCAGATTTCATATCTTGTAAATTACTTTGTATGTGTGTGAAATATTTAAGAAG CTTTATGAT >gi|3449634|gb|AI099895.1|AI099895 34048 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135F6XP 3', mRNA sequence CCCCTTGGAGGCCAAGAGGNAGGGCCTGNGNCCAACCNGCTTAGAAGGGCCTAGGAGGAGAACCTGGGGT TGACCAGCTNTAGAAGAGCCTAAGAAGGAAGAGACTGGTGGCGAACCCGCTNTAGAAGAGGCCAAAGAAG GAAGAGACCGAGGCCAAAATCTAAAGAGTCCAAAAGGCATTTTTGTGGATTGTGATAGTTTGGGTTCTTG AAGTTTAGCTTCTGAGAATTTGTGTTGTTTAATTTGGATAAGTTAAGTTGTGTGGGGGAACTCTAGAGAA AATTTTGGTAGGGTCTTTTTTTTTATAATATCTCTCTGTCTCTTTTTTTTACCACATACTCTGTTGCAAT TTTTAGGGTTTTGGGGTGTCTTTTATTTTTTACGAGTTGTACAATTTCATTATTGGTTTAAATCTGTCTT TGAATT >gi|3449633|gb|AI099894.1|AI099894 34047 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135F5XP 3', mRNA sequence CCNTGGTTCAATGGGGNATTTCTTTCCGNGNAACCCCCGGTTTTCCCATTCGTCCCTCGAGANCCTCATG GNGTTGGGGCCCAGTTTCCAGCTCTAGTGTCTGATCTCACGATNCAGATCTTCAGCAAACCACGCCACGA GCTCANGCAGAAACTCGAGAGCTTGCAGAGCTTAATGGCTAAATTACGACCCCAAATCTAAAATTTATAC TCCCAATAAGAAGTGAAGCAGGGCAGCTAATTCTTTGATGTAAATAGCATATATAGAGAAATGTGAGAAG CGGCGGGGAATTTTTTTGTATCCTTTATATATAATGTGGAAACGAATTTTTGTGTATGTCTCATGAGTTA TGAGCAATGCTTGTACTTGCTATCACCCAAAAAGGAACTGTCTTTTTGGATTCATAAGTTTCGAGAAATT TTTGC >gi|3449632|gb|AI099893.1|AI099893 34046 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135D2XP 3', mRNA sequence CCCCTGNGGGGAACCNCAATCCGGGNTNACGTCGGGGGGATTNTTACTNCAATTGTCGACGTGCCGNTCA GGCCAATCCTTTACTCTCGTGGCTGCAGCGCCATCACTCGTTGCCGGCGCTCAGAATCTATCCACTGTCA GTCTCACTGTAATCTTTTTTCTTTTCTTTTTCTGATATATAATTTTTCAGAAATTTCTCTTTTCTTTTGT TACCGGTTTATATTTCTAAGTTCATTGCGGATTATTAGAGTTTCATACACATGTAAATGTTTCTGGGAAT TTATCTCTGTTATTGATGTAAGTTTGTTTACATAAACCAGAAAAAAAACTATGGAATAAATACATTATAA TTAATAGTATCATCACTCATAAACG >gi|3449631|gb|AI099892.1|AI099892 34045 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135B18XP 3', mRNA sequence CCCCANTATTCAAGNTTTCCTTTTTAAAAATTGAAATNAANGGAGGGNCAAAGCAANGGNGAGAAGAAGT GAACCNAAATAAGGATCGTGGCGTGGAATCAGAAACAAAACATCTCTAACAACGATCCACATCACTTCCT CTTCTTCAATGTCGCTCNTCTTCCACTTGTGCATCATTATCTTTGCGTCTTCGTCAAGTCAAATTGTTTC CAAGACCCTTTTAGATCGTATCATACTCCTCTTTGTTCCCTTTTGTTGTTAAGTGAAAAAATGGGTTTTG GTAATTTAATTGTTGTGCATACATTTTCTATTTTGTTATTCTTCCGTTAATGTAATGAAAGAGTTGTTNG CATNTAAAACAAAGTTCAGTTT >gi|3449630|gb|AI099891.1|AI099891 34044 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135B11XP 3', mRNA sequence GCCTCGCCGGATTCGGGAGCTTTCAATNTTNGAAACANCGTCGTANCACTTTCATTGCGTTGTGGGATGT TGTTGCAGCTCATTTTCTCCTCGTTTGAAATGATTATTGAATTGGTCAGCCTCGATCGTTTTCTTGTAAT TTACTTTCATATTTTTTTTCCCTCAAATTATTAGTGGTCATCATTTTATAATATTTGAGTTTGTGTTTGA TGTACGATTCAGACATTTGTTTGCATTATGTGCTTAATAAGTTTATCGTTGACTCTACTTGAAGAGAGAC TTTGTATGTGATGTAAATNTCTTCT >gi|3449629|gb|AI099890.1|AI099890 34043 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135A3XP 3', mRNA sequence CCTGGATNTNCTGAGNCGGCTAAAAGGTTGGGTTTGAGNTAGTTGAAGGAGAAGNATCTGGCGANTCCCA CCGNTGACCCGTGTGNACTAGGCTTAAGATGGNTAGGCTTGCTTATNGGAGGAATCCACATTGTGGTTCC AGATTTTGTCCAGCGGTTGGAGTTGCTCCTAAAGGAACTGTTGATGTTCATGAGATGTTGTTTAAGACTG CTGATTATTTGACCAGAGGAGGTGAAACCGGAATATTCTCTCCGATGCATATGATTCTCTGCAGAAAACC GGAGTCACCGGAGGAGAGTTCTTGAGAAAGGTAGAAAGGAAACATCACCGGAAAAAGTATGGAGAATTTT CTCAATTTGTTTTTATTTTTAAGTTAAATCAACTTGGTTATTGTACTATTTTTGTGTTTTAATTTGGTTT GTGTTTC >gi|3449628|gb|AI099889.1|AI099889 34042 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134M20XP 3', mRNA sequence GCCCAATGNATCTTCTGAACCCGCNGNCTTCCGTGGCAATTGTTTTCAAGCACGTTCATGAGGGCGTATT CTCGAGTATATGGGCCAATCAANGATCTCCTGTCTGCAGAAAACCCTGCTAAGTATAGAGACTGCACCCT CACCGAATTTTCAACCATCTTCAGCTCAAAAACGCTCGATGCTCCTAAGTTACACCATTTCAAAATCTAA GACATTTGGGTTTAGNCCTTTTTTGTCTNCTAATCTATCAAACTCTCTCGGTACACNATGAAAACTGGTN CTTCAT >gi|3449627|gb|AI099888.1|AI099888 34041 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134M11XP 3', mRNA sequence CAAGGCCCANGTTAGATTGCNGGNTACCCACCAGGTGCAACGGGGTTAAGAACTCATTGAATCATGCTTG GTGTTCATTACTTTATCGGTATGCTCTTCACCTTCCTTGTCCCAGAGCCAAAGGGCAATAGTTCCACTCG AAGAACATTTCTGGTGAAGCTGAAGTTAGCCATGACGAGAAATAATTATGTATTTNTATTTTNTTATTTG GAGTGCGATATTTGGTTTTGTTNTCATTTTATTGGCTCGTTGACCTTAAGTTATGATGTTATAAGNATAT TGATGATANCANTTAAATCTGGTTGAATATTNCG >gi|3449626|gb|AI099887.1|AI099887 34040 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134K3XP 3', mRNA sequence AAACGACCAAGCGAAAAGCGGTATGTTNGCNTTTCGAATGTTGTTGTCTTTACTTNGATCTGCTTGTCCT NGTAAANGCAGATTAGNGATCTCTTGAGTTACAGCTTACAGGGATTGAAATTTGGNCTCATTTCACCCTG GTTATTGACAAGAACAGTGAGGTCTTGTCTTGTCCACTTTTTACCCGGGCTTGGTTTATTTATCGCCTGG AACTGTAAACTATTCTGAAATGTTGAACTACTTTTTAGTGACTTCTCCGGTNGATTTTTACATCTCGTGT >gi|3449625|gb|AI099886.1|AI099886 34039 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134J7XP 3', mRNA sequence CCCCTTTTGGGAANCTTTTTCCCCCTTNNGTTCCCGTTCCGNATTTCCCGGTTNGCCCCCCGGGTTCNGA CNTAAGCTTNCCTTNGGNACCTTTCCCTGGAGGTTTGGAAGGCGAATCGCTNGCACTNGCATGCGGACCA CCGCCCTATGATTCAGTTTCGTTGCAGCCAAATCTAGAGAAGATGGGTTACAACGTGAAGGAGGATCTCT TAATCTTCTAGATTTGCTCAAGTTCTGTGCTATTGGAAATTCGAAAGTTGATAACAAGTATCGCTTATGT GTGTATATACATGGTTATTTGGGCACTTTTGTTATAGTTGTTGTTTATCAGAGCTCCAAATTGTATATTG TATAAAATTGTGTTTAATT >gi|3449624|gb|AI099885.1|AI099885 34038 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134J3XP 3', mRNA sequence AAATTTGGGNTGTGGANTGTTGAANGGNAAGATAGACTTGGGAGGAGATNGTTAGGGNATCAATTNCCAG GGAAGAAGCTTGAGGAAGTTGGTGTGTGGTGGTTGCTGATGTTATACTTGGAGTTGAAGGAATGATTGAT AGTATGAACAAGAGTAAGGAATATGGCTTCCTTGGTTTCAGGAACTCCAACAACTCTTTTATCTCTTGGA TTGACAAGTACAAGGCGTTCAAGATCGTACCTTGATTCCAAAACATACTTGGATGTTTGTTTACTCTGGT TTCATGTTTATGTTTCTCCCAAAATCTCAGTTCTTTGTTGTCTAAATGAAATAAAAGCGGTACCATCTTT TTCTGTTCTTTTTTTTAATTCCATCTTTAGTCTTGTAAACTCTACTCTTTTGGGAATNGTTTTCAATTTT T >gi|3449623|gb|AI099884.1|AI099884 34037 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134I16XP 3', mRNA sequence TAGCTTGAGAAGGNGGGCATCANNGATNAGNGNTACAAGGGCCTATGNTACTGTTAAAAATGCNCCACAA AGACTTNCTTCAAGCANCAAATCGCTTCANGACTTGAAGACGNTTTCATGTAAAAGCTCTGAAGAAATGA GAAACAAAACAAACCAAGTCGGTAACATTCTGCCAGAGATGATCTGGTACCGTCCTTCAAAGAAGGCTTA TGATGTTCTACTCGCCTTAACTATGATGTTGATGGTTGTCCGGTTCTATGTTTTCTTTAAAAAAATCTTG AATACCTAAAACCCTAATCTGGTTCTTGGACTCCTTGGTCCATTGAAATGTTTCAAAAGGATTGAATCTG ATCTGTGGGAAAAAGGAGAGCATTATA >gi|3449622|gb|AI099883.1|AI099883 34036 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134I12XP 3', mRNA sequence GGCACANTTCCCTATAGGNGGTTTTTGNGTATCGTGNCAATGGTTCCNCTCTTGGGAGAAGACCTTGNCC TTTTGGTGTCCTTAATGCGAATCTTTCGTGCTTGCTTCAACGGTTTGTTTCAGACGNTAGAGAAGCAATC AGGGAGGAGGATACATGCTTCGGACAAGGTAGAGCAGAAATAAATAAGAGAGAGGCAATAGCAAAAGTAA AGGAGAAGGTTTTCCTCAAATTGGCATTTTCAGNGTTTGCGTGAGAAACAAGGGAAAGCTGATGGATCTT TTTATGTTAGGGTTATTATAATAGTCTTAATGATCAGTTTCCATGTTTCTAAGGTTTTGTTTGATTTAAG TGGTTATTAGTCAGTCTACTTACACTACTTTTATTTTCATTTTTGTACGTTTTCTATTGTTATATGTGAA TTCGGATCACATGTGTTTGGAC >gi|3449621|gb|AI099882.1|AI099882 34035 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134G13XP 3', mRNA sequence TGAAAGGGAGGCAANTGATTTTTCCACTAGCAAACCTNTTGNCNTATCCATTTNTGAGAGAAGGACTTNT GAAGGGAACACTTGCTTTGAAGGGAGGCTACTTATGCTTCGTCAAGGGTGCTTTTGAGCTTTGGGGACTT GAATTTGGCCTCTCCGAAACTAGCTCTGTATGAACCAATCCATCATCATCATCATCATCATGACCATCCA TCATCATCATCATTATTATCATCGTATATNATATATATCTACCCCATATGTAATTTGTAATGTGCCTTTG ACTGTGATGAGTTATCTCTCCCTCTCTACCAACTTTCTTCATATATATAAAACAAAAAGGAAAAGCNGAT GATATNGATCTTTCGT >gi|3449620|gb|AI099881.1|AI099881 34034 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134D5XP 3', mRNA sequence CACTTTTAGTTCCTCGAATNGGTTCCAGNACANTTCCAGGGCTTTATTCTTGGGAGNAAGATAAGTTGAA CGATGGANCTAAAGACTTACCATGACTCGCTCTTTCAAGGACTTGAAAGAGATGTGCAAAACTCACTCTT GCGATCTCCGGATGGGAGCTTTCACACTCGGTGTTAATCGTGTGGCTCAAGCTACCATTCTCAGAGGCTG GGGAGCTTAAAGATTATCTAATCTCTTATGCAATCTCTTTAGCAGCTCCTGAATAAGAATTGAGCCAAAC TTTAATCTACTTTTTGTTTTATCCTCCTACTTTGGCTTAGAGGTCATCCTGAGTTAACAGATATGTGTTT ACAAGTACTAGAAGACGCTTCTGTATGTAATAAAACCTTGGACTCTAATAGTTNATGAGCTTTTTT >gi|3449619|gb|AI099880.1|AI099880 34033 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134D1XP 3', mRNA sequence CAACCTTTAAGGTGAAGGGATANTAGTAGTGACCTCATGGGAGGTGTGATCCGATCTCTCTACGNAAGAG CTTCNTCCAAGTGCAAGAAAAGTTGNAAAGATACTCAATACATCGGTCAATGTGTTCCGTTTATTCGACG GAGACAAATGGACCATCCAAGTTTGGGGTGATGTGAGTCATCTGGAGGAAACCGGCTTCTTACAATCAGG TTTTGGTGGTGATAGAACCTCTGGTTAGAGAGATTCTATACTCTTAGTCTTCTTCCCCTTGGAAGAGCAT TTATGTAATTTAAGTTTCACTCCATAACTTTTCAATTTTTAACATTTGACCCCATTACTTTGATAAAGTG ATTTGGGAGGATTGATAAAGTAAATTGCTATAAATTTCTAC >gi|3449618|gb|AI099879.1|AI099879 34032 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134C20XP 3', mRNA sequence GNGAGTTTCTGAATNGGTTNNGANCTTTACATCTNTGGCCNCTTATGTTNCGAANTCTCCAAGAGNGCTT ATGTCNACTTCCATGGATCTTGATTGGGGAATGTATCTTGGAAAGGAAGAGACAAAGTACGAGGAAGGGA AGAGTTGGGGAGTGAAGTATTTCAAGAACAATTTCGAGAGATTGGTGAGAGTGAAAACAAGCGTTGATCC AACAGATTTCTTCTGTGATGAACAGAGCATTCCGCTACTGAAATCCGTTGACGACATCTAAGAATATCCT TTGAAGTTTCATGTACGAGTCCTTTTCACTGTGAAATCATCTGTTTTTGTTTGAATAGTTATGCTTCAAC TGTGTAACTTTTTTCTGTTGTTGTGACATATTTGCGTACGTTGAATAAAGATTTCATGGTTTTTATGTTT >gi|3449617|gb|AI099878.1|AI099878 34031 Lambda-PRL2 Arabidopsis thaliana cDNA clone 133P20XP 3', mRNA sequence CATGGNCCGTNTATGGATGATAGTTTCCCAGTCCGGTGATGTGGAGACACGTATCCAAGNCCTTGGGTGT GCTCCTGACTTANCCGTCAAGCAATACATTGAGGCCCATTNTGGTTTCCAATCTGACTTTATGGGACCAG TGGCGGCTGTACTCATCGCTTTCACCGTCTTCTTCGCCTTCATCTTCGCCTTCTGCATCAGAACTCTCAA CTTCCAGACCAGATAAAACCATCTCTCAAACAACAAAGTCTCTTTCTTTTTTTGTATCCTCTGTGTTGTT TATATGCACTATAAGCTTTGTATGTTCTAAATATGTATTGTAGTGTCATAACGAAATTTTTTTGAATATT TTTATTTATTGTCTTATAGATGATGACGAATCGGAATCATGTAATATAATTCCACTT >gi|3449616|gb|AI099877.1|AI099877 34030 Lambda-PRL2 Arabidopsis thaliana cDNA clone 133O17XP 3', mRNA sequence ACCAATCTGGTCGGTGCTTNCCAAGTCTNTTTGCCAACCCNTCTTTNCCTTCGTCGAGAAGGAAGCTTCT AGGTGGTTTCCAGAGAGCGAATTCGTCACAAAAGAGATCAAGATCCAACTCTTCCCGGGGAAGCCCTTTA ACTTTGAATCTCTTCAGGCTNGTATGGAGGACGTTCTTCGTGATGACAACAACGTTGATCTCAATGTTAA TGCCTTTCTTTAACGATGTAGTCGGTNTCTTGGGGGCNATTGGTTTTTGGCNTTTNNCGGTTTATTTCCN NGTGGAAATGTANATTGCCACCACGATAGAATGTTCCGAGACTGGCGCGCACAAAGTGGGTTTGTCTACA AGTCTTGAGTGTGANATGTCTTTTTGTGTC >gi|3449615|gb|AI099876.1|AI099876 34029 Lambda-PRL2 Arabidopsis thaliana cDNA clone 133K4XP 3', mRNA sequence TCCCCGNTTTGCCCTTTTCCTTCGGNTCCCTNNCTTGGGGGGTTCAAGGGATTNCNTTCAAGGGGGGTTC CGGAAGCTTACCCCCGNGGGTNGCTTTGACTNGCCAACTCTATTGTAGNGCAGGCTCTTGGAANGCATGG TATCATTGCACTGAGGATTTGATCCACGNGATTCTAACAGTAGGACCTCATTTCAAGGAAGCCAACAACT TCCTTTGGCCATTCCAGCTTAAGGCACCACTAGGTGGCCTCAAGAAGAAGAGAANATCCTACGTGGAAGG TGGTGATGCCGGAAACCGTGAGAACTTCATCAATGAGCTTATCAGGAGGATGAATTAGAATGTTATCGTT TTCAATGTCAAACTTCTCTGCGTTTTCATTATGTGCCTCCTCCTGGATTTTGATCTTCTTTCTCAAGTTA AAAGACATTTTGAATCTTCTCTTTTGTTCTCTTTGGATCTTAATTTGTGCTTTGATTACTGCAAGTGATT CTAC >gi|3449614|gb|AI099875.1|AI099875 34028 Lambda-PRL2 Arabidopsis thaliana cDNA clone 132M15XP 3', mRNA sequence TCAGCATGTCCTTCCCTTGTTTGGCTGGCNCAGGAGAGGGNTCTCTCCNCCAGAGGCCGAGGGAAGTGAA GAGGCACTTTGCAGCCCTGAGGAGTCCAGAAGNGCACCCNCNCCTGAGAAAGATTGCAAGCCGTCAAGAG GTCGCAGTCTTGATTCACACATTGAGGACCAATTTGCAAGTGGACGTTTGTTGGCTTGTACCCCTTCAAG GCCTGGCCAGTGCGGGCGTGCTGATGGATACATCTTGGAAGGTAAAGAGTTGGAGTTCTACATGAAGAAG ATCCAGAAGAAGAAGGGCAAGGGTGCTGCTTAGAGTCTCTTCTTATCTGCCTTGAGCTTTTGTCTTACAA CATGTTTTGAGTTTTCAGTTTCAATTGTCTGAGAAACTATGTTTTTGGATTAGCTTGTGGTATTTCTTTG AAACTCCCATTATGGTACAATGTTTTTGTCTTGGATTTTCTTTATAATTTTAATCGATAATTTC >gi|3449613|gb|AI099874.1|AI099874 34027 Lambda-PRL2 Arabidopsis thaliana cDNA clone 132H23XP 3', mRNA sequence TTTGAGNTAACTACCCTGTTGTTCCAGNTGCTAGACCNCGCCNTNAGTTAGGCCANCNTCNACACAACCC CTCAACGGTTAACTTCAATCATCAACAGCNCTNTTGCACGTTTAAGGCTTAAAGANGAGCAAATCACTTG ACAGAGAAGAAGAATACGACGGCGCTTGAGCTTTTGTGAGTTTAATGAATCTTCTTTTTGGTTAATGAAC CTGTTTTTGTTGCCTCAAAACACCACAGGTTTCTCTGGACAGAATCTCTGATATTACAGTTTCAAAAGGT ATGTTCTTTTATTTCATGTTGGAATCTTCTGTGTAATCTTAAGAAGCTTTAGGAGGTAATGTAAAAAACC AGATTCAAAGTTATGCCCTTATGTGAATTCTTTTGTACATGGGATAAACAAAATTTACAGGTATCCTTTT TGTTCTTGTTGT >gi|3449612|gb|AI099873.1|AI099873 34026 Lambda-PRL2 Arabidopsis thaliana cDNA clone 132C22XP 3', mRNA sequence TGGCTAGGAATTGACTCCTTCCCGAACANTGGNTCCTTTTTTGAATTCGNTTTGGNGCNCGGNTTTTTNN CCCGTGNGCNCGNAACACTCCNGGTACTNTGATGGNCGGTACTGGACATTNTGGAAGCTTCCATTGTTCG GATGCACCGACTCCGCTCAAGTGTTGAAGGAANTTGAAGAATGCAAGAAGGANTACCCTGGCGCCTTCAT TAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGC TTCACCGAAGCTTAATCCCCTTTCTGGAATATTCAGCGTTGATTATTCTGGAACCCATTTCTATGTGGTC AATGCAAATTTAAGAAATTATTTGCCGACTTAAAAGTTGAGGAACTATTGTTTGAAAGTGAAAATGTTAT TCCTATCAGTTTCTCT >gi|3449611|gb|AI099872.1|AI099872 34025 Lambda-PRL2 Arabidopsis thaliana cDNA clone 132C16XP 3', mRNA sequence TCCCTTGTNTTGAATTGGAGTTNGNGCCCGGTTTTTTGTTNCCNTGAGCACGGAAACACTCCCGGNTATA CGATNGACGGTACTGGACNATTNTGGNAGCTTCCCNTTGTTCGGATGCACCGACTCCGCTCAAGTGTTGA ANGAAGTTGAAGAATGCAAGAAGGAGTACCCGGGCGCCTTCATTNGGATCATCGGATTCGACAACACCCG TCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAAGCTTCACTGATGCTTAAATCCTTTTCTGG AATATTCAATGTTGACTATCCGGAACCCAATTTTGTATGGTCAATGTAAATTTAAGTAATTATTTTGCCA AAGTGAAAAAACTGANGGTTTGTTTTTCTATCGTTTCCTC >gi|3449610|gb|AI099871.1|AI099871 34024 Lambda-PRL2 Arabidopsis thaliana cDNA clone 132C14XP 3', mRNA sequence CCCGGGCCCCCGCAGGCCCTTTGTTCGCAGCCTTCNTTTGGGGGNNGCAAGCAAGNTTATTCCCCGGAAA TNTGGNACTCAGACGATTCAACGAAATCTCATTTCTTGCAAACTCAATGCACCTTCTCTAACATACATCG ATCAATGTCCAACTCTATTATCTTACTCTCGATGTATGGAGCAACAACAACCATTAGTAGGCATGTTGCA GCCAACAGAAGAGGAAAATCACTTTTTCGAAAAACCATGGACCGAATATGATCAATACAATTACTCCTCT TTTGGTTAACTAACATATCGTCAACGCTTTGTATTTCTACTTATTCGATCTACCAATTTTTTCTCTCCCA ATACAACTTCAGTCTGATTATTGCCTTCTTAGATATGTCTTCGAATGTTATGACTATACATGGGTGTATA TAAAATTTGTGATCAAAGTCTTGT >gi|3449609|gb|AI099870.1|AI099870 34023 Lambda-PRL2 Arabidopsis thaliana cDNA clone 132B9XP 3', mRNA sequence TGAACCAATGGACTGGAGGACAATGCNACTTGGTTGTCGAAAGGCTCGGGGATTACCTTANCGAGTCTGA ACTCTNAAACCAAGGTTTCATTTCAGGTTCTGCTTAACTAAAGAGTGTCAATGCACTTTTTATTGTGATT GATTGTAATGCTTTCAAACACAAATCATTTGTTACTTTNGAACCAATTGTGATTGNTTGGTCTCCTTCGT TACCGAGTTTGAGTTTGTGTGTTCTTGTAATGACATTTGATCATCTTTTTTCTCCATATGTATTGAGTTT TGATTTTTGTTTCTT >gi|3449608|gb|AI099869.1|AI099869 34022 Lambda-PRL2 Arabidopsis thaliana cDNA clone 132A2XP 3', mRNA sequence CTAGTTTGGGGGCAAAAGNTCTCCTTNNCTTTNNAGNTTGGGNTACCCAACCNGTTCATGGGCCTTATCC GGCTCTGAGGCNCTTCNCCTTACAATCNTCTTCAGGGCAAGTTCTTTGGGGACATTCGCTGCCCCATTCA CCAAAGAGAGGATTGCTCCTCAAGTCTTGATCCTTGGAGGAGGCTCTTTGCTTACTTATGTCAGCGCTAC CTCTACCGGCGAAGTTCTTCCCATCAAGAGAGGTCCTCAGGAGCCGCCTAAGCTCGGTCCTCGCGGCAAG CTCTGATCTATATTCATGTTACCTTTCTCTTCTTCCTTCTAAAACTCNTCAACATTTCTCAATACTGCAA ACCCTTTTAAGTAATTTTATGTATATTATGTTTATCTGTTACATTTGAAACGTTTTTTCTTCCCCTAATT TTACAAAAGAAATCTTTTTTT >gi|3449607|gb|AI099868.1|AI099868 34021 Lambda-PRL2 Arabidopsis thaliana cDNA clone 132A15XP 3', mRNA sequence ATTTTCCANCCAAATTGGGAAGCGGNANCCNCAGGAACATGCTGTTCACCATTGACTTCTCCNGGGNCCG AGCATTTAAACAATTGAACCCAAAATGGATGGTTGTAATAACGACCCCTTGTGAGAAGTAAGGAATGANG CCCCGGCTCATCTAGTTTTGAAGTTATGGATCATCATGCCCAGTGTTTCATTGATGTATATTGCTTCATT TTATTCTTCCGAGTCTCTTAATCTGATTTTTATCCAATACATTACTTGGCTTCTTTTTTTCTTTTTCGGA AACCAATAGAGTTGGGTTCTTACTTTCTTAGGATCGATAGTCTTAGGAAGATGCTTTTGCATTGACCAAT AATGTCAAAACCTTTGGAAT >gi|3449606|gb|AI099867.1|AI099867 34020 Lambda-PRL2 Arabidopsis thaliana cDNA clone 131N6XP 3', mRNA sequence GAGCCACANGNTCGTNGTTGAAGGCAANCGTGGAGGACACANTTCAANGTTTTTCCTCCTCAAACTCGTT CAGACAAAGCCAGCTGCTAGCAAANCCAACTCCCCCAAATCTGCGAAANCAAAAACTCTCCGAGTGTNGT ATCGTGCTTATTTCTCTTCTCTTTNCAAGTTTGGTGAAAAACACAGTCTCCTCTTTGCTTCATTTCTTCT TTCTTTCCCCCTTATGTAAATGAGTTTAGTCAGAAGTTTTTTTATATAGT >gi|3449605|gb|AI099866.1|AI099866 34019 Lambda-PRL2 Arabidopsis thaliana cDNA clone 131M22XP 3', mRNA sequence TTGCANCTTCCCAAGCAGGCGTTTGATTGANTCCNCCGCTGAGTTGGTTCCATTGGGTGGGGGATTCATA CCAGGGNCNNTCCACTGATTTATGGCAGCTTTCTTNGAGACANTCTCACTCTCTGGACTTCAGATATGAC TGACGAAGCAGGAGATGAGATTAAGGAGGCATCAAAGCCCGATGNTGCCGNGTAANCCCGAAGAAGAGGA AGAGTCATTTTATAATGGTAGAAAACTTTCATGTGATAATCTGAGTGAGGGATAGCTCAGGATTCTTATA AGAGACACAGTTTTATTGTTGTTTGTTTGTTTTGAAACTACTTGCGATTTATCATTCCTCCTTTAGCTTC CTCAATATTTCCTATTCTCCTTTCTAATGAAATCAAAACTTGGTTATTTCTGATATGGTAGTTGTCTTTA TTTTCT >gi|3449604|gb|AI099865.1|AI099865 34018 Lambda-PRL2 Arabidopsis thaliana cDNA clone 131K21XP 3', mRNA sequence CCGAAGCANTTTGNTGGAATGGGATCCTTNCTTTNTNTTCAGGCGGATAAGTNCTGAGACCNTTGGCCTA CGNGTCAGGAGCTTTACNCCATGGGCTCCCAACAATGTTAGTGAGTCAAACCANGACAAGATGTAACAGT CGTCACANACAATGGCAAATCTTTCACATGTACACTCCGATTTGACACAGAGGTGGANTTGGCTTATTTC GATCACGGAGGGATTTTGCAATACGTTATCAGGAACTTGATCAAACAATAAATCTGGTAACACCAGAGAC TTGAGTTATATATCCCAAGGTTTGTTGCAATAAAAATGTTTGCAGGGATGAGGACGAGAATGACTTTAAT TTAAACTTTTGCTTTTGTTCTTCTTCGTCTCTTGCTTCGTGCTAGTCAATTGGAAACATTATCACTGTCG AGTCATTTTTTTTCTTTC >gi|3449603|gb|AI099864.1|AI099864 34017 Lambda-PRL2 Arabidopsis thaliana cDNA clone 131J6XP 3', mRNA sequence TCCGAGCATCACNCACTTGTGCTNGTGTTTGGTATGNTGAGGCAACNATTTAAGATACNCATGATATGAG NCAGACCNTGAGAAGATTCNGANGCTTAAAGATGATGCTGCTCGGGGACTCATCAATCACATGTTGTTTG TAGCAGCGAAGCTGACAGGAGGCAAGGTTAGCCAGAGATCCTGATGCAGTCTGGTTGCAGACTCTCCCAT TGTTATTCTCTCTCTATCTCTCTAGTCAATGCTTGTAGGCTAACAATGCAACTAAGTTGGCTTGAATAAT AGACTTGATCGAGAAGCCTCAGTGACTCAACATTGAGGATTTTCCTGTGCAATCAATCAAGTGGTTCTCT >gi|3449602|gb|AI099863.1|AI099863 34016 Lambda-PRL2 Arabidopsis thaliana cDNA clone 131G7XP 3', mRNA sequence CCTCAAAGGGCTCCCNCCAAATTTGGTATNTCCTCNACAGAATTCAATTTCTTCCCCTAAACGCGACGAC GACGACATTCTCACTGCTGCTGAAAAATACATGGAACAACACGGTACCGAAGCGTTTGAGCGAATGATCG TTAAGAAGGATAGTTATGAAAGAGGTAGGNGTAGTAGAGGAATCAATAATCACATGATCTTTGATGATGA CTATAGGTACTAATAAGTTCTTAAACCGGTTTAATTAGCTACTTTCAGTTTATAAGTTTGCTATGTGACA ATATATTGTCTGTTTCTATGGTTGTTATAATTTGCGTGGATTATGTATAAGCCCTTATTTAGGNCTGCTT ATTTTTGTGAAAAATCAAATAAACATTTTCTCTC >gi|3449601|gb|AI099862.1|AI099862 34015 Lambda-PRL2 Arabidopsis thaliana cDNA clone 131G1XP 3', mRNA sequence CGCTTNCGATGGGCTGGAAGAGATGGGGAGNGGATCCAGGACGCACCTGCGGATCTGATGCTGAAGNCGA CCCAGNGGTTGATGAAGGAGGAGATGATTCCGATTCTGAATCTAAGGCCGAGGAGCCCAAATCAGTNGAT AGCGAGGAANCCTCTGAGAAAGACGCCNCCGCTCATGATGAGCTATAGGTGAAAGGTTGAAGATTTGAAG NCCAAAGTTTTCAGTCTCTTTATTGTTTTATCGTTTTCTTTTGAAGTATTTTAGCATCTAGTTTGTCGGA GATAGAAACAAGTTTTAGCAAAACTAAAAGGGGGATACAATGTCTGTCAGATGCTCATTTTAGACTTTAA AAAACCATGAAGANGTTTTGC >gi|3449600|gb|AI099861.1|AI099861 34014 Lambda-PRL2 Arabidopsis thaliana cDNA clone 131F22XP 3', mRNA sequence TGACTCAGGAAGGGGAAACCCCNGTGGAGCTNTGGGNGCTTAGNTGAGATCATTTTCATGCTGGAAGGAG ACTTTGAAGTGATCGATGGTCCCTTAGTTGTAAATAAAAGCTGTGTTGGATTTTGCTGTTGGGGGATGGT ACAAGTCACACCTCAAGCTCTATGCATTGGTATCTCATGAGCCTCTCTTCCATAGAGAGTTTCTCTTTTA ATTTTGTCGAAATAAAAAAGGTGTGATGAAGTAAATAGAGGTATAATAATATCTATCTATTAAGTCTTGT TTTGTTCTTTCATTTTTGTATTTCTTTTCTATTTAAAAGACAGTTTATTAGTCTTCTGAGCTCTCTTTTT GATCTTTGTTATAGCGTATCATCACCCTCGAAAGTGTAATGTTTTGTACCCCCAAACTTGTTTAGCATTA TAATAAAGTCTCTTTGGAACT >gi|3449599|gb|AI099860.1|AI099860 34013 Lambda-PRL2 Arabidopsis thaliana cDNA clone 131D4XP 3', mRNA sequence CAATGAGCTTGGATTAGGGTATGGTAAGGAAGGNGGCTATGATAGTCTTNCCTGCTGGGACTATCATCGC TTNACCCGTNGACTCTGACACNTATATCAAGGCAATGCGGCTTTTCNTGGGTGAACCGGTATGGNCACCA TACAATCGCCCACACGACCATCTTCCTGCAAGGAAAGAATATGTCGATAACTTCATGGTCAATGCCTCTG CTTAGAGAGCTTCCTCTCTCTATATCTGGCTTTCTGAAACCAGGATCTATAAACAAGGCCTACAATAAAG AAAGCTTTCCTGTCAAGTATTGGATATTTATATATATTCCTGTGTAGAATGATGGCTTTTGGTATGCTTG AGTTGTTGTAAACTTAGTTACACTCTCTGATATGTCTCTCTTTACCATCTTTGTCGTATCCCATATACGA AAAGATTACATTGGGATTCAT >gi|3449598|gb|AI099859.1|AI099859 34012 Lambda-PRL2 Arabidopsis thaliana cDNA clone 130N23XP 3', mRNA sequence GCTTCCGGTGGNGCNTACGACGGNGCTTCCCGTGGNACATCCGGNGGGGAAGAAGGGGNTTTTGGAAAAG NTCAAAGAGAAGCTTCCNGGTTATCATGCCAAGACCNCTGAAGAGGAAGTGAAGAAAGAAAAAGAGTCTG ATGATTAAGCAAAATGGTTAAAGNATGAATAATGATGTGGGAGTGGGACATTCGCTGTGTTTTGTGATCA TTATCTTTCTCTTTTAAGTTGTTATTGTGGCTTTCGTTGATTGCATTTGATCCTTTATTTTGTAATTTCA TTCTATCTTTTATATAAAGTTTGCATATGGTTT >gi|3449597|gb|AI099858.1|AI099858 34011 Lambda-PRL2 Arabidopsis thaliana cDNA clone 130I19XP 3', mRNA sequence GTGGNGTTTGTTNAGACATGAAGGAAGGTGGTCATGGGGGGATCTCTCAAAGNAGACACNACTGGANGTG ACCTTTATGNTGGATTTGTCAAAGGCAAGATCGCTGAGAATGTGGAGGAGGCTGCTTTAGTGTAATTTCC CNCATAGGTACATACATATAGTGTGGTGTTTATTGTATTCCTGTCTGATAAATAACTAGAGNGATCAAAC CAGTAAGAGTGTTAAAGCTATAGATTTGCACAATTCTGGGTCAGNGTCAGAGCAAAGAGAAGCAAAATCA AGATGATGTACACTTAGATGTATCCTATGAGTTTTCCTTGTACATCATCTTCATACTCTTAATCTCAAAT ACTATGCATTTTTCTCC >gi|3449596|gb|AI099857.1|AI099857 34010 Lambda-PRL2 Arabidopsis thaliana cDNA clone 130E5XP 3', mRNA sequence AGTTTTTTGNGGGCCCNTTNAGCTTCGGGNCCCAGGAAATGGCCNTTGGGNNGGCCNGGNCTTTTTTCCC CGGTGGCAGTTCGCCCCATTGGTTTTGGCTCCCGNCCCAGGGCATTCGCTGAGTTGAAGGTGAAGGNGCT CAAGAACGGAAGATTGGCTATGTTCTCTATGTTTGGATTCTTCGTTCAAGCCATCGTCACTGGTAAGGGA CCGATAGAGANCCTTGCTGACCATTTGGCCGATCCAGTTNACAACAACGCATGGGCCTTCGCCNCCAACT TTGTTCCCGGAAAGTGAGCCAAGTTTTATCTGTATTTTGCTTCAGTCTTTGCTTCGTGAGTGTGAGAGGA GAAAGAGAGCTTGTTTAGATGTAAAATTTGCAAGACTTTGTATTTTTTTTCATTAATCAAATAACTCGTT TTTCTCTC >gi|3449595|gb|AI099856.1|AI099856 34009 Lambda-PRL2 Arabidopsis thaliana cDNA clone 130D20XP 3', mRNA sequence TTTCANTTCCTTGATGCTGCTTTTCNCGNTGANGAGTTTGAGTTAGAATCAAAGGCATTGCGTGTTGGTA AAGCTGTTGCNGTNCTGAGTGTGGAGCTGAGGAAGAAGACGACTGGTAAGATTATTGCNCAAGGTCGTCA TACCAAGTACTTTGCTCCTCGTTCCATCCTTTGATCGTTCAACCAACCTTTCTTCTTTTTTACATTCAAT AAACAACATCAAGGTGTTTTTAGTCTTTGTCCNATTTGCTTCTTATTATTATTGATNCTNATAAAACTAC ATTACTATATGTTTTTCTNATNATACANACAACCTTACTTTTTCTCT >gi|3449594|gb|AI099855.1|AI099855 34008 Lambda-PRL2 Arabidopsis thaliana cDNA clone 129O23XP 3', mRNA sequence AAAGGCCAGATCTTTTTCATTCAACCCTTTTTTCAGNTCCGCTTCNGCCCCTNTTGTCTTGGGNAGCCGA GTTCGNGGNTTGGGCTCTCAGATCCATCCGCAGCNGGCGNGCCATTCAAGGCACCAGATCTCAGCAATGT GATCTCAAAGGGTGAGTCATCGAGCGCTGCCAGTGGTTCAGGATGATGAGGAGGTTGACGAGGAAGGTGT TGAGCCCAAAGGACATTGAGTTGGTGATGACTCAAGCAGGAGTGTCTAGGCCAAATGCTGTGAAGGCTCT CAAGGCTGCAGATGGAGATATTGTCTCTGCCATCATGGAGCTTACCACCTAAACCAAAGTCTTTTCTACT TATATGTGGTTTAACCTGAGTTATGTGCCAGAGATTGTCCAAAGAATTCGGAAATTTTTGGTTTCAATGT TTTTCATGAAGTGATTTTCGATGTTGTATCAGTATAAACCTCATAAGTTTTTGATTTTCAGTTTGATTTT ATATTGAATATC >gi|3449593|gb|AI099854.1|AI099854 34007 Lambda-PRL2 Arabidopsis thaliana cDNA clone 129O20XP 3', mRNA sequence CTTATCCCAAGAGGTTCTCTCGACCNNGNTCCTNCGCCATGTCTATCGTNGTGCAACATCTCGCCGCCGG TCCATCTCCGNTGATCCATGAACCCAGCACGTTCCCTTGGACCACTGTTGCTNCCGGAGACTTCTCTGGT CACTGGGTCTACTGGGTTGGACCACTCATCGGTGGTGGACTTGCCGGACTTATCTACGGAAATGTCTTCA TGGGTTCTTCCGAACATGTTCCTCTTGCTTCTGCTGATTTCTAAGGAAACAAGTGATGATTCTTGATTCA TGTTTCTGTGTTTGGTTACTTTGCCTCGATCTTTCTTGTTTTGTTTGGAGTTTGGTCCGGTTTCGTTGTA ATTTTTATCCAATTTGTATGAATATTATTTAATGGATGGCTGTTTTGGTTATAAATTAACTAATGGATGT ATGAATATATAGTTTCACCT >gi|3449592|gb|AI099853.1|AI099853 34006 Lambda-PRL2 Arabidopsis thaliana cDNA clone 129G19XP 3', mRNA sequence AAAGNGCATTNGTGCAGCCAAGGCGGTTTGTNCATTGCTGAATTCGACACTTACTGCAACAGGGGGCCCC TTTTGCTGCATTCTCGNGAACTNCCAGCGAGAGGNTGGTNTCGACATTCCTGAGGTTCTGCAGCCGTTTN TGGGCGGAGAGACGTTTTTGCCTTTCAAGGCCAAGCCCGTACTTGCTGATNCCAAAGGGAAGAAATCGAA AGCTTGATTGATGTATTGATTCAGATTAACGNCTCTTCTGTTTTCTTGAAATTGATGAAACACTTCGATA AATTTCTTTACTTTGTGGAATTTTTTTGGACTTCTGTTATTTTACCAGGACCGTTATTTATCATCTGATT TCTGCTNGTATTTGTTC >gi|3449591|gb|AI099852.1|AI099852 34005 Lambda-PRL2 Arabidopsis thaliana cDNA clone 129E7XP 3', mRNA sequence AAACATACTCTTGGGTTAGAGAGGGTTTGGCCGTTTCAGGTACCCCGGTTCCCCCGGTGACCTTNTTCNA CCCCTCTTGGNTTTGGGAAAGATGAGAATCACTGAAGGAGTTGAAACTCAAGGAGGTCAAGAACGGTAGA CTGGCTATGCTCGCCATCCTCGGTTACTTTATCCAAGGACTNGTGACCGGTGTGGGACCTTATCAGAACC TGCTTGATCACTTGGCTGATCCCGTCAACAACAACGTCTTGACCAGCCTCAAGTTCCACTGAGGTGATCA TCATCTCATGTGTTTTTATGTCTCTTGTATCGTACAATATTTCCATCTTTCGCTACCATTGGCTTCTTCG TATTGTAACACCCTGTGTAAACATATTCGTGTTTTGTAAGAAATGACAATGTCAATGGCC >gi|3449590|gb|AI099851.1|AI099851 34004 Lambda-PRL2 Arabidopsis thaliana cDNA clone 129B18XP 3', mRNA sequence CCACATGGTTGTTTCCACCGCAAGGTTNTGTTTCACNGTTCATCACCAAATTNCCAGTGACCGGCTCCAG TGGCATCCTGAGAAAATGCATCGAGTGGGGATCATCTAAAATTCCACACTCTGAGGACGCGATCCAGGTG AGTCAGCACGCCGCAAATCATCTAGTCAGTGAAGCTTAGGAAGTCACTGAACAGACCAGAGTCTAAGAAA GTGCTGAGCAATCTCATTTACAACTATAAGCCTACTTACTGTGGATACGCAGGGATTGGTTACGACGAGG TTTACATCTTCACACAACAACGATCCCTTCTCTAATAACTATAACCTCTCCTGTGTATCCTCTCGTGTGT ATAGTGAAATATGTACCTTCGACTCTGTTATTATCTGTGAACTTGTTGTAACTTTGAACGTCAGCCTATG GCTTGTGTTTGACATTAAACTAGATAATGTACGCTTTTCTNTCTT >gi|3449589|gb|AI099850.1|AI099850 34003 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128O23XP 3', mRNA sequence TGGACGCTGNTGTGGTTAGNAGTCAGNCTGTTGATATCCTCCCTCTAAGACNTNTGACCCAGCGATCTTC TTGCTTACAACTGGTNCACNTGAAGCTGCCTTTAGAAACATCAAGACANTCGCTGAGTGCCTTGCTGATG AACTCATCAATGCTGCAAAGGGATCTTCCAACAGCTATGCCATCAAGAAGAAAGATGAGATTGAGAGAGT TGCTAAGGCCAATCGTTAAGGGATCTCCCTTTCCTCTAAGTTTGCATTATATCAAAGNGTTTTTGTGTTG TTTCCATTAGCTTTGGATATGTTTCAGATGATCTCTCTATCTTTAATGAAATTTTGACGCTTATAATCGA CTTGGGATCTTGATCATCAAACGGTTTCATATTTAAAATTATTTCATCT >gi|3449588|gb|AI099849.1|AI099849 34002 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128L9XP 3', mRNA sequence AGGAATCATTAAGCTTTTNNCCCCCNAGCTCANCGAAGANNTCAAGCTNTCTTCAAGAAGGTATTGGAGG GNGCACCCTAGTTTTTGTTCCNCAGGCTCAGTGACTTCCAATTCTTTGTTGGGGAGGGTATGCATGATGA CAGCACNNTGGTCTTTGCTACTACAAGGANGGTTCANCTAACCCAACATTTTTGTACTCGCTCATGGTTT GAAGGAGGTCAAGTGCTGAGAGAGAAGCTCTCGTTGGGTTACTGTGGTCGGTCGCAGCGACTCTCTAAGT TTATGTTTCTTTATATTGTCCTGTGTTTCGTCGTCGTCCCCTATTAAAATTACCTNCCAGTTTACTTTTC TCTCTTCTTGTTTTCTGTGTTGGAAGATTCTCAAGTTATTTATTCCGCAAAAAACGGTTTATCATTTACA ATTAGTTGAATTTTGGTCGTTACTTTTTGTGT >gi|3449587|gb|AI099848.1|AI099848 34001 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128L23XP 3', mRNA sequence CCCCCATCGTGCTANTGGCAGNCACTTGGAAAAGCCTATTCTCGNGNGTATGCTGCTTCCCTGCGCCTTG GGTCCGTCCTCCAAGTTCTGGCCCACCACAGGGCGTGTGGACAATGTATATGGAGACAGGAAACTGGTGT GCACTCTCCTCCCNGNGGNAGAACAAGTCGCAGCTGCNGTGTCTGCTTGATTACTGCTCTGTCCCATTGT GTTGTGTCCCTTTCTCTCACCACGCACTCTTCTCTTTCACATTCTGTCCATAGTGTTCTCATTATACGCT TTCTGTCTCTTACTCTNTTATTTCATTCGAATACA >gi|3449586|gb|AI099847.1|AI099847 34000 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128K22XP 3', mRNA sequence CCCNCCTTTTGNTCACCAGGCGTTGCAGGTTTCCTCGTGGANGCTTGGCTACTCNATGTCGAGGATTGGA GGAAATGGAAATGATNNTGGATGGNTTTATGAATNTGGTTTACTAAGTTGTGGTGAAGAATGCTTGTAAT TATGCTATGACGACTACAGGNTTGATGAGCCACATCTCGTTGCTTCTCAATCACTATGTTTTCTTAATGT TCACAACTTTGCTTGTGTCAAAATAAAGTCACATCATTACAAACATCTAAATCGCATCTTAGCATCACAT GACATCACTTCTAAATCGTGTTGTCGACCATGAGTCATCGGGTGTGTTCGTCTTTTTTTCTTTCATTTGG ATGCAATATCTTGCATGTTGTTTCTATTTGCTAAATCAGTAAGCGAGTTTGGTTGCAAAATAAGTTGTAT AAATAACTTGAATTTTTGTGCAAAAAGATTGATCCGATGCTGNNTAC >gi|3449585|gb|AI099846.1|AI099846 33999 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128I4XP 3', mRNA sequence TCCGTGCACAAGGTTTTTGCGCCCTTAGCAAGGGAATAGCTCTTCTCAAGCTAACCCTAACGTCCATCTT CCTCNTGTCGTCTACTCCTTCGCNTTTGGGATATCGAGTCCCATAGGTGTCGGGATTGGCATAGGAATCA ATGCCACTAGCCCAAGGAGCTGGTGGTGACTGGACCTACGCGATCTCTATGGGCCTTGCGTGTGGGGTTT TTGTGTACGTTGCGGTTAACCATCTCATCTCAAAAGGGTATAAGCCTCGTGAGGAATGTTACTTCGACAA GCCAATCTACAAGTTTATTGCCGTCTTCCTCGGTGTTGCTTTGCTCTCTGTTGTAATGATTTGGGATTGA TTTTTGGTGATATATACTTAGTTTCAATAATTAGTTTTTTTTTCCCAATCCCTTTGTTCATGTTCTTCGT TTTTATTAATTTTGCAGAATTTCACAATTCAATGTAACNGTTGTCAAAAAAGAATGTAAANATTTATGT >gi|3449584|gb|AI099845.1|AI099845 33998 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128E15XP 3', mRNA sequence AAGACACCGACCACACTTGTCCAGGNCTTTCCCCGGTCACAGCTTTTATAGTCCCAGAAGAACCTNCCAA GGGGGANCCTNCCAAAGGGGAACCTGCCAAGGGGAAGNGCAGCGAAGCCCCCGNGGCCAAGGNGGNTTTT GCAATCAAGGAGGCTTTTCGCAGTCAAAGAGGCGGCCTAATCAGCTCNGCTTCAGCNGNTNAAAGAGACC CGAATTTTTAAGTGTNCTTCAAGAATTTGAACAAATCATGGAGAGTTAGTGTTTCTCACTGCTCTAACTA TCATGTATTATCTACCTACCACTTGTTGCTGCTTGTTTTACCTGTAATAAGATATCAATATCATCCTCTT CCTNT >gi|3449583|gb|AI099844.1|AI099844 33997 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128D24XP 3', mRNA sequence TTGCNAATGATGTTGAACCAACAGCNGGCNACNACAACNATCAACNACAAGCTGCAGCTCATGGTGGCTA TGGCGGTGGTCACGGTGGCGACATNTACCATCCGATGATGTACGCTCGGCCTTATCCTGCAGTTAATTAT GCTCACCCTCCACCAATGCCGCCTCCTCACTCGGATTCTTATACTCATATGTTCAGCGATGAGAATCCAG GTAGTTGTNGTATTATGTGATCATCTTTTGTAATGTTATTTAGAATATGGACATGTATGCTTGTCTTNGT CTTATGTTTTTTTTTTTGGGG >gi|3449582|gb|AI099843.1|AI099843 33996 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128B7XP 3', mRNA sequence TGGAAGNGTTGGAGAGTTTAGTGAGGCTNAAGCCAGCNGAGCCAGAGATGTTCNAGTTAAAAGCNATCGA GNCAAAAGTGGAAGCNAGAGAGATTGGAAAGGATTGTGAAAAGCGANAAAGGAGAAAACNGAAGAGGAAT ACGCAAGTAACTATTTGAAACTGAGGCTGAGCGAGGCGGAGGCAGAGAAAGAGTATCTGTTTGAAAAGAT AAAAGNGCAGGAAAGTGGTGGGAATGGTGGTGAAGCGTCACAAGCAGTGATGTACTCAAAGATCAGAGAA ATGCTGCATGGATACAATGCATCGTCGCCAAGGGTAGATCCAAGATCAAACCAGCGAAATCCTTTCAGAT CCAATCCTTAGATGTTTGTATTGTCTCTCTTTGTTTGTATT >gi|3449581|gb|AI099842.1|AI099842 33995 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128A16XP 3', mRNA sequence TCTGGCCCGGCCAATTCTCCCGTNATTCAACGGGGNCCAATGGGTTTTTGGGCCCATGGGTGGGNAGCAA AATCCCGGNTCCCTACAAAGTTTGTGATAGGGGGGCTTGATCTGGTCTACTATATGCCTGGTGTGAAGGN ATATATACATGGTCCCCNGTTTAAGGAAGATGTGCCTTTGCTTGAAGAGCCTGTGGTCATGGAAGGNGTG GCTCACTTCATTAACCAAGAAAAGCCTCAGGGGATTCTCCAAATTATCCTTGATTTCATCTCCAAATTCT AATGTTGCTTTCCCTTAAATTACTCTTTTAATCAAGTTCCATAATAAGTTGAATTATGAGGATATACATC CTCATGTATGGTTGTATCATCCTATAACCTATATAATCTATGTATGGAT >gi|3449580|gb|AI099841.1|AI099841 33994 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128A14XP 3', mRNA sequence AATCCCGGTAAGTTCGATTGAAAAGAGTGNCNCTGGTCAGTCCCTCGNCAAGGCTGAGAAGTATCTCAAC GACTACGNGTCGTCACACTCCACCGGTGCTGGTGGTCCTCCTCCTCCGACGNGTCAGGCTGAGCCAGCAA GTCAGCCTGANCCGGCGGCTAAGAAAGACGATGAAGAGTCTGGTGGTGGGCTTGGGGGTTATGCCAAGAT GGCTCANGGTTTCTTGAGGTGATTTGATCTTTAATTGTTGTTCATCATTTTCGTNATAATAAATTAAATA ACTGGTATCGTTTGTGACTGGTTTATGTTGCTTCGTTTATGTTTATGGGGGGTGACGNGTGNGTGTGATA ACTTCTGGTGATCATGAATCTAATCCATCTTTGTTGTGNTT >gi|3449579|gb|AI099840.1|AI099840 33993 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127O21XP 3', mRNA sequence TTTCCCGAAACAANTGGGATCCCTTGGTGTTNAATCGGAGTTTGGNGCACGGATTTGTGTNCCGTGAGCA CGGNAACCACTCCNGGATACTACGATGGACGNTACTGGACAATGTGGAAGCTTCCATTGTNCGGATGCAC CGACTCCGCTCAAGTNTTGAAGGAAGTTGANGAATGCAAGAAGGNGTACCCGGGCGCCTTCATTNGGATC ATCGGATTCGACAACACCCGTCAAGTCCAATGCATCNGTTTCATTGCCTACAAGCCCCCAAGCTTCACCG AAGCTTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGCTCATTTCATTTCCTATTGTCTGTGTT CTTTTTCTCTTTATGAGACAATTTCTATCGGNTTGTCAAATGTCTGATTTATGNATATGTGATTT >gi|3449578|gb|AI099839.1|AI099839 33992 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127K5XP 3', mRNA sequence TTTCCAANTCGGGGNGTTTTACAANTTCCATANCGGGTACTTAAGNTTTGGNGGTNCATGCCANTTAANC TCATTGGCTGGGGAACTTCTGATGACGGCGAAGATTATTGGTTGCTTGCAAATCAAATGGANCCGAAGCT GGGGTGATGATGGTTACTTCAAGATCAGGNGAGGAACGAACGAATGTGGCATTGAACAGAGTNTTGTAGC TGGTTTACCTTCAGNGAAGAACGTATTTAAAGGTATTACCACTTCAGATGATCTTCTGGTTTCCTCAGTC TAAACAAGACGATGTGTCCCTACTTCTGTAATATATCATTTGCAACTGTGTTGTAAGTTTAATATACCAT TGAAAGAATCACCTTCAATC >gi|3449577|gb|AI099838.1|AI099838 33991 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127K23XP 3', mRNA sequence CCGCTGGTTGGGGCTTCCGGCGGNGTTNCATTGACCCCNAGCCGTTNCTTTTCGGACCCACCCTTCGTAA GCTGGACGTGGNCCCANCCANTGGGTTTTACTGGNCCTGGGNCCCTCTTTATTGGNTGGGTGNACTCNNC CGGATTTAATTCTACGACTTTGTCTTCNTCCGATGGAAAATGCCCCACGAGCAATTGCCTCCCACCGATT TACTGAAGACGTCAAATTCAACGTTGTTAATCTGATGAATTTTTCGTGATTTGCTTTTTTAATTTGCATC GTAATGGGTTTCTGGCCGTTGGATCATTTTTAGATGAATCTTTGTCTATTGATTGATCATTTATGTGTCT TTGGGTTTGTTGTTGGAGTTGTAATATCTCTGGAAGGCTTTTGTGCAATTGTATTGTACGGTTTAATAAC TATAATTGAGAAAACCAGGGTATGTGNNTT >gi|3449576|gb|AI099837.1|AI099837 33990 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127G15XP 3', mRNA sequence TTCCGAGAGNTTTGAAGAATTGGGGAGTNGAGTTTNCCAAGAANCCCAAACGATGGAAAAGNTTGAAGAN TATAGCCTTCATTAAGGATCCTGATGGCTACTGGATCGAGATCTTTGATCTCAAGACTATCGGAACTACT ACCGTAAACGCNGCTTGATCTCAAGACTATCGGAANTACTACCGTAAACGCAGCTTGATCTCAAGACTAT CGGGACTNCTCCCGGAAACGCAGCTTGAGGAAGTAGCGATTGCGCTATTTGTGTTCTTTTGCTCATTCCA CCCGAGTGTGTGCATACCCTTAAAGAATTTTCATGTTTCATCGAATAATCCCNACCCGATGGTCGTTGTT TATCAATGTGGTCTGTTTCTTG >gi|3449575|gb|AI099836.1|AI099836 33989 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127B23XP 3', mRNA sequence GTGGAATTTANCCGNGGGAATCGCACTTTGGGAAGTTATAGATCTGNCGAATCGCATTTGAATTCGAGTC GATCGNATCTATGCCTGAGACGTATTTGGAGAAACTANGNGGGATTAATTCTGATTGGCCGTTAACGNCG ATNNTGTTGAACGCGGTGGGAGATATGGTTTATGTACATGGTGCGGCGGAGAACGGCGGAGAGATTGTTG CGGCGGAGATTGAAGGAGGAAAGCTTTGTAAGTGGAGGACTTTGCCAAACGCAGNCGCTACTTGGAAAAA AAGTCACGCGGCTGAGAGNGTAATCGTTGCGTGTTCAAACGTTGGTTTTAGCGATTTGAAACTTGCGTTT AGGNATAATTTGAGTTTTCTCT >gi|3449574|gb|AI099835.1|AI099835 33988 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127A13XP 3', mRNA sequence CACGGNTTTGTGTACCNGTGAGCACGGAACCACTCCCCGGNTNCTTACGATGGCCGGTACTGGACAATGT GGAAGCTTCCATTGTTTCGGATGCACCGACTCCGCTCAAGTGTTGAAGGAAGTTGAAGAATGCAAGAAGG NGTACCCGGGCGCCTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAATGCATCAGTTTCAT TGCCTACAAGCCCCCAAGCTTCACCGAAGCTTAATTTCTTTTCTAAAACATTCTTATGAATTATCTCTGC TCATTTCATTTCCTATTGTCTGTGTTCTTTTTCTCTTTATGAGACAATTTCTATCGGACNGTCAAATGTC TGATTTATGAATATGTNATTTATATATCCGTGCGTCTTNATTT >gi|3449573|gb|AI099834.1|AI099834 33987 Lambda-PRL2 Arabidopsis thaliana cDNA clone 126P22XP 3', mRNA sequence ACCNAAGACGGATTCGTTGANTTCGATTGAATTCGNGAAANTTCTAGANCGACGCCGTTTTCTAGATCTG NTAACGGAGGAGACAATGGATTGATGAAAGATGTGTTTAAGGTGATGGATAAAGACGGAGATGGGAGACT GAGTTACGGNGATCTGAAGNGTTATATGGATTCGGCTGGTTTAGCTGTAACCGACGATGAAATCAAATCT ATGATTCGATTAGCCGGTGGTGNTTTAAACGACGGAGTTTCGTTCGACGGTCTGCTTAAGATCTTTGGGT GTTGAAAAAAAAGTTCGTTTTTTTTTGACACCGCACATTTTCCAACTTTATTTTGTTTCTCAGTTTTGTT TGTTTGTTTGCAGAAGTGTATTTGTGTCCACCCCGATTTTGTTTTATGTTGTTATAAAAATGTGAGAAAA CTAATGTTGGTACACT >gi|3449572|gb|AI099833.1|AI099833 33986 Lambda-PRL2 Arabidopsis thaliana cDNA clone 126K5XP 3', mRNA sequence GAAGATCTGTTTGTTAGCGCAATGCCTTTGAATCACCCTTTCAGCCCAGAAAATAGCGTGCCANTCAAGC CCTTACAAACTAGAAGCTGATGGACACAGCCCCTAGTTGACCTGATACCCTTCCTTGAATATGTTGCACG TAACAGTCCAGCAGACATCAGACCGGTTCTGGCCTCTTTTGAGAGAAAAGATATTGCCAAAGAGTTCATT GACAGGTCCATAGAGTATCAAAAGCGAAAGCAAGGACAACTGGGACAAGGTCGATTCTGGAGGCGTTAAA GGATCTAAGATTTATGTATAGAGCGAGAGACAATTATATCATCATTGATGGTGCACACCATAAAATAGGA ACATGAGCTACCGTTCTTCGCTATGGATTTATTAGGTAAAATCCGAATTAAAATACTGTCTTTGTCATC >gi|3449571|gb|AI099832.1|AI099832 33985 Lambda-PRL2 Arabidopsis thaliana cDNA clone 126J7XP 3', mRNA sequence TGGATTCCCAGGATTCNAGGGTTTTTTTGGTCGCCCCTGTGCTTNCCACAGGTGNTCCCATAATGGCGGC GATGGATCTTTTTGAAGGACGTGGTTTGGNNTGTTCANGCAAATCCAANTGATTTGTGCGGATTTGCTGC ACCTCCTGCACTATCGAAGCTTAACGNGAAATTCCCCGGGCTTCATGTATATGCTGGAATTATTGATCCT GAAGTCAATGAAAAGGGGTACATAATCCCTGGGCTTGGAGACGCTGGAGACCGCAGTTTCGGGACAGAAA CACATTGGGTGAAGTGATACTTGTATGAGTTGTTAAACTTTAACAGTCACAATCGTTAGATTATATATTG CGTCTCTTGTACTTTGTTTTTGATGTGTGATTTCAGGTTCTTGAGAGGGTTTCGATAAAGAGTCAAAAGT TCACAAACAAGAAAAACTGAATTCCTCATTATTACAAAACAGAGAACAAACTTGTCATCC >gi|3449570|gb|AI099831.1|AI099831 33984 Lambda-PRL2 Arabidopsis thaliana cDNA clone 126J3XP 3', mRNA sequence TTGTGAATNTGAAGGTGGTNGCTGGANTTTCNCCNCCNGTTTNAAGGNNCGGTTGGATTGTGCTTTGGAN ACGNTGAAAAGCGGAAGGGATTATGGCTTTGGTATAAGGGTTTTATCCCGACGGTTTCGAGACCAAGCAC CGTTCACGGTGGTTTTGGTTTGTTACGCTTGAACAAGTTAAGAAGTTGTTCAAGGACTATGACTTTTGAA AAAAACAAGAGTTGAATTATGTTGAAGAAGATGAATGATGGTGGCGACAATAAGCTTCTCTTTTTTTCTG GTTATAATTTTCTTTTGATTATTTGAGTAGTTTTAAATTGTCTCCCATTTGTTGGAATAGATCTATGATA TGATAATTCTTCTCATGGAGAAGAAAGAAAGAAAGAAACAGTTCATTTCCCTCATTATTCAAGGCAGTGA AATACTTAGATCCGTTCCTGTTAATTTTGAACTATGTAATATTCGTTTCTTTTTCTTGAAAGCTTTATTT TTAGTC >gi|3449569|gb|AI099830.1|AI099830 33983 Lambda-PRL2 Arabidopsis thaliana cDNA clone 126J22XP 3', mRNA sequence TCTGGNTCTAAAATNATTTNCACCAGAGGGGNCCCGGCNTTAGAAAGTNTGATNTGCCAAGGTCACGTGT CAANGGAGAGGATCATGTTCAATTTTGGTTCTCATCTGTTGATTCATGATCGGTCAGATAAATGTTTGTT GTGGTATTTATGTCTCTTGTCGGAAGCAATTCTGATGGGGTNCCAAGGCAACAGAGAAGAGAAGAAAGCT TTAATTGAAATGTTCATATGCCTTACTAATCCCCAGAATTAAATGTGGTGGAGAAACCANATTCATTAAG TATGACAAACAGAGACCACATTAAACAGTTACTTGACGTCT >gi|3449568|gb|AI099829.1|AI099829 33982 Lambda-PRL2 Arabidopsis thaliana cDNA clone 126J12XP 3', mRNA sequence CTTTTACCCCATTATGAGGTGTGATGNCGCATNCAGNAGGCCTTNTCCGGTACCATGTNCCCAGTGGTGG ACCACATGTCCCCTGGATCGCCCGACAGAATGAGCAAGAGATCACTGCTTTGGCTCCAAGCAGCATGAAA GATCCAAAGTCGTTGCCCCTCCAGAGAGGAAATACTCTGTCTGGATTGGAGGGTCCATCTTGGCCTCCCT CAGTACCTTCCAGCAGATGTGGATCGCAAAGGCAGAGTATGACGAGTCAGGTCCATCGATTGTTCACAGG AAGTGCTTCTGAGTTCAAAGTTGATCATTTTTCAGAGAAGAAGCACCGCCAGGGTTTTTCCGACCATTTC TCAAGCCGGGTTTTTAATCTTCCGTTATTCTGCTCTTTGTTTTTGTTCTCTTATGTTTTGAAATTCATGC CAAATACATTTTCATGGATTTATGGTAATCTGTTTGTAGTATGGTTTAAAATCTAATGCAACTGTGTTTT TGAGTGAATAAGT >gi|3449567|gb|AI099828.1|AI099828 33981 Lambda-PRL2 Arabidopsis thaliana cDNA clone 126I6XP 3', mRNA sequence TNTTTAATGTCNGCNATTCCAGCTGGACCAGCTTGTGAGAAGCCNCATGAATTCCATTNGATCCCAGCCC GAGCCATCTCTGGNGCAACGACAACGACAACAACNACACCATGATCTGAATCTGAATCATCATCCTCTCA AAGAAGGACAACAATCCAAAACAAGGGCAGGCTTTTTACAACGCATTCACTCAAAACTCGCTGGTGGACA GATTTTAGCCATGTGCGTATGCGTTTGCCCTTTTGTTAAATAAAAAAACTATTTGTTTTGTTTGTTTGAC TTGATATCTTTTTTTGGGATTGAGGATTGAGAGAGATAGAGNGATTTTACAAACTTTCTCTCTTTCTCTC TTTCTCTCTTTCTCATGGATAATTCGTGTCTCTTTGATTTGTCTAAGGTTTGTCTTTGTTTGTTAGGAAG TGGTCTNTATGAACGAAAAATTTGTGT >gi|3449566|gb|AI099827.1|AI099827 33980 Lambda-PRL2 Arabidopsis thaliana cDNA clone 126I13XP 3', mRNA sequence CGGAGTCTTGCCTTTCCNGCTCAATTCTGNCCATGNCCTTGNGGATTCCGGCTTNCCTTTTCTGCCACAA GNCGATATGCGATGGAGATGGCCGTTGTCCTGGTTGCAGAAAGCCTTATGAAAGGAACACAATCAAGTTT GAAGCTNGTGTTCAAGGTGGTGGTCTGACTATTCGGCTTGCTCGTTCGTCTAGCATGTTTTGCNGGTCAT GAAGAAAGGATGTGTGGCTTTTCTCGGCCTGTGTCTGTTTGTTTTCTCTCTTCTTCATTGTTTTCCTCGC ATGTTCTACGTTTTTCNCCTGTCTTTAAAACTCTTTAGATATGGGTATAGGGATTTGTCTTTTGGCAACT GAGAACTATGTTCTATGTTCTTCTATGTCAATGACTCTTCTTCATCTGAAACATGTGGTGGTGGTGGTGG TGGTTATGTAGAGTGGTGTGTGAGTNCATAAGGTGGTACNCGAATTTCAAATACATAAAAGTTGCTAT >gi|3449565|gb|AI099826.1|AI099826 33979 Lambda-PRL2 Arabidopsis thaliana cDNA clone 126H7XP 3', mRNA sequence TTTTTCCCTAGGCTTGNGACCCCCAGGTTNGATTTTGGGGNGGCCCTTTAGGCCTTCCCCCCAGGAACTT GGGGGGAGGCCCAAGGGAGGTTGGGNATTTTGCCAGNCNGNTTCCNNGGGTNCATNGCCGGGGTTGTTCN TGGGGTGGTTTTTTNANGGGNGGGGGGCCGTGGCCTAAGGAAGCTGAATGTTGGTNGCCATTAGTATAGA TGGCTGCAAAAAATCTCTCTGTTTTTANCTTTACTTGAAATGTTAACGGGGCTGATTAAAATGGGTCTTT CTTTTTATCTTTTTATATTTCCACAATCTCTCACGAAAGCCCTCTGAATGGAGAAAGTGAATTGTAGAAT GTTTAGATGGTGAAAGAGAGACTTGCAGCTCTGTACTCTTTGCTTTATAAAACGATTTAGTTTTCTTTTC TCAGT >gi|3449564|gb|AI099825.1|AI099825 33978 Lambda-PRL2 Arabidopsis thaliana cDNA clone 126F23XP 3', mRNA sequence CGGCTCTAGAGNTGGAACCGGGGNGTTTCAAAACATTTGACTTGAGCTACTTCACGCTAGTGGCTAAGAG AAGAGGCCTTTTCCCAGTCGGATGCTGCTCTACTCGACAACTCCCAAGACTAGGGCTTATGTCTTGCAAC AGATAAGAACTCATGGGTCAATGTTCTTTAACGACTTTGGTGTCTCTATGGTGAAAATGGGTCGGACTGG AGTTCTTACGGGTAAGGCCGGGGAGATCCGTAAGACGTGTCGGTCTGCTAATTAAGAGATATAGAAATGA AAATATCTCAATATATGTGAGTTTGATTATTATTGTTTGCTTCTTTTATTTTGTTGTCATCCCTATATTA AATGTGATTGTTTTCTTGGGTATTGTTTCTTGGGAATAAGCTGTATCTAAAATTTATAAAAGTCTTGAAA GTTCAGAATGTTNTTNTT >gi|3449563|gb|AI099824.1|AI099824 33977 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125O9XP 3', mRNA sequence ACCTAAGGGNGCTTTCTTAGGCTGGAATCTTTTTCCCNGGATCCATCGGGGCCNGCCCAAAAAAATGGGN GTGTCCCCGAGGTCTTATGGGCGCAAAGAAGNTCTTTCAAGGTCGATCAATGGCAGCTTCGACACCAAAA GGGTTTCTTGCNGTGTACGTTGGAGAAAGCCAGATGAAAAGATACATAGTGCCAGTCTCATATTTGAACC AGCCTTCATTTCAAGCTTTGTTGAGTAAATCTGAACAAGAGTTTGGGTTTGATCATCCAATGGGCGGCTT GACCATCCCTTGCCCTGTAGATACATTTATCACCGTCACTTCTCAGCTTCATTAGATCCAATTCACAAGG ATCACATATATGTAACAATTTTTGAGGTCATTAATTAGATGTAGAAGATATTTAGAACCCAGCTGTGTAA TTACTTACA >gi|3449562|gb|AI099823.1|AI099823 33976 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125O6XP 3', mRNA sequence TTGTTCAGTCACATNTACGGAGCTTGTCCATTTNAATTCCCNGATTCAACATCTCAAGGTANCTTANNCC CTCCACTTGNTGTACNCTCTTTATAACCTGGAACCATCATTGATTCCACAGAATTGGTTAATCATTAACT CTTTTTTTACATTTCTTCAGGATGCTATTGAGAAGCTTCTGATCTAAGGCATTCTCTGAATTGATTGCTC GGTATGATGGGTCTCCGCGAATGGGAAGGCTTTGACTGAAGTTTTGTTTAGGCAACTACCAAATCAAAAA CCGTCCATTATTCTACTATCTTCTCTTCAAGTTTGTAACGTAATTCACTTTTCTGCAACTTGGTTTCTTA AGAATTTGTGTTGGTTTCTGGTTTTGGTTTGTAGCGAATCATTGTGTTATTTATAAGAACTTGTTTTGAT >gi|3449561|gb|AI099822.1|AI099822 33975 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125O16XP 3', mRNA sequence GNTCACTTGGGATGGANTTCCGCCGTTGGAGANTTTTTNCCCNGNTTTTCCCGATGATCTGTTTGCCCAT TTTTTTGCTGATCCAGTNGCCGANTCGAAAAGTNCTNTTGCGAGGATTGGGGGNATTGGGATGGAGATCG GCGAGGAGGTGAAGAGGGAGAGAGTGGAGAAGGTGGTTAAAGAGCTCATGGACGGAGAGAAGGGAAAGAG GTTAAGAGAGAAGGTGGTGGAGTGGCGGCGCTTGGCGGAAGAAGCTTCGGCGCCACCGTTGGGATCATCG TACGTGAATTTTGAAACGGTGGTTAATAAAGTCCTTACATGTCACACGATTAGATCGACCTAATTGGGCT TTCCGTATCCAAATAGGCCCATTAGAAAAGGCCTGTTTGTTTCCACTATCATTTGGGCTGGCTTTAATGA CAATTTTAAAAGATGTACTTACAAGTTGCAATAATCTTTAGTGTTCTTCTC >gi|3449560|gb|AI099821.1|AI099821 33974 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125N6XP 3', mRNA sequence TGGATTTTAGGGGCCANCATTTCGGGNTTCTTNCCGTTTGGGTCTNGACGANAGGATATGTCCCGGGATA TCGATGGGGATGGCTNCTGTAGAATTGGGACTCTTGAACTTACTTTACTTCTTCGACTGGAAGTTGCCTG ATGGGATGACACATAAAGATATCGATACTGATGAAGTTGGCACTCTTACAATCGCCAAGAAAGTACCNCT AAAACTTCTTCCNGTTCGATTTCAGTGGTCAAACCAAACTCCAAACTTTGAAGATGTTTTGAATAAAAAT ACTATGCAAAGTATGTAACCCTAGCTTCTCTAATGTATGTGAAGTACGTTTTCCNGTAAAATACTNGTTA AAACTTTCATATCTTT >gi|3449559|gb|AI099820.1|AI099820 33973 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125M17XP 3', mRNA sequence GGTTNTTNCCNACAGGNTGGTTAATGGGAGGAAANGGCCAANTTNTGGATGGAGACAATGGATTCGTTTA CNCCCATAAGGATCTTCCTGTCTTACAAAGGACAGAGGCTGTTGAGAATGGAATTTAGTTCTCTCTTTCT CTGCTGATGTCATATTATGTTTTACAATTATGATTGAAGTTTTNCCCCCTTTTACATNGGATATAGTGTT CCTTGAGGTTTGTACCNTCATANGAAGATCTCATTACTTAAGTGGTCTTTGATAATAGTGAAATGTTTNG CNGCTTCTCTTCATGTCAAAAAAGCTCCATACATGTCCACAACCTTTGATTTACCACAACTATTTGTATC ATTTCTCCATGCNGAATAAGTTATATTTTTTCT >gi|3449558|gb|AI099819.1|AI099819 33972 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125L6XP 3', mRNA sequence CGGCCTTGCCCCCCCTTNTTNTTGGCAACANTTNTNCCTTACCNTCNTTGNCAACCAGGNTTNCCCCNTT GTGNCCCATCAGCTCGCACACGNCATCGACCAGNCCATCGTTAAGAAGATGGCTAAGGCCCAGGCCTACT TCTTCAAGGAGTTCACTAGGGCAATCCAGATCTTATCCGAGAACAACCCCTTGACTGGCTCTAAGGGTGA GATCAGGAAGCAATGTAATCTCGCAAACAAGAACCATTGAAGTTGGAAAAAGTGAGAAAGACAGGGGCTC TGGTGTGTTGAGTTCTCTGCTTGGTACGAACCAAGATGAATAAAAAAATCTTTTAAGTTAAATCAAAGAA AGGGTGATGATGAATACATCATGGTAGTGACCACCTCCTTCTTTTGTGTGTTCAGCCTTAATGCTTTAAT TATGATGTTAGTGGCTTTGAGTTNTTT >gi|3449557|gb|AI099818.1|AI099818 33971 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125K7XP 3', mRNA sequence CCCNTCGTNATNCTCTTCGGCGGACANTCTCTTAATTCGCGGAGCCATCGCCCTGCACTCGTCGGAACTG CATTTCCGATCCTCTTCAAACGCAAAGACACGTGTCCGGAATGTGATGGAGCAGGATTTGTGAGGAAAGG AGGAGTGACTCTGAGAGCCAACGCCGCACGGAAGGATCTTCCTCAGATCGTTTGTGCTAATTGCAATGGA CTCGGAAAGCTTAACCAGATTGATAAATCATAAGTCTTCTTCATATATATGTAAAAAGCTCCATTTCTCA TTCCTCTTCTTATCTACAATATACCTCTGTAAGAGTAGATAGCTTCGAATGATCAATGGTTGCTTGGAGA TGGATGGATATATATATACAATTGCTTTTTT >gi|3449556|gb|AI099817.1|AI099817 33970 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125K4XP 3', mRNA sequence GATAGTATGCTCGCANGGACGAGGATTACGATTCAATGCTTGGGATTNCCCTTGAAACTCCACCGGAGTT GATTCTTCCCGACNATGTCTTACCAGGTGGTAAACCCGTCGCCAAGGTTCCGTCTACTCAGTACTTCTAA TTCCAATCTCAGGTTGTTTTTGTGTGTTGAAATCATTTCAAGACAGGATTGATTCTCTGGAAGGTCAAGA GAGATATTATTTTGGTTTTAACTTTTCTTCCGAGCAAGCAGGAGATTTATCATCCTTGCTCAATAATGTA TGGTTGCATTATGAAGTCATTTCTTC >gi|3449555|gb|AI099816.1|AI099816 33969 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125K13XP 3', mRNA sequence CGGTGCTNTTCTAAACCCAGNTTTTCGATTAATCNATCCCGTTCCTCGANGACGGAGGAGAGATTTGAGG AAAGTGCTGAGATTCGCAAATGCTTGTGGNGCNATCACAACGNCCANAAAAGGAGCCATTCCAGCTCTTC CCTCAGATGCTGAAGTTCGGNGCTTTCTCGAAAAGAAATAGAAACANAACAACTCAAGCTTCTATTACGT AATCTGTTTCCGCGATTATCTTCTCTTTTTGTATTCTTGTTTTCGGATGGTTGAATCGAGAAGAGAAACA AATTCGGNNTTCCGCTCTGTTTTTGTTTCTCTTCTTCAAATGTAATGATTTAGAAAAGACGTATGTTGCN ATTTAAGGCTTNACTTGCTNATAAAATGATAAGGTTTTTCCAAGTTTAAC >gi|3449554|gb|AI099815.1|AI099815 33968 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125G6XP 3', mRNA sequence CCGTTAAACCANCGGGGNTACGAACCCNCTTTNTAANCGNCGCGTTAAACTCTTTGTTTTCAAAAGTGGT GAAGTTAGANGCCCATTTTTTTGGAGTTTATCNCGGGCCTAAGTTTGGGCCTAACACGNTGNCCCGGTGG GTCGTNGCTGAGTTTCACCAATATCGGAGCTNGCCTGAGCTGAAGGTTCGGAATTGCTTCATGGGTNGGG AAAACGAAAAGAAGAAGGGGTGACTCAGATTTTNGCCTTTTTTAATCGTAAAAATTATTAGTATTATACT TGTCAGTTTTTTTTTTTCCTTCTTTTTGTAAGTAATAATATATAGGGAAATGTAACTGAGGCCTGTGTTT TTTCGTGTATATACCATGGTTTTCTCTCCAATACTATATTTTTGGTACATAATACTGGTGTTACAAAACC TT >gi|3449553|gb|AI099814.1|AI099814 33967 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125G4XP 3', mRNA sequence CCTGGNGCCCTCTCTNTGGAGCTNTGGNGNNCATACCACAATGGGGGNGTTCTGGATTGCTGTGATGTTT GTGAACCTTTGGTCCCATGGGAAAAATGCGTCAAGATAACTCCGGCTAAAGCAGGGAGCATCCNNGCAGT ATAAATGCCCCGCNTGCTGTGCAAAGAAAGGAAGACAGTGATGCTGATCAATTGATGATGATGATGATGA TGATCTCTCAGAGAGACTCTGGTTCTCATGTTTTAATCAATATGTTAATCAACTTTTTTTCTTTTCTTCT CTTTTTTTCTTTAACCTTCTTAATTTTAAAGCTTTCAAAACTCTCTCTTTAGATCTCAAGAAAGGGATTT CAAGAAGTTGAGGGAGAGAGTAGCAAACTGTTTGAATAATATTATTATTATTCATATT >gi|3449552|gb|AI099813.1|AI099813 33966 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125G23XP 3', mRNA sequence GGGTTCCTTCCCGGAAAGCNGCTTCTGCTCTGGTGCTTGCTCAGCNTTNTCTCCTTTNTCTGCCCCTAAN TCTGGAATTGGAAGCAGTCACNGTTTTATACAAAAGCCGCANCAACCAANCGCAGCAGCANCCCTTCTCT CGGTTGGTAGGATCGACAACAACAGGAAGACAGATTAATGGGTACTGAGTCATCGTTCGTTTGTTCTCTC GAATTGGTTTTAGTCCCGATTAATTGGATCTTAATNACACATCTTATGTGGTTTGGGATCNTTATTGGAG ATTTGAATGTGATATGTTCCCTTAAGAACGGGGTCGGGTTACATAAGCCAGATATGATTACACTGTGTTC TTC >gi|3449551|gb|AI099812.1|AI099812 33965 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125G20XP 3', mRNA sequence AACCCAATTNCTTCCAGGTCCNTCGANTCGNCGAGGTGCTTNCAGATTTGAATATTTTCCANACCNTCTC GNACTTCTACGTGCATGAACGTTGGGCATATTCACCGATATCTCTGGTGCACGACGCTTAGCCTTGACCN GCGATGAGGCTCTCCTAGTTAAGTTCCAGAAGGCAGCAACTCCAAAAGCTGATTTGAAGACTAAGCTGAG GATNTTCCCTTTCTACTGATTCACAACTCTTGTACCAAGAAAAAGTGTCAAAAATATGGCCTCTTGAATA ATGGTTGAGACAATNCCAACCACTTGTGATTAGTTTGTGTGTTTTTTCTGGTATGATCAGTGTGTCACTG TCATGTGTTTTTTGCTTTGTTTAAGGATTATGCTTGTGTNTNAATGANTTNTAT >gi|3449550|gb|AI099811.1|AI099811 33964 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125F24XP 3', mRNA sequence CCCGCATCGTCGGCCTAGGCGGCTTNAAACNGTTTAATCCNNTCCTTCCGNTGTTCAAATGGGGNATTCT TCNGTTTANGATGAACACTNTTTTACATACATGATAAATATGTCTTTTTTNCTCCGGTTTCATATGTGAT TTGTTTTGTTTTTCATCTCANCTGAGATGTGTATGATTTGTGATTTGATCTTGGCTATTTTATGAGGCTT TGTCTAGAATATCTTTTGGTTGGACTCCCTTTTAAGTCAATCNAAAATAATAGGGGAGTTTCAACAATTA CTATCATTGTAATACCTAAAGATTTGGATTTTCTTTACTATTACAATAAAAAGCTATC >gi|3449549|gb|AI099810.1|AI099810 33963 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125E15XP 3', mRNA sequence GGCAGNGAANTTGCCCGTGGTCACTTGACGTCCCNGCAACAATNGGAGAGAAAGATCATGACTGAATCTT GCNAGCTAAGAAATTCTACAGNGCTGAAGAGCNTCATCAACAGTATCTGTCAAAAGGTGGGCNGTTTGGC CAAGGGCAATCCACTGCCAAAGGCTGCAACGACCCAATCCGCTGTTACGGTTAATAAGCTGCTTTCCTCT GTCCCTCTCCGAAAACAGAGGACTTAGCATCAAAGGACTTGTGTGTCAAATAGATTGTGTAAAACTTTGA CTAAGTTGTTCACACNCTATGTAACTACTTCTTTGGAATTTCATTCGCAATGTTGTAATATTGATGTTAT ACTCTATAAACATAAACCAAATAATCATTNCGATC >gi|3449548|gb|AI099809.1|AI099809 33962 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125D21XP 3', mRNA sequence ATTTGCCGGATGGGTGCCTTTTTTTNCGCCCCNGAAGAAAATCCNTGCCAAAATTNGGAGAATTTCCAAG TCCCCATGTTTATGACTTGTGGCCCTCCAAGCCTTAAGAGTAAAGAAACCCCATTGTCTATCTATCTATC GCCTATGGTAAACTAATGCGGGTTTTAGCGAGGAGTCTTNGTTTTTGTAAGGCTGGTTTGNCTTTTGAGA TATTGGTGGTAGCTTTTAGGACCTTTCCATATCAGTTAGGGGTACATGGTTCTGGTTCATGATCCTGTTT CATCAGACTCTTAGGTGCTGTTTTGTTCAACTGAGATGTTAATCAAATCGGACCAACTTTATGTGTTTTG GTTTAAGGTTTC >gi|3449547|gb|AI099808.1|AI099808 33961 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125D20XP 3', mRNA sequence TTTAGNCGGTTTAGGNTGTTTCNCCGGTGTATTGGTAAACCCCGTGGTATTGCGTTTTAAGNTGGTCTAG GCGNACCCGGAGTGGTTTAGNTGGAGTTGGTGGTCNCCGGTAAGGCTGNTGGTATNGNTGTTGGTGGTGG TATCGGTGGTGGACACGGCGTGGTCGGTGGTGTGATCGATCCACATCCTTAATAGAGAGTATTTGTTGGT TAGGGTTTTAATTAAGGAATAATTAATTAGTTTCGATGTTATTGTTGGTCTTTTAATTCTGTGATCATTA GGGTGACTTTTGATCTATTTTCTAGTTTGGGCTTTTGTAACGTTTGCTTTGATTTCGGCCGTGGTGTTAT GAAATGTGCGACTCTCTATG >gi|3449546|gb|AI099807.1|AI099807 33960 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125D18XP 3', mRNA sequence CCTTGNTCTTTCCCTGGCTCACNGCTACCAANGTTTCCGAGGTAANTACAGTTGGAGAAGGGATGCAACA CAACCCGCGTCTAACTAAAGATAAAGAAACATTCAAAACCATTATGTCAAATCTGAATCTGTCGTATCCG AAGATGATTGATGTTGCAGTACCAGCAAATATGGTCTGTGGGTTACAAGATGTGCCTTCTCAAGCCAACT AAAAAAAACTCTTACATATAATGTTTGTCTTTTTATCGATGTCA >gi|3449545|gb|AI099806.1|AI099806 33959 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125A9XP 3', mRNA sequence GGNTNTTTCGTTGCNCCTCCNTGATTCCCCCAATGGGGAAAGTNCGTCCGTTACTTANAGAGCTTTGGTT CTGGAGCTTTAACAAGGGCTCTTGCTGCTGACCCTCGGATCGAGATCTGTATGCTCCCTGTTGGTGATGG AATCACTNTCTGCCGTCGGATCAGTTGATTTGACTCCTCCCTACTCTGAGTTTGTCCACAGTGGATTACT TTCCATCTTCTTATACCTTTCAATCGCATTTTCACCAACCNCTAAAATGGACCTTTTTATGTATTTGTGT TAAGTAATATCTCCATTGTCCTTGTTTTGCTTTCTTCTGAACAAAGAAATAATATGTNCCTTACTTTT >gi|3449544|gb|AI099805.1|AI099805 33958 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125A6XP 3', mRNA sequence GGATCCCCNCCATTTCCCGGGANCTTGTTTTCCNTTCCGGTCCGAAGGCCCGGTTTTTGGNTCCCCCTTA GGNTTCCGAGAGGGCCTCCGCGCAAATGTTAAGANGCCCAGNCACGGACTTTGAGTTTTACAAGTGAAGA GAAAGCAGAAGTGGAACCAGATTATGGCTGTTGTTAAAATTCCAGTGTGTTTTGAGAATTATTAAGGACA TGGAATCAAATTTGCAGTTAAATTAAGAACTAAGTTGCATCTCCTAATTTCTGTAACTCGAGTTCACATT TGTTTTTAGTCTATCAGCTTTTTACAGTTTAATGTATAAGAAAAACTGGGGATGGTGTCCTTAGAATTGC CAGAGCATGGTNATAATT >gi|3449543|gb|AI099804.1|AI099804 33957 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125A2XP 3', mRNA sequence CTCTCCCTTATGNTCCCATGANGCTGNGAATCTTTTGTCTAAAAGGNAGNTGATGNCTATGATCGNTGAA TGAAAAACCCTTTTTGGTTTGATTCGGATCGGNGTTTGACTAAAGTTGACCGTGAAAGACGAAACTTCGG GGTTTTGTCCGACGAGAGATCCATCTCTAGTGATGTTCTTTTTGTTTTTGTATTTAGATTTGAAGTTTGA TGTAAAGATACATGAGATTTTATGTATAATACGGACACATACACAA >gi|3449542|gb|AI099803.1|AI099803 33956 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125A10XP 3', mRNA sequence GGGCCAAGTTGAATTCCATGCCCAAAGNGTCCCCACATTTCATGACCTCTGATGGGGAGNATAANGCATG GCAGGTCCTAGTTCCGAAGACNGTGCCTCACCTTTCCGATGCTATGCATGCTGCAGTGACCCGCCTCGGC TAAACTAGCGNCCATACATTTTTTTGCTGTTTCTACAAATAAAATGGGACAAAAAAAAAGAACNCCGTTT TTGTTNGCTTATATACTATGGTTTTTTTCTGATGGTACCATATGTTTCCTCATGTCTTTTGACTAAAGAT GGTTGAACCAAAACCAAAGTGAGGATTGTGACATTGAGATCTACCGTTTCTAAGAAAATATTGGTTNCTT T >gi|3449541|gb|AI099802.1|AI099802 33955 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124P22XP 3', mRNA sequence CCCCGCCCCGGGGNGGGGGGACCCNGTCTCCCCCGGAGGCCCCNGATTTTTTCCTTTGATTCATGGCCNA CAGCTCATCTTCAATCAGCNNGCTGCAGCCCCCCACAAGTGAAAAGTCACAGTTGGCTAACTCCAAGATT CTGGTCCTATGCATTGTGTTCAGGTTGCTCTGTTTAAAATTCAACTTAGTGCCCACCACCGGAATATAGT GTGTATTATAGGCGAAGAAGGCTTCTTATCTTCCTCTATAACCAAGAAAAGAAAAAAGATACCCATTATG AACATTGTTTTGTTGATGTTATTAGCTTCTTCTTCTTCTCCCTTCTGCATCAGAATGTGGTTTCATGTGA GAAATCTTCTAATTTTATTTCACGTAATTCGTTCTTG >gi|3449540|gb|AI099801.1|AI099801 33954 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124O5XP 3', mRNA sequence GGAAATTTCCTGGGGAANTTTTNTCGCAACCAAGAACCTTGNAATCATGCCTGGACTCAACAAGTTCTTC ACTGATCCTACATACTGAAACCATCTTTGCACACCGCTTTGTCGTATTGTTTCTGGAATTGAATCTCTTT GTGATATAAACCCGCATTTGTCAATTTCACATTGTTGATGTATCCTCCNGCTGATGACACTTGTTAATGC TGGGCTTATGTTGTCACTTTTAAGCTGAAAATTGTATGACTTGCTTATGGC >gi|3449539|gb|AI099800.1|AI099800 33953 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124N3XP 3', mRNA sequence ATTCNCCCNTTGGGNCGGNANAGCNAGATCAGTNTCAAGTTCNCCATCCAAGGCAAGTGTCTCCATCGAA GTCGGATTCGACATCCTCGGATAATNGCCCNGGTGGGAAAAAGGGATTAGTAGCCTATGATTAATGAATA ATGATTCCCCTTAAGTTAAGTGTTTGTTCTTTTTACTGAGAAGAGATGGTAAAGAGAGTAAGTAGTTTAC TTCTGTAAAACATAAGCATTGTCTTTTGCGTATGTTTGTTTGATTATGCTCCAAGATTGTTNAAAATTTC TGTT >gi|3449538|gb|AI099799.1|AI099799 33952 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124N17XP 3', mRNA sequence CCCTATGCAGCTGGCTTNCATGGTGCGGCGGCGATGNCGTTCATTTTCGCCCCCCNTCGGAGGCNGTNTG CACCAAAGCTGAGGAGAGCAGCAGCCATCCCTTTGTGGGTACATGNGGAACCCTCCCNTCCGCCAATACG TTAGCTCCCCTAACGCAAGGAAAGTCTCCAACAGTTGCAAGATTCCTTCCCCAAGCTGTTAAGGAAATGT TAATCATGATTAATTAGTGACAAGTTTCGCTGATTATAGTGGTTAATGCTGGTCTTATCTTCGTCAGTAC TACTTAAAATAATAAATGAGTGATGATGATTGATGATTATCATCATCATGCTTGAATGTTATGTTNTCTA TCTTATAAAATATGAAATATACTTTNG >gi|3449537|gb|AI099798.1|AI099798 33951 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124K13XP 3', mRNA sequence TTTTCGTCCCAAGAGGTNCCCTTTCTGTTANCCCTCNTCCTCCCCNAAGGCTTNCCCAAAANACTCACCA AGTCACTGATGTCACTNTNGCTACGAAATTGCGTCAATAAATGTATGCNCGTTAATTTGTTTCATTTGTG ATGTGTGGGGCTCTTTATCTATTATATGCATGTCACGTGTTTGNCATATTTGCAATGTATCATGTATGTG GCTCTTTATCTATTATATGCATGTGTTTGTCAATTGTCATATTTGCGATGTATCATGTATGATGTATGTG GGCTCTTTATTTATTATA >gi|3449536|gb|AI099797.1|AI099797 33950 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124J13XP 3', mRNA sequence GTACTCNNTTTTTNTCAACNAGTTGTGTTGGTCCTGCCTGACATNGTTGCACCACCTTNGAGACCAGTTG GCTTTAAGTAACAATCCCTTATTGGATGAAATTGTCAGAAACCACTACCCTTCTTTTGCTCAACTCCAAT CACTTTGCCACCCAATTTTATCTCATTCATTTTGCAAAAAAGATCAAAGAGAGAGAGAGAGAGAGAGAGA GAAAGAAAAAAAGGAAAAAACCTTCCTCCGTTACAACCTCACAATTGCAACAAAGTTTCATATAAAAGAG GACAGAAATTTCGCAGGTTCCTCCGTTGTCT >gi|3449535|gb|AI099796.1|AI099796 33949 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124F4XP 3', mRNA sequence TTTAATNCCCCTTCTTCCCANTTTGGGCCCCNTCGACTTTGGTTGGAGCTGAGTTTGCCNCAACTTCACG GCCCANGGGNACNCCATCNCTGTCGGANTTCAACACGCGCTTGCCCCATTGNCCNCNGTGAAGGCAAGAG TGAACAATGCTGGTGTGGNTAACGCTCTGATCCAACATGAGTGGCGTCCAAAGTCGTTCTTCACCGTTTC TGGAGAGGTTGATTCTAAGGCGATCGATAAGAGTGCCAAGGTTGGGATTGCTCTCGCTCTCAAGCCCTGA GAAGATACCNCCAAATGGGCCCTGAAGTGGGTAGAATAGGTGTTATTTCTTTTTCGTCTTCAAATCTTTG GACAAATCGCTGTCTGGTTTGCTAAACAATCTTTCATTTGTTTTTTTTGTTCGGTGTTGGGATTTGTAGA AAATAAAAGAGAAAAATACTATTGAAAGGATCGTCTTGACGAT >gi|3449534|gb|AI099795.1|AI099795 33948 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124E5XP 3', mRNA sequence TGGGACTNNGGGGTGGGNCCACTTAGTCGTTGTTGCACTTGCCGGACTTCATTCTACGGAGCCGTTCTTC ATTCCGGNTCCTTACGTCCAGCTCCCACCACAGAAAGCTCCCCTTGANCAACCTNTAGCGTTTTAATTTG CTTGGCTTGCTTTTTGTTGTGTGAAAATGTTTGGTCCTCGTTTCTTCCAAAAATGAATGATTGAATGTGG NGAAAAAGATCAAAGTTGTACTTTGTGTTGGTTATAAATAAGAATTGTATATTTTCAAATTTTATATCTC TGCCTTGTACTTTCTTGCATGTGTTAATGGCTAAAAATAACCGGTTTTAACTGTCC >gi|3449533|gb|AI099794.1|AI099794 33947 Lambda-PRL2 Arabidopsis thaliana cDNA clone 124A19XP 3', mRNA sequence CNGTGANTACGAAGTGTATTGACGGCCCCAANACGGTTTTCCGTGANGAGGCCTGCGATGATCTTGGAGG TAGAATTCTGTGANCCTGACTTTCAAAAAGATGCCAACTAGNAGAANCNAGATTTTATGTCATGTGAATA TGTGTTTGTATTTCTACAAGTCTTTGTAACCACTCCTTAATTTATGATATCTAGCTTCACTACTTAATCN AGATTGATGTTATGGTTT >gi|3449532|gb|AI099793.1|AI099793 33946 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123K7XP 3', mRNA sequence GAGCATTGGGCTGGAGGCTTTTGNTGTNCCAGAGCCGTGTGGAGTCCTCACTACNAGTTTGGTCCGACAG AGNTCGNTCCCTTTGAGAACNAGGACATAGGTGTTNTGNTATACACTAGGGTTCNCATTCCGTACCGTGC CAAGAAGATTTTCCAGTGATGCCAACAATAGCATCTAGCTTTGNACTTAAACCGNTCAATTTCTTCGAAT CGAACCCGGTACTTGGGATTTCACCTTTCTTCGAGAAAGACTTNCCAGTCTGTTAAACCAGATGCTTCAT CTTATTCGACACTGTGCATTTTCAAATGTCATGTGTAGACTTTTCTGATTATAAATGTTGTGCATATTCT ATTGATATATGTATATCAGTATATGAAATCAACATGCTCTTGATATTC >gi|3449531|gb|AI099792.1|AI099792 33945 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123K6XP 3', mRNA sequence TNTAAAAGTNTTTATTTTGTACTTTTGGAGAATNAGAANCNGAGTTGTTCTTGAAAGTTTTGGATTTTTN ANTTTTTGTTTTGGGCGAGAGTTTTAACATTTTCCTTCTGTGTTTTTGATTTTCTTAATACTTTGGGAAG TTTTGTATCGTTACTCTCACCTTTTTTTACCTACACTGCTCATTTGATAGGGNATTGTTTGGCTT >gi|3449530|gb|AI099791.1|AI099791 33944 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123J11XP 3', mRNA sequence ACATCTTCCAGTCANTCGTCCTGGCATGGNCCTCTCCTCAGAATCTTCCCCCGTGNGTTTCCTTCACCGT ATACCCGCGAAACCCCTTGATCAGTTTTACAGTCNCGATNCCACCAACTGAAGANCATAGTTTCTACTGC CTTGGTGTGATGATATGTCCAAATGCATCTTTATTTTTTACTTCTGCGGTTGGATCACACCTCTGTGTCG TCCNTCCCAATAAATGGTGTTTGTTCCCAATCGCTAGACCCTTTATTATTGTCTTCNAAACTGANCAAGC CAGGTTGATTATTCTTTTTGTAAGAGAAATTGAAATTCTTGTATAATTTATGAGATTTTNCATCTTTTTT TTGGGGTACC >gi|3449529|gb|AI099790.1|AI099790 33943 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123I7XP 3', mRNA sequence GGATCCTTTNCGGCCTTGGCTTTCGAGCTTCCCAGGGNTGAAAACTTTTTANCTCAGATCTCCGACGNTG GCNGTCTTCATGGTTCCTCGGTANAACAGCGATCCTTGACACTTGCGTCGCTTGTGCCGCTTTTCAAGGG CATAAGCGTTGAGTCCAAGTCCAAAGGTATCATGACGTCAGACGCTGAGCTTTGGAACGGACGTTTCGCG ATGCTCGGTTTGGTCGCGTTGGCGTTCACTGAGTTCGTCAAAGGTGGGACACTCGTCTAAGGAAAAGAGA GCACGTTATGGGGAGGATGTTTTAATACGATTTTGCCCATGTAATTTCTCTGTAAAGTAATCTGTGTTAG GCCTACTGTGTGTTTTATACATGTGTACTAAGTGACATTTTGAAACTTCGGGTTAAAAACACTTTAAAAT T >gi|3449528|gb|AI099789.1|AI099789 33942 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123I24XP 3', mRNA sequence CCCTTCACACCGTTGGGGTTAACCGNTGGGGTGGAGGACCCGCACCNGCGTGGNGAAATGGTCTACGNTG GGCCTGACGTCATTTGCTAAACTGATGGAGGTGACGTTGGANCCGCGTTCAGCTTCTTCAATCAAAGGCT CTTTGTATGATGCCCAATCTCATTGGCAATGGCAATTTACCATTCTCAACTCCGGATACATCTTCAGTGG TCAAGCCTGAGAACAATCCTCCACAGTAGGATTTCTGCAATAAAGAGTTTGTACAGCTAATCCAACTGTC CAACATGGGTTTTTCTTCTGCTCTAATGACTCTGGTTTCTTCTCTCCTCTCTCACCCACTTGAAAGGTAA AAAAGTGAAAAAGGCTTTGTAGATGGAATCAATGTAGGATTTGCAGTAGAGGGAAAAAAAATGTCAAAAA GCTCAATTGATCAAGTATT >gi|3449527|gb|AI099788.1|AI099788 33941 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123I21XP 3', mRNA sequence AGTTGTCTTNGATCAAGCGATTCCCACTANTGGGANCCGACAAAGTTNTTCCCTCAGTCAGCAGAGTTCT TGTNCGTCNTGAAGATCTTCCTATTAAATCCTCAGGTNGAGTATTGTTGCCTAANGCAGCTGTGAAGTTT GAGAGTACCTAACAGGAGAGATTATATCTGTTGGTTCTGAGGTTGGACAACAAGTTGGACCTGGAAAGAG GGTTTTGTTCTCTGATGTGAGCGCTTATGAGGTCGATTTGGGAACCGATGCTAGGCATTGCTTCTGTAAA GAGAGTGACTTGTTGGCCCTCGTTGAGTGAAGTCTTGTCCAAGAGGGAGAGATTTGAAGATTTTACAAGT TTTCTGTAATTTTCAGACAGCAATTGTTGTTTCTAGTTAATCCTTCAATTTAATATCAATTGAGATCACT TTCAG >gi|3449526|gb|AI099787.1|AI099787 33940 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123I18XP 3', mRNA sequence AAGGCNGCAGANATAGCACAGNTTGAANCAAGGAACCTGTGATACAACTTATGACGGTAGATTATTAAGA ACCTGATACATTGTTCCCTTTGGTATATCATTTTGCCTATGCAGTTGTGTGACTCTTACCGTTAGTTAGA TAGGCATGGTTTTCAGCACGATGGAGGANCATCTTTGGGTTTAAAGGTTTTTCACACCNCTGTTTTGCTA AAATATTCAGTTTCCATTTTATTCAGAGTCAGATAAGCAAAGACGTAAGTGTAGTTAGTCGAGATTTCTT ACAAGTTTGTGTTGTATGNTCGTTTTAAGAGCAGCTGCAGACCAAAGTTCTTGCTTTAAAATTTCATATT CAGTG >gi|3449525|gb|AI099786.1|AI099786 33939 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123H3XP 3', mRNA sequence CCTTGCCNGTTAAGNNGTCCTTAAGCTNTTNAATTTGGGGNTATNNTTGCGGNGGCCCNTTGATTTTTGC CAAGGCNTTTGAATGTTCATTGGGNGCTCACTCTACGTGCTGGATCCACACCGNGGNGGACCAAGNGGAG GACCTTGCAGAAGAACGACATCGCCGCTGCCATTCCAGGACCGACGTGTTTGATTTCCTTGTGGACATAA TCCCGAGGGACGAGCTGAAAGAAGAAGGTTTAGGCGTGACCAAAGGGACCATACCATCGGTGGTGGGTTC CCCGCCATACTATTACTTGCAACAACAGGGGATGATGCAACACTGGCCCCAGGAGTAACACCCTGATGAG TCTTAAAACTTTTCCCCTTTCGTTTGTTTGGTTGTATCGTAGTAAGGTAGCTCTGCTCTGCTGGGAACCA TTTCTATTGTGTTCTGTAATGACATGTTAGTATATCCCCAGTCTATATCTATGGCAATGCAGTTTCTGTT >gi|3449524|gb|AI099785.1|AI099785 33938 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123H22XP 3', mRNA sequence ATGTCCCNTAAACCNCCCTTTGNTTTTGACGTCNANCANCCGGTTTGGGAACCGGATCCTTAGGGNNGGG GNTNCCATGTGCGTGTGGAGCCATNTGCCANCAGTCAAGNTGTGCTGAGGCGTTTAAACTCAGAAAGAAA CAGAACGATGTGNTTAAGGCTGATNCTAAAGCCCAGAGGTGAGACTATCAGCACCAAGAGACAGCCTAAA GGTCCTAAACCGGGTTTCATGGTTGAAGGTATGACATTGGAGACTGTCACTCCCATTCCTTACGATGTTG TCAACGATCTCAAGGGTGGTTATTGAGTTGTTTCCATTTTATTATCATTCTCTACTCAGAATTTTTGCAC TTGCTTTTTTAATTATGTTTTTGTATCAAACAAGACTGATTTATATACGATATGAGTTCAGATTTTGTTA GG >gi|3449523|gb|AI099784.1|AI099784 33937 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123E10XP 3', mRNA sequence GNTTTAAGCTGACTTTAACTCGGCCGTTTCNCANCCANGAACCTTGTTGATTGATTCGTAATCACAACTC GAGCNGCTACAGGGGATCAAAATCTTGCAAAACCNNTGACTCGCAAAATCAGGGGNGTTTCTTCGTCCTC CCTGATCTCAACATGGCGCCATCCGAGGAAGAGATATTGTNCGGAACTAGCTAAAAACTGGCCTATNTGA AGATTTGCGATCGAATTATAGTGAAGGGAAGAAGGGAGCTAGAGATGTCAACTAAGAAAAGTGAATGTAA TAAGTGGTGTAATGAAACTCTCCCGTCACATTCTGGTTTTCCGTTTCCTTCTTTTTTTGGGGTAAAATGC TNAATTACTTCTTGATTTTTTCTTAGGAAGAGGGTGAAAATTAGGTTTTT >gi|3449522|gb|AI099783.1|AI099783 33936 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123D4XP 3', mRNA sequence CCGTTAAGAATNCCCGNAGNGGNCCTTTGATTCCCAAGGTTCAGAGAGTACTCAATGATGTNCATTCTTC AAAACATGTTACGCTGGTTTTGCTGGTTCCATGGGACGTGCCGGTGAGCGTCACGATGTTTGGAGCTGGT CGTTTGAAAACTAAGTAAACCGGTTCGGTTCGGTTCAGTTTGGCTNGGTATCGTNTGCTTTGTTNTTGTA ATTGTTGTAGAGTGAATAATTAAGGTATGAATAAAATAAGCCGACCTGTGGCTTACTCTGCATTGTATTT TCATATTTGTGTAATCAGTCTGAATAATTCAGAGGTTTTCAATAAAATAAACTTCCTTTCC >gi|3449521|gb|AI099782.1|AI099782 33935 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123D3XP 3', mRNA sequence TCCCCCATTCGGATCCTGGAACCTNGTTAAAATTGCCTTTTCCGATTNCCCTTGCCAAGGGGGGTTGGGG AACTTAAGGCTTCNTGGACCTCTGGCCTGCANCCTNTTGNGGGGACCGNNACCAATTCCGCTCATNCANG TTCACACACGTNTCTATGNCCAGGTGTNTACATAGGCAACGTGAAAGTGTTAGTGAGGGCCACAGTTTGG GAATGGACAGCTCAAAGGACATTGCAATGAAGCTGACAGTTAGAGCTGAAGACGTTTCTGTCGCCGAGGC CATTCACGAGATTGTTGCCAGCGGCTAAAACCTCTTGCGTTTCTTCAGTATCAGAGAATGTCATCTATTC CTGCTGCTAAACCTCAAAAATACATCAACTATTATAAATAGCATAGTATTACTTTCTTTCTTTTTTCCTT GCATTATTACTGTCAAATACACTATGGAGGTTTTCTTTTTATTTTATGACGGTGCTTTTTGATTTCTC >gi|3449520|gb|AI099781.1|AI099781 33934 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123C9XP 3', mRNA sequence GTTCAAGCTTTTGAGTGGCCCNCCTTCTCACTGGCTGGAAGGTGAGACCCCGTGCCAATNTGGTGCTCAC AGGGGGTCTTGCTGACCCACTTGGTCTAACCGAAGCAGGACTTCCNCCNTGCTCTTTGGTGTTTCCAAGG ANTCTTGGCATCTGCTCTCAGCTTATATGGGNCCGAGCTCTTGGACTTGCACTTGAGAGGCCCAAAGAGT NTTACCATGGACTGGCTTGAAGCCCATTGTAAGAAAGCTTCATCTGCTTAAGTCACCACCGAGTCCTGAG TTGTCGCACTCTCTCGTGTTTCAACAAAAGTCATTCTCTTCCACACTGGATAGCTTTTTTTGTTTTTACC TTCTATTGACAGAAGAAACATTTGTTCATGTAGAAATTGTTCCTGAGAAACACATGCTTGGTGCAAATTT GCATTTCCGGGAAACTCGTGATAATAAATAAACAGTTGTATTCAGTTTGCGT >gi|3449519|gb|AI099780.1|AI099780 33933 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123C7XP 3', mRNA sequence CGCATCTTTNCGTCNCTCCNCTTNGGGCTGTTTGAGGANCTTGGCCTCTTTTCCATCNCAGNGCCTGNTC NCCAACTGCGGAACTCGGGTTGATGGAAAANGTTCTTTCGACAAGTCAGGAGCCGATTATCTTACGAGCA ATTTGGTGCATTTCTTGGAAATGTGAAGGATCTTAACGCCCACAAGCAAACAAGAGAAGAAACACTTAGG AAAGCTGAAGAGATATTTGGAGGCGATAACAGAGATCTCTACGTCATATTCGAGGGCTTGATCACACGCA ACGCTCACTAAGAGTTTGGCTTCTTCAGTTACACAAAGAACTTATATACTCGGAAACTCAGGATTCATCA GTCTGCAACATTCAATTTCTTTTGTTTCCTTGGCTGTCAAGTAAGACCAAGTAAAACTGACAATTTGATT GTATCATTTGTGCTCTCTCGTGTATCTATCTATCTCTCTCTTCTTGAATAAATTACATTTCATCATC >gi|3449518|gb|AI099779.1|AI099779 33932 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123C1XP 3', mRNA sequence GACAACGGAGGGGGCCCGGCNCAAGGGNGCCNGGTTTNCCAGTCGGTTCTGNTTCCCCCATATGCTTTCC GGTTTCTGGACCAGCGGTTACAAATTTNGATATGTCNAGTTGAAGGAAGGCTTCCGGGTTAGCCAAGGAG GATCAATCTACCATGCGACCATTCCGTGATGGAGCCCAGTGGTGGAGTTGCTAGGNTGTACCACGTTGGT CCCGAAGGATGGACGAAACTATCAGGAGATGATGTTGGGGAGCTACACTACCATTACTACCCCGTGGCAC CANTACCGCAGAACAAGTCATGGAGGAAGCAACAGCCGAATAAAAATCCTGTTTAGTTTTCTAATCGTTC ACTCCCTTTCTTGTTGTTGCATTTTGTGGTAGTATATACTGAGTTGTCTCTAGCTGAAGCTTTGGTATTC TATTTTACTGATCTGAAATGTTGCTCGCGGATTATTCTCTATAAGATTCTCTTTTTCTGC >gi|3449517|gb|AI099778.1|AI099778 33931 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123B4XP 3', mRNA sequence ACGTCCACCTTCAAGTNTNTCCGTGGCTTGACAGCGTCTCCTNGCGTTGGNTAATGGTGGGATTTTGNAC ATAAGGTCGGAGAATTGGGCAAGATCANTATTTGGNGCNNCAATTCTATCCTTCGAGTTTACNCTTTCCT CTACTTCGTACCGAGATGAATATCCACCACCAAAGAACNCTCTTATGTGCGGACGAGCTAAAGGCCGCCA CACTAGNCCATTCTAAAAGGGATATTGGACGCAACGGCTCAACTGTTTTTTTAATCTTTGTTTTTTTAGA TTGAATGATTTGAAATGTTTAGTATTGTCACGAGAGGGTGGCAAAGAGATGTGAGCTTCGTGGATTTATT CACTACGGCACAAAAATTAGGAACAAGAAAAATTTGGAGCTTGACTTGAGCTTTCAACTTAGTTTTTATG ACG >gi|3449516|gb|AI099777.1|AI099777 33930 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123B2XP 3', mRNA sequence CATTCNACCTTGNGGACCCCNTCCAGGCCGGAAGATCGCATCTAAGNTTTGACCNCGCTTCCAGAGGAAG ATTGNGATTCAATCGCCCAAGCTATTGAATGGTTAGATTGGGATCANCTGGCTGAGGCAGATGAGTTCGA GGATAAGATGAAGGNGCTCGAGTCTCTTTGCAACCCTATTATTGCAAGAATGTACCAAGGAGCTGGGCCT GATATGGGTGGTGCAGGAGGAATGGATGACGACACACCTGCTGGTGGTAGCGGCGGTGCTGGCCCAAAGA TTGAAGAAGTTGATTAAGCCTTTTGGCTTTTGTTTACTCTGTTTGCTTGAGATTCTAGTTGGTTTCTTGT TCTTAGTTTTATCTTTCTATGTCACTCTGAAACTGGTGTGTGATCATTTTGATGTTTTAAGAATTTAGCT TTACCGTT >gi|3449515|gb|AI099776.1|AI099776 33929 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123B13XP 3', mRNA sequence AGNCAAACAAGAAGGGANTCANAAGATAAGAANGAGGTGGGAGTTACGGTTCCTCCACCGCCAGNGAAAC CAGAGCCTGGCGATTGTTGCGGTAGCGGTTGCNTCCGATNCGTTTGGGATGTTTATTACGATGAGCTCGA AGATTNCNACAAGCAGCTTTCTGGAGAAACTAAATCAATTTGACTGATTTTNCCTCGCATTGTTAATGGA GAAATTAAACATTTGTCTTTGTCGATTTGATGATACAGTGCTTTTGTTGAACAACATTTTNGATCTCTC >gi|3449514|gb|AI099775.1|AI099775 33928 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123A9XP 3', mRNA sequence CTTGGTANTTCCNCTGGTTTCTCAGGNCNCGGTGCGCTACTCATGCCATCTTNCAACATTCTTCAGCANG CTTGNGACNCCGANCTTGAAGGCACGTTTAACACATTTAGGGAGGAATTCCGAGCAGTATGGGCGTAACT CCAGCGAGATTTAGAGTAATCTTGTACCACCATGATCGTGTTCTGCTGAGGACATAACGCTGTAAAGACC AAACTTACTGCCTTTCTCCAAGATAAACCCGGTTTCGTTAACACTGTACTATGGATGTTCAATCTGGATT TGTTGCTCAATGACTGGGATCATCTGTTTTTTCTTTGATTTGAGATTTGAGCTCTGAGCTCTTTTTGCTA GCAAAATCCTCTCTTTTTTTTGCTAAAGACTTGTAAAGCTAGCTTTGTTGTTCTTCGTTCTAACACAAAC CCTTTGTGTAAAGTCCTAGAATCGTTTAAT >gi|3449513|gb|AI099774.1|AI099774 33927 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123A5XP 3', mRNA sequence GGGGATTCCTGGGGAAAANCCTTTCCCGNGAANCCNGGCCTNCCCCGTTCCATGGNCCCGTNCCCCAAGT TTGGCCCATTANGGGCGGGTGGNCCACGTTNTGGNGNCCCGTAATCTGGTGTGCACTCTCCAACCGGCGA ACGAAGAACAGGCTGCAGCTGCAGTGTCTGCTTAAATGAAGCCACTATGAAGCGATTCGCACTCGCACCA AAACCCACAATGGGGCGATTCGGACTCATACCGGATCCAGAAACGTATCTTTACTGGCTTTTACTTCTCT TCCCAGCCTCATCATCACTTTCACTTTCACTTCCTGTACAATGTACATACGTAGTCCTAAGTTCTTCCCT CATTTATTTAATAAAATACATTTCTTTATGTTCCACTTTCTTATACGTATAACATTCCATTTGGATG >gi|3449512|gb|AI099773.1|AI099773 33926 Lambda-PRL2 Arabidopsis thaliana cDNA clone 123A3XP 3', mRNA sequence GGCCNACAACTTGGAACNAGTNACCTTACTTGGGATCGCNTACGATTGNNNCTAAGGACGCTCACGNTAT CTNCATCNTGACCGAGTGGGATGAGTTCAAGAGATCTTTGATTTCCAGAAGATCTTTGACAACATGCAGA AACCAGCTTTCGTGTTCGATGGAAGAAACATTATGAATCTGCAAAAGCTAAGGGAGATTGGTTGCATTGT TTACGCCATTGTGTAAGCCTCTCGACGACTGGCTCAAGGACATGCCTGCCGTTGCCTAATGATGTTCATT GCTGACTCTTTCGTCCTCCATCATTTGTGCTTTTTTTCTTCTTGTGGTTTGTCTTTAAGACTTGTTATAT TTCTTACAATATGTTTGTTATGTTC >gi|3449511|gb|AI099772.1|AI099772 33925 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122P7XP 3', mRNA sequence CTCCACTTTGGAAATTTCCCCCAAGGNCAAGNCCTTTAGGGGTCCATTTGNGGNACATNTGGNGCAGGCT GCTATTAGGGATTTTCAGGNAAGCTAGCGTCTATGGGGGGATACACATGCCGAAGCTATATGCAAAGACG CAATACTGTGTCTCCTGTGCTATCCACTCTCATGTCGTTAGAGTCCGTTCCCGCACCAACCGCAGGGTTC GTACTCCTCCACCTCGTTTCGCCAGACGCAAGGAGGATACTCCCAAGCCTGGGCAACCAGGACAGGCACC TCGTCCTGCTGGACCTGGAAGCTCAGCTGCAGCTGCACCGCGTGTCTGAAGCCTTCAAGCAGAGCTTTCT GTCTTGTTTTCCTATGTTCTTGTTACGTCTTTAAGGATGTTTGTCTCTGTTTAACATAGTTTTGCCATGT GGATCTTGAATTCTGTCAAACTATTTCAATAGTTGATTCAACTTGTTTTTTTTTTTGTTCCTCT >gi|3449510|gb|AI099771.1|AI099771 33924 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122P5XP 3', mRNA sequence GTGGNGAATCCCCCCGTTTCAGGCTTTTTCCCGGAGTTTTCTTNTGGGGNGGNCCNANTNCTCGACAAGC TTTTTNTGGAAGAGAAGTCAGAAGGCTTGCTTNNCCTTNGAGCCAGCAGTCCCATTACGCGGTATTCTTT GCGTATATGGGNTTAAGAGNNGCAGGAGATCAGGANCCTTATGTGGATATCTGAATGTGTTGCACAGAAC CAGAAGTCCAGGATCCACGACAGTGTCGTCTACATGTTCTGATTCTGGTGGTGAGTCAAAAACACATAAA CAAATGTGAAATCTTGAGTCTGGTTTTCTTCATCGCTCCTCATGTACAATCGTTGGTTTTTACATTCCCT GTTTCTGTCGCTCTGTGTTTACCAGAGTGCGTGTATTGAGTATCTCCCAATAAGAATCTCTTTTATTTGT TTGTTTGTTGTTGGCCATACACTCTTGTAAGATCAAATTTATTTATGATGCATACGAATTACTT >gi|3449509|gb|AI099770.1|AI099770 33923 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122O3XP 3', mRNA sequence AGGGCCCTCCTGGNGTTNTCCCAAGGGGNGATTTCTCTTCGNGNTTTGTTGACCGTGTTTCTTGCTCTGG NCTNCGTCANGCAAGAATTTGCTGATGCGGCTAAGGCAACGATGGAGAATAGGGGNGCAGNCNGGANGCT TTGGGAGACGATTTGCAAGAACTTCCTCAAAGGCNGAGTTCCAACTAACTNGTTTCACTCCCAAATTATC TATTTGGCTCTTGTCATATTGAAACAATTTGTGGATTTATGATCTTGCTTTATTTTTATTCAATGTATAA CGACATATTAATCTCGGCGTGACTTATTTGTGTTATACCAGTTGATAAATGAATAAGAAGAACCTAAGCT ATTTAAAGCCAT >gi|3449508|gb|AI099769.1|AI099769 33922 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122O2XP 3', mRNA sequence AATNTTCCCCCGAAGGCGGTTTTGGACTNNTTNGGCACCCCAAACCTTGGTCCNTGCTCAGGCTNTTTNA GCCGCCTTTGGCTTCCAAGTCATCCCTCATGGGNTTTGGGTTGAAGGTTTCCCGCATNAACGGTCTTGAT GGGTTTTGGCGAAGGCAACGACTTGTNCCCCGGTGGGCAATACTTTGNCCCGTTGGGTCTCGCTGATGAT CCAGTTACTTTTGCTGAGCTTAAGGTGAAAGAGATCAAGAACGGAAGATTGGCTATGTTCTCTATGTTTG GCTTCTTTGTTCAAGCCATTGTTACTGGAAAAGGTCCTTTGGAGAATCTCCTTGACCATCTTGACAACCC TGTTGCTAACAATGCGTGGNTTTCGCAACTAAGTTTGCNCCTGGAGCTTAAATTTTCAAGTCTTGATGTG ATTCTTGTAATGATATGAACATAACCTTTCTTGTTC >gi|3449507|gb|AI099768.1|AI099768 33921 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122N17XP 3', mRNA sequence GGTGTCCGTTTCCGGATTAGTNTTTTGGGCCCCNCTTTTTNGGGGAAGCTTNTTGGTCCCGTTTTNATCC CCAANCTNATCGTCNGNTTNCCGGATCCCAAACGNTTCGTCCTCAAGTTGTTGNTCCCTATTCAAAACGA TTCCGTTGGGTATTCTTTTTCCCAATTTAGCCGTTAACCCGAAGACGGAAAATTCCTCCGATANCGGAGC TTCGACTAGCGGCACGACGACGGACGAGGATCTCCGGCAGAATGGGGAGTGTTATTATAGTGATAATTCA GGACATATAAAGCTGAATTTGGATTTAACTCTTGGGTTTGGATCCTGGTCGGGTCGGATAGTCGGAGTCG GGTCATCGGCTGATTCTAAACCGTGGTGCGACCCGGTGATGGAGGCNCGTTTGTCACTGTTGTAATAATT TGTCAAAAAAATCCCAAAAAATGGGTTTTGTTACTTCATTTTTTTTTTGCTTGAGTCCTTTTGGATAAAT ATAGAAATTCTTTACTTC >gi|3449506|gb|AI099767.1|AI099767 33920 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122M17XP 3', mRNA sequence TTNGCATTTGCCNTTCAAGNTCCCCCTTNGGCCCTTAGGCTCTGGTCTCAACGCTGGCCCGTGCAGCTGG NATTCCTAAGGCATGTGGNGTCAATTTTCCTTACAAAATCAGCACCAGCNCCAACTGCAAAACCGTGAGG TGATGAGCTNGCANCGGTGAGATGATGCTACTACCGGAAGTTTCGAATCCTTATTATATAATGGATGNGA TTAATATTAAATAAGATGTTCGAATGTTTGTTTTTAGNGTTTTTAATTTCTTGTCTTTTTCTATTGTGGT GTTCTTGTTATATGGGTTTGTCTGTACTATGTTCGCAGGCAACAACGTTNTNTGAAATTTCAGAGTAAC >gi|3449505|gb|AI099766.1|AI099766 33919 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122L18XP 3', mRNA sequence TGGGCTTTTACTCCTCAAGGGTAATTTGGTTCCCNGGAGAAGNTGGGTNTTAATGATAGTTCGTTTGGGG CTTCCATTTTTGGTTTCTCCTGNTGNATGGAATGNTTCAGCCTTGGTAACCANGTCAAGGGNCCCTATTG AACCCTATTGANCCCTATTGATACANGACAAAGAAAGAGATTGTGAAGAGACTNGTGANCCANCCGAAAG AAAAAATGTTTGATAGAGACTTGTTTGTCACAAGCAAAATCATCTCATGTCATTTCATGTAATGTAGCAA AAGCTTCTTTATCATTTGTCAACTATTTGATCTTGGGTTCATGTTAGCNGTTTTGTCTACAAAAAGCTTA ATTGATTGATTGATAAGCTTAATTATTAGCTTTCTGTGAAAAAAAGTTTAGCACTTTGTAATAAAAACAA GATAACTTGG >gi|3449504|gb|AI099765.1|AI099765 33918 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122K4XP 3', mRNA sequence CCCCGGGAGGTCGTNATGCNCTTAACCAGCGTTTAAGCTTCCTTGCCNTCTCCTGAAGCACGANTACCTC CCCAGGGATCTTCAGGCGGTGCAGACCCCATTCCNTGGCTATCTTCAGGACATNCTTGCTNTTTGTTGAG AGGGAAAGCAAGGAACGAGAGGCCTTGGGAGCTCTACCACTATACCAGCGCACACTCCCATAAGCATTCC TTTCCCCTTTTCTTGTGGTCAACGCTGCTTCTCTGCATAAATCTGCAACATTGATATTTTGGTGCTCACT TTCTGAACAGAGCTATTTACTATTTGAAAAAGCATAAATCTGTGATAGTTTTCCTAAGTGGATATGTTGC TAGTTACATTTTTATCGCTTTTGCTGGCTTGAATAAAATCGACGACGCAACTCAAGTCTGTCTCGATGAT T >gi|3449503|gb|AI099764.1|AI099764 33917 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122J15XP 3', mRNA sequence TGGGCNCCCTGGGCCNTCAGATTGGGACTCCCATTNNTGGGAANCCGGNATTTCAAGGAGAGGNGGGNGT NGCCGTTGAAACATGGCGNTAACNTTCGTTGGACTAGAAGGTCACGTGATNGAGCAGCTTAAAGTGTATN ATCCCATTTTACAGTTCATTCAAAAGTCCCCGGATGATATCNTTTGCAAGATCACTATGACCTGGGAGAA GCGAGCCGATGACTCGCCTGAACCCNGCAACTACATGAAGTTGGTCAAGAGTCTCGCTGCTGACATGGAC GCCCACGTTCTCAAAGCCTAATCCTTCTCACCTAAACCCATCATCATCGTGTGTGTAACTTTGTATGATG TTTTCAATATAATAAATGGGGTTTGCATGTATGGTTTCATCTACTGTAATATGCTTTGATGTTGTTTATA ATAATTAATGATTTAAAGAGT >gi|3449502|gb|AI099763.1|AI099763 33916 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122I4XP 3', mRNA sequence GGTTTCTTCCCCCATTTTCCCAGCNTGGCAGTATTAGCATGATGCTCAACTGATCTACTCNGCCCCAAAG CCCAGAGCTGAGCAATTCTNCCTCAGGCACCCAATCCTGCAGCTGGTTCCCAGTCAAGAGTTTANCCCTG AAGCCGAACTAGCCGAGCTGGAATCTGAATTTGGTAAGGTGGCTCGTGATTACTCTGCAGATGAGGTTGA TGGATGGGAATTCGATGAACTGGAGAAAGAACTGCAGTAGTATGATCCATCACACGCCTGCCTCACATAC ACTGATATGTTTTTCATTTACTTTCTTTGTTTGACCATAACTCCGAAGTTCCTTTGTTAATCTGTTTGGT AATTTATGGTAACTGCCTGTTGACTTTTGTATGTCTACTTTTTTTTTTTTTGCTCATAAGTGTTGTCTCT TATTT >gi|3449501|gb|AI099762.1|AI099762 33915 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122I3XP 3', mRNA sequence CAGGGCAAAGTTGAGTTGNGGGGACTTCCAGGTNTAATTGGGTCGATGTCAGAGTTGGCGAGTTCGTNCC TGAGAAATCCGCTGCCGGAGAGATCACTTTCTCAATGTATGAGCATGTGGCTGGTGTTTGGAAGAAAGGG CTCTCCCTCAANGGTGTTGCAATTCGTCCCAAACNGTNATAATTGTTATGGCATNGAAAAACATAAATCT CCATATGCACCAATGGNCCTTCTCAACATATATTTCACATCATGTCATGTGTGTATAATAAGGTTGTTCT ATCGTATTTTTAGTTTTAATAATAACTTTAATGTTGGTGTTGAATAAACTCAAAACGAGTGTTTTGANGG TTGTTATATTCGAATCAATTCATTTAC >gi|3449500|gb|AI099761.1|AI099761 33914 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122H1XP 3', mRNA sequence GCTTTTAAGGAGGNGNCTTCCCCCAGAGCCTTNTTCAGGTCCNTGTTGNTCCTCCTTGNAGTTATTTCNG NAGAAGNGNCTGANACCCTGAAGTTCGTGATCCANCCAGNGAAGCTTGCTCTGCGTGAGATCAAGGAANG AATCAAAAAGACCAAAGATGAAAAGAAGGCTAAGAAGGTGGAATTTGCTTCTAAGCAACAGAAGGTCAAG GCTAATTTCCCCAAAGCTGCTGCTGCATCCAAGGGTCCTAAGGTGGGAGGTGGTGGTGGCAAACGCTGAA GAGCTTAAAGCCATCTTTTCTCACTCTGCGTCTTTTCTGCTAGTAGCTACTTTTAGTAGTTGATGTTCAT TTCTGAATATTTGCAAAACATAAACCTTGTTATTTTCGTTTTTGTCTCTCACTTTTGCTACTCTTATAAT ATCAGACTTGAG >gi|3449499|gb|AI099760.1|AI099760 33913 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122H18XP 3', mRNA sequence TTGGCCGNGCCCTCNAAAAANGCTCTCTNATGGCTTGGGCCAGGTACGCCAGGNGTATTTNGCCNAAGCT CAGGCCCACTTTCCTGACCAGGTGCAAAGGGTAACTCGGACGCTACCCTCGGGAAATACACCGGCGGGGC TTCTGGTGACTCGGCCGCCTCTGAGAGCTTGTATGAGGAAGGATACAAGTATTAGGAGCGTTTAAATACG GNTGTCGTCCTTTTATACGATTTGAATATATGTCAAATGTTTCNTAGGNNTTTAACTGTTTAAATTTTTA TCGATTTGGTTTAGCGTCTGTNTAATGTTCTTAAACTGTGTTGTGTTTTTTGTGATGGTTTCTATAATAT TTTCGCGCCNTG >gi|3449498|gb|AI099759.1|AI099759 33912 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122H16XP 3', mRNA sequence TTCCCTNNTTTTCANCAAGGGNAANCCATGGGTTGTCCACTGNATATTTNGGGTTTGGACCNTTCATTGG AGCTTCGATNGCTGCATTCTACCACCAATTCGTTCTGAGAGCTTCAGGTTCTAAGTCTCTTGGATCATTC AGAAGTGCTGCCAACGTCTAAACACATCAAACCAGATTTCTCAAGAATAAATGAAGTTGTGATCTCTCTG TACAAATCTAAATCAGTCACTTGCAGTTTTCATTTCCCTTTCTTATATTTGTGTTTTCCACTTGCTCTTT TGTGAATTTTCTTCGGTGTAATTGTTTTTTCTTTCGCTTTTAAACGAGTGATTGGAATTATAATCAATGA AATCAAAGAGGTTCTT >gi|3449497|gb|AI099758.1|AI099758 33911 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122G7XP 3', mRNA sequence CGNTGTNAATCAAATGANGAATTTGGTGTCCGTAAATTGTATGNGTAAAGGNTTGAAATCATTTGAATTC GTGGANGGTTGGATCTTTCATTTTACTTGTNGCCAAAAATGTCAAATAGGTTTTGCACAAATTTGTAAAT TCTGCTTTACTNTTTTTCACACATTGTCTTGAAACTTGAGTGTATTTTTTTTTAAAAAATAATTCGTCTT TAAGGA >gi|3449496|gb|AI099757.1|AI099757 33910 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122G6XP 3', mRNA sequence TGGTCCCNCNCNGGAAAACNNNGGNTTCACAGACAAGGCATCAGCTAAGAAACGGCTNTCGTATCCCAAC TTCGCCTGCATTGCCTAANCCNCGGCGGTTCTCAGCTCCCCCTAAGGTGGAGANTGGCGGCGTTACCGTG ACCAACGGNGCAGGCAGCTGAGGTATTTTATTTAATATAATTATTTTCCCACTTATGAATGTGTCCGAGA TTGTTGTCTCTTATGTGTTCCCTTCATTTCGTAATTCATTTGTGCAGTGTAAGCGCCAGTCATTTATTTT TTTACTATAATAAATTTTATAACCTTTT >gi|3449495|gb|AI099756.1|AI099756 33909 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122G13XP 3', mRNA sequence CCTAAGTTTTTTGGTGGGGAATNGATTCTGATTCTTCATCTTTTGCTGAAGCACTTGCCCTGTACGGTCT CATTGTTGGTATCATCCTCTCTTCTCGAGCTGGTCAGTCTAGNGCCGAGTGAAATCCAGAGTATCTCTCT CTCTTATCGGCTACAGTCCTTGTAATGTTTTGGTATATTTTACTCTGTTTTCTTTTGTGGTATGTTTTTG AGTTTCTCATGAAAACAAGCAACATGGGTGAAATTTATTTGACTTTTGTTTCAAAACCCATTTCTTTTCT TTTTCATTTGCACACTATATATGGATACATCAATAAGTAATAAAATATGACGATTCAATG >gi|3449494|gb|AI099755.1|AI099755 33908 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122F9XP 3', mRNA sequence TTTACTNAACCGGNNTAAGGTTGAAAGNTTCATCCGGNGGCTCCTTGTTAATAATGATTTTCTTATTCTT TGGCGCTTCTCATAATCTCCCACGCTCAATCACTTCCAGGTACCCNTATGGCGGCCCTGGTCCGTNTCCG CGTAGTTACCCTGTGTGTTACCCACCGTATTGCCGTCCATGAGAGTTTCAATTTGGTCACATGAATGAAT TATAGTCAAATACCTATATCAAGGTGATGTATGTGTGTATATTATTATATGTTTTCATCATTTGATGGAG AATAAAAAGCTTAGGAAATATATCCATGTTATTATATGTTTCAGTTTGTAATATGTATAATGATATTGCT GGCTCTGTCCCTT >gi|3449493|gb|AI099754.1|AI099754 33907 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122F21XP 3', mRNA sequence ACCAGGTATAANGCAACATCCTTTCTTTGAAGGANTGAATTGGGCTCTGGTTCNATGTGCCNGTCCACCG GNGNTTCCTAANCCGGTTGATCTTGAAGCTTTGAATCCTACTCCTNCTGTGCCAGCAGCCNCATCTTCGN GTGTAAGATCTGATCAGNGTAATTATCTTGAGTTTGATTTCTTCTGAAGAAACTGTTTCCACAGTTGATG ATTCTCATTATTGTTTCTTTGCAAATTCTGTTTNGTGTTTTCTACAAATGTGTTTCTTTTTTTTTCTTCT TTTTAATTTTCACGTCTTGGAAAAAGTTATGAGATTTGTAATCNTTCTTC >gi|3449492|gb|AI099753.1|AI099753 33906 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122F16XP 3', mRNA sequence GCTTTTTTCGCTTCGGGAATCNGAANAATTTGGGGNTGACAAGTCAANCAGGTCGATCAGGACTTTGNGG AANCGATTCTTGTTTCGGAAGGGAGAANTGAGTGATTGGGTTAACTATTTGTCACCTTCACANGTGGAAA GATTGTCNGCCTTNGTGGATGACAAGTTAGGTGGATCTGGTCTCACTTTCAGGTTGAGCTAAATATAAGG CCACGTGCCCCCATTTCTACTCTTGTTCTGAGGGCCTNCTATATACGTTAAGCTAAGTTAAGGCNGTTGT ATTGTTGTTACAGATAGACATCGAAGCAACGTAACGTCCATAATTAAGTTAATTTGTCGTTTTTATTTTT GTCAACACCGAAGTTTGTCGAATTTTTATTTTATTAAATATCGCTTGTTTTTGC >gi|3449491|gb|AI099752.1|AI099752 33905 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122E9XP 3', mRNA sequence CCCAGAACTCGGCCTTNTGGNCCNTTGNTNGGATTTAGCTGGAAATGGGNCCGGNTNGGNGGGAAACGAA AAGCCAGCCCATTTGCTTGGAACGCATCCAGCCGTCTCGCTGAACAGCAGAAGGAAACGGCTGTNTCACA ACCGGAAGAAGAAGCTGANCCAACACATCCNGAATCCACCACAGAAGCTGCAGATACTTAAAGATTGTCT TTGTTTTGGATCCTCGGGTCATCTCTTTCACGTACGTATGTTTATTATTCTCACTTTTTGTTTGTGCTAC TCATCCTCCCTCGAGGTAGGATTCACGGTAGACGCGGAAGAGGGAAATGGCCTCCTTCTCCGATCTACTT TTAACTTTATGGTGATATCTTTGTGTGGACAGAGCAATCTGGTCCACAGGNGAGAAAAGCAAATATGCAT ACATACACGTCAACTTGTATCATTGTAACACTATGTTTGTAATCATTTCCACG >gi|3449490|gb|AI099751.1|AI099751 33904 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122E7XP 3', mRNA sequence GACCCCNTGCAAGTTTGAATTTATGTTGGAAGNAGNTNGGCCCTNCAACNTGNAGTCCNGATGGGTCCCT AACAGNAGCTCAGATGGGTTTGCTCAGTAACTCGATGCACGATACAACTACTTTGGGGGACGANTCCAGC ATAATAGGGNACGAAGCAGCTNTTAAGTCGCCCAATGTTGTCAAGTTTGAAATTCAGTTGTATAAAACTC GGGACGACAAGTATCTACTGGATTTGCAGAGNGTACAAGGTCCTCAGTTCTTGTTCTTGGATCTGTGTGC TGCTTTTCTTGCTCAGCTCCGAGTCCTCTGAATACTAAACCGGACCTCTTCAAGAATAATCCCCACTTAT TCCTTTTTTTTTTTTTTTCTTATTCGTCTAAGAAATTATTTAGAAAACGTAACCCTTTTTTTCTTCTTCT CTTTCTTTCTATTTCTATATGCGTGCTCTACTCAAATACCTCTTTTAACTTAAATGTAAGACTGAGCAAG AGTAAAAAAAAGACACTTTGTACAT >gi|3449489|gb|AI099750.1|AI099750 33903 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122E22XP 3', mRNA sequence TTTCGGGTCAAGAATNTTTCNGCNACTCGCTNAANGTTCCTTCCTTGTTTTTGTNGGGGAAGCCATTTNT GGGGTACANTTTCAGCCATTTACCGNAGCTTACNGATTTTTGTGTTGAAGCAAATTAAAANTCCNGATNG GAAGGGACCGGAGGAATTTGATCCGTTCGATNTATACGACGAGGGATTGAACGGAATGAATNATCCAGAT TGCGACACGTGGGAAGAATGGATGGGATGGGAGGGAGCAGGAACCCGTGATTACTCCTCTCACGTTAATC CTTACGCTTGATAAACGAATGATTTCACTAATTAATTTCGAAAGAAATCATCCAAATGTGTATAAATAAC AATCAGAGAGAGACTAAAAGCACAACAATGTAAATAAGTGAAATTTGTCTCGGATAATGATTGCTTAAAT GTGAATAAAGTAATCTCTCCTTTGTGT >gi|3449488|gb|AI099749.1|AI099749 33902 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122D8XP 3', mRNA sequence GTTGGGCCCTNCAACNTGAAGTCCAGNTGGGTCCTTAACAGCGGCGCAGATGGTATGCNCCGGTAACTCG TTGCACGTTAACAACTACTTTGGAGACGAGTCCAGCNTTAATTGGAGAACGAAGCNGCTGTTAAGTCGCC CAATGTTGTCAAGTTTGAAATTCAGTTGTATAAAACTCGGGACGACAAGTATCTACTGGATTTGCAGAGA GTACAAGGTCCTCAGTTCTTGTTCTTGGATCTGTGTGCTGCTTTTCTTGCTCAGCTCCGAGTCCTCTGAA TACTAAACCGGACCTCTTCAAGAATAATCCCCACTTATTCCTTTTTTTTTTTTTTTCTTATTCGTCTAAG AAATTATTTAGAAAACGTAACCCTTTTTTTCTTCTTCTCTTTCTTT >gi|3449487|gb|AI099748.1|AI099748 33901 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122D21XP 3', mRNA sequence TTTCCATGGGGGANCAATNTCNCAAATGGAATCGTGANGNTCACGGGCCTAAGCACTTCGAGGGCTTCNT TTGTGAAAGAGACGGGTCCGGNCTTTCAAGCTGGTTGATCAGATGGCTGAGCATTGTCCTCCAGGGGAAT TCATGAGGGAGATACAATTGCCGAATCGGATTCCGGAAGAAGCAAATATTGANGCATACTTTGATGGGAC TGGACCNGTTTTAGAGATTGTGGTTCCAAAATTGAGAGGAGGTGTGGAGGANGAACACGNGGTTAGAGTT TGTCTACGGTCACACCACCTCGGATGAAAGATGCAACCATGTTTTAAAGTGTTTGTAGAAGCATTTTGTT GTGTACAATGGGGANATAAGNNTAAGCAAAAGCNGAAAGTGCTGTTTTTTAAGT >gi|3449486|gb|AI099747.1|AI099747 33900 Lambda-PRL2 Arabidopsis thaliana cDNA clone 122C14XP 3', mRNA sequence TTCCTAAAGTCTTGGNGTTATATTAACTTGGCTGGGGGGAAACCCAGCAAATTGGTTTGGAGACGGGNGC ACTAAGACGAGCGGTTTGANGTTCTTTTGNGGGGAATGGATGCACCATTCCACCTGTCAAAATGCAACAT GGGACGGTTCACATCAAGCGGTTCGGTGGTAGCAACTTGGCTGCGTGAATCAGCCACACTGAAACTCTTA ATCCTCCNTGACCACATNACAACCGCCACAGCTNCTNCTACAACAATGAAATCAACAGACCAACAACGGA AACAGACGTCGTTTGCTTTACAGCCTCTTCTTTTGTAGCTTNGTGTATGATGTAAAAGTAAAACAATTTG TGTTGATCATTAANGTGTATAGGNCCAATGGTCCTAACAATGTTTGGCTCTGTGCTNATATTTGTAACAA AGCAACTCGATTGATTATGTGAAAATCGTTTTGTCT >gi|3449485|gb|AI099746.1|AI099746 33899 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121P8XP 3', mRNA sequence TCAAANATTCNTTNCCCCCCGTTTAAANCGGGGGTCCCCTTTTTTGNNAAGGTNGCCCTGGATGGGCCCC AAGCCCAGCGCCGATTTACGGGGTCTTGGAAATCCAACCGCAGGAGGATTCTTGGGTGGTCTCATTAAAT GGAACTTTGAGAAGTTCTTGATTGATAAAAAGGGAAAGGTCGTTGAGAGGTACCCTCCCACCACATCCCC TTTCCAAATCGAGAAAGACATCCAGAAGTTGCTTGCCGCTTAAAAACTTTTGCTCATGAGTGAGCATATA GAGACTGATGGTTAAAGTAACCGTAAATTGTGACATAAAGTTTCCGGTTATTGCTTGTATACCTTCTTAC ATTCTAAGTTGTACTAATCGCTTAATAATTTGCGTATAATGGT >gi|3449484|gb|AI099745.1|AI099745 33898 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121P6XP 3', mRNA sequence GGGAAAAGTGGTTGGAGCCATTTTTAGACGGTGGNAGTCCTGAAGTGAACAAATGCNATTGCTAAACTTG CACGAGCACATCCTTCTTGTTGAGNGCCTTGANGTGCTATCTAAGGAAGGCCTTTCCTTCGCCACAAATA TATAAATTGCCTTTCTAGGTTGTGTGTTGGTGTGAGCTTTGAGTTCAGNGTGGCTTTTATGTCACTTTGC TNTTATGATAGCNGNGTCGANATTTTTGTTATTTGTTTGACCNNCTTTCTTGTGATTGTTTGGTTCCAAA ATAAAATTGAAAGCT >gi|3449483|gb|AI099744.1|AI099744 33897 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121P16XP 3', mRNA sequence AGGGGTCCCTNGTNAAAATNGGGTTTGGGCCCCGGATTNTTTTCCCNGGGGCCCCGGAANCCCTCCCGGG TNCTCGGTGGNCCGGTACTGGNCCAATGTGNAAGCTCCCATTGTCCGGATGCCACCGACTCCGCTCAAGT GTTGAAGGAAGTTGAAAGAATGCAAAGAAGGAGTACCCGGCGCCTTCATTAGGATCATCGGATTCGACAA CACCCGTCAAGTCCAATGCATCAGTTTCATTGCCTACAAGCCCCCAACTTCACCG >gi|3449482|gb|AI099743.1|AI099743 33896 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121O22XP 3', mRNA sequence GCATNGGGCCACNTTCATAATGGNTTGACATTTTTTCNTNATCCNTCTNTACGCAAGNCNAATGAACGAA ATTCAAATGCAANCTCAAAGGCCTCCAAGCTCGCGAGTGTTTACAAAGGAGAANCAGAGAAGATTCTCCA NGTGAAGAGAGCCGAAGCAGAAGCGGAAGCCAAGTACTTAGGTGGTGTCGGTGTGGCTAGACAAAGACAA GCAATCACAGACGGATTGAGGGAGAACATATTGAACTTTTCTGACAAAGTAGAAGGCACATCCGCCAAAG AAGTGATGGACTTGATCATGATCACACAGTACTTTGACACTATTAGAGACCTTGGAAACTCGTCAAAGAA CACAACGGTGTTTCTCCCACACGGTCCGGGACATGTGAGGGACATCAGCGACCAGATACGCAACGGTATG ATGG >gi|3449481|gb|AI099742.1|AI099742 33895 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121N4XP 3', mRNA sequence TGTGGCTTTTTNCTGTCAATCAGCCATGTNTGCTTTGGACACTTTCAGTNCCCTTCTTTTGCTGACAGGC TTGAAACCNCTGTGAAGCNTGTTATCNGCTGAAGGGAATTGTNGGACTGAAGATCTTGGTGGAAACNGTA CCACTCAAGAGGTCGTTGACGCTNTCATTGCAAATTTGGATTGACTTGACAATTCCAACTTCGCTTGTGT AAAGCATCNGTCACACGTCGGTATGATTCACGCTTACTGGAAAATACTTCTNGTTCCCACATTCTTTCGA GATAACTCGAATTGGGATTTCAGATTTCGAGAAAAATAACATATGGTTTTTTGTTTTGTTTTTCTTCTTT TTGTTCATGTNATATGCAAAGTGCAAAGTGAAAACTGCCTCAGAG >gi|3449480|gb|AI099741.1|AI099741 33894 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121N24XP 3', mRNA sequence ATCCCCCCTTGGTTTTGTCATTCCTTATNATCAATTTCGGGCCCTNCCTTTTCTTTATTGCTTGTTAGGA GCTNTTTTAAGAAGAATTATGGAGGGCTCATGCCAANGAACCACTTTTCATTTCCAGGNNTCATGAGCGG NGCNTACTTTGACTCAGCTGATTGGGCTCTTGGAAAGCAAGGTNTTGCGAAGCCAAAGGGACCCCTGGAA GCCCTTCGTCCCAAGTTACAGCCAACGCAGCAGCAGACACGTTACAGGAAGTCTCCATGTGCTCCATCTG AGGGTGGTGAAGATGGAGGAGCTGCTCAGGCCGAGGGAGGTTCAGGCAACTGAGGCGTAGAGAGACAGAG AGATGTATGAAAACTCTTGTGTAAGAAGTCTGTTATAATCGGATATTTTCTGTCCATTTGAAACATCAGA TATGGCTTTCATTAAAATCTTAACTTGATCGAGAAATTATAGTTTACCCTTTTGGTCCGG >gi|3449479|gb|AI099740.1|AI099740 33893 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121N10XP 3', mRNA sequence ATTGGCCNAGTTTTATTCTAAATCCCTTGGCTGGGNCTTGGGGCATGGCCCCGTTGGCCTGGGGCCCCNC CTTCGNGNTCCTNCGGATAATGNAGTTCCGGGTGCNCCATTGCCCATATCGCTTTCTATGTGTTCAAGGA GAAGCTGAAGTCGTCCAACCGTTCCAGCTNTTGNCCAGATGCTCACTACTNGCTCAATTGCTCTCCGCAG TCCCTCAACGACTTGGTTTTTTCGTCCGGAGTAGTAAACATGAACAAGTAGGATACTAGGATTAGTGGAT CGTCTATCTATCAATACGTCCGCTCTTTGTTCAGTAGATGATGCTTTCCATTACTAATGTAGCTCCTCGT TGAAGACAAAAGTCGCGATATATGATTTAGTCTATTGAATTAAGCATCGATCGACAACAAACAAAGGTTT AGTTGTTAATTAGCTCTTTCTTAGGTTTTATAGTCTGTTTATTTGTTAGCATTAATTATAGCGTTTTTAC GATTAAAGTAAAGCAAATAAATGGTGTAACATATATTGTACATGAAAATGTGTAATGGTGGAGGGAGGGA ATCAAAACCTCTGAACAATGCATGTG >gi|3449478|gb|AI099739.1|AI099739 33892 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121L8XP 3', mRNA sequence TGGCCTACTATATTANTTCTTGCCNTTTGAATTGGCCCCTTCAGNTATCNAACTNGCTTTTTGANNGGAC CCTCCGNNGATTGGGCTATTTATTTCTCGGTANCGAGGANTTAAGCAAAAGCCTTTATTTTTCGTGGGAA AGAGTGGAAGTTNAAGAAGAAGATATGCCTTATGGTTTTTGGTTCCAATATTTGTGGAACACNACAAAAG TACTTAGGATTTAGTGAACAAGACTTGAATGGATTAAGGATCTTGTCTTCATTAGACGCCAAGAAGAAAA AATCTCTCTTCCTTACCTTTATTTTTTCATTTTCTGTTTTTGTTAATTTATGTGTAGATTTTGGNTAAGC AGATATGTAATATGCNCCTTTTTTTATTAATTGAAGTTTCTAGTTAAGTGGTTT >gi|3449477|gb|AI099738.1|AI099738 33891 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121L2XP 3', mRNA sequence CAATNCCTCGGCGTATNCCTTGGGATTTCCGGTTGATCTTNCTGTTTATGGGNTCGTTCANCNCAATCGT CGGAGTTTGAAAAGGGTTNGCATGTGATCTGTGTAAAGCANCGAATATAACTACAAGAAGTTTGGTAAGA CAGACAAGAAAAAATGTATAGATCTTTTACATGAATCTGAAATAGAAAGATGGNGAGNAAGTNNGGATTG TTGTATGATCATTTAATGGTGTCAGGATGCAGAGTCTTAAACAATTAACACACCGATTTTCCTTTTTTAG TCTTCCTAATTCAATTTTCCAGATTTTGTTTTTATTTTTCTTTAATTTTT >gi|3449476|gb|AI099737.1|AI099737 33890 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121L24XP 3', mRNA sequence GAAGGTTCCATCAACGTCCCGGGCCATTTTCGGTNGGCCCACCCTTTTTCCAAGGCTCCNCNCCNGNGCT GAGGGAAGGANCCGNTACGCTCTNGGNGGATTGGCTGGACCATGGAGAGTAGCCTTNGGTACCCTCGGGG ATGTTAGTATTGTTCCANTCGAAGCTTCCAAAGAAGCTCAAGAAAAGAAAGGCGATCACTAGAGAAGACG GGTCAACAGAGTACGAAGAATACATCGATTATTTATACCCAGAAGAATCGCAAACAACGAATCTCAAGAT TCTTGAAGCTGCATACAAATGGAAGAAGCAGAAGGTTGCTGCTTCTGAGGATGATTGAGATTAAGCTTTT TTCTTAAGTTATATCAAAAGTCAAAACTGTGAAATGTGTTTTGTATTCTTCCT >gi|3449475|gb|AI099736.1|AI099736 33889 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121L17XP 3', mRNA sequence CCAGGGNATCCCCNGCCTGGCCCNTCNTTNACCNCCAACTCGGNTGGNACCCGGAAACNNCGCTTNTGGG ACTTGCTCGGGGTCGGCCTTNACCTTCCNGGCACCGGNCATACGCTGAAGCTGTGAAGAAGGCAACATCC AAACCAGTGGCTTCCTTAAACTCTCCAAGCCCCCAACGAAACTCGTTAAACACGGCGTCATTTTGGCATT TTACTCTATTCGATTCTATTTTTTTCATCCCAGAGAAAACTTTTTTTCTTTTTTCTTTTTAAGAAAACGA TATAATCACGGTGGTTCGTTCCAAGTATACCTTTTCGTTTGTAAGTTTTCTCTTTTTGTTTGGTTTGTTT GGCCATGTATGTCGGAGCTGTCAGAAAGCAAGAGGTTAATCGTTTGTAGCGAATGATAAATGTTCGAGTT TATATTTTAAAATGCTTCGTTT >gi|3449474|gb|AI099735.1|AI099735 33888 Lambda-PRL2 Arabidopsis thaliana cDNA clone 121K3XP 3', mRNA sequence TTTCCCAAGCCGCTTTTTCCGGTCACCCCTTGTTTGGGGNACNNTTCTGGGGNACCGGGGGNAGGCTTCT TCCAGCCGTTGGCNCTTTTNCCCCTGGGGACCTTGGTGGGGGGGATCCCATAAATGGTTNTTTTNGGACC NCTGGGGTGTTGGGGGTTCCTTTGGATCNCCATTGNGGCTGGCATTTGTGTTGGNCCAATTGGAATCCCA AACCNGCTNTNGCTTCTCTAAGCCAAGATCTTGGGGGGATGTGAAGGAGCACCCCCATGGTTCGGAGTAG AGGCTGCAAAAGCCCTTGGTTTCATTGCAGATGAGAAGAGCAGAGAAGTACTCCAAGAACTTTCAGGCGA CCTCGATCCCATTATCGCTAAAGGTTGTGATTCTTCATTGAGTATCTTGGAATTTAAGAATTCAAAAAAA TATGACCCTCTCATATAAAATGGTGTGTGTGGGTCTGTTGTGTAATGAAAACATCTACGTTTCATCTTCC TTTTGTTAAACTTTGTTTTGTATTCAAATGATTTGCAGACGGTTTAAGCTCTGTTTTAAGCT >gi|3449473|gb|AI099734.1|AI099734 33887 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120P15XP 3', mRNA sequence AGCTNGAGAAAACNTTTNCTNCCAGAGATTCAACTNCNCAAGANGATNAAAGANACTCCNTATCCGGATA ANATGGAGATGGTATTTCATATACTCTGTCTTTATCAAAAGGAGATCACACNTACTCGACATCGAGTCTT GTGNTGGAGTGAATGGTACTGAGCTTTACCCTGATGTCAAATACATGACCGTGAGCGAGTTTCTTGATAC TCTTCTCTAGAATTATAAACCAAACAGCAAAGGGATCACTCTCATTTTTCAGAGTTTACCTTTTACACTT CCAAAATTTCTCTGTTTTTGAGGGCTGAATCAATCTATCTCATGTAGCACTATCTTTACCCTATTGATCT GAGTTTCGNCCTT >gi|3449472|gb|AI099733.1|AI099733 33886 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120P11XP 3', mRNA sequence CCTTGGGTTCCCCNNATCAGTGGGNAGTCCGNCTTATTTNTCGGTTGGAACTTGGCTCCCCTTTGNAGAA TGGACTTTAGGTGGNCTGCTTTCCNGCCTTGATGGGATTCCGAGAGGGGCCNCGNTAAGTTCAAGCCTGT NATCAAGAAAGCAATGGTGGAACTTGAAGGTGCACCCATTTAAGGAAATTTCGCAATCTGCGTGAAGAAT GGGCATTGAAGAACCGATACATCAGCCTAGGTCCGATCCAATTCACTGGACCTGGTTCAGACTCTCTCAG CCACACTCTACTTCTTGAACTCGGGGCTCAATAGTCTCTCGACTAACCACCATTCCTTTGCTTTTCTGCC TTCCTTGGAATTTCGCATTCAGTCTTGTTTTATCTTGAATATTACGTCTCCGTAACATTTCGATTAAGTT GATTCCTCTCGTGTTTCTTCAACATATAAGATAATTATAATATTATTTCTCTCGTGTTTCTTC >gi|3449471|gb|AI099732.1|AI099732 33885 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120O6XP 3', mRNA sequence GGGCTCTTTTCCTGCATNGAACCCCGCATTGANGCNATCAAGGAGNCNANGGGGGGNCCCTCCCGAGNCN CNTTCCTCACGCAGAGCCACCCTTACCGNNTGATNCATGGGACCAANCTATAAGTCNGCCTATGAGACGG GAGAGAAGAAAGAAGAGGCTGGATGTTCTTGTACTCACTAAAACTCTCCAGCTTCTCCACAAAGCCCCAA GTGATTTTCCTCTGCACTGTTGTGACTGTAAAACTTTTGACAAGTTTTGTGTTTGCTGAGTTAGTTACAC GAAACCCAANTACTATATATGGTGCGAAATGTAGTTTTTGTAATAAGGTTCTACTTTTTTGTAATAATAT GCATATCCCTTGATGAGAAAAATACTTTGTATAAGCCAAATAACAGAAAATATCAACAATTTGATTAAAC ATTCATTTTCGGTTTGGTTTACG >gi|3449470|gb|AI099731.1|AI099731 33884 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120O3XP 3', mRNA sequence AGGACCCNGGTTTTTTGACCCAGNCCCCTTTTTTTAGGCAATTCCGNTTTCCCTTAGGGTGAAAGTTNGT TCCCCTGGTGGAATCTTTACCCCCGGTTAACTTNGGCTCCTTCCGCAAGGAGGCCCAGGGAGGAAGGAGC TAGCANCCGGGAGGTTGGCGATGTTGGNATTCTTAGGGTTTGTGGTTCAACACAATGTGACTGGAAAAGG ACCATTTGAGAATCTGTTGCAGCACTTGTCTGACCCATGGCACAACACTATTGTCCAAACCTTCAACTAA AGAGTGAAGACAGACTTATGATCTCATACCTATCTATCTTCCATCACTTTCATGTCTGTCTGTGAGTGTG TTTCATCTTAGAGTTCTTGGTTTTTGAGCTTGAATTATTGTTGAACCGTTGTAGCTCCATGAACAAATTT GGAATCTTCAATGTACAGAGGAACTAAGTTAATC >gi|3449469|gb|AI099730.1|AI099730 33883 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120O2XP 3', mRNA sequence TGCNCAATCTTNGAAGAGCTGGCTNTGCCACACCNGCNAGCCCTTGCTNTGGTGCTTGCCTTGGTGGCCC CGCAGACACNTACGCTCGCTGGAATGACCCTCAAGTGTGTGTCCTCAACGACANACAGGAACTTCCCCCG GTCGGATGNGACACAAAGAAGGGCAAATTTACTTAGCGTCTCCTTACACTGCTGCAGCCTCGGCTTTAAC CGGCCGTGTCGCTGACCCAAGGGAGTTCTTGCAGTAGGCTAATGTAATGGCTTCGTGTGAAAAATCATAT GCTATGCATCGACGAAATATTGCTAAATGATGGGGCATTGTGAACTATATGTATGTATTTTCCTTATTTC GCTGTTGGACTTGATAGTTTCAAGCACTATGTCAAACTTTGATGTTTTGAGTTTGAAATAATAAAAGAGA GAAAAAGAGTGAGTTAGAT >gi|3449468|gb|AI099729.1|AI099729 33882 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120O24XP 3', mRNA sequence CCCAGGAAGGGGTGCNACTTTTCAGGAGGCCACNTTAACAGNANTNTTNCCTCAGNTTCATGGANGCTTT GCTTTGAAGATGTTGCTTTNCCCCGCTGAGATTTGNTGGTAAGCGTTANTCGCTACCGTCTTGATGGTTC CAAGATTCATGAAAGGTCNTTTATGGATGCCAAGGTAATAAGNACAACACAGAGTACAAGCTCGAGACTA TGGTCGGTGTGTACCGTAAACTTACTGGCAAAGATGTTGTTTTTGAGTACCCAGTCGAAGCTTGAAAGAA GATGATGANGAACCATCAGGATAGTGAAAGAGAGCTTTTGTTTATGTTTTGTGGTATTTAGGATGAAGGA AACTCTCTTGATTCAGTTCCTTGTTCACAATCTTTAATGTTCTATTTACAATGACTACTTTTTGTGTTTT TCAATT >gi|3449467|gb|AI099728.1|AI099728 33881 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120O1XP 3', mRNA sequence GATCCCNCCCCNAAGGNGTGGTTTACTTTGNGCTTAACCCAANNCCNNGCACTTCCAAAGTCTTACTTCA ATGACCNCGTTTGAATTCNNCCTCCCATCCTTTCCCAGCTCCAANTACAAATCCAACTATCCTCCGNCGT TATATCCACCCGGTCCTGTCCAAGAATCTGAAAGGAGTTAGTGTTAAGGTTCTTTTCTTCTGGGTTAATA TTGCTGAAGTGTCTCTTGACGGCGCCGATCTCGACTTCTCCGTCGGAATCGCGTCGGCGAGTTTTCCGGC TGCTAATTTTGAAGAGAGTCCTCAGTGTGGTTGTGGGTTTGATTGTAATAATGGGCTTTTATTTTCTTCT TGAATCTGTTGGGCCTTGTGTTGTACTGAATAAAAAATGCCCTTCTCTTATGATTGGCTTATGAGTATTG ATTAGTTAATTAATAAATTGATT >gi|3449466|gb|AI099727.1|AI099727 33880 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120O15XP 3', mRNA sequence TTNCANGTNGATCGNTATNTGAATTTGTTAAACCAAATAATCANGAAAGNGAGAGGGTGATGAAAGTTTT CTTTTATTTGTTTAGTTCAAATCTTCTTCAATTTGTGNTGATATTATTTGTATATATATTTCAACGATCC AATATTGTTATGTTTTATAAGCATATTACAAGTATTGGAAACAAAATTGTATGCTTTTGAGCNCATTTTG ATTGGAAATGATTTTGAGTTTGAAAGC >gi|3449465|gb|AI099726.1|AI099726 33879 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120O12XP 3', mRNA sequence CCGTCACCGGTGACTTACTGGGTGCCTTTACATCGATCCTGACTTGCCAGCACGTTTTCATTNGCCTGCC TTCCAGGAGTTNTTCCTCTGGATATTGAGCAGGACGGCGCAAATGGAGGAAGAGACGTATAAGCAGCTGG TGGAGAAGGCAGTGGAGGAAGGTTATGACATCAGCAAGCTTCACAAGACTCCTCAGAGTGACACACCNCC TGAGTCCAACACTGCCCCTGAAGACTCCAAGGGCGTTTGGTGGTTCAAATCTCTCTTCGGCAAATNGATT NCNCGGCACACAAAGACTTTGTTTCACCTCTTTGATCCTTTTGTCTGTGTAATATACTACCCCCTTTGTC TACTCTAGTTATCTTCCATC >gi|3449464|gb|AI099725.1|AI099725 33878 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120O10XP 3', mRNA sequence GGGCCTGGTTTTTTCCCAGNTTNTTGATTNTGANCTTTTTGGNCGGAANTTNTTCCNGGTTTCAGTGGTG GATCCCNTGACATGGCCAGGCAGCTTGCTCTTAAAGAAGGTCTTCTTGTGGGNATATCATCCCGGGTCCA GCAGCTGCTGCAGCAATTAAAACTTGCACAGAGGCCCAGAAAACGCTGGGAAGCTATTTGTGGCGATATT CCCGAGTTTCGGGGAGAGGTATCTATCAACGGTACTTTTCGATGCGACAAGGAAAGAAGCGGAAGCCATG ACCTTCGAGGCTTGAACATTCTCCATTTCTTCTTAAGAGACGCCAAAATAAAAGAGATGTTCAGTTTCTC CTATAGAGACTCTTCATCTTTAGTTACATTGCGTCTTTGCTTCCATCTGTATCTTCTCTTGTGTGCCAAT AAAAGTCAAACTAGATTTTCTCTGTTTCTTTTGTGAACCACTTGCTTGTTAATGAAGTTTAAATTTGCT >gi|3449463|gb|AI099724.1|AI099724 33877 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120N3XP 3', mRNA sequence TAAGGCTCCCTTCATGGCTTCTTNCGGAACTTTAGGTTGGCNTCGNANCCCCANCTCCCATTGGNTCCAC TCANGAAATGNATTCCAACCANGCCAGNCTTGGNCTCAAATGGGTNCAGANGGATTACTTGATCTACATT TATTGTACTGACCCATAGGNGGGTTTCCACAGGGAGCTCCTAAGGAATGCACAACAAGCTCATAGAATCT CAAATTATATTCTATTTATTTATCTACACTTCCTCTCTTTCTTTTATGTGAAAATTGTGAATGCTCTGTT TATAGCTTGTCTATTATGTCCGAGAATTTCTTTTTCTGTTTTTGATTCTTTTCGTTGTATATCTTTGTCC AATAAAGGAAATGATGTGTCTTTACTCTTATAGATATGTATAAAAAGATGTCCCTGTTTTATTTGTTAAA AAAAATTGTTTATGATAATGATAGTTCTTTCTT >gi|3449462|gb|AI099723.1|AI099723 33876 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120N23XP 3', mRNA sequence TTTCGNTCCCTTCCNGGTTTNCCCGGTTCCCGGTTTGGGGTCTTNCCTTNGNGANGGTTTTAGGANGAAG GGGCAGGTTTCAATTCNCAGNCCCAANGNACTNGTCCACCNCACCTCAAGACTTGCCCTCCTCAGCTTCT CTTTGTTCCACCAANGACAAAAAGATCTGAAGGAACTTCACTGGCACAACCAGATTCCGGGGATGATCAT CTCAACTGCTGGTGATGGTTTCAACATCTTAATGCCTTACAACATTCAGAACACGCTTCCGTCTGAGCTA CCAGCCTGAAAGACAAGGTCTTACTCTGAAAACTCTTGAAGTATTACTCATAGTTTTGTGTTGTCCTCTC TCTGTTCTCTTTCCTTGTATCATTGATGGCAAGTTGCAAGAATTATACACTCTTTCACAAGTTTCAAGTT TTCATCATCAGTTTATTTACTG >gi|3449461|gb|AI099722.1|AI099722 33875 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120N19XP 3', mRNA sequence CTNATTCAATCCTCCAANTCGTTCGGGNGTTNCTCATCCCTTGNTCCGGGGANTTNGCCACTGNNGGGGG ACTTTTCCATAATTCGACAAGGAAGGAGTGATCCCAACATTCCACCATTCNACAATCTTGGGTATTGGCC GAAGCNTTGATGAGACAATGAGAACCCTCCAGGCATTACAGTACATCCAGGAAAACCCGGATGAAGTCTG CCCAGCAGGATGGAAGCCGGGTGAGAAGTCAATGAAACCCGACCCAAAACTCAGCAAAGAGTACTTCTCA GCTATTTAGAAACTCTACTATGATAGCAAAAAGGTACAATCTTTGTTATATGTGAGCAGAGTTTTTTTTC TTGTACGCTAAAACAATCCTTTGTTTGATTCTCACTTTGTCCCCAAAATTATAATAAAAAACTTTTTCCG TT >gi|3449460|gb|AI099721.1|AI099721 33874 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120N14XP 3', mRNA sequence AAGNTTTCNNCCNCCAATTTTCGGTCCGGTGTCTCCNCCCAACTTCCCCTCATCCTGTGTCCCTTCGTGC GAGCNTGTAGCTGGTCCATCATCATCGAACCATCACCACAATTCACAGGCCGGTTTCGATTAACCCGTGG ATTGCTTGTGCTGGTCAGGTGGCTCATGGGCTGAATTTTGAAGCCTTGCGTCCACGATCGTAATTTTTAG TGGTGGGGGAAGGGTGTTTTGGGTTTTTTCATTATCGTTATATAGTCTATCTGTGTGGGGTCATTGTAAT TTTGGATGATTGGCCTTCTCATGAACTAGTCATATGTATGATGCAACCTTAAAAATATTTCAAGTAGCAA AACTTAATTACAAACTTGCTATATTAACCAAAAATTATG >gi|3449459|gb|AI099720.1|AI099720 33873 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120M11XP 3', mRNA sequence TGAAGTTTATGGAAGGTGTCNTCCCCATNTGCCAGGTCAAGNGGATGNCCACCCTGATGCTTTCCAAGGT TTGGNGGCTTCAAGCTGGTCACAAATACTGTCTATTGGNCCGTCTTTCTTCTGAAGTTGGGTGGACCCAT TACGNCACCATCCAAGGAGCTGGAGNCAAAGAGGAAGGAGAGAGCCCACNTGGTTTNCGAGCGAAAGAAG CAACTTAACAAACTTAGAGTTAAGGCCGAGAAGGTCGCTGAAGAGAAGCTCGGAGCACAGCTCGATATTC TTGCGCCAGTTAAGTACTGAGCTTGTCAGTAGTAGTTTTTTTTTTTTGGTAAGGAGCTTGTCAGTAGTAG TTTGTCTTGGCATGTTTTGAGCCAACCCAATACTTTTTTACTTTTTATCTTTTACTTAGGTCTTGTATCG AAATTTGTACTCCTAACATTTTNTANGCTGAGAGTTATATATT >gi|3449458|gb|AI099719.1|AI099719 33872 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120M10XP 3', mRNA sequence TCTCATCAACTTCCAGNTCCTGCCNCCCGCTGGATATCGTGGACTGCTTATCAAGGGNTGCAATCGCTCA GGAACTTCCGAGAAGAANTGCAAGACGTTGGGTGTTTGGAATGGNCCTCTGATACTCGTAAATGCAGAGG AATTCCTAGTGAAACGACGTCTGCACACTCTTGCGCGCATGCCCCCCTGAGAAATCGGTTCTAAGGCAGC CGGAGTTGGCTGATTCTTGAATGTTCAAAACGTTGCTATANCNGGATTTTAATNCCTTATGGGTTATACA ANTAGGAACACGAGCTGCTCCATGAGAATGGTTGCAGACTTTGTGTAGTGTCTATATGTATGGATTCAAA CACATCCTCCAAAATGTCCCTTTGCCTTTGTGTAAATAATGATCGCTACAACAATTGTACCTCTACTATG ATATCACTGTATTCTATTTGAGGTTTGTTACATTTTATATGAATGATATTAGTGT >gi|3449457|gb|AI099718.1|AI099718 33871 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120L20XP 3', mRNA sequence AACCTGGTCCCCCTCCAGGTCCCGGCCCGGATNCCCGGTCGNCCCCACGCGTCCGCGATNCANTAATTGT TGATTNNCTCAGGGAGAGGGATTTNTTCCCAGAATNGGGCCCAGGAANTGGGGACCATCCGTGTGTGCTT TTGGACAAAGATCTCCAGGGAGCTGCACCCACCATTGCACCCGCTCTTAAAGACAAAGGGCAANCCGTTG ATTTAGTATTGGAGAGTAAACCGCTGAAATGGGTGTTCAAGAGAGCGGCTCGGGTAAACGCAAGAAGGCC GGTTCTGGTTGGGAAGTTGGTTCGGTCAGTGTCAAGGTTTTGTCTTCAGGTGAGCAATTTCAAGTCAAAC TTAATGACTTGGAGTAGTAGTATCTAAGGCTTGAACAAATTGTTCAATTGTCCTTTTTTTCAAAAGCAAT TGATTTGAGATTGGATTTTTATTTTGTCCTCAAAGGTTTCATTAAGAATTTTATTGATGGATCTTCAATA CTCGTTTATTCGTCT >gi|3449456|gb|AI099717.1|AI099717 33870 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120K5XP 3', mRNA sequence TTGANTTCCCGGTTGGNAATTCCCGTTNTTGCGATNGCNGAGCTNANGCTATGATAATGCAGAAGGATTG GTTAAGATTCTGGCCGATAAGGANCTGATAAGATCTTGGGCNTTCACATTTTGGCGCCAAACGCTGGAGA GCTGATTCATGAGGCTGTTCTTGCGATTAACTNCGATGCATCAAGTGAAGACATTGCTCGAGTCTGCCAT GCTCATCCCACTATGAGCGAGGCTCTTAAGGAAGCTGCCATGGCCACCTATGACAAGCCTATTCACATCT AAAAGGGAACAAGGAAGACCTTAAAGGAGTGAGCCACCTATGACAAGCCAAATCGATATCTTAACCTGGT TGGATTTTGGTTCGGTTTTCTGTGGTTTAGCCTTCAATTTGTCCTTTATACTGTGTTTTTATTCGTTAAT GTTCAGATACGTGTTAAGCCTGATCTTTAATAAAATATTCAACATTCACTC >gi|3449455|gb|AI099716.1|AI099716 33869 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120K16XP 3', mRNA sequence TCATTGGNCCCTTNAGGATCNTGNTTGCTNAAGTCCATTCCTNAAGCTATTTGGCAGGGAGATTGAGAAG GCANCTCCAGGGCATCTACCCTCTTCAGAATGTTTTCATCCGTAAAGTCAAGATCCTCAAGGCCCCTAAA TTCGACCTTGGCAAGCTCATGGATGTTCACGGAGATTACTCAGCAGAAGATGTTGGTGTTAAGGTAGACA GGCCGGCTGATGAGATGGCTGTTGAGGAACCTACTGAAATCATCGGAGCTTAAGAAATCGAGAGATGTCT TTTTCTTCTAAACTTTAGCTTTTTGATGCTCTGTCGTTTCACACACTCTTTTGTTCCCGGTTTAATTTTG CTGTATTGATGACTTTTCTCAGTGTAAACTTGCGAGTTTTTGATAATTTATGGAACACCTTTTCTCT >gi|3449454|gb|AI099715.1|AI099715 33868 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120J7XP 3', mRNA sequence TCCGGGAATTCCCCGGNTCGACCCCACGGCGTCCCGTGACAAGGCAACAAACNGGGNCACACCCTTGGCT ATTTCCATGATTGTTCTTGCGGGTATTGTCCCAATGCAATCGCNATTTACAGCGATGCTTATGCGCTATT CAAGAAGAACGCTCCTCGTGAGTAAATCCCGGTATGAGAAAATGTGCNGTTTGGTGTTTAGCTTTTGCTT TTTCTTCTNTGTGAAATCAAATAATGAAGAAGACAAGACTTCTCTTCTCTTATATGTTTGTACTTTTGTC GTTGAGTGTTCTAAGCGGACTTTTGCTTCGGTGTTATATACCACCATGAGTGTTGTTTGTAAAAAAACTC TGTATAAAAATTGTAATGCNGATACATATTTTGCCT >gi|3449453|gb|AI099714.1|AI099714 33867 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120J20XP 3', mRNA sequence CCCCCCCACTCAAGGTGCTTCNTTGGAAATTGGGTGAGGTTGGCCNCTCCGCGGGGNCCAANTTCNAGGG GGGCCTTAAAGGNCTTGNGCTNCGNTGATCCATTGCAACAANTNTGAGAGGGAGCTGTGACCGTATCCGC TTGGAACTTGCTTTCGTCCCCATTCGTGAGAGCTGAGGTGGTGAAGACCACACTTGCAATAAGAGGAGGT CACTACAATTTCGTCAAAGGAACGTTTGATCTCTGGGAGCTCGATTTCAAGACCACTCCTGCTTTTGCCT TCTCTTAAGAAAGAAAGCTACCGGNACATATAAAACTCTTTTGAGATAAAAAAAGACACTTTGACTCATC TTTCTTCATTCTCTCATGTTGATGATTCCTCTCCAACTTCTTTGATTTCTTTTTGTTAATTCAAAACTTC AACTTTGCTGCTTCTATTTCAAAAGCTCAAACAATAAAGCTGTAACCAACGTTTGAAACTTCTATATTTG TCTAATTGATGTTTGAACG >gi|3449452|gb|AI099713.1|AI099713 33866 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119I8XP 3', mRNA sequence AGGTCTGGGGTTANNTCAGGGATCNCAAGCTGCCATCGTCGTCTTGCCGTAGAGGTGGTTCAAGCGTATC AGTGGTCTCATCTTACGAAGGGNCCAGAGGTGTCCTCAAGATCTTCCCTCGAGAATGTCATCCGTGACGC CGTTACTTACACTGAGCACGCTAGAAGGAAGACGGTGACCGCCATGGATGTTGTCACGCTTTGAAGAGGC AAGGTCGTACTCTCTACGGTTTCGGAGGTTAATCCGATTTGGGGGATTAGGGTTTATGCAAGTTTGGGGA TTTCTTCTTGTTTCTGAGATCTGTGTTAAATGGTTTGAATTAGTCTAAAGTAAATCTAGGNGTGTTAGCT ACTGCTTTTGTTTTCTATTGTGATGTCGTTGTTAGCCAATGCGGTGTNGTTGAAAATCTTTGCAAACTTA AAGCTAAGAAAATCTAATGAGGATGAACAATTTACTC >gi|3449451|gb|AI099712.1|AI099712 33865 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119D8XP 3', mRNA sequence GGTGCCCCCCTTTCCTTAAATGTTATAGGTTTTCCAGGNNTTTTANGGTTGGTGGGATTTGACGCGAGCT TACCCATCTTTATGGTGCTTTGGACTATTTAGACCNTTTAGTGGTGGCTTTCCTCCGGATCNTCATGTTG GGTATCCGGATTACTGAAATTTCAAGGATAGTTTGCAAATAAAATTGAAGAAAAGAAAGAAATTTCCTTC GCGATTTTAAGATGCCTTTTAGCCGTGATTTCAATTGTTCGGAGTTTTGATTCGTTTTGCAACCAGCTTT GTCGGTGAAAATCAGAAGAATCAATAGTCGAATTTCAGTTATCGGCAATGATTTTCTTCACCAGAATCAG CATCTTAGATGGCGGTGGTGATGTCGGAAAGCTTTTAGAATTTTCATCCAACACGTGTACCACTGTTGAC ACGTTTGTTTGGGAATGAAACTAATGATAAACTTTCTTCAAGTTGAAGCAATATATTGTGTGGGCCTTTA TGGGCTGTAATCTGTTTTGTAACCCATGTTGTTATGAATAAAATCCTAATCTTGCGAG >gi|3449450|gb|AI099711.1|AI099711 33864 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119D7XP 3', mRNA sequence GCNTGTTAGNTATTCCCTGCCGNATTCAACCGGNCCTGGGGGAATTAAGGCTCAATGGTTTACCTNCCCG AAGAAGGCAAAGTGTCCCTTCCTTACAGAACTCGTTGCAATACCAAGATGCTCTAGCACATGTGTNGTCC TTGTTCTTTAATTACTTGAAAGGTATTGATGAACTTTTCGTTTAAGGTCAATCTTTTGGTCGTTAAATTA GTTGATTTTCGGAGGCTTTGAGCCACATGTAAATTTTGCNGTTAAGTCCTTCTTATGCTGGTTGCTGTTC ATGTNATAATCATCAATCACCAAGTTTGTTTCGAATTTGATGGATACTTCCACCAAGTCGCTGTCAAATA TTTTGTATGCTCCCATGGATAATTATTTTGTATTTTTGTAACTGAATGGTGATTCCTTACATTTCAGGCT TGTTAGCTTTGCNATTTTGTTATTTGTATTTTGGTTTGAGTTAG >gi|3449449|gb|AI099710.1|AI099710 33863 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119D6XP 3', mRNA sequence ATTGGTTCCCCGGAAAACNTTTCNCNTGGCTGGTTTCCCTTTGTACATTGGNCGGGTCAGNCGGATATAT GGCCCNCTTTTGGGTTTAAGNCCGGGACNACGAAAGCCGGGGATTTGNGNCCTTTCTGATGGATGCCCCT CCGGGCGGTAATGCTATTGGGGCCATGGATTACATTCTGATCAATAGGGACTAGTAGTATGGATTTACTT TGTACTTCAGACTAGGTTTTGGTCTCTTCCGTTTTAGTAGTTGTTCTCGTGTCGCTTAGAGTCTGTGTAG GTGGTCTAAGAGATGATAATATTCTCATTTGTGGNGTATTATCTATCTCATTGTGGTTTAAAAATGCAAT GGTTCCTCGATCAGGTAGCGCTGGATCCGATAGTGTTTCAGTTTGATATTAGATCAAACCATTGCATTTT GGTCCAATTTGATAGAGGAGAATGTTATTTACCTTCAATTGGATGTAATCATTTGGTAAATAAAAGTTGA TGTTGAACC >gi|3449448|gb|AI099709.1|AI099709 33862 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119D12XP 3', mRNA sequence AATATCCNTTTCGANACTATTNGTGTAAGTTTNACGTTGAAGAAACNAAAAGAATCAAAGGTCNGATATA TTCGGCGATGATTTCTTATCCACCGGAATCTGTNGCTCAATATGGCGGAGGTTNNTGTCGGAAAGCTTAA GATTTATCCTCCAACACGTGTATTTGCAAATCCAGCTANCGNCACGTGTCTCTGGGTGGANTCACGAATA TCCCATCTTCTTCTTTAGGCGGTGCCCTTGTTGGACTCGTTTTGGGCCTCAAGTAATACATATGTAANCC TTTGTTTGTAAGAACTTCTGTTATTTTGGCTTNGTATAGTTTGGTTTATTTAATAAAGCAAATCACTTAT GAG >gi|3449447|gb|AI099708.1|AI099708 33861 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119D10XP 3', mRNA sequence CGTTTCCCAATCCCGGTGGGGGGAAAGGCCGGGGTTCCCCCGTTGGACCCCGTTAGGGGGGAAAGNTGGT CCCCCAAGTTCCGNGTNGCCCTCCCCNNGCAGNTCCCTTTTCCCGNTCNTAAGGCCGTGCAGGTCCNNCC TGGATCGGAGNCTCCCAAGCTTGCCTNTGGAGGNCCCGGGGATCCTCCTGGGGCCTTAGCTGCCCCTGNT GGATCCTCTTAGCCTTAGCCCTGGGATCCAGGAGGGAGCCNTTAAGGAGTGAAATGAAGATGGGTTTGGG GATTGTATCGAATTTCGATTTGAAATTTGTGGTCTTTTTAATGGTGTTTTGATGTGAGAATATAAACTTG CGTTGATGATGCTCTATGTCTTCGTATTTTTATGTTATGATCATATAAAAAAGTAACTGATATTTTCTTA TTAAATGGTTTGTTTCTAACT >gi|3449446|gb|AI099707.1|AI099707 33860 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119C8XP 3', mRNA sequence GGCCCAGTGGCCATTGNGACAACAGCTTTNGGTGCNNCCTTTGCAAGCTGGATTTAGCTGTGGGATTCTG GAAGGATGCNGACATATTCGNGTCGGGAGAGAAGGCGAAGAACTCCAAAGTTTTCAGACCCGTCTATGGA AGAAGGANTCAGGAAGAAGAAAGTGGCGTCTTGGTGCAAAGCGGTGGAAAGAACATTTGATCTCGCTGAC CTCTCTATCTAAAACTTGAAGAAGTTGATCTCAGAGATNTCCTCTTTATTTACCNCAGTTGGGCTCTGTC TTCCAAGTCACATAATGTTTTAAGGTCTAATATATGTTTGATTAAACCGTCTTTGAATGATTTATACATC AATGCTTAATTCTGTTGGAAGT >gi|3449445|gb|AI099706.1|AI099706 33859 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119C5XP 3', mRNA sequence AGGGGGAAAGTNTCAGNGTNTTTGGGGCTCAACTNTNTAACGGTGGTNAGACCNGTAGCCGANGGGTCAG NCAGCGACCCACTTTAGAAGTGCTTCTTCACATNTTGTTAACAAACTACTTTTGCTTACCACTCGTAAAC AGATTAACCGGTTTATCTNGTATGTACCGAATGAAAGGGAAGCGGAGCCNGAAATCTTGTACCACAAGAG AAGAGCTATGCGGCTGTGCACTAGTGATTAACCGGTGCTTAACCGGTGCTTCACCTTTCAGTTCCTTCAC GTCTCTGTGGATTTTTGTTGTTGAGTCTTTTTTTCAAATTCTTTTCCCAGCTTCAAATTACTAGAAACTT ATGATGATATAATAGAAAGAGTTAACTATATTCCTGTATGGNAGTTATAATCTTGCAACTTGTAACACNG AATCCT >gi|3449444|gb|AI099705.1|AI099705 33858 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119C13XP 3', mRNA sequence TTGCCGGTTTGGTTTGTNCCCAACGTTGTTTGGNTTTCCTTCNATAACCCCATGGNCCTTNTGGTTGGNN TAATGGTTTAGGNGTTTTTTCGCATTAAAGACTTTTATTANCCAATTCGACCTTTNNAGTTTGGGGATTT GCNGGGATTCAATTTTGGAGATTGCATCNTTAAGTTGAAGAAAGAAGAAGTTTTCGTTGCATATTAATAT TGCCCTTAGCTGCTAAGTTTTTATCTGGAAGTTCGATTGGTTTGTTTAAGGTGAAACCCAGAAGAATCAA ACTTGCTTTCATTATCAATGTTGATTTTTCTCACCGGAATCAATCTCAGACGGCAAAGGAAGATGTCGGA AATGCTTTTAGATTACTCATCCAAACGTGTGCTGTGTTGTTTTCAGCTGTTGACACGTAAGATTGGTTGG AGCCACAATATCAGTTCTTCATCTTTAAGCAATGTTCTTGGACTCATTTAGGACTTCAAATGTTCTTGTA ATCTCAGTGTATGTTGGGCTTTTGGTTTTTTAGCCCATGTATGGTTGGTTAACGTTAATAAGATTTTCCA CTTATGAG >gi|3449443|gb|AI099704.1|AI099704 33857 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119C10XP 3', mRNA sequence AGAGGCGGGCCCAAATTNGGTTCCGGAGGACATTGCCTTCTGGTGAGTCCAGGNGCTTGGTTATCCAGAT CTGTGCAAAGNGNGATNTGANGTAAGAGAGAAGAAGACTTCAAAGAAGAGNCCAAGNGGATTGAAGGCAA TGGGGNGCATGGAAAGCGATTCGGAGTGAAGANCCNTCGAAGAAAGAACTTAAATGNGATATTCAAGATT TTGGCGAGGGGTAGGAAGGTGTATTTCACTTTTTCGTTGCATTTTGAGATGCCTCTCTTCATTACTACAG GTTAACTNTGAGGCACTTGTATTTTTGACGGATCTTTTGCTTTCAAAGCTAACCTATCTTCTTA >gi|3449442|gb|AI099703.1|AI099703 33856 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119B15XP 3', mRNA sequence CTTCCGGTGATCTNGCAGCTTTGAGCTCCCTTAAAGGNTTTGAAAGGACTCGGAACTTNCGATTACNCGA TGGAGANAGGGTTGGTACATGCNTTCCATNCAGGAGGAGTNGTTCATATGCTTGAGGGTTGGAAGCATCA TGAGGTTGGAGCCATTGATGTTGACCGTNTCGATTTGGTGTGGGAAGCAGCCATGAAGTATGGTCTTAGT GCTGTTTCTTCACTCACAAATTGAGTGAAGAGAGAGACACGTTTCATTGTTGTCTTTTGACTCTCCCAAG ATTGGTCATTCTTTGTACAGGTGAAAGGAGATGCAAGCAGGAAAAAAAAGTAGAATTTCACCTTATGTAT TGTTTTATCTTTTATTAATGATGTATTACTTTCTTTTTAGATTTCCTTAATATTAA >gi|3449441|gb|AI099702.1|AI099702 33855 Lambda-PRL2 Arabidopsis thaliana cDNA clone 119A10XP 3', mRNA sequence TGGCTCAATACCCNTACCCTTGNAACCNTTGGGNTAGACTTGGTNTCCACAAGAAGCTCTTGAGGNAGAG CGTGGCGANCTGATCCGTCAAAAGACATCCTTGTGGTTGGAGAATCTGGGTTATTCACTCCCGAAGATAT CGCCTTTGTTCAAGAAGCCGGTGTCAAAGCAGTTTTAGTCGGCGAATCTCTTATTAAACAAAGCGATCCC GGGAAGGCAATCAGCACCCTATTTGGAAGAGATGTCTCAGAGTAAATTCCGAGTAGAAACTTTTTGTATA GAGAAAATCTTCATTGAAGTCTCTTTTTTTCTTCTTAAGTGCCGCTCAAGTGCGCAGAGGCTTGTGCCTT TACAGAAATGTCCAATTATTATTATTTTCTTGTCTTACATACACATTGTGTACTTAAATTTATCCATCAA ATGTC >gi|3449440|gb|AI099701.1|AI099701 33854 Lambda-PRL2 Arabidopsis thaliana cDNA clone 118A10XP 3', mRNA sequence CCGCGGACCTTACTNAAGNTTTTTCCCNAAAATTTTTGGCTTCAGGGTCCNCAACCCTTTNNCTAGGGCT CTGCATTCTCCATGGGTGATCCATTTAGTGGCTCTNTAATTGCATCCGGNTGNGCAACTGAAATGATAGC TGCGGTGACTGGNGCATACATCACCCATTGGGTTAGAGGATGAGAGCTGAAGTTGAAAGATGGAATCTTG AAAGAATCTCATGAAGTTCCAAGAAAACTTAGAAGTGCAACAGCCTGGCTCATTGGGGGAAAAGANCGAC ATACTTGGGTCTTGTTGTTGTCTCCGAAAAGATTTTCCCCAGTTAGTTGGATTTTGTTTTGAACTGTTGG ATTATTATTCGTTTTTCTAATTTCATGTAAAACTCATAAATTTCAACTGAAGTATAACTTAGATC >gi|3449439|gb|AI099700.1|AI099700 33853 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116O6XP 3', mRNA sequence CGTTTTCNGGACAATCCNCCANTCNCCTTGGTTCCACGTGGGGCTACATCCNCGCCGGTGGANTTTCAGN GGGGCTTCCATGACCCCACCGTTNCTTTCGGACCNNCCGTCTTAANCTGGACGTGGCCCACCCACTGGGT TTTACTGGGCTGGNCCTCTTATTGGTGGTGGACTCGCCGGAATTATCTACGACTTTGTCTTCATCGATGA AAATGCCCACGAGCAATTGCCTACCACCGATTACTGAAGACGTCAAATTCAACGTTGTTAATCTGATGAA TTTTTCGTGATTTGCTTTTTTAATTTGCATCGTAATGGGTTTCTGGCCGTTGGATCATTTTTAGATGAAT CTTTGTCTATTGATTGATCATTTATGTGTCTTTGGGTTTGTTGTTGGAGTTGTAATATCTCTGGAAGGCT TTTGTGCAATTGTATTGTACGGTTTAATAACTATAATTGAGAAAACCAGGGAATGTGAATTATGAAAATG AATTTTTTTGTT >gi|3449438|gb|AI099699.1|AI099699 33852 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116N2XP 3', mRNA sequence GGTTTTGGTTNTTCGGGTTCTTTTGAACNANTTCCAGGTTTGNGGCNTGGCTTNGTGAGGATTTCNGATC AGGTTTCTGAAGGCGANGTGGCGCNCGAAGACTGATTTNGATCNCAAAGGTAGNTAGAATGTAAAAGCAC GTTGTTCTCTCTTTACATATTCGCAGATTCTTTTGTTCTCTGTCTCTGTGATTCTGATCGCTAATGGGTG TTTAAGAGTGGAGGAGACTGAGTCATCAATCTCTAACATTGGACCAACTCATGGAACATAACTGATTCAG GAGACATGAAACTGTAGTTGTATTGAATTGTAGTCTGAACAAATTCCAGATCTTCTTGTATTGTATTCAT TTCTTGTTTTGGATCACTCACCATTCATGATATATATCAATGTTGATATAACTCATCAATC >gi|3449437|gb|AI099698.1|AI099698 33851 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116M13XP 3', mRNA sequence ACCCCTTTCNGGTTTAGGAGACGNTCNACGTCGGATGCGTTCGAGAAGGCAGCNGGNGNNTCAGNGACTG GACCAAGGAGCTCTCCTCCTACTTACGGCATGTGATCTCTAACACNCAACACAAGTCTTGAAAAAGAGNA GAGANGAAGAAAACAGNGTACCCACCCTTAAACGATGTCGTTTAGACTGCATGAAGTGGTGGTTTTTTTG CTTTTGTAGGCCAAAGAGGTGTTCAGTGTTCTCTTATGTATGCGTGTATGAGTTTGTTNGTGTGTTTGTT TTTTATATGTAATCTCGTTTTTTACGGTAATGCTTTTATGCGTTTTGTAAATTTTTGCTGCAATGAAAAT AAAAACTTGTAG >gi|3449436|gb|AI099697.1|AI099697 33850 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116L17XP 3', mRNA sequence AGTGAATTGCCAGTTTACTTTTCCCGTCCCGTTAGATCCNGGGNTCTTGNGTCAGCGTTCCACGTTGCTG GGATTTTCACTGNGCCCCTGGNAAATTTNTCGCCCTTAAAGGAAATTNTCAACAGTTTTCCNGGNTTTGT TGGATGNCAAGTACGATGATCTTCCGAACAATCGTTTTACATGGTTGGAGGTATCGATGAGGTGGTTGCA AAGGCAGAGAAGATCGCTAAAGAGTCAGCAGCTTAAGAGATTGATTCAGATCTTTCATGCTTAATACTTC TCTTTTTTTTCCTGACAATAACGAAAAAAAAAAACCAATGCGTGCGACTCTCCGACCAAACGGAATCTGA GTTCCGTAATTATAGTTTCTTTTGGTTCAAATTCCATGAGAGCTGGCAAGATGATACTGAACAGATCCAT TCACTGTTAATCAAATTTTTGGTTGTTTTGCTTCCTTTGTTGAAATAAAGATGAAAAATCTTGCAGATTC T >gi|3449435|gb|AI099696.1|AI099696 33849 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116L16XP 3', mRNA sequence ATCGTGTTGGGGNACTTTTTTACTNTGGAGGTCCAGGAAANACCNTGGATTGTCCNTTGANGANTCNAGA AANCNNAAGCNGAAAAAGGTTATTGATTATTATTCNTTACNTGTAGTGCACATGAATTTTTGGGATTAAG GGAGATTAGGAATTTACATTGCCGCTAGGTGTTTTGCAAATATCATGTAGATGAGTTTTTTTTCTTTACC ATAACAATATCACCNCGAGCGAACAAAATCTTGTTTGTTTTTTTCTATTTTGTTAAAAATGATCAGTATA AAGTGTGGTAGTGTTATACTTTTTTTTTCTTTTCGAATTTGTGATGGCGTTACGGGTTTTGTAATGTTTA TATTGATTAGTGTTACCAATGTGAGATGGACAGTCGAGTGTTGCTATGTT >gi|3449434|gb|AI099695.1|AI099695 33848 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116L15XP 3', mRNA sequence CTTTTCGCTNCGCTTTGTNGCANTCCTAGAAACNTCCCAAGGTACACCTTTCCCACAAGNANGCTTAANT TTTTAGCTTGGNTTGATTCAAATTGANGGGTTTGGNGTAAATGTTGCATCCGTGNNGACCAACATNATTT TCATGGATATGGAGGATGGTTCAAGACTTNCGGCTGAGAAACTGCGGAANAATCTTAGAGGAGAATGGCA TTCTCCTTATCCGGGGAAACTCATCCCGGATCAGAATAGTTATACACCACCAGATAACAACAAGTGATGT GCATTACACATTGATCTTNTTTCAGCAAGCAATGCTAACGATGCAGGAACCAAGCCGAACCTAATTTGGC GAAACCGAAATGCTTCTTCTTTTCTTTTCAACTTATTAAATATTGTTGTCTAAAGTACATTTTAATTAAA ACTATAAGCATTTCAATGAAATTGTCACCCTCATTCCTGG >gi|3449433|gb|AI099694.1|AI099694 33847 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116K19XP 3', mRNA sequence CATCTCTGTTTCCNCAGTTAAGTCCTCNAGGGGNAGNATTTNACGTGAAAGGATNTTTTGCTTGGTCTCT NGGGATAATTTCCGNATTCTNTACCGNTTTTCCCGTNCAGATTCGGNCTAAGTACGTGATTTCGCAAATA TCACTGNTGATAGAGACCTCAAAGCATCTGGCAAATGGTTCCAGANGTTCATAAACGTTACCGACGAAGA CTCTACGAACCAAGATCTACTCCGCTCAAGCGTCTCCTCCAAGAACCGTGATCGGAAGAGTCTTGCAGAT GCATGAAATATCCAATCCACTATATGTCCACCAAGATCATCTTCATGTTTCCTCTTTCTACTTGCTCCAT AGATAAGGAGCTTTTTCTACCATATGTATTAAAATAAAATCCTAATAAAAGATGATCAATAATAATAAAG ACTTTGTTTACTAC >gi|3449432|gb|AI099693.1|AI099693 33846 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116J11XP 3', mRNA sequence GCCCTTTTCTTCAAATCGGNGGCGGNAACCTTTTTGTTTNCGGAGGNGCCGGGCCAAAGGAGNTTCCTAA GGCTCGTCGNCCAGACCANGGNCCCCAGTTGGAGACCCNTAGGAAGGTGGNANGAGNCAACTGNGGGAAG TCAAGGATGANCTCTGAAAAGAGAAGTGTGTTGTGTCTCTTTAGCTGCTAGCTTAGTTTGGGTAGTTTTG AGGAAAATACCCAGAAGAAGNCAGAGCATTGAGTAGACTNAGAGACAGAGAGAGAGAGACGACAGACAGA CAGAGAGAATCTCTTTATCTATTCATTAGGTTTTTATATGTGCACTCTTCAGAACAATAATGGCTGCCTC CTTTTCTTTTTTTTGGTTGATGTTACCTTTTTTTGTTTGAATTCAGTTCTCCTTTAATATAGTTTTTGAG GCATTTCTTGGGACGAGTTCTAACACTAAAAATATATTAATTCTGAAGC >gi|3449431|gb|AI099692.1|AI099692 33845 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116H21XP 3', mRNA sequence ACGTCCCCGGGNTTNCCCAACTAACCGCTGAGGCTTTGCTCTATTGGTCTACTCCATCTTCAGATGAAAT TCTACAGGCGCAANGATTTCTTGCATTNGTGGAACAAGTGAGCTTCGAACCCGTCCTCCAATCGTGAAAG GGACTTTTTTCANACAGTTTTACCAAANTTTGGGGATAATAAATCGTGGACGTTTCATTGCATATTTCTT TGTGGTGGAGATGCCATGTAAAGGAGTNTNTTTCTAAGTTTGTTGTGGAAACTTNATAAACTTAAGATGT TTNTTGTCTGAGTTCTTTTATGGGCTCTTTTATTATATATCTCTCTCTACCAGTTTTCAGCT >gi|3449430|gb|AI099691.1|AI099691 33844 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116G10XP 3', mRNA sequence TTAGGACCTGANCCGTTGGGGTTTTCCGNCGGTATCTGATGAAGNGTNCAAGNGCTTCTTGCTCACGATC CCNGTGCCCCCGTAGCTTGGAGCCCTGGAAGTATTTGTGCACTGGCACCCTTGAGTATGNGGAAAATAAG CGGAGGAGGTAGCTCATCCGGAAACTCTCCTCCAATTCTGTGTCGAGGTCTCGAAAGAGATCGACGAACA TCTTTTGGCCGAGGAATAGAGGAGTACTACTACTCTTCGTGTTTGAATTTAAATGCAATAAATAAGGACT AAGAGCCATGTCTTTGTGAGATATATGAATGTGAGTGTGCATCATGAATGTATGTATACTAAGATCGTTT TACGTTGGCTACTGTAACTTTGAGAAGCAATGTGTAGTAGCTGTGATGAAGCTAGTATAAATATATAATA AGTATGTTATATATGTTTGCTAATAATAAATGTTTGGACT >gi|3449429|gb|AI099690.1|AI099690 33843 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116F7XP 3', mRNA sequence AAATCNTCCGTGNTGACCCTCTNCATTCCTANGGCCATTTTGGGGTAAATTANCNTCTTTTCGNTTCCAT TCTTTCTTCNTTCTTTGTTTTGGGGGTNCAGTCTCCGGCCTTTNTATTTGTGGAGAGNCCGANTTTATTT CATTCTTTGCATCCCTGTGTAGTTATGGAAACTCACAGGGGTTATTTGTTTNCCATTTTGGTTTTGTCAT AGAATGGCTTTAGGTGTGTTTGATGCTGTCCTGCCCAGAGAGGGGAGGAGAGTATTGTTTTAGTCAATTA CTTATTTGTTGGTTTGGGCGAGTTCTTATACTCGTTTTGGGAAATTGTAATGAATGAACTAGAATTTGTT TTCACTATTTATATAGGTTGCACNTCTTATATT >gi|3449428|gb|AI099689.1|AI099689 33842 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116F22XP 3', mRNA sequence TCCAACCAAGCGGTCTNATCAANCNCAATGTACGNTGNTGGATACNAATGGTTNCCCTCCACAGCCACAG GNCGGCTATGGTTATGCAGCTCAACCACCAACTCAAGACCCTAATGCGTACTATGGTGGTTACACTGGCT ATGGCAACTATCAGCAGCAACGTCNGTGAAACATCAACATCAGCTATTTCTACCNATGTCTTGGAACAAA AGATGAGCGATTGTGTCTTATTAGGNCTTCTAGATTAAAAGTGCTCTCTTTTTGTTTGNGTTTTATTTTG CAAATGAGTCGATCTTGAATTTGCTNTGAACAAAGTGTTTNCTGAATGTTGAAACTTTATTCTGTTGTTT TTTAAAATAAATATTTATCC >gi|3449427|gb|AI099688.1|AI099688 33841 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116F11XP 3', mRNA sequence CAAGTTATCNGGCNAGGACAGCNCCATACTNTTTGGTACACANCACTCGCTTGNCCCCTTGNCCCTCTGT GAAGGCNCGTGTCAANTAGTGCGGGTTNTTGCANGTGCTCTCATTCAACACGTGTGGAAACCCAAGTCAT TCTTCACAATCTCTGGAGANGTCGACACAAAGTCAATTGACAAGAGTGCTAAAGTTGGATTGGNTCTCGC ACTCAAGCCTTGAAACTGAGATGGAAGAAGAAGTTGCAATAGTTTTTTTAAACTNGTTTCTTTCTACGTA CTCTGTTTTTTCTCTGCTTGGTTCATGGTTTGAGTGGGCAACTNCTGATCTTTCCCATTTTCCTGCCGGA TTTGTAGAAGAATAAAAAGGTTGAAAATGATCATCTTGAGATGGTGATGAAACTCTT >gi|3449426|gb|AI099687.1|AI099687 33840 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116E18XP 3', mRNA sequence TTTCCCCNGGCNAGGNTTTTNCGGNGCTNCCGTNNTCTTCACCAGGGGCAGTCCATGGGNTGGCCCACTG GATATTTTGGGTTGGACCATTCATTGGAGCTGCGATAGCTGCATTCTTCCACCAATTCGTTCTGAGAGCT TCAGNTTCTAAGTCTCTTGGATCATTCAGAAGTGCTGCCAACGTCTAAACACATCAAACCAGATTTCTCA AGAATAAATGAAGTTGTGATCTCTCTGTACAAATCTAAATCAGTCACTTGCAGTTTTCATTTCCCTTTCT TATATTTGTGTTTTCCACTTGCTCTTTTGTGAATTTTCTTCGGTGTAATTGTTTTTTCTTTCGCTTTTAA ACGAGTGATTGGAATTATAATCAATGAAATCAAAGAGGTTCTT >gi|3449425|gb|AI099686.1|AI099686 33839 Lambda-PRL2 Arabidopsis thaliana cDNA clone 116E16XP 3', mRNA sequence AACAAGGTGTGCGACAACTGTAGCTGTGGATCAACTGCNGCTGTGGGTCAAACTNTANCTGTTGATGANA TTATTATGGTCTAAANTCATATATATGGCNGAAAAATTGGGGAAAATNTGTGTTTTANGCTAAGAGATGT GTGTGTGTTGTTGGNATAAAGGCGTGACCGTTGTGTTGCGTATCAACTCTCTTAAGCTTTGACTTTTCCC AGCTTTGTATTTTCCTATGTNTGGTNATGGTGTGATTGTGTNATGTTTTCATATGTAACGTAAAAAAAAT ATTTATGTGAAATTGACTTTTGTGACT >gi|3449424|gb|AI099685.1|AI099685 33838 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115P10XP 3', mRNA sequence CATGGCTGAATTTGCCTCTAAATTCCGGCGNCAGCAAAACCNGCGGCNTTCATGNCCGGAGGTAGGAAAG AACGGGAACAANCACGCGAGATTGGGACAAAATCTNTGACAGATTCGCCACTTACTGTGATCACGNCGCC GGAGCATTAATCGCCGCATTCGCCGGNGTAATCCTTATGCTCATCATCTCCGCCGCGTCAATCTCTCGTC TCGTCCAACCTAATAAATGCTGCTCCACCACCGCATCTCCCTCGGTCGTCCCCTGAAAACATACACACGT GTCACGTTCCCCTGTTATTTTCCTTTTCTTTTCTTACTTCTTTGTTTCTTCTTGAGTGTGTGGTGTGTAT CTCGAGTGAATGTGATTGATCAGATTGTGTAAGCATTTGGCTCGT >gi|3449423|gb|AI099684.1|AI099684 33837 Lambda-PRL2 Arabidopsis thaliana cDNA clone 115N6XP 3', mRNA sequence CCCCCATCGAANCGGTTTCATTGTTNGNGCCNCANTCTTAGTGGAGGAGCTTCCCTTGAGCCTCCATGAA TCCCCGCCTTNGCTTTTCGGNCCANCGGTGTTGAGCTGNACATNGGACCAACCACTGGNTCTACTGGGCC GGACCTCTCGTCGGCGGTGGAATCGCTGGACTCATCTACGAAGTTTTCTTCATCAACACCACACACGAGC AGCTCCCAACCACAGACTACTGAATTAATCTCTCTTTTTCTCTCTTGTGTAATTTTATTCGACTTTGAAT TTGAATTTTAATGTCTTTTTAATTTCCGTTTGTGTAATTTCGAATCATCAAGGGGTTTATGATCGTTCGA TCTTTTAGATGAATCCTTGTCCGTTGGTTTCAAGAGTGGCCATTGCAATTTCGACTATATAATGTGAATT ATGTATCAATCT >gi|3449422|gb|AI099683.1|AI099683 33836 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114P4XP 3', mRNA sequence GGCTGGTCCTNATTGGGATTNGNGCANCCTGTCTTTTNGGGTTTCCTCTGCTNCTGCTTACCGTATTTNT CTTCTNCCCTCGGACACNCNATATCAAAATCTGTAAGNACANGACCAGATGCTTCGNTCCCNGATTTACT CCGATGATAATAAGAGGATGAAAGAAGTTGTGAATCATGCAACAAAGCTCAATGAAGCAATCTTTGGTAT GAAAGGTGTTCCTGTCGTAAGAGCTCAAATATCTTTTGGGGGTCACTACGATGGACTTTGAATCTCAGCC ATCATAATAGTTCATAATGTACATACATGAATGTAGTATAAGGTTTTGTAAATTTCTATTATTTTGTTCA AATATTGATTAATTATGTGGTGTTAATAGATCTTTGTGAAATTTCATGT >gi|3449421|gb|AI099682.1|AI099682 33835 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114O20XP 3', mRNA sequence ATTTGCAAACTCACTTCCAGGTGCTTTCNTTTAGGAAGGATTTGAAGCTNAGGNGCNATCGAGGAGATTT TCCAAGAAGGTTCACGCAGNTTTCCGANCAGACCCACCCATTNAGANANCCGAGAAATCTNCTCCCAAGG AACACAAGAGGTACAACTTGAAGAAACTGACTTACGAAGAGAGGAAGAACAAGTTGATCGAGAGAGTGAA GGCATTAAACGGAGCAGGTGGTGATGATGATGATGAGGATGATGAAGAGTAAATCACCAATCAAGCCTTC TTTGTCTCATGCCTCTAGTAGCTTTTTACTTATTTATTTTCAGACTAAAACACTCAGTTTTTGTTTTCAC ATTTTAGTTGCGTTTGAAGATTTTGAATTCGAGGATATGTTTTGTTTGAAGAATTTATTATCATCTCTTA TTACACC >gi|3449420|gb|AI099681.1|AI099681 33834 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114O13XP 3', mRNA sequence GCCGTTCTTCAGGTTGCTGNAACTNTTTAGCCGTGCATTCATCGNTGCGGNTTACNTTGTTCCCGGAANT GCAAGACTATTGGAGCCTTGGAGCTGAGAGTTGTCGCAAAAGGAACTTTCCGGAAGATTCAAGAACATTT TCTCGNGCTTGGTTCATCGGCTGGACAGTTTANGATGCCAAGATGTGTGAAGCCAAGTAATGCTAAGGTT CTCCAAATTCTGTGTGAGAATGTGGTGAGTAGCTACTTCAGCACAGCGTTTTGACTCACTAAAATTGTGT GAAATCAAAGAAAGTGGTTTTTAGTTGTTTATTNCCGTCGTTGTTGTCTTTATTTGTCAATATAGTTTTC TTTACGTTATTTAATTGAGCATAAACTTTTTTTATCTTTATAGAATTTGTATCACAGTGGTTTT >gi|3449419|gb|AI099680.1|AI099680 33833 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114N10XP 3', mRNA sequence TTTAAGGACANTGGNGGGTTTGAGCCATNGCCCCCTGCTCNNTGCTTTTGGCCCTTGGTGGCCATGGTAA ATTCCAAGCACGGAAAGCATGGAGGCAAATTCAAGCCACGGAAGCATGGAANGCACGGGAAACATGGCAT GTTTGGAGGAGGAGGCAAATTCAAGAAGTGGAAGTAATCTCAAAAACCCCACCTTTGATCCTCTCCTCCN GTATAGTCTCATTACCTGACCGATGTTTCTAATAATCCCCCTTCAAACATATTTCATTTTAACTATGTCG GTTTAGNGNTTACTGGTTGAGGAAATAATTGGAGAGTGCTNGTATAAACCTTATGGTATCTGCAGCAGAG GTTTCTTTAATCTCTCAATAGTAGATGCTTTGAAACTTTTCT >gi|3449418|gb|AI099679.1|AI099679 33832 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114M6XP 3', mRNA sequence ATTTAGAATCANAAGNCGAGGACGAGNNTCTNCTGGCTACNATTTGGAAGATACTTTGCTCNTGGACCAA TTNAAAGAGACGATTACGCTCTTGAAACTCGCCATGGGAGTTGAATAGAAACCAAAAGAANCATGTAAAC TGTAAAGTGGCAGACTTTCTGTATTAGAGGTGACTAGTGAGTTCAACTTTCTTAGTCCTGAATNTCGTGG TGCATCCTCGTAAATCTCTTACTGAACTCAACGATATTCCGATTAAACTTCTCAACAATTCAACATTTCA TGAAAAACTTTACAATCATTTAACAATAAACTCCAAATCCG >gi|3449417|gb|AI099678.1|AI099678 33831 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114M2XP 3', mRNA sequence GCTGGACCNTTTTCGAGGAATTCAGGGCCAGGAACNCCTTTTCCACNTCAAGNATTCCTTCCCTTTGTGN ATCTTTCGGATCTCAGTCAGCTTAGGGCAGCACCNTCAGGACAGCATTCCCACANTNTGTGTTTGATCAT TGGGAAATGATGTCTTCTGNCCCTCTTGAGCCAGGTACTCAGGCTTCAGTTTTGGTGGCTNATATCAGGA AGAGGAAGGGATTGAAGGAAGCGATGACTCCACTATCTGAGTTCGAAGACAAGCTTTAAGCTTCACCAAG ACTCGTACTAGCCTTTTTCCCAATGGTTGCTACTCTCTCTATCTTAATTTTGTCTTGTTTTATTAATACT CTTATGGTATGACGGATTGTGAAGACTTTTCTCTCGCCATCCCCTGAATGTTTTTTACTTTTTTCCTAGT TGAGAACTTTGTTATTGTGTTCGC >gi|3449416|gb|AI099677.1|AI099677 33830 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114L24XP 3', mRNA sequence GGTTTTCCNACCCAATTGCGGCCTTTTCACGGGGNCCCAGGTNCCGGTTCGGTNANGGCTTTTGGNCCAG GTTATTGGTCCAGGGGAAGGGATTTGGTNNCGGTNTTGGGNCGGGNTGGCCTTAGTGTAGTNGTCCCAGG CACAAGATCCNTCCGTTANTGGTTTCCAGCGCACANTTCCCGGTTTTGTGATTCCAGGTATCACAGTTCC TGGCTACGGTACTGGATGCCAAACAGGTGGCTGCAATCCGAACCCACCACACTACTATATCCCACCAAGC TGTCCCCATTGTCCACCTTTCACATCAGGACAAGACAAACACATGTCAGACAAAGGAGCCATGACCGAAG CTCTTGCACCCACTTCACCGGAGATACATGTTTAAGCTTTAAGAGTCCATGAAACACCAGTCTAATAAAT CACTCATAATGAAATCTATTTTGGTTTATAAAAGCTTCACAGAAAGTTGAATAATACAACTTTCTTGCTC >gi|3449415|gb|AI099676.1|AI099676 33829 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114L15XP 3', mRNA sequence TCCGGGNAGCGNCTCTNTTNTTTTTCCGGCGCCGGNGCTGNTCGGAAAAGAAGCAGAGAAGGAGANGAAA GGAGACCTATCCGAGATTTGTGTTTGAAGATTACNTGAAACTCTACTCTGCTGTCAAGTTTCAGNCCAAG GANCCAAGGTTTTGAAGCCATGAAAGCTATGGAGACAACTGTGNCCAACAATGTTGGACCATTGGCCCTG CGTGAATGATATGTAACTGGTNGGTNGATATATATATATATATATATAGTCTTTATATAATGTCTTAGAA ACTTGATTATTCACTATACGAATAATTTTGTTCATGTTGTTGTATGTTTAAGTGGTGAATGTGTTTTATA TATGGGAATTAATGTTTTCTGTTCGTAGAGTTCAAT >gi|3449414|gb|AI099675.1|AI099675 33828 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114L10XP 3', mRNA sequence TCGAGTTTCAAAGCCACAGGCTTACACTTGAGGACCCNTGTCACTNTTGNAGTNCATNACTCGCTTCCAT GGCTNGCTTTCAAACNNAAGTATCCCCAAAGTGGTGGTGTCAGACCTTCGNTCTTTCTACTCTTATCGTT GGCTTTGACCCTTACTCTCGCCTCCCTTCCCTATATCAGACTGATCCTTCTGGGACTNTCTCTGCTTGGA AAGCTAATGCTACCGGCAGAAACTCCAACTCTATTAGGGAATTCCTCGAGAAGAACTACAAAGAATCCTC TGGCCAAGAAACTATTAAACTCGCTATCCGTGCTCTGCTTGAGGTAGTTGAGAGTGGCGGAAAGAACATT GAGGTTGCCGTAATGACACGGGAGGAAACTGGTGCGCCAGCTAGAAGAAGCTGAAATTGATGCAATCGTG GCCAAGATCGAAGCTG >gi|3449413|gb|AI099674.1|AI099674 33827 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114K11XP 3', mRNA sequence GTAATTTCCATNCCTGGCNCCAATGNTTGGCCCTTTNATCCCCCNGGGATNTCTTCCNGCAATGTCNAAA ATGCTNCGTTAAGCCAAGACGGACTAGTGAACGAGCTTTGCTGTGATGAAGCTCTTTCTCAAGAATATGC GGAGTTGCTAAGACNTGATATCGAAGGCCGGCTAAAAGATGATCAAGGTCTATAAGATATTTGGTTGAAT TGGTTCTGTAAGTGTCATATCTTTGAAGTATCTTTGTTTATTTGCTGAGATCCCTCACTTATNTATTAAG AATTAGGGTTTGGGATGGTCTNTACTCTGCTAAACATAAGCAAACGTAATTTATCTGGTCTCTAAAGGGC CGATTCAATTTGATATTTCCNTCTTT >gi|3449412|gb|AI099673.1|AI099673 33826 Lambda-PRL2 Arabidopsis thaliana cDNA clone 114G23XP 3', mRNA sequence CCCCGGTTCAGGTTCCCCGGGTCNNTTTCCNCCGGGGGGGNAAAGGNTTTGGGGCCTTGNCCCCNTTTTG GTGTCNGATTGGGTTTAATGTTAACCCGGGNGTAAAAAAAGGAATTACTACAAGTCAACAGGCTTTTGTC TAGGTGTTGATTTCGGCGCCCAAGGACACGTGGCGTAAACTGAGCTTCCAGGAATCAATATTCACCGTCT ATTATGATTAGATAGGTTAGATAGATTTGTGTAACGATGTACAAAGTCATCTACAATATTGAATCTGTTT CCATTTATTTTACCATATTCTTTTTTTTTATAATTTTCGAAGTTCTACAAACTCTTTTATGTAAAACACA ATCCAATGGTCATAATTGTGATAAAGACTTTGCAT >gi|3449411|gb|AI099672.1|AI099672 33825 CD4-13 Arabidopsis thaliana cDNA clone H2G5RP, mRNA sequence CCTTAGTCANCCAATTCCCCGGTCTCGATTNGAAAGANCTTCTGGCTTTGTCTAGCTTAATCTGGATCTC AAGCTTAGCNGTGTCACTTCACCNAAACGTCTTTGTCAGTGATTGCCAGGAACCTTATTTTGTCCAAGGC ATCAGAAGCATTGGAGATCAACTCTCTTAAGAAAATGTCCTTGTTACTGTATAGAGAGTTGATAATAATG TCCATAAGCCGAGAAACCTCAGCTTGGAACTCAAACTTCTCCGCGTTACTGCGAAGCGTCTTCTTTGACA TCGACTCAGACTCTCTATGAACTACATCGGAATCCGTCGATAAACCACCGTGACCACCAATTTTCTCCTC AACTTTTGGTGGATCTGTAACATCATCGGAACTCTCTTCTGCATTCGCGTGTAACTTTCTTCCTTGATCT GGAAGAAGAAACAGAAGCGAGAAAAGGAACAAAA >gi|3449410|gb|AI099671.1|AI099671 33824 CD4-13 Arabidopsis thaliana cDNA clone E1H7RP, mRNA sequence GAATTGTGACNGCATNTTACTTTGATCCTGAAACGTTTNCCTTTGAACCGCCAAGCNGCATTCCCGTTCA ATTTNATTGGGCGCCCCATGAAGACCGACCCCCTTGCCGTTTTTGCTTTNGNTTCCCNCCTGAATCTTCT GTTTCAACTGGTACAATGTTCTTCTGTCGGTGCCAATCTTGACAGCACGACTCCCGCAGATTCACCGGCT TGAATCACAAATGCTTTACACTCGACTGAATAAGAACCTTTGAAAATACCCATCTTGACAGAATTTCATG AACTGGTCAACCACATTGGGAGCAGTATCCTTGAAGAGTTCAATGGTCACTGAACCTTTGCCCGTATCTA AGGTAGCAAACCGCGGAAGATCAACATTCTTCATTCCAGGGAAGGCTGCATCCTCAAGAACTGATCTACC ATTGTGCGTTGGGATCTCAGATCTGTGAGTCCAACGTCTGTAAGCAGAGAAGAGAACAAAGACAAGCAAA AGCACAGCCAAAGTGTAAATGACGATGTTGGTTATGCTTATCCGAGACGGTCCTTTCTTCTTCTTGCTTT GCTGCAACAATGCT >gi|3449409|gb|AI099670.1|AI099670 33823 CD4-13 Arabidopsis thaliana cDNA clone E10A8RP, mRNA sequence TGTTGCACCNNCCCTTCCAATGCNCTTGCCATTCTCCAAACGGCANTCTTTACCACGGCTTTNCATCTCG TGCACAATGTAGCACACAACGCGCTCCTGTAGCGCCCCAAAGGATGGCTTATGGCCATTGCACCTCCGTT GACATTGATTTTCTCTGGGTCAAGTCCCAATTTGTTACGGCAATAAACAAACTGAGATGCAAATGCCTCA TTGATCTCAAACAAGTCGATGTCATCAAGTTCTAAACCAGCCGCCTTAACTGCAGCAGGAATGGCAACTG CTGGACCGATACCCATGATTGCAGGGTCAACACCAACTGCAGCAAATGTCCTGAATACACCAAGAACGGG AAGTCCTTTTTGCATTGCAACACTTCTCTTCATTAGGAGAACCGCTCCTGCACCATCACTTACTTGGCTG GAATTTCCAGCAGTAGTGGTGCCATCCTT >gi|3449408|gb|AI099669.1|AI099669 33819 Lambda-PRL2 Arabidopsis thaliana cDNA clone 89K6SP 3', mRNA sequence TTTGGGNCCATTNCTAGGACCCCCCCTTTACAAAGTCCACCAGAGTGGAAAGTNCCACAACCGNTTTACC TATGGAATGAATGGATGGGATGGACCTACCAAGGTCCGGTGGAAACCGAGGAAATCCATGAAGGCCCCTT GCGAAACCANTCGGGGTTCCACAGGGTGGTCATTTTTGTGTTCATAGCAACCCAATTGGTTTTCATTCTG CAGTGCTTTATGCTTGCCGCAAGTTTATATCTCAAGACTCCTCTCATGATCAACAACTCCTAGATGGTCT ACGATTGGTTTAGTCATAGTATCTTGTTCCTTTTACCTTCCAAATTTATTCTATATGTGTATACAAGTAT ATATGAAAAAGAACATAAAAAAGAATTACTTTCTTTATTTGAATATTCGGTTGTGTATTGGAGTTTCAAG TCCTCTTTCCATGTCTAAAAGTTCTATTTGTAACGTTCTTGATTTCACTCTAAAACCTCTTAAAGTGTTT CAAATGTGATCTCATTATCGAC >gi|3449407|gb|AI099668.1|AI099668 33818 Lambda-PRL2 Arabidopsis thaliana cDNA clone 201D17SP 3', mRNA sequence GGTTGGGNTNAATTCCGGGGGNATCCTGGACTTTGTAAATCTTTCCCNGCCCTTGACCCCTTTTCCNCGG TGGANCNGAAGTTTATTGACNAGATCATCATCCCCCATCTTCTTCTTCGCCAGAGAAGAAATCATCGGTT CTTGATTCNCCTGTTAGTCCTATTGCTAGCTGGAAGATCTCTAGTCCTGGTGATAATCCTGATGATGTTA AAGCNAGGTTGAAATTTTGGGCACAAGCTGTGGCATGTNCTGTGAGGTTATGTACTTGAAGATGAGATTT GGATTTGATCAACCAAAAGCTGAGGAATCAATGGAGGNGGAAGAAGATGGTGAAACCAGACAATTTGCAG GNGTGAAATCTCTTATGAGACTGACCTGCTTGAAAACAACCATTGTTGTAG >gi|3449406|gb|AI099667.1|AI099667 33817 Lambda-PRL2 Arabidopsis thaliana cDNA clone 200C5SP 3', mRNA sequence CACGCGTCCGGCACTTTCTATCTCCCCCATCTTTANCACCCNCGTTCTGGTTATCTTTGAAATACCTGAG ATAGAAGCNCATGATAGCGAGTGTCTGAAAGAATATGGGGGTGATGTTGGGTTTGGCTTCTGTGCGCCTA AGATATTTCCGACGATTTGTTATAGAAATTGCCAAAAGGACAAGGGGGCTAATGGTGGAAAATGCCTCTG GGGAGAGGGCGGTAAAGTGAAATGCTTATGCGACTTCTGCNGCAATGAATCTTTTAATCAGTTTATAAGT CTTACTTGAAACTTGCATGTGTCGTCGTTTGTGTAATAAGCAAGG >gi|3449405|gb|AI099666.1|AI099666 33816 Lambda-PRL2 Arabidopsis thaliana cDNA clone 172F16SP 3', mRNA sequence TATTCAGCCCAACTGGTGNCATGGTATATCCACNACACTTTTCNCCCCCCNAAGGAGNGCCATTCAAATG TTCATCCGACCATCCNGCCCAGAAATGGGACCGNTACAATCAAGCCAGTTCCAAGGCCGCNATATCCGGT CCAGAATACCTCGGGTCCAGGTATAATGGAATTGAAGGATGAAGTGGCTAAGAGGCTGAAAGTTGATGCA GGAACGTTCGATATCAAGTATCTTGACGATGATAACGAATGGGTTTTAATAGCTTGTGATGCTGATCTTC AAGAATGTCTCGAGATCCCTAGATCCTCCCGCACGAAAATCGTAAGGCTCTTAGTTCATGATGTAACGAC AAATCTAGGGAGCTCCTGCGAGAGCACTGGAGAATTGTGACCTGATAATTCATTCGAACTCTTTTGTAAA TATGTTTTTTGAATTTTATTATTGTTTAGGGTTTCTTTGGACAAATTAAAGTTGTAAAAGAAAACATTTG TTTGTAACTTTTAACTGTAAAAGTGTAAGAGAGAGAGAGGTTAGAAGT >gi|3449404|gb|AI099665.1|AI099665 33815 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170L8SP 3', mRNA sequence CCTTTGANGAATCTTGTTGAGTTTTGGAAGAGTTGGACCNNCGGGTTNCGTTTGGATGAAGCAAGCACTC CTTACGAGCATTTCTTCGAGCCCACCAACACTCGTGTCTCCTACGGTCTCGAAGTCACCGCCTATGTCGA CAAGTGTTGTATGAAGAAGATGACAGGAGTGAAGAGTAAGCAGATGTTTTTGTGGGTACCGATCGTGGAG ATGAGTATGGAGGAGCCAAAAAGCAAGAAGATTTACTTCAAGACTCCTATGGGAATCGGCAGGTCTTTCC CCGTTACCGCATTCATGGACGAGGAAGAGAAACGCAACTTTTACTTGGAGAATCCCAAAAATTAAACCAA CTAATAATTATTCTTATGATTATTACATTTTGTGGTGCTTTTTATTTTATTTCTTGTAAGGTTTCTTTAT GCTATTAATTTCTATCAATAATACATTTCTGGG >gi|3449403|gb|AI099664.1|AI099664 33814 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170L10SP 3', mRNA sequence CGAGTTAAAGGAAGAGTTGGTGGAAATGCCTTTATGTAAACACATATTTCATCTCGATTGTATTCACCTT TGGCTTTATTCTCACAACACTTGTCCTCTTTGTCGATCCTCTGTCTCCATCTCCTCCACCAAAACCTCTG TTGATGACGACAACGACCATCCAGATTCTCCTCAAACGTCACCGGTTTGATTCAAACCCCCGAAGGAAAT AAGCAAATACACAAGTTTTGTTAGTGAATAGATCGATACAAGATGTAAATCTTAATTTTGCTGATACAAG ATATCAAAATGTAATCCATCACATTATATATATTGGTTACACAGATTCATTC >gi|3449402|gb|AI099663.1|AI099663 33813 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161F15SP 3', mRNA sequence AAAANTGNCCTCGGCCGCCGAACCGGTNCCNCGGCCGTTTGCANGCGCAGAANTCCCGCGAAGATGGAGT TCACCANTNCGNCGCGATGCTTCCCGTTTCTGCCGGNNTTATTCCCAACCGNCAGTGTGTGGGNCTTGGA TGTGGTTGTTTGGGNAGAAGATGAANCGGAAGAAANCAGAGTTTATGGTCCCGGCGGTGGCTTCAGGNCT AATCTGTTGGCGAAGGNCTTTGGGACTTTTTCCTGCCGCCGGTGCTTGCCCCTCGCCGGAGTAAAACCTC CGATATGTATGAAGTTCTTAGCTTCATAGGATCAGTCAAAGAGATAAGAAGACTTGTGAAGTTAAGAGTA GTTAGAAGACGTCAATGATATTAAAATCATCCTATTCTTAGAATAACAGGTAGACTTCTGAACAAGAACA TCTCTTTTTCTAGGAATTAAGACTAAAATCTACTTACATCCGGATGATTCATGCTCTGTTTTTTGGTTTG GTATAATTTGTCAACACATCTAGATCTGTTCCATTTCCGGTTA >gi|3449401|gb|AI099662.1|AI099662 33812 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157O21SP 3', mRNA sequence CCCCCCGGTTNCCCCTNAATCGGNCAAGGTTCAGGCCCATTGACCCTTCAGGNTCTGCCCCCNAAGTGGG TTGCCCNTCCAGGAATTCTGCCAAGATGGGTATTTCAAAGNTTCTTAATCAGCCGAGTTGTAAANCATTT TGTGATTCAAACCCGGTGACTCTGCGGAGTCCGATGCTGTCAAAGATTGGGCACTCGACAGAAAGAACAT TGATACCAGTTTGAAACATGAAGAATTCATGGTGGGAACTCCTAAAGCTAAAAACGAGCAAGGAGGATTC GAGTTCTTCATTGTGTCTGCTCAGATCAAAGATCTGAACGAGAAATTGACTGTCTTTGGTCGAGTTTCTA AAGGACAAGACGTTGTTCAGGAGATCGAAGAGGTTGAGACAGATGATCAGTATCAACCAAAGTCGCCAAT AGAGATCATGTCCGTCACTTTGCTTCAAGACATGTAAAAGCTTTTTTACTTCTTGTCTCTCTCTCTTGTA TGAAACTCAAGTGATTTTTCTTGTGAATTTGAAACCCTTTTTATC >gi|3449400|gb|AI099661.1|AI099661 33811 Lambda-PRL2 Arabidopsis thaliana cDNA clone 142P17SP 3', mRNA sequence TTTCCCCCGGGAATGGGCCCACCCCCATGGCCGGTGANCNCAGGGATCCCCCTCAACAATCCCGGGGCCA TAANCGGAGGCATNCCAACCTCCAGTTAACTGGACCACNAATTTGGATTGTGCACCAACCATTCTTGGCA AACCCCGGAAACTGCTGGAAGAGGAATGACTTTCTTGAATTTTGCCGGGAATTGCGGTTCTTGCTGTAAT CTTTGTGATTGTGTTTGTCCCTGAGACTCAAGGGCTAACGTTTTCGGAAGTTGAACAGATTTGGAAAGAA AGAGCTTATGGAAATATCAGTGGCTGGGGCAGTAGCAGTGATAGCAACAACATGGAAGGGTTACTCGAGC AGGGATCTCAATCTTAAAGATCTTGGATGGCTCATGAGTCATGCATGACTTACACATTGTGAAATCACAT AGTAGTAAACCGGGATTGGTTCCGGTTTAGCAATGTGAGATGTATGTGATGTTGGAATTGTAATGTTCTT AGGAACTGTGATTGTAAATAAATACATTACAAATTTACATTAAGGGTCCACTTTGGTACCCAATC >gi|3449399|gb|AI099660.1|AI099660 33810 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140G18SP 3', mRNA sequence CTCCAGTATTAGGGTTNTTAANTTTGTTAGAGCCCGGACNCCNCCGGTTGGTTTCCAGGTTCCTGCTAAA TTATGTGGCTATGGTCCCATCAGGNCAAATATCCGACCAGTTCTCTGGAGAAAGGTCTACCGTATCTATT TCGCGTTGGCTCTGGCCAGGTGATCAAAGGACTTGATGAAGGAATCTTGAGTATGAAAGCTGGTGGCAAA CGTAGACTCTACATCCCAGGGCCTTTGGCGTTTCCAAAGGGTCTAGTTTCAGCTCCAGGGAGGCCGAGAG TTGCGCCAAACAGCCCGGTGATATTTGACGTGAGCTTAGAGTTCATACCAGGTCTCGATTCAGAGGAAGA GTGAAACTCTGTTTTTTCAAGTGCAAATTGTAATCTTCCATACACAATTACAAGATTCTATGTATGATAT TTATCTCATTGTACTCATTCATTGAAGAACATCACATTGATTAAAAACGTCAGTATTTTTCAATTCT >gi|3449398|gb|AI099659.1|AI099659 33809 Lambda-PRL2 Arabidopsis thaliana cDNA clone 127A14SP 3', mRNA sequence GGAAGCATTATGCACGTTCTCTGGGAAACTGACCGTTGGCTTCAAAAATACTGTGTTCCAAACNACATCA GATGCAGATACAAGTCCCGACCAGTCCAAAGAAGGGTCAGATTCTGCAGACAAAGTATCCACAGGCACAG GTGGTGGTAATCCGGAGTTTGGTGAGCATGAAGTTCACTCCAAGCTCAGGAGATCACTTCTCTGAGTTCC CAAAAGTGGTTCACTAGCCACATGCAGCATGCGAGTGCACTTGCAGAAACAGAGAGCACAAAAAAAGGCA GATGCAACACAAACTTATTTTTCATACAAAACATTGATTCATAATAATATGAAAAAAAGTTTTTGAATTA CTTGAAATGCTGGAAACACTCTTTCAAGTGCAAAACTTCGATC >gi|3449397|gb|AI099658.1|AI099658 33808 Lambda-PRL2 Arabidopsis thaliana cDNA clone 120D15SP 3', mRNA sequence AAAGGCTACTCGGNGTGGCCGACCAACTACAGGACTTCCACTNCGGACGTTTGGTCAAAGTCTCGGTCTT GCCTTCNCGCCACCCGAACTTGTGGNTACAACCCAACTGTAGCTTTCAGGACGGGTTTGTGGTTTTGGAT GAATAGCGTAAGGCCGGTTCTGAACCAAGGGTTTGGAGCCACCATTAGAGCTATTAATGGAATGGAATGT AACGGTGGTAATTCCGGTGCAGTCAACGCAAGGATTGGATACTATAGAGACTATTGTGGACAGCTTGGTG TGGACCCTGGTCCTAACCTTAGTTGCTAAAAAACCTTTGAACCCAAACACGGACATATGTGACGTGGCAT GTAATAAGTGAGATATACTAAAATTTCACACGTATGTACTTTATGTCGGGTCTCGGTGTTCCCTGCGTCA CAAGCAAAAAATTGTTGTAATAAACTTGTGAAAGTGATTTTCTTTTCTTATGTG >gi|3449396|gb|AI100686.1|AI100686 33807 Lambda-PRL2 Arabidopsis thaliana cDNA clone 104N12SP 3', mRNA sequence GTTAACCCCCTTGCTTTTGTCTGGGGNCTTTATGGNCTTTNCGCTTGGGGNAGAAGGACTCGNCCTTGAG CTGATGCTGGCGAGTTTCGCGGTGGTGAACTGCTTGCCGATCTATGAGGCTATGGTGTTGAGGATAGACG ATGGAAAATTACCAAAAAGGGTTTGTTTCGTAGCTGGAATCCTCACATTTGTGCTGATTGTGTCAGGTTA CGTCTTCCTCAAGTAACTGGACCCATTATGGTTGGTTCTGTCGTTTCAGTTAAACTAATATTACATCTGT ATTGTGGTAATTAGGAGAGAATAATGTGATGAATCCATTTCTCACCTCATTTTAGAACATACATTTCGGT ATATTGCGTCTGTATTGTAGTAATTAGGAGAGAATAATGTGTTGAATCCATTTCTCACCTCATTTTAGAA C >gi|3449395|gb|AI100685.1|AI100685 33806 Lambda-PRL2 Arabidopsis thaliana cDNA clone 90J7XP 3', mRNA sequence GAACTTTGAGAACAACCCGAGGTTGGAGGGACCGGAATTACTCGGTCTTGCAAGCTACGACACTAACTGC ACCTGAAAAAATTGGCAAAACCTGAAAATGAAGAATTGGGGGGTGACCTTGTAAGAACACTTCACCACTT TATCAAATATCACATCTACTATGTAATAAGTATATATATGTAGTCCAAAAAAAAAATGAAGAATCGAATC AGTAATATCATCTGGNCTCAATTGAGAACTTTGAGGTCTGTGTATGTAAAATTTCTAAATGCGACTTTCG CGTACTGTAATGTTCGGTTGTGGGATNCTGAGAAGTAACATTTGTATTGGTATGGTATCAAGTTGTTCTG CCTTGTCTGC >gi|3449394|gb|AI100684.1|AI100684 33805 Lambda-PRL2 Arabidopsis thaliana cDNA clone 219L11XP 3', mRNA sequence TTAGTGACAACCAAGTCTCTGCGGTGGCCCCTTGACGACGTCATGTTAATAAACAAGGATATGGTTTTCT GGTTTTAACTGAACCGGGTTATGTCTTTTTGCTGTTGCTCTTGTTTCGTTGGATCAAACTGGTGATATTT TGCTTTTCATTTCTTCGTCTTTCAGATTTTAGTTTCTAAAGCTGAGATATGTTACTGGCAACGGACAGGT ACACCGATCCAATATGGTTTGCGGTCTATGTACAATGAATCCGGAAGTAAAATCAAAAGCAATGTTATAG AATTTAATTTCAAGATCTAG >gi|3449393|gb|AI100683.1|AI100683 33804 Lambda-PRL2 Arabidopsis thaliana cDNA clone 187H5XP 3', mRNA sequence CCCATTTCTTTGGGAAAATTGAAGTCTNTGTCTTTTTACGGCTTAATGACAACCGATTGACGGGGCCAAT CCNTAGAGCACTCACTGCAATCCCAAGCCTTAAAGTTGTTGATGTCTCAAGCAATGATTTGTGTGGAACA ATCCCAACAAACGGACCTTTTGCTCACATTCCTTTACAGAACTTTGAGAACAACCCGAGGTTGGAGGGAC CGGAATTACTCGGTCTTGCAAGCTACGACACTAACTGCACCTGAAAAAATTGGCAAAACCTGAAAATGAA GAATTGGGGGGTGACCTTGTAAGAACACTTCACCACTTTATCAAATATCACATCTACTATGTAATAAGTA TATATATGTAGTCC >gi|3449392|gb|AI100682.1|AI100682 33803 Lambda-PRL2 Arabidopsis thaliana cDNA clone 185L1XP 3', mRNA sequence AAATTGAGTNTNTGTCTTTTTACGGCTTAATGACAACCGATTGACGGGGCCAATCCNTAGAGCACTCACT GCAATCCCAAGCCTTAAAGTTGTTGATGTCTCAAGCAATGATTTGTGTGGAACAATCCCAACAAACGGAC CTTTTGCTCACATTCCTTTACAGAACTTTGAGAACAACCCGAGGTTGGAGGGACCGGAATTACTCGNTCT TGCAAGCTACGACACTAACTGCACCTGAAAAAATTGGCAAAACCTGAAAATGAAGAATTGGGGGGTGANC TTGTAAGAACACTTCACCACTTTATCAAATATCACATCTACTATGTAATAAGTATATATATGTAGTCC >gi|3449391|gb|AI100681.1|AI100681 33802 Lambda-PRL2 Arabidopsis thaliana cDNA clone 180F2XP 3', mRNA sequence AATAATATGTTCAAAGGCAAATTCACGAACTCTGTAAATAGATCGATCTCCTCTGGTCTCAGACTAAGAC ACTGCTCTTAGATATATCGTCAAAAGCTATGCTCTTCTTCGGATTATTTGCTGAAGAAACTGTAAATAAA GCTTCTTTCAAGCTATGGCCGGACGAAAGAGTCCTCCATGGCTCTTCTACGTGGTCAGCTTTCAGGATCT GTTTGGTTTGTTTATCTACTGANAGTGAACCAACATAAACTGTCACTCTTGTAAATATATGTAAATTCGA AATATCGACTGTAATATATAATTGAATATCTTGCACAATAGAAAATCTATGTGAAGGT >gi|3449390|gb|AI100680.1|AI100680 33801 Lambda-PRL2 Arabidopsis thaliana cDNA clone 179J19XP 3', mRNA sequence GGAGGGACCGGAATTACTCGGTCTTGCAAGCTACGACACTAACTGCACCTGAAACAACTGGCAAAACCTG AAAATGAAGAATTGGGGGGTGACCTTGTAAGAACACTTCACCACTTTATCAAATATCACATCTATTATGT AATAAGTATATATATGTAGTAAAAACAAAAAAAATGAAGAATCGAATCGGTAATANCATCTGGTCNCAAT TGAGAACTTCGAGGNCTGTATGTAAAATTTCTAAATGCGATTTTCGCTTACTGTAATGTTCGGTTGTGGG ATTCTGAGAAGTAACATTTGTATTGGTATGGTATCAAGTTGTTCTGCCTTGTCTGC >gi|3449389|gb|AI100679.1|AI100679 33800 Lambda-PRL2 Arabidopsis thaliana cDNA clone 179J11XP 3', mRNA sequence TTGTTCTTTTTACGGCTTAATGACAACCGATTGACGGGGCCAATTCCCTAGAGCACTCACTGCATTCCCA AGCCTTAAAGTTGTTGATNTCTCAAGCAATGATTTGTGTGGAACANTCCCAACAAACGGACCTTTTGCTC ACATTCCTTTACAGAACTTTGAGAACAACCCGAGGTTGGAGGGACCGGAATTACTCGGGCTTGCAAGCTA CGACACTAACTGCACCTGAAAAAATTGGCAAAANCTGAAAATGAAGAATTGGGGGGTGACCTTGTAAGAA CACTTCACCACTTTAGCAAATANCACATCTACTATGTAATAAGTATATATATGTAGNCC >gi|3449388|gb|AI100678.1|AI100678 33799 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157B6XP 3', mRNA sequence CCCGAGGTTGGAGGGACCGGAATTACTCGTTCTTGCAAGCTACGACACTAACTGCACCTGAAAAAATTGG CAAAACCTGAAAATGAAGAATTGGGGGGTGACCTTGTAAGAACACTTCACCACTTTATCAAATATCACAT CTACTATGTAATAAGTATATATATGTAGTCCAAAAAAAAAATGAAGAATCGAATCAGTAATANCANCTGG TCTCAATTGAGAACTTTGAGGNCTGTGTATGTAAAATTTCTAAATGCG >gi|3449387|gb|AI100677.1|AI100677 33798 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137D13XP 3', mRNA sequence TGTTCAAAGGCAATTCACGAACTCGGTANAATAGATCGGATCTCCCTCTGGTCTCAGACTAAGACACGTG CTCCTCAGATATATCGGTCAAAAGCTATGCTCTTNCTTCGGATTATTTGCTGGAGAAACGGTAAATAAAG CTTCTTTCAAGCTATGGCCGGACGAAAGAGTCCTCCATGGCTCTTCTACGTGGTCAGCTTTCAGGATCTG TTTGGTTTGTTTATCTACTGAAGTGAACCAACATAAACTGTCACTCTNGTAAATATATGTAAATTCGAAA TATCGTCTGTAATATATAATTGAATGTCTTGCACTC >gi|3449386|gb|AI100676.1|AI100676 33797 Lambda-PRL2 Arabidopsis thaliana cDNA clone 130I1XP 3', mRNA sequence AATAATTGGACNGGAATCACAATGGCATCACAGGGGTATTCCGGNTGAGNGGAGCAAAGCTTATTTTCAG TTANTGAATGTTAGCTANAACAGACTGNGTGGACGCATCCCCAAAGGAGAGTATATTCAAAGATTTGTTN TTATTCCTTTTTCCACAACAAGTGTTTATGTGGTGCACCTCTTCCTAGTTGCAAGTGAAGATTCCAGCAA AA >gi|3449385|gb|AI100675.1|AI100675 33796 Lambda-PRL2 Arabidopsis thaliana cDNA clone 125L11XP 3', mRNA sequence AGCTTCAGGGGACTGATCTGCCAAACTTGNTCAATTCCGTCCTGAATAAAATAATATGTTCAAAGGCAAA TTCACGAACTCTGTAAATAGATCGATCTCCTCTGGTCTCAGACTAAGACACTGCTCTTAGATATATCGTC AAAAGCTATGCTCTTCTTCGGATTATTTGCTGAAGAAACTGTAAATAAAGCTTCTTTCAAGCTATGGCCG GACGAAAGAGTCCTCCATGGCTCTTCTACGTGGTCAGCTTTCAGGATCTGTTTGGTTTGTTTATCTACTG AGAGTGAACCAACATAAACTGTCACTCNTTGTAAATATATGTAAATTCGAAATATCGACTGTAATATAT >gi|3449384|gb|AI100674.1|AI100674 33795 Lambda-PRL2 Arabidopsis thaliana cDNA clone 106G3XP 3', mRNA sequence AGAANGGANATTTTNGACCTGGGATCCTGCAGTTTTTGNTAAGACATCAGGAAGTTCAGGNGANTGATCT GCCAAACTGGTCAACTTCCGTCCNNGAATAAAATAAAATGTTCAAAGGCAAATTCACGAACTCTGTAAAT AGATCGATNTCTTCGGGTCTCAGACTAAGACACTGNTCTTAGATATATCGTCAAAAGCTATGCTCTTCTT CGGATTATTTGCTGAAGAAACTGTAAATAAAGCTTCTTTCAAGCTATGGCCGGACGAAAGAGTCCTCCAT GGCTCTTNTACGTGGTCAGCTTTCAGGATCTGTTTGGTTTGTTTATCTACTGAGATGAACCAACATAAAC TGTCACTCTTGTAAATATATGTAAATTCGAAATATCGACTGTAATATATAATTGAATATCTTGCACAAT >gi|937780|gb|R65302.1|R65302 13806 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169D23T7, mRNA sequence CATCACTTGCGCACAAGAAACCATCGTGATCGGACTAGCTGCTGACTCTGGCTGCGGCAAAAGTACCTTT ATGCGGAGGCTCACCAGCNTCTTTGGTGGCGCTGCTAAGCCNGCAAAAGGCGGGAACCCTGATTCCAACA CACTCATCAGCGACACGACCACTGTGATCTGTCTTGATGATTACCATTNTTTGGNTAGGTACGGTAGGAA AGAGCAGAAAGTCACCGCTTTGGACCCACGCGCCAATGACTTTNATCTCATGTATGAGCAAGTCAAAGAT CTTANGAANTNGTATAAGCCGTTCGAGAAACCGNNTTNATAACCCANTGNCA >gi|937162|gb|R30511.1|R30511 13116 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164J6T7, mRNA sequence ATTAGCCGGAGATGGCCGCAACATCCGCNGCTGCTGCAGCTGCTTCTNCCATCATGGGTACTCGGGTGGC TCCCGGTATCCATCCCGGTTCAGGTCGGTTCACAGCCGTGTTCGGTTTCGGAAAGAAGAAGGCAGCTCCC AAAAAGAGTGCCAAAAAGACGGTGACTACGGACCGGCCTCTTTGGTACCCAGGCGCCATTTCTCCTGACT GGCTTGATGGTTCCTTNGTTGGAGATTACGGTTTTAATCCCTTCGGNTTTAGGCAAACCGGNCGAGTATC TTTCAATTCGATATCGTTTCAACTAGACCCAGNNTCTGGCTTAAAGAACTTGGCCGGTAGAACGTGAATC CGGAACCNCGGTACGNAANGNTTCCCGACGGCAAANTCNAACGGNCGTTTTTAATCCCGTNCA >gi|2764392|gb|R30196.1|R30196 12801 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152J9T7, mRNA sequence TTTTCAGANCGGGCTTTCGGGCTTTNAAAAACTAATCTTTCCATGGNCTATNATGTTGGCCTTGCCAAGA GTAGCAGCAGTAGTCAGGTTAGATACTAGAAGTTGTGGTTTTAATTTAGGGAAAGTAATTTATTATAACA NGTAAACGCAAATNCAGATAAATAACAATGTTTTAATTTNTAAGGTTAG >gi|2764391|gb|R30011.1|R30011 12616 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163J17T7, mRNA sequence GATTGAGGCCTCGCAGAAGGCACTGTTTGGTGAGGGCAAAGGCCAACTCACTGGCCCAGCTCGGCAAATA CTCAGCCGAGGGAGAGAACGAGGATGCCAAGAAAGGAATGTTTGTNAAGGGTTACACCTACTGATTTGTT AATTTCAGAGATCGTAATAAGGATTAAGGACCATTGTTGTCTTTNGTTTTTTTTTCCC >gi|2764390|gb|T75640.1|T75640 10418 Lambda-PRL2 Arabidopsis thaliana cDNA clone 140P19T7, mRNA sequence TAAAACAAACACAGAGAAGCTTCTTCTTAAACGATGCCGTACTATACCAGAGATGACAACGACGTCGACG ATTTCGATGAGTTTGATCCAACGCCGTACAGTGGTGGTTACGACATCACGGTGATCTACGGCCGTCCGAT TCCACCTTCCGATGAGACT >gi|2764389|gb|T46600.1|T46600 9863 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137B19T7, mRNA sequence ACGGTGTATTTCCTTTAATGTTTCTNTGGGCTCTTTTNAACAAACTTAAACTCGCGTGTGGTAAATNTTT AATGACTTGAGAAGCGATTNAGGTTTAGGGTTTGGACCGTTTGGTTTTNCGTTTCCNCGTAATTAATTCT GGGGGCTTTAATTGTGGTTTGTGGGTCAAAACTNTCAACTATCACTACTTGTAA >gi|2764388|gb|T46590.1|T46590 9853 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135M16T7, mRNA sequence TTTCTCCCTCAAATCGTTTTCTCCAGTTTNNTTGGGATAAATCTNCCTCCTTTCTGCAGACGCCATGTCG GACAAAGGTCGTCCCTTGCCAAAANTTGGTGAATGGGATGTGAATGANCCAGCATCAGCAGA >gi|2764387|gb|T46527.1|T46527 9790 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135B14T7, mRNA sequence CAATATGGAGGACATCGATGAGGGTTTTNANGGTTATGATGATGAGAGGTCTATNCTAATGTCCCAGAGG AGTGTAGAGAAGCGTTTTGGTCAGTCGCCGGTATTTNTTNCGGCAACCTTCATGGAACAAAGGCGGCATT CCACCAACAANCCAATCCCCG >gi|2764386|gb|T46503.1|T46503 9766 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134J3T7, mRNA sequence GGCGGCGGTTGATCCGTATNCNAAGAACGAGGCGTTTAACTGCAACAATNCTGATATCTTCAAGTGGAAG CATCTNTGGAAGATTCTAGCTGAGCAGTTTGGGATTNAGGAGTATGGATTTNAGGAAGGGAAGAATTTNG GGTTGGTGGAGATGATGAAAGGGAAAGAGAGAGTCT >gi|2764385|gb|T46502.1|T46502 9765 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134J2T7, mRNA sequence CTGTGATCCGTTTCANTGCTAATAATCCAGGTGCNTGGNTTTTCNATTGTNATATCGATGTTCACTTACC ATTCGGACTAGGGATGATATTNTTGGTTAAGAACGGACCGACCAAGTNGACCACCTTGCCACCGACACCA CCAGATCTTCCCAAATGTTAAGCAAGATAAAAAAAACATATTT >gi|2764384|gb|T46476.1|T46476 9739 Lambda-PRL2 Arabidopsis thaliana cDNA clone 131P7T7, mRNA sequence CACAATCACTGATCTNAAGCTGTTTCCATTTGGTAATGCCGAACTCTCCGATAATCTNACTGTNACTTGC NAGCATGGTGAAGAGGAATGCAAACTAAACGCCCTTGANGCTTGCNCATTAAGAACTTGGCCCGATCAGA AATCACAATACTCGTTCATACGGTGCGTCGAAAGCNATACG >gi|2764383|gb|R84081.1|R84081 16040 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143M11T7, mRNA sequence CAAACAAGCAAAGAACCTTAACCAAAAAGAAAACNTCTACGGAGACATATGGAGAGGAAACATCACTTCG TGTTAGTTCACAACGNTTATAATGGAGCCTGGTTCTGGTACAAGCTCAAGCCCCTCCTTNANTCANCCGG CCACCGCNTTACTGCTGTNGAACTCGCCGCCTCCGGG >gi|2764382|gb|T46413.1|T46413 9676 Lambda-PRL2 Arabidopsis thaliana cDNA clone 143G15T7, mRNA sequence CAGTATGCATCGGTGGCTCCGACCACCGCAAGANCGTATGCNAAACCNTCGCCGACGACTCAACGATCCC ACCTTATTACAACAACTCCGCCGTTAGTCCGAGTNATTTCCCACCGGAATCTNATTTNTGGTCAAACGAT GCTCAGCTAGAGTGGCTCAGCGNCAACGGCTTCTTT >gi|2764381|gb|T46371.1|T46371 9634 Lambda-PRL2 Arabidopsis thaliana cDNA clone 141P19T7, mRNA sequence CCAAAAACAGAGGGAGNAAGAAGAAGAAAAGATGCCTTCAAGCACATTCTCCGGGACTGTTAGCACGNCG AAGCTGNCGGTGGCAGTGGACATGGGAAACCCTTTTNTNAATCTCACCGTTGATGNCTTCCTCANGATCG GAGCTGTTGGAGTCACTAAATCTCTTGCAGAAGACACTTACAAGG >gi|2764380|gb|R84078.1|R84078 16037 Lambda-PRL2 Arabidopsis thaliana cDNA clone 139K15T7, mRNA sequence GTAGCTAACGATGTGGTTGTTTTAANTGACGATAGCTTCGAAAAGGAAGTNGGTAAAGATAAAGGAGCTC TCGTCGAGTTTAACGCTCCCNGGTGTGGTCACNGCAAGAAACTTGCNCCANAGTATGAAAAGCTAGGGGC AAGCTTCAAGAAGGCTAAGT >gi|2764379|gb|R84077.1|R84077 16036 Lambda-PRL2 Arabidopsis thaliana cDNA clone 139B16T7, mRNA sequence CTCTTTCTTTTCCANATTTCAATTCCNGAGGCTCGAAAGAAAACCGTAAATTTTTTCTCCNTTCACTCAA TCAACCAAAGATGCGTGAAATTTTNCANATCCAGGGTGGTCAATGCGGTAACCAGATCGGAGCCAAGT >gi|2764378|gb|T46241.1|T46241 9504 Lambda-PRL2 Arabidopsis thaliana cDNA clone 139A22T7, mRNA sequence AAGGTTCATGGAGAATGGTTTCTATACACAGGAAGGAGTAGAGGGAGACATTTCGNTAACGAGGATCAGG AGTTTAAAGACTTGANTGAAGCTTTAANAGTTAGTTNCGAAATGGGGTATCCAGTTCGATTTGTNAGGTC T >gi|2764377|gb|T46228.1|T46228 9491 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138J7T7, mRNA sequence CTCACCGGAAACTTCAGATCGAGCTACTGCAATTTGCGGATCGTNTTTTTTTTTTTCCNTCAATTCACGG TGTATTTATCTNGGGAGAAGAAGAATGGATACTTTCACGGCGGAGGNTCTNTCGACGATCGGCGGAATAG CGACAGTATCGCTCCTTCACTTCGGTTTATNCCGCNGGATTTGGCTACCTTTTT >gi|2764376|gb|T46208.1|T46208 9471 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138F12T7, mRNA sequence TTTGAAGACAGTAATGATGAAGAAGAGACAGCAAAATNAGGAGACAAGAAGGATGATGCCGTTAAGGAGG AAGGTCCTGCNACANANAAGGCACCAGCNGCAGAAGAAACAACATCTTTTAAGGAAGACAAGTGAAGACA CTNTTCTAGAGATGCTGAAAA >gi|2764375|gb|T46202.1|T46202 9465 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138E20T7, mRNA sequence CTGTNCTNCTCGTCGTCTCAGAAGTAGCCGCGGCATCTNCTGCCACAGTNAATTCAGAGAGTAAGGAAAC TNTGAAACCTGATCAACGTGGCTACGGTGACAATNGAGGAAATTACAATAACGGAGGAGGTTACCANGGA GGAGGGGGTAATTACCAAGGAGGAGGAGGTAATTACCAAG >gi|2764374|gb|T46197.1|T46197 9460 Lambda-PRL2 Arabidopsis thaliana cDNA clone 138D15T7, mRNA sequence AATTTTTTTTNATTTCAGCAAAAAAGCAAAGGACTATACAGGTGATGGACATTCATGACATNCCTAAACC TAAGAAAGGTGGATTTTNCCCAAGAAAAGGCGGGAGTNCTCAAGGTGGTAGACACNGGTAAATTGAGAAA GATGAGAGTTAAGTNAGGAAGAGAAAAAAAGACAGAGANCAAAGCTCTGTTTCT >gi|2764373|gb|T46163.1|T46163 9426 Lambda-PRL2 Arabidopsis thaliana cDNA clone 137F22T7, mRNA sequence AATGCAGAGAGATGGTCGGAGTATCGCCGGTGAAGACTAAGCTGTGTNATCGNTTTAACCGATCCGTCGG CGGCAGGAATTGCCACCGGAAACACGTCGAGGACGGGTGATCCANTTTTNTAAACTNTCGTCTCTCGAAT TCTTCGAAGATATCGAAAAACTGTAAATNTTTTTTT >gi|2764372|gb|R84073.1|R84073 16032 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135O8T7, mRNA sequence AAACCTTCACATAAAAAAAATACTTTTAANTCCGNGTTTNATTCATCGAATCTTTTNCCGATAACNATGG CTGAGGAAATCAAGAATGTCCCTGANCAGGAGGTGCCAAAGGTAGCAACAGAGGAATCATCGGCAGAGGT TACAGATCGTGGATTGTCCGATT >gi|2764371|gb|T46124.1|T46124 9387 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135L18T7, mRNA sequence CCAAGCTCACATCCGATGCAGCCTTGGACCCCGCTGGTCTTGTNGCTGTCGCTGTGGCTCACGTCTTTNC CCTTTNNGTTGGTGTTTCCATAGCCGNCAACATCTCCGGCGGACACCTTAACCCCGCCGTNACACTTCGG TCTCGCCGTCGGTGGCAACATCACAG >gi|2764370|gb|T46122.1|T46122 9385 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135L12T7, mRNA sequence ATCCTTATTGATATTCTTCCAACTGCNATTTCCCGATCCCAAATTTGGGTTGATTGAATTCTAAAGTTTC TATTTNAAGGAAATTTTNATCCTTTTNAATGGCNGCTTACGCGAATAANCTCCGGTTGGCACGACTTGGA GGAACAAGTTCAGGTGTAAACCTGT >gi|2764369|gb|T46104.1|T46104 9367 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135J11T7, mRNA sequence TGTTTTCGAAGAGCTTCTNGTTNTGACAAAGCAAGAAACAACCGNCAACAACATCAACAATCTGAGCTTT AATGGCGGATTTANTCATCATCATCATCAATTCTTCCCAAATGGGTATAATATGGNTTACCTCTGTTTCA ACA >gi|2764368|gb|T46078.1|T46078 9341 Lambda-PRL2 Arabidopsis thaliana cDNA clone 135F22T7, mRNA sequence GAGGAGTGCAGCCAAAGACAAAGAGCTCAAGAAAAACGAAAAANTGCTTCAACAGATCGAAGCTAAAGCA ACTNGTAGCTATCAGAAAGATATTNCAACTNCTCAGCAAGTAGCTAAAGCAAACGGTGCACCANAGGATG GTACATCCGNGANTCATCACGAAAGAGCGAAACGGTTGCTTCTTTT >gi|2764367|gb|T45844.1|T45844 9107 Lambda-PRL2 Arabidopsis thaliana cDNA clone 132P11T7, mRNA sequence TTGGAAATACAGTTTAAGGTCTCGGTGTTGGGTCAAATGCGAAGGAATGCATCGNCCTCGCNGCTTGATT GCATCGGGAAGCCTCGGTGGGATTGCNATAGTTNCGGGAGGAACTGATATNAATNGGAATATACTAGCAT CAGCTGAGCTTTATNATTCTCCGTCAGGGAGATGGGAGATT >gi|2764366|gb|T45683.1|T45683 8946 Lambda-PRL2 Arabidopsis thaliana cDNA clone 130M16T7, mRNA sequence AAGCTCTTCTTCTCTATCTCTCTCTCTCCCTCTCAACCTCTCACCATGGTAGCTCAAGCTCCTCATGATG ATCATCAGGATGATGAGAAATNAGCAGCAGCGAGACAAAAGGGGTCNGAGATTGGTTACCAATAACTTCA TCAAGAAATGCAAAGTGGTGGTACTNTNNTTTTNACAATNTCACC >gi|2764365|gb|T45557.1|T45557 8820 Lambda-PRL2 Arabidopsis thaliana cDNA clone 134C6T7, mRNA sequence GAGAGTTTTGTGAACTCAAGAAAATAAAAAAAGTTATAGTTAATGGGATTCGGCTTAGAGAGTATCAAAT CAATCTCCGGCGGATGGGGCGCGGCGGCGGTTCCTNTNACGNTTGTAAATNAGTTACCGCNGC >gi|2764364|gb|T45484.1|T45484 8747 Lambda-PRL2 Arabidopsis thaliana cDNA clone 132J6T7, mRNA sequence ATCGCCATTGTTGCTCGCNTAGCTCTCGAAACGCCACTAATTAGCAAAACAACATTTAAAGATATCTNGT TTGGAGGACTTTGGACAATCGTNCCGCTACTGTNCATTTNCTCTCTCTTTGAAGTTTTT >gi|2764363|gb|R84050.1|R84050 16009 Lambda-PRL2 Arabidopsis thaliana cDNA clone 131A20T7, mRNA sequence TTTCATCCTCTGTCGACAGTACTAAACCTTCTCCTTCTAANTCTCCTGTNAATCTNTCCCTTAGTCTCAC ATTTCCTNCTACTGCTCCACAAAGAGAAGCAAGACAAGATTGGCCACCGNTAAAGTNTAGATTAAGAGAT ACACTAAAGGGTCGTNGTCTTCTTCGTCGTGGTGATGACAC >gi|2764362|gb|T45435.1|T45435 8698 Lambda-PRL2 Arabidopsis thaliana cDNA clone 129N8T7, mRNA sequence ATGTTCATCCCTGTGACAACCNTTCAACTTCGTNCCCATTGANGAGTTGGGTCTGTATGTTAATCAGAAG GNACTTATTGATCTNATNGGAGTTGTTCAAAGTGTATCTCCTACCATGAGTATTAGAAAGGNGAACTGAC AATGTGATGATTCCTAAGAGGGATATAAACTTTGGCTGATGAGTCAAAGG >gi|2764361|gb|R84047.1|R84047 16006 Lambda-PRL2 Arabidopsis thaliana cDNA clone 129M11T7, mRNA sequence ATCAACGGAGTTTGAGTTTCTTTTCCGATTCCGGCGATGGGGTCAGTCCCNGNTCCAGGCGAGTTAACTG AGTTAGCTCANCCGAGTTTCGAGGAGTTTCAGAAACAGACGTCGTTGATGACTAGCTGTACTCTTNTATG GGAAGATGTATNCCATACANTTNACTTACTCAGATGAGATTCTGATGAAGGAA >gi|2764360|gb|R84043.1|R84043 16002 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128E24T7, mRNA sequence AAGTAAGAACAACAACACTNAAGCAAAAAAGAAAAGCTCAAGCNGAGAGAGACAATGGCATCAACATTCA CGAGCTCAAGCAGTGTTCTTACCCCAACAACATNCCTTGGCCAGACTAAAGCNTCAAGCTTTAACCCCCT TCGTGATGTNGTCTCNC >gi|2764359|gb|T45427.1|T45427 8690 Lambda-PRL2 Arabidopsis thaliana cDNA clone 128E23T7, mRNA sequence ATGAAGNNCGGGAAGGGCAAAGTTTGGNTCGATCCCAACGAAAGCNCCGACATCNCCATGGCCAATTCCC GCCAAAACATCAGGAAGCTTGTNAAGGATGGTTTCATCATCAGGAAGCCAACCAAGATTCATTCTCGTTC CAGAGCTCGCAAAATGA >gi|2764358|gb|R65566.1|R65566 14070 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173E2T7, mRNA sequence TCAGTCAGTCTGGAAAGAATGGTATGCNTCGTGATTGGCTAGTTCGGGACTGTAATACTGGAGAAACCTT AACACGAGCATCAAGTGTGTGGGTGATGATGAATAAACTGACAAGGAGATTGTCAAAGATTCCTGAAGAG GTTCGAGGGGAAATAGAGCCTTATTTTGTGAATTCTGATCCTGTCCTTNCCGAGGACAGCAGAAAGTTAA CAAAAATTNATGACAAGACTGCTGACTATGTTCGATCTGGTCTCACTCCTCGATGGAGTGACCCNAGATG TTAACCCACGCANTGTGAATAATGGTAAAAGTACATTTGGGTNGANTCCCTNNGAGAGTTCCTCCNACTT GGGGGATTAATTGGANGAGGCAAGAAANNTTTNAAAAAGCATTNANCTCCTTGGAGGA >gi|2764357|gb|R65565.1|R65565 14069 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173D7T7, mRNA sequence CTTTCGCTTTTCCCACAGGCGAGTNAGAAGTTTGCGGTTGCGATTGTNATCGCTGCAACGATGATGGCAT TGGTGCCTTGGAACAATCTGATTTTGGTGGTGTTTCTTGAACTGTTCACAAGATACTCACCACCACGAAG AGCAAGCACGGAACGGTTGATGCGGCGGCTTAAAGAGTGGTGGTTTAGCATTCCGGCTGCTCCGGTCCTT CTTGAACAGAGCAAAGACGATAACAAGAAAACCAAGTAAAAACATCTGAAAAAAAACTACGTCGGGTTTT CNGTCCCAGGAGAGTACGNAAAAAACAGGAGNACATAGCAAAGTGTAATAGTTACGTATGTTTGTATATT TACATGTATTCATGTATGTTATTAGGAAATAGGTNAATTGTTCCGTGGGTNAAATCCCATTTTGGCTGNA TTAAATGGTNTTGGNGGNAAAATNCCCNTTTT >gi|2764356|gb|R65563.1|R65563 14067 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173D4T7, mRNA sequence TCCATTGACATGGCAAGGCAGCTTGCTCTTAAAGAAGGTCTTCTTGTGGGAATATCATCCGGTGCAGCAG CTGCTNAGCAATTAAACTTGCACAGAGGCCAGAAAACGCTGGGAAGCTATTTTTGGCGATATTCCCGAGT TTCGGGGAGAGGTATCTATCAACGGTACTTTTCGATGCGACAAGGCAAGAAGCGGAAGCCATGACCTTCG AGGCTTGAACATTCTCCATTTNTNCTTAAGAGACGCCANAATAAAAGAGNTNTTCAGTTTNTCCCNATAG GGGGCTCTTCAATCTTTAGGTTACCATTNGCGTCCTTTGCNTCCAANCNGTATCTTCCCATTGTNTGNCC ANTAAAAAGTCAAAACTAGGTTTCCT >gi|2764355|gb|R65562.1|R65562 14066 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173D3T7, mRNA sequence CACCTGGGTCAGTCAGTCTGGAAAGAATGGTATGCGTCGTGANTGGCTAGTTCGGGACTGTAATACTGGA GAAACCTTAACACGAGCATCAAGTGTGTGGGTGATGATGAATAAACTGACAAGGAGATTGTCAAAGATTC CTGAAGAGGTTCGAGGGGAAATAGAGCCTTATTTTGTGAATTCTGATCCTGTCCTTGCCGAGGACAGCAG AAAGTTAACAAAANTTGATGACAAGACTGCTGACTATGTTCGATCTGGTCTCACTCCTCGATGGAGTGAC CTAGATGTTAACCAGCATGTGANTAATGTAAAGTACATTGGGTGGGNTCCTGGGGAGTGCTCCACTTGGG GAATAATTGGCGAGGCAAGNAGCTGAAAAAAGCAATGGCCCTTTGGGNGTATTCGGNAGGGGAANTTCGG NANNNNNACNANTTTTTNCTTT >gi|2764354|gb|R65553.1|R65553 14057 Lambda-PRL2 Arabidopsis thaliana cDNA clone 172A8T7, mRNA sequence AGTCGTCCATCACAACACCACTACTCCATCAGTCAACGGACAATGTTTGACTACTTTGGACAAATCACTC TCCAGCTAATAATTACAAATGCCATTACCCAATTAAAAGGGAACAATGGTGTGCCGTTGTGTTTTATGAC TTTNGTGTCTGCTTTTTTNCTTAGTGTTTTCTCTTCTTTTTTTTTTCTAAAAAATTATTAATTACCTAAG AAAGGTTTTTGAAGAAAGGAAAAAAAAATGGTGGATGAGACATCATTGTTCATGAGGATGATGATGATGA TGATAGTGATGAAGAAGACTATGTGGGAGCTTTGGATTGAGACTTTTCTATATATAANATCTGGCTGATA TATTAGTGCCATTTTTTCCTTACANTTCTTTGTGGGGNTTTNTTTNCCNCNTATCATCAATAGGANTGTT ATAATTTNNCATT >gi|2764353|gb|R65549.1|R65549 14053 Lambda-PRL2 Arabidopsis thaliana cDNA clone 172A15T7, mRNA sequence ATGAGACACAATCACATGGCTTAATGTTGTGCACAGAGTATCTAGGGTTTNANAGTTACGACATGAGGAT NTCCGATAACGAGGTGGAGAACAAGATGACTTGTCATNCGGAGGTGGAGACCGAAAGGNTTGAAGCAAAG AGGAGGAAGACGAAGGAGAATNTGGTGGTGCAAGCNCAGAAAAAACAGTTTCCTCCGCCTCTNTCGTCAT TAAACAGCCGTGGACAGCGATATTTTTATCTCCGTCCGGTGAGAAAAGACGGTAGATTNGNACTTACGCA AGTTATGGTCGATCGNCCAGAGATTTTCCACGNTTCTAGAGTAGATNGACGGTTNAAAATTACATTTTTT >gi|2764352|gb|R65539.1|R65539 14043 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171O16T7, mRNA sequence TCGTCTCTTTNTCCGTCGCCACCGTTCCTAAAACGTCTCCCGTCTTCTTCTAATGGCGATCAATCGTAGC TCCGATCATGAATCCGACGAAAACACCCGTNTTTACCATCCTTACCAGAACTACCAGGTCCCGATCAAAT CTCAGTATCTATACAAGCTTCCGACTTCTCCGGAATTTNTATTCACGGAAGAGTCTCTCAAGCAGCGTCG ATCATGGGGAGAAAATCTCACTTTCTACACAGGGACGGGTTATCTAGCCGGCTCTGTAGCCGGTGCTTCA ACCTGGGATCTNCTCTGGTATCAAGAGTTTCGAAAATGGAGACACGGCGAGCTTGNAAATCAACAGGATT TTAAATTCNTCTTGGTCAGGCATGNTNGTANCTTCGGGTATTAGGGGGTTGGNNTTTTTNGGGTNAACCT NNGANGGGNTTTTAAAAAGGG >gi|2764351|gb|R65530.1|R65530 14034 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171N11T7, mRNA sequence TTTNTCCTTCTTCTTCTCCAATTTTCAAAATTCGAAAAGATGTTGAAGCTTTCGTGTAATGTGACTGATT CTAAGTTACAGAGAAGCTTACTCTTCTNCTCCCATTCATATCGATCTGATCCGGTGAATTTNATCCGTCG GAGAATTGTCTCTTGTNCTCAGACGAAGAAGACAGGTTTGGTTCCTTTGCGTGCTGTTGTATCTNCTGAT CAAGGAAGTGTGGTTCAAGGTTTGGCTACTCTCGCGGATCAGCTCCGATTAGGTAGTTTGACTGAAGATG GTTTATCTTATAAAGAGAAGTTTTGTTGTTAGATCTNACGGAGTGGGGTAGTAACAAAACCCNCTACTGT TNNAANCATTGCTAAACTTTTTACAAGGAGGTGGGNTGTAATCATGGCACAAAGNTGTTTGGTTTTTCCG ACCNNANGGGTTTTNAAANAACANCCTCCTTTGGGG >gi|2764350|gb|R65518.1|R65518 14022 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171J23T7, mRNA sequence CACAAAAGCTTCACCGGAGATCAGAGACGCGAAAATGGTGAACATTCCAAAGACAAAGAACACTTACTGT AAGANCAAGGAATGCAAAAAGCATACTTTGCACAAGGTTACCCAATACAAGAAGGGTAAAGACAGTNTTG CTGCTCAAGGAAAGCNTCGTTATGACCGTAAACAATCTGGTTATGGTGGTCAGACTAAGCCTGTNTTCCA CAAAAAGGCTAAGACCACGAAGAAGATTGTTTTNAGGCTTCANTGTCAAAGCTGCAANCNCTTTTTNGCA GCGTCCTATCAAGAGGTGCAAGCNTTTGGGGATCCGGTGGTGCCAAGNAGGGGNAAGGGGCCATCTNTGT TTTAAGGTTGGTTTCANCTTNTTTCCTGCG >gi|2764349|gb|R65517.1|R65517 14021 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171J22T7, mRNA sequence ACCCAGAAGATTTCTTGGGTTCCAGATCCCAAAACCGGTTATTACAGACCCGAAACCGGTTCCAACGAGA TTGACGCGGCTGAGCTACGAGCAGCTCTCTTGAACAACAAGCAGTGATTGATTATTATTACATGTAATTT TGTCAAGGTCTTTAAGAGGAGATTAGTGGGTAATGATCTGGTGCAGTGAACCCTATTTTCATATGTTAAG TGCGGTTCTGTAATGAATATAATAGAGAAGCGTTTGGTTTCCNCTAATTGTAACAAAAGGATCGTTGGAT GTATGATAGAGNTTTTCTTATAAAACCATTTTCAGGAACT >gi|2764348|gb|R65515.1|R65515 14019 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171J20T7, mRNA sequence CCGCTTGGTAACTTCATGGNTCAAAGAGACGCTTCCATCAAAGAGAAGCTCGCNAGTTTTAAGGACACTT CGACTGAAGTAAAGGAGCTCGATGAGCAAGCCGCCGCCGTGATGAGAGCAGCTAGGGCTGAGATCGCCGC CGCGCTTAACAAGATGAAGAAGGAGACTCAGGTTGAAGTCGAGGAGAAGCTAGCGGAGGGAAGGAAGAAG GTGGAGGAAGAGCTAAAAGAAGCTTTGGCGAGCTTNGAGAGTCAGAAAGAAGGAACCATTAAAGCTTTGG ATTCTCAGATTGCTGCTCTTAGTGAAAGNCATTTTTCAAGAAGGTCTTTCCTNCTTAAATTAAATTTTTT TTTACCNCGNGTAATTCCCTGNNTTCCCNTANCNCAAAACTTTTTTTCCAAGGAANTTCCTGNNAAAC >gi|2764347|gb|R65511.1|R65511 14015 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171J14T7, mRNA sequence GGAAAATTCCAAGCTTCGAGATTTTNTTATGGNTCGTGGTCAGATTGTTGATACCTTACAAGGAGAAATT NCTGTNATCTGTCAAGATGTGAAGCTGTTGAAAGAAAAATTTGAAAACCGAGTGCCTTTAACCAAATCGA TCTCCTCAAGCTTCACTAGTTCATGCGGATCATCTATGAAAAGCTTGGTGCTCGAGAACCCTTCTNAGCG ATTGANTGGAGTGACTGAAACCTCAAACAACAACAAGTTCCCAGAAGCAGCAGCTTTCTTCATGAACAAA GAGAAAGATGATTGTAGAGATCTNCTTGNAGATGGATGGGNCATCTTTGTCAAGGNGNCCGACAAGTTGT TTGGTACTGNAGGATGAAGTANTTGTNCANATAGGGGACCTTAATNCTTAAAAATAAAATGGGTTGGTTT CC >gi|2764346|gb|R65504.1|R65504 14008 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171I21T7, mRNA sequence AGATCTCGTTAATATCCATCCTACTGAGCTTAAATTCCCCTTTGAGTTGAAGAAACAAAGTTCGTGTTCG ATGCAATTGACCAACAAGACAACTACTCAATGTGTCGCTTTTAAGGNTAAAACAACCNATCCTCGCAAAT ACTGTGTNCGTCCTAACACTGGTGTTGTCTTGCCCGGTGATTCCTGCAAATGTTACAGTGACGGTTGCAA GCCCAGGAAAGNGGGACCACTTGATTATGCAATGCAANGCCAAGTTCCTTGTTNANACTGTTGTGGNCCC TTGNTGGTCCTACTTTCCAAGGAAGGTCCTCNGCTTGAAAATTNTTCAAAAAAGGGGGCNTNGTTAGNGG TGATTT >gi|2764345|gb|R65497.1|R65497 14001 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171I11T7, mRNA sequence AACACAATTGAAGCTTTTATAATATTTNCTCAGAAACTTTCAAAGAGCTTAGAAAATGAGTACAGCTACT TTCGTTGATATTATTATCGCCATCCTCTTGCCTCCACTCGGTGTCTTTCTCAGATTTGGTTGCGGGGTTG AGTTTTGGATATGTTTGGTTTTGACGCTACTTGGGTATATTCCTGGGATCATATACGCCATTTATGTCCT CACCAAATGATTTACCATCTATCATCATCTCCTTGAACAGCTGTTCCGTCGTGTTCTCCTATCTTTGTGA CTGATTCAGCGTTTCTTTTTCTTTCATCAGAGTTTTTATGTTTCAAGTAATTTAATTAATCATCACTGTT GTGTTTGCATTGTNATATAAATGNGGTGTTGTATAAAAGAAGAGAGCGTTGGTTTTT >gi|2764344|gb|R65493.1|R65493 13997 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171H2T7, mRNA sequence AGGAAGGTCTAATCACCAGGAAGAGGAGTAAAAATGGCGGTTCCGTTGCTTACGAAGAAGGTGGTGAAGA AGAGGTCTGCCAAATTNATCAGACCCCAGAGTGATCGCAGAATCACCGTCAAGGAAAGCTGGAGGAGGCC TAAGGGTATTGACTCCCGGGTGAGAAGAAAGTTCAAGGGTGTCACCTTGATGCCCAATGTTGGTTACGGN TCTAATAAGAAGACCCGNCACTACCTCCCAAATGGNTTCAAGAAGTTCATTGTTCACAACACCTNTNAGC TCGTGCTACTCATGATGCACAACAGGACTTACTTGTGCAGAGATTGCTCACAATATCTCAACAANGNAGG GAAAGGCCATAGTGGNGAGAGTTTCTNAGCTAGACGTTGTTNTTCCAACAAGTTNGTAGGTTTNNTCCNG GATGCGGNTTAAACCCNTAAANGTTTTTTTT >gi|2764343|gb|R65492.1|R65492 13996 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171H24T7, mRNA sequence CTGTTAAGCCACTAAAACCCTAAAGGCGTCTCCTTTNNTNGCCACCACTCTCCACAATACCCATTTNTGC AAAATGGCTTCTNCTCGTATTTNTNTCCGCCTTGTTCGCCGATTTGCCTCAGCCGCCGCTGACGGTACGA CCACCGCTCCCTCTTCAGGCAAAATCTCTGTNTCCAAAGCTAAGTCCACTCTCCGGAAAGAACACGATCC CGACAAAGCTCTTAAGATCTACGCCAATGTNTCCGATCACTCAGCCTCTCCTGTTTCATCTNGCTACGGC CAAGAGCTCACTGTTCGTGGGCTCGCCAAGTGTCGNCGTTTCTAAGACATNGNAACCCTAATTTGANTTC CACAAAAATGATCCCAAAATNAAAG >gi|2764342|gb|R65491.1|R65491 13995 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171H23T7, mRNA sequence GGGAATATNAAGATGACATCTTCTATGGTCTCTNCCATGGCTCTNTTTCTCCTTCTCCTNCTTGTGTTTC CGCATATGGATAAAGCCCTTGGCGCACAANAGGAAGCCCAGAAACAAAGGATTCCNCGTTTNAAATGTTC TCCACGAATCCCCTTTTGTACAAATCCAAACCTACCTTCTCCTCCGCCCCACAGGTCTTTNAAAGGCACA CTCGAACCTGGTCATTGACTTCACTCTAGCTTCGAATGCGTGTNAACGTGTGCATGTTTCTAACATTGTG CTTTGGTTTGTGGTTTCNATCCTTGTTTATCTTTGCATGTGTTTGTAATATTTAACAGTTTTNNTCGNAC CGTCGGTTGANTAAA >gi|2764341|gb|R65487.1|R65487 13991 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171H11T7, mRNA sequence GGAAAAGATTATGTTCAGCGATTGGGAGAATGGGTACAACGCAATGACTCATACATATGAGAATCTGTTC GAAGCTGGAGTGATTGANCCGGCTAAAGTGACAAGATGTGCGCTACAGAACGCTGCTTCCGTAGCAGGAA TGGTACTGACCACTCAGGCCATTGTTGTTGACAAACCGAAACCCAAGGCTCCTGCTGCTGCTGCTCCTGA GGGTCTCATGGTGTAATCAAAACACAACATCTTATCATCACAATGGCATCTTTGTCTTTTTGCACATTTG TCATCCCCATTTATCTGCAATGTTTTTCTTTTTTGGGGGAATATGAGTAGTTTNTTAACAGTNTCGGGAA ATAATTATCATCTTTTTTGTCC >gi|2764340|gb|R65486.1|R65486 13990 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171G9T7, mRNA sequence AAGTACGTTTCGGTTTTCAGGCCAATCTCTGAATCTGCGTGACAAAAGCAACAAATTACATATCTCTCTC TCTGCGCGACTTCGAAGATCAACATCCATGGCGTCACAGGTAAGGTCAGTAAAAGTTGGCAATCTCTCTT CAGGAGCAACTGAGCATGATATTAAAGAGTTTTTCTCTTTCTCTGGTGAAGTTGAAAGCATCGATATCCA AAGTAACGAGCATAGTGCTTATGTCACATTTAAAGAAACTCAAGGAGCAGAGACTGCTGTGCTCTTATCT GGAGCGAGTATTGCCGATCAATCAGTCATCATTGAGTTGGCTCCCAACTACAGTCCACCAGCAGCCCCTC ATGCTGAAACACAGAGCAGCGGTGCAGAAATCTNTTGTCCNGAAGGAAGAAGATGTTNTNAGCAGCATTT TTGNAAAAGGGNTNNTTNNTTNGGAAAATTNTTTNGNAAAGAAAAAGTTTTTNTGGGAANATGGTTTTCN TAACCCCCCCCNNGNGC >gi|2764339|gb|R65482.1|R65482 13986 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171G1T7, mRNA sequence GCTAAGCAGCCTAACTCTGCTATCCGTAAGTNTGCTAGAGTTCAGCNTATCAAGAATGGAAAGAAGATTG CTGCCTTTNTCCCCAATGATGGTTGTTTGANCTACATCGAGGAAAACGATGAGGTCTTGATTNCTGGATT TGGTCGTAAGGGTCACGCTGTGGGAGATATTCCCGGAGTTAGGTTCAAGGTCGTGAAGGTTTCTGGTGTT TCACTCTTGGCCCTCTTCAAGGAAAAGAAGGAGAAGCCAAGATCTTAAGCAACCCATACAAAAAGCTTCA AGCTTTTGAAATGGTTTTTNATAGTTCAGTTTAAGTCTTGTNCTGTNCTACTTTATGTTTCAAGAACTTG ATTTTGTGTACANTTTATGAGGTTTTGAATTAAGGCATTATCGGTTAAAATTATTGGGGTTAANC >gi|2764338|gb|R65480.1|R65480 13984 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171G13T7, mRNA sequence GTTATCACCCAANAGAGAAGAGCAAACACAATGGCTTTCGCTTTGAGGTTCTTCACATGCTTTGTTTTGA CAGTNTTCATCGTTGCATCAGTGGATGCAGCAATAACATGTGGCACAGTGGCAAGTAGCTTGAGTCCATG TCTAGGCTACCTATCGAAGGGTGGGGTGGTGCCACCTCCGNGCTGTGCAGGNGTCAAAAAGTTGANCGGT ATGGNTCAAACCACANCCGACCGTCAACATGGATGNAGATGCTTACAGTCCGCTGCANAAGGGGTTANTN CAAGTNTAGNCTCTGGGCTTCCTGGGAAGTGCGGTGTTAGCATCCCTTATCCCATGTTCACG >gi|2764337|gb|R65471.1|R65471 13975 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171F15T7, mRNA sequence AGTTAAAATGTCTTGCTGTGGAGGAAACTGCGGATGTGGATCTGGCTGCAAGTGCGGCAACGGTTGTGGA GGGTAAGTCTCCAACGTCTCGTTTGTATTTATATTTTCCGGTGAAATCGTTGCATGCAAGTATGCAACAA CTGTGAATCGATGATGATATCTTGTTTTGATGAATGGTTTCTTGGAGATTTTNCTTGTAAAAAAGATACA ACTCTTTTGAATTTACACGATCTCTGTTTTCATAGGATACTGATGGGTTTTTNCTTTCGATTGTTGCAGT TGCAAAATGTACCCNGACTTGGGATTCTCCGGCGNGACAACCACAACTGAGACTTTTNTCTTTGGCGTTG CACCNGCGNTGAAGNATCAGTACGNGGCTTCAGGGGGGGGTAACAACGCTGAGANCGATGNTTCAAGNNT GGNNCTTACTTCNAGTGTNTNCCTTCACCTCAAGTNAAGAGGCCTTTTAATAANAGGGTAATCGGCCCCT TAATAATAAAGTTTG >gi|2764336|gb|R65469.1|R65469 13973 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171F13T7, mRNA sequence CTTCCTTTCATATTGTGAGGATGTCCAAAACCAATATGAAATTTTGCAATAGTTATTTNCTGGTCGATCC GACCANAGCAAGTTTTCTNGATCTCCTNTTGCTTTTGTTTTCCTCCAACCTGACCAGTGCAAGATTCATC GATTCTCCTCCGGATACGNTTAAAGGCTTCCGGAGAAGTTTCGCGAGTCGATGGATCCNNGCGTTGGCCA TNTTCCTTCAAAAAGTATTAATNCTCTTAAGTAAACCTNTTGCATTCANTGGGCAAAAGCTCACATATT >gi|2764335|gb|R65466.1|R65466 13970 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171E13T7, mRNA sequence ACTTNCACCAAGCAGCATGAAGATTAAGGTCGTTGCACCACCTGAAAGGAAGTACAGTGTCTGGNTCGGT GGTTCCATTCTNGCTTCCCTCAGCACATTCCAGCAGATGTGGATCTCCAAGGCCGAGTATNNTANAGGCA GGTCCAGGAATCGTTCACAGAAAATGTTTCTAAGCTCTCAAGATCAAAGGCTTAAGANAGCTGGGGGTTC TNATGAANGGGCTCAAAGTTTCT >gi|2764334|gb|R65465.1|R65465 13969 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171D8T7, mRNA sequence AGATGTTCGCCGTGAAGTCCAGATTATGCACCATCTCAGCGGTCACCGGAACATAGTGGACTTNAAGGGA GCCTACGAGGACAGACACTCTGTGAATCTNATAATGGAGTTGTGTGAAGGAGGGGAATTGTTCGATAGGN TCATTTCTAAAGGTCTTTACTCAGAGAGAGCTGCTGCGGATTTNTNTAGGCAGATGGTGATGGTTGTNCA TAGTTGTNATTCTATNGGTGTAATNCACCGAGNCTTTGAAGCCCGAAAACTTTCTCTTTCTTAGTAAAGA TGAGAACTNACCATTGNAAAGNTTTCAGACTTTTGGTCTCTCTTGT >gi|2764333|gb|R65461.1|R65461 13965 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171D22T7, mRNA sequence TTCCATTAACGTCTTCGTTAATGGCGACTCCTATTCAAGCCTCTTCTNCCTCCACCATTGGTGAGACCAG NNANGGCTTGAAGGTCCAGTCTCATGTTTCAATTGGAGCAAACGATCTGCTGATTGTNGGACCGGGTGTT CTTGGACGCTTAGTTGCAGAACAGTGGAGACAGGNACATCCAGAGTCTCAAATCTTTTGGGCAGACAGTA ACAACAANTCATCATGGTGAGTTGGAGAATTTGGGTATCAAANCANCTNTTNAAGGAACCGCATATGGGG GAAAG >gi|2764332|gb|R65457.1|R65457 13961 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171D14T7, mRNA sequence AAGAGCCAATTCAGCCTAACCCGGCCTCTTTAGCCTGCGAACTCCCGATTGCAAGAAGAGCTTCACTTCA TCGGTTCCTTGAGAAGAGGAAGGATAGGNTCACATCAAAGGCACCATACCAAATAGACGGTTCAGCTGAA GCGTCTTCCAAGCCTACTAACCCAGCTTGGCTCAGTTCACGGTAAACTTCGAGCCTGTCCGACCCNGAAG GCACAACTTGAGAGACCTTCTTGTAAGATTCTNCTGATGCTCCATCGTTACAAATATCAAGCTGCTCCTC TGTTCATTTTTTCTATAGNTTAATTTCANCCCTAGTAGTTTTGGTTTTGTTTAACTNCCCCCGGAAAACT CCATTTATATTTGTATGGAAATCCAATATCAATAGGNGTTCNAATCGTTTTNCTTCTTGGGGNTTTAAAG TTTNAGCCAGTNGNGGNTAAANCNCTTTTCCNTTNCCGG >gi|2764331|gb|R65454.1|R65454 13958 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171C4T7, mRNA sequence GACGAAAGCGGCAAGGAAATCAGCTCCAGCCACCGGAGGAGTGAAGAAGCCACACAGATTCCGTCCAGGA ACAGTAGCGTTGCGTGAAATCAGAAAGTATCAAAAAAGCACAGAGCTTTTGATCCGTAAGCTTCCTTTCC AGAGATTGGTTCGTGAGATAGCTCAAGATTTCAAGACGGATCTGAGGTTTCANAGTAGTGCAGTCGCAGC TCTTCAGGAAGCAGCTGNAGCTTATTTGGTTGGTTTNTTTGAAGATACTAATCTCTGTGCTATTCATGCT AANGAGGGNTACGNTTTATNCCNAAGNNTATTCAACTTTTGCGAGGAGGATTTAGAGGGTNAANAGGGCT TTAA >gi|2764330|gb|R65444.1|R65444 13948 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171B22T7, mRNA sequence AGAGAGACCAAAAAGAGATCGGAAGAGATGGCTTCTACCTCCGCGATGTCATTGGTCACACCACTTAACC AGACCCGTTCGTNTCCTTTCCTCAAGCCATTACCTCTGAAACCATCCAAGGCTTTGGTTGCAACTGGAGG CAGAGCACAGAGGCTTCAAGTTAAGGCCCTCAAGATGGACAAGGCTTTGACCGGTATCTCCGCGGCTGCT CTTACTGCTTCGATGGTGATTCCGGAGATAGCTGAAGCTGCTGGTTCTGGAATCTNTCCTTCCCTCAAGA ATTTNTTGCTCAGCATTGCTTTCTGGTGGCCTCGTCCTCACTTGTCATCATTGGTGTCGTCGTCGGCGTC TCCAACTTTTGACCCTGTCAAGAGAACCTAAGNCCTATATAATCTTTNTTTACATNAATAATGNAATNCN GTCTNCCTCCTGGGAATTCGNTNAAATTTTGCAGNAATNNACTTTTTTGGGNAAAAGGC >gi|2764329|gb|R65443.1|R65443 13947 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171A8T7, mRNA sequence AGAGGGTCGCAGTCTTGATTCACACATTGAGGACCAATTTGCAAGTGGACGTTTGTTGGCTTGTATCTCT TCAAGGCCTGGCCAGTGCGGGCGTGCTGATGGATACATCTTGGAAGGTAAAGAGTTGGAGTTCTACATGA NGAAGATCCAGAAGAAGAAGGGCAAGGGTGCTGCTTAGAGTCTCTTCTTATCTGCCTTGAGCTTTTGTCT TACAACATGTTTTGAGTTTTCAGTTTCAATTGTCTGAGAAACTATGTTTTTGGATTAGCTTGTGGTATTT CTTTGAAACTCCCATTATGGTACAATGTTTTTATCTTGGATTTCCTTTATAATTTTAATCGNNTAATTTC ACTCT >gi|2764328|gb|R65442.1|R65442 13946 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171A2T7, mRNA sequence ACGACGATGCTAGATCGGGCTCTTTCCTCTCGCCGTCCTCACTCCGACGCCGATCTCTCTGCTTCCGGCG AATCCGGAACCGACGAATCTAAAACCAAACGCCCACACATCTACCTCCTTGCTTCCAATTTCCTTTCTCG GATCGGTCATCAGTGGTGGCCTTGTCTCATTCTCGCTCTCCTCTTCCTCGTCCTTCTCTTCCTCATCTCC GTTGCTTTCCATTCTCACAGCTTTGTTTGCATCTCCCGNTTCGATCCCGCTGCTCGGATCGGGTTTTTNG GTCTTGATGGCCTCGAATCGGATTTTGGTGCCCCTAGGTGTTCCTTGGTGCAGATCGAAACAATGGAAAA NAAGTTGAGTGGACATCCAAAGATTTTACTTCAAGGGGCTAGAAGGAGGTTTGTGCCGNTATATGAAACA CGGCCGTTAAAGGACAAATATTTATGGAANTNGGTTTTTGATCAAAAGGCTTTGGGGTAATGGNNAATNG NCCGTTTGGGTAAAANCCAGNTATTNNTGANTNTAANANGNGGNCNTTTAAANGGGCAAT >gi|2764327|gb|R65439.1|R65439 13943 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171A11T7, mRNA sequence CNTGGTCGTGGGGCCCACTAGGGTGGTTAGTACCGAGTGAAATCTTCCCGTTGGAGATAAGGTCGGCGGC GCAGAGTATCACCGTGTCCGTGAACATNATCTTCACGTTCATTATCGCGCAAATCTTCTTGACGATGCTT TGTCATTTGAAGTTTGGGTTATNCCTTGTTTTCGCCTTTTTCGTGGTGGTGATGTCGATCTTTGTATACA TTTNCTTGCCGGAGACGAAAGGGATTCCGATAGAGGAGATGGGTCAAGTGTGGAGGTCACACTGGTATTG GTCAAGGTTTNTGGAGGGATGGTGAGTAATNGGAATGCNCTTGAAATGGGGCAAGAACAGTAACCAAGCT GGAACGGAAGCATGTTTGATTTAATCATTTGTTTTTAATTGAGAGTTTANNGGAAGANANGANNAAAAGA TTTTNNNAATTTCCAAATGTNCGTAAAGGNAAAAAGTGTTCT >gi|2764326|gb|R65434.1|R65434 13938 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170O9T7, mRNA sequence ATCTNTNTCTNTTTGCCTCTNCCTCATTTGCATTATCTATCTCCCCCAACATTCTCTCGCATGCGGCTCT TGCAACCCACGGAAGGGCGGAAAGCACTCCCCTAAAGCCCCTAAGCTACCAGTTCCTCCGGTGACCGTCC CTAAGCTACCAGTTCCTCCGGTGACCGTCCCTAAGCTACCAGTCCCTCCGGTGACCGTCCCTAAGCTACC CGTTCCTCCTGTGACCATCCCTAAGCTACCCGTTCCACCAGTGACTGTACCTAAGCTACCCGTTCCTCCT GTGACCGTTCCCAAGCTACCCGTTCCTCCAGTGACCGTTCNCAAGNTANCCGTTCCTCNAGTGACAGTCC TAAGGTACCNGTTTCCCGGTAACTGTACCTAAGGTANCNGTTCTTCAGTNACGGTCCTAAGTTACCNTTC TNCGNTTTTAAGGGNTCCAATNCTTAGNGGTGGGTCAT >gi|2764325|gb|R65415.1|R65415 13919 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170N18T7, mRNA sequence CTCATCTTCAAGCCATCTCCGATCATCATCAGACAATGGCAGCAGCTATGGCAACAGCAACCAAGTGCAT GTTTCTAAACCCATCTCCTCCTAAACTCCAAAACCAAACCAAATCCAAACCATTCATCTCCCTACCAACC CCACCAAAACCAAACGTNTCTNTCGCCGTCACAAGCACCGCCCTAGCCGGAGCCGTCTTCTCTTCCCTCA GCTACTCTGAGCCAGCTTTAGCCATCCAACAGATCGCTCAGCTCGCTGCAGCAAACGGCAGTAGGCGNCA ACCGTGGNTTAGNTCTTCTNCTTNCCCATCGTNCCAGGCATTGCATGGGGGCTTTTACAACATTCTTCAG GCAGTNTTTNNCAGGGTAAAAANTTNGTGGGGTNAAGGGATNGTTNTTTGGGTTGGGTTTNTGGGGGGTT TTTAA >gi|2764324|gb|R65400.1|R65400 13904 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170L24T7, mRNA sequence AGTTAACCGCATTTTTGACAAGTATTGGGACTTTNACTCAAGTGAGTCACTCGAACATGACCTTCCTGGT CACTTGCTCCGCTACCCGATCGGTGTAGCCAGCGAAGGCGACATCACTGAGCTTCCAGGATTTGAATTCT TCCCGGACACAAAGGCCCGTATCCTCGGCACCAAATCAGACTACCTGCCTCCAATCCTTACAACCTAATC TCACTAAGCATGTCAAGTAATGATCTCTCTCTCCCTCTCTGCTTTGCTGCTGTTGTAGCTTTGAATAAAA CTTGAGTGTCTACCTTTAGAATTAAGGAGTCAAATGGTTGTTATGATGATGCACTTCTTTACCCCTTTGG TTTTTATATTCGNACAATGACGTGGTNAGAGAATGTAGCTTTGTNATCTTGNTTTGTTGTTGTNATGGAC CCTTTGGGCTTATGAATCTAANATCTGACCNTTTNTT >gi|2764323|gb|R65397.1|R65397 13901 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170L1T7, mRNA sequence GAAGAAGAAGAAACTACAATAGTTAATCAATCAAAGAGAAGTAAGAGAAATGGCAGATTCTAACTGTGGA TGTGGCTCCTCCTGCAAATNTGGTGACTCTTGCAGTTGCGAGAAGAACTACAACAAGGAGTGCGACAACT GTAGCTGTGGATCAAACTGCAGCTGTGGGTCAAACTGTAACTNTTGATGAAATTATTATGGTCTAAAATC ATATATATGGCAGAAAAATTGGGGAAAATATGTGTTTTATGCTAAGAGATGTGTGTGTNTTGTTGGAATA AAGGCGTGACCGTTGTGTTGCGTATCAACTCTCTTAAGCTTTGACTTTTCCCAGCTTTGTATTTTCCNAT GTATGGTAATGGTGTGATTGTNTAATGGTTTTCATATGTAACCGTAAAAAAAATATTTTTTGTG >gi|2764322|gb|R65395.1|R65395 13899 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170L17T7, mRNA sequence CACAATCTCGGCGATTCTTTCTTCCGTNTCGAGTCGCTGAGATCCATCAGTAAAAGGTCTGCAAAATGGT TGCTCAGGGATTCACTGTGGATCTTAAAAAGCCCCTTGTATTTNAGGTTGGTCATCTTGGAGAAGATTAT GAGGAATGGGTTCACCAACCTATCGCGACCAAGGAAGGCCCTCGGTTTTTTNAGAGTGACTTTTGGGAGT NCTTGACACTTACAGTTTGGTGGGCAGTTCCTGTCATTTGGTTGCCAGTTGTAGTCTGGTGCATATCAAG GTCAGTAAGTATGGGATGTTCACTTNCAGAAATCGTCCCAATTNTTGTCATGGGNATATTCATCTGGNCA TTTTTTGAANACGTTCTTCACCGGTTCGGTTTTCCNCATAAAAACGNGGGGTACTTGGGNANACTGCACA CTNTCTTTTTNCGGGGCCANCNTAAGANCC >gi|2764321|gb|R65393.1|R65393 13897 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170L13T7, mRNA sequence TTGAATTAGCCATGGAGAAGAATACTTCTNAAACCATCTTCTCCAACTTTTTCTTTCTCCTTCTCCTTTN TTCATGTGTCTCTGCTCAGCTCCGGACAGGTTTCTACCAGAACTNATGTCCGAACGTGGAAACCATTGTA CGTAACGNTGTCCGTNAGAAATTCCAGCAGACTTTNGTNACCGCTCCGGCCACTCTTCGCCTCTNCTTCC ACGATTGCTTCGTTCGTGGATGTNATGCGTCAATAATGATAGCATCACCATCGGAGAGAGACCATCCAGA TGACATGTNATTGGCCGGAGACGGATTCGACACGGTGGTGAAGGCGAAGAAAGCCGTTGATAGCAATCCC AATTGCNGAAACAAAGTTCNATGTGCTGANATTTGGGTCTCGCANTCGTNAAGTCGTCGTTTTGNCCGGG GNCCAAGTTACCCGGTGGTGGTTTGGGNGGGGG >gi|2764320|gb|R65392.1|R65392 13896 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170L10T7, mRNA sequence CGAGTTAAAGGAAGAGTTGGTGGAAATGCCTTTATGTAAACACATATTTNATCTCGATTGTATTCACCTT TGGCTTTATTCTCACAACACTTGTCCTCTTTGTCGATCCTCTGTCTCCATCTCCTCCACCAAAACCTCTG TTGATGACGACAACGACCATCCAGATTCTCCTCAAACGTCACCGGTTTGATTCAAACCCCCGAAGGAAAT AAGCAAATACACAAGTTTTGTTAGTGAATAGATCGATACAAGATGTAAATCTTAATTTTNCTGATACAAG ATATCAAAATGTAATCCATCACATTATATATATNGGTTACACAGATTCATTC >gi|2764319|gb|R65389.1|R65389 13893 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170K20T7, mRNA sequence CAGCGAAACCACAGCCAAGGGAACGGGCTTGGCAGAATCAGCGGGGAAAGAAGACCCTGTTGAGCTTGAC TCTAGTCCGACTTTGTGAAATNACTTGAGAGGTGTAGGATAAGTGGGAGCTTCGGTGCAAGTNAAATACC ACTACTTTTAACGTTATTTTACTTACTCCGTGAATCGGAGGCGGGGTACAACCCCTGTTTTTGGTCCCAA GGCTCGCTTCGGCGGGTCGATCCGGGCGGAGGACATTNTCAGGTGGGGAGTTTGGCTGGGGCGGCACATC TNTTAAAAGATAACGCAGGTGTCCTAAGATGAGCTCAACGAGAACAGAAATCTCGTGTGGACAAAA >gi|2764318|gb|R65380.1|R65380 13884 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170F17T7, mRNA sequence CTCTNCTTTNTTTTGTCAACAAAGAAACATTTCCATTGAGTCTCTCTCAATGTNCTNCTTCTNCTTCTTC TAAGATTAATTCAAAGTGTTTAATACTTTTAAAATTTTAAGTTTCTTTTTGGTCAGTTTCAAATGGGTGA CATCATCGGTCACAAGGATAGGCAAATATGGCCACCCTCTNATCATGTNCTTCAAGATCCATTGTTTGAN CATTCCAACAAACATCAGTTGCAGAAATATGTCAAGNACCACCATCACCACGGCAACGGTGAATTTGGTC GGCCCGGGGCACCTCCTCTTAGGCAAACATTTCCTTTGNNCTNTTATNCANGGCAAAAGCACCCAAGCAA ATTGGGAAAGGG >gi|2764317|gb|R65376.1|R65376 13880 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170A9T7, mRNA sequence TACAACATGGAGTTGTGGCAAACATCCGGACATGCTGACAATTACAAGGATAATATGTTTACNTTTAATA TTGAGAAGCAAGAGTTCGGGCTCAAACCTATGANTTGTCCTGGTCACTGCTTGATATTCCAGCATAGGGT TCGCTCATATAGAGAGTTACCTATGANACTGGCCGACTTTGGAGTGTTACACCGCAATGAGGCAAGTGGA GCACTTAGTGGATTGACTCGTGTCCGACGGTTCCAGCAGGNTGATGCACACATATTCTGTACAACGGGTC AGGTTAAGGGAGAAGTGCAGGGTGTGTTGGAGTTCATTTGNCTACGGGTACAAAGTTTNCGGGGGTTTAC CTNTTGNGNCTAAAACTTTTNAACGGGGGCCCACNGANGTANCCNNTNGGGGTTTTTGGAAACA >gi|2764316|gb|R65374.1|R65374 13878 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170A3T7, mRNA sequence TCCTTCCACTCCATCACACACTCCAACTCCACACACTCCATCACACACGCCAACTCCACACACCCCTCCT TGTAACTNTGGAAGTCCACCTTCCCACCCTTCCACGGCTTCACACCCTTCCACTCCTTCGNACCCAACGG CATCACACCCTCCTTCTGGTGGATATTACTCATCTCCTCCACCAAGAACTCCGGTTGTTGTGACTCCACC ATCACCCATTGTTGATCCAGGGACACCCATCATTGGAGGAAGCCCACCAACTTCTATNATTGACCCAGGG ACTTCTGGNACTNCTTTNATTCCTGGCTCCTNTCTNANCCANTTNANTGGNACATGNGATTTTCTGGGAG AAAACCAACCTACATTGNATATGGGGGTTT >gi|2764315|gb|R65372.1|R65372 13876 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170A21T7, mRNA sequence TTTGTNTTCAGCAGTCAGTGCGCATCCGTAGAGAAAAGTGTGAGAATCTNCCACCATGGGTCGTATGCAC AGTCGAGGAAAGGGTATTTNAGCCTCTGCNTTGCCTTACAAGAGATCGTNTCCAAGCTGGCTCAAGACCA CCTCTNAGGATGTTGATGAATCAATCTGCAAATTTGCCAAAAAGGGATTGACCCCTTCCCAGATTGGTGT NATTCTCCGTNACTCTCACGGTATCCCTCAGGTCAAGAGTGTTACTGGAAGCAAAGATCTTGAGGATACT CAAAGCTCATGGCCTTTGCTCCNTNNAATCCCTGNAGGNTCTTGNACCCATCTATTTAAGAAGGGCTCTT T >gi|2764314|gb|R65367.1|R65367 13871 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170A14T7, mRNA sequence GTTTTCCTTTTCCCCACCGGAAAATCTCCGACTAATCGGCGTGATGAACCCGAAACTGCAAACCGTTAAC CGAATTCGGNTCTTAGAAAAACCGGTTCACCACTCTNTACTCTATCTCCNAGCTGTGTTTCTTTTTATTC CGACTTAAAAAAAGCTTCAAATTTATCCGATTTCGAATCCATTAGAGAAAACACATTTTTTTNTCCNTAA AAGGGNTTTTTTTTTGAGGTTGTGTGTTTATNTCNGGGTCTGTNGCAAAANGTCGGACGNGACCC >gi|2764313|gb|R65363.1|R65363 13867 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169P3T7, mRNA sequence TCANTTGGAATTTGGNTCGTGGGATTTTGGAAATGGCATCGAAACGGATTTTNAAGGAATTGAAGGATCT GCAGAAGGNTCCNCCTACTTCATGTAGCGCAGGACCCGTTGCGGAAGACATGTTTCATTGGCAGGCCACT ATAATGGGTCCATCGGATAGCCCTTATTCTGGAGGAGTTTTTCTTGTAACCATCCATTTCCCNCCAGATT ACCCATTTAAGCCTCCTAAGGTGGCTTTTAGGACGAAGGTGTTCCATCCAAACATTAACAGCAATGGAAG CATCTGCCTCGACATCTTTGAAGGAGCAGTGGAGTCCTGCTCTCACAATTTCCAAGGTGCTGCTATCGAT CTGGTTCNTTTTTTAACGGNTCCAAACCCAGATGGATCCTTTGGNCCCTGNNNTNAGNNNAA >gi|2764312|gb|R65358.1|R65358 13862 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169P13T7, mRNA sequence GGATAATGACAAGTTTGGGTAACAAGAAGANGAGGGATGCAGTTCGTCAAGCATGGATGGGGACTGGTGC ATCACTTAAAAAACTTGAAAGTGAAAAGGGTGTGATTGCAAGATTTGTTATTGGAAGAAGTGCAAATAAA GGGGACAGCATGGNCAAGAGCATTGATACTGAAAATAGTCAAACCGATGACTTCATTATTCTCGATGATG TAGTTGAGGCACCCNNGGAAGCTTCTAAGAAGGTAAAANTGTTCTTTGCCTATNCTGCAGATAGGTGGGA TGCACAGTTTTATGCAAAAGCCATCGACCAATATCTACGTAAATATAAGATGCNCTGGGNACTACGNTTT GCAGGCACATTCTGGAAAACCCCNCGGGGCTTACATCCGGTTGCATTGAAATCAAGGCGAAGGNCTTTNT NAGGNNCCGNACCCACANATTGGGTATTGGNCCCAGAGTTGGTTGGAAATTNCGG >gi|2764311|gb|R84204.1|R84204 16163 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169N24T7, mRNA sequence GGACCTGGCCNGAACTNCCTGGGNCTGCCCACTGTGTCCNGGGAGTTTCACGGATTATCANGTTTCATGA ATAAAAGGACAGCTTATCAAAACAAACCAGCAAAATATACTAATCAGATCTCTCTTGTTAAAGAAGCAAA AAGGCGAATCTAGTTCTAAAGACTCAAAAGGAACTGCTGAAGATGGTCCTAAAAAGAGGGCTGCAAATAG AGCTCTNGACGACAGAAGCTCAGCTAAAAGAGCTGCTAATGCATCTAGACAAGAAGGNTCAAGCAGTCGC ACAGGCGAAAGNGACTTTCAGTCTTTGACCGTTGAGANGCTCCGCGCCATGCTCAAGGNGANGGGCCTTN CAACAAAAGGNNG >gi|2764310|gb|R65343.1|R65343 13847 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169L8T7, mRNA sequence ATCCATTTCTNTTTCTTCTTGACTCTACCATCGTTTCTCTAATCTCCGCAACTATGGCTTCATTTACGAA AACGGTTTTNATCCCTATTGCGCACGGTACGGAGCCTCTAGAAGCGGTGGCGATGATTACCGTGTTGCGT CGAGGTGGTGCTGACGTGACGGTGGCGTCTGTTGAGACTCAGGTTGGCGTTGATGCTTGTAATGGCATCA AGATGGTCGCTGATACTCTNCTCTCTGATATTACCGACTCTNTTTTCGACCTTATTNTGCTCCCCGGAGG CTTTCCCGGTGGCGAGACTCTTAAAAACTGTAAATNCTTNAGGGGNACATGGTCAAGAAACAANACTCTT TGATGGGNCCGACTTTAACGCANNCTAATAATNGTTGGTGGTTCNTGCCCTTTGGCTCTTTGGGTAANTT TGGGGNGTTACTTTGNATGG >gi|2764309|gb|R65337.1|R65337 13841 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169L19T7, mRNA sequence CTCTCTCGATATCATCTAAATCTNTCTCTTGATCTCAATTTCGCAAAATGGCTGACAAGAAGATCAGAAT CGGAATCAACGGTTTCGGAAGAATCGGTCGTTTGGTTGCNAGAGTTGTNCTTCAGAGGGATGATGTTNAG CTCGTCGCTGTTAACGATCCTTTNATCACCACCGAGTACATGNCATACATGTTTAAGTATGANAGTGTTC ACGGTCAGTGGAAGCACCATGNGCTTAAGGTNAAGGNTGACAAAAAT >gi|2764308|gb|R65332.1|R65332 13836 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169K23T7, mRNA sequence GAGAAAGAAAAGAAGAAGCAAAACANAGAGAAAATGGCAGGATTNTTTGATAAACAAGCCGATCTATACC TTNACGCCAGACCTAATTACCCCTCTAANTGGTTCTCGAAGCTCGCTGATCTCACCGATCACCACGGTTT AGCCTGGNATGCTGCCACCGGAAATGGCCAAGCAGCTCTNGCCGTTNCAGAGCATTACGAGAGTTTCGTA GCAACGGNCGTNAGT >gi|2764307|gb|R65331.1|R65331 13835 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169K18T7, mRNA sequence CAGAGAGTTAAGCCTTGAAGACGAAGAGATAACGAATTGGTTGTTGATCACTCGCTTTATAAATCTNTNA GTTTCTTGCTCACACCAACATCTCTCTAAGCTTCTCCTTCTACCAATCTAATTCCTCTCTTCAGCTTCTT GTGTTGTNACGCATACTCGTCGCAGTCTTGAGATATGGCCGCCGCAGTTTCCACCGTCGGTGCCATCAAC AGAGCTCCGTTGAGCTTGAACGGGGTCAGGATCAGGAGCTGTATCAGCCCCAGCTTCAACCTTNNTTNGG AAAGAAAGTTGTAACTGTTTNCGGGATTCGCACAGAGGCACCAAGAAGGTGCAACGGGNTCATTCNAAGG GTGTTGGGCTTTNTTAAAGNNGGGCAAANAAANCCCNTTGGGG >gi|2764306|gb|R65329.1|R65329 13833 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169I3T7, mRNA sequence TTCTCGGGCAACAACTTTACTTGTTCAAGCCCTAAAACCAGTCTTGTTAACCTCAACTATCCTTCCATCA CAGTTCCAAACTTAACATCAAGCAAAGTCACCGTTTCAAGGACTGCCAAAAACGTTGGACGNCCTTCGAT GTATACCGTCAAGGTGAATAACCCACAGGGTGTTTATGTCGCGGTGAAGCCAACGAGCTTGANTTTCACC AAAGTTGGAGAGCAAAANACGTTTAAAGTGNTCCTTGTGAAAAGTAAGGGNAATNTGGNTAAGGGCTATG TGTTTGGGAGNAATTGGTTTNGGTCAGNCAAGGAGCATCGTGTGAGAAGTCCCNTTNGTTGGTGNAGCTC TTACTTTTNAATTTTG >gi|2764305|gb|R65328.1|R65328 13832 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169I20T7, mRNA sequence TTATCACTACTCTAAAAGANTCTNCATCATGGCCTCAGTAACCTCAGCCACCGTTGCAATCCCATCTTTN ACCGGCCTTAAAGCCTCAACCATCAAATCATCCGCCACCGTCAGAATCCAAACTGCTGCTGTTGCATCAC CGAAGCTTACAGTGAAGTCATCTCTAAAGAACTTCGGAGTCGCGGCCGTAGCGGCTGCAGCTTCAATTGC TTTGGCCGGAAACGCCATGGCAATAGAAGTTCTNTTGGGAGGAGGGGNTNGGNCGTTAAGCTTTTTATTC CCAACGNNGTNTCTATAGCTNAAAGGGAGGAGAAGATTGTNTTNAAGAATCAAA >gi|2764304|gb|R65326.1|R65326 13830 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169I15T7, mRNA sequence CAAAAAAAAAAAAAAAAGAGATGGTTCTNCTAGAGAAGCTTTGGGATGATGTTGTGGCTGGACCTNAGCC TGACCGTGGCCTTGGCCGCCTCCGTAAGATCACCACCCAACCCATTAATATCCGAGATATAGGAGAAGGG AGCAGCAGTAAGGTGGTGATGCATAGGTCGTTGACCATGCCGGCGGAGTNAGCCCTGGAACTCCAACGNC TCCAACCACTNCGACGNCGNCACGTAAGGNTANCGTGTNGAGGAGCGTCTTTAAT >gi|2764303|gb|R65323.1|R65323 13827 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169H8T7, mRNA sequence ATGGCCCAAATCCATCCGTNTTCAAAGGCAAAANAGGATCCTGAAGCAGAGGTTGAAGGTCCCTCCAGCT CTTAACCAATTCACCAAGACTCTTGACAAGAATCTTGCTACCAGCCTCTTCAAGGTCCTTNTGAAGTACA GGCCAGAAGACAAAGCTGCCAAGAAGGAGCGTCTTGTAAAGAAGGCCCAAGCTGAAGCTGAGGGAAAGCC TTCTAAGTCTAAGAAGCCCATTGTAGTCAAATACGGCCTCAACCATGTNTCCTNCCTCATTGNGCAGAAC AAGGNCCAACTTGTTGTTATTGCTCATNATGTCGNNCCAATTNAAGTTGGTTNTCTTNGTTTNCCTTGCT >gi|2764302|gb|R65321.1|R65321 13825 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169H21T7, mRNA sequence TTTNTTTCCNTCAAACCATAACAATCTCAATCCCTTATTCCCAGGGCAACGAAAGATTCAAGTAAGTNGC GGTGGTAAGAGTGAGGTGTTGANGAGTGATACAATGGAACCTCATGAAGCAGAAACGTTTGTAAACAAGA GAACCCTTTATNCTCCCATTGAGCCATATAGCAGTGGAAATTTAAAGGTTTCANATGTTCACACTCTCTA CTGGGAGCAATCAGGCAAACCCGATGGNCACCCGGTTGTTTTTNTTCACGGCGGGCCGGGAGGAGGGNCG GCTCCTAGTAATAGGGAGTTNTTNCGTTCCGGAGNTTT >gi|2764301|gb|R65316.1|R65316 13820 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169H14T7, mRNA sequence AAACGAGCAAAAGAAGAAGAGAAACAACAAGAAGTAGTAATGGCTTCCTCTATGCTCTCCTCCGCCGCTG TGGTTACATCCCCGGCTCAGGCCACCATGGTCGCTCCATTCACCGGCTTGAAGTCATCCGCTGCATTCCC GGTCACCCGCAAGACCAACAAGGACATCACTTCCATCGCAAGCAACGGGGGAAGAGTTAGCTGCATGAAG GTGTGGCCACCAATTGGAAAGAAGAAGTTTGAGACTCTATCTTACCTCCCTGACCTTAGTGACGTCGNAT TGGCTAAGGAAGTTGACTACCTTNTTCGCAACAAGTGGNTTCCTTGTNTTGGAATTTCGAGTTAGAGCAC GGGATTTNTTNTTCCCGTTGAGCNCGGGGAANANTCCCCGGTTNNTTAGGNTNNGNCGGGTTCTGGNNAA TTTGG >gi|2764300|gb|R65315.1|R65315 13819 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169H12T7, mRNA sequence GGTACGACAACGAATGGGGTTACAGTTCCCGTGTGGTCGACTTGATCGTCCACATGTCAAAGGCCTAAGC TAAGAAGCAGATCTCGAATGATAGGGAGTGGAAAGTCATCTGTNCATCCCCTTTTATGGTCTGAATTTNT CGTTTTCGAATAAAATTNCTTTGAACTTGGAACTTTTTTTTTTTTNGGTTTTCTTAATTCTCATTCATGT NAGGTGATGGGAGTTTTTAGACCGATGTTTTACTTGGAAGCCCTTTGTTTTTGGCTTTTNATAT >gi|2764299|gb|R65313.1|R65313 13817 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169G18T7, mRNA sequence CCAAGAGATGGCAAGAGTTGTTAAAATCGATTCTNCAGAGTCATGGAATTNNTATGTAAGTCAAGCCAAG AATCAGAATTGTCCCATTGTGGCTCATTTCACTGCATTATGGTGTATTCCTTCTGTNTTTATNAACTCCT TCTTCGAAGAGCTTGCNTTTAACTATAAGGATGCTCTGTTTCTAATAGTTGATGTTGATGAAGTTAAGGA AGTGGCAAGTCAACTAGAGGTAAAGGCGATGCCAACTTTNTTGTNCTTGAAGGATGGTAATNCGATGGCA AACTCGTGGGCGCAAANNCCTCNATGAGATTANTGAAACGGGGTCCGATTGGTTTTCGTTCAGNCCCTCA >gi|2764298|gb|R65311.1|R65311 13815 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169G15T7, mRNA sequence GTTTATGTTTGGNCTGACAGTGAGACTGCAACAAGAGAACCAGCACTTGCTAAAGACTATGANCTGCCGT TNCGGGTGGGGAGGTTTTTCAGATGGGTCAAATGGGTGGGCATTTGATAAAACAACAACACAATGGCAAA AAGTGGTAAATATGTCANATGAGAGATCCCTCTTTTCCTTTNCTTTTTCCCGTCGTCTCTGTTATTTTAA ATNAGTAGTCTCTCAATTTTATAACACGGTGGAAGCTTTTTNTNNGGTCACAANTTT >gi|2764297|gb|R65309.1|R65309 13813 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169E7T7, mRNA sequence TTGAAACCAGCTGGTTTCACGGTGGAGAAGACGCCGGCTAGAGGATTACCGTCGCTCACAAGAGCTCGTC CCTCCTTCAAAATTNTCGCCAGTGGGTCAAGAAGATCAAGACCGACAAGCCCTTCGGAATTAACGGCAGC ATGGACTTGAGGGACGGCGTCGACGCCTCCGGCAGAAAGGGCAAGGGATACGGTGTTTACAAGTACGTCG ACAAGTATGGAGCTAACGTCGATGGATACAGTCCTATTTACAACGAGAACGAGTGGTCAGCGAGTGGTGA CGTGTACAAGGGNGGNGTCAACCGGNATTNGCAATTTTTGGCGGTANCTCNTTNCCGGAATTNTTTTTCC CGGNGGGTGNNTCTTTTTTNTTGTNCCAACAACAAGNNGCTTTTTGCCTCAG >gi|2764296|gb|R65307.1|R65307 13811 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169E5T7, mRNA sequence TCTCGCTGCTTCTCGAATCTCCTGTATCATCTNCTTCTTCTTCAAGTGAAAAATGGCCGATGGTGAGGAT ATTCAGCCACTTGTCTGTGACAATGGAACTNGAATGGTGAAGGCTGGTTTTNCTGGTNATGATGCCCCGA GAGCAGTGTTCCCAAGTATTGTTGGTCGTCCTAGGCACACTGGTGTCATGGTTGGTATGGGTCAGAAAGA TGCTTACGTTGGTGATGAAGCTCAGTCCAAGAGAGGTATCCTCACTCTGAAGTATCCAATCGAACATGGT ATTGTAAGTAACTGGGNTGACATNGAAAAGATATGGCATCACACTTTCTACAAACGNGCTTTCGANTTGC CCNTNAGGGAGCANCCAGGTTCTACTNNNAGAGGNTACCTTTTTAACCNTAAAAGCTTACCAGGG >gi|2764295|gb|R65305.1|R65305 13809 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169E12T7, mRNA sequence CTCTGAACCGGAGACGGCGTCACGGGACGAATCTAATCGCCGGGAAACCGTTTTTTTTTTCTCTCGGAAA ATCGATTTGAATCTCCGGCGATCTGATCGGNATGAGTAACATCGATCTGATTGGNATGAGTAACCGCNAT CTGATCGGNATGAGTAACAGCNAGCTTCTCACCGTCGAGCCTCTCGATCTTCAATTCCCTTTTNAATTGA AGAAGCAGATCTNTTGCTCTCTCTATTTGACGGACAAGACCGACAATAATNTTGCCTTTAAGGTTAAGAC GNCGAATCCGNAAAAGTATTGTNTTAGGCCTAATACTGGNGTTGTCCTCCCGAAGGTCTACTTGNCGAAG TTCTTTTGTCCATGCAAGGCTCAAAAGGAGGCTCTTTNCGANATGCAGNT >gi|2764294|gb|R65299.1|R65299 13803 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169C4T7, mRNA sequence CTAAATACCAAGCTTTTNAATTGATCCATGCNAGATGGGCTATGTNAGGAGCAGCTGGTTTCATCATTCC TGAAGCTTTAAACAAATATGGCGCTAACTGTGGCCCTGAAGCTGTCTGGTTTAAGACTGGTGCTTTNCTT CTNGATGGAAACACATTGAACTACTTTGGCAAGAACATCCCTATNAACCTTGTNCTCGCCGTAGTTNCTG AGGTTGTNCTCCTCGGTGGAGCCGNGTACTACAGAATCACCAACGGNTTGGATTTCGAGGACAAGCT >gi|2764293|gb|R65296.1|R65296 13800 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169C15T7, mRNA sequence CTCTCTATCTCTATCTTCTTCCATTGATCCTTTCCTCTCTCTGGCTTGTTTCAGAGCTCTTCGATCTTCT NCTTGATCGANCTACGNGCCACTGTTTATACCATTCACGATCTAATCCGGTTTCAATTATNACTCACGAA ATCGAAGGAAGATGAGATCGGTTCAAGCACCAGTTGTTTGTCCTGCAATTCGACCAAGACAAGTAGGTGC ATGTNCTTCACTAGTCAACTACACTGGTCTGAAACCTAGAAGCCAATTTTGGGGTAATCGGACAAAAGGT GTCAAGTCTCAGGGCACTNCCACAACAATCACTCTTAGATTGTGCACAAGAGTATCAANGTGTGTTTTCA GCTCTCACTCTGNTGGTAATGGAAGCACTCCTGAAAATTTCAANNGAAATTNNTGGAGGNNTATNTTAAC CNCTNAGTGTAGGTGGGAGNTCTTTGAAGG >gi|2764292|gb|R65289.1|R65289 13793 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168N8T7, mRNA sequence GGAAACCATGTNTGTTTCAGCAATCTTTGGTACCGGAATCGTCACCGTTNCTGCTTCTCCGGTTCTCCGC CAATTTAAAGTTCCAAAATTGGGTAATGGAGGAGGATTAGGGATGGTGATAGAGTGTTCGTCGAGGCCAC AGAAGAAATCGACGGCTCATCACAGGAAGACGAGGCCGAAGAAGACTCAGCCTTGGNACATTAAGAGAAA GCCTACTGTTTACGCTCCTNTTCCTCCTCTTCCGGCGGAATGGAGTCCGTTCACTCTCGCTTCTAACGAC GGTGGTGCTGCCACTGCTGCGGGNGATTTGGTTTCAAGGCGCTGCCTAGTTGGTATNANNTATCTCCTGA TTTGGTTGTAATCTAGTTTTNAGAACTTTTTGTTNGTTGGTTANCTGTGGTTTTTAAAGTTTTTCNTANN TGGTTTTGNTNGTTNGGGNTTNGTTTGGCGTTTAAATTGGGTGAAATAAATGGGCC >gi|2764291|gb|R65288.1|R65288 13792 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168N4T7, mRNA sequence CTAGAGTNCAGCAAAATCCTGGAAGCTATCAAGGCCAACTTCAATGACAAGTACGAGGAGTACAGGAAGA AATGGGGAGGAGGCATAATGGGATCTAAGTNTCAGGCAAAGACCAAGGCAAAGGAAAGANTTATTGCAAA GNAGGCTGCCCAAAGGATGANTTAAGAGGCTAGCTTCTTTTGTTTGTGGTTTGCTCGGATTCGTAAAACT TAATAGAGCTTTTTTTTTAGCTGGTTCTTGAAGTACCTCTTTTTNAGTTGAACCCTTTTATNATGGATGT TTTGCAATTCNTTTGGGACAGTTTCAATGTTATNTCAAGCCTGCCTGGGTC >gi|2764290|gb|R65286.1|R65286 13790 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168N15T7, mRNA sequence AAGNTGCGAGATTGTGGACCCGAGAGCGTACAAAAGCCCGAGAAAAGACAAAGATCGGATTCACAGCTAG AGTCGATGCGAAAATNAGGCATCTAAGGTCGAAACTGAACAAGAAACAGTCAAATCTNTCACATTTTTNA GCTCAAGACGCAATGTCACCGAGATCATTGTAGCCTTGTATAGGGTTTGTNGTTTTNNTACAGGTCCAAT TCTNTGATGCATCANACTTTGGAGACAGGTCTTGAAGCTAATTTTNTTGAGAGTTTATAATAGAGTGAGA TCATGTAAAGAGTAGCCTCTGATGTTTTTCCTACTTGTNGGGTTCGAATNTTCCTTTATCTTTGTACACA TTATACTTANGGGTTTGGNGTATACCTTAGGNCAGAAT >gi|2764289|gb|R65285.1|R65285 13789 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168M24T7, mRNA sequence TGGACCCGTCCTTAAACCCGGACCACGTCCCNNANATGCNACACAAGTTTCCTGACTTGNTCCCTGACCC AAAGGTGGTCCAGTACGTGCNTAACGACCGTGGCACCCCCATGGTGCTAGACAACAATTACTACCGTAAC ATCCTAGNCAACAAGGGTTTGCTCCTTGTGGACCATCAGCTCGCACACGACAAACGAACCAGACCAATCG TTAAGAAGATGGCTAAGGACCAGGCCTACTTTTTCAAGGAGTTCACTAGGGCAATCCAGATCTTATCCGA GAACAACCCCTTGATTGGNTCTAAGGGTGAGATCAGGANGCAATGTAATCTGGCAAACANGNACCNATTG NAGTTGGAAAAAGTGAGAAAGGCCAGGGGGTNTTGGTGTTTTTGAGTTCTNTTGCTTTGGTACGGNCCCA AGNTGGNTTAAAAAATTTCTTTTTAGGTTTAAAAAAG >gi|2764288|gb|R65284.1|R65284 13788 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168L9T7, mRNA sequence ACGAAAAAAATGGCAACCATTTCGAATCTNGCTAATCTTCCCCGCGCCACCTGCGTCGACTCCAAATNTN CTTCCTCTTCCTCCGTCTTACCTAGATCCTTCGTCAATTTCCGCGCTTTGAATGCAAAGCTTTCCTCTTC TNAGCTTTCTCTTCGTTATAACCAACGATCAATACCTTCCCTCTCTGTNAGGTGTTCAGTGTCTGGTGGA AATGGAACTGCTGGAAAGAGANCGACTCTTCATNATCTATATGAGAAGGAAGGTCAGAGTCCTTGGTATG ATAATATTTGCNGTCCACGTCACAGATCTTNTNCCCGNTGATTNNCTCGTGGTGTTAGAGGNGTTACTAG CAACCCTGCG >gi|2764287|gb|R65283.1|R65283 13787 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168L4T7, mRNA sequence ATTACTTCGTCTCTNCCCCTGTAATGGCGCTTCCACACGTAGTCTCTTCACCTTCTTCAACTTCATTATC TCCTTCCTTCAAATCCAAACCACCGTTTNANTCCCTTAGATCTTNATNACCGACGGTTGATAATCGCCGG CGTTGTAAACTCAACAGTTCCTTCCGATGTTCATCTTCTTNATTCTCCGAGAAGCATCACAACGCGAAAT CTCCAAAATCCGATGATATCGTCGAGCTTCCTCTGTTTCCACTCCCACTCGTTCTCTTCCCCGGGAGCAA TNCTTCCTCTTTAGATCTTCGGAATTNCGTTACCGTATCAATGATGCACACGGGTCTTCCAATNTGATTC TACGGNTTNNGGGCGTAGGTTTANTCCGNTTCCGTNTTTGGGNTCCGCCGCAGAAGTAAGGGTTT >gi|2764286|gb|R84201.1|R84201 16160 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168K20T7, mRNA sequence CAATGGCTTCCCCTATCCCCTCTCCCNCTACTATGGTTNCCTCTCCGGCTCAGGCCACTATGGTCGCNCC TTTNAACGGACTTAAGTCCTCCCCTGCCTTCCCAGCCACCNGCAAGGCTAACAACGACATTACTTCCATN ACAAGCAACGGCGGAAGAGTTAACTGCATGCAGGTGTGGCCTCCGATTGGAAAGAAGAAGTTTGAGACTC TNTCTTACCTTCCTGACCTTACCGATTCCNAATTGGCTAAGGAAGTTGANTACCTTATCNGCAACAAGTG GATTCCTTGTGTTGAATTCGAGTTGGAGCACGGTTTTNTGTANCGTNNGCACGGTAACTTAACCCGGATA CTTATGATTGG >gi|2764285|gb|R65281.1|R65281 13785 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168I8T7, mRNA sequence ACCACTGGTTACATTGATTACGATAAGCTTGAAGAGAAGGCGTTGGATTTNAGGCCTAAGTTGCTTATCT NTGGTGGTAGTGCGTATCCTAGGGATTGGAATTACGCTAGATTTAGAGCTATTGCTGATAAGGTTGGAGC TCTTTTCCTTTNTNACATGGCTCACATCAGTGGTCTCGTTGCTGCTCAGGAAGCTGCAAACCCATTTAAG TACTGTAACGTTGTGACAACCACAACCCACAAGAGTTTNNGGGGTCCAAGGGCTGGTATNATTTTTTACA GGAAGGGTCCAAAACCACCANAGAAAGGGTCAACCCNAGNGGTGCAGTCTATNATTTTAAAGGGNCAAAA ATCAACCTTTTNCTNGNTATTCCCC >gi|2764284|gb|R65277.1|R65277 13781 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168I15T7, mRNA sequence GAACCGTCATATTCATTACCAAAAAACGTCGCATTACTCACCCTCCAGGAGTTGGAAAATGGGGAAGTTC TTCTAAGGCTTGCTCACTTATTCGAGGTTGGGGAGGATAGTNAGTACTCAGTTATGGCAAAAGTAGAGCT CAAGAAACTATTCCACAACAAAAAGATAAGGGAAGTAAAGGAGNCAAGTCTTTCCGGGAACCAAGAGAAG GCGGAGATGGAGAAGAGACGGCTAATCTGGAAANTAGAAGGCTCGGCCGGCGGAGGAAGTGANGAGAGGN GAGGCGGGTGGACGCAGAGAAAGCTAGTGGTTTGNNCTTNTTTNCGCTGGANAATTCGNACCCTTTNTTT GNTCCAA >gi|2764283|gb|R65275.1|R65275 13779 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168I10T7, mRNA sequence CTCTCTCGAAGTTCCGTGCGACTNTNTGCTCGAGCAAGATCTCCTACCGATACAATGATTATNTCANAGG CTAACCGCAAAGAAATCTGCAAGTACCTCTTCAAAGAAGGAGTTTNCTTTGCNAAGAAGGATTTNAATCT TGCTAAGCATCCGTTGATCGATGTCCCGAACCTACAAGTNATTAANCTTATGCAGAGTTTCAAATCCAAG GAGTATGTTAGGGAGACATTTGCCTGGATGCATTACTATTGGTTTTTAACCAATGAAGGGATCGANTTCT TNAGAACTTATCTTAATCTNCCATCTTGATGTTGTTCCCTGCTACTTTTNAAGAAGTCAGCTAAGCCTGG NGGGCCGTCCATTTGGTGGCCCACCTGGTGATCGCNAAA >gi|2764282|gb|R65274.1|R65274 13778 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168H9T7, mRNA sequence ACCACCAAAGGNGATGNCTTCCACCGCNTATTCCTAAGANGCNTTGTCCACCTAAACCGCCGAAGATAGA GCACCCACCTCCGGTTCCGGTTTTAAAGCCCCCGCCAAAGATAGAGCACCCACCTCCGGTTCCGGTTTAN AAGCCCCCGCCAAAGATAGAGCACCCACCTCCNGTTCCGGTACACAAGCCACCGAAGAAGNCATGTCCGC >gi|2764281|gb|R65267.1|R65267 13771 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168G5T7, mRNA sequence GTGGAGTCCAGCNTCANATGTGGGCAAGATATGATATGGGTGTGGAGAGGTGTGTAAACTTGGATGGTCT GACAGAGCCACAGATTCTAAAGGCCCTTGAAAACCTTGTNAAATCCGGAGCTACAAAGGCCTAAGTTTGT TTGTTTGTTTGTTTTTCTCTATATGANCCCGAATAAGATTAAACCGCAAAACAATCATTTGACATTTCCT GTCATTCTACTACTTTGTAACTCCGTGGTGTCATATCGCCTTGCATTTNAGTTGGTTTTTTTGTGTAATC CTTGNACCTTGGAATNAAACCATTCCCGTATAATTTGANTCACAGTAAGGAGAAAANTNAACCNNCTCTG TTTTAAACCTTNNGA >gi|2764280|gb|R65266.1|R65266 13770 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168F4T7, mRNA sequence GAAATGGCTTGCACCGTAGATTTCCGGTGCNTTGACGAAGGATTCGGCGGCAAAACCTACAAACGCAAAC NCNAATCTAAAGANCAAGTCGCCGCCGAAGCAATCGCCGATGAAGCTTCCATGGACATCGATGGTGCTCC TCCTGCCGCGAAACGTAGCGCCGTCGCTTCCTCTGAAAATCCAGACAAACCTATTGCTCTAGCTGTCGAG AGACCAACCTACGACGGTGTAATCGCCGGGAAAGTNTNCGGACGGAACTNGAAACAGCCGGCGAACTCAT AGNTCTTCAGGGAGGTTTTTTNNNGAACAGNGAAACCCNGATCTT >gi|2764279|gb|R65263.1|R65263 13767 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168F21T7, mRNA sequence TCAATACTCAAATCTCAATCATCTCTNTTTCTNATCTNCTTCTCCGATATGAAGCTCGCCGCTAGCCTCA ACCGCCTCAGCCCCAAACGTCTCTNCCGTACCAAATCAAAAGCTTCCGTCTCCAGATCTGAGCCTTCTTC CTTCAGCTCCAATGCTTCTNCCTCTTCCTCTGATGGATCTTACGGTAACCTCAAACAAGGTCCAACCGCG ACTCCGATCAGTGTTCTCCCTCAAAACTCCGGCGATTTTNACACTGAGCTTGTTCAAGCTNTTAANCTGA TCGNATCGNNATGCCGACGNTGTTGTTTCCAGAGGG >gi|2764278|gb|R65261.1|R65261 13765 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168F17T7, mRNA sequence TCTAAAGTTTCAATTTTTTTNTCCTGTNCTTTTNATTTTTTTAAAGAATGGCTTCAATTTCTNCAACTTT NCCTTCGCCATTGTAACTCACACAGAGAAAATCCAATCTCACATCGATTCAAAAACTCCCATTTNCTCTA ACTCGAGGTACGAATGANCTTNCTCCATTATCTCTTACTCGAAACCCTAGCAGCATCAGTCTGATGGTGA AAGCTAGTGGAGAAAGCTCAGATTCATCGACTGANCTCGACGTTGTTAGTACGATTNANAATGTTTGGGA TAAGTCTTAAAGATAGGTTAGGTCTNATTGGTTTTGGGGTNTTTCCTGGTATTTGGTAGCNCTTTGGGGG AATCA >gi|2764277|gb|R65259.1|R65259 13763 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168E4T7, mRNA sequence ATTGTCCAGCGATGGTACACCCTTTTNCTTAAGTNCGATCGATCTCGGGAACAGCACGACGGTCTCCCTA ACTNCTTTCAGAAACCGTTCAACAACTGTNCCTGAGTTGGGCTCACTTGGTGCAATATACACTTTCAGTC TCACATGGGCTGAGATCCAGACCTTGACTCCTGCTATTTNAAACCCCTACAGAGTAACCAGCCTGTTTAG GAATCCAAAACAGAAAAATGCTGGGAAGCTTTTNTNACTTTCTGATTTCCTAAGCTTGGCAAAAAACTCC ACCTCTCTCTCCGGTGTTTTNATCAGTGTAGAGNATTGCGGGAATACCTNNANAGAGGAGCAAGGGGTTN GACGGTTTTTAAAAGNGGTTNTTGG >gi|2764276|gb|R65257.1|R65257 13761 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168E2T7, mRNA sequence CCTCACCGAACCCACTTTTCCTTCGACCTAGGATTCAAATTCTAAGTATGACCATGAACAAGTCGCCGTC TTTAGTGGTGGTTGCGGCTACTACTGCGGCAGAGAAGCAGAAGAAGAGGTATCCTGGAGAATCAAAGGGT TTTNTGGAGGAGATGAGGTTTGTGGCTATNAGACTTCATACTAAAGATCAAGCTAAGGAAGGTGAGAAAG AGACTAAATCTATTGAGGAACGTCCTGTTGCTAAATGGGAACCTACTGTTGAAGGTTACTTGAGGTTTCT TGTGGATAGTAAATTGGTTTATNATACNCCTTGACCTGNTTATTCAAGNCTCCAATTTCCCCAAATTTAT TNCCGNGTTNAAGGAACACGGGGCNTNGNAAAANCNGNGGAATTTTCCCCCGGTTTTTGNGGGGTT >gi|2764275|gb|R65253.1|R65253 13757 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168E12T7, mRNA sequence AAGGTGGAATCGTTAGAGCAGAATAGCTCCGGTACTGATGGTGTTGTTCCGGTGGAGAATCGGACGGTTA GAATCCCGACGGTGAACGANAATTGCTTTGAAATGGATTTTACCGGAGGNTCTAAAGGCTTTNCTTATGG AGGTGGTTACAATTNCATCANTCACAGCGTGTCATCATCGTCGATGGAAGTGGGAGTGGTGCCACATGGT GGTTCGGTGGCTGNTGTATCGTATCCTTANGGNGGTCCTGCAACCANTGGAGCTNATNCGGGGGACACAG NGGGGTTGTTCCCCTGACTTCAAC >gi|2764274|gb|R65246.1|R65246 13750 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168C2T7, mRNA sequence GTCGGATCATGGAAGAAGGTGATTGTTTGGAGTCTATAGTAAGTTTNCTTNTTTCTGGTCTCACAGTGGA AGCNCAAGAAAATCCAGCGGCTACATTGTNCAGTCTCTCTGCAGTACACGAGTATAAGAAACGGATAGCG ATTGTGGATCANTGCGTTGAGGCATTAGCGTTGCTGCTTCAAAACGGGACGCCGAGAGGGAAGAAAGATG CGGTTACTGCGTTGTATAACTTATCGACACATCCAGATAACTNCAGTAGGNTGATTGAAGGAGGAGGTGT TGTCTAGTCTTTGTTTGGAGCTTTAAAGAANCGAAGGTGTAGCAGAGNACGCAAGCANGGNNCTTTTGGN CNTTTGT >gi|2764273|gb|R65242.1|R65242 13746 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168B4T7, mRNA sequence AAAATNTCTCTCTGCCAATCTNATCTTCAACCTCTCTCTAACTCTNGTTTTCGATTCTACAATGGCTGAC AAGAAGATTAGGATCGGAATCAACGGATTCGGAAGAATTGGTCGTTTGGTTGCTAGAGTTGTTCTCCAGA GGGACGATGTTNAGCTCGTCGNTGTCAACGACCCCTTCATCACTACTGAGTACATGACCTACATGTTCAA GTACGACAGTGTTCACGGTCAATGGAAACACAATGAACTNAAGATCAAGGNTGAGAAGACCCTTNTTNTT CGGTGAGAAGCCAGTCACTNTTTTCGGCATCAGGANCCCTGNAGGNTATTCCCACTGGGCCGAGGCNTGG >gi|2764272|gb|R65229.1|R65229 13733 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168A14T7, mRNA sequence GATGGGTGCACAATGGAACAGCTTCTNTGGTTGTCCAGTTCCCAAGAGAACCTTCAAGCTCCCTAACTCC ATCTACTATGTCGCCTGATTAAATCTTATTTACTAACAAAACAATAAGATCAGAGTTTCATTCTGATTCT NGAGTCTTTTTTTNCTCTCTCCCTCTTTTNATTTCTGGTTTATATAACCAATTCAAATGCTTATNATCCA TGCATGAACCATGATCATCTTNGTNTTGTTTTTTCCNTCTGTATTACCATTTTGGGCCTTTGTGAAATTN GTTTTGGGCTTTGNTNATATAATCTCCTCTATANACTTTCTCT >gi|2764271|gb|R65225.1|R65225 13729 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167P14T7, mRNA sequence GTNTTTAGACACACACAAAAATGGCTAACCCCAACGAGTGGTNTCAGTTCTACAACAATANCCAAACCTT CTTCACAACTTCTACCACCGCTTCAACCGCTGTTACAACCACCACTGCCGGTGATACCACCTCCATAGAC TCTNGTNTGAGTCCAGAAACTGGCCGTGTAACCAAGCCAACACGTAGAAGGTCCAGAGTCTCACGTAGAG CACCANCAACGCTTNTCAACACCGNCACTTCCAACTTNCGTGCCATGGTTCAGCAATACACTGGTGGGTN CATNCGCTATGGNTTTTTGGGTCCCGG >gi|2764270|gb|R65223.1|R65223 13727 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167G9T7, mRNA sequence ATCAAATATGGCTGGGAGAGCTACGATCCCTGCTCGCAACTCTGCCCTCATCGCAATGATCGCCGATGAG GACACTGTTGTTGGATTTTTNATGGCTGGAGTTGGTAATGTTGACATAAGGAGGAAGACAAATNACCTCA TCGTGGATTCTNAGACAACTGTNAGACAAATTGAGGATGCTTTCAAGGAATTCTCAGCAAGGGATGATAT CGCTATCATTCTTTTAAGCCAATATATCGCCAATATGATCCGGTTCTTGGTGGATAGCTACAACAAGCCA GTTCCTGCAATCTTGGAGATCCCTTNCAAGGACCATCCCTATGATCCTGCTCATNATTCAGGTTCTCTCT CNGTGTCAAGTACCTCCTTTTCCTGCAGAATCTTGTGTCACAGCGGTTAAACCATAATGCATTTTTCAAG CTCTCGGGNGGCCTATATCATTTGGTTTGATTTNGNNAATCNTNGGNCTNTNTCCTTTCGGNCNCCGGAA AA >gi|2764269|gb|R65218.1|R65218 13722 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167F7T7, mRNA sequence GCAACCTTCGATTTTGGTTTATNCGCATCCATCGGAGAGAGAAAACAATCAATAAGCGACCATGTTGGTG TACCAAGATCTTCTNACCGGTGATGAGCTTCTNTNTGACTCTTTCCCTTACAAGGAGATTGANAATGGAA TCCTCTGGGAAGTAGAAGGAAAGTGGGTTACTGTGGGAGCTGTAGATGTTAACATTGGTGCCAATCCATC TNCTGAAGAAGGTGGTGAGGATGAAGGTGTTGATGACTCTNCTCAAAAGGTTGTTGACATTGTCGACACC TTTCAGACTTCAGGAGCANCCANCTTATGNCAANGAAGGGGTTCATCGCTTTANCATTTANGGAAATNCA TTAAGGCTTT >gi|2764268|gb|R65210.1|R65210 13714 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167E3T7, mRNA sequence CTTTTAAATTTCAAACCTTCACATAAAAAAAATACTTTTNAATCCGTGTTTCATTCATCGAATCTTTTTC CGATAACTATGGCTGAGGAAATCAAGAATGTNCCTGAACAGGAGGTGCCAAAGGTAGCAACAGAGGAATC ATCGGCAGAGGTTACAGATCGTGGATTGTNCGATTTCTTGGGAAAGAAGAAAGACGAAACAAAACCAGAG GAGACTCCGATCGCTTCANAGTTTGAGCAGAAGGTTCATATTTNANAGCCGGAGCCAGAGGTTAAACACG NAAGTNTTCTTGAAAAGCNTCACCGAAGCGACAGTTCTTCTAGCTCCTCAAGTGAGGNTGGAAGGTTCAA NNTGGTNTGAAGNGG >gi|2764267|gb|R65207.1|R65207 13711 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167E16T7, mRNA sequence TCCACAGTGTGGGGAGGTCTTCCCTAAGCTTGAATCATTGGAGCATCATCAAGCAGTTCGTCACGCTGTG TCGGAGTTGGGGCCAGAGGATTCAGGGAGAAACATAGTGGACATCATCTTCAAATCTAGCTGGTTACGTA AAGACAGTCCCATCTACAAGATCGAACGGATATTAAAAGTCCACAACACTCAACGAACGATCCAACGGTT TGAAGATTGTCGCGACGCAGTAAGGTCCCATGCACATGCCTCTACCAGAAAAGAGGCTCGGTCCGNCGTC GACGNAAACGGAGCTTCTCCGCTTCCACTGCACCACAGTTTTCTTNCTCCCCTCGGCTCAAGGNGGNTTC NNNCTTNCAATTTNNTTCCGCAATCCCTGNNCTGTCCGNGTTTTNAACCNATTTATCCGG >gi|2764266|gb|R65205.1|R65205 13709 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167D8T7, mRNA sequence CACACATTGTTGATGAAACCCAAACAGAGGTGATCACACTTCAAATTAGGAACTCCGCTGATGGAGGAAT ACTTAAAGATGATCAGAGACAAGTTATGGGTGTNACAGACTCTGGTGAAACTNGCGTGCTTGCGGTTTAT ACTGGTAGTTNCTGGTCTTTCCTGGACTCGAAATGGTCACTTAAGCAAATAAACGCCTCCACTGCAGATA ATCCGCTCTTTGAGATTTTGGGCCCTCGAGTGGTGAAAATTTNNTCGGGGAGAAAGCTGGATTATNNACC AAAACACTTNGCAAACCTTAGAAGTGATCCTAGGAGTTCANTGACNCTTNGTGGNAATTTTTCCAAGGCA ACATTCCANTATTGGNAAAACTTNT >gi|2764265|gb|R65200.1|R65200 13704 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165E11T7, mRNA sequence CATGCTCTCAAACCCGAATTAAATCGACACTTTTAAGTTTTNTTTTTAACAAGTAGAGTTTCCCAAAATA TTGGATATATTNTTTTTNCAAATTTNGGAAAAGAAATGAGTTGCAATGGATGTAGAGTTCTNCGAAAAGG TTGCAGTGAAACATGCATCCTTCGTCCTTGCCTTCAATGGNTCGAATCCNNCGAGTCACAAGGNCACGCC ACCGTCTTCGTCGCTAAATTCTTTGGTCGTGCTGGTCTCATGTNTTTNATCTCCTTCCGTACCTGNCACT CCAACGTCCTGCTTTGGTTTCAGTCGGT >gi|2764264|gb|R65195.1|R65195 13699 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163M9T7, mRNA sequence CTTCATCACAATTTTNCTACGGTCAGAGATTCAAAAGAGTTCTTTCTCTCTATCTTATTCTCCGATCATC ATGATGCAGCAGCCACCACCCGGAGGTATCCTTCCACATCACGNTCCTCCTCCTTCTGCGCAACAACAGT ACGGTTACCAACAACCTTACGGGATTNCTGGAGCTGCTCCACCACCACCACAGATGTGGAATCCTCAAGC GGCGGCGTCGCANTCAGTTCAGCCTACGACCCGCTTGANGNGATCCGGACTCTTTNGATCGGGGACTTAC AGTATTGGNTGGNTGAGNATTTCCTNTTACGGNTTTGNTTTTGCTCATA >gi|2764263|gb|R65192.1|R65192 13696 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163M3T7, mRNA sequence CCAGCCCAGGCACGAAACCTGTTACCAGGTCGCTTTGGCCATCAAAGATGAAGTGGAAGACCTCGAGAAA GGCGGTATTGGAGTCATTCAGATCGATGAAGCCGCACTTAGAGAAGGATTGCCTCTTAGGAAAGCCGAAC ACTCTTTNTACTTGGNCTGGGCTGTTCACTCTTTCAGAATCACCAACTGTGGCGTCCATGACAGNACTNA GNTTNACACTCACATGTGTTACTNAAACTTCANCGNCATNATCCACT >gi|2764262|gb|R65183.1|R65183 13687 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163K21T7, mRNA sequence CTATGGCACTGGAATTGANTCCTTCTCAAAACTGGGAGATTCCATATATTTNCAAGAAGATGGTGCAACT CCAGCTCTTTATGTCACCCAATATATATCAAGCTCACTTGATTGGAAATCTGCTGGTCTTTCAATATCTC AGAAAGTTAATCCTGTTGTGTCGTGGGATCCGTACATGCGTGTNACATTCACTCTTNCTNCTNCCAAAGT GGGAGTGGCGAAGGAGTCGACTNTGAATCTAAGAATTCCTGTTTGGACTAACTCTATAGGTGCCAAAGGT ANTCTTTGAATGGGCGACCCNTAAACGGTACCAACTTCAGGGAAATTTCCTNTCNATCAAANAGAAATTG GAAAATCTTGGTGGTCCAAAGTATCCATTGGGAGNGNTCCNNTTAGGTATCA >gi|2764261|gb|R65175.1|R65175 13679 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163H18T7, mRNA sequence AAGAAAGATCACCATTTTGGGGACTCGATTAGACAGTNTGCAATCCCTTCTTGTNAAGGTTCCTGGCAAG CAGCATGTTTCGGAGAAAGAGATGAATCGTCGCAAGGATATGGTTGGNAATTTAANATCAAAAACAAATC AGGTGGCCTCTGCTTTGAATATNTCAAACTTTGCAAACAGAGACAGCTTGTTTNGAACAGATTTAAAGCC GGATGATGCGNTAAATAGAGTCTCTGGCATGGACAACCAAGNAATTGTNGTATTTNAACGGGCAAGTTAT GAGNGA >gi|2764260|gb|R65171.1|R65171 13675 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163H11T7, mRNA sequence TCTGACTACCTTGGAAAGGGTGTATCTAAGGCTGTTGGCAATGTGAACAACATCATCGGGCCAGCACTTA TTGGAAAGGACCCAACTCAGCAGACTGCTATTGACAACTTCATGGTCCATGAACTTNACGGAACCCAAAA CGAGTGGGGGTGGTGCAAGCAAAAGCTTGGAGCCAATGCNATTTTTGCTGTGTCTCTNGCTGTCTGCAAA GCTGGGGCTGTTGTNAGCGGCATTCCTCTATACAAGCACATTGGCAACCTTGCTGGTAACCCCAAGATTG TNCTACCAGTTCCTGGCTTTCAACGTCATCAATGNGTGGANCCCNATGCNGGAAACAAGCTTGCTAATGC AGGNNNTTTAATGATNCTNCCCTGNTTNGGAAGCTTGCTTCTTTTCAAGG >gi|2764259|gb|R84197.1|R84197 16156 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163G23T7, mRNA sequence GCTTCCCCTGTTTTTTCTTNCGGCCTCCATNGTTCTTTTNAACTCCTTAGCTGCNATATTAAAGTCTAGA CACAATGAGAGGAAGGAGCTACACGCCATCACCACCAAGGGGTTATGGAAGGAGGGGCCGGAGCCCTAGC CCTCGGGGCCGGTTTGGTGGGAGTCGTGACAGTAATCTCCCAACCAGTCTCTTGGTTCGCAACTNACGTN ATGATTGCAGGTAAGAAGACCTCANGAGGCCATTTAAGNAGTTTGGTNCNTGTCAAGGNCATCTACCTTC CTAGGGGNTTTACTATACTTGG >gi|2764258|gb|R65166.1|R65166 13670 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159L5T7, mRNA sequence AAACTATCTCCTATATACAAGGTTGTAAAAACTGTATATGCATCACCTAGTCGTGTTAATTTTCATCTGG ACTCAAAGAAGGAAGTGGAAACAACACCTGCCTACCCAGAAATTTNTTTTGCCGTAGATGATTTTGACTC AACCTTTGATGCTGTGGTTCTGACAGATAAAGATCATTGCTATTGCGTACTACTTAATTCTCACGATGGG GCAGCCTTTCCAAGTGCAACTGTTAAAGATTCGAGTGATTCTAATACGAATGCTGACCCTAGAACTGTGA AAGATTCTAAGGTTACTCTGTTTTCTGGGTTTGNNAGCTATCANNTGGTTCGAGAAGCCTATGACAGGGG NGAGGAATCGGTTTTGGAAGGTCTCCTATCTCTCGGGTCANTATTANCAGGAAAAGCAAGNCAGGNCTTN ATATCGNGAGGNCCAAGGNGGNCCGTTGNCGAAGTTTAAGTAANCTTGTNNCTTG >gi|2764257|gb|R65162.1|R65162 13666 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173E16T7, mRNA sequence CATCAAATCAAAAATCAAACACAGAGAAGAGAAAATGGCCGCAGAAGGAGAAGTTATCGCTTGCCACACC GTTGAAGATTGGACCGAGAAGCTCAAAGCCGCCAACGAATCCAAGAAACTGATTGTGATAGACTTCACTG CAACATGGTGCCCACCTTGCCGTTTCATTGCACCCGTCTTTGCTGACTTAGCCAAGAAGCACCTCGACGT AGNTTTCTTCAAGGTCGATGTTGACGAATTGAACACTGTTGCTGAGGAGTTTAAAGTTCAGGCAATGCCA ACCGTTTATCTTCATGAAAGAAGGAGAGATCAAGGAGACTGTGGTTGGTGCTGCTAAAGAAGGAATCATT TGCCAAATCTCGGNGAAGCCCAAGNCCAGTTTGTTGCCTGCTGCTTTGATTTTGCTTTTTNTCCTCTTAN CCTATTTTTGCTAAAAANATGGTTTGGGGGTTTAAATAAANCCCTTTGTTCGCCCGAGNTTTTCACCTAA ATNGTCCTCTTATGGTGTTGGGGGGNANAATGTTGTGCAAACTTTGTTCCNGGAGTATNNAATTNTCGGC NTGGTATTTT >gi|2764256|gb|R65161.1|R65161 13665 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173E15T7, mRNA sequence AATATTCATTAAGATGGCATCTTCTATAGTCTCTTCCATGTTTCTNTTTCTCCTTCTTCTTCTTGTATTT CCACATATAGATAATGTCCTTGGCGCACGAATGGAACTCCGTGAACTTGGAGAGATAAATNATGCTGATC CACTAGGTTTTACTCGGCCCATTGTCCCCATTCATGTTCCGGGTTTTCCGCCTCGGCGGCCAACTATTCC GCAGTTACCACCATATCGTCCCAGAAGGTGCCCTTTCTGTNATCCTCCTCCTCCCCCAAAGGCTTTCCCA AAAAACTCACCAAGTCACTGATGTCACTATAGCTACGGAATTGCGTCAATAAATGTATGCACGGTAATTT GTTTCATTTTGTGATGTGTGGGGCTCTTTATCTATTATATGCATGTCACGGGGTTTGNAANATTTGCAAA TGTATCATGGATGTGGNNCTTAACCANTAAAATGCATGNGTTTGNNAATTGCAAAATTTGCGGNGNTNAT GAATGANGATTGGGGNCCTTTATTATNAATGNATGGGTTTTNT >gi|2764255|gb|R65155.1|R65155 13659 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173C3T7, mRNA sequence GCACTGAAAACACTTCAGCCCAAACCACCTCCCATGTNTTATCTCAGCCAGGTACGTACACAACTATGGT TCAACAACAACAACAACCTCTGGCTCAACAACCTTTCTTACACCAAGGCGTTCAGTATATCCCTCACCCA TCACAATACATACCAATTTACTCTCATCAGCAACAAAACTACCCTGTTTACGNGATGTCCGTCCCACAAT CTCAGCAGTATATCCCAGCAGGAACTCCCCCGNTCTACCCGNACTCAAAACCCGGCACAAACTCGAGACC TGATAGCTGCCCAGAACGGTTTACCGAGCTGCTCCCCCTNATGGTTATTCAGGNTTCAGNAACAGNNTCA GTACCATGGGTTNNGGTTGNGNTTCNTNAACCATTAG >gi|2764254|gb|R65153.1|R65153 13657 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173C23T7, mRNA sequence AAAGGTTTGAGTGAAGATGTCTTCAGATCGGAAGGTTCTAAGTTTTGAAGAAGTTTCAAAGCACAACAAA ACTAAGGATTGTNGGCTNATNATTTCCGGCAAGGTGTATGATGTGACNCCATTCATGGATGATCATCCTG GAGGCGATGAAGTCTTGTNGTCCTCAACAGGGAAAGATGCTACAAATNATTTTAAAGACGTTGGTCACAG CGACACTGCAAGGGACATGATGGACAAATATTTCATTGGTGAGATTGATTCGTCTAGTGTTCCAGCAACT AGGGCATACGTTGCACCNCAGNAACCAGCCTTCAACCAAGGCAAGGCACCTGNTTCATTTTCAAGATTTT TCCAGTCCCTTTGTTCCGATCTTTNTCCTTGGGATTGGGTTCTTTTCGGCCCGNNACTTTTTCNTGGANG GNTTGNAGGAGGCNAAAG >gi|2764253|gb|R65148.1|R65148 13652 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173C12T7, mRNA sequence AAAAACTCCACCATCTGANTTCAAATGTCCCGCTTAATCGATGTAGAACGTTGAGAGTCTCTGGACGACT CCAAAAGTTTCGTTTCTTCAAGAAATTTGTTAGTTTCATGATCTATTTGGTAATGGGAGGTTAATCTGCA TATGTNCGACCTTTAGTTACATGTTTCATTTGATACAATAAAAGGCGTTGTAATTTGGGTTTGAGATCTC AATTTCTTTGGGTTTNCTTGTTATGTTGTACTTTTAAGAAGAAGAAAAAAAAACTGTTAAACGG >gi|2764252|gb|R65147.1|R65147 13651 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173C11T7, mRNA sequence GATCAAGAGAAGANGAAGAGACGCGAAGATGAGTAATAAGATGCGTAANNAGCAGCAACTCGTACCTAAT TGTCACAAGACGGACAAGGTTTCGGTTCTCGACAAGACCATAGAGTATATGAAAAACCTTCAACTTCAAC TTCAGATGATGTCAACAGTGGGGGTGANTCCTTATTTTCTTCCGGCGACATTAGGATTTGGAATGCACAA CCACATGCTGACGGCAATGGCTTCGGCTCACGGCCTAAATCCGGCGAATCACATGATGCCATCGNCGCTA ATTCCGGGCGTTAAAAATGGCCATTACCACCGTTTACTAAATATTTCATTCCCNCATTCATCTAGTCAAN CTCTATTTTCTTACAACATCATCAACCAGCTTTCTTCTCCTCAGNNGTTTTCACGGNTTTGGNTNCNTTA TTTNCCAAAGGTTTCTTTGGTTTTTNTTNCCNNTGCG >gi|2764251|gb|R65142.1|R65142 13646 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173B22T7, mRNA sequence GGAGATGGTCTAGCCATGGACCTGATCGATAAATTCTCAACCACTGTCAGAGGCGTGCTTCCTCTGTTCA GTACAGATACAGACAGTTTAATAGAGAGGTTCAAGGGAACGACCCTCGAAGCATATGGTTCTTCAGCTAA GTCGAGGCTTCCGTTGCCTCCAACATCAGGCCAGTGGAATGGCATGGAGCCAAACACACTCTTACGTGTT TTGTGTTACCGTAACGACGAATCTGCCACGAGGTTTCTCAAGAAGNCATATAATCTACCTAAGAAGCTTT AGTAAACTTACGGGCTACTACTGCAACGTATAATAACCTCACAAGATGAAGAGTGTGTGTTCCACTTTGC AGGAGGGNAGCCTCCGAGNATTTTGATTAGTGAGTTTCAANTTTTTTTTGGTTTTAATGGGTTTTTTTTC TAAAAACAATNCCTATANGGNCTTTTAAAATCCNTTTTTTTC >gi|2764250|gb|R84196.1|R84196 16155 Lambda-PRL2 Arabidopsis thaliana cDNA clone 173A24T7, mRNA sequence GGTAAACGGATNTTTTTGGTNCNTCGNACCGTAAGCTTAGACGACATAAAGCTAATCAAGAATACCATGA AGATGACTGTCAACGATGTAGTACTTGGAGTCAGTCAGGCTGGCCTCTCGCAATATTTGGACAGAAGATA TGGAGAAAAGAAGAAGAAGGTAGGAGAAGATCAAGATTCTAAAAGGAAAGCCACTGATATNCCTAANCGN ATAAGGCTACGATCAGCTCTACTTGTTAACTTAAGACCCAACACTGGAATCCAGGNTCTAGCTGATATNA TGGCTAAAGGTTCTACGTGTNGATNGGGGAAATTTGGTTCGGCTNACAATTGTCTTTTCCCNTTTTCCTA TTCGGGATTAACGGNGACGGTCCCNTTACAACAT >gi|2764249|gb|R65132.1|R65132 13636 Lambda-PRL2 Arabidopsis thaliana cDNA clone 172A5T7, mRNA sequence TCCTCACTCCTCAGCTCCTCAAATCAGAATGANTCAATCCGCGCAAAATTACTTTNCCGTGCAAAAACCT TCAGAGACTTCATCAGGGCCGTACACAAGTCCGCCACCAATTGGTTATCCGACTAGAGATGCGGTGGTGG GTGATCCTCCGGCAGCAGCAGTGGAGACAAACTCCAAGGGCGTCAACCTCGAAGGCATAATGAGTTGTAT CTTCTGCTGCGGCCTATGCTCCAGCTTCTGTGAGTAAATCAGCATGATGAGACAGAAGTCGTTGCCCAAA CCTGAAAAACAACACGTGGTTAGAAAAATCTTTATATATATATATATATNTATNTATTTTTTTNTTAGGG NGGCGGTTTNNTNTGGGGTTTTCCCCNGNTTTTAAAAGGTTNTNTTNNTTCCCCNGTTTAAAAAGG >gi|2764248|gb|R65130.1|R65130 13634 Lambda-PRL2 Arabidopsis thaliana cDNA clone 172A2T7, mRNA sequence TTTCTTTTGATCCTCTCTAATTTCCTTGTTGATTCATCGACTAGATCTAATTCTNCTCACAAAAGACTGA GTGTGTTCTTNCTTTCAAATCTTTCAAAAACNAGGGTTTTTACTGTCTTGAAATCATATTTATNCTTCTA AATTTAGCAAAAAGAACACGATTTACTTTCCATTTCAGTCGTCTTGTCACNCTCTCTCTCTTCTTTAAAG TCTCCCTTTTTAGCAAAAATNCTCTCTCTCACAAAATTTATTTCCNCTGGCTTCTTCTTCCNCCTCCTCC ATCTCTNCTCTTTACTCTCTCTTTAATCATCNCTCATTCTTGAATCTTGATCCATCAAAATCAAATCCCG GTTCTGGNAAGNNCCNTTTAAAAATCAAAACCTAAGGTCTCTCCTCTGGGCTTCTAGGGGTTTTTTTNGT NCGGTGGTGATGGNGGGGGGAAAGNTTCAG >gi|2764247|gb|R65127.1|R65127 13631 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171P5T7, mRNA sequence CAGNAGAGAGAACGTAGCAAAACAGGGCTTACCGGAGCAGAACGGAAAAACCCATTTCGAAGCTGGAGAT GATCGTNCTAAGGAGTACGTCAGTCTCTTGAAATCGAACGATCCAATTGGATTCAACATTGTTGATGTTC TTGCTTGGGGTTCTATTGGACACATCGTTGCTTACTACATCTTGGCTACTTCCAGCAATGGATACGACCC AAGCTTCTTTGGATGATTCGTTTCAATGTCAATCTCTCGTATATGTATATGTATATGTTTGACTTGTGTT GCAAGCTATCTAATCTGTNCTCTATCTCTGTTTCTCCCTTCTNGTNGTTGGTTGTTGGTTGNCCTAAGGC TTNGTCCCCCCTTTTTTGCAAAANGTTTTTNTTTCTNCCCTTTTCAAAAGNTTNGGTTTCCAGGGTTTTT NAAG >gi|2764246|gb|R65117.1|R65117 13621 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171N2T7, mRNA sequence TNTCGATCCATTTCCAATTCCACTGTCGACTTCTTAGTCGAGCGTCTTTACAAATGTAACATCCTCTCCT GATCAACAATTCCACTGTCGACCTCTCCACTTATAATGTAAGGNATTTAAGTCCGTCCAAGTTCGTTTAT CAAGTGTCAACTCTTTTTNAGGCTCTGTNATCTACGCGTCCCTCTCGCTAGGCTCGGTACCCGGTTTTCC TTCTTTTTTCCAAGCAGTTCGCTTCCGGTTTCTTTTTTTCCAGTCAATGGTTTTTTTGCGGGGTTTCCTT TTNATCAAGGGAACTCTAACTTATCTCGAAATCGGNAGGTTGTGTGTTGCTTTGAGAATATATTTANCGG GGNATACGGGGATTTTAAGGGGTTATCAACNCCCNGTTTTTTGCNGCTTTGGGGGTTTTAAGGGGCCCNN TTTTTCTTTNAAANCCCCNGGGGGNTT >gi|2764245|gb|R65115.1|R65115 13619 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171M9T7, mRNA sequence GAAAAACATGGAGCAAACTTTTATTATGATCAAGCCTGACGGCGTCCAGAGAGGACTCATCGGTGAAGTC ATCTNCAGATTTGAGAAGAAGGGTTTCACTTTGAAAGGTCTGAAGTTGATCAGTGTAGAGAGATCTTTTG CTGAGAAGCACTACGNNGACTTATCTTCAAAGTCTTTCTTCAGTGGACTTNTTGACTACANTGTATCCGG CCCTNTTGTTGCTATGATCTNGGAAGGNAAGAAATNTTGTCTTGACCNGAAGAAAAT >gi|2764244|gb|R65114.1|R65114 13618 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171M2T7, mRNA sequence AGACAAGAGTTTTCTCAGGTTTCTATCTCTNTNGTCAAACACAACGGAAGNCATTGAAACTGAGNGAAAT GGCTCTTAAGNCATTGCAAGCTCTGATCTTTCTTGGTCTATTTGCCGCCTCATGTCTAGCTCAAGCTCCG GCTCCGGCACCTATCACGTTTNTCCCTCCGGTAGNGTCTCCTTCTCCAGTTGTTACACCAACTGNAG >gi|2764243|gb|R65111.1|R65111 13615 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171M19T7, mRNA sequence ATGGAGCTCTTGAACACGAAAAAGTTTCAGTCTTTCAGGTATATAAGAGAGGAAGAGAATGACTTGTTGA TCAAGAAACTAACCGAATCCGCTCTGAAAAAATCACCGGTGAATCTGAAGAAGACCCTTTTCACGCTAGT CGCGAGTATCGTGTGTAGGCTCGCGTTCGGGGTGAATATCCACAAGTGCGAGTTCGTAGACGAGGACAAC GTTGCTGATCTAGTTAACAAGTTTGAGATGCTAGTCGCTGGTGTTGCCTTCACTGATTTCTTCCCTGGAG TGGGTTGGCTTTTAGNCCCGAATTCTNAAGGTCAGNANCANTGNCACTTATNCAANTGTTTTTNTTTAGG AACCTTTNANNAATTTTTTTTCCCAAAAACGGGGCCCCGGTNGNCCAAATTTTANCCTNGGGGGCCAAAG TTTTTNGGGAACCCCGA >gi|2764242|gb|R65108.1|R65108 13612 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171M16T7, mRNA sequence AGCAAAAGAAGAAGAGAAACAACAAGAAGTAGTAATGGCTTCCTCTATGCTCTCCTCCGCCGCTGTGGTT ACATCCCCGGCTCAGGCCACCATGGTCGCTCCATTCACCGGCTTGAAGTCATCCGCTGCATTCCCGGTCA CCCGCAAGACCAACAAGGNCATCACTTCCATNGCAAGCAACGGGGGAAGAGTTAGCTGCATGAAGGTGTG GCCACCAATTGGAAAGAAGNAGTTTNAGNCTCTATCTTACCTTCCTGACCTTAGTNANGGCGGAATTGNT NAAGGGAGTTGACTNACCTTTTTCCGNAAACAAGTGGGGTTTCCTTGTTTTTTGAATTCGNGTTAGGAGC ACGGGTTTTTTTNTTNCCNTTAGGC >gi|2764241|gb|R65106.1|R65106 13610 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171M10T7, mRNA sequence GAAAAACATGGAGCAAACTTTTATTATGATCAAGCCTGACGGCGTCCAGAGAGGACTCATCGGTGAAGTC ATCTGCAGATTTGAGAAGAAGGGTTTCACTTTGAAAGGTCTGAAGTTGATCAGTGTAGAGAGATCTTTTG CTGAGAAGCACTACGAAGACTTATCTTCAAAGTCTTTCTTCAGTGGACTTGTTGACTACATTGTATCCGG CCCTGTTGTTGCTATGATCTGGGAAGGAAAGAATGTTGTCTTGACCGGAAGGAAGGTCCATTGGGGGTTA CCAACCCAGCAAGNTTCTTGAGGCCTGGGAACTATTCCGTGGGGNNNTTNNTATTTGACAATTGGGAAGG GAATNTGNTNCCCCGGGTAGGNNNCTNNTTTTNG >gi|2764240|gb|R65103.1|R65103 13607 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171L5T7, mRNA sequence CAACGAAGTAAGAAAAATGGTGAAGGTGATGTGGGTTTCCNTTTTAGCTCTGGCGGCGGCGATTCTCCTT TTNACGGTCCCGGTGGCAGAAGGGGTGACGTGCTCGCCTATGCAGCTGGCTTCATGTGCGGCGGCGATGA CGTCATCTTCGCCGCCATCGGAGGCGTGTTGCACAAAGCTGAGAGAGCAGCAGCCATGCCTTTTTGGGTA CATGAGGAACCCTACCCTCCGCCAATACGTTAGCTCCCCTAACGCAAGGAAAGTNTCCAACAGTTGCAAG ATTCCTTCCCCAAGCTGTTAAGGAAATGTTAATCATGNTTAATTAGTGACAAGNTTTCCGCTGATTATAA GTGGTTAATGCTGGGCCTTATNTTTGGNCAGTACTNNTTTAAAATAATTAAATGNGTTNNTGATGNTTGG TGGTTNTCANCCACNANGCTTT >gi|2764239|gb|R65101.1|R65101 13605 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171L15T7, mRNA sequence CTCTTCTCCCTCCGCCTCAATCGCACGAAGACGATAATCGAATATGGCGGAACTAAAGCTATCAGAGAGT CGGGACTTAACCAGAGTCGAGCGAATCGGCGCACACTCACACATCAGAGGACTAGGTCTCGACTCTGCCC TCGAGCCGCGAGCTGTTTCCGAAGTATGGTCGGTCAAGTGAAGGCGCGTAAAGCCGCCGGTGTAATCCTT CAGATGATTAGAGAAGGGAAAATCGCGGGTCGGGCTATTCTAATAGCGGGTCAACCCGGAACGGTATAGA CAGCGATTNCAATGGGTATGGCGAAATCTCTTGGCTTGGAAACTCCTTTTTNCGATGNTTTNCAAGGAAG TGGAAATTTTCTCAATTAGNGGTGTCAAAAGNCCAGNANGNTTTGNCTNAAGCTTTTNGTAAAAGCGATT TGGTGNTNAGGNTCAAAGGAAGGGGCCAGTGGTTNTTTAAAGGNGAANTTTTTTNGGTTCAAATTTT >gi|2764238|gb|R65099.1|R65099 13603 Lambda-PRL2 Arabidopsis thaliana cDNA clone 171L11T7, mRNA sequence TCGGAAGGATGATAACGTCGTCCCTAACCTCATCTCTGCAAGCNCTCAAGCTTTCGTNTCCGTTCGCCCA TGGCTCCACTCCTCTNTCATCTCTCTCTAAGCCCAATTCCTTCCCGAACCACAGAATGCCCGCTTTAGTT CCGGTCATCAGAGCCATGAAAACGATGCAGGGGCGCGTGGTGTGCGCAACCAGTGACAAGACTGTGGCGG TGGAGGTGGTGAGGCTGGCTCCCCACCCCAAGTACAAGAGGCGCGTTAGGATGAAGNAGNAGTACCAAGG TNAAGNCCCCGATAATNAGTTCAAGGTTNGNGGACNTTGGNNAAAA >gi|2764237|gb|R65091.1|R65091 13595 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170N7T7, mRNA sequence GATAAGTGTTACAAGATCTTGGGGTATTTTAATTGTACGCGTAGACTCAGCGACTCTCTCCAGGAAGGTT ACTACCAAGCTGCGATCTACGAGTGTGCATCGCAGGCGTTCAAATTTATTGATACCCCTAACCCTTTCAA CCTGTGGCCCAACAAGGNTCCTTTGTCCGTGAACGGGAATCTTTATTGGCTTGCTCATAACCACCCTGAG ACTCTTGAGTATTTCATCGAAACCTTTGATTTCTCCATGGAGATTTTCAAACCCTTTTGTCTACTGCCGT GTCGGAAGGACTTTGGTAGCAATGAACTTGTCCTGGNGGTTTTTAAGGAAGATCGGTTTNCAATTNTTAA AGCANTGNTTTGGAANAACGGNGGTTTTGAGATTTTGGGTAACAAAGGTTGAANGTTTCTNGNNAGGGGG AANTTGGNTTTGGNAAAANGTTTTTTACATTTNCGNAACCCAA >gi|2764236|gb|R65082.1|R65082 13586 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170J8T7, mRNA sequence GATTATGCTGGCAGTGATCTGTATGACTACAAGGGTTTTGGTGTTGAAGATTCANATGCTGAGTCTCCTA GAGATATCCATTGTNCAGTCGAGAGTACAGACTTTNCCGCTAGAGTGAAAAAACATATTGAAGAACCTAT TAAAGATATAGAAGTTTCTAGCGTTTCACCTACTGAAAACTGTTATCAATCAGGGAGAGAGGCTATACCC TCAGTTACTCCCAGTACTCCTCTCACGGCCCTTAGATACACAACATCAGCTGNGAAACCTGCAAGTAAAA CTACTGGCTCATCAACAGTAAATTCGAAGCGTTCTTCGGNCNTGGGGNAGNNGGAACGGCAAGAAAACAC CTGCTAAAGGTTCCATTTGATTNCCTCAGGNAATTNNCGGNGCTTNTTNT >gi|2764235|gb|R65078.1|R65078 13582 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170J22T7, mRNA sequence TCCGTNTCATTTCGAGTGGCAAAACTTGTTAGCGGAGGCTGCTAAACAAGGATATACAGACGAAGAAGAG CTTCANTGGGATTNTTACAACATCTTGGNTCAACAGANTCAACTGGAATGGCTGGAAAGTTTTGAGCAGA GGAAAGCCATTAAAGGAGCTAAAAGTAACAGAAGAGCGCCAAAATCTCCTGANCAAAGAAGGAGAATTGC AGAAGCAATAGCTGCTAAATGGGCTGNTCCATCTTACCGTGAAAGANTTTNCTCCGGCTTGGCAAAATAT CACGGTATACCTTTTGGTNTCGAGAAGGCGTCGTAGNAAGNCCAAGGGAGCGGTTNCAGAACCCTTGAAA GAAGGCCTCCTCCAANGAAAAGTTCCANGGGGTTTCAGGG >gi|2764234|gb|R65068.1|R65068 13572 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170I4T7, mRNA sequence TNTTGCTACTAAACCTAAAGACTCTCGCGGAAGCAGCAGCGATGAGATGATGATGAATGANCTGGATGAG ATAATATTTGGTGAGAATAGTTTGGGTCATTCTTCATCTGCCTCTGGAAATNATCAGAAGAAGCAGAAAT CGTCTAAAAACAATGAGCTCATTCACTTGTNAGATGTGTTTTGTTTTNNTTAGTGGATTTGGATTGGTGT TTAGTCTTTGGGAATATGCATCAACAGTTGTTATGTAAGTAAACTAAAATTAGCAGCCTTGTGGGATTGA AATATATTTNGGGTGTAACCTGTATATTTCNCTGCTC >gi|2764233|gb|R65067.1|R65067 13571 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170I2T7, mRNA sequence GTCTAATGGGTCATGCTAAACGTCTGCTTCACGAGTTAAAGCTCCCGGATAATATTCCTCGGGAAACCGC TATCACCATTCTGGCTAAAGCTGGGAGAACGGAAGAGGCGACATGGGTTTTNCGTCAAGCCTTTGAATCC GGGGAGGTAAAAGACATATCAGTATTTGGCTGTATGATCAATCTTTACTCAAGAAACCAAAGATACGTAA ATNTCATCGAAGTGTTTGAGAAAATNAGAACCGCTGGTTACTTTCCGGATTCGAATGTNATAGCTATGGT GTTGAACGCGTACGGGAAACAAAGAGAGTTTGAAAAAGCAGACACGGTTTACAGAGAAATGCAAGAGGAA GGATGTGTTTTCCCTGATGAAGTTCATTTCCAAATGCCTGAGGTTTATACCTCATCCNAGGAAAGATTTT TAAGATNGTTGAGTCCGTTGTTTTCAGAGGTTAGGATCCTNANCCNAATGNCAATAGCAAGGGGTTCCAT TTGGGTTNTGGCGGCTTTNTNTTGAGNGNCNGGTAACTNACCGNTCCTCAAGGGCNNTNATCGGGTNAGG GCCCGGGGGTNTTAA >gi|2764232|gb|R65061.1|R65061 13565 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170H7T7, mRNA sequence TGAGAAATCGCATAAACATTCGATTAAAGCAACTNATAATCATCACAAGCTAATATTTNTCCCTTCCAAG AAAGTNTCAGATGAGTCTNACTCACTAGAGAAGAGTGGTTTGACAGATGANCTTGAGGAACCTCAAAAAC ACCTTGGATATTTNTTTGATGGAAGTCAGAATAGTAAGANGAGGATTAGAGATGATTCTCCTCCGGCTGT TGAAAGTNTCATCAAAGCTGCACCTGTAGCAGGTAAACCTCTACGGGNTTAGAATGGTCTTCAAAAAACC AAAGGAGGAAGTTCCTACTCTNCCTAGAGNGGCTGTTTGTTTGCCCCACTACAGTTGCAAAGTCGNTCAG TTACCCAGGTTGTCATANCAGGTNCTTTCTNAAGGT >gi|2764231|gb|R65056.1|R65056 13560 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170H21T7, mRNA sequence CTTACCCCTCTTGGTGACGCTTGTNCACGACTTGATCTCACAGCAATACATGAAATTNTCGAAAAGGTTG GATACAAAGATGACGAGGGTGTAGCAAATGAGCTCTCGTTCCAAGTGTGGACCGACCATATTCAGGAGAC TCTAAACTCCAAGAAACAAGGAGATGCTGCGTTCAAAGGCAAAGACTTTGTCACTGCTGTTGAATGTTAC ACGCAGTTCATCGAAGATGGCACAATGGTATCGCCAACAGTTTTTGCAAGGAGGTGTTTGTGTTATCTGA TGAGCAATATNCCTCAAGAGGCTCTTGGTGATGCAATGCAGGCGCAAGTAGTGTNTCCTGAATGGNCCAA CGGNTTTTTTTTCTTAAGGCNGTTGTTCTNTTCAGCCTTGGAATGGTAAAANNGCCTTTNAACCCTAAAA NTGGACTTCCTTGNAGCNAGGACCTTNCNNCAGGANCT >gi|2764230|gb|R65054.1|R65054 13558 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170H19T7, mRNA sequence CGGTTACATGAGAGCGTCTGTTGATACAGAGGTGTTCTTGAGAGGGAAGAAGCAGATTGAAACATTCAAT GATCTTACCAATGACTGTAGAGATGGAATCGGCACTTGCAGCGTANAGCAAGCTGATCGCNCTGGTAAGT ATTTCAAAAGCTTGTTATCAGAGNCAGTTGTTTGTTTGTAGGTTGATAGAAAACTTGAACCGTCTTGTTC CACTTGTTTCCACTTTGGTACCTATAGAATAGCTGTTTGTATGTTC >gi|2764229|gb|R65052.1|R65052 13556 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170H16T7, mRNA sequence TGAANCTCAAAAACTCATTCANTGAGAAAAATGGAGACCCTTCTTTCCCCTCGTNCGCTCTCTCCTCCTC TCAATCCCAAACCTTTGTCCCTTCACCAGACCAAACCCACTTCACATTCATTGTNTCTNTCAAAACCCAC CACCTTCTCCGGTCCTAAACACCTCTCCACCCGGTTCACTAAACCGGAATCAAGAAACTGGTTAATAGAT GCAAAGCAAGGACTAGCTGCTTTAGCTTTATCTCTAACTCTNACTTTCTCACCTGTNGGCACNTGCTTTA GCNTCTGAGTTCAATATCCTCAACGGTGGTCCACCTAAAGGANATTTTCGTNGTNGNTGNCGGTGGTGTT CTTAGGTCGGGT >gi|2764228|gb|R65051.1|R65051 13555 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170H15T7, mRNA sequence CGAGTTGGAGCACGGATTTNTGTACCGTGAGCACGGTAACTNACCCGGATACTATNATGGACGGTACTGG ACAATGTGGAAGCTTCCNTTGTNCGGTTGCACCGACTCCNCTCAAGTNTTGAAGGAAGTGGAAGAGTGCA AGAAGGAGTACCCCAATGCNTTCATTAGGATCATCGGATTCGACAACACCCGTCAAGTCCAGTGCATCAN TTTCATTGCCTACAAGCCACCAAGCTTCACCGGTTAATTTCCCTTTNCTTTTGT >gi|2764227|gb|R65046.1|R65046 13550 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170G24T7, mRNA sequence ATAGCGATAGGCTGNACATGGTTTCTCATTGATTTTTGTTTGACAATCCTTTCTTTNCTTTTTTTTTGTN CTTTCGAAAAACGAAAATTTTCGTTGGTTCCCTCCGATTTGGCCTGCTGGTGAAGATATGGCCGGAGCTA AAGATTCGGGTTGCGATGATGATCTCCGAATTGCTGGTGGATGTNACCCTGGAAAACGCGGGAACCCGGA GGATTCCTCGTCTCCTGTCGAAGTCTCGTGCTCGATTTGCCTCGAATCGGTGCTCGATGATGGTACCAGA TCCAAGGCTAAGCTCCAATGTGGTCANCAGTTCCATTTGGATTGCATTGGATCAGCATTTAANATGAAAG GNGCCATGNAATCCCTAACTGTNGGAATNTCGAAAAGGGTNAGTGGTTTNTTNAAAGGGTNTTATTGGCC CTTTCCAGAGTTTCCATGGGAGGTTGNTCCCNTAANANGCTTTNCGGTTAAGGTT >gi|2764226|gb|R65045.1|R65045 13549 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170G23T7, mRNA sequence TGTGCTTAAGGCTGATGCTAAAGCCAGAGGAGAGACTATCAGCACCAAGAGACAGCCTAAAGGTCCTAAA CCGGGTTTCATGGTCGAAGGTATGACATTGGAGACTGTCACTCCCATTCCTTACGATGTTGTCAACGATC TCAAGGGTGGTTATTGAGTTGTTTCCATTTTTTNATCATTCTCTACTCAGAATTTTTGCACTTNCTTTTT TAATGATGTTTTTGTATCAAACAAGAGTGAATTCTATATGGTATGAGTTCATATTTTGTNAGGAAAGATG GTTTATCCCNATC >gi|2764225|gb|R65044.1|R65044 13548 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170G22T7, mRNA sequence AAGGTGTTCCTAGCACAGCAATCAGAGAAATCTCCCTCTTGAAAGAAATGCAGCATAGCAACATTGTCAA ATTGCAGGATGTGGTGCACAGCGAGAAACGTTTGTATCTGGTTTTTNAGTATCTTGACTTGGATCTCAAA AAGCACATGGATTCTACTCCTGATTTCTCCAAGGNTCTACATATGANCAAAACATATCTTTACCAGATTC TCCGTGGAATTGCGTATTGCCACTCTCATAGGGTTCTCCATCGTNATCTGAAGNCACAGAATTTTTTTGN TTGATCCGCGGGACAAACTCACTGGAGNTTTNCTGATTTTGGGCCTTGGCNCAGGAATTTNGGANTCCCT TTCAAGGGCCNTTTCCCNNTGGGGGTTTTAAACTCTTNGG >gi|2764224|gb|R65034.1|R65034 13538 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170E23T7, mRNA sequence GCAAACCCTAAAAAGAGAGAGAAACATAAAAATCTCCATTGAAACAGATTGGATTGAGCAAGAGAAAGAG ATCATGTATTTNTAAAAAGAGAGAGAAATCCTCTNATCTCCTCTCTNATTCGNTCGANATCGCATCATTT CCCTAATGATTTCAAAAACCTAAAACGATCTCTNCTTTTTTTNCGCTTCGNTCTCCATTGAAAAGGATGA TTTCAAATCCAACTTTATTATCGTACACTTGCATTGCGAAAGGAACCGTAGTTCTCGCGGAGTTCGTTTC AAGGCAAGAGCCAGGAATCGAAGCTATAGCTTTACGNTGCATCGNGGACCACGGCTCCTCATCATTCAAT GNTTTCTCATACAGTTCACAAGGNGGCGGTTTNCATTCGGAATCGCGGTNGATTCCTTTGGTTAANTCCC GGNTTCCTGTGGATNCCT >gi|2764223|gb|R65028.1|R65028 13532 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170D8T7, mRNA sequence AANTCGGTGAAAATNAACGTGTCGTGGCTAAAGACAGCGGTAACGGAACTGGCGGAGGCGGTGGAGTATT TCGGGCAGTACGACACGNCGAAGGTGGAGAAAGAGGTGTGCNAGAAANATCTGACGGCGAAAAAGGGGGA GATGGAGGAGATGACGGCGGACTGGTGAAGAGGGAGAAGGAAATCAAAGANTGCAGAGAGAAGGTNACGG TGGTCGCAGGGAGGCTAGGGCAGCTGGAGATGAAAGGTTCGAAATTNAACAAGAATCTCGACCTCTTCCA GTCCAAAGTCCACAAATTCCAAGGNGAAGCCGTCCTTCTCCACCTTTAGCTCCGTCTCCAATTTNTTCCG TTTTGGTNCTCATTTATTTCANTTATTTTCCTTATTTGACCATGNAATGTTTATNAATTTAAANGGTTTT GGGGCCATTAGTGTAATTTTTTTAAAANGTT >gi|2764222|gb|R65015.1|R65015 13519 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170C12T7, mRNA sequence TGATCATAATGGACGATAACTTCAAAACAATAGTAAATGTGGCTAGATGGGGACGTGCTGTATATATAAN CATTCAGAAGTTTGTCCAGTTCCAGCTAACTGTNAATGTGGTTNCCCTGATCATCAACTTTNTNTCTNCT TGCATCACAGGNTCTGCTCCACTCACTGCTGTGCAACNCCTTTGGGTCAACATGATCATGGACACACTTG GTGCATTGGCTCTAGCAACAGAACCTCCCAATGANGGTTTAATGAAACGTGCACCAATAGCTAGAACCGC CAGCTTTATCACCAAAACCATGTGGNGGAACATCGCTGGTCAAAGCGTTTTNCCAGTTTGNTTGTTTTAG GGATTNTNCAATTTCGNAGGGAAATCA >gi|2764221|gb|R65013.1|R65013 13517 Lambda-PRL2 Arabidopsis thaliana cDNA clone 170B22T7, mRNA sequence TTCATCGATTTCNCTCTTCCAAATCTCCCAAAANATGTCGAACCCTAGAGTTTTCTTCGACATGAGTCTC AGCGGTACTCCCATCGGACGGNTCGANATGGAGCTTTTNGCTGATACAACCCCAAACACGGCGGAGAATT TCCGTGGCTCTCTGTACCGGGGGANAAAGGAATGGGAAAGCTAGGTAAGCCACTTCACTTCAAAGNTTCG ATCTTCCACCGTGTNATTTCCNGGATTCAATGTGTCAAGGAGGTGATTTCACCGCCAAGAAACGGAACCC GGTGGTGAATCGATCTNCGGGTGCTAAGNTNAAGGNCGGGGACTTTTT >gi|2764220|gb|R65007.1|R65007 13511 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169N6T7, mRNA sequence TGGGGCTTNTNCACAAGCAAAACATTTCCTTTGTNATACNCCTCCTCCTCGGTCTCCTTGCCGTCTCTNA TGCTTGTAATTGTNGTGACCCTCCTAAACCATCACCACACCCTGTTAAACCGCCAAAACATCCCGCTAAA CCACCTAAGCCCCCTACCGTTAAACCACCTACTCACANCCCAAAGCCTCCCACTGTGAAGGCTCCACCTT CCATACATTCCATGCCCTNCTCCGGCCTATACTTCAAAACCTTCAACCGTGNAAGCCANCAACAACTTCN TTACG >gi|2764219|gb|R65006.1|R65006 13510 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169N5T7, mRNA sequence TGCTCCAGGAGTAGCTGCTGCTGGACCTGAGACAGCCGGATTTCTAGCTCCAAATCCTTCTTCAGGGAAC GATGGATCTNCTTTGATTCCGACCTCGTTCACAACTGTACTCAGTGCCGTACTGTTCGTTTTGTNCTTCT CTAGTGCGTAAAAAAAAAACTGAATCTTTTTTCACCAGCTAGATTTGGCTGTATGAAATTGATTAATGGG TTTNATTAGGGNTAATCTATGTATGTTTTGGAGTGTNCTGTTTTGAGGCCATATCGGGTTCCCTATTACT AGGGGTTACCCTTTTAGGTTATGGTNATAACCTTGNNTCAANACAATTGGGCCTTTAATTCGNNNTAACG GNTTATTCCCTC >gi|2764218|gb|R65005.1|R65005 13509 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169N3T7, mRNA sequence AGAAAACAAAACTCGCTTCCTGATAATCAAATCAAAAGCTTCTCTATCAAGCTTATCGAAAAGTCACATC TTTTGGAAGAAACAATGGCTCGTACCAAGCAAACCGCTAGGAAATCCACCGGAGGTAAAGCTCCCAGGAA GCAGCTTGCCACCAAGGCGGCGAGGAAATCAGCACCAACCACCGGAGGAGTCAAGAAGCCTCACCGTTAC CGTCCAGGAACCGTCGCTCTTCGTGAGATTCGTAAGTACCAGAAGAGTACTGAATTGTTGATCCGCAAGN TTCCCTTTCCAGCGGCTTCGTTCGGGGAATAGCTCAGGACTTNAAGACGGGTCTNAGGGTTTCANAGGTC ACGGGGGTGTTAGGCTCTTNNAAGAAGGCGGGTTAGGGGATANCCTAGTTNGGCTTTTTGGNGGGTANTT AATCTTTTTGNGGTTTTTANGCCAANNGGGTTACGGTNANTCCCTAAGGGCANTNNATTTGGTTTAAAGA TT >gi|2764217|gb|R65004.1|R65004 13508 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169N2T7, mRNA sequence TCAAAGGAAGCGAAGCCTAGCGTCCTCTCTCTGTNTTCTCGTTTCTNCGCCGATTCGTAGTCTGTTGTGC GCTTGCCTCTCCTCTTTTGGATTAGCATACCTCTCACTCGCATCANATGCACTTTTGGTTATCCTCATAC CAAAATGCAGATTTTNAGTTGCTTTTNCTATCCAAATGGACTGCAAGAAGTTCATCCAGATGGTCGAGGA GANGAAACGAAGAGTTCTTGAGNANGCAAGAAGCTCCTTTGAAATGGGGAGCAGAAGCTAGAGGNGGCNN CG >gi|2764216|gb|R65001.1|R65001 13505 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169N17T7, mRNA sequence GACCAAAACGATGGAGAGCACGAAGATTGCTCCTTCATTCGATCGTGCCAGTAAGCTTAAAGCTTTCGAT GAGACGAAGACTGGTGTGAAAGGACTCGTTGACTCTGGAATCTCAAAGATTCCACGCATTTNCCATCACT CATCTGTCGAACTAGCAAACCCTAAACCACTTCCCTCGGACCTGCTACATCTCAAGACGATCCCAACGAT CGATCTCGGAGGACGGGACTTCCAGGACGCGATTAAGCACAAGAACGCGATTNAAGGGATTAAAGAAGCA GCTNCCAAGTGGGGTTTCTTCCAAGTNATCAANCCATGGNAGTTTTNGNTCGANCTTTTTGAGGAAGATG NAAGNNTTGGAGTTNCCGGNNCTTTTAATTG >gi|2764215|gb|R64998.1|R64998 13502 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169N12T7, mRNA sequence CCTCCGTTATGTTCCACTTGAGTCACTCGACCNGTCACTAGCTCTCGGATTCTATTGCCAGCACAAAGAT GATTTTAATGATTTCTGTATCCGAGCAACAAAGCTAGCCGGAGACTCTAATGGTGCTCCTCTCTTCACTG TGACTCAATCTCACAGAAGAAATGACTGCGGGATTGCAGAAACCAGCAGCAGTACAGAGGCATCTNCAGA GGATCTCTGGTGAGGGACCATGNAGNTGNCTTGGCAATTACTTTGNACCACTTTTTCCTTAGGCCATTCT TTTTCAAATTGTGGTGANCTTTGTCCAATTTTTCAAAAATACCCTTNTTTTTTTANANNNGTNCCTAAGG TTTGANGGTGGG >gi|2764214|gb|R64997.1|R64997 13501 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169M9T7, mRNA sequence GAAACAACAAGAAGTAGTAATGGCTTCCTCTATGCTCTCCTCCGCCGCTGTGGTTACATCCCCGGCTCAG GCCACCATGGTCGNTCCATTCACCGGCTTGAAGTCATCCGCTGCATTCCCGGTCAACCGCAAGACCAACA AGGACATCACTTTCATCGNAAGCAACGGGGGGAGAGTTAGCTGCATGAAGGTGTGGCCACCAATTNGNAA GAAGNAGTTTAGNNNTCTATCTTACCTCCTGACCTTAGTACGGNGGATTTGGTTAGGAAGTTGCTNACCT TTTCGGAACAAGTGGNTTCNTT >gi|2764213|gb|R64993.1|R64993 13497 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169M13T7, mRNA sequence AGTTTNCTGTGTTGAATTTTGGGGAATCGAAGAAATTGAATTTCAAAAATCAATGGCGGAAGAAATTGAA AAATCTGTGCCGACAGAGGAATCTCTGATGGAGAAGATCTCCGAGANGATTCACCATCACGATTCGTCGT CATCGTCTGAATCCGAGTACGGGNAAACCTGATTCTCCTTCGGGNTGTGAAAGGGGAGATCTATTCGAAT GTTTTNGCAGAGAGNAAGCCTTTTCACAAGGGTCTCGGTGGTGGGAAAGCCTCCTNNATGTNGTCCTTTT GGNAGGGGTAAAAAAACTNTCAAGNTGCTGTTCTTT >gi|2764212|gb|R64978.1|R64978 13482 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169J17T7, mRNA sequence GGAATCTTGCAATTTCATCAAGCCAAATAGTCAATGGCGCAAAGTTCAGGACCGCTTAGAAGTGGATGAA AGATGTTCGCGTCTCGAGAAAATTGATCAGCTAGAAATCTTTCAGGAGTATCTGCGTGATCTGGAAAGAG AAGAAGAGGAGAAAAAGAAGATACAGAAGGAGGAACTCAAAAAAGTAGAGCGAAANNCCGTGATGAGTTC CATGGGCTGTTAGATGAACATATTNCAACAGGAGAGCTTACTGCCAAAACTATATGGCGTGATTATTTAA TGAAGGTCAAGGGTTTACCAGTATATTCAGCAATTGCGTCAAACTCCTCTGGNGCTACTCCAAAAGGCCT TATTTGAAGGTTNCTGTTNAGGNTTTTGAAAAAAAGGGGCCNCGGGCTNAAGTCTNAAGGTAAAGGNTTN TNTTTGAAATTGGGGAAAGNAAATTTTTCCCNTTGGGCACCATTTATTGGGTCCAAGGGTNTTTTTCCCG GGGTTTTTGGTTCCCCCTTTTTCCCTGNGGTAGGCTAAGTNGGCTTTTGNTGNTTCTTTNAGGCCANGGG GGGGGGAAAGGCCNTAACNCCCGGGGCTTAATTTTGTTTTTTGC >gi|2764211|gb|R64974.1|R64974 13478 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169I24T7, mRNA sequence ATTCAAGGTCTAAGGTTTTGGAGGAACTGCAAACCTTGCTTCCTGCTTCTNTNATAATCCCAGAAAAGAG GTTGGAGTGTTTAGTTGAGAATTCACTTCATATTCAGCGGGATTCTTGTGTTTNCCATAATACTTTGGAT AGTNATTTGTCTTTGTATTCTNATCATCAATGCGGGAAGCACCAAATTCCTTCTCAGACTGCTCAGATCT TGGAGTCACATACCGATGAAGTTTGGTTCTTGCAATTTTNACATAATGGCAAATATTTGGCTTCATCTTC CAAGGATCAAACCGCAATTATATGGGAGATCAGCGCAGATGGGCACATTTCATTGAAGCATACACTTTGT TGGNCACCACAAAACCCGTGGTTTGCNATCTTATGGGGTCCNGATGATCCGCAAGTTCTTNCATGTGGGG CAGAAGGGGGTTTNAGCCGCTGGGNTTTTGTTNAGGGGCCTTTTTCNAATGNTNNAAAAGGGGGNTTNAG CCCNTTTTTT >gi|2764210|gb|R64967.1|R64967 13471 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169F10T7, mRNA sequence AAACAACAATGCAACTNTCACTGGTTCAAGTCTCTTCAGTGTCCAACTTCAGATCCCAATCAAACCCATC TTGTTTACTTCTTCAAAAGTCCATCTTTCCCGGGTCCAAGTTAACCCTCCATCGAATTTTTCGTTATCCG AAGAAAATCTCAAATGGCTCTACTCGTGCTTCACTGCTTGAGACCCCTATCTTATGGGCTGGTCGGATTT GTGTCTTCTACGCTCTCGTGAAAGCTGGCTTTGCTGGATCCAAGTCTAACCCTATCGTTTCTGGTTTGGA AACTGGTGGTGTTGATGTTGAATATGATGATCATTTTAGAGATGCAAACAATCTCACAAGGGTTGTCAAA TCCGGCGGGGAGAGTGCGGAACGGGCAAAAGCGTATGTTGCAACAANTGTGAGNGCCNCTTGTTTTNATG AGTTNCCGNCCGGCAACAATTTGGTNGGTGGGGNTCAAAACCTTTTNCAGGCGGGGCCCGCTTTNNGGGG AATGNTTTCCTTANNGNTTTANAANNTTGGGGGGGNTTTTNAGG >gi|2764209|gb|R64965.1|R64965 13469 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169E22T7, mRNA sequence AACCAAGGAACATGGCAGAGCTTGCAAGTNTCTATCTNAACTATGTTGAACTTCGGTATATTTGGAGTTC CCATGGTTGGTTCAGACATTTGTGGATTCTACCCACAACCAACAGAAGAACTCTGCAACCGTTGGNTCGA AGTAGGCGCGTTTAACCCGTTTTNAAGAGATCACGCCAATTACTACTCACCAAGACAAGAGCTTTACCAA TGGGACACAGTTGCAGACTCAGCTCGTAACGCTCTTGGTATGAGATACAAGATCCTTCCTTTCCTCTACA CTCTTAACTACGNAGCGCATATGACTGGTGCACCCATCGNTAGACCGGTCTTCTTTCTCATTCCCCTGAA TACACCGGAATGTNACGGGAAACAGCAGGCCAGTTTTTTNCTTTGGAAGGAAGCTTAATGGTATTTCCCG GTTTTNCGGGCAAGGGAAAACCGGAGTAGGAGGATTTTTTCCCCCNAGGGTTTTTGGACCACNTGTTCGN AATGNNTNANGNANTNGTTNAAGAACGGGGAACGGGNA >gi|2764208|gb|R64956.1|R64956 13460 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169D20T7, mRNA sequence ATTTATGAGTCTGTAGATGAACCTGAGGAAGCATTGAAGCTACTTCAGAAGTCTATGAAATNCCTTGAGG ATAAGCCAGGNCAGCAGAGCGCCATTNCAGGGTTAGAGGCACGGATGGGAGTTATGTATTACACAGTGGG GAGGTACGAGGACGCAAGAAACGCGTTTAANAGCNCTGTGNCAAAGCTACGGGCAGCAGGTGAGAAATCT NCCTTCTTCGGTGTTGTATTAAACCAGATGGGACTAGCCTGCNTTCAGCTTTTCAAGATTGATGAAGCGG GTNAGCTGTTTGAAGAAGCAAGAGGTATTCTTGAACAAGAACGTGGACCGTGCGATCAGGGCACTCTCGG GTGTTTATAGCAATCTNAGCTTGCTACCTATTGNCGNTATTGGGNAGGNTNAGAGGATCCGTTTTAAATT ATTGAGCCAGGTTNTTGAACCTTNGANAGG >gi|2764207|gb|R64951.1|R64951 13455 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169B4T7, mRNA sequence AAACGACGTAGTTTCTGATACAGAGGAAAAAAAAGCAAATATCTAAAGTNATAGAGGAACTTAATGGCAT GGCACTTTGGACGGTTGANATTTATCTATAAAGTTTTTAGATATTTCGATCTGAGAGTTGTGAAGCGAAC GACGTCTTATGAGTCAATCTACTGGTCTTAATGTGACAGTGTATTATTAATGTACAAAATCCCGTCTTTT TCAAGTTTTNNTTTCTAAATTAACAACTCTGTATTATCATTTTAGAAACTTTTATTTCTTGATTACT >gi|2764206|gb|R64950.1|R64950 13454 Lambda-PRL2 Arabidopsis thaliana cDNA clone 169B3T7, mRNA sequence GGACCATTCAAGATCAATGGTGTTCCTCTGAGACGTGTTAACCAGGCCTATGTCATTGGTNNTTCCACAA AGGTTGACATTTCTGGAGTTACCCTCGACAAATTCGATGATAAGTACTTCGGCAAGGTTGCTGAGAAGAA AAAGAAGAAGACTGAAGGAGAGTTCTTCGAGGCTGAGAAAGAGGAGAAGAAAGAGATTCCACAGGGAAAG AAAGATGACCAGAAAGCCGTGGACGCAGCTTTGATCAAAGCTATTGAAGCAGTTCCAGAGTTGAAGACTT ACCTCGGAGCAAGGTTTTCATTGAAACAAGGAATGNAGCCCCATGAGCTTGTTTTCTAGATTTCATTACT TTTTTCCTGAGGTTTCTAGTGTATCTGCCTCCTGAAGGTTTTACACTCCACCTGGTTGGTTCTGTTCTTG TCCACTGNCCAGGGCATAAAATNTTGGCTNTTNNAATCTGGTTNNTGNCTAANNTGGGAATTTTCCAACC NGTTTTTAAGGGGNCTTTTCCAAGG >gi|2764205|gb|R64942.1|R64942 13446 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168P6T7, mRNA sequence CAAGANCTCAAACACTTCATAACTAAAACATCCTTTAAAGCCTTTTCAAAAACTCAATCATGTCAAGCAA CTGCGGAAGCTGCGACTGTNCTGACAAGACCCAGTGCGTAAAGAAGGGAACCAGCTACACCTTCGACATC GTCGAGACTCAGGAGAGCTACAAGGAGGCCATGATCATGGACGTTGGTGCCGAGGAGAACAACGCAAATT GCAAGTGCAAGTGCGGCTCCTCTTGCAGCTGCGTCAACTGCACTTGCTGCCCCAACTAATGAAGCTTCTT TAATCAAAATGTAATATGNATAAAAGTTGATGTGGGCTCATCTATTGAGCTCATGTCTCTCTTATTACCT ACTCTCTAGTATTGGTGTGATGTAATGGGTTATTGNCCCTTNTTTTCCNTTNCCCTNTAAACNTAANGGA AACTTTCAAGGTTATTTGNAAAGGGTNGGTTTCTTTTTT >gi|2764204|gb|R64931.1|R64931 13435 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168O19T7, mRNA sequence ACGAGAAACCTTACTACAGCTACGCATACAATAATTGCACAGGTGGAAAACAATGCTTGCATTACACGCA AGGGTTGTGGAGAGATTCAGTGAAGATAGGGTGTGCTAGGGTTCAATGCACCAATACTTGGTGGTTCGTG AGTTGTAACTATAACTCACCCGGTAATTGGGTCGGAGAGTACCCTTACTGATCCTGATCACTAATACTGT ATTACCTAAGACAATAAATATGATTTATGAATAAAACTAATTTGAATTACTGCATATGGAATTATAAATC TTTNGTTTTAATCTCAAGGATGTAATAATTTATGNCCCTTCACATT >gi|2764203|gb|R64930.1|R64930 13434 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168O18T7, mRNA sequence AGAAACTACAATAGTTAATCAATCAAAGAGAAGTAAGAGAAATGGCAGATTCTAACTGTGGATGTGGCTC CTCCTGCAAATGTGGTGACTCTTGCAGTTGCGAGAAGAACTACAACAAGGAGTGCGACAACTGTAGCTGT GGATCAAACTGCAGCTGTGGGTCAAACTGTAACTNTTGATGAAATTATTATGGTCTAAAATCATATATAT GGCAGAAAAATTGGGGAAAATATGTGTTTTATGCTAAGAGATGTGTGTGTGTTGTTGGAATAAAGACGTG ACCGTTGTGTTGCGTATCAACTCTCTTAAGCTTTGACTTTTCCCAGCTTTTGTATTTNCCCATGGTATGG GTAATNGGTGTGATTTGTGTAANNGTTTTCANAATGGAACCGNAAAAAAAAATTTTTTNTTTNTGG >gi|2764202|gb|R64929.1|R64929 13433 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168O10T7, mRNA sequence AGCTTTTCAAAGTTAAAACCTTTTTTNCCCGAAGAAGAATCAATACGACTCAAATCAATCAATTGAATCT ATGGCGATGGCTATGAGACTTCCAGCGATATCTAGAGCTGTGACGGAAGTAGCTTCAGCTCCGGTTGGTT TGAGACGACTGTCCTGTTCAAATGCTTCAAGGTTCTCTTTTTTGTCTCCACAAGCTGAATCCCAAACACC GGCTCGTCCTCAGGCTGAACCTAGCACCAATCTCTTCGTCTCCGGGCTTAGTAAGCGCACCACTTCTGAA GGACTAAGGACTGCTTTTTTNCTCAGTTTTGGAGAAGGTTNCTGATGNTAAGGGTTTTCACAGGCANGNG NTTTCAGGGTTNNTTCCAAAAGGGTTTTNGGGTTTTTTAANNGAANTTCCCCTTTTNGANNGGTTTT >gi|2764201|gb|R64924.1|R64924 13428 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168M6T7, mRNA sequence TTCCTTCACAATCTCAAAAGCCATTTTCAAAATTTAAAACTCAGAGAGAGAGAGATGTGTCCTTCTGGTA GAATCGCNATTCCAATAACCACCACCGCGAATCCAAATTTCCNACCAGCTTTCGAAATCATCGACACAGA TCACGACGGTAAAATCAGCAGCGACGATCTCCGTGCATTCTACGCCGGAATCCCTTCCGGTGAAAACAAC GACGAGACGATGATCGGAACGATGATATCAGTAGCGGACGCGAACAAAGNCGGATTCGTTGAGTTCGATG AATTCGTGAAAGTTCTAGAAACGGCGCCGTTTTCTAGATCTGGTACCGGNGGNGACGNTGGNTTNATTGN AAGATGTNTTTTAAGGTGNTTGGTTAAAGCCGGGGGNTTGGGNGCTTNAGTTTCGGGGNTTCTTAAGGTT TNTTTGGNTTCGCCTTGGTT >gi|2764200|gb|R64923.1|R64923 13427 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168K8T7, mRNA sequence ACGAGTATGTACCTATGGTGGACAAAGCCGTTGACGCCACCTGGAAGGTGAAACCCGCCATCCAGAGAGT TGCCTCAAGAGGAGCTTTAATGTCTCCCACCGTTCCAAAAGATCATNAAGGCATCAAGGCTCGANTCCTA GTAATGTTCATGGCATTNTTNATGGCGGTTTTAACATTCTTCCGCACTGTAACAAAGAAACTTCCAGCGA CTACTACTTCTTCCCCAGCAGAAACCCAAGGAAACGCAATAGAACTTGGTTCTANCGGTGAAGGAGTTAA AGAGGGAGTGTCGTCCTCCTTCTCCCTGTTACCAGACCTNACGGGAAACTGNTCTTCCTTAAAACTTTTG TTCCGGTGGGANCNTNCCAAGNNCTTGGANGGGTAAAAATCCGGGNNCGNTCCC >gi|2764199|gb|R64922.1|R64922 13426 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168K4T7, mRNA sequence AATCCAACCAGACCACACAGACCTTNTCCTTCTCCACGGAACAAAGTNTTCGTNAAGAAGACGACGAGAG ACACCACGTNACACCTCGATTACTCCAATCTGGTTAAGCTGGAGAAGGCGGGATCGCACTCGGTTTCGAN TCCNGCTCCGGCTTCGGGTTCGGTTCCTATTAACCGGGTTCCCCTCGCTCAGGTCGTCGAGGATTGCTTC AAACGCTGGTTCCAGGATACGCTCAAGGAAGCCAAATNTGGTNACGTTGGTATGCAGGTTTTTGGTTGGG CAAGATGTATTTCCAGCGGCTTATGGNATCCNTTAAAGNTGAAAACAATNGGTCGGTTGNTTTG >gi|2764198|gb|R64921.1|R64921 13425 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168K2T7, mRNA sequence CTGAAAAATAATTTAGACAAAACAAAGATGGTAGAGAGAGAGGTGAAACTTTTGGGAACATGGTACAGTC CGGTCGTNATAAGAGTAAAGNTCGCNCTTCGTCTCAAATCGGTTGATTATNATTACNTTGAAGAGAACTT NTNCGGTTCTAAGAGTGAGCTTCTCCTCAAATCGAACCCGGTTTACAAGAAAGTCCCGGTNCTNATCCAC AGTAATAAATCGGTTTGTAAGTCTCTAAACATCGTTGGATACATAGACGAGACGTGGAACTCATCTGGTT CGTNCATTCTTCCTTCTCATCNTCATGNTCCGTCCCCTTGCNCGGTTTCTGGG >gi|2764197|gb|R64919.1|R64919 13423 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168K12T7, mRNA sequence TCTTTTTCNTNAGTCTTCAAAGAGTTTCTAAGTAACCCAAATNAATGGCAGGTATCAAAGTTTTNGGACA CCCAGCTTCCATTGCNACCAGGAGAGTCCTCATCGCCCTCCACGAGAAAAACCTCGACTTTAAGCTCGTT CATGTCGAACTCAAAGACGGTGAGCACAAGANGGAGCCTTTCCTCTCCNGCAACCCTTTTGGTCAGGTTC CAGCCTTTNAAGATGGAGACCTCAAGCTCTTCGAATCAAGAGCGATTACTCAGTACATAGCTCACCGNTA TGAAAACCAAGGAACCAACCTTNTNCAAACCGNCTCCAAGNACATAT >gi|2764196|gb|R64916.1|R64916 13420 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168J6T7, mRNA sequence AAGACATGGAGTCACTCGCCACAGTACAAGATCGGTTATTGCCAACAGTGTCCGGACAAGGTGACATGGC CAGAGGCAAGCTTGGTCCTAAGCCGCCTTTNTACTTCAACGCCGGTATGTTCGTTTACGAGCCTAACCTC TCCACTTATCATAACCTCTTGGAGACGGTCAAAATTNTGCCTCCCACTCTTTTTGCTGAACAGGATTTTT TGAATATGTACTTCAAGGNCATATACAAGCCAATACCACCAGTGTATAACTTGGTCTTGGCAATGCTTTT GGAGGCATCCAGGGGATNTAGGGCTTTGACCCAAGNCAAAGTTGTTCANNTACTGTCCTGCTTGGTGCTA AAANCCTTTGGGGNTTTCANCTGGGGGGAGGGNGGGGGNACCTTGGGCCTGGGTGGNCCTTTTAGNGTTN CTTNNTAAAGAATTTGGGGGGG >gi|2764195|gb|R64911.1|R64911 13415 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168J1T7, mRNA sequence GGGAGGAAAGGTGAGATACTGAGCAGTCCAGTCTCGGATTCTCTCTACAGAGGCTCACTAGATGTNCACT CCATACCAGTAGCAACAAGATGGAGATCTTCAAGCGCAATTTTNCCATTTTTGGAAACTAGAATGGGGAA TTTAGAGAAACTTGGGATCCAGTGGGGAGCCATGGGATCAGATGTGGTTAGGGCCTGGGGATTTGGGAGA GAAGAATTGCAGGAAATGAGGGAGAATCTGTCAAAAATGGTATCTGANCTGAATCCTCAGTTTTNCGAAT CTCCGGATTCAGATTAAGTTATGTCTTAAAACGNATATNGTTGTATCACCTTTAAAAGATTTTTCNTTGG TTTGGGTTTNNAAACTTTAATGGGCAAANCCCCGTTGTTTGNTTTGACTTAACCCCCCTTGGNGAAAGGC CGGCTTTAANAGNGGTTTNATATTTGGGGGCANTTGGGGGGNANGGATTTTNCAAACAAGGCCCAACC >gi|2764194|gb|R64907.1|R64907 13411 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168I24T7, mRNA sequence CTGAAATCGTTGAATCTNCGGATGCTTATCTNTTTGCAGGTCCGATTTTAAACGATTACAGTNCTGTTGG GTATTCTCTGCTTCTAAAGAAGGAGAAGGCAATCATCGTTCAGCCTGATCGGGTTACTATCGGTAACGGA CCTGCGTTTGGATGTNTTCTTATGAAGGATTTTNTAAGCNAGTTGGCTAAACGAATTAAGCACAACAACA CTTCTNATGAGAATTATCACAGGATCTATGTCCCAGAAGGAAAGCCTTTATNAGNTAACCCGNATAANCC TTTAAGGGGTTAATGTACTGTTCCAACACATTCAGAATATGCNCTCTTCTNAGTCTGCTTGT >gi|2764193|gb|R64904.1|R64904 13408 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168I21T7, mRNA sequence TGTTTGGAGAAGAAGAAGAACAGATCAAATACGAGGAGAGATCTCTAAAGAGATTTATCGTTTCAAATTT NTNCACGTTGAGAAGTTTAATTTAGATTAAACAACAAAAAGATGGGTTACTGGAATTCCAAGGTTGTNCC AAAATTCAAGAAGTTATTCGAGAAAAATAGTGCTAAGAAGGCTGCTGCTGCTGAAGCTACCAAGACCTTT NATGAATCTAAGGAAACANTCAACAAGGAAATTGAGGAGAAAAAGACAGAACTCCAACCAAAGGTCGTGG AAACCTATGANGCCACGTNTGCAGAAGTCAAGGCTTTGGTGAGAGNCCCTAAGGTGGCTGGTTTNANGAA AACTCAGCGGCTNNTCCAGGAAGTACCTCGAGGGGCTNGTCAAATTTGNNTTCCCCGGNTCCAAAAGCGG GT >gi|2764192|gb|R64897.1|R64897 13401 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168G18T7, mRNA sequence AAGCTTACTTCGGTGAGACTGCCTCTGAAGGGAGGCTTTNACAACAATGCAGTGGCAACAGCAAACATTC TGGAGTCATCATCTCAGGAAGTTGGTGGGAAACCCTACTATTACTTGTNTGTTTTGACAAGAACGGCTGA TGGAGACGAAGGTGGGAAGCATCANCTGATCACAGCAACCGTGAATGGNGGGAAGCTTTACATCTGCAAA GCACAAGCTGGAGACAAGAGGTGGTTCAAGGGAGCCNNGNAATTTTTCGNGAGCNCACCCACTTNTTTCA AGTGTTNCTT >gi|2764191|gb|R64896.1|R64896 13400 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168G16T7, mRNA sequence CNCTTTCCNAAACCATCAAAACTCGCCNACAAGGCCCTCTGTTTAANCCCGGAAACCTACACTAAGTAAT TTNAGTTTGAGTAATGCAATTTGCTTGNCGTCTCCTCCTGANCCAGATGATGATGGTGGTGGGTCACTTT CTCCGCCAATGGATACTTCAACGAGAGACGAATTAGCAGCGAGGTTTCTCTTCTCCGGTACAGTGAAACC CAAACGAGACGATTTTGGAGTAGTTAAGGGANNAAAGGAGTATCTGATGGATGGTGGAGNAGNACGGTGG TCGGAAAGAAGAGCTGGTGGTGAAGGTAGTNGTGACGANAAAGTAGAAGAAGTCGCCATTGTTGAGNAGG >gi|2764190|gb|R64895.1|R64895 13399 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168G11T7, mRNA sequence CCTAAGCCTATGTCGGAAAGCTCTGAACAGGTCAAACCAATCGATGAGAAAGACAAGCTTAGACCGATTA AAACCGGTGGAGGAGCACCAGGAGGAATAGAGAGGAGTCGATCTAACGGTGGAGGAGCTCAACGACATCA TAGAACAACCGGAAGAGTTTCTCCGGCAGTGGACCCGCCGTCTCCGAGAATTTCGTCATGCGGTTTTTGC TCTGCGTTTGGAAAGAATNCGCCGGGGGAGAAAAGTTAATTCNGGGGAAAGGNCCCCCGAACGTAGNTCG AGGTAGGCGTCAGGGTTAATAAATATTCNTGNGGGGNAAAAATAGTTTTCNCCTGNCTTTCAANNTTTTT NCTTCTTCTTTTTTTGNATGNGNGGGGGTCTTTNGTTATAAAAAACTTTTAAATTTG >gi|2764189|gb|R64894.1|R64894 13398 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168E24T7, mRNA sequence TCAACATACTTCTTTGTAGTGCTACTTNCCATTATATCAAACACTCAGCAACCTGATGGCAACGAGACGG ATATTGAAAGATTTGANGGAGTTGCAAAGAGACCCTCCTGTATCANGCAGTGCAGGTCCAACAGGAGANG ATATGTNCCACTGGCAAGCTACTATAATGGGTCCGANTGNAAGTCCTTACTCCGGAGGTGTTTTCCTTGT NAATATCCATTTCCCTCCTGATTATCCTTTTAAACCTCCCAAGGTTGTATTCAGAACCAAAGTGTTTCAC CCAAACATCANCAGTAATGGGANCATATGTTTGGGCATTNTNAAAGGCCC >gi|2764188|gb|R64890.1|R64890 13394 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168C24T7, mRNA sequence AAGNTCAACGAGGTAGGAAACTNTTTTGGAAGTGTGAGGNGCTTATTGACAAGATTAAAGGTGGTTTGGC TGAAGCAACTNCTGCCAAATTNATATTAATGTTTTNNCAAGAGATCGAATCANACTCTNCGAAGAGCTTT GAAAATGGAGAAGGTGGACGTTTGATGGCACCTCAGGATGCATGCAACCGAATTNCTGAAGTTGTACAAG AGACTTTNAGGAAAATGGAGATAGTGGCTGAGGAGAAGATGAGAATGTNCAAGAAGGCACGCATGGCTCT TGAGACATGCGATAGAGAGCTCGAAGNCAAAGCCAAGGAAGTTTCAGAACCTGAAAGCAGAGAGGCAAGA AGNAAGAAACTTCAGATAGATGAGCCTAGAGAGGATCGTGAAGGCTNAAGCAAGCCGGAGGCAGACATGT TCCAGCTTTAAAGCAATTGAGGCAAAGCGGGAGGCTTNTTAGGTTCAGAGGGTTTTCCTTCCGNAATTGG TAAGCTTNGGNGGATTCGGAGAACCTTNTTAACCANAGGCTTGTTAGCCC >gi|2764187|gb|R64889.1|R64889 13393 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168C23T7, mRNA sequence AGCAACCATGCGGGCAGAGGTGTCANATGTATCAAAGAGCGCGATCAGCAATTNATTTTNACTAGACGAC GATTCGAGCATCCCATTCTNGCTTGANGATATCTCCAAATCGATGCAAAACGTAGAGGTTGCAGAGGTTG ATCCTCCTCCGTTGATCCGCCAAAACTCCAACTTCATGTNCTTNTTGGAAAGGTCAGATTGAGGTAGTCA AAGTNCCCTATACCCGATCGANCGCNAGGACATTTTNANATTAGGAGATCAGTATTGTCCTTTCAAAAAC AAAGCCTGTACATTAGTACATATGCCTATCTTTNCCAGTGGCTTTNTGGTACTGTCCTACTATTAANAGG GGTATATNGGGTAGGGAAAAATATATATATGTAGACTAAATATTTGTGGTGTCCATGCGGTTNGTAGGCC ATTTGCTTAATGG >gi|2764186|gb|R64887.1|R64887 13391 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168C19T7, mRNA sequence ACAAGAACTCAAACACTTCATAACTAAAACATCCTTTAANGCCTTTNNAAAAACTCAATCATGTCAAGCA ACTNCGGAAGCTGCGACTGTCCTGACAAGACCCAGTGCGTAAAGAAGGGAACCAGCTACACCTTCGACAT CGTCGAGACTCAGGAGAGCTACAAGGAGGCCATGATCATGGACGTTGGTGCCGAGGAGAACAACGCAAAT TGCAAGTNCAAGTNCGGCTCCTCTTGCAGCTGCGTCAACTGCACTTGCTGCCCCAACTAATGANGCTTCT TTAATCAAAATGTAATATGAATAAAAGTTGATGTGGGCTCATCTATTGAGCTCATGTNTCTNTTATTACT ACTCTCTAGTATGGTGTGATGTAATGGGTTATGACCCTTCTTTCCCTTCCCTATAAAACTNAAGGANCTT GCAAGGTT >gi|2764185|gb|R64886.1|R64886 13390 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168C16T7, mRNA sequence AACAAGAGCCAAGCTAATGAGATAAGTGTATCGGTGAGGCTGAGAGTTATTCACTTACAAAAAAAAAAAA AAAACTTGAGTGTAACCAAAAAAAAAAAGTTGATATACTTNCTGGTTTTCNCCTTAACTTTNATNCTTTA CAAATCCATCCCCCTTAGATCTGTTTATTTCCCGCTACTTTGATTCATTTCTGTNAGTAATCTGTCTTTC GTATAGANGAAAACTGATTTCTNGGTTTGTATTTCCTTAAAGNGNTCAATCTTTTT >gi|2764184|gb|R64881.1|R64881 13385 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168A8T7, mRNA sequence CTTNTTCCTTCTTCCTCACTGTAGCTCGTCGTCGCTACACCATCTAGAAGACCCTTAACCATGGCTGTCG GGAAGAACAAGAGGATTTCAAAGGGTAGGAAAGGAGGAAAGAAGAAGGCTGTTGATCCCTTCTCCAAGAA GGATTGGTATGACGTGAAGGCTCCTGGTTCTTTCACGAACAGGAATGTTGGGAAGACTCTTGTTTCCAGG ACTCAGGGTACCAAGATTGCCTCTNAGGGACTGAAACACAGGGTGTTTNAGGTTTCTNTTGCTGATCTAC AAAATNATGAGGATAATGCCTACAGGAAGATCCGTCTTAGAGCTGAAGATGTTCAGGGAAGGAATGTGTT GACCCAGTTCTGGGGTATTGGATTTCAACAACCGNCAAGCTNAAGGTCATTTGGGTGAAGAAGTGGCAGA CTTTTNATTTAAGNCCNATTTNNGATTTTGAAACCNCAGNCGGGTTNACCTTTANGGNTTNTNTTTAATC GCTTTAAAAANGGGCG >gi|2764183|gb|R64880.1|R64880 13384 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168A7T7, mRNA sequence CAAGANCTCAAACACTTCATAACTAAAACATCCTTTAAAGCCTTTTCAAAAACTCAATCATGTCAAGCAA CTGCGGAAGCTGCGACTGTNCTGACAAGACCCAGTGCGTAAAGAAGGGAACCAGCTACACCTTCGACATC GTCGAGACTCAGGAGAGCTACAAGGAGGCCATGATCATGGACGTTGGTGCCGAGGAGAACAACGCAAATT GCAAGTGCAAGTNCGGCTCCTCTTGCAGCTGCGTCAACTGCACTTGCTGCCCCAACTAATGAAGCTTCTT TAATCAAAATGTAATATGAATAAAAGTTGATGTGGGCTCATCTATTGAGCTCATGTCTCTNTTATTTACT ACTCTCCTAGTATGGGTGTGATGTAATGGGGTTATGACCCTTCTTTCCCTTCCCTATTAAACCTAANGGA ACTTTCAAGGTTAATTNGAAAGATGGGTTCTTTTT >gi|2764182|gb|R64876.1|R64876 13380 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168A24T7, mRNA sequence CTCCATGATCTCTACCTTCACNCCATGTNTCAACTTCATCACCGGANGCAGCGGCGGTTCCGTNACNCCC ACCGCNGGNNGCTGCNACTCCTTGAAGACGTTGACCAACACTGGCATGGGCTGTGCTTGCNTCATCCTCA CNGCTAACGTCCCGCTGCCTACTGGCTTCATCAATCGGACTCTGGCGCTTGCTCTACCTCGAGCCTGCAA AATGGGCGGTGTACCTATTCAATGTCAAGCTGCGGGGACTCCTCTACCAGCTCCAGGTCAGGTTCCATTT TTAATTGCTCCACCACCGTCAGGTGTCTTGCTTTTAGCCCGGGAGCGTCCAAGGCGGCGGGGACAACACC AACAACAGGGACCTGNACCGGGATNACTTCCCGCGGGNTGGGNCCAACGGGGCCCNACANCTTAAATAAG GAATT >gi|2764181|gb|R64875.1|R64875 13379 Lambda-PRL2 Arabidopsis thaliana cDNA clone 168A1T7, mRNA sequence GGCGTNTTCTCTTCCTACATTTCCCCAAGCNTTACCTTGCTCGTAAACCAAAACTTCTTCCTCCTTGGCT ACCTTCCGATCTCCTTTNTTAAGATTCAATGGTGCCACTTCCTTAATCCCCTCCTCTATCTCCATCACTT CACGTGGCACATCCTCCCCGACCATCATCCCACGTGCTGCCGCCTCANAATCCGACTCTAACGAAGCCCT AGCCAACACAACCTTCCACGGCCTCTGCTATGTNTTGAAAGACAACATAGACACCGACCAGATCATCCCA GCAGGAGCGGNTTGCACCTTTCCCATCGAACCAGCAAGAGCGTGATGAGATCGCGGGTNAAGGTNTCTCT GGGTCTACCAGACTTTCCACAAAAAACGGGTTCANTTGAGCCAGGGNGGGACAGGTNAAAAGTACTNAAT TAATAATNGGNGGNGNAAAANTTTGGTTGGGGTNGGTAAGGTGAAATGTTCGGGTTTTTTTTGGGGAANT TGGGNTAAAGGCATAGTTTNTTNGTTTTCGGAAGATTTTTTTTCGGAATTGGTTTTAAGG >gi|2764180|gb|R64874.1|R64874 13378 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167P2T7, mRNA sequence GTATCTGACAAACGGGAAAAGATTAGAAAAAATAATGGAGAAGCTAGGATTCTCAAGTNATTCTNCAACT GAGATCGTGATTNANGAAACCAACCCTAAACCATCAGAATCATCCAACCTGCCAAACTTCATACTCAACG AGCAAGTGGTGTCATTTTAGTTGTAGGAAAAGGTCTTTACTCGGNTCATGGAAAAGCTGNGGAATCAAAG TTGTCTTAAATGGCCGGTGTAGCAAGCATAACAGTGCTCACTTAACGGGAGAAGACGTTTTTCCGTATAT GTACATACGTATGTATGANTGTCCANCTCCTACTTGGGTATCAAATCAAAATGCCCATTTTGNTNTTCT >gi|2764179|gb|R64872.1|R64872 13376 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167O23T7, mRNA sequence TTGGTCAAAATGTTTCCAGTGGAACCCAGGAAAAGCTGTATCAGAACGTTAGAACTGGGATCAGTTCAGC TAGTGATCTGTTGAACCCCAAGGATTCTNATTACACATTTNCTTCAGCTGGTCAGAATTCGATATCAAGA ACTAGCCCCAATGGAAGCTCAGAAAACATCGAAATCTTGGATGACTTATCTCCACCACATTTGGAGAAAA ATGGTCTAAATCTGACAAGCGTTGATTCCTTGGAAGGAAGACATGAAAATNAGGTCTCCCGCGAATTAGA TTTAGGTCACTACATGCTCACATCTATTAAGGTCAACACAACACCGGGNATCTGGNCCTAGCATTCCTCA GATTNTNCCATATGTTCACCGGGTGTNNTGGAAGCCCTTTTTTTTGGAAGGAANTCTTGGCTNCNGNAAT TTNTTTNANGCNCTTTG >gi|2764178|gb|R64869.1|R64869 13373 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167N9T7, mRNA sequence TCGCGNCTTTTGCTTCCTCCCGCTTTTTCGCCAATGTTTTCTTTAGATCTAGCTAATATGGCGACGATTT TNTNCTTTCTCGCTTCTAATCACCGTAGAGATCCNCCCGATCTGCAAATCCGATCCGNATTCTCAACGAA TTTGTAGATCTGATCTGTGATTCCATCGTTGACGACGGATCTTCGCTTACATCGTTTGANCTGTCGCAGA TCTGCCGTTTTCTATAGATCTAGATCTGGATCGTCCTTCGCGGCTTCTTCACATGCAAGATTCTGTGAAN NGTTCAANTTGAGGCANCATTTCNGGNTTACTAGGAGACGGATCTNTTGCAGACGGATGTGTGTGTGTTG GNTTGAAATTGAGATTNGGGTGTAGAAGA >gi|2764177|gb|R64867.1|R64867 13371 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167N23T7, mRNA sequence GGAGATCGGAGACTCATCGTTGCAACAACAACAAATTTCAGAAGATCCGAAGACGAAACGATGCCTATAA GTNCGACAATGGTCGGAGCTTTGCTGGGTCTCGGTACCCAGATGTACTCCAACGCCCTCCGCAAGCNCCC TTATATGCGTCATCCGTGGGAGCATGTGGTGGGTATGGGACTTGGTGCTGTGTTTGCNAACCAGCTCGTG AAATGGGATGTGAAGCTTAAGGAAGATCTTNATGTGATGCTCGCTAAGGCTAGAGCTGCTAATNAGCGCC GTTACTTTGATGAAGATCGGGATTAATTTTGCGTGATCTTTGAAGTCTTCAGNAAAGGAATATCTTCCCC TGAACTCATCTCAAGTGCTTGTTTTTGCCTGACCTTTCCCNGTATAAGGGTTTCTCCNNCCTNCTTTTTN NACTCAGCCCTNGGNGTNTTTTTCATCACTGNTTTCGNATNT >gi|2764176|gb|R64865.1|R64865 13369 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167N20T7, mRNA sequence GTAACAACTCACCTGCCGAATCAACTAGCCCCGAAAANNGGTTNTNCAAAAGCNGCGACCTATACCCGGC CGTCGGGGCAAGAGCCAGGCCTCGATGAGTAGGAGGGCGCGGCGGTCGCTGCAAAACCTAGGGCGCGAGC CGCNGCGGANGGCCGTCGGTNCAGATCTTGGTGGTAGTAGCAAATATTCAAATGAGAACTTTNAAGGCCG AAGAGGGGAAAGGTTCCATGTGAACGGCACTTGCACATGGGTTAGTCGATCCTAAGAGTCGGGGGAAACC CGTCTNATAGCGCTTAAGCNGANACTTCGAAAGGGGATCCCGGTTAAAAATTCCCGGAACCGGGACGTGG NGGTTTAACGGCAACNTTAGGGAGTNCCGAAACGTCGGCCGGGNGCTCCGGGAAGAGT >gi|2764175|gb|R84195.1|R84195 16154 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167N19T7, mRNA sequence TCAACGAGGCCTAACCAAATTCCGAACNAAACACCGAGCCACACTCCAAACCCAGCGTCANTANATCCAA GCNTCACGTNTCCTAGCTCGAGCCCGAACCACACCCAAGAAATCTCAATCTCAATCTNTNGCCAAAACGG CGCTCACCGAAGCTGATAATGTGATCGCAATTTNTCCAGATGATGCCGCCGGTCACATCGTCCGTGCCCT AGCTCTAGATCTGCTCGGTCACCATACTTNTGCTCTCAAATNGTTCGATATGGCGNTGACTTATCCGCGT TT >gi|2764174|gb|R64861.1|R64861 13365 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167N14T7, mRNA sequence ACTGGTGGAACNNCTACTGGAGTAGGGAAGTNCCTCAAGGAGCAGAACAAAGACATCAAGGTTTGTTTGG TGGAACCAGTAGAAAGTCCGGTACTTAGCGGAGGTCAACCAGGTCCACATTTAATTCAGGGAATTGGCTC TGGTATCGTCCCATTCAATTTGGACTTAACCATTGTNGATGAAATNNTTCAAGTGGCAGGTGAAGAGGCT ATTGAAACAGCCAAGCTTCTTGCCCTCAAAGAAGGATTACTGGTGGGAATATCCTCTGGGGCNGCAGCAG CGGTGTTTTTAAAGGNTTGCAAAGNGGCCAGAAAACCGGGGGGAAACCNCATTTTGGGNGGTTTTNCCCT NNTGGGGG >gi|2764173|gb|R64858.1|R64858 13362 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167M9T7, mRNA sequence ACCAAAAAAAAGAAAACACAAAAACAAAGATTATAATGGCTTCCTCAACCATGGCTTTNTCCTCCCCTGC NTTCGCCGGAAAGGCTGTNAAGCTGCCGCATCAAATGTCCTCGGAAGCGGCCGTGTGACCATGAGGAAGA CTGTCGCCAAGCCAAAGGGTCCATCAGGCAGCCCATGGTACGGNTCTNACCGAGTCAAGTACTTGGNTCC ATTCTCCGGCGAGCCCCCGAGCTACCTTACCGGTGAGTTCCCCGGTGACTACGGATGGGCACCGCTGGTC TATCCGCCGACCCAGAGACCTTCGCCAGGAACCGTNAGCTAGAAGTTATCCACAGCAGATGGGCCATTGT TCGGAGGCCTTAGGGTTGCGTTTTTCCCTGANGTTATTTGGNTAGGAACGGGGTTNAAGNTTCGGAGAAG GCGGTTTTGGTTAAAGGGCCGGTTTAAAAGNTTTTTAAGNGCCGGGGGGTTTNGNTTNTTTNGGAACCCG NGTTT >gi|2764172|gb|R64856.1|R64856 13360 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167M6T7, mRNA sequence AGTAGGTGGAAGTNCAGACGCAGATAGTTGGTCGACTGTNCAAGAAAGAGCTTTGGTTCAAGCTTTAAAG ACATTCCCGAAAGAGACAANCCAAAGATGGGAGAGAGTAGCTGCAGCTGTCCCTGGTAAAACGATGAACC AATGCAAGAAGAAGTTTGCAGAGCTTAAGGAAATCATTAGAAACAAGAAAACCGGAGTATGAGGTAAAAT CATTTCGGAGTCCCATGAGAATTTTGGGTTTTAATCCTCTTGGGGCACCGTTACTTTNCGAGAAGCAAGA CCTAAAACTTTTTTATTATTTGTAATGATTCATTTCCCCTTTNATGTCCCCTATATATTGAGAGTCCTGG GGNCCCCTNTTATTGGGGTATGNTTTTTTTTTACCATAANCTTTNTGGNACCGGNTTNNTTTGGGGNNTA GGTTCAAAGTTNTGNAATTAAAGCGGGATCGCCC >gi|2764171|gb|R64849.1|R64849 13353 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167L9T7, mRNA sequence AGTATATTGATGAGACTTGGAGAGACAATCCGATTCTCCCTCAAGANCCGTATGAAAGAACTATGGCTCG ATTCTGGTCTAAATNCGTCGATGAACAGATTTATGTAACGGCNATGAAAGTTGTGGGGAAGACCGGAAAA GAGAGAGATGCTGTGGTTGAAGCGACGAGAGATTTNTTGATGTTTTTGGAGAAAGANCTTNTTGGGAAAN ATTTNNTCGGTGGGAAAAGTTTAGGGTTTNTGGATATTNTGGCGACTTTGGTGGCGTTTTGGCTGATGAN AACGGAGGAGATCGTCGGGGTAAAGGTGGTTCCGGTGGAGAAGTTCCCCGGAGGTACATAGATGGGTTAA NAATTTTTTTGGGNATNATGTTATCAAGAAAATG >gi|2764170|gb|R64848.1|R64848 13352 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167L8T7, mRNA sequence AACCTTCGGTTGTTCCTGTCCCTGGAGGAACTATACATCCATTGACAAGGTATGTAATGAATTACCTCAA CTTGATCTCTGACTATAGGGAAACGTTGATTGANCTCATCATGACGAAACCATGTCGGGGTTTGAAATGT ACCAATGATCGAAACGNTCCGGATATGGATATCTCTNAGCTTGAAGGAATATCTCCGTTAGCTTTGCATA TNATATGGACAATGGTGATGCTACAATTCAATCTAGAAGAGAAGTCTTTGCATTACAGGGACGNACCTTT ATCTCACATCTNCGTCATGAACAATGTCCCATTACATAGGTTCAGAAGGTCAAAAGCTCTCCGGGNGCTA ATGGGNGTTGNTNAGGGGCCAAGTNTTTAAGGAAGCTTACCGGGNTATTTTGGCCAAGGAGCTTCCANGT TTCNNGNGGGCTNCATGGGCCAGGGGTNTTGA >gi|2764169|gb|R64845.1|R64845 13349 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167L24T7, mRNA sequence AGCTATCGAAAATTCTGAATCTGAAAGGTTTGAGTGAAGATGTCTTCAGATCGGAAGGTTCTAAGTTTNG AAGAAGTTTCAAAGCACAACAAAACTAAGGATTGTNGGCTTATNATTTCCGGCAAGGTGTATGATGTGAC TCCATTCATGGATGATCATCCTGGAGGCGATGAAGTCTTGTTGTCCTCAACAGGGAAAGATGCTACAAAT NATTTTAAAGACGTTGGTCACAGCGACACTGCAAGGGACATGATGGACAAATATTTCATTGGTGAGATTG ATTCGTCTAGTGTTCCAGCAACTAGGNCATACGNTGCACCACAGCAACCAGCCTACAACCAAGGCAAGGC ACCAGAATTCATTATCAAGATTCTTCCAAGTTCCTTGTTCCGATCTTAATCTTGGGGGTTTGGCTCTTTG TCGNCCGTAACTNTTNCCAAGGANGGCTTGANGAAGCCAAAGNTTTCTTTGATGCTTTNNAATTGATNTN TTTNCCGGCCTTTGGNTAANTNTTTTTNGGAAAAAGG >gi|2764168|gb|R64843.1|R64843 13347 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167L1T7, mRNA sequence ACCAAACACATAAAAGAGAGATTTAATACAAAAGAAAGAGAAAAAAGAAAGATATGGCAGGNCTCATCAA CAAGATCGGAGACGCACTCCACATTGGAGGAGGCAACAAGGAAGGTGAGCACAAGAAGGAAGAGGAACAC AAGAAACACGTTGACGAGCACAAGANTGGTGAGCACAAAGAAGGTATTNTTGACAAGATCAAAGACAAGA TCCACGGTGGTGAAGGTAAAAGCCACGNCGGNGAAGGCAAAAGCCACGNCGGTNAGANGAAAAAGANGNN GG >gi|2764167|gb|R64841.1|R64841 13345 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167L10T7, mRNA sequence CAATCCTTTCCTTTCATTGTAGTTAAACAAAGATTACGATTATGGCCACATCAGCTATCCAACAATCCTC CTTCGCCGGCCAAACGGCTCTCAAGCCCTCCAGCGACCTCATCCAAAAGGTGGGCGTCTTGGGCGGTGGC CGTGTGACCATGCGTCGTACCGTCAAGTCTACTCCCCAAAGCATCTGGTATGGACCAGACCGTCCCAAGT ACTTGGGACCATTCTCGGAGAACACACCGTCTTACTTAACTGGAGAATACCCCGGAGACTACGGCTGGGA CANCGCTGGACTCTCGGCTGACCCGGAGACATTCGCTAAGAACCGTGAGCTTGAAGTAATCCACAGCAGA TGGGCTATGTTGGGTGCTCTTGGGTTGCACATTCCCTGAAATTTTTTTCCAAGAACGGTGTTAAATTNGG GGAAGCCGTNTGGTCAAGGAAGGNTTTAAGATTTTTTAGAAGNGGGTTTNTTNCCTTGGAACCNTACTTT TTCCCGGGAANGNTTTTAGCATTTGGGNTTTNAAGTNNCNATGGGTNTTAAGGTAAAATTTGGGGNGCCC TTGGGGGGGTTCCCGTTNTCCGGGNGGTNNCNTAANTTNTT >gi|2764166|gb|R64838.1|R64838 13342 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167K5T7, mRNA sequence CAATTCTATCCAAAATCAACCCAAAAAAAGAAAGAAATATGTGGGATGAAACTNTAGCCGGACCTAAACC GGAGCATGGCCTTGGCCGCCTCCGCAATAAGATCACCACCCAACCCCTTGACATCAAAGGTGTAGGAGAA GGGAGCAGTAGTAAAACTNTGGCGGCGGTGGCCGGGAGTCCTGGAACTCCGACGACGCCAGGTTCGGCGC GTAAGGAAAACGTGTGGAGAAGTGTGTTTCATCCAGGAAGTAACATCGCCACTAGAGGAATNGGCACAAA CCTNTTCGACAAGCCTTCTNACCCAAACTNTTCCACCGTCTACGGTTGGCTATACAGCGACGGCACTAGG NGCAAAGCACCCTTTTNGCCCGNGAGGGGTAGAGTGACATNNGGATNNTTGTAAAATAAATTATTNTTNT TTANGGCCCGTGTTTATNGTTCCTGTTTNGGCTAATTTTTGG >gi|2764165|gb|R64834.1|R64834 13338 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167K18T7, mRNA sequence CAAGGATAGGTCTGGCTTCGAAGGTGCATGGACATCAAACCCTCTAATCTNCGACAACTCTNACTTCAAG GAACTCTTGAGCGGAGAGAAGGAAGGCCTTCTTCAGCTTGTNTCTGACAAAGCACTATTGGACGACCCTG TTTTCCGTCCTTTGGTCGAGAAATACGCTGCTGATGAAGATGCCTTTTTCGCTGATTACGCTGAGGCCCA CATGTAGCTTTCTNAGCTTGGGTTTGCTGATGCTTAAGCTGTGACGTATGCNCTGTGTGTGTGTGTGTGT CTCCCCGAGAGTCATGGCTGTTTTTGGTTGGGGNCTGGAGGGGTCGCATTTGCATTTGAAACTTTTGTCA TATGATTTGCTTAAATGGACCTCTCGGNATTTACGGAATNCTGGTTTTTTTCCGGTGGGGTTGTNATTTG AANAANATCCCTTGGCNGTTTTTNCCTGNTTANGCACATTAANTAAAATTAAAATTTCCCTCGG >gi|2764164|gb|R64829.1|R64829 13333 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167J23T7, mRNA sequence CCGAGAGCCAACTAGCGAGTAGAATCAACTATCAAGCAATGGCATCGATGACCATGACCGCTACCTTNTT CCCGGCCGTCGCCAAGGTTCCCTCAGCCACCGGCGGACGAAGGCTCTCCGTAGTCAGAGCCTCCACGAGC GACAACACACCCAGCTTAGAAGTCAAGGAACAGAGCAGCACCACAATGAGGAGGGACCTCATGTTCACGG CTGCAGCTGCANCGGTTTGTNCTTTGGCTAAGGTAGCCATGGCTGAAGAAGAAGAGCCCAAGCNAGGGAC AGAGGCGGCCAAGAAGAAATACGCACAAGTTTGTTTCACAATGCCTACGGCCAAGATCTGCCGGTACTGA TTCAACAACCCACCTTCTTGATGTTTATCTNNCTNTTTTAAATTTCGGTAAATTTTTNAAATTAAGTTTG GGCTGNAATCGNATNTTTGTNATAATTTNCCAAAGGCCTTTTTTT >gi|2764163|gb|R64815.1|R64815 13319 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167H6T7, mRNA sequence ACTACTCTNACTGTAATCCCTTAGATCTNCTTTNCAAATTTNAATGGCGTCCGGTGATGTTNAGTATCGG TGCTTCGTTGGAGGTCTAGCATGGGCCACTGATGACAGAGCTCTTNAGACTGCCTTCGCTCAATANGGCG ACGTTATTGATTCCAAGATCATTAACGATCGTAAGACTGGAAGATCAAGGGGATTCGGATTCGTCACCTT CAAGGATGAGAAAGCCATGAAGGATGCNATTNAGGGAATNAACGGACAAGATCTCGATGGCCNTAGCATC ACTNTTAACGAGGCTCAGTCACGNGGAAGCGGTNGCGGCGGAGGCCACCNTGGAGGTGGTTGCGGTGGAT ACCCAAACGGGCGGTNGGTGGAGGTTACTCCGGTGGAGGTGGTAACTACG >gi|2764162|gb|R64814.1|R64814 13318 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167H4T7, mRNA sequence GAAAATGGCTTCCAAGACTTTCCTTCTTTTGGGTCTCTTTGCATTTNTTTNCATCGTCTCAGAAATGGCT GCNGCGGGCACGGTGAAGTCAGAGAGTGAGGAAACTNTGAAACCTGAACAACATGGTGGTGGATTCGGTG ACAATGGAGGAGGAAGATACCAAGGAGGAGGCGGCCATGGTGGCCACGGAGGGGGAGGATACCAAGGAGG AGGAGGACGATACCAAGGAGGCGGTGGGCGACAAGGAGGAGGGGGAAGTTACTNCCGCCACGGCTGCTGC TACAAAGGTTACCATGGCTGCTCAAGGTGTTGTTCATATGCCGGAGAAGCGGTTCANACTCAGTCTNGTC ACTAAATCTNCATAATTTTTCAANCCACCATGAGTGTACGGTTTCATTTNTATATACACTTACGGGTGTA TGTANTATTGCCAATACACTTNCGGTTTAAATNAAGTNCCTTAAGTTTTAGGGGGNAACTTNCGGATTAA GTTTNNANAATGAATCCCTTNT >gi|2764161|gb|R64813.1|R64813 13317 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167H3T7, mRNA sequence AAAAATGAGAAAGTTGTTGGCATCGCCGTTTAGTTCATTACTCGCCGTCGTTTTCANTTCCGTCATCTCC GTCGTCAGATNCTGCTCTCCTAAAGATCAGACGGCTCTCAATGCTTTCAAGTCGTCACTGAGCGANCCAA ANCTCGGTATCTTCAACACTTGGNCTGAAAACACTGATTGTNGCAAGGAATGGTACGGTATCAGCTGCGA TCCTNATTCGGGTCGGGTCACNGATATTTCTNTCCGGGGAGAATCTNAAGANGNCATTTTCCAAAAGGCA GGCCGGTCCGGTTATATGTCCGGTTCGATT >gi|2764160|gb|R64807.1|R64807 13311 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167H13T7, mRNA sequence CTGAGCTCAACGCCATTTTTAACGATTTCNAATCTCTGTNTTCTCTGAGTTGTTCCAAGTAATCGGAGGG AACTCGTAAAGTGGAAGAATAGGAGAAAGAGAGAAGGAAGAAGATTTNTNAATAGCTCTTGATCTGGTGA AGAATGGATGCAATTAGAAAACAAGCTAGCAGGTTGAGAGAACAAGTTGCGAGACAGCAGCAGGCTGTCT TTAAGCAATTTGGAGGAGGGGGATATGGCTCTGGTTTAGCTGATGAAGCAGAACTCAATCAGCATCAGAA GCTAGAAAAGCTTTACATATCCACTCGTGCTGCTAANATTTACCAAAGAGGTATTTNTNCGTGGTGTNGA AGGTATATAGTTACAGGGGCAAAACAAGTTGAAATAGGTCCGGAATTNTCTTTGGGTTGCAGGGAATTTG GTNCCGGGNTTCATGTCCGGNTNGTACCGNTTTACNCCGGGGTCACCTNACCNTTGGGGGCCCCCNCCCC AATTGGGNGGACCCTGGAAATTTTTAAGGCCCTTGGCCCCAGGTTCTNNCCTTCGGGATGNTTGGG >gi|2764159|gb|R64806.1|R64806 13310 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167H11T7, mRNA sequence AGGTCAACAATAAGAAAGAGAGAACAGATAAAGAGATAACAAATGANATGGAGGCTGTTGCTGCTGCTTA TNACGTCTTCAACAATGTCGCTAAGCCAAACCACAATTACATAGAAGAAGATGACTTATTGAGGTTCATG ATAAAGGAAGAAGTAGACCTTGTACTCCCATTAATAGAAGATGCCGACACCGGAAAAATCACACGCAAGA CTTTTACAGAATGGGTGGTTAATGTATACACAAGTCGGAAAACTNTAGGGCATTCACTGAACGGCACAAA AACAGCGGTTAAGCAGTTGGGCAAACTTATAACTGGAATCTTGNCCCGTTATCACATTCATTTGTTTTGG NTGGTCTTTCTGGGGTATNGNATCGGCCCAGCTTTTTNTTGGGCTTNTCCCNCACAATTTTTGGGGCCTT NNNTTTNTTGNNCGGNAGGCCTTTT >gi|2764158|gb|R64803.1|R64803 13307 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167F12T7, mRNA sequence AAAGTCTGAAGACAAATTCTTCCATTAGAAGAAGAAGATGGCTCTTCTCTGCTTCAATTCTCTCCCTTCT CTCTCTTCTCTTTCTNCTTCTNCTTCCTCGCGCCTTCTTCAATCTCCGTCTTTCGCTTCTCCAGTTTTNA GCCTTAAACCCAACGCTGTCGAGTCCAAGAACAGAGTCTCTCTCAGTGCTTACAGCTTGAACTCTAGCCA TGGAAGAATTGTGGTGAAGGCGGCTGCTTCTGGCGTGGACGGGGCTGAGCCTGAGAGCAATGAGGAACCA AAGACTGTTGTTGCTGCTGTTCCAGTGGATAAACTACCGTTGGAATCGAAAGAAAGCTAATGAGNAANCT GCTCCTTGGAATTNAGGCTTGAAGATGAAGCTGGCCAAAAAGATTAGGGCTCCGAAGGAAACGGCTTGGT TCGAAANCGTAAAATTNGGGAAGAAGGGGCCGATGGCNACCTTCCAAGGANGANGAAAACAAGNATTTNT NAGNNGCTNAACTTGNTTNNTG >gi|2764157|gb|R64802.1|R64802 13306 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167F11T7, mRNA sequence AGCCGTTTCTACATGTTTATGGAGCTTCGATCGATCAAATTTGAGGAATACTCAGATTTTNNTTTCCTCA TTACCTGTTTTTNCCAAATCTCTTGATTGATGATTTTGGCATGCAGATGGAATTGAATTCTCTGTTTGTG TAGCCTCCCTTCTCTGTTTAGCAGTTTCCGGTGAGAAAAAAACAAAAATCGATGGTTGCCCTTTTTCGAC GTTGATTGTGTTCACCGGATCGGAGTCTTTGACGGCAAAGGATGACAGGAACGTTTCATCGCTTCTNTTG CAACACGTGTCTTGTTATACGATCGTGTTTTGTTAAAGAGATATCCTTCCTTTAAAGAAATGTAACTAAA GTGGACCTTTGTTGGGCTGTATTCTGTGGNTCAATTAATAAACATAATCTTTCCAGTGG >gi|2764156|gb|R64801.1|R64801 13305 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167C9T7, mRNA sequence ACTTTGGACTCTATGACTCTGTGAAGCCTGTNCTCCTCACTGGTGACTTACAGGACAGTTTCTNCGCTAG TTTCGCTCTTGGATGGGTTATNACCAATGGTGCGGGTCTTGCATCCTACCCCATTGACACTGTCCGCAGA AGAATGATGATGACGTCTGGTGAAGCTGTCAAGTACAAGAGTTCTTTGGACGCCTTCAAGCAGATCCTCA AGAATGAAGGAGCCAAGTNACTCTTCAAGGGAGCTGGTGCCAACATTCTGCGTGCTGTTGCAGGTGCTGG TGTGCTTTCCGGTTACGGCAAATTGCAGCTGATTGTCTTTCGGTAAGAAGTACGGGATCAGGAGGGTGCC TAAAGCATTGCTTCTTCCCTCCTTTTTCCGNTTTAAATTNCGGTTTTTAAGGCCNGAAATAAACTNGNGA TGTTNNTGNAANTTTTTTTNNCNTNAAAGCTTNGGGGG >gi|2764155|gb|R64793.1|R64793 13297 Lambda-PRL2 Arabidopsis thaliana cDNA clone 167B18T7, mRNA sequence CCACCACNACCNCCGGTTACCGCAAAAGCCCCAACCTCATCCCCTGGAACCCCATCAACCAATGCACAAG CACCTAGTGGACAAACCCGAATNACTCTATCTNTTCTACTTTCTGTTTTNGCAATGGTTCTTGCCTCTNT TCTACTTCTGTNATCAACCCTTGATCTCATCTCCTCTGTTGATAATGTCTTCCACCCTCGTAAGATTTCC CTGTGTGTGACTCAGTC >gi|2764154|gb|R64784.1|R64784 13288 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166P17T7, mRNA sequence CAATCTAGAGAGACCAAAAAGAGATCGGAAGAGATGGCTTCTACCTCCGCAATGTCATTGGTCACACCAC TTAACCAGACCCGTTCGTNTCCTTTCCTCAAGCCATTACCTCTGAAACCATCCAAGGCTTTGGTTGCAAC TGGAGGCAGAGCACAGAGGCTTCAAGTTAAGGCCCTCAAGATGGACAAGGCTTTGACCGGTATCTCCGCG GCTGCTCTTACTGCTTCGATGGTGATTCCGGAGATAGCTGAAGCTGCTGGTTCTGGAATCTNTCCTTCCC TCAAGAATTTNTTGCTCAGCATTGCTTCTGGTGGCCTCGTCCTCACTGTNATCATTGGTGTCGTCGTCGG NGTCTTCAACTTTNACCCCTGTCAAGAGNACCTAAGACCTATAATATCTTTTTTTACCATCATTATTGGA AACCTGGNCCCCCTCCTGNGGAATTCGGTTCAAATGTTGNAGCAATTNACCTTTTGGGNAAAAGNAAATT TTGTGGNTTCCCNAATTCGG >gi|2764153|gb|R64782.1|R64782 13286 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166P15T7, mRNA sequence CCTTAATTNTTTTTNCGTGTATAGGTACAAGTAATGCTATTACAGGTTCGGTGAGCTGACCACAGAATAC GGCAAGCCACCCGGGTATGATAGAGCAAGAGGAGTGGAGATAGGGAACAAAGATATCAAACTTGAACACT TAGAAGANGCTTNCACAACATCCAACTGGNTAGTNCGTATTTNCAGAGTTAAACCNCCTACAAATAGGTT GTNATGCTTCANTGTTACCAAAATGGTTTTAGATAGTGGA >gi|2764152|gb|R64771.1|R64771 13275 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165O10T7, mRNA sequence GATGACGACAGCATCTACGGTATTTNTNCTACCGGCCAATGTCACCTCGGTCGCCGGCGCTTCGTCGTCC AGGAGCTCCGTGTCTTTCTTGCCGATGAGAAACGCCGGTTCTAGGCTCGTAGTCAGGGCAGCCGAAGATC CTGCTCCGGCTTCCTCTTCTTCAAAAGATTCTCCGGCAGCTGCCGCTGCTCCGGATGGAGCTACTGCCAC CAAACCCAAGCCACCACCGATTGGTCCTAAGAGAGGGTCTAAGGTCAAGATTCTAAGGAGAGAATCCTAT TGGTTCAAGAACGTTGGATCAGTTGTTGCCGTTGATCAGGACCCTAAGGCTTGGTACCCGGTTGTGGGTC CGGTTCGCAAAAGTCAATTTCGGCAAACATATTGNCCAACAACTATGNATTTGGTGAGGTCGAGAAGTTT CAGGTTTAATGGGGGATTNAAAAAACNTNGNGATTTTTTNCCGGTTTNTCCCGTTTNAAATTNNCCCAAN CGGTTNTCCCGNAAAGTTTTCCATTTTTTNTCNT >gi|2764151|gb|R64765.1|R64765 13269 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163O7T7, mRNA sequence ATCCAAAATCAACCCAAAAAAAGAAAGAAATATGTGGGATGAAACTNTAGCCGGACCTAAACCGGAGCAT GGCCTTGGCCGNCTCCGCAATAAGNTCACCACCCAACCCCTNGACATCAAAGGTGTAGGAGAAGGGAGCA GTAGTAAAACTNTGGCGGCGGTGNCCNGGAGTCCTGGAACTCCGACGACGCCAGGTTCGGCGCGTAAGGA AAACGTGTGGNGAAGTGTGTTTCATCCAGGAAGTAACATCGCCACTAGAGGAATNGGCACAAACCTTTTC GACAAGCCTTTCTCACCCAAACTNTNCCACCGTCTACGATTTGGCTATACAGCGACGGCACTNGGAGCAA AGCACCNNTTGAGCCGNGAAGGGTTAGAGTG >gi|2764150|gb|R64758.1|R64758 13262 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163N14T7, mRNA sequence AATACAGAAGGAGAAACCTTTGGAACTCCCTCCACAGCCTCCCAAAACCAGGGATTTTAGAGGCAGCACC ATGGCTCCTTTTGGTGGGAACAACATTCTTGTCCTATACAGTTGTCCCGCAGAATCCTCTCCCAAATACT TCGTTCAGGTTCTGCACAATGAGCATCCTATTGCAGTGCCAGGTTGTGATGGAAAAGATTTCTGTCCTCT TGAAGATTTCAAGGCCAAAGTGGTAACTCCTCATCTAAAGCATGCTTTTGACAACCTTTGCAATGCTGAT CTAAATGACCTGAAACAGAAGNCTGCATCAAGTAAGTTATCTATACTGTCAAGTTGGCTGTTTGGGTCAA GCCACGGTACCCGAGCTCTAGTTACTTCACAGCTCTTCTTACATACTGGCTGNTTCAGGTTTGACCTGAA TNNCACAGGGNATTGTTGGCCTGTTTTTTTTTTNNCCCCTGNCANATTTNNTTCTTGGTAGGTCAANCCG GTAANTTGAANATTTTGGNTTNAGNNTTGGG >gi|2764149|gb|R64754.1|R64754 13258 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163M21T7, mRNA sequence AATTCAGATGTTATTGAGACTGTAGCAGAATCTAAACCGAAACGAGCCCCGAGAAAAGCTACACTTGCTA CTGAAACAAAGGCGAAGAAGAAGAAACTTGCAGCGGGTTCTACAGTTAGAGTTTTATCAGGGACATTTGC TGAATTTNTTGGGAACCTAAAGAAACTAAACCGCAAAACTGCAAAGGCAACGGTGGGATTTACTTTGTTT GGGAAGGAGACACTAGTGGAAATTGACATCAATGAACTTGTTCCTGAGATTCAATCTTAAATAGTTTGTT CACTAGAATGTGAATTTTTTGGTTTGAAATATAAATCCATGATCACTTCAC >gi|2764148|gb|R64752.1|R64752 13256 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163M16T7, mRNA sequence AATATTAAGATGACATCTACTATGGTTCTATTCCTCCTTCTTCTTCTTGTGTTTCCGCATATGGATAAAG CCCTAGGCGCACACGAGGAATCCCAGAAACAAGGTGCAGAAAAGACTTACCATGATGCACGCTTTACTAT TCCTATTAAGCCAAAATATATTCCTAAGGTTATACGCCCTACGCCAAAAGATCCGCCTATTCCGGAATGT CTTCGAAAAGGCACATGTAGTCGTCTTCATTTATCTCCTCCTCCGCCCCAGAGGTCTTTCAAAGGCACAA ACGNACCTGGTCATTGACCTCAATCTAGCTTCGAATGCGTGTGTGTGTGCATGTTTCTTACANNGTGGTT TGGTTTGTGGCNTCTGTCTTTTGTTTACCCATGCATGTGTTTGTCAAATTTTATAGGTTTGTCGAACCGG GCCGCTATAATNAAATAAAACTTGNATTTCCCTTTTGTGTT >gi|2764147|gb|R64751.1|R64751 13255 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163M15T7, mRNA sequence TTCTTTTCTCTTCTCCTTCCACTTCCACTTCTTCTATCTCTCACAATTCAGCAATGGCTTCTNCTATAGT NACCTCTAGCTTGAAGCCTTTAGCCATGGCCGATTCTNCCTCTTCTACCATTTTNTCCCATCCTTCCATC TCCTCTACCATCTNTTCCTCCAGAATTCGCAGCTCCAGTGTTTCCCTCCTTACCGGACGCATTAACCTGC CCCTCTCTTTCTCTCGCGTCTCTCTATCTCTTAAAACCAAAACCCACCTTAAAAAATCCCCCTTTGTCTC CTTCGTTGCCCAGACTTCGGATTGGGCTGAAGAAGGTGGAGAAGGGAAGCGTCGCTGTTGAGGAGNNCGA GAACAAGTTTAGAGGTCACAAAGATGTGAGGCGAAGGNTGNTTNAGGAGCGAAGGAGATTCGNNGCNAAG GAGNTTNTNAGCGAGGAGGTTTNGG >gi|2764146|gb|R64748.1|R64748 13252 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163I14T7, mRNA sequence AAAGCTCATGGGGTAGGAAGCTTATCGTGCAGAAACGTAGGGCTAACCTTAACGACTTTGATAGGTTCAA GATCATGTTGGCCAAGATCAAGAAAGCTGGTGTTGTCAGGCAAGAGCTTGCAAAACTCAAGAAGGAGATC ACTGCCTGATCAAATATTATCTACAATTCTGTTGTCTTTCTTTTTTGATTTTGGATTCGGAAATTAGTGT TTTTGGNACTATCAATATCAGTATGTGCTCAATTATCAGACATTATTCAAGTTTGAAACCTTGTTTGCAA AACTCAAAGGTTTTTTGNCCTTTT >gi|2764145|gb|R84194.1|R84194 16153 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159M9T7, mRNA sequence TTTNAAGCNATNGTTTCCAGGCTAAAGTTGATACNACCAAGAAGGCTGATCCTAAGGCCAAGGCCTTGAA GGCGGCAAAGGCTGTNAAGTCTGGTCAAGCCTTCAAGAAGAAGGACAAAAAGATTAGGACCAAGGTCACC TTCCACAGGCCAAAGACTCTTACCAAGCCTAGAACTGGTAAGTACCCAAAANTCAGCGCTACTCCAAGGA ACAAGTTGGNTCACTACCAAATCCTTAAGTACCCACTCACCACTGAATCTNCGATGAAGAAGATTGNNGN CAACAACACTCTTGTTTTTCATTGTTGNCATTCGTGCTGNCAAGGAAGGAGGTTAAGGGTNCTTGTTAAG GAGGTTGT >gi|2764144|gb|R64742.1|R64742 13246 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159M2T7, mRNA sequence ACTGATTGCNGGTGAAAAAAGAGAAGAAAACGGTGCGATCAAGAGGATGATAGAACAAGATAAAGGCTCT TCGGATTTTTTCACGTACGGTGCAAATTTAACGTTTGTNAATCTTGATGAAATAGATATGTATGANCTTG AGATCAACGGAGGGAAGCCGGATTTCGTAAACTACACGATTCATGGGGTCGGAGCAAAGGTGTTGTTTTG GTTTTNCCCAAGCAAAACTTTGCAAGGATTGTAAGTGTAGTGATGCCTGANGAAGACCTTGCAAAACTCA AGGAGGAGGTGACTAATATGATTATATAACTTTGTATCTCCTTCTTGTTGTTATACATAAATGCTGTTTT TTNACCTCTTTGTAATTTCATTATCGNAATTGTTGGGAAGCCTATCAATAAAATTGTTTGACCTGNTTAC TT >gi|2764143|gb|R64735.1|R64735 13239 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159L15T7, mRNA sequence TCGCATCAATGGCAGAAGAAAAGAGCTTCAAGTATGTAATCGTCGGAGGTGGTGTCGCCGCCGGATACGC GGNNNGANAGTTCTTCAACCAAGGTGTCAAGCCTGGTGAACTTGCTATCATTTCCAGGGAACAAGTTCCT CCATATNAGCGTCCTGCACTTAGCAAGGGATATATCCACCTCGAAAATAAAGCTACACTTCCGAATTTNT ATGTTGCTGCTGGAATTGGGGGAGAGAGACAGTTCCCTCAATGGTACAAAGAGAAAGGTATTGANCTGAT TTTGGGCACAGAGATTGTCAAAGCAGATCTTGCTGCGAAGACACTTNTNAAGTGGGGNCTGGACAAGTNT TCAAGTACCCAAAACTTTGCTAGCGGCAACTGGGTTCTCCTGTCATAAGGGTTGTCAAGATTTTGGGNGT CCNAGGGTGCAAATTNCTNANGATTNTTTTNTTCCCTTAG >gi|2764142|gb|R84193.1|R84193 16152 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159L11T7, mRNA sequence GCAACCTTCGATTTTNGTTTATNCGCATCCATCGGAGAGAGAAAACAATCAATAAGCGACCATGTTGGTG TACCAAGATCTTCTNACCGGTNATGAGCTTCTNTTTNANTCTTTCCCTTACAAGGAGATTGANAATGGAA TCCTCTGGGAAGTAGAAGGAAAGTGGGTTACTGTGGGAGCTGTAGATGTNAACATTGGTGCCAATCCATC TCCTGAAGAAGGTGGTGAGGATGAAGGTGTTGATGACTCTACTCAAAAGGTTGTTGACATTNTNGNCACC TTCAAACTTCAGGAGCAACCAACTTATG >gi|2764141|gb|R30619.1|R30619 13224 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166K22T7, mRNA sequence CACAACTCCACGACGAGAGGAAAAAAAAAAACTCAGAGAGACAAATCTAAATGGCGATGATTACGCGCAA CACCGNCACGCGCCTCCNTNTCCTCCTCCAATCTNAACGCGCCGTCGCCGCTGCCTCGGTCTCTNACCTC CACACATCCCTTCCCGCTCTCTCTCCCTNCACATCACCGACTTCCTANACCAGACCTGGTCCTCCTTCGA CCTNCCCTCCTCCTCCTGGTNTCTNTAAAGCGGCCGAATTTNTNATCTCCAAGGTCGATGATCTCATGAA CTGGGCTCGTACCGGATCGATCTGGGCCTATNACCTTTTGGTCTT >gi|2764140|gb|R30618.1|R30618 13223 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166K20T7, mRNA sequence TCACTGTAATCCCTTAGATCTNCTTTTCAAATTTNAATGGCGTCCGGTGATGTTNAGTATCGGTGCTTCG TTGGAGGTCTAGCATGGGCCACTGATGACAGAGCTCTTNAGACTGCCTTCGCTCAATACGGCGACGTTAT TGATTCCAAGATCATTAACGATCGTAAGACTGGAAGATCAAGGGGATTCGGATTCGTNACCTTCAAGGAT GAGAAAGCCATGAAGGATGCGATTAAGGGAATGAACGGACAAGATCTCGATGGCCGTAGCATCACTGTTA ACGAGGCTCAGTCACGNGGAAGCGGTGGCGGCGGAGGCCACCGTGGAGGTNGTTNGCGGTGGATACCCAG CGGCGGTGGTGGAGGTTACTCCGNTGGAGGTTGTAGCTTCGGAGGTTNCGCCGGTAAACCGNAGNTTNAN GAGGTACAACGNCGCNGNGGTTATTTCTNAAAAGTTGTTGTG >gi|2764139|gb|R30614.1|R30614 13219 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166K15T7, mRNA sequence TTGTTGGTGTCTCTNAGGAAACNACCACTGGTGTTAAGAGGCTTTACCAGATGCAGCAAAATGGAACTNT TTTGTNCCCTGCCATTAACGTTAACGACTCTNTCACCAAGAGCAAGTTCGACAACTTGTATGGTTGCCGT CACTCACTCCCTGATGGTCTCATGAGGGCCACTGATGTNATGATCGCTGGAAAGGTTGCTGTTATCTGTG GATATGGTGATGTTGGAAAGGGTTGTGCTGCTGCCATGAAGACTGCTGGTGCTAGAGTCATTGTAACTGA NATTTGATCCCATCTGTGCCCTTCAAAGCTTTTNATGGGAAGGGACCTTCAGGTTCTTACCCCTTNAGGN TGTTGTNCTCAANAANCTGGTATCTTTTTNTAAACACCANCGGT >gi|2764138|gb|R30612.1|R30612 13217 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166J23T7, mRNA sequence TNATCCTTCTTTGGTGGAGGCCCCTTTGGAGGTAATACCAGCCGGCAAAGGAGGCAGAGGCGTGGTGAGG ATGTTGTTCATCCCTTGAAGGTATCTCTTGAGGATGTGTACCTTGGTACAATGAAGAAGCTTTCACTTTC TAGGAATGCTCTCTGCTCTAAGTGTAACGGAAAGGGATCAAAATCTGGAGCCTCCTTGAAATGTGGAGGG TGTCAGGGATCTGGTATGAAGGTGTCTATTAGGCAGCTTGGACCTGGAATNATCCAGCAGATGCAGCATG CATGTAAATGAATGCAAAGGGACAGGTGAGNCCATCAATGATNCGGGACAGGTGTCCACAATGCAAAGGG GGCAAGGTCNTTCCTNAGAAGAAGGGTNCTTTAAGTTNATNTGGGAAGGGNNTNCAANCACAGTNAGGAG TTCNNCATTTAGGCCAANCG >gi|2764137|gb|R30609.1|R30609 13214 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166H5T7, mRNA sequence GTTTTTNTCGTAGCTTGAAATAAGATTCATCAGAAGAGTAAATAAACATCAAAATCCAACAAACCAAACT AGAAAAATNTCGGTAGTTTTACTCTCTNCTACTTCTGCAACANTCACCAAATCCCAATCCAAAAAGATTC CCTTTTNATCTCCCACCACAAAATTCCCATTAANGGTCTCAATTTNTCCATCAAGATCGAAACTTTTNAN CAACCCTTTACGNGTGGCGGCGCCGCCGTCTATACCCACTTNGGATTCGGCGGAGGAGAAGCGGNTCGAA GAAGAATNCGGGTGGTGATAAGGAAGAAGAAGGGGTCTGAGTTCAAGTGGG >gi|2764136|gb|R30608.1|R30608 13213 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166H4T7, mRNA sequence TTTGAGAAACAAAAACGATGGAGATGATGAAGATTGATCCTTTATTCGATCGTNCCAGTAAGCTTAAAGC TTTCGATGAAACGAAAACGGGTGTNAAAGGACTCGTCGACTCCGGAGTTTCACAAGTTCCACGCATCTTT NATCATCCAACTGTCAAATTATCAACCCCAAAACCACTTCCCTCGGACCTGCTACATCTCAAGACGATCC CAACGATCGATCTCGGAGGACGGGACTTCCAGGNCGCGATTAAGCGCAATAACGCGATTNAAGNGATTAA AGAAGCAGCAGCGANGTNGGGGGTTTTCTTCCAGGGTGNTCAANCATNGNGGTTTCGNTTTGAACTTNTT >gi|2764135|gb|R30606.1|R30606 13211 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166H15T7, mRNA sequence ACATGATTGCGGCTCGGAAAAGAGAGAGGGAGTACTTTNCCAATACTACTGAGTATAGGCACCTTGCTAA TAAAATGGGTTCCGAGCATTTGGCAAAGATGCTCTCCAAGCATCTAGAACGTNTGATCAAGTCGAGAATT CCTGGCATTCAGTCACTTATTAACAAAACAGTATTAGAGCTGGAAACTGAACTAAGTCGCCTTGGAAAGC CTATTGCAGCTGATGCAGGGGGGAAGTTGTACTCAATAATGGNGATATGTNGGCTTTTTGATCAAATATT CAAAGAGCATCTTGATGGAGTGCGNGCTGGTGGTGNAAAAGTGTCCANCGTGTTTTTTAACCNCCTTNCT NNGGTCTTAAGGNGCTCCCNNTTTTTCAAGAAGNTTTGCGGT >gi|2764134|gb|R30605.1|R30605 13210 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166H14T7, mRNA sequence ACTCTNCGTTCGTTTCATCTCCCAATTNAGTTTAACGACACCAAATTCGTCTCACGGCCTTGTTTCCTGG CGAGATCCTTCCCGGTGGTTCGTTGTTCAAGCACCAGAGACGTACCTAAGCTTGAACTCTTCAGCCGCGA AAAATTCGACCGGATTCTTCAAGATCCGCCACTTATTGAAAAAGCCGAATCCGAACTCTCAGATTACTGT TCGACGCTTGAAGGTGATGACTCTTACAGTTTCTGGAGAGCTTACTTTGNACTCAAAGATCTCGAAAGAN AGNAGCCAANGGTTGAAGTTNAGAATTTNATTTTNCCAAAACAGGTGGTTTTAAAATCGTTAATCGGGGG NGTTTNNAATGGGNGTTNCTTNAATTGGG >gi|2764133|gb|R30601.1|R30601 13206 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166E1T7, mRNA sequence TCATTGCTCTAATTGTATTGATGGTTCTAACTTTNAGTTTTGCTTAANCGTGTAAACNCTGTAGTTGAAG TTTTAGTGGAACTTGGTTTAGTAGAATAGCTGGTTGTTGGGATCTGATGGCAGATTAGAGAAATNCTNAT TGTAACTTTTTAGAAACTGCAAACTTCTTTNATTAGAACTTAGTTTGTAGGTATCATAGAAACTAGTTGG AGCTGGAATGCTACAAGAGGTTATTCTATGGTTGNAACCTTACTTCCTTGTAACCAAAGGCAGGTTTAGT CTTTAANGNGGTGTTCAGGTAATNAAGGTTTGNNCANCCTCCACA >gi|2764132|gb|R30588.1|R30588 13193 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166D12T7, mRNA sequence AACTAACAATGATAATAAGAAGCGCGTNTNCACTGGACCTTAACCTACGCNCCGCCCAGAAACCGTCTGT NCCAAGGNTGGTAACCACGGCTCGAACCGTCTCTCCTGCTACTCCTCGTNTTGCTAAACCGATTACAAGA GCTTCTTCAGATGGAAACCTCTACAAGATTCATTCGCCGGAGAGCATAACGAAAACCATCAGCGTATATC ACGAAGAAACGGCGTCTTTAAGGGTTTTGGAAGGNTCTCGACTCCCCCAAGGAGGTTCCAACGGTGGATT TGGTGGTAGAGNCGGAGATGGTTCCGGAGGTNGCGGTGGAGGNTGNAAGGTTGGNAGCNTNGATTGGTTA TTT >gi|2764131|gb|R30585.1|R30585 13190 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166C2T7, mRNA sequence TCCAGCCACCGTAGGGNTAATTCCGTAAATTTNTAACANAAACTCCATTCCCGCGGCGTATGCAGAGGGC AATCCCGTAAACTTAACCCATCTCCGGTGATGAATAATATCAATTCCTTCACGCCGGAGTGATTTTCCAC AAAAAAATAAGATATGAAAGCAAATCGCGGCGGCGGAGAGCACGGCCAACACGAGGCTCTAAAGCTTTCC AGTTTCTNCTTCATGCCGGAGCGGCCACGTGATTACCTCGTGCTTTTAACACGTTTNTCCGTCCTCACGT GCCTCATCGTCTCCGTATCTNTTNGTTCTCCGGGNCACTTTTTTATCCCCTTCCGGTCGAGACTATTTCC ACCACCTACGGGTCTCAAATTNAACCGCCGTNNCCNCAAAAAGGCCATTGNTTTTNCTTNCGTNCG >gi|2764130|gb|R30581.1|R30581 13186 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166C18T7, mRNA sequence ATTAGCTACATAAGTNCTATAATGACCCTTTACGAAGGAGATGTCATCTTGACAGGCACACCAGAAGGTN TTGGACCTGTAAAGATAGGTCAGAAGATAACGGCCGGAATCACCGGTCTATCTGAAGTTCAATTCGATGT GGAGAGGCGTGTAAAGCCCTTGANCTAATAAGTGGTTTTATTTATCTTTCATACAAAAATGTCAATTTTA TAAAANCATCTCTAAAATTTNNATCACTTACTGTGTTTCCTAAGGAAGGGAGAAATAAAACTNGTTACTC ATTTNATTTGTAATCTCTATAACCANTGGCTCTAAGNCCGGTTTAAATTGTTTAAAAAANNANAC >gi|2764129|gb|R30570.1|R30570 13175 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166A6T7, mRNA sequence CCACAAACCTATTGGCCCTACGGAAAATCCCGCGACTACCCCAACGGCAAGTTTTCCGACGGCCACATCG TCCCCGACTTCATCGCTGATTTNATCTCTATTCCGAATGGAGTACTCCCACCGGTGCTTAAACCGGGCGT TGATATTTNACGTGGAGTCAGCTTTNNCGTCGCCGATGCTTCTATTCTCGGAGCGCCGGTTGAATCTATG ACACTAAATCAACAGGTGGTTAAATTCAAAAATATGAANTCGNATTGGAACGNCAGCTACATCGAGAAAT CACTGTTTATNATATNCATTGGTACGGAAGATTATTTGANTTTTNACCCAGGGCCAACCNCAATTGCAGA CGGTTCTTNCTNAAGAA >gi|2764128|gb|R84192.1|R84192 16151 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165N5T7, mRNA sequence AAAGAAAACTGGTGTACGCGGCCTAGTCGATCTNCTGCTTGGAAACGCAGGTCCTTTTNCTGCATGTGGA GATTGGNTCTTGCCGGACCTCTCAATCCAGGGATCAATGAAGCTAAACGCTAGTNTGCAGACTTTTCCAA ACACGTTCTACTTCAGCTATGCGACTAAGCGTACCACTAAACCTNTTGGAATNATGACTGTNCCTTCAGG TGTNATGGGGATTNANCCTCTGCTTTTAANCCGCGTGTTGCAGATGAGTCAGTGGCAATTTCCTCGTG >gi|2764127|gb|R30560.1|R30560 13165 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165N2T7, mRNA sequence AAGTGTCGAACAAATACTACTTAGGTCCAGCTCCATTGGAAGAAATGGCGAGGCAAATCGCTACGGCTTC GGGACCTTNTGGGAACAACCGAGAGTATCTTTNCAAGCTAGAGAAAGCAATGTTCGACATTNAGCATGAG GAAGAGTATGTAATTGATTTAGCGNATNAGGTTAGGAAGCAACTCGATTTACCGGAGGAAGTGAAGGCAT TGTTGAAGCCTATTGTTTCTNATGTATCCGTCAAGTCTCAAGCTCATGTTTCCACTCGTCAACGGGTCTT TGCATCATGAAGNCAGCAAAAGTTATGGGGCTAACTTAAAAAAGCATTNTGGTTGNCGNGGGCTAATTNT TAACCTCCTTTATTCTTTCCAGCNTTAATATTTTGGNTCANCATCTNGACCCNT >gi|2764126|gb|R30557.1|R30557 13162 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165N1T7, mRNA sequence TCCTAGATTCATATTCAAATCAAGAAATNACTCTNGCTAAGAACCAAAAATCATCATTGTNACGACTATA CAAGAAAGTTTCCTCGAAGAGATCAGAATCGTCAAGAAACCTTGAAGACGAATCAAGAACGAGCAGTAAT AGTAGCGGAAGAGGCTCGTTAAACGTTAACGAGCTAAGANCCGTTTTTAACTATATGGNTGCAAACTCAG ACGGGAAAATNTCCGGTGAAGAGCTACAAAGCTGCGTTAGTCTCTTAGGCGGCGCGTTATNGTCACGTGN GGTGGTGGNAAGTGGTGANGTCANTCAGNCGTTGNCCGGTGACGGGTTTTTT >gi|2764125|gb|R30551.1|R30551 13156 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165L19T7, mRNA sequence GTTGAAGCTTTTACAACTTCCTTGCTTTCAAATCCTCCAGTGNTAATAAAAAGTTTAATTCTTGGCAGAT TCTTTTNTTTGCCACTACAAAAGCACAATTATTTNTCCGAATAATTTATTATGAAAANCAGGTTTGCAGA GATGTGGAAAGAGCTGCAGATTAAGGTGGCTTAACTATCTAANGCCTGGGGTTAGANGGGGCAANTNCAC TCCTCAAGA >gi|2764124|gb|R30550.1|R30550 13155 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165L17T7, mRNA sequence AAAAATGTNTTGCTGTGGAGGAAACTNCGGATGTGGATCTGGCTGCAAGTNCGGCAACGGTTGTGGAGGT TGCAAAATGTACCCTGACTTGGGATTCTCCGGCGAGACAACCACAACTNAGACTTTTGTNTTGGGCGTTG CACCGGCGATGAAGAATCAGTACGAGGCTTCAGGGGAGAGTAACAACGCTGAGAACGATGCTTGCAAGTT TGGATCTGACTGCAAGTGTGATCCTTGCACCTGCAAGTNAAGAAGCCTTTTTAAATAAGCAGAGATAATN CGAGTCTNTTTTAATTAATTTAAGTTATTCAANTAAGTAAACCCATATTTTAGGATTGGTTGTTTTTAAG GGTTTGGGTTTNATGTGTAAATAANTGGCNTTCAANCTTTATCTTTTTAGNCNGTTCAATTGNCCTTTTG GNTGTTTGTTTTTGA >gi|2764123|gb|R30549.1|R30549 13154 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165K11T7, mRNA sequence GAAAAAAGAAAGATATGGCAGGNCTCATCAACAAGATCGGAGACGCACTCCACATTGGAGGAGGCAACAA GGAAGGTGAGCACAAGAAGGAAGAGGANCACAAGAAACACGTTGACGAGCACAAGANTGGTGAGCACAAA GAAGGTATTNTTGACAAGNTCAAAGACAAGNTCCACGGTGGTGAAGGTAAAANCCACGTCGGAGAAGGCA AAANCCACGNCGGTG >gi|2764122|gb|R30547.1|R30547 13152 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165I6T7, mRNA sequence GTTCGAGAGAAGAATAGTTTGATCATCTTGTGAGAAAAATAATGGCTGCTTCANTNATGCTATCTTCGGT GACATTGAAACCAGCTGGTTTCACGGTGGAGAAGACGGCGGCTAGAGGATTACCGTCGCTCACAAGAGCT CGTCCCTCCTTCAAAATTNTCGCCAGTGGCGTCAAGAAGATCAAGACCGACAAGCCCTTCGGAATTAACG GCAGCATGGACTTGAGGGACGGCGTCGACGCTTCCGGCAGAAAGGGCAAGGGATACGGTGTTTACAAGTA CGGTCGACAAGTATGGAGCTAACGTCGATGGATACAGTCCTATTTACAACGGNGAACGANGTGGTCAAGC GAGTNGGTGACGTGTACANGGGTGGNGTCACCGGATTTGNCAATTTTGGGCGGTAACTNTCGCCGGAATT TTTTTCCCGGNNGGTGCTTTTNNTTNTTNTTCAACANAAAGNCTTTTGGCTNACT >gi|2764121|gb|R30544.1|R30544 13149 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165I15T7, mRNA sequence ATGGGGTTCAAGTTGGTGAGAGGGGCTTACATGTNTAGCGAAGTAGCNTNTGGCGGATTCCCTGGNTTGC AAGTCGCCAGTCCACGACACAATTNAGGATACTCACTCTTGTNACAATNATTGTATGACATTCCTGATGG AGAAAGCATCAAACGGTTCTGGTTTCGGTGTCGTTCTCGCAACACATAACGCTGATTCGGGGAGACTTGC GTCGAGGAAAGCNAGTNACCTCGGGATCGATAAACAGAACGGGAAGATAGAGTTTNCACAGCTATATGGT ATGTNANATGCATTGTCCTTCGGGTTAAAGAGAGCAGGGTTCAATTGTTTAGCAAGTACAATNCNGGTTT TGGACCCCGTCGNAACCCGCTATTACCCGTATCTTTTTTCCG >gi|2764120|gb|R84191.1|R84191 16150 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165C6T7, mRNA sequence CCAATCATCGGAGCAATCATAATCCTCTCCGTNTGCCCCGGAATCTNCATCTNTTTCCGTAAACGAACCA AACAAATCGAGGAACATACAGATTCANAATCCGGAGGAGAAACATTATCANTCTNCAGCTTCGACGGCAA AGTCCGATACCAAGAGATCATCAAAGCAACAGGAGANTTCGATTCAAAATACCTAATCGGAACCGGAGGA CACGGCAAAGTNTACAANGCAAAGCTACCAANCGCAATCATGGCGGTGAAAAAGCTAAACGGAACACCAG NCTCATCA >gi|2764119|gb|R30519.1|R30519 13124 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165C16T7, mRNA sequence ATCATCTNTGGNATGATACTGTCGCTGGTCCACGGCCAGAGAACGGCCTTGGCAAGCTTCGTAAACACCA TACCTTCAGTTTCCNACCTAGCTCCGGCAATNATCAATCGGAAGCTGGAAGTGCGAGATCGTACGGTGAG GATTCGCTACCGGAAGAAGCAGTGAAAGTNACACGTAGTATCATGATAATTAANCCACCGGGTTACCAAG GCAGTTCAGCTCCAGCTTCGCCTGCNGGTTCAACTCCGCNGCTATCACCTTTTTTTCCGCNGATGTCTTC CGTTCTTTGGGGGAAAGGAACCCTTTCGGTTTAGGGAGNNCGGGTCGACGTNGGNTT >gi|2764118|gb|R30514.1|R30514 13119 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165A10T7, mRNA sequence AATAAACAAGATAAATGGAGGGTCTAATTCCGTTAGTATACAAAGCCGTCATGCAAATCCGTTACGGTAA CGAGTCGCAGCAACTTTNTNCTTCTTACTACGTTCGTNTTCCCGGTGATTCGGGTCGGTTTGTAAGATCC GATTTAGATGTATCGGGTCCTGGNTCTAATTCCTCCAATAGGGCGTCGTCGTCGACAAGCACAACTACGT TTGCTGTTTACGNGGGAGTCCAGTCACCTGTTTCTCGTCAGGTTGTCACGTGATTCACACGCGCTTTTTG AAGGAACCTNAAGTTGCGTGTNAGGGAAAGGGTTCGTGACTTTTTGTTTTTTGTGCGTTTTTTTTTTTTG TAAGTNNAGGCTTNGNNCCGGCTTTAATNAAACCNGCCTGNAAAAA >gi|2764117|gb|R30513.1|R30513 13118 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164O14T7, mRNA sequence CACCATTGCNACACGTNCTCCACGAACTTNCCGATGCCCAGTCGTCGGAGACATAGCTACACCGTCGGAT CTCCTGCAACCACATCTTCCAATTACAGTAACACTACTTTAACCGATCGTNCCTTCCCGACAACCCCTGC CCGTACATCCACCGNCACAACCACCTCCATCGCTCGTGGCATCTCCGGTATCTTCATCAACTGCTTCANT CCTCCCGATTCCGTTTCCTCCAACTACATCGACANTTCAAAGTACTCTTCCGNNANTAAATATCCGTAGT AGACGTAGGTTGAACAGGAAGTAGTNGGTNTACAG >gi|2764116|gb|R84190.1|R84190 16149 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164H8T7, mRNA sequence CTGCCAGTAGTCATATGCTTGTTTCAAAGATTAAGCGATGCATGTNTAAGTATGANCGAATTCAGACTGT GAAACTNCGAATGGCTCATTAAATCAGTTATAGTTTGTTTGATGGTAACTACTACTCGGATAACCGNAGT AATTCTAGAGCTAATACGTGCAACAANCCCCGACTTNTGGANGGGACGCATTTATTNGATAAAAGGTCGN CGCGGGCTCTGCCGT >gi|2764115|gb|R30500.1|R30500 13105 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164G19T7, mRNA sequence GTNGCCTGTAAAGTGCTGATCGTNCTGTGAGGACAATCCTTGATGCCATAGAACAGGTCGGAGGGATATA CGTTGTGACTGCAGATCATGGAAATNCTGAGGACATGGTTAAAAGGGACAAATCCGGCAAGCCTGCTCTC GATAAGGAAGGGAACCTTCANATTCTTACCTCTCACACCCTTAAACCAGTGCCAATTGCCATAGGAGGTC CTGGCTTGTNAGCAGGAGTTAGGTTTAGACAGGATATCGNGACACCTGGGCTTGCAAATGTAGCTGCGAC AGTNATGAACCTCCATGGATTTNTGGCCCCGAGTGACTATGAGACAAGTCTGATCGAAGTCGTCGNGAAG TGATGGATTNCTTGTTGTTGTAGTTTCTTTTTTAAAAGTCCCACCTGAGCCTCTATAGNCTTCTGNNTTC TNTTTTAAGNTTACTTNTTTTCACCNGNTCGTCTA >gi|2764114|gb|R30499.1|R30499 13104 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164G18T7, mRNA sequence GCAAGATATCTGGATACGCGGAAAATAGAGAGAAGAAATCAAAAAGCATATTTTNATTTTATCTTTGAAA AGAAGATTATTGTTTTNAGTCTACAATGGTGACTCTAAAAATGGAGATTTGCATCGAGTTGTTGAAATTN ACCGTAGATTTCNTCGCCGCCGTTGCAGAATCAATCGAAGTAGCTTTCCGCCATCGTCCTCCACCGGTGA TTCAATATTCTNCAGTGATGTATGGTCGCCGGAGTAATTACACCGCCGTTCCCATTCCTCTCGTGGGGTT TCTGTAGTTAATATATTCTCCTTTTGTGGTTCTNTTGTTTTTTGTTCATNCTTGTTCTATTATAAATNAC CTCCTTGCCTCGGACANAAAGGTNTATTTCTNATTGNAAGANCAAGATGTGTTTTGTGTATAAACCCCCA AAAATCNCGNNAAGTTTACGGTGACCCGTGGTATATAAAAGTTTTGNNGGTTCCCCGATTGT >gi|2764113|gb|R30496.1|R30496 13101 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164F22T7, mRNA sequence AGCACGGATTTGTGTACCGTGAGCACGGTAACTCACCCGGATACTATGATGGACGGTACTGGACAATGTG GAAGCTTCCCTTGTNCGGTTGCACCGANTCCGCTCAAGTNTTGAAGGAAGTGGAAGAGTGCAAGAAGGAG TACCCCAATGCCTTCATTAGGNTCATCGGATTCGACAACACCCGTCAAGTCCAGTGCATCANTTTCATTG CCTACAAGCCACCAAGCTTCACCGGTTAATTTCCCTTTGCTTTTGTGTAAACCTCAAAACTTTATCCCCC ATCTTTNATTTTATCCCTTGTTTTTCTGCTTTTTTCTTCTTTCTTGGGTTTTAAATTTCCGGACTTAACG TTTGTTTTCCGGTTTGCGNAGGACAATATTCTATCGGNTTTCTCAACTGTCTGATGNAATAAATAATGGT AANTGNTTCTAT >gi|2764112|gb|R30495.1|R30495 13100 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164F21T7, mRNA sequence GCATTTTGGAAACCCGAAGCTTAAGTNATGTCGCTGCGATGCCTTCCCCCTTGAACGGAGCTTTTAATCG CCCGATTTCTATGCCGCCGCTGGTTTTACCTGAGTTCGATCAGAATCAACCGGGTTTNATCGNAGAAAAG AGCTTCGGGTTCGGGCTTCCTAGTTTTNCTTTTAATGGATCCANGGAGCTAATGGCTGTGCCTAANAAGA AGATTTCTAAACACAAGAGAGGGATAAGAAATGGTNCAAAGGCTCTTAAGNCTGTNCCNCTNATCATCCG TTGCAGGAGTTNCGGGCGAGTCAAG >gi|2764111|gb|R30492.1|R30492 13097 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164E21T7, mRNA sequence GACGAGTTTGAACTTTAGGATTCAAGGTCACAACTTAGTTCTTGCGGAATCAGAAGGNTCATACACAGTT CAACAAAACTATACAAGCTTGGATATTCATGTTGGACAGTCTTATTCTTTCTTGGTTACAATGGATCAAA ACGCGAGCNCTGATTACTACATTNTNGCGAGTGCTCGGNTTGTTAACGNAACCATATGGAGANGAGTCAC TNGAGTTGGANTCTT >gi|2764110|gb|R30491.1|R30491 13096 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164E17T7, mRNA sequence CACGGTACGGAGCCTCTAGAAGCGGTGGCGATGATTACCGTGTTGCGTCGAGGTGGTGCTGACGTGACGG TGGCGTCTNTTGAGACTCAGGTTGGCGTTGATGCTTGTAATGGCATCAAGATGGTCGCTGATACTCTTCT CTCTNATATTACCGACTCTNTTTTCGACCTNATTGTGCTCCCCGGAGGCTTCCCGGTGGCGAGACTCTTA AAAACTNTAAATCTTTAGAGAACATGGTCAAGAAACAAGACTCTNATGGCCGNCTTAACGCAGCTATATN TTGTGCTCCTNCCTTGGCTCTTGGTACTTGGGGTCTACTAGAAGGCAAGAAAGCAACGGGTTACCCCCTT TTNATGGAGAAACTTTTNGGNTACTTTTTTGCAACNNGCCTGTTGGAGTCAANAGTGCAAATTTNNTGGA AGGAATAGTGACCACTCGTGGGCCAGGGAGCCACCCATTTGNATTCTNCCATCACGG >gi|2764109|gb|R30489.1|R30489 13094 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164C9T7, mRNA sequence GTCGTCGTTNAGAAACCTTCAAAAATGGCTGGAAAACTCATGCACGCTCTTNAGTACAACTTTNACGGTG GTGGCGCCGCCGGATTAGAGCATGTNCAAGTTCCGGTTCCAACACCAAAGAGTAATNAGGTTTGCNTGAA ATNAGAAGCTACTAGTCTAAACCCTGTCGATTGGAAAATTCAGAAAGGAATGNTACGCCCTTTTNTACCC CGCAAGTTCCCCTGCATTCCAGGTATTCTAATAGCTTTNAAGATTTTAGTTTCTGTATAGANGAAAAAGG TT >gi|2764108|gb|R30480.1|R30480 13085 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164B9T7, mRNA sequence CACAGCAACAAACAGAGAAAATNTGTGGCGGTGCTATTATTTCCNATTATGCCCCTCTCGTCACCAAGGC CAAGGGCCGTAAACTCACGGCTGAGGAACTCTGGTCAGAGCTCGATGCTTCCGCCGACGNCGACTTCTGG GGTTTCTATTCCACCTCCAAACTCCATCCCACCAACCAAGTTAACGTGAAANAGGAGGCAGTNAAGAAGG AGCAGGCANCANAGCCGGGGAAACGGNGGANGAGGNAGAATGTTTNTAGAGGGATACGTAAGCTT >gi|2764107|gb|R84189.1|R84189 16148 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164A11T7, mRNA sequence CCGGGCCNGAATTNCCAGGGNNGCCCACTGCGTCCGGCCCCTAGCCGTCGCTGACAGCCTCCAATATCGG CCGATTCCATTCGCCGGAGTATGTTGACTTCCTCGCTTCCGTTTCGCCGGAATCTATGGGCGATCCTTCC GCTGCACGAAACCTAAGGCGATTNAATNTCGGTAAGGATTGTCCTGTCTTCNACGGACTTTTTAATTTTN NCCGTGCTTCCGCCGGAGGTTCTATTGGTGCTGCCGTCAAATTAAACAGACAGGACGCTGATATCGCTAT CAATTGGGGCGGTGGGCTTCACCATGCTAAGAAAAGCGAGGCTTCTGGGTTTTGCTATNTAAACNACATC GTGCTAGGNATTCTGGGAGTTTNCTCAANAATGTTTAAGAGGNGTTCTCTANAATAGATAATT >gi|2764106|gb|R30470.1|R30470 13075 Lambda-PRL2 Arabidopsis thaliana cDNA clone 163E7T7, mRNA sequence GTTTCACCGCCGTCTCTCTCTATATCAAAATGGGTCGCCGTAGCTCAGGAGGAAGATCTGCCCCTCGCCC TCGTCCTGCTGCTGCACGCAGCCCAGCTCCTCAACCTGTACACCGTGCACCTCCTCCAGCTCCAGCTCAG GCCAGCGGTGGTGGTGGTGGCATGTTCTCAGGCATTGGTTCAACCATTGCTCAGGGTATGGCTTTTGGTA CTNGAAGTGCAGTTGCACACAGGGCTGTTGATTCTGTNATGGGTTCACGAACCATTNAGCATGAGGCTNT TGAGGCTGCTTCTTCATCNGNAGNCCCTTCTGGAAGGGCCCATGNNTTTCNTAGNTCCCNGTTAACATNC ATGNCTTAAGGCTTTTCCAAGGNTT >gi|2764105|gb|R30450.1|R30450 13055 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162L15T7, mRNA sequence GGAGAGGCGAATTCGAATCGAGAAGATGGTGTCTGGCTCAGGGATATGTTCAAAGCGTGTCGTTNTTGAC GCACGTNACCATATGTTTGGTCGTNTTGCTTCGATCATAGCTAAAGANTTGCTCAATGGACAGAGTGTTG TTGTTGTCCGATGTGAGGAGATTTNTTTGTNTGGTGGTTTGGTTCGTNAGAAGATGAAGTACATAAGGTT TCTNAGGAAACGCATGAACACTAAACCTTCTNATGGNCCTATTCATTTCCGAGCTCCGTCNTAANATCTT CTGGCGTACCGTTCGTGGGATGATTCCCACACAAGNCCCAAGCCG >gi|2764104|gb|R30447.1|R30447 13052 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162K7T7, mRNA sequence ACTTGTNAAGAATTCACCTTTTGAGAGGCCCAGTTTTGAAATATGGCTGGCCAAAACGCGCGTTTNAATG TGGTTCCCACTGTNACTATGCTCGGGGTTATGAAAGCNCGTNTTGTTGGCGCTACAAGAGGTCATGCTCT CCTCAAGAAAAAGAGTGATGCTTTAACTGTTCAGTTTAGGGCACTTCTCAAGAAAATCGTTACAGCTAAG GAGTCTATGGGAGATATGATGAAGACATCGTCTTTTGCTCTTACCGAAGTAAAGTATGTTGCTGGTGACA ATGTCAAACATGTTGTCCTCCGAGAACGTTAAAGAAGCTACTTTGAAGGTTCGTTCTCGGACAGNGAATA TCGCTGGAGTNAAGCTGCCCTAAGGTTTGATCACTTCTCTTNAAGGGTGGNGACCNNGGATTGGNCTTNN CCGGNTTAGCTAGGAGGNGGNCAACA >gi|2764103|gb|R30442.1|R30442 13047 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162J24T7, mRNA sequence CTGTGTCTATGCAGCGATATGTAAGCATGAAGGGTCTCCGTTGTTGTTTCCTGGGAGCAAGAAAGCTTGG GAAGGGTTCATNACGGCTTCTNACGCGGATTTNATTGCAGAGCAGCAGATTTGGGCGGCGGTTGATCCGT ATGCNAAGAACGAGGCGTTTAACTGCAACAATGCTGATATCTTCAAGTGGAAGCATCTNTGGAAGATTCT AGCTGAGCAGTTTGGGATTNAGGAGTATGGATTTNAGGAAGGGAAGAATTTNGGGTTGGTGGAGATGATN AAAGGGNAAGAGAGAGTTTNGGAGGAGATNGTTAAGGAGNATCAATTNCAAGAGAAGAAGCTTTAGGAAG TTNGTGTGTGGGTGGTTTTCCTGNTGTTATACTTTGGAGTTTGAAGGGAAAT >gi|2764102|gb|R30441.1|R30441 13046 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162I8T7, mRNA sequence AGANTGGTTTAGCTTTTTTNTACCGTACATCTTCTTCCCAGAAACATGGCTGAGGCTTCTAATTTGTTGG AATGGCCTAAGAAGGATAACCGTCGTTTTCTCCATGTTGTCTACCGCGTTGGTGATCTTNATCGCACCAT TGAGTTTNACACTGAGGTCTTTGGTATGAAGCTGTTGAGGAAAAGAGATATCCCNGAGGAGAAGTATTCT AATGNTTTTNTTGGTTTTGGACCNGAAACATCTAACTTTNTTGTGGAGCTCACATATAACTATGGTGTTA GCTCATATNATTATTGGAACNGGCCTTTNGGGCATTTTTGCCCATTTNNAAACTCAAAGATGTTTCCAAA CTTGGTTGNAGAACGTCCGTCCCAAGGGGGTGAAAA >gi|2764101|gb|R30438.1|R30438 13043 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162H8T7, mRNA sequence TCCTTTGGTGGCAAACACATCGACAGATAGAGAGAAACGATGGCGTCGAACTCGCTTATAANCTGTGGCA TAGCCGCCGTGTACCCTTCGCTTCTTTCTTCTTCCAAGTCTAAATTCGTATCCNCCGGAGTTCCACTCCC AAACGCCGGGAATGTTGGTCGTATCANAATGGCTGCTCACTGGATGCCTGGCGAGCCACGACCAGCTTAC CTTGACGGTTCTNCTCCTGGTGACTTTGGGTTTAACCCACTTGGACTTNGAGAAGTTCCAGCGAACCTTG AGAGATACAAAGAGTCAGAGCTCATCCACTGTAGATGGGCTATGCTCGCTGTTCCTGGGATTTTGGTACC AGAAGCATTAGGATATGGAAACTGGGTTAAGGCTTCAGGAATNGGCAGCACTACCAGGGGGTCAAGCCAC TTACTTGGGNAACCCNGTCCCCGTGGGGTACTTTTNTCCACAAATCTTTTGNCATTGAGGTTTTTTAGGC CNTTTNAATTTTTTTGNGCANCCCNNNNNAAGTNTTGGNGAAAAA >gi|2764100|gb|R30437.1|R30437 13042 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162H7T7, mRNA sequence GATTTGTAAGAAAATGGCTTCCAAGACTTTCCTTCTTTTGGGTCTCTTTGCATTTNTTTNCATCGTCTCA GAAATGGCTGCCGCGGGCACGGTGAAGTCAGAGAGTGAGGAAACTNTGAAACCTGAACAACATGGTGGTG GATTCGGTGACAATGGAGGAGGAAGATACCAAGGAGGAGGCGGCCATGGTGGCCACGGAGGGGGAGGATA CCAAGGAGGAGGAGGACGATACCAAGGAGGCGGTGGGCGACAAGGAGGAGGGGGAAGTTACTGCCGCCAC GGCTGCTGCTACAAAGGTTACCATGGCTGCTCAAGGTGTTGTTCATATGCCGGAGAAGCGGTTCANACTC AGTCTGGTCACTAAATCTACATAATATATCAACCACCATGAGTGTACGATTTCATTTATATATACACTTA CGTGTGTATGTNATATGACAATACAACTTACGTTTGTAATGAAGTGCCTTAAAGTTTAAGAGGNNGAANC TTATCGGGAATAAAGTTTCATAANTGTAANA >gi|2764099|gb|R84188.1|R84188 16147 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162H5T7, mRNA sequence CGCAAGATTCCTTTNAAATTCTAACTTGCAGCTATGGGTAAAGAGAAGTTTCACATTAACATTGTGGTCA TTGGTCATGTTGATTCTGGAAAATCGACCACAACTGGTCACTTGANCTATAAGCTTGGNGGTATTGACAA GCGTGTNATCGAGAGGTTCGAGAAGGAGGCTGCTGAGATGAACAAGAGGTCCTTCAAGTACGCATGGGTG TTGGACAAACTTAAGGCCGAGCGTGACNCGGGTATTACCATCGNTATTNCTCTATGGAAGTNCGNGACCA CCAAGTACTACTGCACAGTCATTTGATGCCCCNGGACATCGTGNTTNNTCAAGGA >gi|2764098|gb|R30435.1|R30435 13040 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162H21T7, mRNA sequence AAAAGATGGAGCAATCTGAAATTNTGATTGCATAATCCACTAGTAAACGTCACAAAGCAATTGGGCATGC CCATGGACGTTNATGGAGCTCTAGGGCTTCTCCGTTTTGGGTATCTTGCTATTGGCTCTCATATTCCATT GCCTTGCGGANGGCGTCGCTGCTTTTACCGTTTGGNACCGGCCATGAGATCTATATTCCCCTGTATTTTG GNTTTAAGNTTTATCTAGTTAGGATTGTATTTAGCCAATNAGGACATCAGATTATAAAAGAACACCATCT TTNGGGNCTGATTAACATTGNTGGNTACTTCTGC >gi|2764097|gb|R84187.1|R84187 16146 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162H18T7, mRNA sequence ATTCTTTGCATTANCTCTTCGATCTCTCCAACTCTCCAAAACCTNCCTCAGATGGGAACTACCAATGGAA CAGACTATGGAGCATACACATACAAGGAGCTAGAAAGAGAGCAATATTGGCCATCTNAGAATCTCAAGAT ATCAATAACAGGAGCTGGAGGTTTCATTGCATCTNACATTGCTCGTNGTTTGANGCACGANGGTCATTAC GTGATTGCTTCTGACTGGAAAAAGAATGANCACATGACTGANGACATGTNCTGTNATGAGTTCCATCTTG TTGATCTTAGGGTTATGGAGAATTGTCTCAAAGTTNCTGAAGGAGTTGATCATGTTTTNAACTTAGCNGC TGATATGGGTGGTATGGGTTTNATCCAGNGTAATCACTCTGTGGATTATG >gi|2764096|gb|R30429.1|R30429 13034 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162H10T7, mRNA sequence GATAGAGAGAGAGGTTACATTGATCTCAGTAAACGTAGGGTTAGTGATGAGGACAAAGAGGCTTGTAAGG NGAGGTATAATAAGAGCAAGCTTGTNCACTCTATCATGCGTCATGTTGCTGAGACTNTTGGTGTCGATTT GGAGGAGCTATACGTAAACATCGGTTGGCCATTGTATAAGANGCATGGACATGCTTTTAAGGCTTTCAAA ATTNTTGTCACTGATCCTNATTCANTTTTCGATGCTCTTACCCGAGAAGTTAAAGAAACTGGACCTGATG GTGTGGAGGTGACCAAAGTTGTCCCGGCTGTGTCTGAAGANTTGAAAGATGCATTTTTGAAGGNCATTAG GAGGCGANTGNCACCNCAGCCAATGGAAGATTCGTGCTGNTATTGAATTGAAGTGTTTTCAGTTTGATGG NGTTCTCCACATCAAGGAAGCCATGGNNGAAGGCAGAGGCTGTAGGGTNCCTGATTGATTTTTCCNGTCA ANAATCANNGCTCNGTTGCTTCCACCCACTTTTATGTGCTTACCAACTTACAACCCTTTT >gi|2764095|gb|R84186.1|R84186 16145 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162F7T7, mRNA sequence CTCTATCCCTCTNAAAAATNAAGCTCTCTGTNCNTTTAATCTCCGCTGCTCTTCTNTTGTNCATGGTATT CATTGCCACAGGGATGGGTCCAGTNACCGTGGAGGCACGCACGTTTAAGTCAAAGAGCCATAGGTTCAAG GGTCCATGTNTGAGCACACACAACTGTGCAAACGTGTGCCACAACGAAGGCTTCGGCGGAGGTAAATGCC GTGGATTCCGTCGTCGTTGCTACTGCACAAGACACTGCTGATCCATCCATTCTAATGNCTCAAATNTTTC GATCCATCGTCAGTGTGTTANTTCTTTTTNATCTAAATNTTCCGTAACGGGACCATAT >gi|2764094|gb|R84185.1|R84185 16144 Lambda-PRL2 Arabidopsis thaliana cDNA clone 162E1T7, mRNA sequence AAACATTGGTTCANATTCAATGAGCCATGGNTGTTTAGTCGTNCCGGTNACGACAACGGAAAGAAAGCTC CGGNACGTTNTTCACCGTACATCCCCGGTTATGGACAGCATTNTAAAGATGGGCGGTCTGGATACGAAGC TTATNAAGTNAGTCACAACTTACTCTTGTNGCATGCTTACGCCGTTAACGCATTCAGAAAATGCAAACAG TGTGCTGGAGGTAAAATAGGAATTGCACACAGTCCAGCTTGGTTCGAACCACAAGACCTTNNGCATGTTG GAGGTTCCATTGAACGGTNTGCTTGATTTAATCCTAGGTTGGGCATTTGGTTCCAA >gi|2764093|gb|R30426.1|R30426 13031 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161P24T7, mRNA sequence TTCTTTNGTTTCCTCCAAATTCAAACACCATACTTNATCTCCTCCTCCTTCNCCTCCTCCTCCTCCTCCT ATGGCTGCGTGCATCGACACCTGCCGCACTGGTAAACCCCAGATTTCTCCTCGCGATTCTNCTAAACACC ACGACGATGAATCTGGCTTTCGTTACATGAACTACTTCCGTNATCCTGATCGATCTTCCTTCAATGGAAC CCAGACCAAAACCCTCCATACTCGTCCTTTGCTTGAAGATCTCGATCGCNANGCTGAAGTCGATGATGTT TGGGCCAAAANNCGNGAAGAGNNAAATCTGATATCGCCAAAGAACCTATTGTTTNCGCTTATTATNAACG >gi|2764092|gb|R30417.1|R30417 13022 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161M4T7, mRNA sequence CTGCTAACAAGGAGCTGAAAGGAATGATGAAAACCGTCAAGATTCAAGATATAGATAATTTGCAAGATGA TATGATGGACTTAATGGATGAGAGTNCTGAAATTCAAGAGACACTTGGTAGGAGCTACAANNTTCCTNAT GACATTGNCGAAGATGACCTCCTGGGCGAGCTTTATGCTCTTNAAGCTGNCATNGGGAACG >gi|2764091|gb|R30416.1|R30416 13021 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161M21T7, mRNA sequence GAAGGAGGTCAAGTGCTGAGAGAGAAGCTCTCGTTGGGTTACTGTGGTCGGTCGCAGCGACTCTCTAAGT TTATNTTTCTTTATATTGTCCTNTGTTTCGTCGTCGTCCCCTATTAAAATTACCTNCCAGTTTACTTTTC TCTCTTCTTGTTTTCTGTGTTGGAAGATTCTCAAGTTATTTATTCCGCAAAAAACGGTTTATCATTTACA ATTAGTTGAATTTTGGTCGTT >gi|2764090|gb|R30415.1|R30415 13020 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161M1T7, mRNA sequence CGTCGTCTCACCTTCTTCTCTCAAGCTCACGTCACGTGGCTTCATCATCCCNGCCNNCAATNCTTTCACC GAGATCTCTCTTCTCCAACAACGGGAAACGAGCACCAACTGGAGTNAGAAACCATCAGTATGCGAGTGGA GTNAGGTGTATGGCCGTAGCGGCGGATGCTTCTAAGACGAAAACGGCGGCGAGGAAGAAGAGTGGATACG AACTTCAAACGTTGACGGGCTGGTTGCTGAGACAAGAGATGAAAGGAGAGATAGATNNAGAGCTNGACGN TAGTNAATGTCGNGTATATCATTTGGCTTNTAAGCAAGATCCGCTTTA >gi|2764089|gb|R30413.1|R30413 13018 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161M14T7, mRNA sequence AGTCCAGCTTCTTTGTCTACCCCTACAAAGTCATCATCAAGACTTGCGGTACCACTAAGCTCCTCCTCTC TATCCCACCACTTCTAAAGCTGGCTGGTGAGCTCTCTCTNAGTGTCAAGTCTGTNAAGTACACTCGCGGC TCCTTCCTCTGCCCCGGAGGCCAGCCTTTTCCTCACCGCAGCTTCTCTGAAGAAGTCTCTGTTCTTNATG GGCACTTTACTCAGCTGGGCTTGAACAGCGTAGCNTACTTGAATGGGCAATGATGATGAGACTAAGAAAT GGCATGTCTATGCTGNCCTCTGCCCCAGGGACTCCAGCAACTGCAAACAACCAAATGGNCTACANTCTTC GAGAATTGTGCAATTAATTTGGTCCTGGCCAANAGGGGAAAGGNTTGNCTGTNTNNTTNAAAGGGTTTNA AGGTTTNCAAAGGNCTTGGGGGCAAATNGCCTGATAAACTTT >gi|2764088|gb|R30410.1|R30410 13015 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161L7T7, mRNA sequence CCCAAAAAAAAAAAAAAAGAGATGGTTCTGCTAGAGAAGCTTTGGGATGATGTTGTGGCTGGACCTCAGC CTGACCGTGGCCTTGGCCGCCTCCGTAAGATCACCACCCAACCCATTAATATCCGAGATATAGGAGAAGG GAGCAGCAGTAAGGTGGTGATGCATAGGTCGTTGACCATGCCGGCGGAGTGAGCCCTGGAACTCCAACGA CTCCAACCACTCCGACGACGCCACGTAAGGNTAACGTGTGGAGGAGCGTCTTTAATCCGGGAAGCAACCT CGCCACTAGAGCCATCGGNTCCAACATCTTTGANTAAACCCACCNATCCAANTNTCTCCNTNCCGTCTNA GGACTNNGTTNGTAACAGCCGGTGACTNNAAGGNAGTCAGGCAACCNTTTAGG >gi|2764087|gb|R30402.1|R30402 13007 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161L14T7, mRNA sequence TTATCAAAGGTGGTTTTTNTTGCCACTGCTAATAGGGTTCAACCTATTCCACCTCCTCTNCTAGACAGGA TGGAGCTAATTNAGTTGCCTGGTTATACGCAAGAGGAAAAACTTAAGATAGCTATGCGCCATCTGATTCC TCGAGTTCTAGATCAGCATGGGCTTAGTTCCGAGTTCCTCAAGATTCCAGAGGCTATGGTAAAGAATATA ATTCAGAGGTATACAAGGGAAGCCGGTGTTCGTAGTCTAGAGAGGAACTTGGCTGCTTTAGCTCGTGCAG CTGCTGTGAATGGTGGCAGAGCATGAACAAAGTCTTCCGTTGAGCAAAGATTGTGCCAGAAACTTACATC TTCCNCTNTTAATGGTAGNAATGNCCCCAGGAGNCGAAGTTGGAAATTGGAAGGTTTTTCCCANTNGGGT GAAAANTNATCCATANGGTTTTGGGGNACCNTTCCAGNAGNCCCCCAGCTTTTNGTGGTGGATGAGGCCN CCNCTTTTAAAAAAA >gi|2764086|gb|R30396.1|R30396 13001 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161K3T7, mRNA sequence CATCGAAACCCTAACTGCTCTCGGTGCTGAAGTCAGATGGTGTTCCTGCAACANCTTTTCCACTCAAGAC CACGCCGCCGCAGCCATCGCTCGTAACTCCGCCGCTNTTTTCGCCTGGAAAGGTGAGACTCTTCAGGAGT ACTGGTGGTGTACCGAGCGTGCTCTAGATTGGGGTCCAGGTGGTGGTCCTGATCTGATTGTTGATGATGG TGGTGACGCTACTCTTTTGATTCATGAGGGTGTTAAAGCTGAGGAGATCTTTNAGAAGACTGGTCAAGTT CCTGATCCTACTNNCTAACTGATAACCCTNAGTTTCAGATCGTNTTGTCCTANNATCAAAGGGNAGGTCT TCAAAGTTTGATCCCTAAAGAAGTNNCCACCAAGGNTGAAGNNNGAGACT >gi|2764085|gb|R30386.1|R30386 12991 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161J5T7, mRNA sequence GAGAGAAGAAAGATAGAGAAAAAAAATGGGAGGCAAAGGTGTGATGATGGTGGCGATACTTTTCCTTTGG GCACTCTCTGCAACATCTGAAGCAGTAACAGAGACTGAGCCAGGTTTNATGATGAACTTCTACAAGGACA CGTGTCCTCAGGCCGAAGACATCATCCGTGAACAAGTCAAACTCCTCTACAAACGCCACAAGAACACCGC TTTCTCTTGGCTCCGTAACATCTTCCATGACTGCNCCGTTGAGTCATGTGATGCGTCGCTTTTNCTGGNT TCGACAAGAAGAGAGCTAGNNGAGAAAGACACGACAGGAGCTTCGGANTTAGAAACTTTAGGTACANTCG AGGTGNTCAANGAAGCTCTNNNNGAGGGGAGTNTCCTCCGTGNTGTCTCA >gi|2764084|gb|R30381.1|R30381 12986 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161J17T7, mRNA sequence AGATTTTGGACAGAGTAGGGAACATTTCAGGTTTAAAGACTCCAACAGTTCTTTACCTTGCAGTAGCAGA TACTCTCTTAGAAGAAAAAGAAGAAGATTCATCGGTTTTAAGTGGTTGGAGAGACGGTTTAATACCATTT NAGAAGAAGAAGCTTGGGGTTAAAGAGGAGATATATGGGAAGTATTCATATTTNATACAATCGGCTATAG ATTACGCGGTGTGTTTAANAGCGCNTGTTTTTTTTGGTAATAGCTTTTCGACTTTNTCTAGTCTCATTGT TCTTCGAGAGGGCACAGAAAGCGCGANGGTTAGGGGNTTATAAAGTCNTCCTAAANATGGTTGGNAACAA CGNNNNGGTCCT >gi|2764083|gb|R30379.1|R30379 12984 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161J14T7, mRNA sequence CTTCTTTATCATCATCGTCATCTTCAACAAGATCAACGGTCTCANATCATCCCCAGCTTCAAAGAAAAAA CTTAATGATCATCATGTTACATCCCAGAGTCACGGGCCAAAGTTTCCACACGGAAGCTTNGGATGGCCCG TNATCGGNGAACCATCGAGTTCGNCTCTNCTGCTTACTCAGACCGTCCTGNGAGTTTCNTGGTCAAGCGT CGTCTCATGTNTGGGTGAGTGTTTAAGTCGCATANTTTTGGACCGGCGGCG >gi|2764082|gb|R30374.1|R30374 12979 Lambda-PRL2 Arabidopsis thaliana cDNA clone 161I2T7, mRNA sequence AAGTTAGTCATAAAAAAAAAAAACACACAAAAAAGTTTCANTGGCCGCCTCAACAATGGCTCTNTCCTCC CCTGCTTTCGCCGGAAAGGCTGTGAACCTTTCCCCTGCGGCATCAGAAGTCCTTGGAAGCGGCCGTGTGA CAATNAGGAAGACTGTTGCCAAGCCAAAGGGTCCATCAGGCAGCCCATGGTACGGTTCCGACCGAGTCAA GTACTTGGGTCCATTCTNTGGCGAGTNACCCAGCTACCTTACCGGAGAGTTCCCTGGAGACTACGGATGG GTCACANNTGGTCTNTCCGCTGNCCCCGAGANATTNNTAAGGAACCNNGAGCTAGAAGTTATCCTCAGCA GG >gi|2764081|gb|R30358.1|R30358 12963 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159P19T7, mRNA sequence AAGACCCTCACTGGTAAAACAATCACCCTTNAGGTTNANAGTTCAGACACCATTGACAATGTCAAAGCTA AGATCCAAGATAAAGAGGGAATTCCTCCGGTTCAGCAGAGGCTTATNTTTGCNGGTAAGCAGCTCGAAGA TGGACGCACCCTTGCAGATTACAACATCCAAAAGGAGTCGACACTTCATCTTGTGCTTCGTCTCCGTGGT GGTATGCAGATCTTTNTNAAGACCCTTACCGGNAAGACCATTACTNTGGAGGTTGAAAGCTCAGGCACCA TCCGGTTAATTTCAAGGCTNANGGTTCCNGGGNCAAGGGAAAGGGGTTCCCACC >gi|2764080|gb|R30354.1|R30354 12959 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159P13T7, mRNA sequence TTCCAATTTNTTCAAACNCTAAAATCAATCTNTCAAATCTNTCAACCGTGATCAAGATGCAGATCTTCGT TAAGACTCTCACCGGAAAGACTATCACCCTCGAGGTGGAAAGCTCTGACACCATCGACAACGTTAAGGCC AAGATCCAGGATAAGGAAGGTATTCCTCCGGNTCAGCAGAGGCTTATNTTCGCCGGAAAGCAGTTGGAGG ATGGCCGCACGTTGGCGGATTACAATATCCAGAAGGAATCCACCCCTCCACTTGGTTCTCAGGCTTCCGT GGTGGGTATGCAGATTTTCGGTTAAAAACCNTTAACGGGGNAANGNCGGNTTACCNTTTTANGGNTGGGG >gi|2764079|gb|R30352.1|R30352 12957 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159O6T7, mRNA sequence GAACAATGGCTTCCTCTATGCTCTCTTCCGCTACTATGGTTGCTTCTCCGGCTCAGGCCACTATGGTCGC TCCTTTAAACGGACTTAAGTCCTCCGCTGCCTTCCNAGCCACCNGCAAGGNTAACAACGACATTACTTCC ATCACAAGCAACGGCGGAAGANTTAACTGCATGCAGGTNTGGCCTCCGATTGGAAAGAAGAAGTTTNANA CTCTTTCTNACCTNCCTNACCTTACCGNTTCCAAATTGGCTAAGGAAGTTGACTACCTTTATCCGCAAAC ANGTGGATTCCTTCGTGTTT >gi|2764078|gb|R84183.1|R84183 16142 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159O3T7, mRNA sequence GGCCNGNATTNCCNGGGCGGCCCACTGNGTCCGGTCNTTACCNGTNTTTAGTTANGTCTTGGTTGTGGTC CNTTGCTCTTGTTTTCATTTGCCTACGTCGTCGCAAAGGAAGACCAGAGAAAGATGCTTATGTCTTCACT CAGGAGGAAGGCCCATCTTTNTTGTTGAACAAAGTTCTTGCAGCAACTGACAATCTAAATGAAAAGTACA CCATTGGAAGAGGAGCTCATGGAATTGTGTACAGAGCTTCTTTAGGCTCCGGAAAGGTCTACGCTGTGAA GAGACTTTGTATTCGCGTCCTCACATCCCGCGNCTTAACCAGAAGTATTGNATTGAGGGGGAGAATTTGN TTAACAATCCGGGTAAAGGTCAAGGCACAGGGAATCTTGATTTAAGTTAAGAAAGGGGTTTTTTGGCCTG AGGGAAAAGNNCGANGGGTTTTAAATTCCTGGTATANGGTAACAATNCCCCAAAAGGGAAGGCCTTTTAC GGCCGGTTNTCC >gi|2764077|gb|R84182.1|R84182 16141 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159O22T7, mRNA sequence GCCCACCGCGTCCGGTGACTACATGTNGTGACAACNNNTGAGTTTTCAAGACTAGCAAGAACAAAACAGC TGGACCGTTTGGGATTGTATCTGGCACAAAGTTTGAATTCAAGAAGGAAGGTTACAAGATCACTGGGTTC CACGGACGAGCTGGTGAGTATGTTAATNCTATTGGAGCTTATTTAGCTCCATCAGGCACCACCCCTTTGA CTCCCTGCAACACAATCCCAAAAGGCTAGAAAGGAGCTGGGTAGTGAAGGCAGGGAACTTTTNATGGGGA TGAATTGGGTGCTTTTCCGANCGGNTTGTAAAGGGAAAAGNTGTCCTTGTAGGGNCAAAGGCCCCAAAGG ATGGGTTATTTGGGANGCCGGGTCCTCCGTTTTNGNTNTAACGGGCAAAAGCCAAGNGTCCAAGGGTTTG TTAGGAANGGNAAAATGGA >gi|2764076|gb|R30339.1|R30339 12944 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159N5T7, mRNA sequence GTGGAATCTTTAACCCGCTTAACTTTGCTCCTACGCAAGAGGCCAAGGAGAAAGAGCTAGCAAACGGGAG GTTGGCGATGTTGGCATTCTTAGGGTTTGTGGTTCAACACAATGTGACTGGAAAAGGACCATTTGAGAAT CTNTTGCAGCACTTGTNTGACCCATGGCACAACACTATTGTCCAAACCTTCAACTAAAGAGTGAAGACAG ACTTATGATCTCATACCTATCTATCTTCCATCACTTTCATGTCTGTCTGTGAGTGTGTTTCATCTTAGAG TTCTTGGTTTTTAAGCTTGAATTATTGTTGAACCGTTGTAGCTCCATGAACAAATTTGGAATCTTCCAAT GTACAGAGGGNCTAAGTTNATCAACATTNGTTTGNACNCTTT >gi|2764075|gb|R84181.1|R84181 16140 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159N20T7, mRNA sequence AGATTNCCGGGGNCCCACTGAGNCGGCAGAGTAAAGNTTGAAACTTTGGACTAAAAGAATGGCGTCTTTG GGTGTNTCGGAAATGCTTGGTACTCCCCTTAACTTCAGGGCAGTTTCAAGATCGTNTGCTCCGTTGGCAT CAAGCCCATCCACGTTCAAGACTGTTGCTCTCTTCTCTAAGAAAAAGCCAGCTCCTTGCTAAGTCCAAGG CCTGTCTCTNAGACTAGCGGATGAGCTCGCCAAGTGGTATTGGTCCTGACAGGAGGAATTTTTCTTTGCC CTGAATGGGTCCTTTTTGGGATAAGATTCAGNAGNTCCCCAAGAGGTTACTTTAAAAACGGGTGNAAGTT TTCCTGGGAGATTTATTGGGTTATGNACCCCATTTTGGGTCCTTGGGAAAGAAAGCCCTTNAGNAANCTT TTTGCTAAAATNACCCAAAGGNTTTTTTGAANTTTGATTCCCATTGNTG >gi|2764074|gb|R30337.1|R30337 12942 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159N12T7, mRNA sequence TTTCTTCAATCGAAAGGTAAAGAGTTTGAAGAAGTAAGTCACAGAGAAAGAGAAGATNTCTGAGAAAAAG GGAAGGAAAGAGGAAGTGATTACCAGAGAGTACACCATTAACCTCCACAGACGCCTTCACAAATNCACCT TTAAGAAGAAGGCACCGAAAGCCATCAAGGAAATCAGGAAGTTCGCAGAGAAAGCTATGGGGACTAAGGA CGTTAGGGTAGACGTGAAATTNANCAAGCAAATCTGGAGCAAGGGANTCANAGGTCCACCAAGGAGGNTC ANGGTTCGTTTTGCACGTAAGAGAANCGNCGATNNAAGATGCCGAAGGAAGAGTTCTTCTCCCTTGTCAC TTTTGCTGAAATCCCTGCAGAAGGNCTCAGTGGTCTTTTGCACAAAGGNTCNTCGTAGNGGGAGGGTTTA NGGGG >gi|2764073|gb|R30334.1|R30334 12939 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159M20T7, mRNA sequence ATTAAGATGACATCTACTATGGTTCTATTCCTCCTTCTTCTTCTTGTGTTTCCGCATATGGATAAAGCCC TAGGCGCACACGAGGAATCCCAGAAACAAGGTGCAGAAAAGACTTACCATGATGCACGCTTTACTATTCC TATTAAGCCAAAATATATTCCTAAGGTTATACGCCCTACGCCAAAAGATCCGCCTATTCCGGAATGTCTT CGAAAAGGCACATGTAGTCGTCTTCATTTATCTCCTCCTCCGNCCCAGAGGTCTTTCAAAGGCACAAACG AACCTGGTCATTGACCTCAATCTAGCTTCGAATTGCGTGTGTGTGTGCATGTTTCTTACATTTGTGGTTT GGTTTTGTGGCTTCTNTCNTTTGTTTACCNNATGCNNTGTGTTNGTCANAATTTTNANAAGTTTTTNTCG AANGGGCCGCTNNTNATTAAATAAAAACCTTNGGATTTCCCTTTTNGGGTTATAAAACGGCCTTTTAAAT T >gi|2764072|gb|R30330.1|R30330 12935 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159K2T7, mRNA sequence AGCATTGAGAAGCTCAGGGCAGTGGCTGCTGAAAAGTCCGTTCTGGAATCACATTTTGAAGAACTTGAAA AAACTTTNTCAGAGGTCAAAGCTCAGTTGAAAGAAAATNTGGAAAATNCAGCTACTGCGTCTGTAAAANT GGCGGAATTGACCTCAAAACTGCAGGAACACGNACATATTGCTGGTGAACGAGATGTGCTCAACGAGCAA GTNCTTCANCTTCAGAAAGAGCTTCAAGCGGCTCAGAGTTCCATTNNTGANCAGAAACANGCACACTCCC AGAAGCAATCAGAGCTGGAGTNTGCATTAAAGAAATCACANGATG >gi|2764071|gb|R30329.1|R30329 12934 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159K19T7, mRNA sequence AAGTTTCANATTAACATTGTGGTCATTGGTCATGTTGATTCTGGAAAATCGACCACAACTGGTCACTTGA NCTATAAGCTTGGTGGTATTGACAAGCGTGTNATCGAGAGGTTCGAGAAGGAGGCTGCTGAGATGAACAA GAGGTCCTTCAAGTACGCATGGNTGTTGGACAAACTTAAGGCCGAGCGTNACNCGNGTATTACCATCGAT ATTGCTCTATGGAAGTTCGGGACCACCAAGTACTACTTGCACAGTCATTGTTTNCCCCCAGGGGNATTCG GNNTTTTA >gi|2764070|gb|R30327.1|R30327 12932 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159K17T7, mRNA sequence TTGTGACCAGAACAGGAAAAATGCTAAGGTTGTNACCATTGATTCATATGAAGATGTCCCTGAGAACAGC GAGGCGTCTCTAAAGAAAGCTTTGGCTCACCAGCCTATTAGTGTCGCCATTGAAGCGGGTGGTCGCNCTT TCCAGCTCTATTCTTCGGGTGTATTTAATGGACTTTNTGGGACGGAGTTAGACCACGGTGTTGTGGCTGT GGGTTATGGAACCGAGAACGGAAAGGACTACTGGGATTGTAAGAAACTCATGGGGAAACAAANTGGGGGN GAAAGNGGNTNCATAAAGGTTGGNCCCGTAANNATTTNANGGCCCCA >gi|2764069|gb|R84180.1|R84180 16139 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159J9T7, mRNA sequence TACGGTCGGATTCCGGGTCGACCACGNTCCCTTTAGACAGCTAAAATAAATACAAGAAACAGAGATGGGT TTGGTTACAGAGGAGGTGAGAGCTAAGGCAGAGATGTACACCGGAGATGAGATATGTAGAGAGAAGACAA AGTNTTTCCTCAAGGAAATATCTATNCCCAATGGTTTATTACCATTGANGGATATAGAAGAGGTTGGGTA TGACAGAGAGTCAGGTGTTGTATGGCTGANGCAGAAGAAGAGCATCACTCACAAGTTCACAGAGATAGAT AAGCTTGTTTCCTATGGAACCGAAGTCACAGCCATTNTTGAGACCGGGAAANTCAAGANGCTCACTGGAG TCAAAGCCAAGGAACTTCTTATTTGGGTCACTATCAATGNGATCTATACCGAGGANCCCCCTACCAAGAT CACGTTCAAGACACCGNCCACACTGTCCAGGACTTTCCCGGTCACAGCTTTTNTNGTCCCNGANGTACCT GCCANGGAGGNACCTGCCAAGAGGGNCCTNCCNGGNGAAGAGCAGCG >gi|2764068|gb|R30324.1|R30324 12929 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159J6T7, mRNA sequence AAACACTTCATAACTAAACATCCTTTAAAGCCTTTTCAAAAACTCAATCATGTCAAGCAACTGCGGAAGT TGCGACTGTNCTGACAAGACCCAGTGCGTAAAGAAGGGAACCAGCTACACCTTCGACATCGTCGAGACTC AGGAGAGCTACAAGGAGGCCATGATCATGGACGTTGGTGCCGAGGAGAACAACGCAAATTGCAAGTGCAA GTNCGGCTCCTCTTGCAGCTGCGTCAACTGCACTTGCTGCCCCAACTAATGAAGCTTCTTTAATCAAAAT GTAATATGAATAAAAGTTGATGTGGGCTCATCTATTGAGCTCATGTCTCTCTTATTACTACTCTCTAGTA TGGTGTGATGTAATGGGTTATGACCCTTCTTTCCCTTCCCTATAAAACTAAAGANACTTGCAAGGATAAT TGAAAAGATGGTTTCTNTTTATTAAAAAAANNTNT >gi|2764067|gb|R30318.1|R30318 12923 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159J15T7, mRNA sequence CCTAGCGATGGAATTCAGTATGGGCCGTTCGCTCTTCCTCAGAATGGATTGCCTATTGCCTTGGAACGAA AACCATAGATGAATTACGAGAATACCATTTACCTTTCTTAAATTAGAAAGTGAGGAATTTTTTTCCTTAT TTAAGAGGAAAATCTAATTCTTTTTTATAATAGAAATGAAAAGAAAGTAGANGAAAAAAATCCCAAGTGG GACCCCCCAAGTGTATATAAGTTTTAGTTTATAAAATGTAGAGAATTAAATTTNCGGAGAAAAAAGAGAA TTAGTTATATAAATGTCCCANGTGTATGTAANCTTGGTTCATGCCTCTATATCCTTAATTTTGNAANTTT NCTCCAAANTGTTAAANNCCCCTTTATTACGGNNGTAAATGANCTNNNTGGAATG >gi|2764066|gb|R30317.1|R30317 12922 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159J14T7, mRNA sequence CAGAGGTTTCTATGTGAAACTTGCTAAAATAGATACAACACACATCTCATATCGACAATAAAAATTTGTT TTCAAAGATCAGTATTTTTTGAAGCTTGCCAAGTGAAGCATCTTTTGGGTAATTAGAACCAGAGAAGCTT CAAAAAATGGCTTAGAGTGAAGCATCTTGTGGCATTTCGACGGCATCATCTTAGGACGACTTATCTTGTT CGTTTTCTTTCTCGTCTCTGTTGTAATTTTNCTATAAGTTTCTCATATATAGTTTCATTTTGTCTTTTGT TCGTCCGTATTTGGTAGTTTGTCCAAATACAGNACATATGAAATTTTACAAGAGTGGATATTTTCAATTT C >gi|2764065|gb|R30313.1|R30313 12918 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159I8T7, mRNA sequence AAGGAGTTGGAGAAGAAGATGAAACTAGCTGGATACAAACCGGAACTAGAGTTTNCTTTACACAATGTAG AGGAAGAGCAGAAGGAGAAGCTATTGTAATGGCACAGCGAGAAGTTAGCTGTTGCNTTTGGTTGCATAAA ACTCCCTGAAGGTTCACCAATACAAGTTTTCAAGAATTTAANAATCTGTGGTGATTGTAATAAAGCAATC AAATTTATTTNGGNGATAGAGAAACGNGAGATCATTGTAAGGGGCACCNCAAGGTTTCACCATTTCAAAG ATGGGTCTTGCTCTTGTGGCGGTTACTTGGTGNAAAGAGNAGNGCTTTNNCTCTNTCATTTGGTCAAACC CTGCCTGGTTTTTTTATNNCGTTATTGTTTGG >gi|2764064|gb|R30312.1|R30312 12917 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159I6T7, mRNA sequence GAAATCAGCTTTGGCTATGGCTTCTNCGACACNTTTGTCTCTCTCATGGAGNTCCTCTCCTTGTTGGTCA CACAGCTTCAATGGCGGTGCAAATGAAACCCTAAAAGTATCTGAGCGAAGGTTCAATTTTNAAGTTGTTT CCCAGAAGNAAGNTAAGAAACTTCGCAAGGTAATTTTGAAAGAGGATGTGACGGATTTGGGTAAGCAAGG GCAATTACTTGATGTGAAAGCTGGATTTTNCAGAAACTTCCTCTTGCCTACTGGAAAGGCTCAGCTTATG ACTCCACTTCTGCTCAAGGAATTGAAGATGGAAGNCGNACGGATTGAAGGCAGAGAAGNAAAGGGTGAAA GAAGGCGCACAACAACTGGCGATGGNTTTCCAAANCNGTTGGGTGCTTTTCAAAGGTTTAACCNCAAAGG CGGTAAAGGCAAACTGNTATTTGGTTCTNTAACAGCTCAAGGNCCTNGTNGGCAT >gi|2764063|gb|R30309.1|R30309 12914 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159I22T7, mRNA sequence TTCTCTCTTGCATATTCGCTGCAAGGATGGGAAATTCAAAACCACTCCCTACAATTNNTTGTATTATAGT TTCAGTCTTGTATTTTNNATTCTATTGCATAACACCAACTTCTTCATCAGCCTCCATCCAAGATCAATTC ATAAACTGTGTCAAAAGAAACACACATGTTTCTTTTCCACTCGAGAAAACGTTATTCACCCCTGCGAAAA ACGTCTCTTTGTTCAACCAAGTCCTTGANTCGACGGCTCAAAATCTCCAGTTCTTGGCAAANTCCATGCC TAAACCGGGATTCATATTCAGACCGATTCACCAGTCTCAAGTCCAAGCTTCCATCATTTGTTCAAAGAAA CTCGGGNTTCATTTTNGTGTTTGANGTGGCGGTCACGATTTTCGAGGCCTTTGTNTTTATGTTTCACGGT TTGAAAAAACCGTTTATATTACTCGGCCTGTCAAANTTGNANNCAAAATCANATGTTGGATATTGNATTC CAAATAGGTNCTTGGGGTNAACCTGGTGGCTANCGTTTGGTGAGCTTTTACTTTCAAGAATTTGCANGNG GANGTGCAAAGATTCCATGGGATTTCCCGGGGGGTTTNTTGCACAATGTNNTGGGCATTGGTGGG >gi|2764062|gb|R30308.1|R30308 12913 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159I19T7, mRNA sequence ACTCAGTGGAGAAGAAGAAGAAGATCCAAATCGATCCGTTGAAAAGGAATTTCGAATTTCCTGTGCGATG TCGAGTGCGGTGGACGCTACGGGAAACCCGATCCCTACTTCGGCGGTTTTAACGGCGTCACGAAGATATA GGTATGAGGTGTATGCCGGAGAATGTTGCGTTCCTCAAATGCAAGAAGAATGATCCAAACCCAGAGAAGT GTCTCGACAAAGGTCGTGACGTCACTCGCTGCGTGCTTGGCTTGCTGAAGGATCTTCACCAGAAGTGCCA AAAGGAGATGGATGATTATNTTGGGTGTATGTATTACTACACAAACGAGTTTGATCTGTGTAGGAAAGAG CAAGAAGCCTTCGAGAAAGTGTGTCCCTTGAAATNAGAATCACAAGTTCTTGTCATGTTTTNAATTTGTA TCTCATAATAAAGCAAAATGTTTCATTTTTGGAATGAGCTTTNACNTCTCTCCATCTCTTGTTTTGTTGT CATCCCATTTTATTTCCTCTCAAATGCTTTCCGTAGTGAGTTCCAAAGNCAACCTAAATGGCTCANGTTT ATTNTTCGATTGGTCACTAAATTAAGCACAAGGATGGNACCAATTGTTTTT >gi|2764061|gb|R30297.1|R30297 12902 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159H19T7, mRNA sequence GGGTCAGAGTCTAAGACAGAAAGTNTTGCTGAAGAGGAGCCGGATCTTCCTGGGAGGTCTTCTATACAGG ATGATGAATCAAATGCAGAAGAAACTGATGATCAACATCTTGCATCTNACCATGCCACAGACATCACAAG AGAAGACTCGAATGATAAAAGCAAAGAGGTTGTTGAAGAGGAGACAGTAGAGCCATGTTTCACCACAAGA GAAGACTCGGTTGACAAAAGCAAAGAGGTTGAAGAGGAAACAGTAAAGCCATGTCTCATAGAAGACGCGC TTACAAGCCAGANTNNCAAAACCTCATCTGGTGACCATCCTGTTGAAATAAACGGNCCAATCCAGTTGAN AGCAAGAATTTGGGAATCTGAAAACATTGGNACTGGTATCAAANTTGCTTCAACTGAGGTAGNGTCACCA GCCTTTGATGATCTTNACCGCANCAGNTTTAAAGGNACCCCGNGGTTGATCTTNCAAGGNCCATTTTCAG CTGNNTGTTNTTTTNACGGGTGGGCCATTTCTTGAAT >gi|2764060|gb|R30288.1|R30288 12893 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159G21T7, mRNA sequence AGTNAAGCATTACCTGTATGGNTTACTGGACCAGGACGAGATGTGCCAAGCNCTTTNTATGGTTTANAGC ACCATGGGCAACACGTGACTTATGCTCCANCACAAGCTGGTCACGTCGCATTCCCAGGTATGTACCATCC GGGACAAGCAGTAACAGCAACAGGNGTCCATCATCCGCTTTTACAACAGTTTCAAGGTGTGGCTGGAGCT GAAATGGTTGCACCTGCGCCTAACGTTTTCCAACAGCCTCAGCAANCACAGATGAATTGGCCAAGTAATT ACTGAAACAGGNTGTATAAAGGNGGAAAANATTTTTANAGGTTTCANCCANGTTTCAAATTTCCTGGGGG ATTCA >gi|2764059|gb|R30286.1|R30286 12891 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159G17T7, mRNA sequence AGCTTCCNCNTTATTCANAGTGTAGAGGAGGATCCAAAAGAAAAGAGGAAAAAATGGACTATATGTATGG NCCAGGGAGACACCATCTTTTTGTACCAGGACCAGTGAACATACCGGAACCGGTAATCCGGGCNATGAAC CGGAACAACGAGGATTACCGGTCACCAGCCATTCCGGCGCTTACGAAAACATTGTTGGAGGATGTTAAGA AGATATTCAAGACCACATCAGGGACACCTTTNNTTTTTCCNACGACCGGGACTGGTGCTTGGANGANTGC TTTGGCCAACACGTTATCTCCTNGGGANAGG >gi|2764058|gb|R30276.1|R30276 12881 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159E4T7, mRNA sequence GAACAATGGCTTCCTCTATGCTCTCTTCCGCTACTATGGTTGCNTCTCCGGCTCAGGCCACTATGGTCGC TCCTTTCAACGGACTTAAGTCCTCCGCTGCCTTCCCAGCCACCCGCAAGGCTAACAACGACATTACTTCC ATCACAAGCAACGGCGGAAGAGTTAACTGCATGCAGGTGTGGCCTCCGATTGGAAAGAAGAAGTTTGAGA CTCTCTCTTACCTTCCTGACCTTACCGATTCCGAATTGGCTAAGGAAGTTGANTACCTTATCCGCAACAA GTGGATTCCTTGTGTTGAATTCGAGTTGGAGCACGGATTTTGTGTACCCGTGAGCACGGTAACTCAACCC GGATACTATTGATTGACCGGTACTTGGNNCAATGTGGGAAGGCTTCCCTTGTTNCGGGTTNGNACCGGNN TCCCNTTNAANGTNTTTNAAGGGAAGTGGGAGGNGTNNAAGAGGGGGGTNCCCCAATTGCCTTNATTTAG GGTTNATCGG >gi|2764057|gb|R30273.1|R30273 12878 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159E22T7, mRNA sequence AATAAACCCTCTTTTTTGTATTCTCTGATTACTTCGTCTCTNCCCCTGTAATGGCGCTTCCACACGTAGT CTCTTCACCTTCTTCAACTTCATTATCTCCTTCCTTCAAATCCAAACCACCGTTTCACTCCCTTAGATCT TTATCACCGACGGTTGATAATCGCCGGCGTTGTAAACTCAACAGTTCCTTCCGATGTTCATCTTCTTNAT TCTCCGAGAAGCATCACAACGCGAAATCTCCAAAATCCGATGATATCGTCGAGCTTCCTCTGTTTCACTN CCACTCGTTCTCTTTCCCCGGAGCAATCCTTCCTCTTTCAGATCTTCGAATTTCCGTTACCGTATCATGA TGCACACGGTCCTCCAATCTGNATCTANGNTTTCGGNNGTAGTTTNCTCCGATTTCCGGNTTNTNGGGTT CGCGGCAAGAAGGAAGGNTTTTGTAGGNGNAGNNGGTNAAAAAGGNGCGTTTTGT >gi|2764056|gb|R30271.1|R30271 12876 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159E20T7, mRNA sequence AAAGAAAGTAAGATAATAATCCAAAAAAAAAAACCATATTTTTCCCAACGTTTTTAGACGATCAAATGGC TTACACTAACCAAATTNNANCGGTTGCAGCGGTTGTTTTTCTAGCGGTTGNNATTGCNCCGCTATTAGCT GAGCCACAGTCAACGATGTTTCCAGAGATGACTCCTGAATGTNCCACGGTTATGCCTGNCCTGCTCGAAA AGTGTTTTGCAACCGGTAGTGTGACGCCAACAGAAGATTGNNGCACCGATCTAAAATCCGCAACCTCANC GCA >gi|2764055|gb|R84179.1|R84179 16138 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159E1T7, mRNA sequence GNTGAGGGNCCGGGNCNGAANTNCCGGGNAGCCCACTGTGCCGGAGTATTTCTCCGTTCGTNCTCTCCCT CTCTCTCGCTTCACGTTGGATCGAAATCGGACAAAAGTAAACGACAATGGCGGAAGAATTGGAGAAATCT ATGCACAAGGAAGAATCTCTGATGGAAAAGATCGCTGATAAGATCCACGATCACGACTCTNCGTCGTCGT CTGATTCCGAGCACGAGAAACCAGAGTCTCCGTCAGCTTTGAAGGCCAAGATATATCGTTTGTTTGGTAG AGAGAAGCCTGTTCATAAGGTTCTCGGTGGTGGCTTACCGGCTGATGTGGTTCTTTGTGGAGGGACAAAA AACTTCTCAGCTTCTGTTCTTGGTGTAGCGANNTGCNATATGGGGNTCTGGTTTGAATTGGTTGAGGATC AATTTTCTTTNAGNCTTGGTGTGGNANCATTTT >gi|2764054|gb|R30268.1|R30268 12873 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159E17T7, mRNA sequence CTCAAACACTTCATAACTAAACATCCTTTAAAGCCTTTTCAAAAACTCAATCATGTCAAGCAACTGCGGA AGCTGCGACTGTCCTGACAAGACCCAGTGCGTAAAGAAGGGAACCAGCTACACCTTCGACATCGTCGAGA CTCAGGAGAGCTACAAGGAGGCCATGATCATGGACGTTGGTGCCGAGGAGAACAACGCAAATTGCAAGTN CAAGTNCGGCTCCTCTTGCAGCTGCGTNAACTGCACTTGCTGCCCCCAACTAATGANGCTTCTTTAATCA AAATGTAATATGNNTAAAAGTTTNATGTNGGGGCTCATCCTATTTGAGNCTCATGGTTTCTCTTTATTAC TACCNCTCTNGTAATGGGGGTGATGTAATGGGGTTNTTACCCCNTCTTCCCNTNCCCNTTAAAAACT >gi|2764053|gb|R30267.1|R30267 12872 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159E14T7, mRNA sequence ATTAACTAAAGAGCCTTTNACTTGCGCCACACTCTCACCGCAATGGCCGCCTCGACAATGGCTCTCTCCT CTCCTGCTTTGACCGGAAAGGCCGTTAAGCTATCCCCGGCGGCCTCCGAAGTATTTGGAACCGGCCGAAT CACCATGCGCAAAGCCTCCAAGCCCACCGGTCCATCCGGCAGCCCATGGTACGGNTCCGACCGAGTCAAG TACTTGGGTCCATTCTCCGGTGAGCCTCCGAGCTACCTCACTGGAGAGTTCCCCGGTGATTACGGGGTGG GACACTTNCGGTCTATCCGCCGATCCCGAGACCTTTGNNTTAGGGAACCGTGAGCTAGAAGTTATTNCAN CAGNAGNATGGGGCATNNGTCCGGNGCCCNTAAGGGCTGCNNTTTTNCCTGAAGGCTA >gi|2764052|gb|R30255.1|R30255 12860 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159B16T7, mRNA sequence CTACAAGACTCAAATAGTTTCTATTTAATNACTAAAAAGAAAAATGGGTCGTGGTTACAATTTGCTATTC GTNCTAGTAACGTTTTTAGTATTGGTTGCAGCTGTAACCGCACAAGGGAACCGTGGCTCAAACAGCGGTG GTGGTCGAAGCAANTNGNTTGGGTTTTATGGGAATAGATNCCGAAACGTAGAGTCTATTGTAAGATCTGT AGTTCAGTCTCATGTCCGGTCTATCCCGGCTAATNCACCTGGAATTTTGCGAATNATTTCCACGATTGCT TTNTCCANGGCTGCNATGGCTCGGTTCTCCCTCGCTGGTAACACCTCANNGAGAACC >gi|2764051|gb|R30253.1|R30253 12858 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159B13T7, mRNA sequence AAAAAAAAAAAANTTNTTCTTCTACTAACTTACGCTTCANTGGCGACTCCAACTCCATCTCTATCTCCTC CTCCATTGAATCTCTGGATAATCTTATCAGAATCAAAACGNATNATCAACGNACACTCACGTCACTTCCT AGCTCTCTCCGTTCTCTTCCTCCTCCCTCTCTGCTTCTCCATCACAGTTTACCCTNCCGTCTTCCTTCTC ATCACCGATCAATCATCCGCTTCTNACAACACCGTCTNTCTCCTCCGCGGCGGACTCCACAACAACAACN GATGATGACATCGNTNCCAAAAACAAACGGTCTTACTTGGTAATCGGTTACATCGTTNTGAT >gi|2764050|gb|R30250.1|R30250 12855 Lambda-PRL2 Arabidopsis thaliana cDNA clone 159A23T7, mRNA sequence ACTTTTTTGTTNAGTCTACTGGTGTNTTCACTGACAAAGACAAGGCTGCTGCTCACTTNAAGGGTGGTGC TAAAAAGGTTGTAATCTCTNCCCCAAGCAAAGATGCGCCCATGTNCGTNGTTGGTGTCAACGAGCACGAG TACAAGTTTGACCTTGANATTGTTTCCAACGCTAGTTGCACCACTAACTGCCTTGCTCCTNTNGCNAAGG TTATTAATGACAGGTTTGGCATTNTTGAGGGACTCATGACCACTGTCCACTCTATCACTGCTACTCAGAA GGCAGTT >gi|2764049|gb|R84178.1|R84178 16137 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158P2T7, mRNA sequence TTCATCTTCATCTTCACGCAGCGACTTCTTTNATTCTTTCTTTTNATTCTCAGCTCCAATTTCAACCTGC ATTTNTNTCTTCTNAATTTTGGGTTTNTTTTTTNNATATCTCATTTGATCAGATCGACGAAGAGAGGAAG AAGGTTTGANCTGAGAGATCTTTGGAGGTAGAAAGAAGATCTCAAAAACGATGTCGTTTACAGGAACTCA GCAGAAATNCAGGGCGTGCGAGAAGACAGTGTACCCTGTGGAGCTTCTCTCAGCTGATGGAATCTCTTAT CACAANGGCTTGCTTCAAATGCTCTCACTGCAAAAGCAGACTTNAANCTTGNGCAATTTATTCATCAATT GGAAAGGAGTGGGTGTAATTGTNGGG >gi|2764048|gb|R30242.1|R30242 12847 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158O8T7, mRNA sequence ACAGATAAATGTACCCATCGTNTTTAGAGGACCCAATGGTGCTGCTGCTGGTGTTGGAGCTCAACATTCT CAGTGCTATGCAGCGTGGTATGCCTCATTNCCTGGTTTGAAAGTCCTTGCTCCGTATTCAGCTGAAGATG CTCGTGGTCTTCTTAAAGCTGCCATTAGAGACCCTGACCCTGTTGTTTTCCTTGAAAACGAGTTACTATA TGGNGAATCATTCCCTNTTTNANAAGAAGCCCTTGNTTCANGTTTCTNTNTTCCCATAGGCAAAGCCAAG ATTGANCGAGAAGGAAAGNACGTAACG >gi|2764047|gb|R30241.1|R30241 12846 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158O18T7, mRNA sequence TNAGAAGAGAACGAAGGAAGAAGAAGAAGAGGAACGATGGGGTACGTNTTTAGAGTACGATTGGNTTCTT TNTTCGCCGGAGCTGCGACTGCNTCTTTAATCGGACTCTCCGTTCTCTACAAGGATTACAAAGTCGCTCA CGAATCGATTTCTCAGCAGGCGAAGTCTTTTCATGACTCTNTGGATAGAAGGNTCTCTACTCTTGAAAGC TTGAGACAAAGTGAAGCTCCTCANCTTGCTGAGACAACTGAATAGTAATCTGTCTCGACATTGAACACTC TGCTTGGCAATNATGTTTTNAGTTGAGATGCTCTTTTTCNGGTTTTATGAATAACTTGGAAGTNCTTGTA TGACTCTNCTGTTATAAAACAATGAAGTTTAAGGT >gi|2764046|gb|R30238.1|R30238 12843 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158N2T7, mRNA sequence CAAATTTCCTAGAGAGAGAAGGGCTTAGTTTTNTTNCCGCCATCCGGTGAATCCGGCAAAGCCATCTGGT TGTNAAACCAGCTTCAGTCCAACAGCCTCCGGCTATTATAGAGGAGGTTGGTTGGNTTTTAACTGGCGGT GTTGGCTCCCTCAGCAACGTCGGCCAGTTTTNTNTCCGGCAACGATGGCTCCGTAGCACCGTTTGGCTGG CTCCNCTTGTATGCGGCATGTTTTCGGCTTTCNATGCGATGGTGTCCGCTTTTNTNTNTGGTCATTCCAC CGGTAAATCTTTCCGGTGGTTTTTGGCCAGTAATGTACCCGGTGTNAGATCCGGGTTTAANTTGTGNCCG >gi|2764045|gb|R30237.1|R30237 12842 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158M22T7, mRNA sequence GTGGCTCAAGCTTTACTTTTGGTTTATGAGAAAGCAGAAGCTGAAGGAAGGTACATCTNCATAGGCCACA CGGTTAGGGAACAAGAAGTCGCTGAGAAGCTGAAAAGTCTTTATCTAAATNACAACTACCCAAAGAGATA CATCGAAGCGGNTGGAAAANTGAAGGTNAGTTCAGAGAAGTTGCAGAAGTTGGGTTGGACTTACCGGCCG TTGGNGGAAACACTTGTGGATTCTTTTNNGAGCTACCGCAAAAGCTAAGCTTGTGGNCTTGTAAACCTGG GNACGGANTAGCATACTGNA >gi|2764044|gb|R30232.1|R30232 12837 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158F1T7, mRNA sequence GAGAAAAGGAGGTAAGAAAGGCCGAGGAGGAGGTGGTGGAAACAAAGGNGTACGTGGAGTTGATTTTGGT CTTGGTATTGGATTTAGCTCGGAATCTAGTAGGACACCTTCTTCTAAAGCTGCACCAAGTAGAAGTGGGG CAATCAATTCAGTGAGAACTGGAGTAATGGCCCAATTCAAGAATAGTTTTGTCGCTNCAACGCCATCAAA TCCACAAAACCAAGCTTATCCAAACAAGAGACCATCCCTAATGGGCTTTGTCTCAGGTGGTACTATTTGG TGGAGACATGNGGTAGAACTCCAGGAGTCAAGCTTCCCCCAGTANCACCTACTTCAAAAACGGCTCATCA CANAAATTNCAGCCCGGATTNACTTAACAGNGTTNTTNAGNATCGGGCCTTTATGNNTGGAAGGTGAAAN ATCTTGNGTTGGGGNTAATTTTNG >gi|2764043|gb|R30229.1|R30229 12834 Lambda-PRL2 Arabidopsis thaliana cDNA clone 158E19T7, mRNA sequence CGAGTGTNAGCATGCCTGTNGGGACCCGAAAGATGGTGAACTATGCCTGANCGGGGTAAAGCCAGAGGAA ACTNTGGTGGAAGCCCGCAGCGATACTNACGTGCAAATCGTTCGTNTGACTTGGGTATAGGGGCGAAAGA CTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGAGCTCGGACGCGAGT TCTATCGGGTAAAGCCAATNATTAGAGGCATTGGGGGCGCAACGCCCTCGACCTATTCTNAAACTTTAAA TAGGTAGGACGTGTCGGCTGCTTTGTTGAGCCGTNACACGGAATTCGGAGAGCTCCCAANGTGGGCCCAT TTTTTTGGTNAAGCAAGNACTTGGCCGATTGCNGGNNTTGAACC >gi|2764042|gb|R30222.1|R30222 12827 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157L21T7, mRNA sequence TCAACTCCAACGGTTTCCTGACCATTAATAGCCAACCATCAGTCAATGCAGCCAAATCCGATTCTCCAGC TATTGGATGGGGTGGTCCTGGTGGTTACGTCTACCAGAAAGCTTATCTGGAGTTCTTCTGTTCAAAGGAT AAGTTAGACACACTTGTGGAGAAATCCAAAGCTTTTCCTTCTATNACCTACATGGCCGTGAACAAATCAN AGAATTGGGTATCAAACACCGGTGAGTCCGATGTGAATGCAGTTACTTGGGGAGTGTTNCCAGCTAAGGA GGTTATTCAACCGACGGATCGTGGNTCCAGCCAGTTTNAAAGTCTGGAAAGTCGNGGCGTTTGAAATTTN GGTNAAGAAAGCTGGGNTAAANTNNTNCCCAGAAGGTTGACCCTTTTTNGAAAGTTGNNTGA >gi|2764041|gb|R30220.1|R30220 12825 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157L16T7, mRNA sequence ATTAGCTACATAAGTNCTATAATGACCCTTTACGAAGGAGATGTCATCTTGACAGGCACACCAGAAGGTG TTGGACCTNTAAAGATAGGTCAGAAGATAACGGCCGGAATCACCGGTCTATCTGAAGTTCAATTCGATGT GGAGAGGCGTGTAAAGCCCTTGAGCTAATAAGTGGTTTTNTTTATCTTNNATACANAAATGTCAATTTTA TAAAAGCATCTCTAAAATTTTNATCACTTACTGTGTTTCCTAAGGAAGGGNGAAATAAAACTNGTTACTC ATTTTATTTGTAATCTCTATAACANTGGCTCTAAGACCCNGTTTAAATTGTTTAAANAAANAT >gi|2764040|gb|R30217.1|R30217 12822 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157L10T7, mRNA sequence GCTACACAACAATGGCTGCTTACACGTGTACTTCCCGTCCGCCGATTTCNATCCGGTCAGAGATGAGAAT CGCTTCCTCGCCGACGGGTTCCTTCTCTACTCGACAGATGTNCTCTGTGTTGCCGGAATCGAGCGGATTG AGGACTCGCGTTTCTNTATCTTCACTCTCGAAGAATTCTAGGGTTTCCCGATTACGNCGAGGCGTTATCT NTNAAGCTCAGGACACTGCTACAGGAATTNCAGTGGTCAACGNTTCAACATNGGGACTNTCTAGTTNTCA AGGCTGATGAGCCTGTTTTTTTGTNNGACCTTTTTGGGCACCATGGTTTTGGACCC >gi|2764039|gb|R30212.1|R30212 12817 Lambda-PRL2 Arabidopsis thaliana cDNA clone 157K18T7, mRNA sequence TTGTTTGATAGTCCCAGTNATGATGCTAAGCTTAAAGCTACAGACTTTGGTTTGTNTGTNTTCTACAAGC CAGGGCAGTATCTGTATGATGTAGTTGGAAGTCCGTATTATGTTGCACCTNAGGTTCTGAAGAAATGTTA TGGNCCAGAGATAGACGTGTGGAGCGCCGGTGTTATCTTGTACATCTTACTAAGTGGGGTTCCTCCTTTT TGGGCAGAAACCGAGTCAGGAATCTTTAGGCAGATATTGCAAGGGAAGATAGNTTTTAAATCTNATCCGT GGCCTANTATCTCANAAGGTGCTAAAGATTTTGNTTTNCAAAATNCTCNGATAGG >gi|2764038|gb|R30208.1|R30208 12813 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152P24T7, mRNA sequence CTCTCTTCTTCTTCTTTNATGTTTCTNCTTTNAGTTTTTNTTTTTNCGATTTAATCTGATCATCAAAACC CTGCTCTCTCAAGATCATGCTTACTAAAAGAACCCATCCCATGATCGGAAAGATATCGGAGCTCCTTGTC GGTGTCAACCGATTCCACGGCGGCTCCTTTNTTCGACGTCTTGATGACGAGCCCTAAAAGCCCACTGGAT TTCAAGATTCTCCCTCAGATATCTCAAAGAAACAGTTCAAAGAGGTTCTACGATGACAATNTTGGTGGCT CCGTTGGTCTAGGGATTGTAGCCGCGCTCGNGGAACTCAAACACTCGTCGGAATCACGAGGCGGTTTNTA GGATCCGGAACCCGAACCAACCCCGGGNCGGGTCTTNTTCCGGGTTCAANTTCATGNGCCNATNGTNGAA AGCACGGNCCGGTGGA >gi|2764037|gb|R30207.1|R30207 12812 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152P23T7, mRNA sequence CTCTNTTCTTCTTCTTTNATGTTTCTCCTTTNAGTTTTTNTTTTTNCGATTTAATCTGATCATCAAAACC CTGCTCTCTCAAGATCATGCTTACTAAAAGAACCCATCCCATGATCGGAAAGATATCGGAGCTCCTTGTC GGTGTCAACCGATCCACGGCGGCTCCTTTNTTCGACGTCTTGATGACGAGCCCTAAAAGCCCACTGGATT TCAAGATTCTCCCTCAGATATCTCAAAGAAACAGTTCAAAGAGGTTCTACGNTGNCAATNTTGGTGGCTC CGTTGGTCTAGGGATTGTNGCCGCGCTCGAGAACTTCAAACACTCGTCGGANTCAAGNNGCGTTTTTNGG TCGGAACCGG >gi|2764036|gb|R30204.1|R30204 12809 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152N24T7, mRNA sequence TTTAATGGAGTTTTAAATTTAAAAATATTTGGTAACCGAGTGGNTCATCATGTTATTGAGAAGCACATCT NCTCCGATACTGAACTCGTGGCTTCCACAACACTGCTCGAGAGAATCGTCTCCGGAACCGGAGTCACAGC TCTGGCGCCGGTCAACATCATTGTNTCTTTCNTNATCAAAGTCCATAGATGGACACANTGGGGAGCAGCT GCACCAAGCTCTCTNTGACAACAGGGAGATTATTATNCTTAAATCAAAAAGCAACGGGCACAGCTACAAA ACTCCANCATCCANGCAGGGCAACGNAGGTNNATCTTTTAGGATGTAACACGGGT >gi|2764035|gb|R30202.1|R30202 12807 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152M9T7, mRNA sequence CAACAGAATGGTTAACCACTTTNTCCAAGAGTTCAAGAGGAAGAGTAAGAAGGATATCACCGGTAACCCA AGAGCTCTTAGGAGGTTGAGAACTTCCTGTNAGAGAGCGAAGAGGACTCTTTCTTCCACTGCTCAGACCA CCATCGAGATTGANTCTCTATACGAGGGTATCGACTTCTACTCCACCATCACCCGTGCTAGATTTNAGGA ACTCAACATGGATCTNTTCAGGAAGTGTATGGAGCCANTTGAGAAGTGTCTTCGTGATGCTAAGATGGNC AAGAGCACTGTTCATNATGGTNGTCCTTGTTGGTGGTTCTANCCGGAATCCCTAAGGTTTCAGCAAANTT GCTCCCAGGGNCTTNCTTTTAACCGGGCAAANAGNCTTTTCCAAAGTNTT >gi|2764034|gb|R30201.1|R30201 12806 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152M3T7, mRNA sequence CGAAAAGGAAGCAGTGAAAGGGAATGATGTTAATGTAAAGAGGATCAAAGAGTATATGGAGAAGNTTGAG TTAGAGCTTTCTAACATATGCNTTGATATTATGTCTGCNTTNGATGAGCATCTCATTCCTTCGGCTTCCG NGGGTGAATCTACTGTNTTCTTCANCAAGATGAAAGGTGACTATTACCGCCATCTTGCTGAGTTCAAATC AGGGAACGTCGAGGAAAGAGGCTGCTGNTCAGNCTTTGAAAGCCTCTGAGATNGCTACTACTTGCTGCTG TGGCTAAGNTCCCTCCANCA >gi|2764033|gb|R84175.1|R84175 16134 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152M2T7, mRNA sequence AGAGGTTCTTTGGACGATGAAACAACTAATCCGCCGTTNATCGCGTGTNGGGACTCAACACAGTATAGCC TCCTCCGGTCTGAATCCCAGCNTGGCCGCACCAAGAAGGAGAAACACAAATNTTGGGTTCCCGAGGGGCA CGTGCCTGTTTACGTAGGCCACGANATGGAGCGGTTCGTGGTGAATNCGGANTGCTCAACCACCCCGTTT TNNTAGCGTTGCTGAAGCAGTCGGCTCAANAGTATGGATACGAGCAACAAG >gi|2764032|gb|R30195.1|R30195 12800 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152J7T7, mRNA sequence ACTGCTGCATTGCCCGTNTACGCTAAAGGATTTAGAAAGCTTTTAAAGTACATCAAGGACAAATACGCAA ACCCGGAGATTATGATAATGGAAAATGGATATGGAGATAAACTTGGGACCACAGATTCGGTTGACGTTGG TACTGCTGATCATAACAGGAAATATTATCTNCAGAGGCATCTTCTGNCTATGNNCGNGNCTATTTGCATC GATAAGGTGAGAGTTACGGGATACTTTGTNTGGTCATTGTTGGATAACTTNGAATGGNANAGATGGTTAC AAAA >gi|2764031|gb|R30194.1|R30194 12799 Lambda-PRL2 Arabidopsis thaliana cDNA clone 152J23T7, mRNA sequence GATTCTNTGAAGTGTATATNAAGAGTGTAGCAGAAGAAGCGTTTTTCCCGGCGGCGGAGAGTTCGCCGGA GTCTGAGCCACGTNTCGCGTTCACGGTTGTNCCAGGGTTTAGAATTGGGAAGACTTCAATACAATNCGAG GTCTATCTNTCGCTTTCATGATCGCNGTTTGANCTAAGATCCGAAAACGGACGGTGAAGATTCTTGGGCG GTTTGGTAATTNCTGAAAATGGTGGGGTATGTTTAGAAAATTGAGAAAAATTGTGGGCCGTTGGATTTGA AGTAGCCGACCTAGAGTTGTGTTTATNTTTTCTNTTTTTCCCCCTCTTTTTNAGTTTTGTCGGT >gi|2764030|gb|R30173.1|R30173 12778 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166M23T7, mRNA sequence AATACCNGAGAAAATGGCGAANTTNTNGGGAACAACCGGCGAATTTTNCCGGCGAAGAGATGAATGGAGG AAGCATCCGATGCTTTCGAATCAAATNAGACACGCTCTTCCCGGACTTGGAATCGGCGTCGCCGCCTTCT GCNTTTATNTCGTCGGTGAGCAGATCTACAACAAAGCTTTGGCTCCTTCCAAATNATCTCACCACCACCA GGAACAGACTGCTCCGTCTCACTGAAGAGCATCTTTTTTCTTCGATGAGATGCTTGAAACAGTGGCACAA GGCTGAACTCAGGGTCTCTTCTTGGTTACTAGTTTTCGTTGGATTGNNTTAATAATCATGTTTAAATCGG NTACAAAGANTTTNATATCTATATTTGAACTGTAAAGCTTTNTTNGCTCAAAGGGTCTCTTTG >gi|2764029|gb|R30169.1|R30169 12774 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166M14T7, mRNA sequence GATGACAAAGGAAGGAATTAGTCCTAATNTTGTAACTTATAATTCCATAATCGNTGCCTTTGGNCGTNCT GCAACTATGGACAGATCAGCCGATTATAGCAATGGTGGATCTTTGCCTTTNTCTTCTNCTGCTCTGAGTG CATTGACTGAAACAGAGGGTAATCGGGTAATACAGTTATTTGGGCAGTTAACAACTNAGAGTAACAACCG TACGACGNAAGATTGTNAGGAGGGTATGCAGGAGCTCTCCTGTATATTGGANGTTTTCCGCAAAATGCAT CAGCTGGAAATTAAACCCAATGTTGTAACCTTTTCAGCGNTTCTNAATGCTTGCAGTCGGTGTAACTCAT TTNAAGNTGCATCAAT >gi|2764028|gb|R30164.1|R30164 12769 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166L20T7, mRNA sequence AAGATACAGTCTACCAAACTCAAGGATAATNATCCATCAGCCGCTTGGTGGAGCTCAAGGTGGCCAAACC GACATTNACATTCAGGCAAATNAAATGCTGCATCACAAGGCAAACCTAAACGGTTACCTCGCATACCACA CTGGTCAAAGCCTGGNGAAGATAAACCAGGACACAGACCGTNATTTNTTCATGAGTGCCAAAGAAGCAAA AGAGTATGGACTTNTCGACGGNGTTATCATGAACCCNCTTAAAGCTCTCCAGCCACTTNCAGCAGCTTAN TCGCCTAAAGGTAGTGGTTCAGCTTTAGCNCTTGTCCTTTTTTGGGCCTTTGATGNACCTGNGATTTTCC NTGAAAAATGGTTCTATTCTCCAAGGGGGAATCAGNTTTTTTTTTGGGTCAAACT >gi|2764027|gb|R30160.1|R30160 12765 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166J8T7, mRNA sequence TCCTCTTCAGCTCCAACAGGCTCAAAAAGTGATCCAACTGATCACAACTCCATAAATTCTGAAGATGATT TACTCTTGTNTGCAATGACCAAAGATGGACAGACCATTCTTTTGGATGGCAATACTGGGAAAATACTTGC CTCTTGCCTGAGACCTCTAAAGAACCCAACTGCGATTTGTATGCACATTATAGAGAACTGCTATGAAAAC TATGAAACGCCCAGTGAAAAACCAGCTGAAAATCCATCTGGGAAGGATAAACATGAGAACAAATCTCATA TAATCAAAGCTAGTGAGAGTCATTCACCAGACGGTGNACAGAATGCTGTCACAGGAACAAAACTTTTTTG ATCCAGATATTTGCGGNTTCATTATTTCTCATGGTGTTCTGAGGGTGCACTGNGGTTGTNTACCTGTAAA GGTTCTNTNTCNGGGAGGCTTTNAGGGCTTTTTGGGGGGNAATNTCCAAGGCGNNTTCTTGGTGGGGTCC TTAAAAAGNTGGNGGGGNTTTGAGGCTCCTTTTTCCNNCAGGGGTTTTTAANAGGNTTCCGGNNTGC >gi|2764026|gb|R30155.1|R30155 12760 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166I22T7, mRNA sequence CTTTGAACAGNTCATAGCTTCCGANGAGGNTAACTCCTTGAAGGNTCCAGCAACTAAGTCTTATGCTCAA GTGTTTNCNCCCCACCATGGATGGGCTATACGGAAAGCTGTTTCTNTTGGGATGTATGCNCTTCCCACAA GGGCTCACCTACTTAATATGCTCAAAGAGGATGAGGCGGCGGCTAAGATACATATGCAAAGCTATGTCAA TTCATCGGCACCATTAATCACGTATCTTGATAATCTATTCCTCTCCAAGCAACTCGGTATTGATTGGNGA AGAGCCTGNAAAAAAGGCATAACTATTGTAACTCTTTAGGCAAATTAACCTNTGTTCCTCACANCCAAGC TATGTAATTGTCATAACAACCAGCGGCGGNATTACATTGGGNTTAAATTNGGGGATGNCCCTAAA >gi|2764025|gb|R30153.1|R30153 12758 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166I18T7, mRNA sequence GAATGTCCTACGATAGGGACCGGAGTAGAGGAGAGCAGTTCTTGGTGAGGTGGGCAATCCCACAGCTTCA TGATATCGATGCATTGGGCAAAATGGTTGATCCATCTNTTAATGGACAATACCCTGCAAAGTCATTGTCA CACTTTGCTGATATAATATCCCGGTGTGTTCAGTCTGAACCAGAATTTAGACCACTGATGTCAGAAGTTG TTCAAGATCTACTAGATATGATCAGAAGAGAGCGTCATGGTTCGGGTGATTCTACCGCGGACTAGTGAAT TGTAAAGAAGCATTTTTTTATCGGTCCATCTCTGTGAATTCGTGGGAANCAAGGAGATGTCCAGTTCTCA GAAACAACAACACCAACATNGGGGCCTAAACCCGGCCCCTT >gi|2764024|gb|R30152.1|R30152 12757 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166I16T7, mRNA sequence ATTGCTTCTTTCTATCTNTNCTCTCGCTACACAACAATGGCTGCTTACACGTGTACTTCCCGTCCGCCGA TTTCNATCCGGTCAGAGATGAGAATCGCTTCCTCGCCGACGGGTTCCTTCTCTACTCGACAGATGTTCTC TGTGTTGCCGGAATCGAGCGGATTGAGGACTCGCGTTTNTNTATCTTCACTCTCGAAGAATTCTAGGGTT TCCCGATTACNACGAGGCGTTATCTGTNAAGCTCAGGACACTGCTACAGGAATTCCAGTGGTCAACGATT CAACATGGGACTCTCTAGTTCTCAAGGCTGATGAGCCTGTNTTTGTNGNCTTTTGGGANCATGGTGTGGA CCCTGCAAAATNATTGACCCCATTGTNAAAGGANTTGNGNAAAAGTAACGCGGGCCAGTTCAAAGT >gi|2764023|gb|R30151.1|R30151 12756 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166I15T7, mRNA sequence AGTTTNTTGAGAAGAAAAAAAGGGTCAAGAAAGATNCCTAAAGACAGGAATATCGGAATCGCCATGGATT TCTCAGAGAGCAGCAAGAACGCTCTGAAATGGGCGATCGANAACTTAGCAGACAAAGGAGACACGATTTA CATCATCCACACTCTACCACTCTNTGGCGATGAATCTCGTAACTCCCTCTGGTTCAAATCCGGTTCTCCT CTCATACCGTTGGCAGAGTTTAGGGAACCGGAGATTATGGAGAAATACGGTGTCAAAACCGGCATCGCAT GCTTTGATATGCTCGNCACTGGTTCGAGGCAGAAAGAGGTCCATTTGGTGCCCATTTTTACTTGGGGGGN TCAAGAGGGNAGGCTTTTTTNANCCCTTTTNAAGGTTTTAAAACCCCGGGTTNTNTTTTNATGGGG >gi|2764022|gb|R30149.1|R30149 12754 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166I12T7, mRNA sequence TTACTCGTGCCAGCCACTCGCATTTNTCCAGATTTAATTATCCTTCCTNGAAACAAGAGCTTAGCTAAGA TGACGAAGAACTACCCAACCGTGAGCGAAGATTACAAGAAGGCTGTTGAGAAGTGCAGGAGGAAGCTCAG AGGTTTGATCGNTGAGAAGAACTGTGCACCCATCATGGTCCGACTNGNATGGNACTCTGCTGGAACTTTC GNTTGTNAATCAAGGACTGGAGGTCCATTCGGAACAATGAGGTTTGACGCTGAGCAAGCTCATNGAGCCA ACAGTGGTATCCACATTGCTCTTAGGTTGTTGGACCCCATCAGGGNGCAATTCCNTACCATNTCTTTTNG NTGATTTTCCATCAAGNTTGCTGGTGGTTNTGGCCGTTGAAGTTACTGGGGGGCC >gi|2764021|gb|R30148.1|R30148 12753 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166I11T7, mRNA sequence GTATTATNACACGAAAAGCGGAAGGTTTGTGGGGAAACAATCAAGGCTTTACCAGACTTGGACCATAGCG GGTTTNTTGGCAGCTAAGAAACTAATAGAGCAATCTNAGAAAGCATCACTCTTGTCCTGGGAAGAGGACT ATCAGCTGCTCGANACTTGTGTCTGTGGCCTCAGTAAAAGCAGCGGAAGGAAGAACAAGTGTTCGCNTTT CACACCTCCAAGATCTTAGTTTCCTGAAACTTAATAAACTCACGNACCAAAGTCCATATTTAATCATATT TNGCTTCTNACGTTTAGCAAAACATCCTTGCTAATTAGGNCGGTGNATCAGTTTCAAACTTAACGGATTT TTAATTTTGAAAAAAGGGNTNTANTNTTTANGTTT >gi|2764020|gb|R30139.1|R30139 12744 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166G24T7, mRNA sequence CTCTGCTTAGCTCTCAGCTAGCTGAAATCTCTCTCAATCCGTGTAGCTTAGCTTCCCTAATCCAACCATG GCAAAGTTCGGTGAAGGTGACAAGAGATGGNTCGTAGAAGACAGACCTGACGGCACCAACGTCCATAACT GGCACTGGTCCGAAACCAATTGCNTTGAATGGTCTCGCAACTTCTTCACCAAACAATTCTCCGGCGTTGA TATCCTCTCCGGCGAAGGTAATCTTTTCATCAAGGTCAGTAAGATCGNGAAAGTCGAAGGCGAGGCTTAT GTGAATGTAAGGANGGGGNAGATTATCCCTGGGTACGNGCTTAACGNCTCTTTATCTTGGGAAGGTGAGG CTAAAGATTCCGNTGGGNAGACGNTTTTTNAAAGCTNNTTGGNTTNGTCGNTATGCTTTATATNTCCGGT GGGGATTCCTG >gi|2764019|gb|R84174.1|R84174 16133 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166G11T7, mRNA sequence AAGAAGAGAAACAACAAGAAGTAGTAATGGNTTCCNCTATGCTCTCCTCCGCCGCTGTGGTTACATCCCC GGNTCAGGCCACCATGGTCGCTCCATTCACCGNCTTGAAGTCATCCGCTGCATTCCCGGTCACCCGCAAG ACCAACAAGGACATCANTTCCATCGCAAGCAANGGGGGAAGAGTTAGCTGCATGANGGTNTGGCCACCAA TTGGAAAGAAGAAGTTTGAGACTCTATCTTACCTCCNTNACCTTAGTGACGTCGAATTGGCTAAGGGAAG TTGCTACCTTTTCCGNAACANGTGGATTC >gi|2764018|gb|R30125.1|R30125 12730 Lambda-PRL2 Arabidopsis thaliana cDNA clone 166A2T7, mRNA sequence AGAGAACGATTTTAAGGTCGGTTCTTTGAATTAATTTCACCTTGTNATTGGTAATTCGTTACGATTGANA GAGGGACCGTGAAAGCAACGGACGAGCATCAGTTGACGATGTAGAAGATGCAGAAAAAACTCATCGAGTT TCTTCGTCGACAAACGGGAGCAGAGAACGGCTGACGACTCGCATTAATGGGCCTTGTCAATGGGCTTTAC TGTGAGATTGAAGAAGATCCAAAACTCATCGAGTTTCTTCGTGTTCAAACGGGGCAGAGAACGGCTCAAG GCTTAAGGTTAATTCTCAGCCCATTTTCTTGTTTACTTAAATTCNTATATTTNATAATTTNNAGTTAATG GGGNTTTTTCCNACGGGTTTTTAAAGNTTTTTTGCAATTTTTATTCAAGGTTTTGTTTAAAGGGAATTTT TAAAAATTTTCNGGNAAAAANTTTTNTTANATNTCNTAANANTT >gi|2764017|gb|R30121.1|R30121 12726 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165J7T7, mRNA sequence CAGTCACTTAAAACCCTAAATNATGACGNTCGCACCGGCATTGCAGACGACGTTCGTNTCATCAACCAAC TTCCTGAAACATTCTTCTTCGTGGGGATCACCATCACCAAACAATGTNATTCTNCCCAAAAACAAGAGAT CTTNTTCCTCCGTAGTTGTCGCCGCCGTCGGTGATGTCTCTNCTGACGGAACAATCTACTTAATCGGCGG ANATTCGCCGTTGCACTCGTCGGAACTGCATTCCCGATCCTNTTCAAACGCAAAGACACGTGTCCGGAAT GTNACGGAGCAGGATTTGTNAGGAAAGGAGGAGTGACTCTAAGAGCCAACGNCGNACGGAAGGNTCTTCC TCAGATCGTTTGTGCTAACTTGCAATGGGNCTCGGAAAAGCTTTAACCAGGATTGNTTAAATCATAAGGN TTTCTTCATATNTTATGTAAAAAGGTCCATTTTTTAATTCCCCTTTCTTCTNTACAATATT >gi|2764016|gb|R30119.1|R30119 12724 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165J20T7, mRNA sequence CCTCACATTCAACATTCTTTTTTNAACTTTAACCACCGCATGTGGCGGTGNNTGCAGTTCCACCCCTAAA CCCAAACCTAAGCCCAAGTCCACCGGAAGCTGCCCCAAAGACACTCTCAAGCTCGGTGTTTGCGCCAATG TTCTCAAGGNTCTTNTCAAAATTNAGTTGGGAACACCACCAATGAAGCCTTGTNGCTCGCTCCTCAATGG TTTGGTTGATCTTAAGGCTGCNGCTTGTTTCTGCACCGCCCTAAAGGCTAAAGTTTTAGGCATTAATCTT AATGTTCCTGTCTCTNTNAGCCTTCTTCTNAATGTTTGTGGGCAAGAAGGGTTCCTTCTGGTTTCGTATG TGCTTGAAATATCTATCCACCCTTNGATTGGTAAAATGGTTTTTTTGGGTACAATNCTTNAGGTTTCCCA ATTNNAGTTNGGGGTTTT >gi|2764015|gb|R30114.1|R30114 12719 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165I21T7, mRNA sequence AACTAACTAACGACGCCGGAGATGGCCGCCACTTCAACCGCCGCTGCTGCTTCTTCAATCATGGGTACCC GGGTGGTTTCCGACATTAGCTCCAATTCAAGCCGGTTCACAGCCCGGTTCGGATTCGGAACCAAGAAAGC ATCTCCCAAAAAGGCTAAGACGGTTATCTCAGACCGGCCTCTATGGTTCCCAGGCGCAAAATCACCCGAA TATCTCGACGGTTCACTTGTCGGGGACTACGGGTTCGATCCTTTTGGTTTAGGCAAACCGGCGGAGTATC TCCAATTCGATTTGGATTCCTTGGACCAGAACTTAGCCAAGAACTTATACGGGGGAAGTNATCGGGGCTT GTACCNAGGGCGGGTGGACCCCCAAATNGANGGCCGTTTTAGCCATATTAGTGAAGTNTTTNGGGGTTAA AAAGNTTTAAGGNGNTTTAGGCTTTTTCAGGGNNGGTGGGGAATTTTNNCCANTTTTTGGGGNTTTTNCC CGGNNNTTGCTCNCCGGTTTTTTTT >gi|2764014|gb|R30111.1|R30111 12716 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165G6T7, mRNA sequence TNAGGGAGCTACCAAGTTTTTNCTCCCCAGGCTCAGTGACTTCCAATTCTTTGTTGGGGAGGGTATGCAT GATGACAGCACTTTGGTCTTTNCTTACTACAAGGAGGGTTCAACTAACCCAACATTTTTNTACTTCGCTC ATGGTTTGAAGGAGGTCAAGTNCTGAGAGAGAAGCTCTCGTTGGGTTACTGTGGTCGGTCGCAGCGACTC TCTAAGTTTATGTTTCTTTATATTGTCCTGTGTTTCGTCGTCGTCCCCTATTAAAATTACCTGCCAGTTT ACTTTTCTCTCTTCTTGTTTTCTGTGTTGGAAGATTCTCAAGTTATTTATTCCGCAAAAAACGGTTTATC ATTTACAATTAGTTGAATTTTGGGCGTT >gi|2764013|gb|R30104.1|R30104 12709 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165G12T7, mRNA sequence GGAAGNGATGGCTTCNACCTCCGCGATGTCANTGGNCACACCACTTAACCAGACCCGTTCGTCTCCTTTC CTTAAGCCATTACCTCTGAAACCATCCAAGGCTTTGGTTGCAACTGGAGGCAGAGCACAGAGGCTTCAAG TTAAGGCCCTCAAGATGGACAAGGCTTTGACCGGTATCTNCGCGGCTGCTCTTACTGNTTCGATGGTGAT TCCGGAGATAGCTGAAGCTGCTGGTTCTGGAATCTNTCCTTCCCTCAAGAATTTNTTGCTCAGCATTNCT TCTGGTGGCCTCNNCCTCACTGTCATCATTGGTGTCGTCGTCGGCGTCTCCAACTTTGACCCTGTCAAGN GAACCTAAGNCCTATATATCNTTTCTTACATCATTATTGTAATCTGGTCTCCTTCTGTGGATTCGTTCAA TGGTGCAGAATGAACTTTTNGTNAAAGCAT >gi|2764012|gb|R30100.1|R30100 12705 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165F21T7, mRNA sequence CTGTTGTCTTATCANTTANCTCTCTAACGGCGNGGCAATGGGTTTTCCGGNGGGATATTCTGAGCTACTT CTCCCAAAAATCTTTTTCTACTTGTNATCTTTCTTAGGTTTGATACGTAAACTCATCTCCACAATGTTCA AGATCATTGGTCTACCAGATTTCTTAGAACCTGAACCGGTTTCAACCTCATGGNCCGACCCACCACCCAC GTTGACCAAACCTGACTCAGCAGCAATACTAGCCGGAGAGATGTTACCGGTTGTTCGATTCTCGGNTATA AACCGACCGGNATCCGAGTNTTACGCAGTGTGNCTCTAAGATTTCGAGANCGNCGACGNGATCCGACGGG G >gi|2764011|gb|R30093.1|R30093 12698 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165D9T7, mRNA sequence ACATCACATCACATAGCAATCACTTCACATCACAAAACACCTCATAGCCGCAAAATTTAATGGCAGACGT CAAGATTCANTCCGAATCCGAATCCTCGGATTCTNATCCAGTGGTCGACAATCAACCACCTCCTCCGNCT CCGCNGCCGCAACAGCCGGCGAAAGANGAGGAGAATCAACCAAAAACATCTCCGACTNCGCCGGCACACT GGATGCGGTATCCACCAACGGTGATAATCCCTCATCAGATGATGTACGNGCCGNCGNCGTTCCCACCTTN TCATCAGTATCCGNATNACCACCACCTTNAGCATCAATCTCGTGGTAATA >gi|2764010|gb|R30092.1|R30092 12697 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165D8T7, mRNA sequence CCCTAATNTAACATCACATCACATAGCAATCACTTCACATCACAAAACACCTCATAGCCGCAAAATTTAA TGGCAGACGTCAAGATTCANTCCGAATCCNAATCCTCGGATTCTAATCCAGTGGTCGACAATCAACCACC TCCTCCGCCTCCNCNGCCGCAACAGCCGGCGAAAGANGAGGAGANTCAACCAAAAACATCTCCGANTCCG CCGCCACACTGGATGCGGTATCCACCAACGGTGATAATCCCTCATCAGATGATGTACGCGCNGCCGANGT TCCCACCTTATCATCAGTATCCGAATCACCACNACCTTCAGCATCAATNTGGTGGTAATAAGCATCAAAA CGNTTTTAATGGTGNGATTAAACCATATGGGTTGGTGATTTGATTANTGGATGGTTGAGGNTTNTTTTAA TTTTT >gi|2764009|gb|R30091.1|R30091 12696 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165D6T7, mRNA sequence TCCATCTCCGGCACCGGCGCCTGANCCAGTNACCGCACCGACACCATCTCCAGCGGATGCACCTTCACCC ACCGCAGCTTCACCACCGGNACCTCCNACGGACGAGTCACCGGAAAGTGCTCCTTCANACTCGCCAACAG GTTCAGCGAACAGTAAGTNAGCTAACGCAGCGGTTGGNGTGAGACACCGTCGTTNTTCACCGCATTGGTC ACGATCGCGGNCATAGCCGTNTCCGTGTTTTTTTGCTCTTAAAACCTTTNGTAATTACGGAGGCTGCNAC TCCCTTTGTTTATTTTNAATTTAAATTATCTTTTCAATTTTAATTTTTGTGGGTATGNGTTGTTGAGTTT GAAAACAT >gi|2764008|gb|R30090.1|R30090 12695 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165D5T7, mRNA sequence TCCCTNCTGAGCTATTCGGAAAATCTAAATCTCCATCTCCGGCACCGGCGCCTGANCCAGTTACCGNACC GACACCATCTCCAGCGGATGCACCTTCACCCACCGNAGCTTCACCACCGGNACCTCCGACGGACGAGTCA CCGGAAAGTGCTCCTTCAGACTCGGCAACAGGTTCAGCGAACAGTAAGTCANCTAACGCAGCGGTTGGCG TAAGACACCGTCGTTNTTCACCGCATTGGTCACGATCGCCGTCATAGCCGTCTCCGTGTCTCTNTGCTCT TAAAACCTTTCGNAATTACGCAGGCTGCCANTCCCTTTGGTTTANTTTTNAATTNAAATAATCTNTTCAA TTTTT >gi|2764007|gb|R30086.1|R30086 12691 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165B3T7, mRNA sequence CCCTCCATCTTGTGCTTCGTCTCCGTGGTGGTATGCAGATATTTNTAAAGACCCTTACCGGAAAAACCAT TACTCTTNAGGTTNAGAGCTCAGACACAATTGATAATGTCAAGGCTAAGATTCAGGACAAGGAAGGGNTC CCACCGGACCAACAGAGACTCATCTTCGCTGGGAAGCAGCTTNAGGATGGTCGGACTCTTGCAGATTACA ACATCCAGAAGGNGTCGACTCTTCACTTGGTTCTNCGTCTTCGTGGTGGAAGCTTCTAAGCTTTTNTAAN GTGATCACAAGTGGTTNTTCGAGTCTCATGCACTTGGGAGGTGAGATCTTANCTGGGTTTGGGTTCTCCT TCGGTCTTCGGGGAAAACCTTTTCCTTATCGGTGNTTCTGAAGGTTCATNTCCNGNTTCCTTTAATTTCC NATGAANCC >gi|2764006|gb|R84173.1|R84173 16132 Lambda-PRL2 Arabidopsis thaliana cDNA clone 165A4T7, mRNA sequence TCAGGGACCNGGCCTGAATTCCCNGGGCGGCCCACTGCAGTCCGGGCAAAACCTTTGAGTATGAAACAAA TTTNCCNTGTATCTCTCTCTCTTGTAATCTCCGACGAAGAAACACAGTTTTATGGCAACCACCAGATCGA AGAGCTTTCAGTTGATCACCAGCTTAAGGAAACACCTAGTTAACACACGCGCTTCCACACGCGCCACCGN CTCTNCTCTCTTCCCTTCACGTCGGAGTGGACATTCCTCGGCGTATGACAAGAACGTGGAGGATGAATTG CATGCAAGTGCAGTACCTGACGAAGTTATAAAAGCCAGATTCTGATAAATATTGGTCTCCTCACCCCAAA AACAGGGAGTCTTTCGGGTCCCTCTACGGCTGNGGAACAGNGGCACCGGCCGAGGGTGCACANCAGGGCA AAGGAGTNCTTGGAGGAGACCCGCCTTGGTTTNGCCAANAAANGTTTTGGGGGNTTTGGNCAAGNNTTAC CATNNTT >gi|2764005|gb|R30077.1|R30077 12682 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164P11T7, mRNA sequence GAACACATTGCCTCCAACTNCTGCATTGATGTCTGCAATCTATGAAGAACACAAAGATGAGGATGGGTTC CTCTACATGACTTACAGTGGAGAGAACACTTTTGGTTCTNTTACCGTTGCTTGAATAAAAATCGATCTTT GGATGACTTTNATGTACATACATAAATCAGGAAGATAAAGATGTACATNGCTTCCTTCTTTCCTCTGGCT TTNAACTTTNCTTTGGATGTTTGGATATCTTTCCCTTTGGGTTTATNAATCGTCAGAAACTTCTCCT >gi|2764004|gb|R30068.1|R30068 12673 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164N3T7, mRNA sequence AAGATGACTCACACCACTTACAAGGCCAAAGGAAATGGCTGGCTTCTNCTCGCTGGGCTGCAGCCGCTCA GTTTGCTCTGGCTGCNAGTNTTACTTCGTCGCACAACGATCTTCAAAGCCTTGAAATTGAAGATGACAGC AGCATTTTGAAGAGAACAAACGATGCAGTTGTGACTCTGCGCAGTGTTCTCGAGGGGAAACACGACAAAG AGATTGCAGAGTCGCTTGAGGAACATAATATCTCTAGAGAGGGATGGTTGTCATCACTCTATAGAATGGT AGAAGGGCTTGCAGTGATGAGCAGATTGGCAAGGAACCGAATGCAACAACCGGATTACAATTTCGAAGGG AATACATTTGACTGGGGCAACGTCGNGATGTTGNTAAGTTCATGTTAAACTAGGGNTCATTTGTCTCTTC CGTAAGAACATATATTTTTCTTACCCAAATTTTNAGTTTGGTTNCNTTTCATAACCTTATTTTTNCCNCA AAAAANGGG >gi|2764003|gb|R30056.1|R30056 12661 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164L4T7, mRNA sequence GAGAAGAATAGTTTGATCATCTTGTGAGAAAAATAATGGCTGCTTCAGTNATGCTATCTTCGGTGACATT GAAACCAGCTGGTTTCACGGTGGAGAAGACGGCGGCTAGAGGATTACCGTCGCTCACAAGAGCTCGTCCC TCCTTCAAAATTNTCGCCAGTGGCGTCAAGAAGATCAAGACCGACAAGCCCTTCGGAATTANCGGCAGCA TGGACTTGAGGGACGGCGTCGACGCCTCCGGCAGAAAGGGCAAGGGATACGGTGTTTACAAGTACGTCGG CAAGTATGGAGCTAACCGTCGATGGGATACAGTCCTTATTTTCAAACGGGGACCGNGTTGTCAACCGATT GGTTNNCGTTTTCCAAGGGNNGGNGTCACCCGGNTTGGCAATTTTTTGGNCGGGTAANCTTTTCGCCGGN ATTTNTTTCCCCGNNGGTNCCNTTTTTTTT >gi|2764002|gb|R84172.1|R84172 16131 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164K16T7, mRNA sequence TTTGTNCTGCACTACTCAACCTCAATGGCCGCCTCAACAATGGCTCTNTCCTCCCCTGCNTTCGCCGGTA AGGCCGTCAAGCTTTCCCCCGCGGCATCTNAAGTCCTTGGAAGCGGCCGTGTGACAATNAGGAAGACTGT TGCCAAGCCAAAGGGCCCATCAGGCAGCCCATGGTACGGTTCTNACCGTNTNAAGTACTTGGNTCCATTC TTTGGCGAATNACCGAGCTACCTTACCGGAGAGTTCCCCGGAGACTACGGATGGGACACCGCCGGANTTT >gi|2764001|gb|R30046.1|R30046 12651 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164J13T7, mRNA sequence GCTCCTAGTTTGGTNGGGAAGCTAGAGACAGAAGTGGAGATCAANGNTTCGGCTGGACAGTTTCATCACA TGTTTGCCGGGAAGCCACACCATGGTCTCCAAAGCAAGTCCAGGCAACATTCAGAGCTGTGATCTGCACG AAGGCGACTGGGGCACTGTCGGCTCTATCGTCTTCTGGAATNACGTTCACGATGGGGAGGCAAAGGTGGC GANGGAGAGNATCGNGGCGGTGGNGCCCNAGAAGANCTTGNTCACGATTAGGGTTATAGAAGGTGATCTG CTGAAAGAGTACAAGAGCTTTTTGATCACGATCCAGNGTGNCCCCTAA >gi|2764000|gb|R30044.1|R30044 12649 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164I7T7, mRNA sequence ACCCTAGCCGCTTTACTCTCTTGCAATATCTCTAANATTTGTTTGANAGTCTCTAACCATGGGTAAAGAG AAGTTTCACATCAACATTGTGGTCATTGGCCACGTCGATTCTGGAAAGTNGACCACCACTGGACACTTGA NCTACAAGTNGGGTGGTATTGACAAGCGTGTNATTGAGAGGTTCGAGAAGGAGGCTGCTGAGATGAACAA GAGGTCCTTCAAGTACGCATGGNTTTTGGACAAACTTAAGGCTGAGCGTGANNGNGNGTATCACCATTGA NATTGCTCTCTGGAAGTTCG >gi|2763999|gb|R30040.1|R30040 12645 Lambda-PRL2 Arabidopsis thaliana cDNA clone 164I21T7, mRNA sequence TGCAAACCATAACCAAACCATCATCATCATCATCTNTTGGTGACAGAAGAAAAGAGTTGAGGAACAGAGA AAATGGCAGCACAAGCACTTGTNTCTTCTTCACTTACCTCCTCTNTTCAGACAGCTAGACAGATATTTGG CTCAAAACCAGTTGCGTCTGCNTCACAGAAGAAGAGTTCCTTTNTNGTTAAAGCTGCTGCAACTCCACCT GTCAAGCAATGAGCCAACAGACCATTGTGGTTTGCTTCATCGCAGAGTCTCTCTTACTTGGATGGCAGCT TACCTGGTGACTATGGATTCGACCCTCTTGGTCTTTCAGACCCAGAAGGTACTGGAGGATTCATTGNGCC AAGATGGCTAGCATACGGGNGNTNATCAACGGACGGTTCGCCATGTTGGGTNCAACTGGGGTTTTTNTCC TAAGTTTTNTGGAAAGGCTTGGNTTNTTTCCNNCAAGANNTTTTTTTCCTTGGGT genometools-1.5.1/testdata/attribute_after_dot.gff3000066400000000000000000000001301211610345200224500ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10000 seq1 . gene 1000 9000 . + . .;ID=foo genometools-1.5.1/testdata/attribute_w_multiple_equals.gff3000066400000000000000000000001301211610345200242340ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10000 seq1 . gene 1000 9000 . + . foo==bar genometools-1.5.1/testdata/bar.fas000066400000000000000000000000171211610345200171120ustar00rootroot00000000000000>bar gggg tttt genometools-1.5.1/testdata/bed_files/000077500000000000000000000000001211610345200175715ustar00rootroot00000000000000genometools-1.5.1/testdata/bed_files/ct_example1.bed000066400000000000000000000004251211610345200224500ustar00rootroot00000000000000browser position chr22:20100000-20100900 track name=coords description="Chromosome coordinates list" visibility=2 chr22 20100000 20100100 chr22 20100011 20100200 chr22 20100215 20100400 chr22 20100350 20100500 chr22 20100700 20100800 chr22 20100700 20100900 genometools-1.5.1/testdata/bed_files/ct_example1.gff3000066400000000000000000000005221211610345200225410ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr22 20100001 20100900 chr22 . BED_feature 20100001 20100100 . . . . chr22 . BED_feature 20100012 20100200 . . . . chr22 . BED_feature 20100216 20100400 . . . . chr22 . BED_feature 20100351 20100500 . . . . chr22 . BED_feature 20100701 20100800 . . . . chr22 . BED_feature 20100701 20100900 . . . . genometools-1.5.1/testdata/bed_files/ct_example2.bed000066400000000000000000000006061211610345200224520ustar00rootroot00000000000000browser position chr22:20100000-20140000 track name=spacer description="Blue ticks every 10000 bases" color=0,0,255, chr22 20100000 20100001 chr22 20110000 20110001 chr22 20120000 20120001 track name=even description="Red ticks every 100 bases, skip 100" color=255,0,0 chr22 20100000 20100100 first chr22 20100200 20100300 second chr22 20100400 20100500 third genometools-1.5.1/testdata/bed_files/ct_example2.gff3000066400000000000000000000005561211610345200225510ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr22 20100001 20120001 chr22 . BED_feature 20100001 20100001 . . . . chr22 . BED_feature 20110001 20110001 . . . . chr22 . BED_feature 20120001 20120001 . . . . chr22 . BED_feature 20100001 20100100 . . . Name=first chr22 . BED_feature 20100201 20100300 . . . Name=second chr22 . BED_feature 20100401 20100500 . . . Name=third genometools-1.5.1/testdata/bed_files/ct_example3.bed000066400000000000000000000005351211610345200224540ustar00rootroot00000000000000##Example 3 from Custom Annotation Tracks User's Guide browser position chr22:1000-10000 browser hide all track name="BED track" description="BED format custom track example" visibility=2 color=0,128,0 useScore=1 chr22 1000 5000 itemA 960 + 1100 4700 0 2 1567,1488, 0,2512 chr22 2000 7000 itemB 200 - 2200 6950 0 4 433,100,550,1500 0,500,2000,3500 genometools-1.5.1/testdata/bed_files/ct_example3.gff3000066400000000000000000000013501211610345200225430ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr22 1001 7000 chr22 . BED_feature 1001 5000 960 + . ID=BED_feature1;Name=itemA chr22 . BED_block 1001 2567 960 + . Parent=BED_feature1;Name=itemA chr22 . BED_thick_feature 1101 4700 960 + . Parent=BED_feature1;Name=itemA chr22 . BED_block 3513 5000 960 + . Parent=BED_feature1;Name=itemA ### chr22 . BED_feature 2001 7000 200 - . ID=BED_feature2;Name=itemB chr22 . BED_block 2001 2433 200 - . Parent=BED_feature2;Name=itemB chr22 . BED_thick_feature 2201 6950 200 - . Parent=BED_feature2;Name=itemB chr22 . BED_block 2501 2600 200 - . Parent=BED_feature2;Name=itemB chr22 . BED_block 4001 4550 200 - . Parent=BED_feature2;Name=itemB chr22 . BED_block 5501 7000 200 - . Parent=BED_feature2;Name=itemB ### genometools-1.5.1/testdata/bed_files/ct_example3.gff3_as_gene000066400000000000000000000011321211610345200242220ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr22 1001 7000 chr22 . gene 1001 5000 960 + . ID=gene1;Name=itemA chr22 . exon 1001 2567 960 + . Parent=gene1;Name=itemA chr22 . CDS 1101 4700 960 + . Parent=gene1;Name=itemA chr22 . exon 3513 5000 960 + . Parent=gene1;Name=itemA ### chr22 . gene 2001 7000 200 - . ID=gene2;Name=itemB chr22 . exon 2001 2433 200 - . Parent=gene2;Name=itemB chr22 . CDS 2201 6950 200 - . Parent=gene2;Name=itemB chr22 . exon 2501 2600 200 - . Parent=gene2;Name=itemB chr22 . exon 4001 4550 200 - . Parent=gene2;Name=itemB chr22 . exon 5501 7000 200 - . Parent=gene2;Name=itemB ### genometools-1.5.1/testdata/bed_files/ct_example4.bed000066400000000000000000000007211211610345200224520ustar00rootroot00000000000000##Example 4 from Custom Annotation Tracks User's Guide browser position chr22:10000000-10020000 browser hide all track name=clones description="Clones" visibility=2 color=0,128,0 useScore=1 url="http://genome.ucsc.edu/goldenPath/help/clones.html#$$" chr22 10000000 10004000 cloneA 960 chr22 10002000 10006000 cloneB 200 chr22 10005000 10009000 cloneC 700 chr22 10006000 10010000 cloneD 600 chr22 10011000 10015000 cloneE 300 chr22 10013000 10017000 cloneF 100 genometools-1.5.1/testdata/bed_files/ct_example4.gff3000066400000000000000000000006321211610345200225460ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr22 10000001 10017000 chr22 . BED_feature 10000001 10004000 960 . . Name=cloneA chr22 . BED_feature 10002001 10006000 200 . . Name=cloneB chr22 . BED_feature 10005001 10009000 700 . . Name=cloneC chr22 . BED_feature 10006001 10010000 600 . . Name=cloneD chr22 . BED_feature 10011001 10015000 300 . . Name=cloneE chr22 . BED_feature 10013001 10017000 100 . . Name=cloneF genometools-1.5.1/testdata/bed_files/ct_example5.bed000066400000000000000000000013721211610345200224560ustar00rootroot00000000000000##Example 5 from Custom Annotation Tracks User's Guide browser position chr7:127471196-127495720 browser hide all track name="ItemRGBDemo" description="Item RGB demonstration" visibility=2 itemRgb="On" chr7 127471196 127472363 Pos1 0 + 127471196 127472363 255,0,0 chr7 127472363 127473530 Pos2 0 + 127472363 127473530 255,0,0 chr7 127473530 127474697 Pos3 0 + 127473530 127474697 255,0,0 chr7 127474697 127475864 Pos4 0 + 127474697 127475864 255,0,0 chr7 127475864 127477031 Neg1 0 - 127475864 127477031 0,0,255 chr7 127477031 127478198 Neg2 0 - 127477031 127478198 0,0,255 chr7 127478198 127479365 Neg3 0 - 127478198 127479365 0,0,255 chr7 127479365 127480532 Pos5 0 + 127479365 127480532 255,0,0 chr7 127480532 127481699 Neg4 0 - 127480532 127481699 0,0,255 genometools-1.5.1/testdata/bed_files/ct_example5.gff3000066400000000000000000000026731211610345200225560ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr7 127471197 127481699 chr7 . BED_feature 127471197 127472363 0 + . ID=BED_feature1;Name=Pos1 chr7 . BED_thick_feature 127471197 127472363 0 + . Parent=BED_feature1;Name=Pos1 ### chr7 . BED_feature 127472364 127473530 0 + . ID=BED_feature2;Name=Pos2 chr7 . BED_thick_feature 127472364 127473530 0 + . Parent=BED_feature2;Name=Pos2 ### chr7 . BED_feature 127473531 127474697 0 + . ID=BED_feature3;Name=Pos3 chr7 . BED_thick_feature 127473531 127474697 0 + . Parent=BED_feature3;Name=Pos3 ### chr7 . BED_feature 127474698 127475864 0 + . ID=BED_feature4;Name=Pos4 chr7 . BED_thick_feature 127474698 127475864 0 + . Parent=BED_feature4;Name=Pos4 ### chr7 . BED_feature 127475865 127477031 0 - . ID=BED_feature5;Name=Neg1 chr7 . BED_thick_feature 127475865 127477031 0 - . Parent=BED_feature5;Name=Neg1 ### chr7 . BED_feature 127477032 127478198 0 - . ID=BED_feature6;Name=Neg2 chr7 . BED_thick_feature 127477032 127478198 0 - . Parent=BED_feature6;Name=Neg2 ### chr7 . BED_feature 127478199 127479365 0 - . ID=BED_feature7;Name=Neg3 chr7 . BED_thick_feature 127478199 127479365 0 - . Parent=BED_feature7;Name=Neg3 ### chr7 . BED_feature 127479366 127480532 0 + . ID=BED_feature8;Name=Pos5 chr7 . BED_thick_feature 127479366 127480532 0 + . Parent=BED_feature8;Name=Pos5 ### chr7 . BED_feature 127480533 127481699 0 - . ID=BED_feature9;Name=Neg4 chr7 . BED_thick_feature 127480533 127481699 0 - . Parent=BED_feature9;Name=Neg4 ### genometools-1.5.1/testdata/bed_files/gb-2008-9-2-r31-s1.bed000066400000000000000000000230231211610345200224550ustar00rootroot00000000000000chr2L 14877642 14877669 15849196 chr2L 14879739 14879766 15849196 chr3L 3176656 3176706 10747896 chr3L 5541223 5543305 8562421 chr3L 5547581 5547777 8562421 chr3L 5550841 5550879 8562421 chr3L 6331375 6331408 8562421 chr2R 7044681 7044710 8562421 chr3R 7799777 7799811 8562421 chr3R 13521086 13521115 8562421 chr2L 19117404 19117717 2501149 chrX 9535652 9536720 8562425 chr2R 5447330 5447363 10545248 chr3R 7788805 7788848 7781065 chr3R 2580135 2580165 11159914 chrX 4231703 4231997 11080162 chr3L 1023563 1023594 12954775 chr3L 9357454 9357482 12954775 chr3R 8293508 8293549 7926771 chr3R 8303204 8303245 7926771 chr3R 8328185 8328237 7926771 chr3R 8331468 8331520 7926771 chr3R 8334751 8334803 7926771 chr4 1051903 1051998 16120280 chrX 10590260 10590297 10591997 chr2R 3551264 3551290 16533912 chr3L 14040656 14042361 9374395 chr3L 14044691 14044903 9374395 chr3R 22616627 22616653 15870289 chr3R 2613155 2613243 8617243 chr2R 15777876 15777904 16343659 chr3R 9790285 9790878 16343659 chr2L 14615342 14615373 1408750 chr3R 2824539 2824663 7914367 chrX 5748196 5748221 12890574 chr3L 11486022 11486097 2122237 chr3L 17552997 17553023 11682477 chrX 13045606 13047848 12662925 chr3R 15714105 15714143 2010085 chr3R 12589534 12589604 11416132 chr2R 7045733 7045824 2573829 chr2L 4877288 4879197 1411512 chr2L 4880284 4883113 1411512 chr3L 15475851 15475894 1899227 chr3R 2612775 2613155 1995417 chr3L 9357452 9357480 1904544 chr2R 7041087 7041114 2905420 chr3L 9351335 9351361 2905425 chr3R 8328188 8328214 2905425 chr3R 8331471 8331497 2905425 chr3R 8334754 8334780 2905425 chr3R 7782213 7782243 2370864 chr3R 7784278 7784308 2370864 chr3R 8293464 8293494 2370864 chr3R 8303160 8303190 2370864 chr3R 8328251 8328281 2370864 chr3R 8331534 8331564 2370864 chr3R 8334817 8334847 2370864 chr3L 9347860 9347922 6814763 chr3L 9355760 9355802 6814763 chr3R 7782290 7782338 6814763 chr3R 7784183 7784231 6814763 chr3R 8328156 8328204 6814763 chr3R 8331439 8331487 6814763 chr3R 8334722 8334770 6814763 chr3R 19883054 19883110 6814763 chr2R 16452736 16452761 16014933 chr3R 2581218 2581250 8344257 chr2L 2454709 2454735 7791801 chr2R 15777700 15777757 7559650 chr3R 17497451 17497479 7559650 chr2L 2446030 2446449 7821226 chr3R 12559898 12560106 2574106 chr3R 20574923 20574958 11159907 chr3R 2912165 2912262 8065369 chr3R 2689745 2689778 8355700 chr3L 17584725 17584816 2016053 chr2L 10388461 10388487 11731451 chr2L 3824313 3824350 11076769 chr3R 8898123 8898148 1533042 chr2L 19116325 19116352 12175493 chr2L 14348680 14348706 12626700 chr2R 20730342 20730906 2065664 chr3L 3176650 3176712 3685975 chr3R 2685019 2685185 1976571 chr3R 2581486 2581511 1582412 chr3L 14937407 14937851 15485919 chr3R 4100059 4100091 15485919 chr3R 6577359 6577389 15485919 chr3L 20640784 20641183 12466192 chrX 443844 443870 11752402 chrX 445080 445110 11752402 chr3R 2507403 2507466 10679014 chr3R 12562889 12562957 10679014 chrX 9898768 9898798 7851798 chr3L 17552997 17553023 7862168 chr3R 14059341 14059381 15939231 chr2R 8412632 8412669 9230443 chr3R 18961513 18961629 16207753 chr2L 2446089 2446347 7906203 chr3L 9357454 9357483 8375576 chr2R 19817982 19818028 8375576 chrX 9132426 9132620 14597205 chrX 7376019 7376050 11352058 chrX 3105718 3105980 9774480 chr3L 9357454 9357484 1913820 chr3R 2563023 2563074 7635058 chr2L 2446166 2446486 10934014 chr3R 26677687 26677721 12128207 chrX 4909577 4909707 9634487 chr3R 17209433 17209690 9694800 chr2L 14614966 14615056 1547943 chr3L 11485521 11485556 1898764 chr2R 2940406 2940432 15901665 chr2R 2944270 2944299 15901665 chr3R 18960438 18960468 15901665 chr3R 18961821 18961852 15901665 chr3R 2824539 2824673 2904838 chr3R 12559906 12560119 2904838 chr2R 3942374 3943350 6817923 chr2R 3945903 3947866 6817923 chr2R 3949270 3950074 6817923 chr2R 7046049 7046075 1971945 chr3L 11807698 11807725 8918795 chr3R 2689748 2689780 7768186 chr3R 2689745 2689780 2124348 chr3R 17458314 17458968 9748283 chr3L 9351283 9351314 8455632 chr3L 9357454 9357483 10882130 chr2L 9967202 9967229 9278447 chr2R 7714243 7714703 8218421 chr3R 2758520 2758570 8598298 chr3L 18786531 18786557 14982956 chr3R 12598960 12599583 8601485 chr2R 5485759 5485844 1671662 chr3R 22997071 22997816 14701680 chr3R 2758515 2758816 3215512 chrX 9898840 9898884 8422987 chrX 2000427 2001550 1765265 chr2R 5489850 5489931 12397102 chr3L 9357455 9357483 9466931 chr3L 15480791 15480818 9466931 chr3R 5235930 5235974 2504583 chr2R 17195238 17195296 11033359 chr2R 19841336 19841919 1459454 chr3L 11486107 11486138 2583107 chr3R 7782276 7782309 2583107 chr3R 7784212 7784245 2583107 chr3R 8328185 8328218 2583107 chr3R 8331468 8331501 2583107 chr3R 8334751 8334784 2583107 chr3L 9351342 9351378 2781290 chr3R 2912205 2912766 7984422 chrX 9899225 9899268 7984422 chrX 9898762 9898794 7720712 chr2L 10342667 10342696 15121905 chr3R 2611059 2613658 7910795 chr2R 20569607 20569637 8096813 chrX 219432 219469 10409499 chrX 220504 220542 10409499 chr2R 8412606 8412658 11262410 chr3R 12030968 12031017 10788480 chr4 727877 727911 9847251 chr4 730286 731300 9847251 chrX 2196512 2196546 10764759 chr3L 1157297 1157327 2104801 chr3R 27551503 27551594 2104801 chr3R 27552852 27554201 2104801 chr3R 27555352 27557046 2104801 chr2L 13827769 13827804 10930405 chr3R 4100049 4100279 15525530 chr3L 15005105 15005263 15882587 chr3L 20631200 20631253 1480489 chrX 8485631 8485676 9449676 chr3R 2689674 2689888 1851122 chr3R 12599003 12599569 1687458 chrX 3096421 3096451 11719067 chrX 3098844 3098874 11719067 chr2L 21241156 21241203 8479913 chr2L 21245459 21245560 8479913 chr2R 20734182 20734285 1985916 chr3R 174416 174464 10660305 chr3L 14141448 14141475 10844029 chr2R 11403526 11403695 10844029 chr2L 19117830 19117873 1426635 chr3L 9357454 9357482 2113880 chrX 9897789 9897990 2113880 chr3R 2689740 2690563 2113881 chrX 9898768 9898842 9134712 chrX 16387906 16389683 8849894 chr2R 5443380 5443692 9882489 chr3R 12526744 12526993 8404855 chr3R 17497441 17497479 9380507 chrX 10924673 10925117 1907377 chr3R 2685237 2685270 1640455 chr3L 7788286 7790270 9409684 chr3L 7827232 7827421 9409684 chr3R 11136418 11136478 9409684 chr2R 5485653 5485695 8787744 chr2L 2481562 2481768 10862738 chr2L 14615053 14615087 8164672 chr3R 2689743 2689778 8164672 chr2R 5497333 5497360 12482712 chr2L 4878293 4879189 2120114 chr2L 4880429 4881558 2120114 chrX 1896247 1896914 2120114 chr3L 17584542 17584574 1708722 chr2R 7043760 7043790 1708722 chr3R 12560119 12560151 1708722 chr3R 2689745 2689778 1852610 chr3L 9357456 9357487 9790883 chr2R 1602040 1602070 9790883 chr3R 12527039 12527064 1902784 chr3R 21822556 21822585 10452845 chr3R 21825205 21825343 10452845 chr3R 21850363 21850817 10452845 chr3R 12636462 12637611 10644409 chr3L 15622619 15623045 8557043 chr2R 2174101 2174267 1731341 chr2R 2179143 2179187 1731341 chr2L 13905165 13905259 15728670 chr2R 1216942 1217624 11262224 chr2R 7043588 7044212 3356339 chr3L 20627340 20627436 7969130 chr3L 14936909 14937854 7958878 chrX 226779 226809 7958878 chr2R 8296264 8296293 7958878 chr3R 21825184 21825215 7958878 chr3R 21850443 21850473 7958878 chr3R 21862517 21862645 7958878 chr3R 21865793 21865829 7958878 chr3L 4003947 4004010 7489720 chr3L 21407875 21410397 7489720 chr2L 3826259 3826317 7489720 chr2R 18376804 18376867 7489720 chrX 18075282 18075311 16277982 chr3R 2689743 2689778 1448096 chr3L 14909845 14909875 10603347 chr3L 14934454 14934484 10603347 chr3L 14937822 14937853 10603347 chr3R 4104930 4104985 10603347 chr3L 9357453 9357484 9580693 chrX 1896677 1896720 9580693 chr3R 12484743 12484783 1356765 chr3R 26675303 26675349 8543159 chr3R 26677808 26677880 8543159 chr3L 8682158 8682185 15128656 chr2R 20311058 20311086 10704846 chrX 7376019 7376050 11303087 chr3L 8640828 8640854 9250684 chrX 3105826 3105963 8890156 chr3L 21371558 21371592 1508206 chrX 6938207 6938242 7567454 chr3R 17204063 17204146 9211899 chr2L 2445758 2445918 11691840 chr3L 9357455 9357482 8007953 chr3L 14063391 14063426 8007953 chr3R 21824889 21825328 7590239 chr3R 21850363 21850623 7590239 chr3R 21865317 21865781 7590239 chr3R 20574969 20575185 8264640 chr2L 1992149 1992181 11729153 chrX 20223943 20223971 11729153 chrX 20226417 20227441 11729153 chrX 20229402 20229432 11729153 chr2R 6422830 6422858 11729153 chr2R 6425800 6425832 11729153 chr2R 10539699 10539731 11729153 chr2R 15214162 15214190 11729153 chr2R 15215644 15215672 11729153 chr2R 15218019 15218639 11729153 chr2R 15221585 15221613 11729153 chr2R 15227233 15227262 11729153 chr2R 15298880 15298912 11729153 chr2R 15330412 15330442 11729153 chr2R 16018502 16018532 11729153 chr2R 16063151 16063976 11729153 chr2R 16066131 16066750 11729153 chr3R 1931723 1931751 11729153 chr3R 1937965 1937996 11729153 chr3R 1940939 1940967 11729153 chr3R 25497413 25497442 11729153 chr2L 14615481 14615511 11493537 chr3R 12695176 12695321 11493537 chr2L 14615464 14615527 3159479 chr3L 15496338 15497308 15901661 chr2R 5490970 5491016 1672661 chr3L 17584384 17585044 2501151 chr2R 5566446 5566485 14731391 chr3R 26036494 26036530 14731391 chr2L 7303537 7307465 9502727 chr2R 7044640 7044740 1671661 chr2R 7239905 7240304 15075295 chr2R 7242144 7242175 15075295 chr2R 7327510 7327540 15075295 chr3R 10423057 10423085 15075295 chr3L 8702349 8702385 1280827 chrU 4976166 4976193 1671176 chr3R 2583622 2583649 1671176 chrX 5745754 5745824 2123290 chr3R 23064968 23065056 8662923 chr2R 19812220 19812254 9676198 chr2L 9967219 9968564 12758126 chr3L 9351682 9351719 8474442 chr2R 14380567 14380599 7537872 chr2L 14615099 14615131 1732738 chr2R 5490984 5491028 8406007 chr2L 14616171 14616209 7783192 chr3L 11485535 11485560 1903838 chr3R 7188390 7189913 11051550 chr3R 26678045 26678342 8430097 chr3R 26679685 26680087 8430097 chr3R 21070785 21070810 14561403 chr3R 12599090 12599336 10433918 genometools-1.5.1/testdata/bed_files/gb-2008-9-2-r31-s1.gff3000066400000000000000000000427641211610345200225650ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr2L 1992150 21245560 ##sequence-region chr3L 1023564 21410397 ##sequence-region chrX 219433 20229432 ##sequence-region chr4 727878 1051998 ##sequence-region chrU 4976167 4976193 ##sequence-region chr2R 1216943 20734285 ##sequence-region chr3R 174417 27557046 chr2L . BED_feature 14877643 14877669 . . . Name=15849196 chr2L . BED_feature 14879740 14879766 . . . Name=15849196 chr3L . BED_feature 3176657 3176706 . . . Name=10747896 chr3L . BED_feature 5541224 5543305 . . . Name=8562421 chr3L . BED_feature 5547582 5547777 . . . Name=8562421 chr3L . BED_feature 5550842 5550879 . . . Name=8562421 chr3L . BED_feature 6331376 6331408 . . . Name=8562421 chr2R . BED_feature 7044682 7044710 . . . Name=8562421 chr3R . BED_feature 7799778 7799811 . . . Name=8562421 chr3R . BED_feature 13521087 13521115 . . . Name=8562421 chr2L . BED_feature 19117405 19117717 . . . Name=2501149 chrX . BED_feature 9535653 9536720 . . . Name=8562425 chr2R . BED_feature 5447331 5447363 . . . Name=10545248 chr3R . BED_feature 7788806 7788848 . . . Name=7781065 chr3R . BED_feature 2580136 2580165 . . . Name=11159914 chrX . BED_feature 4231704 4231997 . . . Name=11080162 chr3L . BED_feature 1023564 1023594 . . . Name=12954775 chr3L . BED_feature 9357455 9357482 . . . Name=12954775 chr3R . BED_feature 8293509 8293549 . . . Name=7926771 chr3R . BED_feature 8303205 8303245 . . . Name=7926771 chr3R . BED_feature 8328186 8328237 . . . Name=7926771 chr3R . BED_feature 8331469 8331520 . . . Name=7926771 chr3R . BED_feature 8334752 8334803 . . . Name=7926771 chr4 . BED_feature 1051904 1051998 . . . Name=16120280 chrX . BED_feature 10590261 10590297 . . . Name=10591997 chr2R . BED_feature 3551265 3551290 . . . Name=16533912 chr3L . BED_feature 14040657 14042361 . . . Name=9374395 chr3L . BED_feature 14044692 14044903 . . . Name=9374395 chr3R . BED_feature 22616628 22616653 . . . Name=15870289 chr3R . BED_feature 2613156 2613243 . . . Name=8617243 chr2R . BED_feature 15777877 15777904 . . . Name=16343659 chr3R . BED_feature 9790286 9790878 . . . Name=16343659 chr2L . BED_feature 14615343 14615373 . . . Name=1408750 chr3R . BED_feature 2824540 2824663 . . . Name=7914367 chrX . BED_feature 5748197 5748221 . . . Name=12890574 chr3L . BED_feature 11486023 11486097 . . . Name=2122237 chr3L . BED_feature 17552998 17553023 . . . Name=11682477 chrX . BED_feature 13045607 13047848 . . . Name=12662925 chr3R . BED_feature 15714106 15714143 . . . Name=2010085 chr3R . BED_feature 12589535 12589604 . . . Name=11416132 chr2R . BED_feature 7045734 7045824 . . . Name=2573829 chr2L . BED_feature 4877289 4879197 . . . Name=1411512 chr2L . BED_feature 4880285 4883113 . . . Name=1411512 chr3L . BED_feature 15475852 15475894 . . . Name=1899227 chr3R . BED_feature 2612776 2613155 . . . Name=1995417 chr3L . BED_feature 9357453 9357480 . . . Name=1904544 chr2R . BED_feature 7041088 7041114 . . . Name=2905420 chr3L . BED_feature 9351336 9351361 . . . Name=2905425 chr3R . BED_feature 8328189 8328214 . . . Name=2905425 chr3R . BED_feature 8331472 8331497 . . . Name=2905425 chr3R . BED_feature 8334755 8334780 . . . Name=2905425 chr3R . BED_feature 7782214 7782243 . . . Name=2370864 chr3R . BED_feature 7784279 7784308 . . . Name=2370864 chr3R . BED_feature 8293465 8293494 . . . Name=2370864 chr3R . BED_feature 8303161 8303190 . . . Name=2370864 chr3R . BED_feature 8328252 8328281 . . . Name=2370864 chr3R . BED_feature 8331535 8331564 . . . Name=2370864 chr3R . BED_feature 8334818 8334847 . . . Name=2370864 chr3L . BED_feature 9347861 9347922 . . . Name=6814763 chr3L . BED_feature 9355761 9355802 . . . Name=6814763 chr3R . BED_feature 7782291 7782338 . . . Name=6814763 chr3R . BED_feature 7784184 7784231 . . . Name=6814763 chr3R . BED_feature 8328157 8328204 . . . Name=6814763 chr3R . BED_feature 8331440 8331487 . . . Name=6814763 chr3R . BED_feature 8334723 8334770 . . . Name=6814763 chr3R . BED_feature 19883055 19883110 . . . Name=6814763 chr2R . BED_feature 16452737 16452761 . . . Name=16014933 chr3R . BED_feature 2581219 2581250 . . . Name=8344257 chr2L . BED_feature 2454710 2454735 . . . Name=7791801 chr2R . BED_feature 15777701 15777757 . . . Name=7559650 chr3R . BED_feature 17497452 17497479 . . . Name=7559650 chr2L . BED_feature 2446031 2446449 . . . Name=7821226 chr3R . BED_feature 12559899 12560106 . . . Name=2574106 chr3R . BED_feature 20574924 20574958 . . . Name=11159907 chr3R . BED_feature 2912166 2912262 . . . Name=8065369 chr3R . BED_feature 2689746 2689778 . . . Name=8355700 chr3L . BED_feature 17584726 17584816 . . . Name=2016053 chr2L . BED_feature 10388462 10388487 . . . Name=11731451 chr2L . BED_feature 3824314 3824350 . . . Name=11076769 chr3R . BED_feature 8898124 8898148 . . . Name=1533042 chr2L . BED_feature 19116326 19116352 . . . Name=12175493 chr2L . BED_feature 14348681 14348706 . . . Name=12626700 chr2R . BED_feature 20730343 20730906 . . . Name=2065664 chr3L . BED_feature 3176651 3176712 . . . Name=3685975 chr3R . BED_feature 2685020 2685185 . . . Name=1976571 chr3R . BED_feature 2581487 2581511 . . . Name=1582412 chr3L . BED_feature 14937408 14937851 . . . Name=15485919 chr3R . BED_feature 4100060 4100091 . . . Name=15485919 chr3R . BED_feature 6577360 6577389 . . . Name=15485919 chr3L . BED_feature 20640785 20641183 . . . Name=12466192 chrX . BED_feature 443845 443870 . . . Name=11752402 chrX . BED_feature 445081 445110 . . . Name=11752402 chr3R . BED_feature 2507404 2507466 . . . Name=10679014 chr3R . BED_feature 12562890 12562957 . . . Name=10679014 chrX . BED_feature 9898769 9898798 . . . Name=7851798 chr3L . BED_feature 17552998 17553023 . . . Name=7862168 chr3R . BED_feature 14059342 14059381 . . . Name=15939231 chr2R . BED_feature 8412633 8412669 . . . Name=9230443 chr3R . BED_feature 18961514 18961629 . . . Name=16207753 chr2L . BED_feature 2446090 2446347 . . . Name=7906203 chr3L . BED_feature 9357455 9357483 . . . Name=8375576 chr2R . BED_feature 19817983 19818028 . . . Name=8375576 chrX . BED_feature 9132427 9132620 . . . Name=14597205 chrX . BED_feature 7376020 7376050 . . . Name=11352058 chrX . BED_feature 3105719 3105980 . . . Name=9774480 chr3L . BED_feature 9357455 9357484 . . . Name=1913820 chr3R . BED_feature 2563024 2563074 . . . Name=7635058 chr2L . BED_feature 2446167 2446486 . . . Name=10934014 chr3R . BED_feature 26677688 26677721 . . . Name=12128207 chrX . BED_feature 4909578 4909707 . . . Name=9634487 chr3R . BED_feature 17209434 17209690 . . . Name=9694800 chr2L . BED_feature 14614967 14615056 . . . Name=1547943 chr3L . BED_feature 11485522 11485556 . . . Name=1898764 chr2R . BED_feature 2940407 2940432 . . . Name=15901665 chr2R . BED_feature 2944271 2944299 . . . Name=15901665 chr3R . BED_feature 18960439 18960468 . . . Name=15901665 chr3R . BED_feature 18961822 18961852 . . . Name=15901665 chr3R . BED_feature 2824540 2824673 . . . Name=2904838 chr3R . BED_feature 12559907 12560119 . . . Name=2904838 chr2R . BED_feature 3942375 3943350 . . . Name=6817923 chr2R . BED_feature 3945904 3947866 . . . Name=6817923 chr2R . BED_feature 3949271 3950074 . . . Name=6817923 chr2R . BED_feature 7046050 7046075 . . . Name=1971945 chr3L . BED_feature 11807699 11807725 . . . Name=8918795 chr3R . BED_feature 2689749 2689780 . . . Name=7768186 chr3R . BED_feature 2689746 2689780 . . . Name=2124348 chr3R . BED_feature 17458315 17458968 . . . Name=9748283 chr3L . BED_feature 9351284 9351314 . . . Name=8455632 chr3L . BED_feature 9357455 9357483 . . . Name=10882130 chr2L . BED_feature 9967203 9967229 . . . Name=9278447 chr2R . BED_feature 7714244 7714703 . . . Name=8218421 chr3R . BED_feature 2758521 2758570 . . . Name=8598298 chr3L . BED_feature 18786532 18786557 . . . Name=14982956 chr3R . BED_feature 12598961 12599583 . . . Name=8601485 chr2R . BED_feature 5485760 5485844 . . . Name=1671662 chr3R . BED_feature 22997072 22997816 . . . Name=14701680 chr3R . BED_feature 2758516 2758816 . . . Name=3215512 chrX . BED_feature 9898841 9898884 . . . Name=8422987 chrX . BED_feature 2000428 2001550 . . . Name=1765265 chr2R . BED_feature 5489851 5489931 . . . Name=12397102 chr3L . BED_feature 9357456 9357483 . . . Name=9466931 chr3L . BED_feature 15480792 15480818 . . . Name=9466931 chr3R . BED_feature 5235931 5235974 . . . Name=2504583 chr2R . BED_feature 17195239 17195296 . . . Name=11033359 chr2R . BED_feature 19841337 19841919 . . . Name=1459454 chr3L . BED_feature 11486108 11486138 . . . Name=2583107 chr3R . BED_feature 7782277 7782309 . . . Name=2583107 chr3R . BED_feature 7784213 7784245 . . . Name=2583107 chr3R . BED_feature 8328186 8328218 . . . Name=2583107 chr3R . BED_feature 8331469 8331501 . . . Name=2583107 chr3R . BED_feature 8334752 8334784 . . . Name=2583107 chr3L . BED_feature 9351343 9351378 . . . Name=2781290 chr3R . BED_feature 2912206 2912766 . . . Name=7984422 chrX . BED_feature 9899226 9899268 . . . Name=7984422 chrX . BED_feature 9898763 9898794 . . . Name=7720712 chr2L . BED_feature 10342668 10342696 . . . Name=15121905 chr3R . BED_feature 2611060 2613658 . . . Name=7910795 chr2R . BED_feature 20569608 20569637 . . . Name=8096813 chrX . BED_feature 219433 219469 . . . Name=10409499 chrX . BED_feature 220505 220542 . . . Name=10409499 chr2R . BED_feature 8412607 8412658 . . . Name=11262410 chr3R . BED_feature 12030969 12031017 . . . Name=10788480 chr4 . BED_feature 727878 727911 . . . Name=9847251 chr4 . BED_feature 730287 731300 . . . Name=9847251 chrX . BED_feature 2196513 2196546 . . . Name=10764759 chr3L . BED_feature 1157298 1157327 . . . Name=2104801 chr3R . BED_feature 27551504 27551594 . . . Name=2104801 chr3R . BED_feature 27552853 27554201 . . . Name=2104801 chr3R . BED_feature 27555353 27557046 . . . Name=2104801 chr2L . BED_feature 13827770 13827804 . . . Name=10930405 chr3R . BED_feature 4100050 4100279 . . . Name=15525530 chr3L . BED_feature 15005106 15005263 . . . Name=15882587 chr3L . BED_feature 20631201 20631253 . . . Name=1480489 chrX . BED_feature 8485632 8485676 . . . Name=9449676 chr3R . BED_feature 2689675 2689888 . . . Name=1851122 chr3R . BED_feature 12599004 12599569 . . . Name=1687458 chrX . BED_feature 3096422 3096451 . . . Name=11719067 chrX . BED_feature 3098845 3098874 . . . Name=11719067 chr2L . BED_feature 21241157 21241203 . . . Name=8479913 chr2L . BED_feature 21245460 21245560 . . . Name=8479913 chr2R . BED_feature 20734183 20734285 . . . Name=1985916 chr3R . BED_feature 174417 174464 . . . Name=10660305 chr3L . BED_feature 14141449 14141475 . . . Name=10844029 chr2R . BED_feature 11403527 11403695 . . . Name=10844029 chr2L . BED_feature 19117831 19117873 . . . Name=1426635 chr3L . BED_feature 9357455 9357482 . . . Name=2113880 chrX . BED_feature 9897790 9897990 . . . Name=2113880 chr3R . BED_feature 2689741 2690563 . . . Name=2113881 chrX . BED_feature 9898769 9898842 . . . Name=9134712 chrX . BED_feature 16387907 16389683 . . . Name=8849894 chr2R . BED_feature 5443381 5443692 . . . Name=9882489 chr3R . BED_feature 12526745 12526993 . . . Name=8404855 chr3R . BED_feature 17497442 17497479 . . . Name=9380507 chrX . BED_feature 10924674 10925117 . . . Name=1907377 chr3R . BED_feature 2685238 2685270 . . . Name=1640455 chr3L . BED_feature 7788287 7790270 . . . Name=9409684 chr3L . BED_feature 7827233 7827421 . . . Name=9409684 chr3R . BED_feature 11136419 11136478 . . . Name=9409684 chr2R . BED_feature 5485654 5485695 . . . Name=8787744 chr2L . BED_feature 2481563 2481768 . . . Name=10862738 chr2L . BED_feature 14615054 14615087 . . . Name=8164672 chr3R . BED_feature 2689744 2689778 . . . Name=8164672 chr2R . BED_feature 5497334 5497360 . . . Name=12482712 chr2L . BED_feature 4878294 4879189 . . . Name=2120114 chr2L . BED_feature 4880430 4881558 . . . Name=2120114 chrX . BED_feature 1896248 1896914 . . . Name=2120114 chr3L . BED_feature 17584543 17584574 . . . Name=1708722 chr2R . BED_feature 7043761 7043790 . . . Name=1708722 chr3R . BED_feature 12560120 12560151 . . . Name=1708722 chr3R . BED_feature 2689746 2689778 . . . Name=1852610 chr3L . BED_feature 9357457 9357487 . . . Name=9790883 chr2R . BED_feature 1602041 1602070 . . . Name=9790883 chr3R . BED_feature 12527040 12527064 . . . Name=1902784 chr3R . BED_feature 21822557 21822585 . . . Name=10452845 chr3R . BED_feature 21825206 21825343 . . . Name=10452845 chr3R . BED_feature 21850364 21850817 . . . Name=10452845 chr3R . BED_feature 12636463 12637611 . . . Name=10644409 chr3L . BED_feature 15622620 15623045 . . . Name=8557043 chr2R . BED_feature 2174102 2174267 . . . Name=1731341 chr2R . BED_feature 2179144 2179187 . . . Name=1731341 chr2L . BED_feature 13905166 13905259 . . . Name=15728670 chr2R . BED_feature 1216943 1217624 . . . Name=11262224 chr2R . BED_feature 7043589 7044212 . . . Name=3356339 chr3L . BED_feature 20627341 20627436 . . . Name=7969130 chr3L . BED_feature 14936910 14937854 . . . Name=7958878 chrX . BED_feature 226780 226809 . . . Name=7958878 chr2R . BED_feature 8296265 8296293 . . . Name=7958878 chr3R . BED_feature 21825185 21825215 . . . Name=7958878 chr3R . BED_feature 21850444 21850473 . . . Name=7958878 chr3R . BED_feature 21862518 21862645 . . . Name=7958878 chr3R . BED_feature 21865794 21865829 . . . Name=7958878 chr3L . BED_feature 4003948 4004010 . . . Name=7489720 chr3L . BED_feature 21407876 21410397 . . . Name=7489720 chr2L . BED_feature 3826260 3826317 . . . Name=7489720 chr2R . BED_feature 18376805 18376867 . . . Name=7489720 chrX . BED_feature 18075283 18075311 . . . Name=16277982 chr3R . BED_feature 2689744 2689778 . . . Name=1448096 chr3L . BED_feature 14909846 14909875 . . . Name=10603347 chr3L . BED_feature 14934455 14934484 . . . Name=10603347 chr3L . BED_feature 14937823 14937853 . . . Name=10603347 chr3R . BED_feature 4104931 4104985 . . . Name=10603347 chr3L . BED_feature 9357454 9357484 . . . Name=9580693 chrX . BED_feature 1896678 1896720 . . . Name=9580693 chr3R . BED_feature 12484744 12484783 . . . Name=1356765 chr3R . BED_feature 26675304 26675349 . . . Name=8543159 chr3R . BED_feature 26677809 26677880 . . . Name=8543159 chr3L . BED_feature 8682159 8682185 . . . Name=15128656 chr2R . BED_feature 20311059 20311086 . . . Name=10704846 chrX . BED_feature 7376020 7376050 . . . Name=11303087 chr3L . BED_feature 8640829 8640854 . . . Name=9250684 chrX . BED_feature 3105827 3105963 . . . Name=8890156 chr3L . BED_feature 21371559 21371592 . . . Name=1508206 chrX . BED_feature 6938208 6938242 . . . Name=7567454 chr3R . BED_feature 17204064 17204146 . . . Name=9211899 chr2L . BED_feature 2445759 2445918 . . . Name=11691840 chr3L . BED_feature 9357456 9357482 . . . Name=8007953 chr3L . BED_feature 14063392 14063426 . . . Name=8007953 chr3R . BED_feature 21824890 21825328 . . . Name=7590239 chr3R . BED_feature 21850364 21850623 . . . Name=7590239 chr3R . BED_feature 21865318 21865781 . . . Name=7590239 chr3R . BED_feature 20574970 20575185 . . . Name=8264640 chr2L . BED_feature 1992150 1992181 . . . Name=11729153 chrX . BED_feature 20223944 20223971 . . . Name=11729153 chrX . BED_feature 20226418 20227441 . . . Name=11729153 chrX . BED_feature 20229403 20229432 . . . Name=11729153 chr2R . BED_feature 6422831 6422858 . . . Name=11729153 chr2R . BED_feature 6425801 6425832 . . . Name=11729153 chr2R . BED_feature 10539700 10539731 . . . Name=11729153 chr2R . BED_feature 15214163 15214190 . . . Name=11729153 chr2R . BED_feature 15215645 15215672 . . . Name=11729153 chr2R . BED_feature 15218020 15218639 . . . Name=11729153 chr2R . BED_feature 15221586 15221613 . . . Name=11729153 chr2R . BED_feature 15227234 15227262 . . . Name=11729153 chr2R . BED_feature 15298881 15298912 . . . Name=11729153 chr2R . BED_feature 15330413 15330442 . . . Name=11729153 chr2R . BED_feature 16018503 16018532 . . . Name=11729153 chr2R . BED_feature 16063152 16063976 . . . Name=11729153 chr2R . BED_feature 16066132 16066750 . . . Name=11729153 chr3R . BED_feature 1931724 1931751 . . . Name=11729153 chr3R . BED_feature 1937966 1937996 . . . Name=11729153 chr3R . BED_feature 1940940 1940967 . . . Name=11729153 chr3R . BED_feature 25497414 25497442 . . . Name=11729153 chr2L . BED_feature 14615482 14615511 . . . Name=11493537 chr3R . BED_feature 12695177 12695321 . . . Name=11493537 chr2L . BED_feature 14615465 14615527 . . . Name=3159479 chr3L . BED_feature 15496339 15497308 . . . Name=15901661 chr2R . BED_feature 5490971 5491016 . . . Name=1672661 chr3L . BED_feature 17584385 17585044 . . . Name=2501151 chr2R . BED_feature 5566447 5566485 . . . Name=14731391 chr3R . BED_feature 26036495 26036530 . . . Name=14731391 chr2L . BED_feature 7303538 7307465 . . . Name=9502727 chr2R . BED_feature 7044641 7044740 . . . Name=1671661 chr2R . BED_feature 7239906 7240304 . . . Name=15075295 chr2R . BED_feature 7242145 7242175 . . . Name=15075295 chr2R . BED_feature 7327511 7327540 . . . Name=15075295 chr3R . BED_feature 10423058 10423085 . . . Name=15075295 chr3L . BED_feature 8702350 8702385 . . . Name=1280827 chrU . BED_feature 4976167 4976193 . . . Name=1671176 chr3R . BED_feature 2583623 2583649 . . . Name=1671176 chrX . BED_feature 5745755 5745824 . . . Name=2123290 chr3R . BED_feature 23064969 23065056 . . . Name=8662923 chr2R . BED_feature 19812221 19812254 . . . Name=9676198 chr2L . BED_feature 9967220 9968564 . . . Name=12758126 chr3L . BED_feature 9351683 9351719 . . . Name=8474442 chr2R . BED_feature 14380568 14380599 . . . Name=7537872 chr2L . BED_feature 14615100 14615131 . . . Name=1732738 chr2R . BED_feature 5490985 5491028 . . . Name=8406007 chr2L . BED_feature 14616172 14616209 . . . Name=7783192 chr3L . BED_feature 11485536 11485560 . . . Name=1903838 chr3R . BED_feature 7188391 7189913 . . . Name=11051550 chr3R . BED_feature 26678046 26678342 . . . Name=8430097 chr3R . BED_feature 26679686 26680087 . . . Name=8430097 chr3R . BED_feature 21070786 21070810 . . . Name=14561403 chr3R . BED_feature 12599091 12599336 . . . Name=10433918 genometools-1.5.1/testdata/bed_files/gb-2008-9-2-r31-s2.bed000066400000000000000000002537241211610345200224730ustar00rootroot00000000000000chr4 74488436 74488469 2247076 chr20 22978319 22978355 11257274 chr1 227636539 227636698 2300053 chr5 142760500 142760529 11463861 chr5 142795076 142795171 11463861 chr11 303985 304024 2123539 chr1 27871383 27871421 2123539 chr5 132037517 132037549 9686601 chr4 123597348 123597378 9686601 chr9 129656861 129656893 9845534 chr18 72858092 72858121 7527040 chr1 165754421 165754452 9510181 chr6 36754360 36754400 10506225 chr9 21067980 21068019 2037595 chr17 35109678 35109708 9045619 chr11 605677 605718 10924517 chr11 32405320 32405350 10455131 chr5 131434149 131434658 8460159 chr4 123597348 123597379 8460159 chr14 105142540 105142615 7635985 chr14 105261326 105261401 7635985 chr18 72858012 72858327 1696259 chr11 5227818 5227864 2458563 chr11 5232742 5232788 2458563 chr11 605674 605722 11877397 chr16 10897092 10897125 15247294 chr16 10908371 10909110 15247294 chr16 10880160 10880210 9491997 chr10 75339285 75339336 8071349 chr7 525969 526156 8415628 chr19 59077686 59077730 2246272 chr17 61729560 61729604 2246272 chr16 23755126 23755170 2246272 chr4 123597347 123597383 7624346 chr14 24173351 24173382 7624346 chr20 60962038 60962071 12923186 chr9 21067972 21068006 2139895 chr17 59307403 59307440 16239259 chr17 59315149 59315190 16239259 chr17 59329948 59329989 16239259 chr2 162717072 162717294 15828872 chr8 11697516 11697549 9092581 chr4 68303660 68303689 12089350 chr2 175741023 175741060 2145272 chr9 127043486 127043516 9837962 chr6 43247768 43247886 2009862 chr6 43249560 43249830 2009862 chr6 43251430 43251559 2009862 chr6 43254024 43254103 2009862 chr22 37970974 37971015 8662878 chrX 37524155 37524199 11781315 chr7 99227486 99227522 12514743 chr3 121018720 121018751 12514743 chr1 198409938 198409967 12514743 chr9 136358295 136358325 12514743 chr12 119900951 119900981 12514743 chr20 42491696 42491726 12514743 chr15 49322676 49322730 8395654 chr11 303985 304024 2919169 chr10 62207740 62208380 8524257 chr3 25444698 25444725 9886825 chr13 93928760 93930546 7929451 chr3 197293412 197293473 2519614 chr4 84474935 84475267 11779847 chr2 21173783 21173833 10859308 chr1 148070786 148070817 2367528 chr1 148099376 148099407 2367528 chr21 26464851 26464881 8703038 chr7 5535519 5535577 9847397 chr6 46280790 46280829 9847397 chr6 89043284 89043326 9847397 chr5 77116585 77116627 9847397 chr5 79634272 79634314 9847397 chr5 97702459 97702501 9847397 chr3 177178903 177178935 9847397 chr1 222119015 222119057 9847397 chr9 102533463 102533496 9847397 chrX 46033350 46033389 9847397 chr22 39801028 39801062 9847397 chr15 42069511 42069553 9847397 chr18 58260340 58260379 9847397 chr11 5204934 5204965 8663270 chr6 31891181 31891213 1696723 chr6 31903377 31903409 1696723 chr5 149772537 149772621 1899864 chr6 87861686 87861724 2476438 chr6 32515518 32515547 8756625 chr11 2139272 2139305 8832573 chr13 27389425 27389468 11003654 chr14 67360017 67360070 9878257 chr7 24290260 24290290 8123590 chr4 123597156 123597186 1712901 chr12 23578124 23578724 1396566 chr12 23580652 23580871 1396566 chr12 23587410 23587586 1396566 chr12 23590518 23590629 1396566 chr12 23607457 23607599 1396566 chr12 23619860 23620044 1396566 chr12 23685011 23685100 1396566 chr11 15967126 15967239 1396566 chr11 117692801 117692831 1396566 chr1 202359461 202360518 1396566 chr8 88869623 88871029 1396566 chr14 105142609 105142639 9317131 chr17 45632664 45634784 3480516 chr12 66839311 66839342 10227974 chr21 44378027 44378057 12808467 chr12 6517179 6517207 12933903 chr16 10910501 10910529 12933903 chr16 10917736 10917765 12933903 chr3 46880058 46880137 1699944 chr14 105142553 105142609 8759736 chr14 105261339 105261401 8759736 chr11 5203641 5204288 7499351 chr9 106691206 106691258 11839742 chr9 138991424 138991702 15743775 chr7 91602080 91602142 12145339 chr17 70254458 70255238 12145337 chr17 70256545 70256588 12145337 chr7 100159373 100159407 8387214 chr12 108038831 108038863 11076940 chr12 108053504 108053612 11076940 chr11 116213731 116213811 8626539 chr22_random 13234 13314 8626539 chr7 27140154 27140183 8759021 chr16 55199807 55199838 8759021 chr17 53714113 53714143 9287329 chr11 118463821 118463852 8408012 chr5 131907150 131907240 15826950 chr5 132043302 132043331 15826950 chr6 32515525 32515555 7784170 chr17 31441612 31441885 8355682 chr17 31548285 31548549 8355682 chr17 31649859 31650123 8355682 chr17_random 1227833 1228097 8355682 chr19 34994861 34995325 8618861 chr2 169927260 169927288 10799495 chr11 5204936 5204966 9642249 chr11 5227736 5227791 9642249 chr11 5232660 5232715 9642249 chr11 5247819 5247853 9642249 chr16 142778 142810 9642249 chr16 152990 153022 9642249 chr5 142673758 142673832 3037703 chr4 149219374 149222100 3037703 chr4 149254704 149254867 3037703 chr4 149260758 149260877 3037703 chr4 149293069 149293211 3037703 chr4 149295150 149295504 3037703 chr4 149335346 149335465 3037703 chr4 149400578 149400721 3037703 chr4 149575705 149577463 3037703 chr4 149582760 149582973 3037703 chr13 19032152 19032208 11986328 chr13 20733666 20733722 11986328 chr11 63839958 63840014 11986328 chr6 160034412 160034809 11853549 chr6 153113526 153113563 2320002 chr14 74815206 74815246 2320002 chr17 7531563 7531591 10348347 chr4 74488729 74488763 2320004 chr1 167341717 167341979 8392703 chr6 87861633 87861665 1701437 chr14 74814959 74815008 3004967 chr7 5536804 5536857 7828546 chr3 188870906 188870942 8645191 chr1 202402286 202402322 8645191 chr19 2200167 2200195 9774680 chr12 51132125 51132488 2438131 chr12 51153784 51154148 2438131 chr12 51173235 51173600 2438131 chr12 51476140 51476239 2438131 chr17 36232359 36232424 2438131 chr11 5204984 5205048 11756191 chr11 5258555 5258590 11756191 chr12 54713253 54713285 10978333 chr12 111829114 111829157 2174873 chr11 303988 304018 2174873 chr15 42790853 42790900 2174873 chr11 100505079 100505108 15084343 chr6 31651125 31651176 12560487 chr11 5262446 5262488 3879975 chrX 55670007 55670049 1946405 chr14 99813795 99813826 1946405 chr7 22733173 22733209 8207232 chr4 74825043 74825086 8207232 chr17 35425015 35425052 8207232 chr1 159760611 159760647 3198647 chr1 159842260 159842296 3198647 chr19 7245409 7246142 1324934 chr6 36752201 36753120 12640112 chr1 27060396 27060437 12640112 chr16 68973088 68973120 9473501 chr16 68989907 68989937 9473501 chr14 22974963 22975026 1577822 chr9 21067982 21068040 1532252 chr5 132019685 132021821 8605348 chr5 132200100 132200211 8605348 chr11 5227730 5227785 7914370 chr11 5232654 5232709 7914370 chrX 37524148 37524181 7914370 chrX 24621889 24621954 15615704 chr11 5227721 5227997 2734104 chr11 5232645 5232925 2734104 chr10 72033576 72033645 10072525 chr16 55199885 55199917 2494701 chr15 72826154 72826254 8120057 chr17 38820333 38820372 2349089 chr3 73242764 73242823 2349089 chr17_random 492577 492638 2349089 chr17_random 494190 494241 2349089 chr17_random 510842 510904 2349089 chr17_random 512334 512396 2349089 chr17_random 514636 514697 2349089 chr17_random 519525 519586 2349089 chr17_random 525673 525734 2349089 chr17_random 527778 527840 2349089 chr17_random 556025 556087 2349089 chr17_random 2607832 2607893 2349089 chr17_random 2614873 2614935 2349089 chr15 65919437 65919514 2349089 chr1 67925700 67925730 11090615 chr3 185578715 185578748 11790771 chr20 54400822 54400851 11790771 chr11 100505079 100505190 10894148 chr16 10878404 10878701 11777970 chr6 121798621 121798697 12644583 chr5 108416077 108416125 12644583 chr1 205186357 205186544 14644095 chr11 116213544 116213694 1846669 chr22_random 13278 13501 1846669 chr6 87861641 87861711 2828923 chr6 87861738 87861778 12193378 chr7 45894486 45894517 7688722 chr19 54351000 54351029 15082771 chr17 71229145 71229180 9837976 chr1 185064111 185064783 7800505 chr1 185090038 185090099 7800505 chr12 46798802 46799458 7800504 chr4 74825037 74825086 10928981 chr17 31231572 31231601 10928981 chr2 85969656 85969692 14644416 chr1 89303545 89303575 1729591 chr7 150316900 150317059 11013235 chr3 170965506 170965616 12586348 chr19 46551328 46551628 2808430 chr12 51782657 51782690 15961790 chr19 16298811 16298842 11750135 chr10 5126489 5126539 15814298 chr16 31632044 31632077 15814297 chr16 31792540 31792792 15814297 chr1 89303574 89303611 1901265 chr1 89645724 89645761 1901265 chr15 88150900 88151079 1680856 chr5 131907211 131907240 11152655 chr10 17310281 17310756 8654956 chr16 54247448 54248013 11333263 chr14 72672977 72673010 10446206 chr12 50731408 50731459 10567637 chr9 134927113 134927158 11945176 chr9 134947671 134947716 11945176 chr7 106472226 106472261 9175634 chr19 54219614 54219649 9175634 chr19 54226281 54226316 9175634 chr19 54232640 54232675 9175634 chr19 54238668 54238703 9175634 chr19 54244382 54244417 9175634 chr19 54251019 54251054 9175634 chr8 128817316 128817344 2690070 chr7 21434866 21436872 1454515 chr7 21483234 21483345 1454515 chr7 21488165 21488261 1454515 chr7 21517247 21517549 1454515 chr13 88810290 88812937 1454515 chr2 174481585 174483182 1454515 chr2 174486194 174486242 1454515 chr2 174491580 174491751 1454515 chr2 174527987 174529207 1454515 chrX 55074223 55074271 9334239 chr21 26464985 26465014 1380960 chr12 66839979 66840016 8756632 chr11 116205060 116205698 9295296 chr22_random 21342 21981 9295296 chr5 131423935 131423974 8611694 chr16 55199808 55199838 9171103 chr10 112826538 112826790 9249478 chr11 116204976 116205835 2834395 chr22_random 21205 22065 2834395 chr10 17311047 17311087 2293664 chr11 525485 525798 3012774 chr2 136592478 136592507 10229837 chr3 120761101 120761701 8906820 chr5 159778570 159778599 15016801 chr5 159780261 159781293 15016801 chr11 124999009 124999038 15016801 chr11 125000252 125000620 15016801 chr6 29798934 29798987 8657576 chr6 29867704 29867764 8657576 chr6 29903336 29903396 8657576 chr6 29963226 29963279 8657576 chr6 30001930 30001990 8657576 chr6 30018025 30018078 8657576 chr6 30082069 30082121 8657576 chr6 30335106 30335147 8657576 chr4 74825005 74825052 8175759 chr6 32742393 32742649 8315353 chr11 118463734 118463763 2771941 chr7 45930677 45930706 14963110 chr14 94117290 94117597 9601089 chr11 61942943 61942994 9468485 chr17 35727181 35727965 15831516 chr17 35732149 35732743 15831516 chr6 30565086 30565123 8702722 chr10 91051673 91051709 8702722 chr4 74825041 74825071 8413306 chr1 27060400 27060434 9659898 chr17 59304831 59304865 16517055 chr17 59327728 59327762 16517055 chr17 59342412 59342446 16517055 chr17 59349992 59350026 16517055 chr14 74814954 74815007 1639071 chr3 70068143 70068181 10938265 chr3 134947297 134947876 2495523 chr14 93924791 93924822 2495523 chr6 32742365 32742936 1985121 chr6 32839240 32839653 1985121 chr8 42184273 42184463 9016559 chr17 35740995 35741053 7479078 chr9 136448822 136448877 7479078 chr15 94678306 94678373 7479078 chr20 61844190 61844300 14625278 chr8 28270141 28270216 14625278 chr8 28273131 28273207 14625278 chr8 28274487 28274561 14625278 chr1 167969983 167970010 7518452 chr3 123384312 123384360 12036954 chr3 123385623 123385674 12036954 chr14 74814933 74814994 3029776 chr7 45894486 45894515 9261184 chr17 77650007 77650042 9261184 chr3 188042774 188043233 15850785 chr11 116213541 116213703 11714848 chr22_random 13342 13504 11714848 chr6 31891189 31891235 2342471 chr6 31903385 31903431 2342471 chr22 17200931 17200972 16107498 chr22 19826896 19826937 16107498 chr22 19952172 19952213 16107498 chr2 11523692 11523952 16107498 chr18 27425727 27425757 2019605 chr2 21119525 21119763 2019605 chr12 6925719 6926152 11376946 chr1 157951087 157951128 8621622 chr10 5228099 5228140 11284743 chr19 6671574 6671793 2247055 chr6 43247372 43247404 2200737 chr6 32515517 32515570 11046010 chr6 33016713 33016744 11046010 chr5 32747446 32747507 7641319 chr2 70634548 70634607 9162057 chr9 21067984 21068015 9199299 chr17 31231512 31231552 10023774 chr12 67488870 67488913 9233781 chr6 36752111 36753033 9233781 chr3 130730025 130730054 9579468 chrX 153059391 153059427 9579468 chrX 153062720 153062935 9579468 chrX 153101128 153101363 9579468 chrX 153138246 153138481 9579468 chr7 47058918 47058999 1465383 chr11 94410404 94410505 1465383 chr11 94440041 94440142 1465383 chr17 72244733 72246053 1465383 chrX 34315777 34315833 1465383 chr13 109236951 109236995 15048126 chr7 27114667 27114704 8264592 chr7 27135537 27135602 8264592 chr7 27151889 27151957 8264592 chr7 27161206 27161280 8264592 chr12 52709803 52709877 8264592 chr17 44009203 44009259 8264592 chr17 44024648 44024710 8264592 chr17 44028861 44028923 8264592 chr17 44040296 44040358 8264592 chr2 176725730 176725759 8264592 chr22 37970974 37971013 9341193 chr2 219354985 219355021 11867220 chr4 123597348 123597378 2123468 chr4 123597328 123597356 2204815 chr16 31346875 31346956 7687470 chr16 31348751 31348842 7687470 chr15 32875077 32875112 2123467 chr16 4247192 4248251 2123466 chr16 4250104 4250595 2123466 chr16 4251849 4252702 2123466 chr16 4262659 4262695 2123466 chr6 32260151 32260185 10829018 chr11 5227715 5227760 1698280 chr11 5232639 5232684 1698280 chr14 22095167 22095265 7774816 chr6 31891187 31891281 3031671 chr6 31903380 31903455 3031671 chr12 12761487 12761533 10542271 chr12 47864841 47865066 3839072 chr12 47866619 47868999 3839072 chr12 47949737 47949778 3839072 chr7 55054352 55054388 2170982 chr6 32515499 32515573 10072067 chr9 135490836 135491305 7688735 chr16 66202233 66203527 8246978 chr16 66208146 66208278 8246978 chr16 66212098 66212957 8246978 chr16 66217957 66218120 8246978 chr16 66219770 66220929 8246978 chr16 66229228 66230572 8246978 chr6 22395672 22395702 8015553 chr6 22402675 22402707 8015553 chr6 22405213 22405243 8015553 chr6 22411661 22413974 8015553 chr1 120737547 120737587 9144409 chr1 147635797 147635837 9144409 chr1 148020753 148020792 9144409 chr12 111900547 111900584 9813254 chr6 12120599 12120645 2106471 chr6 12228134 12232523 2106471 chr6 12269716 12270134 2106471 chr6 12271631 12273113 2106471 chr5 131434406 131434658 7891702 chr11 102219596 102219626 7891702 chr20 3013399 3013428 12403649 chr4 74825044 74825072 12767906 chr11 47372996 47373029 15767686 chr16 54247462 54248144 9928902 chr12 9159965 9160004 7507205 chr1 147635801 147635841 7507205 chr5 131854189 131854859 7507207 chr4 185632677 185632974 7507207 chr4 123597348 123597378 11994417 chr15 32875132 32875161 3477800 chr17 38306145 38306188 10960473 chr4 123597348 123597378 8524297 chr11 59612763 59612817 12697656 chr16 28850731 28850764 12218128 chr4 74824867 74824907 15085176 chr15 89228610 89228713 8657143 chr12 54408961 54409501 1599482 chr14 21999474 21999519 1833636 chr1 89303574 89303603 1833631 chr1 89645732 89645761 1833631 chr12 79625994 79626043 1659574 chr12 79635308 79635379 1659574 chr11 17698325 17698396 1659574 chr1 201318969 201322888 1659574 chr18 24010985 24011015 15541732 chr4 122964728 122964757 7760822 chr8 16094714 16094745 7760824 chrX 66681555 66683257 2911578 chrX 66779829 66779939 2911578 chrX 66822574 66822693 2911578 chrX 66848027 66848257 2911578 chrX 66854043 66854192 2911578 chrX 66858399 66860554 2911578 chr11 13474102 13474459 1977134 chr6 27899739 27899784 3071490 chr6 27907381 27907426 3071490 chr11 102174146 102174184 8139041 chr2 70634954 70635030 10828826 chr4 103737713 103737856 1992489 chr4 103741086 103741160 1992489 chr4 103746686 103747905 1992489 chr1 205560906 205561732 7678027 chr3 166279011 166279225 9806892 chr6 31891181 31891213 1569208 chr6 31903377 31903409 1569208 chr3 129689434 129690224 8972903 chr3 166279008 166279036 9822664 chr10 91001599 91001893 9799798 chr14 92458567 92459224 7588318 chr5 131423976 131424006 1695008 chr9 97121060 97121106 9063748 chr11 303985 304024 1832217 chr12 3499781 3499812 2531661 chr6 31891187 31891393 1986252 chr6 31903382 31903440 1986252 chr14 105399325 105399391 1986254 chr6 160309964 160310147 12857727 chr6 170705395 170705476 2363050 chr6 170707889 170708097 2363050 chr6 170712800 170713246 2363050 chr6 170715557 170715645 2363050 chr6 170717928 170718022 2363050 chr6 170720622 170720792 2363050 chr6 170722419 170723871 2363050 chr14 54950868 54950903 2363050 chr11 117692798 117692830 1639073 chr14 22095208 22095240 1639073 chr3 134944265 134944298 1748690 chr3 134947816 134947847 1748690 chr6 138230057 138230159 1381359 chr16 55199881 55199909 1530876 chr6 32515533 32515560 8687468 chr19 46188737 46188767 15563456 chr2 234334489 234334518 15563456 chr1 938620 938651 9268360 chr6 36754380 36754494 9268365 chr19 38484210 38484346 2112087 chr8 48812542 48812632 2112087 chr20 48240716 48242593 2112087 chr14 22656647 22656739 2112087 chr6 31891220 31891289 2474756 chr5 172129548 172129577 12890671 chr2 234191158 234191187 12847094 chr7 142294892 142294922 16574738 chr7 127668430 127668469 12215445 chr11 67107744 67107808 8702826 chr12 19152172 19152260 1748287 chr19 19117378 19119601 1748287 chr19 19152494 19152545 1748287 chr19 19157848 19158743 1748287 chr1 177683536 177684321 1748287 chr15 97956156 97956201 1748287 chr15 97990722 97990841 1748287 chr15 98003399 98003474 1748287 chr15 98029245 98029277 1748287 chr15 98032120 98033187 1748287 chr15 98048063 98048103 1748287 chr15 98064479 98064564 1748287 chr15 98068360 98068487 1748287 chr15 98070117 98071466 1748287 chr17 37121939 37121975 8294480 chr6 137517883 137517936 11390454 chr6 27208581 27208614 1535687 chr5 131437265 131437302 2342464 chr4 123597277 123597307 2342464 chr19 46551797 46551827 8016096 chr8 110168010 110168039 10208868 chr9 127043479 127043510 11779464 chr21 42513537 42513600 16024918 chr21 42528059 42528089 16024918 chr17 35827710 35828062 9126321 chr2 232951133 232951342 8314767 chr2 232979242 232979753 8314767 chr3 10306896 10306926 15142980 chr2 21120509 21120712 3165376 chr11 5227731 5227785 3181130 chr11 5232655 5232709 3181130 chr19 11349767 11349839 11756159 chr8 57521686 57521720 1372443 chr12 119900660 119900690 7984419 chr11 116199349 116199608 7984419 chr22_random 27425 27684 7984419 chr11 14950713 14950744 7476962 chr7 93861869 93861906 10201951 chr2 127892441 127892602 10333497 chr11 116213687 116213765 1904868 chr14 93924787 93924824 1904868 chr2 21120484 21120527 1904868 chr1 159460922 159460951 1904868 chr22_random 13280 13358 1904868 chr1 59022296 59022365 3142689 chr15 94674718 94674917 8706939 chr16 103419 103842 1569944 chr11 116196773 116196809 15583007 chr11 116199349 116199612 15583007 chr11 116205089 116205118 15583007 chr22_random 21923 21952 15583007 chr22_random 27421 27684 15583007 chr22_random 30224 30260 15583007 chr19 11061024 11061096 11250935 chr11 71527654 71528440 8106441 chr11 71547899 71547972 8106441 chr11 71565458 71566624 8106441 chr11 71584046 71584794 8106441 chr11 71605408 71605616 8106441 chr11 71607253 71607388 8106441 chr11 71609561 71610614 8106441 chr11 5227730 5227858 2468996 chr11 5232654 5232782 2468996 chr15 32875149 32875208 2823106 chr21 45786704 45787763 15214842 chr21 26465018 26465049 9407128 chr12 119900660 119900689 8290348 chr11 116213739 116213767 8290348 chr22_random 13278 13306 8290348 chr6 43844938 43844970 15039136 chr20 10596531 10596582 11641404 chr7 5533904 5534772 11322928 chr5 79631252 79631282 11322928 chr3 12087833 12087862 11322928 chr2 130548917 130548947 11322928 chr2 130937489 130937519 11322928 chr2 131131259 131131289 11322928 chr2 131738065 131738095 11322928 chr1 103914789 103914818 11322928 chr22 14635979 14636009 11322928 chr15 42069176 42069206 11322928 chr14 18655264 18655294 11322928 chr14 19058341 19058371 11322928 chr17 77092311 77092340 11322928 chr4 123597348 123597379 9837957 chr1 202402193 202402324 15353176 chr6 336164 336208 14581002 chr8 128816874 128816903 11777933 chr16 67328518 67328548 10706097 chr14 19992504 19995822 8086453 chr9_random 773107 774288 8086450 chr9 39644307 39645487 8086450 chr9 41018837 41020018 8086450 chr9 41789333 41790512 8086450 chr9 43340024 43341196 8086450 chr9 44498990 44500171 8086450 chr9 46838063 46839243 8086450 chr9 65798699 65799873 8086450 chr10 104279414 104279451 8086450 chr16 70596553 70597948 8086450 chr14 62140706 62141943 8086450 chr18 41917563 41922205 8086450 chr18 41923389 41929342 8086450 chr18 41930481 41933932 8086450 chr18 41935209 41935246 8086450 chr2 37237692 37237722 14645369 chr6 6265903 6265990 10037697 chr6 32929565 32929600 9858567 chr2 21120492 21120712 1660892 chr6 32742503 32742590 1923758 chr6 32839378 32839415 1923758 chr16 164052 164084 12854969 chr2 97628464 97628508 8806766 chr10 71914084 71915951 1309593 chr4 91974734 91974917 1309593 chr4 189161381 189161743 1309593 chrX 21785144 21785514 1309593 chrX 55669735 55670397 1309593 chr2 139371720 139372908 1309593 chr14 99775245 99776011 1309593 chr14 99798412 99798553 1309593 chr14 99810785 99810849 1309593 chr14 99812579 99814652 1309593 chr15 32874976 32875527 3785189 chr13 79809668 79809698 14644509 chr13 79814606 79814638 14644509 chr12 51200532 51200570 10825196 chr17 16666647 16666682 10825196 chr17 16689983 16690041 10825196 chr17 18270767 18270815 10825196 chr17 18294131 18294166 10825196 chr17 20338176 20338211 10825196 chr17 20361513 20361571 10825196 chr17 25922983 25923034 10825196 chr17 36996728 36996763 10825196 chr17 37034416 37034478 10825196 chr6 87861543 87861856 2481230 chr6 31661881 31662346 10944527 chr7 55054196 55054236 2556218 chr5 149446367 149446397 7969146 chr2 216008981 216009553 2170405 chr11 2139070 2139247 16461554 chr5 1348020 1348063 9973199 chr11 5258401 5258444 1631062 chr11 5227736 5227790 11544252 chr11 5232660 5232714 11544252 chr11 5247815 5247860 11544252 chr11 63831221 63831266 9058380 chr7 99219888 99219918 9770465 chr2 161932567 161932611 7769002 chr2 161935935 161936003 7769002 chr6 32076547 32076639 10608879 chr6 32109285 32109377 10608879 chr13 40431030 40431107 8493578 chr1 170894474 170894506 9395475 chr1 157951016 157951098 2154372 chr1 1581883 1581918 15087126 chr1 1647169 1647204 15087126 chr12 66838834 66839000 8670419 chr12 66840016 66840059 8670419 chr3 87391880 87391910 9626142 chr1 28375800 28375832 9058812 chr15 49420184 49420218 7626451 chr1 151240672 151240820 9889002 chr9 116920285 116920338 15001984 chr12 32723333 32723427 14741701 chr10 91051672 91051706 2236065 chr15 72447071 72447105 7798178 chr6 39629677 39630762 7958925 chr16 65783670 65784573 7958925 chr16 65785801 65787410 7958925 chr16 65789001 65789748 7958925 chr1 117098408 117098438 7929376 chr4 152240170 152240251 12463423 chr17 39822367 39822995 7518432 chr14 93924791 93924822 8621550 chr4 185587188 185587218 1579446 chr5 131424077 131424114 8704203 chr14 105142429 105142467 9190940 chr14 105261215 105261253 9190940 chr21 29636784 29636815 11069897 chr14 74815006 74815034 12242287 chr16 55199697 55199932 3821726 chr11 101896526 101896687 8294454 chr11 67107755 67107796 8206948 chr10 91051670 91051711 2342456 chr9 21067979 21068020 2495183 chr19 54226281 54226326 9182571 chr19 54232630 54232675 9182571 chr19 54238601 54238713 9182571 chr19 54244372 54244417 9182571 chr19 54251013 54251054 9182571 chr17 7063968 7063998 10607478 chr16 55199808 55199838 1852613 chr1 100957806 100957835 7499419 chr5 147996921 147996991 15575821 chr22_random 21651 21681 9322942 chr5 149772577 149772830 8164652 chr3 25444696 25444725 7931079 chr7 30970033 30970097 10207037 chr2 88926786 88926816 1406692 chr5 158690173 158690202 9497375 chrY 1693987 1694161 7989373 chrX 1693987 1694161 7989373 chr19 11061106 11061136 10671569 chr6 22405250 22405369 12223489 chr7 93861869 93861906 8621730 chr16 31178718 31178865 8955212 chr11 5662867 5663929 16289103 chrX 37524142 37524171 1885602 chr7 5535922 5535983 3422098 chr20 1922571 1922602 9819380 chr1 938621 938650 2606351 chr7 526008 526156 8349616 chr12 47637373 47638624 8473323 chr9 136468132 136468176 8264664 chr16 66022178 66022739 11850421 chrX 37524201 37524230 12732216 chr13 93930267 93930296 9447965 chr11 116205088 116205118 9592157 chr22_random 21923 21953 9592157 chr12 79625628 79626072 1374396 chr12 79635307 79635380 1374396 chr11 17698325 17698389 1374396 chr1 201321305 201321383 1374396 chr16 55199876 55199917 9155027 chr8 59575397 59575425 10777541 chr5 131424079 131424114 9036972 chr1 154477843 154478070 8388544 chr11 46934508 46934538 16227573 chr2 183836533 183837362 16227573 chr1 26626420 26627246 16227573 chr14 74814933 74814987 14737107 chr2 216008770 216009355 3031656 chr2 174538113 174538172 16024108 chr3 134947100 134947167 12459033 chr2 113258581 113258611 15863387 chr22 37970937 37971189 7961814 chr13 47775839 47775880 8620463 chr14 95791802 95791830 9553142 chr16 10880177 10880281 10202014 chr3 24511146 24511495 1339272 chr19 11061066 11061095 10579331 chr17 24099529 24099558 12788948 chr17 4491641 4492686 10657944 chr19 4767630 4767659 14960149 chr19 4783037 4783067 14960149 chr5 32747446 32747507 9492076 chr7 5534640 5534680 8474178 chr5 77117021 77117061 8474178 chr5 79631781 79631821 8474178 chr5 131023109 131023150 8474178 chr3 12087295 12087335 8474178 chr2 130937393 130937427 8474178 chr2 131131351 131131385 8474178 chr2 131738157 131738191 8474178 chr2 132100740 132100774 8474178 chr1 222118578 222118618 8474178 chr1 236157318 236157357 8474178 chr9 6825009 6825049 8474178 chr9 102533894 102533933 8474178 chr17 77093011 77093051 8474178 chr16 48650094 48650134 8474178 chr15 32453565 32453605 8474178 chr14 18655356 18655390 8474178 chr14 19058245 19058279 8474178 chr22 14635883 14635917 8474178 chr22 39800635 39800675 8474178 chr18 58260785 58260822 8474178 chr7 25129922 25129978 7926749 chr7 120825888 120825961 7926749 chr7 128544905 128544975 7926749 chr6 34295353 34295435 7926749 chr6 96058920 96059004 7926749 chr3 10017416 10017489 7926749 chr3 10074731 10074826 7926749 chr3 11895377 11895465 7926749 chr2 100353199 100353281 7926749 chr1 149143140 149143224 7926749 chr1 155364921 155365003 7926749 chr1 200605365 200605448 7926749 chrY 15562898 15562993 7926749 chrY 26956593 26956687 7926749 chr9 95840277 95840372 7926749 chrX 68621997 68622075 7926749 chrX 144065978 144066017 7926749 chrX 152760052 152760117 7926749 chr13 23873007 23873066 7926749 chr13 40335814 40335898 7926749 chr13 98080024 98080108 7926749 chr11 31258880 31258964 7926749 chr11 57529575 57529654 7926749 chr11 73871069 73871138 7926749 chr11 82717815 82717863 7926749 chr11 108198369 108198442 7926749 chr17 72707002 72707073 7926749 chr16 25373238 25373333 7926749 chr15 39188497 39188575 7926749 chr15 58576780 58577112 7926749 chr15 58579382 58580562 7926749 chr15 58582248 58583160 7926749 chr15 58584998 58585071 7926749 chr15 58590741 58591041 7926749 chr15 58594185 58594250 7926749 chr15 58636353 58636420 7926749 chr15 58637713 58637804 7926749 chr15 58706735 58706954 7926749 chr15 59308661 59308794 7926749 chr14 76169951 76170035 7926749 chr8 33946698 33946793 7926749 chr8 51837693 51837766 7926749 chr8 120699677 120699737 7926749 chr6 26140295 26140436 2928309 chr1 148070693 148070855 2928309 chr1 148099338 148099500 2928309 chr7 87068234 87069157 7961962 chr1 200246118 200246146 11313868 chr18 59294965 59295073 10692390 chr4 100493209 100493240 1320193 chr2 85749240 85749301 10617585 chr14 34943731 34944082 8262046 chr7 81237247 81237276 11112425 chr7 81238277 81238327 11112425 chr1 120737495 120737587 8455606 chr1 147635797 147635889 8455606 chr1 148020753 148020845 8455606 chr1 148070694 148070809 2768251 chr1 148099384 148099499 2768251 chr5 131434534 131434563 8809409 chr5 131437305 131437364 8809409 chr4 74516856 74516887 2708361 chr3 134944274 134944309 2708361 chr3 134947799 134947874 2708361 chr7 526480 526592 8486717 chr7_random 465929 466022 8486717 chr16 54068947 54068984 8610173 chr16 55199807 55199838 8610173 chr21 39099688 39099758 1888697 chr11 2139239 2139277 10601637 chr6 26216376 26216406 11098153 chr9 124711245 124711796 7958847 chr9 124712940 124714041 7958847 chr7 27135536 27136313 1970866 chr12 52734902 52734991 1970866 chr2 176725583 176725760 1970866 chr9 21067997 21068034 9446577 chr6 31658166 31658338 8786306 chr9 21067966 21068080 2910848 chr6 87861653 87861691 2159633 chr3 49701034 49701169 8702759 chr1 16844625 16844760 8702759 chr13 19033370 19033411 9865725 chr13 20732460 20732501 9865725 chr11 63831213 63831254 9865725 chr15 49322619 49322769 9865725 chr19 50100725 50100755 2188976 chr6 153113527 153113559 2842787 chr2 10505705 10505928 2318872 chr7 525926 526035 1417865 chr9 21067995 21068053 7523851 chr1 167969926 167970000 7523851 chr18 59138134 59138163 16186795 chr16 29983392 29983480 7473711 chr11 119683434 119683465 12624109 chr6 32515374 32515574 2851727 chr7 100556302 100557246 2840665 chr7 100558391 100558421 2840665 chr12 51001397 51001563 9811563 chr21 42660051 42660105 12021387 chr12 52063339 52063372 14593115 chr15 49420187 49420228 9817601 chr6 27208583 27208609 11566492 chr2 175330620 175330648 8441631 chr5 137695272 137695489 7828585 chr4 122964347 122964726 7556094 chr1 1580338 1580368 15656972 chr6 35562268 35562336 1851669 chr11 12652638 12653679 1851669 chr11 12742300 12742560 1851669 chr11 12840371 12840433 1851669 chr11 12842959 12843020 1851669 chr11 12857828 12857965 1851669 chr11 12859126 12860081 1851669 chr11 12861120 12861248 1851669 chr11 12880061 12880237 1851669 chr11 12903033 12903175 1851669 chr11 12908294 12908451 1851669 chr11 12915230 12917454 1851669 chr11 125553434 125554765 1851669 chr3 46186795 46186935 1851669 chr19 54554959 54555027 1851669 chr7 526001 526156 1460057 chr16 84494119 84494201 1460054 chr16 84509528 84509897 1460054 chr3 134947845 134947926 2839477 chr1 938619 938651 9234684 chr12 14740883 14740927 10889158 chr3 166279011 166279044 10889158 chr4 187424396 187424441 11891231 chr2 60961765 60962017 8666258 chr9 106642487 106642515 10858438 chr3 25444696 25444725 1335571 chr17 4794239 4795878 1840492 chr11 63824693 63825022 14978033 chr11 63828767 63829062 14978033 chr11 5227699 5228090 1406669 chr11 5232623 5233475 1406669 chr11 5235227 5235270 1406669 chr11 5245402 5245626 1406669 chr11 5247999 5248054 1406669 chr19 18252365 18252412 1527086 chr20 35157762 35157853 7791762 chr17 29507625 29507986 12957380 chr2 8739640 8739671 7758976 chr14 22095216 22095259 2237431 chr19 12763115 12763277 1708123 chr6 19945684 19945712 9516472 chr19 803187 803276 8035830 chrX 16575045 16575095 15217781 chrX 16578082 16578129 15217781 chr1 159466177 159467889 8114692 chr1 159469220 159469752 8114692 chr1 159472260 159473015 8114692 chr1 159474453 159474579 8114692 chrX 72958724 72958835 8114692 chr2 228272379 228272410 15217784 chr2 228275241 228275271 15217784 chr2 228290979 228291062 15217784 chr12 110689068 110689098 8964492 chr19 11060987 11061023 10787437 chr4 123597348 123597378 1722332 chr8 128817180 128817228 2324096 chr12 67488825 67488868 15550242 chr5 176769145 176769177 9794469 chr14 93924789 93924821 9794469 chr8 11603760 11603808 9486185 chr11 118463734 118463763 1875946 chr16 103521 103848 1875946 chr4 149583222 149583259 8961265 chr4 149585298 149585633 8961265 chr5 131437322 131437356 2233734 chr11 56914779 56914817 9558404 chr11 102174165 102174196 9850057 chr11 102175684 102175713 9850057 chr7 87067977 87068281 9187262 chr6 32515556 32515587 9187262 chr11 69165014 69165043 10318916 chr6 43566882 43566936 1846623 chr5 8673994 8674036 1846623 chr4 5457316 5457345 1846623 chr4 65155400 65155486 1846623 chr2 82900464 82900506 1846623 chr2 117226296 117226351 1846623 chr2 143566474 143566505 1846623 chr1 77209592 77209678 1846623 chr9 34989140 34989208 1846623 chr8 68655747 68655789 1846623 chr13 95146565 95146598 1846623 chr11 63711382 63711424 1846623 chr17 19441579 19441621 1846623 chr17 21944695 21944853 1846623 chrM 16412 16571 1846623 chrX 125692535 125692596 1846623 chr6 31891213 31891248 11306579 chr1 228904777 228904839 7961807 chr3 25444666 25444701 10629053 chr5 176446487 176446622 11981041 chr19 9490688 9490716 11022000 chr18 58261021 58261049 11022000 chr17 31231518 31231548 11022000 chr2 130548582 130548610 11022000 chr2 130937154 130937182 11022000 chr2 131131596 131131624 11022000 chr2 131738402 131738430 11022000 chr9 6825254 6825282 11022000 chr6 32515533 32515560 10675042 chrX 146800817 146801184 9199556 chr10 69125925 69126061 15302915 chrX 30581119 30581150 14654354 chr17 73694758 73694962 2914910 chr7 5533904 5534773 11509602 chr5 79631252 79631282 11509602 chr5 158689999 158690346 11509602 chr3 12087833 12087862 11509602 chr2 130548917 130548948 11509602 chr2 130937489 130937520 11509602 chr2 131131258 131131289 11509602 chr2 131738064 131738095 11509602 chr1 103914789 103914818 11509602 chr22 14635979 14636010 11509602 chr15 42069176 42069206 11509602 chr14 18655263 18655294 11509602 chr14 19058341 19058372 11509602 chr17 77092311 77092340 11509602 chr2 182251813 182251845 9714454 chr2 182253400 182253508 9714454 chr2 182254799 182254844 9714454 chr10 6144529 6144558 8475098 chr1 167969764 167969794 7525580 chrX 153904168 153904229 8628260 chr20 29655768 29655813 11700304 chr8 42314353 42315833 3182828 chr14 21999513 21999544 11781241 chr4 155703461 155703528 8423785 chr12 21417530 21417563 15243700 chr15 72805892 72805921 9415707 chr11 102176066 102176109 9115242 chr11 116168396 116168615 12709436 chr22 38626944 38626986 12554803 chr16 55217063 55217144 6095291 chr16 55223951 55224021 6095291 chr16 55249263 55249346 6095291 chr16 55259528 55259603 6095291 chr16 55261095 55261155 6095291 chr6 74286519 74288051 7961976 chr7 55054352 55054388 12894229 chr1 75962523 75962557 1328196 chr6 31433071 31433109 7907595 chr1 120737548 120737587 7907595 chr1 147635797 147635836 7907595 chr1 148020753 148020792 7907595 chr16 54068947 54068984 9343394 chr7 44805908 44805937 12377782 chr2 101257187 101257216 12377782 chr5 68498805 68498835 1582409 chr10 62209932 62209968 1582409 chr10 62214466 62214599 1582409 chr4 100431464 100431497 1996113 chr4 100461879 100461911 1996113 chr4 100493190 100493270 1996113 chr4 123597348 123597378 8335913 chr3 42281230 42281419 2118525 chr16 103674 103708 8455611 chr11 47238665 47240146 7744246 chr11 47246036 47246944 7744246 chr22 34343285 34343320 3796609 chr6 32515518 32515580 3133120 chr11 116213691 116213767 14563824 chr22_random 13278 13315 14563824 chr6 31891219 31891251 1674922 chr7 100556510 100556547 9765209 chr16 31311937 31312078 10722744 chr7 5533904 5534772 14761964 chr5 77116937 77116964 14761964 chr5 79631252 79631282 14761964 chr3 12087833 12087862 14761964 chr2 130548917 130548947 14761964 chr2 130937489 130937519 14761964 chr2 131131259 131131289 14761964 chr2 131738065 131738095 14761964 chr1 103914789 103914818 14761964 chr1 227633868 227633895 14761964 chr22 14635979 14636009 14761964 chr15 42069176 42069206 14761964 chr14 18655264 18655294 14761964 chr14 19058341 19058371 14761964 chr17 77092311 77092340 14761964 chr1 163028394 163028465 1967982 chr1 163055999 163056043 1967982 chrX 33133101 33133241 9092671 chr2 40593126 40593192 10212268 chr12 49852960 49853556 8157699 chr11 303949 304011 2492664 chrX 33139544 33139614 2403634 chr16 142730 142764 2403638 chr16 152942 152976 2403638 chr6 12398458 12398494 9588211 chr20 31728190 31728226 10336493 chr16 31273841 31274009 8621914 chr11 116205239 116205369 8675624 chr22_random 21671 21801 8675624 chr17 35727890 35728028 7585542 chr10 95351086 95351181 8810324 chr4 123597348 123597378 1639393 chr1 89303430 89303699 1898761 chr1 89645644 89645905 1898761 chr17 68677654 68677683 11208729 chr2 204279613 204279643 11342633 chr16_random 105102 105168 1502157 chr16 29726478 29727567 1502157 chr16 29729109 29729985 1502157 chr11 69299287 69299589 7929190 chr17 29603541 29603572 15223809 chr13 19665939 19666133 16314317 chr4 100493208 100493237 11051106 chr2 113313587 113313618 8413264 chr10 71006857 71006921 11334435 chr6 116556247 116556279 12435601 chr3 4996984 4997026 12624110 chr10 135190225 135190285 15345327 chr16 55199882 55199916 2033057 chr2 21120497 21120527 2033057 chr4 123597157 123597188 1652063 chr2 208169881 208169935 7745688 chr5 131423937 131424152 2263617 chr16 55199881 55199917 2263617 chr18 59138005 59138038 15117818 chr5 131437192 131437225 12704365 chr6 106642850 106642882 1851123 chr6 106650195 106650227 1851123 chr6 106659392 106659933 1851123 chr11 117692798 117692830 1989880 chr6 32515579 32515609 7673122 chr5 149772458 149772599 7673122 chr2 88938933 88939059 3037335 chr5 137828911 137828949 10391889 chr16 68318402 68318430 9601066 chr1 59020592 59020670 8253081 chr14 79748341 79748375 12775767 chr5 137695539 137695570 9679054 chr2 204279613 204279644 10510368 chr17 73694638 73695190 2005912 chr14 93924749 93924779 3263567 chr6 49682517 49682891 9442063 chr6 49688066 49688117 9442063 chr6 49691308 49691352 9442063 chr6 49694923 49695034 9442063 chr6 49712336 49712389 9442063 chr11 116205741 116205769 1406652 chr22_random 21271 21299 1406652 chrX 37524021 37524232 9593745 chr16 142740 142804 9642099 chr16 152952 153016 9642099 chr4 123597344 123597378 8473495 chr19 46878377 46878479 8349632 chr19 46914542 46914874 8349632 chr19 46917381 46917730 8349632 chr19 47716252 47716299 8349632 chr19 47784239 47784322 8349632 chr19 47821063 47821727 8349632 chr19 47858834 47859130 8349632 chr19 47924303 47925076 8349632 chr19 47936758 47937193 8349632 chr19 47950191 47950286 8349632 chr19 47961986 47962109 8349632 chr19 47981597 47981632 8349632 chr19 48039543 48040312 8349632 chr19 48052014 48052449 8349632 chr19 48063958 48064054 8349632 chr19 48075974 48076408 8349632 chr19 48102096 48102875 8349632 chr19 48121643 48121722 8349632 chr19 48145389 48145424 8349632 chr19 48210295 48211069 8349632 chr19 48222748 48222790 8349632 chr19 48266879 48267653 8349632 chr19 48370394 48371168 8349632 chr19 48382768 48382812 8349632 chr19 48390210 48390293 8349632 chr19 48401910 48401953 8349632 chr19 48415874 48415909 8349632 chr19 48453381 48454155 8349632 chr19 48465820 48466255 8349632 chr19 48479322 48479357 8349632 chr16 31178767 31178799 8095266 chr6 22405282 22405362 1655738 chr1 154478086 154478119 8825560 chr2 85748893 85748944 12161428 chr17 59364777 59364942 10446901 chr7 22733233 22733278 2183031 chr7 99219886 99219923 11679585 chr10 96686554 96686755 11679585 chr19 50100781 50100815 12444925 chr16 31178795 31178913 8096519 chr17 33144671 33144750 1677179 chr17 33167871 33167927 1677179 chr2 216008981 216009553 2542772 chr11 113672318 113672349 15486044 chr11 113688417 113688446 15486044 chr12 102847759 102848419 2546060 chr6 27968973 27969051 8628255 chr9 21067966 21068081 2542571 chr9 21358161 21358203 2542571 chr9 21430309 21430351 2542571 chr11 5204937 5204966 7545172 chr11 5227752 5227795 7545172 chr11 5232676 5232719 7545172 chr11 5247819 5247851 7545172 chr5 131410358 131410597 9047239 chr4 123597352 123597382 9047239 chr11 102219597 102219627 9047239 chr11 116213590 116213627 9507986 chr22_random 13418 13455 9507986 chr7 93042000 93042093 14623107 chr18 647735 647764 9218479 chrX 43626664 43626710 15024015 chr14 66896764 66896814 9856992 chr16 55199806 55199838 2191300 chr6 32515619 32515659 2105459 chr10 90739578 90739628 10903433 chr13 112824973 112825091 11159521 chr2 1874828 1874920 1280325 chr2 1900021 1900095 1280325 chr20 62313000 62313928 1280325 chr20 62318981 62319078 1280325 chr20 62320626 62321779 1280325 chr20 62323687 62323844 1280325 chr20 62325099 62325129 1280325 chr20 62329211 62329770 1280325 chr20 62333960 62334153 1280325 chr20 62338349 62339187 1280325 chr20 62341571 62342693 1280325 chrX 102918139 102918171 1280325 chr7 100556298 100557042 11423472 chr19 50501540 50502693 2903158 chr19 50506846 50506880 2903158 chr19 50513023 50513074 2903158 chr19 50514798 50514829 2903158 chr3 70068150 70068220 10973953 chr4 123597347 123597378 15471864 chr4 74953666 74953833 1906501 chr5 132037380 132037436 11781715 chr6 31650766 31650831 12655064 chr11 116205745 116205774 2777781 chr22_random 21266 21295 2777781 chr11 100414363 100415056 2328727 chr11 100503355 100503385 2328727 chr11 100505017 100506465 2328727 chr1 6562697 6563256 7969177 chr1 6571859 6571923 7969177 chr6 32742468 32742520 9032250 chr3 111118149 111118177 9032250 chr12 103041232 103041262 9032250 chr5 1348120 1348359 11454703 chr7 55054190 55054386 2768275 chr14 21999514 21999544 12244173 chr3 188943535 188943563 12150891 chr1 23759174 23759207 12150891 chr22 39903140 39903181 11116148 chr6 32515533 32515581 3174636 chr15 37660490 37660521 8444876 chr6 138230011 138230054 8444879 chr12 97562600 97562637 11896574 chr18 53404788 53404938 7983009 chr20 31737790 31738092 7935380 chr8 38127715 38127745 10919277 chr1 153302601 153302796 12030849 chr1 100957801 100957850 8547644 chr11 73371684 73372465 16282353 chr2 48727285 48727318 10364255 chr1 181826007 181826435 11781392 chrX 37524194 37524224 11781392 chr7 41970209 41972742 2118997 chr7 41973749 41974031 2118997 chr7 41978488 41978750 2118997 chr7 41983714 41983767 2118997 chr7 42029591 42029669 2118997 chr7 42031395 42032539 2118997 chr7 42046165 42046363 2118997 chr7 42051506 42051655 2118997 chr7 42054619 42054811 2118997 chr7 42082874 42082981 2118997 chr7 42154352 42154578 2118997 chr7 42229265 42229411 2118997 chr2 121462417 121462473 2118997 chr17 35827693 35827738 12769819 chr6 36754354 36754385 10749849 chr1 67925039 67925068 10749849 chr9 109287447 109287894 10749849 chr7 55054190 55054238 10363966 chr17 35109317 35109363 10363966 chr7 56161235 56161290 9334314 chr7 64181915 64181969 9334314 chr7 64876045 64876085 9334314 chr7 72227389 72227445 9334314 chr7 73781058 73781114 9334314 chr7 74270860 74270916 9334314 chr9 96441673 96441802 11023824 chr7 75769816 75769845 9328340 chr7 5533905 5535784 1710027 chr6 46280797 46281747 1710027 chr6 89042334 89043319 1710027 chr5 15504633 15504896 1710027 chr5 56813210 56814242 1710027 chr5 61163672 61163723 1710027 chr5 77116592 77117549 1710027 chr5 79631302 79631916 1710027 chr5 79634186 79634306 1710027 chr5 97702839 97703393 1710027 chr5 131022673 131023539 1710027 chr3 12086940 12087806 1710027 chr3 140695810 140696440 1710027 chr3 177177975 177178622 1710027 chr3 182021876 182022052 1710027 chr2 73972985 73974525 1710027 chr2 73980342 73983204 1710027 chr2 73988647 73989876 1710027 chr2 73994054 73995649 1710027 chr2 73997098 73997500 1710027 chr2 73999983 74000318 1710027 chr2 108082159 108082238 1710027 chr2 130548301 130549385 1710027 chr2 130936859 130937957 1710027 chr2 131130821 131131919 1710027 chr2 131737627 131738725 1710027 chr2 132100210 132101308 1710027 chr2 177199789 177199841 1710027 chr1 27524649 27524875 1710027 chr1 78012196 78013141 1710027 chr1 92467197 92467382 1710027 chr1 103914534 103914769 1710027 chr1 201109169 201109326 1710027 chr1 222118103 222119050 1710027 chr1 227633869 227635476 1710027 chr1 236156880 236157339 1710027 chr8 86023505 86024318 1710027 chr9 6824581 6825542 1710027 chr9 102534069 102534395 1710027 chrX 46032439 46033041 1710027 chrX 53188773 53189695 1710027 chr11 1780695 1781770 1710027 chr10 70452642 70452798 1710027 chr10 90684958 90685088 1710027 chr10 90687798 90687977 1710027 chr10 90689248 90689321 1710027 chr10 90690997 90691107 1710027 chr10 90693546 90693643 1710027 chr10 90696998 90697120 1710027 chr10 90698554 90698637 1710027 chr22 14635352 14636447 1710027 chr22 39800160 39801062 1710027 chrY 18378289 18379273 1710027 chrY 18769283 18770112 1710027 chr15 32453090 32453139 1710027 chr15 32869904 32873056 1710027 chr15 32874182 32874289 1710027 chr15 42068572 42069644 1710027 chr15 81192162 81192213 1710027 chr14 18654826 18655924 1710027 chr14 19057711 19058809 1710027 chr20 1090118 1090302 1710027 chr17 17086627 17086908 1710027 chr17 77092309 77093757 1710027 chr19 9489954 9490962 1710027 chr18 58260968 58261292 1710027 chr16 48649560 48650501 1710027 chr5 132037504 132037538 10069428 chr3 25444697 25444726 11943482 chr1 167969830 167969975 7520526 chr10 82039129 82039179 10677369 chr9 115882964 115883372 9729465 chr7 120478078 120478120 14621294 chr4 63058672 63058703 14621294 chr1 181178238 181178280 14621294 chrX 153698948 153698990 14621294 chr11 3967348 3967409 14621294 chr10 19817916 19817977 14621294 chr15 60441900 60441972 14621294 chr15 91055927 91055966 14621294 chr21 39642814 39643262 14621294 chr19 58963706 58963769 14621294 chr17_random 492683 492712 14557070 chr17_random 510775 510804 14557070 chr17_random 512267 512296 14557070 chr17_random 514742 514771 14557070 chr17_random 519631 519660 14557070 chr17_random 525779 525808 14557070 chr17_random 527711 527740 14557070 chr17_random 555958 555987 14557070 chr17_random 2607938 2607967 14557070 chr17_random 2614806 2614835 14557070 chr3 52463073 52463149 8413270 chr3 197293434 197293473 8022786 chr15 32875224 32875253 2494661 chr5 137695575 137695757 7479023 chrX_random 1443980 1444483 2044957 chrX 77245979 77246482 2044957 chr9 37024032 37024157 11223243 chr22 37970956 37970998 8077216 chr1 100957746 100957777 8077216 chr1 151147272 151147456 8550612 chr9 21067993 21068067 1886766 chr17 7423604 7423652 12676954 chr8 42191532 42191569 15466927 chr7 99219886 99219919 11027665 chr6 41760501 41760686 2115126 chr6 41761804 41763745 2115126 chr6 41765437 41766953 2115126 chr6 41811108 41811166 2115126 chr8 43016279 43016347 2115126 chrX 48775934 48775998 2115126 chr7 94791817 94791848 15380450 chr1 2072221 2072263 15380450 chr20 5048591 5048691 8095093 chr1 52642682 52642720 8943353 chr17 40348345 40348385 8702952 chr12 52196032 52197187 1694576 chr12 52306354 52306405 1694576 chr3 188870903 188870945 1694576 chr15 89212751 89212779 8132667 chr17 59304761 59304919 2033067 chr17 59312948 59313105 2033067 chr17 59327658 59327816 2033067 chr17 59342351 59342496 2033067 chr17 59349923 59350080 2033067 chr5 158690274 158690305 14976188 chr3 134944350 134944495 2033069 chr14 105142612 105142669 10510379 chr14 105261402 105261448 10510379 chrX 47326790 47326827 9182725 chr7 5536804 5536862 1762920 chr12 14930137 14930305 11425864 chr7 100159369 100159403 12354771 chr12 26167260 26167289 12354771 chr12 26169228 26169296 12354771 chr3 4995940 4995970 12354771 chrX 114183474 114183507 12776189 chrX 114184850 114184881 12776189 chr14 21999514 21999541 9584181 chr17 59349863 59349894 1744088 chr3 150065600 150065788 1744088 chr20 44070865 44071007 10359016 chr2 136592198 136592248 9379028 chr1 75962523 75962563 9271417 chr1 227636496 227636588 11096067 chr1 227637692 227637737 11096067 chr1 27871383 27871419 2721502 chr7 142216838 142216875 8264651 chr2 169596124 169596152 11387316 chr15 54998207 54999478 1312219 chr15 55000514 55000591 1312219 chr15 55143237 55143314 1312219 chr15 55171278 55171377 1312219 chr15 55245896 55245956 1312219 chr15 55271647 55271783 1312219 chr15 55277261 55277318 1312219 chr15 55310641 55310747 1312219 chr15 55311783 55312347 1312219 chr15 55313530 55313597 1312219 chr15 55322961 55323029 1312219 chr15 55330835 55330913 1312219 chr15 55332750 55332960 1312219 chr15 55341582 55342764 1312219 chr15 55352531 55352752 1312219 chr15 55361932 55362088 1312219 chr15 55365643 55367499 1312219 chr2 234190701 234190736 15470081 chr2 234209532 234209564 15470081 chr2 234254947 234254978 15470081 chr14 74815179 74815209 2233715 chr12 21175333 21175378 11483603 chr4 68302882 68302915 12947046 chr21 26465259 26465326 10333529 chr20 5048559 5048599 7602584 chr14 74814803 74814834 7602584 chr14 21999512 21999541 12097391 chr6 135544066 135544095 8137237 chr10 62208101 62208133 8137237 chrX 24621808 24621838 8137237 chr6 32076590 32076624 11463853 chr6 32109328 32109362 11463853 chr10 104587240 104587383 11463853 chr20 42463214 42463243 11585914 chr1 184915314 184915343 16397300 chr19 46551973 46552018 10843986 chr2 219990407 219990569 8387519 chr16 55199808 55199838 11522791 chr1 202402286 202402322 8999953 chr6 31651199 31651239 10521481 chr16 28850646 28850827 1375324 chr10 90741040 90741071 12788915 chr7 150316900 150316930 11960979 chr12 116253636 116253666 11960979 chr12 116361828 116361874 11960979 chr2 21120510 21120539 1901405 chr14 93924753 93924784 1901405 chr1 181826102 181826309 15513967 chr12 56432452 56432646 10688915 chr14 24173315 24173382 9857074 chr14 74814928 74815058 2849107 chr4 89115806 89115868 11126367 chr18 27425729 27425759 1620125 chr4 74488729 74488763 1620125 chr2 21120534 21120578 1620125 chr14 93924794 93924826 1620125 chr14 22974918 22974961 15572681 chr8 19840943 19840973 11090277 chr3 12368079 12368108 12821652 chr20 5048005 5049059 10488129 chr11 118463734 118463763 11154691 chr9 2611470 2611503 10064725 chr5 137695538 137695570 10559267 chr18 59136962 59137006 14555646 chr18 59138749 59139484 14555646 chr11 5227744 5227796 2476717 chr11 5232668 5232720 2476717 chr22 49363947 49363991 15356291 chr1 938622 938650 1654549 chr13 112808078 112808169 7559437 chr10 17310932 17311087 8417364 chr16 66535559 66535604 1659419 chr10 91142233 91142265 2118988 chr5 137828633 137828671 11739517 chr13 40405403 40405560 1527846 chr13 40454189 40454420 1527846 chr13 40491362 40491450 1527846 chr11 5202450 5202702 2461328 chr7 27169861 27169947 1756725 chr7 27178092 27178255 1756725 chr12 52669278 52669447 1756725 chr12 52682481 52682589 1756725 chr17 44045704 44045739 1756725 chr17 44055372 44055482 1756725 chr2 176689951 176690552 1756725 chr2 176691928 176692204 1756725 chr2 176695793 176697101 1756725 chr6 43845943 43845971 9264407 chr6 32114046 32114081 9518489 chr19 10242587 10242615 9831247 chr5 176450432 176450550 12642581 chr3 171422833 171422862 14670960 chr3 171485039 171485068 14670960 chrX 100679721 100679750 14670960 chr14 69333738 69333838 14701722 chr3 70068212 70068254 10747853 chr1 120737516 120737559 7565811 chr1 147635825 147635868 7565811 chr1 148020781 148020824 7565811 chr4 123597020 123597445 8233832 chr3 172227349 172227379 10748140 chr6 32515531 32515581 1454841 chr2 218739947 218739983 9867862 chrX 47326839 47326869 10692475 chr1 32511795 32511852 7499213 chr2 191586627 191586668 11909852 chr1 938620 938652 11909852 chr1 89303581 89303612 11909852 chr1 89645723 89645754 11909852 chr5 131423976 131424007 8632000 chr10 75338939 75339417 8632000 chr5 137828633 137828733 11520792 chr16 1782372 1782405 10650966 chr1 167969446 167970262 1710341 chr4 110942709 110942781 10524238 chr13 99432313 99432355 10984499 chr8 134378617 134379221 15377670 chr9 135491563 135491594 9011768 chr3 46481718 46481815 8621448 chr19 62042298 62043207 12554678 chr1 26105555 26105584 16757134 chr3 87408888 87408918 15998782 chr1 156923152 156923183 12196550 chr8 128817171 128817203 8197157 chr21 42660090 42660131 10620335 chr6 31891179 31891216 1871106 chr6 31903375 31903412 1871106 chr6 122762493 122762674 1871106 chr6 122775213 122775591 1871106 chr6 122782009 122783068 1871106 chr6 122784993 122786530 1871106 chr6 122790746 122790800 1871106 chr6 122794273 122795165 1871106 chr12 53802720 53804233 1871106 chr8_random 420976 422326 1871105 chr8_random 423591 423718 1871105 chr8_random 426243 426932 1871105 chr8 145503398 145504062 1871105 chr8 145506612 145506739 1871105 chr8 145508004 145509161 1871105 chr12 6547783 6547818 1754393 chr21 42609197 42609229 15177881 chr1 938616 938650 1406637 chr7 5533732 5533779 3244353 chr6 89042156 89042202 3244353 chr5 77117712 77117757 3244353 chr5 79631093 79631150 3244353 chr5 97703551 97703597 3244353 chr5 131022451 131022499 3244353 chr2 130548117 130548164 3244353 chr2 130936689 130936736 3244353 chr2 131132041 131132087 3244353 chr2 131738847 131738893 3244353 chr1 78011985 78012023 3244353 chr1 222117893 222117941 3244353 chr9 6825700 6825746 3244353 chr9 102534580 102534628 3244353 chrX 44538307 44538347 3244353 chrX 46032208 46032255 3244353 chrX 65835140 65835184 3244353 chr11 1780532 1780576 3244353 chr10 70453756 70453804 3244353 chr22 14635193 14635229 3244353 chr22 39799946 39799993 3244353 chr15 42068392 42068434 3244353 chr14 18656046 18656083 3244353 chr14 19057542 19057588 3244353 chr18 58261458 58261504 3244353 chr5 68498527 68498563 7739559 chr7 55054198 55054226 8887630 chr1 205012403 205012628 12817009 chr7 87068167 87068256 8103518 chr10 6144516 6144552 2308942 chr7 99173459 99173491 11495920 chr7 99219806 99219883 11495920 chr7 99222453 99222483 11495920 chr15 98070443 98070503 8035795 chr12 6104108 6104139 9444957 chr5 131424170 131424199 8035792 chr9 21067979 21068020 3368441 chr5 138986884 138986916 15656981 chr1 201321364 201321394 15656981 chr15 40536722 40537317 15656981 chr15 40545542 40545576 15656981 chrX 100527954 100527995 15850836 chr5 131434502 131434658 11509589 chr5 142641652 142641682 11509589 chr5 145700401 145700431 12606546 chr4 123597351 123597383 12606546 chr3 12367795 12367826 12606546 chrX 15529449 15529479 12606546 chr10 62207825 62207857 8420994 chr19 10242568 10242753 10092659 chr2 191586341 191586980 14654702 chr12 46681676 46682070 10856292 chr12 46684713 46684793 10856292 chr1 27544418 27544468 12137562 chr14 21999696 21999744 9584163 chr7 99219889 99219918 10757780 chr3 25444696 25444725 10757780 chr12 28014088 28014273 8371355 chr8 57521833 57521869 1828294 chr1 153429258 153432230 8387509 chr5 68498442 68498645 9218875 chr9 21358097 21358144 3040267 chr9 21430366 21430415 3040267 chr15 49322791 49322820 11245431 chr15 72805891 72805921 11120824 chr7 131000945 131000998 12850290 chr6 89031759 89031806 12850290 chr5 115926399 115926450 12850290 chr5 149806571 149806623 12850290 chr1 19807439 19807491 12850290 chr1 176647561 176647613 12850290 chr12 28007748 28007797 12850290 chr12 28014012 28014467 12850290 chr12 28016885 28016923 12850290 chr16 8498389 8498441 12850290 chr21 26464985 26465014 8541835 chr8 19840940 19841043 7753827 chr15 72805891 72805921 8816435 chr6 31651199 31651239 8816436 chr14 74814942 74814984 3316979 chr6 36752198 36752228 11030628 chr17 7520248 7520295 11030628 chr1 205329077 205329135 8598458 chr1 205344111 205344140 8598458 chr1 198263574 198263662 9786908 chr1 198284012 198284064 9786908 chr1 198409939 198410009 9786908 chr1 115373914 115373970 1321428 chr15 49307325 49307355 12351690 chr15 49361684 49361725 12351690 chr7 5535724 5535755 11744689 chr3 166279011 166279163 1378530 chr6 27943285 27943766 2829131 chr8 57521875 57521906 2850173 chr4 89115386 89115910 14712233 chr4 89123042 89123072 14712233 chr19 46188949 46188987 15722458 chr11 68336565 68336619 16271724 chr17 59304762 59304920 2181288 chr17 59312949 59313106 2181288 chr17 59327659 59327817 2181288 chr17 59342351 59342501 2181288 chr17 59349924 59350081 2181288 chr6 37244360 37245942 2181282 chr22 44923859 44923889 11981036 chr8 42314401 42315724 7590351 chr2 127130178 127130354 2584223 chr9 124173035 124173077 16105649 chr9 124186297 124186375 16105649 chr14 66896772 66896803 2584221 chr18 59703906 59704256 8916932 chr9 21067972 21068007 8916932 chr11 5202538 5202590 2481268 chr5 132037351 132037431 10973979 chr5 72779557 72779586 8988052 chr1 154478560 154478610 9388207 chr11 32414090 32414122 9388203 chrX 48914869 48915309 7622043 chr7 100159376 100159408 14741200 chr21 46842969 46843794 2394738 chr21 46846618 46846730 2394738 chr3 134947845 134947876 2911463 chr14 93924791 93924822 2911463 chr7 5536823 5536862 2911466 chr11 6367884 6367915 11788605 chr11 118463695 118463975 2911469 chr3 131176177 131176299 7565802 chr4 100461656 100461748 2050667 chr4 100493039 100493072 2050667 chr1 154478093 154478121 8262978 chr11 119681053 119681704 2905684 chr1 165456768 165456819 2905684 chr1 165568326 165568397 2905684 chr1 165601325 165601430 2905684 chr1 165607864 165607897 2905684 chr1 165609967 165610158 2905684 chr1 165611886 165612018 2905684 chr1 165619716 165619812 2905684 chr1 165625445 165625623 2905684 chr1 165632144 165632288 2905684 chr1 165633851 165633994 2905684 chr1 165635044 165635228 2905684 chr1 165637310 165637418 2905684 chr1 165647816 165648975 2905684 chr1 165651358 165651948 2905684 chr5 135259348 135259383 8663174 chr5 131437273 131437315 8934574 chr4 123597230 123597266 8934574 chr9 21067985 21068019 8934574 chr22 34102752 34103229 8077238 chr14 74814955 74814988 11108721 chr8 128822293 128822324 7539921 chr21 31953787 31953876 3160582 chr7 5533942 5533974 16702209 chr7 5535396 5535430 16702209 chr6 89042357 89042389 16702209 chr5 77116718 77117549 16702209 chr5 131023425 131023456 16702209 chr3 177178012 177178044 16702209 chr2 73989307 73989339 16702209 chr2 130548326 130549162 16702209 chr2 130936898 130937734 16702209 chr2 131131044 131131880 16702209 chr2 131737850 131738686 16702209 chr2 132100433 132101269 16702209 chr1 27524804 27524836 16702209 chr9 6825508 6825538 16702209 chr11 1780732 1781649 16702209 chr10 70452767 70452798 16702209 chr22 14635388 14636224 16702209 chr15 32872904 32872933 16702209 chr14 18655049 18655885 16702209 chr14 19057750 19058586 16702209 chr17 77093599 77093634 16702209 chr18 58261272 58261304 16702209 chr16 54068946 54068977 2174109 chr7 5533942 5533974 10479057 chr7 5535396 5535428 10479057 chr6 89042357 89042389 10479057 chr5 77116718 77117549 10479057 chr5 131023425 131023456 10479057 chr3 177178012 177178044 10479057 chr2 73989307 73989339 10479057 chr2 130548326 130549162 10479057 chr2 130936898 130937734 10479057 chr2 131131044 131131880 10479057 chr2 131737850 131738686 10479057 chr2 132100433 132101269 10479057 chr1 27524804 27524836 10479057 chr9 6825508 6825538 10479057 chr11 1780732 1781649 10479057 chr10 70452767 70452798 10479057 chr22 14635388 14636224 10479057 chr15 32872904 32872933 10479057 chr14 18655049 18655885 10479057 chr14 19057750 19058586 10479057 chr17 77093599 77093634 10479057 chr18 58261272 58261304 10479057 chr2 1390688 1390921 2174102 chr1 154478087 154478117 1662118 chr14 22947447 22947476 1662118 chr12 111900463 111900728 10524248 chr11 13474242 13474272 15297458 chr10 45188602 45189766 2251250 chr1 17317540 17317569 15854045 chr1 17318598 17318670 15854045 chr5 132037381 132037410 9013959 chr4 123597348 123597378 9013959 chr12 46521660 46525058 2835767 chr12 46526384 46526861 2835767 chr12 46535679 46535854 2835767 chr12 46537178 46537738 2835767 chr12 46545096 46545230 2835767 chr12 46559016 46559168 2835767 chr12 46562742 46562827 2835767 chr12 46585004 46585036 2835767 chr17 77217046 77217081 2835767 chr19 11061106 11061137 12947119 chr4 15549013 15549042 9668098 chr14 22095158 22095319 1534408 chr14 74815206 74815235 1534408 chr1 2448789 2448825 14757642 chr1 119759167 119759197 10406460 chr7 93862154 93862182 8900150 chr17 16666721 16666790 1703506 chr17 18294023 18294092 1703506 chr17 20338188 20338319 1703506 chr17 36996740 36996916 1703506 chr4 55686548 55686584 12560084 chr13 47952181 47952213 1406625 chr3 134944268 134944298 1851757 chr3 134947817 134948026 1851757 chr6 32515575 32515609 8943243 chr6 33656081 33656117 11850816 chr12 52060302 52060349 11294852 chr1 151269442 151269610 8388378 chr7 55054352 55054388 10830317 chr17 23928234 23928263 8348972 chr18 59138134 59138165 12970736 chr13 102516651 102516690 12055195 chr13 102518743 102518897 12055195 chr11 5227700 5227739 9763579 chr11 5232624 5232663 9763579 chr16 162927 162961 9763579 chr16 166731 166765 9763579 chr10 59815101 59815201 8108407 chr5 139993036 139993066 7522257 chr7 116099208 116099369 8633043 chr14 74814951 74815012 3561415 chrX 139414744 139414777 15656994 chr9 89532337 89532368 11742542 chr1 120737494 120737582 8035786 chr1 147635802 147635890 8035786 chr1 148020758 148020846 8035786 chr14 21999474 21999519 1328863 chr3 126434265 126435864 8355710 chr3 126479255 126479345 8355710 chr3 126480655 126480781 8355710 chr3 126489636 126489762 8355710 chr3 126514836 126515191 8355710 chr3 126524841 126524980 8355710 chr3 126532690 126532773 8355710 chr3 126576656 126576781 8355710 chr1 198644522 198644626 8355710 chr7 5534001 5534623 8939459 chr6 46281346 46281734 8939459 chr6 89042422 89042712 8939459 chr5 15504843 15504873 8939459 chr5 61163678 61163733 8939459 chr5 77117196 77117492 8939459 chr5 79631358 79631581 8939459 chr5 97703198 97703252 8939459 chr3 12087411 12087591 8939459 chr3 140696029 140696413 8939459 chr3 177178242 177178299 8939459 chr3 182021771 182021993 8939459 chr2 73995378 73995432 8939459 chr2 73997331 73997392 8939459 chr2 113258477 113258678 8939459 chr2 130548383 130548798 8939459 chr2 130936955 130937370 8939459 chr2 131131408 131131823 8939459 chr2 131738214 131738629 8939459 chr2 132100798 132101212 8939459 chr2 177199802 177199832 8939459 chr1 27524781 27524811 8939459 chr1 78012359 78012539 8939459 chr1 103914371 103914667 8939459 chr1 222118159 222118387 8939459 chr1 227634431 227634490 8939459 chr1 236157433 236157485 8939459 chr8 86024150 86024198 8939459 chr9 6825149 6825481 8939459 chr9 102534312 102534359 8939459 chrX 46032662 46032719 8939459 chrX 53188784 53189155 8939459 chr11 1780967 1781216 8939459 chr10 90689314 90689371 8939459 chr22 14635561 14635859 8939459 chr22 39800216 39800503 8939459 chrY 18378426 18378484 8939459 chrY 18770072 18770130 8939459 chr15 32871653 32871766 8939459 chr15 42068656 42068877 8939459 chr15 81192521 81192565 8939459 chr14 18655413 18655712 8939459 chr14 19057923 19058221 8939459 chr17 17086477 17086530 8939459 chr17 77092373 77092935 8939459 chr19 9490688 9490921 8939459 chr18 58261015 58261239 8939459 chr7 100556366 100556452 10092624 chr4 55686311 55686706 15941713 chr22 37971039 37971068 2651898 chr7 99166659 99166694 16171783 chr7 99204178 99204208 16171783 chr7 99215592 99215627 16171783 chr5 174803080 174803675 1557411 chr11 5227727 5227786 9792700 chr11 5232651 5232710 9792700 chrX 37524126 37524187 9792700 chr6 32515517 32515571 1956787 chr6 32549430 32549476 1956787 chr6 32606136 32606182 1956787 chr6 32665653 32665699 1956787 chr6 32713039 32713089 1956787 chr6 32742503 32742540 1956787 chr6 32839378 32839415 1956787 chr6 33151595 33151641 1956787 chr6 33188069 33188115 1956787 chr4 74488494 74488536 2571419 chr14 93924751 93924784 2571419 chr7 5535762 5535811 8647842 chr5 77116469 77116518 8647842 chr2 130937934 130937983 8647842 chr2 131737601 131737650 8647842 chr1 222119124 222119173 8647842 chr9 6824457 6824505 8647842 chr14 20429813 20429854 8647842 chr14 20494019 20494067 8647842 chr9 21068006 21068050 10848607 chr17 7520607 7520634 10942770 chr1 67925041 67925068 10942770 chr17 73695040 73695086 9374541 chr11 2139936 2139969 7639703 chr1 184916221 184916248 12914528 chr4 175649783 175649813 12914529 chr4 175650944 175651026 12914529 chr4 175653284 175653325 12914529 chr4 175666422 175666513 12914529 chr4 175675714 175675787 12914529 chr4 175679674 175679704 12914529 chr4 175682129 175682169 12914529 chr1 167865992 167866032 7693674 chr8 57521753 57521785 2903436 chr3 188870904 188870949 2903436 chr14 74814951 74815007 2903436 chr22 38248080 38248109 10667576 chr6 31891276 31891343 3185540 chr14 23071809 23071877 1719379 chr16 71378561 71380251 1719379 chr16 71384654 71390115 1719379 chr16 71391426 71391530 1719379 chr16 71402974 71403440 1719379 chr16 71421178 71421262 1719379 chr16 71481130 71481364 1719379 chr16 71541868 71542365 1719379 chr16 71650002 71650035 1719379 chr8 77782582 77782774 1719379 chr8 77939156 77939199 1719379 chr15 32875131 32875172 3185542 chr6 31891249 31891297 7891680 chr6 160852090 160852152 8051057 chr6 161005297 161005359 8051057 chr6 161043164 161043237 8051057 chr6 161114847 161114920 8051057 chr2 87102506 87102536 8051057 chr2 87828662 87828698 8051057 chr2 106364916 106364971 8051057 chr19 48747326 48747708 16596326 chr3 49041757 49042120 9278455 chr8 128815945 128816007 2211718 chr10 75339385 75339416 9482739 chr10 75339385 75339418 10381567 chr2 113313571 113313625 7935442 chr6 31891219 31891298 2294402 chr6 31903415 31903493 2294402 chr11 117692798 117692833 9233811 chr1 148070779 148070820 8475055 chr1 148099373 148099414 8475055 chr2 10505825 10507350 1598217 chr6 31433068 31433100 11087747 chr1 55454213 55454275 2105456 chr15 41590465 41590493 12411430 chr5 131854277 131855640 7678055 chr11 303989 304023 7678055 chr1 27871381 27871462 7678055 chr17 77649441 77649508 10759542 chr11 100504116 100504150 1326555 chr17 35740996 35741025 1326555 chr3 25680704 25680732 12197834 chr3 197293365 197293455 2211668 chr1 16713403 16713597 2211668 chr1 16866066 16866259 2211668 chr1 16939368 16939545 2211668 chr1 17094832 17095009 2211668 chr1 142465000 142465030 2211668 chr1 144680988 144681018 2211668 chr1 145023125 145023155 2211668 chr1 145977989 145978019 2211668 chr1 146202147 146202177 2211668 chr1 146327614 146327644 2211668 chr1 147491060 147491090 2211668 chr10 75338916 75338950 9295342 chr2 1390804 1390838 1922026 chr17 29636805 29636846 11076795 chr17 39822516 39822558 9305885 chr19 47291338 47291924 1967834 chr11 119681053 119681704 1967834 chr1 165568332 165568397 1967834 chr1 165601332 165601380 1967834 chr1 165606040 165606075 1967834 chr1 165607798 165607887 1967834 chr1 165610012 165610157 1967834 chr1 165611902 165611983 1967834 chr1 165619741 165619800 1967834 chr1 165625445 165625623 1967834 chr1 165632144 165632288 1967834 chr1 165633851 165633994 1967834 chr1 165635118 165635173 1967834 chr1 165637310 165637397 1967834 chr1 165647830 165648975 1967834 chr1 165651372 165651799 1967834 chrX 146800430 146801657 9328468 chr5 137828677 137828706 10050673 chr11 5248169 5248250 8196619 chr7 97339597 97339755 8098842 chr8 47648439 47648477 8098842 chr11 116213772 116213811 2254327 chr22_random 13234 13273 2254327 chr2 136592146 136592180 9468539 chr8 31041348 31041376 9774636 chr6 36754236 36754267 10899165 chr10 80990399 80990429 8770068 chr10 81310344 81310374 8770068 chr7 100530837 100530867 14963043 chr7 100538831 100538860 14963043 chr7 100546037 100546066 14963043 chr7 100552573 100552602 14963043 chr1 228916450 228916637 9120024 chr14 69333741 69333779 11031103 chr12 102848231 102848267 7891720 chr9 127043547 127043582 7891720 chr19 10242283 10242711 11278281 chr7 27135513 27135556 1346761 chr7 27151871 27152020 1346761 chr7 27161182 27161337 1346761 chr12 52691282 52691317 1346761 chr12 52709750 52715423 1346761 chr17 44009179 44009226 1346761 chr17 44024627 44024671 1346761 chr17 44028843 44028890 1346761 chr17 44045683 44045736 1346761 chr2 176725736 176725784 1346761 chr13 27396544 27396591 1346761 chr11 5227819 5227865 8662744 chr11 5232743 5232789 8662744 chr2 85748902 85748942 8687389 chr11 69164859 69165095 11024050 chr15 42790870 42790904 11024050 chr1 151596550 151596591 12167632 chr12 111829065 111829297 2456211 chr11 32405320 32405350 9361007 chr4 123597348 123597378 8468470 chr9 124630642 124630672 10899582 chr17 6840198 6840229 9164849 chr11 67107743 67107826 9540834 chr12 111829115 111829152 2243138 chr11 303983 304028 2243138 chr15 42790852 42790899 2243138 chr1 27871371 27871421 2243138 chr14 66896772 66896808 8327497 chr8 128817143 128817192 2498322 chr4 74520898 74520930 12167706 chr1 151145504 151145545 11850802 chr3 197293419 197293452 12439744 chr5 1348961 1348990 10805720 chr6 32515575 32515609 9857002 chr12 66839927 66839961 9857002 chr15 32875086 32875160 1570331 chr19 46551777 46551809 1419910 chr14 74815178 74815210 1419910 chr2 37237626 37237664 9007065 chr17 59304592 59304709 2983311 chr17 59312779 59312896 2983311 chr17 59327489 59327606 2983311 chr17 59342175 59342291 2983311 chr17 59349754 59349997 2983311 chr20 33223226 33223554 12560236 chr11 2139185 2139263 8216223 chr6 32929568 32929603 8617938 chr1 227637706 227637741 7753622 chr6 32515533 32515582 1903200 chr6 32742549 32742590 1903200 chr21 43132720 43132757 9873055 chr21 45165275 45165326 9873055 chr9 112059027 112059075 11279008 chr5 142763772 142763812 1894621 chr3 25444698 25444727 12133007 chr17 7531624 7531657 11032029 chr19 10242220 10242349 7532665 chr11 101906778 101906820 10514384 chr2 15998066 15998098 9233765 chr1 100956789 100957652 11590177 chr19 45471155 45471341 11948187 chr19 45472647 45472677 11948187 chr3 30622936 30622975 9694866 chr19 48382519 48382548 9083102 chr11 118463733 118463762 9737995 chr1 202407711 202407751 9737995 chr6 32515525 32515556 10982343 chr15 88159423 88159454 9786929 chr11 63824992 63825022 16024613 chr11 63829031 63829062 16024613 chr21 42660037 42660066 16024613 chr10 75338939 75339417 9482740 chr11 5255941 5256828 6897566 chr20 42708280 42708453 1508212 chr2 21123156 21123191 1939218 chr20 47696917 47696945 15263012 chr6 12398430 12398463 8833653 chr7 5534741 5534772 15217903 chr22 14635979 14636009 15217903 chr2 130548917 130548947 15217903 chr2 130937489 130937519 15217903 chr2 131131259 131131289 15217903 chr2 131738065 131738095 15217903 chr15 42069176 42069206 15217903 chr14 18655264 18655294 15217903 chr14 19058341 19058371 15217903 chr11 18024442 18024482 9645961 chr14 74814929 74814993 7588632 chr16 31178723 31178757 9295357 chr1 151805759 151805864 9481475 chr12 4253265 4253295 11719506 chr11 123106706 123106844 12611910 chr2 217268556 217268956 11973331 chr17 59307441 59307479 14673137 chr17 59315189 59315228 14673137 chr17 59329988 59330029 14673137 chr17 59344718 59344758 14673137 chr17 59377579 59378017 14673137 chr17 45634045 45634202 7590335 chr14 22947834 22947866 8416951 chr17 40349935 40349985 1918004 chr4 74825037 74825076 2250017 chr12 52060149 52060190 12513689 chr11 46696387 46696487 1918008 chr14 93924741 93924782 1918008 chr12 51476289 51476355 7525574 chr6 32515512 32515556 2016543 chr8 56954440 56955182 1508184 chr6 27899785 27899820 8336726 chr6 27907345 27907380 8336726 chr9 21068000 21068044 1898993 chr14 22095175 22095205 8196665 chr7 5534741 5534772 16339564 chr22 14635979 14636009 16339564 chr2 130548917 130548947 16339564 chr2 130937489 130937519 16339564 chr2 131131259 131131289 16339564 chr2 131738065 131738095 16339564 chr15 42069176 42069206 16339564 chr14 18655264 18655294 16339564 chr14 19058341 19058371 16339564 chr5 132037275 132037307 1541828 chr17 37121994 37122111 2187875 chr17 45634909 45635219 8175678 chr1 938616 938651 7518927 chr1 89303581 89303611 7518927 chr1 89645724 89645754 7518927 chr1 120737546 120737587 7518927 chr1 147635797 147635838 7518927 chr1 148020753 148020792 7518927 chr14 74814955 74814988 8756667 chr1 119759218 119759250 9065466 chr4 89115427 89115840 15479859 chr12 6513463 6513878 2164673 chr4 72078086 72078236 14514691 chr11 5247784 5248022 2017165 chr17 38306149 38306188 14597389 chr17 59327755 59327785 8294429 chr2 210888128 210888286 3405213 chrX 47327469 47327515 11032844 chr12 46537651 46537683 15456860 chr12 46559131 46559163 15456860 chrX 47381397 47381456 8386592 chr6 18472236 18473222 8861962 chr5 98043411 98043638 8861962 chr2 118293735 118293797 8861962 chr2 118295287 118295330 8861962 chr2 118299492 118299589 8861962 chr2 118303368 118303415 8861962 chr11 129670570 129670813 8861962 chr10 92803202 92804189 8861962 chr15 57951590 57952578 8861962 chr14 68620263 68621288 8861962 chr17 4795691 4795723 7565752 chr11 2139122 2139152 12368292 chr5 131854463 131854496 9368052 chr17 7531791 7531822 9368052 chr1 94780074 94780113 9867853 chr10 6281227 6281257 15466858 chr10 6283878 6283906 15466858 chr12 20854814 20854844 12055601 chr1 3639475 3639508 12080043 chr11 5258553 5258587 7937919 chr15 32875013 32875470 2796988 chr11 5202389 5202423 1946439 chr22 37970960 37971036 8662647 chr4 74953829 74954108 7479086 chr4 75028915 75029081 7479086 chr4 75123136 75123400 7479086 chr4 75183645 75183902 7479086 chr1 205186279 205187034 9182878 chr2 8739418 8739559 14761970 chr15 48345223 48345254 10409643 chr19 46551981 46552060 11053476 chr15 48345249 48345309 16357063 chr12 48630222 48630839 9277587 chr4 123597345 123597384 7517940 chr14 22095239 22095269 7517940 chr5 142795001 142795489 15044598 chr10 8137502 8137861 1871134 chr10 8140273 8140733 1871134 chr10 8146027 8146107 1871134 chr10 8151498 8151561 1871134 chr10 8155748 8155994 1871134 chr3 129682555 129683405 1871134 chr14 21999512 21999547 1871134 chr14 22095233 22095269 1871134 chr7 107318886 107318916 1332063 chr7 73080030 73080095 10429948 chr6 152167451 152167479 15367686 chr13 71394396 71394424 4039788 chr17 31455514 31457004 1894635 chr17 31562759 31564270 1894635 chr17 31664325 31665836 1894635 chr17_random 1242288 1243799 1894635 chr11 56914779 56914815 10438731 chr2 182029787 182029822 8195215 chr10 6148030 6148063 10594041 chr6 32515522 32515566 1709740 chr6 33149491 33149520 1709740 chr1 27113297 27113401 14627819 chr19 47724401 47724778 8910434 chr5 137695409 137695439 9396797 chr4 74921135 74922824 7929219 chr4 75081443 75083546 7929219 chr14 74814952 74814992 1945851 chr3 46370268 46370476 9988701 chr3_random 648540 648748 9988701 chr19 44920681 44920916 8400237 chr6 31651256 31651286 8376940 chrX 114159733 114159767 12816724 chr8 128817589 128817629 2524830 chr5 43349214 43349642 9604010 chr8 11697452 11697753 9604010 chr10 90740302 90740383 10022897 chr5 137828633 137828672 10806199 chr14 101841353 101841385 15327990 chr10 44201420 44201453 15808852 chr11 14950630 14950660 8816445 chr9 21067978 21068014 2536920 chrX 37523961 37524023 9801155 chr16 4247188 4247551 7933101 chr19 34993942 34994211 11919196 chr2 119580525 119580552 8790425 chr15 71426296 71426323 8790425 chr4 68303208 68303255 12538612 chr4 68304321 68304355 12538612 chr5 131854471 131854502 8306959 chrX 47394499 47394719 9880555 chr2 104839654 104839708 1979677 chr1 38283895 38284447 1979677 chr19 11061106 11061136 12235180 chr2 201806431 201806506 12748179 chr2 234318980 234319013 12566446 chr2 234330338 234330368 12566446 chr19 46311999 46312030 15860659 chr6 31651199 31651239 8552071 chr4 68304321 68304356 10772899 chr16 31273884 31274003 8649405 chr14 79747955 79747985 10614643 chr5 131437179 131437349 2838738 chr11 5258553 5258587 9195958 chr5 131907199 131907240 9195954 chr4 123597347 123597383 9195954 chr5 112101285 112101326 16150893 chr2 127768229 127768259 1741247 chr10 17310524 17310564 2922288 chr19 3559877 3559949 8702673 chr19 2200271 2200331 10993829 chr11 5227694 5227882 7684493 chr11 5232618 5232806 7684493 chr11 102250957 102251015 11444842 chr10 31648169 31648227 8138542 chr10 31790066 31790113 8138542 chr10 31839605 31839721 8138542 chr10 31849359 31850420 8138542 chr10 31855839 31855881 8138542 chr1 116717289 116717322 8138542 chr21 43659942 43660006 8138542 chr6 37244967 37244997 10068671 chr10 6148027 6148065 10068671 chr10 6144519 6144547 2497520 chr7 100156090 100156279 2387842 chr7 142216838 142216875 1409722 chr18 58946946 58946974 12086670 chr17 7474036 7474067 9852068 chr20 31737398 31739058 7958836 chr8 59573682 59574907 10869351 chrX 37524131 37524171 10869351 chr6 32920138 32920168 9632673 chr9 21068004 21068033 12077266 chr6 32114038 32114072 2162843 chr17 29603571 29604369 8051410 chr17 29606270 29606521 8051410 chr12 6513783 6513814 11955624 chr1 167969972 167970010 10964678 chr11 67107756 67107830 8557630 chr7 45891666 45891703 8776721 chr6 87861614 87861646 12527202 chr5 153837897 153838113 12527202 chr12 52091275 52091305 15955096 chr3 132096089 132096297 15955096 chr3 132155382 132155411 15955096 chr12 66839960 66839994 8228802 chr14 22095220 22095259 2388624 chr6 22405282 22405315 2388622 chr6 22406504 22407281 2388622 chr10 90739750 90739790 10575005 chr6 12398422 12398453 2388628 chr6 43844936 43844975 11056166 chr6 153112337 153112383 11259431 chr14 21999392 21999642 2156339 chr4 55218755 55218801 9834219 chr11 117692798 117692831 9622621 chr4 111761803 111761837 9685346 chr11 5225333 5225684 2050690 chr6 87861521 87861558 12177069 chr14 21999514 21999544 10767553 chr9 132310019 132310204 2005889 chr1 202432234 202432264 16260418 chr19 46551726 46551753 8702877 chr6 32713075 32713109 8530481 chr6 32817060 32817097 8530481 chr11 118463820 118463849 9168923 chr3 99795249 99795281 9168923 chr5 131437289 131437343 7636192 chr4 123597347 123597383 7636192 chr19 523492 523522 11814679 chr3 30622822 30623077 11205746 chr5 132037328 132037541 11687571 chr22 37970954 37971002 9300179 chr7 142216684 142216868 2144610 chr14 22095176 22095210 2144610 chr7 44071654 44071920 1328854 chr16 30391085 30391720 8097887 chr19 10242732 10242764 7972116 chr7 5534742 5534772 11359804 chr22 14635979 14636009 11359804 chr2 130548917 130548947 11359804 chr2 130937489 130937519 11359804 chr2 131131259 131131289 11359804 chr2 131738065 131738095 11359804 chr15 42069176 42069206 11359804 chr14 18655264 18655294 11359804 chr14 19058341 19058371 11359804 chr7 107997468 107997500 15882996 chr5 139706797 139706829 9360990 chr7 5533903 5533935 14623878 chr5 79631251 79631283 14623878 chr3 12087832 12087862 14623878 chr1 103914788 103914818 14623878 chr8 23016740 23016771 14623878 chr8 23105152 23105183 14623878 chr17 77092311 77092341 14623878 chr5 132037328 132037543 9845517 chr11 5205125 5205155 2587218 chr19 803196 803226 9689920 chr22_random 21341 21371 1900840 chr11 116205669 116205699 1900840 chr4 74488729 74488764 1900840 chr2 21120496 21120528 1900840 chr14 93924784 93924824 1900840 chr20 44771564 44771612 16051383 chr7 87068171 87068216 11350951 chr15 72805408 72805921 8382688 chr10 6144637 6144674 9417809 chr6 31650994 31651095 9293772 chr3 129682402 129682467 1370462 chr3 129687328 129687456 1370462 chr10 5228099 5228140 12220531 chr17 10501487 10501527 11971910 chr17 31441742 31441775 8474441 chr17 31548412 31548445 8474441 chr17 31649986 31650019 8474441 chr17_random 1227960 1227993 8474441 chr17_random 510636 510705 3601664 chr17_random 512128 512197 3601664 chr17_random 514841 514910 3601664 chr17_random 519730 519799 3601664 chr17_random 525878 525947 3601664 chr17_random 555819 555888 3601664 chr17_random 2608037 2608106 3601664 chr11 2139131 2139351 2186040 chr6 31891225 31891261 2824993 chr6 31903421 31903455 2824993 chr19 49838998 49839103 9880562 chr2 219526621 219526659 6091127 chr2 219991953 219992007 6091127 chr2 219993215 219994527 6091127 chr2 219998626 219999624 6091127 chr9 101108425 101108465 6091127 chrX 45376724 45376793 6091127 chr12 47977236 47977628 6091127 chr12 50925645 50925684 6091127 chr12 51108311 51108364 6091127 chr12 51127833 51127915 6091127 chr12 51149725 51149807 6091127 chr12 51168383 51168465 6091127 chr12 51196693 51196745 6091127 chr12 51248224 51248258 6091127 chr12 51267686 51267745 6091127 chr12 51290670 51290703 6091127 chr12 51326795 51326855 6091127 chr12 51372473 51372523 6091127 chr12 51451054 51451107 6091127 chr12 51471261 51471324 6091127 chr12 51487699 51487760 6091127 chr12 51503068 51503134 6091127 chr12 51519819 51519866 6091127 chr12 51578728 51578767 6091127 chr10 8595899 8595938 6091127 chr10 17317279 17317392 6091127 chr17 40344128 40344242 6091127 chr15 75058645 75058683 6091127 chr20 43316656 43316700 10498899 chr1 938620 938650 12055236 chr13 29938058 29938152 11245470 chr19 3413759 3413788 11245470 chr15 49418595 49420743 8132535 chr9 106730620 106730953 15528481 chr15 32834226 32834262 14565956 chr17 59303127 59303178 8370519 chr17 59311325 59311376 8370519 chr17 59326028 59326078 8370519 chr17 59340720 59340767 8370519 chr17 59348313 59348364 8370519 chr14 21999513 21999541 10359663 chr3 197023272 197023300 11418607 chr11 2136189 2136325 9013771 chr4 74825037 74825076 8035808 chr3 124822085 124822163 9142867 chr2 233880782 233881067 8321239 chr19 15869835 15869863 10860554 chr7 45894487 45894516 12011061 chr19 46551008 46551037 12011061 chr1 216584694 216585098 12011061 chr1 216586732 216586761 12011061 chr22 40856850 40856894 8810289 chr22 40870522 40870566 8810289 chr22 40881064 40881104 8810289 chr1 3596999 3597060 11909952 chr1 938623 938655 3476954 chr2 86866999 86867277 8413295 chr11 69165071 69165101 8196642 chr3 25444697 25444726 1657595 chr1 98159129 98159155 11072080 chrX 48771250 48772496 2338243 chrX 48774414 48774496 2338243 chrX 48778663 48778710 2338243 chrX 48782531 48782585 2338243 chr11 118463734 118463763 2211589 chr2 127129933 127129963 2211589 chr7 5533904 5534773 14993214 chr5 79631252 79631282 14993214 chr5 131854471 131854502 14993214 chr3 12087833 12087862 14993214 chr2 130548917 130548948 14993214 chr2 130937489 130937520 14993214 chr2 131131258 131131289 14993214 chr2 131738064 131738095 14993214 chr2 201806407 201806452 14993214 chr1 103914789 103914818 14993214 chr22 14635979 14636010 14993214 chr15 42069176 42069206 14993214 chr14 18655263 18655294 14993214 chr14 19058341 19058372 14993214 chr17 77092311 77092340 14993214 chr8 128817488 128817516 7555706 chr11 100504990 100505108 14684847 chr19 50100731 50100772 11038359 chr11 73371478 73371508 10558866 chr4 39205934 39206031 16002992 chr9 130911609 130911651 10585862 chr9 130913432 130913464 10585862 chr22 21962546 21962884 8144670 chr21 42660037 42660066 14966289 chr12 52653727 52653757 9582375 chr4 123597151 123597181 9016343 chr11 71632648 71632702 11549713 chr9 127043487 127043556 1480470 chr10 6285226 6285271 10673355 chrX 47326669 47326715 11259407 chr8 128816012 128816041 8649373 chr8 128817628 128817676 8649373 chr20 42708337 42708374 9016677 chr7 5533942 5534628 15604281 chr6 89042357 89042389 15604281 chr5 77117519 77117549 15604281 chr3 177178012 177178044 15604281 chr2 130548326 130548356 15604281 chr2 130936898 130936928 15604281 chr2 131131850 131131880 15604281 chr2 131738656 131738686 15604281 chr2 132101239 132101269 15604281 chr1 27524804 27524836 15604281 chr9 6825508 6825538 15604281 chr11 1780732 1780764 15604281 chr22 14635388 14635418 15604281 chr14 18655855 18655885 15604281 chr14 19057750 19057780 15604281 chr18 58261272 58261304 15604281 chr14 105142547 105142618 8515067 chr14 105261333 105261401 8515067 chr14 21999511 21999542 2050118 chr6 32515517 32515589 9378978 chr7 139175314 139175364 11956185 chr7 55054191 55054238 3393529 chr5 137828926 137828975 8065330 chr7 100556400 100556570 12738229 chr8 128817555 128817620 2721961 chr12 90097176 90098190 8276854 chr7 55054206 55054237 12062800 chr8 28230632 28230749 12062800 chr19 2224334 2224407 9501877 chr1 68688176 68692149 9501877 chr9 21068005 21068035 15664995 chr4 123597329 123597379 7673240 chr1 154478086 154478119 10077002 chr1 148070712 148070740 3029724 chr1 148099453 148099481 3029724 chr3 166279008 166279036 11283019 chr12 54645489 54645518 12819038 chr7 5534469 5534499 10545204 chr17 37122023 37122063 2566164 chr4 123597212 123597383 1545787 chr14 22095239 22095319 1545787 chr2 127892037 127892602 7592627 chr1 120737547 120737589 8483949 chr1 147635795 147635837 8483949 chr1 148020751 148020792 8483949 chr6 31650908 31650946 10369255 chr11 5227822 5227863 2336386 chr11 5232746 5232787 2336386 chr4 109130501 109130558 9716664 chr4 109155033 109155063 9716664 chr4 109160211 109160247 9716664 chr4 109164121 109164158 9716664 chr4 109174854 109175558 9716664 chr10 17310515 17310544 7986748 chr17 59304826 59305028 3595566 chr17 59313055 59313213 3595566 chr17 59327723 59327925 3595566 chr17 59342380 59342606 3595566 chr17 59349960 59350263 3595566 chr16 67328704 67328733 16617148 chr7 87068135 87068286 8095499 chr11 2868568 2868621 12790805 chr17 8054645 8054674 15033491 chr19 7245592 7245654 8376587 chr16 31273920 31273960 9360988 chr7 26191772 26191800 10037736 chr17 42858367 42858395 10037736 chr4 159864008 159864049 11525247 chr11 117692801 117692831 8227043 chr5 137828633 137828733 16037570 chr14 105129372 105129408 10652350 chr14 105250343 105250379 10652350 chr2 151922249 151922282 8885246 chr13 27967303 27967353 8940064 chr14 94148352 94148401 9461605 chr1 206151284 206151338 10572091 chr17 59300847 59300883 8052268 chr17 59323741 59323775 8052268 chr17 59338489 59338525 8052268 chr2 10505924 10506001 9570735 chr2 127892443 127892602 9553065 chr19 46048242 46048291 15671201 chr5 132037322 132037358 12374808 chr11 5258547 5258578 2123346 chr14 36059170 36059310 10684967 chr13 31787485 31787523 10961992 chr11 116205662 116205692 8036173 chr22_random 21348 21378 8036173 chr6 26195613 26195650 15467009 chr1 205344108 205344140 10777590 chr1 170901753 170901782 10725705 chr6 336158 336488 16272311 chr17 7423622 7423653 16272311 chr19 59927683 59927724 16818466 chr19 59941630 59941780 16818466 chr19 59958151 59958244 16818466 chr19 59972979 59973072 16818466 chr19 59989483 59989576 16818466 chr19 60019574 60019743 16818466 chr19 60035838 60035989 16818466 chr19 60053550 60053700 16818466 chr19_random 150473 150514 16818466 chr19_random 164436 164586 16818466 chr19_random 181033 181126 16818466 chr19_random 212603 212772 16818466 chr19_random 229299 229392 16818466 chr19_random 240698 240791 16818466 chr19_random 257665 257758 16818466 chr19_random 273964 274114 16818466 chr19_random 290145 290295 16818466 chr2 42441468 42441499 9418891 chr8 110621515 110621547 9418891 chr6 160033827 160033861 8602839 chr5 132037484 132037518 1532661 chr21 42660090 42660131 10619353 chr7 143763141 143763174 11101876 chr16 10878363 10878396 11101876 chr6 87861615 87861644 7690722 chr11 5247661 5248033 7882983 chr21 45788563 45789001 15652157 chr10 90702792 90702824 9546431 chr2 1395338 1396616 2306241 chr6 32515523 32515555 15798210 chr12 28007916 28007970 11590145 chr12 28014206 28014257 11590145 chr11 127855335 127855387 11590145 chrX 134545609 134545664 11590145 chr21 39113467 39113522 11590145 chr19 50140986 50141031 9651383 chr19 11060975 11061028 8969230 chr11 61474296 61474475 14982938 chr13 27968203 27968239 9295307 chr7 100159368 100159403 9295307 chr6 43844939 43844973 9295307 chr11 14950483 14950770 1335241 chr19 5794123 5794155 16199102 chr1 151145503 151145560 9512462 chrX 133421460 133421557 8524221 chr12 55326299 55326340 9512469 chr7 148494900 148494944 11779858 chr7 148507369 148507398 11779858 chr6 152170740 152170769 11779858 chr4 123597348 123597380 7935406 chr22 20928907 20929221 11994467 chr5 131434252 131434284 10706706 chr4 123597155 123597265 10706706 chr2 69467758 69469928 15878746 chr15 72448909 72448940 8703023 chr4 155703459 155703510 8226773 chr11 14951375 14951415 1738589 chr1 53434579 53434614 12408750 chr16 29739213 29739242 16418217 chr8 37942249 37942857 11316759 chr6 87861601 87861689 7685765 chr4 123597348 123597379 9819402 chr6 31891134 31891163 8524643 chr11 5247819 5247851 8524643 chr7 5535953 5535982 3185543 chr1 227636540 227636569 3185543 chr14 74815995 74816043 11997340 chr11 5258375 5258749 1924329 chr14 74814950 74815009 1833404 chr16 55553246 55553307 8530390 chr14 22974975 22975043 1449500 chr1 148070779 148070957 9874597 chr1 148099236 148099414 9874597 chr16 55199808 55199836 2822255 chr16 29983412 29983440 14966291 chr20 30103721 30103934 9822652 chr12 19152055 19152167 1516833 chr19 19117402 19119608 1516833 chr19 19121034 19121241 1516833 chr19 19122486 19122569 1516833 chr19 19152494 19152573 1516833 chr19 19154381 19154494 1516833 chr19 19163889 19163921 1516833 chr1 154718852 154719060 1516833 chr1 177683436 177684327 1516833 chr15 97956184 97956240 1516833 chr15 97990703 97990903 1516833 chr15 98003432 98003480 1516833 chr15 98029054 98029292 1516833 chr15 98032161 98032342 1516833 chr15 98047985 98048131 1516833 chr15 98064459 98064576 1516833 chr15 98068360 98068488 1516833 chr15 98070117 98071422 1516833 chr17 59349958 59349992 11890700 chr19 56049581 56049616 8626436 chrX 138440552 138440581 8626436 chr5 131437265 131437302 3257571 chr1 151145508 151145546 15790882 chr11 116205752 116205859 11839757 chr22_random 21181 21288 11839757 chr7 55054182 55054234 2847030 chr2 210861534 210861562 2243772 chr7 66438244 66438537 11714687 chr5 88155358 88155501 11714687 chr5 88235485 88235778 11714687 chr11 5258533 5258592 2116990 chr11 61942927 61942978 1711673 chr2 85748894 85748950 8065304 chr16 55259658 55259699 1903400 chr4 122964230 122964882 8202514 chr1 59022164 59022500 8355696 chr11 5258550 5258586 8355692 chr16 162862 163413 8355692 chr16 166666 167217 8355692 chr9 21792570 21792811 15535799 chr1 227636732 227637755 1318069 chr4 123597348 123597378 9065434 chr10 104144209 104144265 9528780 chr3 195336539 195336569 9528780 chr11 2139215 2139245 1915886 chr11 118463735 118463763 8265578 chr7 22733214 22733253 10657660 chr17 29606345 29606384 10657660 chr2 21119497 21119597 1545795 chr21 45786201 45786247 11078737 chr1 233095014 233095257 1870965 chr6 32549434 32549462 1903538 chr6 32665657 32665685 1903538 chr6 32742509 32742537 1903538 chr11 116199349 116199380 2020548 chr2 21120500 21120538 2020548 chr22_random 27653 27684 2020548 chr4 123597348 123597378 10816557 chr10 6144341 6144375 8642278 chr17 59304619 59305041 3018491 chr17 59312806 59313226 3018491 chr17 59327516 59327938 3018491 chr17 59342201 59342563 3018491 chr17 59349781 59350202 3018491 chr8 128818307 128818364 10085075 genometools-1.5.1/testdata/bed_files/gb-2008-9-2-r31-s2.gff3000066400000000000000000004641231211610345200225630ustar00rootroot00000000000000##gff-version 3 ##sequence-region chrX 1693988 153904229 ##sequence-region chr3_random 648541 648748 ##sequence-region chrY 1693988 26956687 ##sequence-region chr14 18654827 105399391 ##sequence-region chr15 32453091 98071466 ##sequence-region chr12 3499782 119900981 ##sequence-region chr13 19032153 112825091 ##sequence-region chr18 647736 72858327 ##sequence-region chr16_random 105103 105168 ##sequence-region chr19 523493 62043207 ##sequence-region chr16 103420 84509897 ##sequence-region chr17 4491642 77650042 ##sequence-region chr7_random 465930 466022 ##sequence-region chr10 5126490 135190285 ##sequence-region chr8_random 420977 426932 ##sequence-region chr11 303950 129670813 ##sequence-region chrX_random 1443981 1444483 ##sequence-region chrM 16413 16571 ##sequence-region chr7 525927 150317059 ##sequence-region chr8 11603761 145509161 ##sequence-region chr9 2611471 138991702 ##sequence-region chr17_random 492578 2614935 ##sequence-region chr3 4995941 197293473 ##sequence-region chr9_random 773108 774288 ##sequence-region chr4 5457317 189161743 ##sequence-region chr22_random 13235 30260 ##sequence-region chr5 1348021 176769177 ##sequence-region chr6 336159 170723871 ##sequence-region chr22 14635194 49363991 ##sequence-region chr21 26464852 46846730 ##sequence-region chr20 1090119 62342693 ##sequence-region chr1 938617 236157485 ##sequence-region chr2 1390689 234334518 ##sequence-region chr19_random 150474 290295 chr4 . BED_feature 74488437 74488469 . . . Name=2247076 chr20 . BED_feature 22978320 22978355 . . . Name=11257274 chr1 . BED_feature 227636540 227636698 . . . Name=2300053 chr5 . BED_feature 142760501 142760529 . . . Name=11463861 chr5 . BED_feature 142795077 142795171 . . . Name=11463861 chr11 . BED_feature 303986 304024 . . . Name=2123539 chr1 . BED_feature 27871384 27871421 . . . Name=2123539 chr5 . BED_feature 132037518 132037549 . . . Name=9686601 chr4 . BED_feature 123597349 123597378 . . . Name=9686601 chr9 . BED_feature 129656862 129656893 . . . Name=9845534 chr18 . BED_feature 72858093 72858121 . . . Name=7527040 chr1 . BED_feature 165754422 165754452 . . . Name=9510181 chr6 . BED_feature 36754361 36754400 . . . Name=10506225 chr9 . BED_feature 21067981 21068019 . . . Name=2037595 chr17 . BED_feature 35109679 35109708 . . . Name=9045619 chr11 . BED_feature 605678 605718 . . . Name=10924517 chr11 . BED_feature 32405321 32405350 . . . Name=10455131 chr5 . BED_feature 131434150 131434658 . . . Name=8460159 chr4 . BED_feature 123597349 123597379 . . . Name=8460159 chr14 . BED_feature 105142541 105142615 . . . Name=7635985 chr14 . BED_feature 105261327 105261401 . . . Name=7635985 chr18 . BED_feature 72858013 72858327 . . . Name=1696259 chr11 . BED_feature 5227819 5227864 . . . Name=2458563 chr11 . BED_feature 5232743 5232788 . . . Name=2458563 chr11 . BED_feature 605675 605722 . . . Name=11877397 chr16 . BED_feature 10897093 10897125 . . . Name=15247294 chr16 . BED_feature 10908372 10909110 . . . Name=15247294 chr16 . BED_feature 10880161 10880210 . . . Name=9491997 chr10 . BED_feature 75339286 75339336 . . . Name=8071349 chr7 . BED_feature 525970 526156 . . . Name=8415628 chr19 . BED_feature 59077687 59077730 . . . Name=2246272 chr17 . BED_feature 61729561 61729604 . . . Name=2246272 chr16 . BED_feature 23755127 23755170 . . . Name=2246272 chr4 . BED_feature 123597348 123597383 . . . Name=7624346 chr14 . BED_feature 24173352 24173382 . . . Name=7624346 chr20 . BED_feature 60962039 60962071 . . . Name=12923186 chr9 . BED_feature 21067973 21068006 . . . Name=2139895 chr17 . BED_feature 59307404 59307440 . . . Name=16239259 chr17 . BED_feature 59315150 59315190 . . . Name=16239259 chr17 . BED_feature 59329949 59329989 . . . Name=16239259 chr2 . BED_feature 162717073 162717294 . . . Name=15828872 chr8 . BED_feature 11697517 11697549 . . . Name=9092581 chr4 . BED_feature 68303661 68303689 . . . Name=12089350 chr2 . BED_feature 175741024 175741060 . . . Name=2145272 chr9 . BED_feature 127043487 127043516 . . . Name=9837962 chr6 . BED_feature 43247769 43247886 . . . Name=2009862 chr6 . BED_feature 43249561 43249830 . . . Name=2009862 chr6 . BED_feature 43251431 43251559 . . . Name=2009862 chr6 . BED_feature 43254025 43254103 . . . Name=2009862 chr22 . BED_feature 37970975 37971015 . . . Name=8662878 chrX . BED_feature 37524156 37524199 . . . Name=11781315 chr7 . BED_feature 99227487 99227522 . . . Name=12514743 chr3 . BED_feature 121018721 121018751 . . . Name=12514743 chr1 . BED_feature 198409939 198409967 . . . Name=12514743 chr9 . BED_feature 136358296 136358325 . . . Name=12514743 chr12 . BED_feature 119900952 119900981 . . . Name=12514743 chr20 . BED_feature 42491697 42491726 . . . Name=12514743 chr15 . BED_feature 49322677 49322730 . . . Name=8395654 chr11 . BED_feature 303986 304024 . . . Name=2919169 chr10 . BED_feature 62207741 62208380 . . . Name=8524257 chr3 . BED_feature 25444699 25444725 . . . Name=9886825 chr13 . BED_feature 93928761 93930546 . . . Name=7929451 chr3 . BED_feature 197293413 197293473 . . . Name=2519614 chr4 . BED_feature 84474936 84475267 . . . Name=11779847 chr2 . BED_feature 21173784 21173833 . . . Name=10859308 chr1 . BED_feature 148070787 148070817 . . . Name=2367528 chr1 . BED_feature 148099377 148099407 . . . Name=2367528 chr21 . BED_feature 26464852 26464881 . . . Name=8703038 chr7 . BED_feature 5535520 5535577 . . . Name=9847397 chr6 . BED_feature 46280791 46280829 . . . Name=9847397 chr6 . BED_feature 89043285 89043326 . . . Name=9847397 chr5 . BED_feature 77116586 77116627 . . . Name=9847397 chr5 . BED_feature 79634273 79634314 . . . Name=9847397 chr5 . BED_feature 97702460 97702501 . . . Name=9847397 chr3 . BED_feature 177178904 177178935 . . . Name=9847397 chr1 . BED_feature 222119016 222119057 . . . Name=9847397 chr9 . BED_feature 102533464 102533496 . . . Name=9847397 chrX . BED_feature 46033351 46033389 . . . Name=9847397 chr22 . BED_feature 39801029 39801062 . . . Name=9847397 chr15 . BED_feature 42069512 42069553 . . . Name=9847397 chr18 . BED_feature 58260341 58260379 . . . Name=9847397 chr11 . BED_feature 5204935 5204965 . . . Name=8663270 chr6 . BED_feature 31891182 31891213 . . . Name=1696723 chr6 . BED_feature 31903378 31903409 . . . Name=1696723 chr5 . BED_feature 149772538 149772621 . . . Name=1899864 chr6 . BED_feature 87861687 87861724 . . . Name=2476438 chr6 . BED_feature 32515519 32515547 . . . Name=8756625 chr11 . BED_feature 2139273 2139305 . . . Name=8832573 chr13 . BED_feature 27389426 27389468 . . . Name=11003654 chr14 . BED_feature 67360018 67360070 . . . Name=9878257 chr7 . BED_feature 24290261 24290290 . . . Name=8123590 chr4 . BED_feature 123597157 123597186 . . . Name=1712901 chr12 . BED_feature 23578125 23578724 . . . Name=1396566 chr12 . BED_feature 23580653 23580871 . . . Name=1396566 chr12 . BED_feature 23587411 23587586 . . . Name=1396566 chr12 . BED_feature 23590519 23590629 . . . Name=1396566 chr12 . BED_feature 23607458 23607599 . . . Name=1396566 chr12 . BED_feature 23619861 23620044 . . . Name=1396566 chr12 . BED_feature 23685012 23685100 . . . Name=1396566 chr11 . BED_feature 15967127 15967239 . . . Name=1396566 chr11 . BED_feature 117692802 117692831 . . . Name=1396566 chr1 . BED_feature 202359462 202360518 . . . Name=1396566 chr8 . BED_feature 88869624 88871029 . . . Name=1396566 chr14 . BED_feature 105142610 105142639 . . . Name=9317131 chr17 . BED_feature 45632665 45634784 . . . Name=3480516 chr12 . BED_feature 66839312 66839342 . . . Name=10227974 chr21 . BED_feature 44378028 44378057 . . . Name=12808467 chr12 . BED_feature 6517180 6517207 . . . Name=12933903 chr16 . BED_feature 10910502 10910529 . . . Name=12933903 chr16 . BED_feature 10917737 10917765 . . . Name=12933903 chr3 . BED_feature 46880059 46880137 . . . Name=1699944 chr14 . BED_feature 105142554 105142609 . . . Name=8759736 chr14 . BED_feature 105261340 105261401 . . . Name=8759736 chr11 . BED_feature 5203642 5204288 . . . Name=7499351 chr9 . BED_feature 106691207 106691258 . . . Name=11839742 chr9 . BED_feature 138991425 138991702 . . . Name=15743775 chr7 . BED_feature 91602081 91602142 . . . Name=12145339 chr17 . BED_feature 70254459 70255238 . . . Name=12145337 chr17 . BED_feature 70256546 70256588 . . . Name=12145337 chr7 . BED_feature 100159374 100159407 . . . Name=8387214 chr12 . BED_feature 108038832 108038863 . . . Name=11076940 chr12 . BED_feature 108053505 108053612 . . . Name=11076940 chr11 . BED_feature 116213732 116213811 . . . Name=8626539 chr22_random . BED_feature 13235 13314 . . . Name=8626539 chr7 . BED_feature 27140155 27140183 . . . Name=8759021 chr16 . BED_feature 55199808 55199838 . . . Name=8759021 chr17 . BED_feature 53714114 53714143 . . . Name=9287329 chr11 . BED_feature 118463822 118463852 . . . Name=8408012 chr5 . BED_feature 131907151 131907240 . . . Name=15826950 chr5 . BED_feature 132043303 132043331 . . . Name=15826950 chr6 . BED_feature 32515526 32515555 . . . Name=7784170 chr17 . BED_feature 31441613 31441885 . . . Name=8355682 chr17 . BED_feature 31548286 31548549 . . . Name=8355682 chr17 . BED_feature 31649860 31650123 . . . Name=8355682 chr17_random . BED_feature 1227834 1228097 . . . Name=8355682 chr19 . BED_feature 34994862 34995325 . . . Name=8618861 chr2 . BED_feature 169927261 169927288 . . . Name=10799495 chr11 . BED_feature 5204937 5204966 . . . Name=9642249 chr11 . BED_feature 5227737 5227791 . . . Name=9642249 chr11 . BED_feature 5232661 5232715 . . . Name=9642249 chr11 . BED_feature 5247820 5247853 . . . Name=9642249 chr16 . BED_feature 142779 142810 . . . Name=9642249 chr16 . BED_feature 152991 153022 . . . Name=9642249 chr5 . BED_feature 142673759 142673832 . . . Name=3037703 chr4 . BED_feature 149219375 149222100 . . . Name=3037703 chr4 . BED_feature 149254705 149254867 . . . Name=3037703 chr4 . BED_feature 149260759 149260877 . . . Name=3037703 chr4 . BED_feature 149293070 149293211 . . . Name=3037703 chr4 . BED_feature 149295151 149295504 . . . Name=3037703 chr4 . BED_feature 149335347 149335465 . . . Name=3037703 chr4 . BED_feature 149400579 149400721 . . . Name=3037703 chr4 . BED_feature 149575706 149577463 . . . Name=3037703 chr4 . BED_feature 149582761 149582973 . . . Name=3037703 chr13 . BED_feature 19032153 19032208 . . . Name=11986328 chr13 . BED_feature 20733667 20733722 . . . Name=11986328 chr11 . BED_feature 63839959 63840014 . . . Name=11986328 chr6 . BED_feature 160034413 160034809 . . . Name=11853549 chr6 . BED_feature 153113527 153113563 . . . Name=2320002 chr14 . BED_feature 74815207 74815246 . . . Name=2320002 chr17 . BED_feature 7531564 7531591 . . . Name=10348347 chr4 . BED_feature 74488730 74488763 . . . Name=2320004 chr1 . BED_feature 167341718 167341979 . . . Name=8392703 chr6 . BED_feature 87861634 87861665 . . . Name=1701437 chr14 . BED_feature 74814960 74815008 . . . Name=3004967 chr7 . BED_feature 5536805 5536857 . . . Name=7828546 chr3 . BED_feature 188870907 188870942 . . . Name=8645191 chr1 . BED_feature 202402287 202402322 . . . Name=8645191 chr19 . BED_feature 2200168 2200195 . . . Name=9774680 chr12 . BED_feature 51132126 51132488 . . . Name=2438131 chr12 . BED_feature 51153785 51154148 . . . Name=2438131 chr12 . BED_feature 51173236 51173600 . . . Name=2438131 chr12 . BED_feature 51476141 51476239 . . . Name=2438131 chr17 . BED_feature 36232360 36232424 . . . Name=2438131 chr11 . BED_feature 5204985 5205048 . . . Name=11756191 chr11 . BED_feature 5258556 5258590 . . . Name=11756191 chr12 . BED_feature 54713254 54713285 . . . Name=10978333 chr12 . BED_feature 111829115 111829157 . . . Name=2174873 chr11 . BED_feature 303989 304018 . . . Name=2174873 chr15 . BED_feature 42790854 42790900 . . . Name=2174873 chr11 . BED_feature 100505080 100505108 . . . Name=15084343 chr6 . BED_feature 31651126 31651176 . . . Name=12560487 chr11 . BED_feature 5262447 5262488 . . . Name=3879975 chrX . BED_feature 55670008 55670049 . . . Name=1946405 chr14 . BED_feature 99813796 99813826 . . . Name=1946405 chr7 . BED_feature 22733174 22733209 . . . Name=8207232 chr4 . BED_feature 74825044 74825086 . . . Name=8207232 chr17 . BED_feature 35425016 35425052 . . . Name=8207232 chr1 . BED_feature 159760612 159760647 . . . Name=3198647 chr1 . BED_feature 159842261 159842296 . . . Name=3198647 chr19 . BED_feature 7245410 7246142 . . . Name=1324934 chr6 . BED_feature 36752202 36753120 . . . Name=12640112 chr1 . BED_feature 27060397 27060437 . . . Name=12640112 chr16 . BED_feature 68973089 68973120 . . . Name=9473501 chr16 . BED_feature 68989908 68989937 . . . Name=9473501 chr14 . BED_feature 22974964 22975026 . . . Name=1577822 chr9 . BED_feature 21067983 21068040 . . . Name=1532252 chr5 . BED_feature 132019686 132021821 . . . Name=8605348 chr5 . BED_feature 132200101 132200211 . . . Name=8605348 chr11 . BED_feature 5227731 5227785 . . . Name=7914370 chr11 . BED_feature 5232655 5232709 . . . Name=7914370 chrX . BED_feature 37524149 37524181 . . . Name=7914370 chrX . BED_feature 24621890 24621954 . . . Name=15615704 chr11 . BED_feature 5227722 5227997 . . . Name=2734104 chr11 . BED_feature 5232646 5232925 . . . Name=2734104 chr10 . BED_feature 72033577 72033645 . . . Name=10072525 chr16 . BED_feature 55199886 55199917 . . . Name=2494701 chr15 . BED_feature 72826155 72826254 . . . Name=8120057 chr17 . BED_feature 38820334 38820372 . . . Name=2349089 chr3 . BED_feature 73242765 73242823 . . . Name=2349089 chr17_random . BED_feature 492578 492638 . . . Name=2349089 chr17_random . BED_feature 494191 494241 . . . Name=2349089 chr17_random . BED_feature 510843 510904 . . . Name=2349089 chr17_random . BED_feature 512335 512396 . . . Name=2349089 chr17_random . BED_feature 514637 514697 . . . Name=2349089 chr17_random . BED_feature 519526 519586 . . . Name=2349089 chr17_random . BED_feature 525674 525734 . . . Name=2349089 chr17_random . BED_feature 527779 527840 . . . Name=2349089 chr17_random . BED_feature 556026 556087 . . . Name=2349089 chr17_random . BED_feature 2607833 2607893 . . . Name=2349089 chr17_random . BED_feature 2614874 2614935 . . . Name=2349089 chr15 . BED_feature 65919438 65919514 . . . Name=2349089 chr1 . BED_feature 67925701 67925730 . . . Name=11090615 chr3 . BED_feature 185578716 185578748 . . . Name=11790771 chr20 . BED_feature 54400823 54400851 . . . Name=11790771 chr11 . BED_feature 100505080 100505190 . . . Name=10894148 chr16 . BED_feature 10878405 10878701 . . . Name=11777970 chr6 . BED_feature 121798622 121798697 . . . Name=12644583 chr5 . BED_feature 108416078 108416125 . . . Name=12644583 chr1 . BED_feature 205186358 205186544 . . . Name=14644095 chr11 . BED_feature 116213545 116213694 . . . Name=1846669 chr22_random . BED_feature 13279 13501 . . . Name=1846669 chr6 . BED_feature 87861642 87861711 . . . Name=2828923 chr6 . BED_feature 87861739 87861778 . . . Name=12193378 chr7 . BED_feature 45894487 45894517 . . . Name=7688722 chr19 . BED_feature 54351001 54351029 . . . Name=15082771 chr17 . BED_feature 71229146 71229180 . . . Name=9837976 chr1 . BED_feature 185064112 185064783 . . . Name=7800505 chr1 . BED_feature 185090039 185090099 . . . Name=7800505 chr12 . BED_feature 46798803 46799458 . . . Name=7800504 chr4 . BED_feature 74825038 74825086 . . . Name=10928981 chr17 . BED_feature 31231573 31231601 . . . Name=10928981 chr2 . BED_feature 85969657 85969692 . . . Name=14644416 chr1 . BED_feature 89303546 89303575 . . . Name=1729591 chr7 . BED_feature 150316901 150317059 . . . Name=11013235 chr3 . BED_feature 170965507 170965616 . . . Name=12586348 chr19 . BED_feature 46551329 46551628 . . . Name=2808430 chr12 . BED_feature 51782658 51782690 . . . Name=15961790 chr19 . BED_feature 16298812 16298842 . . . Name=11750135 chr10 . BED_feature 5126490 5126539 . . . Name=15814298 chr16 . BED_feature 31632045 31632077 . . . Name=15814297 chr16 . BED_feature 31792541 31792792 . . . Name=15814297 chr1 . BED_feature 89303575 89303611 . . . Name=1901265 chr1 . BED_feature 89645725 89645761 . . . Name=1901265 chr15 . BED_feature 88150901 88151079 . . . Name=1680856 chr5 . BED_feature 131907212 131907240 . . . Name=11152655 chr10 . BED_feature 17310282 17310756 . . . Name=8654956 chr16 . BED_feature 54247449 54248013 . . . Name=11333263 chr14 . BED_feature 72672978 72673010 . . . Name=10446206 chr12 . BED_feature 50731409 50731459 . . . Name=10567637 chr9 . BED_feature 134927114 134927158 . . . Name=11945176 chr9 . BED_feature 134947672 134947716 . . . Name=11945176 chr7 . BED_feature 106472227 106472261 . . . Name=9175634 chr19 . BED_feature 54219615 54219649 . . . Name=9175634 chr19 . BED_feature 54226282 54226316 . . . Name=9175634 chr19 . BED_feature 54232641 54232675 . . . Name=9175634 chr19 . BED_feature 54238669 54238703 . . . Name=9175634 chr19 . BED_feature 54244383 54244417 . . . Name=9175634 chr19 . BED_feature 54251020 54251054 . . . Name=9175634 chr8 . BED_feature 128817317 128817344 . . . Name=2690070 chr7 . BED_feature 21434867 21436872 . . . Name=1454515 chr7 . BED_feature 21483235 21483345 . . . Name=1454515 chr7 . BED_feature 21488166 21488261 . . . Name=1454515 chr7 . BED_feature 21517248 21517549 . . . Name=1454515 chr13 . BED_feature 88810291 88812937 . . . Name=1454515 chr2 . BED_feature 174481586 174483182 . . . Name=1454515 chr2 . BED_feature 174486195 174486242 . . . Name=1454515 chr2 . BED_feature 174491581 174491751 . . . Name=1454515 chr2 . BED_feature 174527988 174529207 . . . Name=1454515 chrX . BED_feature 55074224 55074271 . . . Name=9334239 chr21 . BED_feature 26464986 26465014 . . . Name=1380960 chr12 . BED_feature 66839980 66840016 . . . Name=8756632 chr11 . BED_feature 116205061 116205698 . . . Name=9295296 chr22_random . BED_feature 21343 21981 . . . Name=9295296 chr5 . BED_feature 131423936 131423974 . . . Name=8611694 chr16 . BED_feature 55199809 55199838 . . . Name=9171103 chr10 . BED_feature 112826539 112826790 . . . Name=9249478 chr11 . BED_feature 116204977 116205835 . . . Name=2834395 chr22_random . BED_feature 21206 22065 . . . Name=2834395 chr10 . BED_feature 17311048 17311087 . . . Name=2293664 chr11 . BED_feature 525486 525798 . . . Name=3012774 chr2 . BED_feature 136592479 136592507 . . . Name=10229837 chr3 . BED_feature 120761102 120761701 . . . Name=8906820 chr5 . BED_feature 159778571 159778599 . . . Name=15016801 chr5 . BED_feature 159780262 159781293 . . . Name=15016801 chr11 . BED_feature 124999010 124999038 . . . Name=15016801 chr11 . BED_feature 125000253 125000620 . . . Name=15016801 chr6 . BED_feature 29798935 29798987 . . . Name=8657576 chr6 . BED_feature 29867705 29867764 . . . Name=8657576 chr6 . BED_feature 29903337 29903396 . . . Name=8657576 chr6 . BED_feature 29963227 29963279 . . . Name=8657576 chr6 . BED_feature 30001931 30001990 . . . Name=8657576 chr6 . BED_feature 30018026 30018078 . . . Name=8657576 chr6 . BED_feature 30082070 30082121 . . . Name=8657576 chr6 . BED_feature 30335107 30335147 . . . Name=8657576 chr4 . BED_feature 74825006 74825052 . . . Name=8175759 chr6 . BED_feature 32742394 32742649 . . . Name=8315353 chr11 . BED_feature 118463735 118463763 . . . Name=2771941 chr7 . BED_feature 45930678 45930706 . . . Name=14963110 chr14 . BED_feature 94117291 94117597 . . . Name=9601089 chr11 . BED_feature 61942944 61942994 . . . Name=9468485 chr17 . BED_feature 35727182 35727965 . . . Name=15831516 chr17 . BED_feature 35732150 35732743 . . . Name=15831516 chr6 . BED_feature 30565087 30565123 . . . Name=8702722 chr10 . BED_feature 91051674 91051709 . . . Name=8702722 chr4 . BED_feature 74825042 74825071 . . . Name=8413306 chr1 . BED_feature 27060401 27060434 . . . Name=9659898 chr17 . BED_feature 59304832 59304865 . . . Name=16517055 chr17 . BED_feature 59327729 59327762 . . . Name=16517055 chr17 . BED_feature 59342413 59342446 . . . Name=16517055 chr17 . BED_feature 59349993 59350026 . . . Name=16517055 chr14 . BED_feature 74814955 74815007 . . . Name=1639071 chr3 . BED_feature 70068144 70068181 . . . Name=10938265 chr3 . BED_feature 134947298 134947876 . . . Name=2495523 chr14 . BED_feature 93924792 93924822 . . . Name=2495523 chr6 . BED_feature 32742366 32742936 . . . Name=1985121 chr6 . BED_feature 32839241 32839653 . . . Name=1985121 chr8 . BED_feature 42184274 42184463 . . . Name=9016559 chr17 . BED_feature 35740996 35741053 . . . Name=7479078 chr9 . BED_feature 136448823 136448877 . . . Name=7479078 chr15 . BED_feature 94678307 94678373 . . . Name=7479078 chr20 . BED_feature 61844191 61844300 . . . Name=14625278 chr8 . BED_feature 28270142 28270216 . . . Name=14625278 chr8 . BED_feature 28273132 28273207 . . . Name=14625278 chr8 . BED_feature 28274488 28274561 . . . Name=14625278 chr1 . BED_feature 167969984 167970010 . . . Name=7518452 chr3 . BED_feature 123384313 123384360 . . . Name=12036954 chr3 . BED_feature 123385624 123385674 . . . Name=12036954 chr14 . BED_feature 74814934 74814994 . . . Name=3029776 chr7 . BED_feature 45894487 45894515 . . . Name=9261184 chr17 . BED_feature 77650008 77650042 . . . Name=9261184 chr3 . BED_feature 188042775 188043233 . . . Name=15850785 chr11 . BED_feature 116213542 116213703 . . . Name=11714848 chr22_random . BED_feature 13343 13504 . . . Name=11714848 chr6 . BED_feature 31891190 31891235 . . . Name=2342471 chr6 . BED_feature 31903386 31903431 . . . Name=2342471 chr22 . BED_feature 17200932 17200972 . . . Name=16107498 chr22 . BED_feature 19826897 19826937 . . . Name=16107498 chr22 . BED_feature 19952173 19952213 . . . Name=16107498 chr2 . BED_feature 11523693 11523952 . . . Name=16107498 chr18 . BED_feature 27425728 27425757 . . . Name=2019605 chr2 . BED_feature 21119526 21119763 . . . Name=2019605 chr12 . BED_feature 6925720 6926152 . . . Name=11376946 chr1 . BED_feature 157951088 157951128 . . . Name=8621622 chr10 . BED_feature 5228100 5228140 . . . Name=11284743 chr19 . BED_feature 6671575 6671793 . . . Name=2247055 chr6 . BED_feature 43247373 43247404 . . . Name=2200737 chr6 . BED_feature 32515518 32515570 . . . Name=11046010 chr6 . BED_feature 33016714 33016744 . . . Name=11046010 chr5 . BED_feature 32747447 32747507 . . . Name=7641319 chr2 . BED_feature 70634549 70634607 . . . Name=9162057 chr9 . BED_feature 21067985 21068015 . . . Name=9199299 chr17 . BED_feature 31231513 31231552 . . . Name=10023774 chr12 . BED_feature 67488871 67488913 . . . Name=9233781 chr6 . BED_feature 36752112 36753033 . . . Name=9233781 chr3 . BED_feature 130730026 130730054 . . . Name=9579468 chrX . BED_feature 153059392 153059427 . . . Name=9579468 chrX . BED_feature 153062721 153062935 . . . Name=9579468 chrX . BED_feature 153101129 153101363 . . . Name=9579468 chrX . BED_feature 153138247 153138481 . . . Name=9579468 chr7 . BED_feature 47058919 47058999 . . . Name=1465383 chr11 . BED_feature 94410405 94410505 . . . Name=1465383 chr11 . BED_feature 94440042 94440142 . . . Name=1465383 chr17 . BED_feature 72244734 72246053 . . . Name=1465383 chrX . BED_feature 34315778 34315833 . . . Name=1465383 chr13 . BED_feature 109236952 109236995 . . . Name=15048126 chr7 . BED_feature 27114668 27114704 . . . Name=8264592 chr7 . BED_feature 27135538 27135602 . . . Name=8264592 chr7 . BED_feature 27151890 27151957 . . . Name=8264592 chr7 . BED_feature 27161207 27161280 . . . Name=8264592 chr12 . BED_feature 52709804 52709877 . . . Name=8264592 chr17 . BED_feature 44009204 44009259 . . . Name=8264592 chr17 . BED_feature 44024649 44024710 . . . Name=8264592 chr17 . BED_feature 44028862 44028923 . . . Name=8264592 chr17 . BED_feature 44040297 44040358 . . . Name=8264592 chr2 . BED_feature 176725731 176725759 . . . Name=8264592 chr22 . BED_feature 37970975 37971013 . . . Name=9341193 chr2 . BED_feature 219354986 219355021 . . . Name=11867220 chr4 . BED_feature 123597349 123597378 . . . Name=2123468 chr4 . BED_feature 123597329 123597356 . . . Name=2204815 chr16 . BED_feature 31346876 31346956 . . . Name=7687470 chr16 . BED_feature 31348752 31348842 . . . Name=7687470 chr15 . BED_feature 32875078 32875112 . . . Name=2123467 chr16 . BED_feature 4247193 4248251 . . . Name=2123466 chr16 . BED_feature 4250105 4250595 . . . Name=2123466 chr16 . BED_feature 4251850 4252702 . . . Name=2123466 chr16 . BED_feature 4262660 4262695 . . . Name=2123466 chr6 . BED_feature 32260152 32260185 . . . Name=10829018 chr11 . BED_feature 5227716 5227760 . . . Name=1698280 chr11 . BED_feature 5232640 5232684 . . . Name=1698280 chr14 . BED_feature 22095168 22095265 . . . Name=7774816 chr6 . BED_feature 31891188 31891281 . . . Name=3031671 chr6 . BED_feature 31903381 31903455 . . . Name=3031671 chr12 . BED_feature 12761488 12761533 . . . Name=10542271 chr12 . BED_feature 47864842 47865066 . . . Name=3839072 chr12 . BED_feature 47866620 47868999 . . . Name=3839072 chr12 . BED_feature 47949738 47949778 . . . Name=3839072 chr7 . BED_feature 55054353 55054388 . . . Name=2170982 chr6 . BED_feature 32515500 32515573 . . . Name=10072067 chr9 . BED_feature 135490837 135491305 . . . Name=7688735 chr16 . BED_feature 66202234 66203527 . . . Name=8246978 chr16 . BED_feature 66208147 66208278 . . . Name=8246978 chr16 . BED_feature 66212099 66212957 . . . Name=8246978 chr16 . BED_feature 66217958 66218120 . . . Name=8246978 chr16 . BED_feature 66219771 66220929 . . . Name=8246978 chr16 . BED_feature 66229229 66230572 . . . Name=8246978 chr6 . BED_feature 22395673 22395702 . . . Name=8015553 chr6 . BED_feature 22402676 22402707 . . . Name=8015553 chr6 . BED_feature 22405214 22405243 . . . Name=8015553 chr6 . BED_feature 22411662 22413974 . . . Name=8015553 chr1 . BED_feature 120737548 120737587 . . . Name=9144409 chr1 . BED_feature 147635798 147635837 . . . Name=9144409 chr1 . BED_feature 148020754 148020792 . . . Name=9144409 chr12 . BED_feature 111900548 111900584 . . . Name=9813254 chr6 . BED_feature 12120600 12120645 . . . Name=2106471 chr6 . BED_feature 12228135 12232523 . . . Name=2106471 chr6 . BED_feature 12269717 12270134 . . . Name=2106471 chr6 . BED_feature 12271632 12273113 . . . Name=2106471 chr5 . BED_feature 131434407 131434658 . . . Name=7891702 chr11 . BED_feature 102219597 102219626 . . . Name=7891702 chr20 . BED_feature 3013400 3013428 . . . Name=12403649 chr4 . BED_feature 74825045 74825072 . . . Name=12767906 chr11 . BED_feature 47372997 47373029 . . . Name=15767686 chr16 . BED_feature 54247463 54248144 . . . Name=9928902 chr12 . BED_feature 9159966 9160004 . . . Name=7507205 chr1 . BED_feature 147635802 147635841 . . . Name=7507205 chr5 . BED_feature 131854190 131854859 . . . Name=7507207 chr4 . BED_feature 185632678 185632974 . . . Name=7507207 chr4 . BED_feature 123597349 123597378 . . . Name=11994417 chr15 . BED_feature 32875133 32875161 . . . Name=3477800 chr17 . BED_feature 38306146 38306188 . . . Name=10960473 chr4 . BED_feature 123597349 123597378 . . . Name=8524297 chr11 . BED_feature 59612764 59612817 . . . Name=12697656 chr16 . BED_feature 28850732 28850764 . . . Name=12218128 chr4 . BED_feature 74824868 74824907 . . . Name=15085176 chr15 . BED_feature 89228611 89228713 . . . Name=8657143 chr12 . BED_feature 54408962 54409501 . . . Name=1599482 chr14 . BED_feature 21999475 21999519 . . . Name=1833636 chr1 . BED_feature 89303575 89303603 . . . Name=1833631 chr1 . BED_feature 89645733 89645761 . . . Name=1833631 chr12 . BED_feature 79625995 79626043 . . . Name=1659574 chr12 . BED_feature 79635309 79635379 . . . Name=1659574 chr11 . BED_feature 17698326 17698396 . . . Name=1659574 chr1 . BED_feature 201318970 201322888 . . . Name=1659574 chr18 . BED_feature 24010986 24011015 . . . Name=15541732 chr4 . BED_feature 122964729 122964757 . . . Name=7760822 chr8 . BED_feature 16094715 16094745 . . . Name=7760824 chrX . BED_feature 66681556 66683257 . . . Name=2911578 chrX . BED_feature 66779830 66779939 . . . Name=2911578 chrX . BED_feature 66822575 66822693 . . . Name=2911578 chrX . BED_feature 66848028 66848257 . . . Name=2911578 chrX . BED_feature 66854044 66854192 . . . Name=2911578 chrX . BED_feature 66858400 66860554 . . . Name=2911578 chr11 . BED_feature 13474103 13474459 . . . Name=1977134 chr6 . BED_feature 27899740 27899784 . . . Name=3071490 chr6 . BED_feature 27907382 27907426 . . . Name=3071490 chr11 . BED_feature 102174147 102174184 . . . Name=8139041 chr2 . BED_feature 70634955 70635030 . . . Name=10828826 chr4 . BED_feature 103737714 103737856 . . . Name=1992489 chr4 . BED_feature 103741087 103741160 . . . Name=1992489 chr4 . BED_feature 103746687 103747905 . . . Name=1992489 chr1 . BED_feature 205560907 205561732 . . . Name=7678027 chr3 . BED_feature 166279012 166279225 . . . Name=9806892 chr6 . BED_feature 31891182 31891213 . . . Name=1569208 chr6 . BED_feature 31903378 31903409 . . . Name=1569208 chr3 . BED_feature 129689435 129690224 . . . Name=8972903 chr3 . BED_feature 166279009 166279036 . . . Name=9822664 chr10 . BED_feature 91001600 91001893 . . . Name=9799798 chr14 . BED_feature 92458568 92459224 . . . Name=7588318 chr5 . BED_feature 131423977 131424006 . . . Name=1695008 chr9 . BED_feature 97121061 97121106 . . . Name=9063748 chr11 . BED_feature 303986 304024 . . . Name=1832217 chr12 . BED_feature 3499782 3499812 . . . Name=2531661 chr6 . BED_feature 31891188 31891393 . . . Name=1986252 chr6 . BED_feature 31903383 31903440 . . . Name=1986252 chr14 . BED_feature 105399326 105399391 . . . Name=1986254 chr6 . BED_feature 160309965 160310147 . . . Name=12857727 chr6 . BED_feature 170705396 170705476 . . . Name=2363050 chr6 . BED_feature 170707890 170708097 . . . Name=2363050 chr6 . BED_feature 170712801 170713246 . . . Name=2363050 chr6 . BED_feature 170715558 170715645 . . . Name=2363050 chr6 . BED_feature 170717929 170718022 . . . Name=2363050 chr6 . BED_feature 170720623 170720792 . . . Name=2363050 chr6 . BED_feature 170722420 170723871 . . . Name=2363050 chr14 . BED_feature 54950869 54950903 . . . Name=2363050 chr11 . BED_feature 117692799 117692830 . . . Name=1639073 chr14 . BED_feature 22095209 22095240 . . . Name=1639073 chr3 . BED_feature 134944266 134944298 . . . Name=1748690 chr3 . BED_feature 134947817 134947847 . . . Name=1748690 chr6 . BED_feature 138230058 138230159 . . . Name=1381359 chr16 . BED_feature 55199882 55199909 . . . Name=1530876 chr6 . BED_feature 32515534 32515560 . . . Name=8687468 chr19 . BED_feature 46188738 46188767 . . . Name=15563456 chr2 . BED_feature 234334490 234334518 . . . Name=15563456 chr1 . BED_feature 938621 938651 . . . Name=9268360 chr6 . BED_feature 36754381 36754494 . . . Name=9268365 chr19 . BED_feature 38484211 38484346 . . . Name=2112087 chr8 . BED_feature 48812543 48812632 . . . Name=2112087 chr20 . BED_feature 48240717 48242593 . . . Name=2112087 chr14 . BED_feature 22656648 22656739 . . . Name=2112087 chr6 . BED_feature 31891221 31891289 . . . Name=2474756 chr5 . BED_feature 172129549 172129577 . . . Name=12890671 chr2 . BED_feature 234191159 234191187 . . . Name=12847094 chr7 . BED_feature 142294893 142294922 . . . Name=16574738 chr7 . BED_feature 127668431 127668469 . . . Name=12215445 chr11 . BED_feature 67107745 67107808 . . . Name=8702826 chr12 . BED_feature 19152173 19152260 . . . Name=1748287 chr19 . BED_feature 19117379 19119601 . . . Name=1748287 chr19 . BED_feature 19152495 19152545 . . . Name=1748287 chr19 . BED_feature 19157849 19158743 . . . Name=1748287 chr1 . BED_feature 177683537 177684321 . . . Name=1748287 chr15 . BED_feature 97956157 97956201 . . . Name=1748287 chr15 . BED_feature 97990723 97990841 . . . Name=1748287 chr15 . BED_feature 98003400 98003474 . . . Name=1748287 chr15 . BED_feature 98029246 98029277 . . . Name=1748287 chr15 . BED_feature 98032121 98033187 . . . Name=1748287 chr15 . BED_feature 98048064 98048103 . . . Name=1748287 chr15 . BED_feature 98064480 98064564 . . . Name=1748287 chr15 . BED_feature 98068361 98068487 . . . Name=1748287 chr15 . BED_feature 98070118 98071466 . . . Name=1748287 chr17 . BED_feature 37121940 37121975 . . . Name=8294480 chr6 . BED_feature 137517884 137517936 . . . Name=11390454 chr6 . BED_feature 27208582 27208614 . . . Name=1535687 chr5 . BED_feature 131437266 131437302 . . . Name=2342464 chr4 . BED_feature 123597278 123597307 . . . Name=2342464 chr19 . BED_feature 46551798 46551827 . . . Name=8016096 chr8 . BED_feature 110168011 110168039 . . . Name=10208868 chr9 . BED_feature 127043480 127043510 . . . Name=11779464 chr21 . BED_feature 42513538 42513600 . . . Name=16024918 chr21 . BED_feature 42528060 42528089 . . . Name=16024918 chr17 . BED_feature 35827711 35828062 . . . Name=9126321 chr2 . BED_feature 232951134 232951342 . . . Name=8314767 chr2 . BED_feature 232979243 232979753 . . . Name=8314767 chr3 . BED_feature 10306897 10306926 . . . Name=15142980 chr2 . BED_feature 21120510 21120712 . . . Name=3165376 chr11 . BED_feature 5227732 5227785 . . . Name=3181130 chr11 . BED_feature 5232656 5232709 . . . Name=3181130 chr19 . BED_feature 11349768 11349839 . . . Name=11756159 chr8 . BED_feature 57521687 57521720 . . . Name=1372443 chr12 . BED_feature 119900661 119900690 . . . Name=7984419 chr11 . BED_feature 116199350 116199608 . . . Name=7984419 chr22_random . BED_feature 27426 27684 . . . Name=7984419 chr11 . BED_feature 14950714 14950744 . . . Name=7476962 chr7 . BED_feature 93861870 93861906 . . . Name=10201951 chr2 . BED_feature 127892442 127892602 . . . Name=10333497 chr11 . BED_feature 116213688 116213765 . . . Name=1904868 chr14 . BED_feature 93924788 93924824 . . . Name=1904868 chr2 . BED_feature 21120485 21120527 . . . Name=1904868 chr1 . BED_feature 159460923 159460951 . . . Name=1904868 chr22_random . BED_feature 13281 13358 . . . Name=1904868 chr1 . BED_feature 59022297 59022365 . . . Name=3142689 chr15 . BED_feature 94674719 94674917 . . . Name=8706939 chr16 . BED_feature 103420 103842 . . . Name=1569944 chr11 . BED_feature 116196774 116196809 . . . Name=15583007 chr11 . BED_feature 116199350 116199612 . . . Name=15583007 chr11 . BED_feature 116205090 116205118 . . . Name=15583007 chr22_random . BED_feature 21924 21952 . . . Name=15583007 chr22_random . BED_feature 27422 27684 . . . Name=15583007 chr22_random . BED_feature 30225 30260 . . . Name=15583007 chr19 . BED_feature 11061025 11061096 . . . Name=11250935 chr11 . BED_feature 71527655 71528440 . . . Name=8106441 chr11 . BED_feature 71547900 71547972 . . . Name=8106441 chr11 . BED_feature 71565459 71566624 . . . Name=8106441 chr11 . BED_feature 71584047 71584794 . . . Name=8106441 chr11 . BED_feature 71605409 71605616 . . . Name=8106441 chr11 . BED_feature 71607254 71607388 . . . Name=8106441 chr11 . BED_feature 71609562 71610614 . . . Name=8106441 chr11 . BED_feature 5227731 5227858 . . . Name=2468996 chr11 . BED_feature 5232655 5232782 . . . Name=2468996 chr15 . BED_feature 32875150 32875208 . . . Name=2823106 chr21 . BED_feature 45786705 45787763 . . . Name=15214842 chr21 . BED_feature 26465019 26465049 . . . Name=9407128 chr12 . BED_feature 119900661 119900689 . . . Name=8290348 chr11 . BED_feature 116213740 116213767 . . . Name=8290348 chr22_random . BED_feature 13279 13306 . . . Name=8290348 chr6 . BED_feature 43844939 43844970 . . . Name=15039136 chr20 . BED_feature 10596532 10596582 . . . Name=11641404 chr7 . BED_feature 5533905 5534772 . . . Name=11322928 chr5 . BED_feature 79631253 79631282 . . . Name=11322928 chr3 . BED_feature 12087834 12087862 . . . Name=11322928 chr2 . BED_feature 130548918 130548947 . . . Name=11322928 chr2 . BED_feature 130937490 130937519 . . . Name=11322928 chr2 . BED_feature 131131260 131131289 . . . Name=11322928 chr2 . BED_feature 131738066 131738095 . . . Name=11322928 chr1 . BED_feature 103914790 103914818 . . . Name=11322928 chr22 . BED_feature 14635980 14636009 . . . Name=11322928 chr15 . BED_feature 42069177 42069206 . . . Name=11322928 chr14 . BED_feature 18655265 18655294 . . . Name=11322928 chr14 . BED_feature 19058342 19058371 . . . Name=11322928 chr17 . BED_feature 77092312 77092340 . . . Name=11322928 chr4 . BED_feature 123597349 123597379 . . . Name=9837957 chr1 . BED_feature 202402194 202402324 . . . Name=15353176 chr6 . BED_feature 336165 336208 . . . Name=14581002 chr8 . BED_feature 128816875 128816903 . . . Name=11777933 chr16 . BED_feature 67328519 67328548 . . . Name=10706097 chr14 . BED_feature 19992505 19995822 . . . Name=8086453 chr9_random . BED_feature 773108 774288 . . . Name=8086450 chr9 . BED_feature 39644308 39645487 . . . Name=8086450 chr9 . BED_feature 41018838 41020018 . . . Name=8086450 chr9 . BED_feature 41789334 41790512 . . . Name=8086450 chr9 . BED_feature 43340025 43341196 . . . Name=8086450 chr9 . BED_feature 44498991 44500171 . . . Name=8086450 chr9 . BED_feature 46838064 46839243 . . . Name=8086450 chr9 . BED_feature 65798700 65799873 . . . Name=8086450 chr10 . BED_feature 104279415 104279451 . . . Name=8086450 chr16 . BED_feature 70596554 70597948 . . . Name=8086450 chr14 . BED_feature 62140707 62141943 . . . Name=8086450 chr18 . BED_feature 41917564 41922205 . . . Name=8086450 chr18 . BED_feature 41923390 41929342 . . . Name=8086450 chr18 . BED_feature 41930482 41933932 . . . Name=8086450 chr18 . BED_feature 41935210 41935246 . . . Name=8086450 chr2 . BED_feature 37237693 37237722 . . . Name=14645369 chr6 . BED_feature 6265904 6265990 . . . Name=10037697 chr6 . BED_feature 32929566 32929600 . . . Name=9858567 chr2 . BED_feature 21120493 21120712 . . . Name=1660892 chr6 . BED_feature 32742504 32742590 . . . Name=1923758 chr6 . BED_feature 32839379 32839415 . . . Name=1923758 chr16 . BED_feature 164053 164084 . . . Name=12854969 chr2 . BED_feature 97628465 97628508 . . . Name=8806766 chr10 . BED_feature 71914085 71915951 . . . Name=1309593 chr4 . BED_feature 91974735 91974917 . . . Name=1309593 chr4 . BED_feature 189161382 189161743 . . . Name=1309593 chrX . BED_feature 21785145 21785514 . . . Name=1309593 chrX . BED_feature 55669736 55670397 . . . Name=1309593 chr2 . BED_feature 139371721 139372908 . . . Name=1309593 chr14 . BED_feature 99775246 99776011 . . . Name=1309593 chr14 . BED_feature 99798413 99798553 . . . Name=1309593 chr14 . BED_feature 99810786 99810849 . . . Name=1309593 chr14 . BED_feature 99812580 99814652 . . . Name=1309593 chr15 . BED_feature 32874977 32875527 . . . Name=3785189 chr13 . BED_feature 79809669 79809698 . . . Name=14644509 chr13 . BED_feature 79814607 79814638 . . . Name=14644509 chr12 . BED_feature 51200533 51200570 . . . Name=10825196 chr17 . BED_feature 16666648 16666682 . . . Name=10825196 chr17 . BED_feature 16689984 16690041 . . . Name=10825196 chr17 . BED_feature 18270768 18270815 . . . Name=10825196 chr17 . BED_feature 18294132 18294166 . . . Name=10825196 chr17 . BED_feature 20338177 20338211 . . . Name=10825196 chr17 . BED_feature 20361514 20361571 . . . Name=10825196 chr17 . BED_feature 25922984 25923034 . . . Name=10825196 chr17 . BED_feature 36996729 36996763 . . . Name=10825196 chr17 . BED_feature 37034417 37034478 . . . Name=10825196 chr6 . BED_feature 87861544 87861856 . . . Name=2481230 chr6 . BED_feature 31661882 31662346 . . . Name=10944527 chr7 . BED_feature 55054197 55054236 . . . Name=2556218 chr5 . BED_feature 149446368 149446397 . . . Name=7969146 chr2 . BED_feature 216008982 216009553 . . . Name=2170405 chr11 . BED_feature 2139071 2139247 . . . Name=16461554 chr5 . BED_feature 1348021 1348063 . . . Name=9973199 chr11 . BED_feature 5258402 5258444 . . . Name=1631062 chr11 . BED_feature 5227737 5227790 . . . Name=11544252 chr11 . BED_feature 5232661 5232714 . . . Name=11544252 chr11 . BED_feature 5247816 5247860 . . . Name=11544252 chr11 . BED_feature 63831222 63831266 . . . Name=9058380 chr7 . BED_feature 99219889 99219918 . . . Name=9770465 chr2 . BED_feature 161932568 161932611 . . . Name=7769002 chr2 . BED_feature 161935936 161936003 . . . Name=7769002 chr6 . BED_feature 32076548 32076639 . . . Name=10608879 chr6 . BED_feature 32109286 32109377 . . . Name=10608879 chr13 . BED_feature 40431031 40431107 . . . Name=8493578 chr1 . BED_feature 170894475 170894506 . . . Name=9395475 chr1 . BED_feature 157951017 157951098 . . . Name=2154372 chr1 . BED_feature 1581884 1581918 . . . Name=15087126 chr1 . BED_feature 1647170 1647204 . . . Name=15087126 chr12 . BED_feature 66838835 66839000 . . . Name=8670419 chr12 . BED_feature 66840017 66840059 . . . Name=8670419 chr3 . BED_feature 87391881 87391910 . . . Name=9626142 chr1 . BED_feature 28375801 28375832 . . . Name=9058812 chr15 . BED_feature 49420185 49420218 . . . Name=7626451 chr1 . BED_feature 151240673 151240820 . . . Name=9889002 chr9 . BED_feature 116920286 116920338 . . . Name=15001984 chr12 . BED_feature 32723334 32723427 . . . Name=14741701 chr10 . BED_feature 91051673 91051706 . . . Name=2236065 chr15 . BED_feature 72447072 72447105 . . . Name=7798178 chr6 . BED_feature 39629678 39630762 . . . Name=7958925 chr16 . BED_feature 65783671 65784573 . . . Name=7958925 chr16 . BED_feature 65785802 65787410 . . . Name=7958925 chr16 . BED_feature 65789002 65789748 . . . Name=7958925 chr1 . BED_feature 117098409 117098438 . . . Name=7929376 chr4 . BED_feature 152240171 152240251 . . . Name=12463423 chr17 . BED_feature 39822368 39822995 . . . Name=7518432 chr14 . BED_feature 93924792 93924822 . . . Name=8621550 chr4 . BED_feature 185587189 185587218 . . . Name=1579446 chr5 . BED_feature 131424078 131424114 . . . Name=8704203 chr14 . BED_feature 105142430 105142467 . . . Name=9190940 chr14 . BED_feature 105261216 105261253 . . . Name=9190940 chr21 . BED_feature 29636785 29636815 . . . Name=11069897 chr14 . BED_feature 74815007 74815034 . . . Name=12242287 chr16 . BED_feature 55199698 55199932 . . . Name=3821726 chr11 . BED_feature 101896527 101896687 . . . Name=8294454 chr11 . BED_feature 67107756 67107796 . . . Name=8206948 chr10 . BED_feature 91051671 91051711 . . . Name=2342456 chr9 . BED_feature 21067980 21068020 . . . Name=2495183 chr19 . BED_feature 54226282 54226326 . . . Name=9182571 chr19 . BED_feature 54232631 54232675 . . . Name=9182571 chr19 . BED_feature 54238602 54238713 . . . Name=9182571 chr19 . BED_feature 54244373 54244417 . . . Name=9182571 chr19 . BED_feature 54251014 54251054 . . . Name=9182571 chr17 . BED_feature 7063969 7063998 . . . Name=10607478 chr16 . BED_feature 55199809 55199838 . . . Name=1852613 chr1 . BED_feature 100957807 100957835 . . . Name=7499419 chr5 . BED_feature 147996922 147996991 . . . Name=15575821 chr22_random . BED_feature 21652 21681 . . . Name=9322942 chr5 . BED_feature 149772578 149772830 . . . Name=8164652 chr3 . BED_feature 25444697 25444725 . . . Name=7931079 chr7 . BED_feature 30970034 30970097 . . . Name=10207037 chr2 . BED_feature 88926787 88926816 . . . Name=1406692 chr5 . BED_feature 158690174 158690202 . . . Name=9497375 chrY . BED_feature 1693988 1694161 . . . Name=7989373 chrX . BED_feature 1693988 1694161 . . . Name=7989373 chr19 . BED_feature 11061107 11061136 . . . Name=10671569 chr6 . BED_feature 22405251 22405369 . . . Name=12223489 chr7 . BED_feature 93861870 93861906 . . . Name=8621730 chr16 . BED_feature 31178719 31178865 . . . Name=8955212 chr11 . BED_feature 5662868 5663929 . . . Name=16289103 chrX . BED_feature 37524143 37524171 . . . Name=1885602 chr7 . BED_feature 5535923 5535983 . . . Name=3422098 chr20 . BED_feature 1922572 1922602 . . . Name=9819380 chr1 . BED_feature 938622 938650 . . . Name=2606351 chr7 . BED_feature 526009 526156 . . . Name=8349616 chr12 . BED_feature 47637374 47638624 . . . Name=8473323 chr9 . BED_feature 136468133 136468176 . . . Name=8264664 chr16 . BED_feature 66022179 66022739 . . . Name=11850421 chrX . BED_feature 37524202 37524230 . . . Name=12732216 chr13 . BED_feature 93930268 93930296 . . . Name=9447965 chr11 . BED_feature 116205089 116205118 . . . Name=9592157 chr22_random . BED_feature 21924 21953 . . . Name=9592157 chr12 . BED_feature 79625629 79626072 . . . Name=1374396 chr12 . BED_feature 79635308 79635380 . . . Name=1374396 chr11 . BED_feature 17698326 17698389 . . . Name=1374396 chr1 . BED_feature 201321306 201321383 . . . Name=1374396 chr16 . BED_feature 55199877 55199917 . . . Name=9155027 chr8 . BED_feature 59575398 59575425 . . . Name=10777541 chr5 . BED_feature 131424080 131424114 . . . Name=9036972 chr1 . BED_feature 154477844 154478070 . . . Name=8388544 chr11 . BED_feature 46934509 46934538 . . . Name=16227573 chr2 . BED_feature 183836534 183837362 . . . Name=16227573 chr1 . BED_feature 26626421 26627246 . . . Name=16227573 chr14 . BED_feature 74814934 74814987 . . . Name=14737107 chr2 . BED_feature 216008771 216009355 . . . Name=3031656 chr2 . BED_feature 174538114 174538172 . . . Name=16024108 chr3 . BED_feature 134947101 134947167 . . . Name=12459033 chr2 . BED_feature 113258582 113258611 . . . Name=15863387 chr22 . BED_feature 37970938 37971189 . . . Name=7961814 chr13 . BED_feature 47775840 47775880 . . . Name=8620463 chr14 . BED_feature 95791803 95791830 . . . Name=9553142 chr16 . BED_feature 10880178 10880281 . . . Name=10202014 chr3 . BED_feature 24511147 24511495 . . . Name=1339272 chr19 . BED_feature 11061067 11061095 . . . Name=10579331 chr17 . BED_feature 24099530 24099558 . . . Name=12788948 chr17 . BED_feature 4491642 4492686 . . . Name=10657944 chr19 . BED_feature 4767631 4767659 . . . Name=14960149 chr19 . BED_feature 4783038 4783067 . . . Name=14960149 chr5 . BED_feature 32747447 32747507 . . . Name=9492076 chr7 . BED_feature 5534641 5534680 . . . Name=8474178 chr5 . BED_feature 77117022 77117061 . . . Name=8474178 chr5 . BED_feature 79631782 79631821 . . . Name=8474178 chr5 . BED_feature 131023110 131023150 . . . Name=8474178 chr3 . BED_feature 12087296 12087335 . . . Name=8474178 chr2 . BED_feature 130937394 130937427 . . . Name=8474178 chr2 . BED_feature 131131352 131131385 . . . Name=8474178 chr2 . BED_feature 131738158 131738191 . . . Name=8474178 chr2 . BED_feature 132100741 132100774 . . . Name=8474178 chr1 . BED_feature 222118579 222118618 . . . Name=8474178 chr1 . BED_feature 236157319 236157357 . . . Name=8474178 chr9 . BED_feature 6825010 6825049 . . . Name=8474178 chr9 . BED_feature 102533895 102533933 . . . Name=8474178 chr17 . BED_feature 77093012 77093051 . . . Name=8474178 chr16 . BED_feature 48650095 48650134 . . . Name=8474178 chr15 . BED_feature 32453566 32453605 . . . Name=8474178 chr14 . BED_feature 18655357 18655390 . . . Name=8474178 chr14 . BED_feature 19058246 19058279 . . . Name=8474178 chr22 . BED_feature 14635884 14635917 . . . Name=8474178 chr22 . BED_feature 39800636 39800675 . . . Name=8474178 chr18 . BED_feature 58260786 58260822 . . . Name=8474178 chr7 . BED_feature 25129923 25129978 . . . Name=7926749 chr7 . BED_feature 120825889 120825961 . . . Name=7926749 chr7 . BED_feature 128544906 128544975 . . . Name=7926749 chr6 . BED_feature 34295354 34295435 . . . Name=7926749 chr6 . BED_feature 96058921 96059004 . . . Name=7926749 chr3 . BED_feature 10017417 10017489 . . . Name=7926749 chr3 . BED_feature 10074732 10074826 . . . Name=7926749 chr3 . BED_feature 11895378 11895465 . . . Name=7926749 chr2 . BED_feature 100353200 100353281 . . . Name=7926749 chr1 . BED_feature 149143141 149143224 . . . Name=7926749 chr1 . BED_feature 155364922 155365003 . . . Name=7926749 chr1 . BED_feature 200605366 200605448 . . . Name=7926749 chrY . BED_feature 15562899 15562993 . . . Name=7926749 chrY . BED_feature 26956594 26956687 . . . Name=7926749 chr9 . BED_feature 95840278 95840372 . . . Name=7926749 chrX . BED_feature 68621998 68622075 . . . Name=7926749 chrX . BED_feature 144065979 144066017 . . . Name=7926749 chrX . BED_feature 152760053 152760117 . . . Name=7926749 chr13 . BED_feature 23873008 23873066 . . . Name=7926749 chr13 . BED_feature 40335815 40335898 . . . Name=7926749 chr13 . BED_feature 98080025 98080108 . . . Name=7926749 chr11 . BED_feature 31258881 31258964 . . . Name=7926749 chr11 . BED_feature 57529576 57529654 . . . Name=7926749 chr11 . BED_feature 73871070 73871138 . . . Name=7926749 chr11 . BED_feature 82717816 82717863 . . . Name=7926749 chr11 . BED_feature 108198370 108198442 . . . Name=7926749 chr17 . BED_feature 72707003 72707073 . . . Name=7926749 chr16 . BED_feature 25373239 25373333 . . . Name=7926749 chr15 . BED_feature 39188498 39188575 . . . Name=7926749 chr15 . BED_feature 58576781 58577112 . . . Name=7926749 chr15 . BED_feature 58579383 58580562 . . . Name=7926749 chr15 . BED_feature 58582249 58583160 . . . Name=7926749 chr15 . BED_feature 58584999 58585071 . . . Name=7926749 chr15 . BED_feature 58590742 58591041 . . . Name=7926749 chr15 . BED_feature 58594186 58594250 . . . Name=7926749 chr15 . BED_feature 58636354 58636420 . . . Name=7926749 chr15 . BED_feature 58637714 58637804 . . . Name=7926749 chr15 . BED_feature 58706736 58706954 . . . Name=7926749 chr15 . BED_feature 59308662 59308794 . . . Name=7926749 chr14 . BED_feature 76169952 76170035 . . . Name=7926749 chr8 . BED_feature 33946699 33946793 . . . Name=7926749 chr8 . BED_feature 51837694 51837766 . . . Name=7926749 chr8 . BED_feature 120699678 120699737 . . . Name=7926749 chr6 . BED_feature 26140296 26140436 . . . Name=2928309 chr1 . BED_feature 148070694 148070855 . . . Name=2928309 chr1 . BED_feature 148099339 148099500 . . . Name=2928309 chr7 . BED_feature 87068235 87069157 . . . Name=7961962 chr1 . BED_feature 200246119 200246146 . . . Name=11313868 chr18 . BED_feature 59294966 59295073 . . . Name=10692390 chr4 . BED_feature 100493210 100493240 . . . Name=1320193 chr2 . BED_feature 85749241 85749301 . . . Name=10617585 chr14 . BED_feature 34943732 34944082 . . . Name=8262046 chr7 . BED_feature 81237248 81237276 . . . Name=11112425 chr7 . BED_feature 81238278 81238327 . . . Name=11112425 chr1 . BED_feature 120737496 120737587 . . . Name=8455606 chr1 . BED_feature 147635798 147635889 . . . Name=8455606 chr1 . BED_feature 148020754 148020845 . . . Name=8455606 chr1 . BED_feature 148070695 148070809 . . . Name=2768251 chr1 . BED_feature 148099385 148099499 . . . Name=2768251 chr5 . BED_feature 131434535 131434563 . . . Name=8809409 chr5 . BED_feature 131437306 131437364 . . . Name=8809409 chr4 . BED_feature 74516857 74516887 . . . Name=2708361 chr3 . BED_feature 134944275 134944309 . . . Name=2708361 chr3 . BED_feature 134947800 134947874 . . . Name=2708361 chr7 . BED_feature 526481 526592 . . . Name=8486717 chr7_random . BED_feature 465930 466022 . . . Name=8486717 chr16 . BED_feature 54068948 54068984 . . . Name=8610173 chr16 . BED_feature 55199808 55199838 . . . Name=8610173 chr21 . BED_feature 39099689 39099758 . . . Name=1888697 chr11 . BED_feature 2139240 2139277 . . . Name=10601637 chr6 . BED_feature 26216377 26216406 . . . Name=11098153 chr9 . BED_feature 124711246 124711796 . . . Name=7958847 chr9 . BED_feature 124712941 124714041 . . . Name=7958847 chr7 . BED_feature 27135537 27136313 . . . Name=1970866 chr12 . BED_feature 52734903 52734991 . . . Name=1970866 chr2 . BED_feature 176725584 176725760 . . . Name=1970866 chr9 . BED_feature 21067998 21068034 . . . Name=9446577 chr6 . BED_feature 31658167 31658338 . . . Name=8786306 chr9 . BED_feature 21067967 21068080 . . . Name=2910848 chr6 . BED_feature 87861654 87861691 . . . Name=2159633 chr3 . BED_feature 49701035 49701169 . . . Name=8702759 chr1 . BED_feature 16844626 16844760 . . . Name=8702759 chr13 . BED_feature 19033371 19033411 . . . Name=9865725 chr13 . BED_feature 20732461 20732501 . . . Name=9865725 chr11 . BED_feature 63831214 63831254 . . . Name=9865725 chr15 . BED_feature 49322620 49322769 . . . Name=9865725 chr19 . BED_feature 50100726 50100755 . . . Name=2188976 chr6 . BED_feature 153113528 153113559 . . . Name=2842787 chr2 . BED_feature 10505706 10505928 . . . Name=2318872 chr7 . BED_feature 525927 526035 . . . Name=1417865 chr9 . BED_feature 21067996 21068053 . . . Name=7523851 chr1 . BED_feature 167969927 167970000 . . . Name=7523851 chr18 . BED_feature 59138135 59138163 . . . Name=16186795 chr16 . BED_feature 29983393 29983480 . . . Name=7473711 chr11 . BED_feature 119683435 119683465 . . . Name=12624109 chr6 . BED_feature 32515375 32515574 . . . Name=2851727 chr7 . BED_feature 100556303 100557246 . . . Name=2840665 chr7 . BED_feature 100558392 100558421 . . . Name=2840665 chr12 . BED_feature 51001398 51001563 . . . Name=9811563 chr21 . BED_feature 42660052 42660105 . . . Name=12021387 chr12 . BED_feature 52063340 52063372 . . . Name=14593115 chr15 . BED_feature 49420188 49420228 . . . Name=9817601 chr6 . BED_feature 27208584 27208609 . . . Name=11566492 chr2 . BED_feature 175330621 175330648 . . . Name=8441631 chr5 . BED_feature 137695273 137695489 . . . Name=7828585 chr4 . BED_feature 122964348 122964726 . . . Name=7556094 chr1 . BED_feature 1580339 1580368 . . . Name=15656972 chr6 . BED_feature 35562269 35562336 . . . Name=1851669 chr11 . BED_feature 12652639 12653679 . . . Name=1851669 chr11 . BED_feature 12742301 12742560 . . . Name=1851669 chr11 . BED_feature 12840372 12840433 . . . Name=1851669 chr11 . BED_feature 12842960 12843020 . . . Name=1851669 chr11 . BED_feature 12857829 12857965 . . . Name=1851669 chr11 . BED_feature 12859127 12860081 . . . Name=1851669 chr11 . BED_feature 12861121 12861248 . . . Name=1851669 chr11 . BED_feature 12880062 12880237 . . . Name=1851669 chr11 . BED_feature 12903034 12903175 . . . Name=1851669 chr11 . BED_feature 12908295 12908451 . . . Name=1851669 chr11 . BED_feature 12915231 12917454 . . . Name=1851669 chr11 . BED_feature 125553435 125554765 . . . Name=1851669 chr3 . BED_feature 46186796 46186935 . . . Name=1851669 chr19 . BED_feature 54554960 54555027 . . . Name=1851669 chr7 . BED_feature 526002 526156 . . . Name=1460057 chr16 . BED_feature 84494120 84494201 . . . Name=1460054 chr16 . BED_feature 84509529 84509897 . . . Name=1460054 chr3 . BED_feature 134947846 134947926 . . . Name=2839477 chr1 . BED_feature 938620 938651 . . . Name=9234684 chr12 . BED_feature 14740884 14740927 . . . Name=10889158 chr3 . BED_feature 166279012 166279044 . . . Name=10889158 chr4 . BED_feature 187424397 187424441 . . . Name=11891231 chr2 . BED_feature 60961766 60962017 . . . Name=8666258 chr9 . BED_feature 106642488 106642515 . . . Name=10858438 chr3 . BED_feature 25444697 25444725 . . . Name=1335571 chr17 . BED_feature 4794240 4795878 . . . Name=1840492 chr11 . BED_feature 63824694 63825022 . . . Name=14978033 chr11 . BED_feature 63828768 63829062 . . . Name=14978033 chr11 . BED_feature 5227700 5228090 . . . Name=1406669 chr11 . BED_feature 5232624 5233475 . . . Name=1406669 chr11 . BED_feature 5235228 5235270 . . . Name=1406669 chr11 . BED_feature 5245403 5245626 . . . Name=1406669 chr11 . BED_feature 5248000 5248054 . . . Name=1406669 chr19 . BED_feature 18252366 18252412 . . . Name=1527086 chr20 . BED_feature 35157763 35157853 . . . Name=7791762 chr17 . BED_feature 29507626 29507986 . . . Name=12957380 chr2 . BED_feature 8739641 8739671 . . . Name=7758976 chr14 . BED_feature 22095217 22095259 . . . Name=2237431 chr19 . BED_feature 12763116 12763277 . . . Name=1708123 chr6 . BED_feature 19945685 19945712 . . . Name=9516472 chr19 . BED_feature 803188 803276 . . . Name=8035830 chrX . BED_feature 16575046 16575095 . . . Name=15217781 chrX . BED_feature 16578083 16578129 . . . Name=15217781 chr1 . BED_feature 159466178 159467889 . . . Name=8114692 chr1 . BED_feature 159469221 159469752 . . . Name=8114692 chr1 . BED_feature 159472261 159473015 . . . Name=8114692 chr1 . BED_feature 159474454 159474579 . . . Name=8114692 chrX . BED_feature 72958725 72958835 . . . Name=8114692 chr2 . BED_feature 228272380 228272410 . . . Name=15217784 chr2 . BED_feature 228275242 228275271 . . . Name=15217784 chr2 . BED_feature 228290980 228291062 . . . Name=15217784 chr12 . BED_feature 110689069 110689098 . . . Name=8964492 chr19 . BED_feature 11060988 11061023 . . . Name=10787437 chr4 . BED_feature 123597349 123597378 . . . Name=1722332 chr8 . BED_feature 128817181 128817228 . . . Name=2324096 chr12 . BED_feature 67488826 67488868 . . . Name=15550242 chr5 . BED_feature 176769146 176769177 . . . Name=9794469 chr14 . BED_feature 93924790 93924821 . . . Name=9794469 chr8 . BED_feature 11603761 11603808 . . . Name=9486185 chr11 . BED_feature 118463735 118463763 . . . Name=1875946 chr16 . BED_feature 103522 103848 . . . Name=1875946 chr4 . BED_feature 149583223 149583259 . . . Name=8961265 chr4 . BED_feature 149585299 149585633 . . . Name=8961265 chr5 . BED_feature 131437323 131437356 . . . Name=2233734 chr11 . BED_feature 56914780 56914817 . . . Name=9558404 chr11 . BED_feature 102174166 102174196 . . . Name=9850057 chr11 . BED_feature 102175685 102175713 . . . Name=9850057 chr7 . BED_feature 87067978 87068281 . . . Name=9187262 chr6 . BED_feature 32515557 32515587 . . . Name=9187262 chr11 . BED_feature 69165015 69165043 . . . Name=10318916 chr6 . BED_feature 43566883 43566936 . . . Name=1846623 chr5 . BED_feature 8673995 8674036 . . . Name=1846623 chr4 . BED_feature 5457317 5457345 . . . Name=1846623 chr4 . BED_feature 65155401 65155486 . . . Name=1846623 chr2 . BED_feature 82900465 82900506 . . . Name=1846623 chr2 . BED_feature 117226297 117226351 . . . Name=1846623 chr2 . BED_feature 143566475 143566505 . . . Name=1846623 chr1 . BED_feature 77209593 77209678 . . . Name=1846623 chr9 . BED_feature 34989141 34989208 . . . Name=1846623 chr8 . BED_feature 68655748 68655789 . . . Name=1846623 chr13 . BED_feature 95146566 95146598 . . . Name=1846623 chr11 . BED_feature 63711383 63711424 . . . Name=1846623 chr17 . BED_feature 19441580 19441621 . . . Name=1846623 chr17 . BED_feature 21944696 21944853 . . . Name=1846623 chrM . BED_feature 16413 16571 . . . Name=1846623 chrX . BED_feature 125692536 125692596 . . . Name=1846623 chr6 . BED_feature 31891214 31891248 . . . Name=11306579 chr1 . BED_feature 228904778 228904839 . . . Name=7961807 chr3 . BED_feature 25444667 25444701 . . . Name=10629053 chr5 . BED_feature 176446488 176446622 . . . Name=11981041 chr19 . BED_feature 9490689 9490716 . . . Name=11022000 chr18 . BED_feature 58261022 58261049 . . . Name=11022000 chr17 . BED_feature 31231519 31231548 . . . Name=11022000 chr2 . BED_feature 130548583 130548610 . . . Name=11022000 chr2 . BED_feature 130937155 130937182 . . . Name=11022000 chr2 . BED_feature 131131597 131131624 . . . Name=11022000 chr2 . BED_feature 131738403 131738430 . . . Name=11022000 chr9 . BED_feature 6825255 6825282 . . . Name=11022000 chr6 . BED_feature 32515534 32515560 . . . Name=10675042 chrX . BED_feature 146800818 146801184 . . . Name=9199556 chr10 . BED_feature 69125926 69126061 . . . Name=15302915 chrX . BED_feature 30581120 30581150 . . . Name=14654354 chr17 . BED_feature 73694759 73694962 . . . Name=2914910 chr7 . BED_feature 5533905 5534773 . . . Name=11509602 chr5 . BED_feature 79631253 79631282 . . . Name=11509602 chr5 . BED_feature 158690000 158690346 . . . Name=11509602 chr3 . BED_feature 12087834 12087862 . . . Name=11509602 chr2 . BED_feature 130548918 130548948 . . . Name=11509602 chr2 . BED_feature 130937490 130937520 . . . Name=11509602 chr2 . BED_feature 131131259 131131289 . . . Name=11509602 chr2 . BED_feature 131738065 131738095 . . . Name=11509602 chr1 . BED_feature 103914790 103914818 . . . Name=11509602 chr22 . BED_feature 14635980 14636010 . . . Name=11509602 chr15 . BED_feature 42069177 42069206 . . . Name=11509602 chr14 . BED_feature 18655264 18655294 . . . Name=11509602 chr14 . BED_feature 19058342 19058372 . . . Name=11509602 chr17 . BED_feature 77092312 77092340 . . . Name=11509602 chr2 . BED_feature 182251814 182251845 . . . Name=9714454 chr2 . BED_feature 182253401 182253508 . . . Name=9714454 chr2 . BED_feature 182254800 182254844 . . . Name=9714454 chr10 . BED_feature 6144530 6144558 . . . Name=8475098 chr1 . BED_feature 167969765 167969794 . . . Name=7525580 chrX . BED_feature 153904169 153904229 . . . Name=8628260 chr20 . BED_feature 29655769 29655813 . . . Name=11700304 chr8 . BED_feature 42314354 42315833 . . . Name=3182828 chr14 . BED_feature 21999514 21999544 . . . Name=11781241 chr4 . BED_feature 155703462 155703528 . . . Name=8423785 chr12 . BED_feature 21417531 21417563 . . . Name=15243700 chr15 . BED_feature 72805893 72805921 . . . Name=9415707 chr11 . BED_feature 102176067 102176109 . . . Name=9115242 chr11 . BED_feature 116168397 116168615 . . . Name=12709436 chr22 . BED_feature 38626945 38626986 . . . Name=12554803 chr16 . BED_feature 55217064 55217144 . . . Name=6095291 chr16 . BED_feature 55223952 55224021 . . . Name=6095291 chr16 . BED_feature 55249264 55249346 . . . Name=6095291 chr16 . BED_feature 55259529 55259603 . . . Name=6095291 chr16 . BED_feature 55261096 55261155 . . . Name=6095291 chr6 . BED_feature 74286520 74288051 . . . Name=7961976 chr7 . BED_feature 55054353 55054388 . . . Name=12894229 chr1 . BED_feature 75962524 75962557 . . . Name=1328196 chr6 . BED_feature 31433072 31433109 . . . Name=7907595 chr1 . BED_feature 120737549 120737587 . . . Name=7907595 chr1 . BED_feature 147635798 147635836 . . . Name=7907595 chr1 . BED_feature 148020754 148020792 . . . Name=7907595 chr16 . BED_feature 54068948 54068984 . . . Name=9343394 chr7 . BED_feature 44805909 44805937 . . . Name=12377782 chr2 . BED_feature 101257188 101257216 . . . Name=12377782 chr5 . BED_feature 68498806 68498835 . . . Name=1582409 chr10 . BED_feature 62209933 62209968 . . . Name=1582409 chr10 . BED_feature 62214467 62214599 . . . Name=1582409 chr4 . BED_feature 100431465 100431497 . . . Name=1996113 chr4 . BED_feature 100461880 100461911 . . . Name=1996113 chr4 . BED_feature 100493191 100493270 . . . Name=1996113 chr4 . BED_feature 123597349 123597378 . . . Name=8335913 chr3 . BED_feature 42281231 42281419 . . . Name=2118525 chr16 . BED_feature 103675 103708 . . . Name=8455611 chr11 . BED_feature 47238666 47240146 . . . Name=7744246 chr11 . BED_feature 47246037 47246944 . . . Name=7744246 chr22 . BED_feature 34343286 34343320 . . . Name=3796609 chr6 . BED_feature 32515519 32515580 . . . Name=3133120 chr11 . BED_feature 116213692 116213767 . . . Name=14563824 chr22_random . BED_feature 13279 13315 . . . Name=14563824 chr6 . BED_feature 31891220 31891251 . . . Name=1674922 chr7 . BED_feature 100556511 100556547 . . . Name=9765209 chr16 . BED_feature 31311938 31312078 . . . Name=10722744 chr7 . BED_feature 5533905 5534772 . . . Name=14761964 chr5 . BED_feature 77116938 77116964 . . . Name=14761964 chr5 . BED_feature 79631253 79631282 . . . Name=14761964 chr3 . BED_feature 12087834 12087862 . . . Name=14761964 chr2 . BED_feature 130548918 130548947 . . . Name=14761964 chr2 . BED_feature 130937490 130937519 . . . Name=14761964 chr2 . BED_feature 131131260 131131289 . . . Name=14761964 chr2 . BED_feature 131738066 131738095 . . . Name=14761964 chr1 . BED_feature 103914790 103914818 . . . Name=14761964 chr1 . BED_feature 227633869 227633895 . . . Name=14761964 chr22 . BED_feature 14635980 14636009 . . . Name=14761964 chr15 . BED_feature 42069177 42069206 . . . Name=14761964 chr14 . BED_feature 18655265 18655294 . . . Name=14761964 chr14 . BED_feature 19058342 19058371 . . . Name=14761964 chr17 . BED_feature 77092312 77092340 . . . Name=14761964 chr1 . BED_feature 163028395 163028465 . . . Name=1967982 chr1 . BED_feature 163056000 163056043 . . . Name=1967982 chrX . BED_feature 33133102 33133241 . . . Name=9092671 chr2 . BED_feature 40593127 40593192 . . . Name=10212268 chr12 . BED_feature 49852961 49853556 . . . Name=8157699 chr11 . BED_feature 303950 304011 . . . Name=2492664 chrX . BED_feature 33139545 33139614 . . . Name=2403634 chr16 . BED_feature 142731 142764 . . . Name=2403638 chr16 . BED_feature 152943 152976 . . . Name=2403638 chr6 . BED_feature 12398459 12398494 . . . Name=9588211 chr20 . BED_feature 31728191 31728226 . . . Name=10336493 chr16 . BED_feature 31273842 31274009 . . . Name=8621914 chr11 . BED_feature 116205240 116205369 . . . Name=8675624 chr22_random . BED_feature 21672 21801 . . . Name=8675624 chr17 . BED_feature 35727891 35728028 . . . Name=7585542 chr10 . BED_feature 95351087 95351181 . . . Name=8810324 chr4 . BED_feature 123597349 123597378 . . . Name=1639393 chr1 . BED_feature 89303431 89303699 . . . Name=1898761 chr1 . BED_feature 89645645 89645905 . . . Name=1898761 chr17 . BED_feature 68677655 68677683 . . . Name=11208729 chr2 . BED_feature 204279614 204279643 . . . Name=11342633 chr16_random . BED_feature 105103 105168 . . . Name=1502157 chr16 . BED_feature 29726479 29727567 . . . Name=1502157 chr16 . BED_feature 29729110 29729985 . . . Name=1502157 chr11 . BED_feature 69299288 69299589 . . . Name=7929190 chr17 . BED_feature 29603542 29603572 . . . Name=15223809 chr13 . BED_feature 19665940 19666133 . . . Name=16314317 chr4 . BED_feature 100493209 100493237 . . . Name=11051106 chr2 . BED_feature 113313588 113313618 . . . Name=8413264 chr10 . BED_feature 71006858 71006921 . . . Name=11334435 chr6 . BED_feature 116556248 116556279 . . . Name=12435601 chr3 . BED_feature 4996985 4997026 . . . Name=12624110 chr10 . BED_feature 135190226 135190285 . . . Name=15345327 chr16 . BED_feature 55199883 55199916 . . . Name=2033057 chr2 . BED_feature 21120498 21120527 . . . Name=2033057 chr4 . BED_feature 123597158 123597188 . . . Name=1652063 chr2 . BED_feature 208169882 208169935 . . . Name=7745688 chr5 . BED_feature 131423938 131424152 . . . Name=2263617 chr16 . BED_feature 55199882 55199917 . . . Name=2263617 chr18 . BED_feature 59138006 59138038 . . . Name=15117818 chr5 . BED_feature 131437193 131437225 . . . Name=12704365 chr6 . BED_feature 106642851 106642882 . . . Name=1851123 chr6 . BED_feature 106650196 106650227 . . . Name=1851123 chr6 . BED_feature 106659393 106659933 . . . Name=1851123 chr11 . BED_feature 117692799 117692830 . . . Name=1989880 chr6 . BED_feature 32515580 32515609 . . . Name=7673122 chr5 . BED_feature 149772459 149772599 . . . Name=7673122 chr2 . BED_feature 88938934 88939059 . . . Name=3037335 chr5 . BED_feature 137828912 137828949 . . . Name=10391889 chr16 . BED_feature 68318403 68318430 . . . Name=9601066 chr1 . BED_feature 59020593 59020670 . . . Name=8253081 chr14 . BED_feature 79748342 79748375 . . . Name=12775767 chr5 . BED_feature 137695540 137695570 . . . Name=9679054 chr2 . BED_feature 204279614 204279644 . . . Name=10510368 chr17 . BED_feature 73694639 73695190 . . . Name=2005912 chr14 . BED_feature 93924750 93924779 . . . Name=3263567 chr6 . BED_feature 49682518 49682891 . . . Name=9442063 chr6 . BED_feature 49688067 49688117 . . . Name=9442063 chr6 . BED_feature 49691309 49691352 . . . Name=9442063 chr6 . BED_feature 49694924 49695034 . . . Name=9442063 chr6 . BED_feature 49712337 49712389 . . . Name=9442063 chr11 . BED_feature 116205742 116205769 . . . Name=1406652 chr22_random . BED_feature 21272 21299 . . . Name=1406652 chrX . BED_feature 37524022 37524232 . . . Name=9593745 chr16 . BED_feature 142741 142804 . . . Name=9642099 chr16 . BED_feature 152953 153016 . . . Name=9642099 chr4 . BED_feature 123597345 123597378 . . . Name=8473495 chr19 . BED_feature 46878378 46878479 . . . Name=8349632 chr19 . BED_feature 46914543 46914874 . . . Name=8349632 chr19 . BED_feature 46917382 46917730 . . . Name=8349632 chr19 . BED_feature 47716253 47716299 . . . Name=8349632 chr19 . BED_feature 47784240 47784322 . . . Name=8349632 chr19 . BED_feature 47821064 47821727 . . . Name=8349632 chr19 . BED_feature 47858835 47859130 . . . Name=8349632 chr19 . BED_feature 47924304 47925076 . . . Name=8349632 chr19 . BED_feature 47936759 47937193 . . . Name=8349632 chr19 . BED_feature 47950192 47950286 . . . Name=8349632 chr19 . BED_feature 47961987 47962109 . . . Name=8349632 chr19 . BED_feature 47981598 47981632 . . . Name=8349632 chr19 . BED_feature 48039544 48040312 . . . Name=8349632 chr19 . BED_feature 48052015 48052449 . . . Name=8349632 chr19 . BED_feature 48063959 48064054 . . . Name=8349632 chr19 . BED_feature 48075975 48076408 . . . Name=8349632 chr19 . BED_feature 48102097 48102875 . . . Name=8349632 chr19 . BED_feature 48121644 48121722 . . . Name=8349632 chr19 . BED_feature 48145390 48145424 . . . Name=8349632 chr19 . BED_feature 48210296 48211069 . . . Name=8349632 chr19 . BED_feature 48222749 48222790 . . . Name=8349632 chr19 . BED_feature 48266880 48267653 . . . Name=8349632 chr19 . BED_feature 48370395 48371168 . . . Name=8349632 chr19 . BED_feature 48382769 48382812 . . . Name=8349632 chr19 . BED_feature 48390211 48390293 . . . Name=8349632 chr19 . BED_feature 48401911 48401953 . . . Name=8349632 chr19 . BED_feature 48415875 48415909 . . . Name=8349632 chr19 . BED_feature 48453382 48454155 . . . Name=8349632 chr19 . BED_feature 48465821 48466255 . . . Name=8349632 chr19 . BED_feature 48479323 48479357 . . . Name=8349632 chr16 . BED_feature 31178768 31178799 . . . Name=8095266 chr6 . BED_feature 22405283 22405362 . . . Name=1655738 chr1 . BED_feature 154478087 154478119 . . . Name=8825560 chr2 . BED_feature 85748894 85748944 . . . Name=12161428 chr17 . BED_feature 59364778 59364942 . . . Name=10446901 chr7 . BED_feature 22733234 22733278 . . . Name=2183031 chr7 . BED_feature 99219887 99219923 . . . Name=11679585 chr10 . BED_feature 96686555 96686755 . . . Name=11679585 chr19 . BED_feature 50100782 50100815 . . . Name=12444925 chr16 . BED_feature 31178796 31178913 . . . Name=8096519 chr17 . BED_feature 33144672 33144750 . . . Name=1677179 chr17 . BED_feature 33167872 33167927 . . . Name=1677179 chr2 . BED_feature 216008982 216009553 . . . Name=2542772 chr11 . BED_feature 113672319 113672349 . . . Name=15486044 chr11 . BED_feature 113688418 113688446 . . . Name=15486044 chr12 . BED_feature 102847760 102848419 . . . Name=2546060 chr6 . BED_feature 27968974 27969051 . . . Name=8628255 chr9 . BED_feature 21067967 21068081 . . . Name=2542571 chr9 . BED_feature 21358162 21358203 . . . Name=2542571 chr9 . BED_feature 21430310 21430351 . . . Name=2542571 chr11 . BED_feature 5204938 5204966 . . . Name=7545172 chr11 . BED_feature 5227753 5227795 . . . Name=7545172 chr11 . BED_feature 5232677 5232719 . . . Name=7545172 chr11 . BED_feature 5247820 5247851 . . . Name=7545172 chr5 . BED_feature 131410359 131410597 . . . Name=9047239 chr4 . BED_feature 123597353 123597382 . . . Name=9047239 chr11 . BED_feature 102219598 102219627 . . . Name=9047239 chr11 . BED_feature 116213591 116213627 . . . Name=9507986 chr22_random . BED_feature 13419 13455 . . . Name=9507986 chr7 . BED_feature 93042001 93042093 . . . Name=14623107 chr18 . BED_feature 647736 647764 . . . Name=9218479 chrX . BED_feature 43626665 43626710 . . . Name=15024015 chr14 . BED_feature 66896765 66896814 . . . Name=9856992 chr16 . BED_feature 55199807 55199838 . . . Name=2191300 chr6 . BED_feature 32515620 32515659 . . . Name=2105459 chr10 . BED_feature 90739579 90739628 . . . Name=10903433 chr13 . BED_feature 112824974 112825091 . . . Name=11159521 chr2 . BED_feature 1874829 1874920 . . . Name=1280325 chr2 . BED_feature 1900022 1900095 . . . Name=1280325 chr20 . BED_feature 62313001 62313928 . . . Name=1280325 chr20 . BED_feature 62318982 62319078 . . . Name=1280325 chr20 . BED_feature 62320627 62321779 . . . Name=1280325 chr20 . BED_feature 62323688 62323844 . . . Name=1280325 chr20 . BED_feature 62325100 62325129 . . . Name=1280325 chr20 . BED_feature 62329212 62329770 . . . Name=1280325 chr20 . BED_feature 62333961 62334153 . . . Name=1280325 chr20 . BED_feature 62338350 62339187 . . . Name=1280325 chr20 . BED_feature 62341572 62342693 . . . Name=1280325 chrX . BED_feature 102918140 102918171 . . . Name=1280325 chr7 . BED_feature 100556299 100557042 . . . Name=11423472 chr19 . BED_feature 50501541 50502693 . . . Name=2903158 chr19 . BED_feature 50506847 50506880 . . . Name=2903158 chr19 . BED_feature 50513024 50513074 . . . Name=2903158 chr19 . BED_feature 50514799 50514829 . . . Name=2903158 chr3 . BED_feature 70068151 70068220 . . . Name=10973953 chr4 . BED_feature 123597348 123597378 . . . Name=15471864 chr4 . BED_feature 74953667 74953833 . . . Name=1906501 chr5 . BED_feature 132037381 132037436 . . . Name=11781715 chr6 . BED_feature 31650767 31650831 . . . Name=12655064 chr11 . BED_feature 116205746 116205774 . . . Name=2777781 chr22_random . BED_feature 21267 21295 . . . Name=2777781 chr11 . BED_feature 100414364 100415056 . . . Name=2328727 chr11 . BED_feature 100503356 100503385 . . . Name=2328727 chr11 . BED_feature 100505018 100506465 . . . Name=2328727 chr1 . BED_feature 6562698 6563256 . . . Name=7969177 chr1 . BED_feature 6571860 6571923 . . . Name=7969177 chr6 . BED_feature 32742469 32742520 . . . Name=9032250 chr3 . BED_feature 111118150 111118177 . . . Name=9032250 chr12 . BED_feature 103041233 103041262 . . . Name=9032250 chr5 . BED_feature 1348121 1348359 . . . Name=11454703 chr7 . BED_feature 55054191 55054386 . . . Name=2768275 chr14 . BED_feature 21999515 21999544 . . . Name=12244173 chr3 . BED_feature 188943536 188943563 . . . Name=12150891 chr1 . BED_feature 23759175 23759207 . . . Name=12150891 chr22 . BED_feature 39903141 39903181 . . . Name=11116148 chr6 . BED_feature 32515534 32515581 . . . Name=3174636 chr15 . BED_feature 37660491 37660521 . . . Name=8444876 chr6 . BED_feature 138230012 138230054 . . . Name=8444879 chr12 . BED_feature 97562601 97562637 . . . Name=11896574 chr18 . BED_feature 53404789 53404938 . . . Name=7983009 chr20 . BED_feature 31737791 31738092 . . . Name=7935380 chr8 . BED_feature 38127716 38127745 . . . Name=10919277 chr1 . BED_feature 153302602 153302796 . . . Name=12030849 chr1 . BED_feature 100957802 100957850 . . . Name=8547644 chr11 . BED_feature 73371685 73372465 . . . Name=16282353 chr2 . BED_feature 48727286 48727318 . . . Name=10364255 chr1 . BED_feature 181826008 181826435 . . . Name=11781392 chrX . BED_feature 37524195 37524224 . . . Name=11781392 chr7 . BED_feature 41970210 41972742 . . . Name=2118997 chr7 . BED_feature 41973750 41974031 . . . Name=2118997 chr7 . BED_feature 41978489 41978750 . . . Name=2118997 chr7 . BED_feature 41983715 41983767 . . . Name=2118997 chr7 . BED_feature 42029592 42029669 . . . Name=2118997 chr7 . BED_feature 42031396 42032539 . . . Name=2118997 chr7 . BED_feature 42046166 42046363 . . . Name=2118997 chr7 . BED_feature 42051507 42051655 . . . Name=2118997 chr7 . BED_feature 42054620 42054811 . . . Name=2118997 chr7 . BED_feature 42082875 42082981 . . . Name=2118997 chr7 . BED_feature 42154353 42154578 . . . Name=2118997 chr7 . BED_feature 42229266 42229411 . . . Name=2118997 chr2 . BED_feature 121462418 121462473 . . . Name=2118997 chr17 . BED_feature 35827694 35827738 . . . Name=12769819 chr6 . BED_feature 36754355 36754385 . . . Name=10749849 chr1 . BED_feature 67925040 67925068 . . . Name=10749849 chr9 . BED_feature 109287448 109287894 . . . Name=10749849 chr7 . BED_feature 55054191 55054238 . . . Name=10363966 chr17 . BED_feature 35109318 35109363 . . . Name=10363966 chr7 . BED_feature 56161236 56161290 . . . Name=9334314 chr7 . BED_feature 64181916 64181969 . . . Name=9334314 chr7 . BED_feature 64876046 64876085 . . . Name=9334314 chr7 . BED_feature 72227390 72227445 . . . Name=9334314 chr7 . BED_feature 73781059 73781114 . . . Name=9334314 chr7 . BED_feature 74270861 74270916 . . . Name=9334314 chr9 . BED_feature 96441674 96441802 . . . Name=11023824 chr7 . BED_feature 75769817 75769845 . . . Name=9328340 chr7 . BED_feature 5533906 5535784 . . . Name=1710027 chr6 . BED_feature 46280798 46281747 . . . Name=1710027 chr6 . BED_feature 89042335 89043319 . . . Name=1710027 chr5 . BED_feature 15504634 15504896 . . . Name=1710027 chr5 . BED_feature 56813211 56814242 . . . Name=1710027 chr5 . BED_feature 61163673 61163723 . . . Name=1710027 chr5 . BED_feature 77116593 77117549 . . . Name=1710027 chr5 . BED_feature 79631303 79631916 . . . Name=1710027 chr5 . BED_feature 79634187 79634306 . . . Name=1710027 chr5 . BED_feature 97702840 97703393 . . . Name=1710027 chr5 . BED_feature 131022674 131023539 . . . Name=1710027 chr3 . BED_feature 12086941 12087806 . . . Name=1710027 chr3 . BED_feature 140695811 140696440 . . . Name=1710027 chr3 . BED_feature 177177976 177178622 . . . Name=1710027 chr3 . BED_feature 182021877 182022052 . . . Name=1710027 chr2 . BED_feature 73972986 73974525 . . . Name=1710027 chr2 . BED_feature 73980343 73983204 . . . Name=1710027 chr2 . BED_feature 73988648 73989876 . . . Name=1710027 chr2 . BED_feature 73994055 73995649 . . . Name=1710027 chr2 . BED_feature 73997099 73997500 . . . Name=1710027 chr2 . BED_feature 73999984 74000318 . . . Name=1710027 chr2 . BED_feature 108082160 108082238 . . . Name=1710027 chr2 . BED_feature 130548302 130549385 . . . Name=1710027 chr2 . BED_feature 130936860 130937957 . . . Name=1710027 chr2 . BED_feature 131130822 131131919 . . . Name=1710027 chr2 . BED_feature 131737628 131738725 . . . Name=1710027 chr2 . BED_feature 132100211 132101308 . . . Name=1710027 chr2 . BED_feature 177199790 177199841 . . . Name=1710027 chr1 . BED_feature 27524650 27524875 . . . Name=1710027 chr1 . BED_feature 78012197 78013141 . . . Name=1710027 chr1 . BED_feature 92467198 92467382 . . . Name=1710027 chr1 . BED_feature 103914535 103914769 . . . Name=1710027 chr1 . BED_feature 201109170 201109326 . . . Name=1710027 chr1 . BED_feature 222118104 222119050 . . . Name=1710027 chr1 . BED_feature 227633870 227635476 . . . Name=1710027 chr1 . BED_feature 236156881 236157339 . . . Name=1710027 chr8 . BED_feature 86023506 86024318 . . . Name=1710027 chr9 . BED_feature 6824582 6825542 . . . Name=1710027 chr9 . BED_feature 102534070 102534395 . . . Name=1710027 chrX . BED_feature 46032440 46033041 . . . Name=1710027 chrX . BED_feature 53188774 53189695 . . . Name=1710027 chr11 . BED_feature 1780696 1781770 . . . Name=1710027 chr10 . BED_feature 70452643 70452798 . . . Name=1710027 chr10 . BED_feature 90684959 90685088 . . . Name=1710027 chr10 . BED_feature 90687799 90687977 . . . Name=1710027 chr10 . BED_feature 90689249 90689321 . . . Name=1710027 chr10 . BED_feature 90690998 90691107 . . . Name=1710027 chr10 . BED_feature 90693547 90693643 . . . Name=1710027 chr10 . BED_feature 90696999 90697120 . . . Name=1710027 chr10 . BED_feature 90698555 90698637 . . . Name=1710027 chr22 . BED_feature 14635353 14636447 . . . Name=1710027 chr22 . BED_feature 39800161 39801062 . . . Name=1710027 chrY . BED_feature 18378290 18379273 . . . Name=1710027 chrY . BED_feature 18769284 18770112 . . . Name=1710027 chr15 . BED_feature 32453091 32453139 . . . Name=1710027 chr15 . BED_feature 32869905 32873056 . . . Name=1710027 chr15 . BED_feature 32874183 32874289 . . . Name=1710027 chr15 . BED_feature 42068573 42069644 . . . Name=1710027 chr15 . BED_feature 81192163 81192213 . . . Name=1710027 chr14 . BED_feature 18654827 18655924 . . . Name=1710027 chr14 . BED_feature 19057712 19058809 . . . Name=1710027 chr20 . BED_feature 1090119 1090302 . . . Name=1710027 chr17 . BED_feature 17086628 17086908 . . . Name=1710027 chr17 . BED_feature 77092310 77093757 . . . Name=1710027 chr19 . BED_feature 9489955 9490962 . . . Name=1710027 chr18 . BED_feature 58260969 58261292 . . . Name=1710027 chr16 . BED_feature 48649561 48650501 . . . Name=1710027 chr5 . BED_feature 132037505 132037538 . . . Name=10069428 chr3 . BED_feature 25444698 25444726 . . . Name=11943482 chr1 . BED_feature 167969831 167969975 . . . Name=7520526 chr10 . BED_feature 82039130 82039179 . . . Name=10677369 chr9 . BED_feature 115882965 115883372 . . . Name=9729465 chr7 . BED_feature 120478079 120478120 . . . Name=14621294 chr4 . BED_feature 63058673 63058703 . . . Name=14621294 chr1 . BED_feature 181178239 181178280 . . . Name=14621294 chrX . BED_feature 153698949 153698990 . . . Name=14621294 chr11 . BED_feature 3967349 3967409 . . . Name=14621294 chr10 . BED_feature 19817917 19817977 . . . Name=14621294 chr15 . BED_feature 60441901 60441972 . . . Name=14621294 chr15 . BED_feature 91055928 91055966 . . . Name=14621294 chr21 . BED_feature 39642815 39643262 . . . Name=14621294 chr19 . BED_feature 58963707 58963769 . . . Name=14621294 chr17_random . BED_feature 492684 492712 . . . Name=14557070 chr17_random . BED_feature 510776 510804 . . . Name=14557070 chr17_random . BED_feature 512268 512296 . . . Name=14557070 chr17_random . BED_feature 514743 514771 . . . Name=14557070 chr17_random . BED_feature 519632 519660 . . . Name=14557070 chr17_random . BED_feature 525780 525808 . . . Name=14557070 chr17_random . BED_feature 527712 527740 . . . Name=14557070 chr17_random . BED_feature 555959 555987 . . . Name=14557070 chr17_random . BED_feature 2607939 2607967 . . . Name=14557070 chr17_random . BED_feature 2614807 2614835 . . . Name=14557070 chr3 . BED_feature 52463074 52463149 . . . Name=8413270 chr3 . BED_feature 197293435 197293473 . . . Name=8022786 chr15 . BED_feature 32875225 32875253 . . . Name=2494661 chr5 . BED_feature 137695576 137695757 . . . Name=7479023 chrX_random . BED_feature 1443981 1444483 . . . Name=2044957 chrX . BED_feature 77245980 77246482 . . . Name=2044957 chr9 . BED_feature 37024033 37024157 . . . Name=11223243 chr22 . BED_feature 37970957 37970998 . . . Name=8077216 chr1 . BED_feature 100957747 100957777 . . . Name=8077216 chr1 . BED_feature 151147273 151147456 . . . Name=8550612 chr9 . BED_feature 21067994 21068067 . . . Name=1886766 chr17 . BED_feature 7423605 7423652 . . . Name=12676954 chr8 . BED_feature 42191533 42191569 . . . Name=15466927 chr7 . BED_feature 99219887 99219919 . . . Name=11027665 chr6 . BED_feature 41760502 41760686 . . . Name=2115126 chr6 . BED_feature 41761805 41763745 . . . Name=2115126 chr6 . BED_feature 41765438 41766953 . . . Name=2115126 chr6 . BED_feature 41811109 41811166 . . . Name=2115126 chr8 . BED_feature 43016280 43016347 . . . Name=2115126 chrX . BED_feature 48775935 48775998 . . . Name=2115126 chr7 . BED_feature 94791818 94791848 . . . Name=15380450 chr1 . BED_feature 2072222 2072263 . . . Name=15380450 chr20 . BED_feature 5048592 5048691 . . . Name=8095093 chr1 . BED_feature 52642683 52642720 . . . Name=8943353 chr17 . BED_feature 40348346 40348385 . . . Name=8702952 chr12 . BED_feature 52196033 52197187 . . . Name=1694576 chr12 . BED_feature 52306355 52306405 . . . Name=1694576 chr3 . BED_feature 188870904 188870945 . . . Name=1694576 chr15 . BED_feature 89212752 89212779 . . . Name=8132667 chr17 . BED_feature 59304762 59304919 . . . Name=2033067 chr17 . BED_feature 59312949 59313105 . . . Name=2033067 chr17 . BED_feature 59327659 59327816 . . . Name=2033067 chr17 . BED_feature 59342352 59342496 . . . Name=2033067 chr17 . BED_feature 59349924 59350080 . . . Name=2033067 chr5 . BED_feature 158690275 158690305 . . . Name=14976188 chr3 . BED_feature 134944351 134944495 . . . Name=2033069 chr14 . BED_feature 105142613 105142669 . . . Name=10510379 chr14 . BED_feature 105261403 105261448 . . . Name=10510379 chrX . BED_feature 47326791 47326827 . . . Name=9182725 chr7 . BED_feature 5536805 5536862 . . . Name=1762920 chr12 . BED_feature 14930138 14930305 . . . Name=11425864 chr7 . BED_feature 100159370 100159403 . . . Name=12354771 chr12 . BED_feature 26167261 26167289 . . . Name=12354771 chr12 . BED_feature 26169229 26169296 . . . Name=12354771 chr3 . BED_feature 4995941 4995970 . . . Name=12354771 chrX . BED_feature 114183475 114183507 . . . Name=12776189 chrX . BED_feature 114184851 114184881 . . . Name=12776189 chr14 . BED_feature 21999515 21999541 . . . Name=9584181 chr17 . BED_feature 59349864 59349894 . . . Name=1744088 chr3 . BED_feature 150065601 150065788 . . . Name=1744088 chr20 . BED_feature 44070866 44071007 . . . Name=10359016 chr2 . BED_feature 136592199 136592248 . . . Name=9379028 chr1 . BED_feature 75962524 75962563 . . . Name=9271417 chr1 . BED_feature 227636497 227636588 . . . Name=11096067 chr1 . BED_feature 227637693 227637737 . . . Name=11096067 chr1 . BED_feature 27871384 27871419 . . . Name=2721502 chr7 . BED_feature 142216839 142216875 . . . Name=8264651 chr2 . BED_feature 169596125 169596152 . . . Name=11387316 chr15 . BED_feature 54998208 54999478 . . . Name=1312219 chr15 . BED_feature 55000515 55000591 . . . Name=1312219 chr15 . BED_feature 55143238 55143314 . . . Name=1312219 chr15 . BED_feature 55171279 55171377 . . . Name=1312219 chr15 . BED_feature 55245897 55245956 . . . Name=1312219 chr15 . BED_feature 55271648 55271783 . . . Name=1312219 chr15 . BED_feature 55277262 55277318 . . . Name=1312219 chr15 . BED_feature 55310642 55310747 . . . Name=1312219 chr15 . BED_feature 55311784 55312347 . . . Name=1312219 chr15 . BED_feature 55313531 55313597 . . . Name=1312219 chr15 . BED_feature 55322962 55323029 . . . Name=1312219 chr15 . BED_feature 55330836 55330913 . . . Name=1312219 chr15 . BED_feature 55332751 55332960 . . . Name=1312219 chr15 . BED_feature 55341583 55342764 . . . Name=1312219 chr15 . BED_feature 55352532 55352752 . . . Name=1312219 chr15 . BED_feature 55361933 55362088 . . . Name=1312219 chr15 . BED_feature 55365644 55367499 . . . Name=1312219 chr2 . BED_feature 234190702 234190736 . . . Name=15470081 chr2 . BED_feature 234209533 234209564 . . . Name=15470081 chr2 . BED_feature 234254948 234254978 . . . Name=15470081 chr14 . BED_feature 74815180 74815209 . . . Name=2233715 chr12 . BED_feature 21175334 21175378 . . . Name=11483603 chr4 . BED_feature 68302883 68302915 . . . Name=12947046 chr21 . BED_feature 26465260 26465326 . . . Name=10333529 chr20 . BED_feature 5048560 5048599 . . . Name=7602584 chr14 . BED_feature 74814804 74814834 . . . Name=7602584 chr14 . BED_feature 21999513 21999541 . . . Name=12097391 chr6 . BED_feature 135544067 135544095 . . . Name=8137237 chr10 . BED_feature 62208102 62208133 . . . Name=8137237 chrX . BED_feature 24621809 24621838 . . . Name=8137237 chr6 . BED_feature 32076591 32076624 . . . Name=11463853 chr6 . BED_feature 32109329 32109362 . . . Name=11463853 chr10 . BED_feature 104587241 104587383 . . . Name=11463853 chr20 . BED_feature 42463215 42463243 . . . Name=11585914 chr1 . BED_feature 184915315 184915343 . . . Name=16397300 chr19 . BED_feature 46551974 46552018 . . . Name=10843986 chr2 . BED_feature 219990408 219990569 . . . Name=8387519 chr16 . BED_feature 55199809 55199838 . . . Name=11522791 chr1 . BED_feature 202402287 202402322 . . . Name=8999953 chr6 . BED_feature 31651200 31651239 . . . Name=10521481 chr16 . BED_feature 28850647 28850827 . . . Name=1375324 chr10 . BED_feature 90741041 90741071 . . . Name=12788915 chr7 . BED_feature 150316901 150316930 . . . Name=11960979 chr12 . BED_feature 116253637 116253666 . . . Name=11960979 chr12 . BED_feature 116361829 116361874 . . . Name=11960979 chr2 . BED_feature 21120511 21120539 . . . Name=1901405 chr14 . BED_feature 93924754 93924784 . . . Name=1901405 chr1 . BED_feature 181826103 181826309 . . . Name=15513967 chr12 . BED_feature 56432453 56432646 . . . Name=10688915 chr14 . BED_feature 24173316 24173382 . . . Name=9857074 chr14 . BED_feature 74814929 74815058 . . . Name=2849107 chr4 . BED_feature 89115807 89115868 . . . Name=11126367 chr18 . BED_feature 27425730 27425759 . . . Name=1620125 chr4 . BED_feature 74488730 74488763 . . . Name=1620125 chr2 . BED_feature 21120535 21120578 . . . Name=1620125 chr14 . BED_feature 93924795 93924826 . . . Name=1620125 chr14 . BED_feature 22974919 22974961 . . . Name=15572681 chr8 . BED_feature 19840944 19840973 . . . Name=11090277 chr3 . BED_feature 12368080 12368108 . . . Name=12821652 chr20 . BED_feature 5048006 5049059 . . . Name=10488129 chr11 . BED_feature 118463735 118463763 . . . Name=11154691 chr9 . BED_feature 2611471 2611503 . . . Name=10064725 chr5 . BED_feature 137695539 137695570 . . . Name=10559267 chr18 . BED_feature 59136963 59137006 . . . Name=14555646 chr18 . BED_feature 59138750 59139484 . . . Name=14555646 chr11 . BED_feature 5227745 5227796 . . . Name=2476717 chr11 . BED_feature 5232669 5232720 . . . Name=2476717 chr22 . BED_feature 49363948 49363991 . . . Name=15356291 chr1 . BED_feature 938623 938650 . . . Name=1654549 chr13 . BED_feature 112808079 112808169 . . . Name=7559437 chr10 . BED_feature 17310933 17311087 . . . Name=8417364 chr16 . BED_feature 66535560 66535604 . . . Name=1659419 chr10 . BED_feature 91142234 91142265 . . . Name=2118988 chr5 . BED_feature 137828634 137828671 . . . Name=11739517 chr13 . BED_feature 40405404 40405560 . . . Name=1527846 chr13 . BED_feature 40454190 40454420 . . . Name=1527846 chr13 . BED_feature 40491363 40491450 . . . Name=1527846 chr11 . BED_feature 5202451 5202702 . . . Name=2461328 chr7 . BED_feature 27169862 27169947 . . . Name=1756725 chr7 . BED_feature 27178093 27178255 . . . Name=1756725 chr12 . BED_feature 52669279 52669447 . . . Name=1756725 chr12 . BED_feature 52682482 52682589 . . . Name=1756725 chr17 . BED_feature 44045705 44045739 . . . Name=1756725 chr17 . BED_feature 44055373 44055482 . . . Name=1756725 chr2 . BED_feature 176689952 176690552 . . . Name=1756725 chr2 . BED_feature 176691929 176692204 . . . Name=1756725 chr2 . BED_feature 176695794 176697101 . . . Name=1756725 chr6 . BED_feature 43845944 43845971 . . . Name=9264407 chr6 . BED_feature 32114047 32114081 . . . Name=9518489 chr19 . BED_feature 10242588 10242615 . . . Name=9831247 chr5 . BED_feature 176450433 176450550 . . . Name=12642581 chr3 . BED_feature 171422834 171422862 . . . Name=14670960 chr3 . BED_feature 171485040 171485068 . . . Name=14670960 chrX . BED_feature 100679722 100679750 . . . Name=14670960 chr14 . BED_feature 69333739 69333838 . . . Name=14701722 chr3 . BED_feature 70068213 70068254 . . . Name=10747853 chr1 . BED_feature 120737517 120737559 . . . Name=7565811 chr1 . BED_feature 147635826 147635868 . . . Name=7565811 chr1 . BED_feature 148020782 148020824 . . . Name=7565811 chr4 . BED_feature 123597021 123597445 . . . Name=8233832 chr3 . BED_feature 172227350 172227379 . . . Name=10748140 chr6 . BED_feature 32515532 32515581 . . . Name=1454841 chr2 . BED_feature 218739948 218739983 . . . Name=9867862 chrX . BED_feature 47326840 47326869 . . . Name=10692475 chr1 . BED_feature 32511796 32511852 . . . Name=7499213 chr2 . BED_feature 191586628 191586668 . . . Name=11909852 chr1 . BED_feature 938621 938652 . . . Name=11909852 chr1 . BED_feature 89303582 89303612 . . . Name=11909852 chr1 . BED_feature 89645724 89645754 . . . Name=11909852 chr5 . BED_feature 131423977 131424007 . . . Name=8632000 chr10 . BED_feature 75338940 75339417 . . . Name=8632000 chr5 . BED_feature 137828634 137828733 . . . Name=11520792 chr16 . BED_feature 1782373 1782405 . . . Name=10650966 chr1 . BED_feature 167969447 167970262 . . . Name=1710341 chr4 . BED_feature 110942710 110942781 . . . Name=10524238 chr13 . BED_feature 99432314 99432355 . . . Name=10984499 chr8 . BED_feature 134378618 134379221 . . . Name=15377670 chr9 . BED_feature 135491564 135491594 . . . Name=9011768 chr3 . BED_feature 46481719 46481815 . . . Name=8621448 chr19 . BED_feature 62042299 62043207 . . . Name=12554678 chr1 . BED_feature 26105556 26105584 . . . Name=16757134 chr3 . BED_feature 87408889 87408918 . . . Name=15998782 chr1 . BED_feature 156923153 156923183 . . . Name=12196550 chr8 . BED_feature 128817172 128817203 . . . Name=8197157 chr21 . BED_feature 42660091 42660131 . . . Name=10620335 chr6 . BED_feature 31891180 31891216 . . . Name=1871106 chr6 . BED_feature 31903376 31903412 . . . Name=1871106 chr6 . BED_feature 122762494 122762674 . . . Name=1871106 chr6 . BED_feature 122775214 122775591 . . . Name=1871106 chr6 . BED_feature 122782010 122783068 . . . Name=1871106 chr6 . BED_feature 122784994 122786530 . . . Name=1871106 chr6 . BED_feature 122790747 122790800 . . . Name=1871106 chr6 . BED_feature 122794274 122795165 . . . Name=1871106 chr12 . BED_feature 53802721 53804233 . . . Name=1871106 chr8_random . BED_feature 420977 422326 . . . Name=1871105 chr8_random . BED_feature 423592 423718 . . . Name=1871105 chr8_random . BED_feature 426244 426932 . . . Name=1871105 chr8 . BED_feature 145503399 145504062 . . . Name=1871105 chr8 . BED_feature 145506613 145506739 . . . Name=1871105 chr8 . BED_feature 145508005 145509161 . . . Name=1871105 chr12 . BED_feature 6547784 6547818 . . . Name=1754393 chr21 . BED_feature 42609198 42609229 . . . Name=15177881 chr1 . BED_feature 938617 938650 . . . Name=1406637 chr7 . BED_feature 5533733 5533779 . . . Name=3244353 chr6 . BED_feature 89042157 89042202 . . . Name=3244353 chr5 . BED_feature 77117713 77117757 . . . Name=3244353 chr5 . BED_feature 79631094 79631150 . . . Name=3244353 chr5 . BED_feature 97703552 97703597 . . . Name=3244353 chr5 . BED_feature 131022452 131022499 . . . Name=3244353 chr2 . BED_feature 130548118 130548164 . . . Name=3244353 chr2 . BED_feature 130936690 130936736 . . . Name=3244353 chr2 . BED_feature 131132042 131132087 . . . Name=3244353 chr2 . BED_feature 131738848 131738893 . . . Name=3244353 chr1 . BED_feature 78011986 78012023 . . . Name=3244353 chr1 . BED_feature 222117894 222117941 . . . Name=3244353 chr9 . BED_feature 6825701 6825746 . . . Name=3244353 chr9 . BED_feature 102534581 102534628 . . . Name=3244353 chrX . BED_feature 44538308 44538347 . . . Name=3244353 chrX . BED_feature 46032209 46032255 . . . Name=3244353 chrX . BED_feature 65835141 65835184 . . . Name=3244353 chr11 . BED_feature 1780533 1780576 . . . Name=3244353 chr10 . BED_feature 70453757 70453804 . . . Name=3244353 chr22 . BED_feature 14635194 14635229 . . . Name=3244353 chr22 . BED_feature 39799947 39799993 . . . Name=3244353 chr15 . BED_feature 42068393 42068434 . . . Name=3244353 chr14 . BED_feature 18656047 18656083 . . . Name=3244353 chr14 . BED_feature 19057543 19057588 . . . Name=3244353 chr18 . BED_feature 58261459 58261504 . . . Name=3244353 chr5 . BED_feature 68498528 68498563 . . . Name=7739559 chr7 . BED_feature 55054199 55054226 . . . Name=8887630 chr1 . BED_feature 205012404 205012628 . . . Name=12817009 chr7 . BED_feature 87068168 87068256 . . . Name=8103518 chr10 . BED_feature 6144517 6144552 . . . Name=2308942 chr7 . BED_feature 99173460 99173491 . . . Name=11495920 chr7 . BED_feature 99219807 99219883 . . . Name=11495920 chr7 . BED_feature 99222454 99222483 . . . Name=11495920 chr15 . BED_feature 98070444 98070503 . . . Name=8035795 chr12 . BED_feature 6104109 6104139 . . . Name=9444957 chr5 . BED_feature 131424171 131424199 . . . Name=8035792 chr9 . BED_feature 21067980 21068020 . . . Name=3368441 chr5 . BED_feature 138986885 138986916 . . . Name=15656981 chr1 . BED_feature 201321365 201321394 . . . Name=15656981 chr15 . BED_feature 40536723 40537317 . . . Name=15656981 chr15 . BED_feature 40545543 40545576 . . . Name=15656981 chrX . BED_feature 100527955 100527995 . . . Name=15850836 chr5 . BED_feature 131434503 131434658 . . . Name=11509589 chr5 . BED_feature 142641653 142641682 . . . Name=11509589 chr5 . BED_feature 145700402 145700431 . . . Name=12606546 chr4 . BED_feature 123597352 123597383 . . . Name=12606546 chr3 . BED_feature 12367796 12367826 . . . Name=12606546 chrX . BED_feature 15529450 15529479 . . . Name=12606546 chr10 . BED_feature 62207826 62207857 . . . Name=8420994 chr19 . BED_feature 10242569 10242753 . . . Name=10092659 chr2 . BED_feature 191586342 191586980 . . . Name=14654702 chr12 . BED_feature 46681677 46682070 . . . Name=10856292 chr12 . BED_feature 46684714 46684793 . . . Name=10856292 chr1 . BED_feature 27544419 27544468 . . . Name=12137562 chr14 . BED_feature 21999697 21999744 . . . Name=9584163 chr7 . BED_feature 99219890 99219918 . . . Name=10757780 chr3 . BED_feature 25444697 25444725 . . . Name=10757780 chr12 . BED_feature 28014089 28014273 . . . Name=8371355 chr8 . BED_feature 57521834 57521869 . . . Name=1828294 chr1 . BED_feature 153429259 153432230 . . . Name=8387509 chr5 . BED_feature 68498443 68498645 . . . Name=9218875 chr9 . BED_feature 21358098 21358144 . . . Name=3040267 chr9 . BED_feature 21430367 21430415 . . . Name=3040267 chr15 . BED_feature 49322792 49322820 . . . Name=11245431 chr15 . BED_feature 72805892 72805921 . . . Name=11120824 chr7 . BED_feature 131000946 131000998 . . . Name=12850290 chr6 . BED_feature 89031760 89031806 . . . Name=12850290 chr5 . BED_feature 115926400 115926450 . . . Name=12850290 chr5 . BED_feature 149806572 149806623 . . . Name=12850290 chr1 . BED_feature 19807440 19807491 . . . Name=12850290 chr1 . BED_feature 176647562 176647613 . . . Name=12850290 chr12 . BED_feature 28007749 28007797 . . . Name=12850290 chr12 . BED_feature 28014013 28014467 . . . Name=12850290 chr12 . BED_feature 28016886 28016923 . . . Name=12850290 chr16 . BED_feature 8498390 8498441 . . . Name=12850290 chr21 . BED_feature 26464986 26465014 . . . Name=8541835 chr8 . BED_feature 19840941 19841043 . . . Name=7753827 chr15 . BED_feature 72805892 72805921 . . . Name=8816435 chr6 . BED_feature 31651200 31651239 . . . Name=8816436 chr14 . BED_feature 74814943 74814984 . . . Name=3316979 chr6 . BED_feature 36752199 36752228 . . . Name=11030628 chr17 . BED_feature 7520249 7520295 . . . Name=11030628 chr1 . BED_feature 205329078 205329135 . . . Name=8598458 chr1 . BED_feature 205344112 205344140 . . . Name=8598458 chr1 . BED_feature 198263575 198263662 . . . Name=9786908 chr1 . BED_feature 198284013 198284064 . . . Name=9786908 chr1 . BED_feature 198409940 198410009 . . . Name=9786908 chr1 . BED_feature 115373915 115373970 . . . Name=1321428 chr15 . BED_feature 49307326 49307355 . . . Name=12351690 chr15 . BED_feature 49361685 49361725 . . . Name=12351690 chr7 . BED_feature 5535725 5535755 . . . Name=11744689 chr3 . BED_feature 166279012 166279163 . . . Name=1378530 chr6 . BED_feature 27943286 27943766 . . . Name=2829131 chr8 . BED_feature 57521876 57521906 . . . Name=2850173 chr4 . BED_feature 89115387 89115910 . . . Name=14712233 chr4 . BED_feature 89123043 89123072 . . . Name=14712233 chr19 . BED_feature 46188950 46188987 . . . Name=15722458 chr11 . BED_feature 68336566 68336619 . . . Name=16271724 chr17 . BED_feature 59304763 59304920 . . . Name=2181288 chr17 . BED_feature 59312950 59313106 . . . Name=2181288 chr17 . BED_feature 59327660 59327817 . . . Name=2181288 chr17 . BED_feature 59342352 59342501 . . . Name=2181288 chr17 . BED_feature 59349925 59350081 . . . Name=2181288 chr6 . BED_feature 37244361 37245942 . . . Name=2181282 chr22 . BED_feature 44923860 44923889 . . . Name=11981036 chr8 . BED_feature 42314402 42315724 . . . Name=7590351 chr2 . BED_feature 127130179 127130354 . . . Name=2584223 chr9 . BED_feature 124173036 124173077 . . . Name=16105649 chr9 . BED_feature 124186298 124186375 . . . Name=16105649 chr14 . BED_feature 66896773 66896803 . . . Name=2584221 chr18 . BED_feature 59703907 59704256 . . . Name=8916932 chr9 . BED_feature 21067973 21068007 . . . Name=8916932 chr11 . BED_feature 5202539 5202590 . . . Name=2481268 chr5 . BED_feature 132037352 132037431 . . . Name=10973979 chr5 . BED_feature 72779558 72779586 . . . Name=8988052 chr1 . BED_feature 154478561 154478610 . . . Name=9388207 chr11 . BED_feature 32414091 32414122 . . . Name=9388203 chrX . BED_feature 48914870 48915309 . . . Name=7622043 chr7 . BED_feature 100159377 100159408 . . . Name=14741200 chr21 . BED_feature 46842970 46843794 . . . Name=2394738 chr21 . BED_feature 46846619 46846730 . . . Name=2394738 chr3 . BED_feature 134947846 134947876 . . . Name=2911463 chr14 . BED_feature 93924792 93924822 . . . Name=2911463 chr7 . BED_feature 5536824 5536862 . . . Name=2911466 chr11 . BED_feature 6367885 6367915 . . . Name=11788605 chr11 . BED_feature 118463696 118463975 . . . Name=2911469 chr3 . BED_feature 131176178 131176299 . . . Name=7565802 chr4 . BED_feature 100461657 100461748 . . . Name=2050667 chr4 . BED_feature 100493040 100493072 . . . Name=2050667 chr1 . BED_feature 154478094 154478121 . . . Name=8262978 chr11 . BED_feature 119681054 119681704 . . . Name=2905684 chr1 . BED_feature 165456769 165456819 . . . Name=2905684 chr1 . BED_feature 165568327 165568397 . . . Name=2905684 chr1 . BED_feature 165601326 165601430 . . . Name=2905684 chr1 . BED_feature 165607865 165607897 . . . Name=2905684 chr1 . BED_feature 165609968 165610158 . . . Name=2905684 chr1 . BED_feature 165611887 165612018 . . . Name=2905684 chr1 . BED_feature 165619717 165619812 . . . Name=2905684 chr1 . BED_feature 165625446 165625623 . . . Name=2905684 chr1 . BED_feature 165632145 165632288 . . . Name=2905684 chr1 . BED_feature 165633852 165633994 . . . Name=2905684 chr1 . BED_feature 165635045 165635228 . . . Name=2905684 chr1 . BED_feature 165637311 165637418 . . . Name=2905684 chr1 . BED_feature 165647817 165648975 . . . Name=2905684 chr1 . BED_feature 165651359 165651948 . . . Name=2905684 chr5 . BED_feature 135259349 135259383 . . . Name=8663174 chr5 . BED_feature 131437274 131437315 . . . Name=8934574 chr4 . BED_feature 123597231 123597266 . . . Name=8934574 chr9 . BED_feature 21067986 21068019 . . . Name=8934574 chr22 . BED_feature 34102753 34103229 . . . Name=8077238 chr14 . BED_feature 74814956 74814988 . . . Name=11108721 chr8 . BED_feature 128822294 128822324 . . . Name=7539921 chr21 . BED_feature 31953788 31953876 . . . Name=3160582 chr7 . BED_feature 5533943 5533974 . . . Name=16702209 chr7 . BED_feature 5535397 5535430 . . . Name=16702209 chr6 . BED_feature 89042358 89042389 . . . Name=16702209 chr5 . BED_feature 77116719 77117549 . . . Name=16702209 chr5 . BED_feature 131023426 131023456 . . . Name=16702209 chr3 . BED_feature 177178013 177178044 . . . Name=16702209 chr2 . BED_feature 73989308 73989339 . . . Name=16702209 chr2 . BED_feature 130548327 130549162 . . . Name=16702209 chr2 . BED_feature 130936899 130937734 . . . Name=16702209 chr2 . BED_feature 131131045 131131880 . . . Name=16702209 chr2 . BED_feature 131737851 131738686 . . . Name=16702209 chr2 . BED_feature 132100434 132101269 . . . Name=16702209 chr1 . BED_feature 27524805 27524836 . . . Name=16702209 chr9 . BED_feature 6825509 6825538 . . . Name=16702209 chr11 . BED_feature 1780733 1781649 . . . Name=16702209 chr10 . BED_feature 70452768 70452798 . . . Name=16702209 chr22 . BED_feature 14635389 14636224 . . . Name=16702209 chr15 . BED_feature 32872905 32872933 . . . Name=16702209 chr14 . BED_feature 18655050 18655885 . . . Name=16702209 chr14 . BED_feature 19057751 19058586 . . . Name=16702209 chr17 . BED_feature 77093600 77093634 . . . Name=16702209 chr18 . BED_feature 58261273 58261304 . . . Name=16702209 chr16 . BED_feature 54068947 54068977 . . . Name=2174109 chr7 . BED_feature 5533943 5533974 . . . Name=10479057 chr7 . BED_feature 5535397 5535428 . . . Name=10479057 chr6 . BED_feature 89042358 89042389 . . . Name=10479057 chr5 . BED_feature 77116719 77117549 . . . Name=10479057 chr5 . BED_feature 131023426 131023456 . . . Name=10479057 chr3 . BED_feature 177178013 177178044 . . . Name=10479057 chr2 . BED_feature 73989308 73989339 . . . Name=10479057 chr2 . BED_feature 130548327 130549162 . . . Name=10479057 chr2 . BED_feature 130936899 130937734 . . . Name=10479057 chr2 . BED_feature 131131045 131131880 . . . Name=10479057 chr2 . BED_feature 131737851 131738686 . . . Name=10479057 chr2 . BED_feature 132100434 132101269 . . . Name=10479057 chr1 . BED_feature 27524805 27524836 . . . Name=10479057 chr9 . BED_feature 6825509 6825538 . . . Name=10479057 chr11 . BED_feature 1780733 1781649 . . . Name=10479057 chr10 . BED_feature 70452768 70452798 . . . Name=10479057 chr22 . BED_feature 14635389 14636224 . . . Name=10479057 chr15 . BED_feature 32872905 32872933 . . . Name=10479057 chr14 . BED_feature 18655050 18655885 . . . Name=10479057 chr14 . BED_feature 19057751 19058586 . . . Name=10479057 chr17 . BED_feature 77093600 77093634 . . . Name=10479057 chr18 . BED_feature 58261273 58261304 . . . Name=10479057 chr2 . BED_feature 1390689 1390921 . . . Name=2174102 chr1 . BED_feature 154478088 154478117 . . . Name=1662118 chr14 . BED_feature 22947448 22947476 . . . Name=1662118 chr12 . BED_feature 111900464 111900728 . . . Name=10524248 chr11 . BED_feature 13474243 13474272 . . . Name=15297458 chr10 . BED_feature 45188603 45189766 . . . Name=2251250 chr1 . BED_feature 17317541 17317569 . . . Name=15854045 chr1 . BED_feature 17318599 17318670 . . . Name=15854045 chr5 . BED_feature 132037382 132037410 . . . Name=9013959 chr4 . BED_feature 123597349 123597378 . . . Name=9013959 chr12 . BED_feature 46521661 46525058 . . . Name=2835767 chr12 . BED_feature 46526385 46526861 . . . Name=2835767 chr12 . BED_feature 46535680 46535854 . . . Name=2835767 chr12 . BED_feature 46537179 46537738 . . . Name=2835767 chr12 . BED_feature 46545097 46545230 . . . Name=2835767 chr12 . BED_feature 46559017 46559168 . . . Name=2835767 chr12 . BED_feature 46562743 46562827 . . . Name=2835767 chr12 . BED_feature 46585005 46585036 . . . Name=2835767 chr17 . BED_feature 77217047 77217081 . . . Name=2835767 chr19 . BED_feature 11061107 11061137 . . . Name=12947119 chr4 . BED_feature 15549014 15549042 . . . Name=9668098 chr14 . BED_feature 22095159 22095319 . . . Name=1534408 chr14 . BED_feature 74815207 74815235 . . . Name=1534408 chr1 . BED_feature 2448790 2448825 . . . Name=14757642 chr1 . BED_feature 119759168 119759197 . . . Name=10406460 chr7 . BED_feature 93862155 93862182 . . . Name=8900150 chr17 . BED_feature 16666722 16666790 . . . Name=1703506 chr17 . BED_feature 18294024 18294092 . . . Name=1703506 chr17 . BED_feature 20338189 20338319 . . . Name=1703506 chr17 . BED_feature 36996741 36996916 . . . Name=1703506 chr4 . BED_feature 55686549 55686584 . . . Name=12560084 chr13 . BED_feature 47952182 47952213 . . . Name=1406625 chr3 . BED_feature 134944269 134944298 . . . Name=1851757 chr3 . BED_feature 134947818 134948026 . . . Name=1851757 chr6 . BED_feature 32515576 32515609 . . . Name=8943243 chr6 . BED_feature 33656082 33656117 . . . Name=11850816 chr12 . BED_feature 52060303 52060349 . . . Name=11294852 chr1 . BED_feature 151269443 151269610 . . . Name=8388378 chr7 . BED_feature 55054353 55054388 . . . Name=10830317 chr17 . BED_feature 23928235 23928263 . . . Name=8348972 chr18 . BED_feature 59138135 59138165 . . . Name=12970736 chr13 . BED_feature 102516652 102516690 . . . Name=12055195 chr13 . BED_feature 102518744 102518897 . . . Name=12055195 chr11 . BED_feature 5227701 5227739 . . . Name=9763579 chr11 . BED_feature 5232625 5232663 . . . Name=9763579 chr16 . BED_feature 162928 162961 . . . Name=9763579 chr16 . BED_feature 166732 166765 . . . Name=9763579 chr10 . BED_feature 59815102 59815201 . . . Name=8108407 chr5 . BED_feature 139993037 139993066 . . . Name=7522257 chr7 . BED_feature 116099209 116099369 . . . Name=8633043 chr14 . BED_feature 74814952 74815012 . . . Name=3561415 chrX . BED_feature 139414745 139414777 . . . Name=15656994 chr9 . BED_feature 89532338 89532368 . . . Name=11742542 chr1 . BED_feature 120737495 120737582 . . . Name=8035786 chr1 . BED_feature 147635803 147635890 . . . Name=8035786 chr1 . BED_feature 148020759 148020846 . . . Name=8035786 chr14 . BED_feature 21999475 21999519 . . . Name=1328863 chr3 . BED_feature 126434266 126435864 . . . Name=8355710 chr3 . BED_feature 126479256 126479345 . . . Name=8355710 chr3 . BED_feature 126480656 126480781 . . . Name=8355710 chr3 . BED_feature 126489637 126489762 . . . Name=8355710 chr3 . BED_feature 126514837 126515191 . . . Name=8355710 chr3 . BED_feature 126524842 126524980 . . . Name=8355710 chr3 . BED_feature 126532691 126532773 . . . Name=8355710 chr3 . BED_feature 126576657 126576781 . . . Name=8355710 chr1 . BED_feature 198644523 198644626 . . . Name=8355710 chr7 . BED_feature 5534002 5534623 . . . Name=8939459 chr6 . BED_feature 46281347 46281734 . . . Name=8939459 chr6 . BED_feature 89042423 89042712 . . . Name=8939459 chr5 . BED_feature 15504844 15504873 . . . Name=8939459 chr5 . BED_feature 61163679 61163733 . . . Name=8939459 chr5 . BED_feature 77117197 77117492 . . . Name=8939459 chr5 . BED_feature 79631359 79631581 . . . Name=8939459 chr5 . BED_feature 97703199 97703252 . . . Name=8939459 chr3 . BED_feature 12087412 12087591 . . . Name=8939459 chr3 . BED_feature 140696030 140696413 . . . Name=8939459 chr3 . BED_feature 177178243 177178299 . . . Name=8939459 chr3 . BED_feature 182021772 182021993 . . . Name=8939459 chr2 . BED_feature 73995379 73995432 . . . Name=8939459 chr2 . BED_feature 73997332 73997392 . . . Name=8939459 chr2 . BED_feature 113258478 113258678 . . . Name=8939459 chr2 . BED_feature 130548384 130548798 . . . Name=8939459 chr2 . BED_feature 130936956 130937370 . . . Name=8939459 chr2 . BED_feature 131131409 131131823 . . . Name=8939459 chr2 . BED_feature 131738215 131738629 . . . Name=8939459 chr2 . BED_feature 132100799 132101212 . . . Name=8939459 chr2 . BED_feature 177199803 177199832 . . . Name=8939459 chr1 . BED_feature 27524782 27524811 . . . Name=8939459 chr1 . BED_feature 78012360 78012539 . . . Name=8939459 chr1 . BED_feature 103914372 103914667 . . . Name=8939459 chr1 . BED_feature 222118160 222118387 . . . Name=8939459 chr1 . BED_feature 227634432 227634490 . . . Name=8939459 chr1 . BED_feature 236157434 236157485 . . . Name=8939459 chr8 . BED_feature 86024151 86024198 . . . Name=8939459 chr9 . BED_feature 6825150 6825481 . . . Name=8939459 chr9 . BED_feature 102534313 102534359 . . . Name=8939459 chrX . BED_feature 46032663 46032719 . . . Name=8939459 chrX . BED_feature 53188785 53189155 . . . Name=8939459 chr11 . BED_feature 1780968 1781216 . . . Name=8939459 chr10 . BED_feature 90689315 90689371 . . . Name=8939459 chr22 . BED_feature 14635562 14635859 . . . Name=8939459 chr22 . BED_feature 39800217 39800503 . . . Name=8939459 chrY . BED_feature 18378427 18378484 . . . Name=8939459 chrY . BED_feature 18770073 18770130 . . . Name=8939459 chr15 . BED_feature 32871654 32871766 . . . Name=8939459 chr15 . BED_feature 42068657 42068877 . . . Name=8939459 chr15 . BED_feature 81192522 81192565 . . . Name=8939459 chr14 . BED_feature 18655414 18655712 . . . Name=8939459 chr14 . BED_feature 19057924 19058221 . . . Name=8939459 chr17 . BED_feature 17086478 17086530 . . . Name=8939459 chr17 . BED_feature 77092374 77092935 . . . Name=8939459 chr19 . BED_feature 9490689 9490921 . . . Name=8939459 chr18 . BED_feature 58261016 58261239 . . . Name=8939459 chr7 . BED_feature 100556367 100556452 . . . Name=10092624 chr4 . BED_feature 55686312 55686706 . . . Name=15941713 chr22 . BED_feature 37971040 37971068 . . . Name=2651898 chr7 . BED_feature 99166660 99166694 . . . Name=16171783 chr7 . BED_feature 99204179 99204208 . . . Name=16171783 chr7 . BED_feature 99215593 99215627 . . . Name=16171783 chr5 . BED_feature 174803081 174803675 . . . Name=1557411 chr11 . BED_feature 5227728 5227786 . . . Name=9792700 chr11 . BED_feature 5232652 5232710 . . . Name=9792700 chrX . BED_feature 37524127 37524187 . . . Name=9792700 chr6 . BED_feature 32515518 32515571 . . . Name=1956787 chr6 . BED_feature 32549431 32549476 . . . Name=1956787 chr6 . BED_feature 32606137 32606182 . . . Name=1956787 chr6 . BED_feature 32665654 32665699 . . . Name=1956787 chr6 . BED_feature 32713040 32713089 . . . Name=1956787 chr6 . BED_feature 32742504 32742540 . . . Name=1956787 chr6 . BED_feature 32839379 32839415 . . . Name=1956787 chr6 . BED_feature 33151596 33151641 . . . Name=1956787 chr6 . BED_feature 33188070 33188115 . . . Name=1956787 chr4 . BED_feature 74488495 74488536 . . . Name=2571419 chr14 . BED_feature 93924752 93924784 . . . Name=2571419 chr7 . BED_feature 5535763 5535811 . . . Name=8647842 chr5 . BED_feature 77116470 77116518 . . . Name=8647842 chr2 . BED_feature 130937935 130937983 . . . Name=8647842 chr2 . BED_feature 131737602 131737650 . . . Name=8647842 chr1 . BED_feature 222119125 222119173 . . . Name=8647842 chr9 . BED_feature 6824458 6824505 . . . Name=8647842 chr14 . BED_feature 20429814 20429854 . . . Name=8647842 chr14 . BED_feature 20494020 20494067 . . . Name=8647842 chr9 . BED_feature 21068007 21068050 . . . Name=10848607 chr17 . BED_feature 7520608 7520634 . . . Name=10942770 chr1 . BED_feature 67925042 67925068 . . . Name=10942770 chr17 . BED_feature 73695041 73695086 . . . Name=9374541 chr11 . BED_feature 2139937 2139969 . . . Name=7639703 chr1 . BED_feature 184916222 184916248 . . . Name=12914528 chr4 . BED_feature 175649784 175649813 . . . Name=12914529 chr4 . BED_feature 175650945 175651026 . . . Name=12914529 chr4 . BED_feature 175653285 175653325 . . . Name=12914529 chr4 . BED_feature 175666423 175666513 . . . Name=12914529 chr4 . BED_feature 175675715 175675787 . . . Name=12914529 chr4 . BED_feature 175679675 175679704 . . . Name=12914529 chr4 . BED_feature 175682130 175682169 . . . Name=12914529 chr1 . BED_feature 167865993 167866032 . . . Name=7693674 chr8 . BED_feature 57521754 57521785 . . . Name=2903436 chr3 . BED_feature 188870905 188870949 . . . Name=2903436 chr14 . BED_feature 74814952 74815007 . . . Name=2903436 chr22 . BED_feature 38248081 38248109 . . . Name=10667576 chr6 . BED_feature 31891277 31891343 . . . Name=3185540 chr14 . BED_feature 23071810 23071877 . . . Name=1719379 chr16 . BED_feature 71378562 71380251 . . . Name=1719379 chr16 . BED_feature 71384655 71390115 . . . Name=1719379 chr16 . BED_feature 71391427 71391530 . . . Name=1719379 chr16 . BED_feature 71402975 71403440 . . . Name=1719379 chr16 . BED_feature 71421179 71421262 . . . Name=1719379 chr16 . BED_feature 71481131 71481364 . . . Name=1719379 chr16 . BED_feature 71541869 71542365 . . . Name=1719379 chr16 . BED_feature 71650003 71650035 . . . Name=1719379 chr8 . BED_feature 77782583 77782774 . . . Name=1719379 chr8 . BED_feature 77939157 77939199 . . . Name=1719379 chr15 . BED_feature 32875132 32875172 . . . Name=3185542 chr6 . BED_feature 31891250 31891297 . . . Name=7891680 chr6 . BED_feature 160852091 160852152 . . . Name=8051057 chr6 . BED_feature 161005298 161005359 . . . Name=8051057 chr6 . BED_feature 161043165 161043237 . . . Name=8051057 chr6 . BED_feature 161114848 161114920 . . . Name=8051057 chr2 . BED_feature 87102507 87102536 . . . Name=8051057 chr2 . BED_feature 87828663 87828698 . . . Name=8051057 chr2 . BED_feature 106364917 106364971 . . . Name=8051057 chr19 . BED_feature 48747327 48747708 . . . Name=16596326 chr3 . BED_feature 49041758 49042120 . . . Name=9278455 chr8 . BED_feature 128815946 128816007 . . . Name=2211718 chr10 . BED_feature 75339386 75339416 . . . Name=9482739 chr10 . BED_feature 75339386 75339418 . . . Name=10381567 chr2 . BED_feature 113313572 113313625 . . . Name=7935442 chr6 . BED_feature 31891220 31891298 . . . Name=2294402 chr6 . BED_feature 31903416 31903493 . . . Name=2294402 chr11 . BED_feature 117692799 117692833 . . . Name=9233811 chr1 . BED_feature 148070780 148070820 . . . Name=8475055 chr1 . BED_feature 148099374 148099414 . . . Name=8475055 chr2 . BED_feature 10505826 10507350 . . . Name=1598217 chr6 . BED_feature 31433069 31433100 . . . Name=11087747 chr1 . BED_feature 55454214 55454275 . . . Name=2105456 chr15 . BED_feature 41590466 41590493 . . . Name=12411430 chr5 . BED_feature 131854278 131855640 . . . Name=7678055 chr11 . BED_feature 303990 304023 . . . Name=7678055 chr1 . BED_feature 27871382 27871462 . . . Name=7678055 chr17 . BED_feature 77649442 77649508 . . . Name=10759542 chr11 . BED_feature 100504117 100504150 . . . Name=1326555 chr17 . BED_feature 35740997 35741025 . . . Name=1326555 chr3 . BED_feature 25680705 25680732 . . . Name=12197834 chr3 . BED_feature 197293366 197293455 . . . Name=2211668 chr1 . BED_feature 16713404 16713597 . . . Name=2211668 chr1 . BED_feature 16866067 16866259 . . . Name=2211668 chr1 . BED_feature 16939369 16939545 . . . Name=2211668 chr1 . BED_feature 17094833 17095009 . . . Name=2211668 chr1 . BED_feature 142465001 142465030 . . . Name=2211668 chr1 . BED_feature 144680989 144681018 . . . Name=2211668 chr1 . BED_feature 145023126 145023155 . . . Name=2211668 chr1 . BED_feature 145977990 145978019 . . . Name=2211668 chr1 . BED_feature 146202148 146202177 . . . Name=2211668 chr1 . BED_feature 146327615 146327644 . . . Name=2211668 chr1 . BED_feature 147491061 147491090 . . . Name=2211668 chr10 . BED_feature 75338917 75338950 . . . Name=9295342 chr2 . BED_feature 1390805 1390838 . . . Name=1922026 chr17 . BED_feature 29636806 29636846 . . . Name=11076795 chr17 . BED_feature 39822517 39822558 . . . Name=9305885 chr19 . BED_feature 47291339 47291924 . . . Name=1967834 chr11 . BED_feature 119681054 119681704 . . . Name=1967834 chr1 . BED_feature 165568333 165568397 . . . Name=1967834 chr1 . BED_feature 165601333 165601380 . . . Name=1967834 chr1 . BED_feature 165606041 165606075 . . . Name=1967834 chr1 . BED_feature 165607799 165607887 . . . Name=1967834 chr1 . BED_feature 165610013 165610157 . . . Name=1967834 chr1 . BED_feature 165611903 165611983 . . . Name=1967834 chr1 . BED_feature 165619742 165619800 . . . Name=1967834 chr1 . BED_feature 165625446 165625623 . . . Name=1967834 chr1 . BED_feature 165632145 165632288 . . . Name=1967834 chr1 . BED_feature 165633852 165633994 . . . Name=1967834 chr1 . BED_feature 165635119 165635173 . . . Name=1967834 chr1 . BED_feature 165637311 165637397 . . . Name=1967834 chr1 . BED_feature 165647831 165648975 . . . Name=1967834 chr1 . BED_feature 165651373 165651799 . . . Name=1967834 chrX . BED_feature 146800431 146801657 . . . Name=9328468 chr5 . BED_feature 137828678 137828706 . . . Name=10050673 chr11 . BED_feature 5248170 5248250 . . . Name=8196619 chr7 . BED_feature 97339598 97339755 . . . Name=8098842 chr8 . BED_feature 47648440 47648477 . . . Name=8098842 chr11 . BED_feature 116213773 116213811 . . . Name=2254327 chr22_random . BED_feature 13235 13273 . . . Name=2254327 chr2 . BED_feature 136592147 136592180 . . . Name=9468539 chr8 . BED_feature 31041349 31041376 . . . Name=9774636 chr6 . BED_feature 36754237 36754267 . . . Name=10899165 chr10 . BED_feature 80990400 80990429 . . . Name=8770068 chr10 . BED_feature 81310345 81310374 . . . Name=8770068 chr7 . BED_feature 100530838 100530867 . . . Name=14963043 chr7 . BED_feature 100538832 100538860 . . . Name=14963043 chr7 . BED_feature 100546038 100546066 . . . Name=14963043 chr7 . BED_feature 100552574 100552602 . . . Name=14963043 chr1 . BED_feature 228916451 228916637 . . . Name=9120024 chr14 . BED_feature 69333742 69333779 . . . Name=11031103 chr12 . BED_feature 102848232 102848267 . . . Name=7891720 chr9 . BED_feature 127043548 127043582 . . . Name=7891720 chr19 . BED_feature 10242284 10242711 . . . Name=11278281 chr7 . BED_feature 27135514 27135556 . . . Name=1346761 chr7 . BED_feature 27151872 27152020 . . . Name=1346761 chr7 . BED_feature 27161183 27161337 . . . Name=1346761 chr12 . BED_feature 52691283 52691317 . . . Name=1346761 chr12 . BED_feature 52709751 52715423 . . . Name=1346761 chr17 . BED_feature 44009180 44009226 . . . Name=1346761 chr17 . BED_feature 44024628 44024671 . . . Name=1346761 chr17 . BED_feature 44028844 44028890 . . . Name=1346761 chr17 . BED_feature 44045684 44045736 . . . Name=1346761 chr2 . BED_feature 176725737 176725784 . . . Name=1346761 chr13 . BED_feature 27396545 27396591 . . . Name=1346761 chr11 . BED_feature 5227820 5227865 . . . Name=8662744 chr11 . BED_feature 5232744 5232789 . . . Name=8662744 chr2 . BED_feature 85748903 85748942 . . . Name=8687389 chr11 . BED_feature 69164860 69165095 . . . Name=11024050 chr15 . BED_feature 42790871 42790904 . . . Name=11024050 chr1 . BED_feature 151596551 151596591 . . . Name=12167632 chr12 . BED_feature 111829066 111829297 . . . Name=2456211 chr11 . BED_feature 32405321 32405350 . . . Name=9361007 chr4 . BED_feature 123597349 123597378 . . . Name=8468470 chr9 . BED_feature 124630643 124630672 . . . Name=10899582 chr17 . BED_feature 6840199 6840229 . . . Name=9164849 chr11 . BED_feature 67107744 67107826 . . . Name=9540834 chr12 . BED_feature 111829116 111829152 . . . Name=2243138 chr11 . BED_feature 303984 304028 . . . Name=2243138 chr15 . BED_feature 42790853 42790899 . . . Name=2243138 chr1 . BED_feature 27871372 27871421 . . . Name=2243138 chr14 . BED_feature 66896773 66896808 . . . Name=8327497 chr8 . BED_feature 128817144 128817192 . . . Name=2498322 chr4 . BED_feature 74520899 74520930 . . . Name=12167706 chr1 . BED_feature 151145505 151145545 . . . Name=11850802 chr3 . BED_feature 197293420 197293452 . . . Name=12439744 chr5 . BED_feature 1348962 1348990 . . . Name=10805720 chr6 . BED_feature 32515576 32515609 . . . Name=9857002 chr12 . BED_feature 66839928 66839961 . . . Name=9857002 chr15 . BED_feature 32875087 32875160 . . . Name=1570331 chr19 . BED_feature 46551778 46551809 . . . Name=1419910 chr14 . BED_feature 74815179 74815210 . . . Name=1419910 chr2 . BED_feature 37237627 37237664 . . . Name=9007065 chr17 . BED_feature 59304593 59304709 . . . Name=2983311 chr17 . BED_feature 59312780 59312896 . . . Name=2983311 chr17 . BED_feature 59327490 59327606 . . . Name=2983311 chr17 . BED_feature 59342176 59342291 . . . Name=2983311 chr17 . BED_feature 59349755 59349997 . . . Name=2983311 chr20 . BED_feature 33223227 33223554 . . . Name=12560236 chr11 . BED_feature 2139186 2139263 . . . Name=8216223 chr6 . BED_feature 32929569 32929603 . . . Name=8617938 chr1 . BED_feature 227637707 227637741 . . . Name=7753622 chr6 . BED_feature 32515534 32515582 . . . Name=1903200 chr6 . BED_feature 32742550 32742590 . . . Name=1903200 chr21 . BED_feature 43132721 43132757 . . . Name=9873055 chr21 . BED_feature 45165276 45165326 . . . Name=9873055 chr9 . BED_feature 112059028 112059075 . . . Name=11279008 chr5 . BED_feature 142763773 142763812 . . . Name=1894621 chr3 . BED_feature 25444699 25444727 . . . Name=12133007 chr17 . BED_feature 7531625 7531657 . . . Name=11032029 chr19 . BED_feature 10242221 10242349 . . . Name=7532665 chr11 . BED_feature 101906779 101906820 . . . Name=10514384 chr2 . BED_feature 15998067 15998098 . . . Name=9233765 chr1 . BED_feature 100956790 100957652 . . . Name=11590177 chr19 . BED_feature 45471156 45471341 . . . Name=11948187 chr19 . BED_feature 45472648 45472677 . . . Name=11948187 chr3 . BED_feature 30622937 30622975 . . . Name=9694866 chr19 . BED_feature 48382520 48382548 . . . Name=9083102 chr11 . BED_feature 118463734 118463762 . . . Name=9737995 chr1 . BED_feature 202407712 202407751 . . . Name=9737995 chr6 . BED_feature 32515526 32515556 . . . Name=10982343 chr15 . BED_feature 88159424 88159454 . . . Name=9786929 chr11 . BED_feature 63824993 63825022 . . . Name=16024613 chr11 . BED_feature 63829032 63829062 . . . Name=16024613 chr21 . BED_feature 42660038 42660066 . . . Name=16024613 chr10 . BED_feature 75338940 75339417 . . . Name=9482740 chr11 . BED_feature 5255942 5256828 . . . Name=6897566 chr20 . BED_feature 42708281 42708453 . . . Name=1508212 chr2 . BED_feature 21123157 21123191 . . . Name=1939218 chr20 . BED_feature 47696918 47696945 . . . Name=15263012 chr6 . BED_feature 12398431 12398463 . . . Name=8833653 chr7 . BED_feature 5534742 5534772 . . . Name=15217903 chr22 . BED_feature 14635980 14636009 . . . Name=15217903 chr2 . BED_feature 130548918 130548947 . . . Name=15217903 chr2 . BED_feature 130937490 130937519 . . . Name=15217903 chr2 . BED_feature 131131260 131131289 . . . Name=15217903 chr2 . BED_feature 131738066 131738095 . . . Name=15217903 chr15 . BED_feature 42069177 42069206 . . . Name=15217903 chr14 . BED_feature 18655265 18655294 . . . Name=15217903 chr14 . BED_feature 19058342 19058371 . . . Name=15217903 chr11 . BED_feature 18024443 18024482 . . . Name=9645961 chr14 . BED_feature 74814930 74814993 . . . Name=7588632 chr16 . BED_feature 31178724 31178757 . . . Name=9295357 chr1 . BED_feature 151805760 151805864 . . . Name=9481475 chr12 . BED_feature 4253266 4253295 . . . Name=11719506 chr11 . BED_feature 123106707 123106844 . . . Name=12611910 chr2 . BED_feature 217268557 217268956 . . . Name=11973331 chr17 . BED_feature 59307442 59307479 . . . Name=14673137 chr17 . BED_feature 59315190 59315228 . . . Name=14673137 chr17 . BED_feature 59329989 59330029 . . . Name=14673137 chr17 . BED_feature 59344719 59344758 . . . Name=14673137 chr17 . BED_feature 59377580 59378017 . . . Name=14673137 chr17 . BED_feature 45634046 45634202 . . . Name=7590335 chr14 . BED_feature 22947835 22947866 . . . Name=8416951 chr17 . BED_feature 40349936 40349985 . . . Name=1918004 chr4 . BED_feature 74825038 74825076 . . . Name=2250017 chr12 . BED_feature 52060150 52060190 . . . Name=12513689 chr11 . BED_feature 46696388 46696487 . . . Name=1918008 chr14 . BED_feature 93924742 93924782 . . . Name=1918008 chr12 . BED_feature 51476290 51476355 . . . Name=7525574 chr6 . BED_feature 32515513 32515556 . . . Name=2016543 chr8 . BED_feature 56954441 56955182 . . . Name=1508184 chr6 . BED_feature 27899786 27899820 . . . Name=8336726 chr6 . BED_feature 27907346 27907380 . . . Name=8336726 chr9 . BED_feature 21068001 21068044 . . . Name=1898993 chr14 . BED_feature 22095176 22095205 . . . Name=8196665 chr7 . BED_feature 5534742 5534772 . . . Name=16339564 chr22 . BED_feature 14635980 14636009 . . . Name=16339564 chr2 . BED_feature 130548918 130548947 . . . Name=16339564 chr2 . BED_feature 130937490 130937519 . . . Name=16339564 chr2 . BED_feature 131131260 131131289 . . . Name=16339564 chr2 . BED_feature 131738066 131738095 . . . Name=16339564 chr15 . BED_feature 42069177 42069206 . . . Name=16339564 chr14 . BED_feature 18655265 18655294 . . . Name=16339564 chr14 . BED_feature 19058342 19058371 . . . Name=16339564 chr5 . BED_feature 132037276 132037307 . . . Name=1541828 chr17 . BED_feature 37121995 37122111 . . . Name=2187875 chr17 . BED_feature 45634910 45635219 . . . Name=8175678 chr1 . BED_feature 938617 938651 . . . Name=7518927 chr1 . BED_feature 89303582 89303611 . . . Name=7518927 chr1 . BED_feature 89645725 89645754 . . . Name=7518927 chr1 . BED_feature 120737547 120737587 . . . Name=7518927 chr1 . BED_feature 147635798 147635838 . . . Name=7518927 chr1 . BED_feature 148020754 148020792 . . . Name=7518927 chr14 . BED_feature 74814956 74814988 . . . Name=8756667 chr1 . BED_feature 119759219 119759250 . . . Name=9065466 chr4 . BED_feature 89115428 89115840 . . . Name=15479859 chr12 . BED_feature 6513464 6513878 . . . Name=2164673 chr4 . BED_feature 72078087 72078236 . . . Name=14514691 chr11 . BED_feature 5247785 5248022 . . . Name=2017165 chr17 . BED_feature 38306150 38306188 . . . Name=14597389 chr17 . BED_feature 59327756 59327785 . . . Name=8294429 chr2 . BED_feature 210888129 210888286 . . . Name=3405213 chrX . BED_feature 47327470 47327515 . . . Name=11032844 chr12 . BED_feature 46537652 46537683 . . . Name=15456860 chr12 . BED_feature 46559132 46559163 . . . Name=15456860 chrX . BED_feature 47381398 47381456 . . . Name=8386592 chr6 . BED_feature 18472237 18473222 . . . Name=8861962 chr5 . BED_feature 98043412 98043638 . . . Name=8861962 chr2 . BED_feature 118293736 118293797 . . . Name=8861962 chr2 . BED_feature 118295288 118295330 . . . Name=8861962 chr2 . BED_feature 118299493 118299589 . . . Name=8861962 chr2 . BED_feature 118303369 118303415 . . . Name=8861962 chr11 . BED_feature 129670571 129670813 . . . Name=8861962 chr10 . BED_feature 92803203 92804189 . . . Name=8861962 chr15 . BED_feature 57951591 57952578 . . . Name=8861962 chr14 . BED_feature 68620264 68621288 . . . Name=8861962 chr17 . BED_feature 4795692 4795723 . . . Name=7565752 chr11 . BED_feature 2139123 2139152 . . . Name=12368292 chr5 . BED_feature 131854464 131854496 . . . Name=9368052 chr17 . BED_feature 7531792 7531822 . . . Name=9368052 chr1 . BED_feature 94780075 94780113 . . . Name=9867853 chr10 . BED_feature 6281228 6281257 . . . Name=15466858 chr10 . BED_feature 6283879 6283906 . . . Name=15466858 chr12 . BED_feature 20854815 20854844 . . . Name=12055601 chr1 . BED_feature 3639476 3639508 . . . Name=12080043 chr11 . BED_feature 5258554 5258587 . . . Name=7937919 chr15 . BED_feature 32875014 32875470 . . . Name=2796988 chr11 . BED_feature 5202390 5202423 . . . Name=1946439 chr22 . BED_feature 37970961 37971036 . . . Name=8662647 chr4 . BED_feature 74953830 74954108 . . . Name=7479086 chr4 . BED_feature 75028916 75029081 . . . Name=7479086 chr4 . BED_feature 75123137 75123400 . . . Name=7479086 chr4 . BED_feature 75183646 75183902 . . . Name=7479086 chr1 . BED_feature 205186280 205187034 . . . Name=9182878 chr2 . BED_feature 8739419 8739559 . . . Name=14761970 chr15 . BED_feature 48345224 48345254 . . . Name=10409643 chr19 . BED_feature 46551982 46552060 . . . Name=11053476 chr15 . BED_feature 48345250 48345309 . . . Name=16357063 chr12 . BED_feature 48630223 48630839 . . . Name=9277587 chr4 . BED_feature 123597346 123597384 . . . Name=7517940 chr14 . BED_feature 22095240 22095269 . . . Name=7517940 chr5 . BED_feature 142795002 142795489 . . . Name=15044598 chr10 . BED_feature 8137503 8137861 . . . Name=1871134 chr10 . BED_feature 8140274 8140733 . . . Name=1871134 chr10 . BED_feature 8146028 8146107 . . . Name=1871134 chr10 . BED_feature 8151499 8151561 . . . Name=1871134 chr10 . BED_feature 8155749 8155994 . . . Name=1871134 chr3 . BED_feature 129682556 129683405 . . . Name=1871134 chr14 . BED_feature 21999513 21999547 . . . Name=1871134 chr14 . BED_feature 22095234 22095269 . . . Name=1871134 chr7 . BED_feature 107318887 107318916 . . . Name=1332063 chr7 . BED_feature 73080031 73080095 . . . Name=10429948 chr6 . BED_feature 152167452 152167479 . . . Name=15367686 chr13 . BED_feature 71394397 71394424 . . . Name=4039788 chr17 . BED_feature 31455515 31457004 . . . Name=1894635 chr17 . BED_feature 31562760 31564270 . . . Name=1894635 chr17 . BED_feature 31664326 31665836 . . . Name=1894635 chr17_random . BED_feature 1242289 1243799 . . . Name=1894635 chr11 . BED_feature 56914780 56914815 . . . Name=10438731 chr2 . BED_feature 182029788 182029822 . . . Name=8195215 chr10 . BED_feature 6148031 6148063 . . . Name=10594041 chr6 . BED_feature 32515523 32515566 . . . Name=1709740 chr6 . BED_feature 33149492 33149520 . . . Name=1709740 chr1 . BED_feature 27113298 27113401 . . . Name=14627819 chr19 . BED_feature 47724402 47724778 . . . Name=8910434 chr5 . BED_feature 137695410 137695439 . . . Name=9396797 chr4 . BED_feature 74921136 74922824 . . . Name=7929219 chr4 . BED_feature 75081444 75083546 . . . Name=7929219 chr14 . BED_feature 74814953 74814992 . . . Name=1945851 chr3 . BED_feature 46370269 46370476 . . . Name=9988701 chr3_random . BED_feature 648541 648748 . . . Name=9988701 chr19 . BED_feature 44920682 44920916 . . . Name=8400237 chr6 . BED_feature 31651257 31651286 . . . Name=8376940 chrX . BED_feature 114159734 114159767 . . . Name=12816724 chr8 . BED_feature 128817590 128817629 . . . Name=2524830 chr5 . BED_feature 43349215 43349642 . . . Name=9604010 chr8 . BED_feature 11697453 11697753 . . . Name=9604010 chr10 . BED_feature 90740303 90740383 . . . Name=10022897 chr5 . BED_feature 137828634 137828672 . . . Name=10806199 chr14 . BED_feature 101841354 101841385 . . . Name=15327990 chr10 . BED_feature 44201421 44201453 . . . Name=15808852 chr11 . BED_feature 14950631 14950660 . . . Name=8816445 chr9 . BED_feature 21067979 21068014 . . . Name=2536920 chrX . BED_feature 37523962 37524023 . . . Name=9801155 chr16 . BED_feature 4247189 4247551 . . . Name=7933101 chr19 . BED_feature 34993943 34994211 . . . Name=11919196 chr2 . BED_feature 119580526 119580552 . . . Name=8790425 chr15 . BED_feature 71426297 71426323 . . . Name=8790425 chr4 . BED_feature 68303209 68303255 . . . Name=12538612 chr4 . BED_feature 68304322 68304355 . . . Name=12538612 chr5 . BED_feature 131854472 131854502 . . . Name=8306959 chrX . BED_feature 47394500 47394719 . . . Name=9880555 chr2 . BED_feature 104839655 104839708 . . . Name=1979677 chr1 . BED_feature 38283896 38284447 . . . Name=1979677 chr19 . BED_feature 11061107 11061136 . . . Name=12235180 chr2 . BED_feature 201806432 201806506 . . . Name=12748179 chr2 . BED_feature 234318981 234319013 . . . Name=12566446 chr2 . BED_feature 234330339 234330368 . . . Name=12566446 chr19 . BED_feature 46312000 46312030 . . . Name=15860659 chr6 . BED_feature 31651200 31651239 . . . Name=8552071 chr4 . BED_feature 68304322 68304356 . . . Name=10772899 chr16 . BED_feature 31273885 31274003 . . . Name=8649405 chr14 . BED_feature 79747956 79747985 . . . Name=10614643 chr5 . BED_feature 131437180 131437349 . . . Name=2838738 chr11 . BED_feature 5258554 5258587 . . . Name=9195958 chr5 . BED_feature 131907200 131907240 . . . Name=9195954 chr4 . BED_feature 123597348 123597383 . . . Name=9195954 chr5 . BED_feature 112101286 112101326 . . . Name=16150893 chr2 . BED_feature 127768230 127768259 . . . Name=1741247 chr10 . BED_feature 17310525 17310564 . . . Name=2922288 chr19 . BED_feature 3559878 3559949 . . . Name=8702673 chr19 . BED_feature 2200272 2200331 . . . Name=10993829 chr11 . BED_feature 5227695 5227882 . . . Name=7684493 chr11 . BED_feature 5232619 5232806 . . . Name=7684493 chr11 . BED_feature 102250958 102251015 . . . Name=11444842 chr10 . BED_feature 31648170 31648227 . . . Name=8138542 chr10 . BED_feature 31790067 31790113 . . . Name=8138542 chr10 . BED_feature 31839606 31839721 . . . Name=8138542 chr10 . BED_feature 31849360 31850420 . . . Name=8138542 chr10 . BED_feature 31855840 31855881 . . . Name=8138542 chr1 . BED_feature 116717290 116717322 . . . Name=8138542 chr21 . BED_feature 43659943 43660006 . . . Name=8138542 chr6 . BED_feature 37244968 37244997 . . . Name=10068671 chr10 . BED_feature 6148028 6148065 . . . Name=10068671 chr10 . BED_feature 6144520 6144547 . . . Name=2497520 chr7 . BED_feature 100156091 100156279 . . . Name=2387842 chr7 . BED_feature 142216839 142216875 . . . Name=1409722 chr18 . BED_feature 58946947 58946974 . . . Name=12086670 chr17 . BED_feature 7474037 7474067 . . . Name=9852068 chr20 . BED_feature 31737399 31739058 . . . Name=7958836 chr8 . BED_feature 59573683 59574907 . . . Name=10869351 chrX . BED_feature 37524132 37524171 . . . Name=10869351 chr6 . BED_feature 32920139 32920168 . . . Name=9632673 chr9 . BED_feature 21068005 21068033 . . . Name=12077266 chr6 . BED_feature 32114039 32114072 . . . Name=2162843 chr17 . BED_feature 29603572 29604369 . . . Name=8051410 chr17 . BED_feature 29606271 29606521 . . . Name=8051410 chr12 . BED_feature 6513784 6513814 . . . Name=11955624 chr1 . BED_feature 167969973 167970010 . . . Name=10964678 chr11 . BED_feature 67107757 67107830 . . . Name=8557630 chr7 . BED_feature 45891667 45891703 . . . Name=8776721 chr6 . BED_feature 87861615 87861646 . . . Name=12527202 chr5 . BED_feature 153837898 153838113 . . . Name=12527202 chr12 . BED_feature 52091276 52091305 . . . Name=15955096 chr3 . BED_feature 132096090 132096297 . . . Name=15955096 chr3 . BED_feature 132155383 132155411 . . . Name=15955096 chr12 . BED_feature 66839961 66839994 . . . Name=8228802 chr14 . BED_feature 22095221 22095259 . . . Name=2388624 chr6 . BED_feature 22405283 22405315 . . . Name=2388622 chr6 . BED_feature 22406505 22407281 . . . Name=2388622 chr10 . BED_feature 90739751 90739790 . . . Name=10575005 chr6 . BED_feature 12398423 12398453 . . . Name=2388628 chr6 . BED_feature 43844937 43844975 . . . Name=11056166 chr6 . BED_feature 153112338 153112383 . . . Name=11259431 chr14 . BED_feature 21999393 21999642 . . . Name=2156339 chr4 . BED_feature 55218756 55218801 . . . Name=9834219 chr11 . BED_feature 117692799 117692831 . . . Name=9622621 chr4 . BED_feature 111761804 111761837 . . . Name=9685346 chr11 . BED_feature 5225334 5225684 . . . Name=2050690 chr6 . BED_feature 87861522 87861558 . . . Name=12177069 chr14 . BED_feature 21999515 21999544 . . . Name=10767553 chr9 . BED_feature 132310020 132310204 . . . Name=2005889 chr1 . BED_feature 202432235 202432264 . . . Name=16260418 chr19 . BED_feature 46551727 46551753 . . . Name=8702877 chr6 . BED_feature 32713076 32713109 . . . Name=8530481 chr6 . BED_feature 32817061 32817097 . . . Name=8530481 chr11 . BED_feature 118463821 118463849 . . . Name=9168923 chr3 . BED_feature 99795250 99795281 . . . Name=9168923 chr5 . BED_feature 131437290 131437343 . . . Name=7636192 chr4 . BED_feature 123597348 123597383 . . . Name=7636192 chr19 . BED_feature 523493 523522 . . . Name=11814679 chr3 . BED_feature 30622823 30623077 . . . Name=11205746 chr5 . BED_feature 132037329 132037541 . . . Name=11687571 chr22 . BED_feature 37970955 37971002 . . . Name=9300179 chr7 . BED_feature 142216685 142216868 . . . Name=2144610 chr14 . BED_feature 22095177 22095210 . . . Name=2144610 chr7 . BED_feature 44071655 44071920 . . . Name=1328854 chr16 . BED_feature 30391086 30391720 . . . Name=8097887 chr19 . BED_feature 10242733 10242764 . . . Name=7972116 chr7 . BED_feature 5534743 5534772 . . . Name=11359804 chr22 . BED_feature 14635980 14636009 . . . Name=11359804 chr2 . BED_feature 130548918 130548947 . . . Name=11359804 chr2 . BED_feature 130937490 130937519 . . . Name=11359804 chr2 . BED_feature 131131260 131131289 . . . Name=11359804 chr2 . BED_feature 131738066 131738095 . . . Name=11359804 chr15 . BED_feature 42069177 42069206 . . . Name=11359804 chr14 . BED_feature 18655265 18655294 . . . Name=11359804 chr14 . BED_feature 19058342 19058371 . . . Name=11359804 chr7 . BED_feature 107997469 107997500 . . . Name=15882996 chr5 . BED_feature 139706798 139706829 . . . Name=9360990 chr7 . BED_feature 5533904 5533935 . . . Name=14623878 chr5 . BED_feature 79631252 79631283 . . . Name=14623878 chr3 . BED_feature 12087833 12087862 . . . Name=14623878 chr1 . BED_feature 103914789 103914818 . . . Name=14623878 chr8 . BED_feature 23016741 23016771 . . . Name=14623878 chr8 . BED_feature 23105153 23105183 . . . Name=14623878 chr17 . BED_feature 77092312 77092341 . . . Name=14623878 chr5 . BED_feature 132037329 132037543 . . . Name=9845517 chr11 . BED_feature 5205126 5205155 . . . Name=2587218 chr19 . BED_feature 803197 803226 . . . Name=9689920 chr22_random . BED_feature 21342 21371 . . . Name=1900840 chr11 . BED_feature 116205670 116205699 . . . Name=1900840 chr4 . BED_feature 74488730 74488764 . . . Name=1900840 chr2 . BED_feature 21120497 21120528 . . . Name=1900840 chr14 . BED_feature 93924785 93924824 . . . Name=1900840 chr20 . BED_feature 44771565 44771612 . . . Name=16051383 chr7 . BED_feature 87068172 87068216 . . . Name=11350951 chr15 . BED_feature 72805409 72805921 . . . Name=8382688 chr10 . BED_feature 6144638 6144674 . . . Name=9417809 chr6 . BED_feature 31650995 31651095 . . . Name=9293772 chr3 . BED_feature 129682403 129682467 . . . Name=1370462 chr3 . BED_feature 129687329 129687456 . . . Name=1370462 chr10 . BED_feature 5228100 5228140 . . . Name=12220531 chr17 . BED_feature 10501488 10501527 . . . Name=11971910 chr17 . BED_feature 31441743 31441775 . . . Name=8474441 chr17 . BED_feature 31548413 31548445 . . . Name=8474441 chr17 . BED_feature 31649987 31650019 . . . Name=8474441 chr17_random . BED_feature 1227961 1227993 . . . Name=8474441 chr17_random . BED_feature 510637 510705 . . . Name=3601664 chr17_random . BED_feature 512129 512197 . . . Name=3601664 chr17_random . BED_feature 514842 514910 . . . Name=3601664 chr17_random . BED_feature 519731 519799 . . . Name=3601664 chr17_random . BED_feature 525879 525947 . . . Name=3601664 chr17_random . BED_feature 555820 555888 . . . Name=3601664 chr17_random . BED_feature 2608038 2608106 . . . Name=3601664 chr11 . BED_feature 2139132 2139351 . . . Name=2186040 chr6 . BED_feature 31891226 31891261 . . . Name=2824993 chr6 . BED_feature 31903422 31903455 . . . Name=2824993 chr19 . BED_feature 49838999 49839103 . . . Name=9880562 chr2 . BED_feature 219526622 219526659 . . . Name=6091127 chr2 . BED_feature 219991954 219992007 . . . Name=6091127 chr2 . BED_feature 219993216 219994527 . . . Name=6091127 chr2 . BED_feature 219998627 219999624 . . . Name=6091127 chr9 . BED_feature 101108426 101108465 . . . Name=6091127 chrX . BED_feature 45376725 45376793 . . . Name=6091127 chr12 . BED_feature 47977237 47977628 . . . Name=6091127 chr12 . BED_feature 50925646 50925684 . . . Name=6091127 chr12 . BED_feature 51108312 51108364 . . . Name=6091127 chr12 . BED_feature 51127834 51127915 . . . Name=6091127 chr12 . BED_feature 51149726 51149807 . . . Name=6091127 chr12 . BED_feature 51168384 51168465 . . . Name=6091127 chr12 . BED_feature 51196694 51196745 . . . Name=6091127 chr12 . BED_feature 51248225 51248258 . . . Name=6091127 chr12 . BED_feature 51267687 51267745 . . . Name=6091127 chr12 . BED_feature 51290671 51290703 . . . Name=6091127 chr12 . BED_feature 51326796 51326855 . . . Name=6091127 chr12 . BED_feature 51372474 51372523 . . . Name=6091127 chr12 . BED_feature 51451055 51451107 . . . Name=6091127 chr12 . BED_feature 51471262 51471324 . . . Name=6091127 chr12 . BED_feature 51487700 51487760 . . . Name=6091127 chr12 . BED_feature 51503069 51503134 . . . Name=6091127 chr12 . BED_feature 51519820 51519866 . . . Name=6091127 chr12 . BED_feature 51578729 51578767 . . . Name=6091127 chr10 . BED_feature 8595900 8595938 . . . Name=6091127 chr10 . BED_feature 17317280 17317392 . . . Name=6091127 chr17 . BED_feature 40344129 40344242 . . . Name=6091127 chr15 . BED_feature 75058646 75058683 . . . Name=6091127 chr20 . BED_feature 43316657 43316700 . . . Name=10498899 chr1 . BED_feature 938621 938650 . . . Name=12055236 chr13 . BED_feature 29938059 29938152 . . . Name=11245470 chr19 . BED_feature 3413760 3413788 . . . Name=11245470 chr15 . BED_feature 49418596 49420743 . . . Name=8132535 chr9 . BED_feature 106730621 106730953 . . . Name=15528481 chr15 . BED_feature 32834227 32834262 . . . Name=14565956 chr17 . BED_feature 59303128 59303178 . . . Name=8370519 chr17 . BED_feature 59311326 59311376 . . . Name=8370519 chr17 . BED_feature 59326029 59326078 . . . Name=8370519 chr17 . BED_feature 59340721 59340767 . . . Name=8370519 chr17 . BED_feature 59348314 59348364 . . . Name=8370519 chr14 . BED_feature 21999514 21999541 . . . Name=10359663 chr3 . BED_feature 197023273 197023300 . . . Name=11418607 chr11 . BED_feature 2136190 2136325 . . . Name=9013771 chr4 . BED_feature 74825038 74825076 . . . Name=8035808 chr3 . BED_feature 124822086 124822163 . . . Name=9142867 chr2 . BED_feature 233880783 233881067 . . . Name=8321239 chr19 . BED_feature 15869836 15869863 . . . Name=10860554 chr7 . BED_feature 45894488 45894516 . . . Name=12011061 chr19 . BED_feature 46551009 46551037 . . . Name=12011061 chr1 . BED_feature 216584695 216585098 . . . Name=12011061 chr1 . BED_feature 216586733 216586761 . . . Name=12011061 chr22 . BED_feature 40856851 40856894 . . . Name=8810289 chr22 . BED_feature 40870523 40870566 . . . Name=8810289 chr22 . BED_feature 40881065 40881104 . . . Name=8810289 chr1 . BED_feature 3597000 3597060 . . . Name=11909952 chr1 . BED_feature 938624 938655 . . . Name=3476954 chr2 . BED_feature 86867000 86867277 . . . Name=8413295 chr11 . BED_feature 69165072 69165101 . . . Name=8196642 chr3 . BED_feature 25444698 25444726 . . . Name=1657595 chr1 . BED_feature 98159130 98159155 . . . Name=11072080 chrX . BED_feature 48771251 48772496 . . . Name=2338243 chrX . BED_feature 48774415 48774496 . . . Name=2338243 chrX . BED_feature 48778664 48778710 . . . Name=2338243 chrX . BED_feature 48782532 48782585 . . . Name=2338243 chr11 . BED_feature 118463735 118463763 . . . Name=2211589 chr2 . BED_feature 127129934 127129963 . . . Name=2211589 chr7 . BED_feature 5533905 5534773 . . . Name=14993214 chr5 . BED_feature 79631253 79631282 . . . Name=14993214 chr5 . BED_feature 131854472 131854502 . . . Name=14993214 chr3 . BED_feature 12087834 12087862 . . . Name=14993214 chr2 . BED_feature 130548918 130548948 . . . Name=14993214 chr2 . BED_feature 130937490 130937520 . . . Name=14993214 chr2 . BED_feature 131131259 131131289 . . . Name=14993214 chr2 . BED_feature 131738065 131738095 . . . Name=14993214 chr2 . BED_feature 201806408 201806452 . . . Name=14993214 chr1 . BED_feature 103914790 103914818 . . . Name=14993214 chr22 . BED_feature 14635980 14636010 . . . Name=14993214 chr15 . BED_feature 42069177 42069206 . . . Name=14993214 chr14 . BED_feature 18655264 18655294 . . . Name=14993214 chr14 . BED_feature 19058342 19058372 . . . Name=14993214 chr17 . BED_feature 77092312 77092340 . . . Name=14993214 chr8 . BED_feature 128817489 128817516 . . . Name=7555706 chr11 . BED_feature 100504991 100505108 . . . Name=14684847 chr19 . BED_feature 50100732 50100772 . . . Name=11038359 chr11 . BED_feature 73371479 73371508 . . . Name=10558866 chr4 . BED_feature 39205935 39206031 . . . Name=16002992 chr9 . BED_feature 130911610 130911651 . . . Name=10585862 chr9 . BED_feature 130913433 130913464 . . . Name=10585862 chr22 . BED_feature 21962547 21962884 . . . Name=8144670 chr21 . BED_feature 42660038 42660066 . . . Name=14966289 chr12 . BED_feature 52653728 52653757 . . . Name=9582375 chr4 . BED_feature 123597152 123597181 . . . Name=9016343 chr11 . BED_feature 71632649 71632702 . . . Name=11549713 chr9 . BED_feature 127043488 127043556 . . . Name=1480470 chr10 . BED_feature 6285227 6285271 . . . Name=10673355 chrX . BED_feature 47326670 47326715 . . . Name=11259407 chr8 . BED_feature 128816013 128816041 . . . Name=8649373 chr8 . BED_feature 128817629 128817676 . . . Name=8649373 chr20 . BED_feature 42708338 42708374 . . . Name=9016677 chr7 . BED_feature 5533943 5534628 . . . Name=15604281 chr6 . BED_feature 89042358 89042389 . . . Name=15604281 chr5 . BED_feature 77117520 77117549 . . . Name=15604281 chr3 . BED_feature 177178013 177178044 . . . Name=15604281 chr2 . BED_feature 130548327 130548356 . . . Name=15604281 chr2 . BED_feature 130936899 130936928 . . . Name=15604281 chr2 . BED_feature 131131851 131131880 . . . Name=15604281 chr2 . BED_feature 131738657 131738686 . . . Name=15604281 chr2 . BED_feature 132101240 132101269 . . . Name=15604281 chr1 . BED_feature 27524805 27524836 . . . Name=15604281 chr9 . BED_feature 6825509 6825538 . . . Name=15604281 chr11 . BED_feature 1780733 1780764 . . . Name=15604281 chr22 . BED_feature 14635389 14635418 . . . Name=15604281 chr14 . BED_feature 18655856 18655885 . . . Name=15604281 chr14 . BED_feature 19057751 19057780 . . . Name=15604281 chr18 . BED_feature 58261273 58261304 . . . Name=15604281 chr14 . BED_feature 105142548 105142618 . . . Name=8515067 chr14 . BED_feature 105261334 105261401 . . . Name=8515067 chr14 . BED_feature 21999512 21999542 . . . Name=2050118 chr6 . BED_feature 32515518 32515589 . . . Name=9378978 chr7 . BED_feature 139175315 139175364 . . . Name=11956185 chr7 . BED_feature 55054192 55054238 . . . Name=3393529 chr5 . BED_feature 137828927 137828975 . . . Name=8065330 chr7 . BED_feature 100556401 100556570 . . . Name=12738229 chr8 . BED_feature 128817556 128817620 . . . Name=2721961 chr12 . BED_feature 90097177 90098190 . . . Name=8276854 chr7 . BED_feature 55054207 55054237 . . . Name=12062800 chr8 . BED_feature 28230633 28230749 . . . Name=12062800 chr19 . BED_feature 2224335 2224407 . . . Name=9501877 chr1 . BED_feature 68688177 68692149 . . . Name=9501877 chr9 . BED_feature 21068006 21068035 . . . Name=15664995 chr4 . BED_feature 123597330 123597379 . . . Name=7673240 chr1 . BED_feature 154478087 154478119 . . . Name=10077002 chr1 . BED_feature 148070713 148070740 . . . Name=3029724 chr1 . BED_feature 148099454 148099481 . . . Name=3029724 chr3 . BED_feature 166279009 166279036 . . . Name=11283019 chr12 . BED_feature 54645490 54645518 . . . Name=12819038 chr7 . BED_feature 5534470 5534499 . . . Name=10545204 chr17 . BED_feature 37122024 37122063 . . . Name=2566164 chr4 . BED_feature 123597213 123597383 . . . Name=1545787 chr14 . BED_feature 22095240 22095319 . . . Name=1545787 chr2 . BED_feature 127892038 127892602 . . . Name=7592627 chr1 . BED_feature 120737548 120737589 . . . Name=8483949 chr1 . BED_feature 147635796 147635837 . . . Name=8483949 chr1 . BED_feature 148020752 148020792 . . . Name=8483949 chr6 . BED_feature 31650909 31650946 . . . Name=10369255 chr11 . BED_feature 5227823 5227863 . . . Name=2336386 chr11 . BED_feature 5232747 5232787 . . . Name=2336386 chr4 . BED_feature 109130502 109130558 . . . Name=9716664 chr4 . BED_feature 109155034 109155063 . . . Name=9716664 chr4 . BED_feature 109160212 109160247 . . . Name=9716664 chr4 . BED_feature 109164122 109164158 . . . Name=9716664 chr4 . BED_feature 109174855 109175558 . . . Name=9716664 chr10 . BED_feature 17310516 17310544 . . . Name=7986748 chr17 . BED_feature 59304827 59305028 . . . Name=3595566 chr17 . BED_feature 59313056 59313213 . . . Name=3595566 chr17 . BED_feature 59327724 59327925 . . . Name=3595566 chr17 . BED_feature 59342381 59342606 . . . Name=3595566 chr17 . BED_feature 59349961 59350263 . . . Name=3595566 chr16 . BED_feature 67328705 67328733 . . . Name=16617148 chr7 . BED_feature 87068136 87068286 . . . Name=8095499 chr11 . BED_feature 2868569 2868621 . . . Name=12790805 chr17 . BED_feature 8054646 8054674 . . . Name=15033491 chr19 . BED_feature 7245593 7245654 . . . Name=8376587 chr16 . BED_feature 31273921 31273960 . . . Name=9360988 chr7 . BED_feature 26191773 26191800 . . . Name=10037736 chr17 . BED_feature 42858368 42858395 . . . Name=10037736 chr4 . BED_feature 159864009 159864049 . . . Name=11525247 chr11 . BED_feature 117692802 117692831 . . . Name=8227043 chr5 . BED_feature 137828634 137828733 . . . Name=16037570 chr14 . BED_feature 105129373 105129408 . . . Name=10652350 chr14 . BED_feature 105250344 105250379 . . . Name=10652350 chr2 . BED_feature 151922250 151922282 . . . Name=8885246 chr13 . BED_feature 27967304 27967353 . . . Name=8940064 chr14 . BED_feature 94148353 94148401 . . . Name=9461605 chr1 . BED_feature 206151285 206151338 . . . Name=10572091 chr17 . BED_feature 59300848 59300883 . . . Name=8052268 chr17 . BED_feature 59323742 59323775 . . . Name=8052268 chr17 . BED_feature 59338490 59338525 . . . Name=8052268 chr2 . BED_feature 10505925 10506001 . . . Name=9570735 chr2 . BED_feature 127892444 127892602 . . . Name=9553065 chr19 . BED_feature 46048243 46048291 . . . Name=15671201 chr5 . BED_feature 132037323 132037358 . . . Name=12374808 chr11 . BED_feature 5258548 5258578 . . . Name=2123346 chr14 . BED_feature 36059171 36059310 . . . Name=10684967 chr13 . BED_feature 31787486 31787523 . . . Name=10961992 chr11 . BED_feature 116205663 116205692 . . . Name=8036173 chr22_random . BED_feature 21349 21378 . . . Name=8036173 chr6 . BED_feature 26195614 26195650 . . . Name=15467009 chr1 . BED_feature 205344109 205344140 . . . Name=10777590 chr1 . BED_feature 170901754 170901782 . . . Name=10725705 chr6 . BED_feature 336159 336488 . . . Name=16272311 chr17 . BED_feature 7423623 7423653 . . . Name=16272311 chr19 . BED_feature 59927684 59927724 . . . Name=16818466 chr19 . BED_feature 59941631 59941780 . . . Name=16818466 chr19 . BED_feature 59958152 59958244 . . . Name=16818466 chr19 . BED_feature 59972980 59973072 . . . Name=16818466 chr19 . BED_feature 59989484 59989576 . . . Name=16818466 chr19 . BED_feature 60019575 60019743 . . . Name=16818466 chr19 . BED_feature 60035839 60035989 . . . Name=16818466 chr19 . BED_feature 60053551 60053700 . . . Name=16818466 chr19_random . BED_feature 150474 150514 . . . Name=16818466 chr19_random . BED_feature 164437 164586 . . . Name=16818466 chr19_random . BED_feature 181034 181126 . . . Name=16818466 chr19_random . BED_feature 212604 212772 . . . Name=16818466 chr19_random . BED_feature 229300 229392 . . . Name=16818466 chr19_random . BED_feature 240699 240791 . . . Name=16818466 chr19_random . BED_feature 257666 257758 . . . Name=16818466 chr19_random . BED_feature 273965 274114 . . . Name=16818466 chr19_random . BED_feature 290146 290295 . . . Name=16818466 chr2 . BED_feature 42441469 42441499 . . . Name=9418891 chr8 . BED_feature 110621516 110621547 . . . Name=9418891 chr6 . BED_feature 160033828 160033861 . . . Name=8602839 chr5 . BED_feature 132037485 132037518 . . . Name=1532661 chr21 . BED_feature 42660091 42660131 . . . Name=10619353 chr7 . BED_feature 143763142 143763174 . . . Name=11101876 chr16 . BED_feature 10878364 10878396 . . . Name=11101876 chr6 . BED_feature 87861616 87861644 . . . Name=7690722 chr11 . BED_feature 5247662 5248033 . . . Name=7882983 chr21 . BED_feature 45788564 45789001 . . . Name=15652157 chr10 . BED_feature 90702793 90702824 . . . Name=9546431 chr2 . BED_feature 1395339 1396616 . . . Name=2306241 chr6 . BED_feature 32515524 32515555 . . . Name=15798210 chr12 . BED_feature 28007917 28007970 . . . Name=11590145 chr12 . BED_feature 28014207 28014257 . . . Name=11590145 chr11 . BED_feature 127855336 127855387 . . . Name=11590145 chrX . BED_feature 134545610 134545664 . . . Name=11590145 chr21 . BED_feature 39113468 39113522 . . . Name=11590145 chr19 . BED_feature 50140987 50141031 . . . Name=9651383 chr19 . BED_feature 11060976 11061028 . . . Name=8969230 chr11 . BED_feature 61474297 61474475 . . . Name=14982938 chr13 . BED_feature 27968204 27968239 . . . Name=9295307 chr7 . BED_feature 100159369 100159403 . . . Name=9295307 chr6 . BED_feature 43844940 43844973 . . . Name=9295307 chr11 . BED_feature 14950484 14950770 . . . Name=1335241 chr19 . BED_feature 5794124 5794155 . . . Name=16199102 chr1 . BED_feature 151145504 151145560 . . . Name=9512462 chrX . BED_feature 133421461 133421557 . . . Name=8524221 chr12 . BED_feature 55326300 55326340 . . . Name=9512469 chr7 . BED_feature 148494901 148494944 . . . Name=11779858 chr7 . BED_feature 148507370 148507398 . . . Name=11779858 chr6 . BED_feature 152170741 152170769 . . . Name=11779858 chr4 . BED_feature 123597349 123597380 . . . Name=7935406 chr22 . BED_feature 20928908 20929221 . . . Name=11994467 chr5 . BED_feature 131434253 131434284 . . . Name=10706706 chr4 . BED_feature 123597156 123597265 . . . Name=10706706 chr2 . BED_feature 69467759 69469928 . . . Name=15878746 chr15 . BED_feature 72448910 72448940 . . . Name=8703023 chr4 . BED_feature 155703460 155703510 . . . Name=8226773 chr11 . BED_feature 14951376 14951415 . . . Name=1738589 chr1 . BED_feature 53434580 53434614 . . . Name=12408750 chr16 . BED_feature 29739214 29739242 . . . Name=16418217 chr8 . BED_feature 37942250 37942857 . . . Name=11316759 chr6 . BED_feature 87861602 87861689 . . . Name=7685765 chr4 . BED_feature 123597349 123597379 . . . Name=9819402 chr6 . BED_feature 31891135 31891163 . . . Name=8524643 chr11 . BED_feature 5247820 5247851 . . . Name=8524643 chr7 . BED_feature 5535954 5535982 . . . Name=3185543 chr1 . BED_feature 227636541 227636569 . . . Name=3185543 chr14 . BED_feature 74815996 74816043 . . . Name=11997340 chr11 . BED_feature 5258376 5258749 . . . Name=1924329 chr14 . BED_feature 74814951 74815009 . . . Name=1833404 chr16 . BED_feature 55553247 55553307 . . . Name=8530390 chr14 . BED_feature 22974976 22975043 . . . Name=1449500 chr1 . BED_feature 148070780 148070957 . . . Name=9874597 chr1 . BED_feature 148099237 148099414 . . . Name=9874597 chr16 . BED_feature 55199809 55199836 . . . Name=2822255 chr16 . BED_feature 29983413 29983440 . . . Name=14966291 chr20 . BED_feature 30103722 30103934 . . . Name=9822652 chr12 . BED_feature 19152056 19152167 . . . Name=1516833 chr19 . BED_feature 19117403 19119608 . . . Name=1516833 chr19 . BED_feature 19121035 19121241 . . . Name=1516833 chr19 . BED_feature 19122487 19122569 . . . Name=1516833 chr19 . BED_feature 19152495 19152573 . . . Name=1516833 chr19 . BED_feature 19154382 19154494 . . . Name=1516833 chr19 . BED_feature 19163890 19163921 . . . Name=1516833 chr1 . BED_feature 154718853 154719060 . . . Name=1516833 chr1 . BED_feature 177683437 177684327 . . . Name=1516833 chr15 . BED_feature 97956185 97956240 . . . Name=1516833 chr15 . BED_feature 97990704 97990903 . . . Name=1516833 chr15 . BED_feature 98003433 98003480 . . . Name=1516833 chr15 . BED_feature 98029055 98029292 . . . Name=1516833 chr15 . BED_feature 98032162 98032342 . . . Name=1516833 chr15 . BED_feature 98047986 98048131 . . . Name=1516833 chr15 . BED_feature 98064460 98064576 . . . Name=1516833 chr15 . BED_feature 98068361 98068488 . . . Name=1516833 chr15 . BED_feature 98070118 98071422 . . . Name=1516833 chr17 . BED_feature 59349959 59349992 . . . Name=11890700 chr19 . BED_feature 56049582 56049616 . . . Name=8626436 chrX . BED_feature 138440553 138440581 . . . Name=8626436 chr5 . BED_feature 131437266 131437302 . . . Name=3257571 chr1 . BED_feature 151145509 151145546 . . . Name=15790882 chr11 . BED_feature 116205753 116205859 . . . Name=11839757 chr22_random . BED_feature 21182 21288 . . . Name=11839757 chr7 . BED_feature 55054183 55054234 . . . Name=2847030 chr2 . BED_feature 210861535 210861562 . . . Name=2243772 chr7 . BED_feature 66438245 66438537 . . . Name=11714687 chr5 . BED_feature 88155359 88155501 . . . Name=11714687 chr5 . BED_feature 88235486 88235778 . . . Name=11714687 chr11 . BED_feature 5258534 5258592 . . . Name=2116990 chr11 . BED_feature 61942928 61942978 . . . Name=1711673 chr2 . BED_feature 85748895 85748950 . . . Name=8065304 chr16 . BED_feature 55259659 55259699 . . . Name=1903400 chr4 . BED_feature 122964231 122964882 . . . Name=8202514 chr1 . BED_feature 59022165 59022500 . . . Name=8355696 chr11 . BED_feature 5258551 5258586 . . . Name=8355692 chr16 . BED_feature 162863 163413 . . . Name=8355692 chr16 . BED_feature 166667 167217 . . . Name=8355692 chr9 . BED_feature 21792571 21792811 . . . Name=15535799 chr1 . BED_feature 227636733 227637755 . . . Name=1318069 chr4 . BED_feature 123597349 123597378 . . . Name=9065434 chr10 . BED_feature 104144210 104144265 . . . Name=9528780 chr3 . BED_feature 195336540 195336569 . . . Name=9528780 chr11 . BED_feature 2139216 2139245 . . . Name=1915886 chr11 . BED_feature 118463736 118463763 . . . Name=8265578 chr7 . BED_feature 22733215 22733253 . . . Name=10657660 chr17 . BED_feature 29606346 29606384 . . . Name=10657660 chr2 . BED_feature 21119498 21119597 . . . Name=1545795 chr21 . BED_feature 45786202 45786247 . . . Name=11078737 chr1 . BED_feature 233095015 233095257 . . . Name=1870965 chr6 . BED_feature 32549435 32549462 . . . Name=1903538 chr6 . BED_feature 32665658 32665685 . . . Name=1903538 chr6 . BED_feature 32742510 32742537 . . . Name=1903538 chr11 . BED_feature 116199350 116199380 . . . Name=2020548 chr2 . BED_feature 21120501 21120538 . . . Name=2020548 chr22_random . BED_feature 27654 27684 . . . Name=2020548 chr4 . BED_feature 123597349 123597378 . . . Name=10816557 chr10 . BED_feature 6144342 6144375 . . . Name=8642278 chr17 . BED_feature 59304620 59305041 . . . Name=3018491 chr17 . BED_feature 59312807 59313226 . . . Name=3018491 chr17 . BED_feature 59327517 59327938 . . . Name=3018491 chr17 . BED_feature 59342202 59342563 . . . Name=3018491 chr17 . BED_feature 59349782 59350202 . . . Name=3018491 chr8 . BED_feature 128818308 128818364 . . . Name=10085075 genometools-1.5.1/testdata/bed_files/gb-2008-9-2-r31-s3.bed000066400000000000000000002110321211610345200224560ustar00rootroot00000000000000chr13 12855405 12855438 8065334 chr13 13072135 13072165 8065334 chr2 172240870 172240910 12801994 chr3 88033298 88034734 1327537 chr3 131173868 131173905 8892228 chr4 129060997 129061031 11278409 chr9 44737715 44737752 11278409 chr12 113725369 113725411 8144891 chr18 61336786 61336835 9325159 chr9 57494751 57494779 1986235 chr6 5447222 5447252 12820900 chr12 86362676 86362711 2498646 chr11 96087147 96087322 1360646 chr14 53921088 53921125 8449897 chr9 49551489 49551554 11696550 chr4 134425053 134425134 8341710 chr4 134427381 134427503 8341710 chr17 43959177 43959286 8341710 chr17 44070860 44071424 8341710 chr17 44073079 44073136 8341710 chr17 44102719 44102884 8341710 chr17 44121573 44121747 8341710 chr17 44180245 44180353 8341710 chr17 44187798 44187958 8341710 chr17 44198285 44198718 8341710 chr16 92584340 92584421 8341710 chr7 46713822 46713869 2708350 chr14 15368765 15368800 2164682 chr5 137356956 137356986 9427542 chr7 28088021 28088093 7559666 chr18 82688825 82688871 1690988 chr6 70655272 70655306 10623825 chr16 29984999 29985028 10623825 chr17 33644477 33644637 1652422 chr17 33646781 33647960 1652422 chr2 27563777 27563952 1652422 chr2 27570622 27570757 1652422 chr2 27574323 27574451 1652422 chr2 27576228 27576364 1652422 chr2 27578214 27578297 1652422 chr2 27581548 27581681 1652422 chr1 169461605 169461748 1652422 chr1 169463963 169464146 1652422 chr1 169467907 169468035 1652422 chr1 169469185 169469322 1652422 chr1 169471116 169471201 1652422 chr1 169475799 169475944 1652422 chr3 88464665 88464699 10514508 chr3 88470430 88470464 10514508 chr19 54097640 54099571 7487893 chr6 41474206 41474734 2349098 chr6 29009780 29010375 8633022 chr6 29018960 29018996 8633022 chr6 29021164 29021200 8633022 chr10 80208262 80208306 10446911 chr16 23806221 23806263 1834659 chr3 37317758 37317792 8417328 chr12 77084391 77084433 9058381 chr12 77086129 77086167 9058381 chr5 91525243 91525437 1990282 chr12 113875335 113875479 3125419 chr6 145348608 145348648 2365680 chr5 21110586 21110672 2365680 chr5 41630394 41630480 2365680 chr5 83411420 83411506 2365680 chr1 16088802 16088888 2365680 chr9 31532481 31532530 2365680 chr9 109815632 109815704 2365680 chrX 33099689 33099764 2365680 chrX 148997346 148997395 2365680 chr11 29452949 29452989 2365680 chr11 46571264 46571350 2365680 chr17 32591324 32591409 2365680 chr15 59040612 59040698 2365680 chr13 12855407 12855435 2744462 chr13 13072135 13072165 2744462 chr11 76965962 76966562 1986236 chr1 173252806 173252912 1986236 chr1 173254314 173254471 1986236 chr12 113680202 113680232 9755173 chr12 113701766 113701797 9755173 chr12 57453027 57453073 9211870 chr4 94544520 94544623 1851295 chr15 82280025 82280079 2387871 chr8 75247914 75247946 10433980 chr15 98883162 98883205 1639068 chr15 9476871 9477448 2038316 chr7 99225294 99226309 12235161 chr5 104676199 104676297 9649510 chr12 86362631 86362992 9584171 chr1 163623783 163623811 10684974 chr1 163625032 163625063 10684974 chr14 67037128 67037160 11733514 chr8 109492103 109492670 1763063 chr6 52096109 52096149 10068641 chr5 89609349 89609379 9529146 chr8 42873633 42873667 16500425 chr9 43794365 43794438 1672442 chr17 33610895 33610924 1727488 chr17 34870963 34870992 1727488 chr12 104139374 104139403 1701020 chr12 104174806 104174835 1701020 chr12 104358132 104358161 1701020 chr5 91535986 91536016 1701020 chr4 62830792 62830821 1701020 chr4 62848682 62848711 1701020 chr2 167381276 167381623 1701020 chr9 78015522 78015661 2166952 chr9 78041998 78042137 2166952 chr9 78068395 78068448 2166952 chr9 78074867 78074935 2166952 chr9 78133948 78134089 2166952 chr2 167380096 167380135 15299028 chr11 44243408 44243440 12876285 chr11 78736086 78736120 12876285 chr9 50306076 50306110 12876285 chr6 91649566 91649596 15142033 chr8 71809515 71809738 11796707 chr5 16065429 16065458 12163028 chr12 113875354 113875416 1899229 chr7 31525873 31525902 12520165 chr7 32254522 32254551 12520165 chr4 84395387 84395416 12520165 chr1 146946112 146946144 12520165 chr8 43108455 43108485 12520165 chr12 5616599 5616628 12520165 chr11 33176704 33176733 12520165 chr17 61467014 61467046 12520165 chr12 116052275 116052307 1970570 chr11 70478627 70478705 2734297 chr2 62284557 62284607 10938089 chr1 64467140 64467218 7628390 chr1 75242512 75243687 8382796 chrX 20027120 20027366 1849903 chr17 89109205 89109235 11145741 chr2 147728349 147728401 9118802 chr6 34342452 34342485 11145742 chr13 52980564 52982323 12023274 chr3 88458959 88459035 7891679 chr3 88464662 88464736 7891679 chr3 88470428 88470501 7891679 chr7 79608338 79608384 14726448 chr3 89465235 89467184 7937772 chr8 78299165 78299266 7937772 chr13 13756611 13757727 7937772 chr10 26982957 26983076 7937772 chrX 8811751 8812446 7937772 chr18 76271049 76271168 7937772 chr6 42910196 42910222 3119226 chr6 68185881 68185907 3119226 chr16 3493056 3493082 3119226 chr6 70655343 70655376 3145404 chr12 113875435 113875464 3145404 chr12 114508180 114508208 3145404 chr3 113284901 113284941 8874496 chr5 115209361 115211104 2263635 chr5 115221021 115221214 2263635 chr5 115231516 115231801 2263635 chr11 83672139 83672273 2263635 chr12 86362645 86362702 2928331 chr5 146313738 146313765 7651384 chr5 146383577 146383604 7651384 chr11 95403796 95403832 7565756 chr15 78753913 78753944 9931450 chr11 53564136 53564178 9498775 chr11 94767984 94768013 2779548 chr10 66907643 66907888 12538520 chr15 76304476 76304854 9829985 chrX 79208617 79208790 11259421 chr7 45334856 45334916 15466854 chr7 120806481 120806510 15466854 chr6 71571314 71571343 15466854 chr6 78426650 78426679 15466854 chr6 123184769 123184798 15466854 chr4 105292420 105292449 15466854 chr3 39409200 39409229 15466854 chr3 41582548 41582577 15466854 chr3 122249021 122249050 15466854 chr3 122624993 122625022 15466854 chr3 138542153 138542182 15466854 chr2 51693326 51693355 15466854 chr2 83191233 83191262 15466854 chr2 129441625 129441654 15466854 chr2 166191671 166191700 15466854 chr9 96705281 96705310 15466854 chr8 4465785 4465814 15466854 chr13 64639250 64639279 15466854 chr11 6319198 6319227 15466854 chr10 57470992 57471021 15466854 chr17 37555516 37555545 15466854 chr15 25785031 25785060 15466854 chr14 28044921 28044950 15466854 chr19 28099719 28099748 15466854 chr18 34171912 34171941 15466854 chr6 115407117 115407162 9099735 chr1 135178146 135178175 9201991 chr6 70655242 70655313 2501761 chr15 74816721 74816777 9746780 chr15 74827421 74827479 9746780 chr15 74878324 74878382 9746780 chr15 74893029 74893087 9746780 chr15 74942699 74942755 9746780 chr15 74965414 74965466 9746780 chr15 74980244 74980287 9746780 chr15 75013880 75013926 9746780 chr15 75093111 75093165 9746780 chr1 136106233 136106418 1324403 chr6 142920945 142921305 11098147 chr9 57494748 57494782 3413062 chr19 37762873 37762946 10976925 chr8 97068193 97068366 2993866 chr12 114344857 114344899 2710122 chr12 116052274 116052307 2710122 chr3 37317567 37317596 1620122 chr6 40976305 40976479 3259318 chr6 40977840 40977872 3259318 chr6 40988922 40989030 3259318 chr6 40991876 40991970 3259318 chr6 41043028 41043170 3259318 chr6 41045568 41045620 3259318 chr6 41048329 41048467 3259318 chr6 41059623 41059730 3259318 chr6 41081350 41081400 3259318 chr6 41092531 41092629 3259318 chr6 41107825 41107980 3259318 chr5 143168935 143169346 12855690 chr8 126778096 126778129 12855690 chr16 37802843 37802876 12855690 chr1 163625140 163625648 12855690 chrX 147774588 147774621 12855690 chrX 147831147 147831180 12855690 chr13_random 132570 132601 1527023 chr12 77628972 77629001 10037687 chr10 79980249 79980309 11390978 chr12 86362672 86362727 10462507 chr15 78753913 78753944 10760565 chr7 46729236 46729273 11673270 chr5 104675337 104675366 7799957 chr7 70234441 70234497 15541767 chr12 86362675 86362704 9032301 chr11 98775789 98776740 1658797 chr2 38536505 38536605 9013759 chr4 28981910 28981959 16314414 chr11 53462146 53462176 9233810 chr19 6989379 6989414 12960079 chr5 91565804 91565841 2601711 chr9 71648331 71648487 1321336 chr9 71654864 71655099 1321336 chr9 71657043 71657515 1321336 chr9 71666629 71666826 1321336 chr9 71668636 71668711 1321336 chr9 71674546 71674627 1321336 chr9 71681665 71682326 1321336 chr9 71683753 71683834 1321336 chr9 71721211 71721347 1321336 chr9 71742549 71742582 1321336 chr9 71798974 71799076 1321336 chr9 71814199 71814273 1321336 chr9 71908240 71910179 1321336 chr13 30756011 30756039 10770796 chr5 28489137 28489196 8625814 chr7 4732187 4732219 15117948 chr6 133727976 133728008 15117948 chr5 143170455 143170487 15117948 chr4 103061585 103061617 15117948 chr9 38824924 38824956 15117948 chr8 47728061 47728093 15117948 chr8 126779399 126779431 15117948 chr13 81528371 81528403 15117948 chr11 120163804 120163836 15117948 chr17 63032641 63032673 15117948 chr16 64861024 64861056 15117948 chrX 47464339 47464368 15117948 chr6 70068751 70068784 2120037 chr6 70144885 70144924 2120037 chr6 70190599 70190638 2120037 chr6 70300921 70300960 2120037 chr6 70336658 70336697 2120037 chr6 70365142 70365181 2120037 chr6 70387690 70387729 2120037 chr10 20847653 20847700 2678098 chr1 151861904 151862280 11668179 chr12 86362673 86362701 8230424 chr9 21881079 21881113 11481336 chr17 34810552 34810729 2181276 chr14 30037250 30037316 1569934 chr12 115568097 115568139 3099286 chr12 115606693 115606794 3099286 chr12 115656385 115656486 3099286 chr12 115807430 115807483 3099286 chr12 115820291 115820392 3099286 chr12 115909278 115909389 3099286 chr12 116071453 116071506 3099286 chr12 116206263 116206374 3099286 chrX 164531361 164531393 10859305 chr19 44346955 44346991 10580438 chrX 20027145 20027210 1420363 chr7 18568360 18568556 3336366 chr14 15368771 15368799 8900181 chr5 113309936 113310329 8543177 chr4 94543039 94543091 2504580 chr2 16328369 16328636 2504580 chr8 73628069 73629605 2504580 chr8 87867632 87867742 2504580 chr10 85729844 85730358 9182717 chr1 169461713 169461741 9006910 chr13 93455924 93455965 1545788 chr2 31581775 31581805 1349742 chr14 53185317 53185689 10790370 chr11 44461601 44461636 10942392 chr7 120806753 120806784 10766845 chr4 105292148 105292179 10766845 chr3 122248747 122248778 10766845 chr9 96705007 96705038 10766845 chr11 6315911 6315942 10766845 chr11 101183574 101183977 10766845 chr17 4837105 4837136 10766845 chr19 16231795 16231826 10766845 chr18 87608841 87608872 10766845 chr6 70655320 70655353 2556265 chr7 87369182 87369215 9819381 chr4 80305381 80305413 9819381 chr17 33610876 33610910 2457903 chr17 34870977 34871011 2457903 chr7 87369276 87369308 9700169 chr16 32350556 32350657 10216289 chr2 131944655 131944684 7910946 chr16 23805150 23805182 9731698 chr2 133245496 133245525 15342482 chr2 172586092 172586121 15342482 chr6 69157051 69157078 2481271 chr6 69213987 69214014 2481271 chr6 69347093 69347120 2481271 chr6 70655322 70655357 2481271 chr11 120639879 120639912 7772036 chr10 128336543 128336903 16129691 chr9 44093332 44093532 2037597 chr9 44095105 44095166 2037597 chr5 121148229 121148258 2026593 chr5 121168143 121168172 2026593 chr4 87994130 87994169 2026593 chr8 71809238 71809268 11562371 chr10 128343724 128345927 8253814 chr7 30299251 30299279 15632058 chr3 37317761 37317795 15632058 chr9 110863709 110864259 1480183 chr9 44732403 44732438 3142692 chrX 49232094 49232130 1551910 chr13 30758119 30758261 2111015 chr8 123625795 123625969 2111015 chr8 123629680 123629867 2111015 chr8 123631596 123631685 2111015 chr8 123633179 123633258 2111015 chr8 123634272 123634323 2111015 chr8 123639326 123642395 2111015 chr8 97068207 97068290 8824273 chr13 93455256 93455303 1569952 chr8 87791998 87792041 8195185 chr16 32350641 32350671 12642588 chr6 115387056 115387717 9367890 chr5 147578457 147578510 9315659 chr8 27273950 27273980 11773448 chr5 51844143 51844171 16513826 chr3 37317757 37317793 9310836 chr2 180429410 180429448 10514493 chr2 163238505 163238534 7523862 chr2 91037773 91037825 11971958 chr8 107512201 107512230 10516284 chr8 107513469 107513532 10516284 chr11 81849316 81849357 10542218 chr11 81851708 81851742 10542218 chr2 124845235 124845263 8621642 chr2 152426553 152426611 9368060 chr18 82688764 82688795 9671582 chr10 57472915 57473069 9671582 chr3 88060265 88060484 9671582 chr11 53462156 53462186 9889198 chr13 75555770 75555825 8999965 chr5 30404334 30404547 3782103 chr10 87396563 87396641 3782103 chr11 105791182 105791252 8901568 chr7 15939803 15939845 10777687 chr7 44396073 44396199 8474451 chr2 90897750 90897786 8474451 chr2 90915909 90916194 8474451 chr15 93508176 93508213 8474450 chr8 44805768 44806075 8474450 chr11 76966327 76966386 2249772 chrX 105323846 105323903 2249772 chr2 157839523 157839561 8832580 chr5 101905549 101905590 15056733 chr7 15939815 15939845 10777688 chr11 53478193 53478236 11893731 chr1 137071498 137071528 11893733 chr9 116023944 116024038 11893733 chr1 182533617 182533667 12095687 chr18 20808308 20808340 8325367 chr12 31850934 31851552 1339296 chr1 151861394 151862302 15213229 chr2 14147042 14147079 10085160 chr12 31850891 31850937 2171781 chr3 83928641 83928671 11254708 chr11 81997260 81997507 9163346 chr8 97068202 97068251 3103216 chr11 94209036 94209066 15824121 chr13 31633525 31633555 9676429 chr1 136106796 136106834 2068103 chr19 34317826 34317856 9334258 chr14 15368772 15368799 9685410 chr6 17413781 17413845 9920903 chr2 148099616 148099652 8284209 chr9 74676018 74676052 11279202 chr7 103701810 103701840 3476205 chr11 53563731 53564142 9694515 chr12 105964108 105964139 12791684 chr11 98840319 98840351 10567217 chr13 93455891 93455921 8063775 chr6 147221062 147221104 8063775 chr11 69611842 69612488 1317551 chr7 18568521 18568554 1532229 chr5 122361520 122361550 1532229 chr5 137711873 137711904 11050012 chrX 97579919 97579953 7862137 chr5 93422255 93422964 8454640 chr11 78736932 78736978 9169456 chr12 102955870 102955959 7615829 chr10 56065272 56065311 15354864 chr10 79067593 79067637 7724598 chr15 7757333 7757977 11146111 chr11 78736089 78736126 10356322 chr10 3557641 3557685 15322094 chr8 95715469 95715515 9830047 chr10 79818297 79818338 2181401 chr1 132851832 132851861 10861063 chr11 100755891 100755921 9497331 chr7 46729297 46729336 9153323 chr12 86362670 86362706 7623850 chr7 34827848 34827882 8346250 chr2 127027474 127027553 8649402 chr10 20848227 20848287 2403925 chr1 64985457 64985502 1996107 chr1 64997746 64997791 1996107 chr1 65860720 65860763 1996107 chr5 112496064 112496118 1996106 chr1 196639493 196639543 10989198 chr14 15368770 15368799 7969156 chr3 37317664 37317719 10586058 chr10 106898874 106898903 7739551 chr12 113875398 113875444 2196446 chr17 33589423 33589453 2196446 chr17 33610899 33610932 2196446 chr17 34870955 34870988 2196446 chr17 35001956 35001991 2196446 chr17 35032707 35032742 2196446 chr17 35806747 35806780 2196446 chr2 106860546 106860855 12730328 chr17 31406531 31406617 2247086 chr10 20847863 20847892 1727489 chr2 131642318 131642346 15358521 chr6 4455267 4455308 8348960 chr5 75433216 75433314 8552100 chr3 10196488 10196521 8552100 chr7 24606071 24606102 1915300 chr3 104943574 104943618 8065313 chr16 16777810 16777861 10779354 chr11 32183600 32183643 3464831 chr11 32196417 32196460 3464831 chr11 40592292 40595782 7957050 chr11 40597227 40598909 7957050 chr10 50327588 50328153 7957050 chr16 89519564 89519651 7957050 chr16 89521161 89521226 7957050 chr16 89522758 89522823 7957050 chr15 64004943 64005302 7957050 chr7 46729275 46729306 11447215 chr8 86177921 86178017 8264627 chr15 91019737 91019768 16249184 chr6 38306347 38306384 1946404 chrX 11614219 11614256 1946404 chrX 68056340 68056377 1946404 chrX 101481733 101481770 1946404 chrX 111098291 111098328 1946404 chr13 94549173 94549210 1946404 chr12 99448212 99448249 1946404 chr12 109263470 109263980 1946404 chr11 49522510 49522547 1946404 chr10 68720566 68720603 1946404 chr17 27257588 27257625 1946404 chr15 34387770 34387808 1946404 chr15 46499811 46499872 1946404 chr5 91535960 91535995 7911235 chr3 52357150 52357179 11919188 chr3 52433183 52433215 11919188 chr5 137346133 137349588 2406566 chr5 137351451 137352549 2406566 chr5 137353936 137354174 2406566 chr5 137355659 137357672 2406566 chr17 34808214 34808473 11856733 chr17 34809794 34809832 11856733 chrX 7128196 7128619 10331989 chr15 6333855 6334153 10944463 chr16 23806221 23806263 2137455 chr16 23806226 23806257 2850259 chr9 110863758 110863786 7623814 chr9 78015620 78015661 8849333 chr9 78042096 78042137 8849333 chr9 78074894 78074935 8849333 chr9 78133950 78133992 8849333 chr15 97736653 97736790 11432806 chr11 69482256 69482478 9479000 chr10 34079088 34079121 10965899 chr3 135522463 135522506 2203532 chr3 135526729 135529046 2203532 chr3 135531227 135532450 2203532 chr3 135538892 135538930 2203532 chr3 135541107 135541219 2203532 chr3 135542511 135542546 2203532 chr3 135545562 135545639 2203532 chr3 135551037 135551076 2203532 chr3 135552716 135552747 2203532 chr3 135556263 135556337 2203532 chr3 135564041 135564076 2203532 chr3 135592916 135592988 2203532 chr2 154261297 154261340 14576826 chr6 70655293 70655351 3200827 chr14 19622832 19622901 1762914 chr2 163447471 163447505 9765260 chr2 101425358 101425386 10082526 chr11 69396269 69396375 7899088 chr10 128360717 128360798 8360188 chr16 29985935 29987443 7906273 chrY_random 10870093 10870143 1722214 chrY_random 13323096 13323146 1722214 chrX 3009683 3009733 1722214 chrX 3017960 3018010 1722214 chrX 3115122 3115172 1722214 chrX 4465683 4465733 1722214 chrX 22744973 22745023 1722214 chrX 22753220 22753270 1722214 chrX 26169219 26169269 1722214 chrX 26574925 26574975 1722214 chrX 26583121 26583171 1722214 chrX 26931225 26931275 1722214 chrX 26939417 26939467 1722214 chrX 27409098 27409148 1722214 chrX 27732892 27732942 1722214 chrX 27741087 27741137 1722214 chrX 28081472 28081522 1722214 chrX 28089664 28089714 1722214 chrX 28668795 28668845 1722214 chrX 28676986 28677036 1722214 chrX 29009586 29009636 1722214 chrX 29485223 29485273 1722214 chrX 29493413 29493463 1722214 chrX 31327235 31327285 1722214 chrX 31335425 31335475 1722214 chrX 31661399 31661449 1722214 chrX 34425138 34425188 1722214 chrX 35208831 35208881 1722214 chrX 75140326 75140376 1722214 chrX 75148644 75148694 1722214 chrX 75320330 75320385 1722214 chrX 75328610 75328660 1722214 chrX 85264455 85264505 1722214 chrX 85272706 85272739 1722214 chrX 91766287 91766337 1722214 chrX 116197071 116197121 1722214 chrX 116205325 116205375 1722214 chrX 122485740 122485790 1722214 chrX 122494042 122494092 1722214 chrX 161150988 161151038 1722214 chrX 161159175 161159225 1722214 chr13 3172350 3172400 1722214 chr13 3180623 3180673 1722214 chr13 20657911 20657961 1722214 chr13 20666168 20666218 1722214 chr13 23132765 23132815 1722214 chr13 50724470 50724520 1722214 chr13 50732658 50732708 1722214 chr13 68290753 68290786 1722214 chr13 68917941 68917976 1722214 chr13 86661091 86661141 1722214 chr13 86669337 86669387 1722214 chr13 112849498 112849548 1722214 chr13 112857748 112857798 1722214 chr12 7169146 7169196 1722214 chr12 7177153 7177203 1722214 chr12 17896568 17896620 1722214 chr12 17900940 17900992 1722214 chr12 18036284 18036336 1722214 chr12 18040656 18040708 1722214 chr12 23055567 23055600 1722214 chr12 23063799 23063832 1722214 chr12 23088189 23088239 1722214 chr12 23092809 23092859 1722214 chr12 23601407 23601457 1722214 chr12 24421688 24421738 1722214 chr12 24429943 24429993 1722214 chr12 24439174 24439224 1722214 chr12 24670098 24670148 1722214 chr12 24674623 24674673 1722214 chr11 40977828 40977878 1722214 chr11 47262714 47262764 1722214 chr11 47270976 47271026 1722214 chr11 75173503 75173553 1722214 chr11 75181733 75181783 1722214 chr10 4258034 4258084 1722214 chr10 4266282 4266332 1722214 chr10 55324932 55324982 1722214 chr17 32790742 32790792 1722214 chr17 39075050 39075100 1722214 chr16 7785281 7785331 1722214 chr16 90966441 90966515 1722214 chr16 93711301 93711351 1722214 chr15 14818325 14818375 1722214 chr15 14823347 14823397 1722214 chr15 32814261 32814311 1722214 chr15 32822376 32822426 1722214 chr15 48999398 48999431 1722214 chr15 49007610 49007643 1722214 chr15 89789277 89789327 1722214 chr14 37020437 37020492 1722214 chr14 37028669 37028719 1722214 chr14 39035000 39035050 1722214 chr14 88457370 88457420 1722214 chr14 93991712 93991762 1722214 chr19 3247630 3247680 1722214 chr19 5315958 5316008 1722214 chr18 6346818 6346868 1722214 chr18 24695015 24695065 1722214 chr18 42609937 42609987 1722214 chr18 74384430 74384480 1722214 chr18 74392645 74392695 1722214 chr18 86326694 86326744 1722214 chr18 86334965 86335015 1722214 chr7 10085931 10085981 1722214 chr7 10354049 10354082 1722214 chr7 13631318 13631368 1722214 chr7 20202464 20202514 1722214 chr7 20210639 20210689 1722214 chr7 21397582 21397632 1722214 chr7 21405749 21405799 1722214 chr7 22620775 22620825 1722214 chr7 22628942 22628992 1722214 chr7 42162234 42162283 1722214 chr7 42172197 42172248 1722214 chr7 42288598 42288648 1722214 chr7 56555120 56555170 1722214 chr7 56788445 56788478 1722214 chr7 56796666 56796699 1722214 chr7 86481797 86481830 1722214 chr7 104697627 104697677 1722214 chr7 106162553 106162603 1722214 chr7 106170815 106170848 1722214 chr6 10346850 10346900 1722214 chr6 10870104 10870154 1722214 chr6 10878373 10878423 1722214 chr6 19594162 19594212 1722214 chr6 19602448 19602498 1722214 chr6 37677445 37677495 1722214 chr6 37714374 37714407 1722214 chr6 60354538 60354596 1722214 chr6 129770051 129770101 1722214 chr6 129778244 129778294 1722214 chr6 149181491 149181541 1722214 chr6 149315601 149315651 1722214 chr5 6489487 6489534 1722214 chr5 6497763 6497809 1722214 chr5 10627434 10627484 1722214 chr5 10635523 10635573 1722214 chr5 40980943 40980993 1722214 chr5 58606236 58606286 1722214 chr5 58614422 58614472 1722214 chr5 76673818 76673868 1722214 chr5 94676967 94677017 1722214 chr5 110132629 110132676 1722214 chr4 3016162 3016212 1722214 chr4 21052314 21052364 1722214 chr4 39044180 39044230 1722214 chr4 39052460 39052506 1722214 chr4 90366958 90367008 1722214 chr4 90374761 90374811 1722214 chr4 120664481 120664531 1722214 chr4 142945743 142945793 1722214 chr4 142954024 142954074 1722214 chr4 143285448 143285498 1722214 chr4 143293672 143293722 1722214 chr4 143351271 143351321 1722214 chr4 143359490 143359540 1722214 chr3 3241274 3241324 1722214 chr3 3249537 3249587 1722214 chr3 10857776 10857826 1722214 chr3 12567506 12567556 1722214 chr3 12571905 12571955 1722214 chr3 33945159 33945209 1722214 chr3 106717674 106717724 1722214 chr2 7527752 7527802 1722214 chr2 67930630 67930680 1722214 chr2 67938792 67938842 1722214 chr2 68347341 68347387 1722214 chr2 68356904 68356950 1722214 chr2 84699422 84699472 1722214 chr2 84707729 84707779 1722214 chr2 85819243 85819295 1722214 chr2 85823908 85823960 1722214 chr2 147154879 147154929 1722214 chr2 181848744 181848794 1722214 chr2 181857002 181857052 1722214 chr1 3166624 3166674 1722214 chr1 8835489 8835539 1722214 chr1 27450634 27450684 1722214 chr1 85016324 85016374 1722214 chr1 85024599 85024649 1722214 chr1 87299789 87299839 1722214 chr1 114428567 114428617 1722214 chr1 147958427 147958477 1722214 chr1 157306337 157306370 1722214 chr9 4855448 4855498 1722214 chr9 7407082 7407131 1722214 chr9 7415343 7415393 1722214 chr9 11773779 11773829 1722214 chr9 17995539 17995589 1722214 chr9 21977708 21977758 1722214 chr9 122696573 122696623 1722214 chr8 4959297 4959347 1722214 chr8 20164969 20165002 1722214 chr8 20173229 20173262 1722214 chr8 20181489 20181522 1722214 chr8 28769711 28769761 1722214 chr8 28777978 28778011 1722214 chr8 75759229 75759279 1722214 chr8 75767504 75767554 1722214 chr5_random 345218 345268 1722214 chr5_random 353511 353561 1722214 chr5_random 2061321 2061371 1722214 chr5_random 2907786 2907836 1722214 chr11 69396553 69396580 8441640 chr8 70421336 70421372 12904181 chr8 70422668 70422702 12904181 chr8 95715465 95715494 16079501 chr13 48677006 48678457 7669690 chr2 62284543 62284592 10567552 chr17 45496858 45496893 9113979 chr2 113744277 113744418 2552286 chr14 30040519 30040552 2753913 chr3 88464656 88464702 14634012 chr3 88470423 88470467 14634012 chr17 33589423 33589453 3501825 chr17 33610899 33610931 3501825 chr17 34870956 34870988 3501825 chr17 35001959 35001991 3501825 chr17 35032710 35032742 3501825 chr17 35806747 35806779 3501825 chr11 94936170 94936217 10473625 chr16 15800733 15800853 9528783 chr2 154260940 154261469 7958837 chr10 92678683 92679911 7958835 chr10 92684495 92684612 7958835 chr10 92694678 92695473 7958835 chr10 92714567 92714777 7958835 chr10 92740547 92740689 7958835 chr9 77845411 77845447 8962155 chr6 122708372 122708403 15054091 chr6 69157052 69157080 2107525 chr6 69213988 69214016 2107525 chr6 69347094 69347122 2107525 chr6 70655272 70655356 2107525 chr8 71809512 71809738 15755745 chr5 91525400 91525435 7523856 chr5 91565756 91565785 7523856 chr9 45687004 45687060 14654367 chr16 18940692 18940773 2116989 chr16 19092810 19093359 2116989 chr17 33589424 33589463 8413217 chr17 33610900 33610939 8413217 chr17 34870937 34870987 8413217 chr17 35001951 35001990 8413217 chr17 35032702 35032741 8413217 chr17 35806748 35806787 8413217 chr14 15368771 15368799 8413217 chr15 101094619 101094686 8413214 chr19 34321287 34321853 2398068 chr14 72059964 72059993 10330185 chr7 18566378 18566430 7969181 chr7 18569429 18569630 7969181 chr5 91547710 91547739 9614204 chr3 30143758 30143790 8557637 chr7 24801415 24801450 2011512 chr5 91525364 91525437 1875930 chr5 91536003 91536054 1875930 chr4 44737695 44738377 10662641 chr1 137869063 137869092 12407098 chr5 147585147 147585174 9252422 chr16 23806221 23806252 2147227 chr9 32483529 32483756 2163347 chr16 23806221 23806263 2898727 chr12 86362675 86362712 2147223 chr7 18568409 18568449 2163343 chr16 23806224 23806260 7926024 chr11 69403129 69403157 14707287 chr12 86362491 86362522 8506157 chr12 31850900 31850935 1850696 chr2 109475449 109475487 12114522 chr11 70435389 70435612 8464921 chr11 78736932 78736990 7508926 chr11 69561763 69562338 9151733 chr6 92210104 92210244 10537125 chr7 109852584 109852907 10657238 chr6 41045108 41045728 2557542 chr6 41050929 41051019 2557542 chr6 41059680 41059770 2557542 chr2 147056498 147057506 1889089 chr3 101733720 101733827 1324413 chrX 7128568 7128597 12045237 chr5 30343756 30343798 12177065 chr18 20808310 20808340 9668124 chr12 113712845 113713747 1401921 chr6 70655322 70655353 8268924 chr4 124154605 124154641 8948648 chr11 9017788 9017822 11559567 chr5 93403445 93403483 12403783 chr9 49551485 49551548 7910552 chr3 28888904 28889034 8544849 chr17 46016862 46016889 2108863 chr1 82171130 82171170 8544845 chr9 50505293 50505415 15522290 chr17 33589422 33589465 2540425 chr17 33610898 33610942 2540425 chr17 34870943 34870989 2540425 chr17 35001948 35001992 2540425 chr17 35032699 35032743 2540425 chr17 35047044 35047084 2540425 chr17 35077933 35077979 2540425 chr17 35806746 35806791 2540425 chr15 78322201 78322469 15752766 chr2 163441548 163441592 1881892 chr7 41898471 41899356 7862144 chr7 51614715 51615599 7862144 chr7 89482897 89482927 7862144 chr7 100635009 100635893 7862144 chr6 22654269 22654299 7862144 chr6 83840154 83841038 7862144 chr6 84777897 84778787 7862144 chr6 91394386 91394416 7862144 chr6 125127878 125127908 7862144 chr6 128167883 128168852 7862144 chr5 13048556 13049440 7862144 chr5 96102015 96102899 7862144 chr5 106103120 106104004 7862144 chr4 57465124 57466008 7862144 chr4 83576985 83577015 7862144 chr4 84395390 84395420 7862144 chr4 91343803 91344687 7862144 chr3 52700763 52701647 7862144 chr3 61549905 61549935 7862144 chr3 79003184 79004068 7862144 chr3 122222334 122223218 7862144 chr3 139586765 139587649 7862144 chr3 142899996 142900880 7862144 chr2 11327000 11327884 7862144 chr2 28755734 28756618 7862144 chr2 43340523 43341407 7862144 chr2 146446256 146446286 7862144 chr2 149434615 149435499 7862144 chr2 151065448 151065478 7862144 chr2 152427791 152428488 7862144 chr1 12551452 12551482 7862144 chr1 13771214 13771244 7862144 chr1 15254130 15254160 7862144 chr1 102112597 102112627 7862144 chr1 182163963 182163993 7862144 chr18 54109689 54110579 7862144 chr9 51324882 51324912 7862144 chr9 51376165 51376195 7862144 chr9 75479679 75479709 7862144 chr8 43107602 43107632 7862144 chr8 60442443 60443327 7862144 chr8 78301707 78302591 7862144 chr8 94578591 94578621 7862144 chr8 95605172 95606056 7862144 chr13 17606087 17606117 7862144 chr13 94394533 94394563 7862144 chr13 98558423 98558453 7862144 chr13 99502369 99503240 7862144 chr12 5616602 5616632 7862144 chr12 15753646 15753676 7862144 chr12 70840066 70840096 7862144 chr12 82292039 82292069 7862144 chr11 4464477 4464507 7862144 chr11 17873911 17873941 7862144 chr11 20235132 20236016 7862144 chr11 26686632 26687516 7862144 chr11 33176707 33176737 7862144 chr11 63128622 63128652 7862144 chr11 99495075 99495105 7862144 chr10 13580962 13580991 7862144 chr10 33498884 33498914 7862144 chr10 39701281 39701311 7862144 chr17 14510585 14510615 7862144 chr17 25054329 25054359 7862144 chr17 61466363 61466393 7862144 chr15 4833188 4833218 7862144 chr15 12519613 12520497 7862144 chr15 18109329 18109359 7862144 chr15 93024774 93025660 7862144 chr14 10074300 10075184 7862144 chr14 47331430 47331460 7862144 chr14 102256261 102257125 7862144 chr19 40266542 40266572 7862144 chrX 76446687 76447571 7862144 chrX 84824888 84824917 7862144 chrX 111575955 111575985 7862144 chrX 116277653 116277683 7862144 chrX 147286083 147286965 7862144 chr11 68915207 68915237 12483227 chr2 164639182 164639220 16166639 chr12 113875362 113875392 2068097 chr15 101094792 101094846 7969116 chr6 52133966 52134176 2565857 chr11 96119436 96119750 2565857 chr6 71192163 71192201 15890826 chr7 51614689 51614718 12972592 chr7 100635890 100635919 12972592 chr6 83841035 83841064 12972592 chr6 91394360 91394389 12972592 chr5 13049437 13049466 12972592 chr5 28869330 28869359 12972592 chr5 96101989 96102018 12972592 chr5 106104001 106104030 12972592 chr4 57466005 57466034 12972592 chr4 91344684 91344713 12972592 chr3 122223215 122223244 12972592 chr3 142899970 142899999 12972592 chr2 28756615 28756644 12972592 chr2 43341404 43341433 12972592 chr2 149434589 149434618 12972592 chr2 160946895 160946924 12972592 chr1 15255008 15255037 12972592 chr1 182164856 182164885 12972592 chr9 51324856 51324885 12972592 chr9 113379040 113379069 12972592 chr8 35791338 35791367 12972592 chr8 60442417 60442446 12972592 chr8 78302588 78302617 12972592 chr8 95606053 95606082 12972592 chr13 99503237 99503266 12972592 chr12 50717875 50717904 12972592 chr11 20236013 20236042 12972592 chr11 63129503 63129532 12972592 chr10 33498911 33498940 12972592 chr15 4832308 4832337 12972592 chr15 12519587 12519616 12972592 chr14 10075181 10075210 12972592 chr19 16344789 16344818 12972592 chrX 12483975 12484004 12972592 chrX 76447568 76447597 12972592 chr2 102702389 102702429 10657993 chr11 98584304 98584335 12150932 chr11 98589151 98589199 12150932 chr10 84581012 84581043 12150932 chr3 94476562 94476591 12150932 chr2 92213483 92213532 12150932 chr9 78015471 78015501 15155840 chr9 78041947 78041977 15155840 chr9 78068344 78068374 15155840 chr9 78134110 78134140 15155840 chr17 33589362 33589817 3510743 chr17 33610692 33611369 3510743 chr17 34870572 34871119 3510743 chr17 34906604 34906783 3510743 chr17 34987031 34987633 3510743 chr17 35001576 35002052 3510743 chr17 35032549 35032803 3510743 chr17 35046695 35047148 3510743 chr17 35790654 35790691 3510743 chr17 35806743 35806790 3510743 chr7 46244212 46244242 8127707 chr5 16065673 16065702 7935420 chr16 23806222 23806263 2564850 chr6 122821684 122821919 16854466 chr11 100724804 100724845 11438543 chr11 100727322 100727361 11438543 chr13 55339730 55339779 12444919 chr11 54093064 54093105 8289796 chrX 20027114 20027144 9478976 chr17 35113681 35114128 8289793 chr12 86362675 86362704 1922053 chr2 127817488 127817521 16162916 chr7 105441520 105441574 7800475 chr7 105448137 105448378 7800475 chr9 18051052 18051105 7800475 chr1 136106263 136106470 10548518 chrX 164531361 164531392 16595692 chr9 45687017 45687057 9545312 chr6 68946741 68946794 3537963 chr6 69041093 69041146 3537963 chr6 69115022 69115075 3537963 chr6 69157044 69157097 3537963 chr6 69173349 69173399 3537963 chr6 69198073 69198124 3537963 chr6 69213980 69214033 3537963 chr6 69235024 69235077 3537963 chr6 69308133 69308186 3537963 chr6 69330005 69330055 3537963 chr6 69347086 69347139 3537963 chr6 69368402 69368455 3537963 chr6 69537462 69537512 3537963 chr6 69561843 69561892 3537963 chr12 114380256 114380293 3537963 chr12 114442777 114442823 3537963 chr12 114508147 114508198 3537963 chr12 115130944 115130981 3537963 chr12 115156960 115156997 3537963 chr12 115194585 115194638 3537963 chr12 115299502 115299555 3537963 chr12 115362911 115362964 3537963 chr2 28437363 28437397 11696536 chr16 10699184 10700012 11696536 chr16 87618776 87618809 9565602 chr17 33611945 33611997 7984430 chr17 35000757 35000789 7984430 chr17 35045857 35045889 7984430 chr17 35076933 35076965 7984430 chr5 8897866 8900457 8877103 chr10 61524837 61524867 10825208 chr10 61527575 61527605 10825208 chr6 108626135 108626168 14581485 chr11 68914963 68914995 14581485 chr10 66933148 66933181 8483478 chr12 86362677 86362712 8483478 chr18 34987075 34987125 8483478 chr7 109913092 109913392 11500387 chr1 74833834 74833863 15538371 chr1 97497672 97498061 9516473 chr5 147580550 147580997 7907546 chr5 147584725 147585523 7907546 chr11 96121128 96121172 7907546 chr15 102838905 102838963 7907546 chr15 102863817 102863869 7907546 chr16 23806259 23806295 7907546 chr5 75856697 75856747 8695840 chr15 97830430 97830470 10825206 chr3 138464665 138464701 8756633 chrX 58046027 58046063 8756633 chr7 32068072 32068100 11340077 chr7 33021287 33021315 11340077 chr7 35943485 35943513 11340077 chr7 41898900 41898928 11340077 chr7 51615143 51615171 11340077 chr7 67656832 67656860 11340077 chr7 72863210 72863238 11340077 chr7 89483314 89483342 11340077 chr7 100635437 100635465 11340077 chr6 18095167 18095195 11340077 chr6 22653843 22653871 11340077 chr6 83840582 83840610 11340077 chr6 91394814 91394842 11340077 chr6 93103035 93103063 11340077 chr6 94786420 94786448 11340077 chr6 125128524 125128552 11340077 chr6 128168396 128168424 11340077 chr5 13048984 13049012 11340077 chr5 16020545 16020573 11340077 chr5 96102443 96102471 11340077 chr5 106103548 106103576 11340077 chr5 108386069 108386097 11340077 chr4 41357701 41357729 11340077 chr4 57465552 57465580 11340077 chr4 82665651 82665679 11340077 chr4 83576559 83576587 11340077 chr4 84394958 84394986 11340077 chr4 91344231 91344259 11340077 chr4 128371236 128371264 11340077 chr3 8599115 8599143 11340077 chr3 14488377 14488405 11340077 chr3 14950850 14950878 11340077 chr3 36055858 36055886 11340077 chr3 52701191 52701219 11340077 chr3 61550334 61550362 11340077 chr3 79003612 79003640 11340077 chr3 121172660 121172688 11340077 chr3 122222762 122222790 11340077 chr3 125034829 125034857 11340077 chr3 139587193 139587221 11340077 chr3 142900424 142900452 11340077 chr2 11327428 11327456 11340077 chr2 28756162 28756190 11340077 chr2 43340951 43340979 11340077 chr2 45631918 45631946 11340077 chr2 56895567 56895595 11340077 chr2 81923535 81923563 11340077 chr2 104338709 104338737 11340077 chr2 146446685 146446713 11340077 chr2 149435042 149435070 11340077 chr2 151065882 151065910 11340077 chr2 160946436 160946464 11340077 chr2 162674240 162674268 11340077 chr1 13771642 13771670 11340077 chr1 15254558 15254586 11340077 chr1 52448315 52448343 11340077 chr1 182164391 182164419 11340077 chr18 23360040 23360068 11340077 chr18 56098088 56098116 11340077 chr18 89668694 89668722 11340077 chr9 45587468 45587496 11340077 chr9 51755184 51755212 11340077 chr8 37841689 37841717 11340077 chr8 43108024 43108052 11340077 chr8 47754033 47754061 11340077 chr8 53777747 53777775 11340077 chr8 66670675 66670703 11340077 chr8 78302135 78302163 11340077 chr8 95605600 95605628 11340077 chr8 100455260 100455288 11340077 chr13 20712385 20712413 11340077 chr13 98558850 98558878 11340077 chr13 99502796 99502824 11340077 chr12 5616170 5616198 11340077 chr12 13778754 13778782 11340077 chr12 15754079 15754107 11340077 chr12 70839622 70839650 11340077 chr12 72765419 72765447 11340077 chr12 82291607 82291635 11340077 chr11 3852158 3852186 11340077 chr11 4464070 4464098 11340077 chr11 17874340 17874368 11340077 chr11 20235560 20235588 11340077 chr11 26687060 26687088 11340077 chr11 48578522 48578550 11340077 chr11 63129050 63129078 11340077 chr11 79188004 79188032 11340077 chr11 99494649 99494677 11340077 chr11 108975822 108975850 11340077 chr10 22481183 22481211 11340077 chr10 33498458 33498486 11340077 chr10 39701715 39701743 11340077 chr10 43510079 43510107 11340077 chr10 44694958 44694986 11340077 chr10 126716524 126716552 11340077 chr17 61466791 61466819 11340077 chr17 79163004 79163032 11340077 chr16 9958744 9958772 11340077 chr15 12520041 12520069 11340077 chr15 43047769 43047797 11340077 chr15 84694507 84694535 11340077 chr15 93025204 93025232 11340077 chr14 10074728 10074756 11340077 chr14 47331004 47331032 11340077 chr14 102256689 102256717 11340077 chr19 16345220 16345248 11340077 chr19 25863452 25863480 11340077 chr19 40266122 40266150 11340077 chr19 46728128 46728156 11340077 chrX 76447115 76447143 11340077 chrX 84825316 84825344 11340077 chrX 111576383 111576411 11340077 chrX 135023391 135023419 11340077 chrX 137121172 137121200 11340077 chrX 147286510 147286538 11340077 chrX 148744323 148744351 11340077 chr7 24606069 24606218 12446773 chr12 113713039 113713078 10748032 chr1 173050697 173050731 9295294 chr18 36852669 36852801 1383228 chr2 62284546 62284588 9372951 chr6 85417666 85417702 10561509 chr5 130102072 130102109 10561509 chr3 88383090 88383129 10561509 chr11 22890632 22890669 10561509 chr10 116467502 116467538 10561509 chr17 12759732 12759768 10561509 chr16 87384799 87384835 10561509 chr15 31546066 31546480 10561509 chr12 86368563 86368595 10037443 chr9 45686921 45687188 9121477 chr5 30343758 30343787 9535723 chr8 71809363 71809400 9535723 chr15 74683441 74683480 2783417 chr2 155442606 155442644 10777534 chr13 27064876 27064908 9717847 chr15 85410289 85410319 11914369 chr14 30038416 30038468 8114720 chr7 3538563 3538594 8798433 chr7 3859546 3859577 8798433 chr7 25430522 25430560 8798433 chr17 34870980 34871010 1986360 chr7 46583869 46583914 8007954 chr11 78736003 78736032 8649986 chr15 97830452 97830489 9614106 chr2 101425472 101425503 10845919 chr7 28059498 28059529 8961261 chr9 86493186 86493221 1314168 chr11 54093149 54093179 7623820 chr17 35114028 35114070 8152920 chr12 86362670 86362705 2062642 chr3 145584297 145585034 2062642 chr3 145586517 145589421 2062642 chr12 104139374 104139661 2836860 chr12 104174806 104175094 2836860 chr12 104229502 104229533 2836860 chr12 104358132 104358161 2836860 chr5 91535984 91536015 2836860 chr18 20806563 20806636 2836860 chr5 121148229 121148258 2542764 chr5 121168143 121168172 2542764 chr12 91806440 91806470 7997232 chrX 7133613 7133659 9089398 chr2 73619656 73619758 2529117 chr16 23806224 23806260 2529117 chr6 68684617 68684724 6425835 chr6 68698141 68698686 6425835 chr6 68736759 68737358 6425835 chr6 68840000 68840564 6425835 chr6 68890968 68891062 6425835 chr6 68920338 68921728 6425835 chr6 68946141 68946963 6425835 chr6 68972552 68973158 6425835 chr6 68989285 68990099 6425835 chr6 69040491 69041384 6425835 chr6 69085698 69087114 6425835 chr6 69114421 69115312 6425835 chr6 69127163 69128068 6425835 chr6 69156434 69157335 6425835 chr6 69172740 69173640 6425835 chr6 69197464 69198364 6425835 chr6 69213370 69214271 6425835 chr6 69234414 69235314 6425835 chr6 69272068 69272593 6425835 chr6 69307547 69308424 6425835 chr6 69329407 69330297 6425835 chr6 69346488 69347377 6425835 chr6 69367798 69368693 6425835 chr6 69392781 69393073 6425835 chr6 69429835 69430439 6425835 chr6 69473954 69475278 6425835 chr6 69505555 69506447 6425835 chr6 69516875 69517762 6425835 chr6 69536855 69537753 6425835 chr6 69561245 69562130 6425835 chr6 69578404 69578943 6425835 chr6 69610987 69612347 6425835 chr6 69630362 69630940 6425835 chr6 70652142 70652210 6425835 chr9 54560093 54560196 10714763 chr3 19885848 19887595 11278361 chr2 181294771 181294837 11890680 chr16 14204867 14204896 9529161 chr16 14206006 14206115 9529161 chr16 15801942 15802019 1714459 chr19 25572693 25572730 11870074 chr11 83478593 83478783 7835696 chr12 109901105 109901145 9822638 chr11 78736047 78736116 7520478 chr10 60693068 60693125 8871649 chr3 10166295 10166330 10629058 chr3 10190983 10191043 10629058 chr13 42174356 42175365 1694016 chr13 42178530 42178635 1694016 chr13 42192407 42192904 1694016 chr13 42194361 42195998 1694016 chr5 126371778 126372395 1694016 chr10 13829637 13829679 1694016 chr3 142601284 142602903 1694016 chrX 92424645 92425011 1694016 chr12 31850891 31850939 2556699 chr2 172795579 172795617 7532283 chr4 140282527 140282656 16321658 chr11 69764186 69765140 2404278 chr11 78736811 78736954 9164945 chr12 86362675 86362716 12137955 chr2 133243977 133244008 12511606 chr12 113787245 113787280 8089482 chr17 33897270 33897310 8089482 chr5 107965132 107965162 15131254 chr5 107966946 107966977 15131254 chr7 18568531 18568560 9614136 chr12 113875209 113875260 9614136 chr11 67052883 67053961 9614136 chr17 34470750 34470826 2174104 chr9 57494749 57494781 2174107 chr3 68778500 68778530 11602633 chr6 92210030 92210058 8910392 chr6 92212007 92212036 8910392 chr2 76161191 76162902 9166696 chr9 110863758 110863788 1584212 chr4 88312923 88312952 1614874 chr9 54562792 54562841 9092560 chr17 25093747 25093807 8839840 chr6 65067755 65067784 10998423 chr9 86492889 86493178 2332433 chr9 107764658 107765245 9467940 chr3 159534366 159534406 12759335 chr8 119981734 119981808 12759335 chr4 63533051 63537026 7534412 chr1 151860747 151860789 10859338 chr6 4455593 4455637 2072909 chr4 15808178 15808216 8464915 chr9 21713832 21713868 1650452 chrX 7116697 7116727 1650452 chr1 172895950 172895985 8070412 chr12 17570230 17570438 1650455 chr3 28888878 28888913 15886523 chr12 113875218 113875262 2357966 chr3 135628873 135628907 9190210 chr2 105465566 105465607 12962539 chr6 134199218 134199263 9009269 chr11 106130522 106130913 2508087 chr19 43579561 43579614 10527950 chr5 91535981 91536012 10527950 chr8 87866666 87866694 8537375 chr11 65087251 65087284 14645532 chr2 104927051 104927087 9336463 chr9 21881604 21881649 15563837 chr6 41043106 41043146 12082086 chr17 33955130 33955170 2564635 chr18 43863434 43863477 7935489 chr3 89222379 89222424 1315961 chr16 18515177 18515212 12533514 chr7 46243934 46243963 12135926 chr16 23806221 23806263 9832447 chr9 53991723 53991761 9832447 chr8 93960201 93960321 10760507 chr2 83525256 83525288 10899572 chr12 86362670 86362704 11279108 chr9 45687017 45687189 11279108 chr15 102815626 102815660 9860988 chr6 122673019 122673057 15743839 chr11 53460767 53460830 8052653 chr3 37317765 37317795 7815567 chr5 104410880 104410914 15292199 chr1 72808169 72808198 11978764 chr5 91525400 91525436 8455618 chr8 97068302 97068335 3371659 chr14 53032877 53033063 8417120 chr19 39339059 39339105 15155833 chr11 100150361 100150496 15292219 chr12 113875209 113875262 2143023 chr8 77980068 77980098 10821856 chr7 34758869 34759579 1709121 chr7 34765225 34765304 1709121 chr11 98517240 98517282 1709121 chr11 117785319 117785367 10821852 chr12 8797292 8797321 8647862 chr2 26022960 26023284 7708713 chr2 26024982 26025025 7708713 chr17 56913368 56913420 1590761 chr18 5705041 5705226 7935395 chr18 5748702 5748854 7935395 chr18 5766261 5768013 7935395 chr18 5770384 5770456 7935395 chr18 5772921 5774892 7935395 chr18 82688764 82688797 1379237 chr12 113725300 113725411 1922063 chr17 33897271 33897383 1922063 chr6 70655311 70655364 1922063 chr10 75304093 75304140 12083786 chr6 103929892 103930362 1967980 chr4 124160870 124160929 1967980 chr3 3814640 3815822 1967980 chr3 129425688 129426847 1967980 chr2 18070878 18070935 1967980 chr1 42642750 42642809 1967980 chr1 161130490 161130863 1967980 chr1 167734340 167734399 1967980 chr9 45912366 45912537 1967980 chrX 49123967 49124378 1967980 chrX 138022310 138022583 1967980 chr13 78488859 78489006 1967980 chr17 35114103 35114536 1967980 chr17 35117153 35118822 1967980 chr14 15898868 15899489 1967980 chr5 93424229 93424259 9169460 chr5 143171910 143171940 1425594 chr1 72808042 72808222 7476973 chr11 98517240 98517364 1691438 chr17 33897320 33897361 1691438 chr8 97068089 97068120 9854025 chr11 106118005 106118034 3561414 chr19 45794029 45794485 10026229 chr19 10045617 10045708 8051121 chr16 42260014 42260042 8703010 chr12 3954578 3954608 7902581 chr3 37317568 37317597 7902581 chr16 23806224 23806252 1824920 chr8 87866699 87866741 8265655 chr8 87868841 87868887 8265655 chr2 11559184 11559294 10082534 chr10 20847628 20848108 8683983 chr3 80999455 80999483 11256962 chr4 62830852 62830882 8417341 chr4 4066006 4066034 1827203 chr9 57494749 57494781 2160969 chr7 144670749 144670781 10669750 chr2 129062603 129062632 1630455 chr5 93424173 93424204 7730628 chr18 34989184 34989285 2496302 chr6 85477484 85477552 2496302 chr10 66931538 66933967 2496302 chr10 66935018 66936588 2496302 chr14 68814682 68814794 2496302 chr7 100366077 100366121 10333481 chr7 100367250 100367300 10333481 chr7 87369182 87369306 10707962 chr12 113875195 113875343 3019664 chr8 26983469 26984665 1312839 chr8 3694204 3694256 8977198 chr8 73627360 73627975 1714380 chr10 82179842 82180616 1698608 chr10 82182229 82182364 1698608 chr10 82184841 82184895 1698608 chr10 82186500 82186594 1698608 chr10 82191631 82191714 1698608 chr10 82193799 82193936 1698608 chr17 47853528 47854911 1698608 chr17 47856870 47859122 1698608 chr17 47866011 47866148 1698608 chr17 47875191 47875254 1698608 chr18 82688931 82688970 1698607 chr12 77323391 77323422 14766014 chr15 88848026 88848126 12754203 chr11 96133654 96134849 7969151 chr2 26738275 26738484 1996091 chr12 86362674 86362704 2493627 chr6 4455387 4455417 2019574 chr11 94751574 94752273 2019574 chr5 89839308 89839533 15548386 chr8 97068207 97068238 10096565 chr8 83388451 83389772 8690723 chr8 89614668 89614698 14985507 chr15 38519948 38519977 14985507 chrX 159414901 159414931 14985507 chrX 159418071 159418353 14985507 chr8 77985762 77985790 7929191 chr1 66868620 66868649 7721942 chr8 107736165 107736201 16527247 chr14 53185362 53185593 2524381 chr11 44456142 44456435 12077253 chr16 16777810 16777842 12077253 chr8 87792031 87792079 7682653 chr8 87795040 87795392 7682653 chr11 69406865 69406896 11919084 chr12 14520677 14520705 15589317 chr10 94842340 94842368 15589317 chr15 74813843 74813871 15589317 chr11 78315407 78315439 11997100 chr1 133107821 133107866 15939554 chr8 27273863 27273894 16109738 chr12 114935221 114935265 7499271 chr12 114981056 114981115 7499271 chr12 114986580 114986620 7499271 chr12 115031654 115031718 7499271 chr12 115094657 115094721 7499271 chr12 115113957 115114011 7499271 chr12 115124833 115124892 7499271 chr12 115156735 115156789 7499271 chr12 115184332 115184386 7499271 chr12 115411466 115411555 7499271 chr12 115439193 115439249 7499271 chr12 115567833 115567914 7499271 chr12 115579468 115579522 7499271 chr12 115593572 115593661 7499271 chr12 115606488 115606578 7499271 chr12 115641760 115641804 7499271 chr12 115656180 115656270 7499271 chr12 115783167 115783248 7499271 chr12 115792630 115792684 7499271 chr12 115807225 115807314 7499271 chr12 115820070 115820159 7499271 chr12 115834780 115834842 7499271 chr12 115894502 115894564 7499271 chr12 115909084 115909173 7499271 chr12 115943710 115943774 7499271 chr12 115955630 115955720 7499271 chr12 116041195 116041259 7499271 chr12 116052025 116052089 7499271 chr12 116071246 116071312 7499271 chr12 116139974 116140036 7499271 chr12 116190298 116190360 7499271 chr12 116206069 116206159 7499271 chr12 116238679 116238743 7499271 chr12 116250733 116250823 7499271 chr12 116295974 116296030 7499271 chr12 116309960 116310014 7499271 chr12 116336182 116336245 7499271 chr12 116360429 116360493 7499271 chr12 116368364 116368428 7499271 chr12 116400623 116400687 7499271 chr12 116448113 116448167 7499271 chr12 116457746 116457835 7499271 chrX 6930809 6930883 1732746 chr1 77405308 77405349 9425139 chr2 104927480 104927514 9572484 chr12 104139349 104139711 2835657 chr12 104174783 104175144 2835657 chr12 104229223 104229583 2835657 chr12 104264774 104265134 2835657 chr12 104306111 104306471 2835657 chr12 104358109 104358469 2835657 chr9 109977127 109977179 16288722 chr11 117784319 117784347 16055089 chr7 119936637 119936667 1944285 chr7 26015815 26015923 15115437 chr7 26543961 26544069 15115437 chr6 52134627 52134846 10075847 chr11 53462119 53462152 8674125 chr12 86362654 86362945 8547224 chr7 18568360 18568567 8474439 chr12 86362674 86362703 1508214 chr3 37317570 37317599 8920856 chr3 37317767 37317796 1740667 chr18 20808310 20808338 9278450 chr5 30404403 30404433 2041767 chr8 95715469 95715515 9278454 chrX 145890537 145890592 17038566 chr13 15805218 15805248 9645703 chr13 15808167 15808197 9645703 chr3 88459030 88459063 12551949 chr3 88464736 88464769 12551949 chr3 88470501 88470534 12551949 chr17 16374737 16374767 10488087 chr2 162764102 162764132 10488087 chr17 31406531 31406588 3170605 chr15 102814722 102814982 8575334 chr11 4139834 4140014 8605875 chr16 87588033 87588301 11530014 chr10 106896028 106896057 11782449 chr17 39672035 39672210 8441629 chr10 80208260 80208289 10913126 chr9 57813047 57813102 10913126 chr5 88773939 88774182 8065333 chr15 85562971 85563000 12554753 chr2 91732737 91734451 7982887 chr11 60026654 60026701 10918064 chr2 105483208 105483268 7529875 chr14 62371254 62371322 10553071 chr1 182533904 182533975 15982639 chr4 134425012 134425135 8164679 chr17 44180251 44180353 8164679 chr17 44198285 44198415 8164679 chr16 92492846 92494983 8164679 chr16 92502457 92502618 8164679 chr16 92533012 92533204 8164679 chr16 92557568 92557673 8164679 chr16 92577833 92577993 8164679 chr16 92584340 92586187 8164679 chr8 4349461 4349655 16517733 chr8 74508957 74508987 9353271 chr9 110861572 110864453 1939212 chr13 30756677 30756725 7541907 chr16 23806221 23806253 9671480 chr11 32183543 32183592 9144493 chr11 32196360 32196409 9144493 chr17 34871047 34871100 9144493 chr8 3622333 3626083 2065970 chr6 70655323 70655353 1598211 chr17 34871062 34871092 1598211 chr17 26566988 26567223 7586217 chr18 34987527 34987557 8737376 chr6 132024024 132024248 1747160 chr6 132083311 132083546 1747160 chr6 132176165 132176400 1747160 chr6 132280378 132280602 1747160 chr6 132329756 132329991 1747160 chr6 132407373 132407597 1747160 chr6 133257934 133257987 1747160 chr6 133494907 133494960 1747160 chr12 105964105 105964142 15805112 chr4 122502564 122502605 10655054 chr3 89222379 89222424 9234678 chr18 60929071 60929106 2115119 chr8 24223212 24223318 2172788 chr11 94936097 94936174 14670999 chr4 144513603 144513631 9190933 chr13 93455946 93455976 9121444 chr2 90897635 90897832 1985210 chr2 90900268 90900344 1985210 chr2 90914130 90916592 1985210 chr8 27273933 27273962 9832418 chr17 24360202 24360244 10891372 chr7 78926828 78926857 9368062 chr17 33896554 33896590 7722306 chr6 145033118 145033148 1340466 chr16 15801215 15801865 1840554 chr2 167381023 167381533 1840554 chr6 115387317 115387351 10862621 chr2 167380225 167380831 10862621 chr13 63575639 63575677 15087129 chr7 41898796 41898824 12890683 chr7 51615247 51615275 12890683 chr7 89483418 89483446 12890683 chr7 100635333 100635361 12890683 chr6 22653947 22653975 12890683 chr6 83840478 83840506 12890683 chr6 84778435 84778463 12890683 chr6 91394918 91394946 12890683 chr6 125128286 125128314 12890683 chr6 128168292 128168320 12890683 chr5 13048880 13048908 12890683 chr5 28869888 28869916 12890683 chr5 96102547 96102575 12890683 chr5 106103444 106103472 12890683 chr4 57465448 57465476 12890683 chr4 83576663 83576691 12890683 chr4 91344127 91344155 12890683 chr3 52701295 52701323 12890683 chr3 61550230 61550258 12890683 chr3 69654804 69654832 12890683 chr3 79003716 79003744 12890683 chr3 122222658 122222686 12890683 chr3 139587297 139587325 12890683 chr3 142900528 142900556 12890683 chr2 28756058 28756086 12890683 chr2 43340847 43340875 12890683 chr2 104092944 104092972 12890683 chr2 128249130 128249158 12890683 chr2 149435147 149435175 12890683 chr2 151066018 151066046 12890683 chr1 13771538 13771566 12890683 chr1 15254454 15254482 12890683 chr1 152899145 152899173 12890683 chr1 182164287 182164315 12890683 chr18 54110227 54110255 12890683 chr9 49938709 49938737 12890683 chr9 75480003 75480031 12890683 chr8 37841585 37841613 12890683 chr8 60442975 60443003 12890683 chr8 78302031 78302059 12890683 chr8 95605496 95605524 12890683 chr13 11994118 11994146 12890683 chr13 17606625 17606653 12890683 chr12 70839518 70839546 12890683 chr12 72765315 72765343 12890683 chr11 3852262 3852290 12890683 chr11 17874236 17874264 12890683 chr11 20235456 20235484 12890683 chr11 26687164 26687192 12890683 chr11 99494753 99494781 12890683 chr10 13581285 13581313 12890683 chr10 22481287 22481315 12890683 chr10 33498351 33498379 12890683 chr10 39701819 39701847 12890683 chr10 118296364 118296392 12890683 chr10 121572953 121572981 12890683 chr17 61466687 61466715 12890683 chr15 12520145 12520173 12890683 chr15 93025308 93025336 12890683 chr14 10074624 10074652 12890683 chr14 47331108 47331136 12890683 chr19 25863348 25863376 12890683 chrX 12483420 12483448 12890683 chrX 76447011 76447039 12890683 chrX 137121068 137121096 12890683 chrX 147286614 147286642 12890683 chr7 18568427 18568476 7673178 chr15 75583532 75583563 16847327 chr12 113675503 113675532 14583460 chr12 113676860 113676889 14583460 chr19 5492746 5492800 3198687 chr1 89020343 89021805 3198687 chr8 43745980 43746034 3198687 chr3 20300210 20301022 8923460 chrX 118218831 118219048 8923460 chr7 18568516 18568562 8321243 chr16 38172277 38173137 9489701 chr16 38185264 38185310 9489701 chr17 34810547 34810577 9281604 chr12 86362671 86362700 3071491 chr7 18461602 18465370 1741260 chr7 18466539 18469320 1741260 chr16 32350556 32350657 10744779 chr8 27273943 27273974 12790807 chr18 34986767 34986829 10829028 chr8 97068173 97068435 6095286 chr12 86362672 86362702 2557547 chr12 113093401 113093434 15105421 chr9 20703219 20703262 12799438 chr3 37317565 37317601 12896977 chr17 31406583 31406614 8876643 chr11 81849373 81849433 8630731 chr11 81851530 81851898 8630731 chr4 35082682 35082711 1379672 chr18 43862650 43862930 3399394 chr19 44460945 44460975 9689914 chr11 94892868 94893018 16475024 chr5 91525395 91525436 2371282 chr5 91535955 91535987 2371282 chr7 18568472 18568552 2814500 chr3 159534198 159534229 15900016 chr4 41236704 41236739 11679588 chr12 105964109 105964139 10748162 chr11 96181620 96181650 7600572 chr12 113676249 113676300 10931834 chr5 88774019 88774051 12151092 chr17 33871427 33871472 1986250 chr5 142653989 142654515 8007964 chr5 142687614 142687800 8007964 chr5 142701158 142701318 8007964 chr5 142702712 142702861 8007964 chr5 142703909 142704069 8007964 chr5 142705987 142706514 8007964 chr5 142707823 142709438 8007964 chr11 121076364 121076591 8007964 chr11 121112130 121112225 8007964 chr11 32183600 32183676 2233727 chr11 32196417 32196493 2233727 chr10 79293961 79293990 12949072 chr17 6012317 6012892 2554307 chr17 33643283 33644637 2554307 chr17 33646106 33648848 2554307 chr2 27563769 27563934 2554307 chr2 27578206 27578276 2554307 chr2 27581548 27581678 2554307 chr2 56926045 56926100 2554307 chr1 169463963 169464125 2554307 chr1 169475799 169475921 2554307 chr1 75243574 75244102 8120103 chr1 75245461 75246840 8120103 chr8 27273959 27274009 12239105 chr6 55381695 55381725 12031496 chr6 70655318 70655350 2542770 chr2 38532664 38532706 10684809 chr2 38536570 38536607 10684809 chr5 91525395 91525435 7520913 chr5 91559417 91559470 7520913 chr1 77985885 77986724 2022185 chr1 78004722 78005858 2022185 chr1 78015511 78015563 2022185 chr1 78075618 78075680 2022185 chr1 78079923 78080193 2022185 chr4 63231533 63231725 15702971 chr2 131944599 131944719 8557653 chr8 87866606 87866694 11904151 chr8 86177898 86177931 8668156 chr5 8803880 8803912 9019155 chr4 94544510 94544564 1542579 chr6 4455529 4455626 2043139 chr11 94752150 94752179 2043139 chr5 148037297 148037332 15192019 chr4 124304902 124304947 8467794 chr4 124306961 124307422 8467794 chr4 124322517 124323663 8467794 chr4 124326589 124327487 8467794 chr4 124333420 124333500 8467794 chr4 124340000 124341221 8467794 chr4 124344831 124344896 8467794 chr4 124346445 124347053 8467794 chr17 33610798 33610831 9344877 chr12 58461347 58461377 11297512 chr2 9775726 9776222 2017177 chr2 9795441 9795542 2017177 chr6 132083388 132083423 10506207 chr6 132329829 132329868 10506207 chr12 74028104 74028132 8628654 chr12 74032218 74032246 8628654 chr6 70655321 70655351 2536725 chr2 154261286 154261338 9218478 chr4 146844271 146844309 10903346 chr4 35082315 35082343 7513049 chr17 33896148 33896263 2105455 chr3 152169789 152170157 8125259 chr2 130801038 130801228 8125259 chr7 46713835 46713863 7998973 chr11 54093096 54093125 1944268 chr11 98517360 98517391 1944268 chr5 104539335 104539412 10788516 chr6 92210237 92210394 9421415 chr19 8779922 8780386 2761540 chr9 78015620 78015661 11708801 chr9 78042096 78042137 11708801 chr9 78074894 78074935 11708801 chr9 78133950 78133991 11708801 chr7 34827854 34827883 7862113 chr16 15800733 15800808 10867011 chr16 4039921 4039963 9492053 chr16 4043853 4043886 9492053 chr18 34987316 34987459 3141919 chr18 34989742 34990942 3141919 chrX 107018248 107018296 8876240 chr12 86362674 86362703 1658630 chr6 4455157 4455412 9143363 chr2 28444014 28444043 15718298 chr11 120640141 120640174 9164847 chr11 120640251 120640290 10207099 chr12 86362666 86362711 2504586 chr12 115955870 115955901 2826127 chr12 116250973 116251004 2826127 chr19 41082388 41082741 1922043 chr16 16777513 16777740 1922043 chr16 16782846 16782880 1922043 chr16 17893921 17893955 1922043 chr11 4848070 4848108 8621737 chrX 7124905 7125430 2044960 chr19 34358328 34358380 10660538 chr5 38112880 38113050 9278425 chr5 30404330 30404483 2779579 chr10 87396585 87396649 2779579 chr10 119879322 119879355 10558886 chr5 150790872 150790995 14680822 chr16 33415499 33415540 10359087 chr8 40781886 40781927 10359087 chr2 109476879 109476932 9873054 chr17 34870978 34871011 8468472 chr2 164134294 164134877 9276666 chr2 155208949 155209172 11435428 chr6 70655321 70655362 3141781 chr17 33955281 33955665 3141781 chr5 30343800 30343834 12027462 chr5 93403443 93403474 7561042 chr11 78736110 78736146 12225970 chr11 60593721 60593756 11327713 chr4 80305182 80305455 10480898 chr2 38536497 38536614 12390883 chr7 141130600 141130635 12482979 chr17 31406473 31406643 2584197 chrX 134431612 134431645 7988464 chr6 52086644 52086674 7623795 chr2 74526281 74526312 7623795 chr1 4481330 4481746 8636240 chr1 4483852 4483924 8636240 chr1 4486477 4486838 8636240 chr6 42910191 42910222 3131743 chr6 67825649 67825684 3131743 chr6 68185876 68185913 3131743 chr16 3493051 3493082 3131743 chr5 115232111 115232141 10760574 chrX 97579346 97579925 10760574 chr7 46535461 46535502 7552299 chr1 36636087 36636117 8383622 chr17 33913426 33913513 8290364 chr6 70144946 70144979 11254715 chr6 70190541 70190577 11254715 chr6 70300982 70301015 11254715 chr6 70336600 70336636 11254715 chr6 70365085 70365120 11254715 chr6 70387632 70387668 11254715 chrX 53558787 53558827 11254715 chr12 86362813 86362848 8552086 chr12 86362673 86362702 2110508 chr17 33610878 33610910 3322806 chr17 34870977 34871009 3322806 chr6 70448421 70448458 2109186 chr6 70484008 70484045 2109186 chr6 70502797 70502848 2109186 chr6 70537608 70537645 2109186 chr6 70573133 70573170 2109186 chr6 70593462 70593513 2109186 chr6 70601944 70601986 2109186 chr6 70617101 70617143 2109186 chr6 70628635 70628676 2109186 chr6 70633746 70633786 2109186 chr6 70648480 70648955 2109186 chr6 70656039 70656317 2109186 chr8 123621640 123622385 8321202 chr9 110614453 110614482 2211821 chr11 67124722 67124828 2211821 chr11 104403209 104403305 2211821 chr2 113744201 113744247 2211821 chr1 66878146 66878195 2211821 chr14 53898486 53898586 2211821 chr14 53926896 53926996 2211821 chr7 18568521 18568552 2601707 chr18 61170453 61170480 11282029 chr2 9775383 9776029 7629014 chr6 4455417 4455633 8702912 chr6 70655483 70655561 2511430 chr9 65221178 65221381 16357058 chr4 106933762 106933860 12042312 chr12 113875344 113875373 2111447 chr11 21457190 21457445 3172222 chr11 21471745 21472279 3172222 chr19 43577766 43577815 3172222 chr3 14863350 14863383 8463242 chr16 23806223 23806249 1977662 chr2 163441532 163441769 8265639 chr5 137314748 137314782 11755530 chr5 16065362 16065393 9315634 chr5 121148158 121148265 2457496 chr5 121168072 121168261 2457496 chr17 33610870 33610899 2457496 chr6 4455528 4455560 10477728 chr7 126592040 126592074 9395505 chr12 91806421 91806453 7989366 chr2 91426321 91426350 9565620 chr2 91429247 91429276 9565620 chr15 61814749 61814779 3313385 chr19 44805743 44805811 11807024 chr19 44809825 44809960 11807024 chr11 101367971 101367998 10660629 chr11 69396532 69396570 8051093 chr4 80305182 80305213 9710594 chr12 104874217 104874665 9417125 chr2 104927782 104928263 1671709 chr2 104933774 104934343 1671709 chr2 104943920 104945031 1671709 chr2 104964163 104964261 1671709 chr2 104967653 104967727 1671709 chr2 104973145 104974452 1671709 chr16 97567922 97567998 2974922 chr16 97690826 97690879 2974922 chr5 113875448 113875531 15792532 chr5 113904661 113904724 15792532 chr7 46239063 46239781 1328870 chr1 135178144 135178237 7962542 chr3 113284917 113284950 1699843 chr1 196792904 196792939 11023821 chr5 91560912 91561133 2452972 chr17 33589430 33589465 2014233 chr17 33610906 33610942 2014233 chr17 34870944 34870981 2014233 chr17 35806754 35806791 2014233 chr5 51786341 51786388 16825189 chr1 173050608 173050662 16825189 chr3 95744114 95744143 10454566 chr9 21709248 21709315 2162479 chr9 21713752 21714429 2162479 chr11 98228303 98228335 1672439 chr12 86362675 86362706 1645787 chr6 72234547 72235407 8928820 chr6 72239288 72239420 8928820 chr6 70655323 70655353 1630463 chr17 33610949 33610989 1630463 chr17 34987443 34987473 1630463 chr11 72777304 72777372 12119294 chr12 113875208 113875259 8663022 chr2 109493202 109493238 9581764 chr18 34986757 34986789 11566878 chr9 45687022 45687053 10642500 chr11 53462119 53462180 10438901 chr9 86493075 86493107 2738073 chr7 142489137 142489357 3006925 chr19 52317501 52317720 3006925 chr10 59672846 59673011 9582364 chr18 12647433 12647697 9651314 chr19 27859699 27859759 2253877 chr17 56462962 56463119 2253877 chr17 56465108 56466004 2253877 chr8 86964017 86964118 2253877 chr8 86969966 86970077 2253877 chr8 86977850 86977971 2253877 chr8 86980214 86981576 2253877 chr8 86982719 86982979 2253877 chr8 86984855 86986055 2253877 chr10 128334592 128334626 14525975 chr2 181600901 181600934 11353810 chr2 167380193 167381855 2253878 chr5 89602412 89602443 9748293 chr2 130274028 130274059 1339438 chr16 18940724 18940965 1729607 chr16 19092845 19093083 1729607 chr11 52097308 52097387 1827138 chr11 52099679 52101227 1827138 chr11 52102275 52102368 1827138 chr11 52103951 52105048 1827138 chr11 52125544 52125640 1827138 chr3 131183843 131183935 1827138 chr3 131189467 131189547 1827138 chr19 55972778 55972867 1827138 chr19 44460893 44460987 2606350 chr3 10191197 10191235 2606350 chr5 121148235 121148291 2243086 chr5 121168149 121168205 2243086 chr14 15368772 15368800 10692469 chr5 115216352 115216429 2044952 chr11 83666965 83667587 2044952 chr11 83672096 83672298 2044952 chr11 83677988 83678176 2044952 chr11 83680135 83680374 2044952 chr11 83698843 83699008 2044952 chr11 83705242 83705350 2044952 chr11 83709577 83709771 2044952 chr11 83712466 83712535 2044952 chr11 83721101 83721728 2044952 chr19 7263832 7264780 2044952 chr19 37499334 37499918 10101294 chr1 173254771 173254799 9374551 chr7 18566396 18566426 10359011 chrX 7124723 7125567 1656391 chr15 78855142 78855177 8559662 chrX 20027145 20027175 8559663 chr16 65428100 65428821 8504933 chr10 20847864 20847892 2236022 chr11 54093061 54093102 8246960 chr16 16777743 16777785 10435576 chr9 57494748 57494781 1852076 chr6 132534899 132534934 9015393 chr6 132561001 132561036 9015393 chr6 122821684 122821919 16116202 chr5 89530296 89530325 11451945 chr5 147574433 147574465 14701942 chr17 31406530 31406560 7823934 chr16 85692593 85692625 15256533 chr3 131099625 131100626 1827423 chr3 131212271 131212484 1827423 chr14 53185518 53185560 1827423 chr19 4593965 4593995 15917242 chrX 33695886 33696975 16414020 chrX 33737548 33738601 16414020 chrX 33785401 33786461 16414020 chrX 33819419 33820515 16414020 chrX 33862493 33863610 16414020 chrX 33913449 33914538 16414020 chrX 33957041 33958155 16414020 chr1 172992090 172992151 9360965 chr12 113875221 113875251 2555786 chr10 66933144 66933179 1969796 chr8 74497415 74497448 9933587 chr9 45686866 45686898 16224064 chr5 146184209 146184269 10860926 chr17 45495931 45495959 11040101 chr9 32503846 32503882 1409581 chr5 93424229 93424258 8757327 chr6 70144909 70144947 9858563 chr6 70190578 70190612 9858563 chr6 70300947 70300983 9858563 chr6 70336637 70336671 9858563 chr6 70365121 70365154 9858563 chr6 70387667 70387705 9858563 chr11 106130693 106130743 9858563 chr11 120640248 120640290 9786926 chr2 90897654 90897832 2180582 chr2 90900268 90900365 2180582 chr2 90914092 90916595 2180582 chr9 57494748 57494776 7892203 chr3 37317761 37317792 8406004 chr12 114344857 114344899 2507313 chr12 115568086 115568114 2507313 chr12 115783417 115783448 2507313 chr12 115909335 115909363 2507313 chr12 115955880 115955911 2507313 chr12 116206320 116206348 2507313 chr12 116250983 116251014 2507313 chrX 20027146 20027174 8557686 chr10 57174928 57175016 1717345 chr10 57184314 57184694 1717345 chr10 57185910 57186026 1717345 chr10 57189783 57189817 1717345 chr10 57191035 57191096 1717345 chr10 57192996 57194717 1717345 chr10 57200325 57200865 1717345 chr17 34567380 34567418 1717345 chr17 34580298 34580336 1717345 chr15 76304716 76304894 1717345 chr15 76323707 76323847 1717345 chr15 76325250 76325758 1717345 chr15 76327668 76328171 1717345 chr4 135145012 135145050 16181749 chr2 167380290 167380318 9374525 chr5 91533696 91533726 11825903 chr19 52317533 52317563 11825903 chr3 28888378 28888408 11825903 chr2 62284565 62284595 11825903 chr3 159533953 159534406 10896939 chr6 70654962 70654995 7816634 chr13 19227291 19227351 1309596 chr13 19280451 19280510 1309596 chr13 19307968 19308027 1309596 chr12 113875294 113875358 1309596 chr6 4455597 4455637 3733754 chr6 41451085 41451559 3641189 chr4 141097307 141098498 3641189 chr3 37317570 37317603 7565783 chr5 137517686 137518116 8429032 chr5 137519818 137519872 8429032 chr9 98232312 98234392 1648481 chr9 98255700 98255873 1648481 chr4 140565201 140565232 9733765 chr12 113875218 113875262 2573524 chr12 113875218 113875262 2573523 chr10 34079088 34079121 9369451 chr7 56431087 56431124 1697928 chr5 23371707 23371770 1697928 chr5 97089578 97089620 1697928 chr3 30711032 30711074 1697928 chr3 52891298 52891340 1697928 chr3 93460309 93460347 1697928 chr2 137786746 137786785 1697928 chr1 92688074 92688115 1697928 chr9 43210266 43210308 1697928 chr9 76557075 76557115 1697928 chr8 30070831 30070925 1697928 chr8 46973628 46973670 1697928 chr15 51612591 51612633 1697928 chr15 74806792 74806890 1697928 chr15 74808755 74808824 1697928 chr15 74809950 74812614 1697928 chr15 74816189 74816902 1697928 chr15 74822132 74828327 1697928 chr15 74872275 74872371 1697928 chr15 74874186 74874290 1697928 chr15 74875398 74879211 1697928 chr15 74892909 74893338 1697928 chr15 74896474 74897345 1697928 chr15 74898448 74898535 1697928 chr15 74899816 74899910 1697928 chr15 74902178 74902265 1697928 chr15 74920671 74920711 1697928 chr15 74935467 74935513 1697928 chr15 74937344 74937445 1697928 chr15 74938555 74938851 1697928 chr15 74940928 74940981 1697928 chr15 74942002 74942875 1697928 chr15 74958547 74958643 1697928 chr15 74960529 74960628 1697928 chr15 74961910 74962001 1697928 chr15 74964083 74965592 1697928 chr15 74979361 74981877 1697928 chr15 74982978 74983061 1697928 chr15 74984384 74984484 1697928 chr15 74986286 74986369 1697928 chr15 75013080 75013858 1697928 chr15 75023387 75023485 1697928 chr15 75024579 75024617 1697928 chr15 75044017 75044295 1697928 chr15 75045393 75045459 1697928 chr15 75064362 75064531 1697928 chr15 75065854 75066353 1697928 chr15 75067374 75068275 1697928 chr15 75072019 75072091 1697928 chr15 75073987 75074156 1697928 chr15 75075532 75075620 1697928 chr15 75092998 75093404 1697928 chr15 75094477 75094527 1697928 chr15 75096055 75096146 1697928 chr15 75097472 75097640 1697928 chr15 75099451 75099490 1697928 chr15 75122783 75122886 1697928 chr15 75124190 75124276 1697928 chr15 75131424 75133048 1697928 chr15 75141973 75142141 1697928 chr15 75155958 75156028 1697928 chr15 75177864 75177968 1697928 chr15 75180068 75181772 1697928 chr15 75201590 75201693 1697928 chr15 75204355 75204439 1697928 chr15 75256790 75256855 1697928 chr15 75258518 75258613 1697928 chr15 75261788 75262172 1697928 chr15 75268430 75269094 1697928 chr14 61763897 61763939 1697928 chr18 21560809 21560851 1697928 chr6 147221086 147221118 9280059 chrX 99686013 99686377 9426246 chr6 115407219 115407269 7838156 chr19 40243903 40245132 7838156 chr19 40247090 40247900 7838156 chr14 16999527 16999931 7838156 chr14 17000987 17001191 7838156 chr14 17004848 17005036 7838156 chr14 17007942 17008565 7838156 chr14 17009720 17009866 7838156 chr14 17013049 17013104 7838156 chr14 17014695 17014956 7838156 chr14 17031224 17032189 7838156 chr7 24606265 24606297 1545794 chr11 87609641 87609721 8384306 chr12 114345283 114345346 1922039 chr12 31850891 31850937 1661245 chr6 113401689 113401718 1339452 chr12 86362674 86362707 7698311 chr8 27273950 27273980 14673133 chr9 98298948 98300034 8288643 chr6 72234141 72236749 7900819 chr4 152974996 152975053 7900819 chr8 72525044 72525233 7900819 chr12 86362673 86362701 8346248 chr11 106130609 106130812 8555489 chr11 54091603 54091662 3876931 chr11 54093026 54093177 3876931 chr12 25295983 25296021 7559662 chr12 25297228 25297303 7559662 chr11 32183543 32183620 9032265 chr11 32196360 32196437 9032265 chr19 5637774 5641675 2001591 chr19 5645514 5645555 2001591 chr19 5646807 5648105 2001591 chr18 20808271 20808309 1870969 chr3 10196460 10196574 1545801 chr18 3281798 3281831 10799536 chr18 43863436 43863471 1508185 chr9 108198553 108199203 8413228 chr17 26571739 26572245 9778505 chr2 113751483 113752125 8164695 genometools-1.5.1/testdata/bed_files/gb-2008-9-2-r31-s3.gff3000066400000000000000000003654651211610345200225750ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr7 3538564 144670781 ##sequence-region chrX 3009684 164531393 ##sequence-region chr8 3622334 126779431 ##sequence-region chr9 4855449 122696623 ##sequence-region chr3 3241275 159534406 ##sequence-region chr4 3016163 152975053 ##sequence-region chr5 6489488 150790995 ##sequence-region chr6 4455158 149315651 ##sequence-region chr14 10074301 102257125 ##sequence-region chr15 4832309 102863869 ##sequence-region chr12 3954579 116457835 ##sequence-region chr13 3172351 112857798 ##sequence-region chr18 3281799 89668722 ##sequence-region chr19 3247631 55972867 ##sequence-region chr16 3493052 97690879 ##sequence-region chr17 4837106 89109235 ##sequence-region chr10 3557642 128360798 ##sequence-region chr13_random 132571 132601 ##sequence-region chr5_random 345219 2907836 ##sequence-region chr11 3852159 121112225 ##sequence-region chrY_random 10870094 13323146 ##sequence-region chr1 3166625 196792939 ##sequence-region chr2 7527753 181857052 chr13 . BED_feature 12855406 12855438 . . . Name=8065334 chr13 . BED_feature 13072136 13072165 . . . Name=8065334 chr2 . BED_feature 172240871 172240910 . . . Name=12801994 chr3 . BED_feature 88033299 88034734 . . . Name=1327537 chr3 . BED_feature 131173869 131173905 . . . Name=8892228 chr4 . BED_feature 129060998 129061031 . . . Name=11278409 chr9 . BED_feature 44737716 44737752 . . . Name=11278409 chr12 . BED_feature 113725370 113725411 . . . Name=8144891 chr18 . BED_feature 61336787 61336835 . . . Name=9325159 chr9 . BED_feature 57494752 57494779 . . . Name=1986235 chr6 . BED_feature 5447223 5447252 . . . Name=12820900 chr12 . BED_feature 86362677 86362711 . . . Name=2498646 chr11 . BED_feature 96087148 96087322 . . . Name=1360646 chr14 . BED_feature 53921089 53921125 . . . Name=8449897 chr9 . BED_feature 49551490 49551554 . . . Name=11696550 chr4 . BED_feature 134425054 134425134 . . . Name=8341710 chr4 . BED_feature 134427382 134427503 . . . Name=8341710 chr17 . BED_feature 43959178 43959286 . . . Name=8341710 chr17 . BED_feature 44070861 44071424 . . . Name=8341710 chr17 . BED_feature 44073080 44073136 . . . Name=8341710 chr17 . BED_feature 44102720 44102884 . . . Name=8341710 chr17 . BED_feature 44121574 44121747 . . . Name=8341710 chr17 . BED_feature 44180246 44180353 . . . Name=8341710 chr17 . BED_feature 44187799 44187958 . . . Name=8341710 chr17 . BED_feature 44198286 44198718 . . . Name=8341710 chr16 . BED_feature 92584341 92584421 . . . Name=8341710 chr7 . BED_feature 46713823 46713869 . . . Name=2708350 chr14 . BED_feature 15368766 15368800 . . . Name=2164682 chr5 . BED_feature 137356957 137356986 . . . Name=9427542 chr7 . BED_feature 28088022 28088093 . . . Name=7559666 chr18 . BED_feature 82688826 82688871 . . . Name=1690988 chr6 . BED_feature 70655273 70655306 . . . Name=10623825 chr16 . BED_feature 29985000 29985028 . . . Name=10623825 chr17 . BED_feature 33644478 33644637 . . . Name=1652422 chr17 . BED_feature 33646782 33647960 . . . Name=1652422 chr2 . BED_feature 27563778 27563952 . . . Name=1652422 chr2 . BED_feature 27570623 27570757 . . . Name=1652422 chr2 . BED_feature 27574324 27574451 . . . Name=1652422 chr2 . BED_feature 27576229 27576364 . . . Name=1652422 chr2 . BED_feature 27578215 27578297 . . . Name=1652422 chr2 . BED_feature 27581549 27581681 . . . Name=1652422 chr1 . BED_feature 169461606 169461748 . . . Name=1652422 chr1 . BED_feature 169463964 169464146 . . . Name=1652422 chr1 . BED_feature 169467908 169468035 . . . Name=1652422 chr1 . BED_feature 169469186 169469322 . . . Name=1652422 chr1 . BED_feature 169471117 169471201 . . . Name=1652422 chr1 . BED_feature 169475800 169475944 . . . Name=1652422 chr3 . BED_feature 88464666 88464699 . . . Name=10514508 chr3 . BED_feature 88470431 88470464 . . . Name=10514508 chr19 . BED_feature 54097641 54099571 . . . Name=7487893 chr6 . BED_feature 41474207 41474734 . . . Name=2349098 chr6 . BED_feature 29009781 29010375 . . . Name=8633022 chr6 . BED_feature 29018961 29018996 . . . Name=8633022 chr6 . BED_feature 29021165 29021200 . . . Name=8633022 chr10 . BED_feature 80208263 80208306 . . . Name=10446911 chr16 . BED_feature 23806222 23806263 . . . Name=1834659 chr3 . BED_feature 37317759 37317792 . . . Name=8417328 chr12 . BED_feature 77084392 77084433 . . . Name=9058381 chr12 . BED_feature 77086130 77086167 . . . Name=9058381 chr5 . BED_feature 91525244 91525437 . . . Name=1990282 chr12 . BED_feature 113875336 113875479 . . . Name=3125419 chr6 . BED_feature 145348609 145348648 . . . Name=2365680 chr5 . BED_feature 21110587 21110672 . . . Name=2365680 chr5 . BED_feature 41630395 41630480 . . . Name=2365680 chr5 . BED_feature 83411421 83411506 . . . Name=2365680 chr1 . BED_feature 16088803 16088888 . . . Name=2365680 chr9 . BED_feature 31532482 31532530 . . . Name=2365680 chr9 . BED_feature 109815633 109815704 . . . Name=2365680 chrX . BED_feature 33099690 33099764 . . . Name=2365680 chrX . BED_feature 148997347 148997395 . . . Name=2365680 chr11 . BED_feature 29452950 29452989 . . . Name=2365680 chr11 . BED_feature 46571265 46571350 . . . Name=2365680 chr17 . BED_feature 32591325 32591409 . . . Name=2365680 chr15 . BED_feature 59040613 59040698 . . . Name=2365680 chr13 . BED_feature 12855408 12855435 . . . Name=2744462 chr13 . BED_feature 13072136 13072165 . . . Name=2744462 chr11 . BED_feature 76965963 76966562 . . . Name=1986236 chr1 . BED_feature 173252807 173252912 . . . Name=1986236 chr1 . BED_feature 173254315 173254471 . . . Name=1986236 chr12 . BED_feature 113680203 113680232 . . . Name=9755173 chr12 . BED_feature 113701767 113701797 . . . Name=9755173 chr12 . BED_feature 57453028 57453073 . . . Name=9211870 chr4 . BED_feature 94544521 94544623 . . . Name=1851295 chr15 . BED_feature 82280026 82280079 . . . Name=2387871 chr8 . BED_feature 75247915 75247946 . . . Name=10433980 chr15 . BED_feature 98883163 98883205 . . . Name=1639068 chr15 . BED_feature 9476872 9477448 . . . Name=2038316 chr7 . BED_feature 99225295 99226309 . . . Name=12235161 chr5 . BED_feature 104676200 104676297 . . . Name=9649510 chr12 . BED_feature 86362632 86362992 . . . Name=9584171 chr1 . BED_feature 163623784 163623811 . . . Name=10684974 chr1 . BED_feature 163625033 163625063 . . . Name=10684974 chr14 . BED_feature 67037129 67037160 . . . Name=11733514 chr8 . BED_feature 109492104 109492670 . . . Name=1763063 chr6 . BED_feature 52096110 52096149 . . . Name=10068641 chr5 . BED_feature 89609350 89609379 . . . Name=9529146 chr8 . BED_feature 42873634 42873667 . . . Name=16500425 chr9 . BED_feature 43794366 43794438 . . . Name=1672442 chr17 . BED_feature 33610896 33610924 . . . Name=1727488 chr17 . BED_feature 34870964 34870992 . . . Name=1727488 chr12 . BED_feature 104139375 104139403 . . . Name=1701020 chr12 . BED_feature 104174807 104174835 . . . Name=1701020 chr12 . BED_feature 104358133 104358161 . . . Name=1701020 chr5 . BED_feature 91535987 91536016 . . . Name=1701020 chr4 . BED_feature 62830793 62830821 . . . Name=1701020 chr4 . BED_feature 62848683 62848711 . . . Name=1701020 chr2 . BED_feature 167381277 167381623 . . . Name=1701020 chr9 . BED_feature 78015523 78015661 . . . Name=2166952 chr9 . BED_feature 78041999 78042137 . . . Name=2166952 chr9 . BED_feature 78068396 78068448 . . . Name=2166952 chr9 . BED_feature 78074868 78074935 . . . Name=2166952 chr9 . BED_feature 78133949 78134089 . . . Name=2166952 chr2 . BED_feature 167380097 167380135 . . . Name=15299028 chr11 . BED_feature 44243409 44243440 . . . Name=12876285 chr11 . BED_feature 78736087 78736120 . . . Name=12876285 chr9 . BED_feature 50306077 50306110 . . . Name=12876285 chr6 . BED_feature 91649567 91649596 . . . Name=15142033 chr8 . BED_feature 71809516 71809738 . . . Name=11796707 chr5 . BED_feature 16065430 16065458 . . . Name=12163028 chr12 . BED_feature 113875355 113875416 . . . Name=1899229 chr7 . BED_feature 31525874 31525902 . . . Name=12520165 chr7 . BED_feature 32254523 32254551 . . . Name=12520165 chr4 . BED_feature 84395388 84395416 . . . Name=12520165 chr1 . BED_feature 146946113 146946144 . . . Name=12520165 chr8 . BED_feature 43108456 43108485 . . . Name=12520165 chr12 . BED_feature 5616600 5616628 . . . Name=12520165 chr11 . BED_feature 33176705 33176733 . . . Name=12520165 chr17 . BED_feature 61467015 61467046 . . . Name=12520165 chr12 . BED_feature 116052276 116052307 . . . Name=1970570 chr11 . BED_feature 70478628 70478705 . . . Name=2734297 chr2 . BED_feature 62284558 62284607 . . . Name=10938089 chr1 . BED_feature 64467141 64467218 . . . Name=7628390 chr1 . BED_feature 75242513 75243687 . . . Name=8382796 chrX . BED_feature 20027121 20027366 . . . Name=1849903 chr17 . BED_feature 89109206 89109235 . . . Name=11145741 chr2 . BED_feature 147728350 147728401 . . . Name=9118802 chr6 . BED_feature 34342453 34342485 . . . Name=11145742 chr13 . BED_feature 52980565 52982323 . . . Name=12023274 chr3 . BED_feature 88458960 88459035 . . . Name=7891679 chr3 . BED_feature 88464663 88464736 . . . Name=7891679 chr3 . BED_feature 88470429 88470501 . . . Name=7891679 chr7 . BED_feature 79608339 79608384 . . . Name=14726448 chr3 . BED_feature 89465236 89467184 . . . Name=7937772 chr8 . BED_feature 78299166 78299266 . . . Name=7937772 chr13 . BED_feature 13756612 13757727 . . . Name=7937772 chr10 . BED_feature 26982958 26983076 . . . Name=7937772 chrX . BED_feature 8811752 8812446 . . . Name=7937772 chr18 . BED_feature 76271050 76271168 . . . Name=7937772 chr6 . BED_feature 42910197 42910222 . . . Name=3119226 chr6 . BED_feature 68185882 68185907 . . . Name=3119226 chr16 . BED_feature 3493057 3493082 . . . Name=3119226 chr6 . BED_feature 70655344 70655376 . . . Name=3145404 chr12 . BED_feature 113875436 113875464 . . . Name=3145404 chr12 . BED_feature 114508181 114508208 . . . Name=3145404 chr3 . BED_feature 113284902 113284941 . . . Name=8874496 chr5 . BED_feature 115209362 115211104 . . . Name=2263635 chr5 . BED_feature 115221022 115221214 . . . Name=2263635 chr5 . BED_feature 115231517 115231801 . . . Name=2263635 chr11 . BED_feature 83672140 83672273 . . . Name=2263635 chr12 . BED_feature 86362646 86362702 . . . Name=2928331 chr5 . BED_feature 146313739 146313765 . . . Name=7651384 chr5 . BED_feature 146383578 146383604 . . . Name=7651384 chr11 . BED_feature 95403797 95403832 . . . Name=7565756 chr15 . BED_feature 78753914 78753944 . . . Name=9931450 chr11 . BED_feature 53564137 53564178 . . . Name=9498775 chr11 . BED_feature 94767985 94768013 . . . Name=2779548 chr10 . BED_feature 66907644 66907888 . . . Name=12538520 chr15 . BED_feature 76304477 76304854 . . . Name=9829985 chrX . BED_feature 79208618 79208790 . . . Name=11259421 chr7 . BED_feature 45334857 45334916 . . . Name=15466854 chr7 . BED_feature 120806482 120806510 . . . Name=15466854 chr6 . BED_feature 71571315 71571343 . . . Name=15466854 chr6 . BED_feature 78426651 78426679 . . . Name=15466854 chr6 . BED_feature 123184770 123184798 . . . Name=15466854 chr4 . BED_feature 105292421 105292449 . . . Name=15466854 chr3 . BED_feature 39409201 39409229 . . . Name=15466854 chr3 . BED_feature 41582549 41582577 . . . Name=15466854 chr3 . BED_feature 122249022 122249050 . . . Name=15466854 chr3 . BED_feature 122624994 122625022 . . . Name=15466854 chr3 . BED_feature 138542154 138542182 . . . Name=15466854 chr2 . BED_feature 51693327 51693355 . . . Name=15466854 chr2 . BED_feature 83191234 83191262 . . . Name=15466854 chr2 . BED_feature 129441626 129441654 . . . Name=15466854 chr2 . BED_feature 166191672 166191700 . . . Name=15466854 chr9 . BED_feature 96705282 96705310 . . . Name=15466854 chr8 . BED_feature 4465786 4465814 . . . Name=15466854 chr13 . BED_feature 64639251 64639279 . . . Name=15466854 chr11 . BED_feature 6319199 6319227 . . . Name=15466854 chr10 . BED_feature 57470993 57471021 . . . Name=15466854 chr17 . BED_feature 37555517 37555545 . . . Name=15466854 chr15 . BED_feature 25785032 25785060 . . . Name=15466854 chr14 . BED_feature 28044922 28044950 . . . Name=15466854 chr19 . BED_feature 28099720 28099748 . . . Name=15466854 chr18 . BED_feature 34171913 34171941 . . . Name=15466854 chr6 . BED_feature 115407118 115407162 . . . Name=9099735 chr1 . BED_feature 135178147 135178175 . . . Name=9201991 chr6 . BED_feature 70655243 70655313 . . . Name=2501761 chr15 . BED_feature 74816722 74816777 . . . Name=9746780 chr15 . BED_feature 74827422 74827479 . . . Name=9746780 chr15 . BED_feature 74878325 74878382 . . . Name=9746780 chr15 . BED_feature 74893030 74893087 . . . Name=9746780 chr15 . BED_feature 74942700 74942755 . . . Name=9746780 chr15 . BED_feature 74965415 74965466 . . . Name=9746780 chr15 . BED_feature 74980245 74980287 . . . Name=9746780 chr15 . BED_feature 75013881 75013926 . . . Name=9746780 chr15 . BED_feature 75093112 75093165 . . . Name=9746780 chr1 . BED_feature 136106234 136106418 . . . Name=1324403 chr6 . BED_feature 142920946 142921305 . . . Name=11098147 chr9 . BED_feature 57494749 57494782 . . . Name=3413062 chr19 . BED_feature 37762874 37762946 . . . Name=10976925 chr8 . BED_feature 97068194 97068366 . . . Name=2993866 chr12 . BED_feature 114344858 114344899 . . . Name=2710122 chr12 . BED_feature 116052275 116052307 . . . Name=2710122 chr3 . BED_feature 37317568 37317596 . . . Name=1620122 chr6 . BED_feature 40976306 40976479 . . . Name=3259318 chr6 . BED_feature 40977841 40977872 . . . Name=3259318 chr6 . BED_feature 40988923 40989030 . . . Name=3259318 chr6 . BED_feature 40991877 40991970 . . . Name=3259318 chr6 . BED_feature 41043029 41043170 . . . Name=3259318 chr6 . BED_feature 41045569 41045620 . . . Name=3259318 chr6 . BED_feature 41048330 41048467 . . . Name=3259318 chr6 . BED_feature 41059624 41059730 . . . Name=3259318 chr6 . BED_feature 41081351 41081400 . . . Name=3259318 chr6 . BED_feature 41092532 41092629 . . . Name=3259318 chr6 . BED_feature 41107826 41107980 . . . Name=3259318 chr5 . BED_feature 143168936 143169346 . . . Name=12855690 chr8 . BED_feature 126778097 126778129 . . . Name=12855690 chr16 . BED_feature 37802844 37802876 . . . Name=12855690 chr1 . BED_feature 163625141 163625648 . . . Name=12855690 chrX . BED_feature 147774589 147774621 . . . Name=12855690 chrX . BED_feature 147831148 147831180 . . . Name=12855690 chr13_random . BED_feature 132571 132601 . . . Name=1527023 chr12 . BED_feature 77628973 77629001 . . . Name=10037687 chr10 . BED_feature 79980250 79980309 . . . Name=11390978 chr12 . BED_feature 86362673 86362727 . . . Name=10462507 chr15 . BED_feature 78753914 78753944 . . . Name=10760565 chr7 . BED_feature 46729237 46729273 . . . Name=11673270 chr5 . BED_feature 104675338 104675366 . . . Name=7799957 chr7 . BED_feature 70234442 70234497 . . . Name=15541767 chr12 . BED_feature 86362676 86362704 . . . Name=9032301 chr11 . BED_feature 98775790 98776740 . . . Name=1658797 chr2 . BED_feature 38536506 38536605 . . . Name=9013759 chr4 . BED_feature 28981911 28981959 . . . Name=16314414 chr11 . BED_feature 53462147 53462176 . . . Name=9233810 chr19 . BED_feature 6989380 6989414 . . . Name=12960079 chr5 . BED_feature 91565805 91565841 . . . Name=2601711 chr9 . BED_feature 71648332 71648487 . . . Name=1321336 chr9 . BED_feature 71654865 71655099 . . . Name=1321336 chr9 . BED_feature 71657044 71657515 . . . Name=1321336 chr9 . BED_feature 71666630 71666826 . . . Name=1321336 chr9 . BED_feature 71668637 71668711 . . . Name=1321336 chr9 . BED_feature 71674547 71674627 . . . Name=1321336 chr9 . BED_feature 71681666 71682326 . . . Name=1321336 chr9 . BED_feature 71683754 71683834 . . . Name=1321336 chr9 . BED_feature 71721212 71721347 . . . Name=1321336 chr9 . BED_feature 71742550 71742582 . . . Name=1321336 chr9 . BED_feature 71798975 71799076 . . . Name=1321336 chr9 . BED_feature 71814200 71814273 . . . Name=1321336 chr9 . BED_feature 71908241 71910179 . . . Name=1321336 chr13 . BED_feature 30756012 30756039 . . . Name=10770796 chr5 . BED_feature 28489138 28489196 . . . Name=8625814 chr7 . BED_feature 4732188 4732219 . . . Name=15117948 chr6 . BED_feature 133727977 133728008 . . . Name=15117948 chr5 . BED_feature 143170456 143170487 . . . Name=15117948 chr4 . BED_feature 103061586 103061617 . . . Name=15117948 chr9 . BED_feature 38824925 38824956 . . . Name=15117948 chr8 . BED_feature 47728062 47728093 . . . Name=15117948 chr8 . BED_feature 126779400 126779431 . . . Name=15117948 chr13 . BED_feature 81528372 81528403 . . . Name=15117948 chr11 . BED_feature 120163805 120163836 . . . Name=15117948 chr17 . BED_feature 63032642 63032673 . . . Name=15117948 chr16 . BED_feature 64861025 64861056 . . . Name=15117948 chrX . BED_feature 47464340 47464368 . . . Name=15117948 chr6 . BED_feature 70068752 70068784 . . . Name=2120037 chr6 . BED_feature 70144886 70144924 . . . Name=2120037 chr6 . BED_feature 70190600 70190638 . . . Name=2120037 chr6 . BED_feature 70300922 70300960 . . . Name=2120037 chr6 . BED_feature 70336659 70336697 . . . Name=2120037 chr6 . BED_feature 70365143 70365181 . . . Name=2120037 chr6 . BED_feature 70387691 70387729 . . . Name=2120037 chr10 . BED_feature 20847654 20847700 . . . Name=2678098 chr1 . BED_feature 151861905 151862280 . . . Name=11668179 chr12 . BED_feature 86362674 86362701 . . . Name=8230424 chr9 . BED_feature 21881080 21881113 . . . Name=11481336 chr17 . BED_feature 34810553 34810729 . . . Name=2181276 chr14 . BED_feature 30037251 30037316 . . . Name=1569934 chr12 . BED_feature 115568098 115568139 . . . Name=3099286 chr12 . BED_feature 115606694 115606794 . . . Name=3099286 chr12 . BED_feature 115656386 115656486 . . . Name=3099286 chr12 . BED_feature 115807431 115807483 . . . Name=3099286 chr12 . BED_feature 115820292 115820392 . . . Name=3099286 chr12 . BED_feature 115909279 115909389 . . . Name=3099286 chr12 . BED_feature 116071454 116071506 . . . Name=3099286 chr12 . BED_feature 116206264 116206374 . . . Name=3099286 chrX . BED_feature 164531362 164531393 . . . Name=10859305 chr19 . BED_feature 44346956 44346991 . . . Name=10580438 chrX . BED_feature 20027146 20027210 . . . Name=1420363 chr7 . BED_feature 18568361 18568556 . . . Name=3336366 chr14 . BED_feature 15368772 15368799 . . . Name=8900181 chr5 . BED_feature 113309937 113310329 . . . Name=8543177 chr4 . BED_feature 94543040 94543091 . . . Name=2504580 chr2 . BED_feature 16328370 16328636 . . . Name=2504580 chr8 . BED_feature 73628070 73629605 . . . Name=2504580 chr8 . BED_feature 87867633 87867742 . . . Name=2504580 chr10 . BED_feature 85729845 85730358 . . . Name=9182717 chr1 . BED_feature 169461714 169461741 . . . Name=9006910 chr13 . BED_feature 93455925 93455965 . . . Name=1545788 chr2 . BED_feature 31581776 31581805 . . . Name=1349742 chr14 . BED_feature 53185318 53185689 . . . Name=10790370 chr11 . BED_feature 44461602 44461636 . . . Name=10942392 chr7 . BED_feature 120806754 120806784 . . . Name=10766845 chr4 . BED_feature 105292149 105292179 . . . Name=10766845 chr3 . BED_feature 122248748 122248778 . . . Name=10766845 chr9 . BED_feature 96705008 96705038 . . . Name=10766845 chr11 . BED_feature 6315912 6315942 . . . Name=10766845 chr11 . BED_feature 101183575 101183977 . . . Name=10766845 chr17 . BED_feature 4837106 4837136 . . . Name=10766845 chr19 . BED_feature 16231796 16231826 . . . Name=10766845 chr18 . BED_feature 87608842 87608872 . . . Name=10766845 chr6 . BED_feature 70655321 70655353 . . . Name=2556265 chr7 . BED_feature 87369183 87369215 . . . Name=9819381 chr4 . BED_feature 80305382 80305413 . . . Name=9819381 chr17 . BED_feature 33610877 33610910 . . . Name=2457903 chr17 . BED_feature 34870978 34871011 . . . Name=2457903 chr7 . BED_feature 87369277 87369308 . . . Name=9700169 chr16 . BED_feature 32350557 32350657 . . . Name=10216289 chr2 . BED_feature 131944656 131944684 . . . Name=7910946 chr16 . BED_feature 23805151 23805182 . . . Name=9731698 chr2 . BED_feature 133245497 133245525 . . . Name=15342482 chr2 . BED_feature 172586093 172586121 . . . Name=15342482 chr6 . BED_feature 69157052 69157078 . . . Name=2481271 chr6 . BED_feature 69213988 69214014 . . . Name=2481271 chr6 . BED_feature 69347094 69347120 . . . Name=2481271 chr6 . BED_feature 70655323 70655357 . . . Name=2481271 chr11 . BED_feature 120639880 120639912 . . . Name=7772036 chr10 . BED_feature 128336544 128336903 . . . Name=16129691 chr9 . BED_feature 44093333 44093532 . . . Name=2037597 chr9 . BED_feature 44095106 44095166 . . . Name=2037597 chr5 . BED_feature 121148230 121148258 . . . Name=2026593 chr5 . BED_feature 121168144 121168172 . . . Name=2026593 chr4 . BED_feature 87994131 87994169 . . . Name=2026593 chr8 . BED_feature 71809239 71809268 . . . Name=11562371 chr10 . BED_feature 128343725 128345927 . . . Name=8253814 chr7 . BED_feature 30299252 30299279 . . . Name=15632058 chr3 . BED_feature 37317762 37317795 . . . Name=15632058 chr9 . BED_feature 110863710 110864259 . . . Name=1480183 chr9 . BED_feature 44732404 44732438 . . . Name=3142692 chrX . BED_feature 49232095 49232130 . . . Name=1551910 chr13 . BED_feature 30758120 30758261 . . . Name=2111015 chr8 . BED_feature 123625796 123625969 . . . Name=2111015 chr8 . BED_feature 123629681 123629867 . . . Name=2111015 chr8 . BED_feature 123631597 123631685 . . . Name=2111015 chr8 . BED_feature 123633180 123633258 . . . Name=2111015 chr8 . BED_feature 123634273 123634323 . . . Name=2111015 chr8 . BED_feature 123639327 123642395 . . . Name=2111015 chr8 . BED_feature 97068208 97068290 . . . Name=8824273 chr13 . BED_feature 93455257 93455303 . . . Name=1569952 chr8 . BED_feature 87791999 87792041 . . . Name=8195185 chr16 . BED_feature 32350642 32350671 . . . Name=12642588 chr6 . BED_feature 115387057 115387717 . . . Name=9367890 chr5 . BED_feature 147578458 147578510 . . . Name=9315659 chr8 . BED_feature 27273951 27273980 . . . Name=11773448 chr5 . BED_feature 51844144 51844171 . . . Name=16513826 chr3 . BED_feature 37317758 37317793 . . . Name=9310836 chr2 . BED_feature 180429411 180429448 . . . Name=10514493 chr2 . BED_feature 163238506 163238534 . . . Name=7523862 chr2 . BED_feature 91037774 91037825 . . . Name=11971958 chr8 . BED_feature 107512202 107512230 . . . Name=10516284 chr8 . BED_feature 107513470 107513532 . . . Name=10516284 chr11 . BED_feature 81849317 81849357 . . . Name=10542218 chr11 . BED_feature 81851709 81851742 . . . Name=10542218 chr2 . BED_feature 124845236 124845263 . . . Name=8621642 chr2 . BED_feature 152426554 152426611 . . . Name=9368060 chr18 . BED_feature 82688765 82688795 . . . Name=9671582 chr10 . BED_feature 57472916 57473069 . . . Name=9671582 chr3 . BED_feature 88060266 88060484 . . . Name=9671582 chr11 . BED_feature 53462157 53462186 . . . Name=9889198 chr13 . BED_feature 75555771 75555825 . . . Name=8999965 chr5 . BED_feature 30404335 30404547 . . . Name=3782103 chr10 . BED_feature 87396564 87396641 . . . Name=3782103 chr11 . BED_feature 105791183 105791252 . . . Name=8901568 chr7 . BED_feature 15939804 15939845 . . . Name=10777687 chr7 . BED_feature 44396074 44396199 . . . Name=8474451 chr2 . BED_feature 90897751 90897786 . . . Name=8474451 chr2 . BED_feature 90915910 90916194 . . . Name=8474451 chr15 . BED_feature 93508177 93508213 . . . Name=8474450 chr8 . BED_feature 44805769 44806075 . . . Name=8474450 chr11 . BED_feature 76966328 76966386 . . . Name=2249772 chrX . BED_feature 105323847 105323903 . . . Name=2249772 chr2 . BED_feature 157839524 157839561 . . . Name=8832580 chr5 . BED_feature 101905550 101905590 . . . Name=15056733 chr7 . BED_feature 15939816 15939845 . . . Name=10777688 chr11 . BED_feature 53478194 53478236 . . . Name=11893731 chr1 . BED_feature 137071499 137071528 . . . Name=11893733 chr9 . BED_feature 116023945 116024038 . . . Name=11893733 chr1 . BED_feature 182533618 182533667 . . . Name=12095687 chr18 . BED_feature 20808309 20808340 . . . Name=8325367 chr12 . BED_feature 31850935 31851552 . . . Name=1339296 chr1 . BED_feature 151861395 151862302 . . . Name=15213229 chr2 . BED_feature 14147043 14147079 . . . Name=10085160 chr12 . BED_feature 31850892 31850937 . . . Name=2171781 chr3 . BED_feature 83928642 83928671 . . . Name=11254708 chr11 . BED_feature 81997261 81997507 . . . Name=9163346 chr8 . BED_feature 97068203 97068251 . . . Name=3103216 chr11 . BED_feature 94209037 94209066 . . . Name=15824121 chr13 . BED_feature 31633526 31633555 . . . Name=9676429 chr1 . BED_feature 136106797 136106834 . . . Name=2068103 chr19 . BED_feature 34317827 34317856 . . . Name=9334258 chr14 . BED_feature 15368773 15368799 . . . Name=9685410 chr6 . BED_feature 17413782 17413845 . . . Name=9920903 chr2 . BED_feature 148099617 148099652 . . . Name=8284209 chr9 . BED_feature 74676019 74676052 . . . Name=11279202 chr7 . BED_feature 103701811 103701840 . . . Name=3476205 chr11 . BED_feature 53563732 53564142 . . . Name=9694515 chr12 . BED_feature 105964109 105964139 . . . Name=12791684 chr11 . BED_feature 98840320 98840351 . . . Name=10567217 chr13 . BED_feature 93455892 93455921 . . . Name=8063775 chr6 . BED_feature 147221063 147221104 . . . Name=8063775 chr11 . BED_feature 69611843 69612488 . . . Name=1317551 chr7 . BED_feature 18568522 18568554 . . . Name=1532229 chr5 . BED_feature 122361521 122361550 . . . Name=1532229 chr5 . BED_feature 137711874 137711904 . . . Name=11050012 chrX . BED_feature 97579920 97579953 . . . Name=7862137 chr5 . BED_feature 93422256 93422964 . . . Name=8454640 chr11 . BED_feature 78736933 78736978 . . . Name=9169456 chr12 . BED_feature 102955871 102955959 . . . Name=7615829 chr10 . BED_feature 56065273 56065311 . . . Name=15354864 chr10 . BED_feature 79067594 79067637 . . . Name=7724598 chr15 . BED_feature 7757334 7757977 . . . Name=11146111 chr11 . BED_feature 78736090 78736126 . . . Name=10356322 chr10 . BED_feature 3557642 3557685 . . . Name=15322094 chr8 . BED_feature 95715470 95715515 . . . Name=9830047 chr10 . BED_feature 79818298 79818338 . . . Name=2181401 chr1 . BED_feature 132851833 132851861 . . . Name=10861063 chr11 . BED_feature 100755892 100755921 . . . Name=9497331 chr7 . BED_feature 46729298 46729336 . . . Name=9153323 chr12 . BED_feature 86362671 86362706 . . . Name=7623850 chr7 . BED_feature 34827849 34827882 . . . Name=8346250 chr2 . BED_feature 127027475 127027553 . . . Name=8649402 chr10 . BED_feature 20848228 20848287 . . . Name=2403925 chr1 . BED_feature 64985458 64985502 . . . Name=1996107 chr1 . BED_feature 64997747 64997791 . . . Name=1996107 chr1 . BED_feature 65860721 65860763 . . . Name=1996107 chr5 . BED_feature 112496065 112496118 . . . Name=1996106 chr1 . BED_feature 196639494 196639543 . . . Name=10989198 chr14 . BED_feature 15368771 15368799 . . . Name=7969156 chr3 . BED_feature 37317665 37317719 . . . Name=10586058 chr10 . BED_feature 106898875 106898903 . . . Name=7739551 chr12 . BED_feature 113875399 113875444 . . . Name=2196446 chr17 . BED_feature 33589424 33589453 . . . Name=2196446 chr17 . BED_feature 33610900 33610932 . . . Name=2196446 chr17 . BED_feature 34870956 34870988 . . . Name=2196446 chr17 . BED_feature 35001957 35001991 . . . Name=2196446 chr17 . BED_feature 35032708 35032742 . . . Name=2196446 chr17 . BED_feature 35806748 35806780 . . . Name=2196446 chr2 . BED_feature 106860547 106860855 . . . Name=12730328 chr17 . BED_feature 31406532 31406617 . . . Name=2247086 chr10 . BED_feature 20847864 20847892 . . . Name=1727489 chr2 . BED_feature 131642319 131642346 . . . Name=15358521 chr6 . BED_feature 4455268 4455308 . . . Name=8348960 chr5 . BED_feature 75433217 75433314 . . . Name=8552100 chr3 . BED_feature 10196489 10196521 . . . Name=8552100 chr7 . BED_feature 24606072 24606102 . . . Name=1915300 chr3 . BED_feature 104943575 104943618 . . . Name=8065313 chr16 . BED_feature 16777811 16777861 . . . Name=10779354 chr11 . BED_feature 32183601 32183643 . . . Name=3464831 chr11 . BED_feature 32196418 32196460 . . . Name=3464831 chr11 . BED_feature 40592293 40595782 . . . Name=7957050 chr11 . BED_feature 40597228 40598909 . . . Name=7957050 chr10 . BED_feature 50327589 50328153 . . . Name=7957050 chr16 . BED_feature 89519565 89519651 . . . Name=7957050 chr16 . BED_feature 89521162 89521226 . . . Name=7957050 chr16 . BED_feature 89522759 89522823 . . . Name=7957050 chr15 . BED_feature 64004944 64005302 . . . Name=7957050 chr7 . BED_feature 46729276 46729306 . . . Name=11447215 chr8 . BED_feature 86177922 86178017 . . . Name=8264627 chr15 . BED_feature 91019738 91019768 . . . Name=16249184 chr6 . BED_feature 38306348 38306384 . . . Name=1946404 chrX . BED_feature 11614220 11614256 . . . Name=1946404 chrX . BED_feature 68056341 68056377 . . . Name=1946404 chrX . BED_feature 101481734 101481770 . . . Name=1946404 chrX . BED_feature 111098292 111098328 . . . Name=1946404 chr13 . BED_feature 94549174 94549210 . . . Name=1946404 chr12 . BED_feature 99448213 99448249 . . . Name=1946404 chr12 . BED_feature 109263471 109263980 . . . Name=1946404 chr11 . BED_feature 49522511 49522547 . . . Name=1946404 chr10 . BED_feature 68720567 68720603 . . . Name=1946404 chr17 . BED_feature 27257589 27257625 . . . Name=1946404 chr15 . BED_feature 34387771 34387808 . . . Name=1946404 chr15 . BED_feature 46499812 46499872 . . . Name=1946404 chr5 . BED_feature 91535961 91535995 . . . Name=7911235 chr3 . BED_feature 52357151 52357179 . . . Name=11919188 chr3 . BED_feature 52433184 52433215 . . . Name=11919188 chr5 . BED_feature 137346134 137349588 . . . Name=2406566 chr5 . BED_feature 137351452 137352549 . . . Name=2406566 chr5 . BED_feature 137353937 137354174 . . . Name=2406566 chr5 . BED_feature 137355660 137357672 . . . Name=2406566 chr17 . BED_feature 34808215 34808473 . . . Name=11856733 chr17 . BED_feature 34809795 34809832 . . . Name=11856733 chrX . BED_feature 7128197 7128619 . . . Name=10331989 chr15 . BED_feature 6333856 6334153 . . . Name=10944463 chr16 . BED_feature 23806222 23806263 . . . Name=2137455 chr16 . BED_feature 23806227 23806257 . . . Name=2850259 chr9 . BED_feature 110863759 110863786 . . . Name=7623814 chr9 . BED_feature 78015621 78015661 . . . Name=8849333 chr9 . BED_feature 78042097 78042137 . . . Name=8849333 chr9 . BED_feature 78074895 78074935 . . . Name=8849333 chr9 . BED_feature 78133951 78133992 . . . Name=8849333 chr15 . BED_feature 97736654 97736790 . . . Name=11432806 chr11 . BED_feature 69482257 69482478 . . . Name=9479000 chr10 . BED_feature 34079089 34079121 . . . Name=10965899 chr3 . BED_feature 135522464 135522506 . . . Name=2203532 chr3 . BED_feature 135526730 135529046 . . . Name=2203532 chr3 . BED_feature 135531228 135532450 . . . Name=2203532 chr3 . BED_feature 135538893 135538930 . . . Name=2203532 chr3 . BED_feature 135541108 135541219 . . . Name=2203532 chr3 . BED_feature 135542512 135542546 . . . Name=2203532 chr3 . BED_feature 135545563 135545639 . . . Name=2203532 chr3 . BED_feature 135551038 135551076 . . . Name=2203532 chr3 . BED_feature 135552717 135552747 . . . Name=2203532 chr3 . BED_feature 135556264 135556337 . . . Name=2203532 chr3 . BED_feature 135564042 135564076 . . . Name=2203532 chr3 . BED_feature 135592917 135592988 . . . Name=2203532 chr2 . BED_feature 154261298 154261340 . . . Name=14576826 chr6 . BED_feature 70655294 70655351 . . . Name=3200827 chr14 . BED_feature 19622833 19622901 . . . Name=1762914 chr2 . BED_feature 163447472 163447505 . . . Name=9765260 chr2 . BED_feature 101425359 101425386 . . . Name=10082526 chr11 . BED_feature 69396270 69396375 . . . Name=7899088 chr10 . BED_feature 128360718 128360798 . . . Name=8360188 chr16 . BED_feature 29985936 29987443 . . . Name=7906273 chrY_random . BED_feature 10870094 10870143 . . . Name=1722214 chrY_random . BED_feature 13323097 13323146 . . . Name=1722214 chrX . BED_feature 3009684 3009733 . . . Name=1722214 chrX . BED_feature 3017961 3018010 . . . Name=1722214 chrX . BED_feature 3115123 3115172 . . . Name=1722214 chrX . BED_feature 4465684 4465733 . . . Name=1722214 chrX . BED_feature 22744974 22745023 . . . Name=1722214 chrX . BED_feature 22753221 22753270 . . . Name=1722214 chrX . BED_feature 26169220 26169269 . . . Name=1722214 chrX . BED_feature 26574926 26574975 . . . Name=1722214 chrX . BED_feature 26583122 26583171 . . . Name=1722214 chrX . BED_feature 26931226 26931275 . . . Name=1722214 chrX . BED_feature 26939418 26939467 . . . Name=1722214 chrX . BED_feature 27409099 27409148 . . . Name=1722214 chrX . BED_feature 27732893 27732942 . . . Name=1722214 chrX . BED_feature 27741088 27741137 . . . Name=1722214 chrX . BED_feature 28081473 28081522 . . . Name=1722214 chrX . BED_feature 28089665 28089714 . . . Name=1722214 chrX . BED_feature 28668796 28668845 . . . Name=1722214 chrX . BED_feature 28676987 28677036 . . . Name=1722214 chrX . BED_feature 29009587 29009636 . . . Name=1722214 chrX . BED_feature 29485224 29485273 . . . Name=1722214 chrX . BED_feature 29493414 29493463 . . . Name=1722214 chrX . BED_feature 31327236 31327285 . . . Name=1722214 chrX . BED_feature 31335426 31335475 . . . Name=1722214 chrX . BED_feature 31661400 31661449 . . . Name=1722214 chrX . BED_feature 34425139 34425188 . . . Name=1722214 chrX . BED_feature 35208832 35208881 . . . Name=1722214 chrX . BED_feature 75140327 75140376 . . . Name=1722214 chrX . BED_feature 75148645 75148694 . . . Name=1722214 chrX . BED_feature 75320331 75320385 . . . Name=1722214 chrX . BED_feature 75328611 75328660 . . . Name=1722214 chrX . BED_feature 85264456 85264505 . . . Name=1722214 chrX . BED_feature 85272707 85272739 . . . Name=1722214 chrX . BED_feature 91766288 91766337 . . . Name=1722214 chrX . BED_feature 116197072 116197121 . . . Name=1722214 chrX . BED_feature 116205326 116205375 . . . Name=1722214 chrX . BED_feature 122485741 122485790 . . . Name=1722214 chrX . BED_feature 122494043 122494092 . . . Name=1722214 chrX . BED_feature 161150989 161151038 . . . Name=1722214 chrX . BED_feature 161159176 161159225 . . . Name=1722214 chr13 . BED_feature 3172351 3172400 . . . Name=1722214 chr13 . BED_feature 3180624 3180673 . . . Name=1722214 chr13 . BED_feature 20657912 20657961 . . . Name=1722214 chr13 . BED_feature 20666169 20666218 . . . Name=1722214 chr13 . BED_feature 23132766 23132815 . . . Name=1722214 chr13 . BED_feature 50724471 50724520 . . . Name=1722214 chr13 . BED_feature 50732659 50732708 . . . Name=1722214 chr13 . BED_feature 68290754 68290786 . . . Name=1722214 chr13 . BED_feature 68917942 68917976 . . . Name=1722214 chr13 . BED_feature 86661092 86661141 . . . Name=1722214 chr13 . BED_feature 86669338 86669387 . . . Name=1722214 chr13 . BED_feature 112849499 112849548 . . . Name=1722214 chr13 . BED_feature 112857749 112857798 . . . Name=1722214 chr12 . BED_feature 7169147 7169196 . . . Name=1722214 chr12 . BED_feature 7177154 7177203 . . . Name=1722214 chr12 . BED_feature 17896569 17896620 . . . Name=1722214 chr12 . BED_feature 17900941 17900992 . . . Name=1722214 chr12 . BED_feature 18036285 18036336 . . . Name=1722214 chr12 . BED_feature 18040657 18040708 . . . Name=1722214 chr12 . BED_feature 23055568 23055600 . . . Name=1722214 chr12 . BED_feature 23063800 23063832 . . . Name=1722214 chr12 . BED_feature 23088190 23088239 . . . Name=1722214 chr12 . BED_feature 23092810 23092859 . . . Name=1722214 chr12 . BED_feature 23601408 23601457 . . . Name=1722214 chr12 . BED_feature 24421689 24421738 . . . Name=1722214 chr12 . BED_feature 24429944 24429993 . . . Name=1722214 chr12 . BED_feature 24439175 24439224 . . . Name=1722214 chr12 . BED_feature 24670099 24670148 . . . Name=1722214 chr12 . BED_feature 24674624 24674673 . . . Name=1722214 chr11 . BED_feature 40977829 40977878 . . . Name=1722214 chr11 . BED_feature 47262715 47262764 . . . Name=1722214 chr11 . BED_feature 47270977 47271026 . . . Name=1722214 chr11 . BED_feature 75173504 75173553 . . . Name=1722214 chr11 . BED_feature 75181734 75181783 . . . Name=1722214 chr10 . BED_feature 4258035 4258084 . . . Name=1722214 chr10 . BED_feature 4266283 4266332 . . . Name=1722214 chr10 . BED_feature 55324933 55324982 . . . Name=1722214 chr17 . BED_feature 32790743 32790792 . . . Name=1722214 chr17 . BED_feature 39075051 39075100 . . . Name=1722214 chr16 . BED_feature 7785282 7785331 . . . Name=1722214 chr16 . BED_feature 90966442 90966515 . . . Name=1722214 chr16 . BED_feature 93711302 93711351 . . . Name=1722214 chr15 . BED_feature 14818326 14818375 . . . Name=1722214 chr15 . BED_feature 14823348 14823397 . . . Name=1722214 chr15 . BED_feature 32814262 32814311 . . . Name=1722214 chr15 . BED_feature 32822377 32822426 . . . Name=1722214 chr15 . BED_feature 48999399 48999431 . . . Name=1722214 chr15 . BED_feature 49007611 49007643 . . . Name=1722214 chr15 . BED_feature 89789278 89789327 . . . Name=1722214 chr14 . BED_feature 37020438 37020492 . . . Name=1722214 chr14 . BED_feature 37028670 37028719 . . . Name=1722214 chr14 . BED_feature 39035001 39035050 . . . Name=1722214 chr14 . BED_feature 88457371 88457420 . . . Name=1722214 chr14 . BED_feature 93991713 93991762 . . . Name=1722214 chr19 . BED_feature 3247631 3247680 . . . Name=1722214 chr19 . BED_feature 5315959 5316008 . . . Name=1722214 chr18 . BED_feature 6346819 6346868 . . . Name=1722214 chr18 . BED_feature 24695016 24695065 . . . Name=1722214 chr18 . BED_feature 42609938 42609987 . . . Name=1722214 chr18 . BED_feature 74384431 74384480 . . . Name=1722214 chr18 . BED_feature 74392646 74392695 . . . Name=1722214 chr18 . BED_feature 86326695 86326744 . . . Name=1722214 chr18 . BED_feature 86334966 86335015 . . . Name=1722214 chr7 . BED_feature 10085932 10085981 . . . Name=1722214 chr7 . BED_feature 10354050 10354082 . . . Name=1722214 chr7 . BED_feature 13631319 13631368 . . . Name=1722214 chr7 . BED_feature 20202465 20202514 . . . Name=1722214 chr7 . BED_feature 20210640 20210689 . . . Name=1722214 chr7 . BED_feature 21397583 21397632 . . . Name=1722214 chr7 . BED_feature 21405750 21405799 . . . Name=1722214 chr7 . BED_feature 22620776 22620825 . . . Name=1722214 chr7 . BED_feature 22628943 22628992 . . . Name=1722214 chr7 . BED_feature 42162235 42162283 . . . Name=1722214 chr7 . BED_feature 42172198 42172248 . . . Name=1722214 chr7 . BED_feature 42288599 42288648 . . . Name=1722214 chr7 . BED_feature 56555121 56555170 . . . Name=1722214 chr7 . BED_feature 56788446 56788478 . . . Name=1722214 chr7 . BED_feature 56796667 56796699 . . . Name=1722214 chr7 . BED_feature 86481798 86481830 . . . Name=1722214 chr7 . BED_feature 104697628 104697677 . . . Name=1722214 chr7 . BED_feature 106162554 106162603 . . . Name=1722214 chr7 . BED_feature 106170816 106170848 . . . Name=1722214 chr6 . BED_feature 10346851 10346900 . . . Name=1722214 chr6 . BED_feature 10870105 10870154 . . . Name=1722214 chr6 . BED_feature 10878374 10878423 . . . Name=1722214 chr6 . BED_feature 19594163 19594212 . . . Name=1722214 chr6 . BED_feature 19602449 19602498 . . . Name=1722214 chr6 . BED_feature 37677446 37677495 . . . Name=1722214 chr6 . BED_feature 37714375 37714407 . . . Name=1722214 chr6 . BED_feature 60354539 60354596 . . . Name=1722214 chr6 . BED_feature 129770052 129770101 . . . Name=1722214 chr6 . BED_feature 129778245 129778294 . . . Name=1722214 chr6 . BED_feature 149181492 149181541 . . . Name=1722214 chr6 . BED_feature 149315602 149315651 . . . Name=1722214 chr5 . BED_feature 6489488 6489534 . . . Name=1722214 chr5 . BED_feature 6497764 6497809 . . . Name=1722214 chr5 . BED_feature 10627435 10627484 . . . Name=1722214 chr5 . BED_feature 10635524 10635573 . . . Name=1722214 chr5 . BED_feature 40980944 40980993 . . . Name=1722214 chr5 . BED_feature 58606237 58606286 . . . Name=1722214 chr5 . BED_feature 58614423 58614472 . . . Name=1722214 chr5 . BED_feature 76673819 76673868 . . . Name=1722214 chr5 . BED_feature 94676968 94677017 . . . Name=1722214 chr5 . BED_feature 110132630 110132676 . . . Name=1722214 chr4 . BED_feature 3016163 3016212 . . . Name=1722214 chr4 . BED_feature 21052315 21052364 . . . Name=1722214 chr4 . BED_feature 39044181 39044230 . . . Name=1722214 chr4 . BED_feature 39052461 39052506 . . . Name=1722214 chr4 . BED_feature 90366959 90367008 . . . Name=1722214 chr4 . BED_feature 90374762 90374811 . . . Name=1722214 chr4 . BED_feature 120664482 120664531 . . . Name=1722214 chr4 . BED_feature 142945744 142945793 . . . Name=1722214 chr4 . BED_feature 142954025 142954074 . . . Name=1722214 chr4 . BED_feature 143285449 143285498 . . . Name=1722214 chr4 . BED_feature 143293673 143293722 . . . Name=1722214 chr4 . BED_feature 143351272 143351321 . . . Name=1722214 chr4 . BED_feature 143359491 143359540 . . . Name=1722214 chr3 . BED_feature 3241275 3241324 . . . Name=1722214 chr3 . BED_feature 3249538 3249587 . . . Name=1722214 chr3 . BED_feature 10857777 10857826 . . . Name=1722214 chr3 . BED_feature 12567507 12567556 . . . Name=1722214 chr3 . BED_feature 12571906 12571955 . . . Name=1722214 chr3 . BED_feature 33945160 33945209 . . . Name=1722214 chr3 . BED_feature 106717675 106717724 . . . Name=1722214 chr2 . BED_feature 7527753 7527802 . . . Name=1722214 chr2 . BED_feature 67930631 67930680 . . . Name=1722214 chr2 . BED_feature 67938793 67938842 . . . Name=1722214 chr2 . BED_feature 68347342 68347387 . . . Name=1722214 chr2 . BED_feature 68356905 68356950 . . . Name=1722214 chr2 . BED_feature 84699423 84699472 . . . Name=1722214 chr2 . BED_feature 84707730 84707779 . . . Name=1722214 chr2 . BED_feature 85819244 85819295 . . . Name=1722214 chr2 . BED_feature 85823909 85823960 . . . Name=1722214 chr2 . BED_feature 147154880 147154929 . . . Name=1722214 chr2 . BED_feature 181848745 181848794 . . . Name=1722214 chr2 . BED_feature 181857003 181857052 . . . Name=1722214 chr1 . BED_feature 3166625 3166674 . . . Name=1722214 chr1 . BED_feature 8835490 8835539 . . . Name=1722214 chr1 . BED_feature 27450635 27450684 . . . Name=1722214 chr1 . BED_feature 85016325 85016374 . . . Name=1722214 chr1 . BED_feature 85024600 85024649 . . . Name=1722214 chr1 . BED_feature 87299790 87299839 . . . Name=1722214 chr1 . BED_feature 114428568 114428617 . . . Name=1722214 chr1 . BED_feature 147958428 147958477 . . . Name=1722214 chr1 . BED_feature 157306338 157306370 . . . Name=1722214 chr9 . BED_feature 4855449 4855498 . . . Name=1722214 chr9 . BED_feature 7407083 7407131 . . . Name=1722214 chr9 . BED_feature 7415344 7415393 . . . Name=1722214 chr9 . BED_feature 11773780 11773829 . . . Name=1722214 chr9 . BED_feature 17995540 17995589 . . . Name=1722214 chr9 . BED_feature 21977709 21977758 . . . Name=1722214 chr9 . BED_feature 122696574 122696623 . . . Name=1722214 chr8 . BED_feature 4959298 4959347 . . . Name=1722214 chr8 . BED_feature 20164970 20165002 . . . Name=1722214 chr8 . BED_feature 20173230 20173262 . . . Name=1722214 chr8 . BED_feature 20181490 20181522 . . . Name=1722214 chr8 . BED_feature 28769712 28769761 . . . Name=1722214 chr8 . BED_feature 28777979 28778011 . . . Name=1722214 chr8 . BED_feature 75759230 75759279 . . . Name=1722214 chr8 . BED_feature 75767505 75767554 . . . Name=1722214 chr5_random . BED_feature 345219 345268 . . . Name=1722214 chr5_random . BED_feature 353512 353561 . . . Name=1722214 chr5_random . BED_feature 2061322 2061371 . . . Name=1722214 chr5_random . BED_feature 2907787 2907836 . . . Name=1722214 chr11 . BED_feature 69396554 69396580 . . . Name=8441640 chr8 . BED_feature 70421337 70421372 . . . Name=12904181 chr8 . BED_feature 70422669 70422702 . . . Name=12904181 chr8 . BED_feature 95715466 95715494 . . . Name=16079501 chr13 . BED_feature 48677007 48678457 . . . Name=7669690 chr2 . BED_feature 62284544 62284592 . . . Name=10567552 chr17 . BED_feature 45496859 45496893 . . . Name=9113979 chr2 . BED_feature 113744278 113744418 . . . Name=2552286 chr14 . BED_feature 30040520 30040552 . . . Name=2753913 chr3 . BED_feature 88464657 88464702 . . . Name=14634012 chr3 . BED_feature 88470424 88470467 . . . Name=14634012 chr17 . BED_feature 33589424 33589453 . . . Name=3501825 chr17 . BED_feature 33610900 33610931 . . . Name=3501825 chr17 . BED_feature 34870957 34870988 . . . Name=3501825 chr17 . BED_feature 35001960 35001991 . . . Name=3501825 chr17 . BED_feature 35032711 35032742 . . . Name=3501825 chr17 . BED_feature 35806748 35806779 . . . Name=3501825 chr11 . BED_feature 94936171 94936217 . . . Name=10473625 chr16 . BED_feature 15800734 15800853 . . . Name=9528783 chr2 . BED_feature 154260941 154261469 . . . Name=7958837 chr10 . BED_feature 92678684 92679911 . . . Name=7958835 chr10 . BED_feature 92684496 92684612 . . . Name=7958835 chr10 . BED_feature 92694679 92695473 . . . Name=7958835 chr10 . BED_feature 92714568 92714777 . . . Name=7958835 chr10 . BED_feature 92740548 92740689 . . . Name=7958835 chr9 . BED_feature 77845412 77845447 . . . Name=8962155 chr6 . BED_feature 122708373 122708403 . . . Name=15054091 chr6 . BED_feature 69157053 69157080 . . . Name=2107525 chr6 . BED_feature 69213989 69214016 . . . Name=2107525 chr6 . BED_feature 69347095 69347122 . . . Name=2107525 chr6 . BED_feature 70655273 70655356 . . . Name=2107525 chr8 . BED_feature 71809513 71809738 . . . Name=15755745 chr5 . BED_feature 91525401 91525435 . . . Name=7523856 chr5 . BED_feature 91565757 91565785 . . . Name=7523856 chr9 . BED_feature 45687005 45687060 . . . Name=14654367 chr16 . BED_feature 18940693 18940773 . . . Name=2116989 chr16 . BED_feature 19092811 19093359 . . . Name=2116989 chr17 . BED_feature 33589425 33589463 . . . Name=8413217 chr17 . BED_feature 33610901 33610939 . . . Name=8413217 chr17 . BED_feature 34870938 34870987 . . . Name=8413217 chr17 . BED_feature 35001952 35001990 . . . Name=8413217 chr17 . BED_feature 35032703 35032741 . . . Name=8413217 chr17 . BED_feature 35806749 35806787 . . . Name=8413217 chr14 . BED_feature 15368772 15368799 . . . Name=8413217 chr15 . BED_feature 101094620 101094686 . . . Name=8413214 chr19 . BED_feature 34321288 34321853 . . . Name=2398068 chr14 . BED_feature 72059965 72059993 . . . Name=10330185 chr7 . BED_feature 18566379 18566430 . . . Name=7969181 chr7 . BED_feature 18569430 18569630 . . . Name=7969181 chr5 . BED_feature 91547711 91547739 . . . Name=9614204 chr3 . BED_feature 30143759 30143790 . . . Name=8557637 chr7 . BED_feature 24801416 24801450 . . . Name=2011512 chr5 . BED_feature 91525365 91525437 . . . Name=1875930 chr5 . BED_feature 91536004 91536054 . . . Name=1875930 chr4 . BED_feature 44737696 44738377 . . . Name=10662641 chr1 . BED_feature 137869064 137869092 . . . Name=12407098 chr5 . BED_feature 147585148 147585174 . . . Name=9252422 chr16 . BED_feature 23806222 23806252 . . . Name=2147227 chr9 . BED_feature 32483530 32483756 . . . Name=2163347 chr16 . BED_feature 23806222 23806263 . . . Name=2898727 chr12 . BED_feature 86362676 86362712 . . . Name=2147223 chr7 . BED_feature 18568410 18568449 . . . Name=2163343 chr16 . BED_feature 23806225 23806260 . . . Name=7926024 chr11 . BED_feature 69403130 69403157 . . . Name=14707287 chr12 . BED_feature 86362492 86362522 . . . Name=8506157 chr12 . BED_feature 31850901 31850935 . . . Name=1850696 chr2 . BED_feature 109475450 109475487 . . . Name=12114522 chr11 . BED_feature 70435390 70435612 . . . Name=8464921 chr11 . BED_feature 78736933 78736990 . . . Name=7508926 chr11 . BED_feature 69561764 69562338 . . . Name=9151733 chr6 . BED_feature 92210105 92210244 . . . Name=10537125 chr7 . BED_feature 109852585 109852907 . . . Name=10657238 chr6 . BED_feature 41045109 41045728 . . . Name=2557542 chr6 . BED_feature 41050930 41051019 . . . Name=2557542 chr6 . BED_feature 41059681 41059770 . . . Name=2557542 chr2 . BED_feature 147056499 147057506 . . . Name=1889089 chr3 . BED_feature 101733721 101733827 . . . Name=1324413 chrX . BED_feature 7128569 7128597 . . . Name=12045237 chr5 . BED_feature 30343757 30343798 . . . Name=12177065 chr18 . BED_feature 20808311 20808340 . . . Name=9668124 chr12 . BED_feature 113712846 113713747 . . . Name=1401921 chr6 . BED_feature 70655323 70655353 . . . Name=8268924 chr4 . BED_feature 124154606 124154641 . . . Name=8948648 chr11 . BED_feature 9017789 9017822 . . . Name=11559567 chr5 . BED_feature 93403446 93403483 . . . Name=12403783 chr9 . BED_feature 49551486 49551548 . . . Name=7910552 chr3 . BED_feature 28888905 28889034 . . . Name=8544849 chr17 . BED_feature 46016863 46016889 . . . Name=2108863 chr1 . BED_feature 82171131 82171170 . . . Name=8544845 chr9 . BED_feature 50505294 50505415 . . . Name=15522290 chr17 . BED_feature 33589423 33589465 . . . Name=2540425 chr17 . BED_feature 33610899 33610942 . . . Name=2540425 chr17 . BED_feature 34870944 34870989 . . . Name=2540425 chr17 . BED_feature 35001949 35001992 . . . Name=2540425 chr17 . BED_feature 35032700 35032743 . . . Name=2540425 chr17 . BED_feature 35047045 35047084 . . . Name=2540425 chr17 . BED_feature 35077934 35077979 . . . Name=2540425 chr17 . BED_feature 35806747 35806791 . . . Name=2540425 chr15 . BED_feature 78322202 78322469 . . . Name=15752766 chr2 . BED_feature 163441549 163441592 . . . Name=1881892 chr7 . BED_feature 41898472 41899356 . . . Name=7862144 chr7 . BED_feature 51614716 51615599 . . . Name=7862144 chr7 . BED_feature 89482898 89482927 . . . Name=7862144 chr7 . BED_feature 100635010 100635893 . . . Name=7862144 chr6 . BED_feature 22654270 22654299 . . . Name=7862144 chr6 . BED_feature 83840155 83841038 . . . Name=7862144 chr6 . BED_feature 84777898 84778787 . . . Name=7862144 chr6 . BED_feature 91394387 91394416 . . . Name=7862144 chr6 . BED_feature 125127879 125127908 . . . Name=7862144 chr6 . BED_feature 128167884 128168852 . . . Name=7862144 chr5 . BED_feature 13048557 13049440 . . . Name=7862144 chr5 . BED_feature 96102016 96102899 . . . Name=7862144 chr5 . BED_feature 106103121 106104004 . . . Name=7862144 chr4 . BED_feature 57465125 57466008 . . . Name=7862144 chr4 . BED_feature 83576986 83577015 . . . Name=7862144 chr4 . BED_feature 84395391 84395420 . . . Name=7862144 chr4 . BED_feature 91343804 91344687 . . . Name=7862144 chr3 . BED_feature 52700764 52701647 . . . Name=7862144 chr3 . BED_feature 61549906 61549935 . . . Name=7862144 chr3 . BED_feature 79003185 79004068 . . . Name=7862144 chr3 . BED_feature 122222335 122223218 . . . Name=7862144 chr3 . BED_feature 139586766 139587649 . . . Name=7862144 chr3 . BED_feature 142899997 142900880 . . . Name=7862144 chr2 . BED_feature 11327001 11327884 . . . Name=7862144 chr2 . BED_feature 28755735 28756618 . . . Name=7862144 chr2 . BED_feature 43340524 43341407 . . . Name=7862144 chr2 . BED_feature 146446257 146446286 . . . Name=7862144 chr2 . BED_feature 149434616 149435499 . . . Name=7862144 chr2 . BED_feature 151065449 151065478 . . . Name=7862144 chr2 . BED_feature 152427792 152428488 . . . Name=7862144 chr1 . BED_feature 12551453 12551482 . . . Name=7862144 chr1 . BED_feature 13771215 13771244 . . . Name=7862144 chr1 . BED_feature 15254131 15254160 . . . Name=7862144 chr1 . BED_feature 102112598 102112627 . . . Name=7862144 chr1 . BED_feature 182163964 182163993 . . . Name=7862144 chr18 . BED_feature 54109690 54110579 . . . Name=7862144 chr9 . BED_feature 51324883 51324912 . . . Name=7862144 chr9 . BED_feature 51376166 51376195 . . . Name=7862144 chr9 . BED_feature 75479680 75479709 . . . Name=7862144 chr8 . BED_feature 43107603 43107632 . . . Name=7862144 chr8 . BED_feature 60442444 60443327 . . . Name=7862144 chr8 . BED_feature 78301708 78302591 . . . Name=7862144 chr8 . BED_feature 94578592 94578621 . . . Name=7862144 chr8 . BED_feature 95605173 95606056 . . . Name=7862144 chr13 . BED_feature 17606088 17606117 . . . Name=7862144 chr13 . BED_feature 94394534 94394563 . . . Name=7862144 chr13 . BED_feature 98558424 98558453 . . . Name=7862144 chr13 . BED_feature 99502370 99503240 . . . Name=7862144 chr12 . BED_feature 5616603 5616632 . . . Name=7862144 chr12 . BED_feature 15753647 15753676 . . . Name=7862144 chr12 . BED_feature 70840067 70840096 . . . Name=7862144 chr12 . BED_feature 82292040 82292069 . . . Name=7862144 chr11 . BED_feature 4464478 4464507 . . . Name=7862144 chr11 . BED_feature 17873912 17873941 . . . Name=7862144 chr11 . BED_feature 20235133 20236016 . . . Name=7862144 chr11 . BED_feature 26686633 26687516 . . . Name=7862144 chr11 . BED_feature 33176708 33176737 . . . Name=7862144 chr11 . BED_feature 63128623 63128652 . . . Name=7862144 chr11 . BED_feature 99495076 99495105 . . . Name=7862144 chr10 . BED_feature 13580963 13580991 . . . Name=7862144 chr10 . BED_feature 33498885 33498914 . . . Name=7862144 chr10 . BED_feature 39701282 39701311 . . . Name=7862144 chr17 . BED_feature 14510586 14510615 . . . Name=7862144 chr17 . BED_feature 25054330 25054359 . . . Name=7862144 chr17 . BED_feature 61466364 61466393 . . . Name=7862144 chr15 . BED_feature 4833189 4833218 . . . Name=7862144 chr15 . BED_feature 12519614 12520497 . . . Name=7862144 chr15 . BED_feature 18109330 18109359 . . . Name=7862144 chr15 . BED_feature 93024775 93025660 . . . Name=7862144 chr14 . BED_feature 10074301 10075184 . . . Name=7862144 chr14 . BED_feature 47331431 47331460 . . . Name=7862144 chr14 . BED_feature 102256262 102257125 . . . Name=7862144 chr19 . BED_feature 40266543 40266572 . . . Name=7862144 chrX . BED_feature 76446688 76447571 . . . Name=7862144 chrX . BED_feature 84824889 84824917 . . . Name=7862144 chrX . BED_feature 111575956 111575985 . . . Name=7862144 chrX . BED_feature 116277654 116277683 . . . Name=7862144 chrX . BED_feature 147286084 147286965 . . . Name=7862144 chr11 . BED_feature 68915208 68915237 . . . Name=12483227 chr2 . BED_feature 164639183 164639220 . . . Name=16166639 chr12 . BED_feature 113875363 113875392 . . . Name=2068097 chr15 . BED_feature 101094793 101094846 . . . Name=7969116 chr6 . BED_feature 52133967 52134176 . . . Name=2565857 chr11 . BED_feature 96119437 96119750 . . . Name=2565857 chr6 . BED_feature 71192164 71192201 . . . Name=15890826 chr7 . BED_feature 51614690 51614718 . . . Name=12972592 chr7 . BED_feature 100635891 100635919 . . . Name=12972592 chr6 . BED_feature 83841036 83841064 . . . Name=12972592 chr6 . BED_feature 91394361 91394389 . . . Name=12972592 chr5 . BED_feature 13049438 13049466 . . . Name=12972592 chr5 . BED_feature 28869331 28869359 . . . Name=12972592 chr5 . BED_feature 96101990 96102018 . . . Name=12972592 chr5 . BED_feature 106104002 106104030 . . . Name=12972592 chr4 . BED_feature 57466006 57466034 . . . Name=12972592 chr4 . BED_feature 91344685 91344713 . . . Name=12972592 chr3 . BED_feature 122223216 122223244 . . . Name=12972592 chr3 . BED_feature 142899971 142899999 . . . Name=12972592 chr2 . BED_feature 28756616 28756644 . . . Name=12972592 chr2 . BED_feature 43341405 43341433 . . . Name=12972592 chr2 . BED_feature 149434590 149434618 . . . Name=12972592 chr2 . BED_feature 160946896 160946924 . . . Name=12972592 chr1 . BED_feature 15255009 15255037 . . . Name=12972592 chr1 . BED_feature 182164857 182164885 . . . Name=12972592 chr9 . BED_feature 51324857 51324885 . . . Name=12972592 chr9 . BED_feature 113379041 113379069 . . . Name=12972592 chr8 . BED_feature 35791339 35791367 . . . Name=12972592 chr8 . BED_feature 60442418 60442446 . . . Name=12972592 chr8 . BED_feature 78302589 78302617 . . . Name=12972592 chr8 . BED_feature 95606054 95606082 . . . Name=12972592 chr13 . BED_feature 99503238 99503266 . . . Name=12972592 chr12 . BED_feature 50717876 50717904 . . . Name=12972592 chr11 . BED_feature 20236014 20236042 . . . Name=12972592 chr11 . BED_feature 63129504 63129532 . . . Name=12972592 chr10 . BED_feature 33498912 33498940 . . . Name=12972592 chr15 . BED_feature 4832309 4832337 . . . Name=12972592 chr15 . BED_feature 12519588 12519616 . . . Name=12972592 chr14 . BED_feature 10075182 10075210 . . . Name=12972592 chr19 . BED_feature 16344790 16344818 . . . Name=12972592 chrX . BED_feature 12483976 12484004 . . . Name=12972592 chrX . BED_feature 76447569 76447597 . . . Name=12972592 chr2 . BED_feature 102702390 102702429 . . . Name=10657993 chr11 . BED_feature 98584305 98584335 . . . Name=12150932 chr11 . BED_feature 98589152 98589199 . . . Name=12150932 chr10 . BED_feature 84581013 84581043 . . . Name=12150932 chr3 . BED_feature 94476563 94476591 . . . Name=12150932 chr2 . BED_feature 92213484 92213532 . . . Name=12150932 chr9 . BED_feature 78015472 78015501 . . . Name=15155840 chr9 . BED_feature 78041948 78041977 . . . Name=15155840 chr9 . BED_feature 78068345 78068374 . . . Name=15155840 chr9 . BED_feature 78134111 78134140 . . . Name=15155840 chr17 . BED_feature 33589363 33589817 . . . Name=3510743 chr17 . BED_feature 33610693 33611369 . . . Name=3510743 chr17 . BED_feature 34870573 34871119 . . . Name=3510743 chr17 . BED_feature 34906605 34906783 . . . Name=3510743 chr17 . BED_feature 34987032 34987633 . . . Name=3510743 chr17 . BED_feature 35001577 35002052 . . . Name=3510743 chr17 . BED_feature 35032550 35032803 . . . Name=3510743 chr17 . BED_feature 35046696 35047148 . . . Name=3510743 chr17 . BED_feature 35790655 35790691 . . . Name=3510743 chr17 . BED_feature 35806744 35806790 . . . Name=3510743 chr7 . BED_feature 46244213 46244242 . . . Name=8127707 chr5 . BED_feature 16065674 16065702 . . . Name=7935420 chr16 . BED_feature 23806223 23806263 . . . Name=2564850 chr6 . BED_feature 122821685 122821919 . . . Name=16854466 chr11 . BED_feature 100724805 100724845 . . . Name=11438543 chr11 . BED_feature 100727323 100727361 . . . Name=11438543 chr13 . BED_feature 55339731 55339779 . . . Name=12444919 chr11 . BED_feature 54093065 54093105 . . . Name=8289796 chrX . BED_feature 20027115 20027144 . . . Name=9478976 chr17 . BED_feature 35113682 35114128 . . . Name=8289793 chr12 . BED_feature 86362676 86362704 . . . Name=1922053 chr2 . BED_feature 127817489 127817521 . . . Name=16162916 chr7 . BED_feature 105441521 105441574 . . . Name=7800475 chr7 . BED_feature 105448138 105448378 . . . Name=7800475 chr9 . BED_feature 18051053 18051105 . . . Name=7800475 chr1 . BED_feature 136106264 136106470 . . . Name=10548518 chrX . BED_feature 164531362 164531392 . . . Name=16595692 chr9 . BED_feature 45687018 45687057 . . . Name=9545312 chr6 . BED_feature 68946742 68946794 . . . Name=3537963 chr6 . BED_feature 69041094 69041146 . . . Name=3537963 chr6 . BED_feature 69115023 69115075 . . . Name=3537963 chr6 . BED_feature 69157045 69157097 . . . Name=3537963 chr6 . BED_feature 69173350 69173399 . . . Name=3537963 chr6 . BED_feature 69198074 69198124 . . . Name=3537963 chr6 . BED_feature 69213981 69214033 . . . Name=3537963 chr6 . BED_feature 69235025 69235077 . . . Name=3537963 chr6 . BED_feature 69308134 69308186 . . . Name=3537963 chr6 . BED_feature 69330006 69330055 . . . Name=3537963 chr6 . BED_feature 69347087 69347139 . . . Name=3537963 chr6 . BED_feature 69368403 69368455 . . . Name=3537963 chr6 . BED_feature 69537463 69537512 . . . Name=3537963 chr6 . BED_feature 69561844 69561892 . . . Name=3537963 chr12 . BED_feature 114380257 114380293 . . . Name=3537963 chr12 . BED_feature 114442778 114442823 . . . Name=3537963 chr12 . BED_feature 114508148 114508198 . . . Name=3537963 chr12 . BED_feature 115130945 115130981 . . . Name=3537963 chr12 . BED_feature 115156961 115156997 . . . Name=3537963 chr12 . BED_feature 115194586 115194638 . . . Name=3537963 chr12 . BED_feature 115299503 115299555 . . . Name=3537963 chr12 . BED_feature 115362912 115362964 . . . Name=3537963 chr2 . BED_feature 28437364 28437397 . . . Name=11696536 chr16 . BED_feature 10699185 10700012 . . . Name=11696536 chr16 . BED_feature 87618777 87618809 . . . Name=9565602 chr17 . BED_feature 33611946 33611997 . . . Name=7984430 chr17 . BED_feature 35000758 35000789 . . . Name=7984430 chr17 . BED_feature 35045858 35045889 . . . Name=7984430 chr17 . BED_feature 35076934 35076965 . . . Name=7984430 chr5 . BED_feature 8897867 8900457 . . . Name=8877103 chr10 . BED_feature 61524838 61524867 . . . Name=10825208 chr10 . BED_feature 61527576 61527605 . . . Name=10825208 chr6 . BED_feature 108626136 108626168 . . . Name=14581485 chr11 . BED_feature 68914964 68914995 . . . Name=14581485 chr10 . BED_feature 66933149 66933181 . . . Name=8483478 chr12 . BED_feature 86362678 86362712 . . . Name=8483478 chr18 . BED_feature 34987076 34987125 . . . Name=8483478 chr7 . BED_feature 109913093 109913392 . . . Name=11500387 chr1 . BED_feature 74833835 74833863 . . . Name=15538371 chr1 . BED_feature 97497673 97498061 . . . Name=9516473 chr5 . BED_feature 147580551 147580997 . . . Name=7907546 chr5 . BED_feature 147584726 147585523 . . . Name=7907546 chr11 . BED_feature 96121129 96121172 . . . Name=7907546 chr15 . BED_feature 102838906 102838963 . . . Name=7907546 chr15 . BED_feature 102863818 102863869 . . . Name=7907546 chr16 . BED_feature 23806260 23806295 . . . Name=7907546 chr5 . BED_feature 75856698 75856747 . . . Name=8695840 chr15 . BED_feature 97830431 97830470 . . . Name=10825206 chr3 . BED_feature 138464666 138464701 . . . Name=8756633 chrX . BED_feature 58046028 58046063 . . . Name=8756633 chr7 . BED_feature 32068073 32068100 . . . Name=11340077 chr7 . BED_feature 33021288 33021315 . . . Name=11340077 chr7 . BED_feature 35943486 35943513 . . . Name=11340077 chr7 . BED_feature 41898901 41898928 . . . Name=11340077 chr7 . BED_feature 51615144 51615171 . . . Name=11340077 chr7 . BED_feature 67656833 67656860 . . . Name=11340077 chr7 . BED_feature 72863211 72863238 . . . Name=11340077 chr7 . BED_feature 89483315 89483342 . . . Name=11340077 chr7 . BED_feature 100635438 100635465 . . . Name=11340077 chr6 . BED_feature 18095168 18095195 . . . Name=11340077 chr6 . BED_feature 22653844 22653871 . . . Name=11340077 chr6 . BED_feature 83840583 83840610 . . . Name=11340077 chr6 . BED_feature 91394815 91394842 . . . Name=11340077 chr6 . BED_feature 93103036 93103063 . . . Name=11340077 chr6 . BED_feature 94786421 94786448 . . . Name=11340077 chr6 . BED_feature 125128525 125128552 . . . Name=11340077 chr6 . BED_feature 128168397 128168424 . . . Name=11340077 chr5 . BED_feature 13048985 13049012 . . . Name=11340077 chr5 . BED_feature 16020546 16020573 . . . Name=11340077 chr5 . BED_feature 96102444 96102471 . . . Name=11340077 chr5 . BED_feature 106103549 106103576 . . . Name=11340077 chr5 . BED_feature 108386070 108386097 . . . Name=11340077 chr4 . BED_feature 41357702 41357729 . . . Name=11340077 chr4 . BED_feature 57465553 57465580 . . . Name=11340077 chr4 . BED_feature 82665652 82665679 . . . Name=11340077 chr4 . BED_feature 83576560 83576587 . . . Name=11340077 chr4 . BED_feature 84394959 84394986 . . . Name=11340077 chr4 . BED_feature 91344232 91344259 . . . Name=11340077 chr4 . BED_feature 128371237 128371264 . . . Name=11340077 chr3 . BED_feature 8599116 8599143 . . . Name=11340077 chr3 . BED_feature 14488378 14488405 . . . Name=11340077 chr3 . BED_feature 14950851 14950878 . . . Name=11340077 chr3 . BED_feature 36055859 36055886 . . . Name=11340077 chr3 . BED_feature 52701192 52701219 . . . Name=11340077 chr3 . BED_feature 61550335 61550362 . . . Name=11340077 chr3 . BED_feature 79003613 79003640 . . . Name=11340077 chr3 . BED_feature 121172661 121172688 . . . Name=11340077 chr3 . BED_feature 122222763 122222790 . . . Name=11340077 chr3 . BED_feature 125034830 125034857 . . . Name=11340077 chr3 . BED_feature 139587194 139587221 . . . Name=11340077 chr3 . BED_feature 142900425 142900452 . . . Name=11340077 chr2 . BED_feature 11327429 11327456 . . . Name=11340077 chr2 . BED_feature 28756163 28756190 . . . Name=11340077 chr2 . BED_feature 43340952 43340979 . . . Name=11340077 chr2 . BED_feature 45631919 45631946 . . . Name=11340077 chr2 . BED_feature 56895568 56895595 . . . Name=11340077 chr2 . BED_feature 81923536 81923563 . . . Name=11340077 chr2 . BED_feature 104338710 104338737 . . . Name=11340077 chr2 . BED_feature 146446686 146446713 . . . Name=11340077 chr2 . BED_feature 149435043 149435070 . . . Name=11340077 chr2 . BED_feature 151065883 151065910 . . . Name=11340077 chr2 . BED_feature 160946437 160946464 . . . Name=11340077 chr2 . BED_feature 162674241 162674268 . . . Name=11340077 chr1 . BED_feature 13771643 13771670 . . . Name=11340077 chr1 . BED_feature 15254559 15254586 . . . Name=11340077 chr1 . BED_feature 52448316 52448343 . . . Name=11340077 chr1 . BED_feature 182164392 182164419 . . . Name=11340077 chr18 . BED_feature 23360041 23360068 . . . Name=11340077 chr18 . BED_feature 56098089 56098116 . . . Name=11340077 chr18 . BED_feature 89668695 89668722 . . . Name=11340077 chr9 . BED_feature 45587469 45587496 . . . Name=11340077 chr9 . BED_feature 51755185 51755212 . . . Name=11340077 chr8 . BED_feature 37841690 37841717 . . . Name=11340077 chr8 . BED_feature 43108025 43108052 . . . Name=11340077 chr8 . BED_feature 47754034 47754061 . . . Name=11340077 chr8 . BED_feature 53777748 53777775 . . . Name=11340077 chr8 . BED_feature 66670676 66670703 . . . Name=11340077 chr8 . BED_feature 78302136 78302163 . . . Name=11340077 chr8 . BED_feature 95605601 95605628 . . . Name=11340077 chr8 . BED_feature 100455261 100455288 . . . Name=11340077 chr13 . BED_feature 20712386 20712413 . . . Name=11340077 chr13 . BED_feature 98558851 98558878 . . . Name=11340077 chr13 . BED_feature 99502797 99502824 . . . Name=11340077 chr12 . BED_feature 5616171 5616198 . . . Name=11340077 chr12 . BED_feature 13778755 13778782 . . . Name=11340077 chr12 . BED_feature 15754080 15754107 . . . Name=11340077 chr12 . BED_feature 70839623 70839650 . . . Name=11340077 chr12 . BED_feature 72765420 72765447 . . . Name=11340077 chr12 . BED_feature 82291608 82291635 . . . Name=11340077 chr11 . BED_feature 3852159 3852186 . . . Name=11340077 chr11 . BED_feature 4464071 4464098 . . . Name=11340077 chr11 . BED_feature 17874341 17874368 . . . Name=11340077 chr11 . BED_feature 20235561 20235588 . . . Name=11340077 chr11 . BED_feature 26687061 26687088 . . . Name=11340077 chr11 . BED_feature 48578523 48578550 . . . Name=11340077 chr11 . BED_feature 63129051 63129078 . . . Name=11340077 chr11 . BED_feature 79188005 79188032 . . . Name=11340077 chr11 . BED_feature 99494650 99494677 . . . Name=11340077 chr11 . BED_feature 108975823 108975850 . . . Name=11340077 chr10 . BED_feature 22481184 22481211 . . . Name=11340077 chr10 . BED_feature 33498459 33498486 . . . Name=11340077 chr10 . BED_feature 39701716 39701743 . . . Name=11340077 chr10 . BED_feature 43510080 43510107 . . . Name=11340077 chr10 . BED_feature 44694959 44694986 . . . Name=11340077 chr10 . BED_feature 126716525 126716552 . . . Name=11340077 chr17 . BED_feature 61466792 61466819 . . . Name=11340077 chr17 . BED_feature 79163005 79163032 . . . Name=11340077 chr16 . BED_feature 9958745 9958772 . . . Name=11340077 chr15 . BED_feature 12520042 12520069 . . . Name=11340077 chr15 . BED_feature 43047770 43047797 . . . Name=11340077 chr15 . BED_feature 84694508 84694535 . . . Name=11340077 chr15 . BED_feature 93025205 93025232 . . . Name=11340077 chr14 . BED_feature 10074729 10074756 . . . Name=11340077 chr14 . BED_feature 47331005 47331032 . . . Name=11340077 chr14 . BED_feature 102256690 102256717 . . . Name=11340077 chr19 . BED_feature 16345221 16345248 . . . Name=11340077 chr19 . BED_feature 25863453 25863480 . . . Name=11340077 chr19 . BED_feature 40266123 40266150 . . . Name=11340077 chr19 . BED_feature 46728129 46728156 . . . Name=11340077 chrX . BED_feature 76447116 76447143 . . . Name=11340077 chrX . BED_feature 84825317 84825344 . . . Name=11340077 chrX . BED_feature 111576384 111576411 . . . Name=11340077 chrX . BED_feature 135023392 135023419 . . . Name=11340077 chrX . BED_feature 137121173 137121200 . . . Name=11340077 chrX . BED_feature 147286511 147286538 . . . Name=11340077 chrX . BED_feature 148744324 148744351 . . . Name=11340077 chr7 . BED_feature 24606070 24606218 . . . Name=12446773 chr12 . BED_feature 113713040 113713078 . . . Name=10748032 chr1 . BED_feature 173050698 173050731 . . . Name=9295294 chr18 . BED_feature 36852670 36852801 . . . Name=1383228 chr2 . BED_feature 62284547 62284588 . . . Name=9372951 chr6 . BED_feature 85417667 85417702 . . . Name=10561509 chr5 . BED_feature 130102073 130102109 . . . Name=10561509 chr3 . BED_feature 88383091 88383129 . . . Name=10561509 chr11 . BED_feature 22890633 22890669 . . . Name=10561509 chr10 . BED_feature 116467503 116467538 . . . Name=10561509 chr17 . BED_feature 12759733 12759768 . . . Name=10561509 chr16 . BED_feature 87384800 87384835 . . . Name=10561509 chr15 . BED_feature 31546067 31546480 . . . Name=10561509 chr12 . BED_feature 86368564 86368595 . . . Name=10037443 chr9 . BED_feature 45686922 45687188 . . . Name=9121477 chr5 . BED_feature 30343759 30343787 . . . Name=9535723 chr8 . BED_feature 71809364 71809400 . . . Name=9535723 chr15 . BED_feature 74683442 74683480 . . . Name=2783417 chr2 . BED_feature 155442607 155442644 . . . Name=10777534 chr13 . BED_feature 27064877 27064908 . . . Name=9717847 chr15 . BED_feature 85410290 85410319 . . . Name=11914369 chr14 . BED_feature 30038417 30038468 . . . Name=8114720 chr7 . BED_feature 3538564 3538594 . . . Name=8798433 chr7 . BED_feature 3859547 3859577 . . . Name=8798433 chr7 . BED_feature 25430523 25430560 . . . Name=8798433 chr17 . BED_feature 34870981 34871010 . . . Name=1986360 chr7 . BED_feature 46583870 46583914 . . . Name=8007954 chr11 . BED_feature 78736004 78736032 . . . Name=8649986 chr15 . BED_feature 97830453 97830489 . . . Name=9614106 chr2 . BED_feature 101425473 101425503 . . . Name=10845919 chr7 . BED_feature 28059499 28059529 . . . Name=8961261 chr9 . BED_feature 86493187 86493221 . . . Name=1314168 chr11 . BED_feature 54093150 54093179 . . . Name=7623820 chr17 . BED_feature 35114029 35114070 . . . Name=8152920 chr12 . BED_feature 86362671 86362705 . . . Name=2062642 chr3 . BED_feature 145584298 145585034 . . . Name=2062642 chr3 . BED_feature 145586518 145589421 . . . Name=2062642 chr12 . BED_feature 104139375 104139661 . . . Name=2836860 chr12 . BED_feature 104174807 104175094 . . . Name=2836860 chr12 . BED_feature 104229503 104229533 . . . Name=2836860 chr12 . BED_feature 104358133 104358161 . . . Name=2836860 chr5 . BED_feature 91535985 91536015 . . . Name=2836860 chr18 . BED_feature 20806564 20806636 . . . Name=2836860 chr5 . BED_feature 121148230 121148258 . . . Name=2542764 chr5 . BED_feature 121168144 121168172 . . . Name=2542764 chr12 . BED_feature 91806441 91806470 . . . Name=7997232 chrX . BED_feature 7133614 7133659 . . . Name=9089398 chr2 . BED_feature 73619657 73619758 . . . Name=2529117 chr16 . BED_feature 23806225 23806260 . . . Name=2529117 chr6 . BED_feature 68684618 68684724 . . . Name=6425835 chr6 . BED_feature 68698142 68698686 . . . Name=6425835 chr6 . BED_feature 68736760 68737358 . . . Name=6425835 chr6 . BED_feature 68840001 68840564 . . . Name=6425835 chr6 . BED_feature 68890969 68891062 . . . Name=6425835 chr6 . BED_feature 68920339 68921728 . . . Name=6425835 chr6 . BED_feature 68946142 68946963 . . . Name=6425835 chr6 . BED_feature 68972553 68973158 . . . Name=6425835 chr6 . BED_feature 68989286 68990099 . . . Name=6425835 chr6 . BED_feature 69040492 69041384 . . . Name=6425835 chr6 . BED_feature 69085699 69087114 . . . Name=6425835 chr6 . BED_feature 69114422 69115312 . . . Name=6425835 chr6 . BED_feature 69127164 69128068 . . . Name=6425835 chr6 . BED_feature 69156435 69157335 . . . Name=6425835 chr6 . BED_feature 69172741 69173640 . . . Name=6425835 chr6 . BED_feature 69197465 69198364 . . . Name=6425835 chr6 . BED_feature 69213371 69214271 . . . Name=6425835 chr6 . BED_feature 69234415 69235314 . . . Name=6425835 chr6 . BED_feature 69272069 69272593 . . . Name=6425835 chr6 . BED_feature 69307548 69308424 . . . Name=6425835 chr6 . BED_feature 69329408 69330297 . . . Name=6425835 chr6 . BED_feature 69346489 69347377 . . . Name=6425835 chr6 . BED_feature 69367799 69368693 . . . Name=6425835 chr6 . BED_feature 69392782 69393073 . . . Name=6425835 chr6 . BED_feature 69429836 69430439 . . . Name=6425835 chr6 . BED_feature 69473955 69475278 . . . Name=6425835 chr6 . BED_feature 69505556 69506447 . . . Name=6425835 chr6 . BED_feature 69516876 69517762 . . . Name=6425835 chr6 . BED_feature 69536856 69537753 . . . Name=6425835 chr6 . BED_feature 69561246 69562130 . . . Name=6425835 chr6 . BED_feature 69578405 69578943 . . . Name=6425835 chr6 . BED_feature 69610988 69612347 . . . Name=6425835 chr6 . BED_feature 69630363 69630940 . . . Name=6425835 chr6 . BED_feature 70652143 70652210 . . . Name=6425835 chr9 . BED_feature 54560094 54560196 . . . Name=10714763 chr3 . BED_feature 19885849 19887595 . . . Name=11278361 chr2 . BED_feature 181294772 181294837 . . . Name=11890680 chr16 . BED_feature 14204868 14204896 . . . Name=9529161 chr16 . BED_feature 14206007 14206115 . . . Name=9529161 chr16 . BED_feature 15801943 15802019 . . . Name=1714459 chr19 . BED_feature 25572694 25572730 . . . Name=11870074 chr11 . BED_feature 83478594 83478783 . . . Name=7835696 chr12 . BED_feature 109901106 109901145 . . . Name=9822638 chr11 . BED_feature 78736048 78736116 . . . Name=7520478 chr10 . BED_feature 60693069 60693125 . . . Name=8871649 chr3 . BED_feature 10166296 10166330 . . . Name=10629058 chr3 . BED_feature 10190984 10191043 . . . Name=10629058 chr13 . BED_feature 42174357 42175365 . . . Name=1694016 chr13 . BED_feature 42178531 42178635 . . . Name=1694016 chr13 . BED_feature 42192408 42192904 . . . Name=1694016 chr13 . BED_feature 42194362 42195998 . . . Name=1694016 chr5 . BED_feature 126371779 126372395 . . . Name=1694016 chr10 . BED_feature 13829638 13829679 . . . Name=1694016 chr3 . BED_feature 142601285 142602903 . . . Name=1694016 chrX . BED_feature 92424646 92425011 . . . Name=1694016 chr12 . BED_feature 31850892 31850939 . . . Name=2556699 chr2 . BED_feature 172795580 172795617 . . . Name=7532283 chr4 . BED_feature 140282528 140282656 . . . Name=16321658 chr11 . BED_feature 69764187 69765140 . . . Name=2404278 chr11 . BED_feature 78736812 78736954 . . . Name=9164945 chr12 . BED_feature 86362676 86362716 . . . Name=12137955 chr2 . BED_feature 133243978 133244008 . . . Name=12511606 chr12 . BED_feature 113787246 113787280 . . . Name=8089482 chr17 . BED_feature 33897271 33897310 . . . Name=8089482 chr5 . BED_feature 107965133 107965162 . . . Name=15131254 chr5 . BED_feature 107966947 107966977 . . . Name=15131254 chr7 . BED_feature 18568532 18568560 . . . Name=9614136 chr12 . BED_feature 113875210 113875260 . . . Name=9614136 chr11 . BED_feature 67052884 67053961 . . . Name=9614136 chr17 . BED_feature 34470751 34470826 . . . Name=2174104 chr9 . BED_feature 57494750 57494781 . . . Name=2174107 chr3 . BED_feature 68778501 68778530 . . . Name=11602633 chr6 . BED_feature 92210031 92210058 . . . Name=8910392 chr6 . BED_feature 92212008 92212036 . . . Name=8910392 chr2 . BED_feature 76161192 76162902 . . . Name=9166696 chr9 . BED_feature 110863759 110863788 . . . Name=1584212 chr4 . BED_feature 88312924 88312952 . . . Name=1614874 chr9 . BED_feature 54562793 54562841 . . . Name=9092560 chr17 . BED_feature 25093748 25093807 . . . Name=8839840 chr6 . BED_feature 65067756 65067784 . . . Name=10998423 chr9 . BED_feature 86492890 86493178 . . . Name=2332433 chr9 . BED_feature 107764659 107765245 . . . Name=9467940 chr3 . BED_feature 159534367 159534406 . . . Name=12759335 chr8 . BED_feature 119981735 119981808 . . . Name=12759335 chr4 . BED_feature 63533052 63537026 . . . Name=7534412 chr1 . BED_feature 151860748 151860789 . . . Name=10859338 chr6 . BED_feature 4455594 4455637 . . . Name=2072909 chr4 . BED_feature 15808179 15808216 . . . Name=8464915 chr9 . BED_feature 21713833 21713868 . . . Name=1650452 chrX . BED_feature 7116698 7116727 . . . Name=1650452 chr1 . BED_feature 172895951 172895985 . . . Name=8070412 chr12 . BED_feature 17570231 17570438 . . . Name=1650455 chr3 . BED_feature 28888879 28888913 . . . Name=15886523 chr12 . BED_feature 113875219 113875262 . . . Name=2357966 chr3 . BED_feature 135628874 135628907 . . . Name=9190210 chr2 . BED_feature 105465567 105465607 . . . Name=12962539 chr6 . BED_feature 134199219 134199263 . . . Name=9009269 chr11 . BED_feature 106130523 106130913 . . . Name=2508087 chr19 . BED_feature 43579562 43579614 . . . Name=10527950 chr5 . BED_feature 91535982 91536012 . . . Name=10527950 chr8 . BED_feature 87866667 87866694 . . . Name=8537375 chr11 . BED_feature 65087252 65087284 . . . Name=14645532 chr2 . BED_feature 104927052 104927087 . . . Name=9336463 chr9 . BED_feature 21881605 21881649 . . . Name=15563837 chr6 . BED_feature 41043107 41043146 . . . Name=12082086 chr17 . BED_feature 33955131 33955170 . . . Name=2564635 chr18 . BED_feature 43863435 43863477 . . . Name=7935489 chr3 . BED_feature 89222380 89222424 . . . Name=1315961 chr16 . BED_feature 18515178 18515212 . . . Name=12533514 chr7 . BED_feature 46243935 46243963 . . . Name=12135926 chr16 . BED_feature 23806222 23806263 . . . Name=9832447 chr9 . BED_feature 53991724 53991761 . . . Name=9832447 chr8 . BED_feature 93960202 93960321 . . . Name=10760507 chr2 . BED_feature 83525257 83525288 . . . Name=10899572 chr12 . BED_feature 86362671 86362704 . . . Name=11279108 chr9 . BED_feature 45687018 45687189 . . . Name=11279108 chr15 . BED_feature 102815627 102815660 . . . Name=9860988 chr6 . BED_feature 122673020 122673057 . . . Name=15743839 chr11 . BED_feature 53460768 53460830 . . . Name=8052653 chr3 . BED_feature 37317766 37317795 . . . Name=7815567 chr5 . BED_feature 104410881 104410914 . . . Name=15292199 chr1 . BED_feature 72808170 72808198 . . . Name=11978764 chr5 . BED_feature 91525401 91525436 . . . Name=8455618 chr8 . BED_feature 97068303 97068335 . . . Name=3371659 chr14 . BED_feature 53032878 53033063 . . . Name=8417120 chr19 . BED_feature 39339060 39339105 . . . Name=15155833 chr11 . BED_feature 100150362 100150496 . . . Name=15292219 chr12 . BED_feature 113875210 113875262 . . . Name=2143023 chr8 . BED_feature 77980069 77980098 . . . Name=10821856 chr7 . BED_feature 34758870 34759579 . . . Name=1709121 chr7 . BED_feature 34765226 34765304 . . . Name=1709121 chr11 . BED_feature 98517241 98517282 . . . Name=1709121 chr11 . BED_feature 117785320 117785367 . . . Name=10821852 chr12 . BED_feature 8797293 8797321 . . . Name=8647862 chr2 . BED_feature 26022961 26023284 . . . Name=7708713 chr2 . BED_feature 26024983 26025025 . . . Name=7708713 chr17 . BED_feature 56913369 56913420 . . . Name=1590761 chr18 . BED_feature 5705042 5705226 . . . Name=7935395 chr18 . BED_feature 5748703 5748854 . . . Name=7935395 chr18 . BED_feature 5766262 5768013 . . . Name=7935395 chr18 . BED_feature 5770385 5770456 . . . Name=7935395 chr18 . BED_feature 5772922 5774892 . . . Name=7935395 chr18 . BED_feature 82688765 82688797 . . . Name=1379237 chr12 . BED_feature 113725301 113725411 . . . Name=1922063 chr17 . BED_feature 33897272 33897383 . . . Name=1922063 chr6 . BED_feature 70655312 70655364 . . . Name=1922063 chr10 . BED_feature 75304094 75304140 . . . Name=12083786 chr6 . BED_feature 103929893 103930362 . . . Name=1967980 chr4 . BED_feature 124160871 124160929 . . . Name=1967980 chr3 . BED_feature 3814641 3815822 . . . Name=1967980 chr3 . BED_feature 129425689 129426847 . . . Name=1967980 chr2 . BED_feature 18070879 18070935 . . . Name=1967980 chr1 . BED_feature 42642751 42642809 . . . Name=1967980 chr1 . BED_feature 161130491 161130863 . . . Name=1967980 chr1 . BED_feature 167734341 167734399 . . . Name=1967980 chr9 . BED_feature 45912367 45912537 . . . Name=1967980 chrX . BED_feature 49123968 49124378 . . . Name=1967980 chrX . BED_feature 138022311 138022583 . . . Name=1967980 chr13 . BED_feature 78488860 78489006 . . . Name=1967980 chr17 . BED_feature 35114104 35114536 . . . Name=1967980 chr17 . BED_feature 35117154 35118822 . . . Name=1967980 chr14 . BED_feature 15898869 15899489 . . . Name=1967980 chr5 . BED_feature 93424230 93424259 . . . Name=9169460 chr5 . BED_feature 143171911 143171940 . . . Name=1425594 chr1 . BED_feature 72808043 72808222 . . . Name=7476973 chr11 . BED_feature 98517241 98517364 . . . Name=1691438 chr17 . BED_feature 33897321 33897361 . . . Name=1691438 chr8 . BED_feature 97068090 97068120 . . . Name=9854025 chr11 . BED_feature 106118006 106118034 . . . Name=3561414 chr19 . BED_feature 45794030 45794485 . . . Name=10026229 chr19 . BED_feature 10045618 10045708 . . . Name=8051121 chr16 . BED_feature 42260015 42260042 . . . Name=8703010 chr12 . BED_feature 3954579 3954608 . . . Name=7902581 chr3 . BED_feature 37317569 37317597 . . . Name=7902581 chr16 . BED_feature 23806225 23806252 . . . Name=1824920 chr8 . BED_feature 87866700 87866741 . . . Name=8265655 chr8 . BED_feature 87868842 87868887 . . . Name=8265655 chr2 . BED_feature 11559185 11559294 . . . Name=10082534 chr10 . BED_feature 20847629 20848108 . . . Name=8683983 chr3 . BED_feature 80999456 80999483 . . . Name=11256962 chr4 . BED_feature 62830853 62830882 . . . Name=8417341 chr4 . BED_feature 4066007 4066034 . . . Name=1827203 chr9 . BED_feature 57494750 57494781 . . . Name=2160969 chr7 . BED_feature 144670750 144670781 . . . Name=10669750 chr2 . BED_feature 129062604 129062632 . . . Name=1630455 chr5 . BED_feature 93424174 93424204 . . . Name=7730628 chr18 . BED_feature 34989185 34989285 . . . Name=2496302 chr6 . BED_feature 85477485 85477552 . . . Name=2496302 chr10 . BED_feature 66931539 66933967 . . . Name=2496302 chr10 . BED_feature 66935019 66936588 . . . Name=2496302 chr14 . BED_feature 68814683 68814794 . . . Name=2496302 chr7 . BED_feature 100366078 100366121 . . . Name=10333481 chr7 . BED_feature 100367251 100367300 . . . Name=10333481 chr7 . BED_feature 87369183 87369306 . . . Name=10707962 chr12 . BED_feature 113875196 113875343 . . . Name=3019664 chr8 . BED_feature 26983470 26984665 . . . Name=1312839 chr8 . BED_feature 3694205 3694256 . . . Name=8977198 chr8 . BED_feature 73627361 73627975 . . . Name=1714380 chr10 . BED_feature 82179843 82180616 . . . Name=1698608 chr10 . BED_feature 82182230 82182364 . . . Name=1698608 chr10 . BED_feature 82184842 82184895 . . . Name=1698608 chr10 . BED_feature 82186501 82186594 . . . Name=1698608 chr10 . BED_feature 82191632 82191714 . . . Name=1698608 chr10 . BED_feature 82193800 82193936 . . . Name=1698608 chr17 . BED_feature 47853529 47854911 . . . Name=1698608 chr17 . BED_feature 47856871 47859122 . . . Name=1698608 chr17 . BED_feature 47866012 47866148 . . . Name=1698608 chr17 . BED_feature 47875192 47875254 . . . Name=1698608 chr18 . BED_feature 82688932 82688970 . . . Name=1698607 chr12 . BED_feature 77323392 77323422 . . . Name=14766014 chr15 . BED_feature 88848027 88848126 . . . Name=12754203 chr11 . BED_feature 96133655 96134849 . . . Name=7969151 chr2 . BED_feature 26738276 26738484 . . . Name=1996091 chr12 . BED_feature 86362675 86362704 . . . Name=2493627 chr6 . BED_feature 4455388 4455417 . . . Name=2019574 chr11 . BED_feature 94751575 94752273 . . . Name=2019574 chr5 . BED_feature 89839309 89839533 . . . Name=15548386 chr8 . BED_feature 97068208 97068238 . . . Name=10096565 chr8 . BED_feature 83388452 83389772 . . . Name=8690723 chr8 . BED_feature 89614669 89614698 . . . Name=14985507 chr15 . BED_feature 38519949 38519977 . . . Name=14985507 chrX . BED_feature 159414902 159414931 . . . Name=14985507 chrX . BED_feature 159418072 159418353 . . . Name=14985507 chr8 . BED_feature 77985763 77985790 . . . Name=7929191 chr1 . BED_feature 66868621 66868649 . . . Name=7721942 chr8 . BED_feature 107736166 107736201 . . . Name=16527247 chr14 . BED_feature 53185363 53185593 . . . Name=2524381 chr11 . BED_feature 44456143 44456435 . . . Name=12077253 chr16 . BED_feature 16777811 16777842 . . . Name=12077253 chr8 . BED_feature 87792032 87792079 . . . Name=7682653 chr8 . BED_feature 87795041 87795392 . . . Name=7682653 chr11 . BED_feature 69406866 69406896 . . . Name=11919084 chr12 . BED_feature 14520678 14520705 . . . Name=15589317 chr10 . BED_feature 94842341 94842368 . . . Name=15589317 chr15 . BED_feature 74813844 74813871 . . . Name=15589317 chr11 . BED_feature 78315408 78315439 . . . Name=11997100 chr1 . BED_feature 133107822 133107866 . . . Name=15939554 chr8 . BED_feature 27273864 27273894 . . . Name=16109738 chr12 . BED_feature 114935222 114935265 . . . Name=7499271 chr12 . BED_feature 114981057 114981115 . . . Name=7499271 chr12 . BED_feature 114986581 114986620 . . . Name=7499271 chr12 . BED_feature 115031655 115031718 . . . Name=7499271 chr12 . BED_feature 115094658 115094721 . . . Name=7499271 chr12 . BED_feature 115113958 115114011 . . . Name=7499271 chr12 . BED_feature 115124834 115124892 . . . Name=7499271 chr12 . BED_feature 115156736 115156789 . . . Name=7499271 chr12 . BED_feature 115184333 115184386 . . . Name=7499271 chr12 . BED_feature 115411467 115411555 . . . Name=7499271 chr12 . BED_feature 115439194 115439249 . . . Name=7499271 chr12 . BED_feature 115567834 115567914 . . . Name=7499271 chr12 . BED_feature 115579469 115579522 . . . Name=7499271 chr12 . BED_feature 115593573 115593661 . . . Name=7499271 chr12 . BED_feature 115606489 115606578 . . . Name=7499271 chr12 . BED_feature 115641761 115641804 . . . Name=7499271 chr12 . BED_feature 115656181 115656270 . . . Name=7499271 chr12 . BED_feature 115783168 115783248 . . . Name=7499271 chr12 . BED_feature 115792631 115792684 . . . Name=7499271 chr12 . BED_feature 115807226 115807314 . . . Name=7499271 chr12 . BED_feature 115820071 115820159 . . . Name=7499271 chr12 . BED_feature 115834781 115834842 . . . Name=7499271 chr12 . BED_feature 115894503 115894564 . . . Name=7499271 chr12 . BED_feature 115909085 115909173 . . . Name=7499271 chr12 . BED_feature 115943711 115943774 . . . Name=7499271 chr12 . BED_feature 115955631 115955720 . . . Name=7499271 chr12 . BED_feature 116041196 116041259 . . . Name=7499271 chr12 . BED_feature 116052026 116052089 . . . Name=7499271 chr12 . BED_feature 116071247 116071312 . . . Name=7499271 chr12 . BED_feature 116139975 116140036 . . . Name=7499271 chr12 . BED_feature 116190299 116190360 . . . Name=7499271 chr12 . BED_feature 116206070 116206159 . . . Name=7499271 chr12 . BED_feature 116238680 116238743 . . . Name=7499271 chr12 . BED_feature 116250734 116250823 . . . Name=7499271 chr12 . BED_feature 116295975 116296030 . . . Name=7499271 chr12 . BED_feature 116309961 116310014 . . . Name=7499271 chr12 . BED_feature 116336183 116336245 . . . Name=7499271 chr12 . BED_feature 116360430 116360493 . . . Name=7499271 chr12 . BED_feature 116368365 116368428 . . . Name=7499271 chr12 . BED_feature 116400624 116400687 . . . Name=7499271 chr12 . BED_feature 116448114 116448167 . . . Name=7499271 chr12 . BED_feature 116457747 116457835 . . . Name=7499271 chrX . BED_feature 6930810 6930883 . . . Name=1732746 chr1 . BED_feature 77405309 77405349 . . . Name=9425139 chr2 . BED_feature 104927481 104927514 . . . Name=9572484 chr12 . BED_feature 104139350 104139711 . . . Name=2835657 chr12 . BED_feature 104174784 104175144 . . . Name=2835657 chr12 . BED_feature 104229224 104229583 . . . Name=2835657 chr12 . BED_feature 104264775 104265134 . . . Name=2835657 chr12 . BED_feature 104306112 104306471 . . . Name=2835657 chr12 . BED_feature 104358110 104358469 . . . Name=2835657 chr9 . BED_feature 109977128 109977179 . . . Name=16288722 chr11 . BED_feature 117784320 117784347 . . . Name=16055089 chr7 . BED_feature 119936638 119936667 . . . Name=1944285 chr7 . BED_feature 26015816 26015923 . . . Name=15115437 chr7 . BED_feature 26543962 26544069 . . . Name=15115437 chr6 . BED_feature 52134628 52134846 . . . Name=10075847 chr11 . BED_feature 53462120 53462152 . . . Name=8674125 chr12 . BED_feature 86362655 86362945 . . . Name=8547224 chr7 . BED_feature 18568361 18568567 . . . Name=8474439 chr12 . BED_feature 86362675 86362703 . . . Name=1508214 chr3 . BED_feature 37317571 37317599 . . . Name=8920856 chr3 . BED_feature 37317768 37317796 . . . Name=1740667 chr18 . BED_feature 20808311 20808338 . . . Name=9278450 chr5 . BED_feature 30404404 30404433 . . . Name=2041767 chr8 . BED_feature 95715470 95715515 . . . Name=9278454 chrX . BED_feature 145890538 145890592 . . . Name=17038566 chr13 . BED_feature 15805219 15805248 . . . Name=9645703 chr13 . BED_feature 15808168 15808197 . . . Name=9645703 chr3 . BED_feature 88459031 88459063 . . . Name=12551949 chr3 . BED_feature 88464737 88464769 . . . Name=12551949 chr3 . BED_feature 88470502 88470534 . . . Name=12551949 chr17 . BED_feature 16374738 16374767 . . . Name=10488087 chr2 . BED_feature 162764103 162764132 . . . Name=10488087 chr17 . BED_feature 31406532 31406588 . . . Name=3170605 chr15 . BED_feature 102814723 102814982 . . . Name=8575334 chr11 . BED_feature 4139835 4140014 . . . Name=8605875 chr16 . BED_feature 87588034 87588301 . . . Name=11530014 chr10 . BED_feature 106896029 106896057 . . . Name=11782449 chr17 . BED_feature 39672036 39672210 . . . Name=8441629 chr10 . BED_feature 80208261 80208289 . . . Name=10913126 chr9 . BED_feature 57813048 57813102 . . . Name=10913126 chr5 . BED_feature 88773940 88774182 . . . Name=8065333 chr15 . BED_feature 85562972 85563000 . . . Name=12554753 chr2 . BED_feature 91732738 91734451 . . . Name=7982887 chr11 . BED_feature 60026655 60026701 . . . Name=10918064 chr2 . BED_feature 105483209 105483268 . . . Name=7529875 chr14 . BED_feature 62371255 62371322 . . . Name=10553071 chr1 . BED_feature 182533905 182533975 . . . Name=15982639 chr4 . BED_feature 134425013 134425135 . . . Name=8164679 chr17 . BED_feature 44180252 44180353 . . . Name=8164679 chr17 . BED_feature 44198286 44198415 . . . Name=8164679 chr16 . BED_feature 92492847 92494983 . . . Name=8164679 chr16 . BED_feature 92502458 92502618 . . . Name=8164679 chr16 . BED_feature 92533013 92533204 . . . Name=8164679 chr16 . BED_feature 92557569 92557673 . . . Name=8164679 chr16 . BED_feature 92577834 92577993 . . . Name=8164679 chr16 . BED_feature 92584341 92586187 . . . Name=8164679 chr8 . BED_feature 4349462 4349655 . . . Name=16517733 chr8 . BED_feature 74508958 74508987 . . . Name=9353271 chr9 . BED_feature 110861573 110864453 . . . Name=1939212 chr13 . BED_feature 30756678 30756725 . . . Name=7541907 chr16 . BED_feature 23806222 23806253 . . . Name=9671480 chr11 . BED_feature 32183544 32183592 . . . Name=9144493 chr11 . BED_feature 32196361 32196409 . . . Name=9144493 chr17 . BED_feature 34871048 34871100 . . . Name=9144493 chr8 . BED_feature 3622334 3626083 . . . Name=2065970 chr6 . BED_feature 70655324 70655353 . . . Name=1598211 chr17 . BED_feature 34871063 34871092 . . . Name=1598211 chr17 . BED_feature 26566989 26567223 . . . Name=7586217 chr18 . BED_feature 34987528 34987557 . . . Name=8737376 chr6 . BED_feature 132024025 132024248 . . . Name=1747160 chr6 . BED_feature 132083312 132083546 . . . Name=1747160 chr6 . BED_feature 132176166 132176400 . . . Name=1747160 chr6 . BED_feature 132280379 132280602 . . . Name=1747160 chr6 . BED_feature 132329757 132329991 . . . Name=1747160 chr6 . BED_feature 132407374 132407597 . . . Name=1747160 chr6 . BED_feature 133257935 133257987 . . . Name=1747160 chr6 . BED_feature 133494908 133494960 . . . Name=1747160 chr12 . BED_feature 105964106 105964142 . . . Name=15805112 chr4 . BED_feature 122502565 122502605 . . . Name=10655054 chr3 . BED_feature 89222380 89222424 . . . Name=9234678 chr18 . BED_feature 60929072 60929106 . . . Name=2115119 chr8 . BED_feature 24223213 24223318 . . . Name=2172788 chr11 . BED_feature 94936098 94936174 . . . Name=14670999 chr4 . BED_feature 144513604 144513631 . . . Name=9190933 chr13 . BED_feature 93455947 93455976 . . . Name=9121444 chr2 . BED_feature 90897636 90897832 . . . Name=1985210 chr2 . BED_feature 90900269 90900344 . . . Name=1985210 chr2 . BED_feature 90914131 90916592 . . . Name=1985210 chr8 . BED_feature 27273934 27273962 . . . Name=9832418 chr17 . BED_feature 24360203 24360244 . . . Name=10891372 chr7 . BED_feature 78926829 78926857 . . . Name=9368062 chr17 . BED_feature 33896555 33896590 . . . Name=7722306 chr6 . BED_feature 145033119 145033148 . . . Name=1340466 chr16 . BED_feature 15801216 15801865 . . . Name=1840554 chr2 . BED_feature 167381024 167381533 . . . Name=1840554 chr6 . BED_feature 115387318 115387351 . . . Name=10862621 chr2 . BED_feature 167380226 167380831 . . . Name=10862621 chr13 . BED_feature 63575640 63575677 . . . Name=15087129 chr7 . BED_feature 41898797 41898824 . . . Name=12890683 chr7 . BED_feature 51615248 51615275 . . . Name=12890683 chr7 . BED_feature 89483419 89483446 . . . Name=12890683 chr7 . BED_feature 100635334 100635361 . . . Name=12890683 chr6 . BED_feature 22653948 22653975 . . . Name=12890683 chr6 . BED_feature 83840479 83840506 . . . Name=12890683 chr6 . BED_feature 84778436 84778463 . . . Name=12890683 chr6 . BED_feature 91394919 91394946 . . . Name=12890683 chr6 . BED_feature 125128287 125128314 . . . Name=12890683 chr6 . BED_feature 128168293 128168320 . . . Name=12890683 chr5 . BED_feature 13048881 13048908 . . . Name=12890683 chr5 . BED_feature 28869889 28869916 . . . Name=12890683 chr5 . BED_feature 96102548 96102575 . . . Name=12890683 chr5 . BED_feature 106103445 106103472 . . . Name=12890683 chr4 . BED_feature 57465449 57465476 . . . Name=12890683 chr4 . BED_feature 83576664 83576691 . . . Name=12890683 chr4 . BED_feature 91344128 91344155 . . . Name=12890683 chr3 . BED_feature 52701296 52701323 . . . Name=12890683 chr3 . BED_feature 61550231 61550258 . . . Name=12890683 chr3 . BED_feature 69654805 69654832 . . . Name=12890683 chr3 . BED_feature 79003717 79003744 . . . Name=12890683 chr3 . BED_feature 122222659 122222686 . . . Name=12890683 chr3 . BED_feature 139587298 139587325 . . . Name=12890683 chr3 . BED_feature 142900529 142900556 . . . Name=12890683 chr2 . BED_feature 28756059 28756086 . . . Name=12890683 chr2 . BED_feature 43340848 43340875 . . . Name=12890683 chr2 . BED_feature 104092945 104092972 . . . Name=12890683 chr2 . BED_feature 128249131 128249158 . . . Name=12890683 chr2 . BED_feature 149435148 149435175 . . . Name=12890683 chr2 . BED_feature 151066019 151066046 . . . Name=12890683 chr1 . BED_feature 13771539 13771566 . . . Name=12890683 chr1 . BED_feature 15254455 15254482 . . . Name=12890683 chr1 . BED_feature 152899146 152899173 . . . Name=12890683 chr1 . BED_feature 182164288 182164315 . . . Name=12890683 chr18 . BED_feature 54110228 54110255 . . . Name=12890683 chr9 . BED_feature 49938710 49938737 . . . Name=12890683 chr9 . BED_feature 75480004 75480031 . . . Name=12890683 chr8 . BED_feature 37841586 37841613 . . . Name=12890683 chr8 . BED_feature 60442976 60443003 . . . Name=12890683 chr8 . BED_feature 78302032 78302059 . . . Name=12890683 chr8 . BED_feature 95605497 95605524 . . . Name=12890683 chr13 . BED_feature 11994119 11994146 . . . Name=12890683 chr13 . BED_feature 17606626 17606653 . . . Name=12890683 chr12 . BED_feature 70839519 70839546 . . . Name=12890683 chr12 . BED_feature 72765316 72765343 . . . Name=12890683 chr11 . BED_feature 3852263 3852290 . . . Name=12890683 chr11 . BED_feature 17874237 17874264 . . . Name=12890683 chr11 . BED_feature 20235457 20235484 . . . Name=12890683 chr11 . BED_feature 26687165 26687192 . . . Name=12890683 chr11 . BED_feature 99494754 99494781 . . . Name=12890683 chr10 . BED_feature 13581286 13581313 . . . Name=12890683 chr10 . BED_feature 22481288 22481315 . . . Name=12890683 chr10 . BED_feature 33498352 33498379 . . . Name=12890683 chr10 . BED_feature 39701820 39701847 . . . Name=12890683 chr10 . BED_feature 118296365 118296392 . . . Name=12890683 chr10 . BED_feature 121572954 121572981 . . . Name=12890683 chr17 . BED_feature 61466688 61466715 . . . Name=12890683 chr15 . BED_feature 12520146 12520173 . . . Name=12890683 chr15 . BED_feature 93025309 93025336 . . . Name=12890683 chr14 . BED_feature 10074625 10074652 . . . Name=12890683 chr14 . BED_feature 47331109 47331136 . . . Name=12890683 chr19 . BED_feature 25863349 25863376 . . . Name=12890683 chrX . BED_feature 12483421 12483448 . . . Name=12890683 chrX . BED_feature 76447012 76447039 . . . Name=12890683 chrX . BED_feature 137121069 137121096 . . . Name=12890683 chrX . BED_feature 147286615 147286642 . . . Name=12890683 chr7 . BED_feature 18568428 18568476 . . . Name=7673178 chr15 . BED_feature 75583533 75583563 . . . Name=16847327 chr12 . BED_feature 113675504 113675532 . . . Name=14583460 chr12 . BED_feature 113676861 113676889 . . . Name=14583460 chr19 . BED_feature 5492747 5492800 . . . Name=3198687 chr1 . BED_feature 89020344 89021805 . . . Name=3198687 chr8 . BED_feature 43745981 43746034 . . . Name=3198687 chr3 . BED_feature 20300211 20301022 . . . Name=8923460 chrX . BED_feature 118218832 118219048 . . . Name=8923460 chr7 . BED_feature 18568517 18568562 . . . Name=8321243 chr16 . BED_feature 38172278 38173137 . . . Name=9489701 chr16 . BED_feature 38185265 38185310 . . . Name=9489701 chr17 . BED_feature 34810548 34810577 . . . Name=9281604 chr12 . BED_feature 86362672 86362700 . . . Name=3071491 chr7 . BED_feature 18461603 18465370 . . . Name=1741260 chr7 . BED_feature 18466540 18469320 . . . Name=1741260 chr16 . BED_feature 32350557 32350657 . . . Name=10744779 chr8 . BED_feature 27273944 27273974 . . . Name=12790807 chr18 . BED_feature 34986768 34986829 . . . Name=10829028 chr8 . BED_feature 97068174 97068435 . . . Name=6095286 chr12 . BED_feature 86362673 86362702 . . . Name=2557547 chr12 . BED_feature 113093402 113093434 . . . Name=15105421 chr9 . BED_feature 20703220 20703262 . . . Name=12799438 chr3 . BED_feature 37317566 37317601 . . . Name=12896977 chr17 . BED_feature 31406584 31406614 . . . Name=8876643 chr11 . BED_feature 81849374 81849433 . . . Name=8630731 chr11 . BED_feature 81851531 81851898 . . . Name=8630731 chr4 . BED_feature 35082683 35082711 . . . Name=1379672 chr18 . BED_feature 43862651 43862930 . . . Name=3399394 chr19 . BED_feature 44460946 44460975 . . . Name=9689914 chr11 . BED_feature 94892869 94893018 . . . Name=16475024 chr5 . BED_feature 91525396 91525436 . . . Name=2371282 chr5 . BED_feature 91535956 91535987 . . . Name=2371282 chr7 . BED_feature 18568473 18568552 . . . Name=2814500 chr3 . BED_feature 159534199 159534229 . . . Name=15900016 chr4 . BED_feature 41236705 41236739 . . . Name=11679588 chr12 . BED_feature 105964110 105964139 . . . Name=10748162 chr11 . BED_feature 96181621 96181650 . . . Name=7600572 chr12 . BED_feature 113676250 113676300 . . . Name=10931834 chr5 . BED_feature 88774020 88774051 . . . Name=12151092 chr17 . BED_feature 33871428 33871472 . . . Name=1986250 chr5 . BED_feature 142653990 142654515 . . . Name=8007964 chr5 . BED_feature 142687615 142687800 . . . Name=8007964 chr5 . BED_feature 142701159 142701318 . . . Name=8007964 chr5 . BED_feature 142702713 142702861 . . . Name=8007964 chr5 . BED_feature 142703910 142704069 . . . Name=8007964 chr5 . BED_feature 142705988 142706514 . . . Name=8007964 chr5 . BED_feature 142707824 142709438 . . . Name=8007964 chr11 . BED_feature 121076365 121076591 . . . Name=8007964 chr11 . BED_feature 121112131 121112225 . . . Name=8007964 chr11 . BED_feature 32183601 32183676 . . . Name=2233727 chr11 . BED_feature 32196418 32196493 . . . Name=2233727 chr10 . BED_feature 79293962 79293990 . . . Name=12949072 chr17 . BED_feature 6012318 6012892 . . . Name=2554307 chr17 . BED_feature 33643284 33644637 . . . Name=2554307 chr17 . BED_feature 33646107 33648848 . . . Name=2554307 chr2 . BED_feature 27563770 27563934 . . . Name=2554307 chr2 . BED_feature 27578207 27578276 . . . Name=2554307 chr2 . BED_feature 27581549 27581678 . . . Name=2554307 chr2 . BED_feature 56926046 56926100 . . . Name=2554307 chr1 . BED_feature 169463964 169464125 . . . Name=2554307 chr1 . BED_feature 169475800 169475921 . . . Name=2554307 chr1 . BED_feature 75243575 75244102 . . . Name=8120103 chr1 . BED_feature 75245462 75246840 . . . Name=8120103 chr8 . BED_feature 27273960 27274009 . . . Name=12239105 chr6 . BED_feature 55381696 55381725 . . . Name=12031496 chr6 . BED_feature 70655319 70655350 . . . Name=2542770 chr2 . BED_feature 38532665 38532706 . . . Name=10684809 chr2 . BED_feature 38536571 38536607 . . . Name=10684809 chr5 . BED_feature 91525396 91525435 . . . Name=7520913 chr5 . BED_feature 91559418 91559470 . . . Name=7520913 chr1 . BED_feature 77985886 77986724 . . . Name=2022185 chr1 . BED_feature 78004723 78005858 . . . Name=2022185 chr1 . BED_feature 78015512 78015563 . . . Name=2022185 chr1 . BED_feature 78075619 78075680 . . . Name=2022185 chr1 . BED_feature 78079924 78080193 . . . Name=2022185 chr4 . BED_feature 63231534 63231725 . . . Name=15702971 chr2 . BED_feature 131944600 131944719 . . . Name=8557653 chr8 . BED_feature 87866607 87866694 . . . Name=11904151 chr8 . BED_feature 86177899 86177931 . . . Name=8668156 chr5 . BED_feature 8803881 8803912 . . . Name=9019155 chr4 . BED_feature 94544511 94544564 . . . Name=1542579 chr6 . BED_feature 4455530 4455626 . . . Name=2043139 chr11 . BED_feature 94752151 94752179 . . . Name=2043139 chr5 . BED_feature 148037298 148037332 . . . Name=15192019 chr4 . BED_feature 124304903 124304947 . . . Name=8467794 chr4 . BED_feature 124306962 124307422 . . . Name=8467794 chr4 . BED_feature 124322518 124323663 . . . Name=8467794 chr4 . BED_feature 124326590 124327487 . . . Name=8467794 chr4 . BED_feature 124333421 124333500 . . . Name=8467794 chr4 . BED_feature 124340001 124341221 . . . Name=8467794 chr4 . BED_feature 124344832 124344896 . . . Name=8467794 chr4 . BED_feature 124346446 124347053 . . . Name=8467794 chr17 . BED_feature 33610799 33610831 . . . Name=9344877 chr12 . BED_feature 58461348 58461377 . . . Name=11297512 chr2 . BED_feature 9775727 9776222 . . . Name=2017177 chr2 . BED_feature 9795442 9795542 . . . Name=2017177 chr6 . BED_feature 132083389 132083423 . . . Name=10506207 chr6 . BED_feature 132329830 132329868 . . . Name=10506207 chr12 . BED_feature 74028105 74028132 . . . Name=8628654 chr12 . BED_feature 74032219 74032246 . . . Name=8628654 chr6 . BED_feature 70655322 70655351 . . . Name=2536725 chr2 . BED_feature 154261287 154261338 . . . Name=9218478 chr4 . BED_feature 146844272 146844309 . . . Name=10903346 chr4 . BED_feature 35082316 35082343 . . . Name=7513049 chr17 . BED_feature 33896149 33896263 . . . Name=2105455 chr3 . BED_feature 152169790 152170157 . . . Name=8125259 chr2 . BED_feature 130801039 130801228 . . . Name=8125259 chr7 . BED_feature 46713836 46713863 . . . Name=7998973 chr11 . BED_feature 54093097 54093125 . . . Name=1944268 chr11 . BED_feature 98517361 98517391 . . . Name=1944268 chr5 . BED_feature 104539336 104539412 . . . Name=10788516 chr6 . BED_feature 92210238 92210394 . . . Name=9421415 chr19 . BED_feature 8779923 8780386 . . . Name=2761540 chr9 . BED_feature 78015621 78015661 . . . Name=11708801 chr9 . BED_feature 78042097 78042137 . . . Name=11708801 chr9 . BED_feature 78074895 78074935 . . . Name=11708801 chr9 . BED_feature 78133951 78133991 . . . Name=11708801 chr7 . BED_feature 34827855 34827883 . . . Name=7862113 chr16 . BED_feature 15800734 15800808 . . . Name=10867011 chr16 . BED_feature 4039922 4039963 . . . Name=9492053 chr16 . BED_feature 4043854 4043886 . . . Name=9492053 chr18 . BED_feature 34987317 34987459 . . . Name=3141919 chr18 . BED_feature 34989743 34990942 . . . Name=3141919 chrX . BED_feature 107018249 107018296 . . . Name=8876240 chr12 . BED_feature 86362675 86362703 . . . Name=1658630 chr6 . BED_feature 4455158 4455412 . . . Name=9143363 chr2 . BED_feature 28444015 28444043 . . . Name=15718298 chr11 . BED_feature 120640142 120640174 . . . Name=9164847 chr11 . BED_feature 120640252 120640290 . . . Name=10207099 chr12 . BED_feature 86362667 86362711 . . . Name=2504586 chr12 . BED_feature 115955871 115955901 . . . Name=2826127 chr12 . BED_feature 116250974 116251004 . . . Name=2826127 chr19 . BED_feature 41082389 41082741 . . . Name=1922043 chr16 . BED_feature 16777514 16777740 . . . Name=1922043 chr16 . BED_feature 16782847 16782880 . . . Name=1922043 chr16 . BED_feature 17893922 17893955 . . . Name=1922043 chr11 . BED_feature 4848071 4848108 . . . Name=8621737 chrX . BED_feature 7124906 7125430 . . . Name=2044960 chr19 . BED_feature 34358329 34358380 . . . Name=10660538 chr5 . BED_feature 38112881 38113050 . . . Name=9278425 chr5 . BED_feature 30404331 30404483 . . . Name=2779579 chr10 . BED_feature 87396586 87396649 . . . Name=2779579 chr10 . BED_feature 119879323 119879355 . . . Name=10558886 chr5 . BED_feature 150790873 150790995 . . . Name=14680822 chr16 . BED_feature 33415500 33415540 . . . Name=10359087 chr8 . BED_feature 40781887 40781927 . . . Name=10359087 chr2 . BED_feature 109476880 109476932 . . . Name=9873054 chr17 . BED_feature 34870979 34871011 . . . Name=8468472 chr2 . BED_feature 164134295 164134877 . . . Name=9276666 chr2 . BED_feature 155208950 155209172 . . . Name=11435428 chr6 . BED_feature 70655322 70655362 . . . Name=3141781 chr17 . BED_feature 33955282 33955665 . . . Name=3141781 chr5 . BED_feature 30343801 30343834 . . . Name=12027462 chr5 . BED_feature 93403444 93403474 . . . Name=7561042 chr11 . BED_feature 78736111 78736146 . . . Name=12225970 chr11 . BED_feature 60593722 60593756 . . . Name=11327713 chr4 . BED_feature 80305183 80305455 . . . Name=10480898 chr2 . BED_feature 38536498 38536614 . . . Name=12390883 chr7 . BED_feature 141130601 141130635 . . . Name=12482979 chr17 . BED_feature 31406474 31406643 . . . Name=2584197 chrX . BED_feature 134431613 134431645 . . . Name=7988464 chr6 . BED_feature 52086645 52086674 . . . Name=7623795 chr2 . BED_feature 74526282 74526312 . . . Name=7623795 chr1 . BED_feature 4481331 4481746 . . . Name=8636240 chr1 . BED_feature 4483853 4483924 . . . Name=8636240 chr1 . BED_feature 4486478 4486838 . . . Name=8636240 chr6 . BED_feature 42910192 42910222 . . . Name=3131743 chr6 . BED_feature 67825650 67825684 . . . Name=3131743 chr6 . BED_feature 68185877 68185913 . . . Name=3131743 chr16 . BED_feature 3493052 3493082 . . . Name=3131743 chr5 . BED_feature 115232112 115232141 . . . Name=10760574 chrX . BED_feature 97579347 97579925 . . . Name=10760574 chr7 . BED_feature 46535462 46535502 . . . Name=7552299 chr1 . BED_feature 36636088 36636117 . . . Name=8383622 chr17 . BED_feature 33913427 33913513 . . . Name=8290364 chr6 . BED_feature 70144947 70144979 . . . Name=11254715 chr6 . BED_feature 70190542 70190577 . . . Name=11254715 chr6 . BED_feature 70300983 70301015 . . . Name=11254715 chr6 . BED_feature 70336601 70336636 . . . Name=11254715 chr6 . BED_feature 70365086 70365120 . . . Name=11254715 chr6 . BED_feature 70387633 70387668 . . . Name=11254715 chrX . BED_feature 53558788 53558827 . . . Name=11254715 chr12 . BED_feature 86362814 86362848 . . . Name=8552086 chr12 . BED_feature 86362674 86362702 . . . Name=2110508 chr17 . BED_feature 33610879 33610910 . . . Name=3322806 chr17 . BED_feature 34870978 34871009 . . . Name=3322806 chr6 . BED_feature 70448422 70448458 . . . Name=2109186 chr6 . BED_feature 70484009 70484045 . . . Name=2109186 chr6 . BED_feature 70502798 70502848 . . . Name=2109186 chr6 . BED_feature 70537609 70537645 . . . Name=2109186 chr6 . BED_feature 70573134 70573170 . . . Name=2109186 chr6 . BED_feature 70593463 70593513 . . . Name=2109186 chr6 . BED_feature 70601945 70601986 . . . Name=2109186 chr6 . BED_feature 70617102 70617143 . . . Name=2109186 chr6 . BED_feature 70628636 70628676 . . . Name=2109186 chr6 . BED_feature 70633747 70633786 . . . Name=2109186 chr6 . BED_feature 70648481 70648955 . . . Name=2109186 chr6 . BED_feature 70656040 70656317 . . . Name=2109186 chr8 . BED_feature 123621641 123622385 . . . Name=8321202 chr9 . BED_feature 110614454 110614482 . . . Name=2211821 chr11 . BED_feature 67124723 67124828 . . . Name=2211821 chr11 . BED_feature 104403210 104403305 . . . Name=2211821 chr2 . BED_feature 113744202 113744247 . . . Name=2211821 chr1 . BED_feature 66878147 66878195 . . . Name=2211821 chr14 . BED_feature 53898487 53898586 . . . Name=2211821 chr14 . BED_feature 53926897 53926996 . . . Name=2211821 chr7 . BED_feature 18568522 18568552 . . . Name=2601707 chr18 . BED_feature 61170454 61170480 . . . Name=11282029 chr2 . BED_feature 9775384 9776029 . . . Name=7629014 chr6 . BED_feature 4455418 4455633 . . . Name=8702912 chr6 . BED_feature 70655484 70655561 . . . Name=2511430 chr9 . BED_feature 65221179 65221381 . . . Name=16357058 chr4 . BED_feature 106933763 106933860 . . . Name=12042312 chr12 . BED_feature 113875345 113875373 . . . Name=2111447 chr11 . BED_feature 21457191 21457445 . . . Name=3172222 chr11 . BED_feature 21471746 21472279 . . . Name=3172222 chr19 . BED_feature 43577767 43577815 . . . Name=3172222 chr3 . BED_feature 14863351 14863383 . . . Name=8463242 chr16 . BED_feature 23806224 23806249 . . . Name=1977662 chr2 . BED_feature 163441533 163441769 . . . Name=8265639 chr5 . BED_feature 137314749 137314782 . . . Name=11755530 chr5 . BED_feature 16065363 16065393 . . . Name=9315634 chr5 . BED_feature 121148159 121148265 . . . Name=2457496 chr5 . BED_feature 121168073 121168261 . . . Name=2457496 chr17 . BED_feature 33610871 33610899 . . . Name=2457496 chr6 . BED_feature 4455529 4455560 . . . Name=10477728 chr7 . BED_feature 126592041 126592074 . . . Name=9395505 chr12 . BED_feature 91806422 91806453 . . . Name=7989366 chr2 . BED_feature 91426322 91426350 . . . Name=9565620 chr2 . BED_feature 91429248 91429276 . . . Name=9565620 chr15 . BED_feature 61814750 61814779 . . . Name=3313385 chr19 . BED_feature 44805744 44805811 . . . Name=11807024 chr19 . BED_feature 44809826 44809960 . . . Name=11807024 chr11 . BED_feature 101367972 101367998 . . . Name=10660629 chr11 . BED_feature 69396533 69396570 . . . Name=8051093 chr4 . BED_feature 80305183 80305213 . . . Name=9710594 chr12 . BED_feature 104874218 104874665 . . . Name=9417125 chr2 . BED_feature 104927783 104928263 . . . Name=1671709 chr2 . BED_feature 104933775 104934343 . . . Name=1671709 chr2 . BED_feature 104943921 104945031 . . . Name=1671709 chr2 . BED_feature 104964164 104964261 . . . Name=1671709 chr2 . BED_feature 104967654 104967727 . . . Name=1671709 chr2 . BED_feature 104973146 104974452 . . . Name=1671709 chr16 . BED_feature 97567923 97567998 . . . Name=2974922 chr16 . BED_feature 97690827 97690879 . . . Name=2974922 chr5 . BED_feature 113875449 113875531 . . . Name=15792532 chr5 . BED_feature 113904662 113904724 . . . Name=15792532 chr7 . BED_feature 46239064 46239781 . . . Name=1328870 chr1 . BED_feature 135178145 135178237 . . . Name=7962542 chr3 . BED_feature 113284918 113284950 . . . Name=1699843 chr1 . BED_feature 196792905 196792939 . . . Name=11023821 chr5 . BED_feature 91560913 91561133 . . . Name=2452972 chr17 . BED_feature 33589431 33589465 . . . Name=2014233 chr17 . BED_feature 33610907 33610942 . . . Name=2014233 chr17 . BED_feature 34870945 34870981 . . . Name=2014233 chr17 . BED_feature 35806755 35806791 . . . Name=2014233 chr5 . BED_feature 51786342 51786388 . . . Name=16825189 chr1 . BED_feature 173050609 173050662 . . . Name=16825189 chr3 . BED_feature 95744115 95744143 . . . Name=10454566 chr9 . BED_feature 21709249 21709315 . . . Name=2162479 chr9 . BED_feature 21713753 21714429 . . . Name=2162479 chr11 . BED_feature 98228304 98228335 . . . Name=1672439 chr12 . BED_feature 86362676 86362706 . . . Name=1645787 chr6 . BED_feature 72234548 72235407 . . . Name=8928820 chr6 . BED_feature 72239289 72239420 . . . Name=8928820 chr6 . BED_feature 70655324 70655353 . . . Name=1630463 chr17 . BED_feature 33610950 33610989 . . . Name=1630463 chr17 . BED_feature 34987444 34987473 . . . Name=1630463 chr11 . BED_feature 72777305 72777372 . . . Name=12119294 chr12 . BED_feature 113875209 113875259 . . . Name=8663022 chr2 . BED_feature 109493203 109493238 . . . Name=9581764 chr18 . BED_feature 34986758 34986789 . . . Name=11566878 chr9 . BED_feature 45687023 45687053 . . . Name=10642500 chr11 . BED_feature 53462120 53462180 . . . Name=10438901 chr9 . BED_feature 86493076 86493107 . . . Name=2738073 chr7 . BED_feature 142489138 142489357 . . . Name=3006925 chr19 . BED_feature 52317502 52317720 . . . Name=3006925 chr10 . BED_feature 59672847 59673011 . . . Name=9582364 chr18 . BED_feature 12647434 12647697 . . . Name=9651314 chr19 . BED_feature 27859700 27859759 . . . Name=2253877 chr17 . BED_feature 56462963 56463119 . . . Name=2253877 chr17 . BED_feature 56465109 56466004 . . . Name=2253877 chr8 . BED_feature 86964018 86964118 . . . Name=2253877 chr8 . BED_feature 86969967 86970077 . . . Name=2253877 chr8 . BED_feature 86977851 86977971 . . . Name=2253877 chr8 . BED_feature 86980215 86981576 . . . Name=2253877 chr8 . BED_feature 86982720 86982979 . . . Name=2253877 chr8 . BED_feature 86984856 86986055 . . . Name=2253877 chr10 . BED_feature 128334593 128334626 . . . Name=14525975 chr2 . BED_feature 181600902 181600934 . . . Name=11353810 chr2 . BED_feature 167380194 167381855 . . . Name=2253878 chr5 . BED_feature 89602413 89602443 . . . Name=9748293 chr2 . BED_feature 130274029 130274059 . . . Name=1339438 chr16 . BED_feature 18940725 18940965 . . . Name=1729607 chr16 . BED_feature 19092846 19093083 . . . Name=1729607 chr11 . BED_feature 52097309 52097387 . . . Name=1827138 chr11 . BED_feature 52099680 52101227 . . . Name=1827138 chr11 . BED_feature 52102276 52102368 . . . Name=1827138 chr11 . BED_feature 52103952 52105048 . . . Name=1827138 chr11 . BED_feature 52125545 52125640 . . . Name=1827138 chr3 . BED_feature 131183844 131183935 . . . Name=1827138 chr3 . BED_feature 131189468 131189547 . . . Name=1827138 chr19 . BED_feature 55972779 55972867 . . . Name=1827138 chr19 . BED_feature 44460894 44460987 . . . Name=2606350 chr3 . BED_feature 10191198 10191235 . . . Name=2606350 chr5 . BED_feature 121148236 121148291 . . . Name=2243086 chr5 . BED_feature 121168150 121168205 . . . Name=2243086 chr14 . BED_feature 15368773 15368800 . . . Name=10692469 chr5 . BED_feature 115216353 115216429 . . . Name=2044952 chr11 . BED_feature 83666966 83667587 . . . Name=2044952 chr11 . BED_feature 83672097 83672298 . . . Name=2044952 chr11 . BED_feature 83677989 83678176 . . . Name=2044952 chr11 . BED_feature 83680136 83680374 . . . Name=2044952 chr11 . BED_feature 83698844 83699008 . . . Name=2044952 chr11 . BED_feature 83705243 83705350 . . . Name=2044952 chr11 . BED_feature 83709578 83709771 . . . Name=2044952 chr11 . BED_feature 83712467 83712535 . . . Name=2044952 chr11 . BED_feature 83721102 83721728 . . . Name=2044952 chr19 . BED_feature 7263833 7264780 . . . Name=2044952 chr19 . BED_feature 37499335 37499918 . . . Name=10101294 chr1 . BED_feature 173254772 173254799 . . . Name=9374551 chr7 . BED_feature 18566397 18566426 . . . Name=10359011 chrX . BED_feature 7124724 7125567 . . . Name=1656391 chr15 . BED_feature 78855143 78855177 . . . Name=8559662 chrX . BED_feature 20027146 20027175 . . . Name=8559663 chr16 . BED_feature 65428101 65428821 . . . Name=8504933 chr10 . BED_feature 20847865 20847892 . . . Name=2236022 chr11 . BED_feature 54093062 54093102 . . . Name=8246960 chr16 . BED_feature 16777744 16777785 . . . Name=10435576 chr9 . BED_feature 57494749 57494781 . . . Name=1852076 chr6 . BED_feature 132534900 132534934 . . . Name=9015393 chr6 . BED_feature 132561002 132561036 . . . Name=9015393 chr6 . BED_feature 122821685 122821919 . . . Name=16116202 chr5 . BED_feature 89530297 89530325 . . . Name=11451945 chr5 . BED_feature 147574434 147574465 . . . Name=14701942 chr17 . BED_feature 31406531 31406560 . . . Name=7823934 chr16 . BED_feature 85692594 85692625 . . . Name=15256533 chr3 . BED_feature 131099626 131100626 . . . Name=1827423 chr3 . BED_feature 131212272 131212484 . . . Name=1827423 chr14 . BED_feature 53185519 53185560 . . . Name=1827423 chr19 . BED_feature 4593966 4593995 . . . Name=15917242 chrX . BED_feature 33695887 33696975 . . . Name=16414020 chrX . BED_feature 33737549 33738601 . . . Name=16414020 chrX . BED_feature 33785402 33786461 . . . Name=16414020 chrX . BED_feature 33819420 33820515 . . . Name=16414020 chrX . BED_feature 33862494 33863610 . . . Name=16414020 chrX . BED_feature 33913450 33914538 . . . Name=16414020 chrX . BED_feature 33957042 33958155 . . . Name=16414020 chr1 . BED_feature 172992091 172992151 . . . Name=9360965 chr12 . BED_feature 113875222 113875251 . . . Name=2555786 chr10 . BED_feature 66933145 66933179 . . . Name=1969796 chr8 . BED_feature 74497416 74497448 . . . Name=9933587 chr9 . BED_feature 45686867 45686898 . . . Name=16224064 chr5 . BED_feature 146184210 146184269 . . . Name=10860926 chr17 . BED_feature 45495932 45495959 . . . Name=11040101 chr9 . BED_feature 32503847 32503882 . . . Name=1409581 chr5 . BED_feature 93424230 93424258 . . . Name=8757327 chr6 . BED_feature 70144910 70144947 . . . Name=9858563 chr6 . BED_feature 70190579 70190612 . . . Name=9858563 chr6 . BED_feature 70300948 70300983 . . . Name=9858563 chr6 . BED_feature 70336638 70336671 . . . Name=9858563 chr6 . BED_feature 70365122 70365154 . . . Name=9858563 chr6 . BED_feature 70387668 70387705 . . . Name=9858563 chr11 . BED_feature 106130694 106130743 . . . Name=9858563 chr11 . BED_feature 120640249 120640290 . . . Name=9786926 chr2 . BED_feature 90897655 90897832 . . . Name=2180582 chr2 . BED_feature 90900269 90900365 . . . Name=2180582 chr2 . BED_feature 90914093 90916595 . . . Name=2180582 chr9 . BED_feature 57494749 57494776 . . . Name=7892203 chr3 . BED_feature 37317762 37317792 . . . Name=8406004 chr12 . BED_feature 114344858 114344899 . . . Name=2507313 chr12 . BED_feature 115568087 115568114 . . . Name=2507313 chr12 . BED_feature 115783418 115783448 . . . Name=2507313 chr12 . BED_feature 115909336 115909363 . . . Name=2507313 chr12 . BED_feature 115955881 115955911 . . . Name=2507313 chr12 . BED_feature 116206321 116206348 . . . Name=2507313 chr12 . BED_feature 116250984 116251014 . . . Name=2507313 chrX . BED_feature 20027147 20027174 . . . Name=8557686 chr10 . BED_feature 57174929 57175016 . . . Name=1717345 chr10 . BED_feature 57184315 57184694 . . . Name=1717345 chr10 . BED_feature 57185911 57186026 . . . Name=1717345 chr10 . BED_feature 57189784 57189817 . . . Name=1717345 chr10 . BED_feature 57191036 57191096 . . . Name=1717345 chr10 . BED_feature 57192997 57194717 . . . Name=1717345 chr10 . BED_feature 57200326 57200865 . . . Name=1717345 chr17 . BED_feature 34567381 34567418 . . . Name=1717345 chr17 . BED_feature 34580299 34580336 . . . Name=1717345 chr15 . BED_feature 76304717 76304894 . . . Name=1717345 chr15 . BED_feature 76323708 76323847 . . . Name=1717345 chr15 . BED_feature 76325251 76325758 . . . Name=1717345 chr15 . BED_feature 76327669 76328171 . . . Name=1717345 chr4 . BED_feature 135145013 135145050 . . . Name=16181749 chr2 . BED_feature 167380291 167380318 . . . Name=9374525 chr5 . BED_feature 91533697 91533726 . . . Name=11825903 chr19 . BED_feature 52317534 52317563 . . . Name=11825903 chr3 . BED_feature 28888379 28888408 . . . Name=11825903 chr2 . BED_feature 62284566 62284595 . . . Name=11825903 chr3 . BED_feature 159533954 159534406 . . . Name=10896939 chr6 . BED_feature 70654963 70654995 . . . Name=7816634 chr13 . BED_feature 19227292 19227351 . . . Name=1309596 chr13 . BED_feature 19280452 19280510 . . . Name=1309596 chr13 . BED_feature 19307969 19308027 . . . Name=1309596 chr12 . BED_feature 113875295 113875358 . . . Name=1309596 chr6 . BED_feature 4455598 4455637 . . . Name=3733754 chr6 . BED_feature 41451086 41451559 . . . Name=3641189 chr4 . BED_feature 141097308 141098498 . . . Name=3641189 chr3 . BED_feature 37317571 37317603 . . . Name=7565783 chr5 . BED_feature 137517687 137518116 . . . Name=8429032 chr5 . BED_feature 137519819 137519872 . . . Name=8429032 chr9 . BED_feature 98232313 98234392 . . . Name=1648481 chr9 . BED_feature 98255701 98255873 . . . Name=1648481 chr4 . BED_feature 140565202 140565232 . . . Name=9733765 chr12 . BED_feature 113875219 113875262 . . . Name=2573524 chr12 . BED_feature 113875219 113875262 . . . Name=2573523 chr10 . BED_feature 34079089 34079121 . . . Name=9369451 chr7 . BED_feature 56431088 56431124 . . . Name=1697928 chr5 . BED_feature 23371708 23371770 . . . Name=1697928 chr5 . BED_feature 97089579 97089620 . . . Name=1697928 chr3 . BED_feature 30711033 30711074 . . . Name=1697928 chr3 . BED_feature 52891299 52891340 . . . Name=1697928 chr3 . BED_feature 93460310 93460347 . . . Name=1697928 chr2 . BED_feature 137786747 137786785 . . . Name=1697928 chr1 . BED_feature 92688075 92688115 . . . Name=1697928 chr9 . BED_feature 43210267 43210308 . . . Name=1697928 chr9 . BED_feature 76557076 76557115 . . . Name=1697928 chr8 . BED_feature 30070832 30070925 . . . Name=1697928 chr8 . BED_feature 46973629 46973670 . . . Name=1697928 chr15 . BED_feature 51612592 51612633 . . . Name=1697928 chr15 . BED_feature 74806793 74806890 . . . Name=1697928 chr15 . BED_feature 74808756 74808824 . . . Name=1697928 chr15 . BED_feature 74809951 74812614 . . . Name=1697928 chr15 . BED_feature 74816190 74816902 . . . Name=1697928 chr15 . BED_feature 74822133 74828327 . . . Name=1697928 chr15 . BED_feature 74872276 74872371 . . . Name=1697928 chr15 . BED_feature 74874187 74874290 . . . Name=1697928 chr15 . BED_feature 74875399 74879211 . . . Name=1697928 chr15 . BED_feature 74892910 74893338 . . . Name=1697928 chr15 . BED_feature 74896475 74897345 . . . Name=1697928 chr15 . BED_feature 74898449 74898535 . . . Name=1697928 chr15 . BED_feature 74899817 74899910 . . . Name=1697928 chr15 . BED_feature 74902179 74902265 . . . Name=1697928 chr15 . BED_feature 74920672 74920711 . . . Name=1697928 chr15 . BED_feature 74935468 74935513 . . . Name=1697928 chr15 . BED_feature 74937345 74937445 . . . Name=1697928 chr15 . BED_feature 74938556 74938851 . . . Name=1697928 chr15 . BED_feature 74940929 74940981 . . . Name=1697928 chr15 . BED_feature 74942003 74942875 . . . Name=1697928 chr15 . BED_feature 74958548 74958643 . . . Name=1697928 chr15 . BED_feature 74960530 74960628 . . . Name=1697928 chr15 . BED_feature 74961911 74962001 . . . Name=1697928 chr15 . BED_feature 74964084 74965592 . . . Name=1697928 chr15 . BED_feature 74979362 74981877 . . . Name=1697928 chr15 . BED_feature 74982979 74983061 . . . Name=1697928 chr15 . BED_feature 74984385 74984484 . . . Name=1697928 chr15 . BED_feature 74986287 74986369 . . . Name=1697928 chr15 . BED_feature 75013081 75013858 . . . Name=1697928 chr15 . BED_feature 75023388 75023485 . . . Name=1697928 chr15 . BED_feature 75024580 75024617 . . . Name=1697928 chr15 . BED_feature 75044018 75044295 . . . Name=1697928 chr15 . BED_feature 75045394 75045459 . . . Name=1697928 chr15 . BED_feature 75064363 75064531 . . . Name=1697928 chr15 . BED_feature 75065855 75066353 . . . Name=1697928 chr15 . BED_feature 75067375 75068275 . . . Name=1697928 chr15 . BED_feature 75072020 75072091 . . . Name=1697928 chr15 . BED_feature 75073988 75074156 . . . Name=1697928 chr15 . BED_feature 75075533 75075620 . . . Name=1697928 chr15 . BED_feature 75092999 75093404 . . . Name=1697928 chr15 . BED_feature 75094478 75094527 . . . Name=1697928 chr15 . BED_feature 75096056 75096146 . . . Name=1697928 chr15 . BED_feature 75097473 75097640 . . . Name=1697928 chr15 . BED_feature 75099452 75099490 . . . Name=1697928 chr15 . BED_feature 75122784 75122886 . . . Name=1697928 chr15 . BED_feature 75124191 75124276 . . . Name=1697928 chr15 . BED_feature 75131425 75133048 . . . Name=1697928 chr15 . BED_feature 75141974 75142141 . . . Name=1697928 chr15 . BED_feature 75155959 75156028 . . . Name=1697928 chr15 . BED_feature 75177865 75177968 . . . Name=1697928 chr15 . BED_feature 75180069 75181772 . . . Name=1697928 chr15 . BED_feature 75201591 75201693 . . . Name=1697928 chr15 . BED_feature 75204356 75204439 . . . Name=1697928 chr15 . BED_feature 75256791 75256855 . . . Name=1697928 chr15 . BED_feature 75258519 75258613 . . . Name=1697928 chr15 . BED_feature 75261789 75262172 . . . Name=1697928 chr15 . BED_feature 75268431 75269094 . . . Name=1697928 chr14 . BED_feature 61763898 61763939 . . . Name=1697928 chr18 . BED_feature 21560810 21560851 . . . Name=1697928 chr6 . BED_feature 147221087 147221118 . . . Name=9280059 chrX . BED_feature 99686014 99686377 . . . Name=9426246 chr6 . BED_feature 115407220 115407269 . . . Name=7838156 chr19 . BED_feature 40243904 40245132 . . . Name=7838156 chr19 . BED_feature 40247091 40247900 . . . Name=7838156 chr14 . BED_feature 16999528 16999931 . . . Name=7838156 chr14 . BED_feature 17000988 17001191 . . . Name=7838156 chr14 . BED_feature 17004849 17005036 . . . Name=7838156 chr14 . BED_feature 17007943 17008565 . . . Name=7838156 chr14 . BED_feature 17009721 17009866 . . . Name=7838156 chr14 . BED_feature 17013050 17013104 . . . Name=7838156 chr14 . BED_feature 17014696 17014956 . . . Name=7838156 chr14 . BED_feature 17031225 17032189 . . . Name=7838156 chr7 . BED_feature 24606266 24606297 . . . Name=1545794 chr11 . BED_feature 87609642 87609721 . . . Name=8384306 chr12 . BED_feature 114345284 114345346 . . . Name=1922039 chr12 . BED_feature 31850892 31850937 . . . Name=1661245 chr6 . BED_feature 113401690 113401718 . . . Name=1339452 chr12 . BED_feature 86362675 86362707 . . . Name=7698311 chr8 . BED_feature 27273951 27273980 . . . Name=14673133 chr9 . BED_feature 98298949 98300034 . . . Name=8288643 chr6 . BED_feature 72234142 72236749 . . . Name=7900819 chr4 . BED_feature 152974997 152975053 . . . Name=7900819 chr8 . BED_feature 72525045 72525233 . . . Name=7900819 chr12 . BED_feature 86362674 86362701 . . . Name=8346248 chr11 . BED_feature 106130610 106130812 . . . Name=8555489 chr11 . BED_feature 54091604 54091662 . . . Name=3876931 chr11 . BED_feature 54093027 54093177 . . . Name=3876931 chr12 . BED_feature 25295984 25296021 . . . Name=7559662 chr12 . BED_feature 25297229 25297303 . . . Name=7559662 chr11 . BED_feature 32183544 32183620 . . . Name=9032265 chr11 . BED_feature 32196361 32196437 . . . Name=9032265 chr19 . BED_feature 5637775 5641675 . . . Name=2001591 chr19 . BED_feature 5645515 5645555 . . . Name=2001591 chr19 . BED_feature 5646808 5648105 . . . Name=2001591 chr18 . BED_feature 20808272 20808309 . . . Name=1870969 chr3 . BED_feature 10196461 10196574 . . . Name=1545801 chr18 . BED_feature 3281799 3281831 . . . Name=10799536 chr18 . BED_feature 43863437 43863471 . . . Name=1508185 chr9 . BED_feature 108198554 108199203 . . . Name=8413228 chr17 . BED_feature 26571740 26572245 . . . Name=9778505 chr2 . BED_feature 113751484 113752125 . . . Name=8164695 genometools-1.5.1/testdata/bed_files/gb-2008-9-2-r31-s4.bed000066400000000000000000000016351211610345200224650ustar00rootroot00000000000000chrV 10924506 10924531 16159881 chrX 11351801 11351828 16159881 chrV 13813816 13814105 9425137 chrIV 10461777 10462129 1361171 chrIV 11059126 11059319 14660442 chrX 5100804 5100851 9927589 chrX 420877 421717 7671811 chrII 11928523 11928560 7671813 chrX 421407 421433 7671813 chrIII 7676726 7676849 11003845 chrII 9731983 9732106 11003845 chrV 11977977 11978018 9761670 chrX 12467618 12467665 9834189 chrV 20250986 20251013 8798416 chrX 12467632 12467664 11203704 chrV 20250981 20251012 1406665 chrV 20750852 20750890 9584117 chrX 7175608 7175678 15282167 chrV 10673746 10673772 14738885 chrX 14743479 14745201 12871707 chrV 10674211 10678331 7925019 chrX 12467547 12467661 7925019 chrX 12467617 12467660 12095247 chrV 6694719 6694758 10514435 chrV 20250979 20251008 10698188 chrI 8470263 8470841 10882527 chrV 20250982 20251016 11328853 chrX 5909768 5909804 1350087 chrV 4770527 4770557 15734735 chrIV 383476 383519 15734735 genometools-1.5.1/testdata/bed_files/gb-2008-9-2-r31-s4.gff3000066400000000000000000000036311211610345200225560ustar00rootroot00000000000000##gff-version 3 ##sequence-region chrX 420878 14745201 ##sequence-region chrI 8470264 8470841 ##sequence-region chrV 4770528 20750890 ##sequence-region chrIV 383477 11059319 ##sequence-region chrIII 7676727 7676849 ##sequence-region chrII 9731984 11928560 chrV . BED_feature 10924507 10924531 . . . Name=16159881 chrX . BED_feature 11351802 11351828 . . . Name=16159881 chrV . BED_feature 13813817 13814105 . . . Name=9425137 chrIV . BED_feature 10461778 10462129 . . . Name=1361171 chrIV . BED_feature 11059127 11059319 . . . Name=14660442 chrX . BED_feature 5100805 5100851 . . . Name=9927589 chrX . BED_feature 420878 421717 . . . Name=7671811 chrII . BED_feature 11928524 11928560 . . . Name=7671813 chrX . BED_feature 421408 421433 . . . Name=7671813 chrIII . BED_feature 7676727 7676849 . . . Name=11003845 chrII . BED_feature 9731984 9732106 . . . Name=11003845 chrV . BED_feature 11977978 11978018 . . . Name=9761670 chrX . BED_feature 12467619 12467665 . . . Name=9834189 chrV . BED_feature 20250987 20251013 . . . Name=8798416 chrX . BED_feature 12467633 12467664 . . . Name=11203704 chrV . BED_feature 20250982 20251012 . . . Name=1406665 chrV . BED_feature 20750853 20750890 . . . Name=9584117 chrX . BED_feature 7175609 7175678 . . . Name=15282167 chrV . BED_feature 10673747 10673772 . . . Name=14738885 chrX . BED_feature 14743480 14745201 . . . Name=12871707 chrV . BED_feature 10674212 10678331 . . . Name=7925019 chrX . BED_feature 12467548 12467661 . . . Name=7925019 chrX . BED_feature 12467618 12467660 . . . Name=12095247 chrV . BED_feature 6694720 6694758 . . . Name=10514435 chrV . BED_feature 20250980 20251008 . . . Name=10698188 chrI . BED_feature 8470264 8470841 . . . Name=10882527 chrV . BED_feature 20250983 20251016 . . . Name=11328853 chrX . BED_feature 5909769 5909804 . . . Name=1350087 chrV . BED_feature 4770528 4770557 . . . Name=15734735 chrIV . BED_feature 383477 383519 . . . Name=15734735 genometools-1.5.1/testdata/bed_files/gb-2008-9-2-r31-s5.bed000066400000000000000000001006231211610345200224630ustar00rootroot00000000000000chr17 48290000 48290096 2300056 chr1 154651620 154652041 1764039 chr19 51023882 51024004 1656236 chr1 96909742 96909912 8120060 chr14 21847875 21847906 1644820 chr12 42931185 42931218 1970973 chr12 42936616 42937377 1970973 chr12 42938680 42938932 1970973 chr12 42940081 42940247 1970973 chr12 42941798 42942075 1970973 chr12 42944041 42944415 1970973 chr10_random 695959 696024 1970973 chr19 49636890 49637016 14641110 chr18 27413271 27413302 14563555 chrX 85120367 85120397 14563555 chr3 44441218 44441254 11773447 chr8 4158720 4158774 15026307 chr2 180483396 180483436 8643513 chr4 42955731 42955763 9380697 chrUn_random 3207748 3207780 9380697 chr2 116034041 116034070 10969836 chr5 165074245 165074283 12023302 chr12 37288388 37288959 8110830 chr10 95694184 95694256 9614069 chr1 95892856 95892967 9614069 chr14 87395429 87395512 8188706 chr1 35713101 35713134 11517190 chr4 158186009 158186097 1672118 chr4 158187269 158188218 1672118 chr4 158283950 158284038 1672118 chr4 158285259 158285436 1672118 chr4 158286504 158286547 1672118 chr4 158371741 158371800 1672118 chr4 158372955 158373132 1672118 chr4 158381375 158381418 1672118 chr4 158628591 158629557 1672118 chr4 158630708 158630790 1672118 chr3 136739008 136739571 1672118 chr3 136743016 136743200 1672118 chr1 78368025 78368381 1672118 chrUn 17400462 17400493 15661834 chr7 104035596 104035776 2540196 chr11 79124930 79124959 2540196 chrX 85949213 85949621 2282981 chr1 81264615 81264651 15656786 chr1 81343180 81343216 15656786 chr6 128386905 128386950 2246271 chr6 128436431 128436476 2246271 chr15 33068745 33069093 8782063 chr10 95694184 95694327 2836398 chr14 21847815 21847937 2046676 chr5 19717055 19717123 8182075 chr9 65906943 65906974 2476660 chrX 24685182 24685227 2476660 chr2 212297453 212297490 7683412 chr5 139690797 139690826 11689000 chr7 20348252 20348302 10953033 chr5 139863924 139863974 10953033 chr10 40445098 40445148 10953033 chr1 175179962 175180012 10953033 chr19 41616222 41616268 2424007 chr3 13783500 13783534 3185564 chr1 87626143 87626171 2697636 chr10 87747756 87747878 1846602 chr10 87750094 87751145 1846602 chr7 140995634 140997920 1846602 chr15_random 316858 316978 1846602 chr15_random 319399 319577 1846602 chr15 10490902 10490978 1846602 chr1 154651795 154651898 10551830 chr7 10727329 10727442 8790352 chr18 60548760 60548879 8790352 chr18 60594285 60594347 8790352 chr8 79644353 79645644 8790352 chr8 79671772 79672729 8790352 chr17 15651980 15652011 10531380 chr13 41043407 41043439 7926010 chr11 79124923 79124960 1693237 chr3 164012297 164012333 1693237 chr6 23664539 23664573 2914621 chr6 64172472 64172537 2914621 chr6 127304430 127305147 2914621 chr5 25294694 25295538 2914621 chr5 130925073 130925668 2914621 chr5 167401635 167402455 2914621 chr5 167404507 167404608 2914621 chr4 154051425 154052369 2914621 chr4 160892813 160893011 2914621 chr4 160895520 160896074 2914621 chr3 55201686 55202606 2914621 chr3 103228388 103228499 2914621 chr3 136274407 136275173 2914621 chr3 144110234 144111155 2914621 chr2 174389981 174390441 2914621 chr2 178470348 178470412 2914621 chr2 186081639 186082574 2914621 chr1 106191088 106192032 2914621 chr1 171347087 171347715 2914621 chr1 222252059 222252969 2914621 chr14 18734493 18734615 2914621 chr9 52001271 52002013 2914621 chr9 66781668 66781736 2914621 chrX 41099239 41100182 2914621 chrX 86260051 86260662 2914621 chr11 22930565 22931429 2914621 chr10 44889478 44889836 2914621 chr10 53300168 53300233 2914621 chr10 57537626 57538981 2914621 chr10 57540453 57542319 2914621 chr17 34304641 34305374 2914621 chr16 24233574 24234505 2914621 chr16 36524019 36524476 2914621 chr15 22783095 22783169 2914621 chr8 35316221 35316575 2914621 chr8 113075747 113076196 2914621 chr18 83076444 83076889 2914621 chr20 13828233 13828266 12654506 chr12 42919433 42919463 10674400 chr8 79644223 79644252 10674400 chr10 95694184 95694216 10194769 chr2 22607196 22607228 8552092 chr6 98775386 98775815 11731618 chr1 35522839 35522868 11731618 chr10 57535198 57537754 2269373 chr12 22154906 22154939 9224811 chr5 165074363 165074416 12480945 chr6 26931684 26931784 8248179 chr2 104765996 104766025 8248179 chr3 164011948 164011980 14722127 chr12 35664735 35664778 10207035 chr1 97291099 97291128 11278660 chr2 180483362 180483392 11668178 chr10 57501537 57503604 8034713 chr18 58177377 58177406 9855630 chr18 58179240 58179269 9855630 chr8 115124281 115124352 11116210 chr20_random 40416 40502 3125612 chr20_random 59038 59086 3125612 chr20_random 89200 89262 3125612 chr20_random 130973 131037 3125612 chr20 2646401 2646490 3125612 chr20 3409894 3409958 3125612 chr20 3425424 3425469 3125612 chr20 3468402 3468465 3125612 chr20 3513816 3513902 3125612 chr20 3539747 3539811 3125612 chr20 3555754 3555801 3125612 chr20 4998442 4998530 3125612 chr20 5021610 5021673 3125612 chr20 5056562 5056626 3125612 chr6 104749304 104749414 8662994 chr4 78827912 78828679 2827005 chr2 94946369 94946454 2827005 chr1 34635073 34635160 2827005 chr1 73096720 73096825 2827005 chr8 20038113 20038177 2827005 chr8 83529634 83529729 2827005 chr16 13318993 13319098 2827005 chr14 65603825 65603874 2827005 chr19 26190596 26190713 2827005 chr18 63217240 63217296 2827005 chr20 3663805 3663835 9794408 chr3 44441216 44441254 10026208 chr14 21847849 21847898 8114709 chr18 75499627 75499678 10995747 chr15 45392496 45392525 9334243 chr7 9773672 9774076 3053160 chr5 101403546 101403934 3053160 chr5 118165240 118165774 3053160 chr5 118350318 118350388 3053160 chr5 118394687 118394763 3053160 chr5 118409475 118409593 3053160 chr5 118415944 118416076 3053160 chr5 118437031 118437153 3053160 chr5 118459474 118459582 3053160 chr5 118461707 118461873 3053160 chr5 118477298 118477390 3053160 chr5 118506520 118506720 3053160 chr19 25046470 25046886 3053160 chr1 96173572 96173902 2331750 chr1 96174920 96175332 2331750 chr1 96176572 96176787 2331750 chr1 96177989 96178484 2331750 chr7 40484147 40484205 7791794 chrX 89455372 89455402 8241260 chr3 118194032 118194154 1371278 chr14 18813520 18813556 12732210 chr19 39851519 39851548 1683601 chr19 39853854 39853884 1683601 chr6 140857803 140857843 2555700 chr9 95631140 95631173 2555700 chr1 238896304 238896339 2555700 chr6 128386905 128386950 7559615 chr6 128436431 128436476 7559615 chr14 21847857 21847907 7559615 chr2 191044260 191044300 1472472 chr3 17196019 17196062 16873660 chr2 15998843 15998884 16873660 chr10 95694276 95694305 2555064 chr13 47243579 47243618 8413246 chr12 35664756 35664796 8413246 chr10 53776749 53776789 8413246 chr1 185975627 185975692 8413246 chr14 19110724 19110779 9792724 chr7 104034950 104035847 3671079 chr5 165074084 165074416 10022871 chr8 4315515 4315591 2176152 chr10 64312804 64313175 9822647 chr6 128386904 128386951 7929335 chr6 128436430 128436477 7929335 chr14 21847786 21847818 8246951 chr3 164011396 164011436 11399762 chr1 154653109 154653138 9210417 chr2 116033483 116033516 9873817 chr2 219591237 219591361 1527171 chr4 119765287 119767565 2072895 chr15 50479669 50479749 2072895 chr20 21885315 21885395 2072895 chr7 120165048 120165105 1922023 chr7 120174377 120174551 1922023 chr7 120176595 120176761 1922023 chr10 78750075 78750175 1922023 chr1 202936739 202936792 1549125 chr1 258000873 258000924 1549125 chr14 86614962 86615007 1549125 chr3 92571982 92572093 12145338 chr1 95892888 95892918 12145338 chr1 154651765 154651796 9346922 chr11 81471200 81471233 8910619 chr14 86587826 86587854 9677331 chr20_random 40466 40500 2668878 chr20 4998446 4998480 2668878 chr20 5056566 5056600 2668878 chr15 47303022 47303121 8734471 chr6 77976383 77976930 2227418 chr6 78005397 78005442 2227418 chr18 12406442 12406471 2227418 chr10 95694332 95694366 11022037 chr2 182740364 182740398 11022037 chr2_random 3022960 3022990 10620495 chr11 79124932 79124960 10620495 chr5 66293895 66294054 9737987 chr2 181214699 181214790 9737987 chr14 97746094 97746125 10702298 chr19 26538094 26538123 11050084 chr8 109400317 109400350 12750453 chr1 212019618 212019648 12750453 chrX 63597603 63597754 12750453 chr19 51023955 51023991 7799916 chr20_random 40466 40501 3554244 chr20_random 89200 89236 3554244 chr3 108927748 108927779 3554244 chr20 2646427 2646483 3554244 chr20 3409894 3409932 3554244 chr20 3468402 3468439 3554244 chr20 3555764 3555801 3554244 chr20 4998442 4998478 3554244 chr20 5056562 5056598 3554244 chr14 18813519 18813556 12609849 chr1 155389162 155389765 8474458 chr1 185974615 185975610 1959592 chr1 154653097 154653127 8132677 chr3 3480431 3480463 9038213 chr8 126655173 126657278 8948424 chr4 152057521 152057550 11278588 chr1 78760688 78762243 2761536 chr16 89936885 89936920 16481392 chr15 45392169 45392292 11058537 chr6 76916982 76918759 1976511 chr6 76919760 76920131 1976511 chr6 77008394 77008444 1976511 chr10 16608130 16608178 1976511 chr3 135730135 135730333 1976511 chr3 135838136 135838303 1976511 chr15 49715149 49715266 1976511 chr1 247222016 247222126 1976511 chr19 39447682 39447713 9845337 chr19 39843037 39843093 8101632 chr1 202936620 202936833 7720874 chr1 258000893 258000923 7720874 chr6 27117535 27118509 7689152 chr18 63640869 63641571 7689152 chr2 142434224 142434369 7689152 chr1 95655412 95656362 7689152 chrX 157575696 157576066 7689152 chr3 88648904 88648943 1588955 chr7 137835952 137835980 1588954 chr1 247323760 247323799 8955092 chr6 138156550 138159155 7980439 chr17 5126485 5126515 7980439 chr2 180483680 180483736 9013768 chr12 32389730 32389761 10385395 chrX 52446766 52446801 10417310 chr6 140857780 140857813 9013645 chr14 3050866 3050961 10521429 chr10 95694276 95694305 3396073 chr2 174775177 174775205 9642117 chr15 33068940 33069010 8007990 chr6 78803193 78803228 10674398 chr19 54750738 54750768 8144615 chr12 20903148 20903271 8756618 chr7 139326342 139326400 7901208 chr6 140857814 140857843 15013809 chr3 161554290 161554330 8940000 chr14 19142236 19142407 3422457 chr10 87514443 87514574 8051130 chr6 54941257 54942924 1840505 chr6 99528685 99530007 1840505 chr6 99531310 99531403 1840505 chr6 99545286 99545324 1840505 chr6 99553814 99553889 1840505 chr5 145853250 145854686 1840505 chr3 28852192 28852596 1840505 chr3 28868191 28869835 1840505 chr2 137155206 137156708 1840505 chr17 43385498 43385784 1840505 chr17 43387083 43387346 1840505 chr19 39851654 39851706 2881624 chr3 44441283 44441329 12783165 chr1 37535825 37535854 11572871 chr11 79124880 79124916 10567553 chr3 44441290 44441323 10567553 chr3 164012141 164012176 8188712 chr10 95694183 95694256 9564856 chr8 91956205 91956239 9564856 chr2 181395721 181395758 12388348 chr2 27149658 27149820 6088070 chr3 18499638 18499678 12697699 chr3 44441185 44441224 10869353 chr12 9541108 9541163 9632670 chr12 9596065 9596154 9632670 chr12_random 286811 286853 9632670 chr10 95692836 95692883 2155782 chr2 172385320 172385350 9712644 chr14 19110784 19110913 2454390 chr14 19142283 19142414 2454390 chr1 97290828 97291185 1869549 chr10 109920807 109920836 11955627 chr1 154653085 154653116 11955627 chr17 48289920 48289961 2011515 chr9 86012058 86012095 1655408 chr14 21847809 21847906 9252424 chr2 95334253 95334289 9756936 chr16 89939107 89939142 11509565 chr1 78761020 78761064 2388627 chr5 80324941 80324968 1717823 chr1 154653097 154653129 7499393 chr10 82582871 82582904 12010125 chr10 82587870 82587900 12010125 chr20 11570120 11570153 12010125 chr6 128386882 128386944 1549467 chr6 128436437 128436537 1549467 chr1 161658867 161658950 7828582 chr1 161662318 161662382 7828582 chr1 202936489 202936523 2552288 chr20 32000189 32000224 10640442 chr12 8296009 8296065 1358758 chr1 258000873 258000924 1358758 chr4 120355608 120355637 9174059 chr20 4636223 4636265 10986117 chr2_random 3022509 3022541 9464279 chr20_random 40466 40502 2555174 chr20 2646427 2646490 2555174 chr20 3409894 3409932 2555174 chr20 3468402 3468439 2555174 chr20 3555764 3555801 2555174 chr20 4998442 4998480 2555174 chr20 5056562 5056600 2555174 chr7 114015509 114015668 8625802 chr6 139276088 139276214 8625802 chr2 120968977 120971415 8625802 chr2 121155102 121155493 8625802 chr2 137574738 137575993 8625802 chrX 146510408 146511733 8625802 chr17 91004377 91004637 8625802 chr16 82007129 82007983 8625802 chr16 82009207 82009325 8625802 chr15 77298062 77298283 8625802 chr15 77300424 77301661 8625802 chr15 77303608 77303680 8625802 chr15 103122683 103122943 8625802 chr8 104738234 104738483 8625802 chr1 240316238 240316283 12384280 chr7 140523538 140523575 1406681 chr6 31079809 31079847 1406681 chr6 80532951 80533645 1406681 chr6 83786387 83786555 1406681 chr6 135414911 135415048 1406681 chr5 36372663 36373037 1406681 chr5 123984234 123984853 1406681 chr5 145207153 145207290 1406681 chr3 36635545 36636263 1406681 chr3 83669417 83670112 1406681 chr3 84729561 84730254 1406681 chr2 18125793 18126300 1406681 chr2 73041141 73041836 1406681 chr2 78744789 78745497 1406681 chr2 170307486 170308190 1406681 chr2 174025967 174026672 1406681 chr2 223129727 223130032 1406681 chr1 106346776 106347489 1406681 chr1 123765542 123765900 1406681 chr15 62765793 62766509 1406681 chr9 11037643 11038897 1406681 chr9 25152172 25152851 1406681 chr9 42474740 42475492 1406681 chr9 50106926 50106979 1406681 chr9 57733720 57733811 1406681 chr9 93406236 93406297 1406681 chr8 39475606 39476005 1406681 chr8 88315847 88316563 1406681 chr13 2231202 2231322 1406681 chr13 22886638 22886775 1406681 chr16 64644794 64644858 1406681 chr6_random 21171 21797 1406681 chr14 70509836 70510407 1406681 chr14 87563708 87564093 1406681 chrUn 42219678 42219745 1406681 chrUn 73050412 73050514 1406681 chr19 34283394 34284137 1406681 chrX 81946175 81946308 1406681 chrX 106098538 106099101 1406681 chrX 106808582 106808720 1406681 chrX 106992316 106992748 1406681 chrX 120503399 120503828 1406681 chrX 131350579 131350664 1406681 chrX 141824751 141825452 1406681 chr4 158103485 158103531 2479916 chr19 26190655 26190706 2547796 chr4 78827972 78828212 2547796 chr16 13318993 13319040 2547796 chr1 73096776 73096825 2547796 chr18 83076551 83077187 2005901 chr6 14985891 14986418 2005901 chr6 23664340 23664625 2005901 chr6 64172067 64172842 2005901 chr6 127304347 127305042 2005901 chr5 25294682 25295361 2005901 chr5 81560511 81560554 2005901 chr5 130924972 130925713 2005901 chr5 167402249 167405212 2005901 chr4 89799037 89799689 2005901 chr4 154051342 154052264 2005901 chr3 55201791 55202713 2005901 chr3 66685186 66686036 2005901 chr3 71112136 71112785 2005901 chr3 85607215 85607750 2005901 chr3 103228337 103228777 2005901 chr3 136274324 136275069 2005901 chr3 144110490 144111247 2005901 chr2 165012789 165013084 2005901 chr2 174389981 174390338 2005901 chr2 178470052 178470703 2005901 chr2 186081556 186082318 2005901 chr1 106191005 106191855 2005901 chr1 171346715 171347440 2005901 chr1 222252312 222253089 2005901 chr9 52001361 52001893 2005901 chr9 66781379 66782133 2005901 chrX 41099156 41099927 2005901 chrX 86260154 86261037 2005901 chr13 71982146 71982779 2005901 chr11 22930446 22931154 2005901 chr10 44889482 44890201 2005901 chr10 53300162 53300307 2005901 chr10 88930810 88931356 2005901 chr17 34304729 34305481 2005901 chr16 24233491 24234263 2005901 chr16 36523621 36524467 2005901 chr15 8792275 8792305 2005901 chr15 12501945 12502378 2005901 chr15 22783119 22783160 2005901 chr15 27983963 27984038 2005901 chr14 18733881 18734697 2005901 chrUn 12670678 12670862 2005901 chr8 35315945 35316663 2005901 chr8 113075836 113076605 2005901 chr7 24531797 24531830 9395525 chr17 53131797 53131831 12813463 chr3_random 930755 930827 9454838 chr1 76254921 76255087 15337603 chr10 28527477 28527527 9478977 chr10 28533061 28533222 9478977 chr14 45723216 45723246 9478977 chr7 104035607 104035780 1406708 chr17 44709066 44709095 3244361 chr17 28309948 28309990 11278891 chr4 165389257 165389286 9242644 chr11 81471198 81471237 10660604 chr15 10518098 10518126 10660604 chr6 26931361 26932057 2586521 chr6 26933508 26933558 2586521 chr2 212297456 212297487 10377075 chr1 97290920 97290965 8065357 chr4 182898552 182898623 2181446 chr7 139891414 139891863 2479823 chr7 140011921 140012881 2479823 chr7 136708095 136708571 10652357 chr8 48907764 48907795 12848620 chr16 7975039 7975080 10973977 chr6 109559289 109559347 7791782 chr1 208090837 208091088 7791782 chr10 70256299 70256356 2106664 chr10 70257550 70258029 2106664 chr6 26931941 26931969 7609882 chr13 80234980 80235020 10988288 chr12 27707601 27707682 7896732 chr7 139452798 139452865 1717824 chr19 41616253 41616300 1717824 chr2 209447545 209447595 1717824 chr2 209478539 209478590 1717824 chr2 209482203 209482254 1717824 chr2 209518566 209518614 1717824 chrUn 57509249 57509414 8964505 chr5 157654588 157654799 12188923 chr17 44709020 44709206 3683387 chr5 66296324 66296355 12466545 chr6 55895759 55895951 8098844 chr6 55955923 55957044 8098844 chrX_random 1831766 1831958 8098844 chr8 5783961 5783999 9058379 chr10 53776841 53776882 2830491 chr4 126331068 126331108 8016112 chr10 53800558 53800643 2999140 chr19 25703364 25703401 12917378 chr2 36432960 36432992 12917378 chr11 81471195 81471231 9556573 chr13 48867699 48867826 12505064 chr2 180483706 180483735 2175918 chr6 13161173 13161439 11451360 chr1 205852195 205852261 12493735 chr6 26931644 26931680 12145309 chr3 136743228 136743302 1732730 chr6 48025823 48025859 1732732 chr4 158185718 158185812 1694011 chr4 158283657 158283750 1694011 chr4 158371448 158371541 1694011 chr4 158630996 158631088 1694011 chr1 62324044 62324077 10594026 chr8 38028961 38028994 10594026 chr11 81471202 81471237 10708554 chr2 95334253 95334290 8969196 chr16 7975040 7975081 8969196 chr2 94554720 94554750 10075714 chr16 17570715 17570762 8928809 chr5 19717000 19717032 9875228 chr12 35664744 35664778 8366095 chr15 33068993 33069065 8366095 chr19 39850451 39850479 1584217 chr2 95334253 95334288 10196233 chr20_random 40467 40502 11297551 chr20_random 89200 89235 11297551 chr20 3409894 3409931 11297551 chr20 3468402 3468438 11297551 chr20 3555765 3555801 11297551 chr20 4998442 4998479 11297551 chr20 5056562 5056599 11297551 chr7 137223755 137223785 1328867 chr8 82724142 82724194 16198230 chr15 33068730 33068775 8537395 chr4 104412023 104412065 9099714 chr3 118194034 118194191 8195142 chr5 17514004 17514366 9030569 chr7 2230888 2230993 1315319 chr7 2235952 2236200 1315319 chr7 2237964 2238851 1315319 chr7 2240117 2242058 1315319 chr7 2244989 2245138 1315319 chr7 2247707 2248383 1315319 chr7 2250256 2251833 1315319 chr7 2264295 2264914 1315319 chr7 2268746 2269326 1315319 chr18 30199963 30200062 3441006 chr2 133015599 133015640 3441006 chr1 185972978 185973069 3441006 chr1 185974484 185975490 3441006 chr14 87968313 87968342 9030565 chr15 60794026 60794055 10395650 chrX 26568278 26568315 10395650 chrX 26571541 26571580 10395650 chr1 205848279 205848607 10956641 chr4 116975598 116975634 8663388 chr14 35418312 35418365 7615828 chr15 83103031 83103065 12568725 chr17 6287887 6287919 14563703 chr13 96309606 96309637 11278663 chr2 174775177 174775259 3499668 chr11 67609816 67609854 10896677 chr10 664791 664820 10896677 chr10 666717 666745 10896677 chr6 103124700 103124740 7575462 chr8 4315525 4315554 1850695 chr1 206632400 206632440 7592662 chr14 19142319 19142351 2711183 chr1 203172021 203172059 16165221 chr5 24455787 24455867 3035717 chr4 173815402 173815466 3035717 chr4 173852416 173852480 3035717 chr17 48465672 48465812 3035717 chr17 48519754 48519834 3035717 chr17 48523723 48523879 3035717 chr17 48775744 48775897 3035717 chr17 50113535 50113801 3035717 chr17 50332549 50332689 3035717 chr17 50339160 50339316 3035717 chr17 50391419 50391575 3035717 chr17 50410854 50410994 3035717 chr2 191075806 191076046 3035717 chr8 58583592 58585211 8144606 chr13 48829905 48829943 8413291 chr1 155389340 155389374 9211912 chrX 85948905 85948939 12841583 chr10 95694105 95694356 2745428 chr1 258000869 258000907 16055439 chr5 17513955 17514362 8232318 chr7 20348754 20348787 10082537 chr5 139859997 139860030 10082537 chr4 119854762 119854795 10082537 chr3 143750248 143750278 10082537 chr1 175179476 175179509 10082537 chr9 110546714 110546747 10082537 chr10 40444612 40444645 10082537 chr10 44043303 44043336 10082537 chr19 21185692 21185724 10082537 chr1_random 3871142 3871176 10082537 chr13 46262765 46262805 15792957 chr10 95694267 95694326 2909514 chr7 20348057 20349168 2247479 chr7 70298135 70298199 2247479 chr6 70354275 70354542 2247479 chr6 133082150 133083081 2247479 chr5 6275484 6276397 2247479 chr5 139859183 139860110 2247479 chr5 139863888 139864450 2247479 chr4 119854134 119855181 2247479 chr4 169092273 169092364 2247479 chr3 51272284 51273397 2247479 chr3 143749836 143750919 2247479 chr2 14253133 14253530 2247479 chr1 80026396 80027532 2247479 chr1 102489385 102489756 2247479 chr1 102992034 102992318 2247479 chr1 106199076 106199114 2247479 chr1 106201863 106202525 2247479 chr1 175179033 175180207 2247479 chr9 110546071 110547179 2247479 chr8 77796417 77796507 2247479 chr8 83946535 83946581 2247479 chr11 4594930 4595910 2247479 chr10 40444168 40445298 2247479 chr10 44042140 44043989 2247479 chr10 56783679 56783745 2247479 chr17 55638302 55638455 2247479 chr17 59194874 59195997 2247479 chr14 17065458 17066754 2247479 chr14 111622953 111623002 2247479 chr19 8117802 8118410 2247479 chr19 21185045 21186127 2247479 chrX 47406746 47407102 2247479 chr1_random 3870550 3871524 2247479 chr16 19045992 19046073 9328356 chr1 201389130 201389160 1870124 chr14 19142260 19142290 3169549 chr1 154651720 154651751 2341405 chr15 33068829 33068859 1328857 chr8 91956210 91956240 1328857 chr7 139452730 139452944 3352608 chr4 103908885 103908942 1729611 chr2_random 3022490 3022519 7913466 chr1 163327123 163327175 8120047 chr13 19107283 19108726 7913462 chr12 21478628 21478724 7913462 chr12 21479815 21480655 7913462 chr12 21482682 21483542 7913462 chr12 21501021 21501328 7913462 chr12 21504988 21505178 7913462 chr12 21510879 21510992 7913462 chr12 21515571 21516930 7913462 chr12 35901883 35901946 7913462 chr12 35904907 35904996 7913462 chr18 66312589 66312649 7913462 chr18 66318408 66318542 7913462 chr18 66326667 66326715 7913462 chr18 66327811 66327891 7913462 chr18 66330330 66330411 7913462 chr18 66333039 66333223 7913462 chr18 66352909 66353047 7913462 chr18 66354979 66355144 7913462 chr18 66358386 66359978 7913462 chr7 10809378 10809585 7913462 chr1 203171679 203171722 7913462 chr1 23506891 23508078 8647846 chr10 90393457 90393489 12556524 chr1 9014798 9015335 2017183 chr1 9020504 9020678 2017183 chr1 9023159 9024837 2017183 chr1 9029875 9031714 2017183 chr6 138450709 138450752 2536161 chr8 61461104 61461178 2536161 chr11 81471198 81471236 8390676 chr2 181214725 181214790 2586516 chr6 26931934 26931971 2061309 chr10 95694277 95694306 2358443 chr5 143982939 143984529 1652060 chr1 95892870 95892955 16087728 chr10 95694276 95694305 8382533 chr3 164012082 164012111 8382533 chr15 33068822 33068861 9111345 chr1 200918368 200918409 2388615 chr7 80014128 80014162 15860457 chr4 159190579 159190614 15860457 chr1 205295185 205295222 15860457 chr19 37266476 37266518 9264553 chr8 83313648 83313688 9264553 chr8 83316459 83316499 9264553 chr3 13783502 13783539 7885844 chr2 191044262 191044302 7885844 chr3 75548101 75549203 7892230 chr1 95027230 95028125 7892230 chr1 95029404 95032465 7892230 chr15 47303027 47303121 8838143 chr3 164012305 164012334 9786935 chr1 154651966 154652069 2925653 chr9 65714903 65715023 1847512 chr10 95694198 95694316 8144557 chr6 42178107 42178450 1309950 chr3 158101547 158101667 1309950 chrX 52445629 52446887 1309950 chr3 44441287 44441317 1651499 chr1 205848582 205848676 12107181 chr1 205886158 205886188 12107181 chr13 87039697 87040484 12643284 chr3 154459842 154459899 2279702 chr3 154482821 154483158 2279702 chr1 203171509 203172300 2884660 chr2 180483712 180483741 8612541 chr2 180483405 180483435 8612540 chr2 182784706 182784953 8793102 chr2 182787266 182787383 8793102 chr2 182789355 182789416 8793102 chr1 97291100 97291130 10601277 chr7 120765072 120765114 8289814 chr7 120783233 120783275 8289814 chr7 104035612 104035727 2775280 chr10 89471416 89471519 10801800 chr1 81944731 81944764 9722582 chr1 155389339 155389372 9722582 chr3 44441053 44441355 3062372 chr4 21709925 21709984 8891341 chr4 21828017 21829568 8891341 chr20_random 40456 40502 2501084 chr20_random 89200 89236 2501084 chr20 3409894 3409932 2501084 chr20 3425428 3425469 2501084 chr20 3468402 3468439 2501084 chr20 3513856 3513896 2501084 chr20 3555754 3555801 2501084 chr20 4998442 4998490 2501084 chr20 5056562 5056610 2501084 chr2 180483680 180483774 2153298 chr12 9541107 9541165 10600171 chr12 9596068 9596154 10600171 chr12_random 286811 286853 10600171 chr4 152057520 152057550 8910484 chr5 165071744 165073864 2967498 chr5 165200540 165200948 2967498 chr4 184900212 184900300 8663213 chr10 83620724 83620765 8663211 chr17 44344417 44344480 10076996 chr3 6052522 6052554 8613746 chr1 159277324 159277731 8613746 chr6 26931686 26931782 1508198 chr6 26935226 26935264 1508198 chr10 95694184 95694257 8636081 chr1 95892856 95892900 8636081 chr5 165074076 165074115 8264645 chr18 12406442 12406471 2601716 chr2 174775175 174775207 2601716 chr6 109558820 109558850 10580097 chr5 80324938 80324968 10580097 chr3 3459945 3459989 9712664 chr3 92572010 92572045 8754772 chr3 75542194 75543137 7935418 chr3 75547824 75550800 7935418 chr1 95029922 95030802 7935418 chr2 51736527 51736910 2869036 chr2 51745856 51745910 2869036 chr6 21417632 21417664 9658104 chr19 39853069 39853122 2889531 chr9 70772381 70772413 12372417 chr14 21847825 21847883 8264581 chr1 83489340 83489368 11129950 chr1 212163558 212163699 8224520 chr1 212298955 212299096 8224520 chr17 44709066 44709212 3169002 chr1 81230296 81230356 2726759 chr1 81266715 81266995 2726759 chr1 81345295 81345575 2726759 chr1 81408545 81408605 2726759 chr1 81628278 81628339 2726759 chr1 81780214 81780279 2726759 chr1 81840001 81840083 2726759 chr1 81867028 81867110 2726759 chr5 165074127 165074170 2522932 chr2 174775175 174775205 2847919 chr10 56410821 56410853 9624121 chr4 21829155 21829196 9624121 chr9 20158681 20158710 9624121 chr6 13161119 13161490 9773974 chr3 137776221 137776254 8262963 chr3 137792319 137792352 8262963 chr3 137861856 137862694 8262963 chr3 138088127 138089463 8262963 chr3 138233789 138233822 8262963 chr3 138333350 138334178 8262963 chr3 138495772 138496574 8262963 chr12 42931109 42931193 1673926 chr12 42936667 42937243 1673926 chr10 72081210 72081418 1673926 chr10 72086082 72086284 1673926 chr10 72162125 72162289 1673926 chr10 72168712 72168798 1673926 chr10 72186369 72186997 1673926 chr10_random 695945 696073 1673926 chr7 10791310 10791383 2200736 chr7 10813078 10813165 2200736 chr19 41616265 41616293 2200736 chr1 20998723 20999025 2026618 chr1 90576756 90576785 8668155 chr2 181214665 181214792 16204235 chr3 161554279 161554804 8036172 chr4 158103526 158103571 9731707 chr2 59677643 59677674 9731707 chr2 59680754 59680784 9731707 chr14 21847876 21847906 1557422 chr7 10419996 10420281 1603088 chr17 44709071 44709101 2717408 chr3 44441290 44441325 9668074 chr5 66296280 66296332 1956774 chr2 181214742 181214791 1956774 chr9 71966731 71966762 7693708 chr7 11164584 11164626 15225122 chr6 26931485 26932030 2046665 chr11 81471198 81471236 8389766 chr7 24458489 24458520 16339156 chr2 36432960 36432991 10713139 chrX 24685277 24685478 2304462 chrX 24696391 24696625 2304462 chr18 25027872 25028105 1847666 chr9 63212560 63212590 1847666 chr9 63234519 63234645 1847666 chr4 115454231 115454259 1847666 chr3 13783502 13783539 11018030 chr2 191044179 191044302 11018030 chr5 165074298 165074326 15764815 chr17 28309967 28310005 15764815 chr7 24531800 24531832 8702983 chr11 79124934 79124965 8702983 chr14 19110765 19110885 2455718 chr6 26931932 26931970 2388831 chr12 42919573 42919608 1748280 chr2 212297455 212297499 7537851 chr6 76920418 76920446 8920965 chr1 211761740 211761769 8920965 chr3 44441287 44441328 2160464 chr13 85793036 85793185 15731358 chr13 40500600 40500630 2027757 chr1 78324518 78324548 2027757 chr5 19716825 19716853 8405996 chrX 85946855 85949621 8379933 chr3 76307197 76307240 8617799 chr3 44441330 44441385 15085339 chr10 95694183 95694216 2211620 chr8 83313854 83313884 8391636 chr18 25622616 25622645 7799965 chr8 61793835 61793978 8119192 chr3 164012014 164012064 9544984 chr3 151428679 151428718 8524227 chr1 128843971 128844010 8524227 chr2 212297456 212297489 7692229 chr12 9541091 9541139 7499421 chr12 9596052 9596131 7499421 chr12_random 286795 286844 7499421 chr14 92788597 92789167 8626808 chr14 87950091 87950131 9497382 chr10 65036946 65036974 9714306 chr6 21417532 21417638 7667089 chr17 44710578 44710640 3481434 chr10 95694279 95694309 8132622 chr2 181214117 181214342 8449904 chr3 76301109 76301137 8662964 chr3 164011949 164011986 1848696 chr2 174727220 174727250 1942067 chr12 42919433 42919644 8367288 chr1 211761740 211761797 8216221 chr8 5784010 5784039 7588292 chr14 87950091 87950127 10358076 chr6 26931644 26931676 11861523 chr1 228933318 228933690 14673170 chr2 212297456 212297490 10833420 chr2 181214753 181214782 8165139 chr19 37266477 37266518 9144242 chr8 83313648 83313688 9144242 chr8 83316459 83316499 9144242 chr1 80309880 80309922 9224955 chr10 95694110 95694156 9765286 chr4 158103539 158103572 11319221 chr1 95892547 95892583 11682622 chr5 17161945 17162352 2439693 chr17 48290091 48290226 1718964 chr1 95892880 95892915 15961509 chr14 87950096 87950131 10880363 chr1 95892543 95892900 10935547 chr10 72460509 72460539 7545164 chr2 180483338 180483780 2308930 chr19 37266472 37266506 12023900 chr5 16139724 16139762 3165490 chr11 50537235 50537273 3165490 chr15 1142333 1142393 3165490 chr6 78009635 78009664 11891324 chr11 80031565 80032076 8413271 chr11 80109178 80109689 8413271 chr11 80169745 80170257 8413271 chrX 24685339 24685443 8496174 chr12 19555414 19555468 8288642 chr14 18813329 18813382 8288642 chr5 78091353 78091417 2463987 chr5 78165899 78165963 2463987 chr5 78218630 78218694 2463987 chr5 78244114 78244178 2463987 chr5 78270734 78270798 2463987 chr5 78316189 78316251 2463987 chr5 78409805 78409869 2463987 chr5 78440085 78440143 2463987 chr5 78490562 78490627 2463987 chr5 78644225 78644288 2463987 chr5 78683814 78683877 2463987 chr5 78709791 78709856 2463987 chr5 78770225 78770289 2463987 chr5 78805327 78805391 2463987 chr5 78820149 78820213 2463987 chr5 78911594 78911634 2463987 chr5 78936470 78936534 2463987 chr5 78990257 78990320 2463987 chr5 79017594 79017659 2463987 chr5 79083558 79083622 2463987 chr5 79101331 79101395 2463987 chr19 13962433 13963095 12637567 chr5 66296210 66296240 11095981 chr19 37266470 37266506 8396148 chr8 83313655 83313690 8396148 chr8 83316466 83316501 8396148 chr7 141772421 141775242 1684715 chr7 141778585 141778731 1684715 chr10 85020102 85020245 1684715 chr10 85032736 85032897 1684715 chr10 85036913 85037064 1684715 chr4 80490430 80490494 1684715 chr4 80502677 80502724 1684715 chr4 80506432 80506593 1684715 chr4 80515871 80516035 1684715 chr9 87036984 87037018 8632018 chr2 181178017 181178044 7665553 chr1 74359077 74359121 15502011 chr1 74605347 74605424 15502011 chr1 75708122 75708199 15502011 chr2 180483273 180483302 8381969 chr3 6666297 6666564 8381967 chr3 6670336 6670447 8381967 chr3 6678139 6678293 8381967 chr3 6683840 6683951 8381967 chr3 6685833 6685928 8381967 chr3 6689100 6689303 8381967 chr2 181214666 181214850 8246989 chr20 4636130 4636184 3114745 chr2 181214567 181214598 2019572 chr1 97291101 97291130 10529375 chr7 24531804 24531838 12791769 chr14 19142221 19142286 2601696 chr18 27343019 27343172 7877619 chr15 33068742 33068778 11136726 chr1 170639998 170640038 11136726 chr1 170642590 170642636 11136726 chr2 180483318 180483749 7877617 chr7 104035678 104035708 1508216 chr10 83622835 83623072 2127540 chr5 165062214 165062246 8164667 chr13 88048989 88049077 8289804 chr2 197102305 197102390 8289804 chr3 164012333 164012366 2850495 chr5 128719270 128719301 12385751 chr5 128736712 128736741 12385751 chr1 231981144 231981173 12385751 chr4 152057615 152057756 1827795 chr1 95027477 95027555 7971966 chr9 70771185 70771269 1404598 chr7 141164179 141164224 1356762 chr7 141165431 141167383 1356762 chr7 141182388 141182557 1356762 chr7 141188408 141189249 1356762 chr3 55445237 55445302 1356762 chr1 226420947 226421923 1356762 chr1 226444826 226446364 1356762 chr10 90393479 90393509 12954759 chr3 6052519 6052553 14506227 chr13 87039904 87039934 1705013 chr5 143983099 143983218 1705013 chr17 40685479 40685549 9931418 chr10 39220654 39220779 2342469 chr10 39221785 39221872 2342469 chr10 39223214 39227535 2342469 chr12 35664737 35664965 7935447 chr12 35664750 35664780 7961957 chr15 33068724 33068767 7961957 chr10 95694177 95694216 1976240 chr11 81471198 81471236 10428876 chr4_random 1954228 1954274 12397359 chr2 181177986 181178044 8798690 chr3 164007860 164007902 2355922 chr8 83312931 83313881 2160079 chr8 83315616 83316501 2160079 chr4 158102467 158103731 2466233 chr1 203171632 203171747 10842166 chr14 86614942 86614971 1406648 chr11 79124923 79124960 2875459 chr3 164012297 164012333 2875459 chr2 174775175 174775205 1922032 chr20 6541436 6541465 10634806 chr6 21417657 21417732 9512555 chr5 17514716 17514750 2837758 chr11 79124930 79124959 2837758 chr14 86615061 86615092 12540614 chr10 95694276 95694307 1985929 chr3 44441219 44441254 8164696 genometools-1.5.1/testdata/bed_files/gb-2008-9-2-r31-s5.gff3000066400000000000000000001661401211610345200225640ustar00rootroot00000000000000##gff-version 3 ##sequence-region chrX 24685183 157576066 ##sequence-region chr3_random 930756 930827 ##sequence-region chr14 3050867 111623002 ##sequence-region chr15 1142334 103122943 ##sequence-region chr12 8296010 42944415 ##sequence-region chr13 2231203 96309637 ##sequence-region chr18 12406443 83077187 ##sequence-region chr19 8117803 54750768 ##sequence-region chr16 7975040 89939142 ##sequence-region chr4_random 1954229 1954274 ##sequence-region chr17 5126486 91004637 ##sequence-region chr1_random 3870551 3871524 ##sequence-region chr6_random 21172 21797 ##sequence-region chr10 664792 109920836 ##sequence-region chr11 4594931 81471237 ##sequence-region chrUn 12670679 73050514 ##sequence-region chrX_random 1831767 1831958 ##sequence-region chr7 2230889 141778731 ##sequence-region chr10_random 695946 696073 ##sequence-region chr8 4158721 126657278 ##sequence-region chr12_random 286796 286853 ##sequence-region chr9 11037644 110547179 ##sequence-region chr3 3459946 164012366 ##sequence-region chr4 21709926 184900300 ##sequence-region chr5 6275485 167405212 ##sequence-region chr6 13161120 140857843 ##sequence-region chr20 2646402 32000224 ##sequence-region chr15_random 316859 319577 ##sequence-region chr1 9014799 258000924 ##sequence-region chr20_random 40417 131037 ##sequence-region chr2 14253134 223130032 ##sequence-region chrUn_random 3207749 3207780 ##sequence-region chr2_random 3022491 3022990 chr17 . BED_feature 48290001 48290096 . . . Name=2300056 chr1 . BED_feature 154651621 154652041 . . . Name=1764039 chr19 . BED_feature 51023883 51024004 . . . Name=1656236 chr1 . BED_feature 96909743 96909912 . . . Name=8120060 chr14 . BED_feature 21847876 21847906 . . . Name=1644820 chr12 . BED_feature 42931186 42931218 . . . Name=1970973 chr12 . BED_feature 42936617 42937377 . . . Name=1970973 chr12 . BED_feature 42938681 42938932 . . . Name=1970973 chr12 . BED_feature 42940082 42940247 . . . Name=1970973 chr12 . BED_feature 42941799 42942075 . . . Name=1970973 chr12 . BED_feature 42944042 42944415 . . . Name=1970973 chr10_random . BED_feature 695960 696024 . . . Name=1970973 chr19 . BED_feature 49636891 49637016 . . . Name=14641110 chr18 . BED_feature 27413272 27413302 . . . Name=14563555 chrX . BED_feature 85120368 85120397 . . . Name=14563555 chr3 . BED_feature 44441219 44441254 . . . Name=11773447 chr8 . BED_feature 4158721 4158774 . . . Name=15026307 chr2 . BED_feature 180483397 180483436 . . . Name=8643513 chr4 . BED_feature 42955732 42955763 . . . Name=9380697 chrUn_random . BED_feature 3207749 3207780 . . . Name=9380697 chr2 . BED_feature 116034042 116034070 . . . Name=10969836 chr5 . BED_feature 165074246 165074283 . . . Name=12023302 chr12 . BED_feature 37288389 37288959 . . . Name=8110830 chr10 . BED_feature 95694185 95694256 . . . Name=9614069 chr1 . BED_feature 95892857 95892967 . . . Name=9614069 chr14 . BED_feature 87395430 87395512 . . . Name=8188706 chr1 . BED_feature 35713102 35713134 . . . Name=11517190 chr4 . BED_feature 158186010 158186097 . . . Name=1672118 chr4 . BED_feature 158187270 158188218 . . . Name=1672118 chr4 . BED_feature 158283951 158284038 . . . Name=1672118 chr4 . BED_feature 158285260 158285436 . . . Name=1672118 chr4 . BED_feature 158286505 158286547 . . . Name=1672118 chr4 . BED_feature 158371742 158371800 . . . Name=1672118 chr4 . BED_feature 158372956 158373132 . . . Name=1672118 chr4 . BED_feature 158381376 158381418 . . . Name=1672118 chr4 . BED_feature 158628592 158629557 . . . Name=1672118 chr4 . BED_feature 158630709 158630790 . . . Name=1672118 chr3 . BED_feature 136739009 136739571 . . . Name=1672118 chr3 . BED_feature 136743017 136743200 . . . Name=1672118 chr1 . BED_feature 78368026 78368381 . . . Name=1672118 chrUn . BED_feature 17400463 17400493 . . . Name=15661834 chr7 . BED_feature 104035597 104035776 . . . Name=2540196 chr11 . BED_feature 79124931 79124959 . . . Name=2540196 chrX . BED_feature 85949214 85949621 . . . Name=2282981 chr1 . BED_feature 81264616 81264651 . . . Name=15656786 chr1 . BED_feature 81343181 81343216 . . . Name=15656786 chr6 . BED_feature 128386906 128386950 . . . Name=2246271 chr6 . BED_feature 128436432 128436476 . . . Name=2246271 chr15 . BED_feature 33068746 33069093 . . . Name=8782063 chr10 . BED_feature 95694185 95694327 . . . Name=2836398 chr14 . BED_feature 21847816 21847937 . . . Name=2046676 chr5 . BED_feature 19717056 19717123 . . . Name=8182075 chr9 . BED_feature 65906944 65906974 . . . Name=2476660 chrX . BED_feature 24685183 24685227 . . . Name=2476660 chr2 . BED_feature 212297454 212297490 . . . Name=7683412 chr5 . BED_feature 139690798 139690826 . . . Name=11689000 chr7 . BED_feature 20348253 20348302 . . . Name=10953033 chr5 . BED_feature 139863925 139863974 . . . Name=10953033 chr10 . BED_feature 40445099 40445148 . . . Name=10953033 chr1 . BED_feature 175179963 175180012 . . . Name=10953033 chr19 . BED_feature 41616223 41616268 . . . Name=2424007 chr3 . BED_feature 13783501 13783534 . . . Name=3185564 chr1 . BED_feature 87626144 87626171 . . . Name=2697636 chr10 . BED_feature 87747757 87747878 . . . Name=1846602 chr10 . BED_feature 87750095 87751145 . . . Name=1846602 chr7 . BED_feature 140995635 140997920 . . . Name=1846602 chr15_random . BED_feature 316859 316978 . . . Name=1846602 chr15_random . BED_feature 319400 319577 . . . Name=1846602 chr15 . BED_feature 10490903 10490978 . . . Name=1846602 chr1 . BED_feature 154651796 154651898 . . . Name=10551830 chr7 . BED_feature 10727330 10727442 . . . Name=8790352 chr18 . BED_feature 60548761 60548879 . . . Name=8790352 chr18 . BED_feature 60594286 60594347 . . . Name=8790352 chr8 . BED_feature 79644354 79645644 . . . Name=8790352 chr8 . BED_feature 79671773 79672729 . . . Name=8790352 chr17 . BED_feature 15651981 15652011 . . . Name=10531380 chr13 . BED_feature 41043408 41043439 . . . Name=7926010 chr11 . BED_feature 79124924 79124960 . . . Name=1693237 chr3 . BED_feature 164012298 164012333 . . . Name=1693237 chr6 . BED_feature 23664540 23664573 . . . Name=2914621 chr6 . BED_feature 64172473 64172537 . . . Name=2914621 chr6 . BED_feature 127304431 127305147 . . . Name=2914621 chr5 . BED_feature 25294695 25295538 . . . Name=2914621 chr5 . BED_feature 130925074 130925668 . . . Name=2914621 chr5 . BED_feature 167401636 167402455 . . . Name=2914621 chr5 . BED_feature 167404508 167404608 . . . Name=2914621 chr4 . BED_feature 154051426 154052369 . . . Name=2914621 chr4 . BED_feature 160892814 160893011 . . . Name=2914621 chr4 . BED_feature 160895521 160896074 . . . Name=2914621 chr3 . BED_feature 55201687 55202606 . . . Name=2914621 chr3 . BED_feature 103228389 103228499 . . . Name=2914621 chr3 . BED_feature 136274408 136275173 . . . Name=2914621 chr3 . BED_feature 144110235 144111155 . . . Name=2914621 chr2 . BED_feature 174389982 174390441 . . . Name=2914621 chr2 . BED_feature 178470349 178470412 . . . Name=2914621 chr2 . BED_feature 186081640 186082574 . . . Name=2914621 chr1 . BED_feature 106191089 106192032 . . . Name=2914621 chr1 . BED_feature 171347088 171347715 . . . Name=2914621 chr1 . BED_feature 222252060 222252969 . . . Name=2914621 chr14 . BED_feature 18734494 18734615 . . . Name=2914621 chr9 . BED_feature 52001272 52002013 . . . Name=2914621 chr9 . BED_feature 66781669 66781736 . . . Name=2914621 chrX . BED_feature 41099240 41100182 . . . Name=2914621 chrX . BED_feature 86260052 86260662 . . . Name=2914621 chr11 . BED_feature 22930566 22931429 . . . Name=2914621 chr10 . BED_feature 44889479 44889836 . . . Name=2914621 chr10 . BED_feature 53300169 53300233 . . . Name=2914621 chr10 . BED_feature 57537627 57538981 . . . Name=2914621 chr10 . BED_feature 57540454 57542319 . . . Name=2914621 chr17 . BED_feature 34304642 34305374 . . . Name=2914621 chr16 . BED_feature 24233575 24234505 . . . Name=2914621 chr16 . BED_feature 36524020 36524476 . . . Name=2914621 chr15 . BED_feature 22783096 22783169 . . . Name=2914621 chr8 . BED_feature 35316222 35316575 . . . Name=2914621 chr8 . BED_feature 113075748 113076196 . . . Name=2914621 chr18 . BED_feature 83076445 83076889 . . . Name=2914621 chr20 . BED_feature 13828234 13828266 . . . Name=12654506 chr12 . BED_feature 42919434 42919463 . . . Name=10674400 chr8 . BED_feature 79644224 79644252 . . . Name=10674400 chr10 . BED_feature 95694185 95694216 . . . Name=10194769 chr2 . BED_feature 22607197 22607228 . . . Name=8552092 chr6 . BED_feature 98775387 98775815 . . . Name=11731618 chr1 . BED_feature 35522840 35522868 . . . Name=11731618 chr10 . BED_feature 57535199 57537754 . . . Name=2269373 chr12 . BED_feature 22154907 22154939 . . . Name=9224811 chr5 . BED_feature 165074364 165074416 . . . Name=12480945 chr6 . BED_feature 26931685 26931784 . . . Name=8248179 chr2 . BED_feature 104765997 104766025 . . . Name=8248179 chr3 . BED_feature 164011949 164011980 . . . Name=14722127 chr12 . BED_feature 35664736 35664778 . . . Name=10207035 chr1 . BED_feature 97291100 97291128 . . . Name=11278660 chr2 . BED_feature 180483363 180483392 . . . Name=11668178 chr10 . BED_feature 57501538 57503604 . . . Name=8034713 chr18 . BED_feature 58177378 58177406 . . . Name=9855630 chr18 . BED_feature 58179241 58179269 . . . Name=9855630 chr8 . BED_feature 115124282 115124352 . . . Name=11116210 chr20_random . BED_feature 40417 40502 . . . Name=3125612 chr20_random . BED_feature 59039 59086 . . . Name=3125612 chr20_random . BED_feature 89201 89262 . . . Name=3125612 chr20_random . BED_feature 130974 131037 . . . Name=3125612 chr20 . BED_feature 2646402 2646490 . . . Name=3125612 chr20 . BED_feature 3409895 3409958 . . . Name=3125612 chr20 . BED_feature 3425425 3425469 . . . Name=3125612 chr20 . BED_feature 3468403 3468465 . . . Name=3125612 chr20 . BED_feature 3513817 3513902 . . . Name=3125612 chr20 . BED_feature 3539748 3539811 . . . Name=3125612 chr20 . BED_feature 3555755 3555801 . . . Name=3125612 chr20 . BED_feature 4998443 4998530 . . . Name=3125612 chr20 . BED_feature 5021611 5021673 . . . Name=3125612 chr20 . BED_feature 5056563 5056626 . . . Name=3125612 chr6 . BED_feature 104749305 104749414 . . . Name=8662994 chr4 . BED_feature 78827913 78828679 . . . Name=2827005 chr2 . BED_feature 94946370 94946454 . . . Name=2827005 chr1 . BED_feature 34635074 34635160 . . . Name=2827005 chr1 . BED_feature 73096721 73096825 . . . Name=2827005 chr8 . BED_feature 20038114 20038177 . . . Name=2827005 chr8 . BED_feature 83529635 83529729 . . . Name=2827005 chr16 . BED_feature 13318994 13319098 . . . Name=2827005 chr14 . BED_feature 65603826 65603874 . . . Name=2827005 chr19 . BED_feature 26190597 26190713 . . . Name=2827005 chr18 . BED_feature 63217241 63217296 . . . Name=2827005 chr20 . BED_feature 3663806 3663835 . . . Name=9794408 chr3 . BED_feature 44441217 44441254 . . . Name=10026208 chr14 . BED_feature 21847850 21847898 . . . Name=8114709 chr18 . BED_feature 75499628 75499678 . . . Name=10995747 chr15 . BED_feature 45392497 45392525 . . . Name=9334243 chr7 . BED_feature 9773673 9774076 . . . Name=3053160 chr5 . BED_feature 101403547 101403934 . . . Name=3053160 chr5 . BED_feature 118165241 118165774 . . . Name=3053160 chr5 . BED_feature 118350319 118350388 . . . Name=3053160 chr5 . BED_feature 118394688 118394763 . . . Name=3053160 chr5 . BED_feature 118409476 118409593 . . . Name=3053160 chr5 . BED_feature 118415945 118416076 . . . Name=3053160 chr5 . BED_feature 118437032 118437153 . . . Name=3053160 chr5 . BED_feature 118459475 118459582 . . . Name=3053160 chr5 . BED_feature 118461708 118461873 . . . Name=3053160 chr5 . BED_feature 118477299 118477390 . . . Name=3053160 chr5 . BED_feature 118506521 118506720 . . . Name=3053160 chr19 . BED_feature 25046471 25046886 . . . Name=3053160 chr1 . BED_feature 96173573 96173902 . . . Name=2331750 chr1 . BED_feature 96174921 96175332 . . . Name=2331750 chr1 . BED_feature 96176573 96176787 . . . Name=2331750 chr1 . BED_feature 96177990 96178484 . . . Name=2331750 chr7 . BED_feature 40484148 40484205 . . . Name=7791794 chrX . BED_feature 89455373 89455402 . . . Name=8241260 chr3 . BED_feature 118194033 118194154 . . . Name=1371278 chr14 . BED_feature 18813521 18813556 . . . Name=12732210 chr19 . BED_feature 39851520 39851548 . . . Name=1683601 chr19 . BED_feature 39853855 39853884 . . . Name=1683601 chr6 . BED_feature 140857804 140857843 . . . Name=2555700 chr9 . BED_feature 95631141 95631173 . . . Name=2555700 chr1 . BED_feature 238896305 238896339 . . . Name=2555700 chr6 . BED_feature 128386906 128386950 . . . Name=7559615 chr6 . BED_feature 128436432 128436476 . . . Name=7559615 chr14 . BED_feature 21847858 21847907 . . . Name=7559615 chr2 . BED_feature 191044261 191044300 . . . Name=1472472 chr3 . BED_feature 17196020 17196062 . . . Name=16873660 chr2 . BED_feature 15998844 15998884 . . . Name=16873660 chr10 . BED_feature 95694277 95694305 . . . Name=2555064 chr13 . BED_feature 47243580 47243618 . . . Name=8413246 chr12 . BED_feature 35664757 35664796 . . . Name=8413246 chr10 . BED_feature 53776750 53776789 . . . Name=8413246 chr1 . BED_feature 185975628 185975692 . . . Name=8413246 chr14 . BED_feature 19110725 19110779 . . . Name=9792724 chr7 . BED_feature 104034951 104035847 . . . Name=3671079 chr5 . BED_feature 165074085 165074416 . . . Name=10022871 chr8 . BED_feature 4315516 4315591 . . . Name=2176152 chr10 . BED_feature 64312805 64313175 . . . Name=9822647 chr6 . BED_feature 128386905 128386951 . . . Name=7929335 chr6 . BED_feature 128436431 128436477 . . . Name=7929335 chr14 . BED_feature 21847787 21847818 . . . Name=8246951 chr3 . BED_feature 164011397 164011436 . . . Name=11399762 chr1 . BED_feature 154653110 154653138 . . . Name=9210417 chr2 . BED_feature 116033484 116033516 . . . Name=9873817 chr2 . BED_feature 219591238 219591361 . . . Name=1527171 chr4 . BED_feature 119765288 119767565 . . . Name=2072895 chr15 . BED_feature 50479670 50479749 . . . Name=2072895 chr20 . BED_feature 21885316 21885395 . . . Name=2072895 chr7 . BED_feature 120165049 120165105 . . . Name=1922023 chr7 . BED_feature 120174378 120174551 . . . Name=1922023 chr7 . BED_feature 120176596 120176761 . . . Name=1922023 chr10 . BED_feature 78750076 78750175 . . . Name=1922023 chr1 . BED_feature 202936740 202936792 . . . Name=1549125 chr1 . BED_feature 258000874 258000924 . . . Name=1549125 chr14 . BED_feature 86614963 86615007 . . . Name=1549125 chr3 . BED_feature 92571983 92572093 . . . Name=12145338 chr1 . BED_feature 95892889 95892918 . . . Name=12145338 chr1 . BED_feature 154651766 154651796 . . . Name=9346922 chr11 . BED_feature 81471201 81471233 . . . Name=8910619 chr14 . BED_feature 86587827 86587854 . . . Name=9677331 chr20_random . BED_feature 40467 40500 . . . Name=2668878 chr20 . BED_feature 4998447 4998480 . . . Name=2668878 chr20 . BED_feature 5056567 5056600 . . . Name=2668878 chr15 . BED_feature 47303023 47303121 . . . Name=8734471 chr6 . BED_feature 77976384 77976930 . . . Name=2227418 chr6 . BED_feature 78005398 78005442 . . . Name=2227418 chr18 . BED_feature 12406443 12406471 . . . Name=2227418 chr10 . BED_feature 95694333 95694366 . . . Name=11022037 chr2 . BED_feature 182740365 182740398 . . . Name=11022037 chr2_random . BED_feature 3022961 3022990 . . . Name=10620495 chr11 . BED_feature 79124933 79124960 . . . Name=10620495 chr5 . BED_feature 66293896 66294054 . . . Name=9737987 chr2 . BED_feature 181214700 181214790 . . . Name=9737987 chr14 . BED_feature 97746095 97746125 . . . Name=10702298 chr19 . BED_feature 26538095 26538123 . . . Name=11050084 chr8 . BED_feature 109400318 109400350 . . . Name=12750453 chr1 . BED_feature 212019619 212019648 . . . Name=12750453 chrX . BED_feature 63597604 63597754 . . . Name=12750453 chr19 . BED_feature 51023956 51023991 . . . Name=7799916 chr20_random . BED_feature 40467 40501 . . . Name=3554244 chr20_random . BED_feature 89201 89236 . . . Name=3554244 chr3 . BED_feature 108927749 108927779 . . . Name=3554244 chr20 . BED_feature 2646428 2646483 . . . Name=3554244 chr20 . BED_feature 3409895 3409932 . . . Name=3554244 chr20 . BED_feature 3468403 3468439 . . . Name=3554244 chr20 . BED_feature 3555765 3555801 . . . Name=3554244 chr20 . BED_feature 4998443 4998478 . . . Name=3554244 chr20 . BED_feature 5056563 5056598 . . . Name=3554244 chr14 . BED_feature 18813520 18813556 . . . Name=12609849 chr1 . BED_feature 155389163 155389765 . . . Name=8474458 chr1 . BED_feature 185974616 185975610 . . . Name=1959592 chr1 . BED_feature 154653098 154653127 . . . Name=8132677 chr3 . BED_feature 3480432 3480463 . . . Name=9038213 chr8 . BED_feature 126655174 126657278 . . . Name=8948424 chr4 . BED_feature 152057522 152057550 . . . Name=11278588 chr1 . BED_feature 78760689 78762243 . . . Name=2761536 chr16 . BED_feature 89936886 89936920 . . . Name=16481392 chr15 . BED_feature 45392170 45392292 . . . Name=11058537 chr6 . BED_feature 76916983 76918759 . . . Name=1976511 chr6 . BED_feature 76919761 76920131 . . . Name=1976511 chr6 . BED_feature 77008395 77008444 . . . Name=1976511 chr10 . BED_feature 16608131 16608178 . . . Name=1976511 chr3 . BED_feature 135730136 135730333 . . . Name=1976511 chr3 . BED_feature 135838137 135838303 . . . Name=1976511 chr15 . BED_feature 49715150 49715266 . . . Name=1976511 chr1 . BED_feature 247222017 247222126 . . . Name=1976511 chr19 . BED_feature 39447683 39447713 . . . Name=9845337 chr19 . BED_feature 39843038 39843093 . . . Name=8101632 chr1 . BED_feature 202936621 202936833 . . . Name=7720874 chr1 . BED_feature 258000894 258000923 . . . Name=7720874 chr6 . BED_feature 27117536 27118509 . . . Name=7689152 chr18 . BED_feature 63640870 63641571 . . . Name=7689152 chr2 . BED_feature 142434225 142434369 . . . Name=7689152 chr1 . BED_feature 95655413 95656362 . . . Name=7689152 chrX . BED_feature 157575697 157576066 . . . Name=7689152 chr3 . BED_feature 88648905 88648943 . . . Name=1588955 chr7 . BED_feature 137835953 137835980 . . . Name=1588954 chr1 . BED_feature 247323761 247323799 . . . Name=8955092 chr6 . BED_feature 138156551 138159155 . . . Name=7980439 chr17 . BED_feature 5126486 5126515 . . . Name=7980439 chr2 . BED_feature 180483681 180483736 . . . Name=9013768 chr12 . BED_feature 32389731 32389761 . . . Name=10385395 chrX . BED_feature 52446767 52446801 . . . Name=10417310 chr6 . BED_feature 140857781 140857813 . . . Name=9013645 chr14 . BED_feature 3050867 3050961 . . . Name=10521429 chr10 . BED_feature 95694277 95694305 . . . Name=3396073 chr2 . BED_feature 174775178 174775205 . . . Name=9642117 chr15 . BED_feature 33068941 33069010 . . . Name=8007990 chr6 . BED_feature 78803194 78803228 . . . Name=10674398 chr19 . BED_feature 54750739 54750768 . . . Name=8144615 chr12 . BED_feature 20903149 20903271 . . . Name=8756618 chr7 . BED_feature 139326343 139326400 . . . Name=7901208 chr6 . BED_feature 140857815 140857843 . . . Name=15013809 chr3 . BED_feature 161554291 161554330 . . . Name=8940000 chr14 . BED_feature 19142237 19142407 . . . Name=3422457 chr10 . BED_feature 87514444 87514574 . . . Name=8051130 chr6 . BED_feature 54941258 54942924 . . . Name=1840505 chr6 . BED_feature 99528686 99530007 . . . Name=1840505 chr6 . BED_feature 99531311 99531403 . . . Name=1840505 chr6 . BED_feature 99545287 99545324 . . . Name=1840505 chr6 . BED_feature 99553815 99553889 . . . Name=1840505 chr5 . BED_feature 145853251 145854686 . . . Name=1840505 chr3 . BED_feature 28852193 28852596 . . . Name=1840505 chr3 . BED_feature 28868192 28869835 . . . Name=1840505 chr2 . BED_feature 137155207 137156708 . . . Name=1840505 chr17 . BED_feature 43385499 43385784 . . . Name=1840505 chr17 . BED_feature 43387084 43387346 . . . Name=1840505 chr19 . BED_feature 39851655 39851706 . . . Name=2881624 chr3 . BED_feature 44441284 44441329 . . . Name=12783165 chr1 . BED_feature 37535826 37535854 . . . Name=11572871 chr11 . BED_feature 79124881 79124916 . . . Name=10567553 chr3 . BED_feature 44441291 44441323 . . . Name=10567553 chr3 . BED_feature 164012142 164012176 . . . Name=8188712 chr10 . BED_feature 95694184 95694256 . . . Name=9564856 chr8 . BED_feature 91956206 91956239 . . . Name=9564856 chr2 . BED_feature 181395722 181395758 . . . Name=12388348 chr2 . BED_feature 27149659 27149820 . . . Name=6088070 chr3 . BED_feature 18499639 18499678 . . . Name=12697699 chr3 . BED_feature 44441186 44441224 . . . Name=10869353 chr12 . BED_feature 9541109 9541163 . . . Name=9632670 chr12 . BED_feature 9596066 9596154 . . . Name=9632670 chr12_random . BED_feature 286812 286853 . . . Name=9632670 chr10 . BED_feature 95692837 95692883 . . . Name=2155782 chr2 . BED_feature 172385321 172385350 . . . Name=9712644 chr14 . BED_feature 19110785 19110913 . . . Name=2454390 chr14 . BED_feature 19142284 19142414 . . . Name=2454390 chr1 . BED_feature 97290829 97291185 . . . Name=1869549 chr10 . BED_feature 109920808 109920836 . . . Name=11955627 chr1 . BED_feature 154653086 154653116 . . . Name=11955627 chr17 . BED_feature 48289921 48289961 . . . Name=2011515 chr9 . BED_feature 86012059 86012095 . . . Name=1655408 chr14 . BED_feature 21847810 21847906 . . . Name=9252424 chr2 . BED_feature 95334254 95334289 . . . Name=9756936 chr16 . BED_feature 89939108 89939142 . . . Name=11509565 chr1 . BED_feature 78761021 78761064 . . . Name=2388627 chr5 . BED_feature 80324942 80324968 . . . Name=1717823 chr1 . BED_feature 154653098 154653129 . . . Name=7499393 chr10 . BED_feature 82582872 82582904 . . . Name=12010125 chr10 . BED_feature 82587871 82587900 . . . Name=12010125 chr20 . BED_feature 11570121 11570153 . . . Name=12010125 chr6 . BED_feature 128386883 128386944 . . . Name=1549467 chr6 . BED_feature 128436438 128436537 . . . Name=1549467 chr1 . BED_feature 161658868 161658950 . . . Name=7828582 chr1 . BED_feature 161662319 161662382 . . . Name=7828582 chr1 . BED_feature 202936490 202936523 . . . Name=2552288 chr20 . BED_feature 32000190 32000224 . . . Name=10640442 chr12 . BED_feature 8296010 8296065 . . . Name=1358758 chr1 . BED_feature 258000874 258000924 . . . Name=1358758 chr4 . BED_feature 120355609 120355637 . . . Name=9174059 chr20 . BED_feature 4636224 4636265 . . . Name=10986117 chr2_random . BED_feature 3022510 3022541 . . . Name=9464279 chr20_random . BED_feature 40467 40502 . . . Name=2555174 chr20 . BED_feature 2646428 2646490 . . . Name=2555174 chr20 . BED_feature 3409895 3409932 . . . Name=2555174 chr20 . BED_feature 3468403 3468439 . . . Name=2555174 chr20 . BED_feature 3555765 3555801 . . . Name=2555174 chr20 . BED_feature 4998443 4998480 . . . Name=2555174 chr20 . BED_feature 5056563 5056600 . . . Name=2555174 chr7 . BED_feature 114015510 114015668 . . . Name=8625802 chr6 . BED_feature 139276089 139276214 . . . Name=8625802 chr2 . BED_feature 120968978 120971415 . . . Name=8625802 chr2 . BED_feature 121155103 121155493 . . . Name=8625802 chr2 . BED_feature 137574739 137575993 . . . Name=8625802 chrX . BED_feature 146510409 146511733 . . . Name=8625802 chr17 . BED_feature 91004378 91004637 . . . Name=8625802 chr16 . BED_feature 82007130 82007983 . . . Name=8625802 chr16 . BED_feature 82009208 82009325 . . . Name=8625802 chr15 . BED_feature 77298063 77298283 . . . Name=8625802 chr15 . BED_feature 77300425 77301661 . . . Name=8625802 chr15 . BED_feature 77303609 77303680 . . . Name=8625802 chr15 . BED_feature 103122684 103122943 . . . Name=8625802 chr8 . BED_feature 104738235 104738483 . . . Name=8625802 chr1 . BED_feature 240316239 240316283 . . . Name=12384280 chr7 . BED_feature 140523539 140523575 . . . Name=1406681 chr6 . BED_feature 31079810 31079847 . . . Name=1406681 chr6 . BED_feature 80532952 80533645 . . . Name=1406681 chr6 . BED_feature 83786388 83786555 . . . Name=1406681 chr6 . BED_feature 135414912 135415048 . . . Name=1406681 chr5 . BED_feature 36372664 36373037 . . . Name=1406681 chr5 . BED_feature 123984235 123984853 . . . Name=1406681 chr5 . BED_feature 145207154 145207290 . . . Name=1406681 chr3 . BED_feature 36635546 36636263 . . . Name=1406681 chr3 . BED_feature 83669418 83670112 . . . Name=1406681 chr3 . BED_feature 84729562 84730254 . . . Name=1406681 chr2 . BED_feature 18125794 18126300 . . . Name=1406681 chr2 . BED_feature 73041142 73041836 . . . Name=1406681 chr2 . BED_feature 78744790 78745497 . . . Name=1406681 chr2 . BED_feature 170307487 170308190 . . . Name=1406681 chr2 . BED_feature 174025968 174026672 . . . Name=1406681 chr2 . BED_feature 223129728 223130032 . . . Name=1406681 chr1 . BED_feature 106346777 106347489 . . . Name=1406681 chr1 . BED_feature 123765543 123765900 . . . Name=1406681 chr15 . BED_feature 62765794 62766509 . . . Name=1406681 chr9 . BED_feature 11037644 11038897 . . . Name=1406681 chr9 . BED_feature 25152173 25152851 . . . Name=1406681 chr9 . BED_feature 42474741 42475492 . . . Name=1406681 chr9 . BED_feature 50106927 50106979 . . . Name=1406681 chr9 . BED_feature 57733721 57733811 . . . Name=1406681 chr9 . BED_feature 93406237 93406297 . . . Name=1406681 chr8 . BED_feature 39475607 39476005 . . . Name=1406681 chr8 . BED_feature 88315848 88316563 . . . Name=1406681 chr13 . BED_feature 2231203 2231322 . . . Name=1406681 chr13 . BED_feature 22886639 22886775 . . . Name=1406681 chr16 . BED_feature 64644795 64644858 . . . Name=1406681 chr6_random . BED_feature 21172 21797 . . . Name=1406681 chr14 . BED_feature 70509837 70510407 . . . Name=1406681 chr14 . BED_feature 87563709 87564093 . . . Name=1406681 chrUn . BED_feature 42219679 42219745 . . . Name=1406681 chrUn . BED_feature 73050413 73050514 . . . Name=1406681 chr19 . BED_feature 34283395 34284137 . . . Name=1406681 chrX . BED_feature 81946176 81946308 . . . Name=1406681 chrX . BED_feature 106098539 106099101 . . . Name=1406681 chrX . BED_feature 106808583 106808720 . . . Name=1406681 chrX . BED_feature 106992317 106992748 . . . Name=1406681 chrX . BED_feature 120503400 120503828 . . . Name=1406681 chrX . BED_feature 131350580 131350664 . . . Name=1406681 chrX . BED_feature 141824752 141825452 . . . Name=1406681 chr4 . BED_feature 158103486 158103531 . . . Name=2479916 chr19 . BED_feature 26190656 26190706 . . . Name=2547796 chr4 . BED_feature 78827973 78828212 . . . Name=2547796 chr16 . BED_feature 13318994 13319040 . . . Name=2547796 chr1 . BED_feature 73096777 73096825 . . . Name=2547796 chr18 . BED_feature 83076552 83077187 . . . Name=2005901 chr6 . BED_feature 14985892 14986418 . . . Name=2005901 chr6 . BED_feature 23664341 23664625 . . . Name=2005901 chr6 . BED_feature 64172068 64172842 . . . Name=2005901 chr6 . BED_feature 127304348 127305042 . . . Name=2005901 chr5 . BED_feature 25294683 25295361 . . . Name=2005901 chr5 . BED_feature 81560512 81560554 . . . Name=2005901 chr5 . BED_feature 130924973 130925713 . . . Name=2005901 chr5 . BED_feature 167402250 167405212 . . . Name=2005901 chr4 . BED_feature 89799038 89799689 . . . Name=2005901 chr4 . BED_feature 154051343 154052264 . . . Name=2005901 chr3 . BED_feature 55201792 55202713 . . . Name=2005901 chr3 . BED_feature 66685187 66686036 . . . Name=2005901 chr3 . BED_feature 71112137 71112785 . . . Name=2005901 chr3 . BED_feature 85607216 85607750 . . . Name=2005901 chr3 . BED_feature 103228338 103228777 . . . Name=2005901 chr3 . BED_feature 136274325 136275069 . . . Name=2005901 chr3 . BED_feature 144110491 144111247 . . . Name=2005901 chr2 . BED_feature 165012790 165013084 . . . Name=2005901 chr2 . BED_feature 174389982 174390338 . . . Name=2005901 chr2 . BED_feature 178470053 178470703 . . . Name=2005901 chr2 . BED_feature 186081557 186082318 . . . Name=2005901 chr1 . BED_feature 106191006 106191855 . . . Name=2005901 chr1 . BED_feature 171346716 171347440 . . . Name=2005901 chr1 . BED_feature 222252313 222253089 . . . Name=2005901 chr9 . BED_feature 52001362 52001893 . . . Name=2005901 chr9 . BED_feature 66781380 66782133 . . . Name=2005901 chrX . BED_feature 41099157 41099927 . . . Name=2005901 chrX . BED_feature 86260155 86261037 . . . Name=2005901 chr13 . BED_feature 71982147 71982779 . . . Name=2005901 chr11 . BED_feature 22930447 22931154 . . . Name=2005901 chr10 . BED_feature 44889483 44890201 . . . Name=2005901 chr10 . BED_feature 53300163 53300307 . . . Name=2005901 chr10 . BED_feature 88930811 88931356 . . . Name=2005901 chr17 . BED_feature 34304730 34305481 . . . Name=2005901 chr16 . BED_feature 24233492 24234263 . . . Name=2005901 chr16 . BED_feature 36523622 36524467 . . . Name=2005901 chr15 . BED_feature 8792276 8792305 . . . Name=2005901 chr15 . BED_feature 12501946 12502378 . . . Name=2005901 chr15 . BED_feature 22783120 22783160 . . . Name=2005901 chr15 . BED_feature 27983964 27984038 . . . Name=2005901 chr14 . BED_feature 18733882 18734697 . . . Name=2005901 chrUn . BED_feature 12670679 12670862 . . . Name=2005901 chr8 . BED_feature 35315946 35316663 . . . Name=2005901 chr8 . BED_feature 113075837 113076605 . . . Name=2005901 chr7 . BED_feature 24531798 24531830 . . . Name=9395525 chr17 . BED_feature 53131798 53131831 . . . Name=12813463 chr3_random . BED_feature 930756 930827 . . . Name=9454838 chr1 . BED_feature 76254922 76255087 . . . Name=15337603 chr10 . BED_feature 28527478 28527527 . . . Name=9478977 chr10 . BED_feature 28533062 28533222 . . . Name=9478977 chr14 . BED_feature 45723217 45723246 . . . Name=9478977 chr7 . BED_feature 104035608 104035780 . . . Name=1406708 chr17 . BED_feature 44709067 44709095 . . . Name=3244361 chr17 . BED_feature 28309949 28309990 . . . Name=11278891 chr4 . BED_feature 165389258 165389286 . . . Name=9242644 chr11 . BED_feature 81471199 81471237 . . . Name=10660604 chr15 . BED_feature 10518099 10518126 . . . Name=10660604 chr6 . BED_feature 26931362 26932057 . . . Name=2586521 chr6 . BED_feature 26933509 26933558 . . . Name=2586521 chr2 . BED_feature 212297457 212297487 . . . Name=10377075 chr1 . BED_feature 97290921 97290965 . . . Name=8065357 chr4 . BED_feature 182898553 182898623 . . . Name=2181446 chr7 . BED_feature 139891415 139891863 . . . Name=2479823 chr7 . BED_feature 140011922 140012881 . . . Name=2479823 chr7 . BED_feature 136708096 136708571 . . . Name=10652357 chr8 . BED_feature 48907765 48907795 . . . Name=12848620 chr16 . BED_feature 7975040 7975080 . . . Name=10973977 chr6 . BED_feature 109559290 109559347 . . . Name=7791782 chr1 . BED_feature 208090838 208091088 . . . Name=7791782 chr10 . BED_feature 70256300 70256356 . . . Name=2106664 chr10 . BED_feature 70257551 70258029 . . . Name=2106664 chr6 . BED_feature 26931942 26931969 . . . Name=7609882 chr13 . BED_feature 80234981 80235020 . . . Name=10988288 chr12 . BED_feature 27707602 27707682 . . . Name=7896732 chr7 . BED_feature 139452799 139452865 . . . Name=1717824 chr19 . BED_feature 41616254 41616300 . . . Name=1717824 chr2 . BED_feature 209447546 209447595 . . . Name=1717824 chr2 . BED_feature 209478540 209478590 . . . Name=1717824 chr2 . BED_feature 209482204 209482254 . . . Name=1717824 chr2 . BED_feature 209518567 209518614 . . . Name=1717824 chrUn . BED_feature 57509250 57509414 . . . Name=8964505 chr5 . BED_feature 157654589 157654799 . . . Name=12188923 chr17 . BED_feature 44709021 44709206 . . . Name=3683387 chr5 . BED_feature 66296325 66296355 . . . Name=12466545 chr6 . BED_feature 55895760 55895951 . . . Name=8098844 chr6 . BED_feature 55955924 55957044 . . . Name=8098844 chrX_random . BED_feature 1831767 1831958 . . . Name=8098844 chr8 . BED_feature 5783962 5783999 . . . Name=9058379 chr10 . BED_feature 53776842 53776882 . . . Name=2830491 chr4 . BED_feature 126331069 126331108 . . . Name=8016112 chr10 . BED_feature 53800559 53800643 . . . Name=2999140 chr19 . BED_feature 25703365 25703401 . . . Name=12917378 chr2 . BED_feature 36432961 36432992 . . . Name=12917378 chr11 . BED_feature 81471196 81471231 . . . Name=9556573 chr13 . BED_feature 48867700 48867826 . . . Name=12505064 chr2 . BED_feature 180483707 180483735 . . . Name=2175918 chr6 . BED_feature 13161174 13161439 . . . Name=11451360 chr1 . BED_feature 205852196 205852261 . . . Name=12493735 chr6 . BED_feature 26931645 26931680 . . . Name=12145309 chr3 . BED_feature 136743229 136743302 . . . Name=1732730 chr6 . BED_feature 48025824 48025859 . . . Name=1732732 chr4 . BED_feature 158185719 158185812 . . . Name=1694011 chr4 . BED_feature 158283658 158283750 . . . Name=1694011 chr4 . BED_feature 158371449 158371541 . . . Name=1694011 chr4 . BED_feature 158630997 158631088 . . . Name=1694011 chr1 . BED_feature 62324045 62324077 . . . Name=10594026 chr8 . BED_feature 38028962 38028994 . . . Name=10594026 chr11 . BED_feature 81471203 81471237 . . . Name=10708554 chr2 . BED_feature 95334254 95334290 . . . Name=8969196 chr16 . BED_feature 7975041 7975081 . . . Name=8969196 chr2 . BED_feature 94554721 94554750 . . . Name=10075714 chr16 . BED_feature 17570716 17570762 . . . Name=8928809 chr5 . BED_feature 19717001 19717032 . . . Name=9875228 chr12 . BED_feature 35664745 35664778 . . . Name=8366095 chr15 . BED_feature 33068994 33069065 . . . Name=8366095 chr19 . BED_feature 39850452 39850479 . . . Name=1584217 chr2 . BED_feature 95334254 95334288 . . . Name=10196233 chr20_random . BED_feature 40468 40502 . . . Name=11297551 chr20_random . BED_feature 89201 89235 . . . Name=11297551 chr20 . BED_feature 3409895 3409931 . . . Name=11297551 chr20 . BED_feature 3468403 3468438 . . . Name=11297551 chr20 . BED_feature 3555766 3555801 . . . Name=11297551 chr20 . BED_feature 4998443 4998479 . . . Name=11297551 chr20 . BED_feature 5056563 5056599 . . . Name=11297551 chr7 . BED_feature 137223756 137223785 . . . Name=1328867 chr8 . BED_feature 82724143 82724194 . . . Name=16198230 chr15 . BED_feature 33068731 33068775 . . . Name=8537395 chr4 . BED_feature 104412024 104412065 . . . Name=9099714 chr3 . BED_feature 118194035 118194191 . . . Name=8195142 chr5 . BED_feature 17514005 17514366 . . . Name=9030569 chr7 . BED_feature 2230889 2230993 . . . Name=1315319 chr7 . BED_feature 2235953 2236200 . . . Name=1315319 chr7 . BED_feature 2237965 2238851 . . . Name=1315319 chr7 . BED_feature 2240118 2242058 . . . Name=1315319 chr7 . BED_feature 2244990 2245138 . . . Name=1315319 chr7 . BED_feature 2247708 2248383 . . . Name=1315319 chr7 . BED_feature 2250257 2251833 . . . Name=1315319 chr7 . BED_feature 2264296 2264914 . . . Name=1315319 chr7 . BED_feature 2268747 2269326 . . . Name=1315319 chr18 . BED_feature 30199964 30200062 . . . Name=3441006 chr2 . BED_feature 133015600 133015640 . . . Name=3441006 chr1 . BED_feature 185972979 185973069 . . . Name=3441006 chr1 . BED_feature 185974485 185975490 . . . Name=3441006 chr14 . BED_feature 87968314 87968342 . . . Name=9030565 chr15 . BED_feature 60794027 60794055 . . . Name=10395650 chrX . BED_feature 26568279 26568315 . . . Name=10395650 chrX . BED_feature 26571542 26571580 . . . Name=10395650 chr1 . BED_feature 205848280 205848607 . . . Name=10956641 chr4 . BED_feature 116975599 116975634 . . . Name=8663388 chr14 . BED_feature 35418313 35418365 . . . Name=7615828 chr15 . BED_feature 83103032 83103065 . . . Name=12568725 chr17 . BED_feature 6287888 6287919 . . . Name=14563703 chr13 . BED_feature 96309607 96309637 . . . Name=11278663 chr2 . BED_feature 174775178 174775259 . . . Name=3499668 chr11 . BED_feature 67609817 67609854 . . . Name=10896677 chr10 . BED_feature 664792 664820 . . . Name=10896677 chr10 . BED_feature 666718 666745 . . . Name=10896677 chr6 . BED_feature 103124701 103124740 . . . Name=7575462 chr8 . BED_feature 4315526 4315554 . . . Name=1850695 chr1 . BED_feature 206632401 206632440 . . . Name=7592662 chr14 . BED_feature 19142320 19142351 . . . Name=2711183 chr1 . BED_feature 203172022 203172059 . . . Name=16165221 chr5 . BED_feature 24455788 24455867 . . . Name=3035717 chr4 . BED_feature 173815403 173815466 . . . Name=3035717 chr4 . BED_feature 173852417 173852480 . . . Name=3035717 chr17 . BED_feature 48465673 48465812 . . . Name=3035717 chr17 . BED_feature 48519755 48519834 . . . Name=3035717 chr17 . BED_feature 48523724 48523879 . . . Name=3035717 chr17 . BED_feature 48775745 48775897 . . . Name=3035717 chr17 . BED_feature 50113536 50113801 . . . Name=3035717 chr17 . BED_feature 50332550 50332689 . . . Name=3035717 chr17 . BED_feature 50339161 50339316 . . . Name=3035717 chr17 . BED_feature 50391420 50391575 . . . Name=3035717 chr17 . BED_feature 50410855 50410994 . . . Name=3035717 chr2 . BED_feature 191075807 191076046 . . . Name=3035717 chr8 . BED_feature 58583593 58585211 . . . Name=8144606 chr13 . BED_feature 48829906 48829943 . . . Name=8413291 chr1 . BED_feature 155389341 155389374 . . . Name=9211912 chrX . BED_feature 85948906 85948939 . . . Name=12841583 chr10 . BED_feature 95694106 95694356 . . . Name=2745428 chr1 . BED_feature 258000870 258000907 . . . Name=16055439 chr5 . BED_feature 17513956 17514362 . . . Name=8232318 chr7 . BED_feature 20348755 20348787 . . . Name=10082537 chr5 . BED_feature 139859998 139860030 . . . Name=10082537 chr4 . BED_feature 119854763 119854795 . . . Name=10082537 chr3 . BED_feature 143750249 143750278 . . . Name=10082537 chr1 . BED_feature 175179477 175179509 . . . Name=10082537 chr9 . BED_feature 110546715 110546747 . . . Name=10082537 chr10 . BED_feature 40444613 40444645 . . . Name=10082537 chr10 . BED_feature 44043304 44043336 . . . Name=10082537 chr19 . BED_feature 21185693 21185724 . . . Name=10082537 chr1_random . BED_feature 3871143 3871176 . . . Name=10082537 chr13 . BED_feature 46262766 46262805 . . . Name=15792957 chr10 . BED_feature 95694268 95694326 . . . Name=2909514 chr7 . BED_feature 20348058 20349168 . . . Name=2247479 chr7 . BED_feature 70298136 70298199 . . . Name=2247479 chr6 . BED_feature 70354276 70354542 . . . Name=2247479 chr6 . BED_feature 133082151 133083081 . . . Name=2247479 chr5 . BED_feature 6275485 6276397 . . . Name=2247479 chr5 . BED_feature 139859184 139860110 . . . Name=2247479 chr5 . BED_feature 139863889 139864450 . . . Name=2247479 chr4 . BED_feature 119854135 119855181 . . . Name=2247479 chr4 . BED_feature 169092274 169092364 . . . Name=2247479 chr3 . BED_feature 51272285 51273397 . . . Name=2247479 chr3 . BED_feature 143749837 143750919 . . . Name=2247479 chr2 . BED_feature 14253134 14253530 . . . Name=2247479 chr1 . BED_feature 80026397 80027532 . . . Name=2247479 chr1 . BED_feature 102489386 102489756 . . . Name=2247479 chr1 . BED_feature 102992035 102992318 . . . Name=2247479 chr1 . BED_feature 106199077 106199114 . . . Name=2247479 chr1 . BED_feature 106201864 106202525 . . . Name=2247479 chr1 . BED_feature 175179034 175180207 . . . Name=2247479 chr9 . BED_feature 110546072 110547179 . . . Name=2247479 chr8 . BED_feature 77796418 77796507 . . . Name=2247479 chr8 . BED_feature 83946536 83946581 . . . Name=2247479 chr11 . BED_feature 4594931 4595910 . . . Name=2247479 chr10 . BED_feature 40444169 40445298 . . . Name=2247479 chr10 . BED_feature 44042141 44043989 . . . Name=2247479 chr10 . BED_feature 56783680 56783745 . . . Name=2247479 chr17 . BED_feature 55638303 55638455 . . . Name=2247479 chr17 . BED_feature 59194875 59195997 . . . Name=2247479 chr14 . BED_feature 17065459 17066754 . . . Name=2247479 chr14 . BED_feature 111622954 111623002 . . . Name=2247479 chr19 . BED_feature 8117803 8118410 . . . Name=2247479 chr19 . BED_feature 21185046 21186127 . . . Name=2247479 chrX . BED_feature 47406747 47407102 . . . Name=2247479 chr1_random . BED_feature 3870551 3871524 . . . Name=2247479 chr16 . BED_feature 19045993 19046073 . . . Name=9328356 chr1 . BED_feature 201389131 201389160 . . . Name=1870124 chr14 . BED_feature 19142261 19142290 . . . Name=3169549 chr1 . BED_feature 154651721 154651751 . . . Name=2341405 chr15 . BED_feature 33068830 33068859 . . . Name=1328857 chr8 . BED_feature 91956211 91956240 . . . Name=1328857 chr7 . BED_feature 139452731 139452944 . . . Name=3352608 chr4 . BED_feature 103908886 103908942 . . . Name=1729611 chr2_random . BED_feature 3022491 3022519 . . . Name=7913466 chr1 . BED_feature 163327124 163327175 . . . Name=8120047 chr13 . BED_feature 19107284 19108726 . . . Name=7913462 chr12 . BED_feature 21478629 21478724 . . . Name=7913462 chr12 . BED_feature 21479816 21480655 . . . Name=7913462 chr12 . BED_feature 21482683 21483542 . . . Name=7913462 chr12 . BED_feature 21501022 21501328 . . . Name=7913462 chr12 . BED_feature 21504989 21505178 . . . Name=7913462 chr12 . BED_feature 21510880 21510992 . . . Name=7913462 chr12 . BED_feature 21515572 21516930 . . . Name=7913462 chr12 . BED_feature 35901884 35901946 . . . Name=7913462 chr12 . BED_feature 35904908 35904996 . . . Name=7913462 chr18 . BED_feature 66312590 66312649 . . . Name=7913462 chr18 . BED_feature 66318409 66318542 . . . Name=7913462 chr18 . BED_feature 66326668 66326715 . . . Name=7913462 chr18 . BED_feature 66327812 66327891 . . . Name=7913462 chr18 . BED_feature 66330331 66330411 . . . Name=7913462 chr18 . BED_feature 66333040 66333223 . . . Name=7913462 chr18 . BED_feature 66352910 66353047 . . . Name=7913462 chr18 . BED_feature 66354980 66355144 . . . Name=7913462 chr18 . BED_feature 66358387 66359978 . . . Name=7913462 chr7 . BED_feature 10809379 10809585 . . . Name=7913462 chr1 . BED_feature 203171680 203171722 . . . Name=7913462 chr1 . BED_feature 23506892 23508078 . . . Name=8647846 chr10 . BED_feature 90393458 90393489 . . . Name=12556524 chr1 . BED_feature 9014799 9015335 . . . Name=2017183 chr1 . BED_feature 9020505 9020678 . . . Name=2017183 chr1 . BED_feature 9023160 9024837 . . . Name=2017183 chr1 . BED_feature 9029876 9031714 . . . Name=2017183 chr6 . BED_feature 138450710 138450752 . . . Name=2536161 chr8 . BED_feature 61461105 61461178 . . . Name=2536161 chr11 . BED_feature 81471199 81471236 . . . Name=8390676 chr2 . BED_feature 181214726 181214790 . . . Name=2586516 chr6 . BED_feature 26931935 26931971 . . . Name=2061309 chr10 . BED_feature 95694278 95694306 . . . Name=2358443 chr5 . BED_feature 143982940 143984529 . . . Name=1652060 chr1 . BED_feature 95892871 95892955 . . . Name=16087728 chr10 . BED_feature 95694277 95694305 . . . Name=8382533 chr3 . BED_feature 164012083 164012111 . . . Name=8382533 chr15 . BED_feature 33068823 33068861 . . . Name=9111345 chr1 . BED_feature 200918369 200918409 . . . Name=2388615 chr7 . BED_feature 80014129 80014162 . . . Name=15860457 chr4 . BED_feature 159190580 159190614 . . . Name=15860457 chr1 . BED_feature 205295186 205295222 . . . Name=15860457 chr19 . BED_feature 37266477 37266518 . . . Name=9264553 chr8 . BED_feature 83313649 83313688 . . . Name=9264553 chr8 . BED_feature 83316460 83316499 . . . Name=9264553 chr3 . BED_feature 13783503 13783539 . . . Name=7885844 chr2 . BED_feature 191044263 191044302 . . . Name=7885844 chr3 . BED_feature 75548102 75549203 . . . Name=7892230 chr1 . BED_feature 95027231 95028125 . . . Name=7892230 chr1 . BED_feature 95029405 95032465 . . . Name=7892230 chr15 . BED_feature 47303028 47303121 . . . Name=8838143 chr3 . BED_feature 164012306 164012334 . . . Name=9786935 chr1 . BED_feature 154651967 154652069 . . . Name=2925653 chr9 . BED_feature 65714904 65715023 . . . Name=1847512 chr10 . BED_feature 95694199 95694316 . . . Name=8144557 chr6 . BED_feature 42178108 42178450 . . . Name=1309950 chr3 . BED_feature 158101548 158101667 . . . Name=1309950 chrX . BED_feature 52445630 52446887 . . . Name=1309950 chr3 . BED_feature 44441288 44441317 . . . Name=1651499 chr1 . BED_feature 205848583 205848676 . . . Name=12107181 chr1 . BED_feature 205886159 205886188 . . . Name=12107181 chr13 . BED_feature 87039698 87040484 . . . Name=12643284 chr3 . BED_feature 154459843 154459899 . . . Name=2279702 chr3 . BED_feature 154482822 154483158 . . . Name=2279702 chr1 . BED_feature 203171510 203172300 . . . Name=2884660 chr2 . BED_feature 180483713 180483741 . . . Name=8612541 chr2 . BED_feature 180483406 180483435 . . . Name=8612540 chr2 . BED_feature 182784707 182784953 . . . Name=8793102 chr2 . BED_feature 182787267 182787383 . . . Name=8793102 chr2 . BED_feature 182789356 182789416 . . . Name=8793102 chr1 . BED_feature 97291101 97291130 . . . Name=10601277 chr7 . BED_feature 120765073 120765114 . . . Name=8289814 chr7 . BED_feature 120783234 120783275 . . . Name=8289814 chr7 . BED_feature 104035613 104035727 . . . Name=2775280 chr10 . BED_feature 89471417 89471519 . . . Name=10801800 chr1 . BED_feature 81944732 81944764 . . . Name=9722582 chr1 . BED_feature 155389340 155389372 . . . Name=9722582 chr3 . BED_feature 44441054 44441355 . . . Name=3062372 chr4 . BED_feature 21709926 21709984 . . . Name=8891341 chr4 . BED_feature 21828018 21829568 . . . Name=8891341 chr20_random . BED_feature 40457 40502 . . . Name=2501084 chr20_random . BED_feature 89201 89236 . . . Name=2501084 chr20 . BED_feature 3409895 3409932 . . . Name=2501084 chr20 . BED_feature 3425429 3425469 . . . Name=2501084 chr20 . BED_feature 3468403 3468439 . . . Name=2501084 chr20 . BED_feature 3513857 3513896 . . . Name=2501084 chr20 . BED_feature 3555755 3555801 . . . Name=2501084 chr20 . BED_feature 4998443 4998490 . . . Name=2501084 chr20 . BED_feature 5056563 5056610 . . . Name=2501084 chr2 . BED_feature 180483681 180483774 . . . Name=2153298 chr12 . BED_feature 9541108 9541165 . . . Name=10600171 chr12 . BED_feature 9596069 9596154 . . . Name=10600171 chr12_random . BED_feature 286812 286853 . . . Name=10600171 chr4 . BED_feature 152057521 152057550 . . . Name=8910484 chr5 . BED_feature 165071745 165073864 . . . Name=2967498 chr5 . BED_feature 165200541 165200948 . . . Name=2967498 chr4 . BED_feature 184900213 184900300 . . . Name=8663213 chr10 . BED_feature 83620725 83620765 . . . Name=8663211 chr17 . BED_feature 44344418 44344480 . . . Name=10076996 chr3 . BED_feature 6052523 6052554 . . . Name=8613746 chr1 . BED_feature 159277325 159277731 . . . Name=8613746 chr6 . BED_feature 26931687 26931782 . . . Name=1508198 chr6 . BED_feature 26935227 26935264 . . . Name=1508198 chr10 . BED_feature 95694185 95694257 . . . Name=8636081 chr1 . BED_feature 95892857 95892900 . . . Name=8636081 chr5 . BED_feature 165074077 165074115 . . . Name=8264645 chr18 . BED_feature 12406443 12406471 . . . Name=2601716 chr2 . BED_feature 174775176 174775207 . . . Name=2601716 chr6 . BED_feature 109558821 109558850 . . . Name=10580097 chr5 . BED_feature 80324939 80324968 . . . Name=10580097 chr3 . BED_feature 3459946 3459989 . . . Name=9712664 chr3 . BED_feature 92572011 92572045 . . . Name=8754772 chr3 . BED_feature 75542195 75543137 . . . Name=7935418 chr3 . BED_feature 75547825 75550800 . . . Name=7935418 chr1 . BED_feature 95029923 95030802 . . . Name=7935418 chr2 . BED_feature 51736528 51736910 . . . Name=2869036 chr2 . BED_feature 51745857 51745910 . . . Name=2869036 chr6 . BED_feature 21417633 21417664 . . . Name=9658104 chr19 . BED_feature 39853070 39853122 . . . Name=2889531 chr9 . BED_feature 70772382 70772413 . . . Name=12372417 chr14 . BED_feature 21847826 21847883 . . . Name=8264581 chr1 . BED_feature 83489341 83489368 . . . Name=11129950 chr1 . BED_feature 212163559 212163699 . . . Name=8224520 chr1 . BED_feature 212298956 212299096 . . . Name=8224520 chr17 . BED_feature 44709067 44709212 . . . Name=3169002 chr1 . BED_feature 81230297 81230356 . . . Name=2726759 chr1 . BED_feature 81266716 81266995 . . . Name=2726759 chr1 . BED_feature 81345296 81345575 . . . Name=2726759 chr1 . BED_feature 81408546 81408605 . . . Name=2726759 chr1 . BED_feature 81628279 81628339 . . . Name=2726759 chr1 . BED_feature 81780215 81780279 . . . Name=2726759 chr1 . BED_feature 81840002 81840083 . . . Name=2726759 chr1 . BED_feature 81867029 81867110 . . . Name=2726759 chr5 . BED_feature 165074128 165074170 . . . Name=2522932 chr2 . BED_feature 174775176 174775205 . . . Name=2847919 chr10 . BED_feature 56410822 56410853 . . . Name=9624121 chr4 . BED_feature 21829156 21829196 . . . Name=9624121 chr9 . BED_feature 20158682 20158710 . . . Name=9624121 chr6 . BED_feature 13161120 13161490 . . . Name=9773974 chr3 . BED_feature 137776222 137776254 . . . Name=8262963 chr3 . BED_feature 137792320 137792352 . . . Name=8262963 chr3 . BED_feature 137861857 137862694 . . . Name=8262963 chr3 . BED_feature 138088128 138089463 . . . Name=8262963 chr3 . BED_feature 138233790 138233822 . . . Name=8262963 chr3 . BED_feature 138333351 138334178 . . . Name=8262963 chr3 . BED_feature 138495773 138496574 . . . Name=8262963 chr12 . BED_feature 42931110 42931193 . . . Name=1673926 chr12 . BED_feature 42936668 42937243 . . . Name=1673926 chr10 . BED_feature 72081211 72081418 . . . Name=1673926 chr10 . BED_feature 72086083 72086284 . . . Name=1673926 chr10 . BED_feature 72162126 72162289 . . . Name=1673926 chr10 . BED_feature 72168713 72168798 . . . Name=1673926 chr10 . BED_feature 72186370 72186997 . . . Name=1673926 chr10_random . BED_feature 695946 696073 . . . Name=1673926 chr7 . BED_feature 10791311 10791383 . . . Name=2200736 chr7 . BED_feature 10813079 10813165 . . . Name=2200736 chr19 . BED_feature 41616266 41616293 . . . Name=2200736 chr1 . BED_feature 20998724 20999025 . . . Name=2026618 chr1 . BED_feature 90576757 90576785 . . . Name=8668155 chr2 . BED_feature 181214666 181214792 . . . Name=16204235 chr3 . BED_feature 161554280 161554804 . . . Name=8036172 chr4 . BED_feature 158103527 158103571 . . . Name=9731707 chr2 . BED_feature 59677644 59677674 . . . Name=9731707 chr2 . BED_feature 59680755 59680784 . . . Name=9731707 chr14 . BED_feature 21847877 21847906 . . . Name=1557422 chr7 . BED_feature 10419997 10420281 . . . Name=1603088 chr17 . BED_feature 44709072 44709101 . . . Name=2717408 chr3 . BED_feature 44441291 44441325 . . . Name=9668074 chr5 . BED_feature 66296281 66296332 . . . Name=1956774 chr2 . BED_feature 181214743 181214791 . . . Name=1956774 chr9 . BED_feature 71966732 71966762 . . . Name=7693708 chr7 . BED_feature 11164585 11164626 . . . Name=15225122 chr6 . BED_feature 26931486 26932030 . . . Name=2046665 chr11 . BED_feature 81471199 81471236 . . . Name=8389766 chr7 . BED_feature 24458490 24458520 . . . Name=16339156 chr2 . BED_feature 36432961 36432991 . . . Name=10713139 chrX . BED_feature 24685278 24685478 . . . Name=2304462 chrX . BED_feature 24696392 24696625 . . . Name=2304462 chr18 . BED_feature 25027873 25028105 . . . Name=1847666 chr9 . BED_feature 63212561 63212590 . . . Name=1847666 chr9 . BED_feature 63234520 63234645 . . . Name=1847666 chr4 . BED_feature 115454232 115454259 . . . Name=1847666 chr3 . BED_feature 13783503 13783539 . . . Name=11018030 chr2 . BED_feature 191044180 191044302 . . . Name=11018030 chr5 . BED_feature 165074299 165074326 . . . Name=15764815 chr17 . BED_feature 28309968 28310005 . . . Name=15764815 chr7 . BED_feature 24531801 24531832 . . . Name=8702983 chr11 . BED_feature 79124935 79124965 . . . Name=8702983 chr14 . BED_feature 19110766 19110885 . . . Name=2455718 chr6 . BED_feature 26931933 26931970 . . . Name=2388831 chr12 . BED_feature 42919574 42919608 . . . Name=1748280 chr2 . BED_feature 212297456 212297499 . . . Name=7537851 chr6 . BED_feature 76920419 76920446 . . . Name=8920965 chr1 . BED_feature 211761741 211761769 . . . Name=8920965 chr3 . BED_feature 44441288 44441328 . . . Name=2160464 chr13 . BED_feature 85793037 85793185 . . . Name=15731358 chr13 . BED_feature 40500601 40500630 . . . Name=2027757 chr1 . BED_feature 78324519 78324548 . . . Name=2027757 chr5 . BED_feature 19716826 19716853 . . . Name=8405996 chrX . BED_feature 85946856 85949621 . . . Name=8379933 chr3 . BED_feature 76307198 76307240 . . . Name=8617799 chr3 . BED_feature 44441331 44441385 . . . Name=15085339 chr10 . BED_feature 95694184 95694216 . . . Name=2211620 chr8 . BED_feature 83313855 83313884 . . . Name=8391636 chr18 . BED_feature 25622617 25622645 . . . Name=7799965 chr8 . BED_feature 61793836 61793978 . . . Name=8119192 chr3 . BED_feature 164012015 164012064 . . . Name=9544984 chr3 . BED_feature 151428680 151428718 . . . Name=8524227 chr1 . BED_feature 128843972 128844010 . . . Name=8524227 chr2 . BED_feature 212297457 212297489 . . . Name=7692229 chr12 . BED_feature 9541092 9541139 . . . Name=7499421 chr12 . BED_feature 9596053 9596131 . . . Name=7499421 chr12_random . BED_feature 286796 286844 . . . Name=7499421 chr14 . BED_feature 92788598 92789167 . . . Name=8626808 chr14 . BED_feature 87950092 87950131 . . . Name=9497382 chr10 . BED_feature 65036947 65036974 . . . Name=9714306 chr6 . BED_feature 21417533 21417638 . . . Name=7667089 chr17 . BED_feature 44710579 44710640 . . . Name=3481434 chr10 . BED_feature 95694280 95694309 . . . Name=8132622 chr2 . BED_feature 181214118 181214342 . . . Name=8449904 chr3 . BED_feature 76301110 76301137 . . . Name=8662964 chr3 . BED_feature 164011950 164011986 . . . Name=1848696 chr2 . BED_feature 174727221 174727250 . . . Name=1942067 chr12 . BED_feature 42919434 42919644 . . . Name=8367288 chr1 . BED_feature 211761741 211761797 . . . Name=8216221 chr8 . BED_feature 5784011 5784039 . . . Name=7588292 chr14 . BED_feature 87950092 87950127 . . . Name=10358076 chr6 . BED_feature 26931645 26931676 . . . Name=11861523 chr1 . BED_feature 228933319 228933690 . . . Name=14673170 chr2 . BED_feature 212297457 212297490 . . . Name=10833420 chr2 . BED_feature 181214754 181214782 . . . Name=8165139 chr19 . BED_feature 37266478 37266518 . . . Name=9144242 chr8 . BED_feature 83313649 83313688 . . . Name=9144242 chr8 . BED_feature 83316460 83316499 . . . Name=9144242 chr1 . BED_feature 80309881 80309922 . . . Name=9224955 chr10 . BED_feature 95694111 95694156 . . . Name=9765286 chr4 . BED_feature 158103540 158103572 . . . Name=11319221 chr1 . BED_feature 95892548 95892583 . . . Name=11682622 chr5 . BED_feature 17161946 17162352 . . . Name=2439693 chr17 . BED_feature 48290092 48290226 . . . Name=1718964 chr1 . BED_feature 95892881 95892915 . . . Name=15961509 chr14 . BED_feature 87950097 87950131 . . . Name=10880363 chr1 . BED_feature 95892544 95892900 . . . Name=10935547 chr10 . BED_feature 72460510 72460539 . . . Name=7545164 chr2 . BED_feature 180483339 180483780 . . . Name=2308930 chr19 . BED_feature 37266473 37266506 . . . Name=12023900 chr5 . BED_feature 16139725 16139762 . . . Name=3165490 chr11 . BED_feature 50537236 50537273 . . . Name=3165490 chr15 . BED_feature 1142334 1142393 . . . Name=3165490 chr6 . BED_feature 78009636 78009664 . . . Name=11891324 chr11 . BED_feature 80031566 80032076 . . . Name=8413271 chr11 . BED_feature 80109179 80109689 . . . Name=8413271 chr11 . BED_feature 80169746 80170257 . . . Name=8413271 chrX . BED_feature 24685340 24685443 . . . Name=8496174 chr12 . BED_feature 19555415 19555468 . . . Name=8288642 chr14 . BED_feature 18813330 18813382 . . . Name=8288642 chr5 . BED_feature 78091354 78091417 . . . Name=2463987 chr5 . BED_feature 78165900 78165963 . . . Name=2463987 chr5 . BED_feature 78218631 78218694 . . . Name=2463987 chr5 . BED_feature 78244115 78244178 . . . Name=2463987 chr5 . BED_feature 78270735 78270798 . . . Name=2463987 chr5 . BED_feature 78316190 78316251 . . . Name=2463987 chr5 . BED_feature 78409806 78409869 . . . Name=2463987 chr5 . BED_feature 78440086 78440143 . . . Name=2463987 chr5 . BED_feature 78490563 78490627 . . . Name=2463987 chr5 . BED_feature 78644226 78644288 . . . Name=2463987 chr5 . BED_feature 78683815 78683877 . . . Name=2463987 chr5 . BED_feature 78709792 78709856 . . . Name=2463987 chr5 . BED_feature 78770226 78770289 . . . Name=2463987 chr5 . BED_feature 78805328 78805391 . . . Name=2463987 chr5 . BED_feature 78820150 78820213 . . . Name=2463987 chr5 . BED_feature 78911595 78911634 . . . Name=2463987 chr5 . BED_feature 78936471 78936534 . . . Name=2463987 chr5 . BED_feature 78990258 78990320 . . . Name=2463987 chr5 . BED_feature 79017595 79017659 . . . Name=2463987 chr5 . BED_feature 79083559 79083622 . . . Name=2463987 chr5 . BED_feature 79101332 79101395 . . . Name=2463987 chr19 . BED_feature 13962434 13963095 . . . Name=12637567 chr5 . BED_feature 66296211 66296240 . . . Name=11095981 chr19 . BED_feature 37266471 37266506 . . . Name=8396148 chr8 . BED_feature 83313656 83313690 . . . Name=8396148 chr8 . BED_feature 83316467 83316501 . . . Name=8396148 chr7 . BED_feature 141772422 141775242 . . . Name=1684715 chr7 . BED_feature 141778586 141778731 . . . Name=1684715 chr10 . BED_feature 85020103 85020245 . . . Name=1684715 chr10 . BED_feature 85032737 85032897 . . . Name=1684715 chr10 . BED_feature 85036914 85037064 . . . Name=1684715 chr4 . BED_feature 80490431 80490494 . . . Name=1684715 chr4 . BED_feature 80502678 80502724 . . . Name=1684715 chr4 . BED_feature 80506433 80506593 . . . Name=1684715 chr4 . BED_feature 80515872 80516035 . . . Name=1684715 chr9 . BED_feature 87036985 87037018 . . . Name=8632018 chr2 . BED_feature 181178018 181178044 . . . Name=7665553 chr1 . BED_feature 74359078 74359121 . . . Name=15502011 chr1 . BED_feature 74605348 74605424 . . . Name=15502011 chr1 . BED_feature 75708123 75708199 . . . Name=15502011 chr2 . BED_feature 180483274 180483302 . . . Name=8381969 chr3 . BED_feature 6666298 6666564 . . . Name=8381967 chr3 . BED_feature 6670337 6670447 . . . Name=8381967 chr3 . BED_feature 6678140 6678293 . . . Name=8381967 chr3 . BED_feature 6683841 6683951 . . . Name=8381967 chr3 . BED_feature 6685834 6685928 . . . Name=8381967 chr3 . BED_feature 6689101 6689303 . . . Name=8381967 chr2 . BED_feature 181214667 181214850 . . . Name=8246989 chr20 . BED_feature 4636131 4636184 . . . Name=3114745 chr2 . BED_feature 181214568 181214598 . . . Name=2019572 chr1 . BED_feature 97291102 97291130 . . . Name=10529375 chr7 . BED_feature 24531805 24531838 . . . Name=12791769 chr14 . BED_feature 19142222 19142286 . . . Name=2601696 chr18 . BED_feature 27343020 27343172 . . . Name=7877619 chr15 . BED_feature 33068743 33068778 . . . Name=11136726 chr1 . BED_feature 170639999 170640038 . . . Name=11136726 chr1 . BED_feature 170642591 170642636 . . . Name=11136726 chr2 . BED_feature 180483319 180483749 . . . Name=7877617 chr7 . BED_feature 104035679 104035708 . . . Name=1508216 chr10 . BED_feature 83622836 83623072 . . . Name=2127540 chr5 . BED_feature 165062215 165062246 . . . Name=8164667 chr13 . BED_feature 88048990 88049077 . . . Name=8289804 chr2 . BED_feature 197102306 197102390 . . . Name=8289804 chr3 . BED_feature 164012334 164012366 . . . Name=2850495 chr5 . BED_feature 128719271 128719301 . . . Name=12385751 chr5 . BED_feature 128736713 128736741 . . . Name=12385751 chr1 . BED_feature 231981145 231981173 . . . Name=12385751 chr4 . BED_feature 152057616 152057756 . . . Name=1827795 chr1 . BED_feature 95027478 95027555 . . . Name=7971966 chr9 . BED_feature 70771186 70771269 . . . Name=1404598 chr7 . BED_feature 141164180 141164224 . . . Name=1356762 chr7 . BED_feature 141165432 141167383 . . . Name=1356762 chr7 . BED_feature 141182389 141182557 . . . Name=1356762 chr7 . BED_feature 141188409 141189249 . . . Name=1356762 chr3 . BED_feature 55445238 55445302 . . . Name=1356762 chr1 . BED_feature 226420948 226421923 . . . Name=1356762 chr1 . BED_feature 226444827 226446364 . . . Name=1356762 chr10 . BED_feature 90393480 90393509 . . . Name=12954759 chr3 . BED_feature 6052520 6052553 . . . Name=14506227 chr13 . BED_feature 87039905 87039934 . . . Name=1705013 chr5 . BED_feature 143983100 143983218 . . . Name=1705013 chr17 . BED_feature 40685480 40685549 . . . Name=9931418 chr10 . BED_feature 39220655 39220779 . . . Name=2342469 chr10 . BED_feature 39221786 39221872 . . . Name=2342469 chr10 . BED_feature 39223215 39227535 . . . Name=2342469 chr12 . BED_feature 35664738 35664965 . . . Name=7935447 chr12 . BED_feature 35664751 35664780 . . . Name=7961957 chr15 . BED_feature 33068725 33068767 . . . Name=7961957 chr10 . BED_feature 95694178 95694216 . . . Name=1976240 chr11 . BED_feature 81471199 81471236 . . . Name=10428876 chr4_random . BED_feature 1954229 1954274 . . . Name=12397359 chr2 . BED_feature 181177987 181178044 . . . Name=8798690 chr3 . BED_feature 164007861 164007902 . . . Name=2355922 chr8 . BED_feature 83312932 83313881 . . . Name=2160079 chr8 . BED_feature 83315617 83316501 . . . Name=2160079 chr4 . BED_feature 158102468 158103731 . . . Name=2466233 chr1 . BED_feature 203171633 203171747 . . . Name=10842166 chr14 . BED_feature 86614943 86614971 . . . Name=1406648 chr11 . BED_feature 79124924 79124960 . . . Name=2875459 chr3 . BED_feature 164012298 164012333 . . . Name=2875459 chr2 . BED_feature 174775176 174775205 . . . Name=1922032 chr20 . BED_feature 6541437 6541465 . . . Name=10634806 chr6 . BED_feature 21417658 21417732 . . . Name=9512555 chr5 . BED_feature 17514717 17514750 . . . Name=2837758 chr11 . BED_feature 79124931 79124959 . . . Name=2837758 chr14 . BED_feature 86615062 86615092 . . . Name=12540614 chr10 . BED_feature 95694277 95694307 . . . Name=1985929 chr3 . BED_feature 44441220 44441254 . . . Name=8164696 genometools-1.5.1/testdata/bed_files/no_thick_region.bed000066400000000000000000000004401211610345200234040ustar00rootroot00000000000000chr1 11873 14409 uc001aaa.3 0 + 11873 11873 0 3 354,109,1189, 0,739,1347, chr1 11873 14409 uc010nxq.1 0 + 12189 13639 0 3 354,127,1007, 0,721,1529, chr1 11873 14409 uc010nxr.1 0 + 11873 11873 0 3 354,52,1189, 0,772,1347, genometools-1.5.1/testdata/bed_files/no_thick_region.gff3000066400000000000000000000017401211610345200235030ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr1 11874 14409 chr1 . BED_feature 11874 14409 0 + . ID=BED_feature1;Name=uc001aaa.3 chr1 . BED_block 11874 12227 0 + . Parent=BED_feature1;Name=uc001aaa.3 chr1 . BED_block 12613 12721 0 + . Parent=BED_feature1;Name=uc001aaa.3 chr1 . BED_block 13221 14409 0 + . Parent=BED_feature1;Name=uc001aaa.3 ### chr1 . BED_feature 11874 14409 0 + . ID=BED_feature2;Name=uc010nxq.1 chr1 . BED_block 11874 12227 0 + . Parent=BED_feature2;Name=uc010nxq.1 chr1 . BED_thick_feature 12190 13639 0 + . Parent=BED_feature2;Name=uc010nxq.1 chr1 . BED_block 12595 12721 0 + . Parent=BED_feature2;Name=uc010nxq.1 chr1 . BED_block 13403 14409 0 + . Parent=BED_feature2;Name=uc010nxq.1 ### chr1 . BED_feature 11874 14409 0 + . ID=BED_feature3;Name=uc010nxr.1 chr1 . BED_block 11874 12227 0 + . Parent=BED_feature3;Name=uc010nxr.1 chr1 . BED_block 12646 12697 0 + . Parent=BED_feature3;Name=uc010nxr.1 chr1 . BED_block 13221 14409 0 + . Parent=BED_feature3;Name=uc010nxr.1 ### genometools-1.5.1/testdata/bed_files/track_offset.bed000066400000000000000000000005511211610345200227200ustar00rootroot00000000000000##Example 3 from Custom Annotation Tracks User's Guide browser position chr22:1000-10000 browser hide all track name="BED track" description="BED format custom track example" visibility=2 color=0,128,0 offset=1000 useScore=1 chr22 1000 5000 itemA 960 + 1100 4700 0 2 1567,1488, 0,2512 chr22 2000 7000 itemB 200 - 2200 6950 0 4 433,100,550,1500 0,500,2000,3500 genometools-1.5.1/testdata/bed_files/track_offset.gff3000066400000000000000000000013501211610345200230110ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr22 2001 8000 chr22 . BED_feature 2001 6000 960 + . ID=BED_feature1;Name=itemA chr22 . BED_block 2001 3567 960 + . Parent=BED_feature1;Name=itemA chr22 . BED_thick_feature 2101 5700 960 + . Parent=BED_feature1;Name=itemA chr22 . BED_block 4513 6000 960 + . Parent=BED_feature1;Name=itemA ### chr22 . BED_feature 3001 8000 200 - . ID=BED_feature2;Name=itemB chr22 . BED_block 3001 3433 200 - . Parent=BED_feature2;Name=itemB chr22 . BED_thick_feature 3201 7950 200 - . Parent=BED_feature2;Name=itemB chr22 . BED_block 3501 3600 200 - . Parent=BED_feature2;Name=itemB chr22 . BED_block 5001 5550 200 - . Parent=BED_feature2;Name=itemB chr22 . BED_block 6501 8000 200 - . Parent=BED_feature2;Name=itemB ### genometools-1.5.1/testdata/bigfonts.style000066400000000000000000000043431211610345200205560ustar00rootroot00000000000000--[[ This is the GenomeTools annotation viewer config file. All options must be set inside the 'style' table. All items in this table must be tables, called 'sections'. Typically there is one section per feature type. Color definitions ----------------- Colors are given as RGB triplets {red=,green=,blue=(,alpha=)} where is a decimal value between 0 and 1. The alpha value is optional, as a default 0.5 will be used. Global format settings ---------------------- Global settings, such as margins, spacers, etc. are found at the end of this file, in the "format" section. ]]-- style = { format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 20, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 19, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 8, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/blank_attributes.gff3000066400000000000000000000002621211610345200217610ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1; ctg123 . gene 1000 9000 . + . ID=gene2; ctg123 . gene 1000 9000 . + . ID=gene3; genometools-1.5.1/testdata/blosum62.c000066400000000000000000000325501211610345200174770ustar00rootroot00000000000000#include int main(int argc, char *argv[]) { int score_matrix[CHAR_MAX][CHAR_MAX] = {{0}}; score_matrix['L']['L'] = 4; score_matrix['L']['V'] = 1; score_matrix['L']['I'] = 2; score_matrix['L']['F'] = 0; score_matrix['L']['K'] = -2; score_matrix['L']['R'] = -2; score_matrix['L']['E'] = -3; score_matrix['L']['D'] = -4; score_matrix['L']['A'] = -1; score_matrix['L']['G'] = -4; score_matrix['L']['S'] = -2; score_matrix['L']['T'] = -1; score_matrix['L']['N'] = -3; score_matrix['L']['Q'] = -2; score_matrix['L']['Y'] = -1; score_matrix['L']['W'] = -2; score_matrix['L']['P'] = -3; score_matrix['L']['H'] = -3; score_matrix['L']['M'] = 2; score_matrix['L']['C'] = -1; score_matrix['L']['X'] = -1; score_matrix['V']['L'] = 1; score_matrix['V']['V'] = 4; score_matrix['V']['I'] = 3; score_matrix['V']['F'] = -1; score_matrix['V']['K'] = -2; score_matrix['V']['R'] = -3; score_matrix['V']['E'] = -2; score_matrix['V']['D'] = -3; score_matrix['V']['A'] = 0; score_matrix['V']['G'] = -3; score_matrix['V']['S'] = -2; score_matrix['V']['T'] = 0; score_matrix['V']['N'] = -3; score_matrix['V']['Q'] = -2; score_matrix['V']['Y'] = -1; score_matrix['V']['W'] = -3; score_matrix['V']['P'] = -2; score_matrix['V']['H'] = -3; score_matrix['V']['M'] = 1; score_matrix['V']['C'] = -1; score_matrix['V']['X'] = -1; score_matrix['I']['L'] = 2; score_matrix['I']['V'] = 3; score_matrix['I']['I'] = 4; score_matrix['I']['F'] = 0; score_matrix['I']['K'] = -3; score_matrix['I']['R'] = -3; score_matrix['I']['E'] = -3; score_matrix['I']['D'] = -3; score_matrix['I']['A'] = -1; score_matrix['I']['G'] = -4; score_matrix['I']['S'] = -2; score_matrix['I']['T'] = -1; score_matrix['I']['N'] = -3; score_matrix['I']['Q'] = -3; score_matrix['I']['Y'] = -1; score_matrix['I']['W'] = -3; score_matrix['I']['P'] = -3; score_matrix['I']['H'] = -3; score_matrix['I']['M'] = 1; score_matrix['I']['C'] = -1; score_matrix['I']['X'] = -1; score_matrix['F']['L'] = 0; score_matrix['F']['V'] = -1; score_matrix['F']['I'] = 0; score_matrix['F']['F'] = 6; score_matrix['F']['K'] = -3; score_matrix['F']['R'] = -3; score_matrix['F']['E'] = -3; score_matrix['F']['D'] = -3; score_matrix['F']['A'] = -2; score_matrix['F']['G'] = -3; score_matrix['F']['S'] = -2; score_matrix['F']['T'] = -2; score_matrix['F']['N'] = -3; score_matrix['F']['Q'] = -3; score_matrix['F']['Y'] = 3; score_matrix['F']['W'] = 1; score_matrix['F']['P'] = -4; score_matrix['F']['H'] = -1; score_matrix['F']['M'] = 0; score_matrix['F']['C'] = -2; score_matrix['F']['X'] = -1; score_matrix['K']['L'] = -2; score_matrix['K']['V'] = -2; score_matrix['K']['I'] = -3; score_matrix['K']['F'] = -3; score_matrix['K']['K'] = 5; score_matrix['K']['R'] = 2; score_matrix['K']['E'] = 1; score_matrix['K']['D'] = -1; score_matrix['K']['A'] = -1; score_matrix['K']['G'] = -2; score_matrix['K']['S'] = 0; score_matrix['K']['T'] = -1; score_matrix['K']['N'] = 0; score_matrix['K']['Q'] = 1; score_matrix['K']['Y'] = -2; score_matrix['K']['W'] = -3; score_matrix['K']['P'] = -1; score_matrix['K']['H'] = -1; score_matrix['K']['M'] = -1; score_matrix['K']['C'] = -3; score_matrix['K']['X'] = -1; score_matrix['R']['L'] = -2; score_matrix['R']['V'] = -3; score_matrix['R']['I'] = -3; score_matrix['R']['F'] = -3; score_matrix['R']['K'] = 2; score_matrix['R']['R'] = 5; score_matrix['R']['E'] = 0; score_matrix['R']['D'] = -2; score_matrix['R']['A'] = -1; score_matrix['R']['G'] = -2; score_matrix['R']['S'] = -1; score_matrix['R']['T'] = -1; score_matrix['R']['N'] = 0; score_matrix['R']['Q'] = 1; score_matrix['R']['Y'] = -2; score_matrix['R']['W'] = -3; score_matrix['R']['P'] = -2; score_matrix['R']['H'] = 0; score_matrix['R']['M'] = -1; score_matrix['R']['C'] = -3; score_matrix['R']['X'] = -1; score_matrix['E']['L'] = -3; score_matrix['E']['V'] = -2; score_matrix['E']['I'] = -3; score_matrix['E']['F'] = -3; score_matrix['E']['K'] = 1; score_matrix['E']['R'] = 0; score_matrix['E']['E'] = 5; score_matrix['E']['D'] = 2; score_matrix['E']['A'] = -1; score_matrix['E']['G'] = -2; score_matrix['E']['S'] = 0; score_matrix['E']['T'] = -1; score_matrix['E']['N'] = 0; score_matrix['E']['Q'] = 2; score_matrix['E']['Y'] = -2; score_matrix['E']['W'] = -3; score_matrix['E']['P'] = -1; score_matrix['E']['H'] = 0; score_matrix['E']['M'] = -2; score_matrix['E']['C'] = -4; score_matrix['E']['X'] = -1; score_matrix['D']['L'] = -4; score_matrix['D']['V'] = -3; score_matrix['D']['I'] = -3; score_matrix['D']['F'] = -3; score_matrix['D']['K'] = -1; score_matrix['D']['R'] = -2; score_matrix['D']['E'] = 2; score_matrix['D']['D'] = 6; score_matrix['D']['A'] = -2; score_matrix['D']['G'] = -1; score_matrix['D']['S'] = 0; score_matrix['D']['T'] = -1; score_matrix['D']['N'] = 1; score_matrix['D']['Q'] = 0; score_matrix['D']['Y'] = -3; score_matrix['D']['W'] = -4; score_matrix['D']['P'] = -1; score_matrix['D']['H'] = -1; score_matrix['D']['M'] = -3; score_matrix['D']['C'] = -3; score_matrix['D']['X'] = -1; score_matrix['A']['L'] = -1; score_matrix['A']['V'] = 0; score_matrix['A']['I'] = -1; score_matrix['A']['F'] = -2; score_matrix['A']['K'] = -1; score_matrix['A']['R'] = -1; score_matrix['A']['E'] = -1; score_matrix['A']['D'] = -2; score_matrix['A']['A'] = 4; score_matrix['A']['G'] = 0; score_matrix['A']['S'] = 1; score_matrix['A']['T'] = 0; score_matrix['A']['N'] = -2; score_matrix['A']['Q'] = -1; score_matrix['A']['Y'] = -2; score_matrix['A']['W'] = -3; score_matrix['A']['P'] = -1; score_matrix['A']['H'] = -2; score_matrix['A']['M'] = -1; score_matrix['A']['C'] = 0; score_matrix['A']['X'] = 0; score_matrix['G']['L'] = -4; score_matrix['G']['V'] = -3; score_matrix['G']['I'] = -4; score_matrix['G']['F'] = -3; score_matrix['G']['K'] = -2; score_matrix['G']['R'] = -2; score_matrix['G']['E'] = -2; score_matrix['G']['D'] = -1; score_matrix['G']['A'] = 0; score_matrix['G']['G'] = 6; score_matrix['G']['S'] = 0; score_matrix['G']['T'] = -2; score_matrix['G']['N'] = 0; score_matrix['G']['Q'] = -2; score_matrix['G']['Y'] = -3; score_matrix['G']['W'] = -2; score_matrix['G']['P'] = -2; score_matrix['G']['H'] = -2; score_matrix['G']['M'] = -3; score_matrix['G']['C'] = -3; score_matrix['G']['X'] = -1; score_matrix['S']['L'] = -2; score_matrix['S']['V'] = -2; score_matrix['S']['I'] = -2; score_matrix['S']['F'] = -2; score_matrix['S']['K'] = 0; score_matrix['S']['R'] = -1; score_matrix['S']['E'] = 0; score_matrix['S']['D'] = 0; score_matrix['S']['A'] = 1; score_matrix['S']['G'] = 0; score_matrix['S']['S'] = 4; score_matrix['S']['T'] = 1; score_matrix['S']['N'] = 1; score_matrix['S']['Q'] = 0; score_matrix['S']['Y'] = -2; score_matrix['S']['W'] = -3; score_matrix['S']['P'] = -1; score_matrix['S']['H'] = -1; score_matrix['S']['M'] = -1; score_matrix['S']['C'] = -1; score_matrix['S']['X'] = 0; score_matrix['T']['L'] = -1; score_matrix['T']['V'] = 0; score_matrix['T']['I'] = -1; score_matrix['T']['F'] = -2; score_matrix['T']['K'] = -1; score_matrix['T']['R'] = -1; score_matrix['T']['E'] = -1; score_matrix['T']['D'] = -1; score_matrix['T']['A'] = 0; score_matrix['T']['G'] = -2; score_matrix['T']['S'] = 1; score_matrix['T']['T'] = 5; score_matrix['T']['N'] = 0; score_matrix['T']['Q'] = -1; score_matrix['T']['Y'] = -2; score_matrix['T']['W'] = -2; score_matrix['T']['P'] = -1; score_matrix['T']['H'] = -2; score_matrix['T']['M'] = -1; score_matrix['T']['C'] = -1; score_matrix['T']['X'] = 0; score_matrix['N']['L'] = -3; score_matrix['N']['V'] = -3; score_matrix['N']['I'] = -3; score_matrix['N']['F'] = -3; score_matrix['N']['K'] = 0; score_matrix['N']['R'] = 0; score_matrix['N']['E'] = 0; score_matrix['N']['D'] = 1; score_matrix['N']['A'] = -2; score_matrix['N']['G'] = 0; score_matrix['N']['S'] = 1; score_matrix['N']['T'] = 0; score_matrix['N']['N'] = 6; score_matrix['N']['Q'] = 0; score_matrix['N']['Y'] = -2; score_matrix['N']['W'] = -4; score_matrix['N']['P'] = -2; score_matrix['N']['H'] = 1; score_matrix['N']['M'] = -2; score_matrix['N']['C'] = -3; score_matrix['N']['X'] = -1; score_matrix['Q']['L'] = -2; score_matrix['Q']['V'] = -2; score_matrix['Q']['I'] = -3; score_matrix['Q']['F'] = -3; score_matrix['Q']['K'] = 1; score_matrix['Q']['R'] = 1; score_matrix['Q']['E'] = 2; score_matrix['Q']['D'] = 0; score_matrix['Q']['A'] = -1; score_matrix['Q']['G'] = -2; score_matrix['Q']['S'] = 0; score_matrix['Q']['T'] = -1; score_matrix['Q']['N'] = 0; score_matrix['Q']['Q'] = 5; score_matrix['Q']['Y'] = -1; score_matrix['Q']['W'] = -2; score_matrix['Q']['P'] = -1; score_matrix['Q']['H'] = 0; score_matrix['Q']['M'] = 0; score_matrix['Q']['C'] = -3; score_matrix['Q']['X'] = -1; score_matrix['Y']['L'] = -1; score_matrix['Y']['V'] = -1; score_matrix['Y']['I'] = -1; score_matrix['Y']['F'] = 3; score_matrix['Y']['K'] = -2; score_matrix['Y']['R'] = -2; score_matrix['Y']['E'] = -2; score_matrix['Y']['D'] = -3; score_matrix['Y']['A'] = -2; score_matrix['Y']['G'] = -3; score_matrix['Y']['S'] = -2; score_matrix['Y']['T'] = -2; score_matrix['Y']['N'] = -2; score_matrix['Y']['Q'] = -1; score_matrix['Y']['Y'] = 7; score_matrix['Y']['W'] = 2; score_matrix['Y']['P'] = -3; score_matrix['Y']['H'] = 2; score_matrix['Y']['M'] = -1; score_matrix['Y']['C'] = -2; score_matrix['Y']['X'] = -1; score_matrix['W']['L'] = -2; score_matrix['W']['V'] = -3; score_matrix['W']['I'] = -3; score_matrix['W']['F'] = 1; score_matrix['W']['K'] = -3; score_matrix['W']['R'] = -3; score_matrix['W']['E'] = -3; score_matrix['W']['D'] = -4; score_matrix['W']['A'] = -3; score_matrix['W']['G'] = -2; score_matrix['W']['S'] = -3; score_matrix['W']['T'] = -2; score_matrix['W']['N'] = -4; score_matrix['W']['Q'] = -2; score_matrix['W']['Y'] = 2; score_matrix['W']['W'] = 11; score_matrix['W']['P'] = -4; score_matrix['W']['H'] = -2; score_matrix['W']['M'] = -1; score_matrix['W']['C'] = -2; score_matrix['W']['X'] = -2; score_matrix['P']['L'] = -3; score_matrix['P']['V'] = -2; score_matrix['P']['I'] = -3; score_matrix['P']['F'] = -4; score_matrix['P']['K'] = -1; score_matrix['P']['R'] = -2; score_matrix['P']['E'] = -1; score_matrix['P']['D'] = -1; score_matrix['P']['A'] = -1; score_matrix['P']['G'] = -2; score_matrix['P']['S'] = -1; score_matrix['P']['T'] = -1; score_matrix['P']['N'] = -2; score_matrix['P']['Q'] = -1; score_matrix['P']['Y'] = -3; score_matrix['P']['W'] = -4; score_matrix['P']['P'] = 7; score_matrix['P']['H'] = -2; score_matrix['P']['M'] = -2; score_matrix['P']['C'] = -3; score_matrix['P']['X'] = -2; score_matrix['H']['L'] = -3; score_matrix['H']['V'] = -3; score_matrix['H']['I'] = -3; score_matrix['H']['F'] = -1; score_matrix['H']['K'] = -1; score_matrix['H']['R'] = 0; score_matrix['H']['E'] = 0; score_matrix['H']['D'] = -1; score_matrix['H']['A'] = -2; score_matrix['H']['G'] = -2; score_matrix['H']['S'] = -1; score_matrix['H']['T'] = -2; score_matrix['H']['N'] = 1; score_matrix['H']['Q'] = 0; score_matrix['H']['Y'] = 2; score_matrix['H']['W'] = -2; score_matrix['H']['P'] = -2; score_matrix['H']['H'] = 8; score_matrix['H']['M'] = -2; score_matrix['H']['C'] = -3; score_matrix['H']['X'] = -1; score_matrix['M']['L'] = 2; score_matrix['M']['V'] = 1; score_matrix['M']['I'] = 1; score_matrix['M']['F'] = 0; score_matrix['M']['K'] = -1; score_matrix['M']['R'] = -1; score_matrix['M']['E'] = -2; score_matrix['M']['D'] = -3; score_matrix['M']['A'] = -1; score_matrix['M']['G'] = -3; score_matrix['M']['S'] = -1; score_matrix['M']['T'] = -1; score_matrix['M']['N'] = -2; score_matrix['M']['Q'] = 0; score_matrix['M']['Y'] = -1; score_matrix['M']['W'] = -1; score_matrix['M']['P'] = -2; score_matrix['M']['H'] = -2; score_matrix['M']['M'] = 5; score_matrix['M']['C'] = -1; score_matrix['M']['X'] = -1; score_matrix['C']['L'] = -1; score_matrix['C']['V'] = -1; score_matrix['C']['I'] = -1; score_matrix['C']['F'] = -2; score_matrix['C']['K'] = -3; score_matrix['C']['R'] = -3; score_matrix['C']['E'] = -4; score_matrix['C']['D'] = -3; score_matrix['C']['A'] = 0; score_matrix['C']['G'] = -3; score_matrix['C']['S'] = -1; score_matrix['C']['T'] = -1; score_matrix['C']['N'] = -3; score_matrix['C']['Q'] = -3; score_matrix['C']['Y'] = -2; score_matrix['C']['W'] = -2; score_matrix['C']['P'] = -3; score_matrix['C']['H'] = -3; score_matrix['C']['M'] = -1; score_matrix['C']['C'] = 9; score_matrix['C']['X'] = -2; score_matrix['X']['L'] = -1; score_matrix['X']['V'] = -1; score_matrix['X']['I'] = -1; score_matrix['X']['F'] = -1; score_matrix['X']['K'] = -1; score_matrix['X']['R'] = -1; score_matrix['X']['E'] = -1; score_matrix['X']['D'] = -1; score_matrix['X']['A'] = 0; score_matrix['X']['G'] = -1; score_matrix['X']['S'] = 0; score_matrix['X']['T'] = 0; score_matrix['X']['N'] = -1; score_matrix['X']['Q'] = -1; score_matrix['X']['Y'] = -1; score_matrix['X']['W'] = -2; score_matrix['X']['P'] = -2; score_matrix['X']['H'] = -1; score_matrix['X']['M'] = -1; score_matrix['X']['C'] = -2; score_matrix['X']['X'] = -1; return 0; } genometools-1.5.1/testdata/broken_hmmer.hmm000066400000000000000000001071651211610345200210420ustar00rootroot00000000000000HMMER2.0 [2.3.1] NAME RVP ACC PF00077.9 DESC Retroviral aspartyl protease LENG 111 ALPH Amino RF no CS no MAP yes COM hmmbuild -f -F HMM_fs.ann SEED.ann COM hmmcalibrate --seed 0 HMM_fs.ann NSEQ 51 DATE Sun Jun 19 21:22:26 2005 CKSUM 8953 GA 30.90 30.90 TC 30.90 30.90 NC 30.80 30.80 XT -8455 -4 -1000 -1000 -8455 -4 -8455 -4 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10298 -11340 -894 -1115 -701 -1378 -7822 -7693 15 -1344 -3399 -2246 -1189 -3934 -3326 399 -1314 1230 -2615 -318 979 718 2359 1307 -1220 845 -1030 -3371 -516 15 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2052 -10298 -409 -894 -1115 -701 -1378 -7822 -7687 16 -1064 -1060 -2605 -2018 1290 1413 -1327 1050 -1765 -922 -261 501 936 -1530 -1840 -1543 595 -488 2600 -1126 16 - -148 -501 234 42 -377 398 105 -627 209 -465 -721 274 393 46 95 361 118 -367 -295 -250 - -3424 -151 -9302 -24 -5897 -4950 -47 -7822 -7679 17 -980 -2449 -783 986 -2767 -1938 2568 -2517 -196 -2464 -1541 1261 203 1330 -704 1146 386 -2070 -2634 -1951 18 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -8260 -9302 -894 -1115 -4950 -47 -7822 -7672 18 -1437 -1925 -3535 -3416 -3097 -2390 -2946 -2573 -3088 -2770 2381 -2691 3308 -2954 -3088 -1718 2041 -2209 -3572 -3270 19 - -149 -503 230 43 -379 399 109 -625 212 -469 -723 273 396 52 98 359 117 -369 -297 -252 - -1302 -767 -9302 -1975 -423 -4950 -47 -7822 -7665 19 -1259 -2312 -1318 -722 -2538 -2258 -838 -2179 858 -2253 -1440 1068 -2332 975 695 -1219 -1178 2213 -2513 1561 27 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -8260 -9302 -894 -1115 -29 -5627 -7822 -7658 20 -847 -3432 -957 462 -960 -3340 -1981 -1448 436 -634 -2791 -491 2118 1051 -687 -383 749 -2144 2315 731 28 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10298 -11341 -894 -1115 -701 -1378 -7822 -7651 21 -1088 1131 -4662 -4188 1612 -4069 -2874 1932 204 637 -1639 -3681 -4046 -3427 -761 -943 -34 1511 -2605 -216 29 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10298 -11341 -894 -1115 -701 -1378 -7822 -7644 22 -2452 -3925 -942 1691 -4246 -3426 -2084 -3997 1649 -936 -3014 1287 -1040 1294 828 -630 677 -1079 -4108 -3426 30 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10298 -11341 -894 -1115 -701 -1378 -7822 -7637 23 2034 2398 -5057 -4421 1810 1016 -3131 -2025 -4016 -924 1844 -3905 -4309 -3639 -3816 -3344 -2652 555 1332 -2653 31 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7629 24 -2647 -2308 -4662 -4193 -2391 -4068 -2871 472 -3829 2987 518 -3682 -4043 -3429 -3629 -3243 -2572 26 -2596 -2516 32 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7622 25 -5628 -5023 -8088 -7549 -856 -7921 -6741 1263 -7391 2619 169 -7635 -6994 -6230 -6935 -7315 -5497 1828 -5249 -5452 33 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7615 26 -8180 -7105 4231 -7058 -8479 -6868 -7237 -9512 -8031 -8873 -8805 -7310 -7332 -7649 -7848 -8365 -8325 -9151 -7244 -8340 34 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7607 27 -3487 -4085 -6477 -6831 -6723 -4352 -6027 -6620 -6658 -6860 -5914 -5147 -5159 -6133 -6310 -1193 4043 -5308 -6869 -6874 35 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7600 28 -984 -4629 -642 -4548 -6971 3728 -5313 -6910 -5869 -7027 -6197 -4439 -5302 -5176 -6223 -4083 -4357 -5729 -6988 -6725 36 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7592 29 3617 -3983 -6576 -6931 -6685 -4259 -6003 -6539 -6673 -6792 -5825 -5082 -5073 -6107 -6289 -405 -3859 -5208 -6873 -6875 37 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7585 30 -393 -6315 3652 -42 -6580 -4422 -3782 -6502 -4022 -6372 -5690 -3028 -4955 -231 -4876 -986 1082 -5957 -6567 -5554 38 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7577 31 -387 -3589 1933 -316 -745 -3531 2259 1195 684 -1254 -98 19 -3619 -1810 -354 -2453 -749 738 -3858 -3268 39 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7570 32 -3238 922 -5844 -5748 -5592 -4175 579 -5266 -5519 -5557 -4748 831 -4898 -5194 -5465 1981 3125 -632 -5913 -5671 40 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7562 33 -951 492 -5561 -4960 -3005 -4827 -3763 2456 -4588 -1116 1090 -4473 -4849 -4235 -4413 -3933 -1056 2756 -3607 -1 41 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7555 34 -4818 -4371 -7292 -6760 -123 -6859 -5861 2732 -6519 2013 132 -6529 -6451 -5825 -6265 -6093 3 757 -5014 -4957 42 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7547 35 -447 -3926 -2300 566 -4247 -3427 -2085 -3997 1138 -1776 -3015 1277 1513 1048 403 811 1097 -3548 -4109 -3426 43 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -9 -10299 -11341 -894 -1115 -701 -1378 -7822 -7539 36 -626 -3923 105 1878 -4244 -1 -2085 -227 240 -1767 -3013 -244 -666 1431 -372 148 -130 -929 469 59 44 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7532 37 342 449 -2745 461 -784 -3637 1575 860 -408 -2336 1053 1731 496 -2010 850 -871 -83 -848 -3657 -671 45 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10299 -11341 -894 -1115 -701 -1378 -7822 -7524 38 -887 -3913 1994 29 -4228 -3429 2046 -325 -112 -168 -709 315 -335 1034 -1323 149 -1572 -1538 1726 -588 46 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10299 -11341 -894 -1115 -701 -1378 -7822 -7516 39 -1445 226 -919 -1030 1427 700 -3113 334 -3975 1271 -166 -1412 -4295 -3606 -998 -3327 -2642 -412 4026 -118 47 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10299 -11341 -894 -1115 -701 -1378 -7822 -7508 40 -2452 384 318 -750 -402 -946 472 -3992 465 -1507 -3012 229 2812 1267 -946 73 -2391 -1217 -4106 -3424 48 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -56 -10299 -4990 -894 -1115 -701 -1378 -7822 -7500 41 -1143 1797 -1376 -217 135 1193 -2574 -308 -201 899 -15 -2836 -446 -2447 1085 -603 -108 6 -3299 -2869 49 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10253 -11296 -894 -1115 -1503 -628 -7822 -7492 42 -1201 -3885 482 -362 -4206 -813 770 213 628 -651 -2974 1844 624 -1585 240 1186 -41 -3507 -4068 -3386 50 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -678 -10253 -1440 -894 -1115 -1503 -628 -7822 -7484 43 -2035 -2138 -3250 -2671 -2124 20 -2208 558 778 -2002 -1329 1239 -1072 -2276 -2636 -2435 -401 118 4345 2029 51 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -54 -9586 -5068 -894 -1115 -4063 -89 -7822 -7476 44 -1868 -3006 -1869 -1318 -3206 -132 228 -282 -259 -2968 -2128 -1599 2689 1050 -465 732 -1807 -230 -3266 1381 52 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -613 -9543 -1560 -894 -1115 -2587 -263 -7822 -7468 45 786 -2866 -1415 459 -3137 -147 -1175 1067 1179 -1033 -1968 -1167 -2603 861 365 -309 629 -234 -3080 -2428 53 - -150 -501 234 42 -382 401 105 -623 209 -467 -712 274 395 44 97 358 116 -370 -295 -250 - -606 -1571 -10156 -481 -1817 -2675 -246 -7822 -7459 46 -98 -3136 364 721 -3457 -2638 979 -197 292 -3152 -2226 683 1720 1179 -1385 -1545 1574 -2758 -3320 -2637 56 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -9322 -10365 -894 -1115 -44 -5046 -7822 -7451 47 -512 -3837 -305 -244 -391 -3450 -2113 -3842 1058 -291 -139 661 -3542 -287 -255 -7 214 -32 3613 1209 57 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7443 48 341 -3924 -2299 -828 -4244 1045 -110 -1136 1368 -3940 -3013 474 -352 749 870 -65 1042 -396 -4107 -3425 58 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7435 49 -656 -3911 127 -698 -4226 -546 -2088 -488 -434 -2013 -3002 191 2200 -1631 1190 698 482 273 -4098 -3419 59 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7426 50 -173 401 -2424 -575 -3943 -3488 54 703 1531 -3689 358 -2166 -878 314 -353 -130 1973 628 -3952 -3328 60 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7418 51 -512 -3377 -2697 -828 -711 156 795 778 314 -1895 1716 834 -30 -280 -2480 270 1225 -72 1184 -3158 61 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7409 52 -5185 -4634 -7739 -7281 -284 -7546 -6731 2553 -7156 1054 1742 -7231 -6896 -6333 -6901 -6912 -5110 2416 -5469 -5521 62 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7401 53 -916 -3261 -2879 -1376 -3348 1851 1118 599 -956 378 -2418 -2534 -3785 2032 840 -2655 -2503 450 -3602 -3104 63 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7392 54 -3518 -4216 -4265 -4627 -6681 3516 -5181 -6529 -5566 -6697 -5802 -360 -5026 18 -5781 -98 -140 -5317 -6838 -6516 64 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7384 55 1205 -2802 -5369 -4761 -2836 -4573 -3530 2920 -4376 -177 -2043 -4249 -696 -4012 -4192 -521 -599 1229 -3391 -3044 65 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7375 56 -3271 -3922 -975 -3308 -378 3198 -3656 -4216 -3700 -695 -3716 167 -4565 -3444 -4107 -373 902 -3887 -4871 -4383 66 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -10 -10300 -11342 -894 -1115 -701 -1378 -7822 -7366 57 -2720 -3112 -3474 -2958 -3240 3170 -2836 -2819 -2818 -3103 126 -511 -4073 1121 -3127 -951 -882 -495 -3606 719 67 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10301 -11343 -894 -1115 -701 -1378 -7822 -7359 58 381 -8 -3401 -2834 1406 917 -2645 525 -2675 -2788 -2091 825 356 1990 -1331 153 -313 -44 -3313 -2890 68 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10300 -11342 -894 -1115 -701 -1378 -7822 -7349 59 -1232 497 -4713 -4098 -2539 -18 -3059 2168 1357 -272 -1779 -3738 -999 -3446 -3678 1153 884 -170 -3031 -2681 69 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2253 -10300 -352 -894 -1115 -701 -1378 -7822 -7340 60 -944 -1048 -2205 -1629 -1060 -2312 -1153 1985 -1405 -931 -263 -1572 840 -1226 560 425 1124 893 -1505 -1121 70 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -17 -8064 -9106 -894 -1115 -28 -5682 -7822 -7331 61 -353 216 -2249 762 -3977 -1340 -337 -1191 792 -2373 745 1694 -3387 504 1617 612 -100 -912 -3446 -3232 71 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10300 -11342 -894 -1115 -701 -1378 -7822 -7322 62 -2557 -3146 -1062 -2417 -3210 774 -323 -691 -2292 -1513 -2311 853 952 -2202 -732 117 990 1965 -3508 865 72 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10300 -11342 -894 -1115 -701 -1378 -7822 -7313 63 -1149 -3904 -2310 738 -673 -3431 1168 -210 1909 -1853 -2995 223 -161 1321 1398 -2339 -259 -1514 -4093 510 73 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10300 -11342 -894 -1115 -701 -1378 -7822 -7304 64 -277 -3919 -738 555 1483 348 -2086 -1395 1221 -3933 346 -608 -3520 2241 -703 -261 -2391 -3539 2022 -329 74 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10300 -11343 -894 -1115 -701 -1378 -7822 -7295 65 -2483 -3640 -466 -1923 -375 -3513 -2187 -832 749 -789 -2761 -483 -3602 -113 -34 1556 861 -3198 1828 2685 75 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10300 -11343 -894 -1115 -701 -1378 -7822 -7285 66 -1295 -3923 1393 -119 -4244 -3426 -199 934 31 -215 -3013 495 -58 202 633 453 1073 -3545 891 -3425 76 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10301 -11343 -894 -1115 -701 -1378 -7822 -7276 67 -871 837 -61 88 -541 -939 -1969 -1182 1006 -290 999 1667 -111 1620 -220 -1129 -951 -450 -3365 -3199 77 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -46 -10301 -5387 -894 -1115 -701 -1378 -7822 -7267 68 -1274 -2519 -4849 -4224 -2475 -209 -3059 1882 -3854 147 98 -3788 -1310 909 908 -392 -128 1749 -2974 -460 78 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10266 -11308 -894 -1115 -408 -2022 -7822 -7257 69 -1557 -3357 -2289 1084 -1165 -1228 2156 -1038 319 926 -2729 -685 974 -677 585 -495 45 -1712 741 -787 79 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10301 -11343 -894 -1115 -701 -1378 -7822 -7248 70 -2700 1422 -4931 -4303 -2499 -4235 1236 1659 -370 615 -1746 -3843 1080 -3567 -1003 -1307 723 1818 -3000 -2655 80 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10301 -11343 -894 -1115 -701 -1378 -7822 -7238 71 -2452 405 114 1777 -4244 -1241 -250 -3994 961 -110 -3013 956 -3519 1710 390 -2333 -2391 -701 2507 -3425 81 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10301 -11343 -894 -1115 -701 -1378 -7822 -7229 72 -2698 1467 -4888 -663 -2505 -4228 671 2272 -325 780 -1750 -3823 -4280 -3544 -782 -1305 417 394 2686 651 82 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10301 -11343 -894 -1115 -701 -1378 -7822 -7219 73 -824 1415 733 816 -4170 1733 -2101 768 56 -28 -2968 -2085 -3533 52 932 -1158 -2396 -1613 -4070 -3402 83 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -11 -10301 -11343 -894 -1115 -701 -1378 -7822 -7209 74 -1058 812 1206 -95 1205 1173 1249 -3996 964 -3941 333 -438 -942 202 440 -545 -330 -3547 -4108 -794 84 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -10302 -11344 -894 -1115 -701 -1378 -7822 -7201 75 -2403 -3412 -59 1268 -3957 -430 1553 -3816 2052 309 -2795 -500 -140 11 549 -2285 -518 -3428 -3379 215 85 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -10301 -11343 -894 -1115 -701 -1378 -7822 -7190 76 -2454 -3907 415 100 -4219 128 -2090 83 1016 -357 812 1200 503 -718 -77 -1089 790 -176 -4095 -91 86 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -10301 -11343 -894 -1115 -701 -1378 -7822 -7180 77 -385 31 -4013 -3429 2078 -1316 891 1066 224 -1292 -1897 -193 -917 192 -365 -3092 780 1257 -3138 -398 87 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -10301 -11343 -894 -1115 -701 -1378 -7822 -7170 78 -2468 -3771 -2386 605 -1217 -3470 -2136 -514 1163 -951 410 97 -737 -395 1829 397 1375 -709 -3996 -654 88 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -10301 -11343 -894 -1115 -701 -1378 -7822 -7160 79 -334 -3359 -2322 -686 -3814 2375 2887 -3612 -339 -1643 382 -2072 -939 -1648 671 -1016 -243 -1033 -3382 -3178 89 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -1670 -10301 -561 -894 -1115 -701 -1378 -7822 -7150 80 -1188 -2635 710 652 -2945 -2165 1258 1094 576 -741 -1727 -805 615 2048 -915 -1073 437 -2251 -2824 -2148 90 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -16 -8647 -9689 -894 -1115 -4809 -52 -7822 -7140 81 -1394 2685 -3695 -3067 2179 -2943 -1823 1677 -2674 -1065 -431 -2577 -2994 -2310 443 316 -1337 1422 -1702 -1356 91 - -149 -500 233 43 -377 400 105 -627 210 -465 -721 275 393 45 96 359 117 -370 -295 -250 - -120 -3807 -9689 -1490 -635 -197 -2968 -7822 -7129 82 -484 -3822 -329 -1658 -4140 -3331 1280 487 -41 -3837 -2912 39 726 428 -2079 1262 2353 -3443 -4008 -3327 95 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -10187 -11229 -894 -1115 -212 -2873 -7822 -7119 83 -3322 -3103 -5680 -5058 2559 -4928 -3795 1228 -4672 -395 1130 -4574 2156 -4245 -4462 -4029 -3258 1715 -3553 21 96 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -10302 -11344 -894 -1115 -701 -1378 -7822 -7109 84 -2705 415 -504 -4413 861 -1555 -3123 -16 -4008 2043 931 -3898 -4302 -3631 -618 -3337 -2645 1347 -2989 1768 97 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -10302 -11344 -894 -1115 -701 -1378 -7822 -7098 85 -2641 -2309 -894 -4154 -2393 -2320 1073 1900 -3798 372 601 -961 -4034 -3405 -3610 -3231 509 2532 -2595 -2514 98 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -10302 -11344 -894 -1115 -701 -1378 -7822 -7087 86 -281 -2534 -5011 -4378 -404 1573 1052 1272 -978 1534 308 -535 -4296 -3611 -3794 -3329 -869 539 -2991 -2648 99 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -12 -10302 -11344 -894 -1115 -701 -1378 -7822 -7077 87 -260 248 832 -976 -146 -3463 -2130 -3774 -1735 -3789 360 -341 3264 -1690 -685 30 -337 -3389 -4016 -3369 100 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -584 -10302 -1623 -894 -1115 -701 -1378 -7822 -7066 88 -580 -3446 913 1036 1245 -562 -1612 -3513 -55 -3461 -2536 -229 -3046 32 -1701 1569 635 -940 -3631 732 101 - -150 -501 233 42 -382 397 105 -627 209 -462 -721 278 395 44 95 361 116 -368 -295 -250 - -618 -1556 -10773 -23 -5962 -65 -4512 -7822 -7055 89 -1100 3246 -4423 -1262 -2613 -4147 -3003 1239 -3544 780 -1844 557 -2087 -3278 -3558 766 1954 -2065 -3092 -2732 103 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -13 -10302 -11344 -894 -1115 -701 -1378 -7822 -7044 90 -955 -3511 -2930 -1020 -3665 -1146 -2592 -3275 -2307 357 201 168 3585 -2285 -446 -2835 -2721 -3055 -3883 -3380 104 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -13 -10302 -11344 -894 -1115 -701 -1378 -7822 -7033 91 -749 811 -433 -4214 1025 -1087 -2896 969 -3846 -273 668 -3703 -4068 -3448 -3646 -3250 -160 2543 -2635 1281 105 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -13 -10302 -11344 -894 -1115 -701 -1378 -7822 -7022 92 -3509 -5108 2189 350 -5386 -4036 -3007 -887 -2813 -5108 -4251 3140 1280 -2598 -810 -3311 -128 -4715 -5286 -4504 106 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -2308 -10302 -341 -894 -1115 -701 -1378 -7822 -7011 93 -1096 -1720 -3544 -3702 -4185 2002 -3333 -3971 -3703 -4217 -3293 -2570 -2759 -3300 -3611 846 3096 -2818 -4399 -4249 107 - -149 -500 232 43 -377 398 109 -627 211 -466 -721 278 393 45 95 359 117 -370 -295 -250 - -2201 -995 -1873 -51 -4860 -5018 -45 -7822 -7000 94 -1034 -2366 1575 -86 -2658 -1728 -660 -2397 -425 257 -1589 2646 -1987 -262 -971 679 -1018 -2004 -2663 -1968 109 - -149 -500 232 43 -381 398 105 -624 214 -466 -721 277 393 47 95 359 117 -370 -295 -250 - -2718 -256 -8595 -42 -5122 -3960 -96 -7822 -6989 95 -3496 -3478 -3449 -3298 -1444 -3728 -2105 -3771 -2213 -3376 -3150 -3114 -4001 2913 -2214 -3522 -3501 -3719 5513 -998 111 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -21 -7831 -8873 -894 -1115 -2196 -355 -7822 -6977 96 1533 -1633 -2290 -1725 -1657 -2673 -1472 -1221 -1553 733 2484 -1782 1029 811 -1821 116 89 -1092 -2060 -1649 112 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -17 -8758 -9800 -894 -1115 -34 -5436 -7822 -6967 97 -5096 -4536 -7708 -7309 -3871 -7586 -7043 3206 -7240 2066 -2605 -7269 -6974 -6548 -7087 -6996 -5041 -21 -5739 -5735 113 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -13 -10303 -11345 -894 -1115 -701 -1378 -7822 -6954 98 -3960 -3686 -6317 -5705 -14 -5623 -4441 2510 -5340 2110 -2015 -5270 -5497 -4800 -5092 -1079 -3885 -611 3306 -3745 114 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -13 -10303 -11345 -894 -1115 -701 -1378 -7822 -6943 99 -7966 -6939 -7945 -8331 -8524 3865 -7619 -9551 -8535 -8932 -8840 -8214 -7400 -8391 -7975 -8393 -8242 -9053 -7247 -8536 115 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -10304 -11346 -894 -1115 -701 -1378 -7822 -6932 100 -3913 889 -6386 -5373 -4680 -2438 -4227 196 -3250 -1379 -3699 -4762 -5305 -4045 3985 -4266 -4055 -3520 -5078 -4834 116 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -10303 -11345 -894 -1115 -701 -1378 -7822 -6919 101 -1086 -6563 3346 -716 -6717 -4458 -3836 -6664 -221 -6515 -5872 2434 -5008 -3510 -5038 19 -4667 -6122 -6713 -5652 117 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -10303 -11345 -894 -1115 -701 -1378 -7822 -6907 102 246 640 -5170 -4539 842 -4383 -3262 2219 -4139 1682 163 957 -4425 -3762 -3942 -3471 -2759 416 -3119 -2779 118 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -10303 -11345 -894 -1115 -701 -1378 -7822 -6895 103 -5754 -5164 -708 -7498 -3236 -7836 -6427 234 -7272 2938 2737 -7547 -6901 -6038 -6743 -7170 -5587 -3596 -317 -5208 119 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -10303 -11346 -894 -1115 -701 -1378 -7822 -6883 104 1330 -301 -2336 -923 -4157 -3445 -2107 -1330 517 -3868 -2961 -2092 -3538 2299 920 -5 1872 -1396 -4065 -3400 120 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -10304 -11346 -894 -1115 -701 -1378 -7822 -6870 105 -763 -3456 655 -237 -3983 -789 92 -3834 1973 -2289 -2816 -487 -750 2700 437 76 -2335 -3440 -3438 -3231 121 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -10304 -11346 -894 -1115 -701 -1378 -7822 -6858 106 896 2070 -5057 -4421 859 -1031 -3129 893 -4015 2043 1719 -3905 -4308 -3638 -3815 -3344 -2652 -1949 931 -22 122 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -10304 -11346 -894 -1115 -701 -1378 -7822 -6845 107 -2455 -3928 -1135 -465 -4249 2591 439 -4000 1136 -3944 -3017 281 -3522 1601 -868 -1088 -2395 -710 -4111 -14 123 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -14 -10304 -11346 -894 -1115 -701 -1378 -7822 -6833 108 1936 2988 -4614 -916 -2395 281 -2858 761 -3788 -249 598 -3655 -4033 -3398 -3605 -204 -337 621 -2597 -2515 124 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -15 -10305 -11347 -894 -1115 -701 -1378 -7822 -6821 109 -2471 123 -2402 -699 -3991 -188 -2145 90 1638 -2049 -2856 -2147 -641 1128 747 685 1074 669 -3977 -573 125 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -15 -10304 -11346 -894 -1115 -701 -1378 -7822 -6807 110 -5507 -4974 -7880 -7278 72 -7521 -6198 2146 -7030 2611 897 -7218 -6755 -5932 -6567 -6803 -5364 -466 -4956 52 126 - -149 -500 233 43 -381 399 106 -626 210 -466 -720 275 394 45 96 359 117 -369 -294 -249 - -15 -10304 -11346 -894 -1115 -701 -1378 -7822 -6794 111 -2645 1149 -833 -3299 -187 -4026 1245 835 -3089 -2603 203 1841 -4090 -467 -631 681 947 906 -3168 1512 127 - * * * * * * * * * * * * * * * * * * * * - * * * * * * * -7822 0 genometools-1.5.1/testdata/cds_check_fail_1.gff3000066400000000000000000000004501211610345200215440ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 9 . + . Parent=gene1 dna . CDS 1 9 . + 0 Parent=gene1 dna . exon 11 19 . + . Parent=gene1 dna CDS 11 19 . + 0 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 1 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_fail_2.gff3000066400000000000000000000004521211610345200215470ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 10 . + . Parent=gene1 dna . CDS 1 10 . + 0 Parent=gene1 dna . exon 11 20 . + . Parent=gene1 dna CDS 11 20 . + 2 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 2 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_fail_3.gff3000066400000000000000000000004521211610345200215500ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 11 . + . Parent=gene1 dna . CDS 1 11 . + 0 Parent=gene1 dna . exon 11 21 . + . Parent=gene1 dna CDS 11 21 . + 1 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 0 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_fail_4.gff3000066400000000000000000000004521211610345200215510ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 110 . - . ID=gene1 dna . exon 1 10 . - . Parent=gene1 dna . CDS 1 10 . - 0 Parent=gene1 dna . exon 11 20 . - . Parent=gene1 dna CDS 11 20 . - 2 Parent=gene1 dna . exon 101 110 . - . Parent=gene1 dna . CDS 101 110 . - 0 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_1.gff3000066400000000000000000000004501211610345200215660ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 9 . + . Parent=gene1 dna . CDS 1 9 . + 0 Parent=gene1 dna . exon 11 19 . + . Parent=gene1 dna CDS 11 19 . + 0 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 0 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_10.gff3000066400000000000000000000004521211610345200216500ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . - . ID=gene1 dna . exon 1 10 . - . Parent=gene1 dna . CDS 1 10 . - 0 Parent=gene1 dna . exon 11 19 . - . Parent=gene1 dna CDS 11 19 . - 0 Parent=gene1 dna . exon 101 109 . - . Parent=gene1 dna . CDS 101 109 . - 0 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_11.gff3000066400000000000000000000004521211610345200216510ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 110 . - . ID=gene1 dna . exon 1 10 . - . Parent=gene1 dna . CDS 1 10 . - 2 Parent=gene1 dna . exon 11 19 . - . Parent=gene1 dna CDS 11 19 . - 2 Parent=gene1 dna . exon 101 110 . - . Parent=gene1 dna . CDS 101 110 . - 0 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_12.gff3000066400000000000000000000004521211610345200216520ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 110 . - . ID=gene1 dna . exon 1 10 . - . Parent=gene1 dna . CDS 1 10 . - 1 Parent=gene1 dna . exon 11 20 . - . Parent=gene1 dna CDS 11 20 . - 2 Parent=gene1 dna . exon 101 110 . - . Parent=gene1 dna . CDS 101 110 . - 0 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_2.gff3000066400000000000000000000004501211610345200215670ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 9 . + . Parent=gene1 dna . CDS 1 9 . + 0 Parent=gene1 dna . exon 11 20 . + . Parent=gene1 dna CDS 11 20 . + 0 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 2 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_3.gff3000066400000000000000000000004501211610345200215700ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 9 . + . Parent=gene1 dna . CDS 1 9 . + 0 Parent=gene1 dna . exon 11 21 . + . Parent=gene1 dna CDS 11 21 . + 0 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 1 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_4.gff3000066400000000000000000000004521211610345200215730ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 10 . + . Parent=gene1 dna . CDS 1 10 . + 0 Parent=gene1 dna . exon 11 19 . + . Parent=gene1 dna CDS 11 19 . + 2 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 2 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_5.gff3000066400000000000000000000004521211610345200215740ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 10 . + . Parent=gene1 dna . CDS 1 10 . + 0 Parent=gene1 dna . exon 11 20 . + . Parent=gene1 dna CDS 11 20 . + 2 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 1 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_6.gff3000066400000000000000000000004521211610345200215750ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 10 . + . Parent=gene1 dna . CDS 1 10 . + 0 Parent=gene1 dna . exon 11 21 . + . Parent=gene1 dna CDS 11 21 . + 2 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 0 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_7.gff3000066400000000000000000000004521211610345200215760ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 11 . + . Parent=gene1 dna . CDS 1 11 . + 0 Parent=gene1 dna . exon 11 19 . + . Parent=gene1 dna CDS 11 19 . + 1 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 1 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_8.gff3000066400000000000000000000004521211610345200215770ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 11 . + . Parent=gene1 dna . CDS 1 11 . + 0 Parent=gene1 dna . exon 11 20 . + . Parent=gene1 dna CDS 11 20 . + 1 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 0 Parent=gene1 ### genometools-1.5.1/testdata/cds_check_succ_9.gff3000066400000000000000000000004521211610345200216000ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 200 dna . gene 1 109 . + . ID=gene1 dna . exon 1 11 . + . Parent=gene1 dna . CDS 1 11 . + 0 Parent=gene1 dna . exon 11 21 . + . Parent=gene1 dna CDS 11 21 . + 1 Parent=gene1 dna . exon 101 109 . + . Parent=gene1 dna . CDS 101 109 . + 2 Parent=gene1 ### genometools-1.5.1/testdata/cds_feature_with_multiple_parents.gff3000066400000000000000000000060241211610345200254140ustar00rootroot00000000000000##gff-version 3 ##sequence-region 3L 8617473 8631957 3L FlyBase gene 8617473 8631773 . + . ID=gene1;Name=Zasp66;fullname=Z band alternatively spliced PDZ-motif protein 66;Alias=FBgn0045924,anon-WO0153538.30,CG6416,Zasp66;Ontology_term=SO:0000010,SO:0000087,GO:0007498,GO:0030018,GO:0008157;Dbxref=FlyBase:FBan0006416,FlyBase_Annotation_IDs:CG6416,GB_protein:AAN11990,GB_protein:ACZ94656,GB_protein:ACZ94657,GB_protein:AAN11991,GB_protein:ACZ94655,GB_protein:ACZ94653,GB_protein:AAN11992,GB_protein:ACZ94654,GB_protein:AAF50384,GB_protein:AAO41263,GB_protein:AAO41264,GB_protein:AAF50386,GB_protein:AAO41265,GB:AA697154,GB:AI388325,GB:AW940728,GB:AW941338,GB:AX201646,GB:AY058415,GB_protein:AAL13644,GB:AY060961,GB_protein:AAL28509,UniProt/TrEMBL:Q7KUB5,UniProt/TrEMBL:Q86BH5,UniProt/TrEMBL:Q86BH6,UniProt/TrEMBL:Q8IQB4,UniProt/TrEMBL:Q95S47,UniProt/TrEMBL:Q95TZ7,UniProt/TrEMBL:Q9VSN0,UniProt/TrEMBL:Q9VSN2,INTERPRO:IPR001478,INTERPRO:IPR006643,EntrezGene:38988,UniProt/TrEMBL:E1JI73,UniProt/TrEMBL:E1JI76,UniProt/TrEMBL:E1JI74,UniProt/TrEMBL:E1JI77,UniProt/TrEMBL:Q058U1,InterologFinder:38988,BIOGRID:64396,FlyAtlas:CG6416-RG%3BCG6416-RG%3BCG6416-RE,GenomeRNAi:38988;gbunit=AE014296;derived_computed_cyto=66D9-66D9 3L FlyBase mRNA 8617473 8631773 . + . ID=mRNA1;Parent=gene1;Name=Zasp66-RE;Alias=CG6416-RE;Dbxref=FlyBase_Annotation_IDs:CG6416-RE,REFSEQ:NM_168283;score_text=Moderately Supported;score=7 3L FlyBase CDS 8617583 8617783 . + 0 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8620061 8620209 . + 0 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8620527 8620830 . + 1 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8628781 8628852 . + 1 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8630539 8630698 . + 1 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8631367 8631453 . + 0 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase mRNA 8623308 8631773 . + . ID=mRNA11;Parent=gene1;Name=Zasp66-RH;Alias=CG6416-RH;Dbxref=FlyBase_Annotation_IDs:CG6416-RH,REFSEQ:NM_176304;score_text=Strongly Supported;score=15 3L FlyBase CDS 8623655 8623735 . + 0 Parent=mRNA11;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8627683 8627883 . + 0 Parent=mRNA1,mRNA11;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8628102 8628181 . + 0 Parent=mRNA1,mRNA11;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8631257 8631295 . + 1 Parent=mRNA1,mRNA11;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8631367 8631373 . + 1 Parent=mRNA11;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase mRNA 8623308 8631773 . + . ID=mRNA12;Parent=gene1;Name=Zasp66-RI;Alias=CG6416-RI;Dbxref=FlyBase_Annotation_IDs:CG6416-RI,REFSEQ:NM_176303;score_text=Moderately Supported;score=7 3L FlyBase mRNA 8623370 8631773 . + . ID=mRNA13;Parent=gene1;Name=Zasp66-RJ;Alias=CG6416-RG,CG6416-RJ;Dbxref=FlyBase_Annotation_IDs:CG6416-RJ,REFSEQ:NM_176306;score_text=Moderately Supported;score=7 3L FlyBase CDS 8623655 8623735 . + 0 Parent=mRNA13;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8630539 8630698 . + 1 Parent=mRNA13;Name=Zasp66-cds;parent_type=mRNA ### genometools-1.5.1/testdata/cds_feature_with_multiple_parents_tidied.gff3000066400000000000000000000061161211610345200267400ustar00rootroot00000000000000##gff-version 3 ##sequence-region 3L 8617473 8631957 3L FlyBase gene 8617473 8631773 . + . ID=gene1;Name=Zasp66;fullname=Z band alternatively spliced PDZ-motif protein 66;Alias=FBgn0045924,anon-WO0153538.30,CG6416,Zasp66;Ontology_term=SO:0000010,SO:0000087,GO:0007498,GO:0030018,GO:0008157;Dbxref=FlyBase:FBan0006416,FlyBase_Annotation_IDs:CG6416,GB_protein:AAN11990,GB_protein:ACZ94656,GB_protein:ACZ94657,GB_protein:AAN11991,GB_protein:ACZ94655,GB_protein:ACZ94653,GB_protein:AAN11992,GB_protein:ACZ94654,GB_protein:AAF50384,GB_protein:AAO41263,GB_protein:AAO41264,GB_protein:AAF50386,GB_protein:AAO41265,GB:AA697154,GB:AI388325,GB:AW940728,GB:AW941338,GB:AX201646,GB:AY058415,GB_protein:AAL13644,GB:AY060961,GB_protein:AAL28509,UniProt/TrEMBL:Q7KUB5,UniProt/TrEMBL:Q86BH5,UniProt/TrEMBL:Q86BH6,UniProt/TrEMBL:Q8IQB4,UniProt/TrEMBL:Q95S47,UniProt/TrEMBL:Q95TZ7,UniProt/TrEMBL:Q9VSN0,UniProt/TrEMBL:Q9VSN2,INTERPRO:IPR001478,INTERPRO:IPR006643,EntrezGene:38988,UniProt/TrEMBL:E1JI73,UniProt/TrEMBL:E1JI76,UniProt/TrEMBL:E1JI74,UniProt/TrEMBL:E1JI77,UniProt/TrEMBL:Q058U1,InterologFinder:38988,BIOGRID:64396,FlyAtlas:CG6416-RG%3BCG6416-RG%3BCG6416-RE,GenomeRNAi:38988;gbunit=AE014296;derived_computed_cyto=66D9-66D9 3L FlyBase mRNA 8617473 8631773 . + . ID=mRNA1;Parent=gene1;Name=Zasp66-RE;Alias=CG6416-RE;Dbxref=FlyBase_Annotation_IDs:CG6416-RE,REFSEQ:NM_168283;score_text=Moderately Supported;score=7 3L FlyBase CDS 8617583 8617783 . + 0 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8620061 8620209 . + 0 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8620527 8620830 . + 1 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8628781 8628852 . + 1 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8630539 8630698 . + 1 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8631257 8631295 . + 0 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8631367 8631453 . + 0 Parent=mRNA1;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase mRNA 8623308 8631773 . + . ID=mRNA2;Parent=gene1;Name=Zasp66-RH;Alias=CG6416-RH;Dbxref=FlyBase_Annotation_IDs:CG6416-RH,REFSEQ:NM_176304;score_text=Strongly Supported;score=15 3L FlyBase CDS 8623655 8623735 . + 0 Parent=mRNA2;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8627683 8627883 . + 0 Parent=mRNA1,mRNA2;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8628102 8628181 . + 0 Parent=mRNA1,mRNA2;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8631257 8631295 . + 1 Parent=mRNA2;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8631367 8631373 . + 1 Parent=mRNA2;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase mRNA 8623308 8631773 . + . Parent=gene1;Name=Zasp66-RI;Alias=CG6416-RI;Dbxref=FlyBase_Annotation_IDs:CG6416-RI,REFSEQ:NM_176303;score_text=Moderately Supported;score=7 3L FlyBase mRNA 8623370 8631773 . + . ID=mRNA3;Parent=gene1;Name=Zasp66-RJ;Alias=CG6416-RG,CG6416-RJ;Dbxref=FlyBase_Annotation_IDs:CG6416-RJ,REFSEQ:NM_176306;score_text=Moderately Supported;score=7 3L FlyBase CDS 8623655 8623735 . + 0 Parent=mRNA3;Name=Zasp66-cds;parent_type=mRNA 3L FlyBase CDS 8630539 8630698 . + 0 Parent=mRNA3;Name=Zasp66-cds;parent_type=mRNA ### genometools-1.5.1/testdata/cds_with_multiple_parents_1.gff3000066400000000000000000000011161211610345200241160ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1;Name=EDEN ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1;Name=EDEN.1 ctg123 . mRNA 1300 9000 . + . ID=mRNA2;Parent=gene1;Name=EDEN.3 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 1300 1500 . + . Parent=mRNA2 ctg123 . exon 3000 3902 . + . Parent=mRNA1,mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA1,mRNA2 ctg123 . CDS 1201 1500 . + 0 Parent=mRNA1 ctg123 . CDS 3000 3902 . + 0 Parent=mRNA1 ctg123 . CDS 5000 5500 . + 0 Parent=mRNA1,mRNA2 ctg123 . CDS 3301 3902 . + 0 Parent=mRNA2 genometools-1.5.1/testdata/cds_with_multiple_parents_1_tidied.gff3000066400000000000000000000011661211610345200254450ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1;Name=EDEN ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1;Name=EDEN.1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . CDS 1201 1500 . + 0 Parent=mRNA1 ctg123 . CDS 3000 3902 . + 0 Parent=mRNA1 ctg123 . CDS 5000 5500 . + 0 Parent=mRNA1 ctg123 . mRNA 1300 9000 . + . ID=mRNA2;Parent=gene1;Name=EDEN.3 ctg123 . exon 1300 1500 . + . Parent=mRNA2 ctg123 . exon 3000 3902 . + . Parent=mRNA1,mRNA2 ctg123 . CDS 3301 3902 . + 0 Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA1,mRNA2 ctg123 . CDS 5000 5500 . + 1 Parent=mRNA2 ### genometools-1.5.1/testdata/cds_with_multiple_parents_2.gff3000066400000000000000000000015151211610345200241220ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1;Name=EDEN ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1;Name=EDEN.1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1;Name=EDEN.2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1;Name=EDEN.3 ctg123 . exon 1050 1500 . + . Parent=mRNA1,mRNA2 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA1,mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA1,mRNA2,mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA1,mRNA2,mRNA3 ctg123 . CDS 1201 1500 . + 0 Parent=mRNA1,mRNA2 ctg123 . CDS 3000 3902 . + 0 Parent=mRNA1 ctg123 . CDS 5000 5500 . + 0 Parent=mRNA1,mRNA2,mRNA3 ctg123 . CDS 7000 7600 . + 0 Parent=mRNA1,mRNA2,mRNA3 ctg123 . CDS 3301 3902 . + 0 Parent=mRNA3 ### genometools-1.5.1/testdata/cds_with_multiple_parents_2_tidied.gff3000066400000000000000000000017351211610345200254500ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1;Name=EDEN ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1;Name=EDEN.1 ctg123 . CDS 3000 3902 . + 0 Parent=mRNA1 ctg123 . CDS 5000 5500 . + 0 Parent=mRNA1 ctg123 . CDS 7000 7600 . + 0 Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1;Name=EDEN.2 ctg123 . exon 1050 1500 . + . Parent=mRNA1,mRNA2 ctg123 . CDS 1201 1500 . + 0 Parent=mRNA1,mRNA2 ctg123 . CDS 5000 5500 . + 0 Parent=mRNA2 ctg123 . CDS 7000 7600 . + 0 Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1;Name=EDEN.3 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA1,mRNA3 ctg123 . CDS 3301 3902 . + 0 Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA1,mRNA2,mRNA3 ctg123 . CDS 5000 5500 . + 1 Parent=mRNA3 ctg123 . CDS 7000 7600 . + 1 Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA1,mRNA2,mRNA3 ### genometools-1.5.1/testdata/chaindata/000077500000000000000000000000001211610345200175715ustar00rootroot00000000000000genometools-1.5.1/testdata/chaindata/chain-global000066400000000000000000004446051211610345200220510ustar00rootroot00000000000000# chain 0: length 4258 score 2988370 5851 6237 5868 6254 774 7627 7937 7644 7954 622 8079 8457 8096 8474 758 8687 8994 8704 9011 616 8996 9375 9013 9392 760 9377 9666 9394 9683 580 10024 10406 10041 10423 766 10408 10715 10425 10732 616 11439 11663 11456 11680 450 11695 11898 11712 11915 408 12026 12235 12043 12252 420 12384 12712 12401 12729 658 13131 13339 13148 13356 418 13719 14230 13736 14247 1024 14232 14645 14249 14662 828 15174 15389 15191 15406 432 17569 17786 16237 16454 436 18477 18763 17145 17431 574 19377 19794 18045 18462 836 20813 21272 25219 25678 920 21304 21615 25716 26027 624 22048 22265 26460 26677 436 23335 23639 27747 28051 610 25045 25447 29457 29859 806 26789 27024 31164 31399 472 27712 28067 32087 32442 712 28223 28446 32598 32821 448 29506 29843 33881 34218 676 30706 30913 35081 35288 416 31887 32116 36262 36491 460 33552 33766 37927 38141 430 34112 34597 38486 38971 972 35170 35491 39577 39898 644 35499 35831 39906 40238 666 36263 36479 40670 40886 434 37032 37439 41439 41846 816 37534 37775 41941 42182 484 37777 38103 42184 42510 654 38777 39003 43184 43410 454 40129 40508 44536 44915 760 41188 41408 45595 45815 442 43562 43773 47976 48187 424 44455 44660 48869 49074 412 45555 45805 49969 50219 502 45950 46173 50365 50588 448 46253 46632 50668 51047 760 46901 47137 51316 51552 474 47515 47785 51930 52200 542 49571 49940 53986 54355 740 51097 51551 56073 56527 910 51621 51901 56597 56877 562 51924 52135 56900 57111 424 53284 53627 58260 58603 688 53902 54335 58878 59311 868 54337 54981 59313 59957 1290 54983 56483 59959 61459 3002 56485 56939 61461 61915 910 56941 57835 61917 62811 1790 57928 58141 62904 63117 428 59485 59772 64418 64705 576 59831 60053 64764 64986 446 60245 60545 65178 65478 602 60547 60890 65480 65823 688 60943 61457 65876 66390 1030 61459 61700 66392 66633 484 62923 63424 67856 68357 1004 64749 65026 69681 69958 556 65826 66030 70758 70962 410 66970 67169 71817 72016 400 67312 67544 72159 72391 466 67596 67832 72443 72679 474 68693 68945 73540 73792 506 70473 71000 75320 75847 1056 71214 71540 76061 76387 654 74737 75132 79557 79952 792 75226 75461 80046 80281 472 76775 76988 82604 82817 428 81083 81302 85691 85910 440 82978 83294 87586 87902 634 83392 83799 88000 88407 816 84493 84737 89099 89343 490 84949 85210 89555 89816 524 85881 86098 90487 90704 436 87279 87522 91885 92128 488 87794 88118 92400 92724 650 88120 88349 92726 92955 460 89754 90328 94360 94934 1150 90591 90949 95197 95555 718 91187 91785 95793 96391 1198 92474 92682 97080 97288 418 93089 93369 97695 97975 562 94167 94384 98773 98990 436 94548 94791 99154 99397 488 95152 95370 99758 99976 438 95905 96359 100511 100965 910 97113 97513 101719 102119 802 98322 98775 102928 103381 908 98906 99228 103512 103834 646 99254 99649 103860 104255 792 99651 99869 104257 104475 438 100432 100691 105038 105297 520 101175 101494 105781 106100 640 101721 101923 106327 106529 406 102613 102831 107219 107437 438 102833 103359 107439 107965 1054 103604 103840 108210 108446 474 103842 104168 108448 108774 654 104548 104822 109154 109428 550 104857 105545 109463 110151 1378 106099 107460 110705 112066 2724 107686 107909 112292 112515 448 108007 108211 112613 112817 410 108293 108597 112899 113203 610 108848 109485 113454 114091 1276 109496 109707 114102 114313 424 109927 110184 114533 114790 516 110441 110658 115047 115264 436 110660 110901 115266 115507 484 110903 111227 115509 115833 650 111661 112144 116151 116634 968 112146 112457 116636 116947 624 112459 112834 116949 117324 752 112836 113047 117326 117537 424 113049 113268 117539 117758 440 113270 114090 117760 118580 1642 116535 116843 121025 121333 618 117226 117573 121716 122063 696 117842 118158 122332 122648 634 118514 119177 123004 123667 1328 119259 119491 123749 123981 466 119493 119812 123983 124302 640 120595 120848 125085 125338 508 121891 122239 126381 126729 698 122496 122797 126986 127287 604 122808 123161 127298 127651 708 123931 124169 128421 128659 478 124522 124796 129012 129286 550 125410 125818 129900 130308 818 127257 127734 131747 132224 956 127882 128266 132255 132639 770 128406 128650 132779 133023 490 128991 129196 133364 133569 412 130733 131096 135106 135469 728 131188 131489 135561 135862 604 131491 131699 135864 136072 418 133795 134045 138168 138418 502 134047 134547 138420 138920 1002 134594 134876 138967 139249 566 134968 135254 139341 139627 574 135256 135635 139629 140008 760 135663 136121 140036 140494 918 136240 136604 140613 140977 730 136870 137101 141243 141474 464 137556 137806 141929 142179 502 139126 139355 143499 143728 460 141040 141304 145413 145677 530 141343 141710 145716 146083 736 141797 142087 146170 146460 582 142452 142814 146825 147187 726 143270 143496 147643 147869 454 143498 143822 147871 148195 650 144256 144630 148629 149003 750 145072 145290 149445 149663 438 146145 146732 150518 151105 1176 157544 157954 161867 162277 822 158023 158489 162346 162812 934 158578 158792 162901 163115 430 159237 159483 163560 163806 494 160020 160261 164343 164584 484 160401 161512 164724 165835 2224 162678 162981 167001 167304 608 164644 164931 168967 169254 576 166100 166500 170423 170823 802 166502 166932 170825 171255 862 168428 168768 172751 173091 682 169064 169426 173387 173749 726 169759 169994 174082 174317 472 172286 172617 176609 176940 664 174673 175242 178873 179442 1140 175991 176292 180191 180492 604 176294 176862 180494 181062 1138 176876 177372 181076 181572 994 177648 177933 181848 182133 572 178131 178465 182331 182665 670 178479 178867 182679 183067 778 179070 179513 183270 183713 888 180127 180427 184327 184627 602 180820 181388 185020 185588 1138 181390 181646 185590 185846 514 181663 181940 185863 186140 556 182343 182661 186543 186861 638 183133 183406 187333 187606 548 183458 183671 187658 187871 428 183701 184121 187901 188321 842 185630 186048 189117 189535 838 188339 188709 191826 192196 742 188711 189124 192198 192611 828 189417 189686 192904 193173 540 189688 189955 193175 193442 536 189957 190705 193444 194192 1498 190707 191298 194194 194785 1184 191300 192509 194787 195996 2420 192775 193061 196120 196406 574 193063 194127 196408 197472 2130 194165 194669 197510 198014 1010 195040 197671 198385 201016 5264 197790 198378 201135 201723 1178 198380 198621 201725 201966 484 199262 199926 202607 203271 1330 199928 200418 203273 203763 982 200529 200809 203873 204153 562 200811 201187 204155 204531 754 201345 201607 204689 204951 526 201640 202500 204984 205844 1722 202808 203026 206152 206370 438 203135 203440 206479 206784 612 204771 204985 208115 208329 430 204987 205202 208331 208546 432 205269 205525 208613 208869 514 206068 206371 209412 209715 608 207123 207337 210467 210681 430 207939 208243 211283 211587 610 208245 208771 211589 212115 1054 208773 209122 212117 212466 700 209142 209380 212486 212724 478 209442 209817 212786 213161 752 211763 212003 215107 215347 482 212180 212451 215524 215795 544 212952 213198 216296 216542 494 213337 213554 216681 216898 436 213819 214384 217164 217729 1132 215380 215675 218713 219008 592 215949 216222 219282 219555 548 218188 218576 221520 221908 778 218828 219224 222159 222555 794 219732 220129 223063 223460 796 220515 220882 223846 224213 736 220884 221193 224215 224524 620 221550 221915 224881 225246 732 222448 222986 225779 226317 1078 222988 223316 226319 226647 658 223538 223739 226870 227071 404 223915 224888 227247 228220 1948 224890 225585 228222 228917 1392 225900 226112 229232 229444 426 226604 226927 229936 230259 648 226936 227481 230267 230812 1092 227623 227871 230954 231202 498 227969 228550 231300 231881 1164 228768 229025 232098 232355 516 229598 229840 232928 233170 486 229853 230143 233183 233473 582 232837 233051 236388 236602 430 233158 233399 236709 236950 484 233401 233636 236952 237187 472 233638 233959 237189 237510 644 233961 234277 237512 237828 634 234618 234856 238169 238407 478 235556 235890 239107 239441 670 236041 236334 239592 239885 588 237263 237536 240815 241088 548 237538 237738 241090 241290 402 240031 240397 278100 278466 734 241492 241701 279561 279770 420 241703 242018 279772 280087 632 245371 245714 283339 283682 688 245952 246203 283920 284171 504 250050 250279 287937 288166 460 251614 251828 289501 289715 430 252573 252783 290460 290670 422 253387 253681 291275 291569 590 254361 254617 292249 292505 514 255687 256313 293575 294201 1254 256486 256872 294374 294760 774 257033 257260 294921 295148 456 258635 258918 296523 296806 568 259430 259675 297318 297563 492 260217 260431 298105 298319 430 260706 260991 298594 298879 572 297132 297463 330317 330648 664 299169 299479 332354 332664 622 300524 300783 333709 333968 520 301750 302005 334935 335190 512 305109 305541 338294 338726 866 306139 306369 339324 339554 462 306382 306626 339567 339811 490 306907 307106 340092 340291 400 308316 308640 341501 341825 650 309476 309792 342661 342977 634 313588 313860 353941 354213 546 316129 316360 358934 359165 464 318125 318630 361618 362123 1012 318632 318938 362125 362431 614 319028 319326 362521 362819 598 319744 320032 363237 363525 578 321266 321471 364759 364964 412 321473 321699 364966 365192 454 322401 323072 365894 366565 1344 323968 324172 367461 367665 410 328133 328560 376575 377002 856 328661 329008 377103 377450 696 329022 329383 377464 377825 724 329619 330088 378061 378530 940 330090 330409 378532 378851 640 330540 330759 378982 379201 440 332518 332846 384784 385112 658 334160 334386 386435 386661 454 334409 334749 386684 387024 682 335190 335460 387465 387735 542 335793 336128 388068 388403 672 336547 336839 388822 389114 586 338028 338296 390303 390571 538 340819 341027 393187 393395 418 341549 341791 393917 394159 486 342414 343104 399888 400578 1382 343301 343735 400775 401209 870 343919 344120 401393 401594 404 344845 345122 402322 402599 556 345448 345667 402925 403144 440 351607 352098 408800 409291 984 352888 353166 410081 410359 558 354178 354443 411935 412200 532 355443 355817 413200 413574 750 355819 356099 413576 413856 562 358310 358593 415864 416147 568 361300 361532 418854 419086 466 362254 362582 419808 420136 658 362638 362871 420192 420425 468 367228 367430 426606 426808 406 368110 368314 427488 427692 410 368569 368964 427947 428342 792 369620 370014 428998 429392 790 370352 370704 429730 430082 706 370840 371258 430218 430636 838 374964 375281 433940 434257 636 375474 375856 434450 434832 766 378703 379047 437579 437923 690 385128 385475 446908 447255 696 385631 385848 447411 447628 436 386054 386300 447834 448080 494 388046 388254 449826 450034 418 392824 393267 453381 453824 888 393274 393475 453831 454032 404 393537 394358 454094 454915 1644 394579 394841 455136 455398 526 394843 395354 455400 455911 1024 396828 397102 457385 457659 550 397218 397459 457775 458016 484 397707 397942 458264 458499 472 398247 398697 458804 459254 902 398813 399102 459370 459659 580 399920 400442 460477 460999 1046 400542 401106 461099 461663 1130 401519 401862 462076 462419 688 402894 403806 463451 464363 1826 404119 404330 464676 464887 424 404764 405189 465321 465746 852 405269 405498 465826 466055 460 405500 406133 466057 466690 1268 406247 406472 466804 467029 452 408239 408627 471103 471491 778 409019 409683 471883 472547 1330 409685 409949 472549 472813 530 409951 410158 472815 473022 416 410779 411080 473541 473842 604 411169 411404 473931 474166 472 411927 412377 474689 475139 902 412584 412810 475343 475569 454 414347 414694 477106 477453 696 414876 415176 477635 477935 602 415178 416519 477937 479278 2684 416521 417497 479280 480256 1954 417578 417798 480337 480557 442 418074 418301 480833 481060 456 418498 419130 481257 481889 1266 419564 421545 482323 484304 3964 421585 421886 484344 484645 604 421918 422324 484677 485083 814 424420 424775 488828 489183 712 425323 425610 489730 490017 576 425918 426348 490325 490755 862 426350 427121 490757 491528 1544 427123 427330 491530 491737 416 427941 428188 492348 492595 496 428418 428807 492825 493214 780 429056 429386 493463 493793 662 429762 430016 494795 495049 510 430020 430256 495053 495289 474 430318 430569 495351 495602 504 430571 430945 495604 495978 750 430974 431460 496007 496493 974 431796 432032 496829 497065 474 432068 432415 497101 497448 696 432423 432739 497456 497772 634 433707 433976 498740 499009 540 434137 434777 499170 499810 1282 435013 435485 500046 500518 946 437781 438101 504612 504932 642 440107 440365 506938 507196 518 440367 440657 507198 507488 582 440659 440932 507490 507763 548 441081 441412 507912 508243 664 443866 444069 510697 510900 408 445270 445481 512101 512312 424 446240 446460 513071 513291 442 446699 446996 513530 513827 596 447154 447388 513985 514219 470 447558 447851 514389 514682 588 447853 448076 514684 514907 448 448714 449491 515545 516322 1556 449557 450019 516388 516850 926 450118 450394 516949 517225 554 450523 450872 517354 517703 700 451229 451856 518060 518687 1256 451981 452222 518812 519053 484 453065 453331 519896 520162 534 453527 454666 520358 521497 2280 454668 455257 521499 522088 1180 455277 455482 522108 522313 412 455714 455976 522544 522806 526 456098 456384 522928 523214 574 456386 456860 523216 523690 950 457429 457823 524259 524653 790 457825 458484 524655 525314 1320 459551 459759 526381 526589 418 460049 460278 526879 527108 460 460442 460891 527272 527721 900 460893 461307 527723 528137 830 461309 461526 528139 528356 436 462603 462994 529433 529824 784 463853 464078 530696 530921 452 467804 468197 534646 535039 788 468592 469367 535434 536209 1552 469369 469914 536211 536756 1092 469916 470310 536758 537152 790 471002 471234 537844 538076 466 471715 471981 538557 538823 534 471983 472235 538825 539077 506 472804 473033 539646 539875 460 473738 473940 540580 540782 406 474071 474282 540913 541124 424 474284 474519 541126 541361 472 475605 475824 542449 542668 440 476138 476384 542982 543228 494 476386 476706 543230 543550 642 476749 477036 543593 543880 576 477185 477438 544029 544282 508 477689 477900 544533 544744 424 478299 478541 545143 545385 486 478557 478830 545401 545674 548 478832 479540 545676 546384 1418 479542 479820 546386 546664 558 479873 480097 546717 546941 450 480156 480358 547000 547202 406 480500 480797 547344 547641 596 480799 481310 547643 548154 1024 481312 481595 548156 548439 568 482005 482228 548849 549072 448 482401 482648 549245 549492 496 483364 483867 550208 550711 1008 483869 484107 550713 550951 478 484109 485087 550953 551931 1958 485569 486007 552413 552851 878 486512 487233 553356 554077 1444 488357 488580 555201 555424 448 488648 489096 555492 555940 898 490156 490806 556830 557480 1302 491016 491281 557690 557955 532 491283 491685 557957 558359 806 491936 492348 558610 559022 826 492431 492726 559105 559400 592 493578 493812 560252 560486 470 494565 494791 561239 561465 454 495183 495536 561857 562210 708 495813 496141 562487 562815 658 496339 496774 563013 563448 872 497201 497557 563771 564127 714 497559 497843 564129 564413 570 497944 498191 564514 564761 496 498193 498515 564763 565085 646 498526 498795 565096 565365 540 499179 499394 565749 565964 432 500429 500704 566999 567274 552 500996 501197 567566 567767 404 501503 501749 568073 568319 494 501869 502227 568439 568797 718 502292 502522 568862 569092 462 502841 503244 569410 569813 808 503252 503472 569821 570041 442 504201 504498 570770 571067 596 505313 505596 571882 572165 568 505598 505808 572167 572377 422 505872 506092 572441 572661 442 506287 506526 572856 573095 480 507669 507870 574238 574439 404 510100 510503 576568 576971 808 510693 510970 577161 577438 556 511506 511720 577974 578188 430 511916 512268 578384 578736 706 514311 514561 608578 608828 502 514941 515380 609208 609647 880 515956 516293 610223 610560 676 516295 516506 610562 610773 424 516508 517120 610775 611387 1226 517360 517640 611627 611907 562 517972 518490 612239 612757 1038 518492 518760 612759 613027 538 519981 520225 614248 614492 490 520758 521002 615025 615269 490 527250 527840 620314 620904 1182 527909 528139 620973 621203 462 528272 528957 621335 622020 1372 528959 529358 622022 622421 800 529620 530191 622683 623254 1144 530358 530775 623421 623838 836 531308 531568 624371 624631 522 532001 532301 625064 625364 602 532459 532658 625522 625721 400 533211 533782 626274 626845 1144 535236 535474 628299 628537 478 536800 537097 629864 630161 596 538454 538722 631432 631700 538 539806 540008 632784 632986 406 540859 541151 633837 634129 586 543235 543483 636213 636461 498 545192 545481 638170 638459 580 545483 545707 638461 638685 450 545797 546303 638775 639281 1014 547235 547461 640213 640439 454 548227 548559 641206 641538 666 548973 549348 641952 642327 752 549401 549615 642380 642594 430 549988 550295 642967 643274 616 552171 552490 645094 645413 640 553403 554011 646326 646934 1218 554139 554735 647062 647658 1194 555699 555927 648622 648850 458 557166 557534 650089 650457 738 557536 557969 650459 650892 868 558658 558860 651581 651783 406 558862 559066 651785 651989 410 559243 559706 652166 652629 928 561117 561536 654046 654465 840 561996 562213 654926 655143 436 562215 562563 655145 655493 698 562841 563219 655771 656149 758 563221 563588 656151 656518 736 563747 564023 656677 656953 554 585334 585798 656962 657426 930 585880 586262 657508 657890 766 586264 586465 657892 658093 404 587112 587323 658740 658951 424 587364 587641 658992 659269 556 588166 588459 659794 660087 588 588646 588936 660274 660564 582 589344 589651 660972 661279 616 590019 590549 661647 662177 1062 592069 592361 663697 663989 586 594538 594752 677757 677971 430 595911 596125 679130 679344 430 597790 597997 680884 681091 416 599565 599857 682653 682945 586 600066 600290 683154 683378 450 600346 600550 683434 683638 410 601677 602172 684765 685260 992 602198 602427 685286 685515 460 602936 603201 686011 686276 532 603203 603533 686278 686608 662 603535 603864 686610 686939 660 604552 604841 687627 687916 580 604858 605299 687933 688374 884 605327 605564 688402 688639 476 605896 606137 688971 689212 484 606382 606623 689457 689698 484 608712 608917 690927 691132 412 609123 609484 691338 691699 724 611082 611317 693297 693532 472 611646 612108 693861 694323 926 612814 613040 695029 695255 454 617409 617630 699624 699845 444 617729 618063 699944 700278 670 621062 621823 703277 704038 1524 622374 622582 704589 704797 418 622798 623018 705013 705233 442 623967 624342 705996 706371 752 624455 624654 706484 706683 400 625067 625350 707096 707379 568 626744 627217 708773 709246 948 630745 630986 712774 713015 484 631312 631606 713340 713634 590 632574 632966 714602 714994 786 632979 633283 715007 715311 610 634659 634927 716687 716955 538 635077 635401 717105 717429 650 635427 635641 717455 717669 430 636170 636533 718198 718561 728 636536 636836 718564 718864 602 637362 637684 719391 719713 646 638120 638730 720149 720759 1222 638868 639189 720781 721102 644 639566 640314 721479 722227 1498 640316 640593 722229 722506 556 640892 641234 722805 723147 686 642033 642290 723946 724203 516 642891 643209 724804 725122 638 644297 644559 726210 726472 526 644561 644779 726474 726692 438 644973 645331 726886 727244 718 645498 645842 727411 727755 690 647520 647719 729433 729632 400 649072 649283 730985 731196 424 649579 649804 731492 731717 452 649806 650219 731719 732132 828 650628 650837 732541 732750 420 650876 651180 732789 733093 610 651311 651673 733225 733587 726 651675 652010 733589 733924 672 652417 653081 734331 734995 1330 653198 653517 735112 735431 640 653983 654464 735897 736378 964 654466 654803 736380 736717 676 654805 655172 736719 737086 736 655895 656260 737809 738174 732 656433 656770 738347 738684 676 657882 658118 739796 740032 474 658120 658708 740034 740622 1178 659170 659781 741084 741695 1224 660230 660504 742144 742418 550 660926 661239 742841 743154 628 661580 661967 743495 743882 776 662074 662309 743989 744224 472 662383 662585 744298 744500 406 662887 663221 744802 745136 670 664333 664703 746249 746619 742 664705 665241 746621 747157 1074 665243 665466 747159 747382 448 666505 666713 748421 748629 418 667222 667583 749138 749499 724 667591 668054 749507 749970 928 668158 668473 750074 750389 632 669211 669463 751127 751379 506 670619 670859 752535 752775 482 671335 671569 753251 753485 470 671571 671785 753487 753701 430 672021 672412 753937 754328 784 673391 673786 755307 755702 792 673815 674028 755731 755944 428 674051 675151 755968 757068 2202 677843 678132 759761 760050 580 678134 678600 760052 760518 934 678602 678830 760520 760748 458 678850 679052 760768 760970 406 681591 681847 763509 763765 514 682257 682767 764175 764685 1022 684323 684524 766241 766442 404 685476 685705 767394 767623 460 685740 686034 767658 767952 590 688616 688831 769335 769550 432 688851 689134 769570 769853 568 689217 689468 769936 770187 504 689820 690238 770539 770957 838 690471 690733 771190 771452 526 690801 691086 771520 771805 572 691088 691289 771807 772008 404 691978 692324 772697 773043 694 692326 692555 773045 773274 460 692817 693047 773536 773766 462 693822 694270 774541 774989 898 695606 695851 776325 776570 492 695874 696078 776594 776798 410 696270 696632 776991 777353 726 696634 696833 777355 777554 400 697180 697385 777901 778106 412 697522 697742 778243 778463 442 699406 699661 779987 780242 512 700002 700264 780583 780845 526 700584 700890 781165 781471 614 701579 702110 782160 782691 1064 702468 702698 783049 783279 462 702742 702979 783323 783560 476 703130 703371 783711 783952 484 705239 705550 785820 786131 624 706141 706441 786722 787022 602 706486 706753 787067 787334 536 706755 707162 787336 787743 816 707278 707506 787860 788088 458 708561 708778 789143 789360 436 709471 709878 790053 790460 816 710074 710450 790658 791034 754 710452 710910 791036 791494 918 711047 711367 791631 791951 642 711957 712391 792541 792975 870 712452 713063 793036 793647 1224 713548 713768 794132 794352 442 713980 714185 794564 794769 412 714202 714427 794786 795011 452 716622 716854 795515 795747 466 717030 717376 795923 796269 694 717986 718203 796879 797096 436 721034 721515 800021 800502 964 722999 723216 801986 802203 436 725606 725808 804593 804795 406 726092 726414 805079 805401 646 726416 726649 805403 805636 468 729222 729757 808208 808743 1072 730140 730413 809126 809399 548 730620 730936 809606 809922 634 732327 733625 811313 812611 2598 734890 735131 813877 814118 484 740097 740364 819174 819441 536 741528 741757 820605 820834 460 741759 741993 820836 821070 470 742280 743053 821357 822130 1548 743064 743281 822141 822358 436 743941 744174 823018 823251 468 745018 745258 824095 824335 482 746300 746514 825377 825591 430 752906 753108 831982 832184 406 753323 753555 832399 832631 466 753774 754160 832850 833236 774 754162 754523 833238 833599 724 754525 754894 833601 833970 740 754937 755175 834013 834251 478 755177 755538 834253 834614 724 756746 756993 835822 836069 496 757037 757458 836113 836534 844 757532 758196 836608 837272 1330 758228 758536 837304 837612 618 760172 760650 839248 839726 958 760828 761117 839904 840193 580 761269 761501 840345 840577 466 762269 762576 841164 841471 616 763591 763811 842486 842706 442 763954 764370 842849 843265 834 770806 771368 857743 858305 1126 771946 772340 858883 859277 790 773272 773491 860209 860428 440 773648 773855 860585 860792 416 773858 774113 860795 861050 512 774115 774466 861052 861403 704 774969 775208 861906 862145 480 775210 775688 862147 862625 958 776440 776847 863296 863703 816 776849 777074 863705 863930 452 777898 778946 864754 865802 2098 779241 779851 866097 866707 1222 781316 781551 867611 867846 472 781922 782160 868217 868455 478 783078 783319 869373 869614 484 783507 783757 869802 870052 502 784644 785021 870933 871310 756 786648 786870 872945 873167 446 787198 787441 873495 873738 488 788132 788397 874429 874694 532 790206 790422 876503 876719 434 790730 790968 877027 877265 478 792220 792631 878518 878929 824 792781 793021 879079 879319 482 793739 794339 880037 880637 1202 795078 795295 881376 881593 436 795297 795571 881595 881869 550 795678 795934 881976 882232 514 796493 796957 882791 883255 930 799265 799593 885563 885891 658 799810 800198 886108 886496 778 801521 801779 887820 888078 518 802234 802546 888533 888845 626 803451 803675 889750 889974 450 803889 804178 890188 890477 580 804780 805040 891079 891339 522 805498 805795 891704 892001 596 808412 808696 933207 933491 570 812635 812863 937431 937659 458 816179 816405 940974 941200 454 817052 817372 941847 942167 642 817661 818015 942456 942810 710 818373 818620 943168 943415 496 819202 819413 943996 944207 424 821380 821785 946177 946582 812 822333 822592 947130 947389 520 822609 823614 947406 948411 2012 823616 824135 948413 948932 1040 824137 824373 948934 949170 474 826458 826706 951255 951503 498 827275 827629 952072 952426 710 829168 829607 953965 954404 880 829949 830425 954746 955222 954 832197 832434 959067 959304 476 833381 833715 960251 960585 670 834305 834558 961175 961428 508 839012 839216 965895 966099 410 840524 840835 967407 967718 624 841097 841644 967980 968527 1096 842958 843381 969841 970264 848 845147 845349 971886 972088 406 845602 846029 972341 972768 856 846823 847308 973562 974047 972 847608 847920 974347 974659 626 848682 849037 975421 975776 712 849246 849751 975985 976490 1012 849867 850072 976606 976811 412 850999 851479 977738 978218 962 851481 851716 978220 978455 472 852048 852287 978787 979026 480 852947 853168 979686 979907 444 854794 855005 981532 981743 424 855107 855585 981846 982324 958 855680 855976 982419 982715 594 857016 857221 983682 983887 412 857661 858292 984327 984958 1264 858469 858722 985136 985389 508 858802 859015 985469 985682 428 860912 861142 987579 987809 462 861749 861983 988415 988649 470 862759 862982 989425 989648 448 865489 865766 992258 992535 556 865768 866004 992537 992773 474 866423 866794 993192 993563 744 867315 867529 994084 994298 430 867711 867937 994480 994706 454 868317 868769 995086 995538 906 868960 869172 995729 995941 426 869174 869379 995943 996148 412 869581 869898 996350 996667 636 870996 871383 997765 998152 776 873497 873732 1000266 1000501 472 873734 874035 1000503 1000804 604 874493 874786 1001262 1001555 588 874818 875095 1001587 1001864 556 876323 876735 1004046 1004458 826 877193 877408 1004916 1005131 432 877453 877976 1005176 1005699 1048 878102 878316 1005825 1006039 430 878360 878829 1006083 1006552 940 878948 879177 1006671 1006900 460 879179 879387 1006902 1007110 418 879419 879669 1007142 1007392 502 879671 879890 1007394 1007613 440 880033 880370 1007755 1008092 676 880495 880731 1008217 1008453 474 881337 881536 1009059 1009258 400 881772 882057 1009494 1009779 572 882059 882304 1009781 1010026 492 882494 882787 1010216 1010509 588 882789 883106 1010511 1010828 636 884251 884485 1011973 1012207 470 885244 885697 1012966 1013419 908 886891 887165 1014613 1014887 550 887198 887424 1014920 1015146 454 887729 888012 1015451 1015734 568 888014 888372 1015736 1016094 718 888374 888603 1016096 1016325 460 888605 889068 1016327 1016790 928 889734 889950 1017457 1017673 434 890478 890689 1018201 1018412 424 891140 891620 1018863 1019343 962 891622 891884 1019345 1019607 526 892279 892609 1020002 1020332 662 895107 895421 1022830 1023144 630 895956 896269 1023679 1023992 628 896468 896727 1024191 1024450 520 897283 897497 1025006 1025220 430 897520 897791 1025243 1025514 544 901363 901604 1032396 1032637 484 902056 902308 1033089 1033341 506 902490 902737 1033523 1033770 496 902739 903182 1033772 1034215 888 904186 904401 1037735 1037950 432 906687 906905 1040236 1040454 438 910222 910490 1043771 1044039 538 912033 912304 1045582 1045853 544 912852 913185 1046401 1046734 668 913841 914066 1047390 1047615 452 914986 915276 1048498 1048788 582 915473 915822 1048985 1049334 700 916829 917061 1050341 1050573 466 917267 917535 1050779 1051047 538 917540 917745 1051052 1051257 412 917978 918269 1051490 1051781 584 918885 919119 1052397 1052631 470 919198 919517 1052710 1053029 640 919680 919897 1053192 1053409 436 920748 920974 1054260 1054486 454 921171 921406 1054683 1054918 472 921408 921951 1054920 1055463 1088 921953 923120 1055465 1056632 2336 923158 923387 1056670 1056899 460 923950 924230 1057462 1057742 562 925370 926038 1146447 1147115 1338 926040 926242 1147117 1147319 406 926275 927044 1147352 1148121 1540 927564 927936 1148641 1149013 746 928215 928771 1149292 1149848 1114 929811 930058 1150888 1151135 496 930060 930372 1151137 1151449 626 930878 931200 1151955 1152277 646 931202 931652 1152279 1152729 902 931654 932145 1152731 1153222 984 932147 932461 1153224 1153538 630 932463 932760 1153540 1153837 596 932762 933125 1153839 1154202 728 933127 933504 1154204 1154581 756 933506 933899 1154583 1154976 788 934265 934466 1155342 1155543 404 934900 935127 1156016 1156243 456 935833 936177 1156949 1157293 690 936449 937304 1157561 1158416 1712 937477 937691 1158589 1158803 430 937915 939255 1159027 1160367 2682 939544 939872 1160656 1160984 658 940110 940343 1161222 1161455 468 940345 940662 1161457 1161774 636 940818 941235 1161930 1162347 836 941576 941796 1162688 1162908 442 941798 942102 1162910 1163214 610 942182 942703 1163294 1163815 1044 942837 943313 1163949 1164425 954 944568 944819 1165681 1165932 504 947729 947977 1168843 1169091 498 949842 950418 1169485 1170061 1154 950612 950835 1170255 1170478 448 950843 951066 1170486 1170709 448 951068 951282 1170711 1170925 430 951527 951807 1171170 1171450 562 951809 952170 1171452 1171813 724 952556 952839 1172199 1172482 568 953456 954057 1173099 1173700 1204 954464 954780 1174107 1174423 634 954788 955050 1174431 1174693 526 955595 955818 1175238 1175461 448 955820 956426 1175463 1176069 1214 956495 956920 1176138 1176563 852 956922 957317 1176565 1176960 792 957533 957833 1177176 1177476 602 957895 958245 1177538 1177888 702 958403 958989 1178046 1178632 1174 959615 959829 1179258 1179472 430 960300 960526 1179943 1180169 454 960846 961677 1180489 1181320 1664 961679 962145 1181322 1181788 934 962147 962362 1181790 1182005 432 962364 962754 1182007 1182397 782 962919 963340 1182562 1182983 844 965709 965910 1185351 1185552 404 966533 966747 1186175 1186389 430 967358 967892 1187000 1187534 1070 967894 968156 1187536 1187798 526 969047 969265 1188689 1188907 438 969408 969720 1189050 1189362 626 970335 970540 1189977 1190182 412 970794 971099 1190436 1190741 612 971310 971536 1190952 1191178 454 971538 971891 1191180 1191533 708 972562 972883 1192204 1192525 644 972954 973162 1192596 1192804 418 973976 974202 1193618 1193844 454 974738 974941 1194380 1194583 408 975378 975600 1195020 1195242 446 975602 975903 1195244 1195545 604 977765 977979 1197407 1197621 430 978464 978717 1198106 1198359 508 979620 979833 1199262 1199475 428 979981 980296 1199623 1199938 632 980460 980813 1200102 1200455 708 981037 981299 1200679 1200941 526 981721 982168 1201363 1201810 896 982352 982589 1201994 1202231 476 983103 983419 1202745 1203061 634 983832 984346 1203303 1203817 1030 984627 985057 1204098 1204528 862 985059 985398 1204530 1204869 680 985636 986069 1205107 1205540 868 987711 987927 1207182 1207398 434 987929 988141 1207400 1207612 426 988170 988513 1207641 1207984 688 988675 988984 1208146 1208455 620 989214 989491 1208685 1208962 556 989493 989995 1208964 1209466 1006 990318 990643 1209789 1210114 652 993345 993771 1212816 1213242 854 996936 997312 1216408 1216784 754 999032 999400 1218503 1218871 738 999491 999719 1218962 1219190 458 1002117 1002693 1221589 1222165 1154 1002826 1003134 1222298 1222606 618 1003382 1003613 1222854 1223085 464 1003817 1004072 1223288 1223543 512 1004749 1005070 1224220 1224541 644 1005285 1005529 1224756 1225000 490 1005582 1005955 1225053 1225426 748 1006031 1006261 1225502 1225732 462 1006952 1007367 1226423 1226838 832 1007987 1008250 1227458 1227721 528 1008824 1009376 1228295 1228847 1106 1009477 1009703 1228948 1229174 454 1011376 1011728 1230847 1231199 706 1012105 1012725 1231576 1232196 1242 1013177 1013397 1232648 1232868 442 1013621 1013877 1233092 1233348 514 1013960 1014248 1233431 1233719 578 1014406 1014739 1233877 1234210 668 1014741 1016713 1234212 1236184 3946 1016737 1017056 1236208 1236527 640 1017058 1017762 1236529 1237233 1410 1017764 1018240 1237235 1237711 954 1018242 1018915 1237713 1238386 1348 1018917 1019555 1238388 1239026 1278 1019679 1020273 1239150 1239744 1190 1020275 1020545 1239746 1240016 542 1020547 1021341 1240018 1240812 1590 1021343 1021732 1240814 1241203 780 1021734 1022021 1241205 1241492 576 1022023 1022522 1241494 1241993 1000 1022524 1023481 1241995 1242952 1916 1023483 1023904 1242954 1243375 844 1024077 1024471 1243548 1243942 790 1024473 1024744 1243944 1244215 544 1024767 1025083 1244238 1244554 634 1025085 1025507 1244556 1244978 846 1025655 1025859 1245126 1245330 410 1025861 1026359 1245332 1245830 998 1026361 1027147 1245832 1246618 1574 1027783 1028072 1247254 1247543 580 1028797 1029104 1248268 1248575 616 1029106 1029377 1248577 1248848 544 1029451 1029767 1248922 1249238 634 1031117 1031346 1295831 1296060 460 1031348 1031584 1296062 1296298 474 1031592 1031839 1296306 1296553 496 1033953 1034196 1298667 1298910 488 1036286 1036497 1301000 1301211 424 1036499 1036788 1301213 1301502 580 1038009 1038612 1302723 1303326 1208 1039130 1039329 1303844 1304043 400 1040143 1040443 1304863 1305163 602 1041571 1041830 1306296 1306555 520 1042342 1042577 1307067 1307302 472 1043203 1043499 1307928 1308224 594 1043609 1043960 1308334 1308685 704 1043989 1044293 1308714 1309018 610 1044784 1045214 1309509 1309939 862 1045810 1046177 1310535 1310902 736 1046494 1046894 1311219 1311619 802 1047786 1048035 1312511 1312760 500 1048403 1048626 1313128 1313351 448 1050249 1050533 1314197 1314481 570 1050535 1050855 1314483 1314803 642 1051613 1051825 1315560 1315772 426 1053310 1053513 1317257 1317460 408 1055016 1055277 1318963 1319224 524 1055614 1055820 1319561 1319767 414 1056041 1056336 1319988 1320283 592 1062010 1062268 1325959 1326217 518 1062270 1062472 1326219 1326421 406 1062766 1063132 1326715 1327081 734 1065120 1065522 1329067 1329469 806 1066521 1066728 1330468 1330675 416 1068256 1068461 1393625 1393830 412 1070073 1070289 1395442 1395658 434 1073596 1073868 1398965 1399237 546 1075019 1075230 1400388 1400599 424 1078198 1078642 1403567 1404011 890 1080889 1081661 1408390 1409162 1546 1081663 1081907 1409164 1409408 490 1083213 1083564 1410714 1411065 704 1084147 1084615 1411647 1412115 938 1084617 1085220 1412117 1412720 1208 1085337 1086089 1412837 1413589 1506 1086091 1086892 1413591 1414392 1604 1086894 1088334 1414394 1415834 2882 1088336 1088973 1415836 1416473 1276 1088975 1089198 1416475 1416698 448 1089200 1090692 1416700 1418192 2986 1090694 1091324 1418194 1418824 1262 1091338 1091738 1418838 1419238 802 1091740 1092322 1419240 1419822 1166 1092582 1092822 1420082 1420322 482 1093020 1093334 1420520 1420834 630 1094725 1094939 1452708 1452922 430 1095905 1096124 1453888 1454107 440 1097354 1097647 1542356 1542649 588 1098625 1098917 1543627 1543919 586 1099210 1099412 1544212 1544414 406 1099457 1099684 1544459 1544686 456 1100764 1101034 1545766 1546036 542 1101045 1101339 1546047 1546341 590 1101674 1101989 1546676 1546991 632 1102092 1102363 1547094 1547365 544 1102365 1102618 1547367 1547620 508 1103104 1103471 1548106 1548473 736 1103473 1103754 1548475 1548756 564 1104258 1104697 1549263 1549702 880 1104825 1105118 1549830 1550123 588 1105264 1105635 1550269 1550640 744 1107124 1107413 1552129 1552418 580 1108271 1108657 1553275 1553661 774 1108681 1108924 1553685 1553928 488 1109346 1109632 1554350 1554636 574 1109634 1109956 1554638 1554960 646 1110421 1110740 1555425 1555744 640 1113150 1113674 1558154 1558678 1050 1114033 1114253 1559037 1559257 442 1114604 1115018 1559608 1560022 830 1115539 1116064 1560543 1561068 1052 1117589 1117965 1562593 1562969 754 1118292 1118588 1563296 1563592 594 1118709 1118950 1563713 1563954 484 1119159 1119388 1564163 1564392 460 1119723 1119947 1564727 1564951 450 1119949 1120261 1564953 1565265 626 1120588 1120794 1565595 1565801 414 1122359 1122620 1567366 1567627 524 1122622 1123084 1567629 1568091 926 1123086 1123315 1568093 1568322 460 1123562 1123837 1568569 1568844 552 1124397 1124875 1569404 1569882 958 1124877 1125079 1569884 1570086 406 1125081 1125401 1570088 1570408 642 1126416 1126638 1571423 1571645 446 1126972 1127504 1571979 1572511 1066 1130129 1130410 1575136 1575417 564 1130432 1130769 1575439 1575776 676 1130915 1131189 1575922 1576196 550 1131307 1131584 1576314 1576591 556 1131710 1132007 1576717 1577014 596 1132639 1132844 1577643 1577848 412 1133931 1134198 1578901 1579168 536 1134305 1134543 1579275 1579513 478 1134765 1135042 1579735 1580012 556 1135209 1135533 1580179 1580503 650 1135535 1135746 1580505 1580716 424 1138152 1138351 1583122 1583321 400 1141656 1141899 1586625 1586868 488 1141974 1142422 1586943 1587391 898 1142424 1142719 1587393 1587688 592 1142772 1144076 1587741 1589045 2610 1144231 1144610 1589200 1589579 760 1145893 1146095 1590851 1591053 406 1146097 1146768 1591055 1591726 1344 1147425 1147659 1592383 1592617 470 1147661 1148426 1592619 1593384 1532 1148428 1148768 1593386 1593726 682 1148860 1149134 1593818 1594092 550 1149679 1149887 1594637 1594845 418 1150045 1150495 1595003 1595453 902 1150497 1150934 1595455 1595892 876 1150936 1151627 1595894 1596585 1384 1151758 1152008 1596716 1596966 502 1152010 1152308 1596968 1597266 598 1154189 1154470 1599147 1599428 564 1154963 1155234 1599921 1600192 544 1155446 1155681 1600404 1600639 472 1155893 1156144 1600851 1601102 504 1156829 1157332 1601788 1602291 1008 1157334 1158035 1602293 1602994 1404 1158102 1158403 1603061 1603362 604 1158405 1158624 1603364 1603583 440 1158834 1159823 1603793 1604782 1980 1160058 1160311 1605017 1605270 508 1160313 1160669 1605272 1605628 714 1161060 1161369 1606039 1606348 620 1161617 1162284 1606596 1607263 1336 1162328 1162545 1607307 1607524 436 1162766 1163050 1607745 1608029 570 1163052 1163417 1608031 1608396 732 1164290 1164504 1609269 1609483 430 1165119 1165326 1610099 1610306 416 1166429 1166655 1611409 1611635 454 1167097 1167326 1612094 1612323 460 1167728 1168624 1612725 1613621 1794 1168633 1168993 1613631 1613991 722 1169409 1169754 1614407 1614752 692 1170137 1170390 1615135 1615388 508 1170542 1170789 1615540 1615787 496 1170869 1171139 1615867 1616137 542 1171339 1171569 1616337 1616567 462 1174014 1174222 1619012 1619220 418 1174295 1174890 1619293 1619888 1192 1177067 1177338 1622065 1622336 544 1177649 1177945 1622647 1622943 594 1178544 1179094 1623542 1624092 1102 1181855 1182215 1625567 1625927 722 1182373 1182719 1626085 1626431 694 1183589 1184030 1674604 1675045 884 1184592 1185541 1675607 1676556 1900 1186128 1186504 1677143 1677519 754 1187317 1187531 1678332 1678546 430 1188196 1188482 1694671 1694957 574 1188520 1189014 1694995 1695489 990 1190190 1190410 1696665 1696885 442 1190490 1190704 1696965 1697179 430 1191000 1191427 1697475 1697902 856 1191581 1191893 1698056 1698368 626 1192367 1192596 1698842 1699071 460 1192607 1193105 1699082 1699580 998 1194097 1194607 1700572 1701082 1022 1223501 1223728 1753170 1753397 456 1223730 1224097 1753399 1753766 736 1224276 1224584 1753945 1754253 618 1224724 1224971 1754393 1754640 496 1225028 1225507 1754697 1755176 960 1225637 1225893 1755306 1755562 514 1226447 1226673 1756116 1756342 454 1226859 1227359 1756528 1757028 1002 1227866 1228311 1757535 1757980 892 1229087 1229304 1758756 1758973 436 1230079 1230469 1759748 1760138 782 1230471 1230676 1760140 1760345 412 1232248 1232471 1761917 1762140 448 1232606 1232814 1762275 1762483 418 1232921 1233214 1762590 1762883 588 1233216 1233441 1762885 1763110 452 1234072 1234389 1763742 1764059 636 1234682 1234894 1764352 1764564 426 1235295 1235605 1764965 1765275 622 1235979 1236510 1765649 1766180 1064 1236747 1237304 1766450 1767007 1116 1237399 1237736 1767102 1767439 676 1237918 1238175 1767621 1767878 516 1239867 1240102 1769576 1769811 472 1242327 1242682 1772037 1772392 712 1243274 1243615 1774297 1774638 684 1243647 1243904 1774670 1774927 516 1244959 1245314 1782097 1782452 712 1247120 1247325 1784245 1784450 412 1248014 1248231 1785139 1785356 436 1249651 1250407 1786776 1787532 1514 1253751 1253992 1787740 1787981 484 1254762 1254976 1788751 1788965 430 1255802 1256209 1789866 1790273 816 1256241 1256512 1790305 1790576 544 1256522 1256851 1790586 1790915 660 1257015 1257237 1791079 1791301 446 1257611 1257936 1791675 1792000 652 1257938 1258387 1792002 1792451 900 1258476 1258767 1792540 1792831 584 1259433 1259722 1793497 1793786 580 1259787 1260338 1793851 1794402 1104 1260493 1260912 1794557 1794976 840 1261084 1261616 1795148 1795680 1066 1261948 1262344 1796012 1796408 794 1262346 1262775 1796410 1796839 860 1263548 1264381 1797612 1798445 1668 1264383 1264604 1798447 1798668 444 1264789 1265051 1798853 1799115 526 1265092 1265699 1799156 1799763 1216 1265755 1266058 1799819 1800122 608 1266060 1266295 1800124 1800359 472 1266477 1266715 1800541 1800779 478 1266773 1267176 1800837 1801240 808 1267516 1267889 1801580 1801953 748 1268797 1269100 1802861 1803164 608 1269947 1270177 1804001 1804231 462 1270815 1271177 1804869 1805231 726 1271365 1271578 1805419 1805632 428 1272700 1272973 1806757 1807030 548 1274609 1274904 1808667 1808962 592 1274906 1275166 1808964 1809224 522 1275375 1275709 1809433 1809767 670 1275986 1276261 1810044 1810319 552 1276656 1276982 1810714 1811040 654 1277047 1277361 1811105 1811419 630 1278013 1278290 1812071 1812348 556 1278921 1279555 1812856 1813490 1270 1280043 1280875 1813978 1814810 1666 1281324 1281649 1815259 1815584 652 1281822 1282332 1815757 1816267 1022 1282500 1282720 1816435 1816655 442 1283051 1283499 1816986 1817434 898 1284041 1284605 1817976 1818540 1130 1285008 1285243 1818943 1819178 472 1286759 1287018 1820516 1820775 520 1287649 1287858 1821406 1821615 420 1288191 1288609 1821948 1822366 838 1289330 1289537 1823087 1823294 416 1289539 1289987 1823296 1823744 898 1290220 1290510 1823977 1824267 582 1290604 1290974 1824361 1824731 742 1291441 1291694 1825198 1825451 508 1291924 1292318 1825681 1826075 790 1292658 1292978 1826414 1826734 642 1292980 1293260 1826736 1827016 562 1295001 1295224 1827756 1827979 448 1295226 1295459 1827981 1828214 468 1295566 1296074 1828321 1828829 1018 1296256 1296491 1829011 1829246 472 1296988 1297431 1829743 1830186 888 1297629 1297831 1830384 1830586 406 1298187 1298500 1830942 1831255 628 1299091 1299323 1831847 1832079 466 1300304 1300574 1833060 1833330 542 1300836 1301049 1833592 1833805 428 1301774 1301978 1834530 1834734 410 1304012 1304214 1836768 1836970 406 1304216 1304712 1836972 1837468 994 1306115 1306392 1838871 1839148 556 1306394 1306767 1839150 1839523 748 1307080 1307422 1839837 1840179 686 1307526 1307920 1840283 1840677 790 1308592 1308957 1841350 1841715 732 1309002 1309261 1841761 1842020 520 1309694 1309933 1842453 1842692 480 1309959 1310355 1842718 1843114 794 1310357 1310661 1843116 1843420 610 1310861 1311158 1843620 1843917 596 1311220 1311819 1843979 1844578 1200 1311945 1312215 1844704 1844974 542 1654122 1654379 2273590 2273847 516 1654543 1654844 2274011 2274312 604 1655023 1655285 2274491 2274753 526 1656596 1656807 2276064 2276275 424 1656920 1657151 2276388 2276619 464 1657520 1657818 2276988 2277286 598 1658870 1659291 2278338 2278759 844 1659463 1659737 2278931 2279205 550 1659803 1660033 2279271 2279501 462 1660035 1660281 2279503 2279749 494 1660433 1660653 2279901 2280121 442 1661139 1661651 2280607 2281119 1026 1662613 1662816 2282081 2282284 408 1663623 1663962 2283090 2283429 680 1663964 1664212 2283431 2283679 498 1664890 1665423 2284357 2284890 1068 1666224 1666464 2285691 2285931 482 1666466 1666766 2285933 2286233 602 1666768 1667146 2286235 2286613 758 1667359 1667674 2286826 2287141 632 1668458 1668758 2287925 2288225 602 1668760 1669020 2288227 2288487 522 1669621 1669831 2289088 2289298 422 1670319 1670539 2289786 2290006 442 1670541 1671010 2290008 2290477 940 1672979 1673255 2292446 2292722 554 1674007 1674215 2293474 2293682 418 1674316 1674594 2293783 2294061 558 1674995 1675266 2294462 2294733 544 1675268 1675475 2294735 2294942 416 1675523 1675836 2294990 2295303 628 1675988 1676495 2295455 2295962 1016 1676681 1677165 2296148 2296632 970 1677410 1678123 2296877 2297590 1428 1678591 1678853 2298058 2298320 526 1678873 1679604 2298340 2299071 1464 1679606 1680258 2299073 2299725 1306 1681229 1681488 2300696 2300955 520 1681529 1681825 2300996 2301292 594 1681904 1682202 2301371 2301669 598 1682552 1682772 2302020 2302240 442 1683086 1683345 2302554 2302813 520 1683347 1684023 2302815 2303491 1354 1684690 1684966 2304158 2304434 554 1685041 1685446 2304509 2304914 812 1685588 1686309 2305056 2305777 1444 1686565 1686909 2306033 2306377 690 1686911 1687212 2306379 2306680 604 1687553 1687752 2307021 2307220 400 1687757 1688014 2307225 2307482 516 1688577 1688776 2308045 2308244 400 1689575 1689781 2308862 2309068 414 1690810 1691083 2310096 2310369 548 1691787 1691987 2311073 2311273 402 1691989 1692234 2311275 2311520 492 1692392 1692684 2311678 2311970 586 1693703 1693903 2312991 2313191 402 1694957 1695173 2314245 2314461 434 1695543 1696130 2314839 2315426 1176 1696602 1696807 2315898 2316103 412 1697022 1697225 2316318 2316521 408 1697227 1697499 2316523 2316795 546 1698776 1699026 2318072 2318322 502 1700150 1700479 2319446 2319775 660 1701538 1701767 2320836 2321065 460 1702836 1703180 2322135 2322479 690 1703690 1703890 2322989 2323189 402 1703892 1704092 2323191 2323391 402 1704678 1705054 2323977 2324353 754 1705074 1705300 2324373 2324599 454 1706333 1706594 2325632 2325893 524 1707144 1707376 2326443 2326675 466 1707660 1707933 2326959 2327232 548 1707935 1708357 2327234 2327656 846 1708359 1708684 2327658 2327983 652 1708950 1709206 2328249 2328505 514 1709208 1709492 2328507 2328791 570 1710050 1710352 2329349 2329651 606 1710738 1711294 2330037 2330593 1114 1711302 1711714 2330601 2331013 826 1712016 1712422 2331315 2331721 814 1713608 1714003 2332907 2333302 792 1714161 1714558 2333460 2333857 796 1714647 1714930 2333946 2334229 568 1714932 1715271 2334231 2334570 680 1715774 1716050 2335074 2335350 554 1716622 1716821 2335922 2336121 400 1717659 1717866 2336958 2337165 416 1718229 1718448 2337529 2337748 440 1718507 1718990 2337807 2338290 968 1719135 1719543 2338435 2338843 818 1719809 1720020 2339109 2339320 424 1720375 1720610 2339675 2339910 472 1720675 1720958 2339975 2340258 568 1722052 1722498 2341352 2341798 894 1722659 1722867 2341959 2342167 418 1723992 1724230 2343292 2343530 478 1725414 1725724 2344714 2345024 622 1725897 1726101 2345197 2345401 410 1726742 1726941 2346042 2346241 400 1729774 1730007 2349074 2349307 468 1730296 1730513 2349596 2349813 436 1730624 1730872 2349924 2350172 498 1731031 1731245 2350331 2350545 430 1731451 1731651 2350751 2350951 402 1731943 1732266 2351243 2351566 648 1732443 1732738 2351744 2352039 592 1733244 1733468 2352545 2352769 450 1733494 1733726 2352795 2353027 466 1734492 1735508 2353777 2354793 2034 1735510 1735985 2354795 2355270 952 1736821 1737200 2356106 2356485 760 1737301 1737638 2356586 2356923 676 1737679 1738130 2356964 2357415 904 1738573 1738859 2357858 2358144 574 1739051 1739291 2358336 2358576 482 1739293 1739737 2358578 2359022 890 1739937 1740185 2359222 2359470 498 1742227 1742471 2361514 2361758 490 1743603 1743817 2362890 2363104 430 1744113 1744317 2363400 2363604 410 1744319 1744621 2363606 2363908 606 1745169 1745385 2364456 2364672 434 1746131 1746385 2365418 2365672 510 1746573 1746895 2365860 2366182 646 1747337 1747568 2366624 2366855 464 1748232 1748460 2367519 2367747 458 1748853 1749207 2368140 2368494 710 1749248 1749452 2368535 2368739 410 1749626 1749828 2368913 2369115 406 1750229 1750511 2369516 2369798 566 1750757 1750965 2370044 2370252 418 1751171 1751397 2370458 2370684 454 1751450 1751849 2370737 2371136 800 1752037 1752332 2371324 2371619 592 1752334 1752630 2371621 2371917 594 1752938 1753287 2372226 2372575 700 1753361 1754001 2372649 2373289 1282 1754288 1754853 2373576 2374141 1132 1754978 1755727 2374266 2375015 1500 1757894 1758099 2377181 2377386 412 1758817 1759018 2378104 2378305 404 1759643 1760001 2378930 2379288 718 1760024 1760307 2379311 2379594 568 1760888 1761168 2380175 2380455 562 1761426 1761639 2380713 2380926 428 1761758 1762277 2381045 2381564 1040 1763063 1763299 2382351 2382587 474 1763817 1764167 2383105 2383455 702 1764169 1764674 2383457 2383962 1012 1764787 1765292 2384075 2384580 1012 1766897 1767545 2386185 2386833 1298 1768193 1768741 2387481 2388029 1098 1769209 1770005 2388497 2389293 1594 1770027 1771061 2389315 2390349 2070 1776510 1776832 2395800 2396122 646 1777391 1777779 2396686 2397074 778 1778340 1778576 2397635 2397871 474 1779198 1779491 2398493 2398786 588 1779895 1780141 2399190 2399436 494 1780820 1781052 2400115 2400347 466 1781990 1782237 2401285 2401532 496 1782239 1782454 2401534 2401749 432 1783349 1783605 2402644 2402900 514 1784312 1784529 2403607 2403824 436 1784531 1785024 2403826 2404319 988 1785293 1785664 2404588 2404959 744 1785987 1786594 2405282 2405889 1216 1786596 1786808 2405891 2406103 426 1786974 1787396 2406269 2406691 846 1787564 1788076 2406859 2407371 1026 1789601 1789856 2408896 2409151 512 1789985 1790241 2409280 2409536 514 1790516 1790720 2409811 2410015 410 1790722 1790924 2410017 2410219 406 1790932 1791157 2410227 2410452 452 1791358 1791557 2410653 2410852 400 1792805 1793042 2412100 2412337 476 1793280 1793651 2412576 2412947 744 1793653 1794317 2412949 2413613 1330 1794961 1795189 2414257 2414485 458 1795191 1795402 2414487 2414698 424 1795903 1796127 2415199 2415423 450 1796193 1796481 2415489 2415777 578 1796483 1796797 2415779 2416093 630 1797149 1797739 2416444 2417034 1182 1797741 1798777 2417036 2418072 2074 1799635 1799909 2418930 2419204 550 1799911 1800548 2419206 2419843 1276 1800565 1800878 2419860 2420173 628 1803089 1803365 2422385 2422661 554 1803598 1803884 2422894 2423180 574 1804006 1804223 2423302 2423519 436 1804225 1804865 2423521 2424161 1282 1805161 1805519 2424457 2424815 718 1805573 1805940 2424869 2425236 736 1805942 1806186 2425238 2425482 490 1807310 1807896 2426606 2427192 1174 1808117 1808409 2427413 2427705 586 1808848 1809156 2428144 2428452 618 1809717 1809924 2429013 2429220 416 1810721 1811386 2430016 2430681 1332 1811496 1811808 2430791 2431103 626 1812044 1812254 2431339 2431549 422 1813444 1813751 2432739 2433046 616 1815933 1816168 2435026 2435261 472 1816170 1816385 2435263 2435478 432 1816567 1816846 2435661 2435940 560 1816883 1817128 2435977 2436222 492 1817130 1817717 2436224 2436811 1176 1818438 1818817 2437532 2437911 760 1819078 1819806 2438172 2438900 1458 1820086 1820289 2439181 2439384 408 1820347 1820650 2439442 2439745 608 1821080 1821318 2440175 2440413 478 1821799 1822009 2440894 2441104 422 1822925 1823352 2442020 2442447 856 1823455 1823845 2442550 2442940 782 1825441 1825682 2444536 2444777 484 1828148 1828460 2447243 2447555 626 1830179 1830396 2449274 2449491 436 1831039 1831362 2450134 2450457 648 1833600 1833973 2452695 2453068 748 1835176 1835437 2454271 2454532 524 1837316 1837627 2456411 2456722 624 1839377 1839643 2458472 2458738 534 1840093 1840608 2459188 2459703 1032 1840832 1841088 2459927 2460183 514 1841369 1841757 2460464 2460852 778 1842024 1842384 2461119 2461479 722 1842790 1843015 2461885 2462110 452 1844112 1844407 2463207 2463502 592 1844713 1844993 2463808 2464088 562 1845727 1845938 2464822 2465033 424 1845940 1846159 2465035 2465254 440 1847856 1848154 2466951 2467249 598 1848836 1849199 2468722 2469085 728 1849495 1849718 2469381 2469604 448 1850211 1850541 2470097 2470427 662 1850732 1850934 2470618 2470820 406 1850993 1851408 2470879 2471294 832 1852529 1853020 2473729 2474220 984 1853028 1853379 2474228 2474579 704 1853852 1854132 2475052 2475332 562 1854784 1855075 2475969 2476260 584 1856078 1856343 2477263 2477528 532 1856413 1856625 2477598 2477810 426 1856711 1857112 2477896 2478297 804 1857558 1858246 2478743 2479431 1378 1858248 1858551 2479433 2479736 608 1858553 1858836 2479738 2480021 568 1860370 1861509 2481555 2482694 2280 1861511 1861782 2482696 2482967 544 1863334 1863610 2484522 2484798 554 1863926 1864222 2485114 2485410 594 1864224 1864732 2485412 2485920 1018 1864734 1865340 2485922 2486528 1214 1865342 1865574 2486530 2486762 466 1866380 1866624 2487568 2487812 490 1866680 1866887 2487868 2488075 416 1867227 1867483 2488415 2488671 514 1867593 1867912 2488781 2489100 640 1868545 1868988 2489733 2490176 888 1869317 1869768 2490505 2490956 904 1869885 1870338 2491073 2491526 908 1870392 1870609 2491580 2491797 436 1870868 1871067 2492056 2492255 400 1871297 1871667 2492485 2492855 742 1871669 1872012 2492857 2493200 688 1872212 1872466 2493400 2493654 510 1873361 1873609 2494549 2494797 498 1874584 1874784 2495772 2495972 402 1875329 1875572 2496517 2496760 488 1876026 1876318 2497214 2497506 586 1877472 1877905 2498659 2499092 868 1878716 1879194 2499903 2500381 958 1879555 1880176 2500742 2501363 1244 1880178 1880422 2501365 2501609 490 1882198 1882517 2503610 2503929 640 1882790 1883016 2504202 2504428 454 1883198 1883502 2504610 2504914 610 1883504 1883748 2504916 2505160 490 1885188 1885465 2506601 2506878 556 1885990 1886200 2507403 2507613 422 1887393 1887625 2508806 2509038 466 1887654 1888035 2509067 2509448 764 1888341 1888556 2509754 2509969 432 1889085 1889473 2510498 2510886 778 1890096 1890394 2511509 2511807 598 1890396 1890615 2511809 2512028 440 1891089 1891371 2512502 2512784 566 1892049 1892388 2513462 2513801 680 1892542 1892861 2513955 2514274 640 1893008 1893345 2514421 2514758 676 1893700 1893987 2515113 2515400 576 1894688 1895028 2516101 2516441 682 1895030 1895434 2516443 2516847 810 1895450 1895675 2516863 2517088 452 1895677 1896174 2517090 2517587 996 1896582 1896861 2517995 2518274 560 1897197 1897669 2518610 2519082 946 1897725 1898386 2519138 2519799 1324 1898635 1898897 2520048 2520310 526 1898899 1899782 2520312 2521195 1768 1900050 1900363 2521465 2521778 628 1901084 1901334 2522499 2522749 502 1901591 1902258 2523006 2523673 1336 1902260 1903250 2523675 2524665 1982 1903706 1903916 2525122 2525332 422 1904451 1904683 2525867 2526099 466 1905090 1905374 2526506 2526790 570 1905394 1905787 2526810 2527203 788 1906033 1906301 2527448 2527716 538 1906477 1906764 2527892 2528179 576 1907251 1907489 2528668 2528906 478 1907826 1908287 2529243 2529704 924 1909427 1909630 2530844 2531047 408 1909823 1910092 2531240 2531509 540 1910094 1910722 2531511 2532139 1258 1911155 1911438 2532572 2532855 568 1911854 1912301 2533271 2533718 896 1912475 1912707 2533892 2534124 466 1912709 1913020 2534126 2534437 624 1913418 1913755 2534835 2535172 676 1914182 1914433 2535599 2535850 504 1914518 1914724 2535935 2536141 414 1915040 1915634 2536457 2537051 1190 1915716 1915918 2537133 2537335 406 1916259 1916497 2537676 2537914 478 1919902 1920259 2541320 2541677 716 1920774 1921293 2542192 2542711 1040 1921956 1922185 2543374 2543603 460 1922734 1923082 2544152 2544500 698 1923603 1923893 2545021 2545311 582 1924022 1924222 2545440 2545640 402 1924256 1924465 2545674 2545883 420 1925121 1925374 2546539 2546792 508 1925790 1926091 2547208 2547509 604 1928392 1928797 2549811 2550216 812 1928836 1929340 2550255 2550759 1010 1929708 1930092 2551127 2551511 770 1930094 1930449 2551513 2551868 712 1930451 1930783 2551870 2552202 666 1931042 1931502 2552461 2552921 922 1931504 1931847 2552923 2553266 688 1931852 1932171 2553271 2553590 640 1932814 1933017 2554233 2554436 408 1933019 1933251 2554438 2554670 466 1933394 1934088 2554813 2555507 1390 1934090 1934303 2555509 2555722 428 1934591 1934791 2556010 2556210 402 1935284 1935483 2556703 2556902 400 1935593 1936007 2557012 2557426 830 1936009 1936520 2557428 2557939 1024 1936878 1937808 2558297 2559227 1862 1937810 1938056 2559229 2559475 494 1938058 1938409 2559477 2559828 704 1938547 1938764 2559966 2560183 436 1939078 1939529 2560497 2560948 904 1939546 1939765 2560965 2561184 440 1939957 1940251 2561376 2561670 590 1940740 1940996 2562159 2562415 514 1942544 1943027 2564062 2564545 968 1943029 1943304 2564547 2564822 552 1943422 1943789 2564940 2565307 736 1943791 1944077 2565309 2565595 574 1944316 1944535 2565834 2566053 440 1944537 1944809 2566055 2566327 546 1945299 1945757 2566817 2567275 918 1946023 1946328 2567541 2567846 612 1946330 1946559 2567848 2568077 460 1946564 1946799 2568082 2568317 472 1946827 1947162 2568345 2568680 672 1948177 1948773 2569695 2570291 1194 1949888 1950127 2571406 2571645 480 1950394 1950831 2571912 2572349 876 1950833 1951383 2572351 2572901 1102 1951403 1952063 2572921 2573581 1322 1953790 1954060 2575308 2575578 542 1954270 1954649 2575788 2576167 760 1954951 1955256 2576469 2576774 612 1956632 1956895 2578153 2578416 528 1957021 1957247 2578542 2578768 454 1957920 1958470 2579441 2579991 1102 1958472 1958686 2579993 2580207 430 1959135 1959596 2580656 2581117 924 1961538 1961756 2583059 2583277 438 1961794 1962031 2583315 2583552 476 1962511 1962740 2584032 2584261 460 1963041 1963240 2584562 2584761 400 1964000 1964244 2585521 2585765 490 1964308 1964714 2585829 2586235 814 1964720 1964952 2586241 2586473 466 1964954 1965247 2586475 2586768 588 1965875 1966077 2587396 2587598 406 1966259 1966477 2587780 2587998 438 1966819 1967436 2588340 2588957 1236 1968034 1968254 2589555 2589775 442 1968813 1969103 2590334 2590624 582 1969837 1970060 2591358 2591581 448 1970086 1970291 2591607 2591812 412 1971049 1971529 2592568 2593048 962 1971978 1972255 2593497 2593774 556 1972876 1973268 2594395 2594787 786 1973283 1973564 2594802 2595083 564 1974175 1974430 2595694 2595949 512 1975026 1975276 2596545 2596795 502 1975278 1975528 2596797 2597047 502 1975671 1975990 2597190 2597509 640 1977699 1977960 2598442 2598703 524 1978683 1978945 2599426 2599688 526 1979046 1979359 2599789 2600102 628 1980567 1980795 2601310 2601538 458 1982052 1982308 2602796 2603052 514 1982625 1982842 2603369 2603586 436 1982844 1983139 2603588 2603883 592 1984651 1985338 2605395 2606082 1376 1985855 1986116 2606600 2606861 524 1986452 1987099 2607196 2607843 1296 1987606 1988052 2608350 2608796 894 1989494 1989724 2610238 2610468 462 1990043 1990278 2631906 2632141 472 1990754 1991024 2632617 2632887 542 1991686 1991942 2633549 2633805 514 1992676 1992895 2634539 2634758 440 1993250 1993573 2635113 2635436 648 1993733 1993977 2635596 2635840 490 1993979 1994269 2635842 2636132 582 1994271 1994552 2636134 2636415 564 1996761 1997337 2638624 2639200 1154 1997710 1998233 2639573 2640096 1048 1998736 1998953 2640599 2640816 436 1998955 1999175 2640818 2641038 442 1999338 1999939 2641201 2641802 1204 2001495 2001699 2643618 2643822 410 2002872 2003182 2644986 2645296 622 2004044 2004246 2646158 2646360 406 2004760 2005085 2646874 2647199 652 2007088 2007366 2649202 2649480 558 2007394 2007805 2649508 2649919 824 2007807 2008180 2649921 2650294 748 2011047 2011524 2655125 2655602 956 2011589 2011918 2655667 2655996 660 2013971 2014599 2658049 2658677 1258 2014884 2015239 2659024 2659379 712 2015595 2015830 2659735 2659970 472 2016279 2016783 2660419 2660923 1010 2017939 2018353 2662080 2662494 830 2018612 2018943 2662753 2663084 664 2019325 2019661 2663466 2663802 674 2019822 2020218 2663963 2664359 794 2020220 2020530 2664361 2664671 622 2020532 2020953 2664673 2665094 844 2020955 2021623 2665096 2665764 1338 2021625 2021857 2665766 2665998 466 2021859 2022464 2666000 2666605 1212 2022653 2023379 2666794 2667520 1454 2023837 2024052 2667978 2668193 432 2025011 2025411 2669152 2669552 802 2026243 2026459 2670385 2670601 434 2027335 2027681 2671477 2671823 694 2027725 2028345 2671867 2672487 1242 2028564 2028792 2672706 2672934 458 2028869 2029072 2673011 2673214 408 2030970 2031175 2675112 2675317 412 2033871 2034187 2678006 2678322 634 2035344 2035564 2679479 2679699 442 2037139 2037485 2681275 2681621 694 2039412 2039618 2683547 2683753 414 2039771 2040082 2683906 2684217 624 2040374 2040678 2684509 2684813 610 2041532 2042285 2730847 2731600 1508 2042293 2042551 2731608 2731866 518 2042553 2042842 2731868 2732157 580 2043421 2043668 2732736 2732983 496 2043670 2043894 2732985 2733209 450 2045104 2045324 2734419 2734639 442 2052078 2052322 2742298 2742542 490 2053032 2053248 2743252 2743468 434 2053634 2053854 2743854 2744074 442 2053856 2054088 2744076 2744308 466 2054090 2054397 2744310 2744617 616 2054614 2054816 2744834 2745036 406 2056033 2056236 2746250 2746453 408 2057287 2057578 2747504 2747795 584 2062915 2064054 2753131 2754270 2280 2065897 2066449 2757364 2757916 1106 2066623 2066961 2758091 2758429 678 2074799 2075316 2761899 2762416 1036 2075456 2075809 2762556 2762909 708 2075811 2076169 2762910 2763268 718 2076404 2076706 2763504 2763806 606 2077254 2077487 2764354 2764587 468 2077678 2077940 2764778 2765040 526 2077969 2078252 2765069 2765352 568 2079328 2079557 2766429 2766658 460 2079685 2079908 2766786 2767009 448 2082879 2083130 2769981 2770232 504 2084419 2084738 2771521 2771840 640 2084836 2085336 2771938 2772438 1002 2086206 2086438 2773308 2773540 466 2086440 2086651 2773542 2773753 424 2091346 2091562 2778006 2778222 434 2094483 2094687 2781143 2781347 410 2097262 2097574 2783920 2784232 626 2113919 2114137 2803895 2804113 438 2119227 2119458 2809107 2809338 464 2122375 2122654 2812343 2812622 560 2122745 2123002 2812713 2812970 516 2126130 2126337 2816098 2816305 416 2127587 2127870 2817558 2817841 568 2128148 2128410 2818119 2818381 526 2130083 2130306 2820054 2820277 448 2131508 2131765 2821479 2821736 516 2133560 2133891 2823531 2823862 664 2133935 2134325 2823906 2824296 782 2134864 2135487 2824835 2825458 1248 2135806 2136050 2825778 2826022 490 2136085 2136302 2826057 2826274 436 2139119 2139375 2829563 2829819 514 2139410 2139702 2829854 2830146 586 2140010 2140292 2830454 2830736 566 2141744 2141972 2832191 2832419 458 2143720 2144076 2834167 2834523 714 2144305 2144574 2834752 2835021 540 2144682 2145093 2835121 2835532 824 2145494 2145735 2835933 2836174 484 2145917 2146119 2836356 2836558 406 2152874 2153097 2842908 2843131 448 2157500 2157728 2847534 2847762 458 2159512 2159726 2849546 2849760 430 2160915 2161195 2850949 2851229 562 2163830 2164029 2853865 2854064 400 2164634 2164884 2854669 2854919 502 2167991 2168191 2857396 2857596 402 2169513 2170123 2857657 2858267 1222 2170692 2170904 2858836 2859048 426 2171027 2171256 2859171 2859400 460 2171771 2172054 2859915 2860198 568 2172899 2173232 2861043 2861376 668 2173706 2173992 2861850 2862136 574 2174134 2174470 2862278 2862614 674 2176255 2176466 2864390 2864601 424 2176519 2176744 2864654 2864879 452 2178034 2178238 2866170 2866374 410 2178361 2178572 2866497 2866708 424 2179950 2180203 2868086 2868339 508 2180394 2180620 2868530 2868756 454 2181635 2182001 2869771 2870137 734 2182296 2182583 2870432 2870719 576 2183634 2183837 2873952 2874155 408 2183839 2184087 2874157 2874405 498 2184857 2185097 2875201 2875441 482 2191221 2191427 2881566 2881772 414 2191466 2191724 2881811 2882069 518 2192021 2192638 2882366 2882983 1236 2192659 2192863 2883004 2883208 410 2194182 2194415 2884527 2884760 468 2198233 2198437 2891590 2891794 410 2200600 2200819 2893957 2894176 440 2201929 2202134 2895284 2895489 412 2202523 2202763 2896812 2897052 482 2205919 2206158 2900208 2900447 480 2208053 2208314 2902342 2902603 524 2209448 2209707 2905053 2905312 520 2209899 2210143 2905506 2905750 490 2210145 2210348 2905752 2905955 408 2210350 2210690 2905957 2906297 682 2211187 2211475 2906794 2907082 578 2211943 2212186 2907550 2907793 488 2212389 2212600 2907996 2908207 424 2212933 2213153 2957456 2957676 442 2213274 2213964 2957797 2958487 1382 2218456 2218682 2963020 2963246 454 2219935 2220147 2964499 2964711 426 2220987 2221574 2965551 2966138 1176 2222369 2222661 2966933 2967225 586 2222834 2223101 2967398 2967665 536 2223432 2223734 2967996 2968298 606 2225496 2225947 2970060 2970511 904 2226627 2226862 2971192 2971427 472 2226864 2227086 2971429 2971651 446 2228571 2228812 2979215 2979456 484 2229200 2229697 2979844 2980341 996 2229855 2230119 2980499 2980763 530 2230121 2230345 2980765 2980989 450 2230830 2231351 2981474 2981995 1044 2231542 2231862 2982186 2982506 642 2232100 2232389 2982744 2983033 580 2233168 2233411 2983812 2984055 488 2233518 2234089 2984162 2984733 1144 2234218 2234614 2984862 2985258 794 2234979 2235319 2985624 2985964 682 2235321 2235523 2985966 2986168 406 2237286 2237587 2987931 2988232 604 2238311 2238529 2988956 2989174 438 2238619 2238940 2989264 2989585 644 2239235 2239730 2989880 2990375 992 2239732 2239939 2990377 2990584 416 2241424 2242032 2992069 2992677 1218 2242658 2242988 2993303 2993633 662 2243305 2243526 2993938 2994159 444 2243528 2244242 2994161 2994875 1430 2244244 2244464 2994877 2995097 442 2245425 2245663 2996056 2996294 478 2245849 2246101 2996480 2996732 506 2246572 2247571 2997203 2998202 2000 2247573 2248062 2998204 2998693 980 2248064 2248699 2998695 2999330 1272 2248701 2249569 2999332 3000200 1738 2249571 2250110 3000202 3000741 1080 2251980 2252305 3002560 3002885 652 2253003 2253255 3003583 3003835 506 2253263 2253585 3003843 3004165 646 2256235 2256769 3006815 3007349 1070 2259308 2259547 3009889 3010128 480 2259903 2260198 3010484 3010779 592 2260200 2260542 3010781 3011123 686 2261231 2261549 3011812 3012130 638 2261794 2262073 3012375 3012654 560 2262083 2262426 3012664 3013007 688 2263166 2263411 3013747 3013992 492 2263643 2264229 3014224 3014810 1174 2265002 2265281 3015583 3015862 560 2266560 2266943 3017141 3017524 768 2268043 2268619 3018625 3019201 1154 2269273 2269802 3019856 3020385 1060 2272483 2272778 3023066 3023361 592 2274347 2274557 3024930 3025140 422 2275057 2275295 3025640 3025878 478 2275539 2275809 3026122 3026392 542 2275811 2276060 3026394 3026643 500 2276062 2276278 3026645 3026861 434 2276280 2276870 3026863 3027453 1182 2277547 2277881 3028130 3028464 670 2278243 2278588 3028826 3029171 692 2280390 2280642 3030973 3031225 506 2280686 2280890 3031269 3031473 410 2281848 2282052 3032431 3032635 410 2282054 2282528 3032637 3033111 950 2283182 2283584 3033765 3034167 806 2283586 2283854 3034169 3034437 538 2284626 2284837 3035207 3035418 424 2285076 2285356 3035657 3035937 562 2285358 2285560 3035939 3036141 406 2289824 2290039 3039030 3039245 432 2290772 2290985 3039978 3040191 428 2291857 2292428 3041063 3041634 1144 2293245 2293458 3042451 3042664 428 2293481 2293703 3042687 3042909 446 2293807 2294108 3043013 3043314 604 2294251 2294644 3043457 3043850 788 2295290 2295646 3044496 3044852 714 2295648 2296086 3044854 3045292 878 2296175 2296494 3045381 3045700 640 2296613 2296935 3045819 3046141 646 2297470 2297887 3046676 3047093 836 2298029 2298351 3047235 3047557 646 2299772 2300043 3048978 3049249 544 2300249 2300505 3049455 3049711 514 2300657 2300999 3049863 3050205 686 2301001 2301222 3050207 3050428 444 2301224 2301640 3050430 3050846 834 2303695 2303957 3052335 3052597 526 2303998 2304404 3052638 3053044 814 2304406 2304957 3053046 3053597 1104 2305313 2305678 3053953 3054318 732 2306306 2306553 3054946 3055193 496 2306555 2306758 3055195 3055398 408 2309351 2309766 3057991 3058406 832 2310631 2310948 3059271 3059588 636 2311323 2311661 3059963 3060301 678 2312305 2312510 3060945 3061150 412 2312535 2312783 3061175 3061423 498 2313355 2314407 3061995 3063047 2106 2315236 2315453 3063876 3064093 436 2315698 2315945 3064338 3064585 496 2316067 2316285 3064707 3064925 438 2316379 2316686 3065019 3065326 616 2316688 2316893 3065328 3065533 412 2317120 2317469 3065760 3066109 700 2317561 2317971 3066201 3066611 822 2325693 2326066 3067117 3067490 748 2326080 2326352 3067504 3067776 546 2328984 2329211 3070408 3070635 456 2329599 2329901 3071023 3071325 606 2330034 2330252 3071458 3071676 438 2330740 2331008 3072164 3072432 538 2331328 2331814 3072752 3073238 974 2332288 2332642 3073712 3074066 710 2332644 2332860 3074068 3074284 434 2333387 2333610 3074811 3075034 448 2334785 2335009 3076208 3076432 450 2336208 2336413 3077631 3077836 412 2336415 2336647 3077838 3078070 466 2337189 2337503 3078612 3078926 630 2337505 2337720 3078928 3079143 432 2338608 2338846 3080044 3080282 478 2339047 2339302 3080483 3080738 512 2339383 2339919 3080819 3081355 1074 2341025 2341445 3082461 3082881 842 2342842 2343281 3084278 3084717 880 2344015 2344303 3085451 3085739 578 2348815 2349051 3093840 3094076 474 2350732 2351004 3095757 3096029 546 2351164 2351387 3096189 3096412 448 2351467 2351807 3096492 3096832 682 2354350 2354957 3099375 3099982 1216 2354959 2355241 3099984 3100266 566 2356031 2356258 3100885 3101112 456 2357185 2357442 3102038 3102295 516 2357830 2358383 3102683 3103236 1108 2358663 2359031 3103516 3103884 738 2359274 2359777 3104127 3104630 1008 2361150 2361633 3106003 3106486 968 2361635 2361898 3106488 3106751 528 2365050 2365259 3109903 3110112 420 2365300 2365505 3110153 3110358 412 2365729 2366155 3110582 3111008 854 2366694 2366896 3111547 3111749 406 2366898 2367151 3111751 3112004 508 2367195 2367565 3112048 3112418 742 2367738 2367939 3112591 3112792 404 2367941 2368333 3112794 3113186 786 2368581 2369006 3113434 3113859 852 2369104 2369342 3113957 3114195 478 2369344 2369561 3114197 3114414 436 2371115 2371346 3115968 3116199 464 2371355 2371559 3116208 3116412 410 2371934 2372317 3116787 3117170 768 2373433 2373657 3118286 3118510 450 2374791 2375086 3119644 3119939 592 2377211 2377470 3122064 3122323 520 2378844 2379095 3123697 3123948 504 2379699 2379931 3124552 3124784 466 2388716 2388930 3129159 3129373 430 2389160 2389806 3129603 3130249 1294 2391447 2391892 3131957 3132402 892 2392296 2392513 3132806 3133023 436 2393010 2393211 3133520 3133721 404 2393779 2394028 3134289 3134538 500 2394207 2394843 3134717 3135353 1274 2395298 2395556 3135808 3136066 518 2397004 2397356 3137514 3137866 706 2398063 2398308 3138573 3138818 492 2398727 2398941 3139237 3139451 430 2399860 2400179 3140370 3140689 640 2401998 2402382 3142508 3142892 770 2402384 2402883 3142894 3143393 1000 2403015 2403224 3143525 3143734 420 2403226 2403562 3143736 3144072 674 2404124 2404360 3144634 3144870 474 2404362 2404984 3144872 3145494 1246 2405033 2405255 3145543 3145765 446 2405413 2405833 3145923 3146343 842 2405973 2406286 3146483 3146796 628 2407031 2407332 3147541 3147842 604 2407843 2408135 3148353 3148645 586 2408137 2408740 3148647 3149250 1208 2408742 2408978 3149252 3149488 474 2409223 2409580 3149733 3150090 716 2409899 2410124 3150409 3150634 452 2410126 2410474 3150636 3150984 698 2410877 2411974 3151387 3152484 2196 2411990 2412480 3152500 3152990 982 2412572 2413115 3153082 3153625 1088 2413117 2413628 3153627 3154138 1024 2414188 2414453 3154698 3154963 532 2414542 2414910 3155052 3155420 738 2415052 2415297 3155562 3155807 492 2415604 2415923 3156114 3156433 640 2416588 2416808 3157098 3157318 442 2417113 2417411 3157623 3157921 598 2417437 2417877 3157947 3158387 882 2419183 2419387 3159693 3159897 410 2419395 2419663 3159905 3160173 538 2421331 2421674 3161841 3162184 688 2422083 2422456 3162593 3162966 748 2422485 2422840 3162995 3163350 712 2423554 2424027 3164064 3164537 948 2424119 2424381 3164629 3164891 526 2424749 2425018 3165259 3165528 540 2425053 2425264 3165563 3165774 424 2425958 2426231 3166468 3166741 548 2428031 2428341 3168541 3168851 622 2428580 2428822 3169090 3169332 486 2429754 2430006 3170447 3170699 506 2430853 2431216 3171546 3171909 728 2431218 2432122 3171911 3172815 1810 2432480 2433061 3173173 3173754 1164 2433567 2433864 3174260 3174557 596 2434712 2434964 3175405 3175657 506 2435529 2435802 3176222 3176495 548 2435804 2436024 3176497 3176717 442 2436196 2436429 3176889 3177122 468 2437238 2437440 3177931 3178133 406 2438957 2439180 3179660 3179883 448 2439374 2439708 3180077 3180411 670 2439945 2440207 3180648 3180910 526 2442085 2442302 3182788 3183005 436 2443422 2443627 3184125 3184330 412 2443784 2444015 3184487 3184718 464 2445317 2445553 3186020 3186256 474 2446350 2446688 3187053 3187391 678 2454776 2454994 3195531 3195749 438 2455788 2456296 3196543 3197051 1018 2456619 2456870 3197374 3197625 504 2458874 2459512 3199628 3200266 1278 2460255 2460457 3201009 3201211 406 2462902 2463226 3203841 3204165 650 2477087 2477474 3219567 3219954 776 2478097 2478468 3220577 3220948 744 2478884 2479094 3221364 3221574 422 2479182 2479452 3221662 3221932 542 2479454 2479743 3221934 3222223 580 2481784 2482580 3224264 3225060 1594 2485223 2485434 3227703 3227914 424 2487009 2487311 3229485 3229787 606 2487475 2487680 3229951 3230156 412 2487748 2487953 3230224 3230429 412 2488126 2488487 3230602 3230963 724 2489509 2489738 3231985 3232214 460 2489857 2490088 3232333 3232564 464 2490804 2491159 3233280 3233635 712 2491680 2491920 3234156 3234396 482 2493507 2493824 3235984 3236301 636 2494105 2494657 3236582 3237134 1106 2494917 2495150 3237394 3237627 468 2496124 2496336 3238601 3238813 426 2496425 2496805 3238903 3239283 762 2498319 2498583 3240797 3241061 530 2499116 2499492 3241594 3241970 754 2499646 2499886 3242124 3242364 482 2499888 2500201 3242366 3242679 628 2500592 2500857 3243070 3243335 532 2501864 2502366 3244342 3244844 1006 2502374 2502599 3244852 3245077 452 2504599 2504812 3247077 3247290 428 2505039 2505253 3247517 3247731 430 2505829 2506207 3248307 3248685 758 2507249 2507950 3249727 3250428 1404 2508288 2508706 3250766 3251184 838 2508708 2509001 3251186 3251479 588 2510142 2510587 3252619 3253064 892 2510589 2510803 3253066 3253280 430 2511109 2511410 3253586 3253887 604 2514424 2514627 3255552 3255755 408 2515055 2515911 3256183 3257039 1714 2516170 2516423 3257182 3257435 508 2516425 2516643 3257437 3257655 438 2516645 2517037 3257657 3258049 786 2517487 2517986 3260246 3260745 1000 2518048 2518274 3260807 3261033 454 2518801 2519152 3261560 3261911 704 2519154 2519378 3261913 3262137 450 2524775 2525038 3263384 3263647 528 2525040 2525347 3263649 3263956 616 2525376 2525726 3263985 3264335 702 2525728 2526444 3264337 3265053 1434 2526978 2527238 3265587 3265847 522 2527385 2527720 3265994 3266329 672 2528020 2528283 3266629 3266892 528 2529020 2529435 3267629 3268044 832 2529701 2529924 3268310 3268533 448 2530338 2530630 3268947 3269239 586 2531010 2531263 3269619 3269872 508 2531438 2531958 3270047 3270567 1042 2531960 2532332 3270569 3270941 746 2532682 2532887 3271291 3271496 412 2533185 2534040 3271794 3272649 1712 2537775 2538002 3275424 3275651 456 2538067 2538302 3275716 3275951 472 2538403 2538686 3276052 3276335 568 2541417 2541663 3279066 3279312 494 2542194 2542549 3279697 3280052 712 2544569 2544826 3282072 3282329 516 2547613 2547847 3284934 3285168 470 2548378 2548736 3285699 3286057 718 2548738 2549045 3286059 3286366 616 2549099 2549312 3286420 3286633 428 2549314 2549839 3286635 3287160 1052 2550023 2550307 3287344 3287628 570 2550593 2550918 3287914 3288239 652 2551130 2551347 3288451 3288668 436 2552936 2553294 3290257 3290615 718 2554391 2554722 3291712 3292043 664 2555321 2555603 3292642 3292924 566 2556229 2556717 3293550 3294038 978 2563647 2563847 3294178 3294378 402 2565243 2565475 3295774 3296006 466 2566632 2567154 3297046 3297568 1046 2567312 2567642 3297726 3298056 662 2568434 2568987 3298848 3299401 1108 2570309 2570600 3300723 3301014 584 2572119 2572431 3302461 3302773 626 2572872 2573104 3303214 3303446 466 2574757 2575061 3305099 3305403 610 2576480 2576803 3306822 3307145 648 2576805 2577076 3307147 3307418 544 2577426 2577719 3307768 3308061 588 2579667 2579994 3310009 3310336 656 2580018 2580239 3310360 3310581 444 2580681 2580891 3311023 3311233 422 2580942 2581167 3311284 3311509 452 2581680 2581891 3312022 3312233 424 2583483 2583691 3313825 3314033 418 2583693 2583939 3314035 3314281 494 2584527 2584813 3314869 3315155 574 2585107 2585443 3315449 3315785 674 2585481 2585996 3315823 3316338 1032 2586571 2586905 3316913 3317247 670 2587132 2587340 3317474 3317682 418 2587774 2588036 3318116 3318378 526 2588299 2588642 3318641 3318984 688 2588644 2588846 3318986 3319188 406 2590181 2590749 3320523 3321091 1138 2593465 2593720 3323778 3324033 512 2593778 2594108 3324091 3324421 662 2595210 2595788 3325523 3326101 1158 2595986 2596263 3326299 3326576 556 2596265 2596849 3326578 3327162 1170 2596868 2597151 3327181 3327464 568 2597190 2597545 3327503 3327858 712 2597749 2598076 3328062 3328389 656 2598078 2598313 3328391 3328626 472 2598363 2598798 3328676 3329111 872 2601610 2601942 3331923 3332255 666 2602617 2602960 3332930 3333273 688 2603355 2603608 3333668 3333921 508 2603730 2603986 3334043 3334299 514 2604422 2604657 3334735 3334970 472 2606436 2606870 3336749 3337183 870 2607877 2608085 3338238 3338446 418 2608337 2608569 3338698 3338930 466 2610006 2610257 3340367 3340618 504 2611902 2612633 3342265 3342996 1464 2613728 2614090 3344091 3344453 726 2614188 2614399 3344551 3344762 424 2614580 2614841 3344943 3345204 524 2615310 2615748 3345673 3346111 878 2615750 2616027 3346113 3346390 556 2616029 2616801 3346392 3347164 1546 2617029 2617312 3347392 3347675 568 2617371 2617651 3347734 3348014 562 2617653 2618471 3348016 3348834 1638 2618650 2618927 3349013 3349290 556 2619068 2619400 3349431 3349763 666 2620295 2620536 3350658 3350899 484 2620903 2621574 3351265 3351936 1344 2621648 2622141 3352010 3352503 988 2622602 2622972 3352964 3353334 742 2622974 2623330 3353336 3353692 714 2623959 2624281 3354321 3354643 646 2624863 2625146 3355225 3355508 568 2625345 2625778 3355707 3356140 868 2625998 2626278 3356360 3356640 562 2626491 2626699 3356853 3357061 418 2626701 2627079 3357063 3357441 758 2627281 2627535 3357643 3357897 510 2627901 2628187 3358263 3358549 574 2628222 2628544 3358584 3358906 646 2629209 2629572 3359571 3359934 728 2629758 2629996 3360120 3360358 478 2630442 2630759 3360804 3361121 636 2630825 2631072 3361187 3361434 496 2631491 2631693 3361853 3362055 406 2631695 2632029 3362057 3362391 670 2633280 2633494 3363642 3363856 430 2634147 2634646 3364508 3365007 1000 2634684 2634898 3365045 3365259 430 2634900 2635635 3365261 3365996 1472 2635637 2635916 3365998 3366277 560 2636072 2636311 3366433 3366672 480 2636313 2637156 3366674 3367517 1688 2637264 2637676 3367625 3368037 826 2638152 2638776 3368513 3369137 1250 2639345 2639640 3369706 3370001 592 2639705 2640279 3370066 3370640 1150 2640598 2641264 3370959 3371625 1334 2642265 2642484 3372626 3372845 440 2644797 2645068 3379989 3380260 544 2646232 2646718 3381424 3381910 974 2646720 2647199 3381912 3382391 960 2647402 2647747 3382594 3382939 692 2649258 2649769 3384450 3384961 1024 2650153 2650613 3385345 3385805 922 2650615 2650905 3385807 3386097 582 2653587 2653891 3388463 3388767 610 2654352 2654790 3389228 3389666 878 2654921 2655223 3389797 3390099 606 2655225 2655706 3390101 3390582 964 2655708 2656017 3390584 3390893 620 2656019 2656290 3390895 3391166 544 2656292 2656816 3391168 3391692 1050 2657068 2657321 3391944 3392197 508 2658334 2658578 3393210 3393454 490 2659321 2659587 3394197 3394463 534 2660011 2660327 3394887 3395203 634 2661878 2662101 3396600 3396823 448 2662610 2662809 3397332 3397531 400 2662985 2663205 3397707 3397927 442 2663404 2664328 3398126 3399050 1850 2666419 2667002 3401142 3401725 1168 2667999 2668309 3402722 3403032 622 2669071 2669365 3403794 3404088 590 2672157 2672527 3406880 3407250 742 2673299 2673585 3408022 3408308 574 2674570 2674779 3409293 3409502 420 2676306 2676744 3411029 3411467 878 2680540 2680898 3415263 3415621 718 2683102 2683328 3417690 3417916 454 2683330 2684113 3417918 3418701 1568 2684451 2684963 3419039 3419551 1026 2685044 2685290 3419632 3419878 494 2685816 2686077 3420404 3420665 524 2686500 2686729 3421088 3421317 460 2687173 2687453 3421761 3422041 562 2687674 2688115 3422262 3422703 884 2688993 2689305 3423581 3423893 626 2691024 2691228 3425630 3425834 410 2691698 2691975 3426304 3426581 556 2692586 2692875 3427192 3427481 580 2693026 2693277 3427632 3427883 504 2693279 2693603 3427885 3428209 650 2693778 2693983 3428383 3428588 412 2694111 2694508 3428716 3429113 796 2694510 2694993 3429115 3429598 968 2695122 2695678 3429727 3430283 1114 2696478 2697016 3431083 3431621 1078 2697024 2697292 3431629 3431897 538 2699800 2700161 3434407 3434768 724 2700600 2700917 3435207 3435524 636 2700919 2701186 3435526 3435793 536 2702463 2702896 3437071 3437504 868 2703201 2703535 3437809 3438143 670 2704116 2704639 3438724 3439247 1048 2704821 2705454 3439429 3440062 1268 2705750 2706257 3440358 3440865 1016 2706433 2706921 3441041 3441529 978 2707175 2708347 3441771 3442943 2346 2708499 2708746 3443095 3443342 496 2709414 2709740 3444010 3444336 654 2709742 2710033 3444338 3444629 584 2710686 2711190 3445282 3445786 1010 2714377 2714608 3448797 3449028 464 2715041 2715350 3449461 3449770 620 2716207 2716714 3450627 3451134 1016 2716916 2717459 3451336 3451879 1088 2717578 2717837 3451998 3452257 520 2717875 2718432 3452295 3452852 1116 2719838 2720043 3454258 3454463 412 2720685 2720963 3455105 3455383 558 2721943 2722325 3456363 3456745 766 2722364 2722648 3456784 3457068 570 2722719 2722976 3457139 3457396 516 2722978 2723197 3457398 3457617 440 2723512 2723820 3457932 3458240 618 2724288 2724992 3458707 3459411 1410 2725002 2725338 3459421 3459757 674 2725518 2725859 3459938 3460279 684 2726034 2726557 3460454 3460977 1048 2727756 2728138 3462102 3462484 766 2728176 2728411 3462523 3462758 472 2729938 2730256 3464290 3464608 638 2730258 2730709 3464610 3465061 904 2730715 2730941 3465067 3465293 454 2730943 2731223 3465295 3465575 562 2731369 2732126 3465721 3466478 1516 2732128 2732474 3466480 3466826 694 2733900 2734427 3468252 3468779 1056 2734630 2734983 3468982 3469335 708 2735104 2735627 3469456 3469979 1048 2735929 2736218 3470281 3470570 580 2736892 2737170 3471244 3471522 558 2737943 2738473 3472295 3472825 1062 2738616 2738989 3472968 3473341 748 2739487 2739726 3473839 3474078 480 2740107 2740530 3474459 3474882 848 2740532 2740751 3474884 3475103 440 2741872 2742117 3476224 3476469 492 2742144 2743097 3476497 3477450 1908 2743240 2743532 3477593 3477885 586 2743627 2744287 3477980 3478640 1322 2744484 2744755 3478725 3478996 544 2744814 2745301 3479055 3479542 976 2745687 2746250 3479928 3480491 1128 2746252 2746651 3480493 3480892 800 2746790 2747112 3481032 3481354 646 2748316 2748598 3482557 3482839 566 2748600 2748900 3482841 3483141 602 2749601 2749903 3483842 3484144 606 2750439 2750646 3484680 3484887 416 2751144 2751386 3485385 3485627 486 2751471 2751884 3485712 3486125 828 2752393 2752793 3486634 3487034 802 2753604 2753931 3487845 3488172 656 2778708 2778970 3512565 3512827 526 2779235 2779927 3513092 3513784 1386 2780718 2781019 3514575 3514876 604 2781027 2781266 3514885 3515124 480 2788875 2789257 3522735 3523117 766 2792327 2792526 3526187 3526386 400 2793676 2794100 3527536 3527960 850 2794102 2794557 3527962 3528417 912 2794848 2795073 3528708 3528933 452 2796262 2796549 3530122 3530409 576 2797007 2797371 3530866 3531230 730 2797373 2798389 3531232 3532248 2034 2798633 2799226 3534456 3535049 1188 2800013 2800498 3535836 3536321 972 2800607 2800878 3536430 3536701 544 2801135 2801361 3536958 3537184 454 2801453 2801751 3537276 3537574 598 2801948 2802460 3537771 3538283 1026 2802880 2803088 3538705 3538913 418 2804112 2804406 3539937 3540231 590 2804534 2804916 3540359 3540741 766 2805471 2805684 3541295 3541508 428 2807358 2807725 3543189 3543556 736 2808012 2808214 3543843 3544045 406 2808405 2808652 3544236 3544483 496 2808654 2808877 3544485 3544708 448 2808895 2809235 3544726 3545066 682 2809368 2809798 3545199 3545629 862 2810464 2810697 3546295 3546528 468 2812447 2812857 3548278 3548688 822 2813196 2813583 3549026 3549413 776 2814300 2814622 3550130 3550452 646 2816865 2817266 3552466 3552867 804 2817268 2817469 3552869 3553070 404 2818753 2819245 3554355 3554847 986 2819449 2820142 3555051 3555744 1388 2820273 2820646 3555874 3556247 748 2820875 2821089 3556475 3556689 430 2821091 2821319 3556691 3556919 458 2821715 2821967 3557315 3557567 506 2825702 2825914 3561302 3561514 426 2826840 2827088 3562441 3562689 498 2828502 2828984 3564104 3564586 966 2830753 2831006 3566355 3566608 508 2831645 2831876 3567043 3567274 464 2833063 2833293 3568461 3568691 462 2833295 2833536 3568693 3568934 484 2837117 2837333 3572515 3572731 434 2838683 2838943 3574081 3574341 522 2841331 2841629 3576694 3576992 598 2846859 2847158 3582222 3582521 600 2847181 2847469 3582544 3582832 578 2847831 2848268 3583194 3583631 876 2848270 2848523 3583633 3583886 508 2848606 2848961 3583969 3584324 712 2848963 2849325 3584326 3584688 726 2850926 2851128 3586289 3586491 406 2851139 2851514 3586502 3586877 752 2852110 2852391 3587473 3587754 564 2853320 2853621 3588683 3588984 604 2853872 2854098 3589235 3589461 454 2854529 2854828 3589892 3590191 600 2854893 2855169 3590256 3590532 554 2855604 2856123 3590967 3591486 1040 2858192 2858404 3593555 3593767 426 2864535 2864754 3596737 3596956 440 2864756 2865030 3596958 3597232 550 2865209 2865476 3597411 3597678 536 2865518 2865734 3597720 3597936 434 2865880 2866286 3598082 3598488 814 2866387 2866634 3598589 3598836 496 2866834 2867202 3599036 3599404 738 2867396 2867672 3599598 3599874 554 2867821 2868369 3600023 3600571 1098 2869103 2869391 3601305 3601593 578 2869393 2869625 3601595 3601827 466 2870387 2871022 3602589 3603224 1272 2871160 2871582 3603362 3603784 846 2871584 2872019 3603786 3604221 872 2872881 2873099 3605083 3605301 438 2874143 2874673 3606345 3606875 1062 2885970 2886255 3617768 3618053 572 2886425 2886780 3618222 3618577 712 2888055 2888285 3619852 3620082 462 2889793 2890003 3621590 3621800 422 2890189 2890423 3621986 3622220 470 2891093 2891302 3622890 3623099 420 2897135 2897349 3628932 3629146 430 2898460 2898785 3630257 3630582 652 2901458 2901741 3633255 3633538 568 2905237 2905527 3639316 3639606 582 2905547 2906034 3639626 3640113 976 2906036 2906652 3640115 3640731 1234 2907449 2907730 3641528 3641809 564 2907732 2908070 3641811 3642149 678 2908102 2908400 3642181 3642479 598 2909036 2909377 3643115 3643456 684 2909379 2909656 3643458 3643735 556 2909940 2910304 3644019 3644383 730 2910480 2910805 3644559 3644884 652 2911431 2912027 3645510 3646106 1194 2912225 2912484 3646304 3646563 520 2912855 2913562 3646934 3647641 1416 2914017 2914240 3648096 3648319 448 2914296 2914654 3648375 3648733 718 2914689 2914992 3648768 3649071 608 2914998 2915242 3649077 3649321 490 2915451 2915695 3649530 3649774 490 2916062 2916284 3650142 3650364 446 2917494 2917747 3651574 3651827 508 2918793 2919026 3652873 3653106 468 2919553 2919764 3653633 3653844 424 2920078 2920674 3654158 3654754 1194 2921222 2921733 3655302 3655813 1024 2921946 2922205 3656026 3656285 520 2922916 2923166 3656996 3657246 502 2923198 2923523 3657278 3657603 652 2923525 2923743 3657605 3657823 438 2924110 2924627 3658190 3658707 1036 2924815 2925035 3658895 3659115 442 2925490 2925698 3659570 3659778 418 2925838 2926075 3659918 3660155 476 2926077 2926503 3660157 3660583 854 2926820 2927055 3660900 3661135 472 2927387 2927763 3661467 3661843 754 2928017 2928240 3662097 3662320 448 2928674 2928974 3662754 3663054 602 2929226 2929836 3663306 3663916 1222 2929908 2930197 3663988 3664277 580 2930268 2930563 3664348 3664643 592 2930667 2931073 3664747 3665153 814 2931075 2931390 3665155 3665470 632 2931492 2931842 3665572 3665922 702 2932194 2932425 3666274 3666505 464 2932745 2933043 3666825 3667123 598 2933611 2933834 3667691 3667914 448 2934358 2934848 3668438 3668928 982 2934850 2935109 3668930 3669189 520 2935111 2935418 3669191 3669498 616 2935564 2935784 3669644 3669864 442 2935786 2936405 3669866 3670485 1240 2936506 2936742 3670586 3670822 474 2936859 2937093 3670939 3671173 470 2937131 2937948 3671211 3672028 1636 2938372 2938889 3672452 3672969 1036 2940044 2940486 3674124 3674566 886 2940637 2940971 3674717 3675051 670 2941477 2941770 3675557 3675850 588 2943757 2944212 3677837 3678292 912 2944844 2945248 3678924 3679328 810 2945342 2945747 3679422 3679827 812 2946496 2946827 3680576 3680907 664 2947288 2947624 3681368 3681704 674 2947872 2948179 3681952 3682259 616 2948825 2949045 3682905 3683125 442 2949530 2949747 3683610 3683827 436 2949788 2950008 3683868 3684088 442 2952130 2952446 3686210 3686526 634 2952793 2953194 3686873 3687274 804 2953196 2953415 3687276 3687495 440 2954286 2954592 3688366 3688672 614 2954594 2954832 3688674 3688912 478 2955038 2955270 3689118 3689350 466 2956154 2956380 3690234 3690460 454 2956706 2956927 3690786 3691007 444 2958659 2958934 3692739 3693014 552 2960256 2960476 3694336 3694556 442 2962083 2962376 3696163 3696456 588 2963061 2963356 3697141 3697436 592 2963712 2964359 3697792 3698439 1296 2964361 2964757 3698441 3698837 794 2965038 2965297 3699118 3699377 520 2965650 2965915 3699730 3699995 532 2966001 2966248 3700081 3700328 496 2966250 2967090 3700330 3701170 1682 2967289 2967597 3701369 3701677 618 2967998 2968278 3702078 3702358 562 2969272 2969497 3703352 3703577 452 2969542 2969976 3703622 3704056 870 2970125 2970476 3704205 3704556 704 2970478 2970737 3704558 3704817 520 2971120 2971391 3705200 3705471 544 2971483 2971894 3705563 3705974 824 2972012 2972379 3706092 3706459 736 2972936 2973168 3707016 3707248 466 2973973 2974332 3708053 3708412 720 2974589 2974891 3708671 3708973 606 2975121 2975848 3709203 3709930 1456 2976234 2976541 3710316 3710623 616 2976543 2976934 3710625 3711016 784 2977547 2977758 3711629 3711840 424 2978148 2978415 3712230 3712497 536 2979002 2979237 3713084 3713319 472 2979638 2979990 3713720 3714072 706 2982386 2982683 3716468 3716765 596 2983764 2984022 3717846 3718104 518 2984063 2984382 3718145 3718464 640 2984384 2984655 3718466 3718737 544 2985678 2985903 3719760 3719985 452 2987686 2987900 3721769 3721983 430 2987937 2988226 3722020 3722309 580 2990962 2991253 3725284 3725575 584 2993831 2994088 3728158 3728415 516 2994090 2994381 3728417 3728708 584 2995755 2996045 3745699 3745989 582 2996478 2996916 3746417 3746855 878 2997298 2997564 3747316 3747582 534 2997725 2997942 3747743 3747960 436 2998837 2999055 3748856 3749074 438 2999656 2999870 3749675 3749889 430 3000361 3000871 3750380 3750890 1022 3001232 3001571 3751251 3751590 680 3001673 3002026 3751692 3752045 708 3002567 3002766 3752586 3752785 400 3002885 3003129 3752904 3753148 490 3003323 3003617 3753342 3753636 590 3004168 3004374 3754187 3754393 414 3005398 3005702 3755418 3755722 610 3006022 3006285 3756042 3756305 528 3006287 3006638 3756307 3756658 704 3006640 3006902 3756660 3756922 526 3007576 3007988 3757596 3758008 826 3007993 3008448 3758013 3758468 912 3008562 3008883 3758582 3758903 644 3009212 3009539 3759232 3759559 656 3010057 3010391 3760077 3760411 670 3010599 3011015 3760439 3760855 834 3011226 3011824 3761066 3761664 1198 3012194 3012408 3762034 3762248 430 3013048 3013257 3762888 3763097 420 3014044 3014312 3763886 3764154 538 3014671 3015264 3764513 3765106 1188 3015391 3015869 3765233 3765711 958 3016410 3016679 3766252 3766521 540 3017502 3017704 3767344 3767546 406 3018001 3018310 3767843 3768152 620 3018534 3018810 3768375 3768651 554 3018921 3019481 3768762 3769322 1122 3019483 3019841 3769324 3769682 718 3020209 3020411 3770050 3770252 406 3020619 3021029 3770460 3770870 822 3021634 3021899 3771475 3771740 532 3022247 3022510 3772088 3772351 528 3023592 3023848 3773433 3773689 514 3024824 3025117 3774665 3774958 588 3025119 3025385 3774960 3775226 534 3025387 3025675 3775228 3775516 578 3025911 3026158 3775753 3776000 496 3026205 3026545 3776047 3776387 682 3026973 3027273 3776815 3777115 602 3027539 3028017 3777381 3777859 958 3028526 3028804 3778368 3778646 558 3029244 3029744 3779086 3779586 1002 3029796 3030092 3779638 3779934 594 3030604 3030868 3780446 3780710 530 3030870 3031319 3780712 3781161 900 3031899 3032116 3781740 3781957 436 3032352 3032773 3782193 3782614 844 3033845 3034463 3783686 3784304 1238 3036792 3037003 3786633 3786844 424 3037599 3038049 3787440 3787890 902 3040459 3040735 3790181 3790457 554 3040791 3041035 3790513 3790757 490 3041133 3041336 3790855 3791058 408 3041443 3041752 3791165 3791474 620 3042030 3042354 3791752 3792076 650 3045415 3045646 3794236 3794467 464 3047381 3047692 3796201 3796512 624 3048253 3048570 3797073 3797390 636 3048572 3048869 3797392 3797689 596 3051344 3051552 3800165 3800373 418 3052159 3052440 3800980 3801261 564 3052674 3053112 3801495 3801933 878 3053387 3053839 3802208 3802660 906 3053841 3054360 3802662 3803181 1040 3054575 3054820 3803396 3803641 492 3055879 3056177 3805093 3805391 598 3056206 3056447 3805420 3805661 484 3056621 3056852 3805834 3806065 464 3056911 3057456 3806124 3806669 1092 3057700 3058064 3806868 3807232 730 3058180 3058454 3807348 3807622 550 3058950 3059224 3808118 3808392 550 3059475 3060477 3808643 3809645 2006 3061062 3062175 3810230 3811343 2228 3062510 3062721 3811678 3811889 424 3063007 3063221 3812175 3812389 430 3063280 3063649 3812448 3812817 740 3063651 3063920 3812819 3813088 540 3065471 3065673 3814639 3814841 406 3066919 3067412 3816087 3816580 988 3067576 3067967 3816744 3817135 784 3068515 3068893 3817683 3818061 758 3068895 3069116 3818063 3818284 444 3069118 3069421 3818286 3818589 608 3069423 3069813 3818591 3818981 782 3070272 3071272 3819440 3820440 2002 3071562 3071879 3820730 3821047 636 3073825 3074209 3826128 3826512 770 3074211 3074467 3826514 3826770 514 3074675 3075016 3826978 3827319 684 3075018 3075219 3827321 3827522 404 3075627 3075887 3827931 3828191 522 3076093 3076307 3828397 3828611 430 3076675 3077333 3828979 3829637 1318 3079514 3079872 3831818 3832176 718 3079982 3080259 3832286 3832563 556 3080471 3080960 3832775 3833264 980 3082615 3082837 3835794 3836016 446 3083760 3084104 3836939 3837283 690 3084106 3084555 3837285 3837734 900 3084557 3084791 3837736 3837970 470 3084793 3084995 3837972 3838174 406 3084997 3085235 3838176 3838414 478 3085432 3085649 3838611 3838828 436 3086328 3086642 3839520 3839834 630 3086755 3087035 3839947 3840227 562 3088324 3088546 3841516 3841738 446 3089701 3089960 3842893 3843152 520 3090100 3090440 3843292 3843632 682 3090550 3090840 3843742 3844032 582 3090842 3091181 3844034 3844373 680 3091438 3091646 3844630 3844838 418 3092188 3092387 3845391 3845590 400 3093004 3093438 3846207 3846641 870 3093603 3094013 3846806 3847216 822 3096735 3096971 3850026 3850262 474 3098602 3099146 3851893 3852437 1090 3099400 3099657 3852691 3852948 516 3099873 3100304 3853165 3853596 864 3100306 3100536 3853598 3853828 462 3100613 3100873 3853905 3854165 522 3100875 3101262 3854167 3854554 776 3102828 3103096 3856120 3856388 538 3104010 3104371 3857302 3857663 724 3104373 3104650 3857665 3857942 556 3105070 3105450 3858362 3858742 762 3105587 3105795 3858879 3859087 418 3105926 3106348 3859218 3859640 846 3106790 3107027 3860082 3860319 476 3107815 3108101 3861108 3861394 574 3136370 3136856 3888426 3888912 974 3138726 3138940 3890782 3890996 430 3139130 3139374 3891186 3891430 490 3139601 3139866 3891657 3891922 532 3139964 3140181 3892020 3892237 436 3140690 3141215 3892746 3893271 1052 3141217 3141434 3893273 3893490 436 3141757 3141962 3893813 3894018 412 3141964 3142233 3894020 3894289 540 3142235 3142542 3894291 3894598 616 3142973 3143239 3895029 3895295 534 3143404 3143749 3895460 3895805 692 3143751 3144101 3895807 3896157 702 3144103 3144774 3896159 3896830 1344 3144779 3145142 3896835 3897198 728 3146202 3146422 3898261 3898481 442 3147235 3147541 3899294 3899600 614 3148313 3148647 3900372 3900706 670 3149634 3149851 3901693 3901910 436 3149949 3150197 3902008 3902256 498 3150769 3151070 3902828 3903129 604 3151429 3151741 3903488 3903800 626 3151748 3152031 3903807 3904090 568 3152247 3152475 3904307 3904535 458 3153099 3153477 3905159 3905537 758 3154115 3154323 3906175 3906383 418 3154885 3155420 3906945 3907480 1072 3155961 3156207 3908018 3908264 494 3158209 3158522 3910262 3910575 628 3158683 3158888 3910736 3910941 412 3158947 3159233 3911000 3911286 574 3159946 3160291 3911999 3912344 692 3160293 3160567 3912346 3912620 550 3161369 3161848 3913422 3913901 960 3162085 3162284 3914138 3914337 400 3162322 3162671 3914375 3914724 700 3162673 3162950 3914726 3915003 556 3163102 3163582 3915155 3915635 962 3163717 3164081 3915770 3916134 730 3164320 3164886 3916373 3916939 1134 3164994 3165304 3917047 3917357 622 3166942 3167162 3918073 3918293 442 3167281 3167625 3918412 3918756 690 3167811 3168095 3918942 3919226 570 3168108 3168349 3919239 3919480 484 3169150 3169519 3920281 3920650 740 3170441 3170648 3920985 3921192 416 3170926 3171296 3921470 3921840 742 3171648 3171884 3929445 3929681 474 3173031 3173423 3930828 3931220 786 3173425 3173841 3931222 3931638 834 3173843 3174134 3931640 3931931 584 3174940 3175571 3932737 3933368 1264 3175780 3176399 3933577 3934196 1240 3177742 3178153 3935539 3935950 824 3178395 3178722 3936192 3936519 656 3178763 3178995 3936560 3936792 466 3179171 3179596 3936968 3937393 852 3180085 3180290 3937882 3938087 412 3180465 3180677 3938262 3938474 426 3182294 3182982 3940091 3940779 1378 3189914 3190126 3941146 3941358 426 3191023 3191357 3942255 3942589 670 3193642 3194308 3945248 3945914 1334 3194640 3194932 3946246 3946538 586 3195231 3195601 3946837 3947207 742 3196380 3196710 3947986 3948316 662 3197240 3197516 3948846 3949122 554 3197518 3197720 3949124 3949326 406 3197829 3198119 3949435 3949725 582 3198565 3198932 3950171 3950538 736 3198983 3199325 3950589 3950931 686 3199381 3199604 3950987 3951210 448 3200311 3200765 3951917 3952371 910 3200929 3201288 3952535 3952894 720 3201523 3201790 3953129 3953396 536 3202490 3202878 3954098 3954486 778 3203844 3204146 3955452 3955754 606 3204148 3204413 3955756 3956021 532 3206894 3207129 3958503 3958738 472 3207164 3207364 3958773 3958973 402 3208065 3208985 3959674 3960594 1842 3209410 3209690 3961019 3961299 562 3209935 3210217 3961544 3961826 566 3210362 3211357 3961971 3962966 1992 3211860 3212062 3963469 3963671 406 3212073 3212317 3963682 3963926 490 3212969 3213384 3964578 3964993 832 3213386 3213675 3964995 3965284 580 3216091 3216301 3967700 3967910 422 3216321 3216588 3967930 3968197 536 3216590 3216827 3968199 3968436 476 3218904 3219257 3970513 3970866 708 3219430 3219860 3971039 3971469 862 3220178 3220382 3971787 3971991 410 3220699 3221095 3972308 3972704 794 3221098 3221375 3972707 3972984 556 3221665 3221879 3973274 3973488 430 3223413 3223624 3975022 3975233 424 3223767 3224178 3975376 3975787 824 3224945 3225207 3976554 3976816 526 3225341 3225550 3976950 3977159 420 3231339 3231637 3982948 3983246 598 3231818 3232017 3983427 3983626 400 3232665 3232876 3984274 3984485 424 3233117 3233332 3984726 3984941 432 3233357 3233892 3984966 3985501 1072 3236878 3237119 3988487 3988728 484 3237429 3237848 3989040 3989459 840 3239079 3239395 3990690 3991006 634 3239947 3240491 3991558 3992102 1090 3240904 3241176 3992515 3992787 546 3241718 3242053 3993329 3993664 672 3242055 3242325 3993666 3993936 542 3242588 3243275 3994200 3994887 1376 3243502 3243917 3995114 3995529 832 3244186 3244391 3995798 3996003 412 3245094 3246040 3996706 3997652 1894 3246042 3246313 3997654 3997925 544 3246641 3247195 3998253 3998807 1110 3247819 3248046 3999431 3999658 456 3248348 3248660 3999960 4000272 626 3248662 3248946 4000274 4000558 570 3249840 3250148 4001450 4001758 618 3250565 3251112 4002174 4002721 1096 3251458 3251673 4003067 4003282 432 3251774 3252130 4003383 4003739 714 3253092 3253375 4004701 4004984 568 3253503 3253740 4005112 4005349 476 3253993 3254348 4005601 4005956 712 3255615 3255842 4007221 4007448 456 3256405 3256625 4008011 4008231 442 3256891 3257382 4008498 4008989 984 3259241 3259464 4010849 4011072 448 3260420 3260640 4012028 4012248 442 3260751 3261063 4012359 4012671 626 3261585 3261826 4013193 4013434 484 3261954 3262468 4013562 4014076 1030 3262470 3263170 4014078 4014778 1402 3263460 3263949 4015068 4015557 980 3263951 3264240 4015559 4015848 580 3264266 3264489 4015874 4016097 448 3264527 3264807 4016135 4016415 562 3264849 3265062 4016457 4016670 428 3265251 3265513 4016859 4017121 526 3266461 3266670 4018069 4018278 420 3267784 3268504 4018998 4019718 1442 3268674 3269035 4019888 4020249 724 3269292 3269587 4020506 4020801 592 3269589 3269983 4020803 4021197 790 3269985 3270250 4021199 4021464 532 3270252 3270708 4021466 4021922 914 3271034 3271275 4022248 4022489 484 3271469 3271701 4022683 4022915 466 3272144 3272367 4023358 4023581 448 3272372 3272594 4023586 4023808 446 3273375 3273701 4024589 4024915 654 3274479 3274820 4025693 4026034 684 3274865 3275107 4026079 4026321 486 3275713 3275975 4026927 4027189 526 3276647 3276864 4027861 4028078 436 3276866 3277286 4028080 4028500 842 3277530 3277854 4028744 4029068 650 3277956 3278194 4029170 4029408 478 3279503 3279704 4033022 4033223 404 3280091 3280307 4033610 4033826 434 3280515 3280799 4034034 4034318 570 3281503 3281717 4035022 4035236 430 3282107 3282345 4035626 4035864 478 3282376 3282608 4035895 4036127 466 3282964 3283206 4036483 4036725 486 3283283 3283638 4036802 4037157 712 3284201 3284402 4037720 4037921 404 3286661 3286910 4040180 4040429 500 3287555 3287899 4041074 4041418 690 3288084 3288288 4041603 4041807 410 3288551 3288909 4042070 4042428 718 3289062 3289305 4042581 4042824 488 3289655 3289855 4044132 4044332 402 3289877 3290113 4044354 4044590 474 3290115 3290582 4044592 4045059 936 3290755 3291112 4045232 4045589 716 3291114 3291324 4045591 4045801 422 3291448 3291914 4045925 4046391 934 3294415 3294681 4048892 4049158 534 3295677 3295895 4050154 4050372 438 3296398 3296801 4050875 4051278 808 3297543 3297742 4052020 4052219 400 3298340 3298676 4052817 4053153 674 3298774 3299360 4053251 4053837 1174 3299731 3299948 4054208 4054425 436 3300663 3300927 4055140 4055404 530 3300929 3301158 4055406 4055635 460 3302463 3302684 4056939 4057160 444 3302991 3303501 4057467 4057977 1022 3305400 3306657 4059876 4061133 2516 3306659 3306903 4061135 4061379 490 3307568 3307857 4062044 4062333 580 3308687 3309085 4063163 4063561 798 3309087 3309496 4063563 4063972 820 3311453 3311752 4065930 4066229 600 3311877 3312139 4066354 4066616 526 3312567 3312796 4067044 4067273 460 3313095 3314016 4067572 4068493 1844 3314043 3314317 4068520 4068794 550 3314619 3314848 4069096 4069325 460 3314994 3315210 4069471 4069687 434 3315237 3315882 4069714 4070359 1292 3316069 3316332 4070546 4070809 528 3316334 3316671 4070811 4071148 676 3317022 3317247 4071499 4071724 452 3317926 3318211 4072403 4072688 572 3319575 3319803 4074052 4074280 458 3320704 3320981 4075181 4075458 556 3321517 3321738 4075994 4076215 444 3321794 3322098 4076271 4076575 610 3322373 3322738 4076850 4077215 732 3322740 3323120 4077217 4077597 762 3323296 3323579 4077773 4078056 568 3323791 3324010 4078268 4078487 440 3324289 3325821 4078766 4080298 3066 3326435 3326781 4080912 4081258 694 3327152 3327606 4081629 4082083 910 3328286 3328491 4082617 4082822 412 3328573 3328944 4082904 4083275 744 3329138 3329874 4083469 4084205 1474 3330017 3330222 4084348 4084553 412 3330305 3331594 4084636 4085925 2580 3332630 3332940 4086962 4087272 622 3332942 3333168 4087274 4087500 454 3333452 3333675 4087784 4088007 448 3334040 3334683 4088372 4089015 1288 3335272 3335486 4089604 4089818 430 3335488 3335690 4089820 4090022 406 3336004 3336375 4090336 4090707 744 3336407 3336708 4090739 4091040 604 3336954 3337849 4091286 4092181 1792 3337851 3338073 4092183 4092405 446 3338209 3338606 4092541 4092938 796 3338608 3339078 4092940 4093410 942 3339276 3339588 4093608 4093920 626 3339755 3339998 4094087 4094330 488 3340842 3341126 4095174 4095458 570 3341254 3341495 4095586 4095827 484 3341503 3341792 4095835 4096124 580 3342146 3342691 4096478 4097023 1092 3343431 3343684 4097763 4098016 508 3343782 3344130 4098114 4098462 698 3344132 3344351 4098464 4098683 440 3344464 3344685 4098796 4099017 444 3344687 3344999 4099019 4099331 626 3345364 3345610 4099696 4099942 494 3345711 3345964 4100043 4100296 508 3347531 3347774 4101863 4102106 488 3348585 3348874 4102918 4103207 580 3349350 3349750 4103689 4104089 802 3350193 3350608 4104532 4104947 832 3350610 3350865 4104949 4105204 512 3350867 3351138 4105206 4105477 544 3352255 3352513 4106593 4106851 518 3353622 3354112 4107960 4108450 982 3356796 3357073 4111134 4111411 556 3366139 3366442 4113372 4113675 608 3367797 3368028 4115030 4115261 464 3370165 3370385 4117398 4117618 442 3370660 3371060 4117893 4118293 802 3371161 3371361 4118394 4118594 402 3371849 3372422 4119082 4119655 1148 3373076 3373278 4120306 4120508 406 3373962 3374538 4121184 4121760 1154 3374755 3375128 4121977 4122350 748 3375420 3375673 4122642 4122895 508 3375711 3376496 4122933 4123718 1572 3376514 3376845 4123736 4124067 664 3377243 3377442 4124465 4124664 400 3377618 3378057 4124840 4125279 880 3378059 3378453 4125281 4125675 790 3379305 3379767 4126527 4126989 926 3379769 3379970 4126991 4127192 404 3379972 3380294 4127194 4127516 646 3381775 3382057 4128998 4129280 566 3382203 3382584 4129426 4129807 764 3382900 3383770 4130123 4130993 1742 3384948 3385674 4132172 4132898 1454 3386228 3386538 4133452 4133762 622 3386569 3386877 4133790 4134098 618 3386989 3387192 4134210 4134413 408 3387265 3387626 4134486 4134847 724 3387934 3388145 4135155 4135366 424 3388256 3388744 4135477 4135965 978 3389365 3389594 4136586 4136815 460 3390014 3390275 4136960 4137221 524 3390277 3390599 4137223 4137545 646 3392293 3392512 4139239 4139458 440 3392557 3392786 4139503 4139732 460 3392788 3393011 4139734 4139957 448 3393173 3393450 4140118 4140395 556 3393686 3394084 4140631 4141029 798 3394140 3394555 4141085 4141500 832 3395220 3395510 4142165 4142455 582 3395701 3396052 4142646 4142997 704 3396054 3396358 4142999 4143303 610 3396638 3396948 4143583 4143893 622 3397136 3397383 4144081 4144328 496 3397399 3397658 4144344 4144603 520 3397963 3398162 4144908 4145107 400 3398383 3398994 4145328 4145939 1224 3399308 3399660 4146253 4146605 706 3399662 3399972 4146607 4146917 622 3399974 3400293 4146919 4147238 640 3400295 3400512 4147240 4147457 436 3400791 3401694 4147736 4148639 1808 3401774 3402104 4148719 4149049 662 3402738 3402963 4149683 4149908 452 3402965 3403364 4149910 4150309 800 3403366 3404046 4150311 4150991 1362 3404282 3404908 4151227 4151853 1254 3405498 3405850 4152443 4152795 706 3406435 3406830 4153380 4153775 792 3407033 3407362 4153978 4154307 660 3407602 3409217 4154547 4156162 3232 3409487 3409824 4156431 4156768 676 3409826 3410193 4156770 4157137 736 3410195 3410933 4157139 4157877 1478 3411367 3411948 4158311 4158892 1164 3412181 3412416 4159125 4159360 472 3412553 3412778 4159497 4159722 452 3412780 3413087 4159724 4160031 616 3413710 3413969 4160654 4160913 520 3415878 3416189 4162867 4163178 624 3417604 3418404 4164594 4165394 1602 3418988 3419228 4165979 4166219 482 3419651 3419918 4166642 4166909 536 3420023 3420385 4167014 4167376 726 3421119 3421407 4168109 4168397 578 3421879 3422207 4168871 4169199 658 3422696 3423208 4169687 4170199 1026 3423250 3423832 4170241 4170823 1166 3423878 3424155 4170871 4171148 556 3424157 3424431 4171150 4171424 550 3424482 3426125 4171484 4173127 3288 3426321 3426619 4173323 4173621 598 3426774 3427305 4173775 4174306 1064 3428346 3429032 4175347 4176033 1374 3429282 3429525 4176283 4176526 488 3430001 3430287 4177001 4177287 574 3430453 3430789 4177454 4177790 674 3431126 3431537 4178127 4178538 824 3431698 3432088 4178699 4179089 782 3432565 3432830 4179566 4179831 532 3432832 3433035 4179833 4180036 408 3434766 3434974 4181767 4181975 418 3435183 3435478 4182184 4182479 592 3435480 3435757 4182481 4182758 556 3436077 3436279 4183078 4183280 406 3437201 3439353 4184202 4186354 4306 3439355 3441199 4186356 4188200 3690 3441372 3441946 4188373 4188947 1150 3441948 3442484 4188949 4189485 1074 3442567 3445133 4189568 4192134 5134 3445135 3445932 4192136 4192933 1596 3445934 3446766 4192935 4193767 1666 3446768 3447008 4193769 4194009 482 3447010 3447961 4194011 4194962 1904 3447963 3448448 4194964 4195449 972 3448621 3450172 4195622 4197173 3104 3450174 3451090 4197175 4198091 1834 3467941 3468347 4199836 4200242 814 3468373 3468755 4200268 4200650 766 3468757 3469776 4200652 4201671 2040 3469778 3470013 4201673 4201908 472 3470015 3470337 4201910 4202232 646 3470339 3470712 4202234 4202607 748 3470837 3471247 4202732 4203142 822 3471249 3472330 4203144 4204225 2164 3473266 3474010 4205161 4205905 1490 3474012 3474340 4205907 4206235 658 3474751 3474955 4206646 4206850 410 3475166 3475532 4207061 4207427 734 3475706 3476308 4207601 4208203 1206 3478532 3479001 4210427 4210896 940 3479003 3479205 4210898 4211100 406 3479381 3479787 4211276 4211682 814 3480317 3480531 4212212 4212426 430 3480674 3480892 4212569 4212787 438 3481588 3482044 4213483 4213939 914 3483129 3483391 4215024 4215286 526 3483405 3483901 4215300 4215796 994 3483903 3484103 4215798 4215998 402 3484812 3485304 4216707 4217199 986 3486203 3486522 4218098 4218417 640 3487530 3487738 4219425 4219633 418 3488086 3488312 4219981 4220207 454 3489056 3489588 4220951 4221483 1066 3489620 3490343 4221515 4222238 1448 3490345 3490778 4222240 4222673 868 3491552 3491969 4223447 4223864 836 3492244 3492530 4224139 4224425 574 3493357 3493806 4225252 4225701 900 3494018 3494564 4225913 4226459 1094 3494566 3494775 4226461 4226670 420 3495233 3495786 4227128 4227681 1108 3497732 3497962 4229636 4229866 462 3498221 3498495 4230125 4230399 550 3500412 3500638 4232316 4232542 454 3502130 3502383 4234034 4234287 508 3511022 3511224 4235206 4235408 406 3511226 3511429 4235410 4235613 408 3511479 3511726 4235663 4235910 496 3512254 3512477 4236438 4236661 448 3512572 3512884 4236756 4237068 626 3513156 3513713 4237340 4237897 1116 3513715 3513932 4237899 4238116 436 3514385 3515230 4238569 4239414 1692 3515240 3515540 4239424 4239724 602 3515918 3516383 4240102 4240567 932 3516385 3516757 4240569 4240941 746 3516759 3516985 4240943 4241169 454 3516987 3517215 4241171 4241399 458 3517217 3517614 4241401 4241798 796 3517616 3517842 4241800 4242026 454 3518195 3518414 4242379 4242598 440 3518416 3518675 4242600 4242859 520 3520327 3520731 4244510 4244914 810 3520965 3521184 4245148 4245367 440 3521285 3521538 4245468 4245721 508 3522164 3522606 4246347 4246789 886 3523701 3524476 4247883 4248658 1552 3524613 3524845 4248795 4249027 466 3525597 3526027 4249779 4250209 862 3526302 3526895 4250484 4251077 1188 3526994 3527511 4251176 4251693 1036 3527798 3528156 4251980 4252338 718 3529862 3530732 4254044 4254914 1742 3531598 3531959 4255780 4256141 724 3533168 3533540 4257350 4257722 746 3533605 3533840 4257787 4258022 472 3533944 3534609 4258126 4258791 1332 3534872 3535125 4259054 4259307 508 3535502 3535933 4259684 4260115 864 3537716 3538058 4261881 4262223 686 3538118 3538388 4262283 4262553 542 3538720 3538988 4262885 4263153 538 3539188 3539423 4263353 4263588 472 3542064 3542270 4266227 4266433 414 3543166 3543377 4267329 4267540 424 3544363 3544621 4268530 4268788 518 3545028 3545338 4269195 4269505 622 3546156 3546421 4270257 4270522 532 3547430 3547650 4271531 4271751 442 3547653 3548003 4271754 4272104 702 3548005 3548356 4272106 4272457 704 3548687 3548920 4272788 4273021 468 3549389 3549652 4273490 4273753 528 3549996 3550236 4274097 4274337 482 3550457 3550734 4274558 4274835 556 3550966 3551195 4275067 4275296 460 3551197 3551564 4275298 4275665 736 3551566 3551783 4275667 4275884 436 3552517 3552752 4276618 4276853 472 3557336 3557543 4282277 4282484 416 3557579 3557826 4282520 4282767 496 3558241 3558696 4283182 4283637 912 3558933 3559148 4283874 4284089 432 3559415 3559617 4284356 4284558 406 3559675 3559992 4284616 4284933 636 3560557 3560792 4285498 4285733 472 3561803 3562239 4289596 4290032 874 3562646 3563634 4290439 4291427 1978 3563858 3564327 4291651 4292120 940 3564329 3564567 4292122 4292360 478 3564976 3565428 4292769 4293221 906 3565472 3566159 4293265 4293952 1376 3566161 3566576 4293954 4294369 832 3566584 3567271 4294377 4295064 1376 3567273 3567496 4295066 4295289 448 3567597 3567963 4295390 4295756 734 3568254 3568461 4296047 4296254 416 3568479 3569058 4296272 4296851 1160 3569644 3569895 4297437 4297688 504 3570512 3570762 4298305 4298555 502 3570926 3571649 4298719 4299442 1448 3571651 3571952 4299444 4299745 604 3572002 3572237 4299795 4300030 472 3572517 3572896 4300309 4300688 760 3574565 3574895 4305813 4306143 662 3576061 3576403 4307310 4307652 686 3577052 3577403 4308301 4308652 704 3577465 3577691 4308714 4308940 454 3582685 3582946 4312337 4312598 524 3587802 3588115 4317457 4317770 628 3588568 3588968 4318224 4318624 802 3589765 3590102 4319421 4319758 676 3590901 3591116 4321383 4321598 432 3591778 3592015 4322260 4322497 476 3594259 3594815 4324741 4325297 1114 3596756 3597003 4327997 4328244 496 3597005 3597336 4328246 4328577 664 3597836 3598095 4329077 4329336 520 3598136 3598539 4329377 4329780 808 3598541 3598741 4329782 4329982 402 3600034 3600616 4331275 4331857 1166 3601152 3601384 4332393 4332625 466 3601778 3602255 4333022 4333499 956 3603197 3603546 4334441 4334790 700 3603984 3604316 4335228 4335560 666 3605752 3606017 4336996 4337261 532 3606688 3606959 4337932 4338203 544 3607216 3607919 4338460 4339163 1408 3609449 3610027 4340693 4341271 1158 3610194 3610474 4341438 4341718 562 3610579 3610791 4357178 4357390 426 3611118 3611583 4357717 4358182 932 3612710 3613064 4359309 4359663 710 3626702 3626958 4373174 4373430 514 3628331 3628536 4374804 4375009 412 3633949 3634208 4380431 4380690 520 3634864 3635174 4381346 4381656 622 3635619 3635905 4382102 4382388 574 3636126 3636478 4382609 4382961 706 3637117 3637463 4383427 4383773 694 3638371 3638672 4384682 4384983 604 3639178 3639518 4385489 4385829 682 3640481 3641041 4386792 4387352 1122 3642959 3643204 4389270 4389515 492 3644078 3644298 4390389 4390609 442 3647398 3647657 4393713 4393972 520 3647716 3647954 4394031 4394269 478 3647956 3648162 4394271 4394477 414 3649454 3649665 4395768 4395979 424 3651810 3652304 4396924 4397418 990 3652306 3652647 4397420 4397761 684 3652939 3653149 4407075 4407285 422 3653920 3654673 4408056 4408809 1508 3654825 3655199 4408961 4409335 750 3655965 3656738 4410101 4410874 1548 3656740 3656944 4410876 4411080 410 3656993 3657606 4411129 4411742 1228 3657893 3658191 4412029 4412327 598 3659093 3659319 4413229 4413455 454 3659321 3659565 4413457 4413701 490 3660257 3660621 4414393 4414757 730 3660857 3661098 4414993 4415234 484 3661745 3662009 4415881 4416145 530 3662409 3662640 4416545 4416776 464 3663766 3664057 4417903 4418194 584 3665082 3665317 4419219 4419454 472 3666000 3666247 4420137 4420384 496 3666534 3667018 4420671 4421155 970 3667554 3667966 4421692 4422104 826 3668010 3668215 4422148 4422353 412 3668721 3669160 4422859 4423298 880 3669276 3669631 4423414 4423769 712 3671681 3672018 4425819 4426156 676 3672508 3672758 4426647 4426897 502 3672949 3673647 4427088 4427786 1398 3673649 3673917 4427788 4428056 538 3674645 3674941 4428784 4429080 594 3675309 3675547 4429448 4429686 478 3675870 3676138 4430009 4430277 538 3676916 3677337 4431055 4431476 844 3677402 3677646 4431541 4431785 490 3677652 3677869 4431791 4432008 436 3678398 3678627 4432537 4432766 460 3678911 3679113 4433050 4433252 406 3679160 3679838 4433299 4433977 1358 3679840 3681206 4433979 4435345 2734 3681735 3682160 4435874 4436299 852 3682412 3682652 4436551 4436791 482 3683081 3683427 4437220 4437566 694 3685228 3685473 4439367 4439612 492 3685475 3685803 4439614 4439942 658 3686446 3686649 4440575 4440778 408 3688282 3688563 4442430 4442711 564 3688836 3689035 4442984 4443183 400 3689145 3689410 4443293 4443558 532 3690180 3690839 4444328 4444987 1320 3690937 3691169 4445085 4445317 466 3691954 3692210 4446102 4446358 514 3693101 3693406 4447249 4447554 612 3693748 3693984 4447896 4448132 474 3693986 3694370 4448134 4448518 770 3694620 3695510 4448768 4449658 1782 3695512 3695799 4449660 4449947 576 3695801 3696012 4449949 4450160 424 3696029 3696599 4450177 4450747 1142 3697983 3698208 4452131 4452356 452 3699097 3699323 4453245 4453471 454 3701424 3701642 4455572 4455790 438 3703997 3704288 4457988 4458279 584 3705185 3705574 4459176 4459565 780 3706198 3706409 4460023 4460234 424 3707862 3708145 4461687 4461970 568 3709603 3709837 4469181 4469415 470 3709933 3710247 4469511 4469825 630 3710513 3710802 4470091 4470380 580 3711750 3711960 4471328 4471538 422 3712392 3712779 4471970 4472357 776 3713289 3713821 4472867 4473399 1066 3714020 3714404 4473598 4473982 770 3714676 3715104 4474254 4474682 858 3716329 3716842 4475907 4476420 1028 3716983 3717762 4476561 4477340 1560 3719705 3719938 4477879 4478112 468 3720338 3720573 4478512 4478747 472 3721244 3721503 4479418 4479677 520 3721646 3721911 4479820 4480085 532 3722279 3722535 4480453 4480709 514 3722805 3723019 4480979 4481193 430 3723075 3723281 4481249 4481455 414 3724433 3724962 4482607 4483136 1060 3726176 3726658 4484350 4484832 966 3727281 3727646 4485455 4485820 732 3728290 3728727 4486464 4486901 876 3728729 3729240 4486903 4487414 1024 3729276 3729480 4487450 4487654 410 3730090 3730365 4488264 4488539 552 3730367 3730695 4488541 4488869 658 3730697 3731216 4488871 4489390 1040 3731260 3731625 4489434 4489799 732 3732559 3733019 4490733 4491193 922 3734584 3734939 4492670 4493025 712 3735668 3736147 4493754 4494233 960 3737155 3737386 4495241 4495472 464 3737753 3737954 4495839 4496040 404 3738089 3738313 4496175 4496399 450 3738729 3739059 4496816 4497146 662 3748776 3749229 4502112 4502565 908 3749543 3749793 4502879 4503129 502 3749867 3750081 4503203 4503417 430 3750437 3750638 4503773 4503974 404 3751517 3751877 4504853 4505213 722 3753515 3753815 4506851 4507151 602 3754605 3754847 4509312 4509554 486 3754849 3755334 4509556 4510041 972 3755627 3755831 4510333 4510537 410 3756558 3757025 4511264 4511731 936 3757315 3757756 4512021 4512462 884 3757758 3757960 4512464 4512666 406 3758007 3758515 4512713 4513221 1018 3758517 3759460 4513223 4514166 1888 3759462 3759711 4514168 4514417 500 3759827 3760224 4514534 4514931 796 3760533 3760761 4515240 4515468 458 3760763 3760987 4515470 4515694 450 3761284 3761599 4515991 4516306 632 3762518 3762777 4517225 4517484 520 3762983 3763182 4517690 4517889 400 3763553 3764842 4518260 4519549 2580 3765234 3765545 4519941 4520252 624 3765547 3766040 4520254 4520747 988 3766051 3766618 4520758 4521325 1136 3766620 3767143 4521327 4521850 1048 3767145 3767393 4521852 4522100 498 3767458 3767795 4522164 4522501 676 3767797 3768183 4522503 4522889 774 3768185 3768870 4522891 4523576 1372 3768872 3769090 4523578 4523796 438 3769261 3770371 4523967 4525077 2222 3770373 3770664 4525079 4525370 584 3771966 3772192 4526537 4526763 454 3773138 3773352 4527709 4527923 430 3773755 3774162 4528326 4528733 816 3776036 3776244 4536639 4536847 418 3776321 3776625 4536924 4537228 610 3776947 3777179 4537550 4537782 466 3777313 3777589 4537916 4538192 554 3779808 3780062 4540399 4540653 510 3780064 3780305 4540655 4540896 484 3780713 3780996 4541304 4541587 568 3780998 3781418 4541589 4542009 842 3781555 3781957 4542146 4542548 806 3782118 3782419 4542709 4543010 604 3782421 3782750 4543012 4543341 660 3783726 3784069 4544317 4544660 688 3784331 3784597 4544922 4545188 534 3784602 3785323 4545193 4545914 1444 3786381 3786723 4546972 4547314 686 3786899 3787272 4547491 4547864 748 3787546 3787831 4548138 4548423 572 3788790 3789016 4549382 4549608 454 3790002 3790241 4550594 4550833 480 3790278 3790613 4550870 4551205 672 3790615 3790857 4551207 4551449 486 3790859 3791332 4551451 4551924 948 3791360 3792067 4551953 4552660 1416 3792429 3792778 4553022 4553371 700 3792963 3793216 4553556 4553809 508 3793926 3794477 4554519 4555070 1104 3806077 3806356 4563696 4563975 560 3806403 3806707 4564022 4564326 610 3807195 3807668 4564814 4565287 948 3807670 3808145 4565289 4565764 952 3808147 3808399 4565766 4566018 506 3808401 3809444 4566020 4567063 2088 3809482 3809771 4567101 4567390 580 3810342 3810545 4567961 4568164 408 3810547 3810967 4568166 4568586 842 3810969 3811665 4568588 4569284 1394 3812609 3812917 4570228 4570536 618 3813764 3814814 4571384 4572434 2102 3815632 3815848 4573252 4573468 434 3816575 3816783 4574197 4574405 418 3816812 3817209 4574434 4574831 796 3818185 3818485 4575807 4576107 602 3818930 3819433 4576552 4577055 1008 3819549 3820522 4577171 4578144 1948 3820524 3820735 4578146 4578357 424 3821010 3821278 4578632 4578900 538 3821979 3822839 4579601 4580461 1722 3822841 3823159 4580463 4580781 638 3823161 3823491 4580783 4581113 662 3825126 3825420 4583433 4583727 590 3825941 3826140 4584248 4584447 400 3826241 3827247 4584548 4585554 2014 3827315 3828008 4585622 4586315 1388 3828323 3828528 4586630 4586835 412 3828546 3828753 4586853 4587060 416 3829026 3829300 4587333 4587607 550 3829302 3829506 4587609 4587813 410 3832228 3832565 4590535 4590872 676 3833074 3833285 4591381 4591592 424 3833441 3833715 4591748 4592022 550 3833730 3833942 4592037 4592249 426 3835805 3836025 4635899 4636119 442 3838874 3839110 4638968 4639204 474 3839922 3840164 4640815 4641057 486 3840577 3840788 4641469 4641680 424 3841117 3841531 4642009 4642423 830 3842055 3842270 4642947 4643162 432 3844483 3844769 4645375 4645661 574 3850393 3850610 4654628 4654845 436 3853134 3853392 4657369 4657627 518 3853647 3853982 4657882 4658217 672 3854970 3855221 4659206 4659457 504 3855564 3855796 4659800 4660032 466 3856044 3856428 4660280 4660664 770 3857119 3857364 4661355 4661600 492 3857692 3857927 4661928 4662163 472 3858746 3859020 4662982 4663256 550 3859488 3859690 4664232 4664434 406 3860661 3860920 4665405 4665664 520 3860922 3861384 4665666 4666128 926 3862311 3862512 4667055 4667256 404 3862995 3863329 4667739 4668073 670 3864047 3864436 4668791 4669180 780 3864714 3865269 4669458 4670013 1112 3873101 3873357 4673094 4673350 514 3873359 3873625 4673352 4673618 534 3874008 3874337 4674000 4674329 660 3875486 3875697 4675478 4675689 424 3877490 3877873 4677482 4677865 768 3877884 3878092 4677876 4678084 418 3879782 3880017 4679774 4680009 472 3880497 3880882 4680489 4680874 772 3880884 3881112 4680876 4681104 458 3881114 3881481 4681106 4681473 736 3881784 3882402 4681775 4682393 1238 3882404 3882683 4682395 4682674 560 3882685 3883000 4682676 4682991 632 3883532 3883858 4683523 4683849 654 3883860 3884079 4683851 4684070 440 3884159 3884426 4684150 4684417 536 3887960 3888289 4690425 4690754 660 3891377 3891750 4693842 4694215 748 3892613 3892818 4695078 4695283 412 3893186 3893391 4695651 4695856 412 3905045 3905429 4705510 4705894 770 3907598 3907833 4708063 4708298 472 3908983 3909240 4709448 4709705 516 3911180 3911441 4718382 4718643 524 3912307 3912572 4719509 4719774 532 3912787 3913008 4719989 4720210 444 3913071 3913378 4720272 4720579 616 3913380 3914138 4720581 4721339 1518 3914140 3914342 4721341 4721543 406 3914443 3914774 4721644 4721975 664 3914848 3916092 4722049 4723293 2490 3916211 3916485 4723412 4723686 550 3916700 3916965 4723901 4724166 532 3916967 3917247 4724168 4724448 562 3917273 3917733 4724474 4724934 922 3917861 3919833 4725062 4727034 3946 3919835 3920254 4727036 4727455 840 3920256 3920953 4727457 4728154 1396 3921084 3921346 4728285 4728547 526 3921557 3921943 4728758 4729144 774 3922075 3922345 4729276 4729546 542 3923190 3923401 4730391 4730602 424 3924356 3924810 4731557 4732011 910 3924947 3925200 4732148 4732401 508 3925721 3925958 4732922 4733159 476 3928391 3928805 4735593 4736007 830 3928807 3929180 4736009 4736382 748 3929182 3929417 4736384 4736619 472 3929869 3930141 4737071 4737343 546 3930676 3930940 4737879 4738143 530 3930942 3931172 4738145 4738375 462 3931174 3931620 4738377 4738823 894 3932054 3932535 4739257 4739738 964 3932573 3933133 4739776 4740336 1122 3933261 3933512 4740464 4740715 504 3933609 3934150 4740812 4741353 1084 3934479 3934711 4741682 4741914 466 3934713 3935109 4741916 4742312 794 3935165 3935694 4742368 4742897 1060 3935747 3936714 4742950 4743917 1936 3937378 3937780 4744581 4744983 806 3937782 3938147 4744985 4745350 732 3938339 3938586 4745542 4745789 496 3938726 3938953 4745932 4746159 456 3939656 3940429 4746862 4747635 1548 3940467 3940849 4747673 4748055 766 3941290 3941587 4748496 4748793 596 3941876 3942495 4749083 4749702 1240 3942537 3943049 4749743 4750255 1026 3943061 3943705 4750267 4750911 1290 3943851 3944118 4751057 4751324 536 3944336 3944674 4751541 4751879 678 3944802 3945035 4752007 4752240 468 3945350 3945775 4752556 4752981 852 3946383 3946652 4753589 4753858 540 3947539 3947758 4754745 4754964 440 3947893 3948155 4755099 4755361 526 3949865 3950206 4757073 4757414 684 3950601 3950815 4757809 4758023 430 3951168 3951462 4758379 4758673 590 3953182 3953508 4760393 4760719 654 3954320 3954533 4761534 4761747 428 3955253 3955479 4762467 4762693 454 3957900 3958491 4765080 4765671 1184 3958966 3959213 4766146 4766393 496 3959407 3959684 4766587 4766864 556 3960040 3960576 4767220 4767756 1074 3960579 3961420 4767759 4768600 1684 3961588 3961828 4768768 4769008 482 3961830 3962173 4769010 4769353 688 3962188 3962389 4769368 4769569 404 3962454 3962761 4769634 4769941 616 3963037 3963652 4770217 4770832 1232 3963654 3964503 4770834 4771683 1700 3965149 3965452 4772329 4772632 608 3965454 3965663 4772634 4772843 420 3965878 3966125 4773058 4773305 496 3966524 3967018 4773704 4774198 990 3967020 3967264 4774200 4774444 490 3967437 3967796 4774617 4774976 720 3967798 3968030 4774978 4775210 466 3969369 3970114 4776552 4777297 1492 3971252 3971598 4778435 4778781 694 3972240 3972529 4779423 4779712 580 3972638 3973086 4779821 4780269 898 3973882 3974154 4781065 4781337 546 3974559 3974824 4781742 4782007 532 3975080 3975311 4782263 4782494 464 3976549 3976943 4783731 4784125 790 3977350 3977590 4784532 4784772 482 3978430 3978700 4785612 4785882 542 3978702 3978920 4785884 4786102 438 3979246 3979463 4786428 4786645 436 3979950 3980813 4787132 4787995 1728 3983060 3983408 4790252 4790600 698 3983798 3984254 4790991 4791447 914 3984350 3985017 4791543 4792210 1336 3985785 3985988 4792996 4793199 408 3985990 3986378 4793201 4793589 778 3986526 3986898 4793737 4794109 746 3987329 3987584 4794540 4794795 512 3988758 3989024 4795970 4796236 534 3989842 3990281 4797054 4797493 880 3990574 3990824 4797786 4798036 502 3991069 3991298 4798281 4798510 460 3994640 3994891 4801852 4802103 504 3998658 3999242 4806754 4807338 1170 3999244 3999506 4807340 4807602 526 4001721 4001947 4811588 4811814 454 4002078 4002350 4811945 4812217 546 4002433 4002653 4812300 4812520 442 4002679 4002974 4812546 4812841 592 4002976 4003592 4812843 4813459 1234 4003651 4004132 4813518 4813999 964 4004500 4004978 4814367 4814845 958 4006636 4006971 4816508 4816843 672 4007150 4007604 4817022 4817476 910 4007907 4008189 4817781 4818063 566 4009409 4009691 4819297 4819579 566 4010714 4011133 4820601 4821020 840 4012706 4013140 4822593 4823027 870 4013300 4013716 4823188 4823604 834 4013892 4014726 4823782 4824616 1670 4014737 4015625 4824627 4825515 1778 4015657 4015934 4825547 4825824 556 4016125 4016741 4826015 4826631 1234 4016743 4017305 4826633 4827195 1126 4017548 4017783 4827438 4827673 472 4017785 4018011 4827675 4827901 454 4018598 4018800 4828488 4828690 406 4018898 4019521 4828788 4829411 1248 4019523 4019855 4829413 4829745 666 4019861 4020179 4829749 4830067 638 4020181 4020673 4830069 4830561 986 4020843 4021207 4830731 4831095 730 4021209 4021554 4831097 4831442 692 4021683 4021942 4831570 4831829 520 4022289 4022618 4832176 4832505 660 4023615 4023844 4833502 4833731 460 4024014 4024270 4833901 4834157 514 4024386 4024747 4834273 4834634 724 4028184 4028599 4837882 4838297 832 4030642 4030915 4840340 4840613 548 4031326 4031698 4841024 4841396 746 4032014 4032255 4841713 4841954 484 4032514 4032788 4842213 4842487 550 4033458 4033856 4843160 4843558 798 4033858 4034119 4843560 4843821 524 4034157 4034674 4843859 4844376 1036 4034682 4035035 4844384 4844737 708 4035648 4036270 4845361 4845983 1246 4036272 4036751 4845985 4846464 960 4036971 4037300 4846682 4847011 660 4037310 4037891 4847021 4847602 1164 4038498 4039102 4848038 4848642 1210 4039724 4039958 4849264 4849498 470 4040674 4040905 4850213 4850444 464 4040907 4041365 4850446 4850904 918 4041665 4042311 4851205 4851851 1294 4042313 4042580 4851853 4852120 536 4042808 4043242 4852348 4852782 870 4043940 4044491 4853480 4854031 1104 4044493 4044810 4854033 4854350 636 4045175 4045638 4854715 4855178 928 4046696 4047212 4856236 4856752 1034 4047348 4047597 4856889 4857138 500 4048169 4048373 4857710 4857914 410 4048529 4048757 4858070 4858298 458 4049515 4049832 4859053 4859370 636 4050350 4050549 4859888 4860087 400 4050551 4050882 4860089 4860420 664 4052298 4052503 4861797 4862002 412 4052784 4053048 4862283 4862547 530 4053818 4054023 4863317 4863522 412 4055063 4055292 4864450 4864679 460 4055827 4056695 4865214 4866082 1738 4056823 4057370 4866210 4866757 1096 4057496 4057758 4866883 4867145 526 4057779 4058383 4867167 4867771 1210 4058682 4058912 4868070 4868300 462 4058914 4059128 4868302 4868516 430 4059990 4060374 4869378 4869762 770 4065903 4066156 4875289 4875542 508 4070076 4070469 4880235 4880628 788 4071254 4071466 4881413 4881625 426 4072146 4072369 4882305 4882528 448 4073229 4073457 4883388 4883616 458 4073818 4074128 4883977 4884287 622 4074145 4074371 4884304 4884530 454 4074451 4074664 4884610 4884823 428 4074666 4075524 4884825 4885683 1718 4075844 4076090 4886003 4886249 494 4076865 4077144 4889090 4889369 560 4078137 4078378 4890361 4890602 484 4078380 4078660 4890604 4890884 562 4078874 4079490 4891098 4891714 1234 4079740 4080014 4891964 4892238 550 4080655 4081100 4892879 4893324 892 4082241 4082495 4894465 4894719 510 4082650 4083118 4894874 4895342 938 4083120 4083610 4895344 4895834 982 4083612 4083818 4895836 4896042 414 4083823 4084085 4896047 4896309 526 4084114 4084446 4896338 4896670 666 4084924 4085191 4897148 4897415 536 4085768 4085980 4897991 4898203 426 4088405 4088620 4900628 4900843 432 4088622 4088887 4900845 4901110 532 4089204 4089568 4901415 4901779 730 4093600 4094019 4907147 4907566 840 4094283 4095506 4907830 4909053 2448 4095607 4095977 4909154 4909524 742 4097108 4097318 4910655 4910865 422 4097955 4098496 4911502 4912043 1084 4099287 4099550 4912834 4913097 528 4099936 4100150 4913483 4913697 430 4100221 4100472 4913768 4914019 504 4101847 4102396 4915394 4915943 1100 4102832 4103518 4916379 4917065 1374 4103648 4103949 4917196 4917497 604 4104111 4104346 4917659 4917894 472 4104468 4104676 4918016 4918224 418 4104678 4104886 4918226 4918434 418 4105666 4105981 4919214 4919529 632 4106308 4106567 4919855 4920114 520 4107268 4107796 4920815 4921343 1058 4108134 4108363 4921681 4921910 460 4108950 4109289 4922497 4922836 680 4109737 4110009 4923284 4923556 546 4110197 4110431 4923744 4923978 470 4110433 4110670 4923980 4924217 476 4110942 4111206 4924489 4924753 530 4112872 4113113 4926419 4926660 484 4113531 4113841 4927173 4927483 622 4114131 4114333 4927773 4927975 406 4114335 4114669 4927977 4928311 670 4115275 4115600 4928917 4929242 652 4116503 4116960 4931583 4932040 916 4117834 4118324 4932914 4933404 982 4118491 4118702 4933571 4933782 424 4118758 4119248 4933838 4934328 982 4119603 4120087 4934683 4935167 970 4120353 4120633 4935433 4935713 562 4120662 4121417 4935742 4936497 1512 4121652 4121888 4936732 4936968 474 4121923 4122259 4937003 4937339 674 4124464 4124851 4939544 4939931 776 4125654 4125980 4946126 4946452 654 4127211 4127562 4947683 4948034 704 4129938 4130145 4950410 4950617 416 4130200 4130488 4950672 4950960 578 4131927 4132171 4952399 4952643 490 4135402 4135606 4955874 4956078 410 4136436 4136795 4956908 4957267 720 4137236 4137510 4957708 4957982 550 4137555 4137781 4958027 4958253 454 4137861 4138078 4958333 4958550 436 4138590 4138819 4959062 4959291 460 4139421 4139629 4959893 4960101 418 4139953 4140262 4960426 4960735 620 4141642 4141843 4962115 4962316 404 4142728 4143062 4963201 4963535 670 4143891 4144140 4964364 4964613 500 4144322 4144545 4964795 4965018 448 4144994 4145292 4965467 4965765 598 4145384 4145652 4965857 4966125 538 4145692 4145913 4966165 4966386 444 4146763 4147047 4967236 4967520 570 4147330 4147624 4967803 4968097 590 4149229 4149642 4969703 4970116 828 4150207 4150508 4970681 4970982 604 4150552 4150888 4971026 4971362 674 4151440 4151657 4971668 4971885 436 4151809 4152222 4972037 4972450 828 4152388 4152636 4972616 4972864 498 4153810 4154138 4974038 4974366 658 4154273 4154567 4974501 4974795 590 4155818 4156348 4976046 4976576 1062 4156746 4156966 4976974 4977194 442 4157626 4158023 4977854 4978251 796 4158157 4158450 4978385 4978678 588 4158561 4158838 4981417 4981694 556 4158861 4159219 4981717 4982075 718 4160709 4161251 4983565 4984107 1086 4162354 4162742 4985210 4985598 778 4162744 4163523 4985600 4986379 1560 4163525 4163789 4986381 4986645 530 4164001 4164435 4986857 4987291 870 4164437 4164648 4987293 4987504 424 4164772 4165237 4987628 4988093 932 4165275 4165657 4988131 4988513 766 4165950 4166462 4988720 4989232 1026 4166464 4166760 4989234 4989530 594 4166769 4167388 4989541 4990160 1240 4167430 4167786 4990201 4990557 714 4168430 4168872 4991201 4991643 886 4168874 4169134 4991645 4991905 522 4170257 4170470 4992862 4993075 428 4172858 4173811 4995446 4996399 1908 4173886 4174106 4996474 4996694 442 4174116 4175013 4996704 4997601 1796 4175015 4175909 4997603 4998497 1790 4175950 4176241 4998539 4998830 584 4176243 4176538 4998832 4999127 592 4176894 4177208 4999483 4999797 630 4177351 4178584 4999819 5001052 2468 4178586 4179345 5001054 5001813 1520 4179578 4179837 5002046 5002305 520 4180073 4180287 5002541 5002755 430 4180289 4180605 5002757 5003073 634 4181117 4181358 5003585 5003826 484 4181831 4182169 5004299 5004637 678 4182488 4182726 5004956 5005194 478 4182882 4183189 5005350 5005657 616 4183488 4183996 5005956 5006464 1018 4184046 4184630 5006514 5007098 1170 4184817 4185043 5007285 5007511 454 4185045 4185443 5007513 5007911 798 4185445 4185778 5007913 5008246 668 4186344 4186612 5008812 5009080 538 4186737 4187343 5009205 5009811 1214 4187861 4188293 5010258 5010690 866 4192163 4192395 5014560 5014792 466 4192418 4192617 5014815 5015014 400 4192805 4193098 5015202 5015495 588 4194087 4194323 5016484 5016720 474 4194325 4194575 5016722 5016972 502 4195053 4195357 5017450 5017754 610 4195965 4196318 5018362 5018715 708 4197270 4197511 5019667 5019908 484 4197638 4198220 5020035 5020617 1166 4198698 4198935 5021095 5021332 476 4198943 4199582 5021340 5021979 1280 4201392 4201604 5023768 5023980 426 4204214 4204438 5026590 5026814 450 4204652 4205249 5027028 5027625 1196 4205569 4205976 5027947 5028354 816 4206137 4206386 5028515 5028764 500 4206570 4207144 5028948 5029522 1150 4207599 4207883 5029976 5030260 570 4207885 4208160 5030262 5030537 552 4208277 4208617 5030654 5030994 682 4208854 4209342 5031230 5031718 978 4209832 4210413 5032208 5032789 1164 4211637 4212090 5033606 5034059 908 4213347 4213957 5035316 5035926 1222 4213959 4214347 5035928 5036316 778 4214481 4214751 5036450 5036720 542 4217734 4217997 5039704 5039967 528 4218639 4218843 5040609 5040813 410 4220056 4220269 5042026 5042239 428 4220349 4220555 5042320 5042526 414 4220557 4220897 5042528 5042868 682 4221273 4221491 5043244 5043462 438 4222189 4222406 5044160 5044377 436 4223590 4223810 5045561 5045781 442 4224226 4224461 5046197 5046432 472 4224517 4224776 5046488 5046747 520 4225045 4225323 5047016 5047294 558 4225735 4225970 5047706 5047941 472 4229111 4229551 5057182 5057622 882 4229679 4229908 5057750 5057979 460 4229994 4230336 5058065 5058407 686 4230657 4231155 5058728 5059226 998 4231157 4231535 5059228 5059606 758 4232285 4232582 5060356 5060653 596 4232761 4232992 5060832 5061063 464 4233381 4233656 5061466 5061741 552 4234440 4234647 5062525 5062732 416 4235356 4235672 5063441 5063757 634 4237564 4237988 5065649 5066073 850 4238057 4238268 5066142 5066353 424 4238406 4238620 5066491 5066705 430 4238622 4238986 5066707 5067071 730 4239483 4240332 5067568 5068417 1700 4240577 4240851 5068662 5068936 550 4241194 4241513 5069279 5069598 640 4241860 4242134 5069945 5070219 550 4242340 4242595 5070425 5070680 512 4242692 4242965 5070777 5071050 548 4243246 4243553 5071331 5071638 616 4243777 4244103 5071862 5072188 654 4244267 4244585 5072352 5072670 638 4244704 4245302 5072789 5073387 1198 4245304 4245658 5073389 5073743 710 4245858 4246069 5073943 5074154 424 4246359 4246764 5074444 5074849 812 4247264 4247653 5075257 5075646 780 4247873 4248118 5075866 5076111 492 4250222 4250493 5078215 5078486 544 4250517 4250895 5078510 5078888 758 4253485 4253771 5081478 5081764 574 4253773 4254142 5081766 5082135 740 4254248 4254495 5082241 5082488 496 4254560 4254856 5082553 5082849 594 4256676 4257136 5084669 5085129 922 4259211 4259425 5087175 5087389 430 4262253 4262478 5090217 5090442 452 4263080 4263430 5091044 5091394 702 4263432 4263811 5091396 5091775 760 4264612 4264826 5092576 5092790 430 4267726 4267949 5095682 5095905 448 4267951 4268300 5095907 5096256 700 4271274 4271688 5099230 5099644 830 4272543 4272784 5100500 5100741 484 4274885 4275144 5102841 5103100 520 4275257 4275698 5103213 5103654 884 4275783 4276051 5103739 5104007 538 4276498 4276886 5104454 5104842 778 4277592 4277901 5105547 5105856 620 4278059 4278511 5106014 5106466 906 4278860 4279104 5106815 5107059 490 4280733 4281019 5108691 5108977 574 4282323 4282554 5110281 5110512 464 4282634 4282898 5110592 5110856 530 4282979 4283305 5110938 5111264 654 4283580 4283866 5111539 5111825 574 4284575 4284796 5112534 5112755 444 4284945 4285241 5112904 5113200 594 4285243 4285625 5113202 5113584 766 4285817 4286408 5113776 5114367 1184 4286746 4286983 5114705 5114942 476 4287171 4287708 5115130 5115667 1076 4287908 4288139 5115867 5116098 464 4289459 4289694 5117418 5117653 472 4291742 4292213 5119701 5120172 944 4294024 4294328 5121519 5121823 610 4294488 4294792 5121983 5122287 610 4295091 4295297 5122586 5122792 414 4295299 4295540 5122794 5123035 484 4295545 4295804 5123040 5123299 520 4295971 4296203 5123466 5123698 466 4296217 4297019 5123712 5124514 1606 4298256 4298470 5125751 5125965 430 4298526 4298730 5126021 5126225 410 4299245 4299477 5126740 5126972 466 4300511 4300721 5128006 5128216 422 4301558 4301780 5129053 5129275 446 4301827 4302040 5129322 5129535 428 4303916 4304296 5131411 5131791 762 4312689 4312935 5142354 5142600 494 4315512 4315729 5145178 5145395 436 4318700 4318931 5148366 5148597 464 4323945 4324269 5153204 5153528 650 4324271 4324481 5153530 5153740 422 4325926 4326534 5155186 5155794 1218 4327141 4327364 5156401 5156624 448 4327881 4328194 5157141 5157454 628 4328196 4328668 5157456 5157928 946 4328796 4329079 5158056 5158339 568 4329081 4329292 5158341 5158552 424 4330003 4330414 5159263 5159674 824 4330464 4330844 5159724 5160104 762 4330881 4331442 5160141 5160702 1124 4331444 4331982 5160704 5161242 1078 4333040 4333250 5162300 5162510 422 4334154 4334449 5163414 5163709 592 4334499 4334789 5163759 5164049 582 4336113 4336322 5165373 5165582 420 4336393 4336693 5165653 5165953 602 4336927 4337183 5166187 5166443 514 4337794 4338038 5167054 5167298 490 4338994 4339308 5168254 5168568 630 4339353 4339715 5168613 5168975 726 4340892 4341142 5170152 5170402 502 4341624 4341999 5170884 5171259 752 4344740 4344957 5174001 5174218 436 4344959 4345211 5174220 5174472 506 4345213 4345571 5174474 5174832 718 4346026 4346523 5175287 5175784 996 4346631 4346834 5175892 5176095 408 4347166 4347790 5176427 5177051 1250 4347927 4348213 5177188 5177474 574 4348434 4348726 5177695 5177987 586 4348728 4348972 5177989 5178233 490 4349163 4349372 5178424 5178633 420 4350463 4350950 5179724 5180211 976 4351194 4351406 5180455 5180667 426 4351408 4351706 5180669 5180967 598 4352170 4352376 5181431 5181637 414 4353534 4354238 5182795 5183499 1410 4354273 4354526 5183534 5183787 508 4354528 4354910 5183789 5184171 766 4354912 4355495 5184173 5184756 1168 4355497 4355732 5184758 5184993 472 4355851 4356510 5185112 5185771 1320 4356602 4356917 5185863 5186178 632 4356919 4357185 5186180 5186446 534 4357376 4357687 5186637 5186948 624 4358283 4358518 5187545 5187780 472 4358531 4358953 5187793 5188215 846 4359009 4359406 5188271 5188668 796 4359408 4359650 5188670 5188912 486 4360590 4361086 5189852 5190348 994 4361109 4361356 5190371 5190618 496 4361397 4361736 5190659 5190998 680 4361967 4362177 5191229 5191439 422 4362309 4362521 5191571 5191783 426 4362523 4362876 5191785 5192138 708 4363046 4363258 5192308 5192520 426 4363260 4363546 5192522 5192808 574 4363548 4364194 5192810 5193456 1294 4364202 4364791 5193464 5194053 1180 4364793 4364992 5194055 5194254 400 4365531 4365754 5194793 5195016 448 4365756 4366009 5195018 5195271 508 4367889 4368488 5197151 5197750 1200 4369080 4369317 5198342 5198579 476 4370219 4370576 5199481 5199838 716 4370778 4370988 5200030 5200240 422 4371312 4371617 5200564 5200869 612 4371619 4371876 5200871 5201128 516 4372187 4372397 5201279 5201489 422 4373122 4373545 5202214 5202637 848 4373777 4374003 5202869 5203095 454 4374052 4374251 5203144 5203343 400 4374905 4375185 5203997 5204277 562 4375857 4376101 5204948 5205192 490 4376397 4376796 5205488 5205887 800 4377144 4377416 5206235 5206507 546 4377418 4377634 5206509 5206725 434 4377636 4378173 5206727 5207264 1076 4378301 4378506 5207392 5207597 412 4378508 4378713 5207599 5207804 412 4378718 4378946 5207809 5208037 458 4379198 4379523 5208289 5208614 652 4379594 4379808 5208685 5208899 430 4380144 4380485 5209235 5209576 684 4380835 4381058 5209926 5210149 448 4381060 4381274 5210151 5210365 430 4381385 4381717 5210476 5210808 666 4382064 4382284 5211155 5211375 442 4383624 4383938 5212160 5212474 630 4387381 4387685 5215917 5216221 610 4387687 4387980 5216223 5216516 588 4388866 4389092 5217402 5217628 454 4389846 4390338 5218382 5218874 986 4390965 4391449 5219501 5219985 970 4391451 4391696 5219987 5220232 492 4392660 4392949 5221196 5221485 580 4392951 4393314 5221487 5221850 728 4393390 4393607 5221926 5222143 436 4394572 4394885 5223108 5223421 628 4396694 4397281 5225230 5225817 1176 4397605 4398192 5226141 5226728 1176 4398699 4399042 5227236 5227579 688 4399262 4399973 5227799 5228510 1424 4400047 4400534 5228584 5229071 976 4400536 4400837 5229073 5229374 604 4400839 4401199 5229376 5229736 722 4401291 4401502 5229828 5230039 424 4401693 4402147 5230230 5230684 910 4402690 4402925 5231227 5231462 472 4403737 4404072 5232275 5232610 672 4404088 4404439 5232626 5232977 704 4404441 4404736 5232979 5233274 592 4406310 4406566 5234848 5235104 514 4407734 4407963 5236273 5236502 460 4407983 4408209 5236522 5236748 454 4409733 4410016 5238272 5238555 568 4410543 4411443 5239082 5239982 1802 4411568 4411931 5240107 5240470 728 4413245 4413458 5241784 5241997 428 4413460 4414119 5241999 5242658 1320 4414166 4414590 5242705 5243129 850 4415106 4415865 5243645 5244404 1520 4415867 4416119 5244406 5244658 506 4416427 4416794 5244966 5245333 736 4416802 4417277 5245341 5245816 952 4417587 4417894 5246126 5246433 616 4417896 4418210 5246435 5246749 630 4418721 4419265 5247260 5247804 1090 4419327 4420142 5247866 5248681 1632 4422028 4422356 5250566 5250894 658 4422589 4422864 5251127 5251402 552 4422884 4423135 5251422 5251673 504 4423235 4423484 5251773 5252022 500 4423486 4423779 5252024 5252317 588 4423832 4424168 5252370 5252706 674 4424170 4424765 5252708 5253303 1192 4425009 4425265 5253547 5253803 514 4425565 4425963 5255851 5256249 798 4426044 4426243 5256330 5256529 400 4426245 4426957 5256531 5257243 1426 4427159 4427541 5257445 5257827 766 4427543 4427886 5257829 5258172 688 4427900 4428237 5258186 5258523 676 4428542 4428802 5258828 5259088 522 4429070 4429306 5259356 5259592 474 4429923 4430185 5260209 5260471 526 4430365 4430680 5260651 5260966 632 4430682 4431179 5260968 5261465 996 4432539 4432756 5262814 5263031 436 4432758 4433008 5263033 5263283 502 4433601 4433926 5263876 5264201 652 4433963 4434274 5264238 5264549 624 4435031 4435251 5265306 5265526 442 4435253 4435481 5265528 5265756 458 4436111 4436332 5266387 5266608 444 4436615 4437230 5266891 5267506 1232 4437503 4437711 5267796 5268004 418 4438094 4438719 5268387 5269012 1252 4438730 4438975 5269023 5269268 492 4439166 4439479 5269459 5269772 628 4439661 4440048 5269954 5270341 776 4440303 4440757 5270596 5271050 910 4441584 4441911 5271877 5272204 656 4443981 4444452 5274274 5274745 944 4444454 4444845 5274747 5275138 784 4444973 4445194 5275266 5275487 444 4445391 4445813 5275684 5276106 846 4445815 4446120 5276108 5276413 612 4446140 4446428 5276433 5276721 578 4446534 4447021 5276827 5277314 976 4447071 4447327 5277364 5277620 514 4447949 4448349 5278242 5278642 802 4448542 4448813 5278837 5279108 544 4448815 4449101 5279110 5279396 574 4449229 4449635 5279524 5279930 814 4449737 4450021 5280033 5280317 570 4450381 4450608 5280677 5280904 456 4452995 4453356 5283291 5283652 724 4454003 4454286 5284299 5284582 568 4454357 4454691 5284653 5284987 670 4454909 4455147 5285205 5285443 478 4455161 4455896 5285457 5286192 1472 4455898 4456160 5286194 5286456 526 4456450 4456679 5286746 5286975 460 4456750 4457024 5287046 5287320 550 4457117 4457793 5287439 5288115 1354 4458252 4458580 5288606 5288934 658 4459728 4459936 5290082 5290290 418 4460106 4460393 5290460 5290747 576 4461084 4461335 5291438 5291689 504 4461645 4461886 5291999 5292240 484 4462630 4462835 5292984 5293189 412 4463656 4463881 5294010 5294235 452 4464916 4465556 5295269 5295909 1282 4465855 4466120 5296208 5296473 532 4466518 4466825 5296871 5297178 616 4467031 4467308 5297384 5297661 556 4467542 4467930 5297895 5298283 778 4467945 4468291 5298298 5298644 694 4468421 4468654 5298774 5299007 468 4468890 4469173 5299243 5299526 568 4469535 4469764 5299888 5300117 460 4469816 4470154 5300169 5300507 678 4476003 4476336 5306344 5306677 668 4478263 4478463 5308503 5308703 402 4478850 4479283 5309086 5309519 868 4480524 4480732 5310760 5310968 418 4481043 4481572 5311279 5311808 1060 4481615 4481848 5311851 5312084 468 4482116 4482339 5312546 5312769 448 4482470 4482864 5312900 5313294 790 4482962 4483176 5313392 5313606 430 4483178 4483541 5313608 5313971 728 4483543 4484119 5313973 5314549 1154 4484463 4484806 5314893 5315236 688 4485150 4485499 5315580 5315929 700 4485501 4485735 5315931 5316165 470 4485737 4486325 5316167 5316755 1178 4486327 4486622 5316757 5317052 592 4486903 4487111 5317333 5317541 418 4493190 4493434 5318623 5318867 490 4493667 4494057 5319100 5319490 782 4535262 4535462 5365009 5365209 402 4536431 4537017 5366178 5366764 1174 4538109 4538335 5367856 5368082 454 4538484 4538771 5368231 5368518 576 4539505 4539758 5369252 5369505 508 4540615 4540884 5370345 5370614 540 4540886 4541103 5370616 5370833 436 4542032 4542325 5371762 5372055 588 4542802 4543107 5372531 5372836 612 4543111 4543472 5372840 5373201 724 4544659 4544888 5374388 5374617 460 4548476 4548708 5378136 5378368 466 4548909 4549328 5378569 5378988 840 4550051 4550300 5379711 5379960 500 4551504 4551751 5381165 5381412 496 4551873 4552075 5381534 5381736 406 4554158 4554568 5383819 5384229 822 4554676 4554937 5384337 5384598 524 4556607 4556926 5386268 5386587 640 4556976 4557328 5386637 5386989 706 4557330 4557696 5386991 5387357 734 4557847 4558062 5387508 5387723 432 4561823 4562035 5399775 5399987 426 4567898 4568194 5405866 5406162 594 4586391 4586597 5418882 5419088 414 4589247 4589498 5422424 5422675 504 4589544 4589756 5422721 5422933 426 4589758 4590079 5422935 5423256 644 4591606 4591905 5424792 5425091 600 4592020 4592269 5425206 5425455 500 4592317 4592556 5425504 5425743 480 4592558 4592949 5425745 5426136 784 4593732 4593982 5426920 5427170 502 4594693 4595224 5427880 5428411 1064 4595901 4596268 5429088 5429455 736 4596459 4596916 5429646 5430103 916 4596918 4597156 5430105 5430343 478 4597495 4597826 5430682 5431013 664 4597828 4598336 5431015 5431523 1018 4598884 4599452 5432071 5432639 1138 4599469 4599869 5432656 5433056 802 4599871 4600306 5433058 5433493 872 4600811 4601319 5434000 5434508 1018 4601459 4601825 5434648 5435014 734 4601827 4602472 5435016 5435661 1292 4604188 4604575 5437063 5437450 776 4605120 4605567 5437995 5438442 896 4605846 4606069 5438721 5438944 448 4606201 4607439 5439076 5440314 2478 4607576 4607775 5440451 5440650 400 4607972 4608300 5440847 5441175 658 4608302 4608593 5441177 5441468 584 4608604 4609160 5441479 5442035 1114 4609548 4610186 5442423 5443061 1278 4610318 4610595 5443193 5443470 556 4610597 4611095 5443472 5443970 998 4613016 4613327 5445687 5445998 624 4613736 4614096 5446407 5446767 722 4614243 4614763 5446914 5447434 1042 4615143 4615543 5447814 5448214 802 4615599 4616269 5448270 5448940 1342 4616649 4616956 5449320 5449627 616 4617023 4617937 5449694 5450608 1830 4618311 4618887 5450982 5451558 1154 4621390 4621712 5453018 5453340 646 4622026 4622270 5453654 5453898 490 4622284 4622611 5453912 5454239 656 4623145 4623424 5454773 5455052 560 4623611 4624207 5455239 5455835 1194 4624869 4625256 5456497 5456884 776 4625387 4625939 5457015 5457567 1106 4626344 4627214 5457972 5458842 1742 4627591 4627832 5459219 5459460 484 4628122 4628527 5459750 5460155 812 4630122 4630608 5461750 5462236 974 4630610 4630809 5462238 5462437 400 4632073 4632299 5463701 5463927 454 4632526 4632989 5464154 5464617 928 4632991 4633225 5464619 5464853 470 4637081 4637382 5468709 5469010 604 4637525 4638352 5469153 5469980 1656 genometools-1.5.1/testdata/chaindata/chain-global-maxgap10000066400000000000000000000001651211610345200234520ustar00rootroot00000000000000# chain 0: length 3 score 5702 54983 56483 59959 61459 3002 56485 56939 61461 61915 910 56941 57835 61917 62811 1790 genometools-1.5.1/testdata/chaindata/chain-globalgc000066400000000000000000004446061211610345200223640ustar00rootroot00000000000000# chain 0: length 4258 score -4140108 5851 6237 5868 6254 774 7627 7937 7644 7954 622 8079 8457 8096 8474 758 8687 8994 8704 9011 616 8996 9375 9013 9392 760 9377 9666 9394 9683 580 10024 10406 10041 10423 766 10408 10715 10425 10732 616 11439 11663 11456 11680 450 11695 11898 11712 11915 408 12026 12235 12043 12252 420 12384 12712 12401 12729 658 13131 13339 13148 13356 418 13719 14230 13736 14247 1024 14232 14645 14249 14662 828 15174 15389 15191 15406 432 17569 17786 16237 16454 436 18477 18763 17145 17431 574 19377 19794 18045 18462 836 20813 21272 25219 25678 920 21304 21615 25716 26027 624 22048 22265 26460 26677 436 23335 23639 27747 28051 610 25045 25447 29457 29859 806 26789 27024 31164 31399 472 27712 28067 32087 32442 712 28223 28446 32598 32821 448 29506 29843 33881 34218 676 30706 30913 35081 35288 416 31887 32116 36262 36491 460 33552 33766 37927 38141 430 34112 34597 38486 38971 972 35170 35491 39577 39898 644 35499 35831 39906 40238 666 36263 36479 40670 40886 434 37032 37439 41439 41846 816 37534 37775 41941 42182 484 37777 38103 42184 42510 654 38777 39003 43184 43410 454 40129 40508 44536 44915 760 41188 41408 45595 45815 442 43562 43773 47976 48187 424 44455 44660 48869 49074 412 45555 45805 49969 50219 502 45950 46173 50365 50588 448 46253 46632 50668 51047 760 46901 47137 51316 51552 474 47515 47785 51930 52200 542 49571 49940 53986 54355 740 51097 51551 56073 56527 910 51621 51901 56597 56877 562 51924 52135 56900 57111 424 53284 53627 58260 58603 688 53902 54335 58878 59311 868 54337 54981 59313 59957 1290 54983 56483 59959 61459 3002 56485 56939 61461 61915 910 56941 57835 61917 62811 1790 57928 58141 62904 63117 428 59485 59772 64418 64705 576 59831 60053 64764 64986 446 60245 60545 65178 65478 602 60547 60890 65480 65823 688 60943 61457 65876 66390 1030 61459 61700 66392 66633 484 62923 63424 67856 68357 1004 64749 65026 69681 69958 556 65826 66030 70758 70962 410 66970 67169 71817 72016 400 67312 67544 72159 72391 466 67596 67832 72443 72679 474 68693 68945 73540 73792 506 70473 71000 75320 75847 1056 71214 71540 76061 76387 654 74737 75132 79557 79952 792 75226 75461 80046 80281 472 76775 76988 82604 82817 428 81083 81302 85691 85910 440 82978 83294 87586 87902 634 83392 83799 88000 88407 816 84493 84737 89099 89343 490 84949 85210 89555 89816 524 85881 86098 90487 90704 436 87279 87522 91885 92128 488 87794 88118 92400 92724 650 88120 88349 92726 92955 460 89754 90328 94360 94934 1150 90591 90949 95197 95555 718 91187 91785 95793 96391 1198 92474 92682 97080 97288 418 93089 93369 97695 97975 562 94167 94384 98773 98990 436 94548 94791 99154 99397 488 95152 95370 99758 99976 438 95905 96359 100511 100965 910 97113 97513 101719 102119 802 98322 98775 102928 103381 908 98906 99228 103512 103834 646 99254 99649 103860 104255 792 99651 99869 104257 104475 438 100432 100691 105038 105297 520 101175 101494 105781 106100 640 101721 101923 106327 106529 406 102613 102831 107219 107437 438 102833 103359 107439 107965 1054 103604 103840 108210 108446 474 103842 104168 108448 108774 654 104548 104822 109154 109428 550 104857 105545 109463 110151 1378 106099 107460 110705 112066 2724 107686 107909 112292 112515 448 108007 108211 112613 112817 410 108293 108597 112899 113203 610 108848 109485 113454 114091 1276 109496 109707 114102 114313 424 109927 110184 114533 114790 516 110441 110658 115047 115264 436 110660 110901 115266 115507 484 110903 111227 115509 115833 650 111661 112144 116151 116634 968 112146 112457 116636 116947 624 112459 112834 116949 117324 752 112836 113047 117326 117537 424 113049 113268 117539 117758 440 113270 114090 117760 118580 1642 116535 116843 121025 121333 618 117226 117573 121716 122063 696 117842 118158 122332 122648 634 118514 119177 123004 123667 1328 119259 119491 123749 123981 466 119493 119812 123983 124302 640 120595 120848 125085 125338 508 121891 122239 126381 126729 698 122496 122797 126986 127287 604 122808 123161 127298 127651 708 123931 124169 128421 128659 478 124522 124796 129012 129286 550 125410 125818 129900 130308 818 127257 127734 131747 132224 956 127882 128266 132255 132639 770 128406 128650 132779 133023 490 128991 129196 133364 133569 412 130733 131096 135106 135469 728 131188 131489 135561 135862 604 131491 131699 135864 136072 418 133795 134045 138168 138418 502 134047 134547 138420 138920 1002 134594 134876 138967 139249 566 134968 135254 139341 139627 574 135256 135635 139629 140008 760 135663 136121 140036 140494 918 136240 136604 140613 140977 730 136870 137101 141243 141474 464 137556 137806 141929 142179 502 139126 139355 143499 143728 460 141040 141304 145413 145677 530 141343 141710 145716 146083 736 141797 142087 146170 146460 582 142452 142814 146825 147187 726 143270 143496 147643 147869 454 143498 143822 147871 148195 650 144256 144630 148629 149003 750 145072 145290 149445 149663 438 146145 146732 150518 151105 1176 157544 157954 161867 162277 822 158023 158489 162346 162812 934 158578 158792 162901 163115 430 159237 159483 163560 163806 494 160020 160261 164343 164584 484 160401 161512 164724 165835 2224 162678 162981 167001 167304 608 164644 164931 168967 169254 576 166100 166500 170423 170823 802 166502 166932 170825 171255 862 168428 168768 172751 173091 682 169064 169426 173387 173749 726 169759 169994 174082 174317 472 172286 172617 176609 176940 664 174673 175242 178873 179442 1140 175991 176292 180191 180492 604 176294 176862 180494 181062 1138 176876 177372 181076 181572 994 177648 177933 181848 182133 572 178131 178465 182331 182665 670 178479 178867 182679 183067 778 179070 179513 183270 183713 888 180127 180427 184327 184627 602 180820 181388 185020 185588 1138 181390 181646 185590 185846 514 181663 181940 185863 186140 556 182343 182661 186543 186861 638 183133 183406 187333 187606 548 183458 183671 187658 187871 428 183701 184121 187901 188321 842 185630 186048 189117 189535 838 188339 188709 191826 192196 742 188711 189124 192198 192611 828 189417 189686 192904 193173 540 189688 189955 193175 193442 536 189957 190705 193444 194192 1498 190707 191298 194194 194785 1184 191300 192509 194787 195996 2420 192775 193061 196120 196406 574 193063 194127 196408 197472 2130 194165 194669 197510 198014 1010 195040 197671 198385 201016 5264 197790 198378 201135 201723 1178 198380 198621 201725 201966 484 199262 199926 202607 203271 1330 199928 200418 203273 203763 982 200529 200809 203873 204153 562 200811 201187 204155 204531 754 201345 201607 204689 204951 526 201640 202500 204984 205844 1722 202808 203026 206152 206370 438 203135 203440 206479 206784 612 204771 204985 208115 208329 430 204987 205202 208331 208546 432 205269 205525 208613 208869 514 206068 206371 209412 209715 608 207123 207337 210467 210681 430 207939 208243 211283 211587 610 208245 208771 211589 212115 1054 208773 209122 212117 212466 700 209142 209380 212486 212724 478 209442 209817 212786 213161 752 211763 212003 215107 215347 482 212180 212451 215524 215795 544 212952 213198 216296 216542 494 213337 213554 216681 216898 436 213819 214384 217164 217729 1132 215380 215675 218713 219008 592 215949 216222 219282 219555 548 218188 218576 221520 221908 778 218828 219224 222159 222555 794 219732 220129 223063 223460 796 220515 220882 223846 224213 736 220884 221193 224215 224524 620 221550 221915 224881 225246 732 222448 222986 225779 226317 1078 222988 223316 226319 226647 658 223538 223739 226870 227071 404 223915 224888 227247 228220 1948 224890 225585 228222 228917 1392 225900 226112 229232 229444 426 226604 226927 229936 230259 648 226936 227481 230267 230812 1092 227623 227871 230954 231202 498 227969 228550 231300 231881 1164 228768 229025 232098 232355 516 229598 229840 232928 233170 486 229853 230143 233183 233473 582 232837 233051 236388 236602 430 233158 233399 236709 236950 484 233401 233636 236952 237187 472 233638 233959 237189 237510 644 233961 234277 237512 237828 634 234618 234856 238169 238407 478 235556 235890 239107 239441 670 236041 236334 239592 239885 588 237263 237536 240815 241088 548 237538 237738 241090 241290 402 240031 240397 278100 278466 734 241492 241701 279561 279770 420 241703 242018 279772 280087 632 245371 245714 283339 283682 688 245952 246203 283920 284171 504 250050 250279 287937 288166 460 251614 251828 289501 289715 430 252573 252783 290460 290670 422 253387 253681 291275 291569 590 254361 254617 292249 292505 514 255687 256313 293575 294201 1254 256486 256872 294374 294760 774 257033 257260 294921 295148 456 258635 258918 296523 296806 568 259430 259675 297318 297563 492 260217 260431 298105 298319 430 260706 260991 298594 298879 572 297132 297463 330317 330648 664 299169 299479 332354 332664 622 300524 300783 333709 333968 520 301750 302005 334935 335190 512 305109 305541 338294 338726 866 306139 306369 339324 339554 462 306382 306626 339567 339811 490 306907 307106 340092 340291 400 308316 308640 341501 341825 650 309476 309792 342661 342977 634 313588 313860 353941 354213 546 316129 316360 358934 359165 464 318125 318630 361618 362123 1012 318632 318938 362125 362431 614 319028 319326 362521 362819 598 319744 320032 363237 363525 578 321266 321471 364759 364964 412 321473 321699 364966 365192 454 322401 323072 365894 366565 1344 323968 324172 367461 367665 410 328133 328560 376575 377002 856 328661 329008 377103 377450 696 329022 329383 377464 377825 724 329619 330088 378061 378530 940 330090 330409 378532 378851 640 330540 330759 378982 379201 440 332518 332846 384784 385112 658 334160 334386 386435 386661 454 334409 334749 386684 387024 682 335190 335460 387465 387735 542 335793 336128 388068 388403 672 336547 336839 388822 389114 586 338028 338296 390303 390571 538 340819 341027 393187 393395 418 341549 341791 393917 394159 486 342414 343104 399888 400578 1382 343301 343735 400775 401209 870 343919 344120 401393 401594 404 344845 345122 402322 402599 556 345448 345667 402925 403144 440 351607 352098 408800 409291 984 352888 353166 410081 410359 558 354178 354443 411935 412200 532 355443 355817 413200 413574 750 355819 356099 413576 413856 562 358310 358593 415864 416147 568 361300 361532 418854 419086 466 362254 362582 419808 420136 658 362638 362871 420192 420425 468 367228 367430 426606 426808 406 368110 368314 427488 427692 410 368569 368964 427947 428342 792 369620 370014 428998 429392 790 370352 370704 429730 430082 706 370840 371258 430218 430636 838 374964 375281 433940 434257 636 375474 375856 434450 434832 766 378703 379047 437579 437923 690 385128 385475 446908 447255 696 385631 385848 447411 447628 436 386054 386300 447834 448080 494 388046 388254 449826 450034 418 392824 393267 453381 453824 888 393274 393475 453831 454032 404 393537 394358 454094 454915 1644 394579 394841 455136 455398 526 394843 395354 455400 455911 1024 396828 397102 457385 457659 550 397218 397459 457775 458016 484 397707 397942 458264 458499 472 398247 398697 458804 459254 902 398813 399102 459370 459659 580 399920 400442 460477 460999 1046 400542 401106 461099 461663 1130 401519 401862 462076 462419 688 402894 403806 463451 464363 1826 404119 404330 464676 464887 424 404764 405189 465321 465746 852 405269 405498 465826 466055 460 405500 406133 466057 466690 1268 406247 406472 466804 467029 452 408239 408627 471103 471491 778 409019 409683 471883 472547 1330 409685 409949 472549 472813 530 409951 410158 472815 473022 416 410779 411080 473541 473842 604 411169 411404 473931 474166 472 411927 412377 474689 475139 902 412584 412810 475343 475569 454 414347 414694 477106 477453 696 414876 415176 477635 477935 602 415178 416519 477937 479278 2684 416521 417497 479280 480256 1954 417578 417798 480337 480557 442 418074 418301 480833 481060 456 418498 419130 481257 481889 1266 419564 421545 482323 484304 3964 421585 421886 484344 484645 604 421918 422324 484677 485083 814 424420 424775 488828 489183 712 425323 425610 489730 490017 576 425918 426348 490325 490755 862 426350 427121 490757 491528 1544 427123 427330 491530 491737 416 427941 428188 492348 492595 496 428418 428807 492825 493214 780 429056 429386 493463 493793 662 429762 430016 494795 495049 510 430020 430256 495053 495289 474 430318 430569 495351 495602 504 430571 430945 495604 495978 750 430974 431460 496007 496493 974 431796 432032 496829 497065 474 432068 432415 497101 497448 696 432423 432739 497456 497772 634 433707 433976 498740 499009 540 434137 434777 499170 499810 1282 435013 435485 500046 500518 946 437781 438101 504612 504932 642 440107 440365 506938 507196 518 440367 440657 507198 507488 582 440659 440932 507490 507763 548 441081 441412 507912 508243 664 443866 444069 510697 510900 408 445270 445481 512101 512312 424 446240 446460 513071 513291 442 446699 446996 513530 513827 596 447154 447388 513985 514219 470 447558 447851 514389 514682 588 447853 448076 514684 514907 448 448714 449491 515545 516322 1556 449557 450019 516388 516850 926 450118 450394 516949 517225 554 450523 450872 517354 517703 700 451229 451856 518060 518687 1256 451981 452222 518812 519053 484 453065 453331 519896 520162 534 453527 454666 520358 521497 2280 454668 455257 521499 522088 1180 455277 455482 522108 522313 412 455714 455976 522544 522806 526 456098 456384 522928 523214 574 456386 456860 523216 523690 950 457429 457823 524259 524653 790 457825 458484 524655 525314 1320 459551 459759 526381 526589 418 460049 460278 526879 527108 460 460442 460891 527272 527721 900 460893 461307 527723 528137 830 461309 461526 528139 528356 436 462603 462994 529433 529824 784 463853 464078 530696 530921 452 467804 468197 534646 535039 788 468592 469367 535434 536209 1552 469369 469914 536211 536756 1092 469916 470310 536758 537152 790 471002 471234 537844 538076 466 471715 471981 538557 538823 534 471983 472235 538825 539077 506 472804 473033 539646 539875 460 473738 473940 540580 540782 406 474071 474282 540913 541124 424 474284 474519 541126 541361 472 475605 475824 542449 542668 440 476138 476384 542982 543228 494 476386 476706 543230 543550 642 476749 477036 543593 543880 576 477185 477438 544029 544282 508 477689 477900 544533 544744 424 478299 478541 545143 545385 486 478557 478830 545401 545674 548 478832 479540 545676 546384 1418 479542 479820 546386 546664 558 479873 480097 546717 546941 450 480156 480358 547000 547202 406 480500 480797 547344 547641 596 480799 481310 547643 548154 1024 481312 481595 548156 548439 568 482005 482228 548849 549072 448 482401 482648 549245 549492 496 483364 483867 550208 550711 1008 483869 484107 550713 550951 478 484109 485087 550953 551931 1958 485569 486007 552413 552851 878 486512 487233 553356 554077 1444 488357 488580 555201 555424 448 488648 489096 555492 555940 898 490156 490806 556830 557480 1302 491016 491281 557690 557955 532 491283 491685 557957 558359 806 491936 492348 558610 559022 826 492431 492726 559105 559400 592 493578 493812 560252 560486 470 494565 494791 561239 561465 454 495183 495536 561857 562210 708 495813 496141 562487 562815 658 496339 496774 563013 563448 872 497201 497557 563771 564127 714 497559 497843 564129 564413 570 497944 498191 564514 564761 496 498193 498515 564763 565085 646 498526 498795 565096 565365 540 499179 499394 565749 565964 432 500429 500704 566999 567274 552 500996 501197 567566 567767 404 501503 501749 568073 568319 494 501869 502227 568439 568797 718 502292 502522 568862 569092 462 502841 503244 569410 569813 808 503252 503472 569821 570041 442 504201 504498 570770 571067 596 505313 505596 571882 572165 568 505598 505808 572167 572377 422 505872 506092 572441 572661 442 506287 506526 572856 573095 480 507669 507870 574238 574439 404 510100 510503 576568 576971 808 510693 510970 577161 577438 556 511506 511720 577974 578188 430 511916 512268 578384 578736 706 514311 514561 608578 608828 502 514941 515380 609208 609647 880 515956 516293 610223 610560 676 516295 516506 610562 610773 424 516508 517120 610775 611387 1226 517360 517640 611627 611907 562 517972 518490 612239 612757 1038 518492 518760 612759 613027 538 519981 520225 614248 614492 490 520758 521002 615025 615269 490 527250 527840 620314 620904 1182 527909 528139 620973 621203 462 528272 528957 621335 622020 1372 528959 529358 622022 622421 800 529620 530191 622683 623254 1144 530358 530775 623421 623838 836 531308 531568 624371 624631 522 532001 532301 625064 625364 602 532459 532658 625522 625721 400 533211 533782 626274 626845 1144 535236 535474 628299 628537 478 536800 537097 629864 630161 596 538454 538722 631432 631700 538 539806 540008 632784 632986 406 540859 541151 633837 634129 586 543235 543483 636213 636461 498 545192 545481 638170 638459 580 545483 545707 638461 638685 450 545797 546303 638775 639281 1014 547235 547461 640213 640439 454 548227 548559 641206 641538 666 548973 549348 641952 642327 752 549401 549615 642380 642594 430 549988 550295 642967 643274 616 552171 552490 645094 645413 640 553403 554011 646326 646934 1218 554139 554735 647062 647658 1194 555699 555927 648622 648850 458 557166 557534 650089 650457 738 557536 557969 650459 650892 868 558658 558860 651581 651783 406 558862 559066 651785 651989 410 559243 559706 652166 652629 928 561117 561536 654046 654465 840 561996 562213 654926 655143 436 562215 562563 655145 655493 698 562841 563219 655771 656149 758 563221 563588 656151 656518 736 563747 564023 656677 656953 554 585334 585798 656962 657426 930 585880 586262 657508 657890 766 586264 586465 657892 658093 404 587112 587323 658740 658951 424 587364 587641 658992 659269 556 588166 588459 659794 660087 588 588646 588936 660274 660564 582 589344 589651 660972 661279 616 590019 590549 661647 662177 1062 592069 592361 663697 663989 586 594538 594752 677757 677971 430 595911 596125 679130 679344 430 597790 597997 680884 681091 416 599565 599857 682653 682945 586 600066 600290 683154 683378 450 600346 600550 683434 683638 410 601677 602172 684765 685260 992 602198 602427 685286 685515 460 602936 603201 686011 686276 532 603203 603533 686278 686608 662 603535 603864 686610 686939 660 604552 604841 687627 687916 580 604858 605299 687933 688374 884 605327 605564 688402 688639 476 605896 606137 688971 689212 484 606382 606623 689457 689698 484 608712 608917 690927 691132 412 609123 609484 691338 691699 724 611082 611317 693297 693532 472 611646 612108 693861 694323 926 612814 613040 695029 695255 454 617409 617630 699624 699845 444 617729 618063 699944 700278 670 621062 621823 703277 704038 1524 622374 622582 704589 704797 418 622798 623018 705013 705233 442 623967 624342 705996 706371 752 624455 624654 706484 706683 400 625067 625350 707096 707379 568 626744 627217 708773 709246 948 630745 630986 712774 713015 484 631312 631606 713340 713634 590 632574 632966 714602 714994 786 632979 633283 715007 715311 610 634659 634927 716687 716955 538 635077 635401 717105 717429 650 635427 635641 717455 717669 430 636170 636533 718198 718561 728 636536 636836 718564 718864 602 637362 637684 719391 719713 646 638120 638730 720149 720759 1222 638868 639189 720781 721102 644 639566 640314 721479 722227 1498 640316 640593 722229 722506 556 640892 641234 722805 723147 686 642033 642290 723946 724203 516 642891 643209 724804 725122 638 644297 644559 726210 726472 526 644561 644779 726474 726692 438 644973 645331 726886 727244 718 645498 645842 727411 727755 690 647520 647719 729433 729632 400 649072 649283 730985 731196 424 649579 649804 731492 731717 452 649806 650219 731719 732132 828 650628 650837 732541 732750 420 650876 651180 732789 733093 610 651311 651673 733225 733587 726 651675 652010 733589 733924 672 652417 653081 734331 734995 1330 653198 653517 735112 735431 640 653983 654464 735897 736378 964 654466 654803 736380 736717 676 654805 655172 736719 737086 736 655895 656260 737809 738174 732 656433 656770 738347 738684 676 657882 658118 739796 740032 474 658120 658708 740034 740622 1178 659170 659781 741084 741695 1224 660230 660504 742144 742418 550 660926 661239 742841 743154 628 661580 661967 743495 743882 776 662074 662309 743989 744224 472 662383 662585 744298 744500 406 662887 663221 744802 745136 670 664333 664703 746249 746619 742 664705 665241 746621 747157 1074 665243 665466 747159 747382 448 666505 666713 748421 748629 418 667222 667583 749138 749499 724 667591 668054 749507 749970 928 668158 668473 750074 750389 632 669211 669463 751127 751379 506 670619 670859 752535 752775 482 671335 671569 753251 753485 470 671571 671785 753487 753701 430 672021 672412 753937 754328 784 673391 673786 755307 755702 792 673815 674028 755731 755944 428 674051 675151 755968 757068 2202 677843 678132 759761 760050 580 678134 678600 760052 760518 934 678602 678830 760520 760748 458 678850 679052 760768 760970 406 681591 681847 763509 763765 514 682257 682767 764175 764685 1022 684323 684524 766241 766442 404 685476 685705 767394 767623 460 685740 686034 767658 767952 590 688616 688831 769335 769550 432 688851 689134 769570 769853 568 689217 689468 769936 770187 504 689820 690238 770539 770957 838 690471 690733 771190 771452 526 690801 691086 771520 771805 572 691088 691289 771807 772008 404 691978 692324 772697 773043 694 692326 692555 773045 773274 460 692817 693047 773536 773766 462 693822 694270 774541 774989 898 695606 695851 776325 776570 492 695874 696078 776594 776798 410 696270 696632 776991 777353 726 696634 696833 777355 777554 400 697180 697385 777901 778106 412 697522 697742 778243 778463 442 699406 699661 779987 780242 512 700002 700264 780583 780845 526 700584 700890 781165 781471 614 701579 702110 782160 782691 1064 702468 702698 783049 783279 462 702742 702979 783323 783560 476 703130 703371 783711 783952 484 705239 705550 785820 786131 624 706141 706441 786722 787022 602 706486 706753 787067 787334 536 706755 707162 787336 787743 816 707278 707506 787860 788088 458 708561 708778 789143 789360 436 709471 709878 790053 790460 816 710074 710450 790658 791034 754 710452 710910 791036 791494 918 711047 711367 791631 791951 642 711957 712391 792541 792975 870 712452 713063 793036 793647 1224 713548 713768 794132 794352 442 713980 714185 794564 794769 412 714202 714427 794786 795011 452 716622 716854 795515 795747 466 717030 717376 795923 796269 694 717986 718203 796879 797096 436 721034 721515 800021 800502 964 722999 723216 801986 802203 436 725606 725808 804593 804795 406 726092 726414 805079 805401 646 726416 726649 805403 805636 468 729222 729757 808208 808743 1072 730140 730413 809126 809399 548 730620 730936 809606 809922 634 732327 733625 811313 812611 2598 734890 735131 813877 814118 484 740097 740364 819174 819441 536 741528 741757 820605 820834 460 741759 741993 820836 821070 470 742280 743053 821357 822130 1548 743064 743281 822141 822358 436 743941 744174 823018 823251 468 745018 745258 824095 824335 482 746300 746514 825377 825591 430 752906 753108 831982 832184 406 753323 753555 832399 832631 466 753774 754160 832850 833236 774 754162 754523 833238 833599 724 754525 754894 833601 833970 740 754937 755175 834013 834251 478 755177 755538 834253 834614 724 756746 756993 835822 836069 496 757037 757458 836113 836534 844 757532 758196 836608 837272 1330 758228 758536 837304 837612 618 760172 760650 839248 839726 958 760828 761117 839904 840193 580 761269 761501 840345 840577 466 762269 762576 841164 841471 616 763591 763811 842486 842706 442 763954 764370 842849 843265 834 770806 771368 857743 858305 1126 771946 772340 858883 859277 790 773272 773491 860209 860428 440 773648 773855 860585 860792 416 773858 774113 860795 861050 512 774115 774466 861052 861403 704 774969 775208 861906 862145 480 775210 775688 862147 862625 958 776440 776847 863296 863703 816 776849 777074 863705 863930 452 777898 778946 864754 865802 2098 779241 779851 866097 866707 1222 781316 781551 867611 867846 472 781922 782160 868217 868455 478 783078 783319 869373 869614 484 783507 783757 869802 870052 502 784644 785021 870933 871310 756 786648 786870 872945 873167 446 787198 787441 873495 873738 488 788132 788397 874429 874694 532 790206 790422 876503 876719 434 790730 790968 877027 877265 478 792220 792631 878518 878929 824 792781 793021 879079 879319 482 793739 794339 880037 880637 1202 795078 795295 881376 881593 436 795297 795571 881595 881869 550 795678 795934 881976 882232 514 796493 796957 882791 883255 930 799265 799593 885563 885891 658 799810 800198 886108 886496 778 801521 801779 887820 888078 518 802234 802546 888533 888845 626 803451 803675 889750 889974 450 803889 804178 890188 890477 580 804780 805040 891079 891339 522 805498 805795 891704 892001 596 808412 808696 933207 933491 570 812635 812863 937431 937659 458 816179 816405 940974 941200 454 817052 817372 941847 942167 642 817661 818015 942456 942810 710 818373 818620 943168 943415 496 819202 819413 943996 944207 424 821380 821785 946177 946582 812 822333 822592 947130 947389 520 822609 823614 947406 948411 2012 823616 824135 948413 948932 1040 824137 824373 948934 949170 474 826458 826706 951255 951503 498 827275 827629 952072 952426 710 829168 829607 953965 954404 880 829949 830425 954746 955222 954 832197 832434 959067 959304 476 833381 833715 960251 960585 670 834305 834558 961175 961428 508 839012 839216 965895 966099 410 840524 840835 967407 967718 624 841097 841644 967980 968527 1096 842958 843381 969841 970264 848 845147 845349 971886 972088 406 845602 846029 972341 972768 856 846823 847308 973562 974047 972 847608 847920 974347 974659 626 848682 849037 975421 975776 712 849246 849751 975985 976490 1012 849867 850072 976606 976811 412 850999 851479 977738 978218 962 851481 851716 978220 978455 472 852048 852287 978787 979026 480 852947 853168 979686 979907 444 854794 855005 981532 981743 424 855107 855585 981846 982324 958 855680 855976 982419 982715 594 857016 857221 983682 983887 412 857661 858292 984327 984958 1264 858469 858722 985136 985389 508 858802 859015 985469 985682 428 860912 861142 987579 987809 462 861749 861983 988415 988649 470 862759 862982 989425 989648 448 865489 865766 992258 992535 556 865768 866004 992537 992773 474 866423 866794 993192 993563 744 867315 867529 994084 994298 430 867711 867937 994480 994706 454 868317 868769 995086 995538 906 868960 869172 995729 995941 426 869174 869379 995943 996148 412 869581 869898 996350 996667 636 870996 871383 997765 998152 776 873497 873732 1000266 1000501 472 873734 874035 1000503 1000804 604 874493 874786 1001262 1001555 588 874818 875095 1001587 1001864 556 876323 876735 1004046 1004458 826 877193 877408 1004916 1005131 432 877453 877976 1005176 1005699 1048 878102 878316 1005825 1006039 430 878360 878829 1006083 1006552 940 878948 879177 1006671 1006900 460 879179 879387 1006902 1007110 418 879419 879669 1007142 1007392 502 879671 879890 1007394 1007613 440 880033 880370 1007755 1008092 676 880495 880731 1008217 1008453 474 881337 881536 1009059 1009258 400 881772 882057 1009494 1009779 572 882059 882304 1009781 1010026 492 882494 882787 1010216 1010509 588 882789 883106 1010511 1010828 636 884251 884485 1011973 1012207 470 885244 885697 1012966 1013419 908 886891 887165 1014613 1014887 550 887198 887424 1014920 1015146 454 887729 888012 1015451 1015734 568 888014 888372 1015736 1016094 718 888374 888603 1016096 1016325 460 888605 889068 1016327 1016790 928 889734 889950 1017457 1017673 434 890478 890689 1018201 1018412 424 891140 891620 1018863 1019343 962 891622 891884 1019345 1019607 526 892279 892609 1020002 1020332 662 895107 895421 1022830 1023144 630 895956 896269 1023679 1023992 628 896468 896727 1024191 1024450 520 897283 897497 1025006 1025220 430 897520 897791 1025243 1025514 544 901363 901604 1032396 1032637 484 902056 902308 1033089 1033341 506 902490 902737 1033523 1033770 496 902739 903182 1033772 1034215 888 904186 904401 1037735 1037950 432 906687 906905 1040236 1040454 438 910222 910490 1043771 1044039 538 912033 912304 1045582 1045853 544 912852 913185 1046401 1046734 668 913841 914066 1047390 1047615 452 914986 915276 1048498 1048788 582 915473 915822 1048985 1049334 700 916829 917061 1050341 1050573 466 917267 917535 1050779 1051047 538 917540 917745 1051052 1051257 412 917978 918269 1051490 1051781 584 918885 919119 1052397 1052631 470 919198 919517 1052710 1053029 640 919680 919897 1053192 1053409 436 920748 920974 1054260 1054486 454 921171 921406 1054683 1054918 472 921408 921951 1054920 1055463 1088 921953 923120 1055465 1056632 2336 923158 923387 1056670 1056899 460 923950 924230 1057462 1057742 562 925370 926038 1146447 1147115 1338 926040 926242 1147117 1147319 406 926275 927044 1147352 1148121 1540 927564 927936 1148641 1149013 746 928215 928771 1149292 1149848 1114 929811 930058 1150888 1151135 496 930060 930372 1151137 1151449 626 930878 931200 1151955 1152277 646 931202 931652 1152279 1152729 902 931654 932145 1152731 1153222 984 932147 932461 1153224 1153538 630 932463 932760 1153540 1153837 596 932762 933125 1153839 1154202 728 933127 933504 1154204 1154581 756 933506 933899 1154583 1154976 788 934265 934466 1155342 1155543 404 934900 935127 1156016 1156243 456 935833 936177 1156949 1157293 690 936449 937304 1157561 1158416 1712 937477 937691 1158589 1158803 430 937915 939255 1159027 1160367 2682 939544 939872 1160656 1160984 658 940110 940343 1161222 1161455 468 940345 940662 1161457 1161774 636 940818 941235 1161930 1162347 836 941576 941796 1162688 1162908 442 941798 942102 1162910 1163214 610 942182 942703 1163294 1163815 1044 942837 943313 1163949 1164425 954 944568 944819 1165681 1165932 504 947729 947977 1168843 1169091 498 949842 950418 1169485 1170061 1154 950612 950835 1170255 1170478 448 950843 951066 1170486 1170709 448 951068 951282 1170711 1170925 430 951527 951807 1171170 1171450 562 951809 952170 1171452 1171813 724 952556 952839 1172199 1172482 568 953456 954057 1173099 1173700 1204 954464 954780 1174107 1174423 634 954788 955050 1174431 1174693 526 955595 955818 1175238 1175461 448 955820 956426 1175463 1176069 1214 956495 956920 1176138 1176563 852 956922 957317 1176565 1176960 792 957533 957833 1177176 1177476 602 957895 958245 1177538 1177888 702 958403 958989 1178046 1178632 1174 959615 959829 1179258 1179472 430 960300 960526 1179943 1180169 454 960846 961677 1180489 1181320 1664 961679 962145 1181322 1181788 934 962147 962362 1181790 1182005 432 962364 962754 1182007 1182397 782 962919 963340 1182562 1182983 844 965709 965910 1185351 1185552 404 966533 966747 1186175 1186389 430 967358 967892 1187000 1187534 1070 967894 968156 1187536 1187798 526 969047 969265 1188689 1188907 438 969408 969720 1189050 1189362 626 970335 970540 1189977 1190182 412 970794 971099 1190436 1190741 612 971310 971536 1190952 1191178 454 971538 971891 1191180 1191533 708 972562 972883 1192204 1192525 644 972954 973162 1192596 1192804 418 973976 974202 1193618 1193844 454 974738 974941 1194380 1194583 408 975378 975600 1195020 1195242 446 975602 975903 1195244 1195545 604 977765 977979 1197407 1197621 430 978464 978717 1198106 1198359 508 979620 979833 1199262 1199475 428 979981 980296 1199623 1199938 632 980460 980813 1200102 1200455 708 981037 981299 1200679 1200941 526 981721 982168 1201363 1201810 896 982352 982589 1201994 1202231 476 983103 983419 1202745 1203061 634 983832 984346 1203303 1203817 1030 984627 985057 1204098 1204528 862 985059 985398 1204530 1204869 680 985636 986069 1205107 1205540 868 987711 987927 1207182 1207398 434 987929 988141 1207400 1207612 426 988170 988513 1207641 1207984 688 988675 988984 1208146 1208455 620 989214 989491 1208685 1208962 556 989493 989995 1208964 1209466 1006 990318 990643 1209789 1210114 652 993345 993771 1212816 1213242 854 996936 997312 1216408 1216784 754 999032 999400 1218503 1218871 738 999491 999719 1218962 1219190 458 1002117 1002693 1221589 1222165 1154 1002826 1003134 1222298 1222606 618 1003382 1003613 1222854 1223085 464 1003817 1004072 1223288 1223543 512 1004749 1005070 1224220 1224541 644 1005285 1005529 1224756 1225000 490 1005582 1005955 1225053 1225426 748 1006031 1006261 1225502 1225732 462 1006952 1007367 1226423 1226838 832 1007987 1008250 1227458 1227721 528 1008824 1009376 1228295 1228847 1106 1009477 1009703 1228948 1229174 454 1011376 1011728 1230847 1231199 706 1012105 1012725 1231576 1232196 1242 1013177 1013397 1232648 1232868 442 1013621 1013877 1233092 1233348 514 1013960 1014248 1233431 1233719 578 1014406 1014739 1233877 1234210 668 1014741 1016713 1234212 1236184 3946 1016737 1017056 1236208 1236527 640 1017058 1017762 1236529 1237233 1410 1017764 1018240 1237235 1237711 954 1018242 1018915 1237713 1238386 1348 1018917 1019555 1238388 1239026 1278 1019679 1020273 1239150 1239744 1190 1020275 1020545 1239746 1240016 542 1020547 1021341 1240018 1240812 1590 1021343 1021732 1240814 1241203 780 1021734 1022021 1241205 1241492 576 1022023 1022522 1241494 1241993 1000 1022524 1023481 1241995 1242952 1916 1023483 1023904 1242954 1243375 844 1024077 1024471 1243548 1243942 790 1024473 1024744 1243944 1244215 544 1024767 1025083 1244238 1244554 634 1025085 1025507 1244556 1244978 846 1025655 1025859 1245126 1245330 410 1025861 1026359 1245332 1245830 998 1026361 1027147 1245832 1246618 1574 1027783 1028072 1247254 1247543 580 1028797 1029104 1248268 1248575 616 1029106 1029377 1248577 1248848 544 1029451 1029767 1248922 1249238 634 1031117 1031346 1295831 1296060 460 1031348 1031584 1296062 1296298 474 1031592 1031839 1296306 1296553 496 1033953 1034196 1298667 1298910 488 1036286 1036497 1301000 1301211 424 1036499 1036788 1301213 1301502 580 1038009 1038612 1302723 1303326 1208 1039130 1039329 1303844 1304043 400 1040143 1040443 1304863 1305163 602 1041571 1041830 1306296 1306555 520 1042342 1042577 1307067 1307302 472 1043203 1043499 1307928 1308224 594 1043609 1043960 1308334 1308685 704 1043989 1044293 1308714 1309018 610 1044784 1045214 1309509 1309939 862 1045810 1046177 1310535 1310902 736 1046494 1046894 1311219 1311619 802 1047786 1048035 1312511 1312760 500 1048403 1048626 1313128 1313351 448 1050249 1050533 1314197 1314481 570 1050535 1050855 1314483 1314803 642 1051613 1051825 1315560 1315772 426 1053310 1053513 1317257 1317460 408 1055016 1055277 1318963 1319224 524 1055614 1055820 1319561 1319767 414 1056041 1056336 1319988 1320283 592 1062010 1062268 1325959 1326217 518 1062270 1062472 1326219 1326421 406 1062766 1063132 1326715 1327081 734 1065120 1065522 1329067 1329469 806 1066521 1066728 1330468 1330675 416 1068256 1068461 1393625 1393830 412 1070073 1070289 1395442 1395658 434 1073596 1073868 1398965 1399237 546 1075019 1075230 1400388 1400599 424 1078198 1078642 1403567 1404011 890 1080889 1081661 1408390 1409162 1546 1081663 1081907 1409164 1409408 490 1083213 1083564 1410714 1411065 704 1084147 1084615 1411647 1412115 938 1084617 1085220 1412117 1412720 1208 1085337 1086089 1412837 1413589 1506 1086091 1086892 1413591 1414392 1604 1086894 1088334 1414394 1415834 2882 1088336 1088973 1415836 1416473 1276 1088975 1089198 1416475 1416698 448 1089200 1090692 1416700 1418192 2986 1090694 1091324 1418194 1418824 1262 1091338 1091738 1418838 1419238 802 1091740 1092322 1419240 1419822 1166 1092582 1092822 1420082 1420322 482 1093020 1093334 1420520 1420834 630 1094725 1094939 1452708 1452922 430 1095905 1096124 1453888 1454107 440 1097354 1097647 1542356 1542649 588 1098625 1098917 1543627 1543919 586 1099210 1099412 1544212 1544414 406 1099457 1099684 1544459 1544686 456 1100764 1101034 1545766 1546036 542 1101045 1101339 1546047 1546341 590 1101674 1101989 1546676 1546991 632 1102092 1102363 1547094 1547365 544 1102365 1102618 1547367 1547620 508 1103104 1103471 1548106 1548473 736 1103473 1103754 1548475 1548756 564 1104258 1104697 1549263 1549702 880 1104825 1105118 1549830 1550123 588 1105264 1105635 1550269 1550640 744 1107124 1107413 1552129 1552418 580 1108271 1108657 1553275 1553661 774 1108681 1108924 1553685 1553928 488 1109346 1109632 1554350 1554636 574 1109634 1109956 1554638 1554960 646 1110421 1110740 1555425 1555744 640 1113150 1113674 1558154 1558678 1050 1114033 1114253 1559037 1559257 442 1114604 1115018 1559608 1560022 830 1115539 1116064 1560543 1561068 1052 1117589 1117965 1562593 1562969 754 1118292 1118588 1563296 1563592 594 1118709 1118950 1563713 1563954 484 1119159 1119388 1564163 1564392 460 1119723 1119947 1564727 1564951 450 1119949 1120261 1564953 1565265 626 1120588 1120794 1565595 1565801 414 1122359 1122620 1567366 1567627 524 1122622 1123084 1567629 1568091 926 1123086 1123315 1568093 1568322 460 1123562 1123837 1568569 1568844 552 1124397 1124875 1569404 1569882 958 1124877 1125079 1569884 1570086 406 1125081 1125401 1570088 1570408 642 1126416 1126638 1571423 1571645 446 1126972 1127504 1571979 1572511 1066 1130129 1130410 1575136 1575417 564 1130432 1130769 1575439 1575776 676 1130915 1131189 1575922 1576196 550 1131307 1131584 1576314 1576591 556 1131710 1132007 1576717 1577014 596 1132639 1132844 1577643 1577848 412 1133931 1134198 1578901 1579168 536 1134305 1134543 1579275 1579513 478 1134765 1135042 1579735 1580012 556 1135209 1135533 1580179 1580503 650 1135535 1135746 1580505 1580716 424 1138152 1138351 1583122 1583321 400 1141656 1141899 1586625 1586868 488 1141974 1142422 1586943 1587391 898 1142424 1142719 1587393 1587688 592 1142772 1144076 1587741 1589045 2610 1144231 1144610 1589200 1589579 760 1145893 1146095 1590851 1591053 406 1146097 1146768 1591055 1591726 1344 1147425 1147659 1592383 1592617 470 1147661 1148426 1592619 1593384 1532 1148428 1148768 1593386 1593726 682 1148860 1149134 1593818 1594092 550 1149679 1149887 1594637 1594845 418 1150045 1150495 1595003 1595453 902 1150497 1150934 1595455 1595892 876 1150936 1151627 1595894 1596585 1384 1151758 1152008 1596716 1596966 502 1152010 1152308 1596968 1597266 598 1154189 1154470 1599147 1599428 564 1154963 1155234 1599921 1600192 544 1155446 1155681 1600404 1600639 472 1155893 1156144 1600851 1601102 504 1156829 1157332 1601788 1602291 1008 1157334 1158035 1602293 1602994 1404 1158102 1158403 1603061 1603362 604 1158405 1158624 1603364 1603583 440 1158834 1159823 1603793 1604782 1980 1160058 1160311 1605017 1605270 508 1160313 1160669 1605272 1605628 714 1161060 1161369 1606039 1606348 620 1161617 1162284 1606596 1607263 1336 1162328 1162545 1607307 1607524 436 1162766 1163050 1607745 1608029 570 1163052 1163417 1608031 1608396 732 1164290 1164504 1609269 1609483 430 1165119 1165326 1610099 1610306 416 1166429 1166655 1611409 1611635 454 1167097 1167326 1612094 1612323 460 1167728 1168624 1612725 1613621 1794 1168633 1168993 1613631 1613991 722 1169409 1169754 1614407 1614752 692 1170137 1170390 1615135 1615388 508 1170542 1170789 1615540 1615787 496 1170869 1171139 1615867 1616137 542 1171339 1171569 1616337 1616567 462 1174014 1174222 1619012 1619220 418 1174295 1174890 1619293 1619888 1192 1177067 1177338 1622065 1622336 544 1177649 1177945 1622647 1622943 594 1178544 1179094 1623542 1624092 1102 1181855 1182215 1625567 1625927 722 1182373 1182719 1626085 1626431 694 1183589 1184030 1674604 1675045 884 1184592 1185541 1675607 1676556 1900 1186128 1186504 1677143 1677519 754 1187317 1187531 1678332 1678546 430 1188196 1188482 1694671 1694957 574 1188520 1189014 1694995 1695489 990 1190190 1190410 1696665 1696885 442 1190490 1190704 1696965 1697179 430 1191000 1191427 1697475 1697902 856 1191581 1191893 1698056 1698368 626 1192367 1192596 1698842 1699071 460 1192607 1193105 1699082 1699580 998 1194097 1194607 1700572 1701082 1022 1223501 1223728 1753170 1753397 456 1223730 1224097 1753399 1753766 736 1224276 1224584 1753945 1754253 618 1224724 1224971 1754393 1754640 496 1225028 1225507 1754697 1755176 960 1225637 1225893 1755306 1755562 514 1226447 1226673 1756116 1756342 454 1226859 1227359 1756528 1757028 1002 1227866 1228311 1757535 1757980 892 1229087 1229304 1758756 1758973 436 1230079 1230469 1759748 1760138 782 1230471 1230676 1760140 1760345 412 1232248 1232471 1761917 1762140 448 1232606 1232814 1762275 1762483 418 1232921 1233214 1762590 1762883 588 1233216 1233441 1762885 1763110 452 1234072 1234389 1763742 1764059 636 1234682 1234894 1764352 1764564 426 1235295 1235605 1764965 1765275 622 1235979 1236510 1765649 1766180 1064 1236747 1237304 1766450 1767007 1116 1237399 1237736 1767102 1767439 676 1237918 1238175 1767621 1767878 516 1239867 1240102 1769576 1769811 472 1242327 1242682 1772037 1772392 712 1243274 1243615 1774297 1774638 684 1243647 1243904 1774670 1774927 516 1244959 1245314 1782097 1782452 712 1247120 1247325 1784245 1784450 412 1248014 1248231 1785139 1785356 436 1249651 1250407 1786776 1787532 1514 1253751 1253992 1787740 1787981 484 1254762 1254976 1788751 1788965 430 1255802 1256209 1789866 1790273 816 1256241 1256512 1790305 1790576 544 1256522 1256851 1790586 1790915 660 1257015 1257237 1791079 1791301 446 1257611 1257936 1791675 1792000 652 1257938 1258387 1792002 1792451 900 1258476 1258767 1792540 1792831 584 1259433 1259722 1793497 1793786 580 1259787 1260338 1793851 1794402 1104 1260493 1260912 1794557 1794976 840 1261084 1261616 1795148 1795680 1066 1261948 1262344 1796012 1796408 794 1262346 1262775 1796410 1796839 860 1263548 1264381 1797612 1798445 1668 1264383 1264604 1798447 1798668 444 1264789 1265051 1798853 1799115 526 1265092 1265699 1799156 1799763 1216 1265755 1266058 1799819 1800122 608 1266060 1266295 1800124 1800359 472 1266477 1266715 1800541 1800779 478 1266773 1267176 1800837 1801240 808 1267516 1267889 1801580 1801953 748 1268797 1269100 1802861 1803164 608 1269947 1270177 1804001 1804231 462 1270815 1271177 1804869 1805231 726 1271365 1271578 1805419 1805632 428 1272700 1272973 1806757 1807030 548 1274609 1274904 1808667 1808962 592 1274906 1275166 1808964 1809224 522 1275375 1275709 1809433 1809767 670 1275986 1276261 1810044 1810319 552 1276656 1276982 1810714 1811040 654 1277047 1277361 1811105 1811419 630 1278013 1278290 1812071 1812348 556 1278921 1279555 1812856 1813490 1270 1280043 1280875 1813978 1814810 1666 1281324 1281649 1815259 1815584 652 1281822 1282332 1815757 1816267 1022 1282500 1282720 1816435 1816655 442 1283051 1283499 1816986 1817434 898 1284041 1284605 1817976 1818540 1130 1285008 1285243 1818943 1819178 472 1286759 1287018 1820516 1820775 520 1287649 1287858 1821406 1821615 420 1288191 1288609 1821948 1822366 838 1289330 1289537 1823087 1823294 416 1289539 1289987 1823296 1823744 898 1290220 1290510 1823977 1824267 582 1290604 1290974 1824361 1824731 742 1291441 1291694 1825198 1825451 508 1291924 1292318 1825681 1826075 790 1292658 1292978 1826414 1826734 642 1292980 1293260 1826736 1827016 562 1295001 1295224 1827756 1827979 448 1295226 1295459 1827981 1828214 468 1295566 1296074 1828321 1828829 1018 1296256 1296491 1829011 1829246 472 1296988 1297431 1829743 1830186 888 1297629 1297831 1830384 1830586 406 1298187 1298500 1830942 1831255 628 1299091 1299323 1831847 1832079 466 1300304 1300574 1833060 1833330 542 1300836 1301049 1833592 1833805 428 1301774 1301978 1834530 1834734 410 1304012 1304214 1836768 1836970 406 1304216 1304712 1836972 1837468 994 1306115 1306392 1838871 1839148 556 1306394 1306767 1839150 1839523 748 1307080 1307422 1839837 1840179 686 1307526 1307920 1840283 1840677 790 1308592 1308957 1841350 1841715 732 1309002 1309261 1841761 1842020 520 1309694 1309933 1842453 1842692 480 1309959 1310355 1842718 1843114 794 1310357 1310661 1843116 1843420 610 1310861 1311158 1843620 1843917 596 1311220 1311819 1843979 1844578 1200 1311945 1312215 1844704 1844974 542 1654122 1654379 2273590 2273847 516 1654543 1654844 2274011 2274312 604 1655023 1655285 2274491 2274753 526 1656596 1656807 2276064 2276275 424 1656920 1657151 2276388 2276619 464 1657520 1657818 2276988 2277286 598 1658870 1659291 2278338 2278759 844 1659463 1659737 2278931 2279205 550 1659803 1660033 2279271 2279501 462 1660035 1660281 2279503 2279749 494 1660433 1660653 2279901 2280121 442 1661139 1661651 2280607 2281119 1026 1662613 1662816 2282081 2282284 408 1663623 1663962 2283090 2283429 680 1663964 1664212 2283431 2283679 498 1664890 1665423 2284357 2284890 1068 1666224 1666464 2285691 2285931 482 1666466 1666766 2285933 2286233 602 1666768 1667146 2286235 2286613 758 1667359 1667674 2286826 2287141 632 1668458 1668758 2287925 2288225 602 1668760 1669020 2288227 2288487 522 1669621 1669831 2289088 2289298 422 1670319 1670539 2289786 2290006 442 1670541 1671010 2290008 2290477 940 1672979 1673255 2292446 2292722 554 1674007 1674215 2293474 2293682 418 1674316 1674594 2293783 2294061 558 1674995 1675266 2294462 2294733 544 1675268 1675475 2294735 2294942 416 1675523 1675836 2294990 2295303 628 1675988 1676495 2295455 2295962 1016 1676681 1677165 2296148 2296632 970 1677410 1678123 2296877 2297590 1428 1678591 1678853 2298058 2298320 526 1678873 1679604 2298340 2299071 1464 1679606 1680258 2299073 2299725 1306 1681229 1681488 2300696 2300955 520 1681529 1681825 2300996 2301292 594 1681904 1682202 2301371 2301669 598 1682552 1682772 2302020 2302240 442 1683086 1683345 2302554 2302813 520 1683347 1684023 2302815 2303491 1354 1684690 1684966 2304158 2304434 554 1685041 1685446 2304509 2304914 812 1685588 1686309 2305056 2305777 1444 1686565 1686909 2306033 2306377 690 1686911 1687212 2306379 2306680 604 1687553 1687752 2307021 2307220 400 1687757 1688014 2307225 2307482 516 1688577 1688776 2308045 2308244 400 1689575 1689781 2308862 2309068 414 1690810 1691083 2310096 2310369 548 1691787 1691987 2311073 2311273 402 1691989 1692234 2311275 2311520 492 1692392 1692684 2311678 2311970 586 1693703 1693903 2312991 2313191 402 1694957 1695173 2314245 2314461 434 1695543 1696130 2314839 2315426 1176 1696602 1696807 2315898 2316103 412 1697022 1697225 2316318 2316521 408 1697227 1697499 2316523 2316795 546 1698776 1699026 2318072 2318322 502 1700150 1700479 2319446 2319775 660 1701538 1701767 2320836 2321065 460 1702836 1703180 2322135 2322479 690 1703690 1703890 2322989 2323189 402 1703892 1704092 2323191 2323391 402 1704678 1705054 2323977 2324353 754 1705074 1705300 2324373 2324599 454 1706333 1706594 2325632 2325893 524 1707144 1707376 2326443 2326675 466 1707660 1707933 2326959 2327232 548 1707935 1708357 2327234 2327656 846 1708359 1708684 2327658 2327983 652 1708950 1709206 2328249 2328505 514 1709208 1709492 2328507 2328791 570 1710050 1710352 2329349 2329651 606 1710738 1711294 2330037 2330593 1114 1711302 1711714 2330601 2331013 826 1712016 1712422 2331315 2331721 814 1713608 1714003 2332907 2333302 792 1714161 1714558 2333460 2333857 796 1714647 1714930 2333946 2334229 568 1714932 1715271 2334231 2334570 680 1715774 1716050 2335074 2335350 554 1716622 1716821 2335922 2336121 400 1717659 1717866 2336958 2337165 416 1718229 1718448 2337529 2337748 440 1718507 1718990 2337807 2338290 968 1719135 1719543 2338435 2338843 818 1719809 1720020 2339109 2339320 424 1720375 1720610 2339675 2339910 472 1720675 1720958 2339975 2340258 568 1722052 1722498 2341352 2341798 894 1722659 1722867 2341959 2342167 418 1723992 1724230 2343292 2343530 478 1725414 1725724 2344714 2345024 622 1725897 1726101 2345197 2345401 410 1726742 1726941 2346042 2346241 400 1729774 1730007 2349074 2349307 468 1730296 1730513 2349596 2349813 436 1730624 1730872 2349924 2350172 498 1731031 1731245 2350331 2350545 430 1731451 1731651 2350751 2350951 402 1731943 1732266 2351243 2351566 648 1732443 1732738 2351744 2352039 592 1733244 1733468 2352545 2352769 450 1733494 1733726 2352795 2353027 466 1734492 1735508 2353777 2354793 2034 1735510 1735985 2354795 2355270 952 1736821 1737200 2356106 2356485 760 1737301 1737638 2356586 2356923 676 1737679 1738130 2356964 2357415 904 1738573 1738859 2357858 2358144 574 1739051 1739291 2358336 2358576 482 1739293 1739737 2358578 2359022 890 1739937 1740185 2359222 2359470 498 1742227 1742471 2361514 2361758 490 1743603 1743817 2362890 2363104 430 1744113 1744317 2363400 2363604 410 1744319 1744621 2363606 2363908 606 1745169 1745385 2364456 2364672 434 1746131 1746385 2365418 2365672 510 1746573 1746895 2365860 2366182 646 1747337 1747568 2366624 2366855 464 1748232 1748460 2367519 2367747 458 1748853 1749207 2368140 2368494 710 1749248 1749452 2368535 2368739 410 1749626 1749828 2368913 2369115 406 1750229 1750511 2369516 2369798 566 1750757 1750965 2370044 2370252 418 1751171 1751397 2370458 2370684 454 1751450 1751849 2370737 2371136 800 1752037 1752332 2371324 2371619 592 1752334 1752630 2371621 2371917 594 1752938 1753287 2372226 2372575 700 1753361 1754001 2372649 2373289 1282 1754288 1754853 2373576 2374141 1132 1754978 1755727 2374266 2375015 1500 1757894 1758099 2377181 2377386 412 1758817 1759018 2378104 2378305 404 1759643 1760001 2378930 2379288 718 1760024 1760307 2379311 2379594 568 1760888 1761168 2380175 2380455 562 1761426 1761639 2380713 2380926 428 1761758 1762277 2381045 2381564 1040 1763063 1763299 2382351 2382587 474 1763817 1764167 2383105 2383455 702 1764169 1764674 2383457 2383962 1012 1764787 1765292 2384075 2384580 1012 1766897 1767545 2386185 2386833 1298 1768193 1768741 2387481 2388029 1098 1769209 1770005 2388497 2389293 1594 1770027 1771061 2389315 2390349 2070 1776510 1776832 2395800 2396122 646 1777391 1777779 2396686 2397074 778 1778340 1778576 2397635 2397871 474 1779198 1779491 2398493 2398786 588 1779895 1780141 2399190 2399436 494 1780820 1781052 2400115 2400347 466 1781990 1782237 2401285 2401532 496 1782239 1782454 2401534 2401749 432 1783349 1783605 2402644 2402900 514 1784312 1784529 2403607 2403824 436 1784531 1785024 2403826 2404319 988 1785293 1785664 2404588 2404959 744 1785987 1786594 2405282 2405889 1216 1786596 1786808 2405891 2406103 426 1786974 1787396 2406269 2406691 846 1787564 1788076 2406859 2407371 1026 1789601 1789856 2408896 2409151 512 1789985 1790241 2409280 2409536 514 1790516 1790720 2409811 2410015 410 1790722 1790924 2410017 2410219 406 1790932 1791157 2410227 2410452 452 1791358 1791557 2410653 2410852 400 1792805 1793042 2412100 2412337 476 1793280 1793651 2412576 2412947 744 1793653 1794317 2412949 2413613 1330 1794961 1795189 2414257 2414485 458 1795191 1795402 2414487 2414698 424 1795903 1796127 2415199 2415423 450 1796193 1796481 2415489 2415777 578 1796483 1796797 2415779 2416093 630 1797149 1797739 2416444 2417034 1182 1797741 1798777 2417036 2418072 2074 1799635 1799909 2418930 2419204 550 1799911 1800548 2419206 2419843 1276 1800565 1800878 2419860 2420173 628 1803089 1803365 2422385 2422661 554 1803598 1803884 2422894 2423180 574 1804006 1804223 2423302 2423519 436 1804225 1804865 2423521 2424161 1282 1805161 1805519 2424457 2424815 718 1805573 1805940 2424869 2425236 736 1805942 1806186 2425238 2425482 490 1807310 1807896 2426606 2427192 1174 1808117 1808409 2427413 2427705 586 1808848 1809156 2428144 2428452 618 1809717 1809924 2429013 2429220 416 1810721 1811386 2430016 2430681 1332 1811496 1811808 2430791 2431103 626 1812044 1812254 2431339 2431549 422 1813444 1813751 2432739 2433046 616 1815933 1816168 2435026 2435261 472 1816170 1816385 2435263 2435478 432 1816567 1816846 2435661 2435940 560 1816883 1817128 2435977 2436222 492 1817130 1817717 2436224 2436811 1176 1818438 1818817 2437532 2437911 760 1819078 1819806 2438172 2438900 1458 1820086 1820289 2439181 2439384 408 1820347 1820650 2439442 2439745 608 1821080 1821318 2440175 2440413 478 1821799 1822009 2440894 2441104 422 1822925 1823352 2442020 2442447 856 1823455 1823845 2442550 2442940 782 1825441 1825682 2444536 2444777 484 1828148 1828460 2447243 2447555 626 1830179 1830396 2449274 2449491 436 1831039 1831362 2450134 2450457 648 1833600 1833973 2452695 2453068 748 1835176 1835437 2454271 2454532 524 1837316 1837627 2456411 2456722 624 1839377 1839643 2458472 2458738 534 1840093 1840608 2459188 2459703 1032 1840832 1841088 2459927 2460183 514 1841369 1841757 2460464 2460852 778 1842024 1842384 2461119 2461479 722 1842790 1843015 2461885 2462110 452 1844112 1844407 2463207 2463502 592 1844713 1844993 2463808 2464088 562 1845727 1845938 2464822 2465033 424 1845940 1846159 2465035 2465254 440 1847856 1848154 2466951 2467249 598 1848836 1849199 2468722 2469085 728 1849495 1849718 2469381 2469604 448 1850211 1850541 2470097 2470427 662 1850732 1850934 2470618 2470820 406 1850993 1851408 2470879 2471294 832 1852529 1853020 2473729 2474220 984 1853028 1853379 2474228 2474579 704 1853852 1854132 2475052 2475332 562 1854784 1855075 2475969 2476260 584 1856078 1856343 2477263 2477528 532 1856413 1856625 2477598 2477810 426 1856711 1857112 2477896 2478297 804 1857558 1858246 2478743 2479431 1378 1858248 1858551 2479433 2479736 608 1858553 1858836 2479738 2480021 568 1860370 1861509 2481555 2482694 2280 1861511 1861782 2482696 2482967 544 1863334 1863610 2484522 2484798 554 1863926 1864222 2485114 2485410 594 1864224 1864732 2485412 2485920 1018 1864734 1865340 2485922 2486528 1214 1865342 1865574 2486530 2486762 466 1866380 1866624 2487568 2487812 490 1866680 1866887 2487868 2488075 416 1867227 1867483 2488415 2488671 514 1867593 1867912 2488781 2489100 640 1868545 1868988 2489733 2490176 888 1869317 1869768 2490505 2490956 904 1869885 1870338 2491073 2491526 908 1870392 1870609 2491580 2491797 436 1870868 1871067 2492056 2492255 400 1871297 1871667 2492485 2492855 742 1871669 1872012 2492857 2493200 688 1872212 1872466 2493400 2493654 510 1873361 1873609 2494549 2494797 498 1874584 1874784 2495772 2495972 402 1875329 1875572 2496517 2496760 488 1876026 1876318 2497214 2497506 586 1877472 1877905 2498659 2499092 868 1878716 1879194 2499903 2500381 958 1879555 1880176 2500742 2501363 1244 1880178 1880422 2501365 2501609 490 1882198 1882517 2503610 2503929 640 1882790 1883016 2504202 2504428 454 1883198 1883502 2504610 2504914 610 1883504 1883748 2504916 2505160 490 1885188 1885465 2506601 2506878 556 1885990 1886200 2507403 2507613 422 1887393 1887625 2508806 2509038 466 1887654 1888035 2509067 2509448 764 1888341 1888556 2509754 2509969 432 1889085 1889473 2510498 2510886 778 1890096 1890394 2511509 2511807 598 1890396 1890615 2511809 2512028 440 1891089 1891371 2512502 2512784 566 1892049 1892388 2513462 2513801 680 1892542 1892861 2513955 2514274 640 1893008 1893345 2514421 2514758 676 1893700 1893987 2515113 2515400 576 1894688 1895028 2516101 2516441 682 1895030 1895434 2516443 2516847 810 1895450 1895675 2516863 2517088 452 1895677 1896174 2517090 2517587 996 1896582 1896861 2517995 2518274 560 1897197 1897669 2518610 2519082 946 1897725 1898386 2519138 2519799 1324 1898635 1898897 2520048 2520310 526 1898899 1899782 2520312 2521195 1768 1900050 1900363 2521465 2521778 628 1901084 1901334 2522499 2522749 502 1901591 1902258 2523006 2523673 1336 1902260 1903250 2523675 2524665 1982 1903706 1903916 2525122 2525332 422 1904451 1904683 2525867 2526099 466 1905090 1905374 2526506 2526790 570 1905394 1905787 2526810 2527203 788 1906033 1906301 2527448 2527716 538 1906477 1906764 2527892 2528179 576 1907251 1907489 2528668 2528906 478 1907826 1908287 2529243 2529704 924 1909427 1909630 2530844 2531047 408 1909823 1910092 2531240 2531509 540 1910094 1910722 2531511 2532139 1258 1911155 1911438 2532572 2532855 568 1911854 1912301 2533271 2533718 896 1912475 1912707 2533892 2534124 466 1912709 1913020 2534126 2534437 624 1913418 1913755 2534835 2535172 676 1914182 1914433 2535599 2535850 504 1914518 1914724 2535935 2536141 414 1915040 1915634 2536457 2537051 1190 1915716 1915918 2537133 2537335 406 1916259 1916497 2537676 2537914 478 1919902 1920259 2541320 2541677 716 1920774 1921293 2542192 2542711 1040 1921956 1922185 2543374 2543603 460 1922734 1923082 2544152 2544500 698 1923603 1923893 2545021 2545311 582 1924022 1924222 2545440 2545640 402 1924256 1924465 2545674 2545883 420 1925121 1925374 2546539 2546792 508 1925790 1926091 2547208 2547509 604 1928392 1928797 2549811 2550216 812 1928836 1929340 2550255 2550759 1010 1929708 1930092 2551127 2551511 770 1930094 1930449 2551513 2551868 712 1930451 1930783 2551870 2552202 666 1931042 1931502 2552461 2552921 922 1931504 1931847 2552923 2553266 688 1931852 1932171 2553271 2553590 640 1932814 1933017 2554233 2554436 408 1933019 1933251 2554438 2554670 466 1933394 1934088 2554813 2555507 1390 1934090 1934303 2555509 2555722 428 1934591 1934791 2556010 2556210 402 1935284 1935483 2556703 2556902 400 1935593 1936007 2557012 2557426 830 1936009 1936520 2557428 2557939 1024 1936878 1937808 2558297 2559227 1862 1937810 1938056 2559229 2559475 494 1938058 1938409 2559477 2559828 704 1938547 1938764 2559966 2560183 436 1939078 1939529 2560497 2560948 904 1939546 1939765 2560965 2561184 440 1939957 1940251 2561376 2561670 590 1940740 1940996 2562159 2562415 514 1942544 1943027 2564062 2564545 968 1943029 1943304 2564547 2564822 552 1943422 1943789 2564940 2565307 736 1943791 1944077 2565309 2565595 574 1944316 1944535 2565834 2566053 440 1944537 1944809 2566055 2566327 546 1945299 1945757 2566817 2567275 918 1946023 1946328 2567541 2567846 612 1946330 1946559 2567848 2568077 460 1946564 1946799 2568082 2568317 472 1946827 1947162 2568345 2568680 672 1948177 1948773 2569695 2570291 1194 1949888 1950127 2571406 2571645 480 1950394 1950831 2571912 2572349 876 1950833 1951383 2572351 2572901 1102 1951403 1952063 2572921 2573581 1322 1953790 1954060 2575308 2575578 542 1954270 1954649 2575788 2576167 760 1954951 1955256 2576469 2576774 612 1956632 1956895 2578153 2578416 528 1957021 1957247 2578542 2578768 454 1957920 1958470 2579441 2579991 1102 1958472 1958686 2579993 2580207 430 1959135 1959596 2580656 2581117 924 1961538 1961756 2583059 2583277 438 1961794 1962031 2583315 2583552 476 1962511 1962740 2584032 2584261 460 1963041 1963240 2584562 2584761 400 1964000 1964244 2585521 2585765 490 1964308 1964714 2585829 2586235 814 1964720 1964952 2586241 2586473 466 1964954 1965247 2586475 2586768 588 1965875 1966077 2587396 2587598 406 1966259 1966477 2587780 2587998 438 1966819 1967436 2588340 2588957 1236 1968034 1968254 2589555 2589775 442 1968813 1969103 2590334 2590624 582 1969837 1970060 2591358 2591581 448 1970086 1970291 2591607 2591812 412 1971049 1971529 2592568 2593048 962 1971978 1972255 2593497 2593774 556 1972876 1973268 2594395 2594787 786 1973283 1973564 2594802 2595083 564 1974175 1974430 2595694 2595949 512 1975026 1975276 2596545 2596795 502 1975278 1975528 2596797 2597047 502 1975671 1975990 2597190 2597509 640 1977699 1977960 2598442 2598703 524 1978683 1978945 2599426 2599688 526 1979046 1979359 2599789 2600102 628 1980567 1980795 2601310 2601538 458 1982052 1982308 2602796 2603052 514 1982625 1982842 2603369 2603586 436 1982844 1983139 2603588 2603883 592 1984651 1985338 2605395 2606082 1376 1985855 1986116 2606600 2606861 524 1986452 1987099 2607196 2607843 1296 1987606 1988052 2608350 2608796 894 1989494 1989724 2610238 2610468 462 1990043 1990278 2631906 2632141 472 1990754 1991024 2632617 2632887 542 1991686 1991942 2633549 2633805 514 1992676 1992895 2634539 2634758 440 1993250 1993573 2635113 2635436 648 1993733 1993977 2635596 2635840 490 1993979 1994269 2635842 2636132 582 1994271 1994552 2636134 2636415 564 1996761 1997337 2638624 2639200 1154 1997710 1998233 2639573 2640096 1048 1998736 1998953 2640599 2640816 436 1998955 1999175 2640818 2641038 442 1999338 1999939 2641201 2641802 1204 2001495 2001699 2643618 2643822 410 2002872 2003182 2644986 2645296 622 2004044 2004246 2646158 2646360 406 2004760 2005085 2646874 2647199 652 2007088 2007366 2649202 2649480 558 2007394 2007805 2649508 2649919 824 2007807 2008180 2649921 2650294 748 2011047 2011524 2655125 2655602 956 2011589 2011918 2655667 2655996 660 2013971 2014599 2658049 2658677 1258 2014884 2015239 2659024 2659379 712 2015595 2015830 2659735 2659970 472 2016279 2016783 2660419 2660923 1010 2017939 2018353 2662080 2662494 830 2018612 2018943 2662753 2663084 664 2019325 2019661 2663466 2663802 674 2019822 2020218 2663963 2664359 794 2020220 2020530 2664361 2664671 622 2020532 2020953 2664673 2665094 844 2020955 2021623 2665096 2665764 1338 2021625 2021857 2665766 2665998 466 2021859 2022464 2666000 2666605 1212 2022653 2023379 2666794 2667520 1454 2023837 2024052 2667978 2668193 432 2025011 2025411 2669152 2669552 802 2026243 2026459 2670385 2670601 434 2027335 2027681 2671477 2671823 694 2027725 2028345 2671867 2672487 1242 2028564 2028792 2672706 2672934 458 2028869 2029072 2673011 2673214 408 2030970 2031175 2675112 2675317 412 2033871 2034187 2678006 2678322 634 2035344 2035564 2679479 2679699 442 2037139 2037485 2681275 2681621 694 2039412 2039618 2683547 2683753 414 2039771 2040082 2683906 2684217 624 2040374 2040678 2684509 2684813 610 2041532 2042285 2730847 2731600 1508 2042293 2042551 2731608 2731866 518 2042553 2042842 2731868 2732157 580 2043421 2043668 2732736 2732983 496 2043670 2043894 2732985 2733209 450 2045104 2045324 2734419 2734639 442 2052078 2052322 2742298 2742542 490 2053032 2053248 2743252 2743468 434 2053634 2053854 2743854 2744074 442 2053856 2054088 2744076 2744308 466 2054090 2054397 2744310 2744617 616 2054614 2054816 2744834 2745036 406 2056033 2056236 2746250 2746453 408 2057287 2057578 2747504 2747795 584 2062915 2064054 2753131 2754270 2280 2065897 2066449 2757364 2757916 1106 2066623 2066961 2758091 2758429 678 2074799 2075316 2761899 2762416 1036 2075456 2075809 2762556 2762909 708 2075811 2076169 2762910 2763268 718 2076404 2076706 2763504 2763806 606 2077254 2077487 2764354 2764587 468 2077678 2077940 2764778 2765040 526 2077969 2078252 2765069 2765352 568 2079328 2079557 2766429 2766658 460 2079685 2079908 2766786 2767009 448 2082879 2083130 2769981 2770232 504 2084419 2084738 2771521 2771840 640 2084836 2085336 2771938 2772438 1002 2086206 2086438 2773308 2773540 466 2086440 2086651 2773542 2773753 424 2091346 2091562 2778006 2778222 434 2094483 2094687 2781143 2781347 410 2097262 2097574 2783920 2784232 626 2113919 2114137 2803895 2804113 438 2119227 2119458 2809107 2809338 464 2122375 2122654 2812343 2812622 560 2122745 2123002 2812713 2812970 516 2126130 2126337 2816098 2816305 416 2127587 2127870 2817558 2817841 568 2128148 2128410 2818119 2818381 526 2130083 2130306 2820054 2820277 448 2131508 2131765 2821479 2821736 516 2133560 2133891 2823531 2823862 664 2133935 2134325 2823906 2824296 782 2134864 2135487 2824835 2825458 1248 2135806 2136050 2825778 2826022 490 2136085 2136302 2826057 2826274 436 2139119 2139375 2829563 2829819 514 2139410 2139702 2829854 2830146 586 2140010 2140292 2830454 2830736 566 2141744 2141972 2832191 2832419 458 2143720 2144076 2834167 2834523 714 2144305 2144574 2834752 2835021 540 2144682 2145093 2835121 2835532 824 2145494 2145735 2835933 2836174 484 2145917 2146119 2836356 2836558 406 2152874 2153097 2842908 2843131 448 2157500 2157728 2847534 2847762 458 2159512 2159726 2849546 2849760 430 2160915 2161195 2850949 2851229 562 2163830 2164029 2853865 2854064 400 2164634 2164884 2854669 2854919 502 2167991 2168191 2857396 2857596 402 2169513 2170123 2857657 2858267 1222 2170692 2170904 2858836 2859048 426 2171027 2171256 2859171 2859400 460 2171771 2172054 2859915 2860198 568 2172899 2173232 2861043 2861376 668 2173706 2173992 2861850 2862136 574 2174134 2174470 2862278 2862614 674 2176255 2176466 2864390 2864601 424 2176519 2176744 2864654 2864879 452 2178034 2178238 2866170 2866374 410 2178361 2178572 2866497 2866708 424 2179950 2180203 2868086 2868339 508 2180394 2180620 2868530 2868756 454 2181635 2182001 2869771 2870137 734 2182296 2182583 2870432 2870719 576 2183634 2183837 2873952 2874155 408 2183839 2184087 2874157 2874405 498 2184857 2185097 2875201 2875441 482 2191221 2191427 2881566 2881772 414 2191466 2191724 2881811 2882069 518 2192021 2192638 2882366 2882983 1236 2192659 2192863 2883004 2883208 410 2194182 2194415 2884527 2884760 468 2198233 2198437 2891590 2891794 410 2200600 2200819 2893957 2894176 440 2201929 2202134 2895284 2895489 412 2202523 2202763 2896812 2897052 482 2205919 2206158 2900208 2900447 480 2208053 2208314 2902342 2902603 524 2209448 2209707 2905053 2905312 520 2209899 2210143 2905506 2905750 490 2210145 2210348 2905752 2905955 408 2210350 2210690 2905957 2906297 682 2211187 2211475 2906794 2907082 578 2211943 2212186 2907550 2907793 488 2212389 2212600 2907996 2908207 424 2212933 2213153 2957456 2957676 442 2213274 2213964 2957797 2958487 1382 2218456 2218682 2963020 2963246 454 2219935 2220147 2964499 2964711 426 2220987 2221574 2965551 2966138 1176 2222369 2222661 2966933 2967225 586 2222834 2223101 2967398 2967665 536 2223432 2223734 2967996 2968298 606 2225496 2225947 2970060 2970511 904 2226627 2226862 2971192 2971427 472 2226864 2227086 2971429 2971651 446 2228571 2228812 2979215 2979456 484 2229200 2229697 2979844 2980341 996 2229855 2230119 2980499 2980763 530 2230121 2230345 2980765 2980989 450 2230830 2231351 2981474 2981995 1044 2231542 2231862 2982186 2982506 642 2232100 2232389 2982744 2983033 580 2233168 2233411 2983812 2984055 488 2233518 2234089 2984162 2984733 1144 2234218 2234614 2984862 2985258 794 2234979 2235319 2985624 2985964 682 2235321 2235523 2985966 2986168 406 2237286 2237587 2987931 2988232 604 2238311 2238529 2988956 2989174 438 2238619 2238940 2989264 2989585 644 2239235 2239730 2989880 2990375 992 2239732 2239939 2990377 2990584 416 2241424 2242032 2992069 2992677 1218 2242658 2242988 2993303 2993633 662 2243305 2243526 2993938 2994159 444 2243528 2244242 2994161 2994875 1430 2244244 2244464 2994877 2995097 442 2245425 2245663 2996056 2996294 478 2245849 2246101 2996480 2996732 506 2246572 2247571 2997203 2998202 2000 2247573 2248062 2998204 2998693 980 2248064 2248699 2998695 2999330 1272 2248701 2249569 2999332 3000200 1738 2249571 2250110 3000202 3000741 1080 2251980 2252305 3002560 3002885 652 2253003 2253255 3003583 3003835 506 2253263 2253585 3003843 3004165 646 2256235 2256769 3006815 3007349 1070 2259308 2259547 3009889 3010128 480 2259903 2260198 3010484 3010779 592 2260200 2260542 3010781 3011123 686 2261231 2261549 3011812 3012130 638 2261794 2262073 3012375 3012654 560 2262083 2262426 3012664 3013007 688 2263166 2263411 3013747 3013992 492 2263643 2264229 3014224 3014810 1174 2265002 2265281 3015583 3015862 560 2266560 2266943 3017141 3017524 768 2268043 2268619 3018625 3019201 1154 2269273 2269802 3019856 3020385 1060 2272483 2272778 3023066 3023361 592 2274347 2274557 3024930 3025140 422 2275057 2275295 3025640 3025878 478 2275539 2275809 3026122 3026392 542 2275811 2276060 3026394 3026643 500 2276062 2276278 3026645 3026861 434 2276280 2276870 3026863 3027453 1182 2277547 2277881 3028130 3028464 670 2278243 2278588 3028826 3029171 692 2280390 2280642 3030973 3031225 506 2280686 2280890 3031269 3031473 410 2281848 2282052 3032431 3032635 410 2282054 2282528 3032637 3033111 950 2283182 2283584 3033765 3034167 806 2283586 2283854 3034169 3034437 538 2284626 2284837 3035207 3035418 424 2285076 2285356 3035657 3035937 562 2285358 2285560 3035939 3036141 406 2289824 2290039 3039030 3039245 432 2290772 2290985 3039978 3040191 428 2291857 2292428 3041063 3041634 1144 2293245 2293458 3042451 3042664 428 2293481 2293703 3042687 3042909 446 2293807 2294108 3043013 3043314 604 2294251 2294644 3043457 3043850 788 2295290 2295646 3044496 3044852 714 2295648 2296086 3044854 3045292 878 2296175 2296494 3045381 3045700 640 2296613 2296935 3045819 3046141 646 2297470 2297887 3046676 3047093 836 2298029 2298351 3047235 3047557 646 2299772 2300043 3048978 3049249 544 2300249 2300505 3049455 3049711 514 2300657 2300999 3049863 3050205 686 2301001 2301222 3050207 3050428 444 2301224 2301640 3050430 3050846 834 2303695 2303957 3052335 3052597 526 2303998 2304404 3052638 3053044 814 2304406 2304957 3053046 3053597 1104 2305313 2305678 3053953 3054318 732 2306306 2306553 3054946 3055193 496 2306555 2306758 3055195 3055398 408 2309351 2309766 3057991 3058406 832 2310631 2310948 3059271 3059588 636 2311323 2311661 3059963 3060301 678 2312305 2312510 3060945 3061150 412 2312535 2312783 3061175 3061423 498 2313355 2314407 3061995 3063047 2106 2315236 2315453 3063876 3064093 436 2315698 2315945 3064338 3064585 496 2316067 2316285 3064707 3064925 438 2316379 2316686 3065019 3065326 616 2316688 2316893 3065328 3065533 412 2317120 2317469 3065760 3066109 700 2317561 2317971 3066201 3066611 822 2325693 2326066 3067117 3067490 748 2326080 2326352 3067504 3067776 546 2328984 2329211 3070408 3070635 456 2329599 2329901 3071023 3071325 606 2330034 2330252 3071458 3071676 438 2330740 2331008 3072164 3072432 538 2331328 2331814 3072752 3073238 974 2332288 2332642 3073712 3074066 710 2332644 2332860 3074068 3074284 434 2333387 2333610 3074811 3075034 448 2334785 2335009 3076208 3076432 450 2336208 2336413 3077631 3077836 412 2336415 2336647 3077838 3078070 466 2337189 2337503 3078612 3078926 630 2337505 2337720 3078928 3079143 432 2338608 2338846 3080044 3080282 478 2339047 2339302 3080483 3080738 512 2339383 2339919 3080819 3081355 1074 2341025 2341445 3082461 3082881 842 2342842 2343281 3084278 3084717 880 2344015 2344303 3085451 3085739 578 2348815 2349051 3093840 3094076 474 2350732 2351004 3095757 3096029 546 2351164 2351387 3096189 3096412 448 2351467 2351807 3096492 3096832 682 2354350 2354957 3099375 3099982 1216 2354959 2355241 3099984 3100266 566 2356031 2356258 3100885 3101112 456 2357185 2357442 3102038 3102295 516 2357830 2358383 3102683 3103236 1108 2358663 2359031 3103516 3103884 738 2359274 2359777 3104127 3104630 1008 2361150 2361633 3106003 3106486 968 2361635 2361898 3106488 3106751 528 2365050 2365259 3109903 3110112 420 2365300 2365505 3110153 3110358 412 2365729 2366155 3110582 3111008 854 2366694 2366896 3111547 3111749 406 2366898 2367151 3111751 3112004 508 2367195 2367565 3112048 3112418 742 2367738 2367939 3112591 3112792 404 2367941 2368333 3112794 3113186 786 2368581 2369006 3113434 3113859 852 2369104 2369342 3113957 3114195 478 2369344 2369561 3114197 3114414 436 2371115 2371346 3115968 3116199 464 2371355 2371559 3116208 3116412 410 2371934 2372317 3116787 3117170 768 2373433 2373657 3118286 3118510 450 2374791 2375086 3119644 3119939 592 2377211 2377470 3122064 3122323 520 2378844 2379095 3123697 3123948 504 2379699 2379931 3124552 3124784 466 2388716 2388930 3129159 3129373 430 2389160 2389806 3129603 3130249 1294 2391447 2391892 3131957 3132402 892 2392296 2392513 3132806 3133023 436 2393010 2393211 3133520 3133721 404 2393779 2394028 3134289 3134538 500 2394207 2394843 3134717 3135353 1274 2395298 2395556 3135808 3136066 518 2397004 2397356 3137514 3137866 706 2398063 2398308 3138573 3138818 492 2398727 2398941 3139237 3139451 430 2399860 2400179 3140370 3140689 640 2401998 2402382 3142508 3142892 770 2402384 2402883 3142894 3143393 1000 2403015 2403224 3143525 3143734 420 2403226 2403562 3143736 3144072 674 2404124 2404360 3144634 3144870 474 2404362 2404984 3144872 3145494 1246 2405033 2405255 3145543 3145765 446 2405413 2405833 3145923 3146343 842 2405973 2406286 3146483 3146796 628 2407031 2407332 3147541 3147842 604 2407843 2408135 3148353 3148645 586 2408137 2408740 3148647 3149250 1208 2408742 2408978 3149252 3149488 474 2409223 2409580 3149733 3150090 716 2409899 2410124 3150409 3150634 452 2410126 2410474 3150636 3150984 698 2410877 2411974 3151387 3152484 2196 2411990 2412480 3152500 3152990 982 2412572 2413115 3153082 3153625 1088 2413117 2413628 3153627 3154138 1024 2414188 2414453 3154698 3154963 532 2414542 2414910 3155052 3155420 738 2415052 2415297 3155562 3155807 492 2415604 2415923 3156114 3156433 640 2416588 2416808 3157098 3157318 442 2417113 2417411 3157623 3157921 598 2417437 2417877 3157947 3158387 882 2419183 2419387 3159693 3159897 410 2419395 2419663 3159905 3160173 538 2421331 2421674 3161841 3162184 688 2422083 2422456 3162593 3162966 748 2422485 2422840 3162995 3163350 712 2423554 2424027 3164064 3164537 948 2424119 2424381 3164629 3164891 526 2424749 2425018 3165259 3165528 540 2425053 2425264 3165563 3165774 424 2425958 2426231 3166468 3166741 548 2428031 2428341 3168541 3168851 622 2428580 2428822 3169090 3169332 486 2429754 2430006 3170447 3170699 506 2430853 2431216 3171546 3171909 728 2431218 2432122 3171911 3172815 1810 2432480 2433061 3173173 3173754 1164 2433567 2433864 3174260 3174557 596 2434712 2434964 3175405 3175657 506 2435529 2435802 3176222 3176495 548 2435804 2436024 3176497 3176717 442 2436196 2436429 3176889 3177122 468 2437238 2437440 3177931 3178133 406 2438957 2439180 3179660 3179883 448 2439374 2439708 3180077 3180411 670 2439945 2440207 3180648 3180910 526 2442085 2442302 3182788 3183005 436 2443422 2443627 3184125 3184330 412 2443784 2444015 3184487 3184718 464 2445317 2445553 3186020 3186256 474 2446350 2446688 3187053 3187391 678 2454776 2454994 3195531 3195749 438 2455788 2456296 3196543 3197051 1018 2456619 2456870 3197374 3197625 504 2458874 2459512 3199628 3200266 1278 2460255 2460457 3201009 3201211 406 2462902 2463226 3203841 3204165 650 2477087 2477474 3219567 3219954 776 2478097 2478468 3220577 3220948 744 2478884 2479094 3221364 3221574 422 2479182 2479452 3221662 3221932 542 2479454 2479743 3221934 3222223 580 2481784 2482580 3224264 3225060 1594 2485223 2485434 3227703 3227914 424 2487009 2487311 3229485 3229787 606 2487475 2487680 3229951 3230156 412 2487748 2487953 3230224 3230429 412 2488126 2488487 3230602 3230963 724 2489509 2489738 3231985 3232214 460 2489857 2490088 3232333 3232564 464 2490804 2491159 3233280 3233635 712 2491680 2491920 3234156 3234396 482 2493507 2493824 3235984 3236301 636 2494105 2494657 3236582 3237134 1106 2494917 2495150 3237394 3237627 468 2496124 2496336 3238601 3238813 426 2496425 2496805 3238903 3239283 762 2498319 2498583 3240797 3241061 530 2499116 2499492 3241594 3241970 754 2499646 2499886 3242124 3242364 482 2499888 2500201 3242366 3242679 628 2500592 2500857 3243070 3243335 532 2501864 2502366 3244342 3244844 1006 2502374 2502599 3244852 3245077 452 2504599 2504812 3247077 3247290 428 2505039 2505253 3247517 3247731 430 2505829 2506207 3248307 3248685 758 2507249 2507950 3249727 3250428 1404 2508288 2508706 3250766 3251184 838 2508708 2509001 3251186 3251479 588 2510142 2510587 3252619 3253064 892 2510589 2510803 3253066 3253280 430 2511109 2511410 3253586 3253887 604 2514424 2514627 3255552 3255755 408 2515055 2515911 3256183 3257039 1714 2516170 2516423 3257182 3257435 508 2516425 2516643 3257437 3257655 438 2516645 2517037 3257657 3258049 786 2517487 2517986 3260246 3260745 1000 2518048 2518274 3260807 3261033 454 2518801 2519152 3261560 3261911 704 2519154 2519378 3261913 3262137 450 2524775 2525038 3263384 3263647 528 2525040 2525347 3263649 3263956 616 2525376 2525726 3263985 3264335 702 2525728 2526444 3264337 3265053 1434 2526978 2527238 3265587 3265847 522 2527385 2527720 3265994 3266329 672 2528020 2528283 3266629 3266892 528 2529020 2529435 3267629 3268044 832 2529701 2529924 3268310 3268533 448 2530338 2530630 3268947 3269239 586 2531010 2531263 3269619 3269872 508 2531438 2531958 3270047 3270567 1042 2531960 2532332 3270569 3270941 746 2532682 2532887 3271291 3271496 412 2533185 2534040 3271794 3272649 1712 2537775 2538002 3275424 3275651 456 2538067 2538302 3275716 3275951 472 2538403 2538686 3276052 3276335 568 2541417 2541663 3279066 3279312 494 2542194 2542549 3279697 3280052 712 2544569 2544826 3282072 3282329 516 2547613 2547847 3284934 3285168 470 2548378 2548736 3285699 3286057 718 2548738 2549045 3286059 3286366 616 2549099 2549312 3286420 3286633 428 2549314 2549839 3286635 3287160 1052 2550023 2550307 3287344 3287628 570 2550593 2550918 3287914 3288239 652 2551130 2551347 3288451 3288668 436 2552936 2553294 3290257 3290615 718 2554391 2554722 3291712 3292043 664 2555321 2555603 3292642 3292924 566 2556229 2556717 3293550 3294038 978 2563647 2563847 3294178 3294378 402 2565243 2565475 3295774 3296006 466 2566632 2567154 3297046 3297568 1046 2567312 2567642 3297726 3298056 662 2568434 2568987 3298848 3299401 1108 2570309 2570600 3300723 3301014 584 2572119 2572431 3302461 3302773 626 2572872 2573104 3303214 3303446 466 2574757 2575061 3305099 3305403 610 2576480 2576803 3306822 3307145 648 2576805 2577076 3307147 3307418 544 2577426 2577719 3307768 3308061 588 2579667 2579994 3310009 3310336 656 2580018 2580239 3310360 3310581 444 2580681 2580891 3311023 3311233 422 2580942 2581167 3311284 3311509 452 2581680 2581891 3312022 3312233 424 2583483 2583691 3313825 3314033 418 2583693 2583939 3314035 3314281 494 2584527 2584813 3314869 3315155 574 2585107 2585443 3315449 3315785 674 2585481 2585996 3315823 3316338 1032 2586571 2586905 3316913 3317247 670 2587132 2587340 3317474 3317682 418 2587774 2588036 3318116 3318378 526 2588299 2588642 3318641 3318984 688 2588644 2588846 3318986 3319188 406 2590181 2590749 3320523 3321091 1138 2593465 2593720 3323778 3324033 512 2593778 2594108 3324091 3324421 662 2595210 2595788 3325523 3326101 1158 2595986 2596263 3326299 3326576 556 2596265 2596849 3326578 3327162 1170 2596868 2597151 3327181 3327464 568 2597190 2597545 3327503 3327858 712 2597749 2598076 3328062 3328389 656 2598078 2598313 3328391 3328626 472 2598363 2598798 3328676 3329111 872 2601610 2601942 3331923 3332255 666 2602617 2602960 3332930 3333273 688 2603355 2603608 3333668 3333921 508 2603730 2603986 3334043 3334299 514 2604422 2604657 3334735 3334970 472 2606436 2606870 3336749 3337183 870 2607877 2608085 3338238 3338446 418 2608337 2608569 3338698 3338930 466 2610006 2610257 3340367 3340618 504 2611902 2612633 3342265 3342996 1464 2613728 2614090 3344091 3344453 726 2614188 2614399 3344551 3344762 424 2614580 2614841 3344943 3345204 524 2615310 2615748 3345673 3346111 878 2615750 2616027 3346113 3346390 556 2616029 2616801 3346392 3347164 1546 2617029 2617312 3347392 3347675 568 2617371 2617651 3347734 3348014 562 2617653 2618471 3348016 3348834 1638 2618650 2618927 3349013 3349290 556 2619068 2619400 3349431 3349763 666 2620295 2620536 3350658 3350899 484 2620903 2621574 3351265 3351936 1344 2621648 2622141 3352010 3352503 988 2622602 2622972 3352964 3353334 742 2622974 2623330 3353336 3353692 714 2623959 2624281 3354321 3354643 646 2624863 2625146 3355225 3355508 568 2625345 2625778 3355707 3356140 868 2625998 2626278 3356360 3356640 562 2626491 2626699 3356853 3357061 418 2626701 2627079 3357063 3357441 758 2627281 2627535 3357643 3357897 510 2627901 2628187 3358263 3358549 574 2628222 2628544 3358584 3358906 646 2629209 2629572 3359571 3359934 728 2629758 2629996 3360120 3360358 478 2630442 2630759 3360804 3361121 636 2630825 2631072 3361187 3361434 496 2631491 2631693 3361853 3362055 406 2631695 2632029 3362057 3362391 670 2633280 2633494 3363642 3363856 430 2634147 2634646 3364508 3365007 1000 2634684 2634898 3365045 3365259 430 2634900 2635635 3365261 3365996 1472 2635637 2635916 3365998 3366277 560 2636072 2636311 3366433 3366672 480 2636313 2637156 3366674 3367517 1688 2637264 2637676 3367625 3368037 826 2638152 2638776 3368513 3369137 1250 2639345 2639640 3369706 3370001 592 2639705 2640279 3370066 3370640 1150 2640598 2641264 3370959 3371625 1334 2642265 2642484 3372626 3372845 440 2644797 2645068 3379989 3380260 544 2646232 2646718 3381424 3381910 974 2646720 2647199 3381912 3382391 960 2647402 2647747 3382594 3382939 692 2649258 2649769 3384450 3384961 1024 2650153 2650613 3385345 3385805 922 2650615 2650905 3385807 3386097 582 2653587 2653891 3388463 3388767 610 2654352 2654790 3389228 3389666 878 2654921 2655223 3389797 3390099 606 2655225 2655706 3390101 3390582 964 2655708 2656017 3390584 3390893 620 2656019 2656290 3390895 3391166 544 2656292 2656816 3391168 3391692 1050 2657068 2657321 3391944 3392197 508 2658334 2658578 3393210 3393454 490 2659321 2659587 3394197 3394463 534 2660011 2660327 3394887 3395203 634 2661878 2662101 3396600 3396823 448 2662610 2662809 3397332 3397531 400 2662985 2663205 3397707 3397927 442 2663404 2664328 3398126 3399050 1850 2666419 2667002 3401142 3401725 1168 2667999 2668309 3402722 3403032 622 2669071 2669365 3403794 3404088 590 2672157 2672527 3406880 3407250 742 2673299 2673585 3408022 3408308 574 2674570 2674779 3409293 3409502 420 2676306 2676744 3411029 3411467 878 2680540 2680898 3415263 3415621 718 2683102 2683328 3417690 3417916 454 2683330 2684113 3417918 3418701 1568 2684451 2684963 3419039 3419551 1026 2685044 2685290 3419632 3419878 494 2685816 2686077 3420404 3420665 524 2686500 2686729 3421088 3421317 460 2687173 2687453 3421761 3422041 562 2687674 2688115 3422262 3422703 884 2688993 2689305 3423581 3423893 626 2691024 2691228 3425630 3425834 410 2691698 2691975 3426304 3426581 556 2692586 2692875 3427192 3427481 580 2693026 2693277 3427632 3427883 504 2693279 2693603 3427885 3428209 650 2693778 2693983 3428383 3428588 412 2694111 2694508 3428716 3429113 796 2694510 2694993 3429115 3429598 968 2695122 2695678 3429727 3430283 1114 2696478 2697016 3431083 3431621 1078 2697024 2697292 3431629 3431897 538 2699800 2700161 3434407 3434768 724 2700600 2700917 3435207 3435524 636 2700919 2701186 3435526 3435793 536 2702463 2702896 3437071 3437504 868 2703201 2703535 3437809 3438143 670 2704116 2704639 3438724 3439247 1048 2704821 2705454 3439429 3440062 1268 2705750 2706257 3440358 3440865 1016 2706433 2706921 3441041 3441529 978 2707175 2708347 3441771 3442943 2346 2708499 2708746 3443095 3443342 496 2709414 2709740 3444010 3444336 654 2709742 2710033 3444338 3444629 584 2710686 2711190 3445282 3445786 1010 2714377 2714608 3448797 3449028 464 2715041 2715350 3449461 3449770 620 2716207 2716714 3450627 3451134 1016 2716916 2717459 3451336 3451879 1088 2717578 2717837 3451998 3452257 520 2717875 2718432 3452295 3452852 1116 2719838 2720043 3454258 3454463 412 2720685 2720963 3455105 3455383 558 2721943 2722325 3456363 3456745 766 2722364 2722648 3456784 3457068 570 2722719 2722976 3457139 3457396 516 2722978 2723197 3457398 3457617 440 2723512 2723820 3457932 3458240 618 2724288 2724992 3458707 3459411 1410 2725002 2725338 3459421 3459757 674 2725518 2725859 3459938 3460279 684 2726034 2726557 3460454 3460977 1048 2727756 2728138 3462102 3462484 766 2728176 2728411 3462523 3462758 472 2729938 2730256 3464290 3464608 638 2730258 2730709 3464610 3465061 904 2730715 2730941 3465067 3465293 454 2730943 2731223 3465295 3465575 562 2731369 2732126 3465721 3466478 1516 2732128 2732474 3466480 3466826 694 2733900 2734427 3468252 3468779 1056 2734630 2734983 3468982 3469335 708 2735104 2735627 3469456 3469979 1048 2735929 2736218 3470281 3470570 580 2736892 2737170 3471244 3471522 558 2737943 2738473 3472295 3472825 1062 2738616 2738989 3472968 3473341 748 2739487 2739726 3473839 3474078 480 2740107 2740530 3474459 3474882 848 2740532 2740751 3474884 3475103 440 2741872 2742117 3476224 3476469 492 2742144 2743097 3476497 3477450 1908 2743240 2743532 3477593 3477885 586 2743627 2744287 3477980 3478640 1322 2744484 2744755 3478725 3478996 544 2744814 2745301 3479055 3479542 976 2745687 2746250 3479928 3480491 1128 2746252 2746651 3480493 3480892 800 2746790 2747112 3481032 3481354 646 2748316 2748598 3482557 3482839 566 2748600 2748900 3482841 3483141 602 2749601 2749903 3483842 3484144 606 2750439 2750646 3484680 3484887 416 2751144 2751386 3485385 3485627 486 2751471 2751884 3485712 3486125 828 2752393 2752793 3486634 3487034 802 2753604 2753931 3487845 3488172 656 2778708 2778970 3512565 3512827 526 2779235 2779927 3513092 3513784 1386 2780718 2781019 3514575 3514876 604 2781027 2781266 3514885 3515124 480 2788875 2789257 3522735 3523117 766 2792327 2792526 3526187 3526386 400 2793676 2794100 3527536 3527960 850 2794102 2794557 3527962 3528417 912 2794848 2795073 3528708 3528933 452 2796262 2796549 3530122 3530409 576 2797007 2797371 3530866 3531230 730 2797373 2798389 3531232 3532248 2034 2798633 2799226 3534456 3535049 1188 2800013 2800498 3535836 3536321 972 2800607 2800878 3536430 3536701 544 2801135 2801361 3536958 3537184 454 2801453 2801751 3537276 3537574 598 2801948 2802460 3537771 3538283 1026 2802880 2803088 3538705 3538913 418 2804112 2804406 3539937 3540231 590 2804534 2804916 3540359 3540741 766 2805471 2805684 3541295 3541508 428 2807358 2807725 3543189 3543556 736 2808012 2808214 3543843 3544045 406 2808405 2808652 3544236 3544483 496 2808654 2808877 3544485 3544708 448 2808895 2809235 3544726 3545066 682 2809368 2809798 3545199 3545629 862 2810464 2810697 3546295 3546528 468 2812447 2812857 3548278 3548688 822 2813196 2813583 3549026 3549413 776 2814300 2814622 3550130 3550452 646 2816865 2817266 3552466 3552867 804 2817268 2817469 3552869 3553070 404 2818753 2819245 3554355 3554847 986 2819449 2820142 3555051 3555744 1388 2820273 2820646 3555874 3556247 748 2820875 2821089 3556475 3556689 430 2821091 2821319 3556691 3556919 458 2821715 2821967 3557315 3557567 506 2825702 2825914 3561302 3561514 426 2826840 2827088 3562441 3562689 498 2828502 2828984 3564104 3564586 966 2830753 2831006 3566355 3566608 508 2831645 2831876 3567043 3567274 464 2833063 2833293 3568461 3568691 462 2833295 2833536 3568693 3568934 484 2837117 2837333 3572515 3572731 434 2838683 2838943 3574081 3574341 522 2841331 2841629 3576694 3576992 598 2846859 2847158 3582222 3582521 600 2847181 2847469 3582544 3582832 578 2847831 2848268 3583194 3583631 876 2848270 2848523 3583633 3583886 508 2848606 2848961 3583969 3584324 712 2848963 2849325 3584326 3584688 726 2850926 2851128 3586289 3586491 406 2851139 2851514 3586502 3586877 752 2852110 2852391 3587473 3587754 564 2853320 2853621 3588683 3588984 604 2853872 2854098 3589235 3589461 454 2854529 2854828 3589892 3590191 600 2854893 2855169 3590256 3590532 554 2855604 2856123 3590967 3591486 1040 2858192 2858404 3593555 3593767 426 2864535 2864754 3596737 3596956 440 2864756 2865030 3596958 3597232 550 2865209 2865476 3597411 3597678 536 2865518 2865734 3597720 3597936 434 2865880 2866286 3598082 3598488 814 2866387 2866634 3598589 3598836 496 2866834 2867202 3599036 3599404 738 2867396 2867672 3599598 3599874 554 2867821 2868369 3600023 3600571 1098 2869103 2869391 3601305 3601593 578 2869393 2869625 3601595 3601827 466 2870387 2871022 3602589 3603224 1272 2871160 2871582 3603362 3603784 846 2871584 2872019 3603786 3604221 872 2872881 2873099 3605083 3605301 438 2874143 2874673 3606345 3606875 1062 2885970 2886255 3617768 3618053 572 2886425 2886780 3618222 3618577 712 2888055 2888285 3619852 3620082 462 2889793 2890003 3621590 3621800 422 2890189 2890423 3621986 3622220 470 2891093 2891302 3622890 3623099 420 2897135 2897349 3628932 3629146 430 2898460 2898785 3630257 3630582 652 2901458 2901741 3633255 3633538 568 2905237 2905527 3639316 3639606 582 2905547 2906034 3639626 3640113 976 2906036 2906652 3640115 3640731 1234 2907449 2907730 3641528 3641809 564 2907732 2908070 3641811 3642149 678 2908102 2908400 3642181 3642479 598 2909036 2909377 3643115 3643456 684 2909379 2909656 3643458 3643735 556 2909940 2910304 3644019 3644383 730 2910480 2910805 3644559 3644884 652 2911431 2912027 3645510 3646106 1194 2912225 2912484 3646304 3646563 520 2912855 2913562 3646934 3647641 1416 2914017 2914240 3648096 3648319 448 2914296 2914654 3648375 3648733 718 2914689 2914992 3648768 3649071 608 2914998 2915242 3649077 3649321 490 2915451 2915695 3649530 3649774 490 2916062 2916284 3650142 3650364 446 2917494 2917747 3651574 3651827 508 2918793 2919026 3652873 3653106 468 2919553 2919764 3653633 3653844 424 2920078 2920674 3654158 3654754 1194 2921222 2921733 3655302 3655813 1024 2921946 2922205 3656026 3656285 520 2922916 2923166 3656996 3657246 502 2923198 2923523 3657278 3657603 652 2923525 2923743 3657605 3657823 438 2924110 2924627 3658190 3658707 1036 2924815 2925035 3658895 3659115 442 2925490 2925698 3659570 3659778 418 2925838 2926075 3659918 3660155 476 2926077 2926503 3660157 3660583 854 2926820 2927055 3660900 3661135 472 2927387 2927763 3661467 3661843 754 2928017 2928240 3662097 3662320 448 2928674 2928974 3662754 3663054 602 2929226 2929836 3663306 3663916 1222 2929908 2930197 3663988 3664277 580 2930268 2930563 3664348 3664643 592 2930667 2931073 3664747 3665153 814 2931075 2931390 3665155 3665470 632 2931492 2931842 3665572 3665922 702 2932194 2932425 3666274 3666505 464 2932745 2933043 3666825 3667123 598 2933611 2933834 3667691 3667914 448 2934358 2934848 3668438 3668928 982 2934850 2935109 3668930 3669189 520 2935111 2935418 3669191 3669498 616 2935564 2935784 3669644 3669864 442 2935786 2936405 3669866 3670485 1240 2936506 2936742 3670586 3670822 474 2936859 2937093 3670939 3671173 470 2937131 2937948 3671211 3672028 1636 2938372 2938889 3672452 3672969 1036 2940044 2940486 3674124 3674566 886 2940637 2940971 3674717 3675051 670 2941477 2941770 3675557 3675850 588 2943757 2944212 3677837 3678292 912 2944844 2945248 3678924 3679328 810 2945342 2945747 3679422 3679827 812 2946496 2946827 3680576 3680907 664 2947288 2947624 3681368 3681704 674 2947872 2948179 3681952 3682259 616 2948825 2949045 3682905 3683125 442 2949530 2949747 3683610 3683827 436 2949788 2950008 3683868 3684088 442 2952130 2952446 3686210 3686526 634 2952793 2953194 3686873 3687274 804 2953196 2953415 3687276 3687495 440 2954286 2954592 3688366 3688672 614 2954594 2954832 3688674 3688912 478 2955038 2955270 3689118 3689350 466 2956154 2956380 3690234 3690460 454 2956706 2956927 3690786 3691007 444 2958659 2958934 3692739 3693014 552 2960256 2960476 3694336 3694556 442 2962083 2962376 3696163 3696456 588 2963061 2963356 3697141 3697436 592 2963712 2964359 3697792 3698439 1296 2964361 2964757 3698441 3698837 794 2965038 2965297 3699118 3699377 520 2965650 2965915 3699730 3699995 532 2966001 2966248 3700081 3700328 496 2966250 2967090 3700330 3701170 1682 2967289 2967597 3701369 3701677 618 2967998 2968278 3702078 3702358 562 2969272 2969497 3703352 3703577 452 2969542 2969976 3703622 3704056 870 2970125 2970476 3704205 3704556 704 2970478 2970737 3704558 3704817 520 2971120 2971391 3705200 3705471 544 2971483 2971894 3705563 3705974 824 2972012 2972379 3706092 3706459 736 2972936 2973168 3707016 3707248 466 2973973 2974332 3708053 3708412 720 2974589 2974891 3708671 3708973 606 2975121 2975848 3709203 3709930 1456 2976234 2976541 3710316 3710623 616 2976543 2976934 3710625 3711016 784 2977547 2977758 3711629 3711840 424 2978148 2978415 3712230 3712497 536 2979002 2979237 3713084 3713319 472 2979638 2979990 3713720 3714072 706 2982386 2982683 3716468 3716765 596 2983764 2984022 3717846 3718104 518 2984063 2984382 3718145 3718464 640 2984384 2984655 3718466 3718737 544 2985678 2985903 3719760 3719985 452 2987686 2987900 3721769 3721983 430 2987937 2988226 3722020 3722309 580 2990962 2991253 3725284 3725575 584 2993831 2994088 3728158 3728415 516 2994090 2994381 3728417 3728708 584 2995755 2996045 3745699 3745989 582 2996478 2996916 3746417 3746855 878 2997298 2997564 3747316 3747582 534 2997725 2997942 3747743 3747960 436 2998837 2999055 3748856 3749074 438 2999656 2999870 3749675 3749889 430 3000361 3000871 3750380 3750890 1022 3001232 3001571 3751251 3751590 680 3001673 3002026 3751692 3752045 708 3002567 3002766 3752586 3752785 400 3002885 3003129 3752904 3753148 490 3003323 3003617 3753342 3753636 590 3004168 3004374 3754187 3754393 414 3005398 3005702 3755418 3755722 610 3006022 3006285 3756042 3756305 528 3006287 3006638 3756307 3756658 704 3006640 3006902 3756660 3756922 526 3007576 3007988 3757596 3758008 826 3007993 3008448 3758013 3758468 912 3008562 3008883 3758582 3758903 644 3009212 3009539 3759232 3759559 656 3010057 3010391 3760077 3760411 670 3010599 3011015 3760439 3760855 834 3011226 3011824 3761066 3761664 1198 3012194 3012408 3762034 3762248 430 3013048 3013257 3762888 3763097 420 3014044 3014312 3763886 3764154 538 3014671 3015264 3764513 3765106 1188 3015391 3015869 3765233 3765711 958 3016410 3016679 3766252 3766521 540 3017502 3017704 3767344 3767546 406 3018001 3018310 3767843 3768152 620 3018534 3018810 3768375 3768651 554 3018921 3019481 3768762 3769322 1122 3019483 3019841 3769324 3769682 718 3020209 3020411 3770050 3770252 406 3020619 3021029 3770460 3770870 822 3021634 3021899 3771475 3771740 532 3022247 3022510 3772088 3772351 528 3023592 3023848 3773433 3773689 514 3024824 3025117 3774665 3774958 588 3025119 3025385 3774960 3775226 534 3025387 3025675 3775228 3775516 578 3025911 3026158 3775753 3776000 496 3026205 3026545 3776047 3776387 682 3026973 3027273 3776815 3777115 602 3027539 3028017 3777381 3777859 958 3028526 3028804 3778368 3778646 558 3029244 3029744 3779086 3779586 1002 3029796 3030092 3779638 3779934 594 3030604 3030868 3780446 3780710 530 3030870 3031319 3780712 3781161 900 3031899 3032116 3781740 3781957 436 3032352 3032773 3782193 3782614 844 3033845 3034463 3783686 3784304 1238 3036792 3037003 3786633 3786844 424 3037599 3038049 3787440 3787890 902 3040459 3040735 3790181 3790457 554 3040791 3041035 3790513 3790757 490 3041133 3041336 3790855 3791058 408 3041443 3041752 3791165 3791474 620 3042030 3042354 3791752 3792076 650 3045415 3045646 3794236 3794467 464 3047381 3047692 3796201 3796512 624 3048253 3048570 3797073 3797390 636 3048572 3048869 3797392 3797689 596 3051344 3051552 3800165 3800373 418 3052159 3052440 3800980 3801261 564 3052674 3053112 3801495 3801933 878 3053387 3053839 3802208 3802660 906 3053841 3054360 3802662 3803181 1040 3054575 3054820 3803396 3803641 492 3055879 3056177 3805093 3805391 598 3056206 3056447 3805420 3805661 484 3056621 3056852 3805834 3806065 464 3056911 3057456 3806124 3806669 1092 3057700 3058064 3806868 3807232 730 3058180 3058454 3807348 3807622 550 3058950 3059224 3808118 3808392 550 3059475 3060477 3808643 3809645 2006 3061062 3062175 3810230 3811343 2228 3062510 3062721 3811678 3811889 424 3063007 3063221 3812175 3812389 430 3063280 3063649 3812448 3812817 740 3063651 3063920 3812819 3813088 540 3065471 3065673 3814639 3814841 406 3066919 3067412 3816087 3816580 988 3067576 3067967 3816744 3817135 784 3068515 3068893 3817683 3818061 758 3068895 3069116 3818063 3818284 444 3069118 3069421 3818286 3818589 608 3069423 3069813 3818591 3818981 782 3070272 3071272 3819440 3820440 2002 3071562 3071879 3820730 3821047 636 3073825 3074209 3826128 3826512 770 3074211 3074467 3826514 3826770 514 3074675 3075016 3826978 3827319 684 3075018 3075219 3827321 3827522 404 3075627 3075887 3827931 3828191 522 3076093 3076307 3828397 3828611 430 3076675 3077333 3828979 3829637 1318 3079514 3079872 3831818 3832176 718 3079982 3080259 3832286 3832563 556 3080471 3080960 3832775 3833264 980 3082615 3082837 3835794 3836016 446 3083760 3084104 3836939 3837283 690 3084106 3084555 3837285 3837734 900 3084557 3084791 3837736 3837970 470 3084793 3084995 3837972 3838174 406 3084997 3085235 3838176 3838414 478 3085432 3085649 3838611 3838828 436 3086328 3086642 3839520 3839834 630 3086755 3087035 3839947 3840227 562 3088324 3088546 3841516 3841738 446 3089701 3089960 3842893 3843152 520 3090100 3090440 3843292 3843632 682 3090550 3090840 3843742 3844032 582 3090842 3091181 3844034 3844373 680 3091438 3091646 3844630 3844838 418 3092188 3092387 3845391 3845590 400 3093004 3093438 3846207 3846641 870 3093603 3094013 3846806 3847216 822 3096735 3096971 3850026 3850262 474 3098602 3099146 3851893 3852437 1090 3099400 3099657 3852691 3852948 516 3099873 3100304 3853165 3853596 864 3100306 3100536 3853598 3853828 462 3100613 3100873 3853905 3854165 522 3100875 3101262 3854167 3854554 776 3102828 3103096 3856120 3856388 538 3104010 3104371 3857302 3857663 724 3104373 3104650 3857665 3857942 556 3105070 3105450 3858362 3858742 762 3105587 3105795 3858879 3859087 418 3105926 3106348 3859218 3859640 846 3106790 3107027 3860082 3860319 476 3107815 3108101 3861108 3861394 574 3136370 3136856 3888426 3888912 974 3138726 3138940 3890782 3890996 430 3139130 3139374 3891186 3891430 490 3139601 3139866 3891657 3891922 532 3139964 3140181 3892020 3892237 436 3140690 3141215 3892746 3893271 1052 3141217 3141434 3893273 3893490 436 3141757 3141962 3893813 3894018 412 3141964 3142233 3894020 3894289 540 3142235 3142542 3894291 3894598 616 3142973 3143239 3895029 3895295 534 3143404 3143749 3895460 3895805 692 3143751 3144101 3895807 3896157 702 3144103 3144774 3896159 3896830 1344 3144779 3145142 3896835 3897198 728 3146202 3146422 3898261 3898481 442 3147235 3147541 3899294 3899600 614 3148313 3148647 3900372 3900706 670 3149634 3149851 3901693 3901910 436 3149949 3150197 3902008 3902256 498 3150769 3151070 3902828 3903129 604 3151429 3151741 3903488 3903800 626 3151748 3152031 3903807 3904090 568 3152247 3152475 3904307 3904535 458 3153099 3153477 3905159 3905537 758 3154115 3154323 3906175 3906383 418 3154885 3155420 3906945 3907480 1072 3155961 3156207 3908018 3908264 494 3158209 3158522 3910262 3910575 628 3158683 3158888 3910736 3910941 412 3158947 3159233 3911000 3911286 574 3159946 3160291 3911999 3912344 692 3160293 3160567 3912346 3912620 550 3161369 3161848 3913422 3913901 960 3162085 3162284 3914138 3914337 400 3162322 3162671 3914375 3914724 700 3162673 3162950 3914726 3915003 556 3163102 3163582 3915155 3915635 962 3163717 3164081 3915770 3916134 730 3164320 3164886 3916373 3916939 1134 3164994 3165304 3917047 3917357 622 3166942 3167162 3918073 3918293 442 3167281 3167625 3918412 3918756 690 3167811 3168095 3918942 3919226 570 3168108 3168349 3919239 3919480 484 3169150 3169519 3920281 3920650 740 3170441 3170648 3920985 3921192 416 3170926 3171296 3921470 3921840 742 3171648 3171884 3929445 3929681 474 3173031 3173423 3930828 3931220 786 3173425 3173841 3931222 3931638 834 3173843 3174134 3931640 3931931 584 3174940 3175571 3932737 3933368 1264 3175780 3176399 3933577 3934196 1240 3177742 3178153 3935539 3935950 824 3178395 3178722 3936192 3936519 656 3178763 3178995 3936560 3936792 466 3179171 3179596 3936968 3937393 852 3180085 3180290 3937882 3938087 412 3180465 3180677 3938262 3938474 426 3182294 3182982 3940091 3940779 1378 3189914 3190126 3941146 3941358 426 3191023 3191357 3942255 3942589 670 3193642 3194308 3945248 3945914 1334 3194640 3194932 3946246 3946538 586 3195231 3195601 3946837 3947207 742 3196380 3196710 3947986 3948316 662 3197240 3197516 3948846 3949122 554 3197518 3197720 3949124 3949326 406 3197829 3198119 3949435 3949725 582 3198565 3198932 3950171 3950538 736 3198983 3199325 3950589 3950931 686 3199381 3199604 3950987 3951210 448 3200311 3200765 3951917 3952371 910 3200929 3201288 3952535 3952894 720 3201523 3201790 3953129 3953396 536 3202490 3202878 3954098 3954486 778 3203844 3204146 3955452 3955754 606 3204148 3204413 3955756 3956021 532 3206894 3207129 3958503 3958738 472 3207164 3207364 3958773 3958973 402 3208065 3208985 3959674 3960594 1842 3209410 3209690 3961019 3961299 562 3209935 3210217 3961544 3961826 566 3210362 3211357 3961971 3962966 1992 3211860 3212062 3963469 3963671 406 3212073 3212317 3963682 3963926 490 3212969 3213384 3964578 3964993 832 3213386 3213675 3964995 3965284 580 3216091 3216301 3967700 3967910 422 3216321 3216588 3967930 3968197 536 3216590 3216827 3968199 3968436 476 3218904 3219257 3970513 3970866 708 3219430 3219860 3971039 3971469 862 3220178 3220382 3971787 3971991 410 3220699 3221095 3972308 3972704 794 3221098 3221375 3972707 3972984 556 3221665 3221879 3973274 3973488 430 3223413 3223624 3975022 3975233 424 3223767 3224178 3975376 3975787 824 3224945 3225207 3976554 3976816 526 3225341 3225550 3976950 3977159 420 3231339 3231637 3982948 3983246 598 3231818 3232017 3983427 3983626 400 3232665 3232876 3984274 3984485 424 3233117 3233332 3984726 3984941 432 3233357 3233892 3984966 3985501 1072 3236878 3237119 3988487 3988728 484 3237429 3237848 3989040 3989459 840 3239079 3239395 3990690 3991006 634 3239947 3240491 3991558 3992102 1090 3240904 3241176 3992515 3992787 546 3241718 3242053 3993329 3993664 672 3242055 3242325 3993666 3993936 542 3242588 3243275 3994200 3994887 1376 3243502 3243917 3995114 3995529 832 3244186 3244391 3995798 3996003 412 3245094 3246040 3996706 3997652 1894 3246042 3246313 3997654 3997925 544 3246641 3247195 3998253 3998807 1110 3247819 3248046 3999431 3999658 456 3248348 3248660 3999960 4000272 626 3248662 3248946 4000274 4000558 570 3249840 3250148 4001450 4001758 618 3250565 3251112 4002174 4002721 1096 3251458 3251673 4003067 4003282 432 3251774 3252130 4003383 4003739 714 3253092 3253375 4004701 4004984 568 3253503 3253740 4005112 4005349 476 3253993 3254348 4005601 4005956 712 3255615 3255842 4007221 4007448 456 3256405 3256625 4008011 4008231 442 3256891 3257382 4008498 4008989 984 3259241 3259464 4010849 4011072 448 3260420 3260640 4012028 4012248 442 3260751 3261063 4012359 4012671 626 3261585 3261826 4013193 4013434 484 3261954 3262468 4013562 4014076 1030 3262470 3263170 4014078 4014778 1402 3263460 3263949 4015068 4015557 980 3263951 3264240 4015559 4015848 580 3264266 3264489 4015874 4016097 448 3264527 3264807 4016135 4016415 562 3264849 3265062 4016457 4016670 428 3265251 3265513 4016859 4017121 526 3266461 3266670 4018069 4018278 420 3267784 3268504 4018998 4019718 1442 3268674 3269035 4019888 4020249 724 3269292 3269587 4020506 4020801 592 3269589 3269983 4020803 4021197 790 3269985 3270250 4021199 4021464 532 3270252 3270708 4021466 4021922 914 3271034 3271275 4022248 4022489 484 3271469 3271701 4022683 4022915 466 3272144 3272367 4023358 4023581 448 3272372 3272594 4023586 4023808 446 3273375 3273701 4024589 4024915 654 3274479 3274820 4025693 4026034 684 3274865 3275107 4026079 4026321 486 3275713 3275975 4026927 4027189 526 3276647 3276864 4027861 4028078 436 3276866 3277286 4028080 4028500 842 3277530 3277854 4028744 4029068 650 3277956 3278194 4029170 4029408 478 3279503 3279704 4033022 4033223 404 3280091 3280307 4033610 4033826 434 3280515 3280799 4034034 4034318 570 3281503 3281717 4035022 4035236 430 3282107 3282345 4035626 4035864 478 3282376 3282608 4035895 4036127 466 3282964 3283206 4036483 4036725 486 3283283 3283638 4036802 4037157 712 3284201 3284402 4037720 4037921 404 3286661 3286910 4040180 4040429 500 3287555 3287899 4041074 4041418 690 3288084 3288288 4041603 4041807 410 3288551 3288909 4042070 4042428 718 3289062 3289305 4042581 4042824 488 3289655 3289855 4044132 4044332 402 3289877 3290113 4044354 4044590 474 3290115 3290582 4044592 4045059 936 3290755 3291112 4045232 4045589 716 3291114 3291324 4045591 4045801 422 3291448 3291914 4045925 4046391 934 3294415 3294681 4048892 4049158 534 3295677 3295895 4050154 4050372 438 3296398 3296801 4050875 4051278 808 3297543 3297742 4052020 4052219 400 3298340 3298676 4052817 4053153 674 3298774 3299360 4053251 4053837 1174 3299731 3299948 4054208 4054425 436 3300663 3300927 4055140 4055404 530 3300929 3301158 4055406 4055635 460 3302463 3302684 4056939 4057160 444 3302991 3303501 4057467 4057977 1022 3305400 3306657 4059876 4061133 2516 3306659 3306903 4061135 4061379 490 3307568 3307857 4062044 4062333 580 3308687 3309085 4063163 4063561 798 3309087 3309496 4063563 4063972 820 3311453 3311752 4065930 4066229 600 3311877 3312139 4066354 4066616 526 3312567 3312796 4067044 4067273 460 3313095 3314016 4067572 4068493 1844 3314043 3314317 4068520 4068794 550 3314619 3314848 4069096 4069325 460 3314994 3315210 4069471 4069687 434 3315237 3315882 4069714 4070359 1292 3316069 3316332 4070546 4070809 528 3316334 3316671 4070811 4071148 676 3317022 3317247 4071499 4071724 452 3317926 3318211 4072403 4072688 572 3319575 3319803 4074052 4074280 458 3320704 3320981 4075181 4075458 556 3321517 3321738 4075994 4076215 444 3321794 3322098 4076271 4076575 610 3322373 3322738 4076850 4077215 732 3322740 3323120 4077217 4077597 762 3323296 3323579 4077773 4078056 568 3323791 3324010 4078268 4078487 440 3324289 3325821 4078766 4080298 3066 3326435 3326781 4080912 4081258 694 3327152 3327606 4081629 4082083 910 3328286 3328491 4082617 4082822 412 3328573 3328944 4082904 4083275 744 3329138 3329874 4083469 4084205 1474 3330017 3330222 4084348 4084553 412 3330305 3331594 4084636 4085925 2580 3332630 3332940 4086962 4087272 622 3332942 3333168 4087274 4087500 454 3333452 3333675 4087784 4088007 448 3334040 3334683 4088372 4089015 1288 3335272 3335486 4089604 4089818 430 3335488 3335690 4089820 4090022 406 3336004 3336375 4090336 4090707 744 3336407 3336708 4090739 4091040 604 3336954 3337849 4091286 4092181 1792 3337851 3338073 4092183 4092405 446 3338209 3338606 4092541 4092938 796 3338608 3339078 4092940 4093410 942 3339276 3339588 4093608 4093920 626 3339755 3339998 4094087 4094330 488 3340842 3341126 4095174 4095458 570 3341254 3341495 4095586 4095827 484 3341503 3341792 4095835 4096124 580 3342146 3342691 4096478 4097023 1092 3343431 3343684 4097763 4098016 508 3343782 3344130 4098114 4098462 698 3344132 3344351 4098464 4098683 440 3344464 3344685 4098796 4099017 444 3344687 3344999 4099019 4099331 626 3345364 3345610 4099696 4099942 494 3345711 3345964 4100043 4100296 508 3347531 3347774 4101863 4102106 488 3348585 3348874 4102918 4103207 580 3349350 3349750 4103689 4104089 802 3350193 3350608 4104532 4104947 832 3350610 3350865 4104949 4105204 512 3350867 3351138 4105206 4105477 544 3352255 3352513 4106593 4106851 518 3353622 3354112 4107960 4108450 982 3356796 3357073 4111134 4111411 556 3366139 3366442 4113372 4113675 608 3367797 3368028 4115030 4115261 464 3370165 3370385 4117398 4117618 442 3370660 3371060 4117893 4118293 802 3371161 3371361 4118394 4118594 402 3371849 3372422 4119082 4119655 1148 3373076 3373278 4120306 4120508 406 3373962 3374538 4121184 4121760 1154 3374755 3375128 4121977 4122350 748 3375420 3375673 4122642 4122895 508 3375711 3376496 4122933 4123718 1572 3376514 3376845 4123736 4124067 664 3377243 3377442 4124465 4124664 400 3377618 3378057 4124840 4125279 880 3378059 3378453 4125281 4125675 790 3379305 3379767 4126527 4126989 926 3379769 3379970 4126991 4127192 404 3379972 3380294 4127194 4127516 646 3381775 3382057 4128998 4129280 566 3382203 3382584 4129426 4129807 764 3382900 3383770 4130123 4130993 1742 3384948 3385674 4132172 4132898 1454 3386228 3386538 4133452 4133762 622 3386569 3386877 4133790 4134098 618 3386989 3387192 4134210 4134413 408 3387265 3387626 4134486 4134847 724 3387934 3388145 4135155 4135366 424 3388256 3388744 4135477 4135965 978 3389365 3389594 4136586 4136815 460 3390014 3390275 4136960 4137221 524 3390277 3390599 4137223 4137545 646 3392293 3392512 4139239 4139458 440 3392557 3392786 4139503 4139732 460 3392788 3393011 4139734 4139957 448 3393173 3393450 4140118 4140395 556 3393686 3394084 4140631 4141029 798 3394140 3394555 4141085 4141500 832 3395220 3395510 4142165 4142455 582 3395701 3396052 4142646 4142997 704 3396054 3396358 4142999 4143303 610 3396638 3396948 4143583 4143893 622 3397136 3397383 4144081 4144328 496 3397399 3397658 4144344 4144603 520 3397963 3398162 4144908 4145107 400 3398383 3398994 4145328 4145939 1224 3399308 3399660 4146253 4146605 706 3399662 3399972 4146607 4146917 622 3399974 3400293 4146919 4147238 640 3400295 3400512 4147240 4147457 436 3400791 3401694 4147736 4148639 1808 3401774 3402104 4148719 4149049 662 3402738 3402963 4149683 4149908 452 3402965 3403364 4149910 4150309 800 3403366 3404046 4150311 4150991 1362 3404282 3404908 4151227 4151853 1254 3405498 3405850 4152443 4152795 706 3406435 3406830 4153380 4153775 792 3407033 3407362 4153978 4154307 660 3407602 3409217 4154547 4156162 3232 3409487 3409824 4156431 4156768 676 3409826 3410193 4156770 4157137 736 3410195 3410933 4157139 4157877 1478 3411367 3411948 4158311 4158892 1164 3412181 3412416 4159125 4159360 472 3412553 3412778 4159497 4159722 452 3412780 3413087 4159724 4160031 616 3413710 3413969 4160654 4160913 520 3415878 3416189 4162867 4163178 624 3417604 3418404 4164594 4165394 1602 3418988 3419228 4165979 4166219 482 3419651 3419918 4166642 4166909 536 3420023 3420385 4167014 4167376 726 3421119 3421407 4168109 4168397 578 3421879 3422207 4168871 4169199 658 3422696 3423208 4169687 4170199 1026 3423250 3423832 4170241 4170823 1166 3423878 3424155 4170871 4171148 556 3424157 3424431 4171150 4171424 550 3424482 3426125 4171484 4173127 3288 3426321 3426619 4173323 4173621 598 3426774 3427305 4173775 4174306 1064 3428346 3429032 4175347 4176033 1374 3429282 3429525 4176283 4176526 488 3430001 3430287 4177001 4177287 574 3430453 3430789 4177454 4177790 674 3431126 3431537 4178127 4178538 824 3431698 3432088 4178699 4179089 782 3432565 3432830 4179566 4179831 532 3432832 3433035 4179833 4180036 408 3434766 3434974 4181767 4181975 418 3435183 3435478 4182184 4182479 592 3435480 3435757 4182481 4182758 556 3436077 3436279 4183078 4183280 406 3437201 3439353 4184202 4186354 4306 3439355 3441199 4186356 4188200 3690 3441372 3441946 4188373 4188947 1150 3441948 3442484 4188949 4189485 1074 3442567 3445133 4189568 4192134 5134 3445135 3445932 4192136 4192933 1596 3445934 3446766 4192935 4193767 1666 3446768 3447008 4193769 4194009 482 3447010 3447961 4194011 4194962 1904 3447963 3448448 4194964 4195449 972 3448621 3450172 4195622 4197173 3104 3450174 3451090 4197175 4198091 1834 3467941 3468347 4199836 4200242 814 3468373 3468755 4200268 4200650 766 3468757 3469776 4200652 4201671 2040 3469778 3470013 4201673 4201908 472 3470015 3470337 4201910 4202232 646 3470339 3470712 4202234 4202607 748 3470837 3471247 4202732 4203142 822 3471249 3472330 4203144 4204225 2164 3473266 3474010 4205161 4205905 1490 3474012 3474340 4205907 4206235 658 3474751 3474955 4206646 4206850 410 3475166 3475532 4207061 4207427 734 3475706 3476308 4207601 4208203 1206 3478532 3479001 4210427 4210896 940 3479003 3479205 4210898 4211100 406 3479381 3479787 4211276 4211682 814 3480317 3480531 4212212 4212426 430 3480674 3480892 4212569 4212787 438 3481588 3482044 4213483 4213939 914 3483129 3483391 4215024 4215286 526 3483405 3483901 4215300 4215796 994 3483903 3484103 4215798 4215998 402 3484812 3485304 4216707 4217199 986 3486203 3486522 4218098 4218417 640 3487530 3487738 4219425 4219633 418 3488086 3488312 4219981 4220207 454 3489056 3489588 4220951 4221483 1066 3489620 3490343 4221515 4222238 1448 3490345 3490778 4222240 4222673 868 3491552 3491969 4223447 4223864 836 3492244 3492530 4224139 4224425 574 3493357 3493806 4225252 4225701 900 3494018 3494564 4225913 4226459 1094 3494566 3494775 4226461 4226670 420 3495233 3495786 4227128 4227681 1108 3497732 3497962 4229636 4229866 462 3498221 3498495 4230125 4230399 550 3500412 3500638 4232316 4232542 454 3502130 3502383 4234034 4234287 508 3511022 3511224 4235206 4235408 406 3511226 3511429 4235410 4235613 408 3511479 3511726 4235663 4235910 496 3512254 3512477 4236438 4236661 448 3512572 3512884 4236756 4237068 626 3513156 3513713 4237340 4237897 1116 3513715 3513932 4237899 4238116 436 3514385 3515230 4238569 4239414 1692 3515240 3515540 4239424 4239724 602 3515918 3516383 4240102 4240567 932 3516385 3516757 4240569 4240941 746 3516759 3516985 4240943 4241169 454 3516987 3517215 4241171 4241399 458 3517217 3517614 4241401 4241798 796 3517616 3517842 4241800 4242026 454 3518195 3518414 4242379 4242598 440 3518416 3518675 4242600 4242859 520 3520327 3520731 4244510 4244914 810 3520965 3521184 4245148 4245367 440 3521285 3521538 4245468 4245721 508 3522164 3522606 4246347 4246789 886 3523701 3524476 4247883 4248658 1552 3524613 3524845 4248795 4249027 466 3525597 3526027 4249779 4250209 862 3526302 3526895 4250484 4251077 1188 3526994 3527511 4251176 4251693 1036 3527798 3528156 4251980 4252338 718 3529862 3530732 4254044 4254914 1742 3531598 3531959 4255780 4256141 724 3533168 3533540 4257350 4257722 746 3533605 3533840 4257787 4258022 472 3533944 3534609 4258126 4258791 1332 3534872 3535125 4259054 4259307 508 3535502 3535933 4259684 4260115 864 3537716 3538058 4261881 4262223 686 3538118 3538388 4262283 4262553 542 3538720 3538988 4262885 4263153 538 3539188 3539423 4263353 4263588 472 3542064 3542270 4266227 4266433 414 3543166 3543377 4267329 4267540 424 3544363 3544621 4268530 4268788 518 3545028 3545338 4269195 4269505 622 3546156 3546421 4270257 4270522 532 3547430 3547650 4271531 4271751 442 3547653 3548003 4271754 4272104 702 3548005 3548356 4272106 4272457 704 3548687 3548920 4272788 4273021 468 3549389 3549652 4273490 4273753 528 3549996 3550236 4274097 4274337 482 3550457 3550734 4274558 4274835 556 3550966 3551195 4275067 4275296 460 3551197 3551564 4275298 4275665 736 3551566 3551783 4275667 4275884 436 3552517 3552752 4276618 4276853 472 3557336 3557543 4282277 4282484 416 3557579 3557826 4282520 4282767 496 3558241 3558696 4283182 4283637 912 3558933 3559148 4283874 4284089 432 3559415 3559617 4284356 4284558 406 3559675 3559992 4284616 4284933 636 3560557 3560792 4285498 4285733 472 3561803 3562239 4289596 4290032 874 3562646 3563634 4290439 4291427 1978 3563858 3564327 4291651 4292120 940 3564329 3564567 4292122 4292360 478 3564976 3565428 4292769 4293221 906 3565472 3566159 4293265 4293952 1376 3566161 3566576 4293954 4294369 832 3566584 3567271 4294377 4295064 1376 3567273 3567496 4295066 4295289 448 3567597 3567963 4295390 4295756 734 3568254 3568461 4296047 4296254 416 3568479 3569058 4296272 4296851 1160 3569644 3569895 4297437 4297688 504 3570512 3570762 4298305 4298555 502 3570926 3571649 4298719 4299442 1448 3571651 3571952 4299444 4299745 604 3572002 3572237 4299795 4300030 472 3572517 3572896 4300309 4300688 760 3574565 3574895 4305813 4306143 662 3576061 3576403 4307310 4307652 686 3577052 3577403 4308301 4308652 704 3577465 3577691 4308714 4308940 454 3582685 3582946 4312337 4312598 524 3587802 3588115 4317457 4317770 628 3588568 3588968 4318224 4318624 802 3589765 3590102 4319421 4319758 676 3590901 3591116 4321383 4321598 432 3591778 3592015 4322260 4322497 476 3594259 3594815 4324741 4325297 1114 3596756 3597003 4327997 4328244 496 3597005 3597336 4328246 4328577 664 3597836 3598095 4329077 4329336 520 3598136 3598539 4329377 4329780 808 3598541 3598741 4329782 4329982 402 3600034 3600616 4331275 4331857 1166 3601152 3601384 4332393 4332625 466 3601778 3602255 4333022 4333499 956 3603197 3603546 4334441 4334790 700 3603984 3604316 4335228 4335560 666 3605752 3606017 4336996 4337261 532 3606688 3606959 4337932 4338203 544 3607216 3607919 4338460 4339163 1408 3609449 3610027 4340693 4341271 1158 3610194 3610474 4341438 4341718 562 3610579 3610791 4357178 4357390 426 3611118 3611583 4357717 4358182 932 3612710 3613064 4359309 4359663 710 3626702 3626958 4373174 4373430 514 3628331 3628536 4374804 4375009 412 3633949 3634208 4380431 4380690 520 3634864 3635174 4381346 4381656 622 3635619 3635905 4382102 4382388 574 3636126 3636478 4382609 4382961 706 3637117 3637463 4383427 4383773 694 3638371 3638672 4384682 4384983 604 3639178 3639518 4385489 4385829 682 3640481 3641041 4386792 4387352 1122 3642959 3643204 4389270 4389515 492 3644078 3644298 4390389 4390609 442 3647398 3647657 4393713 4393972 520 3647716 3647954 4394031 4394269 478 3647956 3648162 4394271 4394477 414 3649454 3649665 4395768 4395979 424 3651810 3652304 4396924 4397418 990 3652306 3652647 4397420 4397761 684 3652939 3653149 4407075 4407285 422 3653920 3654673 4408056 4408809 1508 3654825 3655199 4408961 4409335 750 3655965 3656738 4410101 4410874 1548 3656740 3656944 4410876 4411080 410 3656993 3657606 4411129 4411742 1228 3657893 3658191 4412029 4412327 598 3659093 3659319 4413229 4413455 454 3659321 3659565 4413457 4413701 490 3660257 3660621 4414393 4414757 730 3660857 3661098 4414993 4415234 484 3661745 3662009 4415881 4416145 530 3662409 3662640 4416545 4416776 464 3663766 3664057 4417903 4418194 584 3665082 3665317 4419219 4419454 472 3666000 3666247 4420137 4420384 496 3666534 3667018 4420671 4421155 970 3667554 3667966 4421692 4422104 826 3668010 3668215 4422148 4422353 412 3668721 3669160 4422859 4423298 880 3669276 3669631 4423414 4423769 712 3671681 3672018 4425819 4426156 676 3672508 3672758 4426647 4426897 502 3672949 3673647 4427088 4427786 1398 3673649 3673917 4427788 4428056 538 3674645 3674941 4428784 4429080 594 3675309 3675547 4429448 4429686 478 3675870 3676138 4430009 4430277 538 3676916 3677337 4431055 4431476 844 3677402 3677646 4431541 4431785 490 3677652 3677869 4431791 4432008 436 3678398 3678627 4432537 4432766 460 3678911 3679113 4433050 4433252 406 3679160 3679838 4433299 4433977 1358 3679840 3681206 4433979 4435345 2734 3681735 3682160 4435874 4436299 852 3682412 3682652 4436551 4436791 482 3683081 3683427 4437220 4437566 694 3685228 3685473 4439367 4439612 492 3685475 3685803 4439614 4439942 658 3686446 3686649 4440575 4440778 408 3688282 3688563 4442430 4442711 564 3688836 3689035 4442984 4443183 400 3689145 3689410 4443293 4443558 532 3690180 3690839 4444328 4444987 1320 3690937 3691169 4445085 4445317 466 3691954 3692210 4446102 4446358 514 3693101 3693406 4447249 4447554 612 3693748 3693984 4447896 4448132 474 3693986 3694370 4448134 4448518 770 3694620 3695510 4448768 4449658 1782 3695512 3695799 4449660 4449947 576 3695801 3696012 4449949 4450160 424 3696029 3696599 4450177 4450747 1142 3697983 3698208 4452131 4452356 452 3699097 3699323 4453245 4453471 454 3701424 3701642 4455572 4455790 438 3703997 3704288 4457988 4458279 584 3705185 3705574 4459176 4459565 780 3706198 3706409 4460023 4460234 424 3707862 3708145 4461687 4461970 568 3709603 3709837 4469181 4469415 470 3709933 3710247 4469511 4469825 630 3710513 3710802 4470091 4470380 580 3711750 3711960 4471328 4471538 422 3712392 3712779 4471970 4472357 776 3713289 3713821 4472867 4473399 1066 3714020 3714404 4473598 4473982 770 3714676 3715104 4474254 4474682 858 3716329 3716842 4475907 4476420 1028 3716983 3717762 4476561 4477340 1560 3719705 3719938 4477879 4478112 468 3720338 3720573 4478512 4478747 472 3721244 3721503 4479418 4479677 520 3721646 3721911 4479820 4480085 532 3722279 3722535 4480453 4480709 514 3722805 3723019 4480979 4481193 430 3723075 3723281 4481249 4481455 414 3724433 3724962 4482607 4483136 1060 3726176 3726658 4484350 4484832 966 3727281 3727646 4485455 4485820 732 3728290 3728727 4486464 4486901 876 3728729 3729240 4486903 4487414 1024 3729276 3729480 4487450 4487654 410 3730090 3730365 4488264 4488539 552 3730367 3730695 4488541 4488869 658 3730697 3731216 4488871 4489390 1040 3731260 3731625 4489434 4489799 732 3732559 3733019 4490733 4491193 922 3734584 3734939 4492670 4493025 712 3735668 3736147 4493754 4494233 960 3737155 3737386 4495241 4495472 464 3737753 3737954 4495839 4496040 404 3738089 3738313 4496175 4496399 450 3738729 3739059 4496816 4497146 662 3748776 3749229 4502112 4502565 908 3749543 3749793 4502879 4503129 502 3749867 3750081 4503203 4503417 430 3750437 3750638 4503773 4503974 404 3751517 3751877 4504853 4505213 722 3753515 3753815 4506851 4507151 602 3754605 3754847 4509312 4509554 486 3754849 3755334 4509556 4510041 972 3755627 3755831 4510333 4510537 410 3756558 3757025 4511264 4511731 936 3757315 3757756 4512021 4512462 884 3757758 3757960 4512464 4512666 406 3758007 3758515 4512713 4513221 1018 3758517 3759460 4513223 4514166 1888 3759462 3759711 4514168 4514417 500 3759827 3760224 4514534 4514931 796 3760533 3760761 4515240 4515468 458 3760763 3760987 4515470 4515694 450 3761284 3761599 4515991 4516306 632 3762518 3762777 4517225 4517484 520 3762983 3763182 4517690 4517889 400 3763553 3764842 4518260 4519549 2580 3765234 3765545 4519941 4520252 624 3765547 3766040 4520254 4520747 988 3766051 3766618 4520758 4521325 1136 3766620 3767143 4521327 4521850 1048 3767145 3767393 4521852 4522100 498 3767458 3767795 4522164 4522501 676 3767797 3768183 4522503 4522889 774 3768185 3768870 4522891 4523576 1372 3768872 3769090 4523578 4523796 438 3769261 3770371 4523967 4525077 2222 3770373 3770664 4525079 4525370 584 3771966 3772192 4526537 4526763 454 3773138 3773352 4527709 4527923 430 3773755 3774162 4528326 4528733 816 3776036 3776244 4536639 4536847 418 3776321 3776625 4536924 4537228 610 3776947 3777179 4537550 4537782 466 3777313 3777589 4537916 4538192 554 3779808 3780062 4540399 4540653 510 3780064 3780305 4540655 4540896 484 3780713 3780996 4541304 4541587 568 3780998 3781418 4541589 4542009 842 3781555 3781957 4542146 4542548 806 3782118 3782419 4542709 4543010 604 3782421 3782750 4543012 4543341 660 3783726 3784069 4544317 4544660 688 3784331 3784597 4544922 4545188 534 3784602 3785323 4545193 4545914 1444 3786381 3786723 4546972 4547314 686 3786899 3787272 4547491 4547864 748 3787546 3787831 4548138 4548423 572 3788790 3789016 4549382 4549608 454 3790002 3790241 4550594 4550833 480 3790278 3790613 4550870 4551205 672 3790615 3790857 4551207 4551449 486 3790859 3791332 4551451 4551924 948 3791360 3792067 4551953 4552660 1416 3792429 3792778 4553022 4553371 700 3792963 3793216 4553556 4553809 508 3793926 3794477 4554519 4555070 1104 3806077 3806356 4563696 4563975 560 3806403 3806707 4564022 4564326 610 3807195 3807668 4564814 4565287 948 3807670 3808145 4565289 4565764 952 3808147 3808399 4565766 4566018 506 3808401 3809444 4566020 4567063 2088 3809482 3809771 4567101 4567390 580 3810342 3810545 4567961 4568164 408 3810547 3810967 4568166 4568586 842 3810969 3811665 4568588 4569284 1394 3812609 3812917 4570228 4570536 618 3813764 3814814 4571384 4572434 2102 3815632 3815848 4573252 4573468 434 3816575 3816783 4574197 4574405 418 3816812 3817209 4574434 4574831 796 3818185 3818485 4575807 4576107 602 3818930 3819433 4576552 4577055 1008 3819549 3820522 4577171 4578144 1948 3820524 3820735 4578146 4578357 424 3821010 3821278 4578632 4578900 538 3821979 3822839 4579601 4580461 1722 3822841 3823159 4580463 4580781 638 3823161 3823491 4580783 4581113 662 3825126 3825420 4583433 4583727 590 3825941 3826140 4584248 4584447 400 3826241 3827247 4584548 4585554 2014 3827315 3828008 4585622 4586315 1388 3828323 3828528 4586630 4586835 412 3828546 3828753 4586853 4587060 416 3829026 3829300 4587333 4587607 550 3829302 3829506 4587609 4587813 410 3832228 3832565 4590535 4590872 676 3833074 3833285 4591381 4591592 424 3833441 3833715 4591748 4592022 550 3833730 3833942 4592037 4592249 426 3835805 3836025 4635899 4636119 442 3838874 3839110 4638968 4639204 474 3839922 3840164 4640815 4641057 486 3840577 3840788 4641469 4641680 424 3841117 3841531 4642009 4642423 830 3842055 3842270 4642947 4643162 432 3844483 3844769 4645375 4645661 574 3850393 3850610 4654628 4654845 436 3853134 3853392 4657369 4657627 518 3853647 3853982 4657882 4658217 672 3854970 3855221 4659206 4659457 504 3855564 3855796 4659800 4660032 466 3856044 3856428 4660280 4660664 770 3857119 3857364 4661355 4661600 492 3857692 3857927 4661928 4662163 472 3858746 3859020 4662982 4663256 550 3859488 3859690 4664232 4664434 406 3860661 3860920 4665405 4665664 520 3860922 3861384 4665666 4666128 926 3862311 3862512 4667055 4667256 404 3862995 3863329 4667739 4668073 670 3864047 3864436 4668791 4669180 780 3864714 3865269 4669458 4670013 1112 3873101 3873357 4673094 4673350 514 3873359 3873625 4673352 4673618 534 3874008 3874337 4674000 4674329 660 3875486 3875697 4675478 4675689 424 3877490 3877873 4677482 4677865 768 3877884 3878092 4677876 4678084 418 3879782 3880017 4679774 4680009 472 3880497 3880882 4680489 4680874 772 3880884 3881112 4680876 4681104 458 3881114 3881481 4681106 4681473 736 3881784 3882402 4681775 4682393 1238 3882404 3882683 4682395 4682674 560 3882685 3883000 4682676 4682991 632 3883532 3883858 4683523 4683849 654 3883860 3884079 4683851 4684070 440 3884159 3884426 4684150 4684417 536 3887960 3888289 4690425 4690754 660 3891377 3891750 4693842 4694215 748 3892613 3892818 4695078 4695283 412 3893186 3893391 4695651 4695856 412 3905045 3905429 4705510 4705894 770 3907598 3907833 4708063 4708298 472 3908983 3909240 4709448 4709705 516 3911180 3911441 4718382 4718643 524 3912307 3912572 4719509 4719774 532 3912787 3913008 4719989 4720210 444 3913071 3913378 4720272 4720579 616 3913380 3914138 4720581 4721339 1518 3914140 3914342 4721341 4721543 406 3914443 3914774 4721644 4721975 664 3914848 3916092 4722049 4723293 2490 3916211 3916485 4723412 4723686 550 3916700 3916965 4723901 4724166 532 3916967 3917247 4724168 4724448 562 3917273 3917733 4724474 4724934 922 3917861 3919833 4725062 4727034 3946 3919835 3920254 4727036 4727455 840 3920256 3920953 4727457 4728154 1396 3921084 3921346 4728285 4728547 526 3921557 3921943 4728758 4729144 774 3922075 3922345 4729276 4729546 542 3923190 3923401 4730391 4730602 424 3924356 3924810 4731557 4732011 910 3924947 3925200 4732148 4732401 508 3925721 3925958 4732922 4733159 476 3928391 3928805 4735593 4736007 830 3928807 3929180 4736009 4736382 748 3929182 3929417 4736384 4736619 472 3929869 3930141 4737071 4737343 546 3930676 3930940 4737879 4738143 530 3930942 3931172 4738145 4738375 462 3931174 3931620 4738377 4738823 894 3932054 3932535 4739257 4739738 964 3932573 3933133 4739776 4740336 1122 3933261 3933512 4740464 4740715 504 3933609 3934150 4740812 4741353 1084 3934479 3934711 4741682 4741914 466 3934713 3935109 4741916 4742312 794 3935165 3935694 4742368 4742897 1060 3935747 3936714 4742950 4743917 1936 3937378 3937780 4744581 4744983 806 3937782 3938147 4744985 4745350 732 3938339 3938586 4745542 4745789 496 3938726 3938953 4745932 4746159 456 3939656 3940429 4746862 4747635 1548 3940467 3940849 4747673 4748055 766 3941290 3941587 4748496 4748793 596 3941876 3942495 4749083 4749702 1240 3942537 3943049 4749743 4750255 1026 3943061 3943705 4750267 4750911 1290 3943851 3944118 4751057 4751324 536 3944336 3944674 4751541 4751879 678 3944802 3945035 4752007 4752240 468 3945350 3945775 4752556 4752981 852 3946383 3946652 4753589 4753858 540 3947539 3947758 4754745 4754964 440 3947893 3948155 4755099 4755361 526 3949865 3950206 4757073 4757414 684 3950601 3950815 4757809 4758023 430 3951168 3951462 4758379 4758673 590 3953182 3953508 4760393 4760719 654 3954320 3954533 4761534 4761747 428 3955253 3955479 4762467 4762693 454 3957900 3958491 4765080 4765671 1184 3958966 3959213 4766146 4766393 496 3959407 3959684 4766587 4766864 556 3960040 3960576 4767220 4767756 1074 3960579 3961420 4767759 4768600 1684 3961588 3961828 4768768 4769008 482 3961830 3962173 4769010 4769353 688 3962188 3962389 4769368 4769569 404 3962454 3962761 4769634 4769941 616 3963037 3963652 4770217 4770832 1232 3963654 3964503 4770834 4771683 1700 3965149 3965452 4772329 4772632 608 3965454 3965663 4772634 4772843 420 3965878 3966125 4773058 4773305 496 3966524 3967018 4773704 4774198 990 3967020 3967264 4774200 4774444 490 3967437 3967796 4774617 4774976 720 3967798 3968030 4774978 4775210 466 3969369 3970114 4776552 4777297 1492 3971252 3971598 4778435 4778781 694 3972240 3972529 4779423 4779712 580 3972638 3973086 4779821 4780269 898 3973882 3974154 4781065 4781337 546 3974559 3974824 4781742 4782007 532 3975080 3975311 4782263 4782494 464 3976549 3976943 4783731 4784125 790 3977350 3977590 4784532 4784772 482 3978430 3978700 4785612 4785882 542 3978702 3978920 4785884 4786102 438 3979246 3979463 4786428 4786645 436 3979950 3980813 4787132 4787995 1728 3983060 3983408 4790252 4790600 698 3983798 3984254 4790991 4791447 914 3984350 3985017 4791543 4792210 1336 3985785 3985988 4792996 4793199 408 3985990 3986378 4793201 4793589 778 3986526 3986898 4793737 4794109 746 3987329 3987584 4794540 4794795 512 3988758 3989024 4795970 4796236 534 3989842 3990281 4797054 4797493 880 3990574 3990824 4797786 4798036 502 3991069 3991298 4798281 4798510 460 3994640 3994891 4801852 4802103 504 3998658 3999242 4806754 4807338 1170 3999244 3999506 4807340 4807602 526 4001721 4001947 4811588 4811814 454 4002078 4002350 4811945 4812217 546 4002433 4002653 4812300 4812520 442 4002679 4002974 4812546 4812841 592 4002976 4003592 4812843 4813459 1234 4003651 4004132 4813518 4813999 964 4004500 4004978 4814367 4814845 958 4006636 4006971 4816508 4816843 672 4007150 4007604 4817022 4817476 910 4007907 4008189 4817781 4818063 566 4009409 4009691 4819297 4819579 566 4010714 4011133 4820601 4821020 840 4012706 4013140 4822593 4823027 870 4013300 4013716 4823188 4823604 834 4013892 4014726 4823782 4824616 1670 4014737 4015625 4824627 4825515 1778 4015657 4015934 4825547 4825824 556 4016125 4016741 4826015 4826631 1234 4016743 4017305 4826633 4827195 1126 4017548 4017783 4827438 4827673 472 4017785 4018011 4827675 4827901 454 4018598 4018800 4828488 4828690 406 4018898 4019521 4828788 4829411 1248 4019523 4019855 4829413 4829745 666 4019861 4020179 4829749 4830067 638 4020181 4020673 4830069 4830561 986 4020843 4021207 4830731 4831095 730 4021209 4021554 4831097 4831442 692 4021683 4021942 4831570 4831829 520 4022289 4022618 4832176 4832505 660 4023615 4023844 4833502 4833731 460 4024014 4024270 4833901 4834157 514 4024386 4024747 4834273 4834634 724 4028184 4028599 4837882 4838297 832 4030642 4030915 4840340 4840613 548 4031326 4031698 4841024 4841396 746 4032014 4032255 4841713 4841954 484 4032514 4032788 4842213 4842487 550 4033458 4033856 4843160 4843558 798 4033858 4034119 4843560 4843821 524 4034157 4034674 4843859 4844376 1036 4034682 4035035 4844384 4844737 708 4035648 4036270 4845361 4845983 1246 4036272 4036751 4845985 4846464 960 4036971 4037300 4846682 4847011 660 4037310 4037891 4847021 4847602 1164 4038498 4039102 4848038 4848642 1210 4039724 4039958 4849264 4849498 470 4040674 4040905 4850213 4850444 464 4040907 4041365 4850446 4850904 918 4041665 4042311 4851205 4851851 1294 4042313 4042580 4851853 4852120 536 4042808 4043242 4852348 4852782 870 4043940 4044491 4853480 4854031 1104 4044493 4044810 4854033 4854350 636 4045175 4045638 4854715 4855178 928 4046696 4047212 4856236 4856752 1034 4047348 4047597 4856889 4857138 500 4048169 4048373 4857710 4857914 410 4048529 4048757 4858070 4858298 458 4049515 4049832 4859053 4859370 636 4050350 4050549 4859888 4860087 400 4050551 4050882 4860089 4860420 664 4052298 4052503 4861797 4862002 412 4052784 4053048 4862283 4862547 530 4053818 4054023 4863317 4863522 412 4055063 4055292 4864450 4864679 460 4055827 4056695 4865214 4866082 1738 4056823 4057370 4866210 4866757 1096 4057496 4057758 4866883 4867145 526 4057779 4058383 4867167 4867771 1210 4058682 4058912 4868070 4868300 462 4058914 4059128 4868302 4868516 430 4059990 4060374 4869378 4869762 770 4065903 4066156 4875289 4875542 508 4070076 4070469 4880235 4880628 788 4071254 4071466 4881413 4881625 426 4072146 4072369 4882305 4882528 448 4073229 4073457 4883388 4883616 458 4073818 4074128 4883977 4884287 622 4074145 4074371 4884304 4884530 454 4074451 4074664 4884610 4884823 428 4074666 4075524 4884825 4885683 1718 4075844 4076090 4886003 4886249 494 4076865 4077144 4889090 4889369 560 4078137 4078378 4890361 4890602 484 4078380 4078660 4890604 4890884 562 4078874 4079490 4891098 4891714 1234 4079740 4080014 4891964 4892238 550 4080655 4081100 4892879 4893324 892 4082241 4082495 4894465 4894719 510 4082650 4083118 4894874 4895342 938 4083120 4083610 4895344 4895834 982 4083612 4083818 4895836 4896042 414 4083823 4084085 4896047 4896309 526 4084114 4084446 4896338 4896670 666 4084924 4085191 4897148 4897415 536 4085768 4085980 4897991 4898203 426 4088405 4088620 4900628 4900843 432 4088622 4088887 4900845 4901110 532 4089204 4089568 4901415 4901779 730 4093600 4094019 4907147 4907566 840 4094283 4095506 4907830 4909053 2448 4095607 4095977 4909154 4909524 742 4097108 4097318 4910655 4910865 422 4097955 4098496 4911502 4912043 1084 4099287 4099550 4912834 4913097 528 4099936 4100150 4913483 4913697 430 4100221 4100472 4913768 4914019 504 4101847 4102396 4915394 4915943 1100 4102832 4103518 4916379 4917065 1374 4103648 4103949 4917196 4917497 604 4104111 4104346 4917659 4917894 472 4104468 4104676 4918016 4918224 418 4104678 4104886 4918226 4918434 418 4105666 4105981 4919214 4919529 632 4106308 4106567 4919855 4920114 520 4107268 4107796 4920815 4921343 1058 4108134 4108363 4921681 4921910 460 4108950 4109289 4922497 4922836 680 4109737 4110009 4923284 4923556 546 4110197 4110431 4923744 4923978 470 4110433 4110670 4923980 4924217 476 4110942 4111206 4924489 4924753 530 4112872 4113113 4926419 4926660 484 4113531 4113841 4927173 4927483 622 4114131 4114333 4927773 4927975 406 4114335 4114669 4927977 4928311 670 4115275 4115600 4928917 4929242 652 4116503 4116960 4931583 4932040 916 4117834 4118324 4932914 4933404 982 4118491 4118702 4933571 4933782 424 4118758 4119248 4933838 4934328 982 4119603 4120087 4934683 4935167 970 4120353 4120633 4935433 4935713 562 4120662 4121417 4935742 4936497 1512 4121652 4121888 4936732 4936968 474 4121923 4122259 4937003 4937339 674 4124464 4124851 4939544 4939931 776 4125654 4125980 4946126 4946452 654 4127211 4127562 4947683 4948034 704 4129938 4130145 4950410 4950617 416 4130200 4130488 4950672 4950960 578 4131927 4132171 4952399 4952643 490 4135402 4135606 4955874 4956078 410 4136436 4136795 4956908 4957267 720 4137236 4137510 4957708 4957982 550 4137555 4137781 4958027 4958253 454 4137861 4138078 4958333 4958550 436 4138590 4138819 4959062 4959291 460 4139421 4139629 4959893 4960101 418 4139953 4140262 4960426 4960735 620 4141642 4141843 4962115 4962316 404 4142728 4143062 4963201 4963535 670 4143891 4144140 4964364 4964613 500 4144322 4144545 4964795 4965018 448 4144994 4145292 4965467 4965765 598 4145384 4145652 4965857 4966125 538 4145692 4145913 4966165 4966386 444 4146763 4147047 4967236 4967520 570 4147330 4147624 4967803 4968097 590 4149229 4149642 4969703 4970116 828 4150207 4150508 4970681 4970982 604 4150552 4150888 4971026 4971362 674 4151440 4151657 4971668 4971885 436 4151809 4152222 4972037 4972450 828 4152388 4152636 4972616 4972864 498 4153810 4154138 4974038 4974366 658 4154273 4154567 4974501 4974795 590 4155818 4156348 4976046 4976576 1062 4156746 4156966 4976974 4977194 442 4157626 4158023 4977854 4978251 796 4158157 4158450 4978385 4978678 588 4158561 4158838 4981417 4981694 556 4158861 4159219 4981717 4982075 718 4160709 4161251 4983565 4984107 1086 4162354 4162742 4985210 4985598 778 4162744 4163523 4985600 4986379 1560 4163525 4163789 4986381 4986645 530 4164001 4164435 4986857 4987291 870 4164437 4164648 4987293 4987504 424 4164772 4165237 4987628 4988093 932 4165275 4165657 4988131 4988513 766 4165950 4166462 4988720 4989232 1026 4166464 4166760 4989234 4989530 594 4166769 4167388 4989541 4990160 1240 4167430 4167786 4990201 4990557 714 4168430 4168872 4991201 4991643 886 4168874 4169134 4991645 4991905 522 4170257 4170470 4992862 4993075 428 4172858 4173811 4995446 4996399 1908 4173886 4174106 4996474 4996694 442 4174116 4175013 4996704 4997601 1796 4175015 4175909 4997603 4998497 1790 4175950 4176241 4998539 4998830 584 4176243 4176538 4998832 4999127 592 4176894 4177208 4999483 4999797 630 4177351 4178584 4999819 5001052 2468 4178586 4179345 5001054 5001813 1520 4179578 4179837 5002046 5002305 520 4180073 4180287 5002541 5002755 430 4180289 4180605 5002757 5003073 634 4181117 4181358 5003585 5003826 484 4181831 4182169 5004299 5004637 678 4182488 4182726 5004956 5005194 478 4182882 4183189 5005350 5005657 616 4183488 4183996 5005956 5006464 1018 4184046 4184630 5006514 5007098 1170 4184817 4185043 5007285 5007511 454 4185045 4185443 5007513 5007911 798 4185445 4185778 5007913 5008246 668 4186344 4186612 5008812 5009080 538 4186737 4187343 5009205 5009811 1214 4187861 4188293 5010258 5010690 866 4192163 4192395 5014560 5014792 466 4192418 4192617 5014815 5015014 400 4192805 4193098 5015202 5015495 588 4194087 4194323 5016484 5016720 474 4194325 4194575 5016722 5016972 502 4195053 4195357 5017450 5017754 610 4195965 4196318 5018362 5018715 708 4197270 4197511 5019667 5019908 484 4197638 4198220 5020035 5020617 1166 4198698 4198935 5021095 5021332 476 4198943 4199582 5021340 5021979 1280 4201392 4201604 5023768 5023980 426 4204214 4204438 5026590 5026814 450 4204652 4205249 5027028 5027625 1196 4205569 4205976 5027947 5028354 816 4206137 4206386 5028515 5028764 500 4206570 4207144 5028948 5029522 1150 4207599 4207883 5029976 5030260 570 4207885 4208160 5030262 5030537 552 4208277 4208617 5030654 5030994 682 4208854 4209342 5031230 5031718 978 4209832 4210413 5032208 5032789 1164 4211637 4212090 5033606 5034059 908 4213347 4213957 5035316 5035926 1222 4213959 4214347 5035928 5036316 778 4214481 4214751 5036450 5036720 542 4217734 4217997 5039704 5039967 528 4218639 4218843 5040609 5040813 410 4220056 4220269 5042026 5042239 428 4220349 4220555 5042320 5042526 414 4220557 4220897 5042528 5042868 682 4221273 4221491 5043244 5043462 438 4222189 4222406 5044160 5044377 436 4223590 4223810 5045561 5045781 442 4224226 4224461 5046197 5046432 472 4224517 4224776 5046488 5046747 520 4225045 4225323 5047016 5047294 558 4225735 4225970 5047706 5047941 472 4229111 4229551 5057182 5057622 882 4229679 4229908 5057750 5057979 460 4229994 4230336 5058065 5058407 686 4230657 4231155 5058728 5059226 998 4231157 4231535 5059228 5059606 758 4232285 4232582 5060356 5060653 596 4232761 4232992 5060832 5061063 464 4233381 4233656 5061466 5061741 552 4234440 4234647 5062525 5062732 416 4235356 4235672 5063441 5063757 634 4237564 4237988 5065649 5066073 850 4238057 4238268 5066142 5066353 424 4238406 4238620 5066491 5066705 430 4238622 4238986 5066707 5067071 730 4239483 4240332 5067568 5068417 1700 4240577 4240851 5068662 5068936 550 4241194 4241513 5069279 5069598 640 4241860 4242134 5069945 5070219 550 4242340 4242595 5070425 5070680 512 4242692 4242965 5070777 5071050 548 4243246 4243553 5071331 5071638 616 4243777 4244103 5071862 5072188 654 4244267 4244585 5072352 5072670 638 4244704 4245302 5072789 5073387 1198 4245304 4245658 5073389 5073743 710 4245858 4246069 5073943 5074154 424 4246359 4246764 5074444 5074849 812 4247264 4247653 5075257 5075646 780 4247873 4248118 5075866 5076111 492 4250222 4250493 5078215 5078486 544 4250517 4250895 5078510 5078888 758 4253485 4253771 5081478 5081764 574 4253773 4254142 5081766 5082135 740 4254248 4254495 5082241 5082488 496 4254560 4254856 5082553 5082849 594 4256676 4257136 5084669 5085129 922 4259211 4259425 5087175 5087389 430 4262253 4262478 5090217 5090442 452 4263080 4263430 5091044 5091394 702 4263432 4263811 5091396 5091775 760 4264612 4264826 5092576 5092790 430 4267726 4267949 5095682 5095905 448 4267951 4268300 5095907 5096256 700 4271274 4271688 5099230 5099644 830 4272543 4272784 5100500 5100741 484 4274885 4275144 5102841 5103100 520 4275257 4275698 5103213 5103654 884 4275783 4276051 5103739 5104007 538 4276498 4276886 5104454 5104842 778 4277592 4277901 5105547 5105856 620 4278059 4278511 5106014 5106466 906 4278860 4279104 5106815 5107059 490 4280733 4281019 5108691 5108977 574 4282323 4282554 5110281 5110512 464 4282634 4282898 5110592 5110856 530 4282979 4283305 5110938 5111264 654 4283580 4283866 5111539 5111825 574 4284575 4284796 5112534 5112755 444 4284945 4285241 5112904 5113200 594 4285243 4285625 5113202 5113584 766 4285817 4286408 5113776 5114367 1184 4286746 4286983 5114705 5114942 476 4287171 4287708 5115130 5115667 1076 4287908 4288139 5115867 5116098 464 4289459 4289694 5117418 5117653 472 4291742 4292213 5119701 5120172 944 4294024 4294328 5121519 5121823 610 4294488 4294792 5121983 5122287 610 4295091 4295297 5122586 5122792 414 4295299 4295540 5122794 5123035 484 4295545 4295804 5123040 5123299 520 4295971 4296203 5123466 5123698 466 4296217 4297019 5123712 5124514 1606 4298256 4298470 5125751 5125965 430 4298526 4298730 5126021 5126225 410 4299245 4299477 5126740 5126972 466 4300511 4300721 5128006 5128216 422 4301558 4301780 5129053 5129275 446 4301827 4302040 5129322 5129535 428 4303916 4304296 5131411 5131791 762 4312689 4312935 5142354 5142600 494 4315512 4315729 5145178 5145395 436 4318700 4318931 5148366 5148597 464 4323945 4324269 5153204 5153528 650 4324271 4324481 5153530 5153740 422 4325926 4326534 5155186 5155794 1218 4327141 4327364 5156401 5156624 448 4327881 4328194 5157141 5157454 628 4328196 4328668 5157456 5157928 946 4328796 4329079 5158056 5158339 568 4329081 4329292 5158341 5158552 424 4330003 4330414 5159263 5159674 824 4330464 4330844 5159724 5160104 762 4330881 4331442 5160141 5160702 1124 4331444 4331982 5160704 5161242 1078 4333040 4333250 5162300 5162510 422 4334154 4334449 5163414 5163709 592 4334499 4334789 5163759 5164049 582 4336113 4336322 5165373 5165582 420 4336393 4336693 5165653 5165953 602 4336927 4337183 5166187 5166443 514 4337794 4338038 5167054 5167298 490 4338994 4339308 5168254 5168568 630 4339353 4339715 5168613 5168975 726 4340892 4341142 5170152 5170402 502 4341624 4341999 5170884 5171259 752 4344740 4344957 5174001 5174218 436 4344959 4345211 5174220 5174472 506 4345213 4345571 5174474 5174832 718 4346026 4346523 5175287 5175784 996 4346631 4346834 5175892 5176095 408 4347166 4347790 5176427 5177051 1250 4347927 4348213 5177188 5177474 574 4348434 4348726 5177695 5177987 586 4348728 4348972 5177989 5178233 490 4349163 4349372 5178424 5178633 420 4350463 4350950 5179724 5180211 976 4351194 4351406 5180455 5180667 426 4351408 4351706 5180669 5180967 598 4352170 4352376 5181431 5181637 414 4353534 4354238 5182795 5183499 1410 4354273 4354526 5183534 5183787 508 4354528 4354910 5183789 5184171 766 4354912 4355495 5184173 5184756 1168 4355497 4355732 5184758 5184993 472 4355851 4356510 5185112 5185771 1320 4356602 4356917 5185863 5186178 632 4356919 4357185 5186180 5186446 534 4357376 4357687 5186637 5186948 624 4358283 4358518 5187545 5187780 472 4358531 4358953 5187793 5188215 846 4359009 4359406 5188271 5188668 796 4359408 4359650 5188670 5188912 486 4360590 4361086 5189852 5190348 994 4361109 4361356 5190371 5190618 496 4361397 4361736 5190659 5190998 680 4361967 4362177 5191229 5191439 422 4362309 4362521 5191571 5191783 426 4362523 4362876 5191785 5192138 708 4363046 4363258 5192308 5192520 426 4363260 4363546 5192522 5192808 574 4363548 4364194 5192810 5193456 1294 4364202 4364791 5193464 5194053 1180 4364793 4364992 5194055 5194254 400 4365531 4365754 5194793 5195016 448 4365756 4366009 5195018 5195271 508 4367889 4368488 5197151 5197750 1200 4369080 4369317 5198342 5198579 476 4370219 4370576 5199481 5199838 716 4370778 4370988 5200030 5200240 422 4371312 4371617 5200564 5200869 612 4371619 4371876 5200871 5201128 516 4372187 4372397 5201279 5201489 422 4373122 4373545 5202214 5202637 848 4373777 4374003 5202869 5203095 454 4374052 4374251 5203144 5203343 400 4374905 4375185 5203997 5204277 562 4375857 4376101 5204948 5205192 490 4376397 4376796 5205488 5205887 800 4377144 4377416 5206235 5206507 546 4377418 4377634 5206509 5206725 434 4377636 4378173 5206727 5207264 1076 4378301 4378506 5207392 5207597 412 4378508 4378713 5207599 5207804 412 4378718 4378946 5207809 5208037 458 4379198 4379523 5208289 5208614 652 4379594 4379808 5208685 5208899 430 4380144 4380485 5209235 5209576 684 4380835 4381058 5209926 5210149 448 4381060 4381274 5210151 5210365 430 4381385 4381717 5210476 5210808 666 4382064 4382284 5211155 5211375 442 4383624 4383938 5212160 5212474 630 4387381 4387685 5215917 5216221 610 4387687 4387980 5216223 5216516 588 4388866 4389092 5217402 5217628 454 4389846 4390338 5218382 5218874 986 4390965 4391449 5219501 5219985 970 4391451 4391696 5219987 5220232 492 4392660 4392949 5221196 5221485 580 4392951 4393314 5221487 5221850 728 4393390 4393607 5221926 5222143 436 4394572 4394885 5223108 5223421 628 4396694 4397281 5225230 5225817 1176 4397605 4398192 5226141 5226728 1176 4398699 4399042 5227236 5227579 688 4399262 4399973 5227799 5228510 1424 4400047 4400534 5228584 5229071 976 4400536 4400837 5229073 5229374 604 4400839 4401199 5229376 5229736 722 4401291 4401502 5229828 5230039 424 4401693 4402147 5230230 5230684 910 4402690 4402925 5231227 5231462 472 4403737 4404072 5232275 5232610 672 4404088 4404439 5232626 5232977 704 4404441 4404736 5232979 5233274 592 4406310 4406566 5234848 5235104 514 4407734 4407963 5236273 5236502 460 4407983 4408209 5236522 5236748 454 4409733 4410016 5238272 5238555 568 4410543 4411443 5239082 5239982 1802 4411568 4411931 5240107 5240470 728 4413245 4413458 5241784 5241997 428 4413460 4414119 5241999 5242658 1320 4414166 4414590 5242705 5243129 850 4415106 4415865 5243645 5244404 1520 4415867 4416119 5244406 5244658 506 4416427 4416794 5244966 5245333 736 4416802 4417277 5245341 5245816 952 4417587 4417894 5246126 5246433 616 4417896 4418210 5246435 5246749 630 4418721 4419265 5247260 5247804 1090 4419327 4420142 5247866 5248681 1632 4422028 4422356 5250566 5250894 658 4422589 4422864 5251127 5251402 552 4422884 4423135 5251422 5251673 504 4423235 4423484 5251773 5252022 500 4423486 4423779 5252024 5252317 588 4423832 4424168 5252370 5252706 674 4424170 4424765 5252708 5253303 1192 4425009 4425265 5253547 5253803 514 4425565 4425963 5255851 5256249 798 4426044 4426243 5256330 5256529 400 4426245 4426957 5256531 5257243 1426 4427159 4427541 5257445 5257827 766 4427543 4427886 5257829 5258172 688 4427900 4428237 5258186 5258523 676 4428542 4428802 5258828 5259088 522 4429070 4429306 5259356 5259592 474 4429923 4430185 5260209 5260471 526 4430365 4430680 5260651 5260966 632 4430682 4431179 5260968 5261465 996 4432539 4432756 5262814 5263031 436 4432758 4433008 5263033 5263283 502 4433601 4433926 5263876 5264201 652 4433963 4434274 5264238 5264549 624 4435031 4435251 5265306 5265526 442 4435253 4435481 5265528 5265756 458 4436111 4436332 5266387 5266608 444 4436615 4437230 5266891 5267506 1232 4437503 4437711 5267796 5268004 418 4438094 4438719 5268387 5269012 1252 4438730 4438975 5269023 5269268 492 4439166 4439479 5269459 5269772 628 4439661 4440048 5269954 5270341 776 4440303 4440757 5270596 5271050 910 4441584 4441911 5271877 5272204 656 4443981 4444452 5274274 5274745 944 4444454 4444845 5274747 5275138 784 4444973 4445194 5275266 5275487 444 4445391 4445813 5275684 5276106 846 4445815 4446120 5276108 5276413 612 4446140 4446428 5276433 5276721 578 4446534 4447021 5276827 5277314 976 4447071 4447327 5277364 5277620 514 4447949 4448349 5278242 5278642 802 4448542 4448813 5278837 5279108 544 4448815 4449101 5279110 5279396 574 4449229 4449635 5279524 5279930 814 4449737 4450021 5280033 5280317 570 4450381 4450608 5280677 5280904 456 4452995 4453356 5283291 5283652 724 4454003 4454286 5284299 5284582 568 4454357 4454691 5284653 5284987 670 4454909 4455147 5285205 5285443 478 4455161 4455896 5285457 5286192 1472 4455898 4456160 5286194 5286456 526 4456450 4456679 5286746 5286975 460 4456750 4457024 5287046 5287320 550 4457117 4457793 5287439 5288115 1354 4458252 4458580 5288606 5288934 658 4459728 4459936 5290082 5290290 418 4460106 4460393 5290460 5290747 576 4461084 4461335 5291438 5291689 504 4461645 4461886 5291999 5292240 484 4462630 4462835 5292984 5293189 412 4463656 4463881 5294010 5294235 452 4464916 4465556 5295269 5295909 1282 4465855 4466120 5296208 5296473 532 4466518 4466825 5296871 5297178 616 4467031 4467308 5297384 5297661 556 4467542 4467930 5297895 5298283 778 4467945 4468291 5298298 5298644 694 4468421 4468654 5298774 5299007 468 4468890 4469173 5299243 5299526 568 4469535 4469764 5299888 5300117 460 4469816 4470154 5300169 5300507 678 4476003 4476336 5306344 5306677 668 4478263 4478463 5308503 5308703 402 4478850 4479283 5309086 5309519 868 4480524 4480732 5310760 5310968 418 4481043 4481572 5311279 5311808 1060 4481615 4481848 5311851 5312084 468 4482116 4482339 5312546 5312769 448 4482470 4482864 5312900 5313294 790 4482962 4483176 5313392 5313606 430 4483178 4483541 5313608 5313971 728 4483543 4484119 5313973 5314549 1154 4484463 4484806 5314893 5315236 688 4485150 4485499 5315580 5315929 700 4485501 4485735 5315931 5316165 470 4485737 4486325 5316167 5316755 1178 4486327 4486622 5316757 5317052 592 4486903 4487111 5317333 5317541 418 4493190 4493434 5318623 5318867 490 4493667 4494057 5319100 5319490 782 4535262 4535462 5365009 5365209 402 4536431 4537017 5366178 5366764 1174 4538109 4538335 5367856 5368082 454 4538484 4538771 5368231 5368518 576 4539505 4539758 5369252 5369505 508 4540615 4540884 5370345 5370614 540 4540886 4541103 5370616 5370833 436 4542032 4542325 5371762 5372055 588 4542802 4543107 5372531 5372836 612 4543111 4543472 5372840 5373201 724 4544659 4544888 5374388 5374617 460 4548476 4548708 5378136 5378368 466 4548909 4549328 5378569 5378988 840 4550051 4550300 5379711 5379960 500 4551504 4551751 5381165 5381412 496 4551873 4552075 5381534 5381736 406 4554158 4554568 5383819 5384229 822 4554676 4554937 5384337 5384598 524 4556607 4556926 5386268 5386587 640 4556976 4557328 5386637 5386989 706 4557330 4557696 5386991 5387357 734 4557847 4558062 5387508 5387723 432 4561823 4562035 5399775 5399987 426 4567898 4568194 5405866 5406162 594 4586391 4586597 5418882 5419088 414 4589247 4589498 5422424 5422675 504 4589544 4589756 5422721 5422933 426 4589758 4590079 5422935 5423256 644 4591606 4591905 5424792 5425091 600 4592020 4592269 5425206 5425455 500 4592317 4592556 5425504 5425743 480 4592558 4592949 5425745 5426136 784 4593732 4593982 5426920 5427170 502 4594693 4595224 5427880 5428411 1064 4595901 4596268 5429088 5429455 736 4596459 4596916 5429646 5430103 916 4596918 4597156 5430105 5430343 478 4597495 4597826 5430682 5431013 664 4597828 4598336 5431015 5431523 1018 4598884 4599452 5432071 5432639 1138 4599469 4599869 5432656 5433056 802 4599871 4600306 5433058 5433493 872 4600811 4601319 5434000 5434508 1018 4601459 4601825 5434648 5435014 734 4601827 4602472 5435016 5435661 1292 4604188 4604575 5437063 5437450 776 4605120 4605567 5437995 5438442 896 4605846 4606069 5438721 5438944 448 4606201 4607439 5439076 5440314 2478 4607576 4607775 5440451 5440650 400 4607972 4608300 5440847 5441175 658 4608302 4608593 5441177 5441468 584 4608604 4609160 5441479 5442035 1114 4609548 4610186 5442423 5443061 1278 4610318 4610595 5443193 5443470 556 4610597 4611095 5443472 5443970 998 4613016 4613327 5445687 5445998 624 4613736 4614096 5446407 5446767 722 4614243 4614763 5446914 5447434 1042 4615143 4615543 5447814 5448214 802 4615599 4616269 5448270 5448940 1342 4616649 4616956 5449320 5449627 616 4617023 4617937 5449694 5450608 1830 4618311 4618887 5450982 5451558 1154 4621390 4621712 5453018 5453340 646 4622026 4622270 5453654 5453898 490 4622284 4622611 5453912 5454239 656 4623145 4623424 5454773 5455052 560 4623611 4624207 5455239 5455835 1194 4624869 4625256 5456497 5456884 776 4625387 4625939 5457015 5457567 1106 4626344 4627214 5457972 5458842 1742 4627591 4627832 5459219 5459460 484 4628122 4628527 5459750 5460155 812 4630122 4630608 5461750 5462236 974 4630610 4630809 5462238 5462437 400 4632073 4632299 5463701 5463927 454 4632526 4632989 5464154 5464617 928 4632991 4633225 5464619 5464853 470 4637081 4637382 5468709 5469010 604 4637525 4638352 5469153 5469980 1656 genometools-1.5.1/testdata/chaindata/chain-globalgc-wf1.5000066400000000000000000004465631211610345200232260ustar00rootroot00000000000000# chain 0: length 4258 score -2645923 5851 6237 5868 6254 1161 7627 7937 7644 7954 933 8079 8457 8096 8474 1137 8687 8994 8704 9011 924 8996 9375 9013 9392 1140 9377 9666 9394 9683 870 10024 10406 10041 10423 1149 10408 10715 10425 10732 924 11439 11663 11456 11680 675 11695 11898 11712 11915 612 12026 12235 12043 12252 630 12384 12712 12401 12729 987 13131 13339 13148 13356 627 13719 14230 13736 14247 1536 14232 14645 14249 14662 1242 15174 15389 15191 15406 648 17569 17786 16237 16454 654 18477 18763 17145 17431 861 19377 19794 18045 18462 1254 20813 21272 25219 25678 1380 21304 21615 25716 26027 936 22048 22265 26460 26677 654 23335 23639 27747 28051 915 25045 25447 29457 29859 1209 26789 27024 31164 31399 708 27712 28067 32087 32442 1068 28223 28446 32598 32821 672 29506 29843 33881 34218 1014 30706 30913 35081 35288 624 31887 32116 36262 36491 690 33552 33766 37927 38141 645 34112 34597 38486 38971 1458 35170 35491 39577 39898 966 35499 35831 39906 40238 999 36263 36479 40670 40886 651 37032 37439 41439 41846 1224 37534 37775 41941 42182 726 37777 38103 42184 42510 981 38777 39003 43184 43410 681 40129 40508 44536 44915 1140 41188 41408 45595 45815 663 43562 43773 47976 48187 636 44455 44660 48869 49074 618 45555 45805 49969 50219 753 45950 46173 50365 50588 672 46253 46632 50668 51047 1140 46901 47137 51316 51552 711 47515 47785 51930 52200 813 49571 49940 53986 54355 1110 51097 51551 56073 56527 1365 51621 51901 56597 56877 843 51924 52135 56900 57111 636 53284 53627 58260 58603 1032 53902 54335 58878 59311 1302 54337 54981 59313 59957 1935 54983 56483 59959 61459 4503 56485 56939 61461 61915 1365 56941 57835 61917 62811 2685 57928 58141 62904 63117 642 59485 59772 64418 64705 864 59831 60053 64764 64986 669 60245 60545 65178 65478 903 60547 60890 65480 65823 1032 60943 61457 65876 66390 1545 61459 61700 66392 66633 726 62923 63424 67856 68357 1506 64749 65026 69681 69958 834 65826 66030 70758 70962 615 66970 67169 71817 72016 600 67312 67544 72159 72391 699 67596 67832 72443 72679 711 68693 68945 73540 73792 759 70473 71000 75320 75847 1584 71214 71540 76061 76387 981 74737 75132 79557 79952 1188 75226 75461 80046 80281 708 76775 76988 82604 82817 642 81083 81302 85691 85910 660 82978 83294 87586 87902 951 83392 83799 88000 88407 1224 84493 84737 89099 89343 735 84949 85210 89555 89816 786 85881 86098 90487 90704 654 87279 87522 91885 92128 732 87794 88118 92400 92724 975 88120 88349 92726 92955 690 89754 90328 94360 94934 1725 90591 90949 95197 95555 1077 91187 91785 95793 96391 1797 92474 92682 97080 97288 627 93089 93369 97695 97975 843 94167 94384 98773 98990 654 94548 94791 99154 99397 732 95152 95370 99758 99976 657 95905 96359 100511 100965 1365 97113 97513 101719 102119 1203 98322 98775 102928 103381 1362 98906 99228 103512 103834 969 99254 99649 103860 104255 1188 99651 99869 104257 104475 657 100432 100691 105038 105297 780 101175 101494 105781 106100 960 101721 101923 106327 106529 609 102613 102831 107219 107437 657 102833 103359 107439 107965 1581 103604 103840 108210 108446 711 103842 104168 108448 108774 981 104548 104822 109154 109428 825 104857 105545 109463 110151 2067 106099 107460 110705 112066 4086 107686 107909 112292 112515 672 108007 108211 112613 112817 615 108293 108597 112899 113203 915 108848 109485 113454 114091 1914 109496 109707 114102 114313 636 109927 110184 114533 114790 774 110441 110658 115047 115264 654 110660 110901 115266 115507 726 110903 111227 115509 115833 975 111661 112144 116151 116634 1452 112146 112457 116636 116947 936 112459 112834 116949 117324 1128 112836 113047 117326 117537 636 113049 113268 117539 117758 660 113270 114090 117760 118580 2463 116535 116843 121025 121333 927 117226 117573 121716 122063 1044 117842 118158 122332 122648 951 118514 119177 123004 123667 1992 119259 119491 123749 123981 699 119493 119812 123983 124302 960 120595 120848 125085 125338 762 121891 122239 126381 126729 1047 122496 122797 126986 127287 906 122808 123161 127298 127651 1062 123931 124169 128421 128659 717 124522 124796 129012 129286 825 125410 125818 129900 130308 1227 127257 127734 131747 132224 1434 127882 128266 132255 132639 1155 128406 128650 132779 133023 735 128991 129196 133364 133569 618 130733 131096 135106 135469 1092 131188 131489 135561 135862 906 131491 131699 135864 136072 627 133795 134045 138168 138418 753 134047 134547 138420 138920 1503 134594 134876 138967 139249 849 134968 135254 139341 139627 861 135256 135635 139629 140008 1140 135663 136121 140036 140494 1377 136240 136604 140613 140977 1095 136870 137101 141243 141474 696 137556 137806 141929 142179 753 139126 139355 143499 143728 690 141040 141304 145413 145677 795 141343 141710 145716 146083 1104 141797 142087 146170 146460 873 142452 142814 146825 147187 1089 143270 143496 147643 147869 681 143498 143822 147871 148195 975 144256 144630 148629 149003 1125 145072 145290 149445 149663 657 146145 146732 150518 151105 1764 157544 157954 161867 162277 1233 158023 158489 162346 162812 1401 158578 158792 162901 163115 645 159237 159483 163560 163806 741 160020 160261 164343 164584 726 160401 161512 164724 165835 3336 162678 162981 167001 167304 912 164644 164931 168967 169254 864 166100 166500 170423 170823 1203 166502 166932 170825 171255 1293 168428 168768 172751 173091 1023 169064 169426 173387 173749 1089 169759 169994 174082 174317 708 172286 172617 176609 176940 996 174673 175242 178873 179442 1710 175991 176292 180191 180492 906 176294 176862 180494 181062 1707 176876 177372 181076 181572 1491 177648 177933 181848 182133 858 178131 178465 182331 182665 1005 178479 178867 182679 183067 1167 179070 179513 183270 183713 1332 180127 180427 184327 184627 903 180820 181388 185020 185588 1707 181390 181646 185590 185846 771 181663 181940 185863 186140 834 182343 182661 186543 186861 957 183133 183406 187333 187606 822 183458 183671 187658 187871 642 183701 184121 187901 188321 1263 185630 186048 189117 189535 1257 188339 188709 191826 192196 1113 188711 189124 192198 192611 1242 189417 189686 192904 193173 810 189688 189955 193175 193442 804 189957 190705 193444 194192 2247 190707 191298 194194 194785 1776 191300 192509 194787 195996 3630 192775 193061 196120 196406 861 193063 194127 196408 197472 3195 194165 194669 197510 198014 1515 195040 197671 198385 201016 7896 197790 198378 201135 201723 1767 198380 198621 201725 201966 726 199262 199926 202607 203271 1995 199928 200418 203273 203763 1473 200529 200809 203873 204153 843 200811 201187 204155 204531 1131 201345 201607 204689 204951 789 201640 202500 204984 205844 2583 202808 203026 206152 206370 657 203135 203440 206479 206784 918 204771 204985 208115 208329 645 204987 205202 208331 208546 648 205269 205525 208613 208869 771 206068 206371 209412 209715 912 207123 207337 210467 210681 645 207939 208243 211283 211587 915 208245 208771 211589 212115 1581 208773 209122 212117 212466 1050 209142 209380 212486 212724 717 209442 209817 212786 213161 1128 211763 212003 215107 215347 723 212180 212451 215524 215795 816 212952 213198 216296 216542 741 213337 213554 216681 216898 654 213819 214384 217164 217729 1698 215380 215675 218713 219008 888 215949 216222 219282 219555 822 218188 218576 221520 221908 1167 218828 219224 222159 222555 1191 219732 220129 223063 223460 1194 220515 220882 223846 224213 1104 220884 221193 224215 224524 930 221550 221915 224881 225246 1098 222448 222986 225779 226317 1617 222988 223316 226319 226647 987 223538 223739 226870 227071 606 223915 224888 227247 228220 2922 224890 225585 228222 228917 2088 225900 226112 229232 229444 639 226604 226927 229936 230259 972 226936 227481 230267 230812 1638 227623 227871 230954 231202 747 227969 228550 231300 231881 1746 228768 229025 232098 232355 774 229598 229840 232928 233170 729 229853 230143 233183 233473 873 232837 233051 236388 236602 645 233158 233399 236709 236950 726 233401 233636 236952 237187 708 233638 233959 237189 237510 966 233961 234277 237512 237828 951 234618 234856 238169 238407 717 235556 235890 239107 239441 1005 236041 236334 239592 239885 882 237263 237536 240815 241088 822 237538 237738 241090 241290 603 240031 240397 278100 278466 1101 241492 241701 279561 279770 630 241703 242018 279772 280087 948 245371 245714 283339 283682 1032 245952 246203 283920 284171 756 250050 250279 287937 288166 690 251614 251828 289501 289715 645 252573 252783 290460 290670 633 253387 253681 291275 291569 885 254361 254617 292249 292505 771 255687 256313 293575 294201 1881 256486 256872 294374 294760 1161 257033 257260 294921 295148 684 258635 258918 296523 296806 852 259430 259675 297318 297563 738 260217 260431 298105 298319 645 260706 260991 298594 298879 858 297132 297463 330317 330648 996 299169 299479 332354 332664 933 300524 300783 333709 333968 780 301750 302005 334935 335190 768 305109 305541 338294 338726 1299 306139 306369 339324 339554 693 306382 306626 339567 339811 735 306907 307106 340092 340291 600 308316 308640 341501 341825 975 309476 309792 342661 342977 951 313588 313860 353941 354213 819 316129 316360 358934 359165 696 318125 318630 361618 362123 1518 318632 318938 362125 362431 921 319028 319326 362521 362819 897 319744 320032 363237 363525 867 321266 321471 364759 364964 618 321473 321699 364966 365192 681 322401 323072 365894 366565 2016 323968 324172 367461 367665 615 328133 328560 376575 377002 1284 328661 329008 377103 377450 1044 329022 329383 377464 377825 1086 329619 330088 378061 378530 1410 330090 330409 378532 378851 960 330540 330759 378982 379201 660 332518 332846 384784 385112 987 334160 334386 386435 386661 681 334409 334749 386684 387024 1023 335190 335460 387465 387735 813 335793 336128 388068 388403 1008 336547 336839 388822 389114 879 338028 338296 390303 390571 807 340819 341027 393187 393395 627 341549 341791 393917 394159 729 342414 343104 399888 400578 2073 343301 343735 400775 401209 1305 343919 344120 401393 401594 606 344845 345122 402322 402599 834 345448 345667 402925 403144 660 351607 352098 408800 409291 1476 352888 353166 410081 410359 837 354178 354443 411935 412200 798 355443 355817 413200 413574 1125 355819 356099 413576 413856 843 358310 358593 415864 416147 852 361300 361532 418854 419086 699 362254 362582 419808 420136 987 362638 362871 420192 420425 702 367228 367430 426606 426808 609 368110 368314 427488 427692 615 368569 368964 427947 428342 1188 369620 370014 428998 429392 1185 370352 370704 429730 430082 1059 370840 371258 430218 430636 1257 374964 375281 433940 434257 954 375474 375856 434450 434832 1149 378703 379047 437579 437923 1035 385128 385475 446908 447255 1044 385631 385848 447411 447628 654 386054 386300 447834 448080 741 388046 388254 449826 450034 627 392824 393267 453381 453824 1332 393274 393475 453831 454032 606 393537 394358 454094 454915 2466 394579 394841 455136 455398 789 394843 395354 455400 455911 1536 396828 397102 457385 457659 825 397218 397459 457775 458016 726 397707 397942 458264 458499 708 398247 398697 458804 459254 1353 398813 399102 459370 459659 870 399920 400442 460477 460999 1569 400542 401106 461099 461663 1695 401519 401862 462076 462419 1032 402894 403806 463451 464363 2739 404119 404330 464676 464887 636 404764 405189 465321 465746 1278 405269 405498 465826 466055 690 405500 406133 466057 466690 1902 406247 406472 466804 467029 678 408239 408627 471103 471491 1167 409019 409683 471883 472547 1995 409685 409949 472549 472813 795 409951 410158 472815 473022 624 410779 411080 473541 473842 906 411169 411404 473931 474166 708 411927 412377 474689 475139 1353 412584 412810 475343 475569 681 414347 414694 477106 477453 1044 414876 415176 477635 477935 903 415178 416519 477937 479278 4026 416521 417497 479280 480256 2931 417578 417798 480337 480557 663 418074 418301 480833 481060 684 418498 419130 481257 481889 1899 419564 421545 482323 484304 5946 421585 421886 484344 484645 906 421918 422324 484677 485083 1221 424420 424775 488828 489183 1068 425323 425610 489730 490017 864 425918 426348 490325 490755 1293 426350 427121 490757 491528 2316 427123 427330 491530 491737 624 427941 428188 492348 492595 744 428418 428807 492825 493214 1170 429056 429386 493463 493793 993 429762 430016 494795 495049 765 430020 430256 495053 495289 711 430318 430569 495351 495602 756 430571 430945 495604 495978 1125 430974 431460 496007 496493 1461 431796 432032 496829 497065 711 432068 432415 497101 497448 1044 432423 432739 497456 497772 951 433707 433976 498740 499009 810 434137 434777 499170 499810 1923 435013 435485 500046 500518 1419 437781 438101 504612 504932 963 440107 440365 506938 507196 777 440367 440657 507198 507488 873 440659 440932 507490 507763 822 441081 441412 507912 508243 996 443866 444069 510697 510900 612 445270 445481 512101 512312 636 446240 446460 513071 513291 663 446699 446996 513530 513827 894 447154 447388 513985 514219 705 447558 447851 514389 514682 882 447853 448076 514684 514907 672 448714 449491 515545 516322 2334 449557 450019 516388 516850 1389 450118 450394 516949 517225 831 450523 450872 517354 517703 1050 451229 451856 518060 518687 1884 451981 452222 518812 519053 726 453065 453331 519896 520162 801 453527 454666 520358 521497 3420 454668 455257 521499 522088 1770 455277 455482 522108 522313 618 455714 455976 522544 522806 789 456098 456384 522928 523214 861 456386 456860 523216 523690 1425 457429 457823 524259 524653 1185 457825 458484 524655 525314 1980 459551 459759 526381 526589 627 460049 460278 526879 527108 690 460442 460891 527272 527721 1350 460893 461307 527723 528137 1245 461309 461526 528139 528356 654 462603 462994 529433 529824 1176 463853 464078 530696 530921 678 467804 468197 534646 535039 1182 468592 469367 535434 536209 2328 469369 469914 536211 536756 1638 469916 470310 536758 537152 1185 471002 471234 537844 538076 699 471715 471981 538557 538823 801 471983 472235 538825 539077 759 472804 473033 539646 539875 690 473738 473940 540580 540782 609 474071 474282 540913 541124 636 474284 474519 541126 541361 708 475605 475824 542449 542668 660 476138 476384 542982 543228 741 476386 476706 543230 543550 963 476749 477036 543593 543880 864 477185 477438 544029 544282 762 477689 477900 544533 544744 636 478299 478541 545143 545385 729 478557 478830 545401 545674 822 478832 479540 545676 546384 2127 479542 479820 546386 546664 837 479873 480097 546717 546941 675 480156 480358 547000 547202 609 480500 480797 547344 547641 894 480799 481310 547643 548154 1536 481312 481595 548156 548439 852 482005 482228 548849 549072 672 482401 482648 549245 549492 744 483364 483867 550208 550711 1512 483869 484107 550713 550951 717 484109 485087 550953 551931 2937 485569 486007 552413 552851 1317 486512 487233 553356 554077 2166 488357 488580 555201 555424 672 488648 489096 555492 555940 1347 490156 490806 556830 557480 1953 491016 491281 557690 557955 798 491283 491685 557957 558359 1209 491936 492348 558610 559022 1239 492431 492726 559105 559400 888 493578 493812 560252 560486 705 494565 494791 561239 561465 681 495183 495536 561857 562210 1062 495813 496141 562487 562815 987 496339 496774 563013 563448 1308 497201 497557 563771 564127 1071 497559 497843 564129 564413 855 497944 498191 564514 564761 744 498193 498515 564763 565085 969 498526 498795 565096 565365 810 499179 499394 565749 565964 648 500429 500704 566999 567274 828 500996 501197 567566 567767 606 501503 501749 568073 568319 741 501869 502227 568439 568797 1077 502292 502522 568862 569092 693 502841 503244 569410 569813 1212 503252 503472 569821 570041 663 504201 504498 570770 571067 894 505313 505596 571882 572165 852 505598 505808 572167 572377 633 505872 506092 572441 572661 663 506287 506526 572856 573095 720 507669 507870 574238 574439 606 510100 510503 576568 576971 1212 510693 510970 577161 577438 834 511506 511720 577974 578188 645 511916 512268 578384 578736 1059 514311 514561 608578 608828 753 514941 515380 609208 609647 1320 515956 516293 610223 610560 1014 516295 516506 610562 610773 636 516508 517120 610775 611387 1839 517360 517640 611627 611907 843 517972 518490 612239 612757 1557 518492 518760 612759 613027 807 519981 520225 614248 614492 735 520758 521002 615025 615269 735 527250 527840 620314 620904 1773 527909 528139 620973 621203 693 528272 528957 621335 622020 2058 528959 529358 622022 622421 1200 529620 530191 622683 623254 1716 530358 530775 623421 623838 1254 531308 531568 624371 624631 783 532001 532301 625064 625364 903 532459 532658 625522 625721 600 533211 533782 626274 626845 1716 535236 535474 628299 628537 717 536800 537097 629864 630161 894 538454 538722 631432 631700 807 539806 540008 632784 632986 609 540859 541151 633837 634129 879 543235 543483 636213 636461 747 545192 545481 638170 638459 870 545483 545707 638461 638685 675 545797 546303 638775 639281 1521 547235 547461 640213 640439 681 548227 548559 641206 641538 999 548973 549348 641952 642327 1128 549401 549615 642380 642594 645 549988 550295 642967 643274 924 552171 552490 645094 645413 960 553403 554011 646326 646934 1827 554139 554735 647062 647658 1791 555699 555927 648622 648850 687 557166 557534 650089 650457 1107 557536 557969 650459 650892 1302 558658 558860 651581 651783 609 558862 559066 651785 651989 615 559243 559706 652166 652629 1392 561117 561536 654046 654465 1260 561996 562213 654926 655143 654 562215 562563 655145 655493 1047 562841 563219 655771 656149 1137 563221 563588 656151 656518 1104 563747 564023 656677 656953 831 585334 585798 656962 657426 1395 585880 586262 657508 657890 1149 586264 586465 657892 658093 606 587112 587323 658740 658951 636 587364 587641 658992 659269 834 588166 588459 659794 660087 882 588646 588936 660274 660564 873 589344 589651 660972 661279 924 590019 590549 661647 662177 1593 592069 592361 663697 663989 879 594538 594752 677757 677971 645 595911 596125 679130 679344 645 597790 597997 680884 681091 624 599565 599857 682653 682945 879 600066 600290 683154 683378 675 600346 600550 683434 683638 615 601677 602172 684765 685260 1488 602198 602427 685286 685515 690 602936 603201 686011 686276 798 603203 603533 686278 686608 993 603535 603864 686610 686939 990 604552 604841 687627 687916 870 604858 605299 687933 688374 1326 605327 605564 688402 688639 714 605896 606137 688971 689212 726 606382 606623 689457 689698 726 608712 608917 690927 691132 618 609123 609484 691338 691699 1086 611082 611317 693297 693532 708 611646 612108 693861 694323 1389 612814 613040 695029 695255 681 617409 617630 699624 699845 666 617729 618063 699944 700278 1005 621062 621823 703277 704038 2286 622374 622582 704589 704797 627 622798 623018 705013 705233 663 623967 624342 705996 706371 1128 624455 624654 706484 706683 600 625067 625350 707096 707379 852 626744 627217 708773 709246 1422 630745 630986 712774 713015 726 631312 631606 713340 713634 885 632574 632966 714602 714994 1179 632979 633283 715007 715311 915 634659 634927 716687 716955 807 635077 635401 717105 717429 975 635427 635641 717455 717669 645 636170 636533 718198 718561 1092 636536 636836 718564 718864 903 637362 637684 719391 719713 969 638120 638730 720149 720759 1833 638868 639189 720781 721102 966 639566 640314 721479 722227 2247 640316 640593 722229 722506 834 640892 641234 722805 723147 1029 642033 642290 723946 724203 774 642891 643209 724804 725122 957 644297 644559 726210 726472 789 644561 644779 726474 726692 657 644973 645331 726886 727244 1077 645498 645842 727411 727755 1035 647520 647719 729433 729632 600 649072 649283 730985 731196 636 649579 649804 731492 731717 678 649806 650219 731719 732132 1242 650628 650837 732541 732750 630 650876 651180 732789 733093 915 651311 651673 733225 733587 1089 651675 652010 733589 733924 1008 652417 653081 734331 734995 1995 653198 653517 735112 735431 960 653983 654464 735897 736378 1446 654466 654803 736380 736717 1014 654805 655172 736719 737086 1104 655895 656260 737809 738174 1098 656433 656770 738347 738684 1014 657882 658118 739796 740032 711 658120 658708 740034 740622 1767 659170 659781 741084 741695 1836 660230 660504 742144 742418 825 660926 661239 742841 743154 942 661580 661967 743495 743882 1164 662074 662309 743989 744224 708 662383 662585 744298 744500 609 662887 663221 744802 745136 1005 664333 664703 746249 746619 1113 664705 665241 746621 747157 1611 665243 665466 747159 747382 672 666505 666713 748421 748629 627 667222 667583 749138 749499 1086 667591 668054 749507 749970 1392 668158 668473 750074 750389 948 669211 669463 751127 751379 759 670619 670859 752535 752775 723 671335 671569 753251 753485 705 671571 671785 753487 753701 645 672021 672412 753937 754328 1176 673391 673786 755307 755702 1188 673815 674028 755731 755944 642 674051 675151 755968 757068 3303 677843 678132 759761 760050 870 678134 678600 760052 760518 1401 678602 678830 760520 760748 687 678850 679052 760768 760970 609 681591 681847 763509 763765 771 682257 682767 764175 764685 1533 684323 684524 766241 766442 606 685476 685705 767394 767623 690 685740 686034 767658 767952 885 688616 688831 769335 769550 648 688851 689134 769570 769853 852 689217 689468 769936 770187 756 689820 690238 770539 770957 1257 690471 690733 771190 771452 789 690801 691086 771520 771805 858 691088 691289 771807 772008 606 691978 692324 772697 773043 1041 692326 692555 773045 773274 690 692817 693047 773536 773766 693 693822 694270 774541 774989 1347 695606 695851 776325 776570 738 695874 696078 776594 776798 615 696270 696632 776991 777353 1089 696634 696833 777355 777554 600 697180 697385 777901 778106 618 697522 697742 778243 778463 663 699406 699661 779987 780242 768 700002 700264 780583 780845 789 700584 700890 781165 781471 921 701579 702110 782160 782691 1596 702468 702698 783049 783279 693 702742 702979 783323 783560 714 703130 703371 783711 783952 726 705239 705550 785820 786131 936 706141 706441 786722 787022 903 706486 706753 787067 787334 804 706755 707162 787336 787743 1224 707278 707506 787860 788088 687 708561 708778 789143 789360 654 709471 709878 790053 790460 1224 710074 710450 790658 791034 1131 710452 710910 791036 791494 1377 711047 711367 791631 791951 963 711957 712391 792541 792975 1305 712452 713063 793036 793647 1836 713548 713768 794132 794352 663 713980 714185 794564 794769 618 714202 714427 794786 795011 678 716622 716854 795515 795747 699 717030 717376 795923 796269 1041 717986 718203 796879 797096 654 721034 721515 800021 800502 1446 722999 723216 801986 802203 654 725606 725808 804593 804795 609 726092 726414 805079 805401 969 726416 726649 805403 805636 702 729222 729757 808208 808743 1608 730140 730413 809126 809399 822 730620 730936 809606 809922 951 732327 733625 811313 812611 3897 734890 735131 813877 814118 726 740097 740364 819174 819441 804 741528 741757 820605 820834 690 741759 741993 820836 821070 705 742280 743053 821357 822130 2322 743064 743281 822141 822358 654 743941 744174 823018 823251 702 745018 745258 824095 824335 723 746300 746514 825377 825591 645 752906 753108 831982 832184 609 753323 753555 832399 832631 699 753774 754160 832850 833236 1161 754162 754523 833238 833599 1086 754525 754894 833601 833970 1110 754937 755175 834013 834251 717 755177 755538 834253 834614 1086 756746 756993 835822 836069 744 757037 757458 836113 836534 1266 757532 758196 836608 837272 1995 758228 758536 837304 837612 927 760172 760650 839248 839726 1437 760828 761117 839904 840193 870 761269 761501 840345 840577 699 762269 762576 841164 841471 924 763591 763811 842486 842706 663 763954 764370 842849 843265 1251 770806 771368 857743 858305 1689 771946 772340 858883 859277 1185 773272 773491 860209 860428 660 773648 773855 860585 860792 624 773858 774113 860795 861050 768 774115 774466 861052 861403 1056 774969 775208 861906 862145 720 775210 775688 862147 862625 1437 776440 776847 863296 863703 1224 776849 777074 863705 863930 678 777898 778946 864754 865802 3147 779241 779851 866097 866707 1833 781316 781551 867611 867846 708 781922 782160 868217 868455 717 783078 783319 869373 869614 726 783507 783757 869802 870052 753 784644 785021 870933 871310 1134 786648 786870 872945 873167 669 787198 787441 873495 873738 732 788132 788397 874429 874694 798 790206 790422 876503 876719 651 790730 790968 877027 877265 717 792220 792631 878518 878929 1236 792781 793021 879079 879319 723 793739 794339 880037 880637 1803 795078 795295 881376 881593 654 795297 795571 881595 881869 825 795678 795934 881976 882232 771 796493 796957 882791 883255 1395 799265 799593 885563 885891 987 799810 800198 886108 886496 1167 801521 801779 887820 888078 777 802234 802546 888533 888845 939 803451 803675 889750 889974 675 803889 804178 890188 890477 870 804780 805040 891079 891339 783 805498 805795 891704 892001 894 808412 808696 933207 933491 855 812635 812863 937431 937659 687 816179 816405 940974 941200 681 817052 817372 941847 942167 963 817661 818015 942456 942810 1065 818373 818620 943168 943415 744 819202 819413 943996 944207 636 821380 821785 946177 946582 1218 822333 822592 947130 947389 780 822609 823614 947406 948411 3018 823616 824135 948413 948932 1560 824137 824373 948934 949170 711 826458 826706 951255 951503 747 827275 827629 952072 952426 1065 829168 829607 953965 954404 1320 829949 830425 954746 955222 1431 832197 832434 959067 959304 714 833381 833715 960251 960585 1005 834305 834558 961175 961428 762 839012 839216 965895 966099 615 840524 840835 967407 967718 936 841097 841644 967980 968527 1644 842958 843381 969841 970264 1272 845147 845349 971886 972088 609 845602 846029 972341 972768 1284 846823 847308 973562 974047 1458 847608 847920 974347 974659 939 848682 849037 975421 975776 1068 849246 849751 975985 976490 1518 849867 850072 976606 976811 618 850999 851479 977738 978218 1443 851481 851716 978220 978455 708 852048 852287 978787 979026 720 852947 853168 979686 979907 666 854794 855005 981532 981743 636 855107 855585 981846 982324 1437 855680 855976 982419 982715 891 857016 857221 983682 983887 618 857661 858292 984327 984958 1896 858469 858722 985136 985389 762 858802 859015 985469 985682 642 860912 861142 987579 987809 693 861749 861983 988415 988649 705 862759 862982 989425 989648 672 865489 865766 992258 992535 834 865768 866004 992537 992773 711 866423 866794 993192 993563 1116 867315 867529 994084 994298 645 867711 867937 994480 994706 681 868317 868769 995086 995538 1359 868960 869172 995729 995941 639 869174 869379 995943 996148 618 869581 869898 996350 996667 954 870996 871383 997765 998152 1164 873497 873732 1000266 1000501 708 873734 874035 1000503 1000804 906 874493 874786 1001262 1001555 882 874818 875095 1001587 1001864 834 876323 876735 1004046 1004458 1239 877193 877408 1004916 1005131 648 877453 877976 1005176 1005699 1572 878102 878316 1005825 1006039 645 878360 878829 1006083 1006552 1410 878948 879177 1006671 1006900 690 879179 879387 1006902 1007110 627 879419 879669 1007142 1007392 753 879671 879890 1007394 1007613 660 880033 880370 1007755 1008092 1014 880495 880731 1008217 1008453 711 881337 881536 1009059 1009258 600 881772 882057 1009494 1009779 858 882059 882304 1009781 1010026 738 882494 882787 1010216 1010509 882 882789 883106 1010511 1010828 954 884251 884485 1011973 1012207 705 885244 885697 1012966 1013419 1362 886891 887165 1014613 1014887 825 887198 887424 1014920 1015146 681 887729 888012 1015451 1015734 852 888014 888372 1015736 1016094 1077 888374 888603 1016096 1016325 690 888605 889068 1016327 1016790 1392 889734 889950 1017457 1017673 651 890478 890689 1018201 1018412 636 891140 891620 1018863 1019343 1443 891622 891884 1019345 1019607 789 892279 892609 1020002 1020332 993 895107 895421 1022830 1023144 945 895956 896269 1023679 1023992 942 896468 896727 1024191 1024450 780 897283 897497 1025006 1025220 645 897520 897791 1025243 1025514 816 901363 901604 1032396 1032637 726 902056 902308 1033089 1033341 759 902490 902737 1033523 1033770 744 902739 903182 1033772 1034215 1332 904186 904401 1037735 1037950 648 906687 906905 1040236 1040454 657 910222 910490 1043771 1044039 807 912033 912304 1045582 1045853 816 912852 913185 1046401 1046734 1002 913841 914066 1047390 1047615 678 914986 915276 1048498 1048788 873 915473 915822 1048985 1049334 1050 916829 917061 1050341 1050573 699 917267 917535 1050779 1051047 807 917540 917745 1051052 1051257 618 917978 918269 1051490 1051781 876 918885 919119 1052397 1052631 705 919198 919517 1052710 1053029 960 919680 919897 1053192 1053409 654 920748 920974 1054260 1054486 681 921171 921406 1054683 1054918 708 921408 921951 1054920 1055463 1632 921953 923120 1055465 1056632 3504 923158 923387 1056670 1056899 690 923950 924230 1057462 1057742 843 925370 926038 1146447 1147115 2007 926040 926242 1147117 1147319 609 926275 927044 1147352 1148121 2310 927564 927936 1148641 1149013 1119 928215 928771 1149292 1149848 1671 929811 930058 1150888 1151135 744 930060 930372 1151137 1151449 939 930878 931200 1151955 1152277 969 931202 931652 1152279 1152729 1353 931654 932145 1152731 1153222 1476 932147 932461 1153224 1153538 945 932463 932760 1153540 1153837 894 932762 933125 1153839 1154202 1092 933127 933504 1154204 1154581 1134 933506 933899 1154583 1154976 1182 934265 934466 1155342 1155543 606 934900 935127 1156016 1156243 684 935833 936177 1156949 1157293 1035 936449 937304 1157561 1158416 2568 937477 937691 1158589 1158803 645 937915 939255 1159027 1160367 4023 939544 939872 1160656 1160984 987 940110 940343 1161222 1161455 702 940345 940662 1161457 1161774 954 940818 941235 1161930 1162347 1254 941576 941796 1162688 1162908 663 941798 942102 1162910 1163214 915 942182 942703 1163294 1163815 1566 942837 943313 1163949 1164425 1431 944568 944819 1165681 1165932 756 947729 947977 1168843 1169091 747 949842 950418 1169485 1170061 1731 950612 950835 1170255 1170478 672 950843 951066 1170486 1170709 672 951068 951282 1170711 1170925 645 951527 951807 1171170 1171450 843 951809 952170 1171452 1171813 1086 952556 952839 1172199 1172482 852 953456 954057 1173099 1173700 1806 954464 954780 1174107 1174423 951 954788 955050 1174431 1174693 789 955595 955818 1175238 1175461 672 955820 956426 1175463 1176069 1821 956495 956920 1176138 1176563 1278 956922 957317 1176565 1176960 1188 957533 957833 1177176 1177476 903 957895 958245 1177538 1177888 1053 958403 958989 1178046 1178632 1761 959615 959829 1179258 1179472 645 960300 960526 1179943 1180169 681 960846 961677 1180489 1181320 2496 961679 962145 1181322 1181788 1401 962147 962362 1181790 1182005 648 962364 962754 1182007 1182397 1173 962919 963340 1182562 1182983 1266 965709 965910 1185351 1185552 606 966533 966747 1186175 1186389 645 967358 967892 1187000 1187534 1605 967894 968156 1187536 1187798 789 969047 969265 1188689 1188907 657 969408 969720 1189050 1189362 939 970335 970540 1189977 1190182 618 970794 971099 1190436 1190741 918 971310 971536 1190952 1191178 681 971538 971891 1191180 1191533 1062 972562 972883 1192204 1192525 966 972954 973162 1192596 1192804 627 973976 974202 1193618 1193844 681 974738 974941 1194380 1194583 612 975378 975600 1195020 1195242 669 975602 975903 1195244 1195545 906 977765 977979 1197407 1197621 645 978464 978717 1198106 1198359 762 979620 979833 1199262 1199475 642 979981 980296 1199623 1199938 948 980460 980813 1200102 1200455 1062 981037 981299 1200679 1200941 789 981721 982168 1201363 1201810 1344 982352 982589 1201994 1202231 714 983103 983419 1202745 1203061 951 983832 984346 1203303 1203817 1545 984627 985057 1204098 1204528 1293 985059 985398 1204530 1204869 1020 985636 986069 1205107 1205540 1302 987711 987927 1207182 1207398 651 987929 988141 1207400 1207612 639 988170 988513 1207641 1207984 1032 988675 988984 1208146 1208455 930 989214 989491 1208685 1208962 834 989493 989995 1208964 1209466 1509 990318 990643 1209789 1210114 978 993345 993771 1212816 1213242 1281 996936 997312 1216408 1216784 1131 999032 999400 1218503 1218871 1107 999491 999719 1218962 1219190 687 1002117 1002693 1221589 1222165 1731 1002826 1003134 1222298 1222606 927 1003382 1003613 1222854 1223085 696 1003817 1004072 1223288 1223543 768 1004749 1005070 1224220 1224541 966 1005285 1005529 1224756 1225000 735 1005582 1005955 1225053 1225426 1122 1006031 1006261 1225502 1225732 693 1006952 1007367 1226423 1226838 1248 1007987 1008250 1227458 1227721 792 1008824 1009376 1228295 1228847 1659 1009477 1009703 1228948 1229174 681 1011376 1011728 1230847 1231199 1059 1012105 1012725 1231576 1232196 1863 1013177 1013397 1232648 1232868 663 1013621 1013877 1233092 1233348 771 1013960 1014248 1233431 1233719 867 1014406 1014739 1233877 1234210 1002 1014741 1016713 1234212 1236184 5919 1016737 1017056 1236208 1236527 960 1017058 1017762 1236529 1237233 2115 1017764 1018240 1237235 1237711 1431 1018242 1018915 1237713 1238386 2022 1018917 1019555 1238388 1239026 1917 1019679 1020273 1239150 1239744 1785 1020275 1020545 1239746 1240016 813 1020547 1021341 1240018 1240812 2385 1021343 1021732 1240814 1241203 1170 1021734 1022021 1241205 1241492 864 1022023 1022522 1241494 1241993 1500 1022524 1023481 1241995 1242952 2874 1023483 1023904 1242954 1243375 1266 1024077 1024471 1243548 1243942 1185 1024473 1024744 1243944 1244215 816 1024767 1025083 1244238 1244554 951 1025085 1025507 1244556 1244978 1269 1025655 1025859 1245126 1245330 615 1025861 1026359 1245332 1245830 1497 1026361 1027147 1245832 1246618 2361 1027783 1028072 1247254 1247543 870 1028797 1029104 1248268 1248575 924 1029106 1029377 1248577 1248848 816 1029451 1029767 1248922 1249238 951 1031117 1031346 1295831 1296060 690 1031348 1031584 1296062 1296298 711 1031592 1031839 1296306 1296553 744 1033953 1034196 1298667 1298910 732 1036286 1036497 1301000 1301211 636 1036499 1036788 1301213 1301502 870 1038009 1038612 1302723 1303326 1812 1039130 1039329 1303844 1304043 600 1040143 1040443 1304863 1305163 903 1041571 1041830 1306296 1306555 780 1042342 1042577 1307067 1307302 708 1043203 1043499 1307928 1308224 891 1043609 1043960 1308334 1308685 1056 1043989 1044293 1308714 1309018 915 1044784 1045214 1309509 1309939 1293 1045810 1046177 1310535 1310902 1104 1046494 1046894 1311219 1311619 1203 1047786 1048035 1312511 1312760 750 1048403 1048626 1313128 1313351 672 1050249 1050533 1314197 1314481 855 1050535 1050855 1314483 1314803 963 1051613 1051825 1315560 1315772 639 1053310 1053513 1317257 1317460 612 1055016 1055277 1318963 1319224 786 1055614 1055820 1319561 1319767 621 1056041 1056336 1319988 1320283 888 1062010 1062268 1325959 1326217 777 1062270 1062472 1326219 1326421 609 1062766 1063132 1326715 1327081 1101 1065120 1065522 1329067 1329469 1209 1066521 1066728 1330468 1330675 624 1068256 1068461 1393625 1393830 618 1070073 1070289 1395442 1395658 651 1073596 1073868 1398965 1399237 819 1075019 1075230 1400388 1400599 636 1078198 1078642 1403567 1404011 1335 1080889 1081661 1408390 1409162 2319 1081663 1081907 1409164 1409408 735 1083213 1083564 1410714 1411065 1056 1084147 1084615 1411647 1412115 1407 1084617 1085220 1412117 1412720 1812 1085337 1086089 1412837 1413589 2259 1086091 1086892 1413591 1414392 2406 1086894 1088334 1414394 1415834 4323 1088336 1088973 1415836 1416473 1914 1088975 1089198 1416475 1416698 672 1089200 1090692 1416700 1418192 4479 1090694 1091324 1418194 1418824 1893 1091338 1091738 1418838 1419238 1203 1091740 1092322 1419240 1419822 1749 1092582 1092822 1420082 1420322 723 1093020 1093334 1420520 1420834 945 1094725 1094939 1452708 1452922 645 1095905 1096124 1453888 1454107 660 1097354 1097647 1542356 1542649 882 1098625 1098917 1543627 1543919 879 1099210 1099412 1544212 1544414 609 1099457 1099684 1544459 1544686 684 1100764 1101034 1545766 1546036 813 1101045 1101339 1546047 1546341 885 1101674 1101989 1546676 1546991 948 1102092 1102363 1547094 1547365 816 1102365 1102618 1547367 1547620 762 1103104 1103471 1548106 1548473 1104 1103473 1103754 1548475 1548756 846 1104258 1104697 1549263 1549702 1320 1104825 1105118 1549830 1550123 882 1105264 1105635 1550269 1550640 1116 1107124 1107413 1552129 1552418 870 1108271 1108657 1553275 1553661 1161 1108681 1108924 1553685 1553928 732 1109346 1109632 1554350 1554636 861 1109634 1109956 1554638 1554960 969 1110421 1110740 1555425 1555744 960 1113150 1113674 1558154 1558678 1575 1114033 1114253 1559037 1559257 663 1114604 1115018 1559608 1560022 1245 1115539 1116064 1560543 1561068 1578 1117589 1117965 1562593 1562969 1131 1118292 1118588 1563296 1563592 891 1118709 1118950 1563713 1563954 726 1119159 1119388 1564163 1564392 690 1119723 1119947 1564727 1564951 675 1119949 1120261 1564953 1565265 939 1120588 1120794 1565595 1565801 621 1122359 1122620 1567366 1567627 786 1122622 1123084 1567629 1568091 1389 1123086 1123315 1568093 1568322 690 1123562 1123837 1568569 1568844 828 1124397 1124875 1569404 1569882 1437 1124877 1125079 1569884 1570086 609 1125081 1125401 1570088 1570408 963 1126416 1126638 1571423 1571645 669 1126972 1127504 1571979 1572511 1599 1130129 1130410 1575136 1575417 846 1130432 1130769 1575439 1575776 1014 1130915 1131189 1575922 1576196 825 1131307 1131584 1576314 1576591 834 1131710 1132007 1576717 1577014 894 1132639 1132844 1577643 1577848 618 1133931 1134198 1578901 1579168 804 1134305 1134543 1579275 1579513 717 1134765 1135042 1579735 1580012 834 1135209 1135533 1580179 1580503 975 1135535 1135746 1580505 1580716 636 1138152 1138351 1583122 1583321 600 1141656 1141899 1586625 1586868 732 1141974 1142422 1586943 1587391 1347 1142424 1142719 1587393 1587688 888 1142772 1144076 1587741 1589045 3915 1144231 1144610 1589200 1589579 1140 1145893 1146095 1590851 1591053 609 1146097 1146768 1591055 1591726 2016 1147425 1147659 1592383 1592617 705 1147661 1148426 1592619 1593384 2298 1148428 1148768 1593386 1593726 1023 1148860 1149134 1593818 1594092 825 1149679 1149887 1594637 1594845 627 1150045 1150495 1595003 1595453 1353 1150497 1150934 1595455 1595892 1314 1150936 1151627 1595894 1596585 2076 1151758 1152008 1596716 1596966 753 1152010 1152308 1596968 1597266 897 1154189 1154470 1599147 1599428 846 1154963 1155234 1599921 1600192 816 1155446 1155681 1600404 1600639 708 1155893 1156144 1600851 1601102 756 1156829 1157332 1601788 1602291 1512 1157334 1158035 1602293 1602994 2106 1158102 1158403 1603061 1603362 906 1158405 1158624 1603364 1603583 660 1158834 1159823 1603793 1604782 2970 1160058 1160311 1605017 1605270 762 1160313 1160669 1605272 1605628 1071 1161060 1161369 1606039 1606348 930 1161617 1162284 1606596 1607263 2004 1162328 1162545 1607307 1607524 654 1162766 1163050 1607745 1608029 855 1163052 1163417 1608031 1608396 1098 1164290 1164504 1609269 1609483 645 1165119 1165326 1610099 1610306 624 1166429 1166655 1611409 1611635 681 1167097 1167326 1612094 1612323 690 1167728 1168624 1612725 1613621 2691 1168633 1168993 1613631 1613991 1083 1169409 1169754 1614407 1614752 1038 1170137 1170390 1615135 1615388 762 1170542 1170789 1615540 1615787 744 1170869 1171139 1615867 1616137 813 1171339 1171569 1616337 1616567 693 1174014 1174222 1619012 1619220 627 1174295 1174890 1619293 1619888 1788 1177067 1177338 1622065 1622336 816 1177649 1177945 1622647 1622943 891 1178544 1179094 1623542 1624092 1653 1181855 1182215 1625567 1625927 1083 1182373 1182719 1626085 1626431 1041 1183589 1184030 1674604 1675045 1326 1184592 1185541 1675607 1676556 2850 1186128 1186504 1677143 1677519 1131 1187317 1187531 1678332 1678546 645 1188196 1188482 1694671 1694957 861 1188520 1189014 1694995 1695489 1485 1190190 1190410 1696665 1696885 663 1190490 1190704 1696965 1697179 645 1191000 1191427 1697475 1697902 1284 1191581 1191893 1698056 1698368 939 1192367 1192596 1698842 1699071 690 1192607 1193105 1699082 1699580 1497 1194097 1194607 1700572 1701082 1533 1223501 1223728 1753170 1753397 684 1223730 1224097 1753399 1753766 1104 1224276 1224584 1753945 1754253 927 1224724 1224971 1754393 1754640 744 1225028 1225507 1754697 1755176 1440 1225637 1225893 1755306 1755562 771 1226447 1226673 1756116 1756342 681 1226859 1227359 1756528 1757028 1503 1227866 1228311 1757535 1757980 1338 1229087 1229304 1758756 1758973 654 1230079 1230469 1759748 1760138 1173 1230471 1230676 1760140 1760345 618 1232248 1232471 1761917 1762140 672 1232606 1232814 1762275 1762483 627 1232921 1233214 1762590 1762883 882 1233216 1233441 1762885 1763110 678 1234072 1234389 1763742 1764059 954 1234682 1234894 1764352 1764564 639 1235295 1235605 1764965 1765275 933 1235979 1236510 1765649 1766180 1596 1236747 1237304 1766450 1767007 1674 1237399 1237736 1767102 1767439 1014 1237918 1238175 1767621 1767878 774 1239867 1240102 1769576 1769811 708 1242327 1242682 1772037 1772392 1068 1243274 1243615 1774297 1774638 1026 1243647 1243904 1774670 1774927 774 1244959 1245314 1782097 1782452 1068 1247120 1247325 1784245 1784450 618 1248014 1248231 1785139 1785356 654 1249651 1250407 1786776 1787532 2271 1253751 1253992 1787740 1787981 726 1254762 1254976 1788751 1788965 645 1255802 1256209 1789866 1790273 1224 1256241 1256512 1790305 1790576 816 1256522 1256851 1790586 1790915 990 1257015 1257237 1791079 1791301 669 1257611 1257936 1791675 1792000 978 1257938 1258387 1792002 1792451 1350 1258476 1258767 1792540 1792831 876 1259433 1259722 1793497 1793786 870 1259787 1260338 1793851 1794402 1656 1260493 1260912 1794557 1794976 1260 1261084 1261616 1795148 1795680 1599 1261948 1262344 1796012 1796408 1191 1262346 1262775 1796410 1796839 1290 1263548 1264381 1797612 1798445 2502 1264383 1264604 1798447 1798668 666 1264789 1265051 1798853 1799115 789 1265092 1265699 1799156 1799763 1824 1265755 1266058 1799819 1800122 912 1266060 1266295 1800124 1800359 708 1266477 1266715 1800541 1800779 717 1266773 1267176 1800837 1801240 1212 1267516 1267889 1801580 1801953 1122 1268797 1269100 1802861 1803164 912 1269947 1270177 1804001 1804231 693 1270815 1271177 1804869 1805231 1089 1271365 1271578 1805419 1805632 642 1272700 1272973 1806757 1807030 822 1274609 1274904 1808667 1808962 888 1274906 1275166 1808964 1809224 783 1275375 1275709 1809433 1809767 1005 1275986 1276261 1810044 1810319 828 1276656 1276982 1810714 1811040 981 1277047 1277361 1811105 1811419 945 1278013 1278290 1812071 1812348 834 1278921 1279555 1812856 1813490 1905 1280043 1280875 1813978 1814810 2499 1281324 1281649 1815259 1815584 978 1281822 1282332 1815757 1816267 1533 1282500 1282720 1816435 1816655 663 1283051 1283499 1816986 1817434 1347 1284041 1284605 1817976 1818540 1695 1285008 1285243 1818943 1819178 708 1286759 1287018 1820516 1820775 780 1287649 1287858 1821406 1821615 630 1288191 1288609 1821948 1822366 1257 1289330 1289537 1823087 1823294 624 1289539 1289987 1823296 1823744 1347 1290220 1290510 1823977 1824267 873 1290604 1290974 1824361 1824731 1113 1291441 1291694 1825198 1825451 762 1291924 1292318 1825681 1826075 1185 1292658 1292978 1826414 1826734 963 1292980 1293260 1826736 1827016 843 1295001 1295224 1827756 1827979 672 1295226 1295459 1827981 1828214 702 1295566 1296074 1828321 1828829 1527 1296256 1296491 1829011 1829246 708 1296988 1297431 1829743 1830186 1332 1297629 1297831 1830384 1830586 609 1298187 1298500 1830942 1831255 942 1299091 1299323 1831847 1832079 699 1300304 1300574 1833060 1833330 813 1300836 1301049 1833592 1833805 642 1301774 1301978 1834530 1834734 615 1304012 1304214 1836768 1836970 609 1304216 1304712 1836972 1837468 1491 1306115 1306392 1838871 1839148 834 1306394 1306767 1839150 1839523 1122 1307080 1307422 1839837 1840179 1029 1307526 1307920 1840283 1840677 1185 1308592 1308957 1841350 1841715 1098 1309002 1309261 1841761 1842020 780 1309694 1309933 1842453 1842692 720 1309959 1310355 1842718 1843114 1191 1310357 1310661 1843116 1843420 915 1310861 1311158 1843620 1843917 894 1311220 1311819 1843979 1844578 1800 1311945 1312215 1844704 1844974 813 1654122 1654379 2273590 2273847 774 1654543 1654844 2274011 2274312 906 1655023 1655285 2274491 2274753 789 1656596 1656807 2276064 2276275 636 1656920 1657151 2276388 2276619 696 1657520 1657818 2276988 2277286 897 1658870 1659291 2278338 2278759 1266 1659463 1659737 2278931 2279205 825 1659803 1660033 2279271 2279501 693 1660035 1660281 2279503 2279749 741 1660433 1660653 2279901 2280121 663 1661139 1661651 2280607 2281119 1539 1662613 1662816 2282081 2282284 612 1663623 1663962 2283090 2283429 1020 1663964 1664212 2283431 2283679 747 1664890 1665423 2284357 2284890 1602 1666224 1666464 2285691 2285931 723 1666466 1666766 2285933 2286233 903 1666768 1667146 2286235 2286613 1137 1667359 1667674 2286826 2287141 948 1668458 1668758 2287925 2288225 903 1668760 1669020 2288227 2288487 783 1669621 1669831 2289088 2289298 633 1670319 1670539 2289786 2290006 663 1670541 1671010 2290008 2290477 1410 1672979 1673255 2292446 2292722 831 1674007 1674215 2293474 2293682 627 1674316 1674594 2293783 2294061 837 1674995 1675266 2294462 2294733 816 1675268 1675475 2294735 2294942 624 1675523 1675836 2294990 2295303 942 1675988 1676495 2295455 2295962 1524 1676681 1677165 2296148 2296632 1455 1677410 1678123 2296877 2297590 2142 1678591 1678853 2298058 2298320 789 1678873 1679604 2298340 2299071 2196 1679606 1680258 2299073 2299725 1959 1681229 1681488 2300696 2300955 780 1681529 1681825 2300996 2301292 891 1681904 1682202 2301371 2301669 897 1682552 1682772 2302020 2302240 663 1683086 1683345 2302554 2302813 780 1683347 1684023 2302815 2303491 2031 1684690 1684966 2304158 2304434 831 1685041 1685446 2304509 2304914 1218 1685588 1686309 2305056 2305777 2166 1686565 1686909 2306033 2306377 1035 1686911 1687212 2306379 2306680 906 1687553 1687752 2307021 2307220 600 1687757 1688014 2307225 2307482 774 1688577 1688776 2308045 2308244 600 1689575 1689781 2308862 2309068 621 1690810 1691083 2310096 2310369 822 1691787 1691987 2311073 2311273 603 1691989 1692234 2311275 2311520 738 1692392 1692684 2311678 2311970 879 1693703 1693903 2312991 2313191 603 1694957 1695173 2314245 2314461 651 1695543 1696130 2314839 2315426 1764 1696602 1696807 2315898 2316103 618 1697022 1697225 2316318 2316521 612 1697227 1697499 2316523 2316795 819 1698776 1699026 2318072 2318322 753 1700150 1700479 2319446 2319775 990 1701538 1701767 2320836 2321065 690 1702836 1703180 2322135 2322479 1035 1703690 1703890 2322989 2323189 603 1703892 1704092 2323191 2323391 603 1704678 1705054 2323977 2324353 1131 1705074 1705300 2324373 2324599 681 1706333 1706594 2325632 2325893 786 1707144 1707376 2326443 2326675 699 1707660 1707933 2326959 2327232 822 1707935 1708357 2327234 2327656 1269 1708359 1708684 2327658 2327983 978 1708950 1709206 2328249 2328505 771 1709208 1709492 2328507 2328791 855 1710050 1710352 2329349 2329651 909 1710738 1711294 2330037 2330593 1671 1711302 1711714 2330601 2331013 1239 1712016 1712422 2331315 2331721 1221 1713608 1714003 2332907 2333302 1188 1714161 1714558 2333460 2333857 1194 1714647 1714930 2333946 2334229 852 1714932 1715271 2334231 2334570 1020 1715774 1716050 2335074 2335350 831 1716622 1716821 2335922 2336121 600 1717659 1717866 2336958 2337165 624 1718229 1718448 2337529 2337748 660 1718507 1718990 2337807 2338290 1452 1719135 1719543 2338435 2338843 1227 1719809 1720020 2339109 2339320 636 1720375 1720610 2339675 2339910 708 1720675 1720958 2339975 2340258 852 1722052 1722498 2341352 2341798 1341 1722659 1722867 2341959 2342167 627 1723992 1724230 2343292 2343530 717 1725414 1725724 2344714 2345024 933 1725897 1726101 2345197 2345401 615 1726742 1726941 2346042 2346241 600 1729774 1730007 2349074 2349307 702 1730296 1730513 2349596 2349813 654 1730624 1730872 2349924 2350172 747 1731031 1731245 2350331 2350545 645 1731451 1731651 2350751 2350951 603 1731943 1732266 2351243 2351566 972 1732443 1732738 2351744 2352039 888 1733244 1733468 2352545 2352769 675 1733494 1733726 2352795 2353027 699 1734492 1735508 2353777 2354793 3051 1735510 1735985 2354795 2355270 1428 1736821 1737200 2356106 2356485 1140 1737301 1737638 2356586 2356923 1014 1737679 1738130 2356964 2357415 1356 1738573 1738859 2357858 2358144 861 1739051 1739291 2358336 2358576 723 1739293 1739737 2358578 2359022 1335 1739937 1740185 2359222 2359470 747 1742227 1742471 2361514 2361758 735 1743603 1743817 2362890 2363104 645 1744113 1744317 2363400 2363604 615 1744319 1744621 2363606 2363908 909 1745169 1745385 2364456 2364672 651 1746131 1746385 2365418 2365672 765 1746573 1746895 2365860 2366182 969 1747337 1747568 2366624 2366855 696 1748232 1748460 2367519 2367747 687 1748853 1749207 2368140 2368494 1065 1749248 1749452 2368535 2368739 615 1749626 1749828 2368913 2369115 609 1750229 1750511 2369516 2369798 849 1750757 1750965 2370044 2370252 627 1751171 1751397 2370458 2370684 681 1751450 1751849 2370737 2371136 1200 1752037 1752332 2371324 2371619 888 1752334 1752630 2371621 2371917 891 1752938 1753287 2372226 2372575 1050 1753361 1754001 2372649 2373289 1923 1754288 1754853 2373576 2374141 1698 1754978 1755727 2374266 2375015 2250 1757894 1758099 2377181 2377386 618 1758817 1759018 2378104 2378305 606 1759643 1760001 2378930 2379288 1077 1760024 1760307 2379311 2379594 852 1760888 1761168 2380175 2380455 843 1761426 1761639 2380713 2380926 642 1761758 1762277 2381045 2381564 1560 1763063 1763299 2382351 2382587 711 1763817 1764167 2383105 2383455 1053 1764169 1764674 2383457 2383962 1518 1764787 1765292 2384075 2384580 1518 1766897 1767545 2386185 2386833 1947 1768193 1768741 2387481 2388029 1647 1769209 1770005 2388497 2389293 2391 1770027 1771061 2389315 2390349 3105 1776510 1776832 2395800 2396122 969 1777391 1777779 2396686 2397074 1167 1778340 1778576 2397635 2397871 711 1779198 1779491 2398493 2398786 882 1779895 1780141 2399190 2399436 741 1780820 1781052 2400115 2400347 699 1781990 1782237 2401285 2401532 744 1782239 1782454 2401534 2401749 648 1783349 1783605 2402644 2402900 771 1784312 1784529 2403607 2403824 654 1784531 1785024 2403826 2404319 1482 1785293 1785664 2404588 2404959 1116 1785987 1786594 2405282 2405889 1824 1786596 1786808 2405891 2406103 639 1786974 1787396 2406269 2406691 1269 1787564 1788076 2406859 2407371 1539 1789601 1789856 2408896 2409151 768 1789985 1790241 2409280 2409536 771 1790516 1790720 2409811 2410015 615 1790722 1790924 2410017 2410219 609 1790932 1791157 2410227 2410452 678 1791358 1791557 2410653 2410852 600 1792805 1793042 2412100 2412337 714 1793280 1793651 2412576 2412947 1116 1793653 1794317 2412949 2413613 1995 1794961 1795189 2414257 2414485 687 1795191 1795402 2414487 2414698 636 1795903 1796127 2415199 2415423 675 1796193 1796481 2415489 2415777 867 1796483 1796797 2415779 2416093 945 1797149 1797739 2416444 2417034 1773 1797741 1798777 2417036 2418072 3111 1799635 1799909 2418930 2419204 825 1799911 1800548 2419206 2419843 1914 1800565 1800878 2419860 2420173 942 1803089 1803365 2422385 2422661 831 1803598 1803884 2422894 2423180 861 1804006 1804223 2423302 2423519 654 1804225 1804865 2423521 2424161 1923 1805161 1805519 2424457 2424815 1077 1805573 1805940 2424869 2425236 1104 1805942 1806186 2425238 2425482 735 1807310 1807896 2426606 2427192 1761 1808117 1808409 2427413 2427705 879 1808848 1809156 2428144 2428452 927 1809717 1809924 2429013 2429220 624 1810721 1811386 2430016 2430681 1998 1811496 1811808 2430791 2431103 939 1812044 1812254 2431339 2431549 633 1813444 1813751 2432739 2433046 924 1815933 1816168 2435026 2435261 708 1816170 1816385 2435263 2435478 648 1816567 1816846 2435661 2435940 840 1816883 1817128 2435977 2436222 738 1817130 1817717 2436224 2436811 1764 1818438 1818817 2437532 2437911 1140 1819078 1819806 2438172 2438900 2187 1820086 1820289 2439181 2439384 612 1820347 1820650 2439442 2439745 912 1821080 1821318 2440175 2440413 717 1821799 1822009 2440894 2441104 633 1822925 1823352 2442020 2442447 1284 1823455 1823845 2442550 2442940 1173 1825441 1825682 2444536 2444777 726 1828148 1828460 2447243 2447555 939 1830179 1830396 2449274 2449491 654 1831039 1831362 2450134 2450457 972 1833600 1833973 2452695 2453068 1122 1835176 1835437 2454271 2454532 786 1837316 1837627 2456411 2456722 936 1839377 1839643 2458472 2458738 801 1840093 1840608 2459188 2459703 1548 1840832 1841088 2459927 2460183 771 1841369 1841757 2460464 2460852 1167 1842024 1842384 2461119 2461479 1083 1842790 1843015 2461885 2462110 678 1844112 1844407 2463207 2463502 888 1844713 1844993 2463808 2464088 843 1845727 1845938 2464822 2465033 636 1845940 1846159 2465035 2465254 660 1847856 1848154 2466951 2467249 897 1848836 1849199 2468722 2469085 1092 1849495 1849718 2469381 2469604 672 1850211 1850541 2470097 2470427 993 1850732 1850934 2470618 2470820 609 1850993 1851408 2470879 2471294 1248 1852529 1853020 2473729 2474220 1476 1853028 1853379 2474228 2474579 1056 1853852 1854132 2475052 2475332 843 1854784 1855075 2475969 2476260 876 1856078 1856343 2477263 2477528 798 1856413 1856625 2477598 2477810 639 1856711 1857112 2477896 2478297 1206 1857558 1858246 2478743 2479431 2067 1858248 1858551 2479433 2479736 912 1858553 1858836 2479738 2480021 852 1860370 1861509 2481555 2482694 3420 1861511 1861782 2482696 2482967 816 1863334 1863610 2484522 2484798 831 1863926 1864222 2485114 2485410 891 1864224 1864732 2485412 2485920 1527 1864734 1865340 2485922 2486528 1821 1865342 1865574 2486530 2486762 699 1866380 1866624 2487568 2487812 735 1866680 1866887 2487868 2488075 624 1867227 1867483 2488415 2488671 771 1867593 1867912 2488781 2489100 960 1868545 1868988 2489733 2490176 1332 1869317 1869768 2490505 2490956 1356 1869885 1870338 2491073 2491526 1362 1870392 1870609 2491580 2491797 654 1870868 1871067 2492056 2492255 600 1871297 1871667 2492485 2492855 1113 1871669 1872012 2492857 2493200 1032 1872212 1872466 2493400 2493654 765 1873361 1873609 2494549 2494797 747 1874584 1874784 2495772 2495972 603 1875329 1875572 2496517 2496760 732 1876026 1876318 2497214 2497506 879 1877472 1877905 2498659 2499092 1302 1878716 1879194 2499903 2500381 1437 1879555 1880176 2500742 2501363 1866 1880178 1880422 2501365 2501609 735 1882198 1882517 2503610 2503929 960 1882790 1883016 2504202 2504428 681 1883198 1883502 2504610 2504914 915 1883504 1883748 2504916 2505160 735 1885188 1885465 2506601 2506878 834 1885990 1886200 2507403 2507613 633 1887393 1887625 2508806 2509038 699 1887654 1888035 2509067 2509448 1146 1888341 1888556 2509754 2509969 648 1889085 1889473 2510498 2510886 1167 1890096 1890394 2511509 2511807 897 1890396 1890615 2511809 2512028 660 1891089 1891371 2512502 2512784 849 1892049 1892388 2513462 2513801 1020 1892542 1892861 2513955 2514274 960 1893008 1893345 2514421 2514758 1014 1893700 1893987 2515113 2515400 864 1894688 1895028 2516101 2516441 1023 1895030 1895434 2516443 2516847 1215 1895450 1895675 2516863 2517088 678 1895677 1896174 2517090 2517587 1494 1896582 1896861 2517995 2518274 840 1897197 1897669 2518610 2519082 1419 1897725 1898386 2519138 2519799 1986 1898635 1898897 2520048 2520310 789 1898899 1899782 2520312 2521195 2652 1900050 1900363 2521465 2521778 942 1901084 1901334 2522499 2522749 753 1901591 1902258 2523006 2523673 2004 1902260 1903250 2523675 2524665 2973 1903706 1903916 2525122 2525332 633 1904451 1904683 2525867 2526099 699 1905090 1905374 2526506 2526790 855 1905394 1905787 2526810 2527203 1182 1906033 1906301 2527448 2527716 807 1906477 1906764 2527892 2528179 864 1907251 1907489 2528668 2528906 717 1907826 1908287 2529243 2529704 1386 1909427 1909630 2530844 2531047 612 1909823 1910092 2531240 2531509 810 1910094 1910722 2531511 2532139 1887 1911155 1911438 2532572 2532855 852 1911854 1912301 2533271 2533718 1344 1912475 1912707 2533892 2534124 699 1912709 1913020 2534126 2534437 936 1913418 1913755 2534835 2535172 1014 1914182 1914433 2535599 2535850 756 1914518 1914724 2535935 2536141 621 1915040 1915634 2536457 2537051 1785 1915716 1915918 2537133 2537335 609 1916259 1916497 2537676 2537914 717 1919902 1920259 2541320 2541677 1074 1920774 1921293 2542192 2542711 1560 1921956 1922185 2543374 2543603 690 1922734 1923082 2544152 2544500 1047 1923603 1923893 2545021 2545311 873 1924022 1924222 2545440 2545640 603 1924256 1924465 2545674 2545883 630 1925121 1925374 2546539 2546792 762 1925790 1926091 2547208 2547509 906 1928392 1928797 2549811 2550216 1218 1928836 1929340 2550255 2550759 1515 1929708 1930092 2551127 2551511 1155 1930094 1930449 2551513 2551868 1068 1930451 1930783 2551870 2552202 999 1931042 1931502 2552461 2552921 1383 1931504 1931847 2552923 2553266 1032 1931852 1932171 2553271 2553590 960 1932814 1933017 2554233 2554436 612 1933019 1933251 2554438 2554670 699 1933394 1934088 2554813 2555507 2085 1934090 1934303 2555509 2555722 642 1934591 1934791 2556010 2556210 603 1935284 1935483 2556703 2556902 600 1935593 1936007 2557012 2557426 1245 1936009 1936520 2557428 2557939 1536 1936878 1937808 2558297 2559227 2793 1937810 1938056 2559229 2559475 741 1938058 1938409 2559477 2559828 1056 1938547 1938764 2559966 2560183 654 1939078 1939529 2560497 2560948 1356 1939546 1939765 2560965 2561184 660 1939957 1940251 2561376 2561670 885 1940740 1940996 2562159 2562415 771 1942544 1943027 2564062 2564545 1452 1943029 1943304 2564547 2564822 828 1943422 1943789 2564940 2565307 1104 1943791 1944077 2565309 2565595 861 1944316 1944535 2565834 2566053 660 1944537 1944809 2566055 2566327 819 1945299 1945757 2566817 2567275 1377 1946023 1946328 2567541 2567846 918 1946330 1946559 2567848 2568077 690 1946564 1946799 2568082 2568317 708 1946827 1947162 2568345 2568680 1008 1948177 1948773 2569695 2570291 1791 1949888 1950127 2571406 2571645 720 1950394 1950831 2571912 2572349 1314 1950833 1951383 2572351 2572901 1653 1951403 1952063 2572921 2573581 1983 1953790 1954060 2575308 2575578 813 1954270 1954649 2575788 2576167 1140 1954951 1955256 2576469 2576774 918 1956632 1956895 2578153 2578416 792 1957021 1957247 2578542 2578768 681 1957920 1958470 2579441 2579991 1653 1958472 1958686 2579993 2580207 645 1959135 1959596 2580656 2581117 1386 1961538 1961756 2583059 2583277 657 1961794 1962031 2583315 2583552 714 1962511 1962740 2584032 2584261 690 1963041 1963240 2584562 2584761 600 1964000 1964244 2585521 2585765 735 1964308 1964714 2585829 2586235 1221 1964720 1964952 2586241 2586473 699 1964954 1965247 2586475 2586768 882 1965875 1966077 2587396 2587598 609 1966259 1966477 2587780 2587998 657 1966819 1967436 2588340 2588957 1854 1968034 1968254 2589555 2589775 663 1968813 1969103 2590334 2590624 873 1969837 1970060 2591358 2591581 672 1970086 1970291 2591607 2591812 618 1971049 1971529 2592568 2593048 1443 1971978 1972255 2593497 2593774 834 1972876 1973268 2594395 2594787 1179 1973283 1973564 2594802 2595083 846 1974175 1974430 2595694 2595949 768 1975026 1975276 2596545 2596795 753 1975278 1975528 2596797 2597047 753 1975671 1975990 2597190 2597509 960 1977699 1977960 2598442 2598703 786 1978683 1978945 2599426 2599688 789 1979046 1979359 2599789 2600102 942 1980567 1980795 2601310 2601538 687 1982052 1982308 2602796 2603052 771 1982625 1982842 2603369 2603586 654 1982844 1983139 2603588 2603883 888 1984651 1985338 2605395 2606082 2064 1985855 1986116 2606600 2606861 786 1986452 1987099 2607196 2607843 1944 1987606 1988052 2608350 2608796 1341 1989494 1989724 2610238 2610468 693 1990043 1990278 2631906 2632141 708 1990754 1991024 2632617 2632887 813 1991686 1991942 2633549 2633805 771 1992676 1992895 2634539 2634758 660 1993250 1993573 2635113 2635436 972 1993733 1993977 2635596 2635840 735 1993979 1994269 2635842 2636132 873 1994271 1994552 2636134 2636415 846 1996761 1997337 2638624 2639200 1731 1997710 1998233 2639573 2640096 1572 1998736 1998953 2640599 2640816 654 1998955 1999175 2640818 2641038 663 1999338 1999939 2641201 2641802 1806 2001495 2001699 2643618 2643822 615 2002872 2003182 2644986 2645296 933 2004044 2004246 2646158 2646360 609 2004760 2005085 2646874 2647199 978 2007088 2007366 2649202 2649480 837 2007394 2007805 2649508 2649919 1236 2007807 2008180 2649921 2650294 1122 2011047 2011524 2655125 2655602 1434 2011589 2011918 2655667 2655996 990 2013971 2014599 2658049 2658677 1887 2014884 2015239 2659024 2659379 1068 2015595 2015830 2659735 2659970 708 2016279 2016783 2660419 2660923 1515 2017939 2018353 2662080 2662494 1245 2018612 2018943 2662753 2663084 996 2019325 2019661 2663466 2663802 1011 2019822 2020218 2663963 2664359 1191 2020220 2020530 2664361 2664671 933 2020532 2020953 2664673 2665094 1266 2020955 2021623 2665096 2665764 2007 2021625 2021857 2665766 2665998 699 2021859 2022464 2666000 2666605 1818 2022653 2023379 2666794 2667520 2181 2023837 2024052 2667978 2668193 648 2025011 2025411 2669152 2669552 1203 2026243 2026459 2670385 2670601 651 2027335 2027681 2671477 2671823 1041 2027725 2028345 2671867 2672487 1863 2028564 2028792 2672706 2672934 687 2028869 2029072 2673011 2673214 612 2030970 2031175 2675112 2675317 618 2033871 2034187 2678006 2678322 951 2035344 2035564 2679479 2679699 663 2037139 2037485 2681275 2681621 1041 2039412 2039618 2683547 2683753 621 2039771 2040082 2683906 2684217 936 2040374 2040678 2684509 2684813 915 2041532 2042285 2730847 2731600 2262 2042293 2042551 2731608 2731866 777 2042553 2042842 2731868 2732157 870 2043421 2043668 2732736 2732983 744 2043670 2043894 2732985 2733209 675 2045104 2045324 2734419 2734639 663 2052078 2052322 2742298 2742542 735 2053032 2053248 2743252 2743468 651 2053634 2053854 2743854 2744074 663 2053856 2054088 2744076 2744308 699 2054090 2054397 2744310 2744617 924 2054614 2054816 2744834 2745036 609 2056033 2056236 2746250 2746453 612 2057287 2057578 2747504 2747795 876 2062915 2064054 2753131 2754270 3420 2065897 2066449 2757364 2757916 1659 2066623 2066961 2758091 2758429 1017 2074799 2075316 2761899 2762416 1554 2075456 2075809 2762556 2762909 1062 2075811 2076169 2762910 2763268 1077 2076404 2076706 2763504 2763806 909 2077254 2077487 2764354 2764587 702 2077678 2077940 2764778 2765040 789 2077969 2078252 2765069 2765352 852 2079328 2079557 2766429 2766658 690 2079685 2079908 2766786 2767009 672 2082879 2083130 2769981 2770232 756 2084419 2084738 2771521 2771840 960 2084836 2085336 2771938 2772438 1503 2086206 2086438 2773308 2773540 699 2086440 2086651 2773542 2773753 636 2091346 2091562 2778006 2778222 651 2094483 2094687 2781143 2781347 615 2097262 2097574 2783920 2784232 939 2113919 2114137 2803895 2804113 657 2119227 2119458 2809107 2809338 696 2122375 2122654 2812343 2812622 840 2122745 2123002 2812713 2812970 774 2126130 2126337 2816098 2816305 624 2127587 2127870 2817558 2817841 852 2128148 2128410 2818119 2818381 789 2130083 2130306 2820054 2820277 672 2131508 2131765 2821479 2821736 774 2133560 2133891 2823531 2823862 996 2133935 2134325 2823906 2824296 1173 2134864 2135487 2824835 2825458 1872 2135806 2136050 2825778 2826022 735 2136085 2136302 2826057 2826274 654 2139119 2139375 2829563 2829819 771 2139410 2139702 2829854 2830146 879 2140010 2140292 2830454 2830736 849 2141744 2141972 2832191 2832419 687 2143720 2144076 2834167 2834523 1071 2144305 2144574 2834752 2835021 810 2144682 2145093 2835121 2835532 1236 2145494 2145735 2835933 2836174 726 2145917 2146119 2836356 2836558 609 2152874 2153097 2842908 2843131 672 2157500 2157728 2847534 2847762 687 2159512 2159726 2849546 2849760 645 2160915 2161195 2850949 2851229 843 2163830 2164029 2853865 2854064 600 2164634 2164884 2854669 2854919 753 2167991 2168191 2857396 2857596 603 2169513 2170123 2857657 2858267 1833 2170692 2170904 2858836 2859048 639 2171027 2171256 2859171 2859400 690 2171771 2172054 2859915 2860198 852 2172899 2173232 2861043 2861376 1002 2173706 2173992 2861850 2862136 861 2174134 2174470 2862278 2862614 1011 2176255 2176466 2864390 2864601 636 2176519 2176744 2864654 2864879 678 2178034 2178238 2866170 2866374 615 2178361 2178572 2866497 2866708 636 2179950 2180203 2868086 2868339 762 2180394 2180620 2868530 2868756 681 2181635 2182001 2869771 2870137 1101 2182296 2182583 2870432 2870719 864 2183634 2183837 2873952 2874155 612 2183839 2184087 2874157 2874405 747 2184857 2185097 2875201 2875441 723 2191221 2191427 2881566 2881772 621 2191466 2191724 2881811 2882069 777 2192021 2192638 2882366 2882983 1854 2192659 2192863 2883004 2883208 615 2194182 2194415 2884527 2884760 702 2198233 2198437 2891590 2891794 615 2200600 2200819 2893957 2894176 660 2201929 2202134 2895284 2895489 618 2202523 2202763 2896812 2897052 723 2205919 2206158 2900208 2900447 720 2208053 2208314 2902342 2902603 786 2209448 2209707 2905053 2905312 780 2209899 2210143 2905506 2905750 735 2210145 2210348 2905752 2905955 612 2210350 2210690 2905957 2906297 1023 2211187 2211475 2906794 2907082 867 2211943 2212186 2907550 2907793 732 2212389 2212600 2907996 2908207 636 2212933 2213153 2957456 2957676 663 2213274 2213964 2957797 2958487 2073 2218456 2218682 2963020 2963246 681 2219935 2220147 2964499 2964711 639 2220987 2221574 2965551 2966138 1764 2222369 2222661 2966933 2967225 879 2222834 2223101 2967398 2967665 804 2223432 2223734 2967996 2968298 909 2225496 2225947 2970060 2970511 1356 2226627 2226862 2971192 2971427 708 2226864 2227086 2971429 2971651 669 2228571 2228812 2979215 2979456 726 2229200 2229697 2979844 2980341 1494 2229855 2230119 2980499 2980763 795 2230121 2230345 2980765 2980989 675 2230830 2231351 2981474 2981995 1566 2231542 2231862 2982186 2982506 963 2232100 2232389 2982744 2983033 870 2233168 2233411 2983812 2984055 732 2233518 2234089 2984162 2984733 1716 2234218 2234614 2984862 2985258 1191 2234979 2235319 2985624 2985964 1023 2235321 2235523 2985966 2986168 609 2237286 2237587 2987931 2988232 906 2238311 2238529 2988956 2989174 657 2238619 2238940 2989264 2989585 966 2239235 2239730 2989880 2990375 1488 2239732 2239939 2990377 2990584 624 2241424 2242032 2992069 2992677 1827 2242658 2242988 2993303 2993633 993 2243305 2243526 2993938 2994159 666 2243528 2244242 2994161 2994875 2145 2244244 2244464 2994877 2995097 663 2245425 2245663 2996056 2996294 717 2245849 2246101 2996480 2996732 759 2246572 2247571 2997203 2998202 3000 2247573 2248062 2998204 2998693 1470 2248064 2248699 2998695 2999330 1908 2248701 2249569 2999332 3000200 2607 2249571 2250110 3000202 3000741 1620 2251980 2252305 3002560 3002885 978 2253003 2253255 3003583 3003835 759 2253263 2253585 3003843 3004165 969 2256235 2256769 3006815 3007349 1605 2259308 2259547 3009889 3010128 720 2259903 2260198 3010484 3010779 888 2260200 2260542 3010781 3011123 1029 2261231 2261549 3011812 3012130 957 2261794 2262073 3012375 3012654 840 2262083 2262426 3012664 3013007 1032 2263166 2263411 3013747 3013992 738 2263643 2264229 3014224 3014810 1761 2265002 2265281 3015583 3015862 840 2266560 2266943 3017141 3017524 1152 2268043 2268619 3018625 3019201 1731 2269273 2269802 3019856 3020385 1590 2272483 2272778 3023066 3023361 888 2274347 2274557 3024930 3025140 633 2275057 2275295 3025640 3025878 717 2275539 2275809 3026122 3026392 813 2275811 2276060 3026394 3026643 750 2276062 2276278 3026645 3026861 651 2276280 2276870 3026863 3027453 1773 2277547 2277881 3028130 3028464 1005 2278243 2278588 3028826 3029171 1038 2280390 2280642 3030973 3031225 759 2280686 2280890 3031269 3031473 615 2281848 2282052 3032431 3032635 615 2282054 2282528 3032637 3033111 1425 2283182 2283584 3033765 3034167 1209 2283586 2283854 3034169 3034437 807 2284626 2284837 3035207 3035418 636 2285076 2285356 3035657 3035937 843 2285358 2285560 3035939 3036141 609 2289824 2290039 3039030 3039245 648 2290772 2290985 3039978 3040191 642 2291857 2292428 3041063 3041634 1716 2293245 2293458 3042451 3042664 642 2293481 2293703 3042687 3042909 669 2293807 2294108 3043013 3043314 906 2294251 2294644 3043457 3043850 1182 2295290 2295646 3044496 3044852 1071 2295648 2296086 3044854 3045292 1317 2296175 2296494 3045381 3045700 960 2296613 2296935 3045819 3046141 969 2297470 2297887 3046676 3047093 1254 2298029 2298351 3047235 3047557 969 2299772 2300043 3048978 3049249 816 2300249 2300505 3049455 3049711 771 2300657 2300999 3049863 3050205 1029 2301001 2301222 3050207 3050428 666 2301224 2301640 3050430 3050846 1251 2303695 2303957 3052335 3052597 789 2303998 2304404 3052638 3053044 1221 2304406 2304957 3053046 3053597 1656 2305313 2305678 3053953 3054318 1098 2306306 2306553 3054946 3055193 744 2306555 2306758 3055195 3055398 612 2309351 2309766 3057991 3058406 1248 2310631 2310948 3059271 3059588 954 2311323 2311661 3059963 3060301 1017 2312305 2312510 3060945 3061150 618 2312535 2312783 3061175 3061423 747 2313355 2314407 3061995 3063047 3159 2315236 2315453 3063876 3064093 654 2315698 2315945 3064338 3064585 744 2316067 2316285 3064707 3064925 657 2316379 2316686 3065019 3065326 924 2316688 2316893 3065328 3065533 618 2317120 2317469 3065760 3066109 1050 2317561 2317971 3066201 3066611 1233 2325693 2326066 3067117 3067490 1122 2326080 2326352 3067504 3067776 819 2328984 2329211 3070408 3070635 684 2329599 2329901 3071023 3071325 909 2330034 2330252 3071458 3071676 657 2330740 2331008 3072164 3072432 807 2331328 2331814 3072752 3073238 1461 2332288 2332642 3073712 3074066 1065 2332644 2332860 3074068 3074284 651 2333387 2333610 3074811 3075034 672 2334785 2335009 3076208 3076432 675 2336208 2336413 3077631 3077836 618 2336415 2336647 3077838 3078070 699 2337189 2337503 3078612 3078926 945 2337505 2337720 3078928 3079143 648 2338608 2338846 3080044 3080282 717 2339047 2339302 3080483 3080738 768 2339383 2339919 3080819 3081355 1611 2341025 2341445 3082461 3082881 1263 2342842 2343281 3084278 3084717 1320 2344015 2344303 3085451 3085739 867 2348815 2349051 3093840 3094076 711 2350732 2351004 3095757 3096029 819 2351164 2351387 3096189 3096412 672 2351467 2351807 3096492 3096832 1023 2354350 2354957 3099375 3099982 1824 2354959 2355241 3099984 3100266 849 2356031 2356258 3100885 3101112 684 2357185 2357442 3102038 3102295 774 2357830 2358383 3102683 3103236 1662 2358663 2359031 3103516 3103884 1107 2359274 2359777 3104127 3104630 1512 2361150 2361633 3106003 3106486 1452 2361635 2361898 3106488 3106751 792 2365050 2365259 3109903 3110112 630 2365300 2365505 3110153 3110358 618 2365729 2366155 3110582 3111008 1281 2366694 2366896 3111547 3111749 609 2366898 2367151 3111751 3112004 762 2367195 2367565 3112048 3112418 1113 2367738 2367939 3112591 3112792 606 2367941 2368333 3112794 3113186 1179 2368581 2369006 3113434 3113859 1278 2369104 2369342 3113957 3114195 717 2369344 2369561 3114197 3114414 654 2371115 2371346 3115968 3116199 696 2371355 2371559 3116208 3116412 615 2371934 2372317 3116787 3117170 1152 2373433 2373657 3118286 3118510 675 2374791 2375086 3119644 3119939 888 2377211 2377470 3122064 3122323 780 2378844 2379095 3123697 3123948 756 2379699 2379931 3124552 3124784 699 2388716 2388930 3129159 3129373 645 2389160 2389806 3129603 3130249 1941 2391447 2391892 3131957 3132402 1338 2392296 2392513 3132806 3133023 654 2393010 2393211 3133520 3133721 606 2393779 2394028 3134289 3134538 750 2394207 2394843 3134717 3135353 1911 2395298 2395556 3135808 3136066 777 2397004 2397356 3137514 3137866 1059 2398063 2398308 3138573 3138818 738 2398727 2398941 3139237 3139451 645 2399860 2400179 3140370 3140689 960 2401998 2402382 3142508 3142892 1155 2402384 2402883 3142894 3143393 1500 2403015 2403224 3143525 3143734 630 2403226 2403562 3143736 3144072 1011 2404124 2404360 3144634 3144870 711 2404362 2404984 3144872 3145494 1869 2405033 2405255 3145543 3145765 669 2405413 2405833 3145923 3146343 1263 2405973 2406286 3146483 3146796 942 2407031 2407332 3147541 3147842 906 2407843 2408135 3148353 3148645 879 2408137 2408740 3148647 3149250 1812 2408742 2408978 3149252 3149488 711 2409223 2409580 3149733 3150090 1074 2409899 2410124 3150409 3150634 678 2410126 2410474 3150636 3150984 1047 2410877 2411974 3151387 3152484 3294 2411990 2412480 3152500 3152990 1473 2412572 2413115 3153082 3153625 1632 2413117 2413628 3153627 3154138 1536 2414188 2414453 3154698 3154963 798 2414542 2414910 3155052 3155420 1107 2415052 2415297 3155562 3155807 738 2415604 2415923 3156114 3156433 960 2416588 2416808 3157098 3157318 663 2417113 2417411 3157623 3157921 897 2417437 2417877 3157947 3158387 1323 2419183 2419387 3159693 3159897 615 2419395 2419663 3159905 3160173 807 2421331 2421674 3161841 3162184 1032 2422083 2422456 3162593 3162966 1122 2422485 2422840 3162995 3163350 1068 2423554 2424027 3164064 3164537 1422 2424119 2424381 3164629 3164891 789 2424749 2425018 3165259 3165528 810 2425053 2425264 3165563 3165774 636 2425958 2426231 3166468 3166741 822 2428031 2428341 3168541 3168851 933 2428580 2428822 3169090 3169332 729 2429754 2430006 3170447 3170699 759 2430853 2431216 3171546 3171909 1092 2431218 2432122 3171911 3172815 2715 2432480 2433061 3173173 3173754 1746 2433567 2433864 3174260 3174557 894 2434712 2434964 3175405 3175657 759 2435529 2435802 3176222 3176495 822 2435804 2436024 3176497 3176717 663 2436196 2436429 3176889 3177122 702 2437238 2437440 3177931 3178133 609 2438957 2439180 3179660 3179883 672 2439374 2439708 3180077 3180411 1005 2439945 2440207 3180648 3180910 789 2442085 2442302 3182788 3183005 654 2443422 2443627 3184125 3184330 618 2443784 2444015 3184487 3184718 696 2445317 2445553 3186020 3186256 711 2446350 2446688 3187053 3187391 1017 2454776 2454994 3195531 3195749 657 2455788 2456296 3196543 3197051 1527 2456619 2456870 3197374 3197625 756 2458874 2459512 3199628 3200266 1917 2460255 2460457 3201009 3201211 609 2462902 2463226 3203841 3204165 975 2477087 2477474 3219567 3219954 1164 2478097 2478468 3220577 3220948 1116 2478884 2479094 3221364 3221574 633 2479182 2479452 3221662 3221932 813 2479454 2479743 3221934 3222223 870 2481784 2482580 3224264 3225060 2391 2485223 2485434 3227703 3227914 636 2487009 2487311 3229485 3229787 909 2487475 2487680 3229951 3230156 618 2487748 2487953 3230224 3230429 618 2488126 2488487 3230602 3230963 1086 2489509 2489738 3231985 3232214 690 2489857 2490088 3232333 3232564 696 2490804 2491159 3233280 3233635 1068 2491680 2491920 3234156 3234396 723 2493507 2493824 3235984 3236301 954 2494105 2494657 3236582 3237134 1659 2494917 2495150 3237394 3237627 702 2496124 2496336 3238601 3238813 639 2496425 2496805 3238903 3239283 1143 2498319 2498583 3240797 3241061 795 2499116 2499492 3241594 3241970 1131 2499646 2499886 3242124 3242364 723 2499888 2500201 3242366 3242679 942 2500592 2500857 3243070 3243335 798 2501864 2502366 3244342 3244844 1509 2502374 2502599 3244852 3245077 678 2504599 2504812 3247077 3247290 642 2505039 2505253 3247517 3247731 645 2505829 2506207 3248307 3248685 1137 2507249 2507950 3249727 3250428 2106 2508288 2508706 3250766 3251184 1257 2508708 2509001 3251186 3251479 882 2510142 2510587 3252619 3253064 1338 2510589 2510803 3253066 3253280 645 2511109 2511410 3253586 3253887 906 2514424 2514627 3255552 3255755 612 2515055 2515911 3256183 3257039 2571 2516170 2516423 3257182 3257435 762 2516425 2516643 3257437 3257655 657 2516645 2517037 3257657 3258049 1179 2517487 2517986 3260246 3260745 1500 2518048 2518274 3260807 3261033 681 2518801 2519152 3261560 3261911 1056 2519154 2519378 3261913 3262137 675 2524775 2525038 3263384 3263647 792 2525040 2525347 3263649 3263956 924 2525376 2525726 3263985 3264335 1053 2525728 2526444 3264337 3265053 2151 2526978 2527238 3265587 3265847 783 2527385 2527720 3265994 3266329 1008 2528020 2528283 3266629 3266892 792 2529020 2529435 3267629 3268044 1248 2529701 2529924 3268310 3268533 672 2530338 2530630 3268947 3269239 879 2531010 2531263 3269619 3269872 762 2531438 2531958 3270047 3270567 1563 2531960 2532332 3270569 3270941 1119 2532682 2532887 3271291 3271496 618 2533185 2534040 3271794 3272649 2568 2537775 2538002 3275424 3275651 684 2538067 2538302 3275716 3275951 708 2538403 2538686 3276052 3276335 852 2541417 2541663 3279066 3279312 741 2542194 2542549 3279697 3280052 1068 2544569 2544826 3282072 3282329 774 2547613 2547847 3284934 3285168 705 2548378 2548736 3285699 3286057 1077 2548738 2549045 3286059 3286366 924 2549099 2549312 3286420 3286633 642 2549314 2549839 3286635 3287160 1578 2550023 2550307 3287344 3287628 855 2550593 2550918 3287914 3288239 978 2551130 2551347 3288451 3288668 654 2552936 2553294 3290257 3290615 1077 2554391 2554722 3291712 3292043 996 2555321 2555603 3292642 3292924 849 2556229 2556717 3293550 3294038 1467 2563647 2563847 3294178 3294378 603 2565243 2565475 3295774 3296006 699 2566632 2567154 3297046 3297568 1569 2567312 2567642 3297726 3298056 993 2568434 2568987 3298848 3299401 1662 2570309 2570600 3300723 3301014 876 2572119 2572431 3302461 3302773 939 2572872 2573104 3303214 3303446 699 2574757 2575061 3305099 3305403 915 2576480 2576803 3306822 3307145 972 2576805 2577076 3307147 3307418 816 2577426 2577719 3307768 3308061 882 2579667 2579994 3310009 3310336 984 2580018 2580239 3310360 3310581 666 2580681 2580891 3311023 3311233 633 2580942 2581167 3311284 3311509 678 2581680 2581891 3312022 3312233 636 2583483 2583691 3313825 3314033 627 2583693 2583939 3314035 3314281 741 2584527 2584813 3314869 3315155 861 2585107 2585443 3315449 3315785 1011 2585481 2585996 3315823 3316338 1548 2586571 2586905 3316913 3317247 1005 2587132 2587340 3317474 3317682 627 2587774 2588036 3318116 3318378 789 2588299 2588642 3318641 3318984 1032 2588644 2588846 3318986 3319188 609 2590181 2590749 3320523 3321091 1707 2593465 2593720 3323778 3324033 768 2593778 2594108 3324091 3324421 993 2595210 2595788 3325523 3326101 1737 2595986 2596263 3326299 3326576 834 2596265 2596849 3326578 3327162 1755 2596868 2597151 3327181 3327464 852 2597190 2597545 3327503 3327858 1068 2597749 2598076 3328062 3328389 984 2598078 2598313 3328391 3328626 708 2598363 2598798 3328676 3329111 1308 2601610 2601942 3331923 3332255 999 2602617 2602960 3332930 3333273 1032 2603355 2603608 3333668 3333921 762 2603730 2603986 3334043 3334299 771 2604422 2604657 3334735 3334970 708 2606436 2606870 3336749 3337183 1305 2607877 2608085 3338238 3338446 627 2608337 2608569 3338698 3338930 699 2610006 2610257 3340367 3340618 756 2611902 2612633 3342265 3342996 2196 2613728 2614090 3344091 3344453 1089 2614188 2614399 3344551 3344762 636 2614580 2614841 3344943 3345204 786 2615310 2615748 3345673 3346111 1317 2615750 2616027 3346113 3346390 834 2616029 2616801 3346392 3347164 2319 2617029 2617312 3347392 3347675 852 2617371 2617651 3347734 3348014 843 2617653 2618471 3348016 3348834 2457 2618650 2618927 3349013 3349290 834 2619068 2619400 3349431 3349763 999 2620295 2620536 3350658 3350899 726 2620903 2621574 3351265 3351936 2016 2621648 2622141 3352010 3352503 1482 2622602 2622972 3352964 3353334 1113 2622974 2623330 3353336 3353692 1071 2623959 2624281 3354321 3354643 969 2624863 2625146 3355225 3355508 852 2625345 2625778 3355707 3356140 1302 2625998 2626278 3356360 3356640 843 2626491 2626699 3356853 3357061 627 2626701 2627079 3357063 3357441 1137 2627281 2627535 3357643 3357897 765 2627901 2628187 3358263 3358549 861 2628222 2628544 3358584 3358906 969 2629209 2629572 3359571 3359934 1092 2629758 2629996 3360120 3360358 717 2630442 2630759 3360804 3361121 954 2630825 2631072 3361187 3361434 744 2631491 2631693 3361853 3362055 609 2631695 2632029 3362057 3362391 1005 2633280 2633494 3363642 3363856 645 2634147 2634646 3364508 3365007 1500 2634684 2634898 3365045 3365259 645 2634900 2635635 3365261 3365996 2208 2635637 2635916 3365998 3366277 840 2636072 2636311 3366433 3366672 720 2636313 2637156 3366674 3367517 2532 2637264 2637676 3367625 3368037 1239 2638152 2638776 3368513 3369137 1875 2639345 2639640 3369706 3370001 888 2639705 2640279 3370066 3370640 1725 2640598 2641264 3370959 3371625 2001 2642265 2642484 3372626 3372845 660 2644797 2645068 3379989 3380260 816 2646232 2646718 3381424 3381910 1461 2646720 2647199 3381912 3382391 1440 2647402 2647747 3382594 3382939 1038 2649258 2649769 3384450 3384961 1536 2650153 2650613 3385345 3385805 1383 2650615 2650905 3385807 3386097 873 2653587 2653891 3388463 3388767 915 2654352 2654790 3389228 3389666 1317 2654921 2655223 3389797 3390099 909 2655225 2655706 3390101 3390582 1446 2655708 2656017 3390584 3390893 930 2656019 2656290 3390895 3391166 816 2656292 2656816 3391168 3391692 1575 2657068 2657321 3391944 3392197 762 2658334 2658578 3393210 3393454 735 2659321 2659587 3394197 3394463 801 2660011 2660327 3394887 3395203 951 2661878 2662101 3396600 3396823 672 2662610 2662809 3397332 3397531 600 2662985 2663205 3397707 3397927 663 2663404 2664328 3398126 3399050 2775 2666419 2667002 3401142 3401725 1752 2667999 2668309 3402722 3403032 933 2669071 2669365 3403794 3404088 885 2672157 2672527 3406880 3407250 1113 2673299 2673585 3408022 3408308 861 2674570 2674779 3409293 3409502 630 2676306 2676744 3411029 3411467 1317 2680540 2680898 3415263 3415621 1077 2683102 2683328 3417690 3417916 681 2683330 2684113 3417918 3418701 2352 2684451 2684963 3419039 3419551 1539 2685044 2685290 3419632 3419878 741 2685816 2686077 3420404 3420665 786 2686500 2686729 3421088 3421317 690 2687173 2687453 3421761 3422041 843 2687674 2688115 3422262 3422703 1326 2688993 2689305 3423581 3423893 939 2691024 2691228 3425630 3425834 615 2691698 2691975 3426304 3426581 834 2692586 2692875 3427192 3427481 870 2693026 2693277 3427632 3427883 756 2693279 2693603 3427885 3428209 975 2693778 2693983 3428383 3428588 618 2694111 2694508 3428716 3429113 1194 2694510 2694993 3429115 3429598 1452 2695122 2695678 3429727 3430283 1671 2696478 2697016 3431083 3431621 1617 2697024 2697292 3431629 3431897 807 2699800 2700161 3434407 3434768 1086 2700600 2700917 3435207 3435524 954 2700919 2701186 3435526 3435793 804 2702463 2702896 3437071 3437504 1302 2703201 2703535 3437809 3438143 1005 2704116 2704639 3438724 3439247 1572 2704821 2705454 3439429 3440062 1902 2705750 2706257 3440358 3440865 1524 2706433 2706921 3441041 3441529 1467 2707175 2708347 3441771 3442943 3519 2708499 2708746 3443095 3443342 744 2709414 2709740 3444010 3444336 981 2709742 2710033 3444338 3444629 876 2710686 2711190 3445282 3445786 1515 2714377 2714608 3448797 3449028 696 2715041 2715350 3449461 3449770 930 2716207 2716714 3450627 3451134 1524 2716916 2717459 3451336 3451879 1632 2717578 2717837 3451998 3452257 780 2717875 2718432 3452295 3452852 1674 2719838 2720043 3454258 3454463 618 2720685 2720963 3455105 3455383 837 2721943 2722325 3456363 3456745 1149 2722364 2722648 3456784 3457068 855 2722719 2722976 3457139 3457396 774 2722978 2723197 3457398 3457617 660 2723512 2723820 3457932 3458240 927 2724288 2724992 3458707 3459411 2115 2725002 2725338 3459421 3459757 1011 2725518 2725859 3459938 3460279 1026 2726034 2726557 3460454 3460977 1572 2727756 2728138 3462102 3462484 1149 2728176 2728411 3462523 3462758 708 2729938 2730256 3464290 3464608 957 2730258 2730709 3464610 3465061 1356 2730715 2730941 3465067 3465293 681 2730943 2731223 3465295 3465575 843 2731369 2732126 3465721 3466478 2274 2732128 2732474 3466480 3466826 1041 2733900 2734427 3468252 3468779 1584 2734630 2734983 3468982 3469335 1062 2735104 2735627 3469456 3469979 1572 2735929 2736218 3470281 3470570 870 2736892 2737170 3471244 3471522 837 2737943 2738473 3472295 3472825 1593 2738616 2738989 3472968 3473341 1122 2739487 2739726 3473839 3474078 720 2740107 2740530 3474459 3474882 1272 2740532 2740751 3474884 3475103 660 2741872 2742117 3476224 3476469 738 2742144 2743097 3476497 3477450 2862 2743240 2743532 3477593 3477885 879 2743627 2744287 3477980 3478640 1983 2744484 2744755 3478725 3478996 816 2744814 2745301 3479055 3479542 1464 2745687 2746250 3479928 3480491 1692 2746252 2746651 3480493 3480892 1200 2746790 2747112 3481032 3481354 969 2748316 2748598 3482557 3482839 849 2748600 2748900 3482841 3483141 903 2749601 2749903 3483842 3484144 909 2750439 2750646 3484680 3484887 624 2751144 2751386 3485385 3485627 729 2751471 2751884 3485712 3486125 1242 2752393 2752793 3486634 3487034 1203 2753604 2753931 3487845 3488172 984 2778708 2778970 3512565 3512827 789 2779235 2779927 3513092 3513784 2079 2780718 2781019 3514575 3514876 906 2781027 2781266 3514885 3515124 720 2788875 2789257 3522735 3523117 1149 2792327 2792526 3526187 3526386 600 2793676 2794100 3527536 3527960 1275 2794102 2794557 3527962 3528417 1368 2794848 2795073 3528708 3528933 678 2796262 2796549 3530122 3530409 864 2797007 2797371 3530866 3531230 1095 2797373 2798389 3531232 3532248 3051 2798633 2799226 3534456 3535049 1782 2800013 2800498 3535836 3536321 1458 2800607 2800878 3536430 3536701 816 2801135 2801361 3536958 3537184 681 2801453 2801751 3537276 3537574 897 2801948 2802460 3537771 3538283 1539 2802880 2803088 3538705 3538913 627 2804112 2804406 3539937 3540231 885 2804534 2804916 3540359 3540741 1149 2805471 2805684 3541295 3541508 642 2807358 2807725 3543189 3543556 1104 2808012 2808214 3543843 3544045 609 2808405 2808652 3544236 3544483 744 2808654 2808877 3544485 3544708 672 2808895 2809235 3544726 3545066 1023 2809368 2809798 3545199 3545629 1293 2810464 2810697 3546295 3546528 702 2812447 2812857 3548278 3548688 1233 2813196 2813583 3549026 3549413 1164 2814300 2814622 3550130 3550452 969 2816865 2817266 3552466 3552867 1206 2817268 2817469 3552869 3553070 606 2818753 2819245 3554355 3554847 1479 2819449 2820142 3555051 3555744 2082 2820273 2820646 3555874 3556247 1122 2820875 2821089 3556475 3556689 645 2821091 2821319 3556691 3556919 687 2821715 2821967 3557315 3557567 759 2825702 2825914 3561302 3561514 639 2826840 2827088 3562441 3562689 747 2828502 2828984 3564104 3564586 1449 2830753 2831006 3566355 3566608 762 2831645 2831876 3567043 3567274 696 2833063 2833293 3568461 3568691 693 2833295 2833536 3568693 3568934 726 2837117 2837333 3572515 3572731 651 2838683 2838943 3574081 3574341 783 2841331 2841629 3576694 3576992 897 2846859 2847158 3582222 3582521 900 2847181 2847469 3582544 3582832 867 2847831 2848268 3583194 3583631 1314 2848270 2848523 3583633 3583886 762 2848606 2848961 3583969 3584324 1068 2848963 2849325 3584326 3584688 1089 2850926 2851128 3586289 3586491 609 2851139 2851514 3586502 3586877 1128 2852110 2852391 3587473 3587754 846 2853320 2853621 3588683 3588984 906 2853872 2854098 3589235 3589461 681 2854529 2854828 3589892 3590191 900 2854893 2855169 3590256 3590532 831 2855604 2856123 3590967 3591486 1560 2858192 2858404 3593555 3593767 639 2864535 2864754 3596737 3596956 660 2864756 2865030 3596958 3597232 825 2865209 2865476 3597411 3597678 804 2865518 2865734 3597720 3597936 651 2865880 2866286 3598082 3598488 1221 2866387 2866634 3598589 3598836 744 2866834 2867202 3599036 3599404 1107 2867396 2867672 3599598 3599874 831 2867821 2868369 3600023 3600571 1647 2869103 2869391 3601305 3601593 867 2869393 2869625 3601595 3601827 699 2870387 2871022 3602589 3603224 1908 2871160 2871582 3603362 3603784 1269 2871584 2872019 3603786 3604221 1308 2872881 2873099 3605083 3605301 657 2874143 2874673 3606345 3606875 1593 2885970 2886255 3617768 3618053 858 2886425 2886780 3618222 3618577 1068 2888055 2888285 3619852 3620082 693 2889793 2890003 3621590 3621800 633 2890189 2890423 3621986 3622220 705 2891093 2891302 3622890 3623099 630 2897135 2897349 3628932 3629146 645 2898460 2898785 3630257 3630582 978 2901458 2901741 3633255 3633538 852 2905237 2905527 3639316 3639606 873 2905547 2906034 3639626 3640113 1464 2906036 2906652 3640115 3640731 1851 2907449 2907730 3641528 3641809 846 2907732 2908070 3641811 3642149 1017 2908102 2908400 3642181 3642479 897 2909036 2909377 3643115 3643456 1026 2909379 2909656 3643458 3643735 834 2909940 2910304 3644019 3644383 1095 2910480 2910805 3644559 3644884 978 2911431 2912027 3645510 3646106 1791 2912225 2912484 3646304 3646563 780 2912855 2913562 3646934 3647641 2124 2914017 2914240 3648096 3648319 672 2914296 2914654 3648375 3648733 1077 2914689 2914992 3648768 3649071 912 2914998 2915242 3649077 3649321 735 2915451 2915695 3649530 3649774 735 2916062 2916284 3650142 3650364 669 2917494 2917747 3651574 3651827 762 2918793 2919026 3652873 3653106 702 2919553 2919764 3653633 3653844 636 2920078 2920674 3654158 3654754 1791 2921222 2921733 3655302 3655813 1536 2921946 2922205 3656026 3656285 780 2922916 2923166 3656996 3657246 753 2923198 2923523 3657278 3657603 978 2923525 2923743 3657605 3657823 657 2924110 2924627 3658190 3658707 1554 2924815 2925035 3658895 3659115 663 2925490 2925698 3659570 3659778 627 2925838 2926075 3659918 3660155 714 2926077 2926503 3660157 3660583 1281 2926820 2927055 3660900 3661135 708 2927387 2927763 3661467 3661843 1131 2928017 2928240 3662097 3662320 672 2928674 2928974 3662754 3663054 903 2929226 2929836 3663306 3663916 1833 2929908 2930197 3663988 3664277 870 2930268 2930563 3664348 3664643 888 2930667 2931073 3664747 3665153 1221 2931075 2931390 3665155 3665470 948 2931492 2931842 3665572 3665922 1053 2932194 2932425 3666274 3666505 696 2932745 2933043 3666825 3667123 897 2933611 2933834 3667691 3667914 672 2934358 2934848 3668438 3668928 1473 2934850 2935109 3668930 3669189 780 2935111 2935418 3669191 3669498 924 2935564 2935784 3669644 3669864 663 2935786 2936405 3669866 3670485 1860 2936506 2936742 3670586 3670822 711 2936859 2937093 3670939 3671173 705 2937131 2937948 3671211 3672028 2454 2938372 2938889 3672452 3672969 1554 2940044 2940486 3674124 3674566 1329 2940637 2940971 3674717 3675051 1005 2941477 2941770 3675557 3675850 882 2943757 2944212 3677837 3678292 1368 2944844 2945248 3678924 3679328 1215 2945342 2945747 3679422 3679827 1218 2946496 2946827 3680576 3680907 996 2947288 2947624 3681368 3681704 1011 2947872 2948179 3681952 3682259 924 2948825 2949045 3682905 3683125 663 2949530 2949747 3683610 3683827 654 2949788 2950008 3683868 3684088 663 2952130 2952446 3686210 3686526 951 2952793 2953194 3686873 3687274 1206 2953196 2953415 3687276 3687495 660 2954286 2954592 3688366 3688672 921 2954594 2954832 3688674 3688912 717 2955038 2955270 3689118 3689350 699 2956154 2956380 3690234 3690460 681 2956706 2956927 3690786 3691007 666 2958659 2958934 3692739 3693014 828 2960256 2960476 3694336 3694556 663 2962083 2962376 3696163 3696456 882 2963061 2963356 3697141 3697436 888 2963712 2964359 3697792 3698439 1944 2964361 2964757 3698441 3698837 1191 2965038 2965297 3699118 3699377 780 2965650 2965915 3699730 3699995 798 2966001 2966248 3700081 3700328 744 2966250 2967090 3700330 3701170 2523 2967289 2967597 3701369 3701677 927 2967998 2968278 3702078 3702358 843 2969272 2969497 3703352 3703577 678 2969542 2969976 3703622 3704056 1305 2970125 2970476 3704205 3704556 1056 2970478 2970737 3704558 3704817 780 2971120 2971391 3705200 3705471 816 2971483 2971894 3705563 3705974 1236 2972012 2972379 3706092 3706459 1104 2972936 2973168 3707016 3707248 699 2973973 2974332 3708053 3708412 1080 2974589 2974891 3708671 3708973 909 2975121 2975848 3709203 3709930 2184 2976234 2976541 3710316 3710623 924 2976543 2976934 3710625 3711016 1176 2977547 2977758 3711629 3711840 636 2978148 2978415 3712230 3712497 804 2979002 2979237 3713084 3713319 708 2979638 2979990 3713720 3714072 1059 2982386 2982683 3716468 3716765 894 2983764 2984022 3717846 3718104 777 2984063 2984382 3718145 3718464 960 2984384 2984655 3718466 3718737 816 2985678 2985903 3719760 3719985 678 2987686 2987900 3721769 3721983 645 2987937 2988226 3722020 3722309 870 2990962 2991253 3725284 3725575 876 2993831 2994088 3728158 3728415 774 2994090 2994381 3728417 3728708 876 2995755 2996045 3745699 3745989 873 2996478 2996916 3746417 3746855 1317 2997298 2997564 3747316 3747582 801 2997725 2997942 3747743 3747960 654 2998837 2999055 3748856 3749074 657 2999656 2999870 3749675 3749889 645 3000361 3000871 3750380 3750890 1533 3001232 3001571 3751251 3751590 1020 3001673 3002026 3751692 3752045 1062 3002567 3002766 3752586 3752785 600 3002885 3003129 3752904 3753148 735 3003323 3003617 3753342 3753636 885 3004168 3004374 3754187 3754393 621 3005398 3005702 3755418 3755722 915 3006022 3006285 3756042 3756305 792 3006287 3006638 3756307 3756658 1056 3006640 3006902 3756660 3756922 789 3007576 3007988 3757596 3758008 1239 3007993 3008448 3758013 3758468 1368 3008562 3008883 3758582 3758903 966 3009212 3009539 3759232 3759559 984 3010057 3010391 3760077 3760411 1005 3010599 3011015 3760439 3760855 1251 3011226 3011824 3761066 3761664 1797 3012194 3012408 3762034 3762248 645 3013048 3013257 3762888 3763097 630 3014044 3014312 3763886 3764154 807 3014671 3015264 3764513 3765106 1782 3015391 3015869 3765233 3765711 1437 3016410 3016679 3766252 3766521 810 3017502 3017704 3767344 3767546 609 3018001 3018310 3767843 3768152 930 3018534 3018810 3768375 3768651 831 3018921 3019481 3768762 3769322 1683 3019483 3019841 3769324 3769682 1077 3020209 3020411 3770050 3770252 609 3020619 3021029 3770460 3770870 1233 3021634 3021899 3771475 3771740 798 3022247 3022510 3772088 3772351 792 3023592 3023848 3773433 3773689 771 3024824 3025117 3774665 3774958 882 3025119 3025385 3774960 3775226 801 3025387 3025675 3775228 3775516 867 3025911 3026158 3775753 3776000 744 3026205 3026545 3776047 3776387 1023 3026973 3027273 3776815 3777115 903 3027539 3028017 3777381 3777859 1437 3028526 3028804 3778368 3778646 837 3029244 3029744 3779086 3779586 1503 3029796 3030092 3779638 3779934 891 3030604 3030868 3780446 3780710 795 3030870 3031319 3780712 3781161 1350 3031899 3032116 3781740 3781957 654 3032352 3032773 3782193 3782614 1266 3033845 3034463 3783686 3784304 1857 3036792 3037003 3786633 3786844 636 3037599 3038049 3787440 3787890 1353 3040459 3040735 3790181 3790457 831 3040791 3041035 3790513 3790757 735 3041133 3041336 3790855 3791058 612 3041443 3041752 3791165 3791474 930 3042030 3042354 3791752 3792076 975 3045415 3045646 3794236 3794467 696 3047381 3047692 3796201 3796512 936 3048253 3048570 3797073 3797390 954 3048572 3048869 3797392 3797689 894 3051344 3051552 3800165 3800373 627 3052159 3052440 3800980 3801261 846 3052674 3053112 3801495 3801933 1317 3053387 3053839 3802208 3802660 1359 3053841 3054360 3802662 3803181 1560 3054575 3054820 3803396 3803641 738 3055879 3056177 3805093 3805391 897 3056206 3056447 3805420 3805661 726 3056621 3056852 3805834 3806065 696 3056911 3057456 3806124 3806669 1638 3057700 3058064 3806868 3807232 1095 3058180 3058454 3807348 3807622 825 3058950 3059224 3808118 3808392 825 3059475 3060477 3808643 3809645 3009 3061062 3062175 3810230 3811343 3342 3062510 3062721 3811678 3811889 636 3063007 3063221 3812175 3812389 645 3063280 3063649 3812448 3812817 1110 3063651 3063920 3812819 3813088 810 3065471 3065673 3814639 3814841 609 3066919 3067412 3816087 3816580 1482 3067576 3067967 3816744 3817135 1176 3068515 3068893 3817683 3818061 1137 3068895 3069116 3818063 3818284 666 3069118 3069421 3818286 3818589 912 3069423 3069813 3818591 3818981 1173 3070272 3071272 3819440 3820440 3003 3071562 3071879 3820730 3821047 954 3073825 3074209 3826128 3826512 1155 3074211 3074467 3826514 3826770 771 3074675 3075016 3826978 3827319 1026 3075018 3075219 3827321 3827522 606 3075627 3075887 3827931 3828191 783 3076093 3076307 3828397 3828611 645 3076675 3077333 3828979 3829637 1977 3079514 3079872 3831818 3832176 1077 3079982 3080259 3832286 3832563 834 3080471 3080960 3832775 3833264 1470 3082615 3082837 3835794 3836016 669 3083760 3084104 3836939 3837283 1035 3084106 3084555 3837285 3837734 1350 3084557 3084791 3837736 3837970 705 3084793 3084995 3837972 3838174 609 3084997 3085235 3838176 3838414 717 3085432 3085649 3838611 3838828 654 3086328 3086642 3839520 3839834 945 3086755 3087035 3839947 3840227 843 3088324 3088546 3841516 3841738 669 3089701 3089960 3842893 3843152 780 3090100 3090440 3843292 3843632 1023 3090550 3090840 3843742 3844032 873 3090842 3091181 3844034 3844373 1020 3091438 3091646 3844630 3844838 627 3092188 3092387 3845391 3845590 600 3093004 3093438 3846207 3846641 1305 3093603 3094013 3846806 3847216 1233 3096735 3096971 3850026 3850262 711 3098602 3099146 3851893 3852437 1635 3099400 3099657 3852691 3852948 774 3099873 3100304 3853165 3853596 1296 3100306 3100536 3853598 3853828 693 3100613 3100873 3853905 3854165 783 3100875 3101262 3854167 3854554 1164 3102828 3103096 3856120 3856388 807 3104010 3104371 3857302 3857663 1086 3104373 3104650 3857665 3857942 834 3105070 3105450 3858362 3858742 1143 3105587 3105795 3858879 3859087 627 3105926 3106348 3859218 3859640 1269 3106790 3107027 3860082 3860319 714 3107815 3108101 3861108 3861394 861 3136370 3136856 3888426 3888912 1461 3138726 3138940 3890782 3890996 645 3139130 3139374 3891186 3891430 735 3139601 3139866 3891657 3891922 798 3139964 3140181 3892020 3892237 654 3140690 3141215 3892746 3893271 1578 3141217 3141434 3893273 3893490 654 3141757 3141962 3893813 3894018 618 3141964 3142233 3894020 3894289 810 3142235 3142542 3894291 3894598 924 3142973 3143239 3895029 3895295 801 3143404 3143749 3895460 3895805 1038 3143751 3144101 3895807 3896157 1053 3144103 3144774 3896159 3896830 2016 3144779 3145142 3896835 3897198 1092 3146202 3146422 3898261 3898481 663 3147235 3147541 3899294 3899600 921 3148313 3148647 3900372 3900706 1005 3149634 3149851 3901693 3901910 654 3149949 3150197 3902008 3902256 747 3150769 3151070 3902828 3903129 906 3151429 3151741 3903488 3903800 939 3151748 3152031 3903807 3904090 852 3152247 3152475 3904307 3904535 687 3153099 3153477 3905159 3905537 1137 3154115 3154323 3906175 3906383 627 3154885 3155420 3906945 3907480 1608 3155961 3156207 3908018 3908264 741 3158209 3158522 3910262 3910575 942 3158683 3158888 3910736 3910941 618 3158947 3159233 3911000 3911286 861 3159946 3160291 3911999 3912344 1038 3160293 3160567 3912346 3912620 825 3161369 3161848 3913422 3913901 1440 3162085 3162284 3914138 3914337 600 3162322 3162671 3914375 3914724 1050 3162673 3162950 3914726 3915003 834 3163102 3163582 3915155 3915635 1443 3163717 3164081 3915770 3916134 1095 3164320 3164886 3916373 3916939 1701 3164994 3165304 3917047 3917357 933 3166942 3167162 3918073 3918293 663 3167281 3167625 3918412 3918756 1035 3167811 3168095 3918942 3919226 855 3168108 3168349 3919239 3919480 726 3169150 3169519 3920281 3920650 1110 3170441 3170648 3920985 3921192 624 3170926 3171296 3921470 3921840 1113 3171648 3171884 3929445 3929681 711 3173031 3173423 3930828 3931220 1179 3173425 3173841 3931222 3931638 1251 3173843 3174134 3931640 3931931 876 3174940 3175571 3932737 3933368 1896 3175780 3176399 3933577 3934196 1860 3177742 3178153 3935539 3935950 1236 3178395 3178722 3936192 3936519 984 3178763 3178995 3936560 3936792 699 3179171 3179596 3936968 3937393 1278 3180085 3180290 3937882 3938087 618 3180465 3180677 3938262 3938474 639 3182294 3182982 3940091 3940779 2067 3189914 3190126 3941146 3941358 639 3191023 3191357 3942255 3942589 1005 3193642 3194308 3945248 3945914 2001 3194640 3194932 3946246 3946538 879 3195231 3195601 3946837 3947207 1113 3196380 3196710 3947986 3948316 993 3197240 3197516 3948846 3949122 831 3197518 3197720 3949124 3949326 609 3197829 3198119 3949435 3949725 873 3198565 3198932 3950171 3950538 1104 3198983 3199325 3950589 3950931 1029 3199381 3199604 3950987 3951210 672 3200311 3200765 3951917 3952371 1365 3200929 3201288 3952535 3952894 1080 3201523 3201790 3953129 3953396 804 3202490 3202878 3954098 3954486 1167 3203844 3204146 3955452 3955754 909 3204148 3204413 3955756 3956021 798 3206894 3207129 3958503 3958738 708 3207164 3207364 3958773 3958973 603 3208065 3208985 3959674 3960594 2763 3209410 3209690 3961019 3961299 843 3209935 3210217 3961544 3961826 849 3210362 3211357 3961971 3962966 2988 3211860 3212062 3963469 3963671 609 3212073 3212317 3963682 3963926 735 3212969 3213384 3964578 3964993 1248 3213386 3213675 3964995 3965284 870 3216091 3216301 3967700 3967910 633 3216321 3216588 3967930 3968197 804 3216590 3216827 3968199 3968436 714 3218904 3219257 3970513 3970866 1062 3219430 3219860 3971039 3971469 1293 3220178 3220382 3971787 3971991 615 3220699 3221095 3972308 3972704 1191 3221098 3221375 3972707 3972984 834 3221665 3221879 3973274 3973488 645 3223413 3223624 3975022 3975233 636 3223767 3224178 3975376 3975787 1236 3224945 3225207 3976554 3976816 789 3225341 3225550 3976950 3977159 630 3231339 3231637 3982948 3983246 897 3231818 3232017 3983427 3983626 600 3232665 3232876 3984274 3984485 636 3233117 3233332 3984726 3984941 648 3233357 3233892 3984966 3985501 1608 3236878 3237119 3988487 3988728 726 3237429 3237848 3989040 3989459 1260 3239079 3239395 3990690 3991006 951 3239947 3240491 3991558 3992102 1635 3240904 3241176 3992515 3992787 819 3241718 3242053 3993329 3993664 1008 3242055 3242325 3993666 3993936 813 3242588 3243275 3994200 3994887 2064 3243502 3243917 3995114 3995529 1248 3244186 3244391 3995798 3996003 618 3245094 3246040 3996706 3997652 2841 3246042 3246313 3997654 3997925 816 3246641 3247195 3998253 3998807 1665 3247819 3248046 3999431 3999658 684 3248348 3248660 3999960 4000272 939 3248662 3248946 4000274 4000558 855 3249840 3250148 4001450 4001758 927 3250565 3251112 4002174 4002721 1644 3251458 3251673 4003067 4003282 648 3251774 3252130 4003383 4003739 1071 3253092 3253375 4004701 4004984 852 3253503 3253740 4005112 4005349 714 3253993 3254348 4005601 4005956 1068 3255615 3255842 4007221 4007448 684 3256405 3256625 4008011 4008231 663 3256891 3257382 4008498 4008989 1476 3259241 3259464 4010849 4011072 672 3260420 3260640 4012028 4012248 663 3260751 3261063 4012359 4012671 939 3261585 3261826 4013193 4013434 726 3261954 3262468 4013562 4014076 1545 3262470 3263170 4014078 4014778 2103 3263460 3263949 4015068 4015557 1470 3263951 3264240 4015559 4015848 870 3264266 3264489 4015874 4016097 672 3264527 3264807 4016135 4016415 843 3264849 3265062 4016457 4016670 642 3265251 3265513 4016859 4017121 789 3266461 3266670 4018069 4018278 630 3267784 3268504 4018998 4019718 2163 3268674 3269035 4019888 4020249 1086 3269292 3269587 4020506 4020801 888 3269589 3269983 4020803 4021197 1185 3269985 3270250 4021199 4021464 798 3270252 3270708 4021466 4021922 1371 3271034 3271275 4022248 4022489 726 3271469 3271701 4022683 4022915 699 3272144 3272367 4023358 4023581 672 3272372 3272594 4023586 4023808 669 3273375 3273701 4024589 4024915 981 3274479 3274820 4025693 4026034 1026 3274865 3275107 4026079 4026321 729 3275713 3275975 4026927 4027189 789 3276647 3276864 4027861 4028078 654 3276866 3277286 4028080 4028500 1263 3277530 3277854 4028744 4029068 975 3277956 3278194 4029170 4029408 717 3279503 3279704 4033022 4033223 606 3280091 3280307 4033610 4033826 651 3280515 3280799 4034034 4034318 855 3281503 3281717 4035022 4035236 645 3282107 3282345 4035626 4035864 717 3282376 3282608 4035895 4036127 699 3282964 3283206 4036483 4036725 729 3283283 3283638 4036802 4037157 1068 3284201 3284402 4037720 4037921 606 3286661 3286910 4040180 4040429 750 3287555 3287899 4041074 4041418 1035 3288084 3288288 4041603 4041807 615 3288551 3288909 4042070 4042428 1077 3289062 3289305 4042581 4042824 732 3289655 3289855 4044132 4044332 603 3289877 3290113 4044354 4044590 711 3290115 3290582 4044592 4045059 1404 3290755 3291112 4045232 4045589 1074 3291114 3291324 4045591 4045801 633 3291448 3291914 4045925 4046391 1401 3294415 3294681 4048892 4049158 801 3295677 3295895 4050154 4050372 657 3296398 3296801 4050875 4051278 1212 3297543 3297742 4052020 4052219 600 3298340 3298676 4052817 4053153 1011 3298774 3299360 4053251 4053837 1761 3299731 3299948 4054208 4054425 654 3300663 3300927 4055140 4055404 795 3300929 3301158 4055406 4055635 690 3302463 3302684 4056939 4057160 666 3302991 3303501 4057467 4057977 1533 3305400 3306657 4059876 4061133 3774 3306659 3306903 4061135 4061379 735 3307568 3307857 4062044 4062333 870 3308687 3309085 4063163 4063561 1197 3309087 3309496 4063563 4063972 1230 3311453 3311752 4065930 4066229 900 3311877 3312139 4066354 4066616 789 3312567 3312796 4067044 4067273 690 3313095 3314016 4067572 4068493 2766 3314043 3314317 4068520 4068794 825 3314619 3314848 4069096 4069325 690 3314994 3315210 4069471 4069687 651 3315237 3315882 4069714 4070359 1938 3316069 3316332 4070546 4070809 792 3316334 3316671 4070811 4071148 1014 3317022 3317247 4071499 4071724 678 3317926 3318211 4072403 4072688 858 3319575 3319803 4074052 4074280 687 3320704 3320981 4075181 4075458 834 3321517 3321738 4075994 4076215 666 3321794 3322098 4076271 4076575 915 3322373 3322738 4076850 4077215 1098 3322740 3323120 4077217 4077597 1143 3323296 3323579 4077773 4078056 852 3323791 3324010 4078268 4078487 660 3324289 3325821 4078766 4080298 4599 3326435 3326781 4080912 4081258 1041 3327152 3327606 4081629 4082083 1365 3328286 3328491 4082617 4082822 618 3328573 3328944 4082904 4083275 1116 3329138 3329874 4083469 4084205 2211 3330017 3330222 4084348 4084553 618 3330305 3331594 4084636 4085925 3870 3332630 3332940 4086962 4087272 933 3332942 3333168 4087274 4087500 681 3333452 3333675 4087784 4088007 672 3334040 3334683 4088372 4089015 1932 3335272 3335486 4089604 4089818 645 3335488 3335690 4089820 4090022 609 3336004 3336375 4090336 4090707 1116 3336407 3336708 4090739 4091040 906 3336954 3337849 4091286 4092181 2688 3337851 3338073 4092183 4092405 669 3338209 3338606 4092541 4092938 1194 3338608 3339078 4092940 4093410 1413 3339276 3339588 4093608 4093920 939 3339755 3339998 4094087 4094330 732 3340842 3341126 4095174 4095458 855 3341254 3341495 4095586 4095827 726 3341503 3341792 4095835 4096124 870 3342146 3342691 4096478 4097023 1638 3343431 3343684 4097763 4098016 762 3343782 3344130 4098114 4098462 1047 3344132 3344351 4098464 4098683 660 3344464 3344685 4098796 4099017 666 3344687 3344999 4099019 4099331 939 3345364 3345610 4099696 4099942 741 3345711 3345964 4100043 4100296 762 3347531 3347774 4101863 4102106 732 3348585 3348874 4102918 4103207 870 3349350 3349750 4103689 4104089 1203 3350193 3350608 4104532 4104947 1248 3350610 3350865 4104949 4105204 768 3350867 3351138 4105206 4105477 816 3352255 3352513 4106593 4106851 777 3353622 3354112 4107960 4108450 1473 3356796 3357073 4111134 4111411 834 3366139 3366442 4113372 4113675 912 3367797 3368028 4115030 4115261 696 3370165 3370385 4117398 4117618 663 3370660 3371060 4117893 4118293 1203 3371161 3371361 4118394 4118594 603 3371849 3372422 4119082 4119655 1722 3373076 3373278 4120306 4120508 609 3373962 3374538 4121184 4121760 1731 3374755 3375128 4121977 4122350 1122 3375420 3375673 4122642 4122895 762 3375711 3376496 4122933 4123718 2358 3376514 3376845 4123736 4124067 996 3377243 3377442 4124465 4124664 600 3377618 3378057 4124840 4125279 1320 3378059 3378453 4125281 4125675 1185 3379305 3379767 4126527 4126989 1389 3379769 3379970 4126991 4127192 606 3379972 3380294 4127194 4127516 969 3381775 3382057 4128998 4129280 849 3382203 3382584 4129426 4129807 1146 3382900 3383770 4130123 4130993 2613 3384948 3385674 4132172 4132898 2181 3386228 3386538 4133452 4133762 933 3386569 3386877 4133790 4134098 927 3386989 3387192 4134210 4134413 612 3387265 3387626 4134486 4134847 1086 3387934 3388145 4135155 4135366 636 3388256 3388744 4135477 4135965 1467 3389365 3389594 4136586 4136815 690 3390014 3390275 4136960 4137221 786 3390277 3390599 4137223 4137545 969 3392293 3392512 4139239 4139458 660 3392557 3392786 4139503 4139732 690 3392788 3393011 4139734 4139957 672 3393173 3393450 4140118 4140395 834 3393686 3394084 4140631 4141029 1197 3394140 3394555 4141085 4141500 1248 3395220 3395510 4142165 4142455 873 3395701 3396052 4142646 4142997 1056 3396054 3396358 4142999 4143303 915 3396638 3396948 4143583 4143893 933 3397136 3397383 4144081 4144328 744 3397399 3397658 4144344 4144603 780 3397963 3398162 4144908 4145107 600 3398383 3398994 4145328 4145939 1836 3399308 3399660 4146253 4146605 1059 3399662 3399972 4146607 4146917 933 3399974 3400293 4146919 4147238 960 3400295 3400512 4147240 4147457 654 3400791 3401694 4147736 4148639 2712 3401774 3402104 4148719 4149049 993 3402738 3402963 4149683 4149908 678 3402965 3403364 4149910 4150309 1200 3403366 3404046 4150311 4150991 2043 3404282 3404908 4151227 4151853 1881 3405498 3405850 4152443 4152795 1059 3406435 3406830 4153380 4153775 1188 3407033 3407362 4153978 4154307 990 3407602 3409217 4154547 4156162 4848 3409487 3409824 4156431 4156768 1014 3409826 3410193 4156770 4157137 1104 3410195 3410933 4157139 4157877 2217 3411367 3411948 4158311 4158892 1746 3412181 3412416 4159125 4159360 708 3412553 3412778 4159497 4159722 678 3412780 3413087 4159724 4160031 924 3413710 3413969 4160654 4160913 780 3415878 3416189 4162867 4163178 936 3417604 3418404 4164594 4165394 2403 3418988 3419228 4165979 4166219 723 3419651 3419918 4166642 4166909 804 3420023 3420385 4167014 4167376 1089 3421119 3421407 4168109 4168397 867 3421879 3422207 4168871 4169199 987 3422696 3423208 4169687 4170199 1539 3423250 3423832 4170241 4170823 1749 3423878 3424155 4170871 4171148 834 3424157 3424431 4171150 4171424 825 3424482 3426125 4171484 4173127 4932 3426321 3426619 4173323 4173621 897 3426774 3427305 4173775 4174306 1596 3428346 3429032 4175347 4176033 2061 3429282 3429525 4176283 4176526 732 3430001 3430287 4177001 4177287 861 3430453 3430789 4177454 4177790 1011 3431126 3431537 4178127 4178538 1236 3431698 3432088 4178699 4179089 1173 3432565 3432830 4179566 4179831 798 3432832 3433035 4179833 4180036 612 3434766 3434974 4181767 4181975 627 3435183 3435478 4182184 4182479 888 3435480 3435757 4182481 4182758 834 3436077 3436279 4183078 4183280 609 3437201 3439353 4184202 4186354 6459 3439355 3441199 4186356 4188200 5535 3441372 3441946 4188373 4188947 1725 3441948 3442484 4188949 4189485 1611 3442567 3445133 4189568 4192134 7701 3445135 3445932 4192136 4192933 2394 3445934 3446766 4192935 4193767 2499 3446768 3447008 4193769 4194009 723 3447010 3447961 4194011 4194962 2856 3447963 3448448 4194964 4195449 1458 3448621 3450172 4195622 4197173 4656 3450174 3451090 4197175 4198091 2751 3467941 3468347 4199836 4200242 1221 3468373 3468755 4200268 4200650 1149 3468757 3469776 4200652 4201671 3060 3469778 3470013 4201673 4201908 708 3470015 3470337 4201910 4202232 969 3470339 3470712 4202234 4202607 1122 3470837 3471247 4202732 4203142 1233 3471249 3472330 4203144 4204225 3246 3473266 3474010 4205161 4205905 2235 3474012 3474340 4205907 4206235 987 3474751 3474955 4206646 4206850 615 3475166 3475532 4207061 4207427 1101 3475706 3476308 4207601 4208203 1809 3478532 3479001 4210427 4210896 1410 3479003 3479205 4210898 4211100 609 3479381 3479787 4211276 4211682 1221 3480317 3480531 4212212 4212426 645 3480674 3480892 4212569 4212787 657 3481588 3482044 4213483 4213939 1371 3483129 3483391 4215024 4215286 789 3483405 3483901 4215300 4215796 1491 3483903 3484103 4215798 4215998 603 3484812 3485304 4216707 4217199 1479 3486203 3486522 4218098 4218417 960 3487530 3487738 4219425 4219633 627 3488086 3488312 4219981 4220207 681 3489056 3489588 4220951 4221483 1599 3489620 3490343 4221515 4222238 2172 3490345 3490778 4222240 4222673 1302 3491552 3491969 4223447 4223864 1254 3492244 3492530 4224139 4224425 861 3493357 3493806 4225252 4225701 1350 3494018 3494564 4225913 4226459 1641 3494566 3494775 4226461 4226670 630 3495233 3495786 4227128 4227681 1662 3497732 3497962 4229636 4229866 693 3498221 3498495 4230125 4230399 825 3500412 3500638 4232316 4232542 681 3502130 3502383 4234034 4234287 762 3511022 3511224 4235206 4235408 609 3511226 3511429 4235410 4235613 612 3511479 3511726 4235663 4235910 744 3512254 3512477 4236438 4236661 672 3512572 3512884 4236756 4237068 939 3513156 3513713 4237340 4237897 1674 3513715 3513932 4237899 4238116 654 3514385 3515230 4238569 4239414 2538 3515240 3515540 4239424 4239724 903 3515918 3516383 4240102 4240567 1398 3516385 3516757 4240569 4240941 1119 3516759 3516985 4240943 4241169 681 3516987 3517215 4241171 4241399 687 3517217 3517614 4241401 4241798 1194 3517616 3517842 4241800 4242026 681 3518195 3518414 4242379 4242598 660 3518416 3518675 4242600 4242859 780 3520327 3520731 4244510 4244914 1215 3520965 3521184 4245148 4245367 660 3521285 3521538 4245468 4245721 762 3522164 3522606 4246347 4246789 1329 3523701 3524476 4247883 4248658 2328 3524613 3524845 4248795 4249027 699 3525597 3526027 4249779 4250209 1293 3526302 3526895 4250484 4251077 1782 3526994 3527511 4251176 4251693 1554 3527798 3528156 4251980 4252338 1077 3529862 3530732 4254044 4254914 2613 3531598 3531959 4255780 4256141 1086 3533168 3533540 4257350 4257722 1119 3533605 3533840 4257787 4258022 708 3533944 3534609 4258126 4258791 1998 3534872 3535125 4259054 4259307 762 3535502 3535933 4259684 4260115 1296 3537716 3538058 4261881 4262223 1029 3538118 3538388 4262283 4262553 813 3538720 3538988 4262885 4263153 807 3539188 3539423 4263353 4263588 708 3542064 3542270 4266227 4266433 621 3543166 3543377 4267329 4267540 636 3544363 3544621 4268530 4268788 777 3545028 3545338 4269195 4269505 933 3546156 3546421 4270257 4270522 798 3547430 3547650 4271531 4271751 663 3547653 3548003 4271754 4272104 1053 3548005 3548356 4272106 4272457 1056 3548687 3548920 4272788 4273021 702 3549389 3549652 4273490 4273753 792 3549996 3550236 4274097 4274337 723 3550457 3550734 4274558 4274835 834 3550966 3551195 4275067 4275296 690 3551197 3551564 4275298 4275665 1104 3551566 3551783 4275667 4275884 654 3552517 3552752 4276618 4276853 708 3557336 3557543 4282277 4282484 624 3557579 3557826 4282520 4282767 744 3558241 3558696 4283182 4283637 1368 3558933 3559148 4283874 4284089 648 3559415 3559617 4284356 4284558 609 3559675 3559992 4284616 4284933 954 3560557 3560792 4285498 4285733 708 3561803 3562239 4289596 4290032 1311 3562646 3563634 4290439 4291427 2967 3563858 3564327 4291651 4292120 1410 3564329 3564567 4292122 4292360 717 3564976 3565428 4292769 4293221 1359 3565472 3566159 4293265 4293952 2064 3566161 3566576 4293954 4294369 1248 3566584 3567271 4294377 4295064 2064 3567273 3567496 4295066 4295289 672 3567597 3567963 4295390 4295756 1101 3568254 3568461 4296047 4296254 624 3568479 3569058 4296272 4296851 1740 3569644 3569895 4297437 4297688 756 3570512 3570762 4298305 4298555 753 3570926 3571649 4298719 4299442 2172 3571651 3571952 4299444 4299745 906 3572002 3572237 4299795 4300030 708 3572517 3572896 4300309 4300688 1140 3574565 3574895 4305813 4306143 993 3576061 3576403 4307310 4307652 1029 3577052 3577403 4308301 4308652 1056 3577465 3577691 4308714 4308940 681 3582685 3582946 4312337 4312598 786 3587802 3588115 4317457 4317770 942 3588568 3588968 4318224 4318624 1203 3589765 3590102 4319421 4319758 1014 3590901 3591116 4321383 4321598 648 3591778 3592015 4322260 4322497 714 3594259 3594815 4324741 4325297 1671 3596756 3597003 4327997 4328244 744 3597005 3597336 4328246 4328577 996 3597836 3598095 4329077 4329336 780 3598136 3598539 4329377 4329780 1212 3598541 3598741 4329782 4329982 603 3600034 3600616 4331275 4331857 1749 3601152 3601384 4332393 4332625 699 3601778 3602255 4333022 4333499 1434 3603197 3603546 4334441 4334790 1050 3603984 3604316 4335228 4335560 999 3605752 3606017 4336996 4337261 798 3606688 3606959 4337932 4338203 816 3607216 3607919 4338460 4339163 2112 3609449 3610027 4340693 4341271 1737 3610194 3610474 4341438 4341718 843 3610579 3610791 4357178 4357390 639 3611118 3611583 4357717 4358182 1398 3612710 3613064 4359309 4359663 1065 3626702 3626958 4373174 4373430 771 3628331 3628536 4374804 4375009 618 3633949 3634208 4380431 4380690 780 3634864 3635174 4381346 4381656 933 3635619 3635905 4382102 4382388 861 3636126 3636478 4382609 4382961 1059 3637117 3637463 4383427 4383773 1041 3638371 3638672 4384682 4384983 906 3639178 3639518 4385489 4385829 1023 3640481 3641041 4386792 4387352 1683 3642959 3643204 4389270 4389515 738 3644078 3644298 4390389 4390609 663 3647398 3647657 4393713 4393972 780 3647716 3647954 4394031 4394269 717 3647956 3648162 4394271 4394477 621 3649454 3649665 4395768 4395979 636 3651810 3652304 4396924 4397418 1485 3652306 3652647 4397420 4397761 1026 3652939 3653149 4407075 4407285 633 3653920 3654673 4408056 4408809 2262 3654825 3655199 4408961 4409335 1125 3655965 3656738 4410101 4410874 2322 3656740 3656944 4410876 4411080 615 3656993 3657606 4411129 4411742 1842 3657893 3658191 4412029 4412327 897 3659093 3659319 4413229 4413455 681 3659321 3659565 4413457 4413701 735 3660257 3660621 4414393 4414757 1095 3660857 3661098 4414993 4415234 726 3661745 3662009 4415881 4416145 795 3662409 3662640 4416545 4416776 696 3663766 3664057 4417903 4418194 876 3665082 3665317 4419219 4419454 708 3666000 3666247 4420137 4420384 744 3666534 3667018 4420671 4421155 1455 3667554 3667966 4421692 4422104 1239 3668010 3668215 4422148 4422353 618 3668721 3669160 4422859 4423298 1320 3669276 3669631 4423414 4423769 1068 3671681 3672018 4425819 4426156 1014 3672508 3672758 4426647 4426897 753 3672949 3673647 4427088 4427786 2097 3673649 3673917 4427788 4428056 807 3674645 3674941 4428784 4429080 891 3675309 3675547 4429448 4429686 717 3675870 3676138 4430009 4430277 807 3676916 3677337 4431055 4431476 1266 3677402 3677646 4431541 4431785 735 3677652 3677869 4431791 4432008 654 3678398 3678627 4432537 4432766 690 3678911 3679113 4433050 4433252 609 3679160 3679838 4433299 4433977 2037 3679840 3681206 4433979 4435345 4101 3681735 3682160 4435874 4436299 1278 3682412 3682652 4436551 4436791 723 3683081 3683427 4437220 4437566 1041 3685228 3685473 4439367 4439612 738 3685475 3685803 4439614 4439942 987 3686446 3686649 4440575 4440778 612 3688282 3688563 4442430 4442711 846 3688836 3689035 4442984 4443183 600 3689145 3689410 4443293 4443558 798 3690180 3690839 4444328 4444987 1980 3690937 3691169 4445085 4445317 699 3691954 3692210 4446102 4446358 771 3693101 3693406 4447249 4447554 918 3693748 3693984 4447896 4448132 711 3693986 3694370 4448134 4448518 1155 3694620 3695510 4448768 4449658 2673 3695512 3695799 4449660 4449947 864 3695801 3696012 4449949 4450160 636 3696029 3696599 4450177 4450747 1713 3697983 3698208 4452131 4452356 678 3699097 3699323 4453245 4453471 681 3701424 3701642 4455572 4455790 657 3703997 3704288 4457988 4458279 876 3705185 3705574 4459176 4459565 1170 3706198 3706409 4460023 4460234 636 3707862 3708145 4461687 4461970 852 3709603 3709837 4469181 4469415 705 3709933 3710247 4469511 4469825 945 3710513 3710802 4470091 4470380 870 3711750 3711960 4471328 4471538 633 3712392 3712779 4471970 4472357 1164 3713289 3713821 4472867 4473399 1599 3714020 3714404 4473598 4473982 1155 3714676 3715104 4474254 4474682 1287 3716329 3716842 4475907 4476420 1542 3716983 3717762 4476561 4477340 2340 3719705 3719938 4477879 4478112 702 3720338 3720573 4478512 4478747 708 3721244 3721503 4479418 4479677 780 3721646 3721911 4479820 4480085 798 3722279 3722535 4480453 4480709 771 3722805 3723019 4480979 4481193 645 3723075 3723281 4481249 4481455 621 3724433 3724962 4482607 4483136 1590 3726176 3726658 4484350 4484832 1449 3727281 3727646 4485455 4485820 1098 3728290 3728727 4486464 4486901 1314 3728729 3729240 4486903 4487414 1536 3729276 3729480 4487450 4487654 615 3730090 3730365 4488264 4488539 828 3730367 3730695 4488541 4488869 987 3730697 3731216 4488871 4489390 1560 3731260 3731625 4489434 4489799 1098 3732559 3733019 4490733 4491193 1383 3734584 3734939 4492670 4493025 1068 3735668 3736147 4493754 4494233 1440 3737155 3737386 4495241 4495472 696 3737753 3737954 4495839 4496040 606 3738089 3738313 4496175 4496399 675 3738729 3739059 4496816 4497146 993 3748776 3749229 4502112 4502565 1362 3749543 3749793 4502879 4503129 753 3749867 3750081 4503203 4503417 645 3750437 3750638 4503773 4503974 606 3751517 3751877 4504853 4505213 1083 3753515 3753815 4506851 4507151 903 3754605 3754847 4509312 4509554 729 3754849 3755334 4509556 4510041 1458 3755627 3755831 4510333 4510537 615 3756558 3757025 4511264 4511731 1404 3757315 3757756 4512021 4512462 1326 3757758 3757960 4512464 4512666 609 3758007 3758515 4512713 4513221 1527 3758517 3759460 4513223 4514166 2832 3759462 3759711 4514168 4514417 750 3759827 3760224 4514534 4514931 1194 3760533 3760761 4515240 4515468 687 3760763 3760987 4515470 4515694 675 3761284 3761599 4515991 4516306 948 3762518 3762777 4517225 4517484 780 3762983 3763182 4517690 4517889 600 3763553 3764842 4518260 4519549 3870 3765234 3765545 4519941 4520252 936 3765547 3766040 4520254 4520747 1482 3766051 3766618 4520758 4521325 1704 3766620 3767143 4521327 4521850 1572 3767145 3767393 4521852 4522100 747 3767458 3767795 4522164 4522501 1014 3767797 3768183 4522503 4522889 1161 3768185 3768870 4522891 4523576 2058 3768872 3769090 4523578 4523796 657 3769261 3770371 4523967 4525077 3333 3770373 3770664 4525079 4525370 876 3771966 3772192 4526537 4526763 681 3773138 3773352 4527709 4527923 645 3773755 3774162 4528326 4528733 1224 3776036 3776244 4536639 4536847 627 3776321 3776625 4536924 4537228 915 3776947 3777179 4537550 4537782 699 3777313 3777589 4537916 4538192 831 3779808 3780062 4540399 4540653 765 3780064 3780305 4540655 4540896 726 3780713 3780996 4541304 4541587 852 3780998 3781418 4541589 4542009 1263 3781555 3781957 4542146 4542548 1209 3782118 3782419 4542709 4543010 906 3782421 3782750 4543012 4543341 990 3783726 3784069 4544317 4544660 1032 3784331 3784597 4544922 4545188 801 3784602 3785323 4545193 4545914 2166 3786381 3786723 4546972 4547314 1029 3786899 3787272 4547491 4547864 1122 3787546 3787831 4548138 4548423 858 3788790 3789016 4549382 4549608 681 3790002 3790241 4550594 4550833 720 3790278 3790613 4550870 4551205 1008 3790615 3790857 4551207 4551449 729 3790859 3791332 4551451 4551924 1422 3791360 3792067 4551953 4552660 2124 3792429 3792778 4553022 4553371 1050 3792963 3793216 4553556 4553809 762 3793926 3794477 4554519 4555070 1656 3806077 3806356 4563696 4563975 840 3806403 3806707 4564022 4564326 915 3807195 3807668 4564814 4565287 1422 3807670 3808145 4565289 4565764 1428 3808147 3808399 4565766 4566018 759 3808401 3809444 4566020 4567063 3132 3809482 3809771 4567101 4567390 870 3810342 3810545 4567961 4568164 612 3810547 3810967 4568166 4568586 1263 3810969 3811665 4568588 4569284 2091 3812609 3812917 4570228 4570536 927 3813764 3814814 4571384 4572434 3153 3815632 3815848 4573252 4573468 651 3816575 3816783 4574197 4574405 627 3816812 3817209 4574434 4574831 1194 3818185 3818485 4575807 4576107 903 3818930 3819433 4576552 4577055 1512 3819549 3820522 4577171 4578144 2922 3820524 3820735 4578146 4578357 636 3821010 3821278 4578632 4578900 807 3821979 3822839 4579601 4580461 2583 3822841 3823159 4580463 4580781 957 3823161 3823491 4580783 4581113 993 3825126 3825420 4583433 4583727 885 3825941 3826140 4584248 4584447 600 3826241 3827247 4584548 4585554 3021 3827315 3828008 4585622 4586315 2082 3828323 3828528 4586630 4586835 618 3828546 3828753 4586853 4587060 624 3829026 3829300 4587333 4587607 825 3829302 3829506 4587609 4587813 615 3832228 3832565 4590535 4590872 1014 3833074 3833285 4591381 4591592 636 3833441 3833715 4591748 4592022 825 3833730 3833942 4592037 4592249 639 3835805 3836025 4635899 4636119 663 3838874 3839110 4638968 4639204 711 3839922 3840164 4640815 4641057 729 3840577 3840788 4641469 4641680 636 3841117 3841531 4642009 4642423 1245 3842055 3842270 4642947 4643162 648 3844483 3844769 4645375 4645661 861 3850393 3850610 4654628 4654845 654 3853134 3853392 4657369 4657627 777 3853647 3853982 4657882 4658217 1008 3854970 3855221 4659206 4659457 756 3855564 3855796 4659800 4660032 699 3856044 3856428 4660280 4660664 1155 3857119 3857364 4661355 4661600 738 3857692 3857927 4661928 4662163 708 3858746 3859020 4662982 4663256 825 3859488 3859690 4664232 4664434 609 3860661 3860920 4665405 4665664 780 3860922 3861384 4665666 4666128 1389 3862311 3862512 4667055 4667256 606 3862995 3863329 4667739 4668073 1005 3864047 3864436 4668791 4669180 1170 3864714 3865269 4669458 4670013 1668 3873101 3873357 4673094 4673350 771 3873359 3873625 4673352 4673618 801 3874008 3874337 4674000 4674329 990 3875486 3875697 4675478 4675689 636 3877490 3877873 4677482 4677865 1152 3877884 3878092 4677876 4678084 627 3879782 3880017 4679774 4680009 708 3880497 3880882 4680489 4680874 1158 3880884 3881112 4680876 4681104 687 3881114 3881481 4681106 4681473 1104 3881784 3882402 4681775 4682393 1857 3882404 3882683 4682395 4682674 840 3882685 3883000 4682676 4682991 948 3883532 3883858 4683523 4683849 981 3883860 3884079 4683851 4684070 660 3884159 3884426 4684150 4684417 804 3887960 3888289 4690425 4690754 990 3891377 3891750 4693842 4694215 1122 3892613 3892818 4695078 4695283 618 3893186 3893391 4695651 4695856 618 3905045 3905429 4705510 4705894 1155 3907598 3907833 4708063 4708298 708 3908983 3909240 4709448 4709705 774 3911180 3911441 4718382 4718643 786 3912307 3912572 4719509 4719774 798 3912787 3913008 4719989 4720210 666 3913071 3913378 4720272 4720579 924 3913380 3914138 4720581 4721339 2277 3914140 3914342 4721341 4721543 609 3914443 3914774 4721644 4721975 996 3914848 3916092 4722049 4723293 3735 3916211 3916485 4723412 4723686 825 3916700 3916965 4723901 4724166 798 3916967 3917247 4724168 4724448 843 3917273 3917733 4724474 4724934 1383 3917861 3919833 4725062 4727034 5919 3919835 3920254 4727036 4727455 1260 3920256 3920953 4727457 4728154 2094 3921084 3921346 4728285 4728547 789 3921557 3921943 4728758 4729144 1161 3922075 3922345 4729276 4729546 813 3923190 3923401 4730391 4730602 636 3924356 3924810 4731557 4732011 1365 3924947 3925200 4732148 4732401 762 3925721 3925958 4732922 4733159 714 3928391 3928805 4735593 4736007 1245 3928807 3929180 4736009 4736382 1122 3929182 3929417 4736384 4736619 708 3929869 3930141 4737071 4737343 819 3930676 3930940 4737879 4738143 795 3930942 3931172 4738145 4738375 693 3931174 3931620 4738377 4738823 1341 3932054 3932535 4739257 4739738 1446 3932573 3933133 4739776 4740336 1683 3933261 3933512 4740464 4740715 756 3933609 3934150 4740812 4741353 1626 3934479 3934711 4741682 4741914 699 3934713 3935109 4741916 4742312 1191 3935165 3935694 4742368 4742897 1590 3935747 3936714 4742950 4743917 2904 3937378 3937780 4744581 4744983 1209 3937782 3938147 4744985 4745350 1098 3938339 3938586 4745542 4745789 744 3938726 3938953 4745932 4746159 684 3939656 3940429 4746862 4747635 2322 3940467 3940849 4747673 4748055 1149 3941290 3941587 4748496 4748793 894 3941876 3942495 4749083 4749702 1860 3942537 3943049 4749743 4750255 1539 3943061 3943705 4750267 4750911 1935 3943851 3944118 4751057 4751324 804 3944336 3944674 4751541 4751879 1017 3944802 3945035 4752007 4752240 702 3945350 3945775 4752556 4752981 1278 3946383 3946652 4753589 4753858 810 3947539 3947758 4754745 4754964 660 3947893 3948155 4755099 4755361 789 3949865 3950206 4757073 4757414 1026 3950601 3950815 4757809 4758023 645 3951168 3951462 4758379 4758673 885 3953182 3953508 4760393 4760719 981 3954320 3954533 4761534 4761747 642 3955253 3955479 4762467 4762693 681 3957900 3958491 4765080 4765671 1776 3958966 3959213 4766146 4766393 744 3959407 3959684 4766587 4766864 834 3960040 3960576 4767220 4767756 1611 3960579 3961420 4767759 4768600 2526 3961588 3961828 4768768 4769008 723 3961830 3962173 4769010 4769353 1032 3962188 3962389 4769368 4769569 606 3962454 3962761 4769634 4769941 924 3963037 3963652 4770217 4770832 1848 3963654 3964503 4770834 4771683 2550 3965149 3965452 4772329 4772632 912 3965454 3965663 4772634 4772843 630 3965878 3966125 4773058 4773305 744 3966524 3967018 4773704 4774198 1485 3967020 3967264 4774200 4774444 735 3967437 3967796 4774617 4774976 1080 3967798 3968030 4774978 4775210 699 3969369 3970114 4776552 4777297 2238 3971252 3971598 4778435 4778781 1041 3972240 3972529 4779423 4779712 870 3972638 3973086 4779821 4780269 1347 3973882 3974154 4781065 4781337 819 3974559 3974824 4781742 4782007 798 3975080 3975311 4782263 4782494 696 3976549 3976943 4783731 4784125 1185 3977350 3977590 4784532 4784772 723 3978430 3978700 4785612 4785882 813 3978702 3978920 4785884 4786102 657 3979246 3979463 4786428 4786645 654 3979950 3980813 4787132 4787995 2592 3983060 3983408 4790252 4790600 1047 3983798 3984254 4790991 4791447 1371 3984350 3985017 4791543 4792210 2004 3985785 3985988 4792996 4793199 612 3985990 3986378 4793201 4793589 1167 3986526 3986898 4793737 4794109 1119 3987329 3987584 4794540 4794795 768 3988758 3989024 4795970 4796236 801 3989842 3990281 4797054 4797493 1320 3990574 3990824 4797786 4798036 753 3991069 3991298 4798281 4798510 690 3994640 3994891 4801852 4802103 756 3998658 3999242 4806754 4807338 1755 3999244 3999506 4807340 4807602 789 4001721 4001947 4811588 4811814 681 4002078 4002350 4811945 4812217 819 4002433 4002653 4812300 4812520 663 4002679 4002974 4812546 4812841 888 4002976 4003592 4812843 4813459 1851 4003651 4004132 4813518 4813999 1446 4004500 4004978 4814367 4814845 1437 4006636 4006971 4816508 4816843 1008 4007150 4007604 4817022 4817476 1365 4007907 4008189 4817781 4818063 849 4009409 4009691 4819297 4819579 849 4010714 4011133 4820601 4821020 1260 4012706 4013140 4822593 4823027 1305 4013300 4013716 4823188 4823604 1251 4013892 4014726 4823782 4824616 2505 4014737 4015625 4824627 4825515 2667 4015657 4015934 4825547 4825824 834 4016125 4016741 4826015 4826631 1851 4016743 4017305 4826633 4827195 1689 4017548 4017783 4827438 4827673 708 4017785 4018011 4827675 4827901 681 4018598 4018800 4828488 4828690 609 4018898 4019521 4828788 4829411 1872 4019523 4019855 4829413 4829745 999 4019861 4020179 4829749 4830067 957 4020181 4020673 4830069 4830561 1479 4020843 4021207 4830731 4831095 1095 4021209 4021554 4831097 4831442 1038 4021683 4021942 4831570 4831829 780 4022289 4022618 4832176 4832505 990 4023615 4023844 4833502 4833731 690 4024014 4024270 4833901 4834157 771 4024386 4024747 4834273 4834634 1086 4028184 4028599 4837882 4838297 1248 4030642 4030915 4840340 4840613 822 4031326 4031698 4841024 4841396 1119 4032014 4032255 4841713 4841954 726 4032514 4032788 4842213 4842487 825 4033458 4033856 4843160 4843558 1197 4033858 4034119 4843560 4843821 786 4034157 4034674 4843859 4844376 1554 4034682 4035035 4844384 4844737 1062 4035648 4036270 4845361 4845983 1869 4036272 4036751 4845985 4846464 1440 4036971 4037300 4846682 4847011 990 4037310 4037891 4847021 4847602 1746 4038498 4039102 4848038 4848642 1815 4039724 4039958 4849264 4849498 705 4040674 4040905 4850213 4850444 696 4040907 4041365 4850446 4850904 1377 4041665 4042311 4851205 4851851 1941 4042313 4042580 4851853 4852120 804 4042808 4043242 4852348 4852782 1305 4043940 4044491 4853480 4854031 1656 4044493 4044810 4854033 4854350 954 4045175 4045638 4854715 4855178 1392 4046696 4047212 4856236 4856752 1551 4047348 4047597 4856889 4857138 750 4048169 4048373 4857710 4857914 615 4048529 4048757 4858070 4858298 687 4049515 4049832 4859053 4859370 954 4050350 4050549 4859888 4860087 600 4050551 4050882 4860089 4860420 996 4052298 4052503 4861797 4862002 618 4052784 4053048 4862283 4862547 795 4053818 4054023 4863317 4863522 618 4055063 4055292 4864450 4864679 690 4055827 4056695 4865214 4866082 2607 4056823 4057370 4866210 4866757 1644 4057496 4057758 4866883 4867145 789 4057779 4058383 4867167 4867771 1815 4058682 4058912 4868070 4868300 693 4058914 4059128 4868302 4868516 645 4059990 4060374 4869378 4869762 1155 4065903 4066156 4875289 4875542 762 4070076 4070469 4880235 4880628 1182 4071254 4071466 4881413 4881625 639 4072146 4072369 4882305 4882528 672 4073229 4073457 4883388 4883616 687 4073818 4074128 4883977 4884287 933 4074145 4074371 4884304 4884530 681 4074451 4074664 4884610 4884823 642 4074666 4075524 4884825 4885683 2577 4075844 4076090 4886003 4886249 741 4076865 4077144 4889090 4889369 840 4078137 4078378 4890361 4890602 726 4078380 4078660 4890604 4890884 843 4078874 4079490 4891098 4891714 1851 4079740 4080014 4891964 4892238 825 4080655 4081100 4892879 4893324 1338 4082241 4082495 4894465 4894719 765 4082650 4083118 4894874 4895342 1407 4083120 4083610 4895344 4895834 1473 4083612 4083818 4895836 4896042 621 4083823 4084085 4896047 4896309 789 4084114 4084446 4896338 4896670 999 4084924 4085191 4897148 4897415 804 4085768 4085980 4897991 4898203 639 4088405 4088620 4900628 4900843 648 4088622 4088887 4900845 4901110 798 4089204 4089568 4901415 4901779 1095 4093600 4094019 4907147 4907566 1260 4094283 4095506 4907830 4909053 3672 4095607 4095977 4909154 4909524 1113 4097108 4097318 4910655 4910865 633 4097955 4098496 4911502 4912043 1626 4099287 4099550 4912834 4913097 792 4099936 4100150 4913483 4913697 645 4100221 4100472 4913768 4914019 756 4101847 4102396 4915394 4915943 1650 4102832 4103518 4916379 4917065 2061 4103648 4103949 4917196 4917497 906 4104111 4104346 4917659 4917894 708 4104468 4104676 4918016 4918224 627 4104678 4104886 4918226 4918434 627 4105666 4105981 4919214 4919529 948 4106308 4106567 4919855 4920114 780 4107268 4107796 4920815 4921343 1587 4108134 4108363 4921681 4921910 690 4108950 4109289 4922497 4922836 1020 4109737 4110009 4923284 4923556 819 4110197 4110431 4923744 4923978 705 4110433 4110670 4923980 4924217 714 4110942 4111206 4924489 4924753 795 4112872 4113113 4926419 4926660 726 4113531 4113841 4927173 4927483 933 4114131 4114333 4927773 4927975 609 4114335 4114669 4927977 4928311 1005 4115275 4115600 4928917 4929242 978 4116503 4116960 4931583 4932040 1374 4117834 4118324 4932914 4933404 1473 4118491 4118702 4933571 4933782 636 4118758 4119248 4933838 4934328 1473 4119603 4120087 4934683 4935167 1455 4120353 4120633 4935433 4935713 843 4120662 4121417 4935742 4936497 2268 4121652 4121888 4936732 4936968 711 4121923 4122259 4937003 4937339 1011 4124464 4124851 4939544 4939931 1164 4125654 4125980 4946126 4946452 981 4127211 4127562 4947683 4948034 1056 4129938 4130145 4950410 4950617 624 4130200 4130488 4950672 4950960 867 4131927 4132171 4952399 4952643 735 4135402 4135606 4955874 4956078 615 4136436 4136795 4956908 4957267 1080 4137236 4137510 4957708 4957982 825 4137555 4137781 4958027 4958253 681 4137861 4138078 4958333 4958550 654 4138590 4138819 4959062 4959291 690 4139421 4139629 4959893 4960101 627 4139953 4140262 4960426 4960735 930 4141642 4141843 4962115 4962316 606 4142728 4143062 4963201 4963535 1005 4143891 4144140 4964364 4964613 750 4144322 4144545 4964795 4965018 672 4144994 4145292 4965467 4965765 897 4145384 4145652 4965857 4966125 807 4145692 4145913 4966165 4966386 666 4146763 4147047 4967236 4967520 855 4147330 4147624 4967803 4968097 885 4149229 4149642 4969703 4970116 1242 4150207 4150508 4970681 4970982 906 4150552 4150888 4971026 4971362 1011 4151440 4151657 4971668 4971885 654 4151809 4152222 4972037 4972450 1242 4152388 4152636 4972616 4972864 747 4153810 4154138 4974038 4974366 987 4154273 4154567 4974501 4974795 885 4155818 4156348 4976046 4976576 1593 4156746 4156966 4976974 4977194 663 4157626 4158023 4977854 4978251 1194 4158157 4158450 4978385 4978678 882 4158561 4158838 4981417 4981694 834 4158861 4159219 4981717 4982075 1077 4160709 4161251 4983565 4984107 1629 4162354 4162742 4985210 4985598 1167 4162744 4163523 4985600 4986379 2340 4163525 4163789 4986381 4986645 795 4164001 4164435 4986857 4987291 1305 4164437 4164648 4987293 4987504 636 4164772 4165237 4987628 4988093 1398 4165275 4165657 4988131 4988513 1149 4165950 4166462 4988720 4989232 1539 4166464 4166760 4989234 4989530 891 4166769 4167388 4989541 4990160 1860 4167430 4167786 4990201 4990557 1071 4168430 4168872 4991201 4991643 1329 4168874 4169134 4991645 4991905 783 4170257 4170470 4992862 4993075 642 4172858 4173811 4995446 4996399 2862 4173886 4174106 4996474 4996694 663 4174116 4175013 4996704 4997601 2694 4175015 4175909 4997603 4998497 2685 4175950 4176241 4998539 4998830 876 4176243 4176538 4998832 4999127 888 4176894 4177208 4999483 4999797 945 4177351 4178584 4999819 5001052 3702 4178586 4179345 5001054 5001813 2280 4179578 4179837 5002046 5002305 780 4180073 4180287 5002541 5002755 645 4180289 4180605 5002757 5003073 951 4181117 4181358 5003585 5003826 726 4181831 4182169 5004299 5004637 1017 4182488 4182726 5004956 5005194 717 4182882 4183189 5005350 5005657 924 4183488 4183996 5005956 5006464 1527 4184046 4184630 5006514 5007098 1755 4184817 4185043 5007285 5007511 681 4185045 4185443 5007513 5007911 1197 4185445 4185778 5007913 5008246 1002 4186344 4186612 5008812 5009080 807 4186737 4187343 5009205 5009811 1821 4187861 4188293 5010258 5010690 1299 4192163 4192395 5014560 5014792 699 4192418 4192617 5014815 5015014 600 4192805 4193098 5015202 5015495 882 4194087 4194323 5016484 5016720 711 4194325 4194575 5016722 5016972 753 4195053 4195357 5017450 5017754 915 4195965 4196318 5018362 5018715 1062 4197270 4197511 5019667 5019908 726 4197638 4198220 5020035 5020617 1749 4198698 4198935 5021095 5021332 714 4198943 4199582 5021340 5021979 1920 4201392 4201604 5023768 5023980 639 4204214 4204438 5026590 5026814 675 4204652 4205249 5027028 5027625 1794 4205569 4205976 5027947 5028354 1224 4206137 4206386 5028515 5028764 750 4206570 4207144 5028948 5029522 1725 4207599 4207883 5029976 5030260 855 4207885 4208160 5030262 5030537 828 4208277 4208617 5030654 5030994 1023 4208854 4209342 5031230 5031718 1467 4209832 4210413 5032208 5032789 1746 4211637 4212090 5033606 5034059 1362 4213347 4213957 5035316 5035926 1833 4213959 4214347 5035928 5036316 1167 4214481 4214751 5036450 5036720 813 4217734 4217997 5039704 5039967 792 4218639 4218843 5040609 5040813 615 4220056 4220269 5042026 5042239 642 4220349 4220555 5042320 5042526 621 4220557 4220897 5042528 5042868 1023 4221273 4221491 5043244 5043462 657 4222189 4222406 5044160 5044377 654 4223590 4223810 5045561 5045781 663 4224226 4224461 5046197 5046432 708 4224517 4224776 5046488 5046747 780 4225045 4225323 5047016 5047294 837 4225735 4225970 5047706 5047941 708 4229111 4229551 5057182 5057622 1323 4229679 4229908 5057750 5057979 690 4229994 4230336 5058065 5058407 1029 4230657 4231155 5058728 5059226 1497 4231157 4231535 5059228 5059606 1137 4232285 4232582 5060356 5060653 894 4232761 4232992 5060832 5061063 696 4233381 4233656 5061466 5061741 828 4234440 4234647 5062525 5062732 624 4235356 4235672 5063441 5063757 951 4237564 4237988 5065649 5066073 1275 4238057 4238268 5066142 5066353 636 4238406 4238620 5066491 5066705 645 4238622 4238986 5066707 5067071 1095 4239483 4240332 5067568 5068417 2550 4240577 4240851 5068662 5068936 825 4241194 4241513 5069279 5069598 960 4241860 4242134 5069945 5070219 825 4242340 4242595 5070425 5070680 768 4242692 4242965 5070777 5071050 822 4243246 4243553 5071331 5071638 924 4243777 4244103 5071862 5072188 981 4244267 4244585 5072352 5072670 957 4244704 4245302 5072789 5073387 1797 4245304 4245658 5073389 5073743 1065 4245858 4246069 5073943 5074154 636 4246359 4246764 5074444 5074849 1218 4247264 4247653 5075257 5075646 1170 4247873 4248118 5075866 5076111 738 4250222 4250493 5078215 5078486 816 4250517 4250895 5078510 5078888 1137 4253485 4253771 5081478 5081764 861 4253773 4254142 5081766 5082135 1110 4254248 4254495 5082241 5082488 744 4254560 4254856 5082553 5082849 891 4256676 4257136 5084669 5085129 1383 4259211 4259425 5087175 5087389 645 4262253 4262478 5090217 5090442 678 4263080 4263430 5091044 5091394 1053 4263432 4263811 5091396 5091775 1140 4264612 4264826 5092576 5092790 645 4267726 4267949 5095682 5095905 672 4267951 4268300 5095907 5096256 1050 4271274 4271688 5099230 5099644 1245 4272543 4272784 5100500 5100741 726 4274885 4275144 5102841 5103100 780 4275257 4275698 5103213 5103654 1326 4275783 4276051 5103739 5104007 807 4276498 4276886 5104454 5104842 1167 4277592 4277901 5105547 5105856 930 4278059 4278511 5106014 5106466 1359 4278860 4279104 5106815 5107059 735 4280733 4281019 5108691 5108977 861 4282323 4282554 5110281 5110512 696 4282634 4282898 5110592 5110856 795 4282979 4283305 5110938 5111264 981 4283580 4283866 5111539 5111825 861 4284575 4284796 5112534 5112755 666 4284945 4285241 5112904 5113200 891 4285243 4285625 5113202 5113584 1149 4285817 4286408 5113776 5114367 1776 4286746 4286983 5114705 5114942 714 4287171 4287708 5115130 5115667 1614 4287908 4288139 5115867 5116098 696 4289459 4289694 5117418 5117653 708 4291742 4292213 5119701 5120172 1416 4294024 4294328 5121519 5121823 915 4294488 4294792 5121983 5122287 915 4295091 4295297 5122586 5122792 621 4295299 4295540 5122794 5123035 726 4295545 4295804 5123040 5123299 780 4295971 4296203 5123466 5123698 699 4296217 4297019 5123712 5124514 2409 4298256 4298470 5125751 5125965 645 4298526 4298730 5126021 5126225 615 4299245 4299477 5126740 5126972 699 4300511 4300721 5128006 5128216 633 4301558 4301780 5129053 5129275 669 4301827 4302040 5129322 5129535 642 4303916 4304296 5131411 5131791 1143 4312689 4312935 5142354 5142600 741 4315512 4315729 5145178 5145395 654 4318700 4318931 5148366 5148597 696 4323945 4324269 5153204 5153528 975 4324271 4324481 5153530 5153740 633 4325926 4326534 5155186 5155794 1827 4327141 4327364 5156401 5156624 672 4327881 4328194 5157141 5157454 942 4328196 4328668 5157456 5157928 1419 4328796 4329079 5158056 5158339 852 4329081 4329292 5158341 5158552 636 4330003 4330414 5159263 5159674 1236 4330464 4330844 5159724 5160104 1143 4330881 4331442 5160141 5160702 1686 4331444 4331982 5160704 5161242 1617 4333040 4333250 5162300 5162510 633 4334154 4334449 5163414 5163709 888 4334499 4334789 5163759 5164049 873 4336113 4336322 5165373 5165582 630 4336393 4336693 5165653 5165953 903 4336927 4337183 5166187 5166443 771 4337794 4338038 5167054 5167298 735 4338994 4339308 5168254 5168568 945 4339353 4339715 5168613 5168975 1089 4340892 4341142 5170152 5170402 753 4341624 4341999 5170884 5171259 1128 4344740 4344957 5174001 5174218 654 4344959 4345211 5174220 5174472 759 4345213 4345571 5174474 5174832 1077 4346026 4346523 5175287 5175784 1494 4346631 4346834 5175892 5176095 612 4347166 4347790 5176427 5177051 1875 4347927 4348213 5177188 5177474 861 4348434 4348726 5177695 5177987 879 4348728 4348972 5177989 5178233 735 4349163 4349372 5178424 5178633 630 4350463 4350950 5179724 5180211 1464 4351194 4351406 5180455 5180667 639 4351408 4351706 5180669 5180967 897 4352170 4352376 5181431 5181637 621 4353534 4354238 5182795 5183499 2115 4354273 4354526 5183534 5183787 762 4354528 4354910 5183789 5184171 1149 4354912 4355495 5184173 5184756 1752 4355497 4355732 5184758 5184993 708 4355851 4356510 5185112 5185771 1980 4356602 4356917 5185863 5186178 948 4356919 4357185 5186180 5186446 801 4357376 4357687 5186637 5186948 936 4358283 4358518 5187545 5187780 708 4358531 4358953 5187793 5188215 1269 4359009 4359406 5188271 5188668 1194 4359408 4359650 5188670 5188912 729 4360590 4361086 5189852 5190348 1491 4361109 4361356 5190371 5190618 744 4361397 4361736 5190659 5190998 1020 4361967 4362177 5191229 5191439 633 4362309 4362521 5191571 5191783 639 4362523 4362876 5191785 5192138 1062 4363046 4363258 5192308 5192520 639 4363260 4363546 5192522 5192808 861 4363548 4364194 5192810 5193456 1941 4364202 4364791 5193464 5194053 1770 4364793 4364992 5194055 5194254 600 4365531 4365754 5194793 5195016 672 4365756 4366009 5195018 5195271 762 4367889 4368488 5197151 5197750 1800 4369080 4369317 5198342 5198579 714 4370219 4370576 5199481 5199838 1074 4370778 4370988 5200030 5200240 633 4371312 4371617 5200564 5200869 918 4371619 4371876 5200871 5201128 774 4372187 4372397 5201279 5201489 633 4373122 4373545 5202214 5202637 1272 4373777 4374003 5202869 5203095 681 4374052 4374251 5203144 5203343 600 4374905 4375185 5203997 5204277 843 4375857 4376101 5204948 5205192 735 4376397 4376796 5205488 5205887 1200 4377144 4377416 5206235 5206507 819 4377418 4377634 5206509 5206725 651 4377636 4378173 5206727 5207264 1614 4378301 4378506 5207392 5207597 618 4378508 4378713 5207599 5207804 618 4378718 4378946 5207809 5208037 687 4379198 4379523 5208289 5208614 978 4379594 4379808 5208685 5208899 645 4380144 4380485 5209235 5209576 1026 4380835 4381058 5209926 5210149 672 4381060 4381274 5210151 5210365 645 4381385 4381717 5210476 5210808 999 4382064 4382284 5211155 5211375 663 4383624 4383938 5212160 5212474 945 4387381 4387685 5215917 5216221 915 4387687 4387980 5216223 5216516 882 4388866 4389092 5217402 5217628 681 4389846 4390338 5218382 5218874 1479 4390965 4391449 5219501 5219985 1455 4391451 4391696 5219987 5220232 738 4392660 4392949 5221196 5221485 870 4392951 4393314 5221487 5221850 1092 4393390 4393607 5221926 5222143 654 4394572 4394885 5223108 5223421 942 4396694 4397281 5225230 5225817 1764 4397605 4398192 5226141 5226728 1764 4398699 4399042 5227236 5227579 1032 4399262 4399973 5227799 5228510 2136 4400047 4400534 5228584 5229071 1464 4400536 4400837 5229073 5229374 906 4400839 4401199 5229376 5229736 1083 4401291 4401502 5229828 5230039 636 4401693 4402147 5230230 5230684 1365 4402690 4402925 5231227 5231462 708 4403737 4404072 5232275 5232610 1008 4404088 4404439 5232626 5232977 1056 4404441 4404736 5232979 5233274 888 4406310 4406566 5234848 5235104 771 4407734 4407963 5236273 5236502 690 4407983 4408209 5236522 5236748 681 4409733 4410016 5238272 5238555 852 4410543 4411443 5239082 5239982 2703 4411568 4411931 5240107 5240470 1092 4413245 4413458 5241784 5241997 642 4413460 4414119 5241999 5242658 1980 4414166 4414590 5242705 5243129 1275 4415106 4415865 5243645 5244404 2280 4415867 4416119 5244406 5244658 759 4416427 4416794 5244966 5245333 1104 4416802 4417277 5245341 5245816 1428 4417587 4417894 5246126 5246433 924 4417896 4418210 5246435 5246749 945 4418721 4419265 5247260 5247804 1635 4419327 4420142 5247866 5248681 2448 4422028 4422356 5250566 5250894 987 4422589 4422864 5251127 5251402 828 4422884 4423135 5251422 5251673 756 4423235 4423484 5251773 5252022 750 4423486 4423779 5252024 5252317 882 4423832 4424168 5252370 5252706 1011 4424170 4424765 5252708 5253303 1788 4425009 4425265 5253547 5253803 771 4425565 4425963 5255851 5256249 1197 4426044 4426243 5256330 5256529 600 4426245 4426957 5256531 5257243 2139 4427159 4427541 5257445 5257827 1149 4427543 4427886 5257829 5258172 1032 4427900 4428237 5258186 5258523 1014 4428542 4428802 5258828 5259088 783 4429070 4429306 5259356 5259592 711 4429923 4430185 5260209 5260471 789 4430365 4430680 5260651 5260966 948 4430682 4431179 5260968 5261465 1494 4432539 4432756 5262814 5263031 654 4432758 4433008 5263033 5263283 753 4433601 4433926 5263876 5264201 978 4433963 4434274 5264238 5264549 936 4435031 4435251 5265306 5265526 663 4435253 4435481 5265528 5265756 687 4436111 4436332 5266387 5266608 666 4436615 4437230 5266891 5267506 1848 4437503 4437711 5267796 5268004 627 4438094 4438719 5268387 5269012 1878 4438730 4438975 5269023 5269268 738 4439166 4439479 5269459 5269772 942 4439661 4440048 5269954 5270341 1164 4440303 4440757 5270596 5271050 1365 4441584 4441911 5271877 5272204 984 4443981 4444452 5274274 5274745 1416 4444454 4444845 5274747 5275138 1176 4444973 4445194 5275266 5275487 666 4445391 4445813 5275684 5276106 1269 4445815 4446120 5276108 5276413 918 4446140 4446428 5276433 5276721 867 4446534 4447021 5276827 5277314 1464 4447071 4447327 5277364 5277620 771 4447949 4448349 5278242 5278642 1203 4448542 4448813 5278837 5279108 816 4448815 4449101 5279110 5279396 861 4449229 4449635 5279524 5279930 1221 4449737 4450021 5280033 5280317 855 4450381 4450608 5280677 5280904 684 4452995 4453356 5283291 5283652 1086 4454003 4454286 5284299 5284582 852 4454357 4454691 5284653 5284987 1005 4454909 4455147 5285205 5285443 717 4455161 4455896 5285457 5286192 2208 4455898 4456160 5286194 5286456 789 4456450 4456679 5286746 5286975 690 4456750 4457024 5287046 5287320 825 4457117 4457793 5287439 5288115 2031 4458252 4458580 5288606 5288934 987 4459728 4459936 5290082 5290290 627 4460106 4460393 5290460 5290747 864 4461084 4461335 5291438 5291689 756 4461645 4461886 5291999 5292240 726 4462630 4462835 5292984 5293189 618 4463656 4463881 5294010 5294235 678 4464916 4465556 5295269 5295909 1923 4465855 4466120 5296208 5296473 798 4466518 4466825 5296871 5297178 924 4467031 4467308 5297384 5297661 834 4467542 4467930 5297895 5298283 1167 4467945 4468291 5298298 5298644 1041 4468421 4468654 5298774 5299007 702 4468890 4469173 5299243 5299526 852 4469535 4469764 5299888 5300117 690 4469816 4470154 5300169 5300507 1017 4476003 4476336 5306344 5306677 1002 4478263 4478463 5308503 5308703 603 4478850 4479283 5309086 5309519 1302 4480524 4480732 5310760 5310968 627 4481043 4481572 5311279 5311808 1590 4481615 4481848 5311851 5312084 702 4482116 4482339 5312546 5312769 672 4482470 4482864 5312900 5313294 1185 4482962 4483176 5313392 5313606 645 4483178 4483541 5313608 5313971 1092 4483543 4484119 5313973 5314549 1731 4484463 4484806 5314893 5315236 1032 4485150 4485499 5315580 5315929 1050 4485501 4485735 5315931 5316165 705 4485737 4486325 5316167 5316755 1767 4486327 4486622 5316757 5317052 888 4486903 4487111 5317333 5317541 627 4493190 4493434 5318623 5318867 735 4493667 4494057 5319100 5319490 1173 4535262 4535462 5365009 5365209 603 4536431 4537017 5366178 5366764 1761 4538109 4538335 5367856 5368082 681 4538484 4538771 5368231 5368518 864 4539505 4539758 5369252 5369505 762 4540615 4540884 5370345 5370614 810 4540886 4541103 5370616 5370833 654 4542032 4542325 5371762 5372055 882 4542802 4543107 5372531 5372836 918 4543111 4543472 5372840 5373201 1086 4544659 4544888 5374388 5374617 690 4548476 4548708 5378136 5378368 699 4548909 4549328 5378569 5378988 1260 4550051 4550300 5379711 5379960 750 4551504 4551751 5381165 5381412 744 4551873 4552075 5381534 5381736 609 4554158 4554568 5383819 5384229 1233 4554676 4554937 5384337 5384598 786 4556607 4556926 5386268 5386587 960 4556976 4557328 5386637 5386989 1059 4557330 4557696 5386991 5387357 1101 4557847 4558062 5387508 5387723 648 4561823 4562035 5399775 5399987 639 4567898 4568194 5405866 5406162 891 4586391 4586597 5418882 5419088 621 4589247 4589498 5422424 5422675 756 4589544 4589756 5422721 5422933 639 4589758 4590079 5422935 5423256 966 4591606 4591905 5424792 5425091 900 4592020 4592269 5425206 5425455 750 4592317 4592556 5425504 5425743 720 4592558 4592949 5425745 5426136 1176 4593732 4593982 5426920 5427170 753 4594693 4595224 5427880 5428411 1596 4595901 4596268 5429088 5429455 1104 4596459 4596916 5429646 5430103 1374 4596918 4597156 5430105 5430343 717 4597495 4597826 5430682 5431013 996 4597828 4598336 5431015 5431523 1527 4598884 4599452 5432071 5432639 1707 4599469 4599869 5432656 5433056 1203 4599871 4600306 5433058 5433493 1308 4600811 4601319 5434000 5434508 1527 4601459 4601825 5434648 5435014 1101 4601827 4602472 5435016 5435661 1938 4604188 4604575 5437063 5437450 1164 4605120 4605567 5437995 5438442 1344 4605846 4606069 5438721 5438944 672 4606201 4607439 5439076 5440314 3717 4607576 4607775 5440451 5440650 600 4607972 4608300 5440847 5441175 987 4608302 4608593 5441177 5441468 876 4608604 4609160 5441479 5442035 1671 4609548 4610186 5442423 5443061 1917 4610318 4610595 5443193 5443470 834 4610597 4611095 5443472 5443970 1497 4613016 4613327 5445687 5445998 936 4613736 4614096 5446407 5446767 1083 4614243 4614763 5446914 5447434 1563 4615143 4615543 5447814 5448214 1203 4615599 4616269 5448270 5448940 2013 4616649 4616956 5449320 5449627 924 4617023 4617937 5449694 5450608 2745 4618311 4618887 5450982 5451558 1731 4621390 4621712 5453018 5453340 969 4622026 4622270 5453654 5453898 735 4622284 4622611 5453912 5454239 984 4623145 4623424 5454773 5455052 840 4623611 4624207 5455239 5455835 1791 4624869 4625256 5456497 5456884 1164 4625387 4625939 5457015 5457567 1659 4626344 4627214 5457972 5458842 2613 4627591 4627832 5459219 5459460 726 4628122 4628527 5459750 5460155 1218 4630122 4630608 5461750 5462236 1461 4630610 4630809 5462238 5462437 600 4632073 4632299 5463701 5463927 681 4632526 4632989 5464154 5464617 1392 4632991 4633225 5464619 5464853 705 4637081 4637382 5468709 5469010 906 4637525 4638352 5469153 5469980 2484 genometools-1.5.1/testdata/chaindata/chain-globalgc-wf1.5-maxgap10000066400000000000000000000001731211610345200246210ustar00rootroot00000000000000# chain 0: length 3 score -10094083 54983 56483 59959 61459 4503 56485 56939 61461 61915 1365 56941 57835 61917 62811 2685 genometools-1.5.1/testdata/chaindata/chain-globalov000066400000000000000000004453411211610345200224140ustar00rootroot00000000000000# chain 0: length 4268 score 2993171 5851 6237 5868 6254 774 7627 7937 7644 7954 622 8079 8457 8096 8474 758 8687 8994 8704 9011 616 8996 9375 9013 9392 760 9377 9666 9394 9683 580 10024 10406 10041 10423 766 10408 10715 10425 10732 616 11439 11663 11456 11680 450 11695 11898 11712 11915 408 12026 12235 12043 12252 420 12384 12712 12401 12729 658 13131 13339 13148 13356 418 13719 14230 13736 14247 1024 14232 14645 14249 14662 828 15174 15389 15191 15406 432 17569 17786 16237 16454 436 18477 18763 17145 17431 574 19377 19794 18045 18462 836 20813 21272 25219 25678 920 21304 21615 25716 26027 624 22048 22265 26460 26677 436 23335 23639 27747 28051 610 25045 25447 29457 29859 806 26789 27024 31164 31399 472 27712 28067 32087 32442 712 28223 28446 32598 32821 448 29506 29843 33881 34218 676 30706 30913 35081 35288 416 31887 32116 36262 36491 460 33552 33766 37927 38141 430 34112 34597 38486 38971 972 35170 35491 39577 39898 644 35499 35831 39906 40238 666 36263 36479 40670 40886 434 37032 37439 41439 41846 816 37534 37775 41941 42182 484 37777 38103 42184 42510 654 38777 39003 43184 43410 454 40129 40508 44536 44915 760 41188 41408 45595 45815 442 43562 43773 47976 48187 424 44455 44660 48869 49074 412 45555 45805 49969 50219 502 45950 46173 50365 50588 448 46253 46632 50668 51047 760 46901 47137 51316 51552 474 47515 47785 51930 52200 542 49571 49940 53986 54355 740 51097 51551 56073 56527 910 51621 51901 56597 56877 562 51924 52135 56900 57111 424 53284 53627 58260 58603 688 53902 54335 58878 59311 868 54337 54981 59313 59957 1290 54983 56483 59959 61459 3002 56485 56939 61461 61915 910 56941 57835 61917 62811 1790 57928 58141 62904 63117 428 59485 59772 64418 64705 576 59831 60053 64764 64986 446 60245 60545 65178 65478 602 60547 60890 65480 65823 688 60943 61457 65876 66390 1030 61459 61700 66392 66633 484 62923 63424 67856 68357 1004 64749 65026 69681 69958 556 65826 66030 70758 70962 410 66970 67169 71817 72016 400 67312 67544 72159 72391 466 67596 67832 72443 72679 474 68693 68945 73540 73792 506 70473 71000 75320 75847 1056 71214 71540 76061 76387 654 74737 75132 79557 79952 792 75226 75461 80046 80281 472 76775 76988 82604 82817 428 81083 81302 85691 85910 440 82978 83294 87586 87902 634 83392 83799 88000 88407 816 84493 84737 89099 89343 490 84949 85210 89555 89816 524 85881 86098 90487 90704 436 87279 87522 91885 92128 488 87794 88118 92400 92724 650 88120 88349 92726 92955 460 89754 90328 94360 94934 1150 90591 90949 95197 95555 718 91187 91785 95793 96391 1198 92474 92682 97080 97288 418 93089 93369 97695 97975 562 94167 94384 98773 98990 436 94548 94791 99154 99397 488 95152 95370 99758 99976 438 95905 96359 100511 100965 910 97113 97513 101719 102119 802 98322 98775 102928 103381 908 98906 99228 103512 103834 646 99254 99649 103860 104255 792 99651 99869 104257 104475 438 100432 100691 105038 105297 520 101175 101494 105781 106100 640 101721 101923 106327 106529 406 102613 102831 107219 107437 438 102833 103359 107439 107965 1054 103604 103840 108210 108446 474 103842 104168 108448 108774 654 104548 104822 109154 109428 550 104857 105545 109463 110151 1378 106099 107460 110705 112066 2724 107686 107909 112292 112515 448 108007 108211 112613 112817 410 108293 108597 112899 113203 610 108848 109485 113454 114091 1276 109496 109707 114102 114313 424 109927 110184 114533 114790 516 110441 110658 115047 115264 436 110660 110901 115266 115507 484 110903 111227 115509 115833 650 111661 112144 116151 116634 968 112146 112457 116636 116947 624 112459 112834 116949 117324 752 112836 113047 117326 117537 424 113049 113268 117539 117758 440 113270 114090 117760 118580 1642 116535 116843 121025 121333 618 117226 117573 121716 122063 696 117842 118158 122332 122648 634 118514 119177 123004 123667 1328 119259 119491 123749 123981 466 119493 119812 123983 124302 640 120595 120848 125085 125338 508 121891 122239 126381 126729 698 122496 122797 126986 127287 604 122808 123161 127298 127651 708 123931 124169 128421 128659 478 124522 124796 129012 129286 550 125410 125818 129900 130308 818 127257 127734 131747 132224 956 127882 128266 132255 132639 770 128406 128650 132779 133023 490 128991 129196 133364 133569 412 130733 131096 135106 135469 728 131188 131489 135561 135862 604 131491 131699 135864 136072 418 133795 134045 138168 138418 502 134047 134547 138420 138920 1002 134594 134876 138967 139249 566 134968 135254 139341 139627 574 135256 135635 139629 140008 760 135663 136121 140036 140494 918 136240 136604 140613 140977 730 136870 137101 141243 141474 464 137556 137806 141929 142179 502 139126 139355 143499 143728 460 141040 141304 145413 145677 530 141343 141710 145716 146083 736 141797 142087 146170 146460 582 142452 142814 146825 147187 726 143270 143496 147643 147869 454 143498 143822 147871 148195 650 144256 144630 148629 149003 750 145072 145290 149445 149663 438 146145 146732 150518 151105 1176 157544 157954 161867 162277 822 158023 158489 162346 162812 934 158578 158792 162901 163115 430 159237 159483 163560 163806 494 160020 160261 164343 164584 484 160401 161512 164724 165835 2224 162678 162981 167001 167304 608 164644 164931 168967 169254 576 166100 166500 170423 170823 802 166502 166932 170825 171255 862 168428 168768 172751 173091 682 169064 169426 173387 173749 726 169759 169994 174082 174317 472 172286 172617 176609 176940 664 174673 175242 178873 179442 1140 175991 176292 180191 180492 604 176294 176862 180494 181062 1138 176876 177372 181076 181572 994 177648 177933 181848 182133 572 178131 178465 182331 182665 670 178479 178867 182679 183067 778 179070 179513 183270 183713 888 180127 180427 184327 184627 602 180820 181388 185020 185588 1138 181390 181646 185590 185846 514 181663 181940 185863 186140 556 182343 182661 186543 186861 638 183133 183406 187333 187606 548 183458 183671 187658 187871 428 183701 184121 187901 188321 842 185630 186048 189117 189535 838 188339 188709 191826 192196 742 188711 189124 192198 192611 828 189417 189686 192904 193173 540 189688 189955 193175 193442 536 189957 190705 193444 194192 1498 190707 191298 194194 194785 1184 191300 192509 194787 195996 2420 192775 193061 196120 196406 574 193063 194127 196408 197472 2130 194165 194669 197510 198014 1010 195040 197671 198385 201016 5264 197790 198378 201135 201723 1178 198380 198621 201725 201966 484 199262 199926 202607 203271 1330 199928 200418 203273 203763 982 200529 200809 203873 204153 562 200811 201187 204155 204531 754 201345 201607 204689 204951 526 201640 202500 204984 205844 1722 202808 203026 206152 206370 438 203135 203440 206479 206784 612 204771 204985 208115 208329 430 204987 205202 208331 208546 432 205269 205525 208613 208869 514 206068 206371 209412 209715 608 207123 207337 210467 210681 430 207939 208243 211283 211587 610 208245 208771 211589 212115 1054 208773 209122 212117 212466 700 209142 209380 212486 212724 478 209442 209817 212786 213161 752 211763 212003 215107 215347 482 212180 212451 215524 215795 544 212952 213198 216296 216542 494 213337 213554 216681 216898 436 213819 214384 217164 217729 1132 215380 215675 218713 219008 592 215949 216222 219282 219555 548 218188 218576 221520 221908 778 218578 218833 221910 222165 512 218828 219224 222159 222555 794 219732 220129 223063 223460 796 220515 220882 223846 224213 736 220884 221193 224215 224524 620 221550 221915 224881 225246 732 222448 222986 225779 226317 1078 222988 223316 226319 226647 658 223538 223739 226870 227071 404 223915 224888 227247 228220 1948 224890 225585 228222 228917 1392 225900 226112 229232 229444 426 226604 226927 229936 230259 648 226936 227481 230267 230812 1092 227623 227871 230954 231202 498 227969 228550 231300 231881 1164 228768 229025 232098 232355 516 229598 229840 232928 233170 486 229853 230143 233183 233473 582 232837 233051 236388 236602 430 233158 233399 236709 236950 484 233401 233636 236952 237187 472 233638 233959 237189 237510 644 233961 234277 237512 237828 634 234618 234856 238169 238407 478 235556 235890 239107 239441 670 236041 236334 239592 239885 588 237263 237536 240815 241088 548 237538 237738 241090 241290 402 240031 240397 278100 278466 734 241492 241701 279561 279770 420 241703 242018 279772 280087 632 245371 245714 283339 283682 688 245952 246203 283920 284171 504 250050 250279 287937 288166 460 251614 251828 289501 289715 430 252573 252783 290460 290670 422 253387 253681 291275 291569 590 254361 254617 292249 292505 514 255687 256313 293575 294201 1254 256486 256872 294374 294760 774 257033 257260 294921 295148 456 258635 258918 296523 296806 568 259430 259675 297318 297563 492 260217 260431 298105 298319 430 260706 260991 298594 298879 572 297132 297463 330317 330648 664 299169 299479 332354 332664 622 300524 300783 333709 333968 520 301750 302005 334935 335190 512 305109 305541 338294 338726 866 306139 306369 339324 339554 462 306382 306626 339567 339811 490 306907 307106 340092 340291 400 308316 308640 341501 341825 650 309476 309792 342661 342977 634 313588 313860 353941 354213 546 316129 316360 358934 359165 464 318125 318630 361618 362123 1012 318632 318938 362125 362431 614 319028 319326 362521 362819 598 319744 320032 363237 363525 578 321266 321471 364759 364964 412 321473 321699 364966 365192 454 322401 323072 365894 366565 1344 323968 324172 367461 367665 410 328133 328560 376575 377002 856 328661 329008 377103 377450 696 329022 329383 377464 377825 724 329619 330088 378061 378530 940 330090 330409 378532 378851 640 330540 330759 378982 379201 440 332518 332846 384784 385112 658 334160 334386 386435 386661 454 334409 334749 386684 387024 682 335190 335460 387465 387735 542 335793 336128 388068 388403 672 336547 336839 388822 389114 586 338028 338296 390303 390571 538 340819 341027 393187 393395 418 341549 341791 393917 394159 486 342414 343104 399888 400578 1382 343301 343735 400775 401209 870 343919 344120 401393 401594 404 344845 345122 402322 402599 556 345448 345667 402925 403144 440 351607 352098 408800 409291 984 352888 353166 410081 410359 558 354178 354443 411935 412200 532 355443 355817 413200 413574 750 355819 356099 413576 413856 562 358310 358593 415864 416147 568 361300 361532 418854 419086 466 362254 362582 419808 420136 658 362638 362871 420192 420425 468 367228 367430 426606 426808 406 368110 368314 427488 427692 410 368569 368964 427947 428342 792 369620 370014 428998 429392 790 370352 370704 429730 430082 706 370840 371258 430218 430636 838 374964 375281 433940 434257 636 375474 375856 434450 434832 766 378703 379047 437579 437923 690 385128 385475 446908 447255 696 385631 385848 447411 447628 436 386054 386300 447834 448080 494 388046 388254 449826 450034 418 392824 393267 453381 453824 888 393274 393475 453831 454032 404 393537 394358 454094 454915 1644 394579 394841 455136 455398 526 394843 395354 455400 455911 1024 396828 397102 457385 457659 550 397218 397459 457775 458016 484 397707 397942 458264 458499 472 398247 398697 458804 459254 902 398813 399102 459370 459659 580 399920 400442 460477 460999 1046 400542 401106 461099 461663 1130 401519 401862 462076 462419 688 402894 403806 463451 464363 1826 404119 404330 464676 464887 424 404764 405189 465321 465746 852 405269 405498 465826 466055 460 405500 406133 466057 466690 1268 406247 406472 466804 467029 452 408239 408627 471103 471491 778 409019 409683 471883 472547 1330 409685 409949 472549 472813 530 409951 410158 472815 473022 416 410779 411080 473541 473842 604 411169 411404 473931 474166 472 411927 412377 474689 475139 902 412584 412810 475343 475569 454 414347 414694 477106 477453 696 414876 415176 477635 477935 602 415178 416519 477937 479278 2684 416521 417497 479280 480256 1954 417578 417798 480337 480557 442 418074 418301 480833 481060 456 418498 419130 481257 481889 1266 419564 421545 482323 484304 3964 421585 421886 484344 484645 604 421918 422324 484677 485083 814 424420 424775 488828 489183 712 425323 425610 489730 490017 576 425918 426348 490325 490755 862 426350 427121 490757 491528 1544 427123 427330 491530 491737 416 427941 428188 492348 492595 496 428418 428807 492825 493214 780 429056 429386 493463 493793 662 429762 430016 494795 495049 510 430020 430256 495053 495289 474 430318 430569 495351 495602 504 430571 430945 495604 495978 750 430974 431460 496007 496493 974 431796 432032 496829 497065 474 432068 432415 497101 497448 696 432423 432739 497456 497772 634 433707 433976 498740 499009 540 434137 434777 499170 499810 1282 435013 435485 500046 500518 946 437781 438101 504612 504932 642 440107 440365 506938 507196 518 440367 440657 507198 507488 582 440659 440932 507490 507763 548 441081 441412 507912 508243 664 443866 444069 510697 510900 408 445270 445481 512101 512312 424 446240 446460 513071 513291 442 446699 446996 513530 513827 596 447154 447388 513985 514219 470 447558 447851 514389 514682 588 447853 448076 514684 514907 448 448714 449491 515545 516322 1556 449557 450019 516388 516850 926 450118 450394 516949 517225 554 450523 450872 517354 517703 700 451229 451856 518060 518687 1256 451981 452222 518812 519053 484 453065 453331 519896 520162 534 453527 454666 520358 521497 2280 454668 455257 521499 522088 1180 455277 455482 522108 522313 412 455484 455719 522315 522550 472 455714 455976 522544 522806 526 456098 456384 522928 523214 574 456386 456860 523216 523690 950 457429 457823 524259 524653 790 457825 458484 524655 525314 1320 459551 459759 526381 526589 418 460049 460278 526879 527108 460 460442 460891 527272 527721 900 460893 461307 527723 528137 830 461309 461526 528139 528356 436 462603 462994 529433 529824 784 463853 464078 530696 530921 452 467804 468197 534646 535039 788 468592 469367 535434 536209 1552 469369 469914 536211 536756 1092 469916 470310 536758 537152 790 471002 471234 537844 538076 466 471715 471981 538557 538823 534 471983 472235 538825 539077 506 472804 473033 539646 539875 460 473738 473940 540580 540782 406 474071 474282 540913 541124 424 474284 474519 541126 541361 472 475605 475824 542449 542668 440 476138 476384 542982 543228 494 476386 476706 543230 543550 642 476749 477036 543593 543880 576 477185 477438 544029 544282 508 477689 477900 544533 544744 424 478299 478541 545143 545385 486 478557 478830 545401 545674 548 478832 479540 545676 546384 1418 479542 479820 546386 546664 558 479873 480097 546717 546941 450 480156 480358 547000 547202 406 480500 480797 547344 547641 596 480799 481310 547643 548154 1024 481312 481595 548156 548439 568 482005 482228 548849 549072 448 482401 482648 549245 549492 496 483364 483867 550208 550711 1008 483869 484107 550713 550951 478 484109 485087 550953 551931 1958 485569 486007 552413 552851 878 486512 487233 553356 554077 1444 488357 488580 555201 555424 448 488648 489096 555492 555940 898 490156 490806 556830 557480 1302 491016 491281 557690 557955 532 491283 491685 557957 558359 806 491936 492348 558610 559022 826 492431 492726 559105 559400 592 493578 493812 560252 560486 470 494565 494791 561239 561465 454 495183 495536 561857 562210 708 495813 496141 562487 562815 658 496339 496774 563013 563448 872 497201 497557 563771 564127 714 497559 497843 564129 564413 570 497944 498191 564514 564761 496 498193 498515 564763 565085 646 498526 498795 565096 565365 540 499179 499394 565749 565964 432 500429 500704 566999 567274 552 500996 501197 567566 567767 404 501503 501749 568073 568319 494 501869 502227 568439 568797 718 502292 502522 568862 569092 462 502841 503244 569410 569813 808 503252 503472 569821 570041 442 504201 504498 570770 571067 596 505313 505596 571882 572165 568 505598 505808 572167 572377 422 505872 506092 572441 572661 442 506287 506526 572856 573095 480 507669 507870 574238 574439 404 510100 510503 576568 576971 808 510693 510970 577161 577438 556 511506 511720 577974 578188 430 511916 512268 578384 578736 706 514311 514561 608578 608828 502 514941 515380 609208 609647 880 515956 516293 610223 610560 676 516295 516506 610562 610773 424 516508 517120 610775 611387 1226 517360 517640 611627 611907 562 517972 518490 612239 612757 1038 518492 518760 612759 613027 538 519981 520225 614248 614492 490 520758 521002 615025 615269 490 527250 527840 620314 620904 1182 527909 528139 620973 621203 462 528272 528957 621335 622020 1372 528959 529358 622022 622421 800 529620 530191 622683 623254 1144 530358 530775 623421 623838 836 531308 531568 624371 624631 522 532001 532301 625064 625364 602 532459 532658 625522 625721 400 533211 533782 626274 626845 1144 535236 535474 628299 628537 478 536800 537097 629864 630161 596 538454 538722 631432 631700 538 539806 540008 632784 632986 406 540859 541151 633837 634129 586 543235 543483 636213 636461 498 545192 545481 638170 638459 580 545483 545707 638461 638685 450 545797 546303 638775 639281 1014 547235 547461 640213 640439 454 548227 548559 641206 641538 666 548973 549348 641952 642327 752 549401 549615 642380 642594 430 549988 550295 642967 643274 616 552171 552490 645094 645413 640 553403 554011 646326 646934 1218 554139 554735 647062 647658 1194 555699 555927 648622 648850 458 557166 557534 650089 650457 738 557536 557969 650459 650892 868 558658 558860 651581 651783 406 558862 559066 651785 651989 410 559243 559706 652166 652629 928 561117 561536 654046 654465 840 561996 562213 654926 655143 436 562215 562563 655145 655493 698 562841 563219 655771 656149 758 563221 563588 656151 656518 736 563747 564023 656677 656953 554 585334 585798 656962 657426 930 585880 586262 657508 657890 766 586264 586465 657892 658093 404 587112 587323 658740 658951 424 587364 587641 658992 659269 556 588166 588459 659794 660087 588 588646 588936 660274 660564 582 589344 589651 660972 661279 616 590019 590549 661647 662177 1062 592069 592361 663697 663989 586 594538 594752 677757 677971 430 595911 596125 679130 679344 430 597790 597997 680884 681091 416 599565 599857 682653 682945 586 600066 600290 683154 683378 450 600346 600550 683434 683638 410 601677 602172 684765 685260 992 602198 602427 685286 685515 460 602936 603201 686011 686276 532 603203 603533 686278 686608 662 603535 603864 686610 686939 660 604552 604841 687627 687916 580 604858 605299 687933 688374 884 605327 605564 688402 688639 476 605896 606137 688971 689212 484 606382 606623 689457 689698 484 608712 608917 690927 691132 412 609123 609484 691338 691699 724 611082 611317 693297 693532 472 611646 612108 693861 694323 926 612814 613040 695029 695255 454 617409 617630 699624 699845 444 617729 618063 699944 700278 670 621062 621823 703277 704038 1524 622374 622582 704589 704797 418 622798 623018 705013 705233 442 623967 624342 705996 706371 752 624455 624654 706484 706683 400 625067 625350 707096 707379 568 626744 627217 708773 709246 948 630745 630986 712774 713015 484 631312 631606 713340 713634 590 632574 632966 714602 714994 786 632979 633283 715007 715311 610 634659 634927 716687 716955 538 635077 635401 717105 717429 650 635427 635641 717455 717669 430 636170 636533 718198 718561 728 636536 636836 718564 718864 602 637362 637684 719391 719713 646 638120 638730 720149 720759 1222 638868 639189 720781 721102 644 639566 640314 721479 722227 1498 640316 640593 722229 722506 556 640892 641234 722805 723147 686 642033 642290 723946 724203 516 642891 643209 724804 725122 638 644297 644559 726210 726472 526 644561 644779 726474 726692 438 644973 645331 726886 727244 718 645498 645842 727411 727755 690 647520 647719 729433 729632 400 649072 649283 730985 731196 424 649579 649804 731492 731717 452 649806 650219 731719 732132 828 650628 650837 732541 732750 420 650876 651180 732789 733093 610 651311 651673 733225 733587 726 651675 652010 733589 733924 672 652417 653081 734331 734995 1330 653198 653517 735112 735431 640 653983 654464 735897 736378 964 654466 654803 736380 736717 676 654805 655172 736719 737086 736 655895 656260 737809 738174 732 656433 656770 738347 738684 676 656765 657001 738678 738914 474 657882 658118 739796 740032 474 658120 658708 740034 740622 1178 659170 659781 741084 741695 1224 660230 660504 742144 742418 550 660926 661239 742841 743154 628 661580 661967 743495 743882 776 662074 662309 743989 744224 472 662383 662585 744298 744500 406 662887 663221 744802 745136 670 664333 664703 746249 746619 742 664705 665241 746621 747157 1074 665243 665466 747159 747382 448 666505 666713 748421 748629 418 667222 667583 749138 749499 724 667591 668054 749507 749970 928 668158 668473 750074 750389 632 669211 669463 751127 751379 506 670619 670859 752535 752775 482 671335 671569 753251 753485 470 671571 671785 753487 753701 430 672021 672412 753937 754328 784 673391 673786 755307 755702 792 673815 674028 755731 755944 428 674051 675151 755968 757068 2202 677843 678132 759761 760050 580 678134 678600 760052 760518 934 678602 678830 760520 760748 458 678850 679052 760768 760970 406 681591 681847 763509 763765 514 682257 682767 764175 764685 1022 684323 684524 766241 766442 404 685476 685705 767394 767623 460 685740 686034 767658 767952 590 688616 688831 769335 769550 432 688851 689134 769570 769853 568 689217 689468 769936 770187 504 689820 690238 770539 770957 838 690471 690733 771190 771452 526 690801 691086 771520 771805 572 691088 691289 771807 772008 404 691978 692324 772697 773043 694 692326 692555 773045 773274 460 692817 693047 773536 773766 462 693822 694270 774541 774989 898 695606 695851 776325 776570 492 695874 696078 776594 776798 410 696270 696632 776991 777353 726 696634 696833 777355 777554 400 697180 697385 777901 778106 412 697522 697742 778243 778463 442 699406 699661 779987 780242 512 700002 700264 780583 780845 526 700584 700890 781165 781471 614 701579 702110 782160 782691 1064 702468 702698 783049 783279 462 702742 702979 783323 783560 476 703130 703371 783711 783952 484 705239 705550 785820 786131 624 706141 706441 786722 787022 602 706486 706753 787067 787334 536 706755 707162 787336 787743 816 707278 707506 787860 788088 458 708561 708778 789143 789360 436 709471 709878 790053 790460 816 710074 710450 790658 791034 754 710452 710910 791036 791494 918 711047 711367 791631 791951 642 711957 712391 792541 792975 870 712452 713063 793036 793647 1224 713548 713768 794132 794352 442 713980 714185 794564 794769 412 714202 714427 794786 795011 452 716622 716854 795515 795747 466 717030 717376 795923 796269 694 717986 718203 796879 797096 436 721034 721515 800021 800502 964 722999 723216 801986 802203 436 725606 725808 804593 804795 406 726092 726414 805079 805401 646 726416 726649 805403 805636 468 729222 729757 808208 808743 1072 730140 730413 809126 809399 548 730620 730936 809606 809922 634 732327 733625 811313 812611 2598 734890 735131 813877 814118 484 740097 740364 819174 819441 536 741528 741757 820605 820834 460 741759 741993 820836 821070 470 742280 743053 821357 822130 1548 743064 743281 822141 822358 436 743941 744174 823018 823251 468 745018 745258 824095 824335 482 746300 746514 825377 825591 430 752906 753108 831982 832184 406 753323 753555 832399 832631 466 753774 754160 832850 833236 774 754162 754523 833238 833599 724 754525 754894 833601 833970 740 754937 755175 834013 834251 478 755177 755538 834253 834614 724 756746 756993 835822 836069 496 757037 757458 836113 836534 844 757532 758196 836608 837272 1330 758228 758536 837304 837612 618 760172 760650 839248 839726 958 760828 761117 839904 840193 580 761269 761501 840345 840577 466 762269 762576 841164 841471 616 763591 763811 842486 842706 442 763954 764370 842849 843265 834 770806 771368 857743 858305 1126 771946 772340 858883 859277 790 773272 773491 860209 860428 440 773648 773855 860585 860792 416 773858 774113 860795 861050 512 774115 774466 861052 861403 704 774969 775208 861906 862145 480 775210 775688 862147 862625 958 776440 776847 863296 863703 816 776849 777074 863705 863930 452 777898 778946 864754 865802 2098 779241 779851 866097 866707 1222 781316 781551 867611 867846 472 781922 782160 868217 868455 478 783078 783319 869373 869614 484 783507 783757 869802 870052 502 784644 785021 870933 871310 756 786648 786870 872945 873167 446 787198 787441 873495 873738 488 788132 788397 874429 874694 532 790206 790422 876503 876719 434 790730 790968 877027 877265 478 792220 792631 878518 878929 824 792781 793021 879079 879319 482 793739 794339 880037 880637 1202 795078 795295 881376 881593 436 795297 795571 881595 881869 550 795678 795934 881976 882232 514 796493 796957 882791 883255 930 799265 799593 885563 885891 658 799810 800198 886108 886496 778 801521 801779 887820 888078 518 802234 802546 888533 888845 626 803451 803675 889750 889974 450 803889 804178 890188 890477 580 804780 805040 891079 891339 522 805498 805795 891704 892001 596 808412 808696 933207 933491 570 812635 812863 937431 937659 458 816179 816405 940974 941200 454 817052 817372 941847 942167 642 817661 818015 942456 942810 710 818373 818620 943168 943415 496 819202 819413 943996 944207 424 821380 821785 946177 946582 812 822333 822592 947130 947389 520 822609 823614 947406 948411 2012 823616 824135 948413 948932 1040 824137 824373 948934 949170 474 826458 826706 951255 951503 498 827275 827629 952072 952426 710 829168 829607 953965 954404 880 829949 830425 954746 955222 954 832197 832434 959067 959304 476 833381 833715 960251 960585 670 834305 834558 961175 961428 508 839012 839216 965895 966099 410 840524 840835 967407 967718 624 841097 841644 967980 968527 1096 842958 843381 969841 970264 848 845147 845349 971886 972088 406 845602 846029 972341 972768 856 846823 847308 973562 974047 972 847608 847920 974347 974659 626 848682 849037 975421 975776 712 849246 849751 975985 976490 1012 849867 850072 976606 976811 412 850999 851479 977738 978218 962 851481 851716 978220 978455 472 852048 852287 978787 979026 480 852947 853168 979686 979907 444 854794 855005 981532 981743 424 855107 855585 981846 982324 958 855680 855976 982419 982715 594 857016 857221 983682 983887 412 857661 858292 984327 984958 1264 858469 858722 985136 985389 508 858802 859015 985469 985682 428 860912 861142 987579 987809 462 861749 861983 988415 988649 470 862759 862982 989425 989648 448 865489 865766 992258 992535 556 865768 866004 992537 992773 474 866423 866794 993192 993563 744 867315 867529 994084 994298 430 867711 867937 994480 994706 454 868317 868769 995086 995538 906 868960 869172 995729 995941 426 869174 869379 995943 996148 412 869581 869898 996350 996667 636 870996 871383 997765 998152 776 873497 873732 1000266 1000501 472 873734 874035 1000503 1000804 604 874493 874786 1001262 1001555 588 874818 875095 1001587 1001864 556 876323 876735 1004046 1004458 826 877193 877408 1004916 1005131 432 877453 877976 1005176 1005699 1048 878102 878316 1005825 1006039 430 878360 878829 1006083 1006552 940 878948 879177 1006671 1006900 460 879179 879387 1006902 1007110 418 879419 879669 1007142 1007392 502 879671 879890 1007394 1007613 440 880033 880370 1007755 1008092 676 880495 880731 1008217 1008453 474 881337 881536 1009059 1009258 400 881772 882057 1009494 1009779 572 882059 882304 1009781 1010026 492 882494 882787 1010216 1010509 588 882789 883106 1010511 1010828 636 884251 884485 1011973 1012207 470 885244 885697 1012966 1013419 908 886891 887165 1014613 1014887 550 887198 887424 1014920 1015146 454 887729 888012 1015451 1015734 568 888014 888372 1015736 1016094 718 888374 888603 1016096 1016325 460 888605 889068 1016327 1016790 928 889734 889950 1017457 1017673 434 890478 890689 1018201 1018412 424 891140 891620 1018863 1019343 962 891622 891884 1019345 1019607 526 892279 892609 1020002 1020332 662 895107 895421 1022830 1023144 630 895956 896269 1023679 1023992 628 896468 896727 1024191 1024450 520 897283 897497 1025006 1025220 430 897520 897791 1025243 1025514 544 901363 901604 1032396 1032637 484 902056 902308 1033089 1033341 506 902490 902737 1033523 1033770 496 902739 903182 1033772 1034215 888 904186 904401 1037735 1037950 432 906687 906905 1040236 1040454 438 910222 910490 1043771 1044039 538 912033 912304 1045582 1045853 544 912852 913185 1046401 1046734 668 913841 914066 1047390 1047615 452 914986 915276 1048498 1048788 582 915473 915822 1048985 1049334 700 916829 917061 1050341 1050573 466 917267 917535 1050779 1051047 538 917540 917745 1051052 1051257 412 917978 918269 1051490 1051781 584 918885 919119 1052397 1052631 470 919198 919517 1052710 1053029 640 919680 919897 1053192 1053409 436 920748 920974 1054260 1054486 454 921171 921406 1054683 1054918 472 921408 921951 1054920 1055463 1088 921953 923120 1055465 1056632 2336 923158 923387 1056670 1056899 460 923950 924230 1057462 1057742 562 925370 926038 1146447 1147115 1338 926040 926242 1147117 1147319 406 926275 927044 1147352 1148121 1540 927564 927936 1148641 1149013 746 928215 928771 1149292 1149848 1114 929811 930058 1150888 1151135 496 930060 930372 1151137 1151449 626 930878 931200 1151955 1152277 646 931202 931652 1152279 1152729 902 931654 932145 1152731 1153222 984 932147 932461 1153224 1153538 630 932463 932760 1153540 1153837 596 932762 933125 1153839 1154202 728 933127 933504 1154204 1154581 756 933506 933899 1154583 1154976 788 934265 934466 1155342 1155543 404 934900 935127 1156016 1156243 456 935833 936177 1156949 1157293 690 936449 937304 1157561 1158416 1712 937477 937691 1158589 1158803 430 937915 939255 1159027 1160367 2682 939544 939872 1160656 1160984 658 940110 940343 1161222 1161455 468 940345 940662 1161457 1161774 636 940818 941235 1161930 1162347 836 941576 941796 1162688 1162908 442 941798 942102 1162910 1163214 610 942182 942703 1163294 1163815 1044 942837 943313 1163949 1164425 954 944568 944819 1165681 1165932 504 947729 947977 1168843 1169091 498 949842 950418 1169485 1170061 1154 950612 950835 1170255 1170478 448 950843 951066 1170486 1170709 448 951068 951282 1170711 1170925 430 951527 951807 1171170 1171450 562 951809 952170 1171452 1171813 724 952556 952839 1172199 1172482 568 953456 954057 1173099 1173700 1204 954464 954780 1174107 1174423 634 954788 955050 1174431 1174693 526 955595 955818 1175238 1175461 448 955820 956426 1175463 1176069 1214 956495 956920 1176138 1176563 852 956922 957317 1176565 1176960 792 957533 957833 1177176 1177476 602 957895 958245 1177538 1177888 702 958403 958989 1178046 1178632 1174 959615 959829 1179258 1179472 430 960300 960526 1179943 1180169 454 960846 961677 1180489 1181320 1664 961679 962145 1181322 1181788 934 962147 962362 1181790 1182005 432 962364 962754 1182007 1182397 782 962919 963340 1182562 1182983 844 965709 965910 1185351 1185552 404 966533 966747 1186175 1186389 430 967358 967892 1187000 1187534 1070 967894 968156 1187536 1187798 526 969047 969265 1188689 1188907 438 969408 969720 1189050 1189362 626 970335 970540 1189977 1190182 412 970794 971099 1190436 1190741 612 971310 971536 1190952 1191178 454 971538 971891 1191180 1191533 708 972562 972883 1192204 1192525 644 972954 973162 1192596 1192804 418 973976 974202 1193618 1193844 454 974738 974941 1194380 1194583 408 975378 975600 1195020 1195242 446 975602 975903 1195244 1195545 604 977765 977979 1197407 1197621 430 978464 978717 1198106 1198359 508 979620 979833 1199262 1199475 428 979981 980296 1199623 1199938 632 980460 980813 1200102 1200455 708 981037 981299 1200679 1200941 526 981721 982168 1201363 1201810 896 982352 982589 1201994 1202231 476 983103 983419 1202745 1203061 634 983832 984346 1203303 1203817 1030 984627 985057 1204098 1204528 862 985059 985398 1204530 1204869 680 985636 986069 1205107 1205540 868 987711 987927 1207182 1207398 434 987929 988141 1207400 1207612 426 988170 988513 1207641 1207984 688 988675 988984 1208146 1208455 620 989214 989491 1208685 1208962 556 989493 989995 1208964 1209466 1006 990318 990643 1209789 1210114 652 993345 993771 1212816 1213242 854 996936 997312 1216408 1216784 754 999032 999400 1218503 1218871 738 999491 999719 1218962 1219190 458 1002117 1002693 1221589 1222165 1154 1002826 1003134 1222298 1222606 618 1003382 1003613 1222854 1223085 464 1003817 1004072 1223288 1223543 512 1004749 1005070 1224220 1224541 644 1005285 1005529 1224756 1225000 490 1005582 1005955 1225053 1225426 748 1006031 1006261 1225502 1225732 462 1006952 1007367 1226423 1226838 832 1007987 1008250 1227458 1227721 528 1008824 1009376 1228295 1228847 1106 1009477 1009703 1228948 1229174 454 1011376 1011728 1230847 1231199 706 1012105 1012725 1231576 1232196 1242 1013177 1013397 1232648 1232868 442 1013621 1013877 1233092 1233348 514 1013960 1014248 1233431 1233719 578 1014406 1014739 1233877 1234210 668 1014741 1016713 1234212 1236184 3946 1016737 1017056 1236208 1236527 640 1017058 1017762 1236529 1237233 1410 1017764 1018240 1237235 1237711 954 1018242 1018915 1237713 1238386 1348 1018917 1019555 1238388 1239026 1278 1019679 1020273 1239150 1239744 1190 1020275 1020545 1239746 1240016 542 1020547 1021341 1240018 1240812 1590 1021343 1021732 1240814 1241203 780 1021734 1022021 1241205 1241492 576 1022023 1022522 1241494 1241993 1000 1022524 1023481 1241995 1242952 1916 1023483 1023904 1242954 1243375 844 1024077 1024471 1243548 1243942 790 1024473 1024744 1243944 1244215 544 1024767 1025083 1244238 1244554 634 1025085 1025507 1244556 1244978 846 1025655 1025859 1245126 1245330 410 1025861 1026359 1245332 1245830 998 1026361 1027147 1245832 1246618 1574 1027783 1028072 1247254 1247543 580 1028797 1029104 1248268 1248575 616 1029106 1029377 1248577 1248848 544 1029451 1029767 1248922 1249238 634 1031117 1031346 1295831 1296060 460 1031348 1031584 1296062 1296298 474 1031592 1031839 1296306 1296553 496 1033953 1034196 1298667 1298910 488 1036286 1036497 1301000 1301211 424 1036499 1036788 1301213 1301502 580 1038009 1038612 1302723 1303326 1208 1039130 1039329 1303844 1304043 400 1040143 1040443 1304863 1305163 602 1041571 1041830 1306296 1306555 520 1042342 1042577 1307067 1307302 472 1043203 1043499 1307928 1308224 594 1043609 1043960 1308334 1308685 704 1043989 1044293 1308714 1309018 610 1044784 1045214 1309509 1309939 862 1045810 1046177 1310535 1310902 736 1046494 1046894 1311219 1311619 802 1047786 1048035 1312511 1312760 500 1048403 1048626 1313128 1313351 448 1050249 1050533 1314197 1314481 570 1050535 1050855 1314483 1314803 642 1051613 1051825 1315560 1315772 426 1053310 1053513 1317257 1317460 408 1055016 1055277 1318963 1319224 524 1055614 1055820 1319561 1319767 414 1056041 1056336 1319988 1320283 592 1062010 1062268 1325959 1326217 518 1062270 1062472 1326219 1326421 406 1062766 1063132 1326715 1327081 734 1065120 1065522 1329067 1329469 806 1066521 1066728 1330468 1330675 416 1068256 1068461 1393625 1393830 412 1070073 1070289 1395442 1395658 434 1073596 1073868 1398965 1399237 546 1075019 1075230 1400388 1400599 424 1078198 1078642 1403567 1404011 890 1080889 1081661 1408390 1409162 1546 1081663 1081907 1409164 1409408 490 1083213 1083564 1410714 1411065 704 1084147 1084615 1411647 1412115 938 1084617 1085220 1412117 1412720 1208 1085337 1086089 1412837 1413589 1506 1086091 1086892 1413591 1414392 1604 1086894 1088334 1414394 1415834 2882 1088336 1088973 1415836 1416473 1276 1088975 1089198 1416475 1416698 448 1089200 1090692 1416700 1418192 2986 1090694 1091324 1418194 1418824 1262 1091338 1091738 1418838 1419238 802 1091740 1092322 1419240 1419822 1166 1092582 1092822 1420082 1420322 482 1093020 1093334 1420520 1420834 630 1094725 1094939 1452708 1452922 430 1095905 1096124 1453888 1454107 440 1097354 1097647 1542356 1542649 588 1098625 1098917 1543627 1543919 586 1099210 1099412 1544212 1544414 406 1099457 1099684 1544459 1544686 456 1100764 1101034 1545766 1546036 542 1101045 1101339 1546047 1546341 590 1101674 1101989 1546676 1546991 632 1102092 1102363 1547094 1547365 544 1102365 1102618 1547367 1547620 508 1103104 1103471 1548106 1548473 736 1103473 1103754 1548475 1548756 564 1104258 1104697 1549263 1549702 880 1104825 1105118 1549830 1550123 588 1105264 1105635 1550269 1550640 744 1107124 1107413 1552129 1552418 580 1108271 1108657 1553275 1553661 774 1108681 1108924 1553685 1553928 488 1109346 1109632 1554350 1554636 574 1109634 1109956 1554638 1554960 646 1110421 1110740 1555425 1555744 640 1113150 1113674 1558154 1558678 1050 1114033 1114253 1559037 1559257 442 1114604 1115018 1559608 1560022 830 1115539 1116064 1560543 1561068 1052 1117589 1117965 1562593 1562969 754 1118292 1118588 1563296 1563592 594 1118709 1118950 1563713 1563954 484 1119159 1119388 1564163 1564392 460 1119723 1119947 1564727 1564951 450 1119949 1120261 1564953 1565265 626 1120588 1120794 1565595 1565801 414 1122359 1122620 1567366 1567627 524 1122622 1123084 1567629 1568091 926 1123086 1123315 1568093 1568322 460 1123562 1123837 1568569 1568844 552 1124397 1124875 1569404 1569882 958 1124877 1125079 1569884 1570086 406 1125081 1125401 1570088 1570408 642 1126416 1126638 1571423 1571645 446 1126972 1127504 1571979 1572511 1066 1130129 1130410 1575136 1575417 564 1130432 1130769 1575439 1575776 676 1130915 1131189 1575922 1576196 550 1131307 1131584 1576314 1576591 556 1131710 1132007 1576717 1577014 596 1132639 1132844 1577643 1577848 412 1133931 1134198 1578901 1579168 536 1134305 1134543 1579275 1579513 478 1134765 1135042 1579735 1580012 556 1135209 1135533 1580179 1580503 650 1135535 1135746 1580505 1580716 424 1138152 1138351 1583122 1583321 400 1141656 1141899 1586625 1586868 488 1141974 1142422 1586943 1587391 898 1142424 1142719 1587393 1587688 592 1142772 1144076 1587741 1589045 2610 1144231 1144610 1589200 1589579 760 1145893 1146095 1590851 1591053 406 1146097 1146768 1591055 1591726 1344 1147425 1147659 1592383 1592617 470 1147661 1148426 1592619 1593384 1532 1148428 1148768 1593386 1593726 682 1148860 1149134 1593818 1594092 550 1149679 1149887 1594637 1594845 418 1150045 1150495 1595003 1595453 902 1150497 1150934 1595455 1595892 876 1150936 1151627 1595894 1596585 1384 1151758 1152008 1596716 1596966 502 1152010 1152308 1596968 1597266 598 1154189 1154470 1599147 1599428 564 1154963 1155234 1599921 1600192 544 1155446 1155681 1600404 1600639 472 1155893 1156144 1600851 1601102 504 1156829 1157332 1601788 1602291 1008 1157334 1158035 1602293 1602994 1404 1158102 1158403 1603061 1603362 604 1158405 1158624 1603364 1603583 440 1158834 1159823 1603793 1604782 1980 1160058 1160311 1605017 1605270 508 1160313 1160669 1605272 1605628 714 1161060 1161369 1606039 1606348 620 1161617 1162284 1606596 1607263 1336 1162328 1162545 1607307 1607524 436 1162766 1163050 1607745 1608029 570 1163052 1163417 1608031 1608396 732 1164290 1164504 1609269 1609483 430 1165119 1165326 1610099 1610306 416 1166429 1166655 1611409 1611635 454 1167097 1167326 1612094 1612323 460 1167728 1168624 1612725 1613621 1794 1168633 1168993 1613631 1613991 722 1169409 1169754 1614407 1614752 692 1170137 1170390 1615135 1615388 508 1170542 1170789 1615540 1615787 496 1170869 1171139 1615867 1616137 542 1171339 1171569 1616337 1616567 462 1174014 1174222 1619012 1619220 418 1174295 1174890 1619293 1619888 1192 1177067 1177338 1622065 1622336 544 1177649 1177945 1622647 1622943 594 1178544 1179094 1623542 1624092 1102 1181855 1182215 1625567 1625927 722 1182373 1182719 1626085 1626431 694 1183589 1184030 1674604 1675045 884 1184592 1185541 1675607 1676556 1900 1186128 1186504 1677143 1677519 754 1187317 1187531 1678332 1678546 430 1188196 1188482 1694671 1694957 574 1188520 1189014 1694995 1695489 990 1190190 1190410 1696665 1696885 442 1190490 1190704 1696965 1697179 430 1191000 1191427 1697475 1697902 856 1191581 1191893 1698056 1698368 626 1192367 1192596 1698842 1699071 460 1192607 1193105 1699082 1699580 998 1194097 1194607 1700572 1701082 1022 1223501 1223728 1753170 1753397 456 1223730 1224097 1753399 1753766 736 1224276 1224584 1753945 1754253 618 1224724 1224971 1754393 1754640 496 1225028 1225507 1754697 1755176 960 1225637 1225893 1755306 1755562 514 1226447 1226673 1756116 1756342 454 1226859 1227359 1756528 1757028 1002 1227866 1228311 1757535 1757980 892 1229087 1229304 1758756 1758973 436 1230079 1230469 1759748 1760138 782 1230471 1230676 1760140 1760345 412 1232248 1232471 1761917 1762140 448 1232606 1232814 1762275 1762483 418 1232921 1233214 1762590 1762883 588 1233216 1233441 1762885 1763110 452 1233845 1234076 1763514 1763745 464 1234072 1234389 1763742 1764059 636 1234682 1234894 1764352 1764564 426 1235295 1235605 1764965 1765275 622 1235979 1236510 1765649 1766180 1064 1236747 1237304 1766450 1767007 1116 1237399 1237736 1767102 1767439 676 1237918 1238175 1767621 1767878 516 1239867 1240102 1769576 1769811 472 1242327 1242682 1772037 1772392 712 1243274 1243615 1774297 1774638 684 1243647 1243904 1774670 1774927 516 1244959 1245314 1782097 1782452 712 1247120 1247325 1784245 1784450 412 1248014 1248231 1785139 1785356 436 1249651 1250407 1786776 1787532 1514 1253751 1253992 1787740 1787981 484 1254762 1254976 1788751 1788965 430 1255802 1256209 1789866 1790273 816 1256241 1256512 1790305 1790576 544 1256522 1256851 1790586 1790915 660 1257015 1257237 1791079 1791301 446 1257611 1257936 1791675 1792000 652 1257938 1258387 1792002 1792451 900 1258476 1258767 1792540 1792831 584 1259433 1259722 1793497 1793786 580 1259787 1260338 1793851 1794402 1104 1260493 1260912 1794557 1794976 840 1261084 1261616 1795148 1795680 1066 1261948 1262344 1796012 1796408 794 1262346 1262775 1796410 1796839 860 1263548 1264381 1797612 1798445 1668 1264383 1264604 1798447 1798668 444 1264789 1265051 1798853 1799115 526 1265092 1265699 1799156 1799763 1216 1265755 1266058 1799819 1800122 608 1266060 1266295 1800124 1800359 472 1266477 1266715 1800541 1800779 478 1266773 1267176 1800837 1801240 808 1267516 1267889 1801580 1801953 748 1268797 1269100 1802861 1803164 608 1269947 1270177 1804001 1804231 462 1270815 1271177 1804869 1805231 726 1271365 1271578 1805419 1805632 428 1272700 1272973 1806757 1807030 548 1274609 1274904 1808667 1808962 592 1274906 1275166 1808964 1809224 522 1275375 1275709 1809433 1809767 670 1275986 1276261 1810044 1810319 552 1276656 1276982 1810714 1811040 654 1277047 1277361 1811105 1811419 630 1278013 1278290 1812071 1812348 556 1278921 1279555 1812856 1813490 1270 1280043 1280875 1813978 1814810 1666 1281324 1281649 1815259 1815584 652 1281822 1282332 1815757 1816267 1022 1282500 1282720 1816435 1816655 442 1283051 1283499 1816986 1817434 898 1284041 1284605 1817976 1818540 1130 1285008 1285243 1818943 1819178 472 1286759 1287018 1820516 1820775 520 1287649 1287858 1821406 1821615 420 1288191 1288609 1821948 1822366 838 1289330 1289537 1823087 1823294 416 1289539 1289987 1823296 1823744 898 1290220 1290510 1823977 1824267 582 1290604 1290974 1824361 1824731 742 1291441 1291694 1825198 1825451 508 1291924 1292318 1825681 1826075 790 1292658 1292978 1826414 1826734 642 1292980 1293260 1826736 1827016 562 1295001 1295224 1827756 1827979 448 1295226 1295459 1827981 1828214 468 1295566 1296074 1828321 1828829 1018 1296256 1296491 1829011 1829246 472 1296988 1297431 1829743 1830186 888 1297629 1297831 1830384 1830586 406 1298187 1298500 1830942 1831255 628 1299091 1299323 1831847 1832079 466 1300304 1300574 1833060 1833330 542 1300836 1301049 1833592 1833805 428 1301774 1301978 1834530 1834734 410 1304012 1304214 1836768 1836970 406 1304216 1304712 1836972 1837468 994 1306115 1306392 1838871 1839148 556 1306394 1306767 1839150 1839523 748 1307080 1307422 1839837 1840179 686 1307526 1307920 1840283 1840677 790 1308592 1308957 1841350 1841715 732 1309002 1309261 1841761 1842020 520 1309694 1309933 1842453 1842692 480 1309959 1310355 1842718 1843114 794 1310357 1310661 1843116 1843420 610 1310861 1311158 1843620 1843917 596 1311220 1311819 1843979 1844578 1200 1311945 1312215 1844704 1844974 542 1654122 1654379 2273590 2273847 516 1654543 1654844 2274011 2274312 604 1655023 1655285 2274491 2274753 526 1656596 1656807 2276064 2276275 424 1656920 1657151 2276388 2276619 464 1657520 1657818 2276988 2277286 598 1658870 1659291 2278338 2278759 844 1659463 1659737 2278931 2279205 550 1659803 1660033 2279271 2279501 462 1660035 1660281 2279503 2279749 494 1660433 1660653 2279901 2280121 442 1661139 1661651 2280607 2281119 1026 1662613 1662816 2282081 2282284 408 1663623 1663962 2283090 2283429 680 1663964 1664212 2283431 2283679 498 1664890 1665423 2284357 2284890 1068 1666224 1666464 2285691 2285931 482 1666466 1666766 2285933 2286233 602 1666768 1667146 2286235 2286613 758 1667359 1667674 2286826 2287141 632 1668458 1668758 2287925 2288225 602 1668760 1669020 2288227 2288487 522 1669621 1669831 2289088 2289298 422 1670319 1670539 2289786 2290006 442 1670541 1671010 2290008 2290477 940 1672979 1673255 2292446 2292722 554 1674007 1674215 2293474 2293682 418 1674316 1674594 2293783 2294061 558 1674995 1675266 2294462 2294733 544 1675268 1675475 2294735 2294942 416 1675523 1675836 2294990 2295303 628 1675988 1676495 2295455 2295962 1016 1676681 1677165 2296148 2296632 970 1677410 1678123 2296877 2297590 1428 1678591 1678853 2298058 2298320 526 1678873 1679604 2298340 2299071 1464 1679606 1680258 2299073 2299725 1306 1681229 1681488 2300696 2300955 520 1681529 1681825 2300996 2301292 594 1681904 1682202 2301371 2301669 598 1682552 1682772 2302020 2302240 442 1683086 1683345 2302554 2302813 520 1683347 1684023 2302815 2303491 1354 1684690 1684966 2304158 2304434 554 1685041 1685446 2304509 2304914 812 1685588 1686309 2305056 2305777 1444 1686565 1686909 2306033 2306377 690 1686911 1687212 2306379 2306680 604 1687553 1687752 2307021 2307220 400 1687757 1688014 2307225 2307482 516 1688577 1688776 2308045 2308244 400 1689575 1689781 2308862 2309068 414 1690810 1691083 2310096 2310369 548 1691787 1691987 2311073 2311273 402 1691989 1692234 2311275 2311520 492 1692392 1692684 2311678 2311970 586 1693703 1693903 2312991 2313191 402 1694957 1695173 2314245 2314461 434 1695543 1696130 2314839 2315426 1176 1696602 1696807 2315898 2316103 412 1697022 1697225 2316318 2316521 408 1697227 1697499 2316523 2316795 546 1698776 1699026 2318072 2318322 502 1700150 1700479 2319446 2319775 660 1701538 1701767 2320836 2321065 460 1702836 1703180 2322135 2322479 690 1703690 1703890 2322989 2323189 402 1703892 1704092 2323191 2323391 402 1704678 1705054 2323977 2324353 754 1705074 1705300 2324373 2324599 454 1706333 1706594 2325632 2325893 524 1707144 1707376 2326443 2326675 466 1707660 1707933 2326959 2327232 548 1707935 1708357 2327234 2327656 846 1708359 1708684 2327658 2327983 652 1708950 1709206 2328249 2328505 514 1709208 1709492 2328507 2328791 570 1710050 1710352 2329349 2329651 606 1710738 1711294 2330037 2330593 1114 1711302 1711714 2330601 2331013 826 1712016 1712422 2331315 2331721 814 1713608 1714003 2332907 2333302 792 1714161 1714558 2333460 2333857 796 1714647 1714930 2333946 2334229 568 1714932 1715271 2334231 2334570 680 1715774 1716050 2335074 2335350 554 1716622 1716821 2335922 2336121 400 1717659 1717866 2336958 2337165 416 1718229 1718448 2337529 2337748 440 1718507 1718990 2337807 2338290 968 1719135 1719543 2338435 2338843 818 1719809 1720020 2339109 2339320 424 1720375 1720610 2339675 2339910 472 1720675 1720958 2339975 2340258 568 1722052 1722498 2341352 2341798 894 1722659 1722867 2341959 2342167 418 1723992 1724230 2343292 2343530 478 1725414 1725724 2344714 2345024 622 1725897 1726101 2345197 2345401 410 1726742 1726941 2346042 2346241 400 1729774 1730007 2349074 2349307 468 1730296 1730513 2349596 2349813 436 1730624 1730872 2349924 2350172 498 1731031 1731245 2350331 2350545 430 1731451 1731651 2350751 2350951 402 1731943 1732266 2351243 2351566 648 1732443 1732738 2351744 2352039 592 1733244 1733468 2352545 2352769 450 1733494 1733726 2352795 2353027 466 1734492 1735508 2353777 2354793 2034 1735510 1735985 2354795 2355270 952 1736821 1737200 2356106 2356485 760 1737301 1737638 2356586 2356923 676 1737679 1738130 2356964 2357415 904 1738573 1738859 2357858 2358144 574 1739051 1739291 2358336 2358576 482 1739293 1739737 2358578 2359022 890 1739937 1740185 2359222 2359470 498 1742227 1742471 2361514 2361758 490 1743603 1743817 2362890 2363104 430 1744113 1744317 2363400 2363604 410 1744319 1744621 2363606 2363908 606 1745169 1745385 2364456 2364672 434 1746131 1746385 2365418 2365672 510 1746573 1746895 2365860 2366182 646 1747337 1747568 2366624 2366855 464 1748232 1748460 2367519 2367747 458 1748853 1749207 2368140 2368494 710 1749248 1749452 2368535 2368739 410 1749626 1749828 2368913 2369115 406 1750229 1750511 2369516 2369798 566 1750757 1750965 2370044 2370252 418 1751171 1751397 2370458 2370684 454 1751450 1751849 2370737 2371136 800 1752037 1752332 2371324 2371619 592 1752334 1752630 2371621 2371917 594 1752938 1753287 2372226 2372575 700 1753361 1754001 2372649 2373289 1282 1754288 1754853 2373576 2374141 1132 1754978 1755727 2374266 2375015 1500 1757894 1758099 2377181 2377386 412 1758817 1759018 2378104 2378305 404 1759643 1760001 2378930 2379288 718 1760024 1760307 2379311 2379594 568 1760888 1761168 2380175 2380455 562 1761426 1761639 2380713 2380926 428 1761758 1762277 2381045 2381564 1040 1763063 1763299 2382351 2382587 474 1763817 1764167 2383105 2383455 702 1764169 1764674 2383457 2383962 1012 1764787 1765292 2384075 2384580 1012 1766897 1767545 2386185 2386833 1298 1768193 1768741 2387481 2388029 1098 1769209 1770005 2388497 2389293 1594 1770027 1771061 2389315 2390349 2070 1776510 1776832 2395800 2396122 646 1777391 1777779 2396686 2397074 778 1778340 1778576 2397635 2397871 474 1779198 1779491 2398493 2398786 588 1779895 1780141 2399190 2399436 494 1780820 1781052 2400115 2400347 466 1781990 1782237 2401285 2401532 496 1782239 1782454 2401534 2401749 432 1783349 1783605 2402644 2402900 514 1784312 1784529 2403607 2403824 436 1784531 1785024 2403826 2404319 988 1785293 1785664 2404588 2404959 744 1785987 1786594 2405282 2405889 1216 1786596 1786808 2405891 2406103 426 1786974 1787396 2406269 2406691 846 1787564 1788076 2406859 2407371 1026 1789601 1789856 2408896 2409151 512 1789985 1790241 2409280 2409536 514 1790516 1790720 2409811 2410015 410 1790722 1790924 2410017 2410219 406 1790932 1791157 2410227 2410452 452 1791358 1791557 2410653 2410852 400 1792805 1793042 2412100 2412337 476 1793280 1793651 2412576 2412947 744 1793653 1794317 2412949 2413613 1330 1794961 1795189 2414257 2414485 458 1795191 1795402 2414487 2414698 424 1795903 1796127 2415199 2415423 450 1796193 1796481 2415489 2415777 578 1796483 1796797 2415779 2416093 630 1797149 1797739 2416444 2417034 1182 1797741 1798777 2417036 2418072 2074 1799635 1799909 2418930 2419204 550 1799911 1800548 2419206 2419843 1276 1800565 1800878 2419860 2420173 628 1803089 1803365 2422385 2422661 554 1803598 1803884 2422894 2423180 574 1804006 1804223 2423302 2423519 436 1804225 1804865 2423521 2424161 1282 1805161 1805519 2424457 2424815 718 1805573 1805940 2424869 2425236 736 1805942 1806186 2425238 2425482 490 1807310 1807896 2426606 2427192 1174 1808117 1808409 2427413 2427705 586 1808848 1809156 2428144 2428452 618 1809717 1809924 2429013 2429220 416 1810721 1811386 2430016 2430681 1332 1811496 1811808 2430791 2431103 626 1812044 1812254 2431339 2431549 422 1813444 1813751 2432739 2433046 616 1815933 1816168 2435026 2435261 472 1816170 1816385 2435263 2435478 432 1816567 1816846 2435661 2435940 560 1816883 1817128 2435977 2436222 492 1817130 1817717 2436224 2436811 1176 1818438 1818817 2437532 2437911 760 1819078 1819806 2438172 2438900 1458 1820086 1820289 2439181 2439384 408 1820347 1820650 2439442 2439745 608 1821080 1821318 2440175 2440413 478 1821799 1822009 2440894 2441104 422 1822925 1823352 2442020 2442447 856 1823455 1823845 2442550 2442940 782 1825441 1825682 2444536 2444777 484 1828148 1828460 2447243 2447555 626 1830179 1830396 2449274 2449491 436 1831039 1831362 2450134 2450457 648 1833600 1833973 2452695 2453068 748 1835176 1835437 2454271 2454532 524 1837316 1837627 2456411 2456722 624 1839377 1839643 2458472 2458738 534 1840093 1840608 2459188 2459703 1032 1840832 1841088 2459927 2460183 514 1841369 1841757 2460464 2460852 778 1842024 1842384 2461119 2461479 722 1842790 1843015 2461885 2462110 452 1844112 1844407 2463207 2463502 592 1844713 1844993 2463808 2464088 562 1845727 1845938 2464822 2465033 424 1845940 1846159 2465035 2465254 440 1847856 1848154 2466951 2467249 598 1848836 1849199 2468722 2469085 728 1849495 1849718 2469381 2469604 448 1850211 1850541 2470097 2470427 662 1850732 1850934 2470618 2470820 406 1850993 1851408 2470879 2471294 832 1852529 1853020 2473729 2474220 984 1853028 1853379 2474228 2474579 704 1853852 1854132 2475052 2475332 562 1854784 1855075 2475969 2476260 584 1856078 1856343 2477263 2477528 532 1856413 1856625 2477598 2477810 426 1856711 1857112 2477896 2478297 804 1857558 1858246 2478743 2479431 1378 1858248 1858551 2479433 2479736 608 1858553 1858836 2479738 2480021 568 1860370 1861509 2481555 2482694 2280 1861511 1861782 2482696 2482967 544 1863334 1863610 2484522 2484798 554 1863926 1864222 2485114 2485410 594 1864224 1864732 2485412 2485920 1018 1864734 1865340 2485922 2486528 1214 1865342 1865574 2486530 2486762 466 1866380 1866624 2487568 2487812 490 1866680 1866887 2487868 2488075 416 1867227 1867483 2488415 2488671 514 1867593 1867912 2488781 2489100 640 1868545 1868988 2489733 2490176 888 1869317 1869768 2490505 2490956 904 1869885 1870338 2491073 2491526 908 1870392 1870609 2491580 2491797 436 1870868 1871067 2492056 2492255 400 1871297 1871667 2492485 2492855 742 1871669 1872012 2492857 2493200 688 1872212 1872466 2493400 2493654 510 1873361 1873609 2494549 2494797 498 1874584 1874784 2495772 2495972 402 1875329 1875572 2496517 2496760 488 1876026 1876318 2497214 2497506 586 1877472 1877905 2498659 2499092 868 1878716 1879194 2499903 2500381 958 1879555 1880176 2500742 2501363 1244 1880178 1880422 2501365 2501609 490 1882198 1882517 2503610 2503929 640 1882790 1883016 2504202 2504428 454 1883198 1883502 2504610 2504914 610 1883504 1883748 2504916 2505160 490 1885188 1885465 2506601 2506878 556 1885990 1886200 2507403 2507613 422 1887393 1887625 2508806 2509038 466 1887654 1888035 2509067 2509448 764 1888341 1888556 2509754 2509969 432 1889085 1889473 2510498 2510886 778 1890096 1890394 2511509 2511807 598 1890396 1890615 2511809 2512028 440 1891089 1891371 2512502 2512784 566 1892049 1892388 2513462 2513801 680 1892542 1892861 2513955 2514274 640 1893008 1893345 2514421 2514758 676 1893700 1893987 2515113 2515400 576 1894688 1895028 2516101 2516441 682 1895030 1895434 2516443 2516847 810 1895450 1895675 2516863 2517088 452 1895677 1896174 2517090 2517587 996 1896582 1896861 2517995 2518274 560 1897197 1897669 2518610 2519082 946 1897725 1898386 2519138 2519799 1324 1898635 1898897 2520048 2520310 526 1898899 1899782 2520312 2521195 1768 1900050 1900363 2521465 2521778 628 1901084 1901334 2522499 2522749 502 1901591 1902258 2523006 2523673 1336 1902260 1903250 2523675 2524665 1982 1903706 1903916 2525122 2525332 422 1904451 1904683 2525867 2526099 466 1905090 1905374 2526506 2526790 570 1905394 1905787 2526810 2527203 788 1906033 1906301 2527448 2527716 538 1906477 1906764 2527892 2528179 576 1907251 1907489 2528668 2528906 478 1907826 1908287 2529243 2529704 924 1909427 1909630 2530844 2531047 408 1909823 1910092 2531240 2531509 540 1910094 1910722 2531511 2532139 1258 1911155 1911438 2532572 2532855 568 1911854 1912301 2533271 2533718 896 1912475 1912707 2533892 2534124 466 1912709 1913020 2534126 2534437 624 1913418 1913755 2534835 2535172 676 1914182 1914433 2535599 2535850 504 1914518 1914724 2535935 2536141 414 1915040 1915634 2536457 2537051 1190 1915716 1915918 2537133 2537335 406 1916259 1916497 2537676 2537914 478 1919902 1920259 2541320 2541677 716 1920774 1921293 2542192 2542711 1040 1921956 1922185 2543374 2543603 460 1922734 1923082 2544152 2544500 698 1923603 1923893 2545021 2545311 582 1924022 1924222 2545440 2545640 402 1924256 1924465 2545674 2545883 420 1925121 1925374 2546539 2546792 508 1925790 1926091 2547208 2547509 604 1928392 1928797 2549811 2550216 812 1928836 1929340 2550255 2550759 1010 1929708 1930092 2551127 2551511 770 1930094 1930449 2551513 2551868 712 1930451 1930783 2551870 2552202 666 1931042 1931502 2552461 2552921 922 1931504 1931847 2552923 2553266 688 1931852 1932171 2553271 2553590 640 1932814 1933017 2554233 2554436 408 1933019 1933251 2554438 2554670 466 1933394 1934088 2554813 2555507 1390 1934090 1934303 2555509 2555722 428 1934591 1934791 2556010 2556210 402 1935284 1935483 2556703 2556902 400 1935593 1936007 2557012 2557426 830 1936009 1936520 2557428 2557939 1024 1936878 1937808 2558297 2559227 1862 1937810 1938056 2559229 2559475 494 1938058 1938409 2559477 2559828 704 1938547 1938764 2559966 2560183 436 1939078 1939529 2560497 2560948 904 1939546 1939765 2560965 2561184 440 1939957 1940251 2561376 2561670 590 1940740 1940996 2562159 2562415 514 1942544 1943027 2564062 2564545 968 1943029 1943304 2564547 2564822 552 1943422 1943789 2564940 2565307 736 1943791 1944077 2565309 2565595 574 1944316 1944535 2565834 2566053 440 1944537 1944809 2566055 2566327 546 1945299 1945757 2566817 2567275 918 1946023 1946328 2567541 2567846 612 1946330 1946559 2567848 2568077 460 1946564 1946799 2568082 2568317 472 1946827 1947162 2568345 2568680 672 1948177 1948773 2569695 2570291 1194 1949888 1950127 2571406 2571645 480 1950394 1950831 2571912 2572349 876 1950833 1951383 2572351 2572901 1102 1951403 1952063 2572921 2573581 1322 1953790 1954060 2575308 2575578 542 1954270 1954649 2575788 2576167 760 1954951 1955256 2576469 2576774 612 1956632 1956895 2578153 2578416 528 1957021 1957247 2578542 2578768 454 1957920 1958470 2579441 2579991 1102 1958472 1958686 2579993 2580207 430 1959135 1959596 2580656 2581117 924 1961538 1961756 2583059 2583277 438 1961794 1962031 2583315 2583552 476 1962511 1962740 2584032 2584261 460 1963041 1963240 2584562 2584761 400 1964000 1964244 2585521 2585765 490 1964308 1964714 2585829 2586235 814 1964720 1964952 2586241 2586473 466 1964954 1965247 2586475 2586768 588 1965875 1966077 2587396 2587598 406 1966259 1966477 2587780 2587998 438 1966819 1967436 2588340 2588957 1236 1968034 1968254 2589555 2589775 442 1968813 1969103 2590334 2590624 582 1969837 1970060 2591358 2591581 448 1970086 1970291 2591607 2591812 412 1971049 1971529 2592568 2593048 962 1971978 1972255 2593497 2593774 556 1972876 1973268 2594395 2594787 786 1973283 1973564 2594802 2595083 564 1974175 1974430 2595694 2595949 512 1975026 1975276 2596545 2596795 502 1975278 1975528 2596797 2597047 502 1975671 1975990 2597190 2597509 640 1977699 1977960 2598442 2598703 524 1978683 1978945 2599426 2599688 526 1979046 1979359 2599789 2600102 628 1980567 1980795 2601310 2601538 458 1982052 1982308 2602796 2603052 514 1982625 1982842 2603369 2603586 436 1982844 1983139 2603588 2603883 592 1984651 1985338 2605395 2606082 1376 1985855 1986116 2606600 2606861 524 1986452 1987099 2607196 2607843 1296 1987606 1988052 2608350 2608796 894 1989494 1989724 2610238 2610468 462 1989829 1990042 2631693 2631906 428 1990043 1990278 2631906 2632141 472 1990754 1991024 2632617 2632887 542 1991686 1991942 2633549 2633805 514 1992676 1992895 2634539 2634758 440 1993250 1993573 2635113 2635436 648 1993733 1993977 2635596 2635840 490 1993979 1994269 2635842 2636132 582 1994271 1994552 2636134 2636415 564 1996761 1997337 2638624 2639200 1154 1997710 1998233 2639573 2640096 1048 1998736 1998953 2640599 2640816 436 1998955 1999175 2640818 2641038 442 1999338 1999939 2641201 2641802 1204 2001495 2001699 2643618 2643822 410 2002872 2003182 2644986 2645296 622 2004044 2004246 2646158 2646360 406 2004760 2005085 2646874 2647199 652 2007088 2007366 2649202 2649480 558 2007394 2007805 2649508 2649919 824 2007807 2008180 2649921 2650294 748 2011047 2011524 2655125 2655602 956 2011589 2011918 2655667 2655996 660 2013971 2014599 2658049 2658677 1258 2014528 2014738 2658668 2658878 422 2014884 2015239 2659024 2659379 712 2015595 2015830 2659735 2659970 472 2016279 2016783 2660419 2660923 1010 2017939 2018353 2662080 2662494 830 2018612 2018943 2662753 2663084 664 2019325 2019661 2663466 2663802 674 2019822 2020218 2663963 2664359 794 2020220 2020530 2664361 2664671 622 2020532 2020953 2664673 2665094 844 2020955 2021623 2665096 2665764 1338 2021625 2021857 2665766 2665998 466 2021859 2022464 2666000 2666605 1212 2022653 2023379 2666794 2667520 1454 2023837 2024052 2667978 2668193 432 2025011 2025411 2669152 2669552 802 2026243 2026459 2670385 2670601 434 2027335 2027681 2671477 2671823 694 2027725 2028345 2671867 2672487 1242 2028564 2028792 2672706 2672934 458 2028869 2029072 2673011 2673214 408 2030970 2031175 2675112 2675317 412 2033871 2034187 2678006 2678322 634 2035344 2035564 2679479 2679699 442 2037139 2037485 2681275 2681621 694 2039412 2039618 2683547 2683753 414 2039771 2040082 2683906 2684217 624 2040374 2040678 2684509 2684813 610 2041532 2042285 2730847 2731600 1508 2042293 2042551 2731608 2731866 518 2042553 2042842 2731868 2732157 580 2043421 2043668 2732736 2732983 496 2043670 2043894 2732985 2733209 450 2045104 2045324 2734419 2734639 442 2052078 2052322 2742298 2742542 490 2053032 2053248 2743252 2743468 434 2053634 2053854 2743854 2744074 442 2053856 2054088 2744076 2744308 466 2054090 2054397 2744310 2744617 616 2054614 2054816 2744834 2745036 406 2056033 2056236 2746250 2746453 408 2057287 2057578 2747504 2747795 584 2062915 2064054 2753131 2754270 2280 2065897 2066449 2757364 2757916 1106 2066623 2066961 2758091 2758429 678 2074799 2075316 2761899 2762416 1036 2075456 2075809 2762556 2762909 708 2075811 2076169 2762910 2763268 718 2076404 2076706 2763504 2763806 606 2077254 2077487 2764354 2764587 468 2077678 2077940 2764778 2765040 526 2077969 2078252 2765069 2765352 568 2079328 2079557 2766429 2766658 460 2079685 2079908 2766786 2767009 448 2082879 2083130 2769981 2770232 504 2084419 2084738 2771521 2771840 640 2084836 2085336 2771938 2772438 1002 2086206 2086438 2773308 2773540 466 2086440 2086651 2773542 2773753 424 2091346 2091562 2778006 2778222 434 2094483 2094687 2781143 2781347 410 2097262 2097574 2783920 2784232 626 2113919 2114137 2803895 2804113 438 2119227 2119458 2809107 2809338 464 2122375 2122654 2812343 2812622 560 2122745 2123002 2812713 2812970 516 2126130 2126337 2816098 2816305 416 2127587 2127870 2817558 2817841 568 2128148 2128410 2818119 2818381 526 2130083 2130306 2820054 2820277 448 2131508 2131765 2821479 2821736 516 2133560 2133891 2823531 2823862 664 2133935 2134325 2823906 2824296 782 2134864 2135487 2824835 2825458 1248 2135806 2136050 2825778 2826022 490 2136085 2136302 2826057 2826274 436 2139119 2139375 2829563 2829819 514 2139410 2139702 2829854 2830146 586 2140010 2140292 2830454 2830736 566 2141744 2141972 2832191 2832419 458 2143720 2144076 2834167 2834523 714 2144305 2144574 2834752 2835021 540 2144682 2145093 2835121 2835532 824 2145494 2145735 2835933 2836174 484 2145917 2146119 2836356 2836558 406 2152874 2153097 2842908 2843131 448 2157500 2157728 2847534 2847762 458 2159512 2159726 2849546 2849760 430 2160915 2161195 2850949 2851229 562 2163830 2164029 2853865 2854064 400 2164634 2164884 2854669 2854919 502 2167991 2168191 2857396 2857596 402 2169513 2170123 2857657 2858267 1222 2170692 2170904 2858836 2859048 426 2171027 2171256 2859171 2859400 460 2171771 2172054 2859915 2860198 568 2172899 2173232 2861043 2861376 668 2173706 2173992 2861850 2862136 574 2174134 2174470 2862278 2862614 674 2176255 2176466 2864390 2864601 424 2176519 2176744 2864654 2864879 452 2178034 2178238 2866170 2866374 410 2178361 2178572 2866497 2866708 424 2179950 2180203 2868086 2868339 508 2180394 2180620 2868530 2868756 454 2181635 2182001 2869771 2870137 734 2182296 2182583 2870432 2870719 576 2183634 2183837 2873952 2874155 408 2183839 2184087 2874157 2874405 498 2184857 2185097 2875201 2875441 482 2191221 2191427 2881566 2881772 414 2191466 2191724 2881811 2882069 518 2192021 2192638 2882366 2882983 1236 2192659 2192863 2883004 2883208 410 2194182 2194415 2884527 2884760 468 2198233 2198437 2891590 2891794 410 2200600 2200819 2893957 2894176 440 2201929 2202134 2895284 2895489 412 2202523 2202763 2896812 2897052 482 2205919 2206158 2900208 2900447 480 2208053 2208314 2902342 2902603 524 2209448 2209707 2905053 2905312 520 2209899 2210143 2905506 2905750 490 2210145 2210348 2905752 2905955 408 2210350 2210690 2905957 2906297 682 2211187 2211475 2906794 2907082 578 2211943 2212186 2907550 2907793 488 2212389 2212600 2907996 2908207 424 2212933 2213153 2957456 2957676 442 2213274 2213964 2957797 2958487 1382 2218456 2218682 2963020 2963246 454 2219935 2220147 2964499 2964711 426 2220987 2221574 2965551 2966138 1176 2222369 2222661 2966933 2967225 586 2222834 2223101 2967398 2967665 536 2223432 2223734 2967996 2968298 606 2225496 2225947 2970060 2970511 904 2226627 2226862 2971192 2971427 472 2226864 2227086 2971429 2971651 446 2228571 2228812 2979215 2979456 484 2229200 2229697 2979844 2980341 996 2229855 2230119 2980499 2980763 530 2230121 2230345 2980765 2980989 450 2230830 2231351 2981474 2981995 1044 2231542 2231862 2982186 2982506 642 2232100 2232389 2982744 2983033 580 2233168 2233411 2983812 2984055 488 2233518 2234089 2984162 2984733 1144 2234218 2234614 2984862 2985258 794 2234979 2235319 2985624 2985964 682 2235321 2235523 2985966 2986168 406 2237286 2237587 2987931 2988232 604 2238311 2238529 2988956 2989174 438 2238619 2238940 2989264 2989585 644 2239235 2239730 2989880 2990375 992 2239732 2239939 2990377 2990584 416 2241424 2242032 2992069 2992677 1218 2242658 2242988 2993303 2993633 662 2243305 2243526 2993938 2994159 444 2243528 2244242 2994161 2994875 1430 2244244 2244464 2994877 2995097 442 2245425 2245663 2996056 2996294 478 2245849 2246101 2996480 2996732 506 2246572 2247571 2997203 2998202 2000 2247573 2248062 2998204 2998693 980 2248064 2248699 2998695 2999330 1272 2248701 2249569 2999332 3000200 1738 2249571 2250110 3000202 3000741 1080 2251980 2252305 3002560 3002885 652 2253003 2253255 3003583 3003835 506 2253263 2253585 3003843 3004165 646 2256235 2256769 3006815 3007349 1070 2259308 2259547 3009889 3010128 480 2259903 2260198 3010484 3010779 592 2260200 2260542 3010781 3011123 686 2261231 2261549 3011812 3012130 638 2261794 2262073 3012375 3012654 560 2262083 2262426 3012664 3013007 688 2263166 2263411 3013747 3013992 492 2263643 2264229 3014224 3014810 1174 2265002 2265281 3015583 3015862 560 2266560 2266943 3017141 3017524 768 2268043 2268619 3018625 3019201 1154 2269273 2269802 3019856 3020385 1060 2272483 2272778 3023066 3023361 592 2274347 2274557 3024930 3025140 422 2275057 2275295 3025640 3025878 478 2275539 2275809 3026122 3026392 542 2275811 2276060 3026394 3026643 500 2276062 2276278 3026645 3026861 434 2276280 2276870 3026863 3027453 1182 2277547 2277881 3028130 3028464 670 2278243 2278588 3028826 3029171 692 2280390 2280642 3030973 3031225 506 2280686 2280890 3031269 3031473 410 2281848 2282052 3032431 3032635 410 2282054 2282528 3032637 3033111 950 2283182 2283584 3033765 3034167 806 2283586 2283854 3034169 3034437 538 2284626 2284837 3035207 3035418 424 2285076 2285356 3035657 3035937 562 2285358 2285560 3035939 3036141 406 2289824 2290039 3039030 3039245 432 2290772 2290985 3039978 3040191 428 2291857 2292428 3041063 3041634 1144 2293245 2293458 3042451 3042664 428 2293481 2293703 3042687 3042909 446 2293807 2294108 3043013 3043314 604 2294251 2294644 3043457 3043850 788 2295290 2295646 3044496 3044852 714 2295648 2296086 3044854 3045292 878 2296175 2296494 3045381 3045700 640 2296613 2296935 3045819 3046141 646 2297470 2297887 3046676 3047093 836 2298029 2298351 3047235 3047557 646 2299772 2300043 3048978 3049249 544 2300249 2300505 3049455 3049711 514 2300657 2300999 3049863 3050205 686 2301001 2301222 3050207 3050428 444 2301224 2301640 3050430 3050846 834 2303695 2303957 3052335 3052597 526 2303998 2304404 3052638 3053044 814 2304406 2304957 3053046 3053597 1104 2305313 2305678 3053953 3054318 732 2306306 2306553 3054946 3055193 496 2306555 2306758 3055195 3055398 408 2309351 2309766 3057991 3058406 832 2310631 2310948 3059271 3059588 636 2311323 2311661 3059963 3060301 678 2312305 2312510 3060945 3061150 412 2312535 2312783 3061175 3061423 498 2313355 2314407 3061995 3063047 2106 2315236 2315453 3063876 3064093 436 2315698 2315945 3064338 3064585 496 2316067 2316285 3064707 3064925 438 2316379 2316686 3065019 3065326 616 2316688 2316893 3065328 3065533 412 2317120 2317469 3065760 3066109 700 2317561 2317971 3066201 3066611 822 2325693 2326066 3067117 3067490 748 2326080 2326352 3067504 3067776 546 2328984 2329211 3070408 3070635 456 2329599 2329901 3071023 3071325 606 2330034 2330252 3071458 3071676 438 2330740 2331008 3072164 3072432 538 2331328 2331814 3072752 3073238 974 2332288 2332642 3073712 3074066 710 2332644 2332860 3074068 3074284 434 2333387 2333610 3074811 3075034 448 2334785 2335009 3076208 3076432 450 2336208 2336413 3077631 3077836 412 2336415 2336647 3077838 3078070 466 2337189 2337503 3078612 3078926 630 2337505 2337720 3078928 3079143 432 2338608 2338846 3080044 3080282 478 2339047 2339302 3080483 3080738 512 2339383 2339919 3080819 3081355 1074 2341025 2341445 3082461 3082881 842 2342842 2343281 3084278 3084717 880 2344015 2344303 3085451 3085739 578 2348815 2349051 3093840 3094076 474 2350732 2351004 3095757 3096029 546 2351164 2351387 3096189 3096412 448 2351467 2351807 3096492 3096832 682 2354350 2354957 3099375 3099982 1216 2354959 2355241 3099984 3100266 566 2356031 2356258 3100885 3101112 456 2357185 2357442 3102038 3102295 516 2357830 2358383 3102683 3103236 1108 2358663 2359031 3103516 3103884 738 2359274 2359777 3104127 3104630 1008 2361150 2361633 3106003 3106486 968 2361635 2361898 3106488 3106751 528 2365050 2365259 3109903 3110112 420 2365300 2365505 3110153 3110358 412 2365729 2366155 3110582 3111008 854 2366694 2366896 3111547 3111749 406 2366898 2367151 3111751 3112004 508 2367195 2367565 3112048 3112418 742 2367738 2367939 3112591 3112792 404 2367941 2368333 3112794 3113186 786 2368581 2369006 3113434 3113859 852 2369104 2369342 3113957 3114195 478 2369344 2369561 3114197 3114414 436 2371115 2371346 3115968 3116199 464 2371355 2371559 3116208 3116412 410 2371934 2372317 3116787 3117170 768 2373433 2373657 3118286 3118510 450 2374791 2375086 3119644 3119939 592 2377211 2377470 3122064 3122323 520 2378844 2379095 3123697 3123948 504 2379699 2379931 3124552 3124784 466 2388716 2388930 3129159 3129373 430 2389160 2389806 3129603 3130249 1294 2391447 2391892 3131957 3132402 892 2392296 2392513 3132806 3133023 436 2393010 2393211 3133520 3133721 404 2393779 2394028 3134289 3134538 500 2394207 2394843 3134717 3135353 1274 2395298 2395556 3135808 3136066 518 2397004 2397356 3137514 3137866 706 2398063 2398308 3138573 3138818 492 2398727 2398941 3139237 3139451 430 2399860 2400179 3140370 3140689 640 2401998 2402382 3142508 3142892 770 2402384 2402883 3142894 3143393 1000 2403015 2403224 3143525 3143734 420 2403226 2403562 3143736 3144072 674 2404124 2404360 3144634 3144870 474 2404362 2404984 3144872 3145494 1246 2405033 2405255 3145543 3145765 446 2405413 2405833 3145923 3146343 842 2405973 2406286 3146483 3146796 628 2407031 2407332 3147541 3147842 604 2407843 2408135 3148353 3148645 586 2408137 2408740 3148647 3149250 1208 2408742 2408978 3149252 3149488 474 2409223 2409580 3149733 3150090 716 2409899 2410124 3150409 3150634 452 2410126 2410474 3150636 3150984 698 2410877 2411974 3151387 3152484 2196 2411990 2412480 3152500 3152990 982 2412572 2413115 3153082 3153625 1088 2413117 2413628 3153627 3154138 1024 2414188 2414453 3154698 3154963 532 2414542 2414910 3155052 3155420 738 2415052 2415297 3155562 3155807 492 2415604 2415923 3156114 3156433 640 2416588 2416808 3157098 3157318 442 2417113 2417411 3157623 3157921 598 2417437 2417877 3157947 3158387 882 2419183 2419387 3159693 3159897 410 2419395 2419663 3159905 3160173 538 2421331 2421674 3161841 3162184 688 2422083 2422456 3162593 3162966 748 2422485 2422840 3162995 3163350 712 2423554 2424027 3164064 3164537 948 2424119 2424381 3164629 3164891 526 2424749 2425018 3165259 3165528 540 2425053 2425264 3165563 3165774 424 2425958 2426231 3166468 3166741 548 2428031 2428341 3168541 3168851 622 2428580 2428822 3169090 3169332 486 2429754 2430006 3170447 3170699 506 2430853 2431216 3171546 3171909 728 2431218 2432122 3171911 3172815 1810 2432480 2433061 3173173 3173754 1164 2433567 2433864 3174260 3174557 596 2434712 2434964 3175405 3175657 506 2435529 2435802 3176222 3176495 548 2435804 2436024 3176497 3176717 442 2436196 2436429 3176889 3177122 468 2437238 2437440 3177931 3178133 406 2438957 2439180 3179660 3179883 448 2439374 2439708 3180077 3180411 670 2439945 2440207 3180648 3180910 526 2442085 2442302 3182788 3183005 436 2443422 2443627 3184125 3184330 412 2443784 2444015 3184487 3184718 464 2445317 2445553 3186020 3186256 474 2446350 2446688 3187053 3187391 678 2454776 2454994 3195531 3195749 438 2455788 2456296 3196543 3197051 1018 2456619 2456870 3197374 3197625 504 2458874 2459512 3199628 3200266 1278 2460255 2460457 3201009 3201211 406 2462902 2463226 3203841 3204165 650 2477087 2477474 3219567 3219954 776 2478097 2478468 3220577 3220948 744 2478884 2479094 3221364 3221574 422 2479182 2479452 3221662 3221932 542 2479454 2479743 3221934 3222223 580 2481784 2482580 3224264 3225060 1594 2485223 2485434 3227703 3227914 424 2487009 2487311 3229485 3229787 606 2487475 2487680 3229951 3230156 412 2487748 2487953 3230224 3230429 412 2488126 2488487 3230602 3230963 724 2489509 2489738 3231985 3232214 460 2489857 2490088 3232333 3232564 464 2490804 2491159 3233280 3233635 712 2491680 2491920 3234156 3234396 482 2493507 2493824 3235984 3236301 636 2494105 2494657 3236582 3237134 1106 2494917 2495150 3237394 3237627 468 2496124 2496336 3238601 3238813 426 2496425 2496805 3238903 3239283 762 2498319 2498583 3240797 3241061 530 2499116 2499492 3241594 3241970 754 2499646 2499886 3242124 3242364 482 2499888 2500201 3242366 3242679 628 2500592 2500857 3243070 3243335 532 2501864 2502366 3244342 3244844 1006 2502374 2502599 3244852 3245077 452 2504599 2504812 3247077 3247290 428 2505039 2505253 3247517 3247731 430 2505829 2506207 3248307 3248685 758 2507249 2507950 3249727 3250428 1404 2508288 2508706 3250766 3251184 838 2508708 2509001 3251186 3251479 588 2510142 2510587 3252619 3253064 892 2510589 2510803 3253066 3253280 430 2511109 2511410 3253586 3253887 604 2514424 2514627 3255552 3255755 408 2515055 2515911 3256183 3257039 1714 2515934 2516135 3257061 3257262 404 2516170 2516423 3257182 3257435 508 2516425 2516643 3257437 3257655 438 2516645 2517037 3257657 3258049 786 2517487 2517986 3260246 3260745 1000 2518048 2518274 3260807 3261033 454 2518801 2519152 3261560 3261911 704 2519154 2519378 3261913 3262137 450 2524775 2525038 3263384 3263647 528 2525040 2525347 3263649 3263956 616 2525376 2525726 3263985 3264335 702 2525728 2526444 3264337 3265053 1434 2526978 2527238 3265587 3265847 522 2527385 2527720 3265994 3266329 672 2528020 2528283 3266629 3266892 528 2529020 2529435 3267629 3268044 832 2529701 2529924 3268310 3268533 448 2530338 2530630 3268947 3269239 586 2531010 2531263 3269619 3269872 508 2531438 2531958 3270047 3270567 1042 2531960 2532332 3270569 3270941 746 2532682 2532887 3271291 3271496 412 2533185 2534040 3271794 3272649 1712 2537775 2538002 3275424 3275651 456 2538067 2538302 3275716 3275951 472 2538403 2538686 3276052 3276335 568 2541417 2541663 3279066 3279312 494 2542194 2542549 3279697 3280052 712 2544569 2544826 3282072 3282329 516 2547613 2547847 3284934 3285168 470 2548378 2548736 3285699 3286057 718 2548738 2549045 3286059 3286366 616 2549099 2549312 3286420 3286633 428 2549314 2549839 3286635 3287160 1052 2550023 2550307 3287344 3287628 570 2550593 2550918 3287914 3288239 652 2551130 2551347 3288451 3288668 436 2552936 2553294 3290257 3290615 718 2554391 2554722 3291712 3292043 664 2555321 2555603 3292642 3292924 566 2556229 2556717 3293550 3294038 978 2563647 2563847 3294178 3294378 402 2565243 2565475 3295774 3296006 466 2566632 2567154 3297046 3297568 1046 2567312 2567642 3297726 3298056 662 2568434 2568987 3298848 3299401 1108 2570309 2570600 3300723 3301014 584 2572119 2572431 3302461 3302773 626 2572872 2573104 3303214 3303446 466 2574757 2575061 3305099 3305403 610 2576480 2576803 3306822 3307145 648 2576805 2577076 3307147 3307418 544 2577426 2577719 3307768 3308061 588 2579667 2579994 3310009 3310336 656 2580018 2580239 3310360 3310581 444 2580681 2580891 3311023 3311233 422 2580942 2581167 3311284 3311509 452 2581680 2581891 3312022 3312233 424 2583483 2583691 3313825 3314033 418 2583693 2583939 3314035 3314281 494 2584527 2584813 3314869 3315155 574 2585107 2585443 3315449 3315785 674 2585481 2585996 3315823 3316338 1032 2586571 2586905 3316913 3317247 670 2587132 2587340 3317474 3317682 418 2587774 2588036 3318116 3318378 526 2588299 2588642 3318641 3318984 688 2588644 2588846 3318986 3319188 406 2590181 2590749 3320523 3321091 1138 2593465 2593720 3323778 3324033 512 2593778 2594108 3324091 3324421 662 2595210 2595788 3325523 3326101 1158 2595986 2596263 3326299 3326576 556 2596265 2596849 3326578 3327162 1170 2596868 2597151 3327181 3327464 568 2597190 2597545 3327503 3327858 712 2597749 2598076 3328062 3328389 656 2598078 2598313 3328391 3328626 472 2598363 2598798 3328676 3329111 872 2601610 2601942 3331923 3332255 666 2602617 2602960 3332930 3333273 688 2603355 2603608 3333668 3333921 508 2603730 2603986 3334043 3334299 514 2604422 2604657 3334735 3334970 472 2606436 2606870 3336749 3337183 870 2607877 2608085 3338238 3338446 418 2608337 2608569 3338698 3338930 466 2610006 2610257 3340367 3340618 504 2611902 2612633 3342265 3342996 1464 2613728 2614090 3344091 3344453 726 2614188 2614399 3344551 3344762 424 2614580 2614841 3344943 3345204 524 2615310 2615748 3345673 3346111 878 2615750 2616027 3346113 3346390 556 2616029 2616801 3346392 3347164 1546 2617029 2617312 3347392 3347675 568 2617371 2617651 3347734 3348014 562 2617653 2618471 3348016 3348834 1638 2618650 2618927 3349013 3349290 556 2619068 2619400 3349431 3349763 666 2620295 2620536 3350658 3350899 484 2620903 2621574 3351265 3351936 1344 2621648 2622141 3352010 3352503 988 2622602 2622972 3352964 3353334 742 2622974 2623330 3353336 3353692 714 2623959 2624281 3354321 3354643 646 2624863 2625146 3355225 3355508 568 2625345 2625778 3355707 3356140 868 2625998 2626278 3356360 3356640 562 2626491 2626699 3356853 3357061 418 2626701 2627079 3357063 3357441 758 2627281 2627535 3357643 3357897 510 2627901 2628187 3358263 3358549 574 2628222 2628544 3358584 3358906 646 2629209 2629572 3359571 3359934 728 2629758 2629996 3360120 3360358 478 2630442 2630759 3360804 3361121 636 2630825 2631072 3361187 3361434 496 2631491 2631693 3361853 3362055 406 2631695 2632029 3362057 3362391 670 2633280 2633494 3363642 3363856 430 2634147 2634646 3364508 3365007 1000 2634684 2634898 3365045 3365259 430 2634900 2635635 3365261 3365996 1472 2635637 2635916 3365998 3366277 560 2636072 2636311 3366433 3366672 480 2636313 2637156 3366674 3367517 1688 2637264 2637676 3367625 3368037 826 2638152 2638776 3368513 3369137 1250 2639345 2639640 3369706 3370001 592 2639705 2640279 3370066 3370640 1150 2640598 2641264 3370959 3371625 1334 2642265 2642484 3372626 3372845 440 2644797 2645068 3379989 3380260 544 2646232 2646718 3381424 3381910 974 2646720 2647199 3381912 3382391 960 2647402 2647747 3382594 3382939 692 2649258 2649769 3384450 3384961 1024 2650153 2650613 3385345 3385805 922 2650615 2650905 3385807 3386097 582 2653587 2653891 3388463 3388767 610 2654352 2654790 3389228 3389666 878 2654921 2655223 3389797 3390099 606 2655225 2655706 3390101 3390582 964 2655708 2656017 3390584 3390893 620 2656019 2656290 3390895 3391166 544 2656292 2656816 3391168 3391692 1050 2657068 2657321 3391944 3392197 508 2658334 2658578 3393210 3393454 490 2659321 2659587 3394197 3394463 534 2660011 2660327 3394887 3395203 634 2661878 2662101 3396600 3396823 448 2662610 2662809 3397332 3397531 400 2662985 2663205 3397707 3397927 442 2663404 2664328 3398126 3399050 1850 2666419 2667002 3401142 3401725 1168 2667999 2668309 3402722 3403032 622 2669071 2669365 3403794 3404088 590 2672157 2672527 3406880 3407250 742 2673299 2673585 3408022 3408308 574 2674570 2674779 3409293 3409502 420 2676306 2676744 3411029 3411467 878 2680540 2680898 3415263 3415621 718 2683102 2683328 3417690 3417916 454 2683330 2684113 3417918 3418701 1568 2684451 2684963 3419039 3419551 1026 2685044 2685290 3419632 3419878 494 2685816 2686077 3420404 3420665 524 2686500 2686729 3421088 3421317 460 2687173 2687453 3421761 3422041 562 2687674 2688115 3422262 3422703 884 2688993 2689305 3423581 3423893 626 2691024 2691228 3425630 3425834 410 2691698 2691975 3426304 3426581 556 2692586 2692875 3427192 3427481 580 2693026 2693277 3427632 3427883 504 2693279 2693603 3427885 3428209 650 2693778 2693983 3428383 3428588 412 2694111 2694508 3428716 3429113 796 2694510 2694993 3429115 3429598 968 2695122 2695678 3429727 3430283 1114 2696478 2697016 3431083 3431621 1078 2697024 2697292 3431629 3431897 538 2699800 2700161 3434407 3434768 724 2700600 2700917 3435207 3435524 636 2700919 2701186 3435526 3435793 536 2702463 2702896 3437071 3437504 868 2703201 2703535 3437809 3438143 670 2704116 2704639 3438724 3439247 1048 2704821 2705454 3439429 3440062 1268 2705750 2706257 3440358 3440865 1016 2706433 2706921 3441041 3441529 978 2707175 2708347 3441771 3442943 2346 2708499 2708746 3443095 3443342 496 2709414 2709740 3444010 3444336 654 2709742 2710033 3444338 3444629 584 2710686 2711190 3445282 3445786 1010 2714377 2714608 3448797 3449028 464 2715041 2715350 3449461 3449770 620 2716207 2716714 3450627 3451134 1016 2716916 2717459 3451336 3451879 1088 2717578 2717837 3451998 3452257 520 2717875 2718432 3452295 3452852 1116 2719838 2720043 3454258 3454463 412 2720685 2720963 3455105 3455383 558 2721943 2722325 3456363 3456745 766 2722364 2722648 3456784 3457068 570 2722719 2722976 3457139 3457396 516 2722978 2723197 3457398 3457617 440 2723512 2723820 3457932 3458240 618 2724288 2724992 3458707 3459411 1410 2725002 2725338 3459421 3459757 674 2725518 2725859 3459938 3460279 684 2726034 2726557 3460454 3460977 1048 2727756 2728138 3462102 3462484 766 2728176 2728411 3462523 3462758 472 2729938 2730256 3464290 3464608 638 2730258 2730709 3464610 3465061 904 2730715 2730941 3465067 3465293 454 2730943 2731223 3465295 3465575 562 2731369 2732126 3465721 3466478 1516 2732128 2732474 3466480 3466826 694 2733900 2734427 3468252 3468779 1056 2734630 2734983 3468982 3469335 708 2735104 2735627 3469456 3469979 1048 2735929 2736218 3470281 3470570 580 2736892 2737170 3471244 3471522 558 2737943 2738473 3472295 3472825 1062 2738616 2738989 3472968 3473341 748 2739487 2739726 3473839 3474078 480 2740107 2740530 3474459 3474882 848 2740532 2740751 3474884 3475103 440 2741872 2742117 3476224 3476469 492 2742144 2743097 3476497 3477450 1908 2743240 2743532 3477593 3477885 586 2743627 2744287 3477980 3478640 1322 2744484 2744755 3478725 3478996 544 2744814 2745301 3479055 3479542 976 2745687 2746250 3479928 3480491 1128 2746252 2746651 3480493 3480892 800 2746790 2747112 3481032 3481354 646 2748316 2748598 3482557 3482839 566 2748600 2748900 3482841 3483141 602 2749601 2749903 3483842 3484144 606 2750439 2750646 3484680 3484887 416 2751144 2751386 3485385 3485627 486 2751471 2751884 3485712 3486125 828 2752393 2752793 3486634 3487034 802 2753604 2753931 3487845 3488172 656 2778708 2778970 3512565 3512827 526 2779235 2779927 3513092 3513784 1386 2780718 2781019 3514575 3514876 604 2781027 2781266 3514885 3515124 480 2788875 2789257 3522735 3523117 766 2792327 2792526 3526187 3526386 400 2793676 2794100 3527536 3527960 850 2794102 2794557 3527962 3528417 912 2794848 2795073 3528708 3528933 452 2796262 2796549 3530122 3530409 576 2797007 2797371 3530866 3531230 730 2797373 2798389 3531232 3532248 2034 2798633 2799226 3534456 3535049 1188 2800013 2800498 3535836 3536321 972 2800607 2800878 3536430 3536701 544 2801135 2801361 3536958 3537184 454 2801453 2801751 3537276 3537574 598 2801948 2802460 3537771 3538283 1026 2802880 2803088 3538705 3538913 418 2804112 2804406 3539937 3540231 590 2804534 2804916 3540359 3540741 766 2805471 2805684 3541295 3541508 428 2807358 2807725 3543189 3543556 736 2808012 2808214 3543843 3544045 406 2808405 2808652 3544236 3544483 496 2808654 2808877 3544485 3544708 448 2808895 2809235 3544726 3545066 682 2809368 2809798 3545199 3545629 862 2810464 2810697 3546295 3546528 468 2812447 2812857 3548278 3548688 822 2813196 2813583 3549026 3549413 776 2814300 2814622 3550130 3550452 646 2816865 2817266 3552466 3552867 804 2817268 2817469 3552869 3553070 404 2818753 2819245 3554355 3554847 986 2819449 2820142 3555051 3555744 1388 2820273 2820646 3555874 3556247 748 2820875 2821089 3556475 3556689 430 2821091 2821319 3556691 3556919 458 2821715 2821967 3557315 3557567 506 2825702 2825914 3561302 3561514 426 2826840 2827088 3562441 3562689 498 2828502 2828984 3564104 3564586 966 2830753 2831006 3566355 3566608 508 2831645 2831876 3567043 3567274 464 2833063 2833293 3568461 3568691 462 2833295 2833536 3568693 3568934 484 2837117 2837333 3572515 3572731 434 2838683 2838943 3574081 3574341 522 2841331 2841629 3576694 3576992 598 2846859 2847158 3582222 3582521 600 2847181 2847469 3582544 3582832 578 2847831 2848268 3583194 3583631 876 2848270 2848523 3583633 3583886 508 2848606 2848961 3583969 3584324 712 2848963 2849325 3584326 3584688 726 2850926 2851128 3586289 3586491 406 2851139 2851514 3586502 3586877 752 2852110 2852391 3587473 3587754 564 2853320 2853621 3588683 3588984 604 2853872 2854098 3589235 3589461 454 2854529 2854828 3589892 3590191 600 2854893 2855169 3590256 3590532 554 2855604 2856123 3590967 3591486 1040 2858192 2858404 3593555 3593767 426 2864535 2864754 3596737 3596956 440 2864756 2865030 3596958 3597232 550 2865209 2865476 3597411 3597678 536 2865518 2865734 3597720 3597936 434 2865880 2866286 3598082 3598488 814 2866387 2866634 3598589 3598836 496 2866834 2867202 3599036 3599404 738 2867396 2867672 3599598 3599874 554 2867821 2868369 3600023 3600571 1098 2869103 2869391 3601305 3601593 578 2869393 2869625 3601595 3601827 466 2870387 2871022 3602589 3603224 1272 2871160 2871582 3603362 3603784 846 2871584 2872019 3603786 3604221 872 2872881 2873099 3605083 3605301 438 2874143 2874673 3606345 3606875 1062 2885970 2886255 3617768 3618053 572 2886425 2886780 3618222 3618577 712 2888055 2888285 3619852 3620082 462 2889793 2890003 3621590 3621800 422 2890189 2890423 3621986 3622220 470 2891093 2891302 3622890 3623099 420 2897135 2897349 3628932 3629146 430 2898460 2898785 3630257 3630582 652 2901458 2901741 3633255 3633538 568 2905237 2905527 3639316 3639606 582 2905547 2906034 3639626 3640113 976 2906036 2906652 3640115 3640731 1234 2907449 2907730 3641528 3641809 564 2907732 2908070 3641811 3642149 678 2908102 2908400 3642181 3642479 598 2909036 2909377 3643115 3643456 684 2909379 2909656 3643458 3643735 556 2909940 2910304 3644019 3644383 730 2910480 2910805 3644559 3644884 652 2911431 2912027 3645510 3646106 1194 2912225 2912484 3646304 3646563 520 2912855 2913562 3646934 3647641 1416 2914017 2914240 3648096 3648319 448 2914296 2914654 3648375 3648733 718 2914689 2914992 3648768 3649071 608 2914998 2915242 3649077 3649321 490 2915451 2915695 3649530 3649774 490 2916062 2916284 3650142 3650364 446 2917494 2917747 3651574 3651827 508 2918793 2919026 3652873 3653106 468 2919553 2919764 3653633 3653844 424 2920078 2920674 3654158 3654754 1194 2921222 2921733 3655302 3655813 1024 2921946 2922205 3656026 3656285 520 2922916 2923166 3656996 3657246 502 2923198 2923523 3657278 3657603 652 2923525 2923743 3657605 3657823 438 2924110 2924627 3658190 3658707 1036 2924815 2925035 3658895 3659115 442 2925490 2925698 3659570 3659778 418 2925838 2926075 3659918 3660155 476 2926077 2926503 3660157 3660583 854 2926820 2927055 3660900 3661135 472 2927387 2927763 3661467 3661843 754 2928017 2928240 3662097 3662320 448 2928674 2928974 3662754 3663054 602 2929226 2929836 3663306 3663916 1222 2929908 2930197 3663988 3664277 580 2930268 2930563 3664348 3664643 592 2930667 2931073 3664747 3665153 814 2931075 2931390 3665155 3665470 632 2931492 2931842 3665572 3665922 702 2932194 2932425 3666274 3666505 464 2932745 2933043 3666825 3667123 598 2933611 2933834 3667691 3667914 448 2934358 2934848 3668438 3668928 982 2934850 2935109 3668930 3669189 520 2935111 2935418 3669191 3669498 616 2935564 2935784 3669644 3669864 442 2935786 2936405 3669866 3670485 1240 2936506 2936742 3670586 3670822 474 2936859 2937093 3670939 3671173 470 2937131 2937948 3671211 3672028 1636 2938372 2938889 3672452 3672969 1036 2940044 2940486 3674124 3674566 886 2940637 2940971 3674717 3675051 670 2941477 2941770 3675557 3675850 588 2943757 2944212 3677837 3678292 912 2944844 2945248 3678924 3679328 810 2945342 2945747 3679422 3679827 812 2946496 2946827 3680576 3680907 664 2947288 2947624 3681368 3681704 674 2947872 2948179 3681952 3682259 616 2948825 2949045 3682905 3683125 442 2949530 2949747 3683610 3683827 436 2949788 2950008 3683868 3684088 442 2952130 2952446 3686210 3686526 634 2952793 2953194 3686873 3687274 804 2953196 2953415 3687276 3687495 440 2954286 2954592 3688366 3688672 614 2954594 2954832 3688674 3688912 478 2955038 2955270 3689118 3689350 466 2956154 2956380 3690234 3690460 454 2956706 2956927 3690786 3691007 444 2958659 2958934 3692739 3693014 552 2960256 2960476 3694336 3694556 442 2962083 2962376 3696163 3696456 588 2963061 2963356 3697141 3697436 592 2963712 2964359 3697792 3698439 1296 2964361 2964757 3698441 3698837 794 2965038 2965297 3699118 3699377 520 2965650 2965915 3699730 3699995 532 2966001 2966248 3700081 3700328 496 2966250 2967090 3700330 3701170 1682 2967289 2967597 3701369 3701677 618 2967998 2968278 3702078 3702358 562 2969272 2969497 3703352 3703577 452 2969542 2969976 3703622 3704056 870 2970125 2970476 3704205 3704556 704 2970478 2970737 3704558 3704817 520 2971120 2971391 3705200 3705471 544 2971483 2971894 3705563 3705974 824 2972012 2972379 3706092 3706459 736 2972936 2973168 3707016 3707248 466 2973973 2974332 3708053 3708412 720 2974589 2974891 3708671 3708973 606 2975121 2975848 3709203 3709930 1456 2976234 2976541 3710316 3710623 616 2976543 2976934 3710625 3711016 784 2977547 2977758 3711629 3711840 424 2978148 2978415 3712230 3712497 536 2979002 2979237 3713084 3713319 472 2979638 2979990 3713720 3714072 706 2982386 2982683 3716468 3716765 596 2983764 2984022 3717846 3718104 518 2984063 2984382 3718145 3718464 640 2984384 2984655 3718466 3718737 544 2985678 2985903 3719760 3719985 452 2987686 2987900 3721769 3721983 430 2987937 2988226 3722020 3722309 580 2990962 2991253 3725284 3725575 584 2993831 2994088 3728158 3728415 516 2994090 2994381 3728417 3728708 584 2995755 2996045 3745699 3745989 582 2996478 2996916 3746417 3746855 878 2997298 2997564 3747316 3747582 534 2997725 2997942 3747743 3747960 436 2998837 2999055 3748856 3749074 438 2999656 2999870 3749675 3749889 430 3000361 3000871 3750380 3750890 1022 3001232 3001571 3751251 3751590 680 3001673 3002026 3751692 3752045 708 3002567 3002766 3752586 3752785 400 3002885 3003129 3752904 3753148 490 3003323 3003617 3753342 3753636 590 3004168 3004374 3754187 3754393 414 3005398 3005702 3755418 3755722 610 3006022 3006285 3756042 3756305 528 3006287 3006638 3756307 3756658 704 3006640 3006902 3756660 3756922 526 3007576 3007988 3757596 3758008 826 3007993 3008448 3758013 3758468 912 3008562 3008883 3758582 3758903 644 3009212 3009539 3759232 3759559 656 3010057 3010391 3760077 3760411 670 3010599 3011015 3760439 3760855 834 3011226 3011824 3761066 3761664 1198 3012194 3012408 3762034 3762248 430 3013048 3013257 3762888 3763097 420 3014044 3014312 3763886 3764154 538 3014671 3015264 3764513 3765106 1188 3015391 3015869 3765233 3765711 958 3016410 3016679 3766252 3766521 540 3017502 3017704 3767344 3767546 406 3018001 3018310 3767843 3768152 620 3018312 3018534 3768154 3768376 446 3018534 3018810 3768375 3768651 554 3018921 3019481 3768762 3769322 1122 3019483 3019841 3769324 3769682 718 3020209 3020411 3770050 3770252 406 3020619 3021029 3770460 3770870 822 3021634 3021899 3771475 3771740 532 3022247 3022510 3772088 3772351 528 3023592 3023848 3773433 3773689 514 3024824 3025117 3774665 3774958 588 3025119 3025385 3774960 3775226 534 3025387 3025675 3775228 3775516 578 3025911 3026158 3775753 3776000 496 3026205 3026545 3776047 3776387 682 3026973 3027273 3776815 3777115 602 3027539 3028017 3777381 3777859 958 3028526 3028804 3778368 3778646 558 3029244 3029744 3779086 3779586 1002 3029796 3030092 3779638 3779934 594 3030604 3030868 3780446 3780710 530 3030870 3031319 3780712 3781161 900 3031899 3032116 3781740 3781957 436 3032352 3032773 3782193 3782614 844 3033845 3034463 3783686 3784304 1238 3036792 3037003 3786633 3786844 424 3037599 3038049 3787440 3787890 902 3040459 3040735 3790181 3790457 554 3040791 3041035 3790513 3790757 490 3041133 3041336 3790855 3791058 408 3041443 3041752 3791165 3791474 620 3042030 3042354 3791752 3792076 650 3045415 3045646 3794236 3794467 464 3047381 3047692 3796201 3796512 624 3048253 3048570 3797073 3797390 636 3048572 3048869 3797392 3797689 596 3051344 3051552 3800165 3800373 418 3052159 3052440 3800980 3801261 564 3052674 3053112 3801495 3801933 878 3053387 3053839 3802208 3802660 906 3053841 3054360 3802662 3803181 1040 3054575 3054820 3803396 3803641 492 3055879 3056177 3805093 3805391 598 3056206 3056447 3805420 3805661 484 3056621 3056852 3805834 3806065 464 3056911 3057456 3806124 3806669 1092 3057700 3058064 3806868 3807232 730 3058180 3058454 3807348 3807622 550 3058950 3059224 3808118 3808392 550 3059475 3060477 3808643 3809645 2006 3061062 3062175 3810230 3811343 2228 3062510 3062721 3811678 3811889 424 3063007 3063221 3812175 3812389 430 3063280 3063649 3812448 3812817 740 3063651 3063920 3812819 3813088 540 3065471 3065673 3814639 3814841 406 3066919 3067412 3816087 3816580 988 3067576 3067967 3816744 3817135 784 3068515 3068893 3817683 3818061 758 3068895 3069116 3818063 3818284 444 3069118 3069421 3818286 3818589 608 3069423 3069813 3818591 3818981 782 3070272 3071272 3819440 3820440 2002 3071562 3071879 3820730 3821047 636 3073825 3074209 3826128 3826512 770 3074211 3074467 3826514 3826770 514 3074675 3075016 3826978 3827319 684 3075018 3075219 3827321 3827522 404 3075627 3075887 3827931 3828191 522 3076093 3076307 3828397 3828611 430 3076675 3077333 3828979 3829637 1318 3079514 3079872 3831818 3832176 718 3079982 3080259 3832286 3832563 556 3080471 3080960 3832775 3833264 980 3082615 3082837 3835794 3836016 446 3083760 3084104 3836939 3837283 690 3084106 3084555 3837285 3837734 900 3084557 3084791 3837736 3837970 470 3084793 3084995 3837972 3838174 406 3084997 3085235 3838176 3838414 478 3085432 3085649 3838611 3838828 436 3086328 3086642 3839520 3839834 630 3086755 3087035 3839947 3840227 562 3088324 3088546 3841516 3841738 446 3089701 3089960 3842893 3843152 520 3090100 3090440 3843292 3843632 682 3090550 3090840 3843742 3844032 582 3090842 3091181 3844034 3844373 680 3091438 3091646 3844630 3844838 418 3092188 3092387 3845391 3845590 400 3093004 3093438 3846207 3846641 870 3093603 3094013 3846806 3847216 822 3096735 3096971 3850026 3850262 474 3098602 3099146 3851893 3852437 1090 3099400 3099657 3852691 3852948 516 3099873 3100304 3853165 3853596 864 3100306 3100536 3853598 3853828 462 3100613 3100873 3853905 3854165 522 3100875 3101262 3854167 3854554 776 3102828 3103096 3856120 3856388 538 3104010 3104371 3857302 3857663 724 3104373 3104650 3857665 3857942 556 3105070 3105450 3858362 3858742 762 3105587 3105795 3858879 3859087 418 3105926 3106348 3859218 3859640 846 3106790 3107027 3860082 3860319 476 3107815 3108101 3861108 3861394 574 3136370 3136856 3888426 3888912 974 3138726 3138940 3890782 3890996 430 3139130 3139374 3891186 3891430 490 3139601 3139866 3891657 3891922 532 3139964 3140181 3892020 3892237 436 3140690 3141215 3892746 3893271 1052 3141217 3141434 3893273 3893490 436 3141757 3141962 3893813 3894018 412 3141964 3142233 3894020 3894289 540 3142235 3142542 3894291 3894598 616 3142973 3143239 3895029 3895295 534 3143404 3143749 3895460 3895805 692 3143751 3144101 3895807 3896157 702 3144103 3144774 3896159 3896830 1344 3144779 3145142 3896835 3897198 728 3146202 3146422 3898261 3898481 442 3147235 3147541 3899294 3899600 614 3148313 3148647 3900372 3900706 670 3149634 3149851 3901693 3901910 436 3149949 3150197 3902008 3902256 498 3150769 3151070 3902828 3903129 604 3151429 3151741 3903488 3903800 626 3151748 3152031 3903807 3904090 568 3152247 3152475 3904307 3904535 458 3153099 3153477 3905159 3905537 758 3154115 3154323 3906175 3906383 418 3154885 3155420 3906945 3907480 1072 3155961 3156207 3908018 3908264 494 3158209 3158522 3910262 3910575 628 3158683 3158888 3910736 3910941 412 3158947 3159233 3911000 3911286 574 3159946 3160291 3911999 3912344 692 3160293 3160567 3912346 3912620 550 3161369 3161848 3913422 3913901 960 3162085 3162284 3914138 3914337 400 3162322 3162671 3914375 3914724 700 3162673 3162950 3914726 3915003 556 3163102 3163582 3915155 3915635 962 3163717 3164081 3915770 3916134 730 3164320 3164886 3916373 3916939 1134 3164994 3165304 3917047 3917357 622 3166942 3167162 3918073 3918293 442 3167281 3167625 3918412 3918756 690 3167811 3168095 3918942 3919226 570 3168108 3168349 3919239 3919480 484 3169150 3169519 3920281 3920650 740 3170441 3170648 3920985 3921192 416 3170926 3171296 3921470 3921840 742 3171648 3171884 3929445 3929681 474 3173031 3173423 3930828 3931220 786 3173425 3173841 3931222 3931638 834 3173843 3174134 3931640 3931931 584 3174940 3175571 3932737 3933368 1264 3175780 3176399 3933577 3934196 1240 3177742 3178153 3935539 3935950 824 3178395 3178722 3936192 3936519 656 3178763 3178995 3936560 3936792 466 3179171 3179596 3936968 3937393 852 3180085 3180290 3937882 3938087 412 3180465 3180677 3938262 3938474 426 3182294 3182982 3940091 3940779 1378 3189914 3190126 3941146 3941358 426 3191023 3191357 3942255 3942589 670 3193642 3194308 3945248 3945914 1334 3194640 3194932 3946246 3946538 586 3195231 3195601 3946837 3947207 742 3196380 3196710 3947986 3948316 662 3197240 3197516 3948846 3949122 554 3197518 3197720 3949124 3949326 406 3197829 3198119 3949435 3949725 582 3198565 3198932 3950171 3950538 736 3198983 3199325 3950589 3950931 686 3199381 3199604 3950987 3951210 448 3200311 3200765 3951917 3952371 910 3200929 3201288 3952535 3952894 720 3201523 3201790 3953129 3953396 536 3202490 3202878 3954098 3954486 778 3203844 3204146 3955452 3955754 606 3204148 3204413 3955756 3956021 532 3206894 3207129 3958503 3958738 472 3207164 3207364 3958773 3958973 402 3208065 3208985 3959674 3960594 1842 3209410 3209690 3961019 3961299 562 3209935 3210217 3961544 3961826 566 3210362 3211357 3961971 3962966 1992 3211860 3212062 3963469 3963671 406 3212073 3212317 3963682 3963926 490 3212969 3213384 3964578 3964993 832 3213386 3213675 3964995 3965284 580 3216091 3216301 3967700 3967910 422 3216321 3216588 3967930 3968197 536 3216590 3216827 3968199 3968436 476 3218904 3219257 3970513 3970866 708 3219430 3219860 3971039 3971469 862 3220178 3220382 3971787 3971991 410 3220699 3221095 3972308 3972704 794 3221098 3221375 3972707 3972984 556 3221665 3221879 3973274 3973488 430 3223413 3223624 3975022 3975233 424 3223767 3224178 3975376 3975787 824 3224945 3225207 3976554 3976816 526 3225341 3225550 3976950 3977159 420 3231339 3231637 3982948 3983246 598 3231818 3232017 3983427 3983626 400 3232665 3232876 3984274 3984485 424 3233117 3233332 3984726 3984941 432 3233357 3233892 3984966 3985501 1072 3236878 3237119 3988487 3988728 484 3237429 3237848 3989040 3989459 840 3239079 3239395 3990690 3991006 634 3239947 3240491 3991558 3992102 1090 3240904 3241176 3992515 3992787 546 3241718 3242053 3993329 3993664 672 3242055 3242325 3993666 3993936 542 3242588 3243275 3994200 3994887 1376 3243502 3243917 3995114 3995529 832 3244186 3244391 3995798 3996003 412 3245094 3246040 3996706 3997652 1894 3246042 3246313 3997654 3997925 544 3246641 3247195 3998253 3998807 1110 3247819 3248046 3999431 3999658 456 3248348 3248660 3999960 4000272 626 3248662 3248946 4000274 4000558 570 3249840 3250148 4001450 4001758 618 3250565 3251112 4002174 4002721 1096 3251458 3251673 4003067 4003282 432 3251774 3252130 4003383 4003739 714 3253092 3253375 4004701 4004984 568 3253503 3253740 4005112 4005349 476 3253993 3254348 4005601 4005956 712 3255615 3255842 4007221 4007448 456 3256405 3256625 4008011 4008231 442 3256891 3257382 4008498 4008989 984 3259241 3259464 4010849 4011072 448 3260420 3260640 4012028 4012248 442 3260751 3261063 4012359 4012671 626 3261585 3261826 4013193 4013434 484 3261954 3262468 4013562 4014076 1030 3262470 3263170 4014078 4014778 1402 3263460 3263949 4015068 4015557 980 3263951 3264240 4015559 4015848 580 3264266 3264489 4015874 4016097 448 3264527 3264807 4016135 4016415 562 3264849 3265062 4016457 4016670 428 3265251 3265513 4016859 4017121 526 3266461 3266670 4018069 4018278 420 3267784 3268504 4018998 4019718 1442 3268674 3269035 4019888 4020249 724 3269292 3269587 4020506 4020801 592 3269589 3269983 4020803 4021197 790 3269985 3270250 4021199 4021464 532 3270252 3270708 4021466 4021922 914 3271034 3271275 4022248 4022489 484 3271469 3271701 4022683 4022915 466 3272144 3272367 4023358 4023581 448 3272372 3272594 4023586 4023808 446 3273375 3273701 4024589 4024915 654 3274479 3274820 4025693 4026034 684 3274865 3275107 4026079 4026321 486 3275713 3275975 4026927 4027189 526 3276647 3276864 4027861 4028078 436 3276866 3277286 4028080 4028500 842 3277530 3277854 4028744 4029068 650 3277956 3278194 4029170 4029408 478 3279503 3279704 4033022 4033223 404 3280091 3280307 4033610 4033826 434 3280515 3280799 4034034 4034318 570 3281503 3281717 4035022 4035236 430 3282107 3282345 4035626 4035864 478 3282376 3282608 4035895 4036127 466 3282964 3283206 4036483 4036725 486 3283283 3283638 4036802 4037157 712 3284201 3284402 4037720 4037921 404 3286661 3286910 4040180 4040429 500 3287555 3287899 4041074 4041418 690 3288084 3288288 4041603 4041807 410 3288551 3288909 4042070 4042428 718 3289062 3289305 4042581 4042824 488 3289655 3289855 4044132 4044332 402 3289877 3290113 4044354 4044590 474 3290115 3290582 4044592 4045059 936 3290755 3291112 4045232 4045589 716 3291114 3291324 4045591 4045801 422 3291448 3291914 4045925 4046391 934 3294415 3294681 4048892 4049158 534 3295677 3295895 4050154 4050372 438 3296398 3296801 4050875 4051278 808 3297543 3297742 4052020 4052219 400 3298340 3298676 4052817 4053153 674 3298774 3299360 4053251 4053837 1174 3299731 3299948 4054208 4054425 436 3300663 3300927 4055140 4055404 530 3300929 3301158 4055406 4055635 460 3302463 3302684 4056939 4057160 444 3302991 3303501 4057467 4057977 1022 3305400 3306657 4059876 4061133 2516 3306659 3306903 4061135 4061379 490 3307568 3307857 4062044 4062333 580 3308687 3309085 4063163 4063561 798 3309087 3309496 4063563 4063972 820 3311453 3311752 4065930 4066229 600 3311877 3312139 4066354 4066616 526 3312567 3312796 4067044 4067273 460 3313095 3314016 4067572 4068493 1844 3314043 3314317 4068520 4068794 550 3314619 3314848 4069096 4069325 460 3314994 3315210 4069471 4069687 434 3315237 3315882 4069714 4070359 1292 3316069 3316332 4070546 4070809 528 3316334 3316671 4070811 4071148 676 3317022 3317247 4071499 4071724 452 3317926 3318211 4072403 4072688 572 3319575 3319803 4074052 4074280 458 3320704 3320981 4075181 4075458 556 3321517 3321738 4075994 4076215 444 3321794 3322098 4076271 4076575 610 3322373 3322738 4076850 4077215 732 3322740 3323120 4077217 4077597 762 3323296 3323579 4077773 4078056 568 3323791 3324010 4078268 4078487 440 3324289 3325821 4078766 4080298 3066 3326435 3326781 4080912 4081258 694 3327152 3327606 4081629 4082083 910 3328286 3328491 4082617 4082822 412 3328573 3328944 4082904 4083275 744 3329138 3329874 4083469 4084205 1474 3330017 3330222 4084348 4084553 412 3330305 3331594 4084636 4085925 2580 3332630 3332940 4086962 4087272 622 3332942 3333168 4087274 4087500 454 3333452 3333675 4087784 4088007 448 3334040 3334683 4088372 4089015 1288 3335272 3335486 4089604 4089818 430 3335488 3335690 4089820 4090022 406 3336004 3336375 4090336 4090707 744 3336407 3336708 4090739 4091040 604 3336954 3337849 4091286 4092181 1792 3337851 3338073 4092183 4092405 446 3338209 3338606 4092541 4092938 796 3338608 3339078 4092940 4093410 942 3339276 3339588 4093608 4093920 626 3339755 3339998 4094087 4094330 488 3340842 3341126 4095174 4095458 570 3341254 3341495 4095586 4095827 484 3341503 3341792 4095835 4096124 580 3342146 3342691 4096478 4097023 1092 3343431 3343684 4097763 4098016 508 3343782 3344130 4098114 4098462 698 3344132 3344351 4098464 4098683 440 3344464 3344685 4098796 4099017 444 3344687 3344999 4099019 4099331 626 3345364 3345610 4099696 4099942 494 3345711 3345964 4100043 4100296 508 3347531 3347774 4101863 4102106 488 3348585 3348874 4102918 4103207 580 3349350 3349750 4103689 4104089 802 3350193 3350608 4104532 4104947 832 3350610 3350865 4104949 4105204 512 3350867 3351138 4105206 4105477 544 3352255 3352513 4106593 4106851 518 3353622 3354112 4107960 4108450 982 3356796 3357073 4111134 4111411 556 3366139 3366442 4113372 4113675 608 3367797 3368028 4115030 4115261 464 3370165 3370385 4117398 4117618 442 3370660 3371060 4117893 4118293 802 3371161 3371361 4118394 4118594 402 3371849 3372422 4119082 4119655 1148 3373076 3373278 4120306 4120508 406 3373962 3374538 4121184 4121760 1154 3374755 3375128 4121977 4122350 748 3375420 3375673 4122642 4122895 508 3375711 3376496 4122933 4123718 1572 3376514 3376845 4123736 4124067 664 3377243 3377442 4124465 4124664 400 3377618 3378057 4124840 4125279 880 3378059 3378453 4125281 4125675 790 3379305 3379767 4126527 4126989 926 3379769 3379970 4126991 4127192 404 3379972 3380294 4127194 4127516 646 3381775 3382057 4128998 4129280 566 3382203 3382584 4129426 4129807 764 3382900 3383770 4130123 4130993 1742 3384948 3385674 4132172 4132898 1454 3386228 3386538 4133452 4133762 622 3386569 3386877 4133790 4134098 618 3386989 3387192 4134210 4134413 408 3387265 3387626 4134486 4134847 724 3387934 3388145 4135155 4135366 424 3388256 3388744 4135477 4135965 978 3389365 3389594 4136586 4136815 460 3390014 3390275 4136960 4137221 524 3390277 3390599 4137223 4137545 646 3392293 3392512 4139239 4139458 440 3392557 3392786 4139503 4139732 460 3392788 3393011 4139734 4139957 448 3393173 3393450 4140118 4140395 556 3393686 3394084 4140631 4141029 798 3394140 3394555 4141085 4141500 832 3395220 3395510 4142165 4142455 582 3395701 3396052 4142646 4142997 704 3396054 3396358 4142999 4143303 610 3396638 3396948 4143583 4143893 622 3397136 3397383 4144081 4144328 496 3397399 3397658 4144344 4144603 520 3397963 3398162 4144908 4145107 400 3398383 3398994 4145328 4145939 1224 3399308 3399660 4146253 4146605 706 3399662 3399972 4146607 4146917 622 3399974 3400293 4146919 4147238 640 3400295 3400512 4147240 4147457 436 3400791 3401694 4147736 4148639 1808 3401774 3402104 4148719 4149049 662 3402738 3402963 4149683 4149908 452 3402965 3403364 4149910 4150309 800 3403366 3404046 4150311 4150991 1362 3404282 3404908 4151227 4151853 1254 3405498 3405850 4152443 4152795 706 3406435 3406830 4153380 4153775 792 3407033 3407362 4153978 4154307 660 3407602 3409217 4154547 4156162 3232 3409487 3409824 4156431 4156768 676 3409826 3410193 4156770 4157137 736 3410195 3410933 4157139 4157877 1478 3411367 3411948 4158311 4158892 1164 3412181 3412416 4159125 4159360 472 3412553 3412778 4159497 4159722 452 3412780 3413087 4159724 4160031 616 3413710 3413969 4160654 4160913 520 3415878 3416189 4162867 4163178 624 3417604 3418404 4164594 4165394 1602 3418988 3419228 4165979 4166219 482 3419651 3419918 4166642 4166909 536 3420023 3420385 4167014 4167376 726 3421119 3421407 4168109 4168397 578 3421879 3422207 4168871 4169199 658 3422696 3423208 4169687 4170199 1026 3423250 3423832 4170241 4170823 1166 3423878 3424155 4170871 4171148 556 3424157 3424431 4171150 4171424 550 3424482 3426125 4171484 4173127 3288 3426321 3426619 4173323 4173621 598 3426774 3427305 4173775 4174306 1064 3428346 3429032 4175347 4176033 1374 3429282 3429525 4176283 4176526 488 3430001 3430287 4177001 4177287 574 3430453 3430789 4177454 4177790 674 3431126 3431537 4178127 4178538 824 3431698 3432088 4178699 4179089 782 3432565 3432830 4179566 4179831 532 3432832 3433035 4179833 4180036 408 3434766 3434974 4181767 4181975 418 3435183 3435478 4182184 4182479 592 3435480 3435757 4182481 4182758 556 3436077 3436279 4183078 4183280 406 3437201 3439353 4184202 4186354 4306 3439355 3441199 4186356 4188200 3690 3441372 3441946 4188373 4188947 1150 3441948 3442484 4188949 4189485 1074 3442567 3445133 4189568 4192134 5134 3445135 3445932 4192136 4192933 1596 3445934 3446766 4192935 4193767 1666 3446768 3447008 4193769 4194009 482 3447010 3447961 4194011 4194962 1904 3447963 3448448 4194964 4195449 972 3448621 3450172 4195622 4197173 3104 3450174 3451090 4197175 4198091 1834 3467941 3468347 4199836 4200242 814 3468373 3468755 4200268 4200650 766 3468757 3469776 4200652 4201671 2040 3469778 3470013 4201673 4201908 472 3470015 3470337 4201910 4202232 646 3470339 3470712 4202234 4202607 748 3470837 3471247 4202732 4203142 822 3471249 3472330 4203144 4204225 2164 3473266 3474010 4205161 4205905 1490 3474012 3474340 4205907 4206235 658 3474751 3474955 4206646 4206850 410 3475166 3475532 4207061 4207427 734 3475706 3476308 4207601 4208203 1206 3478532 3479001 4210427 4210896 940 3479003 3479205 4210898 4211100 406 3479381 3479787 4211276 4211682 814 3480317 3480531 4212212 4212426 430 3480674 3480892 4212569 4212787 438 3481588 3482044 4213483 4213939 914 3483129 3483391 4215024 4215286 526 3483405 3483901 4215300 4215796 994 3483903 3484103 4215798 4215998 402 3484812 3485304 4216707 4217199 986 3486203 3486522 4218098 4218417 640 3487530 3487738 4219425 4219633 418 3488086 3488312 4219981 4220207 454 3489056 3489588 4220951 4221483 1066 3489620 3490343 4221515 4222238 1448 3490345 3490778 4222240 4222673 868 3491552 3491969 4223447 4223864 836 3492244 3492530 4224139 4224425 574 3493357 3493806 4225252 4225701 900 3494018 3494564 4225913 4226459 1094 3494566 3494775 4226461 4226670 420 3495233 3495786 4227128 4227681 1108 3497732 3497962 4229636 4229866 462 3498221 3498495 4230125 4230399 550 3500412 3500638 4232316 4232542 454 3502130 3502383 4234034 4234287 508 3511022 3511224 4235206 4235408 406 3511226 3511429 4235410 4235613 408 3511479 3511726 4235663 4235910 496 3512254 3512477 4236438 4236661 448 3512572 3512884 4236756 4237068 626 3513156 3513713 4237340 4237897 1116 3513715 3513932 4237899 4238116 436 3514385 3515230 4238569 4239414 1692 3515240 3515540 4239424 4239724 602 3515918 3516383 4240102 4240567 932 3516385 3516757 4240569 4240941 746 3516759 3516985 4240943 4241169 454 3516987 3517215 4241171 4241399 458 3517217 3517614 4241401 4241798 796 3517616 3517842 4241800 4242026 454 3518195 3518414 4242379 4242598 440 3518416 3518675 4242600 4242859 520 3520327 3520731 4244510 4244914 810 3520965 3521184 4245148 4245367 440 3521285 3521538 4245468 4245721 508 3522164 3522606 4246347 4246789 886 3523701 3524476 4247883 4248658 1552 3524613 3524845 4248795 4249027 466 3525597 3526027 4249779 4250209 862 3526302 3526895 4250484 4251077 1188 3526994 3527511 4251176 4251693 1036 3527798 3528156 4251980 4252338 718 3529862 3530732 4254044 4254914 1742 3531598 3531959 4255780 4256141 724 3533168 3533540 4257350 4257722 746 3533605 3533840 4257787 4258022 472 3533944 3534609 4258126 4258791 1332 3534872 3535125 4259054 4259307 508 3535502 3535933 4259684 4260115 864 3537716 3538058 4261881 4262223 686 3538118 3538388 4262283 4262553 542 3538720 3538988 4262885 4263153 538 3539188 3539423 4263353 4263588 472 3542064 3542270 4266227 4266433 414 3543166 3543377 4267329 4267540 424 3544363 3544621 4268530 4268788 518 3545028 3545338 4269195 4269505 622 3546156 3546421 4270257 4270522 532 3547430 3547650 4271531 4271751 442 3547653 3548003 4271754 4272104 702 3548005 3548356 4272106 4272457 704 3548687 3548920 4272788 4273021 468 3549389 3549652 4273490 4273753 528 3549996 3550236 4274097 4274337 482 3550457 3550734 4274558 4274835 556 3550966 3551195 4275067 4275296 460 3551197 3551564 4275298 4275665 736 3551566 3551783 4275667 4275884 436 3552517 3552752 4276618 4276853 472 3557336 3557543 4282277 4282484 416 3557579 3557826 4282520 4282767 496 3558241 3558696 4283182 4283637 912 3558933 3559148 4283874 4284089 432 3559415 3559617 4284356 4284558 406 3559675 3559992 4284616 4284933 636 3560557 3560792 4285498 4285733 472 3561803 3562239 4289596 4290032 874 3562646 3563634 4290439 4291427 1978 3563858 3564327 4291651 4292120 940 3564329 3564567 4292122 4292360 478 3564976 3565428 4292769 4293221 906 3565472 3566159 4293265 4293952 1376 3566161 3566576 4293954 4294369 832 3566584 3567271 4294377 4295064 1376 3567273 3567496 4295066 4295289 448 3567597 3567963 4295390 4295756 734 3568254 3568461 4296047 4296254 416 3568479 3569058 4296272 4296851 1160 3569644 3569895 4297437 4297688 504 3570512 3570762 4298305 4298555 502 3570926 3571649 4298719 4299442 1448 3571651 3571952 4299444 4299745 604 3572002 3572237 4299795 4300030 472 3572517 3572896 4300309 4300688 760 3574565 3574895 4305813 4306143 662 3576061 3576403 4307310 4307652 686 3577052 3577403 4308301 4308652 704 3577465 3577691 4308714 4308940 454 3582685 3582946 4312337 4312598 524 3587802 3588115 4317457 4317770 628 3588568 3588968 4318224 4318624 802 3589765 3590102 4319421 4319758 676 3590901 3591116 4321383 4321598 432 3591778 3592015 4322260 4322497 476 3594259 3594815 4324741 4325297 1114 3596756 3597003 4327997 4328244 496 3597005 3597336 4328246 4328577 664 3597836 3598095 4329077 4329336 520 3598136 3598539 4329377 4329780 808 3598541 3598741 4329782 4329982 402 3600034 3600616 4331275 4331857 1166 3601152 3601384 4332393 4332625 466 3601778 3602255 4333022 4333499 956 3603197 3603546 4334441 4334790 700 3603984 3604316 4335228 4335560 666 3605752 3606017 4336996 4337261 532 3606688 3606959 4337932 4338203 544 3607216 3607919 4338460 4339163 1408 3609449 3610027 4340693 4341271 1158 3610194 3610474 4341438 4341718 562 3610579 3610791 4357178 4357390 426 3611118 3611583 4357717 4358182 932 3612710 3613064 4359309 4359663 710 3626702 3626958 4373174 4373430 514 3628331 3628536 4374804 4375009 412 3633949 3634208 4380431 4380690 520 3634864 3635174 4381346 4381656 622 3635619 3635905 4382102 4382388 574 3636126 3636478 4382609 4382961 706 3637117 3637463 4383427 4383773 694 3638371 3638672 4384682 4384983 604 3639178 3639518 4385489 4385829 682 3640481 3641041 4386792 4387352 1122 3642959 3643204 4389270 4389515 492 3644078 3644298 4390389 4390609 442 3647398 3647657 4393713 4393972 520 3647716 3647954 4394031 4394269 478 3647956 3648162 4394271 4394477 414 3649454 3649665 4395768 4395979 424 3651810 3652304 4396924 4397418 990 3652306 3652647 4397420 4397761 684 3652939 3653149 4407075 4407285 422 3653920 3654673 4408056 4408809 1508 3654825 3655199 4408961 4409335 750 3655965 3656738 4410101 4410874 1548 3656740 3656944 4410876 4411080 410 3656993 3657606 4411129 4411742 1228 3657893 3658191 4412029 4412327 598 3659093 3659319 4413229 4413455 454 3659321 3659565 4413457 4413701 490 3660257 3660621 4414393 4414757 730 3660857 3661098 4414993 4415234 484 3661745 3662009 4415881 4416145 530 3662409 3662640 4416545 4416776 464 3663766 3664057 4417903 4418194 584 3665082 3665317 4419219 4419454 472 3666000 3666247 4420137 4420384 496 3666534 3667018 4420671 4421155 970 3667554 3667966 4421692 4422104 826 3668010 3668215 4422148 4422353 412 3668721 3669160 4422859 4423298 880 3669276 3669631 4423414 4423769 712 3671681 3672018 4425819 4426156 676 3672508 3672758 4426647 4426897 502 3672949 3673647 4427088 4427786 1398 3673649 3673917 4427788 4428056 538 3674645 3674941 4428784 4429080 594 3675309 3675547 4429448 4429686 478 3675870 3676138 4430009 4430277 538 3676916 3677337 4431055 4431476 844 3677402 3677646 4431541 4431785 490 3677652 3677869 4431791 4432008 436 3678398 3678627 4432537 4432766 460 3678911 3679113 4433050 4433252 406 3679160 3679838 4433299 4433977 1358 3679840 3681206 4433979 4435345 2734 3681735 3682160 4435874 4436299 852 3682412 3682652 4436551 4436791 482 3683081 3683427 4437220 4437566 694 3685228 3685473 4439367 4439612 492 3685475 3685803 4439614 4439942 658 3686446 3686649 4440575 4440778 408 3688282 3688563 4442430 4442711 564 3688836 3689035 4442984 4443183 400 3689145 3689410 4443293 4443558 532 3690180 3690839 4444328 4444987 1320 3690937 3691169 4445085 4445317 466 3691954 3692210 4446102 4446358 514 3693101 3693406 4447249 4447554 612 3693748 3693984 4447896 4448132 474 3693986 3694370 4448134 4448518 770 3694620 3695510 4448768 4449658 1782 3695512 3695799 4449660 4449947 576 3695801 3696012 4449949 4450160 424 3696029 3696599 4450177 4450747 1142 3697983 3698208 4452131 4452356 452 3699097 3699323 4453245 4453471 454 3701424 3701642 4455572 4455790 438 3703997 3704288 4457988 4458279 584 3705185 3705574 4459176 4459565 780 3706198 3706409 4460023 4460234 424 3707862 3708145 4461687 4461970 568 3709603 3709837 4469181 4469415 470 3709933 3710247 4469511 4469825 630 3710513 3710802 4470091 4470380 580 3711750 3711960 4471328 4471538 422 3712392 3712779 4471970 4472357 776 3713289 3713821 4472867 4473399 1066 3714020 3714404 4473598 4473982 770 3714676 3715104 4474254 4474682 858 3716329 3716842 4475907 4476420 1028 3716983 3717762 4476561 4477340 1560 3719705 3719938 4477879 4478112 468 3720338 3720573 4478512 4478747 472 3721244 3721503 4479418 4479677 520 3721646 3721911 4479820 4480085 532 3722279 3722535 4480453 4480709 514 3722805 3723019 4480979 4481193 430 3723075 3723281 4481249 4481455 414 3724433 3724962 4482607 4483136 1060 3726176 3726658 4484350 4484832 966 3727281 3727646 4485455 4485820 732 3728290 3728727 4486464 4486901 876 3728729 3729240 4486903 4487414 1024 3729276 3729480 4487450 4487654 410 3730090 3730365 4488264 4488539 552 3730367 3730695 4488541 4488869 658 3730697 3731216 4488871 4489390 1040 3731260 3731625 4489434 4489799 732 3732559 3733019 4490733 4491193 922 3734584 3734939 4492670 4493025 712 3735668 3736147 4493754 4494233 960 3737155 3737386 4495241 4495472 464 3737753 3737954 4495839 4496040 404 3738089 3738313 4496175 4496399 450 3738729 3739059 4496816 4497146 662 3748776 3749229 4502112 4502565 908 3749543 3749793 4502879 4503129 502 3749867 3750081 4503203 4503417 430 3750437 3750638 4503773 4503974 404 3751517 3751877 4504853 4505213 722 3753515 3753815 4506851 4507151 602 3754605 3754847 4509312 4509554 486 3754849 3755334 4509556 4510041 972 3755627 3755831 4510333 4510537 410 3756558 3757025 4511264 4511731 936 3757315 3757756 4512021 4512462 884 3757758 3757960 4512464 4512666 406 3758007 3758515 4512713 4513221 1018 3758517 3759460 4513223 4514166 1888 3759462 3759711 4514168 4514417 500 3759827 3760224 4514534 4514931 796 3760533 3760761 4515240 4515468 458 3760763 3760987 4515470 4515694 450 3761284 3761599 4515991 4516306 632 3762518 3762777 4517225 4517484 520 3762983 3763182 4517690 4517889 400 3763553 3764842 4518260 4519549 2580 3765234 3765545 4519941 4520252 624 3765547 3766040 4520254 4520747 988 3766051 3766618 4520758 4521325 1136 3766620 3767143 4521327 4521850 1048 3767145 3767393 4521852 4522100 498 3767458 3767795 4522164 4522501 676 3767797 3768183 4522503 4522889 774 3768185 3768870 4522891 4523576 1372 3768872 3769090 4523578 4523796 438 3769261 3770371 4523967 4525077 2222 3770373 3770664 4525079 4525370 584 3771966 3772192 4526537 4526763 454 3773138 3773352 4527709 4527923 430 3773755 3774162 4528326 4528733 816 3776036 3776244 4536639 4536847 418 3776321 3776625 4536924 4537228 610 3776947 3777179 4537550 4537782 466 3777313 3777589 4537916 4538192 554 3779808 3780062 4540399 4540653 510 3780064 3780305 4540655 4540896 484 3780713 3780996 4541304 4541587 568 3780998 3781418 4541589 4542009 842 3781555 3781957 4542146 4542548 806 3782118 3782419 4542709 4543010 604 3782421 3782750 4543012 4543341 660 3783726 3784069 4544317 4544660 688 3784331 3784597 4544922 4545188 534 3784602 3785323 4545193 4545914 1444 3786381 3786723 4546972 4547314 686 3786899 3787272 4547491 4547864 748 3787546 3787831 4548138 4548423 572 3788790 3789016 4549382 4549608 454 3790002 3790241 4550594 4550833 480 3790278 3790613 4550870 4551205 672 3790615 3790857 4551207 4551449 486 3790859 3791332 4551451 4551924 948 3791360 3792067 4551953 4552660 1416 3792429 3792778 4553022 4553371 700 3792963 3793216 4553556 4553809 508 3793926 3794477 4554519 4555070 1104 3806077 3806356 4563696 4563975 560 3806403 3806707 4564022 4564326 610 3807195 3807668 4564814 4565287 948 3807670 3808145 4565289 4565764 952 3808147 3808399 4565766 4566018 506 3808401 3809444 4566020 4567063 2088 3809482 3809771 4567101 4567390 580 3810342 3810545 4567961 4568164 408 3810547 3810967 4568166 4568586 842 3810969 3811665 4568588 4569284 1394 3812609 3812917 4570228 4570536 618 3813764 3814814 4571384 4572434 2102 3815632 3815848 4573252 4573468 434 3816575 3816783 4574197 4574405 418 3816812 3817209 4574434 4574831 796 3818185 3818485 4575807 4576107 602 3818930 3819433 4576552 4577055 1008 3819549 3820522 4577171 4578144 1948 3820524 3820735 4578146 4578357 424 3821010 3821278 4578632 4578900 538 3821979 3822839 4579601 4580461 1722 3822841 3823159 4580463 4580781 638 3823161 3823491 4580783 4581113 662 3825126 3825420 4583433 4583727 590 3825941 3826140 4584248 4584447 400 3826241 3827247 4584548 4585554 2014 3827315 3828008 4585622 4586315 1388 3828323 3828528 4586630 4586835 412 3828546 3828753 4586853 4587060 416 3829026 3829300 4587333 4587607 550 3829302 3829506 4587609 4587813 410 3832228 3832565 4590535 4590872 676 3833074 3833285 4591381 4591592 424 3833441 3833715 4591748 4592022 550 3833730 3833942 4592037 4592249 426 3835805 3836025 4635899 4636119 442 3838874 3839110 4638968 4639204 474 3839922 3840164 4640815 4641057 486 3840577 3840788 4641469 4641680 424 3841117 3841531 4642009 4642423 830 3842055 3842270 4642947 4643162 432 3844483 3844769 4645375 4645661 574 3850393 3850610 4654628 4654845 436 3853134 3853392 4657369 4657627 518 3853647 3853982 4657882 4658217 672 3854970 3855221 4659206 4659457 504 3855564 3855796 4659800 4660032 466 3856044 3856428 4660280 4660664 770 3857119 3857364 4661355 4661600 492 3857692 3857927 4661928 4662163 472 3858746 3859020 4662982 4663256 550 3859488 3859690 4664232 4664434 406 3860661 3860920 4665405 4665664 520 3860922 3861384 4665666 4666128 926 3862311 3862512 4667055 4667256 404 3862995 3863329 4667739 4668073 670 3864047 3864436 4668791 4669180 780 3864714 3865269 4669458 4670013 1112 3873101 3873357 4673094 4673350 514 3873359 3873625 4673352 4673618 534 3874008 3874337 4674000 4674329 660 3875486 3875697 4675478 4675689 424 3877490 3877873 4677482 4677865 768 3877884 3878092 4677876 4678084 418 3879782 3880017 4679774 4680009 472 3880497 3880882 4680489 4680874 772 3880884 3881112 4680876 4681104 458 3881114 3881481 4681106 4681473 736 3881784 3882402 4681775 4682393 1238 3882404 3882683 4682395 4682674 560 3882685 3883000 4682676 4682991 632 3883532 3883858 4683523 4683849 654 3883860 3884079 4683851 4684070 440 3884159 3884426 4684150 4684417 536 3887960 3888289 4690425 4690754 660 3891377 3891750 4693842 4694215 748 3892613 3892818 4695078 4695283 412 3893186 3893391 4695651 4695856 412 3905045 3905429 4705510 4705894 770 3907598 3907833 4708063 4708298 472 3908983 3909240 4709448 4709705 516 3911180 3911441 4718382 4718643 524 3912307 3912572 4719509 4719774 532 3912787 3913008 4719989 4720210 444 3913071 3913378 4720272 4720579 616 3913380 3914138 4720581 4721339 1518 3914140 3914342 4721341 4721543 406 3914443 3914774 4721644 4721975 664 3914848 3916092 4722049 4723293 2490 3916211 3916485 4723412 4723686 550 3916700 3916965 4723901 4724166 532 3916967 3917247 4724168 4724448 562 3917273 3917733 4724474 4724934 922 3917861 3919833 4725062 4727034 3946 3919835 3920254 4727036 4727455 840 3920256 3920953 4727457 4728154 1396 3921084 3921346 4728285 4728547 526 3921557 3921943 4728758 4729144 774 3922075 3922345 4729276 4729546 542 3923190 3923401 4730391 4730602 424 3924356 3924810 4731557 4732011 910 3924947 3925200 4732148 4732401 508 3925721 3925958 4732922 4733159 476 3928391 3928805 4735593 4736007 830 3928807 3929180 4736009 4736382 748 3929182 3929417 4736384 4736619 472 3929869 3930141 4737071 4737343 546 3930676 3930940 4737879 4738143 530 3930942 3931172 4738145 4738375 462 3931174 3931620 4738377 4738823 894 3932054 3932535 4739257 4739738 964 3932573 3933133 4739776 4740336 1122 3933261 3933512 4740464 4740715 504 3933609 3934150 4740812 4741353 1084 3934479 3934711 4741682 4741914 466 3934713 3935109 4741916 4742312 794 3935165 3935694 4742368 4742897 1060 3935747 3936714 4742950 4743917 1936 3937378 3937780 4744581 4744983 806 3937782 3938147 4744985 4745350 732 3938339 3938586 4745542 4745789 496 3938726 3938953 4745932 4746159 456 3939656 3940429 4746862 4747635 1548 3940467 3940849 4747673 4748055 766 3941290 3941587 4748496 4748793 596 3941876 3942495 4749083 4749702 1240 3942537 3943049 4749743 4750255 1026 3943061 3943705 4750267 4750911 1290 3943851 3944118 4751057 4751324 536 3944336 3944674 4751541 4751879 678 3944802 3945035 4752007 4752240 468 3945350 3945775 4752556 4752981 852 3946383 3946652 4753589 4753858 540 3947539 3947758 4754745 4754964 440 3947893 3948155 4755099 4755361 526 3949865 3950206 4757073 4757414 684 3950601 3950815 4757809 4758023 430 3951168 3951462 4758379 4758673 590 3953182 3953508 4760393 4760719 654 3954320 3954533 4761534 4761747 428 3955253 3955479 4762467 4762693 454 3957900 3958491 4765080 4765671 1184 3958966 3959213 4766146 4766393 496 3959407 3959684 4766587 4766864 556 3960040 3960576 4767220 4767756 1074 3960579 3961420 4767759 4768600 1684 3961588 3961828 4768768 4769008 482 3961830 3962173 4769010 4769353 688 3962188 3962389 4769368 4769569 404 3962454 3962761 4769634 4769941 616 3963037 3963652 4770217 4770832 1232 3963654 3964503 4770834 4771683 1700 3965149 3965452 4772329 4772632 608 3965454 3965663 4772634 4772843 420 3965878 3966125 4773058 4773305 496 3966524 3967018 4773704 4774198 990 3967020 3967264 4774200 4774444 490 3967437 3967796 4774617 4774976 720 3967798 3968030 4774978 4775210 466 3969369 3970114 4776552 4777297 1492 3971252 3971598 4778435 4778781 694 3972240 3972529 4779423 4779712 580 3972638 3973086 4779821 4780269 898 3973882 3974154 4781065 4781337 546 3974559 3974824 4781742 4782007 532 3975080 3975311 4782263 4782494 464 3976549 3976943 4783731 4784125 790 3977350 3977590 4784532 4784772 482 3978430 3978700 4785612 4785882 542 3978702 3978920 4785884 4786102 438 3979246 3979463 4786428 4786645 436 3979950 3980813 4787132 4787995 1728 3983060 3983408 4790252 4790600 698 3983798 3984254 4790991 4791447 914 3984350 3985017 4791543 4792210 1336 3985785 3985988 4792996 4793199 408 3985990 3986378 4793201 4793589 778 3986526 3986898 4793737 4794109 746 3987329 3987584 4794540 4794795 512 3988519 3988758 4795730 4795969 480 3988758 3989024 4795970 4796236 534 3989842 3990281 4797054 4797493 880 3990574 3990824 4797786 4798036 502 3991069 3991298 4798281 4798510 460 3994640 3994891 4801852 4802103 504 3998658 3999242 4806754 4807338 1170 3999244 3999506 4807340 4807602 526 4001721 4001947 4811588 4811814 454 4002078 4002350 4811945 4812217 546 4002433 4002653 4812300 4812520 442 4002679 4002974 4812546 4812841 592 4002976 4003592 4812843 4813459 1234 4003651 4004132 4813518 4813999 964 4004500 4004978 4814367 4814845 958 4006636 4006971 4816508 4816843 672 4007150 4007604 4817022 4817476 910 4007907 4008189 4817781 4818063 566 4009409 4009691 4819297 4819579 566 4010714 4011133 4820601 4821020 840 4012706 4013140 4822593 4823027 870 4013300 4013716 4823188 4823604 834 4013892 4014726 4823782 4824616 1670 4014737 4015625 4824627 4825515 1778 4015657 4015934 4825547 4825824 556 4016125 4016741 4826015 4826631 1234 4016743 4017305 4826633 4827195 1126 4017548 4017783 4827438 4827673 472 4017785 4018011 4827675 4827901 454 4018598 4018800 4828488 4828690 406 4018898 4019521 4828788 4829411 1248 4019523 4019855 4829413 4829745 666 4019861 4020179 4829749 4830067 638 4020181 4020673 4830069 4830561 986 4020843 4021207 4830731 4831095 730 4021209 4021554 4831097 4831442 692 4021683 4021942 4831570 4831829 520 4022289 4022618 4832176 4832505 660 4023615 4023844 4833502 4833731 460 4024014 4024270 4833901 4834157 514 4024386 4024747 4834273 4834634 724 4028184 4028599 4837882 4838297 832 4030642 4030915 4840340 4840613 548 4031326 4031698 4841024 4841396 746 4032014 4032255 4841713 4841954 484 4032514 4032788 4842213 4842487 550 4033458 4033856 4843160 4843558 798 4033858 4034119 4843560 4843821 524 4034157 4034674 4843859 4844376 1036 4034682 4035035 4844384 4844737 708 4035648 4036270 4845361 4845983 1246 4036272 4036751 4845985 4846464 960 4036971 4037300 4846682 4847011 660 4037310 4037891 4847021 4847602 1164 4038498 4039102 4848038 4848642 1210 4039724 4039958 4849264 4849498 470 4040674 4040905 4850213 4850444 464 4040907 4041365 4850446 4850904 918 4041665 4042311 4851205 4851851 1294 4042313 4042580 4851853 4852120 536 4042808 4043242 4852348 4852782 870 4043940 4044491 4853480 4854031 1104 4044493 4044810 4854033 4854350 636 4045175 4045638 4854715 4855178 928 4046696 4047212 4856236 4856752 1034 4047348 4047597 4856889 4857138 500 4048169 4048373 4857710 4857914 410 4048529 4048757 4858070 4858298 458 4049515 4049832 4859053 4859370 636 4050350 4050549 4859888 4860087 400 4050551 4050882 4860089 4860420 664 4052298 4052503 4861797 4862002 412 4052784 4053048 4862283 4862547 530 4053818 4054023 4863317 4863522 412 4055063 4055292 4864450 4864679 460 4055827 4056695 4865214 4866082 1738 4056823 4057370 4866210 4866757 1096 4057496 4057758 4866883 4867145 526 4057779 4058383 4867167 4867771 1210 4058682 4058912 4868070 4868300 462 4058914 4059128 4868302 4868516 430 4059990 4060374 4869378 4869762 770 4065903 4066156 4875289 4875542 508 4070076 4070469 4880235 4880628 788 4071254 4071466 4881413 4881625 426 4072146 4072369 4882305 4882528 448 4073229 4073457 4883388 4883616 458 4073818 4074128 4883977 4884287 622 4074145 4074371 4884304 4884530 454 4074451 4074664 4884610 4884823 428 4074666 4075524 4884825 4885683 1718 4075844 4076090 4886003 4886249 494 4076865 4077144 4889090 4889369 560 4078137 4078378 4890361 4890602 484 4078380 4078660 4890604 4890884 562 4078874 4079490 4891098 4891714 1234 4079740 4080014 4891964 4892238 550 4080655 4081100 4892879 4893324 892 4082241 4082495 4894465 4894719 510 4082650 4083118 4894874 4895342 938 4083120 4083610 4895344 4895834 982 4083612 4083818 4895836 4896042 414 4083823 4084085 4896047 4896309 526 4084114 4084446 4896338 4896670 666 4084924 4085191 4897148 4897415 536 4085768 4085980 4897991 4898203 426 4088405 4088620 4900628 4900843 432 4088622 4088887 4900845 4901110 532 4089204 4089568 4901415 4901779 730 4093600 4094019 4907147 4907566 840 4094283 4095506 4907830 4909053 2448 4095607 4095977 4909154 4909524 742 4097108 4097318 4910655 4910865 422 4097955 4098496 4911502 4912043 1084 4099287 4099550 4912834 4913097 528 4099936 4100150 4913483 4913697 430 4100221 4100472 4913768 4914019 504 4101847 4102396 4915394 4915943 1100 4102832 4103518 4916379 4917065 1374 4103648 4103949 4917196 4917497 604 4104111 4104346 4917659 4917894 472 4104468 4104676 4918016 4918224 418 4104678 4104886 4918226 4918434 418 4105666 4105981 4919214 4919529 632 4106308 4106567 4919855 4920114 520 4107268 4107796 4920815 4921343 1058 4108134 4108363 4921681 4921910 460 4108950 4109289 4922497 4922836 680 4109737 4110009 4923284 4923556 546 4110197 4110431 4923744 4923978 470 4110433 4110670 4923980 4924217 476 4110942 4111206 4924489 4924753 530 4112872 4113113 4926419 4926660 484 4113531 4113841 4927173 4927483 622 4114131 4114333 4927773 4927975 406 4114335 4114669 4927977 4928311 670 4115275 4115600 4928917 4929242 652 4116503 4116960 4931583 4932040 916 4117834 4118324 4932914 4933404 982 4118491 4118702 4933571 4933782 424 4118758 4119248 4933838 4934328 982 4119603 4120087 4934683 4935167 970 4120353 4120633 4935433 4935713 562 4120662 4121417 4935742 4936497 1512 4121652 4121888 4936732 4936968 474 4121923 4122259 4937003 4937339 674 4124464 4124851 4939544 4939931 776 4125654 4125980 4946126 4946452 654 4127211 4127562 4947683 4948034 704 4129938 4130145 4950410 4950617 416 4130200 4130488 4950672 4950960 578 4131927 4132171 4952399 4952643 490 4135402 4135606 4955874 4956078 410 4136436 4136795 4956908 4957267 720 4137236 4137510 4957708 4957982 550 4137555 4137781 4958027 4958253 454 4137861 4138078 4958333 4958550 436 4138590 4138819 4959062 4959291 460 4139421 4139629 4959893 4960101 418 4139953 4140262 4960426 4960735 620 4141642 4141843 4962115 4962316 404 4142728 4143062 4963201 4963535 670 4143891 4144140 4964364 4964613 500 4144322 4144545 4964795 4965018 448 4144994 4145292 4965467 4965765 598 4145384 4145652 4965857 4966125 538 4145692 4145913 4966165 4966386 444 4146763 4147047 4967236 4967520 570 4147330 4147624 4967803 4968097 590 4149229 4149642 4969703 4970116 828 4150207 4150508 4970681 4970982 604 4150552 4150888 4971026 4971362 674 4151440 4151657 4971668 4971885 436 4151809 4152222 4972037 4972450 828 4152388 4152636 4972616 4972864 498 4153810 4154138 4974038 4974366 658 4154273 4154567 4974501 4974795 590 4155818 4156348 4976046 4976576 1062 4156746 4156966 4976974 4977194 442 4157626 4158023 4977854 4978251 796 4158157 4158450 4978385 4978678 588 4158561 4158838 4981417 4981694 556 4158861 4159219 4981717 4982075 718 4160709 4161251 4983565 4984107 1086 4162354 4162742 4985210 4985598 778 4162744 4163523 4985600 4986379 1560 4163525 4163789 4986381 4986645 530 4164001 4164435 4986857 4987291 870 4164437 4164648 4987293 4987504 424 4164772 4165237 4987628 4988093 932 4165275 4165657 4988131 4988513 766 4165950 4166462 4988720 4989232 1026 4166464 4166760 4989234 4989530 594 4166769 4167388 4989541 4990160 1240 4167430 4167786 4990201 4990557 714 4168430 4168872 4991201 4991643 886 4168874 4169134 4991645 4991905 522 4170257 4170470 4992862 4993075 428 4172858 4173811 4995446 4996399 1908 4173886 4174106 4996474 4996694 442 4174116 4175013 4996704 4997601 1796 4175015 4175909 4997603 4998497 1790 4175950 4176241 4998539 4998830 584 4176243 4176538 4998832 4999127 592 4176894 4177208 4999483 4999797 630 4177351 4178584 4999819 5001052 2468 4178586 4179345 5001054 5001813 1520 4179578 4179837 5002046 5002305 520 4180073 4180287 5002541 5002755 430 4180289 4180605 5002757 5003073 634 4181117 4181358 5003585 5003826 484 4181831 4182169 5004299 5004637 678 4182488 4182726 5004956 5005194 478 4182882 4183189 5005350 5005657 616 4183488 4183996 5005956 5006464 1018 4184046 4184630 5006514 5007098 1170 4184817 4185043 5007285 5007511 454 4185045 4185443 5007513 5007911 798 4185445 4185778 5007913 5008246 668 4186344 4186612 5008812 5009080 538 4186737 4187343 5009205 5009811 1214 4187861 4188293 5010258 5010690 866 4192163 4192395 5014560 5014792 466 4192418 4192617 5014815 5015014 400 4192805 4193098 5015202 5015495 588 4194087 4194323 5016484 5016720 474 4194325 4194575 5016722 5016972 502 4195053 4195357 5017450 5017754 610 4195965 4196318 5018362 5018715 708 4197270 4197511 5019667 5019908 484 4197638 4198220 5020035 5020617 1166 4198698 4198935 5021095 5021332 476 4198943 4199582 5021340 5021979 1280 4201392 4201604 5023768 5023980 426 4204214 4204438 5026590 5026814 450 4204652 4205249 5027028 5027625 1196 4205569 4205976 5027947 5028354 816 4206137 4206386 5028515 5028764 500 4206570 4207144 5028948 5029522 1150 4207599 4207883 5029976 5030260 570 4207885 4208160 5030262 5030537 552 4208277 4208617 5030654 5030994 682 4208854 4209342 5031230 5031718 978 4209832 4210413 5032208 5032789 1164 4211637 4212090 5033606 5034059 908 4213347 4213957 5035316 5035926 1222 4213959 4214347 5035928 5036316 778 4214481 4214751 5036450 5036720 542 4217734 4217997 5039704 5039967 528 4218639 4218843 5040609 5040813 410 4220056 4220269 5042026 5042239 428 4220349 4220555 5042320 5042526 414 4220557 4220897 5042528 5042868 682 4221273 4221491 5043244 5043462 438 4222189 4222406 5044160 5044377 436 4223590 4223810 5045561 5045781 442 4224226 4224461 5046197 5046432 472 4224517 4224776 5046488 5046747 520 4225045 4225323 5047016 5047294 558 4225735 4225970 5047706 5047941 472 4229111 4229551 5057182 5057622 882 4229679 4229908 5057750 5057979 460 4229994 4230336 5058065 5058407 686 4230657 4231155 5058728 5059226 998 4231157 4231535 5059228 5059606 758 4232285 4232582 5060356 5060653 596 4232761 4232992 5060832 5061063 464 4233381 4233656 5061466 5061741 552 4234440 4234647 5062525 5062732 416 4235356 4235672 5063441 5063757 634 4237564 4237988 5065649 5066073 850 4238057 4238268 5066142 5066353 424 4238406 4238620 5066491 5066705 430 4238622 4238986 5066707 5067071 730 4239483 4240332 5067568 5068417 1700 4240577 4240851 5068662 5068936 550 4241194 4241513 5069279 5069598 640 4241860 4242134 5069945 5070219 550 4242340 4242595 5070425 5070680 512 4242692 4242965 5070777 5071050 548 4243246 4243553 5071331 5071638 616 4243777 4244103 5071862 5072188 654 4244267 4244585 5072352 5072670 638 4244704 4245302 5072789 5073387 1198 4245304 4245658 5073389 5073743 710 4245858 4246069 5073943 5074154 424 4246359 4246764 5074444 5074849 812 4247264 4247653 5075257 5075646 780 4247873 4248118 5075866 5076111 492 4250222 4250493 5078215 5078486 544 4250517 4250895 5078510 5078888 758 4253485 4253771 5081478 5081764 574 4253773 4254142 5081766 5082135 740 4254248 4254495 5082241 5082488 496 4254560 4254856 5082553 5082849 594 4256676 4257136 5084669 5085129 922 4259211 4259425 5087175 5087389 430 4262253 4262478 5090217 5090442 452 4263080 4263430 5091044 5091394 702 4263432 4263811 5091396 5091775 760 4264612 4264826 5092576 5092790 430 4267726 4267949 5095682 5095905 448 4267951 4268300 5095907 5096256 700 4271274 4271688 5099230 5099644 830 4272543 4272784 5100500 5100741 484 4274885 4275144 5102841 5103100 520 4275257 4275698 5103213 5103654 884 4275783 4276051 5103739 5104007 538 4276498 4276886 5104454 5104842 778 4277592 4277901 5105547 5105856 620 4278059 4278511 5106014 5106466 906 4278860 4279104 5106815 5107059 490 4280733 4281019 5108691 5108977 574 4282323 4282554 5110281 5110512 464 4282634 4282898 5110592 5110856 530 4282979 4283305 5110938 5111264 654 4283580 4283866 5111539 5111825 574 4284575 4284796 5112534 5112755 444 4284945 4285241 5112904 5113200 594 4285243 4285625 5113202 5113584 766 4285817 4286408 5113776 5114367 1184 4286746 4286983 5114705 5114942 476 4287171 4287708 5115130 5115667 1076 4287908 4288139 5115867 5116098 464 4289459 4289694 5117418 5117653 472 4291742 4292213 5119701 5120172 944 4294024 4294328 5121519 5121823 610 4294488 4294792 5121983 5122287 610 4295091 4295297 5122586 5122792 414 4295299 4295540 5122794 5123035 484 4295545 4295804 5123040 5123299 520 4295971 4296203 5123466 5123698 466 4296217 4297019 5123712 5124514 1606 4298256 4298470 5125751 5125965 430 4298526 4298730 5126021 5126225 410 4299245 4299477 5126740 5126972 466 4300511 4300721 5128006 5128216 422 4301558 4301780 5129053 5129275 446 4301827 4302040 5129322 5129535 428 4303916 4304296 5131411 5131791 762 4312689 4312935 5142354 5142600 494 4315512 4315729 5145178 5145395 436 4318700 4318931 5148366 5148597 464 4323945 4324269 5153204 5153528 650 4324271 4324481 5153530 5153740 422 4325926 4326534 5155186 5155794 1218 4327141 4327364 5156401 5156624 448 4327881 4328194 5157141 5157454 628 4328196 4328668 5157456 5157928 946 4328796 4329079 5158056 5158339 568 4329081 4329292 5158341 5158552 424 4330003 4330414 5159263 5159674 824 4330464 4330844 5159724 5160104 762 4330881 4331442 5160141 5160702 1124 4331444 4331982 5160704 5161242 1078 4333040 4333250 5162300 5162510 422 4334154 4334449 5163414 5163709 592 4334499 4334789 5163759 5164049 582 4336113 4336322 5165373 5165582 420 4336393 4336693 5165653 5165953 602 4336927 4337183 5166187 5166443 514 4337794 4338038 5167054 5167298 490 4338994 4339308 5168254 5168568 630 4339353 4339715 5168613 5168975 726 4340892 4341142 5170152 5170402 502 4341624 4341999 5170884 5171259 752 4344740 4344957 5174001 5174218 436 4344959 4345211 5174220 5174472 506 4345213 4345571 5174474 5174832 718 4346026 4346523 5175287 5175784 996 4346631 4346834 5175892 5176095 408 4347166 4347790 5176427 5177051 1250 4347927 4348213 5177188 5177474 574 4348434 4348726 5177695 5177987 586 4348728 4348972 5177989 5178233 490 4349163 4349372 5178424 5178633 420 4350463 4350950 5179724 5180211 976 4351194 4351406 5180455 5180667 426 4351408 4351706 5180669 5180967 598 4352170 4352376 5181431 5181637 414 4353534 4354238 5182795 5183499 1410 4354273 4354526 5183534 5183787 508 4354528 4354910 5183789 5184171 766 4354912 4355495 5184173 5184756 1168 4355497 4355732 5184758 5184993 472 4355851 4356510 5185112 5185771 1320 4356602 4356917 5185863 5186178 632 4356919 4357185 5186180 5186446 534 4357376 4357687 5186637 5186948 624 4358283 4358518 5187545 5187780 472 4358531 4358953 5187793 5188215 846 4359009 4359406 5188271 5188668 796 4359408 4359650 5188670 5188912 486 4360590 4361086 5189852 5190348 994 4361109 4361356 5190371 5190618 496 4361397 4361736 5190659 5190998 680 4361967 4362177 5191229 5191439 422 4362309 4362521 5191571 5191783 426 4362523 4362876 5191785 5192138 708 4363046 4363258 5192308 5192520 426 4363260 4363546 5192522 5192808 574 4363548 4364194 5192810 5193456 1294 4364202 4364791 5193464 5194053 1180 4364793 4364992 5194055 5194254 400 4365531 4365754 5194793 5195016 448 4365756 4366009 5195018 5195271 508 4367889 4368488 5197151 5197750 1200 4369080 4369317 5198342 5198579 476 4370219 4370576 5199481 5199838 716 4370778 4370988 5200030 5200240 422 4371312 4371617 5200564 5200869 612 4371619 4371876 5200871 5201128 516 4372187 4372397 5201279 5201489 422 4373122 4373545 5202214 5202637 848 4373777 4374003 5202869 5203095 454 4374052 4374251 5203144 5203343 400 4374905 4375185 5203997 5204277 562 4375857 4376101 5204948 5205192 490 4376397 4376796 5205488 5205887 800 4377144 4377416 5206235 5206507 546 4377418 4377634 5206509 5206725 434 4377636 4378173 5206727 5207264 1076 4378301 4378506 5207392 5207597 412 4378508 4378713 5207599 5207804 412 4378718 4378946 5207809 5208037 458 4379198 4379523 5208289 5208614 652 4379594 4379808 5208685 5208899 430 4380144 4380485 5209235 5209576 684 4380835 4381058 5209926 5210149 448 4381060 4381274 5210151 5210365 430 4381385 4381717 5210476 5210808 666 4382064 4382284 5211155 5211375 442 4383624 4383938 5212160 5212474 630 4387381 4387685 5215917 5216221 610 4387687 4387980 5216223 5216516 588 4388866 4389092 5217402 5217628 454 4389846 4390338 5218382 5218874 986 4390965 4391449 5219501 5219985 970 4391451 4391696 5219987 5220232 492 4392660 4392949 5221196 5221485 580 4392951 4393314 5221487 5221850 728 4393390 4393607 5221926 5222143 436 4394572 4394885 5223108 5223421 628 4396694 4397281 5225230 5225817 1176 4397605 4398192 5226141 5226728 1176 4398186 4398649 5226723 5227186 928 4398699 4399042 5227236 5227579 688 4399262 4399973 5227799 5228510 1424 4400047 4400534 5228584 5229071 976 4400536 4400837 5229073 5229374 604 4400839 4401199 5229376 5229736 722 4401291 4401502 5229828 5230039 424 4401693 4402147 5230230 5230684 910 4402690 4402925 5231227 5231462 472 4403737 4404072 5232275 5232610 672 4404088 4404439 5232626 5232977 704 4404441 4404736 5232979 5233274 592 4406310 4406566 5234848 5235104 514 4407734 4407963 5236273 5236502 460 4407983 4408209 5236522 5236748 454 4409733 4410016 5238272 5238555 568 4410543 4411443 5239082 5239982 1802 4411568 4411931 5240107 5240470 728 4413245 4413458 5241784 5241997 428 4413460 4414119 5241999 5242658 1320 4414166 4414590 5242705 5243129 850 4415106 4415865 5243645 5244404 1520 4415867 4416119 5244406 5244658 506 4416427 4416794 5244966 5245333 736 4416802 4417277 5245341 5245816 952 4417587 4417894 5246126 5246433 616 4417896 4418210 5246435 5246749 630 4418721 4419265 5247260 5247804 1090 4419327 4420142 5247866 5248681 1632 4422028 4422356 5250566 5250894 658 4422589 4422864 5251127 5251402 552 4422884 4423135 5251422 5251673 504 4423235 4423484 5251773 5252022 500 4423486 4423779 5252024 5252317 588 4423832 4424168 5252370 5252706 674 4424170 4424765 5252708 5253303 1192 4425009 4425265 5253547 5253803 514 4425565 4425963 5255851 5256249 798 4426044 4426243 5256330 5256529 400 4426245 4426957 5256531 5257243 1426 4427159 4427541 5257445 5257827 766 4427543 4427886 5257829 5258172 688 4427900 4428237 5258186 5258523 676 4428542 4428802 5258828 5259088 522 4429070 4429306 5259356 5259592 474 4429923 4430185 5260209 5260471 526 4430365 4430680 5260651 5260966 632 4430682 4431179 5260968 5261465 996 4432539 4432756 5262814 5263031 436 4432758 4433008 5263033 5263283 502 4433601 4433926 5263876 5264201 652 4433963 4434274 5264238 5264549 624 4435031 4435251 5265306 5265526 442 4435253 4435481 5265528 5265756 458 4436111 4436332 5266387 5266608 444 4436615 4437230 5266891 5267506 1232 4437503 4437711 5267796 5268004 418 4438094 4438719 5268387 5269012 1252 4438730 4438975 5269023 5269268 492 4439166 4439479 5269459 5269772 628 4439661 4440048 5269954 5270341 776 4440303 4440757 5270596 5271050 910 4441584 4441911 5271877 5272204 656 4443981 4444452 5274274 5274745 944 4444454 4444845 5274747 5275138 784 4444973 4445194 5275266 5275487 444 4445391 4445813 5275684 5276106 846 4445815 4446120 5276108 5276413 612 4446140 4446428 5276433 5276721 578 4446534 4447021 5276827 5277314 976 4447071 4447327 5277364 5277620 514 4447949 4448349 5278242 5278642 802 4448542 4448813 5278837 5279108 544 4448815 4449101 5279110 5279396 574 4449229 4449635 5279524 5279930 814 4449737 4450021 5280033 5280317 570 4450381 4450608 5280677 5280904 456 4452995 4453356 5283291 5283652 724 4454003 4454286 5284299 5284582 568 4454357 4454691 5284653 5284987 670 4454909 4455147 5285205 5285443 478 4455161 4455896 5285457 5286192 1472 4455898 4456160 5286194 5286456 526 4456450 4456679 5286746 5286975 460 4456750 4457024 5287046 5287320 550 4457117 4457793 5287439 5288115 1354 4458252 4458580 5288606 5288934 658 4459728 4459936 5290082 5290290 418 4460106 4460393 5290460 5290747 576 4461084 4461335 5291438 5291689 504 4461645 4461886 5291999 5292240 484 4462630 4462835 5292984 5293189 412 4463656 4463881 5294010 5294235 452 4464916 4465556 5295269 5295909 1282 4465855 4466120 5296208 5296473 532 4466518 4466825 5296871 5297178 616 4467031 4467308 5297384 5297661 556 4467542 4467930 5297895 5298283 778 4467945 4468291 5298298 5298644 694 4468421 4468654 5298774 5299007 468 4468890 4469173 5299243 5299526 568 4469535 4469764 5299888 5300117 460 4469816 4470154 5300169 5300507 678 4476003 4476336 5306344 5306677 668 4478263 4478463 5308503 5308703 402 4478850 4479283 5309086 5309519 868 4480524 4480732 5310760 5310968 418 4481043 4481572 5311279 5311808 1060 4481615 4481848 5311851 5312084 468 4482116 4482339 5312546 5312769 448 4482470 4482864 5312900 5313294 790 4482962 4483176 5313392 5313606 430 4483178 4483541 5313608 5313971 728 4483543 4484119 5313973 5314549 1154 4484463 4484806 5314893 5315236 688 4485150 4485499 5315580 5315929 700 4485501 4485735 5315931 5316165 470 4485737 4486325 5316167 5316755 1178 4486327 4486622 5316757 5317052 592 4486903 4487111 5317333 5317541 418 4493190 4493434 5318623 5318867 490 4493667 4494057 5319100 5319490 782 4535262 4535462 5365009 5365209 402 4536431 4537017 5366178 5366764 1174 4538109 4538335 5367856 5368082 454 4538484 4538771 5368231 5368518 576 4539505 4539758 5369252 5369505 508 4540615 4540884 5370345 5370614 540 4540886 4541103 5370616 5370833 436 4542032 4542325 5371762 5372055 588 4542802 4543107 5372531 5372836 612 4543111 4543472 5372840 5373201 724 4544659 4544888 5374388 5374617 460 4548476 4548708 5378136 5378368 466 4548909 4549328 5378569 5378988 840 4550051 4550300 5379711 5379960 500 4551504 4551751 5381165 5381412 496 4551873 4552075 5381534 5381736 406 4554158 4554568 5383819 5384229 822 4554676 4554937 5384337 5384598 524 4556607 4556926 5386268 5386587 640 4556976 4557328 5386637 5386989 706 4557330 4557696 5386991 5387357 734 4557847 4558062 5387508 5387723 432 4561823 4562035 5399775 5399987 426 4567898 4568194 5405866 5406162 594 4586391 4586597 5418882 5419088 414 4589247 4589498 5422424 5422675 504 4589544 4589756 5422721 5422933 426 4589758 4590079 5422935 5423256 644 4591606 4591905 5424792 5425091 600 4592020 4592269 5425206 5425455 500 4592317 4592556 5425504 5425743 480 4592558 4592949 5425745 5426136 784 4593732 4593982 5426920 5427170 502 4594693 4595224 5427880 5428411 1064 4595901 4596268 5429088 5429455 736 4596459 4596916 5429646 5430103 916 4596918 4597156 5430105 5430343 478 4597495 4597826 5430682 5431013 664 4597828 4598336 5431015 5431523 1018 4598884 4599452 5432071 5432639 1138 4599469 4599869 5432656 5433056 802 4599871 4600306 5433058 5433493 872 4600811 4601319 5434000 5434508 1018 4601459 4601825 5434648 5435014 734 4601827 4602472 5435016 5435661 1292 4604188 4604575 5437063 5437450 776 4605120 4605567 5437995 5438442 896 4605846 4606069 5438721 5438944 448 4606201 4607439 5439076 5440314 2478 4607576 4607775 5440451 5440650 400 4607972 4608300 5440847 5441175 658 4608302 4608593 5441177 5441468 584 4608604 4609160 5441479 5442035 1114 4609548 4610186 5442423 5443061 1278 4610318 4610595 5443193 5443470 556 4610597 4611095 5443472 5443970 998 4613016 4613327 5445687 5445998 624 4613736 4614096 5446407 5446767 722 4614243 4614763 5446914 5447434 1042 4615143 4615543 5447814 5448214 802 4615599 4616269 5448270 5448940 1342 4616649 4616956 5449320 5449627 616 4617023 4617937 5449694 5450608 1830 4618311 4618887 5450982 5451558 1154 4621390 4621712 5453018 5453340 646 4622026 4622270 5453654 5453898 490 4622284 4622611 5453912 5454239 656 4623145 4623424 5454773 5455052 560 4623611 4624207 5455239 5455835 1194 4624869 4625256 5456497 5456884 776 4625387 4625939 5457015 5457567 1106 4626344 4627214 5457972 5458842 1742 4627591 4627832 5459219 5459460 484 4628122 4628527 5459750 5460155 812 4630122 4630608 5461750 5462236 974 4630610 4630809 5462238 5462437 400 4632073 4632299 5463701 5463927 454 4632526 4632989 5464154 5464617 928 4632991 4633225 5464619 5464853 470 4637081 4637382 5468709 5469010 604 4637525 4638352 5469153 5469980 1656 genometools-1.5.1/testdata/chaindata/chain-globalov-wf1.8000066400000000000000000004507501211610345200232550ustar00rootroot00000000000000# chain 0: length 4268 score 5386185 5851 6237 5868 6254 1393 7627 7937 7644 7954 1119 8079 8457 8096 8474 1364 8687 8994 8704 9011 1108 8996 9375 9013 9392 1368 9377 9666 9394 9683 1044 10024 10406 10041 10423 1378 10408 10715 10425 10732 1108 11439 11663 11456 11680 810 11695 11898 11712 11915 734 12026 12235 12043 12252 756 12384 12712 12401 12729 1184 13131 13339 13148 13356 752 13719 14230 13736 14247 1843 14232 14645 14249 14662 1490 15174 15389 15191 15406 777 17569 17786 16237 16454 784 18477 18763 17145 17431 1033 19377 19794 18045 18462 1504 20813 21272 25219 25678 1656 21304 21615 25716 26027 1123 22048 22265 26460 26677 784 23335 23639 27747 28051 1098 25045 25447 29457 29859 1450 26789 27024 31164 31399 849 27712 28067 32087 32442 1281 28223 28446 32598 32821 806 29506 29843 33881 34218 1216 30706 30913 35081 35288 748 31887 32116 36262 36491 828 33552 33766 37927 38141 774 34112 34597 38486 38971 1749 35170 35491 39577 39898 1159 35499 35831 39906 40238 1198 36263 36479 40670 40886 781 37032 37439 41439 41846 1468 37534 37775 41941 42182 871 37777 38103 42184 42510 1177 38777 39003 43184 43410 817 40129 40508 44536 44915 1368 41188 41408 45595 45815 795 43562 43773 47976 48187 763 44455 44660 48869 49074 741 45555 45805 49969 50219 903 45950 46173 50365 50588 806 46253 46632 50668 51047 1368 46901 47137 51316 51552 853 47515 47785 51930 52200 975 49571 49940 53986 54355 1332 51097 51551 56073 56527 1638 51621 51901 56597 56877 1011 51924 52135 56900 57111 763 53284 53627 58260 58603 1238 53902 54335 58878 59311 1562 54337 54981 59313 59957 2322 54983 56483 59959 61459 5403 56485 56939 61461 61915 1638 56941 57835 61917 62811 3222 57928 58141 62904 63117 770 59485 59772 64418 64705 1036 59831 60053 64764 64986 802 60245 60545 65178 65478 1083 60547 60890 65480 65823 1238 60943 61457 65876 66390 1854 61459 61700 66392 66633 871 62923 63424 67856 68357 1807 64749 65026 69681 69958 1000 65826 66030 70758 70962 738 66970 67169 71817 72016 720 67312 67544 72159 72391 838 67596 67832 72443 72679 853 68693 68945 73540 73792 910 70473 71000 75320 75847 1900 71214 71540 76061 76387 1177 74737 75132 79557 79952 1425 75226 75461 80046 80281 849 76775 76988 82604 82817 770 81083 81302 85691 85910 792 82978 83294 87586 87902 1141 83392 83799 88000 88407 1468 84493 84737 89099 89343 882 84949 85210 89555 89816 943 85881 86098 90487 90704 784 87279 87522 91885 92128 878 87794 88118 92400 92724 1170 88120 88349 92726 92955 828 89754 90328 94360 94934 2070 90591 90949 95197 95555 1292 91187 91785 95793 96391 2156 92474 92682 97080 97288 752 93089 93369 97695 97975 1011 94167 94384 98773 98990 784 94548 94791 99154 99397 878 95152 95370 99758 99976 788 95905 96359 100511 100965 1638 97113 97513 101719 102119 1443 98322 98775 102928 103381 1634 98906 99228 103512 103834 1162 99254 99649 103860 104255 1425 99651 99869 104257 104475 788 100432 100691 105038 105297 936 101175 101494 105781 106100 1152 101721 101923 106327 106529 730 102613 102831 107219 107437 788 102833 103359 107439 107965 1897 103604 103840 108210 108446 853 103842 104168 108448 108774 1177 104548 104822 109154 109428 990 104857 105545 109463 110151 2480 106099 107460 110705 112066 4903 107686 107909 112292 112515 806 108007 108211 112613 112817 738 108293 108597 112899 113203 1098 108848 109485 113454 114091 2296 109496 109707 114102 114313 763 109927 110184 114533 114790 928 110441 110658 115047 115264 784 110660 110901 115266 115507 871 110903 111227 115509 115833 1170 111661 112144 116151 116634 1742 112146 112457 116636 116947 1123 112459 112834 116949 117324 1353 112836 113047 117326 117537 763 113049 113268 117539 117758 792 113270 114090 117760 118580 2955 116535 116843 121025 121333 1112 117226 117573 121716 122063 1252 117842 118158 122332 122648 1141 118514 119177 123004 123667 2390 119259 119491 123749 123981 838 119493 119812 123983 124302 1152 120595 120848 125085 125338 914 121891 122239 126381 126729 1256 122496 122797 126986 127287 1087 122808 123161 127298 127651 1274 123931 124169 128421 128659 860 124522 124796 129012 129286 990 125410 125818 129900 130308 1472 127257 127734 131747 132224 1720 127882 128266 132255 132639 1386 128406 128650 132779 133023 882 128991 129196 133364 133569 741 130733 131096 135106 135469 1310 131188 131489 135561 135862 1087 131491 131699 135864 136072 752 133795 134045 138168 138418 903 134047 134547 138420 138920 1803 134594 134876 138967 139249 1018 134968 135254 139341 139627 1033 135256 135635 139629 140008 1368 135663 136121 140036 140494 1652 136240 136604 140613 140977 1314 136870 137101 141243 141474 835 137556 137806 141929 142179 903 139126 139355 143499 143728 828 141040 141304 145413 145677 954 141343 141710 145716 146083 1324 141797 142087 146170 146460 1047 142452 142814 146825 147187 1306 143270 143496 147643 147869 817 143498 143822 147871 148195 1170 144256 144630 148629 149003 1350 145072 145290 149445 149663 788 146145 146732 150518 151105 2116 157544 157954 161867 162277 1479 158023 158489 162346 162812 1681 158578 158792 162901 163115 774 159237 159483 163560 163806 889 160020 160261 164343 164584 871 160401 161512 164724 165835 4003 162678 162981 167001 167304 1094 164644 164931 168967 169254 1036 166100 166500 170423 170823 1443 166502 166932 170825 171255 1551 168428 168768 172751 173091 1227 169064 169426 173387 173749 1306 169759 169994 174082 174317 849 172286 172617 176609 176940 1195 174673 175242 178873 179442 2052 175991 176292 180191 180492 1087 176294 176862 180494 181062 2048 176876 177372 181076 181572 1789 177648 177933 181848 182133 1029 178131 178465 182331 182665 1206 178479 178867 182679 183067 1400 179070 179513 183270 183713 1598 180127 180427 184327 184627 1083 180820 181388 185020 185588 2048 181390 181646 185590 185846 925 181663 181940 185863 186140 1000 182343 182661 186543 186861 1148 183133 183406 187333 187606 986 183458 183671 187658 187871 770 183701 184121 187901 188321 1515 185630 186048 189117 189535 1508 188339 188709 191826 192196 1335 188711 189124 192198 192611 1490 189417 189686 192904 193173 972 189688 189955 193175 193442 964 189957 190705 193444 194192 2696 190707 191298 194194 194785 2131 191300 192509 194787 195996 4356 192775 193061 196120 196406 1033 193063 194127 196408 197472 3834 194165 194669 197510 198014 1818 195040 197671 198385 201016 9475 197790 198378 201135 201723 2120 198380 198621 201725 201966 871 199262 199926 202607 203271 2394 199928 200418 203273 203763 1767 200529 200809 203873 204153 1011 200811 201187 204155 204531 1357 201345 201607 204689 204951 946 201640 202500 204984 205844 3099 202808 203026 206152 206370 788 203135 203440 206479 206784 1101 204771 204985 208115 208329 774 204987 205202 208331 208546 777 205269 205525 208613 208869 925 206068 206371 209412 209715 1094 207123 207337 210467 210681 774 207939 208243 211283 211587 1098 208245 208771 211589 212115 1897 208773 209122 212117 212466 1260 209142 209380 212486 212724 860 209442 209817 212786 213161 1353 211763 212003 215107 215347 867 212180 212451 215524 215795 979 212952 213198 216296 216542 889 213337 213554 216681 216898 784 213819 214384 217164 217729 2037 215380 215675 218713 219008 1065 215949 216222 219282 219555 986 218188 218576 221520 221908 1400 218578 218833 221910 222165 921 218828 219224 222159 222555 1429 219732 220129 223063 223460 1432 220515 220882 223846 224213 1324 220884 221193 224215 224524 1116 221550 221915 224881 225246 1317 222448 222986 225779 226317 1940 222988 223316 226319 226647 1184 223538 223739 226870 227071 727 223915 224888 227247 228220 3506 224890 225585 228222 228917 2505 225900 226112 229232 229444 766 226604 226927 229936 230259 1166 226936 227481 230267 230812 1965 227623 227871 230954 231202 896 227969 228550 231300 231881 2095 228768 229025 232098 232355 928 229598 229840 232928 233170 874 229853 230143 233183 233473 1047 232837 233051 236388 236602 774 233158 233399 236709 236950 871 233401 233636 236952 237187 849 233638 233959 237189 237510 1159 233961 234277 237512 237828 1141 234618 234856 238169 238407 860 235556 235890 239107 239441 1206 236041 236334 239592 239885 1058 237263 237536 240815 241088 986 237538 237738 241090 241290 723 240031 240397 278100 278466 1321 241492 241701 279561 279770 756 241703 242018 279772 280087 1137 245371 245714 283339 283682 1238 245952 246203 283920 284171 907 250050 250279 287937 288166 828 251614 251828 289501 289715 774 252573 252783 290460 290670 759 253387 253681 291275 291569 1062 254361 254617 292249 292505 925 255687 256313 293575 294201 2257 256486 256872 294374 294760 1393 257033 257260 294921 295148 820 258635 258918 296523 296806 1022 259430 259675 297318 297563 885 260217 260431 298105 298319 774 260706 260991 298594 298879 1029 297132 297463 330317 330648 1195 299169 299479 332354 332664 1119 300524 300783 333709 333968 936 301750 302005 334935 335190 921 305109 305541 338294 338726 1558 306139 306369 339324 339554 831 306382 306626 339567 339811 882 306907 307106 340092 340291 720 308316 308640 341501 341825 1170 309476 309792 342661 342977 1141 313588 313860 353941 354213 982 316129 316360 358934 359165 835 318125 318630 361618 362123 1821 318632 318938 362125 362431 1105 319028 319326 362521 362819 1076 319744 320032 363237 363525 1040 321266 321471 364759 364964 741 321473 321699 364966 365192 817 322401 323072 365894 366565 2419 323968 324172 367461 367665 738 328133 328560 376575 377002 1540 328661 329008 377103 377450 1252 329022 329383 377464 377825 1303 329619 330088 378061 378530 1692 330090 330409 378532 378851 1152 330540 330759 378982 379201 792 332518 332846 384784 385112 1184 334160 334386 386435 386661 817 334409 334749 386684 387024 1227 335190 335460 387465 387735 975 335793 336128 388068 388403 1209 336547 336839 388822 389114 1054 338028 338296 390303 390571 968 340819 341027 393187 393395 752 341549 341791 393917 394159 874 342414 343104 399888 400578 2487 343301 343735 400775 401209 1566 343919 344120 401393 401594 727 344845 345122 402322 402599 1000 345448 345667 402925 403144 792 351607 352098 408800 409291 1771 352888 353166 410081 410359 1004 354178 354443 411935 412200 957 355443 355817 413200 413574 1350 355819 356099 413576 413856 1011 358310 358593 415864 416147 1022 361300 361532 418854 419086 838 362254 362582 419808 420136 1184 362638 362871 420192 420425 842 367228 367430 426606 426808 730 368110 368314 427488 427692 738 368569 368964 427947 428342 1425 369620 370014 428998 429392 1422 370352 370704 429730 430082 1270 370840 371258 430218 430636 1508 374964 375281 433940 434257 1144 375474 375856 434450 434832 1378 378703 379047 437579 437923 1242 385128 385475 446908 447255 1252 385631 385848 447411 447628 784 386054 386300 447834 448080 889 388046 388254 449826 450034 752 392824 393267 453381 453824 1598 393274 393475 453831 454032 727 393537 394358 454094 454915 2959 394579 394841 455136 455398 946 394843 395354 455400 455911 1843 396828 397102 457385 457659 990 397218 397459 457775 458016 871 397707 397942 458264 458499 849 398247 398697 458804 459254 1623 398813 399102 459370 459659 1044 399920 400442 460477 460999 1882 400542 401106 461099 461663 2034 401519 401862 462076 462419 1238 402894 403806 463451 464363 3286 404119 404330 464676 464887 763 404764 405189 465321 465746 1533 405269 405498 465826 466055 828 405500 406133 466057 466690 2282 406247 406472 466804 467029 813 408239 408627 471103 471491 1400 409019 409683 471883 472547 2394 409685 409949 472549 472813 954 409951 410158 472815 473022 748 410779 411080 473541 473842 1087 411169 411404 473931 474166 849 411927 412377 474689 475139 1623 412584 412810 475343 475569 817 414347 414694 477106 477453 1252 414876 415176 477635 477935 1083 415178 416519 477937 479278 4831 416521 417497 479280 480256 3517 417578 417798 480337 480557 795 418074 418301 480833 481060 820 418498 419130 481257 481889 2278 419564 421545 482323 484304 7135 421585 421886 484344 484645 1087 421918 422324 484677 485083 1465 424420 424775 488828 489183 1281 425323 425610 489730 490017 1036 425918 426348 490325 490755 1551 426350 427121 490757 491528 2779 427123 427330 491530 491737 748 427941 428188 492348 492595 892 428418 428807 492825 493214 1404 429056 429386 493463 493793 1191 429762 430016 494795 495049 918 430020 430256 495053 495289 853 430318 430569 495351 495602 907 430571 430945 495604 495978 1350 430974 431460 496007 496493 1753 431796 432032 496829 497065 853 432068 432415 497101 497448 1252 432423 432739 497456 497772 1141 433707 433976 498740 499009 972 434137 434777 499170 499810 2307 435013 435485 500046 500518 1702 437781 438101 504612 504932 1155 440107 440365 506938 507196 932 440367 440657 507198 507488 1047 440659 440932 507490 507763 986 441081 441412 507912 508243 1195 443866 444069 510697 510900 734 445270 445481 512101 512312 763 446240 446460 513071 513291 795 446699 446996 513530 513827 1072 447154 447388 513985 514219 846 447558 447851 514389 514682 1058 447853 448076 514684 514907 806 448714 449491 515545 516322 2800 449557 450019 516388 516850 1666 450118 450394 516949 517225 997 450523 450872 517354 517703 1260 451229 451856 518060 518687 2260 451981 452222 518812 519053 871 453065 453331 519896 520162 961 453527 454666 520358 521497 4104 454668 455257 521499 522088 2124 455277 455482 522108 522313 741 455484 455719 522315 522550 849 455714 455976 522544 522806 946 456098 456384 522928 523214 1033 456386 456860 523216 523690 1710 457429 457823 524259 524653 1422 457825 458484 524655 525314 2376 459551 459759 526381 526589 752 460049 460278 526879 527108 828 460442 460891 527272 527721 1620 460893 461307 527723 528137 1494 461309 461526 528139 528356 784 462603 462994 529433 529824 1411 463853 464078 530696 530921 813 467804 468197 534646 535039 1418 468592 469367 535434 536209 2793 469369 469914 536211 536756 1965 469916 470310 536758 537152 1422 471002 471234 537844 538076 838 471715 471981 538557 538823 961 471983 472235 538825 539077 910 472804 473033 539646 539875 828 473738 473940 540580 540782 730 474071 474282 540913 541124 763 474284 474519 541126 541361 849 475605 475824 542449 542668 792 476138 476384 542982 543228 889 476386 476706 543230 543550 1155 476749 477036 543593 543880 1036 477185 477438 544029 544282 914 477689 477900 544533 544744 763 478299 478541 545143 545385 874 478557 478830 545401 545674 986 478832 479540 545676 546384 2552 479542 479820 546386 546664 1004 479873 480097 546717 546941 810 480156 480358 547000 547202 730 480500 480797 547344 547641 1072 480799 481310 547643 548154 1843 481312 481595 548156 548439 1022 482005 482228 548849 549072 806 482401 482648 549245 549492 892 483364 483867 550208 550711 1814 483869 484107 550713 550951 860 484109 485087 550953 551931 3524 485569 486007 552413 552851 1580 486512 487233 553356 554077 2599 488357 488580 555201 555424 806 488648 489096 555492 555940 1616 490156 490806 556830 557480 2343 491016 491281 557690 557955 957 491283 491685 557957 558359 1450 491936 492348 558610 559022 1486 492431 492726 559105 559400 1065 493578 493812 560252 560486 846 494565 494791 561239 561465 817 495183 495536 561857 562210 1274 495813 496141 562487 562815 1184 496339 496774 563013 563448 1569 497201 497557 563771 564127 1285 497559 497843 564129 564413 1026 497944 498191 564514 564761 892 498193 498515 564763 565085 1162 498526 498795 565096 565365 972 499179 499394 565749 565964 777 500429 500704 566999 567274 993 500996 501197 567566 567767 727 501503 501749 568073 568319 889 501869 502227 568439 568797 1292 502292 502522 568862 569092 831 502841 503244 569410 569813 1454 503252 503472 569821 570041 795 504201 504498 570770 571067 1072 505313 505596 571882 572165 1022 505598 505808 572167 572377 759 505872 506092 572441 572661 795 506287 506526 572856 573095 864 507669 507870 574238 574439 727 510100 510503 576568 576971 1454 510693 510970 577161 577438 1000 511506 511720 577974 578188 774 511916 512268 578384 578736 1270 514311 514561 608578 608828 903 514941 515380 609208 609647 1584 515956 516293 610223 610560 1216 516295 516506 610562 610773 763 516508 517120 610775 611387 2206 517360 517640 611627 611907 1011 517972 518490 612239 612757 1868 518492 518760 612759 613027 968 519981 520225 614248 614492 882 520758 521002 615025 615269 882 527250 527840 620314 620904 2127 527909 528139 620973 621203 831 528272 528957 621335 622020 2469 528959 529358 622022 622421 1440 529620 530191 622683 623254 2059 530358 530775 623421 623838 1504 531308 531568 624371 624631 939 532001 532301 625064 625364 1083 532459 532658 625522 625721 720 533211 533782 626274 626845 2059 535236 535474 628299 628537 860 536800 537097 629864 630161 1072 538454 538722 631432 631700 968 539806 540008 632784 632986 730 540859 541151 633837 634129 1054 543235 543483 636213 636461 896 545192 545481 638170 638459 1044 545483 545707 638461 638685 810 545797 546303 638775 639281 1825 547235 547461 640213 640439 817 548227 548559 641206 641538 1198 548973 549348 641952 642327 1353 549401 549615 642380 642594 774 549988 550295 642967 643274 1108 552171 552490 645094 645413 1152 553403 554011 646326 646934 2192 554139 554735 647062 647658 2149 555699 555927 648622 648850 824 557166 557534 650089 650457 1328 557536 557969 650459 650892 1562 558658 558860 651581 651783 730 558862 559066 651785 651989 738 559243 559706 652166 652629 1670 561117 561536 654046 654465 1512 561996 562213 654926 655143 784 562215 562563 655145 655493 1256 562841 563219 655771 656149 1364 563221 563588 656151 656518 1324 563747 564023 656677 656953 997 585334 585798 656962 657426 1674 585880 586262 657508 657890 1378 586264 586465 657892 658093 727 587112 587323 658740 658951 763 587364 587641 658992 659269 1000 588166 588459 659794 660087 1058 588646 588936 660274 660564 1047 589344 589651 660972 661279 1108 590019 590549 661647 662177 1911 592069 592361 663697 663989 1054 594538 594752 677757 677971 774 595911 596125 679130 679344 774 597790 597997 680884 681091 748 599565 599857 682653 682945 1054 600066 600290 683154 683378 810 600346 600550 683434 683638 738 601677 602172 684765 685260 1785 602198 602427 685286 685515 828 602936 603201 686011 686276 957 603203 603533 686278 686608 1191 603535 603864 686610 686939 1188 604552 604841 687627 687916 1044 604858 605299 687933 688374 1591 605327 605564 688402 688639 856 605896 606137 688971 689212 871 606382 606623 689457 689698 871 608712 608917 690927 691132 741 609123 609484 691338 691699 1303 611082 611317 693297 693532 849 611646 612108 693861 694323 1666 612814 613040 695029 695255 817 617409 617630 699624 699845 799 617729 618063 699944 700278 1206 621062 621823 703277 704038 2743 622374 622582 704589 704797 752 622798 623018 705013 705233 795 623967 624342 705996 706371 1353 624455 624654 706484 706683 720 625067 625350 707096 707379 1022 626744 627217 708773 709246 1706 630745 630986 712774 713015 871 631312 631606 713340 713634 1062 632574 632966 714602 714994 1414 632979 633283 715007 715311 1098 634659 634927 716687 716955 968 635077 635401 717105 717429 1170 635427 635641 717455 717669 774 636170 636533 718198 718561 1310 636536 636836 718564 718864 1083 637362 637684 719391 719713 1162 638120 638730 720149 720759 2199 638868 639189 720781 721102 1159 639566 640314 721479 722227 2696 640316 640593 722229 722506 1000 640892 641234 722805 723147 1234 642033 642290 723946 724203 928 642891 643209 724804 725122 1148 644297 644559 726210 726472 946 644561 644779 726474 726692 788 644973 645331 726886 727244 1292 645498 645842 727411 727755 1242 647520 647719 729433 729632 720 649072 649283 730985 731196 763 649579 649804 731492 731717 813 649806 650219 731719 732132 1490 650628 650837 732541 732750 756 650876 651180 732789 733093 1098 651311 651673 733225 733587 1306 651675 652010 733589 733924 1209 652417 653081 734331 734995 2394 653198 653517 735112 735431 1152 653983 654464 735897 736378 1735 654466 654803 736380 736717 1216 654805 655172 736719 737086 1324 655895 656260 737809 738174 1317 656433 656770 738347 738684 1216 656765 657001 738678 738914 853 657882 658118 739796 740032 853 658120 658708 740034 740622 2120 659170 659781 741084 741695 2203 660230 660504 742144 742418 990 660926 661239 742841 743154 1130 661580 661967 743495 743882 1396 662074 662309 743989 744224 849 662383 662585 744298 744500 730 662887 663221 744802 745136 1206 664333 664703 746249 746619 1335 664705 665241 746621 747157 1933 665243 665466 747159 747382 806 666505 666713 748421 748629 752 667222 667583 749138 749499 1303 667591 668054 749507 749970 1670 668158 668473 750074 750389 1137 669211 669463 751127 751379 910 670619 670859 752535 752775 867 671335 671569 753251 753485 846 671571 671785 753487 753701 774 672021 672412 753937 754328 1411 673391 673786 755307 755702 1425 673815 674028 755731 755944 770 674051 675151 755968 757068 3963 677843 678132 759761 760050 1044 678134 678600 760052 760518 1681 678602 678830 760520 760748 824 678850 679052 760768 760970 730 681591 681847 763509 763765 925 682257 682767 764175 764685 1839 684323 684524 766241 766442 727 685476 685705 767394 767623 828 685740 686034 767658 767952 1062 688616 688831 769335 769550 777 688851 689134 769570 769853 1022 689217 689468 769936 770187 907 689820 690238 770539 770957 1508 690471 690733 771190 771452 946 690801 691086 771520 771805 1029 691088 691289 771807 772008 727 691978 692324 772697 773043 1249 692326 692555 773045 773274 828 692817 693047 773536 773766 831 693822 694270 774541 774989 1616 695606 695851 776325 776570 885 695874 696078 776594 776798 738 696270 696632 776991 777353 1306 696634 696833 777355 777554 720 697180 697385 777901 778106 741 697522 697742 778243 778463 795 699406 699661 779987 780242 921 700002 700264 780583 780845 946 700584 700890 781165 781471 1105 701579 702110 782160 782691 1915 702468 702698 783049 783279 831 702742 702979 783323 783560 856 703130 703371 783711 783952 871 705239 705550 785820 786131 1123 706141 706441 786722 787022 1083 706486 706753 787067 787334 964 706755 707162 787336 787743 1468 707278 707506 787860 788088 824 708561 708778 789143 789360 784 709471 709878 790053 790460 1468 710074 710450 790658 791034 1357 710452 710910 791036 791494 1652 711047 711367 791631 791951 1155 711957 712391 792541 792975 1566 712452 713063 793036 793647 2203 713548 713768 794132 794352 795 713980 714185 794564 794769 741 714202 714427 794786 795011 813 716622 716854 795515 795747 838 717030 717376 795923 796269 1249 717986 718203 796879 797096 784 721034 721515 800021 800502 1735 722999 723216 801986 802203 784 725606 725808 804593 804795 730 726092 726414 805079 805401 1162 726416 726649 805403 805636 842 729222 729757 808208 808743 1929 730140 730413 809126 809399 986 730620 730936 809606 809922 1141 732327 733625 811313 812611 4676 734890 735131 813877 814118 871 740097 740364 819174 819441 964 741528 741757 820605 820834 828 741759 741993 820836 821070 846 742280 743053 821357 822130 2786 743064 743281 822141 822358 784 743941 744174 823018 823251 842 745018 745258 824095 824335 867 746300 746514 825377 825591 774 752906 753108 831982 832184 730 753323 753555 832399 832631 838 753774 754160 832850 833236 1393 754162 754523 833238 833599 1303 754525 754894 833601 833970 1332 754937 755175 834013 834251 860 755177 755538 834253 834614 1303 756746 756993 835822 836069 892 757037 757458 836113 836534 1519 757532 758196 836608 837272 2394 758228 758536 837304 837612 1112 760172 760650 839248 839726 1724 760828 761117 839904 840193 1044 761269 761501 840345 840577 838 762269 762576 841164 841471 1108 763591 763811 842486 842706 795 763954 764370 842849 843265 1501 770806 771368 857743 858305 2026 771946 772340 858883 859277 1422 773272 773491 860209 860428 792 773648 773855 860585 860792 748 773858 774113 860795 861050 921 774115 774466 861052 861403 1267 774969 775208 861906 862145 864 775210 775688 862147 862625 1724 776440 776847 863296 863703 1468 776849 777074 863705 863930 813 777898 778946 864754 865802 3776 779241 779851 866097 866707 2199 781316 781551 867611 867846 849 781922 782160 868217 868455 860 783078 783319 869373 869614 871 783507 783757 869802 870052 903 784644 785021 870933 871310 1360 786648 786870 872945 873167 802 787198 787441 873495 873738 878 788132 788397 874429 874694 957 790206 790422 876503 876719 781 790730 790968 877027 877265 860 792220 792631 878518 878929 1483 792781 793021 879079 879319 867 793739 794339 880037 880637 2163 795078 795295 881376 881593 784 795297 795571 881595 881869 990 795678 795934 881976 882232 925 796493 796957 882791 883255 1674 799265 799593 885563 885891 1184 799810 800198 886108 886496 1400 801521 801779 887820 888078 932 802234 802546 888533 888845 1126 803451 803675 889750 889974 810 803889 804178 890188 890477 1044 804780 805040 891079 891339 939 805498 805795 891704 892001 1072 808412 808696 933207 933491 1026 812635 812863 937431 937659 824 816179 816405 940974 941200 817 817052 817372 941847 942167 1155 817661 818015 942456 942810 1278 818373 818620 943168 943415 892 819202 819413 943996 944207 763 821380 821785 946177 946582 1461 822333 822592 947130 947389 936 822609 823614 947406 948411 3621 823616 824135 948413 948932 1872 824137 824373 948934 949170 853 826458 826706 951255 951503 896 827275 827629 952072 952426 1278 829168 829607 953965 954404 1584 829949 830425 954746 955222 1717 832197 832434 959067 959304 856 833381 833715 960251 960585 1206 834305 834558 961175 961428 914 839012 839216 965895 966099 738 840524 840835 967407 967718 1123 841097 841644 967980 968527 1972 842958 843381 969841 970264 1526 845147 845349 971886 972088 730 845602 846029 972341 972768 1540 846823 847308 973562 974047 1749 847608 847920 974347 974659 1126 848682 849037 975421 975776 1281 849246 849751 975985 976490 1821 849867 850072 976606 976811 741 850999 851479 977738 978218 1731 851481 851716 978220 978455 849 852048 852287 978787 979026 864 852947 853168 979686 979907 799 854794 855005 981532 981743 763 855107 855585 981846 982324 1724 855680 855976 982419 982715 1069 857016 857221 983682 983887 741 857661 858292 984327 984958 2275 858469 858722 985136 985389 914 858802 859015 985469 985682 770 860912 861142 987579 987809 831 861749 861983 988415 988649 846 862759 862982 989425 989648 806 865489 865766 992258 992535 1000 865768 866004 992537 992773 853 866423 866794 993192 993563 1339 867315 867529 994084 994298 774 867711 867937 994480 994706 817 868317 868769 995086 995538 1630 868960 869172 995729 995941 766 869174 869379 995943 996148 741 869581 869898 996350 996667 1144 870996 871383 997765 998152 1396 873497 873732 1000266 1000501 849 873734 874035 1000503 1000804 1087 874493 874786 1001262 1001555 1058 874818 875095 1001587 1001864 1000 876323 876735 1004046 1004458 1486 877193 877408 1004916 1005131 777 877453 877976 1005176 1005699 1886 878102 878316 1005825 1006039 774 878360 878829 1006083 1006552 1692 878948 879177 1006671 1006900 828 879179 879387 1006902 1007110 752 879419 879669 1007142 1007392 903 879671 879890 1007394 1007613 792 880033 880370 1007755 1008092 1216 880495 880731 1008217 1008453 853 881337 881536 1009059 1009258 720 881772 882057 1009494 1009779 1029 882059 882304 1009781 1010026 885 882494 882787 1010216 1010509 1058 882789 883106 1010511 1010828 1144 884251 884485 1011973 1012207 846 885244 885697 1012966 1013419 1634 886891 887165 1014613 1014887 990 887198 887424 1014920 1015146 817 887729 888012 1015451 1015734 1022 888014 888372 1015736 1016094 1292 888374 888603 1016096 1016325 828 888605 889068 1016327 1016790 1670 889734 889950 1017457 1017673 781 890478 890689 1018201 1018412 763 891140 891620 1018863 1019343 1731 891622 891884 1019345 1019607 946 892279 892609 1020002 1020332 1191 895107 895421 1022830 1023144 1134 895956 896269 1023679 1023992 1130 896468 896727 1024191 1024450 936 897283 897497 1025006 1025220 774 897520 897791 1025243 1025514 979 901363 901604 1032396 1032637 871 902056 902308 1033089 1033341 910 902490 902737 1033523 1033770 892 902739 903182 1033772 1034215 1598 904186 904401 1037735 1037950 777 906687 906905 1040236 1040454 788 910222 910490 1043771 1044039 968 912033 912304 1045582 1045853 979 912852 913185 1046401 1046734 1202 913841 914066 1047390 1047615 813 914986 915276 1048498 1048788 1047 915473 915822 1048985 1049334 1260 916829 917061 1050341 1050573 838 917267 917535 1050779 1051047 968 917540 917745 1051052 1051257 741 917978 918269 1051490 1051781 1051 918885 919119 1052397 1052631 846 919198 919517 1052710 1053029 1152 919680 919897 1053192 1053409 784 920748 920974 1054260 1054486 817 921171 921406 1054683 1054918 849 921408 921951 1054920 1055463 1958 921953 923120 1055465 1056632 4204 923158 923387 1056670 1056899 828 923950 924230 1057462 1057742 1011 925370 926038 1146447 1147115 2408 926040 926242 1147117 1147319 730 926275 927044 1147352 1148121 2772 927564 927936 1148641 1149013 1342 928215 928771 1149292 1149848 2005 929811 930058 1150888 1151135 892 930060 930372 1151137 1151449 1126 930878 931200 1151955 1152277 1162 931202 931652 1152279 1152729 1623 931654 932145 1152731 1153222 1771 932147 932461 1153224 1153538 1134 932463 932760 1153540 1153837 1072 932762 933125 1153839 1154202 1310 933127 933504 1154204 1154581 1360 933506 933899 1154583 1154976 1418 934265 934466 1155342 1155543 727 934900 935127 1156016 1156243 820 935833 936177 1156949 1157293 1242 936449 937304 1157561 1158416 3081 937477 937691 1158589 1158803 774 937915 939255 1159027 1160367 4827 939544 939872 1160656 1160984 1184 940110 940343 1161222 1161455 842 940345 940662 1161457 1161774 1144 940818 941235 1161930 1162347 1504 941576 941796 1162688 1162908 795 941798 942102 1162910 1163214 1098 942182 942703 1163294 1163815 1879 942837 943313 1163949 1164425 1717 944568 944819 1165681 1165932 907 947729 947977 1168843 1169091 896 949842 950418 1169485 1170061 2077 950612 950835 1170255 1170478 806 950843 951066 1170486 1170709 806 951068 951282 1170711 1170925 774 951527 951807 1171170 1171450 1011 951809 952170 1171452 1171813 1303 952556 952839 1172199 1172482 1022 953456 954057 1173099 1173700 2167 954464 954780 1174107 1174423 1141 954788 955050 1174431 1174693 946 955595 955818 1175238 1175461 806 955820 956426 1175463 1176069 2185 956495 956920 1176138 1176563 1533 956922 957317 1176565 1176960 1425 957533 957833 1177176 1177476 1083 957895 958245 1177538 1177888 1263 958403 958989 1178046 1178632 2113 959615 959829 1179258 1179472 774 960300 960526 1179943 1180169 817 960846 961677 1180489 1181320 2995 961679 962145 1181322 1181788 1681 962147 962362 1181790 1182005 777 962364 962754 1182007 1182397 1407 962919 963340 1182562 1182983 1519 965709 965910 1185351 1185552 727 966533 966747 1186175 1186389 774 967358 967892 1187000 1187534 1926 967894 968156 1187536 1187798 946 969047 969265 1188689 1188907 788 969408 969720 1189050 1189362 1126 970335 970540 1189977 1190182 741 970794 971099 1190436 1190741 1101 971310 971536 1190952 1191178 817 971538 971891 1191180 1191533 1274 972562 972883 1192204 1192525 1159 972954 973162 1192596 1192804 752 973976 974202 1193618 1193844 817 974738 974941 1194380 1194583 734 975378 975600 1195020 1195242 802 975602 975903 1195244 1195545 1087 977765 977979 1197407 1197621 774 978464 978717 1198106 1198359 914 979620 979833 1199262 1199475 770 979981 980296 1199623 1199938 1137 980460 980813 1200102 1200455 1274 981037 981299 1200679 1200941 946 981721 982168 1201363 1201810 1612 982352 982589 1201994 1202231 856 983103 983419 1202745 1203061 1141 983832 984346 1203303 1203817 1854 984627 985057 1204098 1204528 1551 985059 985398 1204530 1204869 1224 985636 986069 1205107 1205540 1562 987711 987927 1207182 1207398 781 987929 988141 1207400 1207612 766 988170 988513 1207641 1207984 1238 988675 988984 1208146 1208455 1116 989214 989491 1208685 1208962 1000 989493 989995 1208964 1209466 1810 990318 990643 1209789 1210114 1173 993345 993771 1212816 1213242 1537 996936 997312 1216408 1216784 1357 999032 999400 1218503 1218871 1328 999491 999719 1218962 1219190 824 1002117 1002693 1221589 1222165 2077 1002826 1003134 1222298 1222606 1112 1003382 1003613 1222854 1223085 835 1003817 1004072 1223288 1223543 921 1004749 1005070 1224220 1224541 1159 1005285 1005529 1224756 1225000 882 1005582 1005955 1225053 1225426 1346 1006031 1006261 1225502 1225732 831 1006952 1007367 1226423 1226838 1497 1007987 1008250 1227458 1227721 950 1008824 1009376 1228295 1228847 1990 1009477 1009703 1228948 1229174 817 1011376 1011728 1230847 1231199 1270 1012105 1012725 1231576 1232196 2235 1013177 1013397 1232648 1232868 795 1013621 1013877 1233092 1233348 925 1013960 1014248 1233431 1233719 1040 1014406 1014739 1233877 1234210 1202 1014741 1016713 1234212 1236184 7102 1016737 1017056 1236208 1236527 1152 1017058 1017762 1236529 1237233 2538 1017764 1018240 1237235 1237711 1717 1018242 1018915 1237713 1238386 2426 1018917 1019555 1238388 1239026 2300 1019679 1020273 1239150 1239744 2142 1020275 1020545 1239746 1240016 975 1020547 1021341 1240018 1240812 2862 1021343 1021732 1240814 1241203 1404 1021734 1022021 1241205 1241492 1036 1022023 1022522 1241494 1241993 1800 1022524 1023481 1241995 1242952 3448 1023483 1023904 1242954 1243375 1519 1024077 1024471 1243548 1243942 1422 1024473 1024744 1243944 1244215 979 1024767 1025083 1244238 1244554 1141 1025085 1025507 1244556 1244978 1522 1025655 1025859 1245126 1245330 738 1025861 1026359 1245332 1245830 1796 1026361 1027147 1245832 1246618 2833 1027783 1028072 1247254 1247543 1044 1028797 1029104 1248268 1248575 1108 1029106 1029377 1248577 1248848 979 1029451 1029767 1248922 1249238 1141 1031117 1031346 1295831 1296060 828 1031348 1031584 1296062 1296298 853 1031592 1031839 1296306 1296553 892 1033953 1034196 1298667 1298910 878 1036286 1036497 1301000 1301211 763 1036499 1036788 1301213 1301502 1044 1038009 1038612 1302723 1303326 2174 1039130 1039329 1303844 1304043 720 1040143 1040443 1304863 1305163 1083 1041571 1041830 1306296 1306555 936 1042342 1042577 1307067 1307302 849 1043203 1043499 1307928 1308224 1069 1043609 1043960 1308334 1308685 1267 1043989 1044293 1308714 1309018 1098 1044784 1045214 1309509 1309939 1551 1045810 1046177 1310535 1310902 1324 1046494 1046894 1311219 1311619 1443 1047786 1048035 1312511 1312760 900 1048403 1048626 1313128 1313351 806 1050249 1050533 1314197 1314481 1026 1050535 1050855 1314483 1314803 1155 1051613 1051825 1315560 1315772 766 1053310 1053513 1317257 1317460 734 1055016 1055277 1318963 1319224 943 1055614 1055820 1319561 1319767 745 1056041 1056336 1319988 1320283 1065 1062010 1062268 1325959 1326217 932 1062270 1062472 1326219 1326421 730 1062766 1063132 1326715 1327081 1321 1065120 1065522 1329067 1329469 1450 1066521 1066728 1330468 1330675 748 1068256 1068461 1393625 1393830 741 1070073 1070289 1395442 1395658 781 1073596 1073868 1398965 1399237 982 1075019 1075230 1400388 1400599 763 1078198 1078642 1403567 1404011 1602 1080889 1081661 1408390 1409162 2782 1081663 1081907 1409164 1409408 882 1083213 1083564 1410714 1411065 1267 1084147 1084615 1411647 1412115 1688 1084617 1085220 1412117 1412720 2174 1085337 1086089 1412837 1413589 2710 1086091 1086892 1413591 1414392 2887 1086894 1088334 1414394 1415834 5187 1088336 1088973 1415836 1416473 2296 1088975 1089198 1416475 1416698 806 1089200 1090692 1416700 1418192 5374 1090694 1091324 1418194 1418824 2271 1091338 1091738 1418838 1419238 1443 1091740 1092322 1419240 1419822 2098 1092582 1092822 1420082 1420322 867 1093020 1093334 1420520 1420834 1134 1094725 1094939 1452708 1452922 774 1095905 1096124 1453888 1454107 792 1097354 1097647 1542356 1542649 1058 1098625 1098917 1543627 1543919 1054 1099210 1099412 1544212 1544414 730 1099457 1099684 1544459 1544686 820 1100764 1101034 1545766 1546036 975 1101045 1101339 1546047 1546341 1062 1101674 1101989 1546676 1546991 1137 1102092 1102363 1547094 1547365 979 1102365 1102618 1547367 1547620 914 1103104 1103471 1548106 1548473 1324 1103473 1103754 1548475 1548756 1015 1104258 1104697 1549263 1549702 1584 1104825 1105118 1549830 1550123 1058 1105264 1105635 1550269 1550640 1339 1107124 1107413 1552129 1552418 1044 1108271 1108657 1553275 1553661 1393 1108681 1108924 1553685 1553928 878 1109346 1109632 1554350 1554636 1033 1109634 1109956 1554638 1554960 1162 1110421 1110740 1555425 1555744 1152 1113150 1113674 1558154 1558678 1890 1114033 1114253 1559037 1559257 795 1114604 1115018 1559608 1560022 1494 1115539 1116064 1560543 1561068 1893 1117589 1117965 1562593 1562969 1357 1118292 1118588 1563296 1563592 1069 1118709 1118950 1563713 1563954 871 1119159 1119388 1564163 1564392 828 1119723 1119947 1564727 1564951 810 1119949 1120261 1564953 1565265 1126 1120588 1120794 1565595 1565801 745 1122359 1122620 1567366 1567627 943 1122622 1123084 1567629 1568091 1666 1123086 1123315 1568093 1568322 828 1123562 1123837 1568569 1568844 993 1124397 1124875 1569404 1569882 1724 1124877 1125079 1569884 1570086 730 1125081 1125401 1570088 1570408 1155 1126416 1126638 1571423 1571645 802 1126972 1127504 1571979 1572511 1918 1130129 1130410 1575136 1575417 1015 1130432 1130769 1575439 1575776 1216 1130915 1131189 1575922 1576196 990 1131307 1131584 1576314 1576591 1000 1131710 1132007 1576717 1577014 1072 1132639 1132844 1577643 1577848 741 1133931 1134198 1578901 1579168 964 1134305 1134543 1579275 1579513 860 1134765 1135042 1579735 1580012 1000 1135209 1135533 1580179 1580503 1170 1135535 1135746 1580505 1580716 763 1138152 1138351 1583122 1583321 720 1141656 1141899 1586625 1586868 878 1141974 1142422 1586943 1587391 1616 1142424 1142719 1587393 1587688 1065 1142772 1144076 1587741 1589045 4698 1144231 1144610 1589200 1589579 1368 1145893 1146095 1590851 1591053 730 1146097 1146768 1591055 1591726 2419 1147425 1147659 1592383 1592617 846 1147661 1148426 1592619 1593384 2757 1148428 1148768 1593386 1593726 1227 1148860 1149134 1593818 1594092 990 1149679 1149887 1594637 1594845 752 1150045 1150495 1595003 1595453 1623 1150497 1150934 1595455 1595892 1576 1150936 1151627 1595894 1596585 2491 1151758 1152008 1596716 1596966 903 1152010 1152308 1596968 1597266 1076 1154189 1154470 1599147 1599428 1015 1154963 1155234 1599921 1600192 979 1155446 1155681 1600404 1600639 849 1155893 1156144 1600851 1601102 907 1156829 1157332 1601788 1602291 1814 1157334 1158035 1602293 1602994 2527 1158102 1158403 1603061 1603362 1087 1158405 1158624 1603364 1603583 792 1158834 1159823 1603793 1604782 3564 1160058 1160311 1605017 1605270 914 1160313 1160669 1605272 1605628 1285 1161060 1161369 1606039 1606348 1116 1161617 1162284 1606596 1607263 2404 1162328 1162545 1607307 1607524 784 1162766 1163050 1607745 1608029 1026 1163052 1163417 1608031 1608396 1317 1164290 1164504 1609269 1609483 774 1165119 1165326 1610099 1610306 748 1166429 1166655 1611409 1611635 817 1167097 1167326 1612094 1612323 828 1167728 1168624 1612725 1613621 3229 1168633 1168993 1613631 1613991 1299 1169409 1169754 1614407 1614752 1245 1170137 1170390 1615135 1615388 914 1170542 1170789 1615540 1615787 892 1170869 1171139 1615867 1616137 975 1171339 1171569 1616337 1616567 831 1174014 1174222 1619012 1619220 752 1174295 1174890 1619293 1619888 2145 1177067 1177338 1622065 1622336 979 1177649 1177945 1622647 1622943 1069 1178544 1179094 1623542 1624092 1983 1181855 1182215 1625567 1625927 1299 1182373 1182719 1626085 1626431 1249 1183589 1184030 1674604 1675045 1591 1184592 1185541 1675607 1676556 3420 1186128 1186504 1677143 1677519 1357 1187317 1187531 1678332 1678546 774 1188196 1188482 1694671 1694957 1033 1188520 1189014 1694995 1695489 1782 1190190 1190410 1696665 1696885 795 1190490 1190704 1696965 1697179 774 1191000 1191427 1697475 1697902 1540 1191581 1191893 1698056 1698368 1126 1192367 1192596 1698842 1699071 828 1192607 1193105 1699082 1699580 1796 1194097 1194607 1700572 1701082 1839 1223501 1223728 1753170 1753397 820 1223730 1224097 1753399 1753766 1324 1224276 1224584 1753945 1754253 1112 1224724 1224971 1754393 1754640 892 1225028 1225507 1754697 1755176 1728 1225637 1225893 1755306 1755562 925 1226447 1226673 1756116 1756342 817 1226859 1227359 1756528 1757028 1803 1227866 1228311 1757535 1757980 1605 1229087 1229304 1758756 1758973 784 1230079 1230469 1759748 1760138 1407 1230471 1230676 1760140 1760345 741 1232248 1232471 1761917 1762140 806 1232606 1232814 1762275 1762483 752 1232921 1233214 1762590 1762883 1058 1233216 1233441 1762885 1763110 813 1233845 1234076 1763514 1763745 835 1234072 1234389 1763742 1764059 1144 1234682 1234894 1764352 1764564 766 1235295 1235605 1764965 1765275 1119 1235979 1236510 1765649 1766180 1915 1236747 1237304 1766450 1767007 2008 1237399 1237736 1767102 1767439 1216 1237918 1238175 1767621 1767878 928 1239867 1240102 1769576 1769811 849 1242327 1242682 1772037 1772392 1281 1243274 1243615 1774297 1774638 1231 1243647 1243904 1774670 1774927 928 1244959 1245314 1782097 1782452 1281 1247120 1247325 1784245 1784450 741 1248014 1248231 1785139 1785356 784 1249651 1250407 1786776 1787532 2725 1253751 1253992 1787740 1787981 871 1254762 1254976 1788751 1788965 774 1255802 1256209 1789866 1790273 1468 1256241 1256512 1790305 1790576 979 1256522 1256851 1790586 1790915 1188 1257015 1257237 1791079 1791301 802 1257611 1257936 1791675 1792000 1173 1257938 1258387 1792002 1792451 1620 1258476 1258767 1792540 1792831 1051 1259433 1259722 1793497 1793786 1044 1259787 1260338 1793851 1794402 1987 1260493 1260912 1794557 1794976 1512 1261084 1261616 1795148 1795680 1918 1261948 1262344 1796012 1796408 1429 1262346 1262775 1796410 1796839 1548 1263548 1264381 1797612 1798445 3002 1264383 1264604 1798447 1798668 799 1264789 1265051 1798853 1799115 946 1265092 1265699 1799156 1799763 2188 1265755 1266058 1799819 1800122 1094 1266060 1266295 1800124 1800359 849 1266477 1266715 1800541 1800779 860 1266773 1267176 1800837 1801240 1454 1267516 1267889 1801580 1801953 1346 1268797 1269100 1802861 1803164 1094 1269947 1270177 1804001 1804231 831 1270815 1271177 1804869 1805231 1306 1271365 1271578 1805419 1805632 770 1272700 1272973 1806757 1807030 986 1274609 1274904 1808667 1808962 1065 1274906 1275166 1808964 1809224 939 1275375 1275709 1809433 1809767 1206 1275986 1276261 1810044 1810319 993 1276656 1276982 1810714 1811040 1177 1277047 1277361 1811105 1811419 1134 1278013 1278290 1812071 1812348 1000 1278921 1279555 1812856 1813490 2286 1280043 1280875 1813978 1814810 2998 1281324 1281649 1815259 1815584 1173 1281822 1282332 1815757 1816267 1839 1282500 1282720 1816435 1816655 795 1283051 1283499 1816986 1817434 1616 1284041 1284605 1817976 1818540 2034 1285008 1285243 1818943 1819178 849 1286759 1287018 1820516 1820775 936 1287649 1287858 1821406 1821615 756 1288191 1288609 1821948 1822366 1508 1289330 1289537 1823087 1823294 748 1289539 1289987 1823296 1823744 1616 1290220 1290510 1823977 1824267 1047 1290604 1290974 1824361 1824731 1335 1291441 1291694 1825198 1825451 914 1291924 1292318 1825681 1826075 1422 1292658 1292978 1826414 1826734 1155 1292980 1293260 1826736 1827016 1011 1295001 1295224 1827756 1827979 806 1295226 1295459 1827981 1828214 842 1295566 1296074 1828321 1828829 1832 1296256 1296491 1829011 1829246 849 1296988 1297431 1829743 1830186 1598 1297629 1297831 1830384 1830586 730 1298187 1298500 1830942 1831255 1130 1299091 1299323 1831847 1832079 838 1300304 1300574 1833060 1833330 975 1300836 1301049 1833592 1833805 770 1301774 1301978 1834530 1834734 738 1304012 1304214 1836768 1836970 730 1304216 1304712 1836972 1837468 1789 1306115 1306392 1838871 1839148 1000 1306394 1306767 1839150 1839523 1346 1307080 1307422 1839837 1840179 1234 1307526 1307920 1840283 1840677 1422 1308592 1308957 1841350 1841715 1317 1309002 1309261 1841761 1842020 936 1309694 1309933 1842453 1842692 864 1309959 1310355 1842718 1843114 1429 1310357 1310661 1843116 1843420 1098 1310861 1311158 1843620 1843917 1072 1311220 1311819 1843979 1844578 2160 1311945 1312215 1844704 1844974 975 1654122 1654379 2273590 2273847 928 1654543 1654844 2274011 2274312 1087 1655023 1655285 2274491 2274753 946 1656596 1656807 2276064 2276275 763 1656920 1657151 2276388 2276619 835 1657520 1657818 2276988 2277286 1076 1658870 1659291 2278338 2278759 1519 1659463 1659737 2278931 2279205 990 1659803 1660033 2279271 2279501 831 1660035 1660281 2279503 2279749 889 1660433 1660653 2279901 2280121 795 1661139 1661651 2280607 2281119 1846 1662613 1662816 2282081 2282284 734 1663623 1663962 2283090 2283429 1224 1663964 1664212 2283431 2283679 896 1664890 1665423 2284357 2284890 1922 1666224 1666464 2285691 2285931 867 1666466 1666766 2285933 2286233 1083 1666768 1667146 2286235 2286613 1364 1667359 1667674 2286826 2287141 1137 1668458 1668758 2287925 2288225 1083 1668760 1669020 2288227 2288487 939 1669621 1669831 2289088 2289298 759 1670319 1670539 2289786 2290006 795 1670541 1671010 2290008 2290477 1692 1672979 1673255 2292446 2292722 997 1674007 1674215 2293474 2293682 752 1674316 1674594 2293783 2294061 1004 1674995 1675266 2294462 2294733 979 1675268 1675475 2294735 2294942 748 1675523 1675836 2294990 2295303 1130 1675988 1676495 2295455 2295962 1828 1676681 1677165 2296148 2296632 1746 1677410 1678123 2296877 2297590 2570 1678591 1678853 2298058 2298320 946 1678873 1679604 2298340 2299071 2635 1679606 1680258 2299073 2299725 2350 1681229 1681488 2300696 2300955 936 1681529 1681825 2300996 2301292 1069 1681904 1682202 2301371 2301669 1076 1682552 1682772 2302020 2302240 795 1683086 1683345 2302554 2302813 936 1683347 1684023 2302815 2303491 2437 1684690 1684966 2304158 2304434 997 1685041 1685446 2304509 2304914 1461 1685588 1686309 2305056 2305777 2599 1686565 1686909 2306033 2306377 1242 1686911 1687212 2306379 2306680 1087 1687553 1687752 2307021 2307220 720 1687757 1688014 2307225 2307482 928 1688577 1688776 2308045 2308244 720 1689575 1689781 2308862 2309068 745 1690810 1691083 2310096 2310369 986 1691787 1691987 2311073 2311273 723 1691989 1692234 2311275 2311520 885 1692392 1692684 2311678 2311970 1054 1693703 1693903 2312991 2313191 723 1694957 1695173 2314245 2314461 781 1695543 1696130 2314839 2315426 2116 1696602 1696807 2315898 2316103 741 1697022 1697225 2316318 2316521 734 1697227 1697499 2316523 2316795 982 1698776 1699026 2318072 2318322 903 1700150 1700479 2319446 2319775 1188 1701538 1701767 2320836 2321065 828 1702836 1703180 2322135 2322479 1242 1703690 1703890 2322989 2323189 723 1703892 1704092 2323191 2323391 723 1704678 1705054 2323977 2324353 1357 1705074 1705300 2324373 2324599 817 1706333 1706594 2325632 2325893 943 1707144 1707376 2326443 2326675 838 1707660 1707933 2326959 2327232 986 1707935 1708357 2327234 2327656 1522 1708359 1708684 2327658 2327983 1173 1708950 1709206 2328249 2328505 925 1709208 1709492 2328507 2328791 1026 1710050 1710352 2329349 2329651 1090 1710738 1711294 2330037 2330593 2005 1711302 1711714 2330601 2331013 1486 1712016 1712422 2331315 2331721 1465 1713608 1714003 2332907 2333302 1425 1714161 1714558 2333460 2333857 1432 1714647 1714930 2333946 2334229 1022 1714932 1715271 2334231 2334570 1224 1715774 1716050 2335074 2335350 997 1716622 1716821 2335922 2336121 720 1717659 1717866 2336958 2337165 748 1718229 1718448 2337529 2337748 792 1718507 1718990 2337807 2338290 1742 1719135 1719543 2338435 2338843 1472 1719809 1720020 2339109 2339320 763 1720375 1720610 2339675 2339910 849 1720675 1720958 2339975 2340258 1022 1722052 1722498 2341352 2341798 1609 1722659 1722867 2341959 2342167 752 1723992 1724230 2343292 2343530 860 1725414 1725724 2344714 2345024 1119 1725897 1726101 2345197 2345401 738 1726742 1726941 2346042 2346241 720 1729774 1730007 2349074 2349307 842 1730296 1730513 2349596 2349813 784 1730624 1730872 2349924 2350172 896 1731031 1731245 2350331 2350545 774 1731451 1731651 2350751 2350951 723 1731943 1732266 2351243 2351566 1166 1732443 1732738 2351744 2352039 1065 1733244 1733468 2352545 2352769 810 1733494 1733726 2352795 2353027 838 1734492 1735508 2353777 2354793 3661 1735510 1735985 2354795 2355270 1713 1736821 1737200 2356106 2356485 1368 1737301 1737638 2356586 2356923 1216 1737679 1738130 2356964 2357415 1627 1738573 1738859 2357858 2358144 1033 1739051 1739291 2358336 2358576 867 1739293 1739737 2358578 2359022 1602 1739937 1740185 2359222 2359470 896 1742227 1742471 2361514 2361758 882 1743603 1743817 2362890 2363104 774 1744113 1744317 2363400 2363604 738 1744319 1744621 2363606 2363908 1090 1745169 1745385 2364456 2364672 781 1746131 1746385 2365418 2365672 918 1746573 1746895 2365860 2366182 1162 1747337 1747568 2366624 2366855 835 1748232 1748460 2367519 2367747 824 1748853 1749207 2368140 2368494 1278 1749248 1749452 2368535 2368739 738 1749626 1749828 2368913 2369115 730 1750229 1750511 2369516 2369798 1018 1750757 1750965 2370044 2370252 752 1751171 1751397 2370458 2370684 817 1751450 1751849 2370737 2371136 1440 1752037 1752332 2371324 2371619 1065 1752334 1752630 2371621 2371917 1069 1752938 1753287 2372226 2372575 1260 1753361 1754001 2372649 2373289 2307 1754288 1754853 2373576 2374141 2037 1754978 1755727 2374266 2375015 2700 1757894 1758099 2377181 2377386 741 1758817 1759018 2378104 2378305 727 1759643 1760001 2378930 2379288 1292 1760024 1760307 2379311 2379594 1022 1760888 1761168 2380175 2380455 1011 1761426 1761639 2380713 2380926 770 1761758 1762277 2381045 2381564 1872 1763063 1763299 2382351 2382587 853 1763817 1764167 2383105 2383455 1263 1764169 1764674 2383457 2383962 1821 1764787 1765292 2384075 2384580 1821 1766897 1767545 2386185 2386833 2336 1768193 1768741 2387481 2388029 1976 1769209 1770005 2388497 2389293 2869 1770027 1771061 2389315 2390349 3726 1776510 1776832 2395800 2396122 1162 1777391 1777779 2396686 2397074 1400 1778340 1778576 2397635 2397871 853 1779198 1779491 2398493 2398786 1058 1779895 1780141 2399190 2399436 889 1780820 1781052 2400115 2400347 838 1781990 1782237 2401285 2401532 892 1782239 1782454 2401534 2401749 777 1783349 1783605 2402644 2402900 925 1784312 1784529 2403607 2403824 784 1784531 1785024 2403826 2404319 1778 1785293 1785664 2404588 2404959 1339 1785987 1786594 2405282 2405889 2188 1786596 1786808 2405891 2406103 766 1786974 1787396 2406269 2406691 1522 1787564 1788076 2406859 2407371 1846 1789601 1789856 2408896 2409151 921 1789985 1790241 2409280 2409536 925 1790516 1790720 2409811 2410015 738 1790722 1790924 2410017 2410219 730 1790932 1791157 2410227 2410452 813 1791358 1791557 2410653 2410852 720 1792805 1793042 2412100 2412337 856 1793280 1793651 2412576 2412947 1339 1793653 1794317 2412949 2413613 2394 1794961 1795189 2414257 2414485 824 1795191 1795402 2414487 2414698 763 1795903 1796127 2415199 2415423 810 1796193 1796481 2415489 2415777 1040 1796483 1796797 2415779 2416093 1134 1797149 1797739 2416444 2417034 2127 1797741 1798777 2417036 2418072 3733 1799635 1799909 2418930 2419204 990 1799911 1800548 2419206 2419843 2296 1800565 1800878 2419860 2420173 1130 1803089 1803365 2422385 2422661 997 1803598 1803884 2422894 2423180 1033 1804006 1804223 2423302 2423519 784 1804225 1804865 2423521 2424161 2307 1805161 1805519 2424457 2424815 1292 1805573 1805940 2424869 2425236 1324 1805942 1806186 2425238 2425482 882 1807310 1807896 2426606 2427192 2113 1808117 1808409 2427413 2427705 1054 1808848 1809156 2428144 2428452 1112 1809717 1809924 2429013 2429220 748 1810721 1811386 2430016 2430681 2397 1811496 1811808 2430791 2431103 1126 1812044 1812254 2431339 2431549 759 1813444 1813751 2432739 2433046 1108 1815933 1816168 2435026 2435261 849 1816170 1816385 2435263 2435478 777 1816567 1816846 2435661 2435940 1008 1816883 1817128 2435977 2436222 885 1817130 1817717 2436224 2436811 2116 1818438 1818817 2437532 2437911 1368 1819078 1819806 2438172 2438900 2624 1820086 1820289 2439181 2439384 734 1820347 1820650 2439442 2439745 1094 1821080 1821318 2440175 2440413 860 1821799 1822009 2440894 2441104 759 1822925 1823352 2442020 2442447 1540 1823455 1823845 2442550 2442940 1407 1825441 1825682 2444536 2444777 871 1828148 1828460 2447243 2447555 1126 1830179 1830396 2449274 2449491 784 1831039 1831362 2450134 2450457 1166 1833600 1833973 2452695 2453068 1346 1835176 1835437 2454271 2454532 943 1837316 1837627 2456411 2456722 1123 1839377 1839643 2458472 2458738 961 1840093 1840608 2459188 2459703 1857 1840832 1841088 2459927 2460183 925 1841369 1841757 2460464 2460852 1400 1842024 1842384 2461119 2461479 1299 1842790 1843015 2461885 2462110 813 1844112 1844407 2463207 2463502 1065 1844713 1844993 2463808 2464088 1011 1845727 1845938 2464822 2465033 763 1845940 1846159 2465035 2465254 792 1847856 1848154 2466951 2467249 1076 1848836 1849199 2468722 2469085 1310 1849495 1849718 2469381 2469604 806 1850211 1850541 2470097 2470427 1191 1850732 1850934 2470618 2470820 730 1850993 1851408 2470879 2471294 1497 1852529 1853020 2473729 2474220 1771 1853028 1853379 2474228 2474579 1267 1853852 1854132 2475052 2475332 1011 1854784 1855075 2475969 2476260 1051 1856078 1856343 2477263 2477528 957 1856413 1856625 2477598 2477810 766 1856711 1857112 2477896 2478297 1447 1857558 1858246 2478743 2479431 2480 1858248 1858551 2479433 2479736 1094 1858553 1858836 2479738 2480021 1022 1860370 1861509 2481555 2482694 4104 1861511 1861782 2482696 2482967 979 1863334 1863610 2484522 2484798 997 1863926 1864222 2485114 2485410 1069 1864224 1864732 2485412 2485920 1832 1864734 1865340 2485922 2486528 2185 1865342 1865574 2486530 2486762 838 1866380 1866624 2487568 2487812 882 1866680 1866887 2487868 2488075 748 1867227 1867483 2488415 2488671 925 1867593 1867912 2488781 2489100 1152 1868545 1868988 2489733 2490176 1598 1869317 1869768 2490505 2490956 1627 1869885 1870338 2491073 2491526 1634 1870392 1870609 2491580 2491797 784 1870868 1871067 2492056 2492255 720 1871297 1871667 2492485 2492855 1335 1871669 1872012 2492857 2493200 1238 1872212 1872466 2493400 2493654 918 1873361 1873609 2494549 2494797 896 1874584 1874784 2495772 2495972 723 1875329 1875572 2496517 2496760 878 1876026 1876318 2497214 2497506 1054 1877472 1877905 2498659 2499092 1562 1878716 1879194 2499903 2500381 1724 1879555 1880176 2500742 2501363 2239 1880178 1880422 2501365 2501609 882 1882198 1882517 2503610 2503929 1152 1882790 1883016 2504202 2504428 817 1883198 1883502 2504610 2504914 1098 1883504 1883748 2504916 2505160 882 1885188 1885465 2506601 2506878 1000 1885990 1886200 2507403 2507613 759 1887393 1887625 2508806 2509038 838 1887654 1888035 2509067 2509448 1375 1888341 1888556 2509754 2509969 777 1889085 1889473 2510498 2510886 1400 1890096 1890394 2511509 2511807 1076 1890396 1890615 2511809 2512028 792 1891089 1891371 2512502 2512784 1018 1892049 1892388 2513462 2513801 1224 1892542 1892861 2513955 2514274 1152 1893008 1893345 2514421 2514758 1216 1893700 1893987 2515113 2515400 1036 1894688 1895028 2516101 2516441 1227 1895030 1895434 2516443 2516847 1458 1895450 1895675 2516863 2517088 813 1895677 1896174 2517090 2517587 1792 1896582 1896861 2517995 2518274 1008 1897197 1897669 2518610 2519082 1702 1897725 1898386 2519138 2519799 2383 1898635 1898897 2520048 2520310 946 1898899 1899782 2520312 2521195 3182 1900050 1900363 2521465 2521778 1130 1901084 1901334 2522499 2522749 903 1901591 1902258 2523006 2523673 2404 1902260 1903250 2523675 2524665 3567 1903706 1903916 2525122 2525332 759 1904451 1904683 2525867 2526099 838 1905090 1905374 2526506 2526790 1026 1905394 1905787 2526810 2527203 1418 1906033 1906301 2527448 2527716 968 1906477 1906764 2527892 2528179 1036 1907251 1907489 2528668 2528906 860 1907826 1908287 2529243 2529704 1663 1909427 1909630 2530844 2531047 734 1909823 1910092 2531240 2531509 972 1910094 1910722 2531511 2532139 2264 1911155 1911438 2532572 2532855 1022 1911854 1912301 2533271 2533718 1612 1912475 1912707 2533892 2534124 838 1912709 1913020 2534126 2534437 1123 1913418 1913755 2534835 2535172 1216 1914182 1914433 2535599 2535850 907 1914518 1914724 2535935 2536141 745 1915040 1915634 2536457 2537051 2142 1915716 1915918 2537133 2537335 730 1916259 1916497 2537676 2537914 860 1919902 1920259 2541320 2541677 1288 1920774 1921293 2542192 2542711 1872 1921956 1922185 2543374 2543603 828 1922734 1923082 2544152 2544500 1256 1923603 1923893 2545021 2545311 1047 1924022 1924222 2545440 2545640 723 1924256 1924465 2545674 2545883 756 1925121 1925374 2546539 2546792 914 1925790 1926091 2547208 2547509 1087 1928392 1928797 2549811 2550216 1461 1928836 1929340 2550255 2550759 1818 1929708 1930092 2551127 2551511 1386 1930094 1930449 2551513 2551868 1281 1930451 1930783 2551870 2552202 1198 1931042 1931502 2552461 2552921 1659 1931504 1931847 2552923 2553266 1238 1931852 1932171 2553271 2553590 1152 1932814 1933017 2554233 2554436 734 1933019 1933251 2554438 2554670 838 1933394 1934088 2554813 2555507 2502 1934090 1934303 2555509 2555722 770 1934591 1934791 2556010 2556210 723 1935284 1935483 2556703 2556902 720 1935593 1936007 2557012 2557426 1494 1936009 1936520 2557428 2557939 1843 1936878 1937808 2558297 2559227 3351 1937810 1938056 2559229 2559475 889 1938058 1938409 2559477 2559828 1267 1938547 1938764 2559966 2560183 784 1939078 1939529 2560497 2560948 1627 1939546 1939765 2560965 2561184 792 1939957 1940251 2561376 2561670 1062 1940740 1940996 2562159 2562415 925 1942544 1943027 2564062 2564545 1742 1943029 1943304 2564547 2564822 993 1943422 1943789 2564940 2565307 1324 1943791 1944077 2565309 2565595 1033 1944316 1944535 2565834 2566053 792 1944537 1944809 2566055 2566327 982 1945299 1945757 2566817 2567275 1652 1946023 1946328 2567541 2567846 1101 1946330 1946559 2567848 2568077 828 1946564 1946799 2568082 2568317 849 1946827 1947162 2568345 2568680 1209 1948177 1948773 2569695 2570291 2149 1949888 1950127 2571406 2571645 864 1950394 1950831 2571912 2572349 1576 1950833 1951383 2572351 2572901 1983 1951403 1952063 2572921 2573581 2379 1953790 1954060 2575308 2575578 975 1954270 1954649 2575788 2576167 1368 1954951 1955256 2576469 2576774 1101 1956632 1956895 2578153 2578416 950 1957021 1957247 2578542 2578768 817 1957920 1958470 2579441 2579991 1983 1958472 1958686 2579993 2580207 774 1959135 1959596 2580656 2581117 1663 1961538 1961756 2583059 2583277 788 1961794 1962031 2583315 2583552 856 1962511 1962740 2584032 2584261 828 1963041 1963240 2584562 2584761 720 1964000 1964244 2585521 2585765 882 1964308 1964714 2585829 2586235 1465 1964720 1964952 2586241 2586473 838 1964954 1965247 2586475 2586768 1058 1965875 1966077 2587396 2587598 730 1966259 1966477 2587780 2587998 788 1966819 1967436 2588340 2588957 2224 1968034 1968254 2589555 2589775 795 1968813 1969103 2590334 2590624 1047 1969837 1970060 2591358 2591581 806 1970086 1970291 2591607 2591812 741 1971049 1971529 2592568 2593048 1731 1971978 1972255 2593497 2593774 1000 1972876 1973268 2594395 2594787 1414 1973283 1973564 2594802 2595083 1015 1974175 1974430 2595694 2595949 921 1975026 1975276 2596545 2596795 903 1975278 1975528 2596797 2597047 903 1975671 1975990 2597190 2597509 1152 1977699 1977960 2598442 2598703 943 1978683 1978945 2599426 2599688 946 1979046 1979359 2599789 2600102 1130 1980567 1980795 2601310 2601538 824 1982052 1982308 2602796 2603052 925 1982625 1982842 2603369 2603586 784 1982844 1983139 2603588 2603883 1065 1984651 1985338 2605395 2606082 2476 1985855 1986116 2606600 2606861 943 1986452 1987099 2607196 2607843 2332 1987606 1988052 2608350 2608796 1609 1989494 1989724 2610238 2610468 831 1989829 1990042 2631693 2631906 770 1990043 1990278 2631906 2632141 849 1990754 1991024 2632617 2632887 975 1991686 1991942 2633549 2633805 925 1992676 1992895 2634539 2634758 792 1993250 1993573 2635113 2635436 1166 1993733 1993977 2635596 2635840 882 1993979 1994269 2635842 2636132 1047 1994271 1994552 2636134 2636415 1015 1996761 1997337 2638624 2639200 2077 1997710 1998233 2639573 2640096 1886 1998736 1998953 2640599 2640816 784 1998955 1999175 2640818 2641038 795 1999338 1999939 2641201 2641802 2167 2001495 2001699 2643618 2643822 738 2002872 2003182 2644986 2645296 1119 2004044 2004246 2646158 2646360 730 2004760 2005085 2646874 2647199 1173 2007088 2007366 2649202 2649480 1004 2007394 2007805 2649508 2649919 1483 2007807 2008180 2649921 2650294 1346 2011047 2011524 2655125 2655602 1720 2011589 2011918 2655667 2655996 1188 2013971 2014599 2658049 2658677 2264 2014528 2014738 2658668 2658878 759 2014884 2015239 2659024 2659379 1281 2015595 2015830 2659735 2659970 849 2016279 2016783 2660419 2660923 1818 2017939 2018353 2662080 2662494 1494 2018612 2018943 2662753 2663084 1195 2019325 2019661 2663466 2663802 1213 2019822 2020218 2663963 2664359 1429 2020220 2020530 2664361 2664671 1119 2020532 2020953 2664673 2665094 1519 2020955 2021623 2665096 2665764 2408 2021625 2021857 2665766 2665998 838 2021859 2022464 2666000 2666605 2181 2022653 2023379 2666794 2667520 2617 2023837 2024052 2667978 2668193 777 2025011 2025411 2669152 2669552 1443 2026243 2026459 2670385 2670601 781 2027335 2027681 2671477 2671823 1249 2027725 2028345 2671867 2672487 2235 2028564 2028792 2672706 2672934 824 2028869 2029072 2673011 2673214 734 2030970 2031175 2675112 2675317 741 2033871 2034187 2678006 2678322 1141 2035344 2035564 2679479 2679699 795 2037139 2037485 2681275 2681621 1249 2039412 2039618 2683547 2683753 745 2039771 2040082 2683906 2684217 1123 2040374 2040678 2684509 2684813 1098 2041532 2042285 2730847 2731600 2714 2042293 2042551 2731608 2731866 932 2042553 2042842 2731868 2732157 1044 2043421 2043668 2732736 2732983 892 2043670 2043894 2732985 2733209 810 2045104 2045324 2734419 2734639 795 2052078 2052322 2742298 2742542 882 2053032 2053248 2743252 2743468 781 2053634 2053854 2743854 2744074 795 2053856 2054088 2744076 2744308 838 2054090 2054397 2744310 2744617 1108 2054614 2054816 2744834 2745036 730 2056033 2056236 2746250 2746453 734 2057287 2057578 2747504 2747795 1051 2062915 2064054 2753131 2754270 4104 2065897 2066449 2757364 2757916 1990 2066623 2066961 2758091 2758429 1220 2074799 2075316 2761899 2762416 1864 2075456 2075809 2762556 2762909 1274 2075811 2076169 2762910 2763268 1292 2076404 2076706 2763504 2763806 1090 2077254 2077487 2764354 2764587 842 2077678 2077940 2764778 2765040 946 2077969 2078252 2765069 2765352 1022 2079328 2079557 2766429 2766658 828 2079685 2079908 2766786 2767009 806 2082879 2083130 2769981 2770232 907 2084419 2084738 2771521 2771840 1152 2084836 2085336 2771938 2772438 1803 2086206 2086438 2773308 2773540 838 2086440 2086651 2773542 2773753 763 2091346 2091562 2778006 2778222 781 2094483 2094687 2781143 2781347 738 2097262 2097574 2783920 2784232 1126 2113919 2114137 2803895 2804113 788 2119227 2119458 2809107 2809338 835 2122375 2122654 2812343 2812622 1008 2122745 2123002 2812713 2812970 928 2126130 2126337 2816098 2816305 748 2127587 2127870 2817558 2817841 1022 2128148 2128410 2818119 2818381 946 2130083 2130306 2820054 2820277 806 2131508 2131765 2821479 2821736 928 2133560 2133891 2823531 2823862 1195 2133935 2134325 2823906 2824296 1407 2134864 2135487 2824835 2825458 2246 2135806 2136050 2825778 2826022 882 2136085 2136302 2826057 2826274 784 2139119 2139375 2829563 2829819 925 2139410 2139702 2829854 2830146 1054 2140010 2140292 2830454 2830736 1018 2141744 2141972 2832191 2832419 824 2143720 2144076 2834167 2834523 1285 2144305 2144574 2834752 2835021 972 2144682 2145093 2835121 2835532 1483 2145494 2145735 2835933 2836174 871 2145917 2146119 2836356 2836558 730 2152874 2153097 2842908 2843131 806 2157500 2157728 2847534 2847762 824 2159512 2159726 2849546 2849760 774 2160915 2161195 2850949 2851229 1011 2163830 2164029 2853865 2854064 720 2164634 2164884 2854669 2854919 903 2167991 2168191 2857396 2857596 723 2169513 2170123 2857657 2858267 2199 2170692 2170904 2858836 2859048 766 2171027 2171256 2859171 2859400 828 2171771 2172054 2859915 2860198 1022 2172899 2173232 2861043 2861376 1202 2173706 2173992 2861850 2862136 1033 2174134 2174470 2862278 2862614 1213 2176255 2176466 2864390 2864601 763 2176519 2176744 2864654 2864879 813 2178034 2178238 2866170 2866374 738 2178361 2178572 2866497 2866708 763 2179950 2180203 2868086 2868339 914 2180394 2180620 2868530 2868756 817 2181635 2182001 2869771 2870137 1321 2182296 2182583 2870432 2870719 1036 2183634 2183837 2873952 2874155 734 2183839 2184087 2874157 2874405 896 2184857 2185097 2875201 2875441 867 2191221 2191427 2881566 2881772 745 2191466 2191724 2881811 2882069 932 2192021 2192638 2882366 2882983 2224 2192659 2192863 2883004 2883208 738 2194182 2194415 2884527 2884760 842 2198233 2198437 2891590 2891794 738 2200600 2200819 2893957 2894176 792 2201929 2202134 2895284 2895489 741 2202523 2202763 2896812 2897052 867 2205919 2206158 2900208 2900447 864 2208053 2208314 2902342 2902603 943 2209448 2209707 2905053 2905312 936 2209899 2210143 2905506 2905750 882 2210145 2210348 2905752 2905955 734 2210350 2210690 2905957 2906297 1227 2211187 2211475 2906794 2907082 1040 2211943 2212186 2907550 2907793 878 2212389 2212600 2907996 2908207 763 2212933 2213153 2957456 2957676 795 2213274 2213964 2957797 2958487 2487 2218456 2218682 2963020 2963246 817 2219935 2220147 2964499 2964711 766 2220987 2221574 2965551 2966138 2116 2222369 2222661 2966933 2967225 1054 2222834 2223101 2967398 2967665 964 2223432 2223734 2967996 2968298 1090 2225496 2225947 2970060 2970511 1627 2226627 2226862 2971192 2971427 849 2226864 2227086 2971429 2971651 802 2228571 2228812 2979215 2979456 871 2229200 2229697 2979844 2980341 1792 2229855 2230119 2980499 2980763 954 2230121 2230345 2980765 2980989 810 2230830 2231351 2981474 2981995 1879 2231542 2231862 2982186 2982506 1155 2232100 2232389 2982744 2983033 1044 2233168 2233411 2983812 2984055 878 2233518 2234089 2984162 2984733 2059 2234218 2234614 2984862 2985258 1429 2234979 2235319 2985624 2985964 1227 2235321 2235523 2985966 2986168 730 2237286 2237587 2987931 2988232 1087 2238311 2238529 2988956 2989174 788 2238619 2238940 2989264 2989585 1159 2239235 2239730 2989880 2990375 1785 2239732 2239939 2990377 2990584 748 2241424 2242032 2992069 2992677 2192 2242658 2242988 2993303 2993633 1191 2243305 2243526 2993938 2994159 799 2243528 2244242 2994161 2994875 2574 2244244 2244464 2994877 2995097 795 2245425 2245663 2996056 2996294 860 2245849 2246101 2996480 2996732 910 2246572 2247571 2997203 2998202 3600 2247573 2248062 2998204 2998693 1764 2248064 2248699 2998695 2999330 2289 2248701 2249569 2999332 3000200 3128 2249571 2250110 3000202 3000741 1944 2251980 2252305 3002560 3002885 1173 2253003 2253255 3003583 3003835 910 2253263 2253585 3003843 3004165 1162 2256235 2256769 3006815 3007349 1926 2259308 2259547 3009889 3010128 864 2259903 2260198 3010484 3010779 1065 2260200 2260542 3010781 3011123 1234 2261231 2261549 3011812 3012130 1148 2261794 2262073 3012375 3012654 1008 2262083 2262426 3012664 3013007 1238 2263166 2263411 3013747 3013992 885 2263643 2264229 3014224 3014810 2113 2265002 2265281 3015583 3015862 1008 2266560 2266943 3017141 3017524 1382 2268043 2268619 3018625 3019201 2077 2269273 2269802 3019856 3020385 1908 2272483 2272778 3023066 3023361 1065 2274347 2274557 3024930 3025140 759 2275057 2275295 3025640 3025878 860 2275539 2275809 3026122 3026392 975 2275811 2276060 3026394 3026643 900 2276062 2276278 3026645 3026861 781 2276280 2276870 3026863 3027453 2127 2277547 2277881 3028130 3028464 1206 2278243 2278588 3028826 3029171 1245 2280390 2280642 3030973 3031225 910 2280686 2280890 3031269 3031473 738 2281848 2282052 3032431 3032635 738 2282054 2282528 3032637 3033111 1710 2283182 2283584 3033765 3034167 1450 2283586 2283854 3034169 3034437 968 2284626 2284837 3035207 3035418 763 2285076 2285356 3035657 3035937 1011 2285358 2285560 3035939 3036141 730 2289824 2290039 3039030 3039245 777 2290772 2290985 3039978 3040191 770 2291857 2292428 3041063 3041634 2059 2293245 2293458 3042451 3042664 770 2293481 2293703 3042687 3042909 802 2293807 2294108 3043013 3043314 1087 2294251 2294644 3043457 3043850 1418 2295290 2295646 3044496 3044852 1285 2295648 2296086 3044854 3045292 1580 2296175 2296494 3045381 3045700 1152 2296613 2296935 3045819 3046141 1162 2297470 2297887 3046676 3047093 1504 2298029 2298351 3047235 3047557 1162 2299772 2300043 3048978 3049249 979 2300249 2300505 3049455 3049711 925 2300657 2300999 3049863 3050205 1234 2301001 2301222 3050207 3050428 799 2301224 2301640 3050430 3050846 1501 2303695 2303957 3052335 3052597 946 2303998 2304404 3052638 3053044 1465 2304406 2304957 3053046 3053597 1987 2305313 2305678 3053953 3054318 1317 2306306 2306553 3054946 3055193 892 2306555 2306758 3055195 3055398 734 2309351 2309766 3057991 3058406 1497 2310631 2310948 3059271 3059588 1144 2311323 2311661 3059963 3060301 1220 2312305 2312510 3060945 3061150 741 2312535 2312783 3061175 3061423 896 2313355 2314407 3061995 3063047 3790 2315236 2315453 3063876 3064093 784 2315698 2315945 3064338 3064585 892 2316067 2316285 3064707 3064925 788 2316379 2316686 3065019 3065326 1108 2316688 2316893 3065328 3065533 741 2317120 2317469 3065760 3066109 1260 2317561 2317971 3066201 3066611 1479 2325693 2326066 3067117 3067490 1346 2326080 2326352 3067504 3067776 982 2328984 2329211 3070408 3070635 820 2329599 2329901 3071023 3071325 1090 2330034 2330252 3071458 3071676 788 2330740 2331008 3072164 3072432 968 2331328 2331814 3072752 3073238 1753 2332288 2332642 3073712 3074066 1278 2332644 2332860 3074068 3074284 781 2333387 2333610 3074811 3075034 806 2334785 2335009 3076208 3076432 810 2336208 2336413 3077631 3077836 741 2336415 2336647 3077838 3078070 838 2337189 2337503 3078612 3078926 1134 2337505 2337720 3078928 3079143 777 2338608 2338846 3080044 3080282 860 2339047 2339302 3080483 3080738 921 2339383 2339919 3080819 3081355 1933 2341025 2341445 3082461 3082881 1515 2342842 2343281 3084278 3084717 1584 2344015 2344303 3085451 3085739 1040 2348815 2349051 3093840 3094076 853 2350732 2351004 3095757 3096029 982 2351164 2351387 3096189 3096412 806 2351467 2351807 3096492 3096832 1227 2354350 2354957 3099375 3099982 2188 2354959 2355241 3099984 3100266 1018 2356031 2356258 3100885 3101112 820 2357185 2357442 3102038 3102295 928 2357830 2358383 3102683 3103236 1994 2358663 2359031 3103516 3103884 1328 2359274 2359777 3104127 3104630 1814 2361150 2361633 3106003 3106486 1742 2361635 2361898 3106488 3106751 950 2365050 2365259 3109903 3110112 756 2365300 2365505 3110153 3110358 741 2365729 2366155 3110582 3111008 1537 2366694 2366896 3111547 3111749 730 2366898 2367151 3111751 3112004 914 2367195 2367565 3112048 3112418 1335 2367738 2367939 3112591 3112792 727 2367941 2368333 3112794 3113186 1414 2368581 2369006 3113434 3113859 1533 2369104 2369342 3113957 3114195 860 2369344 2369561 3114197 3114414 784 2371115 2371346 3115968 3116199 835 2371355 2371559 3116208 3116412 738 2371934 2372317 3116787 3117170 1382 2373433 2373657 3118286 3118510 810 2374791 2375086 3119644 3119939 1065 2377211 2377470 3122064 3122323 936 2378844 2379095 3123697 3123948 907 2379699 2379931 3124552 3124784 838 2388716 2388930 3129159 3129373 774 2389160 2389806 3129603 3130249 2329 2391447 2391892 3131957 3132402 1605 2392296 2392513 3132806 3133023 784 2393010 2393211 3133520 3133721 727 2393779 2394028 3134289 3134538 900 2394207 2394843 3134717 3135353 2293 2395298 2395556 3135808 3136066 932 2397004 2397356 3137514 3137866 1270 2398063 2398308 3138573 3138818 885 2398727 2398941 3139237 3139451 774 2399860 2400179 3140370 3140689 1152 2401998 2402382 3142508 3142892 1386 2402384 2402883 3142894 3143393 1800 2403015 2403224 3143525 3143734 756 2403226 2403562 3143736 3144072 1213 2404124 2404360 3144634 3144870 853 2404362 2404984 3144872 3145494 2242 2405033 2405255 3145543 3145765 802 2405413 2405833 3145923 3146343 1515 2405973 2406286 3146483 3146796 1130 2407031 2407332 3147541 3147842 1087 2407843 2408135 3148353 3148645 1054 2408137 2408740 3148647 3149250 2174 2408742 2408978 3149252 3149488 853 2409223 2409580 3149733 3150090 1288 2409899 2410124 3150409 3150634 813 2410126 2410474 3150636 3150984 1256 2410877 2411974 3151387 3152484 3952 2411990 2412480 3152500 3152990 1767 2412572 2413115 3153082 3153625 1958 2413117 2413628 3153627 3154138 1843 2414188 2414453 3154698 3154963 957 2414542 2414910 3155052 3155420 1328 2415052 2415297 3155562 3155807 885 2415604 2415923 3156114 3156433 1152 2416588 2416808 3157098 3157318 795 2417113 2417411 3157623 3157921 1076 2417437 2417877 3157947 3158387 1587 2419183 2419387 3159693 3159897 738 2419395 2419663 3159905 3160173 968 2421331 2421674 3161841 3162184 1238 2422083 2422456 3162593 3162966 1346 2422485 2422840 3162995 3163350 1281 2423554 2424027 3164064 3164537 1706 2424119 2424381 3164629 3164891 946 2424749 2425018 3165259 3165528 972 2425053 2425264 3165563 3165774 763 2425958 2426231 3166468 3166741 986 2428031 2428341 3168541 3168851 1119 2428580 2428822 3169090 3169332 874 2429754 2430006 3170447 3170699 910 2430853 2431216 3171546 3171909 1310 2431218 2432122 3171911 3172815 3258 2432480 2433061 3173173 3173754 2095 2433567 2433864 3174260 3174557 1072 2434712 2434964 3175405 3175657 910 2435529 2435802 3176222 3176495 986 2435804 2436024 3176497 3176717 795 2436196 2436429 3176889 3177122 842 2437238 2437440 3177931 3178133 730 2438957 2439180 3179660 3179883 806 2439374 2439708 3180077 3180411 1206 2439945 2440207 3180648 3180910 946 2442085 2442302 3182788 3183005 784 2443422 2443627 3184125 3184330 741 2443784 2444015 3184487 3184718 835 2445317 2445553 3186020 3186256 853 2446350 2446688 3187053 3187391 1220 2454776 2454994 3195531 3195749 788 2455788 2456296 3196543 3197051 1832 2456619 2456870 3197374 3197625 907 2458874 2459512 3199628 3200266 2300 2460255 2460457 3201009 3201211 730 2462902 2463226 3203841 3204165 1170 2477087 2477474 3219567 3219954 1396 2478097 2478468 3220577 3220948 1339 2478884 2479094 3221364 3221574 759 2479182 2479452 3221662 3221932 975 2479454 2479743 3221934 3222223 1044 2481784 2482580 3224264 3225060 2869 2485223 2485434 3227703 3227914 763 2487009 2487311 3229485 3229787 1090 2487475 2487680 3229951 3230156 741 2487748 2487953 3230224 3230429 741 2488126 2488487 3230602 3230963 1303 2489509 2489738 3231985 3232214 828 2489857 2490088 3232333 3232564 835 2490804 2491159 3233280 3233635 1281 2491680 2491920 3234156 3234396 867 2493507 2493824 3235984 3236301 1144 2494105 2494657 3236582 3237134 1990 2494917 2495150 3237394 3237627 842 2496124 2496336 3238601 3238813 766 2496425 2496805 3238903 3239283 1371 2498319 2498583 3240797 3241061 954 2499116 2499492 3241594 3241970 1357 2499646 2499886 3242124 3242364 867 2499888 2500201 3242366 3242679 1130 2500592 2500857 3243070 3243335 957 2501864 2502366 3244342 3244844 1810 2502374 2502599 3244852 3245077 813 2504599 2504812 3247077 3247290 770 2505039 2505253 3247517 3247731 774 2505829 2506207 3248307 3248685 1364 2507249 2507950 3249727 3250428 2527 2508288 2508706 3250766 3251184 1508 2508708 2509001 3251186 3251479 1058 2510142 2510587 3252619 3253064 1605 2510589 2510803 3253066 3253280 774 2511109 2511410 3253586 3253887 1087 2514424 2514627 3255552 3255755 734 2515055 2515911 3256183 3257039 3085 2515934 2516135 3257061 3257262 727 2516170 2516423 3257182 3257435 914 2516425 2516643 3257437 3257655 788 2516645 2517037 3257657 3258049 1414 2517487 2517986 3260246 3260745 1800 2518048 2518274 3260807 3261033 817 2518801 2519152 3261560 3261911 1267 2519154 2519378 3261913 3262137 810 2524775 2525038 3263384 3263647 950 2525040 2525347 3263649 3263956 1108 2525376 2525726 3263985 3264335 1263 2525728 2526444 3264337 3265053 2581 2526978 2527238 3265587 3265847 939 2527385 2527720 3265994 3266329 1209 2528020 2528283 3266629 3266892 950 2529020 2529435 3267629 3268044 1497 2529701 2529924 3268310 3268533 806 2530338 2530630 3268947 3269239 1054 2531010 2531263 3269619 3269872 914 2531438 2531958 3270047 3270567 1875 2531960 2532332 3270569 3270941 1342 2532682 2532887 3271291 3271496 741 2533185 2534040 3271794 3272649 3081 2537775 2538002 3275424 3275651 820 2538067 2538302 3275716 3275951 849 2538403 2538686 3276052 3276335 1022 2541417 2541663 3279066 3279312 889 2542194 2542549 3279697 3280052 1281 2544569 2544826 3282072 3282329 928 2547613 2547847 3284934 3285168 846 2548378 2548736 3285699 3286057 1292 2548738 2549045 3286059 3286366 1108 2549099 2549312 3286420 3286633 770 2549314 2549839 3286635 3287160 1893 2550023 2550307 3287344 3287628 1026 2550593 2550918 3287914 3288239 1173 2551130 2551347 3288451 3288668 784 2552936 2553294 3290257 3290615 1292 2554391 2554722 3291712 3292043 1195 2555321 2555603 3292642 3292924 1018 2556229 2556717 3293550 3294038 1760 2563647 2563847 3294178 3294378 723 2565243 2565475 3295774 3296006 838 2566632 2567154 3297046 3297568 1882 2567312 2567642 3297726 3298056 1191 2568434 2568987 3298848 3299401 1994 2570309 2570600 3300723 3301014 1051 2572119 2572431 3302461 3302773 1126 2572872 2573104 3303214 3303446 838 2574757 2575061 3305099 3305403 1098 2576480 2576803 3306822 3307145 1166 2576805 2577076 3307147 3307418 979 2577426 2577719 3307768 3308061 1058 2579667 2579994 3310009 3310336 1180 2580018 2580239 3310360 3310581 799 2580681 2580891 3311023 3311233 759 2580942 2581167 3311284 3311509 813 2581680 2581891 3312022 3312233 763 2583483 2583691 3313825 3314033 752 2583693 2583939 3314035 3314281 889 2584527 2584813 3314869 3315155 1033 2585107 2585443 3315449 3315785 1213 2585481 2585996 3315823 3316338 1857 2586571 2586905 3316913 3317247 1206 2587132 2587340 3317474 3317682 752 2587774 2588036 3318116 3318378 946 2588299 2588642 3318641 3318984 1238 2588644 2588846 3318986 3319188 730 2590181 2590749 3320523 3321091 2048 2593465 2593720 3323778 3324033 921 2593778 2594108 3324091 3324421 1191 2595210 2595788 3325523 3326101 2084 2595986 2596263 3326299 3326576 1000 2596265 2596849 3326578 3327162 2106 2596868 2597151 3327181 3327464 1022 2597190 2597545 3327503 3327858 1281 2597749 2598076 3328062 3328389 1180 2598078 2598313 3328391 3328626 849 2598363 2598798 3328676 3329111 1569 2601610 2601942 3331923 3332255 1198 2602617 2602960 3332930 3333273 1238 2603355 2603608 3333668 3333921 914 2603730 2603986 3334043 3334299 925 2604422 2604657 3334735 3334970 849 2606436 2606870 3336749 3337183 1566 2607877 2608085 3338238 3338446 752 2608337 2608569 3338698 3338930 838 2610006 2610257 3340367 3340618 907 2611902 2612633 3342265 3342996 2635 2613728 2614090 3344091 3344453 1306 2614188 2614399 3344551 3344762 763 2614580 2614841 3344943 3345204 943 2615310 2615748 3345673 3346111 1580 2615750 2616027 3346113 3346390 1000 2616029 2616801 3346392 3347164 2782 2617029 2617312 3347392 3347675 1022 2617371 2617651 3347734 3348014 1011 2617653 2618471 3348016 3348834 2948 2618650 2618927 3349013 3349290 1000 2619068 2619400 3349431 3349763 1198 2620295 2620536 3350658 3350899 871 2620903 2621574 3351265 3351936 2419 2621648 2622141 3352010 3352503 1778 2622602 2622972 3352964 3353334 1335 2622974 2623330 3353336 3353692 1285 2623959 2624281 3354321 3354643 1162 2624863 2625146 3355225 3355508 1022 2625345 2625778 3355707 3356140 1562 2625998 2626278 3356360 3356640 1011 2626491 2626699 3356853 3357061 752 2626701 2627079 3357063 3357441 1364 2627281 2627535 3357643 3357897 918 2627901 2628187 3358263 3358549 1033 2628222 2628544 3358584 3358906 1162 2629209 2629572 3359571 3359934 1310 2629758 2629996 3360120 3360358 860 2630442 2630759 3360804 3361121 1144 2630825 2631072 3361187 3361434 892 2631491 2631693 3361853 3362055 730 2631695 2632029 3362057 3362391 1206 2633280 2633494 3363642 3363856 774 2634147 2634646 3364508 3365007 1800 2634684 2634898 3365045 3365259 774 2634900 2635635 3365261 3365996 2649 2635637 2635916 3365998 3366277 1008 2636072 2636311 3366433 3366672 864 2636313 2637156 3366674 3367517 3038 2637264 2637676 3367625 3368037 1486 2638152 2638776 3368513 3369137 2250 2639345 2639640 3369706 3370001 1065 2639705 2640279 3370066 3370640 2070 2640598 2641264 3370959 3371625 2401 2642265 2642484 3372626 3372845 792 2644797 2645068 3379989 3380260 979 2646232 2646718 3381424 3381910 1753 2646720 2647199 3381912 3382391 1728 2647402 2647747 3382594 3382939 1245 2649258 2649769 3384450 3384961 1843 2650153 2650613 3385345 3385805 1659 2650615 2650905 3385807 3386097 1047 2653587 2653891 3388463 3388767 1098 2654352 2654790 3389228 3389666 1580 2654921 2655223 3389797 3390099 1090 2655225 2655706 3390101 3390582 1735 2655708 2656017 3390584 3390893 1116 2656019 2656290 3390895 3391166 979 2656292 2656816 3391168 3391692 1890 2657068 2657321 3391944 3392197 914 2658334 2658578 3393210 3393454 882 2659321 2659587 3394197 3394463 961 2660011 2660327 3394887 3395203 1141 2661878 2662101 3396600 3396823 806 2662610 2662809 3397332 3397531 720 2662985 2663205 3397707 3397927 795 2663404 2664328 3398126 3399050 3330 2666419 2667002 3401142 3401725 2102 2667999 2668309 3402722 3403032 1119 2669071 2669365 3403794 3404088 1062 2672157 2672527 3406880 3407250 1335 2673299 2673585 3408022 3408308 1033 2674570 2674779 3409293 3409502 756 2676306 2676744 3411029 3411467 1580 2680540 2680898 3415263 3415621 1292 2683102 2683328 3417690 3417916 817 2683330 2684113 3417918 3418701 2822 2684451 2684963 3419039 3419551 1846 2685044 2685290 3419632 3419878 889 2685816 2686077 3420404 3420665 943 2686500 2686729 3421088 3421317 828 2687173 2687453 3421761 3422041 1011 2687674 2688115 3422262 3422703 1591 2688993 2689305 3423581 3423893 1126 2691024 2691228 3425630 3425834 738 2691698 2691975 3426304 3426581 1000 2692586 2692875 3427192 3427481 1044 2693026 2693277 3427632 3427883 907 2693279 2693603 3427885 3428209 1170 2693778 2693983 3428383 3428588 741 2694111 2694508 3428716 3429113 1432 2694510 2694993 3429115 3429598 1742 2695122 2695678 3429727 3430283 2005 2696478 2697016 3431083 3431621 1940 2697024 2697292 3431629 3431897 968 2699800 2700161 3434407 3434768 1303 2700600 2700917 3435207 3435524 1144 2700919 2701186 3435526 3435793 964 2702463 2702896 3437071 3437504 1562 2703201 2703535 3437809 3438143 1206 2704116 2704639 3438724 3439247 1886 2704821 2705454 3439429 3440062 2282 2705750 2706257 3440358 3440865 1828 2706433 2706921 3441041 3441529 1760 2707175 2708347 3441771 3442943 4222 2708499 2708746 3443095 3443342 892 2709414 2709740 3444010 3444336 1177 2709742 2710033 3444338 3444629 1051 2710686 2711190 3445282 3445786 1818 2714377 2714608 3448797 3449028 835 2715041 2715350 3449461 3449770 1116 2716207 2716714 3450627 3451134 1828 2716916 2717459 3451336 3451879 1958 2717578 2717837 3451998 3452257 936 2717875 2718432 3452295 3452852 2008 2719838 2720043 3454258 3454463 741 2720685 2720963 3455105 3455383 1004 2721943 2722325 3456363 3456745 1378 2722364 2722648 3456784 3457068 1026 2722719 2722976 3457139 3457396 928 2722978 2723197 3457398 3457617 792 2723512 2723820 3457932 3458240 1112 2724288 2724992 3458707 3459411 2538 2725002 2725338 3459421 3459757 1213 2725518 2725859 3459938 3460279 1231 2726034 2726557 3460454 3460977 1886 2727756 2728138 3462102 3462484 1378 2728176 2728411 3462523 3462758 849 2729938 2730256 3464290 3464608 1148 2730258 2730709 3464610 3465061 1627 2730715 2730941 3465067 3465293 817 2730943 2731223 3465295 3465575 1011 2731369 2732126 3465721 3466478 2728 2732128 2732474 3466480 3466826 1249 2733900 2734427 3468252 3468779 1900 2734630 2734983 3468982 3469335 1274 2735104 2735627 3469456 3469979 1886 2735929 2736218 3470281 3470570 1044 2736892 2737170 3471244 3471522 1004 2737943 2738473 3472295 3472825 1911 2738616 2738989 3472968 3473341 1346 2739487 2739726 3473839 3474078 864 2740107 2740530 3474459 3474882 1526 2740532 2740751 3474884 3475103 792 2741872 2742117 3476224 3476469 885 2742144 2743097 3476497 3477450 3434 2743240 2743532 3477593 3477885 1054 2743627 2744287 3477980 3478640 2379 2744484 2744755 3478725 3478996 979 2744814 2745301 3479055 3479542 1756 2745687 2746250 3479928 3480491 2030 2746252 2746651 3480493 3480892 1440 2746790 2747112 3481032 3481354 1162 2748316 2748598 3482557 3482839 1018 2748600 2748900 3482841 3483141 1083 2749601 2749903 3483842 3484144 1090 2750439 2750646 3484680 3484887 748 2751144 2751386 3485385 3485627 874 2751471 2751884 3485712 3486125 1490 2752393 2752793 3486634 3487034 1443 2753604 2753931 3487845 3488172 1180 2778708 2778970 3512565 3512827 946 2779235 2779927 3513092 3513784 2494 2780718 2781019 3514575 3514876 1087 2781027 2781266 3514885 3515124 864 2788875 2789257 3522735 3523117 1378 2792327 2792526 3526187 3526386 720 2793676 2794100 3527536 3527960 1530 2794102 2794557 3527962 3528417 1641 2794848 2795073 3528708 3528933 813 2796262 2796549 3530122 3530409 1036 2797007 2797371 3530866 3531230 1314 2797373 2798389 3531232 3532248 3661 2798633 2799226 3534456 3535049 2138 2800013 2800498 3535836 3536321 1749 2800607 2800878 3536430 3536701 979 2801135 2801361 3536958 3537184 817 2801453 2801751 3537276 3537574 1076 2801948 2802460 3537771 3538283 1846 2802880 2803088 3538705 3538913 752 2804112 2804406 3539937 3540231 1062 2804534 2804916 3540359 3540741 1378 2805471 2805684 3541295 3541508 770 2807358 2807725 3543189 3543556 1324 2808012 2808214 3543843 3544045 730 2808405 2808652 3544236 3544483 892 2808654 2808877 3544485 3544708 806 2808895 2809235 3544726 3545066 1227 2809368 2809798 3545199 3545629 1551 2810464 2810697 3546295 3546528 842 2812447 2812857 3548278 3548688 1479 2813196 2813583 3549026 3549413 1396 2814300 2814622 3550130 3550452 1162 2816865 2817266 3552466 3552867 1447 2817268 2817469 3552869 3553070 727 2818753 2819245 3554355 3554847 1774 2819449 2820142 3555051 3555744 2498 2820273 2820646 3555874 3556247 1346 2820875 2821089 3556475 3556689 774 2821091 2821319 3556691 3556919 824 2821715 2821967 3557315 3557567 910 2825702 2825914 3561302 3561514 766 2826840 2827088 3562441 3562689 896 2828502 2828984 3564104 3564586 1738 2830753 2831006 3566355 3566608 914 2831645 2831876 3567043 3567274 835 2833063 2833293 3568461 3568691 831 2833295 2833536 3568693 3568934 871 2837117 2837333 3572515 3572731 781 2838683 2838943 3574081 3574341 939 2841331 2841629 3576694 3576992 1076 2846859 2847158 3582222 3582521 1080 2847181 2847469 3582544 3582832 1040 2847831 2848268 3583194 3583631 1576 2848270 2848523 3583633 3583886 914 2848606 2848961 3583969 3584324 1281 2848963 2849325 3584326 3584688 1306 2850926 2851128 3586289 3586491 730 2851139 2851514 3586502 3586877 1353 2852110 2852391 3587473 3587754 1015 2853320 2853621 3588683 3588984 1087 2853872 2854098 3589235 3589461 817 2854529 2854828 3589892 3590191 1080 2854893 2855169 3590256 3590532 997 2855604 2856123 3590967 3591486 1872 2858192 2858404 3593555 3593767 766 2864535 2864754 3596737 3596956 792 2864756 2865030 3596958 3597232 990 2865209 2865476 3597411 3597678 964 2865518 2865734 3597720 3597936 781 2865880 2866286 3598082 3598488 1465 2866387 2866634 3598589 3598836 892 2866834 2867202 3599036 3599404 1328 2867396 2867672 3599598 3599874 997 2867821 2868369 3600023 3600571 1976 2869103 2869391 3601305 3601593 1040 2869393 2869625 3601595 3601827 838 2870387 2871022 3602589 3603224 2289 2871160 2871582 3603362 3603784 1522 2871584 2872019 3603786 3604221 1569 2872881 2873099 3605083 3605301 788 2874143 2874673 3606345 3606875 1911 2885970 2886255 3617768 3618053 1029 2886425 2886780 3618222 3618577 1281 2888055 2888285 3619852 3620082 831 2889793 2890003 3621590 3621800 759 2890189 2890423 3621986 3622220 846 2891093 2891302 3622890 3623099 756 2897135 2897349 3628932 3629146 774 2898460 2898785 3630257 3630582 1173 2901458 2901741 3633255 3633538 1022 2905237 2905527 3639316 3639606 1047 2905547 2906034 3639626 3640113 1756 2906036 2906652 3640115 3640731 2221 2907449 2907730 3641528 3641809 1015 2907732 2908070 3641811 3642149 1220 2908102 2908400 3642181 3642479 1076 2909036 2909377 3643115 3643456 1231 2909379 2909656 3643458 3643735 1000 2909940 2910304 3644019 3644383 1314 2910480 2910805 3644559 3644884 1173 2911431 2912027 3645510 3646106 2149 2912225 2912484 3646304 3646563 936 2912855 2913562 3646934 3647641 2548 2914017 2914240 3648096 3648319 806 2914296 2914654 3648375 3648733 1292 2914689 2914992 3648768 3649071 1094 2914998 2915242 3649077 3649321 882 2915451 2915695 3649530 3649774 882 2916062 2916284 3650142 3650364 802 2917494 2917747 3651574 3651827 914 2918793 2919026 3652873 3653106 842 2919553 2919764 3653633 3653844 763 2920078 2920674 3654158 3654754 2149 2921222 2921733 3655302 3655813 1843 2921946 2922205 3656026 3656285 936 2922916 2923166 3656996 3657246 903 2923198 2923523 3657278 3657603 1173 2923525 2923743 3657605 3657823 788 2924110 2924627 3658190 3658707 1864 2924815 2925035 3658895 3659115 795 2925490 2925698 3659570 3659778 752 2925838 2926075 3659918 3660155 856 2926077 2926503 3660157 3660583 1537 2926820 2927055 3660900 3661135 849 2927387 2927763 3661467 3661843 1357 2928017 2928240 3662097 3662320 806 2928674 2928974 3662754 3663054 1083 2929226 2929836 3663306 3663916 2199 2929908 2930197 3663988 3664277 1044 2930268 2930563 3664348 3664643 1065 2930667 2931073 3664747 3665153 1465 2931075 2931390 3665155 3665470 1137 2931492 2931842 3665572 3665922 1263 2932194 2932425 3666274 3666505 835 2932745 2933043 3666825 3667123 1076 2933611 2933834 3667691 3667914 806 2934358 2934848 3668438 3668928 1767 2934850 2935109 3668930 3669189 936 2935111 2935418 3669191 3669498 1108 2935564 2935784 3669644 3669864 795 2935786 2936405 3669866 3670485 2232 2936506 2936742 3670586 3670822 853 2936859 2937093 3670939 3671173 846 2937131 2937948 3671211 3672028 2944 2938372 2938889 3672452 3672969 1864 2940044 2940486 3674124 3674566 1594 2940637 2940971 3674717 3675051 1206 2941477 2941770 3675557 3675850 1058 2943757 2944212 3677837 3678292 1641 2944844 2945248 3678924 3679328 1458 2945342 2945747 3679422 3679827 1461 2946496 2946827 3680576 3680907 1195 2947288 2947624 3681368 3681704 1213 2947872 2948179 3681952 3682259 1108 2948825 2949045 3682905 3683125 795 2949530 2949747 3683610 3683827 784 2949788 2950008 3683868 3684088 795 2952130 2952446 3686210 3686526 1141 2952793 2953194 3686873 3687274 1447 2953196 2953415 3687276 3687495 792 2954286 2954592 3688366 3688672 1105 2954594 2954832 3688674 3688912 860 2955038 2955270 3689118 3689350 838 2956154 2956380 3690234 3690460 817 2956706 2956927 3690786 3691007 799 2958659 2958934 3692739 3693014 993 2960256 2960476 3694336 3694556 795 2962083 2962376 3696163 3696456 1058 2963061 2963356 3697141 3697436 1065 2963712 2964359 3697792 3698439 2332 2964361 2964757 3698441 3698837 1429 2965038 2965297 3699118 3699377 936 2965650 2965915 3699730 3699995 957 2966001 2966248 3700081 3700328 892 2966250 2967090 3700330 3701170 3027 2967289 2967597 3701369 3701677 1112 2967998 2968278 3702078 3702358 1011 2969272 2969497 3703352 3703577 813 2969542 2969976 3703622 3704056 1566 2970125 2970476 3704205 3704556 1267 2970478 2970737 3704558 3704817 936 2971120 2971391 3705200 3705471 979 2971483 2971894 3705563 3705974 1483 2972012 2972379 3706092 3706459 1324 2972936 2973168 3707016 3707248 838 2973973 2974332 3708053 3708412 1296 2974589 2974891 3708671 3708973 1090 2975121 2975848 3709203 3709930 2620 2976234 2976541 3710316 3710623 1108 2976543 2976934 3710625 3711016 1411 2977547 2977758 3711629 3711840 763 2978148 2978415 3712230 3712497 964 2979002 2979237 3713084 3713319 849 2979638 2979990 3713720 3714072 1270 2982386 2982683 3716468 3716765 1072 2983764 2984022 3717846 3718104 932 2984063 2984382 3718145 3718464 1152 2984384 2984655 3718466 3718737 979 2985678 2985903 3719760 3719985 813 2987686 2987900 3721769 3721983 774 2987937 2988226 3722020 3722309 1044 2990962 2991253 3725284 3725575 1051 2993831 2994088 3728158 3728415 928 2994090 2994381 3728417 3728708 1051 2995755 2996045 3745699 3745989 1047 2996478 2996916 3746417 3746855 1580 2997298 2997564 3747316 3747582 961 2997725 2997942 3747743 3747960 784 2998837 2999055 3748856 3749074 788 2999656 2999870 3749675 3749889 774 3000361 3000871 3750380 3750890 1839 3001232 3001571 3751251 3751590 1224 3001673 3002026 3751692 3752045 1274 3002567 3002766 3752586 3752785 720 3002885 3003129 3752904 3753148 882 3003323 3003617 3753342 3753636 1062 3004168 3004374 3754187 3754393 745 3005398 3005702 3755418 3755722 1098 3006022 3006285 3756042 3756305 950 3006287 3006638 3756307 3756658 1267 3006640 3006902 3756660 3756922 946 3007576 3007988 3757596 3758008 1486 3007993 3008448 3758013 3758468 1641 3008562 3008883 3758582 3758903 1159 3009212 3009539 3759232 3759559 1180 3010057 3010391 3760077 3760411 1206 3010599 3011015 3760439 3760855 1501 3011226 3011824 3761066 3761664 2156 3012194 3012408 3762034 3762248 774 3013048 3013257 3762888 3763097 756 3014044 3014312 3763886 3764154 968 3014671 3015264 3764513 3765106 2138 3015391 3015869 3765233 3765711 1724 3016410 3016679 3766252 3766521 972 3017502 3017704 3767344 3767546 730 3018001 3018310 3767843 3768152 1116 3018312 3018534 3768154 3768376 802 3018534 3018810 3768375 3768651 997 3018921 3019481 3768762 3769322 2019 3019483 3019841 3769324 3769682 1292 3020209 3020411 3770050 3770252 730 3020619 3021029 3770460 3770870 1479 3021634 3021899 3771475 3771740 957 3022247 3022510 3772088 3772351 950 3023592 3023848 3773433 3773689 925 3024824 3025117 3774665 3774958 1058 3025119 3025385 3774960 3775226 961 3025387 3025675 3775228 3775516 1040 3025911 3026158 3775753 3776000 892 3026205 3026545 3776047 3776387 1227 3026973 3027273 3776815 3777115 1083 3027539 3028017 3777381 3777859 1724 3028526 3028804 3778368 3778646 1004 3029244 3029744 3779086 3779586 1803 3029796 3030092 3779638 3779934 1069 3030604 3030868 3780446 3780710 954 3030870 3031319 3780712 3781161 1620 3031899 3032116 3781740 3781957 784 3032352 3032773 3782193 3782614 1519 3033845 3034463 3783686 3784304 2228 3036792 3037003 3786633 3786844 763 3037599 3038049 3787440 3787890 1623 3040459 3040735 3790181 3790457 997 3040791 3041035 3790513 3790757 882 3041133 3041336 3790855 3791058 734 3041443 3041752 3791165 3791474 1116 3042030 3042354 3791752 3792076 1170 3045415 3045646 3794236 3794467 835 3047381 3047692 3796201 3796512 1123 3048253 3048570 3797073 3797390 1144 3048572 3048869 3797392 3797689 1072 3051344 3051552 3800165 3800373 752 3052159 3052440 3800980 3801261 1015 3052674 3053112 3801495 3801933 1580 3053387 3053839 3802208 3802660 1630 3053841 3054360 3802662 3803181 1872 3054575 3054820 3803396 3803641 885 3055879 3056177 3805093 3805391 1076 3056206 3056447 3805420 3805661 871 3056621 3056852 3805834 3806065 835 3056911 3057456 3806124 3806669 1965 3057700 3058064 3806868 3807232 1314 3058180 3058454 3807348 3807622 990 3058950 3059224 3808118 3808392 990 3059475 3060477 3808643 3809645 3610 3061062 3062175 3810230 3811343 4010 3062510 3062721 3811678 3811889 763 3063007 3063221 3812175 3812389 774 3063280 3063649 3812448 3812817 1332 3063651 3063920 3812819 3813088 972 3065471 3065673 3814639 3814841 730 3066919 3067412 3816087 3816580 1778 3067576 3067967 3816744 3817135 1411 3068515 3068893 3817683 3818061 1364 3068895 3069116 3818063 3818284 799 3069118 3069421 3818286 3818589 1094 3069423 3069813 3818591 3818981 1407 3070272 3071272 3819440 3820440 3603 3071562 3071879 3820730 3821047 1144 3073825 3074209 3826128 3826512 1386 3074211 3074467 3826514 3826770 925 3074675 3075016 3826978 3827319 1231 3075018 3075219 3827321 3827522 727 3075627 3075887 3827931 3828191 939 3076093 3076307 3828397 3828611 774 3076675 3077333 3828979 3829637 2372 3079514 3079872 3831818 3832176 1292 3079982 3080259 3832286 3832563 1000 3080471 3080960 3832775 3833264 1764 3082615 3082837 3835794 3836016 802 3083760 3084104 3836939 3837283 1242 3084106 3084555 3837285 3837734 1620 3084557 3084791 3837736 3837970 846 3084793 3084995 3837972 3838174 730 3084997 3085235 3838176 3838414 860 3085432 3085649 3838611 3838828 784 3086328 3086642 3839520 3839834 1134 3086755 3087035 3839947 3840227 1011 3088324 3088546 3841516 3841738 802 3089701 3089960 3842893 3843152 936 3090100 3090440 3843292 3843632 1227 3090550 3090840 3843742 3844032 1047 3090842 3091181 3844034 3844373 1224 3091438 3091646 3844630 3844838 752 3092188 3092387 3845391 3845590 720 3093004 3093438 3846207 3846641 1566 3093603 3094013 3846806 3847216 1479 3096735 3096971 3850026 3850262 853 3098602 3099146 3851893 3852437 1962 3099400 3099657 3852691 3852948 928 3099873 3100304 3853165 3853596 1555 3100306 3100536 3853598 3853828 831 3100613 3100873 3853905 3854165 939 3100875 3101262 3854167 3854554 1396 3102828 3103096 3856120 3856388 968 3104010 3104371 3857302 3857663 1303 3104373 3104650 3857665 3857942 1000 3105070 3105450 3858362 3858742 1371 3105587 3105795 3858879 3859087 752 3105926 3106348 3859218 3859640 1522 3106790 3107027 3860082 3860319 856 3107815 3108101 3861108 3861394 1033 3136370 3136856 3888426 3888912 1753 3138726 3138940 3890782 3890996 774 3139130 3139374 3891186 3891430 882 3139601 3139866 3891657 3891922 957 3139964 3140181 3892020 3892237 784 3140690 3141215 3892746 3893271 1893 3141217 3141434 3893273 3893490 784 3141757 3141962 3893813 3894018 741 3141964 3142233 3894020 3894289 972 3142235 3142542 3894291 3894598 1108 3142973 3143239 3895029 3895295 961 3143404 3143749 3895460 3895805 1245 3143751 3144101 3895807 3896157 1263 3144103 3144774 3896159 3896830 2419 3144779 3145142 3896835 3897198 1310 3146202 3146422 3898261 3898481 795 3147235 3147541 3899294 3899600 1105 3148313 3148647 3900372 3900706 1206 3149634 3149851 3901693 3901910 784 3149949 3150197 3902008 3902256 896 3150769 3151070 3902828 3903129 1087 3151429 3151741 3903488 3903800 1126 3151748 3152031 3903807 3904090 1022 3152247 3152475 3904307 3904535 824 3153099 3153477 3905159 3905537 1364 3154115 3154323 3906175 3906383 752 3154885 3155420 3906945 3907480 1929 3155961 3156207 3908018 3908264 889 3158209 3158522 3910262 3910575 1130 3158683 3158888 3910736 3910941 741 3158947 3159233 3911000 3911286 1033 3159946 3160291 3911999 3912344 1245 3160293 3160567 3912346 3912620 990 3161369 3161848 3913422 3913901 1728 3162085 3162284 3914138 3914337 720 3162322 3162671 3914375 3914724 1260 3162673 3162950 3914726 3915003 1000 3163102 3163582 3915155 3915635 1731 3163717 3164081 3915770 3916134 1314 3164320 3164886 3916373 3916939 2041 3164994 3165304 3917047 3917357 1119 3166942 3167162 3918073 3918293 795 3167281 3167625 3918412 3918756 1242 3167811 3168095 3918942 3919226 1026 3168108 3168349 3919239 3919480 871 3169150 3169519 3920281 3920650 1332 3170441 3170648 3920985 3921192 748 3170926 3171296 3921470 3921840 1335 3171648 3171884 3929445 3929681 853 3173031 3173423 3930828 3931220 1414 3173425 3173841 3931222 3931638 1501 3173843 3174134 3931640 3931931 1051 3174940 3175571 3932737 3933368 2275 3175780 3176399 3933577 3934196 2232 3177742 3178153 3935539 3935950 1483 3178395 3178722 3936192 3936519 1180 3178763 3178995 3936560 3936792 838 3179171 3179596 3936968 3937393 1533 3180085 3180290 3937882 3938087 741 3180465 3180677 3938262 3938474 766 3182294 3182982 3940091 3940779 2480 3189914 3190126 3941146 3941358 766 3191023 3191357 3942255 3942589 1206 3193642 3194308 3945248 3945914 2401 3194640 3194932 3946246 3946538 1054 3195231 3195601 3946837 3947207 1335 3196380 3196710 3947986 3948316 1191 3197240 3197516 3948846 3949122 997 3197518 3197720 3949124 3949326 730 3197829 3198119 3949435 3949725 1047 3198565 3198932 3950171 3950538 1324 3198983 3199325 3950589 3950931 1234 3199381 3199604 3950987 3951210 806 3200311 3200765 3951917 3952371 1638 3200929 3201288 3952535 3952894 1296 3201523 3201790 3953129 3953396 964 3202490 3202878 3954098 3954486 1400 3203844 3204146 3955452 3955754 1090 3204148 3204413 3955756 3956021 957 3206894 3207129 3958503 3958738 849 3207164 3207364 3958773 3958973 723 3208065 3208985 3959674 3960594 3315 3209410 3209690 3961019 3961299 1011 3209935 3210217 3961544 3961826 1018 3210362 3211357 3961971 3962966 3585 3211860 3212062 3963469 3963671 730 3212073 3212317 3963682 3963926 882 3212969 3213384 3964578 3964993 1497 3213386 3213675 3964995 3965284 1044 3216091 3216301 3967700 3967910 759 3216321 3216588 3967930 3968197 964 3216590 3216827 3968199 3968436 856 3218904 3219257 3970513 3970866 1274 3219430 3219860 3971039 3971469 1551 3220178 3220382 3971787 3971991 738 3220699 3221095 3972308 3972704 1429 3221098 3221375 3972707 3972984 1000 3221665 3221879 3973274 3973488 774 3223413 3223624 3975022 3975233 763 3223767 3224178 3975376 3975787 1483 3224945 3225207 3976554 3976816 946 3225341 3225550 3976950 3977159 756 3231339 3231637 3982948 3983246 1076 3231818 3232017 3983427 3983626 720 3232665 3232876 3984274 3984485 763 3233117 3233332 3984726 3984941 777 3233357 3233892 3984966 3985501 1929 3236878 3237119 3988487 3988728 871 3237429 3237848 3989040 3989459 1512 3239079 3239395 3990690 3991006 1141 3239947 3240491 3991558 3992102 1962 3240904 3241176 3992515 3992787 982 3241718 3242053 3993329 3993664 1209 3242055 3242325 3993666 3993936 975 3242588 3243275 3994200 3994887 2476 3243502 3243917 3995114 3995529 1497 3244186 3244391 3995798 3996003 741 3245094 3246040 3996706 3997652 3409 3246042 3246313 3997654 3997925 979 3246641 3247195 3998253 3998807 1998 3247819 3248046 3999431 3999658 820 3248348 3248660 3999960 4000272 1126 3248662 3248946 4000274 4000558 1026 3249840 3250148 4001450 4001758 1112 3250565 3251112 4002174 4002721 1972 3251458 3251673 4003067 4003282 777 3251774 3252130 4003383 4003739 1285 3253092 3253375 4004701 4004984 1022 3253503 3253740 4005112 4005349 856 3253993 3254348 4005601 4005956 1281 3255615 3255842 4007221 4007448 820 3256405 3256625 4008011 4008231 795 3256891 3257382 4008498 4008989 1771 3259241 3259464 4010849 4011072 806 3260420 3260640 4012028 4012248 795 3260751 3261063 4012359 4012671 1126 3261585 3261826 4013193 4013434 871 3261954 3262468 4013562 4014076 1854 3262470 3263170 4014078 4014778 2523 3263460 3263949 4015068 4015557 1764 3263951 3264240 4015559 4015848 1044 3264266 3264489 4015874 4016097 806 3264527 3264807 4016135 4016415 1011 3264849 3265062 4016457 4016670 770 3265251 3265513 4016859 4017121 946 3266461 3266670 4018069 4018278 756 3267784 3268504 4018998 4019718 2595 3268674 3269035 4019888 4020249 1303 3269292 3269587 4020506 4020801 1065 3269589 3269983 4020803 4021197 1422 3269985 3270250 4021199 4021464 957 3270252 3270708 4021466 4021922 1645 3271034 3271275 4022248 4022489 871 3271469 3271701 4022683 4022915 838 3272144 3272367 4023358 4023581 806 3272372 3272594 4023586 4023808 802 3273375 3273701 4024589 4024915 1177 3274479 3274820 4025693 4026034 1231 3274865 3275107 4026079 4026321 874 3275713 3275975 4026927 4027189 946 3276647 3276864 4027861 4028078 784 3276866 3277286 4028080 4028500 1515 3277530 3277854 4028744 4029068 1170 3277956 3278194 4029170 4029408 860 3279503 3279704 4033022 4033223 727 3280091 3280307 4033610 4033826 781 3280515 3280799 4034034 4034318 1026 3281503 3281717 4035022 4035236 774 3282107 3282345 4035626 4035864 860 3282376 3282608 4035895 4036127 838 3282964 3283206 4036483 4036725 874 3283283 3283638 4036802 4037157 1281 3284201 3284402 4037720 4037921 727 3286661 3286910 4040180 4040429 900 3287555 3287899 4041074 4041418 1242 3288084 3288288 4041603 4041807 738 3288551 3288909 4042070 4042428 1292 3289062 3289305 4042581 4042824 878 3289655 3289855 4044132 4044332 723 3289877 3290113 4044354 4044590 853 3290115 3290582 4044592 4045059 1684 3290755 3291112 4045232 4045589 1288 3291114 3291324 4045591 4045801 759 3291448 3291914 4045925 4046391 1681 3294415 3294681 4048892 4049158 961 3295677 3295895 4050154 4050372 788 3296398 3296801 4050875 4051278 1454 3297543 3297742 4052020 4052219 720 3298340 3298676 4052817 4053153 1213 3298774 3299360 4053251 4053837 2113 3299731 3299948 4054208 4054425 784 3300663 3300927 4055140 4055404 954 3300929 3301158 4055406 4055635 828 3302463 3302684 4056939 4057160 799 3302991 3303501 4057467 4057977 1839 3305400 3306657 4059876 4061133 4528 3306659 3306903 4061135 4061379 882 3307568 3307857 4062044 4062333 1044 3308687 3309085 4063163 4063561 1436 3309087 3309496 4063563 4063972 1476 3311453 3311752 4065930 4066229 1080 3311877 3312139 4066354 4066616 946 3312567 3312796 4067044 4067273 828 3313095 3314016 4067572 4068493 3319 3314043 3314317 4068520 4068794 990 3314619 3314848 4069096 4069325 828 3314994 3315210 4069471 4069687 781 3315237 3315882 4069714 4070359 2325 3316069 3316332 4070546 4070809 950 3316334 3316671 4070811 4071148 1216 3317022 3317247 4071499 4071724 813 3317926 3318211 4072403 4072688 1029 3319575 3319803 4074052 4074280 824 3320704 3320981 4075181 4075458 1000 3321517 3321738 4075994 4076215 799 3321794 3322098 4076271 4076575 1098 3322373 3322738 4076850 4077215 1317 3322740 3323120 4077217 4077597 1371 3323296 3323579 4077773 4078056 1022 3323791 3324010 4078268 4078487 792 3324289 3325821 4078766 4080298 5518 3326435 3326781 4080912 4081258 1249 3327152 3327606 4081629 4082083 1638 3328286 3328491 4082617 4082822 741 3328573 3328944 4082904 4083275 1339 3329138 3329874 4083469 4084205 2653 3330017 3330222 4084348 4084553 741 3330305 3331594 4084636 4085925 4644 3332630 3332940 4086962 4087272 1119 3332942 3333168 4087274 4087500 817 3333452 3333675 4087784 4088007 806 3334040 3334683 4088372 4089015 2318 3335272 3335486 4089604 4089818 774 3335488 3335690 4089820 4090022 730 3336004 3336375 4090336 4090707 1339 3336407 3336708 4090739 4091040 1087 3336954 3337849 4091286 4092181 3225 3337851 3338073 4092183 4092405 802 3338209 3338606 4092541 4092938 1432 3338608 3339078 4092940 4093410 1695 3339276 3339588 4093608 4093920 1126 3339755 3339998 4094087 4094330 878 3340842 3341126 4095174 4095458 1026 3341254 3341495 4095586 4095827 871 3341503 3341792 4095835 4096124 1044 3342146 3342691 4096478 4097023 1965 3343431 3343684 4097763 4098016 914 3343782 3344130 4098114 4098462 1256 3344132 3344351 4098464 4098683 792 3344464 3344685 4098796 4099017 799 3344687 3344999 4099019 4099331 1126 3345364 3345610 4099696 4099942 889 3345711 3345964 4100043 4100296 914 3347531 3347774 4101863 4102106 878 3348585 3348874 4102918 4103207 1044 3349350 3349750 4103689 4104089 1443 3350193 3350608 4104532 4104947 1497 3350610 3350865 4104949 4105204 921 3350867 3351138 4105206 4105477 979 3352255 3352513 4106593 4106851 932 3353622 3354112 4107960 4108450 1767 3356796 3357073 4111134 4111411 1000 3366139 3366442 4113372 4113675 1094 3367797 3368028 4115030 4115261 835 3370165 3370385 4117398 4117618 795 3370660 3371060 4117893 4118293 1443 3371161 3371361 4118394 4118594 723 3371849 3372422 4119082 4119655 2066 3373076 3373278 4120306 4120508 730 3373962 3374538 4121184 4121760 2077 3374755 3375128 4121977 4122350 1346 3375420 3375673 4122642 4122895 914 3375711 3376496 4122933 4123718 2829 3376514 3376845 4123736 4124067 1195 3377243 3377442 4124465 4124664 720 3377618 3378057 4124840 4125279 1584 3378059 3378453 4125281 4125675 1422 3379305 3379767 4126527 4126989 1666 3379769 3379970 4126991 4127192 727 3379972 3380294 4127194 4127516 1162 3381775 3382057 4128998 4129280 1018 3382203 3382584 4129426 4129807 1375 3382900 3383770 4130123 4130993 3135 3384948 3385674 4132172 4132898 2617 3386228 3386538 4133452 4133762 1119 3386569 3386877 4133790 4134098 1112 3386989 3387192 4134210 4134413 734 3387265 3387626 4134486 4134847 1303 3387934 3388145 4135155 4135366 763 3388256 3388744 4135477 4135965 1760 3389365 3389594 4136586 4136815 828 3390014 3390275 4136960 4137221 943 3390277 3390599 4137223 4137545 1162 3392293 3392512 4139239 4139458 792 3392557 3392786 4139503 4139732 828 3392788 3393011 4139734 4139957 806 3393173 3393450 4140118 4140395 1000 3393686 3394084 4140631 4141029 1436 3394140 3394555 4141085 4141500 1497 3395220 3395510 4142165 4142455 1047 3395701 3396052 4142646 4142997 1267 3396054 3396358 4142999 4143303 1098 3396638 3396948 4143583 4143893 1119 3397136 3397383 4144081 4144328 892 3397399 3397658 4144344 4144603 936 3397963 3398162 4144908 4145107 720 3398383 3398994 4145328 4145939 2203 3399308 3399660 4146253 4146605 1270 3399662 3399972 4146607 4146917 1119 3399974 3400293 4146919 4147238 1152 3400295 3400512 4147240 4147457 784 3400791 3401694 4147736 4148639 3254 3401774 3402104 4148719 4149049 1191 3402738 3402963 4149683 4149908 813 3402965 3403364 4149910 4150309 1440 3403366 3404046 4150311 4150991 2451 3404282 3404908 4151227 4151853 2257 3405498 3405850 4152443 4152795 1270 3406435 3406830 4153380 4153775 1425 3407033 3407362 4153978 4154307 1188 3407602 3409217 4154547 4156162 5817 3409487 3409824 4156431 4156768 1216 3409826 3410193 4156770 4157137 1324 3410195 3410933 4157139 4157877 2660 3411367 3411948 4158311 4158892 2095 3412181 3412416 4159125 4159360 849 3412553 3412778 4159497 4159722 813 3412780 3413087 4159724 4160031 1108 3413710 3413969 4160654 4160913 936 3415878 3416189 4162867 4163178 1123 3417604 3418404 4164594 4165394 2883 3418988 3419228 4165979 4166219 867 3419651 3419918 4166642 4166909 964 3420023 3420385 4167014 4167376 1306 3421119 3421407 4168109 4168397 1040 3421879 3422207 4168871 4169199 1184 3422696 3423208 4169687 4170199 1846 3423250 3423832 4170241 4170823 2098 3423878 3424155 4170871 4171148 1000 3424157 3424431 4171150 4171424 990 3424482 3426125 4171484 4173127 5918 3426321 3426619 4173323 4173621 1076 3426774 3427305 4173775 4174306 1915 3428346 3429032 4175347 4176033 2473 3429282 3429525 4176283 4176526 878 3430001 3430287 4177001 4177287 1033 3430453 3430789 4177454 4177790 1213 3431126 3431537 4178127 4178538 1483 3431698 3432088 4178699 4179089 1407 3432565 3432830 4179566 4179831 957 3432832 3433035 4179833 4180036 734 3434766 3434974 4181767 4181975 752 3435183 3435478 4182184 4182479 1065 3435480 3435757 4182481 4182758 1000 3436077 3436279 4183078 4183280 730 3437201 3439353 4184202 4186354 7750 3439355 3441199 4186356 4188200 6642 3441372 3441946 4188373 4188947 2070 3441948 3442484 4188949 4189485 1933 3442567 3445133 4189568 4192134 9241 3445135 3445932 4192136 4192933 2872 3445934 3446766 4192935 4193767 2998 3446768 3447008 4193769 4194009 867 3447010 3447961 4194011 4194962 3427 3447963 3448448 4194964 4195449 1749 3448621 3450172 4195622 4197173 5587 3450174 3451090 4197175 4198091 3301 3467941 3468347 4199836 4200242 1465 3468373 3468755 4200268 4200650 1378 3468757 3469776 4200652 4201671 3672 3469778 3470013 4201673 4201908 849 3470015 3470337 4201910 4202232 1162 3470339 3470712 4202234 4202607 1346 3470837 3471247 4202732 4203142 1479 3471249 3472330 4203144 4204225 3895 3473266 3474010 4205161 4205905 2682 3474012 3474340 4205907 4206235 1184 3474751 3474955 4206646 4206850 738 3475166 3475532 4207061 4207427 1321 3475706 3476308 4207601 4208203 2170 3478532 3479001 4210427 4210896 1692 3479003 3479205 4210898 4211100 730 3479381 3479787 4211276 4211682 1465 3480317 3480531 4212212 4212426 774 3480674 3480892 4212569 4212787 788 3481588 3482044 4213483 4213939 1645 3483129 3483391 4215024 4215286 946 3483405 3483901 4215300 4215796 1789 3483903 3484103 4215798 4215998 723 3484812 3485304 4216707 4217199 1774 3486203 3486522 4218098 4218417 1152 3487530 3487738 4219425 4219633 752 3488086 3488312 4219981 4220207 817 3489056 3489588 4220951 4221483 1918 3489620 3490343 4221515 4222238 2606 3490345 3490778 4222240 4222673 1562 3491552 3491969 4223447 4223864 1504 3492244 3492530 4224139 4224425 1033 3493357 3493806 4225252 4225701 1620 3494018 3494564 4225913 4226459 1969 3494566 3494775 4226461 4226670 756 3495233 3495786 4227128 4227681 1994 3497732 3497962 4229636 4229866 831 3498221 3498495 4230125 4230399 990 3500412 3500638 4232316 4232542 817 3502130 3502383 4234034 4234287 914 3511022 3511224 4235206 4235408 730 3511226 3511429 4235410 4235613 734 3511479 3511726 4235663 4235910 892 3512254 3512477 4236438 4236661 806 3512572 3512884 4236756 4237068 1126 3513156 3513713 4237340 4237897 2008 3513715 3513932 4237899 4238116 784 3514385 3515230 4238569 4239414 3045 3515240 3515540 4239424 4239724 1083 3515918 3516383 4240102 4240567 1677 3516385 3516757 4240569 4240941 1342 3516759 3516985 4240943 4241169 817 3516987 3517215 4241171 4241399 824 3517217 3517614 4241401 4241798 1432 3517616 3517842 4241800 4242026 817 3518195 3518414 4242379 4242598 792 3518416 3518675 4242600 4242859 936 3520327 3520731 4244510 4244914 1458 3520965 3521184 4245148 4245367 792 3521285 3521538 4245468 4245721 914 3522164 3522606 4246347 4246789 1594 3523701 3524476 4247883 4248658 2793 3524613 3524845 4248795 4249027 838 3525597 3526027 4249779 4250209 1551 3526302 3526895 4250484 4251077 2138 3526994 3527511 4251176 4251693 1864 3527798 3528156 4251980 4252338 1292 3529862 3530732 4254044 4254914 3135 3531598 3531959 4255780 4256141 1303 3533168 3533540 4257350 4257722 1342 3533605 3533840 4257787 4258022 849 3533944 3534609 4258126 4258791 2397 3534872 3535125 4259054 4259307 914 3535502 3535933 4259684 4260115 1555 3537716 3538058 4261881 4262223 1234 3538118 3538388 4262283 4262553 975 3538720 3538988 4262885 4263153 968 3539188 3539423 4263353 4263588 849 3542064 3542270 4266227 4266433 745 3543166 3543377 4267329 4267540 763 3544363 3544621 4268530 4268788 932 3545028 3545338 4269195 4269505 1119 3546156 3546421 4270257 4270522 957 3547430 3547650 4271531 4271751 795 3547653 3548003 4271754 4272104 1263 3548005 3548356 4272106 4272457 1267 3548687 3548920 4272788 4273021 842 3549389 3549652 4273490 4273753 950 3549996 3550236 4274097 4274337 867 3550457 3550734 4274558 4274835 1000 3550966 3551195 4275067 4275296 828 3551197 3551564 4275298 4275665 1324 3551566 3551783 4275667 4275884 784 3552517 3552752 4276618 4276853 849 3557336 3557543 4282277 4282484 748 3557579 3557826 4282520 4282767 892 3558241 3558696 4283182 4283637 1641 3558933 3559148 4283874 4284089 777 3559415 3559617 4284356 4284558 730 3559675 3559992 4284616 4284933 1144 3560557 3560792 4285498 4285733 849 3561803 3562239 4289596 4290032 1573 3562646 3563634 4290439 4291427 3560 3563858 3564327 4291651 4292120 1692 3564329 3564567 4292122 4292360 860 3564976 3565428 4292769 4293221 1630 3565472 3566159 4293265 4293952 2476 3566161 3566576 4293954 4294369 1497 3566584 3567271 4294377 4295064 2476 3567273 3567496 4295066 4295289 806 3567597 3567963 4295390 4295756 1321 3568254 3568461 4296047 4296254 748 3568479 3569058 4296272 4296851 2088 3569644 3569895 4297437 4297688 907 3570512 3570762 4298305 4298555 903 3570926 3571649 4298719 4299442 2606 3571651 3571952 4299444 4299745 1087 3572002 3572237 4299795 4300030 849 3572517 3572896 4300309 4300688 1368 3574565 3574895 4305813 4306143 1191 3576061 3576403 4307310 4307652 1234 3577052 3577403 4308301 4308652 1267 3577465 3577691 4308714 4308940 817 3582685 3582946 4312337 4312598 943 3587802 3588115 4317457 4317770 1130 3588568 3588968 4318224 4318624 1443 3589765 3590102 4319421 4319758 1216 3590901 3591116 4321383 4321598 777 3591778 3592015 4322260 4322497 856 3594259 3594815 4324741 4325297 2005 3596756 3597003 4327997 4328244 892 3597005 3597336 4328246 4328577 1195 3597836 3598095 4329077 4329336 936 3598136 3598539 4329377 4329780 1454 3598541 3598741 4329782 4329982 723 3600034 3600616 4331275 4331857 2098 3601152 3601384 4332393 4332625 838 3601778 3602255 4333022 4333499 1720 3603197 3603546 4334441 4334790 1260 3603984 3604316 4335228 4335560 1198 3605752 3606017 4336996 4337261 957 3606688 3606959 4337932 4338203 979 3607216 3607919 4338460 4339163 2534 3609449 3610027 4340693 4341271 2084 3610194 3610474 4341438 4341718 1011 3610579 3610791 4357178 4357390 766 3611118 3611583 4357717 4358182 1677 3612710 3613064 4359309 4359663 1278 3626702 3626958 4373174 4373430 925 3628331 3628536 4374804 4375009 741 3633949 3634208 4380431 4380690 936 3634864 3635174 4381346 4381656 1119 3635619 3635905 4382102 4382388 1033 3636126 3636478 4382609 4382961 1270 3637117 3637463 4383427 4383773 1249 3638371 3638672 4384682 4384983 1087 3639178 3639518 4385489 4385829 1227 3640481 3641041 4386792 4387352 2019 3642959 3643204 4389270 4389515 885 3644078 3644298 4390389 4390609 795 3647398 3647657 4393713 4393972 936 3647716 3647954 4394031 4394269 860 3647956 3648162 4394271 4394477 745 3649454 3649665 4395768 4395979 763 3651810 3652304 4396924 4397418 1782 3652306 3652647 4397420 4397761 1231 3652939 3653149 4407075 4407285 759 3653920 3654673 4408056 4408809 2714 3654825 3655199 4408961 4409335 1350 3655965 3656738 4410101 4410874 2786 3656740 3656944 4410876 4411080 738 3656993 3657606 4411129 4411742 2210 3657893 3658191 4412029 4412327 1076 3659093 3659319 4413229 4413455 817 3659321 3659565 4413457 4413701 882 3660257 3660621 4414393 4414757 1314 3660857 3661098 4414993 4415234 871 3661745 3662009 4415881 4416145 954 3662409 3662640 4416545 4416776 835 3663766 3664057 4417903 4418194 1051 3665082 3665317 4419219 4419454 849 3666000 3666247 4420137 4420384 892 3666534 3667018 4420671 4421155 1746 3667554 3667966 4421692 4422104 1486 3668010 3668215 4422148 4422353 741 3668721 3669160 4422859 4423298 1584 3669276 3669631 4423414 4423769 1281 3671681 3672018 4425819 4426156 1216 3672508 3672758 4426647 4426897 903 3672949 3673647 4427088 4427786 2516 3673649 3673917 4427788 4428056 968 3674645 3674941 4428784 4429080 1069 3675309 3675547 4429448 4429686 860 3675870 3676138 4430009 4430277 968 3676916 3677337 4431055 4431476 1519 3677402 3677646 4431541 4431785 882 3677652 3677869 4431791 4432008 784 3678398 3678627 4432537 4432766 828 3678911 3679113 4433050 4433252 730 3679160 3679838 4433299 4433977 2444 3679840 3681206 4433979 4435345 4921 3681735 3682160 4435874 4436299 1533 3682412 3682652 4436551 4436791 867 3683081 3683427 4437220 4437566 1249 3685228 3685473 4439367 4439612 885 3685475 3685803 4439614 4439942 1184 3686446 3686649 4440575 4440778 734 3688282 3688563 4442430 4442711 1015 3688836 3689035 4442984 4443183 720 3689145 3689410 4443293 4443558 957 3690180 3690839 4444328 4444987 2376 3690937 3691169 4445085 4445317 838 3691954 3692210 4446102 4446358 925 3693101 3693406 4447249 4447554 1101 3693748 3693984 4447896 4448132 853 3693986 3694370 4448134 4448518 1386 3694620 3695510 4448768 4449658 3207 3695512 3695799 4449660 4449947 1036 3695801 3696012 4449949 4450160 763 3696029 3696599 4450177 4450747 2055 3697983 3698208 4452131 4452356 813 3699097 3699323 4453245 4453471 817 3701424 3701642 4455572 4455790 788 3703997 3704288 4457988 4458279 1051 3705185 3705574 4459176 4459565 1404 3706198 3706409 4460023 4460234 763 3707862 3708145 4461687 4461970 1022 3709603 3709837 4469181 4469415 846 3709933 3710247 4469511 4469825 1134 3710513 3710802 4470091 4470380 1044 3711750 3711960 4471328 4471538 759 3712392 3712779 4471970 4472357 1396 3713289 3713821 4472867 4473399 1918 3714020 3714404 4473598 4473982 1386 3714676 3715104 4474254 4474682 1544 3716329 3716842 4475907 4476420 1850 3716983 3717762 4476561 4477340 2808 3719705 3719938 4477879 4478112 842 3720338 3720573 4478512 4478747 849 3721244 3721503 4479418 4479677 936 3721646 3721911 4479820 4480085 957 3722279 3722535 4480453 4480709 925 3722805 3723019 4480979 4481193 774 3723075 3723281 4481249 4481455 745 3724433 3724962 4482607 4483136 1908 3726176 3726658 4484350 4484832 1738 3727281 3727646 4485455 4485820 1317 3728290 3728727 4486464 4486901 1576 3728729 3729240 4486903 4487414 1843 3729276 3729480 4487450 4487654 738 3730090 3730365 4488264 4488539 993 3730367 3730695 4488541 4488869 1184 3730697 3731216 4488871 4489390 1872 3731260 3731625 4489434 4489799 1317 3732559 3733019 4490733 4491193 1659 3734584 3734939 4492670 4493025 1281 3735668 3736147 4493754 4494233 1728 3737155 3737386 4495241 4495472 835 3737753 3737954 4495839 4496040 727 3738089 3738313 4496175 4496399 810 3738729 3739059 4496816 4497146 1191 3748776 3749229 4502112 4502565 1634 3749543 3749793 4502879 4503129 903 3749867 3750081 4503203 4503417 774 3750437 3750638 4503773 4503974 727 3751517 3751877 4504853 4505213 1299 3753515 3753815 4506851 4507151 1083 3754605 3754847 4509312 4509554 874 3754849 3755334 4509556 4510041 1749 3755627 3755831 4510333 4510537 738 3756558 3757025 4511264 4511731 1684 3757315 3757756 4512021 4512462 1591 3757758 3757960 4512464 4512666 730 3758007 3758515 4512713 4513221 1832 3758517 3759460 4513223 4514166 3398 3759462 3759711 4514168 4514417 900 3759827 3760224 4514534 4514931 1432 3760533 3760761 4515240 4515468 824 3760763 3760987 4515470 4515694 810 3761284 3761599 4515991 4516306 1137 3762518 3762777 4517225 4517484 936 3762983 3763182 4517690 4517889 720 3763553 3764842 4518260 4519549 4644 3765234 3765545 4519941 4520252 1123 3765547 3766040 4520254 4520747 1778 3766051 3766618 4520758 4521325 2044 3766620 3767143 4521327 4521850 1886 3767145 3767393 4521852 4522100 896 3767458 3767795 4522164 4522501 1216 3767797 3768183 4522503 4522889 1393 3768185 3768870 4522891 4523576 2469 3768872 3769090 4523578 4523796 788 3769261 3770371 4523967 4525077 3999 3770373 3770664 4525079 4525370 1051 3771966 3772192 4526537 4526763 817 3773138 3773352 4527709 4527923 774 3773755 3774162 4528326 4528733 1468 3776036 3776244 4536639 4536847 752 3776321 3776625 4536924 4537228 1098 3776947 3777179 4537550 4537782 838 3777313 3777589 4537916 4538192 997 3779808 3780062 4540399 4540653 918 3780064 3780305 4540655 4540896 871 3780713 3780996 4541304 4541587 1022 3780998 3781418 4541589 4542009 1515 3781555 3781957 4542146 4542548 1450 3782118 3782419 4542709 4543010 1087 3782421 3782750 4543012 4543341 1188 3783726 3784069 4544317 4544660 1238 3784331 3784597 4544922 4545188 961 3784602 3785323 4545193 4545914 2599 3786381 3786723 4546972 4547314 1234 3786899 3787272 4547491 4547864 1346 3787546 3787831 4548138 4548423 1029 3788790 3789016 4549382 4549608 817 3790002 3790241 4550594 4550833 864 3790278 3790613 4550870 4551205 1209 3790615 3790857 4551207 4551449 874 3790859 3791332 4551451 4551924 1706 3791360 3792067 4551953 4552660 2548 3792429 3792778 4553022 4553371 1260 3792963 3793216 4553556 4553809 914 3793926 3794477 4554519 4555070 1987 3806077 3806356 4563696 4563975 1008 3806403 3806707 4564022 4564326 1098 3807195 3807668 4564814 4565287 1706 3807670 3808145 4565289 4565764 1713 3808147 3808399 4565766 4566018 910 3808401 3809444 4566020 4567063 3758 3809482 3809771 4567101 4567390 1044 3810342 3810545 4567961 4568164 734 3810547 3810967 4568166 4568586 1515 3810969 3811665 4568588 4569284 2509 3812609 3812917 4570228 4570536 1112 3813764 3814814 4571384 4572434 3783 3815632 3815848 4573252 4573468 781 3816575 3816783 4574197 4574405 752 3816812 3817209 4574434 4574831 1432 3818185 3818485 4575807 4576107 1083 3818930 3819433 4576552 4577055 1814 3819549 3820522 4577171 4578144 3506 3820524 3820735 4578146 4578357 763 3821010 3821278 4578632 4578900 968 3821979 3822839 4579601 4580461 3099 3822841 3823159 4580463 4580781 1148 3823161 3823491 4580783 4581113 1191 3825126 3825420 4583433 4583727 1062 3825941 3826140 4584248 4584447 720 3826241 3827247 4584548 4585554 3625 3827315 3828008 4585622 4586315 2498 3828323 3828528 4586630 4586835 741 3828546 3828753 4586853 4587060 748 3829026 3829300 4587333 4587607 990 3829302 3829506 4587609 4587813 738 3832228 3832565 4590535 4590872 1216 3833074 3833285 4591381 4591592 763 3833441 3833715 4591748 4592022 990 3833730 3833942 4592037 4592249 766 3835805 3836025 4635899 4636119 795 3838874 3839110 4638968 4639204 853 3839922 3840164 4640815 4641057 874 3840577 3840788 4641469 4641680 763 3841117 3841531 4642009 4642423 1494 3842055 3842270 4642947 4643162 777 3844483 3844769 4645375 4645661 1033 3850393 3850610 4654628 4654845 784 3853134 3853392 4657369 4657627 932 3853647 3853982 4657882 4658217 1209 3854970 3855221 4659206 4659457 907 3855564 3855796 4659800 4660032 838 3856044 3856428 4660280 4660664 1386 3857119 3857364 4661355 4661600 885 3857692 3857927 4661928 4662163 849 3858746 3859020 4662982 4663256 990 3859488 3859690 4664232 4664434 730 3860661 3860920 4665405 4665664 936 3860922 3861384 4665666 4666128 1666 3862311 3862512 4667055 4667256 727 3862995 3863329 4667739 4668073 1206 3864047 3864436 4668791 4669180 1404 3864714 3865269 4669458 4670013 2001 3873101 3873357 4673094 4673350 925 3873359 3873625 4673352 4673618 961 3874008 3874337 4674000 4674329 1188 3875486 3875697 4675478 4675689 763 3877490 3877873 4677482 4677865 1382 3877884 3878092 4677876 4678084 752 3879782 3880017 4679774 4680009 849 3880497 3880882 4680489 4680874 1389 3880884 3881112 4680876 4681104 824 3881114 3881481 4681106 4681473 1324 3881784 3882402 4681775 4682393 2228 3882404 3882683 4682395 4682674 1008 3882685 3883000 4682676 4682991 1137 3883532 3883858 4683523 4683849 1177 3883860 3884079 4683851 4684070 792 3884159 3884426 4684150 4684417 964 3887960 3888289 4690425 4690754 1188 3891377 3891750 4693842 4694215 1346 3892613 3892818 4695078 4695283 741 3893186 3893391 4695651 4695856 741 3905045 3905429 4705510 4705894 1386 3907598 3907833 4708063 4708298 849 3908983 3909240 4709448 4709705 928 3911180 3911441 4718382 4718643 943 3912307 3912572 4719509 4719774 957 3912787 3913008 4719989 4720210 799 3913071 3913378 4720272 4720579 1108 3913380 3914138 4720581 4721339 2732 3914140 3914342 4721341 4721543 730 3914443 3914774 4721644 4721975 1195 3914848 3916092 4722049 4723293 4482 3916211 3916485 4723412 4723686 990 3916700 3916965 4723901 4724166 957 3916967 3917247 4724168 4724448 1011 3917273 3917733 4724474 4724934 1659 3917861 3919833 4725062 4727034 7102 3919835 3920254 4727036 4727455 1512 3920256 3920953 4727457 4728154 2512 3921084 3921346 4728285 4728547 946 3921557 3921943 4728758 4729144 1393 3922075 3922345 4729276 4729546 975 3923190 3923401 4730391 4730602 763 3924356 3924810 4731557 4732011 1638 3924947 3925200 4732148 4732401 914 3925721 3925958 4732922 4733159 856 3928391 3928805 4735593 4736007 1494 3928807 3929180 4736009 4736382 1346 3929182 3929417 4736384 4736619 849 3929869 3930141 4737071 4737343 982 3930676 3930940 4737879 4738143 954 3930942 3931172 4738145 4738375 831 3931174 3931620 4738377 4738823 1609 3932054 3932535 4739257 4739738 1735 3932573 3933133 4739776 4740336 2019 3933261 3933512 4740464 4740715 907 3933609 3934150 4740812 4741353 1951 3934479 3934711 4741682 4741914 838 3934713 3935109 4741916 4742312 1429 3935165 3935694 4742368 4742897 1908 3935747 3936714 4742950 4743917 3484 3937378 3937780 4744581 4744983 1450 3937782 3938147 4744985 4745350 1317 3938339 3938586 4745542 4745789 892 3938726 3938953 4745932 4746159 820 3939656 3940429 4746862 4747635 2786 3940467 3940849 4747673 4748055 1378 3941290 3941587 4748496 4748793 1072 3941876 3942495 4749083 4749702 2232 3942537 3943049 4749743 4750255 1846 3943061 3943705 4750267 4750911 2322 3943851 3944118 4751057 4751324 964 3944336 3944674 4751541 4751879 1220 3944802 3945035 4752007 4752240 842 3945350 3945775 4752556 4752981 1533 3946383 3946652 4753589 4753858 972 3947539 3947758 4754745 4754964 792 3947893 3948155 4755099 4755361 946 3949865 3950206 4757073 4757414 1231 3950601 3950815 4757809 4758023 774 3951168 3951462 4758379 4758673 1062 3953182 3953508 4760393 4760719 1177 3954320 3954533 4761534 4761747 770 3955253 3955479 4762467 4762693 817 3957900 3958491 4765080 4765671 2131 3958966 3959213 4766146 4766393 892 3959407 3959684 4766587 4766864 1000 3960040 3960576 4767220 4767756 1933 3960579 3961420 4767759 4768600 3031 3961588 3961828 4768768 4769008 867 3961830 3962173 4769010 4769353 1238 3962188 3962389 4769368 4769569 727 3962454 3962761 4769634 4769941 1108 3963037 3963652 4770217 4770832 2217 3963654 3964503 4770834 4771683 3060 3965149 3965452 4772329 4772632 1094 3965454 3965663 4772634 4772843 756 3965878 3966125 4773058 4773305 892 3966524 3967018 4773704 4774198 1782 3967020 3967264 4774200 4774444 882 3967437 3967796 4774617 4774976 1296 3967798 3968030 4774978 4775210 838 3969369 3970114 4776552 4777297 2685 3971252 3971598 4778435 4778781 1249 3972240 3972529 4779423 4779712 1044 3972638 3973086 4779821 4780269 1616 3973882 3974154 4781065 4781337 982 3974559 3974824 4781742 4782007 957 3975080 3975311 4782263 4782494 835 3976549 3976943 4783731 4784125 1422 3977350 3977590 4784532 4784772 867 3978430 3978700 4785612 4785882 975 3978702 3978920 4785884 4786102 788 3979246 3979463 4786428 4786645 784 3979950 3980813 4787132 4787995 3110 3983060 3983408 4790252 4790600 1256 3983798 3984254 4790991 4791447 1645 3984350 3985017 4791543 4792210 2404 3985785 3985988 4792996 4793199 734 3985990 3986378 4793201 4793589 1400 3986526 3986898 4793737 4794109 1342 3987329 3987584 4794540 4794795 921 3988519 3988758 4795730 4795969 864 3988758 3989024 4795970 4796236 961 3989842 3990281 4797054 4797493 1584 3990574 3990824 4797786 4798036 903 3991069 3991298 4798281 4798510 828 3994640 3994891 4801852 4802103 907 3998658 3999242 4806754 4807338 2106 3999244 3999506 4807340 4807602 946 4001721 4001947 4811588 4811814 817 4002078 4002350 4811945 4812217 982 4002433 4002653 4812300 4812520 795 4002679 4002974 4812546 4812841 1065 4002976 4003592 4812843 4813459 2221 4003651 4004132 4813518 4813999 1735 4004500 4004978 4814367 4814845 1724 4006636 4006971 4816508 4816843 1209 4007150 4007604 4817022 4817476 1638 4007907 4008189 4817781 4818063 1018 4009409 4009691 4819297 4819579 1018 4010714 4011133 4820601 4821020 1512 4012706 4013140 4822593 4823027 1566 4013300 4013716 4823188 4823604 1501 4013892 4014726 4823782 4824616 3006 4014737 4015625 4824627 4825515 3200 4015657 4015934 4825547 4825824 1000 4016125 4016741 4826015 4826631 2221 4016743 4017305 4826633 4827195 2026 4017548 4017783 4827438 4827673 849 4017785 4018011 4827675 4827901 817 4018598 4018800 4828488 4828690 730 4018898 4019521 4828788 4829411 2246 4019523 4019855 4829413 4829745 1198 4019861 4020179 4829749 4830067 1148 4020181 4020673 4830069 4830561 1774 4020843 4021207 4830731 4831095 1314 4021209 4021554 4831097 4831442 1245 4021683 4021942 4831570 4831829 936 4022289 4022618 4832176 4832505 1188 4023615 4023844 4833502 4833731 828 4024014 4024270 4833901 4834157 925 4024386 4024747 4834273 4834634 1303 4028184 4028599 4837882 4838297 1497 4030642 4030915 4840340 4840613 986 4031326 4031698 4841024 4841396 1342 4032014 4032255 4841713 4841954 871 4032514 4032788 4842213 4842487 990 4033458 4033856 4843160 4843558 1436 4033858 4034119 4843560 4843821 943 4034157 4034674 4843859 4844376 1864 4034682 4035035 4844384 4844737 1274 4035648 4036270 4845361 4845983 2242 4036272 4036751 4845985 4846464 1728 4036971 4037300 4846682 4847011 1188 4037310 4037891 4847021 4847602 2095 4038498 4039102 4848038 4848642 2178 4039724 4039958 4849264 4849498 846 4040674 4040905 4850213 4850444 835 4040907 4041365 4850446 4850904 1652 4041665 4042311 4851205 4851851 2329 4042313 4042580 4851853 4852120 964 4042808 4043242 4852348 4852782 1566 4043940 4044491 4853480 4854031 1987 4044493 4044810 4854033 4854350 1144 4045175 4045638 4854715 4855178 1670 4046696 4047212 4856236 4856752 1861 4047348 4047597 4856889 4857138 900 4048169 4048373 4857710 4857914 738 4048529 4048757 4858070 4858298 824 4049515 4049832 4859053 4859370 1144 4050350 4050549 4859888 4860087 720 4050551 4050882 4860089 4860420 1195 4052298 4052503 4861797 4862002 741 4052784 4053048 4862283 4862547 954 4053818 4054023 4863317 4863522 741 4055063 4055292 4864450 4864679 828 4055827 4056695 4865214 4866082 3128 4056823 4057370 4866210 4866757 1972 4057496 4057758 4866883 4867145 946 4057779 4058383 4867167 4867771 2178 4058682 4058912 4868070 4868300 831 4058914 4059128 4868302 4868516 774 4059990 4060374 4869378 4869762 1386 4065903 4066156 4875289 4875542 914 4070076 4070469 4880235 4880628 1418 4071254 4071466 4881413 4881625 766 4072146 4072369 4882305 4882528 806 4073229 4073457 4883388 4883616 824 4073818 4074128 4883977 4884287 1119 4074145 4074371 4884304 4884530 817 4074451 4074664 4884610 4884823 770 4074666 4075524 4884825 4885683 3092 4075844 4076090 4886003 4886249 889 4076865 4077144 4889090 4889369 1008 4078137 4078378 4890361 4890602 871 4078380 4078660 4890604 4890884 1011 4078874 4079490 4891098 4891714 2221 4079740 4080014 4891964 4892238 990 4080655 4081100 4892879 4893324 1605 4082241 4082495 4894465 4894719 918 4082650 4083118 4894874 4895342 1688 4083120 4083610 4895344 4895834 1767 4083612 4083818 4895836 4896042 745 4083823 4084085 4896047 4896309 946 4084114 4084446 4896338 4896670 1198 4084924 4085191 4897148 4897415 964 4085768 4085980 4897991 4898203 766 4088405 4088620 4900628 4900843 777 4088622 4088887 4900845 4901110 957 4089204 4089568 4901415 4901779 1314 4093600 4094019 4907147 4907566 1512 4094283 4095506 4907830 4909053 4406 4095607 4095977 4909154 4909524 1335 4097108 4097318 4910655 4910865 759 4097955 4098496 4911502 4912043 1951 4099287 4099550 4912834 4913097 950 4099936 4100150 4913483 4913697 774 4100221 4100472 4913768 4914019 907 4101847 4102396 4915394 4915943 1980 4102832 4103518 4916379 4917065 2473 4103648 4103949 4917196 4917497 1087 4104111 4104346 4917659 4917894 849 4104468 4104676 4918016 4918224 752 4104678 4104886 4918226 4918434 752 4105666 4105981 4919214 4919529 1137 4106308 4106567 4919855 4920114 936 4107268 4107796 4920815 4921343 1904 4108134 4108363 4921681 4921910 828 4108950 4109289 4922497 4922836 1224 4109737 4110009 4923284 4923556 982 4110197 4110431 4923744 4923978 846 4110433 4110670 4923980 4924217 856 4110942 4111206 4924489 4924753 954 4112872 4113113 4926419 4926660 871 4113531 4113841 4927173 4927483 1119 4114131 4114333 4927773 4927975 730 4114335 4114669 4927977 4928311 1206 4115275 4115600 4928917 4929242 1173 4116503 4116960 4931583 4932040 1648 4117834 4118324 4932914 4933404 1767 4118491 4118702 4933571 4933782 763 4118758 4119248 4933838 4934328 1767 4119603 4120087 4934683 4935167 1746 4120353 4120633 4935433 4935713 1011 4120662 4121417 4935742 4936497 2721 4121652 4121888 4936732 4936968 853 4121923 4122259 4937003 4937339 1213 4124464 4124851 4939544 4939931 1396 4125654 4125980 4946126 4946452 1177 4127211 4127562 4947683 4948034 1267 4129938 4130145 4950410 4950617 748 4130200 4130488 4950672 4950960 1040 4131927 4132171 4952399 4952643 882 4135402 4135606 4955874 4956078 738 4136436 4136795 4956908 4957267 1296 4137236 4137510 4957708 4957982 990 4137555 4137781 4958027 4958253 817 4137861 4138078 4958333 4958550 784 4138590 4138819 4959062 4959291 828 4139421 4139629 4959893 4960101 752 4139953 4140262 4960426 4960735 1116 4141642 4141843 4962115 4962316 727 4142728 4143062 4963201 4963535 1206 4143891 4144140 4964364 4964613 900 4144322 4144545 4964795 4965018 806 4144994 4145292 4965467 4965765 1076 4145384 4145652 4965857 4966125 968 4145692 4145913 4966165 4966386 799 4146763 4147047 4967236 4967520 1026 4147330 4147624 4967803 4968097 1062 4149229 4149642 4969703 4970116 1490 4150207 4150508 4970681 4970982 1087 4150552 4150888 4971026 4971362 1213 4151440 4151657 4971668 4971885 784 4151809 4152222 4972037 4972450 1490 4152388 4152636 4972616 4972864 896 4153810 4154138 4974038 4974366 1184 4154273 4154567 4974501 4974795 1062 4155818 4156348 4976046 4976576 1911 4156746 4156966 4976974 4977194 795 4157626 4158023 4977854 4978251 1432 4158157 4158450 4978385 4978678 1058 4158561 4158838 4981417 4981694 1000 4158861 4159219 4981717 4982075 1292 4160709 4161251 4983565 4984107 1954 4162354 4162742 4985210 4985598 1400 4162744 4163523 4985600 4986379 2808 4163525 4163789 4986381 4986645 954 4164001 4164435 4986857 4987291 1566 4164437 4164648 4987293 4987504 763 4164772 4165237 4987628 4988093 1677 4165275 4165657 4988131 4988513 1378 4165950 4166462 4988720 4989232 1846 4166464 4166760 4989234 4989530 1069 4166769 4167388 4989541 4990160 2232 4167430 4167786 4990201 4990557 1285 4168430 4168872 4991201 4991643 1594 4168874 4169134 4991645 4991905 939 4170257 4170470 4992862 4993075 770 4172858 4173811 4995446 4996399 3434 4173886 4174106 4996474 4996694 795 4174116 4175013 4996704 4997601 3232 4175015 4175909 4997603 4998497 3222 4175950 4176241 4998539 4998830 1051 4176243 4176538 4998832 4999127 1065 4176894 4177208 4999483 4999797 1134 4177351 4178584 4999819 5001052 4442 4178586 4179345 5001054 5001813 2736 4179578 4179837 5002046 5002305 936 4180073 4180287 5002541 5002755 774 4180289 4180605 5002757 5003073 1141 4181117 4181358 5003585 5003826 871 4181831 4182169 5004299 5004637 1220 4182488 4182726 5004956 5005194 860 4182882 4183189 5005350 5005657 1108 4183488 4183996 5005956 5006464 1832 4184046 4184630 5006514 5007098 2106 4184817 4185043 5007285 5007511 817 4185045 4185443 5007513 5007911 1436 4185445 4185778 5007913 5008246 1202 4186344 4186612 5008812 5009080 968 4186737 4187343 5009205 5009811 2185 4187861 4188293 5010258 5010690 1558 4192163 4192395 5014560 5014792 838 4192418 4192617 5014815 5015014 720 4192805 4193098 5015202 5015495 1058 4194087 4194323 5016484 5016720 853 4194325 4194575 5016722 5016972 903 4195053 4195357 5017450 5017754 1098 4195965 4196318 5018362 5018715 1274 4197270 4197511 5019667 5019908 871 4197638 4198220 5020035 5020617 2098 4198698 4198935 5021095 5021332 856 4198943 4199582 5021340 5021979 2304 4201392 4201604 5023768 5023980 766 4204214 4204438 5026590 5026814 810 4204652 4205249 5027028 5027625 2152 4205569 4205976 5027947 5028354 1468 4206137 4206386 5028515 5028764 900 4206570 4207144 5028948 5029522 2070 4207599 4207883 5029976 5030260 1026 4207885 4208160 5030262 5030537 993 4208277 4208617 5030654 5030994 1227 4208854 4209342 5031230 5031718 1760 4209832 4210413 5032208 5032789 2095 4211637 4212090 5033606 5034059 1634 4213347 4213957 5035316 5035926 2199 4213959 4214347 5035928 5036316 1400 4214481 4214751 5036450 5036720 975 4217734 4217997 5039704 5039967 950 4218639 4218843 5040609 5040813 738 4220056 4220269 5042026 5042239 770 4220349 4220555 5042320 5042526 745 4220557 4220897 5042528 5042868 1227 4221273 4221491 5043244 5043462 788 4222189 4222406 5044160 5044377 784 4223590 4223810 5045561 5045781 795 4224226 4224461 5046197 5046432 849 4224517 4224776 5046488 5046747 936 4225045 4225323 5047016 5047294 1004 4225735 4225970 5047706 5047941 849 4229111 4229551 5057182 5057622 1587 4229679 4229908 5057750 5057979 828 4229994 4230336 5058065 5058407 1234 4230657 4231155 5058728 5059226 1796 4231157 4231535 5059228 5059606 1364 4232285 4232582 5060356 5060653 1072 4232761 4232992 5060832 5061063 835 4233381 4233656 5061466 5061741 993 4234440 4234647 5062525 5062732 748 4235356 4235672 5063441 5063757 1141 4237564 4237988 5065649 5066073 1530 4238057 4238268 5066142 5066353 763 4238406 4238620 5066491 5066705 774 4238622 4238986 5066707 5067071 1314 4239483 4240332 5067568 5068417 3060 4240577 4240851 5068662 5068936 990 4241194 4241513 5069279 5069598 1152 4241860 4242134 5069945 5070219 990 4242340 4242595 5070425 5070680 921 4242692 4242965 5070777 5071050 986 4243246 4243553 5071331 5071638 1108 4243777 4244103 5071862 5072188 1177 4244267 4244585 5072352 5072670 1148 4244704 4245302 5072789 5073387 2156 4245304 4245658 5073389 5073743 1278 4245858 4246069 5073943 5074154 763 4246359 4246764 5074444 5074849 1461 4247264 4247653 5075257 5075646 1404 4247873 4248118 5075866 5076111 885 4250222 4250493 5078215 5078486 979 4250517 4250895 5078510 5078888 1364 4253485 4253771 5081478 5081764 1033 4253773 4254142 5081766 5082135 1332 4254248 4254495 5082241 5082488 892 4254560 4254856 5082553 5082849 1069 4256676 4257136 5084669 5085129 1659 4259211 4259425 5087175 5087389 774 4262253 4262478 5090217 5090442 813 4263080 4263430 5091044 5091394 1263 4263432 4263811 5091396 5091775 1368 4264612 4264826 5092576 5092790 774 4267726 4267949 5095682 5095905 806 4267951 4268300 5095907 5096256 1260 4271274 4271688 5099230 5099644 1494 4272543 4272784 5100500 5100741 871 4274885 4275144 5102841 5103100 936 4275257 4275698 5103213 5103654 1591 4275783 4276051 5103739 5104007 968 4276498 4276886 5104454 5104842 1400 4277592 4277901 5105547 5105856 1116 4278059 4278511 5106014 5106466 1630 4278860 4279104 5106815 5107059 882 4280733 4281019 5108691 5108977 1033 4282323 4282554 5110281 5110512 835 4282634 4282898 5110592 5110856 954 4282979 4283305 5110938 5111264 1177 4283580 4283866 5111539 5111825 1033 4284575 4284796 5112534 5112755 799 4284945 4285241 5112904 5113200 1069 4285243 4285625 5113202 5113584 1378 4285817 4286408 5113776 5114367 2131 4286746 4286983 5114705 5114942 856 4287171 4287708 5115130 5115667 1936 4287908 4288139 5115867 5116098 835 4289459 4289694 5117418 5117653 849 4291742 4292213 5119701 5120172 1699 4294024 4294328 5121519 5121823 1098 4294488 4294792 5121983 5122287 1098 4295091 4295297 5122586 5122792 745 4295299 4295540 5122794 5123035 871 4295545 4295804 5123040 5123299 936 4295971 4296203 5123466 5123698 838 4296217 4297019 5123712 5124514 2890 4298256 4298470 5125751 5125965 774 4298526 4298730 5126021 5126225 738 4299245 4299477 5126740 5126972 838 4300511 4300721 5128006 5128216 759 4301558 4301780 5129053 5129275 802 4301827 4302040 5129322 5129535 770 4303916 4304296 5131411 5131791 1371 4312689 4312935 5142354 5142600 889 4315512 4315729 5145178 5145395 784 4318700 4318931 5148366 5148597 835 4323945 4324269 5153204 5153528 1170 4324271 4324481 5153530 5153740 759 4325926 4326534 5155186 5155794 2192 4327141 4327364 5156401 5156624 806 4327881 4328194 5157141 5157454 1130 4328196 4328668 5157456 5157928 1702 4328796 4329079 5158056 5158339 1022 4329081 4329292 5158341 5158552 763 4330003 4330414 5159263 5159674 1483 4330464 4330844 5159724 5160104 1371 4330881 4331442 5160141 5160702 2023 4331444 4331982 5160704 5161242 1940 4333040 4333250 5162300 5162510 759 4334154 4334449 5163414 5163709 1065 4334499 4334789 5163759 5164049 1047 4336113 4336322 5165373 5165582 756 4336393 4336693 5165653 5165953 1083 4336927 4337183 5166187 5166443 925 4337794 4338038 5167054 5167298 882 4338994 4339308 5168254 5168568 1134 4339353 4339715 5168613 5168975 1306 4340892 4341142 5170152 5170402 903 4341624 4341999 5170884 5171259 1353 4344740 4344957 5174001 5174218 784 4344959 4345211 5174220 5174472 910 4345213 4345571 5174474 5174832 1292 4346026 4346523 5175287 5175784 1792 4346631 4346834 5175892 5176095 734 4347166 4347790 5176427 5177051 2250 4347927 4348213 5177188 5177474 1033 4348434 4348726 5177695 5177987 1054 4348728 4348972 5177989 5178233 882 4349163 4349372 5178424 5178633 756 4350463 4350950 5179724 5180211 1756 4351194 4351406 5180455 5180667 766 4351408 4351706 5180669 5180967 1076 4352170 4352376 5181431 5181637 745 4353534 4354238 5182795 5183499 2538 4354273 4354526 5183534 5183787 914 4354528 4354910 5183789 5184171 1378 4354912 4355495 5184173 5184756 2102 4355497 4355732 5184758 5184993 849 4355851 4356510 5185112 5185771 2376 4356602 4356917 5185863 5186178 1137 4356919 4357185 5186180 5186446 961 4357376 4357687 5186637 5186948 1123 4358283 4358518 5187545 5187780 849 4358531 4358953 5187793 5188215 1522 4359009 4359406 5188271 5188668 1432 4359408 4359650 5188670 5188912 874 4360590 4361086 5189852 5190348 1789 4361109 4361356 5190371 5190618 892 4361397 4361736 5190659 5190998 1224 4361967 4362177 5191229 5191439 759 4362309 4362521 5191571 5191783 766 4362523 4362876 5191785 5192138 1274 4363046 4363258 5192308 5192520 766 4363260 4363546 5192522 5192808 1033 4363548 4364194 5192810 5193456 2329 4364202 4364791 5193464 5194053 2124 4364793 4364992 5194055 5194254 720 4365531 4365754 5194793 5195016 806 4365756 4366009 5195018 5195271 914 4367889 4368488 5197151 5197750 2160 4369080 4369317 5198342 5198579 856 4370219 4370576 5199481 5199838 1288 4370778 4370988 5200030 5200240 759 4371312 4371617 5200564 5200869 1101 4371619 4371876 5200871 5201128 928 4372187 4372397 5201279 5201489 759 4373122 4373545 5202214 5202637 1526 4373777 4374003 5202869 5203095 817 4374052 4374251 5203144 5203343 720 4374905 4375185 5203997 5204277 1011 4375857 4376101 5204948 5205192 882 4376397 4376796 5205488 5205887 1440 4377144 4377416 5206235 5206507 982 4377418 4377634 5206509 5206725 781 4377636 4378173 5206727 5207264 1936 4378301 4378506 5207392 5207597 741 4378508 4378713 5207599 5207804 741 4378718 4378946 5207809 5208037 824 4379198 4379523 5208289 5208614 1173 4379594 4379808 5208685 5208899 774 4380144 4380485 5209235 5209576 1231 4380835 4381058 5209926 5210149 806 4381060 4381274 5210151 5210365 774 4381385 4381717 5210476 5210808 1198 4382064 4382284 5211155 5211375 795 4383624 4383938 5212160 5212474 1134 4387381 4387685 5215917 5216221 1098 4387687 4387980 5216223 5216516 1058 4388866 4389092 5217402 5217628 817 4389846 4390338 5218382 5218874 1774 4390965 4391449 5219501 5219985 1746 4391451 4391696 5219987 5220232 885 4392660 4392949 5221196 5221485 1044 4392951 4393314 5221487 5221850 1310 4393390 4393607 5221926 5222143 784 4394572 4394885 5223108 5223421 1130 4396694 4397281 5225230 5225817 2116 4397605 4398192 5226141 5226728 2116 4398186 4398649 5226723 5227186 1670 4398699 4399042 5227236 5227579 1238 4399262 4399973 5227799 5228510 2563 4400047 4400534 5228584 5229071 1756 4400536 4400837 5229073 5229374 1087 4400839 4401199 5229376 5229736 1299 4401291 4401502 5229828 5230039 763 4401693 4402147 5230230 5230684 1638 4402690 4402925 5231227 5231462 849 4403737 4404072 5232275 5232610 1209 4404088 4404439 5232626 5232977 1267 4404441 4404736 5232979 5233274 1065 4406310 4406566 5234848 5235104 925 4407734 4407963 5236273 5236502 828 4407983 4408209 5236522 5236748 817 4409733 4410016 5238272 5238555 1022 4410543 4411443 5239082 5239982 3243 4411568 4411931 5240107 5240470 1310 4413245 4413458 5241784 5241997 770 4413460 4414119 5241999 5242658 2376 4414166 4414590 5242705 5243129 1530 4415106 4415865 5243645 5244404 2736 4415867 4416119 5244406 5244658 910 4416427 4416794 5244966 5245333 1324 4416802 4417277 5245341 5245816 1713 4417587 4417894 5246126 5246433 1108 4417896 4418210 5246435 5246749 1134 4418721 4419265 5247260 5247804 1962 4419327 4420142 5247866 5248681 2937 4422028 4422356 5250566 5250894 1184 4422589 4422864 5251127 5251402 993 4422884 4423135 5251422 5251673 907 4423235 4423484 5251773 5252022 900 4423486 4423779 5252024 5252317 1058 4423832 4424168 5252370 5252706 1213 4424170 4424765 5252708 5253303 2145 4425009 4425265 5253547 5253803 925 4425565 4425963 5255851 5256249 1436 4426044 4426243 5256330 5256529 720 4426245 4426957 5256531 5257243 2566 4427159 4427541 5257445 5257827 1378 4427543 4427886 5257829 5258172 1238 4427900 4428237 5258186 5258523 1216 4428542 4428802 5258828 5259088 939 4429070 4429306 5259356 5259592 853 4429923 4430185 5260209 5260471 946 4430365 4430680 5260651 5260966 1137 4430682 4431179 5260968 5261465 1792 4432539 4432756 5262814 5263031 784 4432758 4433008 5263033 5263283 903 4433601 4433926 5263876 5264201 1173 4433963 4434274 5264238 5264549 1123 4435031 4435251 5265306 5265526 795 4435253 4435481 5265528 5265756 824 4436111 4436332 5266387 5266608 799 4436615 4437230 5266891 5267506 2217 4437503 4437711 5267796 5268004 752 4438094 4438719 5268387 5269012 2253 4438730 4438975 5269023 5269268 885 4439166 4439479 5269459 5269772 1130 4439661 4440048 5269954 5270341 1396 4440303 4440757 5270596 5271050 1638 4441584 4441911 5271877 5272204 1180 4443981 4444452 5274274 5274745 1699 4444454 4444845 5274747 5275138 1411 4444973 4445194 5275266 5275487 799 4445391 4445813 5275684 5276106 1522 4445815 4446120 5276108 5276413 1101 4446140 4446428 5276433 5276721 1040 4446534 4447021 5276827 5277314 1756 4447071 4447327 5277364 5277620 925 4447949 4448349 5278242 5278642 1443 4448542 4448813 5278837 5279108 979 4448815 4449101 5279110 5279396 1033 4449229 4449635 5279524 5279930 1465 4449737 4450021 5280033 5280317 1026 4450381 4450608 5280677 5280904 820 4452995 4453356 5283291 5283652 1303 4454003 4454286 5284299 5284582 1022 4454357 4454691 5284653 5284987 1206 4454909 4455147 5285205 5285443 860 4455161 4455896 5285457 5286192 2649 4455898 4456160 5286194 5286456 946 4456450 4456679 5286746 5286975 828 4456750 4457024 5287046 5287320 990 4457117 4457793 5287439 5288115 2437 4458252 4458580 5288606 5288934 1184 4459728 4459936 5290082 5290290 752 4460106 4460393 5290460 5290747 1036 4461084 4461335 5291438 5291689 907 4461645 4461886 5291999 5292240 871 4462630 4462835 5292984 5293189 741 4463656 4463881 5294010 5294235 813 4464916 4465556 5295269 5295909 2307 4465855 4466120 5296208 5296473 957 4466518 4466825 5296871 5297178 1108 4467031 4467308 5297384 5297661 1000 4467542 4467930 5297895 5298283 1400 4467945 4468291 5298298 5298644 1249 4468421 4468654 5298774 5299007 842 4468890 4469173 5299243 5299526 1022 4469535 4469764 5299888 5300117 828 4469816 4470154 5300169 5300507 1220 4476003 4476336 5306344 5306677 1202 4478263 4478463 5308503 5308703 723 4478850 4479283 5309086 5309519 1562 4480524 4480732 5310760 5310968 752 4481043 4481572 5311279 5311808 1908 4481615 4481848 5311851 5312084 842 4482116 4482339 5312546 5312769 806 4482470 4482864 5312900 5313294 1422 4482962 4483176 5313392 5313606 774 4483178 4483541 5313608 5313971 1310 4483543 4484119 5313973 5314549 2077 4484463 4484806 5314893 5315236 1238 4485150 4485499 5315580 5315929 1260 4485501 4485735 5315931 5316165 846 4485737 4486325 5316167 5316755 2120 4486327 4486622 5316757 5317052 1065 4486903 4487111 5317333 5317541 752 4493190 4493434 5318623 5318867 882 4493667 4494057 5319100 5319490 1407 4535262 4535462 5365009 5365209 723 4536431 4537017 5366178 5366764 2113 4538109 4538335 5367856 5368082 817 4538484 4538771 5368231 5368518 1036 4539505 4539758 5369252 5369505 914 4540615 4540884 5370345 5370614 972 4540886 4541103 5370616 5370833 784 4542032 4542325 5371762 5372055 1058 4542802 4543107 5372531 5372836 1101 4543111 4543472 5372840 5373201 1303 4544659 4544888 5374388 5374617 828 4548476 4548708 5378136 5378368 838 4548909 4549328 5378569 5378988 1512 4550051 4550300 5379711 5379960 900 4551504 4551751 5381165 5381412 892 4551873 4552075 5381534 5381736 730 4554158 4554568 5383819 5384229 1479 4554676 4554937 5384337 5384598 943 4556607 4556926 5386268 5386587 1152 4556976 4557328 5386637 5386989 1270 4557330 4557696 5386991 5387357 1321 4557847 4558062 5387508 5387723 777 4561823 4562035 5399775 5399987 766 4567898 4568194 5405866 5406162 1069 4586391 4586597 5418882 5419088 745 4589247 4589498 5422424 5422675 907 4589544 4589756 5422721 5422933 766 4589758 4590079 5422935 5423256 1159 4591606 4591905 5424792 5425091 1080 4592020 4592269 5425206 5425455 900 4592317 4592556 5425504 5425743 864 4592558 4592949 5425745 5426136 1411 4593732 4593982 5426920 5427170 903 4594693 4595224 5427880 5428411 1915 4595901 4596268 5429088 5429455 1324 4596459 4596916 5429646 5430103 1648 4596918 4597156 5430105 5430343 860 4597495 4597826 5430682 5431013 1195 4597828 4598336 5431015 5431523 1832 4598884 4599452 5432071 5432639 2048 4599469 4599869 5432656 5433056 1443 4599871 4600306 5433058 5433493 1569 4600811 4601319 5434000 5434508 1832 4601459 4601825 5434648 5435014 1321 4601827 4602472 5435016 5435661 2325 4604188 4604575 5437063 5437450 1396 4605120 4605567 5437995 5438442 1612 4605846 4606069 5438721 5438944 806 4606201 4607439 5439076 5440314 4460 4607576 4607775 5440451 5440650 720 4607972 4608300 5440847 5441175 1184 4608302 4608593 5441177 5441468 1051 4608604 4609160 5441479 5442035 2005 4609548 4610186 5442423 5443061 2300 4610318 4610595 5443193 5443470 1000 4610597 4611095 5443472 5443970 1796 4613016 4613327 5445687 5445998 1123 4613736 4614096 5446407 5446767 1299 4614243 4614763 5446914 5447434 1875 4615143 4615543 5447814 5448214 1443 4615599 4616269 5448270 5448940 2415 4616649 4616956 5449320 5449627 1108 4617023 4617937 5449694 5450608 3294 4618311 4618887 5450982 5451558 2077 4621390 4621712 5453018 5453340 1162 4622026 4622270 5453654 5453898 882 4622284 4622611 5453912 5454239 1180 4623145 4623424 5454773 5455052 1008 4623611 4624207 5455239 5455835 2149 4624869 4625256 5456497 5456884 1396 4625387 4625939 5457015 5457567 1990 4626344 4627214 5457972 5458842 3135 4627591 4627832 5459219 5459460 871 4628122 4628527 5459750 5460155 1461 4630122 4630608 5461750 5462236 1753 4630610 4630809 5462238 5462437 720 4632073 4632299 5463701 5463927 817 4632526 4632989 5464154 5464617 1670 4632991 4633225 5464619 5464853 846 4637081 4637382 5468709 5469010 1087 4637525 4638352 5469153 5469980 2980 genometools-1.5.1/testdata/chaindata/chain-globalov-wf1.8-maxgap10000066400000000000000000000004421211610345200246560ustar00rootroot00000000000000# chain 0: length 7 score 21531 1085337 1086089 1412837 1413589 2710 1086091 1086892 1413591 1414392 2887 1086894 1088334 1414394 1415834 5187 1088336 1088973 1415836 1416473 2296 1088975 1089198 1416475 1416698 806 1089200 1090692 1416700 1418192 5374 1090694 1091324 1418194 1418824 2271 genometools-1.5.1/testdata/chaindata/chain-local000066400000000000000000000070041211610345200216670ustar00rootroot00000000000000# chain 0: length 98 score 36877 3373962 3374538 4121184 4121760 1154 3374755 3375128 4121977 4122350 748 3375420 3375673 4122642 4122895 508 3375711 3376496 4122933 4123718 1572 3376514 3376845 4123736 4124067 664 3377243 3377442 4124465 4124664 400 3377618 3378057 4124840 4125279 880 3378059 3378453 4125281 4125675 790 3379305 3379767 4126527 4126989 926 3379769 3379970 4126991 4127192 404 3379972 3380294 4127194 4127516 646 3381775 3382057 4128998 4129280 566 3382203 3382584 4129426 4129807 764 3382900 3383770 4130123 4130993 1742 3384948 3385674 4132172 4132898 1454 3386228 3386538 4133452 4133762 622 3386569 3386877 4133790 4134098 618 3386989 3387192 4134210 4134413 408 3387265 3387626 4134486 4134847 724 3387934 3388145 4135155 4135366 424 3388256 3388744 4135477 4135965 978 3389365 3389594 4136586 4136815 460 3390014 3390275 4136960 4137221 524 3390277 3390599 4137223 4137545 646 3392293 3392512 4139239 4139458 440 3392557 3392786 4139503 4139732 460 3392788 3393011 4139734 4139957 448 3393173 3393450 4140118 4140395 556 3393686 3394084 4140631 4141029 798 3394140 3394555 4141085 4141500 832 3395220 3395510 4142165 4142455 582 3395701 3396052 4142646 4142997 704 3396054 3396358 4142999 4143303 610 3396638 3396948 4143583 4143893 622 3397136 3397383 4144081 4144328 496 3397399 3397658 4144344 4144603 520 3397963 3398162 4144908 4145107 400 3398383 3398994 4145328 4145939 1224 3399308 3399660 4146253 4146605 706 3399662 3399972 4146607 4146917 622 3399974 3400293 4146919 4147238 640 3400295 3400512 4147240 4147457 436 3400791 3401694 4147736 4148639 1808 3401774 3402104 4148719 4149049 662 3402738 3402963 4149683 4149908 452 3402965 3403364 4149910 4150309 800 3403366 3404046 4150311 4150991 1362 3404282 3404908 4151227 4151853 1254 3405498 3405850 4152443 4152795 706 3406435 3406830 4153380 4153775 792 3407033 3407362 4153978 4154307 660 3407602 3409217 4154547 4156162 3232 3409487 3409824 4156431 4156768 676 3409826 3410193 4156770 4157137 736 3410195 3410933 4157139 4157877 1478 3411367 3411948 4158311 4158892 1164 3412181 3412416 4159125 4159360 472 3412553 3412778 4159497 4159722 452 3412780 3413087 4159724 4160031 616 3413710 3413969 4160654 4160913 520 3415878 3416189 4162867 4163178 624 3417604 3418404 4164594 4165394 1602 3418988 3419228 4165979 4166219 482 3419651 3419918 4166642 4166909 536 3420023 3420385 4167014 4167376 726 3421119 3421407 4168109 4168397 578 3421879 3422207 4168871 4169199 658 3422696 3423208 4169687 4170199 1026 3423250 3423832 4170241 4170823 1166 3423878 3424155 4170871 4171148 556 3424157 3424431 4171150 4171424 550 3424482 3426125 4171484 4173127 3288 3426321 3426619 4173323 4173621 598 3426774 3427305 4173775 4174306 1064 3428346 3429032 4175347 4176033 1374 3429282 3429525 4176283 4176526 488 3430001 3430287 4177001 4177287 574 3430453 3430789 4177454 4177790 674 3431126 3431537 4178127 4178538 824 3431698 3432088 4178699 4179089 782 3432565 3432830 4179566 4179831 532 3432832 3433035 4179833 4180036 408 3434766 3434974 4181767 4181975 418 3435183 3435478 4182184 4182479 592 3435480 3435757 4182481 4182758 556 3436077 3436279 4183078 4183280 406 3437201 3439353 4184202 4186354 4306 3439355 3441199 4186356 4188200 3690 3441372 3441946 4188373 4188947 1150 3441948 3442484 4188949 4189485 1074 3442567 3445133 4189568 4192134 5134 3445135 3445932 4192136 4192933 1596 3445934 3446766 4192935 4193767 1666 3446768 3447008 4193769 4194009 482 3447010 3447961 4194011 4194962 1904 3447963 3448448 4194964 4195449 972 3448621 3450172 4195622 4197173 3104 3450174 3451090 4197175 4198091 1834 genometools-1.5.1/testdata/chaindata/chain-local-maxgap20000066400000000000000000000005531211610345200233060ustar00rootroot00000000000000# chain 0: length 9 score 13876 1085337 1086089 1412837 1413589 1506 1086091 1086892 1413591 1414392 1604 1086894 1088334 1414394 1415834 2882 1088336 1088973 1415836 1416473 1276 1088975 1089198 1416475 1416698 448 1089200 1090692 1416700 1418192 2986 1090694 1091324 1418194 1418824 1262 1091338 1091738 1418838 1419238 802 1091740 1092322 1419240 1419822 1166 genometools-1.5.1/testdata/chaindata/chain-local-wf0.5000066400000000000000000000007251211610345200225270ustar00rootroot00000000000000# chain 0: length 12 score 12566 3437201 3439353 4184202 4186354 2153 3439355 3441199 4186356 4188200 1845 3441372 3441946 4188373 4188947 575 3441948 3442484 4188949 4189485 537 3442567 3445133 4189568 4192134 2567 3445135 3445932 4192136 4192933 798 3445934 3446766 4192935 4193767 833 3446768 3447008 4193769 4194009 241 3447010 3447961 4194011 4194962 952 3447963 3448448 4194964 4195449 486 3448621 3450172 4195622 4197173 1552 3450174 3451090 4197175 4198091 917 genometools-1.5.1/testdata/chaindata/chain-local-wf1.8000066400000000000000000000327341211610345200225400ustar00rootroot00000000000000# chain 0: length 376 score 179068 3239079 3239395 3990690 3991006 1141 3239947 3240491 3991558 3992102 1962 3240904 3241176 3992515 3992787 982 3241718 3242053 3993329 3993664 1209 3242055 3242325 3993666 3993936 975 3242588 3243275 3994200 3994887 2476 3243502 3243917 3995114 3995529 1497 3244186 3244391 3995798 3996003 741 3245094 3246040 3996706 3997652 3409 3246042 3246313 3997654 3997925 979 3246641 3247195 3998253 3998807 1998 3247819 3248046 3999431 3999658 820 3248348 3248660 3999960 4000272 1126 3248662 3248946 4000274 4000558 1026 3249840 3250148 4001450 4001758 1112 3250565 3251112 4002174 4002721 1972 3251458 3251673 4003067 4003282 777 3251774 3252130 4003383 4003739 1285 3253092 3253375 4004701 4004984 1022 3253503 3253740 4005112 4005349 856 3253993 3254348 4005601 4005956 1281 3255615 3255842 4007221 4007448 820 3256405 3256625 4008011 4008231 795 3256891 3257382 4008498 4008989 1771 3259241 3259464 4010849 4011072 806 3260420 3260640 4012028 4012248 795 3260751 3261063 4012359 4012671 1126 3261585 3261826 4013193 4013434 871 3261954 3262468 4013562 4014076 1854 3262470 3263170 4014078 4014778 2523 3263460 3263949 4015068 4015557 1764 3263951 3264240 4015559 4015848 1044 3264266 3264489 4015874 4016097 806 3264527 3264807 4016135 4016415 1011 3264849 3265062 4016457 4016670 770 3265251 3265513 4016859 4017121 946 3266461 3266670 4018069 4018278 756 3267784 3268504 4018998 4019718 2595 3268674 3269035 4019888 4020249 1303 3269292 3269587 4020506 4020801 1065 3269589 3269983 4020803 4021197 1422 3269985 3270250 4021199 4021464 957 3270252 3270708 4021466 4021922 1645 3271034 3271275 4022248 4022489 871 3271469 3271701 4022683 4022915 838 3272144 3272367 4023358 4023581 806 3272372 3272594 4023586 4023808 802 3273375 3273701 4024589 4024915 1177 3274479 3274820 4025693 4026034 1231 3274865 3275107 4026079 4026321 874 3275713 3275975 4026927 4027189 946 3276647 3276864 4027861 4028078 784 3276866 3277286 4028080 4028500 1515 3277530 3277854 4028744 4029068 1170 3277956 3278194 4029170 4029408 860 3279503 3279704 4033022 4033223 727 3280091 3280307 4033610 4033826 781 3280515 3280799 4034034 4034318 1026 3281503 3281717 4035022 4035236 774 3282107 3282345 4035626 4035864 860 3282376 3282608 4035895 4036127 838 3282964 3283206 4036483 4036725 874 3283283 3283638 4036802 4037157 1281 3284201 3284402 4037720 4037921 727 3286661 3286910 4040180 4040429 900 3287555 3287899 4041074 4041418 1242 3288084 3288288 4041603 4041807 738 3288551 3288909 4042070 4042428 1292 3289062 3289305 4042581 4042824 878 3289655 3289855 4044132 4044332 723 3289877 3290113 4044354 4044590 853 3290115 3290582 4044592 4045059 1684 3290755 3291112 4045232 4045589 1288 3291114 3291324 4045591 4045801 759 3291448 3291914 4045925 4046391 1681 3294415 3294681 4048892 4049158 961 3295677 3295895 4050154 4050372 788 3296398 3296801 4050875 4051278 1454 3297543 3297742 4052020 4052219 720 3298340 3298676 4052817 4053153 1213 3298774 3299360 4053251 4053837 2113 3299731 3299948 4054208 4054425 784 3300663 3300927 4055140 4055404 954 3300929 3301158 4055406 4055635 828 3302463 3302684 4056939 4057160 799 3302991 3303501 4057467 4057977 1839 3305400 3306657 4059876 4061133 4528 3306659 3306903 4061135 4061379 882 3307568 3307857 4062044 4062333 1044 3308687 3309085 4063163 4063561 1436 3309087 3309496 4063563 4063972 1476 3311453 3311752 4065930 4066229 1080 3311877 3312139 4066354 4066616 946 3312567 3312796 4067044 4067273 828 3313095 3314016 4067572 4068493 3319 3314043 3314317 4068520 4068794 990 3314619 3314848 4069096 4069325 828 3314994 3315210 4069471 4069687 781 3315237 3315882 4069714 4070359 2325 3316069 3316332 4070546 4070809 950 3316334 3316671 4070811 4071148 1216 3317022 3317247 4071499 4071724 813 3317926 3318211 4072403 4072688 1029 3319575 3319803 4074052 4074280 824 3320704 3320981 4075181 4075458 1000 3321517 3321738 4075994 4076215 799 3321794 3322098 4076271 4076575 1098 3322373 3322738 4076850 4077215 1317 3322740 3323120 4077217 4077597 1371 3323296 3323579 4077773 4078056 1022 3323791 3324010 4078268 4078487 792 3324289 3325821 4078766 4080298 5518 3326435 3326781 4080912 4081258 1249 3327152 3327606 4081629 4082083 1638 3328286 3328491 4082617 4082822 741 3328573 3328944 4082904 4083275 1339 3329138 3329874 4083469 4084205 2653 3330017 3330222 4084348 4084553 741 3330305 3331594 4084636 4085925 4644 3332630 3332940 4086962 4087272 1119 3332942 3333168 4087274 4087500 817 3333452 3333675 4087784 4088007 806 3334040 3334683 4088372 4089015 2318 3335272 3335486 4089604 4089818 774 3335488 3335690 4089820 4090022 730 3336004 3336375 4090336 4090707 1339 3336407 3336708 4090739 4091040 1087 3336954 3337849 4091286 4092181 3225 3337851 3338073 4092183 4092405 802 3338209 3338606 4092541 4092938 1432 3338608 3339078 4092940 4093410 1695 3339276 3339588 4093608 4093920 1126 3339755 3339998 4094087 4094330 878 3340842 3341126 4095174 4095458 1026 3341254 3341495 4095586 4095827 871 3341503 3341792 4095835 4096124 1044 3342146 3342691 4096478 4097023 1965 3343431 3343684 4097763 4098016 914 3343782 3344130 4098114 4098462 1256 3344132 3344351 4098464 4098683 792 3344464 3344685 4098796 4099017 799 3344687 3344999 4099019 4099331 1126 3345364 3345610 4099696 4099942 889 3345711 3345964 4100043 4100296 914 3347531 3347774 4101863 4102106 878 3348585 3348874 4102918 4103207 1044 3349350 3349750 4103689 4104089 1443 3350193 3350608 4104532 4104947 1497 3350610 3350865 4104949 4105204 921 3350867 3351138 4105206 4105477 979 3352255 3352513 4106593 4106851 932 3353622 3354112 4107960 4108450 1767 3356796 3357073 4111134 4111411 1000 3366139 3366442 4113372 4113675 1094 3367797 3368028 4115030 4115261 835 3370165 3370385 4117398 4117618 795 3370660 3371060 4117893 4118293 1443 3371161 3371361 4118394 4118594 723 3371849 3372422 4119082 4119655 2066 3373076 3373278 4120306 4120508 730 3373962 3374538 4121184 4121760 2077 3374755 3375128 4121977 4122350 1346 3375420 3375673 4122642 4122895 914 3375711 3376496 4122933 4123718 2829 3376514 3376845 4123736 4124067 1195 3377243 3377442 4124465 4124664 720 3377618 3378057 4124840 4125279 1584 3378059 3378453 4125281 4125675 1422 3379305 3379767 4126527 4126989 1666 3379769 3379970 4126991 4127192 727 3379972 3380294 4127194 4127516 1162 3381775 3382057 4128998 4129280 1018 3382203 3382584 4129426 4129807 1375 3382900 3383770 4130123 4130993 3135 3384948 3385674 4132172 4132898 2617 3386228 3386538 4133452 4133762 1119 3386569 3386877 4133790 4134098 1112 3386989 3387192 4134210 4134413 734 3387265 3387626 4134486 4134847 1303 3387934 3388145 4135155 4135366 763 3388256 3388744 4135477 4135965 1760 3389365 3389594 4136586 4136815 828 3390014 3390275 4136960 4137221 943 3390277 3390599 4137223 4137545 1162 3392293 3392512 4139239 4139458 792 3392557 3392786 4139503 4139732 828 3392788 3393011 4139734 4139957 806 3393173 3393450 4140118 4140395 1000 3393686 3394084 4140631 4141029 1436 3394140 3394555 4141085 4141500 1497 3395220 3395510 4142165 4142455 1047 3395701 3396052 4142646 4142997 1267 3396054 3396358 4142999 4143303 1098 3396638 3396948 4143583 4143893 1119 3397136 3397383 4144081 4144328 892 3397399 3397658 4144344 4144603 936 3397963 3398162 4144908 4145107 720 3398383 3398994 4145328 4145939 2203 3399308 3399660 4146253 4146605 1270 3399662 3399972 4146607 4146917 1119 3399974 3400293 4146919 4147238 1152 3400295 3400512 4147240 4147457 784 3400791 3401694 4147736 4148639 3254 3401774 3402104 4148719 4149049 1191 3402738 3402963 4149683 4149908 813 3402965 3403364 4149910 4150309 1440 3403366 3404046 4150311 4150991 2451 3404282 3404908 4151227 4151853 2257 3405498 3405850 4152443 4152795 1270 3406435 3406830 4153380 4153775 1425 3407033 3407362 4153978 4154307 1188 3407602 3409217 4154547 4156162 5817 3409487 3409824 4156431 4156768 1216 3409826 3410193 4156770 4157137 1324 3410195 3410933 4157139 4157877 2660 3411367 3411948 4158311 4158892 2095 3412181 3412416 4159125 4159360 849 3412553 3412778 4159497 4159722 813 3412780 3413087 4159724 4160031 1108 3413710 3413969 4160654 4160913 936 3415878 3416189 4162867 4163178 1123 3417604 3418404 4164594 4165394 2883 3418988 3419228 4165979 4166219 867 3419651 3419918 4166642 4166909 964 3420023 3420385 4167014 4167376 1306 3421119 3421407 4168109 4168397 1040 3421879 3422207 4168871 4169199 1184 3422696 3423208 4169687 4170199 1846 3423250 3423832 4170241 4170823 2098 3423878 3424155 4170871 4171148 1000 3424157 3424431 4171150 4171424 990 3424482 3426125 4171484 4173127 5918 3426321 3426619 4173323 4173621 1076 3426774 3427305 4173775 4174306 1915 3428346 3429032 4175347 4176033 2473 3429282 3429525 4176283 4176526 878 3430001 3430287 4177001 4177287 1033 3430453 3430789 4177454 4177790 1213 3431126 3431537 4178127 4178538 1483 3431698 3432088 4178699 4179089 1407 3432565 3432830 4179566 4179831 957 3432832 3433035 4179833 4180036 734 3434766 3434974 4181767 4181975 752 3435183 3435478 4182184 4182479 1065 3435480 3435757 4182481 4182758 1000 3436077 3436279 4183078 4183280 730 3437201 3439353 4184202 4186354 7750 3439355 3441199 4186356 4188200 6642 3441372 3441946 4188373 4188947 2070 3441948 3442484 4188949 4189485 1933 3442567 3445133 4189568 4192134 9241 3445135 3445932 4192136 4192933 2872 3445934 3446766 4192935 4193767 2998 3446768 3447008 4193769 4194009 867 3447010 3447961 4194011 4194962 3427 3447963 3448448 4194964 4195449 1749 3448621 3450172 4195622 4197173 5587 3450174 3451090 4197175 4198091 3301 3467941 3468347 4199836 4200242 1465 3468373 3468755 4200268 4200650 1378 3468757 3469776 4200652 4201671 3672 3469778 3470013 4201673 4201908 849 3470015 3470337 4201910 4202232 1162 3470339 3470712 4202234 4202607 1346 3470837 3471247 4202732 4203142 1479 3471249 3472330 4203144 4204225 3895 3473266 3474010 4205161 4205905 2682 3474012 3474340 4205907 4206235 1184 3474751 3474955 4206646 4206850 738 3475166 3475532 4207061 4207427 1321 3475706 3476308 4207601 4208203 2170 3478532 3479001 4210427 4210896 1692 3479003 3479205 4210898 4211100 730 3479381 3479787 4211276 4211682 1465 3480317 3480531 4212212 4212426 774 3480674 3480892 4212569 4212787 788 3481588 3482044 4213483 4213939 1645 3483129 3483391 4215024 4215286 946 3483405 3483901 4215300 4215796 1789 3483903 3484103 4215798 4215998 723 3484812 3485304 4216707 4217199 1774 3486203 3486522 4218098 4218417 1152 3487530 3487738 4219425 4219633 752 3488086 3488312 4219981 4220207 817 3489056 3489588 4220951 4221483 1918 3489620 3490343 4221515 4222238 2606 3490345 3490778 4222240 4222673 1562 3491552 3491969 4223447 4223864 1504 3492244 3492530 4224139 4224425 1033 3493357 3493806 4225252 4225701 1620 3494018 3494564 4225913 4226459 1969 3494566 3494775 4226461 4226670 756 3495233 3495786 4227128 4227681 1994 3497732 3497962 4229636 4229866 831 3498221 3498495 4230125 4230399 990 3500412 3500638 4232316 4232542 817 3502130 3502383 4234034 4234287 914 3511022 3511224 4235206 4235408 730 3511226 3511429 4235410 4235613 734 3511479 3511726 4235663 4235910 892 3512254 3512477 4236438 4236661 806 3512572 3512884 4236756 4237068 1126 3513156 3513713 4237340 4237897 2008 3513715 3513932 4237899 4238116 784 3514385 3515230 4238569 4239414 3045 3515240 3515540 4239424 4239724 1083 3515918 3516383 4240102 4240567 1677 3516385 3516757 4240569 4240941 1342 3516759 3516985 4240943 4241169 817 3516987 3517215 4241171 4241399 824 3517217 3517614 4241401 4241798 1432 3517616 3517842 4241800 4242026 817 3518195 3518414 4242379 4242598 792 3518416 3518675 4242600 4242859 936 3520327 3520731 4244510 4244914 1458 3520965 3521184 4245148 4245367 792 3521285 3521538 4245468 4245721 914 3522164 3522606 4246347 4246789 1594 3523701 3524476 4247883 4248658 2793 3524613 3524845 4248795 4249027 838 3525597 3526027 4249779 4250209 1551 3526302 3526895 4250484 4251077 2138 3526994 3527511 4251176 4251693 1864 3527798 3528156 4251980 4252338 1292 3529862 3530732 4254044 4254914 3135 3531598 3531959 4255780 4256141 1303 3533168 3533540 4257350 4257722 1342 3533605 3533840 4257787 4258022 849 3533944 3534609 4258126 4258791 2397 3534872 3535125 4259054 4259307 914 3535502 3535933 4259684 4260115 1555 3537716 3538058 4261881 4262223 1234 3538118 3538388 4262283 4262553 975 3538720 3538988 4262885 4263153 968 3539188 3539423 4263353 4263588 849 3542064 3542270 4266227 4266433 745 3543166 3543377 4267329 4267540 763 3544363 3544621 4268530 4268788 932 3545028 3545338 4269195 4269505 1119 3546156 3546421 4270257 4270522 957 3547430 3547650 4271531 4271751 795 3547653 3548003 4271754 4272104 1263 3548005 3548356 4272106 4272457 1267 3548687 3548920 4272788 4273021 842 3549389 3549652 4273490 4273753 950 3549996 3550236 4274097 4274337 867 3550457 3550734 4274558 4274835 1000 3550966 3551195 4275067 4275296 828 3551197 3551564 4275298 4275665 1324 3551566 3551783 4275667 4275884 784 3552517 3552752 4276618 4276853 849 3557336 3557543 4282277 4282484 748 3557579 3557826 4282520 4282767 892 3558241 3558696 4283182 4283637 1641 3558933 3559148 4283874 4284089 777 3559415 3559617 4284356 4284558 730 3559675 3559992 4284616 4284933 1144 3560557 3560792 4285498 4285733 849 3561803 3562239 4289596 4290032 1573 3562646 3563634 4290439 4291427 3560 3563858 3564327 4291651 4292120 1692 3564329 3564567 4292122 4292360 860 3564976 3565428 4292769 4293221 1630 3565472 3566159 4293265 4293952 2476 3566161 3566576 4293954 4294369 1497 3566584 3567271 4294377 4295064 2476 3567273 3567496 4295066 4295289 806 3567597 3567963 4295390 4295756 1321 3568254 3568461 4296047 4296254 748 3568479 3569058 4296272 4296851 2088 3569644 3569895 4297437 4297688 907 3570512 3570762 4298305 4298555 903 3570926 3571649 4298719 4299442 2606 3571651 3571952 4299444 4299745 1087 3572002 3572237 4299795 4300030 849 3572517 3572896 4300309 4300688 1368 genometools-1.5.1/testdata/chaindata/chain-local-wf1.8-maxgap20000066400000000000000000000005541211610345200241500ustar00rootroot00000000000000# chain 0: length 9 score 25016 1085337 1086089 1412837 1413589 2710 1086091 1086892 1413591 1414392 2887 1086894 1088334 1414394 1415834 5187 1088336 1088973 1415836 1416473 2296 1088975 1089198 1416475 1416698 806 1089200 1090692 1416700 1418192 5374 1090694 1091324 1418194 1418824 2271 1091338 1091738 1418838 1419238 1443 1091740 1092322 1419240 1419822 2098 genometools-1.5.1/testdata/chaindata/chain-local20000066400000000000000000004701661211610345200220460ustar00rootroot00000000000000# chain 0: length 1 score 774 5851 6237 5868 6254 774 # chain 1: length 14 score 3784 7627 7937 7644 7954 622 8079 8457 8096 8474 758 8687 8994 8704 9011 616 8996 9375 9013 9392 760 9377 9666 9394 9683 580 10024 10406 10041 10423 766 10408 10715 10425 10732 616 11439 11663 11456 11680 450 11695 11898 11712 11915 408 12026 12235 12043 12252 420 12384 12712 12401 12729 658 13131 13339 13148 13356 418 13719 14230 13736 14247 1024 14232 14645 14249 14662 828 # chain 2: length 1 score 574 18477 18763 17145 17431 574 # chain 3: length 1 score 836 19377 19794 18045 18462 836 # chain 4: length 2 score 1474 20813 21272 25219 25678 920 21304 21615 25716 26027 624 # chain 5: length 1 score 610 23335 23639 27747 28051 610 # chain 6: length 1 score 806 25045 25447 29457 29859 806 # chain 7: length 1 score 472 26789 27024 31164 31399 472 # chain 8: length 2 score 848 27712 28067 32087 32442 712 28223 28446 32598 32821 448 # chain 9: length 1 score 676 29506 29843 33881 34218 676 # chain 10: length 1 score 416 30706 30913 35081 35288 416 # chain 11: length 1 score 460 31887 32116 36262 36491 460 # chain 12: length 1 score 430 33552 33766 37927 38141 430 # chain 13: length 1 score 972 34112 34597 38486 38971 972 # chain 14: length 2 score 1294 35170 35491 39577 39898 644 35499 35831 39906 40238 666 # chain 15: length 3 score 1760 37032 37439 41439 41846 816 37534 37775 41941 42182 484 37777 38103 42184 42510 654 # chain 16: length 1 score 760 40129 40508 44536 44915 760 # chain 17: length 1 score 442 41188 41408 45595 45815 442 # chain 18: length 1 score 424 43562 43773 47976 48187 424 # chain 19: length 1 score 412 44455 44660 48869 49074 412 # chain 20: length 3 score 1259 45555 45805 49969 50219 502 45950 46173 50365 50588 448 46253 46632 50668 51047 760 # chain 21: length 1 score 740 49571 49940 53986 54355 740 # chain 22: length 3 score 1710 51097 51551 56073 56527 910 51621 51901 56597 56877 562 51924 52135 56900 57111 424 # chain 23: length 13 score 8789 53284 53627 58260 58603 688 53902 54335 58878 59311 868 54337 54981 59313 59957 1290 54983 56483 59959 61459 3002 56485 56939 61461 61915 910 56941 57835 61917 62811 1790 57928 58141 62904 63117 428 59485 59772 64418 64705 576 59831 60053 64764 64986 446 60245 60545 65178 65478 602 60547 60890 65480 65823 688 60943 61457 65876 66390 1030 61459 61700 66392 66633 484 # chain 24: length 2 score 1282 70473 71000 75320 75847 1056 71214 71540 76061 76387 654 # chain 25: length 2 score 1076 74737 75132 79557 79952 792 75226 75461 80046 80281 472 # chain 26: length 1 score 428 76775 76988 82604 82817 428 # chain 27: length 1 score 440 81083 81302 85691 85910 440 # chain 28: length 2 score 1254 82978 83294 87586 87902 634 83392 83799 88000 88407 816 # chain 29: length 2 score 590 84493 84737 89099 89343 490 84949 85210 89555 89816 524 # chain 30: length 1 score 436 85881 86098 90487 90704 436 # chain 31: length 1 score 488 87279 87522 91885 92128 488 # chain 32: length 2 score 1106 87794 88118 92400 92724 650 88120 88349 92726 92955 460 # chain 33: length 3 score 2064 89754 90328 94360 94934 1150 90591 90949 95197 95555 718 91187 91785 95793 96391 1198 # chain 34: length 2 score 596 94167 94384 98773 98990 436 94548 94791 99154 99397 488 # chain 35: length 1 score 438 95152 95370 99758 99976 438 # chain 36: length 1 score 910 95905 96359 100511 100965 910 # chain 37: length 1 score 802 97113 97513 101719 102119 802 # chain 38: length 29 score 11974 98322 98775 102928 103381 908 98906 99228 103512 103834 646 99254 99649 103860 104255 792 99651 99869 104257 104475 438 100432 100691 105038 105297 520 101175 101494 105781 106100 640 101721 101923 106327 106529 406 102613 102831 107219 107437 438 102833 103359 107439 107965 1054 103604 103840 108210 108446 474 103842 104168 108448 108774 654 104548 104822 109154 109428 550 104857 105545 109463 110151 1378 106099 107460 110705 112066 2724 107686 107909 112292 112515 448 108007 108211 112613 112817 410 108293 108597 112899 113203 610 108848 109485 113454 114091 1276 109496 109707 114102 114313 424 109927 110184 114533 114790 516 110441 110658 115047 115264 436 110660 110901 115266 115507 484 110903 111227 115509 115833 650 111661 112144 116151 116634 968 112146 112457 116636 116947 624 112459 112834 116949 117324 752 112836 113047 117326 117537 424 113049 113268 117539 117758 440 113270 114090 117760 118580 1642 # chain 39: length 7 score 4472 133795 134045 138168 138418 502 134047 134547 138420 138920 1002 134594 134876 138967 139249 566 134968 135254 139341 139627 574 135256 135635 139629 140008 760 135663 136121 140036 140494 918 136240 136604 140613 140977 730 # chain 40: length 6 score 1780 141040 141304 145413 145677 530 141343 141710 145716 146083 736 141797 142087 146170 146460 582 142452 142814 146825 147187 726 143270 143496 147643 147869 454 143498 143822 147871 148195 650 # chain 41: length 1 score 1176 146145 146732 150518 151105 1176 # chain 42: length 6 score 2828 157544 157954 161867 162277 822 158023 158489 162346 162812 934 158578 158792 162901 163115 430 159237 159483 163560 163806 494 160020 160261 164343 164584 484 160401 161512 164724 165835 2224 # chain 43: length 1 score 576 164644 164931 168967 169254 576 # chain 44: length 2 score 1660 166100 166500 170423 170823 802 166502 166932 170825 171255 862 # chain 45: length 2 score 816 168428 168768 172751 173091 682 169064 169426 173387 173749 726 # chain 46: length 1 score 664 172286 172617 176609 176940 664 # chain 47: length 1 score 1140 174673 175242 178873 179442 1140 # chain 48: length 15 score 5530 175991 176292 180191 180492 604 176294 176862 180494 181062 1138 176876 177372 181076 181572 994 177648 177933 181848 182133 572 178131 178465 182331 182665 670 178479 178867 182679 183067 778 179070 179513 183270 183713 888 180127 180427 184327 184627 602 180820 181388 185020 185588 1138 181390 181646 185590 185846 514 181663 181940 185863 186140 556 182343 182661 186543 186861 638 183133 183406 187333 187606 548 183458 183671 187658 187871 428 183701 184121 187901 188321 842 # chain 49: length 21 score 20527 188339 188709 191826 192196 742 188711 189124 192198 192611 828 189417 189686 192904 193173 540 189688 189955 193175 193442 536 189957 190705 193444 194192 1498 190707 191298 194194 194785 1184 191300 192509 194787 195996 2420 192775 193061 196120 196406 574 193063 194127 196408 197472 2130 194165 194669 197510 198014 1010 195040 197671 198385 201016 5264 197790 198378 201135 201723 1178 198380 198621 201725 201966 484 199262 199926 202607 203271 1330 199928 200418 203273 203763 982 200529 200809 203873 204153 562 200811 201187 204155 204531 754 201345 201607 204689 204951 526 201640 202500 204984 205844 1722 202808 203026 206152 206370 438 203135 203440 206479 206784 612 # chain 50: length 7 score 4701 4164382 4165237 227247 228102 1712 4165275 4165798 228140 228663 1048 4166150 4166354 229021 229225 410 4166865 4167388 229736 230259 1048 4167448 4167940 230318 230810 986 4168084 4168332 230954 231202 498 4168430 4169134 231300 232004 1410 # chain 51: length 7 score 4292 4205569 4205867 226947 227245 598 4205869 4206724 227247 228102 1712 4206762 4207279 228140 228657 1036 4208267 4208790 229736 230259 1048 4208850 4209342 230318 230810 986 4209486 4209734 230954 231202 498 4209832 4210413 231300 231881 1164 # chain 52: length 7 score 5021 4033264 4034119 227247 228102 1712 4034157 4034674 228140 228657 1036 4034682 4035035 228665 229018 708 4035744 4036270 229736 230262 1054 4036326 4036820 230318 230812 990 4036971 4037212 230961 231202 484 4037310 4037891 231300 231881 1164 # chain 53: length 10 score 4482 3939284 3939507 226956 227179 448 3939656 3940331 227328 228003 1352 3940467 3940984 228140 228657 1036 3941255 3941460 229020 229225 412 3941972 3942495 229736 230259 1048 3942555 3943049 230318 230812 990 3943061 3943439 230824 231202 758 3943441 3943705 231204 231468 530 3943851 3944118 231614 231881 536 3944336 3944572 232098 232334 474 # chain 54: length 1 score 402 3622269 3622469 272913 273113 402 # chain 55: length 1 score 488 3622911 3623154 273555 273798 488 # chain 56: length 2 score 943 1527877 1528098 275467 275688 444 1528181 1528512 275770 276101 664 # chain 57: length 2 score 997 1529096 1529346 276684 276934 502 1529348 1529596 276935 277183 498 # chain 58: length 1 score 734 240031 240397 278100 278466 734 # chain 59: length 2 score 1048 241492 241701 279561 279770 420 241703 242018 279772 280087 632 # chain 60: length 2 score 716 245371 245714 283339 283682 688 245952 246203 283920 284171 504 # chain 61: length 1 score 460 250050 250279 287937 288166 460 # chain 62: length 1 score 430 251614 251828 289501 289715 430 # chain 63: length 1 score 422 252573 252783 290460 290670 422 # chain 64: length 1 score 590 253387 253681 291275 291569 590 # chain 65: length 1 score 514 254361 254617 292249 292505 514 # chain 66: length 3 score 1816 255687 256313 293575 294201 1254 256486 256872 294374 294760 774 257033 257260 294921 295148 456 # chain 67: length 1 score 568 258635 258918 296523 296806 568 # chain 68: length 1 score 492 259430 259675 297318 297563 492 # chain 69: length 1 score 430 260217 260431 298105 298319 430 # chain 70: length 1 score 572 260706 260991 298594 298879 572 # chain 71: length 1 score 664 297132 297463 330317 330648 664 # chain 72: length 1 score 622 299169 299479 332354 332664 622 # chain 73: length 1 score 520 300524 300783 333709 333968 520 # chain 74: length 1 score 512 301750 302005 334935 335190 512 # chain 75: length 1 score 866 305109 305541 338294 338726 866 # chain 76: length 2 score 926 306139 306369 339324 339554 462 306382 306626 339567 339811 490 # chain 77: length 1 score 650 308316 308640 341501 341825 650 # chain 78: length 1 score 634 309476 309792 342661 342977 634 # chain 79: length 1 score 546 313588 313860 353941 354213 546 # chain 80: length 1 score 464 316129 316360 358934 359165 464 # chain 81: length 3 score 2040 318125 318630 361618 362123 1012 318632 318938 362125 362431 614 319028 319326 362521 362819 598 # chain 82: length 2 score 862 321266 321471 364759 364964 412 321473 321699 364966 365192 454 # chain 83: length 1 score 1344 322401 323072 365894 366565 1344 # chain 84: length 1 score 410 323968 324172 367461 367665 410 # chain 85: length 6 score 3328 328133 328560 376575 377002 856 328661 329008 377103 377450 696 329022 329383 377464 377825 724 329619 330088 378061 378530 940 330090 330409 378532 378851 640 330540 330759 378982 379201 440 # chain 86: length 1 score 658 332518 332846 384784 385112 658 # chain 87: length 2 score 1090 334160 334386 386435 386661 454 334409 334749 386684 387024 682 # chain 88: length 1 score 586 336547 336839 388822 389114 586 # chain 89: length 1 score 538 338028 338296 390303 390571 538 # chain 90: length 1 score 418 340819 341027 393187 393395 418 # chain 91: length 1 score 486 341549 341791 393917 394159 486 # chain 92: length 3 score 1894 342414 343104 399888 400578 1382 343301 343735 400775 401209 870 343919 344120 401393 401594 404 # chain 93: length 1 score 984 351607 352098 408800 409291 984 # chain 94: length 1 score 558 352888 353166 410081 410359 558 # chain 95: length 1 score 532 354178 354443 411935 412200 532 # chain 96: length 2 score 1308 355443 355817 413200 413574 750 355819 356099 413576 413856 562 # chain 97: length 1 score 568 358310 358593 415864 416147 568 # chain 98: length 1 score 466 361300 361532 418854 419086 466 # chain 99: length 2 score 1014 362254 362582 419808 420136 658 362638 362871 420192 420425 468 # chain 100: length 1 score 406 367228 367430 426606 426808 406 # chain 101: length 1 score 410 368110 368314 427488 427692 410 # chain 102: length 1 score 792 368569 368964 427947 428342 792 # chain 103: length 3 score 1386 369620 370014 428998 429392 790 370352 370704 429730 430082 706 370840 371258 430218 430636 838 # chain 104: length 2 score 1016 374964 375281 433940 434257 636 375474 375856 434450 434832 766 # chain 105: length 1 score 690 378703 379047 437579 437923 690 # chain 106: length 3 score 902 385128 385475 446908 447255 696 385631 385848 447411 447628 436 386054 386300 447834 448080 494 # chain 107: length 1 score 418 388046 388254 449826 450034 418 # chain 108: length 19 score 3906 392824 393267 453381 453824 888 393274 393475 453831 454032 404 393537 394358 454094 454915 1644 394579 394841 455136 455398 526 394843 395354 455400 455911 1024 396828 397102 457385 457659 550 397218 397459 457775 458016 484 397707 397942 458264 458499 472 398247 398697 458804 459254 902 398813 399102 459370 459659 580 399920 400442 460477 460999 1046 400542 401106 461099 461663 1130 401519 401862 462076 462419 688 402894 403806 463451 464363 1826 404119 404330 464676 464887 424 404764 405189 465321 465746 852 405269 405498 465826 466055 460 405500 406133 466057 466690 1268 406247 406472 466804 467029 452 # chain 109: length 1 score 778 408239 408627 471103 471491 778 # chain 110: length 3 score 2268 409019 409683 471883 472547 1330 409685 409949 472549 472813 530 409951 410158 472815 473022 416 # chain 111: length 10 score 10990 414347 414694 477106 477453 696 414876 415176 477635 477935 602 415178 416519 477937 479278 2684 416521 417497 479280 480256 1954 417578 417798 480337 480557 442 418074 418301 480833 481060 456 418498 419130 481257 481889 1266 419564 421545 482323 484304 3964 421585 421886 484344 484645 604 421918 422324 484677 485083 814 # chain 112: length 1 score 408 443866 444069 510697 510900 408 # chain 113: length 1 score 424 445270 445481 512101 512312 424 # chain 114: length 1 score 442 446240 446460 513071 513291 442 # chain 115: length 19 score 8681 446699 446996 513530 513827 596 447154 447388 513985 514219 470 447558 447851 514389 514682 588 447853 448076 514684 514907 448 448714 449491 515545 516322 1556 449557 450019 516388 516850 926 450118 450394 516949 517225 554 450523 450872 517354 517703 700 451229 451856 518060 518687 1256 451981 452222 518812 519053 484 453065 453331 519896 520162 534 453527 454666 520358 521497 2280 454668 455257 521499 522088 1180 455277 455482 522108 522313 412 455714 455976 522544 522806 526 456098 456384 522928 523214 574 456386 456860 523216 523690 950 457429 457823 524259 524653 790 457825 458484 524655 525314 1320 # chain 116: length 1 score 788 467804 468197 534646 535039 788 # chain 117: length 3 score 3426 468592 469367 535434 536209 1552 469369 469914 536211 536756 1092 469916 470310 536758 537152 790 # chain 118: length 1 score 440 475605 475824 542449 542668 440 # chain 119: length 38 score 8764 476138 476384 542982 543228 494 476386 476706 543230 543550 642 476749 477036 543593 543880 576 477185 477438 544029 544282 508 477689 477900 544533 544744 424 478299 478541 545143 545385 486 478557 478830 545401 545674 548 478832 479540 545676 546384 1418 479542 479820 546386 546664 558 479873 480097 546717 546941 450 480156 480358 547000 547202 406 480500 480797 547344 547641 596 480799 481310 547643 548154 1024 481312 481595 548156 548439 568 482005 482228 548849 549072 448 482401 482648 549245 549492 496 483364 483867 550208 550711 1008 483869 484107 550713 550951 478 484109 485087 550953 551931 1958 485569 486007 552413 552851 878 486512 487233 553356 554077 1444 488357 488580 555201 555424 448 488648 489096 555492 555940 898 490156 490806 556830 557480 1302 491016 491281 557690 557955 532 491283 491685 557957 558359 806 491936 492348 558610 559022 826 492431 492726 559105 559400 592 493578 493812 560252 560486 470 494565 494791 561239 561465 454 495183 495536 561857 562210 708 495813 496141 562487 562815 658 496339 496774 563013 563448 872 497201 497557 563771 564127 714 497559 497843 564129 564413 570 497944 498191 564514 564761 496 498193 498515 564763 565085 646 498526 498795 565096 565365 540 # chain 120: length 1 score 502 514311 514561 608578 608828 502 # chain 121: length 1 score 880 514941 515380 609208 609647 880 # chain 122: length 6 score 3308 515956 516293 610223 610560 676 516295 516506 610562 610773 424 516508 517120 610775 611387 1226 517360 517640 611627 611907 562 517972 518490 612239 612757 1038 518492 518760 612759 613027 538 # chain 123: length 6 score 4531 527250 527840 620314 620904 1182 527909 528139 620973 621203 462 528272 528957 621335 622020 1372 528959 529358 622022 622421 800 529620 530191 622683 623254 1144 530358 530775 623421 623838 836 # chain 124: length 1 score 596 536800 537097 629864 630161 596 # chain 125: length 1 score 538 538454 538722 631432 631700 538 # chain 126: length 1 score 406 539806 540008 632784 632986 406 # chain 127: length 1 score 586 540859 541151 633837 634129 586 # chain 128: length 1 score 498 543235 543483 636213 636461 498 # chain 129: length 3 score 1860 545192 545481 638170 638459 580 545483 545707 638461 638685 450 545797 546303 638775 639281 1014 # chain 130: length 1 score 454 547235 547461 640213 640439 454 # chain 131: length 1 score 666 548227 548559 641206 641538 666 # chain 132: length 2 score 1076 548973 549348 641952 642327 752 549401 549615 642380 642594 430 # chain 133: length 1 score 640 552171 552490 645094 645413 640 # chain 134: length 2 score 2156 553403 554011 646326 646934 1218 554139 554735 647062 647658 1194 # chain 135: length 5 score 1610 557166 557534 650089 650457 738 557536 557969 650459 650892 868 558658 558860 651581 651783 406 558862 559066 651785 651989 410 559243 559706 652166 652629 928 # chain 136: length 1 score 840 561117 561536 654046 654465 840 # chain 137: length 5 score 2300 561996 562213 654926 655143 436 562215 562563 655145 655493 698 562841 563219 655771 656149 758 563221 563588 656151 656518 736 563747 564023 656677 656953 554 # chain 138: length 3 score 1932 585334 585798 656962 657426 930 585880 586262 657508 657890 766 586264 586465 657892 658093 404 # chain 139: length 1 score 586 592069 592361 663697 663989 586 # chain 140: length 1 score 430 594538 594752 677757 677971 430 # chain 141: length 1 score 430 595911 596125 679130 679344 430 # chain 142: length 1 score 416 597790 597997 680884 681091 416 # chain 143: length 3 score 916 599565 599857 682653 682945 586 600066 600290 683154 683378 450 600346 600550 683434 683638 410 # chain 144: length 8 score 2715 601677 602172 684765 685260 992 602198 602427 685286 685515 460 602936 603201 686011 686276 532 603203 603533 686278 686608 662 603535 603864 686610 686939 660 604552 604841 687627 687916 580 604858 605299 687933 688374 884 605327 605564 688402 688639 476 # chain 145: length 1 score 412 608712 608917 690927 691132 412 # chain 146: length 1 score 724 609123 609484 691338 691699 724 # chain 147: length 1 score 472 611082 611317 693297 693532 472 # chain 148: length 1 score 926 611646 612108 693861 694323 926 # chain 149: length 1 score 454 612814 613040 695029 695255 454 # chain 150: length 2 score 916 617409 617630 699624 699845 444 617729 618063 699944 700278 670 # chain 151: length 1 score 1524 621062 621823 703277 704038 1524 # chain 152: length 2 score 926 623967 624342 705996 706371 752 624455 624654 706484 706683 400 # chain 153: length 1 score 948 626744 627217 708773 709246 948 # chain 154: length 1 score 484 630745 630986 712774 713015 484 # chain 155: length 1 score 590 631312 631606 713340 713634 590 # chain 156: length 2 score 1370 632574 632966 714602 714994 786 632979 633283 715007 715311 610 # chain 157: length 11 score 3343 634659 634927 716687 716955 538 635077 635401 717105 717429 650 635427 635641 717455 717669 430 636170 636533 718198 718561 728 636536 636836 718564 718864 602 637362 637684 719391 719713 646 638120 638730 720149 720759 1222 638868 639189 720781 721102 644 639566 640314 721479 722227 1498 640316 640593 722229 722506 556 640892 641234 722805 723147 686 # chain 158: length 4 score 1646 644297 644559 726210 726472 526 644561 644779 726474 726692 438 644973 645331 726886 727244 718 645498 645842 727411 727755 690 # chain 159: length 1 score 400 647520 647719 729433 729632 400 # chain 160: length 1 score 424 649072 649283 730985 731196 424 # chain 161: length 11 score 4899 649579 649804 731492 731717 452 649806 650219 731719 732132 828 650628 650837 732541 732750 420 650876 651180 732789 733093 610 651311 651673 733225 733587 726 651675 652010 733589 733924 672 652417 653081 734331 734995 1330 653198 653517 735112 735431 640 653983 654464 735897 736378 964 654466 654803 736380 736717 676 654805 655172 736719 737086 736 # chain 162: length 3 score 3317 673391 673786 755307 755702 792 673815 674028 755731 755944 428 674051 675151 755968 757068 2202 # chain 163: length 4 score 2330 677843 678132 759761 760050 580 678134 678600 760052 760518 934 678602 678830 760520 760748 458 678850 679052 760768 760970 406 # chain 164: length 1 score 514 681591 681847 763509 763765 514 # chain 165: length 1 score 1022 682257 682767 764175 764685 1022 # chain 166: length 1 score 404 684323 684524 766241 766442 404 # chain 167: length 2 score 980 685476 685705 767394 767623 460 685740 686034 767658 767952 590 # chain 168: length 7 score 2328 688616 688831 769335 769550 432 688851 689134 769570 769853 568 689217 689468 769936 770187 504 689820 690238 770539 770957 838 690471 690733 771190 771452 526 690801 691086 771520 771805 572 691088 691289 771807 772008 404 # chain 169: length 4 score 1592 695606 695851 776325 776570 492 695874 696078 776594 776798 410 696270 696632 776991 777353 726 696634 696833 777355 777554 400 # chain 170: length 1 score 512 699406 699661 779987 780242 512 # chain 171: length 1 score 526 700002 700264 780583 780845 526 # chain 172: length 1 score 614 700584 700890 781165 781471 614 # chain 173: length 4 score 1380 701579 702110 782160 782691 1064 702468 702698 783049 783279 462 702742 702979 783323 783560 476 703130 703371 783711 783952 484 # chain 174: length 1 score 624 705239 705550 785820 786131 624 # chain 175: length 4 score 2085 706141 706441 786722 787022 602 706486 706753 787067 787334 536 706755 707162 787336 787743 816 707278 707506 787860 788088 458 # chain 176: length 1 score 436 708561 708778 789143 789360 436 # chain 177: length 6 score 3250 709471 709878 790053 790460 816 710074 710450 790658 791034 754 710452 710910 791036 791494 918 711047 711367 791631 791951 642 711957 712391 792541 792975 870 712452 713063 793036 793647 1224 # chain 178: length 1 score 964 721034 721515 800021 800502 964 # chain 179: length 1 score 436 722999 723216 801986 802203 436 # chain 180: length 1 score 406 725606 725808 804593 804795 406 # chain 181: length 2 score 1110 726092 726414 805079 805401 646 726416 726649 805403 805636 468 # chain 182: length 3 score 1052 3759827 3760224 807809 808206 796 3760533 3760761 808515 808743 458 3760763 3760972 808745 808954 420 # chain 183: length 3 score 926 3616903 3617237 807872 808206 670 3617546 3617774 808515 808743 458 3617776 3617985 808745 808954 420 # chain 184: length 3 score 1074 729222 729757 808208 808743 1072 730140 730413 809126 809399 548 730620 730936 809606 809922 634 # chain 185: length 1 score 520 3762518 3762777 810500 810759 520 # chain 186: length 1 score 520 3619531 3619790 810500 810759 520 # chain 187: length 1 score 2598 732327 733625 811313 812611 2598 # chain 188: length 1 score 400 3762983 3763182 812836 813035 400 # chain 189: length 1 score 666 3622137 3622469 816144 816476 666 # chain 190: length 1 score 488 3622911 3623154 816918 817161 488 # chain 191: length 1 score 536 740097 740364 819174 819441 536 # chain 192: length 4 score 2314 741528 741757 820605 820834 460 741759 741993 820836 821070 470 742280 743053 821357 822130 1548 743064 743281 822141 822358 436 # chain 193: length 1 score 482 745018 745258 824095 824335 482 # chain 194: length 1 score 430 746300 746514 825377 825591 430 # chain 195: length 1 score 406 752906 753108 831982 832184 406 # chain 196: length 10 score 3942 753323 753555 832399 832631 466 753774 754160 832850 833236 774 754162 754523 833238 833599 724 754525 754894 833601 833970 740 754937 755175 834013 834251 478 755177 755538 834253 834614 724 756746 756993 835822 836069 496 757037 757458 836113 836534 844 757532 758196 836608 837272 1330 758228 758536 837304 837612 618 # chain 197: length 2 score 990 763591 763811 842486 842706 442 763954 764370 842849 843265 834 # chain 198: length 1 score 1126 770806 771368 857743 858305 1126 # chain 199: length 1 score 790 771946 772340 858883 859277 790 # chain 200: length 10 score 3099 773272 773491 860209 860428 440 773648 773855 860585 860792 416 773858 774113 860795 861050 512 774115 774466 861052 861403 704 774969 775208 861906 862145 480 775210 775688 862147 862625 958 776440 776847 863296 863703 816 776849 777074 863705 863930 452 777898 778946 864754 865802 2098 779241 779851 866097 866707 1222 # chain 201: length 2 score 610 783078 783319 869373 869614 484 783507 783757 869802 870052 502 # chain 202: length 1 score 756 784644 785021 870933 871310 756 # chain 203: length 1 score 446 786648 786870 872945 873167 446 # chain 204: length 1 score 488 787198 787441 873495 873738 488 # chain 205: length 1 score 532 788132 788397 874429 874694 532 # chain 206: length 1 score 434 790206 790422 876503 876719 434 # chain 207: length 1 score 478 790730 790968 877027 877265 478 # chain 208: length 2 score 1006 792220 792631 878518 878929 824 792781 793021 879079 879319 482 # chain 209: length 1 score 1202 793739 794339 880037 880637 1202 # chain 210: length 3 score 1282 795078 795295 881376 881593 436 795297 795571 881595 881869 550 795678 795934 881976 882232 514 # chain 211: length 2 score 1002 799265 799593 885563 885891 658 799810 800198 886108 886496 778 # chain 212: length 1 score 518 801521 801779 887820 888078 518 # chain 213: length 1 score 626 802234 802546 888533 888845 626 # chain 214: length 2 score 602 803451 803675 889750 889974 450 803889 804178 890188 890477 580 # chain 215: length 1 score 522 804780 805040 891079 891339 522 # chain 216: length 1 score 596 805498 805795 891704 892001 596 # chain 217: length 1 score 570 808412 808696 933207 933491 570 # chain 218: length 1 score 458 812635 812863 937431 937659 458 # chain 219: length 1 score 454 816179 816405 940974 941200 454 # chain 220: length 2 score 774 817052 817372 941847 942167 642 817661 818015 942456 942810 710 # chain 221: length 1 score 424 819202 819413 943996 944207 424 # chain 222: length 1 score 812 821380 821785 946177 946582 812 # chain 223: length 4 score 4004 822333 822592 947130 947389 520 822609 823614 947406 948411 2012 823616 824135 948413 948932 1040 824137 824373 948934 949170 474 # chain 224: length 1 score 498 826458 826706 951255 951503 498 # chain 225: length 1 score 710 827275 827629 952072 952426 710 # chain 226: length 2 score 1150 829168 829607 953965 954404 880 829949 830425 954746 955222 954 # chain 227: length 1 score 476 832197 832434 959067 959304 476 # chain 228: length 1 score 670 833381 833715 960251 960585 670 # chain 229: length 1 score 508 834305 834558 961175 961428 508 # chain 230: length 1 score 410 839012 839216 965895 966099 410 # chain 231: length 2 score 1196 840524 840835 967407 967718 624 841097 841644 967980 968527 1096 # chain 232: length 1 score 848 842958 843381 969841 970264 848 # chain 233: length 1 score 406 845147 845349 971886 972088 406 # chain 234: length 1 score 856 845602 846029 972341 972768 856 # chain 235: length 2 score 998 846823 847308 973562 974047 972 847608 847920 974347 974659 626 # chain 236: length 3 score 1486 848682 849037 975421 975776 712 849246 849751 975985 976490 1012 849867 850072 976606 976811 412 # chain 237: length 2 score 1430 850999 851479 977738 978218 962 851481 851716 978220 978455 472 # chain 238: length 1 score 444 852947 853168 979686 979907 444 # chain 239: length 3 score 1581 854794 855005 981532 981743 424 855107 855585 981846 982324 958 855680 855976 982419 982715 594 # chain 240: length 1 score 412 857016 857221 983682 983887 412 # chain 241: length 3 score 1685 857661 858292 984327 984958 1264 858469 858722 985136 985389 508 858802 859015 985469 985682 428 # chain 242: length 1 score 462 860912 861142 987579 987809 462 # chain 243: length 1 score 470 861749 861983 988415 988649 470 # chain 244: length 1 score 448 862759 862982 989425 989648 448 # chain 245: length 2 score 1026 865489 865766 992258 992535 556 865768 866004 992537 992773 474 # chain 246: length 2 score 520 867315 867529 994084 994298 430 867711 867937 994480 994706 454 # chain 247: length 4 score 1590 868317 868769 995086 995538 906 868960 869172 995729 995941 426 869174 869379 995943 996148 412 869581 869898 996350 996667 636 # chain 248: length 1 score 776 870996 871383 997765 998152 776 # chain 249: length 4 score 1236 873497 873732 1000266 1000501 472 873734 874035 1000503 1000804 604 874493 874786 1001262 1001555 588 874818 875095 1001587 1001864 556 # chain 250: length 1 score 826 876323 876735 1004046 1004458 826 # chain 251: length 15 score 5161 877193 877408 1004916 1005131 432 877453 877976 1005176 1005699 1048 878102 878316 1005825 1006039 430 878360 878829 1006083 1006552 940 878948 879177 1006671 1006900 460 879179 879387 1006902 1007110 418 879419 879669 1007142 1007392 502 879671 879890 1007394 1007613 440 880033 880370 1007755 1008092 676 880495 880731 1008217 1008453 474 881337 881536 1009059 1009258 400 881772 882057 1009494 1009779 572 882059 882304 1009781 1010026 492 882494 882787 1010216 1010509 588 882789 883106 1010511 1010828 636 # chain 252: length 1 score 630 895107 895421 1022830 1023144 630 # chain 253: length 2 score 750 895956 896269 1023679 1023992 628 896468 896727 1024191 1024450 520 # chain 254: length 2 score 928 897283 897497 1025006 1025220 430 897520 897791 1025243 1025514 544 # chain 255: length 1 score 484 901363 901604 1032396 1032637 484 # chain 256: length 3 score 1522 902056 902308 1033089 1033341 506 902490 902737 1033523 1033770 496 902739 903182 1033772 1034215 888 # chain 257: length 1 score 432 904186 904401 1037735 1037950 432 # chain 258: length 1 score 438 906687 906905 1040236 1040454 438 # chain 259: length 1 score 538 910222 910490 1043771 1044039 538 # chain 260: length 1 score 544 912033 912304 1045582 1045853 544 # chain 261: length 1 score 668 912852 913185 1046401 1046734 668 # chain 262: length 1 score 452 913841 914066 1047390 1047615 452 # chain 263: length 2 score 888 914986 915276 1048498 1048788 582 915473 915822 1048985 1049334 700 # chain 264: length 4 score 1112 916829 917061 1050341 1050573 466 917267 917535 1050779 1051047 538 917540 917745 1051052 1051257 412 917978 918269 1051490 1051781 584 # chain 265: length 3 score 1062 918885 919119 1052397 1052631 470 919198 919517 1052710 1053029 640 919680 919897 1053192 1053409 436 # chain 266: length 5 score 4332 920748 920974 1054260 1054486 454 921171 921406 1054683 1054918 472 921408 921951 1054920 1055463 1088 921953 923120 1055465 1056632 2336 923158 923387 1056670 1056899 460 # chain 267: length 1 score 490 4505653 4505897 1069810 1070054 490 # chain 268: length 1 score 716 4505889 4506246 1072496 1072853 716 # chain 269: length 1 score 460 4506249 4506478 1083883 1084112 460 # chain 270: length 29 score 12657 925370 926038 1146447 1147115 1338 926040 926242 1147117 1147319 406 926275 927044 1147352 1148121 1540 927564 927936 1148641 1149013 746 928215 928771 1149292 1149848 1114 929811 930058 1150888 1151135 496 930060 930372 1151137 1151449 626 930878 931200 1151955 1152277 646 931202 931652 1152279 1152729 902 931654 932145 1152731 1153222 984 932147 932461 1153224 1153538 630 932463 932760 1153540 1153837 596 932762 933125 1153839 1154202 728 933127 933504 1154204 1154581 756 933506 933899 1154583 1154976 788 934265 934466 1155342 1155543 404 934900 935127 1156016 1156243 456 935833 936177 1156949 1157293 690 936449 937304 1157561 1158416 1712 937477 937691 1158589 1158803 430 937915 939255 1159027 1160367 2682 939544 939872 1160656 1160984 658 940110 940343 1161222 1161455 468 940345 940662 1161457 1161774 636 940818 941235 1161930 1162347 836 941576 941796 1162688 1162908 442 941798 942102 1162910 1163214 610 942182 942703 1163294 1163815 1044 942837 943313 1163949 1164425 954 # chain 271: length 1 score 508 978464 978717 1198106 1198359 508 # chain 272: length 11 score 2731 979620 979833 1199262 1199475 428 979981 980296 1199623 1199938 632 980460 980813 1200102 1200455 708 981037 981299 1200679 1200941 526 981721 982168 1201363 1201810 896 982352 982589 1201994 1202231 476 983103 983419 1202745 1203061 634 983832 984346 1203303 1203817 1030 984627 985057 1204098 1204528 862 985059 985398 1204530 1204869 680 985636 986069 1205107 1205540 868 # chain 273: length 7 score 2886 987711 987927 1207182 1207398 434 987929 988141 1207400 1207612 426 988170 988513 1207641 1207984 688 988675 988984 1208146 1208455 620 989214 989491 1208685 1208962 556 989493 989995 1208964 1209466 1006 990318 990643 1209789 1210114 652 # chain 274: length 1 score 854 993345 993771 1212816 1213242 854 # chain 275: length 1 score 754 996936 997312 1216408 1216784 754 # chain 276: length 2 score 1014 999032 999400 1218503 1218871 738 999491 999719 1218962 1219190 458 # chain 277: length 8 score 1881 1002117 1002693 1221589 1222165 1154 1002826 1003134 1222298 1222606 618 1003382 1003613 1222854 1223085 464 1003817 1004072 1223288 1223543 512 1004749 1005070 1224220 1224541 644 1005285 1005529 1224756 1225000 490 1005582 1005955 1225053 1225426 748 1006031 1006261 1225502 1225732 462 # chain 278: length 2 score 1358 1008824 1009376 1228295 1228847 1106 1009477 1009703 1228948 1229174 454 # chain 279: length 1 score 706 1011376 1011728 1230847 1231199 706 # chain 280: length 26 score 24372 1012105 1012725 1231576 1232196 1242 1013177 1013397 1232648 1232868 442 1013621 1013877 1233092 1233348 514 1013960 1014248 1233431 1233719 578 1014406 1014739 1233877 1234210 668 1014741 1016713 1234212 1236184 3946 1016737 1017056 1236208 1236527 640 1017058 1017762 1236529 1237233 1410 1017764 1018240 1237235 1237711 954 1018242 1018915 1237713 1238386 1348 1018917 1019555 1238388 1239026 1278 1019679 1020273 1239150 1239744 1190 1020275 1020545 1239746 1240016 542 1020547 1021341 1240018 1240812 1590 1021343 1021732 1240814 1241203 780 1021734 1022021 1241205 1241492 576 1022023 1022522 1241494 1241993 1000 1022524 1023481 1241995 1242952 1916 1023483 1023904 1242954 1243375 844 1024077 1024471 1243548 1243942 790 1024473 1024744 1243944 1244215 544 1024767 1025083 1244238 1244554 634 1025085 1025507 1244556 1244978 846 1025655 1025859 1245126 1245330 410 1025861 1026359 1245332 1245830 998 1026361 1027147 1245832 1246618 1574 # chain 281: length 3 score 1410 1031117 1031346 1295831 1296060 460 1031348 1031584 1296062 1296298 474 1031592 1031839 1296306 1296553 496 # chain 282: length 1 score 488 1033953 1034196 1298667 1298910 488 # chain 283: length 2 score 1000 1036286 1036497 1301000 1301211 424 1036499 1036788 1301213 1301502 580 # chain 284: length 1 score 1208 1038009 1038612 1302723 1303326 1208 # chain 285: length 1 score 602 1040143 1040443 1304863 1305163 602 # chain 286: length 1 score 520 1041571 1041830 1306296 1306555 520 # chain 287: length 1 score 472 1042342 1042577 1307067 1307302 472 # chain 288: length 3 score 1630 1043203 1043499 1307928 1308224 594 1043609 1043960 1308334 1308685 704 1043989 1044293 1308714 1309018 610 # chain 289: length 1 score 500 1047786 1048035 1312511 1312760 500 # chain 290: length 1 score 448 1048403 1048626 1313128 1313351 448 # chain 291: length 2 score 1208 1050249 1050533 1314197 1314481 570 1050535 1050855 1314483 1314803 642 # chain 292: length 1 score 426 1051613 1051825 1315560 1315772 426 # chain 293: length 1 score 408 1053310 1053513 1317257 1317460 408 # chain 294: length 1 score 524 1055016 1055277 1318963 1319224 524 # chain 295: length 1 score 414 1055614 1055820 1319561 1319767 414 # chain 296: length 1 score 592 1056041 1056336 1319988 1320283 592 # chain 297: length 3 score 1066 1062010 1062268 1325959 1326217 518 1062270 1062472 1326219 1326421 406 1062766 1063132 1326715 1327081 734 # chain 298: length 1 score 806 1065120 1065522 1329067 1329469 806 # chain 299: length 1 score 416 1066521 1066728 1330468 1330675 416 # chain 300: length 1 score 412 1068256 1068461 1393625 1393830 412 # chain 301: length 1 score 434 1070073 1070289 1395442 1395658 434 # chain 302: length 1 score 546 1073596 1073868 1398965 1399237 546 # chain 303: length 1 score 424 1075019 1075230 1400388 1400599 424 # chain 304: length 1 score 890 1078198 1078642 1403567 1404011 890 # chain 305: length 2 score 2032 1080889 1081661 1408390 1409162 1546 1081663 1081907 1409164 1409408 490 # chain 306: length 1 score 704 1083213 1083564 1410714 1411065 704 # chain 307: length 13 score 15980 1084147 1084615 1411647 1412115 938 1084617 1085220 1412117 1412720 1208 1085337 1086089 1412837 1413589 1506 1086091 1086892 1413591 1414392 1604 1086894 1088334 1414394 1415834 2882 1088336 1088973 1415836 1416473 1276 1088975 1089198 1416475 1416698 448 1089200 1090692 1416700 1418192 2986 1090694 1091324 1418194 1418824 1262 1091338 1091738 1418838 1419238 802 1091740 1092322 1419240 1419822 1166 1092582 1092822 1420082 1420322 482 1093020 1093334 1420520 1420834 630 # chain 308: length 1 score 430 1094725 1094939 1452708 1452922 430 # chain 309: length 1 score 440 1095905 1096124 1453888 1454107 440 # chain 310: length 1 score 490 4505653 4505897 1465417 1465661 490 # chain 311: length 1 score 716 4505889 4506246 1468103 1468460 716 # chain 312: length 1 score 460 4506249 4506478 1479490 1479719 460 # chain 313: length 1 score 588 1097354 1097647 1542356 1542649 588 # chain 314: length 1 score 586 1098625 1098917 1543627 1543919 586 # chain 315: length 2 score 772 1099210 1099412 1544212 1544414 406 1099457 1099684 1544459 1544686 456 # chain 316: length 10 score 2891 1100764 1101034 1545766 1546036 542 1101045 1101339 1546047 1546341 590 1101674 1101989 1546676 1546991 632 1102092 1102363 1547094 1547365 544 1102365 1102618 1547367 1547620 508 1103104 1103471 1548106 1548473 736 1103473 1103754 1548475 1548756 564 1104258 1104697 1549263 1549702 880 1104825 1105118 1549830 1550123 588 1105264 1105635 1550269 1550640 744 # chain 317: length 1 score 580 1107124 1107413 1552129 1552418 580 # chain 318: length 4 score 1586 1108271 1108657 1553275 1553661 774 1108681 1108924 1553685 1553928 488 1109346 1109632 1554350 1554636 574 1109634 1109956 1554638 1554960 646 # chain 319: length 1 score 1050 1113150 1113674 1558154 1558678 1050 # chain 320: length 1 score 1052 1115539 1116064 1560543 1561068 1052 # chain 321: length 6 score 1380 1117589 1117965 1562593 1562969 754 1118292 1118588 1563296 1563592 594 1118709 1118950 1563713 1563954 484 1119159 1119388 1564163 1564392 460 1119723 1119947 1564727 1564951 450 1119949 1120261 1564953 1565265 626 # chain 322: length 7 score 2838 1122359 1122620 1567366 1567627 524 1122622 1123084 1567629 1568091 926 1123086 1123315 1568093 1568322 460 1123562 1123837 1568569 1568844 552 1124397 1124875 1569404 1569882 958 1124877 1125079 1569884 1570086 406 1125081 1125401 1570088 1570408 642 # chain 323: length 5 score 2118 1130129 1130410 1575136 1575417 564 1130432 1130769 1575439 1575776 676 1130915 1131189 1575922 1576196 550 1131307 1131584 1576314 1576591 556 1131710 1132007 1576717 1577014 596 # chain 324: length 5 score 1648 1133931 1134198 1578901 1579168 536 1134305 1134543 1579275 1579513 478 1134765 1135042 1579735 1580012 556 1135209 1135533 1580179 1580503 650 1135535 1135746 1580505 1580716 424 # chain 325: length 1 score 400 1138152 1138351 1583122 1583321 400 # chain 326: length 33 score 11298 1141656 1141899 1586625 1586868 488 1141974 1142422 1586943 1587391 898 1142424 1142719 1587393 1587688 592 1142772 1144076 1587741 1589045 2610 1144231 1144610 1589200 1589579 760 1145893 1146095 1590851 1591053 406 1146097 1146768 1591055 1591726 1344 1147425 1147659 1592383 1592617 470 1147661 1148426 1592619 1593384 1532 1148428 1148768 1593386 1593726 682 1148860 1149134 1593818 1594092 550 1149679 1149887 1594637 1594845 418 1150045 1150495 1595003 1595453 902 1150497 1150934 1595455 1595892 876 1150936 1151627 1595894 1596585 1384 1151758 1152008 1596716 1596966 502 1152010 1152308 1596968 1597266 598 1154189 1154470 1599147 1599428 564 1154963 1155234 1599921 1600192 544 1155446 1155681 1600404 1600639 472 1155893 1156144 1600851 1601102 504 1156829 1157332 1601788 1602291 1008 1157334 1158035 1602293 1602994 1404 1158102 1158403 1603061 1603362 604 1158405 1158624 1603364 1603583 440 1158834 1159823 1603793 1604782 1980 1160058 1160311 1605017 1605270 508 1160313 1160669 1605272 1605628 714 1161060 1161369 1606039 1606348 620 1161617 1162284 1606596 1607263 1336 1162328 1162545 1607307 1607524 436 1162766 1163050 1607745 1608029 570 1163052 1163417 1608031 1608396 732 # chain 327: length 2 score 1100 1181855 1182215 1625567 1625927 722 1182373 1182719 1626085 1626431 694 # chain 328: length 2 score 858 2066961 2067174 1670009 1670222 428 2067176 2067392 1670224 1670440 434 # chain 329: length 4 score 978 1465932 1466145 1670009 1670222 428 1466147 1466363 1670224 1670440 434 1466766 1467012 1670843 1671089 494 1467014 1467231 1671091 1671308 436 # chain 330: length 4 score 976 2994382 2994594 1670010 1670222 426 2994596 2994812 1670224 1670440 434 2995215 2995461 1670843 1671089 494 2995463 2995680 1671091 1671308 436 # chain 331: length 1 score 884 1183589 1184030 1674604 1675045 884 # chain 332: length 1 score 1900 1184592 1185541 1675607 1676556 1900 # chain 333: length 1 score 430 1187317 1187531 1678332 1678546 430 # chain 334: length 2 score 1488 1188196 1188482 1694671 1694957 574 1188520 1189014 1694995 1695489 990 # chain 335: length 6 score 1782 1190190 1190410 1696665 1696885 442 1190490 1190704 1696965 1697179 430 1191000 1191427 1697475 1697902 856 1191581 1191893 1698056 1698368 626 1192367 1192596 1698842 1699071 460 1192607 1193105 1699082 1699580 998 # chain 336: length 1 score 1022 1194097 1194607 1700572 1701082 1022 # chain 337: length 1 score 540 565716 565985 1704987 1705256 540 # chain 338: length 1 score 444 567536 567757 1705546 1705767 444 # chain 339: length 3 score 2328 568108 568821 1706108 1706821 1428 568871 569157 1706871 1707157 574 569159 569373 1707159 1707373 430 # chain 340: length 2 score 1162 578659 578872 1712660 1712873 428 579034 579562 1713035 1713563 1058 # chain 341: length 1 score 624 580371 580682 1714372 1714683 624 # chain 342: length 2 score 1108 581384 581668 1743635 1743919 570 581670 581940 1743921 1744191 542 # chain 343: length 1 score 1286 584218 584860 1749285 1749927 1286 # chain 344: length 6 score 2764 1223501 1223728 1753170 1753397 456 1223730 1224097 1753399 1753766 736 1224276 1224584 1753945 1754253 618 1224724 1224971 1754393 1754640 496 1225028 1225507 1754697 1755176 960 1225637 1225893 1755306 1755562 514 # chain 345: length 2 score 1190 1230079 1230469 1759748 1760138 782 1230471 1230676 1760140 1760345 412 # chain 346: length 4 score 1418 1232248 1232471 1761917 1762140 448 1232606 1232814 1762275 1762483 418 1232921 1233214 1762590 1762883 588 1233216 1233441 1762885 1763110 452 # chain 347: length 1 score 622 1235295 1235605 1764965 1765275 622 # chain 348: length 4 score 2311 1235979 1236510 1765649 1766180 1064 1236747 1237304 1766450 1767007 1116 1237399 1237736 1767102 1767439 676 1237918 1238175 1767621 1767878 516 # chain 349: length 1 score 472 1239867 1240102 1769576 1769811 472 # chain 350: length 1 score 712 1242327 1242682 1772037 1772392 712 # chain 351: length 2 score 1136 1243274 1243615 1774297 1774638 684 1243647 1243904 1774670 1774927 516 # chain 352: length 1 score 712 1244959 1245314 1782097 1782452 712 # chain 353: length 1 score 412 1247120 1247325 1784245 1784450 412 # chain 354: length 1 score 436 1248014 1248231 1785139 1785356 436 # chain 355: length 1 score 1514 1249651 1250407 1786776 1787532 1514 # chain 356: length 1 score 484 1253751 1253992 1787740 1787981 484 # chain 357: length 1 score 430 1254762 1254976 1788751 1788965 430 # chain 358: length 22 score 9410 1255802 1256209 1789866 1790273 816 1256241 1256512 1790305 1790576 544 1256522 1256851 1790586 1790915 660 1257015 1257237 1791079 1791301 446 1257611 1257936 1791675 1792000 652 1257938 1258387 1792002 1792451 900 1258476 1258767 1792540 1792831 584 1259433 1259722 1793497 1793786 580 1259787 1260338 1793851 1794402 1104 1260493 1260912 1794557 1794976 840 1261084 1261616 1795148 1795680 1066 1261948 1262344 1796012 1796408 794 1262346 1262775 1796410 1796839 860 1263548 1264381 1797612 1798445 1668 1264383 1264604 1798447 1798668 444 1264789 1265051 1798853 1799115 526 1265092 1265699 1799156 1799763 1216 1265755 1266058 1799819 1800122 608 1266060 1266295 1800124 1800359 472 1266477 1266715 1800541 1800779 478 1266773 1267176 1800837 1801240 808 1267516 1267889 1801580 1801953 748 # chain 359: length 1 score 838 1288191 1288609 1821948 1822366 838 # chain 360: length 8 score 2405 1289330 1289537 1823087 1823294 416 1289539 1289987 1823296 1823744 898 1290220 1290510 1823977 1824267 582 1290604 1290974 1824361 1824731 742 1291441 1291694 1825198 1825451 508 1291924 1292318 1825681 1826075 790 1292658 1292978 1826414 1826734 642 1292980 1293260 1826736 1827016 562 # chain 361: length 4 score 1824 1295001 1295224 1827756 1827979 448 1295226 1295459 1827981 1828214 468 1295566 1296074 1828321 1828829 1018 1296256 1296491 1829011 1829246 472 # chain 362: length 1 score 542 1300304 1300574 1833060 1833330 542 # chain 363: length 1 score 410 1301774 1301978 1834530 1834734 410 # chain 364: length 2 score 1396 1304012 1304214 1836768 1836970 406 1304216 1304712 1836972 1837468 994 # chain 365: length 12 score 4281 1306115 1306392 1838871 1839148 556 1306394 1306767 1839150 1839523 748 1307080 1307422 1839837 1840179 686 1307526 1307920 1840283 1840677 790 1308592 1308957 1841350 1841715 732 1309002 1309261 1841761 1842020 520 1309694 1309933 1842453 1842692 480 1309959 1310355 1842718 1843114 794 1310357 1310661 1843116 1843420 610 1310861 1311158 1843620 1843917 596 1311220 1311819 1843979 1844578 1200 1311945 1312215 1844704 1844974 542 # chain 366: length 3 score 960 1654122 1654379 2273590 2273847 516 1654543 1654844 2274011 2274312 604 1655023 1655285 2274491 2274753 526 # chain 367: length 2 score 662 1656596 1656807 2276064 2276275 424 1656920 1657151 2276388 2276619 464 # chain 368: length 1 score 598 1657520 1657818 2276988 2277286 598 # chain 369: length 6 score 2062 1658870 1659291 2278338 2278759 844 1659463 1659737 2278931 2279205 550 1659803 1660033 2279271 2279501 462 1660035 1660281 2279503 2279749 494 1660433 1660653 2279901 2280121 442 1661139 1661651 2280607 2281119 1026 # chain 370: length 2 score 1174 1663623 1663962 2283090 2283429 680 1663964 1664212 2283431 2283679 498 # chain 371: length 1 score 1068 1664890 1665423 2284357 2284890 1068 # chain 372: length 4 score 2040 1666224 1666464 2285691 2285931 482 1666466 1666766 2285933 2286233 602 1666768 1667146 2286235 2286613 758 1667359 1667674 2286826 2287141 632 # chain 373: length 2 score 1378 1670319 1670539 2289786 2290006 442 1670541 1671010 2290008 2290477 940 # chain 374: length 1 score 554 1672979 1673255 2292446 2292722 554 # chain 375: length 2 score 774 1674007 1674215 2293474 2293682 418 1674316 1674594 2293783 2294061 558 # chain 376: length 22 score 8609 1674995 1675266 2294462 2294733 544 1675268 1675475 2294735 2294942 416 1675523 1675836 2294990 2295303 628 1675988 1676495 2295455 2295962 1016 1676681 1677165 2296148 2296632 970 1677410 1678123 2296877 2297590 1428 1678591 1678853 2298058 2298320 526 1678873 1679604 2298340 2299071 1464 1679606 1680258 2299073 2299725 1306 1681229 1681488 2300696 2300955 520 1681529 1681825 2300996 2301292 594 1681904 1682202 2301371 2301669 598 1682552 1682772 2302020 2302240 442 1683086 1683345 2302554 2302813 520 1683347 1684023 2302815 2303491 1354 1684690 1684966 2304158 2304434 554 1685041 1685446 2304509 2304914 812 1685588 1686309 2305056 2305777 1444 1686565 1686909 2306033 2306377 690 1686911 1687212 2306379 2306680 604 1687553 1687752 2307021 2307220 400 1687757 1688014 2307225 2307482 516 # chain 377: length 1 score 502 1698776 1699026 2318072 2318322 502 # chain 378: length 1 score 660 1700150 1700479 2319446 2319775 660 # chain 379: length 1 score 460 1701538 1701767 2320836 2321065 460 # chain 380: length 1 score 690 1702836 1703180 2322135 2322479 690 # chain 381: length 2 score 800 1703690 1703890 2322989 2323189 402 1703892 1704092 2323191 2323391 402 # chain 382: length 2 score 1168 1704678 1705054 2323977 2324353 754 1705074 1705300 2324373 2324599 454 # chain 383: length 1 score 524 1706333 1706594 2325632 2325893 524 # chain 384: length 1 score 466 1707144 1707376 2326443 2326675 466 # chain 385: length 9 score 3438 1707660 1707933 2326959 2327232 548 1707935 1708357 2327234 2327656 846 1708359 1708684 2327658 2327983 652 1708950 1709206 2328249 2328505 514 1709208 1709492 2328507 2328791 570 1710050 1710352 2329349 2329651 606 1710738 1711294 2330037 2330593 1114 1711302 1711714 2330601 2331013 826 1712016 1712422 2331315 2331721 814 # chain 386: length 2 score 990 1722052 1722498 2341352 2341798 894 1722659 1722867 2341959 2342167 418 # chain 387: length 1 score 478 1723992 1724230 2343292 2343530 478 # chain 388: length 2 score 686 1725414 1725724 2344714 2345024 622 1725897 1726101 2345197 2345401 410 # chain 389: length 1 score 400 1726742 1726941 2346042 2346241 400 # chain 390: length 1 score 468 1729774 1730007 2349074 2349307 468 # chain 391: length 6 score 1115 1730296 1730513 2349596 2349813 436 1730624 1730872 2349924 2350172 498 1731031 1731245 2350331 2350545 430 1731451 1731651 2350751 2350951 402 1731943 1732266 2351243 2351566 648 1732443 1732738 2351744 2352039 592 # chain 392: length 9 score 4136 1734492 1735508 2353777 2354793 2034 1735510 1735985 2354795 2355270 952 1736821 1737200 2356106 2356485 760 1737301 1737638 2356586 2356923 676 1737679 1738130 2356964 2357415 904 1738573 1738859 2357858 2358144 574 1739051 1739291 2358336 2358576 482 1739293 1739737 2358578 2359022 890 1739937 1740185 2359222 2359470 498 # chain 393: length 1 score 430 1743603 1743817 2362890 2363104 430 # chain 394: length 2 score 1012 1744113 1744317 2363400 2363604 410 1744319 1744621 2363606 2363908 606 # chain 395: length 1 score 434 1745169 1745385 2364456 2364672 434 # chain 396: length 2 score 780 1746131 1746385 2365418 2365672 510 1746573 1746895 2365860 2366182 646 # chain 397: length 1 score 464 1747337 1747568 2366624 2366855 464 # chain 398: length 1 score 458 1748232 1748460 2367519 2367747 458 # chain 399: length 13 score 5353 1748853 1749207 2368140 2368494 710 1749248 1749452 2368535 2368739 410 1749626 1749828 2368913 2369115 406 1750229 1750511 2369516 2369798 566 1750757 1750965 2370044 2370252 418 1751171 1751397 2370458 2370684 454 1751450 1751849 2370737 2371136 800 1752037 1752332 2371324 2371619 592 1752334 1752630 2371621 2371917 594 1752938 1753287 2372226 2372575 700 1753361 1754001 2372649 2373289 1282 1754288 1754853 2373576 2374141 1132 1754978 1755727 2374266 2375015 1500 # chain 400: length 1 score 404 1758817 1759018 2378104 2378305 404 # chain 401: length 5 score 1354 1759643 1760001 2378930 2379288 718 1760024 1760307 2379311 2379594 568 1760888 1761168 2380175 2380455 562 1761426 1761639 2380713 2380926 428 1761758 1762277 2381045 2381564 1040 # chain 402: length 1 score 474 1763063 1763299 2382351 2382587 474 # chain 403: length 3 score 2496 1763817 1764167 2383105 2383455 702 1764169 1764674 2383457 2383962 1012 1764787 1765292 2384075 2384580 1012 # chain 404: length 4 score 3784 1766897 1767545 2386185 2386833 1298 1768193 1768741 2387481 2388029 1098 1769209 1770005 2388497 2389293 1594 1770027 1771061 2389315 2390349 2070 # chain 405: length 1 score 646 1776510 1776832 2395800 2396122 646 # chain 406: length 1 score 778 1777391 1777779 2396686 2397074 778 # chain 407: length 1 score 474 1778340 1778576 2397635 2397871 474 # chain 408: length 1 score 588 1779198 1779491 2398493 2398786 588 # chain 409: length 1 score 494 1779895 1780141 2399190 2399436 494 # chain 410: length 1 score 466 1780820 1781052 2400115 2400347 466 # chain 411: length 2 score 924 1781990 1782237 2401285 2401532 496 1782239 1782454 2401534 2401749 432 # chain 412: length 1 score 514 1783349 1783605 2402644 2402900 514 # chain 413: length 7 score 3822 1784312 1784529 2403607 2403824 436 1784531 1785024 2403826 2404319 988 1785293 1785664 2404588 2404959 744 1785987 1786594 2405282 2405889 1216 1786596 1786808 2405891 2406103 426 1786974 1787396 2406269 2406691 846 1787564 1788076 2406859 2407371 1026 # chain 414: length 1 score 476 1792805 1793042 2412100 2412337 476 # chain 415: length 12 score 5429 1793280 1793651 2412576 2412947 744 1793653 1794317 2412949 2413613 1330 1794961 1795189 2414257 2414485 458 1795191 1795402 2414487 2414698 424 1795903 1796127 2415199 2415423 450 1796193 1796481 2415489 2415777 578 1796483 1796797 2415779 2416093 630 1797149 1797739 2416444 2417034 1182 1797741 1798777 2417036 2418072 2074 1799635 1799909 2418930 2419204 550 1799911 1800548 2419206 2419843 1276 1800565 1800878 2419860 2420173 628 # chain 416: length 9 score 3278 1815933 1816168 2435026 2435261 472 1816170 1816385 2435263 2435478 432 1816567 1816846 2435661 2435940 560 1816883 1817128 2435977 2436222 492 1817130 1817717 2436224 2436811 1176 1818438 1818817 2437532 2437911 760 1819078 1819806 2438172 2438900 1458 1820086 1820289 2439181 2439384 408 1820347 1820650 2439442 2439745 608 # chain 417: length 1 score 484 1825441 1825682 2444536 2444777 484 # chain 418: length 1 score 626 1828148 1828460 2447243 2447555 626 # chain 419: length 1 score 436 1830179 1830396 2449274 2449491 436 # chain 420: length 1 score 648 1831039 1831362 2450134 2450457 648 # chain 421: length 1 score 748 1833600 1833973 2452695 2453068 748 # chain 422: length 1 score 524 1835176 1835437 2454271 2454532 524 # chain 423: length 1 score 624 1837316 1837627 2456411 2456722 624 # chain 424: length 1 score 534 1839377 1839643 2458472 2458738 534 # chain 425: length 4 score 1502 1840093 1840608 2459188 2459703 1032 1840832 1841088 2459927 2460183 514 1841369 1841757 2460464 2460852 778 1842024 1842384 2461119 2461479 722 # chain 426: length 1 score 592 1844112 1844407 2463207 2463502 592 # chain 427: length 1 score 562 1844713 1844993 2463808 2464088 562 # chain 428: length 2 score 860 1845727 1845938 2464822 2465033 424 1845940 1846159 2465035 2465254 440 # chain 429: length 1 score 598 1847856 1848154 2466951 2467249 598 # chain 430: length 1 score 728 1848836 1849199 2468722 2469085 728 # chain 431: length 3 score 1400 1850211 1850541 2470097 2470427 662 1850732 1850934 2470618 2470820 406 1850993 1851408 2470879 2471294 832 # chain 432: length 2 score 1672 1852529 1853020 2473729 2474220 984 1853028 1853379 2474228 2474579 704 # chain 433: length 1 score 584 1854784 1855075 2475969 2476260 584 # chain 434: length 6 score 3104 1856078 1856343 2477263 2477528 532 1856413 1856625 2477598 2477810 426 1856711 1857112 2477896 2478297 804 1857558 1858246 2478743 2479431 1378 1858248 1858551 2479433 2479736 608 1858553 1858836 2479738 2480021 568 # chain 435: length 1 score 554 1863334 1863610 2484522 2484798 554 # chain 436: length 16 score 4544 1863926 1864222 2485114 2485410 594 1864224 1864732 2485412 2485920 1018 1864734 1865340 2485922 2486528 1214 1865342 1865574 2486530 2486762 466 1866380 1866624 2487568 2487812 490 1866680 1866887 2487868 2488075 416 1867227 1867483 2488415 2488671 514 1867593 1867912 2488781 2489100 640 1868545 1868988 2489733 2490176 888 1869317 1869768 2490505 2490956 904 1869885 1870338 2491073 2491526 908 1870392 1870609 2491580 2491797 436 1870868 1871067 2492056 2492255 400 1871297 1871667 2492485 2492855 742 1871669 1872012 2492857 2493200 688 1872212 1872466 2493400 2493654 510 # chain 437: length 1 score 868 1877472 1877905 2498659 2499092 868 # chain 438: length 3 score 1966 1878716 1879194 2499903 2500381 958 1879555 1880176 2500742 2501363 1244 1880178 1880422 2501365 2501609 490 # chain 439: length 4 score 1280 1882198 1882517 2503610 2503929 640 1882790 1883016 2504202 2504428 454 1883198 1883502 2504610 2504914 610 1883504 1883748 2504916 2505160 490 # chain 440: length 1 score 556 1885188 1885465 2506601 2506878 556 # chain 441: length 1 score 422 1885990 1886200 2507403 2507613 422 # chain 442: length 2 score 1172 1887393 1887625 2508806 2509038 466 1887654 1888035 2509067 2509448 764 # chain 443: length 1 score 778 1889085 1889473 2510498 2510886 778 # chain 444: length 2 score 1034 1890096 1890394 2511509 2511807 598 1890396 1890615 2511809 2512028 440 # chain 445: length 3 score 1394 1892049 1892388 2513462 2513801 680 1892542 1892861 2513955 2514274 640 1893008 1893345 2514421 2514758 676 # chain 446: length 33 score 7918 1894688 1895028 2516101 2516441 682 1895030 1895434 2516443 2516847 810 1895450 1895675 2516863 2517088 452 1895677 1896174 2517090 2517587 996 1896582 1896861 2517995 2518274 560 1897197 1897669 2518610 2519082 946 1897725 1898386 2519138 2519799 1324 1898635 1898897 2520048 2520310 526 1898899 1899782 2520312 2521195 1768 1900050 1900363 2521465 2521778 628 1901084 1901334 2522499 2522749 502 1901591 1902258 2523006 2523673 1336 1902260 1903250 2523675 2524665 1982 1903706 1903916 2525122 2525332 422 1904451 1904683 2525867 2526099 466 1905090 1905374 2526506 2526790 570 1905394 1905787 2526810 2527203 788 1906033 1906301 2527448 2527716 538 1906477 1906764 2527892 2528179 576 1907251 1907489 2528668 2528906 478 1907826 1908287 2529243 2529704 924 1909427 1909630 2530844 2531047 408 1909823 1910092 2531240 2531509 540 1910094 1910722 2531511 2532139 1258 1911155 1911438 2532572 2532855 568 1911854 1912301 2533271 2533718 896 1912475 1912707 2533892 2534124 466 1912709 1913020 2534126 2534437 624 1913418 1913755 2534835 2535172 676 1914182 1914433 2535599 2535850 504 1914518 1914724 2535935 2536141 414 1915040 1915634 2536457 2537051 1190 1915716 1915918 2537133 2537335 406 # chain 447: length 1 score 698 1922734 1923082 2544152 2544500 698 # chain 448: length 3 score 1078 1923603 1923893 2545021 2545311 582 1924022 1924222 2545440 2545640 402 1924256 1924465 2545674 2545883 420 # chain 449: length 1 score 508 1925121 1925374 2546539 2546792 508 # chain 450: length 1 score 604 1925790 1926091 2547208 2547509 604 # chain 451: length 40 score 11351 1928392 1928797 2549811 2550216 812 1928836 1929340 2550255 2550759 1010 1929708 1930092 2551127 2551511 770 1930094 1930449 2551513 2551868 712 1930451 1930783 2551870 2552202 666 1931042 1931502 2552461 2552921 922 1931504 1931847 2552923 2553266 688 1931852 1932171 2553271 2553590 640 1932814 1933017 2554233 2554436 408 1933019 1933251 2554438 2554670 466 1933394 1934088 2554813 2555507 1390 1934090 1934303 2555509 2555722 428 1934591 1934791 2556010 2556210 402 1935284 1935483 2556703 2556902 400 1935593 1936007 2557012 2557426 830 1936009 1936520 2557428 2557939 1024 1936878 1937808 2558297 2559227 1862 1937810 1938056 2559229 2559475 494 1938058 1938409 2559477 2559828 704 1938547 1938764 2559966 2560183 436 1939078 1939529 2560497 2560948 904 1939546 1939765 2560965 2561184 440 1939957 1940251 2561376 2561670 590 1940740 1940996 2562159 2562415 514 1942544 1943027 2564062 2564545 968 1943029 1943304 2564547 2564822 552 1943422 1943789 2564940 2565307 736 1943791 1944077 2565309 2565595 574 1944316 1944535 2565834 2566053 440 1944537 1944809 2566055 2566327 546 1945299 1945757 2566817 2567275 918 1946023 1946328 2567541 2567846 612 1946330 1946559 2567848 2568077 460 1946564 1946799 2568082 2568317 472 1946827 1947162 2568345 2568680 672 1948177 1948773 2569695 2570291 1194 1949888 1950127 2571406 2571645 480 1950394 1950831 2571912 2572349 876 1950833 1951383 2572351 2572901 1102 1951403 1952063 2572921 2573581 1322 # chain 452: length 2 score 1320 1972876 1973268 2594395 2594787 786 1973283 1973564 2594802 2595083 564 # chain 453: length 3 score 1354 1975026 1975276 2596545 2596795 502 1975278 1975528 2596797 2597047 502 1975671 1975990 2597190 2597509 640 # chain 454: length 1 score 524 1977699 1977960 2598442 2598703 524 # chain 455: length 2 score 952 1978683 1978945 2599426 2599688 526 1979046 1979359 2599789 2600102 628 # chain 456: length 1 score 458 1980567 1980795 2601310 2601538 458 # chain 457: length 1 score 514 1982052 1982308 2602796 2603052 514 # chain 458: length 2 score 1024 1982625 1982842 2603369 2603586 436 1982844 1983139 2603588 2603883 592 # chain 459: length 3 score 1490 1984651 1985338 2605395 2606082 1376 1985855 1986116 2606600 2606861 524 1986452 1987099 2607196 2607843 1296 # chain 460: length 1 score 462 1989494 1989724 2610238 2610468 462 # chain 461: length 2 score 2010 4505135 4505401 2629690 2629956 534 4505403 4506142 2629958 2630697 1480 # chain 462: length 1 score 428 1989829 1990042 2631693 2631906 428 # chain 463: length 1 score 472 1990043 1990278 2631906 2632141 472 # chain 464: length 1 score 542 1990754 1991024 2632617 2632887 542 # chain 465: length 1 score 514 1991686 1991942 2633549 2633805 514 # chain 466: length 1 score 440 1992676 1992895 2634539 2634758 440 # chain 467: length 4 score 1956 1993250 1993573 2635113 2635436 648 1993733 1993977 2635596 2635840 490 1993979 1994269 2635842 2636132 582 1994271 1994552 2636134 2636415 564 # chain 468: length 5 score 2202 1996761 1997337 2638624 2639200 1154 1997710 1998233 2639573 2640096 1048 1998736 1998953 2640599 2640816 436 1998955 1999175 2640818 2641038 442 1999338 1999939 2641201 2641802 1204 # chain 469: length 1 score 410 2001495 2001699 2643618 2643822 410 # chain 470: length 1 score 622 2002872 2003182 2644986 2645296 622 # chain 471: length 1 score 406 2004044 2004246 2646158 2646360 406 # chain 472: length 1 score 652 2004760 2005085 2646874 2647199 652 # chain 473: length 3 score 2070 2007088 2007366 2649202 2649480 558 2007394 2007805 2649508 2649919 824 2007807 2008180 2649921 2650294 748 # chain 474: length 2 score 1486 2011047 2011524 2655125 2655602 956 2011589 2011918 2655667 2655996 660 # chain 475: length 1 score 422 2014528 2014738 2658668 2658878 422 # chain 476: length 2 score 1338 2013971 2014599 2658049 2658677 1258 2014884 2015239 2659024 2659379 712 # chain 477: length 10 score 6896 2017939 2018353 2662080 2662494 830 2018612 2018943 2662753 2663084 664 2019325 2019661 2663466 2663802 674 2019822 2020218 2663963 2664359 794 2020220 2020530 2664361 2664671 622 2020532 2020953 2664673 2665094 844 2020955 2021623 2665096 2665764 1338 2021625 2021857 2665766 2665998 466 2021859 2022464 2666000 2666605 1212 2022653 2023379 2666794 2667520 1454 # chain 478: length 1 score 634 2033871 2034187 2678006 2678322 634 # chain 479: length 1 score 442 2035344 2035564 2679479 2679699 442 # chain 480: length 1 score 694 2037139 2037485 2681275 2681621 694 # chain 481: length 3 score 758 2039412 2039618 2683547 2683753 414 2039771 2040082 2683906 2684217 624 2040374 2040678 2684509 2684813 610 # chain 482: length 3 score 2586 2041532 2042285 2730847 2731600 1508 2042293 2042551 2731608 2731866 518 2042553 2042842 2731868 2732157 580 # chain 483: length 1 score 442 2045104 2045324 2734419 2734639 442 # chain 484: length 1 score 490 2052078 2052322 2742298 2742542 490 # chain 485: length 1 score 434 2053032 2053248 2743252 2743468 434 # chain 486: length 3 score 1516 2053634 2053854 2743854 2744074 442 2053856 2054088 2744076 2744308 466 2054090 2054397 2744310 2744617 616 # chain 487: length 1 score 408 2056033 2056236 2746250 2746453 408 # chain 488: length 1 score 584 2057287 2057578 2747504 2747795 584 # chain 489: length 1 score 2280 2062915 2064054 2753131 2754270 2280 # chain 490: length 2 score 1435 2065897 2066449 2757364 2757916 1106 2066623 2066961 2758091 2758429 678 # chain 491: length 7 score 2340 2074799 2075316 2761899 2762416 1036 2075456 2075809 2762556 2762909 708 2075811 2076169 2762910 2763268 718 2076404 2076706 2763504 2763806 606 2077254 2077487 2764354 2764587 468 2077678 2077940 2764778 2765040 526 2077969 2078252 2765069 2765352 568 # chain 492: length 1 score 504 2082879 2083130 2769981 2770232 504 # chain 493: length 2 score 1446 2084419 2084738 2771521 2771840 640 2084836 2085336 2771938 2772438 1002 # chain 494: length 2 score 886 2086206 2086438 2773308 2773540 466 2086440 2086651 2773542 2773753 424 # chain 495: length 1 score 434 2091346 2091562 2778006 2778222 434 # chain 496: length 1 score 410 2094483 2094687 2781143 2781347 410 # chain 497: length 1 score 626 2097262 2097574 2783920 2784232 626 # chain 498: length 1 score 438 2113919 2114137 2803895 2804113 438 # chain 499: length 1 score 464 2119227 2119458 2809107 2809338 464 # chain 500: length 2 score 894 2122375 2122654 2812343 2812622 560 2122745 2123002 2812713 2812970 516 # chain 501: length 1 score 416 2126130 2126337 2816098 2816305 416 # chain 502: length 1 score 568 2127587 2127870 2817558 2817841 568 # chain 503: length 1 score 448 2130083 2130306 2820054 2820277 448 # chain 504: length 1 score 516 2131508 2131765 2821479 2821736 516 # chain 505: length 5 score 1745 2133560 2133891 2823531 2823862 664 2133935 2134325 2823906 2824296 782 2134864 2135487 2824835 2825458 1248 2135806 2136050 2825778 2826022 490 2136085 2136302 2826057 2826274 436 # chain 506: length 2 score 1030 2139119 2139375 2829563 2829819 514 2139410 2139702 2829854 2830146 586 # chain 507: length 1 score 458 2141744 2141972 2832191 2832419 458 # chain 508: length 3 score 1412 2143720 2144076 2834167 2834523 714 2144305 2144574 2834752 2835021 540 2144682 2145093 2835121 2835532 824 # chain 509: length 1 score 448 2152874 2153097 2842908 2843131 448 # chain 510: length 1 score 458 2157500 2157728 2847534 2847762 458 # chain 511: length 1 score 430 2159512 2159726 2849546 2849760 430 # chain 512: length 1 score 562 2160915 2161195 2850949 2851229 562 # chain 513: length 1 score 400 2163830 2164029 2853865 2854064 400 # chain 514: length 1 score 502 2164634 2164884 2854669 2854919 502 # chain 515: length 1 score 402 2167991 2168191 2857396 2857596 402 # chain 516: length 1 score 1222 2169513 2170123 2857657 2858267 1222 # chain 517: length 1 score 568 2171771 2172054 2859915 2860198 568 # chain 518: length 1 score 668 2172899 2173232 2861043 2861376 668 # chain 519: length 2 score 964 2173706 2173992 2861850 2862136 574 2174134 2174470 2862278 2862614 674 # chain 520: length 2 score 770 2176255 2176466 2864390 2864601 424 2176519 2176744 2864654 2864879 452 # chain 521: length 2 score 588 2178034 2178238 2866170 2866374 410 2178361 2178572 2866497 2866708 424 # chain 522: length 2 score 580 2179950 2180203 2868086 2868339 508 2180394 2180620 2868530 2868756 454 # chain 523: length 1 score 734 2181635 2182001 2869771 2870137 734 # chain 524: length 2 score 902 2183634 2183837 2873952 2874155 408 2183839 2184087 2874157 2874405 498 # chain 525: length 1 score 482 2184857 2185097 2875201 2875441 482 # chain 526: length 4 score 1864 2191221 2191427 2881566 2881772 414 2191466 2191724 2881811 2882069 518 2192021 2192638 2882366 2882983 1236 2192659 2192863 2883004 2883208 410 # chain 527: length 1 score 468 2194182 2194415 2884527 2884760 468 # chain 528: length 1 score 410 2198233 2198437 2891590 2891794 410 # chain 529: length 1 score 440 2200600 2200819 2893957 2894176 440 # chain 530: length 1 score 412 2201929 2202134 2895284 2895489 412 # chain 531: length 1 score 482 2202523 2202763 2896812 2897052 482 # chain 532: length 1 score 480 2205919 2206158 2900208 2900447 480 # chain 533: length 1 score 524 2208053 2208314 2902342 2902603 524 # chain 534: length 4 score 1706 2209448 2209707 2905053 2905312 520 2209899 2210143 2905506 2905750 490 2210145 2210348 2905752 2905955 408 2210350 2210690 2905957 2906297 682 # chain 535: length 2 score 1582 2212933 2213153 2957456 2957676 442 2213274 2213964 2957797 2958487 1382 # chain 536: length 1 score 454 2218456 2218682 2963020 2963246 454 # chain 537: length 1 score 426 2219935 2220147 2964499 2964711 426 # chain 538: length 1 score 1176 2220987 2221574 2965551 2966138 1176 # chain 539: length 2 score 776 2222369 2222661 2966933 2967225 586 2222834 2223101 2967398 2967665 536 # chain 540: length 1 score 904 2225496 2225947 2970060 2970511 904 # chain 541: length 2 score 914 2226627 2226862 2971192 2971427 472 2226864 2227086 2971429 2971651 446 # chain 542: length 1 score 484 2228571 2228812 2979215 2979456 484 # chain 543: length 11 score 2843 2229200 2229697 2979844 2980341 996 2229855 2230119 2980499 2980763 530 2230121 2230345 2980765 2980989 450 2230830 2231351 2981474 2981995 1044 2231542 2231862 2982186 2982506 642 2232100 2232389 2982744 2983033 580 2233168 2233411 2983812 2984055 488 2233518 2234089 2984162 2984733 1144 2234218 2234614 2984862 2985258 794 2234979 2235319 2985624 2985964 682 2235321 2235523 2985966 2986168 406 # chain 544: length 1 score 604 2237286 2237587 2987931 2988232 604 # chain 545: length 4 score 1716 2238311 2238529 2988956 2989174 438 2238619 2238940 2989264 2989585 644 2239235 2239730 2989880 2990375 992 2239732 2239939 2990377 2990584 416 # chain 546: length 1 score 1218 2241424 2242032 2992069 2992677 1218 # chain 547: length 11 score 7152 2242658 2242988 2993303 2993633 662 2243305 2243526 2993938 2994159 444 2243528 2244242 2994161 2994875 1430 2244244 2244464 2994877 2995097 442 2245425 2245663 2996056 2996294 478 2245849 2246101 2996480 2996732 506 2246572 2247571 2997203 2998202 2000 2247573 2248062 2998204 2998693 980 2248064 2248699 2998695 2999330 1272 2248701 2249569 2999332 3000200 1738 2249571 2250110 3000202 3000741 1080 # chain 548: length 1 score 1070 2256235 2256769 3006815 3007349 1070 # chain 549: length 1 score 480 2259308 2259547 3009889 3010128 480 # chain 550: length 2 score 1274 2259903 2260198 3010484 3010779 592 2260200 2260542 3010781 3011123 686 # chain 551: length 3 score 1376 2261231 2261549 3011812 3012130 638 2261794 2262073 3012375 3012654 560 2262083 2262426 3012664 3013007 688 # chain 552: length 2 score 1202 2263166 2263411 3013747 3013992 492 2263643 2264229 3014224 3014810 1174 # chain 553: length 1 score 560 2265002 2265281 3015583 3015862 560 # chain 554: length 1 score 768 2266560 2266943 3017141 3017524 768 # chain 555: length 1 score 1154 2268043 2268619 3018625 3019201 1154 # chain 556: length 1 score 1060 2269273 2269802 3019856 3020385 1060 # chain 557: length 1 score 592 2272483 2272778 3023066 3023361 592 # chain 558: length 1 score 422 2274347 2274557 3024930 3025140 422 # chain 559: length 1 score 478 2275057 2275295 3025640 3025878 478 # chain 560: length 4 score 2646 2275539 2275809 3026122 3026392 542 2275811 2276060 3026394 3026643 500 2276062 2276278 3026645 3026861 434 2276280 2276870 3026863 3027453 1182 # chain 561: length 2 score 828 2280390 2280642 3030973 3031225 506 2280686 2280890 3031269 3031473 410 # chain 562: length 4 score 1388 2281848 2282052 3032431 3032635 410 2282054 2282528 3032637 3033111 950 2283182 2283584 3033765 3034167 806 2283586 2283854 3034169 3034437 538 # chain 563: length 1 score 424 2284626 2284837 3035207 3035418 424 # chain 564: length 2 score 964 2285076 2285356 3035657 3035937 562 2285358 2285560 3035939 3036141 406 # chain 565: length 1 score 432 2289824 2290039 3039030 3039245 432 # chain 566: length 1 score 428 2290772 2290985 3039978 3040191 428 # chain 567: length 1 score 1144 2291857 2292428 3041063 3041634 1144 # chain 568: length 10 score 3020 2293245 2293458 3042451 3042664 428 2293481 2293703 3042687 3042909 446 2293807 2294108 3043013 3043314 604 2294251 2294644 3043457 3043850 788 2295290 2295646 3044496 3044852 714 2295648 2296086 3044854 3045292 878 2296175 2296494 3045381 3045700 640 2296613 2296935 3045819 3046141 646 2297470 2297887 3046676 3047093 836 2298029 2298351 3047235 3047557 646 # chain 569: length 4 score 2378 2303695 2303957 3052335 3052597 526 2303998 2304404 3052638 3053044 814 2304406 2304957 3053046 3053597 1104 2305313 2305678 3053953 3054318 732 # chain 570: length 1 score 832 2309351 2309766 3057991 3058406 832 # chain 571: length 1 score 636 2310631 2310948 3059271 3059588 636 # chain 572: length 1 score 678 2311323 2311661 3059963 3060301 678 # chain 573: length 2 score 860 2312305 2312510 3060945 3061150 412 2312535 2312783 3061175 3061423 498 # chain 574: length 8 score 2804 2313355 2314407 3061995 3063047 2106 2315236 2315453 3063876 3064093 436 2315698 2315945 3064338 3064585 496 2316067 2316285 3064707 3064925 438 2316379 2316686 3065019 3065326 616 2316688 2316893 3065328 3065533 412 2317120 2317469 3065760 3066109 700 2317561 2317971 3066201 3066611 822 # chain 575: length 2 score 1266 2325693 2326066 3067117 3067490 748 2326080 2326352 3067504 3067776 546 # chain 576: length 1 score 456 2328984 2329211 3070408 3070635 456 # chain 577: length 2 score 778 2329599 2329901 3071023 3071325 606 2330034 2330252 3071458 3071676 438 # chain 578: length 1 score 538 2330740 2331008 3072164 3072432 538 # chain 579: length 3 score 1166 2331328 2331814 3072752 3073238 974 2332288 2332642 3073712 3074066 710 2332644 2332860 3074068 3074284 434 # chain 580: length 1 score 450 2334785 2335009 3076208 3076432 450 # chain 581: length 2 score 874 2336208 2336413 3077631 3077836 412 2336415 2336647 3077838 3078070 466 # chain 582: length 2 score 1058 2337189 2337503 3078612 3078926 630 2337505 2337720 3078928 3079143 432 # chain 583: length 3 score 1500 2338608 2338846 3080044 3080282 478 2339047 2339302 3080483 3080738 512 2339383 2339919 3080819 3081355 1074 # chain 584: length 1 score 842 2341025 2341445 3082461 3082881 842 # chain 585: length 1 score 880 2342842 2343281 3084278 3084717 880 # chain 586: length 1 score 578 2344015 2344303 3085451 3085739 578 # chain 587: length 1 score 474 2348815 2349051 3093840 3094076 474 # chain 588: length 3 score 1196 2350732 2351004 3095757 3096029 546 2351164 2351387 3096189 3096412 448 2351467 2351807 3096492 3096832 682 # chain 589: length 2 score 1778 2354350 2354957 3099375 3099982 1216 2354959 2355241 3099984 3100266 566 # chain 590: length 1 score 516 2357185 2357442 3102038 3102295 516 # chain 591: length 3 score 1808 2357830 2358383 3102683 3103236 1108 2358663 2359031 3103516 3103884 738 2359274 2359777 3104127 3104630 1008 # chain 592: length 2 score 1492 2361150 2361633 3106003 3106486 968 2361635 2361898 3106488 3106751 528 # chain 593: length 11 score 3552 2365050 2365259 3109903 3110112 420 2365300 2365505 3110153 3110358 412 2365729 2366155 3110582 3111008 854 2366694 2366896 3111547 3111749 406 2366898 2367151 3111751 3112004 508 2367195 2367565 3112048 3112418 742 2367738 2367939 3112591 3112792 404 2367941 2368333 3112794 3113186 786 2368581 2369006 3113434 3113859 852 2369104 2369342 3113957 3114195 478 2369344 2369561 3114197 3114414 436 # chain 594: length 1 score 450 2373433 2373657 3118286 3118510 450 # chain 595: length 1 score 592 2374791 2375086 3119644 3119939 592 # chain 596: length 1 score 520 2377211 2377470 3122064 3122323 520 # chain 597: length 1 score 504 2378844 2379095 3123697 3123948 504 # chain 598: length 1 score 466 2379699 2379931 3124552 3124784 466 # chain 599: length 1 score 430 2388716 2388930 3129159 3129373 430 # chain 600: length 1 score 1294 2389160 2389806 3129603 3130249 1294 # chain 601: length 1 score 892 2391447 2391892 3131957 3132402 892 # chain 602: length 1 score 404 2393010 2393211 3133520 3133721 404 # chain 603: length 2 score 1416 2393779 2394028 3134289 3134538 500 2394207 2394843 3134717 3135353 1274 # chain 604: length 1 score 706 2397004 2397356 3137514 3137866 706 # chain 605: length 1 score 492 2398063 2398308 3138573 3138818 492 # chain 606: length 1 score 430 2398727 2398941 3139237 3139451 430 # chain 607: length 1 score 640 2399860 2400179 3140370 3140689 640 # chain 608: length 24 score 9962 2401998 2402382 3142508 3142892 770 2402384 2402883 3142894 3143393 1000 2403015 2403224 3143525 3143734 420 2403226 2403562 3143736 3144072 674 2404124 2404360 3144634 3144870 474 2404362 2404984 3144872 3145494 1246 2405033 2405255 3145543 3145765 446 2405413 2405833 3145923 3146343 842 2405973 2406286 3146483 3146796 628 2407031 2407332 3147541 3147842 604 2407843 2408135 3148353 3148645 586 2408137 2408740 3148647 3149250 1208 2408742 2408978 3149252 3149488 474 2409223 2409580 3149733 3150090 716 2409899 2410124 3150409 3150634 452 2410126 2410474 3150636 3150984 698 2410877 2411974 3151387 3152484 2196 2411990 2412480 3152500 3152990 982 2412572 2413115 3153082 3153625 1088 2413117 2413628 3153627 3154138 1024 2414188 2414453 3154698 3154963 532 2414542 2414910 3155052 3155420 738 2415052 2415297 3155562 3155807 492 2415604 2415923 3156114 3156433 640 # chain 609: length 3 score 2982 2430853 2431216 3171546 3171909 728 2431218 2432122 3171911 3172815 1810 2432480 2433061 3173173 3173754 1164 # chain 610: length 1 score 406 2437238 2437440 3177931 3178133 406 # chain 611: length 3 score 782 2438957 2439180 3179660 3179883 448 2439374 2439708 3180077 3180411 670 2439945 2440207 3180648 3180910 526 # chain 612: length 1 score 436 2442085 2442302 3182788 3183005 436 # chain 613: length 2 score 562 2443422 2443627 3184125 3184330 412 2443784 2444015 3184487 3184718 464 # chain 614: length 1 score 474 2445317 2445553 3186020 3186256 474 # chain 615: length 1 score 678 2446350 2446688 3187053 3187391 678 # chain 616: length 1 score 438 2454776 2454994 3195531 3195749 438 # chain 617: length 1 score 1018 2455788 2456296 3196543 3197051 1018 # chain 618: length 1 score 1278 2458874 2459512 3199628 3200266 1278 # chain 619: length 1 score 406 2460255 2460457 3201009 3201211 406 # chain 620: length 1 score 650 2462902 2463226 3203841 3204165 650 # chain 621: length 1 score 776 2477087 2477474 3219567 3219954 776 # chain 622: length 1 score 744 2478097 2478468 3220577 3220948 744 # chain 623: length 3 score 1364 2478884 2479094 3221364 3221574 422 2479182 2479452 3221662 3221932 542 2479454 2479743 3221934 3222223 580 # chain 624: length 1 score 1594 2481784 2482580 3224264 3225060 1594 # chain 625: length 1 score 424 2485223 2485434 3227703 3227914 424 # chain 626: length 4 score 1344 2487009 2487311 3229485 3229787 606 2487475 2487680 3229951 3230156 412 2487748 2487953 3230224 3230429 412 2488126 2488487 3230602 3230963 724 # chain 627: length 2 score 686 2489509 2489738 3231985 3232214 460 2489857 2490088 3232333 3232564 464 # chain 628: length 1 score 712 2490804 2491159 3233280 3233635 712 # chain 629: length 1 score 482 2491680 2491920 3234156 3234396 482 # chain 630: length 2 score 1180 2493507 2493824 3235984 3236301 636 2494105 2494657 3236582 3237134 1106 # chain 631: length 2 score 1009 2496124 2496336 3238601 3238813 426 2496425 2496805 3238903 3239283 762 # chain 632: length 1 score 530 2498319 2498583 3240797 3241061 530 # chain 633: length 3 score 1552 2499116 2499492 3241594 3241970 754 2499646 2499886 3242124 3242364 482 2499888 2500201 3242366 3242679 628 # chain 634: length 2 score 1442 2501864 2502366 3244342 3244844 1006 2502374 2502599 3244852 3245077 452 # chain 635: length 1 score 428 2504599 2504812 3247077 3247290 428 # chain 636: length 1 score 430 2505039 2505253 3247517 3247731 430 # chain 637: length 1 score 758 2505829 2506207 3248307 3248685 758 # chain 638: length 3 score 2150 2507249 2507950 3249727 3250428 1404 2508288 2508706 3250766 3251184 838 2508708 2509001 3251186 3251479 588 # chain 639: length 2 score 1318 2510142 2510587 3252619 3253064 892 2510589 2510803 3253066 3253280 430 # chain 640: length 1 score 408 2514424 2514627 3255552 3255755 408 # chain 641: length 4 score 3036 2515055 2515911 3256183 3257039 1714 2516170 2516423 3257182 3257435 508 2516425 2516643 3257437 3257655 438 2516645 2517037 3257657 3258049 786 # chain 642: length 15 score 4016 2524775 2525038 3263384 3263647 528 2525040 2525347 3263649 3263956 616 2525376 2525726 3263985 3264335 702 2525728 2526444 3264337 3265053 1434 2526978 2527238 3265587 3265847 522 2527385 2527720 3265994 3266329 672 2528020 2528283 3266629 3266892 528 2529020 2529435 3267629 3268044 832 2529701 2529924 3268310 3268533 448 2530338 2530630 3268947 3269239 586 2531010 2531263 3269619 3269872 508 2531438 2531958 3270047 3270567 1042 2531960 2532332 3270569 3270941 746 2532682 2532887 3271291 3271496 412 2533185 2534040 3271794 3272649 1712 # chain 643: length 3 score 1164 2537775 2538002 3275424 3275651 456 2538067 2538302 3275716 3275951 472 2538403 2538686 3276052 3276335 568 # chain 644: length 1 score 494 2541417 2541663 3279066 3279312 494 # chain 645: length 1 score 712 2542194 2542549 3279697 3280052 712 # chain 646: length 1 score 516 2544569 2544826 3282072 3282329 516 # chain 647: length 1 score 470 2547613 2547847 3284934 3285168 470 # chain 648: length 7 score 2992 2548378 2548736 3285699 3286057 718 2548738 2549045 3286059 3286366 616 2549099 2549312 3286420 3286633 428 2549314 2549839 3286635 3287160 1052 2550023 2550307 3287344 3287628 570 2550593 2550918 3287914 3288239 652 2551130 2551347 3288451 3288668 436 # chain 649: length 1 score 718 2552936 2553294 3290257 3290615 718 # chain 650: length 1 score 664 2554391 2554722 3291712 3292043 664 # chain 651: length 1 score 566 2555321 2555603 3292642 3292924 566 # chain 652: length 1 score 978 2556229 2556717 3293550 3294038 978 # chain 653: length 1 score 402 2563647 2563847 3294178 3294378 402 # chain 654: length 1 score 466 2565243 2565475 3295774 3296006 466 # chain 655: length 2 score 1392 2566632 2567154 3297046 3297568 1046 2567312 2567642 3297726 3298056 662 # chain 656: length 1 score 1108 2568434 2568987 3298848 3299401 1108 # chain 657: length 1 score 584 2570309 2570600 3300723 3301014 584 # chain 658: length 1 score 626 2572119 2572431 3302461 3302773 626 # chain 659: length 1 score 466 2572872 2573104 3303214 3303446 466 # chain 660: length 1 score 610 2574757 2575061 3305099 3305403 610 # chain 661: length 2 score 1188 2576480 2576803 3306822 3307145 648 2576805 2577076 3307147 3307418 544 # chain 662: length 2 score 1052 2579667 2579994 3310009 3310336 656 2580018 2580239 3310360 3310581 444 # chain 663: length 1 score 424 2581680 2581891 3312022 3312233 424 # chain 664: length 2 score 908 2583483 2583691 3313825 3314033 418 2583693 2583939 3314035 3314281 494 # chain 665: length 1 score 574 2584527 2584813 3314869 3315155 574 # chain 666: length 2 score 1630 2585107 2585443 3315449 3315785 674 2585481 2585996 3315823 3316338 1032 # chain 667: length 1 score 1138 2590181 2590749 3320523 3321091 1138 # chain 668: length 2 score 1058 2593465 2593720 3323778 3324033 512 2593778 2594108 3324091 3324421 662 # chain 669: length 8 score 5136 2595210 2595788 3325523 3326101 1158 2595986 2596263 3326299 3326576 556 2596265 2596849 3326578 3327162 1170 2596868 2597151 3327181 3327464 568 2597190 2597545 3327503 3327858 712 2597749 2598076 3328062 3328389 656 2598078 2598313 3328391 3328626 472 2598363 2598798 3328676 3329111 872 # chain 670: length 1 score 666 2601610 2601942 3331923 3332255 666 # chain 671: length 1 score 688 2602617 2602960 3332930 3333273 688 # chain 672: length 2 score 778 2603355 2603608 3333668 3333921 508 2603730 2603986 3334043 3334299 514 # chain 673: length 1 score 472 2604422 2604657 3334735 3334970 472 # chain 674: length 1 score 870 2606436 2606870 3336749 3337183 870 # chain 675: length 1 score 418 2607877 2608085 3338238 3338446 418 # chain 676: length 1 score 466 2608337 2608569 3338698 3338930 466 # chain 677: length 1 score 504 2610006 2610257 3340367 3340618 504 # chain 678: length 1 score 1464 2611902 2612633 3342265 3342996 1464 # chain 679: length 43 score 11028 2613728 2614090 3344091 3344453 726 2614188 2614399 3344551 3344762 424 2614580 2614841 3344943 3345204 524 2615310 2615748 3345673 3346111 878 2615750 2616027 3346113 3346390 556 2616029 2616801 3346392 3347164 1546 2617029 2617312 3347392 3347675 568 2617371 2617651 3347734 3348014 562 2617653 2618471 3348016 3348834 1638 2618650 2618927 3349013 3349290 556 2619068 2619400 3349431 3349763 666 2620295 2620536 3350658 3350899 484 2620903 2621574 3351265 3351936 1344 2621648 2622141 3352010 3352503 988 2622602 2622972 3352964 3353334 742 2622974 2623330 3353336 3353692 714 2623959 2624281 3354321 3354643 646 2624863 2625146 3355225 3355508 568 2625345 2625778 3355707 3356140 868 2625998 2626278 3356360 3356640 562 2626491 2626699 3356853 3357061 418 2626701 2627079 3357063 3357441 758 2627281 2627535 3357643 3357897 510 2627901 2628187 3358263 3358549 574 2628222 2628544 3358584 3358906 646 2629209 2629572 3359571 3359934 728 2629758 2629996 3360120 3360358 478 2630442 2630759 3360804 3361121 636 2630825 2631072 3361187 3361434 496 2631491 2631693 3361853 3362055 406 2631695 2632029 3362057 3362391 670 2633280 2633494 3363642 3363856 430 2634147 2634646 3364508 3365007 1000 2634684 2634898 3365045 3365259 430 2634900 2635635 3365261 3365996 1472 2635637 2635916 3365998 3366277 560 2636072 2636311 3366433 3366672 480 2636313 2637156 3366674 3367517 1688 2637264 2637676 3367625 3368037 826 2638152 2638776 3368513 3369137 1250 2639345 2639640 3369706 3370001 592 2639705 2640279 3370066 3370640 1150 2640598 2641264 3370959 3371625 1334 # chain 680: length 3 score 2216 2646232 2646718 3381424 3381910 974 2646720 2647199 3381912 3382391 960 2647402 2647747 3382594 3382939 692 # chain 681: length 3 score 1756 2649258 2649769 3384450 3384961 1024 2650153 2650613 3385345 3385805 922 2650615 2650905 3385807 3386097 582 # chain 682: length 1 score 610 2653587 2653891 3388463 3388767 610 # chain 683: length 7 score 4388 2654352 2654790 3389228 3389666 878 2654921 2655223 3389797 3390099 606 2655225 2655706 3390101 3390582 964 2655708 2656017 3390584 3390893 620 2656019 2656290 3390895 3391166 544 2656292 2656816 3391168 3391692 1050 2657068 2657321 3391944 3392197 508 # chain 684: length 1 score 448 2661878 2662101 3396600 3396823 448 # chain 685: length 3 score 1942 2662610 2662809 3397332 3397531 400 2662985 2663205 3397707 3397927 442 2663404 2664328 3398126 3399050 1850 # chain 686: length 1 score 1168 2666419 2667002 3401142 3401725 1168 # chain 687: length 1 score 622 2667999 2668309 3402722 3403032 622 # chain 688: length 1 score 590 2669071 2669365 3403794 3404088 590 # chain 689: length 1 score 742 2672157 2672527 3406880 3407250 742 # chain 690: length 1 score 574 2673299 2673585 3408022 3408308 574 # chain 691: length 1 score 420 2674570 2674779 3409293 3409502 420 # chain 692: length 1 score 878 2676306 2676744 3411029 3411467 878 # chain 693: length 1 score 718 2680540 2680898 3415263 3415621 718 # chain 694: length 4 score 2700 2683102 2683328 3417690 3417916 454 2683330 2684113 3417918 3418701 1568 2684451 2684963 3419039 3419551 1026 2685044 2685290 3419632 3419878 494 # chain 695: length 1 score 410 2691024 2691228 3425630 3425834 410 # chain 696: length 1 score 556 2691698 2691975 3426304 3426581 556 # chain 697: length 7 score 3851 2692586 2692875 3427192 3427481 580 2693026 2693277 3427632 3427883 504 2693279 2693603 3427885 3428209 650 2693778 2693983 3428383 3428588 412 2694111 2694508 3428716 3429113 796 2694510 2694993 3429115 3429598 968 2695122 2695678 3429727 3430283 1114 # chain 698: length 1 score 724 2699800 2700161 3434407 3434768 724 # chain 699: length 2 score 1168 2700600 2700917 3435207 3435524 636 2700919 2701186 3435526 3435793 536 # chain 700: length 2 score 928 2702463 2702896 3437071 3437504 868 2703201 2703535 3437809 3438143 670 # chain 701: length 6 score 5044 2704116 2704639 3438724 3439247 1048 2704821 2705454 3439429 3440062 1268 2705750 2706257 3440358 3440865 1016 2706433 2706921 3441041 3441529 978 2707175 2708347 3441771 3442943 2346 2708499 2708746 3443095 3443342 496 # chain 702: length 1 score 464 2714377 2714608 3448797 3449028 464 # chain 703: length 1 score 620 2715041 2715350 3449461 3449770 620 # chain 704: length 4 score 3022 2716207 2716714 3450627 3451134 1016 2716916 2717459 3451336 3451879 1088 2717578 2717837 3451998 3452257 520 2717875 2718432 3452295 3452852 1116 # chain 705: length 1 score 558 2720685 2720963 3455105 3455383 558 # chain 706: length 2 score 737 3421504 3421711 3458707 3458914 416 3421879 3422207 3459083 3459411 658 # chain 707: length 9 score 4206 2721943 2722325 3456363 3456745 766 2722364 2722648 3456784 3457068 570 2722719 2722976 3457139 3457396 516 2722978 2723197 3457398 3457617 440 2723512 2723820 3457932 3458240 618 2724288 2724992 3458707 3459411 1410 2725002 2725338 3459421 3459757 674 2725518 2725859 3459938 3460279 684 2726034 2726557 3460454 3460977 1048 # chain 708: length 2 score 1382 3422734 3423075 3459938 3460279 684 3423250 3423773 3460454 3460977 1048 # chain 709: length 2 score 1161 3424978 3425360 3462102 3462484 766 3425398 3425633 3462523 3462758 472 # chain 710: length 25 score 7108 2729938 2730256 3464290 3464608 638 2730258 2730709 3464610 3465061 904 2730715 2730941 3465067 3465293 454 2730943 2731223 3465295 3465575 562 2731369 2732126 3465721 3466478 1516 2732128 2732474 3466480 3466826 694 2733900 2734427 3468252 3468779 1056 2734630 2734983 3468982 3469335 708 2735104 2735627 3469456 3469979 1048 2735929 2736218 3470281 3470570 580 2736892 2737170 3471244 3471522 558 2737943 2738473 3472295 3472825 1062 2738616 2738989 3472968 3473341 748 2739487 2739726 3473839 3474078 480 2740107 2740530 3474459 3474882 848 2740532 2740751 3474884 3475103 440 2741872 2742117 3476224 3476469 492 2742144 2743097 3476497 3477450 1908 2743240 2743532 3477593 3477885 586 2743627 2744287 3477980 3478640 1322 2744484 2744755 3478725 3478996 544 2744814 2745301 3479055 3479542 976 2745687 2746250 3479928 3480491 1128 2746252 2746651 3480493 3480892 800 2746790 2747112 3481032 3481354 646 # chain 711: length 1 score 1500 1467373 1468122 3500250 3500999 1500 # chain 712: length 1 score 1400 269818 270517 3500250 3500949 1400 # chain 713: length 1 score 526 2778708 2778970 3512565 3512827 526 # chain 714: length 1 score 1386 2779235 2779927 3513092 3513784 1386 # chain 715: length 2 score 1067 2780718 2781019 3514575 3514876 604 2781027 2781266 3514885 3515124 480 # chain 716: length 1 score 766 2788875 2789257 3522735 3523117 766 # chain 717: length 1 score 400 2792327 2792526 3526187 3526386 400 # chain 718: length 2 score 1758 2793676 2794100 3527536 3527960 850 2794102 2794557 3527962 3528417 912 # chain 719: length 1 score 576 2796262 2796549 3530122 3530409 576 # chain 720: length 2 score 2760 2797007 2797371 3530866 3531230 730 2797373 2798389 3531232 3532248 2034 # chain 721: length 5 score 2284 2800013 2800498 3535836 3536321 972 2800607 2800878 3536430 3536701 544 2801135 2801361 3536958 3537184 454 2801453 2801751 3537276 3537574 598 2801948 2802460 3537771 3538283 1026 # chain 722: length 2 score 1100 2804112 2804406 3539937 3540231 590 2804534 2804916 3540359 3540741 766 # chain 723: length 1 score 428 2805471 2805684 3541295 3541508 428 # chain 724: length 6 score 2368 2807358 2807725 3543189 3543556 736 2808012 2808214 3543843 3544045 406 2808405 2808652 3544236 3544483 496 2808654 2808877 3544485 3544708 448 2808895 2809235 3544726 3545066 682 2809368 2809798 3545199 3545629 862 # chain 725: length 2 score 921 2812447 2812857 3548278 3548688 822 2813196 2813583 3549026 3549413 776 # chain 726: length 1 score 646 2814300 2814622 3550130 3550452 646 # chain 727: length 2 score 1204 2816865 2817266 3552466 3552867 804 2817268 2817469 3552869 3553070 404 # chain 728: length 5 score 2880 2818753 2819245 3554355 3554847 986 2819449 2820142 3555051 3555744 1388 2820273 2820646 3555874 3556247 748 2820875 2821089 3556475 3556689 430 2821091 2821319 3556691 3556919 458 # chain 729: length 1 score 426 2825702 2825914 3561302 3561514 426 # chain 730: length 1 score 498 2826840 2827088 3562441 3562689 498 # chain 731: length 1 score 966 2828502 2828984 3564104 3564586 966 # chain 732: length 1 score 508 2830753 2831006 3566355 3566608 508 # chain 733: length 1 score 464 2831645 2831876 3567043 3567274 464 # chain 734: length 2 score 942 2833063 2833293 3568461 3568691 462 2833295 2833536 3568693 3568934 484 # chain 735: length 1 score 434 2837117 2837333 3572515 3572731 434 # chain 736: length 1 score 522 2838683 2838943 3574081 3574341 522 # chain 737: length 1 score 598 2841331 2841629 3576694 3576992 598 # chain 738: length 6 score 3056 2846859 2847158 3582222 3582521 600 2847181 2847469 3582544 3582832 578 2847831 2848268 3583194 3583631 876 2848270 2848523 3583633 3583886 508 2848606 2848961 3583969 3584324 712 2848963 2849325 3584326 3584688 726 # chain 739: length 2 score 1136 2850926 2851128 3586289 3586491 406 2851139 2851514 3586502 3586877 752 # chain 740: length 1 score 564 2852110 2852391 3587473 3587754 564 # chain 741: length 1 score 604 2853320 2853621 3588683 3588984 604 # chain 742: length 3 score 1194 2854529 2854828 3589892 3590191 600 2854893 2855169 3590256 3590532 554 2855604 2856123 3590967 3591486 1040 # chain 743: length 1 score 426 2858192 2858404 3593555 3593767 426 # chain 744: length 14 score 4392 2864535 2864754 3596737 3596956 440 2864756 2865030 3596958 3597232 550 2865209 2865476 3597411 3597678 536 2865518 2865734 3597720 3597936 434 2865880 2866286 3598082 3598488 814 2866387 2866634 3598589 3598836 496 2866834 2867202 3599036 3599404 738 2867396 2867672 3599598 3599874 554 2867821 2868369 3600023 3600571 1098 2869103 2869391 3601305 3601593 578 2869393 2869625 3601595 3601827 466 2870387 2871022 3602589 3603224 1272 2871160 2871582 3603362 3603784 846 2871584 2872019 3603786 3604221 872 # chain 745: length 2 score 945 2885970 2886255 3617768 3618053 572 2886425 2886780 3618222 3618577 712 # chain 746: length 1 score 462 2888055 2888285 3619852 3620082 462 # chain 747: length 2 score 520 2889793 2890003 3621590 3621800 422 2890189 2890423 3621986 3622220 470 # chain 748: length 1 score 420 2891093 2891302 3622890 3623099 420 # chain 749: length 1 score 430 2897135 2897349 3628932 3629146 430 # chain 750: length 1 score 652 2898460 2898785 3630257 3630582 652 # chain 751: length 1 score 568 2901458 2901741 3633255 3633538 568 # chain 752: length 55 score 9153 2905237 2905527 3639316 3639606 582 2905547 2906034 3639626 3640113 976 2906036 2906652 3640115 3640731 1234 2907449 2907730 3641528 3641809 564 2907732 2908070 3641811 3642149 678 2908102 2908400 3642181 3642479 598 2909036 2909377 3643115 3643456 684 2909379 2909656 3643458 3643735 556 2909940 2910304 3644019 3644383 730 2910480 2910805 3644559 3644884 652 2911431 2912027 3645510 3646106 1194 2912225 2912484 3646304 3646563 520 2912855 2913562 3646934 3647641 1416 2914017 2914240 3648096 3648319 448 2914296 2914654 3648375 3648733 718 2914689 2914992 3648768 3649071 608 2914998 2915242 3649077 3649321 490 2915451 2915695 3649530 3649774 490 2916062 2916284 3650142 3650364 446 2917494 2917747 3651574 3651827 508 2918793 2919026 3652873 3653106 468 2919553 2919764 3653633 3653844 424 2920078 2920674 3654158 3654754 1194 2921222 2921733 3655302 3655813 1024 2921946 2922205 3656026 3656285 520 2922916 2923166 3656996 3657246 502 2923198 2923523 3657278 3657603 652 2923525 2923743 3657605 3657823 438 2924110 2924627 3658190 3658707 1036 2924815 2925035 3658895 3659115 442 2925490 2925698 3659570 3659778 418 2925838 2926075 3659918 3660155 476 2926077 2926503 3660157 3660583 854 2926820 2927055 3660900 3661135 472 2927387 2927763 3661467 3661843 754 2928017 2928240 3662097 3662320 448 2928674 2928974 3662754 3663054 602 2929226 2929836 3663306 3663916 1222 2929908 2930197 3663988 3664277 580 2930268 2930563 3664348 3664643 592 2930667 2931073 3664747 3665153 814 2931075 2931390 3665155 3665470 632 2931492 2931842 3665572 3665922 702 2932194 2932425 3666274 3666505 464 2932745 2933043 3666825 3667123 598 2933611 2933834 3667691 3667914 448 2934358 2934848 3668438 3668928 982 2934850 2935109 3668930 3669189 520 2935111 2935418 3669191 3669498 616 2935564 2935784 3669644 3669864 442 2935786 2936405 3669866 3670485 1240 2936506 2936742 3670586 3670822 474 2936859 2937093 3670939 3671173 470 2937131 2937948 3671211 3672028 1636 2938372 2938889 3672452 3672969 1036 # chain 753: length 1 score 634 2952130 2952446 3686210 3686526 634 # chain 754: length 2 score 1240 2952793 2953194 3686873 3687274 804 2953196 2953415 3687276 3687495 440 # chain 755: length 3 score 1142 2954286 2954592 3688366 3688672 614 2954594 2954832 3688674 3688912 478 2955038 2955270 3689118 3689350 466 # chain 756: length 1 score 454 2956154 2956380 3690234 3690460 454 # chain 757: length 1 score 444 2956706 2956927 3690786 3691007 444 # chain 758: length 1 score 552 2958659 2958934 3692739 3693014 552 # chain 759: length 1 score 442 2960256 2960476 3694336 3694556 442 # chain 760: length 1 score 588 2962083 2962376 3696163 3696456 588 # chain 761: length 1 score 592 2963061 2963356 3697141 3697436 592 # chain 762: length 21 score 5108 2963712 2964359 3697792 3698439 1296 2964361 2964757 3698441 3698837 794 2965038 2965297 3699118 3699377 520 2965650 2965915 3699730 3699995 532 2966001 2966248 3700081 3700328 496 2966250 2967090 3700330 3701170 1682 2967289 2967597 3701369 3701677 618 2967998 2968278 3702078 3702358 562 2969272 2969497 3703352 3703577 452 2969542 2969976 3703622 3704056 870 2970125 2970476 3704205 3704556 704 2970478 2970737 3704558 3704817 520 2971120 2971391 3705200 3705471 544 2971483 2971894 3705563 3705974 824 2972012 2972379 3706092 3706459 736 2972936 2973168 3707016 3707248 466 2973973 2974332 3708053 3708412 720 2974589 2974891 3708671 3708973 606 2975121 2975848 3709203 3709930 1456 2976234 2976541 3710316 3710623 616 2976543 2976934 3710625 3711016 784 # chain 763: length 1 score 596 2982386 2982683 3716468 3716765 596 # chain 764: length 3 score 1616 2983764 2984022 3717846 3718104 518 2984063 2984382 3718145 3718464 640 2984384 2984655 3718466 3718737 544 # chain 765: length 1 score 452 2985678 2985903 3719760 3719985 452 # chain 766: length 2 score 936 2987686 2987900 3721769 3721983 430 2987937 2988226 3722020 3722309 580 # chain 767: length 1 score 584 2990962 2991253 3725284 3725575 584 # chain 768: length 2 score 1096 2993831 2994088 3728158 3728415 516 2994090 2994381 3728417 3728708 584 # chain 769: length 1 score 582 2995755 2996045 3745699 3745989 582 # chain 770: length 1 score 878 2996478 2996916 3746417 3746855 878 # chain 771: length 1 score 438 2998837 2999055 3748856 3749074 438 # chain 772: length 1 score 430 2999656 2999870 3749675 3749889 430 # chain 773: length 3 score 1484 3000361 3000871 3750380 3750890 1022 3001232 3001571 3751251 3751590 680 3001673 3002026 3751692 3752045 708 # chain 774: length 1 score 610 3005398 3005702 3755418 3755722 610 # chain 775: length 10 score 3552 3006022 3006285 3756042 3756305 528 3006287 3006638 3756307 3756658 704 3006640 3006902 3756660 3756922 526 3007576 3007988 3757596 3758008 826 3007993 3008448 3758013 3758468 912 3008562 3008883 3758582 3758903 644 3009212 3009539 3759232 3759559 656 3010057 3010391 3760077 3760411 670 3010599 3011015 3760439 3760855 834 3011226 3011824 3761066 3761664 1198 # chain 776: length 1 score 514 3023592 3023848 3773433 3773689 514 # chain 777: length 12 score 3029 3024824 3025117 3774665 3774958 588 3025119 3025385 3774960 3775226 534 3025387 3025675 3775228 3775516 578 3025911 3026158 3775753 3776000 496 3026205 3026545 3776047 3776387 682 3026973 3027273 3776815 3777115 602 3027539 3028017 3777381 3777859 958 3028526 3028804 3778368 3778646 558 3029244 3029744 3779086 3779586 1002 3029796 3030092 3779638 3779934 594 3030604 3030868 3780446 3780710 530 3030870 3031319 3780712 3781161 900 # chain 778: length 1 score 424 3036792 3037003 3786633 3786844 424 # chain 779: length 1 score 902 3037599 3038049 3787440 3787890 902 # chain 780: length 5 score 1644 3040459 3040735 3790181 3790457 554 3040791 3041035 3790513 3790757 490 3041133 3041336 3790855 3791058 408 3041443 3041752 3791165 3791474 620 3042030 3042354 3791752 3792076 650 # chain 781: length 1 score 464 3045415 3045646 3794236 3794467 464 # chain 782: length 1 score 624 3047381 3047692 3796201 3796512 624 # chain 783: length 2 score 1228 3048253 3048570 3797073 3797390 636 3048572 3048869 3797392 3797689 596 # chain 784: length 1 score 418 3051344 3051552 3800165 3800373 418 # chain 785: length 5 score 2428 3052159 3052440 3800980 3801261 564 3052674 3053112 3801495 3801933 878 3053387 3053839 3802208 3802660 906 3053841 3054360 3802662 3803181 1040 3054575 3054820 3803396 3803641 492 # chain 786: length 13 score 5610 3055879 3056177 3805093 3805391 598 3056206 3056447 3805420 3805661 484 3056621 3056852 3805834 3806065 464 3056911 3057456 3806124 3806669 1092 3057700 3058064 3806868 3807232 730 3058180 3058454 3807348 3807622 550 3058950 3059224 3808118 3808392 550 3059475 3060477 3808643 3809645 2006 3061062 3062175 3810230 3811343 2228 3062510 3062721 3811678 3811889 424 3063007 3063221 3812175 3812389 430 3063280 3063649 3812448 3812817 740 3063651 3063920 3812819 3813088 540 # chain 787: length 7 score 2253 3073825 3074209 3826128 3826512 770 3074211 3074467 3826514 3826770 514 3074675 3075016 3826978 3827319 684 3075018 3075219 3827321 3827522 404 3075627 3075887 3827931 3828191 522 3076093 3076307 3828397 3828611 430 3076675 3077333 3828979 3829637 1318 # chain 788: length 3 score 1610 3079514 3079872 3831818 3832176 718 3079982 3080259 3832286 3832563 556 3080471 3080960 3832775 3833264 980 # chain 789: length 1 score 446 3082615 3082837 3835794 3836016 446 # chain 790: length 6 score 2970 3083760 3084104 3836939 3837283 690 3084106 3084555 3837285 3837734 900 3084557 3084791 3837736 3837970 470 3084793 3084995 3837972 3838174 406 3084997 3085235 3838176 3838414 478 3085432 3085649 3838611 3838828 436 # chain 791: length 1 score 446 3088324 3088546 3841516 3841738 446 # chain 792: length 4 score 1960 3089701 3089960 3842893 3843152 520 3090100 3090440 3843292 3843632 682 3090550 3090840 3843742 3844032 582 3090842 3091181 3844034 3844373 680 # chain 793: length 2 score 1362 3093004 3093438 3846207 3846641 870 3093603 3094013 3846806 3847216 822 # chain 794: length 1 score 474 3096735 3096971 3850026 3850262 474 # chain 795: length 6 score 3127 3098602 3099146 3851893 3852437 1090 3099400 3099657 3852691 3852948 516 3099873 3100304 3853165 3853596 864 3100306 3100536 3853598 3853828 462 3100613 3100873 3853905 3854165 522 3100875 3101262 3854167 3854554 776 # chain 796: length 1 score 538 3102828 3103096 3856120 3856388 538 # chain 797: length 5 score 1926 3104010 3104371 3857302 3857663 724 3104373 3104650 3857665 3857942 556 3105070 3105450 3858362 3858742 762 3105587 3105795 3858879 3859087 418 3105926 3106348 3859218 3859640 846 # chain 798: length 1 score 574 3107815 3108101 3861108 3861394 574 # chain 799: length 1 score 974 3136370 3136856 3888426 3888912 974 # chain 800: length 4 score 858 3138726 3138940 3890782 3890996 430 3139130 3139374 3891186 3891430 490 3139601 3139866 3891657 3891922 532 3139964 3140181 3892020 3892237 436 # chain 801: length 10 score 5188 3140690 3141215 3892746 3893271 1052 3141217 3141434 3893273 3893490 436 3141757 3141962 3893813 3894018 412 3141964 3142233 3894020 3894289 540 3142235 3142542 3894291 3894598 616 3142973 3143239 3895029 3895295 534 3143404 3143749 3895460 3895805 692 3143751 3144101 3895807 3896157 702 3144103 3144774 3896159 3896830 1344 3144779 3145142 3896835 3897198 728 # chain 802: length 2 score 738 3149634 3149851 3901693 3901910 436 3149949 3150197 3902008 3902256 498 # chain 803: length 1 score 604 3150769 3151070 3902828 3903129 604 # chain 804: length 3 score 1205 3151429 3151741 3903488 3903800 626 3151748 3152031 3903807 3904090 568 3152247 3152475 3904307 3904535 458 # chain 805: length 1 score 758 3153099 3153477 3905159 3905537 758 # chain 806: length 1 score 418 3154115 3154323 3906175 3906383 418 # chain 807: length 1 score 1072 3154885 3155420 3906945 3907480 1072 # chain 808: length 1 score 494 3155961 3156207 3908018 3908264 494 # chain 809: length 3 score 1174 3158209 3158522 3910262 3910575 628 3158683 3158888 3910736 3910941 412 3158947 3159233 3911000 3911286 574 # chain 810: length 2 score 1238 3159946 3160291 3911999 3912344 692 3160293 3160567 3912346 3912620 550 # chain 811: length 8 score 4242 3161369 3161848 3913422 3913901 960 3162085 3162284 3914138 3914337 400 3162322 3162671 3914375 3914724 700 3162673 3162950 3914726 3915003 556 3163102 3163582 3915155 3915635 962 3163717 3164081 3915770 3916134 730 3164320 3164886 3916373 3916939 1134 3164994 3165304 3917047 3917357 622 # chain 812: length 1 score 474 3171648 3171884 3929445 3929681 474 # chain 813: length 5 score 2670 3173031 3173423 3930828 3931220 786 3173425 3173841 3931222 3931638 834 3173843 3174134 3931640 3931931 584 3174940 3175571 3932737 3933368 1264 3175780 3176399 3933577 3934196 1240 # chain 814: length 4 score 1880 3177742 3178153 3935539 3935950 824 3178395 3178722 3936192 3936519 656 3178763 3178995 3936560 3936792 466 3179171 3179596 3936968 3937393 852 # chain 815: length 1 score 1378 3182294 3182982 3940091 3940779 1378 # chain 816: length 1 score 426 3189914 3190126 3941146 3941358 426 # chain 817: length 1 score 670 3191023 3191357 3942255 3942589 670 # chain 818: length 3 score 1400 3193642 3194308 3945248 3945914 1334 3194640 3194932 3946246 3946538 586 3195231 3195601 3946837 3947207 742 # chain 819: length 1 score 662 3196380 3196710 3947986 3948316 662 # chain 820: length 6 score 2084 3197240 3197516 3948846 3949122 554 3197518 3197720 3949124 3949326 406 3197829 3198119 3949435 3949725 582 3198565 3198932 3950171 3950538 736 3198983 3199325 3950589 3950931 686 3199381 3199604 3950987 3951210 448 # chain 821: length 2 score 1134 3203844 3204146 3955452 3955754 606 3204148 3204413 3955756 3956021 532 # chain 822: length 2 score 804 3206894 3207129 3958503 3958738 472 3207164 3207364 3958773 3958973 402 # chain 823: length 4 score 3332 3208065 3208985 3959674 3960594 1842 3209410 3209690 3961019 3961299 562 3209935 3210217 3961544 3961826 566 3210362 3211357 3961971 3962966 1992 # chain 824: length 3 score 1390 3216091 3216301 3967700 3967910 422 3216321 3216588 3967930 3968197 536 3216590 3216827 3968199 3968436 476 # chain 825: length 5 score 1708 3218904 3219257 3970513 3970866 708 3219430 3219860 3971039 3971469 862 3220178 3220382 3971787 3971991 410 3220699 3221095 3972308 3972704 794 3221098 3221375 3972707 3972984 556 # chain 826: length 2 score 962 3223413 3223624 3975022 3975233 424 3223767 3224178 3975376 3975787 824 # chain 827: length 2 score 678 3224945 3225207 3976554 3976816 526 3225341 3225550 3976950 3977159 420 # chain 828: length 2 score 636 3231339 3231637 3982948 3983246 598 3231818 3232017 3983427 3983626 400 # chain 829: length 1 score 424 3232665 3232876 3984274 3984485 424 # chain 830: length 2 score 1454 3233117 3233332 3984726 3984941 432 3233357 3233892 3984966 3985501 1072 # chain 831: length 1 score 484 3236878 3237119 3988487 3988728 484 # chain 832: length 1 score 840 3237429 3237848 3989040 3989459 840 # chain 833: length 1 score 634 3239079 3239395 3990690 3991006 634 # chain 834: length 1 score 1090 3239947 3240491 3991558 3992102 1090 # chain 835: length 8 score 3793 3241718 3242053 3993329 3993664 672 3242055 3242325 3993666 3993936 542 3242588 3243275 3994200 3994887 1376 3243502 3243917 3995114 3995529 832 3244186 3244391 3995798 3996003 412 3245094 3246040 3996706 3997652 1894 3246042 3246313 3997654 3997925 544 3246641 3247195 3998253 3998807 1110 # chain 836: length 1 score 456 3255615 3255842 4007221 4007448 456 # chain 837: length 1 score 442 3256405 3256625 4008011 4008231 442 # chain 838: length 1 score 984 3256891 3257382 4008498 4008989 984 # chain 839: length 1 score 448 3259241 3259464 4010849 4011072 448 # chain 840: length 2 score 846 3260420 3260640 4012028 4012248 442 3260751 3261063 4012359 4012671 626 # chain 841: length 16 score 5824 3261585 3261826 4013193 4013434 484 3261954 3262468 4013562 4014076 1030 3262470 3263170 4014078 4014778 1402 3263460 3263949 4015068 4015557 980 3263951 3264240 4015559 4015848 580 3264266 3264489 4015874 4016097 448 3264527 3264807 4016135 4016415 562 3264849 3265062 4016457 4016670 428 3265251 3265513 4016859 4017121 526 3266461 3266670 4018069 4018278 420 3267784 3268504 4018998 4019718 1442 3268674 3269035 4019888 4020249 724 3269292 3269587 4020506 4020801 592 3269589 3269983 4020803 4021197 790 3269985 3270250 4021199 4021464 532 3270252 3270708 4021466 4021922 914 # chain 842: length 1 score 404 3279503 3279704 4033022 4033223 404 # chain 843: length 2 score 588 3280091 3280307 4033610 4033826 434 3280515 3280799 4034034 4034318 570 # chain 844: length 1 score 430 3281503 3281717 4035022 4035236 430 # chain 845: length 4 score 1214 3282107 3282345 4035626 4035864 478 3282376 3282608 4035895 4036127 466 3282964 3283206 4036483 4036725 486 3283283 3283638 4036802 4037157 712 # chain 846: length 1 score 500 3286661 3286910 4040180 4040429 500 # chain 847: length 4 score 1104 3287555 3287899 4041074 4041418 690 3288084 3288288 4041603 4041807 410 3288551 3288909 4042070 4042428 718 3289062 3289305 4042581 4042824 488 # chain 848: length 6 score 3238 3289655 3289855 4044132 4044332 402 3289877 3290113 4044354 4044590 474 3290115 3290582 4044592 4045059 936 3290755 3291112 4045232 4045589 716 3291114 3291324 4045591 4045801 422 3291448 3291914 4045925 4046391 934 # chain 849: length 1 score 534 3294415 3294681 4048892 4049158 534 # chain 850: length 1 score 438 3295677 3295895 4050154 4050372 438 # chain 851: length 1 score 808 3296398 3296801 4050875 4051278 808 # chain 852: length 1 score 400 3297543 3297742 4052020 4052219 400 # chain 853: length 2 score 1652 3298340 3298676 4052817 4053153 674 3298774 3299360 4053251 4053837 1174 # chain 854: length 2 score 986 3300663 3300927 4055140 4055404 530 3300929 3301158 4055406 4055635 460 # chain 855: length 1 score 444 3302463 3302684 4056939 4057160 444 # chain 856: length 1 score 1022 3302991 3303501 4057467 4057977 1022 # chain 857: length 2 score 3002 3305400 3306657 4059876 4061133 2516 3306659 3306903 4061135 4061379 490 # chain 858: length 2 score 876 3311453 3311752 4065930 4066229 600 3311877 3312139 4066354 4066616 526 # chain 859: length 7 score 4402 3313095 3314016 4067572 4068493 1844 3314043 3314317 4068520 4068794 550 3314619 3314848 4069096 4069325 460 3314994 3315210 4069471 4069687 434 3315237 3315882 4069714 4070359 1292 3316069 3316332 4070546 4070809 528 3316334 3316671 4070811 4071148 676 # chain 860: length 1 score 556 3320704 3320981 4075181 4075458 556 # chain 861: length 39 score 11929 3321517 3321738 4075994 4076215 444 3321794 3322098 4076271 4076575 610 3322373 3322738 4076850 4077215 732 3322740 3323120 4077217 4077597 762 3323296 3323579 4077773 4078056 568 3323791 3324010 4078268 4078487 440 3324289 3325821 4078766 4080298 3066 3326435 3326781 4080912 4081258 694 3327152 3327606 4081629 4082083 910 3328286 3328491 4082617 4082822 412 3328573 3328944 4082904 4083275 744 3329138 3329874 4083469 4084205 1474 3330017 3330222 4084348 4084553 412 3330305 3331594 4084636 4085925 2580 3332630 3332940 4086962 4087272 622 3332942 3333168 4087274 4087500 454 3333452 3333675 4087784 4088007 448 3334040 3334683 4088372 4089015 1288 3335272 3335486 4089604 4089818 430 3335488 3335690 4089820 4090022 406 3336004 3336375 4090336 4090707 744 3336407 3336708 4090739 4091040 604 3336954 3337849 4091286 4092181 1792 3337851 3338073 4092183 4092405 446 3338209 3338606 4092541 4092938 796 3338608 3339078 4092940 4093410 942 3339276 3339588 4093608 4093920 626 3339755 3339998 4094087 4094330 488 3340842 3341126 4095174 4095458 570 3341254 3341495 4095586 4095827 484 3341503 3341792 4095835 4096124 580 3342146 3342691 4096478 4097023 1092 3343431 3343684 4097763 4098016 508 3343782 3344130 4098114 4098462 698 3344132 3344351 4098464 4098683 440 3344464 3344685 4098796 4099017 444 3344687 3344999 4099019 4099331 626 3345364 3345610 4099696 4099942 494 3345711 3345964 4100043 4100296 508 # chain 862: length 1 score 608 3366139 3366442 4113372 4113675 608 # chain 863: length 1 score 464 3367797 3368028 4115030 4115261 464 # chain 864: length 1 score 442 3370165 3370385 4117398 4117618 442 # chain 865: length 3 score 1174 3370660 3371060 4117893 4118293 802 3371161 3371361 4118394 4118594 402 3371849 3372422 4119082 4119655 1148 # chain 866: length 1 score 406 3373076 3373278 4120306 4120508 406 # chain 867: length 9 score 6202 2724593 2724992 4168800 4169199 800 2725002 2725338 4169209 4169545 674 2725482 2725992 4169689 4170199 1022 2726034 2726616 4170241 4170823 1166 2726662 2726939 4170871 4171148 556 2726941 2727215 4171150 4171424 550 2727586 2728585 4171810 4172809 2000 2728590 2728904 4172813 4173127 630 2729099 2729323 4173322 4173546 450 # chain 868: length 98 score 36877 3373962 3374538 4121184 4121760 1154 3374755 3375128 4121977 4122350 748 3375420 3375673 4122642 4122895 508 3375711 3376496 4122933 4123718 1572 3376514 3376845 4123736 4124067 664 3377243 3377442 4124465 4124664 400 3377618 3378057 4124840 4125279 880 3378059 3378453 4125281 4125675 790 3379305 3379767 4126527 4126989 926 3379769 3379970 4126991 4127192 404 3379972 3380294 4127194 4127516 646 3381775 3382057 4128998 4129280 566 3382203 3382584 4129426 4129807 764 3382900 3383770 4130123 4130993 1742 3384948 3385674 4132172 4132898 1454 3386228 3386538 4133452 4133762 622 3386569 3386877 4133790 4134098 618 3386989 3387192 4134210 4134413 408 3387265 3387626 4134486 4134847 724 3387934 3388145 4135155 4135366 424 3388256 3388744 4135477 4135965 978 3389365 3389594 4136586 4136815 460 3390014 3390275 4136960 4137221 524 3390277 3390599 4137223 4137545 646 3392293 3392512 4139239 4139458 440 3392557 3392786 4139503 4139732 460 3392788 3393011 4139734 4139957 448 3393173 3393450 4140118 4140395 556 3393686 3394084 4140631 4141029 798 3394140 3394555 4141085 4141500 832 3395220 3395510 4142165 4142455 582 3395701 3396052 4142646 4142997 704 3396054 3396358 4142999 4143303 610 3396638 3396948 4143583 4143893 622 3397136 3397383 4144081 4144328 496 3397399 3397658 4144344 4144603 520 3397963 3398162 4144908 4145107 400 3398383 3398994 4145328 4145939 1224 3399308 3399660 4146253 4146605 706 3399662 3399972 4146607 4146917 622 3399974 3400293 4146919 4147238 640 3400295 3400512 4147240 4147457 436 3400791 3401694 4147736 4148639 1808 3401774 3402104 4148719 4149049 662 3402738 3402963 4149683 4149908 452 3402965 3403364 4149910 4150309 800 3403366 3404046 4150311 4150991 1362 3404282 3404908 4151227 4151853 1254 3405498 3405850 4152443 4152795 706 3406435 3406830 4153380 4153775 792 3407033 3407362 4153978 4154307 660 3407602 3409217 4154547 4156162 3232 3409487 3409824 4156431 4156768 676 3409826 3410193 4156770 4157137 736 3410195 3410933 4157139 4157877 1478 3411367 3411948 4158311 4158892 1164 3412181 3412416 4159125 4159360 472 3412553 3412778 4159497 4159722 452 3412780 3413087 4159724 4160031 616 3413710 3413969 4160654 4160913 520 3415878 3416189 4162867 4163178 624 3417604 3418404 4164594 4165394 1602 3418988 3419228 4165979 4166219 482 3419651 3419918 4166642 4166909 536 3420023 3420385 4167014 4167376 726 3421119 3421407 4168109 4168397 578 3421879 3422207 4168871 4169199 658 3422696 3423208 4169687 4170199 1026 3423250 3423832 4170241 4170823 1166 3423878 3424155 4170871 4171148 556 3424157 3424431 4171150 4171424 550 3424482 3426125 4171484 4173127 3288 3426321 3426619 4173323 4173621 598 3426774 3427305 4173775 4174306 1064 3428346 3429032 4175347 4176033 1374 3429282 3429525 4176283 4176526 488 3430001 3430287 4177001 4177287 574 3430453 3430789 4177454 4177790 674 3431126 3431537 4178127 4178538 824 3431698 3432088 4178699 4179089 782 3432565 3432830 4179566 4179831 532 3432832 3433035 4179833 4180036 408 3434766 3434974 4181767 4181975 418 3435183 3435478 4182184 4182479 592 3435480 3435757 4182481 4182758 556 3436077 3436279 4183078 4183280 406 3437201 3439353 4184202 4186354 4306 3439355 3441199 4186356 4188200 3690 3441372 3441946 4188373 4188947 1150 3441948 3442484 4188949 4189485 1074 3442567 3445133 4189568 4192134 5134 3445135 3445932 4192136 4192933 1596 3445934 3446766 4192935 4193767 1666 3446768 3447008 4193769 4194009 482 3447010 3447961 4194011 4194962 1904 3447963 3448448 4194964 4195449 972 3448621 3450172 4195622 4197173 3104 3450174 3451090 4197175 4198091 1834 # chain 869: length 1 score 414 3542064 3542270 4266227 4266433 414 # chain 870: length 1 score 424 3543166 3543377 4267329 4267540 424 # chain 871: length 1 score 518 3544363 3544621 4268530 4268788 518 # chain 872: length 1 score 622 3545028 3545338 4269195 4269505 622 # chain 873: length 1 score 532 3546156 3546421 4270257 4270522 532 # chain 874: length 10 score 2302 3547430 3547650 4271531 4271751 442 3547653 3548003 4271754 4272104 702 3548005 3548356 4272106 4272457 704 3548687 3548920 4272788 4273021 468 3549389 3549652 4273490 4273753 528 3549996 3550236 4274097 4274337 482 3550457 3550734 4274558 4274835 556 3550966 3551195 4275067 4275296 460 3551197 3551564 4275298 4275665 736 3551566 3551783 4275667 4275884 436 # chain 875: length 6 score 1272 3557336 3557543 4282277 4282484 416 3557579 3557826 4282520 4282767 496 3558241 3558696 4283182 4283637 912 3558933 3559148 4283874 4284089 432 3559415 3559617 4284356 4284558 406 3559675 3559992 4284616 4284933 636 # chain 876: length 18 score 9395 3561803 3562239 4289596 4290032 874 3562646 3563634 4290439 4291427 1978 3563858 3564327 4291651 4292120 940 3564329 3564567 4292122 4292360 478 3564976 3565428 4292769 4293221 906 3565472 3566159 4293265 4293952 1376 3566161 3566576 4293954 4294369 832 3566584 3567271 4294377 4295064 1376 3567273 3567496 4295066 4295289 448 3567597 3567963 4295390 4295756 734 3568254 3568461 4296047 4296254 416 3568479 3569058 4296272 4296851 1160 3569644 3569895 4297437 4297688 504 3570512 3570762 4298305 4298555 502 3570926 3571649 4298719 4299442 1448 3571651 3571952 4299444 4299745 604 3572002 3572237 4299795 4300030 472 3572517 3572896 4300309 4300688 760 # chain 877: length 1 score 524 3582685 3582946 4312337 4312598 524 # chain 878: length 1 score 628 3587802 3588115 4317457 4317770 628 # chain 879: length 1 score 802 3588568 3588968 4318224 4318624 802 # chain 880: length 1 score 676 3589765 3590102 4319421 4319758 676 # chain 881: length 1 score 432 3590901 3591116 4321383 4321598 432 # chain 882: length 1 score 476 3591778 3592015 4322260 4322497 476 # chain 883: length 1 score 1114 3594259 3594815 4324741 4325297 1114 # chain 884: length 5 score 1800 3596756 3597003 4327997 4328244 496 3597005 3597336 4328246 4328577 664 3597836 3598095 4329077 4329336 520 3598136 3598539 4329377 4329780 808 3598541 3598741 4329782 4329982 402 # chain 885: length 1 score 1166 3600034 3600616 4331275 4331857 1166 # chain 886: length 1 score 956 3601778 3602255 4333022 4333499 956 # chain 887: length 1 score 700 3603197 3603546 4334441 4334790 700 # chain 888: length 1 score 666 3603984 3604316 4335228 4335560 666 # chain 889: length 1 score 532 3605752 3606017 4336996 4337261 532 # chain 890: length 2 score 1438 3606688 3606959 4337932 4338203 544 3607216 3607919 4338460 4339163 1408 # chain 891: length 2 score 1386 3609449 3610027 4340693 4341271 1158 3610194 3610474 4341438 4341718 562 # chain 892: length 1 score 426 3610579 3610791 4357178 4357390 426 # chain 893: length 1 score 932 3611118 3611583 4357717 4358182 932 # chain 894: length 1 score 710 3612710 3613064 4359309 4359663 710 # chain 895: length 1 score 514 3626702 3626958 4373174 4373430 514 # chain 896: length 1 score 412 3628331 3628536 4374804 4375009 412 # chain 897: length 1 score 520 3633949 3634208 4380431 4380690 520 # chain 898: length 1 score 622 3634864 3635174 4381346 4381656 622 # chain 899: length 2 score 838 3635619 3635905 4382102 4382388 574 3636126 3636478 4382609 4382961 706 # chain 900: length 1 score 694 3637117 3637463 4383427 4383773 694 # chain 901: length 1 score 604 3638371 3638672 4384682 4384983 604 # chain 902: length 1 score 682 3639178 3639518 4385489 4385829 682 # chain 903: length 1 score 1122 3640481 3641041 4386792 4387352 1122 # chain 904: length 1 score 492 3642959 3643204 4389270 4389515 492 # chain 905: length 1 score 442 3644078 3644298 4390389 4390609 442 # chain 906: length 3 score 1290 3647398 3647657 4393713 4393972 520 3647716 3647954 4394031 4394269 478 3647956 3648162 4394271 4394477 414 # chain 907: length 1 score 424 3649454 3649665 4395768 4395979 424 # chain 908: length 2 score 1670 3651810 3652304 4396924 4397418 990 3652306 3652647 4397420 4397761 684 # chain 909: length 1 score 422 3652939 3653149 4407075 4407285 422 # chain 910: length 6 score 3530 3653920 3654673 4408056 4408809 1508 3654825 3655199 4408961 4409335 750 3655965 3656738 4410101 4410874 1548 3656740 3656944 4410876 4411080 410 3656993 3657606 4411129 4411742 1228 3657893 3658191 4412029 4412327 598 # chain 911: length 1 score 584 3663766 3664057 4417903 4418194 584 # chain 912: length 1 score 472 3665082 3665317 4419219 4419454 472 # chain 913: length 1 score 496 3666000 3666247 4420137 4420384 496 # chain 914: length 1 score 970 3666534 3667018 4420671 4421155 970 # chain 915: length 4 score 1498 3667554 3667966 4421692 4422104 826 3668010 3668215 4422148 4422353 412 3668721 3669160 4422859 4423298 880 3669276 3669631 4423414 4423769 712 # chain 916: length 1 score 676 3671681 3672018 4425819 4426156 676 # chain 917: length 3 score 2052 3672508 3672758 4426647 4426897 502 3672949 3673647 4427088 4427786 1398 3673649 3673917 4427788 4428056 538 # chain 918: length 7 score 4862 3676916 3677337 4431055 4431476 844 3677402 3677646 4431541 4431785 490 3677652 3677869 4431791 4432008 436 3678398 3678627 4432537 4432766 460 3678911 3679113 4433050 4433252 406 3679160 3679838 4433299 4433977 1358 3679840 3681206 4433979 4435345 2734 # chain 919: length 3 score 730 3688282 3688563 4442430 4442711 564 3688836 3689035 4442984 4443183 400 3689145 3689410 4443293 4443558 532 # chain 920: length 2 score 1590 3690180 3690839 4444328 4444987 1320 3690937 3691169 4445085 4445317 466 # chain 921: length 1 score 612 3693101 3693406 4447249 4447554 612 # chain 922: length 6 score 4622 3693748 3693984 4447896 4448132 474 3693986 3694370 4448134 4448518 770 3694620 3695510 4448768 4449658 1782 3695512 3695799 4449660 4449947 576 3695801 3696012 4449949 4450160 424 3696029 3696599 4450177 4450747 1142 # chain 923: length 1 score 438 3701424 3701642 4455572 4455790 438 # chain 924: length 1 score 584 3703997 3704288 4457988 4458279 584 # chain 925: length 1 score 780 3705185 3705574 4459176 4459565 780 # chain 926: length 1 score 424 3706198 3706409 4460023 4460234 424 # chain 927: length 1 score 568 3707862 3708145 4461687 4461970 568 # chain 928: length 3 score 956 3709603 3709837 4469181 4469415 470 3709933 3710247 4469511 4469825 630 3710513 3710802 4470091 4470380 580 # chain 929: length 1 score 422 3711750 3711960 4471328 4471538 422 # chain 930: length 1 score 776 3712392 3712779 4471970 4472357 776 # chain 931: length 3 score 1752 3713289 3713821 4472867 4473399 1066 3714020 3714404 4473598 4473982 770 3714676 3715104 4474254 4474682 858 # chain 932: length 2 score 2306 3716329 3716842 4475907 4476420 1028 3716983 3717762 4476561 4477340 1560 # chain 933: length 1 score 468 3719705 3719938 4477879 4478112 468 # chain 934: length 1 score 472 3720338 3720573 4478512 4478747 472 # chain 935: length 2 score 766 3721244 3721503 4479418 4479677 520 3721646 3721911 4479820 4480085 532 # chain 936: length 1 score 1060 3724433 3724962 4482607 4483136 1060 # chain 937: length 1 score 966 3726176 3726658 4484350 4484832 966 # chain 938: length 1 score 732 3727281 3727646 4485455 4485820 732 # chain 939: length 7 score 3900 3728290 3728727 4486464 4486901 876 3728729 3729240 4486903 4487414 1024 3729276 3729480 4487450 4487654 410 3730090 3730365 4488264 4488539 552 3730367 3730695 4488541 4488869 658 3730697 3731216 4488871 4489390 1040 3731260 3731625 4489434 4489799 732 # chain 940: length 1 score 712 3734584 3734939 4492670 4493025 712 # chain 941: length 1 score 960 3735668 3736147 4493754 4494233 960 # chain 942: length 1 score 464 3737155 3737386 4495241 4495472 464 # chain 943: length 2 score 584 3737753 3737954 4495839 4496040 404 3738089 3738313 4496175 4496399 450 # chain 944: length 1 score 662 3738729 3739059 4496816 4497146 662 # chain 945: length 3 score 1064 3748776 3749229 4502112 4502565 908 3749543 3749793 4502879 4503129 502 3749867 3750081 4503203 4503417 430 # chain 946: length 1 score 722 3751517 3751877 4504853 4505213 722 # chain 947: length 1 score 602 3753515 3753815 4506851 4507151 602 # chain 948: length 2 score 1454 3754605 3754847 4509312 4509554 486 3754849 3755334 4509556 4510041 972 # chain 949: length 4 score 994 3616903 3617237 4514597 4514931 670 3617546 3617774 4515240 4515468 458 3617776 3618000 4515470 4515694 450 3618297 3618612 4515991 4516306 632 # chain 950: length 3 score 1698 729222 729757 4514933 4515468 1072 730140 730432 4515851 4516143 586 730483 730936 4516194 4516647 908 # chain 951: length 1 score 520 3619531 3619790 4517225 4517484 520 # chain 952: length 24 score 15396 3756558 3757025 4511264 4511731 936 3757315 3757756 4512021 4512462 884 3757758 3757960 4512464 4512666 406 3758007 3758515 4512713 4513221 1018 3758517 3759460 4513223 4514166 1888 3759462 3759711 4514168 4514417 500 3759827 3760224 4514534 4514931 796 3760533 3760761 4515240 4515468 458 3760763 3760987 4515470 4515694 450 3761284 3761599 4515991 4516306 632 3762518 3762777 4517225 4517484 520 3762983 3763182 4517690 4517889 400 3763553 3764842 4518260 4519549 2580 3765234 3765545 4519941 4520252 624 3765547 3766040 4520254 4520747 988 3766051 3766618 4520758 4521325 1136 3766620 3767143 4521327 4521850 1048 3767145 3767393 4521852 4522100 498 3767458 3767795 4522164 4522501 676 3767797 3768183 4522503 4522889 774 3768185 3768870 4522891 4523576 1372 3768872 3769090 4523578 4523796 438 3769261 3770371 4523967 4525077 2222 3770373 3770664 4525079 4525370 584 # chain 953: length 10 score 3230 3779808 3780062 4540399 4540653 510 3780064 3780305 4540655 4540896 484 3780713 3780996 4541304 4541587 568 3780998 3781418 4541589 4542009 842 3781555 3781957 4542146 4542548 806 3782118 3782419 4542709 4543010 604 3782421 3782750 4543012 4543341 660 3783726 3784069 4544317 4544660 688 3784331 3784597 4544922 4545188 534 3784602 3785323 4545193 4545914 1444 # chain 954: length 7 score 3977 3790002 3790241 4550594 4550833 480 3790278 3790613 4550870 4551205 672 3790615 3790857 4551207 4551449 486 3790859 3791332 4551451 4551924 948 3791360 3792067 4551953 4552660 1416 3792429 3792778 4553022 4553371 700 3792963 3793216 4553556 4553809 508 # chain 955: length 23 score 6719 3806077 3806356 4563696 4563975 560 3806403 3806707 4564022 4564326 610 3807195 3807668 4564814 4565287 948 3807670 3808145 4565289 4565764 952 3808147 3808399 4565766 4566018 506 3808401 3809444 4566020 4567063 2088 3809482 3809771 4567101 4567390 580 3810342 3810545 4567961 4568164 408 3810547 3810967 4568166 4568586 842 3810969 3811665 4568588 4569284 1394 3812609 3812917 4570228 4570536 618 3813764 3814814 4571384 4572434 2102 3815632 3815848 4573252 4573468 434 3816575 3816783 4574197 4574405 418 3816812 3817209 4574434 4574831 796 3818185 3818485 4575807 4576107 602 3818930 3819433 4576552 4577055 1008 3819549 3820522 4577171 4578144 1948 3820524 3820735 4578146 4578357 424 3821010 3821278 4578632 4578900 538 3821979 3822839 4579601 4580461 1722 3822841 3823159 4580463 4580781 638 3823161 3823491 4580783 4581113 662 # chain 956: length 1 score 442 3835805 3836025 4635899 4636119 442 # chain 957: length 1 score 474 3838874 3839110 4638968 4639204 474 # chain 958: length 1 score 486 3839922 3840164 4640815 4641057 486 # chain 959: length 1 score 424 3840577 3840788 4641469 4641680 424 # chain 960: length 1 score 830 3841117 3841531 4642009 4642423 830 # chain 961: length 1 score 432 3842055 3842270 4642947 4643162 432 # chain 962: length 1 score 574 3844483 3844769 4645375 4645661 574 # chain 963: length 1 score 436 3850393 3850610 4654628 4654845 436 # chain 964: length 2 score 680 3853134 3853392 4657369 4657627 518 3853647 3853982 4657882 4658217 672 # chain 965: length 1 score 504 3854970 3855221 4659206 4659457 504 # chain 966: length 1 score 466 3855564 3855796 4659800 4660032 466 # chain 967: length 1 score 770 3856044 3856428 4660280 4660664 770 # chain 968: length 1 score 492 3857119 3857364 4661355 4661600 492 # chain 969: length 1 score 472 3857692 3857927 4661928 4662163 472 # chain 970: length 1 score 550 3858746 3859020 4662982 4663256 550 # chain 971: length 1 score 406 3859488 3859690 4664232 4664434 406 # chain 972: length 2 score 1442 3860661 3860920 4665405 4665664 520 3860922 3861384 4665666 4666128 926 # chain 973: length 1 score 404 3862311 3862512 4667055 4667256 404 # chain 974: length 1 score 670 3862995 3863329 4667739 4668073 670 # chain 975: length 2 score 1336 3864047 3864436 4668791 4669180 780 3864714 3865269 4669458 4670013 1112 # chain 976: length 2 score 1044 3873101 3873357 4673094 4673350 514 3873359 3873625 4673352 4673618 534 # chain 977: length 1 score 424 3875486 3875697 4675478 4675689 424 # chain 978: length 2 score 1164 3877490 3877873 4677482 4677865 768 3877884 3878092 4677876 4678084 418 # chain 979: length 1 score 472 3879782 3880017 4679774 4680009 472 # chain 980: length 9 score 4177 3880497 3880882 4680489 4680874 772 3880884 3881112 4680876 4681104 458 3881114 3881481 4681106 4681473 736 3881784 3882402 4681775 4682393 1238 3882404 3882683 4682395 4682674 560 3882685 3883000 4682676 4682991 632 3883532 3883858 4683523 4683849 654 3883860 3884079 4683851 4684070 440 3884159 3884426 4684150 4684417 536 # chain 981: length 1 score 660 3887960 3888289 4690425 4690754 660 # chain 982: length 1 score 748 3891377 3891750 4693842 4694215 748 # chain 983: length 1 score 412 3892613 3892818 4695078 4695283 412 # chain 984: length 1 score 412 3893186 3893391 4695651 4695856 412 # chain 985: length 1 score 770 3905045 3905429 4705510 4705894 770 # chain 986: length 1 score 472 3907598 3907833 4708063 4708298 472 # chain 987: length 1 score 516 3908983 3909240 4709448 4709705 516 # chain 988: length 1 score 524 3911180 3911441 4718382 4718643 524 # chain 989: length 1 score 434 224672 224888 4747537 4747753 434 # chain 990: length 8 score 6432 4164227 4165138 4746626 4747537 1824 4165275 4165657 4747673 4748055 766 4166184 4166481 4748496 4748793 596 4166483 4166760 4748795 4749072 556 4166769 4167388 4749083 4749702 1240 4167430 4167940 4749743 4750253 1022 4168084 4168420 4750397 4750733 674 4168430 4169134 4750743 4751447 1410 # chain 991: length 8 score 6385 4205631 4206625 4746543 4747537 1990 4206762 4207144 4747673 4748055 766 4207599 4207883 4748509 4748793 570 4207885 4208162 4748795 4749072 556 4208171 4208790 4749083 4749702 1240 4208832 4209342 4749743 4750253 1022 4209486 4209822 4750397 4750733 674 4209832 4210413 4750743 4751324 1164 # chain 992: length 8 score 6056 4033109 4034020 4746626 4747537 1824 4034157 4034539 4747673 4748055 766 4035078 4035360 4748511 4748793 566 4035414 4035639 4748847 4749072 452 4035648 4036270 4749083 4749705 1246 4036272 4036820 4749707 4750255 1098 4036971 4037300 4750404 4750733 660 4037310 4037891 4750743 4751324 1164 # chain 993: length 9 score 5809 223741 224671 4746607 4747537 1862 224890 225190 4747755 4748055 602 225736 226298 4748509 4749071 1126 226308 226602 4749083 4749377 590 226604 226927 4749379 4749702 648 226987 227481 4749761 4750255 990 227623 227959 4750397 4750733 674 227969 228550 4750743 4751324 1164 228768 229004 4751541 4751777 474 # chain 994: length 50 score 19920 3912307 3912572 4719509 4719774 532 3912787 3913008 4719989 4720210 444 3913071 3913378 4720272 4720579 616 3913380 3914138 4720581 4721339 1518 3914140 3914342 4721341 4721543 406 3914443 3914774 4721644 4721975 664 3914848 3916092 4722049 4723293 2490 3916211 3916485 4723412 4723686 550 3916700 3916965 4723901 4724166 532 3916967 3917247 4724168 4724448 562 3917273 3917733 4724474 4724934 922 3917861 3919833 4725062 4727034 3946 3919835 3920254 4727036 4727455 840 3920256 3920953 4727457 4728154 1396 3921084 3921346 4728285 4728547 526 3921557 3921943 4728758 4729144 774 3922075 3922345 4729276 4729546 542 3923190 3923401 4730391 4730602 424 3924356 3924810 4731557 4732011 910 3924947 3925200 4732148 4732401 508 3925721 3925958 4732922 4733159 476 3928391 3928805 4735593 4736007 830 3928807 3929180 4736009 4736382 748 3929182 3929417 4736384 4736619 472 3929869 3930141 4737071 4737343 546 3930676 3930940 4737879 4738143 530 3930942 3931172 4738145 4738375 462 3931174 3931620 4738377 4738823 894 3932054 3932535 4739257 4739738 964 3932573 3933133 4739776 4740336 1122 3933261 3933512 4740464 4740715 504 3933609 3934150 4740812 4741353 1084 3934479 3934711 4741682 4741914 466 3934713 3935109 4741916 4742312 794 3935165 3935694 4742368 4742897 1060 3935747 3936714 4742950 4743917 1936 3937378 3937780 4744581 4744983 806 3937782 3938147 4744985 4745350 732 3938339 3938586 4745542 4745789 496 3938726 3938953 4745932 4746159 456 3939656 3940429 4746862 4747635 1548 3940467 3940849 4747673 4748055 766 3941290 3941587 4748496 4748793 596 3941876 3942495 4749083 4749702 1240 3942537 3943049 4749743 4750255 1026 3943061 3943705 4750267 4750911 1290 3943851 3944118 4751057 4751324 536 3944336 3944674 4751541 4751879 678 3944802 3945035 4752007 4752240 468 3945350 3945775 4752556 4752981 852 # chain 995: length 1 score 504 3994640 3994891 4801852 4802103 504 # chain 996: length 2 score 1692 3998658 3999242 4806754 4807338 1170 3999244 3999506 4807340 4807602 526 # chain 997: length 7 score 3852 4001721 4001947 4811588 4811814 454 4002078 4002350 4811945 4812217 546 4002433 4002653 4812300 4812520 442 4002679 4002974 4812546 4812841 592 4002976 4003592 4812843 4813459 1234 4003651 4004132 4813518 4813999 964 4004500 4004978 4814367 4814845 958 # chain 998: length 1 score 566 4009409 4009691 4819297 4819579 566 # chain 999: length 1 score 840 4010714 4011133 4820601 4821020 840 # chain 1000: length 17 score 11254 4012706 4013140 4822593 4823027 870 4013300 4013716 4823188 4823604 834 4013892 4014726 4823782 4824616 1670 4014737 4015625 4824627 4825515 1778 4015657 4015934 4825547 4825824 556 4016125 4016741 4826015 4826631 1234 4016743 4017305 4826633 4827195 1126 4017548 4017783 4827438 4827673 472 4017785 4018011 4827675 4827901 454 4018598 4018800 4828488 4828690 406 4018898 4019521 4828788 4829411 1248 4019523 4019855 4829413 4829745 666 4019861 4020179 4829749 4830067 638 4020181 4020673 4830069 4830561 986 4020843 4021207 4830731 4831095 730 4021209 4021554 4831097 4831442 692 4021683 4021942 4831570 4831829 520 # chain 1001: length 1 score 448 3939284 3939507 4842675 4842898 448 # chain 1002: length 8 score 4845 4164576 4164974 4843160 4843558 798 4164976 4165237 4843560 4843821 524 4165275 4165798 4843859 4844382 1048 4166150 4166354 4844740 4844944 410 4166769 4167388 4845361 4845980 1240 4167430 4167873 4846021 4846464 888 4168084 4168420 4846675 4847011 674 4168430 4169134 4847021 4847725 1410 # chain 1003: length 9 score 5707 224109 224507 4843160 4843558 798 224509 224888 4843560 4843939 760 224890 225585 4843941 4844636 1392 225900 226112 4844951 4845163 426 226308 226602 4845361 4845655 590 226604 226927 4845657 4845980 648 226987 227412 4846039 4846464 852 227623 227959 4846675 4847011 674 227969 228550 4847021 4847602 1164 # chain 1004: length 8 score 4048 4205569 4205867 4842666 4842964 598 4206063 4206461 4843160 4843558 798 4206463 4206724 4843560 4843821 524 4206762 4207279 4843859 4844376 1036 4208171 4208790 4845361 4845980 1240 4208832 4209275 4846021 4846464 888 4209486 4209822 4846675 4847011 674 4209832 4210413 4847021 4847602 1164 # chain 1005: length 7 score 3595 3939769 3940167 4843160 4843558 798 3940467 3940984 4843859 4844376 1036 3941255 3941460 4844739 4844944 412 3941876 3942495 4845361 4845980 1240 3942537 3942980 4846021 4846464 888 3943061 3943705 4846545 4847189 1290 3943851 3944118 4847335 4847602 536 # chain 1006: length 18 score 6818 4033458 4033856 4843160 4843558 798 4033858 4034119 4843560 4843821 524 4034157 4034674 4843859 4844376 1036 4034682 4035035 4844384 4844737 708 4035648 4036270 4845361 4845983 1246 4036272 4036751 4845985 4846464 960 4036971 4037300 4846682 4847011 660 4037310 4037891 4847021 4847602 1164 4038498 4039102 4848038 4848642 1210 4039724 4039958 4849264 4849498 470 4040674 4040905 4850213 4850444 464 4040907 4041365 4850446 4850904 918 4041665 4042311 4851205 4851851 1294 4042313 4042580 4851853 4852120 536 4042808 4043242 4852348 4852782 870 4043940 4044491 4853480 4854031 1104 4044493 4044810 4854033 4854350 636 4045175 4045638 4854715 4855178 928 # chain 1007: length 1 score 460 4055063 4055292 4864450 4864679 460 # chain 1008: length 6 score 4309 4055827 4056695 4865214 4866082 1738 4056823 4057370 4866210 4866757 1096 4057496 4057758 4866883 4867145 526 4057779 4058383 4867167 4867771 1210 4058682 4058912 4868070 4868300 462 4058914 4059128 4868302 4868516 430 # chain 1009: length 1 score 508 4065903 4066156 4875289 4875542 508 # chain 1010: length 1 score 788 4070076 4070469 4880235 4880628 788 # chain 1011: length 1 score 426 4071254 4071466 4881413 4881625 426 # chain 1012: length 1 score 448 4072146 4072369 4882305 4882528 448 # chain 1013: length 1 score 458 4073229 4073457 4883388 4883616 458 # chain 1014: length 4 score 3024 4073818 4074128 4883977 4884287 622 4074145 4074371 4884304 4884530 454 4074451 4074664 4884610 4884823 428 4074666 4075524 4884825 4885683 1718 # chain 1015: length 1 score 560 4076865 4077144 4889090 4889369 560 # chain 1016: length 4 score 1898 4078137 4078378 4890361 4890602 484 4078380 4078660 4890604 4890884 562 4078874 4079490 4891098 4891714 1234 4079740 4080014 4891964 4892238 550 # chain 1017: length 6 score 3650 4082241 4082495 4894465 4894719 510 4082650 4083118 4894874 4895342 938 4083120 4083610 4895344 4895834 982 4083612 4083818 4895836 4896042 414 4083823 4084085 4896047 4896309 526 4084114 4084446 4896338 4896670 666 # chain 1018: length 3 score 1068 4088405 4088620 4900628 4900843 432 4088622 4088887 4900845 4901110 532 4089204 4089568 4901415 4901779 730 # chain 1019: length 3 score 3300 4093600 4094019 4907147 4907566 840 4094283 4095506 4907830 4909053 2448 4095607 4095977 4909154 4909524 742 # chain 1020: length 1 score 528 4099287 4099550 4912834 4913097 528 # chain 1021: length 2 score 792 4099936 4100150 4913483 4913697 430 4100221 4100472 4913768 4914019 504 # chain 1022: length 6 score 2681 4101847 4102396 4915394 4915943 1100 4102832 4103518 4916379 4917065 1374 4103648 4103949 4917196 4917497 604 4104111 4104346 4917659 4917894 472 4104468 4104676 4918016 4918224 418 4104678 4104886 4918226 4918434 418 # chain 1023: length 1 score 680 4108950 4109289 4922497 4922836 680 # chain 1024: length 3 score 1112 4109737 4110009 4923284 4923556 546 4110197 4110431 4923744 4923978 470 4110433 4110670 4923980 4924217 476 # chain 1025: length 1 score 484 4112872 4113113 4926419 4926660 484 # chain 1026: length 3 score 1114 4113531 4113841 4927173 4927483 622 4114131 4114333 4927773 4927975 406 4114335 4114669 4927977 4928311 670 # chain 1027: length 1 score 652 4115275 4115600 4928917 4929242 652 # chain 1028: length 1 score 916 4116503 4116960 4931583 4932040 916 # chain 1029: length 8 score 4294 4117834 4118324 4932914 4933404 982 4118491 4118702 4933571 4933782 424 4118758 4119248 4933838 4934328 982 4119603 4120087 4934683 4935167 970 4120353 4120633 4935433 4935713 562 4120662 4121417 4935742 4936497 1512 4121652 4121888 4936732 4936968 474 4121923 4122259 4937003 4937339 674 # chain 1030: length 1 score 776 4124464 4124851 4939544 4939931 776 # chain 1031: length 1 score 564 3759943 3760224 4940178 4940459 564 # chain 1032: length 1 score 564 3616956 3617237 4940178 4940459 564 # chain 1033: length 1 score 452 3760536 3760761 4940772 4940997 452 # chain 1034: length 1 score 452 3617549 3617774 4940772 4940997 452 # chain 1035: length 1 score 632 3761284 3761599 4941521 4941836 632 # chain 1036: length 1 score 632 3618297 3618612 4941521 4941836 632 # chain 1037: length 4 score 1415 729265 729530 4940505 4940770 532 729532 729757 4940772 4940997 452 730140 730432 4941381 4941673 586 730483 730841 4941724 4942082 718 # chain 1038: length 1 score 520 3762518 3762777 4942755 4943014 520 # chain 1039: length 1 score 520 3619531 3619790 4942755 4943014 520 # chain 1040: length 1 score 654 4125654 4125980 4946126 4946452 654 # chain 1041: length 1 score 704 4127211 4127562 4947683 4948034 704 # chain 1042: length 2 score 884 4129938 4130145 4950410 4950617 416 4130200 4130488 4950672 4950960 578 # chain 1043: length 1 score 490 4131927 4132171 4952399 4952643 490 # chain 1044: length 1 score 410 4135402 4135606 4955874 4956078 410 # chain 1045: length 1 score 720 4136436 4136795 4956908 4957267 720 # chain 1046: length 3 score 1190 4137236 4137510 4957708 4957982 550 4137555 4137781 4958027 4958253 454 4137861 4138078 4958333 4958550 436 # chain 1047: length 1 score 418 4139421 4139629 4959893 4960101 418 # chain 1048: length 1 score 620 4139953 4140262 4960426 4960735 620 # chain 1049: length 1 score 404 4141642 4141843 4962115 4962316 404 # chain 1050: length 1 score 670 4142728 4143062 4963201 4963535 670 # chain 1051: length 2 score 584 4143891 4144140 4964364 4964613 500 4144322 4144545 4964795 4965018 448 # chain 1052: length 3 score 1316 4144994 4145292 4965467 4965765 598 4145384 4145652 4965857 4966125 538 4145692 4145913 4966165 4966386 444 # chain 1053: length 2 score 594 4146763 4147047 4967236 4967520 570 4147330 4147624 4967803 4968097 590 # chain 1054: length 1 score 828 4149229 4149642 4969703 4970116 828 # chain 1055: length 5 score 1458 4150207 4150508 4970681 4970982 604 4150552 4150888 4971026 4971362 674 4151440 4151657 4971668 4971885 436 4151809 4152222 4972037 4972450 828 4152388 4152636 4972616 4972864 498 # chain 1056: length 2 score 978 4153810 4154138 4974038 4974366 658 4154273 4154567 4974501 4974795 590 # chain 1057: length 1 score 1062 4155818 4156348 4976046 4976576 1062 # chain 1058: length 2 score 1116 4157626 4158023 4977854 4978251 796 4158157 4158450 4978385 4978678 588 # chain 1059: length 2 score 1228 4158561 4158838 4981417 4981694 556 4158861 4159219 4981717 4982075 718 # chain 1060: length 1 score 1086 4160709 4161251 4983565 4984107 1086 # chain 1061: length 8 score 4511 4032883 4033317 4986857 4987291 870 4033319 4033530 4987293 4987504 424 4033654 4034119 4987628 4988093 932 4034157 4034539 4988131 4988513 766 4035078 4035341 4988969 4989232 528 4035414 4035639 4989305 4989530 452 4035648 4036270 4989541 4990163 1246 4036272 4036664 4990165 4990557 786 # chain 1062: length 5 score 2293 3939965 3940331 4987628 4987994 734 3940467 3940849 4988131 4988513 766 3941256 3941568 4988920 4989232 626 3941876 3942495 4989541 4990160 1240 3942537 3942893 4990201 4990557 714 # chain 1063: length 8 score 4276 4205714 4205922 4987083 4987291 418 4205924 4206135 4987293 4987504 424 4206259 4206724 4987628 4988093 932 4206762 4207144 4988131 4988513 766 4207599 4207864 4988967 4989232 532 4207866 4208162 4989234 4989530 594 4208171 4208790 4989541 4990160 1240 4208832 4209188 4990201 4990557 714 # chain 1064: length 9 score 4171 223760 223968 4987083 4987291 418 223970 224181 4987293 4987504 424 224305 224888 4987628 4988211 1168 224890 225190 4988213 4988513 602 225736 226001 4988967 4989232 532 226022 226298 4989253 4989529 554 226308 226602 4989541 4989835 590 226604 226927 4989837 4990160 648 226987 227325 4990219 4990557 678 # chain 1065: length 37 score 15736 4162354 4162742 4985210 4985598 778 4162744 4163523 4985600 4986379 1560 4163525 4163789 4986381 4986645 530 4164001 4164435 4986857 4987291 870 4164437 4164648 4987293 4987504 424 4164772 4165237 4987628 4988093 932 4165275 4165657 4988131 4988513 766 4165950 4166462 4988720 4989232 1026 4166464 4166760 4989234 4989530 594 4166769 4167388 4989541 4990160 1240 4167430 4167786 4990201 4990557 714 4168430 4168872 4991201 4991643 886 4168874 4169134 4991645 4991905 522 4170257 4170470 4992862 4993075 428 4172858 4173811 4995446 4996399 1908 4173886 4174106 4996474 4996694 442 4174116 4175013 4996704 4997601 1796 4175015 4175909 4997603 4998497 1790 4175950 4176241 4998539 4998830 584 4176243 4176538 4998832 4999127 592 4176894 4177208 4999483 4999797 630 4177351 4178584 4999819 5001052 2468 4178586 4179345 5001054 5001813 1520 4179578 4179837 5002046 5002305 520 4180073 4180287 5002541 5002755 430 4180289 4180605 5002757 5003073 634 4181117 4181358 5003585 5003826 484 4181831 4182169 5004299 5004637 678 4182488 4182726 5004956 5005194 478 4182882 4183189 5005350 5005657 616 4183488 4183996 5005956 5006464 1018 4184046 4184630 5006514 5007098 1170 4184817 4185043 5007285 5007511 454 4185045 4185443 5007513 5007911 798 4185445 4185778 5007913 5008246 668 4186344 4186612 5008812 5009080 538 4186737 4187343 5009205 5009811 1214 # chain 1066: length 1 score 448 3939284 3939507 5027956 5028179 448 # chain 1067: length 2 score 742 223741 224022 5028073 5028354 564 224183 224432 5028515 5028764 500 # chain 1068: length 1 score 602 224890 225190 5029222 5029522 602 # chain 1069: length 1 score 1124 225736 226297 5029976 5030537 1124 # chain 1070: length 5 score 1311 3939843 3940092 5028515 5028764 500 3940331 3940849 5029004 5029522 1038 3941256 3941587 5029929 5030260 664 3941982 3942322 5030654 5030994 682 3942559 3943049 5031230 5031720 982 # chain 1071: length 8 score 3181 4164227 4164489 5028092 5028354 526 4164650 4164899 5028515 5028764 500 4165083 4165657 5028948 5029522 1150 4166150 4166481 5029929 5030260 664 4166483 4166758 5030262 5030537 552 4166875 4167215 5030654 5030994 682 4167452 4167940 5031230 5031718 978 4168430 4169134 5032208 5032912 1410 # chain 1072: length 2 score 1170 226991 227481 5031230 5031720 982 227969 228550 5032208 5032789 1164 # chain 1073: length 10 score 3698 4204214 4204438 5026590 5026814 450 4204652 4205249 5027028 5027625 1196 4205569 4205976 5027947 5028354 816 4206137 4206386 5028515 5028764 500 4206570 4207144 5028948 5029522 1150 4207599 4207883 5029976 5030260 570 4207885 4208160 5030262 5030537 552 4208277 4208617 5030654 5030994 682 4208854 4209342 5031230 5031718 978 4209832 4210413 5032208 5032789 1164 # chain 1074: length 8 score 2541 4033109 4033371 5028092 5028354 526 4033532 4033781 5028515 5028764 500 4033965 4034539 5028948 5029522 1150 4035078 4035360 5029978 5030260 566 4035414 4035637 5030314 5030537 448 4035754 4036094 5030654 5030994 682 4036330 4036820 5031230 5031720 982 4037310 4037891 5032208 5032789 1164 # chain 1075: length 1 score 536 3943851 3944118 5032522 5032789 536 # chain 1076: length 1 score 528 4217734 4217997 5039704 5039967 528 # chain 1077: length 1 score 410 4218639 4218843 5040609 5040813 410 # chain 1078: length 3 score 1359 4220056 4220269 5042026 5042239 428 4220349 4220555 5042320 5042526 414 4220557 4220897 5042528 5042868 682 # chain 1079: length 1 score 436 4222189 4222406 5044160 5044377 436 # chain 1080: length 1 score 442 4223590 4223810 5045561 5045781 442 # chain 1081: length 3 score 900 4224226 4224461 5046197 5046432 472 4224517 4224776 5046488 5046747 520 4225045 4225323 5047016 5047294 558 # chain 1082: length 5 score 2710 4229111 4229551 5057182 5057622 882 4229679 4229908 5057750 5057979 460 4229994 4230336 5058065 5058407 686 4230657 4231155 5058728 5059226 998 4231157 4231535 5059228 5059606 758 # chain 1083: length 1 score 634 4235356 4235672 5063441 5063757 634 # chain 1084: length 17 score 5538 4237564 4237988 5065649 5066073 850 4238057 4238268 5066142 5066353 424 4238406 4238620 5066491 5066705 430 4238622 4238986 5066707 5067071 730 4239483 4240332 5067568 5068417 1700 4240577 4240851 5068662 5068936 550 4241194 4241513 5069279 5069598 640 4241860 4242134 5069945 5070219 550 4242340 4242595 5070425 5070680 512 4242692 4242965 5070777 5071050 548 4243246 4243553 5071331 5071638 616 4243777 4244103 5071862 5072188 654 4244267 4244585 5072352 5072670 638 4244704 4245302 5072789 5073387 1198 4245304 4245658 5073389 5073743 710 4245858 4246069 5073943 5074154 424 4246359 4246764 5074444 5074849 812 # chain 1085: length 4 score 2058 4253485 4253771 5081478 5081764 574 4253773 4254142 5081766 5082135 740 4254248 4254495 5082241 5082488 496 4254560 4254856 5082553 5082849 594 # chain 1086: length 1 score 922 4256676 4257136 5084669 5085129 922 # chain 1087: length 1 score 430 4259211 4259425 5087175 5087389 430 # chain 1088: length 1 score 452 4262253 4262478 5090217 5090442 452 # chain 1089: length 2 score 1458 4263080 4263430 5091044 5091394 702 4263432 4263811 5091396 5091775 760 # chain 1090: length 1 score 430 4264612 4264826 5092576 5092790 430 # chain 1091: length 2 score 1144 4267726 4267949 5095682 5095905 448 4267951 4268300 5095907 5096256 700 # chain 1092: length 1 score 830 4271274 4271688 5099230 5099644 830 # chain 1093: length 1 score 484 4272543 4272784 5100500 5100741 484 # chain 1094: length 3 score 1546 4274885 4275144 5102841 5103100 520 4275257 4275698 5103213 5103654 884 4275783 4276051 5103739 5104007 538 # chain 1095: length 1 score 574 4280733 4281019 5108691 5108977 574 # chain 1096: length 4 score 1349 4282323 4282554 5110281 5110512 464 4282634 4282898 5110592 5110856 530 4282979 4283305 5110938 5111264 654 4283580 4283866 5111539 5111825 574 # chain 1097: length 7 score 2866 4284575 4284796 5112534 5112755 444 4284945 4285241 5112904 5113200 594 4285243 4285625 5113202 5113584 766 4285817 4286408 5113776 5114367 1184 4286746 4286983 5114705 5114942 476 4287171 4287708 5115130 5115667 1076 4287908 4288139 5115867 5116098 464 # chain 1098: length 1 score 944 4291742 4292213 5119701 5120172 944 # chain 1099: length 7 score 3416 4294024 4294328 5121519 5121823 610 4294488 4294792 5121983 5122287 610 4295091 4295297 5122586 5122792 414 4295299 4295540 5122794 5123035 484 4295545 4295804 5123040 5123299 520 4295971 4296203 5123466 5123698 466 4296217 4297019 5123712 5124514 1606 # chain 1100: length 1 score 422 4300511 4300721 5128006 5128216 422 # chain 1101: length 2 score 780 4301558 4301780 5129053 5129275 446 4301827 4302040 5129322 5129535 428 # chain 1102: length 1 score 762 4303916 4304296 5131411 5131791 762 # chain 1103: length 1 score 494 4312689 4312935 5142354 5142600 494 # chain 1104: length 1 score 436 4315512 4315729 5145178 5145395 436 # chain 1105: length 1 score 464 4318700 4318931 5148366 5148597 464 # chain 1106: length 2 score 1068 4323945 4324269 5153204 5153528 650 4324271 4324481 5153530 5153740 422 # chain 1107: length 1 score 1218 4325926 4326534 5155186 5155794 1218 # chain 1108: length 8 score 4490 4327881 4328194 5157141 5157454 628 4328196 4328668 5157456 5157928 946 4328796 4329079 5158056 5158339 568 4329081 4329292 5158341 5158552 424 4330003 4330414 5159263 5159674 824 4330464 4330844 5159724 5160104 762 4330881 4331442 5160141 5160702 1124 4331444 4331982 5160704 5161242 1078 # chain 1109: length 3 score 926 4336113 4336322 5165373 5165582 420 4336393 4336693 5165653 5165953 602 4336927 4337183 5166187 5166443 514 # chain 1110: length 1 score 490 4337794 4338038 5167054 5167298 490 # chain 1111: length 2 score 1266 4338994 4339308 5168254 5168568 630 4339353 4339715 5168613 5168975 726 # chain 1112: length 1 score 502 4340892 4341142 5170152 5170402 502 # chain 1113: length 1 score 752 4341624 4341999 5170884 5171259 752 # chain 1114: length 10 score 3484 4344740 4344957 5174001 5174218 436 4344959 4345211 5174220 5174472 506 4345213 4345571 5174474 5174832 718 4346026 4346523 5175287 5175784 996 4346631 4346834 5175892 5176095 408 4347166 4347790 5176427 5177051 1250 4347927 4348213 5177188 5177474 574 4348434 4348726 5177695 5177987 586 4348728 4348972 5177989 5178233 490 4349163 4349372 5178424 5178633 420 # chain 1115: length 24 score 12303 4353534 4354238 5182795 5183499 1410 4354273 4354526 5183534 5183787 508 4354528 4354910 5183789 5184171 766 4354912 4355495 5184173 5184756 1168 4355497 4355732 5184758 5184993 472 4355851 4356510 5185112 5185771 1320 4356602 4356917 5185863 5186178 632 4356919 4357185 5186180 5186446 534 4357376 4357687 5186637 5186948 624 4358283 4358518 5187545 5187780 472 4358531 4358953 5187793 5188215 846 4359009 4359406 5188271 5188668 796 4359408 4359650 5188670 5188912 486 4360590 4361086 5189852 5190348 994 4361109 4361356 5190371 5190618 496 4361397 4361736 5190659 5190998 680 4361967 4362177 5191229 5191439 422 4362309 4362521 5191571 5191783 426 4362523 4362876 5191785 5192138 708 4363046 4363258 5192308 5192520 426 4363260 4363546 5192522 5192808 574 4363548 4364194 5192810 5193456 1294 4364202 4364791 5193464 5194053 1180 4364793 4364992 5194055 5194254 400 # chain 1116: length 1 score 986 4389846 4390338 5218382 5218874 986 # chain 1117: length 2 score 1458 4390965 4391449 5219501 5219985 970 4391451 4391696 5219987 5220232 492 # chain 1118: length 3 score 1588 4392660 4392949 5221196 5221485 580 4392951 4393314 5221487 5221850 728 4393390 4393607 5221926 5222143 436 # chain 1119: length 1 score 628 4394572 4394885 5223108 5223421 628 # chain 1120: length 2 score 1704 4396694 4397281 5225230 5225817 1176 4397605 4398192 5226141 5226728 1176 # chain 1121: length 8 score 5414 4398186 4398649 5226723 5227186 928 4398699 4399042 5227236 5227579 688 4399262 4399973 5227799 5228510 1424 4400047 4400534 5228584 5229071 976 4400536 4400837 5229073 5229374 604 4400839 4401199 5229376 5229736 722 4401291 4401502 5229828 5230039 424 4401693 4402147 5230230 5230684 910 # chain 1122: length 1 score 568 4409733 4410016 5238272 5238555 568 # chain 1123: length 2 score 2280 4410543 4411443 5239082 5239982 1802 4411568 4411931 5240107 5240470 728 # chain 1124: length 58 score 9155 4413245 4413458 5241784 5241997 428 4413460 4414119 5241999 5242658 1320 4414166 4414590 5242705 5243129 850 4415106 4415865 5243645 5244404 1520 4415867 4416119 5244406 5244658 506 4416427 4416794 5244966 5245333 736 4416802 4417277 5245341 5245816 952 4417587 4417894 5246126 5246433 616 4417896 4418210 5246435 5246749 630 4418721 4419265 5247260 5247804 1090 4419327 4420142 5247866 5248681 1632 4422028 4422356 5250566 5250894 658 4422589 4422864 5251127 5251402 552 4422884 4423135 5251422 5251673 504 4423235 4423484 5251773 5252022 500 4423486 4423779 5252024 5252317 588 4423832 4424168 5252370 5252706 674 4424170 4424765 5252708 5253303 1192 4425009 4425265 5253547 5253803 514 4425565 4425963 5255851 5256249 798 4426044 4426243 5256330 5256529 400 4426245 4426957 5256531 5257243 1426 4427159 4427541 5257445 5257827 766 4427543 4427886 5257829 5258172 688 4427900 4428237 5258186 5258523 676 4428542 4428802 5258828 5259088 522 4429070 4429306 5259356 5259592 474 4429923 4430185 5260209 5260471 526 4430365 4430680 5260651 5260966 632 4430682 4431179 5260968 5261465 996 4432539 4432756 5262814 5263031 436 4432758 4433008 5263033 5263283 502 4433601 4433926 5263876 5264201 652 4433963 4434274 5264238 5264549 624 4435031 4435251 5265306 5265526 442 4435253 4435481 5265528 5265756 458 4436111 4436332 5266387 5266608 444 4436615 4437230 5266891 5267506 1232 4437503 4437711 5267796 5268004 418 4438094 4438719 5268387 5269012 1252 4438730 4438975 5269023 5269268 492 4439166 4439479 5269459 5269772 628 4439661 4440048 5269954 5270341 776 4440303 4440757 5270596 5271050 910 4441584 4441911 5271877 5272204 656 4443981 4444452 5274274 5274745 944 4444454 4444845 5274747 5275138 784 4444973 4445194 5275266 5275487 444 4445391 4445813 5275684 5276106 846 4445815 4446120 5276108 5276413 612 4446140 4446428 5276433 5276721 578 4446534 4447021 5276827 5277314 976 4447071 4447327 5277364 5277620 514 4447949 4448349 5278242 5278642 802 4448542 4448813 5278837 5279108 544 4448815 4449101 5279110 5279396 574 4449229 4449635 5279524 5279930 814 4449737 4450021 5280033 5280317 570 # chain 1125: length 1 score 668 4476003 4476336 5306344 5306677 668 # chain 1126: length 1 score 402 4478263 4478463 5308503 5308703 402 # chain 1127: length 1 score 868 4478850 4479283 5309086 5309519 868 # chain 1128: length 1 score 418 4480524 4480732 5310760 5310968 418 # chain 1129: length 12 score 6036 4481043 4481572 5311279 5311808 1060 4481615 4481848 5311851 5312084 468 4482116 4482339 5312546 5312769 448 4482470 4482864 5312900 5313294 790 4482962 4483176 5313392 5313606 430 4483178 4483541 5313608 5313971 728 4483543 4484119 5313973 5314549 1154 4484463 4484806 5314893 5315236 688 4485150 4485499 5315580 5315929 700 4485501 4485735 5315931 5316165 470 4485737 4486325 5316167 5316755 1178 4486327 4486622 5316757 5317052 592 # chain 1130: length 2 score 806 4493190 4493434 5318623 5318867 490 4493667 4494057 5319100 5319490 782 # chain 1131: length 1 score 402 4535262 4535462 5365009 5365209 402 # chain 1132: length 1 score 1174 4536431 4537017 5366178 5366764 1174 # chain 1133: length 2 score 732 4538109 4538335 5367856 5368082 454 4538484 4538771 5368231 5368518 576 # chain 1134: length 1 score 508 4539505 4539758 5369252 5369505 508 # chain 1135: length 2 score 972 4540615 4540884 5370345 5370614 540 4540886 4541103 5370616 5370833 436 # chain 1136: length 1 score 588 4542032 4542325 5371762 5372055 588 # chain 1137: length 2 score 1328 4542802 4543107 5372531 5372836 612 4543111 4543472 5372840 5373201 724 # chain 1138: length 1 score 460 4544659 4544888 5374388 5374617 460 # chain 1139: length 2 score 904 4548476 4548708 5378136 5378368 466 4548909 4549328 5378569 5378988 840 # chain 1140: length 1 score 500 4550051 4550300 5379711 5379960 500 # chain 1141: length 2 score 658 4551504 4551751 5381165 5381412 496 4551873 4552075 5381534 5381736 406 # chain 1142: length 2 score 1130 4554158 4554568 5383819 5384229 822 4554676 4554937 5384337 5384598 524 # chain 1143: length 4 score 2106 4556607 4556926 5386268 5386587 640 4556976 4557328 5386637 5386989 706 4557330 4557696 5386991 5387357 734 4557847 4558062 5387508 5387723 432 # chain 1144: length 1 score 426 4561823 4562035 5399775 5399987 426 # chain 1145: length 1 score 594 4567898 4568194 5405866 5406162 594 # chain 1146: length 1 score 414 4586391 4586597 5418882 5419088 414 # chain 1147: length 3 score 1478 4589247 4589498 5422424 5422675 504 4589544 4589756 5422721 5422933 426 4589758 4590079 5422935 5423256 644 # chain 1148: length 4 score 2033 4591606 4591905 5424792 5425091 600 4592020 4592269 5425206 5425455 500 4592317 4592556 5425504 5425743 480 4592558 4592949 5425745 5426136 784 # chain 1149: length 1 score 1064 4594693 4595224 5427880 5428411 1064 # chain 1150: length 30 score 10456 4595901 4596268 5429088 5429455 736 4596459 4596916 5429646 5430103 916 4596918 4597156 5430105 5430343 478 4597495 4597826 5430682 5431013 664 4597828 4598336 5431015 5431523 1018 4598884 4599452 5432071 5432639 1138 4599469 4599869 5432656 5433056 802 4599871 4600306 5433058 5433493 872 4600811 4601319 5434000 5434508 1018 4601459 4601825 5434648 5435014 734 4601827 4602472 5435016 5435661 1292 4604188 4604575 5437063 5437450 776 4605120 4605567 5437995 5438442 896 4605846 4606069 5438721 5438944 448 4606201 4607439 5439076 5440314 2478 4607576 4607775 5440451 5440650 400 4607972 4608300 5440847 5441175 658 4608302 4608593 5441177 5441468 584 4608604 4609160 5441479 5442035 1114 4609548 4610186 5442423 5443061 1278 4610318 4610595 5443193 5443470 556 4610597 4611095 5443472 5443970 998 4613016 4613327 5445687 5445998 624 4613736 4614096 5446407 5446767 722 4614243 4614763 5446914 5447434 1042 4615143 4615543 5447814 5448214 802 4615599 4616269 5448270 5448940 1342 4616649 4616956 5449320 5449627 616 4617023 4617937 5449694 5450608 1830 4618311 4618887 5450982 5451558 1154 # chain 1151: length 2 score 1974 4637081 4637382 5468709 5469010 604 4637525 4638352 5469153 5469980 1656 genometools-1.5.1/testdata/chaindata/chain-local20-wf1.8000066400000000000000000003756361211610345200227150ustar00rootroot00000000000000# chain 0: length 1 score 1393 5851 6237 5868 6254 1393 # chain 1: length 14 score 10918 7627 7937 7644 7954 1119 8079 8457 8096 8474 1364 8687 8994 8704 9011 1108 8996 9375 9013 9392 1368 9377 9666 9394 9683 1044 10024 10406 10041 10423 1378 10408 10715 10425 10732 1108 11439 11663 11456 11680 810 11695 11898 11712 11915 734 12026 12235 12043 12252 756 12384 12712 12401 12729 1184 13131 13339 13148 13356 752 13719 14230 13736 14247 1843 14232 14645 14249 14662 1490 # chain 2: length 1 score 1450 25045 25447 29457 29859 1450 # chain 3: length 1 score 849 26789 27024 31164 31399 849 # chain 4: length 2 score 1775 27712 28067 32087 32442 1281 28223 28446 32598 32821 806 # chain 5: length 1 score 1216 29506 29843 33881 34218 1216 # chain 6: length 1 score 748 30706 30913 35081 35288 748 # chain 7: length 1 score 828 31887 32116 36262 36491 828 # chain 8: length 8 score 5127 33552 33766 37927 38141 774 34112 34597 38486 38971 1749 35170 35491 39577 39898 1159 35499 35831 39906 40238 1198 36263 36479 40670 40886 781 37032 37439 41439 41846 1468 37534 37775 41941 42182 871 37777 38103 42184 42510 1177 # chain 9: length 1 score 763 43562 43773 47976 48187 763 # chain 10: length 1 score 741 44455 44660 48869 49074 741 # chain 11: length 5 score 3160 45555 45805 49969 50219 903 45950 46173 50365 50588 806 46253 46632 50668 51047 1368 46901 47137 51316 51552 853 47515 47785 51930 52200 975 # chain 12: length 1 score 1332 49571 49940 53986 54355 1332 # chain 13: length 16 score 19954 51097 51551 56073 56527 1638 51621 51901 56597 56877 1011 51924 52135 56900 57111 763 53284 53627 58260 58603 1238 53902 54335 58878 59311 1562 54337 54981 59313 59957 2322 54983 56483 59959 61459 5403 56485 56939 61461 61915 1638 56941 57835 61917 62811 3222 57928 58141 62904 63117 770 59485 59772 64418 64705 1036 59831 60053 64764 64986 802 60245 60545 65178 65478 1083 60547 60890 65480 65823 1238 60943 61457 65876 66390 1854 61459 61700 66392 66633 871 # chain 14: length 4 score 2428 82978 83294 87586 87902 1141 83392 83799 88000 88407 1468 84493 84737 89099 89343 882 84949 85210 89555 89816 943 # chain 15: length 3 score 2328 87279 87522 91885 92128 878 87794 88118 92400 92724 1170 88120 88349 92726 92955 828 # chain 16: length 7 score 10388 4164382 4165237 227247 228102 3081 4165275 4165798 228140 228663 1886 4166150 4166354 229021 229225 738 4166865 4167388 229736 230259 1886 4167448 4167940 230318 230810 1774 4168084 4168332 230954 231202 896 4168430 4169134 231300 232004 2538 # chain 17: length 7 score 9922 4205569 4205867 226947 227245 1076 4205869 4206724 227247 228102 3081 4206762 4207279 228140 228657 1864 4208267 4208790 229736 230259 1886 4208850 4209342 230318 230810 1774 4209486 4209734 230954 231202 896 4209832 4210413 231300 231881 2095 # chain 18: length 7 score 10737 4033264 4034119 227247 228102 3081 4034157 4034674 228140 228657 1864 4034682 4035035 228665 229018 1274 4035744 4036270 229736 230262 1897 4036326 4036820 230318 230812 1782 4036971 4037212 230961 231202 871 4037310 4037891 231300 231881 2095 # chain 19: length 10 score 10545 3939284 3939507 226956 227179 806 3939656 3940331 227328 228003 2433 3940467 3940984 228140 228657 1864 3941255 3941460 229020 229225 741 3941972 3942495 229736 230259 1886 3942555 3943049 230318 230812 1782 3943061 3943439 230824 231202 1364 3943441 3943705 231204 231468 954 3943851 3944118 231614 231881 964 3944336 3944572 232098 232334 853 # chain 20: length 166 score 81460 89754 90328 94360 94934 2070 90591 90949 95197 95555 1292 91187 91785 95793 96391 2156 92474 92682 97080 97288 752 93089 93369 97695 97975 1011 94167 94384 98773 98990 784 94548 94791 99154 99397 878 95152 95370 99758 99976 788 95905 96359 100511 100965 1638 97113 97513 101719 102119 1443 98322 98775 102928 103381 1634 98906 99228 103512 103834 1162 99254 99649 103860 104255 1425 99651 99869 104257 104475 788 100432 100691 105038 105297 936 101175 101494 105781 106100 1152 101721 101923 106327 106529 730 102613 102831 107219 107437 788 102833 103359 107439 107965 1897 103604 103840 108210 108446 853 103842 104168 108448 108774 1177 104548 104822 109154 109428 990 104857 105545 109463 110151 2480 106099 107460 110705 112066 4903 107686 107909 112292 112515 806 108007 108211 112613 112817 738 108293 108597 112899 113203 1098 108848 109485 113454 114091 2296 109496 109707 114102 114313 763 109927 110184 114533 114790 928 110441 110658 115047 115264 784 110660 110901 115266 115507 871 110903 111227 115509 115833 1170 111661 112144 116151 116634 1742 112146 112457 116636 116947 1123 112459 112834 116949 117324 1353 112836 113047 117326 117537 763 113049 113268 117539 117758 792 113270 114090 117760 118580 2955 116535 116843 121025 121333 1112 117226 117573 121716 122063 1252 117842 118158 122332 122648 1141 118514 119177 123004 123667 2390 119259 119491 123749 123981 838 119493 119812 123983 124302 1152 120595 120848 125085 125338 914 121891 122239 126381 126729 1256 122496 122797 126986 127287 1087 122808 123161 127298 127651 1274 123931 124169 128421 128659 860 124522 124796 129012 129286 990 125410 125818 129900 130308 1472 127257 127734 131747 132224 1720 127882 128266 132255 132639 1386 128406 128650 132779 133023 882 128991 129196 133364 133569 741 130733 131096 135106 135469 1310 131188 131489 135561 135862 1087 131491 131699 135864 136072 752 133795 134045 138168 138418 903 134047 134547 138420 138920 1803 134594 134876 138967 139249 1018 134968 135254 139341 139627 1033 135256 135635 139629 140008 1368 135663 136121 140036 140494 1652 136240 136604 140613 140977 1314 136870 137101 141243 141474 835 137556 137806 141929 142179 903 139126 139355 143499 143728 828 141040 141304 145413 145677 954 141343 141710 145716 146083 1324 141797 142087 146170 146460 1047 142452 142814 146825 147187 1306 143270 143496 147643 147869 817 143498 143822 147871 148195 1170 144256 144630 148629 149003 1350 145072 145290 149445 149663 788 146145 146732 150518 151105 2116 157544 157954 161867 162277 1479 158023 158489 162346 162812 1681 158578 158792 162901 163115 774 159237 159483 163560 163806 889 160020 160261 164343 164584 871 160401 161512 164724 165835 4003 162678 162981 167001 167304 1094 164644 164931 168967 169254 1036 166100 166500 170423 170823 1443 166502 166932 170825 171255 1551 168428 168768 172751 173091 1227 169064 169426 173387 173749 1306 169759 169994 174082 174317 849 172286 172617 176609 176940 1195 174673 175242 178873 179442 2052 175991 176292 180191 180492 1087 176294 176862 180494 181062 2048 176876 177372 181076 181572 1789 177648 177933 181848 182133 1029 178131 178465 182331 182665 1206 178479 178867 182679 183067 1400 179070 179513 183270 183713 1598 180127 180427 184327 184627 1083 180820 181388 185020 185588 2048 181390 181646 185590 185846 925 181663 181940 185863 186140 1000 182343 182661 186543 186861 1148 183133 183406 187333 187606 986 183458 183671 187658 187871 770 183701 184121 187901 188321 1515 185630 186048 189117 189535 1508 188339 188709 191826 192196 1335 188711 189124 192198 192611 1490 189417 189686 192904 193173 972 189688 189955 193175 193442 964 189957 190705 193444 194192 2696 190707 191298 194194 194785 2131 191300 192509 194787 195996 4356 192775 193061 196120 196406 1033 193063 194127 196408 197472 3834 194165 194669 197510 198014 1818 195040 197671 198385 201016 9475 197790 198378 201135 201723 2120 198380 198621 201725 201966 871 199262 199926 202607 203271 2394 199928 200418 203273 203763 1767 200529 200809 203873 204153 1011 200811 201187 204155 204531 1357 201345 201607 204689 204951 946 201640 202500 204984 205844 3099 202808 203026 206152 206370 788 203135 203440 206479 206784 1101 204771 204985 208115 208329 774 204987 205202 208331 208546 777 205269 205525 208613 208869 925 206068 206371 209412 209715 1094 207123 207337 210467 210681 774 207939 208243 211283 211587 1098 208245 208771 211589 212115 1897 208773 209122 212117 212466 1260 209142 209380 212486 212724 860 209442 209817 212786 213161 1353 211763 212003 215107 215347 867 212180 212451 215524 215795 979 212952 213198 216296 216542 889 213337 213554 216681 216898 784 213819 214384 217164 217729 2037 215380 215675 218713 219008 1065 215949 216222 219282 219555 986 218188 218576 221520 221908 1400 218828 219224 222159 222555 1429 219732 220129 223063 223460 1432 220515 220882 223846 224213 1324 220884 221193 224215 224524 1116 221550 221915 224881 225246 1317 222448 222986 225779 226317 1940 222988 223316 226319 226647 1184 223538 223739 226870 227071 727 223915 224888 227247 228220 3506 224890 225585 228222 228917 2505 225900 226112 229232 229444 766 226604 226927 229936 230259 1166 226936 227481 230267 230812 1965 227623 227871 230954 231202 896 227969 228550 231300 231881 2095 228768 229025 232098 232355 928 229598 229840 232928 233170 874 229853 230143 233183 233473 1047 # chain 21: length 1 score 723 3622269 3622469 272913 273113 723 # chain 22: length 1 score 878 3622911 3623154 273555 273798 878 # chain 23: length 4 score 2458 1527877 1528098 275467 275688 799 1528181 1528512 275770 276101 1195 1529096 1529346 276684 276934 903 1529348 1529596 276935 277183 896 # chain 24: length 1 score 1195 297132 297463 330317 330648 1195 # chain 25: length 1 score 1119 299169 299479 332354 332664 1119 # chain 26: length 1 score 936 300524 300783 333709 333968 936 # chain 27: length 1 score 921 301750 302005 334935 335190 921 # chain 28: length 4 score 2207 305109 305541 338294 338726 1558 306139 306369 339324 339554 831 306382 306626 339567 339811 882 306907 307106 340092 340291 720 # chain 29: length 1 score 1170 308316 308640 341501 341825 1170 # chain 30: length 1 score 1141 309476 309792 342661 342977 1141 # chain 31: length 1 score 982 313588 313860 353941 354213 982 # chain 32: length 1 score 835 316129 316360 358934 359165 835 # chain 33: length 7 score 4123 318125 318630 361618 362123 1821 318632 318938 362125 362431 1105 319028 319326 362521 362819 1076 319744 320032 363237 363525 1040 321266 321471 364759 364964 741 321473 321699 364966 365192 817 322401 323072 365894 366565 2419 # chain 34: length 6 score 6763 328133 328560 376575 377002 1540 328661 329008 377103 377450 1252 329022 329383 377464 377825 1303 329619 330088 378061 378530 1692 330090 330409 378532 378851 1152 330540 330759 378982 379201 792 # chain 35: length 1 score 1184 332518 332846 384784 385112 1184 # chain 36: length 5 score 2850 334160 334386 386435 386661 817 334409 334749 386684 387024 1227 335190 335460 387465 387735 975 335793 336128 388068 388403 1209 336547 336839 388822 389114 1054 # chain 37: length 1 score 752 340819 341027 393187 393395 752 # chain 38: length 1 score 874 341549 341791 393917 394159 874 # chain 39: length 3 score 4018 342414 343104 399888 400578 2487 343301 343735 400775 401209 1566 343919 344120 401393 401594 727 # chain 40: length 1 score 1771 351607 352098 408800 409291 1771 # chain 41: length 1 score 957 354178 354443 411935 412200 957 # chain 42: length 2 score 2357 355443 355817 413200 413574 1350 355819 356099 413576 413856 1011 # chain 43: length 1 score 1022 358310 358593 415864 416147 1022 # chain 44: length 1 score 838 361300 361532 418854 419086 838 # chain 45: length 2 score 1914 362254 362582 419808 420136 1184 362638 362871 420192 420425 842 # chain 46: length 1 score 730 367228 367430 426606 426808 730 # chain 47: length 5 score 3593 368110 368314 427488 427692 738 368569 368964 427947 428342 1425 369620 370014 428998 429392 1422 370352 370704 429730 430082 1270 370840 371258 430218 430636 1508 # chain 48: length 2 score 2136 374964 375281 433940 434257 1144 375474 375856 434450 434832 1378 # chain 49: length 1 score 1242 378703 379047 437579 437923 1242 # chain 50: length 3 score 2201 385128 385475 446908 447255 1252 385631 385848 447411 447628 784 386054 386300 447834 448080 889 # chain 51: length 1 score 752 388046 388254 449826 450034 752 # chain 52: length 153 score 87550 392824 393267 453381 453824 1598 393274 393475 453831 454032 727 393537 394358 454094 454915 2959 394579 394841 455136 455398 946 394843 395354 455400 455911 1843 396828 397102 457385 457659 990 397218 397459 457775 458016 871 397707 397942 458264 458499 849 398247 398697 458804 459254 1623 398813 399102 459370 459659 1044 399920 400442 460477 460999 1882 400542 401106 461099 461663 2034 401519 401862 462076 462419 1238 402894 403806 463451 464363 3286 404119 404330 464676 464887 763 404764 405189 465321 465746 1533 405269 405498 465826 466055 828 405500 406133 466057 466690 2282 406247 406472 466804 467029 813 408239 408627 471103 471491 1400 409019 409683 471883 472547 2394 409685 409949 472549 472813 954 409951 410158 472815 473022 748 410779 411080 473541 473842 1087 411169 411404 473931 474166 849 411927 412377 474689 475139 1623 412584 412810 475343 475569 817 414347 414694 477106 477453 1252 414876 415176 477635 477935 1083 415178 416519 477937 479278 4831 416521 417497 479280 480256 3517 417578 417798 480337 480557 795 418074 418301 480833 481060 820 418498 419130 481257 481889 2278 419564 421545 482323 484304 7135 421585 421886 484344 484645 1087 421918 422324 484677 485083 1465 424420 424775 488828 489183 1281 425323 425610 489730 490017 1036 425918 426348 490325 490755 1551 426350 427121 490757 491528 2779 427123 427330 491530 491737 748 427941 428188 492348 492595 892 428418 428807 492825 493214 1404 429056 429386 493463 493793 1191 429762 430016 494795 495049 918 430020 430256 495053 495289 853 430318 430569 495351 495602 907 430571 430945 495604 495978 1350 430974 431460 496007 496493 1753 431796 432032 496829 497065 853 432068 432415 497101 497448 1252 432423 432739 497456 497772 1141 433707 433976 498740 499009 972 434137 434777 499170 499810 2307 435013 435485 500046 500518 1702 437781 438101 504612 504932 1155 440107 440365 506938 507196 932 440367 440657 507198 507488 1047 440659 440932 507490 507763 986 441081 441412 507912 508243 1195 443866 444069 510697 510900 734 445270 445481 512101 512312 763 446240 446460 513071 513291 795 446699 446996 513530 513827 1072 447154 447388 513985 514219 846 447558 447851 514389 514682 1058 447853 448076 514684 514907 806 448714 449491 515545 516322 2800 449557 450019 516388 516850 1666 450118 450394 516949 517225 997 450523 450872 517354 517703 1260 451229 451856 518060 518687 2260 451981 452222 518812 519053 871 453065 453331 519896 520162 961 453527 454666 520358 521497 4104 454668 455257 521499 522088 2124 455277 455482 522108 522313 741 455714 455976 522544 522806 946 456098 456384 522928 523214 1033 456386 456860 523216 523690 1710 457429 457823 524259 524653 1422 457825 458484 524655 525314 2376 459551 459759 526381 526589 752 460049 460278 526879 527108 828 460442 460891 527272 527721 1620 460893 461307 527723 528137 1494 461309 461526 528139 528356 784 462603 462994 529433 529824 1411 463853 464078 530696 530921 813 467804 468197 534646 535039 1418 468592 469367 535434 536209 2793 469369 469914 536211 536756 1965 469916 470310 536758 537152 1422 471002 471234 537844 538076 838 471715 471981 538557 538823 961 471983 472235 538825 539077 910 472804 473033 539646 539875 828 473738 473940 540580 540782 730 474071 474282 540913 541124 763 474284 474519 541126 541361 849 475605 475824 542449 542668 792 476138 476384 542982 543228 889 476386 476706 543230 543550 1155 476749 477036 543593 543880 1036 477185 477438 544029 544282 914 477689 477900 544533 544744 763 478299 478541 545143 545385 874 478557 478830 545401 545674 986 478832 479540 545676 546384 2552 479542 479820 546386 546664 1004 479873 480097 546717 546941 810 480156 480358 547000 547202 730 480500 480797 547344 547641 1072 480799 481310 547643 548154 1843 481312 481595 548156 548439 1022 482005 482228 548849 549072 806 482401 482648 549245 549492 892 483364 483867 550208 550711 1814 483869 484107 550713 550951 860 484109 485087 550953 551931 3524 485569 486007 552413 552851 1580 486512 487233 553356 554077 2599 488357 488580 555201 555424 806 488648 489096 555492 555940 1616 490156 490806 556830 557480 2343 491016 491281 557690 557955 957 491283 491685 557957 558359 1450 491936 492348 558610 559022 1486 492431 492726 559105 559400 1065 493578 493812 560252 560486 846 494565 494791 561239 561465 817 495183 495536 561857 562210 1274 495813 496141 562487 562815 1184 496339 496774 563013 563448 1569 497201 497557 563771 564127 1285 497559 497843 564129 564413 1026 497944 498191 564514 564761 892 498193 498515 564763 565085 1162 498526 498795 565096 565365 972 499179 499394 565749 565964 777 500429 500704 566999 567274 993 500996 501197 567566 567767 727 501503 501749 568073 568319 889 501869 502227 568439 568797 1292 502292 502522 568862 569092 831 502841 503244 569410 569813 1454 503252 503472 569821 570041 795 504201 504498 570770 571067 1072 505313 505596 571882 572165 1022 505598 505808 572167 572377 759 505872 506092 572441 572661 795 506287 506526 572856 573095 864 # chain 53: length 2 score 1282 630745 630986 712774 713015 871 631312 631606 713340 713634 1062 # chain 54: length 2 score 2486 632574 632966 714602 714994 1414 632979 633283 715007 715311 1098 # chain 55: length 104 score 32611 634659 634927 716687 716955 968 635077 635401 717105 717429 1170 635427 635641 717455 717669 774 636170 636533 718198 718561 1310 636536 636836 718564 718864 1083 637362 637684 719391 719713 1162 638120 638730 720149 720759 2199 638868 639189 720781 721102 1159 639566 640314 721479 722227 2696 640316 640593 722229 722506 1000 640892 641234 722805 723147 1234 642033 642290 723946 724203 928 642891 643209 724804 725122 1148 644297 644559 726210 726472 946 644561 644779 726474 726692 788 644973 645331 726886 727244 1292 645498 645842 727411 727755 1242 647520 647719 729433 729632 720 649072 649283 730985 731196 763 649579 649804 731492 731717 813 649806 650219 731719 732132 1490 650628 650837 732541 732750 756 650876 651180 732789 733093 1098 651311 651673 733225 733587 1306 651675 652010 733589 733924 1209 652417 653081 734331 734995 2394 653198 653517 735112 735431 1152 653983 654464 735897 736378 1735 654466 654803 736380 736717 1216 654805 655172 736719 737086 1324 655895 656260 737809 738174 1317 656433 656770 738347 738684 1216 657882 658118 739796 740032 853 658120 658708 740034 740622 2120 659170 659781 741084 741695 2203 660230 660504 742144 742418 990 660926 661239 742841 743154 1130 661580 661967 743495 743882 1396 662074 662309 743989 744224 849 662383 662585 744298 744500 730 662887 663221 744802 745136 1206 664333 664703 746249 746619 1335 664705 665241 746621 747157 1933 665243 665466 747159 747382 806 666505 666713 748421 748629 752 667222 667583 749138 749499 1303 667591 668054 749507 749970 1670 668158 668473 750074 750389 1137 669211 669463 751127 751379 910 670619 670859 752535 752775 867 671335 671569 753251 753485 846 671571 671785 753487 753701 774 672021 672412 753937 754328 1411 673391 673786 755307 755702 1425 673815 674028 755731 755944 770 674051 675151 755968 757068 3963 677843 678132 759761 760050 1044 678134 678600 760052 760518 1681 678602 678830 760520 760748 824 678850 679052 760768 760970 730 681591 681847 763509 763765 925 682257 682767 764175 764685 1839 684323 684524 766241 766442 727 685476 685705 767394 767623 828 685740 686034 767658 767952 1062 688616 688831 769335 769550 777 688851 689134 769570 769853 1022 689217 689468 769936 770187 907 689820 690238 770539 770957 1508 690471 690733 771190 771452 946 690801 691086 771520 771805 1029 691088 691289 771807 772008 727 691978 692324 772697 773043 1249 692326 692555 773045 773274 828 692817 693047 773536 773766 831 693822 694270 774541 774989 1616 695606 695851 776325 776570 885 695874 696078 776594 776798 738 696270 696632 776991 777353 1306 696634 696833 777355 777554 720 697180 697385 777901 778106 741 697522 697742 778243 778463 795 699406 699661 779987 780242 921 700002 700264 780583 780845 946 700584 700890 781165 781471 1105 701579 702110 782160 782691 1915 702468 702698 783049 783279 831 702742 702979 783323 783560 856 703130 703371 783711 783952 871 705239 705550 785820 786131 1123 706141 706441 786722 787022 1083 706486 706753 787067 787334 964 706755 707162 787336 787743 1468 707278 707506 787860 788088 824 708561 708778 789143 789360 784 709471 709878 790053 790460 1468 710074 710450 790658 791034 1357 710452 710910 791036 791494 1652 711047 711367 791631 791951 1155 711957 712391 792541 792975 1566 712452 713063 793036 793647 2203 713548 713768 794132 794352 795 713980 714185 794564 794769 741 714202 714427 794786 795011 813 # chain 56: length 3 score 2390 3759827 3760224 807809 808206 1432 3760533 3760761 808515 808743 824 3760763 3760972 808745 808954 756 # chain 57: length 3 score 2164 3616903 3617237 807872 808206 1206 3617546 3617774 808515 808743 824 3617776 3617985 808745 808954 756 # chain 58: length 1 score 936 3619531 3619790 810500 810759 936 # chain 59: length 2 score 1244 3762518 3762777 810500 810759 936 3762983 3763182 810965 811164 720 # chain 60: length 1 score 720 3762983 3763182 812836 813035 720 # chain 61: length 1 score 1198 3622137 3622469 816144 816476 1198 # chain 62: length 11 score 9994 752906 753108 831982 832184 730 753323 753555 832399 832631 838 753774 754160 832850 833236 1393 754162 754523 833238 833599 1303 754525 754894 833601 833970 1332 754937 755175 834013 834251 860 755177 755538 834253 834614 1303 756746 756993 835822 836069 892 757037 757458 836113 836534 1519 757532 758196 836608 837272 2394 758228 758536 837304 837612 1112 # chain 63: length 12 score 10001 770806 771368 857743 858305 2026 771946 772340 858883 859277 1422 773272 773491 860209 860428 792 773648 773855 860585 860792 748 773858 774113 860795 861050 921 774115 774466 861052 861403 1267 774969 775208 861906 862145 864 775210 775688 862147 862625 1724 776440 776847 863296 863703 1468 776849 777074 863705 863930 813 777898 778946 864754 865802 3776 779241 779851 866097 866707 2199 # chain 64: length 7 score 4336 792220 792631 878518 878929 1483 792781 793021 879079 879319 867 793739 794339 880037 880637 2163 795078 795295 881376 881593 784 795297 795571 881595 881869 990 795678 795934 881976 882232 925 796493 796957 882791 883255 1674 # chain 65: length 2 score 2150 799265 799593 885563 885891 1184 799810 800198 886108 886496 1400 # chain 66: length 2 score 1148 801521 801779 887820 888078 932 802234 802546 888533 888845 1126 # chain 67: length 2 score 1426 803451 803675 889750 889974 810 803889 804178 890188 890477 1044 # chain 68: length 1 score 1026 808412 808696 933207 933491 1026 # chain 69: length 1 score 824 812635 812863 937431 937659 824 # chain 70: length 1 score 817 816179 816405 940974 941200 817 # chain 71: length 3 score 2031 817052 817372 941847 942167 1155 817661 818015 942456 942810 1278 818373 818620 943168 943415 892 # chain 72: length 5 score 7605 821380 821785 946177 946582 1461 822333 822592 947130 947389 936 822609 823614 947406 948411 3621 823616 824135 948413 948932 1872 824137 824373 948934 949170 853 # chain 73: length 1 score 856 832197 832434 959067 959304 856 # chain 74: length 1 score 1206 833381 833715 960251 960585 1206 # chain 75: length 1 score 738 839012 839216 965895 966099 738 # chain 76: length 2 score 2571 840524 840835 967407 967718 1123 841097 841644 967980 968527 1972 # chain 77: length 1 score 1526 842958 843381 969841 970264 1526 # chain 78: length 18 score 5729 845147 845349 971886 972088 730 845602 846029 972341 972768 1540 846823 847308 973562 974047 1749 847608 847920 974347 974659 1126 848682 849037 975421 975776 1281 849246 849751 975985 976490 1821 849867 850072 976606 976811 741 850999 851479 977738 978218 1731 851481 851716 978220 978455 849 852048 852287 978787 979026 864 852947 853168 979686 979907 799 854794 855005 981532 981743 763 855107 855585 981846 982324 1724 855680 855976 982419 982715 1069 857016 857221 983682 983887 741 857661 858292 984327 984958 2275 858469 858722 985136 985389 914 858802 859015 985469 985682 770 # chain 79: length 9 score 5266 865489 865766 992258 992535 1000 865768 866004 992537 992773 853 866423 866794 993192 993563 1339 867315 867529 994084 994298 774 867711 867937 994480 994706 817 868317 868769 995086 995538 1630 868960 869172 995729 995941 766 869174 869379 995943 996148 741 869581 869898 996350 996667 1144 # chain 80: length 29 score 16074 876323 876735 1004046 1004458 1486 877193 877408 1004916 1005131 777 877453 877976 1005176 1005699 1886 878102 878316 1005825 1006039 774 878360 878829 1006083 1006552 1692 878948 879177 1006671 1006900 828 879179 879387 1006902 1007110 752 879419 879669 1007142 1007392 903 879671 879890 1007394 1007613 792 880033 880370 1007755 1008092 1216 880495 880731 1008217 1008453 853 881337 881536 1009059 1009258 720 881772 882057 1009494 1009779 1029 882059 882304 1009781 1010026 885 882494 882787 1010216 1010509 1058 882789 883106 1010511 1010828 1144 884251 884485 1011973 1012207 846 885244 885697 1012966 1013419 1634 886891 887165 1014613 1014887 990 887198 887424 1014920 1015146 817 887729 888012 1015451 1015734 1022 888014 888372 1015736 1016094 1292 888374 888603 1016096 1016325 828 888605 889068 1016327 1016790 1670 889734 889950 1017457 1017673 781 890478 890689 1018201 1018412 763 891140 891620 1018863 1019343 1731 891622 891884 1019345 1019607 946 892279 892609 1020002 1020332 1191 # chain 81: length 1 score 788 906687 906905 1040236 1040454 788 # chain 82: length 1 score 968 910222 910490 1043771 1044039 968 # chain 83: length 1 score 979 912033 912304 1045582 1045853 979 # chain 84: length 1 score 1202 912852 913185 1046401 1046734 1202 # chain 85: length 1 score 813 913841 914066 1047390 1047615 813 # chain 86: length 2 score 1913 914986 915276 1048498 1048788 1047 915473 915822 1048985 1049334 1260 # chain 87: length 12 score 10252 916829 917061 1050341 1050573 838 917267 917535 1050779 1051047 968 917540 917745 1051052 1051257 741 917978 918269 1051490 1051781 1051 918885 919119 1052397 1052631 846 919198 919517 1052710 1053029 1152 919680 919897 1053192 1053409 784 920748 920974 1054260 1054486 817 921171 921406 1054683 1054918 849 921408 921951 1054920 1055463 1958 921953 923120 1055465 1056632 4204 923158 923387 1056670 1056899 828 # chain 88: length 1 score 882 4505653 4505897 1069810 1070054 882 # chain 89: length 1 score 1288 4505889 4506246 1072496 1072853 1288 # chain 90: length 1 score 828 4506249 4506478 1083883 1084112 828 # chain 91: length 138 score 89859 925370 926038 1146447 1147115 2408 926040 926242 1147117 1147319 730 926275 927044 1147352 1148121 2772 927564 927936 1148641 1149013 1342 928215 928771 1149292 1149848 2005 929811 930058 1150888 1151135 892 930060 930372 1151137 1151449 1126 930878 931200 1151955 1152277 1162 931202 931652 1152279 1152729 1623 931654 932145 1152731 1153222 1771 932147 932461 1153224 1153538 1134 932463 932760 1153540 1153837 1072 932762 933125 1153839 1154202 1310 933127 933504 1154204 1154581 1360 933506 933899 1154583 1154976 1418 934265 934466 1155342 1155543 727 934900 935127 1156016 1156243 820 935833 936177 1156949 1157293 1242 936449 937304 1157561 1158416 3081 937477 937691 1158589 1158803 774 937915 939255 1159027 1160367 4827 939544 939872 1160656 1160984 1184 940110 940343 1161222 1161455 842 940345 940662 1161457 1161774 1144 940818 941235 1161930 1162347 1504 941576 941796 1162688 1162908 795 941798 942102 1162910 1163214 1098 942182 942703 1163294 1163815 1879 942837 943313 1163949 1164425 1717 944568 944819 1165681 1165932 907 947729 947977 1168843 1169091 896 949842 950418 1169485 1170061 2077 950612 950835 1170255 1170478 806 950843 951066 1170486 1170709 806 951068 951282 1170711 1170925 774 951527 951807 1171170 1171450 1011 951809 952170 1171452 1171813 1303 952556 952839 1172199 1172482 1022 953456 954057 1173099 1173700 2167 954464 954780 1174107 1174423 1141 954788 955050 1174431 1174693 946 955595 955818 1175238 1175461 806 955820 956426 1175463 1176069 2185 956495 956920 1176138 1176563 1533 956922 957317 1176565 1176960 1425 957533 957833 1177176 1177476 1083 957895 958245 1177538 1177888 1263 958403 958989 1178046 1178632 2113 959615 959829 1179258 1179472 774 960300 960526 1179943 1180169 817 960846 961677 1180489 1181320 2995 961679 962145 1181322 1181788 1681 962147 962362 1181790 1182005 777 962364 962754 1182007 1182397 1407 962919 963340 1182562 1182983 1519 965709 965910 1185351 1185552 727 966533 966747 1186175 1186389 774 967358 967892 1187000 1187534 1926 967894 968156 1187536 1187798 946 969047 969265 1188689 1188907 788 969408 969720 1189050 1189362 1126 970335 970540 1189977 1190182 741 970794 971099 1190436 1190741 1101 971310 971536 1190952 1191178 817 971538 971891 1191180 1191533 1274 972562 972883 1192204 1192525 1159 972954 973162 1192596 1192804 752 973976 974202 1193618 1193844 817 974738 974941 1194380 1194583 734 975378 975600 1195020 1195242 802 975602 975903 1195244 1195545 1087 977765 977979 1197407 1197621 774 978464 978717 1198106 1198359 914 979620 979833 1199262 1199475 770 979981 980296 1199623 1199938 1137 980460 980813 1200102 1200455 1274 981037 981299 1200679 1200941 946 981721 982168 1201363 1201810 1612 982352 982589 1201994 1202231 856 983103 983419 1202745 1203061 1141 983832 984346 1203303 1203817 1854 984627 985057 1204098 1204528 1551 985059 985398 1204530 1204869 1224 985636 986069 1205107 1205540 1562 987711 987927 1207182 1207398 781 987929 988141 1207400 1207612 766 988170 988513 1207641 1207984 1238 988675 988984 1208146 1208455 1116 989214 989491 1208685 1208962 1000 989493 989995 1208964 1209466 1810 990318 990643 1209789 1210114 1173 993345 993771 1212816 1213242 1537 996936 997312 1216408 1216784 1357 999032 999400 1218503 1218871 1328 999491 999719 1218962 1219190 824 1002117 1002693 1221589 1222165 2077 1002826 1003134 1222298 1222606 1112 1003382 1003613 1222854 1223085 835 1003817 1004072 1223288 1223543 921 1004749 1005070 1224220 1224541 1159 1005285 1005529 1224756 1225000 882 1005582 1005955 1225053 1225426 1346 1006031 1006261 1225502 1225732 831 1006952 1007367 1226423 1226838 1497 1007987 1008250 1227458 1227721 950 1008824 1009376 1228295 1228847 1990 1009477 1009703 1228948 1229174 817 1011376 1011728 1230847 1231199 1270 1012105 1012725 1231576 1232196 2235 1013177 1013397 1232648 1232868 795 1013621 1013877 1233092 1233348 925 1013960 1014248 1233431 1233719 1040 1014406 1014739 1233877 1234210 1202 1014741 1016713 1234212 1236184 7102 1016737 1017056 1236208 1236527 1152 1017058 1017762 1236529 1237233 2538 1017764 1018240 1237235 1237711 1717 1018242 1018915 1237713 1238386 2426 1018917 1019555 1238388 1239026 2300 1019679 1020273 1239150 1239744 2142 1020275 1020545 1239746 1240016 975 1020547 1021341 1240018 1240812 2862 1021343 1021732 1240814 1241203 1404 1021734 1022021 1241205 1241492 1036 1022023 1022522 1241494 1241993 1800 1022524 1023481 1241995 1242952 3448 1023483 1023904 1242954 1243375 1519 1024077 1024471 1243548 1243942 1422 1024473 1024744 1243944 1244215 979 1024767 1025083 1244238 1244554 1141 1025085 1025507 1244556 1244978 1522 1025655 1025859 1245126 1245330 738 1025861 1026359 1245332 1245830 1796 1026361 1027147 1245832 1246618 2833 1027783 1028072 1247254 1247543 1044 1028797 1029104 1248268 1248575 1108 1029106 1029377 1248577 1248848 979 1029451 1029767 1248922 1249238 1141 # chain 92: length 1 score 741 1068256 1068461 1393625 1393830 741 # chain 93: length 1 score 781 1070073 1070289 1395442 1395658 781 # chain 94: length 1 score 982 1073596 1073868 1398965 1399237 982 # chain 95: length 1 score 763 1075019 1075230 1400388 1400599 763 # chain 96: length 1 score 1602 1078198 1078642 1403567 1404011 1602 # chain 97: length 16 score 30875 1080889 1081661 1408390 1409162 2782 1081663 1081907 1409164 1409408 882 1083213 1083564 1410714 1411065 1267 1084147 1084615 1411647 1412115 1688 1084617 1085220 1412117 1412720 2174 1085337 1086089 1412837 1413589 2710 1086091 1086892 1413591 1414392 2887 1086894 1088334 1414394 1415834 5187 1088336 1088973 1415836 1416473 2296 1088975 1089198 1416475 1416698 806 1089200 1090692 1416700 1418192 5374 1090694 1091324 1418194 1418824 2271 1091338 1091738 1418838 1419238 1443 1091740 1092322 1419240 1419822 2098 1092582 1092822 1420082 1420322 867 1093020 1093334 1420520 1420834 1134 # chain 98: length 1 score 774 1094725 1094939 1452708 1452922 774 # chain 99: length 1 score 792 1095905 1096124 1453888 1454107 792 # chain 100: length 1 score 882 4505653 4505897 1465417 1465661 882 # chain 101: length 1 score 1288 4505889 4506246 1468103 1468460 1288 # chain 102: length 1 score 828 4506249 4506478 1479490 1479719 828 # chain 103: length 1 score 1058 1097354 1097647 1542356 1542649 1058 # chain 104: length 3 score 1928 1098625 1098917 1543627 1543919 1054 1099210 1099412 1544212 1544414 730 1099457 1099684 1544459 1544686 820 # chain 105: length 92 score 37342 1100764 1101034 1545766 1546036 975 1101045 1101339 1546047 1546341 1062 1101674 1101989 1546676 1546991 1137 1102092 1102363 1547094 1547365 979 1102365 1102618 1547367 1547620 914 1103104 1103471 1548106 1548473 1324 1103473 1103754 1548475 1548756 1015 1104258 1104697 1549263 1549702 1584 1104825 1105118 1549830 1550123 1058 1105264 1105635 1550269 1550640 1339 1107124 1107413 1552129 1552418 1044 1108271 1108657 1553275 1553661 1393 1108681 1108924 1553685 1553928 878 1109346 1109632 1554350 1554636 1033 1109634 1109956 1554638 1554960 1162 1110421 1110740 1555425 1555744 1152 1113150 1113674 1558154 1558678 1890 1114033 1114253 1559037 1559257 795 1114604 1115018 1559608 1560022 1494 1115539 1116064 1560543 1561068 1893 1117589 1117965 1562593 1562969 1357 1118292 1118588 1563296 1563592 1069 1118709 1118950 1563713 1563954 871 1119159 1119388 1564163 1564392 828 1119723 1119947 1564727 1564951 810 1119949 1120261 1564953 1565265 1126 1120588 1120794 1565595 1565801 745 1122359 1122620 1567366 1567627 943 1122622 1123084 1567629 1568091 1666 1123086 1123315 1568093 1568322 828 1123562 1123837 1568569 1568844 993 1124397 1124875 1569404 1569882 1724 1124877 1125079 1569884 1570086 730 1125081 1125401 1570088 1570408 1155 1126416 1126638 1571423 1571645 802 1126972 1127504 1571979 1572511 1918 1130129 1130410 1575136 1575417 1015 1130432 1130769 1575439 1575776 1216 1130915 1131189 1575922 1576196 990 1131307 1131584 1576314 1576591 1000 1131710 1132007 1576717 1577014 1072 1132639 1132844 1577643 1577848 741 1133931 1134198 1578901 1579168 964 1134305 1134543 1579275 1579513 860 1134765 1135042 1579735 1580012 1000 1135209 1135533 1580179 1580503 1170 1135535 1135746 1580505 1580716 763 1138152 1138351 1583122 1583321 720 1141656 1141899 1586625 1586868 878 1141974 1142422 1586943 1587391 1616 1142424 1142719 1587393 1587688 1065 1142772 1144076 1587741 1589045 4698 1144231 1144610 1589200 1589579 1368 1145893 1146095 1590851 1591053 730 1146097 1146768 1591055 1591726 2419 1147425 1147659 1592383 1592617 846 1147661 1148426 1592619 1593384 2757 1148428 1148768 1593386 1593726 1227 1148860 1149134 1593818 1594092 990 1149679 1149887 1594637 1594845 752 1150045 1150495 1595003 1595453 1623 1150497 1150934 1595455 1595892 1576 1150936 1151627 1595894 1596585 2491 1151758 1152008 1596716 1596966 903 1152010 1152308 1596968 1597266 1076 1154189 1154470 1599147 1599428 1015 1154963 1155234 1599921 1600192 979 1155446 1155681 1600404 1600639 849 1155893 1156144 1600851 1601102 907 1156829 1157332 1601788 1602291 1814 1157334 1158035 1602293 1602994 2527 1158102 1158403 1603061 1603362 1087 1158405 1158624 1603364 1603583 792 1158834 1159823 1603793 1604782 3564 1160058 1160311 1605017 1605270 914 1160313 1160669 1605272 1605628 1285 1161060 1161369 1606039 1606348 1116 1161617 1162284 1606596 1607263 2404 1162328 1162545 1607307 1607524 784 1162766 1163050 1607745 1608029 1026 1163052 1163417 1608031 1608396 1317 1164290 1164504 1609269 1609483 774 1165119 1165326 1610099 1610306 748 1166429 1166655 1611409 1611635 817 1167097 1167326 1612094 1612323 828 1167728 1168624 1612725 1613621 3229 1168633 1168993 1613631 1613991 1299 1169409 1169754 1614407 1614752 1245 1170137 1170390 1615135 1615388 914 1170542 1170789 1615540 1615787 892 1170869 1171139 1615867 1616137 975 1171339 1171569 1616337 1616567 831 # chain 106: length 3 score 1630 2066961 2067174 1670009 1670222 770 2067176 2067392 1670224 1670440 781 2067795 2068041 1670843 1671089 889 # chain 107: length 4 score 2410 1465932 1466145 1670009 1670222 770 1466147 1466363 1670224 1670440 781 1466766 1467012 1670843 1671089 889 1467014 1467231 1671091 1671308 784 # chain 108: length 4 score 2406 2994382 2994594 1670010 1670222 766 2994596 2994812 1670224 1670440 781 2995215 2995461 1670843 1671089 889 2995463 2995680 1671091 1671308 784 # chain 109: length 3 score 4070 1183589 1184030 1674604 1675045 1591 1184592 1185541 1675607 1676556 3420 1186128 1186504 1677143 1677519 1357 # chain 110: length 8 score 5216 1188196 1188482 1694671 1694957 1033 1188520 1189014 1694995 1695489 1782 1190190 1190410 1696665 1696885 795 1190490 1190704 1696965 1697179 774 1191000 1191427 1697475 1697902 1540 1191581 1191893 1698056 1698368 1126 1192367 1192596 1698842 1699071 828 1192607 1193105 1699082 1699580 1796 # chain 111: length 1 score 972 565716 565985 1704987 1705256 972 # chain 112: length 4 score 4380 567536 567757 1705546 1705767 799 568108 568821 1706108 1706821 2570 568871 569157 1706871 1707157 1033 569159 569373 1707159 1707373 774 # chain 113: length 2 score 2350 578659 578872 1712660 1712873 770 579034 579562 1713035 1713563 1904 # chain 114: length 2 score 1997 581384 581668 1743635 1743919 1026 581670 581940 1743921 1744191 975 # chain 115: length 1 score 2314 584218 584860 1749285 1749927 2314 # chain 116: length 23 score 11775 1223501 1223728 1753170 1753397 820 1223730 1224097 1753399 1753766 1324 1224276 1224584 1753945 1754253 1112 1224724 1224971 1754393 1754640 892 1225028 1225507 1754697 1755176 1728 1225637 1225893 1755306 1755562 925 1226447 1226673 1756116 1756342 817 1226859 1227359 1756528 1757028 1803 1227866 1228311 1757535 1757980 1605 1229087 1229304 1758756 1758973 784 1230079 1230469 1759748 1760138 1407 1230471 1230676 1760140 1760345 741 1232248 1232471 1761917 1762140 806 1232606 1232814 1762275 1762483 752 1232921 1233214 1762590 1762883 1058 1233216 1233441 1762885 1763110 813 1234072 1234389 1763742 1764059 1144 1234682 1234894 1764352 1764564 766 1235295 1235605 1764965 1765275 1119 1235979 1236510 1765649 1766180 1915 1236747 1237304 1766450 1767007 2008 1237399 1237736 1767102 1767439 1216 1237918 1238175 1767621 1767878 928 # chain 117: length 1 score 1281 1244959 1245314 1782097 1782452 1281 # chain 118: length 1 score 741 1247120 1247325 1784245 1784450 741 # chain 119: length 1 score 784 1248014 1248231 1785139 1785356 784 # chain 120: length 1 score 2725 1249651 1250407 1786776 1787532 2725 # chain 121: length 1 score 871 1253751 1253992 1787740 1787981 871 # chain 122: length 1 score 774 1254762 1254976 1788751 1788965 774 # chain 123: length 78 score 39659 1255802 1256209 1789866 1790273 1468 1256241 1256512 1790305 1790576 979 1256522 1256851 1790586 1790915 1188 1257015 1257237 1791079 1791301 802 1257611 1257936 1791675 1792000 1173 1257938 1258387 1792002 1792451 1620 1258476 1258767 1792540 1792831 1051 1259433 1259722 1793497 1793786 1044 1259787 1260338 1793851 1794402 1987 1260493 1260912 1794557 1794976 1512 1261084 1261616 1795148 1795680 1918 1261948 1262344 1796012 1796408 1429 1262346 1262775 1796410 1796839 1548 1263548 1264381 1797612 1798445 3002 1264383 1264604 1798447 1798668 799 1264789 1265051 1798853 1799115 946 1265092 1265699 1799156 1799763 2188 1265755 1266058 1799819 1800122 1094 1266060 1266295 1800124 1800359 849 1266477 1266715 1800541 1800779 860 1266773 1267176 1800837 1801240 1454 1267516 1267889 1801580 1801953 1346 1268797 1269100 1802861 1803164 1094 1269947 1270177 1804001 1804231 831 1270815 1271177 1804869 1805231 1306 1271365 1271578 1805419 1805632 770 1272700 1272973 1806757 1807030 986 1274609 1274904 1808667 1808962 1065 1274906 1275166 1808964 1809224 939 1275375 1275709 1809433 1809767 1206 1275986 1276261 1810044 1810319 993 1276656 1276982 1810714 1811040 1177 1277047 1277361 1811105 1811419 1134 1278013 1278290 1812071 1812348 1000 1278921 1279555 1812856 1813490 2286 1280043 1280875 1813978 1814810 2998 1281324 1281649 1815259 1815584 1173 1281822 1282332 1815757 1816267 1839 1282500 1282720 1816435 1816655 795 1283051 1283499 1816986 1817434 1616 1284041 1284605 1817976 1818540 2034 1285008 1285243 1818943 1819178 849 1286759 1287018 1820516 1820775 936 1287649 1287858 1821406 1821615 756 1288191 1288609 1821948 1822366 1508 1289330 1289537 1823087 1823294 748 1289539 1289987 1823296 1823744 1616 1290220 1290510 1823977 1824267 1047 1290604 1290974 1824361 1824731 1335 1291441 1291694 1825198 1825451 914 1291924 1292318 1825681 1826075 1422 1292658 1292978 1826414 1826734 1155 1292980 1293260 1826736 1827016 1011 1295001 1295224 1827756 1827979 806 1295226 1295459 1827981 1828214 842 1295566 1296074 1828321 1828829 1832 1296256 1296491 1829011 1829246 849 1296988 1297431 1829743 1830186 1598 1297629 1297831 1830384 1830586 730 1298187 1298500 1830942 1831255 1130 1299091 1299323 1831847 1832079 838 1300304 1300574 1833060 1833330 975 1300836 1301049 1833592 1833805 770 1301774 1301978 1834530 1834734 738 1304012 1304214 1836768 1836970 730 1304216 1304712 1836972 1837468 1789 1306115 1306392 1838871 1839148 1000 1306394 1306767 1839150 1839523 1346 1307080 1307422 1839837 1840179 1234 1307526 1307920 1840283 1840677 1422 1308592 1308957 1841350 1841715 1317 1309002 1309261 1841761 1842020 936 1309694 1309933 1842453 1842692 864 1309959 1310355 1842718 1843114 1429 1310357 1310661 1843116 1843420 1098 1310861 1311158 1843620 1843917 1072 1311220 1311819 1843979 1844578 2160 1311945 1312215 1844704 1844974 975 # chain 124: length 3 score 2275 1654122 1654379 2273590 2273847 928 1654543 1654844 2274011 2274312 1087 1655023 1655285 2274491 2274753 946 # chain 125: length 3 score 1710 1656596 1656807 2276064 2276275 763 1656920 1657151 2276388 2276619 835 1657520 1657818 2276988 2277286 1076 # chain 126: length 403 score 125842 1658870 1659291 2278338 2278759 1519 1659463 1659737 2278931 2279205 990 1659803 1660033 2279271 2279501 831 1660035 1660281 2279503 2279749 889 1660433 1660653 2279901 2280121 795 1661139 1661651 2280607 2281119 1846 1662613 1662816 2282081 2282284 734 1663623 1663962 2283090 2283429 1224 1663964 1664212 2283431 2283679 896 1664890 1665423 2284357 2284890 1922 1666224 1666464 2285691 2285931 867 1666466 1666766 2285933 2286233 1083 1666768 1667146 2286235 2286613 1364 1667359 1667674 2286826 2287141 1137 1668458 1668758 2287925 2288225 1083 1668760 1669020 2288227 2288487 939 1669621 1669831 2289088 2289298 759 1670319 1670539 2289786 2290006 795 1670541 1671010 2290008 2290477 1692 1672979 1673255 2292446 2292722 997 1674007 1674215 2293474 2293682 752 1674316 1674594 2293783 2294061 1004 1674995 1675266 2294462 2294733 979 1675268 1675475 2294735 2294942 748 1675523 1675836 2294990 2295303 1130 1675988 1676495 2295455 2295962 1828 1676681 1677165 2296148 2296632 1746 1677410 1678123 2296877 2297590 2570 1678591 1678853 2298058 2298320 946 1678873 1679604 2298340 2299071 2635 1679606 1680258 2299073 2299725 2350 1681229 1681488 2300696 2300955 936 1681529 1681825 2300996 2301292 1069 1681904 1682202 2301371 2301669 1076 1682552 1682772 2302020 2302240 795 1683086 1683345 2302554 2302813 936 1683347 1684023 2302815 2303491 2437 1684690 1684966 2304158 2304434 997 1685041 1685446 2304509 2304914 1461 1685588 1686309 2305056 2305777 2599 1686565 1686909 2306033 2306377 1242 1686911 1687212 2306379 2306680 1087 1687553 1687752 2307021 2307220 720 1687757 1688014 2307225 2307482 928 1688577 1688776 2308045 2308244 720 1689575 1689781 2308862 2309068 745 1690810 1691083 2310096 2310369 986 1691787 1691987 2311073 2311273 723 1691989 1692234 2311275 2311520 885 1692392 1692684 2311678 2311970 1054 1693703 1693903 2312991 2313191 723 1694957 1695173 2314245 2314461 781 1695543 1696130 2314839 2315426 2116 1696602 1696807 2315898 2316103 741 1697022 1697225 2316318 2316521 734 1697227 1697499 2316523 2316795 982 1698776 1699026 2318072 2318322 903 1700150 1700479 2319446 2319775 1188 1701538 1701767 2320836 2321065 828 1702836 1703180 2322135 2322479 1242 1703690 1703890 2322989 2323189 723 1703892 1704092 2323191 2323391 723 1704678 1705054 2323977 2324353 1357 1705074 1705300 2324373 2324599 817 1706333 1706594 2325632 2325893 943 1707144 1707376 2326443 2326675 838 1707660 1707933 2326959 2327232 986 1707935 1708357 2327234 2327656 1522 1708359 1708684 2327658 2327983 1173 1708950 1709206 2328249 2328505 925 1709208 1709492 2328507 2328791 1026 1710050 1710352 2329349 2329651 1090 1710738 1711294 2330037 2330593 2005 1711302 1711714 2330601 2331013 1486 1712016 1712422 2331315 2331721 1465 1713608 1714003 2332907 2333302 1425 1714161 1714558 2333460 2333857 1432 1714647 1714930 2333946 2334229 1022 1714932 1715271 2334231 2334570 1224 1715774 1716050 2335074 2335350 997 1716622 1716821 2335922 2336121 720 1717659 1717866 2336958 2337165 748 1718229 1718448 2337529 2337748 792 1718507 1718990 2337807 2338290 1742 1719135 1719543 2338435 2338843 1472 1719809 1720020 2339109 2339320 763 1720375 1720610 2339675 2339910 849 1720675 1720958 2339975 2340258 1022 1722052 1722498 2341352 2341798 1609 1722659 1722867 2341959 2342167 752 1723992 1724230 2343292 2343530 860 1725414 1725724 2344714 2345024 1119 1725897 1726101 2345197 2345401 738 1726742 1726941 2346042 2346241 720 1729774 1730007 2349074 2349307 842 1730296 1730513 2349596 2349813 784 1730624 1730872 2349924 2350172 896 1731031 1731245 2350331 2350545 774 1731451 1731651 2350751 2350951 723 1731943 1732266 2351243 2351566 1166 1732443 1732738 2351744 2352039 1065 1733244 1733468 2352545 2352769 810 1733494 1733726 2352795 2353027 838 1734492 1735508 2353777 2354793 3661 1735510 1735985 2354795 2355270 1713 1736821 1737200 2356106 2356485 1368 1737301 1737638 2356586 2356923 1216 1737679 1738130 2356964 2357415 1627 1738573 1738859 2357858 2358144 1033 1739051 1739291 2358336 2358576 867 1739293 1739737 2358578 2359022 1602 1739937 1740185 2359222 2359470 896 1742227 1742471 2361514 2361758 882 1743603 1743817 2362890 2363104 774 1744113 1744317 2363400 2363604 738 1744319 1744621 2363606 2363908 1090 1745169 1745385 2364456 2364672 781 1746131 1746385 2365418 2365672 918 1746573 1746895 2365860 2366182 1162 1747337 1747568 2366624 2366855 835 1748232 1748460 2367519 2367747 824 1748853 1749207 2368140 2368494 1278 1749248 1749452 2368535 2368739 738 1749626 1749828 2368913 2369115 730 1750229 1750511 2369516 2369798 1018 1750757 1750965 2370044 2370252 752 1751171 1751397 2370458 2370684 817 1751450 1751849 2370737 2371136 1440 1752037 1752332 2371324 2371619 1065 1752334 1752630 2371621 2371917 1069 1752938 1753287 2372226 2372575 1260 1753361 1754001 2372649 2373289 2307 1754288 1754853 2373576 2374141 2037 1754978 1755727 2374266 2375015 2700 1757894 1758099 2377181 2377386 741 1758817 1759018 2378104 2378305 727 1759643 1760001 2378930 2379288 1292 1760024 1760307 2379311 2379594 1022 1760888 1761168 2380175 2380455 1011 1761426 1761639 2380713 2380926 770 1761758 1762277 2381045 2381564 1872 1763063 1763299 2382351 2382587 853 1763817 1764167 2383105 2383455 1263 1764169 1764674 2383457 2383962 1821 1764787 1765292 2384075 2384580 1821 1766897 1767545 2386185 2386833 2336 1768193 1768741 2387481 2388029 1976 1769209 1770005 2388497 2389293 2869 1770027 1771061 2389315 2390349 3726 1776510 1776832 2395800 2396122 1162 1777391 1777779 2396686 2397074 1400 1778340 1778576 2397635 2397871 853 1779198 1779491 2398493 2398786 1058 1779895 1780141 2399190 2399436 889 1780820 1781052 2400115 2400347 838 1781990 1782237 2401285 2401532 892 1782239 1782454 2401534 2401749 777 1783349 1783605 2402644 2402900 925 1784312 1784529 2403607 2403824 784 1784531 1785024 2403826 2404319 1778 1785293 1785664 2404588 2404959 1339 1785987 1786594 2405282 2405889 2188 1786596 1786808 2405891 2406103 766 1786974 1787396 2406269 2406691 1522 1787564 1788076 2406859 2407371 1846 1789601 1789856 2408896 2409151 921 1789985 1790241 2409280 2409536 925 1790516 1790720 2409811 2410015 738 1790722 1790924 2410017 2410219 730 1790932 1791157 2410227 2410452 813 1791358 1791557 2410653 2410852 720 1792805 1793042 2412100 2412337 856 1793280 1793651 2412576 2412947 1339 1793653 1794317 2412949 2413613 2394 1794961 1795189 2414257 2414485 824 1795191 1795402 2414487 2414698 763 1795903 1796127 2415199 2415423 810 1796193 1796481 2415489 2415777 1040 1796483 1796797 2415779 2416093 1134 1797149 1797739 2416444 2417034 2127 1797741 1798777 2417036 2418072 3733 1799635 1799909 2418930 2419204 990 1799911 1800548 2419206 2419843 2296 1800565 1800878 2419860 2420173 1130 1803089 1803365 2422385 2422661 997 1803598 1803884 2422894 2423180 1033 1804006 1804223 2423302 2423519 784 1804225 1804865 2423521 2424161 2307 1805161 1805519 2424457 2424815 1292 1805573 1805940 2424869 2425236 1324 1805942 1806186 2425238 2425482 882 1807310 1807896 2426606 2427192 2113 1808117 1808409 2427413 2427705 1054 1808848 1809156 2428144 2428452 1112 1809717 1809924 2429013 2429220 748 1810721 1811386 2430016 2430681 2397 1811496 1811808 2430791 2431103 1126 1812044 1812254 2431339 2431549 759 1813444 1813751 2432739 2433046 1108 1815933 1816168 2435026 2435261 849 1816170 1816385 2435263 2435478 777 1816567 1816846 2435661 2435940 1008 1816883 1817128 2435977 2436222 885 1817130 1817717 2436224 2436811 2116 1818438 1818817 2437532 2437911 1368 1819078 1819806 2438172 2438900 2624 1820086 1820289 2439181 2439384 734 1820347 1820650 2439442 2439745 1094 1821080 1821318 2440175 2440413 860 1821799 1822009 2440894 2441104 759 1822925 1823352 2442020 2442447 1540 1823455 1823845 2442550 2442940 1407 1825441 1825682 2444536 2444777 871 1828148 1828460 2447243 2447555 1126 1830179 1830396 2449274 2449491 784 1831039 1831362 2450134 2450457 1166 1833600 1833973 2452695 2453068 1346 1835176 1835437 2454271 2454532 943 1837316 1837627 2456411 2456722 1123 1839377 1839643 2458472 2458738 961 1840093 1840608 2459188 2459703 1857 1840832 1841088 2459927 2460183 925 1841369 1841757 2460464 2460852 1400 1842024 1842384 2461119 2461479 1299 1842790 1843015 2461885 2462110 813 1844112 1844407 2463207 2463502 1065 1844713 1844993 2463808 2464088 1011 1845727 1845938 2464822 2465033 763 1845940 1846159 2465035 2465254 792 1847856 1848154 2466951 2467249 1076 1848836 1849199 2468722 2469085 1310 1849495 1849718 2469381 2469604 806 1850211 1850541 2470097 2470427 1191 1850732 1850934 2470618 2470820 730 1850993 1851408 2470879 2471294 1497 1852529 1853020 2473729 2474220 1771 1853028 1853379 2474228 2474579 1267 1853852 1854132 2475052 2475332 1011 1854784 1855075 2475969 2476260 1051 1856078 1856343 2477263 2477528 957 1856413 1856625 2477598 2477810 766 1856711 1857112 2477896 2478297 1447 1857558 1858246 2478743 2479431 2480 1858248 1858551 2479433 2479736 1094 1858553 1858836 2479738 2480021 1022 1860370 1861509 2481555 2482694 4104 1861511 1861782 2482696 2482967 979 1863334 1863610 2484522 2484798 997 1863926 1864222 2485114 2485410 1069 1864224 1864732 2485412 2485920 1832 1864734 1865340 2485922 2486528 2185 1865342 1865574 2486530 2486762 838 1866380 1866624 2487568 2487812 882 1866680 1866887 2487868 2488075 748 1867227 1867483 2488415 2488671 925 1867593 1867912 2488781 2489100 1152 1868545 1868988 2489733 2490176 1598 1869317 1869768 2490505 2490956 1627 1869885 1870338 2491073 2491526 1634 1870392 1870609 2491580 2491797 784 1870868 1871067 2492056 2492255 720 1871297 1871667 2492485 2492855 1335 1871669 1872012 2492857 2493200 1238 1872212 1872466 2493400 2493654 918 1873361 1873609 2494549 2494797 896 1874584 1874784 2495772 2495972 723 1875329 1875572 2496517 2496760 878 1876026 1876318 2497214 2497506 1054 1877472 1877905 2498659 2499092 1562 1878716 1879194 2499903 2500381 1724 1879555 1880176 2500742 2501363 2239 1880178 1880422 2501365 2501609 882 1882198 1882517 2503610 2503929 1152 1882790 1883016 2504202 2504428 817 1883198 1883502 2504610 2504914 1098 1883504 1883748 2504916 2505160 882 1885188 1885465 2506601 2506878 1000 1885990 1886200 2507403 2507613 759 1887393 1887625 2508806 2509038 838 1887654 1888035 2509067 2509448 1375 1888341 1888556 2509754 2509969 777 1889085 1889473 2510498 2510886 1400 1890096 1890394 2511509 2511807 1076 1890396 1890615 2511809 2512028 792 1891089 1891371 2512502 2512784 1018 1892049 1892388 2513462 2513801 1224 1892542 1892861 2513955 2514274 1152 1893008 1893345 2514421 2514758 1216 1893700 1893987 2515113 2515400 1036 1894688 1895028 2516101 2516441 1227 1895030 1895434 2516443 2516847 1458 1895450 1895675 2516863 2517088 813 1895677 1896174 2517090 2517587 1792 1896582 1896861 2517995 2518274 1008 1897197 1897669 2518610 2519082 1702 1897725 1898386 2519138 2519799 2383 1898635 1898897 2520048 2520310 946 1898899 1899782 2520312 2521195 3182 1900050 1900363 2521465 2521778 1130 1901084 1901334 2522499 2522749 903 1901591 1902258 2523006 2523673 2404 1902260 1903250 2523675 2524665 3567 1903706 1903916 2525122 2525332 759 1904451 1904683 2525867 2526099 838 1905090 1905374 2526506 2526790 1026 1905394 1905787 2526810 2527203 1418 1906033 1906301 2527448 2527716 968 1906477 1906764 2527892 2528179 1036 1907251 1907489 2528668 2528906 860 1907826 1908287 2529243 2529704 1663 1909427 1909630 2530844 2531047 734 1909823 1910092 2531240 2531509 972 1910094 1910722 2531511 2532139 2264 1911155 1911438 2532572 2532855 1022 1911854 1912301 2533271 2533718 1612 1912475 1912707 2533892 2534124 838 1912709 1913020 2534126 2534437 1123 1913418 1913755 2534835 2535172 1216 1914182 1914433 2535599 2535850 907 1914518 1914724 2535935 2536141 745 1915040 1915634 2536457 2537051 2142 1915716 1915918 2537133 2537335 730 1916259 1916497 2537676 2537914 860 1919902 1920259 2541320 2541677 1288 1920774 1921293 2542192 2542711 1872 1921956 1922185 2543374 2543603 828 1922734 1923082 2544152 2544500 1256 1923603 1923893 2545021 2545311 1047 1924022 1924222 2545440 2545640 723 1924256 1924465 2545674 2545883 756 1925121 1925374 2546539 2546792 914 1925790 1926091 2547208 2547509 1087 1928392 1928797 2549811 2550216 1461 1928836 1929340 2550255 2550759 1818 1929708 1930092 2551127 2551511 1386 1930094 1930449 2551513 2551868 1281 1930451 1930783 2551870 2552202 1198 1931042 1931502 2552461 2552921 1659 1931504 1931847 2552923 2553266 1238 1931852 1932171 2553271 2553590 1152 1932814 1933017 2554233 2554436 734 1933019 1933251 2554438 2554670 838 1933394 1934088 2554813 2555507 2502 1934090 1934303 2555509 2555722 770 1934591 1934791 2556010 2556210 723 1935284 1935483 2556703 2556902 720 1935593 1936007 2557012 2557426 1494 1936009 1936520 2557428 2557939 1843 1936878 1937808 2558297 2559227 3351 1937810 1938056 2559229 2559475 889 1938058 1938409 2559477 2559828 1267 1938547 1938764 2559966 2560183 784 1939078 1939529 2560497 2560948 1627 1939546 1939765 2560965 2561184 792 1939957 1940251 2561376 2561670 1062 1940740 1940996 2562159 2562415 925 1942544 1943027 2564062 2564545 1742 1943029 1943304 2564547 2564822 993 1943422 1943789 2564940 2565307 1324 1943791 1944077 2565309 2565595 1033 1944316 1944535 2565834 2566053 792 1944537 1944809 2566055 2566327 982 1945299 1945757 2566817 2567275 1652 1946023 1946328 2567541 2567846 1101 1946330 1946559 2567848 2568077 828 1946564 1946799 2568082 2568317 849 1946827 1947162 2568345 2568680 1209 1948177 1948773 2569695 2570291 2149 1949888 1950127 2571406 2571645 864 1950394 1950831 2571912 2572349 1576 1950833 1951383 2572351 2572901 1983 1951403 1952063 2572921 2573581 2379 1953790 1954060 2575308 2575578 975 1954270 1954649 2575788 2576167 1368 1954951 1955256 2576469 2576774 1101 1956632 1956895 2578153 2578416 950 1957021 1957247 2578542 2578768 817 1957920 1958470 2579441 2579991 1983 1958472 1958686 2579993 2580207 774 1959135 1959596 2580656 2581117 1663 1961538 1961756 2583059 2583277 788 1961794 1962031 2583315 2583552 856 1962511 1962740 2584032 2584261 828 1963041 1963240 2584562 2584761 720 1964000 1964244 2585521 2585765 882 1964308 1964714 2585829 2586235 1465 1964720 1964952 2586241 2586473 838 1964954 1965247 2586475 2586768 1058 1965875 1966077 2587396 2587598 730 1966259 1966477 2587780 2587998 788 1966819 1967436 2588340 2588957 2224 1968034 1968254 2589555 2589775 795 1968813 1969103 2590334 2590624 1047 1969837 1970060 2591358 2591581 806 1970086 1970291 2591607 2591812 741 1971049 1971529 2592568 2593048 1731 1971978 1972255 2593497 2593774 1000 1972876 1973268 2594395 2594787 1414 1973283 1973564 2594802 2595083 1015 1974175 1974430 2595694 2595949 921 1975026 1975276 2596545 2596795 903 1975278 1975528 2596797 2597047 903 1975671 1975990 2597190 2597509 1152 # chain 127: length 2 score 3621 4505135 4505401 2629690 2629956 961 4505403 4506142 2629958 2630697 2664 # chain 128: length 1 score 1126 2097262 2097574 2783920 2784232 1126 # chain 129: length 1 score 788 2113919 2114137 2803895 2804113 788 # chain 130: length 1 score 835 2119227 2119458 2809107 2809338 835 # chain 131: length 2 score 1754 2122375 2122654 2812343 2812622 1008 2122745 2123002 2812713 2812970 928 # chain 132: length 1 score 748 2126130 2126337 2816098 2816305 748 # chain 133: length 2 score 1412 2127587 2127870 2817558 2817841 1022 2128148 2128410 2818119 2818381 946 # chain 134: length 1 score 806 2130083 2130306 2820054 2820277 806 # chain 135: length 1 score 928 2131508 2131765 2821479 2821736 928 # chain 136: length 5 score 4639 2133560 2133891 2823531 2823862 1195 2133935 2134325 2823906 2824296 1407 2134864 2135487 2824835 2825458 2246 2135806 2136050 2825778 2826022 882 2136085 2136302 2826057 2826274 784 # chain 137: length 3 score 2311 2139119 2139375 2829563 2829819 925 2139410 2139702 2829854 2830146 1054 2140010 2140292 2830454 2830736 1018 # chain 138: length 1 score 824 2141744 2141972 2832191 2832419 824 # chain 139: length 5 score 3509 2143720 2144076 2834167 2834523 1285 2144305 2144574 2834752 2835021 972 2144682 2145093 2835121 2835532 1483 2145494 2145735 2835933 2836174 871 2145917 2146119 2836356 2836558 730 # chain 140: length 1 score 806 2152874 2153097 2842908 2843131 806 # chain 141: length 1 score 824 2157500 2157728 2847534 2847762 824 # chain 142: length 1 score 774 2159512 2159726 2849546 2849760 774 # chain 143: length 1 score 1011 2160915 2161195 2850949 2851229 1011 # chain 144: length 1 score 720 2163830 2164029 2853865 2854064 720 # chain 145: length 1 score 903 2164634 2164884 2854669 2854919 903 # chain 146: length 1 score 723 2167991 2168191 2857396 2857596 723 # chain 147: length 7 score 2927 2169513 2170123 2857657 2858267 2199 2170692 2170904 2858836 2859048 766 2171027 2171256 2859171 2859400 828 2171771 2172054 2859915 2860198 1022 2172899 2173232 2861043 2861376 1202 2173706 2173992 2861850 2862136 1033 2174134 2174470 2862278 2862614 1213 # chain 148: length 2 score 1470 2176255 2176466 2864390 2864601 763 2176519 2176744 2864654 2864879 813 # chain 149: length 2 score 1255 2178034 2178238 2866170 2866374 738 2178361 2178572 2866497 2866708 763 # chain 150: length 2 score 1349 2179950 2180203 2868086 2868339 914 2180394 2180620 2868530 2868756 817 # chain 151: length 2 score 1767 2181635 2182001 2869771 2870137 1321 2182296 2182583 2870432 2870719 1036 # chain 152: length 2 score 1626 2183634 2183837 2873952 2874155 734 2183839 2184087 2874157 2874405 896 # chain 153: length 4 score 3925 2191221 2191427 2881566 2881772 745 2191466 2191724 2881811 2882069 932 2192021 2192638 2882366 2882983 2224 2192659 2192863 2883004 2883208 738 # chain 154: length 1 score 738 2198233 2198437 2891590 2891794 738 # chain 155: length 1 score 792 2200600 2200819 2893957 2894176 792 # chain 156: length 1 score 741 2201929 2202134 2895284 2895489 741 # chain 157: length 1 score 867 2202523 2202763 2896812 2897052 867 # chain 158: length 1 score 864 2205919 2206158 2900208 2900447 864 # chain 159: length 1 score 943 2208053 2208314 2902342 2902603 943 # chain 160: length 7 score 3730 2209448 2209707 2905053 2905312 936 2209899 2210143 2905506 2905750 882 2210145 2210348 2905752 2905955 734 2210350 2210690 2905957 2906297 1227 2211187 2211475 2906794 2907082 1040 2211943 2212186 2907550 2907793 878 2212389 2212600 2907996 2908207 763 # chain 161: length 2 score 3040 2212933 2213153 2957456 2957676 795 2213274 2213964 2957797 2958487 2487 # chain 162: length 1 score 817 2218456 2218682 2963020 2963246 817 # chain 163: length 1 score 766 2219935 2220147 2964499 2964711 766 # chain 164: length 4 score 2626 2220987 2221574 2965551 2966138 2116 2222369 2222661 2966933 2967225 1054 2222834 2223101 2967398 2967665 964 2223432 2223734 2967996 2968298 1090 # chain 165: length 3 score 1913 2225496 2225947 2970060 2970511 1627 2226627 2226862 2971192 2971427 849 2226864 2227086 2971429 2971651 802 # chain 166: length 29 score 22902 2228571 2228812 2979215 2979456 871 2229200 2229697 2979844 2980341 1792 2229855 2230119 2980499 2980763 954 2230121 2230345 2980765 2980989 810 2230830 2231351 2981474 2981995 1879 2231542 2231862 2982186 2982506 1155 2232100 2232389 2982744 2983033 1044 2233168 2233411 2983812 2984055 878 2233518 2234089 2984162 2984733 2059 2234218 2234614 2984862 2985258 1429 2234979 2235319 2985624 2985964 1227 2235321 2235523 2985966 2986168 730 2237286 2237587 2987931 2988232 1087 2238311 2238529 2988956 2989174 788 2238619 2238940 2989264 2989585 1159 2239235 2239730 2989880 2990375 1785 2239732 2239939 2990377 2990584 748 2241424 2242032 2992069 2992677 2192 2242658 2242988 2993303 2993633 1191 2243305 2243526 2993938 2994159 799 2243528 2244242 2994161 2994875 2574 2244244 2244464 2994877 2995097 795 2245425 2245663 2996056 2996294 860 2245849 2246101 2996480 2996732 910 2246572 2247571 2997203 2998202 3600 2247573 2248062 2998204 2998693 1764 2248064 2248699 2998695 2999330 2289 2248701 2249569 2999332 3000200 3128 2249571 2250110 3000202 3000741 1944 # chain 167: length 1 score 853 2348815 2349051 3093840 3094076 853 # chain 168: length 3 score 2535 2350732 2351004 3095757 3096029 982 2351164 2351387 3096189 3096412 806 2351467 2351807 3096492 3096832 1227 # chain 169: length 7 score 5002 2354350 2354957 3099375 3099982 2188 2354959 2355241 3099984 3100266 1018 2356031 2356258 3100885 3101112 820 2357185 2357442 3102038 3102295 928 2357830 2358383 3102683 3103236 1994 2358663 2359031 3103516 3103884 1328 2359274 2359777 3104127 3104630 1814 # chain 170: length 11 score 8585 2365050 2365259 3109903 3110112 756 2365300 2365505 3110153 3110358 741 2365729 2366155 3110582 3111008 1537 2366694 2366896 3111547 3111749 730 2366898 2367151 3111751 3112004 914 2367195 2367565 3112048 3112418 1335 2367738 2367939 3112591 3112792 727 2367941 2368333 3112794 3113186 1414 2368581 2369006 3113434 3113859 1533 2369104 2369342 3113957 3114195 860 2369344 2369561 3114197 3114414 784 # chain 171: length 1 score 907 2378844 2379095 3123697 3123948 907 # chain 172: length 1 score 838 2379699 2379931 3124552 3124784 838 # chain 173: length 2 score 2643 2388716 2388930 3129159 3129373 774 2389160 2389806 3129603 3130249 2329 # chain 174: length 6 score 3035 2391447 2391892 3131957 3132402 1605 2392296 2392513 3132806 3133023 784 2393010 2393211 3133520 3133721 727 2393779 2394028 3134289 3134538 900 2394207 2394843 3134717 3135353 2293 2395298 2395556 3135808 3136066 932 # chain 175: length 1 score 885 2398063 2398308 3138573 3138818 885 # chain 176: length 1 score 1152 2399860 2400179 3140370 3140689 1152 # chain 177: length 48 score 28306 2401998 2402382 3142508 3142892 1386 2402384 2402883 3142894 3143393 1800 2403015 2403224 3143525 3143734 756 2403226 2403562 3143736 3144072 1213 2404124 2404360 3144634 3144870 853 2404362 2404984 3144872 3145494 2242 2405033 2405255 3145543 3145765 802 2405413 2405833 3145923 3146343 1515 2405973 2406286 3146483 3146796 1130 2407031 2407332 3147541 3147842 1087 2407843 2408135 3148353 3148645 1054 2408137 2408740 3148647 3149250 2174 2408742 2408978 3149252 3149488 853 2409223 2409580 3149733 3150090 1288 2409899 2410124 3150409 3150634 813 2410126 2410474 3150636 3150984 1256 2410877 2411974 3151387 3152484 3952 2411990 2412480 3152500 3152990 1767 2412572 2413115 3153082 3153625 1958 2413117 2413628 3153627 3154138 1843 2414188 2414453 3154698 3154963 957 2414542 2414910 3155052 3155420 1328 2415052 2415297 3155562 3155807 885 2415604 2415923 3156114 3156433 1152 2416588 2416808 3157098 3157318 795 2417113 2417411 3157623 3157921 1076 2417437 2417877 3157947 3158387 1587 2419183 2419387 3159693 3159897 738 2419395 2419663 3159905 3160173 968 2421331 2421674 3161841 3162184 1238 2422083 2422456 3162593 3162966 1346 2422485 2422840 3162995 3163350 1281 2423554 2424027 3164064 3164537 1706 2424119 2424381 3164629 3164891 946 2424749 2425018 3165259 3165528 972 2425053 2425264 3165563 3165774 763 2425958 2426231 3166468 3166741 986 2428031 2428341 3168541 3168851 1119 2428580 2428822 3169090 3169332 874 2429754 2430006 3170447 3170699 910 2430853 2431216 3171546 3171909 1310 2431218 2432122 3171911 3172815 3258 2432480 2433061 3173173 3173754 2095 2433567 2433864 3174260 3174557 1072 2434712 2434964 3175405 3175657 910 2435529 2435802 3176222 3176495 986 2435804 2436024 3176497 3176717 795 2436196 2436429 3176889 3177122 842 # chain 178: length 1 score 1170 2462902 2463226 3203841 3204165 1170 # chain 179: length 5 score 3255 2477087 2477474 3219567 3219954 1396 2478097 2478468 3220577 3220948 1339 2478884 2479094 3221364 3221574 759 2479182 2479452 3221662 3221932 975 2479454 2479743 3221934 3222223 1044 # chain 180: length 1 score 2869 2481784 2482580 3224264 3225060 2869 # chain 181: length 1 score 763 2485223 2485434 3227703 3227914 763 # chain 182: length 4 score 3065 2487009 2487311 3229485 3229787 1090 2487475 2487680 3229951 3230156 741 2487748 2487953 3230224 3230429 741 2488126 2488487 3230602 3230963 1303 # chain 183: length 5 score 2904 2493507 2493824 3235984 3236301 1144 2494105 2494657 3236582 3237134 1990 2494917 2495150 3237394 3237627 842 2496124 2496336 3238601 3238813 766 2496425 2496805 3238903 3239283 1371 # chain 184: length 1 score 954 2498319 2498583 3240797 3241061 954 # chain 185: length 6 score 3810 2499116 2499492 3241594 3241970 1357 2499646 2499886 3242124 3242364 867 2499888 2500201 3242366 3242679 1130 2500592 2500857 3243070 3243335 957 2501864 2502366 3244342 3244844 1810 2502374 2502599 3244852 3245077 813 # chain 186: length 2 score 1090 2504599 2504812 3247077 3247290 770 2505039 2505253 3247517 3247731 774 # chain 187: length 1 score 1364 2505829 2506207 3248307 3248685 1364 # chain 188: length 30 score 13231 2507249 2507950 3249727 3250428 2527 2508288 2508706 3250766 3251184 1508 2508708 2509001 3251186 3251479 1058 2510142 2510587 3252619 3253064 1605 2510589 2510803 3253066 3253280 774 2511109 2511410 3253586 3253887 1087 2514424 2514627 3255552 3255755 734 2515055 2515911 3256183 3257039 3085 2516170 2516423 3257182 3257435 914 2516425 2516643 3257437 3257655 788 2516645 2517037 3257657 3258049 1414 2517487 2517986 3260246 3260745 1800 2518048 2518274 3260807 3261033 817 2518801 2519152 3261560 3261911 1267 2519154 2519378 3261913 3262137 810 2524775 2525038 3263384 3263647 950 2525040 2525347 3263649 3263956 1108 2525376 2525726 3263985 3264335 1263 2525728 2526444 3264337 3265053 2581 2526978 2527238 3265587 3265847 939 2527385 2527720 3265994 3266329 1209 2528020 2528283 3266629 3266892 950 2529020 2529435 3267629 3268044 1497 2529701 2529924 3268310 3268533 806 2530338 2530630 3268947 3269239 1054 2531010 2531263 3269619 3269872 914 2531438 2531958 3270047 3270567 1875 2531960 2532332 3270569 3270941 1342 2532682 2532887 3271291 3271496 741 2533185 2534040 3271794 3272649 3081 # chain 189: length 1 score 846 2547613 2547847 3284934 3285168 846 # chain 190: length 7 score 6566 2548378 2548736 3285699 3286057 1292 2548738 2549045 3286059 3286366 1108 2549099 2549312 3286420 3286633 770 2549314 2549839 3286635 3287160 1893 2550023 2550307 3287344 3287628 1026 2550593 2550918 3287914 3288239 1173 2551130 2551347 3288451 3288668 784 # chain 191: length 1 score 723 2563647 2563847 3294178 3294378 723 # chain 192: length 1 score 838 2565243 2565475 3295774 3296006 838 # chain 193: length 3 score 3167 2566632 2567154 3297046 3297568 1882 2567312 2567642 3297726 3298056 1191 2568434 2568987 3298848 3299401 1994 # chain 194: length 1 score 1126 2572119 2572431 3302461 3302773 1126 # chain 195: length 1 score 1098 2574757 2575061 3305099 3305403 1098 # chain 196: length 3 score 2499 2576480 2576803 3306822 3307145 1166 2576805 2577076 3307147 3307418 979 2577426 2577719 3307768 3308061 1058 # chain 197: length 4 score 2517 2579667 2579994 3310009 3310336 1180 2580018 2580239 3310360 3310581 799 2580681 2580891 3311023 3311233 759 2580942 2581167 3311284 3311509 813 # chain 198: length 10 score 5770 2583483 2583691 3313825 3314033 752 2583693 2583939 3314035 3314281 889 2584527 2584813 3314869 3315155 1033 2585107 2585443 3315449 3315785 1213 2585481 2585996 3315823 3316338 1857 2586571 2586905 3316913 3317247 1206 2587132 2587340 3317474 3317682 752 2587774 2588036 3318116 3318378 946 2588299 2588642 3318641 3318984 1238 2588644 2588846 3318986 3319188 730 # chain 199: length 2 score 1996 2593465 2593720 3323778 3324033 921 2593778 2594108 3324091 3324421 1191 # chain 200: length 8 score 10063 2595210 2595788 3325523 3326101 2084 2595986 2596263 3326299 3326576 1000 2596265 2596849 3326578 3327162 2106 2596868 2597151 3327181 3327464 1022 2597190 2597545 3327503 3327858 1281 2597749 2598076 3328062 3328389 1180 2598078 2598313 3328391 3328626 849 2598363 2598798 3328676 3329111 1569 # chain 201: length 4 score 3308 3421504 3421711 3458707 3458914 748 3421879 3422207 3459083 3459411 1184 3422734 3423075 3459938 3460279 1231 3423250 3423773 3460454 3460977 1886 # chain 202: length 160 score 57753 2611902 2612633 3342265 3342996 2635 2613728 2614090 3344091 3344453 1306 2614188 2614399 3344551 3344762 763 2614580 2614841 3344943 3345204 943 2615310 2615748 3345673 3346111 1580 2615750 2616027 3346113 3346390 1000 2616029 2616801 3346392 3347164 2782 2617029 2617312 3347392 3347675 1022 2617371 2617651 3347734 3348014 1011 2617653 2618471 3348016 3348834 2948 2618650 2618927 3349013 3349290 1000 2619068 2619400 3349431 3349763 1198 2620295 2620536 3350658 3350899 871 2620903 2621574 3351265 3351936 2419 2621648 2622141 3352010 3352503 1778 2622602 2622972 3352964 3353334 1335 2622974 2623330 3353336 3353692 1285 2623959 2624281 3354321 3354643 1162 2624863 2625146 3355225 3355508 1022 2625345 2625778 3355707 3356140 1562 2625998 2626278 3356360 3356640 1011 2626491 2626699 3356853 3357061 752 2626701 2627079 3357063 3357441 1364 2627281 2627535 3357643 3357897 918 2627901 2628187 3358263 3358549 1033 2628222 2628544 3358584 3358906 1162 2629209 2629572 3359571 3359934 1310 2629758 2629996 3360120 3360358 860 2630442 2630759 3360804 3361121 1144 2630825 2631072 3361187 3361434 892 2631491 2631693 3361853 3362055 730 2631695 2632029 3362057 3362391 1206 2633280 2633494 3363642 3363856 774 2634147 2634646 3364508 3365007 1800 2634684 2634898 3365045 3365259 774 2634900 2635635 3365261 3365996 2649 2635637 2635916 3365998 3366277 1008 2636072 2636311 3366433 3366672 864 2636313 2637156 3366674 3367517 3038 2637264 2637676 3367625 3368037 1486 2638152 2638776 3368513 3369137 2250 2639345 2639640 3369706 3370001 1065 2639705 2640279 3370066 3370640 2070 2640598 2641264 3370959 3371625 2401 2642265 2642484 3372626 3372845 792 2644797 2645068 3379989 3380260 979 2646232 2646718 3381424 3381910 1753 2646720 2647199 3381912 3382391 1728 2647402 2647747 3382594 3382939 1245 2649258 2649769 3384450 3384961 1843 2650153 2650613 3385345 3385805 1659 2650615 2650905 3385807 3386097 1047 2653587 2653891 3388463 3388767 1098 2654352 2654790 3389228 3389666 1580 2654921 2655223 3389797 3390099 1090 2655225 2655706 3390101 3390582 1735 2655708 2656017 3390584 3390893 1116 2656019 2656290 3390895 3391166 979 2656292 2656816 3391168 3391692 1890 2657068 2657321 3391944 3392197 914 2658334 2658578 3393210 3393454 882 2659321 2659587 3394197 3394463 961 2660011 2660327 3394887 3395203 1141 2661878 2662101 3396600 3396823 806 2662610 2662809 3397332 3397531 720 2662985 2663205 3397707 3397927 795 2663404 2664328 3398126 3399050 3330 2666419 2667002 3401142 3401725 2102 2667999 2668309 3402722 3403032 1119 2669071 2669365 3403794 3404088 1062 2672157 2672527 3406880 3407250 1335 2673299 2673585 3408022 3408308 1033 2674570 2674779 3409293 3409502 756 2676306 2676744 3411029 3411467 1580 2680540 2680898 3415263 3415621 1292 2683102 2683328 3417690 3417916 817 2683330 2684113 3417918 3418701 2822 2684451 2684963 3419039 3419551 1846 2685044 2685290 3419632 3419878 889 2685816 2686077 3420404 3420665 943 2686500 2686729 3421088 3421317 828 2687173 2687453 3421761 3422041 1011 2687674 2688115 3422262 3422703 1591 2688993 2689305 3423581 3423893 1126 2691024 2691228 3425630 3425834 738 2691698 2691975 3426304 3426581 1000 2692586 2692875 3427192 3427481 1044 2693026 2693277 3427632 3427883 907 2693279 2693603 3427885 3428209 1170 2693778 2693983 3428383 3428588 741 2694111 2694508 3428716 3429113 1432 2694510 2694993 3429115 3429598 1742 2695122 2695678 3429727 3430283 2005 2696478 2697016 3431083 3431621 1940 2697024 2697292 3431629 3431897 968 2699800 2700161 3434407 3434768 1303 2700600 2700917 3435207 3435524 1144 2700919 2701186 3435526 3435793 964 2702463 2702896 3437071 3437504 1562 2703201 2703535 3437809 3438143 1206 2704116 2704639 3438724 3439247 1886 2704821 2705454 3439429 3440062 2282 2705750 2706257 3440358 3440865 1828 2706433 2706921 3441041 3441529 1760 2707175 2708347 3441771 3442943 4222 2708499 2708746 3443095 3443342 892 2709414 2709740 3444010 3444336 1177 2709742 2710033 3444338 3444629 1051 2710686 2711190 3445282 3445786 1818 2714377 2714608 3448797 3449028 835 2715041 2715350 3449461 3449770 1116 2716207 2716714 3450627 3451134 1828 2716916 2717459 3451336 3451879 1958 2717578 2717837 3451998 3452257 936 2717875 2718432 3452295 3452852 2008 2719838 2720043 3454258 3454463 741 2720685 2720963 3455105 3455383 1004 2721943 2722325 3456363 3456745 1378 2722364 2722648 3456784 3457068 1026 2722719 2722976 3457139 3457396 928 2722978 2723197 3457398 3457617 792 2723512 2723820 3457932 3458240 1112 2724288 2724992 3458707 3459411 2538 2725002 2725338 3459421 3459757 1213 2725518 2725859 3459938 3460279 1231 2726034 2726557 3460454 3460977 1886 2727756 2728138 3462102 3462484 1378 2728176 2728411 3462523 3462758 849 2729938 2730256 3464290 3464608 1148 2730258 2730709 3464610 3465061 1627 2730715 2730941 3465067 3465293 817 2730943 2731223 3465295 3465575 1011 2731369 2732126 3465721 3466478 2728 2732128 2732474 3466480 3466826 1249 2733900 2734427 3468252 3468779 1900 2734630 2734983 3468982 3469335 1274 2735104 2735627 3469456 3469979 1886 2735929 2736218 3470281 3470570 1044 2736892 2737170 3471244 3471522 1004 2737943 2738473 3472295 3472825 1911 2738616 2738989 3472968 3473341 1346 2739487 2739726 3473839 3474078 864 2740107 2740530 3474459 3474882 1526 2740532 2740751 3474884 3475103 792 2741872 2742117 3476224 3476469 885 2742144 2743097 3476497 3477450 3434 2743240 2743532 3477593 3477885 1054 2743627 2744287 3477980 3478640 2379 2744484 2744755 3478725 3478996 979 2744814 2745301 3479055 3479542 1756 2745687 2746250 3479928 3480491 2030 2746252 2746651 3480493 3480892 1440 2746790 2747112 3481032 3481354 1162 2748316 2748598 3482557 3482839 1018 2748600 2748900 3482841 3483141 1083 2749601 2749903 3483842 3484144 1090 2750439 2750646 3484680 3484887 748 2751144 2751386 3485385 3485627 874 2751471 2751884 3485712 3486125 1490 2752393 2752793 3486634 3487034 1443 # chain 203: length 1 score 2700 1467373 1468122 3500250 3500999 2700 # chain 204: length 1 score 2520 269818 270517 3500250 3500949 2520 # chain 205: length 1 score 1378 2788875 2789257 3522735 3523117 1378 # chain 206: length 1 score 720 2792327 2792526 3526187 3526386 720 # chain 207: length 22 score 11001 2793676 2794100 3527536 3527960 1530 2794102 2794557 3527962 3528417 1641 2794848 2795073 3528708 3528933 813 2796262 2796549 3530122 3530409 1036 2797007 2797371 3530866 3531230 1314 2797373 2798389 3531232 3532248 3661 2798633 2799226 3534456 3535049 2138 2800013 2800498 3535836 3536321 1749 2800607 2800878 3536430 3536701 979 2801135 2801361 3536958 3537184 817 2801453 2801751 3537276 3537574 1076 2801948 2802460 3537771 3538283 1846 2802880 2803088 3538705 3538913 752 2804112 2804406 3539937 3540231 1062 2804534 2804916 3540359 3540741 1378 2805471 2805684 3541295 3541508 770 2807358 2807725 3543189 3543556 1324 2808012 2808214 3543843 3544045 730 2808405 2808652 3544236 3544483 892 2808654 2808877 3544485 3544708 806 2808895 2809235 3544726 3545066 1227 2809368 2809798 3545199 3545629 1551 # chain 208: length 1 score 1738 2828502 2828984 3564104 3564586 1738 # chain 209: length 1 score 914 2830753 2831006 3566355 3566608 914 # chain 210: length 1 score 835 2831645 2831876 3567043 3567274 835 # chain 211: length 2 score 1698 2833063 2833293 3568461 3568691 831 2833295 2833536 3568693 3568934 871 # chain 212: length 1 score 781 2837117 2837333 3572515 3572731 781 # chain 213: length 1 score 939 2838683 2838943 3574081 3574341 939 # chain 214: length 1 score 1076 2841331 2841629 3576694 3576992 1076 # chain 215: length 14 score 6566 2846859 2847158 3582222 3582521 1080 2847181 2847469 3582544 3582832 1040 2847831 2848268 3583194 3583631 1576 2848270 2848523 3583633 3583886 914 2848606 2848961 3583969 3584324 1281 2848963 2849325 3584326 3584688 1306 2850926 2851128 3586289 3586491 730 2851139 2851514 3586502 3586877 1353 2852110 2852391 3587473 3587754 1015 2853320 2853621 3588683 3588984 1087 2853872 2854098 3589235 3589461 817 2854529 2854828 3589892 3590191 1080 2854893 2855169 3590256 3590532 997 2855604 2856123 3590967 3591486 1872 # chain 216: length 14 score 12141 2864535 2864754 3596737 3596956 792 2864756 2865030 3596958 3597232 990 2865209 2865476 3597411 3597678 964 2865518 2865734 3597720 3597936 781 2865880 2866286 3598082 3598488 1465 2866387 2866634 3598589 3598836 892 2866834 2867202 3599036 3599404 1328 2867396 2867672 3599598 3599874 997 2867821 2868369 3600023 3600571 1976 2869103 2869391 3601305 3601593 1040 2869393 2869625 3601595 3601827 838 2870387 2871022 3602589 3603224 2289 2871160 2871582 3603362 3603784 1522 2871584 2872019 3603786 3604221 1569 # chain 217: length 2 score 1971 2885970 2886255 3617768 3618053 1029 2886425 2886780 3618222 3618577 1281 # chain 218: length 1 score 831 2888055 2888285 3619852 3620082 831 # chain 219: length 2 score 1233 2889793 2890003 3621590 3621800 759 2890189 2890423 3621986 3622220 846 # chain 220: length 1 score 756 2891093 2891302 3622890 3623099 756 # chain 221: length 1 score 774 2897135 2897349 3628932 3629146 774 # chain 222: length 1 score 1173 2898460 2898785 3630257 3630582 1173 # chain 223: length 1 score 1022 2901458 2901741 3633255 3633538 1022 # chain 224: length 100 score 48279 2905237 2905527 3639316 3639606 1047 2905547 2906034 3639626 3640113 1756 2906036 2906652 3640115 3640731 2221 2907449 2907730 3641528 3641809 1015 2907732 2908070 3641811 3642149 1220 2908102 2908400 3642181 3642479 1076 2909036 2909377 3643115 3643456 1231 2909379 2909656 3643458 3643735 1000 2909940 2910304 3644019 3644383 1314 2910480 2910805 3644559 3644884 1173 2911431 2912027 3645510 3646106 2149 2912225 2912484 3646304 3646563 936 2912855 2913562 3646934 3647641 2548 2914017 2914240 3648096 3648319 806 2914296 2914654 3648375 3648733 1292 2914689 2914992 3648768 3649071 1094 2914998 2915242 3649077 3649321 882 2915451 2915695 3649530 3649774 882 2916062 2916284 3650142 3650364 802 2917494 2917747 3651574 3651827 914 2918793 2919026 3652873 3653106 842 2919553 2919764 3653633 3653844 763 2920078 2920674 3654158 3654754 2149 2921222 2921733 3655302 3655813 1843 2921946 2922205 3656026 3656285 936 2922916 2923166 3656996 3657246 903 2923198 2923523 3657278 3657603 1173 2923525 2923743 3657605 3657823 788 2924110 2924627 3658190 3658707 1864 2924815 2925035 3658895 3659115 795 2925490 2925698 3659570 3659778 752 2925838 2926075 3659918 3660155 856 2926077 2926503 3660157 3660583 1537 2926820 2927055 3660900 3661135 849 2927387 2927763 3661467 3661843 1357 2928017 2928240 3662097 3662320 806 2928674 2928974 3662754 3663054 1083 2929226 2929836 3663306 3663916 2199 2929908 2930197 3663988 3664277 1044 2930268 2930563 3664348 3664643 1065 2930667 2931073 3664747 3665153 1465 2931075 2931390 3665155 3665470 1137 2931492 2931842 3665572 3665922 1263 2932194 2932425 3666274 3666505 835 2932745 2933043 3666825 3667123 1076 2933611 2933834 3667691 3667914 806 2934358 2934848 3668438 3668928 1767 2934850 2935109 3668930 3669189 936 2935111 2935418 3669191 3669498 1108 2935564 2935784 3669644 3669864 795 2935786 2936405 3669866 3670485 2232 2936506 2936742 3670586 3670822 853 2936859 2937093 3670939 3671173 846 2937131 2937948 3671211 3672028 2944 2938372 2938889 3672452 3672969 1864 2940044 2940486 3674124 3674566 1594 2940637 2940971 3674717 3675051 1206 2941477 2941770 3675557 3675850 1058 2943757 2944212 3677837 3678292 1641 2944844 2945248 3678924 3679328 1458 2945342 2945747 3679422 3679827 1461 2946496 2946827 3680576 3680907 1195 2947288 2947624 3681368 3681704 1213 2947872 2948179 3681952 3682259 1108 2948825 2949045 3682905 3683125 795 2949530 2949747 3683610 3683827 784 2949788 2950008 3683868 3684088 795 2952130 2952446 3686210 3686526 1141 2952793 2953194 3686873 3687274 1447 2953196 2953415 3687276 3687495 792 2954286 2954592 3688366 3688672 1105 2954594 2954832 3688674 3688912 860 2955038 2955270 3689118 3689350 838 2956154 2956380 3690234 3690460 817 2956706 2956927 3690786 3691007 799 2958659 2958934 3692739 3693014 993 2960256 2960476 3694336 3694556 795 2962083 2962376 3696163 3696456 1058 2963061 2963356 3697141 3697436 1065 2963712 2964359 3697792 3698439 2332 2964361 2964757 3698441 3698837 1429 2965038 2965297 3699118 3699377 936 2965650 2965915 3699730 3699995 957 2966001 2966248 3700081 3700328 892 2966250 2967090 3700330 3701170 3027 2967289 2967597 3701369 3701677 1112 2967998 2968278 3702078 3702358 1011 2969272 2969497 3703352 3703577 813 2969542 2969976 3703622 3704056 1566 2970125 2970476 3704205 3704556 1267 2970478 2970737 3704558 3704817 936 2971120 2971391 3705200 3705471 979 2971483 2971894 3705563 3705974 1483 2972012 2972379 3706092 3706459 1324 2972936 2973168 3707016 3707248 838 2973973 2974332 3708053 3708412 1296 2974589 2974891 3708671 3708973 1090 2975121 2975848 3709203 3709930 2620 2976234 2976541 3710316 3710623 1108 2976543 2976934 3710625 3711016 1411 # chain 225: length 1 score 1753 3136370 3136856 3888426 3888912 1753 # chain 226: length 44 score 19157 3138726 3138940 3890782 3890996 774 3139130 3139374 3891186 3891430 882 3139601 3139866 3891657 3891922 957 3139964 3140181 3892020 3892237 784 3140690 3141215 3892746 3893271 1893 3141217 3141434 3893273 3893490 784 3141757 3141962 3893813 3894018 741 3141964 3142233 3894020 3894289 972 3142235 3142542 3894291 3894598 1108 3142973 3143239 3895029 3895295 961 3143404 3143749 3895460 3895805 1245 3143751 3144101 3895807 3896157 1263 3144103 3144774 3896159 3896830 2419 3144779 3145142 3896835 3897198 1310 3146202 3146422 3898261 3898481 795 3147235 3147541 3899294 3899600 1105 3148313 3148647 3900372 3900706 1206 3149634 3149851 3901693 3901910 784 3149949 3150197 3902008 3902256 896 3150769 3151070 3902828 3903129 1087 3151429 3151741 3903488 3903800 1126 3151748 3152031 3903807 3904090 1022 3152247 3152475 3904307 3904535 824 3153099 3153477 3905159 3905537 1364 3154115 3154323 3906175 3906383 752 3154885 3155420 3906945 3907480 1929 3155961 3156207 3908018 3908264 889 3158209 3158522 3910262 3910575 1130 3158683 3158888 3910736 3910941 741 3158947 3159233 3911000 3911286 1033 3159946 3160291 3911999 3912344 1245 3160293 3160567 3912346 3912620 990 3161369 3161848 3913422 3913901 1728 3162085 3162284 3914138 3914337 720 3162322 3162671 3914375 3914724 1260 3162673 3162950 3914726 3915003 1000 3163102 3163582 3915155 3915635 1731 3163717 3164081 3915770 3916134 1314 3164320 3164886 3916373 3916939 2041 3164994 3165304 3917047 3917357 1119 3166942 3167162 3918073 3918293 795 3167281 3167625 3918412 3918756 1242 3167811 3168095 3918942 3919226 1026 3168108 3168349 3919239 3919480 871 # chain 227: length 9 score 12478 2724593 2724992 4168800 4169199 1440 2725002 2725338 4169209 4169545 1213 2725482 2725992 4169689 4170199 1839 2726034 2726616 4170241 4170823 2098 2726662 2726939 4170871 4171148 1000 2726941 2727215 4171150 4171424 990 2727586 2728585 4171810 4172809 3600 2728590 2728904 4172813 4173127 1134 2729099 2729323 4173322 4173546 810 # chain 228: length 376 score 179068 3239079 3239395 3990690 3991006 1141 3239947 3240491 3991558 3992102 1962 3240904 3241176 3992515 3992787 982 3241718 3242053 3993329 3993664 1209 3242055 3242325 3993666 3993936 975 3242588 3243275 3994200 3994887 2476 3243502 3243917 3995114 3995529 1497 3244186 3244391 3995798 3996003 741 3245094 3246040 3996706 3997652 3409 3246042 3246313 3997654 3997925 979 3246641 3247195 3998253 3998807 1998 3247819 3248046 3999431 3999658 820 3248348 3248660 3999960 4000272 1126 3248662 3248946 4000274 4000558 1026 3249840 3250148 4001450 4001758 1112 3250565 3251112 4002174 4002721 1972 3251458 3251673 4003067 4003282 777 3251774 3252130 4003383 4003739 1285 3253092 3253375 4004701 4004984 1022 3253503 3253740 4005112 4005349 856 3253993 3254348 4005601 4005956 1281 3255615 3255842 4007221 4007448 820 3256405 3256625 4008011 4008231 795 3256891 3257382 4008498 4008989 1771 3259241 3259464 4010849 4011072 806 3260420 3260640 4012028 4012248 795 3260751 3261063 4012359 4012671 1126 3261585 3261826 4013193 4013434 871 3261954 3262468 4013562 4014076 1854 3262470 3263170 4014078 4014778 2523 3263460 3263949 4015068 4015557 1764 3263951 3264240 4015559 4015848 1044 3264266 3264489 4015874 4016097 806 3264527 3264807 4016135 4016415 1011 3264849 3265062 4016457 4016670 770 3265251 3265513 4016859 4017121 946 3266461 3266670 4018069 4018278 756 3267784 3268504 4018998 4019718 2595 3268674 3269035 4019888 4020249 1303 3269292 3269587 4020506 4020801 1065 3269589 3269983 4020803 4021197 1422 3269985 3270250 4021199 4021464 957 3270252 3270708 4021466 4021922 1645 3271034 3271275 4022248 4022489 871 3271469 3271701 4022683 4022915 838 3272144 3272367 4023358 4023581 806 3272372 3272594 4023586 4023808 802 3273375 3273701 4024589 4024915 1177 3274479 3274820 4025693 4026034 1231 3274865 3275107 4026079 4026321 874 3275713 3275975 4026927 4027189 946 3276647 3276864 4027861 4028078 784 3276866 3277286 4028080 4028500 1515 3277530 3277854 4028744 4029068 1170 3277956 3278194 4029170 4029408 860 3279503 3279704 4033022 4033223 727 3280091 3280307 4033610 4033826 781 3280515 3280799 4034034 4034318 1026 3281503 3281717 4035022 4035236 774 3282107 3282345 4035626 4035864 860 3282376 3282608 4035895 4036127 838 3282964 3283206 4036483 4036725 874 3283283 3283638 4036802 4037157 1281 3284201 3284402 4037720 4037921 727 3286661 3286910 4040180 4040429 900 3287555 3287899 4041074 4041418 1242 3288084 3288288 4041603 4041807 738 3288551 3288909 4042070 4042428 1292 3289062 3289305 4042581 4042824 878 3289655 3289855 4044132 4044332 723 3289877 3290113 4044354 4044590 853 3290115 3290582 4044592 4045059 1684 3290755 3291112 4045232 4045589 1288 3291114 3291324 4045591 4045801 759 3291448 3291914 4045925 4046391 1681 3294415 3294681 4048892 4049158 961 3295677 3295895 4050154 4050372 788 3296398 3296801 4050875 4051278 1454 3297543 3297742 4052020 4052219 720 3298340 3298676 4052817 4053153 1213 3298774 3299360 4053251 4053837 2113 3299731 3299948 4054208 4054425 784 3300663 3300927 4055140 4055404 954 3300929 3301158 4055406 4055635 828 3302463 3302684 4056939 4057160 799 3302991 3303501 4057467 4057977 1839 3305400 3306657 4059876 4061133 4528 3306659 3306903 4061135 4061379 882 3307568 3307857 4062044 4062333 1044 3308687 3309085 4063163 4063561 1436 3309087 3309496 4063563 4063972 1476 3311453 3311752 4065930 4066229 1080 3311877 3312139 4066354 4066616 946 3312567 3312796 4067044 4067273 828 3313095 3314016 4067572 4068493 3319 3314043 3314317 4068520 4068794 990 3314619 3314848 4069096 4069325 828 3314994 3315210 4069471 4069687 781 3315237 3315882 4069714 4070359 2325 3316069 3316332 4070546 4070809 950 3316334 3316671 4070811 4071148 1216 3317022 3317247 4071499 4071724 813 3317926 3318211 4072403 4072688 1029 3319575 3319803 4074052 4074280 824 3320704 3320981 4075181 4075458 1000 3321517 3321738 4075994 4076215 799 3321794 3322098 4076271 4076575 1098 3322373 3322738 4076850 4077215 1317 3322740 3323120 4077217 4077597 1371 3323296 3323579 4077773 4078056 1022 3323791 3324010 4078268 4078487 792 3324289 3325821 4078766 4080298 5518 3326435 3326781 4080912 4081258 1249 3327152 3327606 4081629 4082083 1638 3328286 3328491 4082617 4082822 741 3328573 3328944 4082904 4083275 1339 3329138 3329874 4083469 4084205 2653 3330017 3330222 4084348 4084553 741 3330305 3331594 4084636 4085925 4644 3332630 3332940 4086962 4087272 1119 3332942 3333168 4087274 4087500 817 3333452 3333675 4087784 4088007 806 3334040 3334683 4088372 4089015 2318 3335272 3335486 4089604 4089818 774 3335488 3335690 4089820 4090022 730 3336004 3336375 4090336 4090707 1339 3336407 3336708 4090739 4091040 1087 3336954 3337849 4091286 4092181 3225 3337851 3338073 4092183 4092405 802 3338209 3338606 4092541 4092938 1432 3338608 3339078 4092940 4093410 1695 3339276 3339588 4093608 4093920 1126 3339755 3339998 4094087 4094330 878 3340842 3341126 4095174 4095458 1026 3341254 3341495 4095586 4095827 871 3341503 3341792 4095835 4096124 1044 3342146 3342691 4096478 4097023 1965 3343431 3343684 4097763 4098016 914 3343782 3344130 4098114 4098462 1256 3344132 3344351 4098464 4098683 792 3344464 3344685 4098796 4099017 799 3344687 3344999 4099019 4099331 1126 3345364 3345610 4099696 4099942 889 3345711 3345964 4100043 4100296 914 3347531 3347774 4101863 4102106 878 3348585 3348874 4102918 4103207 1044 3349350 3349750 4103689 4104089 1443 3350193 3350608 4104532 4104947 1497 3350610 3350865 4104949 4105204 921 3350867 3351138 4105206 4105477 979 3352255 3352513 4106593 4106851 932 3353622 3354112 4107960 4108450 1767 3356796 3357073 4111134 4111411 1000 3366139 3366442 4113372 4113675 1094 3367797 3368028 4115030 4115261 835 3370165 3370385 4117398 4117618 795 3370660 3371060 4117893 4118293 1443 3371161 3371361 4118394 4118594 723 3371849 3372422 4119082 4119655 2066 3373076 3373278 4120306 4120508 730 3373962 3374538 4121184 4121760 2077 3374755 3375128 4121977 4122350 1346 3375420 3375673 4122642 4122895 914 3375711 3376496 4122933 4123718 2829 3376514 3376845 4123736 4124067 1195 3377243 3377442 4124465 4124664 720 3377618 3378057 4124840 4125279 1584 3378059 3378453 4125281 4125675 1422 3379305 3379767 4126527 4126989 1666 3379769 3379970 4126991 4127192 727 3379972 3380294 4127194 4127516 1162 3381775 3382057 4128998 4129280 1018 3382203 3382584 4129426 4129807 1375 3382900 3383770 4130123 4130993 3135 3384948 3385674 4132172 4132898 2617 3386228 3386538 4133452 4133762 1119 3386569 3386877 4133790 4134098 1112 3386989 3387192 4134210 4134413 734 3387265 3387626 4134486 4134847 1303 3387934 3388145 4135155 4135366 763 3388256 3388744 4135477 4135965 1760 3389365 3389594 4136586 4136815 828 3390014 3390275 4136960 4137221 943 3390277 3390599 4137223 4137545 1162 3392293 3392512 4139239 4139458 792 3392557 3392786 4139503 4139732 828 3392788 3393011 4139734 4139957 806 3393173 3393450 4140118 4140395 1000 3393686 3394084 4140631 4141029 1436 3394140 3394555 4141085 4141500 1497 3395220 3395510 4142165 4142455 1047 3395701 3396052 4142646 4142997 1267 3396054 3396358 4142999 4143303 1098 3396638 3396948 4143583 4143893 1119 3397136 3397383 4144081 4144328 892 3397399 3397658 4144344 4144603 936 3397963 3398162 4144908 4145107 720 3398383 3398994 4145328 4145939 2203 3399308 3399660 4146253 4146605 1270 3399662 3399972 4146607 4146917 1119 3399974 3400293 4146919 4147238 1152 3400295 3400512 4147240 4147457 784 3400791 3401694 4147736 4148639 3254 3401774 3402104 4148719 4149049 1191 3402738 3402963 4149683 4149908 813 3402965 3403364 4149910 4150309 1440 3403366 3404046 4150311 4150991 2451 3404282 3404908 4151227 4151853 2257 3405498 3405850 4152443 4152795 1270 3406435 3406830 4153380 4153775 1425 3407033 3407362 4153978 4154307 1188 3407602 3409217 4154547 4156162 5817 3409487 3409824 4156431 4156768 1216 3409826 3410193 4156770 4157137 1324 3410195 3410933 4157139 4157877 2660 3411367 3411948 4158311 4158892 2095 3412181 3412416 4159125 4159360 849 3412553 3412778 4159497 4159722 813 3412780 3413087 4159724 4160031 1108 3413710 3413969 4160654 4160913 936 3415878 3416189 4162867 4163178 1123 3417604 3418404 4164594 4165394 2883 3418988 3419228 4165979 4166219 867 3419651 3419918 4166642 4166909 964 3420023 3420385 4167014 4167376 1306 3421119 3421407 4168109 4168397 1040 3421879 3422207 4168871 4169199 1184 3422696 3423208 4169687 4170199 1846 3423250 3423832 4170241 4170823 2098 3423878 3424155 4170871 4171148 1000 3424157 3424431 4171150 4171424 990 3424482 3426125 4171484 4173127 5918 3426321 3426619 4173323 4173621 1076 3426774 3427305 4173775 4174306 1915 3428346 3429032 4175347 4176033 2473 3429282 3429525 4176283 4176526 878 3430001 3430287 4177001 4177287 1033 3430453 3430789 4177454 4177790 1213 3431126 3431537 4178127 4178538 1483 3431698 3432088 4178699 4179089 1407 3432565 3432830 4179566 4179831 957 3432832 3433035 4179833 4180036 734 3434766 3434974 4181767 4181975 752 3435183 3435478 4182184 4182479 1065 3435480 3435757 4182481 4182758 1000 3436077 3436279 4183078 4183280 730 3437201 3439353 4184202 4186354 7750 3439355 3441199 4186356 4188200 6642 3441372 3441946 4188373 4188947 2070 3441948 3442484 4188949 4189485 1933 3442567 3445133 4189568 4192134 9241 3445135 3445932 4192136 4192933 2872 3445934 3446766 4192935 4193767 2998 3446768 3447008 4193769 4194009 867 3447010 3447961 4194011 4194962 3427 3447963 3448448 4194964 4195449 1749 3448621 3450172 4195622 4197173 5587 3450174 3451090 4197175 4198091 3301 3467941 3468347 4199836 4200242 1465 3468373 3468755 4200268 4200650 1378 3468757 3469776 4200652 4201671 3672 3469778 3470013 4201673 4201908 849 3470015 3470337 4201910 4202232 1162 3470339 3470712 4202234 4202607 1346 3470837 3471247 4202732 4203142 1479 3471249 3472330 4203144 4204225 3895 3473266 3474010 4205161 4205905 2682 3474012 3474340 4205907 4206235 1184 3474751 3474955 4206646 4206850 738 3475166 3475532 4207061 4207427 1321 3475706 3476308 4207601 4208203 2170 3478532 3479001 4210427 4210896 1692 3479003 3479205 4210898 4211100 730 3479381 3479787 4211276 4211682 1465 3480317 3480531 4212212 4212426 774 3480674 3480892 4212569 4212787 788 3481588 3482044 4213483 4213939 1645 3483129 3483391 4215024 4215286 946 3483405 3483901 4215300 4215796 1789 3483903 3484103 4215798 4215998 723 3484812 3485304 4216707 4217199 1774 3486203 3486522 4218098 4218417 1152 3487530 3487738 4219425 4219633 752 3488086 3488312 4219981 4220207 817 3489056 3489588 4220951 4221483 1918 3489620 3490343 4221515 4222238 2606 3490345 3490778 4222240 4222673 1562 3491552 3491969 4223447 4223864 1504 3492244 3492530 4224139 4224425 1033 3493357 3493806 4225252 4225701 1620 3494018 3494564 4225913 4226459 1969 3494566 3494775 4226461 4226670 756 3495233 3495786 4227128 4227681 1994 3497732 3497962 4229636 4229866 831 3498221 3498495 4230125 4230399 990 3500412 3500638 4232316 4232542 817 3502130 3502383 4234034 4234287 914 3511022 3511224 4235206 4235408 730 3511226 3511429 4235410 4235613 734 3511479 3511726 4235663 4235910 892 3512254 3512477 4236438 4236661 806 3512572 3512884 4236756 4237068 1126 3513156 3513713 4237340 4237897 2008 3513715 3513932 4237899 4238116 784 3514385 3515230 4238569 4239414 3045 3515240 3515540 4239424 4239724 1083 3515918 3516383 4240102 4240567 1677 3516385 3516757 4240569 4240941 1342 3516759 3516985 4240943 4241169 817 3516987 3517215 4241171 4241399 824 3517217 3517614 4241401 4241798 1432 3517616 3517842 4241800 4242026 817 3518195 3518414 4242379 4242598 792 3518416 3518675 4242600 4242859 936 3520327 3520731 4244510 4244914 1458 3520965 3521184 4245148 4245367 792 3521285 3521538 4245468 4245721 914 3522164 3522606 4246347 4246789 1594 3523701 3524476 4247883 4248658 2793 3524613 3524845 4248795 4249027 838 3525597 3526027 4249779 4250209 1551 3526302 3526895 4250484 4251077 2138 3526994 3527511 4251176 4251693 1864 3527798 3528156 4251980 4252338 1292 3529862 3530732 4254044 4254914 3135 3531598 3531959 4255780 4256141 1303 3533168 3533540 4257350 4257722 1342 3533605 3533840 4257787 4258022 849 3533944 3534609 4258126 4258791 2397 3534872 3535125 4259054 4259307 914 3535502 3535933 4259684 4260115 1555 3537716 3538058 4261881 4262223 1234 3538118 3538388 4262283 4262553 975 3538720 3538988 4262885 4263153 968 3539188 3539423 4263353 4263588 849 3542064 3542270 4266227 4266433 745 3543166 3543377 4267329 4267540 763 3544363 3544621 4268530 4268788 932 3545028 3545338 4269195 4269505 1119 3546156 3546421 4270257 4270522 957 3547430 3547650 4271531 4271751 795 3547653 3548003 4271754 4272104 1263 3548005 3548356 4272106 4272457 1267 3548687 3548920 4272788 4273021 842 3549389 3549652 4273490 4273753 950 3549996 3550236 4274097 4274337 867 3550457 3550734 4274558 4274835 1000 3550966 3551195 4275067 4275296 828 3551197 3551564 4275298 4275665 1324 3551566 3551783 4275667 4275884 784 3552517 3552752 4276618 4276853 849 3557336 3557543 4282277 4282484 748 3557579 3557826 4282520 4282767 892 3558241 3558696 4283182 4283637 1641 3558933 3559148 4283874 4284089 777 3559415 3559617 4284356 4284558 730 3559675 3559992 4284616 4284933 1144 3560557 3560792 4285498 4285733 849 3561803 3562239 4289596 4290032 1573 3562646 3563634 4290439 4291427 3560 3563858 3564327 4291651 4292120 1692 3564329 3564567 4292122 4292360 860 3564976 3565428 4292769 4293221 1630 3565472 3566159 4293265 4293952 2476 3566161 3566576 4293954 4294369 1497 3566584 3567271 4294377 4295064 2476 3567273 3567496 4295066 4295289 806 3567597 3567963 4295390 4295756 1321 3568254 3568461 4296047 4296254 748 3568479 3569058 4296272 4296851 2088 3569644 3569895 4297437 4297688 907 3570512 3570762 4298305 4298555 903 3570926 3571649 4298719 4299442 2606 3571651 3571952 4299444 4299745 1087 3572002 3572237 4299795 4300030 849 3572517 3572896 4300309 4300688 1368 # chain 229: length 4 score 2761 3616903 3617237 4514597 4514931 1206 3617546 3617774 4515240 4515468 824 3617776 3618000 4515470 4515694 810 3618297 3618612 4515991 4516306 1137 # chain 230: length 3 score 3749 729222 729757 4514933 4515468 1929 730140 730432 4515851 4516143 1054 730483 730936 4516194 4516647 1634 # chain 231: length 1 score 849 3907598 3907833 4708063 4708298 849 # chain 232: length 1 score 928 3908983 3909240 4709448 4709705 928 # chain 233: length 1 score 943 3911180 3911441 4718382 4718643 943 # chain 234: length 1 score 781 224672 224888 4747537 4747753 781 # chain 235: length 8 score 12899 4164227 4165138 4746626 4747537 3283 4165275 4165657 4747673 4748055 1378 4166184 4166481 4748496 4748793 1072 4166483 4166760 4748795 4749072 1000 4166769 4167388 4749083 4749702 2232 4167430 4167940 4749743 4750253 1839 4168084 4168420 4750397 4750733 1213 4168430 4169134 4750743 4751447 2538 # chain 236: length 8 score 12768 4205631 4206625 4746543 4747537 3582 4206762 4207144 4747673 4748055 1378 4207599 4207883 4748509 4748793 1026 4207885 4208162 4748795 4749072 1000 4208171 4208790 4749083 4749702 2232 4208832 4209342 4749743 4750253 1839 4209486 4209822 4750397 4750733 1213 4209832 4210413 4750743 4751324 2095 # chain 237: length 8 score 12273 4033109 4034020 4746626 4747537 3283 4034157 4034539 4747673 4748055 1378 4035078 4035360 4748511 4748793 1018 4035414 4035639 4748847 4749072 813 4035648 4036270 4749083 4749705 2242 4036272 4036820 4749707 4750255 1976 4036971 4037300 4750404 4750733 1188 4037310 4037891 4750743 4751324 2095 # chain 238: length 9 score 12310 223741 224671 4746607 4747537 3351 224890 225190 4747755 4748055 1083 225736 226298 4748509 4749071 2026 226308 226602 4749083 4749377 1062 226604 226927 4749379 4749702 1166 226987 227481 4749761 4750255 1782 227623 227959 4750397 4750733 1213 227969 228550 4750743 4751324 2095 228768 229004 4751541 4751777 853 # chain 239: length 8 score 10437 4164576 4164974 4843160 4843558 1436 4164976 4165237 4843560 4843821 943 4165275 4165798 4843859 4844382 1886 4166150 4166354 4844740 4844944 738 4166769 4167388 4845361 4845980 2232 4167430 4167873 4846021 4846464 1598 4168084 4168420 4846675 4847011 1213 4168430 4169134 4847021 4847725 2538 # chain 240: length 9 score 11547 224109 224507 4843160 4843558 1436 224509 224888 4843560 4843939 1368 224890 225585 4843941 4844636 2505 225900 226112 4844951 4845163 766 226308 226602 4845361 4845655 1062 226604 226927 4845657 4845980 1166 226987 227412 4846039 4846464 1533 227623 227959 4846675 4847011 1213 227969 228550 4847021 4847602 2095 # chain 241: length 8 score 9583 4205569 4205867 4842666 4842964 1076 4206063 4206461 4843160 4843558 1436 4206463 4206724 4843560 4843821 943 4206762 4207279 4843859 4844376 1864 4208171 4208790 4845361 4845980 2232 4208832 4209275 4846021 4846464 1598 4209486 4209822 4846675 4847011 1213 4209832 4210413 4847021 4847602 2095 # chain 242: length 8 score 8834 3939284 3939507 4842675 4842898 806 3939769 3940167 4843160 4843558 1436 3940467 3940984 4843859 4844376 1864 3941255 3941460 4844739 4844944 741 3941876 3942495 4845361 4845980 2232 3942537 3942980 4846021 4846464 1598 3943061 3943705 4846545 4847189 2322 3943851 3944118 4847335 4847602 964 # chain 243: length 3 score 1293 3759943 3760224 4940178 4940459 1015 3760536 3760761 4940772 4940997 813 3761284 3761599 4941521 4941836 1137 # chain 244: length 3 score 1293 3616956 3617237 4940178 4940459 1015 3617549 3617774 4940772 4940997 813 3618297 3618612 4941521 4941836 1137 # chain 245: length 4 score 3243 729265 729530 4940505 4940770 957 729532 729757 4940772 4940997 813 730140 730432 4941381 4941673 1054 730483 730841 4941724 4942082 1292 # chain 246: length 1 score 936 3619531 3619790 4942755 4943014 936 # chain 247: length 2 score 1244 3762518 3762777 4942755 4943014 936 3762983 3763182 4943220 4943419 720 # chain 248: length 6 score 5922 3939965 3940331 4987628 4987994 1321 3940467 3940849 4988131 4988513 1378 3941256 3941568 4988920 4989232 1126 3941876 3942495 4989541 4990160 2232 3942537 3942893 4990201 4990557 1285 3943350 3943705 4991014 4991369 1281 # chain 249: length 10 score 8965 223760 223968 4987083 4987291 752 223970 224181 4987293 4987504 763 224305 224888 4987628 4988211 2102 224890 225190 4988213 4988513 1083 225736 226001 4988967 4989232 957 226022 226298 4989253 4989529 997 226308 226602 4989541 4989835 1062 226604 226927 4989837 4990160 1166 226987 227325 4990219 4990557 1220 227969 228411 4991201 4991643 1594 # chain 250: length 9 score 9614 4032883 4033317 4986857 4987291 1566 4033319 4033530 4987293 4987504 763 4033654 4034119 4987628 4988093 1677 4034157 4034539 4988131 4988513 1378 4035078 4035341 4988969 4989232 950 4035414 4035639 4989305 4989530 813 4035648 4036270 4989541 4990163 2242 4036272 4036664 4990165 4990557 1414 4037310 4037752 4991201 4991643 1594 # chain 251: length 6 score 4536 3939284 3939507 5027956 5028179 806 3939843 3940092 5028515 5028764 900 3940331 3940849 5029004 5029522 1868 3941256 3941587 5029929 5030260 1195 3941982 3942322 5030654 5030994 1227 3942559 3943049 5031230 5031720 1767 # chain 252: length 6 score 4282 223741 224022 5028073 5028354 1015 224183 224432 5028515 5028764 900 224890 225190 5029222 5029522 1083 225736 226297 5029976 5030537 2023 226991 227481 5031230 5031720 1767 227969 228550 5032208 5032789 2095 # chain 253: length 8 score 7352 4033109 4033371 5028092 5028354 946 4033532 4033781 5028515 5028764 900 4033965 4034539 5028948 5029522 2070 4035078 4035360 5029978 5030260 1018 4035414 4035637 5030314 5030537 806 4035754 4036094 5030654 5030994 1227 4036330 4036820 5031230 5031720 1767 4037310 4037891 5032208 5032789 2095 # chain 254: length 643 score 139694 3912307 3912572 4719509 4719774 957 3912787 3913008 4719989 4720210 799 3913071 3913378 4720272 4720579 1108 3913380 3914138 4720581 4721339 2732 3914140 3914342 4721341 4721543 730 3914443 3914774 4721644 4721975 1195 3914848 3916092 4722049 4723293 4482 3916211 3916485 4723412 4723686 990 3916700 3916965 4723901 4724166 957 3916967 3917247 4724168 4724448 1011 3917273 3917733 4724474 4724934 1659 3917861 3919833 4725062 4727034 7102 3919835 3920254 4727036 4727455 1512 3920256 3920953 4727457 4728154 2512 3921084 3921346 4728285 4728547 946 3921557 3921943 4728758 4729144 1393 3922075 3922345 4729276 4729546 975 3923190 3923401 4730391 4730602 763 3924356 3924810 4731557 4732011 1638 3924947 3925200 4732148 4732401 914 3925721 3925958 4732922 4733159 856 3928391 3928805 4735593 4736007 1494 3928807 3929180 4736009 4736382 1346 3929182 3929417 4736384 4736619 849 3929869 3930141 4737071 4737343 982 3930676 3930940 4737879 4738143 954 3930942 3931172 4738145 4738375 831 3931174 3931620 4738377 4738823 1609 3932054 3932535 4739257 4739738 1735 3932573 3933133 4739776 4740336 2019 3933261 3933512 4740464 4740715 907 3933609 3934150 4740812 4741353 1951 3934479 3934711 4741682 4741914 838 3934713 3935109 4741916 4742312 1429 3935165 3935694 4742368 4742897 1908 3935747 3936714 4742950 4743917 3484 3937378 3937780 4744581 4744983 1450 3937782 3938147 4744985 4745350 1317 3938339 3938586 4745542 4745789 892 3938726 3938953 4745932 4746159 820 3939656 3940429 4746862 4747635 2786 3940467 3940849 4747673 4748055 1378 3941290 3941587 4748496 4748793 1072 3941876 3942495 4749083 4749702 2232 3942537 3943049 4749743 4750255 1846 3943061 3943705 4750267 4750911 2322 3943851 3944118 4751057 4751324 964 3944336 3944674 4751541 4751879 1220 3944802 3945035 4752007 4752240 842 3945350 3945775 4752556 4752981 1533 3946383 3946652 4753589 4753858 972 3947539 3947758 4754745 4754964 792 3947893 3948155 4755099 4755361 946 3949865 3950206 4757073 4757414 1231 3950601 3950815 4757809 4758023 774 3951168 3951462 4758379 4758673 1062 3953182 3953508 4760393 4760719 1177 3954320 3954533 4761534 4761747 770 3955253 3955479 4762467 4762693 817 3957900 3958491 4765080 4765671 2131 3958966 3959213 4766146 4766393 892 3959407 3959684 4766587 4766864 1000 3960040 3960576 4767220 4767756 1933 3960579 3961420 4767759 4768600 3031 3961588 3961828 4768768 4769008 867 3961830 3962173 4769010 4769353 1238 3962188 3962389 4769368 4769569 727 3962454 3962761 4769634 4769941 1108 3963037 3963652 4770217 4770832 2217 3963654 3964503 4770834 4771683 3060 3965149 3965452 4772329 4772632 1094 3965454 3965663 4772634 4772843 756 3965878 3966125 4773058 4773305 892 3966524 3967018 4773704 4774198 1782 3967020 3967264 4774200 4774444 882 3967437 3967796 4774617 4774976 1296 3967798 3968030 4774978 4775210 838 3969369 3970114 4776552 4777297 2685 3971252 3971598 4778435 4778781 1249 3972240 3972529 4779423 4779712 1044 3972638 3973086 4779821 4780269 1616 3973882 3974154 4781065 4781337 982 3974559 3974824 4781742 4782007 957 3975080 3975311 4782263 4782494 835 3976549 3976943 4783731 4784125 1422 3977350 3977590 4784532 4784772 867 3978430 3978700 4785612 4785882 975 3978702 3978920 4785884 4786102 788 3979246 3979463 4786428 4786645 784 3979950 3980813 4787132 4787995 3110 3983060 3983408 4790252 4790600 1256 3983798 3984254 4790991 4791447 1645 3984350 3985017 4791543 4792210 2404 3985785 3985988 4792996 4793199 734 3985990 3986378 4793201 4793589 1400 3986526 3986898 4793737 4794109 1342 3987329 3987584 4794540 4794795 921 3988758 3989024 4795970 4796236 961 3989842 3990281 4797054 4797493 1584 3990574 3990824 4797786 4798036 903 3991069 3991298 4798281 4798510 828 3994640 3994891 4801852 4802103 907 3998658 3999242 4806754 4807338 2106 3999244 3999506 4807340 4807602 946 4001721 4001947 4811588 4811814 817 4002078 4002350 4811945 4812217 982 4002433 4002653 4812300 4812520 795 4002679 4002974 4812546 4812841 1065 4002976 4003592 4812843 4813459 2221 4003651 4004132 4813518 4813999 1735 4004500 4004978 4814367 4814845 1724 4006636 4006971 4816508 4816843 1209 4007150 4007604 4817022 4817476 1638 4007907 4008189 4817781 4818063 1018 4009409 4009691 4819297 4819579 1018 4010714 4011133 4820601 4821020 1512 4012706 4013140 4822593 4823027 1566 4013300 4013716 4823188 4823604 1501 4013892 4014726 4823782 4824616 3006 4014737 4015625 4824627 4825515 3200 4015657 4015934 4825547 4825824 1000 4016125 4016741 4826015 4826631 2221 4016743 4017305 4826633 4827195 2026 4017548 4017783 4827438 4827673 849 4017785 4018011 4827675 4827901 817 4018598 4018800 4828488 4828690 730 4018898 4019521 4828788 4829411 2246 4019523 4019855 4829413 4829745 1198 4019861 4020179 4829749 4830067 1148 4020181 4020673 4830069 4830561 1774 4020843 4021207 4830731 4831095 1314 4021209 4021554 4831097 4831442 1245 4021683 4021942 4831570 4831829 936 4022289 4022618 4832176 4832505 1188 4023615 4023844 4833502 4833731 828 4024014 4024270 4833901 4834157 925 4024386 4024747 4834273 4834634 1303 4028184 4028599 4837882 4838297 1497 4030642 4030915 4840340 4840613 986 4031326 4031698 4841024 4841396 1342 4032014 4032255 4841713 4841954 871 4032514 4032788 4842213 4842487 990 4033458 4033856 4843160 4843558 1436 4033858 4034119 4843560 4843821 943 4034157 4034674 4843859 4844376 1864 4034682 4035035 4844384 4844737 1274 4035648 4036270 4845361 4845983 2242 4036272 4036751 4845985 4846464 1728 4036971 4037300 4846682 4847011 1188 4037310 4037891 4847021 4847602 2095 4038498 4039102 4848038 4848642 2178 4039724 4039958 4849264 4849498 846 4040674 4040905 4850213 4850444 835 4040907 4041365 4850446 4850904 1652 4041665 4042311 4851205 4851851 2329 4042313 4042580 4851853 4852120 964 4042808 4043242 4852348 4852782 1566 4043940 4044491 4853480 4854031 1987 4044493 4044810 4854033 4854350 1144 4045175 4045638 4854715 4855178 1670 4046696 4047212 4856236 4856752 1861 4047348 4047597 4856889 4857138 900 4048169 4048373 4857710 4857914 738 4048529 4048757 4858070 4858298 824 4049515 4049832 4859053 4859370 1144 4050350 4050549 4859888 4860087 720 4050551 4050882 4860089 4860420 1195 4052298 4052503 4861797 4862002 741 4052784 4053048 4862283 4862547 954 4053818 4054023 4863317 4863522 741 4055063 4055292 4864450 4864679 828 4055827 4056695 4865214 4866082 3128 4056823 4057370 4866210 4866757 1972 4057496 4057758 4866883 4867145 946 4057779 4058383 4867167 4867771 2178 4058682 4058912 4868070 4868300 831 4058914 4059128 4868302 4868516 774 4059990 4060374 4869378 4869762 1386 4065903 4066156 4875289 4875542 914 4070076 4070469 4880235 4880628 1418 4071254 4071466 4881413 4881625 766 4072146 4072369 4882305 4882528 806 4073229 4073457 4883388 4883616 824 4073818 4074128 4883977 4884287 1119 4074145 4074371 4884304 4884530 817 4074451 4074664 4884610 4884823 770 4074666 4075524 4884825 4885683 3092 4075844 4076090 4886003 4886249 889 4076865 4077144 4889090 4889369 1008 4078137 4078378 4890361 4890602 871 4078380 4078660 4890604 4890884 1011 4078874 4079490 4891098 4891714 2221 4079740 4080014 4891964 4892238 990 4080655 4081100 4892879 4893324 1605 4082241 4082495 4894465 4894719 918 4082650 4083118 4894874 4895342 1688 4083120 4083610 4895344 4895834 1767 4083612 4083818 4895836 4896042 745 4083823 4084085 4896047 4896309 946 4084114 4084446 4896338 4896670 1198 4084924 4085191 4897148 4897415 964 4085768 4085980 4897991 4898203 766 4088405 4088620 4900628 4900843 777 4088622 4088887 4900845 4901110 957 4089204 4089568 4901415 4901779 1314 4093600 4094019 4907147 4907566 1512 4094283 4095506 4907830 4909053 4406 4095607 4095977 4909154 4909524 1335 4097108 4097318 4910655 4910865 759 4097955 4098496 4911502 4912043 1951 4099287 4099550 4912834 4913097 950 4099936 4100150 4913483 4913697 774 4100221 4100472 4913768 4914019 907 4101847 4102396 4915394 4915943 1980 4102832 4103518 4916379 4917065 2473 4103648 4103949 4917196 4917497 1087 4104111 4104346 4917659 4917894 849 4104468 4104676 4918016 4918224 752 4104678 4104886 4918226 4918434 752 4105666 4105981 4919214 4919529 1137 4106308 4106567 4919855 4920114 936 4107268 4107796 4920815 4921343 1904 4108134 4108363 4921681 4921910 828 4108950 4109289 4922497 4922836 1224 4109737 4110009 4923284 4923556 982 4110197 4110431 4923744 4923978 846 4110433 4110670 4923980 4924217 856 4110942 4111206 4924489 4924753 954 4112872 4113113 4926419 4926660 871 4113531 4113841 4927173 4927483 1119 4114131 4114333 4927773 4927975 730 4114335 4114669 4927977 4928311 1206 4115275 4115600 4928917 4929242 1173 4116503 4116960 4931583 4932040 1648 4117834 4118324 4932914 4933404 1767 4118491 4118702 4933571 4933782 763 4118758 4119248 4933838 4934328 1767 4119603 4120087 4934683 4935167 1746 4120353 4120633 4935433 4935713 1011 4120662 4121417 4935742 4936497 2721 4121652 4121888 4936732 4936968 853 4121923 4122259 4937003 4937339 1213 4124464 4124851 4939544 4939931 1396 4125654 4125980 4946126 4946452 1177 4127211 4127562 4947683 4948034 1267 4129938 4130145 4950410 4950617 748 4130200 4130488 4950672 4950960 1040 4131927 4132171 4952399 4952643 882 4135402 4135606 4955874 4956078 738 4136436 4136795 4956908 4957267 1296 4137236 4137510 4957708 4957982 990 4137555 4137781 4958027 4958253 817 4137861 4138078 4958333 4958550 784 4138590 4138819 4959062 4959291 828 4139421 4139629 4959893 4960101 752 4139953 4140262 4960426 4960735 1116 4141642 4141843 4962115 4962316 727 4142728 4143062 4963201 4963535 1206 4143891 4144140 4964364 4964613 900 4144322 4144545 4964795 4965018 806 4144994 4145292 4965467 4965765 1076 4145384 4145652 4965857 4966125 968 4145692 4145913 4966165 4966386 799 4146763 4147047 4967236 4967520 1026 4147330 4147624 4967803 4968097 1062 4149229 4149642 4969703 4970116 1490 4150207 4150508 4970681 4970982 1087 4150552 4150888 4971026 4971362 1213 4151440 4151657 4971668 4971885 784 4151809 4152222 4972037 4972450 1490 4152388 4152636 4972616 4972864 896 4153810 4154138 4974038 4974366 1184 4154273 4154567 4974501 4974795 1062 4155818 4156348 4976046 4976576 1911 4156746 4156966 4976974 4977194 795 4157626 4158023 4977854 4978251 1432 4158157 4158450 4978385 4978678 1058 4158561 4158838 4981417 4981694 1000 4158861 4159219 4981717 4982075 1292 4160709 4161251 4983565 4984107 1954 4162354 4162742 4985210 4985598 1400 4162744 4163523 4985600 4986379 2808 4163525 4163789 4986381 4986645 954 4164001 4164435 4986857 4987291 1566 4164437 4164648 4987293 4987504 763 4164772 4165237 4987628 4988093 1677 4165275 4165657 4988131 4988513 1378 4165950 4166462 4988720 4989232 1846 4166464 4166760 4989234 4989530 1069 4166769 4167388 4989541 4990160 2232 4167430 4167786 4990201 4990557 1285 4168430 4168872 4991201 4991643 1594 4168874 4169134 4991645 4991905 939 4170257 4170470 4992862 4993075 770 4172858 4173811 4995446 4996399 3434 4173886 4174106 4996474 4996694 795 4174116 4175013 4996704 4997601 3232 4175015 4175909 4997603 4998497 3222 4175950 4176241 4998539 4998830 1051 4176243 4176538 4998832 4999127 1065 4176894 4177208 4999483 4999797 1134 4177351 4178584 4999819 5001052 4442 4178586 4179345 5001054 5001813 2736 4179578 4179837 5002046 5002305 936 4180073 4180287 5002541 5002755 774 4180289 4180605 5002757 5003073 1141 4181117 4181358 5003585 5003826 871 4181831 4182169 5004299 5004637 1220 4182488 4182726 5004956 5005194 860 4182882 4183189 5005350 5005657 1108 4183488 4183996 5005956 5006464 1832 4184046 4184630 5006514 5007098 2106 4184817 4185043 5007285 5007511 817 4185045 4185443 5007513 5007911 1436 4185445 4185778 5007913 5008246 1202 4186344 4186612 5008812 5009080 968 4186737 4187343 5009205 5009811 2185 4187861 4188293 5010258 5010690 1558 4192163 4192395 5014560 5014792 838 4192418 4192617 5014815 5015014 720 4192805 4193098 5015202 5015495 1058 4194087 4194323 5016484 5016720 853 4194325 4194575 5016722 5016972 903 4195053 4195357 5017450 5017754 1098 4195965 4196318 5018362 5018715 1274 4197270 4197511 5019667 5019908 871 4197638 4198220 5020035 5020617 2098 4198698 4198935 5021095 5021332 856 4198943 4199582 5021340 5021979 2304 4201392 4201604 5023768 5023980 766 4204214 4204438 5026590 5026814 810 4204652 4205249 5027028 5027625 2152 4205569 4205976 5027947 5028354 1468 4206137 4206386 5028515 5028764 900 4206570 4207144 5028948 5029522 2070 4207599 4207883 5029976 5030260 1026 4207885 4208160 5030262 5030537 993 4208277 4208617 5030654 5030994 1227 4208854 4209342 5031230 5031718 1760 4209832 4210413 5032208 5032789 2095 4211637 4212090 5033606 5034059 1634 4213347 4213957 5035316 5035926 2199 4213959 4214347 5035928 5036316 1400 4214481 4214751 5036450 5036720 975 4217734 4217997 5039704 5039967 950 4218639 4218843 5040609 5040813 738 4220056 4220269 5042026 5042239 770 4220349 4220555 5042320 5042526 745 4220557 4220897 5042528 5042868 1227 4221273 4221491 5043244 5043462 788 4222189 4222406 5044160 5044377 784 4223590 4223810 5045561 5045781 795 4224226 4224461 5046197 5046432 849 4224517 4224776 5046488 5046747 936 4225045 4225323 5047016 5047294 1004 4225735 4225970 5047706 5047941 849 4229111 4229551 5057182 5057622 1587 4229679 4229908 5057750 5057979 828 4229994 4230336 5058065 5058407 1234 4230657 4231155 5058728 5059226 1796 4231157 4231535 5059228 5059606 1364 4232285 4232582 5060356 5060653 1072 4232761 4232992 5060832 5061063 835 4233381 4233656 5061466 5061741 993 4234440 4234647 5062525 5062732 748 4235356 4235672 5063441 5063757 1141 4237564 4237988 5065649 5066073 1530 4238057 4238268 5066142 5066353 763 4238406 4238620 5066491 5066705 774 4238622 4238986 5066707 5067071 1314 4239483 4240332 5067568 5068417 3060 4240577 4240851 5068662 5068936 990 4241194 4241513 5069279 5069598 1152 4241860 4242134 5069945 5070219 990 4242340 4242595 5070425 5070680 921 4242692 4242965 5070777 5071050 986 4243246 4243553 5071331 5071638 1108 4243777 4244103 5071862 5072188 1177 4244267 4244585 5072352 5072670 1148 4244704 4245302 5072789 5073387 2156 4245304 4245658 5073389 5073743 1278 4245858 4246069 5073943 5074154 763 4246359 4246764 5074444 5074849 1461 4247264 4247653 5075257 5075646 1404 4247873 4248118 5075866 5076111 885 4250222 4250493 5078215 5078486 979 4250517 4250895 5078510 5078888 1364 4253485 4253771 5081478 5081764 1033 4253773 4254142 5081766 5082135 1332 4254248 4254495 5082241 5082488 892 4254560 4254856 5082553 5082849 1069 4256676 4257136 5084669 5085129 1659 4259211 4259425 5087175 5087389 774 4262253 4262478 5090217 5090442 813 4263080 4263430 5091044 5091394 1263 4263432 4263811 5091396 5091775 1368 4264612 4264826 5092576 5092790 774 4267726 4267949 5095682 5095905 806 4267951 4268300 5095907 5096256 1260 4271274 4271688 5099230 5099644 1494 4272543 4272784 5100500 5100741 871 4274885 4275144 5102841 5103100 936 4275257 4275698 5103213 5103654 1591 4275783 4276051 5103739 5104007 968 4276498 4276886 5104454 5104842 1400 4277592 4277901 5105547 5105856 1116 4278059 4278511 5106014 5106466 1630 4278860 4279104 5106815 5107059 882 4280733 4281019 5108691 5108977 1033 4282323 4282554 5110281 5110512 835 4282634 4282898 5110592 5110856 954 4282979 4283305 5110938 5111264 1177 4283580 4283866 5111539 5111825 1033 4284575 4284796 5112534 5112755 799 4284945 4285241 5112904 5113200 1069 4285243 4285625 5113202 5113584 1378 4285817 4286408 5113776 5114367 2131 4286746 4286983 5114705 5114942 856 4287171 4287708 5115130 5115667 1936 4287908 4288139 5115867 5116098 835 4289459 4289694 5117418 5117653 849 4291742 4292213 5119701 5120172 1699 4294024 4294328 5121519 5121823 1098 4294488 4294792 5121983 5122287 1098 4295091 4295297 5122586 5122792 745 4295299 4295540 5122794 5123035 871 4295545 4295804 5123040 5123299 936 4295971 4296203 5123466 5123698 838 4296217 4297019 5123712 5124514 2890 4298256 4298470 5125751 5125965 774 4298526 4298730 5126021 5126225 738 4299245 4299477 5126740 5126972 838 4300511 4300721 5128006 5128216 759 4301558 4301780 5129053 5129275 802 4301827 4302040 5129322 5129535 770 4303916 4304296 5131411 5131791 1371 4312689 4312935 5142354 5142600 889 4315512 4315729 5145178 5145395 784 4318700 4318931 5148366 5148597 835 4323945 4324269 5153204 5153528 1170 4324271 4324481 5153530 5153740 759 4325926 4326534 5155186 5155794 2192 4327141 4327364 5156401 5156624 806 4327881 4328194 5157141 5157454 1130 4328196 4328668 5157456 5157928 1702 4328796 4329079 5158056 5158339 1022 4329081 4329292 5158341 5158552 763 4330003 4330414 5159263 5159674 1483 4330464 4330844 5159724 5160104 1371 4330881 4331442 5160141 5160702 2023 4331444 4331982 5160704 5161242 1940 4333040 4333250 5162300 5162510 759 4334154 4334449 5163414 5163709 1065 4334499 4334789 5163759 5164049 1047 4336113 4336322 5165373 5165582 756 4336393 4336693 5165653 5165953 1083 4336927 4337183 5166187 5166443 925 4337794 4338038 5167054 5167298 882 4338994 4339308 5168254 5168568 1134 4339353 4339715 5168613 5168975 1306 4340892 4341142 5170152 5170402 903 4341624 4341999 5170884 5171259 1353 4344740 4344957 5174001 5174218 784 4344959 4345211 5174220 5174472 910 4345213 4345571 5174474 5174832 1292 4346026 4346523 5175287 5175784 1792 4346631 4346834 5175892 5176095 734 4347166 4347790 5176427 5177051 2250 4347927 4348213 5177188 5177474 1033 4348434 4348726 5177695 5177987 1054 4348728 4348972 5177989 5178233 882 4349163 4349372 5178424 5178633 756 4350463 4350950 5179724 5180211 1756 4351194 4351406 5180455 5180667 766 4351408 4351706 5180669 5180967 1076 4352170 4352376 5181431 5181637 745 4353534 4354238 5182795 5183499 2538 4354273 4354526 5183534 5183787 914 4354528 4354910 5183789 5184171 1378 4354912 4355495 5184173 5184756 2102 4355497 4355732 5184758 5184993 849 4355851 4356510 5185112 5185771 2376 4356602 4356917 5185863 5186178 1137 4356919 4357185 5186180 5186446 961 4357376 4357687 5186637 5186948 1123 4358283 4358518 5187545 5187780 849 4358531 4358953 5187793 5188215 1522 4359009 4359406 5188271 5188668 1432 4359408 4359650 5188670 5188912 874 4360590 4361086 5189852 5190348 1789 4361109 4361356 5190371 5190618 892 4361397 4361736 5190659 5190998 1224 4361967 4362177 5191229 5191439 759 4362309 4362521 5191571 5191783 766 4362523 4362876 5191785 5192138 1274 4363046 4363258 5192308 5192520 766 4363260 4363546 5192522 5192808 1033 4363548 4364194 5192810 5193456 2329 4364202 4364791 5193464 5194053 2124 4364793 4364992 5194055 5194254 720 4365531 4365754 5194793 5195016 806 4365756 4366009 5195018 5195271 914 4367889 4368488 5197151 5197750 2160 4369080 4369317 5198342 5198579 856 4370219 4370576 5199481 5199838 1288 4370778 4370988 5200030 5200240 759 4371312 4371617 5200564 5200869 1101 4371619 4371876 5200871 5201128 928 4372187 4372397 5201279 5201489 759 4373122 4373545 5202214 5202637 1526 4373777 4374003 5202869 5203095 817 4374052 4374251 5203144 5203343 720 4374905 4375185 5203997 5204277 1011 4375857 4376101 5204948 5205192 882 4376397 4376796 5205488 5205887 1440 4377144 4377416 5206235 5206507 982 4377418 4377634 5206509 5206725 781 4377636 4378173 5206727 5207264 1936 4378301 4378506 5207392 5207597 741 4378508 4378713 5207599 5207804 741 4378718 4378946 5207809 5208037 824 4379198 4379523 5208289 5208614 1173 4379594 4379808 5208685 5208899 774 4380144 4380485 5209235 5209576 1231 4380835 4381058 5209926 5210149 806 4381060 4381274 5210151 5210365 774 4381385 4381717 5210476 5210808 1198 4382064 4382284 5211155 5211375 795 4383624 4383938 5212160 5212474 1134 4387381 4387685 5215917 5216221 1098 4387687 4387980 5216223 5216516 1058 4388866 4389092 5217402 5217628 817 4389846 4390338 5218382 5218874 1774 4390965 4391449 5219501 5219985 1746 4391451 4391696 5219987 5220232 885 4392660 4392949 5221196 5221485 1044 4392951 4393314 5221487 5221850 1310 4393390 4393607 5221926 5222143 784 4394572 4394885 5223108 5223421 1130 4396694 4397281 5225230 5225817 2116 4397605 4398192 5226141 5226728 2116 4398699 4399042 5227236 5227579 1238 4399262 4399973 5227799 5228510 2563 4400047 4400534 5228584 5229071 1756 4400536 4400837 5229073 5229374 1087 4400839 4401199 5229376 5229736 1299 4401291 4401502 5229828 5230039 763 4401693 4402147 5230230 5230684 1638 4402690 4402925 5231227 5231462 849 4403737 4404072 5232275 5232610 1209 4404088 4404439 5232626 5232977 1267 4404441 4404736 5232979 5233274 1065 4406310 4406566 5234848 5235104 925 4407734 4407963 5236273 5236502 828 4407983 4408209 5236522 5236748 817 4409733 4410016 5238272 5238555 1022 4410543 4411443 5239082 5239982 3243 4411568 4411931 5240107 5240470 1310 4413245 4413458 5241784 5241997 770 4413460 4414119 5241999 5242658 2376 4414166 4414590 5242705 5243129 1530 4415106 4415865 5243645 5244404 2736 4415867 4416119 5244406 5244658 910 4416427 4416794 5244966 5245333 1324 4416802 4417277 5245341 5245816 1713 4417587 4417894 5246126 5246433 1108 4417896 4418210 5246435 5246749 1134 4418721 4419265 5247260 5247804 1962 4419327 4420142 5247866 5248681 2937 4422028 4422356 5250566 5250894 1184 4422589 4422864 5251127 5251402 993 4422884 4423135 5251422 5251673 907 4423235 4423484 5251773 5252022 900 4423486 4423779 5252024 5252317 1058 4423832 4424168 5252370 5252706 1213 4424170 4424765 5252708 5253303 2145 4425009 4425265 5253547 5253803 925 4425565 4425963 5255851 5256249 1436 4426044 4426243 5256330 5256529 720 4426245 4426957 5256531 5257243 2566 4427159 4427541 5257445 5257827 1378 4427543 4427886 5257829 5258172 1238 4427900 4428237 5258186 5258523 1216 4428542 4428802 5258828 5259088 939 4429070 4429306 5259356 5259592 853 4429923 4430185 5260209 5260471 946 4430365 4430680 5260651 5260966 1137 4430682 4431179 5260968 5261465 1792 4432539 4432756 5262814 5263031 784 4432758 4433008 5263033 5263283 903 4433601 4433926 5263876 5264201 1173 4433963 4434274 5264238 5264549 1123 4435031 4435251 5265306 5265526 795 4435253 4435481 5265528 5265756 824 4436111 4436332 5266387 5266608 799 4436615 4437230 5266891 5267506 2217 4437503 4437711 5267796 5268004 752 4438094 4438719 5268387 5269012 2253 4438730 4438975 5269023 5269268 885 4439166 4439479 5269459 5269772 1130 4439661 4440048 5269954 5270341 1396 4440303 4440757 5270596 5271050 1638 4441584 4441911 5271877 5272204 1180 4443981 4444452 5274274 5274745 1699 4444454 4444845 5274747 5275138 1411 4444973 4445194 5275266 5275487 799 4445391 4445813 5275684 5276106 1522 4445815 4446120 5276108 5276413 1101 4446140 4446428 5276433 5276721 1040 4446534 4447021 5276827 5277314 1756 4447071 4447327 5277364 5277620 925 4447949 4448349 5278242 5278642 1443 4448542 4448813 5278837 5279108 979 4448815 4449101 5279110 5279396 1033 4449229 4449635 5279524 5279930 1465 4449737 4450021 5280033 5280317 1026 4450381 4450608 5280677 5280904 820 4452995 4453356 5283291 5283652 1303 4454003 4454286 5284299 5284582 1022 4454357 4454691 5284653 5284987 1206 4454909 4455147 5285205 5285443 860 4455161 4455896 5285457 5286192 2649 4455898 4456160 5286194 5286456 946 4456450 4456679 5286746 5286975 828 4456750 4457024 5287046 5287320 990 4457117 4457793 5287439 5288115 2437 4458252 4458580 5288606 5288934 1184 4459728 4459936 5290082 5290290 752 4460106 4460393 5290460 5290747 1036 4461084 4461335 5291438 5291689 907 4461645 4461886 5291999 5292240 871 4462630 4462835 5292984 5293189 741 4463656 4463881 5294010 5294235 813 4464916 4465556 5295269 5295909 2307 4465855 4466120 5296208 5296473 957 4466518 4466825 5296871 5297178 1108 4467031 4467308 5297384 5297661 1000 4467542 4467930 5297895 5298283 1400 4467945 4468291 5298298 5298644 1249 4468421 4468654 5298774 5299007 842 4468890 4469173 5299243 5299526 1022 4469535 4469764 5299888 5300117 828 4469816 4470154 5300169 5300507 1220 # chain 255: length 1 score 745 4586391 4586597 5418882 5419088 745 # chain 256: length 3 score 2736 4589247 4589498 5422424 5422675 907 4589544 4589756 5422721 5422933 766 4589758 4590079 5422935 5423256 1159 # chain 257: length 46 score 40674 4591606 4591905 5424792 5425091 1080 4592020 4592269 5425206 5425455 900 4592317 4592556 5425504 5425743 864 4592558 4592949 5425745 5426136 1411 4593732 4593982 5426920 5427170 903 4594693 4595224 5427880 5428411 1915 4595901 4596268 5429088 5429455 1324 4596459 4596916 5429646 5430103 1648 4596918 4597156 5430105 5430343 860 4597495 4597826 5430682 5431013 1195 4597828 4598336 5431015 5431523 1832 4598884 4599452 5432071 5432639 2048 4599469 4599869 5432656 5433056 1443 4599871 4600306 5433058 5433493 1569 4600811 4601319 5434000 5434508 1832 4601459 4601825 5434648 5435014 1321 4601827 4602472 5435016 5435661 2325 4604188 4604575 5437063 5437450 1396 4605120 4605567 5437995 5438442 1612 4605846 4606069 5438721 5438944 806 4606201 4607439 5439076 5440314 4460 4607576 4607775 5440451 5440650 720 4607972 4608300 5440847 5441175 1184 4608302 4608593 5441177 5441468 1051 4608604 4609160 5441479 5442035 2005 4609548 4610186 5442423 5443061 2300 4610318 4610595 5443193 5443470 1000 4610597 4611095 5443472 5443970 1796 4613016 4613327 5445687 5445998 1123 4613736 4614096 5446407 5446767 1299 4614243 4614763 5446914 5447434 1875 4615143 4615543 5447814 5448214 1443 4615599 4616269 5448270 5448940 2415 4616649 4616956 5449320 5449627 1108 4617023 4617937 5449694 5450608 3294 4618311 4618887 5450982 5451558 2077 4621390 4621712 5453018 5453340 1162 4622026 4622270 5453654 5453898 882 4622284 4622611 5453912 5454239 1180 4623145 4623424 5454773 5455052 1008 4623611 4624207 5455239 5455835 2149 4624869 4625256 5456497 5456884 1396 4625387 4625939 5457015 5457567 1990 4626344 4627214 5457972 5458842 3135 4627591 4627832 5459219 5459460 871 4628122 4628527 5459750 5460155 1461 genometools-1.5.1/testdata/chaindata/chain-local20-wf1.8-maxgap10000066400000000000000000010634261211610345200243210ustar00rootroot00000000000000# chain 0: length 1 score 1393 5851 6237 5868 6254 1393 # chain 1: length 1 score 1119 7627 7937 7644 7954 1119 # chain 2: length 1 score 1364 8079 8457 8096 8474 1364 # chain 3: length 3 score 3512 8687 8994 8704 9011 1108 8996 9375 9013 9392 1368 9377 9666 9394 9683 1044 # chain 4: length 1 score 1378 10024 10406 10041 10423 1378 # chain 5: length 1 score 1108 10408 10715 10425 10732 1108 # chain 6: length 1 score 810 11439 11663 11456 11680 810 # chain 7: length 1 score 734 11695 11898 11712 11915 734 # chain 8: length 1 score 756 12026 12235 12043 12252 756 # chain 9: length 1 score 1184 12384 12712 12401 12729 1184 # chain 10: length 1 score 752 13131 13339 13148 13356 752 # chain 11: length 2 score 3329 13719 14230 13736 14247 1843 14232 14645 14249 14662 1490 # chain 12: length 1 score 777 15174 15389 15191 15406 777 # chain 13: length 1 score 784 17569 17786 16237 16454 784 # chain 14: length 1 score 1033 18477 18763 17145 17431 1033 # chain 15: length 1 score 1504 19377 19794 18045 18462 1504 # chain 16: length 1 score 1656 20813 21272 25219 25678 1656 # chain 17: length 1 score 1123 21304 21615 25716 26027 1123 # chain 18: length 1 score 784 22048 22265 26460 26677 784 # chain 19: length 1 score 1098 23335 23639 27747 28051 1098 # chain 20: length 1 score 1450 25045 25447 29457 29859 1450 # chain 21: length 1 score 849 26789 27024 31164 31399 849 # chain 22: length 1 score 1281 27712 28067 32087 32442 1281 # chain 23: length 1 score 806 28223 28446 32598 32821 806 # chain 24: length 1 score 1216 29506 29843 33881 34218 1216 # chain 25: length 1 score 748 30706 30913 35081 35288 748 # chain 26: length 1 score 828 31887 32116 36262 36491 828 # chain 27: length 1 score 774 33552 33766 37927 38141 774 # chain 28: length 1 score 1749 34112 34597 38486 38971 1749 # chain 29: length 2 score 2341 35170 35491 39577 39898 1159 35499 35831 39906 40238 1198 # chain 30: length 1 score 781 36263 36479 40670 40886 781 # chain 31: length 1 score 1468 37032 37439 41439 41846 1468 # chain 32: length 2 score 2044 37534 37775 41941 42182 871 37777 38103 42184 42510 1177 # chain 33: length 1 score 817 38777 39003 43184 43410 817 # chain 34: length 1 score 1368 40129 40508 44536 44915 1368 # chain 35: length 1 score 795 41188 41408 45595 45815 795 # chain 36: length 1 score 763 43562 43773 47976 48187 763 # chain 37: length 1 score 741 44455 44660 48869 49074 741 # chain 38: length 1 score 903 45555 45805 49969 50219 903 # chain 39: length 1 score 806 45950 46173 50365 50588 806 # chain 40: length 1 score 1368 46253 46632 50668 51047 1368 # chain 41: length 1 score 853 46901 47137 51316 51552 853 # chain 42: length 1 score 975 47515 47785 51930 52200 975 # chain 43: length 1 score 1332 49571 49940 53986 54355 1332 # chain 44: length 1 score 1638 51097 51551 56073 56527 1638 # chain 45: length 1 score 1011 51621 51901 56597 56877 1011 # chain 46: length 1 score 763 51924 52135 56900 57111 763 # chain 47: length 1 score 1238 53284 53627 58260 58603 1238 # chain 48: length 5 score 14131 53902 54335 58878 59311 1562 54337 54981 59313 59957 2322 54983 56483 59959 61459 5403 56485 56939 61461 61915 1638 56941 57835 61917 62811 3222 # chain 49: length 1 score 770 57928 58141 62904 63117 770 # chain 50: length 1 score 1036 59485 59772 64418 64705 1036 # chain 51: length 1 score 802 59831 60053 64764 64986 802 # chain 52: length 1 score 1083 60245 60545 65178 65478 1083 # chain 53: length 1 score 1238 60547 60890 65480 65823 1238 # chain 54: length 1 score 1854 60943 61457 65876 66390 1854 # chain 55: length 1 score 871 61459 61700 66392 66633 871 # chain 56: length 1 score 1807 62923 63424 67856 68357 1807 # chain 57: length 1 score 1000 64749 65026 69681 69958 1000 # chain 58: length 1 score 738 65826 66030 70758 70962 738 # chain 59: length 1 score 720 66970 67169 71817 72016 720 # chain 60: length 1 score 838 67312 67544 72159 72391 838 # chain 61: length 1 score 853 67596 67832 72443 72679 853 # chain 62: length 1 score 910 68693 68945 73540 73792 910 # chain 63: length 1 score 1900 70473 71000 75320 75847 1900 # chain 64: length 1 score 1177 71214 71540 76061 76387 1177 # chain 65: length 1 score 1425 74737 75132 79557 79952 1425 # chain 66: length 1 score 849 75226 75461 80046 80281 849 # chain 67: length 1 score 770 76775 76988 82604 82817 770 # chain 68: length 1 score 792 81083 81302 85691 85910 792 # chain 69: length 1 score 1141 82978 83294 87586 87902 1141 # chain 70: length 1 score 1468 83392 83799 88000 88407 1468 # chain 71: length 1 score 882 84493 84737 89099 89343 882 # chain 72: length 1 score 943 84949 85210 89555 89816 943 # chain 73: length 1 score 784 85881 86098 90487 90704 784 # chain 74: length 1 score 878 87279 87522 91885 92128 878 # chain 75: length 2 score 1994 87794 88118 92400 92724 1170 88120 88349 92726 92955 828 # chain 76: length 1 score 2070 89754 90328 94360 94934 2070 # chain 77: length 1 score 1292 90591 90949 95197 95555 1292 # chain 78: length 1 score 2156 91187 91785 95793 96391 2156 # chain 79: length 1 score 752 92474 92682 97080 97288 752 # chain 80: length 1 score 1011 93089 93369 97695 97975 1011 # chain 81: length 1 score 784 94167 94384 98773 98990 784 # chain 82: length 1 score 878 94548 94791 99154 99397 878 # chain 83: length 1 score 788 95152 95370 99758 99976 788 # chain 84: length 1 score 1638 95905 96359 100511 100965 1638 # chain 85: length 1 score 1443 97113 97513 101719 102119 1443 # chain 86: length 1 score 1634 98322 98775 102928 103381 1634 # chain 87: length 1 score 1162 98906 99228 103512 103834 1162 # chain 88: length 2 score 2209 99254 99649 103860 104255 1425 99651 99869 104257 104475 788 # chain 89: length 1 score 936 100432 100691 105038 105297 936 # chain 90: length 1 score 1152 101175 101494 105781 106100 1152 # chain 91: length 1 score 730 101721 101923 106327 106529 730 # chain 92: length 2 score 2681 102613 102831 107219 107437 788 102833 103359 107439 107965 1897 # chain 93: length 1 score 853 103604 103840 108210 108446 853 # chain 94: length 1 score 1177 103842 104168 108448 108774 1177 # chain 95: length 1 score 990 104548 104822 109154 109428 990 # chain 96: length 1 score 2480 104857 105545 109463 110151 2480 # chain 97: length 1 score 4903 106099 107460 110705 112066 4903 # chain 98: length 1 score 806 107686 107909 112292 112515 806 # chain 99: length 1 score 738 108007 108211 112613 112817 738 # chain 100: length 1 score 1098 108293 108597 112899 113203 1098 # chain 101: length 2 score 3037 108848 109485 113454 114091 2296 109496 109707 114102 114313 763 # chain 102: length 1 score 928 109927 110184 114533 114790 928 # chain 103: length 1 score 784 110441 110658 115047 115264 784 # chain 104: length 2 score 2037 110660 110901 115266 115507 871 110903 111227 115509 115833 1170 # chain 105: length 6 score 8708 111661 112144 116151 116634 1742 112146 112457 116636 116947 1123 112459 112834 116949 117324 1353 112836 113047 117326 117537 763 113049 113268 117539 117758 792 113270 114090 117760 118580 2955 # chain 106: length 1 score 1112 116535 116843 121025 121333 1112 # chain 107: length 1 score 1252 117226 117573 121716 122063 1252 # chain 108: length 1 score 1141 117842 118158 122332 122648 1141 # chain 109: length 1 score 2390 118514 119177 123004 123667 2390 # chain 110: length 1 score 838 119259 119491 123749 123981 838 # chain 111: length 1 score 1152 119493 119812 123983 124302 1152 # chain 112: length 1 score 914 120595 120848 125085 125338 914 # chain 113: length 1 score 1256 121891 122239 126381 126729 1256 # chain 114: length 2 score 2339 122496 122797 126986 127287 1087 122808 123161 127298 127651 1274 # chain 115: length 1 score 860 123931 124169 128421 128659 860 # chain 116: length 1 score 990 124522 124796 129012 129286 990 # chain 117: length 1 score 1472 125410 125818 129900 130308 1472 # chain 118: length 1 score 1720 127257 127734 131747 132224 1720 # chain 119: length 1 score 1386 127882 128266 132255 132639 1386 # chain 120: length 1 score 882 128406 128650 132779 133023 882 # chain 121: length 1 score 741 128991 129196 133364 133569 741 # chain 122: length 1 score 1310 130733 131096 135106 135469 1310 # chain 123: length 2 score 1835 131188 131489 135561 135862 1087 131491 131699 135864 136072 752 # chain 124: length 2 score 2702 133795 134045 138168 138418 903 134047 134547 138420 138920 1803 # chain 125: length 1 score 1018 134594 134876 138967 139249 1018 # chain 126: length 1 score 1033 134968 135254 139341 139627 1033 # chain 127: length 1 score 1368 135256 135635 139629 140008 1368 # chain 128: length 1 score 1652 135663 136121 140036 140494 1652 # chain 129: length 1 score 1314 136240 136604 140613 140977 1314 # chain 130: length 1 score 835 136870 137101 141243 141474 835 # chain 131: length 1 score 903 137556 137806 141929 142179 903 # chain 132: length 1 score 828 139126 139355 143499 143728 828 # chain 133: length 1 score 954 141040 141304 145413 145677 954 # chain 134: length 1 score 1324 141343 141710 145716 146083 1324 # chain 135: length 1 score 1047 141797 142087 146170 146460 1047 # chain 136: length 1 score 1306 142452 142814 146825 147187 1306 # chain 137: length 2 score 1983 143270 143496 147643 147869 817 143498 143822 147871 148195 1170 # chain 138: length 1 score 1350 144256 144630 148629 149003 1350 # chain 139: length 1 score 788 145072 145290 149445 149663 788 # chain 140: length 1 score 2116 146145 146732 150518 151105 2116 # chain 141: length 1 score 1479 157544 157954 161867 162277 1479 # chain 142: length 1 score 1681 158023 158489 162346 162812 1681 # chain 143: length 1 score 774 158578 158792 162901 163115 774 # chain 144: length 1 score 889 159237 159483 163560 163806 889 # chain 145: length 1 score 871 160020 160261 164343 164584 871 # chain 146: length 1 score 4003 160401 161512 164724 165835 4003 # chain 147: length 1 score 1094 162678 162981 167001 167304 1094 # chain 148: length 1 score 1036 164644 164931 168967 169254 1036 # chain 149: length 2 score 2990 166100 166500 170423 170823 1443 166502 166932 170825 171255 1551 # chain 150: length 1 score 1227 168428 168768 172751 173091 1227 # chain 151: length 1 score 1306 169064 169426 173387 173749 1306 # chain 152: length 1 score 849 169759 169994 174082 174317 849 # chain 153: length 1 score 1195 172286 172617 176609 176940 1195 # chain 154: length 1 score 2052 174673 175242 178873 179442 2052 # chain 155: length 2 score 3131 175991 176292 180191 180492 1087 176294 176862 180494 181062 2048 # chain 156: length 1 score 1789 176876 177372 181076 181572 1789 # chain 157: length 1 score 1029 177648 177933 181848 182133 1029 # chain 158: length 1 score 1206 178131 178465 182331 182665 1206 # chain 159: length 1 score 1400 178479 178867 182679 183067 1400 # chain 160: length 1 score 1598 179070 179513 183270 183713 1598 # chain 161: length 1 score 1083 180127 180427 184327 184627 1083 # chain 162: length 2 score 2969 180820 181388 185020 185588 2048 181390 181646 185590 185846 925 # chain 163: length 1 score 1000 181663 181940 185863 186140 1000 # chain 164: length 1 score 1148 182343 182661 186543 186861 1148 # chain 165: length 1 score 986 183133 183406 187333 187606 986 # chain 166: length 1 score 770 183458 183671 187658 187871 770 # chain 167: length 1 score 1515 183701 184121 187901 188321 1515 # chain 168: length 1 score 1508 185630 186048 189117 189535 1508 # chain 169: length 2 score 2821 188339 188709 191826 192196 1335 188711 189124 192198 192611 1490 # chain 170: length 1 score 972 189417 189686 192904 193173 972 # chain 171: length 1 score 964 189688 189955 193175 193442 964 # chain 172: length 3 score 9175 189957 190705 193444 194192 2696 190707 191298 194194 194785 2131 191300 192509 194787 195996 4356 # chain 173: length 1 score 1033 192775 193061 196120 196406 1033 # chain 174: length 1 score 3834 193063 194127 196408 197472 3834 # chain 175: length 1 score 1818 194165 194669 197510 198014 1818 # chain 176: length 1 score 9475 195040 197671 198385 201016 9475 # chain 177: length 1 score 2120 197790 198378 201135 201723 2120 # chain 178: length 1 score 871 198380 198621 201725 201966 871 # chain 179: length 1 score 2394 199262 199926 202607 203271 2394 # chain 180: length 1 score 1767 199928 200418 203273 203763 1767 # chain 181: length 1 score 1011 200529 200809 203873 204153 1011 # chain 182: length 1 score 1357 200811 201187 204155 204531 1357 # chain 183: length 1 score 946 201345 201607 204689 204951 946 # chain 184: length 1 score 3099 201640 202500 204984 205844 3099 # chain 185: length 1 score 788 202808 203026 206152 206370 788 # chain 186: length 1 score 1101 203135 203440 206479 206784 1101 # chain 187: length 2 score 1547 204771 204985 208115 208329 774 204987 205202 208331 208546 777 # chain 188: length 1 score 925 205269 205525 208613 208869 925 # chain 189: length 1 score 1094 206068 206371 209412 209715 1094 # chain 190: length 1 score 774 207123 207337 210467 210681 774 # chain 191: length 3 score 4247 207939 208243 211283 211587 1098 208245 208771 211589 212115 1897 208773 209122 212117 212466 1260 # chain 192: length 1 score 860 209142 209380 212486 212724 860 # chain 193: length 1 score 1353 209442 209817 212786 213161 1353 # chain 194: length 1 score 867 211763 212003 215107 215347 867 # chain 195: length 1 score 979 212180 212451 215524 215795 979 # chain 196: length 1 score 889 212952 213198 216296 216542 889 # chain 197: length 1 score 784 213337 213554 216681 216898 784 # chain 198: length 1 score 2037 213819 214384 217164 217729 2037 # chain 199: length 1 score 1065 215380 215675 218713 219008 1065 # chain 200: length 1 score 986 215949 216222 219282 219555 986 # chain 201: length 2 score 2317 218188 218576 221520 221908 1400 218578 218833 221910 222165 921 # chain 202: length 1 score 1429 218828 219224 222159 222555 1429 # chain 203: length 1 score 1432 219732 220129 223063 223460 1432 # chain 204: length 2 score 2436 220515 220882 223846 224213 1324 220884 221193 224215 224524 1116 # chain 205: length 1 score 1317 221550 221915 224881 225246 1317 # chain 206: length 2 score 3120 222448 222986 225779 226317 1940 222988 223316 226319 226647 1184 # chain 207: length 1 score 727 223538 223739 226870 227071 727 # chain 208: length 1 score 806 3939284 3939507 226956 227179 806 # chain 209: length 1 score 3081 4164382 4165237 227247 228102 3081 # chain 210: length 1 score 3081 4033264 4034119 227247 228102 3081 # chain 211: length 2 score 4153 4205569 4205867 226947 227245 1076 4205869 4206724 227247 228102 3081 # chain 212: length 1 score 2433 3939656 3940331 227328 228003 2433 # chain 213: length 1 score 1886 4165275 4165798 228140 228663 1886 # chain 214: length 1 score 1864 4034157 4034674 228140 228657 1864 # chain 215: length 1 score 1864 4206762 4207279 228140 228657 1864 # chain 216: length 1 score 1864 3940467 3940984 228140 228657 1864 # chain 217: length 2 score 6007 223915 224888 227247 228220 3506 224890 225585 228222 228917 2505 # chain 218: length 1 score 1274 4034682 4035035 228665 229018 1274 # chain 219: length 1 score 741 3941255 3941460 229020 229225 741 # chain 220: length 1 score 738 4166150 4166354 229021 229225 738 # chain 221: length 1 score 766 225900 226112 229232 229444 766 # chain 222: length 1 score 1897 4035744 4036270 229736 230262 1897 # chain 223: length 1 score 1886 3941972 3942495 229736 230259 1886 # chain 224: length 1 score 1886 4166865 4167388 229736 230259 1886 # chain 225: length 1 score 1886 4208267 4208790 229736 230259 1886 # chain 226: length 1 score 1166 226604 226927 229936 230259 1166 # chain 227: length 1 score 1965 226936 227481 230267 230812 1965 # chain 228: length 1 score 1782 3942555 3943049 230318 230812 1782 # chain 229: length 1 score 1782 4036326 4036820 230318 230812 1782 # chain 230: length 1 score 1774 4167448 4167940 230318 230810 1774 # chain 231: length 1 score 1774 4208850 4209342 230318 230810 1774 # chain 232: length 1 score 896 4168084 4168332 230954 231202 896 # chain 233: length 1 score 896 227623 227871 230954 231202 896 # chain 234: length 1 score 896 4209486 4209734 230954 231202 896 # chain 235: length 1 score 871 4036971 4037212 230961 231202 871 # chain 236: length 2 score 2314 3943061 3943439 230824 231202 1364 3943441 3943705 231204 231468 954 # chain 237: length 1 score 2538 4168430 4169134 231300 232004 2538 # chain 238: length 1 score 2095 227969 228550 231300 231881 2095 # chain 239: length 1 score 2095 4209832 4210413 231300 231881 2095 # chain 240: length 1 score 2095 4037310 4037891 231300 231881 2095 # chain 241: length 1 score 964 3943851 3944118 231614 231881 964 # chain 242: length 1 score 853 3944336 3944572 232098 232334 853 # chain 243: length 1 score 928 228768 229025 232098 232355 928 # chain 244: length 1 score 874 229598 229840 232928 233170 874 # chain 245: length 1 score 1047 229853 230143 233183 233473 1047 # chain 246: length 1 score 774 232837 233051 236388 236602 774 # chain 247: length 4 score 4008 233158 233399 236709 236950 871 233401 233636 236952 237187 849 233638 233959 237189 237510 1159 233961 234277 237512 237828 1141 # chain 248: length 1 score 860 234618 234856 238169 238407 860 # chain 249: length 1 score 1206 235556 235890 239107 239441 1206 # chain 250: length 1 score 1058 236041 236334 239592 239885 1058 # chain 251: length 2 score 1705 237263 237536 240815 241088 986 237538 237738 241090 241290 723 # chain 252: length 1 score 723 3622269 3622469 272913 273113 723 # chain 253: length 1 score 878 3622911 3623154 273555 273798 878 # chain 254: length 1 score 799 1527877 1528098 275467 275688 799 # chain 255: length 1 score 1195 1528181 1528512 275770 276101 1195 # chain 256: length 2 score 1796 1529096 1529346 276684 276934 903 1529348 1529596 276935 277183 896 # chain 257: length 1 score 1321 240031 240397 278100 278466 1321 # chain 258: length 2 score 1889 241492 241701 279561 279770 756 241703 242018 279772 280087 1137 # chain 259: length 1 score 1238 245371 245714 283339 283682 1238 # chain 260: length 1 score 907 245952 246203 283920 284171 907 # chain 261: length 1 score 828 250050 250279 287937 288166 828 # chain 262: length 1 score 774 251614 251828 289501 289715 774 # chain 263: length 1 score 759 252573 252783 290460 290670 759 # chain 264: length 1 score 1062 253387 253681 291275 291569 1062 # chain 265: length 1 score 925 254361 254617 292249 292505 925 # chain 266: length 1 score 2257 255687 256313 293575 294201 2257 # chain 267: length 1 score 1393 256486 256872 294374 294760 1393 # chain 268: length 1 score 820 257033 257260 294921 295148 820 # chain 269: length 1 score 1022 258635 258918 296523 296806 1022 # chain 270: length 1 score 885 259430 259675 297318 297563 885 # chain 271: length 1 score 774 260217 260431 298105 298319 774 # chain 272: length 1 score 1029 260706 260991 298594 298879 1029 # chain 273: length 1 score 1195 297132 297463 330317 330648 1195 # chain 274: length 1 score 1119 299169 299479 332354 332664 1119 # chain 275: length 1 score 936 300524 300783 333709 333968 936 # chain 276: length 1 score 921 301750 302005 334935 335190 921 # chain 277: length 1 score 1558 305109 305541 338294 338726 1558 # chain 278: length 1 score 831 306139 306369 339324 339554 831 # chain 279: length 1 score 882 306382 306626 339567 339811 882 # chain 280: length 1 score 720 306907 307106 340092 340291 720 # chain 281: length 1 score 1170 308316 308640 341501 341825 1170 # chain 282: length 1 score 1141 309476 309792 342661 342977 1141 # chain 283: length 1 score 982 313588 313860 353941 354213 982 # chain 284: length 1 score 835 316129 316360 358934 359165 835 # chain 285: length 2 score 2922 318125 318630 361618 362123 1821 318632 318938 362125 362431 1105 # chain 286: length 1 score 1076 319028 319326 362521 362819 1076 # chain 287: length 1 score 1040 319744 320032 363237 363525 1040 # chain 288: length 2 score 1554 321266 321471 364759 364964 741 321473 321699 364966 365192 817 # chain 289: length 1 score 2419 322401 323072 365894 366565 2419 # chain 290: length 1 score 738 323968 324172 367461 367665 738 # chain 291: length 1 score 1540 328133 328560 376575 377002 1540 # chain 292: length 1 score 1252 328661 329008 377103 377450 1252 # chain 293: length 1 score 1303 329022 329383 377464 377825 1303 # chain 294: length 2 score 2840 329619 330088 378061 378530 1692 330090 330409 378532 378851 1152 # chain 295: length 1 score 792 330540 330759 378982 379201 792 # chain 296: length 1 score 1184 332518 332846 384784 385112 1184 # chain 297: length 1 score 817 334160 334386 386435 386661 817 # chain 298: length 1 score 1227 334409 334749 386684 387024 1227 # chain 299: length 1 score 975 335190 335460 387465 387735 975 # chain 300: length 1 score 1209 335793 336128 388068 388403 1209 # chain 301: length 1 score 1054 336547 336839 388822 389114 1054 # chain 302: length 1 score 968 338028 338296 390303 390571 968 # chain 303: length 1 score 752 340819 341027 393187 393395 752 # chain 304: length 1 score 874 341549 341791 393917 394159 874 # chain 305: length 1 score 2487 342414 343104 399888 400578 2487 # chain 306: length 1 score 1566 343301 343735 400775 401209 1566 # chain 307: length 1 score 727 343919 344120 401393 401594 727 # chain 308: length 1 score 1000 344845 345122 402322 402599 1000 # chain 309: length 1 score 792 345448 345667 402925 403144 792 # chain 310: length 1 score 1771 351607 352098 408800 409291 1771 # chain 311: length 1 score 1004 352888 353166 410081 410359 1004 # chain 312: length 1 score 957 354178 354443 411935 412200 957 # chain 313: length 2 score 2357 355443 355817 413200 413574 1350 355819 356099 413576 413856 1011 # chain 314: length 1 score 1022 358310 358593 415864 416147 1022 # chain 315: length 1 score 838 361300 361532 418854 419086 838 # chain 316: length 1 score 1184 362254 362582 419808 420136 1184 # chain 317: length 1 score 842 362638 362871 420192 420425 842 # chain 318: length 1 score 730 367228 367430 426606 426808 730 # chain 319: length 1 score 738 368110 368314 427488 427692 738 # chain 320: length 1 score 1425 368569 368964 427947 428342 1425 # chain 321: length 1 score 1422 369620 370014 428998 429392 1422 # chain 322: length 1 score 1270 370352 370704 429730 430082 1270 # chain 323: length 1 score 1508 370840 371258 430218 430636 1508 # chain 324: length 1 score 1144 374964 375281 433940 434257 1144 # chain 325: length 1 score 1378 375474 375856 434450 434832 1378 # chain 326: length 1 score 1242 378703 379047 437579 437923 1242 # chain 327: length 1 score 1252 385128 385475 446908 447255 1252 # chain 328: length 1 score 784 385631 385848 447411 447628 784 # chain 329: length 1 score 889 386054 386300 447834 448080 889 # chain 330: length 1 score 752 388046 388254 449826 450034 752 # chain 331: length 2 score 2311 392824 393267 453381 453824 1598 393274 393475 453831 454032 727 # chain 332: length 1 score 2959 393537 394358 454094 454915 2959 # chain 333: length 1 score 946 394579 394841 455136 455398 946 # chain 334: length 1 score 1843 394843 395354 455400 455911 1843 # chain 335: length 1 score 990 396828 397102 457385 457659 990 # chain 336: length 1 score 871 397218 397459 457775 458016 871 # chain 337: length 1 score 849 397707 397942 458264 458499 849 # chain 338: length 1 score 1623 398247 398697 458804 459254 1623 # chain 339: length 1 score 1044 398813 399102 459370 459659 1044 # chain 340: length 1 score 1882 399920 400442 460477 460999 1882 # chain 341: length 1 score 2034 400542 401106 461099 461663 2034 # chain 342: length 1 score 1238 401519 401862 462076 462419 1238 # chain 343: length 1 score 3286 402894 403806 463451 464363 3286 # chain 344: length 1 score 763 404119 404330 464676 464887 763 # chain 345: length 1 score 1533 404764 405189 465321 465746 1533 # chain 346: length 1 score 828 405269 405498 465826 466055 828 # chain 347: length 1 score 2282 405500 406133 466057 466690 2282 # chain 348: length 1 score 813 406247 406472 466804 467029 813 # chain 349: length 1 score 1400 408239 408627 471103 471491 1400 # chain 350: length 3 score 4088 409019 409683 471883 472547 2394 409685 409949 472549 472813 954 409951 410158 472815 473022 748 # chain 351: length 1 score 1087 410779 411080 473541 473842 1087 # chain 352: length 1 score 849 411169 411404 473931 474166 849 # chain 353: length 1 score 1623 411927 412377 474689 475139 1623 # chain 354: length 1 score 817 412584 412810 475343 475569 817 # chain 355: length 1 score 1252 414347 414694 477106 477453 1252 # chain 356: length 3 score 9423 414876 415176 477635 477935 1083 415178 416519 477937 479278 4831 416521 417497 479280 480256 3517 # chain 357: length 1 score 795 417578 417798 480337 480557 795 # chain 358: length 1 score 820 418074 418301 480833 481060 820 # chain 359: length 1 score 2278 418498 419130 481257 481889 2278 # chain 360: length 1 score 7135 419564 421545 482323 484304 7135 # chain 361: length 1 score 1087 421585 421886 484344 484645 1087 # chain 362: length 1 score 1465 421918 422324 484677 485083 1465 # chain 363: length 1 score 1281 424420 424775 488828 489183 1281 # chain 364: length 1 score 1036 425323 425610 489730 490017 1036 # chain 365: length 3 score 5070 425918 426348 490325 490755 1551 426350 427121 490757 491528 2779 427123 427330 491530 491737 748 # chain 366: length 1 score 892 427941 428188 492348 492595 892 # chain 367: length 1 score 1404 428418 428807 492825 493214 1404 # chain 368: length 1 score 1191 429056 429386 493463 493793 1191 # chain 369: length 2 score 1763 429762 430016 494795 495049 918 430020 430256 495053 495289 853 # chain 370: length 1 score 907 430318 430569 495351 495602 907 # chain 371: length 1 score 1350 430571 430945 495604 495978 1350 # chain 372: length 1 score 1753 430974 431460 496007 496493 1753 # chain 373: length 1 score 853 431796 432032 496829 497065 853 # chain 374: length 2 score 2377 432068 432415 497101 497448 1252 432423 432739 497456 497772 1141 # chain 375: length 1 score 972 433707 433976 498740 499009 972 # chain 376: length 1 score 2307 434137 434777 499170 499810 2307 # chain 377: length 1 score 1702 435013 435485 500046 500518 1702 # chain 378: length 1 score 1155 437781 438101 504612 504932 1155 # chain 379: length 3 score 2957 440107 440365 506938 507196 932 440367 440657 507198 507488 1047 440659 440932 507490 507763 986 # chain 380: length 1 score 1195 441081 441412 507912 508243 1195 # chain 381: length 1 score 734 443866 444069 510697 510900 734 # chain 382: length 1 score 763 445270 445481 512101 512312 763 # chain 383: length 1 score 795 446240 446460 513071 513291 795 # chain 384: length 1 score 1072 446699 446996 513530 513827 1072 # chain 385: length 1 score 846 447154 447388 513985 514219 846 # chain 386: length 2 score 1860 447558 447851 514389 514682 1058 447853 448076 514684 514907 806 # chain 387: length 1 score 2800 448714 449491 515545 516322 2800 # chain 388: length 1 score 1666 449557 450019 516388 516850 1666 # chain 389: length 1 score 997 450118 450394 516949 517225 997 # chain 390: length 1 score 1260 450523 450872 517354 517703 1260 # chain 391: length 1 score 2260 451229 451856 518060 518687 2260 # chain 392: length 1 score 871 451981 452222 518812 519053 871 # chain 393: length 1 score 961 453065 453331 519896 520162 961 # chain 394: length 2 score 6224 453527 454666 520358 521497 4104 454668 455257 521499 522088 2124 # chain 395: length 1 score 741 455277 455482 522108 522313 741 # chain 396: length 1 score 849 455484 455719 522315 522550 849 # chain 397: length 1 score 946 455714 455976 522544 522806 946 # chain 398: length 1 score 1033 456098 456384 522928 523214 1033 # chain 399: length 1 score 1710 456386 456860 523216 523690 1710 # chain 400: length 2 score 3794 457429 457823 524259 524653 1422 457825 458484 524655 525314 2376 # chain 401: length 1 score 752 459551 459759 526381 526589 752 # chain 402: length 1 score 828 460049 460278 526879 527108 828 # chain 403: length 3 score 3890 460442 460891 527272 527721 1620 460893 461307 527723 528137 1494 461309 461526 528139 528356 784 # chain 404: length 1 score 1411 462603 462994 529433 529824 1411 # chain 405: length 1 score 813 463853 464078 530696 530921 813 # chain 406: length 1 score 1418 467804 468197 534646 535039 1418 # chain 407: length 3 score 6172 468592 469367 535434 536209 2793 469369 469914 536211 536756 1965 469916 470310 536758 537152 1422 # chain 408: length 1 score 838 471002 471234 537844 538076 838 # chain 409: length 1 score 961 471715 471981 538557 538823 961 # chain 410: length 1 score 910 471983 472235 538825 539077 910 # chain 411: length 1 score 828 472804 473033 539646 539875 828 # chain 412: length 1 score 730 473738 473940 540580 540782 730 # chain 413: length 2 score 1608 474071 474282 540913 541124 763 474284 474519 541126 541361 849 # chain 414: length 1 score 792 475605 475824 542449 542668 792 # chain 415: length 2 score 2040 476138 476384 542982 543228 889 476386 476706 543230 543550 1155 # chain 416: length 1 score 1036 476749 477036 543593 543880 1036 # chain 417: length 1 score 914 477185 477438 544029 544282 914 # chain 418: length 1 score 763 477689 477900 544533 544744 763 # chain 419: length 1 score 874 478299 478541 545143 545385 874 # chain 420: length 3 score 4534 478557 478830 545401 545674 986 478832 479540 545676 546384 2552 479542 479820 546386 546664 1004 # chain 421: length 1 score 810 479873 480097 546717 546941 810 # chain 422: length 1 score 730 480156 480358 547000 547202 730 # chain 423: length 1 score 1072 480500 480797 547344 547641 1072 # chain 424: length 2 score 2861 480799 481310 547643 548154 1843 481312 481595 548156 548439 1022 # chain 425: length 1 score 806 482005 482228 548849 549072 806 # chain 426: length 1 score 892 482401 482648 549245 549492 892 # chain 427: length 3 score 6190 483364 483867 550208 550711 1814 483869 484107 550713 550951 860 484109 485087 550953 551931 3524 # chain 428: length 1 score 1580 485569 486007 552413 552851 1580 # chain 429: length 1 score 2599 486512 487233 553356 554077 2599 # chain 430: length 1 score 806 488357 488580 555201 555424 806 # chain 431: length 1 score 1616 488648 489096 555492 555940 1616 # chain 432: length 1 score 2343 490156 490806 556830 557480 2343 # chain 433: length 1 score 957 491016 491281 557690 557955 957 # chain 434: length 1 score 1450 491283 491685 557957 558359 1450 # chain 435: length 1 score 1486 491936 492348 558610 559022 1486 # chain 436: length 1 score 1065 492431 492726 559105 559400 1065 # chain 437: length 1 score 846 493578 493812 560252 560486 846 # chain 438: length 1 score 817 494565 494791 561239 561465 817 # chain 439: length 1 score 1274 495183 495536 561857 562210 1274 # chain 440: length 1 score 1184 495813 496141 562487 562815 1184 # chain 441: length 1 score 1569 496339 496774 563013 563448 1569 # chain 442: length 2 score 2307 497201 497557 563771 564127 1285 497559 497843 564129 564413 1026 # chain 443: length 1 score 892 497944 498191 564514 564761 892 # chain 444: length 2 score 2112 498193 498515 564763 565085 1162 498526 498795 565096 565365 972 # chain 445: length 1 score 777 499179 499394 565749 565964 777 # chain 446: length 1 score 993 500429 500704 566999 567274 993 # chain 447: length 1 score 727 500996 501197 567566 567767 727 # chain 448: length 1 score 889 501503 501749 568073 568319 889 # chain 449: length 1 score 1292 501869 502227 568439 568797 1292 # chain 450: length 1 score 831 502292 502522 568862 569092 831 # chain 451: length 2 score 2233 502841 503244 569410 569813 1454 503252 503472 569821 570041 795 # chain 452: length 1 score 1072 504201 504498 570770 571067 1072 # chain 453: length 2 score 1777 505313 505596 571882 572165 1022 505598 505808 572167 572377 759 # chain 454: length 1 score 795 505872 506092 572441 572661 795 # chain 455: length 1 score 864 506287 506526 572856 573095 864 # chain 456: length 1 score 727 507669 507870 574238 574439 727 # chain 457: length 1 score 1454 510100 510503 576568 576971 1454 # chain 458: length 1 score 1000 510693 510970 577161 577438 1000 # chain 459: length 1 score 774 511506 511720 577974 578188 774 # chain 460: length 1 score 1270 511916 512268 578384 578736 1270 # chain 461: length 1 score 903 514311 514561 608578 608828 903 # chain 462: length 1 score 1584 514941 515380 609208 609647 1584 # chain 463: length 3 score 4177 515956 516293 610223 610560 1216 516295 516506 610562 610773 763 516508 517120 610775 611387 2206 # chain 464: length 1 score 1011 517360 517640 611627 611907 1011 # chain 465: length 2 score 2832 517972 518490 612239 612757 1868 518492 518760 612759 613027 968 # chain 466: length 1 score 882 519981 520225 614248 614492 882 # chain 467: length 1 score 882 520758 521002 615025 615269 882 # chain 468: length 1 score 2127 527250 527840 620314 620904 2127 # chain 469: length 1 score 831 527909 528139 620973 621203 831 # chain 470: length 2 score 3905 528272 528957 621335 622020 2469 528959 529358 622022 622421 1440 # chain 471: length 1 score 2059 529620 530191 622683 623254 2059 # chain 472: length 1 score 1504 530358 530775 623421 623838 1504 # chain 473: length 1 score 939 531308 531568 624371 624631 939 # chain 474: length 1 score 1083 532001 532301 625064 625364 1083 # chain 475: length 1 score 720 532459 532658 625522 625721 720 # chain 476: length 1 score 2059 533211 533782 626274 626845 2059 # chain 477: length 1 score 860 535236 535474 628299 628537 860 # chain 478: length 1 score 1072 536800 537097 629864 630161 1072 # chain 479: length 1 score 968 538454 538722 631432 631700 968 # chain 480: length 1 score 730 539806 540008 632784 632986 730 # chain 481: length 1 score 1054 540859 541151 633837 634129 1054 # chain 482: length 1 score 896 543235 543483 636213 636461 896 # chain 483: length 2 score 1850 545192 545481 638170 638459 1044 545483 545707 638461 638685 810 # chain 484: length 1 score 1825 545797 546303 638775 639281 1825 # chain 485: length 1 score 817 547235 547461 640213 640439 817 # chain 486: length 1 score 1198 548227 548559 641206 641538 1198 # chain 487: length 1 score 1353 548973 549348 641952 642327 1353 # chain 488: length 1 score 774 549401 549615 642380 642594 774 # chain 489: length 1 score 1108 549988 550295 642967 643274 1108 # chain 490: length 1 score 1152 552171 552490 645094 645413 1152 # chain 491: length 1 score 2192 553403 554011 646326 646934 2192 # chain 492: length 1 score 2149 554139 554735 647062 647658 2149 # chain 493: length 1 score 824 555699 555927 648622 648850 824 # chain 494: length 2 score 2886 557166 557534 650089 650457 1328 557536 557969 650459 650892 1562 # chain 495: length 1 score 730 558658 558860 651581 651783 730 # chain 496: length 1 score 738 558862 559066 651785 651989 738 # chain 497: length 1 score 1670 559243 559706 652166 652629 1670 # chain 498: length 1 score 1512 561117 561536 654046 654465 1512 # chain 499: length 2 score 2036 561996 562213 654926 655143 784 562215 562563 655145 655493 1256 # chain 500: length 2 score 2684 562841 563219 655771 656149 1364 563221 563588 656151 656518 1324 # chain 501: length 1 score 997 563747 564023 656677 656953 997 # chain 502: length 1 score 1674 585334 585798 656962 657426 1674 # chain 503: length 2 score 2101 585880 586262 657508 657890 1378 586264 586465 657892 658093 727 # chain 504: length 1 score 763 587112 587323 658740 658951 763 # chain 505: length 1 score 1000 587364 587641 658992 659269 1000 # chain 506: length 1 score 1058 588166 588459 659794 660087 1058 # chain 507: length 1 score 1047 588646 588936 660274 660564 1047 # chain 508: length 1 score 1108 589344 589651 660972 661279 1108 # chain 509: length 1 score 1911 590019 590549 661647 662177 1911 # chain 510: length 1 score 1054 592069 592361 663697 663989 1054 # chain 511: length 1 score 774 594538 594752 677757 677971 774 # chain 512: length 1 score 774 595911 596125 679130 679344 774 # chain 513: length 1 score 748 597790 597997 680884 681091 748 # chain 514: length 1 score 1054 599565 599857 682653 682945 1054 # chain 515: length 1 score 810 600066 600290 683154 683378 810 # chain 516: length 1 score 738 600346 600550 683434 683638 738 # chain 517: length 1 score 1785 601677 602172 684765 685260 1785 # chain 518: length 1 score 828 602198 602427 685286 685515 828 # chain 519: length 3 score 3328 602936 603201 686011 686276 957 603203 603533 686278 686608 1191 603535 603864 686610 686939 1188 # chain 520: length 1 score 1044 604552 604841 687627 687916 1044 # chain 521: length 1 score 1591 604858 605299 687933 688374 1591 # chain 522: length 1 score 856 605327 605564 688402 688639 856 # chain 523: length 1 score 871 605896 606137 688971 689212 871 # chain 524: length 1 score 871 606382 606623 689457 689698 871 # chain 525: length 1 score 741 608712 608917 690927 691132 741 # chain 526: length 1 score 1303 609123 609484 691338 691699 1303 # chain 527: length 1 score 849 611082 611317 693297 693532 849 # chain 528: length 1 score 1666 611646 612108 693861 694323 1666 # chain 529: length 1 score 817 612814 613040 695029 695255 817 # chain 530: length 1 score 799 617409 617630 699624 699845 799 # chain 531: length 1 score 1206 617729 618063 699944 700278 1206 # chain 532: length 1 score 2743 621062 621823 703277 704038 2743 # chain 533: length 1 score 752 622374 622582 704589 704797 752 # chain 534: length 1 score 795 622798 623018 705013 705233 795 # chain 535: length 1 score 1353 623967 624342 705996 706371 1353 # chain 536: length 1 score 720 624455 624654 706484 706683 720 # chain 537: length 1 score 1022 625067 625350 707096 707379 1022 # chain 538: length 1 score 1706 626744 627217 708773 709246 1706 # chain 539: length 1 score 871 630745 630986 712774 713015 871 # chain 540: length 1 score 1062 631312 631606 713340 713634 1062 # chain 541: length 1 score 1414 632574 632966 714602 714994 1414 # chain 542: length 1 score 1098 632979 633283 715007 715311 1098 # chain 543: length 1 score 968 634659 634927 716687 716955 968 # chain 544: length 1 score 1170 635077 635401 717105 717429 1170 # chain 545: length 1 score 774 635427 635641 717455 717669 774 # chain 546: length 2 score 2387 636170 636533 718198 718561 1310 636536 636836 718564 718864 1083 # chain 547: length 1 score 1162 637362 637684 719391 719713 1162 # chain 548: length 1 score 2199 638120 638730 720149 720759 2199 # chain 549: length 1 score 1159 638868 639189 720781 721102 1159 # chain 550: length 2 score 3692 639566 640314 721479 722227 2696 640316 640593 722229 722506 1000 # chain 551: length 1 score 1234 640892 641234 722805 723147 1234 # chain 552: length 1 score 928 642033 642290 723946 724203 928 # chain 553: length 1 score 1148 642891 643209 724804 725122 1148 # chain 554: length 2 score 1730 644297 644559 726210 726472 946 644561 644779 726474 726692 788 # chain 555: length 1 score 1292 644973 645331 726886 727244 1292 # chain 556: length 1 score 1242 645498 645842 727411 727755 1242 # chain 557: length 1 score 720 647520 647719 729433 729632 720 # chain 558: length 1 score 763 649072 649283 730985 731196 763 # chain 559: length 2 score 2299 649579 649804 731492 731717 813 649806 650219 731719 732132 1490 # chain 560: length 1 score 756 650628 650837 732541 732750 756 # chain 561: length 1 score 1098 650876 651180 732789 733093 1098 # chain 562: length 2 score 2511 651311 651673 733225 733587 1306 651675 652010 733589 733924 1209 # chain 563: length 1 score 2394 652417 653081 734331 734995 2394 # chain 564: length 1 score 1152 653198 653517 735112 735431 1152 # chain 565: length 3 score 4267 653983 654464 735897 736378 1735 654466 654803 736380 736717 1216 654805 655172 736719 737086 1324 # chain 566: length 1 score 1317 655895 656260 737809 738174 1317 # chain 567: length 1 score 1216 656433 656770 738347 738684 1216 # chain 568: length 1 score 853 656765 657001 738678 738914 853 # chain 569: length 2 score 2969 657882 658118 739796 740032 853 658120 658708 740034 740622 2120 # chain 570: length 1 score 2203 659170 659781 741084 741695 2203 # chain 571: length 1 score 990 660230 660504 742144 742418 990 # chain 572: length 1 score 1130 660926 661239 742841 743154 1130 # chain 573: length 1 score 1396 661580 661967 743495 743882 1396 # chain 574: length 1 score 849 662074 662309 743989 744224 849 # chain 575: length 1 score 730 662383 662585 744298 744500 730 # chain 576: length 1 score 1206 662887 663221 744802 745136 1206 # chain 577: length 3 score 4066 664333 664703 746249 746619 1335 664705 665241 746621 747157 1933 665243 665466 747159 747382 806 # chain 578: length 1 score 752 666505 666713 748421 748629 752 # chain 579: length 2 score 2957 667222 667583 749138 749499 1303 667591 668054 749507 749970 1670 # chain 580: length 1 score 1137 668158 668473 750074 750389 1137 # chain 581: length 1 score 910 669211 669463 751127 751379 910 # chain 582: length 1 score 867 670619 670859 752535 752775 867 # chain 583: length 2 score 1616 671335 671569 753251 753485 846 671571 671785 753487 753701 774 # chain 584: length 1 score 1411 672021 672412 753937 754328 1411 # chain 585: length 1 score 1425 673391 673786 755307 755702 1425 # chain 586: length 1 score 770 673815 674028 755731 755944 770 # chain 587: length 1 score 3963 674051 675151 755968 757068 3963 # chain 588: length 3 score 3541 677843 678132 759761 760050 1044 678134 678600 760052 760518 1681 678602 678830 760520 760748 824 # chain 589: length 1 score 730 678850 679052 760768 760970 730 # chain 590: length 1 score 925 681591 681847 763509 763765 925 # chain 591: length 1 score 1839 682257 682767 764175 764685 1839 # chain 592: length 1 score 727 684323 684524 766241 766442 727 # chain 593: length 1 score 828 685476 685705 767394 767623 828 # chain 594: length 1 score 1062 685740 686034 767658 767952 1062 # chain 595: length 1 score 777 688616 688831 769335 769550 777 # chain 596: length 1 score 1022 688851 689134 769570 769853 1022 # chain 597: length 1 score 907 689217 689468 769936 770187 907 # chain 598: length 1 score 1508 689820 690238 770539 770957 1508 # chain 599: length 1 score 946 690471 690733 771190 771452 946 # chain 600: length 2 score 1752 690801 691086 771520 771805 1029 691088 691289 771807 772008 727 # chain 601: length 2 score 2073 691978 692324 772697 773043 1249 692326 692555 773045 773274 828 # chain 602: length 1 score 831 692817 693047 773536 773766 831 # chain 603: length 1 score 1616 693822 694270 774541 774989 1616 # chain 604: length 1 score 885 695606 695851 776325 776570 885 # chain 605: length 1 score 738 695874 696078 776594 776798 738 # chain 606: length 2 score 2022 696270 696632 776991 777353 1306 696634 696833 777355 777554 720 # chain 607: length 1 score 741 697180 697385 777901 778106 741 # chain 608: length 1 score 795 697522 697742 778243 778463 795 # chain 609: length 1 score 921 699406 699661 779987 780242 921 # chain 610: length 1 score 946 700002 700264 780583 780845 946 # chain 611: length 1 score 1105 700584 700890 781165 781471 1105 # chain 612: length 1 score 1915 701579 702110 782160 782691 1915 # chain 613: length 1 score 831 702468 702698 783049 783279 831 # chain 614: length 1 score 856 702742 702979 783323 783560 856 # chain 615: length 1 score 871 703130 703371 783711 783952 871 # chain 616: length 1 score 1123 705239 705550 785820 786131 1123 # chain 617: length 1 score 1083 706141 706441 786722 787022 1083 # chain 618: length 2 score 2428 706486 706753 787067 787334 964 706755 707162 787336 787743 1468 # chain 619: length 1 score 824 707278 707506 787860 788088 824 # chain 620: length 1 score 784 708561 708778 789143 789360 784 # chain 621: length 1 score 1468 709471 709878 790053 790460 1468 # chain 622: length 2 score 3005 710074 710450 790658 791034 1357 710452 710910 791036 791494 1652 # chain 623: length 1 score 1155 711047 711367 791631 791951 1155 # chain 624: length 1 score 1566 711957 712391 792541 792975 1566 # chain 625: length 1 score 2203 712452 713063 793036 793647 2203 # chain 626: length 1 score 795 713548 713768 794132 794352 795 # chain 627: length 1 score 741 713980 714185 794564 794769 741 # chain 628: length 1 score 813 714202 714427 794786 795011 813 # chain 629: length 1 score 838 716622 716854 795515 795747 838 # chain 630: length 1 score 1249 717030 717376 795923 796269 1249 # chain 631: length 1 score 784 717986 718203 796879 797096 784 # chain 632: length 1 score 1735 721034 721515 800021 800502 1735 # chain 633: length 1 score 784 722999 723216 801986 802203 784 # chain 634: length 1 score 730 725606 725808 804593 804795 730 # chain 635: length 2 score 2000 726092 726414 805079 805401 1162 726416 726649 805403 805636 842 # chain 636: length 1 score 1432 3759827 3760224 807809 808206 1432 # chain 637: length 1 score 1206 3616903 3617237 807872 808206 1206 # chain 638: length 1 score 1929 729222 729757 808208 808743 1929 # chain 639: length 2 score 1576 3760533 3760761 808515 808743 824 3760763 3760972 808745 808954 756 # chain 640: length 2 score 1576 3617546 3617774 808515 808743 824 3617776 3617985 808745 808954 756 # chain 641: length 1 score 986 730140 730413 809126 809399 986 # chain 642: length 1 score 1141 730620 730936 809606 809922 1141 # chain 643: length 1 score 936 3762518 3762777 810500 810759 936 # chain 644: length 1 score 936 3619531 3619790 810500 810759 936 # chain 645: length 1 score 720 3762983 3763182 810965 811164 720 # chain 646: length 1 score 4676 732327 733625 811313 812611 4676 # chain 647: length 1 score 720 3762983 3763182 812836 813035 720 # chain 648: length 1 score 871 734890 735131 813877 814118 871 # chain 649: length 1 score 1198 3622137 3622469 816144 816476 1198 # chain 650: length 1 score 878 3622911 3623154 816918 817161 878 # chain 651: length 1 score 964 740097 740364 819174 819441 964 # chain 652: length 2 score 1670 741528 741757 820605 820834 828 741759 741993 820836 821070 846 # chain 653: length 2 score 3548 742280 743053 821357 822130 2786 743064 743281 822141 822358 784 # chain 654: length 1 score 842 743941 744174 823018 823251 842 # chain 655: length 1 score 867 745018 745258 824095 824335 867 # chain 656: length 1 score 774 746300 746514 825377 825591 774 # chain 657: length 1 score 730 752906 753108 831982 832184 730 # chain 658: length 1 score 838 753323 753555 832399 832631 838 # chain 659: length 3 score 4020 753774 754160 832850 833236 1393 754162 754523 833238 833599 1303 754525 754894 833601 833970 1332 # chain 660: length 1 score 860 754937 755175 834013 834251 860 # chain 661: length 1 score 1303 755177 755538 834253 834614 1303 # chain 662: length 1 score 892 756746 756993 835822 836069 892 # chain 663: length 1 score 1519 757037 757458 836113 836534 1519 # chain 664: length 1 score 2394 757532 758196 836608 837272 2394 # chain 665: length 1 score 1112 758228 758536 837304 837612 1112 # chain 666: length 1 score 1724 760172 760650 839248 839726 1724 # chain 667: length 1 score 1044 760828 761117 839904 840193 1044 # chain 668: length 1 score 838 761269 761501 840345 840577 838 # chain 669: length 1 score 1108 762269 762576 841164 841471 1108 # chain 670: length 1 score 795 763591 763811 842486 842706 795 # chain 671: length 1 score 1501 763954 764370 842849 843265 1501 # chain 672: length 1 score 2026 770806 771368 857743 858305 2026 # chain 673: length 1 score 1422 771946 772340 858883 859277 1422 # chain 674: length 1 score 792 773272 773491 860209 860428 792 # chain 675: length 3 score 2926 773648 773855 860585 860792 748 773858 774113 860795 861050 921 774115 774466 861052 861403 1267 # chain 676: length 1 score 864 774969 775208 861906 862145 864 # chain 677: length 1 score 1724 775210 775688 862147 862625 1724 # chain 678: length 2 score 2277 776440 776847 863296 863703 1468 776849 777074 863705 863930 813 # chain 679: length 1 score 3776 777898 778946 864754 865802 3776 # chain 680: length 1 score 2199 779241 779851 866097 866707 2199 # chain 681: length 1 score 849 781316 781551 867611 867846 849 # chain 682: length 1 score 860 781922 782160 868217 868455 860 # chain 683: length 1 score 871 783078 783319 869373 869614 871 # chain 684: length 1 score 903 783507 783757 869802 870052 903 # chain 685: length 1 score 1360 784644 785021 870933 871310 1360 # chain 686: length 1 score 802 786648 786870 872945 873167 802 # chain 687: length 1 score 878 787198 787441 873495 873738 878 # chain 688: length 1 score 957 788132 788397 874429 874694 957 # chain 689: length 1 score 781 790206 790422 876503 876719 781 # chain 690: length 1 score 860 790730 790968 877027 877265 860 # chain 691: length 1 score 1483 792220 792631 878518 878929 1483 # chain 692: length 1 score 867 792781 793021 879079 879319 867 # chain 693: length 1 score 2163 793739 794339 880037 880637 2163 # chain 694: length 2 score 1770 795078 795295 881376 881593 784 795297 795571 881595 881869 990 # chain 695: length 1 score 925 795678 795934 881976 882232 925 # chain 696: length 1 score 1674 796493 796957 882791 883255 1674 # chain 697: length 1 score 1184 799265 799593 885563 885891 1184 # chain 698: length 1 score 1400 799810 800198 886108 886496 1400 # chain 699: length 1 score 932 801521 801779 887820 888078 932 # chain 700: length 1 score 1126 802234 802546 888533 888845 1126 # chain 701: length 1 score 810 803451 803675 889750 889974 810 # chain 702: length 1 score 1044 803889 804178 890188 890477 1044 # chain 703: length 1 score 939 804780 805040 891079 891339 939 # chain 704: length 1 score 1072 805498 805795 891704 892001 1072 # chain 705: length 1 score 1026 808412 808696 933207 933491 1026 # chain 706: length 1 score 824 812635 812863 937431 937659 824 # chain 707: length 1 score 817 816179 816405 940974 941200 817 # chain 708: length 1 score 1155 817052 817372 941847 942167 1155 # chain 709: length 1 score 1278 817661 818015 942456 942810 1278 # chain 710: length 1 score 892 818373 818620 943168 943415 892 # chain 711: length 1 score 763 819202 819413 943996 944207 763 # chain 712: length 1 score 1461 821380 821785 946177 946582 1461 # chain 713: length 1 score 936 822333 822592 947130 947389 936 # chain 714: length 3 score 6338 822609 823614 947406 948411 3621 823616 824135 948413 948932 1872 824137 824373 948934 949170 853 # chain 715: length 1 score 896 826458 826706 951255 951503 896 # chain 716: length 1 score 1278 827275 827629 952072 952426 1278 # chain 717: length 1 score 1584 829168 829607 953965 954404 1584 # chain 718: length 1 score 1717 829949 830425 954746 955222 1717 # chain 719: length 1 score 856 832197 832434 959067 959304 856 # chain 720: length 1 score 1206 833381 833715 960251 960585 1206 # chain 721: length 1 score 914 834305 834558 961175 961428 914 # chain 722: length 1 score 738 839012 839216 965895 966099 738 # chain 723: length 1 score 1123 840524 840835 967407 967718 1123 # chain 724: length 1 score 1972 841097 841644 967980 968527 1972 # chain 725: length 1 score 1526 842958 843381 969841 970264 1526 # chain 726: length 1 score 730 845147 845349 971886 972088 730 # chain 727: length 1 score 1540 845602 846029 972341 972768 1540 # chain 728: length 1 score 1749 846823 847308 973562 974047 1749 # chain 729: length 1 score 1126 847608 847920 974347 974659 1126 # chain 730: length 1 score 1281 848682 849037 975421 975776 1281 # chain 731: length 1 score 1821 849246 849751 975985 976490 1821 # chain 732: length 1 score 741 849867 850072 976606 976811 741 # chain 733: length 2 score 2576 850999 851479 977738 978218 1731 851481 851716 978220 978455 849 # chain 734: length 1 score 864 852048 852287 978787 979026 864 # chain 735: length 1 score 799 852947 853168 979686 979907 799 # chain 736: length 1 score 763 854794 855005 981532 981743 763 # chain 737: length 1 score 1724 855107 855585 981846 982324 1724 # chain 738: length 1 score 1069 855680 855976 982419 982715 1069 # chain 739: length 1 score 741 857016 857221 983682 983887 741 # chain 740: length 1 score 2275 857661 858292 984327 984958 2275 # chain 741: length 1 score 914 858469 858722 985136 985389 914 # chain 742: length 1 score 770 858802 859015 985469 985682 770 # chain 743: length 1 score 831 860912 861142 987579 987809 831 # chain 744: length 1 score 846 861749 861983 988415 988649 846 # chain 745: length 1 score 806 862759 862982 989425 989648 806 # chain 746: length 2 score 1849 865489 865766 992258 992535 1000 865768 866004 992537 992773 853 # chain 747: length 1 score 1339 866423 866794 993192 993563 1339 # chain 748: length 1 score 774 867315 867529 994084 994298 774 # chain 749: length 1 score 817 867711 867937 994480 994706 817 # chain 750: length 1 score 1630 868317 868769 995086 995538 1630 # chain 751: length 1 score 766 868960 869172 995729 995941 766 # chain 752: length 1 score 741 869174 869379 995943 996148 741 # chain 753: length 1 score 1144 869581 869898 996350 996667 1144 # chain 754: length 1 score 1396 870996 871383 997765 998152 1396 # chain 755: length 2 score 1932 873497 873732 1000266 1000501 849 873734 874035 1000503 1000804 1087 # chain 756: length 1 score 1058 874493 874786 1001262 1001555 1058 # chain 757: length 1 score 1000 874818 875095 1001587 1001864 1000 # chain 758: length 1 score 1486 876323 876735 1004046 1004458 1486 # chain 759: length 1 score 777 877193 877408 1004916 1005131 777 # chain 760: length 1 score 1886 877453 877976 1005176 1005699 1886 # chain 761: length 1 score 774 878102 878316 1005825 1006039 774 # chain 762: length 1 score 1692 878360 878829 1006083 1006552 1692 # chain 763: length 1 score 828 878948 879177 1006671 1006900 828 # chain 764: length 1 score 752 879179 879387 1006902 1007110 752 # chain 765: length 2 score 1691 879419 879669 1007142 1007392 903 879671 879890 1007394 1007613 792 # chain 766: length 1 score 1216 880033 880370 1007755 1008092 1216 # chain 767: length 1 score 853 880495 880731 1008217 1008453 853 # chain 768: length 1 score 720 881337 881536 1009059 1009258 720 # chain 769: length 2 score 1910 881772 882057 1009494 1009779 1029 882059 882304 1009781 1010026 885 # chain 770: length 2 score 2198 882494 882787 1010216 1010509 1058 882789 883106 1010511 1010828 1144 # chain 771: length 1 score 846 884251 884485 1011973 1012207 846 # chain 772: length 1 score 1634 885244 885697 1012966 1013419 1634 # chain 773: length 1 score 990 886891 887165 1014613 1014887 990 # chain 774: length 1 score 817 887198 887424 1014920 1015146 817 # chain 775: length 4 score 4800 887729 888012 1015451 1015734 1022 888014 888372 1015736 1016094 1292 888374 888603 1016096 1016325 828 888605 889068 1016327 1016790 1670 # chain 776: length 1 score 781 889734 889950 1017457 1017673 781 # chain 777: length 1 score 763 890478 890689 1018201 1018412 763 # chain 778: length 2 score 2673 891140 891620 1018863 1019343 1731 891622 891884 1019345 1019607 946 # chain 779: length 1 score 1191 892279 892609 1020002 1020332 1191 # chain 780: length 1 score 1134 895107 895421 1022830 1023144 1134 # chain 781: length 1 score 1130 895956 896269 1023679 1023992 1130 # chain 782: length 1 score 936 896468 896727 1024191 1024450 936 # chain 783: length 1 score 774 897283 897497 1025006 1025220 774 # chain 784: length 1 score 979 897520 897791 1025243 1025514 979 # chain 785: length 1 score 871 901363 901604 1032396 1032637 871 # chain 786: length 1 score 910 902056 902308 1033089 1033341 910 # chain 787: length 2 score 2486 902490 902737 1033523 1033770 892 902739 903182 1033772 1034215 1598 # chain 788: length 1 score 777 904186 904401 1037735 1037950 777 # chain 789: length 1 score 788 906687 906905 1040236 1040454 788 # chain 790: length 1 score 968 910222 910490 1043771 1044039 968 # chain 791: length 1 score 979 912033 912304 1045582 1045853 979 # chain 792: length 1 score 1202 912852 913185 1046401 1046734 1202 # chain 793: length 1 score 813 913841 914066 1047390 1047615 813 # chain 794: length 1 score 1047 914986 915276 1048498 1048788 1047 # chain 795: length 1 score 1260 915473 915822 1048985 1049334 1260 # chain 796: length 1 score 838 916829 917061 1050341 1050573 838 # chain 797: length 2 score 1699 917267 917535 1050779 1051047 968 917540 917745 1051052 1051257 741 # chain 798: length 1 score 1051 917978 918269 1051490 1051781 1051 # chain 799: length 1 score 846 918885 919119 1052397 1052631 846 # chain 800: length 1 score 1152 919198 919517 1052710 1053029 1152 # chain 801: length 1 score 784 919680 919897 1053192 1053409 784 # chain 802: length 1 score 817 920748 920974 1054260 1054486 817 # chain 803: length 3 score 7003 921171 921406 1054683 1054918 849 921408 921951 1054920 1055463 1958 921953 923120 1055465 1056632 4204 # chain 804: length 1 score 828 923158 923387 1056670 1056899 828 # chain 805: length 1 score 1011 923950 924230 1057462 1057742 1011 # chain 806: length 1 score 882 4505653 4505897 1069810 1070054 882 # chain 807: length 1 score 1288 4505889 4506246 1072496 1072853 1288 # chain 808: length 1 score 828 4506249 4506478 1083883 1084112 828 # chain 809: length 2 score 3134 925370 926038 1146447 1147115 2408 926040 926242 1147117 1147319 730 # chain 810: length 1 score 2772 926275 927044 1147352 1148121 2772 # chain 811: length 1 score 1342 927564 927936 1148641 1149013 1342 # chain 812: length 1 score 2005 928215 928771 1149292 1149848 2005 # chain 813: length 2 score 2014 929811 930058 1150888 1151135 892 930060 930372 1151137 1151449 1126 # chain 814: length 8 score 10822 930878 931200 1151955 1152277 1162 931202 931652 1152279 1152729 1623 931654 932145 1152731 1153222 1771 932147 932461 1153224 1153538 1134 932463 932760 1153540 1153837 1072 932762 933125 1153839 1154202 1310 933127 933504 1154204 1154581 1360 933506 933899 1154583 1154976 1418 # chain 815: length 1 score 727 934265 934466 1155342 1155543 727 # chain 816: length 1 score 820 934900 935127 1156016 1156243 820 # chain 817: length 1 score 1242 935833 936177 1156949 1157293 1242 # chain 818: length 1 score 3081 936449 937304 1157561 1158416 3081 # chain 819: length 1 score 774 937477 937691 1158589 1158803 774 # chain 820: length 1 score 4827 937915 939255 1159027 1160367 4827 # chain 821: length 1 score 1184 939544 939872 1160656 1160984 1184 # chain 822: length 1 score 842 940110 940343 1161222 1161455 842 # chain 823: length 1 score 1144 940345 940662 1161457 1161774 1144 # chain 824: length 1 score 1504 940818 941235 1161930 1162347 1504 # chain 825: length 2 score 1889 941576 941796 1162688 1162908 795 941798 942102 1162910 1163214 1098 # chain 826: length 1 score 1879 942182 942703 1163294 1163815 1879 # chain 827: length 1 score 1717 942837 943313 1163949 1164425 1717 # chain 828: length 1 score 907 944568 944819 1165681 1165932 907 # chain 829: length 1 score 896 947729 947977 1168843 1169091 896 # chain 830: length 1 score 2077 949842 950418 1169485 1170061 2077 # chain 831: length 1 score 806 950612 950835 1170255 1170478 806 # chain 832: length 2 score 1576 950843 951066 1170486 1170709 806 951068 951282 1170711 1170925 774 # chain 833: length 2 score 2310 951527 951807 1171170 1171450 1011 951809 952170 1171452 1171813 1303 # chain 834: length 1 score 1022 952556 952839 1172199 1172482 1022 # chain 835: length 1 score 2167 953456 954057 1173099 1173700 2167 # chain 836: length 2 score 2071 954464 954780 1174107 1174423 1141 954788 955050 1174431 1174693 946 # chain 837: length 2 score 2987 955595 955818 1175238 1175461 806 955820 956426 1175463 1176069 2185 # chain 838: length 1 score 1533 956495 956920 1176138 1176563 1533 # chain 839: length 1 score 1425 956922 957317 1176565 1176960 1425 # chain 840: length 1 score 1083 957533 957833 1177176 1177476 1083 # chain 841: length 1 score 1263 957895 958245 1177538 1177888 1263 # chain 842: length 1 score 2113 958403 958989 1178046 1178632 2113 # chain 843: length 1 score 774 959615 959829 1179258 1179472 774 # chain 844: length 1 score 817 960300 960526 1179943 1180169 817 # chain 845: length 4 score 6848 960846 961677 1180489 1181320 2995 961679 962145 1181322 1181788 1681 962147 962362 1181790 1182005 777 962364 962754 1182007 1182397 1407 # chain 846: length 1 score 1519 962919 963340 1182562 1182983 1519 # chain 847: length 1 score 727 965709 965910 1185351 1185552 727 # chain 848: length 1 score 774 966533 966747 1186175 1186389 774 # chain 849: length 2 score 2868 967358 967892 1187000 1187534 1926 967894 968156 1187536 1187798 946 # chain 850: length 1 score 788 969047 969265 1188689 1188907 788 # chain 851: length 1 score 1126 969408 969720 1189050 1189362 1126 # chain 852: length 1 score 741 970335 970540 1189977 1190182 741 # chain 853: length 1 score 1101 970794 971099 1190436 1190741 1101 # chain 854: length 2 score 2087 971310 971536 1190952 1191178 817 971538 971891 1191180 1191533 1274 # chain 855: length 1 score 1159 972562 972883 1192204 1192525 1159 # chain 856: length 1 score 752 972954 973162 1192596 1192804 752 # chain 857: length 1 score 817 973976 974202 1193618 1193844 817 # chain 858: length 1 score 734 974738 974941 1194380 1194583 734 # chain 859: length 2 score 1885 975378 975600 1195020 1195242 802 975602 975903 1195244 1195545 1087 # chain 860: length 1 score 774 977765 977979 1197407 1197621 774 # chain 861: length 1 score 914 978464 978717 1198106 1198359 914 # chain 862: length 1 score 770 979620 979833 1199262 1199475 770 # chain 863: length 1 score 1137 979981 980296 1199623 1199938 1137 # chain 864: length 1 score 1274 980460 980813 1200102 1200455 1274 # chain 865: length 1 score 946 981037 981299 1200679 1200941 946 # chain 866: length 1 score 1612 981721 982168 1201363 1201810 1612 # chain 867: length 1 score 856 982352 982589 1201994 1202231 856 # chain 868: length 1 score 1141 983103 983419 1202745 1203061 1141 # chain 869: length 1 score 1854 983832 984346 1203303 1203817 1854 # chain 870: length 2 score 2771 984627 985057 1204098 1204528 1551 985059 985398 1204530 1204869 1224 # chain 871: length 1 score 1562 985636 986069 1205107 1205540 1562 # chain 872: length 2 score 1543 987711 987927 1207182 1207398 781 987929 988141 1207400 1207612 766 # chain 873: length 1 score 1238 988170 988513 1207641 1207984 1238 # chain 874: length 1 score 1116 988675 988984 1208146 1208455 1116 # chain 875: length 2 score 2806 989214 989491 1208685 1208962 1000 989493 989995 1208964 1209466 1810 # chain 876: length 1 score 1173 990318 990643 1209789 1210114 1173 # chain 877: length 1 score 1537 993345 993771 1212816 1213242 1537 # chain 878: length 1 score 1357 996936 997312 1216408 1216784 1357 # chain 879: length 1 score 1328 999032 999400 1218503 1218871 1328 # chain 880: length 1 score 824 999491 999719 1218962 1219190 824 # chain 881: length 1 score 2077 1002117 1002693 1221589 1222165 2077 # chain 882: length 1 score 1112 1002826 1003134 1222298 1222606 1112 # chain 883: length 1 score 835 1003382 1003613 1222854 1223085 835 # chain 884: length 1 score 921 1003817 1004072 1223288 1223543 921 # chain 885: length 1 score 1159 1004749 1005070 1224220 1224541 1159 # chain 886: length 1 score 882 1005285 1005529 1224756 1225000 882 # chain 887: length 1 score 1346 1005582 1005955 1225053 1225426 1346 # chain 888: length 1 score 831 1006031 1006261 1225502 1225732 831 # chain 889: length 1 score 1497 1006952 1007367 1226423 1226838 1497 # chain 890: length 1 score 950 1007987 1008250 1227458 1227721 950 # chain 891: length 1 score 1990 1008824 1009376 1228295 1228847 1990 # chain 892: length 1 score 817 1009477 1009703 1228948 1229174 817 # chain 893: length 1 score 1270 1011376 1011728 1230847 1231199 1270 # chain 894: length 1 score 2235 1012105 1012725 1231576 1232196 2235 # chain 895: length 1 score 795 1013177 1013397 1232648 1232868 795 # chain 896: length 1 score 925 1013621 1013877 1233092 1233348 925 # chain 897: length 1 score 1040 1013960 1014248 1233431 1233719 1040 # chain 898: length 2 score 8300 1014406 1014739 1233877 1234210 1202 1014741 1016713 1234212 1236184 7102 # chain 899: length 1 score 1152 1016737 1017056 1236208 1236527 1152 # chain 900: length 1 score 2538 1017058 1017762 1236529 1237233 2538 # chain 901: length 1 score 1717 1017764 1018240 1237235 1237711 1717 # chain 902: length 1 score 2426 1018242 1018915 1237713 1238386 2426 # chain 903: length 1 score 2300 1018917 1019555 1238388 1239026 2300 # chain 904: length 8 score 15158 1019679 1020273 1239150 1239744 2142 1020275 1020545 1239746 1240016 975 1020547 1021341 1240018 1240812 2862 1021343 1021732 1240814 1241203 1404 1021734 1022021 1241205 1241492 1036 1022023 1022522 1241494 1241993 1800 1022524 1023481 1241995 1242952 3448 1023483 1023904 1242954 1243375 1519 # chain 905: length 1 score 1422 1024077 1024471 1243548 1243942 1422 # chain 906: length 1 score 979 1024473 1024744 1243944 1244215 979 # chain 907: length 1 score 1141 1024767 1025083 1244238 1244554 1141 # chain 908: length 1 score 1522 1025085 1025507 1244556 1244978 1522 # chain 909: length 1 score 738 1025655 1025859 1245126 1245330 738 # chain 910: length 1 score 1796 1025861 1026359 1245332 1245830 1796 # chain 911: length 1 score 2833 1026361 1027147 1245832 1246618 2833 # chain 912: length 1 score 1044 1027783 1028072 1247254 1247543 1044 # chain 913: length 1 score 1108 1028797 1029104 1248268 1248575 1108 # chain 914: length 1 score 979 1029106 1029377 1248577 1248848 979 # chain 915: length 1 score 1141 1029451 1029767 1248922 1249238 1141 # chain 916: length 3 score 2553 1031117 1031346 1295831 1296060 828 1031348 1031584 1296062 1296298 853 1031592 1031839 1296306 1296553 892 # chain 917: length 1 score 878 1033953 1034196 1298667 1298910 878 # chain 918: length 2 score 1803 1036286 1036497 1301000 1301211 763 1036499 1036788 1301213 1301502 1044 # chain 919: length 1 score 2174 1038009 1038612 1302723 1303326 2174 # chain 920: length 1 score 720 1039130 1039329 1303844 1304043 720 # chain 921: length 1 score 1083 1040143 1040443 1304863 1305163 1083 # chain 922: length 1 score 936 1041571 1041830 1306296 1306555 936 # chain 923: length 1 score 849 1042342 1042577 1307067 1307302 849 # chain 924: length 1 score 1069 1043203 1043499 1307928 1308224 1069 # chain 925: length 1 score 1267 1043609 1043960 1308334 1308685 1267 # chain 926: length 1 score 1098 1043989 1044293 1308714 1309018 1098 # chain 927: length 1 score 1551 1044784 1045214 1309509 1309939 1551 # chain 928: length 1 score 1324 1045810 1046177 1310535 1310902 1324 # chain 929: length 1 score 1443 1046494 1046894 1311219 1311619 1443 # chain 930: length 1 score 900 1047786 1048035 1312511 1312760 900 # chain 931: length 1 score 806 1048403 1048626 1313128 1313351 806 # chain 932: length 2 score 2177 1050249 1050533 1314197 1314481 1026 1050535 1050855 1314483 1314803 1155 # chain 933: length 1 score 766 1051613 1051825 1315560 1315772 766 # chain 934: length 1 score 734 1053310 1053513 1317257 1317460 734 # chain 935: length 1 score 943 1055016 1055277 1318963 1319224 943 # chain 936: length 1 score 745 1055614 1055820 1319561 1319767 745 # chain 937: length 1 score 1065 1056041 1056336 1319988 1320283 1065 # chain 938: length 2 score 1658 1062010 1062268 1325959 1326217 932 1062270 1062472 1326219 1326421 730 # chain 939: length 1 score 1321 1062766 1063132 1326715 1327081 1321 # chain 940: length 1 score 1450 1065120 1065522 1329067 1329469 1450 # chain 941: length 1 score 748 1066521 1066728 1330468 1330675 748 # chain 942: length 1 score 741 1068256 1068461 1393625 1393830 741 # chain 943: length 1 score 781 1070073 1070289 1395442 1395658 781 # chain 944: length 1 score 982 1073596 1073868 1398965 1399237 982 # chain 945: length 1 score 763 1075019 1075230 1400388 1400599 763 # chain 946: length 1 score 1602 1078198 1078642 1403567 1404011 1602 # chain 947: length 2 score 3660 1080889 1081661 1408390 1409162 2782 1081663 1081907 1409164 1409408 882 # chain 948: length 1 score 1267 1083213 1083564 1410714 1411065 1267 # chain 949: length 2 score 3858 1084147 1084615 1411647 1412115 1688 1084617 1085220 1412117 1412720 2174 # chain 950: length 7 score 21507 1085337 1086089 1412837 1413589 2710 1086091 1086892 1413591 1414392 2887 1086894 1088334 1414394 1415834 5187 1088336 1088973 1415836 1416473 2296 1088975 1089198 1416475 1416698 806 1089200 1090692 1416700 1418192 5374 1090694 1091324 1418194 1418824 2271 # chain 951: length 1 score 1443 1091338 1091738 1418838 1419238 1443 # chain 952: length 1 score 2098 1091740 1092322 1419240 1419822 2098 # chain 953: length 1 score 867 1092582 1092822 1420082 1420322 867 # chain 954: length 1 score 1134 1093020 1093334 1420520 1420834 1134 # chain 955: length 1 score 774 1094725 1094939 1452708 1452922 774 # chain 956: length 1 score 792 1095905 1096124 1453888 1454107 792 # chain 957: length 1 score 882 4505653 4505897 1465417 1465661 882 # chain 958: length 1 score 1288 4505889 4506246 1468103 1468460 1288 # chain 959: length 1 score 828 4506249 4506478 1479490 1479719 828 # chain 960: length 1 score 1058 1097354 1097647 1542356 1542649 1058 # chain 961: length 1 score 1054 1098625 1098917 1543627 1543919 1054 # chain 962: length 1 score 730 1099210 1099412 1544212 1544414 730 # chain 963: length 1 score 820 1099457 1099684 1544459 1544686 820 # chain 964: length 2 score 2015 1100764 1101034 1545766 1546036 975 1101045 1101339 1546047 1546341 1062 # chain 965: length 1 score 1137 1101674 1101989 1546676 1546991 1137 # chain 966: length 2 score 1889 1102092 1102363 1547094 1547365 979 1102365 1102618 1547367 1547620 914 # chain 967: length 2 score 2335 1103104 1103471 1548106 1548473 1324 1103473 1103754 1548475 1548756 1015 # chain 968: length 1 score 1584 1104258 1104697 1549263 1549702 1584 # chain 969: length 1 score 1058 1104825 1105118 1549830 1550123 1058 # chain 970: length 1 score 1339 1105264 1105635 1550269 1550640 1339 # chain 971: length 1 score 1044 1107124 1107413 1552129 1552418 1044 # chain 972: length 1 score 1393 1108271 1108657 1553275 1553661 1393 # chain 973: length 1 score 878 1108681 1108924 1553685 1553928 878 # chain 974: length 2 score 2191 1109346 1109632 1554350 1554636 1033 1109634 1109956 1554638 1554960 1162 # chain 975: length 1 score 1152 1110421 1110740 1555425 1555744 1152 # chain 976: length 1 score 1890 1113150 1113674 1558154 1558678 1890 # chain 977: length 1 score 795 1114033 1114253 1559037 1559257 795 # chain 978: length 1 score 1494 1114604 1115018 1559608 1560022 1494 # chain 979: length 1 score 1893 1115539 1116064 1560543 1561068 1893 # chain 980: length 1 score 1357 1117589 1117965 1562593 1562969 1357 # chain 981: length 1 score 1069 1118292 1118588 1563296 1563592 1069 # chain 982: length 1 score 871 1118709 1118950 1563713 1563954 871 # chain 983: length 1 score 828 1119159 1119388 1564163 1564392 828 # chain 984: length 2 score 1932 1119723 1119947 1564727 1564951 810 1119949 1120261 1564953 1565265 1126 # chain 985: length 1 score 745 1120588 1120794 1565595 1565801 745 # chain 986: length 3 score 3429 1122359 1122620 1567366 1567627 943 1122622 1123084 1567629 1568091 1666 1123086 1123315 1568093 1568322 828 # chain 987: length 1 score 993 1123562 1123837 1568569 1568844 993 # chain 988: length 3 score 3601 1124397 1124875 1569404 1569882 1724 1124877 1125079 1569884 1570086 730 1125081 1125401 1570088 1570408 1155 # chain 989: length 1 score 802 1126416 1126638 1571423 1571645 802 # chain 990: length 1 score 1918 1126972 1127504 1571979 1572511 1918 # chain 991: length 1 score 1015 1130129 1130410 1575136 1575417 1015 # chain 992: length 1 score 1216 1130432 1130769 1575439 1575776 1216 # chain 993: length 1 score 990 1130915 1131189 1575922 1576196 990 # chain 994: length 1 score 1000 1131307 1131584 1576314 1576591 1000 # chain 995: length 1 score 1072 1131710 1132007 1576717 1577014 1072 # chain 996: length 1 score 741 1132639 1132844 1577643 1577848 741 # chain 997: length 1 score 964 1133931 1134198 1578901 1579168 964 # chain 998: length 1 score 860 1134305 1134543 1579275 1579513 860 # chain 999: length 1 score 1000 1134765 1135042 1579735 1580012 1000 # chain 1000: length 2 score 1929 1135209 1135533 1580179 1580503 1170 1135535 1135746 1580505 1580716 763 # chain 1001: length 1 score 720 1138152 1138351 1583122 1583321 720 # chain 1002: length 1 score 878 1141656 1141899 1586625 1586868 878 # chain 1003: length 2 score 2677 1141974 1142422 1586943 1587391 1616 1142424 1142719 1587393 1587688 1065 # chain 1004: length 1 score 4698 1142772 1144076 1587741 1589045 4698 # chain 1005: length 1 score 1368 1144231 1144610 1589200 1589579 1368 # chain 1006: length 2 score 3145 1145893 1146095 1590851 1591053 730 1146097 1146768 1591055 1591726 2419 # chain 1007: length 1 score 846 1147425 1147659 1592383 1592617 846 # chain 1008: length 2 score 3980 1147661 1148426 1592619 1593384 2757 1148428 1148768 1593386 1593726 1227 # chain 1009: length 1 score 990 1148860 1149134 1593818 1594092 990 # chain 1010: length 1 score 752 1149679 1149887 1594637 1594845 752 # chain 1011: length 3 score 5682 1150045 1150495 1595003 1595453 1623 1150497 1150934 1595455 1595892 1576 1150936 1151627 1595894 1596585 2491 # chain 1012: length 1 score 903 1151758 1152008 1596716 1596966 903 # chain 1013: length 1 score 1076 1152010 1152308 1596968 1597266 1076 # chain 1014: length 1 score 1015 1154189 1154470 1599147 1599428 1015 # chain 1015: length 1 score 979 1154963 1155234 1599921 1600192 979 # chain 1016: length 1 score 849 1155446 1155681 1600404 1600639 849 # chain 1017: length 1 score 907 1155893 1156144 1600851 1601102 907 # chain 1018: length 2 score 4337 1156829 1157332 1601788 1602291 1814 1157334 1158035 1602293 1602994 2527 # chain 1019: length 1 score 1087 1158102 1158403 1603061 1603362 1087 # chain 1020: length 1 score 792 1158405 1158624 1603364 1603583 792 # chain 1021: length 1 score 3564 1158834 1159823 1603793 1604782 3564 # chain 1022: length 1 score 914 1160058 1160311 1605017 1605270 914 # chain 1023: length 1 score 1285 1160313 1160669 1605272 1605628 1285 # chain 1024: length 1 score 1116 1161060 1161369 1606039 1606348 1116 # chain 1025: length 1 score 2404 1161617 1162284 1606596 1607263 2404 # chain 1026: length 1 score 784 1162328 1162545 1607307 1607524 784 # chain 1027: length 2 score 2339 1162766 1163050 1607745 1608029 1026 1163052 1163417 1608031 1608396 1317 # chain 1028: length 1 score 774 1164290 1164504 1609269 1609483 774 # chain 1029: length 1 score 748 1165119 1165326 1610099 1610306 748 # chain 1030: length 1 score 817 1166429 1166655 1611409 1611635 817 # chain 1031: length 1 score 828 1167097 1167326 1612094 1612323 828 # chain 1032: length 2 score 4509 1167728 1168624 1612725 1613621 3229 1168633 1168993 1613631 1613991 1299 # chain 1033: length 1 score 1245 1169409 1169754 1614407 1614752 1245 # chain 1034: length 1 score 914 1170137 1170390 1615135 1615388 914 # chain 1035: length 1 score 892 1170542 1170789 1615540 1615787 892 # chain 1036: length 1 score 975 1170869 1171139 1615867 1616137 975 # chain 1037: length 1 score 831 1171339 1171569 1616337 1616567 831 # chain 1038: length 1 score 752 1174014 1174222 1619012 1619220 752 # chain 1039: length 1 score 2145 1174295 1174890 1619293 1619888 2145 # chain 1040: length 1 score 979 1177067 1177338 1622065 1622336 979 # chain 1041: length 1 score 1069 1177649 1177945 1622647 1622943 1069 # chain 1042: length 1 score 1983 1178544 1179094 1623542 1624092 1983 # chain 1043: length 1 score 1299 1181855 1182215 1625567 1625927 1299 # chain 1044: length 1 score 1249 1182373 1182719 1626085 1626431 1249 # chain 1045: length 2 score 1547 2066961 2067174 1670009 1670222 770 2067176 2067392 1670224 1670440 781 # chain 1046: length 2 score 1547 1465932 1466145 1670009 1670222 770 1466147 1466363 1670224 1670440 781 # chain 1047: length 2 score 1543 2994382 2994594 1670010 1670222 766 2994596 2994812 1670224 1670440 781 # chain 1048: length 1 score 889 2067795 2068041 1670843 1671089 889 # chain 1049: length 2 score 1669 1466766 1467012 1670843 1671089 889 1467014 1467231 1671091 1671308 784 # chain 1050: length 2 score 1669 2995215 2995461 1670843 1671089 889 2995463 2995680 1671091 1671308 784 # chain 1051: length 1 score 1591 1183589 1184030 1674604 1675045 1591 # chain 1052: length 1 score 3420 1184592 1185541 1675607 1676556 3420 # chain 1053: length 1 score 1357 1186128 1186504 1677143 1677519 1357 # chain 1054: length 1 score 774 1187317 1187531 1678332 1678546 774 # chain 1055: length 1 score 1033 1188196 1188482 1694671 1694957 1033 # chain 1056: length 1 score 1782 1188520 1189014 1694995 1695489 1782 # chain 1057: length 1 score 795 1190190 1190410 1696665 1696885 795 # chain 1058: length 1 score 774 1190490 1190704 1696965 1697179 774 # chain 1059: length 1 score 1540 1191000 1191427 1697475 1697902 1540 # chain 1060: length 1 score 1126 1191581 1191893 1698056 1698368 1126 # chain 1061: length 2 score 2602 1192367 1192596 1698842 1699071 828 1192607 1193105 1699082 1699580 1796 # chain 1062: length 1 score 1839 1194097 1194607 1700572 1701082 1839 # chain 1063: length 1 score 972 565716 565985 1704987 1705256 972 # chain 1064: length 1 score 799 567536 567757 1705546 1705767 799 # chain 1065: length 1 score 2570 568108 568821 1706108 1706821 2570 # chain 1066: length 1 score 1033 568871 569157 1706871 1707157 1033 # chain 1067: length 1 score 774 569159 569373 1707159 1707373 774 # chain 1068: length 1 score 770 578659 578872 1712660 1712873 770 # chain 1069: length 1 score 1904 579034 579562 1713035 1713563 1904 # chain 1070: length 1 score 1123 580371 580682 1714372 1714683 1123 # chain 1071: length 2 score 1997 581384 581668 1743635 1743919 1026 581670 581940 1743921 1744191 975 # chain 1072: length 1 score 2314 584218 584860 1749285 1749927 2314 # chain 1073: length 2 score 2140 1223501 1223728 1753170 1753397 820 1223730 1224097 1753399 1753766 1324 # chain 1074: length 1 score 1112 1224276 1224584 1753945 1754253 1112 # chain 1075: length 1 score 892 1224724 1224971 1754393 1754640 892 # chain 1076: length 1 score 1728 1225028 1225507 1754697 1755176 1728 # chain 1077: length 1 score 925 1225637 1225893 1755306 1755562 925 # chain 1078: length 1 score 817 1226447 1226673 1756116 1756342 817 # chain 1079: length 1 score 1803 1226859 1227359 1756528 1757028 1803 # chain 1080: length 1 score 1605 1227866 1228311 1757535 1757980 1605 # chain 1081: length 1 score 784 1229087 1229304 1758756 1758973 784 # chain 1082: length 2 score 2144 1230079 1230469 1759748 1760138 1407 1230471 1230676 1760140 1760345 741 # chain 1083: length 1 score 806 1232248 1232471 1761917 1762140 806 # chain 1084: length 1 score 752 1232606 1232814 1762275 1762483 752 # chain 1085: length 2 score 1867 1232921 1233214 1762590 1762883 1058 1233216 1233441 1762885 1763110 813 # chain 1086: length 1 score 835 1233845 1234076 1763514 1763745 835 # chain 1087: length 1 score 1144 1234072 1234389 1763742 1764059 1144 # chain 1088: length 1 score 766 1234682 1234894 1764352 1764564 766 # chain 1089: length 1 score 1119 1235295 1235605 1764965 1765275 1119 # chain 1090: length 1 score 1915 1235979 1236510 1765649 1766180 1915 # chain 1091: length 1 score 2008 1236747 1237304 1766450 1767007 2008 # chain 1092: length 1 score 1216 1237399 1237736 1767102 1767439 1216 # chain 1093: length 1 score 928 1237918 1238175 1767621 1767878 928 # chain 1094: length 1 score 849 1239867 1240102 1769576 1769811 849 # chain 1095: length 1 score 1281 1242327 1242682 1772037 1772392 1281 # chain 1096: length 1 score 1231 1243274 1243615 1774297 1774638 1231 # chain 1097: length 1 score 928 1243647 1243904 1774670 1774927 928 # chain 1098: length 1 score 1281 1244959 1245314 1782097 1782452 1281 # chain 1099: length 1 score 741 1247120 1247325 1784245 1784450 741 # chain 1100: length 1 score 784 1248014 1248231 1785139 1785356 784 # chain 1101: length 1 score 2725 1249651 1250407 1786776 1787532 2725 # chain 1102: length 1 score 871 1253751 1253992 1787740 1787981 871 # chain 1103: length 1 score 774 1254762 1254976 1788751 1788965 774 # chain 1104: length 1 score 1468 1255802 1256209 1789866 1790273 1468 # chain 1105: length 2 score 2147 1256241 1256512 1790305 1790576 979 1256522 1256851 1790586 1790915 1188 # chain 1106: length 1 score 802 1257015 1257237 1791079 1791301 802 # chain 1107: length 2 score 2789 1257611 1257936 1791675 1792000 1173 1257938 1258387 1792002 1792451 1620 # chain 1108: length 1 score 1051 1258476 1258767 1792540 1792831 1051 # chain 1109: length 1 score 1044 1259433 1259722 1793497 1793786 1044 # chain 1110: length 1 score 1987 1259787 1260338 1793851 1794402 1987 # chain 1111: length 1 score 1512 1260493 1260912 1794557 1794976 1512 # chain 1112: length 1 score 1918 1261084 1261616 1795148 1795680 1918 # chain 1113: length 2 score 2973 1261948 1262344 1796012 1796408 1429 1262346 1262775 1796410 1796839 1548 # chain 1114: length 2 score 3797 1263548 1264381 1797612 1798445 3002 1264383 1264604 1798447 1798668 799 # chain 1115: length 1 score 946 1264789 1265051 1798853 1799115 946 # chain 1116: length 1 score 2188 1265092 1265699 1799156 1799763 2188 # chain 1117: length 1 score 1094 1265755 1266058 1799819 1800122 1094 # chain 1118: length 1 score 849 1266060 1266295 1800124 1800359 849 # chain 1119: length 1 score 860 1266477 1266715 1800541 1800779 860 # chain 1120: length 1 score 1454 1266773 1267176 1800837 1801240 1454 # chain 1121: length 1 score 1346 1267516 1267889 1801580 1801953 1346 # chain 1122: length 1 score 1094 1268797 1269100 1802861 1803164 1094 # chain 1123: length 1 score 1000 1268823 1269100 1803416 1803693 1000 # chain 1124: length 1 score 831 1269947 1270177 1804001 1804231 831 # chain 1125: length 1 score 1306 1270815 1271177 1804869 1805231 1306 # chain 1126: length 1 score 770 1271365 1271578 1805419 1805632 770 # chain 1127: length 1 score 986 1272700 1272973 1806757 1807030 986 # chain 1128: length 2 score 2000 1274609 1274904 1808667 1808962 1065 1274906 1275166 1808964 1809224 939 # chain 1129: length 1 score 1206 1275375 1275709 1809433 1809767 1206 # chain 1130: length 1 score 993 1275986 1276261 1810044 1810319 993 # chain 1131: length 1 score 1177 1276656 1276982 1810714 1811040 1177 # chain 1132: length 1 score 1134 1277047 1277361 1811105 1811419 1134 # chain 1133: length 1 score 1000 1278013 1278290 1812071 1812348 1000 # chain 1134: length 1 score 2286 1278921 1279555 1812856 1813490 2286 # chain 1135: length 1 score 2998 1280043 1280875 1813978 1814810 2998 # chain 1136: length 1 score 1173 1281324 1281649 1815259 1815584 1173 # chain 1137: length 1 score 1839 1281822 1282332 1815757 1816267 1839 # chain 1138: length 1 score 795 1282500 1282720 1816435 1816655 795 # chain 1139: length 1 score 1616 1283051 1283499 1816986 1817434 1616 # chain 1140: length 1 score 2034 1284041 1284605 1817976 1818540 2034 # chain 1141: length 1 score 849 1285008 1285243 1818943 1819178 849 # chain 1142: length 1 score 936 1286759 1287018 1820516 1820775 936 # chain 1143: length 1 score 756 1287649 1287858 1821406 1821615 756 # chain 1144: length 1 score 1508 1288191 1288609 1821948 1822366 1508 # chain 1145: length 2 score 2360 1289330 1289537 1823087 1823294 748 1289539 1289987 1823296 1823744 1616 # chain 1146: length 1 score 1047 1290220 1290510 1823977 1824267 1047 # chain 1147: length 1 score 1335 1290604 1290974 1824361 1824731 1335 # chain 1148: length 1 score 914 1291441 1291694 1825198 1825451 914 # chain 1149: length 1 score 1422 1291924 1292318 1825681 1826075 1422 # chain 1150: length 2 score 2162 1292658 1292978 1826414 1826734 1155 1292980 1293260 1826736 1827016 1011 # chain 1151: length 2 score 1644 1295001 1295224 1827756 1827979 806 1295226 1295459 1827981 1828214 842 # chain 1152: length 1 score 1832 1295566 1296074 1828321 1828829 1832 # chain 1153: length 1 score 849 1296256 1296491 1829011 1829246 849 # chain 1154: length 1 score 1598 1296988 1297431 1829743 1830186 1598 # chain 1155: length 1 score 730 1297629 1297831 1830384 1830586 730 # chain 1156: length 1 score 1130 1298187 1298500 1830942 1831255 1130 # chain 1157: length 1 score 838 1299091 1299323 1831847 1832079 838 # chain 1158: length 1 score 975 1300304 1300574 1833060 1833330 975 # chain 1159: length 1 score 770 1300836 1301049 1833592 1833805 770 # chain 1160: length 1 score 738 1301774 1301978 1834530 1834734 738 # chain 1161: length 2 score 2515 1304012 1304214 1836768 1836970 730 1304216 1304712 1836972 1837468 1789 # chain 1162: length 2 score 2342 1306115 1306392 1838871 1839148 1000 1306394 1306767 1839150 1839523 1346 # chain 1163: length 1 score 1234 1307080 1307422 1839837 1840179 1234 # chain 1164: length 1 score 1422 1307526 1307920 1840283 1840677 1422 # chain 1165: length 1 score 1317 1308592 1308957 1841350 1841715 1317 # chain 1166: length 1 score 936 1309002 1309261 1841761 1842020 936 # chain 1167: length 1 score 864 1309694 1309933 1842453 1842692 864 # chain 1168: length 2 score 2523 1309959 1310355 1842718 1843114 1429 1310357 1310661 1843116 1843420 1098 # chain 1169: length 1 score 1072 1310861 1311158 1843620 1843917 1072 # chain 1170: length 1 score 2160 1311220 1311819 1843979 1844578 2160 # chain 1171: length 1 score 975 1311945 1312215 1844704 1844974 975 # chain 1172: length 1 score 928 1654122 1654379 2273590 2273847 928 # chain 1173: length 1 score 1087 1654543 1654844 2274011 2274312 1087 # chain 1174: length 1 score 946 1655023 1655285 2274491 2274753 946 # chain 1175: length 1 score 763 1656596 1656807 2276064 2276275 763 # chain 1176: length 1 score 835 1656920 1657151 2276388 2276619 835 # chain 1177: length 1 score 1076 1657520 1657818 2276988 2277286 1076 # chain 1178: length 1 score 1519 1658870 1659291 2278338 2278759 1519 # chain 1179: length 1 score 990 1659463 1659737 2278931 2279205 990 # chain 1180: length 2 score 1716 1659803 1660033 2279271 2279501 831 1660035 1660281 2279503 2279749 889 # chain 1181: length 1 score 795 1660433 1660653 2279901 2280121 795 # chain 1182: length 1 score 1846 1661139 1661651 2280607 2281119 1846 # chain 1183: length 1 score 734 1662613 1662816 2282081 2282284 734 # chain 1184: length 2 score 2116 1663623 1663962 2283090 2283429 1224 1663964 1664212 2283431 2283679 896 # chain 1185: length 1 score 1922 1664890 1665423 2284357 2284890 1922 # chain 1186: length 3 score 3306 1666224 1666464 2285691 2285931 867 1666466 1666766 2285933 2286233 1083 1666768 1667146 2286235 2286613 1364 # chain 1187: length 1 score 1137 1667359 1667674 2286826 2287141 1137 # chain 1188: length 2 score 2018 1668458 1668758 2287925 2288225 1083 1668760 1669020 2288227 2288487 939 # chain 1189: length 1 score 759 1669621 1669831 2289088 2289298 759 # chain 1190: length 2 score 2483 1670319 1670539 2289786 2290006 795 1670541 1671010 2290008 2290477 1692 # chain 1191: length 1 score 997 1672979 1673255 2292446 2292722 997 # chain 1192: length 1 score 752 1674007 1674215 2293474 2293682 752 # chain 1193: length 1 score 1004 1674316 1674594 2293783 2294061 1004 # chain 1194: length 2 score 1723 1674995 1675266 2294462 2294733 979 1675268 1675475 2294735 2294942 748 # chain 1195: length 1 score 1130 1675523 1675836 2294990 2295303 1130 # chain 1196: length 1 score 1828 1675988 1676495 2295455 2295962 1828 # chain 1197: length 1 score 1746 1676681 1677165 2296148 2296632 1746 # chain 1198: length 1 score 2570 1677410 1678123 2296877 2297590 2570 # chain 1199: length 1 score 946 1678591 1678853 2298058 2298320 946 # chain 1200: length 2 score 4981 1678873 1679604 2298340 2299071 2635 1679606 1680258 2299073 2299725 2350 # chain 1201: length 1 score 936 1681229 1681488 2300696 2300955 936 # chain 1202: length 1 score 1069 1681529 1681825 2300996 2301292 1069 # chain 1203: length 1 score 1076 1681904 1682202 2301371 2301669 1076 # chain 1204: length 1 score 795 1682552 1682772 2302020 2302240 795 # chain 1205: length 2 score 3369 1683086 1683345 2302554 2302813 936 1683347 1684023 2302815 2303491 2437 # chain 1206: length 1 score 997 1684690 1684966 2304158 2304434 997 # chain 1207: length 1 score 1461 1685041 1685446 2304509 2304914 1461 # chain 1208: length 1 score 2599 1685588 1686309 2305056 2305777 2599 # chain 1209: length 1 score 1242 1686565 1686909 2306033 2306377 1242 # chain 1210: length 1 score 1087 1686911 1687212 2306379 2306680 1087 # chain 1211: length 2 score 1638 1687553 1687752 2307021 2307220 720 1687757 1688014 2307225 2307482 928 # chain 1212: length 1 score 720 1688577 1688776 2308045 2308244 720 # chain 1213: length 1 score 745 1689575 1689781 2308862 2309068 745 # chain 1214: length 1 score 986 1690810 1691083 2310096 2310369 986 # chain 1215: length 2 score 1604 1691787 1691987 2311073 2311273 723 1691989 1692234 2311275 2311520 885 # chain 1216: length 1 score 1054 1692392 1692684 2311678 2311970 1054 # chain 1217: length 1 score 723 1693703 1693903 2312991 2313191 723 # chain 1218: length 1 score 781 1694957 1695173 2314245 2314461 781 # chain 1219: length 1 score 2116 1695543 1696130 2314839 2315426 2116 # chain 1220: length 1 score 741 1696602 1696807 2315898 2316103 741 # chain 1221: length 2 score 1712 1697022 1697225 2316318 2316521 734 1697227 1697499 2316523 2316795 982 # chain 1222: length 1 score 903 1698776 1699026 2318072 2318322 903 # chain 1223: length 1 score 1188 1700150 1700479 2319446 2319775 1188 # chain 1224: length 1 score 828 1701538 1701767 2320836 2321065 828 # chain 1225: length 1 score 1242 1702836 1703180 2322135 2322479 1242 # chain 1226: length 2 score 1442 1703690 1703890 2322989 2323189 723 1703892 1704092 2323191 2323391 723 # chain 1227: length 1 score 1357 1704678 1705054 2323977 2324353 1357 # chain 1228: length 1 score 817 1705074 1705300 2324373 2324599 817 # chain 1229: length 1 score 943 1706333 1706594 2325632 2325893 943 # chain 1230: length 1 score 838 1707144 1707376 2326443 2326675 838 # chain 1231: length 3 score 3673 1707660 1707933 2326959 2327232 986 1707935 1708357 2327234 2327656 1522 1708359 1708684 2327658 2327983 1173 # chain 1232: length 1 score 925 1708950 1709206 2328249 2328505 925 # chain 1233: length 1 score 1026 1709208 1709492 2328507 2328791 1026 # chain 1234: length 1 score 1090 1710050 1710352 2329349 2329651 1090 # chain 1235: length 2 score 3475 1710738 1711294 2330037 2330593 2005 1711302 1711714 2330601 2331013 1486 # chain 1236: length 1 score 1465 1712016 1712422 2331315 2331721 1465 # chain 1237: length 1 score 1425 1713608 1714003 2332907 2333302 1425 # chain 1238: length 1 score 1432 1714161 1714558 2333460 2333857 1432 # chain 1239: length 2 score 2242 1714647 1714930 2333946 2334229 1022 1714932 1715271 2334231 2334570 1224 # chain 1240: length 1 score 997 1715774 1716050 2335074 2335350 997 # chain 1241: length 1 score 720 1716622 1716821 2335922 2336121 720 # chain 1242: length 1 score 748 1717659 1717866 2336958 2337165 748 # chain 1243: length 1 score 792 1718229 1718448 2337529 2337748 792 # chain 1244: length 1 score 1742 1718507 1718990 2337807 2338290 1742 # chain 1245: length 1 score 1472 1719135 1719543 2338435 2338843 1472 # chain 1246: length 1 score 763 1719809 1720020 2339109 2339320 763 # chain 1247: length 1 score 849 1720375 1720610 2339675 2339910 849 # chain 1248: length 1 score 1022 1720675 1720958 2339975 2340258 1022 # chain 1249: length 1 score 1609 1722052 1722498 2341352 2341798 1609 # chain 1250: length 1 score 752 1722659 1722867 2341959 2342167 752 # chain 1251: length 1 score 860 1723992 1724230 2343292 2343530 860 # chain 1252: length 1 score 1119 1725414 1725724 2344714 2345024 1119 # chain 1253: length 1 score 738 1725897 1726101 2345197 2345401 738 # chain 1254: length 1 score 720 1726742 1726941 2346042 2346241 720 # chain 1255: length 1 score 842 1729774 1730007 2349074 2349307 842 # chain 1256: length 1 score 784 1730296 1730513 2349596 2349813 784 # chain 1257: length 1 score 896 1730624 1730872 2349924 2350172 896 # chain 1258: length 1 score 774 1731031 1731245 2350331 2350545 774 # chain 1259: length 1 score 723 1731451 1731651 2350751 2350951 723 # chain 1260: length 1 score 1166 1731943 1732266 2351243 2351566 1166 # chain 1261: length 1 score 1065 1732443 1732738 2351744 2352039 1065 # chain 1262: length 1 score 810 1733244 1733468 2352545 2352769 810 # chain 1263: length 1 score 838 1733494 1733726 2352795 2353027 838 # chain 1264: length 2 score 5370 1734492 1735508 2353777 2354793 3661 1735510 1735985 2354795 2355270 1713 # chain 1265: length 1 score 1368 1736821 1737200 2356106 2356485 1368 # chain 1266: length 1 score 1216 1737301 1737638 2356586 2356923 1216 # chain 1267: length 1 score 1627 1737679 1738130 2356964 2357415 1627 # chain 1268: length 1 score 1033 1738573 1738859 2357858 2358144 1033 # chain 1269: length 2 score 2465 1739051 1739291 2358336 2358576 867 1739293 1739737 2358578 2359022 1602 # chain 1270: length 1 score 896 1739937 1740185 2359222 2359470 896 # chain 1271: length 1 score 882 1742227 1742471 2361514 2361758 882 # chain 1272: length 1 score 774 1743603 1743817 2362890 2363104 774 # chain 1273: length 2 score 1824 1744113 1744317 2363400 2363604 738 1744319 1744621 2363606 2363908 1090 # chain 1274: length 1 score 781 1745169 1745385 2364456 2364672 781 # chain 1275: length 1 score 918 1746131 1746385 2365418 2365672 918 # chain 1276: length 1 score 1162 1746573 1746895 2365860 2366182 1162 # chain 1277: length 1 score 835 1747337 1747568 2366624 2366855 835 # chain 1278: length 1 score 824 1748232 1748460 2367519 2367747 824 # chain 1279: length 1 score 1278 1748853 1749207 2368140 2368494 1278 # chain 1280: length 1 score 738 1749248 1749452 2368535 2368739 738 # chain 1281: length 1 score 730 1749626 1749828 2368913 2369115 730 # chain 1282: length 1 score 1018 1750229 1750511 2369516 2369798 1018 # chain 1283: length 1 score 752 1750757 1750965 2370044 2370252 752 # chain 1284: length 1 score 817 1751171 1751397 2370458 2370684 817 # chain 1285: length 1 score 1440 1751450 1751849 2370737 2371136 1440 # chain 1286: length 2 score 2130 1752037 1752332 2371324 2371619 1065 1752334 1752630 2371621 2371917 1069 # chain 1287: length 1 score 1260 1752938 1753287 2372226 2372575 1260 # chain 1288: length 1 score 2307 1753361 1754001 2372649 2373289 2307 # chain 1289: length 1 score 2037 1754288 1754853 2373576 2374141 2037 # chain 1290: length 1 score 2700 1754978 1755727 2374266 2375015 2700 # chain 1291: length 1 score 741 1757894 1758099 2377181 2377386 741 # chain 1292: length 1 score 727 1758817 1759018 2378104 2378305 727 # chain 1293: length 1 score 1292 1759643 1760001 2378930 2379288 1292 # chain 1294: length 1 score 1022 1760024 1760307 2379311 2379594 1022 # chain 1295: length 1 score 1011 1760888 1761168 2380175 2380455 1011 # chain 1296: length 1 score 770 1761426 1761639 2380713 2380926 770 # chain 1297: length 1 score 1872 1761758 1762277 2381045 2381564 1872 # chain 1298: length 1 score 853 1763063 1763299 2382351 2382587 853 # chain 1299: length 2 score 3080 1763817 1764167 2383105 2383455 1263 1764169 1764674 2383457 2383962 1821 # chain 1300: length 1 score 1821 1764787 1765292 2384075 2384580 1821 # chain 1301: length 1 score 2336 1766897 1767545 2386185 2386833 2336 # chain 1302: length 1 score 1976 1768193 1768741 2387481 2388029 1976 # chain 1303: length 1 score 2869 1769209 1770005 2388497 2389293 2869 # chain 1304: length 1 score 3726 1770027 1771061 2389315 2390349 3726 # chain 1305: length 1 score 1162 1776510 1776832 2395800 2396122 1162 # chain 1306: length 1 score 1400 1777391 1777779 2396686 2397074 1400 # chain 1307: length 1 score 853 1778340 1778576 2397635 2397871 853 # chain 1308: length 1 score 1058 1779198 1779491 2398493 2398786 1058 # chain 1309: length 1 score 889 1779895 1780141 2399190 2399436 889 # chain 1310: length 1 score 838 1780820 1781052 2400115 2400347 838 # chain 1311: length 2 score 1665 1781990 1782237 2401285 2401532 892 1782239 1782454 2401534 2401749 777 # chain 1312: length 1 score 925 1783349 1783605 2402644 2402900 925 # chain 1313: length 2 score 2558 1784312 1784529 2403607 2403824 784 1784531 1785024 2403826 2404319 1778 # chain 1314: length 1 score 1339 1785293 1785664 2404588 2404959 1339 # chain 1315: length 2 score 2950 1785987 1786594 2405282 2405889 2188 1786596 1786808 2405891 2406103 766 # chain 1316: length 1 score 1522 1786974 1787396 2406269 2406691 1522 # chain 1317: length 1 score 1846 1787564 1788076 2406859 2407371 1846 # chain 1318: length 1 score 921 1789601 1789856 2408896 2409151 921 # chain 1319: length 1 score 925 1789985 1790241 2409280 2409536 925 # chain 1320: length 3 score 2261 1790516 1790720 2409811 2410015 738 1790722 1790924 2410017 2410219 730 1790932 1791157 2410227 2410452 813 # chain 1321: length 1 score 720 1791358 1791557 2410653 2410852 720 # chain 1322: length 1 score 856 1792805 1793042 2412100 2412337 856 # chain 1323: length 2 score 3729 1793280 1793651 2412576 2412947 1339 1793653 1794317 2412949 2413613 2394 # chain 1324: length 1 score 824 1794961 1795189 2414257 2414485 824 # chain 1325: length 1 score 763 1795191 1795402 2414487 2414698 763 # chain 1326: length 1 score 810 1795903 1796127 2415199 2415423 810 # chain 1327: length 2 score 2170 1796193 1796481 2415489 2415777 1040 1796483 1796797 2415779 2416093 1134 # chain 1328: length 2 score 5856 1797149 1797739 2416444 2417034 2127 1797741 1798777 2417036 2418072 3733 # chain 1329: length 1 score 990 1799635 1799909 2418930 2419204 990 # chain 1330: length 1 score 2296 1799911 1800548 2419206 2419843 2296 # chain 1331: length 1 score 1130 1800565 1800878 2419860 2420173 1130 # chain 1332: length 1 score 997 1803089 1803365 2422385 2422661 997 # chain 1333: length 1 score 1033 1803598 1803884 2422894 2423180 1033 # chain 1334: length 2 score 3087 1804006 1804223 2423302 2423519 784 1804225 1804865 2423521 2424161 2307 # chain 1335: length 1 score 1292 1805161 1805519 2424457 2424815 1292 # chain 1336: length 2 score 2202 1805573 1805940 2424869 2425236 1324 1805942 1806186 2425238 2425482 882 # chain 1337: length 1 score 2113 1807310 1807896 2426606 2427192 2113 # chain 1338: length 1 score 1054 1808117 1808409 2427413 2427705 1054 # chain 1339: length 1 score 1112 1808848 1809156 2428144 2428452 1112 # chain 1340: length 1 score 748 1809717 1809924 2429013 2429220 748 # chain 1341: length 1 score 2397 1810721 1811386 2430016 2430681 2397 # chain 1342: length 1 score 1126 1811496 1811808 2430791 2431103 1126 # chain 1343: length 1 score 759 1812044 1812254 2431339 2431549 759 # chain 1344: length 1 score 1108 1813444 1813751 2432739 2433046 1108 # chain 1345: length 2 score 1622 1815933 1816168 2435026 2435261 849 1816170 1816385 2435263 2435478 777 # chain 1346: length 1 score 1008 1816567 1816846 2435661 2435940 1008 # chain 1347: length 2 score 2997 1816883 1817128 2435977 2436222 885 1817130 1817717 2436224 2436811 2116 # chain 1348: length 1 score 1368 1818438 1818817 2437532 2437911 1368 # chain 1349: length 1 score 2624 1819078 1819806 2438172 2438900 2624 # chain 1350: length 1 score 734 1820086 1820289 2439181 2439384 734 # chain 1351: length 1 score 1094 1820347 1820650 2439442 2439745 1094 # chain 1352: length 1 score 860 1821080 1821318 2440175 2440413 860 # chain 1353: length 1 score 759 1821799 1822009 2440894 2441104 759 # chain 1354: length 1 score 1540 1822925 1823352 2442020 2442447 1540 # chain 1355: length 1 score 1407 1823455 1823845 2442550 2442940 1407 # chain 1356: length 1 score 871 1825441 1825682 2444536 2444777 871 # chain 1357: length 1 score 1126 1828148 1828460 2447243 2447555 1126 # chain 1358: length 1 score 784 1830179 1830396 2449274 2449491 784 # chain 1359: length 1 score 1166 1831039 1831362 2450134 2450457 1166 # chain 1360: length 1 score 1346 1833600 1833973 2452695 2453068 1346 # chain 1361: length 1 score 943 1835176 1835437 2454271 2454532 943 # chain 1362: length 1 score 1123 1837316 1837627 2456411 2456722 1123 # chain 1363: length 1 score 961 1839377 1839643 2458472 2458738 961 # chain 1364: length 1 score 1857 1840093 1840608 2459188 2459703 1857 # chain 1365: length 1 score 925 1840832 1841088 2459927 2460183 925 # chain 1366: length 1 score 1400 1841369 1841757 2460464 2460852 1400 # chain 1367: length 1 score 1299 1842024 1842384 2461119 2461479 1299 # chain 1368: length 1 score 813 1842790 1843015 2461885 2462110 813 # chain 1369: length 1 score 1065 1844112 1844407 2463207 2463502 1065 # chain 1370: length 1 score 1011 1844713 1844993 2463808 2464088 1011 # chain 1371: length 2 score 1551 1845727 1845938 2464822 2465033 763 1845940 1846159 2465035 2465254 792 # chain 1372: length 1 score 1076 1847856 1848154 2466951 2467249 1076 # chain 1373: length 1 score 1310 1848836 1849199 2468722 2469085 1310 # chain 1374: length 1 score 806 1849495 1849718 2469381 2469604 806 # chain 1375: length 1 score 1191 1850211 1850541 2470097 2470427 1191 # chain 1376: length 1 score 730 1850732 1850934 2470618 2470820 730 # chain 1377: length 1 score 1497 1850993 1851408 2470879 2471294 1497 # chain 1378: length 2 score 3022 1852529 1853020 2473729 2474220 1771 1853028 1853379 2474228 2474579 1267 # chain 1379: length 1 score 1011 1853852 1854132 2475052 2475332 1011 # chain 1380: length 1 score 1051 1854784 1855075 2475969 2476260 1051 # chain 1381: length 1 score 957 1856078 1856343 2477263 2477528 957 # chain 1382: length 1 score 766 1856413 1856625 2477598 2477810 766 # chain 1383: length 1 score 1447 1856711 1857112 2477896 2478297 1447 # chain 1384: length 3 score 4588 1857558 1858246 2478743 2479431 2480 1858248 1858551 2479433 2479736 1094 1858553 1858836 2479738 2480021 1022 # chain 1385: length 2 score 5079 1860370 1861509 2481555 2482694 4104 1861511 1861782 2482696 2482967 979 # chain 1386: length 1 score 997 1863334 1863610 2484522 2484798 997 # chain 1387: length 4 score 5912 1863926 1864222 2485114 2485410 1069 1864224 1864732 2485412 2485920 1832 1864734 1865340 2485922 2486528 2185 1865342 1865574 2486530 2486762 838 # chain 1388: length 1 score 882 1866380 1866624 2487568 2487812 882 # chain 1389: length 1 score 748 1866680 1866887 2487868 2488075 748 # chain 1390: length 1 score 925 1867227 1867483 2488415 2488671 925 # chain 1391: length 1 score 1152 1867593 1867912 2488781 2489100 1152 # chain 1392: length 1 score 1598 1868545 1868988 2489733 2490176 1598 # chain 1393: length 1 score 1627 1869317 1869768 2490505 2490956 1627 # chain 1394: length 1 score 1634 1869885 1870338 2491073 2491526 1634 # chain 1395: length 1 score 784 1870392 1870609 2491580 2491797 784 # chain 1396: length 1 score 720 1870868 1871067 2492056 2492255 720 # chain 1397: length 2 score 2569 1871297 1871667 2492485 2492855 1335 1871669 1872012 2492857 2493200 1238 # chain 1398: length 1 score 918 1872212 1872466 2493400 2493654 918 # chain 1399: length 1 score 896 1873361 1873609 2494549 2494797 896 # chain 1400: length 1 score 723 1874584 1874784 2495772 2495972 723 # chain 1401: length 1 score 878 1875329 1875572 2496517 2496760 878 # chain 1402: length 1 score 1054 1876026 1876318 2497214 2497506 1054 # chain 1403: length 1 score 1562 1877472 1877905 2498659 2499092 1562 # chain 1404: length 1 score 1724 1878716 1879194 2499903 2500381 1724 # chain 1405: length 2 score 3117 1879555 1880176 2500742 2501363 2239 1880178 1880422 2501365 2501609 882 # chain 1406: length 1 score 1152 1882198 1882517 2503610 2503929 1152 # chain 1407: length 1 score 817 1882790 1883016 2504202 2504428 817 # chain 1408: length 2 score 1976 1883198 1883502 2504610 2504914 1098 1883504 1883748 2504916 2505160 882 # chain 1409: length 1 score 1000 1885188 1885465 2506601 2506878 1000 # chain 1410: length 1 score 759 1885990 1886200 2507403 2507613 759 # chain 1411: length 1 score 838 1887393 1887625 2508806 2509038 838 # chain 1412: length 1 score 1375 1887654 1888035 2509067 2509448 1375 # chain 1413: length 1 score 777 1888341 1888556 2509754 2509969 777 # chain 1414: length 1 score 1400 1889085 1889473 2510498 2510886 1400 # chain 1415: length 2 score 1864 1890096 1890394 2511509 2511807 1076 1890396 1890615 2511809 2512028 792 # chain 1416: length 1 score 1018 1891089 1891371 2512502 2512784 1018 # chain 1417: length 1 score 1224 1892049 1892388 2513462 2513801 1224 # chain 1418: length 1 score 1152 1892542 1892861 2513955 2514274 1152 # chain 1419: length 1 score 1216 1893008 1893345 2514421 2514758 1216 # chain 1420: length 1 score 1036 1893700 1893987 2515113 2515400 1036 # chain 1421: length 2 score 2681 1894688 1895028 2516101 2516441 1227 1895030 1895434 2516443 2516847 1458 # chain 1422: length 1 score 813 1895450 1895675 2516863 2517088 813 # chain 1423: length 1 score 1792 1895677 1896174 2517090 2517587 1792 # chain 1424: length 1 score 1008 1896582 1896861 2517995 2518274 1008 # chain 1425: length 1 score 1702 1897197 1897669 2518610 2519082 1702 # chain 1426: length 1 score 2383 1897725 1898386 2519138 2519799 2383 # chain 1427: length 1 score 946 1898635 1898897 2520048 2520310 946 # chain 1428: length 1 score 3182 1898899 1899782 2520312 2521195 3182 # chain 1429: length 1 score 1130 1900050 1900363 2521465 2521778 1130 # chain 1430: length 1 score 903 1901084 1901334 2522499 2522749 903 # chain 1431: length 2 score 5967 1901591 1902258 2523006 2523673 2404 1902260 1903250 2523675 2524665 3567 # chain 1432: length 1 score 759 1903706 1903916 2525122 2525332 759 # chain 1433: length 1 score 838 1904451 1904683 2525867 2526099 838 # chain 1434: length 1 score 1026 1905090 1905374 2526506 2526790 1026 # chain 1435: length 1 score 1418 1905394 1905787 2526810 2527203 1418 # chain 1436: length 1 score 968 1906033 1906301 2527448 2527716 968 # chain 1437: length 1 score 1036 1906477 1906764 2527892 2528179 1036 # chain 1438: length 1 score 860 1907251 1907489 2528668 2528906 860 # chain 1439: length 1 score 1663 1907826 1908287 2529243 2529704 1663 # chain 1440: length 1 score 734 1909427 1909630 2530844 2531047 734 # chain 1441: length 2 score 3232 1909823 1910092 2531240 2531509 972 1910094 1910722 2531511 2532139 2264 # chain 1442: length 1 score 1022 1911155 1911438 2532572 2532855 1022 # chain 1443: length 1 score 1612 1911854 1912301 2533271 2533718 1612 # chain 1444: length 2 score 1957 1912475 1912707 2533892 2534124 838 1912709 1913020 2534126 2534437 1123 # chain 1445: length 1 score 1216 1913418 1913755 2534835 2535172 1216 # chain 1446: length 1 score 907 1914182 1914433 2535599 2535850 907 # chain 1447: length 1 score 745 1914518 1914724 2535935 2536141 745 # chain 1448: length 1 score 2142 1915040 1915634 2536457 2537051 2142 # chain 1449: length 1 score 730 1915716 1915918 2537133 2537335 730 # chain 1450: length 1 score 860 1916259 1916497 2537676 2537914 860 # chain 1451: length 1 score 1288 1919902 1920259 2541320 2541677 1288 # chain 1452: length 1 score 1872 1920774 1921293 2542192 2542711 1872 # chain 1453: length 1 score 828 1921956 1922185 2543374 2543603 828 # chain 1454: length 1 score 1256 1922734 1923082 2544152 2544500 1256 # chain 1455: length 1 score 1047 1923603 1923893 2545021 2545311 1047 # chain 1456: length 1 score 723 1924022 1924222 2545440 2545640 723 # chain 1457: length 1 score 756 1924256 1924465 2545674 2545883 756 # chain 1458: length 1 score 914 1925121 1925374 2546539 2546792 914 # chain 1459: length 1 score 1087 1925790 1926091 2547208 2547509 1087 # chain 1460: length 1 score 1461 1928392 1928797 2549811 2550216 1461 # chain 1461: length 1 score 1818 1928836 1929340 2550255 2550759 1818 # chain 1462: length 3 score 3857 1929708 1930092 2551127 2551511 1386 1930094 1930449 2551513 2551868 1281 1930451 1930783 2551870 2552202 1198 # chain 1463: length 1 score 1659 1931042 1931502 2552461 2552921 1659 # chain 1464: length 1 score 1238 1931504 1931847 2552923 2553266 1238 # chain 1465: length 1 score 1152 1931852 1932171 2553271 2553590 1152 # chain 1466: length 2 score 1568 1932814 1933017 2554233 2554436 734 1933019 1933251 2554438 2554670 838 # chain 1467: length 2 score 3268 1933394 1934088 2554813 2555507 2502 1934090 1934303 2555509 2555722 770 # chain 1468: length 1 score 723 1934591 1934791 2556010 2556210 723 # chain 1469: length 1 score 720 1935284 1935483 2556703 2556902 720 # chain 1470: length 2 score 3333 1935593 1936007 2557012 2557426 1494 1936009 1936520 2557428 2557939 1843 # chain 1471: length 3 score 5499 1936878 1937808 2558297 2559227 3351 1937810 1938056 2559229 2559475 889 1938058 1938409 2559477 2559828 1267 # chain 1472: length 1 score 784 1938547 1938764 2559966 2560183 784 # chain 1473: length 1 score 1627 1939078 1939529 2560497 2560948 1627 # chain 1474: length 1 score 792 1939546 1939765 2560965 2561184 792 # chain 1475: length 1 score 1062 1939957 1940251 2561376 2561670 1062 # chain 1476: length 1 score 925 1940740 1940996 2562159 2562415 925 # chain 1477: length 2 score 2731 1942544 1943027 2564062 2564545 1742 1943029 1943304 2564547 2564822 993 # chain 1478: length 1 score 1324 1943422 1943789 2564940 2565307 1324 # chain 1479: length 1 score 1033 1943791 1944077 2565309 2565595 1033 # chain 1480: length 2 score 1770 1944316 1944535 2565834 2566053 792 1944537 1944809 2566055 2566327 982 # chain 1481: length 1 score 1652 1945299 1945757 2566817 2567275 1652 # chain 1482: length 3 score 2764 1946023 1946328 2567541 2567846 1101 1946330 1946559 2567848 2568077 828 1946564 1946799 2568082 2568317 849 # chain 1483: length 1 score 1209 1946827 1947162 2568345 2568680 1209 # chain 1484: length 1 score 2149 1948177 1948773 2569695 2570291 2149 # chain 1485: length 1 score 864 1949888 1950127 2571406 2571645 864 # chain 1486: length 2 score 3555 1950394 1950831 2571912 2572349 1576 1950833 1951383 2572351 2572901 1983 # chain 1487: length 1 score 2379 1951403 1952063 2572921 2573581 2379 # chain 1488: length 1 score 975 1953790 1954060 2575308 2575578 975 # chain 1489: length 1 score 1368 1954270 1954649 2575788 2576167 1368 # chain 1490: length 1 score 1101 1954951 1955256 2576469 2576774 1101 # chain 1491: length 1 score 950 1956632 1956895 2578153 2578416 950 # chain 1492: length 1 score 817 1957021 1957247 2578542 2578768 817 # chain 1493: length 2 score 2753 1957920 1958470 2579441 2579991 1983 1958472 1958686 2579993 2580207 774 # chain 1494: length 1 score 1663 1959135 1959596 2580656 2581117 1663 # chain 1495: length 1 score 788 1961538 1961756 2583059 2583277 788 # chain 1496: length 1 score 856 1961794 1962031 2583315 2583552 856 # chain 1497: length 1 score 828 1962511 1962740 2584032 2584261 828 # chain 1498: length 1 score 720 1963041 1963240 2584562 2584761 720 # chain 1499: length 1 score 882 1964000 1964244 2585521 2585765 882 # chain 1500: length 3 score 3345 1964308 1964714 2585829 2586235 1465 1964720 1964952 2586241 2586473 838 1964954 1965247 2586475 2586768 1058 # chain 1501: length 1 score 730 1965875 1966077 2587396 2587598 730 # chain 1502: length 1 score 788 1966259 1966477 2587780 2587998 788 # chain 1503: length 1 score 2224 1966819 1967436 2588340 2588957 2224 # chain 1504: length 1 score 795 1968034 1968254 2589555 2589775 795 # chain 1505: length 1 score 1047 1968813 1969103 2590334 2590624 1047 # chain 1506: length 1 score 806 1969837 1970060 2591358 2591581 806 # chain 1507: length 1 score 741 1970086 1970291 2591607 2591812 741 # chain 1508: length 1 score 1731 1971049 1971529 2592568 2593048 1731 # chain 1509: length 1 score 1000 1971978 1972255 2593497 2593774 1000 # chain 1510: length 1 score 1414 1972876 1973268 2594395 2594787 1414 # chain 1511: length 1 score 1015 1973283 1973564 2594802 2595083 1015 # chain 1512: length 1 score 921 1974175 1974430 2595694 2595949 921 # chain 1513: length 2 score 1802 1975026 1975276 2596545 2596795 903 1975278 1975528 2596797 2597047 903 # chain 1514: length 1 score 1152 1975671 1975990 2597190 2597509 1152 # chain 1515: length 1 score 943 1977699 1977960 2598442 2598703 943 # chain 1516: length 1 score 946 1978683 1978945 2599426 2599688 946 # chain 1517: length 1 score 1130 1979046 1979359 2599789 2600102 1130 # chain 1518: length 1 score 824 1980567 1980795 2601310 2601538 824 # chain 1519: length 1 score 925 1982052 1982308 2602796 2603052 925 # chain 1520: length 2 score 1845 1982625 1982842 2603369 2603586 784 1982844 1983139 2603588 2603883 1065 # chain 1521: length 1 score 2476 1984651 1985338 2605395 2606082 2476 # chain 1522: length 1 score 943 1985855 1986116 2606600 2606861 943 # chain 1523: length 1 score 2332 1986452 1987099 2607196 2607843 2332 # chain 1524: length 1 score 1609 1987606 1988052 2608350 2608796 1609 # chain 1525: length 1 score 831 1989494 1989724 2610238 2610468 831 # chain 1526: length 2 score 3621 4505135 4505401 2629690 2629956 961 4505403 4506142 2629958 2630697 2664 # chain 1527: length 1 score 770 1989829 1990042 2631693 2631906 770 # chain 1528: length 1 score 849 1990043 1990278 2631906 2632141 849 # chain 1529: length 1 score 975 1990754 1991024 2632617 2632887 975 # chain 1530: length 1 score 925 1991686 1991942 2633549 2633805 925 # chain 1531: length 1 score 792 1992676 1992895 2634539 2634758 792 # chain 1532: length 1 score 1166 1993250 1993573 2635113 2635436 1166 # chain 1533: length 3 score 2936 1993733 1993977 2635596 2635840 882 1993979 1994269 2635842 2636132 1047 1994271 1994552 2636134 2636415 1015 # chain 1534: length 1 score 2077 1996761 1997337 2638624 2639200 2077 # chain 1535: length 1 score 1886 1997710 1998233 2639573 2640096 1886 # chain 1536: length 2 score 1575 1998736 1998953 2640599 2640816 784 1998955 1999175 2640818 2641038 795 # chain 1537: length 1 score 2167 1999338 1999939 2641201 2641802 2167 # chain 1538: length 1 score 738 2001495 2001699 2643618 2643822 738 # chain 1539: length 1 score 1119 2002872 2003182 2644986 2645296 1119 # chain 1540: length 1 score 730 2004044 2004246 2646158 2646360 730 # chain 1541: length 1 score 1173 2004760 2005085 2646874 2647199 1173 # chain 1542: length 1 score 1004 2007088 2007366 2649202 2649480 1004 # chain 1543: length 2 score 2825 2007394 2007805 2649508 2649919 1483 2007807 2008180 2649921 2650294 1346 # chain 1544: length 1 score 1720 2011047 2011524 2655125 2655602 1720 # chain 1545: length 1 score 1188 2011589 2011918 2655667 2655996 1188 # chain 1546: length 1 score 2264 2013971 2014599 2658049 2658677 2264 # chain 1547: length 1 score 759 2014528 2014738 2658668 2658878 759 # chain 1548: length 1 score 1281 2014884 2015239 2659024 2659379 1281 # chain 1549: length 1 score 849 2015595 2015830 2659735 2659970 849 # chain 1550: length 1 score 1818 2016279 2016783 2660419 2660923 1818 # chain 1551: length 1 score 1494 2017939 2018353 2662080 2662494 1494 # chain 1552: length 1 score 1195 2018612 2018943 2662753 2663084 1195 # chain 1553: length 1 score 1213 2019325 2019661 2663466 2663802 1213 # chain 1554: length 6 score 9474 2019822 2020218 2663963 2664359 1429 2020220 2020530 2664361 2664671 1119 2020532 2020953 2664673 2665094 1519 2020955 2021623 2665096 2665764 2408 2021625 2021857 2665766 2665998 838 2021859 2022464 2666000 2666605 2181 # chain 1555: length 1 score 2617 2022653 2023379 2666794 2667520 2617 # chain 1556: length 1 score 777 2023837 2024052 2667978 2668193 777 # chain 1557: length 1 score 1443 2025011 2025411 2669152 2669552 1443 # chain 1558: length 1 score 781 2026243 2026459 2670385 2670601 781 # chain 1559: length 1 score 1249 2027335 2027681 2671477 2671823 1249 # chain 1560: length 1 score 2235 2027725 2028345 2671867 2672487 2235 # chain 1561: length 1 score 824 2028564 2028792 2672706 2672934 824 # chain 1562: length 1 score 734 2028869 2029072 2673011 2673214 734 # chain 1563: length 1 score 741 2030970 2031175 2675112 2675317 741 # chain 1564: length 1 score 1141 2033871 2034187 2678006 2678322 1141 # chain 1565: length 1 score 795 2035344 2035564 2679479 2679699 795 # chain 1566: length 1 score 1249 2037139 2037485 2681275 2681621 1249 # chain 1567: length 1 score 745 2039412 2039618 2683547 2683753 745 # chain 1568: length 1 score 1123 2039771 2040082 2683906 2684217 1123 # chain 1569: length 1 score 1098 2040374 2040678 2684509 2684813 1098 # chain 1570: length 3 score 4670 2041532 2042285 2730847 2731600 2714 2042293 2042551 2731608 2731866 932 2042553 2042842 2731868 2732157 1044 # chain 1571: length 1 score 892 2043421 2043668 2732736 2732983 892 # chain 1572: length 1 score 810 2043670 2043894 2732985 2733209 810 # chain 1573: length 1 score 795 2045104 2045324 2734419 2734639 795 # chain 1574: length 1 score 882 2052078 2052322 2742298 2742542 882 # chain 1575: length 1 score 781 2053032 2053248 2743252 2743468 781 # chain 1576: length 3 score 2733 2053634 2053854 2743854 2744074 795 2053856 2054088 2744076 2744308 838 2054090 2054397 2744310 2744617 1108 # chain 1577: length 1 score 730 2054614 2054816 2744834 2745036 730 # chain 1578: length 1 score 734 2056033 2056236 2746250 2746453 734 # chain 1579: length 1 score 1051 2057287 2057578 2747504 2747795 1051 # chain 1580: length 1 score 4104 2062915 2064054 2753131 2754270 4104 # chain 1581: length 1 score 1990 2065897 2066449 2757364 2757916 1990 # chain 1582: length 1 score 1220 2066623 2066961 2758091 2758429 1220 # chain 1583: length 1 score 1864 2074799 2075316 2761899 2762416 1864 # chain 1584: length 2 score 2563 2075456 2075809 2762556 2762909 1274 2075811 2076169 2762910 2763268 1292 # chain 1585: length 1 score 1090 2076404 2076706 2763504 2763806 1090 # chain 1586: length 1 score 842 2077254 2077487 2764354 2764587 842 # chain 1587: length 1 score 946 2077678 2077940 2764778 2765040 946 # chain 1588: length 1 score 1022 2077969 2078252 2765069 2765352 1022 # chain 1589: length 1 score 828 2079328 2079557 2766429 2766658 828 # chain 1590: length 1 score 806 2079685 2079908 2766786 2767009 806 # chain 1591: length 1 score 907 2082879 2083130 2769981 2770232 907 # chain 1592: length 1 score 1152 2084419 2084738 2771521 2771840 1152 # chain 1593: length 1 score 1803 2084836 2085336 2771938 2772438 1803 # chain 1594: length 2 score 1597 2086206 2086438 2773308 2773540 838 2086440 2086651 2773542 2773753 763 # chain 1595: length 1 score 781 2091346 2091562 2778006 2778222 781 # chain 1596: length 1 score 738 2094483 2094687 2781143 2781347 738 # chain 1597: length 1 score 1126 2097262 2097574 2783920 2784232 1126 # chain 1598: length 1 score 788 2113919 2114137 2803895 2804113 788 # chain 1599: length 1 score 835 2119227 2119458 2809107 2809338 835 # chain 1600: length 1 score 1008 2122375 2122654 2812343 2812622 1008 # chain 1601: length 1 score 928 2122745 2123002 2812713 2812970 928 # chain 1602: length 1 score 748 2126130 2126337 2816098 2816305 748 # chain 1603: length 1 score 1022 2127587 2127870 2817558 2817841 1022 # chain 1604: length 1 score 946 2128148 2128410 2818119 2818381 946 # chain 1605: length 1 score 806 2130083 2130306 2820054 2820277 806 # chain 1606: length 1 score 928 2131508 2131765 2821479 2821736 928 # chain 1607: length 1 score 1195 2133560 2133891 2823531 2823862 1195 # chain 1608: length 1 score 1407 2133935 2134325 2823906 2824296 1407 # chain 1609: length 1 score 2246 2134864 2135487 2824835 2825458 2246 # chain 1610: length 1 score 882 2135806 2136050 2825778 2826022 882 # chain 1611: length 1 score 784 2136085 2136302 2826057 2826274 784 # chain 1612: length 1 score 925 2139119 2139375 2829563 2829819 925 # chain 1613: length 1 score 1054 2139410 2139702 2829854 2830146 1054 # chain 1614: length 1 score 1018 2140010 2140292 2830454 2830736 1018 # chain 1615: length 1 score 824 2141744 2141972 2832191 2832419 824 # chain 1616: length 1 score 1285 2143720 2144076 2834167 2834523 1285 # chain 1617: length 1 score 972 2144305 2144574 2834752 2835021 972 # chain 1618: length 1 score 1483 2144682 2145093 2835121 2835532 1483 # chain 1619: length 1 score 871 2145494 2145735 2835933 2836174 871 # chain 1620: length 1 score 730 2145917 2146119 2836356 2836558 730 # chain 1621: length 1 score 806 2152874 2153097 2842908 2843131 806 # chain 1622: length 1 score 824 2157500 2157728 2847534 2847762 824 # chain 1623: length 1 score 774 2159512 2159726 2849546 2849760 774 # chain 1624: length 1 score 1011 2160915 2161195 2850949 2851229 1011 # chain 1625: length 1 score 720 2163830 2164029 2853865 2854064 720 # chain 1626: length 1 score 903 2164634 2164884 2854669 2854919 903 # chain 1627: length 1 score 723 2167991 2168191 2857396 2857596 723 # chain 1628: length 1 score 2199 2169513 2170123 2857657 2858267 2199 # chain 1629: length 1 score 766 2170692 2170904 2858836 2859048 766 # chain 1630: length 1 score 828 2171027 2171256 2859171 2859400 828 # chain 1631: length 1 score 1022 2171771 2172054 2859915 2860198 1022 # chain 1632: length 1 score 1202 2172899 2173232 2861043 2861376 1202 # chain 1633: length 1 score 1033 2173706 2173992 2861850 2862136 1033 # chain 1634: length 1 score 1213 2174134 2174470 2862278 2862614 1213 # chain 1635: length 1 score 763 2176255 2176466 2864390 2864601 763 # chain 1636: length 1 score 813 2176519 2176744 2864654 2864879 813 # chain 1637: length 1 score 738 2178034 2178238 2866170 2866374 738 # chain 1638: length 1 score 763 2178361 2178572 2866497 2866708 763 # chain 1639: length 1 score 914 2179950 2180203 2868086 2868339 914 # chain 1640: length 1 score 817 2180394 2180620 2868530 2868756 817 # chain 1641: length 1 score 1321 2181635 2182001 2869771 2870137 1321 # chain 1642: length 1 score 1036 2182296 2182583 2870432 2870719 1036 # chain 1643: length 2 score 1626 2183634 2183837 2873952 2874155 734 2183839 2184087 2874157 2874405 896 # chain 1644: length 1 score 867 2184857 2185097 2875201 2875441 867 # chain 1645: length 1 score 745 2191221 2191427 2881566 2881772 745 # chain 1646: length 1 score 932 2191466 2191724 2881811 2882069 932 # chain 1647: length 1 score 2224 2192021 2192638 2882366 2882983 2224 # chain 1648: length 1 score 738 2192659 2192863 2883004 2883208 738 # chain 1649: length 1 score 842 2194182 2194415 2884527 2884760 842 # chain 1650: length 1 score 738 2198233 2198437 2891590 2891794 738 # chain 1651: length 1 score 792 2200600 2200819 2893957 2894176 792 # chain 1652: length 1 score 741 2201929 2202134 2895284 2895489 741 # chain 1653: length 1 score 867 2202523 2202763 2896812 2897052 867 # chain 1654: length 1 score 864 2205919 2206158 2900208 2900447 864 # chain 1655: length 1 score 943 2208053 2208314 2902342 2902603 943 # chain 1656: length 1 score 936 2209448 2209707 2905053 2905312 936 # chain 1657: length 3 score 2835 2209899 2210143 2905506 2905750 882 2210145 2210348 2905752 2905955 734 2210350 2210690 2905957 2906297 1227 # chain 1658: length 1 score 1040 2211187 2211475 2906794 2907082 1040 # chain 1659: length 1 score 878 2211943 2212186 2907550 2907793 878 # chain 1660: length 1 score 763 2212389 2212600 2907996 2908207 763 # chain 1661: length 1 score 795 2212933 2213153 2957456 2957676 795 # chain 1662: length 1 score 2487 2213274 2213964 2957797 2958487 2487 # chain 1663: length 1 score 817 2218456 2218682 2963020 2963246 817 # chain 1664: length 1 score 766 2219935 2220147 2964499 2964711 766 # chain 1665: length 1 score 2116 2220987 2221574 2965551 2966138 2116 # chain 1666: length 1 score 1054 2222369 2222661 2966933 2967225 1054 # chain 1667: length 1 score 964 2222834 2223101 2967398 2967665 964 # chain 1668: length 1 score 1090 2223432 2223734 2967996 2968298 1090 # chain 1669: length 1 score 1627 2225496 2225947 2970060 2970511 1627 # chain 1670: length 2 score 1647 2226627 2226862 2971192 2971427 849 2226864 2227086 2971429 2971651 802 # chain 1671: length 1 score 871 2228571 2228812 2979215 2979456 871 # chain 1672: length 1 score 1792 2229200 2229697 2979844 2980341 1792 # chain 1673: length 2 score 1760 2229855 2230119 2980499 2980763 954 2230121 2230345 2980765 2980989 810 # chain 1674: length 1 score 1879 2230830 2231351 2981474 2981995 1879 # chain 1675: length 1 score 1155 2231542 2231862 2982186 2982506 1155 # chain 1676: length 1 score 1044 2232100 2232389 2982744 2983033 1044 # chain 1677: length 1 score 878 2233168 2233411 2983812 2984055 878 # chain 1678: length 1 score 2059 2233518 2234089 2984162 2984733 2059 # chain 1679: length 1 score 1429 2234218 2234614 2984862 2985258 1429 # chain 1680: length 2 score 1953 2234979 2235319 2985624 2985964 1227 2235321 2235523 2985966 2986168 730 # chain 1681: length 1 score 1087 2237286 2237587 2987931 2988232 1087 # chain 1682: length 1 score 788 2238311 2238529 2988956 2989174 788 # chain 1683: length 1 score 1159 2238619 2238940 2989264 2989585 1159 # chain 1684: length 2 score 2529 2239235 2239730 2989880 2990375 1785 2239732 2239939 2990377 2990584 748 # chain 1685: length 1 score 2192 2241424 2242032 2992069 2992677 2192 # chain 1686: length 1 score 1191 2242658 2242988 2993303 2993633 1191 # chain 1687: length 3 score 4160 2243305 2243526 2993938 2994159 799 2243528 2244242 2994161 2994875 2574 2244244 2244464 2994877 2995097 795 # chain 1688: length 1 score 860 2245425 2245663 2996056 2996294 860 # chain 1689: length 1 score 910 2245849 2246101 2996480 2996732 910 # chain 1690: length 5 score 12709 2246572 2247571 2997203 2998202 3600 2247573 2248062 2998204 2998693 1764 2248064 2248699 2998695 2999330 2289 2248701 2249569 2999332 3000200 3128 2249571 2250110 3000202 3000741 1944 # chain 1691: length 1 score 1173 2251980 2252305 3002560 3002885 1173 # chain 1692: length 1 score 910 2253003 2253255 3003583 3003835 910 # chain 1693: length 1 score 1162 2253263 2253585 3003843 3004165 1162 # chain 1694: length 1 score 1926 2256235 2256769 3006815 3007349 1926 # chain 1695: length 1 score 864 2259308 2259547 3009889 3010128 864 # chain 1696: length 2 score 2295 2259903 2260198 3010484 3010779 1065 2260200 2260542 3010781 3011123 1234 # chain 1697: length 1 score 1148 2261231 2261549 3011812 3012130 1148 # chain 1698: length 2 score 2226 2261794 2262073 3012375 3012654 1008 2262083 2262426 3012664 3013007 1238 # chain 1699: length 1 score 885 2263166 2263411 3013747 3013992 885 # chain 1700: length 1 score 2113 2263643 2264229 3014224 3014810 2113 # chain 1701: length 1 score 1008 2265002 2265281 3015583 3015862 1008 # chain 1702: length 1 score 1382 2266560 2266943 3017141 3017524 1382 # chain 1703: length 1 score 2077 2268043 2268619 3018625 3019201 2077 # chain 1704: length 1 score 1908 2269273 2269802 3019856 3020385 1908 # chain 1705: length 1 score 1065 2272483 2272778 3023066 3023361 1065 # chain 1706: length 1 score 759 2274347 2274557 3024930 3025140 759 # chain 1707: length 1 score 860 2275057 2275295 3025640 3025878 860 # chain 1708: length 4 score 4771 2275539 2275809 3026122 3026392 975 2275811 2276060 3026394 3026643 900 2276062 2276278 3026645 3026861 781 2276280 2276870 3026863 3027453 2127 # chain 1709: length 1 score 1206 2277547 2277881 3028130 3028464 1206 # chain 1710: length 1 score 1245 2278243 2278588 3028826 3029171 1245 # chain 1711: length 1 score 910 2280390 2280642 3030973 3031225 910 # chain 1712: length 1 score 738 2280686 2280890 3031269 3031473 738 # chain 1713: length 2 score 2444 2281848 2282052 3032431 3032635 738 2282054 2282528 3032637 3033111 1710 # chain 1714: length 2 score 2414 2283182 2283584 3033765 3034167 1450 2283586 2283854 3034169 3034437 968 # chain 1715: length 1 score 763 2284626 2284837 3035207 3035418 763 # chain 1716: length 2 score 1737 2285076 2285356 3035657 3035937 1011 2285358 2285560 3035939 3036141 730 # chain 1717: length 1 score 777 2289824 2290039 3039030 3039245 777 # chain 1718: length 1 score 770 2290772 2290985 3039978 3040191 770 # chain 1719: length 1 score 2059 2291857 2292428 3041063 3041634 2059 # chain 1720: length 1 score 770 2293245 2293458 3042451 3042664 770 # chain 1721: length 1 score 802 2293481 2293703 3042687 3042909 802 # chain 1722: length 1 score 1087 2293807 2294108 3043013 3043314 1087 # chain 1723: length 1 score 1418 2294251 2294644 3043457 3043850 1418 # chain 1724: length 2 score 2861 2295290 2295646 3044496 3044852 1285 2295648 2296086 3044854 3045292 1580 # chain 1725: length 1 score 1152 2296175 2296494 3045381 3045700 1152 # chain 1726: length 1 score 1162 2296613 2296935 3045819 3046141 1162 # chain 1727: length 1 score 1504 2297470 2297887 3046676 3047093 1504 # chain 1728: length 1 score 1162 2298029 2298351 3047235 3047557 1162 # chain 1729: length 1 score 979 2299772 2300043 3048978 3049249 979 # chain 1730: length 1 score 925 2300249 2300505 3049455 3049711 925 # chain 1731: length 3 score 3526 2300657 2300999 3049863 3050205 1234 2301001 2301222 3050207 3050428 799 2301224 2301640 3050430 3050846 1501 # chain 1732: length 1 score 946 2303695 2303957 3052335 3052597 946 # chain 1733: length 2 score 3448 2303998 2304404 3052638 3053044 1465 2304406 2304957 3053046 3053597 1987 # chain 1734: length 1 score 1317 2305313 2305678 3053953 3054318 1317 # chain 1735: length 2 score 1622 2306306 2306553 3054946 3055193 892 2306555 2306758 3055195 3055398 734 # chain 1736: length 1 score 1497 2309351 2309766 3057991 3058406 1497 # chain 1737: length 1 score 1144 2310631 2310948 3059271 3059588 1144 # chain 1738: length 1 score 1220 2311323 2311661 3059963 3060301 1220 # chain 1739: length 1 score 741 2312305 2312510 3060945 3061150 741 # chain 1740: length 1 score 896 2312535 2312783 3061175 3061423 896 # chain 1741: length 1 score 3790 2313355 2314407 3061995 3063047 3790 # chain 1742: length 1 score 784 2315236 2315453 3063876 3064093 784 # chain 1743: length 1 score 892 2315698 2315945 3064338 3064585 892 # chain 1744: length 1 score 788 2316067 2316285 3064707 3064925 788 # chain 1745: length 2 score 1845 2316379 2316686 3065019 3065326 1108 2316688 2316893 3065328 3065533 741 # chain 1746: length 1 score 1260 2317120 2317469 3065760 3066109 1260 # chain 1747: length 1 score 1479 2317561 2317971 3066201 3066611 1479 # chain 1748: length 1 score 1346 2325693 2326066 3067117 3067490 1346 # chain 1749: length 1 score 982 2326080 2326352 3067504 3067776 982 # chain 1750: length 1 score 820 2328984 2329211 3070408 3070635 820 # chain 1751: length 1 score 1090 2329599 2329901 3071023 3071325 1090 # chain 1752: length 1 score 788 2330034 2330252 3071458 3071676 788 # chain 1753: length 1 score 968 2330740 2331008 3072164 3072432 968 # chain 1754: length 1 score 1753 2331328 2331814 3072752 3073238 1753 # chain 1755: length 2 score 2055 2332288 2332642 3073712 3074066 1278 2332644 2332860 3074068 3074284 781 # chain 1756: length 1 score 806 2333387 2333610 3074811 3075034 806 # chain 1757: length 1 score 810 2334785 2335009 3076208 3076432 810 # chain 1758: length 2 score 1575 2336208 2336413 3077631 3077836 741 2336415 2336647 3077838 3078070 838 # chain 1759: length 2 score 1907 2337189 2337503 3078612 3078926 1134 2337505 2337720 3078928 3079143 777 # chain 1760: length 1 score 860 2338608 2338846 3080044 3080282 860 # chain 1761: length 1 score 921 2339047 2339302 3080483 3080738 921 # chain 1762: length 1 score 1933 2339383 2339919 3080819 3081355 1933 # chain 1763: length 1 score 1515 2341025 2341445 3082461 3082881 1515 # chain 1764: length 1 score 1584 2342842 2343281 3084278 3084717 1584 # chain 1765: length 1 score 1040 2344015 2344303 3085451 3085739 1040 # chain 1766: length 1 score 853 2348815 2349051 3093840 3094076 853 # chain 1767: length 1 score 982 2350732 2351004 3095757 3096029 982 # chain 1768: length 1 score 806 2351164 2351387 3096189 3096412 806 # chain 1769: length 1 score 1227 2351467 2351807 3096492 3096832 1227 # chain 1770: length 2 score 3202 2354350 2354957 3099375 3099982 2188 2354959 2355241 3099984 3100266 1018 # chain 1771: length 1 score 820 2356031 2356258 3100885 3101112 820 # chain 1772: length 1 score 928 2357185 2357442 3102038 3102295 928 # chain 1773: length 1 score 1994 2357830 2358383 3102683 3103236 1994 # chain 1774: length 1 score 1328 2358663 2359031 3103516 3103884 1328 # chain 1775: length 1 score 1814 2359274 2359777 3104127 3104630 1814 # chain 1776: length 2 score 2688 2361150 2361633 3106003 3106486 1742 2361635 2361898 3106488 3106751 950 # chain 1777: length 1 score 756 2365050 2365259 3109903 3110112 756 # chain 1778: length 1 score 741 2365300 2365505 3110153 3110358 741 # chain 1779: length 1 score 1537 2365729 2366155 3110582 3111008 1537 # chain 1780: length 2 score 1640 2366694 2366896 3111547 3111749 730 2366898 2367151 3111751 3112004 914 # chain 1781: length 1 score 1335 2367195 2367565 3112048 3112418 1335 # chain 1782: length 2 score 2137 2367738 2367939 3112591 3112792 727 2367941 2368333 3112794 3113186 1414 # chain 1783: length 1 score 1533 2368581 2369006 3113434 3113859 1533 # chain 1784: length 1 score 860 2369104 2369342 3113957 3114195 860 # chain 1785: length 1 score 784 2369344 2369561 3114197 3114414 784 # chain 1786: length 2 score 1555 2371115 2371346 3115968 3116199 835 2371355 2371559 3116208 3116412 738 # chain 1787: length 1 score 1382 2371934 2372317 3116787 3117170 1382 # chain 1788: length 1 score 810 2373433 2373657 3118286 3118510 810 # chain 1789: length 1 score 1065 2374791 2375086 3119644 3119939 1065 # chain 1790: length 1 score 936 2377211 2377470 3122064 3122323 936 # chain 1791: length 1 score 907 2378844 2379095 3123697 3123948 907 # chain 1792: length 1 score 838 2379699 2379931 3124552 3124784 838 # chain 1793: length 1 score 774 2388716 2388930 3129159 3129373 774 # chain 1794: length 1 score 2329 2389160 2389806 3129603 3130249 2329 # chain 1795: length 1 score 1605 2391447 2391892 3131957 3132402 1605 # chain 1796: length 1 score 784 2392296 2392513 3132806 3133023 784 # chain 1797: length 1 score 727 2393010 2393211 3133520 3133721 727 # chain 1798: length 1 score 900 2393779 2394028 3134289 3134538 900 # chain 1799: length 1 score 2293 2394207 2394843 3134717 3135353 2293 # chain 1800: length 1 score 932 2395298 2395556 3135808 3136066 932 # chain 1801: length 1 score 1270 2397004 2397356 3137514 3137866 1270 # chain 1802: length 1 score 885 2398063 2398308 3138573 3138818 885 # chain 1803: length 1 score 774 2398727 2398941 3139237 3139451 774 # chain 1804: length 1 score 1152 2399860 2400179 3140370 3140689 1152 # chain 1805: length 2 score 3182 2401998 2402382 3142508 3142892 1386 2402384 2402883 3142894 3143393 1800 # chain 1806: length 1 score 756 2403015 2403224 3143525 3143734 756 # chain 1807: length 1 score 1213 2403226 2403562 3143736 3144072 1213 # chain 1808: length 2 score 3091 2404124 2404360 3144634 3144870 853 2404362 2404984 3144872 3145494 2242 # chain 1809: length 1 score 802 2405033 2405255 3145543 3145765 802 # chain 1810: length 1 score 1515 2405413 2405833 3145923 3146343 1515 # chain 1811: length 1 score 1130 2405973 2406286 3146483 3146796 1130 # chain 1812: length 1 score 1087 2407031 2407332 3147541 3147842 1087 # chain 1813: length 3 score 4073 2407843 2408135 3148353 3148645 1054 2408137 2408740 3148647 3149250 2174 2408742 2408978 3149252 3149488 853 # chain 1814: length 1 score 1288 2409223 2409580 3149733 3150090 1288 # chain 1815: length 1 score 813 2409899 2410124 3150409 3150634 813 # chain 1816: length 1 score 1256 2410126 2410474 3150636 3150984 1256 # chain 1817: length 1 score 3952 2410877 2411974 3151387 3152484 3952 # chain 1818: length 1 score 1767 2411990 2412480 3152500 3152990 1767 # chain 1819: length 2 score 3797 2412572 2413115 3153082 3153625 1958 2413117 2413628 3153627 3154138 1843 # chain 1820: length 1 score 957 2414188 2414453 3154698 3154963 957 # chain 1821: length 1 score 1328 2414542 2414910 3155052 3155420 1328 # chain 1822: length 1 score 885 2415052 2415297 3155562 3155807 885 # chain 1823: length 1 score 1152 2415604 2415923 3156114 3156433 1152 # chain 1824: length 1 score 795 2416588 2416808 3157098 3157318 795 # chain 1825: length 1 score 1076 2417113 2417411 3157623 3157921 1076 # chain 1826: length 1 score 1587 2417437 2417877 3157947 3158387 1587 # chain 1827: length 2 score 1690 2419183 2419387 3159693 3159897 738 2419395 2419663 3159905 3160173 968 # chain 1828: length 1 score 1238 2421331 2421674 3161841 3162184 1238 # chain 1829: length 1 score 1346 2422083 2422456 3162593 3162966 1346 # chain 1830: length 1 score 1281 2422485 2422840 3162995 3163350 1281 # chain 1831: length 1 score 1706 2423554 2424027 3164064 3164537 1706 # chain 1832: length 1 score 946 2424119 2424381 3164629 3164891 946 # chain 1833: length 1 score 972 2424749 2425018 3165259 3165528 972 # chain 1834: length 1 score 763 2425053 2425264 3165563 3165774 763 # chain 1835: length 1 score 986 2425958 2426231 3166468 3166741 986 # chain 1836: length 1 score 1119 2428031 2428341 3168541 3168851 1119 # chain 1837: length 1 score 874 2428580 2428822 3169090 3169332 874 # chain 1838: length 1 score 910 2429754 2430006 3170447 3170699 910 # chain 1839: length 2 score 4564 2430853 2431216 3171546 3171909 1310 2431218 2432122 3171911 3172815 3258 # chain 1840: length 1 score 2095 2432480 2433061 3173173 3173754 2095 # chain 1841: length 1 score 1072 2433567 2433864 3174260 3174557 1072 # chain 1842: length 1 score 910 2434712 2434964 3175405 3175657 910 # chain 1843: length 2 score 1777 2435529 2435802 3176222 3176495 986 2435804 2436024 3176497 3176717 795 # chain 1844: length 1 score 842 2436196 2436429 3176889 3177122 842 # chain 1845: length 1 score 730 2437238 2437440 3177931 3178133 730 # chain 1846: length 1 score 806 2438957 2439180 3179660 3179883 806 # chain 1847: length 1 score 1206 2439374 2439708 3180077 3180411 1206 # chain 1848: length 1 score 946 2439945 2440207 3180648 3180910 946 # chain 1849: length 1 score 784 2442085 2442302 3182788 3183005 784 # chain 1850: length 1 score 741 2443422 2443627 3184125 3184330 741 # chain 1851: length 1 score 835 2443784 2444015 3184487 3184718 835 # chain 1852: length 1 score 853 2445317 2445553 3186020 3186256 853 # chain 1853: length 1 score 1220 2446350 2446688 3187053 3187391 1220 # chain 1854: length 1 score 788 2454776 2454994 3195531 3195749 788 # chain 1855: length 1 score 1832 2455788 2456296 3196543 3197051 1832 # chain 1856: length 1 score 907 2456619 2456870 3197374 3197625 907 # chain 1857: length 1 score 2300 2458874 2459512 3199628 3200266 2300 # chain 1858: length 1 score 730 2460255 2460457 3201009 3201211 730 # chain 1859: length 1 score 1170 2462902 2463226 3203841 3204165 1170 # chain 1860: length 1 score 1396 2477087 2477474 3219567 3219954 1396 # chain 1861: length 1 score 1339 2478097 2478468 3220577 3220948 1339 # chain 1862: length 1 score 759 2478884 2479094 3221364 3221574 759 # chain 1863: length 2 score 2015 2479182 2479452 3221662 3221932 975 2479454 2479743 3221934 3222223 1044 # chain 1864: length 1 score 2869 2481784 2482580 3224264 3225060 2869 # chain 1865: length 1 score 763 2485223 2485434 3227703 3227914 763 # chain 1866: length 1 score 1090 2487009 2487311 3229485 3229787 1090 # chain 1867: length 1 score 741 2487475 2487680 3229951 3230156 741 # chain 1868: length 1 score 741 2487748 2487953 3230224 3230429 741 # chain 1869: length 1 score 1303 2488126 2488487 3230602 3230963 1303 # chain 1870: length 1 score 828 2489509 2489738 3231985 3232214 828 # chain 1871: length 1 score 835 2489857 2490088 3232333 3232564 835 # chain 1872: length 1 score 1281 2490804 2491159 3233280 3233635 1281 # chain 1873: length 1 score 867 2491680 2491920 3234156 3234396 867 # chain 1874: length 1 score 1144 2493507 2493824 3235984 3236301 1144 # chain 1875: length 1 score 1990 2494105 2494657 3236582 3237134 1990 # chain 1876: length 1 score 842 2494917 2495150 3237394 3237627 842 # chain 1877: length 1 score 766 2496124 2496336 3238601 3238813 766 # chain 1878: length 1 score 1371 2496425 2496805 3238903 3239283 1371 # chain 1879: length 1 score 954 2498319 2498583 3240797 3241061 954 # chain 1880: length 1 score 1357 2499116 2499492 3241594 3241970 1357 # chain 1881: length 2 score 1993 2499646 2499886 3242124 3242364 867 2499888 2500201 3242366 3242679 1130 # chain 1882: length 1 score 957 2500592 2500857 3243070 3243335 957 # chain 1883: length 2 score 2607 2501864 2502366 3244342 3244844 1810 2502374 2502599 3244852 3245077 813 # chain 1884: length 1 score 770 2504599 2504812 3247077 3247290 770 # chain 1885: length 1 score 774 2505039 2505253 3247517 3247731 774 # chain 1886: length 1 score 1364 2505829 2506207 3248307 3248685 1364 # chain 1887: length 1 score 2527 2507249 2507950 3249727 3250428 2527 # chain 1888: length 2 score 2562 2508288 2508706 3250766 3251184 1508 2508708 2509001 3251186 3251479 1058 # chain 1889: length 2 score 2375 2510142 2510587 3252619 3253064 1605 2510589 2510803 3253066 3253280 774 # chain 1890: length 1 score 1087 2511109 2511410 3253586 3253887 1087 # chain 1891: length 1 score 734 2514424 2514627 3255552 3255755 734 # chain 1892: length 1 score 3085 2515055 2515911 3256183 3257039 3085 # chain 1893: length 1 score 727 2515934 2516135 3257061 3257262 727 # chain 1894: length 1 score 914 2516170 2516423 3257182 3257435 914 # chain 1895: length 1 score 788 2516425 2516643 3257437 3257655 788 # chain 1896: length 1 score 1414 2516645 2517037 3257657 3258049 1414 # chain 1897: length 1 score 1800 2517487 2517986 3260246 3260745 1800 # chain 1898: length 1 score 817 2518048 2518274 3260807 3261033 817 # chain 1899: length 2 score 2073 2518801 2519152 3261560 3261911 1267 2519154 2519378 3261913 3262137 810 # chain 1900: length 2 score 2054 2524775 2525038 3263384 3263647 950 2525040 2525347 3263649 3263956 1108 # chain 1901: length 1 score 1263 2525376 2525726 3263985 3264335 1263 # chain 1902: length 1 score 2581 2525728 2526444 3264337 3265053 2581 # chain 1903: length 1 score 939 2526978 2527238 3265587 3265847 939 # chain 1904: length 1 score 1209 2527385 2527720 3265994 3266329 1209 # chain 1905: length 1 score 950 2528020 2528283 3266629 3266892 950 # chain 1906: length 1 score 1497 2529020 2529435 3267629 3268044 1497 # chain 1907: length 1 score 806 2529701 2529924 3268310 3268533 806 # chain 1908: length 1 score 1054 2530338 2530630 3268947 3269239 1054 # chain 1909: length 1 score 914 2531010 2531263 3269619 3269872 914 # chain 1910: length 2 score 3213 2531438 2531958 3270047 3270567 1875 2531960 2532332 3270569 3270941 1342 # chain 1911: length 1 score 741 2532682 2532887 3271291 3271496 741 # chain 1912: length 1 score 3081 2533185 2534040 3271794 3272649 3081 # chain 1913: length 1 score 820 2537775 2538002 3275424 3275651 820 # chain 1914: length 1 score 849 2538067 2538302 3275716 3275951 849 # chain 1915: length 1 score 1022 2538403 2538686 3276052 3276335 1022 # chain 1916: length 1 score 889 2541417 2541663 3279066 3279312 889 # chain 1917: length 1 score 1281 2542194 2542549 3279697 3280052 1281 # chain 1918: length 1 score 928 2544569 2544826 3282072 3282329 928 # chain 1919: length 1 score 846 2547613 2547847 3284934 3285168 846 # chain 1920: length 2 score 2396 2548378 2548736 3285699 3286057 1292 2548738 2549045 3286059 3286366 1108 # chain 1921: length 1 score 770 2549099 2549312 3286420 3286633 770 # chain 1922: length 1 score 1893 2549314 2549839 3286635 3287160 1893 # chain 1923: length 1 score 1026 2550023 2550307 3287344 3287628 1026 # chain 1924: length 1 score 1173 2550593 2550918 3287914 3288239 1173 # chain 1925: length 1 score 784 2551130 2551347 3288451 3288668 784 # chain 1926: length 1 score 1292 2552936 2553294 3290257 3290615 1292 # chain 1927: length 1 score 1195 2554391 2554722 3291712 3292043 1195 # chain 1928: length 1 score 1018 2555321 2555603 3292642 3292924 1018 # chain 1929: length 1 score 1760 2556229 2556717 3293550 3294038 1760 # chain 1930: length 1 score 723 2563647 2563847 3294178 3294378 723 # chain 1931: length 1 score 838 2565243 2565475 3295774 3296006 838 # chain 1932: length 1 score 1882 2566632 2567154 3297046 3297568 1882 # chain 1933: length 1 score 1191 2567312 2567642 3297726 3298056 1191 # chain 1934: length 1 score 1994 2568434 2568987 3298848 3299401 1994 # chain 1935: length 1 score 1051 2570309 2570600 3300723 3301014 1051 # chain 1936: length 1 score 1126 2572119 2572431 3302461 3302773 1126 # chain 1937: length 1 score 838 2572872 2573104 3303214 3303446 838 # chain 1938: length 1 score 1098 2574757 2575061 3305099 3305403 1098 # chain 1939: length 2 score 2141 2576480 2576803 3306822 3307145 1166 2576805 2577076 3307147 3307418 979 # chain 1940: length 1 score 1058 2577426 2577719 3307768 3308061 1058 # chain 1941: length 1 score 1180 2579667 2579994 3310009 3310336 1180 # chain 1942: length 1 score 799 2580018 2580239 3310360 3310581 799 # chain 1943: length 1 score 759 2580681 2580891 3311023 3311233 759 # chain 1944: length 1 score 813 2580942 2581167 3311284 3311509 813 # chain 1945: length 1 score 763 2581680 2581891 3312022 3312233 763 # chain 1946: length 2 score 1637 2583483 2583691 3313825 3314033 752 2583693 2583939 3314035 3314281 889 # chain 1947: length 1 score 1033 2584527 2584813 3314869 3315155 1033 # chain 1948: length 1 score 1213 2585107 2585443 3315449 3315785 1213 # chain 1949: length 1 score 1857 2585481 2585996 3315823 3316338 1857 # chain 1950: length 1 score 1206 2586571 2586905 3316913 3317247 1206 # chain 1951: length 1 score 752 2587132 2587340 3317474 3317682 752 # chain 1952: length 1 score 946 2587774 2588036 3318116 3318378 946 # chain 1953: length 2 score 1964 2588299 2588642 3318641 3318984 1238 2588644 2588846 3318986 3319188 730 # chain 1954: length 1 score 2048 2590181 2590749 3320523 3321091 2048 # chain 1955: length 1 score 921 2593465 2593720 3323778 3324033 921 # chain 1956: length 1 score 1191 2593778 2594108 3324091 3324421 1191 # chain 1957: length 1 score 2084 2595210 2595788 3325523 3326101 2084 # chain 1958: length 1 score 1000 2595986 2596263 3326299 3326576 1000 # chain 1959: length 1 score 2106 2596265 2596849 3326578 3327162 2106 # chain 1960: length 1 score 1022 2596868 2597151 3327181 3327464 1022 # chain 1961: length 1 score 1281 2597190 2597545 3327503 3327858 1281 # chain 1962: length 2 score 2025 2597749 2598076 3328062 3328389 1180 2598078 2598313 3328391 3328626 849 # chain 1963: length 1 score 1569 2598363 2598798 3328676 3329111 1569 # chain 1964: length 1 score 1198 2601610 2601942 3331923 3332255 1198 # chain 1965: length 1 score 1238 2602617 2602960 3332930 3333273 1238 # chain 1966: length 1 score 914 2603355 2603608 3333668 3333921 914 # chain 1967: length 1 score 925 2603730 2603986 3334043 3334299 925 # chain 1968: length 1 score 849 2604422 2604657 3334735 3334970 849 # chain 1969: length 1 score 1566 2606436 2606870 3336749 3337183 1566 # chain 1970: length 1 score 752 2607877 2608085 3338238 3338446 752 # chain 1971: length 1 score 838 2608337 2608569 3338698 3338930 838 # chain 1972: length 1 score 907 2610006 2610257 3340367 3340618 907 # chain 1973: length 1 score 2635 2611902 2612633 3342265 3342996 2635 # chain 1974: length 1 score 1306 2613728 2614090 3344091 3344453 1306 # chain 1975: length 1 score 763 2614188 2614399 3344551 3344762 763 # chain 1976: length 1 score 943 2614580 2614841 3344943 3345204 943 # chain 1977: length 3 score 5354 2615310 2615748 3345673 3346111 1580 2615750 2616027 3346113 3346390 1000 2616029 2616801 3346392 3347164 2782 # chain 1978: length 1 score 1022 2617029 2617312 3347392 3347675 1022 # chain 1979: length 1 score 1011 2617371 2617651 3347734 3348014 1011 # chain 1980: length 1 score 2948 2617653 2618471 3348016 3348834 2948 # chain 1981: length 1 score 1000 2618650 2618927 3349013 3349290 1000 # chain 1982: length 1 score 1198 2619068 2619400 3349431 3349763 1198 # chain 1983: length 1 score 871 2620295 2620536 3350658 3350899 871 # chain 1984: length 1 score 2419 2620903 2621574 3351265 3351936 2419 # chain 1985: length 1 score 1778 2621648 2622141 3352010 3352503 1778 # chain 1986: length 2 score 2616 2622602 2622972 3352964 3353334 1335 2622974 2623330 3353336 3353692 1285 # chain 1987: length 1 score 1162 2623959 2624281 3354321 3354643 1162 # chain 1988: length 1 score 1022 2624863 2625146 3355225 3355508 1022 # chain 1989: length 1 score 1562 2625345 2625778 3355707 3356140 1562 # chain 1990: length 1 score 1011 2625998 2626278 3356360 3356640 1011 # chain 1991: length 2 score 2112 2626491 2626699 3356853 3357061 752 2626701 2627079 3357063 3357441 1364 # chain 1992: length 1 score 918 2627281 2627535 3357643 3357897 918 # chain 1993: length 1 score 1033 2627901 2628187 3358263 3358549 1033 # chain 1994: length 1 score 1162 2628222 2628544 3358584 3358906 1162 # chain 1995: length 1 score 1310 2629209 2629572 3359571 3359934 1310 # chain 1996: length 1 score 860 2629758 2629996 3360120 3360358 860 # chain 1997: length 1 score 1144 2630442 2630759 3360804 3361121 1144 # chain 1998: length 1 score 892 2630825 2631072 3361187 3361434 892 # chain 1999: length 2 score 1932 2631491 2631693 3361853 3362055 730 2631695 2632029 3362057 3362391 1206 # chain 2000: length 1 score 774 2633280 2633494 3363642 3363856 774 # chain 2001: length 1 score 1800 2634147 2634646 3364508 3365007 1800 # chain 2002: length 1 score 774 2634684 2634898 3365045 3365259 774 # chain 2003: length 2 score 3653 2634900 2635635 3365261 3365996 2649 2635637 2635916 3365998 3366277 1008 # chain 2004: length 1 score 864 2636072 2636311 3366433 3366672 864 # chain 2005: length 1 score 3038 2636313 2637156 3366674 3367517 3038 # chain 2006: length 1 score 1486 2637264 2637676 3367625 3368037 1486 # chain 2007: length 1 score 2250 2638152 2638776 3368513 3369137 2250 # chain 2008: length 1 score 1065 2639345 2639640 3369706 3370001 1065 # chain 2009: length 1 score 2070 2639705 2640279 3370066 3370640 2070 # chain 2010: length 1 score 2401 2640598 2641264 3370959 3371625 2401 # chain 2011: length 1 score 792 2642265 2642484 3372626 3372845 792 # chain 2012: length 1 score 979 2644797 2645068 3379989 3380260 979 # chain 2013: length 2 score 3477 2646232 2646718 3381424 3381910 1753 2646720 2647199 3381912 3382391 1728 # chain 2014: length 1 score 1245 2647402 2647747 3382594 3382939 1245 # chain 2015: length 1 score 1843 2649258 2649769 3384450 3384961 1843 # chain 2016: length 2 score 2702 2650153 2650613 3385345 3385805 1659 2650615 2650905 3385807 3386097 1047 # chain 2017: length 1 score 1098 2653587 2653891 3388463 3388767 1098 # chain 2018: length 1 score 1580 2654352 2654790 3389228 3389666 1580 # chain 2019: length 5 score 6794 2654921 2655223 3389797 3390099 1090 2655225 2655706 3390101 3390582 1735 2655708 2656017 3390584 3390893 1116 2656019 2656290 3390895 3391166 979 2656292 2656816 3391168 3391692 1890 # chain 2020: length 1 score 914 2657068 2657321 3391944 3392197 914 # chain 2021: length 1 score 882 2658334 2658578 3393210 3393454 882 # chain 2022: length 1 score 961 2659321 2659587 3394197 3394463 961 # chain 2023: length 1 score 1141 2660011 2660327 3394887 3395203 1141 # chain 2024: length 1 score 806 2661878 2662101 3396600 3396823 806 # chain 2025: length 1 score 720 2662610 2662809 3397332 3397531 720 # chain 2026: length 1 score 795 2662985 2663205 3397707 3397927 795 # chain 2027: length 1 score 3330 2663404 2664328 3398126 3399050 3330 # chain 2028: length 1 score 2102 2666419 2667002 3401142 3401725 2102 # chain 2029: length 1 score 1119 2667999 2668309 3402722 3403032 1119 # chain 2030: length 1 score 1062 2669071 2669365 3403794 3404088 1062 # chain 2031: length 1 score 1335 2672157 2672527 3406880 3407250 1335 # chain 2032: length 1 score 1033 2673299 2673585 3408022 3408308 1033 # chain 2033: length 1 score 756 2674570 2674779 3409293 3409502 756 # chain 2034: length 1 score 1580 2676306 2676744 3411029 3411467 1580 # chain 2035: length 1 score 1292 2680540 2680898 3415263 3415621 1292 # chain 2036: length 2 score 3635 2683102 2683328 3417690 3417916 817 2683330 2684113 3417918 3418701 2822 # chain 2037: length 1 score 1846 2684451 2684963 3419039 3419551 1846 # chain 2038: length 1 score 889 2685044 2685290 3419632 3419878 889 # chain 2039: length 1 score 943 2685816 2686077 3420404 3420665 943 # chain 2040: length 1 score 828 2686500 2686729 3421088 3421317 828 # chain 2041: length 1 score 1011 2687173 2687453 3421761 3422041 1011 # chain 2042: length 1 score 1591 2687674 2688115 3422262 3422703 1591 # chain 2043: length 1 score 1126 2688993 2689305 3423581 3423893 1126 # chain 2044: length 1 score 738 2691024 2691228 3425630 3425834 738 # chain 2045: length 1 score 1000 2691698 2691975 3426304 3426581 1000 # chain 2046: length 1 score 1044 2692586 2692875 3427192 3427481 1044 # chain 2047: length 2 score 2073 2693026 2693277 3427632 3427883 907 2693279 2693603 3427885 3428209 1170 # chain 2048: length 1 score 741 2693778 2693983 3428383 3428588 741 # chain 2049: length 2 score 3170 2694111 2694508 3428716 3429113 1432 2694510 2694993 3429115 3429598 1742 # chain 2050: length 1 score 2005 2695122 2695678 3429727 3430283 2005 # chain 2051: length 2 score 2892 2696478 2697016 3431083 3431621 1940 2697024 2697292 3431629 3431897 968 # chain 2052: length 1 score 1303 2699800 2700161 3434407 3434768 1303 # chain 2053: length 2 score 2104 2700600 2700917 3435207 3435524 1144 2700919 2701186 3435526 3435793 964 # chain 2054: length 1 score 1562 2702463 2702896 3437071 3437504 1562 # chain 2055: length 1 score 1206 2703201 2703535 3437809 3438143 1206 # chain 2056: length 1 score 1886 2704116 2704639 3438724 3439247 1886 # chain 2057: length 1 score 2282 2704821 2705454 3439429 3440062 2282 # chain 2058: length 1 score 1828 2705750 2706257 3440358 3440865 1828 # chain 2059: length 1 score 1760 2706433 2706921 3441041 3441529 1760 # chain 2060: length 1 score 4222 2707175 2708347 3441771 3442943 4222 # chain 2061: length 1 score 892 2708499 2708746 3443095 3443342 892 # chain 2062: length 1 score 1177 2709414 2709740 3444010 3444336 1177 # chain 2063: length 1 score 1051 2709742 2710033 3444338 3444629 1051 # chain 2064: length 1 score 1818 2710686 2711190 3445282 3445786 1818 # chain 2065: length 1 score 835 2714377 2714608 3448797 3449028 835 # chain 2066: length 1 score 1116 2715041 2715350 3449461 3449770 1116 # chain 2067: length 1 score 1828 2716207 2716714 3450627 3451134 1828 # chain 2068: length 1 score 1958 2716916 2717459 3451336 3451879 1958 # chain 2069: length 1 score 936 2717578 2717837 3451998 3452257 936 # chain 2070: length 1 score 2008 2717875 2718432 3452295 3452852 2008 # chain 2071: length 1 score 741 2719838 2720043 3454258 3454463 741 # chain 2072: length 1 score 1004 2720685 2720963 3455105 3455383 1004 # chain 2073: length 1 score 1378 2721943 2722325 3456363 3456745 1378 # chain 2074: length 1 score 1026 2722364 2722648 3456784 3457068 1026 # chain 2075: length 2 score 1716 2722719 2722976 3457139 3457396 928 2722978 2723197 3457398 3457617 792 # chain 2076: length 1 score 1112 2723512 2723820 3457932 3458240 1112 # chain 2077: length 1 score 748 3421504 3421711 3458707 3458914 748 # chain 2078: length 1 score 1184 3421879 3422207 3459083 3459411 1184 # chain 2079: length 2 score 3731 2724288 2724992 3458707 3459411 2538 2725002 2725338 3459421 3459757 1213 # chain 2080: length 1 score 1231 2725518 2725859 3459938 3460279 1231 # chain 2081: length 1 score 1231 3422734 3423075 3459938 3460279 1231 # chain 2082: length 1 score 1886 2726034 2726557 3460454 3460977 1886 # chain 2083: length 1 score 1886 3423250 3423773 3460454 3460977 1886 # chain 2084: length 1 score 1378 3424978 3425360 3462102 3462484 1378 # chain 2085: length 1 score 1378 2727756 2728138 3462102 3462484 1378 # chain 2086: length 1 score 849 3425398 3425633 3462523 3462758 849 # chain 2087: length 1 score 849 2728176 2728411 3462523 3462758 849 # chain 2088: length 4 score 4583 2729938 2730256 3464290 3464608 1148 2730258 2730709 3464610 3465061 1627 2730715 2730941 3465067 3465293 817 2730943 2731223 3465295 3465575 1011 # chain 2089: length 1 score 2728 2731369 2732126 3465721 3466478 2728 # chain 2090: length 1 score 1249 2732128 2732474 3466480 3466826 1249 # chain 2091: length 1 score 1900 2733900 2734427 3468252 3468779 1900 # chain 2092: length 1 score 1274 2734630 2734983 3468982 3469335 1274 # chain 2093: length 1 score 1886 2735104 2735627 3469456 3469979 1886 # chain 2094: length 1 score 1044 2735929 2736218 3470281 3470570 1044 # chain 2095: length 1 score 1004 2736892 2737170 3471244 3471522 1004 # chain 2096: length 1 score 1911 2737943 2738473 3472295 3472825 1911 # chain 2097: length 1 score 1346 2738616 2738989 3472968 3473341 1346 # chain 2098: length 1 score 864 2739487 2739726 3473839 3474078 864 # chain 2099: length 2 score 2314 2740107 2740530 3474459 3474882 1526 2740532 2740751 3474884 3475103 792 # chain 2100: length 1 score 885 2741872 2742117 3476224 3476469 885 # chain 2101: length 1 score 3434 2742144 2743097 3476497 3477450 3434 # chain 2102: length 1 score 1054 2743240 2743532 3477593 3477885 1054 # chain 2103: length 1 score 2379 2743627 2744287 3477980 3478640 2379 # chain 2104: length 1 score 979 2744484 2744755 3478725 3478996 979 # chain 2105: length 1 score 1756 2744814 2745301 3479055 3479542 1756 # chain 2106: length 2 score 3466 2745687 2746250 3479928 3480491 2030 2746252 2746651 3480493 3480892 1440 # chain 2107: length 1 score 1162 2746790 2747112 3481032 3481354 1162 # chain 2108: length 2 score 2097 2748316 2748598 3482557 3482839 1018 2748600 2748900 3482841 3483141 1083 # chain 2109: length 1 score 1090 2749601 2749903 3483842 3484144 1090 # chain 2110: length 1 score 748 2750439 2750646 3484680 3484887 748 # chain 2111: length 1 score 874 2751144 2751386 3485385 3485627 874 # chain 2112: length 1 score 1490 2751471 2751884 3485712 3486125 1490 # chain 2113: length 1 score 1443 2752393 2752793 3486634 3487034 1443 # chain 2114: length 1 score 1180 2753604 2753931 3487845 3488172 1180 # chain 2115: length 1 score 2700 1467373 1468122 3500250 3500999 2700 # chain 2116: length 1 score 2520 269818 270517 3500250 3500949 2520 # chain 2117: length 1 score 946 2778708 2778970 3512565 3512827 946 # chain 2118: length 1 score 2494 2779235 2779927 3513092 3513784 2494 # chain 2119: length 2 score 1934 2780718 2781019 3514575 3514876 1087 2781027 2781266 3514885 3515124 864 # chain 2120: length 1 score 1378 2788875 2789257 3522735 3523117 1378 # chain 2121: length 1 score 720 2792327 2792526 3526187 3526386 720 # chain 2122: length 2 score 3167 2793676 2794100 3527536 3527960 1530 2794102 2794557 3527962 3528417 1641 # chain 2123: length 1 score 813 2794848 2795073 3528708 3528933 813 # chain 2124: length 1 score 1036 2796262 2796549 3530122 3530409 1036 # chain 2125: length 2 score 4971 2797007 2797371 3530866 3531230 1314 2797373 2798389 3531232 3532248 3661 # chain 2126: length 1 score 2138 2798633 2799226 3534456 3535049 2138 # chain 2127: length 1 score 1749 2800013 2800498 3535836 3536321 1749 # chain 2128: length 1 score 979 2800607 2800878 3536430 3536701 979 # chain 2129: length 1 score 817 2801135 2801361 3536958 3537184 817 # chain 2130: length 1 score 1076 2801453 2801751 3537276 3537574 1076 # chain 2131: length 1 score 1846 2801948 2802460 3537771 3538283 1846 # chain 2132: length 1 score 752 2802880 2803088 3538705 3538913 752 # chain 2133: length 1 score 1062 2804112 2804406 3539937 3540231 1062 # chain 2134: length 1 score 1378 2804534 2804916 3540359 3540741 1378 # chain 2135: length 1 score 770 2805471 2805684 3541295 3541508 770 # chain 2136: length 1 score 1324 2807358 2807725 3543189 3543556 1324 # chain 2137: length 1 score 730 2808012 2808214 3543843 3544045 730 # chain 2138: length 2 score 1694 2808405 2808652 3544236 3544483 892 2808654 2808877 3544485 3544708 806 # chain 2139: length 1 score 1227 2808895 2809235 3544726 3545066 1227 # chain 2140: length 1 score 1551 2809368 2809798 3545199 3545629 1551 # chain 2141: length 1 score 842 2810464 2810697 3546295 3546528 842 # chain 2142: length 1 score 1479 2812447 2812857 3548278 3548688 1479 # chain 2143: length 1 score 1396 2813196 2813583 3549026 3549413 1396 # chain 2144: length 1 score 1162 2814300 2814622 3550130 3550452 1162 # chain 2145: length 2 score 2170 2816865 2817266 3552466 3552867 1447 2817268 2817469 3552869 3553070 727 # chain 2146: length 1 score 1774 2818753 2819245 3554355 3554847 1774 # chain 2147: length 1 score 2498 2819449 2820142 3555051 3555744 2498 # chain 2148: length 1 score 1346 2820273 2820646 3555874 3556247 1346 # chain 2149: length 2 score 1594 2820875 2821089 3556475 3556689 774 2821091 2821319 3556691 3556919 824 # chain 2150: length 1 score 910 2821715 2821967 3557315 3557567 910 # chain 2151: length 1 score 766 2825702 2825914 3561302 3561514 766 # chain 2152: length 1 score 896 2826840 2827088 3562441 3562689 896 # chain 2153: length 1 score 1738 2828502 2828984 3564104 3564586 1738 # chain 2154: length 1 score 914 2830753 2831006 3566355 3566608 914 # chain 2155: length 1 score 835 2831645 2831876 3567043 3567274 835 # chain 2156: length 2 score 1698 2833063 2833293 3568461 3568691 831 2833295 2833536 3568693 3568934 871 # chain 2157: length 1 score 781 2837117 2837333 3572515 3572731 781 # chain 2158: length 1 score 939 2838683 2838943 3574081 3574341 939 # chain 2159: length 1 score 1076 2841331 2841629 3576694 3576992 1076 # chain 2160: length 1 score 1080 2846859 2847158 3582222 3582521 1080 # chain 2161: length 1 score 1040 2847181 2847469 3582544 3582832 1040 # chain 2162: length 2 score 2486 2847831 2848268 3583194 3583631 1576 2848270 2848523 3583633 3583886 914 # chain 2163: length 1 score 1281 2848606 2848961 3583969 3584324 1281 # chain 2164: length 1 score 1306 2848963 2849325 3584326 3584688 1306 # chain 2165: length 2 score 2061 2850926 2851128 3586289 3586491 730 2851139 2851514 3586502 3586877 1353 # chain 2166: length 1 score 1015 2852110 2852391 3587473 3587754 1015 # chain 2167: length 1 score 1087 2853320 2853621 3588683 3588984 1087 # chain 2168: length 1 score 817 2853872 2854098 3589235 3589461 817 # chain 2169: length 1 score 1080 2854529 2854828 3589892 3590191 1080 # chain 2170: length 1 score 997 2854893 2855169 3590256 3590532 997 # chain 2171: length 1 score 1872 2855604 2856123 3590967 3591486 1872 # chain 2172: length 1 score 766 2858192 2858404 3593555 3593767 766 # chain 2173: length 2 score 1778 2864535 2864754 3596737 3596956 792 2864756 2865030 3596958 3597232 990 # chain 2174: length 1 score 964 2865209 2865476 3597411 3597678 964 # chain 2175: length 1 score 781 2865518 2865734 3597720 3597936 781 # chain 2176: length 1 score 1465 2865880 2866286 3598082 3598488 1465 # chain 2177: length 1 score 892 2866387 2866634 3598589 3598836 892 # chain 2178: length 1 score 1328 2866834 2867202 3599036 3599404 1328 # chain 2179: length 1 score 997 2867396 2867672 3599598 3599874 997 # chain 2180: length 1 score 1976 2867821 2868369 3600023 3600571 1976 # chain 2181: length 2 score 1874 2869103 2869391 3601305 3601593 1040 2869393 2869625 3601595 3601827 838 # chain 2182: length 1 score 2289 2870387 2871022 3602589 3603224 2289 # chain 2183: length 2 score 3087 2871160 2871582 3603362 3603784 1522 2871584 2872019 3603786 3604221 1569 # chain 2184: length 1 score 788 2872881 2873099 3605083 3605301 788 # chain 2185: length 1 score 1911 2874143 2874673 3606345 3606875 1911 # chain 2186: length 1 score 1029 2885970 2886255 3617768 3618053 1029 # chain 2187: length 1 score 1281 2886425 2886780 3618222 3618577 1281 # chain 2188: length 1 score 831 2888055 2888285 3619852 3620082 831 # chain 2189: length 1 score 759 2889793 2890003 3621590 3621800 759 # chain 2190: length 1 score 846 2890189 2890423 3621986 3622220 846 # chain 2191: length 1 score 756 2891093 2891302 3622890 3623099 756 # chain 2192: length 1 score 774 2897135 2897349 3628932 3629146 774 # chain 2193: length 1 score 1173 2898460 2898785 3630257 3630582 1173 # chain 2194: length 1 score 1022 2901458 2901741 3633255 3633538 1022 # chain 2195: length 1 score 1047 2905237 2905527 3639316 3639606 1047 # chain 2196: length 2 score 3973 2905547 2906034 3639626 3640113 1756 2906036 2906652 3640115 3640731 2221 # chain 2197: length 1 score 1015 2907449 2907730 3641528 3641809 1015 # chain 2198: length 1 score 1220 2907732 2908070 3641811 3642149 1220 # chain 2199: length 1 score 1076 2908102 2908400 3642181 3642479 1076 # chain 2200: length 2 score 2227 2909036 2909377 3643115 3643456 1231 2909379 2909656 3643458 3643735 1000 # chain 2201: length 1 score 1314 2909940 2910304 3644019 3644383 1314 # chain 2202: length 1 score 1173 2910480 2910805 3644559 3644884 1173 # chain 2203: length 1 score 2149 2911431 2912027 3645510 3646106 2149 # chain 2204: length 1 score 936 2912225 2912484 3646304 3646563 936 # chain 2205: length 1 score 2548 2912855 2913562 3646934 3647641 2548 # chain 2206: length 1 score 806 2914017 2914240 3648096 3648319 806 # chain 2207: length 1 score 1292 2914296 2914654 3648375 3648733 1292 # chain 2208: length 2 score 1964 2914689 2914992 3648768 3649071 1094 2914998 2915242 3649077 3649321 882 # chain 2209: length 1 score 882 2915451 2915695 3649530 3649774 882 # chain 2210: length 1 score 802 2916062 2916284 3650142 3650364 802 # chain 2211: length 1 score 914 2917494 2917747 3651574 3651827 914 # chain 2212: length 1 score 842 2918793 2919026 3652873 3653106 842 # chain 2213: length 1 score 763 2919553 2919764 3653633 3653844 763 # chain 2214: length 1 score 2149 2920078 2920674 3654158 3654754 2149 # chain 2215: length 1 score 1843 2921222 2921733 3655302 3655813 1843 # chain 2216: length 1 score 936 2921946 2922205 3656026 3656285 936 # chain 2217: length 1 score 903 2922916 2923166 3656996 3657246 903 # chain 2218: length 2 score 1957 2923198 2923523 3657278 3657603 1173 2923525 2923743 3657605 3657823 788 # chain 2219: length 1 score 1864 2924110 2924627 3658190 3658707 1864 # chain 2220: length 1 score 795 2924815 2925035 3658895 3659115 795 # chain 2221: length 1 score 752 2925490 2925698 3659570 3659778 752 # chain 2222: length 2 score 2389 2925838 2926075 3659918 3660155 856 2926077 2926503 3660157 3660583 1537 # chain 2223: length 1 score 849 2926820 2927055 3660900 3661135 849 # chain 2224: length 1 score 1357 2927387 2927763 3661467 3661843 1357 # chain 2225: length 1 score 806 2928017 2928240 3662097 3662320 806 # chain 2226: length 1 score 1083 2928674 2928974 3662754 3663054 1083 # chain 2227: length 1 score 2199 2929226 2929836 3663306 3663916 2199 # chain 2228: length 1 score 1044 2929908 2930197 3663988 3664277 1044 # chain 2229: length 1 score 1065 2930268 2930563 3664348 3664643 1065 # chain 2230: length 2 score 2598 2930667 2931073 3664747 3665153 1465 2931075 2931390 3665155 3665470 1137 # chain 2231: length 1 score 1263 2931492 2931842 3665572 3665922 1263 # chain 2232: length 1 score 835 2932194 2932425 3666274 3666505 835 # chain 2233: length 1 score 1076 2932745 2933043 3666825 3667123 1076 # chain 2234: length 1 score 806 2933611 2933834 3667691 3667914 806 # chain 2235: length 3 score 3803 2934358 2934848 3668438 3668928 1767 2934850 2935109 3668930 3669189 936 2935111 2935418 3669191 3669498 1108 # chain 2236: length 1 score 795 2935564 2935784 3669644 3669864 795 # chain 2237: length 1 score 2232 2935786 2936405 3669866 3670485 2232 # chain 2238: length 1 score 853 2936506 2936742 3670586 3670822 853 # chain 2239: length 1 score 846 2936859 2937093 3670939 3671173 846 # chain 2240: length 1 score 2944 2937131 2937948 3671211 3672028 2944 # chain 2241: length 1 score 1864 2938372 2938889 3672452 3672969 1864 # chain 2242: length 1 score 1594 2940044 2940486 3674124 3674566 1594 # chain 2243: length 1 score 1206 2940637 2940971 3674717 3675051 1206 # chain 2244: length 1 score 1058 2941477 2941770 3675557 3675850 1058 # chain 2245: length 1 score 1641 2943757 2944212 3677837 3678292 1641 # chain 2246: length 1 score 1458 2944844 2945248 3678924 3679328 1458 # chain 2247: length 1 score 1461 2945342 2945747 3679422 3679827 1461 # chain 2248: length 1 score 1195 2946496 2946827 3680576 3680907 1195 # chain 2249: length 1 score 1213 2947288 2947624 3681368 3681704 1213 # chain 2250: length 1 score 1108 2947872 2948179 3681952 3682259 1108 # chain 2251: length 1 score 795 2948825 2949045 3682905 3683125 795 # chain 2252: length 1 score 784 2949530 2949747 3683610 3683827 784 # chain 2253: length 1 score 795 2949788 2950008 3683868 3684088 795 # chain 2254: length 1 score 1141 2952130 2952446 3686210 3686526 1141 # chain 2255: length 2 score 2235 2952793 2953194 3686873 3687274 1447 2953196 2953415 3687276 3687495 792 # chain 2256: length 2 score 1961 2954286 2954592 3688366 3688672 1105 2954594 2954832 3688674 3688912 860 # chain 2257: length 1 score 838 2955038 2955270 3689118 3689350 838 # chain 2258: length 1 score 817 2956154 2956380 3690234 3690460 817 # chain 2259: length 1 score 799 2956706 2956927 3690786 3691007 799 # chain 2260: length 1 score 993 2958659 2958934 3692739 3693014 993 # chain 2261: length 1 score 795 2960256 2960476 3694336 3694556 795 # chain 2262: length 1 score 1058 2962083 2962376 3696163 3696456 1058 # chain 2263: length 1 score 1065 2963061 2963356 3697141 3697436 1065 # chain 2264: length 2 score 3757 2963712 2964359 3697792 3698439 2332 2964361 2964757 3698441 3698837 1429 # chain 2265: length 1 score 936 2965038 2965297 3699118 3699377 936 # chain 2266: length 1 score 957 2965650 2965915 3699730 3699995 957 # chain 2267: length 2 score 3915 2966001 2966248 3700081 3700328 892 2966250 2967090 3700330 3701170 3027 # chain 2268: length 1 score 1112 2967289 2967597 3701369 3701677 1112 # chain 2269: length 1 score 1011 2967998 2968278 3702078 3702358 1011 # chain 2270: length 1 score 813 2969272 2969497 3703352 3703577 813 # chain 2271: length 1 score 1566 2969542 2969976 3703622 3704056 1566 # chain 2272: length 2 score 2199 2970125 2970476 3704205 3704556 1267 2970478 2970737 3704558 3704817 936 # chain 2273: length 1 score 979 2971120 2971391 3705200 3705471 979 # chain 2274: length 1 score 1483 2971483 2971894 3705563 3705974 1483 # chain 2275: length 1 score 1324 2972012 2972379 3706092 3706459 1324 # chain 2276: length 1 score 838 2972936 2973168 3707016 3707248 838 # chain 2277: length 1 score 1296 2973973 2974332 3708053 3708412 1296 # chain 2278: length 1 score 1090 2974589 2974891 3708671 3708973 1090 # chain 2279: length 1 score 2620 2975121 2975848 3709203 3709930 2620 # chain 2280: length 1 score 1108 2976234 2976541 3710316 3710623 1108 # chain 2281: length 1 score 1411 2976543 2976934 3710625 3711016 1411 # chain 2282: length 1 score 763 2977547 2977758 3711629 3711840 763 # chain 2283: length 1 score 964 2978148 2978415 3712230 3712497 964 # chain 2284: length 1 score 849 2979002 2979237 3713084 3713319 849 # chain 2285: length 1 score 1270 2979638 2979990 3713720 3714072 1270 # chain 2286: length 1 score 1072 2982386 2982683 3716468 3716765 1072 # chain 2287: length 1 score 932 2983764 2984022 3717846 3718104 932 # chain 2288: length 2 score 2127 2984063 2984382 3718145 3718464 1152 2984384 2984655 3718466 3718737 979 # chain 2289: length 1 score 813 2985678 2985903 3719760 3719985 813 # chain 2290: length 1 score 774 2987686 2987900 3721769 3721983 774 # chain 2291: length 1 score 1044 2987937 2988226 3722020 3722309 1044 # chain 2292: length 1 score 1051 2990962 2991253 3725284 3725575 1051 # chain 2293: length 2 score 1975 2993831 2994088 3728158 3728415 928 2994090 2994381 3728417 3728708 1051 # chain 2294: length 1 score 1047 2995755 2996045 3745699 3745989 1047 # chain 2295: length 1 score 1580 2996478 2996916 3746417 3746855 1580 # chain 2296: length 1 score 961 2997298 2997564 3747316 3747582 961 # chain 2297: length 1 score 784 2997725 2997942 3747743 3747960 784 # chain 2298: length 1 score 788 2998837 2999055 3748856 3749074 788 # chain 2299: length 1 score 774 2999656 2999870 3749675 3749889 774 # chain 2300: length 1 score 1839 3000361 3000871 3750380 3750890 1839 # chain 2301: length 1 score 1224 3001232 3001571 3751251 3751590 1224 # chain 2302: length 1 score 1274 3001673 3002026 3751692 3752045 1274 # chain 2303: length 1 score 720 3002567 3002766 3752586 3752785 720 # chain 2304: length 1 score 882 3002885 3003129 3752904 3753148 882 # chain 2305: length 1 score 1062 3003323 3003617 3753342 3753636 1062 # chain 2306: length 1 score 745 3004168 3004374 3754187 3754393 745 # chain 2307: length 1 score 1098 3005398 3005702 3755418 3755722 1098 # chain 2308: length 3 score 3155 3006022 3006285 3756042 3756305 950 3006287 3006638 3756307 3756658 1267 3006640 3006902 3756660 3756922 946 # chain 2309: length 2 score 3117 3007576 3007988 3757596 3758008 1486 3007993 3008448 3758013 3758468 1641 # chain 2310: length 1 score 1159 3008562 3008883 3758582 3758903 1159 # chain 2311: length 1 score 1180 3009212 3009539 3759232 3759559 1180 # chain 2312: length 1 score 1206 3010057 3010391 3760077 3760411 1206 # chain 2313: length 1 score 1501 3010599 3011015 3760439 3760855 1501 # chain 2314: length 1 score 2156 3011226 3011824 3761066 3761664 2156 # chain 2315: length 1 score 774 3012194 3012408 3762034 3762248 774 # chain 2316: length 1 score 756 3013048 3013257 3762888 3763097 756 # chain 2317: length 1 score 968 3014044 3014312 3763886 3764154 968 # chain 2318: length 1 score 2138 3014671 3015264 3764513 3765106 2138 # chain 2319: length 1 score 1724 3015391 3015869 3765233 3765711 1724 # chain 2320: length 1 score 972 3016410 3016679 3766252 3766521 972 # chain 2321: length 1 score 730 3017502 3017704 3767344 3767546 730 # chain 2322: length 2 score 1914 3018001 3018310 3767843 3768152 1116 3018312 3018534 3768154 3768376 802 # chain 2323: length 1 score 997 3018534 3018810 3768375 3768651 997 # chain 2324: length 2 score 3307 3018921 3019481 3768762 3769322 2019 3019483 3019841 3769324 3769682 1292 # chain 2325: length 1 score 730 3020209 3020411 3770050 3770252 730 # chain 2326: length 1 score 1479 3020619 3021029 3770460 3770870 1479 # chain 2327: length 1 score 957 3021634 3021899 3771475 3771740 957 # chain 2328: length 1 score 950 3022247 3022510 3772088 3772351 950 # chain 2329: length 1 score 925 3023592 3023848 3773433 3773689 925 # chain 2330: length 3 score 3051 3024824 3025117 3774665 3774958 1058 3025119 3025385 3774960 3775226 961 3025387 3025675 3775228 3775516 1040 # chain 2331: length 1 score 892 3025911 3026158 3775753 3776000 892 # chain 2332: length 1 score 1227 3026205 3026545 3776047 3776387 1227 # chain 2333: length 1 score 1083 3026973 3027273 3776815 3777115 1083 # chain 2334: length 1 score 1724 3027539 3028017 3777381 3777859 1724 # chain 2335: length 1 score 1004 3028526 3028804 3778368 3778646 1004 # chain 2336: length 1 score 1803 3029244 3029744 3779086 3779586 1803 # chain 2337: length 1 score 1069 3029796 3030092 3779638 3779934 1069 # chain 2338: length 2 score 2570 3030604 3030868 3780446 3780710 954 3030870 3031319 3780712 3781161 1620 # chain 2339: length 1 score 784 3031899 3032116 3781740 3781957 784 # chain 2340: length 1 score 1519 3032352 3032773 3782193 3782614 1519 # chain 2341: length 1 score 2228 3033845 3034463 3783686 3784304 2228 # chain 2342: length 1 score 763 3036792 3037003 3786633 3786844 763 # chain 2343: length 1 score 1623 3037599 3038049 3787440 3787890 1623 # chain 2344: length 1 score 997 3040459 3040735 3790181 3790457 997 # chain 2345: length 1 score 882 3040791 3041035 3790513 3790757 882 # chain 2346: length 1 score 734 3041133 3041336 3790855 3791058 734 # chain 2347: length 1 score 1116 3041443 3041752 3791165 3791474 1116 # chain 2348: length 1 score 1170 3042030 3042354 3791752 3792076 1170 # chain 2349: length 1 score 835 3045415 3045646 3794236 3794467 835 # chain 2350: length 1 score 1123 3047381 3047692 3796201 3796512 1123 # chain 2351: length 2 score 2212 3048253 3048570 3797073 3797390 1144 3048572 3048869 3797392 3797689 1072 # chain 2352: length 1 score 752 3051344 3051552 3800165 3800373 752 # chain 2353: length 1 score 1015 3052159 3052440 3800980 3801261 1015 # chain 2354: length 1 score 1580 3052674 3053112 3801495 3801933 1580 # chain 2355: length 2 score 3498 3053387 3053839 3802208 3802660 1630 3053841 3054360 3802662 3803181 1872 # chain 2356: length 1 score 885 3054575 3054820 3803396 3803641 885 # chain 2357: length 1 score 1076 3055879 3056177 3805093 3805391 1076 # chain 2358: length 1 score 871 3056206 3056447 3805420 3805661 871 # chain 2359: length 1 score 835 3056621 3056852 3805834 3806065 835 # chain 2360: length 1 score 1965 3056911 3057456 3806124 3806669 1965 # chain 2361: length 1 score 1314 3057700 3058064 3806868 3807232 1314 # chain 2362: length 1 score 990 3058180 3058454 3807348 3807622 990 # chain 2363: length 1 score 990 3058950 3059224 3808118 3808392 990 # chain 2364: length 1 score 3610 3059475 3060477 3808643 3809645 3610 # chain 2365: length 1 score 4010 3061062 3062175 3810230 3811343 4010 # chain 2366: length 1 score 763 3062510 3062721 3811678 3811889 763 # chain 2367: length 1 score 774 3063007 3063221 3812175 3812389 774 # chain 2368: length 2 score 2300 3063280 3063649 3812448 3812817 1332 3063651 3063920 3812819 3813088 972 # chain 2369: length 1 score 730 3065471 3065673 3814639 3814841 730 # chain 2370: length 1 score 1778 3066919 3067412 3816087 3816580 1778 # chain 2371: length 1 score 1411 3067576 3067967 3816744 3817135 1411 # chain 2372: length 4 score 4652 3068515 3068893 3817683 3818061 1364 3068895 3069116 3818063 3818284 799 3069118 3069421 3818286 3818589 1094 3069423 3069813 3818591 3818981 1407 # chain 2373: length 1 score 3603 3070272 3071272 3819440 3820440 3603 # chain 2374: length 1 score 1144 3071562 3071879 3820730 3821047 1144 # chain 2375: length 2 score 2307 3073825 3074209 3826128 3826512 1386 3074211 3074467 3826514 3826770 925 # chain 2376: length 2 score 1954 3074675 3075016 3826978 3827319 1231 3075018 3075219 3827321 3827522 727 # chain 2377: length 1 score 939 3075627 3075887 3827931 3828191 939 # chain 2378: length 1 score 774 3076093 3076307 3828397 3828611 774 # chain 2379: length 1 score 2372 3076675 3077333 3828979 3829637 2372 # chain 2380: length 1 score 1292 3079514 3079872 3831818 3832176 1292 # chain 2381: length 1 score 1000 3079982 3080259 3832286 3832563 1000 # chain 2382: length 1 score 1764 3080471 3080960 3832775 3833264 1764 # chain 2383: length 1 score 802 3082615 3082837 3835794 3836016 802 # chain 2384: length 5 score 5282 3083760 3084104 3836939 3837283 1242 3084106 3084555 3837285 3837734 1620 3084557 3084791 3837736 3837970 846 3084793 3084995 3837972 3838174 730 3084997 3085235 3838176 3838414 860 # chain 2385: length 1 score 784 3085432 3085649 3838611 3838828 784 # chain 2386: length 1 score 1134 3086328 3086642 3839520 3839834 1134 # chain 2387: length 1 score 1011 3086755 3087035 3839947 3840227 1011 # chain 2388: length 1 score 802 3088324 3088546 3841516 3841738 802 # chain 2389: length 1 score 936 3089701 3089960 3842893 3843152 936 # chain 2390: length 1 score 1227 3090100 3090440 3843292 3843632 1227 # chain 2391: length 2 score 2267 3090550 3090840 3843742 3844032 1047 3090842 3091181 3844034 3844373 1224 # chain 2392: length 1 score 752 3091438 3091646 3844630 3844838 752 # chain 2393: length 1 score 720 3092188 3092387 3845391 3845590 720 # chain 2394: length 1 score 1566 3093004 3093438 3846207 3846641 1566 # chain 2395: length 1 score 1479 3093603 3094013 3846806 3847216 1479 # chain 2396: length 1 score 853 3096735 3096971 3850026 3850262 853 # chain 2397: length 1 score 1962 3098602 3099146 3851893 3852437 1962 # chain 2398: length 1 score 928 3099400 3099657 3852691 3852948 928 # chain 2399: length 2 score 2382 3099873 3100304 3853165 3853596 1555 3100306 3100536 3853598 3853828 831 # chain 2400: length 1 score 939 3100613 3100873 3853905 3854165 939 # chain 2401: length 1 score 1396 3100875 3101262 3854167 3854554 1396 # chain 2402: length 1 score 968 3102828 3103096 3856120 3856388 968 # chain 2403: length 2 score 2299 3104010 3104371 3857302 3857663 1303 3104373 3104650 3857665 3857942 1000 # chain 2404: length 1 score 1371 3105070 3105450 3858362 3858742 1371 # chain 2405: length 1 score 752 3105587 3105795 3858879 3859087 752 # chain 2406: length 1 score 1522 3105926 3106348 3859218 3859640 1522 # chain 2407: length 1 score 856 3106790 3107027 3860082 3860319 856 # chain 2408: length 1 score 1033 3107815 3108101 3861108 3861394 1033 # chain 2409: length 1 score 1753 3136370 3136856 3888426 3888912 1753 # chain 2410: length 1 score 774 3138726 3138940 3890782 3890996 774 # chain 2411: length 1 score 882 3139130 3139374 3891186 3891430 882 # chain 2412: length 1 score 957 3139601 3139866 3891657 3891922 957 # chain 2413: length 1 score 784 3139964 3140181 3892020 3892237 784 # chain 2414: length 2 score 2673 3140690 3141215 3892746 3893271 1893 3141217 3141434 3893273 3893490 784 # chain 2415: length 1 score 741 3141757 3141962 3893813 3894018 741 # chain 2416: length 1 score 972 3141964 3142233 3894020 3894289 972 # chain 2417: length 1 score 1108 3142235 3142542 3894291 3894598 1108 # chain 2418: length 1 score 961 3142973 3143239 3895029 3895295 961 # chain 2419: length 4 score 6219 3143404 3143749 3895460 3895805 1245 3143751 3144101 3895807 3896157 1263 3144103 3144774 3896159 3896830 2419 3144779 3145142 3896835 3897198 1310 # chain 2420: length 1 score 795 3146202 3146422 3898261 3898481 795 # chain 2421: length 1 score 1105 3147235 3147541 3899294 3899600 1105 # chain 2422: length 1 score 1206 3148313 3148647 3900372 3900706 1206 # chain 2423: length 1 score 784 3149634 3149851 3901693 3901910 784 # chain 2424: length 1 score 896 3149949 3150197 3902008 3902256 896 # chain 2425: length 1 score 1087 3150769 3151070 3902828 3903129 1087 # chain 2426: length 2 score 2134 3151429 3151741 3903488 3903800 1126 3151748 3152031 3903807 3904090 1022 # chain 2427: length 1 score 824 3152247 3152475 3904307 3904535 824 # chain 2428: length 1 score 1364 3153099 3153477 3905159 3905537 1364 # chain 2429: length 1 score 752 3154115 3154323 3906175 3906383 752 # chain 2430: length 1 score 1929 3154885 3155420 3906945 3907480 1929 # chain 2431: length 1 score 889 3155961 3156207 3908018 3908264 889 # chain 2432: length 1 score 1130 3158209 3158522 3910262 3910575 1130 # chain 2433: length 1 score 741 3158683 3158888 3910736 3910941 741 # chain 2434: length 1 score 1033 3158947 3159233 3911000 3911286 1033 # chain 2435: length 2 score 2231 3159946 3160291 3911999 3912344 1245 3160293 3160567 3912346 3912620 990 # chain 2436: length 1 score 1728 3161369 3161848 3913422 3913901 1728 # chain 2437: length 1 score 720 3162085 3162284 3914138 3914337 720 # chain 2438: length 2 score 2256 3162322 3162671 3914375 3914724 1260 3162673 3162950 3914726 3915003 1000 # chain 2439: length 1 score 1731 3163102 3163582 3915155 3915635 1731 # chain 2440: length 1 score 1314 3163717 3164081 3915770 3916134 1314 # chain 2441: length 1 score 2041 3164320 3164886 3916373 3916939 2041 # chain 2442: length 1 score 1119 3164994 3165304 3917047 3917357 1119 # chain 2443: length 1 score 795 3166942 3167162 3918073 3918293 795 # chain 2444: length 1 score 1242 3167281 3167625 3918412 3918756 1242 # chain 2445: length 1 score 1026 3167811 3168095 3918942 3919226 1026 # chain 2446: length 1 score 871 3168108 3168349 3919239 3919480 871 # chain 2447: length 1 score 1332 3169150 3169519 3920281 3920650 1332 # chain 2448: length 1 score 748 3170441 3170648 3920985 3921192 748 # chain 2449: length 1 score 1335 3170926 3171296 3921470 3921840 1335 # chain 2450: length 1 score 853 3171648 3171884 3929445 3929681 853 # chain 2451: length 3 score 3958 3173031 3173423 3930828 3931220 1414 3173425 3173841 3931222 3931638 1501 3173843 3174134 3931640 3931931 1051 # chain 2452: length 1 score 2275 3174940 3175571 3932737 3933368 2275 # chain 2453: length 1 score 2232 3175780 3176399 3933577 3934196 2232 # chain 2454: length 1 score 1483 3177742 3178153 3935539 3935950 1483 # chain 2455: length 1 score 1180 3178395 3178722 3936192 3936519 1180 # chain 2456: length 1 score 838 3178763 3178995 3936560 3936792 838 # chain 2457: length 1 score 1533 3179171 3179596 3936968 3937393 1533 # chain 2458: length 1 score 741 3180085 3180290 3937882 3938087 741 # chain 2459: length 1 score 766 3180465 3180677 3938262 3938474 766 # chain 2460: length 1 score 2480 3182294 3182982 3940091 3940779 2480 # chain 2461: length 1 score 766 3189914 3190126 3941146 3941358 766 # chain 2462: length 1 score 1206 3191023 3191357 3942255 3942589 1206 # chain 2463: length 1 score 2401 3193642 3194308 3945248 3945914 2401 # chain 2464: length 1 score 1054 3194640 3194932 3946246 3946538 1054 # chain 2465: length 1 score 1335 3195231 3195601 3946837 3947207 1335 # chain 2466: length 1 score 1191 3196380 3196710 3947986 3948316 1191 # chain 2467: length 2 score 1723 3197240 3197516 3948846 3949122 997 3197518 3197720 3949124 3949326 730 # chain 2468: length 1 score 1047 3197829 3198119 3949435 3949725 1047 # chain 2469: length 1 score 1324 3198565 3198932 3950171 3950538 1324 # chain 2470: length 1 score 1234 3198983 3199325 3950589 3950931 1234 # chain 2471: length 1 score 806 3199381 3199604 3950987 3951210 806 # chain 2472: length 1 score 1638 3200311 3200765 3951917 3952371 1638 # chain 2473: length 1 score 1296 3200929 3201288 3952535 3952894 1296 # chain 2474: length 1 score 964 3201523 3201790 3953129 3953396 964 # chain 2475: length 1 score 1400 3202490 3202878 3954098 3954486 1400 # chain 2476: length 2 score 2043 3203844 3204146 3955452 3955754 1090 3204148 3204413 3955756 3956021 957 # chain 2477: length 1 score 849 3206894 3207129 3958503 3958738 849 # chain 2478: length 1 score 723 3207164 3207364 3958773 3958973 723 # chain 2479: length 1 score 3315 3208065 3208985 3959674 3960594 3315 # chain 2480: length 1 score 1011 3209410 3209690 3961019 3961299 1011 # chain 2481: length 1 score 1018 3209935 3210217 3961544 3961826 1018 # chain 2482: length 1 score 3585 3210362 3211357 3961971 3962966 3585 # chain 2483: length 1 score 730 3211860 3212062 3963469 3963671 730 # chain 2484: length 1 score 882 3212073 3212317 3963682 3963926 882 # chain 2485: length 2 score 2537 3212969 3213384 3964578 3964993 1497 3213386 3213675 3964995 3965284 1044 # chain 2486: length 1 score 759 3216091 3216301 3967700 3967910 759 # chain 2487: length 2 score 1816 3216321 3216588 3967930 3968197 964 3216590 3216827 3968199 3968436 856 # chain 2488: length 1 score 1274 3218904 3219257 3970513 3970866 1274 # chain 2489: length 1 score 1551 3219430 3219860 3971039 3971469 1551 # chain 2490: length 1 score 738 3220178 3220382 3971787 3971991 738 # chain 2491: length 2 score 2423 3220699 3221095 3972308 3972704 1429 3221098 3221375 3972707 3972984 1000 # chain 2492: length 1 score 774 3221665 3221879 3973274 3973488 774 # chain 2493: length 1 score 763 3223413 3223624 3975022 3975233 763 # chain 2494: length 1 score 1483 3223767 3224178 3975376 3975787 1483 # chain 2495: length 1 score 946 3224945 3225207 3976554 3976816 946 # chain 2496: length 1 score 756 3225341 3225550 3976950 3977159 756 # chain 2497: length 1 score 1076 3231339 3231637 3982948 3983246 1076 # chain 2498: length 1 score 720 3231818 3232017 3983427 3983626 720 # chain 2499: length 1 score 763 3232665 3232876 3984274 3984485 763 # chain 2500: length 1 score 777 3233117 3233332 3984726 3984941 777 # chain 2501: length 1 score 1929 3233357 3233892 3984966 3985501 1929 # chain 2502: length 1 score 871 3236878 3237119 3988487 3988728 871 # chain 2503: length 1 score 1512 3237429 3237848 3989040 3989459 1512 # chain 2504: length 1 score 1141 3239079 3239395 3990690 3991006 1141 # chain 2505: length 1 score 1962 3239947 3240491 3991558 3992102 1962 # chain 2506: length 1 score 982 3240904 3241176 3992515 3992787 982 # chain 2507: length 2 score 2180 3241718 3242053 3993329 3993664 1209 3242055 3242325 3993666 3993936 975 # chain 2508: length 1 score 2476 3242588 3243275 3994200 3994887 2476 # chain 2509: length 1 score 1497 3243502 3243917 3995114 3995529 1497 # chain 2510: length 1 score 741 3244186 3244391 3995798 3996003 741 # chain 2511: length 2 score 4384 3245094 3246040 3996706 3997652 3409 3246042 3246313 3997654 3997925 979 # chain 2512: length 1 score 1998 3246641 3247195 3998253 3998807 1998 # chain 2513: length 1 score 820 3247819 3248046 3999431 3999658 820 # chain 2514: length 2 score 2148 3248348 3248660 3999960 4000272 1126 3248662 3248946 4000274 4000558 1026 # chain 2515: length 1 score 1112 3249840 3250148 4001450 4001758 1112 # chain 2516: length 1 score 1972 3250565 3251112 4002174 4002721 1972 # chain 2517: length 1 score 777 3251458 3251673 4003067 4003282 777 # chain 2518: length 1 score 1285 3251774 3252130 4003383 4003739 1285 # chain 2519: length 1 score 1022 3253092 3253375 4004701 4004984 1022 # chain 2520: length 1 score 856 3253503 3253740 4005112 4005349 856 # chain 2521: length 1 score 1281 3253993 3254348 4005601 4005956 1281 # chain 2522: length 1 score 820 3255615 3255842 4007221 4007448 820 # chain 2523: length 1 score 795 3256405 3256625 4008011 4008231 795 # chain 2524: length 1 score 1771 3256891 3257382 4008498 4008989 1771 # chain 2525: length 1 score 806 3259241 3259464 4010849 4011072 806 # chain 2526: length 1 score 795 3260420 3260640 4012028 4012248 795 # chain 2527: length 1 score 1126 3260751 3261063 4012359 4012671 1126 # chain 2528: length 1 score 871 3261585 3261826 4013193 4013434 871 # chain 2529: length 2 score 4373 3261954 3262468 4013562 4014076 1854 3262470 3263170 4014078 4014778 2523 # chain 2530: length 1 score 1764 3263460 3263949 4015068 4015557 1764 # chain 2531: length 1 score 1044 3263951 3264240 4015559 4015848 1044 # chain 2532: length 1 score 806 3264266 3264489 4015874 4016097 806 # chain 2533: length 1 score 1011 3264527 3264807 4016135 4016415 1011 # chain 2534: length 1 score 770 3264849 3265062 4016457 4016670 770 # chain 2535: length 1 score 946 3265251 3265513 4016859 4017121 946 # chain 2536: length 1 score 756 3266461 3266670 4018069 4018278 756 # chain 2537: length 1 score 2595 3267784 3268504 4018998 4019718 2595 # chain 2538: length 1 score 1303 3268674 3269035 4019888 4020249 1303 # chain 2539: length 4 score 5077 3269292 3269587 4020506 4020801 1065 3269589 3269983 4020803 4021197 1422 3269985 3270250 4021199 4021464 957 3270252 3270708 4021466 4021922 1645 # chain 2540: length 1 score 871 3271034 3271275 4022248 4022489 871 # chain 2541: length 1 score 838 3271469 3271701 4022683 4022915 838 # chain 2542: length 1 score 806 3272144 3272367 4023358 4023581 806 # chain 2543: length 1 score 802 3272372 3272594 4023586 4023808 802 # chain 2544: length 1 score 1177 3273375 3273701 4024589 4024915 1177 # chain 2545: length 1 score 1231 3274479 3274820 4025693 4026034 1231 # chain 2546: length 1 score 874 3274865 3275107 4026079 4026321 874 # chain 2547: length 1 score 946 3275713 3275975 4026927 4027189 946 # chain 2548: length 2 score 2295 3276647 3276864 4027861 4028078 784 3276866 3277286 4028080 4028500 1515 # chain 2549: length 1 score 1170 3277530 3277854 4028744 4029068 1170 # chain 2550: length 1 score 860 3277956 3278194 4029170 4029408 860 # chain 2551: length 1 score 727 3279503 3279704 4033022 4033223 727 # chain 2552: length 1 score 781 3280091 3280307 4033610 4033826 781 # chain 2553: length 1 score 1026 3280515 3280799 4034034 4034318 1026 # chain 2554: length 1 score 774 3281503 3281717 4035022 4035236 774 # chain 2555: length 1 score 860 3282107 3282345 4035626 4035864 860 # chain 2556: length 1 score 838 3282376 3282608 4035895 4036127 838 # chain 2557: length 1 score 874 3282964 3283206 4036483 4036725 874 # chain 2558: length 1 score 1281 3283283 3283638 4036802 4037157 1281 # chain 2559: length 1 score 727 3284201 3284402 4037720 4037921 727 # chain 2560: length 1 score 900 3286661 3286910 4040180 4040429 900 # chain 2561: length 1 score 1242 3287555 3287899 4041074 4041418 1242 # chain 2562: length 1 score 738 3288084 3288288 4041603 4041807 738 # chain 2563: length 1 score 1292 3288551 3288909 4042070 4042428 1292 # chain 2564: length 1 score 878 3289062 3289305 4042581 4042824 878 # chain 2565: length 1 score 723 3289655 3289855 4044132 4044332 723 # chain 2566: length 2 score 2533 3289877 3290113 4044354 4044590 853 3290115 3290582 4044592 4045059 1684 # chain 2567: length 1 score 1288 3290755 3291112 4045232 4045589 1288 # chain 2568: length 1 score 759 3291114 3291324 4045591 4045801 759 # chain 2569: length 1 score 1681 3291448 3291914 4045925 4046391 1681 # chain 2570: length 1 score 961 3294415 3294681 4048892 4049158 961 # chain 2571: length 1 score 788 3295677 3295895 4050154 4050372 788 # chain 2572: length 1 score 1454 3296398 3296801 4050875 4051278 1454 # chain 2573: length 1 score 720 3297543 3297742 4052020 4052219 720 # chain 2574: length 1 score 1213 3298340 3298676 4052817 4053153 1213 # chain 2575: length 1 score 2113 3298774 3299360 4053251 4053837 2113 # chain 2576: length 1 score 784 3299731 3299948 4054208 4054425 784 # chain 2577: length 2 score 1778 3300663 3300927 4055140 4055404 954 3300929 3301158 4055406 4055635 828 # chain 2578: length 1 score 799 3302463 3302684 4056939 4057160 799 # chain 2579: length 1 score 1839 3302991 3303501 4057467 4057977 1839 # chain 2580: length 2 score 5406 3305400 3306657 4059876 4061133 4528 3306659 3306903 4061135 4061379 882 # chain 2581: length 1 score 1044 3307568 3307857 4062044 4062333 1044 # chain 2582: length 2 score 2908 3308687 3309085 4063163 4063561 1436 3309087 3309496 4063563 4063972 1476 # chain 2583: length 1 score 1080 3311453 3311752 4065930 4066229 1080 # chain 2584: length 1 score 946 3311877 3312139 4066354 4066616 946 # chain 2585: length 1 score 828 3312567 3312796 4067044 4067273 828 # chain 2586: length 1 score 3319 3313095 3314016 4067572 4068493 3319 # chain 2587: length 1 score 990 3314043 3314317 4068520 4068794 990 # chain 2588: length 1 score 828 3314619 3314848 4069096 4069325 828 # chain 2589: length 1 score 781 3314994 3315210 4069471 4069687 781 # chain 2590: length 1 score 2325 3315237 3315882 4069714 4070359 2325 # chain 2591: length 1 score 950 3316069 3316332 4070546 4070809 950 # chain 2592: length 1 score 1216 3316334 3316671 4070811 4071148 1216 # chain 2593: length 1 score 813 3317022 3317247 4071499 4071724 813 # chain 2594: length 1 score 1029 3317926 3318211 4072403 4072688 1029 # chain 2595: length 1 score 824 3319575 3319803 4074052 4074280 824 # chain 2596: length 1 score 1000 3320704 3320981 4075181 4075458 1000 # chain 2597: length 1 score 799 3321517 3321738 4075994 4076215 799 # chain 2598: length 1 score 1098 3321794 3322098 4076271 4076575 1098 # chain 2599: length 2 score 2684 3322373 3322738 4076850 4077215 1317 3322740 3323120 4077217 4077597 1371 # chain 2600: length 1 score 1022 3323296 3323579 4077773 4078056 1022 # chain 2601: length 1 score 792 3323791 3324010 4078268 4078487 792 # chain 2602: length 1 score 5518 3324289 3325821 4078766 4080298 5518 # chain 2603: length 1 score 1249 3326435 3326781 4080912 4081258 1249 # chain 2604: length 1 score 1638 3327152 3327606 4081629 4082083 1638 # chain 2605: length 1 score 741 3328286 3328491 4082617 4082822 741 # chain 2606: length 1 score 1339 3328573 3328944 4082904 4083275 1339 # chain 2607: length 1 score 2653 3329138 3329874 4083469 4084205 2653 # chain 2608: length 1 score 741 3330017 3330222 4084348 4084553 741 # chain 2609: length 1 score 4644 3330305 3331594 4084636 4085925 4644 # chain 2610: length 1 score 1119 3332630 3332940 4086962 4087272 1119 # chain 2611: length 1 score 817 3332942 3333168 4087274 4087500 817 # chain 2612: length 1 score 806 3333452 3333675 4087784 4088007 806 # chain 2613: length 1 score 2318 3334040 3334683 4088372 4089015 2318 # chain 2614: length 2 score 1500 3335272 3335486 4089604 4089818 774 3335488 3335690 4089820 4090022 730 # chain 2615: length 1 score 1339 3336004 3336375 4090336 4090707 1339 # chain 2616: length 1 score 1087 3336407 3336708 4090739 4091040 1087 # chain 2617: length 2 score 4023 3336954 3337849 4091286 4092181 3225 3337851 3338073 4092183 4092405 802 # chain 2618: length 1 score 1432 3338209 3338606 4092541 4092938 1432 # chain 2619: length 1 score 1695 3338608 3339078 4092940 4093410 1695 # chain 2620: length 1 score 1126 3339276 3339588 4093608 4093920 1126 # chain 2621: length 1 score 878 3339755 3339998 4094087 4094330 878 # chain 2622: length 1 score 1026 3340842 3341126 4095174 4095458 1026 # chain 2623: length 2 score 1899 3341254 3341495 4095586 4095827 871 3341503 3341792 4095835 4096124 1044 # chain 2624: length 1 score 1965 3342146 3342691 4096478 4097023 1965 # chain 2625: length 1 score 914 3343431 3343684 4097763 4098016 914 # chain 2626: length 2 score 2044 3343782 3344130 4098114 4098462 1256 3344132 3344351 4098464 4098683 792 # chain 2627: length 1 score 799 3344464 3344685 4098796 4099017 799 # chain 2628: length 1 score 1126 3344687 3344999 4099019 4099331 1126 # chain 2629: length 1 score 889 3345364 3345610 4099696 4099942 889 # chain 2630: length 1 score 914 3345711 3345964 4100043 4100296 914 # chain 2631: length 1 score 878 3347531 3347774 4101863 4102106 878 # chain 2632: length 1 score 1044 3348585 3348874 4102918 4103207 1044 # chain 2633: length 1 score 1443 3349350 3349750 4103689 4104089 1443 # chain 2634: length 3 score 3389 3350193 3350608 4104532 4104947 1497 3350610 3350865 4104949 4105204 921 3350867 3351138 4105206 4105477 979 # chain 2635: length 1 score 932 3352255 3352513 4106593 4106851 932 # chain 2636: length 1 score 1767 3353622 3354112 4107960 4108450 1767 # chain 2637: length 1 score 1000 3356796 3357073 4111134 4111411 1000 # chain 2638: length 1 score 1094 3366139 3366442 4113372 4113675 1094 # chain 2639: length 1 score 835 3367797 3368028 4115030 4115261 835 # chain 2640: length 1 score 795 3370165 3370385 4117398 4117618 795 # chain 2641: length 1 score 1443 3370660 3371060 4117893 4118293 1443 # chain 2642: length 1 score 723 3371161 3371361 4118394 4118594 723 # chain 2643: length 1 score 2066 3371849 3372422 4119082 4119655 2066 # chain 2644: length 1 score 730 3373076 3373278 4120306 4120508 730 # chain 2645: length 1 score 2077 3373962 3374538 4121184 4121760 2077 # chain 2646: length 1 score 1346 3374755 3375128 4121977 4122350 1346 # chain 2647: length 1 score 914 3375420 3375673 4122642 4122895 914 # chain 2648: length 1 score 2829 3375711 3376496 4122933 4123718 2829 # chain 2649: length 1 score 1195 3376514 3376845 4123736 4124067 1195 # chain 2650: length 1 score 720 3377243 3377442 4124465 4124664 720 # chain 2651: length 2 score 3002 3377618 3378057 4124840 4125279 1584 3378059 3378453 4125281 4125675 1422 # chain 2652: length 3 score 3547 3379305 3379767 4126527 4126989 1666 3379769 3379970 4126991 4127192 727 3379972 3380294 4127194 4127516 1162 # chain 2653: length 1 score 1018 3381775 3382057 4128998 4129280 1018 # chain 2654: length 1 score 1375 3382203 3382584 4129426 4129807 1375 # chain 2655: length 1 score 3135 3382900 3383770 4130123 4130993 3135 # chain 2656: length 1 score 2617 3384948 3385674 4132172 4132898 2617 # chain 2657: length 1 score 1119 3386228 3386538 4133452 4133762 1119 # chain 2658: length 1 score 1112 3386569 3386877 4133790 4134098 1112 # chain 2659: length 1 score 734 3386989 3387192 4134210 4134413 734 # chain 2660: length 1 score 1303 3387265 3387626 4134486 4134847 1303 # chain 2661: length 1 score 763 3387934 3388145 4135155 4135366 763 # chain 2662: length 1 score 1760 3388256 3388744 4135477 4135965 1760 # chain 2663: length 1 score 828 3389365 3389594 4136586 4136815 828 # chain 2664: length 2 score 2101 3390014 3390275 4136960 4137221 943 3390277 3390599 4137223 4137545 1162 # chain 2665: length 1 score 792 3392293 3392512 4139239 4139458 792 # chain 2666: length 2 score 1630 3392557 3392786 4139503 4139732 828 3392788 3393011 4139734 4139957 806 # chain 2667: length 1 score 1000 3393173 3393450 4140118 4140395 1000 # chain 2668: length 1 score 1436 3393686 3394084 4140631 4141029 1436 # chain 2669: length 1 score 1497 3394140 3394555 4141085 4141500 1497 # chain 2670: length 1 score 1047 3395220 3395510 4142165 4142455 1047 # chain 2671: length 2 score 2361 3395701 3396052 4142646 4142997 1267 3396054 3396358 4142999 4143303 1098 # chain 2672: length 1 score 1119 3396638 3396948 4143583 4143893 1119 # chain 2673: length 1 score 892 3397136 3397383 4144081 4144328 892 # chain 2674: length 1 score 936 3397399 3397658 4144344 4144603 936 # chain 2675: length 1 score 720 3397963 3398162 4144908 4145107 720 # chain 2676: length 1 score 2203 3398383 3398994 4145328 4145939 2203 # chain 2677: length 4 score 4313 3399308 3399660 4146253 4146605 1270 3399662 3399972 4146607 4146917 1119 3399974 3400293 4146919 4147238 1152 3400295 3400512 4147240 4147457 784 # chain 2678: length 1 score 3254 3400791 3401694 4147736 4148639 3254 # chain 2679: length 1 score 1191 3401774 3402104 4148719 4149049 1191 # chain 2680: length 3 score 4696 3402738 3402963 4149683 4149908 813 3402965 3403364 4149910 4150309 1440 3403366 3404046 4150311 4150991 2451 # chain 2681: length 1 score 2257 3404282 3404908 4151227 4151853 2257 # chain 2682: length 1 score 1270 3405498 3405850 4152443 4152795 1270 # chain 2683: length 1 score 1425 3406435 3406830 4153380 4153775 1425 # chain 2684: length 1 score 1188 3407033 3407362 4153978 4154307 1188 # chain 2685: length 1 score 5817 3407602 3409217 4154547 4156162 5817 # chain 2686: length 1 score 1216 3409487 3409824 4156431 4156768 1216 # chain 2687: length 1 score 1324 3409826 3410193 4156770 4157137 1324 # chain 2688: length 1 score 2660 3410195 3410933 4157139 4157877 2660 # chain 2689: length 1 score 2095 3411367 3411948 4158311 4158892 2095 # chain 2690: length 1 score 849 3412181 3412416 4159125 4159360 849 # chain 2691: length 2 score 1917 3412553 3412778 4159497 4159722 813 3412780 3413087 4159724 4160031 1108 # chain 2692: length 1 score 936 3413710 3413969 4160654 4160913 936 # chain 2693: length 1 score 1123 3415878 3416189 4162867 4163178 1123 # chain 2694: length 1 score 2883 3417604 3418404 4164594 4165394 2883 # chain 2695: length 1 score 867 3418988 3419228 4165979 4166219 867 # chain 2696: length 1 score 964 3419651 3419918 4166642 4166909 964 # chain 2697: length 1 score 1306 3420023 3420385 4167014 4167376 1306 # chain 2698: length 1 score 1040 3421119 3421407 4168109 4168397 1040 # chain 2699: length 1 score 1184 3421879 3422207 4168871 4169199 1184 # chain 2700: length 2 score 2633 2724593 2724992 4168800 4169199 1440 2725002 2725338 4169209 4169545 1213 # chain 2701: length 1 score 1846 3422696 3423208 4169687 4170199 1846 # chain 2702: length 1 score 1839 2725482 2725992 4169689 4170199 1839 # chain 2703: length 1 score 2098 2726034 2726616 4170241 4170823 2098 # chain 2704: length 1 score 2098 3423250 3423832 4170241 4170823 2098 # chain 2705: length 1 score 1000 2726662 2726939 4170871 4171148 1000 # chain 2706: length 1 score 1000 3423878 3424155 4170871 4171148 1000 # chain 2707: length 1 score 990 2726941 2727215 4171150 4171424 990 # chain 2708: length 1 score 990 3424157 3424431 4171150 4171424 990 # chain 2709: length 1 score 5918 3424482 3426125 4171484 4173127 5918 # chain 2710: length 2 score 4725 2727586 2728585 4171810 4172809 3600 2728590 2728904 4172813 4173127 1134 # chain 2711: length 1 score 810 2729099 2729323 4173322 4173546 810 # chain 2712: length 1 score 1076 3426321 3426619 4173323 4173621 1076 # chain 2713: length 1 score 1915 3426774 3427305 4173775 4174306 1915 # chain 2714: length 1 score 2473 3428346 3429032 4175347 4176033 2473 # chain 2715: length 1 score 878 3429282 3429525 4176283 4176526 878 # chain 2716: length 1 score 1033 3430001 3430287 4177001 4177287 1033 # chain 2717: length 1 score 1213 3430453 3430789 4177454 4177790 1213 # chain 2718: length 1 score 1483 3431126 3431537 4178127 4178538 1483 # chain 2719: length 1 score 1407 3431698 3432088 4178699 4179089 1407 # chain 2720: length 2 score 1687 3432565 3432830 4179566 4179831 957 3432832 3433035 4179833 4180036 734 # chain 2721: length 1 score 752 3434766 3434974 4181767 4181975 752 # chain 2722: length 2 score 2061 3435183 3435478 4182184 4182479 1065 3435480 3435757 4182481 4182758 1000 # chain 2723: length 1 score 730 3436077 3436279 4183078 4183280 730 # chain 2724: length 2 score 14388 3437201 3439353 4184202 4186354 7750 3439355 3441199 4186356 4188200 6642 # chain 2725: length 1 score 2070 3441372 3441946 4188373 4188947 2070 # chain 2726: length 1 score 1933 3441948 3442484 4188949 4189485 1933 # chain 2727: length 6 score 21134 3442567 3445133 4189568 4192134 9241 3445135 3445932 4192136 4192933 2872 3445934 3446766 4192935 4193767 2998 3446768 3447008 4193769 4194009 867 3447010 3447961 4194011 4194962 3427 3447963 3448448 4194964 4195449 1749 # chain 2728: length 1 score 5587 3448621 3450172 4195622 4197173 5587 # chain 2729: length 1 score 3301 3450174 3451090 4197175 4198091 3301 # chain 2730: length 1 score 1465 3467941 3468347 4199836 4200242 1465 # chain 2731: length 5 score 8391 3468373 3468755 4200268 4200650 1378 3468757 3469776 4200652 4201671 3672 3469778 3470013 4201673 4201908 849 3470015 3470337 4201910 4202232 1162 3470339 3470712 4202234 4202607 1346 # chain 2732: length 1 score 1479 3470837 3471247 4202732 4203142 1479 # chain 2733: length 1 score 3895 3471249 3472330 4203144 4204225 3895 # chain 2734: length 2 score 3862 3473266 3474010 4205161 4205905 2682 3474012 3474340 4205907 4206235 1184 # chain 2735: length 1 score 738 3474751 3474955 4206646 4206850 738 # chain 2736: length 1 score 1321 3475166 3475532 4207061 4207427 1321 # chain 2737: length 1 score 2170 3475706 3476308 4207601 4208203 2170 # chain 2738: length 2 score 2418 3478532 3479001 4210427 4210896 1692 3479003 3479205 4210898 4211100 730 # chain 2739: length 1 score 1465 3479381 3479787 4211276 4211682 1465 # chain 2740: length 1 score 774 3480317 3480531 4212212 4212426 774 # chain 2741: length 1 score 788 3480674 3480892 4212569 4212787 788 # chain 2742: length 1 score 1645 3481588 3482044 4213483 4213939 1645 # chain 2743: length 1 score 946 3483129 3483391 4215024 4215286 946 # chain 2744: length 2 score 2508 3483405 3483901 4215300 4215796 1789 3483903 3484103 4215798 4215998 723 # chain 2745: length 1 score 1774 3484812 3485304 4216707 4217199 1774 # chain 2746: length 1 score 1152 3486203 3486522 4218098 4218417 1152 # chain 2747: length 1 score 752 3487530 3487738 4219425 4219633 752 # chain 2748: length 1 score 817 3488086 3488312 4219981 4220207 817 # chain 2749: length 1 score 1918 3489056 3489588 4220951 4221483 1918 # chain 2750: length 2 score 4164 3489620 3490343 4221515 4222238 2606 3490345 3490778 4222240 4222673 1562 # chain 2751: length 1 score 1504 3491552 3491969 4223447 4223864 1504 # chain 2752: length 1 score 1033 3492244 3492530 4224139 4224425 1033 # chain 2753: length 1 score 1620 3493357 3493806 4225252 4225701 1620 # chain 2754: length 2 score 2721 3494018 3494564 4225913 4226459 1969 3494566 3494775 4226461 4226670 756 # chain 2755: length 1 score 1994 3495233 3495786 4227128 4227681 1994 # chain 2756: length 1 score 831 3497732 3497962 4229636 4229866 831 # chain 2757: length 1 score 990 3498221 3498495 4230125 4230399 990 # chain 2758: length 1 score 817 3500412 3500638 4232316 4232542 817 # chain 2759: length 1 score 914 3502130 3502383 4234034 4234287 914 # chain 2760: length 2 score 1460 3511022 3511224 4235206 4235408 730 3511226 3511429 4235410 4235613 734 # chain 2761: length 1 score 892 3511479 3511726 4235663 4235910 892 # chain 2762: length 1 score 806 3512254 3512477 4236438 4236661 806 # chain 2763: length 1 score 1126 3512572 3512884 4236756 4237068 1126 # chain 2764: length 2 score 2788 3513156 3513713 4237340 4237897 2008 3513715 3513932 4237899 4238116 784 # chain 2765: length 2 score 4108 3514385 3515230 4238569 4239414 3045 3515240 3515540 4239424 4239724 1083 # chain 2766: length 1 score 1677 3515918 3516383 4240102 4240567 1677 # chain 2767: length 1 score 1342 3516385 3516757 4240569 4240941 1342 # chain 2768: length 1 score 817 3516759 3516985 4240943 4241169 817 # chain 2769: length 3 score 3065 3516987 3517215 4241171 4241399 824 3517217 3517614 4241401 4241798 1432 3517616 3517842 4241800 4242026 817 # chain 2770: length 1 score 792 3518195 3518414 4242379 4242598 792 # chain 2771: length 1 score 936 3518416 3518675 4242600 4242859 936 # chain 2772: length 1 score 1458 3520327 3520731 4244510 4244914 1458 # chain 2773: length 1 score 792 3520965 3521184 4245148 4245367 792 # chain 2774: length 1 score 914 3521285 3521538 4245468 4245721 914 # chain 2775: length 1 score 1594 3522164 3522606 4246347 4246789 1594 # chain 2776: length 1 score 2793 3523701 3524476 4247883 4248658 2793 # chain 2777: length 1 score 838 3524613 3524845 4248795 4249027 838 # chain 2778: length 1 score 1551 3525597 3526027 4249779 4250209 1551 # chain 2779: length 1 score 2138 3526302 3526895 4250484 4251077 2138 # chain 2780: length 1 score 1864 3526994 3527511 4251176 4251693 1864 # chain 2781: length 1 score 1292 3527798 3528156 4251980 4252338 1292 # chain 2782: length 1 score 3135 3529862 3530732 4254044 4254914 3135 # chain 2783: length 1 score 1303 3531598 3531959 4255780 4256141 1303 # chain 2784: length 1 score 1342 3533168 3533540 4257350 4257722 1342 # chain 2785: length 1 score 849 3533605 3533840 4257787 4258022 849 # chain 2786: length 1 score 2397 3533944 3534609 4258126 4258791 2397 # chain 2787: length 1 score 914 3534872 3535125 4259054 4259307 914 # chain 2788: length 1 score 1555 3535502 3535933 4259684 4260115 1555 # chain 2789: length 1 score 1234 3537716 3538058 4261881 4262223 1234 # chain 2790: length 1 score 975 3538118 3538388 4262283 4262553 975 # chain 2791: length 1 score 968 3538720 3538988 4262885 4263153 968 # chain 2792: length 1 score 849 3539188 3539423 4263353 4263588 849 # chain 2793: length 1 score 745 3542064 3542270 4266227 4266433 745 # chain 2794: length 1 score 763 3543166 3543377 4267329 4267540 763 # chain 2795: length 1 score 932 3544363 3544621 4268530 4268788 932 # chain 2796: length 1 score 1119 3545028 3545338 4269195 4269505 1119 # chain 2797: length 1 score 957 3546156 3546421 4270257 4270522 957 # chain 2798: length 3 score 3315 3547430 3547650 4271531 4271751 795 3547653 3548003 4271754 4272104 1263 3548005 3548356 4272106 4272457 1267 # chain 2799: length 1 score 842 3548687 3548920 4272788 4273021 842 # chain 2800: length 1 score 950 3549389 3549652 4273490 4273753 950 # chain 2801: length 1 score 867 3549996 3550236 4274097 4274337 867 # chain 2802: length 1 score 1000 3550457 3550734 4274558 4274835 1000 # chain 2803: length 3 score 2928 3550966 3551195 4275067 4275296 828 3551197 3551564 4275298 4275665 1324 3551566 3551783 4275667 4275884 784 # chain 2804: length 1 score 849 3552517 3552752 4276618 4276853 849 # chain 2805: length 1 score 748 3557336 3557543 4282277 4282484 748 # chain 2806: length 1 score 892 3557579 3557826 4282520 4282767 892 # chain 2807: length 1 score 1641 3558241 3558696 4283182 4283637 1641 # chain 2808: length 1 score 777 3558933 3559148 4283874 4284089 777 # chain 2809: length 1 score 730 3559415 3559617 4284356 4284558 730 # chain 2810: length 1 score 1144 3559675 3559992 4284616 4284933 1144 # chain 2811: length 1 score 849 3560557 3560792 4285498 4285733 849 # chain 2812: length 1 score 1573 3561803 3562239 4289596 4290032 1573 # chain 2813: length 1 score 3560 3562646 3563634 4290439 4291427 3560 # chain 2814: length 1 score 1692 3563858 3564327 4291651 4292120 1692 # chain 2815: length 1 score 860 3564329 3564567 4292122 4292360 860 # chain 2816: length 1 score 1630 3564976 3565428 4292769 4293221 1630 # chain 2817: length 4 score 7231 3565472 3566159 4293265 4293952 2476 3566161 3566576 4293954 4294369 1497 3566584 3567271 4294377 4295064 2476 3567273 3567496 4295066 4295289 806 # chain 2818: length 1 score 1321 3567597 3567963 4295390 4295756 1321 # chain 2819: length 1 score 748 3568254 3568461 4296047 4296254 748 # chain 2820: length 1 score 2088 3568479 3569058 4296272 4296851 2088 # chain 2821: length 1 score 907 3569644 3569895 4297437 4297688 907 # chain 2822: length 1 score 903 3570512 3570762 4298305 4298555 903 # chain 2823: length 2 score 3689 3570926 3571649 4298719 4299442 2606 3571651 3571952 4299444 4299745 1087 # chain 2824: length 1 score 849 3572002 3572237 4299795 4300030 849 # chain 2825: length 1 score 1368 3572517 3572896 4300309 4300688 1368 # chain 2826: length 1 score 1191 3574565 3574895 4305813 4306143 1191 # chain 2827: length 1 score 1234 3576061 3576403 4307310 4307652 1234 # chain 2828: length 1 score 1267 3577052 3577403 4308301 4308652 1267 # chain 2829: length 1 score 817 3577465 3577691 4308714 4308940 817 # chain 2830: length 1 score 943 3582685 3582946 4312337 4312598 943 # chain 2831: length 1 score 1130 3587802 3588115 4317457 4317770 1130 # chain 2832: length 1 score 1443 3588568 3588968 4318224 4318624 1443 # chain 2833: length 1 score 1216 3589765 3590102 4319421 4319758 1216 # chain 2834: length 1 score 777 3590901 3591116 4321383 4321598 777 # chain 2835: length 1 score 856 3591778 3592015 4322260 4322497 856 # chain 2836: length 1 score 2005 3594259 3594815 4324741 4325297 2005 # chain 2837: length 2 score 2083 3596756 3597003 4327997 4328244 892 3597005 3597336 4328246 4328577 1195 # chain 2838: length 1 score 936 3597836 3598095 4329077 4329336 936 # chain 2839: length 2 score 2173 3598136 3598539 4329377 4329780 1454 3598541 3598741 4329782 4329982 723 # chain 2840: length 1 score 2098 3600034 3600616 4331275 4331857 2098 # chain 2841: length 1 score 838 3601152 3601384 4332393 4332625 838 # chain 2842: length 1 score 1720 3601778 3602255 4333022 4333499 1720 # chain 2843: length 1 score 1260 3603197 3603546 4334441 4334790 1260 # chain 2844: length 1 score 1198 3603984 3604316 4335228 4335560 1198 # chain 2845: length 1 score 957 3605752 3606017 4336996 4337261 957 # chain 2846: length 1 score 979 3606688 3606959 4337932 4338203 979 # chain 2847: length 1 score 2534 3607216 3607919 4338460 4339163 2534 # chain 2848: length 1 score 2084 3609449 3610027 4340693 4341271 2084 # chain 2849: length 1 score 1011 3610194 3610474 4341438 4341718 1011 # chain 2850: length 1 score 766 3610579 3610791 4357178 4357390 766 # chain 2851: length 1 score 1677 3611118 3611583 4357717 4358182 1677 # chain 2852: length 1 score 1278 3612710 3613064 4359309 4359663 1278 # chain 2853: length 1 score 925 3626702 3626958 4373174 4373430 925 # chain 2854: length 1 score 741 3628331 3628536 4374804 4375009 741 # chain 2855: length 1 score 936 3633949 3634208 4380431 4380690 936 # chain 2856: length 1 score 1119 3634864 3635174 4381346 4381656 1119 # chain 2857: length 1 score 1033 3635619 3635905 4382102 4382388 1033 # chain 2858: length 1 score 1270 3636126 3636478 4382609 4382961 1270 # chain 2859: length 1 score 1249 3637117 3637463 4383427 4383773 1249 # chain 2860: length 1 score 1087 3638371 3638672 4384682 4384983 1087 # chain 2861: length 1 score 1227 3639178 3639518 4385489 4385829 1227 # chain 2862: length 1 score 2019 3640481 3641041 4386792 4387352 2019 # chain 2863: length 1 score 885 3642959 3643204 4389270 4389515 885 # chain 2864: length 1 score 795 3644078 3644298 4390389 4390609 795 # chain 2865: length 1 score 936 3647398 3647657 4393713 4393972 936 # chain 2866: length 2 score 1601 3647716 3647954 4394031 4394269 860 3647956 3648162 4394271 4394477 745 # chain 2867: length 1 score 763 3649454 3649665 4395768 4395979 763 # chain 2868: length 2 score 3009 3651810 3652304 4396924 4397418 1782 3652306 3652647 4397420 4397761 1231 # chain 2869: length 1 score 759 3652939 3653149 4407075 4407285 759 # chain 2870: length 1 score 2714 3653920 3654673 4408056 4408809 2714 # chain 2871: length 1 score 1350 3654825 3655199 4408961 4409335 1350 # chain 2872: length 2 score 3520 3655965 3656738 4410101 4410874 2786 3656740 3656944 4410876 4411080 738 # chain 2873: length 1 score 2210 3656993 3657606 4411129 4411742 2210 # chain 2874: length 1 score 1076 3657893 3658191 4412029 4412327 1076 # chain 2875: length 2 score 1695 3659093 3659319 4413229 4413455 817 3659321 3659565 4413457 4413701 882 # chain 2876: length 1 score 1314 3660257 3660621 4414393 4414757 1314 # chain 2877: length 1 score 871 3660857 3661098 4414993 4415234 871 # chain 2878: length 1 score 954 3661745 3662009 4415881 4416145 954 # chain 2879: length 1 score 835 3662409 3662640 4416545 4416776 835 # chain 2880: length 1 score 1051 3663766 3664057 4417903 4418194 1051 # chain 2881: length 1 score 849 3665082 3665317 4419219 4419454 849 # chain 2882: length 1 score 892 3666000 3666247 4420137 4420384 892 # chain 2883: length 1 score 1746 3666534 3667018 4420671 4421155 1746 # chain 2884: length 1 score 1486 3667554 3667966 4421692 4422104 1486 # chain 2885: length 1 score 741 3668010 3668215 4422148 4422353 741 # chain 2886: length 1 score 1584 3668721 3669160 4422859 4423298 1584 # chain 2887: length 1 score 1281 3669276 3669631 4423414 4423769 1281 # chain 2888: length 1 score 1216 3671681 3672018 4425819 4426156 1216 # chain 2889: length 1 score 903 3672508 3672758 4426647 4426897 903 # chain 2890: length 2 score 3480 3672949 3673647 4427088 4427786 2516 3673649 3673917 4427788 4428056 968 # chain 2891: length 1 score 1069 3674645 3674941 4428784 4429080 1069 # chain 2892: length 1 score 860 3675309 3675547 4429448 4429686 860 # chain 2893: length 1 score 968 3675870 3676138 4430009 4430277 968 # chain 2894: length 1 score 1519 3676916 3677337 4431055 4431476 1519 # chain 2895: length 1 score 882 3677402 3677646 4431541 4431785 882 # chain 2896: length 1 score 784 3677652 3677869 4431791 4432008 784 # chain 2897: length 1 score 828 3678398 3678627 4432537 4432766 828 # chain 2898: length 1 score 730 3678911 3679113 4433050 4433252 730 # chain 2899: length 2 score 7361 3679160 3679838 4433299 4433977 2444 3679840 3681206 4433979 4435345 4921 # chain 2900: length 1 score 1533 3681735 3682160 4435874 4436299 1533 # chain 2901: length 1 score 867 3682412 3682652 4436551 4436791 867 # chain 2902: length 1 score 1249 3683081 3683427 4437220 4437566 1249 # chain 2903: length 2 score 2065 3685228 3685473 4439367 4439612 885 3685475 3685803 4439614 4439942 1184 # chain 2904: length 1 score 734 3686446 3686649 4440575 4440778 734 # chain 2905: length 1 score 1015 3688282 3688563 4442430 4442711 1015 # chain 2906: length 1 score 720 3688836 3689035 4442984 4443183 720 # chain 2907: length 1 score 957 3689145 3689410 4443293 4443558 957 # chain 2908: length 1 score 2376 3690180 3690839 4444328 4444987 2376 # chain 2909: length 1 score 838 3690937 3691169 4445085 4445317 838 # chain 2910: length 1 score 925 3691954 3692210 4446102 4446358 925 # chain 2911: length 1 score 1101 3693101 3693406 4447249 4447554 1101 # chain 2912: length 2 score 2235 3693748 3693984 4447896 4448132 853 3693986 3694370 4448134 4448518 1386 # chain 2913: length 3 score 4998 3694620 3695510 4448768 4449658 3207 3695512 3695799 4449660 4449947 1036 3695801 3696012 4449949 4450160 763 # chain 2914: length 1 score 2055 3696029 3696599 4450177 4450747 2055 # chain 2915: length 1 score 813 3697983 3698208 4452131 4452356 813 # chain 2916: length 1 score 817 3699097 3699323 4453245 4453471 817 # chain 2917: length 1 score 788 3701424 3701642 4455572 4455790 788 # chain 2918: length 1 score 1051 3703997 3704288 4457988 4458279 1051 # chain 2919: length 1 score 1404 3705185 3705574 4459176 4459565 1404 # chain 2920: length 1 score 763 3706198 3706409 4460023 4460234 763 # chain 2921: length 1 score 1022 3707862 3708145 4461687 4461970 1022 # chain 2922: length 1 score 846 3709603 3709837 4469181 4469415 846 # chain 2923: length 1 score 1134 3709933 3710247 4469511 4469825 1134 # chain 2924: length 1 score 1044 3710513 3710802 4470091 4470380 1044 # chain 2925: length 1 score 759 3711750 3711960 4471328 4471538 759 # chain 2926: length 1 score 1396 3712392 3712779 4471970 4472357 1396 # chain 2927: length 1 score 1918 3713289 3713821 4472867 4473399 1918 # chain 2928: length 1 score 1386 3714020 3714404 4473598 4473982 1386 # chain 2929: length 1 score 1544 3714676 3715104 4474254 4474682 1544 # chain 2930: length 1 score 1850 3716329 3716842 4475907 4476420 1850 # chain 2931: length 1 score 2808 3716983 3717762 4476561 4477340 2808 # chain 2932: length 1 score 842 3719705 3719938 4477879 4478112 842 # chain 2933: length 1 score 849 3720338 3720573 4478512 4478747 849 # chain 2934: length 1 score 936 3721244 3721503 4479418 4479677 936 # chain 2935: length 1 score 957 3721646 3721911 4479820 4480085 957 # chain 2936: length 1 score 925 3722279 3722535 4480453 4480709 925 # chain 2937: length 1 score 774 3722805 3723019 4480979 4481193 774 # chain 2938: length 1 score 745 3723075 3723281 4481249 4481455 745 # chain 2939: length 1 score 1908 3724433 3724962 4482607 4483136 1908 # chain 2940: length 1 score 1738 3726176 3726658 4484350 4484832 1738 # chain 2941: length 1 score 1317 3727281 3727646 4485455 4485820 1317 # chain 2942: length 2 score 3415 3728290 3728727 4486464 4486901 1576 3728729 3729240 4486903 4487414 1843 # chain 2943: length 1 score 738 3729276 3729480 4487450 4487654 738 # chain 2944: length 1 score 993 3730090 3730365 4488264 4488539 993 # chain 2945: length 2 score 3052 3730367 3730695 4488541 4488869 1184 3730697 3731216 4488871 4489390 1872 # chain 2946: length 1 score 1317 3731260 3731625 4489434 4489799 1317 # chain 2947: length 1 score 1659 3732559 3733019 4490733 4491193 1659 # chain 2948: length 1 score 1281 3734584 3734939 4492670 4493025 1281 # chain 2949: length 1 score 1728 3735668 3736147 4493754 4494233 1728 # chain 2950: length 1 score 835 3737155 3737386 4495241 4495472 835 # chain 2951: length 1 score 727 3737753 3737954 4495839 4496040 727 # chain 2952: length 1 score 810 3738089 3738313 4496175 4496399 810 # chain 2953: length 1 score 1191 3738729 3739059 4496816 4497146 1191 # chain 2954: length 1 score 1634 3748776 3749229 4502112 4502565 1634 # chain 2955: length 1 score 903 3749543 3749793 4502879 4503129 903 # chain 2956: length 1 score 774 3749867 3750081 4503203 4503417 774 # chain 2957: length 1 score 727 3750437 3750638 4503773 4503974 727 # chain 2958: length 1 score 1299 3751517 3751877 4504853 4505213 1299 # chain 2959: length 1 score 1083 3753515 3753815 4506851 4507151 1083 # chain 2960: length 2 score 2619 3754605 3754847 4509312 4509554 874 3754849 3755334 4509556 4510041 1749 # chain 2961: length 1 score 738 3755627 3755831 4510333 4510537 738 # chain 2962: length 1 score 1684 3756558 3757025 4511264 4511731 1684 # chain 2963: length 2 score 2317 3757315 3757756 4512021 4512462 1591 3757758 3757960 4512464 4512666 730 # chain 2964: length 3 score 6122 3758007 3758515 4512713 4513221 1832 3758517 3759460 4513223 4514166 3398 3759462 3759711 4514168 4514417 900 # chain 2965: length 1 score 1432 3759827 3760224 4514534 4514931 1432 # chain 2966: length 1 score 1206 3616903 3617237 4514597 4514931 1206 # chain 2967: length 1 score 1929 729222 729757 4514933 4515468 1929 # chain 2968: length 1 score 824 3760533 3760761 4515240 4515468 824 # chain 2969: length 1 score 810 3760763 3760987 4515470 4515694 810 # chain 2970: length 2 score 1630 3617546 3617774 4515240 4515468 824 3617776 3618000 4515470 4515694 810 # chain 2971: length 1 score 1054 730140 730432 4515851 4516143 1054 # chain 2972: length 1 score 1137 3761284 3761599 4515991 4516306 1137 # chain 2973: length 1 score 1137 3618297 3618612 4515991 4516306 1137 # chain 2974: length 1 score 1634 730483 730936 4516194 4516647 1634 # chain 2975: length 1 score 936 3762518 3762777 4517225 4517484 936 # chain 2976: length 1 score 936 3619531 3619790 4517225 4517484 936 # chain 2977: length 1 score 720 3762983 3763182 4517690 4517889 720 # chain 2978: length 1 score 4644 3763553 3764842 4518260 4519549 4644 # chain 2979: length 1 score 1123 3765234 3765545 4519941 4520252 1123 # chain 2980: length 1 score 1778 3765547 3766040 4520254 4520747 1778 # chain 2981: length 3 score 4818 3766051 3766618 4520758 4521325 2044 3766620 3767143 4521327 4521850 1886 3767145 3767393 4521852 4522100 896 # chain 2982: length 1 score 1216 3767458 3767795 4522164 4522501 1216 # chain 2983: length 1 score 1393 3767797 3768183 4522503 4522889 1393 # chain 2984: length 2 score 3253 3768185 3768870 4522891 4523576 2469 3768872 3769090 4523578 4523796 788 # chain 2985: length 2 score 5046 3769261 3770371 4523967 4525077 3999 3770373 3770664 4525079 4525370 1051 # chain 2986: length 1 score 817 3771966 3772192 4526537 4526763 817 # chain 2987: length 1 score 774 3773138 3773352 4527709 4527923 774 # chain 2988: length 1 score 1468 3773755 3774162 4528326 4528733 1468 # chain 2989: length 1 score 752 3776036 3776244 4536639 4536847 752 # chain 2990: length 1 score 1098 3776321 3776625 4536924 4537228 1098 # chain 2991: length 1 score 838 3776947 3777179 4537550 4537782 838 # chain 2992: length 1 score 997 3777313 3777589 4537916 4538192 997 # chain 2993: length 2 score 1785 3779808 3780062 4540399 4540653 918 3780064 3780305 4540655 4540896 871 # chain 2994: length 2 score 2533 3780713 3780996 4541304 4541587 1022 3780998 3781418 4541589 4542009 1515 # chain 2995: length 1 score 1450 3781555 3781957 4542146 4542548 1450 # chain 2996: length 2 score 2271 3782118 3782419 4542709 4543010 1087 3782421 3782750 4543012 4543341 1188 # chain 2997: length 1 score 1238 3783726 3784069 4544317 4544660 1238 # chain 2998: length 2 score 3550 3784331 3784597 4544922 4545188 961 3784602 3785323 4545193 4545914 2599 # chain 2999: length 1 score 1234 3786381 3786723 4546972 4547314 1234 # chain 3000: length 1 score 1346 3786899 3787272 4547491 4547864 1346 # chain 3001: length 1 score 1029 3787546 3787831 4548138 4548423 1029 # chain 3002: length 1 score 817 3788790 3789016 4549382 4549608 817 # chain 3003: length 1 score 864 3790002 3790241 4550594 4550833 864 # chain 3004: length 3 score 3781 3790278 3790613 4550870 4551205 1209 3790615 3790857 4551207 4551449 874 3790859 3791332 4551451 4551924 1706 # chain 3005: length 1 score 2548 3791360 3792067 4551953 4552660 2548 # chain 3006: length 1 score 1260 3792429 3792778 4553022 4553371 1260 # chain 3007: length 1 score 914 3792963 3793216 4553556 4553809 914 # chain 3008: length 1 score 1987 3793926 3794477 4554519 4555070 1987 # chain 3009: length 1 score 1008 3806077 3806356 4563696 4563975 1008 # chain 3010: length 1 score 1098 3806403 3806707 4564022 4564326 1098 # chain 3011: length 4 score 8075 3807195 3807668 4564814 4565287 1706 3807670 3808145 4565289 4565764 1713 3808147 3808399 4565766 4566018 910 3808401 3809444 4566020 4567063 3758 # chain 3012: length 1 score 1044 3809482 3809771 4567101 4567390 1044 # chain 3013: length 1 score 734 3810342 3810545 4567961 4568164 734 # chain 3014: length 1 score 1515 3810547 3810967 4568166 4568586 1515 # chain 3015: length 1 score 2509 3810969 3811665 4568588 4569284 2509 # chain 3016: length 1 score 1112 3812609 3812917 4570228 4570536 1112 # chain 3017: length 1 score 3783 3813764 3814814 4571384 4572434 3783 # chain 3018: length 1 score 781 3815632 3815848 4573252 4573468 781 # chain 3019: length 1 score 752 3816575 3816783 4574197 4574405 752 # chain 3020: length 1 score 1432 3816812 3817209 4574434 4574831 1432 # chain 3021: length 1 score 1083 3818185 3818485 4575807 4576107 1083 # chain 3022: length 1 score 1814 3818930 3819433 4576552 4577055 1814 # chain 3023: length 2 score 4265 3819549 3820522 4577171 4578144 3506 3820524 3820735 4578146 4578357 763 # chain 3024: length 1 score 968 3821010 3821278 4578632 4578900 968 # chain 3025: length 3 score 5430 3821979 3822839 4579601 4580461 3099 3822841 3823159 4580463 4580781 1148 3823161 3823491 4580783 4581113 1191 # chain 3026: length 1 score 1062 3825126 3825420 4583433 4583727 1062 # chain 3027: length 1 score 720 3825941 3826140 4584248 4584447 720 # chain 3028: length 1 score 3625 3826241 3827247 4584548 4585554 3625 # chain 3029: length 1 score 2498 3827315 3828008 4585622 4586315 2498 # chain 3030: length 1 score 741 3828323 3828528 4586630 4586835 741 # chain 3031: length 1 score 748 3828546 3828753 4586853 4587060 748 # chain 3032: length 2 score 1724 3829026 3829300 4587333 4587607 990 3829302 3829506 4587609 4587813 738 # chain 3033: length 1 score 1216 3832228 3832565 4590535 4590872 1216 # chain 3034: length 1 score 763 3833074 3833285 4591381 4591592 763 # chain 3035: length 1 score 990 3833441 3833715 4591748 4592022 990 # chain 3036: length 1 score 766 3833730 3833942 4592037 4592249 766 # chain 3037: length 1 score 795 3835805 3836025 4635899 4636119 795 # chain 3038: length 1 score 853 3838874 3839110 4638968 4639204 853 # chain 3039: length 1 score 874 3839922 3840164 4640815 4641057 874 # chain 3040: length 1 score 763 3840577 3840788 4641469 4641680 763 # chain 3041: length 1 score 1494 3841117 3841531 4642009 4642423 1494 # chain 3042: length 1 score 777 3842055 3842270 4642947 4643162 777 # chain 3043: length 1 score 1033 3844483 3844769 4645375 4645661 1033 # chain 3044: length 1 score 784 3850393 3850610 4654628 4654845 784 # chain 3045: length 1 score 932 3853134 3853392 4657369 4657627 932 # chain 3046: length 1 score 1209 3853647 3853982 4657882 4658217 1209 # chain 3047: length 1 score 907 3854970 3855221 4659206 4659457 907 # chain 3048: length 1 score 838 3855564 3855796 4659800 4660032 838 # chain 3049: length 1 score 1386 3856044 3856428 4660280 4660664 1386 # chain 3050: length 1 score 885 3857119 3857364 4661355 4661600 885 # chain 3051: length 1 score 849 3857692 3857927 4661928 4662163 849 # chain 3052: length 1 score 990 3858746 3859020 4662982 4663256 990 # chain 3053: length 1 score 730 3859488 3859690 4664232 4664434 730 # chain 3054: length 2 score 2598 3860661 3860920 4665405 4665664 936 3860922 3861384 4665666 4666128 1666 # chain 3055: length 1 score 727 3862311 3862512 4667055 4667256 727 # chain 3056: length 1 score 1206 3862995 3863329 4667739 4668073 1206 # chain 3057: length 1 score 1404 3864047 3864436 4668791 4669180 1404 # chain 3058: length 1 score 2001 3864714 3865269 4669458 4670013 2001 # chain 3059: length 2 score 1882 3873101 3873357 4673094 4673350 925 3873359 3873625 4673352 4673618 961 # chain 3060: length 1 score 1188 3874008 3874337 4674000 4674329 1188 # chain 3061: length 1 score 763 3875486 3875697 4675478 4675689 763 # chain 3062: length 2 score 2112 3877490 3877873 4677482 4677865 1382 3877884 3878092 4677876 4678084 752 # chain 3063: length 1 score 849 3879782 3880017 4679774 4680009 849 # chain 3064: length 3 score 3529 3880497 3880882 4680489 4680874 1389 3880884 3881112 4680876 4681104 824 3881114 3881481 4681106 4681473 1324 # chain 3065: length 3 score 4365 3881784 3882402 4681775 4682393 2228 3882404 3882683 4682395 4682674 1008 3882685 3883000 4682676 4682991 1137 # chain 3066: length 1 score 1177 3883532 3883858 4683523 4683849 1177 # chain 3067: length 1 score 792 3883860 3884079 4683851 4684070 792 # chain 3068: length 1 score 964 3884159 3884426 4684150 4684417 964 # chain 3069: length 1 score 1188 3887960 3888289 4690425 4690754 1188 # chain 3070: length 1 score 1346 3891377 3891750 4693842 4694215 1346 # chain 3071: length 1 score 741 3892613 3892818 4695078 4695283 741 # chain 3072: length 1 score 741 3893186 3893391 4695651 4695856 741 # chain 3073: length 1 score 1386 3905045 3905429 4705510 4705894 1386 # chain 3074: length 1 score 849 3907598 3907833 4708063 4708298 849 # chain 3075: length 1 score 928 3908983 3909240 4709448 4709705 928 # chain 3076: length 1 score 943 3911180 3911441 4718382 4718643 943 # chain 3077: length 1 score 957 3912307 3912572 4719509 4719774 957 # chain 3078: length 1 score 799 3912787 3913008 4719989 4720210 799 # chain 3079: length 3 score 4562 3913071 3913378 4720272 4720579 1108 3913380 3914138 4720581 4721339 2732 3914140 3914342 4721341 4721543 730 # chain 3080: length 1 score 1195 3914443 3914774 4721644 4721975 1195 # chain 3081: length 1 score 4482 3914848 3916092 4722049 4723293 4482 # chain 3082: length 1 score 990 3916211 3916485 4723412 4723686 990 # chain 3083: length 1 score 957 3916700 3916965 4723901 4724166 957 # chain 3084: length 1 score 1011 3916967 3917247 4724168 4724448 1011 # chain 3085: length 1 score 1659 3917273 3917733 4724474 4724934 1659 # chain 3086: length 3 score 11118 3917861 3919833 4725062 4727034 7102 3919835 3920254 4727036 4727455 1512 3920256 3920953 4727457 4728154 2512 # chain 3087: length 1 score 946 3921084 3921346 4728285 4728547 946 # chain 3088: length 1 score 1393 3921557 3921943 4728758 4729144 1393 # chain 3089: length 1 score 975 3922075 3922345 4729276 4729546 975 # chain 3090: length 1 score 763 3923190 3923401 4730391 4730602 763 # chain 3091: length 1 score 1638 3924356 3924810 4731557 4732011 1638 # chain 3092: length 1 score 914 3924947 3925200 4732148 4732401 914 # chain 3093: length 1 score 856 3925721 3925958 4732922 4733159 856 # chain 3094: length 3 score 3681 3928391 3928805 4735593 4736007 1494 3928807 3929180 4736009 4736382 1346 3929182 3929417 4736384 4736619 849 # chain 3095: length 1 score 982 3929869 3930141 4737071 4737343 982 # chain 3096: length 3 score 3386 3930676 3930940 4737879 4738143 954 3930942 3931172 4738145 4738375 831 3931174 3931620 4738377 4738823 1609 # chain 3097: length 1 score 1735 3932054 3932535 4739257 4739738 1735 # chain 3098: length 1 score 2019 3932573 3933133 4739776 4740336 2019 # chain 3099: length 1 score 907 3933261 3933512 4740464 4740715 907 # chain 3100: length 1 score 1951 3933609 3934150 4740812 4741353 1951 # chain 3101: length 2 score 2263 3934479 3934711 4741682 4741914 838 3934713 3935109 4741916 4742312 1429 # chain 3102: length 1 score 1908 3935165 3935694 4742368 4742897 1908 # chain 3103: length 1 score 3484 3935747 3936714 4742950 4743917 3484 # chain 3104: length 2 score 2763 3937378 3937780 4744581 4744983 1450 3937782 3938147 4744985 4745350 1317 # chain 3105: length 1 score 892 3938339 3938586 4745542 4745789 892 # chain 3106: length 1 score 820 3938726 3938953 4745932 4746159 820 # chain 3107: length 1 score 3582 4205631 4206625 4746543 4747537 3582 # chain 3108: length 1 score 3351 223741 224671 4746607 4747537 3351 # chain 3109: length 1 score 3283 4164227 4165138 4746626 4747537 3283 # chain 3110: length 1 score 3283 4033109 4034020 4746626 4747537 3283 # chain 3111: length 1 score 2786 3939656 3940429 4746862 4747635 2786 # chain 3112: length 1 score 781 224672 224888 4747537 4747753 781 # chain 3113: length 1 score 1378 4165275 4165657 4747673 4748055 1378 # chain 3114: length 1 score 1378 4034157 4034539 4747673 4748055 1378 # chain 3115: length 1 score 1378 4206762 4207144 4747673 4748055 1378 # chain 3116: length 1 score 1378 3940467 3940849 4747673 4748055 1378 # chain 3117: length 1 score 1083 224890 225190 4747755 4748055 1083 # chain 3118: length 1 score 1072 3941290 3941587 4748496 4748793 1072 # chain 3119: length 1 score 1026 4207599 4207883 4748509 4748793 1026 # chain 3120: length 1 score 2026 225736 226298 4748509 4749071 2026 # chain 3121: length 1 score 1018 4035078 4035360 4748511 4748793 1018 # chain 3122: length 1 score 1062 226308 226602 4749083 4749377 1062 # chain 3123: length 1 score 2232 3941876 3942495 4749083 4749702 2232 # chain 3124: length 3 score 4280 4166184 4166481 4748496 4748793 1072 4166483 4166760 4748795 4749072 1000 4166769 4167388 4749083 4749702 2232 # chain 3125: length 2 score 3212 4207885 4208162 4748795 4749072 1000 4208171 4208790 4749083 4749702 2232 # chain 3126: length 1 score 1166 226604 226927 4749379 4749702 1166 # chain 3127: length 3 score 5007 4035414 4035639 4748847 4749072 813 4035648 4036270 4749083 4749705 2242 4036272 4036820 4749707 4750255 1976 # chain 3128: length 1 score 1846 3942537 3943049 4749743 4750255 1846 # chain 3129: length 1 score 1839 4167430 4167940 4749743 4750253 1839 # chain 3130: length 1 score 1839 4208832 4209342 4749743 4750253 1839 # chain 3131: length 1 score 1782 226987 227481 4749761 4750255 1782 # chain 3132: length 1 score 2322 3943061 3943705 4750267 4750911 2322 # chain 3133: length 1 score 1213 4168084 4168420 4750397 4750733 1213 # chain 3134: length 1 score 1188 4036971 4037300 4750404 4750733 1188 # chain 3135: length 1 score 2538 4168430 4169134 4750743 4751447 2538 # chain 3136: length 2 score 3288 227623 227959 4750397 4750733 1213 227969 228550 4750743 4751324 2095 # chain 3137: length 2 score 3288 4209486 4209822 4750397 4750733 1213 4209832 4210413 4750743 4751324 2095 # chain 3138: length 1 score 2095 4037310 4037891 4750743 4751324 2095 # chain 3139: length 1 score 964 3943851 3944118 4751057 4751324 964 # chain 3140: length 1 score 1220 3944336 3944674 4751541 4751879 1220 # chain 3141: length 1 score 853 228768 229004 4751541 4751777 853 # chain 3142: length 1 score 842 3944802 3945035 4752007 4752240 842 # chain 3143: length 1 score 1533 3945350 3945775 4752556 4752981 1533 # chain 3144: length 1 score 972 3946383 3946652 4753589 4753858 972 # chain 3145: length 1 score 792 3947539 3947758 4754745 4754964 792 # chain 3146: length 1 score 946 3947893 3948155 4755099 4755361 946 # chain 3147: length 1 score 1231 3949865 3950206 4757073 4757414 1231 # chain 3148: length 1 score 774 3950601 3950815 4757809 4758023 774 # chain 3149: length 1 score 1062 3951168 3951462 4758379 4758673 1062 # chain 3150: length 1 score 1177 3953182 3953508 4760393 4760719 1177 # chain 3151: length 1 score 770 3954320 3954533 4761534 4761747 770 # chain 3152: length 1 score 817 3955253 3955479 4762467 4762693 817 # chain 3153: length 1 score 2131 3957900 3958491 4765080 4765671 2131 # chain 3154: length 1 score 892 3958966 3959213 4766146 4766393 892 # chain 3155: length 1 score 1000 3959407 3959684 4766587 4766864 1000 # chain 3156: length 2 score 4958 3960040 3960576 4767220 4767756 1933 3960579 3961420 4767759 4768600 3031 # chain 3157: length 1 score 867 3961588 3961828 4768768 4769008 867 # chain 3158: length 1 score 1238 3961830 3962173 4769010 4769353 1238 # chain 3159: length 1 score 727 3962188 3962389 4769368 4769569 727 # chain 3160: length 1 score 1108 3962454 3962761 4769634 4769941 1108 # chain 3161: length 2 score 5273 3963037 3963652 4770217 4770832 2217 3963654 3964503 4770834 4771683 3060 # chain 3162: length 1 score 1094 3965149 3965452 4772329 4772632 1094 # chain 3163: length 1 score 756 3965454 3965663 4772634 4772843 756 # chain 3164: length 1 score 892 3965878 3966125 4773058 4773305 892 # chain 3165: length 2 score 2660 3966524 3967018 4773704 4774198 1782 3967020 3967264 4774200 4774444 882 # chain 3166: length 1 score 1296 3967437 3967796 4774617 4774976 1296 # chain 3167: length 1 score 838 3967798 3968030 4774978 4775210 838 # chain 3168: length 1 score 2685 3969369 3970114 4776552 4777297 2685 # chain 3169: length 1 score 1249 3971252 3971598 4778435 4778781 1249 # chain 3170: length 1 score 1044 3972240 3972529 4779423 4779712 1044 # chain 3171: length 1 score 1616 3972638 3973086 4779821 4780269 1616 # chain 3172: length 1 score 982 3973882 3974154 4781065 4781337 982 # chain 3173: length 1 score 957 3974559 3974824 4781742 4782007 957 # chain 3174: length 1 score 835 3975080 3975311 4782263 4782494 835 # chain 3175: length 1 score 1422 3976549 3976943 4783731 4784125 1422 # chain 3176: length 1 score 867 3977350 3977590 4784532 4784772 867 # chain 3177: length 2 score 1759 3978430 3978700 4785612 4785882 975 3978702 3978920 4785884 4786102 788 # chain 3178: length 1 score 784 3979246 3979463 4786428 4786645 784 # chain 3179: length 1 score 3110 3979950 3980813 4787132 4787995 3110 # chain 3180: length 1 score 1256 3983060 3983408 4790252 4790600 1256 # chain 3181: length 1 score 1645 3983798 3984254 4790991 4791447 1645 # chain 3182: length 1 score 2404 3984350 3985017 4791543 4792210 2404 # chain 3183: length 2 score 2130 3985785 3985988 4792996 4793199 734 3985990 3986378 4793201 4793589 1400 # chain 3184: length 1 score 1342 3986526 3986898 4793737 4794109 1342 # chain 3185: length 1 score 921 3987329 3987584 4794540 4794795 921 # chain 3186: length 1 score 864 3988519 3988758 4795730 4795969 864 # chain 3187: length 1 score 961 3988758 3989024 4795970 4796236 961 # chain 3188: length 1 score 1584 3989842 3990281 4797054 4797493 1584 # chain 3189: length 1 score 903 3990574 3990824 4797786 4798036 903 # chain 3190: length 1 score 828 3991069 3991298 4798281 4798510 828 # chain 3191: length 1 score 907 3994640 3994891 4801852 4802103 907 # chain 3192: length 2 score 3048 3998658 3999242 4806754 4807338 2106 3999244 3999506 4807340 4807602 946 # chain 3193: length 1 score 817 4001721 4001947 4811588 4811814 817 # chain 3194: length 1 score 982 4002078 4002350 4811945 4812217 982 # chain 3195: length 1 score 795 4002433 4002653 4812300 4812520 795 # chain 3196: length 2 score 3282 4002679 4002974 4812546 4812841 1065 4002976 4003592 4812843 4813459 2221 # chain 3197: length 1 score 1735 4003651 4004132 4813518 4813999 1735 # chain 3198: length 1 score 1724 4004500 4004978 4814367 4814845 1724 # chain 3199: length 1 score 1209 4006636 4006971 4816508 4816843 1209 # chain 3200: length 1 score 1638 4007150 4007604 4817022 4817476 1638 # chain 3201: length 1 score 1018 4007907 4008189 4817781 4818063 1018 # chain 3202: length 1 score 1018 4009409 4009691 4819297 4819579 1018 # chain 3203: length 1 score 1512 4010714 4011133 4820601 4821020 1512 # chain 3204: length 1 score 1566 4012706 4013140 4822593 4823027 1566 # chain 3205: length 1 score 1501 4013300 4013716 4823188 4823604 1501 # chain 3206: length 2 score 6184 4013892 4014726 4823782 4824616 3006 4014737 4015625 4824627 4825515 3200 # chain 3207: length 1 score 1000 4015657 4015934 4825547 4825824 1000 # chain 3208: length 1 score 2221 4016125 4016741 4826015 4826631 2221 # chain 3209: length 1 score 2026 4016743 4017305 4826633 4827195 2026 # chain 3210: length 1 score 849 4017548 4017783 4827438 4827673 849 # chain 3211: length 1 score 817 4017785 4018011 4827675 4827901 817 # chain 3212: length 1 score 730 4018598 4018800 4828488 4828690 730 # chain 3213: length 4 score 6348 4018898 4019521 4828788 4829411 2246 4019523 4019855 4829413 4829745 1198 4019861 4020179 4829749 4830067 1148 4020181 4020673 4830069 4830561 1774 # chain 3214: length 1 score 1314 4020843 4021207 4830731 4831095 1314 # chain 3215: length 1 score 1245 4021209 4021554 4831097 4831442 1245 # chain 3216: length 1 score 936 4021683 4021942 4831570 4831829 936 # chain 3217: length 1 score 1188 4022289 4022618 4832176 4832505 1188 # chain 3218: length 1 score 828 4023615 4023844 4833502 4833731 828 # chain 3219: length 1 score 925 4024014 4024270 4833901 4834157 925 # chain 3220: length 1 score 1303 4024386 4024747 4834273 4834634 1303 # chain 3221: length 1 score 1497 4028184 4028599 4837882 4838297 1497 # chain 3222: length 1 score 986 4030642 4030915 4840340 4840613 986 # chain 3223: length 1 score 1342 4031326 4031698 4841024 4841396 1342 # chain 3224: length 1 score 871 4032014 4032255 4841713 4841954 871 # chain 3225: length 1 score 990 4032514 4032788 4842213 4842487 990 # chain 3226: length 1 score 1076 4205569 4205867 4842666 4842964 1076 # chain 3227: length 1 score 806 3939284 3939507 4842675 4842898 806 # chain 3228: length 1 score 1436 3939769 3940167 4843160 4843558 1436 # chain 3229: length 2 score 2375 4164576 4164974 4843160 4843558 1436 4164976 4165237 4843560 4843821 943 # chain 3230: length 2 score 2375 4033458 4033856 4843160 4843558 1436 4033858 4034119 4843560 4843821 943 # chain 3231: length 2 score 2375 4206063 4206461 4843160 4843558 1436 4206463 4206724 4843560 4843821 943 # chain 3232: length 1 score 1886 4165275 4165798 4843859 4844382 1886 # chain 3233: length 1 score 1864 4206762 4207279 4843859 4844376 1864 # chain 3234: length 1 score 1864 3940467 3940984 4843859 4844376 1864 # chain 3235: length 3 score 5301 224109 224507 4843160 4843558 1436 224509 224888 4843560 4843939 1368 224890 225585 4843941 4844636 2505 # chain 3236: length 2 score 3122 4034157 4034674 4843859 4844376 1864 4034682 4035035 4844384 4844737 1274 # chain 3237: length 1 score 741 3941255 3941460 4844739 4844944 741 # chain 3238: length 1 score 738 4166150 4166354 4844740 4844944 738 # chain 3239: length 1 score 766 225900 226112 4844951 4845163 766 # chain 3240: length 1 score 1062 226308 226602 4845361 4845655 1062 # chain 3241: length 1 score 2232 3941876 3942495 4845361 4845980 2232 # chain 3242: length 1 score 2232 4166769 4167388 4845361 4845980 2232 # chain 3243: length 1 score 2232 4208171 4208790 4845361 4845980 2232 # chain 3244: length 1 score 1166 226604 226927 4845657 4845980 1166 # chain 3245: length 2 score 3966 4035648 4036270 4845361 4845983 2242 4036272 4036751 4845985 4846464 1728 # chain 3246: length 1 score 1598 3942537 3942980 4846021 4846464 1598 # chain 3247: length 1 score 1598 4167430 4167873 4846021 4846464 1598 # chain 3248: length 1 score 1598 4208832 4209275 4846021 4846464 1598 # chain 3249: length 1 score 1533 226987 227412 4846039 4846464 1533 # chain 3250: length 1 score 2322 3943061 3943705 4846545 4847189 2322 # chain 3251: length 1 score 1188 4036971 4037300 4846682 4847011 1188 # chain 3252: length 2 score 3731 4168084 4168420 4846675 4847011 1213 4168430 4169134 4847021 4847725 2538 # chain 3253: length 2 score 3288 227623 227959 4846675 4847011 1213 227969 228550 4847021 4847602 2095 # chain 3254: length 2 score 3288 4209486 4209822 4846675 4847011 1213 4209832 4210413 4847021 4847602 2095 # chain 3255: length 1 score 2095 4037310 4037891 4847021 4847602 2095 # chain 3256: length 1 score 964 3943851 3944118 4847335 4847602 964 # chain 3257: length 1 score 2178 4038498 4039102 4848038 4848642 2178 # chain 3258: length 1 score 846 4039724 4039958 4849264 4849498 846 # chain 3259: length 2 score 2483 4040674 4040905 4850213 4850444 835 4040907 4041365 4850446 4850904 1652 # chain 3260: length 2 score 3289 4041665 4042311 4851205 4851851 2329 4042313 4042580 4851853 4852120 964 # chain 3261: length 1 score 1566 4042808 4043242 4852348 4852782 1566 # chain 3262: length 2 score 3127 4043940 4044491 4853480 4854031 1987 4044493 4044810 4854033 4854350 1144 # chain 3263: length 1 score 1670 4045175 4045638 4854715 4855178 1670 # chain 3264: length 1 score 1861 4046696 4047212 4856236 4856752 1861 # chain 3265: length 1 score 900 4047348 4047597 4856889 4857138 900 # chain 3266: length 1 score 738 4048169 4048373 4857710 4857914 738 # chain 3267: length 1 score 824 4048529 4048757 4858070 4858298 824 # chain 3268: length 1 score 1144 4049515 4049832 4859053 4859370 1144 # chain 3269: length 2 score 1911 4050350 4050549 4859888 4860087 720 4050551 4050882 4860089 4860420 1195 # chain 3270: length 1 score 741 4052298 4052503 4861797 4862002 741 # chain 3271: length 1 score 954 4052784 4053048 4862283 4862547 954 # chain 3272: length 1 score 741 4053818 4054023 4863317 4863522 741 # chain 3273: length 1 score 828 4055063 4055292 4864450 4864679 828 # chain 3274: length 1 score 3128 4055827 4056695 4865214 4866082 3128 # chain 3275: length 1 score 1972 4056823 4057370 4866210 4866757 1972 # chain 3276: length 1 score 946 4057496 4057758 4866883 4867145 946 # chain 3277: length 1 score 2178 4057779 4058383 4867167 4867771 2178 # chain 3278: length 1 score 831 4058682 4058912 4868070 4868300 831 # chain 3279: length 1 score 774 4058914 4059128 4868302 4868516 774 # chain 3280: length 1 score 1386 4059990 4060374 4869378 4869762 1386 # chain 3281: length 1 score 914 4065903 4066156 4875289 4875542 914 # chain 3282: length 1 score 1418 4070076 4070469 4880235 4880628 1418 # chain 3283: length 1 score 766 4071254 4071466 4881413 4881625 766 # chain 3284: length 1 score 806 4072146 4072369 4882305 4882528 806 # chain 3285: length 1 score 824 4073229 4073457 4883388 4883616 824 # chain 3286: length 1 score 1119 4073818 4074128 4883977 4884287 1119 # chain 3287: length 1 score 817 4074145 4074371 4884304 4884530 817 # chain 3288: length 2 score 3858 4074451 4074664 4884610 4884823 770 4074666 4075524 4884825 4885683 3092 # chain 3289: length 1 score 889 4075844 4076090 4886003 4886249 889 # chain 3290: length 1 score 1008 4076865 4077144 4889090 4889369 1008 # chain 3291: length 2 score 1878 4078137 4078378 4890361 4890602 871 4078380 4078660 4890604 4890884 1011 # chain 3292: length 1 score 2221 4078874 4079490 4891098 4891714 2221 # chain 3293: length 1 score 990 4079740 4080014 4891964 4892238 990 # chain 3294: length 1 score 1605 4080655 4081100 4892879 4893324 1605 # chain 3295: length 1 score 918 4082241 4082495 4894465 4894719 918 # chain 3296: length 4 score 5128 4082650 4083118 4894874 4895342 1688 4083120 4083610 4895344 4895834 1767 4083612 4083818 4895836 4896042 745 4083823 4084085 4896047 4896309 946 # chain 3297: length 1 score 1198 4084114 4084446 4896338 4896670 1198 # chain 3298: length 1 score 964 4084924 4085191 4897148 4897415 964 # chain 3299: length 1 score 766 4085768 4085980 4897991 4898203 766 # chain 3300: length 2 score 1730 4088405 4088620 4900628 4900843 777 4088622 4088887 4900845 4901110 957 # chain 3301: length 1 score 1314 4089204 4089568 4901415 4901779 1314 # chain 3302: length 1 score 1512 4093600 4094019 4907147 4907566 1512 # chain 3303: length 1 score 4406 4094283 4095506 4907830 4909053 4406 # chain 3304: length 1 score 1335 4095607 4095977 4909154 4909524 1335 # chain 3305: length 1 score 759 4097108 4097318 4910655 4910865 759 # chain 3306: length 1 score 1951 4097955 4098496 4911502 4912043 1951 # chain 3307: length 1 score 950 4099287 4099550 4912834 4913097 950 # chain 3308: length 1 score 774 4099936 4100150 4913483 4913697 774 # chain 3309: length 1 score 907 4100221 4100472 4913768 4914019 907 # chain 3310: length 1 score 1980 4101847 4102396 4915394 4915943 1980 # chain 3311: length 1 score 2473 4102832 4103518 4916379 4917065 2473 # chain 3312: length 1 score 1087 4103648 4103949 4917196 4917497 1087 # chain 3313: length 1 score 849 4104111 4104346 4917659 4917894 849 # chain 3314: length 2 score 1500 4104468 4104676 4918016 4918224 752 4104678 4104886 4918226 4918434 752 # chain 3315: length 1 score 1137 4105666 4105981 4919214 4919529 1137 # chain 3316: length 1 score 936 4106308 4106567 4919855 4920114 936 # chain 3317: length 1 score 1904 4107268 4107796 4920815 4921343 1904 # chain 3318: length 1 score 828 4108134 4108363 4921681 4921910 828 # chain 3319: length 1 score 1224 4108950 4109289 4922497 4922836 1224 # chain 3320: length 1 score 982 4109737 4110009 4923284 4923556 982 # chain 3321: length 2 score 1698 4110197 4110431 4923744 4923978 846 4110433 4110670 4923980 4924217 856 # chain 3322: length 1 score 954 4110942 4111206 4924489 4924753 954 # chain 3323: length 1 score 871 4112872 4113113 4926419 4926660 871 # chain 3324: length 1 score 1119 4113531 4113841 4927173 4927483 1119 # chain 3325: length 2 score 1932 4114131 4114333 4927773 4927975 730 4114335 4114669 4927977 4928311 1206 # chain 3326: length 1 score 1173 4115275 4115600 4928917 4929242 1173 # chain 3327: length 1 score 1648 4116503 4116960 4931583 4932040 1648 # chain 3328: length 1 score 1767 4117834 4118324 4932914 4933404 1767 # chain 3329: length 1 score 763 4118491 4118702 4933571 4933782 763 # chain 3330: length 1 score 1767 4118758 4119248 4933838 4934328 1767 # chain 3331: length 1 score 1746 4119603 4120087 4934683 4935167 1746 # chain 3332: length 1 score 1011 4120353 4120633 4935433 4935713 1011 # chain 3333: length 1 score 2721 4120662 4121417 4935742 4936497 2721 # chain 3334: length 1 score 853 4121652 4121888 4936732 4936968 853 # chain 3335: length 1 score 1213 4121923 4122259 4937003 4937339 1213 # chain 3336: length 1 score 1396 4124464 4124851 4939544 4939931 1396 # chain 3337: length 1 score 1015 3759943 3760224 4940178 4940459 1015 # chain 3338: length 1 score 1015 3616956 3617237 4940178 4940459 1015 # chain 3339: length 1 score 813 3760536 3760761 4940772 4940997 813 # chain 3340: length 1 score 813 3617549 3617774 4940772 4940997 813 # chain 3341: length 2 score 1766 729265 729530 4940505 4940770 957 729532 729757 4940772 4940997 813 # chain 3342: length 1 score 1054 730140 730432 4941381 4941673 1054 # chain 3343: length 1 score 1137 3761284 3761599 4941521 4941836 1137 # chain 3344: length 1 score 1137 3618297 3618612 4941521 4941836 1137 # chain 3345: length 1 score 1292 730483 730841 4941724 4942082 1292 # chain 3346: length 1 score 936 3762518 3762777 4942755 4943014 936 # chain 3347: length 1 score 936 3619531 3619790 4942755 4943014 936 # chain 3348: length 1 score 720 3762983 3763182 4943220 4943419 720 # chain 3349: length 1 score 1177 4125654 4125980 4946126 4946452 1177 # chain 3350: length 1 score 1267 4127211 4127562 4947683 4948034 1267 # chain 3351: length 1 score 748 4129938 4130145 4950410 4950617 748 # chain 3352: length 1 score 1040 4130200 4130488 4950672 4950960 1040 # chain 3353: length 1 score 882 4131927 4132171 4952399 4952643 882 # chain 3354: length 1 score 738 4135402 4135606 4955874 4956078 738 # chain 3355: length 1 score 1296 4136436 4136795 4956908 4957267 1296 # chain 3356: length 1 score 990 4137236 4137510 4957708 4957982 990 # chain 3357: length 1 score 817 4137555 4137781 4958027 4958253 817 # chain 3358: length 1 score 784 4137861 4138078 4958333 4958550 784 # chain 3359: length 1 score 828 4138590 4138819 4959062 4959291 828 # chain 3360: length 1 score 752 4139421 4139629 4959893 4960101 752 # chain 3361: length 1 score 1116 4139953 4140262 4960426 4960735 1116 # chain 3362: length 1 score 727 4141642 4141843 4962115 4962316 727 # chain 3363: length 1 score 1206 4142728 4143062 4963201 4963535 1206 # chain 3364: length 1 score 900 4143891 4144140 4964364 4964613 900 # chain 3365: length 1 score 806 4144322 4144545 4964795 4965018 806 # chain 3366: length 1 score 1076 4144994 4145292 4965467 4965765 1076 # chain 3367: length 1 score 968 4145384 4145652 4965857 4966125 968 # chain 3368: length 1 score 799 4145692 4145913 4966165 4966386 799 # chain 3369: length 1 score 1026 4146763 4147047 4967236 4967520 1026 # chain 3370: length 1 score 1062 4147330 4147624 4967803 4968097 1062 # chain 3371: length 1 score 1490 4149229 4149642 4969703 4970116 1490 # chain 3372: length 1 score 1087 4150207 4150508 4970681 4970982 1087 # chain 3373: length 1 score 1213 4150552 4150888 4971026 4971362 1213 # chain 3374: length 1 score 784 4151440 4151657 4971668 4971885 784 # chain 3375: length 1 score 1490 4151809 4152222 4972037 4972450 1490 # chain 3376: length 1 score 896 4152388 4152636 4972616 4972864 896 # chain 3377: length 1 score 1184 4153810 4154138 4974038 4974366 1184 # chain 3378: length 1 score 1062 4154273 4154567 4974501 4974795 1062 # chain 3379: length 1 score 1911 4155818 4156348 4976046 4976576 1911 # chain 3380: length 1 score 795 4156746 4156966 4976974 4977194 795 # chain 3381: length 1 score 1432 4157626 4158023 4977854 4978251 1432 # chain 3382: length 1 score 1058 4158157 4158450 4978385 4978678 1058 # chain 3383: length 1 score 1000 4158561 4158838 4981417 4981694 1000 # chain 3384: length 1 score 1292 4158861 4159219 4981717 4982075 1292 # chain 3385: length 1 score 1954 4160709 4161251 4983565 4984107 1954 # chain 3386: length 3 score 5154 4162354 4162742 4985210 4985598 1400 4162744 4163523 4985600 4986379 2808 4163525 4163789 4986381 4986645 954 # chain 3387: length 1 score 1566 4164001 4164435 4986857 4987291 1566 # chain 3388: length 2 score 1511 223760 223968 4987083 4987291 752 223970 224181 4987293 4987504 763 # chain 3389: length 1 score 763 4164437 4164648 4987293 4987504 763 # chain 3390: length 2 score 2325 4032883 4033317 4986857 4987291 1566 4033319 4033530 4987293 4987504 763 # chain 3391: length 2 score 1511 4205714 4205922 4987083 4987291 752 4205924 4206135 4987293 4987504 763 # chain 3392: length 1 score 1677 4164772 4165237 4987628 4988093 1677 # chain 3393: length 1 score 1677 4033654 4034119 4987628 4988093 1677 # chain 3394: length 1 score 1677 4206259 4206724 4987628 4988093 1677 # chain 3395: length 1 score 1321 3939965 3940331 4987628 4987994 1321 # chain 3396: length 1 score 1378 4165275 4165657 4988131 4988513 1378 # chain 3397: length 1 score 1378 4034157 4034539 4988131 4988513 1378 # chain 3398: length 1 score 1378 4206762 4207144 4988131 4988513 1378 # chain 3399: length 1 score 1378 3940467 3940849 4988131 4988513 1378 # chain 3400: length 2 score 3181 224305 224888 4987628 4988211 2102 224890 225190 4988213 4988513 1083 # chain 3401: length 1 score 1126 3941256 3941568 4988920 4989232 1126 # chain 3402: length 1 score 957 225736 226001 4988967 4989232 957 # chain 3403: length 1 score 950 4035078 4035341 4988969 4989232 950 # chain 3404: length 1 score 997 226022 226298 4989253 4989529 997 # chain 3405: length 1 score 2232 3941876 3942495 4989541 4990160 2232 # chain 3406: length 3 score 5123 4165950 4166462 4988720 4989232 1846 4166464 4166760 4989234 4989530 1069 4166769 4167388 4989541 4990160 2232 # chain 3407: length 3 score 4234 4207599 4207864 4988967 4989232 957 4207866 4208162 4989234 4989530 1069 4208171 4208790 4989541 4990160 2232 # chain 3408: length 2 score 2224 226308 226602 4989541 4989835 1062 226604 226927 4989837 4990160 1166 # chain 3409: length 3 score 4445 4035414 4035639 4989305 4989530 813 4035648 4036270 4989541 4990163 2242 4036272 4036664 4990165 4990557 1414 # chain 3410: length 1 score 1285 3942537 3942893 4990201 4990557 1285 # chain 3411: length 1 score 1285 4167430 4167786 4990201 4990557 1285 # chain 3412: length 1 score 1285 4208832 4209188 4990201 4990557 1285 # chain 3413: length 1 score 1220 226987 227325 4990219 4990557 1220 # chain 3414: length 1 score 1281 3943350 3943705 4991014 4991369 1281 # chain 3415: length 1 score 1594 4168430 4168872 4991201 4991643 1594 # chain 3416: length 1 score 1594 227969 228411 4991201 4991643 1594 # chain 3417: length 1 score 1594 4209832 4210274 4991201 4991643 1594 # chain 3418: length 1 score 1594 4037310 4037752 4991201 4991643 1594 # chain 3419: length 1 score 939 4168874 4169134 4991645 4991905 939 # chain 3420: length 1 score 770 4170257 4170470 4992862 4993075 770 # chain 3421: length 1 score 3434 4172858 4173811 4995446 4996399 3434 # chain 3422: length 1 score 795 4173886 4174106 4996474 4996694 795 # chain 3423: length 2 score 6450 4174116 4175013 4996704 4997601 3232 4175015 4175909 4997603 4998497 3222 # chain 3424: length 1 score 1051 4175950 4176241 4998539 4998830 1051 # chain 3425: length 1 score 1065 4176243 4176538 4998832 4999127 1065 # chain 3426: length 1 score 1134 4176894 4177208 4999483 4999797 1134 # chain 3427: length 2 score 7174 4177351 4178584 4999819 5001052 4442 4178586 4179345 5001054 5001813 2736 # chain 3428: length 1 score 936 4179578 4179837 5002046 5002305 936 # chain 3429: length 1 score 774 4180073 4180287 5002541 5002755 774 # chain 3430: length 1 score 1141 4180289 4180605 5002757 5003073 1141 # chain 3431: length 1 score 871 4181117 4181358 5003585 5003826 871 # chain 3432: length 1 score 1220 4181831 4182169 5004299 5004637 1220 # chain 3433: length 1 score 860 4182488 4182726 5004956 5005194 860 # chain 3434: length 1 score 1108 4182882 4183189 5005350 5005657 1108 # chain 3435: length 1 score 1832 4183488 4183996 5005956 5006464 1832 # chain 3436: length 1 score 2106 4184046 4184630 5006514 5007098 2106 # chain 3437: length 1 score 817 4184817 4185043 5007285 5007511 817 # chain 3438: length 2 score 2634 4185045 4185443 5007513 5007911 1436 4185445 4185778 5007913 5008246 1202 # chain 3439: length 1 score 968 4186344 4186612 5008812 5009080 968 # chain 3440: length 1 score 2185 4186737 4187343 5009205 5009811 2185 # chain 3441: length 1 score 1558 4187861 4188293 5010258 5010690 1558 # chain 3442: length 1 score 838 4192163 4192395 5014560 5014792 838 # chain 3443: length 1 score 720 4192418 4192617 5014815 5015014 720 # chain 3444: length 1 score 1058 4192805 4193098 5015202 5015495 1058 # chain 3445: length 2 score 1752 4194087 4194323 5016484 5016720 853 4194325 4194575 5016722 5016972 903 # chain 3446: length 1 score 1098 4195053 4195357 5017450 5017754 1098 # chain 3447: length 1 score 1274 4195965 4196318 5018362 5018715 1274 # chain 3448: length 1 score 871 4197270 4197511 5019667 5019908 871 # chain 3449: length 1 score 2098 4197638 4198220 5020035 5020617 2098 # chain 3450: length 2 score 3144 4198698 4198935 5021095 5021332 856 4198943 4199582 5021340 5021979 2304 # chain 3451: length 1 score 766 4201392 4201604 5023768 5023980 766 # chain 3452: length 1 score 810 4204214 4204438 5026590 5026814 810 # chain 3453: length 1 score 2152 4204652 4205249 5027028 5027625 2152 # chain 3454: length 1 score 1468 4205569 4205976 5027947 5028354 1468 # chain 3455: length 1 score 806 3939284 3939507 5027956 5028179 806 # chain 3456: length 1 score 1015 223741 224022 5028073 5028354 1015 # chain 3457: length 1 score 946 4164227 4164489 5028092 5028354 946 # chain 3458: length 1 score 946 4033109 4033371 5028092 5028354 946 # chain 3459: length 1 score 900 224183 224432 5028515 5028764 900 # chain 3460: length 1 score 900 4164650 4164899 5028515 5028764 900 # chain 3461: length 1 score 900 4033532 4033781 5028515 5028764 900 # chain 3462: length 1 score 900 4206137 4206386 5028515 5028764 900 # chain 3463: length 1 score 900 3939843 3940092 5028515 5028764 900 # chain 3464: length 1 score 2070 4165083 4165657 5028948 5029522 2070 # chain 3465: length 1 score 2070 4033965 4034539 5028948 5029522 2070 # chain 3466: length 1 score 2070 4206570 4207144 5028948 5029522 2070 # chain 3467: length 1 score 1868 3940331 3940849 5029004 5029522 1868 # chain 3468: length 1 score 1083 224890 225190 5029222 5029522 1083 # chain 3469: length 1 score 1195 3941256 3941587 5029929 5030260 1195 # chain 3470: length 1 score 2023 225736 226297 5029976 5030537 2023 # chain 3471: length 1 score 1018 4035078 4035360 5029978 5030260 1018 # chain 3472: length 2 score 2184 4166150 4166481 5029929 5030260 1195 4166483 4166758 5030262 5030537 993 # chain 3473: length 2 score 2015 4207599 4207883 5029976 5030260 1026 4207885 4208160 5030262 5030537 993 # chain 3474: length 1 score 806 4035414 4035637 5030314 5030537 806 # chain 3475: length 1 score 1227 4035754 4036094 5030654 5030994 1227 # chain 3476: length 1 score 1227 3941982 3942322 5030654 5030994 1227 # chain 3477: length 1 score 1227 4166875 4167215 5030654 5030994 1227 # chain 3478: length 1 score 1227 4208277 4208617 5030654 5030994 1227 # chain 3479: length 1 score 1767 3942559 3943049 5031230 5031720 1767 # chain 3480: length 1 score 1767 4036330 4036820 5031230 5031720 1767 # chain 3481: length 1 score 1767 226991 227481 5031230 5031720 1767 # chain 3482: length 1 score 1760 4167452 4167940 5031230 5031718 1760 # chain 3483: length 1 score 1760 4208854 4209342 5031230 5031718 1760 # chain 3484: length 1 score 2538 4168430 4169134 5032208 5032912 2538 # chain 3485: length 1 score 2095 227969 228550 5032208 5032789 2095 # chain 3486: length 1 score 2095 4209832 4210413 5032208 5032789 2095 # chain 3487: length 1 score 2095 4037310 4037891 5032208 5032789 2095 # chain 3488: length 1 score 964 3943851 3944118 5032522 5032789 964 # chain 3489: length 1 score 1634 4211637 4212090 5033606 5034059 1634 # chain 3490: length 2 score 3595 4213347 4213957 5035316 5035926 2199 4213959 4214347 5035928 5036316 1400 # chain 3491: length 1 score 975 4214481 4214751 5036450 5036720 975 # chain 3492: length 1 score 950 4217734 4217997 5039704 5039967 950 # chain 3493: length 1 score 738 4218639 4218843 5040609 5040813 738 # chain 3494: length 1 score 770 4220056 4220269 5042026 5042239 770 # chain 3495: length 2 score 1968 4220349 4220555 5042320 5042526 745 4220557 4220897 5042528 5042868 1227 # chain 3496: length 1 score 788 4221273 4221491 5043244 5043462 788 # chain 3497: length 1 score 784 4222189 4222406 5044160 5044377 784 # chain 3498: length 1 score 795 4223590 4223810 5045561 5045781 795 # chain 3499: length 1 score 849 4224226 4224461 5046197 5046432 849 # chain 3500: length 1 score 936 4224517 4224776 5046488 5046747 936 # chain 3501: length 1 score 1004 4225045 4225323 5047016 5047294 1004 # chain 3502: length 1 score 849 4225735 4225970 5047706 5047941 849 # chain 3503: length 1 score 1587 4229111 4229551 5057182 5057622 1587 # chain 3504: length 1 score 828 4229679 4229908 5057750 5057979 828 # chain 3505: length 1 score 1234 4229994 4230336 5058065 5058407 1234 # chain 3506: length 2 score 3156 4230657 4231155 5058728 5059226 1796 4231157 4231535 5059228 5059606 1364 # chain 3507: length 1 score 1072 4232285 4232582 5060356 5060653 1072 # chain 3508: length 1 score 835 4232761 4232992 5060832 5061063 835 # chain 3509: length 1 score 993 4233381 4233656 5061466 5061741 993 # chain 3510: length 1 score 748 4234440 4234647 5062525 5062732 748 # chain 3511: length 1 score 1141 4235356 4235672 5063441 5063757 1141 # chain 3512: length 1 score 1530 4237564 4237988 5065649 5066073 1530 # chain 3513: length 1 score 763 4238057 4238268 5066142 5066353 763 # chain 3514: length 2 score 2084 4238406 4238620 5066491 5066705 774 4238622 4238986 5066707 5067071 1314 # chain 3515: length 1 score 3060 4239483 4240332 5067568 5068417 3060 # chain 3516: length 1 score 990 4240577 4240851 5068662 5068936 990 # chain 3517: length 1 score 1152 4241194 4241513 5069279 5069598 1152 # chain 3518: length 1 score 990 4241860 4242134 5069945 5070219 990 # chain 3519: length 1 score 921 4242340 4242595 5070425 5070680 921 # chain 3520: length 1 score 986 4242692 4242965 5070777 5071050 986 # chain 3521: length 1 score 1108 4243246 4243553 5071331 5071638 1108 # chain 3522: length 1 score 1177 4243777 4244103 5071862 5072188 1177 # chain 3523: length 1 score 1148 4244267 4244585 5072352 5072670 1148 # chain 3524: length 2 score 3430 4244704 4245302 5072789 5073387 2156 4245304 4245658 5073389 5073743 1278 # chain 3525: length 1 score 763 4245858 4246069 5073943 5074154 763 # chain 3526: length 1 score 1461 4246359 4246764 5074444 5074849 1461 # chain 3527: length 1 score 1404 4247264 4247653 5075257 5075646 1404 # chain 3528: length 1 score 885 4247873 4248118 5075866 5076111 885 # chain 3529: length 1 score 979 4250222 4250493 5078215 5078486 979 # chain 3530: length 1 score 1364 4250517 4250895 5078510 5078888 1364 # chain 3531: length 2 score 2361 4253485 4253771 5081478 5081764 1033 4253773 4254142 5081766 5082135 1332 # chain 3532: length 1 score 892 4254248 4254495 5082241 5082488 892 # chain 3533: length 1 score 1069 4254560 4254856 5082553 5082849 1069 # chain 3534: length 1 score 1659 4256676 4257136 5084669 5085129 1659 # chain 3535: length 1 score 774 4259211 4259425 5087175 5087389 774 # chain 3536: length 1 score 813 4262253 4262478 5090217 5090442 813 # chain 3537: length 2 score 2627 4263080 4263430 5091044 5091394 1263 4263432 4263811 5091396 5091775 1368 # chain 3538: length 1 score 774 4264612 4264826 5092576 5092790 774 # chain 3539: length 2 score 2062 4267726 4267949 5095682 5095905 806 4267951 4268300 5095907 5096256 1260 # chain 3540: length 1 score 1494 4271274 4271688 5099230 5099644 1494 # chain 3541: length 1 score 871 4272543 4272784 5100500 5100741 871 # chain 3542: length 1 score 936 4274885 4275144 5102841 5103100 936 # chain 3543: length 1 score 1591 4275257 4275698 5103213 5103654 1591 # chain 3544: length 1 score 968 4275783 4276051 5103739 5104007 968 # chain 3545: length 1 score 1400 4276498 4276886 5104454 5104842 1400 # chain 3546: length 1 score 1116 4277592 4277901 5105547 5105856 1116 # chain 3547: length 1 score 1630 4278059 4278511 5106014 5106466 1630 # chain 3548: length 1 score 882 4278860 4279104 5106815 5107059 882 # chain 3549: length 1 score 1033 4280733 4281019 5108691 5108977 1033 # chain 3550: length 1 score 835 4282323 4282554 5110281 5110512 835 # chain 3551: length 1 score 954 4282634 4282898 5110592 5110856 954 # chain 3552: length 1 score 1177 4282979 4283305 5110938 5111264 1177 # chain 3553: length 1 score 1033 4283580 4283866 5111539 5111825 1033 # chain 3554: length 1 score 799 4284575 4284796 5112534 5112755 799 # chain 3555: length 2 score 2443 4284945 4285241 5112904 5113200 1069 4285243 4285625 5113202 5113584 1378 # chain 3556: length 1 score 2131 4285817 4286408 5113776 5114367 2131 # chain 3557: length 1 score 856 4286746 4286983 5114705 5114942 856 # chain 3558: length 1 score 1936 4287171 4287708 5115130 5115667 1936 # chain 3559: length 1 score 835 4287908 4288139 5115867 5116098 835 # chain 3560: length 1 score 849 4289459 4289694 5117418 5117653 849 # chain 3561: length 1 score 1699 4291742 4292213 5119701 5120172 1699 # chain 3562: length 1 score 1098 4294024 4294328 5121519 5121823 1098 # chain 3563: length 1 score 1098 4294488 4294792 5121983 5122287 1098 # chain 3564: length 3 score 2538 4295091 4295297 5122586 5122792 745 4295299 4295540 5122794 5123035 871 4295545 4295804 5123040 5123299 936 # chain 3565: length 1 score 838 4295971 4296203 5123466 5123698 838 # chain 3566: length 1 score 2890 4296217 4297019 5123712 5124514 2890 # chain 3567: length 1 score 774 4298256 4298470 5125751 5125965 774 # chain 3568: length 1 score 738 4298526 4298730 5126021 5126225 738 # chain 3569: length 1 score 838 4299245 4299477 5126740 5126972 838 # chain 3570: length 1 score 759 4300511 4300721 5128006 5128216 759 # chain 3571: length 1 score 802 4301558 4301780 5129053 5129275 802 # chain 3572: length 1 score 770 4301827 4302040 5129322 5129535 770 # chain 3573: length 1 score 1371 4303916 4304296 5131411 5131791 1371 # chain 3574: length 1 score 889 4312689 4312935 5142354 5142600 889 # chain 3575: length 1 score 784 4315512 4315729 5145178 5145395 784 # chain 3576: length 1 score 835 4318700 4318931 5148366 5148597 835 # chain 3577: length 2 score 1925 4323945 4324269 5153204 5153528 1170 4324271 4324481 5153530 5153740 759 # chain 3578: length 1 score 2192 4325926 4326534 5155186 5155794 2192 # chain 3579: length 1 score 806 4327141 4327364 5156401 5156624 806 # chain 3580: length 2 score 2828 4327881 4328194 5157141 5157454 1130 4328196 4328668 5157456 5157928 1702 # chain 3581: length 1 score 1022 4328796 4329079 5158056 5158339 1022 # chain 3582: length 1 score 763 4329081 4329292 5158341 5158552 763 # chain 3583: length 1 score 1483 4330003 4330414 5159263 5159674 1483 # chain 3584: length 1 score 1371 4330464 4330844 5159724 5160104 1371 # chain 3585: length 2 score 3959 4330881 4331442 5160141 5160702 2023 4331444 4331982 5160704 5161242 1940 # chain 3586: length 1 score 759 4333040 4333250 5162300 5162510 759 # chain 3587: length 1 score 1065 4334154 4334449 5163414 5163709 1065 # chain 3588: length 1 score 1047 4334499 4334789 5163759 5164049 1047 # chain 3589: length 1 score 756 4336113 4336322 5165373 5165582 756 # chain 3590: length 1 score 1083 4336393 4336693 5165653 5165953 1083 # chain 3591: length 1 score 925 4336927 4337183 5166187 5166443 925 # chain 3592: length 1 score 882 4337794 4338038 5167054 5167298 882 # chain 3593: length 1 score 1134 4338994 4339308 5168254 5168568 1134 # chain 3594: length 1 score 1306 4339353 4339715 5168613 5168975 1306 # chain 3595: length 1 score 903 4340892 4341142 5170152 5170402 903 # chain 3596: length 1 score 1353 4341624 4341999 5170884 5171259 1353 # chain 3597: length 3 score 2978 4344740 4344957 5174001 5174218 784 4344959 4345211 5174220 5174472 910 4345213 4345571 5174474 5174832 1292 # chain 3598: length 1 score 1792 4346026 4346523 5175287 5175784 1792 # chain 3599: length 1 score 734 4346631 4346834 5175892 5176095 734 # chain 3600: length 1 score 2250 4347166 4347790 5176427 5177051 2250 # chain 3601: length 1 score 1033 4347927 4348213 5177188 5177474 1033 # chain 3602: length 2 score 1932 4348434 4348726 5177695 5177987 1054 4348728 4348972 5177989 5178233 882 # chain 3603: length 1 score 756 4349163 4349372 5178424 5178633 756 # chain 3604: length 1 score 1756 4350463 4350950 5179724 5180211 1756 # chain 3605: length 1 score 766 4351194 4351406 5180455 5180667 766 # chain 3606: length 1 score 1076 4351408 4351706 5180669 5180967 1076 # chain 3607: length 1 score 745 4352170 4352376 5181431 5181637 745 # chain 3608: length 1 score 2538 4353534 4354238 5182795 5183499 2538 # chain 3609: length 1 score 914 4354273 4354526 5183534 5183787 914 # chain 3610: length 3 score 4321 4354528 4354910 5183789 5184171 1378 4354912 4355495 5184173 5184756 2102 4355497 4355732 5184758 5184993 849 # chain 3611: length 1 score 2376 4355851 4356510 5185112 5185771 2376 # chain 3612: length 1 score 1137 4356602 4356917 5185863 5186178 1137 # chain 3613: length 1 score 961 4356919 4357185 5186180 5186446 961 # chain 3614: length 1 score 1123 4357376 4357687 5186637 5186948 1123 # chain 3615: length 1 score 849 4358283 4358518 5187545 5187780 849 # chain 3616: length 1 score 1522 4358531 4358953 5187793 5188215 1522 # chain 3617: length 2 score 2302 4359009 4359406 5188271 5188668 1432 4359408 4359650 5188670 5188912 874 # chain 3618: length 1 score 1789 4360590 4361086 5189852 5190348 1789 # chain 3619: length 1 score 892 4361109 4361356 5190371 5190618 892 # chain 3620: length 1 score 1224 4361397 4361736 5190659 5190998 1224 # chain 3621: length 1 score 759 4361967 4362177 5191229 5191439 759 # chain 3622: length 2 score 2036 4362309 4362521 5191571 5191783 766 4362523 4362876 5191785 5192138 1274 # chain 3623: length 1 score 766 4363046 4363258 5192308 5192520 766 # chain 3624: length 4 score 6182 4363260 4363546 5192522 5192808 1033 4363548 4364194 5192810 5193456 2329 4364202 4364791 5193464 5194053 2124 4364793 4364992 5194055 5194254 720 # chain 3625: length 1 score 806 4365531 4365754 5194793 5195016 806 # chain 3626: length 1 score 914 4365756 4366009 5195018 5195271 914 # chain 3627: length 1 score 2160 4367889 4368488 5197151 5197750 2160 # chain 3628: length 1 score 856 4369080 4369317 5198342 5198579 856 # chain 3629: length 1 score 1288 4370219 4370576 5199481 5199838 1288 # chain 3630: length 1 score 759 4370778 4370988 5200030 5200240 759 # chain 3631: length 2 score 2025 4371312 4371617 5200564 5200869 1101 4371619 4371876 5200871 5201128 928 # chain 3632: length 1 score 759 4372187 4372397 5201279 5201489 759 # chain 3633: length 1 score 1526 4373122 4373545 5202214 5202637 1526 # chain 3634: length 1 score 817 4373777 4374003 5202869 5203095 817 # chain 3635: length 1 score 720 4374052 4374251 5203144 5203343 720 # chain 3636: length 1 score 1011 4374905 4375185 5203997 5204277 1011 # chain 3637: length 1 score 882 4375857 4376101 5204948 5205192 882 # chain 3638: length 1 score 1440 4376397 4376796 5205488 5205887 1440 # chain 3639: length 3 score 3691 4377144 4377416 5206235 5206507 982 4377418 4377634 5206509 5206725 781 4377636 4378173 5206727 5207264 1936 # chain 3640: length 1 score 741 4378301 4378506 5207392 5207597 741 # chain 3641: length 1 score 741 4378508 4378713 5207599 5207804 741 # chain 3642: length 1 score 824 4378718 4378946 5207809 5208037 824 # chain 3643: length 1 score 1173 4379198 4379523 5208289 5208614 1173 # chain 3644: length 1 score 774 4379594 4379808 5208685 5208899 774 # chain 3645: length 1 score 1231 4380144 4380485 5209235 5209576 1231 # chain 3646: length 2 score 1576 4380835 4381058 5209926 5210149 806 4381060 4381274 5210151 5210365 774 # chain 3647: length 1 score 1198 4381385 4381717 5210476 5210808 1198 # chain 3648: length 1 score 795 4382064 4382284 5211155 5211375 795 # chain 3649: length 1 score 1134 4383624 4383938 5212160 5212474 1134 # chain 3650: length 2 score 2152 4387381 4387685 5215917 5216221 1098 4387687 4387980 5216223 5216516 1058 # chain 3651: length 1 score 817 4388866 4389092 5217402 5217628 817 # chain 3652: length 1 score 1774 4389846 4390338 5218382 5218874 1774 # chain 3653: length 2 score 2627 4390965 4391449 5219501 5219985 1746 4391451 4391696 5219987 5220232 885 # chain 3654: length 2 score 2350 4392660 4392949 5221196 5221485 1044 4392951 4393314 5221487 5221850 1310 # chain 3655: length 1 score 784 4393390 4393607 5221926 5222143 784 # chain 3656: length 1 score 1130 4394572 4394885 5223108 5223421 1130 # chain 3657: length 1 score 2116 4396694 4397281 5225230 5225817 2116 # chain 3658: length 1 score 2116 4397605 4398192 5226141 5226728 2116 # chain 3659: length 1 score 1670 4398186 4398649 5226723 5227186 1670 # chain 3660: length 1 score 1238 4398699 4399042 5227236 5227579 1238 # chain 3661: length 1 score 2563 4399262 4399973 5227799 5228510 2563 # chain 3662: length 3 score 4134 4400047 4400534 5228584 5229071 1756 4400536 4400837 5229073 5229374 1087 4400839 4401199 5229376 5229736 1299 # chain 3663: length 1 score 763 4401291 4401502 5229828 5230039 763 # chain 3664: length 1 score 1638 4401693 4402147 5230230 5230684 1638 # chain 3665: length 1 score 849 4402690 4402925 5231227 5231462 849 # chain 3666: length 1 score 1209 4403737 4404072 5232275 5232610 1209 # chain 3667: length 2 score 2328 4404088 4404439 5232626 5232977 1267 4404441 4404736 5232979 5233274 1065 # chain 3668: length 1 score 925 4406310 4406566 5234848 5235104 925 # chain 3669: length 1 score 828 4407734 4407963 5236273 5236502 828 # chain 3670: length 1 score 817 4407983 4408209 5236522 5236748 817 # chain 3671: length 1 score 1022 4409733 4410016 5238272 5238555 1022 # chain 3672: length 1 score 3243 4410543 4411443 5239082 5239982 3243 # chain 3673: length 1 score 1310 4411568 4411931 5240107 5240470 1310 # chain 3674: length 2 score 3142 4413245 4413458 5241784 5241997 770 4413460 4414119 5241999 5242658 2376 # chain 3675: length 1 score 1530 4414166 4414590 5242705 5243129 1530 # chain 3676: length 2 score 3642 4415106 4415865 5243645 5244404 2736 4415867 4416119 5244406 5244658 910 # chain 3677: length 1 score 1324 4416427 4416794 5244966 5245333 1324 # chain 3678: length 1 score 1713 4416802 4417277 5245341 5245816 1713 # chain 3679: length 2 score 2238 4417587 4417894 5246126 5246433 1108 4417896 4418210 5246435 5246749 1134 # chain 3680: length 1 score 1962 4418721 4419265 5247260 5247804 1962 # chain 3681: length 1 score 2937 4419327 4420142 5247866 5248681 2937 # chain 3682: length 1 score 1184 4422028 4422356 5250566 5250894 1184 # chain 3683: length 1 score 993 4422589 4422864 5251127 5251402 993 # chain 3684: length 1 score 907 4422884 4423135 5251422 5251673 907 # chain 3685: length 2 score 1954 4423235 4423484 5251773 5252022 900 4423486 4423779 5252024 5252317 1058 # chain 3686: length 2 score 3354 4423832 4424168 5252370 5252706 1213 4424170 4424765 5252708 5253303 2145 # chain 3687: length 1 score 925 4425009 4425265 5253547 5253803 925 # chain 3688: length 1 score 1436 4425565 4425963 5255851 5256249 1436 # chain 3689: length 1 score 720 4426044 4426243 5256330 5256529 720 # chain 3690: length 1 score 2566 4426245 4426957 5256531 5257243 2566 # chain 3691: length 1 score 1378 4427159 4427541 5257445 5257827 1378 # chain 3692: length 1 score 1238 4427543 4427886 5257829 5258172 1238 # chain 3693: length 1 score 1216 4427900 4428237 5258186 5258523 1216 # chain 3694: length 1 score 939 4428542 4428802 5258828 5259088 939 # chain 3695: length 1 score 853 4429070 4429306 5259356 5259592 853 # chain 3696: length 1 score 946 4429923 4430185 5260209 5260471 946 # chain 3697: length 2 score 2925 4430365 4430680 5260651 5260966 1137 4430682 4431179 5260968 5261465 1792 # chain 3698: length 2 score 1683 4432539 4432756 5262814 5263031 784 4432758 4433008 5263033 5263283 903 # chain 3699: length 1 score 1173 4433601 4433926 5263876 5264201 1173 # chain 3700: length 1 score 1123 4433963 4434274 5264238 5264549 1123 # chain 3701: length 2 score 1615 4435031 4435251 5265306 5265526 795 4435253 4435481 5265528 5265756 824 # chain 3702: length 1 score 799 4436111 4436332 5266387 5266608 799 # chain 3703: length 1 score 2217 4436615 4437230 5266891 5267506 2217 # chain 3704: length 1 score 752 4437503 4437711 5267796 5268004 752 # chain 3705: length 2 score 3116 4438094 4438719 5268387 5269012 2253 4438730 4438975 5269023 5269268 885 # chain 3706: length 1 score 1130 4439166 4439479 5269459 5269772 1130 # chain 3707: length 1 score 1396 4439661 4440048 5269954 5270341 1396 # chain 3708: length 1 score 1638 4440303 4440757 5270596 5271050 1638 # chain 3709: length 1 score 1180 4441584 4441911 5271877 5272204 1180 # chain 3710: length 2 score 3106 4443981 4444452 5274274 5274745 1699 4444454 4444845 5274747 5275138 1411 # chain 3711: length 1 score 799 4444973 4445194 5275266 5275487 799 # chain 3712: length 2 score 2619 4445391 4445813 5275684 5276106 1522 4445815 4446120 5276108 5276413 1101 # chain 3713: length 1 score 1040 4446140 4446428 5276433 5276721 1040 # chain 3714: length 1 score 1756 4446534 4447021 5276827 5277314 1756 # chain 3715: length 1 score 925 4447071 4447327 5277364 5277620 925 # chain 3716: length 1 score 1443 4447949 4448349 5278242 5278642 1443 # chain 3717: length 2 score 2008 4448542 4448813 5278837 5279108 979 4448815 4449101 5279110 5279396 1033 # chain 3718: length 1 score 1465 4449229 4449635 5279524 5279930 1465 # chain 3719: length 1 score 1026 4449737 4450021 5280033 5280317 1026 # chain 3720: length 1 score 820 4450381 4450608 5280677 5280904 820 # chain 3721: length 1 score 1303 4452995 4453356 5283291 5283652 1303 # chain 3722: length 1 score 1022 4454003 4454286 5284299 5284582 1022 # chain 3723: length 1 score 1206 4454357 4454691 5284653 5284987 1206 # chain 3724: length 1 score 860 4454909 4455147 5285205 5285443 860 # chain 3725: length 2 score 3591 4455161 4455896 5285457 5286192 2649 4455898 4456160 5286194 5286456 946 # chain 3726: length 1 score 828 4456450 4456679 5286746 5286975 828 # chain 3727: length 1 score 990 4456750 4457024 5287046 5287320 990 # chain 3728: length 1 score 2437 4457117 4457793 5287439 5288115 2437 # chain 3729: length 1 score 1184 4458252 4458580 5288606 5288934 1184 # chain 3730: length 1 score 752 4459728 4459936 5290082 5290290 752 # chain 3731: length 1 score 1036 4460106 4460393 5290460 5290747 1036 # chain 3732: length 1 score 907 4461084 4461335 5291438 5291689 907 # chain 3733: length 1 score 871 4461645 4461886 5291999 5292240 871 # chain 3734: length 1 score 741 4462630 4462835 5292984 5293189 741 # chain 3735: length 1 score 813 4463656 4463881 5294010 5294235 813 # chain 3736: length 1 score 2307 4464916 4465556 5295269 5295909 2307 # chain 3737: length 1 score 957 4465855 4466120 5296208 5296473 957 # chain 3738: length 1 score 1108 4466518 4466825 5296871 5297178 1108 # chain 3739: length 1 score 1000 4467031 4467308 5297384 5297661 1000 # chain 3740: length 1 score 1400 4467542 4467930 5297895 5298283 1400 # chain 3741: length 1 score 1249 4467945 4468291 5298298 5298644 1249 # chain 3742: length 1 score 842 4468421 4468654 5298774 5299007 842 # chain 3743: length 1 score 1022 4468890 4469173 5299243 5299526 1022 # chain 3744: length 1 score 828 4469535 4469764 5299888 5300117 828 # chain 3745: length 1 score 1220 4469816 4470154 5300169 5300507 1220 # chain 3746: length 1 score 1202 4476003 4476336 5306344 5306677 1202 # chain 3747: length 1 score 723 4478263 4478463 5308503 5308703 723 # chain 3748: length 1 score 1562 4478850 4479283 5309086 5309519 1562 # chain 3749: length 1 score 752 4480524 4480732 5310760 5310968 752 # chain 3750: length 1 score 1908 4481043 4481572 5311279 5311808 1908 # chain 3751: length 1 score 842 4481615 4481848 5311851 5312084 842 # chain 3752: length 1 score 806 4482116 4482339 5312546 5312769 806 # chain 3753: length 1 score 1422 4482470 4482864 5312900 5313294 1422 # chain 3754: length 1 score 774 4482962 4483176 5313392 5313606 774 # chain 3755: length 2 score 3383 4483178 4483541 5313608 5313971 1310 4483543 4484119 5313973 5314549 2077 # chain 3756: length 1 score 1238 4484463 4484806 5314893 5315236 1238 # chain 3757: length 4 score 5279 4485150 4485499 5315580 5315929 1260 4485501 4485735 5315931 5316165 846 4485737 4486325 5316167 5316755 2120 4486327 4486622 5316757 5317052 1065 # chain 3758: length 1 score 752 4486903 4487111 5317333 5317541 752 # chain 3759: length 1 score 882 4493190 4493434 5318623 5318867 882 # chain 3760: length 1 score 1407 4493667 4494057 5319100 5319490 1407 # chain 3761: length 1 score 723 4535262 4535462 5365009 5365209 723 # chain 3762: length 1 score 2113 4536431 4537017 5366178 5366764 2113 # chain 3763: length 1 score 817 4538109 4538335 5367856 5368082 817 # chain 3764: length 1 score 1036 4538484 4538771 5368231 5368518 1036 # chain 3765: length 1 score 914 4539505 4539758 5369252 5369505 914 # chain 3766: length 2 score 1752 4540615 4540884 5370345 5370614 972 4540886 4541103 5370616 5370833 784 # chain 3767: length 1 score 1058 4542032 4542325 5371762 5372055 1058 # chain 3768: length 2 score 2396 4542802 4543107 5372531 5372836 1101 4543111 4543472 5372840 5373201 1303 # chain 3769: length 1 score 828 4544659 4544888 5374388 5374617 828 # chain 3770: length 1 score 838 4548476 4548708 5378136 5378368 838 # chain 3771: length 1 score 1512 4548909 4549328 5378569 5378988 1512 # chain 3772: length 1 score 900 4550051 4550300 5379711 5379960 900 # chain 3773: length 1 score 892 4551504 4551751 5381165 5381412 892 # chain 3774: length 1 score 730 4551873 4552075 5381534 5381736 730 # chain 3775: length 1 score 1479 4554158 4554568 5383819 5384229 1479 # chain 3776: length 1 score 943 4554676 4554937 5384337 5384598 943 # chain 3777: length 1 score 1152 4556607 4556926 5386268 5386587 1152 # chain 3778: length 2 score 2587 4556976 4557328 5386637 5386989 1270 4557330 4557696 5386991 5387357 1321 # chain 3779: length 1 score 777 4557847 4558062 5387508 5387723 777 # chain 3780: length 1 score 766 4561823 4562035 5399775 5399987 766 # chain 3781: length 1 score 1069 4567898 4568194 5405866 5406162 1069 # chain 3782: length 1 score 745 4586391 4586597 5418882 5419088 745 # chain 3783: length 1 score 907 4589247 4589498 5422424 5422675 907 # chain 3784: length 2 score 1921 4589544 4589756 5422721 5422933 766 4589758 4590079 5422935 5423256 1159 # chain 3785: length 1 score 1080 4591606 4591905 5424792 5425091 1080 # chain 3786: length 1 score 900 4592020 4592269 5425206 5425455 900 # chain 3787: length 2 score 2271 4592317 4592556 5425504 5425743 864 4592558 4592949 5425745 5426136 1411 # chain 3788: length 1 score 903 4593732 4593982 5426920 5427170 903 # chain 3789: length 1 score 1915 4594693 4595224 5427880 5428411 1915 # chain 3790: length 1 score 1324 4595901 4596268 5429088 5429455 1324 # chain 3791: length 2 score 2504 4596459 4596916 5429646 5430103 1648 4596918 4597156 5430105 5430343 860 # chain 3792: length 2 score 3023 4597495 4597826 5430682 5431013 1195 4597828 4598336 5431015 5431523 1832 # chain 3793: length 1 score 2048 4598884 4599452 5432071 5432639 2048 # chain 3794: length 2 score 3008 4599469 4599869 5432656 5433056 1443 4599871 4600306 5433058 5433493 1569 # chain 3795: length 1 score 1832 4600811 4601319 5434000 5434508 1832 # chain 3796: length 2 score 3642 4601459 4601825 5434648 5435014 1321 4601827 4602472 5435016 5435661 2325 # chain 3797: length 1 score 1396 4604188 4604575 5437063 5437450 1396 # chain 3798: length 1 score 1612 4605120 4605567 5437995 5438442 1612 # chain 3799: length 1 score 806 4605846 4606069 5438721 5438944 806 # chain 3800: length 1 score 4460 4606201 4607439 5439076 5440314 4460 # chain 3801: length 1 score 720 4607576 4607775 5440451 5440650 720 # chain 3802: length 1 score 1184 4607972 4608300 5440847 5441175 1184 # chain 3803: length 1 score 1051 4608302 4608593 5441177 5441468 1051 # chain 3804: length 1 score 2005 4608604 4609160 5441479 5442035 2005 # chain 3805: length 1 score 2300 4609548 4610186 5442423 5443061 2300 # chain 3806: length 1 score 1000 4610318 4610595 5443193 5443470 1000 # chain 3807: length 1 score 1796 4610597 4611095 5443472 5443970 1796 # chain 3808: length 1 score 1123 4613016 4613327 5445687 5445998 1123 # chain 3809: length 1 score 1299 4613736 4614096 5446407 5446767 1299 # chain 3810: length 1 score 1875 4614243 4614763 5446914 5447434 1875 # chain 3811: length 1 score 1443 4615143 4615543 5447814 5448214 1443 # chain 3812: length 1 score 2415 4615599 4616269 5448270 5448940 2415 # chain 3813: length 1 score 1108 4616649 4616956 5449320 5449627 1108 # chain 3814: length 1 score 3294 4617023 4617937 5449694 5450608 3294 # chain 3815: length 1 score 2077 4618311 4618887 5450982 5451558 2077 # chain 3816: length 1 score 1162 4621390 4621712 5453018 5453340 1162 # chain 3817: length 1 score 882 4622026 4622270 5453654 5453898 882 # chain 3818: length 1 score 1180 4622284 4622611 5453912 5454239 1180 # chain 3819: length 1 score 1008 4623145 4623424 5454773 5455052 1008 # chain 3820: length 1 score 2149 4623611 4624207 5455239 5455835 2149 # chain 3821: length 1 score 1396 4624869 4625256 5456497 5456884 1396 # chain 3822: length 1 score 1990 4625387 4625939 5457015 5457567 1990 # chain 3823: length 1 score 3135 4626344 4627214 5457972 5458842 3135 # chain 3824: length 1 score 871 4627591 4627832 5459219 5459460 871 # chain 3825: length 1 score 1461 4628122 4628527 5459750 5460155 1461 # chain 3826: length 2 score 2469 4630122 4630608 5461750 5462236 1753 4630610 4630809 5462238 5462437 720 # chain 3827: length 1 score 817 4632073 4632299 5463701 5463927 817 # chain 3828: length 2 score 2512 4632526 4632989 5464154 5464617 1670 4632991 4633225 5464619 5464853 846 # chain 3829: length 1 score 1087 4637081 4637382 5468709 5469010 1087 # chain 3830: length 1 score 2980 4637525 4638352 5469153 5469980 2980 genometools-1.5.1/testdata/chaindata/chain-local2b000066400000000000000000000070041211610345200221130ustar00rootroot00000000000000# chain 0: length 98 score 36877 3373962 3374538 4121184 4121760 1154 3374755 3375128 4121977 4122350 748 3375420 3375673 4122642 4122895 508 3375711 3376496 4122933 4123718 1572 3376514 3376845 4123736 4124067 664 3377243 3377442 4124465 4124664 400 3377618 3378057 4124840 4125279 880 3378059 3378453 4125281 4125675 790 3379305 3379767 4126527 4126989 926 3379769 3379970 4126991 4127192 404 3379972 3380294 4127194 4127516 646 3381775 3382057 4128998 4129280 566 3382203 3382584 4129426 4129807 764 3382900 3383770 4130123 4130993 1742 3384948 3385674 4132172 4132898 1454 3386228 3386538 4133452 4133762 622 3386569 3386877 4133790 4134098 618 3386989 3387192 4134210 4134413 408 3387265 3387626 4134486 4134847 724 3387934 3388145 4135155 4135366 424 3388256 3388744 4135477 4135965 978 3389365 3389594 4136586 4136815 460 3390014 3390275 4136960 4137221 524 3390277 3390599 4137223 4137545 646 3392293 3392512 4139239 4139458 440 3392557 3392786 4139503 4139732 460 3392788 3393011 4139734 4139957 448 3393173 3393450 4140118 4140395 556 3393686 3394084 4140631 4141029 798 3394140 3394555 4141085 4141500 832 3395220 3395510 4142165 4142455 582 3395701 3396052 4142646 4142997 704 3396054 3396358 4142999 4143303 610 3396638 3396948 4143583 4143893 622 3397136 3397383 4144081 4144328 496 3397399 3397658 4144344 4144603 520 3397963 3398162 4144908 4145107 400 3398383 3398994 4145328 4145939 1224 3399308 3399660 4146253 4146605 706 3399662 3399972 4146607 4146917 622 3399974 3400293 4146919 4147238 640 3400295 3400512 4147240 4147457 436 3400791 3401694 4147736 4148639 1808 3401774 3402104 4148719 4149049 662 3402738 3402963 4149683 4149908 452 3402965 3403364 4149910 4150309 800 3403366 3404046 4150311 4150991 1362 3404282 3404908 4151227 4151853 1254 3405498 3405850 4152443 4152795 706 3406435 3406830 4153380 4153775 792 3407033 3407362 4153978 4154307 660 3407602 3409217 4154547 4156162 3232 3409487 3409824 4156431 4156768 676 3409826 3410193 4156770 4157137 736 3410195 3410933 4157139 4157877 1478 3411367 3411948 4158311 4158892 1164 3412181 3412416 4159125 4159360 472 3412553 3412778 4159497 4159722 452 3412780 3413087 4159724 4160031 616 3413710 3413969 4160654 4160913 520 3415878 3416189 4162867 4163178 624 3417604 3418404 4164594 4165394 1602 3418988 3419228 4165979 4166219 482 3419651 3419918 4166642 4166909 536 3420023 3420385 4167014 4167376 726 3421119 3421407 4168109 4168397 578 3421879 3422207 4168871 4169199 658 3422696 3423208 4169687 4170199 1026 3423250 3423832 4170241 4170823 1166 3423878 3424155 4170871 4171148 556 3424157 3424431 4171150 4171424 550 3424482 3426125 4171484 4173127 3288 3426321 3426619 4173323 4173621 598 3426774 3427305 4173775 4174306 1064 3428346 3429032 4175347 4176033 1374 3429282 3429525 4176283 4176526 488 3430001 3430287 4177001 4177287 574 3430453 3430789 4177454 4177790 674 3431126 3431537 4178127 4178538 824 3431698 3432088 4178699 4179089 782 3432565 3432830 4179566 4179831 532 3432832 3433035 4179833 4180036 408 3434766 3434974 4181767 4181975 418 3435183 3435478 4182184 4182479 592 3435480 3435757 4182481 4182758 556 3436077 3436279 4183078 4183280 406 3437201 3439353 4184202 4186354 4306 3439355 3441199 4186356 4188200 3690 3441372 3441946 4188373 4188947 1150 3441948 3442484 4188949 4189485 1074 3442567 3445133 4189568 4192134 5134 3445135 3445932 4192136 4192933 1596 3445934 3446766 4192935 4193767 1666 3446768 3447008 4193769 4194009 482 3447010 3447961 4194011 4194962 1904 3447963 3448448 4194964 4195449 972 3448621 3450172 4195622 4197173 3104 3450174 3451090 4197175 4198091 1834 genometools-1.5.1/testdata/chaindata/chain-local2b-wf1.8000066400000000000000000000327341211610345200227640ustar00rootroot00000000000000# chain 0: length 376 score 179068 3239079 3239395 3990690 3991006 1141 3239947 3240491 3991558 3992102 1962 3240904 3241176 3992515 3992787 982 3241718 3242053 3993329 3993664 1209 3242055 3242325 3993666 3993936 975 3242588 3243275 3994200 3994887 2476 3243502 3243917 3995114 3995529 1497 3244186 3244391 3995798 3996003 741 3245094 3246040 3996706 3997652 3409 3246042 3246313 3997654 3997925 979 3246641 3247195 3998253 3998807 1998 3247819 3248046 3999431 3999658 820 3248348 3248660 3999960 4000272 1126 3248662 3248946 4000274 4000558 1026 3249840 3250148 4001450 4001758 1112 3250565 3251112 4002174 4002721 1972 3251458 3251673 4003067 4003282 777 3251774 3252130 4003383 4003739 1285 3253092 3253375 4004701 4004984 1022 3253503 3253740 4005112 4005349 856 3253993 3254348 4005601 4005956 1281 3255615 3255842 4007221 4007448 820 3256405 3256625 4008011 4008231 795 3256891 3257382 4008498 4008989 1771 3259241 3259464 4010849 4011072 806 3260420 3260640 4012028 4012248 795 3260751 3261063 4012359 4012671 1126 3261585 3261826 4013193 4013434 871 3261954 3262468 4013562 4014076 1854 3262470 3263170 4014078 4014778 2523 3263460 3263949 4015068 4015557 1764 3263951 3264240 4015559 4015848 1044 3264266 3264489 4015874 4016097 806 3264527 3264807 4016135 4016415 1011 3264849 3265062 4016457 4016670 770 3265251 3265513 4016859 4017121 946 3266461 3266670 4018069 4018278 756 3267784 3268504 4018998 4019718 2595 3268674 3269035 4019888 4020249 1303 3269292 3269587 4020506 4020801 1065 3269589 3269983 4020803 4021197 1422 3269985 3270250 4021199 4021464 957 3270252 3270708 4021466 4021922 1645 3271034 3271275 4022248 4022489 871 3271469 3271701 4022683 4022915 838 3272144 3272367 4023358 4023581 806 3272372 3272594 4023586 4023808 802 3273375 3273701 4024589 4024915 1177 3274479 3274820 4025693 4026034 1231 3274865 3275107 4026079 4026321 874 3275713 3275975 4026927 4027189 946 3276647 3276864 4027861 4028078 784 3276866 3277286 4028080 4028500 1515 3277530 3277854 4028744 4029068 1170 3277956 3278194 4029170 4029408 860 3279503 3279704 4033022 4033223 727 3280091 3280307 4033610 4033826 781 3280515 3280799 4034034 4034318 1026 3281503 3281717 4035022 4035236 774 3282107 3282345 4035626 4035864 860 3282376 3282608 4035895 4036127 838 3282964 3283206 4036483 4036725 874 3283283 3283638 4036802 4037157 1281 3284201 3284402 4037720 4037921 727 3286661 3286910 4040180 4040429 900 3287555 3287899 4041074 4041418 1242 3288084 3288288 4041603 4041807 738 3288551 3288909 4042070 4042428 1292 3289062 3289305 4042581 4042824 878 3289655 3289855 4044132 4044332 723 3289877 3290113 4044354 4044590 853 3290115 3290582 4044592 4045059 1684 3290755 3291112 4045232 4045589 1288 3291114 3291324 4045591 4045801 759 3291448 3291914 4045925 4046391 1681 3294415 3294681 4048892 4049158 961 3295677 3295895 4050154 4050372 788 3296398 3296801 4050875 4051278 1454 3297543 3297742 4052020 4052219 720 3298340 3298676 4052817 4053153 1213 3298774 3299360 4053251 4053837 2113 3299731 3299948 4054208 4054425 784 3300663 3300927 4055140 4055404 954 3300929 3301158 4055406 4055635 828 3302463 3302684 4056939 4057160 799 3302991 3303501 4057467 4057977 1839 3305400 3306657 4059876 4061133 4528 3306659 3306903 4061135 4061379 882 3307568 3307857 4062044 4062333 1044 3308687 3309085 4063163 4063561 1436 3309087 3309496 4063563 4063972 1476 3311453 3311752 4065930 4066229 1080 3311877 3312139 4066354 4066616 946 3312567 3312796 4067044 4067273 828 3313095 3314016 4067572 4068493 3319 3314043 3314317 4068520 4068794 990 3314619 3314848 4069096 4069325 828 3314994 3315210 4069471 4069687 781 3315237 3315882 4069714 4070359 2325 3316069 3316332 4070546 4070809 950 3316334 3316671 4070811 4071148 1216 3317022 3317247 4071499 4071724 813 3317926 3318211 4072403 4072688 1029 3319575 3319803 4074052 4074280 824 3320704 3320981 4075181 4075458 1000 3321517 3321738 4075994 4076215 799 3321794 3322098 4076271 4076575 1098 3322373 3322738 4076850 4077215 1317 3322740 3323120 4077217 4077597 1371 3323296 3323579 4077773 4078056 1022 3323791 3324010 4078268 4078487 792 3324289 3325821 4078766 4080298 5518 3326435 3326781 4080912 4081258 1249 3327152 3327606 4081629 4082083 1638 3328286 3328491 4082617 4082822 741 3328573 3328944 4082904 4083275 1339 3329138 3329874 4083469 4084205 2653 3330017 3330222 4084348 4084553 741 3330305 3331594 4084636 4085925 4644 3332630 3332940 4086962 4087272 1119 3332942 3333168 4087274 4087500 817 3333452 3333675 4087784 4088007 806 3334040 3334683 4088372 4089015 2318 3335272 3335486 4089604 4089818 774 3335488 3335690 4089820 4090022 730 3336004 3336375 4090336 4090707 1339 3336407 3336708 4090739 4091040 1087 3336954 3337849 4091286 4092181 3225 3337851 3338073 4092183 4092405 802 3338209 3338606 4092541 4092938 1432 3338608 3339078 4092940 4093410 1695 3339276 3339588 4093608 4093920 1126 3339755 3339998 4094087 4094330 878 3340842 3341126 4095174 4095458 1026 3341254 3341495 4095586 4095827 871 3341503 3341792 4095835 4096124 1044 3342146 3342691 4096478 4097023 1965 3343431 3343684 4097763 4098016 914 3343782 3344130 4098114 4098462 1256 3344132 3344351 4098464 4098683 792 3344464 3344685 4098796 4099017 799 3344687 3344999 4099019 4099331 1126 3345364 3345610 4099696 4099942 889 3345711 3345964 4100043 4100296 914 3347531 3347774 4101863 4102106 878 3348585 3348874 4102918 4103207 1044 3349350 3349750 4103689 4104089 1443 3350193 3350608 4104532 4104947 1497 3350610 3350865 4104949 4105204 921 3350867 3351138 4105206 4105477 979 3352255 3352513 4106593 4106851 932 3353622 3354112 4107960 4108450 1767 3356796 3357073 4111134 4111411 1000 3366139 3366442 4113372 4113675 1094 3367797 3368028 4115030 4115261 835 3370165 3370385 4117398 4117618 795 3370660 3371060 4117893 4118293 1443 3371161 3371361 4118394 4118594 723 3371849 3372422 4119082 4119655 2066 3373076 3373278 4120306 4120508 730 3373962 3374538 4121184 4121760 2077 3374755 3375128 4121977 4122350 1346 3375420 3375673 4122642 4122895 914 3375711 3376496 4122933 4123718 2829 3376514 3376845 4123736 4124067 1195 3377243 3377442 4124465 4124664 720 3377618 3378057 4124840 4125279 1584 3378059 3378453 4125281 4125675 1422 3379305 3379767 4126527 4126989 1666 3379769 3379970 4126991 4127192 727 3379972 3380294 4127194 4127516 1162 3381775 3382057 4128998 4129280 1018 3382203 3382584 4129426 4129807 1375 3382900 3383770 4130123 4130993 3135 3384948 3385674 4132172 4132898 2617 3386228 3386538 4133452 4133762 1119 3386569 3386877 4133790 4134098 1112 3386989 3387192 4134210 4134413 734 3387265 3387626 4134486 4134847 1303 3387934 3388145 4135155 4135366 763 3388256 3388744 4135477 4135965 1760 3389365 3389594 4136586 4136815 828 3390014 3390275 4136960 4137221 943 3390277 3390599 4137223 4137545 1162 3392293 3392512 4139239 4139458 792 3392557 3392786 4139503 4139732 828 3392788 3393011 4139734 4139957 806 3393173 3393450 4140118 4140395 1000 3393686 3394084 4140631 4141029 1436 3394140 3394555 4141085 4141500 1497 3395220 3395510 4142165 4142455 1047 3395701 3396052 4142646 4142997 1267 3396054 3396358 4142999 4143303 1098 3396638 3396948 4143583 4143893 1119 3397136 3397383 4144081 4144328 892 3397399 3397658 4144344 4144603 936 3397963 3398162 4144908 4145107 720 3398383 3398994 4145328 4145939 2203 3399308 3399660 4146253 4146605 1270 3399662 3399972 4146607 4146917 1119 3399974 3400293 4146919 4147238 1152 3400295 3400512 4147240 4147457 784 3400791 3401694 4147736 4148639 3254 3401774 3402104 4148719 4149049 1191 3402738 3402963 4149683 4149908 813 3402965 3403364 4149910 4150309 1440 3403366 3404046 4150311 4150991 2451 3404282 3404908 4151227 4151853 2257 3405498 3405850 4152443 4152795 1270 3406435 3406830 4153380 4153775 1425 3407033 3407362 4153978 4154307 1188 3407602 3409217 4154547 4156162 5817 3409487 3409824 4156431 4156768 1216 3409826 3410193 4156770 4157137 1324 3410195 3410933 4157139 4157877 2660 3411367 3411948 4158311 4158892 2095 3412181 3412416 4159125 4159360 849 3412553 3412778 4159497 4159722 813 3412780 3413087 4159724 4160031 1108 3413710 3413969 4160654 4160913 936 3415878 3416189 4162867 4163178 1123 3417604 3418404 4164594 4165394 2883 3418988 3419228 4165979 4166219 867 3419651 3419918 4166642 4166909 964 3420023 3420385 4167014 4167376 1306 3421119 3421407 4168109 4168397 1040 3421879 3422207 4168871 4169199 1184 3422696 3423208 4169687 4170199 1846 3423250 3423832 4170241 4170823 2098 3423878 3424155 4170871 4171148 1000 3424157 3424431 4171150 4171424 990 3424482 3426125 4171484 4173127 5918 3426321 3426619 4173323 4173621 1076 3426774 3427305 4173775 4174306 1915 3428346 3429032 4175347 4176033 2473 3429282 3429525 4176283 4176526 878 3430001 3430287 4177001 4177287 1033 3430453 3430789 4177454 4177790 1213 3431126 3431537 4178127 4178538 1483 3431698 3432088 4178699 4179089 1407 3432565 3432830 4179566 4179831 957 3432832 3433035 4179833 4180036 734 3434766 3434974 4181767 4181975 752 3435183 3435478 4182184 4182479 1065 3435480 3435757 4182481 4182758 1000 3436077 3436279 4183078 4183280 730 3437201 3439353 4184202 4186354 7750 3439355 3441199 4186356 4188200 6642 3441372 3441946 4188373 4188947 2070 3441948 3442484 4188949 4189485 1933 3442567 3445133 4189568 4192134 9241 3445135 3445932 4192136 4192933 2872 3445934 3446766 4192935 4193767 2998 3446768 3447008 4193769 4194009 867 3447010 3447961 4194011 4194962 3427 3447963 3448448 4194964 4195449 1749 3448621 3450172 4195622 4197173 5587 3450174 3451090 4197175 4198091 3301 3467941 3468347 4199836 4200242 1465 3468373 3468755 4200268 4200650 1378 3468757 3469776 4200652 4201671 3672 3469778 3470013 4201673 4201908 849 3470015 3470337 4201910 4202232 1162 3470339 3470712 4202234 4202607 1346 3470837 3471247 4202732 4203142 1479 3471249 3472330 4203144 4204225 3895 3473266 3474010 4205161 4205905 2682 3474012 3474340 4205907 4206235 1184 3474751 3474955 4206646 4206850 738 3475166 3475532 4207061 4207427 1321 3475706 3476308 4207601 4208203 2170 3478532 3479001 4210427 4210896 1692 3479003 3479205 4210898 4211100 730 3479381 3479787 4211276 4211682 1465 3480317 3480531 4212212 4212426 774 3480674 3480892 4212569 4212787 788 3481588 3482044 4213483 4213939 1645 3483129 3483391 4215024 4215286 946 3483405 3483901 4215300 4215796 1789 3483903 3484103 4215798 4215998 723 3484812 3485304 4216707 4217199 1774 3486203 3486522 4218098 4218417 1152 3487530 3487738 4219425 4219633 752 3488086 3488312 4219981 4220207 817 3489056 3489588 4220951 4221483 1918 3489620 3490343 4221515 4222238 2606 3490345 3490778 4222240 4222673 1562 3491552 3491969 4223447 4223864 1504 3492244 3492530 4224139 4224425 1033 3493357 3493806 4225252 4225701 1620 3494018 3494564 4225913 4226459 1969 3494566 3494775 4226461 4226670 756 3495233 3495786 4227128 4227681 1994 3497732 3497962 4229636 4229866 831 3498221 3498495 4230125 4230399 990 3500412 3500638 4232316 4232542 817 3502130 3502383 4234034 4234287 914 3511022 3511224 4235206 4235408 730 3511226 3511429 4235410 4235613 734 3511479 3511726 4235663 4235910 892 3512254 3512477 4236438 4236661 806 3512572 3512884 4236756 4237068 1126 3513156 3513713 4237340 4237897 2008 3513715 3513932 4237899 4238116 784 3514385 3515230 4238569 4239414 3045 3515240 3515540 4239424 4239724 1083 3515918 3516383 4240102 4240567 1677 3516385 3516757 4240569 4240941 1342 3516759 3516985 4240943 4241169 817 3516987 3517215 4241171 4241399 824 3517217 3517614 4241401 4241798 1432 3517616 3517842 4241800 4242026 817 3518195 3518414 4242379 4242598 792 3518416 3518675 4242600 4242859 936 3520327 3520731 4244510 4244914 1458 3520965 3521184 4245148 4245367 792 3521285 3521538 4245468 4245721 914 3522164 3522606 4246347 4246789 1594 3523701 3524476 4247883 4248658 2793 3524613 3524845 4248795 4249027 838 3525597 3526027 4249779 4250209 1551 3526302 3526895 4250484 4251077 2138 3526994 3527511 4251176 4251693 1864 3527798 3528156 4251980 4252338 1292 3529862 3530732 4254044 4254914 3135 3531598 3531959 4255780 4256141 1303 3533168 3533540 4257350 4257722 1342 3533605 3533840 4257787 4258022 849 3533944 3534609 4258126 4258791 2397 3534872 3535125 4259054 4259307 914 3535502 3535933 4259684 4260115 1555 3537716 3538058 4261881 4262223 1234 3538118 3538388 4262283 4262553 975 3538720 3538988 4262885 4263153 968 3539188 3539423 4263353 4263588 849 3542064 3542270 4266227 4266433 745 3543166 3543377 4267329 4267540 763 3544363 3544621 4268530 4268788 932 3545028 3545338 4269195 4269505 1119 3546156 3546421 4270257 4270522 957 3547430 3547650 4271531 4271751 795 3547653 3548003 4271754 4272104 1263 3548005 3548356 4272106 4272457 1267 3548687 3548920 4272788 4273021 842 3549389 3549652 4273490 4273753 950 3549996 3550236 4274097 4274337 867 3550457 3550734 4274558 4274835 1000 3550966 3551195 4275067 4275296 828 3551197 3551564 4275298 4275665 1324 3551566 3551783 4275667 4275884 784 3552517 3552752 4276618 4276853 849 3557336 3557543 4282277 4282484 748 3557579 3557826 4282520 4282767 892 3558241 3558696 4283182 4283637 1641 3558933 3559148 4283874 4284089 777 3559415 3559617 4284356 4284558 730 3559675 3559992 4284616 4284933 1144 3560557 3560792 4285498 4285733 849 3561803 3562239 4289596 4290032 1573 3562646 3563634 4290439 4291427 3560 3563858 3564327 4291651 4292120 1692 3564329 3564567 4292122 4292360 860 3564976 3565428 4292769 4293221 1630 3565472 3566159 4293265 4293952 2476 3566161 3566576 4293954 4294369 1497 3566584 3567271 4294377 4295064 2476 3567273 3567496 4295066 4295289 806 3567597 3567963 4295390 4295756 1321 3568254 3568461 4296047 4296254 748 3568479 3569058 4296272 4296851 2088 3569644 3569895 4297437 4297688 907 3570512 3570762 4298305 4298555 903 3570926 3571649 4298719 4299442 2606 3571651 3571952 4299444 4299745 1087 3572002 3572237 4299795 4300030 849 3572517 3572896 4300309 4300688 1368 genometools-1.5.1/testdata/chaindata/chain-local2b-wf1.8-maxgap10000066400000000000000000000010371211610345200243700ustar00rootroot00000000000000# chain 0: length 7 score 21507 1085337 1086089 1412837 1413589 2710 1086091 1086892 1413591 1414392 2887 1086894 1088334 1414394 1415834 5187 1088336 1088973 1415836 1416473 2296 1088975 1089198 1416475 1416698 806 1089200 1090692 1416700 1418192 5374 1090694 1091324 1418194 1418824 2271 # chain 1: length 6 score 21134 3442567 3445133 4189568 4192134 9241 3445135 3445932 4192136 4192933 2872 3445934 3446766 4192935 4193767 2998 3446768 3447008 4193769 4194009 867 3447010 3447961 4194011 4194962 3427 3447963 3448448 4194964 4195449 1749 genometools-1.5.1/testdata/chaindata/chain-local2p000066400000000000000000000070041211610345200221310ustar00rootroot00000000000000# chain 0: length 98 score 36877 3373962 3374538 4121184 4121760 1154 3374755 3375128 4121977 4122350 748 3375420 3375673 4122642 4122895 508 3375711 3376496 4122933 4123718 1572 3376514 3376845 4123736 4124067 664 3377243 3377442 4124465 4124664 400 3377618 3378057 4124840 4125279 880 3378059 3378453 4125281 4125675 790 3379305 3379767 4126527 4126989 926 3379769 3379970 4126991 4127192 404 3379972 3380294 4127194 4127516 646 3381775 3382057 4128998 4129280 566 3382203 3382584 4129426 4129807 764 3382900 3383770 4130123 4130993 1742 3384948 3385674 4132172 4132898 1454 3386228 3386538 4133452 4133762 622 3386569 3386877 4133790 4134098 618 3386989 3387192 4134210 4134413 408 3387265 3387626 4134486 4134847 724 3387934 3388145 4135155 4135366 424 3388256 3388744 4135477 4135965 978 3389365 3389594 4136586 4136815 460 3390014 3390275 4136960 4137221 524 3390277 3390599 4137223 4137545 646 3392293 3392512 4139239 4139458 440 3392557 3392786 4139503 4139732 460 3392788 3393011 4139734 4139957 448 3393173 3393450 4140118 4140395 556 3393686 3394084 4140631 4141029 798 3394140 3394555 4141085 4141500 832 3395220 3395510 4142165 4142455 582 3395701 3396052 4142646 4142997 704 3396054 3396358 4142999 4143303 610 3396638 3396948 4143583 4143893 622 3397136 3397383 4144081 4144328 496 3397399 3397658 4144344 4144603 520 3397963 3398162 4144908 4145107 400 3398383 3398994 4145328 4145939 1224 3399308 3399660 4146253 4146605 706 3399662 3399972 4146607 4146917 622 3399974 3400293 4146919 4147238 640 3400295 3400512 4147240 4147457 436 3400791 3401694 4147736 4148639 1808 3401774 3402104 4148719 4149049 662 3402738 3402963 4149683 4149908 452 3402965 3403364 4149910 4150309 800 3403366 3404046 4150311 4150991 1362 3404282 3404908 4151227 4151853 1254 3405498 3405850 4152443 4152795 706 3406435 3406830 4153380 4153775 792 3407033 3407362 4153978 4154307 660 3407602 3409217 4154547 4156162 3232 3409487 3409824 4156431 4156768 676 3409826 3410193 4156770 4157137 736 3410195 3410933 4157139 4157877 1478 3411367 3411948 4158311 4158892 1164 3412181 3412416 4159125 4159360 472 3412553 3412778 4159497 4159722 452 3412780 3413087 4159724 4160031 616 3413710 3413969 4160654 4160913 520 3415878 3416189 4162867 4163178 624 3417604 3418404 4164594 4165394 1602 3418988 3419228 4165979 4166219 482 3419651 3419918 4166642 4166909 536 3420023 3420385 4167014 4167376 726 3421119 3421407 4168109 4168397 578 3421879 3422207 4168871 4169199 658 3422696 3423208 4169687 4170199 1026 3423250 3423832 4170241 4170823 1166 3423878 3424155 4170871 4171148 556 3424157 3424431 4171150 4171424 550 3424482 3426125 4171484 4173127 3288 3426321 3426619 4173323 4173621 598 3426774 3427305 4173775 4174306 1064 3428346 3429032 4175347 4176033 1374 3429282 3429525 4176283 4176526 488 3430001 3430287 4177001 4177287 574 3430453 3430789 4177454 4177790 674 3431126 3431537 4178127 4178538 824 3431698 3432088 4178699 4179089 782 3432565 3432830 4179566 4179831 532 3432832 3433035 4179833 4180036 408 3434766 3434974 4181767 4181975 418 3435183 3435478 4182184 4182479 592 3435480 3435757 4182481 4182758 556 3436077 3436279 4183078 4183280 406 3437201 3439353 4184202 4186354 4306 3439355 3441199 4186356 4188200 3690 3441372 3441946 4188373 4188947 1150 3441948 3442484 4188949 4189485 1074 3442567 3445133 4189568 4192134 5134 3445135 3445932 4192136 4192933 1596 3445934 3446766 4192935 4193767 1666 3446768 3447008 4193769 4194009 482 3447010 3447961 4194011 4194962 1904 3447963 3448448 4194964 4195449 972 3448621 3450172 4195622 4197173 3104 3450174 3451090 4197175 4198091 1834 genometools-1.5.1/testdata/chaindata/chain-local2p-wf1.8000066400000000000000000000327341211610345200230020ustar00rootroot00000000000000# chain 0: length 376 score 179068 3239079 3239395 3990690 3991006 1141 3239947 3240491 3991558 3992102 1962 3240904 3241176 3992515 3992787 982 3241718 3242053 3993329 3993664 1209 3242055 3242325 3993666 3993936 975 3242588 3243275 3994200 3994887 2476 3243502 3243917 3995114 3995529 1497 3244186 3244391 3995798 3996003 741 3245094 3246040 3996706 3997652 3409 3246042 3246313 3997654 3997925 979 3246641 3247195 3998253 3998807 1998 3247819 3248046 3999431 3999658 820 3248348 3248660 3999960 4000272 1126 3248662 3248946 4000274 4000558 1026 3249840 3250148 4001450 4001758 1112 3250565 3251112 4002174 4002721 1972 3251458 3251673 4003067 4003282 777 3251774 3252130 4003383 4003739 1285 3253092 3253375 4004701 4004984 1022 3253503 3253740 4005112 4005349 856 3253993 3254348 4005601 4005956 1281 3255615 3255842 4007221 4007448 820 3256405 3256625 4008011 4008231 795 3256891 3257382 4008498 4008989 1771 3259241 3259464 4010849 4011072 806 3260420 3260640 4012028 4012248 795 3260751 3261063 4012359 4012671 1126 3261585 3261826 4013193 4013434 871 3261954 3262468 4013562 4014076 1854 3262470 3263170 4014078 4014778 2523 3263460 3263949 4015068 4015557 1764 3263951 3264240 4015559 4015848 1044 3264266 3264489 4015874 4016097 806 3264527 3264807 4016135 4016415 1011 3264849 3265062 4016457 4016670 770 3265251 3265513 4016859 4017121 946 3266461 3266670 4018069 4018278 756 3267784 3268504 4018998 4019718 2595 3268674 3269035 4019888 4020249 1303 3269292 3269587 4020506 4020801 1065 3269589 3269983 4020803 4021197 1422 3269985 3270250 4021199 4021464 957 3270252 3270708 4021466 4021922 1645 3271034 3271275 4022248 4022489 871 3271469 3271701 4022683 4022915 838 3272144 3272367 4023358 4023581 806 3272372 3272594 4023586 4023808 802 3273375 3273701 4024589 4024915 1177 3274479 3274820 4025693 4026034 1231 3274865 3275107 4026079 4026321 874 3275713 3275975 4026927 4027189 946 3276647 3276864 4027861 4028078 784 3276866 3277286 4028080 4028500 1515 3277530 3277854 4028744 4029068 1170 3277956 3278194 4029170 4029408 860 3279503 3279704 4033022 4033223 727 3280091 3280307 4033610 4033826 781 3280515 3280799 4034034 4034318 1026 3281503 3281717 4035022 4035236 774 3282107 3282345 4035626 4035864 860 3282376 3282608 4035895 4036127 838 3282964 3283206 4036483 4036725 874 3283283 3283638 4036802 4037157 1281 3284201 3284402 4037720 4037921 727 3286661 3286910 4040180 4040429 900 3287555 3287899 4041074 4041418 1242 3288084 3288288 4041603 4041807 738 3288551 3288909 4042070 4042428 1292 3289062 3289305 4042581 4042824 878 3289655 3289855 4044132 4044332 723 3289877 3290113 4044354 4044590 853 3290115 3290582 4044592 4045059 1684 3290755 3291112 4045232 4045589 1288 3291114 3291324 4045591 4045801 759 3291448 3291914 4045925 4046391 1681 3294415 3294681 4048892 4049158 961 3295677 3295895 4050154 4050372 788 3296398 3296801 4050875 4051278 1454 3297543 3297742 4052020 4052219 720 3298340 3298676 4052817 4053153 1213 3298774 3299360 4053251 4053837 2113 3299731 3299948 4054208 4054425 784 3300663 3300927 4055140 4055404 954 3300929 3301158 4055406 4055635 828 3302463 3302684 4056939 4057160 799 3302991 3303501 4057467 4057977 1839 3305400 3306657 4059876 4061133 4528 3306659 3306903 4061135 4061379 882 3307568 3307857 4062044 4062333 1044 3308687 3309085 4063163 4063561 1436 3309087 3309496 4063563 4063972 1476 3311453 3311752 4065930 4066229 1080 3311877 3312139 4066354 4066616 946 3312567 3312796 4067044 4067273 828 3313095 3314016 4067572 4068493 3319 3314043 3314317 4068520 4068794 990 3314619 3314848 4069096 4069325 828 3314994 3315210 4069471 4069687 781 3315237 3315882 4069714 4070359 2325 3316069 3316332 4070546 4070809 950 3316334 3316671 4070811 4071148 1216 3317022 3317247 4071499 4071724 813 3317926 3318211 4072403 4072688 1029 3319575 3319803 4074052 4074280 824 3320704 3320981 4075181 4075458 1000 3321517 3321738 4075994 4076215 799 3321794 3322098 4076271 4076575 1098 3322373 3322738 4076850 4077215 1317 3322740 3323120 4077217 4077597 1371 3323296 3323579 4077773 4078056 1022 3323791 3324010 4078268 4078487 792 3324289 3325821 4078766 4080298 5518 3326435 3326781 4080912 4081258 1249 3327152 3327606 4081629 4082083 1638 3328286 3328491 4082617 4082822 741 3328573 3328944 4082904 4083275 1339 3329138 3329874 4083469 4084205 2653 3330017 3330222 4084348 4084553 741 3330305 3331594 4084636 4085925 4644 3332630 3332940 4086962 4087272 1119 3332942 3333168 4087274 4087500 817 3333452 3333675 4087784 4088007 806 3334040 3334683 4088372 4089015 2318 3335272 3335486 4089604 4089818 774 3335488 3335690 4089820 4090022 730 3336004 3336375 4090336 4090707 1339 3336407 3336708 4090739 4091040 1087 3336954 3337849 4091286 4092181 3225 3337851 3338073 4092183 4092405 802 3338209 3338606 4092541 4092938 1432 3338608 3339078 4092940 4093410 1695 3339276 3339588 4093608 4093920 1126 3339755 3339998 4094087 4094330 878 3340842 3341126 4095174 4095458 1026 3341254 3341495 4095586 4095827 871 3341503 3341792 4095835 4096124 1044 3342146 3342691 4096478 4097023 1965 3343431 3343684 4097763 4098016 914 3343782 3344130 4098114 4098462 1256 3344132 3344351 4098464 4098683 792 3344464 3344685 4098796 4099017 799 3344687 3344999 4099019 4099331 1126 3345364 3345610 4099696 4099942 889 3345711 3345964 4100043 4100296 914 3347531 3347774 4101863 4102106 878 3348585 3348874 4102918 4103207 1044 3349350 3349750 4103689 4104089 1443 3350193 3350608 4104532 4104947 1497 3350610 3350865 4104949 4105204 921 3350867 3351138 4105206 4105477 979 3352255 3352513 4106593 4106851 932 3353622 3354112 4107960 4108450 1767 3356796 3357073 4111134 4111411 1000 3366139 3366442 4113372 4113675 1094 3367797 3368028 4115030 4115261 835 3370165 3370385 4117398 4117618 795 3370660 3371060 4117893 4118293 1443 3371161 3371361 4118394 4118594 723 3371849 3372422 4119082 4119655 2066 3373076 3373278 4120306 4120508 730 3373962 3374538 4121184 4121760 2077 3374755 3375128 4121977 4122350 1346 3375420 3375673 4122642 4122895 914 3375711 3376496 4122933 4123718 2829 3376514 3376845 4123736 4124067 1195 3377243 3377442 4124465 4124664 720 3377618 3378057 4124840 4125279 1584 3378059 3378453 4125281 4125675 1422 3379305 3379767 4126527 4126989 1666 3379769 3379970 4126991 4127192 727 3379972 3380294 4127194 4127516 1162 3381775 3382057 4128998 4129280 1018 3382203 3382584 4129426 4129807 1375 3382900 3383770 4130123 4130993 3135 3384948 3385674 4132172 4132898 2617 3386228 3386538 4133452 4133762 1119 3386569 3386877 4133790 4134098 1112 3386989 3387192 4134210 4134413 734 3387265 3387626 4134486 4134847 1303 3387934 3388145 4135155 4135366 763 3388256 3388744 4135477 4135965 1760 3389365 3389594 4136586 4136815 828 3390014 3390275 4136960 4137221 943 3390277 3390599 4137223 4137545 1162 3392293 3392512 4139239 4139458 792 3392557 3392786 4139503 4139732 828 3392788 3393011 4139734 4139957 806 3393173 3393450 4140118 4140395 1000 3393686 3394084 4140631 4141029 1436 3394140 3394555 4141085 4141500 1497 3395220 3395510 4142165 4142455 1047 3395701 3396052 4142646 4142997 1267 3396054 3396358 4142999 4143303 1098 3396638 3396948 4143583 4143893 1119 3397136 3397383 4144081 4144328 892 3397399 3397658 4144344 4144603 936 3397963 3398162 4144908 4145107 720 3398383 3398994 4145328 4145939 2203 3399308 3399660 4146253 4146605 1270 3399662 3399972 4146607 4146917 1119 3399974 3400293 4146919 4147238 1152 3400295 3400512 4147240 4147457 784 3400791 3401694 4147736 4148639 3254 3401774 3402104 4148719 4149049 1191 3402738 3402963 4149683 4149908 813 3402965 3403364 4149910 4150309 1440 3403366 3404046 4150311 4150991 2451 3404282 3404908 4151227 4151853 2257 3405498 3405850 4152443 4152795 1270 3406435 3406830 4153380 4153775 1425 3407033 3407362 4153978 4154307 1188 3407602 3409217 4154547 4156162 5817 3409487 3409824 4156431 4156768 1216 3409826 3410193 4156770 4157137 1324 3410195 3410933 4157139 4157877 2660 3411367 3411948 4158311 4158892 2095 3412181 3412416 4159125 4159360 849 3412553 3412778 4159497 4159722 813 3412780 3413087 4159724 4160031 1108 3413710 3413969 4160654 4160913 936 3415878 3416189 4162867 4163178 1123 3417604 3418404 4164594 4165394 2883 3418988 3419228 4165979 4166219 867 3419651 3419918 4166642 4166909 964 3420023 3420385 4167014 4167376 1306 3421119 3421407 4168109 4168397 1040 3421879 3422207 4168871 4169199 1184 3422696 3423208 4169687 4170199 1846 3423250 3423832 4170241 4170823 2098 3423878 3424155 4170871 4171148 1000 3424157 3424431 4171150 4171424 990 3424482 3426125 4171484 4173127 5918 3426321 3426619 4173323 4173621 1076 3426774 3427305 4173775 4174306 1915 3428346 3429032 4175347 4176033 2473 3429282 3429525 4176283 4176526 878 3430001 3430287 4177001 4177287 1033 3430453 3430789 4177454 4177790 1213 3431126 3431537 4178127 4178538 1483 3431698 3432088 4178699 4179089 1407 3432565 3432830 4179566 4179831 957 3432832 3433035 4179833 4180036 734 3434766 3434974 4181767 4181975 752 3435183 3435478 4182184 4182479 1065 3435480 3435757 4182481 4182758 1000 3436077 3436279 4183078 4183280 730 3437201 3439353 4184202 4186354 7750 3439355 3441199 4186356 4188200 6642 3441372 3441946 4188373 4188947 2070 3441948 3442484 4188949 4189485 1933 3442567 3445133 4189568 4192134 9241 3445135 3445932 4192136 4192933 2872 3445934 3446766 4192935 4193767 2998 3446768 3447008 4193769 4194009 867 3447010 3447961 4194011 4194962 3427 3447963 3448448 4194964 4195449 1749 3448621 3450172 4195622 4197173 5587 3450174 3451090 4197175 4198091 3301 3467941 3468347 4199836 4200242 1465 3468373 3468755 4200268 4200650 1378 3468757 3469776 4200652 4201671 3672 3469778 3470013 4201673 4201908 849 3470015 3470337 4201910 4202232 1162 3470339 3470712 4202234 4202607 1346 3470837 3471247 4202732 4203142 1479 3471249 3472330 4203144 4204225 3895 3473266 3474010 4205161 4205905 2682 3474012 3474340 4205907 4206235 1184 3474751 3474955 4206646 4206850 738 3475166 3475532 4207061 4207427 1321 3475706 3476308 4207601 4208203 2170 3478532 3479001 4210427 4210896 1692 3479003 3479205 4210898 4211100 730 3479381 3479787 4211276 4211682 1465 3480317 3480531 4212212 4212426 774 3480674 3480892 4212569 4212787 788 3481588 3482044 4213483 4213939 1645 3483129 3483391 4215024 4215286 946 3483405 3483901 4215300 4215796 1789 3483903 3484103 4215798 4215998 723 3484812 3485304 4216707 4217199 1774 3486203 3486522 4218098 4218417 1152 3487530 3487738 4219425 4219633 752 3488086 3488312 4219981 4220207 817 3489056 3489588 4220951 4221483 1918 3489620 3490343 4221515 4222238 2606 3490345 3490778 4222240 4222673 1562 3491552 3491969 4223447 4223864 1504 3492244 3492530 4224139 4224425 1033 3493357 3493806 4225252 4225701 1620 3494018 3494564 4225913 4226459 1969 3494566 3494775 4226461 4226670 756 3495233 3495786 4227128 4227681 1994 3497732 3497962 4229636 4229866 831 3498221 3498495 4230125 4230399 990 3500412 3500638 4232316 4232542 817 3502130 3502383 4234034 4234287 914 3511022 3511224 4235206 4235408 730 3511226 3511429 4235410 4235613 734 3511479 3511726 4235663 4235910 892 3512254 3512477 4236438 4236661 806 3512572 3512884 4236756 4237068 1126 3513156 3513713 4237340 4237897 2008 3513715 3513932 4237899 4238116 784 3514385 3515230 4238569 4239414 3045 3515240 3515540 4239424 4239724 1083 3515918 3516383 4240102 4240567 1677 3516385 3516757 4240569 4240941 1342 3516759 3516985 4240943 4241169 817 3516987 3517215 4241171 4241399 824 3517217 3517614 4241401 4241798 1432 3517616 3517842 4241800 4242026 817 3518195 3518414 4242379 4242598 792 3518416 3518675 4242600 4242859 936 3520327 3520731 4244510 4244914 1458 3520965 3521184 4245148 4245367 792 3521285 3521538 4245468 4245721 914 3522164 3522606 4246347 4246789 1594 3523701 3524476 4247883 4248658 2793 3524613 3524845 4248795 4249027 838 3525597 3526027 4249779 4250209 1551 3526302 3526895 4250484 4251077 2138 3526994 3527511 4251176 4251693 1864 3527798 3528156 4251980 4252338 1292 3529862 3530732 4254044 4254914 3135 3531598 3531959 4255780 4256141 1303 3533168 3533540 4257350 4257722 1342 3533605 3533840 4257787 4258022 849 3533944 3534609 4258126 4258791 2397 3534872 3535125 4259054 4259307 914 3535502 3535933 4259684 4260115 1555 3537716 3538058 4261881 4262223 1234 3538118 3538388 4262283 4262553 975 3538720 3538988 4262885 4263153 968 3539188 3539423 4263353 4263588 849 3542064 3542270 4266227 4266433 745 3543166 3543377 4267329 4267540 763 3544363 3544621 4268530 4268788 932 3545028 3545338 4269195 4269505 1119 3546156 3546421 4270257 4270522 957 3547430 3547650 4271531 4271751 795 3547653 3548003 4271754 4272104 1263 3548005 3548356 4272106 4272457 1267 3548687 3548920 4272788 4273021 842 3549389 3549652 4273490 4273753 950 3549996 3550236 4274097 4274337 867 3550457 3550734 4274558 4274835 1000 3550966 3551195 4275067 4275296 828 3551197 3551564 4275298 4275665 1324 3551566 3551783 4275667 4275884 784 3552517 3552752 4276618 4276853 849 3557336 3557543 4282277 4282484 748 3557579 3557826 4282520 4282767 892 3558241 3558696 4283182 4283637 1641 3558933 3559148 4283874 4284089 777 3559415 3559617 4284356 4284558 730 3559675 3559992 4284616 4284933 1144 3560557 3560792 4285498 4285733 849 3561803 3562239 4289596 4290032 1573 3562646 3563634 4290439 4291427 3560 3563858 3564327 4291651 4292120 1692 3564329 3564567 4292122 4292360 860 3564976 3565428 4292769 4293221 1630 3565472 3566159 4293265 4293952 2476 3566161 3566576 4293954 4294369 1497 3566584 3567271 4294377 4295064 2476 3567273 3567496 4295066 4295289 806 3567597 3567963 4295390 4295756 1321 3568254 3568461 4296047 4296254 748 3568479 3569058 4296272 4296851 2088 3569644 3569895 4297437 4297688 907 3570512 3570762 4298305 4298555 903 3570926 3571649 4298719 4299442 2606 3571651 3571952 4299444 4299745 1087 3572002 3572237 4299795 4300030 849 3572517 3572896 4300309 4300688 1368 genometools-1.5.1/testdata/chaindata/chain-local2p-wf1.8-maxgap10000066400000000000000000000010371211610345200244060ustar00rootroot00000000000000# chain 0: length 7 score 21507 1085337 1086089 1412837 1413589 2710 1086091 1086892 1413591 1414392 2887 1086894 1088334 1414394 1415834 5187 1088336 1088973 1415836 1416473 2296 1088975 1089198 1416475 1416698 806 1089200 1090692 1416700 1418192 5374 1090694 1091324 1418194 1418824 2271 # chain 1: length 6 score 21134 3442567 3445133 4189568 4192134 9241 3445135 3445932 4192136 4192933 2872 3445934 3446766 4192935 4193767 2998 3446768 3447008 4193769 4194009 867 3447010 3447961 4194011 4194962 3427 3447963 3448448 4194964 4195449 1749 genometools-1.5.1/testdata/chaindata/chain-local55p-silent000066400000000000000000000002041211610345200235100ustar00rootroot00000000000000# chain 0: length 21 score 20527 # chain 1: length 26 score 24372 # chain 2: length 98 score 36877 # chain 3: length 50 score 19920 genometools-1.5.1/testdata/chaindata/chain-silent-global000066400000000000000000000000451211610345200233270ustar00rootroot00000000000000# chain 0: length 4258 score 2988370 genometools-1.5.1/testdata/chaindata/matches-nd.chains000066400000000000000000000007301211610345200230030ustar00rootroot00000000000000# chain 0: length 2 score 2 0 32 530 551 1 33 75 654 695 1 # chain 1: length 2 score 2 0 32 618 639 1 33 75 654 695 1 # chain 2: length 2 score 2 0 32 530 551 1 33 75 679 695 1 # chain 3: length 2 score 2 0 32 618 639 1 33 75 679 695 1 # chain 4: length 2 score 2 0 32 530 551 1 33 75 723 750 1 # chain 5: length 2 score 2 0 32 618 639 1 33 75 723 750 1 # chain 6: length 2 score 2 0 32 530 551 1 33 75 727 758 1 # chain 7: length 2 score 2 0 32 618 639 1 33 75 727 758 1 genometools-1.5.1/testdata/chaindata/matches-nd.txt000066400000000000000000000002341211610345200223540ustar00rootroot0000000000000033 75 43 61 1 33 75 381 411 1 33 75 382 415 1 33 75 390 415 1 0 32 530 551 1 0 32 618 639 1 33 75 654 695 1 33 75 679 695 1 33 75 723 750 1 33 75 727 758 1 genometools-1.5.1/testdata/consensus_sa/000077500000000000000000000000001211610345200203605ustar00rootroot00000000000000genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input.in000066400000000000000000000012731211610345200252610ustar00rootroot00000000000000gi|19742504|gb|AU227857.1|AU227857,-,48228-48472,49045-49140,49222-49331 gi|8731880|gb|AV560454.1|AV560454,-,48231-48472,49045-49140,49222-49485 gi|21404343|gb|AY085633.1|,-,48232-48472,48847-48974,49045-49140,49222-49760,50200-50360 gi|22531065|gb|AY136371.1|,-,48271-48472,48913-48974,49045-49140,49222-49760,50200-50410 gi|23198031|gb|BT000224.1|,-,48417-48472,48913-48974,49045-49140,49222-49760,50200-50299 gi|5839305|gb|AI992400.1|AI992400,-,49340-49760,50200-50356 gi|19876023|gb|AU236854.1|AU236854,-,49441-49760,50200-50363 gi|1054435|gb|H77184.1|H77184,-,49474-49760,50200-50356 gi|26019954|gb|CA781911.1|CA781911,-,49526-49760,50200-50449 gi|19871952|gb|AV829892.1|AV829892,-,50275-50422 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input.out000066400000000000000000000001111211610345200254500ustar00rootroot00000000000000contains [0,1,5,6,7,8,9] contains [3,4,5,6,7,8,9] contains [2,5,6,7,8,9] genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input10.in000066400000000000000000000257451211610345200254340ustar00rootroot00000000000000gi|8690382|gb|AV530099.1|AV530099,+,73361-73629,74908-75027,75121-75265 gi|19865640|gb|AV823580.1|AV823580,+,73485-73629,74908-75027,75121-75261 gi|19869340|gb|AV827280.1|AV827280,+,73485-73629,74908-75027,75121-75357,75442-75545 gi|19870458|gb|AV828398.1|AV828398,+,73485-73629,74908-75027,75121-75281 gi|19867428|gb|AV825368.1|AV825368,+,73485-73629,74908-75027,75121-75357,75442-75535 gi|19870789|gb|AV828729.1|AV828729,+,73485-73629,74908-75027,75121-75357,75442-75471 gi|19871830|gb|AV829770.1|AV829770,+,73485-73629,74908-75027,75121-75357,75442-75537 gi|19872557|gb|AV830497.1|AV830497,+,73488-73629,74908-75027,75121-75357,75442-75506 gi|19872786|gb|AV830726.1|AV830726,+,73489-73629,74908-75027,75121-75161 gi|166745|gb|M24107.1|ATHHATPA,+,73497-73629,74908-75027,75121-75357,75442-76203,76299-76421,76500-76604,76696-76840,76930-77094,77187-77425,77520-77552,77643-77724,77812-77972,78102-78275,78360-78542,78629-78810,78902-79266 gi|8689542|gb|AV529259.1|AV529259,+,73504-73629,74908-75027,75121-75357,75442-75460 gi|9788776|gb|BE530786.1|BE530786,+,73505-73629,74908-75025 gi|8689093|gb|AV528810.1|AV528810,+,73506-73629,74908-75027,75121-75357,75442-75468 gi|8690319|gb|AV530036.1|AV530036,+,73507-73629,74908-75027,75121-75357,75442-75460 gi|8688689|gb|AV528406.1|AV528406,+,73509-73629,74908-75027,75121-75357,75442-75469 gi|8332698|gb|BE037682.1|BE037682,+,73509-73629,74908-75027,75121-75357,75442-75672 gi|8689631|gb|AV529348.1|AV529348,+,73513-73629,74908-75027,75121-75357,75442-75523 gi|8688745|gb|AV528462.1|AV528462,+,73540-73629,74908-75027,75121-75357,75442-75544 gi|8689405|gb|AV529122.1|AV529122,+,73548-73629,74908-75027,75121-75357,75442-75527 gi|8687701|gb|AV528173.1|AV528173,+,73556-73629,74908-75027,75121-75357,75442-75566 gi|8690042|gb|AV529759.1|AV529759,+,73576-73629,74908-75027,75121-75357,75442-75511 gi|8718164|gb|AV546750.1|AV546750,+,73590-73629,74908-75027,75121-75369 gi|8689841|gb|AV529558.1|AV529558,+,74948-75027,75121-75357,75442-75636 gi|8726312|gb|AV554897.1|AV554897,+,74980-75027,75121-75357,75442-75619 gi|8689350|gb|AV529067.1|AV529067,+,75154-75357,75442-75550 gi|8688899|gb|AV528616.1|AV528616,+,75188-75357,75442-75542 gi|8690214|gb|AV529931.1|AV529931,+,75207-75357,75442-75625 gi|8689229|gb|AV528946.1|AV528946,+,75279-75357,75442-75876 gi|8689793|gb|AV529510.1|AV529510,+,75464-75994 gi|8689759|gb|AV529476.1|AV529476,+,75520-75831 gi|8688977|gb|AV528694.1|AV528694,+,75603-76133 gi|26019912|gb|CA781870.1|CA781870,+,75832-76203,76299-76421,76500-76604,76696-76804 gi|8687299|gb|AV527771.1|AV527771,+,76104-76203,76299-76421,76500-76604,76696-76840,76930-76968 gi|7612388|gb|AV441989.1|AV441989,+,76129-76203,76299-76421,76500-76604,76696-76723 gi|2759986|gb|R86801.1|R86801,+,76142-76203,76299-76350 gi|8721274|gb|AV549861.1|AV549861,+,76329-76421,76500-76604,76696-76816 gi|8684108|gb|AV524580.1|AV524580,+,76398-76421,76500-76604,76696-76840,76930-77094,77187-77271 gi|8722317|gb|AV550904.1|AV550904,+,76934-77094,77187-77425,77520-77552,77643-77693 gi|8721865|gb|AV550452.1|AV550452,+,77012-77094,77187-77425,77520-77532 gi|8686414|gb|AV526886.1|AV526886,+,77019-77094,77187-77425,77520-77552,77643-77724,77812-77898 gi|1217037|gb|N65411.1|N65411,+,77060-77094,77187-77425,77520-77552,77643-77678 gi|7610962|gb|AV440594.1|AV440594,+,77206-77425,77520-77552,77643-77724,77812-77916 gi|315407|gb|T04247.1|T04247,+,77226-77425,77520-77552,77643-77724,77812-77897 gi|8727635|gb|AV556220.1|AV556220,+,77524-77552,77643-77724,77812-77884 gi|935616|gb|T76642.1|T76642,+,77525-77552,77643-77724,77812-77972,78102-78206 gi|8722019|gb|AV550606.1|AV550606,+,77704-77724,77812-77972,78102-78275,78360-78489 gi|8721631|gb|AV550218.1|AV550218,+,77824-77972,78102-78275,78360-78540 gi|937030|gb|R30368.1|R30368,+,77846-77972,78102-78253 gi|935549|gb|T76572.1|T76572,+,78117-78275,78360-78436 gi|906807|gb|H37308.1|H37308,+,78142-78275,78360-78542,78629-78753 gi|2759636|gb|T44843.1|T44843,+,78368-78542,78629-78788 gi|957845|gb|R90305.1|R90305,+,78375-78542,78629-78759 gi|8717301|gb|AV545887.1|AV545887,+,78377-78542,78629-78810,78902-79178 gi|957844|gb|R90304.1|R90304,+,78394-78542,78629-78790 gi|8683156|gb|AV523628.1|AV523628,+,78394-78542,78629-78810,78902-79170 gi|8683282|gb|AV523754.1|AV523754,+,78409-78542,78629-78810,78902-79200 gi|2596846|gb|T22192.1|T22192,+,78414-78542,78629-78702 gi|8698528|gb|AV538245.1|AV538245,+,78434-78542,78629-78810,78902-79206 gi|8683763|gb|AV524235.1|AV524235,+,78438-78542,78629-78810,78902-79246 gi|8682933|gb|AV523405.1|AV523405,+,78450-78542,78629-78810,78902-79221 gi|8678752|gb|AV519225.1|AV519225,+,78461-78542,78629-78810,78902-79206 gi|8683333|gb|AV523805.1|AV523805,+,78462-78542,78629-78810,78902-79173 gi|8682631|gb|AV523104.1|AV523104,+,78475-78542,78629-78810,78902-79256 gi|8700351|gb|AV538595.1|AV538595,+,78476-78542,78629-78810,78902-79188 gi|8682397|gb|AV522870.1|AV522870,+,78506-78542,78629-78810,78902-79137 gi|2733910|gb|AA720300.1|AA720300,+,78507-78542,78629-78737 gi|8716477|gb|AV545063.1|AV545063,+,78511-78542,78629-78810,78902-79242 gi|8725117|gb|AV553704.1|AV553704,+,78511-78542,78629-78810,78902-79239 gi|8677570|gb|AV518043.1|AV518043,+,78525-78542,78629-78810,78902-79245 gi|8718102|gb|AV546688.1|AV546688,+,78525-78542,78629-78810,78902-79243 gi|8732297|gb|AV560871.1|AV560871,+,78525-78542,78629-78810,78902-79312 gi|8682974|gb|AV523446.1|AV523446,+,78525-78542,78629-78810,78902-79192 gi|8719568|gb|AV548155.1|AV548155,+,78628-78810,78902-79250 gi|8719555|gb|AV548142.1|AV548142,+,78628-78810,78902-79264 gi|8717378|gb|AV545964.1|AV545964,+,78629-78810,78902-79292 gi|5851401|gb|AW004372.1|AW004372,+,78630-78810,78902-79230 gi|8718761|gb|AV547347.1|AV547347,+,78642-78810,78902-79292 gi|8727397|gb|AV555982.1|AV555982,+,78643-78810,78902-79286 gi|19825183|gb|AV791200.1|AV791200,+,78645-78810,78902-79192 gi|19825611|gb|AV791628.1|AV791628,+,78652-78810,78902-79187 gi|930537|gb|R84103.1|R84103,+,78657-78810,78902-79065 gi|19825971|gb|AV791988.1|AV791988,+,78663-78810,78902-79177 gi|19843957|gb|AV809972.1|AV809972,+,78664-78810,78902-79178 gi|19803368|gb|AV784578.1|AV784578,+,78666-78810,78902-79263 gi|19826955|gb|AV792972.1|AV792972,+,78667-78810,78902-79192 gi|19839851|gb|AV805866.1|AV805866,+,78671-78810,78902-79159 gi|19844231|gb|AV810246.1|AV810246,+,78672-78810,78902-79187 gi|8682609|gb|AV523082.1|AV523082,+,78673-78810,78902-79211 gi|8693713|gb|AV533430.1|AV533430,+,78673-78810,78902-79154 gi|19836591|gb|AV802606.1|AV802606,+,78674-78810,78902-79159 gi|8698353|gb|AV538070.1|AV538070,+,78675-78810,78902-79348 gi|8704263|gb|AV542503.1|AV542503,+,78675-78810,78902-79289 gi|19844632|gb|AV810647.1|AV810647,+,78677-78810,78902-79187 gi|19837593|gb|AV803608.1|AV803608,+,78680-78810,78902-79178 gi|19826840|gb|AV792857.1|AV792857,+,78686-78810,78902-79219 gi|8703224|gb|AV541465.1|AV541465,+,78688-78810,78902-79305 gi|8719849|gb|AV548436.1|AV548436,+,78688-78810,78902-79281 gi|8718953|gb|AV547539.1|AV547539,+,78689-78810,78902-79222 gi|19860396|gb|AV818478.1|AV818478,+,78691-78810,78902-79179 gi|19861182|gb|AV819243.1|AV819243,+,78694-78810,78902-79219 gi|19841851|gb|AV807866.1|AV807866,+,78699-78810,78902-79219 gi|19839963|gb|AV805978.1|AV805978,+,78702-78810,78902-79188 gi|19826611|gb|AV792628.1|AV792628,+,78703-78810,78902-79219 gi|19843657|gb|AV809672.1|AV809672,+,78705-78810,78902-79219 gi|19830534|gb|AV796551.1|AV796551,+,78705-78810,78902-79219 gi|19861682|gb|AV819737.1|AV819737,+,78709-78810,78902-79219 gi|19861604|gb|AV819661.1|AV819661,+,78710-78810,78902-79219 gi|8683089|gb|AV523561.1|AV523561,+,78711-78810,78902-79256 gi|8698102|gb|AV537819.1|AV537819,+,78712-78810,78902-79193 gi|8719443|gb|AV548030.1|AV548030,+,78713-78810,78902-79312 gi|19858883|gb|AV817015.1|AV817015,+,78716-78810,78902-79219 gi|8739161|gb|AV567707.1|AV567707,+,78718-78810,78902-79202 gi|19846778|gb|AV812793.1|AV812793,+,78720-78810,78902-79219 gi|8700100|gb|AV538344.1|AV538344,+,78724-78810,78902-79292 gi|19841052|gb|AV807067.1|AV807067,+,78729-78810,78902-79226 gi|19844191|gb|AV810206.1|AV810206,+,78731-78810,78902-79243 gi|19835847|gb|AV801862.1|AV801862,+,78731-78810,78902-79219 gi|8719704|gb|AV548291.1|AV548291,+,78738-78810,78902-79292 gi|8718763|gb|AV547349.1|AV547349,+,78739-78810,78902-79275 gi|19830408|gb|AV796425.1|AV796425,+,78741-78810,78902-79263 gi|19862839|gb|AV820854.1|AV820854,+,78741-78810,78902-79219 gi|19831700|gb|AV797717.1|AV797717,+,78742-78810,78902-79264 gi|8683627|gb|AV524099.1|AV524099,+,78744-78810,78902-79276 gi|19825879|gb|AV791896.1|AV791896,+,78744-78810,78902-79266 gi|19829664|gb|AV795681.1|AV795681,+,78745-78810,78902-79262 gi|19842507|gb|AV808522.1|AV808522,+,78745-78810,78902-79260 gi|19836959|gb|AV802974.1|AV802974,+,78751-78810,78902-79243 gi|19832759|gb|AV798776.1|AV798776,+,78752-78810,78902-79267 gi|19845923|gb|AV811938.1|AV811938,+,78753-78810,78902-79243 gi|19844492|gb|AV810507.1|AV810507,+,78754-78810,78902-79250 gi|19861081|gb|AV819143.1|AV819143,+,78755-78810,78902-79267 gi|8719463|gb|AV548050.1|AV548050,+,78756-78810,78902-79296 gi|19860142|gb|AV818235.1|AV818235,+,78757-78810,78902-79262 gi|19860788|gb|AV818856.1|AV818856,+,78764-78810,78902-79267 gi|19836747|gb|AV802762.1|AV802762,+,78764-78810,78902-79294 gi|19857562|gb|AV815724.1|AV815724,+,78767-78810,78902-79264 gi|19856594|gb|AV814785.1|AV814785,+,78767-78810,78902-79264 gi|19847790|gb|AV813805.1|AV813805,+,78768-78810,78902-79264 gi|19840031|gb|AV806046.1|AV806046,+,78769-78810,78902-79296 gi|19800221|gb|AV781431.1|AV781431,+,78769-78810,78902-79219 gi|19826509|gb|AV792526.1|AV792526,+,78774-78810,78902-79289 gi|8683390|gb|AV523862.1|AV523862,+,78776-78810,78902-79240 gi|19862239|gb|AV820279.1|AV820279,+,78780-78810,78902-79267 gi|19838855|gb|AV804870.1|AV804870,+,78782-78810,78902-79296 gi|19858089|gb|AV816237.1|AV816237,+,78783-78810,78902-79289 gi|19827485|gb|AV793502.1|AV793502,+,78784-78810,78902-79296 gi|19838386|gb|AV804401.1|AV804401,+,78785-78810,78902-79292 gi|19856843|gb|AV815025.1|AV815025,+,78788-78810,78902-79288 gi|19834164|gb|AV800179.1|AV800179,+,78790-78810,78902-79292 gi|8693278|gb|AV532995.1|AV532995,+,78792-78810,78902-79222 gi|19833673|gb|AV799688.1|AV799688,+,78793-78810,78902-79292 gi|19856138|gb|AV814353.1|AV814353,+,78795-78810,78902-79292 gi|19834374|gb|AV800389.1|AV800389,+,78800-78810,78902-79293 gi|19857373|gb|AV815541.1|AV815541,+,78900-79293 gi|8718558|gb|AV547144.1|AV547144,+,78900-79220 gi|19836630|gb|AV802645.1|AV802645,+,78900-79296 gi|8717883|gb|AV546469.1|AV546469,+,78904-79292 gi|8683858|gb|AV524330.1|AV524330,+,78911-79257 gi|19825083|gb|AV791100.1|AV791100,+,78915-79347 gi|8718249|gb|AV546835.1|AV546835,+,78944-79292 gi|498468|gb|Z34112.1|Z34112,+,78946-79292 gi|19837870|gb|AV803885.1|AV803885,+,78947-79348 gi|8704456|gb|AV542696.1|AV542696,+,78964-79292 gi|8718245|gb|AV546831.1|AV546831,+,78965-79292 gi|8718893|gb|AV547479.1|AV547479,+,79021-79348 gi|8704620|gb|AV542860.1|AV542860,+,79039-79289 gi|8703313|gb|AV541554.1|AV541554,+,79040-79288 gi|8717589|gb|AV546175.1|AV546175,+,79052-79241 gi|8701476|gb|AV539719.1|AV539719,+,79082-79349 gi|8736645|gb|AV565207.1|AV565207,+,79084-79283 gi|8718230|gb|AV546816.1|AV546816,+,79085-79254 gi|8704463|gb|AV542703.1|AV542703,+,79124-79292 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input10.out000066400000000000000000000020331211610345200256160ustar00rootroot00000000000000contains [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171] contains [72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171] contains [153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171] contains [0,5,6,8,11,21] genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input10_minusFL.in000066400000000000000000000254041211610345200270610ustar00rootroot00000000000000gi|8690382|gb|AV530099.1|AV530099,+,73361-73629,74908-75027,75121-75265 gi|19865640|gb|AV823580.1|AV823580,+,73485-73629,74908-75027,75121-75261 gi|19869340|gb|AV827280.1|AV827280,+,73485-73629,74908-75027,75121-75357,75442-75545 gi|19870458|gb|AV828398.1|AV828398,+,73485-73629,74908-75027,75121-75281 gi|19867428|gb|AV825368.1|AV825368,+,73485-73629,74908-75027,75121-75357,75442-75535 gi|19870789|gb|AV828729.1|AV828729,+,73485-73629,74908-75027,75121-75357,75442-75471 gi|19871830|gb|AV829770.1|AV829770,+,73485-73629,74908-75027,75121-75357,75442-75537 gi|19872557|gb|AV830497.1|AV830497,+,73488-73629,74908-75027,75121-75357,75442-75506 gi|19872786|gb|AV830726.1|AV830726,+,73489-73629,74908-75027,75121-75161 gi|8689542|gb|AV529259.1|AV529259,+,73504-73629,74908-75027,75121-75357,75442-75460 gi|9788776|gb|BE530786.1|BE530786,+,73505-73629,74908-75025 gi|8689093|gb|AV528810.1|AV528810,+,73506-73629,74908-75027,75121-75357,75442-75468 gi|8690319|gb|AV530036.1|AV530036,+,73507-73629,74908-75027,75121-75357,75442-75460 gi|8688689|gb|AV528406.1|AV528406,+,73509-73629,74908-75027,75121-75357,75442-75469 gi|8332698|gb|BE037682.1|BE037682,+,73509-73629,74908-75027,75121-75357,75442-75672 gi|8689631|gb|AV529348.1|AV529348,+,73513-73629,74908-75027,75121-75357,75442-75523 gi|8688745|gb|AV528462.1|AV528462,+,73540-73629,74908-75027,75121-75357,75442-75544 gi|8689405|gb|AV529122.1|AV529122,+,73548-73629,74908-75027,75121-75357,75442-75527 gi|8687701|gb|AV528173.1|AV528173,+,73556-73629,74908-75027,75121-75357,75442-75566 gi|8690042|gb|AV529759.1|AV529759,+,73576-73629,74908-75027,75121-75357,75442-75511 gi|8718164|gb|AV546750.1|AV546750,+,73590-73629,74908-75027,75121-75369 gi|8689841|gb|AV529558.1|AV529558,+,74948-75027,75121-75357,75442-75636 gi|8726312|gb|AV554897.1|AV554897,+,74980-75027,75121-75357,75442-75619 gi|8689350|gb|AV529067.1|AV529067,+,75154-75357,75442-75550 gi|8688899|gb|AV528616.1|AV528616,+,75188-75357,75442-75542 gi|8690214|gb|AV529931.1|AV529931,+,75207-75357,75442-75625 gi|8689229|gb|AV528946.1|AV528946,+,75279-75357,75442-75876 gi|8689793|gb|AV529510.1|AV529510,+,75464-75994 gi|8689759|gb|AV529476.1|AV529476,+,75520-75831 gi|8688977|gb|AV528694.1|AV528694,+,75603-76133 gi|26019912|gb|CA781870.1|CA781870,+,75832-76203,76299-76421,76500-76604,76696-76804 gi|8687299|gb|AV527771.1|AV527771,+,76104-76203,76299-76421,76500-76604,76696-76840,76930-76968 gi|7612388|gb|AV441989.1|AV441989,+,76129-76203,76299-76421,76500-76604,76696-76723 gi|2759986|gb|R86801.1|R86801,+,76142-76203,76299-76350 gi|8721274|gb|AV549861.1|AV549861,+,76329-76421,76500-76604,76696-76816 gi|8684108|gb|AV524580.1|AV524580,+,76398-76421,76500-76604,76696-76840,76930-77094,77187-77271 gi|8722317|gb|AV550904.1|AV550904,+,76934-77094,77187-77425,77520-77552,77643-77693 gi|8721865|gb|AV550452.1|AV550452,+,77012-77094,77187-77425,77520-77532 gi|8686414|gb|AV526886.1|AV526886,+,77019-77094,77187-77425,77520-77552,77643-77724,77812-77898 gi|1217037|gb|N65411.1|N65411,+,77060-77094,77187-77425,77520-77552,77643-77678 gi|7610962|gb|AV440594.1|AV440594,+,77206-77425,77520-77552,77643-77724,77812-77916 gi|315407|gb|T04247.1|T04247,+,77226-77425,77520-77552,77643-77724,77812-77897 gi|8727635|gb|AV556220.1|AV556220,+,77524-77552,77643-77724,77812-77884 gi|935616|gb|T76642.1|T76642,+,77525-77552,77643-77724,77812-77972,78102-78206 gi|8722019|gb|AV550606.1|AV550606,+,77704-77724,77812-77972,78102-78275,78360-78489 gi|8721631|gb|AV550218.1|AV550218,+,77824-77972,78102-78275,78360-78540 gi|937030|gb|R30368.1|R30368,+,77846-77972,78102-78253 gi|935549|gb|T76572.1|T76572,+,78117-78275,78360-78436 gi|906807|gb|H37308.1|H37308,+,78142-78275,78360-78542,78629-78753 gi|2759636|gb|T44843.1|T44843,+,78368-78542,78629-78788 gi|957845|gb|R90305.1|R90305,+,78375-78542,78629-78759 gi|8717301|gb|AV545887.1|AV545887,+,78377-78542,78629-78810,78902-79178 gi|957844|gb|R90304.1|R90304,+,78394-78542,78629-78790 gi|8683156|gb|AV523628.1|AV523628,+,78394-78542,78629-78810,78902-79170 gi|8683282|gb|AV523754.1|AV523754,+,78409-78542,78629-78810,78902-79200 gi|2596846|gb|T22192.1|T22192,+,78414-78542,78629-78702 gi|8698528|gb|AV538245.1|AV538245,+,78434-78542,78629-78810,78902-79206 gi|8683763|gb|AV524235.1|AV524235,+,78438-78542,78629-78810,78902-79246 gi|8682933|gb|AV523405.1|AV523405,+,78450-78542,78629-78810,78902-79221 gi|8678752|gb|AV519225.1|AV519225,+,78461-78542,78629-78810,78902-79206 gi|8683333|gb|AV523805.1|AV523805,+,78462-78542,78629-78810,78902-79173 gi|8682631|gb|AV523104.1|AV523104,+,78475-78542,78629-78810,78902-79256 gi|8700351|gb|AV538595.1|AV538595,+,78476-78542,78629-78810,78902-79188 gi|8682397|gb|AV522870.1|AV522870,+,78506-78542,78629-78810,78902-79137 gi|2733910|gb|AA720300.1|AA720300,+,78507-78542,78629-78737 gi|8716477|gb|AV545063.1|AV545063,+,78511-78542,78629-78810,78902-79242 gi|8725117|gb|AV553704.1|AV553704,+,78511-78542,78629-78810,78902-79239 gi|8677570|gb|AV518043.1|AV518043,+,78525-78542,78629-78810,78902-79245 gi|8718102|gb|AV546688.1|AV546688,+,78525-78542,78629-78810,78902-79243 gi|8732297|gb|AV560871.1|AV560871,+,78525-78542,78629-78810,78902-79312 gi|8682974|gb|AV523446.1|AV523446,+,78525-78542,78629-78810,78902-79192 gi|8719568|gb|AV548155.1|AV548155,+,78628-78810,78902-79250 gi|8719555|gb|AV548142.1|AV548142,+,78628-78810,78902-79264 gi|8717378|gb|AV545964.1|AV545964,+,78629-78810,78902-79292 gi|5851401|gb|AW004372.1|AW004372,+,78630-78810,78902-79230 gi|8718761|gb|AV547347.1|AV547347,+,78642-78810,78902-79292 gi|8727397|gb|AV555982.1|AV555982,+,78643-78810,78902-79286 gi|19825183|gb|AV791200.1|AV791200,+,78645-78810,78902-79192 gi|19825611|gb|AV791628.1|AV791628,+,78652-78810,78902-79187 gi|930537|gb|R84103.1|R84103,+,78657-78810,78902-79065 gi|19825971|gb|AV791988.1|AV791988,+,78663-78810,78902-79177 gi|19843957|gb|AV809972.1|AV809972,+,78664-78810,78902-79178 gi|19803368|gb|AV784578.1|AV784578,+,78666-78810,78902-79263 gi|19826955|gb|AV792972.1|AV792972,+,78667-78810,78902-79192 gi|19839851|gb|AV805866.1|AV805866,+,78671-78810,78902-79159 gi|19844231|gb|AV810246.1|AV810246,+,78672-78810,78902-79187 gi|8682609|gb|AV523082.1|AV523082,+,78673-78810,78902-79211 gi|8693713|gb|AV533430.1|AV533430,+,78673-78810,78902-79154 gi|19836591|gb|AV802606.1|AV802606,+,78674-78810,78902-79159 gi|8698353|gb|AV538070.1|AV538070,+,78675-78810,78902-79348 gi|8704263|gb|AV542503.1|AV542503,+,78675-78810,78902-79289 gi|19844632|gb|AV810647.1|AV810647,+,78677-78810,78902-79187 gi|19837593|gb|AV803608.1|AV803608,+,78680-78810,78902-79178 gi|19826840|gb|AV792857.1|AV792857,+,78686-78810,78902-79219 gi|8703224|gb|AV541465.1|AV541465,+,78688-78810,78902-79305 gi|8719849|gb|AV548436.1|AV548436,+,78688-78810,78902-79281 gi|8718953|gb|AV547539.1|AV547539,+,78689-78810,78902-79222 gi|19860396|gb|AV818478.1|AV818478,+,78691-78810,78902-79179 gi|19861182|gb|AV819243.1|AV819243,+,78694-78810,78902-79219 gi|19841851|gb|AV807866.1|AV807866,+,78699-78810,78902-79219 gi|19839963|gb|AV805978.1|AV805978,+,78702-78810,78902-79188 gi|19826611|gb|AV792628.1|AV792628,+,78703-78810,78902-79219 gi|19843657|gb|AV809672.1|AV809672,+,78705-78810,78902-79219 gi|19830534|gb|AV796551.1|AV796551,+,78705-78810,78902-79219 gi|19861682|gb|AV819737.1|AV819737,+,78709-78810,78902-79219 gi|19861604|gb|AV819661.1|AV819661,+,78710-78810,78902-79219 gi|8683089|gb|AV523561.1|AV523561,+,78711-78810,78902-79256 gi|8698102|gb|AV537819.1|AV537819,+,78712-78810,78902-79193 gi|8719443|gb|AV548030.1|AV548030,+,78713-78810,78902-79312 gi|19858883|gb|AV817015.1|AV817015,+,78716-78810,78902-79219 gi|8739161|gb|AV567707.1|AV567707,+,78718-78810,78902-79202 gi|19846778|gb|AV812793.1|AV812793,+,78720-78810,78902-79219 gi|8700100|gb|AV538344.1|AV538344,+,78724-78810,78902-79292 gi|19841052|gb|AV807067.1|AV807067,+,78729-78810,78902-79226 gi|19844191|gb|AV810206.1|AV810206,+,78731-78810,78902-79243 gi|19835847|gb|AV801862.1|AV801862,+,78731-78810,78902-79219 gi|8719704|gb|AV548291.1|AV548291,+,78738-78810,78902-79292 gi|8718763|gb|AV547349.1|AV547349,+,78739-78810,78902-79275 gi|19830408|gb|AV796425.1|AV796425,+,78741-78810,78902-79263 gi|19862839|gb|AV820854.1|AV820854,+,78741-78810,78902-79219 gi|19831700|gb|AV797717.1|AV797717,+,78742-78810,78902-79264 gi|8683627|gb|AV524099.1|AV524099,+,78744-78810,78902-79276 gi|19825879|gb|AV791896.1|AV791896,+,78744-78810,78902-79266 gi|19829664|gb|AV795681.1|AV795681,+,78745-78810,78902-79262 gi|19842507|gb|AV808522.1|AV808522,+,78745-78810,78902-79260 gi|19836959|gb|AV802974.1|AV802974,+,78751-78810,78902-79243 gi|19832759|gb|AV798776.1|AV798776,+,78752-78810,78902-79267 gi|19845923|gb|AV811938.1|AV811938,+,78753-78810,78902-79243 gi|19844492|gb|AV810507.1|AV810507,+,78754-78810,78902-79250 gi|19861081|gb|AV819143.1|AV819143,+,78755-78810,78902-79267 gi|8719463|gb|AV548050.1|AV548050,+,78756-78810,78902-79296 gi|19860142|gb|AV818235.1|AV818235,+,78757-78810,78902-79262 gi|19860788|gb|AV818856.1|AV818856,+,78764-78810,78902-79267 gi|19836747|gb|AV802762.1|AV802762,+,78764-78810,78902-79294 gi|19857562|gb|AV815724.1|AV815724,+,78767-78810,78902-79264 gi|19856594|gb|AV814785.1|AV814785,+,78767-78810,78902-79264 gi|19847790|gb|AV813805.1|AV813805,+,78768-78810,78902-79264 gi|19840031|gb|AV806046.1|AV806046,+,78769-78810,78902-79296 gi|19800221|gb|AV781431.1|AV781431,+,78769-78810,78902-79219 gi|19826509|gb|AV792526.1|AV792526,+,78774-78810,78902-79289 gi|8683390|gb|AV523862.1|AV523862,+,78776-78810,78902-79240 gi|19862239|gb|AV820279.1|AV820279,+,78780-78810,78902-79267 gi|19838855|gb|AV804870.1|AV804870,+,78782-78810,78902-79296 gi|19858089|gb|AV816237.1|AV816237,+,78783-78810,78902-79289 gi|19827485|gb|AV793502.1|AV793502,+,78784-78810,78902-79296 gi|19838386|gb|AV804401.1|AV804401,+,78785-78810,78902-79292 gi|19856843|gb|AV815025.1|AV815025,+,78788-78810,78902-79288 gi|19834164|gb|AV800179.1|AV800179,+,78790-78810,78902-79292 gi|8693278|gb|AV532995.1|AV532995,+,78792-78810,78902-79222 gi|19833673|gb|AV799688.1|AV799688,+,78793-78810,78902-79292 gi|19856138|gb|AV814353.1|AV814353,+,78795-78810,78902-79292 gi|19834374|gb|AV800389.1|AV800389,+,78800-78810,78902-79293 gi|19857373|gb|AV815541.1|AV815541,+,78900-79293 gi|8718558|gb|AV547144.1|AV547144,+,78900-79220 gi|19836630|gb|AV802645.1|AV802645,+,78900-79296 gi|8717883|gb|AV546469.1|AV546469,+,78904-79292 gi|8683858|gb|AV524330.1|AV524330,+,78911-79257 gi|19825083|gb|AV791100.1|AV791100,+,78915-79347 gi|8718249|gb|AV546835.1|AV546835,+,78944-79292 gi|498468|gb|Z34112.1|Z34112,+,78946-79292 gi|19837870|gb|AV803885.1|AV803885,+,78947-79348 gi|8704456|gb|AV542696.1|AV542696,+,78964-79292 gi|8718245|gb|AV546831.1|AV546831,+,78965-79292 gi|8718893|gb|AV547479.1|AV547479,+,79021-79348 gi|8704620|gb|AV542860.1|AV542860,+,79039-79289 gi|8703313|gb|AV541554.1|AV541554,+,79040-79288 gi|8717589|gb|AV546175.1|AV546175,+,79052-79241 gi|8701476|gb|AV539719.1|AV539719,+,79082-79349 gi|8736645|gb|AV565207.1|AV565207,+,79084-79283 gi|8718230|gb|AV546816.1|AV546816,+,79085-79254 gi|8704463|gb|AV542703.1|AV542703,+,79124-79292 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input10_minusFL.out000066400000000000000000000020261211610345200272550ustar00rootroot00000000000000contains [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170] contains [71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170] contains [152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170] contains [0,5,6,8,10,20] genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input2.in000066400000000000000000000066121211610345200253450ustar00rootroot00000000000000gi|19866237|gb|AV824177.1|AV824177,+,41330-41802,41989-42098,42186-42243,42347-42367 gi|21404866|gb|AY086156.1|,+,41405-41802,41989-42098,42186-42243,42347-42610,42881-43018,43151-43202,43288-43367,43475-43534,43663-43743,44186-44447 gi|17529179|gb|AY065375.1|,+,41438-41802,41989-42098,42186-42243,42347-42610,42881-43018,43151-43202,43288-43367,43475-43534,43663-43743,44186-44447 gi|19866590|gb|AV824530.1|AV824530,+,41438-41802,41989-42098,42186-42243,42347-42469 gi|572516|emb|X81698.1|ATCPACS1,+,41519-41802,41989-42098,42186-42243,42347-42610,42881-43018,43151-43202,43288-43367,43475-43534,43663-43743,44186-44447 gi|8684020|gb|AV524492.1|AV524492,+,41525-41802 gi|2597281|gb|T22739.1|T22739,+,41528-41732 gi|8724974|gb|AV553561.1|AV553561,+,41531-41802,41989-42098,42186-42243,42347-42435 gi|6983575|emb|X80377.2|ATOACLY2,+,41548-41802,41989-42098,42186-42243,42347-42610,42881-43018,43151-43202,43288-43367,43475-43534,43663-43743,44186-44447 gi|20465692|gb|AY096681.1|,+,41560-41802,41989-42098,42186-42243,42347-42610,42881-43018,43151-43202,43288-43367,43475-43534,43663-43743,44186-44309 gi|8685733|gb|AV526205.1|AV526205,+,41567-41802,41989-42098,42186-42243,42347-42442 gi|8685927|gb|AV526399.1|AV526399,+,41677-41802,41989-42098,42186-42243,42347-42610 gi|8716380|gb|AV544966.1|AV544966,+,42879-43018,43151-43202,43288-43367,43475-43534,43663-43743,44186-44419 gi|8677483|gb|AV517956.1|AV517956,+,42885-43018,43151-43202,43288-43367,43475-43534,43663-43743,44186-44326 gi|8679632|gb|AV520105.1|AV520105,+,42888-43018,43151-43202,43288-43367,43475-43534,43663-43743,44186-44343 gi|8677468|gb|AV517941.1|AV517941,+,42978-43018,43151-43202,43288-43367,43475-43534,43663-43743,44186-44218 gi|8702419|gb|AV540661.1|AV540661,+,42992-43018,43151-43202,43288-43367,43475-43534,43663-43743,44186-44447 gi|19803678|gb|AV784888.1|AV784888,+,43149-43202,43288-43367,43475-43534,43663-43743,44186-44447 gi|8678738|gb|AV519211.1|AV519211,+,43173-43202,43288-43367,43475-43534,43663-43743,44186-44437 gi|19804146|gb|AV785356.1|AV785356,+,43287-43367,43475-43534,43663-43743,44186-44452 gi|8677566|gb|AV518039.1|AV518039,+,43314-43367,43475-43534,43663-43743,44186-44418 gi|19805318|gb|AV786528.1|AV786528,+,43320-43367,43475-43534,43663-43743,44186-44447 gi|19827168|gb|AV793185.1|AV793185,+,43323-43367,43475-43534,43663-43743,44186-44447 gi|19825688|gb|AV791705.1|AV791705,+,43332-43367,43475-43534,43663-43743,44186-44447 gi|19842398|gb|AV808413.1|AV808413,+,43340-43367,43475-43534,43663-43743,44186-44447 gi|19826477|gb|AV792494.1|AV792494,+,43341-43367,43475-43534,43663-43743,44186-44447 gi|19824696|gb|AV790713.1|AV790713,+,43344-43367,43475-43534,43663-43743,44186-44447 gi|19844342|gb|AV810357.1|AV810357,+,43346-43367,43475-43534,43663-43743,44186-44447 gi|8680597|gb|AV521070.1|AV521070,+,43350-43367,43475-43534,43663-43743,44186-44411 gi|19847294|gb|AV813309.1|AV813309,+,43474-43534,43663-43743,44186-44447 gi|19838233|gb|AV804248.1|AV804248,+,43490-43534,43663-43743,44186-44471 gi|8704976|gb|AV543216.1|AV543216,+,43490-43534,43663-43743,44186-44411 gi|19856418|gb|AV814618.1|AV814618,+,43500-43534,43663-43743,44186-44447 gi|8679776|gb|AV520249.1|AV520249,+,43663-43743,44186-44389 gi|5845705|gb|AI998800.1|AI998800,+,43698-43743,44186-44423 gi|8678411|gb|AV518884.1|AV518884,+,43698-43743,44186-44447 gi|8679146|gb|AV519619.1|AV519619,+,44216-44447 gi|8679129|gb|AV519602.1|AV519602,+,44233-44441 gi|8719276|gb|AV547862.1|AV547862,+,44250-44447 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input2.out000066400000000000000000000005611211610345200255430ustar00rootroot00000000000000contains [0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,18,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,36,37,38] contains [12,13,14,15,16,18,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,36,37,38] contains [17,18,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,36,37,38] contains [19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,36,37,38] contains [29,30,31,32,33,34,35,36,37,38] genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input3.in000066400000000000000000000056371211610345200253540ustar00rootroot00000000000000gi|19803967|gb|AV785177.1|AV785177,+,75231-75271,75949-76329 gi|17979510|gb|AY070752.1|,+,75231-75271,75949-76329 gi|19866103|gb|AV824043.1|AV824043,+,75231-75271,75949-76329 gi|1269508|gb|N97141.1|N97141,+,75948-76310 gi|1269507|gb|N97140.1|N97140,+,75948-76353 gi|8696433|gb|AV536150.1|AV536150,+,75948-76331 gi|8681418|gb|AV521891.1|AV521891,+,75948-76370 gi|19860798|gb|AV818866.1|AV818866,+,75948-76361 gi|19861087|gb|AV819149.1|AV819149,+,75948-76384 gi|19862295|gb|AV820333.1|AV820333,+,75956-76362 gi|19862579|gb|AV820602.1|AV820602,+,75965-76384 gi|20147288|gb|AY093734.1|,+,75970-76164 gi|19860019|gb|AV818115.1|AV818115,-,76268-76554,76631-76751 gi|8718730|gb|AV547316.1|AV547316,-,76275-76554,76631-76777 gi|19829930|gb|AV795947.1|AV795947,-,76277-76554,76631-76775 gi|8719356|gb|AV547943.1|AV547943,-,76328-76554,76631-76732 gi|899206|gb|F14396.1|F14396,-,76337-76554,76631-76747 gi|19830370|gb|AV796387.1|AV796387,-,76342-76554,76631-76846 gi|19804575|gb|AV785785.1|AV785785,-,76354-76554,76631-76832 gi|19844768|gb|AV810783.1|AV810783,-,76354-76554,76631-76852 gi|19838754|gb|AV804769.1|AV804769,-,76354-76554,76631-76847 gi|19828596|gb|AV794613.1|AV794613,-,76356-76554,76631-76876 gi|3449398|gb|AI099659.1|AI099659,-,76366-76554,76631-76833 gi|5843898|gb|AI996993.1|AI996993,-,76370-76554,76631-76923,77023-77163 gi|8683659|gb|AV524131.1|AV524131,-,76374-76554,76631-76923,77023-77160,77262-77288 gi|18086369|gb|AY064997.1|,-,76378-76554,76631-76923,77023-77160,77262-77411,77502-77562,77763-77828,77938-78396,78500-78799,78916-79044,79139-80120,80223-80641 gi|19830356|gb|AV796373.1|AV796373,-,76378-76554,76631-76881 gi|8683675|gb|AV524147.1|AV524147,+,76383-76489 gi|8682321|gb|AV522794.1|AV522794,-,76395-76554,76631-76923,77023-77032 gi|8719862|gb|AV548449.1|AV548449,-,76410-76554,76631-76811 gi|19860520|gb|AV818602.1|AV818602,-,76411-76554,76631-76898 gi|19824889|gb|AV790906.1|AV790906,-,76414-76554,76631-76908 gi|8683706|gb|AV524178.1|AV524178,-,76446-76554,76631-76923,77023-77160,77262-77361 gi|8682202|gb|AV522675.1|AV522675,-,76464-76554,76631-76923 gi|27363293|gb|BT002650.1|,-,76631-76923,77023-77160,77262-77411,77502-77562,77763-77828,77938-78396,78500-78799,78916-79044,79139-80120,80223-80529 gi|8722920|gb|AV551507.1|AV551507,-,77994-78396,78500-78629 gi|2759707|gb|T44919.1|T44919,-,78050-78396,78500-78525 gi|1054484|gb|H77233.1|H77233,-,78153-78396,78500-78621 gi|19840029|gb|AV806044.1|AV806044,-,78317-78396,78500-78799,78916-78945 gi|20466188|gb|AY099560.1|,-,78318-78396,78500-78799,78916-79044,79139-80120,80223-80607 gi|8688602|gb|AV528319.1|AV528319,-,79906-80120,80223-80575 gi|19868889|gb|AV826829.1|AV826829,-,79917-80120,80223-80641 gi|8690307|gb|AV530024.1|AV530024,-,79919-80120,80223-80517 gi|8687705|gb|AV528177.1|AV528177,-,79970-80120,80223-80574 gi|8690249|gb|AV529966.1|AV529966,-,80023-80120,80223-80459 gi|8690200|gb|AV529917.1|AV529917,-,80059-80120,80223-80507 gi|19871485|gb|AV829425.1|AV829425,+,80231-80607 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input3.out000066400000000000000000000003701211610345200255420ustar00rootroot00000000000000contains [12,13,14,15,16,17,18,19,20,21,22,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45] contains [12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,33] contains [3,4,5,6,7,8,9,10,11,27] contains [0,1,2,9,10,11,27] contains [46] genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input4.in000066400000000000000000000032701211610345200253440ustar00rootroot00000000000000gi|14326503|gb|AF385705.1|AF385705,+,138076-138318,138595-139073,139377-139429,139703-139834,139929-140090,140180-140715 gi|19864280|gb|AV822240.1|AV822240,+,138076-138318,138595-139021 gi|2598226|emb|AJ222585.1|ATAHP1,+,138122-139073,139377-139429,139703-139834,139929-140090,140180-140719 gi|19548036|gb|AY081729.1|,+,138605-139073,139377-139429,139703-139834,139929-140090,140180-140419 gi|19801732|gb|AV782942.1|AV782942,+,139933-140090,140180-140718 gi|8738838|gb|AV567384.1|AV567384,+,140011-140090,140180-140695 gi|8690601|gb|AV530318.1|AV530318,+,140247-140739 gi|19834658|gb|AV800673.1|AV800673,+,140310-140737 gi|8730014|gb|AV558588.1|AV558588,+,140358-140814 gi|19862206|gb|AV820247.1|AV820247,+,140686-141077 gi|19827286|gb|AV793303.1|AV793303,+,140693-141141 gi|498675|gb|Z34237.1|Z34237,+,140707-141086 gi|8716825|gb|AV545411.1|AV545411,+,140708-141188 gi|19825131|gb|AV791148.1|AV791148,+,140711-141162 gi|19844121|gb|AV810136.1|AV810136,+,140711-141126 gi|19803663|gb|AV784873.1|AV784873,-,140734-141250,141327-141437 gi|20260207|gb|AY093003.1|,-,140736-141250,141327-141523,141598-141866,141942-142284,142401-142628 gi|19846192|gb|AV812207.1|AV812207,+,140763-141160 gi|16226672|gb|AF428460.1|AF428460,-,140763-141250,141327-141523,141598-141866,141942-142284,142401-142645 gi|905764|gb|H36265.1|H36265,+,140959-141414 gi|5840280|gb|AI993375.1|AI993375,-,141230-141250,141327-141523,141598-141756 gi|934961|gb|T75909.1|T75909,-,141325-141523,141598-141756 gi|8725556|gb|AV554143.1|AV554143,-,141346-141523,141598-141807 gi|19872652|gb|AV830592.1|AV830592,-,141964-142284,142401-142646 gi|506556|gb|Z34647.1|Z34647,-,142035-142284,142401-142546 gi|931026|gb|T14033.1|T14033,-,142091-142284,142401-142578 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input4.out000066400000000000000000000002261211610345200255430ustar00rootroot00000000000000contains [0,1,3,4,5,6,7,8,9,10,11,12,13,14,18,19] contains [2,3,4,5,6,7,8,9,10,11,12,13,14,18,19] contains [15,16,17,20,22,23,24,25] contains [21,22] genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input5.in000066400000000000000000000142521211610345200253470ustar00rootroot00000000000000gi|9785240|gb|BE527262.1|BE527262,+,49350-49566,49979-50016 gi|19866728|gb|AV824668.1|AV824668,+,49351-49566,49979-50055,50164-50248,50331-50457,50547-50591 gi|15450668|gb|AY052702.1|,+,49351-49566,49979-50055,50164-50248,50331-50457,50547-50645,50719-50786,50867-50974,51064-51141,51259-51391,51486-51582,51750-51873,51966-52074,52362-52445,52537-52881 gi|2981615|dbj|AB008854.1|,+,49369-49566,49979-50055,50164-50248,50331-50457,50547-50645,50719-50786,50867-50974,51064-51141,51259-51391,51486-51582,51750-51873,51966-52074,52362-52445,52537-52914 gi|11993852|gb|AF327529.1|,+,49369-49566,49979-50055,50164-50248,50331-50457,50547-50645,50719-50786,50867-50974,51064-51141,51259-51391,51486-51582,51750-51873,51966-52074,52362-52445,52537-52885 gi|473334|gb|Z32626.1|Z32626,+,49399-49566,49979-50055,50164-50241 gi|21406281|gb|AY087543.1|,+,49401-49566,49979-50055,50164-50248,50331-50457,50547-50645,50719-50786,50867-50974,51064-51141,51259-51391,51486-51582,51750-51873,51966-52074,52362-52445,52537-52762 gi|19866690|gb|AV824630.1|AV824630,+,49412-49566,49979-50055,50164-50248,50331-50433 gi|19867178|gb|AV825118.1|AV825118,+,49413-49566,49979-50055,50164-50248,50331-50457,50547-50645,50719-50786,50867-50906 gi|19869071|gb|AV827011.1|AV827011,+,49413-49566,49979-50055,50164-50248,50331-50457,50547-50645,50719-50784 gi|16648798|gb|AY058176.1|,+,49413-49566,49979-50055,50164-50248,50331-50457,50547-50645,50719-50786,50867-50974,51064-51141,51259-51391,51486-51582,51750-51873,51966-52074,52362-52445,52537-52887 gi|1158981|gb|N37839.1|N37839,+,49430-49566,49979-50055,50164-50248,50331-50348 gi|17200|gb|Z18059.1|Z18059,+,49432-49566,49979-50055,50164-50239 gi|937814|gb|R65341.1|R65341,+,49432-49566,49979-50055,50164-50210 gi|9785234|gb|BE527256.1|BE527256,+,49433-49566,49979-50055,50164-50192 gi|9788396|gb|BE530406.1|BE530406,+,49433-49566,49979-50055,50164-50226 gi|8684021|gb|AV524493.1|AV524493,+,49435-49566,49979-50055,50164-50248,50331-50348 gi|9782970|gb|BE524992.1|BE524992,+,49436-49566,49979-50055,50164-50232 gi|9784292|gb|BE526314.1|BE526314,+,49438-49566,49979-50055,50164-50216 gi|315555|gb|T04395.1|T04395,+,49440-49566,49979-50055,50164-50248,50331-50401 gi|9780402|gb|BE522424.1|BE522424,+,49445-49566,49979-50055,50164-50248,50331-50391 gi|9781498|gb|BE523520.1|BE523520,+,49446-49566,49979-50055,50164-50248 gi|17380613|gb|AY063720.1|,+,49477-49566,49979-50055,50164-50248,50331-50457,50547-50645,50719-50786,50867-50974,51064-51141,51259-51391,51486-51582,51750-51873,51966-52074,52362-52445,52537-52646 gi|13194829|gb|AF349530.1|,+,49477-49566,49979-50055,50164-50248,50331-50457,50547-50645,50719-50786,50867-50974,51064-51141,51259-51391,51486-51582,51750-51873,51966-52074,52362-52445,52537-52695 gi|623731|gb|Z47692.1|Z47692,+,49483-49566,49979-50055,50164-50248,50331-50385 gi|515607|gb|Z35397.1|Z35397,+,49492-49566,49979-50055,50164-50248,50331-50382 gi|9785772|gb|BE527794.1|BE527794,+,50167-50248,50331-50457,50547-50585 gi|9780266|gb|BE522288.1|BE522288,+,50384-50457,50547-50645,50719-50786,50867-50976 gi|550171|gb|Z37598.1|Z37598,+,50728-50786,50867-50974,51064-51141,51259-51387 gi|9785291|gb|BE527313.1|BE527313,+,50770-50786,50867-50974,51064-51141,51259-51300 gi|9786325|gb|BE528347.1|BE528347,+,50774-50786,50867-50974,51064-51141,51259-51315 gi|8731702|gb|AV560276.1|AV560276,+,50866-50974,51064-51141,51259-51391,51486-51518 gi|8723740|gb|AV552327.1|AV552327,+,50953-50974,51064-51141,51259-51391,51486-51582,51750-51775 gi|9781811|gb|BE523833.1|BE523833,+,50959-50974,51064-51141,51259-51391,51486-51582,51750-51817 gi|3449409|gb|AI099670.1|AI099670,+,51370-51391,51486-51582,51750-51873,51966-52074,52362-52396 gi|8715297|gb|AV543883.1|AV543883,+,51550-51582,51750-51873,51966-52074,52362-52445,52537-52795 gi|516126|gb|Z35342.1|Z35342,+,51742-51873,51966-52074,52362-52396 gi|8694629|gb|AV534346.1|AV534346,+,51841-51873,51966-52074,52362-52445,52537-52887 gi|8730313|gb|AV558887.1|AV558887,+,51857-51873,51966-52074,52362-52445,52537-52885 gi|8677485|gb|AV517958.1|AV517958,+,51964-52074,52362-52445,52537-52949 gi|1327565|gb|W43093.1|W43093,+,51968-52074,52362-52445,52537-52651 gi|19843107|gb|AV809122.1|AV809122,+,51980-52074,52362-52445,52537-52795 gi|8727674|gb|AV556259.1|AV556259,+,51999-52074,52362-52445,52537-52887 gi|19827955|gb|AV793972.1|AV793972,+,52002-52074,52362-52445,52537-52835 gi|5845245|gb|AI998340.1|AI998340,+,52016-52074,52362-52445,52537-52871 gi|19846995|gb|AV813010.1|AV813010,+,52025-52074,52362-52445,52537-52835 gi|8738253|gb|AV566799.1|AV566799,+,52050-52074,52362-52445,52537-52880 gi|19861724|gb|AV819775.1|AV819775,+,52054-52074,52362-52445,52537-52864 gi|8727800|gb|AV556385.1|AV556385,+,52056-52074,52362-52445,52537-52887 gi|19827180|gb|AV793197.1|AV793197,+,52058-52074,52362-52445,52537-52884 gi|19806231|gb|AV787441.1|AV787441,+,52358-52445,52537-52871 gi|19827743|gb|AV793760.1|AV793760,+,52358-52445,52537-52885 gi|506499|gb|Z34664.1|Z34664,+,52358-52445,52537-52837 gi|19829466|gb|AV795483.1|AV795483,+,52359-52445,52537-52885 gi|19831010|gb|AV797027.1|AV797027,+,52359-52445,52537-52885 gi|8735476|gb|AV564050.1|AV564050,+,52363-52445,52537-52885 gi|19842891|gb|AV808906.1|AV808906,+,52380-52445,52537-52884 gi|8714952|gb|AV543538.1|AV543538,+,52381-52445,52537-52863 gi|19838813|gb|AV804828.1|AV804828,+,52381-52445,52537-52885 gi|19827894|gb|AV793911.1|AV793911,+,52386-52445,52537-52920 gi|19860622|gb|AV818702.1|AV818702,+,52387-52445,52537-52888 gi|19856550|gb|AV814742.1|AV814742,+,52388-52445,52537-52885 gi|19831995|gb|AV798012.1|AV798012,+,52390-52445,52537-52884 gi|19840944|gb|AV806959.1|AV806959,+,52390-52445,52537-52885 gi|19805980|gb|AV787190.1|AV787190,+,52390-52445,52537-52882 gi|2722183|gb|AA712266.1|AA712266,+,52398-52445,52537-52884 gi|3450455|gb|AI100494.1|AI100494,+,52398-52445,52537-52914 gi|2596196|gb|T12940.1|T12940,+,52400-52445,52537-52981 gi|19805843|gb|AV787053.1|AV787053,+,52402-52445,52537-52863 gi|473345|gb|Z32625.1|Z32625,+,52542-52887 gi|407360|gb|Z26868.1|Z26868,+,52545-52942 gi|8727822|gb|AV556407.1|AV556407,+,52570-52887 gi|19824094|gb|AV790111.1|AV790111,+,52574-52982 gi|8680902|gb|AV521375.1|AV521375,+,52601-52860 gi|2413380|gb|AA597957.1|AA597957,+,52660-52887 gi|9780267|gb|BE522289.1|BE522289,+,52688-52899 gi|9780403|gb|BE522425.1|BE522425,+,52705-52887 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input5.out000066400000000000000000000013201211610345200255400ustar00rootroot00000000000000contains [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,32,33,34,35,37,38,40,41,42,43,44,45,46,47,48,49,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76] contains [31,32,33,34,35,37,38,40,41,42,43,44,45,46,47,48,49,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76] contains [36,37,38,40,41,42,43,44,45,46,47,48,49,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76] contains [39,40,41,42,43,44,45,46,47,48,49,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76] contains [50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76] contains [0,2,5,7,9,10,11,12,13,14,15,16,17,18,19,20,21,24,25,26,27] genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input6.in000066400000000000000000000015471211610345200253530ustar00rootroot00000000000000gi|19799769|gb|AU231059.1|AU231059,-,74058-74299,74383-74532,74629-74658 gi|26452696|dbj|AK118842.1|,-,74058-74299,74383-74532,74629-74763,74849-74907,75088-75204,75425-75605,75750-75833,75955-76023,76121-76261,76702-76794,77012-77140,77454-77740,78192-78299 gi|22531021|gb|AY136349.1|,-,74060-74299,74383-74532,74629-74763,74849-74907,75088-75204,75425-75605,75750-75833,75955-76023,76121-76261,76702-76794,77012-77140,77454-77740,77849-77876,78192-78299 gi|23197969|gb|BT000193.1|,-,74073-74299,74383-74532,74629-74763,74849-74907,75088-75204,75425-75605,75750-75833,75955-76023,76121-76261,76702-76794,77012-77140,77454-77735 gi|5842992|gb|AI996087.1|AI996087,-,74084-74299,74383-74532,74629-74763,74849-74907,75088-75110 gi|19878892|gb|AU239723.1|AU239723,-,76718-76794,77012-77140,77454-77740,78192-78299 gi|19870561|gb|AV828501.1|AV828501,-,77851-77876,78192-78299 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input6.out000066400000000000000000000000521211610345200255420ustar00rootroot00000000000000contains [0,1,3,4,5] contains [1,2,3,4,6] genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input7.in000066400000000000000000000075101211610345200253500ustar00rootroot00000000000000gi|14517455|gb|AY039563.1|,+,47126-47616,48151-48776,48851-49644 gi|19863139|gb|AV821120.1|AV821120,+,47126-47616,48151-48368 gi|23397315|gb|BT000804.1|,+,47126-47616,48151-49850 gi|12597466|gb|AF337910.1|,+,47126-47616,48151-48776,48851-49644 gi|19870179|gb|AV828119.1|AV828119,+,47126-47616,48151-48240 gi|406835|gb|Z26809.1|Z26809,+,47128-47442 gi|9782758|gb|BE524780.1|BE524780,+,47154-47541 gi|8685434|gb|AV525906.1|AV525906,+,47168-47517 gi|7610529|gb|AV440173.1|AV440173,+,47171-47608 gi|315505|gb|T04345.1|T04345,+,47187-47587 gi|8731245|gb|AV559819.1|AV559819,+,47198-47616,48151-48296 gi|8687397|gb|AV527869.1|AV527869,+,47198-47616,48151-48266 gi|26983881|gb|BT002360.1|,+,47209-47616,48151-48776,48851-49500 gi|23506206|gb|AY149961.1|,+,47209-47616,48151-48776,48851-49469 gi|9785802|gb|BE527824.1|BE527824,+,47213-47451 gi|9787637|gb|BE529736.1|BE529736,+,47226-47482 gi|9785034|gb|BE527056.1|BE527056,+,47325-47566 gi|9782433|gb|BE524455.1|BE524455,+,47380-47616,48151-48241 gi|9779113|gb|BE521135.1|BE521135,+,47383-47616,48151-48241 gi|23303764|gb|BU636509.1|BU636509,+,48192-48874 gi|9787020|gb|BE529042.1|BE529042,+,48201-48446 gi|9783629|gb|BE525651.1|BE525651,+,48245-48502 gi|9780133|gb|BE522155.1|BE522155,+,48558-48776,48851-48951 gi|9785079|gb|BE527101.1|BE527101,+,48622-48776,48851-48931 gi|9784997|gb|BE527019.1|BE527019,+,48622-48776,48851-48940 gi|498656|gb|Z34218.1|Z34218,+,48649-48776,48851-49123 gi|9783800|gb|BE525822.1|BE525822,+,48653-48776,48851-48969 gi|9783275|gb|BE525297.1|BE525297,+,48666-48776,48851-49129 gi|8681760|gb|AV522233.1|AV522233,+,49045-49617 gi|19800167|gb|AV781377.1|AV781377,+,49056-49644 gi|8737386|gb|AV565936.1|AV565936,+,49104-49677 gi|8737462|gb|AV566012.1|AV566012,+,49174-49677 gi|8732199|gb|AV560773.1|AV560773,+,49226-49699 gi|8689943|gb|AV529660.1|AV529660,+,49232-49775 gi|8731481|gb|AV560055.1|AV560055,+,49232-49757 gi|19830277|gb|AV796294.1|AV796294,+,49243-49673 gi|19844479|gb|AV810494.1|AV810494,+,49261-49677 gi|19856883|gb|AV815065.1|AV815065,+,49266-49677 gi|19859820|gb|AV817921.1|AV817921,+,49269-49677 gi|19856857|gb|AV815039.1|AV815039,+,49271-49677 gi|19833909|gb|AV799924.1|AV799924,+,49277-49694 gi|8735506|gb|AV564080.1|AV564080,+,49283-49756 gi|8735017|gb|AV563591.1|AV563591,+,49285-49757 gi|8735173|gb|AV563747.1|AV563747,+,49300-49761 gi|19859557|gb|AV817662.1|AV817662,+,49302-49699 gi|19840727|gb|AV806742.1|AV806742,+,49309-49699 gi|19831382|gb|AV797399.1|AV797399,+,49310-49762 gi|8690769|gb|AV530486.1|AV530486,+,49315-49757 gi|19829779|gb|AV795796.1|AV795796,+,49326-49755 gi|19832380|gb|AV798397.1|AV798397,+,49328-49757 gi|19842869|gb|AV808884.1|AV808884,+,49330-49756 gi|19828773|gb|AV794790.1|AV794790,+,49334-49773 gi|19830179|gb|AV796196.1|AV796196,+,49335-49762 gi|2747529|gb|AA728572.1|AA728572,+,49339-49707 gi|19827328|gb|AV793345.1|AV793345,+,49340-49773 gi|19842834|gb|AV808849.1|AV808849,+,49342-49757 gi|8737819|gb|AV566368.1|AV566368,+,49345-49701 gi|8733531|gb|AV562105.1|AV562105,+,49346-49757 gi|19804819|gb|AV786029.1|AV786029,+,49348-49762 gi|19857015|gb|AV815196.1|AV815196,+,49348-49756 gi|19833437|gb|AV799452.1|AV799452,+,49354-49757 gi|19855948|gb|AV814168.1|AV814168,+,49356-49756 gi|19840135|gb|AV806150.1|AV806150,+,49359-49762 gi|1268616|gb|N96115.1|N96115,+,49384-49735 gi|19846793|gb|AV812808.1|AV812808,+,49388-49801 gi|2747436|gb|AA728479.1|AA728479,+,49396-49756 gi|9779114|gb|BE521136.1|BE521136,+,49396-49762 gi|19827363|gb|AV793380.1|AV793380,+,49398-49847 gi|8732995|gb|AV561569.1|AV561569,+,49402-49762 gi|8678897|gb|AV519370.1|AV519370,+,49418-49683 gi|8733039|gb|AV561613.1|AV561613,+,49425-49756 gi|406836|gb|Z26810.1|Z26810,+,49428-49694 gi|8678597|gb|AV519070.1|AV519070,+,49430-49753 gi|8731178|gb|AV559752.1|AV559752,+,49432-49686 gi|19834417|gb|AV800432.1|AV800432,+,49469-49852 gi|7610667|gb|AV440308.1|AV440308,+,49478-49703 gi|506541|gb|Z34631.1|Z34631,+,49531-49748 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input7.out000066400000000000000000000006571211610345200255560ustar00rootroot00000000000000contains [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76] contains [0,3,4,5,6,7,8,9,10,11,14,15,16,17,18,19,20,21,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76] genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input8.in000066400000000000000000000105771211610345200253600ustar00rootroot00000000000000gi|19837565|gb|AV803580.1|AV803580,-,35507-35919 gi|19825492|gb|AV791509.1|AV791509,-,35531-35965 gi|8700559|gb|AV538803.1|AV538803,-,35538-35973 gi|19839682|gb|AV805697.1|AV805697,-,35542-35948 gi|15810398|gb|AY056238.1|,-,35542-36128,36203-36364,36541-36609,36700-36747,36840-36942,37041-37120,37200-37271,37358-37452,37545-37626,37699-38485 gi|19827946|gb|AV793963.1|AV793963,-,35542-35782 gi|19839681|gb|AV805696.1|AV805696,-,35542-35957 gi|19829874|gb|AV795891.1|AV795891,-,35542-35973 gi|8703969|gb|AV542209.1|AV542209,-,35542-35988 gi|8681919|gb|AV522392.1|AV522392,-,35542-36021 gi|19827536|gb|AV793553.1|AV793553,-,35555-35988 gi|8702123|gb|AV540365.1|AV540365,-,35555-35978 gi|8719907|gb|AV548494.1|AV548494,-,35555-35977 gi|19845606|gb|AV811621.1|AV811621,-,35556-35970 gi|19829898|gb|AV795915.1|AV795915,-,35557-35968 gi|8680505|gb|AV520978.1|AV520978,-,35576-35912 gi|8680273|gb|AV520746.1|AV520746,-,35578-35985 gi|8715596|gb|AV544182.1|AV544182,-,35579-36128,36203-36286 gi|8735002|gb|AV563576.1|AV563576,-,35591-36128,36203-36228 gi|3449831|gb|AI099519.1|AI099519,-,35591-35911 gi|14030638|gb|AF375410.1|,-,35591-36128,36203-36364,36541-36609,36700-36747,36840-36942,37041-37120,37200-37271,37358-37452,37545-37626,37699-38424 gi|19842855|gb|AV808870.1|AV808870,-,35592-36006 gi|8702166|gb|AV540408.1|AV540408,-,35593-36128,36203-36227 gi|15724223|gb|AF412052.1|AF412052,-,35611-36128,36203-36364,36541-36609,36700-36747,36840-36942,37041-37120,37200-37271,37358-37452,37545-37626,37699-37788 gi|8717470|gb|AV546056.1|AV546056,-,35614-35901 gi|19806340|gb|AV787550.1|AV787550,-,35617-36043 gi|8697406|gb|AV537123.1|AV537123,-,35626-35944 gi|398292|gb|Z26004.1|Z26004,-,35633-36014 gi|2413150|gb|AA597727.1|AA597727,-,35635-35946 gi|14194142|gb|AF367277.1|AF367277,-,35637-36128,36203-36364,36541-36609,36700-36747,36840-36942,37041-37120,37200-37271,37358-37452,37545-37626,37699-38485 gi|19831513|gb|AV797530.1|AV797530,-,35639-36071 gi|19843216|gb|AV809231.1|AV809231,-,35639-36070 gi|8716920|gb|AV545506.1|AV545506,-,35647-36078 gi|5841254|gb|AI994349.1|AI994349,-,35681-35949 gi|8725941|gb|AV554528.1|AV554528,-,35767-36128,36203-36364,36541-36578 gi|22136547|gb|AY129474.1|,-,35802-36128,36203-36364,36541-36609,36700-36747,36840-36942,37041-37120,37200-37271,37358-37452,37545-37626,37699-38298 gi|12744918|gb|AF332565.1|AF332565,-,35802-36128,36203-36364,36541-36609,36700-36747,36840-36942,37041-37120,37200-37271,37358-37452,37545-37626,37699-38298 gi|8686903|gb|AV527375.1|AV527375,-,35858-36128,36203-36364,36541-36609,36700-36710 gi|2757876|gb|T42611.1|T42611,-,35931-36128,36203-36309 gi|8723296|gb|AV551883.1|AV551883,-,35988-36128,36203-36364,36541-36609,36700-36747,36840-36919 gi|8724197|gb|AV552784.1|AV552784,-,36014-36128,36203-36364,36541-36609,36840-36942,37041-37120,37200-37243 gi|23303295|gb|BU636040.1|BU636040,-,36021-36128,36203-36364,36541-36609,36700-36747,36840-36942,37041-37086 gi|8696888|gb|AV536605.1|AV536605,-,36212-36364,36541-36609,36700-36747,36840-36942,37041-37084 gi|8724072|gb|AV552659.1|AV552659,-,36698-36747,36840-36942,37041-37120,37200-37271,37358-37420 gi|9781551|gb|BE523573.1|BE523573,-,36700-36747,36840-36942,37041-37120,37200-37271,37358-37451 gi|23303782|gb|BU636527.1|BU636527,-,36875-36942,37041-37120,37200-37271,37358-37452,37545-37626,37699-37828 gi|1159223|gb|N38081.1|N38081,-,36917-36942,37041-37120,37200-37271,37358-37452,37545-37626,37699-37767 gi|2733957|gb|AA720347.1|AA720347,-,36918-36942,37041-37120,37200-37271,37358-37452,37545-37627 gi|8687069|gb|AV527541.1|AV527541,-,37109-37120,37200-37271,37358-37452,37545-37626,37699-37745 gi|23303593|gb|BU636338.1|BU636338,-,37200-37271,37358-37452,37545-37626,37699-38118 gi|23302408|gb|BU635153.1|BU635153,-,37724-38368 gi|23303539|gb|BU636284.1|BU636284,-,37747-38427 gi|8686720|gb|AV527192.1|AV527192,-,37759-38289 gi|23303436|gb|BU636181.1|BU636181,-,37842-38462 gi|19868260|gb|AV826200.1|AV826200,-,37863-38485 gi|8684991|gb|AV525463.1|AV525463,-,37865-38392 gi|19869270|gb|AV827210.1|AV827210,-,37875-38485 gi|19873982|gb|AV831922.1|AV831922,-,37901-38485 gi|27490486|gb|CA963929.1|CA963929,-,37902-38447 gi|19869921|gb|AV827861.1|AV827861,-,37904-38485 gi|8725652|gb|AV554239.1|AV554239,-,37974-38444 gi|19863160|gb|AV821141.1|AV821141,-,38024-38424 gi|19871970|gb|AV829910.1|AV829910,-,38116-38485 gi|2748351|gb|N96745.1|N96745,-,38120-38449 gi|8722537|gb|AV551124.1|AV551124,-,38128-38472 gi|8684177|gb|AV524649.1|AV524649,-,38277-38412 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input8.out000066400000000000000000000010401211610345200255420ustar00rootroot00000000000000contains [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,41,42,44,45,46,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65] contains [0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,24,25,26,27,28,30,31,32,33,34,38,40,45,46,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65] contains [0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,24,25,26,27,28,30,31,32,33,34,37,38,39,41,42,44,47] contains [43,44,45,46,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65] genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input9.in000066400000000000000000000036541211610345200253570ustar00rootroot00000000000000gi|21406321|gb|AY087583.1|,-,79309-79812,79899-79978,80154-80211,80295-80392,80496-80975 gi|19804477|gb|AV785687.1|AV785687,-,79321-79719 gi|19830949|gb|AV796966.1|AV796966,-,79325-79751 gi|19834432|gb|AV800447.1|AV800447,-,79328-79736 gi|19846701|gb|AV812716.1|AV812716,-,79328-79720 gi|8695548|gb|AV535265.1|AV535265,-,79336-79707 gi|27311546|gb|BT002379.1|,-,79342-79812,79899-79978,80154-80211,80295-80392,80496-80674,81024-81093 gi|19860983|gb|AV819047.1|AV819047,-,79342-79774 gi|19830437|gb|AV796454.1|AV796454,-,79342-79770 gi|19823793|gb|AV789810.1|AV789810,-,79347-79786 gi|15450712|gb|AY052724.1|,-,79361-79812,79899-79978,80154-80211,80295-80392,80496-80674,81024-81057 gi|19825939|gb|AV791956.1|AV791956,-,79361-79783 gi|19806020|gb|AV787230.1|AV787230,-,79361-79762 gi|17473919|gb|AY065196.1|,-,79377-79812,79899-79978,80154-80211,80295-80392,80496-80674,81024-81057 gi|19801335|gb|AV782545.1|AV782545,-,79377-79812,79899-79978,80154-80211,80295-80324 gi|19833085|gb|AV799102.1|AV799102,-,79380-79786 gi|3450001|gb|AI100718.1|AI100718,-,79383-79689 gi|20148290|gb|AY081474.1|,-,79441-79812,79899-79978,80154-80211,80295-80392,80496-80669 gi|17386141|gb|AF446884.1|AF446884,-,79494-79812,79899-79978,80154-80211,80295-80392,80496-80669 gi|1053888|gb|H76637.1|H76637,-,79512-79678 gi|19866739|gb|AV824679.1|AV824679,-,79609-79812,79899-79978,80154-80211,80295-80392,80496-80674,81024-81048 gi|19867171|gb|AV825111.1|AV825111,-,79646-79812,79899-79978,80154-80211,80295-80392,80496-80674,81024-81097 gi|2414013|gb|AA042210.1|AA042210,-,79743-79812,79899-79978,80154-80211,80295-80392,80496-80674,81024-81044 gi|5839903|gb|AI992918.1|AI992918,-,79769-79812,79899-79978,80154-80211,80295-80392,80496-80674,81024-81063 gi|2758082|gb|T42834.1|T42834,-,80154-80211,80295-80392,80496-80674,81024-81038 gi|9782374|gb|BE524396.1|BE524396,-,80166-80211,80295-80392,80496-80641,81024-81065 gi|19863986|gb|AV821955.1|AV821955,-,80343-80392,80496-80674,81024-81048 genometools-1.5.1/testdata/consensus_sa/pasa_cpp_sample_input9.out000066400000000000000000000002621211610345200255500ustar00rootroot00000000000000contains [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26] contains [0,1,2,3,4,5,7,8,9,11,12,14,15,16,17,18,19] contains [1,2,3,4,5,7,8,9,11,12,14,15,16,19,25] genometools-1.5.1/testdata/consensus_sa/pasa_example_in_fig1.in000066400000000000000000000012251211610345200247430ustar00rootroot00000000000000gi|7613116|gb|AV442701.1|AV442701,+,60898-61317 gi|15724317|gb|AF412099.1|AF412099,+,60935-61402,61481-61699,61778-61912,62002-62073,62155-62283,62375-62787 gi|19866821|gb|AV824761.1|AV824761,+,60935-61305 gi|18700241|gb|AY078030.1|,+,61019-61402,61481-61699,61778-61912,62002-62073,62155-62283,62375-62443 gi|20127067|gb|AF488597.1|,+,61070-61402,61481-61699,61778-61912,62002-62073,62149-62283,62375-62771 gi|7611199|gb|AV440826.1|AV440826,+,61882-61912,62002-62073,62149-62283,62375-62710 gi|8681782|gb|AV522255.1|AV522255,+,62147-62283,62375-62708 gi|19806362|gb|AV787572.1|AV787572,+,62260-62283,62375-62780 gi|8679410|gb|AV519883.1|AV519883,+,62412-62796 genometools-1.5.1/testdata/consensus_sa/pasa_example_in_fig1.out000066400000000000000000000000771211610345200251500ustar00rootroot00000000000000contains [0,1,2,3,7,8] contains [0,2,4,5,7,8] contains [6,7,8] genometools-1.5.1/testdata/corrupt.fas000066400000000000000000000000151211610345200200420ustar00rootroot00000000000000%foo gattaca genometools-1.5.1/testdata/corrupt.gff3000066400000000000000000000002201211610345200201140ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10000 ##sequence-region seq2 1 10000 seq1 . gene 1000 9000 . X . . seq2 . gene 1000 9000 . + . . genometools-1.5.1/testdata/corrupt_gff3_header.txt000066400000000000000000000137171211610345200223420ustar00rootroot00000000000000##gff-version gff3 chr1 gth exon 148017797 148017914 1.000000 + . . chr1 gth exon 148017797 148017914 1.000000 + . . chr1 gth exon 148018100 148018252 1.000000 + . . chr1 gth exon 148018100 148018252 1.000000 + . . chr1 gth exon 148018880 148018947 1.000000 + . . chr1 gth exon 148018880 148018947 1.000000 + . . chr1 gth exon 148019746 148019916 1.000000 + . . chr1 gth exon 148019746 148019916 1.000000 + . . chr1 gth exon 148017797 148017914 1.000000 + . . chr1 gth exon 148017797 148017914 1.000000 + . . chr1 gth exon 148018100 148018252 1.000000 + . . chr1 gth exon 148018100 148018252 1.000000 + . . chr1 gth exon 148018880 148018947 1.000000 + . . chr1 gth exon 148018880 148018947 1.000000 + . . chr1 gth exon 148019746 148019916 1.000000 + . . chr1 gth exon 148019746 148019916 1.000000 + . . chr1 gth exon 148022107 148022312 1.000000 + . . chr1 gth exon 148022107 148022312 1.000000 + . . chr1 gth exon 148019171 148019333 1.000000 + . . chr1 gth exon 148019171 148019333 1.000000 + . . chr1 gth exon 148019746 148020045 1.000000 + . . chr1 gth exon 148019746 148020045 1.000000 + . . chr1 gth exon 148022107 148022312 1.000000 + . . chr1 gth exon 148022107 148022312 1.000000 + . . chr1 gth exon 148050381 148050418 1.000000 + . . chr1 gth exon 148050381 148050418 1.000000 + . . chr1 gth exon 148051092 148051158 1.000000 + . . chr1 gth exon 148051092 148051158 1.000000 + . . chr1 gth exon 148051553 148051747 1.000000 + . . chr1 gth exon 148051553 148051747 1.000000 + . . chr1 gth exon 148127509 148127634 1.000000 - . . chr1 gth exon 148127509 148127634 1.000000 - . . chr1 gth exon 148128623 148128727 1.000000 - . . chr1 gth exon 148128623 148128727 1.000000 - . . chr1 gth exon 148127509 148127634 1.000000 - . . chr1 gth exon 148127509 148127634 1.000000 - . . chr1 gth exon 148128623 148128727 1.000000 - . . chr1 gth exon 148128623 148128727 1.000000 - . . chr1 gth exon 148128891 148128991 1.000000 - . . chr1 gth exon 148128891 148128991 1.000000 - . . chr1 gth exon 148129230 148129431 1.000000 - . . chr1 gth exon 148129230 148129431 1.000000 - . . chr1 gth exon 148128891 148128991 1.000000 - . . chr1 gth exon 148128891 148128991 1.000000 - . . chr1 gth exon 148129230 148129431 1.000000 - . . chr1 gth exon 148129230 148129431 1.000000 - . . chr1 gth exon 148129746 148129827 1.000000 - . . chr1 gth exon 148129746 148129827 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148130277 148130396 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148129882 148130085 1.000000 - . . chr1 gth exon 148130277 148130396 1.000000 - . . chr1 gth exon 148130277 148130396 1.000000 - . . chr1 gth exon 148130277 148130396 1.000000 - . . chr1 gth exon 148130277 148130396 1.000000 - . . chr1 gth exon 148130655 148130737 1.000000 - . . chr1 gth exon 148130655 148130737 1.000000 - . . chr1 gth exon 148130277 148130396 1.000000 - . . chr1 gth exon 148130277 148130396 1.000000 - . . chr1 gth exon 148130655 148130737 1.000000 - . . chr1 gth exon 148130655 148130737 1.000000 - . . chr1 gth exon 148132700 148132713 0.571429 - . . chr1 gth exon 148132700 148132713 0.571429 - . . chr1 gth exon 148186313 148186904 1.000000 + . . chr1 gth exon 148186313 148186904 1.000000 + . . chr1 gth exon 148187091 148187179 1.000000 + . . chr1 gth exon 148187091 148187179 1.000000 + . . chr1 gth exon 148187366 148187486 1.000000 + . . chr1 gth exon 148187366 148187486 1.000000 + . . chr1 gth exon 148185991 148186904 1.000000 + . . chr1 gth exon 148185991 148186904 1.000000 + . . chr1 gth exon 148188273 148192013 1.000000 - . . chr1 gth exon 148188273 148192013 1.000000 - . . chr1 gth exon 148197174 148197320 1.000000 - . . chr1 gth exon 148197174 148197320 1.000000 - . . chr1 gth exon 148192156 148192180 1.000000 - . . chr1 gth exon 148192156 148192180 1.000000 - . . chr1 gth exon 148192460 148192572 1.000000 - . . chr1 gth exon 148192460 148192572 1.000000 - . . chr1 gth exon 148192784 148192840 1.000000 - . . chr1 gth exon 148192784 148192840 1.000000 - . . chr1 gth exon 148193649 148193789 1.000000 - . . chr1 gth exon 148193649 148193789 1.000000 - . . chr1 gth exon 148193958 148194130 1.000000 - . . chr1 gth exon 148193958 148194130 1.000000 - . . chr1 gth exon 148194243 148194377 1.000000 - . . chr1 gth exon 148194243 148194377 1.000000 - . . chr1 gth exon 148197845 148197945 1.000000 - . . chr1 gth exon 148197845 148197945 1.000000 - . . chr1 gth exon 148208946 148209100 1.000000 - . . chr1 gth exon 148208946 148209100 1.000000 - . . chr1 gth exon 148210504 148210610 1.000000 - . . chr1 gth exon 148210504 148210610 1.000000 - . . chr1 gth exon 148213372 148213590 1.000000 - . . chr1 gth exon 148213372 148213590 1.000000 - . . chr1 gth exon 148209498 148209835 1.000000 - . . chr1 gth exon 148209498 148209835 1.000000 - . . chr1 gth exon 148213672 148213962 1.000000 - . . chr1 gth exon 148213672 148213962 1.000000 - . . chr1 gth exon 148215152 148215260 1.000000 - . . chr1 gth exon 148215152 148215260 1.000000 - . . chr1 gth exon 148216215 148216390 1.000000 - . . chr1 gth exon 148216215 148216390 1.000000 - . . chr1 gth exon 148227630 148227754 1.000000 - . . chr1 gth exon 148227630 148227754 1.000000 - . . chr1 gth exon 148296936 148297064 1.000000 + . . chr1 gth exon 148296936 148297064 1.000000 + . . chr1 gth exon 148303080 148303202 0.975610 + . . chr1 gth exon 148303080 148303202 0.975610 + . . chr1 gth exon 148359819 148359886 1.000000 + . . chr1 gth exon 148359819 148359886 1.000000 + . . chr1 gth exon 148367650 148369125 1.000000 + . . chr1 gth exon 148367650 148369125 1.000000 + . . chr1 gth exon 148359819 148359947 1.000000 + . . genometools-1.5.1/testdata/corrupt_large.gff3000066400000000000000000000024551211610345200213020ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.500 + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . + . . ### ctg123 . gene 1000 9000 . X . . ### genometools-1.5.1/testdata/corrupt_target_attribute.gff3000066400000000000000000000001361211610345200235530ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr 1 10000 chr . gene 1000 9000 0.500 + . Target=est 1 genometools-1.5.1/testdata/corruptpatternfile.fna000066400000000000000000000000231211610345200222720ustar00rootroot00000000000000EDVSLMTSIDNMIEEIDF genometools-1.5.1/testdata/csa_example_consensus_spliced_alignments.gff3000066400000000000000000000006711211610345200267350ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 290 seq gt csa gene 1 290 . + . ID=gene1 seq gt csa mRNA 1 290 . + . ID=mRNA1;Parent=gene1 seq gt csa exon 1 90 . + . Parent=mRNA1 seq gt csa exon 110 190 . + . Parent=mRNA1 seq gt csa exon 201 290 . + . Parent=mRNA1 seq gt csa mRNA 1 290 . + . ID=mRNA2;Parent=gene1 seq gt csa exon 1 90 . + . Parent=mRNA2 seq gt csa exon 101 190 . + . Parent=mRNA2 seq gt csa exon 201 290 . + . Parent=mRNA2 ### genometools-1.5.1/testdata/csa_example_spliced_alignments.gff3000066400000000000000000000011351211610345200246310ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 290 seq . gene 1 209 . + . ID=gene1 seq . exon 1 90 . + . Parent=gene1 seq . exon 110 190 . + . Parent=gene1 seq . exon 201 209 . + . Parent=gene1 ### seq . gene 1 290 . + . ID=gene2 seq . exon 1 90 . + . Parent=gene2 seq . exon 101 190 . + . Parent=gene2 seq . exon 201 290 . + . Parent=gene2 ### seq . gene 10 290 . + . ID=gene3 seq . exon 10 90 . + . Parent=gene3 seq . exon 110 190 . + . Parent=gene3 seq . exon 201 290 . + . Parent=gene3 ### seq . gene 181 290 . + . ID=gene4 seq . exon 181 190 . + . Parent=gene4 seq . exon 201 290 . + . Parent=gene4 ### genometools-1.5.1/testdata/csr_testcase.fastq000066400000000000000000000211211211610345200213740ustar00rootroot00000000000000@TEST.1 TESTXX_487 length=27 AAAAAAAAAAAAAAAAAAAAAAAAAAA + IIIIIIIIIIIITrifolium repens mRNA for non-cyanogenic beta-glucosidase aaacaaaccaaatatggattttattgtagccatatttgctctgtttgttattagctcatt cacaattacttccacaaatgcagttgaagcttctactcttcttgacataggtaacctgag tcggagcagttttcctcgtggcttcatctttggtgctggatcttcagcataccaatttga aggtgcagtaaacgaaggcggtagaggaccaagtatttgggataccttcacccataaata tccagaaaaaataagggatggaagcaatgcagacatcacggttgaccaatatcaccgcta caaggaagatgttgggattatgaaggatcaaaatatggattcgtatagattctcaatctc ttggccaagaatactcccaaagggaaagttgagcggaggcataaatcacgaaggaatcaa atattacaacaaccttatcaacgaactattggctaacggtatacaaccatttgtaactct ttttcattgggatcttccccaagtcttagaagatgagtatggtggtttcttaaactccgg tgtaataaatgattttcgagactatacggatctttgcttcaaggaatttggagatagagt gaggtattggagtactctaaatgagccatgggtgtttagcaattctggatatgcactagg aacaaatgcaccaggtcgatgttcggcctccaacgtggccaagcctggtgattctggaac aggaccttatatagttacacacaatcaaattcttgctcatgcagaagctgtacatgtgta taagactaaataccaggcatatcaaaagggaaagataggcataacgttggtatctaactg gttaatgccacttgatgataatagcataccagatataaaggctgccgagagatcacttga cttccaatttggattgtttatggaacaattaacaacaggagattattctaagagcatgcg gcgtatagttaaaaaccgattacctaagttctcaaaattcgaatcaagcctagtgaatgg ttcatttgattttattggtataaactattactcttctagttatattagcaatgccccttc acatggcaatgccaaacccagttactcaacaaatcctatgaccaatatttcatttgaaaa acatgggatacccttaggtccaagggctgcttcaatttggatatatgtttatccatatat gtttatccaagaggacttcgagatcttttgttacatattaaaaataaatataacaatcct gcaattttcaatcactgaaaatggtatgaatgaattcaacgatgcaacacttccagtaga agaagctcttttgaatacttacagaattgattactattaccgtcacttatactacattcg ttctgcaatcagggctggctcaaatgtgaagggtttttacgcatggtcatttttggactg taatgaatggtttgcaggctttactgttcgttttggattaaactttgtagattagaaaga tggattaaaaaggtaccctaagctttctgcccaatggtacaagaactttctcaaaagaaa ctagctagtattattaaaagaactttgtagtagattacagtacatcgtttgaagttgagt tggtgcacctaattaaataaaagaggttactcttaacatatttttaggccattcgttgtg aagttgttaggctgttatttctattatactatgttgtagtaataagtgcattgttgtacc agaagctatgatcataactataggttgatccttcatgtatcagtttgatgttgagaatac tttgaattaaaagtctttttttatttttttaaaaaaaaaaaaaaaaaaaaaaaaaaaaa genometools-1.5.1/testdata/embl_test6.embl000066400000000000000000000010301211610345200205540ustar00rootroot00000000000000ID X56734; SV 1; linear; mRNA; STD; PLN; 1859 BP. XX AC X56734; S46826; XX DT 12-SEP-1991 (Rel. 29, Created) DT 25-NOV-2005 (Rel. 85, Last updated, Version 11) XX DE Trifolium repens mRNA for DE non-cyanogenic beta-glucosidase XX KW beta-glucosidase. // ID X56734; SV 1; linear; mRNA; STD; PLN; 1859 BP. XX AC X56734; S46826; XX DT 12-SEP-1991 (Rel. 29, Created) DT 25-NOV-2005 (Rel. 85, Last updated, Version 11) XX DE Trifolium repens mRNA for DE non-cyanogenic beta-glucosidase XX KW beta-glucosidase. // genometools-1.5.1/testdata/empty_attribute.gff3000066400000000000000000000001271211610345200216450ustar00rootroot00000000000000##gff-version 3 ##sequence-region seqid 1 10000 seqid . gene 1000 9000 0.500 + . = genometools-1.5.1/testdata/empty_attribute_name.gff3000066400000000000000000000001341211610345200226430ustar00rootroot00000000000000##gff-version 3 ##sequence-region seqid 1 10000 seqid . gene 1000 9000 0.500 + . =other genometools-1.5.1/testdata/empty_attribute_value.gff3000066400000000000000000000060041211610345200230410ustar00rootroot00000000000000##gff-version 3 167631690 yrGATE gene 87461 94610 . - . ID=gene1;Name=ZmPLCf;organism=Zea mays;submitted_by=xiazhang 167631690 yrGATE exon 87461 87831 . - . ID=exon1;Parent=gene1 167631690 yrGATE exon 87957 88053 . - . ID=exon2;Parent=gene1 167631690 yrGATE exon 88140 88292 . - . ID=exon3;Parent=gene1 167631690 yrGATE exon 88768 88885 . - . ID=exon4;Parent=gene1 167631690 yrGATE exon 89020 89249 . - . ID=exon5;Parent=gene1 167631690 yrGATE exon 89344 89595 . - . ID=exon6;Parent=gene1 167631690 yrGATE exon 89669 89804 . - . ID=exon7;Parent=gene1 167631690 yrGATE exon 89950 90152 . - . ID=exon8;Parent=gene1 167631690 yrGATE exon 94360 94610 . - . ID=exon9;Parent=gene1 167631690 yrGATE CDS 87719 87831 . - 0 ID=CDS1;Parent=gene1;Name=; 167631690 yrGATE CDS 87957 88053 . - 1 ID=CDS2;Parent=gene1;Name=; 167631690 yrGATE CDS 88140 88292 . - 0 ID=CDS3;Parent=gene1;Name=; 167631690 yrGATE CDS 88768 88885 . - 0 ID=CDS4;Parent=gene1;Name=; 167631690 yrGATE CDS 89020 89249 . - 2 ID=CDS5;Parent=gene1;Name=; 167631690 yrGATE CDS 89344 89595 . - 0 ID=CDS6;Parent=gene1;Name=; 167631690 yrGATE CDS 89669 89804 . - 0 ID=CDS7;Parent=gene1;Name=; 167631690 yrGATE CDS 89950 90152 . - 2 ID=CDS8;Parent=gene1;Name=; 167631690 yrGATE CDS 94360 94554 . - 0 ID=CDS9;Parent=gene1;Name=; 167631690 ZmGDB GeneSeqer_EST_native 87461 87831 0.992 - . ID=evidence1;Evidence_for=exon1; 167631690 ZmGDB GeneSeqer_EST_native 87461 87831 1 - . ID=evidence3;Evidence_for=exon1; 167631690 ZmGDB GenomeThreader_Protein_homologous 87957 88053 0.773 - . ID=evidence4;Evidence_for=exon2; 167631690 ZmGDB GeneSeqer_EST_native 88140 88292 1 - . ID=evidence5;Evidence_for=exon3; 167631690 ZmGDB GeneSeqer_EST_native 88140 88292 1 - . ID=evidence6;Evidence_for=exon3; 167631690 ZmGDB GeneSeqer_EST_native 88140 88292 0.993 - . ID=evidence7;Evidence_for=exon3; 167631690 ZmGDB GenomeThreader_Protein_homologous 88768 88885 0.941 - . ID=evidence8;Evidence_for=exon4; 167631690 ZmGDB GenomeThreader_Protein_homologous 89020 89249 0.679 - . ID=evidence9;Evidence_for=exon5; 167631690 ZmGDB GenomeThreader_Protein_homologous 89344 89595 0.777 - . ID=evidence10;Evidence_for=exon6; 167631690 ZmGDB GeneSeqer_EST_native 89344 89595 0.992 - . ID=evidence11;Evidence_for=exon6; 167631690 ZmGDB GenomeThreader_Protein_homologous 89669 89804 0.895 - . ID=evidence12;Evidence_for=exon7; 167631690 ZmGDB GeneSeqer_EST_native 89669 89804 1 - . ID=evidence13;Evidence_for=exon7; 167631690 ZmGDB GeneSeqer_EST_native 89669 89804 1 - . ID=evidence14;Evidence_for=exon7; 167631690 ZmGDB GeneSeqer_EST_native 89669 89804 1 - . ID=evidence15;Evidence_for=exon7; 167631690 ZmGDB GeneSeqer_EST_native 89669 89804 1 - . ID=evidence16;Evidence_for=exon7; 167631690 ZmGDB GeneSeqer_EST_native 89669 89804 1 - . ID=evidence17;Evidence_for=exon7; 167631690 ZmGDB GenomeThreader_Protein_homologous 89950 90152 0.903 - . ID=evidence18;Evidence_for=exon8; 167631690 ZmGDB GeneSeqer_EST_native 94360 94610 1 - . ID=evidence19;Evidence_for=exon9; 167631690 ZmGDB GeneSeqer_EST_native 94360 94610 1 - . ID=evidence20;Evidence_for=exon9; genometools-1.5.1/testdata/empty_file000066400000000000000000000000001211610345200177230ustar00rootroot00000000000000genometools-1.5.1/testdata/empty_id_attribute.gff3000066400000000000000000000001311211610345200223140ustar00rootroot00000000000000##gff-version 3 ##sequence-region seqid 1 10000 seqid . gene 1000 9000 0.500 + . ID= genometools-1.5.1/testdata/empty_other_attribute.gff3000066400000000000000000000001341211610345200230440ustar00rootroot00000000000000##gff-version 3 ##sequence-region seqid 1 10000 seqid . gene 1000 9000 0.500 + . other= genometools-1.5.1/testdata/empty_parent_attribute.gff3000066400000000000000000000001351211610345200232150ustar00rootroot00000000000000##gff-version 3 ##sequence-region seqid 1 10000 seqid . gene 1000 9000 0.500 + . Parent= genometools-1.5.1/testdata/empty_seq.fas000066400000000000000000000000101211610345200203450ustar00rootroot00000000000000>empty genometools-1.5.1/testdata/encode_known_genes_Mar07.gff3000066400000000000000000075161771211610345200232540ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr1 147971134 148468994 ##sequence-region chr10 55232537 55643814 ##sequence-region chr11 1710216 131036335 ##sequence-region chr12 38629559 39125713 ##sequence-region chr13 29419740 112832621 ##sequence-region chr14 98705377 98950024 ##sequence-region chr15 41520749 42003799 ##sequence-region chr16 4043 26056510 ##sequence-region chr18 23784928 59823258 ##sequence-region chr19 59061289 60023279 ##sequence-region chr2 118288456 234767778 ##sequence-region chr20 33305669 33793648 ##sequence-region chr21 32669578 39739894 ##sequence-region chr22 30131552 31778912 ##sequence-region chr5 55887725 142374155 ##sequence-region chr6 41411371 132691426 ##sequence-region chr7 26905852 126835803 ##sequence-region chr8 118886142 119279152 ##sequence-region chr9 128768701 129020095 ##sequence-region chrX 122525028 153939916 chr1 ENCODE gene 147971134 147975692 . - . ID=gene1;name2=VPS72;Name=RP11-68I18.8-005 chr1 ENCODE exon 147971134 147971499 . - . Parent=gene1 chr1 ENCODE exon 147975554 147975692 . - . Parent=gene1 ### chr1 ENCODE gene 147971134 147975694 . - . ID=gene2;Name=RP11-68I18.8-007;name2=VPS72 chr1 ENCODE exon 147971134 147971169 . - . Parent=gene2 chr1 ENCODE exon 147971347 147971499 . - . Parent=gene2 chr1 ENCODE exon 147975673 147975694 . - . Parent=gene2 ### chr1 ENCODE gene 147971134 147975707 . - . ID=gene3;Name=RP11-68I18.8-002;name2=VPS72 chr1 ENCODE exon 147971134 147971169 . - . Parent=gene3 chr1 ENCODE exon 147971347 147971499 . - . Parent=gene3 chr1 ENCODE exon 147975554 147975707 . - . Parent=gene3 ### chr1 ENCODE gene 147971134 147975720 . - . ID=gene4;Name=RP11-68I18.8-006;name2=VPS72 chr1 ENCODE exon 147971134 147971169 . - . Parent=gene4 chr1 ENCODE exon 147971347 147971499 . - . Parent=gene4 chr1 ENCODE exon 147975554 147975720 . - . Parent=gene4 ### chr1 ENCODE gene 147971134 147975737 . - . ID=gene5;Name=RP11-68I18.8-003;name2=VPS72 chr1 ENCODE exon 147971134 147971169 . - . Parent=gene5 chr1 ENCODE exon 147971347 147971499 . - . Parent=gene5 chr1 ENCODE exon 147975554 147975737 . - . Parent=gene5 ### chr1 ENCODE gene 147971134 147975762 . - . ID=gene6;name2=VPS72;Name=RP11-68I18.8-001 chr1 ENCODE exon 147971134 147971169 . - . Parent=gene6 chr1 ENCODE exon 147971347 147971499 . - . Parent=gene6 chr1 ENCODE exon 147975554 147975762 . - . Parent=gene6 ### chr1 ENCODE gene 147971134 147980870 . - . ID=gene7;Name=RP11-68I18.8-004;name2=VPS72 chr1 ENCODE exon 147971134 147971169 . - . Parent=gene7 chr1 ENCODE exon 147971347 147971499 . - . Parent=gene7 chr1 ENCODE exon 147980828 147980870 . - . Parent=gene7 ### chr1 ENCODE gene 147983498 148017310 . + . ID=gene8;Name=RP11-68I18.9-011;name2=PIP5K1A chr1 ENCODE exon 147983498 147983666 . + . Parent=gene8 chr1 ENCODE CDS 147983567 147983666 . + 0 Parent=gene8 chr1 ENCODE exon 148009797 148009828 . + . Parent=gene8 chr1 ENCODE CDS 148009797 148009828 . + 2 Parent=gene8 chr1 ENCODE exon 148012869 148012949 . + . Parent=gene8 chr1 ENCODE CDS 148012869 148012949 . + 0 Parent=gene8 chr1 ENCODE exon 148017220 148017310 . + . Parent=gene8 chr1 ENCODE CDS 148017220 148017310 . + 0 Parent=gene8 ### chr1 ENCODE gene 147984100 148035085 . + . ID=gene9;Name=RP11-68I18.9-001;name2=PIP5K1A chr1 ENCODE exon 147984100 147984630 . + . Parent=gene9 chr1 ENCODE CDS 147984546 147984630 . + 0 Parent=gene9 chr1 ENCODE exon 148009797 148009828 . + . Parent=gene9 chr1 ENCODE CDS 148009797 148009828 . + 2 Parent=gene9 chr1 ENCODE exon 148012869 148012949 . + . Parent=gene9 chr1 ENCODE CDS 148012869 148012949 . + 0 Parent=gene9 chr1 ENCODE exon 148017220 148017350 . + . Parent=gene9 chr1 ENCODE CDS 148017220 148017350 . + 0 Parent=gene9 chr1 ENCODE exon 148017797 148017914 . + . Parent=gene9 chr1 ENCODE CDS 148017797 148017914 . + 1 Parent=gene9 chr1 ENCODE exon 148018100 148018252 . + . Parent=gene9 chr1 ENCODE CDS 148018100 148018252 . + 0 Parent=gene9 chr1 ENCODE exon 148019746 148020045 . + . Parent=gene9 chr1 ENCODE CDS 148019746 148020045 . + 0 Parent=gene9 chr1 ENCODE exon 148022107 148022312 . + . Parent=gene9 chr1 ENCODE CDS 148022107 148022312 . + 0 Parent=gene9 chr1 ENCODE exon 148023731 148023814 . + . Parent=gene9 chr1 ENCODE CDS 148023731 148023814 . + 1 Parent=gene9 chr1 ENCODE exon 148024679 148024727 . + . Parent=gene9 chr1 ENCODE CDS 148024679 148024727 . + 1 Parent=gene9 chr1 ENCODE exon 148025504 148025588 . + . Parent=gene9 chr1 ENCODE CDS 148025504 148025588 . + 0 Parent=gene9 chr1 ENCODE exon 148027672 148027818 . + . Parent=gene9 chr1 ENCODE CDS 148027672 148027818 . + 2 Parent=gene9 chr1 ENCODE exon 148027987 148028116 . + . Parent=gene9 chr1 ENCODE CDS 148027987 148028116 . + 2 Parent=gene9 chr1 ENCODE exon 148032469 148032514 . + . Parent=gene9 chr1 ENCODE CDS 148032469 148032514 . + 1 Parent=gene9 chr1 ENCODE CDS 148033412 148033414 . + 0 Parent=gene9 chr1 ENCODE exon 148033412 148035085 . + . Parent=gene9 ### chr1 ENCODE gene 147984101 148012946 . + . ID=gene10;Name=RP11-68I18.9-015;name2=PIP5K1A chr1 ENCODE exon 147984101 147984630 . + . Parent=gene10 chr1 ENCODE CDS 147984546 147984630 . + 0 Parent=gene10 chr1 ENCODE exon 148009794 148009828 . + . Parent=gene10 chr1 ENCODE CDS 148009794 148009828 . + 2 Parent=gene10 chr1 ENCODE exon 148012869 148012946 . + . Parent=gene10 chr1 ENCODE CDS 148012869 148012946 . + 0 Parent=gene10 ### chr1 ENCODE gene 147984102 148035080 . + . ID=gene11;Name=RP11-68I18.9-002;name2=PIP5K1A chr1 ENCODE exon 147984102 147984630 . + . Parent=gene11 chr1 ENCODE CDS 147984546 147984630 . + 0 Parent=gene11 chr1 ENCODE exon 148009797 148009828 . + . Parent=gene11 chr1 ENCODE CDS 148009797 148009828 . + 2 Parent=gene11 chr1 ENCODE exon 148012869 148012949 . + . Parent=gene11 chr1 ENCODE CDS 148012869 148012949 . + 0 Parent=gene11 chr1 ENCODE exon 148017220 148017350 . + . Parent=gene11 chr1 ENCODE CDS 148017220 148017350 . + 0 Parent=gene11 chr1 ENCODE exon 148017797 148017914 . + . Parent=gene11 chr1 ENCODE CDS 148017797 148017914 . + 1 Parent=gene11 chr1 ENCODE exon 148018100 148018252 . + . Parent=gene11 chr1 ENCODE CDS 148018100 148018252 . + 0 Parent=gene11 chr1 ENCODE exon 148019746 148020045 . + . Parent=gene11 chr1 ENCODE CDS 148019746 148020045 . + 0 Parent=gene11 chr1 ENCODE exon 148022107 148022312 . + . Parent=gene11 chr1 ENCODE CDS 148022107 148022312 . + 0 Parent=gene11 chr1 ENCODE exon 148023731 148023814 . + . Parent=gene11 chr1 ENCODE CDS 148023731 148023814 . + 1 Parent=gene11 chr1 ENCODE exon 148024679 148024727 . + . Parent=gene11 chr1 ENCODE CDS 148024679 148024727 . + 1 Parent=gene11 chr1 ENCODE exon 148025504 148025588 . + . Parent=gene11 chr1 ENCODE CDS 148025504 148025588 . + 0 Parent=gene11 chr1 ENCODE exon 148027987 148028116 . + . Parent=gene11 chr1 ENCODE CDS 148027987 148028116 . + 2 Parent=gene11 chr1 ENCODE exon 148032469 148032514 . + . Parent=gene11 chr1 ENCODE CDS 148032469 148032514 . + 1 Parent=gene11 chr1 ENCODE CDS 148033412 148033414 . + 0 Parent=gene11 chr1 ENCODE exon 148033412 148035080 . + . Parent=gene11 ### chr1 ENCODE gene 147984103 148001549 . + . ID=gene12;Name=RP11-68I18.9-014;name2=PIP5K1A chr1 ENCODE exon 147984103 147984630 . + . Parent=gene12 chr1 ENCODE CDS 147984546 147984630 . + 0 Parent=gene12 chr1 ENCODE exon 148001511 148001549 . + . Parent=gene12 chr1 ENCODE CDS 148001511 148001549 . + 2 Parent=gene12 ### chr1 ENCODE gene 147984124 148033437 . + . ID=gene13;name2=PIP5K1A;Name=RP11-68I18.9-003 chr1 ENCODE exon 147984124 147984630 . + . Parent=gene13 chr1 ENCODE CDS 147984546 147984630 . + 0 Parent=gene13 chr1 ENCODE exon 148009794 148009828 . + . Parent=gene13 chr1 ENCODE CDS 148009794 148009828 . + 2 Parent=gene13 chr1 ENCODE exon 148009920 148009955 . + . Parent=gene13 chr1 ENCODE CDS 148009920 148009955 . + 0 Parent=gene13 chr1 ENCODE exon 148012869 148012949 . + . Parent=gene13 chr1 ENCODE CDS 148012869 148012949 . + 0 Parent=gene13 chr1 ENCODE exon 148017220 148017350 . + . Parent=gene13 chr1 ENCODE CDS 148017220 148017350 . + 0 Parent=gene13 chr1 ENCODE exon 148017797 148017914 . + . Parent=gene13 chr1 ENCODE CDS 148017797 148017914 . + 1 Parent=gene13 chr1 ENCODE exon 148018100 148018252 . + . Parent=gene13 chr1 ENCODE CDS 148018100 148018252 . + 0 Parent=gene13 chr1 ENCODE exon 148019746 148020045 . + . Parent=gene13 chr1 ENCODE CDS 148019746 148020045 . + 0 Parent=gene13 chr1 ENCODE exon 148022107 148022312 . + . Parent=gene13 chr1 ENCODE CDS 148022107 148022312 . + 0 Parent=gene13 chr1 ENCODE exon 148023731 148023814 . + . Parent=gene13 chr1 ENCODE CDS 148023731 148023814 . + 1 Parent=gene13 chr1 ENCODE exon 148024679 148024727 . + . Parent=gene13 chr1 ENCODE CDS 148024679 148024727 . + 1 Parent=gene13 chr1 ENCODE exon 148025504 148025588 . + . Parent=gene13 chr1 ENCODE CDS 148025504 148025588 . + 0 Parent=gene13 chr1 ENCODE exon 148027672 148027818 . + . Parent=gene13 chr1 ENCODE CDS 148027672 148027818 . + 2 Parent=gene13 chr1 ENCODE exon 148027987 148028116 . + . Parent=gene13 chr1 ENCODE CDS 148027987 148028116 . + 2 Parent=gene13 chr1 ENCODE exon 148032469 148032514 . + . Parent=gene13 chr1 ENCODE CDS 148032469 148032514 . + 1 Parent=gene13 chr1 ENCODE CDS 148033412 148033414 . + 0 Parent=gene13 chr1 ENCODE exon 148033412 148033437 . + . Parent=gene13 ### chr1 ENCODE gene 147999066 148017350 . + . ID=gene14;Name=RP11-68I18.9-004;name2=PIP5K1A chr1 ENCODE exon 147999066 147999096 . + . Parent=gene14 chr1 ENCODE exon 148001511 148001549 . + . Parent=gene14 chr1 ENCODE exon 148009794 148009828 . + . Parent=gene14 chr1 ENCODE CDS 148009817 148009828 . + 0 Parent=gene14 chr1 ENCODE exon 148009920 148009955 . + . Parent=gene14 chr1 ENCODE CDS 148009920 148009955 . + 0 Parent=gene14 chr1 ENCODE exon 148012869 148012949 . + . Parent=gene14 chr1 ENCODE CDS 148012869 148012949 . + 0 Parent=gene14 chr1 ENCODE exon 148017220 148017350 . + . Parent=gene14 chr1 ENCODE CDS 148017220 148017350 . + 0 Parent=gene14 ### chr1 ENCODE gene 148009429 148017894 . + . ID=gene15;Name=RP11-68I18.9-005;name2=PIP5K1A chr1 ENCODE exon 148009429 148009828 . + . Parent=gene15 chr1 ENCODE exon 148012869 148012949 . + . Parent=gene15 chr1 ENCODE exon 148017220 148017350 . + . Parent=gene15 chr1 ENCODE exon 148017797 148017894 . + . Parent=gene15 ### chr1 ENCODE gene 148009688 148017856 . + . ID=gene16;Name=RP11-68I18.9-009;name2=PIP5K1A chr1 ENCODE exon 148009688 148009828 . + . Parent=gene16 chr1 ENCODE exon 148009920 148009955 . + . Parent=gene16 chr1 ENCODE exon 148012869 148012949 . + . Parent=gene16 chr1 ENCODE exon 148017220 148017350 . + . Parent=gene16 chr1 ENCODE exon 148017797 148017856 . + . Parent=gene16 ### chr1 ENCODE gene 148012816 148018190 . + . ID=gene17;Name=RP11-68I18.9-006;name2=PIP5K1A chr1 ENCODE exon 148012816 148012949 . + . Parent=gene17 chr1 ENCODE exon 148017220 148017350 . + . Parent=gene17 chr1 ENCODE exon 148017797 148017914 . + . Parent=gene17 chr1 ENCODE exon 148018100 148018190 . + . Parent=gene17 ### chr1 ENCODE gene 148017801 148019916 . + . ID=gene18;Name=RP11-68I18.9-012;name2=PIP5K1A chr1 ENCODE exon 148017801 148017914 . + . Parent=gene18 chr1 ENCODE exon 148018100 148018252 . + . Parent=gene18 chr1 ENCODE exon 148018880 148018947 . + . Parent=gene18 chr1 ENCODE exon 148019746 148019916 . + . Parent=gene18 ### chr1 ENCODE gene 148019171 148022296 . + . ID=gene19;name2=PIP5K1A;Name=RP11-68I18.9-007 chr1 ENCODE exon 148019171 148019333 . + . Parent=gene19 chr1 ENCODE exon 148019746 148020045 . + . Parent=gene19 chr1 ENCODE exon 148022107 148022296 . + . Parent=gene19 ### chr1 ENCODE gene 148022183 148024154 . + . ID=gene20;Name=RP11-68I18.9-013;name2=PIP5K1A chr1 ENCODE exon 148022183 148022312 . + . Parent=gene20 chr1 ENCODE exon 148023731 148024154 . + . Parent=gene20 ### chr1 ENCODE gene 148022183 148025840 . + . ID=gene21;Name=RP11-68I18.9-008;name2=PIP5K1A chr1 ENCODE exon 148022183 148022312 . + . Parent=gene21 chr1 ENCODE exon 148023731 148023814 . + . Parent=gene21 chr1 ENCODE exon 148024679 148024727 . + . Parent=gene21 chr1 ENCODE exon 148025504 148025840 . + . Parent=gene21 ### chr1 ENCODE gene 148027661 148034032 . + . ID=gene22;Name=RP11-68I18.9-010;name2=PIP5K1A chr1 ENCODE exon 148027661 148027818 . + . Parent=gene22 chr1 ENCODE exon 148027987 148028116 . + . Parent=gene22 chr1 ENCODE exon 148032469 148032514 . + . Parent=gene22 chr1 ENCODE exon 148033412 148034032 . + . Parent=gene22 ### chr1 ENCODE gene 148040252 148053028 . + . ID=gene23;Name=RP11-126K1.1-001;name2=PSMD4 chr1 ENCODE exon 148040252 148040357 . + . Parent=gene23 chr1 ENCODE CDS 148040332 148040357 . + 0 Parent=gene23 chr1 ENCODE exon 148047710 148047850 . + . Parent=gene23 chr1 ENCODE CDS 148047710 148047850 . + 1 Parent=gene23 chr1 ENCODE exon 148049463 148049577 . + . Parent=gene23 chr1 ENCODE CDS 148049463 148049577 . + 1 Parent=gene23 chr1 ENCODE exon 148050381 148050467 . + . Parent=gene23 chr1 ENCODE CDS 148050381 148050467 . + 0 Parent=gene23 chr1 ENCODE exon 148050715 148050783 . + . Parent=gene23 chr1 ENCODE CDS 148050715 148050783 . + 0 Parent=gene23 chr1 ENCODE exon 148050943 148051158 . + . Parent=gene23 chr1 ENCODE CDS 148050943 148051158 . + 0 Parent=gene23 chr1 ENCODE exon 148051553 148051661 . + . Parent=gene23 chr1 ENCODE CDS 148051553 148051661 . + 0 Parent=gene23 chr1 ENCODE exon 148051857 148051988 . + . Parent=gene23 chr1 ENCODE CDS 148051857 148051988 . + 2 Parent=gene23 chr1 ENCODE exon 148052069 148052136 . + . Parent=gene23 chr1 ENCODE CDS 148052069 148052136 . + 2 Parent=gene23 chr1 ENCODE CDS 148052722 148052892 . + 0 Parent=gene23 chr1 ENCODE exon 148052722 148053028 . + . Parent=gene23 ### chr1 ENCODE gene 148040258 148053008 . + . ID=gene24;Name=RP11-126K1.1-002;name2=PSMD4 chr1 ENCODE exon 148040258 148040357 . + . Parent=gene24 chr1 ENCODE CDS 148040332 148040357 . + 0 Parent=gene24 chr1 ENCODE exon 148047710 148047850 . + . Parent=gene24 chr1 ENCODE CDS 148047710 148047850 . + 1 Parent=gene24 chr1 ENCODE exon 148049463 148049577 . + . Parent=gene24 chr1 ENCODE CDS 148049463 148049577 . + 1 Parent=gene24 chr1 ENCODE exon 148050381 148050467 . + . Parent=gene24 chr1 ENCODE CDS 148050381 148050467 . + 0 Parent=gene24 chr1 ENCODE exon 148050715 148050783 . + . Parent=gene24 chr1 ENCODE CDS 148050715 148050783 . + 0 Parent=gene24 chr1 ENCODE exon 148050943 148051158 . + . Parent=gene24 chr1 ENCODE CDS 148050943 148051158 . + 0 Parent=gene24 chr1 ENCODE exon 148051553 148051670 . + . Parent=gene24 chr1 ENCODE CDS 148051553 148051670 . + 0 Parent=gene24 chr1 ENCODE exon 148051857 148051988 . + . Parent=gene24 chr1 ENCODE CDS 148051857 148051988 . + 2 Parent=gene24 chr1 ENCODE exon 148052069 148052136 . + . Parent=gene24 chr1 ENCODE CDS 148052069 148052136 . + 2 Parent=gene24 chr1 ENCODE CDS 148052722 148052892 . + 0 Parent=gene24 chr1 ENCODE exon 148052722 148053008 . + . Parent=gene24 ### chr1 ENCODE gene 148040307 148048459 . + . ID=gene25;Name=RP11-126K1.1-012;name2=PSMD4 chr1 ENCODE exon 148040307 148040357 . + . Parent=gene25 chr1 ENCODE exon 148047710 148048459 . + . Parent=gene25 ### chr1 ENCODE gene 148040312 148051137 . + . ID=gene26;Name=RP11-126K1.1-004;name2=PSMD4 chr1 ENCODE exon 148040312 148040357 . + . Parent=gene26 chr1 ENCODE exon 148047710 148047850 . + . Parent=gene26 chr1 ENCODE exon 148049463 148049577 . + . Parent=gene26 chr1 ENCODE exon 148050381 148050783 . + . Parent=gene26 chr1 ENCODE exon 148050943 148051137 . + . Parent=gene26 ### chr1 ENCODE gene 148040318 148052781 . + . ID=gene27;Name=RP11-126K1.1-006;name2=PSMD4 chr1 ENCODE exon 148040318 148040357 . + . Parent=gene27 chr1 ENCODE exon 148047710 148047850 . + . Parent=gene27 chr1 ENCODE exon 148049463 148049577 . + . Parent=gene27 chr1 ENCODE exon 148050381 148050467 . + . Parent=gene27 chr1 ENCODE exon 148050715 148050783 . + . Parent=gene27 chr1 ENCODE exon 148050943 148051158 . + . Parent=gene27 chr1 ENCODE exon 148051553 148051988 . + . Parent=gene27 chr1 ENCODE exon 148052069 148052136 . + . Parent=gene27 chr1 ENCODE exon 148052722 148052781 . + . Parent=gene27 ### chr1 ENCODE gene 148044612 148051158 . + . ID=gene28;Name=RP11-126K1.1-014;name2=PSMD4 chr1 ENCODE exon 148044612 148044770 . + . Parent=gene28 chr1 ENCODE exon 148047710 148047850 . + . Parent=gene28 chr1 ENCODE CDS 148047729 148047850 . + 0 Parent=gene28 chr1 ENCODE exon 148049463 148049577 . + . Parent=gene28 chr1 ENCODE CDS 148049463 148049577 . + 1 Parent=gene28 chr1 ENCODE exon 148050381 148050467 . + . Parent=gene28 chr1 ENCODE CDS 148050381 148050467 . + 0 Parent=gene28 chr1 ENCODE exon 148050715 148050783 . + . Parent=gene28 chr1 ENCODE CDS 148050715 148050783 . + 0 Parent=gene28 chr1 ENCODE exon 148050943 148051158 . + . Parent=gene28 chr1 ENCODE CDS 148050943 148051158 . + 0 Parent=gene28 ### chr1 ENCODE gene 148048109 148050488 . + . ID=gene29;name2=PSMD4;Name=RP11-126K1.1-011 chr1 ENCODE exon 148048109 148048152 . + . Parent=gene29 chr1 ENCODE exon 148049323 148049577 . + . Parent=gene29 chr1 ENCODE exon 148050381 148050488 . + . Parent=gene29 ### chr1 ENCODE gene 148049463 148052921 . + . ID=gene30;Name=RP11-126K1.1-005;name2=PSMD4 chr1 ENCODE exon 148049463 148049577 . + . Parent=gene30 chr1 ENCODE exon 148050381 148050419 . + . Parent=gene30 chr1 ENCODE exon 148051093 148051158 . + . Parent=gene30 chr1 ENCODE exon 148051553 148051661 . + . Parent=gene30 chr1 ENCODE exon 148051857 148051988 . + . Parent=gene30 chr1 ENCODE exon 148052117 148052136 . + . Parent=gene30 chr1 ENCODE exon 148052722 148052921 . + . Parent=gene30 ### chr1 ENCODE gene 148050437 148053015 . + . ID=gene31;Name=RP11-126K1.1-008;name2=PSMD4 chr1 ENCODE exon 148050437 148050467 . + . Parent=gene31 chr1 ENCODE CDS 148050437 148050467 . + 0 Parent=gene31 chr1 ENCODE exon 148050715 148050783 . + . Parent=gene31 chr1 ENCODE CDS 148050715 148050783 . + 2 Parent=gene31 chr1 ENCODE exon 148051553 148051661 . + . Parent=gene31 chr1 ENCODE CDS 148051553 148051661 . + 2 Parent=gene31 chr1 ENCODE exon 148051857 148051988 . + . Parent=gene31 chr1 ENCODE CDS 148051857 148051988 . + 1 Parent=gene31 chr1 ENCODE exon 148052069 148052136 . + . Parent=gene31 chr1 ENCODE CDS 148052069 148052136 . + 1 Parent=gene31 chr1 ENCODE CDS 148052722 148052892 . + 2 Parent=gene31 chr1 ENCODE exon 148052722 148053015 . + . Parent=gene31 ### chr1 ENCODE gene 148050793 148051647 . + . ID=gene32;Name=RP11-126K1.1-009;name2=PSMD4 chr1 ENCODE exon 148050793 148051158 . + . Parent=gene32 chr1 ENCODE exon 148051553 148051647 . + . Parent=gene32 ### chr1 ENCODE gene 148051587 148053009 . + . ID=gene33;Name=RP11-126K1.1-013;name2=PSMD4 chr1 ENCODE exon 148051587 148051747 . + . Parent=gene33 chr1 ENCODE exon 148051857 148051988 . + . Parent=gene33 chr1 ENCODE exon 148052069 148052136 . + . Parent=gene33 chr1 ENCODE exon 148052722 148053009 . + . Parent=gene33 ### chr1 ENCODE gene 148051857 148052274 . + . ID=gene34;Name=RP11-126K1.1-007;name2=PSMD4 chr1 ENCODE exon 148051857 148051988 . + . Parent=gene34 chr1 ENCODE exon 148052069 148052274 . + . Parent=gene34 ### chr1 ENCODE gene 148052093 148053009 . + . ID=gene35;Name=RP11-126K1.1-010;name2=PSMD4 chr1 ENCODE exon 148052093 148052136 . + . Parent=gene35 chr1 ENCODE CDS 148052093 148052136 . + 0 Parent=gene35 chr1 ENCODE exon 148052489 148052527 . + . Parent=gene35 chr1 ENCODE CDS 148052489 148052527 . + 1 Parent=gene35 chr1 ENCODE CDS 148052722 148052892 . + 1 Parent=gene35 chr1 ENCODE exon 148052722 148053009 . + . Parent=gene35 ### chr1 ENCODE gene 148065573 148067429 . - . ID=gene36;Name=RP11-126K1.2-002;name2=RP11-126K1.2 chr1 ENCODE exon 148065573 148065807 . - . Parent=gene36 chr1 ENCODE exon 148067358 148067429 . - . Parent=gene36 ### chr1 ENCODE gene 148065573 148067478 . - . ID=gene37;Name=RP11-126K1.2-001;name2=RP11-126K1.2 chr1 ENCODE exon 148065573 148065807 . - . Parent=gene37 chr1 ENCODE CDS 148065745 148065807 . - 0 Parent=gene37 chr1 ENCODE CDS 148067092 148067208 . - 0 Parent=gene37 chr1 ENCODE exon 148067092 148067478 . - . Parent=gene37 ### chr1 ENCODE gene 148067167 148072254 . + . ID=gene38;Name=RP11-126K1.3-004;name2=ZNF687 chr1 ENCODE exon 148067167 148067628 . + . Parent=gene38 chr1 ENCODE CDS 148067619 148067628 . + 0 Parent=gene38 chr1 ENCODE exon 148071824 148072254 . + . Parent=gene38 chr1 ENCODE CDS 148071824 148072254 . + 2 Parent=gene38 ### chr1 ENCODE gene 148067816 148077454 . + . ID=gene39;Name=RP11-126K1.3-001;name2=ZNF687 chr1 ENCODE exon 148067816 148067944 . + . Parent=gene39 chr1 ENCODE exon 148071824 148073955 . + . Parent=gene39 chr1 ENCODE CDS 148071841 148073955 . + 0 Parent=gene39 chr1 ENCODE exon 148074077 148074255 . + . Parent=gene39 chr1 ENCODE CDS 148074077 148074255 . + 0 Parent=gene39 chr1 ENCODE exon 148074644 148074820 . + . Parent=gene39 chr1 ENCODE CDS 148074644 148074820 . + 1 Parent=gene39 chr1 ENCODE exon 148074927 148075089 . + . Parent=gene39 chr1 ENCODE CDS 148074927 148075089 . + 1 Parent=gene39 chr1 ENCODE exon 148075227 148075556 . + . Parent=gene39 chr1 ENCODE CDS 148075227 148075556 . + 0 Parent=gene39 chr1 ENCODE exon 148075671 148075783 . + . Parent=gene39 chr1 ENCODE CDS 148075671 148075783 . + 0 Parent=gene39 chr1 ENCODE exon 148075981 148076122 . + . Parent=gene39 chr1 ENCODE CDS 148075981 148076122 . + 1 Parent=gene39 chr1 ENCODE CDS 148076264 148076758 . + 0 Parent=gene39 chr1 ENCODE exon 148076264 148077454 . + . Parent=gene39 ### chr1 ENCODE gene 148067861 148077452 . + . ID=gene40;Name=RP11-126K1.3-002;name2=ZNF687 chr1 ENCODE exon 148067861 148067944 . + . Parent=gene40 chr1 ENCODE exon 148070755 148071623 . + . Parent=gene40 chr1 ENCODE exon 148071824 148073955 . + . Parent=gene40 chr1 ENCODE CDS 148071841 148073955 . + 0 Parent=gene40 chr1 ENCODE exon 148074077 148074255 . + . Parent=gene40 chr1 ENCODE CDS 148074077 148074255 . + 0 Parent=gene40 chr1 ENCODE exon 148074644 148074820 . + . Parent=gene40 chr1 ENCODE CDS 148074644 148074820 . + 1 Parent=gene40 chr1 ENCODE exon 148074927 148075089 . + . Parent=gene40 chr1 ENCODE CDS 148074927 148075089 . + 1 Parent=gene40 chr1 ENCODE exon 148075227 148075556 . + . Parent=gene40 chr1 ENCODE CDS 148075227 148075556 . + 0 Parent=gene40 chr1 ENCODE exon 148075671 148075783 . + . Parent=gene40 chr1 ENCODE CDS 148075671 148075783 . + 0 Parent=gene40 chr1 ENCODE exon 148075981 148076122 . + . Parent=gene40 chr1 ENCODE CDS 148075981 148076122 . + 1 Parent=gene40 chr1 ENCODE CDS 148076264 148076758 . + 0 Parent=gene40 chr1 ENCODE exon 148076264 148077452 . + . Parent=gene40 ### chr1 ENCODE gene 148073033 148077452 . + . ID=gene41;Name=RP11-126K1.3-003;name2=ZNF687 chr1 ENCODE exon 148073033 148073955 . + . Parent=gene41 chr1 ENCODE CDS 148073033 148073955 . + 0 Parent=gene41 chr1 ENCODE exon 148074077 148074255 . + . Parent=gene41 chr1 ENCODE CDS 148074077 148074255 . + 1 Parent=gene41 chr1 ENCODE exon 148074644 148074820 . + . Parent=gene41 chr1 ENCODE CDS 148074644 148074820 . + 2 Parent=gene41 chr1 ENCODE exon 148074927 148075089 . + . Parent=gene41 chr1 ENCODE CDS 148074927 148075089 . + 2 Parent=gene41 chr1 ENCODE exon 148075227 148075556 . + . Parent=gene41 chr1 ENCODE CDS 148075227 148075556 . + 1 Parent=gene41 chr1 ENCODE exon 148075671 148075783 . + . Parent=gene41 chr1 ENCODE CDS 148075671 148075783 . + 1 Parent=gene41 chr1 ENCODE exon 148075920 148076122 . + . Parent=gene41 chr1 ENCODE CDS 148075920 148076122 . + 2 Parent=gene41 chr1 ENCODE CDS 148076264 148076295 . + 0 Parent=gene41 chr1 ENCODE exon 148076264 148077452 . + . Parent=gene41 ### chr1 ENCODE gene 148073740 148075088 . + . ID=gene42;Name=RP11-126K1.3-005;name2=ZNF687 chr1 ENCODE exon 148073740 148073955 . + . Parent=gene42 chr1 ENCODE exon 148074077 148074255 . + . Parent=gene42 chr1 ENCODE exon 148074644 148075088 . + . Parent=gene42 ### chr1 ENCODE gene 148076000 148076886 . + . ID=gene43;Name=RP11-126K1.3-006;name2=ZNF687 chr1 ENCODE exon 148076000 148076122 . + . Parent=gene43 chr1 ENCODE CDS 148076000 148076122 . + 0 Parent=gene43 chr1 ENCODE CDS 148076244 148076420 . + 0 Parent=gene43 chr1 ENCODE exon 148076244 148076886 . + . Parent=gene43 ### chr1 ENCODE gene 148077486 148112985 . - . ID=gene44;Name=RP11-126K1.4-003;name2=PIK4CB chr1 ENCODE exon 148077486 148078582 . - . Parent=gene44 chr1 ENCODE CDS 148078401 148078582 . - 2 Parent=gene44 chr1 ENCODE exon 148079567 148079687 . - . Parent=gene44 chr1 ENCODE CDS 148079567 148079687 . - 0 Parent=gene44 chr1 ENCODE exon 148079958 148080090 . - . Parent=gene44 chr1 ENCODE CDS 148079958 148080090 . - 1 Parent=gene44 chr1 ENCODE exon 148084357 148084622 . - . Parent=gene44 chr1 ENCODE CDS 148084357 148084622 . - 0 Parent=gene44 chr1 ENCODE exon 148087393 148087516 . - . Parent=gene44 chr1 ENCODE CDS 148087393 148087516 . - 1 Parent=gene44 chr1 ENCODE exon 148087743 148087847 . - . Parent=gene44 chr1 ENCODE CDS 148087743 148087847 . - 1 Parent=gene44 chr1 ENCODE exon 148089090 148089199 . - . Parent=gene44 chr1 ENCODE CDS 148089090 148089199 . - 0 Parent=gene44 chr1 ENCODE exon 148091685 148091912 . - . Parent=gene44 chr1 ENCODE CDS 148091685 148091912 . - 0 Parent=gene44 chr1 ENCODE exon 148093123 148093350 . - . Parent=gene44 chr1 ENCODE CDS 148093123 148093350 . - 0 Parent=gene44 chr1 ENCODE exon 148095760 148095804 . - . Parent=gene44 chr1 ENCODE CDS 148095760 148095804 . - 0 Parent=gene44 chr1 ENCODE exon 148101122 148102058 . - . Parent=gene44 chr1 ENCODE CDS 148101122 148102058 . - 1 Parent=gene44 chr1 ENCODE CDS 148111721 148111728 . - 0 Parent=gene44 chr1 ENCODE exon 148111721 148111922 . - . Parent=gene44 chr1 ENCODE exon 148112820 148112985 . - . Parent=gene44 ### chr1 ENCODE gene 148077680 148113264 . - . ID=gene45;Name=RP11-126K1.4-001;name2=PIK4CB chr1 ENCODE exon 148077680 148078582 . - . Parent=gene45 chr1 ENCODE CDS 148078401 148078582 . - 2 Parent=gene45 chr1 ENCODE exon 148079567 148079687 . - . Parent=gene45 chr1 ENCODE CDS 148079567 148079687 . - 0 Parent=gene45 chr1 ENCODE exon 148079958 148080090 . - . Parent=gene45 chr1 ENCODE CDS 148079958 148080090 . - 1 Parent=gene45 chr1 ENCODE exon 148084357 148084622 . - . Parent=gene45 chr1 ENCODE CDS 148084357 148084622 . - 0 Parent=gene45 chr1 ENCODE exon 148087393 148087516 . - . Parent=gene45 chr1 ENCODE CDS 148087393 148087516 . - 1 Parent=gene45 chr1 ENCODE exon 148087743 148087847 . - . Parent=gene45 chr1 ENCODE CDS 148087743 148087847 . - 1 Parent=gene45 chr1 ENCODE exon 148089090 148089199 . - . Parent=gene45 chr1 ENCODE CDS 148089090 148089199 . - 0 Parent=gene45 chr1 ENCODE exon 148091685 148091912 . - . Parent=gene45 chr1 ENCODE CDS 148091685 148091912 . - 0 Parent=gene45 chr1 ENCODE exon 148093123 148093350 . - . Parent=gene45 chr1 ENCODE CDS 148093123 148093350 . - 0 Parent=gene45 chr1 ENCODE CDS 148101122 148102030 . - 0 Parent=gene45 chr1 ENCODE exon 148101122 148102058 . - . Parent=gene45 chr1 ENCODE exon 148112820 148113264 . - . Parent=gene45 ### chr1 ENCODE gene 148077681 148112960 . - . ID=gene46;Name=RP11-126K1.4-002;name2=PIK4CB chr1 ENCODE exon 148077681 148078582 . - . Parent=gene46 chr1 ENCODE CDS 148078401 148078582 . - 2 Parent=gene46 chr1 ENCODE exon 148079567 148079687 . - . Parent=gene46 chr1 ENCODE CDS 148079567 148079687 . - 0 Parent=gene46 chr1 ENCODE exon 148079958 148080090 . - . Parent=gene46 chr1 ENCODE CDS 148079958 148080090 . - 1 Parent=gene46 chr1 ENCODE exon 148084357 148084622 . - . Parent=gene46 chr1 ENCODE CDS 148084357 148084622 . - 0 Parent=gene46 chr1 ENCODE exon 148087393 148087516 . - . Parent=gene46 chr1 ENCODE CDS 148087393 148087516 . - 1 Parent=gene46 chr1 ENCODE exon 148087743 148087847 . - . Parent=gene46 chr1 ENCODE CDS 148087743 148087847 . - 1 Parent=gene46 chr1 ENCODE exon 148089090 148089199 . - . Parent=gene46 chr1 ENCODE CDS 148089090 148089199 . - 0 Parent=gene46 chr1 ENCODE exon 148091685 148091912 . - . Parent=gene46 chr1 ENCODE CDS 148091685 148091912 . - 0 Parent=gene46 chr1 ENCODE exon 148093123 148093350 . - . Parent=gene46 chr1 ENCODE CDS 148093123 148093350 . - 0 Parent=gene46 chr1 ENCODE exon 148095760 148095804 . - . Parent=gene46 chr1 ENCODE CDS 148095760 148095804 . - 0 Parent=gene46 chr1 ENCODE CDS 148101122 148102030 . - 0 Parent=gene46 chr1 ENCODE exon 148101122 148102058 . - . Parent=gene46 chr1 ENCODE exon 148112820 148112960 . - . Parent=gene46 ### chr1 ENCODE gene 148078028 148112968 . - . ID=gene47;name2=PIK4CB;Name=RP11-126K1.4-004 chr1 ENCODE exon 148078028 148078582 . - . Parent=gene47 chr1 ENCODE CDS 148078401 148078582 . - 2 Parent=gene47 chr1 ENCODE exon 148079567 148079687 . - . Parent=gene47 chr1 ENCODE CDS 148079567 148079687 . - 0 Parent=gene47 chr1 ENCODE exon 148079958 148080090 . - . Parent=gene47 chr1 ENCODE CDS 148079958 148080090 . - 1 Parent=gene47 chr1 ENCODE exon 148084357 148084622 . - . Parent=gene47 chr1 ENCODE CDS 148084357 148084622 . - 0 Parent=gene47 chr1 ENCODE exon 148087393 148087516 . - . Parent=gene47 chr1 ENCODE CDS 148087393 148087516 . - 1 Parent=gene47 chr1 ENCODE exon 148087743 148087847 . - . Parent=gene47 chr1 ENCODE CDS 148087743 148087847 . - 1 Parent=gene47 chr1 ENCODE exon 148089090 148089199 . - . Parent=gene47 chr1 ENCODE CDS 148089090 148089199 . - 0 Parent=gene47 chr1 ENCODE exon 148091685 148091912 . - . Parent=gene47 chr1 ENCODE CDS 148091685 148091912 . - 0 Parent=gene47 chr1 ENCODE exon 148093123 148093350 . - . Parent=gene47 chr1 ENCODE CDS 148093123 148093350 . - 0 Parent=gene47 chr1 ENCODE CDS 148101122 148102030 . - 0 Parent=gene47 chr1 ENCODE exon 148101122 148102058 . - . Parent=gene47 chr1 ENCODE exon 148110294 148110466 . - . Parent=gene47 chr1 ENCODE exon 148111721 148111922 . - . Parent=gene47 chr1 ENCODE exon 148112820 148112968 . - . Parent=gene47 ### chr1 ENCODE gene 148078151 148084541 . - . ID=gene48;Name=RP11-126K1.4-005;name2=PIK4CB chr1 ENCODE exon 148078151 148078582 . - . Parent=gene48 chr1 ENCODE CDS 148078401 148078582 . - 2 Parent=gene48 chr1 ENCODE exon 148078949 148079011 . - . Parent=gene48 chr1 ENCODE CDS 148078949 148079011 . - 2 Parent=gene48 chr1 ENCODE exon 148079567 148079687 . - . Parent=gene48 chr1 ENCODE CDS 148079567 148079687 . - 0 Parent=gene48 chr1 ENCODE exon 148079958 148080090 . - . Parent=gene48 chr1 ENCODE CDS 148079958 148080090 . - 1 Parent=gene48 chr1 ENCODE exon 148084357 148084541 . - . Parent=gene48 chr1 ENCODE CDS 148084357 148084541 . - 0 Parent=gene48 ### chr1 ENCODE gene 148078172 148080022 . - . ID=gene49;name2=PIK4CB;Name=RP11-126K1.4-006 chr1 ENCODE exon 148078172 148078582 . - . Parent=gene49 chr1 ENCODE exon 148079598 148079687 . - . Parent=gene49 chr1 ENCODE exon 148079958 148080022 . - . Parent=gene49 ### chr1 ENCODE gene 148079414 148084583 . - . ID=gene50;Name=RP11-126K1.4-011;name2=PIK4CB chr1 ENCODE exon 148079414 148079687 . - . Parent=gene50 chr1 ENCODE exon 148079958 148080090 . - . Parent=gene50 chr1 ENCODE exon 148084357 148084583 . - . Parent=gene50 ### chr1 ENCODE gene 148083974 148087415 . - . ID=gene51;Name=RP11-126K1.4-010;name2=PIK4CB chr1 ENCODE exon 148083974 148084622 . - . Parent=gene51 chr1 ENCODE exon 148087393 148087415 . - . Parent=gene51 ### chr1 ENCODE gene 148087797 148112965 . - . ID=gene52;Name=RP11-126K1.4-008;name2=PIK4CB chr1 ENCODE exon 148087797 148087847 . - . Parent=gene52 chr1 ENCODE CDS 148087797 148087847 . - 1 Parent=gene52 chr1 ENCODE exon 148089090 148089199 . - . Parent=gene52 chr1 ENCODE CDS 148089090 148089199 . - 0 Parent=gene52 chr1 ENCODE exon 148091685 148091912 . - . Parent=gene52 chr1 ENCODE CDS 148091685 148091912 . - 0 Parent=gene52 chr1 ENCODE exon 148093123 148093350 . - . Parent=gene52 chr1 ENCODE CDS 148093123 148093350 . - 0 Parent=gene52 chr1 ENCODE CDS 148111721 148111753 . - 0 Parent=gene52 chr1 ENCODE exon 148111721 148111922 . - . Parent=gene52 chr1 ENCODE exon 148112820 148112965 . - . Parent=gene52 ### chr1 ENCODE gene 148088903 148091982 . - . ID=gene53;Name=RP11-126K1.4-007;name2=PIK4CB chr1 ENCODE exon 148088903 148089199 . - . Parent=gene53 chr1 ENCODE exon 148091685 148091982 . - . Parent=gene53 ### chr1 ENCODE gene 148091840 148112967 . - . ID=gene54;Name=RP11-126K1.4-012;name2=PIK4CB chr1 ENCODE exon 148091840 148091912 . - . Parent=gene54 chr1 ENCODE exon 148093123 148093350 . - . Parent=gene54 chr1 ENCODE exon 148112820 148112967 . - . Parent=gene54 ### chr1 ENCODE gene 148101340 148112926 . - . ID=gene55;Name=RP11-126K1.4-009;name2=PIK4CB chr1 ENCODE CDS 148101340 148102030 . - 0 Parent=gene55 chr1 ENCODE exon 148101340 148102058 . - . Parent=gene55 chr1 ENCODE exon 148110294 148110466 . - . Parent=gene55 chr1 ENCODE exon 148112820 148112926 . - . Parent=gene55 ### chr1 ENCODE gene 148126189 148132800 . - . ID=gene56;Name=RP11-126K1.5-001;name2=RFX5 chr1 ENCODE exon 148126189 148128727 . - . Parent=gene56 chr1 ENCODE CDS 148127735 148128727 . - 0 Parent=gene56 chr1 ENCODE exon 148128891 148128991 . - . Parent=gene56 chr1 ENCODE CDS 148128891 148128991 . - 2 Parent=gene56 chr1 ENCODE exon 148129230 148129431 . - . Parent=gene56 chr1 ENCODE CDS 148129230 148129431 . - 0 Parent=gene56 chr1 ENCODE exon 148129746 148129827 . - . Parent=gene56 chr1 ENCODE CDS 148129746 148129827 . - 1 Parent=gene56 chr1 ENCODE exon 148129966 148130085 . - . Parent=gene56 chr1 ENCODE CDS 148129966 148130085 . - 1 Parent=gene56 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene56 chr1 ENCODE CDS 148130277 148130396 . - 1 Parent=gene56 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene56 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene56 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene56 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene56 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene56 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene56 chr1 ENCODE exon 148132031 148132155 . - . Parent=gene56 chr1 ENCODE exon 148132760 148132800 . - . Parent=gene56 ### chr1 ENCODE gene 148127378 148132875 . - . ID=gene57;name2=RFX5;Name=RP11-126K1.5-020 chr1 ENCODE exon 148127378 148128727 . - . Parent=gene57 chr1 ENCODE CDS 148127735 148128727 . - 0 Parent=gene57 chr1 ENCODE exon 148128891 148128991 . - . Parent=gene57 chr1 ENCODE CDS 148128891 148128991 . - 2 Parent=gene57 chr1 ENCODE exon 148129230 148129431 . - . Parent=gene57 chr1 ENCODE CDS 148129230 148129431 . - 0 Parent=gene57 chr1 ENCODE exon 148129746 148129827 . - . Parent=gene57 chr1 ENCODE CDS 148129746 148129827 . - 1 Parent=gene57 chr1 ENCODE exon 148129966 148130085 . - . Parent=gene57 chr1 ENCODE CDS 148129966 148130085 . - 1 Parent=gene57 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene57 chr1 ENCODE CDS 148130277 148130396 . - 1 Parent=gene57 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene57 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene57 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene57 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene57 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene57 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene57 chr1 ENCODE exon 148132034 148132155 . - . Parent=gene57 chr1 ENCODE exon 148132760 148132875 . - . Parent=gene57 ### chr1 ENCODE gene 148127509 148130305 . - . ID=gene58;Name=RP11-126K1.5-010;name2=RFX5 chr1 ENCODE exon 148127509 148127634 . - . Parent=gene58 chr1 ENCODE CDS 148127566 148127634 . - 0 Parent=gene58 chr1 ENCODE exon 148128623 148128727 . - . Parent=gene58 chr1 ENCODE CDS 148128623 148128727 . - 0 Parent=gene58 chr1 ENCODE exon 148128891 148128991 . - . Parent=gene58 chr1 ENCODE CDS 148128891 148128991 . - 2 Parent=gene58 chr1 ENCODE exon 148129230 148129431 . - . Parent=gene58 chr1 ENCODE CDS 148129230 148129431 . - 0 Parent=gene58 chr1 ENCODE exon 148129746 148129827 . - . Parent=gene58 chr1 ENCODE CDS 148129746 148129827 . - 1 Parent=gene58 chr1 ENCODE exon 148129966 148130085 . - . Parent=gene58 chr1 ENCODE CDS 148129966 148130085 . - 1 Parent=gene58 chr1 ENCODE exon 148130277 148130305 . - . Parent=gene58 chr1 ENCODE CDS 148130277 148130305 . - 0 Parent=gene58 ### chr1 ENCODE gene 148127509 148132906 . - . ID=gene59;Name=RP11-126K1.5-002;name2=RFX5 chr1 ENCODE exon 148127509 148128727 . - . Parent=gene59 chr1 ENCODE CDS 148127735 148128727 . - 0 Parent=gene59 chr1 ENCODE exon 148128891 148128991 . - . Parent=gene59 chr1 ENCODE CDS 148128891 148128991 . - 2 Parent=gene59 chr1 ENCODE exon 148129230 148129431 . - . Parent=gene59 chr1 ENCODE CDS 148129230 148129431 . - 0 Parent=gene59 chr1 ENCODE exon 148129746 148129827 . - . Parent=gene59 chr1 ENCODE CDS 148129746 148129827 . - 1 Parent=gene59 chr1 ENCODE exon 148129966 148130085 . - . Parent=gene59 chr1 ENCODE CDS 148129966 148130085 . - 1 Parent=gene59 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene59 chr1 ENCODE CDS 148130277 148130396 . - 1 Parent=gene59 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene59 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene59 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene59 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene59 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene59 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene59 chr1 ENCODE exon 148132038 148132155 . - . Parent=gene59 chr1 ENCODE exon 148132760 148132906 . - . Parent=gene59 ### chr1 ENCODE gene 148127796 148132371 . - . ID=gene60;Name=RP11-126K1.5-008;name2=RFX5 chr1 ENCODE exon 148127796 148128727 . - . Parent=gene60 chr1 ENCODE CDS 148127796 148128727 . - 0 Parent=gene60 chr1 ENCODE exon 148128891 148128991 . - . Parent=gene60 chr1 ENCODE CDS 148128891 148128991 . - 2 Parent=gene60 chr1 ENCODE exon 148129230 148129431 . - . Parent=gene60 chr1 ENCODE CDS 148129230 148129431 . - 0 Parent=gene60 chr1 ENCODE exon 148129746 148129827 . - . Parent=gene60 chr1 ENCODE CDS 148129746 148129827 . - 1 Parent=gene60 chr1 ENCODE exon 148129966 148130085 . - . Parent=gene60 chr1 ENCODE CDS 148129966 148130085 . - 1 Parent=gene60 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene60 chr1 ENCODE CDS 148130277 148130396 . - 1 Parent=gene60 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene60 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene60 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene60 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene60 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene60 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene60 chr1 ENCODE exon 148131971 148132155 . - . Parent=gene60 chr1 ENCODE exon 148132304 148132371 . - . Parent=gene60 ### chr1 ENCODE gene 148129246 148130216 . - . ID=gene61;Name=RP11-126K1.5-007;name2=RFX5 chr1 ENCODE exon 148129246 148129431 . - . Parent=gene61 chr1 ENCODE exon 148129746 148129827 . - . Parent=gene61 chr1 ENCODE exon 148129966 148130216 . - . Parent=gene61 ### chr1 ENCODE gene 148129298 148132570 . - . ID=gene62;Name=RP11-126K1.5-004;name2=RFX5 chr1 ENCODE exon 148129298 148129431 . - . Parent=gene62 chr1 ENCODE CDS 148129298 148129431 . - 0 Parent=gene62 chr1 ENCODE exon 148129746 148129827 . - . Parent=gene62 chr1 ENCODE CDS 148129746 148129827 . - 1 Parent=gene62 chr1 ENCODE exon 148129966 148130085 . - . Parent=gene62 chr1 ENCODE CDS 148129966 148130085 . - 1 Parent=gene62 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene62 chr1 ENCODE CDS 148130277 148130396 . - 1 Parent=gene62 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene62 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene62 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene62 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene62 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene62 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene62 chr1 ENCODE exon 148132038 148132155 . - . Parent=gene62 chr1 ENCODE exon 148132489 148132570 . - . Parent=gene62 ### chr1 ENCODE gene 148129748 148132522 . - . ID=gene63;Name=RP11-126K1.5-003;name2=RFX5 chr1 ENCODE exon 148129748 148129827 . - . Parent=gene63 chr1 ENCODE CDS 148129748 148129827 . - 1 Parent=gene63 chr1 ENCODE exon 148129966 148130085 . - . Parent=gene63 chr1 ENCODE CDS 148129966 148130085 . - 1 Parent=gene63 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene63 chr1 ENCODE CDS 148130277 148130396 . - 1 Parent=gene63 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene63 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene63 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene63 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene63 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene63 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene63 chr1 ENCODE exon 148132038 148132155 . - . Parent=gene63 chr1 ENCODE exon 148132304 148132522 . - . Parent=gene63 ### chr1 ENCODE gene 148129805 148132155 . - . ID=gene64;Name=RP11-126K1.5-009;name2=RFX5 chr1 ENCODE exon 148129805 148129827 . - . Parent=gene64 chr1 ENCODE CDS 148129805 148129827 . - 1 Parent=gene64 chr1 ENCODE exon 148129966 148130085 . - . Parent=gene64 chr1 ENCODE CDS 148129966 148130085 . - 1 Parent=gene64 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene64 chr1 ENCODE CDS 148130277 148130396 . - 1 Parent=gene64 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene64 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene64 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene64 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene64 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene64 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene64 chr1 ENCODE exon 148132128 148132155 . - . Parent=gene64 ### chr1 ENCODE gene 148129882 148130726 . - . ID=gene65;Name=RP11-126K1.5-006;name2=RFX5 chr1 ENCODE exon 148129882 148130085 . - . Parent=gene65 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene65 chr1 ENCODE exon 148130655 148130726 . - . Parent=gene65 ### chr1 ENCODE gene 148130064 148132755 . - . ID=gene66;Name=RP11-126K1.5-017;name2=RFX5 chr1 ENCODE exon 148130064 148130085 . - . Parent=gene66 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene66 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene66 chr1 ENCODE exon 148131477 148131506 . - . Parent=gene66 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene66 chr1 ENCODE exon 148132038 148132155 . - . Parent=gene66 chr1 ENCODE exon 148132700 148132755 . - . Parent=gene66 ### chr1 ENCODE gene 148130070 148132777 . - . ID=gene67;Name=RP11-126K1.5-012;name2=RFX5 chr1 ENCODE exon 148130070 148130085 . - . Parent=gene67 chr1 ENCODE CDS 148130070 148130085 . - 1 Parent=gene67 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene67 chr1 ENCODE CDS 148130277 148130396 . - 1 Parent=gene67 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene67 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene67 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene67 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene67 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene67 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene67 chr1 ENCODE exon 148132031 148132155 . - . Parent=gene67 chr1 ENCODE exon 148132700 148132777 . - . Parent=gene67 ### chr1 ENCODE gene 148130109 148132367 . - . ID=gene68;Name=RP11-126K1.5-018;name2=RFX5 chr1 ENCODE exon 148130109 148130153 . - . Parent=gene68 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene68 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene68 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene68 chr1 ENCODE exon 148131764 148131882 . - . Parent=gene68 chr1 ENCODE exon 148132038 148132155 . - . Parent=gene68 chr1 ENCODE exon 148132304 148132367 . - . Parent=gene68 ### chr1 ENCODE gene 148130126 148132790 . - . ID=gene69;Name=RP11-126K1.5-019;name2=RFX5 chr1 ENCODE exon 148130126 148130153 . - . Parent=gene69 chr1 ENCODE CDS 148130126 148130153 . - 1 Parent=gene69 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene69 chr1 ENCODE CDS 148130277 148130396 . - 1 Parent=gene69 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene69 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene69 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene69 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene69 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene69 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene69 chr1 ENCODE exon 148132038 148132155 . - . Parent=gene69 chr1 ENCODE exon 148132304 148132315 . - . Parent=gene69 chr1 ENCODE exon 148132760 148132790 . - . Parent=gene69 ### chr1 ENCODE gene 148130277 148132777 . - . ID=gene70;Name=RP11-126K1.5-005;name2=RFX5 chr1 ENCODE exon 148130277 148130396 . - . Parent=gene70 chr1 ENCODE CDS 148130277 148130396 . - 1 Parent=gene70 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene70 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene70 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene70 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene70 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene70 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene70 chr1 ENCODE exon 148132038 148132155 . - . Parent=gene70 chr1 ENCODE exon 148132700 148132777 . - . Parent=gene70 ### chr1 ENCODE gene 148130313 148132841 . - . ID=gene71;Name=RP11-126K1.5-011;name2=RFX5 chr1 ENCODE exon 148130313 148130396 . - . Parent=gene71 chr1 ENCODE CDS 148130313 148130396 . - 1 Parent=gene71 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene71 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene71 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene71 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene71 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene71 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene71 chr1 ENCODE exon 148131971 148132155 . - . Parent=gene71 chr1 ENCODE exon 148132760 148132841 . - . Parent=gene71 ### chr1 ENCODE gene 148130341 148132421 . - . ID=gene72;Name=RP11-126K1.5-021;name2=RFX5 chr1 ENCODE exon 148130341 148130396 . - . Parent=gene72 chr1 ENCODE CDS 148130341 148130396 . - 1 Parent=gene72 chr1 ENCODE exon 148130655 148130737 . - . Parent=gene72 chr1 ENCODE CDS 148130655 148130737 . - 0 Parent=gene72 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene72 chr1 ENCODE CDS 148131477 148131510 . - 1 Parent=gene72 chr1 ENCODE CDS 148131754 148131869 . - 0 Parent=gene72 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene72 chr1 ENCODE exon 148132031 148132155 . - . Parent=gene72 chr1 ENCODE exon 148132304 148132421 . - . Parent=gene72 ### chr1 ENCODE gene 148130511 148132843 . - . ID=gene73;Name=RP11-126K1.5-016;name2=RFX5 chr1 ENCODE exon 148130511 148130737 . - . Parent=gene73 chr1 ENCODE exon 148131477 148131506 . - . Parent=gene73 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene73 chr1 ENCODE exon 148132038 148132155 . - . Parent=gene73 chr1 ENCODE exon 148132760 148132843 . - . Parent=gene73 ### chr1 ENCODE gene 148130538 148132405 . - . ID=gene74;name2=RFX5;Name=RP11-126K1.5-015 chr1 ENCODE exon 148130538 148130737 . - . Parent=gene74 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene74 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene74 chr1 ENCODE exon 148132038 148132155 . - . Parent=gene74 chr1 ENCODE exon 148132304 148132405 . - . Parent=gene74 ### chr1 ENCODE gene 148130671 148132842 . - . ID=gene75;Name=RP11-126K1.5-014;name2=RFX5 chr1 ENCODE exon 148130671 148130737 . - . Parent=gene75 chr1 ENCODE exon 148130835 148130992 . - . Parent=gene75 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene75 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene75 chr1 ENCODE exon 148132031 148132155 . - . Parent=gene75 chr1 ENCODE exon 148132760 148132842 . - . Parent=gene75 ### chr1 ENCODE gene 148130691 148132384 . - . ID=gene76;Name=RP11-126K1.5-013;name2=RFX5 chr1 ENCODE exon 148130691 148130737 . - . Parent=gene76 chr1 ENCODE exon 148130835 148130992 . - . Parent=gene76 chr1 ENCODE exon 148131477 148131510 . - . Parent=gene76 chr1 ENCODE exon 148131754 148131882 . - . Parent=gene76 chr1 ENCODE exon 148132038 148132155 . - . Parent=gene76 chr1 ENCODE exon 148132304 148132384 . - . Parent=gene76 ### chr1 ENCODE gene 148149851 148158282 . - . ID=gene77;Name=RP11-126K1.7-001;name2=SELENBP1 chr1 ENCODE exon 148149851 148150254 . - . Parent=gene77 chr1 ENCODE CDS 148150092 148150254 . - 1 Parent=gene77 chr1 ENCODE exon 148150475 148150593 . - . Parent=gene77 chr1 ENCODE CDS 148150475 148150593 . - 0 Parent=gene77 chr1 ENCODE exon 148150738 148150830 . - . Parent=gene77 chr1 ENCODE CDS 148150738 148150830 . - 0 Parent=gene77 chr1 ENCODE exon 148151112 148151233 . - . Parent=gene77 chr1 ENCODE CDS 148151112 148151233 . - 2 Parent=gene77 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene77 chr1 ENCODE CDS 148151317 148151395 . - 0 Parent=gene77 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene77 chr1 ENCODE CDS 148151824 148152002 . - 2 Parent=gene77 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene77 chr1 ENCODE CDS 148152271 148152453 . - 2 Parent=gene77 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene77 chr1 ENCODE CDS 148153748 148153868 . - 0 Parent=gene77 chr1 ENCODE exon 148154553 148154738 . - . Parent=gene77 chr1 ENCODE CDS 148154553 148154738 . - 0 Parent=gene77 chr1 ENCODE exon 148154991 148155103 . - . Parent=gene77 chr1 ENCODE CDS 148154991 148155103 . - 2 Parent=gene77 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene77 chr1 ENCODE CDS 148155262 148155318 . - 2 Parent=gene77 chr1 ENCODE CDS 148158187 148158190 . - 0 Parent=gene77 chr1 ENCODE exon 148158187 148158282 . - . Parent=gene77 ### chr1 ENCODE gene 148149853 148158243 . - . ID=gene78;Name=RP11-126K1.7-011;name2=SELENBP1 chr1 ENCODE exon 148149853 148150254 . - . Parent=gene78 chr1 ENCODE exon 148150475 148150593 . - . Parent=gene78 chr1 ENCODE exon 148150738 148150830 . - . Parent=gene78 chr1 ENCODE exon 148151112 148151233 . - . Parent=gene78 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene78 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene78 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene78 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene78 chr1 ENCODE exon 148154553 148155103 . - . Parent=gene78 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene78 chr1 ENCODE exon 148158187 148158243 . - . Parent=gene78 ### chr1 ENCODE gene 148149854 148158254 . - . ID=gene79;Name=RP11-126K1.7-003;name2=SELENBP1 chr1 ENCODE exon 148149854 148150254 . - . Parent=gene79 chr1 ENCODE exon 148150475 148150593 . - . Parent=gene79 chr1 ENCODE exon 148150738 148151233 . - . Parent=gene79 chr1 ENCODE exon 148151317 148152002 . - . Parent=gene79 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene79 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene79 chr1 ENCODE exon 148154553 148155318 . - . Parent=gene79 chr1 ENCODE exon 148158187 148158254 . - . Parent=gene79 ### chr1 ENCODE gene 148149857 148158256 . - . ID=gene80;Name=RP11-126K1.7-017;name2=SELENBP1 chr1 ENCODE exon 148149857 148150254 . - . Parent=gene80 chr1 ENCODE exon 148150475 148150593 . - . Parent=gene80 chr1 ENCODE exon 148150738 148150830 . - . Parent=gene80 chr1 ENCODE exon 148151112 148151233 . - . Parent=gene80 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene80 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene80 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene80 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene80 chr1 ENCODE exon 148154549 148154738 . - . Parent=gene80 chr1 ENCODE exon 148154991 148155103 . - . Parent=gene80 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene80 chr1 ENCODE exon 148158187 148158256 . - . Parent=gene80 ### chr1 ENCODE gene 148149858 148158255 . - . ID=gene81;Name=RP11-126K1.7-002;name2=SELENBP1 chr1 ENCODE exon 148149858 148150254 . - . Parent=gene81 chr1 ENCODE exon 148150475 148150593 . - . Parent=gene81 chr1 ENCODE exon 148150738 148150830 . - . Parent=gene81 chr1 ENCODE exon 148151112 148151233 . - . Parent=gene81 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene81 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene81 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene81 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene81 chr1 ENCODE exon 148154553 148155318 . - . Parent=gene81 chr1 ENCODE exon 148158187 148158255 . - . Parent=gene81 ### chr1 ENCODE gene 148149861 148158240 . - . ID=gene82;Name=RP11-126K1.7-016;name2=SELENBP1 chr1 ENCODE exon 148149861 148150254 . - . Parent=gene82 chr1 ENCODE exon 148150475 148150593 . - . Parent=gene82 chr1 ENCODE exon 148150738 148150830 . - . Parent=gene82 chr1 ENCODE exon 148151112 148151233 . - . Parent=gene82 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene82 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene82 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene82 chr1 ENCODE exon 148154549 148154738 . - . Parent=gene82 chr1 ENCODE exon 148154991 148155103 . - . Parent=gene82 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene82 chr1 ENCODE exon 148158187 148158240 . - . Parent=gene82 ### chr1 ENCODE gene 148149870 148158256 . - . ID=gene83;Name=RP11-126K1.7-012;name2=SELENBP1 chr1 ENCODE exon 148149870 148150254 . - . Parent=gene83 chr1 ENCODE exon 148150475 148150593 . - . Parent=gene83 chr1 ENCODE exon 148150738 148150787 . - . Parent=gene83 chr1 ENCODE exon 148151155 148151233 . - . Parent=gene83 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene83 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene83 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene83 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene83 chr1 ENCODE exon 148154549 148154738 . - . Parent=gene83 chr1 ENCODE exon 148154991 148155103 . - . Parent=gene83 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene83 chr1 ENCODE exon 148158187 148158256 . - . Parent=gene83 ### chr1 ENCODE gene 148149888 148158241 . - . ID=gene84;Name=RP11-126K1.7-015;name2=SELENBP1 chr1 ENCODE exon 148149888 148150254 . - . Parent=gene84 chr1 ENCODE exon 148150475 148150593 . - . Parent=gene84 chr1 ENCODE exon 148150738 148150830 . - . Parent=gene84 chr1 ENCODE exon 148151112 148151233 . - . Parent=gene84 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene84 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene84 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene84 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene84 chr1 ENCODE exon 148154549 148154738 . - . Parent=gene84 chr1 ENCODE exon 148154991 148155103 . - . Parent=gene84 chr1 ENCODE exon 148155262 148155527 . - . Parent=gene84 chr1 ENCODE exon 148158187 148158241 . - . Parent=gene84 ### chr1 ENCODE gene 148149894 148158243 . - . ID=gene85;Name=RP11-126K1.7-014;name2=SELENBP1 chr1 ENCODE exon 148149894 148150254 . - . Parent=gene85 chr1 ENCODE exon 148150475 148150593 . - . Parent=gene85 chr1 ENCODE exon 148150738 148150830 . - . Parent=gene85 chr1 ENCODE exon 148151112 148151233 . - . Parent=gene85 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene85 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene85 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene85 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene85 chr1 ENCODE exon 148154553 148155103 . - . Parent=gene85 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene85 chr1 ENCODE exon 148158187 148158243 . - . Parent=gene85 ### chr1 ENCODE gene 148151122 148155390 . - . ID=gene86;Name=RP11-126K1.7-005;name2=SELENBP1 chr1 ENCODE exon 148151122 148151233 . - . Parent=gene86 chr1 ENCODE CDS 148151122 148151233 . - 0 Parent=gene86 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene86 chr1 ENCODE CDS 148151317 148151395 . - 1 Parent=gene86 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene86 chr1 ENCODE CDS 148151824 148152002 . - 0 Parent=gene86 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene86 chr1 ENCODE CDS 148152271 148152453 . - 0 Parent=gene86 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene86 chr1 ENCODE CDS 148153748 148153868 . - 1 Parent=gene86 chr1 ENCODE exon 148154991 148155103 . - . Parent=gene86 chr1 ENCODE CDS 148154991 148155103 . - 0 Parent=gene86 chr1 ENCODE exon 148155262 148155390 . - . Parent=gene86 chr1 ENCODE CDS 148155262 148155390 . - 0 Parent=gene86 ### chr1 ENCODE gene 148151221 148158232 . - . ID=gene87;Name=RP11-126K1.7-019;name2=SELENBP1 chr1 ENCODE exon 148151221 148151233 . - . Parent=gene87 chr1 ENCODE CDS 148151221 148151233 . - 2 Parent=gene87 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene87 chr1 ENCODE CDS 148151317 148151395 . - 0 Parent=gene87 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene87 chr1 ENCODE CDS 148151824 148152002 . - 2 Parent=gene87 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene87 chr1 ENCODE CDS 148152271 148152453 . - 2 Parent=gene87 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene87 chr1 ENCODE CDS 148153748 148153868 . - 0 Parent=gene87 chr1 ENCODE exon 148154553 148154738 . - . Parent=gene87 chr1 ENCODE CDS 148154553 148154738 . - 0 Parent=gene87 chr1 ENCODE exon 148154991 148155055 . - . Parent=gene87 chr1 ENCODE CDS 148154991 148155055 . - 2 Parent=gene87 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene87 chr1 ENCODE CDS 148155262 148155318 . - 2 Parent=gene87 chr1 ENCODE CDS 148158187 148158190 . - 0 Parent=gene87 chr1 ENCODE exon 148158187 148158232 . - . Parent=gene87 ### chr1 ENCODE gene 148151317 148158253 . - . ID=gene88;Name=RP11-126K1.7-006;name2=SELENBP1 chr1 ENCODE exon 148151317 148151395 . - . Parent=gene88 chr1 ENCODE CDS 148151317 148151395 . - 0 Parent=gene88 chr1 ENCODE exon 148151824 148152002 . - . Parent=gene88 chr1 ENCODE CDS 148151824 148152002 . - 2 Parent=gene88 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene88 chr1 ENCODE CDS 148152271 148152453 . - 2 Parent=gene88 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene88 chr1 ENCODE CDS 148153748 148153868 . - 0 Parent=gene88 chr1 ENCODE exon 148154553 148154738 . - . Parent=gene88 chr1 ENCODE CDS 148154553 148154738 . - 0 Parent=gene88 chr1 ENCODE exon 148154991 148155103 . - . Parent=gene88 chr1 ENCODE CDS 148154991 148155103 . - 2 Parent=gene88 chr1 ENCODE CDS 148155262 148155448 . - 0 Parent=gene88 chr1 ENCODE exon 148155262 148155527 . - . Parent=gene88 chr1 ENCODE exon 148158187 148158253 . - . Parent=gene88 ### chr1 ENCODE gene 148151990 148158254 . - . ID=gene89;name2=SELENBP1;Name=RP11-126K1.7-007 chr1 ENCODE exon 148151990 148152002 . - . Parent=gene89 chr1 ENCODE exon 148152271 148152453 . - . Parent=gene89 chr1 ENCODE exon 148152565 148152724 . - . Parent=gene89 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene89 chr1 ENCODE exon 148154553 148154738 . - . Parent=gene89 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene89 chr1 ENCODE exon 148158187 148158254 . - . Parent=gene89 ### chr1 ENCODE gene 148152230 148153865 . - . ID=gene90;Name=RP11-126K1.7-004;name2=SELENBP1 chr1 ENCODE exon 148152230 148152453 . - . Parent=gene90 chr1 ENCODE exon 148153748 148153865 . - . Parent=gene90 ### chr1 ENCODE gene 148152437 148158254 . - . ID=gene91;Name=RP11-126K1.7-008;name2=SELENBP1 chr1 ENCODE exon 148152437 148152453 . - . Parent=gene91 chr1 ENCODE exon 148152565 148152724 . - . Parent=gene91 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene91 chr1 ENCODE exon 148154553 148154738 . - . Parent=gene91 chr1 ENCODE exon 148154991 148155103 . - . Parent=gene91 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene91 chr1 ENCODE exon 148158187 148158254 . - . Parent=gene91 ### chr1 ENCODE gene 148152757 148158256 . - . ID=gene92;Name=RP11-126K1.7-010;name2=SELENBP1 chr1 ENCODE exon 148152757 148152890 . - . Parent=gene92 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene92 chr1 ENCODE exon 148154553 148155103 . - . Parent=gene92 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene92 chr1 ENCODE exon 148158187 148158256 . - . Parent=gene92 ### chr1 ENCODE gene 148152770 148158240 . - . ID=gene93;Name=RP11-126K1.7-009;name2=SELENBP1 chr1 ENCODE exon 148152770 148152890 . - . Parent=gene93 chr1 ENCODE CDS 148152770 148152890 . - 2 Parent=gene93 chr1 ENCODE exon 148153748 148153868 . - . Parent=gene93 chr1 ENCODE CDS 148153748 148153868 . - 0 Parent=gene93 chr1 ENCODE exon 148154553 148154738 . - . Parent=gene93 chr1 ENCODE CDS 148154553 148154738 . - 0 Parent=gene93 chr1 ENCODE exon 148154991 148155103 . - . Parent=gene93 chr1 ENCODE CDS 148154991 148155103 . - 2 Parent=gene93 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene93 chr1 ENCODE CDS 148155262 148155318 . - 2 Parent=gene93 chr1 ENCODE CDS 148158187 148158190 . - 0 Parent=gene93 chr1 ENCODE exon 148158187 148158240 . - . Parent=gene93 ### chr1 ENCODE gene 148154617 148155835 . - . ID=gene94;Name=RP11-126K1.7-018;name2=SELENBP1 chr1 ENCODE exon 148154617 148154738 . - . Parent=gene94 chr1 ENCODE CDS 148154617 148154738 . - 2 Parent=gene94 chr1 ENCODE exon 148154991 148155103 . - . Parent=gene94 chr1 ENCODE CDS 148154991 148155103 . - 1 Parent=gene94 chr1 ENCODE exon 148155262 148155318 . - . Parent=gene94 chr1 ENCODE CDS 148155262 148155318 . - 1 Parent=gene94 chr1 ENCODE exon 148155750 148155835 . - . Parent=gene94 chr1 ENCODE CDS 148155750 148155835 . - 0 Parent=gene94 ### chr1 ENCODE gene 148185083 148187493 . + . ID=gene95;name2=PSMB4;Name=RP11-806J18.1-001 chr1 ENCODE exon 148185083 148185276 . + . Parent=gene95 chr1 ENCODE CDS 148185137 148185276 . + 0 Parent=gene95 chr1 ENCODE exon 148185530 148185736 . + . Parent=gene95 chr1 ENCODE CDS 148185530 148185736 . + 1 Parent=gene95 chr1 ENCODE exon 148185991 148186137 . + . Parent=gene95 chr1 ENCODE CDS 148185991 148186137 . + 1 Parent=gene95 chr1 ENCODE exon 148186313 148186394 . + . Parent=gene95 chr1 ENCODE CDS 148186313 148186394 . + 1 Parent=gene95 chr1 ENCODE exon 148186788 148186904 . + . Parent=gene95 chr1 ENCODE CDS 148186788 148186904 . + 0 Parent=gene95 chr1 ENCODE exon 148187091 148187179 . + . Parent=gene95 chr1 ENCODE CDS 148187091 148187179 . + 0 Parent=gene95 chr1 ENCODE CDS 148187366 148187378 . + 1 Parent=gene95 chr1 ENCODE exon 148187366 148187493 . + . Parent=gene95 ### chr1 ENCODE gene 148185109 148186601 . + . ID=gene96;Name=RP11-806J18.1-002;name2=PSMB4 chr1 ENCODE exon 148185109 148185276 . + . Parent=gene96 chr1 ENCODE exon 148185530 148185736 . + . Parent=gene96 chr1 ENCODE exon 148185991 148186601 . + . Parent=gene96 ### chr1 ENCODE gene 148185128 148186620 . + . ID=gene97;Name=RP11-806J18.1-004;name2=PSMB4 chr1 ENCODE exon 148185128 148185276 . + . Parent=gene97 chr1 ENCODE exon 148185530 148185736 . + . Parent=gene97 chr1 ENCODE exon 148185991 148186137 . + . Parent=gene97 chr1 ENCODE exon 148186313 148186620 . + . Parent=gene97 ### chr1 ENCODE gene 148185136 148187455 . + . ID=gene98;Name=RP11-806J18.1-003;name2=PSMB4 chr1 ENCODE exon 148185136 148185276 . + . Parent=gene98 chr1 ENCODE exon 148185530 148187455 . + . Parent=gene98 ### chr1 ENCODE gene 148185139 148187483 . + . ID=gene99;Name=RP11-806J18.1-007;name2=PSMB4 chr1 ENCODE exon 148185139 148185276 . + . Parent=gene99 chr1 ENCODE exon 148185530 148185734 . + . Parent=gene99 chr1 ENCODE exon 148185991 148186904 . + . Parent=gene99 chr1 ENCODE exon 148187091 148187483 . + . Parent=gene99 ### chr1 ENCODE gene 148185723 148187485 . + . ID=gene100;Name=RP11-806J18.1-005;name2=PSMB4 chr1 ENCODE exon 148185723 148185736 . + . Parent=gene100 chr1 ENCODE exon 148185991 148186137 . + . Parent=gene100 chr1 ENCODE exon 148186313 148186394 . + . Parent=gene100 chr1 ENCODE exon 148186788 148187179 . + . Parent=gene100 chr1 ENCODE exon 148187366 148187485 . + . Parent=gene100 ### chr1 ENCODE gene 148186450 148187486 . + . ID=gene101;Name=RP11-806J18.1-006;name2=PSMB4 chr1 ENCODE exon 148186450 148186904 . + . Parent=gene101 chr1 ENCODE exon 148187091 148187179 . + . Parent=gene101 chr1 ENCODE exon 148187366 148187486 . + . Parent=gene101 ### chr1 ENCODE gene 148188273 148227753 . - . ID=gene102;Name=RP11-806J18.2-002;name2=POGZ chr1 ENCODE exon 148188273 148192013 . - . Parent=gene102 chr1 ENCODE CDS 148190351 148192013 . - 1 Parent=gene102 chr1 ENCODE exon 148192156 148192180 . - . Parent=gene102 chr1 ENCODE CDS 148192156 148192180 . - 2 Parent=gene102 chr1 ENCODE exon 148192460 148192572 . - . Parent=gene102 chr1 ENCODE CDS 148192460 148192572 . - 1 Parent=gene102 chr1 ENCODE exon 148192784 148192840 . - . Parent=gene102 chr1 ENCODE CDS 148192784 148192840 . - 1 Parent=gene102 chr1 ENCODE exon 148193649 148193789 . - . Parent=gene102 chr1 ENCODE CDS 148193649 148193789 . - 1 Parent=gene102 chr1 ENCODE exon 148193958 148194130 . - . Parent=gene102 chr1 ENCODE CDS 148193958 148194130 . - 0 Parent=gene102 chr1 ENCODE exon 148194243 148194377 . - . Parent=gene102 chr1 ENCODE CDS 148194243 148194377 . - 0 Parent=gene102 chr1 ENCODE exon 148197174 148197320 . - . Parent=gene102 chr1 ENCODE CDS 148197174 148197320 . - 0 Parent=gene102 chr1 ENCODE exon 148197845 148197945 . - . Parent=gene102 chr1 ENCODE CDS 148197845 148197945 . - 2 Parent=gene102 chr1 ENCODE exon 148208946 148209100 . - . Parent=gene102 chr1 ENCODE CDS 148208946 148209100 . - 1 Parent=gene102 chr1 ENCODE exon 148209498 148209835 . - . Parent=gene102 chr1 ENCODE CDS 148209498 148209835 . - 0 Parent=gene102 chr1 ENCODE exon 148210504 148210610 . - . Parent=gene102 chr1 ENCODE CDS 148210504 148210610 . - 2 Parent=gene102 chr1 ENCODE exon 148213372 148213590 . - . Parent=gene102 chr1 ENCODE CDS 148213372 148213590 . - 2 Parent=gene102 chr1 ENCODE exon 148213672 148213962 . - . Parent=gene102 chr1 ENCODE CDS 148213672 148213962 . - 2 Parent=gene102 chr1 ENCODE exon 148215152 148215260 . - . Parent=gene102 chr1 ENCODE CDS 148215152 148215260 . - 0 Parent=gene102 chr1 ENCODE exon 148216215 148216390 . - . Parent=gene102 chr1 ENCODE CDS 148216215 148216390 . - 2 Parent=gene102 chr1 ENCODE exon 148227630 148227753 . - . Parent=gene102 chr1 ENCODE CDS 148227630 148227753 . - 0 Parent=gene102 ### chr1 ENCODE gene 148188273 148244727 . - . ID=gene103;Name=RP11-806J18.2-004;name2=POGZ chr1 ENCODE exon 148188273 148192013 . - . Parent=gene103 chr1 ENCODE exon 148192156 148192572 . - . Parent=gene103 chr1 ENCODE exon 148192784 148192840 . - . Parent=gene103 chr1 ENCODE exon 148193649 148193789 . - . Parent=gene103 chr1 ENCODE exon 148193958 148194130 . - . Parent=gene103 chr1 ENCODE exon 148194243 148194377 . - . Parent=gene103 chr1 ENCODE exon 148197174 148197320 . - . Parent=gene103 chr1 ENCODE exon 148197845 148197945 . - . Parent=gene103 chr1 ENCODE exon 148208946 148209100 . - . Parent=gene103 chr1 ENCODE exon 148209498 148209835 . - . Parent=gene103 chr1 ENCODE exon 148210504 148210610 . - . Parent=gene103 chr1 ENCODE exon 148213372 148213590 . - . Parent=gene103 chr1 ENCODE exon 148213672 148213962 . - . Parent=gene103 chr1 ENCODE exon 148215152 148215260 . - . Parent=gene103 chr1 ENCODE exon 148216215 148216390 . - . Parent=gene103 chr1 ENCODE exon 148227630 148227754 . - . Parent=gene103 chr1 ENCODE exon 148244701 148244727 . - . Parent=gene103 ### chr1 ENCODE gene 148188273 148245014 . - . ID=gene104;Name=RP11-806J18.2-001;name2=POGZ chr1 ENCODE exon 148188273 148192013 . - . Parent=gene104 chr1 ENCODE CDS 148190351 148192013 . - 1 Parent=gene104 chr1 ENCODE exon 148192156 148192180 . - . Parent=gene104 chr1 ENCODE CDS 148192156 148192180 . - 2 Parent=gene104 chr1 ENCODE exon 148192460 148192572 . - . Parent=gene104 chr1 ENCODE CDS 148192460 148192572 . - 1 Parent=gene104 chr1 ENCODE exon 148192784 148192840 . - . Parent=gene104 chr1 ENCODE CDS 148192784 148192840 . - 1 Parent=gene104 chr1 ENCODE exon 148193649 148193789 . - . Parent=gene104 chr1 ENCODE CDS 148193649 148193789 . - 1 Parent=gene104 chr1 ENCODE exon 148193958 148194130 . - . Parent=gene104 chr1 ENCODE CDS 148193958 148194130 . - 0 Parent=gene104 chr1 ENCODE exon 148194243 148194377 . - . Parent=gene104 chr1 ENCODE CDS 148194243 148194377 . - 0 Parent=gene104 chr1 ENCODE exon 148197174 148197320 . - . Parent=gene104 chr1 ENCODE CDS 148197174 148197320 . - 0 Parent=gene104 chr1 ENCODE exon 148197845 148197945 . - . Parent=gene104 chr1 ENCODE CDS 148197845 148197945 . - 2 Parent=gene104 chr1 ENCODE exon 148208946 148209100 . - . Parent=gene104 chr1 ENCODE CDS 148208946 148209100 . - 1 Parent=gene104 chr1 ENCODE exon 148209498 148209835 . - . Parent=gene104 chr1 ENCODE CDS 148209498 148209835 . - 0 Parent=gene104 chr1 ENCODE exon 148210504 148210610 . - . Parent=gene104 chr1 ENCODE CDS 148210504 148210610 . - 2 Parent=gene104 chr1 ENCODE exon 148213372 148213590 . - . Parent=gene104 chr1 ENCODE CDS 148213372 148213590 . - 2 Parent=gene104 chr1 ENCODE exon 148213672 148213962 . - . Parent=gene104 chr1 ENCODE CDS 148213672 148213962 . - 2 Parent=gene104 chr1 ENCODE exon 148215152 148215260 . - . Parent=gene104 chr1 ENCODE CDS 148215152 148215260 . - 0 Parent=gene104 chr1 ENCODE exon 148216215 148216390 . - . Parent=gene104 chr1 ENCODE CDS 148216215 148216390 . - 2 Parent=gene104 chr1 ENCODE exon 148226477 148226635 . - . Parent=gene104 chr1 ENCODE CDS 148226477 148226635 . - 2 Parent=gene104 chr1 ENCODE CDS 148227630 148227753 . - 0 Parent=gene104 chr1 ENCODE exon 148227630 148227754 . - . Parent=gene104 chr1 ENCODE exon 148244701 148245014 . - . Parent=gene104 ### chr1 ENCODE gene 148188274 148244728 . - . ID=gene105;Name=RP11-806J18.2-003;name2=POGZ chr1 ENCODE exon 148188274 148192013 . - . Parent=gene105 chr1 ENCODE CDS 148190351 148192013 . - 1 Parent=gene105 chr1 ENCODE exon 148192156 148192180 . - . Parent=gene105 chr1 ENCODE CDS 148192156 148192180 . - 2 Parent=gene105 chr1 ENCODE exon 148192460 148192572 . - . Parent=gene105 chr1 ENCODE CDS 148192460 148192572 . - 1 Parent=gene105 chr1 ENCODE exon 148192784 148192840 . - . Parent=gene105 chr1 ENCODE CDS 148192784 148192840 . - 1 Parent=gene105 chr1 ENCODE exon 148193649 148193789 . - . Parent=gene105 chr1 ENCODE CDS 148193649 148193789 . - 1 Parent=gene105 chr1 ENCODE exon 148193958 148194130 . - . Parent=gene105 chr1 ENCODE CDS 148193958 148194130 . - 0 Parent=gene105 chr1 ENCODE exon 148194243 148194377 . - . Parent=gene105 chr1 ENCODE CDS 148194243 148194377 . - 0 Parent=gene105 chr1 ENCODE exon 148197174 148197320 . - . Parent=gene105 chr1 ENCODE CDS 148197174 148197320 . - 0 Parent=gene105 chr1 ENCODE exon 148197845 148197945 . - . Parent=gene105 chr1 ENCODE CDS 148197845 148197945 . - 2 Parent=gene105 chr1 ENCODE exon 148208946 148209100 . - . Parent=gene105 chr1 ENCODE CDS 148208946 148209100 . - 1 Parent=gene105 chr1 ENCODE exon 148209498 148209835 . - . Parent=gene105 chr1 ENCODE CDS 148209498 148209835 . - 0 Parent=gene105 chr1 ENCODE exon 148210504 148210610 . - . Parent=gene105 chr1 ENCODE CDS 148210504 148210610 . - 2 Parent=gene105 chr1 ENCODE exon 148213372 148213590 . - . Parent=gene105 chr1 ENCODE CDS 148213372 148213590 . - 2 Parent=gene105 chr1 ENCODE exon 148213672 148213962 . - . Parent=gene105 chr1 ENCODE CDS 148213672 148213962 . - 2 Parent=gene105 chr1 ENCODE exon 148226477 148226635 . - . Parent=gene105 chr1 ENCODE CDS 148226477 148226635 . - 2 Parent=gene105 chr1 ENCODE CDS 148227630 148227753 . - 0 Parent=gene105 chr1 ENCODE exon 148227630 148227754 . - . Parent=gene105 chr1 ENCODE exon 148244701 148244728 . - . Parent=gene105 ### chr1 ENCODE gene 148190351 148244728 . - . ID=gene106;Name=RP11-806J18.2-011;name2=POGZ chr1 ENCODE exon 148190351 148192013 . - . Parent=gene106 chr1 ENCODE CDS 148190351 148192013 . - 1 Parent=gene106 chr1 ENCODE exon 148192156 148192180 . - . Parent=gene106 chr1 ENCODE CDS 148192156 148192180 . - 2 Parent=gene106 chr1 ENCODE exon 148192460 148192572 . - . Parent=gene106 chr1 ENCODE CDS 148192460 148192572 . - 1 Parent=gene106 chr1 ENCODE exon 148192784 148192840 . - . Parent=gene106 chr1 ENCODE CDS 148192784 148192840 . - 1 Parent=gene106 chr1 ENCODE exon 148193649 148193789 . - . Parent=gene106 chr1 ENCODE CDS 148193649 148193789 . - 1 Parent=gene106 chr1 ENCODE exon 148193958 148194130 . - . Parent=gene106 chr1 ENCODE CDS 148193958 148194130 . - 0 Parent=gene106 chr1 ENCODE exon 148194243 148194377 . - . Parent=gene106 chr1 ENCODE CDS 148194243 148194377 . - 0 Parent=gene106 chr1 ENCODE exon 148197174 148197347 . - . Parent=gene106 chr1 ENCODE CDS 148197174 148197347 . - 0 Parent=gene106 chr1 ENCODE exon 148197845 148197945 . - . Parent=gene106 chr1 ENCODE CDS 148197845 148197945 . - 2 Parent=gene106 chr1 ENCODE exon 148208946 148209100 . - . Parent=gene106 chr1 ENCODE CDS 148208946 148209100 . - 1 Parent=gene106 chr1 ENCODE exon 148209498 148209835 . - . Parent=gene106 chr1 ENCODE CDS 148209498 148209835 . - 0 Parent=gene106 chr1 ENCODE exon 148210504 148210610 . - . Parent=gene106 chr1 ENCODE CDS 148210504 148210610 . - 2 Parent=gene106 chr1 ENCODE exon 148213372 148213590 . - . Parent=gene106 chr1 ENCODE CDS 148213372 148213590 . - 2 Parent=gene106 chr1 ENCODE exon 148213672 148213962 . - . Parent=gene106 chr1 ENCODE CDS 148213672 148213962 . - 2 Parent=gene106 chr1 ENCODE exon 148215152 148215260 . - . Parent=gene106 chr1 ENCODE CDS 148215152 148215260 . - 0 Parent=gene106 chr1 ENCODE exon 148216215 148216390 . - . Parent=gene106 chr1 ENCODE CDS 148216215 148216390 . - 2 Parent=gene106 chr1 ENCODE CDS 148227630 148227753 . - 0 Parent=gene106 chr1 ENCODE exon 148227630 148227754 . - . Parent=gene106 chr1 ENCODE exon 148244701 148244728 . - . Parent=gene106 ### chr1 ENCODE gene 148192448 148193745 . - . ID=gene107;Name=RP11-806J18.2-006;name2=POGZ chr1 ENCODE exon 148192448 148192840 . - . Parent=gene107 chr1 ENCODE exon 148193649 148193745 . - . Parent=gene107 ### chr1 ENCODE gene 148192787 148194102 . - . ID=gene108;Name=RP11-806J18.2-015;name2=POGZ chr1 ENCODE exon 148192787 148192840 . - . Parent=gene108 chr1 ENCODE exon 148193649 148194102 . - . Parent=gene108 ### chr1 ENCODE gene 148209048 148210012 . - . ID=gene109;Name=RP11-806J18.2-014;name2=POGZ chr1 ENCODE exon 148209048 148209100 . - . Parent=gene109 chr1 ENCODE exon 148209498 148210012 . - . Parent=gene109 ### chr1 ENCODE gene 148209071 148213529 . - . ID=gene110;Name=RP11-806J18.2-007;name2=POGZ chr1 ENCODE exon 148209071 148209100 . - . Parent=gene110 chr1 ENCODE exon 148209498 148209835 . - . Parent=gene110 chr1 ENCODE exon 148213372 148213529 . - . Parent=gene110 ### chr1 ENCODE gene 148209559 148210843 . - . ID=gene111;Name=RP11-806J18.2-008;name2=POGZ chr1 ENCODE exon 148209559 148209835 . - . Parent=gene111 chr1 ENCODE exon 148210504 148210843 . - . Parent=gene111 ### chr1 ENCODE gene 148211738 148244728 . - . ID=gene112;Name=RP11-806J18.2-005;name2=POGZ chr1 ENCODE exon 148211738 148213590 . - . Parent=gene112 chr1 ENCODE exon 148213672 148213962 . - . Parent=gene112 chr1 ENCODE exon 148215152 148215260 . - . Parent=gene112 chr1 ENCODE exon 148216215 148216390 . - . Parent=gene112 chr1 ENCODE exon 148226477 148226635 . - . Parent=gene112 chr1 ENCODE exon 148227630 148227754 . - . Parent=gene112 chr1 ENCODE exon 148244701 148244728 . - . Parent=gene112 ### chr1 ENCODE gene 148214949 148244736 . - . ID=gene113;Name=RP11-806J18.2-012;name2=POGZ chr1 ENCODE exon 148214949 148215260 . - . Parent=gene113 chr1 ENCODE exon 148216215 148216390 . - . Parent=gene113 chr1 ENCODE exon 148226477 148226635 . - . Parent=gene113 chr1 ENCODE exon 148227630 148227754 . - . Parent=gene113 chr1 ENCODE exon 148244701 148244736 . - . Parent=gene113 ### chr1 ENCODE gene 148216263 148240746 . - . ID=gene114;Name=RP11-806J18.2-010;name2=POGZ chr1 ENCODE exon 148216263 148216390 . - . Parent=gene114 chr1 ENCODE CDS 148216263 148216390 . - 2 Parent=gene114 chr1 ENCODE CDS 148227630 148227753 . - 0 Parent=gene114 chr1 ENCODE exon 148227630 148227754 . - . Parent=gene114 chr1 ENCODE exon 148240511 148240746 . - . Parent=gene114 ### chr1 ENCODE gene 148226392 148244728 . - . ID=gene115;Name=RP11-806J18.2-013;name2=POGZ chr1 ENCODE exon 148226392 148226635 . - . Parent=gene115 chr1 ENCODE exon 148227630 148227754 . - . Parent=gene115 chr1 ENCODE exon 148244701 148244728 . - . Parent=gene115 ### chr1 ENCODE gene 148227730 148228027 . - . ID=gene116;Name=RP11-806J18.2-009;name2=POGZ chr1 ENCODE CDS 148227730 148227753 . - 0 Parent=gene116 chr1 ENCODE exon 148227730 148227754 . - . Parent=gene116 chr1 ENCODE exon 148227854 148228027 . - . Parent=gene116 ### chr1 ENCODE gene 148296059 148304578 . + . ID=gene117;name2=CGN;Name=RP11-74C1.3-005 chr1 ENCODE exon 148296059 148296098 . + . Parent=gene117 chr1 ENCODE exon 148304055 148304578 . + . Parent=gene117 chr1 ENCODE CDS 148304069 148304578 . + 0 Parent=gene117 ### chr1 ENCODE gene 148296485 148304578 . + . ID=gene118;Name=RP11-74C1.3-006;name2=CGN chr1 ENCODE exon 148296485 148296549 . + . Parent=gene118 chr1 ENCODE exon 148304055 148304578 . + . Parent=gene118 chr1 ENCODE CDS 148304069 148304578 . + 0 Parent=gene118 ### chr1 ENCODE gene 148296936 148304941 . + . ID=gene119;Name=RP11-74C1.3-007;name2=CGN chr1 ENCODE exon 148296936 148297068 . + . Parent=gene119 chr1 ENCODE exon 148303084 148303202 . + . Parent=gene119 chr1 ENCODE exon 148304055 148304941 . + . Parent=gene119 chr1 ENCODE CDS 148304069 148304941 . + 0 Parent=gene119 ### chr1 ENCODE gene 148296946 148324241 . + . ID=gene120;Name=RP11-74C1.3-001;name2=CGN chr1 ENCODE exon 148296946 148297064 . + . Parent=gene120 chr1 ENCODE exon 148304055 148304941 . + . Parent=gene120 chr1 ENCODE CDS 148304069 148304941 . + 0 Parent=gene120 chr1 ENCODE exon 148305715 148305815 . + . Parent=gene120 chr1 ENCODE CDS 148305715 148305815 . + 0 Parent=gene120 chr1 ENCODE exon 148305963 148306032 . + . Parent=gene120 chr1 ENCODE CDS 148305963 148306032 . + 1 Parent=gene120 chr1 ENCODE exon 148306145 148306240 . + . Parent=gene120 chr1 ENCODE CDS 148306145 148306240 . + 0 Parent=gene120 chr1 ENCODE exon 148308983 148309110 . + . Parent=gene120 chr1 ENCODE CDS 148308983 148309110 . + 0 Parent=gene120 chr1 ENCODE exon 148309775 148309907 . + . Parent=gene120 chr1 ENCODE CDS 148309775 148309907 . + 1 Parent=gene120 chr1 ENCODE exon 148310223 148310435 . + . Parent=gene120 chr1 ENCODE CDS 148310223 148310435 . + 0 Parent=gene120 chr1 ENCODE exon 148311191 148311339 . + . Parent=gene120 chr1 ENCODE CDS 148311191 148311339 . + 0 Parent=gene120 chr1 ENCODE exon 148312524 148312656 . + . Parent=gene120 chr1 ENCODE CDS 148312524 148312656 . + 1 Parent=gene120 chr1 ENCODE exon 148314899 148315108 . + . Parent=gene120 chr1 ENCODE CDS 148314899 148315108 . + 0 Parent=gene120 chr1 ENCODE exon 148315458 148315664 . + . Parent=gene120 chr1 ENCODE CDS 148315458 148315664 . + 0 Parent=gene120 chr1 ENCODE exon 148316038 148316295 . + . Parent=gene120 chr1 ENCODE CDS 148316038 148316295 . + 0 Parent=gene120 chr1 ENCODE exon 148317951 148318121 . + . Parent=gene120 chr1 ENCODE CDS 148317951 148318121 . + 0 Parent=gene120 chr1 ENCODE exon 148319524 148319685 . + . Parent=gene120 chr1 ENCODE CDS 148319524 148319685 . + 0 Parent=gene120 chr1 ENCODE exon 148320591 148320680 . + . Parent=gene120 chr1 ENCODE CDS 148320591 148320680 . + 0 Parent=gene120 chr1 ENCODE exon 148321149 148321232 . + . Parent=gene120 chr1 ENCODE CDS 148321149 148321232 . + 0 Parent=gene120 chr1 ENCODE exon 148321329 148321447 . + . Parent=gene120 chr1 ENCODE CDS 148321329 148321447 . + 0 Parent=gene120 chr1 ENCODE exon 148321786 148321894 . + . Parent=gene120 chr1 ENCODE CDS 148321786 148321894 . + 1 Parent=gene120 chr1 ENCODE exon 148322279 148322442 . + . Parent=gene120 chr1 ENCODE CDS 148322279 148322442 . + 0 Parent=gene120 chr1 ENCODE CDS 148322754 148322895 . + 1 Parent=gene120 chr1 ENCODE exon 148322754 148324241 . + . Parent=gene120 ### chr1 ENCODE gene 148311143 148314941 . + . ID=gene121;Name=RP11-74C1.3-003;name2=CGN chr1 ENCODE exon 148311143 148311339 . + . Parent=gene121 chr1 ENCODE exon 148312524 148312656 . + . Parent=gene121 chr1 ENCODE exon 148314899 148314941 . + . Parent=gene121 ### chr1 ENCODE gene 148319689 148324241 . + . ID=gene122;name2=CGN;Name=RP11-74C1.3-002 chr1 ENCODE exon 148319689 148320680 . + . Parent=gene122 chr1 ENCODE exon 148321149 148321232 . + . Parent=gene122 chr1 ENCODE exon 148321329 148321447 . + . Parent=gene122 chr1 ENCODE exon 148321786 148321894 . + . Parent=gene122 chr1 ENCODE exon 148322279 148322442 . + . Parent=gene122 chr1 ENCODE exon 148322754 148324241 . + . Parent=gene122 ### chr1 ENCODE gene 148321427 148323051 . + . ID=gene123;Name=RP11-74C1.3-004;name2=CGN chr1 ENCODE exon 148321427 148321894 . + . Parent=gene123 chr1 ENCODE exon 148322279 148322442 . + . Parent=gene123 chr1 ENCODE exon 148322754 148323051 . + . Parent=gene123 ### chr1 ENCODE gene 148325854 148369132 . + . ID=gene124;Name=RP11-74C1.1-010;name2=TUFT1 chr1 ENCODE exon 148325854 148325975 . + . Parent=gene124 chr1 ENCODE CDS 148325916 148325975 . + 0 Parent=gene124 chr1 ENCODE exon 148348134 148348235 . + . Parent=gene124 chr1 ENCODE CDS 148348134 148348235 . + 0 Parent=gene124 chr1 ENCODE exon 148349453 148349539 . + . Parent=gene124 chr1 ENCODE CDS 148349453 148349539 . + 0 Parent=gene124 chr1 ENCODE exon 148351712 148351777 . + . Parent=gene124 chr1 ENCODE CDS 148351712 148351777 . + 0 Parent=gene124 chr1 ENCODE exon 148355206 148355319 . + . Parent=gene124 chr1 ENCODE CDS 148355206 148355319 . + 0 Parent=gene124 chr1 ENCODE exon 148359819 148359947 . + . Parent=gene124 chr1 ENCODE CDS 148359819 148359947 . + 0 Parent=gene124 chr1 ENCODE exon 148360460 148360554 . + . Parent=gene124 chr1 ENCODE CDS 148360460 148360554 . + 0 Parent=gene124 chr1 ENCODE exon 148364270 148364375 . + . Parent=gene124 chr1 ENCODE CDS 148364270 148364375 . + 1 Parent=gene124 chr1 ENCODE exon 148365198 148365281 . + . Parent=gene124 chr1 ENCODE CDS 148365198 148365281 . + 0 Parent=gene124 chr1 ENCODE exon 148366491 148366591 . + . Parent=gene124 chr1 ENCODE CDS 148366491 148366591 . + 0 Parent=gene124 chr1 ENCODE CDS 148367193 148367256 . + 1 Parent=gene124 chr1 ENCODE exon 148367193 148369132 . + . Parent=gene124 ### chr1 ENCODE gene 148325854 148369132 . + . ID=gene125;name2=TUFT1;Name=RP11-74C1.1-006 chr1 ENCODE exon 148325854 148325975 . + . Parent=gene125 chr1 ENCODE CDS 148325916 148325975 . + 0 Parent=gene125 chr1 ENCODE exon 148347640 148347714 . + . Parent=gene125 chr1 ENCODE CDS 148347640 148347714 . + 0 Parent=gene125 chr1 ENCODE exon 148348134 148348235 . + . Parent=gene125 chr1 ENCODE CDS 148348134 148348235 . + 0 Parent=gene125 chr1 ENCODE exon 148349453 148349539 . + . Parent=gene125 chr1 ENCODE CDS 148349453 148349539 . + 0 Parent=gene125 chr1 ENCODE exon 148350074 148350163 . + . Parent=gene125 chr1 ENCODE CDS 148350074 148350163 . + 0 Parent=gene125 chr1 ENCODE exon 148351712 148351777 . + . Parent=gene125 chr1 ENCODE CDS 148351712 148351777 . + 0 Parent=gene125 chr1 ENCODE exon 148355206 148355319 . + . Parent=gene125 chr1 ENCODE CDS 148355206 148355319 . + 0 Parent=gene125 chr1 ENCODE exon 148359819 148359947 . + . Parent=gene125 chr1 ENCODE CDS 148359819 148359947 . + 0 Parent=gene125 chr1 ENCODE exon 148360460 148360554 . + . Parent=gene125 chr1 ENCODE CDS 148360460 148360554 . + 0 Parent=gene125 chr1 ENCODE exon 148364270 148364375 . + . Parent=gene125 chr1 ENCODE CDS 148364270 148364375 . + 1 Parent=gene125 chr1 ENCODE exon 148365198 148365281 . + . Parent=gene125 chr1 ENCODE CDS 148365198 148365281 . + 0 Parent=gene125 chr1 ENCODE exon 148366491 148366591 . + . Parent=gene125 chr1 ENCODE CDS 148366491 148366591 . + 0 Parent=gene125 chr1 ENCODE CDS 148367193 148367256 . + 1 Parent=gene125 chr1 ENCODE exon 148367193 148369132 . + . Parent=gene125 ### chr1 ENCODE gene 148325857 148369132 . + . ID=gene126;name2=TUFT1;Name=RP11-74C1.1-008 chr1 ENCODE exon 148325857 148325975 . + . Parent=gene126 chr1 ENCODE CDS 148325916 148325975 . + 0 Parent=gene126 chr1 ENCODE exon 148348134 148348235 . + . Parent=gene126 chr1 ENCODE CDS 148348134 148348235 . + 0 Parent=gene126 chr1 ENCODE exon 148349453 148349539 . + . Parent=gene126 chr1 ENCODE CDS 148349453 148349539 . + 0 Parent=gene126 chr1 ENCODE exon 148350074 148350163 . + . Parent=gene126 chr1 ENCODE CDS 148350074 148350163 . + 0 Parent=gene126 chr1 ENCODE exon 148351712 148351777 . + . Parent=gene126 chr1 ENCODE CDS 148351712 148351777 . + 0 Parent=gene126 chr1 ENCODE exon 148355206 148355319 . + . Parent=gene126 chr1 ENCODE CDS 148355206 148355319 . + 0 Parent=gene126 chr1 ENCODE exon 148359819 148359947 . + . Parent=gene126 chr1 ENCODE CDS 148359819 148359947 . + 0 Parent=gene126 chr1 ENCODE exon 148360460 148360554 . + . Parent=gene126 chr1 ENCODE CDS 148360460 148360554 . + 0 Parent=gene126 chr1 ENCODE exon 148364270 148364375 . + . Parent=gene126 chr1 ENCODE CDS 148364270 148364375 . + 1 Parent=gene126 chr1 ENCODE exon 148365198 148365281 . + . Parent=gene126 chr1 ENCODE CDS 148365198 148365281 . + 0 Parent=gene126 chr1 ENCODE exon 148366491 148366591 . + . Parent=gene126 chr1 ENCODE CDS 148366491 148366591 . + 0 Parent=gene126 chr1 ENCODE CDS 148367193 148367256 . + 1 Parent=gene126 chr1 ENCODE exon 148367193 148369132 . + . Parent=gene126 ### chr1 ENCODE gene 148325872 148369125 . + . ID=gene127;Name=RP11-74C1.1-007;name2=TUFT1 chr1 ENCODE exon 148325872 148325975 . + . Parent=gene127 chr1 ENCODE exon 148348134 148348235 . + . Parent=gene127 chr1 ENCODE exon 148349453 148349539 . + . Parent=gene127 chr1 ENCODE exon 148350074 148350163 . + . Parent=gene127 chr1 ENCODE exon 148351712 148351777 . + . Parent=gene127 chr1 ENCODE exon 148355206 148355319 . + . Parent=gene127 chr1 ENCODE exon 148359819 148359887 . + . Parent=gene127 chr1 ENCODE exon 148367651 148369125 . + . Parent=gene127 ### chr1 ENCODE gene 148325883 148355375 . + . ID=gene128;Name=RP11-74C1.1-012;name2=TUFT1 chr1 ENCODE exon 148325883 148325975 . + . Parent=gene128 chr1 ENCODE exon 148347640 148347714 . + . Parent=gene128 chr1 ENCODE exon 148348134 148348235 . + . Parent=gene128 chr1 ENCODE exon 148349453 148349539 . + . Parent=gene128 chr1 ENCODE exon 148350074 148350163 . + . Parent=gene128 chr1 ENCODE exon 148351712 148351777 . + . Parent=gene128 chr1 ENCODE exon 148355206 148355375 . + . Parent=gene128 ### chr1 ENCODE gene 148348071 148350570 . + . ID=gene129;Name=RP11-74C1.1-009;name2=TUFT1 chr1 ENCODE exon 148348071 148348235 . + . Parent=gene129 chr1 ENCODE exon 148349453 148349539 . + . Parent=gene129 chr1 ENCODE exon 148350074 148350570 . + . Parent=gene129 ### chr1 ENCODE gene 148351471 148360476 . + . ID=gene130;Name=RP11-74C1.1-011;name2=TUFT1 chr1 ENCODE exon 148351471 148351777 . + . Parent=gene130 chr1 ENCODE exon 148355206 148355319 . + . Parent=gene130 chr1 ENCODE exon 148359819 148359947 . + . Parent=gene130 chr1 ENCODE exon 148360460 148360476 . + . Parent=gene130 ### chr1 ENCODE gene 148397614 148468994 . + . ID=gene131;Name=RP11-98D18.12-002;name2=SNX27 chr1 ENCODE exon 148397614 148397930 . + . Parent=gene131 chr1 ENCODE exon 148424437 148424668 . + . Parent=gene131 chr1 ENCODE exon 148443784 148443976 . + . Parent=gene131 chr1 ENCODE exon 148446347 148446411 . + . Parent=gene131 chr1 ENCODE exon 148447715 148447819 . + . Parent=gene131 chr1 ENCODE exon 148451482 148451560 . + . Parent=gene131 chr1 ENCODE exon 148454021 148454184 . + . Parent=gene131 chr1 ENCODE exon 148468905 148468994 . + . Parent=gene131 ### chr1 ENCODE gene 148397631 148468994 . + . ID=gene132;Name=RP11-98D18.12-001;name2=SNX27 chr1 ENCODE exon 148397631 148398061 . + . Parent=gene132 chr1 ENCODE exon 148424437 148424668 . + . Parent=gene132 chr1 ENCODE exon 148443784 148443976 . + . Parent=gene132 chr1 ENCODE exon 148446347 148446411 . + . Parent=gene132 chr1 ENCODE exon 148447715 148447819 . + . Parent=gene132 chr1 ENCODE exon 148451482 148451560 . + . Parent=gene132 chr1 ENCODE exon 148454021 148454184 . + . Parent=gene132 chr1 ENCODE exon 148468905 148468994 . + . Parent=gene132 ### chr1 ENCODE gene 148397631 148468994 . + . ID=gene133;Name=RP11-98D18.12-003;name2=SNX27 chr1 ENCODE exon 148397631 148398061 . + . Parent=gene133 chr1 ENCODE exon 148424437 148424668 . + . Parent=gene133 chr1 ENCODE exon 148443784 148443976 . + . Parent=gene133 chr1 ENCODE exon 148446347 148446411 . + . Parent=gene133 chr1 ENCODE exon 148447715 148447819 . + . Parent=gene133 chr1 ENCODE exon 148451482 148451560 . + . Parent=gene133 chr1 ENCODE exon 148454021 148454184 . + . Parent=gene133 chr1 ENCODE exon 148468905 148468994 . + . Parent=gene133 ### chr1 ENCODE gene 148424405 148468994 . + . ID=gene134;Name=RP11-98D18.12-004;name2=SNX27 chr1 ENCODE exon 148424405 148424668 . + . Parent=gene134 chr1 ENCODE exon 148443784 148443976 . + . Parent=gene134 chr1 ENCODE exon 148446347 148446411 . + . Parent=gene134 chr1 ENCODE exon 148447715 148447819 . + . Parent=gene134 chr1 ENCODE exon 148451482 148451560 . + . Parent=gene134 chr1 ENCODE exon 148454021 148454184 . + . Parent=gene134 chr1 ENCODE exon 148468905 148468994 . + . Parent=gene134 ### chr1 ENCODE gene 148447793 148454910 . + . ID=gene135;Name=RP11-98D18.12-005;name2=SNX27 chr1 ENCODE exon 148447793 148447819 . + . Parent=gene135 chr1 ENCODE CDS 148447793 148447819 . + 0 Parent=gene135 chr1 ENCODE exon 148451482 148451560 . + . Parent=gene135 chr1 ENCODE CDS 148451482 148451560 . + 0 Parent=gene135 chr1 ENCODE exon 148454021 148454184 . + . Parent=gene135 chr1 ENCODE CDS 148454021 148454184 . + 2 Parent=gene135 chr1 ENCODE CDS 148454690 148454800 . + 0 Parent=gene135 chr1 ENCODE exon 148454690 148454910 . + . Parent=gene135 ### chr10 ENCODE gene 55232537 55643814 . - . ID=gene136;Name=RP11-449J3.2-008;name2=PCDH15 chr10 ENCODE exon 55232537 55236896 . - . Parent=gene136 chr10 ENCODE exon 55240322 55240430 . - . Parent=gene136 chr10 ENCODE exon 55254902 55254907 . - . Parent=gene136 chr10 ENCODE exon 55257159 55257314 . - . Parent=gene136 chr10 ENCODE exon 55258331 55258339 . - . Parent=gene136 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene136 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene136 chr10 ENCODE exon 55286941 55287029 . - . Parent=gene136 chr10 ENCODE exon 55296408 55296623 . - . Parent=gene136 chr10 ENCODE exon 55333009 55333136 . - . Parent=gene136 chr10 ENCODE exon 55368581 55368721 . - . Parent=gene136 chr10 ENCODE exon 55370632 55370741 . - . Parent=gene136 chr10 ENCODE exon 55389498 55389610 . - . Parent=gene136 chr10 ENCODE exon 55391518 55391658 . - . Parent=gene136 chr10 ENCODE exon 55425415 55425531 . - . Parent=gene136 chr10 ENCODE exon 55449958 55450182 . - . Parent=gene136 chr10 ENCODE exon 55452658 55452963 . - . Parent=gene136 chr10 ENCODE exon 55496523 55496651 . - . Parent=gene136 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene136 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene136 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene136 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene136 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene136 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene136 chr10 ENCODE exon 55619130 55619150 . - . Parent=gene136 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene136 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene136 ### chr10 ENCODE gene 55236091 55287029 . - . ID=gene137;Name=RP11-449J3.2-009;name2=PCDH15 chr10 ENCODE exon 55236091 55236896 . - . Parent=gene137 chr10 ENCODE exon 55240322 55240430 . - . Parent=gene137 chr10 ENCODE exon 55241315 55241385 . - . Parent=gene137 chr10 ENCODE exon 55246005 55246043 . - . Parent=gene137 chr10 ENCODE exon 55247761 55247779 . - . Parent=gene137 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene137 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene137 chr10 ENCODE exon 55286941 55287029 . - . Parent=gene137 ### chr10 ENCODE gene 55236752 55248150 . - . ID=gene138;Name=RP11-449J3.2-010;name2=PCDH15 chr10 ENCODE exon 55236752 55236896 . - . Parent=gene138 chr10 ENCODE exon 55240322 55240430 . - . Parent=gene138 chr10 ENCODE exon 55241315 55241385 . - . Parent=gene138 chr10 ENCODE exon 55246005 55246043 . - . Parent=gene138 chr10 ENCODE exon 55247761 55248150 . - . Parent=gene138 ### chr10 ENCODE gene 55238217 55625655 . - . ID=gene139;Name=RP11-449J3.2-018;name2=PCDH15 chr10 ENCODE exon 55238217 55239312 . - . Parent=gene139 chr10 ENCODE exon 55240322 55240430 . - . Parent=gene139 chr10 ENCODE exon 55241315 55241385 . - . Parent=gene139 chr10 ENCODE exon 55254902 55254907 . - . Parent=gene139 chr10 ENCODE exon 55257159 55257314 . - . Parent=gene139 chr10 ENCODE exon 55258331 55258339 . - . Parent=gene139 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene139 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene139 chr10 ENCODE exon 55286941 55287029 . - . Parent=gene139 chr10 ENCODE exon 55296408 55296623 . - . Parent=gene139 chr10 ENCODE exon 55333009 55333136 . - . Parent=gene139 chr10 ENCODE exon 55368581 55368721 . - . Parent=gene139 chr10 ENCODE exon 55370632 55370741 . - . Parent=gene139 chr10 ENCODE exon 55389498 55389610 . - . Parent=gene139 chr10 ENCODE exon 55391518 55391658 . - . Parent=gene139 chr10 ENCODE exon 55425415 55425531 . - . Parent=gene139 chr10 ENCODE exon 55449958 55450182 . - . Parent=gene139 chr10 ENCODE exon 55452658 55452963 . - . Parent=gene139 chr10 ENCODE exon 55496523 55496651 . - . Parent=gene139 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene139 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene139 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene139 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene139 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene139 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene139 chr10 ENCODE exon 55619130 55619150 . - . Parent=gene139 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene139 ### chr10 ENCODE gene 55238217 55643814 . - . ID=gene140;Name=RP11-449J3.2-017;name2=PCDH15 chr10 ENCODE exon 55238217 55239312 . - . Parent=gene140 chr10 ENCODE exon 55240322 55240430 . - . Parent=gene140 chr10 ENCODE exon 55241315 55241385 . - . Parent=gene140 chr10 ENCODE exon 55254902 55254907 . - . Parent=gene140 chr10 ENCODE exon 55257159 55257314 . - . Parent=gene140 chr10 ENCODE exon 55258331 55258339 . - . Parent=gene140 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene140 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene140 chr10 ENCODE exon 55286941 55287029 . - . Parent=gene140 chr10 ENCODE exon 55296408 55296623 . - . Parent=gene140 chr10 ENCODE exon 55333009 55333136 . - . Parent=gene140 chr10 ENCODE exon 55368581 55368721 . - . Parent=gene140 chr10 ENCODE exon 55370632 55370741 . - . Parent=gene140 chr10 ENCODE exon 55389498 55389610 . - . Parent=gene140 chr10 ENCODE exon 55391518 55391658 . - . Parent=gene140 chr10 ENCODE exon 55425415 55425531 . - . Parent=gene140 chr10 ENCODE exon 55449958 55450182 . - . Parent=gene140 chr10 ENCODE exon 55452658 55452963 . - . Parent=gene140 chr10 ENCODE exon 55496523 55496651 . - . Parent=gene140 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene140 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene140 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene140 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene140 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene140 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene140 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene140 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene140 ### chr10 ENCODE gene 55238349 55270262 . - . ID=gene141;Name=RP11-449J3.2-006;name2=PCDH15 chr10 ENCODE exon 55238349 55239312 . - . Parent=gene141 chr10 ENCODE exon 55240322 55240430 . - . Parent=gene141 chr10 ENCODE exon 55257159 55257314 . - . Parent=gene141 chr10 ENCODE exon 55258331 55258339 . - . Parent=gene141 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene141 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene141 ### chr10 ENCODE gene 55238349 55643814 . - . ID=gene142;Name=RP11-449J3.2-015;name2=PCDH15 chr10 ENCODE exon 55238349 55239312 . - . Parent=gene142 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene142 ### chr10 ENCODE gene 55238349 55643814 . - . ID=gene143;Name=RP11-449J3.2-016;name2=PCDH15 chr10 ENCODE exon 55238349 55239312 . - . Parent=gene143 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene143 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene143 ### chr10 ENCODE gene 55238349 55643814 . - . ID=gene144;Name=RP11-449J3.2-007;name2=PCDH15 chr10 ENCODE exon 55238349 55239312 . - . Parent=gene144 chr10 ENCODE exon 55240322 55240430 . - . Parent=gene144 chr10 ENCODE exon 55254902 55254907 . - . Parent=gene144 chr10 ENCODE exon 55257159 55257314 . - . Parent=gene144 chr10 ENCODE exon 55258331 55258339 . - . Parent=gene144 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene144 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene144 chr10 ENCODE exon 55286941 55287029 . - . Parent=gene144 chr10 ENCODE exon 55296408 55296623 . - . Parent=gene144 chr10 ENCODE exon 55333009 55333136 . - . Parent=gene144 chr10 ENCODE exon 55368581 55368721 . - . Parent=gene144 chr10 ENCODE exon 55370632 55370741 . - . Parent=gene144 chr10 ENCODE exon 55389498 55389610 . - . Parent=gene144 chr10 ENCODE exon 55391518 55391658 . - . Parent=gene144 chr10 ENCODE exon 55425415 55425531 . - . Parent=gene144 chr10 ENCODE exon 55449958 55450182 . - . Parent=gene144 chr10 ENCODE exon 55452658 55452963 . - . Parent=gene144 chr10 ENCODE exon 55496523 55496651 . - . Parent=gene144 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene144 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene144 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene144 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene144 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene144 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene144 chr10 ENCODE exon 55619130 55619150 . - . Parent=gene144 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene144 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene144 ### chr10 ENCODE gene 55238349 55643814 . - . ID=gene145;Name=RP11-449J3.2-014;name2=PCDH15 chr10 ENCODE exon 55238349 55239312 . - . Parent=gene145 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene145 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene145 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene145 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene145 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene145 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene145 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene145 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene145 ### chr10 ENCODE gene 55250936 55643814 . - . ID=gene146;Name=RP11-449J3.2-011;name2=PCDH15 chr10 ENCODE exon 55250936 55253124 . - . Parent=gene146 chr10 ENCODE exon 55254902 55254907 . - . Parent=gene146 chr10 ENCODE exon 55257159 55257314 . - . Parent=gene146 chr10 ENCODE exon 55258331 55258339 . - . Parent=gene146 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene146 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene146 chr10 ENCODE exon 55286941 55287029 . - . Parent=gene146 chr10 ENCODE exon 55296408 55296623 . - . Parent=gene146 chr10 ENCODE exon 55333009 55333136 . - . Parent=gene146 chr10 ENCODE exon 55368581 55368721 . - . Parent=gene146 chr10 ENCODE exon 55370632 55370741 . - . Parent=gene146 chr10 ENCODE exon 55389498 55389610 . - . Parent=gene146 chr10 ENCODE exon 55391518 55391658 . - . Parent=gene146 chr10 ENCODE exon 55425415 55425531 . - . Parent=gene146 chr10 ENCODE exon 55449958 55450182 . - . Parent=gene146 chr10 ENCODE exon 55452658 55452963 . - . Parent=gene146 chr10 ENCODE exon 55496523 55496651 . - . Parent=gene146 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene146 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene146 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene146 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene146 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene146 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene146 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene146 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene146 ### chr10 ENCODE gene 55250936 55643814 . - . ID=gene147;Name=RP11-449J3.2-013;name2=PCDH15 chr10 ENCODE exon 55250936 55253124 . - . Parent=gene147 chr10 ENCODE exon 55254902 55254907 . - . Parent=gene147 chr10 ENCODE exon 55257159 55257314 . - . Parent=gene147 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene147 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene147 chr10 ENCODE exon 55286941 55287029 . - . Parent=gene147 chr10 ENCODE exon 55296408 55296623 . - . Parent=gene147 chr10 ENCODE exon 55333009 55333136 . - . Parent=gene147 chr10 ENCODE exon 55368581 55368721 . - . Parent=gene147 chr10 ENCODE exon 55370632 55370741 . - . Parent=gene147 chr10 ENCODE exon 55389498 55389610 . - . Parent=gene147 chr10 ENCODE exon 55391518 55391658 . - . Parent=gene147 chr10 ENCODE exon 55425415 55425531 . - . Parent=gene147 chr10 ENCODE exon 55449958 55450182 . - . Parent=gene147 chr10 ENCODE exon 55452658 55452963 . - . Parent=gene147 chr10 ENCODE exon 55496523 55496651 . - . Parent=gene147 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene147 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene147 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene147 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene147 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene147 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene147 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene147 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene147 ### chr10 ENCODE gene 55251042 55336983 . - . ID=gene148;Name=RP11-449J3.2-003;name2=PCDH15 chr10 ENCODE exon 55251042 55253124 . - . Parent=gene148 chr10 ENCODE CDS 55251624 55253124 . - 1 Parent=gene148 chr10 ENCODE exon 55257159 55257314 . - . Parent=gene148 chr10 ENCODE CDS 55257159 55257314 . - 1 Parent=gene148 chr10 ENCODE exon 55258331 55258339 . - . Parent=gene148 chr10 ENCODE CDS 55258331 55258339 . - 1 Parent=gene148 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene148 chr10 ENCODE CDS 55261081 55261299 . - 1 Parent=gene148 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene148 chr10 ENCODE CDS 55270086 55270262 . - 1 Parent=gene148 chr10 ENCODE exon 55286941 55287029 . - . Parent=gene148 chr10 ENCODE CDS 55286941 55287029 . - 0 Parent=gene148 chr10 ENCODE exon 55296408 55296623 . - . Parent=gene148 chr10 ENCODE CDS 55296408 55296623 . - 0 Parent=gene148 chr10 ENCODE exon 55333009 55333136 . - . Parent=gene148 chr10 ENCODE CDS 55333009 55333136 . - 2 Parent=gene148 chr10 ENCODE CDS 55334959 55334977 . - 0 Parent=gene148 chr10 ENCODE exon 55334959 55335008 . - . Parent=gene148 chr10 ENCODE exon 55336642 55336983 . - . Parent=gene148 ### chr10 ENCODE gene 55251042 55643814 . - . ID=gene149;name2=PCDH15;Name=RP11-449J3.2-001 chr10 ENCODE exon 55251042 55253124 . - . Parent=gene149 chr10 ENCODE exon 55257159 55257314 . - . Parent=gene149 chr10 ENCODE exon 55258331 55258339 . - . Parent=gene149 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene149 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene149 chr10 ENCODE exon 55286941 55287029 . - . Parent=gene149 chr10 ENCODE exon 55296408 55296623 . - . Parent=gene149 chr10 ENCODE exon 55333009 55333136 . - . Parent=gene149 chr10 ENCODE exon 55368581 55368721 . - . Parent=gene149 chr10 ENCODE exon 55370632 55370741 . - . Parent=gene149 chr10 ENCODE exon 55389498 55389610 . - . Parent=gene149 chr10 ENCODE exon 55391518 55391658 . - . Parent=gene149 chr10 ENCODE exon 55425415 55425531 . - . Parent=gene149 chr10 ENCODE exon 55449958 55450182 . - . Parent=gene149 chr10 ENCODE exon 55452658 55452963 . - . Parent=gene149 chr10 ENCODE exon 55496523 55496651 . - . Parent=gene149 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene149 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene149 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene149 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene149 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene149 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene149 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene149 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene149 ### chr10 ENCODE gene 55251042 55643814 . - . ID=gene150;Name=RP11-449J3.2-012;name2=PCDH15 chr10 ENCODE exon 55251042 55253124 . - . Parent=gene150 chr10 ENCODE exon 55257159 55257314 . - . Parent=gene150 chr10 ENCODE exon 55261081 55261299 . - . Parent=gene150 chr10 ENCODE exon 55270086 55270262 . - . Parent=gene150 chr10 ENCODE exon 55286941 55287029 . - . Parent=gene150 chr10 ENCODE exon 55296408 55296623 . - . Parent=gene150 chr10 ENCODE exon 55333009 55333136 . - . Parent=gene150 chr10 ENCODE exon 55368581 55368721 . - . Parent=gene150 chr10 ENCODE exon 55370632 55370741 . - . Parent=gene150 chr10 ENCODE exon 55389498 55389610 . - . Parent=gene150 chr10 ENCODE exon 55391518 55391658 . - . Parent=gene150 chr10 ENCODE exon 55425415 55425531 . - . Parent=gene150 chr10 ENCODE exon 55449958 55450182 . - . Parent=gene150 chr10 ENCODE exon 55452658 55452963 . - . Parent=gene150 chr10 ENCODE exon 55496523 55496651 . - . Parent=gene150 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene150 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene150 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene150 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene150 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene150 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene150 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene150 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene150 ### chr10 ENCODE gene 55424345 55643814 . - . ID=gene151;Name=RP11-449J3.2-002;name2=PCDH15 chr10 ENCODE exon 55424345 55425531 . - . Parent=gene151 chr10 ENCODE exon 55449958 55450182 . - . Parent=gene151 chr10 ENCODE exon 55452658 55452963 . - . Parent=gene151 chr10 ENCODE exon 55496523 55496651 . - . Parent=gene151 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene151 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene151 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene151 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene151 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene151 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene151 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene151 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene151 ### chr10 ENCODE gene 55496523 55643814 . - . ID=gene152;Name=RP11-449J3.2-019;name2=PCDH15 chr10 ENCODE exon 55496523 55496651 . - . Parent=gene152 chr10 ENCODE exon 55509097 55509190 . - . Parent=gene152 chr10 ENCODE exon 55519750 55519829 . - . Parent=gene152 chr10 ENCODE exon 55562641 55562773 . - . Parent=gene152 chr10 ENCODE exon 55582866 55583059 . - . Parent=gene152 chr10 ENCODE exon 55613210 55613359 . - . Parent=gene152 chr10 ENCODE exon 55614900 55615034 . - . Parent=gene152 chr10 ENCODE exon 55625449 55625655 . - . Parent=gene152 chr10 ENCODE exon 55643702 55643814 . - . Parent=gene152 ### chr11 ENCODE gene 1710216 1728386 . - . ID=gene153;Name=AC068580.3-004;name2=AC068580.3 chr11 ENCODE exon 1710216 1713235 . - . Parent=gene153 chr11 ENCODE CDS 1713086 1713235 . - 0 Parent=gene153 chr11 ENCODE CDS 1725473 1725715 . - 0 Parent=gene153 chr11 ENCODE exon 1725473 1725925 . - . Parent=gene153 chr11 ENCODE exon 1726821 1726932 . - . Parent=gene153 chr11 ENCODE exon 1728165 1728386 . - . Parent=gene153 ### chr11 ENCODE gene 1710216 1728397 . - . ID=gene154;Name=AC068580.3-001;name2=AC068580.3 chr11 ENCODE exon 1710216 1713235 . - . Parent=gene154 chr11 ENCODE CDS 1713086 1713235 . - 0 Parent=gene154 chr11 ENCODE exon 1725473 1725925 . - . Parent=gene154 chr11 ENCODE CDS 1725473 1725925 . - 0 Parent=gene154 chr11 ENCODE CDS 1728165 1728248 . - 0 Parent=gene154 chr11 ENCODE exon 1728165 1728397 . - . Parent=gene154 ### chr11 ENCODE gene 1713019 1726908 . - . ID=gene155;Name=AC068580.3-003;name2=AC068580.3 chr11 ENCODE exon 1713019 1713235 . - . Parent=gene155 chr11 ENCODE exon 1725563 1726908 . - . Parent=gene155 ### chr11 ENCODE gene 1725473 1736857 . - . ID=gene156;Name=AC068580.4-007;name2=CTSD chr11 ENCODE exon 1725473 1725925 . - . Parent=gene156 chr11 ENCODE CDS 1725473 1725925 . - 1 Parent=gene156 chr11 ENCODE exon 1731609 1731707 . - . Parent=gene156 chr11 ENCODE CDS 1731609 1731707 . - 1 Parent=gene156 chr11 ENCODE exon 1731800 1731944 . - . Parent=gene156 chr11 ENCODE CDS 1731800 1731944 . - 2 Parent=gene156 chr11 ENCODE exon 1732712 1732834 . - . Parent=gene156 chr11 ENCODE CDS 1732712 1732834 . - 2 Parent=gene156 chr11 ENCODE exon 1735130 1735362 . - . Parent=gene156 chr11 ENCODE CDS 1735130 1735362 . - 1 Parent=gene156 chr11 ENCODE exon 1736775 1736857 . - . Parent=gene156 chr11 ENCODE CDS 1736775 1736857 . - 0 Parent=gene156 ### chr11 ENCODE gene 1725736 1727003 . - . ID=gene157;Name=AC068580.3-005;name2=AC068580.3 chr11 ENCODE exon 1725736 1725925 . - . Parent=gene157 chr11 ENCODE exon 1726825 1727003 . - . Parent=gene157 ### chr11 ENCODE gene 1730558 1741798 . - . ID=gene158;Name=AC068580.4-001;name2=CTSD chr11 ENCODE exon 1730558 1731476 . - . Parent=gene158 chr11 ENCODE CDS 1731309 1731476 . - 0 Parent=gene158 chr11 ENCODE exon 1731609 1731707 . - . Parent=gene158 chr11 ENCODE CDS 1731609 1731707 . - 0 Parent=gene158 chr11 ENCODE exon 1731800 1731944 . - . Parent=gene158 chr11 ENCODE CDS 1731800 1731944 . - 1 Parent=gene158 chr11 ENCODE exon 1732712 1732834 . - . Parent=gene158 chr11 ENCODE CDS 1732712 1732834 . - 1 Parent=gene158 chr11 ENCODE exon 1735130 1735362 . - . Parent=gene158 chr11 ENCODE CDS 1735130 1735362 . - 0 Parent=gene158 chr11 ENCODE exon 1736775 1736893 . - . Parent=gene158 chr11 ENCODE CDS 1736775 1736893 . - 2 Parent=gene158 chr11 ENCODE exon 1737322 1737445 . - . Parent=gene158 chr11 ENCODE CDS 1737322 1737445 . - 0 Parent=gene158 chr11 ENCODE exon 1739115 1739274 . - . Parent=gene158 chr11 ENCODE CDS 1739115 1739274 . - 1 Parent=gene158 chr11 ENCODE CDS 1741598 1741665 . - 0 Parent=gene158 chr11 ENCODE exon 1741598 1741798 . - . Parent=gene158 ### chr11 ENCODE gene 1730581 1741707 . - . ID=gene159;Name=AC068580.4-006;name2=CTSD chr11 ENCODE exon 1730581 1731476 . - . Parent=gene159 chr11 ENCODE exon 1731609 1731707 . - . Parent=gene159 chr11 ENCODE exon 1731800 1731937 . - . Parent=gene159 chr11 ENCODE exon 1732708 1732834 . - . Parent=gene159 chr11 ENCODE exon 1735130 1735362 . - . Parent=gene159 chr11 ENCODE exon 1736775 1736893 . - . Parent=gene159 chr11 ENCODE exon 1737322 1737445 . - . Parent=gene159 chr11 ENCODE exon 1739115 1739274 . - . Parent=gene159 chr11 ENCODE exon 1741598 1741707 . - . Parent=gene159 ### chr11 ENCODE gene 1731189 1732752 . - . ID=gene160;Name=AC068580.4-004;name2=CTSD chr11 ENCODE exon 1731189 1731476 . - . Parent=gene160 chr11 ENCODE exon 1731609 1731707 . - . Parent=gene160 chr11 ENCODE exon 1731800 1732061 . - . Parent=gene160 chr11 ENCODE exon 1732712 1732752 . - . Parent=gene160 ### chr11 ENCODE gene 1731611 1733154 . - . ID=gene161;Name=AC068580.4-003;name2=CTSD chr11 ENCODE exon 1731611 1731944 . - . Parent=gene161 chr11 ENCODE exon 1732712 1733154 . - . Parent=gene161 ### chr11 ENCODE gene 1731830 1739346 . - . ID=gene162;name2=CTSD;Name=AC068580.4-005 chr11 ENCODE exon 1731830 1731944 . - . Parent=gene162 chr11 ENCODE CDS 1731830 1731944 . - 1 Parent=gene162 chr11 ENCODE exon 1732712 1732834 . - . Parent=gene162 chr11 ENCODE CDS 1732712 1732834 . - 1 Parent=gene162 chr11 ENCODE exon 1735130 1735362 . - . Parent=gene162 chr11 ENCODE CDS 1735130 1735362 . - 0 Parent=gene162 chr11 ENCODE exon 1736775 1736893 . - . Parent=gene162 chr11 ENCODE CDS 1736775 1736893 . - 2 Parent=gene162 chr11 ENCODE exon 1737322 1737445 . - . Parent=gene162 chr11 ENCODE CDS 1737322 1737445 . - 0 Parent=gene162 chr11 ENCODE CDS 1739115 1739297 . - 0 Parent=gene162 chr11 ENCODE exon 1739115 1739346 . - . Parent=gene162 ### chr11 ENCODE gene 1735130 1740209 . - . ID=gene163;Name=AC068580.4-002;name2=CTSD chr11 ENCODE exon 1735130 1735362 . - . Parent=gene163 chr11 ENCODE CDS 1735130 1735362 . - 0 Parent=gene163 chr11 ENCODE exon 1736775 1736893 . - . Parent=gene163 chr11 ENCODE CDS 1736775 1736893 . - 2 Parent=gene163 chr11 ENCODE exon 1737322 1737445 . - . Parent=gene163 chr11 ENCODE CDS 1737322 1737445 . - 0 Parent=gene163 chr11 ENCODE CDS 1739115 1739237 . - 0 Parent=gene163 chr11 ENCODE exon 1739115 1739274 . - . Parent=gene163 chr11 ENCODE exon 1739939 1740209 . - . Parent=gene163 ### chr11 ENCODE gene 1806113 1813740 . + . ID=gene164;Name=AC051649.1-011;name2=SYT8 chr11 ENCODE exon 1806113 1806199 . + . Parent=gene164 chr11 ENCODE exon 1806348 1806519 . + . Parent=gene164 chr11 ENCODE exon 1812903 1813005 . + . Parent=gene164 chr11 ENCODE CDS 1812912 1813005 . + 0 Parent=gene164 chr11 ENCODE exon 1813102 1813265 . + . Parent=gene164 chr11 ENCODE CDS 1813102 1813265 . + 2 Parent=gene164 chr11 ENCODE exon 1813692 1813740 . + . Parent=gene164 chr11 ENCODE CDS 1813692 1813740 . + 0 Parent=gene164 ### chr11 ENCODE gene 1806349 1813732 . + . ID=gene165;Name=AC051649.1-010;name2=SYT8 chr11 ENCODE exon 1806349 1806519 . + . Parent=gene165 chr11 ENCODE exon 1812900 1813005 . + . Parent=gene165 chr11 ENCODE CDS 1812912 1813005 . + 0 Parent=gene165 chr11 ENCODE exon 1813102 1813265 . + . Parent=gene165 chr11 ENCODE CDS 1813102 1813265 . + 2 Parent=gene165 chr11 ENCODE exon 1813692 1813732 . + . Parent=gene165 chr11 ENCODE CDS 1813692 1813732 . + 0 Parent=gene165 ### chr11 ENCODE gene 1808893 1815327 . + . ID=gene166;Name=AC051649.1-007;name2=SYT8 chr11 ENCODE exon 1808893 1809702 . + . Parent=gene166 chr11 ENCODE exon 1812900 1813005 . + . Parent=gene166 chr11 ENCODE exon 1813102 1813265 . + . Parent=gene166 chr11 ENCODE exon 1813692 1814667 . + . Parent=gene166 chr11 ENCODE exon 1814763 1814896 . + . Parent=gene166 chr11 ENCODE exon 1814998 1815327 . + . Parent=gene166 ### chr11 ENCODE gene 1810118 1815327 . + . ID=gene167;Name=AC051649.1-001;name2=SYT8 chr11 ENCODE exon 1810118 1810163 . + . Parent=gene167 chr11 ENCODE exon 1812900 1813005 . + . Parent=gene167 chr11 ENCODE exon 1813102 1813265 . + . Parent=gene167 chr11 ENCODE exon 1813692 1814090 . + . Parent=gene167 chr11 ENCODE exon 1814231 1814398 . + . Parent=gene167 chr11 ENCODE exon 1814562 1814667 . + . Parent=gene167 chr11 ENCODE exon 1814763 1814896 . + . Parent=gene167 chr11 ENCODE exon 1814998 1815327 . + . Parent=gene167 ### chr11 ENCODE gene 1811598 1815327 . + . ID=gene168;Name=AC051649.1-009;name2=SYT8 chr11 ENCODE exon 1811598 1814667 . + . Parent=gene168 chr11 ENCODE exon 1814763 1814896 . + . Parent=gene168 chr11 ENCODE exon 1814998 1815327 . + . Parent=gene168 ### chr11 ENCODE gene 1812116 1815327 . + . ID=gene169;Name=AC051649.1-006;name2=SYT8 chr11 ENCODE exon 1812116 1812423 . + . Parent=gene169 chr11 ENCODE exon 1812900 1813005 . + . Parent=gene169 chr11 ENCODE exon 1813102 1813265 . + . Parent=gene169 chr11 ENCODE exon 1813692 1814398 . + . Parent=gene169 chr11 ENCODE exon 1814562 1814667 . + . Parent=gene169 chr11 ENCODE exon 1814763 1815327 . + . Parent=gene169 ### chr11 ENCODE gene 1812250 1815327 . + . ID=gene170;Name=AC051649.1-002;name2=SYT8 chr11 ENCODE exon 1812250 1812407 . + . Parent=gene170 chr11 ENCODE CDS 1812378 1812407 . + 0 Parent=gene170 chr11 ENCODE exon 1812900 1813005 . + . Parent=gene170 chr11 ENCODE CDS 1812900 1813005 . + 0 Parent=gene170 chr11 ENCODE exon 1813102 1813265 . + . Parent=gene170 chr11 ENCODE CDS 1813102 1813265 . + 2 Parent=gene170 chr11 ENCODE exon 1813692 1813790 . + . Parent=gene170 chr11 ENCODE CDS 1813692 1813790 . + 0 Parent=gene170 chr11 ENCODE exon 1813932 1814090 . + . Parent=gene170 chr11 ENCODE CDS 1813932 1814090 . + 0 Parent=gene170 chr11 ENCODE exon 1814231 1814398 . + . Parent=gene170 chr11 ENCODE CDS 1814231 1814398 . + 0 Parent=gene170 chr11 ENCODE exon 1814562 1814667 . + . Parent=gene170 chr11 ENCODE CDS 1814562 1814667 . + 0 Parent=gene170 chr11 ENCODE exon 1814763 1814896 . + . Parent=gene170 chr11 ENCODE CDS 1814763 1814896 . + 2 Parent=gene170 chr11 ENCODE CDS 1814998 1815237 . + 0 Parent=gene170 chr11 ENCODE exon 1814998 1815327 . + . Parent=gene170 ### chr11 ENCODE gene 1812282 1815327 . + . ID=gene171;Name=AC051649.1-003;name2=SYT8 chr11 ENCODE exon 1812282 1812407 . + . Parent=gene171 chr11 ENCODE exon 1812900 1813005 . + . Parent=gene171 chr11 ENCODE exon 1813102 1813265 . + . Parent=gene171 chr11 ENCODE exon 1813692 1814398 . + . Parent=gene171 chr11 ENCODE exon 1814562 1814667 . + . Parent=gene171 chr11 ENCODE exon 1814763 1814896 . + . Parent=gene171 chr11 ENCODE exon 1814998 1815327 . + . Parent=gene171 ### chr11 ENCODE gene 1812378 1813910 . + . ID=gene172;name2=SYT8;Name=AC051649.1-013 chr11 ENCODE exon 1812378 1812407 . + . Parent=gene172 chr11 ENCODE CDS 1812378 1812407 . + 0 Parent=gene172 chr11 ENCODE exon 1812900 1813005 . + . Parent=gene172 chr11 ENCODE CDS 1812900 1813005 . + 0 Parent=gene172 chr11 ENCODE exon 1813102 1813265 . + . Parent=gene172 chr11 ENCODE CDS 1813102 1813265 . + 2 Parent=gene172 chr11 ENCODE exon 1813692 1813910 . + . Parent=gene172 chr11 ENCODE CDS 1813692 1813910 . + 0 Parent=gene172 ### chr11 ENCODE gene 1812396 1815327 . + . ID=gene173;name2=SYT8;Name=AC051649.1-008 chr11 ENCODE exon 1812396 1812423 . + . Parent=gene173 chr11 ENCODE CDS 1812396 1812423 . + 0 Parent=gene173 chr11 ENCODE exon 1812903 1813005 . + . Parent=gene173 chr11 ENCODE CDS 1812903 1813005 . + 2 Parent=gene173 chr11 ENCODE exon 1813102 1813265 . + . Parent=gene173 chr11 ENCODE CDS 1813102 1813265 . + 1 Parent=gene173 chr11 ENCODE exon 1813692 1813790 . + . Parent=gene173 chr11 ENCODE CDS 1813692 1813790 . + 2 Parent=gene173 chr11 ENCODE exon 1813932 1814090 . + . Parent=gene173 chr11 ENCODE CDS 1813932 1814090 . + 2 Parent=gene173 chr11 ENCODE exon 1814231 1814398 . + . Parent=gene173 chr11 ENCODE CDS 1814231 1814398 . + 2 Parent=gene173 chr11 ENCODE exon 1814562 1814667 . + . Parent=gene173 chr11 ENCODE CDS 1814562 1814667 . + 2 Parent=gene173 chr11 ENCODE exon 1814763 1814896 . + . Parent=gene173 chr11 ENCODE CDS 1814763 1814896 . + 1 Parent=gene173 chr11 ENCODE CDS 1814998 1815237 . + 2 Parent=gene173 chr11 ENCODE exon 1814998 1815327 . + . Parent=gene173 ### chr11 ENCODE gene 1812610 1815327 . + . ID=gene174;Name=AC051649.1-004;name2=SYT8 chr11 ENCODE exon 1812610 1813005 . + . Parent=gene174 chr11 ENCODE CDS 1812912 1813005 . + 0 Parent=gene174 chr11 ENCODE exon 1813102 1813265 . + . Parent=gene174 chr11 ENCODE CDS 1813102 1813265 . + 2 Parent=gene174 chr11 ENCODE exon 1813692 1813790 . + . Parent=gene174 chr11 ENCODE CDS 1813692 1813790 . + 0 Parent=gene174 chr11 ENCODE exon 1813932 1814090 . + . Parent=gene174 chr11 ENCODE CDS 1813932 1814090 . + 0 Parent=gene174 chr11 ENCODE exon 1814231 1814398 . + . Parent=gene174 chr11 ENCODE CDS 1814231 1814398 . + 0 Parent=gene174 chr11 ENCODE exon 1814562 1814667 . + . Parent=gene174 chr11 ENCODE CDS 1814562 1814667 . + 0 Parent=gene174 chr11 ENCODE exon 1814763 1814896 . + . Parent=gene174 chr11 ENCODE CDS 1814763 1814896 . + 2 Parent=gene174 chr11 ENCODE CDS 1814998 1815237 . + 0 Parent=gene174 chr11 ENCODE exon 1814998 1815327 . + . Parent=gene174 ### chr11 ENCODE gene 1812912 1813388 . + . ID=gene175;Name=AC051649.1-005;name2=SYT8 chr11 ENCODE exon 1812912 1813005 . + . Parent=gene175 chr11 ENCODE exon 1813102 1813388 . + . Parent=gene175 ### chr11 ENCODE gene 1813366 1814224 . + . ID=gene176;Name=AC051649.1-012;name2=SYT8 chr11 ENCODE exon 1813366 1813422 . + . Parent=gene176 chr11 ENCODE exon 1813692 1814224 . + . Parent=gene176 ### chr11 ENCODE gene 1813835 1814358 . + . ID=gene177;Name=AC051649.1-014;name2=SYT8 chr11 ENCODE exon 1813835 1814090 . + . Parent=gene177 chr11 ENCODE exon 1814231 1814358 . + . Parent=gene177 ### chr11 ENCODE gene 1816795 1819484 . + . ID=gene178;name2=TNNI2;Name=AC051649.2-002 chr11 ENCODE exon 1816795 1816839 . + . Parent=gene178 chr11 ENCODE exon 1817481 1817510 . + . Parent=gene178 chr11 ENCODE CDS 1817503 1817510 . + 0 Parent=gene178 chr11 ENCODE exon 1817655 1817661 . + . Parent=gene178 chr11 ENCODE CDS 1817655 1817661 . + 1 Parent=gene178 chr11 ENCODE exon 1818209 1818250 . + . Parent=gene178 chr11 ENCODE CDS 1818209 1818250 . + 0 Parent=gene178 chr11 ENCODE exon 1818334 1818462 . + . Parent=gene178 chr11 ENCODE CDS 1818334 1818462 . + 0 Parent=gene178 chr11 ENCODE exon 1818625 1818714 . + . Parent=gene178 chr11 ENCODE CDS 1818625 1818714 . + 0 Parent=gene178 chr11 ENCODE exon 1818837 1819013 . + . Parent=gene178 chr11 ENCODE CDS 1818837 1819013 . + 0 Parent=gene178 chr11 ENCODE CDS 1819262 1819357 . + 0 Parent=gene178 chr11 ENCODE exon 1819262 1819484 . + . Parent=gene178 ### chr11 ENCODE gene 1817287 1819484 . + . ID=gene179;Name=AC051649.2-001;name2=TNNI2 chr11 ENCODE exon 1817287 1817333 . + . Parent=gene179 chr11 ENCODE exon 1817481 1817510 . + . Parent=gene179 chr11 ENCODE CDS 1817503 1817510 . + 0 Parent=gene179 chr11 ENCODE exon 1817655 1817661 . + . Parent=gene179 chr11 ENCODE CDS 1817655 1817661 . + 1 Parent=gene179 chr11 ENCODE exon 1818209 1818250 . + . Parent=gene179 chr11 ENCODE CDS 1818209 1818250 . + 0 Parent=gene179 chr11 ENCODE exon 1818334 1818462 . + . Parent=gene179 chr11 ENCODE CDS 1818334 1818462 . + 0 Parent=gene179 chr11 ENCODE exon 1818625 1818714 . + . Parent=gene179 chr11 ENCODE CDS 1818625 1818714 . + 0 Parent=gene179 chr11 ENCODE exon 1818837 1819013 . + . Parent=gene179 chr11 ENCODE CDS 1818837 1819013 . + 0 Parent=gene179 chr11 ENCODE CDS 1819262 1819357 . + 0 Parent=gene179 chr11 ENCODE exon 1819262 1819484 . + . Parent=gene179 ### chr11 ENCODE gene 1818000 1819484 . + . ID=gene180;Name=AC051649.2-003;name2=TNNI2 chr11 ENCODE exon 1818000 1818044 . + . Parent=gene180 chr11 ENCODE CDS 1818030 1818044 . + 0 Parent=gene180 chr11 ENCODE exon 1818209 1818250 . + . Parent=gene180 chr11 ENCODE CDS 1818209 1818250 . + 0 Parent=gene180 chr11 ENCODE exon 1818334 1818462 . + . Parent=gene180 chr11 ENCODE CDS 1818334 1818462 . + 0 Parent=gene180 chr11 ENCODE exon 1818625 1818714 . + . Parent=gene180 chr11 ENCODE CDS 1818625 1818714 . + 0 Parent=gene180 chr11 ENCODE exon 1818837 1819013 . + . Parent=gene180 chr11 ENCODE CDS 1818837 1819013 . + 0 Parent=gene180 chr11 ENCODE CDS 1819262 1819357 . + 0 Parent=gene180 chr11 ENCODE exon 1819262 1819484 . + . Parent=gene180 ### chr11 ENCODE gene 1818024 1818541 . + . ID=gene181;Name=AC051649.2-004;name2=TNNI2 chr11 ENCODE exon 1818024 1818250 . + . Parent=gene181 chr11 ENCODE exon 1818334 1818541 . + . Parent=gene181 ### chr11 ENCODE gene 1830776 1870069 . + . ID=gene182;Name=AC051649.3-004;name2=LSP1 chr11 ENCODE exon 1830776 1831003 . + . Parent=gene182 chr11 ENCODE CDS 1830951 1831003 . + 0 Parent=gene182 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene182 chr11 ENCODE CDS 1857893 1858030 . + 1 Parent=gene182 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene182 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene182 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene182 chr11 ENCODE CDS 1861225 1861366 . + 1 Parent=gene182 chr11 ENCODE exon 1861738 1861830 . + . Parent=gene182 chr11 ENCODE CDS 1861738 1861830 . + 0 Parent=gene182 chr11 ENCODE exon 1862086 1862129 . + . Parent=gene182 chr11 ENCODE CDS 1862086 1862129 . + 0 Parent=gene182 chr11 ENCODE exon 1862306 1862387 . + . Parent=gene182 chr11 ENCODE CDS 1862306 1862387 . + 1 Parent=gene182 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene182 chr11 ENCODE CDS 1864538 1864672 . + 0 Parent=gene182 chr11 ENCODE exon 1865043 1865120 . + . Parent=gene182 chr11 ENCODE CDS 1865043 1865120 . + 0 Parent=gene182 chr11 ENCODE CDS 1865280 1865369 . + 0 Parent=gene182 chr11 ENCODE exon 1865280 1865382 . + . Parent=gene182 chr11 ENCODE exon 1869579 1870069 . + . Parent=gene182 ### chr11 ENCODE gene 1841052 1861234 . + . ID=gene183;Name=AC051649.3-013;name2=LSP1 chr11 ENCODE exon 1841052 1841420 . + . Parent=gene183 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene183 chr11 ENCODE CDS 1858026 1858030 . + 0 Parent=gene183 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene183 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene183 chr11 ENCODE exon 1861225 1861234 . + . Parent=gene183 chr11 ENCODE CDS 1861225 1861234 . + 1 Parent=gene183 ### chr11 ENCODE gene 1841978 1861803 . + . ID=gene184;Name=AC051649.3-014;name2=LSP1 chr11 ENCODE exon 1841978 1842040 . + . Parent=gene184 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene184 chr11 ENCODE CDS 1858026 1858030 . + 0 Parent=gene184 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene184 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene184 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene184 chr11 ENCODE CDS 1861225 1861366 . + 1 Parent=gene184 chr11 ENCODE exon 1861738 1861803 . + . Parent=gene184 chr11 ENCODE CDS 1861738 1861803 . + 0 Parent=gene184 ### chr11 ENCODE gene 1842971 1870069 . + . ID=gene185;Name=AC051649.3-001;name2=LSP1 chr11 ENCODE exon 1842971 1843068 . + . Parent=gene185 chr11 ENCODE exon 1844271 1844717 . + . Parent=gene185 chr11 ENCODE CDS 1844281 1844717 . + 0 Parent=gene185 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene185 chr11 ENCODE CDS 1857893 1858030 . + 1 Parent=gene185 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene185 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene185 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene185 chr11 ENCODE CDS 1861225 1861366 . + 1 Parent=gene185 chr11 ENCODE exon 1861738 1861830 . + . Parent=gene185 chr11 ENCODE CDS 1861738 1861830 . + 0 Parent=gene185 chr11 ENCODE exon 1862086 1862129 . + . Parent=gene185 chr11 ENCODE CDS 1862086 1862129 . + 0 Parent=gene185 chr11 ENCODE exon 1862306 1862387 . + . Parent=gene185 chr11 ENCODE CDS 1862306 1862387 . + 1 Parent=gene185 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene185 chr11 ENCODE CDS 1864538 1864672 . + 0 Parent=gene185 chr11 ENCODE exon 1865043 1865120 . + . Parent=gene185 chr11 ENCODE CDS 1865043 1865120 . + 0 Parent=gene185 chr11 ENCODE CDS 1865280 1865369 . + 0 Parent=gene185 chr11 ENCODE exon 1865280 1865382 . + . Parent=gene185 chr11 ENCODE exon 1869579 1870069 . + . Parent=gene185 ### chr11 ENCODE gene 1846479 1870069 . + . ID=gene186;Name=AC051649.3-005;name2=LSP1 chr11 ENCODE exon 1846479 1846792 . + . Parent=gene186 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene186 chr11 ENCODE CDS 1858026 1858030 . + 0 Parent=gene186 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene186 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene186 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene186 chr11 ENCODE CDS 1861225 1861366 . + 1 Parent=gene186 chr11 ENCODE exon 1861738 1861830 . + . Parent=gene186 chr11 ENCODE CDS 1861738 1861830 . + 0 Parent=gene186 chr11 ENCODE exon 1862086 1862129 . + . Parent=gene186 chr11 ENCODE CDS 1862086 1862129 . + 0 Parent=gene186 chr11 ENCODE exon 1862306 1862387 . + . Parent=gene186 chr11 ENCODE CDS 1862306 1862387 . + 1 Parent=gene186 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene186 chr11 ENCODE CDS 1864538 1864672 . + 0 Parent=gene186 chr11 ENCODE exon 1865043 1865120 . + . Parent=gene186 chr11 ENCODE CDS 1865043 1865120 . + 0 Parent=gene186 chr11 ENCODE CDS 1865280 1865369 . + 0 Parent=gene186 chr11 ENCODE exon 1865280 1865382 . + . Parent=gene186 chr11 ENCODE exon 1869579 1870069 . + . Parent=gene186 ### chr11 ENCODE gene 1846950 1861248 . + . ID=gene187;name2=LSP1;Name=AC051649.3-006 chr11 ENCODE exon 1846950 1847039 . + . Parent=gene187 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene187 chr11 ENCODE CDS 1858026 1858030 . + 0 Parent=gene187 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene187 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene187 chr11 ENCODE exon 1861225 1861248 . + . Parent=gene187 chr11 ENCODE CDS 1861225 1861248 . + 1 Parent=gene187 ### chr11 ENCODE gene 1847448 1864672 . + . ID=gene188;Name=AC051649.3-007;name2=LSP1 chr11 ENCODE exon 1847448 1847535 . + . Parent=gene188 chr11 ENCODE CDS 1847510 1847535 . + 0 Parent=gene188 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene188 chr11 ENCODE CDS 1857893 1858030 . + 1 Parent=gene188 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene188 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene188 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene188 chr11 ENCODE CDS 1861225 1861366 . + 1 Parent=gene188 chr11 ENCODE exon 1861738 1861830 . + . Parent=gene188 chr11 ENCODE CDS 1861738 1861830 . + 0 Parent=gene188 chr11 ENCODE exon 1862086 1862129 . + . Parent=gene188 chr11 ENCODE CDS 1862086 1862129 . + 0 Parent=gene188 chr11 ENCODE exon 1862306 1862387 . + . Parent=gene188 chr11 ENCODE CDS 1862306 1862387 . + 1 Parent=gene188 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene188 chr11 ENCODE CDS 1864538 1864672 . + 0 Parent=gene188 ### chr11 ENCODE gene 1847956 1861815 . + . ID=gene189;Name=AC051649.3-015;name2=LSP1 chr11 ENCODE exon 1847956 1848014 . + . Parent=gene189 chr11 ENCODE CDS 1848013 1848014 . + 0 Parent=gene189 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene189 chr11 ENCODE CDS 1857893 1858030 . + 1 Parent=gene189 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene189 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene189 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene189 chr11 ENCODE CDS 1861225 1861366 . + 1 Parent=gene189 chr11 ENCODE exon 1861738 1861815 . + . Parent=gene189 chr11 ENCODE CDS 1861738 1861815 . + 0 Parent=gene189 ### chr11 ENCODE gene 1848050 1870069 . + . ID=gene190;Name=AC051649.3-002;name2=LSP1 chr11 ENCODE exon 1848050 1849218 . + . Parent=gene190 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene190 chr11 ENCODE CDS 1858026 1858030 . + 0 Parent=gene190 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene190 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene190 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene190 chr11 ENCODE CDS 1861225 1861366 . + 1 Parent=gene190 chr11 ENCODE exon 1861738 1861830 . + . Parent=gene190 chr11 ENCODE CDS 1861738 1861830 . + 0 Parent=gene190 chr11 ENCODE exon 1862086 1862129 . + . Parent=gene190 chr11 ENCODE CDS 1862086 1862129 . + 0 Parent=gene190 chr11 ENCODE exon 1862306 1862387 . + . Parent=gene190 chr11 ENCODE CDS 1862306 1862387 . + 1 Parent=gene190 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene190 chr11 ENCODE CDS 1864538 1864672 . + 0 Parent=gene190 chr11 ENCODE exon 1865043 1865120 . + . Parent=gene190 chr11 ENCODE CDS 1865043 1865120 . + 0 Parent=gene190 chr11 ENCODE CDS 1865280 1865369 . + 0 Parent=gene190 chr11 ENCODE exon 1865280 1865382 . + . Parent=gene190 chr11 ENCODE exon 1869579 1870069 . + . Parent=gene190 ### chr11 ENCODE gene 1848692 1864672 . + . ID=gene191;Name=AC051649.3-008;name2=LSP1 chr11 ENCODE exon 1848692 1848779 . + . Parent=gene191 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene191 chr11 ENCODE CDS 1858026 1858030 . + 0 Parent=gene191 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene191 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene191 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene191 chr11 ENCODE CDS 1861225 1861366 . + 1 Parent=gene191 chr11 ENCODE exon 1861738 1861830 . + . Parent=gene191 chr11 ENCODE CDS 1861738 1861830 . + 0 Parent=gene191 chr11 ENCODE exon 1862086 1862129 . + . Parent=gene191 chr11 ENCODE CDS 1862086 1862129 . + 0 Parent=gene191 chr11 ENCODE exon 1862306 1862387 . + . Parent=gene191 chr11 ENCODE CDS 1862306 1862387 . + 1 Parent=gene191 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene191 chr11 ENCODE CDS 1864538 1864672 . + 0 Parent=gene191 ### chr11 ENCODE gene 1849158 1865382 . + . ID=gene192;Name=AC051649.3-009;name2=LSP1 chr11 ENCODE exon 1849158 1849218 . + . Parent=gene192 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene192 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene192 chr11 ENCODE exon 1861738 1861830 . + . Parent=gene192 chr11 ENCODE exon 1862086 1862129 . + . Parent=gene192 chr11 ENCODE exon 1862306 1862387 . + . Parent=gene192 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene192 chr11 ENCODE exon 1865043 1865120 . + . Parent=gene192 chr11 ENCODE exon 1865280 1865382 . + . Parent=gene192 ### chr11 ENCODE gene 1854283 1864672 . + . ID=gene193;Name=AC051649.3-010;name2=LSP1 chr11 ENCODE exon 1854283 1854451 . + . Parent=gene193 chr11 ENCODE exon 1857893 1858030 . + . Parent=gene193 chr11 ENCODE CDS 1858026 1858030 . + 0 Parent=gene193 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene193 chr11 ENCODE CDS 1859238 1859402 . + 1 Parent=gene193 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene193 chr11 ENCODE CDS 1861225 1861366 . + 1 Parent=gene193 chr11 ENCODE exon 1861738 1861830 . + . Parent=gene193 chr11 ENCODE CDS 1861738 1861830 . + 0 Parent=gene193 chr11 ENCODE exon 1862086 1862129 . + . Parent=gene193 chr11 ENCODE CDS 1862086 1862129 . + 0 Parent=gene193 chr11 ENCODE exon 1862306 1862387 . + . Parent=gene193 chr11 ENCODE CDS 1862306 1862387 . + 1 Parent=gene193 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene193 chr11 ENCODE CDS 1864538 1864672 . + 0 Parent=gene193 ### chr11 ENCODE gene 1858483 1870073 . + . ID=gene194;Name=AC051649.3-003;name2=LSP1 chr11 ENCODE exon 1858483 1859169 . + . Parent=gene194 chr11 ENCODE exon 1859238 1859402 . + . Parent=gene194 chr11 ENCODE exon 1861225 1861366 . + . Parent=gene194 chr11 ENCODE exon 1861738 1861830 . + . Parent=gene194 chr11 ENCODE exon 1862086 1862129 . + . Parent=gene194 chr11 ENCODE exon 1862306 1862387 . + . Parent=gene194 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene194 chr11 ENCODE exon 1865043 1865120 . + . Parent=gene194 chr11 ENCODE exon 1865280 1865382 . + . Parent=gene194 chr11 ENCODE exon 1869579 1870073 . + . Parent=gene194 ### chr11 ENCODE gene 1862194 1865308 . + . ID=gene195;Name=AC051649.3-011;name2=LSP1 chr11 ENCODE exon 1862194 1862387 . + . Parent=gene195 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene195 chr11 ENCODE exon 1865043 1865120 . + . Parent=gene195 chr11 ENCODE exon 1865280 1865308 . + . Parent=gene195 ### chr11 ENCODE gene 1864538 1865151 . + . ID=gene196;Name=AC051649.3-012;name2=LSP1 chr11 ENCODE exon 1864538 1864672 . + . Parent=gene196 chr11 ENCODE exon 1865043 1865151 . + . Parent=gene196 ### chr11 ENCODE gene 1866951 1868660 . - . ID=gene197;Name=AC051649.15-001;name2=AC051649.15 chr11 ENCODE CDS 1866951 1868369 . - 0 Parent=gene197 chr11 ENCODE exon 1866951 1868660 . - . Parent=gene197 ### chr11 ENCODE gene 1897368 1916512 . + . ID=gene198;Name=AC051649.4-001;name2=TNNT3 chr11 ENCODE exon 1897368 1897568 . + . Parent=gene198 chr11 ENCODE exon 1900663 1900697 . + . Parent=gene198 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene198 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene198 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene198 chr11 ENCODE exon 1901361 1901378 . + . Parent=gene198 chr11 ENCODE CDS 1901361 1901378 . + 2 Parent=gene198 chr11 ENCODE exon 1902905 1902922 . + . Parent=gene198 chr11 ENCODE CDS 1902905 1902922 . + 2 Parent=gene198 chr11 ENCODE exon 1904501 1904515 . + . Parent=gene198 chr11 ENCODE CDS 1904501 1904515 . + 2 Parent=gene198 chr11 ENCODE exon 1906926 1906949 . + . Parent=gene198 chr11 ENCODE CDS 1906926 1906949 . + 2 Parent=gene198 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene198 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene198 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene198 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene198 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene198 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene198 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene198 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene198 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene198 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene198 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene198 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene198 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene198 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene198 chr11 ENCODE exon 1914769 1914809 . + . Parent=gene198 chr11 ENCODE CDS 1914769 1914809 . + 0 Parent=gene198 chr11 ENCODE CDS 1916244 1916298 . + 1 Parent=gene198 chr11 ENCODE exon 1916244 1916512 . + . Parent=gene198 ### chr11 ENCODE gene 1897512 1912725 . + . ID=gene199;Name=AC051649.4-007;name2=TNNT3 chr11 ENCODE exon 1897512 1897568 . + . Parent=gene199 chr11 ENCODE exon 1900663 1900697 . + . Parent=gene199 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene199 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene199 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene199 chr11 ENCODE exon 1901361 1901378 . + . Parent=gene199 chr11 ENCODE CDS 1901361 1901378 . + 2 Parent=gene199 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene199 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene199 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene199 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene199 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene199 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene199 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene199 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene199 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene199 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene199 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene199 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene199 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene199 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene199 ### chr11 ENCODE gene 1897512 1916507 . + . ID=gene200;Name=AC051649.4-006;name2=TNNT3 chr11 ENCODE exon 1897512 1897568 . + . Parent=gene200 chr11 ENCODE exon 1900663 1900697 . + . Parent=gene200 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene200 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene200 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene200 chr11 ENCODE exon 1902905 1902922 . + . Parent=gene200 chr11 ENCODE CDS 1902905 1902922 . + 2 Parent=gene200 chr11 ENCODE exon 1904501 1904515 . + . Parent=gene200 chr11 ENCODE CDS 1904501 1904515 . + 2 Parent=gene200 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene200 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene200 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene200 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene200 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene200 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene200 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene200 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene200 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene200 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene200 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene200 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene200 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene200 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene200 chr11 ENCODE exon 1914769 1914809 . + . Parent=gene200 chr11 ENCODE CDS 1914769 1914809 . + 0 Parent=gene200 chr11 ENCODE CDS 1916244 1916298 . + 1 Parent=gene200 chr11 ENCODE exon 1916244 1916507 . + . Parent=gene200 ### chr11 ENCODE gene 1897512 1916512 . + . ID=gene201;Name=AC051649.4-002;name2=TNNT3 chr11 ENCODE exon 1897512 1897568 . + . Parent=gene201 chr11 ENCODE exon 1900663 1900697 . + . Parent=gene201 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene201 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene201 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene201 chr11 ENCODE exon 1901361 1901378 . + . Parent=gene201 chr11 ENCODE CDS 1901361 1901378 . + 2 Parent=gene201 chr11 ENCODE exon 1902905 1902922 . + . Parent=gene201 chr11 ENCODE CDS 1902905 1902922 . + 2 Parent=gene201 chr11 ENCODE exon 1903062 1903082 . + . Parent=gene201 chr11 ENCODE CDS 1903062 1903082 . + 2 Parent=gene201 chr11 ENCODE exon 1904276 1904287 . + . Parent=gene201 chr11 ENCODE CDS 1904276 1904287 . + 2 Parent=gene201 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene201 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene201 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene201 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene201 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene201 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene201 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene201 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene201 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene201 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene201 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene201 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene201 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene201 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene201 chr11 ENCODE exon 1914769 1914809 . + . Parent=gene201 chr11 ENCODE CDS 1914769 1914809 . + 0 Parent=gene201 chr11 ENCODE CDS 1916244 1916298 . + 1 Parent=gene201 chr11 ENCODE exon 1916244 1916512 . + . Parent=gene201 ### chr11 ENCODE gene 1897512 1916512 . + . ID=gene202;Name=AC051649.4-003;name2=TNNT3 chr11 ENCODE exon 1897512 1897568 . + . Parent=gene202 chr11 ENCODE exon 1900663 1900697 . + . Parent=gene202 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene202 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene202 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene202 chr11 ENCODE exon 1901361 1901378 . + . Parent=gene202 chr11 ENCODE CDS 1901361 1901378 . + 2 Parent=gene202 chr11 ENCODE exon 1902905 1902922 . + . Parent=gene202 chr11 ENCODE CDS 1902905 1902922 . + 2 Parent=gene202 chr11 ENCODE exon 1904501 1904515 . + . Parent=gene202 chr11 ENCODE CDS 1904501 1904515 . + 2 Parent=gene202 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene202 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene202 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene202 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene202 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene202 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene202 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene202 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene202 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene202 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene202 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene202 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene202 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene202 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene202 chr11 ENCODE exon 1914020 1914060 . + . Parent=gene202 chr11 ENCODE CDS 1914020 1914060 . + 0 Parent=gene202 chr11 ENCODE CDS 1916244 1916298 . + 1 Parent=gene202 chr11 ENCODE exon 1916244 1916512 . + . Parent=gene202 ### chr11 ENCODE gene 1897529 1916298 . + . ID=gene203;Name=AC051649.4-012;name2=TNNT3 chr11 ENCODE exon 1897529 1897568 . + . Parent=gene203 chr11 ENCODE exon 1900663 1900697 . + . Parent=gene203 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene203 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene203 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene203 chr11 ENCODE exon 1901361 1901378 . + . Parent=gene203 chr11 ENCODE CDS 1901361 1901378 . + 2 Parent=gene203 chr11 ENCODE exon 1902905 1902922 . + . Parent=gene203 chr11 ENCODE CDS 1902905 1902922 . + 2 Parent=gene203 chr11 ENCODE exon 1903062 1903082 . + . Parent=gene203 chr11 ENCODE CDS 1903062 1903082 . + 2 Parent=gene203 chr11 ENCODE exon 1904276 1904287 . + . Parent=gene203 chr11 ENCODE CDS 1904276 1904287 . + 2 Parent=gene203 chr11 ENCODE exon 1904501 1904515 . + . Parent=gene203 chr11 ENCODE CDS 1904501 1904515 . + 2 Parent=gene203 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene203 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene203 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene203 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene203 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene203 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene203 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene203 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene203 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene203 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene203 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene203 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene203 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene203 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene203 chr11 ENCODE exon 1914769 1914809 . + . Parent=gene203 chr11 ENCODE CDS 1914769 1914809 . + 0 Parent=gene203 chr11 ENCODE exon 1916244 1916298 . + . Parent=gene203 chr11 ENCODE CDS 1916244 1916298 . + 1 Parent=gene203 ### chr11 ENCODE gene 1897531 1916298 . + . ID=gene204;name2=TNNT3;Name=AC051649.4-011 chr11 ENCODE exon 1897531 1897568 . + . Parent=gene204 chr11 ENCODE exon 1900663 1900697 . + . Parent=gene204 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene204 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene204 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene204 chr11 ENCODE exon 1901361 1901378 . + . Parent=gene204 chr11 ENCODE CDS 1901361 1901378 . + 2 Parent=gene204 chr11 ENCODE exon 1902905 1902922 . + . Parent=gene204 chr11 ENCODE CDS 1902905 1902922 . + 2 Parent=gene204 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene204 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene204 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene204 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene204 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene204 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene204 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene204 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene204 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene204 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene204 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene204 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene204 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene204 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene204 chr11 ENCODE exon 1914769 1914809 . + . Parent=gene204 chr11 ENCODE CDS 1914769 1914809 . + 0 Parent=gene204 chr11 ENCODE exon 1916244 1916298 . + . Parent=gene204 chr11 ENCODE CDS 1916244 1916298 . + 1 Parent=gene204 ### chr11 ENCODE gene 1899165 1916512 . + . ID=gene205;Name=AC051649.4-004;name2=TNNT3 chr11 ENCODE exon 1899165 1899425 . + . Parent=gene205 chr11 ENCODE exon 1900663 1900697 . + . Parent=gene205 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene205 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene205 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene205 chr11 ENCODE exon 1901361 1901378 . + . Parent=gene205 chr11 ENCODE CDS 1901361 1901378 . + 2 Parent=gene205 chr11 ENCODE exon 1902905 1902922 . + . Parent=gene205 chr11 ENCODE CDS 1902905 1902922 . + 2 Parent=gene205 chr11 ENCODE exon 1904501 1904515 . + . Parent=gene205 chr11 ENCODE CDS 1904501 1904515 . + 2 Parent=gene205 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene205 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene205 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene205 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene205 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene205 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene205 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene205 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene205 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene205 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene205 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene205 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene205 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene205 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene205 chr11 ENCODE exon 1914769 1914809 . + . Parent=gene205 chr11 ENCODE CDS 1914769 1914809 . + 0 Parent=gene205 chr11 ENCODE CDS 1916244 1916298 . + 1 Parent=gene205 chr11 ENCODE exon 1916244 1916512 . + . Parent=gene205 ### chr11 ENCODE gene 1900673 1916298 . + . ID=gene206;Name=AC051649.4-010;name2=TNNT3 chr11 ENCODE exon 1900673 1900697 . + . Parent=gene206 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene206 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene206 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene206 chr11 ENCODE exon 1901361 1901378 . + . Parent=gene206 chr11 ENCODE CDS 1901361 1901378 . + 2 Parent=gene206 chr11 ENCODE exon 1902905 1902922 . + . Parent=gene206 chr11 ENCODE CDS 1902905 1902922 . + 2 Parent=gene206 chr11 ENCODE exon 1903062 1903082 . + . Parent=gene206 chr11 ENCODE CDS 1903062 1903082 . + 2 Parent=gene206 chr11 ENCODE exon 1904276 1904287 . + . Parent=gene206 chr11 ENCODE CDS 1904276 1904287 . + 2 Parent=gene206 chr11 ENCODE exon 1904501 1904515 . + . Parent=gene206 chr11 ENCODE CDS 1904501 1904515 . + 2 Parent=gene206 chr11 ENCODE exon 1906926 1906949 . + . Parent=gene206 chr11 ENCODE CDS 1906926 1906949 . + 2 Parent=gene206 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene206 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene206 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene206 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene206 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene206 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene206 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene206 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene206 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene206 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene206 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene206 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene206 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene206 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene206 chr11 ENCODE exon 1914769 1914809 . + . Parent=gene206 chr11 ENCODE CDS 1914769 1914809 . + 0 Parent=gene206 chr11 ENCODE exon 1916244 1916298 . + . Parent=gene206 chr11 ENCODE CDS 1916244 1916298 . + 1 Parent=gene206 ### chr11 ENCODE gene 1900681 1916292 . + . ID=gene207;Name=AC051649.4-015;name2=TNNT3 chr11 ENCODE exon 1900681 1900697 . + . Parent=gene207 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene207 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene207 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene207 chr11 ENCODE exon 1902905 1902922 . + . Parent=gene207 chr11 ENCODE CDS 1902905 1902922 . + 2 Parent=gene207 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene207 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene207 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene207 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene207 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene207 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene207 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene207 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene207 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene207 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene207 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene207 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene207 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene207 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene207 chr11 ENCODE exon 1914020 1914060 . + . Parent=gene207 chr11 ENCODE CDS 1914020 1914060 . + 0 Parent=gene207 chr11 ENCODE exon 1916244 1916292 . + . Parent=gene207 chr11 ENCODE CDS 1916244 1916292 . + 1 Parent=gene207 ### chr11 ENCODE gene 1900681 1916292 . + . ID=gene208;Name=AC051649.4-014;name2=TNNT3 chr11 ENCODE exon 1900681 1900697 . + . Parent=gene208 chr11 ENCODE CDS 1900681 1900697 . + 0 Parent=gene208 chr11 ENCODE exon 1900854 1900867 . + . Parent=gene208 chr11 ENCODE CDS 1900854 1900867 . + 1 Parent=gene208 chr11 ENCODE exon 1902905 1902922 . + . Parent=gene208 chr11 ENCODE CDS 1902905 1902922 . + 2 Parent=gene208 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene208 chr11 ENCODE CDS 1907616 1907634 . + 2 Parent=gene208 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene208 chr11 ENCODE CDS 1910275 1910320 . + 1 Parent=gene208 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene208 chr11 ENCODE CDS 1911527 1911643 . + 0 Parent=gene208 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene208 chr11 ENCODE CDS 1911737 1911814 . + 0 Parent=gene208 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene208 chr11 ENCODE CDS 1912138 1912251 . + 0 Parent=gene208 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene208 chr11 ENCODE CDS 1912352 1912461 . + 0 Parent=gene208 chr11 ENCODE exon 1912635 1912725 . + . Parent=gene208 chr11 ENCODE CDS 1912635 1912725 . + 1 Parent=gene208 chr11 ENCODE exon 1914769 1914809 . + . Parent=gene208 chr11 ENCODE CDS 1914769 1914809 . + 0 Parent=gene208 chr11 ENCODE exon 1916244 1916292 . + . Parent=gene208 chr11 ENCODE CDS 1916244 1916292 . + 1 Parent=gene208 ### chr11 ENCODE gene 1902724 1912461 . + . ID=gene209;Name=AC051649.4-009;name2=TNNT3 chr11 ENCODE exon 1902724 1902922 . + . Parent=gene209 chr11 ENCODE exon 1903062 1903082 . + . Parent=gene209 chr11 ENCODE exon 1904276 1904287 . + . Parent=gene209 chr11 ENCODE exon 1904501 1904515 . + . Parent=gene209 chr11 ENCODE exon 1906874 1906949 . + . Parent=gene209 chr11 ENCODE exon 1907616 1907634 . + . Parent=gene209 chr11 ENCODE exon 1910275 1910320 . + . Parent=gene209 chr11 ENCODE exon 1911527 1911643 . + . Parent=gene209 chr11 ENCODE exon 1911737 1911814 . + . Parent=gene209 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene209 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene209 ### chr11 ENCODE gene 1911679 1913387 . + . ID=gene210;Name=AC051649.4-008;name2=TNNT3 chr11 ENCODE exon 1911679 1911814 . + . Parent=gene210 chr11 ENCODE exon 1912138 1912251 . + . Parent=gene210 chr11 ENCODE exon 1912352 1912461 . + . Parent=gene210 chr11 ENCODE exon 1912635 1913387 . + . Parent=gene210 ### chr11 ENCODE gene 1916006 1916508 . + . ID=gene211;name2=TNNT3;Name=AC051649.4-016 chr11 ENCODE exon 1916006 1916074 . + . Parent=gene211 chr11 ENCODE exon 1916244 1916508 . + . Parent=gene211 ### chr11 ENCODE gene 1925084 1934415 . + . ID=gene212;Name=AC051649.5-001;name2=MRPL23 chr11 ENCODE exon 1925084 1925185 . + . Parent=gene212 chr11 ENCODE CDS 1925169 1925185 . + 0 Parent=gene212 chr11 ENCODE exon 1928705 1928827 . + . Parent=gene212 chr11 ENCODE CDS 1928705 1928827 . + 1 Parent=gene212 chr11 ENCODE exon 1929933 1930015 . + . Parent=gene212 chr11 ENCODE CDS 1929933 1930015 . + 1 Parent=gene212 chr11 ENCODE exon 1930588 1930661 . + . Parent=gene212 chr11 ENCODE CDS 1930588 1930661 . + 2 Parent=gene212 chr11 ENCODE CDS 1934062 1934226 . + 0 Parent=gene212 chr11 ENCODE exon 1934062 1934415 . + . Parent=gene212 ### chr11 ENCODE gene 1925084 1934415 . + . ID=gene213;Name=AC051649.5-007;name2=MRPL23 chr11 ENCODE exon 1925084 1925185 . + . Parent=gene213 chr11 ENCODE CDS 1925169 1925185 . + 0 Parent=gene213 chr11 ENCODE exon 1928705 1928827 . + . Parent=gene213 chr11 ENCODE CDS 1928705 1928827 . + 1 Parent=gene213 chr11 ENCODE exon 1929933 1930015 . + . Parent=gene213 chr11 ENCODE CDS 1929933 1930015 . + 1 Parent=gene213 chr11 ENCODE exon 1930588 1930661 . + . Parent=gene213 chr11 ENCODE CDS 1930588 1930661 . + 2 Parent=gene213 chr11 ENCODE CDS 1934062 1934226 . + 0 Parent=gene213 chr11 ENCODE exon 1934062 1934254 . + . Parent=gene213 chr11 ENCODE exon 1934348 1934415 . + . Parent=gene213 ### chr11 ENCODE gene 1925138 1962328 . + . ID=gene214;name2=MRPL23;Name=AC051649.5-009 chr11 ENCODE exon 1925138 1925185 . + . Parent=gene214 chr11 ENCODE CDS 1925169 1925185 . + 0 Parent=gene214 chr11 ENCODE exon 1928705 1928827 . + . Parent=gene214 chr11 ENCODE CDS 1928705 1928827 . + 1 Parent=gene214 chr11 ENCODE exon 1929933 1930015 . + . Parent=gene214 chr11 ENCODE CDS 1929933 1930015 . + 1 Parent=gene214 chr11 ENCODE exon 1930588 1930661 . + . Parent=gene214 chr11 ENCODE CDS 1930588 1930661 . + 2 Parent=gene214 chr11 ENCODE exon 1950365 1950564 . + . Parent=gene214 chr11 ENCODE CDS 1950365 1950564 . + 0 Parent=gene214 chr11 ENCODE CDS 1962244 1962322 . + 1 Parent=gene214 chr11 ENCODE exon 1962244 1962328 . + . Parent=gene214 ### chr11 ENCODE gene 1925147 1940644 . + . ID=gene215;Name=AC051649.5-002;name2=MRPL23 chr11 ENCODE exon 1925147 1925185 . + . Parent=gene215 chr11 ENCODE CDS 1925169 1925185 . + 0 Parent=gene215 chr11 ENCODE exon 1928705 1928827 . + . Parent=gene215 chr11 ENCODE CDS 1928705 1928827 . + 1 Parent=gene215 chr11 ENCODE exon 1929933 1930015 . + . Parent=gene215 chr11 ENCODE CDS 1929933 1930015 . + 1 Parent=gene215 chr11 ENCODE exon 1930588 1930661 . + . Parent=gene215 chr11 ENCODE CDS 1930588 1930661 . + 2 Parent=gene215 chr11 ENCODE CDS 1940045 1940239 . + 0 Parent=gene215 chr11 ENCODE exon 1940045 1940644 . + . Parent=gene215 ### chr11 ENCODE gene 1925150 1950599 . + . ID=gene216;Name=AC051649.5-011;name2=MRPL23 chr11 ENCODE exon 1925150 1925185 . + . Parent=gene216 chr11 ENCODE CDS 1925169 1925185 . + 0 Parent=gene216 chr11 ENCODE exon 1928705 1928827 . + . Parent=gene216 chr11 ENCODE CDS 1928705 1928827 . + 1 Parent=gene216 chr11 ENCODE exon 1929933 1930015 . + . Parent=gene216 chr11 ENCODE CDS 1929933 1930015 . + 1 Parent=gene216 chr11 ENCODE exon 1930588 1930661 . + . Parent=gene216 chr11 ENCODE CDS 1930588 1930661 . + 2 Parent=gene216 chr11 ENCODE CDS 1950365 1950568 . + 0 Parent=gene216 chr11 ENCODE exon 1950365 1950599 . + . Parent=gene216 ### chr11 ENCODE gene 1925156 1956250 . + . ID=gene217;Name=AC051649.5-010;name2=MRPL23 chr11 ENCODE exon 1925156 1925185 . + . Parent=gene217 chr11 ENCODE exon 1928705 1928771 . + . Parent=gene217 chr11 ENCODE exon 1951565 1956250 . + . Parent=gene217 ### chr11 ENCODE gene 1925360 1934415 . + . ID=gene218;Name=AC051649.5-004;name2=MRPL23 chr11 ENCODE exon 1925360 1925384 . + . Parent=gene218 chr11 ENCODE exon 1928705 1928827 . + . Parent=gene218 chr11 ENCODE exon 1929933 1930015 . + . Parent=gene218 chr11 ENCODE exon 1930588 1930661 . + . Parent=gene218 chr11 ENCODE exon 1934062 1934415 . + . Parent=gene218 ### chr11 ENCODE gene 1927346 1928827 . + . ID=gene219;Name=AC051649.5-008;name2=MRPL23 chr11 ENCODE exon 1927346 1927967 . + . Parent=gene219 chr11 ENCODE exon 1928705 1928827 . + . Parent=gene219 ### chr11 ENCODE gene 1928705 1934415 . + . ID=gene220;Name=AC051649.5-003;name2=MRPL23 chr11 ENCODE exon 1928705 1928827 . + . Parent=gene220 chr11 ENCODE exon 1929933 1930015 . + . Parent=gene220 chr11 ENCODE exon 1930588 1930661 . + . Parent=gene220 chr11 ENCODE exon 1933417 1933587 . + . Parent=gene220 chr11 ENCODE exon 1934062 1934415 . + . Parent=gene220 ### chr11 ENCODE gene 1928716 1931128 . + . ID=gene221;Name=AC051649.5-006;name2=MRPL23 chr11 ENCODE exon 1928716 1928827 . + . Parent=gene221 chr11 ENCODE exon 1929933 1930015 . + . Parent=gene221 chr11 ENCODE exon 1930588 1931128 . + . Parent=gene221 ### chr11 ENCODE gene 1933383 1934152 . + . ID=gene222;Name=AC051649.5-005;name2=MRPL23 chr11 ENCODE exon 1933383 1933523 . + . Parent=gene222 chr11 ENCODE exon 1934062 1934152 . + . Parent=gene222 ### chr11 ENCODE gene 2106918 2115096 . - . ID=gene223;Name=AC132217.1-003;name2=IGF2 chr11 ENCODE exon 2106918 2111029 . - . Parent=gene223 chr11 ENCODE CDS 2110793 2111029 . - 0 Parent=gene223 chr11 ENCODE exon 2111323 2111471 . - . Parent=gene223 chr11 ENCODE CDS 2111323 2111471 . - 2 Parent=gene223 chr11 ENCODE CDS 2113173 2113329 . - 0 Parent=gene223 chr11 ENCODE exon 2113173 2113335 . - . Parent=gene223 chr11 ENCODE exon 2114994 2115096 . - . Parent=gene223 ### chr11 ENCODE gene 2106918 2116780 . - . ID=gene224;Name=AC132217.1-002;name2=IGF2 chr11 ENCODE exon 2106918 2111029 . - . Parent=gene224 chr11 ENCODE CDS 2110793 2111029 . - 0 Parent=gene224 chr11 ENCODE exon 2111323 2111480 . - . Parent=gene224 chr11 ENCODE CDS 2111323 2111480 . - 2 Parent=gene224 chr11 ENCODE CDS 2113173 2113329 . - 0 Parent=gene224 chr11 ENCODE exon 2113173 2113335 . - . Parent=gene224 chr11 ENCODE exon 2116035 2116780 . - . Parent=gene224 ### chr11 ENCODE gene 2106918 2117195 . - . ID=gene225;Name=AC132217.1-001;name2=IGF2 chr11 ENCODE exon 2106918 2111029 . - . Parent=gene225 chr11 ENCODE CDS 2110793 2111029 . - 0 Parent=gene225 chr11 ENCODE exon 2111323 2111471 . - . Parent=gene225 chr11 ENCODE CDS 2111323 2111471 . - 2 Parent=gene225 chr11 ENCODE CDS 2113173 2113329 . - 0 Parent=gene225 chr11 ENCODE exon 2113173 2113335 . - . Parent=gene225 chr11 ENCODE exon 2116035 2117195 . - . Parent=gene225 ### chr11 ENCODE gene 2110344 2138796 . - . ID=gene226;Name=AC132217.1-008;name2=IGF2 chr11 ENCODE exon 2110344 2111029 . - . Parent=gene226 chr11 ENCODE exon 2111323 2111471 . - . Parent=gene226 chr11 ENCODE exon 2113173 2113335 . - . Parent=gene226 chr11 ENCODE exon 2125372 2125613 . - . Parent=gene226 chr11 ENCODE exon 2126932 2127151 . - . Parent=gene226 chr11 ENCODE exon 2138591 2138796 . - . Parent=gene226 ### chr11 ENCODE gene 2110446 2115093 . - . ID=gene227;Name=AC132217.1-004;name2=IGF2 chr11 ENCODE exon 2110446 2111029 . - . Parent=gene227 chr11 ENCODE CDS 2110793 2111029 . - 0 Parent=gene227 chr11 ENCODE exon 2111323 2111480 . - . Parent=gene227 chr11 ENCODE CDS 2111323 2111480 . - 2 Parent=gene227 chr11 ENCODE CDS 2113173 2113329 . - 0 Parent=gene227 chr11 ENCODE exon 2113173 2113335 . - . Parent=gene227 chr11 ENCODE exon 2114994 2115093 . - . Parent=gene227 ### chr11 ENCODE gene 2110479 2118822 . - . ID=gene228;name2=IGF2;Name=AC132217.1-009 chr11 ENCODE exon 2110479 2111029 . - . Parent=gene228 chr11 ENCODE CDS 2110793 2111029 . - 0 Parent=gene228 chr11 ENCODE exon 2111323 2111471 . - . Parent=gene228 chr11 ENCODE CDS 2111323 2111471 . - 2 Parent=gene228 chr11 ENCODE CDS 2113173 2113329 . - 0 Parent=gene228 chr11 ENCODE exon 2113173 2113335 . - . Parent=gene228 chr11 ENCODE exon 2118663 2118822 . - . Parent=gene228 ### chr11 ENCODE gene 2110522 2115111 . - . ID=gene229;Name=AC132217.1-005;name2=IGF2 chr11 ENCODE exon 2110522 2111029 . - . Parent=gene229 chr11 ENCODE CDS 2110793 2111029 . - 0 Parent=gene229 chr11 ENCODE exon 2111323 2111471 . - . Parent=gene229 chr11 ENCODE CDS 2111323 2111471 . - 2 Parent=gene229 chr11 ENCODE CDS 2113173 2113329 . - 0 Parent=gene229 chr11 ENCODE exon 2113173 2113335 . - . Parent=gene229 chr11 ENCODE exon 2114998 2115111 . - . Parent=gene229 ### chr11 ENCODE gene 2110619 2115093 . - . ID=gene230;Name=AC132217.1-006;name2=IGF2 chr11 ENCODE exon 2110619 2111029 . - . Parent=gene230 chr11 ENCODE CDS 2110793 2111029 . - 0 Parent=gene230 chr11 ENCODE exon 2111323 2111480 . - . Parent=gene230 chr11 ENCODE CDS 2111323 2111480 . - 2 Parent=gene230 chr11 ENCODE CDS 2113173 2113329 . - 0 Parent=gene230 chr11 ENCODE exon 2113173 2113335 . - . Parent=gene230 chr11 ENCODE exon 2114998 2115093 . - . Parent=gene230 ### chr11 ENCODE gene 2110872 2115461 . - . ID=gene231;Name=AC132217.1-012;name2=IGF2 chr11 ENCODE exon 2110872 2111029 . - . Parent=gene231 chr11 ENCODE exon 2111323 2111480 . - . Parent=gene231 chr11 ENCODE exon 2113173 2113335 . - . Parent=gene231 chr11 ENCODE exon 2115359 2115461 . - . Parent=gene231 ### chr11 ENCODE gene 2111357 2119044 . - . ID=gene232;Name=AC132217.1-007;name2=IGF2 chr11 ENCODE exon 2111357 2111471 . - . Parent=gene232 chr11 ENCODE CDS 2111357 2111471 . - 2 Parent=gene232 chr11 ENCODE exon 2113173 2113335 . - . Parent=gene232 chr11 ENCODE CDS 2113173 2113335 . - 0 Parent=gene232 chr11 ENCODE CDS 2117941 2118102 . - 0 Parent=gene232 chr11 ENCODE exon 2117941 2118105 . - . Parent=gene232 chr11 ENCODE exon 2118663 2119044 . - . Parent=gene232 ### chr11 ENCODE gene 2118307 2126448 . + . ID=gene233;Name=AC132217.6-002;name2=IGF2AS chr11 ENCODE exon 2118307 2118753 . + . Parent=gene233 chr11 ENCODE exon 2124162 2124333 . + . Parent=gene233 chr11 ENCODE exon 2125124 2126448 . + . Parent=gene233 ### chr11 ENCODE gene 2118323 2126470 . + . ID=gene234;Name=AC132217.6-001;name2=IGF2AS chr11 ENCODE exon 2118323 2118753 . + . Parent=gene234 chr11 ENCODE exon 2124051 2124333 . + . Parent=gene234 chr11 ENCODE exon 2125124 2126470 . + . Parent=gene234 ### chr11 ENCODE gene 2118450 2125613 . + . ID=gene235;Name=AC132217.6-003;name2=IGF2AS chr11 ENCODE exon 2118450 2118753 . + . Parent=gene235 chr11 ENCODE CDS 2118450 2118753 . + 0 Parent=gene235 chr11 ENCODE CDS 2124051 2124253 . + 2 Parent=gene235 chr11 ENCODE exon 2124051 2125613 . + . Parent=gene235 ### chr11 ENCODE gene 2124429 2136464 . - . ID=gene236;Name=AC132217.1-010;name2=IGF2 chr11 ENCODE exon 2124429 2124551 . - . Parent=gene236 chr11 ENCODE exon 2125372 2125613 . - . Parent=gene236 chr11 ENCODE exon 2126932 2127151 . - . Parent=gene236 chr11 ENCODE exon 2136073 2136464 . - . Parent=gene236 ### chr11 ENCODE gene 2126740 2136142 . - . ID=gene237;name2=IGF2;Name=AC132217.1-011 chr11 ENCODE exon 2126740 2127151 . - . Parent=gene237 chr11 ENCODE exon 2136073 2136142 . - . Parent=gene237 ### chr11 ENCODE gene 2137584 2138797 . - . ID=gene238;Name=AC132217.5-006;name2=INS chr11 ENCODE exon 2137584 2137767 . - . Parent=gene238 chr11 ENCODE CDS 2137658 2137767 . - 2 Parent=gene238 chr11 ENCODE CDS 2138591 2138777 . - 0 Parent=gene238 chr11 ENCODE exon 2138591 2138797 . - . Parent=gene238 ### chr11 ENCODE gene 2137585 2139000 . - . ID=gene239;Name=AC132217.5-004;name2=INS chr11 ENCODE exon 2137585 2137833 . - . Parent=gene239 chr11 ENCODE exon 2138591 2138794 . - . Parent=gene239 chr11 ENCODE exon 2138974 2139000 . - . Parent=gene239 ### chr11 ENCODE gene 2137585 2139010 . - . ID=gene240;Name=AC132217.5-003;name2=INS chr11 ENCODE exon 2137585 2137803 . - . Parent=gene240 chr11 ENCODE CDS 2137658 2137803 . - 2 Parent=gene240 chr11 ENCODE CDS 2138591 2138777 . - 0 Parent=gene240 chr11 ENCODE exon 2138591 2139010 . - . Parent=gene240 ### chr11 ENCODE gene 2137585 2139027 . - . ID=gene241;Name=AC132217.5-002;name2=INS chr11 ENCODE exon 2137585 2137803 . - . Parent=gene241 chr11 ENCODE CDS 2137658 2137803 . - 2 Parent=gene241 chr11 ENCODE CDS 2138591 2138777 . - 0 Parent=gene241 chr11 ENCODE exon 2138591 2138794 . - . Parent=gene241 chr11 ENCODE exon 2138948 2139027 . - . Parent=gene241 ### chr11 ENCODE gene 2137585 2139147 . - . ID=gene242;Name=AC132217.5-001;name2=INS chr11 ENCODE exon 2137585 2137803 . - . Parent=gene242 chr11 ENCODE CDS 2137658 2137803 . - 2 Parent=gene242 chr11 ENCODE CDS 2138591 2138777 . - 0 Parent=gene242 chr11 ENCODE exon 2138591 2138794 . - . Parent=gene242 chr11 ENCODE exon 2138974 2139147 . - . Parent=gene242 ### chr11 ENCODE gene 2137589 2138964 . - . ID=gene243;Name=AC132217.5-005;name2=INS chr11 ENCODE exon 2137589 2137678 . - . Parent=gene243 chr11 ENCODE CDS 2137589 2137678 . - 2 Parent=gene243 chr11 ENCODE CDS 2138591 2138777 . - 0 Parent=gene243 chr11 ENCODE exon 2138591 2138964 . - . Parent=gene243 ### chr11 ENCODE gene 2141735 2149611 . - . ID=gene244;Name=AC132217.7-003;name2=TH chr11 ENCODE exon 2141735 2142198 . - . Parent=gene244 chr11 ENCODE CDS 2142039 2142198 . - 1 Parent=gene244 chr11 ENCODE exon 2143038 2143171 . - . Parent=gene244 chr11 ENCODE CDS 2143038 2143171 . - 0 Parent=gene244 chr11 ENCODE exon 2143474 2143569 . - . Parent=gene244 chr11 ENCODE CDS 2143474 2143569 . - 0 Parent=gene244 chr11 ENCODE exon 2143808 2143864 . - . Parent=gene244 chr11 ENCODE CDS 2143808 2143864 . - 0 Parent=gene244 chr11 ENCODE exon 2144286 2144355 . - . Parent=gene244 chr11 ENCODE CDS 2144286 2144355 . - 1 Parent=gene244 chr11 ENCODE exon 2144439 2144574 . - . Parent=gene244 chr11 ENCODE CDS 2144439 2144574 . - 2 Parent=gene244 chr11 ENCODE exon 2144693 2144838 . - . Parent=gene244 chr11 ENCODE CDS 2144693 2144838 . - 1 Parent=gene244 chr11 ENCODE exon 2145241 2145291 . - . Parent=gene244 chr11 ENCODE CDS 2145241 2145291 . - 1 Parent=gene244 chr11 ENCODE exon 2145672 2145739 . - . Parent=gene244 chr11 ENCODE CDS 2145672 2145739 . - 0 Parent=gene244 chr11 ENCODE exon 2145897 2145985 . - . Parent=gene244 chr11 ENCODE CDS 2145897 2145985 . - 2 Parent=gene244 chr11 ENCODE exon 2146297 2146471 . - . Parent=gene244 chr11 ENCODE CDS 2146297 2146471 . - 0 Parent=gene244 chr11 ENCODE exon 2147456 2147677 . - . Parent=gene244 chr11 ENCODE CDS 2147456 2147677 . - 0 Parent=gene244 chr11 ENCODE exon 2148496 2148576 . - . Parent=gene244 chr11 ENCODE CDS 2148496 2148576 . - 0 Parent=gene244 chr11 ENCODE CDS 2149503 2149592 . - 0 Parent=gene244 chr11 ENCODE exon 2149503 2149611 . - . Parent=gene244 ### chr11 ENCODE gene 2141735 2149611 . - . ID=gene245;Name=AC132217.7-002;name2=TH chr11 ENCODE exon 2141735 2142198 . - . Parent=gene245 chr11 ENCODE CDS 2142039 2142198 . - 1 Parent=gene245 chr11 ENCODE exon 2143038 2143171 . - . Parent=gene245 chr11 ENCODE CDS 2143038 2143171 . - 0 Parent=gene245 chr11 ENCODE exon 2143474 2143569 . - . Parent=gene245 chr11 ENCODE CDS 2143474 2143569 . - 0 Parent=gene245 chr11 ENCODE exon 2143808 2143864 . - . Parent=gene245 chr11 ENCODE CDS 2143808 2143864 . - 0 Parent=gene245 chr11 ENCODE exon 2144286 2144355 . - . Parent=gene245 chr11 ENCODE CDS 2144286 2144355 . - 1 Parent=gene245 chr11 ENCODE exon 2144439 2144574 . - . Parent=gene245 chr11 ENCODE CDS 2144439 2144574 . - 2 Parent=gene245 chr11 ENCODE exon 2144693 2144838 . - . Parent=gene245 chr11 ENCODE CDS 2144693 2144838 . - 1 Parent=gene245 chr11 ENCODE exon 2145241 2145291 . - . Parent=gene245 chr11 ENCODE CDS 2145241 2145291 . - 1 Parent=gene245 chr11 ENCODE exon 2145672 2145739 . - . Parent=gene245 chr11 ENCODE CDS 2145672 2145739 . - 0 Parent=gene245 chr11 ENCODE exon 2145897 2145985 . - . Parent=gene245 chr11 ENCODE CDS 2145897 2145985 . - 2 Parent=gene245 chr11 ENCODE exon 2146297 2146471 . - . Parent=gene245 chr11 ENCODE CDS 2146297 2146471 . - 0 Parent=gene245 chr11 ENCODE exon 2147456 2147677 . - . Parent=gene245 chr11 ENCODE CDS 2147456 2147677 . - 0 Parent=gene245 chr11 ENCODE exon 2148496 2148576 . - . Parent=gene245 chr11 ENCODE CDS 2148496 2148576 . - 0 Parent=gene245 chr11 ENCODE CDS 2149491 2149592 . - 0 Parent=gene245 chr11 ENCODE exon 2149491 2149611 . - . Parent=gene245 ### chr11 ENCODE gene 2141735 2149683 . - . ID=gene246;name2=TH;Name=AC132217.7-001 chr11 ENCODE exon 2141735 2142198 . - . Parent=gene246 chr11 ENCODE CDS 2142039 2142198 . - 1 Parent=gene246 chr11 ENCODE exon 2143038 2143171 . - . Parent=gene246 chr11 ENCODE CDS 2143038 2143171 . - 0 Parent=gene246 chr11 ENCODE exon 2143474 2143569 . - . Parent=gene246 chr11 ENCODE CDS 2143474 2143569 . - 0 Parent=gene246 chr11 ENCODE exon 2143808 2143864 . - . Parent=gene246 chr11 ENCODE CDS 2143808 2143864 . - 0 Parent=gene246 chr11 ENCODE exon 2144286 2144355 . - . Parent=gene246 chr11 ENCODE CDS 2144286 2144355 . - 1 Parent=gene246 chr11 ENCODE exon 2144439 2144574 . - . Parent=gene246 chr11 ENCODE CDS 2144439 2144574 . - 2 Parent=gene246 chr11 ENCODE exon 2144693 2144838 . - . Parent=gene246 chr11 ENCODE CDS 2144693 2144838 . - 1 Parent=gene246 chr11 ENCODE exon 2145241 2145291 . - . Parent=gene246 chr11 ENCODE CDS 2145241 2145291 . - 1 Parent=gene246 chr11 ENCODE exon 2145672 2145739 . - . Parent=gene246 chr11 ENCODE CDS 2145672 2145739 . - 0 Parent=gene246 chr11 ENCODE exon 2145897 2145985 . - . Parent=gene246 chr11 ENCODE CDS 2145897 2145985 . - 2 Parent=gene246 chr11 ENCODE exon 2146297 2146471 . - . Parent=gene246 chr11 ENCODE CDS 2146297 2146471 . - 0 Parent=gene246 chr11 ENCODE exon 2147456 2147677 . - . Parent=gene246 chr11 ENCODE CDS 2147456 2147677 . - 0 Parent=gene246 chr11 ENCODE CDS 2149503 2149592 . - 0 Parent=gene246 chr11 ENCODE exon 2149503 2149683 . - . Parent=gene246 ### chr11 ENCODE gene 2143100 2149611 . - . ID=gene247;Name=AC132217.7-006;name2=TH chr11 ENCODE exon 2143100 2143171 . - . Parent=gene247 chr11 ENCODE exon 2143474 2143569 . - . Parent=gene247 chr11 ENCODE exon 2143808 2143864 . - . Parent=gene247 chr11 ENCODE exon 2144286 2144355 . - . Parent=gene247 chr11 ENCODE exon 2144439 2144574 . - . Parent=gene247 chr11 ENCODE exon 2144693 2144838 . - . Parent=gene247 chr11 ENCODE exon 2145241 2145291 . - . Parent=gene247 chr11 ENCODE exon 2145672 2145739 . - . Parent=gene247 chr11 ENCODE exon 2145897 2145985 . - . Parent=gene247 chr11 ENCODE exon 2146297 2146471 . - . Parent=gene247 chr11 ENCODE exon 2147456 2147501 . - . Parent=gene247 chr11 ENCODE exon 2149503 2149611 . - . Parent=gene247 ### chr11 ENCODE gene 2143478 2145082 . - . ID=gene248;name2=TH;Name=AC132217.7-008 chr11 ENCODE exon 2143478 2143569 . - . Parent=gene248 chr11 ENCODE exon 2143808 2143864 . - . Parent=gene248 chr11 ENCODE exon 2144286 2144355 . - . Parent=gene248 chr11 ENCODE exon 2144439 2144574 . - . Parent=gene248 chr11 ENCODE exon 2144693 2145082 . - . Parent=gene248 ### chr11 ENCODE gene 2143485 2145912 . - . ID=gene249;Name=AC132217.7-004;name2=TH chr11 ENCODE exon 2143485 2143569 . - . Parent=gene249 chr11 ENCODE exon 2143808 2143864 . - . Parent=gene249 chr11 ENCODE exon 2144286 2144355 . - . Parent=gene249 chr11 ENCODE exon 2144439 2144574 . - . Parent=gene249 chr11 ENCODE exon 2145241 2145291 . - . Parent=gene249 chr11 ENCODE exon 2145672 2145739 . - . Parent=gene249 chr11 ENCODE exon 2145897 2145912 . - . Parent=gene249 ### chr11 ENCODE gene 2143485 2145912 . - . ID=gene250;Name=AC132217.7-005;name2=TH chr11 ENCODE exon 2143485 2143569 . - . Parent=gene250 chr11 ENCODE CDS 2143485 2143569 . - 2 Parent=gene250 chr11 ENCODE exon 2143808 2143864 . - . Parent=gene250 chr11 ENCODE CDS 2143808 2143864 . - 2 Parent=gene250 chr11 ENCODE exon 2144286 2144355 . - . Parent=gene250 chr11 ENCODE CDS 2144286 2144355 . - 0 Parent=gene250 chr11 ENCODE exon 2145241 2145291 . - . Parent=gene250 chr11 ENCODE CDS 2145241 2145291 . - 0 Parent=gene250 chr11 ENCODE exon 2145672 2145739 . - . Parent=gene250 chr11 ENCODE CDS 2145672 2145739 . - 2 Parent=gene250 chr11 ENCODE exon 2145897 2145912 . - . Parent=gene250 chr11 ENCODE CDS 2145897 2145912 . - 0 Parent=gene250 ### chr11 ENCODE gene 2143659 2144580 . - . ID=gene251;Name=AC132217.7-010;name2=TH chr11 ENCODE exon 2143659 2144355 . - . Parent=gene251 chr11 ENCODE exon 2144439 2144580 . - . Parent=gene251 ### chr11 ENCODE gene 2143813 2149611 . - . ID=gene252;name2=TH;Name=AC132217.7-007 chr11 ENCODE exon 2143813 2143864 . - . Parent=gene252 chr11 ENCODE exon 2144286 2144355 . - . Parent=gene252 chr11 ENCODE exon 2144439 2144574 . - . Parent=gene252 chr11 ENCODE exon 2144693 2144838 . - . Parent=gene252 chr11 ENCODE exon 2145241 2145322 . - . Parent=gene252 chr11 ENCODE exon 2145672 2145739 . - . Parent=gene252 chr11 ENCODE exon 2145897 2145985 . - . Parent=gene252 chr11 ENCODE exon 2146297 2146471 . - . Parent=gene252 chr11 ENCODE exon 2147456 2147501 . - . Parent=gene252 chr11 ENCODE exon 2149491 2149611 . - . Parent=gene252 ### chr11 ENCODE gene 2144700 2146532 . - . ID=gene253;Name=AC132217.7-009;name2=TH chr11 ENCODE exon 2144700 2144838 . - . Parent=gene253 chr11 ENCODE exon 2145241 2145739 . - . Parent=gene253 chr11 ENCODE exon 2145897 2145985 . - . Parent=gene253 chr11 ENCODE exon 2146297 2146532 . - . Parent=gene253 ### chr11 ENCODE gene 2246301 2248758 . - . ID=gene254;Name=AC129929.1-001;name2=ASCL2 chr11 ENCODE exon 2246301 2246932 . - . Parent=gene254 chr11 ENCODE exon 2247539 2248758 . - . Parent=gene254 chr11 ENCODE CDS 2247557 2248138 . - 0 Parent=gene254 ### chr11 ENCODE gene 2248315 2249421 . - . ID=gene255;Name=AC129929.2-001;name2=AC129929.2 chr11 ENCODE exon 2248315 2249421 . - . Parent=gene255 chr11 ENCODE CDS 2248315 2249421 . - 0 Parent=gene255 ### chr11 ENCODE gene 2273451 2279866 . - . ID=gene256;Name=AC129929.3-001;name2=C11orf21 chr11 ENCODE exon 2273451 2275727 . - . Parent=gene256 chr11 ENCODE exon 2277234 2277513 . - . Parent=gene256 chr11 ENCODE CDS 2277262 2277513 . - 0 Parent=gene256 chr11 ENCODE exon 2278326 2278419 . - . Parent=gene256 chr11 ENCODE CDS 2278326 2278419 . - 1 Parent=gene256 chr11 ENCODE CDS 2279562 2279614 . - 0 Parent=gene256 chr11 ENCODE exon 2279562 2279866 . - . Parent=gene256 ### chr11 ENCODE gene 2275630 2280855 . - . ID=gene257;Name=AC129929.3-005;name2=C11orf21 chr11 ENCODE exon 2275630 2275727 . - . Parent=gene257 chr11 ENCODE exon 2277234 2277513 . - . Parent=gene257 chr11 ENCODE exon 2280688 2280855 . - . Parent=gene257 ### chr11 ENCODE gene 2277231 2279678 . - . ID=gene258;Name=AC129929.3-002;name2=C11orf21 chr11 ENCODE exon 2277231 2277513 . - . Parent=gene258 chr11 ENCODE exon 2278490 2279678 . - . Parent=gene258 ### chr11 ENCODE gene 2277301 2279719 . - . ID=gene259;Name=AC129929.3-004;name2=C11orf21 chr11 ENCODE exon 2277301 2277513 . - . Parent=gene259 chr11 ENCODE CDS 2277301 2277513 . - 0 Parent=gene259 chr11 ENCODE exon 2278326 2278419 . - . Parent=gene259 chr11 ENCODE CDS 2278326 2278419 . - 1 Parent=gene259 chr11 ENCODE exon 2278490 2278574 . - . Parent=gene259 chr11 ENCODE CDS 2278490 2278574 . - 2 Parent=gene259 chr11 ENCODE CDS 2279562 2279667 . - 0 Parent=gene259 chr11 ENCODE exon 2279562 2279719 . - . Parent=gene259 ### chr11 ENCODE gene 2277345 2280766 . - . ID=gene260;Name=AC129929.3-003;name2=C11orf21 chr11 ENCODE exon 2277345 2277513 . - . Parent=gene260 chr11 ENCODE exon 2278326 2278419 . - . Parent=gene260 chr11 ENCODE exon 2280688 2280766 . - . Parent=gene260 ### chr11 ENCODE gene 2279803 2287824 . + . ID=gene261;name2=TSPAN32;Name=AC129929.4-007 chr11 ENCODE exon 2279803 2280028 . + . Parent=gene261 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene261 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene261 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene261 chr11 ENCODE exon 2287127 2287316 . + . Parent=gene261 chr11 ENCODE exon 2287795 2287824 . + . Parent=gene261 ### chr11 ENCODE gene 2279815 2296006 . + . ID=gene262;Name=AC129929.4-006;name2=TSPAN32 chr11 ENCODE exon 2279815 2280021 . + . Parent=gene262 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene262 chr11 ENCODE exon 2281216 2281287 . + . Parent=gene262 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene262 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene262 chr11 ENCODE exon 2291460 2291514 . + . Parent=gene262 chr11 ENCODE exon 2292291 2294473 . + . Parent=gene262 chr11 ENCODE exon 2295150 2295331 . + . Parent=gene262 chr11 ENCODE exon 2295669 2296006 . + . Parent=gene262 ### chr11 ENCODE gene 2279819 2295939 . + . ID=gene263;Name=AC129929.4-015;name2=TSPAN32 chr11 ENCODE exon 2279819 2280021 . + . Parent=gene263 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene263 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene263 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene263 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene263 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene263 chr11 ENCODE exon 2294035 2294118 . + . Parent=gene263 chr11 ENCODE exon 2294438 2294473 . + . Parent=gene263 chr11 ENCODE exon 2295150 2295331 . + . Parent=gene263 chr11 ENCODE exon 2295669 2295939 . + . Parent=gene263 ### chr11 ENCODE gene 2279819 2295948 . + . ID=gene264;Name=AC129929.4-002;name2=TSPAN32 chr11 ENCODE exon 2279819 2280021 . + . Parent=gene264 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene264 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene264 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene264 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene264 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene264 chr11 ENCODE exon 2294035 2294118 . + . Parent=gene264 chr11 ENCODE exon 2294438 2294473 . + . Parent=gene264 chr11 ENCODE exon 2295150 2295331 . + . Parent=gene264 chr11 ENCODE exon 2295669 2295948 . + . Parent=gene264 ### chr11 ENCODE gene 2279819 2295948 . + . ID=gene265;Name=AC129929.4-001;name2=TSPAN32 chr11 ENCODE exon 2279819 2280021 . + . Parent=gene265 chr11 ENCODE CDS 2279956 2280021 . + 0 Parent=gene265 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene265 chr11 ENCODE CDS 2280650 2280764 . + 0 Parent=gene265 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene265 chr11 ENCODE CDS 2281913 2282010 . + 2 Parent=gene265 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene265 chr11 ENCODE CDS 2286542 2286616 . + 0 Parent=gene265 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene265 chr11 ENCODE CDS 2291460 2291561 . + 0 Parent=gene265 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene265 chr11 ENCODE CDS 2292291 2292377 . + 0 Parent=gene265 chr11 ENCODE exon 2294035 2294118 . + . Parent=gene265 chr11 ENCODE CDS 2294035 2294118 . + 0 Parent=gene265 chr11 ENCODE exon 2294382 2294473 . + . Parent=gene265 chr11 ENCODE CDS 2294382 2294473 . + 0 Parent=gene265 chr11 ENCODE exon 2295150 2295331 . + . Parent=gene265 chr11 ENCODE CDS 2295150 2295331 . + 1 Parent=gene265 chr11 ENCODE CDS 2295669 2295730 . + 2 Parent=gene265 chr11 ENCODE exon 2295669 2295948 . + . Parent=gene265 ### chr11 ENCODE gene 2279832 2295948 . + . ID=gene266;Name=AC129929.4-008;name2=TSPAN32 chr11 ENCODE exon 2279832 2280028 . + . Parent=gene266 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene266 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene266 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene266 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene266 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene266 chr11 ENCODE exon 2294035 2294473 . + . Parent=gene266 chr11 ENCODE exon 2295152 2295331 . + . Parent=gene266 chr11 ENCODE exon 2295669 2295948 . + . Parent=gene266 ### chr11 ENCODE gene 2279837 2292440 . + . ID=gene267;Name=AC129929.4-011;name2=TSPAN32 chr11 ENCODE exon 2279837 2280021 . + . Parent=gene267 chr11 ENCODE CDS 2279956 2280021 . + 0 Parent=gene267 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene267 chr11 ENCODE CDS 2280650 2280764 . + 0 Parent=gene267 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene267 chr11 ENCODE CDS 2281913 2282010 . + 2 Parent=gene267 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene267 chr11 ENCODE CDS 2286542 2286616 . + 0 Parent=gene267 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene267 chr11 ENCODE CDS 2291460 2291561 . + 0 Parent=gene267 chr11 ENCODE exon 2292291 2292440 . + . Parent=gene267 chr11 ENCODE CDS 2292291 2292440 . + 0 Parent=gene267 ### chr11 ENCODE gene 2279846 2293762 . + . ID=gene268;Name=AC129929.4-012;name2=TSPAN32 chr11 ENCODE exon 2279846 2280021 . + . Parent=gene268 chr11 ENCODE CDS 2279956 2280021 . + 0 Parent=gene268 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene268 chr11 ENCODE CDS 2280650 2280764 . + 0 Parent=gene268 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene268 chr11 ENCODE CDS 2281913 2282010 . + 2 Parent=gene268 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene268 chr11 ENCODE CDS 2286542 2286616 . + 0 Parent=gene268 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene268 chr11 ENCODE CDS 2291460 2291561 . + 0 Parent=gene268 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene268 chr11 ENCODE CDS 2292291 2292377 . + 0 Parent=gene268 chr11 ENCODE exon 2293675 2293762 . + . Parent=gene268 chr11 ENCODE CDS 2293675 2293762 . + 0 Parent=gene268 ### chr11 ENCODE gene 2279947 2294470 . + . ID=gene269;Name=AC129929.4-009;name2=TSPAN32 chr11 ENCODE exon 2279947 2280021 . + . Parent=gene269 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene269 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene269 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene269 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene269 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene269 chr11 ENCODE exon 2294035 2294470 . + . Parent=gene269 ### chr11 ENCODE gene 2279956 2295948 . + . ID=gene270;Name=AC129929.4-005;name2=TSPAN32 chr11 ENCODE exon 2279956 2280021 . + . Parent=gene270 chr11 ENCODE CDS 2279956 2280021 . + 0 Parent=gene270 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene270 chr11 ENCODE CDS 2280650 2280764 . + 0 Parent=gene270 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene270 chr11 ENCODE CDS 2281913 2282010 . + 2 Parent=gene270 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene270 chr11 ENCODE CDS 2286542 2286616 . + 0 Parent=gene270 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene270 chr11 ENCODE CDS 2291460 2291561 . + 0 Parent=gene270 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene270 chr11 ENCODE CDS 2292291 2292377 . + 0 Parent=gene270 chr11 ENCODE exon 2294035 2294118 . + . Parent=gene270 chr11 ENCODE CDS 2294035 2294118 . + 0 Parent=gene270 chr11 ENCODE exon 2294382 2294473 . + . Parent=gene270 chr11 ENCODE CDS 2294382 2294473 . + 0 Parent=gene270 chr11 ENCODE CDS 2295669 2295711 . + 1 Parent=gene270 chr11 ENCODE exon 2295669 2295948 . + . Parent=gene270 ### chr11 ENCODE gene 2279960 2292472 . + . ID=gene271;Name=AC129929.4-010;name2=TSPAN32 chr11 ENCODE exon 2279960 2280028 . + . Parent=gene271 chr11 ENCODE exon 2280650 2280764 . + . Parent=gene271 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene271 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene271 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene271 chr11 ENCODE exon 2292291 2292472 . + . Parent=gene271 ### chr11 ENCODE gene 2280514 2295948 . + . ID=gene272;Name=AC129929.4-004;name2=TSPAN32 chr11 ENCODE exon 2280514 2280764 . + . Parent=gene272 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene272 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene272 chr11 ENCODE exon 2291460 2291514 . + . Parent=gene272 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene272 chr11 ENCODE exon 2294035 2294118 . + . Parent=gene272 chr11 ENCODE exon 2294382 2294473 . + . Parent=gene272 chr11 ENCODE exon 2295152 2295331 . + . Parent=gene272 chr11 ENCODE exon 2295669 2295948 . + . Parent=gene272 ### chr11 ENCODE gene 2280529 2295948 . + . ID=gene273;Name=AC129929.4-003;name2=TSPAN32 chr11 ENCODE exon 2280529 2280764 . + . Parent=gene273 chr11 ENCODE CDS 2280617 2280764 . + 0 Parent=gene273 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene273 chr11 ENCODE CDS 2281913 2282010 . + 2 Parent=gene273 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene273 chr11 ENCODE CDS 2286542 2286616 . + 0 Parent=gene273 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene273 chr11 ENCODE CDS 2291460 2291561 . + 0 Parent=gene273 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene273 chr11 ENCODE CDS 2292291 2292377 . + 0 Parent=gene273 chr11 ENCODE exon 2294035 2294118 . + . Parent=gene273 chr11 ENCODE CDS 2294035 2294118 . + 0 Parent=gene273 chr11 ENCODE exon 2294382 2294473 . + . Parent=gene273 chr11 ENCODE CDS 2294382 2294473 . + 0 Parent=gene273 chr11 ENCODE exon 2295150 2295331 . + . Parent=gene273 chr11 ENCODE CDS 2295150 2295331 . + 1 Parent=gene273 chr11 ENCODE CDS 2295669 2295730 . + 2 Parent=gene273 chr11 ENCODE exon 2295669 2295948 . + . Parent=gene273 ### chr11 ENCODE gene 2280674 2295730 . + . ID=gene274;Name=AC129929.4-014;name2=TSPAN32 chr11 ENCODE exon 2280674 2280764 . + . Parent=gene274 chr11 ENCODE CDS 2280674 2280764 . + 0 Parent=gene274 chr11 ENCODE exon 2281913 2282010 . + . Parent=gene274 chr11 ENCODE CDS 2281913 2282010 . + 2 Parent=gene274 chr11 ENCODE exon 2291460 2291561 . + . Parent=gene274 chr11 ENCODE CDS 2291460 2291561 . + 0 Parent=gene274 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene274 chr11 ENCODE CDS 2292291 2292377 . + 0 Parent=gene274 chr11 ENCODE exon 2294035 2294118 . + . Parent=gene274 chr11 ENCODE CDS 2294035 2294118 . + 0 Parent=gene274 chr11 ENCODE exon 2294382 2294473 . + . Parent=gene274 chr11 ENCODE CDS 2294382 2294473 . + 0 Parent=gene274 chr11 ENCODE exon 2295150 2295331 . + . Parent=gene274 chr11 ENCODE CDS 2295150 2295331 . + 1 Parent=gene274 chr11 ENCODE exon 2295669 2295730 . + . Parent=gene274 chr11 ENCODE CDS 2295669 2295730 . + 2 Parent=gene274 ### chr11 ENCODE gene 2284751 2293993 . + . ID=gene275;name2=TSPAN32;Name=AC129929.4-016 chr11 ENCODE exon 2284751 2284796 . + . Parent=gene275 chr11 ENCODE exon 2286542 2286616 . + . Parent=gene275 chr11 ENCODE exon 2291460 2291514 . + . Parent=gene275 chr11 ENCODE exon 2292291 2292377 . + . Parent=gene275 chr11 ENCODE exon 2293675 2293993 . + . Parent=gene275 ### chr11 ENCODE gene 2294442 2295948 . + . ID=gene276;Name=AC129929.4-013;name2=TSPAN32 chr11 ENCODE exon 2294442 2294473 . + . Parent=gene276 chr11 ENCODE exon 2295233 2295331 . + . Parent=gene276 chr11 ENCODE exon 2295669 2295948 . + . Parent=gene276 ### chr11 ENCODE gene 4745076 4967636 . + . ID=gene277;name2=MMP26;Name=AC018375.2-002 chr11 ENCODE exon 4745076 4745147 . + . Parent=gene277 chr11 ENCODE exon 4966076 4966116 . + . Parent=gene277 chr11 ENCODE exon 4967454 4967636 . + . Parent=gene277 ### chr11 ENCODE gene 4745076 4970235 . + . ID=gene278;Name=AC018375.2-001;name2=MMP26 chr11 ENCODE exon 4745076 4745147 . + . Parent=gene278 chr11 ENCODE exon 4965874 4966116 . + . Parent=gene278 chr11 ENCODE CDS 4966018 4966116 . + 0 Parent=gene278 chr11 ENCODE exon 4967454 4967674 . + . Parent=gene278 chr11 ENCODE CDS 4967454 4967674 . + 0 Parent=gene278 chr11 ENCODE exon 4968404 4968552 . + . Parent=gene278 chr11 ENCODE CDS 4968404 4968552 . + 1 Parent=gene278 chr11 ENCODE exon 4969177 4969302 . + . Parent=gene278 chr11 ENCODE CDS 4969177 4969302 . + 2 Parent=gene278 chr11 ENCODE exon 4969770 4969931 . + . Parent=gene278 chr11 ENCODE CDS 4969770 4969931 . + 2 Parent=gene278 chr11 ENCODE CDS 4970020 4970048 . + 2 Parent=gene278 chr11 ENCODE exon 4970020 4970235 . + . Parent=gene278 ### chr11 ENCODE gene 4746785 4747744 . - . ID=gene279;Name=AC103710.1-001;name2=OR51F1 chr11 ENCODE exon 4746785 4747744 . - . Parent=gene279 chr11 ENCODE CDS 4746785 4747744 . - 0 Parent=gene279 ### chr11 ENCODE gene 4781239 4782186 . - . ID=gene280;name2=OR52R1;Name=AC103710.3-001 chr11 ENCODE exon 4781239 4782186 . - . Parent=gene280 chr11 ENCODE CDS 4781239 4782186 . - 0 Parent=gene280 ### chr11 ENCODE gene 4799192 4800220 . + . ID=gene281;Name=AC103710.5-001;name2=OR51F2 chr11 ENCODE exon 4799192 4800220 . + . Parent=gene281 chr11 ENCODE CDS 4799192 4800220 . + 0 Parent=gene281 ### chr11 ENCODE gene 4826043 4827014 . - . ID=gene282;Name=AC103710.7-001;name2=OR51S1 chr11 ENCODE exon 4826043 4827014 . - . Parent=gene282 chr11 ENCODE CDS 4826043 4827014 . - 0 Parent=gene282 ### chr11 ENCODE gene 4837462 4838370 . - . ID=gene283;Name=AC011711.1-001;name2=OR51H1P chr11 ENCODE exon 4837462 4838370 . - . Parent=gene283 chr11 ENCODE CDS 4837462 4838370 . - 0 Parent=gene283 ### chr11 ENCODE gene 4859706 4860689 . + . ID=gene284;Name=AC011711.3-001;name2=OR51T1 chr11 ENCODE exon 4859706 4860689 . + . Parent=gene284 chr11 ENCODE CDS 4859706 4860689 . + 0 Parent=gene284 ### chr11 ENCODE gene 4885176 4886114 . + . ID=gene285;Name=AC018375.4-001;name2=OR51A7 chr11 ENCODE exon 4885176 4886114 . + . Parent=gene285 chr11 ENCODE CDS 4885176 4886114 . + 0 Parent=gene285 ### chr11 ENCODE gene 4892525 4893469 . - . ID=gene286;Name=AC018375.5-001;name2=OR51G2 chr11 ENCODE exon 4892525 4893469 . - . Parent=gene286 chr11 ENCODE CDS 4892525 4893469 . - 0 Parent=gene286 ### chr11 ENCODE gene 4901180 4902145 . - . ID=gene287;Name=AC018375.6-001;name2=OR51G1 chr11 ENCODE exon 4901180 4902145 . - . Parent=gene287 chr11 ENCODE CDS 4901180 4902145 . - 0 Parent=gene287 ### chr11 ENCODE gene 4923965 4924906 . - . ID=gene288;Name=AC018375.8-001;name2=OR51A4 chr11 ENCODE exon 4923965 4924906 . - . Parent=gene288 chr11 ENCODE CDS 4923965 4924906 . - 0 Parent=gene288 ### chr11 ENCODE gene 4932578 4933519 . - . ID=gene289;Name=AC018375.9-001;name2=OR51A2 chr11 ENCODE exon 4932578 4933519 . - . Parent=gene289 chr11 ENCODE CDS 4932578 4933519 . - 0 Parent=gene289 ### chr11 ENCODE gene 4976789 4977736 . + . ID=gene290;name2=OR51L1;Name=AC018375.11-001 chr11 ENCODE exon 4976789 4977736 . + . Parent=gene290 chr11 ENCODE CDS 4976789 4977736 . + 0 Parent=gene290 ### chr11 ENCODE gene 5024332 5025267 . + . ID=gene291;Name=AC113331.3-001;name2=OR52J3 chr11 ENCODE exon 5024332 5025267 . + . Parent=gene291 chr11 ENCODE CDS 5024332 5025267 . + 0 Parent=gene291 ### chr11 ENCODE gene 5036456 5037433 . - . ID=gene292;name2=OR52E2;Name=AC113331.4-001 chr11 ENCODE exon 5036456 5037433 . - . Parent=gene292 chr11 ENCODE CDS 5036456 5037433 . - 0 Parent=gene292 ### chr11 ENCODE gene 5109498 5110448 . - . ID=gene293;Name=AC129505.2-001;name2=OR52A5 chr11 ENCODE exon 5109498 5110448 . - . Parent=gene293 chr11 ENCODE CDS 5109498 5110448 . - 0 Parent=gene293 ### chr11 ENCODE gene 5128815 5164188 . - . ID=gene294;Name=AC129505.3-001;name2=OR52A1 chr11 ENCODE exon 5128815 5130496 . - . Parent=gene294 chr11 ENCODE CDS 5129237 5130175 . - 0 Parent=gene294 chr11 ENCODE exon 5164092 5164188 . - . Parent=gene294 ### chr11 ENCODE gene 5177541 5178506 . - . ID=gene295;Name=AC104389.15-001;name2=OR51V1 chr11 ENCODE exon 5177541 5178506 . - . Parent=gene295 chr11 ENCODE CDS 5177541 5178506 . - 0 Parent=gene295 ### chr11 ENCODE gene 5203270 5205003 . - . ID=gene296;Name=AC104389.17-001;name2=HBB chr11 ENCODE exon 5203270 5203532 . - . Parent=gene296 chr11 ENCODE CDS 5203404 5203532 . - 0 Parent=gene296 chr11 ENCODE exon 5204383 5204605 . - . Parent=gene296 chr11 ENCODE CDS 5204383 5204605 . - 1 Parent=gene296 chr11 ENCODE CDS 5204736 5204827 . - 0 Parent=gene296 chr11 ENCODE exon 5204736 5205003 . - . Parent=gene296 ### chr11 ENCODE gene 5203461 5204629 . - . ID=gene297;Name=AC104389.17-003;name2=HBB chr11 ENCODE exon 5203461 5203532 . - . Parent=gene297 chr11 ENCODE exon 5204383 5204629 . - . Parent=gene297 ### chr11 ENCODE gene 5204069 5204878 . - . ID=gene298;name2=HBB;Name=AC104389.17-002 chr11 ENCODE exon 5204069 5204605 . - . Parent=gene298 chr11 ENCODE exon 5204736 5204878 . - . Parent=gene298 ### chr11 ENCODE gene 5204426 5207201 . - . ID=gene299;Name=AC104389.17-004;name2=HBB chr11 ENCODE exon 5204426 5204605 . - . Parent=gene299 chr11 ENCODE CDS 5204426 5204605 . - 1 Parent=gene299 chr11 ENCODE CDS 5204736 5204827 . - 0 Parent=gene299 chr11 ENCODE exon 5204736 5204845 . - . Parent=gene299 chr11 ENCODE exon 5205318 5205385 . - . Parent=gene299 chr11 ENCODE exon 5207058 5207201 . - . Parent=gene299 ### chr11 ENCODE gene 5210484 5212289 . - . ID=gene300;Name=AC104389.18-003;name2=HBD chr11 ENCODE exon 5210484 5210604 . - . Parent=gene300 chr11 ENCODE CDS 5210494 5210604 . - 0 Parent=gene300 chr11 ENCODE exon 5211797 5212019 . - . Parent=gene300 chr11 ENCODE CDS 5211797 5212019 . - 1 Parent=gene300 chr11 ENCODE CDS 5212148 5212239 . - 0 Parent=gene300 chr11 ENCODE exon 5212148 5212289 . - . Parent=gene300 ### chr11 ENCODE gene 5210644 5212454 . - . ID=gene301;Name=AC104389.18-001;name2=HBD chr11 ENCODE exon 5210644 5210898 . - . Parent=gene301 chr11 ENCODE CDS 5210770 5210898 . - 0 Parent=gene301 chr11 ENCODE exon 5211797 5212019 . - . Parent=gene301 chr11 ENCODE CDS 5211797 5212019 . - 1 Parent=gene301 chr11 ENCODE CDS 5212148 5212239 . - 0 Parent=gene301 chr11 ENCODE exon 5212148 5212454 . - . Parent=gene301 ### chr11 ENCODE gene 5210736 5212289 . - . ID=gene302;Name=AC104389.18-002;name2=HBD chr11 ENCODE exon 5210736 5210898 . - . Parent=gene302 chr11 ENCODE CDS 5210736 5210898 . - 1 Parent=gene302 chr11 ENCODE CDS 5212148 5212239 . - 0 Parent=gene302 chr11 ENCODE exon 5212148 5212289 . - . Parent=gene302 ### chr11 ENCODE gene 5211799 5213176 . - . ID=gene303;Name=AC104389.18-004;name2=HBD chr11 ENCODE exon 5211799 5212019 . - . Parent=gene303 chr11 ENCODE CDS 5211799 5212019 . - 1 Parent=gene303 chr11 ENCODE CDS 5212148 5212239 . - 0 Parent=gene303 chr11 ENCODE exon 5212148 5212336 . - . Parent=gene303 chr11 ENCODE exon 5213021 5213176 . - . Parent=gene303 ### chr11 ENCODE gene 5225889 5227698 . - . ID=gene304;Name=AC104389.20-001;name2=HBG1 chr11 ENCODE exon 5225889 5226293 . - . Parent=gene304 chr11 ENCODE CDS 5226165 5226293 . - 0 Parent=gene304 chr11 ENCODE exon 5227174 5227396 . - . Parent=gene304 chr11 ENCODE CDS 5227174 5227396 . - 1 Parent=gene304 chr11 ENCODE CDS 5227519 5227610 . - 0 Parent=gene304 chr11 ENCODE exon 5227519 5227698 . - . Parent=gene304 ### chr11 ENCODE gene 5230996 5483411 . - . ID=gene305;Name=AC104389.21-004;name2=HBG2 chr11 ENCODE exon 5230996 5231211 . - . Parent=gene305 chr11 ENCODE CDS 5231083 5231211 . - 0 Parent=gene305 chr11 ENCODE exon 5232098 5232320 . - . Parent=gene305 chr11 ENCODE CDS 5232098 5232320 . - 1 Parent=gene305 chr11 ENCODE CDS 5483157 5483218 . - 0 Parent=gene305 chr11 ENCODE exon 5483157 5483411 . - . Parent=gene305 ### chr11 ENCODE gene 5230996 5623595 . - . ID=gene306;Name=AC104389.21-001;name2=HBG2 chr11 ENCODE exon 5230996 5231211 . - . Parent=gene306 chr11 ENCODE CDS 5231083 5231211 . - 0 Parent=gene306 chr11 ENCODE exon 5232098 5232320 . - . Parent=gene306 chr11 ENCODE CDS 5232098 5232320 . - 1 Parent=gene306 chr11 ENCODE CDS 5232443 5232534 . - 0 Parent=gene306 chr11 ENCODE exon 5232443 5232971 . - . Parent=gene306 chr11 ENCODE exon 5323579 5323705 . - . Parent=gene306 chr11 ENCODE exon 5568631 5568829 . - . Parent=gene306 chr11 ENCODE exon 5573038 5573156 . - . Parent=gene306 chr11 ENCODE exon 5604407 5604660 . - . Parent=gene306 chr11 ENCODE exon 5623491 5623595 . - . Parent=gene306 ### chr11 ENCODE gene 5230999 5232575 . - . ID=gene307;Name=AC104389.21-002;name2=HBG2 chr11 ENCODE exon 5230999 5231211 . - . Parent=gene307 chr11 ENCODE exon 5232098 5232320 . - . Parent=gene307 chr11 ENCODE exon 5232443 5232496 . - . Parent=gene307 chr11 ENCODE exon 5232528 5232575 . - . Parent=gene307 ### chr11 ENCODE gene 5231195 5232547 . - . ID=gene308;Name=AC104389.21-003;name2=HBG2 chr11 ENCODE exon 5231195 5231211 . - . Parent=gene308 chr11 ENCODE exon 5232098 5232320 . - . Parent=gene308 chr11 ENCODE exon 5232481 5232547 . - . Parent=gene308 ### chr11 ENCODE gene 5246158 5483410 . - . ID=gene309;Name=AC104389.22-001;name2=HBE1 chr11 ENCODE exon 5246158 5246403 . - . Parent=gene309 chr11 ENCODE CDS 5246275 5246403 . - 0 Parent=gene309 chr11 ENCODE exon 5247260 5247482 . - . Parent=gene309 chr11 ENCODE CDS 5247260 5247482 . - 1 Parent=gene309 chr11 ENCODE CDS 5247605 5247696 . - 0 Parent=gene309 chr11 ENCODE exon 5247605 5247962 . - . Parent=gene309 chr11 ENCODE exon 5259715 5259757 . - . Parent=gene309 chr11 ENCODE exon 5483375 5483410 . - . Parent=gene309 ### chr11 ENCODE gene 5247312 5483423 . - . ID=gene310;Name=AC104389.22-002;name2=HBE1 chr11 ENCODE exon 5247312 5247482 . - . Parent=gene310 chr11 ENCODE CDS 5247312 5247482 . - 1 Parent=gene310 chr11 ENCODE CDS 5247605 5247696 . - 0 Parent=gene310 chr11 ENCODE exon 5247605 5247962 . - . Parent=gene310 chr11 ENCODE exon 5483375 5483423 . - . Parent=gene310 ### chr11 ENCODE gene 5278820 5279802 . - . ID=gene311;Name=AC104389.23-001;name2=OR51B4 chr11 ENCODE CDS 5278820 5279752 . - 0 Parent=gene311 chr11 ENCODE exon 5278820 5279802 . - . Parent=gene311 ### chr11 ENCODE gene 5301165 5302103 . - . ID=gene312;Name=AC104389.26-001;name2=OR51B2 chr11 ENCODE exon 5301165 5302103 . - . Parent=gene312 chr11 ENCODE CDS 5301165 5302103 . - 0 Parent=gene312 ### chr11 ENCODE gene 5320392 5321330 . - . ID=gene313;Name=AC104389.29-001;name2=OR51B5 chr11 ENCODE exon 5320392 5321330 . - . Parent=gene313 chr11 ENCODE CDS 5320392 5321330 . - 0 Parent=gene313 ### chr11 ENCODE gene 5329314 5330252 . + . ID=gene314;Name=AC104389.30-001;name2=OR51B6 chr11 ENCODE exon 5329314 5330252 . + . Parent=gene314 chr11 ENCODE CDS 5329314 5330252 . + 0 Parent=gene314 ### chr11 ENCODE gene 5367205 5368185 . + . ID=gene315;Name=AC104389.33-001;name2=OR51M1 chr11 ENCODE exon 5367205 5368185 . + . Parent=gene315 chr11 ENCODE CDS 5367205 5368185 . + 0 Parent=gene315 ### chr11 ENCODE gene 5380403 5381353 . + . ID=gene316;Name=AC104389.34-001;name2=OR51J1 chr11 ENCODE exon 5380403 5381353 . + . Parent=gene316 chr11 ENCODE CDS 5380403 5381353 . + 0 Parent=gene316 ### chr11 ENCODE gene 5400007 5400960 . + . ID=gene317;Name=AC087380.6-001;name2=OR51Q1 chr11 ENCODE exon 5400007 5400960 . + . Parent=gene317 chr11 ENCODE CDS 5400007 5400960 . + 0 Parent=gene317 ### chr11 ENCODE gene 5418376 5419320 . - . ID=gene318;Name=AC087380.8-001;name2=OR51I1 chr11 ENCODE exon 5418376 5419320 . - . Parent=gene318 chr11 ENCODE CDS 5418376 5419320 . - 0 Parent=gene318 ### chr11 ENCODE gene 5431295 5432233 . + . ID=gene319;Name=AC087380.9-001;name2=OR51I2 chr11 ENCODE exon 5431295 5432233 . + . Parent=gene319 chr11 ENCODE CDS 5431295 5432233 . + 0 Parent=gene319 ### chr11 ENCODE gene 5466513 5467469 . + . ID=gene320;Name=AC087380.11-001;name2=OR52D1 chr11 ENCODE exon 5466513 5467469 . + . Parent=gene320 chr11 ENCODE CDS 5466513 5467469 . + 0 Parent=gene320 ### chr11 ENCODE gene 5485106 5487791 . - . ID=gene321;Name=AC087380.12-001;name2=UBQLN3 chr11 ENCODE exon 5485106 5487400 . - . Parent=gene321 chr11 ENCODE CDS 5485397 5487364 . - 0 Parent=gene321 chr11 ENCODE exon 5487680 5487791 . - . Parent=gene321 ### chr11 ENCODE gene 5486702 5487764 . - . ID=gene322;Name=AC087380.12-002;name2=UBQLN3 chr11 ENCODE CDS 5486702 5487364 . - 0 Parent=gene322 chr11 ENCODE exon 5486702 5487433 . - . Parent=gene322 chr11 ENCODE exon 5487680 5487764 . - . Parent=gene322 ### chr11 ENCODE gene 5492199 5494511 . - . ID=gene323;Name=AC087380.13-001;name2=AC087380.13 chr11 ENCODE exon 5492199 5494511 . - . Parent=gene323 chr11 ENCODE CDS 5492820 5494247 . - 0 Parent=gene323 ### chr11 ENCODE gene 5522367 5523329 . - . ID=gene324;name2=OR52H1;Name=AC087380.16-001 chr11 ENCODE exon 5522367 5523329 . - . Parent=gene324 chr11 ENCODE CDS 5522367 5523329 . - 0 Parent=gene324 ### chr11 ENCODE gene 5558683 5559690 . + . ID=gene325;Name=AC015691.8-001;name2=OR52B6 chr11 ENCODE exon 5558683 5559690 . + . Parent=gene325 chr11 ENCODE CDS 5558683 5559690 . + 0 Parent=gene325 ### chr11 ENCODE gene 5573915 5590758 . + . ID=gene326;Name=AC015691.9-001;name2=TRIM6 chr11 ENCODE exon 5573915 5573987 . + . Parent=gene326 chr11 ENCODE exon 5581052 5581541 . + . Parent=gene326 chr11 ENCODE CDS 5581119 5581541 . + 0 Parent=gene326 chr11 ENCODE exon 5582340 5582435 . + . Parent=gene326 chr11 ENCODE CDS 5582340 5582435 . + 0 Parent=gene326 chr11 ENCODE exon 5583143 5583373 . + . Parent=gene326 chr11 ENCODE CDS 5583143 5583373 . + 0 Parent=gene326 chr11 ENCODE exon 5586178 5586200 . + . Parent=gene326 chr11 ENCODE CDS 5586178 5586200 . + 0 Parent=gene326 chr11 ENCODE exon 5587951 5588051 . + . Parent=gene326 chr11 ENCODE CDS 5587951 5588051 . + 1 Parent=gene326 chr11 ENCODE exon 5588341 5588367 . + . Parent=gene326 chr11 ENCODE CDS 5588341 5588367 . + 2 Parent=gene326 chr11 ENCODE CDS 5588583 5589148 . + 2 Parent=gene326 chr11 ENCODE exon 5588583 5590758 . + . Parent=gene326 ### chr11 ENCODE gene 5573916 5587996 . + . ID=gene327;Name=AC015691.9-007;name2=TRIM6 chr11 ENCODE exon 5573916 5573987 . + . Parent=gene327 chr11 ENCODE exon 5582340 5582435 . + . Parent=gene327 chr11 ENCODE exon 5583143 5583373 . + . Parent=gene327 chr11 ENCODE exon 5586178 5586200 . + . Parent=gene327 chr11 ENCODE exon 5587951 5587996 . + . Parent=gene327 ### chr11 ENCODE gene 5573935 5590229 . + . ID=gene328;Name=AC015691.9-002;name2=TRIM6 chr11 ENCODE exon 5573935 5573987 . + . Parent=gene328 chr11 ENCODE exon 5581052 5581367 . + . Parent=gene328 chr11 ENCODE CDS 5581119 5581367 . + 0 Parent=gene328 chr11 ENCODE exon 5581446 5581541 . + . Parent=gene328 chr11 ENCODE CDS 5581446 5581541 . + 0 Parent=gene328 chr11 ENCODE exon 5582340 5582435 . + . Parent=gene328 chr11 ENCODE CDS 5582340 5582435 . + 0 Parent=gene328 chr11 ENCODE exon 5583143 5583373 . + . Parent=gene328 chr11 ENCODE CDS 5583143 5583373 . + 0 Parent=gene328 chr11 ENCODE exon 5586178 5586200 . + . Parent=gene328 chr11 ENCODE CDS 5586178 5586200 . + 0 Parent=gene328 chr11 ENCODE exon 5587951 5588051 . + . Parent=gene328 chr11 ENCODE CDS 5587951 5588051 . + 1 Parent=gene328 chr11 ENCODE exon 5588341 5588367 . + . Parent=gene328 chr11 ENCODE CDS 5588341 5588367 . + 2 Parent=gene328 chr11 ENCODE CDS 5588583 5589148 . + 2 Parent=gene328 chr11 ENCODE exon 5588583 5590229 . + . Parent=gene328 ### chr11 ENCODE gene 5574462 5590758 . + . ID=gene329;Name=AC015691.9-003;name2=TRIM6 chr11 ENCODE exon 5574462 5574720 . + . Parent=gene329 chr11 ENCODE CDS 5574704 5574720 . + 0 Parent=gene329 chr11 ENCODE exon 5581052 5581541 . + . Parent=gene329 chr11 ENCODE CDS 5581052 5581541 . + 1 Parent=gene329 chr11 ENCODE exon 5582340 5582435 . + . Parent=gene329 chr11 ENCODE CDS 5582340 5582435 . + 0 Parent=gene329 chr11 ENCODE exon 5583143 5583373 . + . Parent=gene329 chr11 ENCODE CDS 5583143 5583373 . + 0 Parent=gene329 chr11 ENCODE exon 5586178 5586200 . + . Parent=gene329 chr11 ENCODE CDS 5586178 5586200 . + 0 Parent=gene329 chr11 ENCODE exon 5587951 5588051 . + . Parent=gene329 chr11 ENCODE CDS 5587951 5588051 . + 1 Parent=gene329 chr11 ENCODE exon 5588341 5588367 . + . Parent=gene329 chr11 ENCODE CDS 5588341 5588367 . + 2 Parent=gene329 chr11 ENCODE CDS 5588583 5589148 . + 2 Parent=gene329 chr11 ENCODE exon 5588583 5590758 . + . Parent=gene329 ### chr11 ENCODE gene 5574531 5622204 . + . ID=gene330;Name=AC015691.11-001;name2=TRIM6-TRIM34 chr11 ENCODE exon 5574531 5574720 . + . Parent=gene330 chr11 ENCODE CDS 5574704 5574720 . + 0 Parent=gene330 chr11 ENCODE exon 5581052 5581541 . + . Parent=gene330 chr11 ENCODE CDS 5581052 5581541 . + 1 Parent=gene330 chr11 ENCODE exon 5582340 5582435 . + . Parent=gene330 chr11 ENCODE CDS 5582340 5582435 . + 0 Parent=gene330 chr11 ENCODE exon 5583143 5583373 . + . Parent=gene330 chr11 ENCODE CDS 5583143 5583373 . + 0 Parent=gene330 chr11 ENCODE exon 5586178 5586200 . + . Parent=gene330 chr11 ENCODE CDS 5586178 5586200 . + 0 Parent=gene330 chr11 ENCODE exon 5587951 5588051 . + . Parent=gene330 chr11 ENCODE CDS 5587951 5588051 . + 1 Parent=gene330 chr11 ENCODE exon 5588341 5588367 . + . Parent=gene330 chr11 ENCODE CDS 5588341 5588367 . + 2 Parent=gene330 chr11 ENCODE exon 5610061 5610560 . + . Parent=gene330 chr11 ENCODE CDS 5610061 5610560 . + 2 Parent=gene330 chr11 ENCODE exon 5611610 5611705 . + . Parent=gene330 chr11 ENCODE CDS 5611610 5611705 . + 0 Parent=gene330 chr11 ENCODE exon 5612437 5612667 . + . Parent=gene330 chr11 ENCODE CDS 5612437 5612667 . + 0 Parent=gene330 chr11 ENCODE exon 5618973 5618995 . + . Parent=gene330 chr11 ENCODE CDS 5618973 5618995 . + 0 Parent=gene330 chr11 ENCODE exon 5620212 5620312 . + . Parent=gene330 chr11 ENCODE CDS 5620212 5620312 . + 1 Parent=gene330 chr11 ENCODE exon 5620623 5620649 . + . Parent=gene330 chr11 ENCODE CDS 5620623 5620649 . + 2 Parent=gene330 chr11 ENCODE CDS 5620950 5621515 . + 2 Parent=gene330 chr11 ENCODE exon 5620950 5622204 . + . Parent=gene330 ### chr11 ENCODE gene 5574552 5590758 . + . ID=gene331;Name=AC015691.9-004;name2=TRIM6 chr11 ENCODE exon 5574552 5574720 . + . Parent=gene331 chr11 ENCODE exon 5581414 5581541 . + . Parent=gene331 chr11 ENCODE exon 5582340 5582435 . + . Parent=gene331 chr11 ENCODE exon 5583143 5583373 . + . Parent=gene331 chr11 ENCODE exon 5586178 5586200 . + . Parent=gene331 chr11 ENCODE exon 5587951 5588051 . + . Parent=gene331 chr11 ENCODE exon 5588341 5588367 . + . Parent=gene331 chr11 ENCODE exon 5588583 5590758 . + . Parent=gene331 ### chr11 ENCODE gene 5582978 5589085 . + . ID=gene332;Name=AC015691.9-005;name2=TRIM6 chr11 ENCODE exon 5582978 5583373 . + . Parent=gene332 chr11 ENCODE exon 5586178 5586200 . + . Parent=gene332 chr11 ENCODE exon 5587951 5588051 . + . Parent=gene332 chr11 ENCODE exon 5588341 5588367 . + . Parent=gene332 chr11 ENCODE exon 5588583 5589085 . + . Parent=gene332 ### chr11 ENCODE gene 5583355 5590764 . + . ID=gene333;name2=TRIM6;Name=AC015691.9-006 chr11 ENCODE exon 5583355 5583373 . + . Parent=gene333 chr11 ENCODE exon 5586178 5586200 . + . Parent=gene333 chr11 ENCODE exon 5587951 5588051 . + . Parent=gene333 chr11 ENCODE exon 5588211 5588367 . + . Parent=gene333 chr11 ENCODE exon 5588583 5590764 . + . Parent=gene333 ### chr11 ENCODE gene 5597570 5622204 . + . ID=gene334;Name=AC015691.10-003;name2=TRIM34 chr11 ENCODE exon 5597570 5597829 . + . Parent=gene334 chr11 ENCODE exon 5610061 5610560 . + . Parent=gene334 chr11 ENCODE CDS 5610138 5610560 . + 0 Parent=gene334 chr11 ENCODE exon 5611610 5611705 . + . Parent=gene334 chr11 ENCODE CDS 5611610 5611705 . + 0 Parent=gene334 chr11 ENCODE exon 5612437 5612667 . + . Parent=gene334 chr11 ENCODE CDS 5612437 5612667 . + 0 Parent=gene334 chr11 ENCODE exon 5618973 5618995 . + . Parent=gene334 chr11 ENCODE CDS 5618973 5618995 . + 0 Parent=gene334 chr11 ENCODE exon 5620212 5620312 . + . Parent=gene334 chr11 ENCODE CDS 5620212 5620312 . + 1 Parent=gene334 chr11 ENCODE exon 5620623 5620649 . + . Parent=gene334 chr11 ENCODE CDS 5620623 5620649 . + 2 Parent=gene334 chr11 ENCODE CDS 5620950 5621515 . + 2 Parent=gene334 chr11 ENCODE exon 5620950 5622204 . + . Parent=gene334 ### chr11 ENCODE gene 5602789 5622204 . + . ID=gene335;Name=AC015691.10-001;name2=TRIM34 chr11 ENCODE exon 5602789 5602866 . + . Parent=gene335 chr11 ENCODE exon 5610061 5610560 . + . Parent=gene335 chr11 ENCODE CDS 5610138 5610560 . + 0 Parent=gene335 chr11 ENCODE exon 5611610 5611705 . + . Parent=gene335 chr11 ENCODE CDS 5611610 5611705 . + 0 Parent=gene335 chr11 ENCODE exon 5612437 5612667 . + . Parent=gene335 chr11 ENCODE CDS 5612437 5612667 . + 0 Parent=gene335 chr11 ENCODE exon 5618973 5618995 . + . Parent=gene335 chr11 ENCODE CDS 5618973 5618995 . + 0 Parent=gene335 chr11 ENCODE exon 5620212 5620312 . + . Parent=gene335 chr11 ENCODE CDS 5620212 5620312 . + 1 Parent=gene335 chr11 ENCODE exon 5620623 5620649 . + . Parent=gene335 chr11 ENCODE CDS 5620623 5620649 . + 2 Parent=gene335 chr11 ENCODE CDS 5620950 5621515 . + 2 Parent=gene335 chr11 ENCODE exon 5620950 5622204 . + . Parent=gene335 ### chr11 ENCODE gene 5602823 5622204 . + . ID=gene336;Name=AC015691.10-002;name2=TRIM34 chr11 ENCODE exon 5602823 5602866 . + . Parent=gene336 chr11 ENCODE exon 5610061 5610475 . + . Parent=gene336 chr11 ENCODE exon 5610543 5610560 . + . Parent=gene336 chr11 ENCODE exon 5611610 5611705 . + . Parent=gene336 chr11 ENCODE exon 5612437 5612667 . + . Parent=gene336 chr11 ENCODE exon 5618973 5618995 . + . Parent=gene336 chr11 ENCODE exon 5620212 5620312 . + . Parent=gene336 chr11 ENCODE exon 5620623 5620649 . + . Parent=gene336 chr11 ENCODE exon 5620950 5622204 . + . Parent=gene336 ### chr11 ENCODE gene 5610087 5619104 . + . ID=gene337;Name=AC015691.10-004;name2=TRIM34 chr11 ENCODE exon 5610087 5610560 . + . Parent=gene337 chr11 ENCODE exon 5611610 5611705 . + . Parent=gene337 chr11 ENCODE exon 5612437 5612667 . + . Parent=gene337 chr11 ENCODE exon 5618973 5619104 . + . Parent=gene337 ### chr11 ENCODE gene 5612644 5621615 . + . ID=gene338;Name=AC015691.10-005;name2=TRIM34 chr11 ENCODE exon 5612644 5612667 . + . Parent=gene338 chr11 ENCODE exon 5618973 5618995 . + . Parent=gene338 chr11 ENCODE exon 5620212 5620312 . + . Parent=gene338 chr11 ENCODE exon 5620623 5620659 . + . Parent=gene338 chr11 ENCODE exon 5620950 5621615 . + . Parent=gene338 ### chr11 ENCODE gene 5641363 5662869 . - . ID=gene339;Name=AC015691.12-001;name2=TRIM5 chr11 ENCODE exon 5641363 5643201 . - . Parent=gene339 chr11 ENCODE CDS 5642615 5643201 . - 2 Parent=gene339 chr11 ENCODE exon 5643462 5643488 . - . Parent=gene339 chr11 ENCODE CDS 5643462 5643488 . - 2 Parent=gene339 chr11 ENCODE exon 5643787 5643887 . - . Parent=gene339 chr11 ENCODE CDS 5643787 5643887 . - 1 Parent=gene339 chr11 ENCODE exon 5645495 5645517 . - . Parent=gene339 chr11 ENCODE CDS 5645495 5645517 . - 0 Parent=gene339 chr11 ENCODE exon 5656010 5656240 . - . Parent=gene339 chr11 ENCODE CDS 5656010 5656240 . - 0 Parent=gene339 chr11 ENCODE exon 5656880 5656975 . - . Parent=gene339 chr11 ENCODE CDS 5656880 5656975 . - 0 Parent=gene339 chr11 ENCODE CDS 5657567 5657983 . - 0 Parent=gene339 chr11 ENCODE exon 5657567 5658044 . - . Parent=gene339 chr11 ENCODE exon 5662674 5662869 . - . Parent=gene339 ### chr11 ENCODE gene 5641369 5663200 . - . ID=gene340;Name=AC015691.12-003;name2=TRIM5 chr11 ENCODE exon 5641369 5641979 . - . Parent=gene340 chr11 ENCODE exon 5643462 5643488 . - . Parent=gene340 chr11 ENCODE exon 5643787 5643887 . - . Parent=gene340 chr11 ENCODE exon 5645495 5645517 . - . Parent=gene340 chr11 ENCODE exon 5656010 5656240 . - . Parent=gene340 chr11 ENCODE exon 5656880 5656975 . - . Parent=gene340 chr11 ENCODE exon 5657567 5658044 . - . Parent=gene340 chr11 ENCODE exon 5662822 5663200 . - . Parent=gene340 ### chr11 ENCODE gene 5641370 5658038 . - . ID=gene341;Name=AC015691.12-005;name2=TRIM5 chr11 ENCODE exon 5641370 5643201 . - . Parent=gene341 chr11 ENCODE exon 5643462 5643488 . - . Parent=gene341 chr11 ENCODE exon 5643787 5643887 . - . Parent=gene341 chr11 ENCODE exon 5656010 5656240 . - . Parent=gene341 chr11 ENCODE exon 5656880 5656975 . - . Parent=gene341 chr11 ENCODE exon 5657567 5658038 . - . Parent=gene341 ### chr11 ENCODE gene 5641410 5662862 . - . ID=gene342;Name=AC015691.12-002;name2=TRIM5 chr11 ENCODE exon 5641410 5643488 . - . Parent=gene342 chr11 ENCODE exon 5645495 5645517 . - . Parent=gene342 chr11 ENCODE exon 5656010 5657961 . - . Parent=gene342 chr11 ENCODE exon 5658020 5658044 . - . Parent=gene342 chr11 ENCODE exon 5662674 5662862 . - . Parent=gene342 ### chr11 ENCODE gene 5641423 5662848 . - . ID=gene343;Name=AC015691.12-004;name2=TRIM5 chr11 ENCODE exon 5641423 5643488 . - . Parent=gene343 chr11 ENCODE CDS 5643313 5643488 . - 2 Parent=gene343 chr11 ENCODE exon 5643787 5643887 . - . Parent=gene343 chr11 ENCODE CDS 5643787 5643887 . - 1 Parent=gene343 chr11 ENCODE exon 5645495 5645517 . - . Parent=gene343 chr11 ENCODE CDS 5645495 5645517 . - 0 Parent=gene343 chr11 ENCODE exon 5656010 5656240 . - . Parent=gene343 chr11 ENCODE CDS 5656010 5656240 . - 0 Parent=gene343 chr11 ENCODE exon 5656880 5656975 . - . Parent=gene343 chr11 ENCODE CDS 5656880 5656975 . - 0 Parent=gene343 chr11 ENCODE CDS 5657567 5657983 . - 0 Parent=gene343 chr11 ENCODE exon 5657567 5658044 . - . Parent=gene343 chr11 ENCODE exon 5662674 5662848 . - . Parent=gene343 ### chr11 ENCODE gene 5641637 5657613 . - . ID=gene344;Name=AC015691.12-009;name2=TRIM5 chr11 ENCODE exon 5641637 5641979 . - . Parent=gene344 chr11 ENCODE CDS 5641841 5641979 . - 2 Parent=gene344 chr11 ENCODE exon 5643462 5643488 . - . Parent=gene344 chr11 ENCODE CDS 5643462 5643488 . - 2 Parent=gene344 chr11 ENCODE exon 5645495 5645517 . - . Parent=gene344 chr11 ENCODE CDS 5645495 5645517 . - 1 Parent=gene344 chr11 ENCODE exon 5656010 5656240 . - . Parent=gene344 chr11 ENCODE CDS 5656010 5656240 . - 1 Parent=gene344 chr11 ENCODE exon 5656880 5656975 . - . Parent=gene344 chr11 ENCODE CDS 5656880 5656975 . - 1 Parent=gene344 chr11 ENCODE exon 5657567 5657613 . - . Parent=gene344 chr11 ENCODE CDS 5657567 5657613 . - 0 Parent=gene344 ### chr11 ENCODE gene 5641864 5657663 . - . ID=gene345;Name=AC015691.12-008;name2=TRIM5 chr11 ENCODE exon 5641864 5641979 . - . Parent=gene345 chr11 ENCODE exon 5642975 5643201 . - . Parent=gene345 chr11 ENCODE exon 5643462 5643488 . - . Parent=gene345 chr11 ENCODE exon 5643787 5643887 . - . Parent=gene345 chr11 ENCODE exon 5645495 5645517 . - . Parent=gene345 chr11 ENCODE exon 5656010 5656240 . - . Parent=gene345 chr11 ENCODE exon 5656880 5656975 . - . Parent=gene345 chr11 ENCODE exon 5657567 5657663 . - . Parent=gene345 ### chr11 ENCODE gene 5642381 5657906 . - . ID=gene346;Name=AC015691.12-006;name2=TRIM5 chr11 ENCODE exon 5642381 5642559 . - . Parent=gene346 chr11 ENCODE exon 5656104 5656240 . - . Parent=gene346 chr11 ENCODE exon 5656880 5656975 . - . Parent=gene346 chr11 ENCODE exon 5657567 5657906 . - . Parent=gene346 ### chr11 ENCODE gene 5643226 5656946 . - . ID=gene347;Name=AC015691.12-011;name2=TRIM5 chr11 ENCODE exon 5643226 5643488 . - . Parent=gene347 chr11 ENCODE exon 5643787 5643887 . - . Parent=gene347 chr11 ENCODE exon 5656010 5656240 . - . Parent=gene347 chr11 ENCODE exon 5656880 5656946 . - . Parent=gene347 ### chr11 ENCODE gene 5643686 5657639 . - . ID=gene348;name2=TRIM5;Name=AC015691.12-010 chr11 ENCODE exon 5643686 5643887 . - . Parent=gene348 chr11 ENCODE exon 5656010 5656240 . - . Parent=gene348 chr11 ENCODE exon 5656880 5656975 . - . Parent=gene348 chr11 ENCODE exon 5657567 5657639 . - . Parent=gene348 ### chr11 ENCODE gene 5655752 5657737 . - . ID=gene349;Name=AC015691.12-007;name2=TRIM5 chr11 ENCODE exon 5655752 5656240 . - . Parent=gene349 chr11 ENCODE exon 5656880 5656975 . - . Parent=gene349 chr11 ENCODE exon 5657567 5657737 . - . Parent=gene349 ### chr11 ENCODE gene 5656126 5658044 . - . ID=gene350;name2=TRIM5;Name=AC015691.12-012 chr11 ENCODE exon 5656126 5656240 . - . Parent=gene350 chr11 ENCODE exon 5656880 5656975 . - . Parent=gene350 chr11 ENCODE exon 5657567 5658044 . - . Parent=gene350 ### chr11 ENCODE gene 5657768 5662849 . - . ID=gene351;Name=AC015691.12-013;name2=TRIM5 chr11 ENCODE CDS 5657768 5657983 . - 0 Parent=gene351 chr11 ENCODE exon 5657768 5658044 . - . Parent=gene351 chr11 ENCODE exon 5661792 5661945 . - . Parent=gene351 chr11 ENCODE exon 5662674 5662849 . - . Parent=gene351 ### chr11 ENCODE gene 5667495 5688669 . + . ID=gene352;Name=AC109341.3-001;name2=TRIM22 chr11 ENCODE exon 5667495 5667705 . + . Parent=gene352 chr11 ENCODE exon 5673973 5674461 . + . Parent=gene352 chr11 ENCODE CDS 5674039 5674461 . + 0 Parent=gene352 chr11 ENCODE exon 5675054 5675149 . + . Parent=gene352 chr11 ENCODE CDS 5675054 5675149 . + 0 Parent=gene352 chr11 ENCODE exon 5676121 5676351 . + . Parent=gene352 chr11 ENCODE CDS 5676121 5676351 . + 0 Parent=gene352 chr11 ENCODE exon 5684400 5684422 . + . Parent=gene352 chr11 ENCODE CDS 5684400 5684422 . + 0 Parent=gene352 chr11 ENCODE exon 5685979 5686079 . + . Parent=gene352 chr11 ENCODE CDS 5685979 5686079 . + 1 Parent=gene352 chr11 ENCODE exon 5686383 5686409 . + . Parent=gene352 chr11 ENCODE CDS 5686383 5686409 . + 2 Parent=gene352 chr11 ENCODE CDS 5686859 5687454 . + 2 Parent=gene352 chr11 ENCODE exon 5686859 5688669 . + . Parent=gene352 ### chr11 ENCODE gene 5667503 5676212 . + . ID=gene353;Name=AC109341.3-003;name2=TRIM22 chr11 ENCODE exon 5667503 5667510 . + . Parent=gene353 chr11 ENCODE exon 5667579 5667705 . + . Parent=gene353 chr11 ENCODE exon 5673973 5674461 . + . Parent=gene353 chr11 ENCODE CDS 5674039 5674461 . + 0 Parent=gene353 chr11 ENCODE exon 5675054 5675149 . + . Parent=gene353 chr11 ENCODE CDS 5675054 5675149 . + 0 Parent=gene353 chr11 ENCODE exon 5676121 5676212 . + . Parent=gene353 chr11 ENCODE CDS 5676121 5676212 . + 0 Parent=gene353 ### chr11 ENCODE gene 5667627 5674819 . + . ID=gene354;Name=AC109341.3-004;name2=TRIM22 chr11 ENCODE exon 5667627 5667705 . + . Parent=gene354 chr11 ENCODE exon 5673973 5674819 . + . Parent=gene354 ### chr11 ENCODE gene 5667686 5686969 . + . ID=gene355;Name=AC109341.3-006;name2=TRIM22 chr11 ENCODE exon 5667686 5667705 . + . Parent=gene355 chr11 ENCODE exon 5673973 5674461 . + . Parent=gene355 chr11 ENCODE CDS 5674039 5674461 . + 0 Parent=gene355 chr11 ENCODE exon 5676121 5676351 . + . Parent=gene355 chr11 ENCODE CDS 5676121 5676351 . + 0 Parent=gene355 chr11 ENCODE exon 5684400 5684422 . + . Parent=gene355 chr11 ENCODE CDS 5684400 5684422 . + 0 Parent=gene355 chr11 ENCODE exon 5685979 5686079 . + . Parent=gene355 chr11 ENCODE CDS 5685979 5686079 . + 1 Parent=gene355 chr11 ENCODE exon 5686383 5686409 . + . Parent=gene355 chr11 ENCODE CDS 5686383 5686409 . + 2 Parent=gene355 chr11 ENCODE exon 5686859 5686969 . + . Parent=gene355 chr11 ENCODE CDS 5686859 5686969 . + 2 Parent=gene355 ### chr11 ENCODE gene 5668833 5676282 . + . ID=gene356;Name=AC109341.3-005;name2=TRIM22 chr11 ENCODE exon 5668833 5668982 . + . Parent=gene356 chr11 ENCODE exon 5673973 5674461 . + . Parent=gene356 chr11 ENCODE CDS 5674039 5674461 . + 0 Parent=gene356 chr11 ENCODE exon 5675054 5675149 . + . Parent=gene356 chr11 ENCODE CDS 5675054 5675149 . + 0 Parent=gene356 chr11 ENCODE exon 5676121 5676282 . + . Parent=gene356 chr11 ENCODE CDS 5676121 5676282 . + 0 Parent=gene356 ### chr11 ENCODE gene 5674298 5687253 . + . ID=gene357;Name=AC109341.3-002;name2=TRIM22 chr11 ENCODE exon 5674298 5674461 . + . Parent=gene357 chr11 ENCODE exon 5675054 5676351 . + . Parent=gene357 chr11 ENCODE exon 5684400 5684422 . + . Parent=gene357 chr11 ENCODE exon 5685979 5686079 . + . Parent=gene357 chr11 ENCODE exon 5686383 5686409 . + . Parent=gene357 chr11 ENCODE exon 5686859 5687253 . + . Parent=gene357 ### chr11 ENCODE gene 5674308 5686943 . + . ID=gene358;Name=AC109341.3-007;name2=TRIM22 chr11 ENCODE exon 5674308 5674461 . + . Parent=gene358 chr11 ENCODE exon 5675054 5675149 . + . Parent=gene358 chr11 ENCODE exon 5676121 5676223 . + . Parent=gene358 chr11 ENCODE exon 5676286 5676351 . + . Parent=gene358 chr11 ENCODE exon 5684400 5684422 . + . Parent=gene358 chr11 ENCODE exon 5685979 5686079 . + . Parent=gene358 chr11 ENCODE exon 5686383 5686409 . + . Parent=gene358 chr11 ENCODE exon 5686859 5686943 . + . Parent=gene358 ### chr11 ENCODE gene 5684356 5687123 . + . ID=gene359;name2=TRIM22;Name=AC109341.3-009 chr11 ENCODE exon 5684356 5684422 . + . Parent=gene359 chr11 ENCODE exon 5685979 5686079 . + . Parent=gene359 chr11 ENCODE exon 5686383 5686409 . + . Parent=gene359 chr11 ENCODE exon 5686859 5687123 . + . Parent=gene359 ### chr11 ENCODE gene 5684400 5692849 . + . ID=gene360;Name=AC109341.3-008;name2=TRIM22 chr11 ENCODE exon 5684400 5684422 . + . Parent=gene360 chr11 ENCODE exon 5685979 5686079 . + . Parent=gene360 chr11 ENCODE exon 5686383 5686409 . + . Parent=gene360 chr11 ENCODE exon 5692493 5692849 . + . Parent=gene360 ### chr11 ENCODE gene 5686014 5714895 . + . ID=gene361;Name=AC131574.4-003;name2=OR56B1 chr11 ENCODE exon 5686014 5686079 . + . Parent=gene361 chr11 ENCODE exon 5686383 5686409 . + . Parent=gene361 chr11 ENCODE exon 5711985 5712041 . + . Parent=gene361 chr11 ENCODE exon 5713802 5714895 . + . Parent=gene361 ### chr11 ENCODE gene 5686014 5714895 . + . ID=gene362;Name=AC131574.4-002;name2=OR56B1 chr11 ENCODE exon 5686014 5686079 . + . Parent=gene362 chr11 ENCODE exon 5686383 5686409 . + . Parent=gene362 chr11 ENCODE exon 5711988 5712041 . + . Parent=gene362 chr11 ENCODE exon 5713802 5714895 . + . Parent=gene362 ### chr11 ENCODE gene 5714323 5715297 . + . ID=gene363;Name=AC131574.4-001;name2=OR56B1 chr11 ENCODE exon 5714323 5715297 . + . Parent=gene363 chr11 ENCODE CDS 5714323 5715297 . + 0 Parent=gene363 ### chr11 ENCODE gene 5732547 5732587 . + . ID=gene364;name2=OR52N4;Name=AC131574.5-001 chr11 ENCODE exon 5732547 5732587 . + . Parent=gene364 chr11 ENCODE CDS 5732547 5732587 . + 0 Parent=gene364 ### chr11 ENCODE gene 63973122 63975702 . + . ID=gene365;Name=AP003774.4-001;name2=AP003774.4 chr11 ENCODE exon 63973122 63973700 . + . Parent=gene365 chr11 ENCODE CDS 63973593 63973700 . + 0 Parent=gene365 chr11 ENCODE CDS 63973945 63974220 . + 0 Parent=gene365 chr11 ENCODE exon 63973945 63975702 . + . Parent=gene365 ### chr11 ENCODE gene 64079674 64096923 . + . ID=gene366;Name=AP001092.1-001;name2=SLC22A11 chr11 ENCODE exon 64079674 64080440 . + . Parent=gene366 chr11 ENCODE CDS 64080048 64080440 . + 0 Parent=gene366 chr11 ENCODE exon 64083183 64083286 . + . Parent=gene366 chr11 ENCODE CDS 64083183 64083286 . + 0 Parent=gene366 chr11 ENCODE exon 64086052 64086206 . + . Parent=gene366 chr11 ENCODE CDS 64086052 64086206 . + 1 Parent=gene366 chr11 ENCODE exon 64086315 64086483 . + . Parent=gene366 chr11 ENCODE CDS 64086315 64086483 . + 2 Parent=gene366 chr11 ENCODE exon 64088356 64088476 . + . Parent=gene366 chr11 ENCODE CDS 64088356 64088476 . + 1 Parent=gene366 chr11 ENCODE exon 64089270 64089385 . + . Parent=gene366 chr11 ENCODE CDS 64089270 64089385 . + 0 Parent=gene366 chr11 ENCODE exon 64091647 64091861 . + . Parent=gene366 chr11 ENCODE CDS 64091647 64091861 . + 1 Parent=gene366 chr11 ENCODE exon 64092718 64092826 . + . Parent=gene366 chr11 ENCODE CDS 64092718 64092826 . + 2 Parent=gene366 chr11 ENCODE exon 64093700 64093906 . + . Parent=gene366 chr11 ENCODE CDS 64093700 64093906 . + 1 Parent=gene366 chr11 ENCODE CDS 64095027 64095090 . + 1 Parent=gene366 chr11 ENCODE exon 64095027 64096923 . + . Parent=gene366 ### chr11 ENCODE gene 64079738 64095575 . + . ID=gene367;Name=AP001092.1-002;name2=SLC22A11 chr11 ENCODE exon 64079738 64080440 . + . Parent=gene367 chr11 ENCODE CDS 64080048 64080440 . + 0 Parent=gene367 chr11 ENCODE exon 64083183 64083286 . + . Parent=gene367 chr11 ENCODE CDS 64083183 64083286 . + 0 Parent=gene367 chr11 ENCODE exon 64086052 64086206 . + . Parent=gene367 chr11 ENCODE CDS 64086052 64086206 . + 1 Parent=gene367 chr11 ENCODE exon 64086315 64086483 . + . Parent=gene367 chr11 ENCODE CDS 64086315 64086483 . + 2 Parent=gene367 chr11 ENCODE exon 64088356 64088476 . + . Parent=gene367 chr11 ENCODE CDS 64088356 64088476 . + 1 Parent=gene367 chr11 ENCODE exon 64089270 64089385 . + . Parent=gene367 chr11 ENCODE CDS 64089270 64089385 . + 0 Parent=gene367 chr11 ENCODE exon 64093700 64093906 . + . Parent=gene367 chr11 ENCODE CDS 64093700 64093906 . + 1 Parent=gene367 chr11 ENCODE CDS 64095027 64095090 . + 1 Parent=gene367 chr11 ENCODE exon 64095027 64095575 . + . Parent=gene367 ### chr11 ENCODE gene 64080004 64095575 . + . ID=gene368;name2=SLC22A11;Name=AP001092.1-003 chr11 ENCODE exon 64080004 64080440 . + . Parent=gene368 chr11 ENCODE CDS 64080048 64080440 . + 0 Parent=gene368 chr11 ENCODE exon 64083183 64083286 . + . Parent=gene368 chr11 ENCODE CDS 64083183 64083286 . + 0 Parent=gene368 chr11 ENCODE exon 64086052 64086206 . + . Parent=gene368 chr11 ENCODE CDS 64086052 64086206 . + 1 Parent=gene368 chr11 ENCODE exon 64086315 64086483 . + . Parent=gene368 chr11 ENCODE CDS 64086315 64086483 . + 2 Parent=gene368 chr11 ENCODE exon 64088356 64088476 . + . Parent=gene368 chr11 ENCODE CDS 64088356 64088476 . + 1 Parent=gene368 chr11 ENCODE exon 64089270 64089385 . + . Parent=gene368 chr11 ENCODE CDS 64089270 64089385 . + 0 Parent=gene368 chr11 ENCODE exon 64091647 64091861 . + . Parent=gene368 chr11 ENCODE CDS 64091647 64091861 . + 1 Parent=gene368 chr11 ENCODE exon 64092718 64092826 . + . Parent=gene368 chr11 ENCODE CDS 64092718 64092826 . + 2 Parent=gene368 chr11 ENCODE CDS 64095027 64095090 . + 1 Parent=gene368 chr11 ENCODE exon 64095027 64095575 . + . Parent=gene368 ### chr11 ENCODE gene 64080015 64089413 . + . ID=gene369;Name=AP001092.1-006;name2=SLC22A11 chr11 ENCODE exon 64080015 64080440 . + . Parent=gene369 chr11 ENCODE exon 64086052 64086206 . + . Parent=gene369 chr11 ENCODE exon 64086315 64086483 . + . Parent=gene369 chr11 ENCODE exon 64089270 64089413 . + . Parent=gene369 ### chr11 ENCODE gene 64080015 64090331 . + . ID=gene370;name2=SLC22A11;Name=AP001092.1-004 chr11 ENCODE exon 64080015 64080440 . + . Parent=gene370 chr11 ENCODE exon 64083183 64083286 . + . Parent=gene370 chr11 ENCODE exon 64086052 64086206 . + . Parent=gene370 chr11 ENCODE exon 64086315 64086483 . + . Parent=gene370 chr11 ENCODE exon 64089270 64090331 . + . Parent=gene370 ### chr11 ENCODE gene 64086130 64090747 . + . ID=gene371;Name=AP001092.1-005;name2=SLC22A11 chr11 ENCODE exon 64086130 64086206 . + . Parent=gene371 chr11 ENCODE exon 64086315 64086483 . + . Parent=gene371 chr11 ENCODE exon 64088356 64088476 . + . Parent=gene371 chr11 ENCODE exon 64089270 64090747 . + . Parent=gene371 ### chr11 ENCODE gene 64091647 64095575 . + . ID=gene372;Name=AP001092.1-008;name2=SLC22A11 chr11 ENCODE exon 64091647 64091861 . + . Parent=gene372 chr11 ENCODE exon 64093700 64093906 . + . Parent=gene372 chr11 ENCODE exon 64095027 64095575 . + . Parent=gene372 ### chr11 ENCODE gene 64091648 64095575 . + . ID=gene373;Name=AP001092.1-007;name2=SLC22A11 chr11 ENCODE exon 64091648 64091861 . + . Parent=gene373 chr11 ENCODE CDS 64091648 64091861 . + 0 Parent=gene373 chr11 ENCODE exon 64092718 64092826 . + . Parent=gene373 chr11 ENCODE CDS 64092718 64092826 . + 2 Parent=gene373 chr11 ENCODE exon 64093832 64093906 . + . Parent=gene373 chr11 ENCODE CDS 64093832 64093906 . + 1 Parent=gene373 chr11 ENCODE CDS 64095027 64095090 . + 1 Parent=gene373 chr11 ENCODE exon 64095027 64095575 . + . Parent=gene373 ### chr11 ENCODE gene 64114689 64126396 . + . ID=gene374;Name=AP001092.2-002;name2=SLC22A12 chr11 ENCODE exon 64114689 64114866 . + . Parent=gene374 chr11 ENCODE exon 64115319 64116006 . + . Parent=gene374 chr11 ENCODE CDS 64115605 64116006 . + 0 Parent=gene374 chr11 ENCODE exon 64116827 64116930 . + . Parent=gene374 chr11 ENCODE CDS 64116827 64116930 . + 0 Parent=gene374 chr11 ENCODE exon 64122564 64122687 . + . Parent=gene374 chr11 ENCODE CDS 64122564 64122687 . + 1 Parent=gene374 chr11 ENCODE exon 64122856 64122971 . + . Parent=gene374 chr11 ENCODE CDS 64122856 64122971 . + 0 Parent=gene374 chr11 ENCODE exon 64123724 64123938 . + . Parent=gene374 chr11 ENCODE CDS 64123724 64123938 . + 1 Parent=gene374 chr11 ENCODE exon 64124415 64124523 . + . Parent=gene374 chr11 ENCODE CDS 64124415 64124523 . + 2 Parent=gene374 chr11 ENCODE exon 64124783 64124986 . + . Parent=gene374 chr11 ENCODE CDS 64124783 64124986 . + 1 Parent=gene374 chr11 ENCODE CDS 64125536 64125599 . + 1 Parent=gene374 chr11 ENCODE exon 64125536 64126396 . + . Parent=gene374 ### chr11 ENCODE gene 64114858 64126396 . + . ID=gene375;Name=AP001092.2-001;name2=SLC22A12 chr11 ENCODE exon 64114858 64116006 . + . Parent=gene375 chr11 ENCODE CDS 64115605 64116006 . + 0 Parent=gene375 chr11 ENCODE exon 64116827 64116930 . + . Parent=gene375 chr11 ENCODE CDS 64116827 64116930 . + 0 Parent=gene375 chr11 ENCODE exon 64117453 64117607 . + . Parent=gene375 chr11 ENCODE CDS 64117453 64117607 . + 1 Parent=gene375 chr11 ENCODE exon 64117683 64117851 . + . Parent=gene375 chr11 ENCODE CDS 64117683 64117851 . + 2 Parent=gene375 chr11 ENCODE exon 64122564 64122687 . + . Parent=gene375 chr11 ENCODE CDS 64122564 64122687 . + 1 Parent=gene375 chr11 ENCODE exon 64122856 64122971 . + . Parent=gene375 chr11 ENCODE CDS 64122856 64122971 . + 0 Parent=gene375 chr11 ENCODE exon 64123724 64123938 . + . Parent=gene375 chr11 ENCODE CDS 64123724 64123938 . + 1 Parent=gene375 chr11 ENCODE exon 64124415 64124523 . + . Parent=gene375 chr11 ENCODE CDS 64124415 64124523 . + 2 Parent=gene375 chr11 ENCODE exon 64124783 64124986 . + . Parent=gene375 chr11 ENCODE CDS 64124783 64124986 . + 1 Parent=gene375 chr11 ENCODE CDS 64125536 64125599 . + 1 Parent=gene375 chr11 ENCODE exon 64125536 64126396 . + . Parent=gene375 ### chr11 ENCODE gene 64115268 64126392 . + . ID=gene376;Name=AP001092.2-003;name2=SLC22A12 chr11 ENCODE exon 64115268 64116006 . + . Parent=gene376 chr11 ENCODE exon 64116827 64116930 . + . Parent=gene376 chr11 ENCODE exon 64117453 64117851 . + . Parent=gene376 chr11 ENCODE exon 64122564 64122687 . + . Parent=gene376 chr11 ENCODE exon 64122856 64122871 . + . Parent=gene376 chr11 ENCODE exon 64126271 64126392 . + . Parent=gene376 ### chr11 ENCODE gene 64115276 64126396 . + . ID=gene377;Name=AP001092.2-004;name2=SLC22A12 chr11 ENCODE exon 64115276 64115595 . + . Parent=gene377 chr11 ENCODE exon 64115707 64116006 . + . Parent=gene377 chr11 ENCODE exon 64116827 64116930 . + . Parent=gene377 chr11 ENCODE exon 64117683 64117851 . + . Parent=gene377 chr11 ENCODE exon 64122564 64122687 . + . Parent=gene377 chr11 ENCODE exon 64122856 64122971 . + . Parent=gene377 chr11 ENCODE exon 64123724 64123938 . + . Parent=gene377 chr11 ENCODE exon 64124415 64124523 . + . Parent=gene377 chr11 ENCODE exon 64124783 64124986 . + . Parent=gene377 chr11 ENCODE exon 64125536 64126396 . + . Parent=gene377 ### chr11 ENCODE gene 64130222 64148044 . - . ID=gene378;Name=AP001092.3-005;name2=NRXN2 chr11 ENCODE exon 64130222 64132130 . - . Parent=gene378 chr11 ENCODE exon 64144342 64144420 . - . Parent=gene378 chr11 ENCODE exon 64146801 64148044 . - . Parent=gene378 ### chr11 ENCODE gene 64130222 64167363 . - . ID=gene379;Name=AP001092.3-003;name2=NRXN2 chr11 ENCODE exon 64130222 64132130 . - . Parent=gene379 chr11 ENCODE CDS 64131244 64132130 . - 2 Parent=gene379 chr11 ENCODE exon 64144342 64144420 . - . Parent=gene379 chr11 ENCODE CDS 64144342 64144420 . - 0 Parent=gene379 chr11 ENCODE exon 64146801 64147126 . - . Parent=gene379 chr11 ENCODE CDS 64146801 64147126 . - 2 Parent=gene379 chr11 ENCODE exon 64150511 64150600 . - . Parent=gene379 chr11 ENCODE CDS 64150511 64150600 . - 2 Parent=gene379 chr11 ENCODE exon 64154450 64154621 . - . Parent=gene379 chr11 ENCODE CDS 64154450 64154621 . - 0 Parent=gene379 chr11 ENCODE exon 64159319 64159500 . - . Parent=gene379 chr11 ENCODE CDS 64159319 64159500 . - 2 Parent=gene379 chr11 ENCODE CDS 64166587 64166851 . - 0 Parent=gene379 chr11 ENCODE exon 64166587 64167363 . - . Parent=gene379 ### chr11 ENCODE gene 64130222 64237959 . - . ID=gene380;Name=AP001092.3-001;name2=NRXN2 chr11 ENCODE exon 64130222 64132130 . - . Parent=gene380 chr11 ENCODE CDS 64131244 64132130 . - 2 Parent=gene380 chr11 ENCODE exon 64144342 64144420 . - . Parent=gene380 chr11 ENCODE CDS 64144342 64144420 . - 0 Parent=gene380 chr11 ENCODE exon 64146801 64147126 . - . Parent=gene380 chr11 ENCODE CDS 64146801 64147126 . - 2 Parent=gene380 chr11 ENCODE exon 64150511 64150600 . - . Parent=gene380 chr11 ENCODE CDS 64150511 64150600 . - 2 Parent=gene380 chr11 ENCODE exon 64154450 64154621 . - . Parent=gene380 chr11 ENCODE CDS 64154450 64154621 . - 0 Parent=gene380 chr11 ENCODE exon 64159319 64159500 . - . Parent=gene380 chr11 ENCODE CDS 64159319 64159500 . - 2 Parent=gene380 chr11 ENCODE exon 64172267 64172386 . - . Parent=gene380 chr11 ENCODE CDS 64172267 64172386 . - 2 Parent=gene380 chr11 ENCODE exon 64172782 64172955 . - . Parent=gene380 chr11 ENCODE CDS 64172782 64172955 . - 2 Parent=gene380 chr11 ENCODE exon 64174496 64174686 . - . Parent=gene380 chr11 ENCODE CDS 64174496 64174686 . - 1 Parent=gene380 chr11 ENCODE exon 64175303 64175684 . - . Parent=gene380 chr11 ENCODE CDS 64175303 64175684 . - 2 Parent=gene380 chr11 ENCODE exon 64176083 64176202 . - . Parent=gene380 chr11 ENCODE CDS 64176083 64176202 . - 2 Parent=gene380 chr11 ENCODE exon 64177744 64177770 . - . Parent=gene380 chr11 ENCODE CDS 64177744 64177770 . - 2 Parent=gene380 chr11 ENCODE exon 64184380 64184583 . - . Parent=gene380 chr11 ENCODE CDS 64184380 64184583 . - 2 Parent=gene380 chr11 ENCODE exon 64184801 64185187 . - . Parent=gene380 chr11 ENCODE CDS 64184801 64185187 . - 2 Parent=gene380 chr11 ENCODE exon 64191298 64191736 . - . Parent=gene380 chr11 ENCODE CDS 64191298 64191736 . - 0 Parent=gene380 chr11 ENCODE exon 64192491 64192652 . - . Parent=gene380 chr11 ENCODE CDS 64192491 64192652 . - 0 Parent=gene380 chr11 ENCODE exon 64201041 64201085 . - . Parent=gene380 chr11 ENCODE CDS 64201041 64201085 . - 0 Parent=gene380 chr11 ENCODE exon 64209694 64209995 . - . Parent=gene380 chr11 ENCODE CDS 64209694 64209995 . - 2 Parent=gene380 chr11 ENCODE exon 64214453 64214524 . - . Parent=gene380 chr11 ENCODE CDS 64214453 64214524 . - 2 Parent=gene380 chr11 ENCODE exon 64216895 64216924 . - . Parent=gene380 chr11 ENCODE CDS 64216895 64216924 . - 2 Parent=gene380 chr11 ENCODE exon 64221823 64221840 . - . Parent=gene380 chr11 ENCODE CDS 64221823 64221840 . - 2 Parent=gene380 chr11 ENCODE CDS 64237018 64237747 . - 0 Parent=gene380 chr11 ENCODE exon 64237018 64237959 . - . Parent=gene380 ### chr11 ENCODE gene 64130222 64247236 . - . ID=gene381;Name=AP001092.3-002;name2=NRXN2 chr11 ENCODE exon 64130222 64132130 . - . Parent=gene381 chr11 ENCODE CDS 64131244 64132130 . - 2 Parent=gene381 chr11 ENCODE exon 64144342 64144420 . - . Parent=gene381 chr11 ENCODE CDS 64144342 64144420 . - 0 Parent=gene381 chr11 ENCODE exon 64146801 64147126 . - . Parent=gene381 chr11 ENCODE CDS 64146801 64147126 . - 2 Parent=gene381 chr11 ENCODE exon 64154450 64154621 . - . Parent=gene381 chr11 ENCODE CDS 64154450 64154621 . - 0 Parent=gene381 chr11 ENCODE exon 64159319 64159500 . - . Parent=gene381 chr11 ENCODE CDS 64159319 64159500 . - 2 Parent=gene381 chr11 ENCODE exon 64172267 64172386 . - . Parent=gene381 chr11 ENCODE CDS 64172267 64172386 . - 2 Parent=gene381 chr11 ENCODE exon 64172782 64172955 . - . Parent=gene381 chr11 ENCODE CDS 64172782 64172955 . - 2 Parent=gene381 chr11 ENCODE exon 64174496 64174686 . - . Parent=gene381 chr11 ENCODE CDS 64174496 64174686 . - 1 Parent=gene381 chr11 ENCODE exon 64175303 64175684 . - . Parent=gene381 chr11 ENCODE CDS 64175303 64175684 . - 2 Parent=gene381 chr11 ENCODE exon 64176083 64176202 . - . Parent=gene381 chr11 ENCODE CDS 64176083 64176202 . - 2 Parent=gene381 chr11 ENCODE exon 64184380 64184583 . - . Parent=gene381 chr11 ENCODE CDS 64184380 64184583 . - 2 Parent=gene381 chr11 ENCODE exon 64184801 64185187 . - . Parent=gene381 chr11 ENCODE CDS 64184801 64185187 . - 2 Parent=gene381 chr11 ENCODE exon 64191298 64191736 . - . Parent=gene381 chr11 ENCODE CDS 64191298 64191736 . - 0 Parent=gene381 chr11 ENCODE exon 64192491 64192652 . - . Parent=gene381 chr11 ENCODE CDS 64192491 64192652 . - 0 Parent=gene381 chr11 ENCODE exon 64201062 64201085 . - . Parent=gene381 chr11 ENCODE CDS 64201062 64201085 . - 0 Parent=gene381 chr11 ENCODE exon 64209694 64209995 . - . Parent=gene381 chr11 ENCODE CDS 64209694 64209995 . - 2 Parent=gene381 chr11 ENCODE exon 64216895 64216924 . - . Parent=gene381 chr11 ENCODE CDS 64216895 64216924 . - 2 Parent=gene381 chr11 ENCODE exon 64221823 64221840 . - . Parent=gene381 chr11 ENCODE CDS 64221823 64221840 . - 2 Parent=gene381 chr11 ENCODE CDS 64237018 64237747 . - 0 Parent=gene381 chr11 ENCODE exon 64237018 64237991 . - . Parent=gene381 chr11 ENCODE exon 64247019 64247236 . - . Parent=gene381 ### chr11 ENCODE gene 64131092 64146844 . - . ID=gene382;Name=AP001092.3-004;name2=NRXN2 chr11 ENCODE exon 64131092 64131548 . - . Parent=gene382 chr11 ENCODE exon 64144342 64144420 . - . Parent=gene382 chr11 ENCODE exon 64146801 64146844 . - . Parent=gene382 ### chr11 ENCODE gene 64146801 64166734 . - . ID=gene383;Name=AP001092.3-006;name2=NRXN2 chr11 ENCODE exon 64146801 64147126 . - . Parent=gene383 chr11 ENCODE CDS 64146801 64147126 . - 2 Parent=gene383 chr11 ENCODE exon 64154450 64154621 . - . Parent=gene383 chr11 ENCODE CDS 64154450 64154621 . - 0 Parent=gene383 chr11 ENCODE exon 64159319 64159500 . - . Parent=gene383 chr11 ENCODE CDS 64159319 64159500 . - 2 Parent=gene383 chr11 ENCODE exon 64166587 64166734 . - . Parent=gene383 chr11 ENCODE CDS 64166587 64166734 . - 0 Parent=gene383 ### chr11 ENCODE gene 64154453 64161493 . - . ID=gene384;Name=AP001092.3-007;name2=NRXN2 chr11 ENCODE exon 64154453 64154621 . - . Parent=gene384 chr11 ENCODE exon 64159319 64159500 . - . Parent=gene384 chr11 ENCODE exon 64161453 64161493 . - . Parent=gene384 ### chr11 ENCODE gene 64154534 64167534 . - . ID=gene385;Name=AP001092.3-008;name2=NRXN2 chr11 ENCODE exon 64154534 64154621 . - . Parent=gene385 chr11 ENCODE exon 64159319 64159500 . - . Parent=gene385 chr11 ENCODE exon 64166587 64166648 . - . Parent=gene385 chr11 ENCODE exon 64167305 64167534 . - . Parent=gene385 ### chr11 ENCODE gene 64175327 64180168 . - . ID=gene386;Name=AP001092.3-009;name2=NRXN2 chr11 ENCODE exon 64175327 64175684 . - . Parent=gene386 chr11 ENCODE exon 64176083 64176202 . - . Parent=gene386 chr11 ENCODE exon 64177744 64177770 . - . Parent=gene386 chr11 ENCODE exon 64180136 64180168 . - . Parent=gene386 ### chr11 ENCODE gene 64184518 64185426 . - . ID=gene387;Name=AP001092.3-010;name2=NRXN2 chr11 ENCODE exon 64184518 64184583 . - . Parent=gene387 chr11 ENCODE exon 64184801 64185187 . - . Parent=gene387 chr11 ENCODE exon 64185269 64185426 . - . Parent=gene387 ### chr11 ENCODE gene 64250959 64264931 . - . ID=gene388;Name=AP001462.3-006;name2=RASGRP2 chr11 ENCODE exon 64250959 64251179 . - . Parent=gene388 chr11 ENCODE exon 64251344 64251411 . - . Parent=gene388 chr11 ENCODE exon 64252911 64253090 . - . Parent=gene388 chr11 ENCODE exon 64253810 64253846 . - . Parent=gene388 chr11 ENCODE exon 64254101 64254242 . - . Parent=gene388 chr11 ENCODE exon 64259160 64259275 . - . Parent=gene388 chr11 ENCODE exon 64259590 64259712 . - . Parent=gene388 chr11 ENCODE exon 64259951 64260028 . - . Parent=gene388 chr11 ENCODE exon 64260801 64261082 . - . Parent=gene388 chr11 ENCODE exon 64263408 64263524 . - . Parent=gene388 chr11 ENCODE exon 64263684 64263857 . - . Parent=gene388 chr11 ENCODE exon 64264061 64264931 . - . Parent=gene388 ### chr11 ENCODE gene 64250959 64267837 . - . ID=gene389;Name=AP001462.3-007;name2=RASGRP2 chr11 ENCODE exon 64250959 64251179 . - . Parent=gene389 chr11 ENCODE exon 64251344 64251411 . - . Parent=gene389 chr11 ENCODE exon 64252911 64253090 . - . Parent=gene389 chr11 ENCODE exon 64253810 64253846 . - . Parent=gene389 chr11 ENCODE exon 64254101 64254242 . - . Parent=gene389 chr11 ENCODE exon 64259160 64259275 . - . Parent=gene389 chr11 ENCODE exon 64259590 64259712 . - . Parent=gene389 chr11 ENCODE exon 64259951 64260028 . - . Parent=gene389 chr11 ENCODE exon 64260801 64261082 . - . Parent=gene389 chr11 ENCODE exon 64263408 64263524 . - . Parent=gene389 chr11 ENCODE exon 64263684 64263857 . - . Parent=gene389 chr11 ENCODE exon 64264061 64264211 . - . Parent=gene389 chr11 ENCODE exon 64264996 64265127 . - . Parent=gene389 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene389 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene389 chr11 ENCODE exon 64266842 64267837 . - . Parent=gene389 ### chr11 ENCODE gene 64250959 64268170 . - . ID=gene390;Name=AP001462.3-004;name2=RASGRP2 chr11 ENCODE exon 64250959 64251179 . - . Parent=gene390 chr11 ENCODE exon 64251344 64251408 . - . Parent=gene390 chr11 ENCODE exon 64252911 64253090 . - . Parent=gene390 chr11 ENCODE exon 64253810 64253846 . - . Parent=gene390 chr11 ENCODE exon 64254101 64254242 . - . Parent=gene390 chr11 ENCODE exon 64259160 64259275 . - . Parent=gene390 chr11 ENCODE exon 64259590 64259712 . - . Parent=gene390 chr11 ENCODE exon 64259951 64260028 . - . Parent=gene390 chr11 ENCODE exon 64260801 64261082 . - . Parent=gene390 chr11 ENCODE exon 64263408 64263524 . - . Parent=gene390 chr11 ENCODE exon 64263684 64263857 . - . Parent=gene390 chr11 ENCODE exon 64264061 64264211 . - . Parent=gene390 chr11 ENCODE exon 64264996 64265127 . - . Parent=gene390 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene390 chr11 ENCODE exon 64266058 64266080 . - . Parent=gene390 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene390 chr11 ENCODE exon 64268051 64268170 . - . Parent=gene390 ### chr11 ENCODE gene 64250959 64268226 . - . ID=gene391;Name=AP001462.3-001;name2=RASGRP2 chr11 ENCODE exon 64250959 64251179 . - . Parent=gene391 chr11 ENCODE exon 64251344 64251408 . - . Parent=gene391 chr11 ENCODE CDS 64251350 64251408 . - 2 Parent=gene391 chr11 ENCODE exon 64252911 64253090 . - . Parent=gene391 chr11 ENCODE CDS 64252911 64253090 . - 2 Parent=gene391 chr11 ENCODE exon 64253810 64253846 . - . Parent=gene391 chr11 ENCODE CDS 64253810 64253846 . - 0 Parent=gene391 chr11 ENCODE exon 64254101 64254242 . - . Parent=gene391 chr11 ENCODE CDS 64254101 64254242 . - 1 Parent=gene391 chr11 ENCODE exon 64259160 64259275 . - . Parent=gene391 chr11 ENCODE CDS 64259160 64259275 . - 0 Parent=gene391 chr11 ENCODE exon 64259590 64259712 . - . Parent=gene391 chr11 ENCODE CDS 64259590 64259712 . - 0 Parent=gene391 chr11 ENCODE exon 64259951 64260028 . - . Parent=gene391 chr11 ENCODE CDS 64259951 64260028 . - 0 Parent=gene391 chr11 ENCODE exon 64260801 64261082 . - . Parent=gene391 chr11 ENCODE CDS 64260801 64261082 . - 0 Parent=gene391 chr11 ENCODE exon 64263408 64263524 . - . Parent=gene391 chr11 ENCODE CDS 64263408 64263524 . - 0 Parent=gene391 chr11 ENCODE exon 64263684 64263857 . - . Parent=gene391 chr11 ENCODE CDS 64263684 64263857 . - 0 Parent=gene391 chr11 ENCODE exon 64264061 64264211 . - . Parent=gene391 chr11 ENCODE CDS 64264061 64264211 . - 1 Parent=gene391 chr11 ENCODE exon 64264996 64265127 . - . Parent=gene391 chr11 ENCODE CDS 64264996 64265127 . - 1 Parent=gene391 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene391 chr11 ENCODE CDS 64265487 64265549 . - 1 Parent=gene391 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene391 chr11 ENCODE CDS 64266058 64266160 . - 2 Parent=gene391 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene391 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene391 chr11 ENCODE exon 64268051 64268226 . - . Parent=gene391 ### chr11 ENCODE gene 64250959 64268882 . - . ID=gene392;Name=AP001462.3-003;name2=RASGRP2 chr11 ENCODE exon 64250959 64251179 . - . Parent=gene392 chr11 ENCODE exon 64251344 64251408 . - . Parent=gene392 chr11 ENCODE CDS 64251350 64251408 . - 2 Parent=gene392 chr11 ENCODE exon 64252911 64253090 . - . Parent=gene392 chr11 ENCODE CDS 64252911 64253090 . - 2 Parent=gene392 chr11 ENCODE exon 64253810 64253846 . - . Parent=gene392 chr11 ENCODE CDS 64253810 64253846 . - 0 Parent=gene392 chr11 ENCODE exon 64254101 64254242 . - . Parent=gene392 chr11 ENCODE CDS 64254101 64254242 . - 1 Parent=gene392 chr11 ENCODE exon 64259160 64259275 . - . Parent=gene392 chr11 ENCODE CDS 64259160 64259275 . - 0 Parent=gene392 chr11 ENCODE exon 64259590 64259712 . - . Parent=gene392 chr11 ENCODE CDS 64259590 64259712 . - 0 Parent=gene392 chr11 ENCODE exon 64259951 64260028 . - . Parent=gene392 chr11 ENCODE CDS 64259951 64260028 . - 0 Parent=gene392 chr11 ENCODE exon 64260801 64261082 . - . Parent=gene392 chr11 ENCODE CDS 64260801 64261082 . - 0 Parent=gene392 chr11 ENCODE exon 64263408 64263524 . - . Parent=gene392 chr11 ENCODE CDS 64263408 64263524 . - 0 Parent=gene392 chr11 ENCODE exon 64263684 64263857 . - . Parent=gene392 chr11 ENCODE CDS 64263684 64263857 . - 0 Parent=gene392 chr11 ENCODE exon 64264061 64264211 . - . Parent=gene392 chr11 ENCODE CDS 64264061 64264211 . - 1 Parent=gene392 chr11 ENCODE exon 64264996 64265127 . - . Parent=gene392 chr11 ENCODE CDS 64264996 64265127 . - 1 Parent=gene392 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene392 chr11 ENCODE CDS 64265487 64265549 . - 1 Parent=gene392 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene392 chr11 ENCODE CDS 64266058 64266160 . - 2 Parent=gene392 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene392 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene392 chr11 ENCODE exon 64268790 64268882 . - . Parent=gene392 ### chr11 ENCODE gene 64250959 64269504 . - . ID=gene393;Name=AP001462.3-021;name2=RASGRP2 chr11 ENCODE exon 64250959 64251179 . - . Parent=gene393 chr11 ENCODE exon 64251344 64251408 . - . Parent=gene393 chr11 ENCODE exon 64252911 64253090 . - . Parent=gene393 chr11 ENCODE exon 64253810 64253846 . - . Parent=gene393 chr11 ENCODE exon 64254101 64254242 . - . Parent=gene393 chr11 ENCODE exon 64259160 64259275 . - . Parent=gene393 chr11 ENCODE exon 64259590 64259712 . - . Parent=gene393 chr11 ENCODE exon 64259951 64260028 . - . Parent=gene393 chr11 ENCODE exon 64260801 64261082 . - . Parent=gene393 chr11 ENCODE exon 64263408 64263524 . - . Parent=gene393 chr11 ENCODE exon 64263684 64263857 . - . Parent=gene393 chr11 ENCODE exon 64264061 64264211 . - . Parent=gene393 chr11 ENCODE exon 64264996 64265127 . - . Parent=gene393 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene393 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene393 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene393 chr11 ENCODE exon 64268051 64268156 . - . Parent=gene393 chr11 ENCODE exon 64269323 64269504 . - . Parent=gene393 ### chr11 ENCODE gene 64250959 64269504 . - . ID=gene394;Name=AP001462.3-002;name2=RASGRP2 chr11 ENCODE exon 64250959 64251179 . - . Parent=gene394 chr11 ENCODE exon 64251344 64251408 . - . Parent=gene394 chr11 ENCODE CDS 64251350 64251408 . - 2 Parent=gene394 chr11 ENCODE exon 64252911 64253090 . - . Parent=gene394 chr11 ENCODE CDS 64252911 64253090 . - 2 Parent=gene394 chr11 ENCODE exon 64253810 64253846 . - . Parent=gene394 chr11 ENCODE CDS 64253810 64253846 . - 0 Parent=gene394 chr11 ENCODE exon 64254101 64254242 . - . Parent=gene394 chr11 ENCODE CDS 64254101 64254242 . - 1 Parent=gene394 chr11 ENCODE exon 64259160 64259275 . - . Parent=gene394 chr11 ENCODE CDS 64259160 64259275 . - 0 Parent=gene394 chr11 ENCODE exon 64259590 64259712 . - . Parent=gene394 chr11 ENCODE CDS 64259590 64259712 . - 0 Parent=gene394 chr11 ENCODE exon 64259951 64260028 . - . Parent=gene394 chr11 ENCODE CDS 64259951 64260028 . - 0 Parent=gene394 chr11 ENCODE exon 64260801 64261082 . - . Parent=gene394 chr11 ENCODE CDS 64260801 64261082 . - 0 Parent=gene394 chr11 ENCODE exon 64263408 64263524 . - . Parent=gene394 chr11 ENCODE CDS 64263408 64263524 . - 0 Parent=gene394 chr11 ENCODE exon 64263684 64263857 . - . Parent=gene394 chr11 ENCODE CDS 64263684 64263857 . - 0 Parent=gene394 chr11 ENCODE exon 64264061 64264211 . - . Parent=gene394 chr11 ENCODE CDS 64264061 64264211 . - 1 Parent=gene394 chr11 ENCODE exon 64264996 64265127 . - . Parent=gene394 chr11 ENCODE CDS 64264996 64265127 . - 1 Parent=gene394 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene394 chr11 ENCODE CDS 64265487 64265549 . - 1 Parent=gene394 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene394 chr11 ENCODE CDS 64266058 64266160 . - 2 Parent=gene394 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene394 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene394 chr11 ENCODE exon 64269323 64269504 . - . Parent=gene394 ### chr11 ENCODE gene 64250994 64259314 . - . ID=gene395;name2=RASGRP2;Name=AP001462.3-020 chr11 ENCODE exon 64250994 64251408 . - . Parent=gene395 chr11 ENCODE exon 64252911 64253090 . - . Parent=gene395 chr11 ENCODE exon 64253810 64253846 . - . Parent=gene395 chr11 ENCODE exon 64254101 64254242 . - . Parent=gene395 chr11 ENCODE exon 64259160 64259314 . - . Parent=gene395 ### chr11 ENCODE gene 64254229 64261082 . - . ID=gene396;Name=AP001462.3-024;name2=RASGRP2 chr11 ENCODE exon 64254229 64254242 . - . Parent=gene396 chr11 ENCODE exon 64259160 64259275 . - . Parent=gene396 chr11 ENCODE exon 64259590 64260028 . - . Parent=gene396 chr11 ENCODE exon 64260801 64261082 . - . Parent=gene396 ### chr11 ENCODE gene 64259160 64261302 . - . ID=gene397;Name=AP001462.3-018;name2=RASGRP2 chr11 ENCODE exon 64259160 64259275 . - . Parent=gene397 chr11 ENCODE exon 64259590 64259712 . - . Parent=gene397 chr11 ENCODE exon 64259951 64260028 . - . Parent=gene397 chr11 ENCODE exon 64260801 64261302 . - . Parent=gene397 ### chr11 ENCODE gene 64259422 64261292 . - . ID=gene398;Name=AP001462.3-019;name2=RASGRP2 chr11 ENCODE exon 64259422 64259712 . - . Parent=gene398 chr11 ENCODE exon 64259951 64260028 . - . Parent=gene398 chr11 ENCODE exon 64260801 64261292 . - . Parent=gene398 ### chr11 ENCODE gene 64263427 64266994 . - . ID=gene399;Name=AP001462.3-017;name2=RASGRP2 chr11 ENCODE exon 64263427 64263524 . - . Parent=gene399 chr11 ENCODE exon 64263684 64263857 . - . Parent=gene399 chr11 ENCODE exon 64264061 64264211 . - . Parent=gene399 chr11 ENCODE exon 64264416 64264497 . - . Parent=gene399 chr11 ENCODE exon 64264996 64265127 . - . Parent=gene399 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene399 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene399 chr11 ENCODE exon 64266842 64266994 . - . Parent=gene399 ### chr11 ENCODE gene 64263684 64268166 . - . ID=gene400;name2=RASGRP2;Name=AP001462.3-016 chr11 ENCODE exon 64263684 64263857 . - . Parent=gene400 chr11 ENCODE CDS 64263684 64263857 . - 0 Parent=gene400 chr11 ENCODE exon 64264061 64264211 . - . Parent=gene400 chr11 ENCODE CDS 64264061 64264211 . - 1 Parent=gene400 chr11 ENCODE exon 64264996 64265127 . - . Parent=gene400 chr11 ENCODE CDS 64264996 64265127 . - 1 Parent=gene400 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene400 chr11 ENCODE CDS 64265487 64265549 . - 1 Parent=gene400 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene400 chr11 ENCODE CDS 64266058 64266160 . - 2 Parent=gene400 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene400 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene400 chr11 ENCODE exon 64267865 64267916 . - . Parent=gene400 chr11 ENCODE exon 64268051 64268166 . - . Parent=gene400 ### chr11 ENCODE gene 64264914 64266985 . - . ID=gene401;Name=AP001462.3-011;name2=RASGRP2 chr11 ENCODE exon 64264914 64265127 . - . Parent=gene401 chr11 ENCODE CDS 64265095 64265127 . - 0 Parent=gene401 chr11 ENCODE exon 64265487 64265581 . - . Parent=gene401 chr11 ENCODE CDS 64265487 64265581 . - 2 Parent=gene401 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene401 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene401 ### chr11 ENCODE gene 64264914 64266985 . - . ID=gene402;Name=AP001462.3-012;name2=RASGRP2 chr11 ENCODE exon 64264914 64265127 . - . Parent=gene402 chr11 ENCODE CDS 64265095 64265127 . - 0 Parent=gene402 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene402 chr11 ENCODE CDS 64265487 64265549 . - 0 Parent=gene402 chr11 ENCODE exon 64266058 64266080 . - . Parent=gene402 chr11 ENCODE CDS 64266058 64266080 . - 2 Parent=gene402 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene402 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene402 ### chr11 ENCODE gene 64264914 64268193 . - . ID=gene403;Name=AP001462.3-010;name2=RASGRP2 chr11 ENCODE exon 64264914 64265127 . - . Parent=gene403 chr11 ENCODE CDS 64264920 64265127 . - 1 Parent=gene403 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene403 chr11 ENCODE CDS 64265487 64265549 . - 1 Parent=gene403 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene403 chr11 ENCODE CDS 64266058 64266160 . - 2 Parent=gene403 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene403 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene403 chr11 ENCODE exon 64268051 64268193 . - . Parent=gene403 ### chr11 ENCODE gene 64264914 64268907 . - . ID=gene404;Name=AP001462.3-009;name2=RASGRP2 chr11 ENCODE exon 64264914 64265127 . - . Parent=gene404 chr11 ENCODE CDS 64264920 64265127 . - 1 Parent=gene404 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene404 chr11 ENCODE CDS 64265487 64265549 . - 1 Parent=gene404 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene404 chr11 ENCODE CDS 64266058 64266160 . - 2 Parent=gene404 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene404 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene404 chr11 ENCODE exon 64268790 64268907 . - . Parent=gene404 ### chr11 ENCODE gene 64264914 64269381 . - . ID=gene405;Name=AP001462.3-008;name2=RASGRP2 chr11 ENCODE exon 64264914 64265127 . - . Parent=gene405 chr11 ENCODE CDS 64264920 64265127 . - 1 Parent=gene405 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene405 chr11 ENCODE CDS 64265487 64265549 . - 1 Parent=gene405 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene405 chr11 ENCODE CDS 64266058 64266160 . - 2 Parent=gene405 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene405 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene405 chr11 ENCODE exon 64269323 64269381 . - . Parent=gene405 ### chr11 ENCODE gene 64264916 64268637 . - . ID=gene406;Name=AP001462.3-005;name2=RASGRP2 chr11 ENCODE exon 64264916 64265127 . - . Parent=gene406 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene406 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene406 chr11 ENCODE exon 64266842 64268637 . - . Parent=gene406 ### chr11 ENCODE gene 64265074 64269045 . - . ID=gene407;Name=AP001462.3-013;name2=RASGRP2 chr11 ENCODE exon 64265074 64265127 . - . Parent=gene407 chr11 ENCODE CDS 64265074 64265127 . - 1 Parent=gene407 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene407 chr11 ENCODE CDS 64265487 64265549 . - 1 Parent=gene407 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene407 chr11 ENCODE CDS 64266058 64266160 . - 2 Parent=gene407 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene407 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene407 chr11 ENCODE exon 64268981 64269045 . - . Parent=gene407 ### chr11 ENCODE gene 64265116 64268915 . - . ID=gene408;Name=AP001462.3-022;name2=RASGRP2 chr11 ENCODE exon 64265116 64265127 . - . Parent=gene408 chr11 ENCODE CDS 64265116 64265127 . - 1 Parent=gene408 chr11 ENCODE exon 64265487 64265549 . - . Parent=gene408 chr11 ENCODE CDS 64265487 64265549 . - 1 Parent=gene408 chr11 ENCODE exon 64266058 64266160 . - . Parent=gene408 chr11 ENCODE CDS 64266058 64266160 . - 2 Parent=gene408 chr11 ENCODE CDS 64266842 64266914 . - 0 Parent=gene408 chr11 ENCODE exon 64266842 64266985 . - . Parent=gene408 chr11 ENCODE exon 64268381 64268530 . - . Parent=gene408 chr11 ENCODE exon 64268790 64268915 . - . Parent=gene408 ### chr11 ENCODE gene 64266559 64268908 . - . ID=gene409;Name=AP001462.3-023;name2=RASGRP2 chr11 ENCODE exon 64266559 64266985 . - . Parent=gene409 chr11 ENCODE exon 64268790 64268908 . - . Parent=gene409 ### chr11 ENCODE gene 64266874 64268365 . - . ID=gene410;Name=AP001462.3-014;name2=RASGRP2 chr11 ENCODE CDS 64266874 64266914 . - 0 Parent=gene410 chr11 ENCODE exon 64266874 64266985 . - . Parent=gene410 chr11 ENCODE exon 64268078 64268365 . - . Parent=gene410 ### chr11 ENCODE gene 64270437 64272936 . - . ID=gene411;Name=AP001462.4-003;name2=PYGM chr11 ENCODE exon 64270437 64270856 . - . Parent=gene411 chr11 ENCODE exon 64270969 64271035 . - . Parent=gene411 chr11 ENCODE exon 64271272 64272936 . - . Parent=gene411 ### chr11 ENCODE gene 64270437 64284022 . - . ID=gene412;Name=AP001462.4-002;name2=PYGM chr11 ENCODE exon 64270437 64270856 . - . Parent=gene412 chr11 ENCODE CDS 64270707 64270856 . - 0 Parent=gene412 chr11 ENCODE exon 64270969 64271035 . - . Parent=gene412 chr11 ENCODE CDS 64270969 64271035 . - 1 Parent=gene412 chr11 ENCODE exon 64271272 64271406 . - . Parent=gene412 chr11 ENCODE CDS 64271272 64271406 . - 1 Parent=gene412 chr11 ENCODE exon 64274424 64274631 . - . Parent=gene412 chr11 ENCODE CDS 64274424 64274631 . - 2 Parent=gene412 chr11 ENCODE exon 64275373 64275514 . - . Parent=gene412 chr11 ENCODE CDS 64275373 64275514 . - 0 Parent=gene412 chr11 ENCODE exon 64275645 64275703 . - . Parent=gene412 chr11 ENCODE CDS 64275645 64275703 . - 2 Parent=gene412 chr11 ENCODE exon 64275972 64276119 . - . Parent=gene412 chr11 ENCODE CDS 64275972 64276119 . - 0 Parent=gene412 chr11 ENCODE exon 64276451 64276552 . - . Parent=gene412 chr11 ENCODE CDS 64276451 64276552 . - 0 Parent=gene412 chr11 ENCODE exon 64277121 64277235 . - . Parent=gene412 chr11 ENCODE CDS 64277121 64277235 . - 1 Parent=gene412 chr11 ENCODE exon 64277567 64277730 . - . Parent=gene412 chr11 ENCODE CDS 64277567 64277730 . - 0 Parent=gene412 chr11 ENCODE exon 64277927 64278073 . - . Parent=gene412 chr11 ENCODE CDS 64277927 64278073 . - 0 Parent=gene412 chr11 ENCODE exon 64278301 64278393 . - . Parent=gene412 chr11 ENCODE CDS 64278301 64278393 . - 0 Parent=gene412 chr11 ENCODE exon 64278741 64278884 . - . Parent=gene412 chr11 ENCODE CDS 64278741 64278884 . - 0 Parent=gene412 chr11 ENCODE exon 64279321 64279403 . - . Parent=gene412 chr11 ENCODE CDS 64279321 64279403 . - 2 Parent=gene412 chr11 ENCODE exon 64279495 64279606 . - . Parent=gene412 chr11 ENCODE CDS 64279495 64279606 . - 0 Parent=gene412 chr11 ENCODE exon 64281827 64281958 . - . Parent=gene412 chr11 ENCODE CDS 64281827 64281958 . - 0 Parent=gene412 chr11 ENCODE exon 64282294 64282314 . - . Parent=gene412 chr11 ENCODE CDS 64282294 64282314 . - 0 Parent=gene412 chr11 ENCODE CDS 64283704 64283946 . - 0 Parent=gene412 chr11 ENCODE exon 64283704 64284022 . - . Parent=gene412 ### chr11 ENCODE gene 64270437 64284345 . - . ID=gene413;Name=AP001462.4-001;name2=PYGM chr11 ENCODE exon 64270437 64270856 . - . Parent=gene413 chr11 ENCODE CDS 64270707 64270856 . - 0 Parent=gene413 chr11 ENCODE exon 64270969 64271035 . - . Parent=gene413 chr11 ENCODE CDS 64270969 64271035 . - 1 Parent=gene413 chr11 ENCODE exon 64271272 64271406 . - . Parent=gene413 chr11 ENCODE CDS 64271272 64271406 . - 1 Parent=gene413 chr11 ENCODE exon 64274424 64274631 . - . Parent=gene413 chr11 ENCODE CDS 64274424 64274631 . - 2 Parent=gene413 chr11 ENCODE exon 64275373 64275514 . - . Parent=gene413 chr11 ENCODE CDS 64275373 64275514 . - 0 Parent=gene413 chr11 ENCODE exon 64275645 64275703 . - . Parent=gene413 chr11 ENCODE CDS 64275645 64275703 . - 2 Parent=gene413 chr11 ENCODE exon 64275972 64276119 . - . Parent=gene413 chr11 ENCODE CDS 64275972 64276119 . - 0 Parent=gene413 chr11 ENCODE exon 64276451 64276552 . - . Parent=gene413 chr11 ENCODE CDS 64276451 64276552 . - 0 Parent=gene413 chr11 ENCODE exon 64277121 64277235 . - . Parent=gene413 chr11 ENCODE CDS 64277121 64277235 . - 1 Parent=gene413 chr11 ENCODE exon 64277567 64277730 . - . Parent=gene413 chr11 ENCODE CDS 64277567 64277730 . - 0 Parent=gene413 chr11 ENCODE exon 64277927 64278073 . - . Parent=gene413 chr11 ENCODE CDS 64277927 64278073 . - 0 Parent=gene413 chr11 ENCODE exon 64278301 64278393 . - . Parent=gene413 chr11 ENCODE CDS 64278301 64278393 . - 0 Parent=gene413 chr11 ENCODE exon 64278741 64278884 . - . Parent=gene413 chr11 ENCODE CDS 64278741 64278884 . - 0 Parent=gene413 chr11 ENCODE exon 64279321 64279403 . - . Parent=gene413 chr11 ENCODE CDS 64279321 64279403 . - 2 Parent=gene413 chr11 ENCODE exon 64279495 64279606 . - . Parent=gene413 chr11 ENCODE CDS 64279495 64279606 . - 0 Parent=gene413 chr11 ENCODE exon 64281827 64281958 . - . Parent=gene413 chr11 ENCODE CDS 64281827 64281958 . - 0 Parent=gene413 chr11 ENCODE exon 64282294 64282397 . - . Parent=gene413 chr11 ENCODE CDS 64282294 64282397 . - 2 Parent=gene413 chr11 ENCODE exon 64282485 64282563 . - . Parent=gene413 chr11 ENCODE CDS 64282485 64282563 . - 0 Parent=gene413 chr11 ENCODE exon 64282651 64282752 . - . Parent=gene413 chr11 ENCODE CDS 64282651 64282752 . - 0 Parent=gene413 chr11 ENCODE CDS 64283704 64283946 . - 0 Parent=gene413 chr11 ENCODE exon 64283704 64284345 . - . Parent=gene413 ### chr11 ENCODE gene 64275196 64276063 . - . ID=gene414;Name=AP001462.4-004;name2=PYGM chr11 ENCODE exon 64275196 64275514 . - . Parent=gene414 chr11 ENCODE exon 64275645 64275703 . - . Parent=gene414 chr11 ENCODE exon 64275972 64276063 . - . Parent=gene414 ### chr11 ENCODE gene 64277719 64278469 . - . ID=gene415;Name=AP001462.4-005;name2=PYGM chr11 ENCODE exon 64277719 64277730 . - . Parent=gene415 chr11 ENCODE exon 64277927 64278073 . - . Parent=gene415 chr11 ENCODE exon 64278301 64278469 . - . Parent=gene415 ### chr11 ENCODE gene 64288654 64302517 . - . ID=gene416;Name=AP001462.5-006;name2=SF1 chr11 ENCODE exon 64288654 64289566 . - . Parent=gene416 chr11 ENCODE CDS 64289502 64289566 . - 2 Parent=gene416 chr11 ENCODE exon 64290948 64291127 . - . Parent=gene416 chr11 ENCODE CDS 64290948 64291127 . - 2 Parent=gene416 chr11 ENCODE exon 64291240 64291299 . - . Parent=gene416 chr11 ENCODE CDS 64291240 64291299 . - 2 Parent=gene416 chr11 ENCODE exon 64291619 64291892 . - . Parent=gene416 chr11 ENCODE CDS 64291619 64291892 . - 0 Parent=gene416 chr11 ENCODE exon 64292154 64292334 . - . Parent=gene416 chr11 ENCODE CDS 64292154 64292334 . - 1 Parent=gene416 chr11 ENCODE exon 64293070 64293177 . - . Parent=gene416 chr11 ENCODE CDS 64293070 64293177 . - 1 Parent=gene416 chr11 ENCODE exon 64293271 64293386 . - . Parent=gene416 chr11 ENCODE CDS 64293271 64293386 . - 0 Parent=gene416 chr11 ENCODE exon 64293474 64293657 . - . Parent=gene416 chr11 ENCODE CDS 64293474 64293657 . - 1 Parent=gene416 chr11 ENCODE exon 64294012 64294101 . - . Parent=gene416 chr11 ENCODE CDS 64294012 64294101 . - 1 Parent=gene416 chr11 ENCODE exon 64294304 64294456 . - . Parent=gene416 chr11 ENCODE CDS 64294304 64294456 . - 1 Parent=gene416 chr11 ENCODE exon 64297478 64297553 . - . Parent=gene416 chr11 ENCODE CDS 64297478 64297553 . - 2 Parent=gene416 chr11 ENCODE exon 64300546 64300674 . - . Parent=gene416 chr11 ENCODE CDS 64300546 64300674 . - 2 Parent=gene416 chr11 ENCODE CDS 64302035 64302440 . - 0 Parent=gene416 chr11 ENCODE exon 64302035 64302517 . - . Parent=gene416 ### chr11 ENCODE gene 64288654 64302778 . - . ID=gene417;Name=AP001462.5-005;name2=SF1 chr11 ENCODE exon 64288654 64290203 . - . Parent=gene417 chr11 ENCODE CDS 64289866 64290203 . - 2 Parent=gene417 chr11 ENCODE exon 64290948 64291127 . - . Parent=gene417 chr11 ENCODE CDS 64290948 64291127 . - 2 Parent=gene417 chr11 ENCODE exon 64291240 64291299 . - . Parent=gene417 chr11 ENCODE CDS 64291240 64291299 . - 2 Parent=gene417 chr11 ENCODE exon 64291619 64291892 . - . Parent=gene417 chr11 ENCODE CDS 64291619 64291892 . - 0 Parent=gene417 chr11 ENCODE exon 64292154 64292334 . - . Parent=gene417 chr11 ENCODE CDS 64292154 64292334 . - 1 Parent=gene417 chr11 ENCODE exon 64293070 64293177 . - . Parent=gene417 chr11 ENCODE CDS 64293070 64293177 . - 1 Parent=gene417 chr11 ENCODE exon 64293271 64293386 . - . Parent=gene417 chr11 ENCODE CDS 64293271 64293386 . - 0 Parent=gene417 chr11 ENCODE exon 64293474 64293657 . - . Parent=gene417 chr11 ENCODE CDS 64293474 64293657 . - 1 Parent=gene417 chr11 ENCODE exon 64294012 64294101 . - . Parent=gene417 chr11 ENCODE CDS 64294012 64294101 . - 1 Parent=gene417 chr11 ENCODE exon 64294304 64294456 . - . Parent=gene417 chr11 ENCODE CDS 64294304 64294456 . - 1 Parent=gene417 chr11 ENCODE exon 64297478 64297553 . - . Parent=gene417 chr11 ENCODE CDS 64297478 64297553 . - 2 Parent=gene417 chr11 ENCODE exon 64300546 64300674 . - . Parent=gene417 chr11 ENCODE CDS 64300546 64300674 . - 2 Parent=gene417 chr11 ENCODE CDS 64302410 64302440 . - 0 Parent=gene417 chr11 ENCODE exon 64302410 64302778 . - . Parent=gene417 ### chr11 ENCODE gene 64288654 64302795 . - . ID=gene418;Name=AP001462.5-002;name2=SF1 chr11 ENCODE exon 64288654 64289566 . - . Parent=gene418 chr11 ENCODE CDS 64289502 64289566 . - 2 Parent=gene418 chr11 ENCODE exon 64290948 64291127 . - . Parent=gene418 chr11 ENCODE CDS 64290948 64291127 . - 2 Parent=gene418 chr11 ENCODE exon 64291240 64291299 . - . Parent=gene418 chr11 ENCODE CDS 64291240 64291299 . - 2 Parent=gene418 chr11 ENCODE exon 64291619 64291892 . - . Parent=gene418 chr11 ENCODE CDS 64291619 64291892 . - 0 Parent=gene418 chr11 ENCODE exon 64292154 64292334 . - . Parent=gene418 chr11 ENCODE CDS 64292154 64292334 . - 1 Parent=gene418 chr11 ENCODE exon 64293070 64293177 . - . Parent=gene418 chr11 ENCODE CDS 64293070 64293177 . - 1 Parent=gene418 chr11 ENCODE exon 64293271 64293386 . - . Parent=gene418 chr11 ENCODE CDS 64293271 64293386 . - 0 Parent=gene418 chr11 ENCODE exon 64293474 64293657 . - . Parent=gene418 chr11 ENCODE CDS 64293474 64293657 . - 1 Parent=gene418 chr11 ENCODE exon 64294012 64294101 . - . Parent=gene418 chr11 ENCODE CDS 64294012 64294101 . - 1 Parent=gene418 chr11 ENCODE exon 64294304 64294456 . - . Parent=gene418 chr11 ENCODE CDS 64294304 64294456 . - 1 Parent=gene418 chr11 ENCODE exon 64297478 64297553 . - . Parent=gene418 chr11 ENCODE CDS 64297478 64297553 . - 2 Parent=gene418 chr11 ENCODE exon 64300546 64300674 . - . Parent=gene418 chr11 ENCODE CDS 64300546 64300674 . - 2 Parent=gene418 chr11 ENCODE CDS 64302410 64302440 . - 0 Parent=gene418 chr11 ENCODE exon 64302410 64302795 . - . Parent=gene418 ### chr11 ENCODE gene 64288654 64302795 . - . ID=gene419;Name=AP001462.5-003;name2=SF1 chr11 ENCODE exon 64288654 64289566 . - . Parent=gene419 chr11 ENCODE exon 64290948 64291127 . - . Parent=gene419 chr11 ENCODE exon 64291240 64291299 . - . Parent=gene419 chr11 ENCODE exon 64291615 64291892 . - . Parent=gene419 chr11 ENCODE exon 64292154 64292334 . - . Parent=gene419 chr11 ENCODE exon 64293070 64293177 . - . Parent=gene419 chr11 ENCODE exon 64293271 64293386 . - . Parent=gene419 chr11 ENCODE exon 64293474 64293657 . - . Parent=gene419 chr11 ENCODE exon 64294012 64294101 . - . Parent=gene419 chr11 ENCODE exon 64294304 64294456 . - . Parent=gene419 chr11 ENCODE exon 64300546 64300674 . - . Parent=gene419 chr11 ENCODE exon 64302410 64302795 . - . Parent=gene419 ### chr11 ENCODE gene 64288654 64302795 . - . ID=gene420;name2=SF1;Name=AP001462.5-004 chr11 ENCODE exon 64288654 64289566 . - . Parent=gene420 chr11 ENCODE CDS 64289437 64289566 . - 1 Parent=gene420 chr11 ENCODE exon 64290948 64291127 . - . Parent=gene420 chr11 ENCODE CDS 64290948 64291127 . - 1 Parent=gene420 chr11 ENCODE exon 64291240 64291299 . - . Parent=gene420 chr11 ENCODE CDS 64291240 64291299 . - 1 Parent=gene420 chr11 ENCODE exon 64291615 64291892 . - . Parent=gene420 chr11 ENCODE CDS 64291615 64291892 . - 0 Parent=gene420 chr11 ENCODE exon 64292154 64292334 . - . Parent=gene420 chr11 ENCODE CDS 64292154 64292334 . - 1 Parent=gene420 chr11 ENCODE exon 64293070 64293177 . - . Parent=gene420 chr11 ENCODE CDS 64293070 64293177 . - 1 Parent=gene420 chr11 ENCODE exon 64293271 64293386 . - . Parent=gene420 chr11 ENCODE CDS 64293271 64293386 . - 0 Parent=gene420 chr11 ENCODE exon 64293474 64293657 . - . Parent=gene420 chr11 ENCODE CDS 64293474 64293657 . - 1 Parent=gene420 chr11 ENCODE exon 64294012 64294101 . - . Parent=gene420 chr11 ENCODE CDS 64294012 64294101 . - 1 Parent=gene420 chr11 ENCODE exon 64294304 64294456 . - . Parent=gene420 chr11 ENCODE CDS 64294304 64294456 . - 1 Parent=gene420 chr11 ENCODE exon 64297478 64297553 . - . Parent=gene420 chr11 ENCODE CDS 64297478 64297553 . - 2 Parent=gene420 chr11 ENCODE exon 64300546 64300674 . - . Parent=gene420 chr11 ENCODE CDS 64300546 64300674 . - 2 Parent=gene420 chr11 ENCODE CDS 64302410 64302440 . - 0 Parent=gene420 chr11 ENCODE exon 64302410 64302795 . - . Parent=gene420 ### chr11 ENCODE gene 64288654 64302811 . - . ID=gene421;Name=AP001462.5-008;name2=SF1 chr11 ENCODE exon 64288654 64289645 . - . Parent=gene421 chr11 ENCODE exon 64290029 64290203 . - . Parent=gene421 chr11 ENCODE exon 64290948 64291127 . - . Parent=gene421 chr11 ENCODE exon 64291240 64291299 . - . Parent=gene421 chr11 ENCODE exon 64291619 64291892 . - . Parent=gene421 chr11 ENCODE exon 64292154 64292334 . - . Parent=gene421 chr11 ENCODE exon 64293070 64293177 . - . Parent=gene421 chr11 ENCODE exon 64293271 64293386 . - . Parent=gene421 chr11 ENCODE exon 64293474 64293657 . - . Parent=gene421 chr11 ENCODE exon 64294012 64294101 . - . Parent=gene421 chr11 ENCODE exon 64294304 64294456 . - . Parent=gene421 chr11 ENCODE exon 64297478 64297553 . - . Parent=gene421 chr11 ENCODE exon 64300546 64300674 . - . Parent=gene421 chr11 ENCODE exon 64302410 64302811 . - . Parent=gene421 ### chr11 ENCODE gene 64288654 64302834 . - . ID=gene422;Name=AP001462.5-001;name2=SF1 chr11 ENCODE exon 64288654 64289566 . - . Parent=gene422 chr11 ENCODE CDS 64289437 64289566 . - 1 Parent=gene422 chr11 ENCODE exon 64289999 64290203 . - . Parent=gene422 chr11 ENCODE CDS 64289999 64290203 . - 2 Parent=gene422 chr11 ENCODE exon 64290948 64291127 . - . Parent=gene422 chr11 ENCODE CDS 64290948 64291127 . - 2 Parent=gene422 chr11 ENCODE exon 64291240 64291299 . - . Parent=gene422 chr11 ENCODE CDS 64291240 64291299 . - 2 Parent=gene422 chr11 ENCODE exon 64291619 64291892 . - . Parent=gene422 chr11 ENCODE CDS 64291619 64291892 . - 0 Parent=gene422 chr11 ENCODE exon 64292154 64292334 . - . Parent=gene422 chr11 ENCODE CDS 64292154 64292334 . - 1 Parent=gene422 chr11 ENCODE exon 64293070 64293177 . - . Parent=gene422 chr11 ENCODE CDS 64293070 64293177 . - 1 Parent=gene422 chr11 ENCODE exon 64293271 64293386 . - . Parent=gene422 chr11 ENCODE CDS 64293271 64293386 . - 0 Parent=gene422 chr11 ENCODE exon 64293474 64293657 . - . Parent=gene422 chr11 ENCODE CDS 64293474 64293657 . - 1 Parent=gene422 chr11 ENCODE exon 64294012 64294101 . - . Parent=gene422 chr11 ENCODE CDS 64294012 64294101 . - 1 Parent=gene422 chr11 ENCODE exon 64294304 64294456 . - . Parent=gene422 chr11 ENCODE CDS 64294304 64294456 . - 1 Parent=gene422 chr11 ENCODE exon 64297478 64297553 . - . Parent=gene422 chr11 ENCODE CDS 64297478 64297553 . - 2 Parent=gene422 chr11 ENCODE exon 64300546 64300674 . - . Parent=gene422 chr11 ENCODE CDS 64300546 64300674 . - 2 Parent=gene422 chr11 ENCODE CDS 64302410 64302440 . - 0 Parent=gene422 chr11 ENCODE exon 64302410 64302834 . - . Parent=gene422 ### chr11 ENCODE gene 64289338 64291892 . - . ID=gene423;Name=AP001462.5-014;name2=SF1 chr11 ENCODE exon 64289338 64289566 . - . Parent=gene423 chr11 ENCODE CDS 64289502 64289566 . - 2 Parent=gene423 chr11 ENCODE exon 64290948 64291127 . - . Parent=gene423 chr11 ENCODE CDS 64290948 64291127 . - 2 Parent=gene423 chr11 ENCODE exon 64291240 64291323 . - . Parent=gene423 chr11 ENCODE CDS 64291240 64291323 . - 2 Parent=gene423 chr11 ENCODE exon 64291619 64291892 . - . Parent=gene423 chr11 ENCODE CDS 64291619 64291892 . - 0 Parent=gene423 ### chr11 ENCODE gene 64290462 64291694 . - . ID=gene424;Name=AP001462.5-015;name2=SF1 chr11 ENCODE exon 64290462 64291127 . - . Parent=gene424 chr11 ENCODE exon 64291240 64291299 . - . Parent=gene424 chr11 ENCODE exon 64291619 64291694 . - . Parent=gene424 ### chr11 ENCODE gene 64292219 64293717 . - . ID=gene425;Name=AP001462.5-017;name2=SF1 chr11 ENCODE exon 64292219 64292334 . - . Parent=gene425 chr11 ENCODE exon 64293070 64293177 . - . Parent=gene425 chr11 ENCODE exon 64293271 64293386 . - . Parent=gene425 chr11 ENCODE exon 64293474 64293717 . - . Parent=gene425 ### chr11 ENCODE gene 64293326 64294687 . - . ID=gene426;Name=AP001462.5-009;name2=SF1 chr11 ENCODE exon 64293326 64293386 . - . Parent=gene426 chr11 ENCODE exon 64293474 64293657 . - . Parent=gene426 chr11 ENCODE exon 64294012 64294101 . - . Parent=gene426 chr11 ENCODE exon 64294304 64294687 . - . Parent=gene426 ### chr11 ENCODE gene 64293590 64295655 . - . ID=gene427;Name=AP001462.5-013;name2=SF1 chr11 ENCODE exon 64293590 64293657 . - . Parent=gene427 chr11 ENCODE exon 64294012 64294101 . - . Parent=gene427 chr11 ENCODE exon 64294304 64294456 . - . Parent=gene427 chr11 ENCODE exon 64295512 64295655 . - . Parent=gene427 ### chr11 ENCODE gene 64294096 64301793 . - . ID=gene428;Name=AP001462.5-016;name2=SF1 chr11 ENCODE exon 64294096 64294101 . - . Parent=gene428 chr11 ENCODE exon 64294304 64294456 . - . Parent=gene428 chr11 ENCODE exon 64297478 64297553 . - . Parent=gene428 chr11 ENCODE exon 64300546 64300674 . - . Parent=gene428 chr11 ENCODE exon 64301547 64301793 . - . Parent=gene428 ### chr11 ENCODE gene 64294345 64302555 . - . ID=gene429;Name=AP001462.5-011;name2=SF1 chr11 ENCODE exon 64294345 64294456 . - . Parent=gene429 chr11 ENCODE exon 64297478 64297553 . - . Parent=gene429 chr11 ENCODE exon 64300546 64300674 . - . Parent=gene429 chr11 ENCODE exon 64302035 64302194 . - . Parent=gene429 chr11 ENCODE exon 64302410 64302555 . - . Parent=gene429 ### chr11 ENCODE gene 64297071 64302552 . - . ID=gene430;Name=AP001462.5-012;name2=SF1 chr11 ENCODE exon 64297071 64297553 . - . Parent=gene430 chr11 ENCODE exon 64300546 64300674 . - . Parent=gene430 chr11 ENCODE exon 64302410 64302552 . - . Parent=gene430 ### chr11 ENCODE gene 64300094 64302085 . - . ID=gene431;Name=AP001462.5-010;name2=SF1 chr11 ENCODE exon 64300094 64300674 . - . Parent=gene431 chr11 ENCODE exon 64302035 64302085 . - . Parent=gene431 ### chr11 ENCODE gene 64300094 64302811 . - . ID=gene432;Name=AP001462.5-007;name2=SF1 chr11 ENCODE exon 64300094 64300674 . - . Parent=gene432 chr11 ENCODE exon 64302410 64302811 . - . Parent=gene432 ### chr11 ENCODE gene 64313185 64320546 . - . ID=gene433;Name=AP001462.2-005;name2=MAP4K2 chr11 ENCODE exon 64313185 64313672 . - . Parent=gene433 chr11 ENCODE exon 64313778 64313833 . - . Parent=gene433 chr11 ENCODE exon 64313937 64314007 . - . Parent=gene433 chr11 ENCODE exon 64314236 64314322 . - . Parent=gene433 chr11 ENCODE exon 64314442 64314498 . - . Parent=gene433 chr11 ENCODE exon 64316006 64316134 . - . Parent=gene433 chr11 ENCODE exon 64316220 64316323 . - . Parent=gene433 chr11 ENCODE exon 64316412 64316470 . - . Parent=gene433 chr11 ENCODE exon 64320321 64320438 . - . Parent=gene433 chr11 ENCODE exon 64320541 64320546 . - . Parent=gene433 ### chr11 ENCODE gene 64313185 64321391 . - . ID=gene434;Name=AP001462.2-004;name2=MAP4K2 chr11 ENCODE exon 64313185 64313672 . - . Parent=gene434 chr11 ENCODE exon 64313778 64313833 . - . Parent=gene434 chr11 ENCODE exon 64313937 64314007 . - . Parent=gene434 chr11 ENCODE exon 64314236 64314322 . - . Parent=gene434 chr11 ENCODE exon 64314442 64314510 . - . Parent=gene434 chr11 ENCODE exon 64315957 64316470 . - . Parent=gene434 chr11 ENCODE exon 64320321 64320438 . - . Parent=gene434 chr11 ENCODE exon 64320541 64320601 . - . Parent=gene434 chr11 ENCODE exon 64320682 64320761 . - . Parent=gene434 chr11 ENCODE exon 64320857 64320941 . - . Parent=gene434 chr11 ENCODE exon 64321030 64321071 . - . Parent=gene434 chr11 ENCODE exon 64321152 64321216 . - . Parent=gene434 chr11 ENCODE exon 64321323 64321391 . - . Parent=gene434 ### chr11 ENCODE gene 64313185 64327289 . - . ID=gene435;Name=AP001462.2-001;name2=MAP4K2 chr11 ENCODE exon 64313185 64313672 . - . Parent=gene435 chr11 ENCODE CDS 64313585 64313672 . - 1 Parent=gene435 chr11 ENCODE exon 64313778 64313833 . - . Parent=gene435 chr11 ENCODE CDS 64313778 64313833 . - 0 Parent=gene435 chr11 ENCODE exon 64313937 64314007 . - . Parent=gene435 chr11 ENCODE CDS 64313937 64314007 . - 2 Parent=gene435 chr11 ENCODE exon 64314236 64314322 . - . Parent=gene435 chr11 ENCODE CDS 64314236 64314322 . - 2 Parent=gene435 chr11 ENCODE exon 64314442 64314510 . - . Parent=gene435 chr11 ENCODE CDS 64314442 64314510 . - 2 Parent=gene435 chr11 ENCODE exon 64315957 64316134 . - . Parent=gene435 chr11 ENCODE CDS 64315957 64316134 . - 0 Parent=gene435 chr11 ENCODE exon 64316220 64316323 . - . Parent=gene435 chr11 ENCODE CDS 64316220 64316323 . - 2 Parent=gene435 chr11 ENCODE exon 64316412 64316470 . - . Parent=gene435 chr11 ENCODE CDS 64316412 64316470 . - 1 Parent=gene435 chr11 ENCODE exon 64320321 64320438 . - . Parent=gene435 chr11 ENCODE CDS 64320321 64320438 . - 2 Parent=gene435 chr11 ENCODE exon 64320541 64320601 . - . Parent=gene435 chr11 ENCODE CDS 64320541 64320601 . - 0 Parent=gene435 chr11 ENCODE exon 64320682 64320761 . - . Parent=gene435 chr11 ENCODE CDS 64320682 64320761 . - 2 Parent=gene435 chr11 ENCODE exon 64320857 64320941 . - . Parent=gene435 chr11 ENCODE CDS 64320857 64320941 . - 0 Parent=gene435 chr11 ENCODE exon 64321030 64321071 . - . Parent=gene435 chr11 ENCODE CDS 64321030 64321071 . - 0 Parent=gene435 chr11 ENCODE exon 64321152 64321240 . - . Parent=gene435 chr11 ENCODE CDS 64321152 64321240 . - 2 Parent=gene435 chr11 ENCODE exon 64321323 64321428 . - . Parent=gene435 chr11 ENCODE CDS 64321323 64321428 . - 0 Parent=gene435 chr11 ENCODE exon 64321549 64321582 . - . Parent=gene435 chr11 ENCODE CDS 64321549 64321582 . - 1 Parent=gene435 chr11 ENCODE exon 64321674 64321712 . - . Parent=gene435 chr11 ENCODE CDS 64321674 64321712 . - 1 Parent=gene435 chr11 ENCODE exon 64322842 64322885 . - . Parent=gene435 chr11 ENCODE CDS 64322842 64322885 . - 0 Parent=gene435 chr11 ENCODE exon 64323469 64323527 . - . Parent=gene435 chr11 ENCODE CDS 64323469 64323527 . - 2 Parent=gene435 chr11 ENCODE exon 64323653 64323731 . - . Parent=gene435 chr11 ENCODE CDS 64323653 64323731 . - 0 Parent=gene435 chr11 ENCODE exon 64324157 64324264 . - . Parent=gene435 chr11 ENCODE CDS 64324157 64324264 . - 0 Parent=gene435 chr11 ENCODE exon 64324359 64324440 . - . Parent=gene435 chr11 ENCODE CDS 64324359 64324440 . - 1 Parent=gene435 chr11 ENCODE exon 64324812 64324874 . - . Parent=gene435 chr11 ENCODE CDS 64324812 64324874 . - 1 Parent=gene435 chr11 ENCODE exon 64324948 64325079 . - . Parent=gene435 chr11 ENCODE CDS 64324948 64325079 . - 1 Parent=gene435 chr11 ENCODE exon 64325159 64325231 . - . Parent=gene435 chr11 ENCODE CDS 64325159 64325231 . - 2 Parent=gene435 chr11 ENCODE exon 64325627 64325669 . - . Parent=gene435 chr11 ENCODE CDS 64325627 64325669 . - 0 Parent=gene435 chr11 ENCODE exon 64325758 64325805 . - . Parent=gene435 chr11 ENCODE CDS 64325758 64325805 . - 0 Parent=gene435 chr11 ENCODE exon 64326114 64326169 . - . Parent=gene435 chr11 ENCODE CDS 64326114 64326169 . - 2 Parent=gene435 chr11 ENCODE exon 64326467 64326531 . - . Parent=gene435 chr11 ENCODE CDS 64326467 64326531 . - 1 Parent=gene435 chr11 ENCODE exon 64326611 64326701 . - . Parent=gene435 chr11 ENCODE CDS 64326611 64326701 . - 2 Parent=gene435 chr11 ENCODE exon 64326933 64326990 . - . Parent=gene435 chr11 ENCODE CDS 64326933 64326990 . - 0 Parent=gene435 chr11 ENCODE CDS 64327102 64327197 . - 0 Parent=gene435 chr11 ENCODE exon 64327102 64327289 . - . Parent=gene435 ### chr11 ENCODE gene 64313185 64327289 . - . ID=gene436;Name=AP001462.2-002;name2=MAP4K2 chr11 ENCODE exon 64313185 64313672 . - . Parent=gene436 chr11 ENCODE CDS 64313585 64313672 . - 1 Parent=gene436 chr11 ENCODE exon 64313778 64313833 . - . Parent=gene436 chr11 ENCODE CDS 64313778 64313833 . - 0 Parent=gene436 chr11 ENCODE exon 64313937 64314007 . - . Parent=gene436 chr11 ENCODE CDS 64313937 64314007 . - 2 Parent=gene436 chr11 ENCODE exon 64314236 64314322 . - . Parent=gene436 chr11 ENCODE CDS 64314236 64314322 . - 2 Parent=gene436 chr11 ENCODE exon 64314442 64314510 . - . Parent=gene436 chr11 ENCODE CDS 64314442 64314510 . - 2 Parent=gene436 chr11 ENCODE exon 64315957 64316134 . - . Parent=gene436 chr11 ENCODE CDS 64315957 64316134 . - 0 Parent=gene436 chr11 ENCODE exon 64316220 64316323 . - . Parent=gene436 chr11 ENCODE CDS 64316220 64316323 . - 2 Parent=gene436 chr11 ENCODE exon 64316412 64316470 . - . Parent=gene436 chr11 ENCODE CDS 64316412 64316470 . - 1 Parent=gene436 chr11 ENCODE exon 64320321 64320438 . - . Parent=gene436 chr11 ENCODE CDS 64320321 64320438 . - 2 Parent=gene436 chr11 ENCODE exon 64320541 64320601 . - . Parent=gene436 chr11 ENCODE CDS 64320541 64320601 . - 0 Parent=gene436 chr11 ENCODE exon 64320682 64320761 . - . Parent=gene436 chr11 ENCODE CDS 64320682 64320761 . - 2 Parent=gene436 chr11 ENCODE exon 64320857 64320941 . - . Parent=gene436 chr11 ENCODE CDS 64320857 64320941 . - 0 Parent=gene436 chr11 ENCODE exon 64321030 64321071 . - . Parent=gene436 chr11 ENCODE CDS 64321030 64321071 . - 0 Parent=gene436 chr11 ENCODE exon 64321152 64321216 . - . Parent=gene436 chr11 ENCODE CDS 64321152 64321216 . - 2 Parent=gene436 chr11 ENCODE exon 64321323 64321428 . - . Parent=gene436 chr11 ENCODE CDS 64321323 64321428 . - 0 Parent=gene436 chr11 ENCODE exon 64321549 64321582 . - . Parent=gene436 chr11 ENCODE CDS 64321549 64321582 . - 1 Parent=gene436 chr11 ENCODE exon 64321674 64321712 . - . Parent=gene436 chr11 ENCODE CDS 64321674 64321712 . - 1 Parent=gene436 chr11 ENCODE exon 64322842 64322885 . - . Parent=gene436 chr11 ENCODE CDS 64322842 64322885 . - 0 Parent=gene436 chr11 ENCODE exon 64323469 64323527 . - . Parent=gene436 chr11 ENCODE CDS 64323469 64323527 . - 2 Parent=gene436 chr11 ENCODE exon 64323653 64323731 . - . Parent=gene436 chr11 ENCODE CDS 64323653 64323731 . - 0 Parent=gene436 chr11 ENCODE exon 64324157 64324264 . - . Parent=gene436 chr11 ENCODE CDS 64324157 64324264 . - 0 Parent=gene436 chr11 ENCODE exon 64324359 64324440 . - . Parent=gene436 chr11 ENCODE CDS 64324359 64324440 . - 1 Parent=gene436 chr11 ENCODE exon 64324812 64324874 . - . Parent=gene436 chr11 ENCODE CDS 64324812 64324874 . - 1 Parent=gene436 chr11 ENCODE exon 64324948 64325079 . - . Parent=gene436 chr11 ENCODE CDS 64324948 64325079 . - 1 Parent=gene436 chr11 ENCODE exon 64325159 64325231 . - . Parent=gene436 chr11 ENCODE CDS 64325159 64325231 . - 2 Parent=gene436 chr11 ENCODE exon 64325627 64325669 . - . Parent=gene436 chr11 ENCODE CDS 64325627 64325669 . - 0 Parent=gene436 chr11 ENCODE exon 64325758 64325805 . - . Parent=gene436 chr11 ENCODE CDS 64325758 64325805 . - 0 Parent=gene436 chr11 ENCODE exon 64326114 64326169 . - . Parent=gene436 chr11 ENCODE CDS 64326114 64326169 . - 2 Parent=gene436 chr11 ENCODE exon 64326467 64326531 . - . Parent=gene436 chr11 ENCODE CDS 64326467 64326531 . - 1 Parent=gene436 chr11 ENCODE exon 64326611 64326701 . - . Parent=gene436 chr11 ENCODE CDS 64326611 64326701 . - 2 Parent=gene436 chr11 ENCODE exon 64326933 64326990 . - . Parent=gene436 chr11 ENCODE CDS 64326933 64326990 . - 0 Parent=gene436 chr11 ENCODE CDS 64327102 64327197 . - 0 Parent=gene436 chr11 ENCODE exon 64327102 64327289 . - . Parent=gene436 ### chr11 ENCODE gene 64313218 64327289 . - . ID=gene437;Name=AP001462.2-003;name2=MAP4K2 chr11 ENCODE exon 64313218 64313312 . - . Parent=gene437 chr11 ENCODE exon 64321152 64321216 . - . Parent=gene437 chr11 ENCODE exon 64321323 64321428 . - . Parent=gene437 chr11 ENCODE exon 64321549 64321582 . - . Parent=gene437 chr11 ENCODE exon 64321674 64321712 . - . Parent=gene437 chr11 ENCODE exon 64322842 64322885 . - . Parent=gene437 chr11 ENCODE exon 64323469 64323527 . - . Parent=gene437 chr11 ENCODE exon 64323653 64323731 . - . Parent=gene437 chr11 ENCODE exon 64324157 64324264 . - . Parent=gene437 chr11 ENCODE exon 64324359 64324440 . - . Parent=gene437 chr11 ENCODE exon 64324812 64324874 . - . Parent=gene437 chr11 ENCODE exon 64324948 64325079 . - . Parent=gene437 chr11 ENCODE exon 64325159 64325231 . - . Parent=gene437 chr11 ENCODE exon 64325627 64325669 . - . Parent=gene437 chr11 ENCODE exon 64325758 64325805 . - . Parent=gene437 chr11 ENCODE exon 64326114 64326169 . - . Parent=gene437 chr11 ENCODE exon 64326467 64326531 . - . Parent=gene437 chr11 ENCODE exon 64326611 64326701 . - . Parent=gene437 chr11 ENCODE exon 64326933 64326990 . - . Parent=gene437 chr11 ENCODE exon 64327102 64327289 . - . Parent=gene437 ### chr11 ENCODE gene 64313937 64323707 . - . ID=gene438;Name=AP001462.2-008;name2=MAP4K2 chr11 ENCODE exon 64313937 64314007 . - . Parent=gene438 chr11 ENCODE exon 64314236 64314322 . - . Parent=gene438 chr11 ENCODE exon 64314442 64314510 . - . Parent=gene438 chr11 ENCODE exon 64315957 64316134 . - . Parent=gene438 chr11 ENCODE exon 64316220 64316470 . - . Parent=gene438 chr11 ENCODE exon 64320321 64320438 . - . Parent=gene438 chr11 ENCODE exon 64320541 64320601 . - . Parent=gene438 chr11 ENCODE exon 64320682 64320761 . - . Parent=gene438 chr11 ENCODE exon 64320857 64320941 . - . Parent=gene438 chr11 ENCODE exon 64321030 64321071 . - . Parent=gene438 chr11 ENCODE exon 64321152 64321240 . - . Parent=gene438 chr11 ENCODE exon 64321323 64321428 . - . Parent=gene438 chr11 ENCODE exon 64321549 64321582 . - . Parent=gene438 chr11 ENCODE exon 64321674 64321712 . - . Parent=gene438 chr11 ENCODE exon 64322842 64322885 . - . Parent=gene438 chr11 ENCODE exon 64323469 64323527 . - . Parent=gene438 chr11 ENCODE exon 64323653 64323707 . - . Parent=gene438 ### chr11 ENCODE gene 64321019 64323682 . - . ID=gene439;Name=AP001462.2-009;name2=MAP4K2 chr11 ENCODE exon 64321019 64321071 . - . Parent=gene439 chr11 ENCODE exon 64321152 64321240 . - . Parent=gene439 chr11 ENCODE exon 64321323 64321582 . - . Parent=gene439 chr11 ENCODE exon 64321674 64321712 . - . Parent=gene439 chr11 ENCODE exon 64322842 64322885 . - . Parent=gene439 chr11 ENCODE exon 64323469 64323527 . - . Parent=gene439 chr11 ENCODE exon 64323653 64323682 . - . Parent=gene439 ### chr11 ENCODE gene 64323469 64327223 . - . ID=gene440;Name=AP001462.2-006;name2=MAP4K2 chr11 ENCODE exon 64323469 64323527 . - . Parent=gene440 chr11 ENCODE CDS 64323469 64323527 . - 2 Parent=gene440 chr11 ENCODE exon 64323653 64323731 . - . Parent=gene440 chr11 ENCODE CDS 64323653 64323731 . - 0 Parent=gene440 chr11 ENCODE exon 64324157 64324264 . - . Parent=gene440 chr11 ENCODE CDS 64324157 64324264 . - 0 Parent=gene440 chr11 ENCODE exon 64324359 64324440 . - . Parent=gene440 chr11 ENCODE CDS 64324359 64324440 . - 1 Parent=gene440 chr11 ENCODE exon 64324812 64324874 . - . Parent=gene440 chr11 ENCODE CDS 64324812 64324874 . - 1 Parent=gene440 chr11 ENCODE exon 64325159 64325231 . - . Parent=gene440 chr11 ENCODE CDS 64325159 64325231 . - 2 Parent=gene440 chr11 ENCODE exon 64325627 64325669 . - . Parent=gene440 chr11 ENCODE CDS 64325627 64325669 . - 0 Parent=gene440 chr11 ENCODE exon 64325758 64325805 . - . Parent=gene440 chr11 ENCODE CDS 64325758 64325805 . - 0 Parent=gene440 chr11 ENCODE exon 64326114 64326169 . - . Parent=gene440 chr11 ENCODE CDS 64326114 64326169 . - 2 Parent=gene440 chr11 ENCODE exon 64326467 64326531 . - . Parent=gene440 chr11 ENCODE CDS 64326467 64326531 . - 1 Parent=gene440 chr11 ENCODE exon 64326611 64326701 . - . Parent=gene440 chr11 ENCODE CDS 64326611 64326701 . - 2 Parent=gene440 chr11 ENCODE exon 64326933 64326990 . - . Parent=gene440 chr11 ENCODE CDS 64326933 64326990 . - 0 Parent=gene440 chr11 ENCODE CDS 64327102 64327197 . - 0 Parent=gene440 chr11 ENCODE exon 64327102 64327223 . - . Parent=gene440 ### chr11 ENCODE gene 64324230 64325861 . - . ID=gene441;Name=AP001462.2-011;name2=MAP4K2 chr11 ENCODE exon 64324230 64324264 . - . Parent=gene441 chr11 ENCODE exon 64324359 64324440 . - . Parent=gene441 chr11 ENCODE exon 64324812 64324874 . - . Parent=gene441 chr11 ENCODE exon 64324948 64325079 . - . Parent=gene441 chr11 ENCODE exon 64325159 64325231 . - . Parent=gene441 chr11 ENCODE exon 64325627 64325669 . - . Parent=gene441 chr11 ENCODE exon 64325758 64325861 . - . Parent=gene441 ### chr11 ENCODE gene 64324384 64327058 . - . ID=gene442;Name=AP001462.2-007;name2=MAP4K2 chr11 ENCODE exon 64324384 64324440 . - . Parent=gene442 chr11 ENCODE exon 64324812 64324874 . - . Parent=gene442 chr11 ENCODE exon 64325159 64325231 . - . Parent=gene442 chr11 ENCODE exon 64325758 64325805 . - . Parent=gene442 chr11 ENCODE exon 64326114 64326169 . - . Parent=gene442 chr11 ENCODE exon 64326467 64326531 . - . Parent=gene442 chr11 ENCODE exon 64326611 64326701 . - . Parent=gene442 chr11 ENCODE exon 64326933 64327058 . - . Parent=gene442 ### chr11 ENCODE gene 64324396 64327177 . - . ID=gene443;Name=AP001462.2-010;name2=MAP4K2 chr11 ENCODE exon 64324396 64324440 . - . Parent=gene443 chr11 ENCODE exon 64324812 64324874 . - . Parent=gene443 chr11 ENCODE exon 64324948 64325079 . - . Parent=gene443 chr11 ENCODE exon 64325159 64325231 . - . Parent=gene443 chr11 ENCODE exon 64325758 64325805 . - . Parent=gene443 chr11 ENCODE exon 64326114 64326169 . - . Parent=gene443 chr11 ENCODE exon 64326467 64326531 . - . Parent=gene443 chr11 ENCODE exon 64326611 64326701 . - . Parent=gene443 chr11 ENCODE exon 64326933 64327177 . - . Parent=gene443 ### chr11 ENCODE gene 64327564 64334533 . - . ID=gene444;Name=AP001462.1-008;name2=MEN1 chr11 ENCODE exon 64327564 64328864 . - . Parent=gene444 chr11 ENCODE CDS 64328382 64328864 . - 0 Parent=gene444 chr11 ENCODE exon 64329683 64329818 . - . Parent=gene444 chr11 ENCODE CDS 64329683 64329818 . - 1 Parent=gene444 chr11 ENCODE exon 64330280 64330416 . - . Parent=gene444 chr11 ENCODE CDS 64330280 64330416 . - 0 Parent=gene444 chr11 ENCODE exon 64331059 64331146 . - . Parent=gene444 chr11 ENCODE CDS 64331059 64331146 . - 1 Parent=gene444 chr11 ENCODE exon 64331227 64331267 . - . Parent=gene444 chr11 ENCODE CDS 64331227 64331267 . - 0 Parent=gene444 chr11 ENCODE exon 64331600 64331728 . - . Parent=gene444 chr11 ENCODE CDS 64331600 64331728 . - 0 Parent=gene444 chr11 ENCODE exon 64331939 64332147 . - . Parent=gene444 chr11 ENCODE CDS 64331939 64332147 . - 2 Parent=gene444 chr11 ENCODE CDS 64333713 64334157 . - 0 Parent=gene444 chr11 ENCODE exon 64333713 64334533 . - . Parent=gene444 ### chr11 ENCODE gene 64327564 64334606 . - . ID=gene445;Name=AP001462.1-002;name2=MEN1 chr11 ENCODE exon 64327564 64328864 . - . Parent=gene445 chr11 ENCODE CDS 64328382 64328864 . - 0 Parent=gene445 chr11 ENCODE exon 64329082 64329246 . - . Parent=gene445 chr11 ENCODE CDS 64329082 64329246 . - 0 Parent=gene445 chr11 ENCODE exon 64329683 64329818 . - . Parent=gene445 chr11 ENCODE CDS 64329683 64329818 . - 1 Parent=gene445 chr11 ENCODE exon 64330280 64330416 . - . Parent=gene445 chr11 ENCODE CDS 64330280 64330416 . - 0 Parent=gene445 chr11 ENCODE exon 64331059 64331146 . - . Parent=gene445 chr11 ENCODE CDS 64331059 64331146 . - 1 Parent=gene445 chr11 ENCODE exon 64331227 64331267 . - . Parent=gene445 chr11 ENCODE CDS 64331227 64331267 . - 0 Parent=gene445 chr11 ENCODE exon 64331600 64331728 . - . Parent=gene445 chr11 ENCODE CDS 64331600 64331728 . - 0 Parent=gene445 chr11 ENCODE exon 64332044 64332147 . - . Parent=gene445 chr11 ENCODE CDS 64332044 64332147 . - 2 Parent=gene445 chr11 ENCODE CDS 64333713 64334157 . - 0 Parent=gene445 chr11 ENCODE exon 64333713 64334180 . - . Parent=gene445 chr11 ENCODE exon 64334562 64334606 . - . Parent=gene445 ### chr11 ENCODE gene 64327564 64334656 . - . ID=gene446;Name=AP001462.1-007;name2=MEN1 chr11 ENCODE exon 64327564 64328864 . - . Parent=gene446 chr11 ENCODE CDS 64328382 64328864 . - 0 Parent=gene446 chr11 ENCODE exon 64329082 64329246 . - . Parent=gene446 chr11 ENCODE CDS 64329082 64329246 . - 0 Parent=gene446 chr11 ENCODE exon 64329683 64329818 . - . Parent=gene446 chr11 ENCODE CDS 64329683 64329818 . - 1 Parent=gene446 chr11 ENCODE exon 64330280 64330416 . - . Parent=gene446 chr11 ENCODE CDS 64330280 64330416 . - 0 Parent=gene446 chr11 ENCODE exon 64331059 64331146 . - . Parent=gene446 chr11 ENCODE CDS 64331059 64331146 . - 1 Parent=gene446 chr11 ENCODE exon 64331227 64331267 . - . Parent=gene446 chr11 ENCODE CDS 64331227 64331267 . - 0 Parent=gene446 chr11 ENCODE exon 64331600 64331728 . - . Parent=gene446 chr11 ENCODE CDS 64331600 64331728 . - 0 Parent=gene446 chr11 ENCODE exon 64331939 64332147 . - . Parent=gene446 chr11 ENCODE CDS 64331939 64332147 . - 2 Parent=gene446 chr11 ENCODE CDS 64333713 64334157 . - 0 Parent=gene446 chr11 ENCODE exon 64333713 64334656 . - . Parent=gene446 ### chr11 ENCODE gene 64327564 64334764 . - . ID=gene447;Name=AP001462.1-001;name2=MEN1 chr11 ENCODE exon 64327564 64328864 . - . Parent=gene447 chr11 ENCODE CDS 64328382 64328864 . - 0 Parent=gene447 chr11 ENCODE exon 64329082 64329246 . - . Parent=gene447 chr11 ENCODE CDS 64329082 64329246 . - 0 Parent=gene447 chr11 ENCODE exon 64329683 64329818 . - . Parent=gene447 chr11 ENCODE CDS 64329683 64329818 . - 1 Parent=gene447 chr11 ENCODE exon 64330280 64330416 . - . Parent=gene447 chr11 ENCODE CDS 64330280 64330416 . - 0 Parent=gene447 chr11 ENCODE exon 64331059 64331146 . - . Parent=gene447 chr11 ENCODE CDS 64331059 64331146 . - 1 Parent=gene447 chr11 ENCODE exon 64331227 64331267 . - . Parent=gene447 chr11 ENCODE CDS 64331227 64331267 . - 0 Parent=gene447 chr11 ENCODE exon 64331600 64331728 . - . Parent=gene447 chr11 ENCODE CDS 64331600 64331728 . - 0 Parent=gene447 chr11 ENCODE exon 64331939 64332147 . - . Parent=gene447 chr11 ENCODE CDS 64331939 64332147 . - 2 Parent=gene447 chr11 ENCODE CDS 64333713 64334157 . - 0 Parent=gene447 chr11 ENCODE exon 64333713 64334180 . - . Parent=gene447 chr11 ENCODE exon 64334678 64334764 . - . Parent=gene447 ### chr11 ENCODE gene 64327564 64334789 . - . ID=gene448;Name=AP001462.1-003;name2=MEN1 chr11 ENCODE exon 64327564 64328864 . - . Parent=gene448 chr11 ENCODE CDS 64328382 64328864 . - 0 Parent=gene448 chr11 ENCODE exon 64329082 64329246 . - . Parent=gene448 chr11 ENCODE CDS 64329082 64329246 . - 0 Parent=gene448 chr11 ENCODE exon 64329683 64329818 . - . Parent=gene448 chr11 ENCODE CDS 64329683 64329818 . - 1 Parent=gene448 chr11 ENCODE exon 64330280 64330416 . - . Parent=gene448 chr11 ENCODE CDS 64330280 64330416 . - 0 Parent=gene448 chr11 ENCODE exon 64331059 64331146 . - . Parent=gene448 chr11 ENCODE CDS 64331059 64331146 . - 1 Parent=gene448 chr11 ENCODE exon 64331227 64331267 . - . Parent=gene448 chr11 ENCODE CDS 64331227 64331267 . - 0 Parent=gene448 chr11 ENCODE exon 64331600 64331728 . - . Parent=gene448 chr11 ENCODE CDS 64331600 64331728 . - 0 Parent=gene448 chr11 ENCODE exon 64331939 64332147 . - . Parent=gene448 chr11 ENCODE CDS 64331939 64332147 . - 2 Parent=gene448 chr11 ENCODE CDS 64333713 64334157 . - 0 Parent=gene448 chr11 ENCODE exon 64333713 64334180 . - . Parent=gene448 chr11 ENCODE exon 64334316 64334789 . - . Parent=gene448 ### chr11 ENCODE gene 64328382 64334180 . - . ID=gene449;name2=MEN1;Name=AP001462.1-011 chr11 ENCODE exon 64328382 64328864 . - . Parent=gene449 chr11 ENCODE CDS 64328382 64328864 . - 0 Parent=gene449 chr11 ENCODE exon 64329082 64329246 . - . Parent=gene449 chr11 ENCODE CDS 64329082 64329246 . - 0 Parent=gene449 chr11 ENCODE exon 64329683 64329818 . - . Parent=gene449 chr11 ENCODE CDS 64329683 64329818 . - 1 Parent=gene449 chr11 ENCODE exon 64330280 64330416 . - . Parent=gene449 chr11 ENCODE CDS 64330280 64330416 . - 0 Parent=gene449 chr11 ENCODE exon 64331059 64331146 . - . Parent=gene449 chr11 ENCODE CDS 64331059 64331146 . - 1 Parent=gene449 chr11 ENCODE exon 64331227 64331267 . - . Parent=gene449 chr11 ENCODE CDS 64331227 64331267 . - 0 Parent=gene449 chr11 ENCODE exon 64331600 64331728 . - . Parent=gene449 chr11 ENCODE CDS 64331600 64331728 . - 0 Parent=gene449 chr11 ENCODE exon 64331939 64332147 . - . Parent=gene449 chr11 ENCODE CDS 64331939 64332147 . - 2 Parent=gene449 chr11 ENCODE CDS 64333698 64334157 . - 0 Parent=gene449 chr11 ENCODE exon 64333698 64334180 . - . Parent=gene449 ### chr11 ENCODE gene 64328423 64330416 . - . ID=gene450;Name=AP001462.1-012;name2=MEN1 chr11 ENCODE exon 64328423 64328864 . - . Parent=gene450 chr11 ENCODE exon 64329082 64329246 . - . Parent=gene450 chr11 ENCODE exon 64329683 64330416 . - . Parent=gene450 ### chr11 ENCODE gene 64329174 64330040 . - . ID=gene451;Name=AP001462.1-013;name2=MEN1 chr11 ENCODE exon 64329174 64329246 . - . Parent=gene451 chr11 ENCODE exon 64329683 64329818 . - . Parent=gene451 chr11 ENCODE exon 64329936 64330040 . - . Parent=gene451 ### chr11 ENCODE gene 64330290 64334606 . - . ID=gene452;Name=AP001462.1-009;name2=MEN1 chr11 ENCODE exon 64330290 64330416 . - . Parent=gene452 chr11 ENCODE CDS 64330290 64330416 . - 0 Parent=gene452 chr11 ENCODE exon 64331059 64331146 . - . Parent=gene452 chr11 ENCODE CDS 64331059 64331146 . - 1 Parent=gene452 chr11 ENCODE exon 64331227 64331267 . - . Parent=gene452 chr11 ENCODE CDS 64331227 64331267 . - 0 Parent=gene452 chr11 ENCODE exon 64331600 64331728 . - . Parent=gene452 chr11 ENCODE CDS 64331600 64331728 . - 0 Parent=gene452 chr11 ENCODE exon 64331939 64332147 . - . Parent=gene452 chr11 ENCODE CDS 64331939 64332147 . - 2 Parent=gene452 chr11 ENCODE CDS 64333713 64334157 . - 0 Parent=gene452 chr11 ENCODE exon 64333713 64334180 . - . Parent=gene452 chr11 ENCODE exon 64334562 64334606 . - . Parent=gene452 ### chr11 ENCODE gene 64331128 64334629 . - . ID=gene453;Name=AP001462.1-004;name2=MEN1 chr11 ENCODE exon 64331128 64331146 . - . Parent=gene453 chr11 ENCODE CDS 64331128 64331146 . - 1 Parent=gene453 chr11 ENCODE exon 64331227 64331267 . - . Parent=gene453 chr11 ENCODE CDS 64331227 64331267 . - 0 Parent=gene453 chr11 ENCODE exon 64331600 64331728 . - . Parent=gene453 chr11 ENCODE CDS 64331600 64331728 . - 0 Parent=gene453 chr11 ENCODE exon 64331939 64332147 . - . Parent=gene453 chr11 ENCODE CDS 64331939 64332147 . - 2 Parent=gene453 chr11 ENCODE CDS 64333713 64334157 . - 0 Parent=gene453 chr11 ENCODE exon 64333713 64334180 . - . Parent=gene453 chr11 ENCODE exon 64334574 64334629 . - . Parent=gene453 ### chr11 ENCODE gene 64331600 64334569 . - . ID=gene454;Name=AP001462.1-010;name2=MEN1 chr11 ENCODE exon 64331600 64331728 . - . Parent=gene454 chr11 ENCODE CDS 64331600 64331728 . - 0 Parent=gene454 chr11 ENCODE exon 64331939 64332147 . - . Parent=gene454 chr11 ENCODE CDS 64331939 64332147 . - 2 Parent=gene454 chr11 ENCODE CDS 64333713 64334157 . - 0 Parent=gene454 chr11 ENCODE exon 64333713 64334180 . - . Parent=gene454 chr11 ENCODE exon 64334506 64334569 . - . Parent=gene454 ### chr11 ENCODE gene 64333718 64335342 . - . ID=gene455;Name=AP001462.1-005;name2=MEN1 chr11 ENCODE CDS 64333718 64334157 . - 0 Parent=gene455 chr11 ENCODE exon 64333718 64334180 . - . Parent=gene455 chr11 ENCODE exon 64334862 64335342 . - . Parent=gene455 ### chr11 ENCODE gene 64333718 64335342 . - . ID=gene456;Name=AP001462.1-006;name2=MEN1 chr11 ENCODE CDS 64333718 64334157 . - 0 Parent=gene456 chr11 ENCODE exon 64333718 64334180 . - . Parent=gene456 chr11 ENCODE exon 64334862 64334953 . - . Parent=gene456 chr11 ENCODE exon 64335082 64335342 . - . Parent=gene456 ### chr11 ENCODE gene 64347435 64368617 . - . ID=gene457;Name=AP001187.3-001;name2=CDC42BPG chr11 ENCODE exon 64347435 64348577 . - . Parent=gene457 chr11 ENCODE CDS 64348521 64348577 . - 0 Parent=gene457 chr11 ENCODE exon 64350518 64350603 . - . Parent=gene457 chr11 ENCODE CDS 64350518 64350603 . - 2 Parent=gene457 chr11 ENCODE exon 64350719 64350842 . - . Parent=gene457 chr11 ENCODE CDS 64350719 64350842 . - 0 Parent=gene457 chr11 ENCODE exon 64351098 64351215 . - . Parent=gene457 chr11 ENCODE CDS 64351098 64351215 . - 1 Parent=gene457 chr11 ENCODE exon 64351326 64351446 . - . Parent=gene457 chr11 ENCODE CDS 64351326 64351446 . - 2 Parent=gene457 chr11 ENCODE exon 64351575 64351659 . - . Parent=gene457 chr11 ENCODE CDS 64351575 64351659 . - 0 Parent=gene457 chr11 ENCODE exon 64351734 64351831 . - . Parent=gene457 chr11 ENCODE CDS 64351734 64351831 . - 2 Parent=gene457 chr11 ENCODE exon 64353519 64354118 . - . Parent=gene457 chr11 ENCODE CDS 64353519 64354118 . - 2 Parent=gene457 chr11 ENCODE exon 64354242 64354304 . - . Parent=gene457 chr11 ENCODE CDS 64354242 64354304 . - 2 Parent=gene457 chr11 ENCODE exon 64355553 64355769 . - . Parent=gene457 chr11 ENCODE CDS 64355553 64355769 . - 0 Parent=gene457 chr11 ENCODE exon 64356476 64356557 . - . Parent=gene457 chr11 ENCODE CDS 64356476 64356557 . - 1 Parent=gene457 chr11 ENCODE exon 64356652 64356791 . - . Parent=gene457 chr11 ENCODE CDS 64356652 64356791 . - 0 Parent=gene457 chr11 ENCODE exon 64356874 64357007 . - . Parent=gene457 chr11 ENCODE CDS 64356874 64357007 . - 2 Parent=gene457 chr11 ENCODE exon 64357279 64357384 . - . Parent=gene457 chr11 ENCODE CDS 64357279 64357384 . - 0 Parent=gene457 chr11 ENCODE exon 64357648 64357707 . - . Parent=gene457 chr11 ENCODE CDS 64357648 64357707 . - 0 Parent=gene457 chr11 ENCODE exon 64357786 64357884 . - . Parent=gene457 chr11 ENCODE CDS 64357786 64357884 . - 0 Parent=gene457 chr11 ENCODE exon 64357973 64358025 . - . Parent=gene457 chr11 ENCODE CDS 64357973 64358025 . - 2 Parent=gene457 chr11 ENCODE exon 64358314 64358402 . - . Parent=gene457 chr11 ENCODE CDS 64358314 64358402 . - 1 Parent=gene457 chr11 ENCODE exon 64358477 64358625 . - . Parent=gene457 chr11 ENCODE CDS 64358477 64358625 . - 0 Parent=gene457 chr11 ENCODE exon 64358897 64359011 . - . Parent=gene457 chr11 ENCODE CDS 64358897 64359011 . - 1 Parent=gene457 chr11 ENCODE exon 64359095 64359201 . - . Parent=gene457 chr11 ENCODE CDS 64359095 64359201 . - 0 Parent=gene457 chr11 ENCODE exon 64359395 64359467 . - . Parent=gene457 chr11 ENCODE CDS 64359395 64359467 . - 1 Parent=gene457 chr11 ENCODE exon 64359548 64359669 . - . Parent=gene457 chr11 ENCODE CDS 64359548 64359669 . - 0 Parent=gene457 chr11 ENCODE exon 64359810 64359899 . - . Parent=gene457 chr11 ENCODE CDS 64359810 64359899 . - 0 Parent=gene457 chr11 ENCODE exon 64360165 64360344 . - . Parent=gene457 chr11 ENCODE CDS 64360165 64360344 . - 0 Parent=gene457 chr11 ENCODE exon 64360475 64360578 . - . Parent=gene457 chr11 ENCODE CDS 64360475 64360578 . - 2 Parent=gene457 chr11 ENCODE exon 64360787 64360867 . - . Parent=gene457 chr11 ENCODE CDS 64360787 64360867 . - 2 Parent=gene457 chr11 ENCODE exon 64360970 64361067 . - . Parent=gene457 chr11 ENCODE CDS 64360970 64361067 . - 1 Parent=gene457 chr11 ENCODE exon 64362131 64362210 . - . Parent=gene457 chr11 ENCODE CDS 64362131 64362210 . - 0 Parent=gene457 chr11 ENCODE exon 64362702 64362950 . - . Parent=gene457 chr11 ENCODE CDS 64362702 64362950 . - 0 Parent=gene457 chr11 ENCODE exon 64363081 64363281 . - . Parent=gene457 chr11 ENCODE CDS 64363081 64363281 . - 0 Parent=gene457 chr11 ENCODE exon 64363526 64363619 . - . Parent=gene457 chr11 ENCODE CDS 64363526 64363619 . - 1 Parent=gene457 chr11 ENCODE exon 64364168 64364316 . - . Parent=gene457 chr11 ENCODE CDS 64364168 64364316 . - 0 Parent=gene457 chr11 ENCODE exon 64364601 64364696 . - . Parent=gene457 chr11 ENCODE CDS 64364601 64364696 . - 0 Parent=gene457 chr11 ENCODE exon 64365698 64365781 . - . Parent=gene457 chr11 ENCODE CDS 64365698 64365781 . - 0 Parent=gene457 chr11 ENCODE exon 64365861 64365952 . - . Parent=gene457 chr11 ENCODE CDS 64365861 64365952 . - 2 Parent=gene457 chr11 ENCODE exon 64368458 64368617 . - . Parent=gene457 chr11 ENCODE CDS 64368458 64368617 . - 0 Parent=gene457 ### chr11 ENCODE gene 64354440 64356530 . - . ID=gene458;Name=AP001187.3-004;name2=CDC42BPG chr11 ENCODE exon 64354440 64354506 . - . Parent=gene458 chr11 ENCODE exon 64355553 64355769 . - . Parent=gene458 chr11 ENCODE exon 64356476 64356530 . - . Parent=gene458 ### chr11 ENCODE gene 64356968 64357833 . - . ID=gene459;Name=AP001187.3-003;name2=CDC42BPG chr11 ENCODE exon 64356968 64357007 . - . Parent=gene459 chr11 ENCODE exon 64357239 64357384 . - . Parent=gene459 chr11 ENCODE exon 64357648 64357707 . - . Parent=gene459 chr11 ENCODE exon 64357786 64357833 . - . Parent=gene459 ### chr11 ENCODE gene 64357328 64357859 . - . ID=gene460;name2=CDC42BPG;Name=AP001187.3-002 chr11 ENCODE exon 64357328 64357707 . - . Parent=gene460 chr11 ENCODE exon 64357786 64357859 . - . Parent=gene460 ### chr11 ENCODE gene 64375690 64402767 . - . ID=gene461;Name=AP001187.8-001;name2=EHD1 chr11 ENCODE exon 64375690 64378905 . - . Parent=gene461 chr11 ENCODE CDS 64378381 64378905 . - 0 Parent=gene461 chr11 ENCODE exon 64379370 64379534 . - . Parent=gene461 chr11 ENCODE CDS 64379370 64379534 . - 0 Parent=gene461 chr11 ENCODE exon 64383972 64384384 . - . Parent=gene461 chr11 ENCODE CDS 64383972 64384384 . - 2 Parent=gene461 chr11 ENCODE exon 64398469 64398566 . - . Parent=gene461 chr11 ENCODE CDS 64398469 64398566 . - 1 Parent=gene461 chr11 ENCODE CDS 64402109 64402512 . - 0 Parent=gene461 chr11 ENCODE exon 64402109 64402767 . - . Parent=gene461 ### chr11 ENCODE gene 64376779 64380711 . - . ID=gene462;Name=AP001187.8-005;name2=EHD1 chr11 ENCODE exon 64376779 64378905 . - . Parent=gene462 chr11 ENCODE exon 64379370 64380711 . - . Parent=gene462 ### chr11 ENCODE gene 64376779 64399881 . - . ID=gene463;Name=AP001187.8-003;name2=EHD1 chr11 ENCODE exon 64376779 64376974 . - . Parent=gene463 chr11 ENCODE exon 64377636 64378905 . - . Parent=gene463 chr11 ENCODE exon 64379370 64379845 . - . Parent=gene463 chr11 ENCODE exon 64383972 64384384 . - . Parent=gene463 chr11 ENCODE exon 64398469 64399881 . - . Parent=gene463 ### chr11 ENCODE gene 64376779 64402563 . - . ID=gene464;Name=AP001187.8-004;name2=EHD1 chr11 ENCODE exon 64376779 64377133 . - . Parent=gene464 chr11 ENCODE exon 64378399 64378905 . - . Parent=gene464 chr11 ENCODE exon 64379370 64379534 . - . Parent=gene464 chr11 ENCODE exon 64383972 64384384 . - . Parent=gene464 chr11 ENCODE exon 64398469 64398566 . - . Parent=gene464 chr11 ENCODE exon 64402109 64402563 . - . Parent=gene464 ### chr11 ENCODE gene 64376779 64403725 . - . ID=gene465;Name=AP001187.8-002;name2=EHD1 chr11 ENCODE exon 64376779 64378905 . - . Parent=gene465 chr11 ENCODE CDS 64378381 64378905 . - 0 Parent=gene465 chr11 ENCODE exon 64379370 64379534 . - . Parent=gene465 chr11 ENCODE CDS 64379370 64379534 . - 0 Parent=gene465 chr11 ENCODE exon 64383972 64384384 . - . Parent=gene465 chr11 ENCODE CDS 64383972 64384384 . - 2 Parent=gene465 chr11 ENCODE exon 64398469 64398566 . - . Parent=gene465 chr11 ENCODE CDS 64398469 64398566 . - 1 Parent=gene465 chr11 ENCODE CDS 64402109 64402512 . - 0 Parent=gene465 chr11 ENCODE exon 64402109 64402535 . - . Parent=gene465 chr11 ENCODE exon 64402883 64403204 . - . Parent=gene465 chr11 ENCODE exon 64403660 64403725 . - . Parent=gene465 ### chr11 ENCODE gene 64378154 64402672 . - . ID=gene466;Name=AP001187.8-006;name2=EHD1 chr11 ENCODE exon 64378154 64378645 . - . Parent=gene466 chr11 ENCODE exon 64378712 64378905 . - . Parent=gene466 chr11 ENCODE exon 64379370 64379534 . - . Parent=gene466 chr11 ENCODE exon 64383972 64384055 . - . Parent=gene466 chr11 ENCODE exon 64402267 64402672 . - . Parent=gene466 ### chr11 ENCODE gene 64378340 64379143 . - . ID=gene467;Name=AP001187.8-009;name2=EHD1 chr11 ENCODE exon 64378340 64378905 . - . Parent=gene467 chr11 ENCODE exon 64379062 64379143 . - . Parent=gene467 ### chr11 ENCODE gene 64378660 64401965 . - . ID=gene468;Name=AP001187.8-008;name2=EHD1 chr11 ENCODE exon 64378660 64378905 . - . Parent=gene468 chr11 ENCODE CDS 64378660 64378905 . - 0 Parent=gene468 chr11 ENCODE exon 64379370 64379534 . - . Parent=gene468 chr11 ENCODE CDS 64379370 64379534 . - 0 Parent=gene468 chr11 ENCODE exon 64383972 64384384 . - . Parent=gene468 chr11 ENCODE CDS 64383972 64384384 . - 2 Parent=gene468 chr11 ENCODE CDS 64398469 64398562 . - 0 Parent=gene468 chr11 ENCODE exon 64398469 64398566 . - . Parent=gene468 chr11 ENCODE exon 64401873 64401965 . - . Parent=gene468 ### chr11 ENCODE gene 64379100 64384093 . - . ID=gene469;Name=AP001187.8-011;name2=EHD1 chr11 ENCODE exon 64379100 64379534 . - . Parent=gene469 chr11 ENCODE exon 64383972 64384093 . - . Parent=gene469 ### chr11 ENCODE gene 64379370 64403747 . - . ID=gene470;name2=EHD1;Name=AP001187.8-007 chr11 ENCODE exon 64379370 64379534 . - . Parent=gene470 chr11 ENCODE CDS 64379370 64379534 . - 0 Parent=gene470 chr11 ENCODE exon 64383972 64384384 . - . Parent=gene470 chr11 ENCODE CDS 64383972 64384384 . - 2 Parent=gene470 chr11 ENCODE exon 64398469 64398566 . - . Parent=gene470 chr11 ENCODE CDS 64398469 64398566 . - 1 Parent=gene470 chr11 ENCODE CDS 64402109 64402512 . - 0 Parent=gene470 chr11 ENCODE exon 64402109 64402535 . - . Parent=gene470 chr11 ENCODE exon 64403660 64403747 . - . Parent=gene470 ### chr11 ENCODE gene 64379767 64380427 . - . ID=gene471;Name=AP001187.8-012;name2=EHD1 chr11 ENCODE exon 64379767 64379910 . - . Parent=gene471 chr11 ENCODE exon 64380007 64380427 . - . Parent=gene471 ### chr11 ENCODE gene 64383674 64402589 . - . ID=gene472;Name=AP001187.8-010;name2=EHD1 chr11 ENCODE exon 64383674 64384384 . - . Parent=gene472 chr11 ENCODE exon 64398469 64398566 . - . Parent=gene472 chr11 ENCODE exon 64402109 64402589 . - . Parent=gene472 ### chr11 ENCODE gene 64383993 64399714 . - . ID=gene473;Name=AP001187.8-013;name2=EHD1 chr11 ENCODE exon 64383993 64384384 . - . Parent=gene473 chr11 ENCODE exon 64398469 64398566 . - . Parent=gene473 chr11 ENCODE exon 64399659 64399714 . - . Parent=gene473 ### chr11 ENCODE gene 64398526 64412344 . - . ID=gene474;Name=AP001187.8-016;name2=EHD1 chr11 ENCODE exon 64398526 64398566 . - . Parent=gene474 chr11 ENCODE CDS 64398526 64398566 . - 1 Parent=gene474 chr11 ENCODE CDS 64402109 64402512 . - 0 Parent=gene474 chr11 ENCODE exon 64402109 64402532 . - . Parent=gene474 chr11 ENCODE exon 64412276 64412344 . - . Parent=gene474 ### chr11 ENCODE gene 64398536 64403748 . - . ID=gene475;Name=AP001187.8-015;name2=EHD1 chr11 ENCODE exon 64398536 64398566 . - . Parent=gene475 chr11 ENCODE CDS 64398536 64398566 . - 1 Parent=gene475 chr11 ENCODE CDS 64402109 64402512 . - 0 Parent=gene475 chr11 ENCODE exon 64402109 64402535 . - . Parent=gene475 chr11 ENCODE exon 64403650 64403748 . - . Parent=gene475 ### chr11 ENCODE gene 64402687 64403729 . - . ID=gene476;Name=AP001187.8-014;name2=EHD1 chr11 ENCODE exon 64402687 64403204 . - . Parent=gene476 chr11 ENCODE exon 64403660 64403729 . - . Parent=gene476 ### chr11 ENCODE gene 64418594 64437443 . - . ID=gene477;Name=AP001187.10-004;name2=AP001187.10 chr11 ENCODE exon 64418594 64419257 . - . Parent=gene477 chr11 ENCODE CDS 64419021 64419257 . - 2 Parent=gene477 chr11 ENCODE exon 64419338 64419490 . - . Parent=gene477 chr11 ENCODE CDS 64419338 64419490 . - 2 Parent=gene477 chr11 ENCODE exon 64420510 64420664 . - . Parent=gene477 chr11 ENCODE CDS 64420510 64420664 . - 1 Parent=gene477 chr11 ENCODE exon 64420796 64420917 . - . Parent=gene477 chr11 ENCODE CDS 64420796 64420917 . - 0 Parent=gene477 chr11 ENCODE exon 64421460 64421542 . - . Parent=gene477 chr11 ENCODE CDS 64421460 64421542 . - 2 Parent=gene477 chr11 ENCODE exon 64421719 64421791 . - . Parent=gene477 chr11 ENCODE CDS 64421719 64421791 . - 0 Parent=gene477 chr11 ENCODE exon 64421887 64422022 . - . Parent=gene477 chr11 ENCODE CDS 64421887 64422022 . - 1 Parent=gene477 chr11 ENCODE exon 64422134 64422218 . - . Parent=gene477 chr11 ENCODE CDS 64422134 64422218 . - 2 Parent=gene477 chr11 ENCODE exon 64422309 64422410 . - . Parent=gene477 chr11 ENCODE CDS 64422309 64422410 . - 2 Parent=gene477 chr11 ENCODE exon 64422684 64422890 . - . Parent=gene477 chr11 ENCODE CDS 64422684 64422890 . - 2 Parent=gene477 chr11 ENCODE exon 64424542 64424677 . - . Parent=gene477 chr11 ENCODE CDS 64424542 64424677 . - 0 Parent=gene477 chr11 ENCODE exon 64424932 64425140 . - . Parent=gene477 chr11 ENCODE CDS 64424932 64425140 . - 2 Parent=gene477 chr11 ENCODE exon 64426010 64426224 . - . Parent=gene477 chr11 ENCODE CDS 64426010 64426224 . - 1 Parent=gene477 chr11 ENCODE exon 64426308 64426434 . - . Parent=gene477 chr11 ENCODE CDS 64426308 64426434 . - 2 Parent=gene477 chr11 ENCODE exon 64426558 64426728 . - . Parent=gene477 chr11 ENCODE CDS 64426558 64426728 . - 2 Parent=gene477 chr11 ENCODE exon 64427336 64427412 . - . Parent=gene477 chr11 ENCODE CDS 64427336 64427412 . - 1 Parent=gene477 chr11 ENCODE exon 64427638 64427708 . - . Parent=gene477 chr11 ENCODE CDS 64427638 64427708 . - 0 Parent=gene477 chr11 ENCODE exon 64429611 64429703 . - . Parent=gene477 chr11 ENCODE CDS 64429611 64429703 . - 0 Parent=gene477 chr11 ENCODE exon 64429790 64429896 . - . Parent=gene477 chr11 ENCODE CDS 64429790 64429896 . - 2 Parent=gene477 chr11 ENCODE exon 64430161 64430241 . - . Parent=gene477 chr11 ENCODE CDS 64430161 64430241 . - 2 Parent=gene477 chr11 ENCODE exon 64430382 64430581 . - . Parent=gene477 chr11 ENCODE CDS 64430382 64430581 . - 1 Parent=gene477 chr11 ENCODE exon 64430713 64430863 . - . Parent=gene477 chr11 ENCODE CDS 64430713 64430863 . - 2 Parent=gene477 chr11 ENCODE exon 64431303 64431487 . - . Parent=gene477 chr11 ENCODE CDS 64431303 64431487 . - 1 Parent=gene477 chr11 ENCODE exon 64431573 64431712 . - . Parent=gene477 chr11 ENCODE CDS 64431573 64431712 . - 0 Parent=gene477 chr11 ENCODE exon 64431796 64431938 . - . Parent=gene477 chr11 ENCODE CDS 64431796 64431938 . - 2 Parent=gene477 chr11 ENCODE exon 64433039 64433198 . - . Parent=gene477 chr11 ENCODE CDS 64433039 64433198 . - 0 Parent=gene477 chr11 ENCODE exon 64433319 64433415 . - . Parent=gene477 chr11 ENCODE CDS 64433319 64433415 . - 1 Parent=gene477 chr11 ENCODE exon 64433729 64433972 . - . Parent=gene477 chr11 ENCODE CDS 64433729 64433972 . - 2 Parent=gene477 chr11 ENCODE exon 64434088 64434243 . - . Parent=gene477 chr11 ENCODE CDS 64434088 64434243 . - 2 Parent=gene477 chr11 ENCODE exon 64434664 64434756 . - . Parent=gene477 chr11 ENCODE CDS 64434664 64434756 . - 2 Parent=gene477 chr11 ENCODE exon 64434855 64435002 . - . Parent=gene477 chr11 ENCODE CDS 64434855 64435002 . - 0 Parent=gene477 chr11 ENCODE exon 64435086 64435323 . - . Parent=gene477 chr11 ENCODE CDS 64435086 64435323 . - 1 Parent=gene477 chr11 ENCODE exon 64435890 64436030 . - . Parent=gene477 chr11 ENCODE CDS 64435890 64436030 . - 1 Parent=gene477 chr11 ENCODE exon 64436133 64436297 . - . Parent=gene477 chr11 ENCODE CDS 64436133 64436297 . - 1 Parent=gene477 chr11 ENCODE exon 64436375 64436471 . - . Parent=gene477 chr11 ENCODE CDS 64436375 64436471 . - 2 Parent=gene477 chr11 ENCODE exon 64437086 64437184 . - . Parent=gene477 chr11 ENCODE CDS 64437086 64437184 . - 2 Parent=gene477 chr11 ENCODE exon 64437314 64437443 . - . Parent=gene477 chr11 ENCODE CDS 64437314 64437443 . - 0 Parent=gene477 ### chr11 ENCODE gene 64418594 64438548 . - . ID=gene478;Name=AP001187.10-002;name2=AP001187.10 chr11 ENCODE exon 64418594 64419257 . - . Parent=gene478 chr11 ENCODE exon 64419338 64419490 . - . Parent=gene478 chr11 ENCODE exon 64420510 64420664 . - . Parent=gene478 chr11 ENCODE exon 64420796 64420917 . - . Parent=gene478 chr11 ENCODE exon 64421460 64421542 . - . Parent=gene478 chr11 ENCODE exon 64421719 64421791 . - . Parent=gene478 chr11 ENCODE exon 64421887 64422022 . - . Parent=gene478 chr11 ENCODE exon 64422134 64422218 . - . Parent=gene478 chr11 ENCODE exon 64422309 64422410 . - . Parent=gene478 chr11 ENCODE exon 64422684 64422890 . - . Parent=gene478 chr11 ENCODE exon 64424542 64424677 . - . Parent=gene478 chr11 ENCODE exon 64424932 64425140 . - . Parent=gene478 chr11 ENCODE exon 64426010 64426224 . - . Parent=gene478 chr11 ENCODE exon 64426308 64426434 . - . Parent=gene478 chr11 ENCODE exon 64426564 64426728 . - . Parent=gene478 chr11 ENCODE exon 64427336 64427412 . - . Parent=gene478 chr11 ENCODE exon 64427638 64427708 . - . Parent=gene478 chr11 ENCODE exon 64429611 64429703 . - . Parent=gene478 chr11 ENCODE exon 64429790 64429896 . - . Parent=gene478 chr11 ENCODE exon 64430161 64430241 . - . Parent=gene478 chr11 ENCODE exon 64430382 64430581 . - . Parent=gene478 chr11 ENCODE exon 64430713 64430863 . - . Parent=gene478 chr11 ENCODE exon 64431303 64431463 . - . Parent=gene478 chr11 ENCODE exon 64431573 64431712 . - . Parent=gene478 chr11 ENCODE exon 64431796 64431938 . - . Parent=gene478 chr11 ENCODE exon 64433039 64433198 . - . Parent=gene478 chr11 ENCODE exon 64433319 64433415 . - . Parent=gene478 chr11 ENCODE exon 64433729 64433972 . - . Parent=gene478 chr11 ENCODE exon 64434088 64434243 . - . Parent=gene478 chr11 ENCODE exon 64434664 64434756 . - . Parent=gene478 chr11 ENCODE exon 64434855 64435002 . - . Parent=gene478 chr11 ENCODE exon 64435086 64435323 . - . Parent=gene478 chr11 ENCODE exon 64435890 64436030 . - . Parent=gene478 chr11 ENCODE exon 64436133 64436297 . - . Parent=gene478 chr11 ENCODE exon 64436375 64436471 . - . Parent=gene478 chr11 ENCODE exon 64437086 64437184 . - . Parent=gene478 chr11 ENCODE exon 64437314 64437449 . - . Parent=gene478 chr11 ENCODE exon 64437869 64437971 . - . Parent=gene478 chr11 ENCODE exon 64438129 64438275 . - . Parent=gene478 chr11 ENCODE exon 64438386 64438548 . - . Parent=gene478 ### chr11 ENCODE gene 64418594 64438548 . - . ID=gene479;Name=AP001187.10-001;name2=AP001187.10 chr11 ENCODE exon 64418594 64419257 . - . Parent=gene479 chr11 ENCODE exon 64419338 64419490 . - . Parent=gene479 chr11 ENCODE exon 64420510 64420664 . - . Parent=gene479 chr11 ENCODE exon 64420796 64420917 . - . Parent=gene479 chr11 ENCODE exon 64421460 64421542 . - . Parent=gene479 chr11 ENCODE exon 64421719 64421791 . - . Parent=gene479 chr11 ENCODE exon 64421887 64422022 . - . Parent=gene479 chr11 ENCODE exon 64422134 64422218 . - . Parent=gene479 chr11 ENCODE exon 64422309 64422410 . - . Parent=gene479 chr11 ENCODE exon 64422684 64422890 . - . Parent=gene479 chr11 ENCODE exon 64424542 64424677 . - . Parent=gene479 chr11 ENCODE exon 64424932 64425140 . - . Parent=gene479 chr11 ENCODE exon 64426010 64426224 . - . Parent=gene479 chr11 ENCODE exon 64426308 64426434 . - . Parent=gene479 chr11 ENCODE exon 64426564 64426728 . - . Parent=gene479 chr11 ENCODE exon 64427336 64427412 . - . Parent=gene479 chr11 ENCODE exon 64427638 64427708 . - . Parent=gene479 chr11 ENCODE exon 64429611 64429703 . - . Parent=gene479 chr11 ENCODE exon 64429790 64429896 . - . Parent=gene479 chr11 ENCODE exon 64430161 64430241 . - . Parent=gene479 chr11 ENCODE exon 64430382 64430581 . - . Parent=gene479 chr11 ENCODE exon 64430713 64430863 . - . Parent=gene479 chr11 ENCODE exon 64431303 64431487 . - . Parent=gene479 chr11 ENCODE exon 64431573 64431712 . - . Parent=gene479 chr11 ENCODE exon 64431796 64431938 . - . Parent=gene479 chr11 ENCODE exon 64433039 64433198 . - . Parent=gene479 chr11 ENCODE exon 64433319 64433415 . - . Parent=gene479 chr11 ENCODE exon 64433729 64433972 . - . Parent=gene479 chr11 ENCODE exon 64434088 64434243 . - . Parent=gene479 chr11 ENCODE exon 64434664 64434756 . - . Parent=gene479 chr11 ENCODE exon 64434855 64435002 . - . Parent=gene479 chr11 ENCODE exon 64435086 64435323 . - . Parent=gene479 chr11 ENCODE exon 64435890 64436030 . - . Parent=gene479 chr11 ENCODE exon 64436133 64436297 . - . Parent=gene479 chr11 ENCODE exon 64436375 64436471 . - . Parent=gene479 chr11 ENCODE exon 64437086 64437184 . - . Parent=gene479 chr11 ENCODE exon 64437314 64437449 . - . Parent=gene479 chr11 ENCODE exon 64437869 64437971 . - . Parent=gene479 chr11 ENCODE exon 64438129 64438281 . - . Parent=gene479 chr11 ENCODE exon 64438386 64438548 . - . Parent=gene479 ### chr11 ENCODE gene 64421088 64421778 . - . ID=gene480;Name=AP001187.10-005;name2=AP001187.10 chr11 ENCODE exon 64421088 64421542 . - . Parent=gene480 chr11 ENCODE exon 64421719 64421778 . - . Parent=gene480 ### chr11 ENCODE gene 64436659 64438548 . - . ID=gene481;Name=AP001187.10-003;name2=AP001187.10 chr11 ENCODE exon 64436659 64437184 . - . Parent=gene481 chr11 ENCODE exon 64437314 64438548 . - . Parent=gene481 ### chr11 ENCODE gene 64438244 64438548 . - . ID=gene482;Name=AP001187.10-006;name2=AP001187.10 chr11 ENCODE exon 64438244 64438548 . - . Parent=gene482 ### chr11 ENCODE gene 116124096 116138762 . - . ID=gene483;Name=AP006216.1-003;name2=BUD13 chr11 ENCODE exon 116124096 116124501 . - . Parent=gene483 chr11 ENCODE CDS 116124408 116124501 . - 2 Parent=gene483 chr11 ENCODE exon 116133072 116133153 . - . Parent=gene483 chr11 ENCODE CDS 116133072 116133153 . - 0 Parent=gene483 chr11 ENCODE exon 116133692 116133866 . - . Parent=gene483 chr11 ENCODE CDS 116133692 116133866 . - 1 Parent=gene483 chr11 ENCODE exon 116138479 116138762 . - . Parent=gene483 chr11 ENCODE CDS 116138479 116138762 . - 0 Parent=gene483 ### chr11 ENCODE gene 116124096 116148913 . - . ID=gene484;Name=AP006216.1-002;name2=BUD13 chr11 ENCODE exon 116124096 116124501 . - . Parent=gene484 chr11 ENCODE CDS 116124408 116124501 . - 1 Parent=gene484 chr11 ENCODE exon 116133072 116133153 . - . Parent=gene484 chr11 ENCODE CDS 116133072 116133153 . - 2 Parent=gene484 chr11 ENCODE exon 116133692 116133876 . - . Parent=gene484 chr11 ENCODE CDS 116133692 116133876 . - 1 Parent=gene484 chr11 ENCODE exon 116134195 116134333 . - . Parent=gene484 chr11 ENCODE CDS 116134195 116134333 . - 2 Parent=gene484 chr11 ENCODE exon 116135000 116135105 . - . Parent=gene484 chr11 ENCODE CDS 116135000 116135105 . - 0 Parent=gene484 chr11 ENCODE exon 116136661 116136878 . - . Parent=gene484 chr11 ENCODE CDS 116136661 116136878 . - 2 Parent=gene484 chr11 ENCODE exon 116138881 116139192 . - . Parent=gene484 chr11 ENCODE CDS 116138881 116139192 . - 2 Parent=gene484 chr11 ENCODE exon 116141288 116141372 . - . Parent=gene484 chr11 ENCODE CDS 116141288 116141372 . - 0 Parent=gene484 chr11 ENCODE exon 116146055 116146148 . - . Parent=gene484 chr11 ENCODE CDS 116146055 116146148 . - 1 Parent=gene484 chr11 ENCODE CDS 116148748 116148890 . - 0 Parent=gene484 chr11 ENCODE exon 116148748 116148913 . - . Parent=gene484 ### chr11 ENCODE gene 116124096 116148914 . - . ID=gene485;Name=AP006216.1-001;name2=BUD13 chr11 ENCODE exon 116124096 116124501 . - . Parent=gene485 chr11 ENCODE CDS 116124408 116124501 . - 1 Parent=gene485 chr11 ENCODE exon 116133072 116133153 . - . Parent=gene485 chr11 ENCODE CDS 116133072 116133153 . - 2 Parent=gene485 chr11 ENCODE exon 116133692 116133876 . - . Parent=gene485 chr11 ENCODE CDS 116133692 116133876 . - 1 Parent=gene485 chr11 ENCODE exon 116134195 116134333 . - . Parent=gene485 chr11 ENCODE CDS 116134195 116134333 . - 2 Parent=gene485 chr11 ENCODE exon 116135000 116135105 . - . Parent=gene485 chr11 ENCODE CDS 116135000 116135105 . - 0 Parent=gene485 chr11 ENCODE exon 116136661 116136878 . - . Parent=gene485 chr11 ENCODE CDS 116136661 116136878 . - 2 Parent=gene485 chr11 ENCODE exon 116138479 116139192 . - . Parent=gene485 chr11 ENCODE CDS 116138479 116139192 . - 2 Parent=gene485 chr11 ENCODE exon 116141288 116141372 . - . Parent=gene485 chr11 ENCODE CDS 116141288 116141372 . - 0 Parent=gene485 chr11 ENCODE exon 116146055 116146148 . - . Parent=gene485 chr11 ENCODE CDS 116146055 116146148 . - 1 Parent=gene485 chr11 ENCODE CDS 116148748 116148890 . - 0 Parent=gene485 chr11 ENCODE exon 116148748 116148914 . - . Parent=gene485 ### chr11 ENCODE gene 116151036 116151802 . - . ID=gene486;Name=AP006216.11-001;name2=AP006216.11 chr11 ENCODE exon 116151036 116151259 . - . Parent=gene486 chr11 ENCODE CDS 116151121 116151259 . - 1 Parent=gene486 chr11 ENCODE CDS 116151429 116151700 . - 0 Parent=gene486 chr11 ENCODE exon 116151429 116151802 . - . Parent=gene486 ### chr11 ENCODE gene 116153646 116163905 . - . ID=gene487;Name=AP006216.3-003;name2=ZNF259 chr11 ENCODE exon 116153646 116154985 . - . Parent=gene487 chr11 ENCODE CDS 116154851 116154985 . - 2 Parent=gene487 chr11 ENCODE exon 116155698 116155763 . - . Parent=gene487 chr11 ENCODE CDS 116155698 116155763 . - 2 Parent=gene487 chr11 ENCODE exon 116158084 116158170 . - . Parent=gene487 chr11 ENCODE CDS 116158084 116158170 . - 2 Parent=gene487 chr11 ENCODE exon 116158845 116158955 . - . Parent=gene487 chr11 ENCODE CDS 116158845 116158955 . - 2 Parent=gene487 chr11 ENCODE exon 116159456 116159545 . - . Parent=gene487 chr11 ENCODE CDS 116159456 116159545 . - 2 Parent=gene487 chr11 ENCODE exon 116160304 116160374 . - . Parent=gene487 chr11 ENCODE CDS 116160304 116160374 . - 1 Parent=gene487 chr11 ENCODE exon 116160781 116160847 . - . Parent=gene487 chr11 ENCODE CDS 116160781 116160847 . - 2 Parent=gene487 chr11 ENCODE exon 116161440 116161562 . - . Parent=gene487 chr11 ENCODE CDS 116161440 116161562 . - 2 Parent=gene487 chr11 ENCODE exon 116161722 116161808 . - . Parent=gene487 chr11 ENCODE CDS 116161722 116161808 . - 2 Parent=gene487 chr11 ENCODE exon 116162437 116162507 . - . Parent=gene487 chr11 ENCODE CDS 116162437 116162507 . - 1 Parent=gene487 chr11 ENCODE exon 116162895 116162985 . - . Parent=gene487 chr11 ENCODE CDS 116162895 116162985 . - 2 Parent=gene487 chr11 ENCODE exon 116163746 116163905 . - . Parent=gene487 chr11 ENCODE CDS 116163746 116163905 . - 0 Parent=gene487 ### chr11 ENCODE gene 116153646 116163915 . - . ID=gene488;name2=ZNF259;Name=AP006216.3-002 chr11 ENCODE exon 116153646 116154985 . - . Parent=gene488 chr11 ENCODE CDS 116154851 116154985 . - 1 Parent=gene488 chr11 ENCODE exon 116155698 116155763 . - . Parent=gene488 chr11 ENCODE CDS 116155698 116155763 . - 1 Parent=gene488 chr11 ENCODE exon 116158845 116158955 . - . Parent=gene488 chr11 ENCODE CDS 116158845 116158955 . - 1 Parent=gene488 chr11 ENCODE exon 116159456 116159545 . - . Parent=gene488 chr11 ENCODE CDS 116159456 116159545 . - 1 Parent=gene488 chr11 ENCODE exon 116160304 116160374 . - . Parent=gene488 chr11 ENCODE CDS 116160304 116160374 . - 0 Parent=gene488 chr11 ENCODE exon 116160781 116160847 . - . Parent=gene488 chr11 ENCODE CDS 116160781 116160847 . - 1 Parent=gene488 chr11 ENCODE exon 116161025 116161072 . - . Parent=gene488 chr11 ENCODE CDS 116161025 116161072 . - 1 Parent=gene488 chr11 ENCODE exon 116161440 116161562 . - . Parent=gene488 chr11 ENCODE CDS 116161440 116161562 . - 1 Parent=gene488 chr11 ENCODE exon 116161722 116161808 . - . Parent=gene488 chr11 ENCODE CDS 116161722 116161808 . - 1 Parent=gene488 chr11 ENCODE exon 116162437 116162507 . - . Parent=gene488 chr11 ENCODE CDS 116162437 116162507 . - 0 Parent=gene488 chr11 ENCODE exon 116162895 116162985 . - . Parent=gene488 chr11 ENCODE CDS 116162895 116162985 . - 1 Parent=gene488 chr11 ENCODE exon 116163408 116163569 . - . Parent=gene488 chr11 ENCODE CDS 116163408 116163569 . - 1 Parent=gene488 chr11 ENCODE exon 116163746 116163915 . - . Parent=gene488 chr11 ENCODE CDS 116163746 116163915 . - 0 Parent=gene488 ### chr11 ENCODE gene 116153646 116163976 . - . ID=gene489;Name=AP006216.3-001;name2=ZNF259 chr11 ENCODE exon 116153646 116154985 . - . Parent=gene489 chr11 ENCODE CDS 116154851 116154985 . - 0 Parent=gene489 chr11 ENCODE exon 116155698 116155763 . - . Parent=gene489 chr11 ENCODE CDS 116155698 116155763 . - 0 Parent=gene489 chr11 ENCODE exon 116158084 116158170 . - . Parent=gene489 chr11 ENCODE CDS 116158084 116158170 . - 0 Parent=gene489 chr11 ENCODE exon 116158845 116158955 . - . Parent=gene489 chr11 ENCODE CDS 116158845 116158955 . - 0 Parent=gene489 chr11 ENCODE exon 116159456 116159545 . - . Parent=gene489 chr11 ENCODE CDS 116159456 116159545 . - 0 Parent=gene489 chr11 ENCODE exon 116160304 116160374 . - . Parent=gene489 chr11 ENCODE CDS 116160304 116160374 . - 2 Parent=gene489 chr11 ENCODE exon 116160781 116160847 . - . Parent=gene489 chr11 ENCODE CDS 116160781 116160847 . - 0 Parent=gene489 chr11 ENCODE exon 116161025 116161072 . - . Parent=gene489 chr11 ENCODE CDS 116161025 116161072 . - 0 Parent=gene489 chr11 ENCODE exon 116161440 116161562 . - . Parent=gene489 chr11 ENCODE CDS 116161440 116161562 . - 0 Parent=gene489 chr11 ENCODE exon 116161722 116161808 . - . Parent=gene489 chr11 ENCODE CDS 116161722 116161808 . - 0 Parent=gene489 chr11 ENCODE exon 116162437 116162507 . - . Parent=gene489 chr11 ENCODE CDS 116162437 116162507 . - 2 Parent=gene489 chr11 ENCODE exon 116162895 116162985 . - . Parent=gene489 chr11 ENCODE CDS 116162895 116162985 . - 0 Parent=gene489 chr11 ENCODE exon 116163408 116163569 . - . Parent=gene489 chr11 ENCODE CDS 116163408 116163569 . - 0 Parent=gene489 chr11 ENCODE CDS 116163746 116163916 . - 0 Parent=gene489 chr11 ENCODE exon 116163746 116163976 . - . Parent=gene489 ### chr11 ENCODE gene 116158084 116161769 . - . ID=gene490;Name=AP006216.3-005;name2=ZNF259 chr11 ENCODE exon 116158084 116158170 . - . Parent=gene490 chr11 ENCODE exon 116158845 116158955 . - . Parent=gene490 chr11 ENCODE exon 116159456 116159545 . - . Parent=gene490 chr11 ENCODE exon 116160304 116160424 . - . Parent=gene490 chr11 ENCODE exon 116160785 116160847 . - . Parent=gene490 chr11 ENCODE exon 116161025 116161072 . - . Parent=gene490 chr11 ENCODE exon 116161440 116161562 . - . Parent=gene490 chr11 ENCODE exon 116161722 116161769 . - . Parent=gene490 ### chr11 ENCODE gene 116161504 116163824 . - . ID=gene491;Name=AP006216.3-006;name2=ZNF259 chr11 ENCODE exon 116161504 116161562 . - . Parent=gene491 chr11 ENCODE exon 116161722 116161808 . - . Parent=gene491 chr11 ENCODE exon 116162437 116162507 . - . Parent=gene491 chr11 ENCODE exon 116162895 116162985 . - . Parent=gene491 chr11 ENCODE exon 116163408 116163528 . - . Parent=gene491 chr11 ENCODE exon 116163746 116163824 . - . Parent=gene491 ### chr11 ENCODE gene 116161722 116163965 . - . ID=gene492;Name=AP006216.3-004;name2=ZNF259 chr11 ENCODE exon 116161722 116161808 . - . Parent=gene492 chr11 ENCODE exon 116162437 116162507 . - . Parent=gene492 chr11 ENCODE exon 116162895 116162985 . - . Parent=gene492 chr11 ENCODE exon 116163408 116163569 . - . Parent=gene492 chr11 ENCODE exon 116163774 116163965 . - . Parent=gene492 ### chr11 ENCODE gene 116162451 116163262 . - . ID=gene493;Name=AP006216.3-008;name2=ZNF259 chr11 ENCODE exon 116162451 116162507 . - . Parent=gene493 chr11 ENCODE exon 116162895 116163262 . - . Parent=gene493 ### chr11 ENCODE gene 116162938 116163913 . - . ID=gene494;Name=AP006216.3-007;name2=ZNF259 chr11 ENCODE exon 116162938 116162985 . - . Parent=gene494 chr11 ENCODE exon 116163408 116163913 . - . Parent=gene494 ### chr11 ENCODE gene 116165293 116167821 . - . ID=gene495;Name=AP006216.4-001;name2=APOA5 chr11 ENCODE exon 116165293 116166993 . - . Parent=gene495 chr11 ENCODE CDS 116166054 116166993 . - 1 Parent=gene495 chr11 ENCODE exon 116167512 116167623 . - . Parent=gene495 chr11 ENCODE CDS 116167512 116167623 . - 2 Parent=gene495 chr11 ENCODE CDS 116167738 116167786 . - 0 Parent=gene495 chr11 ENCODE exon 116167738 116167821 . - . Parent=gene495 ### chr11 ENCODE gene 116166669 116168337 . - . ID=gene496;Name=AP006216.4-002;name2=APOA5 chr11 ENCODE exon 116166669 116166993 . - . Parent=gene496 chr11 ENCODE CDS 116166669 116166993 . - 1 Parent=gene496 chr11 ENCODE exon 116167512 116167623 . - . Parent=gene496 chr11 ENCODE CDS 116167512 116167623 . - 2 Parent=gene496 chr11 ENCODE CDS 116167738 116167786 . - 0 Parent=gene496 chr11 ENCODE exon 116167738 116167794 . - . Parent=gene496 chr11 ENCODE exon 116168306 116168337 . - . Parent=gene496 ### chr11 ENCODE gene 116196629 116199232 . - . ID=gene497;Name=AP006216.6-001;name2=APOA4 chr11 ENCODE exon 116196629 116197807 . - . Parent=gene497 chr11 ENCODE CDS 116196793 116197807 . - 1 Parent=gene497 chr11 ENCODE exon 116198585 116198711 . - . Parent=gene497 chr11 ENCODE CDS 116198585 116198711 . - 2 Parent=gene497 chr11 ENCODE CDS 116199069 116199117 . - 0 Parent=gene497 chr11 ENCODE exon 116199069 116199232 . - . Parent=gene497 ### chr11 ENCODE gene 116205632 116206808 . + . ID=gene498;name2=APOC3;Name=AP006216.7-002 chr11 ENCODE exon 116205632 116205812 . + . Parent=gene498 chr11 ENCODE exon 116206496 116206563 . + . Parent=gene498 chr11 ENCODE CDS 116206509 116206563 . + 0 Parent=gene498 chr11 ENCODE exon 116206699 116206808 . + . Parent=gene498 chr11 ENCODE CDS 116206699 116206808 . + 2 Parent=gene498 ### chr11 ENCODE gene 116205818 116208998 . + . ID=gene499;Name=AP006216.7-001;name2=APOC3 chr11 ENCODE exon 116205818 116205866 . + . Parent=gene499 chr11 ENCODE exon 116206496 116206563 . + . Parent=gene499 chr11 ENCODE CDS 116206509 116206563 . + 0 Parent=gene499 chr11 ENCODE exon 116206699 116206822 . + . Parent=gene499 chr11 ENCODE CDS 116206699 116206822 . + 2 Parent=gene499 chr11 ENCODE CDS 116208690 116208810 . + 1 Parent=gene499 chr11 ENCODE exon 116208690 116208998 . + . Parent=gene499 ### chr11 ENCODE gene 116205841 116208998 . + . ID=gene500;Name=AP006216.7-003;name2=APOC3 chr11 ENCODE exon 116205841 116205866 . + . Parent=gene500 chr11 ENCODE exon 116206419 116206563 . + . Parent=gene500 chr11 ENCODE CDS 116206455 116206563 . + 0 Parent=gene500 chr11 ENCODE exon 116206699 116206822 . + . Parent=gene500 chr11 ENCODE CDS 116206699 116206822 . + 2 Parent=gene500 chr11 ENCODE CDS 116208690 116208810 . + 1 Parent=gene500 chr11 ENCODE exon 116208690 116208998 . + . Parent=gene500 ### chr11 ENCODE gene 116205848 116207026 . + . ID=gene501;Name=AP006216.7-004;name2=APOC3 chr11 ENCODE exon 116205848 116205866 . + . Parent=gene501 chr11 ENCODE exon 116206496 116206563 . + . Parent=gene501 chr11 ENCODE exon 116206699 116206822 . + . Parent=gene501 chr11 ENCODE exon 116206969 116207026 . + . Parent=gene501 ### chr11 ENCODE gene 116211677 116213512 . - . ID=gene502;Name=AP006216.8-002;name2=APOA1 chr11 ENCODE exon 116211677 116212337 . - . Parent=gene502 chr11 ENCODE CDS 116211734 116212337 . - 1 Parent=gene502 chr11 ENCODE exon 116212927 116213083 . - . Parent=gene502 chr11 ENCODE CDS 116212927 116213083 . - 2 Parent=gene502 chr11 ENCODE CDS 116213271 116213313 . - 0 Parent=gene502 chr11 ENCODE exon 116213271 116213333 . - . Parent=gene502 chr11 ENCODE exon 116213454 116213512 . - . Parent=gene502 ### chr11 ENCODE gene 116211677 116213535 . - . ID=gene503;Name=AP006216.8-004;name2=APOA1 chr11 ENCODE exon 116211677 116212337 . - . Parent=gene503 chr11 ENCODE CDS 116211734 116212337 . - 1 Parent=gene503 chr11 ENCODE exon 116212927 116213083 . - . Parent=gene503 chr11 ENCODE CDS 116212927 116213083 . - 2 Parent=gene503 chr11 ENCODE CDS 116213271 116213313 . - 0 Parent=gene503 chr11 ENCODE exon 116213271 116213333 . - . Parent=gene503 chr11 ENCODE exon 116213485 116213535 . - . Parent=gene503 ### chr11 ENCODE gene 116211677 116213536 . - . ID=gene504;Name=AP006216.8-005;name2=APOA1 chr11 ENCODE exon 116211677 116212337 . - . Parent=gene504 chr11 ENCODE CDS 116211734 116212337 . - 1 Parent=gene504 chr11 ENCODE CDS 116213271 116213404 . - 0 Parent=gene504 chr11 ENCODE exon 116213271 116213536 . - . Parent=gene504 ### chr11 ENCODE gene 116211677 116213540 . - . ID=gene505;Name=AP006216.8-003;name2=APOA1 chr11 ENCODE exon 116211677 116212337 . - . Parent=gene505 chr11 ENCODE CDS 116211734 116212337 . - 1 Parent=gene505 chr11 ENCODE exon 116212927 116213083 . - . Parent=gene505 chr11 ENCODE CDS 116212927 116213083 . - 2 Parent=gene505 chr11 ENCODE CDS 116213271 116213313 . - 0 Parent=gene505 chr11 ENCODE exon 116213271 116213540 . - . Parent=gene505 ### chr11 ENCODE gene 116211677 116213876 . - . ID=gene506;Name=AP006216.8-001;name2=APOA1 chr11 ENCODE exon 116211677 116212337 . - . Parent=gene506 chr11 ENCODE CDS 116211734 116212337 . - 1 Parent=gene506 chr11 ENCODE exon 116212927 116213083 . - . Parent=gene506 chr11 ENCODE CDS 116212927 116213083 . - 2 Parent=gene506 chr11 ENCODE CDS 116213271 116213313 . - 0 Parent=gene506 chr11 ENCODE exon 116213271 116213333 . - . Parent=gene506 chr11 ENCODE exon 116213531 116213876 . - . Parent=gene506 ### chr11 ENCODE gene 116219328 116246177 . - . ID=gene507;Name=AP006216.9-004;name2=AP006216.9 chr11 ENCODE exon 116219328 116221555 . - . Parent=gene507 chr11 ENCODE exon 116222309 116222479 . - . Parent=gene507 chr11 ENCODE exon 116223402 116223534 . - . Parent=gene507 chr11 ENCODE exon 116225046 116225209 . - . Parent=gene507 chr11 ENCODE exon 116233736 116234445 . - . Parent=gene507 chr11 ENCODE exon 116235191 116235530 . - . Parent=gene507 chr11 ENCODE exon 116237767 116237852 . - . Parent=gene507 chr11 ENCODE exon 116238128 116238253 . - . Parent=gene507 chr11 ENCODE exon 116239594 116239744 . - . Parent=gene507 chr11 ENCODE exon 116246067 116246177 . - . Parent=gene507 ### chr11 ENCODE gene 116219328 116332990 . - . ID=gene508;Name=AP006216.9-002;name2=AP006216.9 chr11 ENCODE exon 116219328 116221555 . - . Parent=gene508 chr11 ENCODE exon 116222309 116222479 . - . Parent=gene508 chr11 ENCODE exon 116223402 116223534 . - . Parent=gene508 chr11 ENCODE exon 116225046 116225209 . - . Parent=gene508 chr11 ENCODE exon 116233736 116234625 . - . Parent=gene508 chr11 ENCODE exon 116235191 116235530 . - . Parent=gene508 chr11 ENCODE exon 116237200 116237309 . - . Parent=gene508 chr11 ENCODE exon 116237767 116237852 . - . Parent=gene508 chr11 ENCODE exon 116238128 116238253 . - . Parent=gene508 chr11 ENCODE exon 116239594 116239744 . - . Parent=gene508 chr11 ENCODE exon 116243872 116244015 . - . Parent=gene508 chr11 ENCODE exon 116246257 116246327 . - . Parent=gene508 chr11 ENCODE exon 116249407 116249562 . - . Parent=gene508 chr11 ENCODE exon 116249829 116249982 . - . Parent=gene508 chr11 ENCODE exon 116251084 116251193 . - . Parent=gene508 chr11 ENCODE exon 116251300 116251377 . - . Parent=gene508 chr11 ENCODE exon 116251792 116251935 . - . Parent=gene508 chr11 ENCODE exon 116252179 116252289 . - . Parent=gene508 chr11 ENCODE exon 116252850 116252968 . - . Parent=gene508 chr11 ENCODE exon 116272179 116272302 . - . Parent=gene508 chr11 ENCODE exon 116273119 116273243 . - . Parent=gene508 chr11 ENCODE exon 116303145 116303306 . - . Parent=gene508 chr11 ENCODE exon 116329970 116330033 . - . Parent=gene508 chr11 ENCODE exon 116332874 116332990 . - . Parent=gene508 ### chr11 ENCODE gene 116219328 116332990 . - . ID=gene509;Name=AP006216.9-001;name2=AP006216.9 chr11 ENCODE exon 116219328 116221555 . - . Parent=gene509 chr11 ENCODE exon 116222309 116222479 . - . Parent=gene509 chr11 ENCODE exon 116223402 116223534 . - . Parent=gene509 chr11 ENCODE exon 116225046 116225209 . - . Parent=gene509 chr11 ENCODE exon 116233736 116234625 . - . Parent=gene509 chr11 ENCODE exon 116235191 116235530 . - . Parent=gene509 chr11 ENCODE exon 116237200 116237309 . - . Parent=gene509 chr11 ENCODE exon 116237767 116237852 . - . Parent=gene509 chr11 ENCODE exon 116238128 116238253 . - . Parent=gene509 chr11 ENCODE exon 116239594 116239744 . - . Parent=gene509 chr11 ENCODE exon 116246257 116246327 . - . Parent=gene509 chr11 ENCODE exon 116249407 116249562 . - . Parent=gene509 chr11 ENCODE exon 116249829 116249982 . - . Parent=gene509 chr11 ENCODE exon 116251084 116251193 . - . Parent=gene509 chr11 ENCODE exon 116251300 116251377 . - . Parent=gene509 chr11 ENCODE exon 116251792 116251935 . - . Parent=gene509 chr11 ENCODE exon 116252179 116252289 . - . Parent=gene509 chr11 ENCODE exon 116252850 116252968 . - . Parent=gene509 chr11 ENCODE exon 116272179 116272302 . - . Parent=gene509 chr11 ENCODE exon 116273119 116273243 . - . Parent=gene509 chr11 ENCODE exon 116303145 116303306 . - . Parent=gene509 chr11 ENCODE exon 116329970 116330033 . - . Parent=gene509 chr11 ENCODE exon 116332874 116332990 . - . Parent=gene509 ### chr11 ENCODE gene 116221110 116225064 . - . ID=gene510;Name=AP006216.9-012;name2=AP006216.9 chr11 ENCODE exon 116221110 116221176 . - . Parent=gene510 chr11 ENCODE exon 116222309 116222383 . - . Parent=gene510 chr11 ENCODE exon 116223402 116223534 . - . Parent=gene510 chr11 ENCODE exon 116225046 116225064 . - . Parent=gene510 ### chr11 ENCODE gene 116221338 116240994 . - . ID=gene511;Name=AP006216.9-005;name2=AP006216.9 chr11 ENCODE exon 116221338 116221555 . - . Parent=gene511 chr11 ENCODE exon 116222309 116222479 . - . Parent=gene511 chr11 ENCODE exon 116223402 116223534 . - . Parent=gene511 chr11 ENCODE exon 116225046 116225209 . - . Parent=gene511 chr11 ENCODE exon 116233736 116234445 . - . Parent=gene511 chr11 ENCODE exon 116235191 116235530 . - . Parent=gene511 chr11 ENCODE exon 116237200 116237309 . - . Parent=gene511 chr11 ENCODE exon 116237767 116237852 . - . Parent=gene511 chr11 ENCODE exon 116238128 116238253 . - . Parent=gene511 chr11 ENCODE exon 116239594 116240994 . - . Parent=gene511 ### chr11 ENCODE gene 116232840 116237310 . - . ID=gene512;Name=AP006216.9-006;name2=AP006216.9 chr11 ENCODE exon 116232840 116234625 . - . Parent=gene512 chr11 ENCODE exon 116235191 116235530 . - . Parent=gene512 chr11 ENCODE exon 116237200 116237310 . - . Parent=gene512 ### chr11 ENCODE gene 116237810 116272302 . - . ID=gene513;Name=AP006216.9-009;name2=AP006216.9 chr11 ENCODE exon 116237810 116237852 . - . Parent=gene513 chr11 ENCODE CDS 116237810 116237852 . - 0 Parent=gene513 chr11 ENCODE exon 116238128 116238253 . - . Parent=gene513 chr11 ENCODE CDS 116238128 116238253 . - 0 Parent=gene513 chr11 ENCODE exon 116239594 116239744 . - . Parent=gene513 chr11 ENCODE CDS 116239594 116239744 . - 1 Parent=gene513 chr11 ENCODE exon 116246257 116246327 . - . Parent=gene513 chr11 ENCODE CDS 116246257 116246327 . - 0 Parent=gene513 chr11 ENCODE exon 116249407 116249562 . - . Parent=gene513 chr11 ENCODE CDS 116249407 116249562 . - 0 Parent=gene513 chr11 ENCODE exon 116249829 116249982 . - . Parent=gene513 chr11 ENCODE CDS 116249829 116249982 . - 1 Parent=gene513 chr11 ENCODE exon 116251084 116251193 . - . Parent=gene513 chr11 ENCODE CDS 116251084 116251193 . - 0 Parent=gene513 chr11 ENCODE exon 116251300 116251377 . - . Parent=gene513 chr11 ENCODE CDS 116251300 116251377 . - 0 Parent=gene513 chr11 ENCODE exon 116252179 116252289 . - . Parent=gene513 chr11 ENCODE CDS 116252179 116252289 . - 0 Parent=gene513 chr11 ENCODE exon 116252850 116252968 . - . Parent=gene513 chr11 ENCODE CDS 116252850 116252968 . - 2 Parent=gene513 chr11 ENCODE exon 116272179 116272302 . - . Parent=gene513 chr11 ENCODE CDS 116272179 116272302 . - 0 Parent=gene513 ### chr11 ENCODE gene 116243614 116249598 . - . ID=gene514;Name=AP006216.9-011;name2=AP006216.9 chr11 ENCODE exon 116243614 116244015 . - . Parent=gene514 chr11 ENCODE exon 116246257 116246327 . - . Parent=gene514 chr11 ENCODE exon 116249407 116249598 . - . Parent=gene514 ### chr11 ENCODE gene 116245450 116332970 . - . ID=gene515;Name=AP006216.9-003;name2=AP006216.9 chr11 ENCODE exon 116245450 116246327 . - . Parent=gene515 chr11 ENCODE exon 116249407 116249562 . - . Parent=gene515 chr11 ENCODE exon 116249829 116249982 . - . Parent=gene515 chr11 ENCODE exon 116251084 116251193 . - . Parent=gene515 chr11 ENCODE exon 116251300 116251377 . - . Parent=gene515 chr11 ENCODE exon 116251792 116251935 . - . Parent=gene515 chr11 ENCODE exon 116252179 116252289 . - . Parent=gene515 chr11 ENCODE exon 116252850 116252968 . - . Parent=gene515 chr11 ENCODE exon 116272179 116272302 . - . Parent=gene515 chr11 ENCODE exon 116273119 116273243 . - . Parent=gene515 chr11 ENCODE exon 116303145 116303306 . - . Parent=gene515 chr11 ENCODE exon 116329970 116330033 . - . Parent=gene515 chr11 ENCODE exon 116332874 116332970 . - . Parent=gene515 ### chr11 ENCODE gene 116249966 116251439 . - . ID=gene516;Name=AP006216.9-010;name2=AP006216.9 chr11 ENCODE exon 116249966 116249982 . - . Parent=gene516 chr11 ENCODE exon 116251084 116251193 . - . Parent=gene516 chr11 ENCODE exon 116251300 116251439 . - . Parent=gene516 ### chr11 ENCODE gene 116269771 116332990 . - . ID=gene517;Name=AP006216.9-008;name2=AP006216.9 chr11 ENCODE exon 116269771 116269893 . - . Parent=gene517 chr11 ENCODE exon 116272179 116272302 . - . Parent=gene517 chr11 ENCODE exon 116273119 116273243 . - . Parent=gene517 chr11 ENCODE exon 116303145 116303306 . - . Parent=gene517 chr11 ENCODE exon 116329970 116330033 . - . Parent=gene517 chr11 ENCODE exon 116332874 116332990 . - . Parent=gene517 ### chr11 ENCODE gene 116280672 116332990 . - . ID=gene518;Name=AP006216.9-007;name2=AP006216.9 chr11 ENCODE exon 116280672 116280929 . - . Parent=gene518 chr11 ENCODE exon 116303145 116303306 . - . Parent=gene518 chr11 ENCODE exon 116329970 116330033 . - . Parent=gene518 chr11 ENCODE exon 116332874 116332990 . - . Parent=gene518 ### chr11 ENCODE gene 130745583 130745993 . + . ID=gene519;name2=HNT;Name=AP004248.3-002 chr11 ENCODE exon 130745583 130745993 . + . Parent=gene519 ### chr11 ENCODE gene 130745731 131036152 . + . ID=gene520;Name=AP004248.3-020;name2=HNT chr11 ENCODE exon 130745731 130745993 . + . Parent=gene520 chr11 ENCODE exon 131036033 131036152 . + . Parent=gene520 ### chr11 ENCODE gene 130745734 131036335 . + . ID=gene521;name2=HNT;Name=AP004248.3-005 chr11 ENCODE exon 130745734 130745993 . + . Parent=gene521 chr11 ENCODE exon 131036033 131036335 . + . Parent=gene521 ### chr11 ENCODE gene 130830567 131036152 . + . ID=gene522;Name=AP004248.3-013;name2=HNT chr11 ENCODE exon 130830567 130830571 . + . Parent=gene522 chr11 ENCODE exon 131036033 131036152 . + . Parent=gene522 ### chr11 ENCODE gene 130957115 131036152 . + . ID=gene523;Name=AP004248.3-014;name2=HNT chr11 ENCODE exon 130957115 130957482 . + . Parent=gene523 chr11 ENCODE exon 131036033 131036152 . + . Parent=gene523 chr11 ENCODE CDS 131036098 131036152 . + 0 Parent=gene523 ### chr12 ENCODE gene 38629559 38786158 . - . ID=gene524;Name=AC121336.1-002;name2=SLC2A13 chr12 ENCODE exon 38629559 38631434 . - . Parent=gene524 chr12 ENCODE CDS 38631286 38631434 . - 2 Parent=gene524 chr12 ENCODE exon 38708370 38708578 . - . Parent=gene524 chr12 ENCODE CDS 38708370 38708578 . - 1 Parent=gene524 chr12 ENCODE exon 38728120 38728279 . - . Parent=gene524 chr12 ENCODE CDS 38728120 38728279 . - 2 Parent=gene524 chr12 ENCODE CDS 38785322 38785877 . - 0 Parent=gene524 chr12 ENCODE exon 38785322 38786158 . - . Parent=gene524 ### chr12 ENCODE gene 38631326 38785928 . - . ID=gene525;Name=AC121336.1-001;name2=SLC2A13 chr12 ENCODE exon 38631326 38631434 . - . Parent=gene525 chr12 ENCODE exon 38708370 38708578 . - . Parent=gene525 chr12 ENCODE exon 38728120 38728279 . - . Parent=gene525 chr12 ENCODE exon 38785322 38785928 . - . Parent=gene525 ### chr12 ENCODE gene 38876813 38964021 . + . ID=gene526;Name=AC084290.1-001;name2=LRRK2 chr12 ENCODE exon 38876813 38876842 . + . Parent=gene526 chr12 ENCODE CDS 38876813 38876842 . + 0 Parent=gene526 chr12 ENCODE exon 38905624 38905709 . + . Parent=gene526 chr12 ENCODE CDS 38905624 38905709 . + 0 Parent=gene526 chr12 ENCODE exon 38912343 38912452 . + . Parent=gene526 chr12 ENCODE CDS 38912343 38912452 . + 1 Parent=gene526 chr12 ENCODE exon 38915695 38915783 . + . Parent=gene526 chr12 ENCODE CDS 38915695 38915783 . + 2 Parent=gene526 chr12 ENCODE exon 38918038 38918172 . + . Parent=gene526 chr12 ENCODE CDS 38918038 38918172 . + 0 Parent=gene526 chr12 ENCODE exon 38923619 38923750 . + . Parent=gene526 chr12 ENCODE CDS 38923619 38923750 . + 0 Parent=gene526 chr12 ENCODE exon 38929895 38930014 . + . Parent=gene526 chr12 ENCODE CDS 38929895 38930014 . + 0 Parent=gene526 chr12 ENCODE exon 38933034 38933085 . + . Parent=gene526 chr12 ENCODE CDS 38933034 38933085 . + 0 Parent=gene526 chr12 ENCODE exon 38939549 38939673 . + . Parent=gene526 chr12 ENCODE CDS 38939549 38939673 . + 2 Parent=gene526 chr12 ENCODE exon 38943858 38943970 . + . Parent=gene526 chr12 ENCODE CDS 38943858 38943970 . + 0 Parent=gene526 chr12 ENCODE exon 38954652 38954796 . + . Parent=gene526 chr12 ENCODE CDS 38954652 38954796 . + 1 Parent=gene526 chr12 ENCODE exon 38954923 38955062 . + . Parent=gene526 chr12 ENCODE CDS 38954923 38955062 . + 0 Parent=gene526 chr12 ENCODE exon 38957957 38958085 . + . Parent=gene526 chr12 ENCODE CDS 38957957 38958085 . + 1 Parent=gene526 chr12 ENCODE exon 38958160 38958330 . + . Parent=gene526 chr12 ENCODE CDS 38958160 38958330 . + 1 Parent=gene526 chr12 ENCODE exon 38963944 38964021 . + . Parent=gene526 chr12 ENCODE CDS 38963944 38964021 . + 1 Parent=gene526 ### chr12 ENCODE gene 38905080 38985045 . + . ID=gene527;Name=AC084290.1-002;name2=LRRK2 chr12 ENCODE exon 38905080 38905351 . + . Parent=gene527 chr12 ENCODE CDS 38905201 38905351 . + 0 Parent=gene527 chr12 ENCODE exon 38905624 38905709 . + . Parent=gene527 chr12 ENCODE CDS 38905624 38905709 . + 2 Parent=gene527 chr12 ENCODE exon 38912343 38912452 . + . Parent=gene527 chr12 ENCODE CDS 38912343 38912452 . + 0 Parent=gene527 chr12 ENCODE exon 38915695 38915783 . + . Parent=gene527 chr12 ENCODE CDS 38915695 38915783 . + 1 Parent=gene527 chr12 ENCODE exon 38918038 38918172 . + . Parent=gene527 chr12 ENCODE CDS 38918038 38918172 . + 2 Parent=gene527 chr12 ENCODE exon 38920552 38920686 . + . Parent=gene527 chr12 ENCODE CDS 38920552 38920686 . + 2 Parent=gene527 chr12 ENCODE exon 38923619 38923750 . + . Parent=gene527 chr12 ENCODE CDS 38923619 38923750 . + 2 Parent=gene527 chr12 ENCODE exon 38929895 38930014 . + . Parent=gene527 chr12 ENCODE CDS 38929895 38930014 . + 2 Parent=gene527 chr12 ENCODE exon 38931301 38931443 . + . Parent=gene527 chr12 ENCODE CDS 38931301 38931443 . + 2 Parent=gene527 chr12 ENCODE exon 38931534 38931613 . + . Parent=gene527 chr12 ENCODE CDS 38931534 38931613 . + 0 Parent=gene527 chr12 ENCODE exon 38932979 38933085 . + . Parent=gene527 chr12 ENCODE CDS 38932979 38933085 . + 1 Parent=gene527 chr12 ENCODE exon 38937317 38937446 . + . Parent=gene527 chr12 ENCODE CDS 38937317 38937446 . + 2 Parent=gene527 chr12 ENCODE exon 38939549 38939673 . + . Parent=gene527 chr12 ENCODE CDS 38939549 38939673 . + 1 Parent=gene527 chr12 ENCODE exon 38943858 38943970 . + . Parent=gene527 chr12 ENCODE CDS 38943858 38943970 . + 2 Parent=gene527 chr12 ENCODE exon 38954652 38954796 . + . Parent=gene527 chr12 ENCODE CDS 38954652 38954796 . + 0 Parent=gene527 chr12 ENCODE exon 38954923 38955062 . + . Parent=gene527 chr12 ENCODE CDS 38954923 38955062 . + 2 Parent=gene527 chr12 ENCODE exon 38957957 38958085 . + . Parent=gene527 chr12 ENCODE CDS 38957957 38958085 . + 0 Parent=gene527 chr12 ENCODE exon 38958160 38958330 . + . Parent=gene527 chr12 ENCODE CDS 38958160 38958330 . + 0 Parent=gene527 chr12 ENCODE exon 38963944 38964202 . + . Parent=gene527 chr12 ENCODE CDS 38963944 38964202 . + 0 Parent=gene527 chr12 ENCODE exon 38967420 38967608 . + . Parent=gene527 chr12 ENCODE CDS 38967420 38967608 . + 2 Parent=gene527 chr12 ENCODE exon 38973614 38973732 . + . Parent=gene527 chr12 ENCODE CDS 38973614 38973732 . + 2 Parent=gene527 chr12 ENCODE exon 38974914 38974983 . + . Parent=gene527 chr12 ENCODE CDS 38974914 38974983 . + 0 Parent=gene527 chr12 ENCODE exon 38975496 38975713 . + . Parent=gene527 chr12 ENCODE CDS 38975496 38975713 . + 2 Parent=gene527 chr12 ENCODE exon 38978312 38978562 . + . Parent=gene527 chr12 ENCODE CDS 38978312 38978562 . + 0 Parent=gene527 chr12 ENCODE exon 38979178 38979326 . + . Parent=gene527 chr12 ENCODE CDS 38979178 38979326 . + 1 Parent=gene527 chr12 ENCODE exon 38982858 38982951 . + . Parent=gene527 chr12 ENCODE CDS 38982858 38982951 . + 2 Parent=gene527 chr12 ENCODE CDS 38984017 38984242 . + 1 Parent=gene527 chr12 ENCODE exon 38984017 38985045 . + . Parent=gene527 ### chr12 ENCODE gene 38905143 39049350 . + . ID=gene528;Name=AC084290.1-004;name2=LRRK2 chr12 ENCODE exon 38905143 38905351 . + . Parent=gene528 chr12 ENCODE CDS 38905201 38905351 . + 0 Parent=gene528 chr12 ENCODE exon 38905624 38905709 . + . Parent=gene528 chr12 ENCODE CDS 38905624 38905709 . + 2 Parent=gene528 chr12 ENCODE exon 38912343 38912452 . + . Parent=gene528 chr12 ENCODE CDS 38912343 38912452 . + 0 Parent=gene528 chr12 ENCODE exon 38915695 38915783 . + . Parent=gene528 chr12 ENCODE CDS 38915695 38915783 . + 1 Parent=gene528 chr12 ENCODE exon 38918038 38918172 . + . Parent=gene528 chr12 ENCODE CDS 38918038 38918172 . + 2 Parent=gene528 chr12 ENCODE exon 38920552 38920686 . + . Parent=gene528 chr12 ENCODE CDS 38920552 38920686 . + 2 Parent=gene528 chr12 ENCODE exon 38923619 38923750 . + . Parent=gene528 chr12 ENCODE CDS 38923619 38923750 . + 2 Parent=gene528 chr12 ENCODE exon 38929895 38930014 . + . Parent=gene528 chr12 ENCODE CDS 38929895 38930014 . + 2 Parent=gene528 chr12 ENCODE exon 38931301 38931443 . + . Parent=gene528 chr12 ENCODE CDS 38931301 38931443 . + 2 Parent=gene528 chr12 ENCODE exon 38931534 38931613 . + . Parent=gene528 chr12 ENCODE CDS 38931534 38931613 . + 0 Parent=gene528 chr12 ENCODE exon 38932979 38933085 . + . Parent=gene528 chr12 ENCODE CDS 38932979 38933085 . + 1 Parent=gene528 chr12 ENCODE exon 38937317 38937446 . + . Parent=gene528 chr12 ENCODE CDS 38937317 38937446 . + 2 Parent=gene528 chr12 ENCODE exon 38939549 38939673 . + . Parent=gene528 chr12 ENCODE CDS 38939549 38939673 . + 1 Parent=gene528 chr12 ENCODE exon 38943858 38943970 . + . Parent=gene528 chr12 ENCODE CDS 38943858 38943970 . + 2 Parent=gene528 chr12 ENCODE exon 38954652 38954796 . + . Parent=gene528 chr12 ENCODE CDS 38954652 38954796 . + 0 Parent=gene528 chr12 ENCODE exon 38954923 38955062 . + . Parent=gene528 chr12 ENCODE CDS 38954923 38955062 . + 2 Parent=gene528 chr12 ENCODE exon 38957957 38958085 . + . Parent=gene528 chr12 ENCODE CDS 38957957 38958085 . + 0 Parent=gene528 chr12 ENCODE exon 38958160 38958330 . + . Parent=gene528 chr12 ENCODE CDS 38958160 38958330 . + 0 Parent=gene528 chr12 ENCODE exon 38963944 38964202 . + . Parent=gene528 chr12 ENCODE CDS 38963944 38964202 . + 0 Parent=gene528 chr12 ENCODE exon 38967420 38967608 . + . Parent=gene528 chr12 ENCODE CDS 38967420 38967608 . + 2 Parent=gene528 chr12 ENCODE exon 38973614 38973732 . + . Parent=gene528 chr12 ENCODE CDS 38973614 38973732 . + 2 Parent=gene528 chr12 ENCODE exon 38974914 38974983 . + . Parent=gene528 chr12 ENCODE CDS 38974914 38974983 . + 0 Parent=gene528 chr12 ENCODE exon 38975496 38975713 . + . Parent=gene528 chr12 ENCODE CDS 38975496 38975713 . + 2 Parent=gene528 chr12 ENCODE exon 38978312 38978562 . + . Parent=gene528 chr12 ENCODE CDS 38978312 38978562 . + 0 Parent=gene528 chr12 ENCODE exon 38979178 38979326 . + . Parent=gene528 chr12 ENCODE CDS 38979178 38979326 . + 1 Parent=gene528 chr12 ENCODE exon 38982858 38982951 . + . Parent=gene528 chr12 ENCODE CDS 38982858 38982951 . + 2 Parent=gene528 chr12 ENCODE exon 38984017 38984203 . + . Parent=gene528 chr12 ENCODE CDS 38984017 38984203 . + 1 Parent=gene528 chr12 ENCODE exon 38985854 38986035 . + . Parent=gene528 chr12 ENCODE CDS 38985854 38986035 . + 0 Parent=gene528 chr12 ENCODE exon 38988536 38988765 . + . Parent=gene528 chr12 ENCODE CDS 38988536 38988765 . + 1 Parent=gene528 chr12 ENCODE exon 38989175 38989302 . + . Parent=gene528 chr12 ENCODE CDS 38989175 38989302 . + 2 Parent=gene528 chr12 ENCODE exon 38990500 38990718 . + . Parent=gene528 chr12 ENCODE CDS 38990500 38990718 . + 0 Parent=gene528 chr12 ENCODE exon 38994041 38994242 . + . Parent=gene528 chr12 ENCODE CDS 38994041 38994242 . + 0 Parent=gene528 chr12 ENCODE exon 38995281 38995369 . + . Parent=gene528 chr12 ENCODE CDS 38995281 38995369 . + 2 Parent=gene528 chr12 ENCODE exon 39000057 39000244 . + . Parent=gene528 chr12 ENCODE CDS 39000057 39000244 . + 0 Parent=gene528 chr12 ENCODE exon 39001103 39001257 . + . Parent=gene528 chr12 ENCODE CDS 39001103 39001257 . + 1 Parent=gene528 chr12 ENCODE exon 39002104 39002250 . + . Parent=gene528 chr12 ENCODE CDS 39002104 39002250 . + 2 Parent=gene528 chr12 ENCODE exon 39002388 39002579 . + . Parent=gene528 chr12 ENCODE CDS 39002388 39002579 . + 2 Parent=gene528 chr12 ENCODE exon 39003229 39003375 . + . Parent=gene528 chr12 ENCODE CDS 39003229 39003375 . + 2 Parent=gene528 chr12 ENCODE exon 39008429 39008529 . + . Parent=gene528 chr12 ENCODE CDS 39008429 39008529 . + 2 Parent=gene528 chr12 ENCODE exon 39015036 39015226 . + . Parent=gene528 chr12 ENCODE CDS 39015036 39015226 . + 0 Parent=gene528 chr12 ENCODE exon 39020363 39020523 . + . Parent=gene528 chr12 ENCODE CDS 39020363 39020523 . + 1 Parent=gene528 chr12 ENCODE exon 39026822 39026992 . + . Parent=gene528 chr12 ENCODE CDS 39026822 39026992 . + 2 Parent=gene528 chr12 ENCODE exon 39028478 39028578 . + . Parent=gene528 chr12 ENCODE CDS 39028478 39028578 . + 2 Parent=gene528 chr12 ENCODE exon 39031608 39031802 . + . Parent=gene528 chr12 ENCODE CDS 39031608 39031802 . + 0 Parent=gene528 chr12 ENCODE exon 39034368 39034561 . + . Parent=gene528 chr12 ENCODE CDS 39034368 39034561 . + 0 Parent=gene528 chr12 ENCODE exon 39036184 39036256 . + . Parent=gene528 chr12 ENCODE CDS 39036184 39036256 . + 1 Parent=gene528 chr12 ENCODE exon 39039329 39039513 . + . Parent=gene528 chr12 ENCODE CDS 39039329 39039513 . + 0 Parent=gene528 chr12 ENCODE exon 39043471 39043623 . + . Parent=gene528 chr12 ENCODE CDS 39043471 39043623 . + 1 Parent=gene528 chr12 ENCODE exon 39044911 39045119 . + . Parent=gene528 chr12 ENCODE CDS 39044911 39045119 . + 1 Parent=gene528 chr12 ENCODE exon 39047075 39047146 . + . Parent=gene528 chr12 ENCODE CDS 39047075 39047146 . + 2 Parent=gene528 chr12 ENCODE CDS 39047713 39047834 . + 2 Parent=gene528 chr12 ENCODE exon 39047713 39049350 . + . Parent=gene528 ### chr12 ENCODE gene 38905664 38912852 . + . ID=gene529;Name=AC084290.1-006;name2=LRRK2 chr12 ENCODE exon 38905664 38905709 . + . Parent=gene529 chr12 ENCODE exon 38912343 38912852 . + . Parent=gene529 ### chr12 ENCODE gene 38975574 39049354 . + . ID=gene530;Name=AC084290.1-005;name2=LRRK2 chr12 ENCODE exon 38975574 38975713 . + . Parent=gene530 chr12 ENCODE exon 38978312 38978562 . + . Parent=gene530 chr12 ENCODE exon 38979178 38979326 . + . Parent=gene530 chr12 ENCODE exon 38980882 38981133 . + . Parent=gene530 chr12 ENCODE exon 38982858 38982951 . + . Parent=gene530 chr12 ENCODE exon 38984017 38984203 . + . Parent=gene530 chr12 ENCODE exon 38985854 38986035 . + . Parent=gene530 chr12 ENCODE exon 38988536 38988765 . + . Parent=gene530 chr12 ENCODE exon 38989175 38989302 . + . Parent=gene530 chr12 ENCODE exon 38990500 38990718 . + . Parent=gene530 chr12 ENCODE exon 38994041 38994242 . + . Parent=gene530 chr12 ENCODE exon 38995281 38995369 . + . Parent=gene530 chr12 ENCODE exon 39000057 39000244 . + . Parent=gene530 chr12 ENCODE exon 39001103 39001257 . + . Parent=gene530 chr12 ENCODE exon 39002104 39002250 . + . Parent=gene530 chr12 ENCODE exon 39002388 39002579 . + . Parent=gene530 chr12 ENCODE exon 39003229 39003375 . + . Parent=gene530 chr12 ENCODE exon 39008429 39008529 . + . Parent=gene530 chr12 ENCODE exon 39015036 39015226 . + . Parent=gene530 chr12 ENCODE exon 39020363 39020523 . + . Parent=gene530 chr12 ENCODE exon 39026822 39026992 . + . Parent=gene530 chr12 ENCODE exon 39028478 39028578 . + . Parent=gene530 chr12 ENCODE exon 39031608 39031802 . + . Parent=gene530 chr12 ENCODE exon 39034368 39034561 . + . Parent=gene530 chr12 ENCODE exon 39036184 39036256 . + . Parent=gene530 chr12 ENCODE exon 39039329 39039513 . + . Parent=gene530 chr12 ENCODE exon 39043471 39043623 . + . Parent=gene530 chr12 ENCODE exon 39044911 39045119 . + . Parent=gene530 chr12 ENCODE exon 39047075 39047146 . + . Parent=gene530 chr12 ENCODE exon 39047713 39049354 . + . Parent=gene530 ### chr12 ENCODE gene 38978535 39049354 . + . ID=gene531;Name=AC084290.1-003;name2=LRRK2 chr12 ENCODE exon 38978535 38978562 . + . Parent=gene531 chr12 ENCODE CDS 38978535 38978562 . + 0 Parent=gene531 chr12 ENCODE exon 38979178 38979326 . + . Parent=gene531 chr12 ENCODE CDS 38979178 38979326 . + 2 Parent=gene531 chr12 ENCODE exon 38982858 38982951 . + . Parent=gene531 chr12 ENCODE CDS 38982858 38982951 . + 0 Parent=gene531 chr12 ENCODE exon 38984017 38984203 . + . Parent=gene531 chr12 ENCODE CDS 38984017 38984203 . + 2 Parent=gene531 chr12 ENCODE exon 38985854 38986035 . + . Parent=gene531 chr12 ENCODE CDS 38985854 38986035 . + 1 Parent=gene531 chr12 ENCODE exon 38988536 38988765 . + . Parent=gene531 chr12 ENCODE CDS 38988536 38988765 . + 2 Parent=gene531 chr12 ENCODE exon 38989175 38989302 . + . Parent=gene531 chr12 ENCODE CDS 38989175 38989302 . + 0 Parent=gene531 chr12 ENCODE exon 38990500 38990718 . + . Parent=gene531 chr12 ENCODE CDS 38990500 38990718 . + 1 Parent=gene531 chr12 ENCODE exon 38994041 38994242 . + . Parent=gene531 chr12 ENCODE CDS 38994041 38994242 . + 1 Parent=gene531 chr12 ENCODE exon 38995281 38995369 . + . Parent=gene531 chr12 ENCODE CDS 38995281 38995369 . + 0 Parent=gene531 chr12 ENCODE exon 39000057 39000244 . + . Parent=gene531 chr12 ENCODE CDS 39000057 39000244 . + 1 Parent=gene531 chr12 ENCODE exon 39001103 39001257 . + . Parent=gene531 chr12 ENCODE CDS 39001103 39001257 . + 2 Parent=gene531 chr12 ENCODE exon 39002104 39002250 . + . Parent=gene531 chr12 ENCODE CDS 39002104 39002250 . + 0 Parent=gene531 chr12 ENCODE exon 39002388 39002579 . + . Parent=gene531 chr12 ENCODE CDS 39002388 39002579 . + 0 Parent=gene531 chr12 ENCODE exon 39003229 39003375 . + . Parent=gene531 chr12 ENCODE CDS 39003229 39003375 . + 0 Parent=gene531 chr12 ENCODE exon 39008429 39008529 . + . Parent=gene531 chr12 ENCODE CDS 39008429 39008529 . + 0 Parent=gene531 chr12 ENCODE exon 39015036 39015226 . + . Parent=gene531 chr12 ENCODE CDS 39015036 39015226 . + 1 Parent=gene531 chr12 ENCODE exon 39020363 39020523 . + . Parent=gene531 chr12 ENCODE CDS 39020363 39020523 . + 2 Parent=gene531 chr12 ENCODE exon 39026822 39026992 . + . Parent=gene531 chr12 ENCODE CDS 39026822 39026992 . + 0 Parent=gene531 chr12 ENCODE exon 39028478 39028578 . + . Parent=gene531 chr12 ENCODE CDS 39028478 39028578 . + 0 Parent=gene531 chr12 ENCODE exon 39031608 39031802 . + . Parent=gene531 chr12 ENCODE CDS 39031608 39031802 . + 1 Parent=gene531 chr12 ENCODE exon 39034368 39034561 . + . Parent=gene531 chr12 ENCODE CDS 39034368 39034561 . + 1 Parent=gene531 chr12 ENCODE exon 39036184 39036256 . + . Parent=gene531 chr12 ENCODE CDS 39036184 39036256 . + 2 Parent=gene531 chr12 ENCODE exon 39039329 39039513 . + . Parent=gene531 chr12 ENCODE CDS 39039329 39039513 . + 1 Parent=gene531 chr12 ENCODE exon 39043471 39043623 . + . Parent=gene531 chr12 ENCODE CDS 39043471 39043623 . + 2 Parent=gene531 chr12 ENCODE CDS 39044911 39045202 . + 2 Parent=gene531 chr12 ENCODE exon 39044911 39049354 . + . Parent=gene531 ### chr12 ENCODE gene 38992783 39000131 . + . ID=gene532;Name=AC084290.1-007;name2=LRRK2 chr12 ENCODE exon 38992783 38992977 . + . Parent=gene532 chr12 ENCODE exon 38994041 38994242 . + . Parent=gene532 chr12 ENCODE exon 38995281 38995369 . + . Parent=gene532 chr12 ENCODE exon 39000057 39000131 . + . Parent=gene532 ### chr12 ENCODE gene 39073464 39125713 . + . ID=gene533;name2=MUC19;Name=AC079630.3-001 chr12 ENCODE exon 39073464 39073568 . + . Parent=gene533 chr12 ENCODE exon 39077948 39077980 . + . Parent=gene533 chr12 ENCODE exon 39091676 39091696 . + . Parent=gene533 chr12 ENCODE exon 39092102 39092251 . + . Parent=gene533 chr12 ENCODE exon 39098199 39098249 . + . Parent=gene533 chr12 ENCODE exon 39099243 39099302 . + . Parent=gene533 chr12 ENCODE exon 39100276 39100504 . + . Parent=gene533 chr12 ENCODE exon 39101275 39101392 . + . Parent=gene533 chr12 ENCODE exon 39101909 39101969 . + . Parent=gene533 chr12 ENCODE exon 39102173 39102270 . + . Parent=gene533 chr12 ENCODE exon 39106476 39106686 . + . Parent=gene533 chr12 ENCODE exon 39107443 39107565 . + . Parent=gene533 chr12 ENCODE exon 39108039 39108162 . + . Parent=gene533 chr12 ENCODE exon 39109611 39109746 . + . Parent=gene533 chr12 ENCODE exon 39111695 39111787 . + . Parent=gene533 chr12 ENCODE exon 39112447 39112531 . + . Parent=gene533 chr12 ENCODE exon 39112696 39112833 . + . Parent=gene533 chr12 ENCODE exon 39113833 39113982 . + . Parent=gene533 chr12 ENCODE exon 39116166 39116260 . + . Parent=gene533 chr12 ENCODE exon 39116686 39116812 . + . Parent=gene533 chr12 ENCODE exon 39118197 39118443 . + . Parent=gene533 chr12 ENCODE exon 39120643 39120695 . + . Parent=gene533 chr12 ENCODE exon 39120793 39120893 . + . Parent=gene533 chr12 ENCODE exon 39121130 39121281 . + . Parent=gene533 chr12 ENCODE exon 39121941 39122079 . + . Parent=gene533 chr12 ENCODE exon 39123145 39123249 . + . Parent=gene533 chr12 ENCODE exon 39123335 39123529 . + . Parent=gene533 chr12 ENCODE exon 39124146 39124385 . + . Parent=gene533 chr12 ENCODE exon 39124458 39124614 . + . Parent=gene533 chr12 ENCODE exon 39125588 39125713 . + . Parent=gene533 ### chr12 ENCODE gene 39098246 39106570 . + . ID=gene534;Name=AC079630.3-002;name2=MUC19 chr12 ENCODE exon 39098246 39098249 . + . Parent=gene534 chr12 ENCODE exon 39099243 39099302 . + . Parent=gene534 chr12 ENCODE exon 39100276 39100504 . + . Parent=gene534 chr12 ENCODE exon 39101282 39101392 . + . Parent=gene534 chr12 ENCODE exon 39101909 39101969 . + . Parent=gene534 chr12 ENCODE exon 39102173 39102270 . + . Parent=gene534 chr12 ENCODE exon 39106476 39106570 . + . Parent=gene534 ### chr13 ENCODE gene 29419740 29422625 . + . ID=gene535;name2=RP11-90M5.1;Name=RP11-90M5.1-001 chr13 ENCODE exon 29419740 29419908 . + . Parent=gene535 chr13 ENCODE exon 29422454 29422625 . + . Parent=gene535 ### chr13 ENCODE gene 29674767 29779621 . - . ID=gene536;Name=RP11-374F3.1-001;name2=KATNAL1 chr13 ENCODE exon 29674767 29680875 . - . Parent=gene536 chr13 ENCODE CDS 29680677 29680875 . - 1 Parent=gene536 chr13 ENCODE exon 29682453 29682579 . - . Parent=gene536 chr13 ENCODE CDS 29682453 29682579 . - 2 Parent=gene536 chr13 ENCODE exon 29699549 29699683 . - . Parent=gene536 chr13 ENCODE CDS 29699549 29699683 . - 2 Parent=gene536 chr13 ENCODE exon 29702605 29702731 . - . Parent=gene536 chr13 ENCODE CDS 29702605 29702731 . - 0 Parent=gene536 chr13 ENCODE exon 29703451 29703609 . - . Parent=gene536 chr13 ENCODE CDS 29703451 29703609 . - 0 Parent=gene536 chr13 ENCODE exon 29712597 29712702 . - . Parent=gene536 chr13 ENCODE CDS 29712597 29712702 . - 1 Parent=gene536 chr13 ENCODE exon 29713096 29713223 . - . Parent=gene536 chr13 ENCODE CDS 29713096 29713223 . - 0 Parent=gene536 chr13 ENCODE exon 29727584 29727752 . - . Parent=gene536 chr13 ENCODE CDS 29727584 29727752 . - 1 Parent=gene536 chr13 ENCODE exon 29752200 29752360 . - . Parent=gene536 chr13 ENCODE CDS 29752200 29752360 . - 0 Parent=gene536 chr13 ENCODE CDS 29755753 29755914 . - 0 Parent=gene536 chr13 ENCODE exon 29755753 29755928 . - . Parent=gene536 chr13 ENCODE exon 29779468 29779621 . - . Parent=gene536 ### chr13 ENCODE gene 29680617 29779163 . - . ID=gene537;Name=RP11-374F3.1-002;name2=KATNAL1 chr13 ENCODE exon 29680617 29680875 . - . Parent=gene537 chr13 ENCODE CDS 29680677 29680875 . - 1 Parent=gene537 chr13 ENCODE exon 29682453 29682579 . - . Parent=gene537 chr13 ENCODE CDS 29682453 29682579 . - 2 Parent=gene537 chr13 ENCODE exon 29699549 29699683 . - . Parent=gene537 chr13 ENCODE CDS 29699549 29699683 . - 2 Parent=gene537 chr13 ENCODE exon 29702605 29702731 . - . Parent=gene537 chr13 ENCODE CDS 29702605 29702731 . - 0 Parent=gene537 chr13 ENCODE exon 29703451 29703609 . - . Parent=gene537 chr13 ENCODE CDS 29703451 29703609 . - 0 Parent=gene537 chr13 ENCODE exon 29712597 29712702 . - . Parent=gene537 chr13 ENCODE CDS 29712597 29712702 . - 1 Parent=gene537 chr13 ENCODE exon 29713096 29713223 . - . Parent=gene537 chr13 ENCODE CDS 29713096 29713223 . - 0 Parent=gene537 chr13 ENCODE exon 29727584 29727752 . - . Parent=gene537 chr13 ENCODE CDS 29727584 29727752 . - 1 Parent=gene537 chr13 ENCODE exon 29752200 29752360 . - . Parent=gene537 chr13 ENCODE CDS 29752200 29752360 . - 0 Parent=gene537 chr13 ENCODE CDS 29755753 29755914 . - 0 Parent=gene537 chr13 ENCODE exon 29755753 29755928 . - . Parent=gene537 chr13 ENCODE exon 29779077 29779163 . - . Parent=gene537 ### chr13 ENCODE gene 29680862 29682801 . - . ID=gene538;name2=KATNAL1;Name=RP11-374F3.1-005 chr13 ENCODE exon 29680862 29680875 . - . Parent=gene538 chr13 ENCODE exon 29682453 29682801 . - . Parent=gene538 ### chr13 ENCODE gene 29727617 29778993 . - . ID=gene539;Name=RP11-374F3.1-004;name2=KATNAL1 chr13 ENCODE exon 29727617 29727752 . - . Parent=gene539 chr13 ENCODE CDS 29727617 29727752 . - 1 Parent=gene539 chr13 ENCODE exon 29752200 29752360 . - . Parent=gene539 chr13 ENCODE CDS 29752200 29752360 . - 0 Parent=gene539 chr13 ENCODE CDS 29755753 29755914 . - 0 Parent=gene539 chr13 ENCODE exon 29755753 29755928 . - . Parent=gene539 chr13 ENCODE exon 29778901 29778993 . - . Parent=gene539 ### chr13 ENCODE gene 29727625 29779181 . - . ID=gene540;Name=RP11-374F3.1-003;name2=KATNAL1 chr13 ENCODE exon 29727625 29727752 . - . Parent=gene540 chr13 ENCODE CDS 29727625 29727752 . - 1 Parent=gene540 chr13 ENCODE exon 29752200 29752360 . - . Parent=gene540 chr13 ENCODE CDS 29752200 29752360 . - 0 Parent=gene540 chr13 ENCODE CDS 29755753 29755914 . - 0 Parent=gene540 chr13 ENCODE exon 29755753 29755928 . - . Parent=gene540 chr13 ENCODE exon 29778850 29779181 . - . Parent=gene540 ### chr13 ENCODE gene 112349359 112386812 . + . ID=gene541;Name=RP11-88E10.3-001;name2=RP11-88E10.3 chr13 ENCODE exon 112349359 112349913 . + . Parent=gene541 chr13 ENCODE exon 112381492 112381953 . + . Parent=gene541 chr13 ENCODE CDS 112381695 112381953 . + 0 Parent=gene541 chr13 ENCODE CDS 112385589 112385695 . + 2 Parent=gene541 chr13 ENCODE exon 112385589 112386812 . + . Parent=gene541 ### chr13 ENCODE gene 112392644 112589483 . + . ID=gene542;Name=RP11-120K24.1-001;name2=ATP11A chr13 ENCODE exon 112392644 112392770 . + . Parent=gene542 chr13 ENCODE CDS 112392732 112392770 . + 0 Parent=gene542 chr13 ENCODE exon 112487450 112487572 . + . Parent=gene542 chr13 ENCODE CDS 112487450 112487572 . + 0 Parent=gene542 chr13 ENCODE exon 112507272 112507361 . + . Parent=gene542 chr13 ENCODE CDS 112507272 112507361 . + 0 Parent=gene542 chr13 ENCODE exon 112508528 112508608 . + . Parent=gene542 chr13 ENCODE CDS 112508528 112508608 . + 0 Parent=gene542 chr13 ENCODE exon 112512934 112513041 . + . Parent=gene542 chr13 ENCODE CDS 112512934 112513041 . + 0 Parent=gene542 chr13 ENCODE exon 112518398 112518526 . + . Parent=gene542 chr13 ENCODE CDS 112518398 112518526 . + 0 Parent=gene542 chr13 ENCODE exon 112521619 112521722 . + . Parent=gene542 chr13 ENCODE CDS 112521619 112521722 . + 0 Parent=gene542 chr13 ENCODE exon 112522215 112522265 . + . Parent=gene542 chr13 ENCODE CDS 112522215 112522265 . + 1 Parent=gene542 chr13 ENCODE exon 112525660 112525724 . + . Parent=gene542 chr13 ENCODE CDS 112525660 112525724 . + 1 Parent=gene542 chr13 ENCODE exon 112526659 112526740 . + . Parent=gene542 chr13 ENCODE CDS 112526659 112526740 . + 2 Parent=gene542 chr13 ENCODE exon 112527745 112527895 . + . Parent=gene542 chr13 ENCODE CDS 112527745 112527895 . + 1 Parent=gene542 chr13 ENCODE exon 112529009 112529206 . + . Parent=gene542 chr13 ENCODE CDS 112529009 112529206 . + 0 Parent=gene542 chr13 ENCODE exon 112533690 112533863 . + . Parent=gene542 chr13 ENCODE CDS 112533690 112533863 . + 0 Parent=gene542 chr13 ENCODE exon 112535175 112535338 . + . Parent=gene542 chr13 ENCODE CDS 112535175 112535338 . + 0 Parent=gene542 chr13 ENCODE exon 112536904 112536975 . + . Parent=gene542 chr13 ENCODE CDS 112536904 112536975 . + 1 Parent=gene542 chr13 ENCODE exon 112538493 112538566 . + . Parent=gene542 chr13 ENCODE CDS 112538493 112538566 . + 1 Parent=gene542 chr13 ENCODE exon 112544591 112544694 . + . Parent=gene542 chr13 ENCODE CDS 112544591 112544694 . + 2 Parent=gene542 chr13 ENCODE exon 112553352 112553533 . + . Parent=gene542 chr13 ENCODE CDS 112553352 112553533 . + 0 Parent=gene542 chr13 ENCODE exon 112556594 112556845 . + . Parent=gene542 chr13 ENCODE CDS 112556594 112556845 . + 1 Parent=gene542 chr13 ENCODE exon 112558226 112558400 . + . Parent=gene542 chr13 ENCODE CDS 112558226 112558400 . + 1 Parent=gene542 chr13 ENCODE exon 112560133 112560235 . + . Parent=gene542 chr13 ENCODE CDS 112560133 112560235 . + 0 Parent=gene542 chr13 ENCODE exon 112560460 112560605 . + . Parent=gene542 chr13 ENCODE CDS 112560460 112560605 . + 2 Parent=gene542 chr13 ENCODE exon 112561708 112561767 . + . Parent=gene542 chr13 ENCODE CDS 112561708 112561767 . + 0 Parent=gene542 chr13 ENCODE exon 112562602 112562729 . + . Parent=gene542 chr13 ENCODE CDS 112562602 112562729 . + 0 Parent=gene542 chr13 ENCODE exon 112564755 112564890 . + . Parent=gene542 chr13 ENCODE CDS 112564755 112564890 . + 1 Parent=gene542 chr13 ENCODE exon 112574050 112574115 . + . Parent=gene542 chr13 ENCODE CDS 112574050 112574115 . + 0 Parent=gene542 chr13 ENCODE exon 112575888 112575991 . + . Parent=gene542 chr13 ENCODE CDS 112575888 112575991 . + 0 Parent=gene542 chr13 ENCODE exon 112578091 112578256 . + . Parent=gene542 chr13 ENCODE CDS 112578091 112578256 . + 1 Parent=gene542 chr13 ENCODE CDS 112580532 112580609 . + 0 Parent=gene542 chr13 ENCODE exon 112580532 112580618 . + . Parent=gene542 chr13 ENCODE exon 112584191 112589483 . + . Parent=gene542 ### chr13 ENCODE gene 112405602 112513014 . + . ID=gene543;Name=RP11-120K24.1-007;name2=ATP11A chr13 ENCODE exon 112405602 112405657 . + . Parent=gene543 chr13 ENCODE exon 112487450 112487572 . + . Parent=gene543 chr13 ENCODE exon 112507272 112507361 . + . Parent=gene543 chr13 ENCODE exon 112508528 112508608 . + . Parent=gene543 chr13 ENCODE exon 112512934 112513014 . + . Parent=gene543 ### chr13 ENCODE gene 112487460 112563113 . + . ID=gene544;name2=ATP11A;Name=RP11-120K24.1-002 chr13 ENCODE exon 112487460 112487572 . + . Parent=gene544 chr13 ENCODE exon 112507272 112507361 . + . Parent=gene544 chr13 ENCODE exon 112508528 112508608 . + . Parent=gene544 chr13 ENCODE exon 112512934 112513041 . + . Parent=gene544 chr13 ENCODE exon 112518398 112518526 . + . Parent=gene544 chr13 ENCODE exon 112521619 112521722 . + . Parent=gene544 chr13 ENCODE exon 112522215 112522265 . + . Parent=gene544 chr13 ENCODE exon 112525660 112525724 . + . Parent=gene544 chr13 ENCODE exon 112526659 112526740 . + . Parent=gene544 chr13 ENCODE exon 112527745 112527895 . + . Parent=gene544 chr13 ENCODE exon 112529009 112529206 . + . Parent=gene544 chr13 ENCODE exon 112533690 112533863 . + . Parent=gene544 chr13 ENCODE exon 112535175 112535338 . + . Parent=gene544 chr13 ENCODE exon 112536904 112536975 . + . Parent=gene544 chr13 ENCODE exon 112538493 112538566 . + . Parent=gene544 chr13 ENCODE exon 112544591 112544694 . + . Parent=gene544 chr13 ENCODE exon 112553352 112553533 . + . Parent=gene544 chr13 ENCODE exon 112556594 112556845 . + . Parent=gene544 chr13 ENCODE exon 112558226 112558400 . + . Parent=gene544 chr13 ENCODE exon 112560133 112561767 . + . Parent=gene544 chr13 ENCODE exon 112562602 112563113 . + . Parent=gene544 ### chr13 ENCODE gene 112487487 112563113 . + . ID=gene545;Name=RP11-120K24.1-003;name2=ATP11A chr13 ENCODE exon 112487487 112487572 . + . Parent=gene545 chr13 ENCODE CDS 112487487 112487572 . + 0 Parent=gene545 chr13 ENCODE exon 112507272 112507361 . + . Parent=gene545 chr13 ENCODE CDS 112507272 112507361 . + 1 Parent=gene545 chr13 ENCODE exon 112508528 112508608 . + . Parent=gene545 chr13 ENCODE CDS 112508528 112508608 . + 1 Parent=gene545 chr13 ENCODE exon 112512934 112513041 . + . Parent=gene545 chr13 ENCODE CDS 112512934 112513041 . + 1 Parent=gene545 chr13 ENCODE exon 112518398 112518526 . + . Parent=gene545 chr13 ENCODE CDS 112518398 112518526 . + 1 Parent=gene545 chr13 ENCODE exon 112521619 112521722 . + . Parent=gene545 chr13 ENCODE CDS 112521619 112521722 . + 1 Parent=gene545 chr13 ENCODE exon 112522215 112522265 . + . Parent=gene545 chr13 ENCODE CDS 112522215 112522265 . + 2 Parent=gene545 chr13 ENCODE exon 112525660 112525724 . + . Parent=gene545 chr13 ENCODE CDS 112525660 112525724 . + 2 Parent=gene545 chr13 ENCODE exon 112526659 112526740 . + . Parent=gene545 chr13 ENCODE CDS 112526659 112526740 . + 0 Parent=gene545 chr13 ENCODE exon 112527745 112527895 . + . Parent=gene545 chr13 ENCODE CDS 112527745 112527895 . + 2 Parent=gene545 chr13 ENCODE exon 112529009 112529206 . + . Parent=gene545 chr13 ENCODE CDS 112529009 112529206 . + 1 Parent=gene545 chr13 ENCODE exon 112533690 112533863 . + . Parent=gene545 chr13 ENCODE CDS 112533690 112533863 . + 1 Parent=gene545 chr13 ENCODE exon 112535175 112535338 . + . Parent=gene545 chr13 ENCODE CDS 112535175 112535338 . + 1 Parent=gene545 chr13 ENCODE exon 112536904 112536975 . + . Parent=gene545 chr13 ENCODE CDS 112536904 112536975 . + 2 Parent=gene545 chr13 ENCODE exon 112538493 112538566 . + . Parent=gene545 chr13 ENCODE CDS 112538493 112538566 . + 2 Parent=gene545 chr13 ENCODE exon 112544591 112544694 . + . Parent=gene545 chr13 ENCODE CDS 112544591 112544694 . + 0 Parent=gene545 chr13 ENCODE exon 112553352 112553533 . + . Parent=gene545 chr13 ENCODE CDS 112553352 112553533 . + 1 Parent=gene545 chr13 ENCODE exon 112556594 112556845 . + . Parent=gene545 chr13 ENCODE CDS 112556594 112556845 . + 2 Parent=gene545 chr13 ENCODE exon 112558226 112558400 . + . Parent=gene545 chr13 ENCODE CDS 112558226 112558400 . + 2 Parent=gene545 chr13 ENCODE exon 112560133 112560235 . + . Parent=gene545 chr13 ENCODE CDS 112560133 112560235 . + 1 Parent=gene545 chr13 ENCODE exon 112560460 112560605 . + . Parent=gene545 chr13 ENCODE CDS 112560460 112560605 . + 0 Parent=gene545 chr13 ENCODE exon 112561708 112561767 . + . Parent=gene545 chr13 ENCODE CDS 112561708 112561767 . + 1 Parent=gene545 chr13 ENCODE CDS 112562602 112562757 . + 1 Parent=gene545 chr13 ENCODE exon 112562602 112563113 . + . Parent=gene545 ### chr13 ENCODE gene 112553495 112554169 . + . ID=gene546;Name=RP11-120K24.1-009;name2=ATP11A chr13 ENCODE exon 112553495 112553533 . + . Parent=gene546 chr13 ENCODE exon 112553856 112554169 . + . Parent=gene546 ### chr13 ENCODE gene 112574083 112586273 . + . ID=gene547;Name=RP11-120K24.1-004;name2=ATP11A chr13 ENCODE exon 112574083 112574115 . + . Parent=gene547 chr13 ENCODE CDS 112574083 112574115 . + 0 Parent=gene547 chr13 ENCODE exon 112575888 112575991 . + . Parent=gene547 chr13 ENCODE CDS 112575888 112575991 . + 0 Parent=gene547 chr13 ENCODE exon 112578091 112578256 . + . Parent=gene547 chr13 ENCODE CDS 112578091 112578256 . + 1 Parent=gene547 chr13 ENCODE CDS 112584131 112584379 . + 0 Parent=gene547 chr13 ENCODE exon 112584131 112586273 . + . Parent=gene547 ### chr13 ENCODE gene 112575747 112578409 . + . ID=gene548;Name=RP11-120K24.1-008;name2=ATP11A chr13 ENCODE exon 112575747 112575991 . + . Parent=gene548 chr13 ENCODE exon 112578091 112578409 . + . Parent=gene548 ### chr13 ENCODE gene 112575818 112580774 . + . ID=gene549;Name=RP11-120K24.1-006;name2=ATP11A chr13 ENCODE exon 112575818 112575991 . + . Parent=gene549 chr13 ENCODE exon 112578091 112578256 . + . Parent=gene549 chr13 ENCODE exon 112580532 112580774 . + . Parent=gene549 ### chr13 ENCODE gene 112578124 112584503 . + . ID=gene550;Name=RP11-120K24.1-010;name2=ATP11A chr13 ENCODE exon 112578124 112578256 . + . Parent=gene550 chr13 ENCODE CDS 112578124 112578256 . + 0 Parent=gene550 chr13 ENCODE CDS 112582861 112582953 . + 2 Parent=gene550 chr13 ENCODE exon 112582861 112582964 . + . Parent=gene550 chr13 ENCODE exon 112584191 112584503 . + . Parent=gene550 ### chr13 ENCODE gene 112582616 112584462 . + . ID=gene551;Name=RP11-120K24.1-005;name2=ATP11A chr13 ENCODE exon 112582616 112582964 . + . Parent=gene551 chr13 ENCODE exon 112584191 112584462 . + . Parent=gene551 ### chr13 ENCODE gene 112604510 112612934 . + . ID=gene552;Name=RP11-98F14.2-015;name2=MCF2L chr13 ENCODE exon 112604510 112604686 . + . Parent=gene552 chr13 ENCODE CDS 112604518 112604686 . + 0 Parent=gene552 chr13 ENCODE CDS 112611568 112611593 . + 2 Parent=gene552 chr13 ENCODE exon 112611568 112612934 . + . Parent=gene552 ### chr13 ENCODE gene 112604510 112660479 . + . ID=gene553;Name=RP11-98F14.2-016;name2=MCF2L chr13 ENCODE exon 112604510 112604686 . + . Parent=gene553 chr13 ENCODE exon 112619429 112619839 . + . Parent=gene553 chr13 ENCODE exon 112658358 112660479 . + . Parent=gene553 ### chr13 ENCODE gene 112604510 112799176 . + . ID=gene554;Name=RP11-98F14.2-001;name2=MCF2L chr13 ENCODE exon 112604510 112604686 . + . Parent=gene554 chr13 ENCODE CDS 112604518 112604686 . + 0 Parent=gene554 chr13 ENCODE exon 112717078 112717161 . + . Parent=gene554 chr13 ENCODE CDS 112717078 112717161 . + 2 Parent=gene554 chr13 ENCODE exon 112726959 112727073 . + . Parent=gene554 chr13 ENCODE CDS 112726959 112727073 . + 2 Parent=gene554 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene554 chr13 ENCODE CDS 112747586 112747676 . + 1 Parent=gene554 chr13 ENCODE exon 112762908 112763027 . + . Parent=gene554 chr13 ENCODE CDS 112762908 112763027 . + 0 Parent=gene554 chr13 ENCODE exon 112766619 112766735 . + . Parent=gene554 chr13 ENCODE CDS 112766619 112766735 . + 0 Parent=gene554 chr13 ENCODE exon 112767251 112767400 . + . Parent=gene554 chr13 ENCODE CDS 112767251 112767400 . + 0 Parent=gene554 chr13 ENCODE exon 112768361 112768485 . + . Parent=gene554 chr13 ENCODE CDS 112768361 112768485 . + 0 Parent=gene554 chr13 ENCODE exon 112772374 112772488 . + . Parent=gene554 chr13 ENCODE CDS 112772374 112772488 . + 1 Parent=gene554 chr13 ENCODE exon 112776759 112776878 . + . Parent=gene554 chr13 ENCODE CDS 112776759 112776878 . + 0 Parent=gene554 chr13 ENCODE exon 112777313 112777504 . + . Parent=gene554 chr13 ENCODE CDS 112777313 112777504 . + 0 Parent=gene554 chr13 ENCODE exon 112778281 112778472 . + . Parent=gene554 chr13 ENCODE CDS 112778281 112778472 . + 0 Parent=gene554 chr13 ENCODE exon 112779367 112779526 . + . Parent=gene554 chr13 ENCODE CDS 112779367 112779526 . + 0 Parent=gene554 chr13 ENCODE exon 112780678 112780751 . + . Parent=gene554 chr13 ENCODE CDS 112780678 112780751 . + 2 Parent=gene554 chr13 ENCODE exon 112780981 112781054 . + . Parent=gene554 chr13 ENCODE CDS 112780981 112781054 . + 0 Parent=gene554 chr13 ENCODE exon 112783528 112783594 . + . Parent=gene554 chr13 ENCODE CDS 112783528 112783594 . + 1 Parent=gene554 chr13 ENCODE exon 112784742 112784857 . + . Parent=gene554 chr13 ENCODE CDS 112784742 112784857 . + 0 Parent=gene554 chr13 ENCODE exon 112786313 112786382 . + . Parent=gene554 chr13 ENCODE CDS 112786313 112786382 . + 1 Parent=gene554 chr13 ENCODE exon 112787207 112787299 . + . Parent=gene554 chr13 ENCODE CDS 112787207 112787299 . + 0 Parent=gene554 chr13 ENCODE exon 112787401 112787493 . + . Parent=gene554 chr13 ENCODE CDS 112787401 112787493 . + 0 Parent=gene554 chr13 ENCODE exon 112788439 112788564 . + . Parent=gene554 chr13 ENCODE CDS 112788439 112788564 . + 0 Parent=gene554 chr13 ENCODE exon 112789550 112789771 . + . Parent=gene554 chr13 ENCODE CDS 112789550 112789771 . + 0 Parent=gene554 chr13 ENCODE exon 112790022 112790114 . + . Parent=gene554 chr13 ENCODE CDS 112790022 112790114 . + 0 Parent=gene554 chr13 ENCODE exon 112790642 112790720 . + . Parent=gene554 chr13 ENCODE CDS 112790642 112790720 . + 0 Parent=gene554 chr13 ENCODE exon 112790877 112790943 . + . Parent=gene554 chr13 ENCODE CDS 112790877 112790943 . + 2 Parent=gene554 chr13 ENCODE exon 112791925 112792043 . + . Parent=gene554 chr13 ENCODE CDS 112791925 112792043 . + 1 Parent=gene554 chr13 ENCODE exon 112796829 112796950 . + . Parent=gene554 chr13 ENCODE CDS 112796829 112796950 . + 2 Parent=gene554 chr13 ENCODE exon 112798686 112798798 . + . Parent=gene554 chr13 ENCODE CDS 112798686 112798798 . + 0 Parent=gene554 chr13 ENCODE CDS 112798865 112799000 . + 1 Parent=gene554 chr13 ENCODE exon 112798865 112799176 . + . Parent=gene554 ### chr13 ENCODE gene 112670815 112802054 . + . ID=gene555;Name=RP11-98F14.2-002;name2=MCF2L chr13 ENCODE exon 112670815 112671029 . + . Parent=gene555 chr13 ENCODE CDS 112670852 112671029 . + 0 Parent=gene555 chr13 ENCODE exon 112717078 112717161 . + . Parent=gene555 chr13 ENCODE CDS 112717078 112717161 . + 2 Parent=gene555 chr13 ENCODE exon 112726959 112727073 . + . Parent=gene555 chr13 ENCODE CDS 112726959 112727073 . + 2 Parent=gene555 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene555 chr13 ENCODE CDS 112747586 112747676 . + 1 Parent=gene555 chr13 ENCODE exon 112762908 112763027 . + . Parent=gene555 chr13 ENCODE CDS 112762908 112763027 . + 0 Parent=gene555 chr13 ENCODE exon 112766619 112766735 . + . Parent=gene555 chr13 ENCODE CDS 112766619 112766735 . + 0 Parent=gene555 chr13 ENCODE exon 112767251 112767400 . + . Parent=gene555 chr13 ENCODE CDS 112767251 112767400 . + 0 Parent=gene555 chr13 ENCODE exon 112768361 112768485 . + . Parent=gene555 chr13 ENCODE CDS 112768361 112768485 . + 0 Parent=gene555 chr13 ENCODE exon 112772374 112772488 . + . Parent=gene555 chr13 ENCODE CDS 112772374 112772488 . + 1 Parent=gene555 chr13 ENCODE exon 112776759 112776878 . + . Parent=gene555 chr13 ENCODE CDS 112776759 112776878 . + 0 Parent=gene555 chr13 ENCODE exon 112777313 112777504 . + . Parent=gene555 chr13 ENCODE CDS 112777313 112777504 . + 0 Parent=gene555 chr13 ENCODE exon 112778281 112778472 . + . Parent=gene555 chr13 ENCODE CDS 112778281 112778472 . + 0 Parent=gene555 chr13 ENCODE exon 112779367 112779526 . + . Parent=gene555 chr13 ENCODE CDS 112779367 112779526 . + 0 Parent=gene555 chr13 ENCODE exon 112780678 112780751 . + . Parent=gene555 chr13 ENCODE CDS 112780678 112780751 . + 2 Parent=gene555 chr13 ENCODE exon 112780981 112781054 . + . Parent=gene555 chr13 ENCODE CDS 112780981 112781054 . + 0 Parent=gene555 chr13 ENCODE exon 112783528 112783594 . + . Parent=gene555 chr13 ENCODE CDS 112783528 112783594 . + 1 Parent=gene555 chr13 ENCODE exon 112784742 112784857 . + . Parent=gene555 chr13 ENCODE CDS 112784742 112784857 . + 0 Parent=gene555 chr13 ENCODE exon 112786313 112786382 . + . Parent=gene555 chr13 ENCODE CDS 112786313 112786382 . + 1 Parent=gene555 chr13 ENCODE exon 112787207 112787299 . + . Parent=gene555 chr13 ENCODE CDS 112787207 112787299 . + 0 Parent=gene555 chr13 ENCODE exon 112787401 112787493 . + . Parent=gene555 chr13 ENCODE CDS 112787401 112787493 . + 0 Parent=gene555 chr13 ENCODE exon 112788439 112788564 . + . Parent=gene555 chr13 ENCODE CDS 112788439 112788564 . + 0 Parent=gene555 chr13 ENCODE exon 112789550 112789771 . + . Parent=gene555 chr13 ENCODE CDS 112789550 112789771 . + 0 Parent=gene555 chr13 ENCODE exon 112790022 112790114 . + . Parent=gene555 chr13 ENCODE CDS 112790022 112790114 . + 0 Parent=gene555 chr13 ENCODE exon 112790642 112790720 . + . Parent=gene555 chr13 ENCODE CDS 112790642 112790720 . + 0 Parent=gene555 chr13 ENCODE exon 112790877 112790943 . + . Parent=gene555 chr13 ENCODE CDS 112790877 112790943 . + 2 Parent=gene555 chr13 ENCODE exon 112791925 112792043 . + . Parent=gene555 chr13 ENCODE CDS 112791925 112792043 . + 1 Parent=gene555 chr13 ENCODE exon 112796829 112796950 . + . Parent=gene555 chr13 ENCODE CDS 112796829 112796950 . + 2 Parent=gene555 chr13 ENCODE CDS 112798686 112798802 . + 0 Parent=gene555 chr13 ENCODE exon 112798686 112802054 . + . Parent=gene555 ### chr13 ENCODE gene 112671648 112767383 . + . ID=gene556;Name=RP11-98F14.2-005;name2=MCF2L chr13 ENCODE exon 112671648 112671773 . + . Parent=gene556 chr13 ENCODE CDS 112671695 112671773 . + 0 Parent=gene556 chr13 ENCODE exon 112717078 112717161 . + . Parent=gene556 chr13 ENCODE CDS 112717078 112717161 . + 2 Parent=gene556 chr13 ENCODE exon 112726959 112727073 . + . Parent=gene556 chr13 ENCODE CDS 112726959 112727073 . + 2 Parent=gene556 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene556 chr13 ENCODE CDS 112747586 112747676 . + 1 Parent=gene556 chr13 ENCODE exon 112762908 112763027 . + . Parent=gene556 chr13 ENCODE CDS 112762908 112763027 . + 0 Parent=gene556 chr13 ENCODE exon 112766619 112766735 . + . Parent=gene556 chr13 ENCODE CDS 112766619 112766735 . + 0 Parent=gene556 chr13 ENCODE exon 112767251 112767383 . + . Parent=gene556 chr13 ENCODE CDS 112767251 112767383 . + 0 Parent=gene556 ### chr13 ENCODE gene 112681627 112798802 . + . ID=gene557;Name=RP11-98F14.2-024;name2=MCF2L chr13 ENCODE exon 112681627 112682073 . + . Parent=gene557 chr13 ENCODE CDS 112681983 112682073 . + 0 Parent=gene557 chr13 ENCODE exon 112717078 112717161 . + . Parent=gene557 chr13 ENCODE CDS 112717078 112717161 . + 2 Parent=gene557 chr13 ENCODE exon 112726959 112727073 . + . Parent=gene557 chr13 ENCODE CDS 112726959 112727073 . + 2 Parent=gene557 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene557 chr13 ENCODE CDS 112747586 112747676 . + 1 Parent=gene557 chr13 ENCODE exon 112762908 112763027 . + . Parent=gene557 chr13 ENCODE CDS 112762908 112763027 . + 0 Parent=gene557 chr13 ENCODE exon 112766619 112766735 . + . Parent=gene557 chr13 ENCODE CDS 112766619 112766735 . + 0 Parent=gene557 chr13 ENCODE exon 112767251 112767400 . + . Parent=gene557 chr13 ENCODE CDS 112767251 112767400 . + 0 Parent=gene557 chr13 ENCODE exon 112768361 112768485 . + . Parent=gene557 chr13 ENCODE CDS 112768361 112768485 . + 0 Parent=gene557 chr13 ENCODE exon 112772374 112772488 . + . Parent=gene557 chr13 ENCODE CDS 112772374 112772488 . + 1 Parent=gene557 chr13 ENCODE exon 112776759 112776878 . + . Parent=gene557 chr13 ENCODE CDS 112776759 112776878 . + 0 Parent=gene557 chr13 ENCODE exon 112777313 112777504 . + . Parent=gene557 chr13 ENCODE CDS 112777313 112777504 . + 0 Parent=gene557 chr13 ENCODE exon 112778281 112778472 . + . Parent=gene557 chr13 ENCODE CDS 112778281 112778472 . + 0 Parent=gene557 chr13 ENCODE exon 112779367 112779526 . + . Parent=gene557 chr13 ENCODE CDS 112779367 112779526 . + 0 Parent=gene557 chr13 ENCODE exon 112780678 112780751 . + . Parent=gene557 chr13 ENCODE CDS 112780678 112780751 . + 2 Parent=gene557 chr13 ENCODE exon 112780981 112781054 . + . Parent=gene557 chr13 ENCODE CDS 112780981 112781054 . + 0 Parent=gene557 chr13 ENCODE exon 112783528 112783594 . + . Parent=gene557 chr13 ENCODE CDS 112783528 112783594 . + 1 Parent=gene557 chr13 ENCODE exon 112784742 112784857 . + . Parent=gene557 chr13 ENCODE CDS 112784742 112784857 . + 0 Parent=gene557 chr13 ENCODE exon 112786313 112786382 . + . Parent=gene557 chr13 ENCODE CDS 112786313 112786382 . + 1 Parent=gene557 chr13 ENCODE exon 112787207 112787299 . + . Parent=gene557 chr13 ENCODE CDS 112787207 112787299 . + 0 Parent=gene557 chr13 ENCODE exon 112787401 112787493 . + . Parent=gene557 chr13 ENCODE CDS 112787401 112787493 . + 0 Parent=gene557 chr13 ENCODE exon 112788439 112788564 . + . Parent=gene557 chr13 ENCODE CDS 112788439 112788564 . + 0 Parent=gene557 chr13 ENCODE exon 112789550 112789771 . + . Parent=gene557 chr13 ENCODE CDS 112789550 112789771 . + 0 Parent=gene557 chr13 ENCODE exon 112790022 112790114 . + . Parent=gene557 chr13 ENCODE CDS 112790022 112790114 . + 0 Parent=gene557 chr13 ENCODE exon 112790642 112790720 . + . Parent=gene557 chr13 ENCODE CDS 112790642 112790720 . + 0 Parent=gene557 chr13 ENCODE exon 112790877 112790943 . + . Parent=gene557 chr13 ENCODE CDS 112790877 112790943 . + 2 Parent=gene557 chr13 ENCODE exon 112791925 112792043 . + . Parent=gene557 chr13 ENCODE CDS 112791925 112792043 . + 1 Parent=gene557 chr13 ENCODE exon 112796829 112796950 . + . Parent=gene557 chr13 ENCODE CDS 112796829 112796950 . + 2 Parent=gene557 chr13 ENCODE exon 112798686 112798802 . + . Parent=gene557 chr13 ENCODE CDS 112798686 112798802 . + 0 Parent=gene557 ### chr13 ENCODE gene 112682023 112727047 . + . ID=gene558;Name=RP11-98F14.2-017;name2=MCF2L chr13 ENCODE exon 112682023 112682073 . + . Parent=gene558 chr13 ENCODE exon 112717078 112717161 . + . Parent=gene558 chr13 ENCODE exon 112726959 112727047 . + . Parent=gene558 ### chr13 ENCODE gene 112687433 112727069 . + . ID=gene559;Name=RP11-98F14.2-025;name2=MCF2L chr13 ENCODE exon 112687433 112687794 . + . Parent=gene559 chr13 ENCODE CDS 112687698 112687794 . + 0 Parent=gene559 chr13 ENCODE exon 112717078 112717161 . + . Parent=gene559 chr13 ENCODE CDS 112717078 112717161 . + 2 Parent=gene559 chr13 ENCODE exon 112726959 112727069 . + . Parent=gene559 chr13 ENCODE CDS 112726959 112727069 . + 2 Parent=gene559 ### chr13 ENCODE gene 112703585 112766626 . + . ID=gene560;Name=RP11-98F14.2-030;name2=MCF2L chr13 ENCODE exon 112703585 112703740 . + . Parent=gene560 chr13 ENCODE exon 112717078 112717161 . + . Parent=gene560 chr13 ENCODE exon 112726959 112727073 . + . Parent=gene560 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene560 chr13 ENCODE exon 112762908 112763027 . + . Parent=gene560 chr13 ENCODE exon 112766619 112766626 . + . Parent=gene560 ### chr13 ENCODE gene 112704069 112792498 . + . ID=gene561;Name=RP11-98F14.2-003;name2=MCF2L chr13 ENCODE exon 112704069 112704298 . + . Parent=gene561 chr13 ENCODE CDS 112704226 112704298 . + 0 Parent=gene561 chr13 ENCODE exon 112717078 112717161 . + . Parent=gene561 chr13 ENCODE CDS 112717078 112717161 . + 2 Parent=gene561 chr13 ENCODE exon 112726959 112727073 . + . Parent=gene561 chr13 ENCODE CDS 112726959 112727073 . + 2 Parent=gene561 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene561 chr13 ENCODE CDS 112747586 112747676 . + 1 Parent=gene561 chr13 ENCODE exon 112762908 112763027 . + . Parent=gene561 chr13 ENCODE CDS 112762908 112763027 . + 0 Parent=gene561 chr13 ENCODE exon 112766619 112766735 . + . Parent=gene561 chr13 ENCODE CDS 112766619 112766735 . + 0 Parent=gene561 chr13 ENCODE exon 112767251 112767400 . + . Parent=gene561 chr13 ENCODE CDS 112767251 112767400 . + 0 Parent=gene561 chr13 ENCODE exon 112768361 112768485 . + . Parent=gene561 chr13 ENCODE CDS 112768361 112768485 . + 0 Parent=gene561 chr13 ENCODE exon 112772374 112772488 . + . Parent=gene561 chr13 ENCODE CDS 112772374 112772488 . + 1 Parent=gene561 chr13 ENCODE exon 112776759 112776878 . + . Parent=gene561 chr13 ENCODE CDS 112776759 112776878 . + 0 Parent=gene561 chr13 ENCODE exon 112777313 112777504 . + . Parent=gene561 chr13 ENCODE CDS 112777313 112777504 . + 0 Parent=gene561 chr13 ENCODE exon 112778281 112778472 . + . Parent=gene561 chr13 ENCODE CDS 112778281 112778472 . + 0 Parent=gene561 chr13 ENCODE exon 112779367 112779526 . + . Parent=gene561 chr13 ENCODE CDS 112779367 112779526 . + 0 Parent=gene561 chr13 ENCODE exon 112780678 112780751 . + . Parent=gene561 chr13 ENCODE CDS 112780678 112780751 . + 2 Parent=gene561 chr13 ENCODE exon 112780981 112781054 . + . Parent=gene561 chr13 ENCODE CDS 112780981 112781054 . + 0 Parent=gene561 chr13 ENCODE exon 112783528 112783594 . + . Parent=gene561 chr13 ENCODE CDS 112783528 112783594 . + 1 Parent=gene561 chr13 ENCODE exon 112784742 112784857 . + . Parent=gene561 chr13 ENCODE CDS 112784742 112784857 . + 0 Parent=gene561 chr13 ENCODE exon 112786313 112786382 . + . Parent=gene561 chr13 ENCODE CDS 112786313 112786382 . + 1 Parent=gene561 chr13 ENCODE exon 112787207 112787299 . + . Parent=gene561 chr13 ENCODE CDS 112787207 112787299 . + 0 Parent=gene561 chr13 ENCODE exon 112787401 112787493 . + . Parent=gene561 chr13 ENCODE CDS 112787401 112787493 . + 0 Parent=gene561 chr13 ENCODE exon 112788439 112788564 . + . Parent=gene561 chr13 ENCODE CDS 112788439 112788564 . + 0 Parent=gene561 chr13 ENCODE exon 112789550 112789771 . + . Parent=gene561 chr13 ENCODE CDS 112789550 112789771 . + 0 Parent=gene561 chr13 ENCODE exon 112790022 112790114 . + . Parent=gene561 chr13 ENCODE CDS 112790022 112790114 . + 0 Parent=gene561 chr13 ENCODE exon 112790642 112790720 . + . Parent=gene561 chr13 ENCODE CDS 112790642 112790720 . + 0 Parent=gene561 chr13 ENCODE exon 112790877 112790943 . + . Parent=gene561 chr13 ENCODE CDS 112790877 112790943 . + 2 Parent=gene561 chr13 ENCODE exon 112791925 112792043 . + . Parent=gene561 chr13 ENCODE CDS 112791925 112792043 . + 1 Parent=gene561 chr13 ENCODE CDS 112792190 112792197 . + 2 Parent=gene561 chr13 ENCODE exon 112792190 112792498 . + . Parent=gene561 ### chr13 ENCODE gene 112704100 112727223 . + . ID=gene562;Name=RP11-98F14.2-031;name2=MCF2L chr13 ENCODE exon 112704100 112704298 . + . Parent=gene562 chr13 ENCODE exon 112717078 112717161 . + . Parent=gene562 chr13 ENCODE exon 112726959 112727223 . + . Parent=gene562 ### chr13 ENCODE gene 112704208 112729383 . + . ID=gene563;Name=RP11-98F14.2-018;name2=MCF2L chr13 ENCODE exon 112704208 112704298 . + . Parent=gene563 chr13 ENCODE CDS 112704226 112704298 . + 0 Parent=gene563 chr13 ENCODE exon 112717078 112717161 . + . Parent=gene563 chr13 ENCODE CDS 112717078 112717161 . + 2 Parent=gene563 chr13 ENCODE exon 112726959 112727073 . + . Parent=gene563 chr13 ENCODE CDS 112726959 112727073 . + 2 Parent=gene563 chr13 ENCODE CDS 112729184 112729322 . + 1 Parent=gene563 chr13 ENCODE exon 112729184 112729383 . + . Parent=gene563 ### chr13 ENCODE gene 112726979 112736452 . + . ID=gene564;Name=RP11-98F14.2-019;name2=MCF2L chr13 ENCODE exon 112726979 112727073 . + . Parent=gene564 chr13 ENCODE exon 112736187 112736452 . + . Parent=gene564 ### chr13 ENCODE gene 112727013 112755068 . + . ID=gene565;Name=RP11-98F14.2-008;name2=MCF2L chr13 ENCODE exon 112727013 112727073 . + . Parent=gene565 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene565 chr13 ENCODE exon 112754822 112755068 . + . Parent=gene565 ### chr13 ENCODE gene 112742663 112749656 . + . ID=gene566;Name=RP11-98F14.2-032;name2=MCF2L chr13 ENCODE exon 112742663 112743323 . + . Parent=gene566 chr13 ENCODE exon 112744591 112749656 . + . Parent=gene566 ### chr13 ENCODE gene 112746777 112747637 . + . ID=gene567;Name=RP11-98F14.2-022;name2=MCF2L chr13 ENCODE exon 112746777 112747340 . + . Parent=gene567 chr13 ENCODE exon 112747586 112747637 . + . Parent=gene567 ### chr13 ENCODE gene 112746970 112797484 . + . ID=gene568;Name=RP11-98F14.2-004;name2=MCF2L chr13 ENCODE exon 112746970 112747203 . + . Parent=gene568 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene568 chr13 ENCODE exon 112762908 112763027 . + . Parent=gene568 chr13 ENCODE exon 112766619 112766735 . + . Parent=gene568 chr13 ENCODE exon 112767251 112767400 . + . Parent=gene568 chr13 ENCODE exon 112768361 112768485 . + . Parent=gene568 chr13 ENCODE exon 112772374 112772488 . + . Parent=gene568 chr13 ENCODE exon 112776759 112776878 . + . Parent=gene568 chr13 ENCODE exon 112777313 112777504 . + . Parent=gene568 chr13 ENCODE exon 112778281 112778472 . + . Parent=gene568 chr13 ENCODE exon 112779367 112779526 . + . Parent=gene568 chr13 ENCODE exon 112780678 112780751 . + . Parent=gene568 chr13 ENCODE exon 112780981 112781054 . + . Parent=gene568 chr13 ENCODE exon 112783528 112783594 . + . Parent=gene568 chr13 ENCODE exon 112784742 112784857 . + . Parent=gene568 chr13 ENCODE exon 112786313 112786382 . + . Parent=gene568 chr13 ENCODE exon 112787207 112787299 . + . Parent=gene568 chr13 ENCODE exon 112787401 112787493 . + . Parent=gene568 chr13 ENCODE exon 112788439 112788564 . + . Parent=gene568 chr13 ENCODE exon 112789550 112789712 . + . Parent=gene568 chr13 ENCODE exon 112796919 112796950 . + . Parent=gene568 chr13 ENCODE exon 112797284 112797484 . + . Parent=gene568 ### chr13 ENCODE gene 112746977 112749170 . + . ID=gene569;Name=RP11-98F14.2-007;name2=MCF2L chr13 ENCODE exon 112746977 112747203 . + . Parent=gene569 chr13 ENCODE CDS 112747040 112747203 . + 0 Parent=gene569 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene569 chr13 ENCODE CDS 112747586 112747676 . + 1 Parent=gene569 chr13 ENCODE CDS 112748913 112748918 . + 0 Parent=gene569 chr13 ENCODE exon 112748913 112749170 . + . Parent=gene569 ### chr13 ENCODE gene 112747003 112757220 . + . ID=gene570;Name=RP11-98F14.2-006;name2=MCF2L chr13 ENCODE exon 112747003 112747203 . + . Parent=gene570 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene570 chr13 ENCODE exon 112756617 112757220 . + . Parent=gene570 ### chr13 ENCODE gene 112747166 112767618 . + . ID=gene571;Name=RP11-98F14.2-023;name2=MCF2L chr13 ENCODE exon 112747166 112747203 . + . Parent=gene571 chr13 ENCODE CDS 112747166 112747203 . + 0 Parent=gene571 chr13 ENCODE exon 112747586 112747676 . + . Parent=gene571 chr13 ENCODE CDS 112747586 112747676 . + 1 Parent=gene571 chr13 ENCODE exon 112762908 112763027 . + . Parent=gene571 chr13 ENCODE CDS 112762908 112763027 . + 0 Parent=gene571 chr13 ENCODE exon 112766619 112766735 . + . Parent=gene571 chr13 ENCODE CDS 112766619 112766735 . + 0 Parent=gene571 chr13 ENCODE CDS 112767251 112767526 . + 0 Parent=gene571 chr13 ENCODE exon 112767251 112767618 . + . Parent=gene571 ### chr13 ENCODE gene 112766627 112772709 . + . ID=gene572;Name=RP11-98F14.2-009;name2=MCF2L chr13 ENCODE exon 112766627 112766735 . + . Parent=gene572 chr13 ENCODE exon 112767251 112767400 . + . Parent=gene572 chr13 ENCODE exon 112768361 112768485 . + . Parent=gene572 chr13 ENCODE exon 112772374 112772709 . + . Parent=gene572 ### chr13 ENCODE gene 112767005 112777341 . + . ID=gene573;Name=RP11-98F14.2-026;name2=MCF2L chr13 ENCODE exon 112767005 112767069 . + . Parent=gene573 chr13 ENCODE exon 112767251 112767400 . + . Parent=gene573 chr13 ENCODE exon 112768361 112768485 . + . Parent=gene573 chr13 ENCODE exon 112772374 112772488 . + . Parent=gene573 chr13 ENCODE exon 112776759 112776878 . + . Parent=gene573 chr13 ENCODE exon 112777313 112777341 . + . Parent=gene573 ### chr13 ENCODE gene 112786882 112788480 . + . ID=gene574;Name=RP11-98F14.2-027;name2=MCF2L chr13 ENCODE exon 112786882 112787299 . + . Parent=gene574 chr13 ENCODE exon 112787401 112787493 . + . Parent=gene574 chr13 ENCODE exon 112788439 112788480 . + . Parent=gene574 ### chr13 ENCODE gene 112788476 112798756 . + . ID=gene575;Name=RP11-98F14.2-010;name2=MCF2L chr13 ENCODE exon 112788476 112788564 . + . Parent=gene575 chr13 ENCODE CDS 112788476 112788564 . + 0 Parent=gene575 chr13 ENCODE exon 112789550 112789771 . + . Parent=gene575 chr13 ENCODE CDS 112789550 112789771 . + 1 Parent=gene575 chr13 ENCODE exon 112790022 112790114 . + . Parent=gene575 chr13 ENCODE CDS 112790022 112790114 . + 1 Parent=gene575 chr13 ENCODE exon 112790642 112790720 . + . Parent=gene575 chr13 ENCODE CDS 112790642 112790720 . + 1 Parent=gene575 chr13 ENCODE exon 112790877 112790943 . + . Parent=gene575 chr13 ENCODE CDS 112790877 112790943 . + 0 Parent=gene575 chr13 ENCODE exon 112791925 112792043 . + . Parent=gene575 chr13 ENCODE CDS 112791925 112792043 . + 2 Parent=gene575 chr13 ENCODE exon 112793436 112793510 . + . Parent=gene575 chr13 ENCODE CDS 112793436 112793510 . + 0 Parent=gene575 chr13 ENCODE exon 112796829 112796950 . + . Parent=gene575 chr13 ENCODE CDS 112796829 112796950 . + 0 Parent=gene575 chr13 ENCODE exon 112798686 112798756 . + . Parent=gene575 chr13 ENCODE CDS 112798686 112798756 . + 1 Parent=gene575 ### chr13 ENCODE gene 112788503 112798714 . + . ID=gene576;Name=RP11-98F14.2-011;name2=MCF2L chr13 ENCODE exon 112788503 112788564 . + . Parent=gene576 chr13 ENCODE CDS 112788503 112788564 . + 0 Parent=gene576 chr13 ENCODE exon 112789550 112789771 . + . Parent=gene576 chr13 ENCODE CDS 112789550 112789771 . + 1 Parent=gene576 chr13 ENCODE exon 112790022 112790114 . + . Parent=gene576 chr13 ENCODE CDS 112790022 112790114 . + 1 Parent=gene576 chr13 ENCODE exon 112790642 112790720 . + . Parent=gene576 chr13 ENCODE CDS 112790642 112790720 . + 1 Parent=gene576 chr13 ENCODE exon 112790877 112790943 . + . Parent=gene576 chr13 ENCODE CDS 112790877 112790943 . + 0 Parent=gene576 chr13 ENCODE exon 112791925 112792043 . + . Parent=gene576 chr13 ENCODE CDS 112791925 112792043 . + 2 Parent=gene576 chr13 ENCODE exon 112792383 112792466 . + . Parent=gene576 chr13 ENCODE CDS 112792383 112792466 . + 0 Parent=gene576 chr13 ENCODE exon 112793436 112793510 . + . Parent=gene576 chr13 ENCODE CDS 112793436 112793510 . + 0 Parent=gene576 chr13 ENCODE exon 112796829 112796950 . + . Parent=gene576 chr13 ENCODE CDS 112796829 112796950 . + 0 Parent=gene576 chr13 ENCODE exon 112798686 112798714 . + . Parent=gene576 chr13 ENCODE CDS 112798686 112798714 . + 1 Parent=gene576 ### chr13 ENCODE gene 112789714 112799984 . + . ID=gene577;Name=RP11-98F14.2-029;name2=MCF2L chr13 ENCODE exon 112789714 112789771 . + . Parent=gene577 chr13 ENCODE CDS 112789714 112789771 . + 0 Parent=gene577 chr13 ENCODE exon 112790022 112790114 . + . Parent=gene577 chr13 ENCODE CDS 112790022 112790114 . + 2 Parent=gene577 chr13 ENCODE exon 112790642 112790720 . + . Parent=gene577 chr13 ENCODE CDS 112790642 112790720 . + 2 Parent=gene577 chr13 ENCODE exon 112790877 112790943 . + . Parent=gene577 chr13 ENCODE CDS 112790877 112790943 . + 1 Parent=gene577 chr13 ENCODE exon 112791925 112792043 . + . Parent=gene577 chr13 ENCODE CDS 112791925 112792043 . + 0 Parent=gene577 chr13 ENCODE exon 112792383 112792475 . + . Parent=gene577 chr13 ENCODE CDS 112792383 112792475 . + 1 Parent=gene577 chr13 ENCODE exon 112793436 112793510 . + . Parent=gene577 chr13 ENCODE CDS 112793436 112793510 . + 1 Parent=gene577 chr13 ENCODE exon 112796829 112796950 . + . Parent=gene577 chr13 ENCODE CDS 112796829 112796950 . + 1 Parent=gene577 chr13 ENCODE exon 112798686 112798798 . + . Parent=gene577 chr13 ENCODE CDS 112798686 112798798 . + 2 Parent=gene577 chr13 ENCODE exon 112798865 112798968 . + . Parent=gene577 chr13 ENCODE CDS 112798865 112798968 . + 0 Parent=gene577 chr13 ENCODE CDS 112799089 112799174 . + 1 Parent=gene577 chr13 ENCODE exon 112799089 112799984 . + . Parent=gene577 ### chr13 ENCODE gene 112790111 112796919 . + . ID=gene578;Name=RP11-98F14.2-012;name2=MCF2L chr13 ENCODE exon 112790111 112790114 . + . Parent=gene578 chr13 ENCODE CDS 112790111 112790114 . + 0 Parent=gene578 chr13 ENCODE exon 112790642 112790720 . + . Parent=gene578 chr13 ENCODE CDS 112790642 112790720 . + 2 Parent=gene578 chr13 ENCODE exon 112790877 112790943 . + . Parent=gene578 chr13 ENCODE CDS 112790877 112790943 . + 1 Parent=gene578 chr13 ENCODE exon 112791925 112792043 . + . Parent=gene578 chr13 ENCODE CDS 112791925 112792043 . + 0 Parent=gene578 chr13 ENCODE exon 112792383 112792475 . + . Parent=gene578 chr13 ENCODE CDS 112792383 112792475 . + 1 Parent=gene578 chr13 ENCODE exon 112796829 112796919 . + . Parent=gene578 chr13 ENCODE CDS 112796829 112796919 . + 1 Parent=gene578 ### chr13 ENCODE gene 112790930 112798769 . + . ID=gene579;Name=RP11-98F14.2-013;name2=MCF2L chr13 ENCODE exon 112790930 112790943 . + . Parent=gene579 chr13 ENCODE CDS 112790930 112790943 . + 0 Parent=gene579 chr13 ENCODE exon 112791925 112792043 . + . Parent=gene579 chr13 ENCODE CDS 112791925 112792043 . + 1 Parent=gene579 chr13 ENCODE exon 112792383 112792475 . + . Parent=gene579 chr13 ENCODE CDS 112792383 112792475 . + 2 Parent=gene579 chr13 ENCODE exon 112793436 112793510 . + . Parent=gene579 chr13 ENCODE CDS 112793436 112793510 . + 2 Parent=gene579 chr13 ENCODE exon 112796829 112796950 . + . Parent=gene579 chr13 ENCODE CDS 112796829 112796950 . + 2 Parent=gene579 chr13 ENCODE exon 112798686 112798769 . + . Parent=gene579 chr13 ENCODE CDS 112798686 112798769 . + 0 Parent=gene579 ### chr13 ENCODE gene 112792006 112797493 . + . ID=gene580;Name=RP11-98F14.2-014;name2=MCF2L chr13 ENCODE exon 112792006 112792043 . + . Parent=gene580 chr13 ENCODE exon 112796829 112796950 . + . Parent=gene580 chr13 ENCODE exon 112797284 112797493 . + . Parent=gene580 ### chr13 ENCODE gene 112793284 112797174 . + . ID=gene581;Name=RP11-98F14.2-028;name2=MCF2L chr13 ENCODE exon 112793284 112793510 . + . Parent=gene581 chr13 ENCODE exon 112796829 112797174 . + . Parent=gene581 ### chr13 ENCODE gene 112795916 112800863 . + . ID=gene582;name2=MCF2L;Name=RP11-98F14.2-021 chr13 ENCODE exon 112795916 112796950 . + . Parent=gene582 chr13 ENCODE exon 112798686 112798798 . + . Parent=gene582 chr13 ENCODE exon 112798865 112798968 . + . Parent=gene582 chr13 ENCODE exon 112799089 112800863 . + . Parent=gene582 ### chr13 ENCODE gene 112797537 112800861 . + . ID=gene583;Name=RP11-98F14.2-020;name2=MCF2L chr13 ENCODE exon 112797537 112798968 . + . Parent=gene583 chr13 ENCODE exon 112799089 112800861 . + . Parent=gene583 ### chr13 ENCODE gene 112808106 112822346 . + . ID=gene584;Name=RP11-98F14.7-002;name2=F7 chr13 ENCODE exon 112808106 112808220 . + . Parent=gene584 chr13 ENCODE CDS 112808157 112808220 . + 0 Parent=gene584 chr13 ENCODE exon 112813005 112813165 . + . Parent=gene584 chr13 ENCODE CDS 112813005 112813165 . + 2 Parent=gene584 chr13 ENCODE exon 112816067 112816091 . + . Parent=gene584 chr13 ENCODE CDS 112816067 112816091 . + 0 Parent=gene584 chr13 ENCODE exon 112816162 112816275 . + . Parent=gene584 chr13 ENCODE CDS 112816162 112816275 . + 2 Parent=gene584 chr13 ENCODE exon 112817975 112818115 . + . Parent=gene584 chr13 ENCODE CDS 112817975 112818115 . + 2 Parent=gene584 chr13 ENCODE exon 112819081 112819190 . + . Parent=gene584 chr13 ENCODE CDS 112819081 112819190 . + 2 Parent=gene584 chr13 ENCODE exon 112819788 112819911 . + . Parent=gene584 chr13 ENCODE CDS 112819788 112819911 . + 0 Parent=gene584 chr13 ENCODE CDS 112820728 112821323 . + 2 Parent=gene584 chr13 ENCODE exon 112820728 112822346 . + . Parent=gene584 ### chr13 ENCODE gene 112808122 112822996 . + . ID=gene585;Name=RP11-98F14.7-001;name2=F7 chr13 ENCODE exon 112808122 112808220 . + . Parent=gene585 chr13 ENCODE CDS 112808157 112808220 . + 0 Parent=gene585 chr13 ENCODE exon 112809160 112809225 . + . Parent=gene585 chr13 ENCODE CDS 112809160 112809225 . + 2 Parent=gene585 chr13 ENCODE exon 112813005 112813165 . + . Parent=gene585 chr13 ENCODE CDS 112813005 112813165 . + 2 Parent=gene585 chr13 ENCODE exon 112816067 112816091 . + . Parent=gene585 chr13 ENCODE CDS 112816067 112816091 . + 0 Parent=gene585 chr13 ENCODE exon 112816162 112816275 . + . Parent=gene585 chr13 ENCODE CDS 112816162 112816275 . + 2 Parent=gene585 chr13 ENCODE exon 112817975 112818115 . + . Parent=gene585 chr13 ENCODE CDS 112817975 112818115 . + 2 Parent=gene585 chr13 ENCODE exon 112819081 112819190 . + . Parent=gene585 chr13 ENCODE CDS 112819081 112819190 . + 2 Parent=gene585 chr13 ENCODE exon 112819788 112819911 . + . Parent=gene585 chr13 ENCODE CDS 112819788 112819911 . + 0 Parent=gene585 chr13 ENCODE CDS 112820728 112821323 . + 2 Parent=gene585 chr13 ENCODE exon 112820728 112822996 . + . Parent=gene585 ### chr13 ENCODE gene 112808154 112819103 . + . ID=gene586;Name=RP11-98F14.7-004;name2=F7 chr13 ENCODE exon 112808154 112808220 . + . Parent=gene586 chr13 ENCODE exon 112813019 112813165 . + . Parent=gene586 chr13 ENCODE exon 112816090 112816275 . + . Parent=gene586 chr13 ENCODE exon 112817975 112818115 . + . Parent=gene586 chr13 ENCODE exon 112819081 112819103 . + . Parent=gene586 ### chr13 ENCODE gene 112812655 112819150 . + . ID=gene587;Name=RP11-98F14.7-003;name2=F7 chr13 ENCODE exon 112812655 112813165 . + . Parent=gene587 chr13 ENCODE exon 112816090 112816275 . + . Parent=gene587 chr13 ENCODE exon 112819081 112819150 . + . Parent=gene587 ### chr13 ENCODE gene 112812994 112817218 . + . ID=gene588;name2=F7;Name=RP11-98F14.7-005 chr13 ENCODE exon 112812994 112813165 . + . Parent=gene588 chr13 ENCODE exon 112816067 112816091 . + . Parent=gene588 chr13 ENCODE exon 112816162 112816275 . + . Parent=gene588 chr13 ENCODE exon 112816879 112817099 . + . Parent=gene588 chr13 ENCODE exon 112817193 112817218 . + . Parent=gene588 ### chr13 ENCODE gene 112825129 112831927 . + . ID=gene589;Name=RP11-98F14.9-002;name2=F10 chr13 ENCODE exon 112825129 112825240 . + . Parent=gene589 chr13 ENCODE exon 112831767 112831927 . + . Parent=gene589 ### chr13 ENCODE gene 112825133 112831927 . + . ID=gene590;Name=RP11-98F14.9-001;name2=F10 chr13 ENCODE exon 112825133 112825240 . + . Parent=gene590 chr13 ENCODE exon 112831767 112831927 . + . Parent=gene590 ### chr13 ENCODE gene 112825134 112831927 . + . ID=gene591;Name=RP11-98F14.9-003;name2=F10 chr13 ENCODE exon 112825134 112825240 . + . Parent=gene591 chr13 ENCODE exon 112831767 112831927 . + . Parent=gene591 ### chr13 ENCODE gene 112825151 112832621 . + . ID=gene592;Name=RP11-98F14.9-005;name2=F10 chr13 ENCODE exon 112825151 112825240 . + . Parent=gene592 chr13 ENCODE exon 112831767 112831927 . + . Parent=gene592 chr13 ENCODE exon 112832309 112832621 . + . Parent=gene592 ### chr13 ENCODE gene 112825153 112831927 . + . ID=gene593;Name=RP11-98F14.9-006;name2=F10 chr13 ENCODE exon 112825153 112825240 . + . Parent=gene593 chr13 ENCODE exon 112831767 112831927 . + . Parent=gene593 ### chr14 ENCODE gene 98705377 98807318 . - . ID=gene594;Name=AL162151.2-001;name2=BCL11B chr14 ENCODE exon 98705377 98712285 . - . Parent=gene594 chr14 ENCODE CDS 98710241 98712285 . - 2 Parent=gene594 chr14 ENCODE exon 98767435 98767647 . - . Parent=gene594 chr14 ENCODE CDS 98767435 98767647 . - 2 Parent=gene594 chr14 ENCODE exon 98793561 98793929 . - . Parent=gene594 chr14 ENCODE CDS 98793561 98793929 . - 2 Parent=gene594 chr14 ENCODE CDS 98807251 98807308 . - 0 Parent=gene594 chr14 ENCODE exon 98807251 98807318 . - . Parent=gene594 ### chr14 ENCODE gene 98705377 98807575 . - . ID=gene595;Name=AL162151.2-002;name2=BCL11B chr14 ENCODE exon 98705377 98712285 . - . Parent=gene595 chr14 ENCODE CDS 98710241 98712285 . - 2 Parent=gene595 chr14 ENCODE exon 98793561 98793929 . - . Parent=gene595 chr14 ENCODE CDS 98793561 98793929 . - 2 Parent=gene595 chr14 ENCODE CDS 98807251 98807308 . - 0 Parent=gene595 chr14 ENCODE exon 98807251 98807575 . - . Parent=gene595 ### chr14 ENCODE gene 98710051 98807614 . - . ID=gene596;Name=AL162151.2-003;name2=BCL11B chr14 ENCODE exon 98710051 98712285 . - . Parent=gene596 chr14 ENCODE CDS 98710241 98712285 . - 2 Parent=gene596 chr14 ENCODE CDS 98807251 98807308 . - 0 Parent=gene596 chr14 ENCODE exon 98807251 98807614 . - . Parent=gene596 ### chr14 ENCODE gene 98933836 98950024 . - . ID=gene597;Name=AL132819.1-001;name2=SETD3 chr14 ENCODE exon 98933836 98935215 . - . Parent=gene597 chr14 ENCODE exon 98936189 98936349 . - . Parent=gene597 chr14 ENCODE exon 98940315 98940400 . - . Parent=gene597 chr14 ENCODE exon 98941295 98941461 . - . Parent=gene597 chr14 ENCODE exon 98942606 98942680 . - . Parent=gene597 chr14 ENCODE exon 98949041 98949155 . - . Parent=gene597 chr14 ENCODE exon 98949966 98950024 . - . Parent=gene597 ### chr14 ENCODE gene 98934559 98942680 . - . ID=gene598;Name=AL132819.1-005;name2=SETD3 chr14 ENCODE exon 98934559 98935215 . - . Parent=gene598 chr14 ENCODE exon 98936189 98936349 . - . Parent=gene598 chr14 ENCODE exon 98940315 98940400 . - . Parent=gene598 chr14 ENCODE exon 98941295 98941461 . - . Parent=gene598 chr14 ENCODE exon 98942606 98942680 . - . Parent=gene598 ### chr14 ENCODE gene 98934822 98949340 . - . ID=gene599;Name=AL132819.1-006;name2=SETD3 chr14 ENCODE exon 98934822 98935215 . - . Parent=gene599 chr14 ENCODE exon 98936189 98936349 . - . Parent=gene599 chr14 ENCODE exon 98949041 98949340 . - . Parent=gene599 ### chr14 ENCODE gene 98941405 98950024 . - . ID=gene600;Name=AL132819.1-008;name2=SETD3 chr14 ENCODE exon 98941405 98941461 . - . Parent=gene600 chr14 ENCODE exon 98942606 98942680 . - . Parent=gene600 chr14 ENCODE exon 98949041 98949155 . - . Parent=gene600 chr14 ENCODE exon 98949966 98950024 . - . Parent=gene600 ### chr14 ENCODE gene 98945894 98950024 . - . ID=gene601;Name=AL132819.1-003;name2=SETD3 chr14 ENCODE exon 98945894 98946305 . - . Parent=gene601 chr14 ENCODE exon 98949041 98949155 . - . Parent=gene601 chr14 ENCODE exon 98949966 98950024 . - . Parent=gene601 ### chr14 ENCODE gene 98947369 98950024 . - . ID=gene602;Name=AL132819.1-002;name2=SETD3 chr14 ENCODE exon 98947369 98949155 . - . Parent=gene602 chr14 ENCODE exon 98949966 98950024 . - . Parent=gene602 ### chr14 ENCODE gene 98947668 98950024 . - . ID=gene603;Name=AL132819.1-004;name2=SETD3 chr14 ENCODE exon 98947668 98949155 . - . Parent=gene603 chr14 ENCODE exon 98949966 98950024 . - . Parent=gene603 ### chr15 ENCODE gene 41520749 41535642 . - . ID=gene604;Name=AC018924.1-007;name2=TP53BP1 chr15 ENCODE exon 41520749 41521073 . - . Parent=gene604 chr15 ENCODE exon 41535382 41535642 . - . Parent=gene604 ### chr15 ENCODE gene 41521016 41535821 . - . ID=gene605;Name=AC018924.1-011;name2=TP53BP1 chr15 ENCODE exon 41521016 41521073 . - . Parent=gene605 chr15 ENCODE exon 41525877 41526080 . - . Parent=gene605 chr15 ENCODE exon 41526256 41526404 . - . Parent=gene605 chr15 ENCODE exon 41526856 41526975 . - . Parent=gene605 chr15 ENCODE exon 41535382 41535821 . - . Parent=gene605 ### chr15 ENCODE gene 41521016 41572576 . - . ID=gene606;Name=AC018924.1-005;name2=TP53BP1 chr15 ENCODE exon 41521016 41521073 . - . Parent=gene606 chr15 ENCODE exon 41525877 41526080 . - . Parent=gene606 chr15 ENCODE exon 41535382 41536708 . - . Parent=gene606 chr15 ENCODE exon 41549348 41549556 . - . Parent=gene606 chr15 ENCODE exon 41554163 41554257 . - . Parent=gene606 chr15 ENCODE exon 41555055 41555184 . - . Parent=gene606 chr15 ENCODE exon 41557083 41557249 . - . Parent=gene606 chr15 ENCODE exon 41558887 41559016 . - . Parent=gene606 chr15 ENCODE exon 41559349 41559507 . - . Parent=gene606 chr15 ENCODE exon 41560385 41560512 . - . Parent=gene606 chr15 ENCODE exon 41571159 41571243 . - . Parent=gene606 chr15 ENCODE exon 41571492 41571585 . - . Parent=gene606 chr15 ENCODE exon 41571774 41571958 . - . Parent=gene606 chr15 ENCODE exon 41572527 41572576 . - . Parent=gene606 ### chr15 ENCODE gene 41521016 41572595 . - . ID=gene607;Name=AC018924.1-004;name2=TP53BP1 chr15 ENCODE exon 41521016 41521073 . - . Parent=gene607 chr15 ENCODE exon 41525877 41526080 . - . Parent=gene607 chr15 ENCODE exon 41526856 41526975 . - . Parent=gene607 chr15 ENCODE exon 41535382 41536708 . - . Parent=gene607 chr15 ENCODE exon 41549348 41549556 . - . Parent=gene607 chr15 ENCODE exon 41554163 41554257 . - . Parent=gene607 chr15 ENCODE exon 41555055 41555184 . - . Parent=gene607 chr15 ENCODE exon 41557083 41557249 . - . Parent=gene607 chr15 ENCODE exon 41558887 41559016 . - . Parent=gene607 chr15 ENCODE exon 41559349 41559507 . - . Parent=gene607 chr15 ENCODE exon 41560385 41560512 . - . Parent=gene607 chr15 ENCODE exon 41571159 41571243 . - . Parent=gene607 chr15 ENCODE exon 41571492 41571585 . - . Parent=gene607 chr15 ENCODE exon 41571774 41571958 . - . Parent=gene607 chr15 ENCODE exon 41572527 41572595 . - . Parent=gene607 ### chr15 ENCODE gene 41521016 41572661 . - . ID=gene608;Name=AC018924.1-001;name2=TP53BP1 chr15 ENCODE exon 41521016 41521073 . - . Parent=gene608 chr15 ENCODE exon 41525877 41526080 . - . Parent=gene608 chr15 ENCODE exon 41526856 41526975 . - . Parent=gene608 chr15 ENCODE exon 41535382 41536708 . - . Parent=gene608 chr15 ENCODE exon 41549348 41549556 . - . Parent=gene608 chr15 ENCODE exon 41554163 41554257 . - . Parent=gene608 chr15 ENCODE exon 41555055 41555184 . - . Parent=gene608 chr15 ENCODE exon 41557083 41557249 . - . Parent=gene608 chr15 ENCODE exon 41558887 41559016 . - . Parent=gene608 chr15 ENCODE exon 41559349 41559507 . - . Parent=gene608 chr15 ENCODE exon 41560385 41560512 . - . Parent=gene608 chr15 ENCODE exon 41571159 41571243 . - . Parent=gene608 chr15 ENCODE exon 41571492 41571585 . - . Parent=gene608 chr15 ENCODE exon 41571774 41571958 . - . Parent=gene608 chr15 ENCODE exon 41572527 41572661 . - . Parent=gene608 ### chr15 ENCODE gene 41521016 41590104 . - . ID=gene609;Name=AC018924.1-002;name2=TP53BP1 chr15 ENCODE exon 41521016 41521073 . - . Parent=gene609 chr15 ENCODE exon 41525877 41526080 . - . Parent=gene609 chr15 ENCODE exon 41526856 41526975 . - . Parent=gene609 chr15 ENCODE exon 41535382 41536708 . - . Parent=gene609 chr15 ENCODE exon 41549348 41549556 . - . Parent=gene609 chr15 ENCODE exon 41554163 41554257 . - . Parent=gene609 chr15 ENCODE exon 41555055 41555184 . - . Parent=gene609 chr15 ENCODE exon 41557083 41557249 . - . Parent=gene609 chr15 ENCODE exon 41558887 41559016 . - . Parent=gene609 chr15 ENCODE exon 41559349 41559507 . - . Parent=gene609 chr15 ENCODE exon 41560385 41560512 . - . Parent=gene609 chr15 ENCODE exon 41571159 41571243 . - . Parent=gene609 chr15 ENCODE exon 41571492 41571585 . - . Parent=gene609 chr15 ENCODE exon 41571774 41571958 . - . Parent=gene609 chr15 ENCODE exon 41589860 41590104 . - . Parent=gene609 ### chr15 ENCODE gene 41526645 41535514 . - . ID=gene610;Name=AC018924.1-006;name2=TP53BP1 chr15 ENCODE exon 41526645 41526975 . - . Parent=gene610 chr15 ENCODE CDS 41526848 41526975 . - 2 Parent=gene610 chr15 ENCODE exon 41535382 41535514 . - . Parent=gene610 chr15 ENCODE CDS 41535382 41535514 . - 0 Parent=gene610 ### chr15 ENCODE gene 41576928 41590218 . - . ID=gene611;name2=TP53BP1;Name=AC018924.1-012 chr15 ENCODE exon 41576928 41577028 . - . Parent=gene611 chr15 ENCODE exon 41589860 41590218 . - . Parent=gene611 ### chr15 ENCODE gene 41590448 41611110 . + . ID=gene612;Name=AC019011.1-002;name2=MAP1A chr15 ENCODE exon 41590448 41590716 . + . Parent=gene612 chr15 ENCODE CDS 41590479 41590716 . + 0 Parent=gene612 chr15 ENCODE exon 41591680 41591781 . + . Parent=gene612 chr15 ENCODE CDS 41591680 41591781 . + 2 Parent=gene612 chr15 ENCODE exon 41600131 41600213 . + . Parent=gene612 chr15 ENCODE CDS 41600131 41600213 . + 2 Parent=gene612 chr15 ENCODE exon 41600462 41600602 . + . Parent=gene612 chr15 ENCODE CDS 41600462 41600602 . + 0 Parent=gene612 chr15 ENCODE exon 41600814 41608998 . + . Parent=gene612 chr15 ENCODE CDS 41600814 41608998 . + 0 Parent=gene612 chr15 ENCODE exon 41609140 41609360 . + . Parent=gene612 chr15 ENCODE CDS 41609140 41609360 . + 2 Parent=gene612 chr15 ENCODE CDS 41609559 41609714 . + 0 Parent=gene612 chr15 ENCODE exon 41609559 41611110 . + . Parent=gene612 ### chr15 ENCODE gene 41597115 41611110 . + . ID=gene613;name2=MAP1A;Name=AC019011.1-001 chr15 ENCODE exon 41597115 41597190 . + . Parent=gene613 chr15 ENCODE exon 41600131 41600213 . + . Parent=gene613 chr15 ENCODE exon 41600462 41600602 . + . Parent=gene613 chr15 ENCODE exon 41600814 41608998 . + . Parent=gene613 chr15 ENCODE CDS 41600964 41608998 . + 0 Parent=gene613 chr15 ENCODE exon 41609140 41609360 . + . Parent=gene613 chr15 ENCODE CDS 41609140 41609360 . + 2 Parent=gene613 chr15 ENCODE CDS 41609559 41609714 . + 0 Parent=gene613 chr15 ENCODE exon 41609559 41611110 . + . Parent=gene613 ### chr15 ENCODE gene 41612952 41664354 . - . ID=gene614;Name=AC019011.2-006;name2=AC019011.2 chr15 ENCODE exon 41612952 41614966 . - . Parent=gene614 chr15 ENCODE CDS 41614164 41614966 . - 2 Parent=gene614 chr15 ENCODE exon 41618960 41619073 . - . Parent=gene614 chr15 ENCODE CDS 41618960 41619073 . - 2 Parent=gene614 chr15 ENCODE exon 41638285 41638422 . - . Parent=gene614 chr15 ENCODE CDS 41638285 41638422 . - 2 Parent=gene614 chr15 ENCODE exon 41643593 41643655 . - . Parent=gene614 chr15 ENCODE CDS 41643593 41643655 . - 2 Parent=gene614 chr15 ENCODE exon 41644357 41644482 . - . Parent=gene614 chr15 ENCODE CDS 41644357 41644482 . - 2 Parent=gene614 chr15 ENCODE exon 41647953 41648043 . - . Parent=gene614 chr15 ENCODE CDS 41647953 41648043 . - 0 Parent=gene614 chr15 ENCODE exon 41650902 41651066 . - . Parent=gene614 chr15 ENCODE CDS 41650902 41651066 . - 0 Parent=gene614 chr15 ENCODE exon 41651214 41651330 . - . Parent=gene614 chr15 ENCODE CDS 41651214 41651330 . - 0 Parent=gene614 chr15 ENCODE exon 41652259 41652366 . - . Parent=gene614 chr15 ENCODE CDS 41652259 41652366 . - 0 Parent=gene614 chr15 ENCODE exon 41652524 41652638 . - . Parent=gene614 chr15 ENCODE CDS 41652524 41652638 . - 1 Parent=gene614 chr15 ENCODE exon 41652847 41652974 . - . Parent=gene614 chr15 ENCODE CDS 41652847 41652974 . - 0 Parent=gene614 chr15 ENCODE exon 41653299 41653522 . - . Parent=gene614 chr15 ENCODE CDS 41653299 41653522 . - 2 Parent=gene614 chr15 ENCODE exon 41653712 41653853 . - . Parent=gene614 chr15 ENCODE CDS 41653712 41653853 . - 0 Parent=gene614 chr15 ENCODE exon 41655861 41656043 . - . Parent=gene614 chr15 ENCODE CDS 41655861 41656043 . - 0 Parent=gene614 chr15 ENCODE exon 41656317 41656438 . - . Parent=gene614 chr15 ENCODE CDS 41656317 41656438 . - 2 Parent=gene614 chr15 ENCODE exon 41656598 41656729 . - . Parent=gene614 chr15 ENCODE CDS 41656598 41656729 . - 2 Parent=gene614 chr15 ENCODE exon 41656943 41657025 . - . Parent=gene614 chr15 ENCODE CDS 41656943 41657025 . - 1 Parent=gene614 chr15 ENCODE exon 41657112 41657221 . - . Parent=gene614 chr15 ENCODE CDS 41657112 41657221 . - 0 Parent=gene614 chr15 ENCODE exon 41657366 41657441 . - . Parent=gene614 chr15 ENCODE CDS 41657366 41657441 . - 1 Parent=gene614 chr15 ENCODE exon 41657560 41657646 . - . Parent=gene614 chr15 ENCODE CDS 41657560 41657646 . - 1 Parent=gene614 chr15 ENCODE exon 41658509 41658610 . - . Parent=gene614 chr15 ENCODE CDS 41658509 41658610 . - 1 Parent=gene614 chr15 ENCODE exon 41660492 41660613 . - . Parent=gene614 chr15 ENCODE CDS 41660492 41660613 . - 0 Parent=gene614 chr15 ENCODE exon 41660717 41660878 . - . Parent=gene614 chr15 ENCODE CDS 41660717 41660878 . - 0 Parent=gene614 chr15 ENCODE exon 41661343 41661444 . - . Parent=gene614 chr15 ENCODE CDS 41661343 41661444 . - 0 Parent=gene614 chr15 ENCODE exon 41661585 41661739 . - . Parent=gene614 chr15 ENCODE CDS 41661585 41661739 . - 2 Parent=gene614 chr15 ENCODE exon 41662054 41662139 . - . Parent=gene614 chr15 ENCODE CDS 41662054 41662139 . - 1 Parent=gene614 chr15 ENCODE exon 41662352 41662442 . - . Parent=gene614 chr15 ENCODE CDS 41662352 41662442 . - 2 Parent=gene614 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene614 chr15 ENCODE CDS 41662894 41663089 . - 0 Parent=gene614 chr15 ENCODE CDS 41663848 41663994 . - 0 Parent=gene614 chr15 ENCODE exon 41663848 41664022 . - . Parent=gene614 chr15 ENCODE exon 41664289 41664354 . - . Parent=gene614 ### chr15 ENCODE gene 41612952 41669665 . - . ID=gene615;Name=AC019011.2-003;name2=AC019011.2 chr15 ENCODE exon 41612952 41614966 . - . Parent=gene615 chr15 ENCODE CDS 41614164 41614966 . - 2 Parent=gene615 chr15 ENCODE exon 41618960 41619073 . - . Parent=gene615 chr15 ENCODE CDS 41618960 41619073 . - 2 Parent=gene615 chr15 ENCODE exon 41638285 41638422 . - . Parent=gene615 chr15 ENCODE CDS 41638285 41638422 . - 2 Parent=gene615 chr15 ENCODE exon 41644357 41644482 . - . Parent=gene615 chr15 ENCODE CDS 41644357 41644482 . - 2 Parent=gene615 chr15 ENCODE exon 41647953 41648043 . - . Parent=gene615 chr15 ENCODE CDS 41647953 41648043 . - 0 Parent=gene615 chr15 ENCODE exon 41650902 41651066 . - . Parent=gene615 chr15 ENCODE CDS 41650902 41651066 . - 0 Parent=gene615 chr15 ENCODE exon 41651214 41651330 . - . Parent=gene615 chr15 ENCODE CDS 41651214 41651330 . - 0 Parent=gene615 chr15 ENCODE exon 41652259 41652366 . - . Parent=gene615 chr15 ENCODE CDS 41652259 41652366 . - 0 Parent=gene615 chr15 ENCODE exon 41652524 41652638 . - . Parent=gene615 chr15 ENCODE CDS 41652524 41652638 . - 1 Parent=gene615 chr15 ENCODE exon 41652847 41652974 . - . Parent=gene615 chr15 ENCODE CDS 41652847 41652974 . - 0 Parent=gene615 chr15 ENCODE exon 41653299 41653522 . - . Parent=gene615 chr15 ENCODE CDS 41653299 41653522 . - 2 Parent=gene615 chr15 ENCODE exon 41653712 41653853 . - . Parent=gene615 chr15 ENCODE CDS 41653712 41653853 . - 0 Parent=gene615 chr15 ENCODE exon 41655861 41656043 . - . Parent=gene615 chr15 ENCODE CDS 41655861 41656043 . - 0 Parent=gene615 chr15 ENCODE exon 41656317 41656438 . - . Parent=gene615 chr15 ENCODE CDS 41656317 41656438 . - 2 Parent=gene615 chr15 ENCODE exon 41656598 41656729 . - . Parent=gene615 chr15 ENCODE CDS 41656598 41656729 . - 2 Parent=gene615 chr15 ENCODE exon 41656943 41657025 . - . Parent=gene615 chr15 ENCODE CDS 41656943 41657025 . - 1 Parent=gene615 chr15 ENCODE exon 41657112 41657221 . - . Parent=gene615 chr15 ENCODE CDS 41657112 41657221 . - 0 Parent=gene615 chr15 ENCODE exon 41657366 41657441 . - . Parent=gene615 chr15 ENCODE CDS 41657366 41657441 . - 1 Parent=gene615 chr15 ENCODE exon 41657560 41657646 . - . Parent=gene615 chr15 ENCODE CDS 41657560 41657646 . - 1 Parent=gene615 chr15 ENCODE exon 41658509 41658610 . - . Parent=gene615 chr15 ENCODE CDS 41658509 41658610 . - 1 Parent=gene615 chr15 ENCODE exon 41660492 41660613 . - . Parent=gene615 chr15 ENCODE CDS 41660492 41660613 . - 0 Parent=gene615 chr15 ENCODE exon 41660717 41660878 . - . Parent=gene615 chr15 ENCODE CDS 41660717 41660878 . - 0 Parent=gene615 chr15 ENCODE exon 41661343 41661444 . - . Parent=gene615 chr15 ENCODE CDS 41661343 41661444 . - 0 Parent=gene615 chr15 ENCODE exon 41661585 41661739 . - . Parent=gene615 chr15 ENCODE CDS 41661585 41661739 . - 2 Parent=gene615 chr15 ENCODE exon 41662054 41662139 . - . Parent=gene615 chr15 ENCODE CDS 41662054 41662139 . - 1 Parent=gene615 chr15 ENCODE exon 41662352 41662442 . - . Parent=gene615 chr15 ENCODE CDS 41662352 41662442 . - 2 Parent=gene615 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene615 chr15 ENCODE CDS 41662894 41663089 . - 0 Parent=gene615 chr15 ENCODE CDS 41663848 41663994 . - 0 Parent=gene615 chr15 ENCODE exon 41663848 41664022 . - . Parent=gene615 chr15 ENCODE exon 41664289 41664382 . - . Parent=gene615 chr15 ENCODE exon 41669662 41669665 . - . Parent=gene615 ### chr15 ENCODE gene 41612952 41669665 . - . ID=gene616;Name=AC019011.2-004;name2=AC019011.2 chr15 ENCODE exon 41612952 41614966 . - . Parent=gene616 chr15 ENCODE CDS 41614164 41614966 . - 2 Parent=gene616 chr15 ENCODE exon 41615625 41615744 . - . Parent=gene616 chr15 ENCODE CDS 41615625 41615744 . - 2 Parent=gene616 chr15 ENCODE exon 41618960 41619073 . - . Parent=gene616 chr15 ENCODE CDS 41618960 41619073 . - 2 Parent=gene616 chr15 ENCODE exon 41638285 41638422 . - . Parent=gene616 chr15 ENCODE CDS 41638285 41638422 . - 2 Parent=gene616 chr15 ENCODE exon 41647953 41648043 . - . Parent=gene616 chr15 ENCODE CDS 41647953 41648043 . - 0 Parent=gene616 chr15 ENCODE exon 41650902 41651066 . - . Parent=gene616 chr15 ENCODE CDS 41650902 41651066 . - 0 Parent=gene616 chr15 ENCODE exon 41651214 41651330 . - . Parent=gene616 chr15 ENCODE CDS 41651214 41651330 . - 0 Parent=gene616 chr15 ENCODE exon 41652259 41652366 . - . Parent=gene616 chr15 ENCODE CDS 41652259 41652366 . - 0 Parent=gene616 chr15 ENCODE exon 41652524 41652638 . - . Parent=gene616 chr15 ENCODE CDS 41652524 41652638 . - 1 Parent=gene616 chr15 ENCODE exon 41652847 41652974 . - . Parent=gene616 chr15 ENCODE CDS 41652847 41652974 . - 0 Parent=gene616 chr15 ENCODE exon 41653299 41653522 . - . Parent=gene616 chr15 ENCODE CDS 41653299 41653522 . - 2 Parent=gene616 chr15 ENCODE exon 41653712 41653853 . - . Parent=gene616 chr15 ENCODE CDS 41653712 41653853 . - 0 Parent=gene616 chr15 ENCODE exon 41655861 41656043 . - . Parent=gene616 chr15 ENCODE CDS 41655861 41656043 . - 0 Parent=gene616 chr15 ENCODE exon 41656317 41656438 . - . Parent=gene616 chr15 ENCODE CDS 41656317 41656438 . - 2 Parent=gene616 chr15 ENCODE exon 41656598 41656729 . - . Parent=gene616 chr15 ENCODE CDS 41656598 41656729 . - 2 Parent=gene616 chr15 ENCODE exon 41656943 41657025 . - . Parent=gene616 chr15 ENCODE CDS 41656943 41657025 . - 1 Parent=gene616 chr15 ENCODE exon 41657112 41657221 . - . Parent=gene616 chr15 ENCODE CDS 41657112 41657221 . - 0 Parent=gene616 chr15 ENCODE exon 41657366 41657441 . - . Parent=gene616 chr15 ENCODE CDS 41657366 41657441 . - 1 Parent=gene616 chr15 ENCODE exon 41657560 41657646 . - . Parent=gene616 chr15 ENCODE CDS 41657560 41657646 . - 1 Parent=gene616 chr15 ENCODE exon 41658509 41658610 . - . Parent=gene616 chr15 ENCODE CDS 41658509 41658610 . - 1 Parent=gene616 chr15 ENCODE exon 41660492 41660613 . - . Parent=gene616 chr15 ENCODE CDS 41660492 41660613 . - 0 Parent=gene616 chr15 ENCODE exon 41660717 41660878 . - . Parent=gene616 chr15 ENCODE CDS 41660717 41660878 . - 0 Parent=gene616 chr15 ENCODE exon 41661343 41661444 . - . Parent=gene616 chr15 ENCODE CDS 41661343 41661444 . - 0 Parent=gene616 chr15 ENCODE exon 41661585 41661739 . - . Parent=gene616 chr15 ENCODE CDS 41661585 41661739 . - 2 Parent=gene616 chr15 ENCODE exon 41662054 41662139 . - . Parent=gene616 chr15 ENCODE CDS 41662054 41662139 . - 1 Parent=gene616 chr15 ENCODE exon 41662352 41662442 . - . Parent=gene616 chr15 ENCODE CDS 41662352 41662442 . - 2 Parent=gene616 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene616 chr15 ENCODE CDS 41662894 41663089 . - 0 Parent=gene616 chr15 ENCODE CDS 41663848 41663994 . - 0 Parent=gene616 chr15 ENCODE exon 41663848 41664022 . - . Parent=gene616 chr15 ENCODE exon 41664289 41664382 . - . Parent=gene616 chr15 ENCODE exon 41669662 41669665 . - . Parent=gene616 ### chr15 ENCODE gene 41612952 41669691 . - . ID=gene617;name2=AC019011.2;Name=AC019011.2-005 chr15 ENCODE exon 41612952 41614966 . - . Parent=gene617 chr15 ENCODE CDS 41614164 41614966 . - 2 Parent=gene617 chr15 ENCODE exon 41618960 41619073 . - . Parent=gene617 chr15 ENCODE CDS 41618960 41619073 . - 2 Parent=gene617 chr15 ENCODE exon 41638285 41638422 . - . Parent=gene617 chr15 ENCODE CDS 41638285 41638422 . - 2 Parent=gene617 chr15 ENCODE exon 41644357 41644482 . - . Parent=gene617 chr15 ENCODE CDS 41644357 41644482 . - 2 Parent=gene617 chr15 ENCODE exon 41647953 41648043 . - . Parent=gene617 chr15 ENCODE CDS 41647953 41648043 . - 0 Parent=gene617 chr15 ENCODE exon 41650902 41651066 . - . Parent=gene617 chr15 ENCODE CDS 41650902 41651066 . - 0 Parent=gene617 chr15 ENCODE exon 41651214 41651330 . - . Parent=gene617 chr15 ENCODE CDS 41651214 41651330 . - 0 Parent=gene617 chr15 ENCODE exon 41652259 41652366 . - . Parent=gene617 chr15 ENCODE CDS 41652259 41652366 . - 0 Parent=gene617 chr15 ENCODE exon 41652524 41652638 . - . Parent=gene617 chr15 ENCODE CDS 41652524 41652638 . - 1 Parent=gene617 chr15 ENCODE exon 41652847 41652974 . - . Parent=gene617 chr15 ENCODE CDS 41652847 41652974 . - 0 Parent=gene617 chr15 ENCODE exon 41653299 41653522 . - . Parent=gene617 chr15 ENCODE CDS 41653299 41653522 . - 2 Parent=gene617 chr15 ENCODE exon 41653712 41653853 . - . Parent=gene617 chr15 ENCODE CDS 41653712 41653853 . - 0 Parent=gene617 chr15 ENCODE exon 41655861 41656043 . - . Parent=gene617 chr15 ENCODE CDS 41655861 41656043 . - 0 Parent=gene617 chr15 ENCODE exon 41656317 41656438 . - . Parent=gene617 chr15 ENCODE CDS 41656317 41656438 . - 2 Parent=gene617 chr15 ENCODE exon 41656598 41656729 . - . Parent=gene617 chr15 ENCODE CDS 41656598 41656729 . - 2 Parent=gene617 chr15 ENCODE exon 41656943 41657025 . - . Parent=gene617 chr15 ENCODE CDS 41656943 41657025 . - 1 Parent=gene617 chr15 ENCODE exon 41657112 41657221 . - . Parent=gene617 chr15 ENCODE CDS 41657112 41657221 . - 0 Parent=gene617 chr15 ENCODE exon 41657366 41657441 . - . Parent=gene617 chr15 ENCODE CDS 41657366 41657441 . - 1 Parent=gene617 chr15 ENCODE exon 41657560 41657646 . - . Parent=gene617 chr15 ENCODE CDS 41657560 41657646 . - 1 Parent=gene617 chr15 ENCODE exon 41658509 41658610 . - . Parent=gene617 chr15 ENCODE CDS 41658509 41658610 . - 1 Parent=gene617 chr15 ENCODE exon 41660492 41660613 . - . Parent=gene617 chr15 ENCODE CDS 41660492 41660613 . - 0 Parent=gene617 chr15 ENCODE exon 41660717 41660878 . - . Parent=gene617 chr15 ENCODE CDS 41660717 41660878 . - 0 Parent=gene617 chr15 ENCODE exon 41661343 41661444 . - . Parent=gene617 chr15 ENCODE CDS 41661343 41661444 . - 0 Parent=gene617 chr15 ENCODE exon 41661585 41661739 . - . Parent=gene617 chr15 ENCODE CDS 41661585 41661739 . - 2 Parent=gene617 chr15 ENCODE exon 41662054 41662139 . - . Parent=gene617 chr15 ENCODE CDS 41662054 41662139 . - 1 Parent=gene617 chr15 ENCODE exon 41662352 41662442 . - . Parent=gene617 chr15 ENCODE CDS 41662352 41662442 . - 2 Parent=gene617 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene617 chr15 ENCODE CDS 41662894 41663089 . - 0 Parent=gene617 chr15 ENCODE CDS 41663848 41663994 . - 0 Parent=gene617 chr15 ENCODE exon 41663848 41664111 . - . Parent=gene617 chr15 ENCODE exon 41669662 41669691 . - . Parent=gene617 ### chr15 ENCODE gene 41612952 41669697 . - . ID=gene618;Name=AC019011.2-001;name2=AC019011.2 chr15 ENCODE exon 41612952 41614966 . - . Parent=gene618 chr15 ENCODE CDS 41614164 41614966 . - 2 Parent=gene618 chr15 ENCODE exon 41618960 41619073 . - . Parent=gene618 chr15 ENCODE CDS 41618960 41619073 . - 2 Parent=gene618 chr15 ENCODE exon 41638285 41638422 . - . Parent=gene618 chr15 ENCODE CDS 41638285 41638422 . - 2 Parent=gene618 chr15 ENCODE exon 41644357 41644482 . - . Parent=gene618 chr15 ENCODE CDS 41644357 41644482 . - 2 Parent=gene618 chr15 ENCODE exon 41647953 41648043 . - . Parent=gene618 chr15 ENCODE CDS 41647953 41648043 . - 0 Parent=gene618 chr15 ENCODE exon 41650902 41651066 . - . Parent=gene618 chr15 ENCODE CDS 41650902 41651066 . - 0 Parent=gene618 chr15 ENCODE exon 41651214 41651330 . - . Parent=gene618 chr15 ENCODE CDS 41651214 41651330 . - 0 Parent=gene618 chr15 ENCODE exon 41652259 41652366 . - . Parent=gene618 chr15 ENCODE CDS 41652259 41652366 . - 0 Parent=gene618 chr15 ENCODE exon 41652524 41652638 . - . Parent=gene618 chr15 ENCODE CDS 41652524 41652638 . - 1 Parent=gene618 chr15 ENCODE exon 41652847 41652974 . - . Parent=gene618 chr15 ENCODE CDS 41652847 41652974 . - 0 Parent=gene618 chr15 ENCODE exon 41653299 41653522 . - . Parent=gene618 chr15 ENCODE CDS 41653299 41653522 . - 2 Parent=gene618 chr15 ENCODE exon 41653712 41653850 . - . Parent=gene618 chr15 ENCODE CDS 41653712 41653850 . - 0 Parent=gene618 chr15 ENCODE exon 41655861 41656043 . - . Parent=gene618 chr15 ENCODE CDS 41655861 41656043 . - 0 Parent=gene618 chr15 ENCODE exon 41656317 41656438 . - . Parent=gene618 chr15 ENCODE CDS 41656317 41656438 . - 2 Parent=gene618 chr15 ENCODE exon 41656598 41656729 . - . Parent=gene618 chr15 ENCODE CDS 41656598 41656729 . - 2 Parent=gene618 chr15 ENCODE exon 41656943 41657025 . - . Parent=gene618 chr15 ENCODE CDS 41656943 41657025 . - 1 Parent=gene618 chr15 ENCODE exon 41657112 41657221 . - . Parent=gene618 chr15 ENCODE CDS 41657112 41657221 . - 0 Parent=gene618 chr15 ENCODE exon 41657366 41657441 . - . Parent=gene618 chr15 ENCODE CDS 41657366 41657441 . - 1 Parent=gene618 chr15 ENCODE exon 41657560 41657646 . - . Parent=gene618 chr15 ENCODE CDS 41657560 41657646 . - 1 Parent=gene618 chr15 ENCODE exon 41658509 41658610 . - . Parent=gene618 chr15 ENCODE CDS 41658509 41658610 . - 1 Parent=gene618 chr15 ENCODE exon 41660492 41660613 . - . Parent=gene618 chr15 ENCODE CDS 41660492 41660613 . - 0 Parent=gene618 chr15 ENCODE exon 41660717 41660878 . - . Parent=gene618 chr15 ENCODE CDS 41660717 41660878 . - 0 Parent=gene618 chr15 ENCODE exon 41661343 41661444 . - . Parent=gene618 chr15 ENCODE CDS 41661343 41661444 . - 0 Parent=gene618 chr15 ENCODE exon 41661585 41661739 . - . Parent=gene618 chr15 ENCODE CDS 41661585 41661739 . - 2 Parent=gene618 chr15 ENCODE exon 41662054 41662139 . - . Parent=gene618 chr15 ENCODE CDS 41662054 41662139 . - 1 Parent=gene618 chr15 ENCODE exon 41662352 41662442 . - . Parent=gene618 chr15 ENCODE CDS 41662352 41662442 . - 2 Parent=gene618 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene618 chr15 ENCODE CDS 41662894 41663089 . - 0 Parent=gene618 chr15 ENCODE CDS 41663848 41663994 . - 0 Parent=gene618 chr15 ENCODE exon 41663848 41664022 . - . Parent=gene618 chr15 ENCODE exon 41664289 41664382 . - . Parent=gene618 chr15 ENCODE exon 41669662 41669697 . - . Parent=gene618 ### chr15 ENCODE gene 41612952 41728419 . - . ID=gene619;Name=AC019011.2-002;name2=AC019011.2 chr15 ENCODE exon 41612952 41614966 . - . Parent=gene619 chr15 ENCODE CDS 41614164 41614966 . - 2 Parent=gene619 chr15 ENCODE exon 41618960 41619073 . - . Parent=gene619 chr15 ENCODE CDS 41618960 41619073 . - 2 Parent=gene619 chr15 ENCODE exon 41638285 41638422 . - . Parent=gene619 chr15 ENCODE CDS 41638285 41638422 . - 2 Parent=gene619 chr15 ENCODE exon 41643593 41643655 . - . Parent=gene619 chr15 ENCODE CDS 41643593 41643655 . - 2 Parent=gene619 chr15 ENCODE exon 41644357 41644482 . - . Parent=gene619 chr15 ENCODE CDS 41644357 41644482 . - 2 Parent=gene619 chr15 ENCODE exon 41647953 41648043 . - . Parent=gene619 chr15 ENCODE CDS 41647953 41648043 . - 0 Parent=gene619 chr15 ENCODE exon 41650902 41651066 . - . Parent=gene619 chr15 ENCODE CDS 41650902 41651066 . - 0 Parent=gene619 chr15 ENCODE exon 41651214 41651330 . - . Parent=gene619 chr15 ENCODE CDS 41651214 41651330 . - 0 Parent=gene619 chr15 ENCODE exon 41652259 41652366 . - . Parent=gene619 chr15 ENCODE CDS 41652259 41652366 . - 0 Parent=gene619 chr15 ENCODE exon 41652524 41652650 . - . Parent=gene619 chr15 ENCODE CDS 41652524 41652650 . - 1 Parent=gene619 chr15 ENCODE exon 41652847 41652974 . - . Parent=gene619 chr15 ENCODE CDS 41652847 41652974 . - 0 Parent=gene619 chr15 ENCODE exon 41653299 41653522 . - . Parent=gene619 chr15 ENCODE CDS 41653299 41653522 . - 2 Parent=gene619 chr15 ENCODE exon 41653712 41653853 . - . Parent=gene619 chr15 ENCODE CDS 41653712 41653853 . - 0 Parent=gene619 chr15 ENCODE exon 41655861 41656043 . - . Parent=gene619 chr15 ENCODE CDS 41655861 41656043 . - 0 Parent=gene619 chr15 ENCODE exon 41656317 41656438 . - . Parent=gene619 chr15 ENCODE CDS 41656317 41656438 . - 2 Parent=gene619 chr15 ENCODE exon 41656598 41656729 . - . Parent=gene619 chr15 ENCODE CDS 41656598 41656729 . - 2 Parent=gene619 chr15 ENCODE exon 41656943 41657025 . - . Parent=gene619 chr15 ENCODE CDS 41656943 41657025 . - 1 Parent=gene619 chr15 ENCODE exon 41657112 41657221 . - . Parent=gene619 chr15 ENCODE CDS 41657112 41657221 . - 0 Parent=gene619 chr15 ENCODE exon 41657366 41657441 . - . Parent=gene619 chr15 ENCODE CDS 41657366 41657441 . - 1 Parent=gene619 chr15 ENCODE exon 41657560 41657646 . - . Parent=gene619 chr15 ENCODE CDS 41657560 41657646 . - 1 Parent=gene619 chr15 ENCODE exon 41658509 41658610 . - . Parent=gene619 chr15 ENCODE CDS 41658509 41658610 . - 1 Parent=gene619 chr15 ENCODE exon 41660492 41660613 . - . Parent=gene619 chr15 ENCODE CDS 41660492 41660613 . - 0 Parent=gene619 chr15 ENCODE exon 41660717 41660878 . - . Parent=gene619 chr15 ENCODE CDS 41660717 41660878 . - 0 Parent=gene619 chr15 ENCODE exon 41661343 41661444 . - . Parent=gene619 chr15 ENCODE CDS 41661343 41661444 . - 0 Parent=gene619 chr15 ENCODE exon 41661585 41661739 . - . Parent=gene619 chr15 ENCODE CDS 41661585 41661739 . - 2 Parent=gene619 chr15 ENCODE exon 41662054 41662139 . - . Parent=gene619 chr15 ENCODE CDS 41662054 41662139 . - 1 Parent=gene619 chr15 ENCODE exon 41662352 41662442 . - . Parent=gene619 chr15 ENCODE CDS 41662352 41662442 . - 2 Parent=gene619 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene619 chr15 ENCODE CDS 41662894 41663089 . - 0 Parent=gene619 chr15 ENCODE CDS 41663848 41663994 . - 0 Parent=gene619 chr15 ENCODE exon 41663848 41664022 . - . Parent=gene619 chr15 ENCODE exon 41664289 41664382 . - . Parent=gene619 chr15 ENCODE exon 41728412 41728419 . - . Parent=gene619 ### chr15 ENCODE gene 41613304 41664336 . - . ID=gene620;Name=AC019011.2-007;name2=AC019011.2 chr15 ENCODE exon 41613304 41614742 . - . Parent=gene620 chr15 ENCODE exon 41638349 41638422 . - . Parent=gene620 chr15 ENCODE exon 41643593 41643655 . - . Parent=gene620 chr15 ENCODE exon 41644357 41644482 . - . Parent=gene620 chr15 ENCODE exon 41647953 41648043 . - . Parent=gene620 chr15 ENCODE exon 41650902 41650999 . - . Parent=gene620 chr15 ENCODE exon 41652354 41652366 . - . Parent=gene620 chr15 ENCODE exon 41652524 41652638 . - . Parent=gene620 chr15 ENCODE exon 41652871 41652974 . - . Parent=gene620 chr15 ENCODE exon 41653299 41653522 . - . Parent=gene620 chr15 ENCODE exon 41653712 41653853 . - . Parent=gene620 chr15 ENCODE exon 41655861 41656043 . - . Parent=gene620 chr15 ENCODE exon 41656317 41656438 . - . Parent=gene620 chr15 ENCODE exon 41656598 41656729 . - . Parent=gene620 chr15 ENCODE exon 41656943 41657025 . - . Parent=gene620 chr15 ENCODE exon 41657112 41657221 . - . Parent=gene620 chr15 ENCODE exon 41657366 41657441 . - . Parent=gene620 chr15 ENCODE exon 41657560 41657646 . - . Parent=gene620 chr15 ENCODE exon 41658509 41658610 . - . Parent=gene620 chr15 ENCODE exon 41660492 41660613 . - . Parent=gene620 chr15 ENCODE exon 41660717 41660878 . - . Parent=gene620 chr15 ENCODE exon 41661343 41661444 . - . Parent=gene620 chr15 ENCODE exon 41661585 41661739 . - . Parent=gene620 chr15 ENCODE exon 41662054 41662139 . - . Parent=gene620 chr15 ENCODE exon 41662352 41662442 . - . Parent=gene620 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene620 chr15 ENCODE exon 41663848 41664022 . - . Parent=gene620 chr15 ENCODE exon 41664289 41664336 . - . Parent=gene620 ### chr15 ENCODE gene 41627897 41648006 . - . ID=gene621;Name=AC019011.2-014;name2=AC019011.2 chr15 ENCODE exon 41627897 41628173 . - . Parent=gene621 chr15 ENCODE exon 41638285 41638422 . - . Parent=gene621 chr15 ENCODE exon 41644357 41644482 . - . Parent=gene621 chr15 ENCODE exon 41647953 41648006 . - . Parent=gene621 ### chr15 ENCODE gene 41638320 41650987 . - . ID=gene622;Name=AC019011.2-016;name2=AC019011.2 chr15 ENCODE exon 41638320 41638422 . - . Parent=gene622 chr15 ENCODE CDS 41638320 41638422 . - 0 Parent=gene622 chr15 ENCODE exon 41639903 41640085 . - . Parent=gene622 chr15 ENCODE CDS 41639903 41640085 . - 0 Parent=gene622 chr15 ENCODE exon 41644357 41644482 . - . Parent=gene622 chr15 ENCODE CDS 41644357 41644482 . - 0 Parent=gene622 chr15 ENCODE exon 41647953 41648043 . - . Parent=gene622 chr15 ENCODE CDS 41647953 41648043 . - 1 Parent=gene622 chr15 ENCODE exon 41650902 41650987 . - . Parent=gene622 chr15 ENCODE CDS 41650902 41650987 . - 0 Parent=gene622 ### chr15 ENCODE gene 41644357 41652925 . - . ID=gene623;Name=AC019011.2-012;name2=AC019011.2 chr15 ENCODE exon 41644357 41644482 . - . Parent=gene623 chr15 ENCODE CDS 41644357 41644482 . - 0 Parent=gene623 chr15 ENCODE exon 41647953 41648043 . - . Parent=gene623 chr15 ENCODE CDS 41647953 41648043 . - 1 Parent=gene623 chr15 ENCODE exon 41650902 41651066 . - . Parent=gene623 chr15 ENCODE CDS 41650902 41651066 . - 1 Parent=gene623 chr15 ENCODE exon 41651214 41651330 . - . Parent=gene623 chr15 ENCODE CDS 41651214 41651330 . - 1 Parent=gene623 chr15 ENCODE exon 41652259 41652366 . - . Parent=gene623 chr15 ENCODE CDS 41652259 41652366 . - 1 Parent=gene623 chr15 ENCODE exon 41652524 41652638 . - . Parent=gene623 chr15 ENCODE CDS 41652524 41652638 . - 2 Parent=gene623 chr15 ENCODE exon 41652871 41652925 . - . Parent=gene623 chr15 ENCODE CDS 41652871 41652925 . - 0 Parent=gene623 ### chr15 ENCODE gene 41650951 41652672 . - . ID=gene624;Name=AC019011.2-013;name2=AC019011.2 chr15 ENCODE exon 41650951 41651066 . - . Parent=gene624 chr15 ENCODE exon 41651214 41651330 . - . Parent=gene624 chr15 ENCODE exon 41652259 41652672 . - . Parent=gene624 ### chr15 ENCODE gene 41652603 41669680 . - . ID=gene625;Name=AC019011.2-015;name2=AC019011.2 chr15 ENCODE exon 41652603 41652974 . - . Parent=gene625 chr15 ENCODE exon 41653299 41653522 . - . Parent=gene625 chr15 ENCODE exon 41653712 41653853 . - . Parent=gene625 chr15 ENCODE exon 41655861 41656043 . - . Parent=gene625 chr15 ENCODE exon 41656317 41656438 . - . Parent=gene625 chr15 ENCODE exon 41656598 41656729 . - . Parent=gene625 chr15 ENCODE exon 41656943 41657025 . - . Parent=gene625 chr15 ENCODE exon 41657112 41657221 . - . Parent=gene625 chr15 ENCODE exon 41657366 41657441 . - . Parent=gene625 chr15 ENCODE exon 41657560 41657646 . - . Parent=gene625 chr15 ENCODE exon 41658509 41658610 . - . Parent=gene625 chr15 ENCODE exon 41660492 41660613 . - . Parent=gene625 chr15 ENCODE exon 41660717 41660878 . - . Parent=gene625 chr15 ENCODE exon 41661343 41661444 . - . Parent=gene625 chr15 ENCODE exon 41661585 41661739 . - . Parent=gene625 chr15 ENCODE exon 41662054 41662139 . - . Parent=gene625 chr15 ENCODE exon 41662352 41662442 . - . Parent=gene625 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene625 chr15 ENCODE exon 41663848 41664111 . - . Parent=gene625 chr15 ENCODE exon 41669662 41669680 . - . Parent=gene625 ### chr15 ENCODE gene 41653330 41654125 . - . ID=gene626;Name=AC019011.2-011;name2=AC019011.2 chr15 ENCODE exon 41653330 41653522 . - . Parent=gene626 chr15 ENCODE exon 41653712 41654125 . - . Parent=gene626 ### chr15 ENCODE gene 41655658 41656330 . - . ID=gene627;Name=AC019011.2-021;name2=AC019011.2 chr15 ENCODE exon 41655658 41656043 . - . Parent=gene627 chr15 ENCODE exon 41656317 41656330 . - . Parent=gene627 ### chr15 ENCODE gene 41655832 41656438 . - . ID=gene628;Name=AC019011.2-010;name2=AC019011.2 chr15 ENCODE exon 41655832 41656043 . - . Parent=gene628 chr15 ENCODE exon 41656317 41656438 . - . Parent=gene628 ### chr15 ENCODE gene 41658564 41661682 . - . ID=gene629;name2=AC019011.2;Name=AC019011.2-020 chr15 ENCODE exon 41658564 41658610 . - . Parent=gene629 chr15 ENCODE exon 41660492 41660613 . - . Parent=gene629 chr15 ENCODE exon 41660717 41660919 . - . Parent=gene629 chr15 ENCODE exon 41661343 41661444 . - . Parent=gene629 chr15 ENCODE exon 41661585 41661682 . - . Parent=gene629 ### chr15 ENCODE gene 41661178 41661707 . - . ID=gene630;Name=AC019011.2-019;name2=AC019011.2 chr15 ENCODE exon 41661178 41661444 . - . Parent=gene630 chr15 ENCODE exon 41661585 41661707 . - . Parent=gene630 ### chr15 ENCODE gene 41662240 41663942 . - . ID=gene631;Name=AC019011.2-018;name2=AC019011.2 chr15 ENCODE exon 41662240 41662442 . - . Parent=gene631 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene631 chr15 ENCODE exon 41663848 41663942 . - . Parent=gene631 ### chr15 ENCODE gene 41662386 41669645 . - . ID=gene632;Name=AC019011.2-017;name2=AC019011.2 chr15 ENCODE exon 41662386 41662442 . - . Parent=gene632 chr15 ENCODE CDS 41662386 41662442 . - 2 Parent=gene632 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene632 chr15 ENCODE CDS 41662894 41663089 . - 0 Parent=gene632 chr15 ENCODE CDS 41663848 41663994 . - 0 Parent=gene632 chr15 ENCODE exon 41663848 41664022 . - . Parent=gene632 chr15 ENCODE exon 41664289 41664382 . - . Parent=gene632 chr15 ENCODE exon 41669372 41669645 . - . Parent=gene632 ### chr15 ENCODE gene 41662894 41669674 . - . ID=gene633;Name=AC019011.2-008;name2=AC019011.2 chr15 ENCODE exon 41662894 41663089 . - . Parent=gene633 chr15 ENCODE CDS 41662894 41663089 . - 0 Parent=gene633 chr15 ENCODE CDS 41663848 41663994 . - 0 Parent=gene633 chr15 ENCODE exon 41663848 41664079 . - . Parent=gene633 chr15 ENCODE exon 41664289 41664382 . - . Parent=gene633 chr15 ENCODE exon 41669662 41669674 . - . Parent=gene633 ### chr15 ENCODE gene 41663022 41669686 . - . ID=gene634;Name=AC019011.2-009;name2=AC019011.2 chr15 ENCODE exon 41663022 41663089 . - . Parent=gene634 chr15 ENCODE CDS 41663022 41663089 . - 0 Parent=gene634 chr15 ENCODE CDS 41663848 41663994 . - 0 Parent=gene634 chr15 ENCODE exon 41663848 41664022 . - . Parent=gene634 chr15 ENCODE exon 41669662 41669686 . - . Parent=gene634 ### chr15 ENCODE gene 41672544 41675754 . + . ID=gene635;Name=AC011330.1-003;name2=CKMT1B chr15 ENCODE exon 41672544 41672761 . + . Parent=gene635 chr15 ENCODE exon 41673535 41673857 . + . Parent=gene635 chr15 ENCODE CDS 41673709 41673857 . + 0 Parent=gene635 chr15 ENCODE exon 41674462 41674660 . + . Parent=gene635 chr15 ENCODE CDS 41674462 41674660 . + 1 Parent=gene635 chr15 ENCODE exon 41674864 41674959 . + . Parent=gene635 chr15 ENCODE CDS 41674864 41674959 . + 0 Parent=gene635 chr15 ENCODE exon 41675346 41675567 . + . Parent=gene635 chr15 ENCODE CDS 41675346 41675567 . + 0 Parent=gene635 chr15 ENCODE exon 41675697 41675754 . + . Parent=gene635 chr15 ENCODE CDS 41675697 41675754 . + 0 Parent=gene635 ### chr15 ENCODE gene 41672553 41674902 . + . ID=gene636;Name=AC011330.1-004;name2=CKMT1B chr15 ENCODE exon 41672553 41672761 . + . Parent=gene636 chr15 ENCODE exon 41673673 41673857 . + . Parent=gene636 chr15 ENCODE CDS 41673709 41673857 . + 0 Parent=gene636 chr15 ENCODE exon 41674462 41674660 . + . Parent=gene636 chr15 ENCODE CDS 41674462 41674660 . + 1 Parent=gene636 chr15 ENCODE exon 41674864 41674902 . + . Parent=gene636 chr15 ENCODE CDS 41674864 41674902 . + 0 Parent=gene636 ### chr15 ENCODE gene 41672577 41673912 . + . ID=gene637;Name=AC011330.1-005;name2=CKMT1B chr15 ENCODE exon 41672577 41672761 . + . Parent=gene637 chr15 ENCODE exon 41673535 41673912 . + . Parent=gene637 ### chr15 ENCODE gene 41672698 41674597 . + . ID=gene638;Name=AC011330.1-007;name2=CKMT1B chr15 ENCODE exon 41672698 41672761 . + . Parent=gene638 chr15 ENCODE exon 41673535 41673857 . + . Parent=gene638 chr15 ENCODE exon 41674185 41674597 . + . Parent=gene638 ### chr15 ENCODE gene 41673509 41674434 . + . ID=gene639;Name=AC011330.1-006;name2=CKMT1B chr15 ENCODE exon 41673509 41673857 . + . Parent=gene639 chr15 ENCODE exon 41674185 41674434 . + . Parent=gene639 ### chr15 ENCODE gene 41673517 41678896 . + . ID=gene640;Name=AC011330.1-002;name2=CKMT1B chr15 ENCODE exon 41673517 41673857 . + . Parent=gene640 chr15 ENCODE exon 41674462 41674660 . + . Parent=gene640 chr15 ENCODE exon 41674864 41674959 . + . Parent=gene640 chr15 ENCODE exon 41675346 41675567 . + . Parent=gene640 chr15 ENCODE exon 41675697 41675782 . + . Parent=gene640 chr15 ENCODE exon 41675898 41676021 . + . Parent=gene640 chr15 ENCODE exon 41676866 41677817 . + . Parent=gene640 chr15 ENCODE exon 41678317 41678442 . + . Parent=gene640 chr15 ENCODE exon 41678647 41678896 . + . Parent=gene640 ### chr15 ENCODE gene 41673529 41678896 . + . ID=gene641;Name=AC011330.1-001;name2=CKMT1B chr15 ENCODE exon 41673529 41673857 . + . Parent=gene641 chr15 ENCODE CDS 41673709 41673857 . + 0 Parent=gene641 chr15 ENCODE exon 41674462 41674660 . + . Parent=gene641 chr15 ENCODE CDS 41674462 41674660 . + 1 Parent=gene641 chr15 ENCODE exon 41674864 41674959 . + . Parent=gene641 chr15 ENCODE CDS 41674864 41674959 . + 0 Parent=gene641 chr15 ENCODE exon 41675346 41675567 . + . Parent=gene641 chr15 ENCODE CDS 41675346 41675567 . + 0 Parent=gene641 chr15 ENCODE exon 41675697 41675782 . + . Parent=gene641 chr15 ENCODE CDS 41675697 41675782 . + 0 Parent=gene641 chr15 ENCODE exon 41675898 41676021 . + . Parent=gene641 chr15 ENCODE CDS 41675898 41676021 . + 1 Parent=gene641 chr15 ENCODE exon 41677683 41677817 . + . Parent=gene641 chr15 ENCODE CDS 41677683 41677817 . + 0 Parent=gene641 chr15 ENCODE exon 41678317 41678442 . + . Parent=gene641 chr15 ENCODE CDS 41678317 41678442 . + 0 Parent=gene641 chr15 ENCODE CDS 41678647 41678763 . + 0 Parent=gene641 chr15 ENCODE exon 41678647 41678896 . + . Parent=gene641 ### chr15 ENCODE gene 41678888 41698290 . - . ID=gene642;Name=AC011330.2-001;name2=STRC chr15 ENCODE exon 41678888 41679250 . - . Parent=gene642 chr15 ENCODE CDS 41679162 41679250 . - 2 Parent=gene642 chr15 ENCODE exon 41679450 41679597 . - . Parent=gene642 chr15 ENCODE CDS 41679450 41679597 . - 0 Parent=gene642 chr15 ENCODE exon 41679686 41679783 . - . Parent=gene642 chr15 ENCODE CDS 41679686 41679783 . - 2 Parent=gene642 chr15 ENCODE exon 41680024 41680172 . - . Parent=gene642 chr15 ENCODE CDS 41680024 41680172 . - 1 Parent=gene642 chr15 ENCODE exon 41680362 41680504 . - . Parent=gene642 chr15 ENCODE CDS 41680362 41680504 . - 0 Parent=gene642 chr15 ENCODE exon 41680886 41681041 . - . Parent=gene642 chr15 ENCODE CDS 41680886 41681041 . - 0 Parent=gene642 chr15 ENCODE exon 41682732 41682901 . - . Parent=gene642 chr15 ENCODE CDS 41682732 41682901 . - 2 Parent=gene642 chr15 ENCODE exon 41683486 41683642 . - . Parent=gene642 chr15 ENCODE CDS 41683486 41683642 . - 0 Parent=gene642 chr15 ENCODE exon 41683851 41683941 . - . Parent=gene642 chr15 ENCODE CDS 41683851 41683941 . - 1 Parent=gene642 chr15 ENCODE exon 41684140 41684336 . - . Parent=gene642 chr15 ENCODE CDS 41684140 41684336 . - 0 Parent=gene642 chr15 ENCODE exon 41684754 41684889 . - . Parent=gene642 chr15 ENCODE CDS 41684754 41684889 . - 1 Parent=gene642 chr15 ENCODE exon 41687353 41687465 . - . Parent=gene642 chr15 ENCODE CDS 41687353 41687465 . - 0 Parent=gene642 chr15 ENCODE exon 41687570 41687693 . - . Parent=gene642 chr15 ENCODE CDS 41687570 41687693 . - 1 Parent=gene642 chr15 ENCODE exon 41688766 41688824 . - . Parent=gene642 chr15 ENCODE CDS 41688766 41688824 . - 0 Parent=gene642 chr15 ENCODE exon 41689802 41689927 . - . Parent=gene642 chr15 ENCODE CDS 41689802 41689927 . - 0 Parent=gene642 chr15 ENCODE exon 41690409 41690474 . - . Parent=gene642 chr15 ENCODE CDS 41690409 41690474 . - 0 Parent=gene642 chr15 ENCODE exon 41690638 41690805 . - . Parent=gene642 chr15 ENCODE CDS 41690638 41690805 . - 0 Parent=gene642 chr15 ENCODE exon 41690989 41691027 . - . Parent=gene642 chr15 ENCODE CDS 41690989 41691027 . - 0 Parent=gene642 chr15 ENCODE exon 41691332 41691514 . - . Parent=gene642 chr15 ENCODE CDS 41691332 41691514 . - 0 Parent=gene642 chr15 ENCODE exon 41691867 41691999 . - . Parent=gene642 chr15 ENCODE CDS 41691867 41691999 . - 1 Parent=gene642 chr15 ENCODE exon 41692281 41692396 . - . Parent=gene642 chr15 ENCODE CDS 41692281 41692396 . - 0 Parent=gene642 chr15 ENCODE exon 41692535 41692721 . - . Parent=gene642 chr15 ENCODE CDS 41692535 41692721 . - 1 Parent=gene642 chr15 ENCODE exon 41693377 41693543 . - . Parent=gene642 chr15 ENCODE CDS 41693377 41693543 . - 0 Parent=gene642 chr15 ENCODE exon 41693686 41693802 . - . Parent=gene642 chr15 ENCODE CDS 41693686 41693802 . - 0 Parent=gene642 chr15 ENCODE exon 41693904 41693966 . - . Parent=gene642 chr15 ENCODE CDS 41693904 41693966 . - 0 Parent=gene642 chr15 ENCODE exon 41694923 41696180 . - . Parent=gene642 chr15 ENCODE CDS 41694923 41696180 . - 1 Parent=gene642 chr15 ENCODE exon 41696948 41696972 . - . Parent=gene642 chr15 ENCODE CDS 41696948 41696972 . - 2 Parent=gene642 chr15 ENCODE exon 41697061 41697846 . - . Parent=gene642 chr15 ENCODE CDS 41697061 41697846 . - 2 Parent=gene642 chr15 ENCODE CDS 41698149 41698212 . - 0 Parent=gene642 chr15 ENCODE exon 41698149 41698290 . - . Parent=gene642 ### chr15 ENCODE gene 41679080 41692595 . - . ID=gene643;Name=AC011330.2-002;name2=STRC chr15 ENCODE exon 41679080 41679250 . - . Parent=gene643 chr15 ENCODE exon 41679450 41679597 . - . Parent=gene643 chr15 ENCODE exon 41679686 41679783 . - . Parent=gene643 chr15 ENCODE exon 41680024 41680172 . - . Parent=gene643 chr15 ENCODE exon 41680362 41680504 . - . Parent=gene643 chr15 ENCODE exon 41680886 41681041 . - . Parent=gene643 chr15 ENCODE exon 41682732 41682901 . - . Parent=gene643 chr15 ENCODE exon 41683486 41683642 . - . Parent=gene643 chr15 ENCODE exon 41683851 41683941 . - . Parent=gene643 chr15 ENCODE exon 41684140 41684336 . - . Parent=gene643 chr15 ENCODE exon 41684467 41684637 . - . Parent=gene643 chr15 ENCODE exon 41684754 41684889 . - . Parent=gene643 chr15 ENCODE exon 41687353 41687465 . - . Parent=gene643 chr15 ENCODE exon 41687570 41687693 . - . Parent=gene643 chr15 ENCODE exon 41688766 41688824 . - . Parent=gene643 chr15 ENCODE exon 41689802 41690805 . - . Parent=gene643 chr15 ENCODE exon 41690989 41691027 . - . Parent=gene643 chr15 ENCODE exon 41691332 41691400 . - . Parent=gene643 chr15 ENCODE exon 41692289 41692396 . - . Parent=gene643 chr15 ENCODE exon 41692535 41692595 . - . Parent=gene643 ### chr15 ENCODE gene 41679092 41692677 . - . ID=gene644;Name=AC011330.2-003;name2=STRC chr15 ENCODE exon 41679092 41679250 . - . Parent=gene644 chr15 ENCODE exon 41679450 41679597 . - . Parent=gene644 chr15 ENCODE exon 41679686 41679783 . - . Parent=gene644 chr15 ENCODE exon 41680024 41680172 . - . Parent=gene644 chr15 ENCODE exon 41680362 41680504 . - . Parent=gene644 chr15 ENCODE exon 41680886 41681041 . - . Parent=gene644 chr15 ENCODE exon 41687353 41687465 . - . Parent=gene644 chr15 ENCODE exon 41687570 41687693 . - . Parent=gene644 chr15 ENCODE exon 41688766 41688824 . - . Parent=gene644 chr15 ENCODE exon 41689802 41690805 . - . Parent=gene644 chr15 ENCODE exon 41690989 41691027 . - . Parent=gene644 chr15 ENCODE exon 41691332 41691514 . - . Parent=gene644 chr15 ENCODE exon 41692535 41692677 . - . Parent=gene644 ### chr15 ENCODE gene 41679092 41692704 . - . ID=gene645;Name=AC011330.2-004;name2=STRC chr15 ENCODE exon 41679092 41679250 . - . Parent=gene645 chr15 ENCODE exon 41679450 41679597 . - . Parent=gene645 chr15 ENCODE exon 41679686 41679783 . - . Parent=gene645 chr15 ENCODE exon 41680024 41680172 . - . Parent=gene645 chr15 ENCODE exon 41680362 41680504 . - . Parent=gene645 chr15 ENCODE exon 41680886 41681041 . - . Parent=gene645 chr15 ENCODE exon 41682732 41682901 . - . Parent=gene645 chr15 ENCODE exon 41683486 41683642 . - . Parent=gene645 chr15 ENCODE exon 41683851 41683941 . - . Parent=gene645 chr15 ENCODE exon 41684140 41684336 . - . Parent=gene645 chr15 ENCODE exon 41687353 41687465 . - . Parent=gene645 chr15 ENCODE exon 41687570 41687693 . - . Parent=gene645 chr15 ENCODE exon 41688766 41690805 . - . Parent=gene645 chr15 ENCODE exon 41690989 41691027 . - . Parent=gene645 chr15 ENCODE exon 41691332 41691514 . - . Parent=gene645 chr15 ENCODE exon 41692281 41692396 . - . Parent=gene645 chr15 ENCODE exon 41692535 41692704 . - . Parent=gene645 ### chr15 ENCODE gene 41680053 41681165 . - . ID=gene646;Name=AC011330.2-007;name2=STRC chr15 ENCODE exon 41680053 41680172 . - . Parent=gene646 chr15 ENCODE exon 41680362 41680504 . - . Parent=gene646 chr15 ENCODE exon 41680886 41681165 . - . Parent=gene646 ### chr15 ENCODE gene 41680489 41683072 . - . ID=gene647;Name=AC011330.2-010;name2=STRC chr15 ENCODE exon 41680489 41680504 . - . Parent=gene647 chr15 ENCODE exon 41680886 41681041 . - . Parent=gene647 chr15 ENCODE exon 41682732 41683072 . - . Parent=gene647 ### chr15 ENCODE gene 41684194 41692725 . - . ID=gene648;Name=AC011330.2-006;name2=STRC chr15 ENCODE exon 41684194 41684336 . - . Parent=gene648 chr15 ENCODE exon 41684754 41684889 . - . Parent=gene648 chr15 ENCODE exon 41687353 41687465 . - . Parent=gene648 chr15 ENCODE exon 41687570 41687693 . - . Parent=gene648 chr15 ENCODE exon 41688766 41688824 . - . Parent=gene648 chr15 ENCODE exon 41690989 41691027 . - . Parent=gene648 chr15 ENCODE exon 41691332 41691514 . - . Parent=gene648 chr15 ENCODE exon 41692281 41692396 . - . Parent=gene648 chr15 ENCODE exon 41692535 41692725 . - . Parent=gene648 ### chr15 ENCODE gene 41690684 41692515 . - . ID=gene649;Name=AC011330.2-008;name2=STRC chr15 ENCODE exon 41690684 41690805 . - . Parent=gene649 chr15 ENCODE exon 41690989 41691027 . - . Parent=gene649 chr15 ENCODE exon 41691332 41691514 . - . Parent=gene649 chr15 ENCODE exon 41692289 41692515 . - . Parent=gene649 ### chr15 ENCODE gene 41690689 41692510 . - . ID=gene650;Name=AC011330.2-009;name2=STRC chr15 ENCODE exon 41690689 41690805 . - . Parent=gene650 chr15 ENCODE exon 41690989 41691027 . - . Parent=gene650 chr15 ENCODE exon 41691332 41691514 . - . Parent=gene650 chr15 ENCODE exon 41692281 41692510 . - . Parent=gene650 ### chr15 ENCODE gene 41694617 41697730 . - . ID=gene651;Name=AC011330.2-005;name2=STRC chr15 ENCODE exon 41694617 41696180 . - . Parent=gene651 chr15 ENCODE CDS 41694884 41696180 . - 1 Parent=gene651 chr15 ENCODE exon 41696948 41696972 . - . Parent=gene651 chr15 ENCODE CDS 41696948 41696972 . - 2 Parent=gene651 chr15 ENCODE exon 41697061 41697730 . - . Parent=gene651 chr15 ENCODE CDS 41697061 41697730 . - 0 Parent=gene651 ### chr15 ENCODE gene 41707993 41728334 . - . ID=gene652;Name=AC011330.3-001;name2=CATSPER2 chr15 ENCODE exon 41707993 41710222 . - . Parent=gene652 chr15 ENCODE CDS 41710191 41710222 . - 2 Parent=gene652 chr15 ENCODE exon 41711689 41711853 . - . Parent=gene652 chr15 ENCODE CDS 41711689 41711853 . - 2 Parent=gene652 chr15 ENCODE exon 41712207 41712418 . - . Parent=gene652 chr15 ENCODE CDS 41712207 41712418 . - 1 Parent=gene652 chr15 ENCODE exon 41714850 41714906 . - . Parent=gene652 chr15 ENCODE CDS 41714850 41714906 . - 1 Parent=gene652 chr15 ENCODE exon 41715217 41715316 . - . Parent=gene652 chr15 ENCODE CDS 41715217 41715316 . - 2 Parent=gene652 chr15 ENCODE exon 41715531 41715709 . - . Parent=gene652 chr15 ENCODE CDS 41715531 41715709 . - 1 Parent=gene652 chr15 ENCODE exon 41718394 41718518 . - . Parent=gene652 chr15 ENCODE CDS 41718394 41718518 . - 0 Parent=gene652 chr15 ENCODE exon 41719133 41719288 . - . Parent=gene652 chr15 ENCODE CDS 41719133 41719288 . - 0 Parent=gene652 chr15 ENCODE exon 41719814 41719986 . - . Parent=gene652 chr15 ENCODE CDS 41719814 41719986 . - 2 Parent=gene652 chr15 ENCODE exon 41726540 41726608 . - . Parent=gene652 chr15 ENCODE CDS 41726540 41726608 . - 2 Parent=gene652 chr15 ENCODE exon 41726784 41726957 . - . Parent=gene652 chr15 ENCODE CDS 41726784 41726957 . - 2 Parent=gene652 chr15 ENCODE CDS 41727407 41727551 . - 0 Parent=gene652 chr15 ENCODE exon 41727407 41727556 . - . Parent=gene652 chr15 ENCODE exon 41728119 41728199 . - . Parent=gene652 chr15 ENCODE exon 41728308 41728334 . - . Parent=gene652 ### chr15 ENCODE gene 41710052 41727551 . - . ID=gene653;name2=CATSPER2;Name=AC011330.3-002 chr15 ENCODE exon 41710052 41710222 . - . Parent=gene653 chr15 ENCODE CDS 41710191 41710222 . - 2 Parent=gene653 chr15 ENCODE exon 41711689 41711853 . - . Parent=gene653 chr15 ENCODE CDS 41711689 41711853 . - 2 Parent=gene653 chr15 ENCODE exon 41712207 41712424 . - . Parent=gene653 chr15 ENCODE CDS 41712207 41712424 . - 1 Parent=gene653 chr15 ENCODE exon 41714850 41714906 . - . Parent=gene653 chr15 ENCODE CDS 41714850 41714906 . - 1 Parent=gene653 chr15 ENCODE exon 41715217 41715316 . - . Parent=gene653 chr15 ENCODE CDS 41715217 41715316 . - 2 Parent=gene653 chr15 ENCODE exon 41715531 41715709 . - . Parent=gene653 chr15 ENCODE CDS 41715531 41715709 . - 1 Parent=gene653 chr15 ENCODE exon 41718394 41718518 . - . Parent=gene653 chr15 ENCODE CDS 41718394 41718518 . - 0 Parent=gene653 chr15 ENCODE exon 41719133 41719288 . - . Parent=gene653 chr15 ENCODE CDS 41719133 41719288 . - 0 Parent=gene653 chr15 ENCODE exon 41719814 41719986 . - . Parent=gene653 chr15 ENCODE CDS 41719814 41719986 . - 2 Parent=gene653 chr15 ENCODE exon 41726540 41726608 . - . Parent=gene653 chr15 ENCODE CDS 41726540 41726608 . - 2 Parent=gene653 chr15 ENCODE exon 41726784 41726957 . - . Parent=gene653 chr15 ENCODE CDS 41726784 41726957 . - 2 Parent=gene653 chr15 ENCODE exon 41727407 41727551 . - . Parent=gene653 chr15 ENCODE CDS 41727407 41727551 . - 0 Parent=gene653 ### chr15 ENCODE gene 41710052 41728338 . - . ID=gene654;Name=AC011330.3-004;name2=CATSPER2 chr15 ENCODE exon 41710052 41710222 . - . Parent=gene654 chr15 ENCODE CDS 41710191 41710222 . - 2 Parent=gene654 chr15 ENCODE exon 41711689 41711853 . - . Parent=gene654 chr15 ENCODE CDS 41711689 41711853 . - 2 Parent=gene654 chr15 ENCODE exon 41712207 41712418 . - . Parent=gene654 chr15 ENCODE CDS 41712207 41712418 . - 1 Parent=gene654 chr15 ENCODE exon 41714850 41714906 . - . Parent=gene654 chr15 ENCODE CDS 41714850 41714906 . - 1 Parent=gene654 chr15 ENCODE exon 41715217 41715316 . - . Parent=gene654 chr15 ENCODE CDS 41715217 41715316 . - 2 Parent=gene654 chr15 ENCODE exon 41715531 41715709 . - . Parent=gene654 chr15 ENCODE CDS 41715531 41715709 . - 1 Parent=gene654 chr15 ENCODE exon 41718394 41718518 . - . Parent=gene654 chr15 ENCODE CDS 41718394 41718518 . - 0 Parent=gene654 chr15 ENCODE exon 41719133 41719288 . - . Parent=gene654 chr15 ENCODE CDS 41719133 41719288 . - 0 Parent=gene654 chr15 ENCODE exon 41719814 41719986 . - . Parent=gene654 chr15 ENCODE CDS 41719814 41719986 . - 2 Parent=gene654 chr15 ENCODE exon 41726540 41726608 . - . Parent=gene654 chr15 ENCODE CDS 41726540 41726608 . - 2 Parent=gene654 chr15 ENCODE exon 41726784 41726957 . - . Parent=gene654 chr15 ENCODE CDS 41726784 41726957 . - 2 Parent=gene654 chr15 ENCODE CDS 41727407 41727551 . - 0 Parent=gene654 chr15 ENCODE exon 41727407 41727556 . - . Parent=gene654 chr15 ENCODE exon 41728312 41728338 . - . Parent=gene654 ### chr15 ENCODE gene 41710052 41728367 . - . ID=gene655;Name=AC011330.3-006;name2=CATSPER2 chr15 ENCODE exon 41710052 41710222 . - . Parent=gene655 chr15 ENCODE exon 41711689 41715316 . - . Parent=gene655 chr15 ENCODE exon 41715531 41715709 . - . Parent=gene655 chr15 ENCODE exon 41718394 41718518 . - . Parent=gene655 chr15 ENCODE exon 41719133 41719288 . - . Parent=gene655 chr15 ENCODE exon 41719814 41719986 . - . Parent=gene655 chr15 ENCODE exon 41726540 41726608 . - . Parent=gene655 chr15 ENCODE exon 41726784 41726957 . - . Parent=gene655 chr15 ENCODE exon 41727407 41727553 . - . Parent=gene655 chr15 ENCODE exon 41728119 41728367 . - . Parent=gene655 ### chr15 ENCODE gene 41710061 41712227 . - . ID=gene656;Name=AC011330.3-013;name2=CATSPER2 chr15 ENCODE exon 41710061 41710222 . - . Parent=gene656 chr15 ENCODE exon 41710920 41711028 . - . Parent=gene656 chr15 ENCODE exon 41711689 41711853 . - . Parent=gene656 chr15 ENCODE exon 41712207 41712227 . - . Parent=gene656 ### chr15 ENCODE gene 41710098 41727551 . - . ID=gene657;Name=AC011330.3-003;name2=CATSPER2 chr15 ENCODE exon 41710098 41710222 . - . Parent=gene657 chr15 ENCODE exon 41711689 41711853 . - . Parent=gene657 chr15 ENCODE exon 41714850 41714906 . - . Parent=gene657 chr15 ENCODE exon 41715217 41715316 . - . Parent=gene657 chr15 ENCODE exon 41715531 41715709 . - . Parent=gene657 chr15 ENCODE exon 41718394 41718518 . - . Parent=gene657 chr15 ENCODE exon 41719133 41719288 . - . Parent=gene657 chr15 ENCODE exon 41719814 41719986 . - . Parent=gene657 chr15 ENCODE exon 41726540 41726608 . - . Parent=gene657 chr15 ENCODE exon 41726784 41726957 . - . Parent=gene657 chr15 ENCODE exon 41727407 41727551 . - . Parent=gene657 ### chr15 ENCODE gene 41711689 41714882 . - . ID=gene658;Name=AC011330.3-008;name2=CATSPER2 chr15 ENCODE exon 41711689 41711853 . - . Parent=gene658 chr15 ENCODE exon 41712207 41712424 . - . Parent=gene658 chr15 ENCODE exon 41714599 41714644 . - . Parent=gene658 chr15 ENCODE exon 41714850 41714882 . - . Parent=gene658 ### chr15 ENCODE gene 41711761 41712709 . - . ID=gene659;Name=AC011330.3-007;name2=CATSPER2 chr15 ENCODE exon 41711761 41711853 . - . Parent=gene659 chr15 ENCODE exon 41712207 41712709 . - . Parent=gene659 ### chr15 ENCODE gene 41718912 41728337 . - . ID=gene660;Name=AC011330.3-005;name2=CATSPER2 chr15 ENCODE exon 41718912 41719986 . - . Parent=gene660 chr15 ENCODE exon 41726540 41726608 . - . Parent=gene660 chr15 ENCODE exon 41726784 41726957 . - . Parent=gene660 chr15 ENCODE exon 41727407 41727553 . - . Parent=gene660 chr15 ENCODE exon 41728119 41728337 . - . Parent=gene660 ### chr15 ENCODE gene 41726839 41747192 . - . ID=gene661;Name=AC011330.3-012;name2=CATSPER2 chr15 ENCODE exon 41726839 41726957 . - . Parent=gene661 chr15 ENCODE exon 41743908 41744033 . - . Parent=gene661 chr15 ENCODE exon 41747148 41747192 . - . Parent=gene661 ### chr15 ENCODE gene 41726864 41728315 . - . ID=gene662;Name=AC011330.3-009;name2=CATSPER2 chr15 ENCODE exon 41726864 41726957 . - . Parent=gene662 chr15 ENCODE CDS 41726864 41726957 . - 2 Parent=gene662 chr15 ENCODE CDS 41727407 41727551 . - 0 Parent=gene662 chr15 ENCODE exon 41727407 41727556 . - . Parent=gene662 chr15 ENCODE exon 41728308 41728315 . - . Parent=gene662 ### chr15 ENCODE gene 41726910 41747608 . - . ID=gene663;Name=AC011330.3-010;name2=CATSPER2 chr15 ENCODE exon 41726910 41726957 . - . Parent=gene663 chr15 ENCODE exon 41727407 41727556 . - . Parent=gene663 chr15 ENCODE exon 41729217 41729369 . - . Parent=gene663 chr15 ENCODE exon 41743908 41744033 . - . Parent=gene663 chr15 ENCODE exon 41747518 41747608 . - . Parent=gene663 ### chr15 ENCODE gene 41727407 41729344 . - . ID=gene664;Name=AC011330.3-011;name2=CATSPER2 chr15 ENCODE exon 41727407 41727553 . - . Parent=gene664 chr15 ENCODE exon 41729217 41729344 . - . Parent=gene664 ### chr15 ENCODE gene 41772376 41778712 . + . ID=gene665;Name=AC011330.7-001;name2=CKMT1A chr15 ENCODE exon 41772376 41772593 . + . Parent=gene665 chr15 ENCODE exon 41773367 41773689 . + . Parent=gene665 chr15 ENCODE CDS 41773541 41773689 . + 0 Parent=gene665 chr15 ENCODE exon 41774294 41774492 . + . Parent=gene665 chr15 ENCODE CDS 41774294 41774492 . + 1 Parent=gene665 chr15 ENCODE exon 41774696 41774791 . + . Parent=gene665 chr15 ENCODE CDS 41774696 41774791 . + 0 Parent=gene665 chr15 ENCODE exon 41775178 41775399 . + . Parent=gene665 chr15 ENCODE CDS 41775178 41775399 . + 0 Parent=gene665 chr15 ENCODE exon 41775529 41775614 . + . Parent=gene665 chr15 ENCODE CDS 41775529 41775614 . + 0 Parent=gene665 chr15 ENCODE exon 41775730 41775853 . + . Parent=gene665 chr15 ENCODE CDS 41775730 41775853 . + 1 Parent=gene665 chr15 ENCODE exon 41777504 41777638 . + . Parent=gene665 chr15 ENCODE CDS 41777504 41777638 . + 0 Parent=gene665 chr15 ENCODE exon 41778131 41778256 . + . Parent=gene665 chr15 ENCODE CDS 41778131 41778256 . + 0 Parent=gene665 chr15 ENCODE CDS 41778463 41778579 . + 0 Parent=gene665 chr15 ENCODE exon 41778463 41778712 . + . Parent=gene665 ### chr15 ENCODE gene 41772390 41774791 . + . ID=gene666;Name=AC011330.7-004;name2=CKMT1A chr15 ENCODE exon 41772390 41772593 . + . Parent=gene666 chr15 ENCODE exon 41773430 41773689 . + . Parent=gene666 chr15 ENCODE CDS 41773541 41773689 . + 0 Parent=gene666 chr15 ENCODE exon 41774294 41774492 . + . Parent=gene666 chr15 ENCODE CDS 41774294 41774492 . + 1 Parent=gene666 chr15 ENCODE exon 41774696 41774791 . + . Parent=gene666 chr15 ENCODE CDS 41774696 41774791 . + 0 Parent=gene666 ### chr15 ENCODE gene 41772530 41774770 . + . ID=gene667;Name=AC011330.7-005;name2=CKMT1A chr15 ENCODE exon 41772530 41772593 . + . Parent=gene667 chr15 ENCODE exon 41773367 41773689 . + . Parent=gene667 chr15 ENCODE exon 41774017 41774492 . + . Parent=gene667 chr15 ENCODE exon 41774696 41774770 . + . Parent=gene667 ### chr15 ENCODE gene 41773017 41778712 . + . ID=gene668;name2=CKMT1A;Name=AC011330.7-002 chr15 ENCODE exon 41773017 41773689 . + . Parent=gene668 chr15 ENCODE CDS 41773541 41773689 . + 0 Parent=gene668 chr15 ENCODE exon 41774294 41774492 . + . Parent=gene668 chr15 ENCODE CDS 41774294 41774492 . + 1 Parent=gene668 chr15 ENCODE exon 41774696 41774791 . + . Parent=gene668 chr15 ENCODE CDS 41774696 41774791 . + 0 Parent=gene668 chr15 ENCODE exon 41775178 41775399 . + . Parent=gene668 chr15 ENCODE CDS 41775178 41775399 . + 0 Parent=gene668 chr15 ENCODE exon 41775529 41775614 . + . Parent=gene668 chr15 ENCODE CDS 41775529 41775614 . + 0 Parent=gene668 chr15 ENCODE exon 41775730 41775853 . + . Parent=gene668 chr15 ENCODE CDS 41775730 41775853 . + 1 Parent=gene668 chr15 ENCODE exon 41777504 41777638 . + . Parent=gene668 chr15 ENCODE CDS 41777504 41777638 . + 0 Parent=gene668 chr15 ENCODE exon 41778131 41778256 . + . Parent=gene668 chr15 ENCODE CDS 41778131 41778256 . + 0 Parent=gene668 chr15 ENCODE CDS 41778463 41778579 . + 0 Parent=gene668 chr15 ENCODE exon 41778463 41778712 . + . Parent=gene668 ### chr15 ENCODE gene 41773361 41775305 . + . ID=gene669;name2=CKMT1A;Name=AC011330.7-003 chr15 ENCODE exon 41773361 41773689 . + . Parent=gene669 chr15 ENCODE CDS 41773541 41773689 . + 0 Parent=gene669 chr15 ENCODE exon 41774201 41774492 . + . Parent=gene669 chr15 ENCODE CDS 41774201 41774492 . + 1 Parent=gene669 chr15 ENCODE exon 41774696 41774791 . + . Parent=gene669 chr15 ENCODE CDS 41774696 41774791 . + 0 Parent=gene669 chr15 ENCODE exon 41775178 41775305 . + . Parent=gene669 chr15 ENCODE CDS 41775178 41775305 . + 0 Parent=gene669 ### chr15 ENCODE gene 41775287 41776461 . + . ID=gene670;name2=CKMT1A;Name=AC011330.7-007 chr15 ENCODE exon 41775287 41775399 . + . Parent=gene670 chr15 ENCODE exon 41775529 41775614 . + . Parent=gene670 chr15 ENCODE exon 41775730 41776461 . + . Parent=gene670 ### chr15 ENCODE gene 41825882 41852769 . + . ID=gene671;Name=AC018512.1-001;name2=PDIA3 chr15 ENCODE exon 41825882 41826196 . + . Parent=gene671 chr15 ENCODE CDS 41826030 41826196 . + 0 Parent=gene671 chr15 ENCODE exon 41833314 41833392 . + . Parent=gene671 chr15 ENCODE CDS 41833314 41833392 . + 1 Parent=gene671 chr15 ENCODE exon 41836139 41836256 . + . Parent=gene671 chr15 ENCODE CDS 41836139 41836256 . + 0 Parent=gene671 chr15 ENCODE exon 41840914 41841021 . + . Parent=gene671 chr15 ENCODE CDS 41840914 41841021 . + 2 Parent=gene671 chr15 ENCODE exon 41842567 41842696 . + . Parent=gene671 chr15 ENCODE CDS 41842567 41842696 . + 2 Parent=gene671 chr15 ENCODE exon 41844940 41845056 . + . Parent=gene671 chr15 ENCODE CDS 41844940 41845056 . + 1 Parent=gene671 chr15 ENCODE exon 41845377 41845502 . + . Parent=gene671 chr15 ENCODE CDS 41845377 41845502 . + 1 Parent=gene671 chr15 ENCODE exon 41846218 41846400 . + . Parent=gene671 chr15 ENCODE CDS 41846218 41846400 . + 1 Parent=gene671 chr15 ENCODE exon 41847979 41848087 . + . Parent=gene671 chr15 ENCODE CDS 41847979 41848087 . + 1 Parent=gene671 chr15 ENCODE exon 41849008 41849136 . + . Parent=gene671 chr15 ENCODE CDS 41849008 41849136 . + 0 Parent=gene671 chr15 ENCODE exon 41849740 41849819 . + . Parent=gene671 chr15 ENCODE CDS 41849740 41849819 . + 0 Parent=gene671 chr15 ENCODE exon 41850013 41850070 . + . Parent=gene671 chr15 ENCODE CDS 41850013 41850070 . + 1 Parent=gene671 chr15 ENCODE CDS 41850595 41850708 . + 0 Parent=gene671 chr15 ENCODE exon 41850595 41852769 . + . Parent=gene671 ### chr15 ENCODE gene 41825900 41836215 . + . ID=gene672;Name=AC018512.1-003;name2=PDIA3 chr15 ENCODE exon 41825900 41826196 . + . Parent=gene672 chr15 ENCODE exon 41836139 41836215 . + . Parent=gene672 ### chr15 ENCODE gene 41825907 41851035 . + . ID=gene673;Name=AC018512.1-005;name2=PDIA3 chr15 ENCODE exon 41825907 41826106 . + . Parent=gene673 chr15 ENCODE exon 41826182 41826196 . + . Parent=gene673 chr15 ENCODE exon 41833314 41833392 . + . Parent=gene673 chr15 ENCODE exon 41836139 41836256 . + . Parent=gene673 chr15 ENCODE exon 41840914 41841021 . + . Parent=gene673 chr15 ENCODE exon 41842567 41842696 . + . Parent=gene673 chr15 ENCODE exon 41844940 41845056 . + . Parent=gene673 chr15 ENCODE exon 41845377 41845502 . + . Parent=gene673 chr15 ENCODE exon 41846218 41846400 . + . Parent=gene673 chr15 ENCODE exon 41847979 41848087 . + . Parent=gene673 chr15 ENCODE exon 41849008 41849136 . + . Parent=gene673 chr15 ENCODE exon 41849740 41849819 . + . Parent=gene673 chr15 ENCODE exon 41850013 41850070 . + . Parent=gene673 chr15 ENCODE exon 41850595 41851035 . + . Parent=gene673 ### chr15 ENCODE gene 41825943 41836256 . + . ID=gene674;Name=AC018512.1-002;name2=PDIA3 chr15 ENCODE exon 41825943 41826196 . + . Parent=gene674 chr15 ENCODE exon 41832292 41832436 . + . Parent=gene674 chr15 ENCODE exon 41833314 41833392 . + . Parent=gene674 chr15 ENCODE exon 41836139 41836256 . + . Parent=gene674 ### chr15 ENCODE gene 41825943 41851035 . + . ID=gene675;Name=AC018512.1-004;name2=PDIA3 chr15 ENCODE exon 41825943 41826196 . + . Parent=gene675 chr15 ENCODE exon 41831074 41831248 . + . Parent=gene675 chr15 ENCODE exon 41833314 41833392 . + . Parent=gene675 chr15 ENCODE exon 41836139 41836256 . + . Parent=gene675 chr15 ENCODE exon 41840914 41841021 . + . Parent=gene675 chr15 ENCODE exon 41842567 41842696 . + . Parent=gene675 chr15 ENCODE exon 41844940 41845056 . + . Parent=gene675 chr15 ENCODE exon 41845377 41845502 . + . Parent=gene675 chr15 ENCODE exon 41846218 41846400 . + . Parent=gene675 chr15 ENCODE exon 41847979 41848087 . + . Parent=gene675 chr15 ENCODE exon 41849008 41849136 . + . Parent=gene675 chr15 ENCODE exon 41849740 41849819 . + . Parent=gene675 chr15 ENCODE exon 41850013 41850070 . + . Parent=gene675 chr15 ENCODE exon 41850595 41851035 . + . Parent=gene675 ### chr15 ENCODE gene 41826102 41847985 . + . ID=gene676;Name=AC018512.1-006;name2=PDIA3 chr15 ENCODE exon 41826102 41826196 . + . Parent=gene676 chr15 ENCODE exon 41833314 41833392 . + . Parent=gene676 chr15 ENCODE exon 41836139 41836256 . + . Parent=gene676 chr15 ENCODE exon 41844940 41845056 . + . Parent=gene676 chr15 ENCODE exon 41845377 41845502 . + . Parent=gene676 chr15 ENCODE exon 41846218 41846400 . + . Parent=gene676 chr15 ENCODE exon 41847979 41847985 . + . Parent=gene676 ### chr15 ENCODE gene 41849773 41851035 . + . ID=gene677;Name=AC018512.1-007;name2=PDIA3 chr15 ENCODE exon 41849773 41850070 . + . Parent=gene677 chr15 ENCODE exon 41850595 41851035 . + . Parent=gene677 ### chr15 ENCODE gene 41852090 41857033 . - . ID=gene678;name2=ELL3;Name=AC018512.4-001 chr15 ENCODE exon 41852090 41852716 . - . Parent=gene678 chr15 ENCODE CDS 41852606 41852716 . - 0 Parent=gene678 chr15 ENCODE exon 41852794 41852838 . - . Parent=gene678 chr15 ENCODE CDS 41852794 41852838 . - 0 Parent=gene678 chr15 ENCODE exon 41853672 41853843 . - . Parent=gene678 chr15 ENCODE CDS 41853672 41853843 . - 1 Parent=gene678 chr15 ENCODE exon 41853966 41854008 . - . Parent=gene678 chr15 ENCODE CDS 41853966 41854008 . - 2 Parent=gene678 chr15 ENCODE exon 41854086 41854263 . - . Parent=gene678 chr15 ENCODE CDS 41854086 41854263 . - 0 Parent=gene678 chr15 ENCODE exon 41854796 41854871 . - . Parent=gene678 chr15 ENCODE CDS 41854796 41854871 . - 1 Parent=gene678 chr15 ENCODE exon 41855015 41855100 . - . Parent=gene678 chr15 ENCODE CDS 41855015 41855100 . - 0 Parent=gene678 chr15 ENCODE exon 41855212 41855413 . - . Parent=gene678 chr15 ENCODE CDS 41855212 41855413 . - 1 Parent=gene678 chr15 ENCODE exon 41855529 41855641 . - . Parent=gene678 chr15 ENCODE CDS 41855529 41855641 . - 0 Parent=gene678 chr15 ENCODE exon 41855999 41856034 . - . Parent=gene678 chr15 ENCODE CDS 41855999 41856034 . - 0 Parent=gene678 chr15 ENCODE CDS 41856260 41856391 . - 0 Parent=gene678 chr15 ENCODE exon 41856260 41857033 . - . Parent=gene678 ### chr15 ENCODE gene 41852095 41855873 . - . ID=gene679;Name=AC018512.4-003;name2=ELL3 chr15 ENCODE exon 41852095 41852716 . - . Parent=gene679 chr15 ENCODE exon 41852794 41852838 . - . Parent=gene679 chr15 ENCODE exon 41853672 41853843 . - . Parent=gene679 chr15 ENCODE exon 41853966 41854008 . - . Parent=gene679 chr15 ENCODE exon 41854086 41854263 . - . Parent=gene679 chr15 ENCODE exon 41854796 41854871 . - . Parent=gene679 chr15 ENCODE exon 41855015 41855100 . - . Parent=gene679 chr15 ENCODE exon 41855212 41855413 . - . Parent=gene679 chr15 ENCODE exon 41855529 41855873 . - . Parent=gene679 ### chr15 ENCODE gene 41852095 41878623 . - . ID=gene680;Name=AC018512.4-002;name2=ELL3 chr15 ENCODE exon 41852095 41852713 . - . Parent=gene680 chr15 ENCODE exon 41852794 41852838 . - . Parent=gene680 chr15 ENCODE exon 41853672 41853843 . - . Parent=gene680 chr15 ENCODE exon 41853966 41854008 . - . Parent=gene680 chr15 ENCODE exon 41854086 41854263 . - . Parent=gene680 chr15 ENCODE exon 41854796 41854871 . - . Parent=gene680 chr15 ENCODE exon 41855015 41855100 . - . Parent=gene680 chr15 ENCODE exon 41855212 41855413 . - . Parent=gene680 chr15 ENCODE exon 41855529 41855641 . - . Parent=gene680 chr15 ENCODE exon 41855999 41856034 . - . Parent=gene680 chr15 ENCODE exon 41874878 41875031 . - . Parent=gene680 chr15 ENCODE exon 41875178 41875226 . - . Parent=gene680 chr15 ENCODE exon 41875645 41875717 . - . Parent=gene680 chr15 ENCODE exon 41876106 41876232 . - . Parent=gene680 chr15 ENCODE exon 41876335 41876430 . - . Parent=gene680 chr15 ENCODE exon 41877410 41877503 . - . Parent=gene680 chr15 ENCODE exon 41878449 41878623 . - . Parent=gene680 ### chr15 ENCODE gene 41852391 41854995 . - . ID=gene681;Name=AC018512.4-005;name2=ELL3 chr15 ENCODE exon 41852391 41852716 . - . Parent=gene681 chr15 ENCODE exon 41852794 41852838 . - . Parent=gene681 chr15 ENCODE exon 41853672 41853843 . - . Parent=gene681 chr15 ENCODE exon 41853966 41854008 . - . Parent=gene681 chr15 ENCODE exon 41854086 41854263 . - . Parent=gene681 chr15 ENCODE exon 41854796 41854995 . - . Parent=gene681 ### chr15 ENCODE gene 41854202 41855930 . - . ID=gene682;Name=AC018512.4-007;name2=ELL3 chr15 ENCODE exon 41854202 41854263 . - . Parent=gene682 chr15 ENCODE exon 41854796 41854871 . - . Parent=gene682 chr15 ENCODE exon 41855015 41855100 . - . Parent=gene682 chr15 ENCODE exon 41855212 41855413 . - . Parent=gene682 chr15 ENCODE exon 41855529 41855641 . - . Parent=gene682 chr15 ENCODE exon 41855888 41855930 . - . Parent=gene682 ### chr15 ENCODE gene 41854982 41856456 . - . ID=gene683;Name=AC018512.4-006;name2=ELL3 chr15 ENCODE exon 41854982 41855100 . - . Parent=gene683 chr15 ENCODE exon 41855212 41855413 . - . Parent=gene683 chr15 ENCODE exon 41855529 41855641 . - . Parent=gene683 chr15 ENCODE exon 41855999 41856034 . - . Parent=gene683 chr15 ENCODE exon 41856260 41856456 . - . Parent=gene683 ### chr15 ENCODE gene 41855028 41856062 . - . ID=gene684;Name=AC018512.4-009;name2=ELL3 chr15 ENCODE exon 41855028 41855100 . - . Parent=gene684 chr15 ENCODE exon 41855212 41855413 . - . Parent=gene684 chr15 ENCODE exon 41855529 41855641 . - . Parent=gene684 chr15 ENCODE exon 41855999 41856062 . - . Parent=gene684 ### chr15 ENCODE gene 41855055 41856805 . - . ID=gene685;Name=AC018512.4-004;name2=ELL3 chr15 ENCODE exon 41855055 41855100 . - . Parent=gene685 chr15 ENCODE CDS 41855055 41855100 . - 0 Parent=gene685 chr15 ENCODE exon 41855212 41855413 . - . Parent=gene685 chr15 ENCODE CDS 41855212 41855413 . - 1 Parent=gene685 chr15 ENCODE exon 41855529 41855641 . - . Parent=gene685 chr15 ENCODE CDS 41855529 41855641 . - 0 Parent=gene685 chr15 ENCODE exon 41855999 41856034 . - . Parent=gene685 chr15 ENCODE CDS 41855999 41856034 . - 0 Parent=gene685 chr15 ENCODE CDS 41856260 41856391 . - 0 Parent=gene685 chr15 ENCODE exon 41856260 41856454 . - . Parent=gene685 chr15 ENCODE exon 41856606 41856805 . - . Parent=gene685 ### chr15 ENCODE gene 41855660 41856458 . - . ID=gene686;Name=AC018512.4-008;name2=ELL3 chr15 ENCODE exon 41855660 41856034 . - . Parent=gene686 chr15 ENCODE exon 41856260 41856458 . - . Parent=gene686 ### chr15 ENCODE gene 41856577 41857606 . + . ID=gene687;Name=AC018512.5-012;name2=SERF2 chr15 ENCODE exon 41856577 41856992 . + . Parent=gene687 chr15 ENCODE exon 41857475 41857606 . + . Parent=gene687 ### chr15 ENCODE gene 41856590 41874085 . + . ID=gene688;Name=AC018512.5-001;name2=SERF2 chr15 ENCODE exon 41856590 41856992 . + . Parent=gene688 chr15 ENCODE exon 41864900 41865024 . + . Parent=gene688 chr15 ENCODE exon 41871466 41871873 . + . Parent=gene688 chr15 ENCODE CDS 41871867 41871873 . + 0 Parent=gene688 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene688 chr15 ENCODE CDS 41872465 41872573 . + 2 Parent=gene688 chr15 ENCODE CDS 41873200 41873263 . + 1 Parent=gene688 chr15 ENCODE exon 41873200 41874085 . + . Parent=gene688 ### chr15 ENCODE gene 41871332 41874085 . + . ID=gene689;Name=AC018512.5-002;name2=SERF2 chr15 ENCODE exon 41871332 41871873 . + . Parent=gene689 chr15 ENCODE CDS 41871867 41871873 . + 0 Parent=gene689 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene689 chr15 ENCODE CDS 41872465 41872573 . + 2 Parent=gene689 chr15 ENCODE CDS 41873200 41873263 . + 1 Parent=gene689 chr15 ENCODE exon 41873200 41874085 . + . Parent=gene689 ### chr15 ENCODE gene 41871820 41873440 . + . ID=gene690;Name=AC018512.5-004;name2=SERF2 chr15 ENCODE exon 41871820 41871873 . + . Parent=gene690 chr15 ENCODE exon 41872465 41873440 . + . Parent=gene690 ### chr15 ENCODE gene 41871820 41879340 . + . ID=gene691;Name=AC018512.5-014;name2=SERF2 chr15 ENCODE exon 41871820 41871873 . + . Parent=gene691 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene691 chr15 ENCODE exon 41878434 41878597 . + . Parent=gene691 chr15 ENCODE exon 41879109 41879340 . + . Parent=gene691 ### chr15 ENCODE gene 41871827 41875579 . + . ID=gene692;Name=AC018512.5-003;name2=SERF2 chr15 ENCODE exon 41871827 41871873 . + . Parent=gene692 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene692 chr15 ENCODE exon 41873200 41873426 . + . Parent=gene692 chr15 ENCODE exon 41873864 41875579 . + . Parent=gene692 ### chr15 ENCODE gene 41871837 41873536 . + . ID=gene693;Name=AC018512.5-005;name2=SERF2 chr15 ENCODE exon 41871837 41871873 . + . Parent=gene693 chr15 ENCODE CDS 41871867 41871873 . + 0 Parent=gene693 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene693 chr15 ENCODE CDS 41872465 41872573 . + 2 Parent=gene693 chr15 ENCODE CDS 41873177 41873462 . + 1 Parent=gene693 chr15 ENCODE exon 41873177 41873536 . + . Parent=gene693 ### chr15 ENCODE gene 41871837 41879769 . + . ID=gene694;Name=AC018512.5-013;name2=SERF2 chr15 ENCODE exon 41871837 41871873 . + . Parent=gene694 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene694 chr15 ENCODE exon 41879109 41879769 . + . Parent=gene694 ### chr15 ENCODE gene 41871844 41882079 . + . ID=gene695;Name=AC018512.5-0010;name2=SERF2 chr15 ENCODE exon 41871844 41871873 . + . Parent=gene695 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene695 chr15 ENCODE exon 41878359 41878597 . + . Parent=gene695 chr15 ENCODE exon 41878848 41880274 . + . Parent=gene695 chr15 ENCODE exon 41880622 41880677 . + . Parent=gene695 chr15 ENCODE exon 41881008 41881059 . + . Parent=gene695 chr15 ENCODE exon 41881201 41882079 . + . Parent=gene695 ### chr15 ENCODE gene 41871844 41882079 . + . ID=gene696;Name=AC018512.5-011;name2=SERF2 chr15 ENCODE exon 41871844 41871873 . + . Parent=gene696 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene696 chr15 ENCODE exon 41879985 41880274 . + . Parent=gene696 chr15 ENCODE exon 41880622 41880677 . + . Parent=gene696 chr15 ENCODE exon 41881008 41881059 . + . Parent=gene696 chr15 ENCODE exon 41881201 41882079 . + . Parent=gene696 ### chr15 ENCODE gene 41871858 41872912 . + . ID=gene697;name2=SERF2;Name=AC018512.5-008 chr15 ENCODE exon 41871858 41872101 . + . Parent=gene697 chr15 ENCODE exon 41872465 41872912 . + . Parent=gene697 ### chr15 ENCODE gene 41871858 41873465 . + . ID=gene698;Name=AC018512.5-006;name2=SERF2 chr15 ENCODE exon 41871858 41872068 . + . Parent=gene698 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene698 chr15 ENCODE exon 41873200 41873465 . + . Parent=gene698 ### chr15 ENCODE gene 41871858 41873536 . + . ID=gene699;Name=AC018512.5-007;name2=SERF2 chr15 ENCODE exon 41871858 41872101 . + . Parent=gene699 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene699 chr15 ENCODE exon 41873200 41873536 . + . Parent=gene699 ### chr15 ENCODE gene 41871867 41878497 . + . ID=gene700;name2=SERF2;Name=AC018512.5-015 chr15 ENCODE exon 41871867 41872101 . + . Parent=gene700 chr15 ENCODE exon 41872465 41872573 . + . Parent=gene700 chr15 ENCODE exon 41878359 41878497 . + . Parent=gene700 ### chr15 ENCODE gene 41872329 41873536 . + . ID=gene701;Name=AC018512.5-009;name2=SERF2 chr15 ENCODE exon 41872329 41872573 . + . Parent=gene701 chr15 ENCODE exon 41873200 41873536 . + . Parent=gene701 ### chr15 ENCODE gene 41873652 41878623 . - . ID=gene702;Name=AC018512.6-002;name2=AC018512.6 chr15 ENCODE exon 41873652 41874703 . - . Parent=gene702 chr15 ENCODE exon 41874878 41875031 . - . Parent=gene702 chr15 ENCODE exon 41875178 41875226 . - . Parent=gene702 chr15 ENCODE exon 41875645 41875717 . - . Parent=gene702 chr15 ENCODE exon 41876106 41876232 . - . Parent=gene702 chr15 ENCODE exon 41876335 41876430 . - . Parent=gene702 chr15 ENCODE exon 41876631 41876846 . - . Parent=gene702 chr15 ENCODE exon 41877410 41877503 . - . Parent=gene702 chr15 ENCODE exon 41877915 41877994 . - . Parent=gene702 chr15 ENCODE exon 41878449 41878623 . - . Parent=gene702 ### chr15 ENCODE gene 41873652 41879587 . - . ID=gene703;Name=AC018512.6-003;name2=AC018512.6 chr15 ENCODE exon 41873652 41874703 . - . Parent=gene703 chr15 ENCODE exon 41874878 41875031 . - . Parent=gene703 chr15 ENCODE exon 41875178 41875226 . - . Parent=gene703 chr15 ENCODE exon 41875645 41875717 . - . Parent=gene703 chr15 ENCODE exon 41876106 41876232 . - . Parent=gene703 chr15 ENCODE exon 41876335 41876430 . - . Parent=gene703 chr15 ENCODE exon 41877410 41877503 . - . Parent=gene703 chr15 ENCODE exon 41877915 41877994 . - . Parent=gene703 chr15 ENCODE exon 41878449 41878627 . - . Parent=gene703 chr15 ENCODE exon 41878800 41879017 . - . Parent=gene703 chr15 ENCODE exon 41879375 41879587 . - . Parent=gene703 ### chr15 ENCODE gene 41873652 41879622 . - . ID=gene704;name2=AC018512.6;Name=AC018512.6-004 chr15 ENCODE exon 41873652 41874703 . - . Parent=gene704 chr15 ENCODE CDS 41874543 41874703 . - 2 Parent=gene704 chr15 ENCODE exon 41874878 41875031 . - . Parent=gene704 chr15 ENCODE CDS 41874878 41875031 . - 0 Parent=gene704 chr15 ENCODE exon 41875178 41875226 . - . Parent=gene704 chr15 ENCODE CDS 41875178 41875226 . - 1 Parent=gene704 chr15 ENCODE exon 41875645 41875717 . - . Parent=gene704 chr15 ENCODE CDS 41875645 41875717 . - 2 Parent=gene704 chr15 ENCODE exon 41876635 41876846 . - . Parent=gene704 chr15 ENCODE CDS 41876635 41876846 . - 1 Parent=gene704 chr15 ENCODE exon 41877410 41877503 . - . Parent=gene704 chr15 ENCODE CDS 41877410 41877503 . - 2 Parent=gene704 chr15 ENCODE exon 41877915 41877994 . - . Parent=gene704 chr15 ENCODE CDS 41877915 41877994 . - 1 Parent=gene704 chr15 ENCODE exon 41878449 41878627 . - . Parent=gene704 chr15 ENCODE CDS 41878449 41878627 . - 0 Parent=gene704 chr15 ENCODE exon 41878800 41878976 . - . Parent=gene704 chr15 ENCODE CDS 41878800 41878976 . - 0 Parent=gene704 chr15 ENCODE CDS 41879375 41879476 . - 0 Parent=gene704 chr15 ENCODE exon 41879375 41879622 . - . Parent=gene704 ### chr15 ENCODE gene 41873652 41879711 . - . ID=gene705;Name=AC018512.6-001;name2=AC018512.6 chr15 ENCODE exon 41873652 41874703 . - . Parent=gene705 chr15 ENCODE CDS 41874490 41874703 . - 1 Parent=gene705 chr15 ENCODE exon 41874878 41875031 . - . Parent=gene705 chr15 ENCODE CDS 41874878 41875031 . - 2 Parent=gene705 chr15 ENCODE exon 41875178 41875226 . - . Parent=gene705 chr15 ENCODE CDS 41875178 41875226 . - 0 Parent=gene705 chr15 ENCODE exon 41875645 41875717 . - . Parent=gene705 chr15 ENCODE CDS 41875645 41875717 . - 1 Parent=gene705 chr15 ENCODE exon 41876106 41876232 . - . Parent=gene705 chr15 ENCODE CDS 41876106 41876232 . - 2 Parent=gene705 chr15 ENCODE exon 41876335 41876430 . - . Parent=gene705 chr15 ENCODE CDS 41876335 41876430 . - 2 Parent=gene705 chr15 ENCODE exon 41876635 41876846 . - . Parent=gene705 chr15 ENCODE CDS 41876635 41876846 . - 1 Parent=gene705 chr15 ENCODE exon 41877410 41877503 . - . Parent=gene705 chr15 ENCODE CDS 41877410 41877503 . - 2 Parent=gene705 chr15 ENCODE exon 41877915 41877994 . - . Parent=gene705 chr15 ENCODE CDS 41877915 41877994 . - 1 Parent=gene705 chr15 ENCODE exon 41878449 41878627 . - . Parent=gene705 chr15 ENCODE CDS 41878449 41878627 . - 0 Parent=gene705 chr15 ENCODE exon 41878800 41878976 . - . Parent=gene705 chr15 ENCODE CDS 41878800 41878976 . - 0 Parent=gene705 chr15 ENCODE CDS 41879375 41879476 . - 0 Parent=gene705 chr15 ENCODE exon 41879375 41879711 . - . Parent=gene705 ### chr15 ENCODE gene 41873720 41878617 . - . ID=gene706;Name=AC018512.6-005;name2=AC018512.6 chr15 ENCODE exon 41873720 41874703 . - . Parent=gene706 chr15 ENCODE exon 41874878 41875031 . - . Parent=gene706 chr15 ENCODE exon 41875178 41875226 . - . Parent=gene706 chr15 ENCODE exon 41875645 41875717 . - . Parent=gene706 chr15 ENCODE exon 41877410 41877503 . - . Parent=gene706 chr15 ENCODE exon 41878449 41878617 . - . Parent=gene706 ### chr15 ENCODE gene 41875632 41881572 . + . ID=gene707;Name=AC018512.7-007;name2=HYPK chr15 ENCODE exon 41875632 41879638 . + . Parent=gene707 chr15 ENCODE exon 41879985 41880274 . + . Parent=gene707 chr15 ENCODE exon 41880622 41880677 . + . Parent=gene707 chr15 ENCODE exon 41881008 41881059 . + . Parent=gene707 chr15 ENCODE exon 41881201 41881572 . + . Parent=gene707 ### chr15 ENCODE gene 41876220 41878585 . - . ID=gene708;Name=AC018512.6-006;name2=AC018512.6 chr15 ENCODE exon 41876220 41876846 . - . Parent=gene708 chr15 ENCODE exon 41877410 41877503 . - . Parent=gene708 chr15 ENCODE exon 41878449 41878585 . - . Parent=gene708 ### chr15 ENCODE gene 41879801 41881080 . + . ID=gene709;name2=HYPK;Name=AC018512.7-006 chr15 ENCODE exon 41879801 41880274 . + . Parent=gene709 chr15 ENCODE exon 41880622 41881080 . + . Parent=gene709 ### chr15 ENCODE gene 41879913 41881781 . + . ID=gene710;Name=AC018512.7-001;name2=HYPK chr15 ENCODE exon 41879913 41880274 . + . Parent=gene710 chr15 ENCODE CDS 41880089 41880274 . + 0 Parent=gene710 chr15 ENCODE exon 41880622 41880677 . + . Parent=gene710 chr15 ENCODE CDS 41880622 41880677 . + 0 Parent=gene710 chr15 ENCODE exon 41881008 41881059 . + . Parent=gene710 chr15 ENCODE CDS 41881008 41881059 . + 1 Parent=gene710 chr15 ENCODE CDS 41881201 41881296 . + 0 Parent=gene710 chr15 ENCODE exon 41881201 41881781 . + . Parent=gene710 ### chr15 ENCODE gene 41880089 41882533 . + . ID=gene711;Name=AC018512.7-004;name2=HYPK chr15 ENCODE exon 41880089 41880274 . + . Parent=gene711 chr15 ENCODE exon 41881008 41882533 . + . Parent=gene711 ### chr15 ENCODE gene 41880117 41881418 . + . ID=gene712;Name=AC018512.7-005;name2=HYPK chr15 ENCODE exon 41880117 41880274 . + . Parent=gene712 chr15 ENCODE CDS 41880117 41880274 . + 0 Parent=gene712 chr15 ENCODE exon 41881008 41881059 . + . Parent=gene712 chr15 ENCODE CDS 41881008 41881059 . + 1 Parent=gene712 chr15 ENCODE CDS 41881201 41881296 . + 0 Parent=gene712 chr15 ENCODE exon 41881201 41881418 . + . Parent=gene712 ### chr15 ENCODE gene 41883982 41904292 . - . ID=gene713;Name=AC018512.8-001;name2=MFAP1 chr15 ENCODE exon 41883982 41884766 . - . Parent=gene713 chr15 ENCODE CDS 41884584 41884766 . - 0 Parent=gene713 chr15 ENCODE exon 41884866 41884955 . - . Parent=gene713 chr15 ENCODE CDS 41884866 41884955 . - 0 Parent=gene713 chr15 ENCODE exon 41889245 41889404 . - . Parent=gene713 chr15 ENCODE CDS 41889245 41889404 . - 1 Parent=gene713 chr15 ENCODE exon 41892477 41892637 . - . Parent=gene713 chr15 ENCODE CDS 41892477 41892637 . - 0 Parent=gene713 chr15 ENCODE exon 41892739 41892847 . - . Parent=gene713 chr15 ENCODE CDS 41892739 41892847 . - 1 Parent=gene713 chr15 ENCODE exon 41893991 41894178 . - . Parent=gene713 chr15 ENCODE CDS 41893991 41894178 . - 0 Parent=gene713 chr15 ENCODE exon 41894435 41894564 . - . Parent=gene713 chr15 ENCODE CDS 41894435 41894564 . - 1 Parent=gene713 chr15 ENCODE exon 41896719 41896938 . - . Parent=gene713 chr15 ENCODE CDS 41896719 41896938 . - 2 Parent=gene713 chr15 ENCODE CDS 41903981 41904059 . - 0 Parent=gene713 chr15 ENCODE exon 41903981 41904292 . - . Parent=gene713 ### chr15 ENCODE gene 41884396 41889622 . - . ID=gene714;Name=AC018512.8-002;name2=MFAP1 chr15 ENCODE exon 41884396 41884766 . - . Parent=gene714 chr15 ENCODE exon 41884866 41884955 . - . Parent=gene714 chr15 ENCODE exon 41889245 41889622 . - . Parent=gene714 ### chr15 ENCODE gene 41906453 41947909 . + . ID=gene715;Name=AC023356.1-001;name2=WDR76 chr15 ENCODE exon 41906453 41906582 . + . Parent=gene715 chr15 ENCODE CDS 41906523 41906582 . + 0 Parent=gene715 chr15 ENCODE exon 41907455 41907856 . + . Parent=gene715 chr15 ENCODE CDS 41907455 41907856 . + 0 Parent=gene715 chr15 ENCODE exon 41914551 41914640 . + . Parent=gene715 chr15 ENCODE CDS 41914551 41914640 . + 0 Parent=gene715 chr15 ENCODE exon 41915651 41915706 . + . Parent=gene715 chr15 ENCODE CDS 41915651 41915706 . + 0 Parent=gene715 chr15 ENCODE exon 41919095 41919218 . + . Parent=gene715 chr15 ENCODE CDS 41919095 41919218 . + 1 Parent=gene715 chr15 ENCODE exon 41921905 41922006 . + . Parent=gene715 chr15 ENCODE CDS 41921905 41922006 . + 0 Parent=gene715 chr15 ENCODE exon 41922118 41922161 . + . Parent=gene715 chr15 ENCODE CDS 41922118 41922161 . + 0 Parent=gene715 chr15 ENCODE exon 41923391 41923544 . + . Parent=gene715 chr15 ENCODE CDS 41923391 41923544 . + 1 Parent=gene715 chr15 ENCODE exon 41930577 41930735 . + . Parent=gene715 chr15 ENCODE CDS 41930577 41930735 . + 0 Parent=gene715 chr15 ENCODE exon 41936436 41936653 . + . Parent=gene715 chr15 ENCODE CDS 41936436 41936653 . + 0 Parent=gene715 chr15 ENCODE exon 41938161 41938313 . + . Parent=gene715 chr15 ENCODE CDS 41938161 41938313 . + 1 Parent=gene715 chr15 ENCODE exon 41940823 41940876 . + . Parent=gene715 chr15 ENCODE CDS 41940823 41940876 . + 1 Parent=gene715 chr15 ENCODE CDS 41945618 41945882 . + 1 Parent=gene715 chr15 ENCODE exon 41945618 41947909 . + . Parent=gene715 ### chr15 ENCODE gene 41906470 41946508 . + . ID=gene716;Name=AC023356.1-002;name2=WDR76 chr15 ENCODE exon 41906470 41906608 . + . Parent=gene716 chr15 ENCODE exon 41907455 41907856 . + . Parent=gene716 chr15 ENCODE CDS 41907587 41907856 . + 0 Parent=gene716 chr15 ENCODE exon 41914551 41914640 . + . Parent=gene716 chr15 ENCODE CDS 41914551 41914640 . + 0 Parent=gene716 chr15 ENCODE exon 41915651 41915706 . + . Parent=gene716 chr15 ENCODE CDS 41915651 41915706 . + 0 Parent=gene716 chr15 ENCODE exon 41919095 41919218 . + . Parent=gene716 chr15 ENCODE CDS 41919095 41919218 . + 1 Parent=gene716 chr15 ENCODE exon 41921905 41922006 . + . Parent=gene716 chr15 ENCODE CDS 41921905 41922006 . + 0 Parent=gene716 chr15 ENCODE exon 41922118 41922161 . + . Parent=gene716 chr15 ENCODE CDS 41922118 41922161 . + 0 Parent=gene716 chr15 ENCODE exon 41923391 41923544 . + . Parent=gene716 chr15 ENCODE CDS 41923391 41923544 . + 1 Parent=gene716 chr15 ENCODE exon 41930577 41930735 . + . Parent=gene716 chr15 ENCODE CDS 41930577 41930735 . + 0 Parent=gene716 chr15 ENCODE exon 41936436 41936653 . + . Parent=gene716 chr15 ENCODE CDS 41936436 41936653 . + 0 Parent=gene716 chr15 ENCODE exon 41938161 41938313 . + . Parent=gene716 chr15 ENCODE CDS 41938161 41938313 . + 1 Parent=gene716 chr15 ENCODE exon 41940823 41940876 . + . Parent=gene716 chr15 ENCODE CDS 41940823 41940876 . + 1 Parent=gene716 chr15 ENCODE CDS 41945618 41945882 . + 1 Parent=gene716 chr15 ENCODE exon 41945618 41946508 . + . Parent=gene716 ### chr15 ENCODE gene 41906478 41922161 . + . ID=gene717;Name=AC023356.1-003;name2=WDR76 chr15 ENCODE exon 41906478 41906582 . + . Parent=gene717 chr15 ENCODE exon 41907565 41907856 . + . Parent=gene717 chr15 ENCODE CDS 41907587 41907856 . + 0 Parent=gene717 chr15 ENCODE exon 41914551 41914640 . + . Parent=gene717 chr15 ENCODE CDS 41914551 41914640 . + 0 Parent=gene717 chr15 ENCODE exon 41915651 41915706 . + . Parent=gene717 chr15 ENCODE CDS 41915651 41915706 . + 0 Parent=gene717 chr15 ENCODE exon 41919095 41919218 . + . Parent=gene717 chr15 ENCODE CDS 41919095 41919218 . + 1 Parent=gene717 chr15 ENCODE exon 41921905 41922006 . + . Parent=gene717 chr15 ENCODE CDS 41921905 41922006 . + 0 Parent=gene717 chr15 ENCODE exon 41922118 41922161 . + . Parent=gene717 chr15 ENCODE CDS 41922118 41922161 . + 0 Parent=gene717 ### chr15 ENCODE gene 41937997 41946508 . + . ID=gene718;Name=AC023356.1-004;name2=WDR76 chr15 ENCODE exon 41937997 41938070 . + . Parent=gene718 chr15 ENCODE exon 41938161 41938313 . + . Parent=gene718 chr15 ENCODE exon 41940823 41940876 . + . Parent=gene718 chr15 ENCODE exon 41945618 41946508 . + . Parent=gene718 ### chr15 ENCODE gene 41950254 42003799 . - . ID=gene719;Name=AC023356.2-001;name2=FRMD5 chr15 ENCODE exon 41950254 41953952 . - . Parent=gene719 chr15 ENCODE exon 41963193 41963299 . - . Parent=gene719 chr15 ENCODE exon 41964217 41964285 . - . Parent=gene719 chr15 ENCODE exon 41965171 41965245 . - . Parent=gene719 chr15 ENCODE exon 41967665 41967756 . - . Parent=gene719 chr15 ENCODE exon 41968299 41968362 . - . Parent=gene719 chr15 ENCODE exon 41971471 41971559 . - . Parent=gene719 chr15 ENCODE exon 41981665 41981752 . - . Parent=gene719 chr15 ENCODE exon 41985318 41985441 . - . Parent=gene719 chr15 ENCODE exon 41989372 41989469 . - . Parent=gene719 chr15 ENCODE exon 41998949 41999027 . - . Parent=gene719 chr15 ENCODE exon 41999257 41999299 . - . Parent=gene719 chr15 ENCODE exon 42003695 42003799 . - . Parent=gene719 ### chr15 ENCODE gene 41952765 42003799 . - . ID=gene720;Name=AC023356.2-003;name2=FRMD5 chr15 ENCODE exon 41952765 41953952 . - . Parent=gene720 chr15 ENCODE exon 41963193 41963299 . - . Parent=gene720 chr15 ENCODE exon 41964217 41964285 . - . Parent=gene720 chr15 ENCODE exon 41965158 41965245 . - . Parent=gene720 chr15 ENCODE exon 41967665 41967756 . - . Parent=gene720 chr15 ENCODE exon 41968299 41968362 . - . Parent=gene720 chr15 ENCODE exon 41971471 41971559 . - . Parent=gene720 chr15 ENCODE exon 41981665 41981752 . - . Parent=gene720 chr15 ENCODE exon 41985318 41985441 . - . Parent=gene720 chr15 ENCODE exon 41989372 41989469 . - . Parent=gene720 chr15 ENCODE exon 41998468 41998770 . - . Parent=gene720 chr15 ENCODE exon 41998949 41999027 . - . Parent=gene720 chr15 ENCODE exon 41999257 41999299 . - . Parent=gene720 chr15 ENCODE exon 42003695 42003799 . - . Parent=gene720 ### chr15 ENCODE gene 41952765 42003799 . - . ID=gene721;Name=AC023356.2-006;name2=FRMD5 chr15 ENCODE exon 41952765 41953429 . - . Parent=gene721 chr15 ENCODE CDS 41953382 41953429 . - 0 Parent=gene721 chr15 ENCODE exon 41953609 41953952 . - . Parent=gene721 chr15 ENCODE CDS 41953609 41953952 . - 2 Parent=gene721 chr15 ENCODE exon 41963193 41963299 . - . Parent=gene721 chr15 ENCODE CDS 41963193 41963299 . - 1 Parent=gene721 chr15 ENCODE exon 41964217 41964285 . - . Parent=gene721 chr15 ENCODE CDS 41964217 41964285 . - 1 Parent=gene721 chr15 ENCODE exon 41965171 41965245 . - . Parent=gene721 chr15 ENCODE CDS 41965171 41965245 . - 1 Parent=gene721 chr15 ENCODE exon 41967665 41967756 . - . Parent=gene721 chr15 ENCODE CDS 41967665 41967756 . - 0 Parent=gene721 chr15 ENCODE exon 41968299 41968362 . - . Parent=gene721 chr15 ENCODE CDS 41968299 41968362 . - 1 Parent=gene721 chr15 ENCODE exon 41971471 41971559 . - . Parent=gene721 chr15 ENCODE CDS 41971471 41971559 . - 0 Parent=gene721 chr15 ENCODE exon 41981665 41981752 . - . Parent=gene721 chr15 ENCODE CDS 41981665 41981752 . - 1 Parent=gene721 chr15 ENCODE exon 41985318 41985441 . - . Parent=gene721 chr15 ENCODE CDS 41985318 41985441 . - 2 Parent=gene721 chr15 ENCODE exon 41989372 41989469 . - . Parent=gene721 chr15 ENCODE CDS 41989372 41989469 . - 1 Parent=gene721 chr15 ENCODE exon 41998949 41999027 . - . Parent=gene721 chr15 ENCODE CDS 41998949 41999027 . - 2 Parent=gene721 chr15 ENCODE exon 41999257 41999299 . - . Parent=gene721 chr15 ENCODE CDS 41999257 41999299 . - 0 Parent=gene721 chr15 ENCODE exon 42003695 42003799 . - . Parent=gene721 chr15 ENCODE CDS 42003695 42003799 . - 0 Parent=gene721 ### chr15 ENCODE gene 41952765 42003799 . - . ID=gene722;Name=AC023356.2-005;name2=FRMD5 chr15 ENCODE exon 41952765 41953429 . - . Parent=gene722 chr15 ENCODE exon 41953609 41953952 . - . Parent=gene722 chr15 ENCODE exon 41963193 41963299 . - . Parent=gene722 chr15 ENCODE exon 41964217 41964285 . - . Parent=gene722 chr15 ENCODE exon 41965171 41965245 . - . Parent=gene722 chr15 ENCODE exon 41967665 41967756 . - . Parent=gene722 chr15 ENCODE exon 41968314 41968362 . - . Parent=gene722 chr15 ENCODE exon 41971471 41971559 . - . Parent=gene722 chr15 ENCODE exon 41981665 41981752 . - . Parent=gene722 chr15 ENCODE exon 41985318 41985441 . - . Parent=gene722 chr15 ENCODE exon 41989372 41989469 . - . Parent=gene722 chr15 ENCODE exon 41998949 41999027 . - . Parent=gene722 chr15 ENCODE exon 41999257 41999299 . - . Parent=gene722 chr15 ENCODE exon 42003695 42003799 . - . Parent=gene722 ### chr15 ENCODE gene 41952765 42003799 . - . ID=gene723;Name=AC023356.2-002;name2=FRMD5 chr15 ENCODE exon 41952765 41953952 . - . Parent=gene723 chr15 ENCODE exon 41963193 41963299 . - . Parent=gene723 chr15 ENCODE exon 41964217 41964285 . - . Parent=gene723 chr15 ENCODE exon 41965171 41965245 . - . Parent=gene723 chr15 ENCODE exon 41967665 41967756 . - . Parent=gene723 chr15 ENCODE exon 41968299 41968362 . - . Parent=gene723 chr15 ENCODE exon 41971471 41971559 . - . Parent=gene723 chr15 ENCODE exon 41981665 41981752 . - . Parent=gene723 chr15 ENCODE exon 41985318 41985441 . - . Parent=gene723 chr15 ENCODE exon 41989372 41989469 . - . Parent=gene723 chr15 ENCODE exon 41998949 41998993 . - . Parent=gene723 chr15 ENCODE exon 41999268 41999299 . - . Parent=gene723 chr15 ENCODE exon 42003695 42003799 . - . Parent=gene723 ### chr15 ENCODE gene 41952765 42003799 . - . ID=gene724;Name=AC023356.2-004;name2=FRMD5 chr15 ENCODE exon 41952765 41953952 . - . Parent=gene724 chr15 ENCODE exon 41963193 41963299 . - . Parent=gene724 chr15 ENCODE exon 41964217 41964285 . - . Parent=gene724 chr15 ENCODE exon 41965171 41965245 . - . Parent=gene724 chr15 ENCODE exon 41967665 41967756 . - . Parent=gene724 chr15 ENCODE exon 41968299 41968362 . - . Parent=gene724 chr15 ENCODE exon 41981665 41981752 . - . Parent=gene724 chr15 ENCODE exon 41985318 41985441 . - . Parent=gene724 chr15 ENCODE exon 41989372 41989469 . - . Parent=gene724 chr15 ENCODE exon 41997215 41997319 . - . Parent=gene724 chr15 ENCODE exon 41998468 41998770 . - . Parent=gene724 chr15 ENCODE exon 41998949 41999027 . - . Parent=gene724 chr15 ENCODE exon 41999257 41999299 . - . Parent=gene724 chr15 ENCODE exon 42003695 42003799 . - . Parent=gene724 ### chr15 ENCODE gene 41953850 41964596 . - . ID=gene725;Name=AC023356.2-008;name2=FRMD5 chr15 ENCODE exon 41953850 41953952 . - . Parent=gene725 chr15 ENCODE exon 41963193 41963299 . - . Parent=gene725 chr15 ENCODE exon 41964217 41964596 . - . Parent=gene725 ### chr15 ENCODE gene 41981404 41989417 . - . ID=gene726;Name=AC023356.2-007;name2=FRMD5 chr15 ENCODE exon 41981404 41981752 . - . Parent=gene726 chr15 ENCODE exon 41985318 41985441 . - . Parent=gene726 chr15 ENCODE exon 41989372 41989417 . - . Parent=gene726 ### chr16 ENCODE gene 4043 9448 . - . ID=gene727;Name=Z84812.2-001;name2=Z84812.2 chr16 ENCODE exon 4043 4511 . - . Parent=gene727 chr16 ENCODE CDS 4381 4511 . - 2 Parent=gene727 chr16 ENCODE exon 4652 4720 . - . Parent=gene727 chr16 ENCODE CDS 4652 4720 . - 2 Parent=gene727 chr16 ENCODE exon 5481 5633 . - . Parent=gene727 chr16 ENCODE CDS 5481 5633 . - 2 Parent=gene727 chr16 ENCODE exon 6290 6448 . - . Parent=gene727 chr16 ENCODE CDS 6290 6448 . - 2 Parent=gene727 chr16 ENCODE exon 6537 6738 . - . Parent=gene727 chr16 ENCODE CDS 6537 6738 . - 0 Parent=gene727 chr16 ENCODE exon 6916 7051 . - . Parent=gene727 chr16 ENCODE CDS 6916 7051 . - 1 Parent=gene727 chr16 ENCODE exon 7291 7427 . - . Parent=gene727 chr16 ENCODE CDS 7291 7427 . - 0 Parent=gene727 chr16 ENCODE exon 7604 7750 . - . Parent=gene727 chr16 ENCODE CDS 7604 7750 . - 0 Parent=gene727 chr16 ENCODE exon 7957 8068 . - . Parent=gene727 chr16 ENCODE CDS 7957 8068 . - 1 Parent=gene727 chr16 ENCODE CDS 8602 8789 . - 0 Parent=gene727 chr16 ENCODE exon 8602 9448 . - . Parent=gene727 ### chr16 ENCODE gene 4085 6383 . - . ID=gene728;Name=Z84812.2-010;name2=Z84812.2 chr16 ENCODE exon 4085 5633 . - . Parent=gene728 chr16 ENCODE exon 6290 6383 . - . Parent=gene728 ### chr16 ENCODE gene 4085 7083 . - . ID=gene729;Name=Z84812.2-006;name2=Z84812.2 chr16 ENCODE exon 4085 4720 . - . Parent=gene729 chr16 ENCODE exon 5481 5633 . - . Parent=gene729 chr16 ENCODE exon 6290 6448 . - . Parent=gene729 chr16 ENCODE exon 6541 6738 . - . Parent=gene729 chr16 ENCODE exon 6916 7083 . - . Parent=gene729 ### chr16 ENCODE gene 4085 8925 . - . ID=gene730;Name=Z84812.2-004;name2=Z84812.2 chr16 ENCODE exon 4085 4511 . - . Parent=gene730 chr16 ENCODE exon 4652 4720 . - . Parent=gene730 chr16 ENCODE exon 5481 5633 . - . Parent=gene730 chr16 ENCODE exon 6290 6448 . - . Parent=gene730 chr16 ENCODE exon 6541 6738 . - . Parent=gene730 chr16 ENCODE exon 6916 7427 . - . Parent=gene730 chr16 ENCODE exon 7604 7750 . - . Parent=gene730 chr16 ENCODE exon 7957 8058 . - . Parent=gene730 chr16 ENCODE exon 8190 8243 . - . Parent=gene730 chr16 ENCODE exon 8602 8925 . - . Parent=gene730 ### chr16 ENCODE gene 4085 9409 . - . ID=gene731;Name=Z84812.2-003;name2=Z84812.2 chr16 ENCODE exon 4085 4511 . - . Parent=gene731 chr16 ENCODE exon 4652 4720 . - . Parent=gene731 chr16 ENCODE exon 5481 5633 . - . Parent=gene731 chr16 ENCODE exon 6290 6448 . - . Parent=gene731 chr16 ENCODE exon 6541 6738 . - . Parent=gene731 chr16 ENCODE exon 6916 7427 . - . Parent=gene731 chr16 ENCODE exon 7604 7750 . - . Parent=gene731 chr16 ENCODE exon 7957 8055 . - . Parent=gene731 chr16 ENCODE exon 8602 9409 . - . Parent=gene731 ### chr16 ENCODE gene 4085 9452 . - . ID=gene732;Name=Z84812.2-002;name2=Z84812.2 chr16 ENCODE exon 4085 4511 . - . Parent=gene732 chr16 ENCODE exon 4652 4720 . - . Parent=gene732 chr16 ENCODE exon 5481 5633 . - . Parent=gene732 chr16 ENCODE exon 6290 6448 . - . Parent=gene732 chr16 ENCODE exon 6541 6738 . - . Parent=gene732 chr16 ENCODE exon 6916 7051 . - . Parent=gene732 chr16 ENCODE exon 7291 7427 . - . Parent=gene732 chr16 ENCODE exon 7604 7750 . - . Parent=gene732 chr16 ENCODE exon 7957 8055 . - . Parent=gene732 chr16 ENCODE exon 8602 9452 . - . Parent=gene732 ### chr16 ENCODE gene 4088 8422 . - . ID=gene733;Name=Z84812.2-008;name2=Z84812.2 chr16 ENCODE exon 4088 6448 . - . Parent=gene733 chr16 ENCODE exon 6541 8422 . - . Parent=gene733 ### chr16 ENCODE gene 4117 6241 . - . ID=gene734;Name=Z84812.2-005;name2=Z84812.2 chr16 ENCODE exon 4117 4720 . - . Parent=gene734 chr16 ENCODE exon 5481 6241 . - . Parent=gene734 ### chr16 ENCODE gene 4256 5022 . - . ID=gene735;Name=Z84812.2-011;name2=Z84812.2 chr16 ENCODE exon 4256 4511 . - . Parent=gene735 chr16 ENCODE exon 4652 5022 . - . Parent=gene735 ### chr16 ENCODE gene 5739 6975 . - . ID=gene736;name2=Z84812.2;Name=Z84812.2-009 chr16 ENCODE exon 5739 5993 . - . Parent=gene736 chr16 ENCODE exon 6290 6448 . - . Parent=gene736 chr16 ENCODE exon 6541 6738 . - . Parent=gene736 chr16 ENCODE exon 6916 6975 . - . Parent=gene736 ### chr16 ENCODE gene 7711 8508 . - . ID=gene737;Name=Z84812.2-007;name2=Z84812.2 chr16 ENCODE exon 7711 7750 . - . Parent=gene737 chr16 ENCODE exon 7957 8508 . - . Parent=gene737 ### chr16 ENCODE gene 12910 15123 . + . ID=gene738;Name=Z84723.1-001;name2=Z84723.1 chr16 ENCODE exon 12910 13085 . + . Parent=gene738 chr16 ENCODE CDS 12932 13085 . + 0 Parent=gene738 chr16 ENCODE CDS 14246 14283 . + 2 Parent=gene738 chr16 ENCODE exon 14246 15123 . + . Parent=gene738 ### chr16 ENCODE gene 36407 43628 . - . ID=gene739;Name=Z69719.1-001;name2=POLR3K chr16 ENCODE exon 36407 37557 . - . Parent=gene739 chr16 ENCODE CDS 37430 37557 . - 2 Parent=gene739 chr16 ENCODE exon 41558 41645 . - . Parent=gene739 chr16 ENCODE CDS 41558 41645 . - 0 Parent=gene739 chr16 ENCODE CDS 43476 43586 . - 0 Parent=gene739 chr16 ENCODE exon 43476 43628 . - . Parent=gene739 ### chr16 ENCODE gene 37236 42142 . - . ID=gene740;Name=Z69719.1-002;name2=POLR3K chr16 ENCODE exon 37236 37557 . - . Parent=gene740 chr16 ENCODE exon 41558 42142 . - . Parent=gene740 ### chr16 ENCODE gene 43010 47669 . + . ID=gene741;Name=Z69719.2-001;name2=C16orf33 chr16 ENCODE exon 43010 44058 . + . Parent=gene741 chr16 ENCODE CDS 44017 44058 . + 0 Parent=gene741 chr16 ENCODE exon 45459 45549 . + . Parent=gene741 chr16 ENCODE CDS 45459 45549 . + 0 Parent=gene741 chr16 ENCODE exon 45777 45882 . + . Parent=gene741 chr16 ENCODE CDS 45777 45882 . + 2 Parent=gene741 chr16 ENCODE exon 46539 46613 . + . Parent=gene741 chr16 ENCODE CDS 46539 46613 . + 1 Parent=gene741 chr16 ENCODE CDS 47086 47143 . + 1 Parent=gene741 chr16 ENCODE exon 47086 47669 . + . Parent=gene741 ### chr16 ENCODE gene 43864 47467 . + . ID=gene742;Name=Z69719.2-003;name2=C16orf33 chr16 ENCODE exon 43864 44058 . + . Parent=gene742 chr16 ENCODE exon 45766 45882 . + . Parent=gene742 chr16 ENCODE exon 46539 46613 . + . Parent=gene742 chr16 ENCODE exon 47086 47467 . + . Parent=gene742 ### chr16 ENCODE gene 43887 47372 . + . ID=gene743;Name=Z69719.2-004;name2=C16orf33 chr16 ENCODE exon 43887 44058 . + . Parent=gene743 chr16 ENCODE exon 45459 45549 . + . Parent=gene743 chr16 ENCODE exon 45777 45882 . + . Parent=gene743 chr16 ENCODE exon 46321 46420 . + . Parent=gene743 chr16 ENCODE exon 46539 46613 . + . Parent=gene743 chr16 ENCODE exon 47086 47372 . + . Parent=gene743 ### chr16 ENCODE gene 44960 47444 . + . ID=gene744;Name=Z69719.2-002;name2=C16orf33 chr16 ENCODE exon 44960 45549 . + . Parent=gene744 chr16 ENCODE exon 45777 45882 . + . Parent=gene744 chr16 ENCODE exon 46539 46613 . + . Parent=gene744 chr16 ENCODE exon 47086 47444 . + . Parent=gene744 ### chr16 ENCODE gene 45495 47453 . + . ID=gene745;Name=Z69719.2-005;name2=C16orf33 chr16 ENCODE exon 45495 45549 . + . Parent=gene745 chr16 ENCODE exon 45777 46613 . + . Parent=gene745 chr16 ENCODE exon 47086 47453 . + . Parent=gene745 ### chr16 ENCODE gene 48058 62629 . - . ID=gene746;Name=Z69719.3-001;name2=RHBDF1 chr16 ENCODE exon 48058 48758 . - . Parent=gene746 chr16 ENCODE CDS 48339 48758 . - 0 Parent=gene746 chr16 ENCODE exon 48972 49125 . - . Parent=gene746 chr16 ENCODE CDS 48972 49125 . - 1 Parent=gene746 chr16 ENCODE exon 49247 49347 . - . Parent=gene746 chr16 ENCODE CDS 49247 49347 . - 0 Parent=gene746 chr16 ENCODE exon 49417 49492 . - . Parent=gene746 chr16 ENCODE CDS 49417 49492 . - 1 Parent=gene746 chr16 ENCODE exon 49730 49824 . - . Parent=gene746 chr16 ENCODE CDS 49730 49824 . - 0 Parent=gene746 chr16 ENCODE exon 50214 50277 . - . Parent=gene746 chr16 ENCODE CDS 50214 50277 . - 1 Parent=gene746 chr16 ENCODE exon 50437 50537 . - . Parent=gene746 chr16 ENCODE CDS 50437 50537 . - 0 Parent=gene746 chr16 ENCODE exon 51118 51279 . - . Parent=gene746 chr16 ENCODE CDS 51118 51279 . - 0 Parent=gene746 chr16 ENCODE exon 51383 51457 . - . Parent=gene746 chr16 ENCODE CDS 51383 51457 . - 0 Parent=gene746 chr16 ENCODE exon 51583 51694 . - . Parent=gene746 chr16 ENCODE CDS 51583 51694 . - 1 Parent=gene746 chr16 ENCODE exon 51796 52050 . - . Parent=gene746 chr16 ENCODE CDS 51796 52050 . - 1 Parent=gene746 chr16 ENCODE exon 52536 52693 . - . Parent=gene746 chr16 ENCODE CDS 52536 52693 . - 0 Parent=gene746 chr16 ENCODE exon 52773 52895 . - . Parent=gene746 chr16 ENCODE CDS 52773 52895 . - 0 Parent=gene746 chr16 ENCODE exon 52971 53180 . - . Parent=gene746 chr16 ENCODE CDS 52971 53180 . - 0 Parent=gene746 chr16 ENCODE exon 53585 53798 . - . Parent=gene746 chr16 ENCODE CDS 53585 53798 . - 1 Parent=gene746 chr16 ENCODE exon 54697 54827 . - . Parent=gene746 chr16 ENCODE CDS 54697 54827 . - 0 Parent=gene746 chr16 ENCODE CDS 54897 55013 . - 0 Parent=gene746 chr16 ENCODE exon 54897 55037 . - . Parent=gene746 chr16 ENCODE exon 62511 62629 . - . Parent=gene746 ### chr16 ENCODE gene 48059 62593 . - . ID=gene747;Name=Z69719.3-002;name2=RHBDF1 chr16 ENCODE exon 48059 48758 . - . Parent=gene747 chr16 ENCODE exon 48972 49492 . - . Parent=gene747 chr16 ENCODE exon 49730 50277 . - . Parent=gene747 chr16 ENCODE exon 50437 51279 . - . Parent=gene747 chr16 ENCODE exon 51383 51457 . - . Parent=gene747 chr16 ENCODE exon 51583 51694 . - . Parent=gene747 chr16 ENCODE exon 51796 52050 . - . Parent=gene747 chr16 ENCODE exon 52536 52693 . - . Parent=gene747 chr16 ENCODE exon 52773 52895 . - . Parent=gene747 chr16 ENCODE exon 52971 53180 . - . Parent=gene747 chr16 ENCODE exon 53585 53798 . - . Parent=gene747 chr16 ENCODE exon 54697 54827 . - . Parent=gene747 chr16 ENCODE exon 54930 55037 . - . Parent=gene747 chr16 ENCODE exon 62511 62593 . - . Parent=gene747 ### chr16 ENCODE gene 48136 49760 . - . ID=gene748;name2=RHBDF1;Name=Z69719.3-008 chr16 ENCODE exon 48136 48758 . - . Parent=gene748 chr16 ENCODE CDS 48339 48758 . - 1 Parent=gene748 chr16 ENCODE exon 48972 49091 . - . Parent=gene748 chr16 ENCODE CDS 48972 49091 . - 1 Parent=gene748 chr16 ENCODE exon 49297 49347 . - . Parent=gene748 chr16 ENCODE CDS 49297 49347 . - 1 Parent=gene748 chr16 ENCODE exon 49417 49492 . - . Parent=gene748 chr16 ENCODE CDS 49417 49492 . - 2 Parent=gene748 chr16 ENCODE exon 49730 49760 . - . Parent=gene748 chr16 ENCODE CDS 49730 49760 . - 0 Parent=gene748 ### chr16 ENCODE gene 48972 50191 . - . ID=gene749;Name=Z69719.3-007;name2=RHBDF1 chr16 ENCODE exon 48972 49347 . - . Parent=gene749 chr16 ENCODE exon 49417 49492 . - . Parent=gene749 chr16 ENCODE exon 49730 50191 . - . Parent=gene749 ### chr16 ENCODE gene 49231 50678 . - . ID=gene750;Name=Z69719.3-006;name2=RHBDF1 chr16 ENCODE exon 49231 49492 . - . Parent=gene750 chr16 ENCODE exon 49730 50096 . - . Parent=gene750 chr16 ENCODE exon 50214 50277 . - . Parent=gene750 chr16 ENCODE exon 50437 50678 . - . Parent=gene750 ### chr16 ENCODE gene 51423 52204 . - . ID=gene751;Name=Z69719.3-009;name2=RHBDF1 chr16 ENCODE exon 51423 51457 . - . Parent=gene751 chr16 ENCODE exon 51583 51694 . - . Parent=gene751 chr16 ENCODE exon 51796 52204 . - . Parent=gene751 ### chr16 ENCODE gene 52971 55035 . - . ID=gene752;Name=Z69719.3-005;name2=RHBDF1 chr16 ENCODE exon 52971 53180 . - . Parent=gene752 chr16 ENCODE exon 53585 53920 . - . Parent=gene752 chr16 ENCODE exon 54697 54827 . - . Parent=gene752 chr16 ENCODE exon 54897 55035 . - . Parent=gene752 ### chr16 ENCODE gene 53035 62619 . - . ID=gene753;Name=Z69719.3-003;name2=RHBDF1 chr16 ENCODE exon 53035 53180 . - . Parent=gene753 chr16 ENCODE exon 53585 55037 . - . Parent=gene753 chr16 ENCODE exon 62511 62619 . - . Parent=gene753 ### chr16 ENCODE gene 53155 66354 . - . ID=gene754;name2=RHBDF1;Name=Z69719.3-010 chr16 ENCODE exon 53155 53180 . - . Parent=gene754 chr16 ENCODE CDS 53155 53180 . - 0 Parent=gene754 chr16 ENCODE exon 53585 53798 . - . Parent=gene754 chr16 ENCODE CDS 53585 53798 . - 1 Parent=gene754 chr16 ENCODE exon 54697 54827 . - . Parent=gene754 chr16 ENCODE CDS 54697 54827 . - 0 Parent=gene754 chr16 ENCODE CDS 54897 55013 . - 0 Parent=gene754 chr16 ENCODE exon 54897 55037 . - . Parent=gene754 chr16 ENCODE exon 66252 66354 . - . Parent=gene754 ### chr16 ENCODE gene 53585 62566 . - . ID=gene755;Name=Z69719.3-004;name2=RHBDF1 chr16 ENCODE exon 53585 53798 . - . Parent=gene755 chr16 ENCODE CDS 53585 53798 . - 1 Parent=gene755 chr16 ENCODE exon 54331 54438 . - . Parent=gene755 chr16 ENCODE CDS 54331 54438 . - 1 Parent=gene755 chr16 ENCODE exon 54697 54827 . - . Parent=gene755 chr16 ENCODE CDS 54697 54827 . - 0 Parent=gene755 chr16 ENCODE CDS 54897 55013 . - 0 Parent=gene755 chr16 ENCODE exon 54897 55037 . - . Parent=gene755 chr16 ENCODE exon 62514 62566 . - . Parent=gene755 ### chr16 ENCODE gene 54550 66340 . - . ID=gene756;Name=Z69719.3-011;name2=RHBDF1 chr16 ENCODE exon 54550 55037 . - . Parent=gene756 chr16 ENCODE exon 66252 66340 . - . Parent=gene756 ### chr16 ENCODE gene 67006 75683 . + . ID=gene757;Name=Z69720.1-004;name2=MPG chr16 ENCODE exon 67006 67124 . + . Parent=gene757 chr16 ENCODE exon 69424 69699 . + . Parent=gene757 chr16 ENCODE CDS 69436 69699 . + 0 Parent=gene757 chr16 ENCODE exon 73051 73255 . + . Parent=gene757 chr16 ENCODE CDS 73051 73255 . + 0 Parent=gene757 chr16 ENCODE exon 75400 75683 . + . Parent=gene757 chr16 ENCODE CDS 75400 75683 . + 2 Parent=gene757 ### chr16 ENCODE gene 68062 75852 . + . ID=gene758;name2=MPG;Name=Z69720.1-002 chr16 ENCODE exon 68062 68332 . + . Parent=gene758 chr16 ENCODE CDS 68309 68332 . + 0 Parent=gene758 chr16 ENCODE exon 69424 69699 . + . Parent=gene758 chr16 ENCODE CDS 69424 69699 . + 0 Parent=gene758 chr16 ENCODE exon 73051 73255 . + . Parent=gene758 chr16 ENCODE CDS 73051 73255 . + 0 Parent=gene758 chr16 ENCODE CDS 75400 75776 . + 2 Parent=gene758 chr16 ENCODE exon 75400 75852 . + . Parent=gene758 ### chr16 ENCODE gene 68243 69843 . + . ID=gene759;Name=Z69720.1-003;name2=MPG chr16 ENCODE exon 68243 68332 . + . Parent=gene759 chr16 ENCODE exon 69424 69843 . + . Parent=gene759 ### chr16 ENCODE gene 68256 75841 . + . ID=gene760;Name=Z69720.1-001;name2=MPG chr16 ENCODE exon 68256 68332 . + . Parent=gene760 chr16 ENCODE exon 69138 69330 . + . Parent=gene760 chr16 ENCODE CDS 69292 69330 . + 0 Parent=gene760 chr16 ENCODE exon 69424 69699 . + . Parent=gene760 chr16 ENCODE CDS 69424 69699 . + 0 Parent=gene760 chr16 ENCODE exon 73051 73255 . + . Parent=gene760 chr16 ENCODE CDS 73051 73255 . + 0 Parent=gene760 chr16 ENCODE CDS 75400 75776 . + 2 Parent=gene760 chr16 ENCODE exon 75400 75841 . + . Parent=gene760 ### chr16 ENCODE gene 74273 81084 . - . ID=gene761;Name=Z69666.1-005;name2=C16orf35 chr16 ENCODE exon 74273 74594 . - . Parent=gene761 chr16 ENCODE exon 76667 76869 . - . Parent=gene761 chr16 ENCODE exon 78697 81084 . - . Parent=gene761 ### chr16 ENCODE gene 74273 128859 . - . ID=gene762;Name=Z69666.1-001;name2=C16orf35 chr16 ENCODE exon 74273 74594 . - . Parent=gene762 chr16 ENCODE exon 75820 76869 . - . Parent=gene762 chr16 ENCODE exon 78697 78773 . - . Parent=gene762 chr16 ENCODE exon 78776 78888 . - . Parent=gene762 chr16 ENCODE exon 79711 79900 . - . Parent=gene762 chr16 ENCODE exon 82594 82723 . - . Parent=gene762 chr16 ENCODE exon 83217 83323 . - . Parent=gene762 chr16 ENCODE exon 88143 88299 . - . Parent=gene762 chr16 ENCODE exon 90370 90507 . - . Parent=gene762 chr16 ENCODE exon 100523 100604 . - . Parent=gene762 chr16 ENCODE exon 102621 102774 . - . Parent=gene762 chr16 ENCODE exon 107300 107374 . - . Parent=gene762 chr16 ENCODE exon 109125 109254 . - . Parent=gene762 chr16 ENCODE exon 120521 120590 . - . Parent=gene762 chr16 ENCODE exon 128149 128333 . - . Parent=gene762 chr16 ENCODE exon 128641 128859 . - . Parent=gene762 ### chr16 ENCODE gene 75800 128511 . - . ID=gene763;Name=Z69666.1-003;name2=C16orf35 chr16 ENCODE exon 75800 76869 . - . Parent=gene763 chr16 ENCODE CDS 76704 76869 . - 1 Parent=gene763 chr16 ENCODE exon 78697 78773 . - . Parent=gene763 chr16 ENCODE CDS 78697 78773 . - 0 Parent=gene763 chr16 ENCODE exon 78776 78888 . - . Parent=gene763 chr16 ENCODE CDS 78776 78888 . - 2 Parent=gene763 chr16 ENCODE exon 79711 79900 . - . Parent=gene763 chr16 ENCODE CDS 79711 79900 . - 0 Parent=gene763 chr16 ENCODE exon 82594 82723 . - . Parent=gene763 chr16 ENCODE CDS 82594 82723 . - 1 Parent=gene763 chr16 ENCODE exon 83217 83323 . - . Parent=gene763 chr16 ENCODE CDS 83217 83323 . - 0 Parent=gene763 chr16 ENCODE exon 88143 88299 . - . Parent=gene763 chr16 ENCODE CDS 88143 88299 . - 1 Parent=gene763 chr16 ENCODE exon 90370 90507 . - . Parent=gene763 chr16 ENCODE CDS 90370 90507 . - 1 Parent=gene763 chr16 ENCODE exon 100523 100604 . - . Parent=gene763 chr16 ENCODE CDS 100523 100604 . - 2 Parent=gene763 chr16 ENCODE exon 102621 102774 . - . Parent=gene763 chr16 ENCODE CDS 102621 102774 . - 0 Parent=gene763 chr16 ENCODE exon 109125 109254 . - . Parent=gene763 chr16 ENCODE CDS 109125 109254 . - 1 Parent=gene763 chr16 ENCODE exon 120521 120590 . - . Parent=gene763 chr16 ENCODE CDS 120521 120590 . - 2 Parent=gene763 chr16 ENCODE CDS 128149 128266 . - 0 Parent=gene763 chr16 ENCODE exon 128149 128511 . - . Parent=gene763 ### chr16 ENCODE gene 75800 128669 . - . ID=gene764;Name=Z69666.1-002;name2=C16orf35 chr16 ENCODE exon 75800 76869 . - . Parent=gene764 chr16 ENCODE exon 78697 78773 . - . Parent=gene764 chr16 ENCODE exon 78776 78888 . - . Parent=gene764 chr16 ENCODE exon 79711 79900 . - . Parent=gene764 chr16 ENCODE exon 82594 82723 . - . Parent=gene764 chr16 ENCODE exon 83217 83323 . - . Parent=gene764 chr16 ENCODE exon 88143 88299 . - . Parent=gene764 chr16 ENCODE exon 90370 90507 . - . Parent=gene764 chr16 ENCODE exon 100523 100604 . - . Parent=gene764 chr16 ENCODE exon 102621 102774 . - . Parent=gene764 chr16 ENCODE exon 120521 120590 . - . Parent=gene764 chr16 ENCODE exon 128149 128669 . - . Parent=gene764 ### chr16 ENCODE gene 76696 128268 . - . ID=gene765;Name=Z69666.1-004;name2=C16orf35 chr16 ENCODE exon 76696 76869 . - . Parent=gene765 chr16 ENCODE exon 78697 78888 . - . Parent=gene765 chr16 ENCODE exon 79711 79900 . - . Parent=gene765 chr16 ENCODE exon 82594 82723 . - . Parent=gene765 chr16 ENCODE exon 83217 83323 . - . Parent=gene765 chr16 ENCODE exon 88143 88299 . - . Parent=gene765 chr16 ENCODE exon 90370 90507 . - . Parent=gene765 chr16 ENCODE exon 100523 100604 . - . Parent=gene765 chr16 ENCODE exon 102621 102774 . - . Parent=gene765 chr16 ENCODE exon 107300 107374 . - . Parent=gene765 chr16 ENCODE exon 120521 120590 . - . Parent=gene765 chr16 ENCODE exon 128149 128268 . - . Parent=gene765 ### chr16 ENCODE gene 76704 128266 . - . ID=gene766;Name=Z69666.1-012;name2=C16orf35 chr16 ENCODE exon 76704 76869 . - . Parent=gene766 chr16 ENCODE CDS 76704 76869 . - 1 Parent=gene766 chr16 ENCODE exon 78697 78773 . - . Parent=gene766 chr16 ENCODE CDS 78697 78773 . - 0 Parent=gene766 chr16 ENCODE exon 78776 78888 . - . Parent=gene766 chr16 ENCODE CDS 78776 78888 . - 2 Parent=gene766 chr16 ENCODE exon 79711 79900 . - . Parent=gene766 chr16 ENCODE CDS 79711 79900 . - 0 Parent=gene766 chr16 ENCODE exon 82594 82723 . - . Parent=gene766 chr16 ENCODE CDS 82594 82723 . - 1 Parent=gene766 chr16 ENCODE exon 83217 83323 . - . Parent=gene766 chr16 ENCODE CDS 83217 83323 . - 0 Parent=gene766 chr16 ENCODE exon 88143 88299 . - . Parent=gene766 chr16 ENCODE CDS 88143 88299 . - 1 Parent=gene766 chr16 ENCODE exon 90370 90507 . - . Parent=gene766 chr16 ENCODE CDS 90370 90507 . - 1 Parent=gene766 chr16 ENCODE exon 100523 100604 . - . Parent=gene766 chr16 ENCODE CDS 100523 100604 . - 2 Parent=gene766 chr16 ENCODE exon 102621 102774 . - . Parent=gene766 chr16 ENCODE CDS 102621 102774 . - 0 Parent=gene766 chr16 ENCODE exon 107300 107374 . - . Parent=gene766 chr16 ENCODE CDS 107300 107374 . - 0 Parent=gene766 chr16 ENCODE exon 109125 109254 . - . Parent=gene766 chr16 ENCODE CDS 109125 109254 . - 1 Parent=gene766 chr16 ENCODE exon 120521 120590 . - . Parent=gene766 chr16 ENCODE CDS 120521 120590 . - 2 Parent=gene766 chr16 ENCODE exon 128149 128266 . - . Parent=gene766 chr16 ENCODE CDS 128149 128266 . - 0 Parent=gene766 ### chr16 ENCODE gene 82789 88158 . - . ID=gene767;Name=Z69666.1-009;name2=C16orf35 chr16 ENCODE exon 82789 83323 . - . Parent=gene767 chr16 ENCODE exon 88143 88158 . - . Parent=gene767 ### chr16 ENCODE gene 83257 109404 . - . ID=gene768;Name=Z69666.1-008;name2=C16orf35 chr16 ENCODE exon 83257 83323 . - . Parent=gene768 chr16 ENCODE exon 88143 88299 . - . Parent=gene768 chr16 ENCODE exon 90370 90507 . - . Parent=gene768 chr16 ENCODE exon 100523 100604 . - . Parent=gene768 chr16 ENCODE exon 102621 102774 . - . Parent=gene768 chr16 ENCODE exon 107300 107374 . - . Parent=gene768 chr16 ENCODE exon 109125 109254 . - . Parent=gene768 chr16 ENCODE exon 109353 109404 . - . Parent=gene768 ### chr16 ENCODE gene 88228 128665 . - . ID=gene769;Name=Z69666.1-010;name2=C16orf35 chr16 ENCODE exon 88228 88299 . - . Parent=gene769 chr16 ENCODE exon 90370 90507 . - . Parent=gene769 chr16 ENCODE exon 100523 100604 . - . Parent=gene769 chr16 ENCODE exon 102621 102774 . - . Parent=gene769 chr16 ENCODE exon 107300 107374 . - . Parent=gene769 chr16 ENCODE exon 109125 109254 . - . Parent=gene769 chr16 ENCODE exon 113506 113544 . - . Parent=gene769 chr16 ENCODE exon 114936 115072 . - . Parent=gene769 chr16 ENCODE exon 120521 120590 . - . Parent=gene769 chr16 ENCODE exon 128641 128665 . - . Parent=gene769 ### chr16 ENCODE gene 100523 128676 . - . ID=gene770;Name=Z69666.1-006;name2=C16orf35 chr16 ENCODE exon 100523 100604 . - . Parent=gene770 chr16 ENCODE exon 102621 102774 . - . Parent=gene770 chr16 ENCODE exon 109125 109254 . - . Parent=gene770 chr16 ENCODE exon 114936 115072 . - . Parent=gene770 chr16 ENCODE exon 120521 120590 . - . Parent=gene770 chr16 ENCODE exon 128149 128333 . - . Parent=gene770 chr16 ENCODE exon 128641 128676 . - . Parent=gene770 ### chr16 ENCODE gene 102659 128334 . - . ID=gene771;Name=Z69666.1-011;name2=C16orf35 chr16 ENCODE exon 102659 102774 . - . Parent=gene771 chr16 ENCODE CDS 102659 102774 . - 0 Parent=gene771 chr16 ENCODE exon 107300 107374 . - . Parent=gene771 chr16 ENCODE CDS 107300 107374 . - 0 Parent=gene771 chr16 ENCODE exon 109125 109254 . - . Parent=gene771 chr16 ENCODE CDS 109125 109254 . - 1 Parent=gene771 chr16 ENCODE exon 113506 113544 . - . Parent=gene771 chr16 ENCODE CDS 113506 113544 . - 1 Parent=gene771 chr16 ENCODE exon 120521 120590 . - . Parent=gene771 chr16 ENCODE CDS 120521 120590 . - 2 Parent=gene771 chr16 ENCODE CDS 128149 128266 . - 0 Parent=gene771 chr16 ENCODE exon 128149 128334 . - . Parent=gene771 ### chr16 ENCODE gene 142686 144502 . + . ID=gene772;Name=Z84721.1-001;name2=HBZ chr16 ENCODE exon 142686 143003 . + . Parent=gene772 chr16 ENCODE CDS 142909 143003 . + 0 Parent=gene772 chr16 ENCODE exon 143891 144095 . + . Parent=gene772 chr16 ENCODE CDS 143891 144095 . + 1 Parent=gene772 chr16 ENCODE CDS 144271 144399 . + 0 Parent=gene772 chr16 ENCODE exon 144271 144502 . + . Parent=gene772 ### chr16 ENCODE gene 143891 156760 . + . ID=gene773;Name=Z84721.3-003;name2=HBM chr16 ENCODE exon 143891 144095 . + . Parent=gene773 chr16 ENCODE exon 156267 156471 . + . Parent=gene773 chr16 ENCODE exon 156579 156760 . + . Parent=gene773 ### chr16 ENCODE gene 154481 156760 . + . ID=gene774;Name=Z84721.3-002;name2=HBM chr16 ENCODE exon 154481 154685 . + . Parent=gene774 chr16 ENCODE exon 156267 156471 . + . Parent=gene774 chr16 ENCODE exon 156579 156760 . + . Parent=gene774 ### chr16 ENCODE gene 155977 156767 . + . ID=gene775;Name=Z84721.3-001;name2=HBM chr16 ENCODE exon 155977 156088 . + . Parent=gene775 chr16 ENCODE CDS 155997 156088 . + 0 Parent=gene775 chr16 ENCODE exon 156267 156471 . + . Parent=gene775 chr16 ENCODE CDS 156267 156471 . + 1 Parent=gene775 chr16 ENCODE CDS 156579 156707 . + 0 Parent=gene775 chr16 ENCODE exon 156579 156767 . + . Parent=gene775 ### chr16 ENCODE gene 162846 163709 . + . ID=gene776;Name=Z84721.5-001;name2=HBA2 chr16 ENCODE exon 162846 163006 . + . Parent=gene776 chr16 ENCODE CDS 162912 163006 . + 0 Parent=gene776 chr16 ENCODE exon 163124 163328 . + . Parent=gene776 chr16 ENCODE CDS 163124 163328 . + 1 Parent=gene776 chr16 ENCODE CDS 163471 163599 . + 0 Parent=gene776 chr16 ENCODE exon 163471 163709 . + . Parent=gene776 ### chr16 ENCODE gene 162889 163709 . + . ID=gene777;Name=Z84721.5-002;name2=HBA2 chr16 ENCODE exon 162889 162957 . + . Parent=gene777 chr16 ENCODE exon 163124 163328 . + . Parent=gene777 chr16 ENCODE CDS 163125 163328 . + 0 Parent=gene777 chr16 ENCODE CDS 163471 163599 . + 0 Parent=gene777 chr16 ENCODE exon 163471 163709 . + . Parent=gene777 ### chr16 ENCODE gene 162893 163674 . + . ID=gene778;Name=Z84721.5-003;name2=HBA2 chr16 ENCODE exon 162893 163328 . + . Parent=gene778 chr16 ENCODE exon 163471 163674 . + . Parent=gene778 ### chr16 ENCODE gene 162942 163655 . + . ID=gene779;name2=HBA2;Name=Z84721.5-005 chr16 ENCODE exon 162942 163006 . + . Parent=gene779 chr16 ENCODE exon 163124 163247 . + . Parent=gene779 chr16 ENCODE exon 163308 163328 . + . Parent=gene779 chr16 ENCODE exon 163471 163655 . + . Parent=gene779 ### chr16 ENCODE gene 162943 163462 . + . ID=gene780;Name=Z84721.5-006;name2=HBA2 chr16 ENCODE exon 162943 163006 . + . Parent=gene780 chr16 ENCODE exon 163124 163462 . + . Parent=gene780 ### chr16 ENCODE gene 166679 167521 . + . ID=gene781;Name=Z84721.6-001;name2=HBA1 chr16 ENCODE exon 166679 166810 . + . Parent=gene781 chr16 ENCODE CDS 166716 166810 . + 0 Parent=gene781 chr16 ENCODE exon 166928 167132 . + . Parent=gene781 chr16 ENCODE CDS 166928 167132 . + 1 Parent=gene781 chr16 ENCODE CDS 167282 167410 . + 0 Parent=gene781 chr16 ENCODE exon 167282 167521 . + . Parent=gene781 ### chr16 ENCODE gene 166697 167519 . + . ID=gene782;Name=Z84721.6-002;name2=HBA1 chr16 ENCODE exon 166697 167132 . + . Parent=gene782 chr16 ENCODE exon 167282 167519 . + . Parent=gene782 ### chr16 ENCODE gene 166702 167488 . + . ID=gene783;Name=Z84721.6-003;name2=HBA1 chr16 ENCODE exon 166702 166810 . + . Parent=gene783 chr16 ENCODE exon 166928 166967 . + . Parent=gene783 chr16 ENCODE exon 167121 167132 . + . Parent=gene783 chr16 ENCODE exon 167282 167488 . + . Parent=gene783 ### chr16 ENCODE gene 166703 167521 . + . ID=gene784;Name=Z84721.6-006;name2=HBA1 chr16 ENCODE exon 166703 166761 . + . Parent=gene784 chr16 ENCODE exon 166928 167132 . + . Parent=gene784 chr16 ENCODE CDS 166929 167132 . + 0 Parent=gene784 chr16 ENCODE CDS 167282 167410 . + 0 Parent=gene784 chr16 ENCODE exon 167282 167521 . + . Parent=gene784 ### chr16 ENCODE gene 166746 167498 . + . ID=gene785;Name=Z84721.6-004;name2=HBA1 chr16 ENCODE exon 166746 166810 . + . Parent=gene785 chr16 ENCODE exon 166928 167051 . + . Parent=gene785 chr16 ENCODE exon 167112 167132 . + . Parent=gene785 chr16 ENCODE exon 167282 167498 . + . Parent=gene785 ### chr16 ENCODE gene 166747 167273 . + . ID=gene786;Name=Z84721.6-005;name2=HBA1 chr16 ENCODE exon 166747 166810 . + . Parent=gene786 chr16 ENCODE exon 166928 167273 . + . Parent=gene786 ### chr16 ENCODE gene 170452 171180 . + . ID=gene787;Name=Z84721.7-001;name2=HBQ1 chr16 ENCODE exon 170452 170580 . + . Parent=gene787 chr16 ENCODE CDS 170486 170580 . + 0 Parent=gene787 chr16 ENCODE exon 170665 170869 . + . Parent=gene787 chr16 ENCODE CDS 170665 170869 . + 1 Parent=gene787 chr16 ENCODE CDS 170979 171107 . + 0 Parent=gene787 chr16 ENCODE exon 170979 171180 . + . Parent=gene787 ### chr16 ENCODE gene 178969 219439 . - . ID=gene788;Name=LA16c-OS12.1-006;name2=LUC7L chr16 ENCODE exon 178969 179339 . - . Parent=gene788 chr16 ENCODE exon 179968 180135 . - . Parent=gene788 chr16 ENCODE exon 180541 180570 . - . Parent=gene788 chr16 ENCODE exon 182927 183015 . - . Parent=gene788 chr16 ENCODE exon 189062 189238 . - . Parent=gene788 chr16 ENCODE exon 196004 196147 . - . Parent=gene788 chr16 ENCODE exon 198078 198188 . - . Parent=gene788 chr16 ENCODE exon 210649 210747 . - . Parent=gene788 chr16 ENCODE exon 217242 217336 . - . Parent=gene788 chr16 ENCODE exon 217987 219439 . - . Parent=gene788 ### chr16 ENCODE gene 178969 219450 . - . ID=gene789;Name=LA16c-OS12.1-003;name2=LUC7L chr16 ENCODE exon 178969 179339 . - . Parent=gene789 chr16 ENCODE CDS 179198 179339 . - 1 Parent=gene789 chr16 ENCODE exon 179968 180135 . - . Parent=gene789 chr16 ENCODE CDS 179968 180135 . - 1 Parent=gene789 chr16 ENCODE exon 180541 180570 . - . Parent=gene789 chr16 ENCODE CDS 180541 180570 . - 1 Parent=gene789 chr16 ENCODE exon 182927 183015 . - . Parent=gene789 chr16 ENCODE CDS 182927 183015 . - 0 Parent=gene789 chr16 ENCODE exon 189062 189238 . - . Parent=gene789 chr16 ENCODE CDS 189062 189238 . - 0 Parent=gene789 chr16 ENCODE exon 196004 196147 . - . Parent=gene789 chr16 ENCODE CDS 196004 196147 . - 0 Parent=gene789 chr16 ENCODE exon 198078 198188 . - . Parent=gene789 chr16 ENCODE CDS 198078 198188 . - 0 Parent=gene789 chr16 ENCODE exon 210649 210747 . - . Parent=gene789 chr16 ENCODE CDS 210649 210747 . - 0 Parent=gene789 chr16 ENCODE exon 217242 217336 . - . Parent=gene789 chr16 ENCODE CDS 217242 217336 . - 2 Parent=gene789 chr16 ENCODE CDS 219279 219339 . - 0 Parent=gene789 chr16 ENCODE exon 219279 219450 . - . Parent=gene789 ### chr16 ENCODE gene 178969 219463 . - . ID=gene790;Name=LA16c-OS12.1-001;name2=LUC7L chr16 ENCODE exon 178969 180135 . - . Parent=gene790 chr16 ENCODE CDS 179964 180135 . - 1 Parent=gene790 chr16 ENCODE exon 180541 180570 . - . Parent=gene790 chr16 ENCODE CDS 180541 180570 . - 1 Parent=gene790 chr16 ENCODE exon 182927 183015 . - . Parent=gene790 chr16 ENCODE CDS 182927 183015 . - 0 Parent=gene790 chr16 ENCODE exon 189062 189238 . - . Parent=gene790 chr16 ENCODE CDS 189062 189238 . - 0 Parent=gene790 chr16 ENCODE exon 196004 196147 . - . Parent=gene790 chr16 ENCODE CDS 196004 196147 . - 0 Parent=gene790 chr16 ENCODE exon 198078 198188 . - . Parent=gene790 chr16 ENCODE CDS 198078 198188 . - 0 Parent=gene790 chr16 ENCODE exon 210649 210747 . - . Parent=gene790 chr16 ENCODE CDS 210649 210747 . - 0 Parent=gene790 chr16 ENCODE exon 217242 217336 . - . Parent=gene790 chr16 ENCODE CDS 217242 217336 . - 2 Parent=gene790 chr16 ENCODE CDS 219279 219339 . - 0 Parent=gene790 chr16 ENCODE exon 219279 219463 . - . Parent=gene790 ### chr16 ENCODE gene 178971 219463 . - . ID=gene791;Name=LA16c-OS12.1-002;name2=LUC7L chr16 ENCODE exon 178971 179339 . - . Parent=gene791 chr16 ENCODE exon 179931 180135 . - . Parent=gene791 chr16 ENCODE CDS 179964 180135 . - 1 Parent=gene791 chr16 ENCODE exon 180541 180570 . - . Parent=gene791 chr16 ENCODE CDS 180541 180570 . - 1 Parent=gene791 chr16 ENCODE exon 182927 183015 . - . Parent=gene791 chr16 ENCODE CDS 182927 183015 . - 0 Parent=gene791 chr16 ENCODE exon 189062 189238 . - . Parent=gene791 chr16 ENCODE CDS 189062 189238 . - 0 Parent=gene791 chr16 ENCODE exon 196004 196147 . - . Parent=gene791 chr16 ENCODE CDS 196004 196147 . - 0 Parent=gene791 chr16 ENCODE exon 198078 198188 . - . Parent=gene791 chr16 ENCODE CDS 198078 198188 . - 0 Parent=gene791 chr16 ENCODE exon 210649 210747 . - . Parent=gene791 chr16 ENCODE CDS 210649 210747 . - 0 Parent=gene791 chr16 ENCODE exon 217242 217336 . - . Parent=gene791 chr16 ENCODE CDS 217242 217336 . - 2 Parent=gene791 chr16 ENCODE CDS 219279 219339 . - 0 Parent=gene791 chr16 ENCODE exon 219279 219463 . - . Parent=gene791 ### chr16 ENCODE gene 178990 180595 . - . ID=gene792;Name=LA16c-OS12.1-017;name2=LUC7L chr16 ENCODE exon 178990 179339 . - . Parent=gene792 chr16 ENCODE exon 179968 180135 . - . Parent=gene792 chr16 ENCODE exon 180541 180595 . - . Parent=gene792 ### chr16 ENCODE gene 178990 196087 . - . ID=gene793;Name=LA16c-OS12.1-016;name2=LUC7L chr16 ENCODE exon 178990 179339 . - . Parent=gene793 chr16 ENCODE CDS 179198 179339 . - 1 Parent=gene793 chr16 ENCODE exon 179968 180135 . - . Parent=gene793 chr16 ENCODE CDS 179968 180135 . - 1 Parent=gene793 chr16 ENCODE exon 180541 180570 . - . Parent=gene793 chr16 ENCODE CDS 180541 180570 . - 1 Parent=gene793 chr16 ENCODE exon 182927 183015 . - . Parent=gene793 chr16 ENCODE CDS 182927 183015 . - 0 Parent=gene793 chr16 ENCODE exon 196004 196087 . - . Parent=gene793 chr16 ENCODE CDS 196004 196087 . - 0 Parent=gene793 ### chr16 ENCODE gene 178990 219451 . - . ID=gene794;Name=LA16c-OS12.1-005;name2=LUC7L chr16 ENCODE exon 178990 179339 . - . Parent=gene794 chr16 ENCODE exon 179968 180135 . - . Parent=gene794 chr16 ENCODE exon 180541 180570 . - . Parent=gene794 chr16 ENCODE exon 180662 180802 . - . Parent=gene794 chr16 ENCODE exon 182927 183015 . - . Parent=gene794 chr16 ENCODE exon 189062 189238 . - . Parent=gene794 chr16 ENCODE exon 196004 196147 . - . Parent=gene794 chr16 ENCODE exon 198078 198188 . - . Parent=gene794 chr16 ENCODE exon 210649 210747 . - . Parent=gene794 chr16 ENCODE exon 217242 218402 . - . Parent=gene794 chr16 ENCODE exon 219279 219451 . - . Parent=gene794 ### chr16 ENCODE gene 179098 199773 . - . ID=gene795;Name=LA16c-OS12.1-008;name2=LUC7L chr16 ENCODE exon 179098 179339 . - . Parent=gene795 chr16 ENCODE exon 179968 180135 . - . Parent=gene795 chr16 ENCODE exon 180541 180570 . - . Parent=gene795 chr16 ENCODE exon 182927 183015 . - . Parent=gene795 chr16 ENCODE exon 189062 189238 . - . Parent=gene795 chr16 ENCODE exon 196004 196147 . - . Parent=gene795 chr16 ENCODE exon 198078 198188 . - . Parent=gene795 chr16 ENCODE exon 198601 199773 . - . Parent=gene795 ### chr16 ENCODE gene 179115 180549 . - . ID=gene796;Name=LA16c-OS12.1-018;name2=LUC7L chr16 ENCODE exon 179115 179339 . - . Parent=gene796 chr16 ENCODE exon 179947 180135 . - . Parent=gene796 chr16 ENCODE exon 180541 180549 . - . Parent=gene796 ### chr16 ENCODE gene 179896 217686 . - . ID=gene797;Name=LA16c-OS12.1-007;name2=LUC7L chr16 ENCODE exon 179896 180135 . - . Parent=gene797 chr16 ENCODE CDS 179964 180135 . - 1 Parent=gene797 chr16 ENCODE exon 180541 180570 . - . Parent=gene797 chr16 ENCODE CDS 180541 180570 . - 1 Parent=gene797 chr16 ENCODE exon 182927 183015 . - . Parent=gene797 chr16 ENCODE CDS 182927 183015 . - 0 Parent=gene797 chr16 ENCODE exon 189062 189238 . - . Parent=gene797 chr16 ENCODE CDS 189062 189238 . - 0 Parent=gene797 chr16 ENCODE exon 196004 196147 . - . Parent=gene797 chr16 ENCODE CDS 196004 196147 . - 0 Parent=gene797 chr16 ENCODE exon 198078 198188 . - . Parent=gene797 chr16 ENCODE CDS 198078 198188 . - 0 Parent=gene797 chr16 ENCODE CDS 210649 210744 . - 0 Parent=gene797 chr16 ENCODE exon 210649 210747 . - . Parent=gene797 chr16 ENCODE exon 217242 217686 . - . Parent=gene797 ### chr16 ENCODE gene 179896 219434 . - . ID=gene798;Name=LA16c-OS12.1-004;name2=LUC7L chr16 ENCODE exon 179896 180135 . - . Parent=gene798 chr16 ENCODE exon 180541 180570 . - . Parent=gene798 chr16 ENCODE exon 182927 183015 . - . Parent=gene798 chr16 ENCODE exon 189062 189238 . - . Parent=gene798 chr16 ENCODE exon 196004 196147 . - . Parent=gene798 chr16 ENCODE exon 198078 198188 . - . Parent=gene798 chr16 ENCODE exon 210649 210747 . - . Parent=gene798 chr16 ENCODE exon 217242 217336 . - . Parent=gene798 chr16 ENCODE exon 218333 218402 . - . Parent=gene798 chr16 ENCODE exon 219279 219434 . - . Parent=gene798 ### chr16 ENCODE gene 180001 198508 . - . ID=gene799;Name=LA16c-OS12.1-014;name2=LUC7L chr16 ENCODE exon 180001 180135 . - . Parent=gene799 chr16 ENCODE exon 180541 180570 . - . Parent=gene799 chr16 ENCODE exon 182927 183015 . - . Parent=gene799 chr16 ENCODE exon 189062 189238 . - . Parent=gene799 chr16 ENCODE exon 196004 196147 . - . Parent=gene799 chr16 ENCODE exon 198078 198508 . - . Parent=gene799 ### chr16 ENCODE gene 180122 219374 . - . ID=gene800;Name=LA16c-OS12.1-009;name2=LUC7L chr16 ENCODE exon 180122 180135 . - . Parent=gene800 chr16 ENCODE exon 180541 180570 . - . Parent=gene800 chr16 ENCODE exon 182927 183015 . - . Parent=gene800 chr16 ENCODE exon 189062 189238 . - . Parent=gene800 chr16 ENCODE exon 196004 196147 . - . Parent=gene800 chr16 ENCODE exon 198078 198188 . - . Parent=gene800 chr16 ENCODE exon 198601 198664 . - . Parent=gene800 chr16 ENCODE exon 210649 210747 . - . Parent=gene800 chr16 ENCODE exon 217242 217336 . - . Parent=gene800 chr16 ENCODE exon 218333 218402 . - . Parent=gene800 chr16 ENCODE exon 219279 219374 . - . Parent=gene800 ### chr16 ENCODE gene 180541 219422 . - . ID=gene801;Name=LA16c-OS12.1-015;name2=LUC7L chr16 ENCODE exon 180541 180570 . - . Parent=gene801 chr16 ENCODE exon 182927 183015 . - . Parent=gene801 chr16 ENCODE exon 189062 189238 . - . Parent=gene801 chr16 ENCODE exon 196004 196147 . - . Parent=gene801 chr16 ENCODE exon 198078 198188 . - . Parent=gene801 chr16 ENCODE exon 219279 219422 . - . Parent=gene801 ### chr16 ENCODE gene 196004 217656 . - . ID=gene802;Name=LA16c-OS12.1-012;name2=LUC7L chr16 ENCODE exon 196004 196147 . - . Parent=gene802 chr16 ENCODE exon 198078 198188 . - . Parent=gene802 chr16 ENCODE exon 198601 198664 . - . Parent=gene802 chr16 ENCODE exon 210649 210747 . - . Parent=gene802 chr16 ENCODE exon 217242 217656 . - . Parent=gene802 ### chr16 ENCODE gene 198633 219142 . - . ID=gene803;Name=LA16c-OS12.1-010;name2=LUC7L chr16 ENCODE exon 198633 198664 . - . Parent=gene803 chr16 ENCODE exon 210649 210747 . - . Parent=gene803 chr16 ENCODE exon 217242 217336 . - . Parent=gene803 chr16 ENCODE exon 218701 219142 . - . Parent=gene803 ### chr16 ENCODE gene 210171 217614 . - . ID=gene804;Name=LA16c-OS12.1-013;name2=LUC7L chr16 ENCODE exon 210171 210747 . - . Parent=gene804 chr16 ENCODE exon 217242 217614 . - . Parent=gene804 ### chr16 ENCODE gene 218124 218990 . - . ID=gene805;Name=LA16c-OS12.1-011;name2=LUC7L chr16 ENCODE exon 218124 218402 . - . Parent=gene805 chr16 ENCODE exon 218701 218990 . - . Parent=gene805 ### chr16 ENCODE gene 224546 256125 . + . ID=gene806;name2=ITFG3;Name=AC004754.1-001 chr16 ENCODE exon 224546 224857 . + . Parent=gene806 chr16 ENCODE exon 239549 239654 . + . Parent=gene806 chr16 ENCODE exon 244381 244681 . + . Parent=gene806 chr16 ENCODE CDS 244414 244681 . + 0 Parent=gene806 chr16 ENCODE exon 249483 249599 . + . Parent=gene806 chr16 ENCODE CDS 249483 249599 . + 2 Parent=gene806 chr16 ENCODE exon 249969 250160 . + . Parent=gene806 chr16 ENCODE CDS 249969 250160 . + 2 Parent=gene806 chr16 ENCODE exon 251384 251514 . + . Parent=gene806 chr16 ENCODE CDS 251384 251514 . + 2 Parent=gene806 chr16 ENCODE exon 252093 252225 . + . Parent=gene806 chr16 ENCODE CDS 252093 252225 . + 0 Parent=gene806 chr16 ENCODE exon 252424 252553 . + . Parent=gene806 chr16 ENCODE CDS 252424 252553 . + 2 Parent=gene806 chr16 ENCODE exon 253262 253402 . + . Parent=gene806 chr16 ENCODE CDS 253262 253402 . + 1 Parent=gene806 chr16 ENCODE exon 253700 253775 . + . Parent=gene806 chr16 ENCODE CDS 253700 253775 . + 1 Parent=gene806 chr16 ENCODE exon 254016 254171 . + . Parent=gene806 chr16 ENCODE CDS 254016 254171 . + 0 Parent=gene806 chr16 ENCODE exon 254614 254716 . + . Parent=gene806 chr16 ENCODE CDS 254614 254716 . + 0 Parent=gene806 chr16 ENCODE CDS 254811 255022 . + 2 Parent=gene806 chr16 ENCODE exon 254811 256125 . + . Parent=gene806 ### chr16 ENCODE gene 224802 258971 . + . ID=gene807;Name=AC004754.1-002;name2=ITFG3 chr16 ENCODE exon 224802 224857 . + . Parent=gene807 chr16 ENCODE exon 239549 239654 . + . Parent=gene807 chr16 ENCODE exon 244381 244681 . + . Parent=gene807 chr16 ENCODE CDS 244414 244681 . + 0 Parent=gene807 chr16 ENCODE exon 249483 249599 . + . Parent=gene807 chr16 ENCODE CDS 249483 249599 . + 2 Parent=gene807 chr16 ENCODE exon 249969 250160 . + . Parent=gene807 chr16 ENCODE CDS 249969 250160 . + 2 Parent=gene807 chr16 ENCODE exon 251384 251514 . + . Parent=gene807 chr16 ENCODE CDS 251384 251514 . + 2 Parent=gene807 chr16 ENCODE exon 252093 252225 . + . Parent=gene807 chr16 ENCODE CDS 252093 252225 . + 0 Parent=gene807 chr16 ENCODE exon 252424 252553 . + . Parent=gene807 chr16 ENCODE CDS 252424 252553 . + 2 Parent=gene807 chr16 ENCODE exon 253262 253402 . + . Parent=gene807 chr16 ENCODE CDS 253262 253402 . + 1 Parent=gene807 chr16 ENCODE exon 253700 253775 . + . Parent=gene807 chr16 ENCODE CDS 253700 253775 . + 1 Parent=gene807 chr16 ENCODE exon 254016 254171 . + . Parent=gene807 chr16 ENCODE CDS 254016 254171 . + 0 Parent=gene807 chr16 ENCODE exon 254614 254716 . + . Parent=gene807 chr16 ENCODE CDS 254614 254716 . + 0 Parent=gene807 chr16 ENCODE exon 254811 254908 . + . Parent=gene807 chr16 ENCODE CDS 254811 254908 . + 2 Parent=gene807 chr16 ENCODE CDS 258776 258853 . + 0 Parent=gene807 chr16 ENCODE exon 258776 258971 . + . Parent=gene807 ### chr16 ENCODE gene 224818 249521 . + . ID=gene808;name2=ITFG3;Name=AC004754.1-017 chr16 ENCODE exon 224818 224857 . + . Parent=gene808 chr16 ENCODE exon 239549 239654 . + . Parent=gene808 chr16 ENCODE exon 243833 243929 . + . Parent=gene808 chr16 ENCODE exon 244381 244681 . + . Parent=gene808 chr16 ENCODE CDS 244414 244681 . + 0 Parent=gene808 chr16 ENCODE CDS 249483 249504 . + 2 Parent=gene808 chr16 ENCODE exon 249483 249521 . + . Parent=gene808 ### chr16 ENCODE gene 224827 244565 . + . ID=gene809;Name=AC004754.1-005;name2=ITFG3 chr16 ENCODE exon 224827 224857 . + . Parent=gene809 chr16 ENCODE exon 239549 239654 . + . Parent=gene809 chr16 ENCODE exon 244329 244565 . + . Parent=gene809 chr16 ENCODE CDS 244414 244565 . + 0 Parent=gene809 ### chr16 ENCODE gene 224829 250003 . + . ID=gene810;Name=AC004754.1-006;name2=ITFG3 chr16 ENCODE exon 224829 224857 . + . Parent=gene810 chr16 ENCODE exon 239549 239654 . + . Parent=gene810 chr16 ENCODE exon 244388 244681 . + . Parent=gene810 chr16 ENCODE CDS 244414 244681 . + 0 Parent=gene810 chr16 ENCODE exon 249483 249599 . + . Parent=gene810 chr16 ENCODE CDS 249483 249599 . + 2 Parent=gene810 chr16 ENCODE exon 249996 250003 . + . Parent=gene810 chr16 ENCODE CDS 249996 250003 . + 2 Parent=gene810 ### chr16 ENCODE gene 224830 244674 . + . ID=gene811;Name=AC004754.1-007;name2=ITFG3 chr16 ENCODE exon 224830 224857 . + . Parent=gene811 chr16 ENCODE exon 239549 239658 . + . Parent=gene811 chr16 ENCODE exon 244381 244674 . + . Parent=gene811 chr16 ENCODE CDS 244414 244674 . + 0 Parent=gene811 ### chr16 ENCODE gene 224834 251514 . + . ID=gene812;Name=AC004754.1-004;name2=ITFG3 chr16 ENCODE exon 224834 224857 . + . Parent=gene812 chr16 ENCODE exon 236957 237069 . + . Parent=gene812 chr16 ENCODE exon 239549 239654 . + . Parent=gene812 chr16 ENCODE exon 244381 244681 . + . Parent=gene812 chr16 ENCODE CDS 244414 244681 . + 0 Parent=gene812 chr16 ENCODE exon 249483 249599 . + . Parent=gene812 chr16 ENCODE CDS 249483 249599 . + 2 Parent=gene812 chr16 ENCODE exon 249969 250160 . + . Parent=gene812 chr16 ENCODE CDS 249969 250160 . + 2 Parent=gene812 chr16 ENCODE exon 251384 251514 . + . Parent=gene812 chr16 ENCODE CDS 251384 251514 . + 2 Parent=gene812 ### chr16 ENCODE gene 224838 252139 . + . ID=gene813;Name=AC004754.1-010;name2=ITFG3 chr16 ENCODE exon 224838 224857 . + . Parent=gene813 chr16 ENCODE exon 239549 239654 . + . Parent=gene813 chr16 ENCODE exon 244381 244681 . + . Parent=gene813 chr16 ENCODE CDS 244414 244681 . + 0 Parent=gene813 chr16 ENCODE exon 249483 249599 . + . Parent=gene813 chr16 ENCODE CDS 249483 249599 . + 2 Parent=gene813 chr16 ENCODE exon 249996 250160 . + . Parent=gene813 chr16 ENCODE CDS 249996 250160 . + 2 Parent=gene813 chr16 ENCODE exon 251384 251514 . + . Parent=gene813 chr16 ENCODE CDS 251384 251514 . + 2 Parent=gene813 chr16 ENCODE exon 252093 252139 . + . Parent=gene813 chr16 ENCODE CDS 252093 252139 . + 0 Parent=gene813 ### chr16 ENCODE gene 224844 251505 . + . ID=gene814;Name=AC004754.1-009;name2=ITFG3 chr16 ENCODE exon 224844 224857 . + . Parent=gene814 chr16 ENCODE exon 238244 238397 . + . Parent=gene814 chr16 ENCODE exon 239549 239654 . + . Parent=gene814 chr16 ENCODE exon 244381 244681 . + . Parent=gene814 chr16 ENCODE CDS 244414 244681 . + 0 Parent=gene814 chr16 ENCODE exon 249483 249599 . + . Parent=gene814 chr16 ENCODE CDS 249483 249599 . + 2 Parent=gene814 chr16 ENCODE exon 249969 250160 . + . Parent=gene814 chr16 ENCODE CDS 249969 250160 . + 2 Parent=gene814 chr16 ENCODE exon 251384 251505 . + . Parent=gene814 chr16 ENCODE CDS 251384 251505 . + 2 Parent=gene814 ### chr16 ENCODE gene 224846 256120 . + . ID=gene815;Name=AC004754.1-003;name2=ITFG3 chr16 ENCODE exon 224846 224857 . + . Parent=gene815 chr16 ENCODE exon 239549 239654 . + . Parent=gene815 chr16 ENCODE exon 244388 244681 . + . Parent=gene815 chr16 ENCODE CDS 244414 244681 . + 0 Parent=gene815 chr16 ENCODE exon 249483 249599 . + . Parent=gene815 chr16 ENCODE CDS 249483 249599 . + 2 Parent=gene815 chr16 ENCODE exon 249969 250160 . + . Parent=gene815 chr16 ENCODE CDS 249969 250160 . + 2 Parent=gene815 chr16 ENCODE exon 251384 251514 . + . Parent=gene815 chr16 ENCODE CDS 251384 251514 . + 2 Parent=gene815 chr16 ENCODE exon 252093 252225 . + . Parent=gene815 chr16 ENCODE CDS 252093 252225 . + 0 Parent=gene815 chr16 ENCODE exon 252424 252553 . + . Parent=gene815 chr16 ENCODE CDS 252424 252553 . + 2 Parent=gene815 chr16 ENCODE exon 253262 253402 . + . Parent=gene815 chr16 ENCODE CDS 253262 253402 . + 1 Parent=gene815 chr16 ENCODE exon 253700 253775 . + . Parent=gene815 chr16 ENCODE CDS 253700 253775 . + 1 Parent=gene815 chr16 ENCODE exon 254016 254171 . + . Parent=gene815 chr16 ENCODE CDS 254016 254171 . + 0 Parent=gene815 chr16 ENCODE exon 254614 254716 . + . Parent=gene815 chr16 ENCODE CDS 254614 254716 . + 0 Parent=gene815 chr16 ENCODE CDS 254811 255022 . + 2 Parent=gene815 chr16 ENCODE exon 254811 256120 . + . Parent=gene815 ### chr16 ENCODE gene 224847 250009 . + . ID=gene816;Name=AC004754.1-016;name2=ITFG3 chr16 ENCODE exon 224847 224857 . + . Parent=gene816 chr16 ENCODE exon 239549 239654 . + . Parent=gene816 chr16 ENCODE exon 244381 244681 . + . Parent=gene816 chr16 ENCODE CDS 244414 244681 . + 0 Parent=gene816 chr16 ENCODE exon 249969 250009 . + . Parent=gene816 chr16 ENCODE CDS 249969 250009 . + 2 Parent=gene816 ### chr16 ENCODE gene 230188 244619 . + . ID=gene817;name2=ITFG3;Name=AC004754.1-008 chr16 ENCODE exon 230188 230276 . + . Parent=gene817 chr16 ENCODE exon 239549 239654 . + . Parent=gene817 chr16 ENCODE exon 243833 243929 . + . Parent=gene817 chr16 ENCODE exon 244329 244619 . + . Parent=gene817 chr16 ENCODE CDS 244414 244619 . + 0 Parent=gene817 ### chr16 ENCODE gene 244122 249520 . + . ID=gene818;Name=AC004754.1-011;name2=ITFG3 chr16 ENCODE exon 244122 244681 . + . Parent=gene818 chr16 ENCODE exon 249483 249520 . + . Parent=gene818 ### chr16 ENCODE gene 244628 250788 . + . ID=gene819;Name=AC004754.1-013;name2=ITFG3 chr16 ENCODE exon 244628 244681 . + . Parent=gene819 chr16 ENCODE CDS 244628 244681 . + 0 Parent=gene819 chr16 ENCODE exon 249483 249599 . + . Parent=gene819 chr16 ENCODE CDS 249483 249599 . + 0 Parent=gene819 chr16 ENCODE exon 249969 250160 . + . Parent=gene819 chr16 ENCODE CDS 249969 250160 . + 0 Parent=gene819 chr16 ENCODE CDS 250413 250753 . + 0 Parent=gene819 chr16 ENCODE exon 250413 250788 . + . Parent=gene819 ### chr16 ENCODE gene 251205 252244 . + . ID=gene820;Name=AC004754.1-012;name2=ITFG3 chr16 ENCODE exon 251205 251514 . + . Parent=gene820 chr16 ENCODE exon 252093 252244 . + . Parent=gene820 ### chr16 ENCODE gene 252508 255090 . + . ID=gene821;Name=AC004754.1-014;name2=ITFG3 chr16 ENCODE exon 252508 252553 . + . Parent=gene821 chr16 ENCODE CDS 252508 252553 . + 0 Parent=gene821 chr16 ENCODE exon 253262 253402 . + . Parent=gene821 chr16 ENCODE CDS 253262 253402 . + 2 Parent=gene821 chr16 ENCODE exon 253700 253775 . + . Parent=gene821 chr16 ENCODE CDS 253700 253775 . + 2 Parent=gene821 chr16 ENCODE exon 254614 254716 . + . Parent=gene821 chr16 ENCODE CDS 254614 254716 . + 1 Parent=gene821 chr16 ENCODE CDS 254811 255022 . + 0 Parent=gene821 chr16 ENCODE exon 254811 255090 . + . Parent=gene821 ### chr16 ENCODE gene 254624 256120 . + . ID=gene822;Name=AC004754.1-015;name2=ITFG3 chr16 ENCODE exon 254624 254716 . + . Parent=gene822 chr16 ENCODE exon 254811 254893 . + . Parent=gene822 chr16 ENCODE exon 255942 256120 . + . Parent=gene822 ### chr16 ENCODE gene 258301 265930 . - . ID=gene823;Name=AC004754.2-001;name2=RGS11 chr16 ENCODE exon 258301 259383 . - . Parent=gene823 chr16 ENCODE CDS 259269 259383 . - 1 Parent=gene823 chr16 ENCODE exon 259503 259585 . - . Parent=gene823 chr16 ENCODE CDS 259503 259585 . - 0 Parent=gene823 chr16 ENCODE exon 260523 260661 . - . Parent=gene823 chr16 ENCODE CDS 260523 260661 . - 1 Parent=gene823 chr16 ENCODE exon 260744 260831 . - . Parent=gene823 chr16 ENCODE CDS 260744 260831 . - 2 Parent=gene823 chr16 ENCODE exon 260984 261099 . - . Parent=gene823 chr16 ENCODE CDS 260984 261099 . - 1 Parent=gene823 chr16 ENCODE exon 261202 261315 . - . Parent=gene823 chr16 ENCODE CDS 261202 261315 . - 1 Parent=gene823 chr16 ENCODE exon 261399 261460 . - . Parent=gene823 chr16 ENCODE CDS 261399 261460 . - 0 Parent=gene823 chr16 ENCODE exon 261540 261569 . - . Parent=gene823 chr16 ENCODE CDS 261540 261569 . - 0 Parent=gene823 chr16 ENCODE exon 262863 262931 . - . Parent=gene823 chr16 ENCODE CDS 262863 262931 . - 0 Parent=gene823 chr16 ENCODE exon 263476 263557 . - . Parent=gene823 chr16 ENCODE CDS 263476 263557 . - 1 Parent=gene823 chr16 ENCODE exon 263761 263837 . - . Parent=gene823 chr16 ENCODE CDS 263761 263837 . - 0 Parent=gene823 chr16 ENCODE exon 264044 264102 . - . Parent=gene823 chr16 ENCODE CDS 264044 264102 . - 2 Parent=gene823 chr16 ENCODE exon 264215 264266 . - . Parent=gene823 chr16 ENCODE CDS 264215 264266 . - 0 Parent=gene823 chr16 ENCODE exon 264977 265083 . - . Parent=gene823 chr16 ENCODE CDS 264977 265083 . - 2 Parent=gene823 chr16 ENCODE exon 265284 265334 . - . Parent=gene823 chr16 ENCODE CDS 265284 265334 . - 2 Parent=gene823 chr16 ENCODE exon 265403 265499 . - . Parent=gene823 chr16 ENCODE CDS 265403 265499 . - 0 Parent=gene823 chr16 ENCODE CDS 265850 265912 . - 0 Parent=gene823 chr16 ENCODE exon 265850 265930 . - . Parent=gene823 ### chr16 ENCODE gene 258301 265941 . - . ID=gene824;Name=AC004754.2-002;name2=RGS11 chr16 ENCODE exon 258301 259383 . - . Parent=gene824 chr16 ENCODE exon 259503 259585 . - . Parent=gene824 chr16 ENCODE exon 260523 260661 . - . Parent=gene824 chr16 ENCODE exon 260744 260831 . - . Parent=gene824 chr16 ENCODE exon 260984 261099 . - . Parent=gene824 chr16 ENCODE exon 261202 261315 . - . Parent=gene824 chr16 ENCODE exon 261399 261460 . - . Parent=gene824 chr16 ENCODE exon 261540 261569 . - . Parent=gene824 chr16 ENCODE exon 263476 263557 . - . Parent=gene824 chr16 ENCODE exon 263761 263837 . - . Parent=gene824 chr16 ENCODE exon 264044 264102 . - . Parent=gene824 chr16 ENCODE exon 264215 264266 . - . Parent=gene824 chr16 ENCODE exon 265284 265334 . - . Parent=gene824 chr16 ENCODE exon 265403 265499 . - . Parent=gene824 chr16 ENCODE exon 265839 265941 . - . Parent=gene824 ### chr16 ENCODE gene 258311 265915 . - . ID=gene825;Name=AC004754.2-003;name2=RGS11 chr16 ENCODE exon 258311 259383 . - . Parent=gene825 chr16 ENCODE CDS 259269 259383 . - 1 Parent=gene825 chr16 ENCODE exon 259503 259585 . - . Parent=gene825 chr16 ENCODE CDS 259503 259585 . - 0 Parent=gene825 chr16 ENCODE exon 260523 260661 . - . Parent=gene825 chr16 ENCODE CDS 260523 260661 . - 1 Parent=gene825 chr16 ENCODE exon 260744 260831 . - . Parent=gene825 chr16 ENCODE CDS 260744 260831 . - 2 Parent=gene825 chr16 ENCODE exon 260984 261099 . - . Parent=gene825 chr16 ENCODE CDS 260984 261099 . - 1 Parent=gene825 chr16 ENCODE exon 261202 261315 . - . Parent=gene825 chr16 ENCODE CDS 261202 261315 . - 1 Parent=gene825 chr16 ENCODE exon 261399 261460 . - . Parent=gene825 chr16 ENCODE CDS 261399 261460 . - 0 Parent=gene825 chr16 ENCODE exon 261540 261569 . - . Parent=gene825 chr16 ENCODE CDS 261540 261569 . - 0 Parent=gene825 chr16 ENCODE exon 262863 262931 . - . Parent=gene825 chr16 ENCODE CDS 262863 262931 . - 0 Parent=gene825 chr16 ENCODE exon 263476 263557 . - . Parent=gene825 chr16 ENCODE CDS 263476 263557 . - 1 Parent=gene825 chr16 ENCODE exon 263761 263837 . - . Parent=gene825 chr16 ENCODE CDS 263761 263837 . - 0 Parent=gene825 chr16 ENCODE exon 264044 264102 . - . Parent=gene825 chr16 ENCODE CDS 264044 264102 . - 2 Parent=gene825 chr16 ENCODE exon 264215 264266 . - . Parent=gene825 chr16 ENCODE CDS 264215 264266 . - 0 Parent=gene825 chr16 ENCODE exon 264977 265083 . - . Parent=gene825 chr16 ENCODE CDS 264977 265083 . - 2 Parent=gene825 chr16 ENCODE exon 265284 265334 . - . Parent=gene825 chr16 ENCODE CDS 265284 265334 . - 2 Parent=gene825 chr16 ENCODE exon 265403 265499 . - . Parent=gene825 chr16 ENCODE CDS 265403 265499 . - 0 Parent=gene825 chr16 ENCODE exon 265839 265915 . - . Parent=gene825 ### chr16 ENCODE gene 258319 264957 . - . ID=gene826;Name=AC004754.2-008;name2=RGS11 chr16 ENCODE exon 258319 259383 . - . Parent=gene826 chr16 ENCODE exon 259503 259585 . - . Parent=gene826 chr16 ENCODE exon 260523 260661 . - . Parent=gene826 chr16 ENCODE exon 260744 260831 . - . Parent=gene826 chr16 ENCODE exon 260984 261099 . - . Parent=gene826 chr16 ENCODE exon 261202 262931 . - . Parent=gene826 chr16 ENCODE exon 263476 263557 . - . Parent=gene826 chr16 ENCODE exon 263761 263837 . - . Parent=gene826 chr16 ENCODE exon 264044 264957 . - . Parent=gene826 ### chr16 ENCODE gene 258727 272085 . + . ID=gene827;Name=LA16c-314G4.1-006;name2=ARHGDIG chr16 ENCODE exon 258727 259005 . + . Parent=gene827 chr16 ENCODE CDS 258727 259005 . + 0 Parent=gene827 chr16 ENCODE exon 271747 271926 . + . Parent=gene827 chr16 ENCODE CDS 271747 271926 . + 0 Parent=gene827 chr16 ENCODE exon 272026 272085 . + . Parent=gene827 chr16 ENCODE CDS 272026 272085 . + 0 Parent=gene827 ### chr16 ENCODE gene 258727 272085 . + . ID=gene828;Name=LA16c-314G4.1-005;name2=ARHGDIG chr16 ENCODE exon 258727 259005 . + . Parent=gene828 chr16 ENCODE CDS 258727 259005 . + 0 Parent=gene828 chr16 ENCODE exon 272026 272085 . + . Parent=gene828 chr16 ENCODE CDS 272026 272085 . + 0 Parent=gene828 ### chr16 ENCODE gene 258982 262183 . + . ID=gene829;name2=ARHGDIG;Name=LA16c-314G4.1-007 chr16 ENCODE exon 258982 259005 . + . Parent=gene829 chr16 ENCODE exon 261882 262183 . + . Parent=gene829 ### chr16 ENCODE gene 259269 265912 . - . ID=gene830;Name=AC004754.2-004;name2=RGS11 chr16 ENCODE exon 259269 259383 . - . Parent=gene830 chr16 ENCODE CDS 259269 259383 . - 1 Parent=gene830 chr16 ENCODE exon 259503 259585 . - . Parent=gene830 chr16 ENCODE CDS 259503 259585 . - 0 Parent=gene830 chr16 ENCODE exon 260523 260661 . - . Parent=gene830 chr16 ENCODE CDS 260523 260661 . - 1 Parent=gene830 chr16 ENCODE exon 260744 260831 . - . Parent=gene830 chr16 ENCODE CDS 260744 260831 . - 2 Parent=gene830 chr16 ENCODE exon 260984 261099 . - . Parent=gene830 chr16 ENCODE CDS 260984 261099 . - 1 Parent=gene830 chr16 ENCODE exon 261202 261315 . - . Parent=gene830 chr16 ENCODE CDS 261202 261315 . - 1 Parent=gene830 chr16 ENCODE exon 261399 261460 . - . Parent=gene830 chr16 ENCODE CDS 261399 261460 . - 0 Parent=gene830 chr16 ENCODE exon 261540 261569 . - . Parent=gene830 chr16 ENCODE CDS 261540 261569 . - 0 Parent=gene830 chr16 ENCODE exon 262863 262931 . - . Parent=gene830 chr16 ENCODE CDS 262863 262931 . - 0 Parent=gene830 chr16 ENCODE exon 263476 263557 . - . Parent=gene830 chr16 ENCODE CDS 263476 263557 . - 1 Parent=gene830 chr16 ENCODE exon 263761 263837 . - . Parent=gene830 chr16 ENCODE CDS 263761 263837 . - 0 Parent=gene830 chr16 ENCODE exon 264044 264102 . - . Parent=gene830 chr16 ENCODE CDS 264044 264102 . - 2 Parent=gene830 chr16 ENCODE exon 264958 265083 . - . Parent=gene830 chr16 ENCODE CDS 264958 265083 . - 2 Parent=gene830 chr16 ENCODE exon 265284 265334 . - . Parent=gene830 chr16 ENCODE CDS 265284 265334 . - 2 Parent=gene830 chr16 ENCODE exon 265403 265499 . - . Parent=gene830 chr16 ENCODE CDS 265403 265499 . - 0 Parent=gene830 chr16 ENCODE exon 265850 265912 . - . Parent=gene830 chr16 ENCODE CDS 265850 265912 . - 0 Parent=gene830 ### chr16 ENCODE gene 260647 264274 . - . ID=gene831;Name=AC004754.2-007;name2=RGS11 chr16 ENCODE exon 260647 260661 . - . Parent=gene831 chr16 ENCODE exon 260744 260831 . - . Parent=gene831 chr16 ENCODE exon 260984 261099 . - . Parent=gene831 chr16 ENCODE exon 261202 261315 . - . Parent=gene831 chr16 ENCODE exon 261399 261460 . - . Parent=gene831 chr16 ENCODE exon 261540 261569 . - . Parent=gene831 chr16 ENCODE exon 262863 262931 . - . Parent=gene831 chr16 ENCODE exon 263476 263557 . - . Parent=gene831 chr16 ENCODE exon 263761 263837 . - . Parent=gene831 chr16 ENCODE exon 264044 264102 . - . Parent=gene831 chr16 ENCODE exon 264215 264274 . - . Parent=gene831 ### chr16 ENCODE gene 261827 265981 . - . ID=gene832;Name=AC004754.2-005;name2=RGS11 chr16 ENCODE exon 261827 262494 . - . Parent=gene832 chr16 ENCODE exon 262863 262931 . - . Parent=gene832 chr16 ENCODE exon 263476 263557 . - . Parent=gene832 chr16 ENCODE exon 263761 263837 . - . Parent=gene832 chr16 ENCODE exon 264044 264102 . - . Parent=gene832 chr16 ENCODE exon 264215 265083 . - . Parent=gene832 chr16 ENCODE exon 265284 265334 . - . Parent=gene832 chr16 ENCODE exon 265403 265499 . - . Parent=gene832 chr16 ENCODE exon 265850 265981 . - . Parent=gene832 ### chr16 ENCODE gene 264940 265568 . - . ID=gene833;Name=AC004754.2-006;name2=RGS11 chr16 ENCODE exon 264940 265083 . - . Parent=gene833 chr16 ENCODE exon 265284 265334 . - . Parent=gene833 chr16 ENCODE exon 265403 265568 . - . Parent=gene833 ### chr16 ENCODE gene 270451 272689 . + . ID=gene834;Name=LA16c-314G4.1-004;name2=ARHGDIG chr16 ENCODE exon 270451 270754 . + . Parent=gene834 chr16 ENCODE CDS 270682 270754 . + 0 Parent=gene834 chr16 ENCODE exon 271747 271926 . + . Parent=gene834 chr16 ENCODE CDS 271747 271926 . + 2 Parent=gene834 chr16 ENCODE exon 272026 272109 . + . Parent=gene834 chr16 ENCODE CDS 272026 272109 . + 2 Parent=gene834 chr16 ENCODE exon 272298 272356 . + . Parent=gene834 chr16 ENCODE CDS 272298 272356 . + 2 Parent=gene834 chr16 ENCODE exon 272468 272531 . + . Parent=gene834 chr16 ENCODE CDS 272468 272531 . + 0 Parent=gene834 chr16 ENCODE exon 272616 272689 . + . Parent=gene834 chr16 ENCODE CDS 272616 272689 . + 2 Parent=gene834 ### chr16 ENCODE gene 270607 273004 . + . ID=gene835;name2=ARHGDIG;Name=LA16c-314G4.1-001 chr16 ENCODE exon 270607 270754 . + . Parent=gene835 chr16 ENCODE CDS 270682 270754 . + 0 Parent=gene835 chr16 ENCODE exon 271747 271926 . + . Parent=gene835 chr16 ENCODE CDS 271747 271926 . + 2 Parent=gene835 chr16 ENCODE exon 272026 272109 . + . Parent=gene835 chr16 ENCODE CDS 272026 272109 . + 2 Parent=gene835 chr16 ENCODE exon 272298 272374 . + . Parent=gene835 chr16 ENCODE CDS 272298 272374 . + 2 Parent=gene835 chr16 ENCODE exon 272468 272531 . + . Parent=gene835 chr16 ENCODE CDS 272468 272531 . + 0 Parent=gene835 chr16 ENCODE CDS 272616 272815 . + 2 Parent=gene835 chr16 ENCODE exon 272616 273004 . + . Parent=gene835 ### chr16 ENCODE gene 270856 272811 . + . ID=gene836;Name=LA16c-314G4.1-002;name2=ARHGDIG chr16 ENCODE exon 270856 270934 . + . Parent=gene836 chr16 ENCODE CDS 270856 270934 . + 0 Parent=gene836 chr16 ENCODE exon 271747 271926 . + . Parent=gene836 chr16 ENCODE CDS 271747 271926 . + 2 Parent=gene836 chr16 ENCODE exon 272026 272109 . + . Parent=gene836 chr16 ENCODE CDS 272026 272109 . + 2 Parent=gene836 chr16 ENCODE exon 272298 272374 . + . Parent=gene836 chr16 ENCODE CDS 272298 272374 . + 2 Parent=gene836 chr16 ENCODE exon 272468 272531 . + . Parent=gene836 chr16 ENCODE CDS 272468 272531 . + 0 Parent=gene836 chr16 ENCODE exon 272616 272811 . + . Parent=gene836 chr16 ENCODE CDS 272616 272811 . + 2 Parent=gene836 ### chr16 ENCODE gene 271083 272841 . + . ID=gene837;Name=LA16c-314G4.1-003;name2=ARHGDIG chr16 ENCODE exon 271083 271926 . + . Parent=gene837 chr16 ENCODE exon 272049 272109 . + . Parent=gene837 chr16 ENCODE exon 272298 272374 . + . Parent=gene837 chr16 ENCODE exon 272468 272531 . + . Parent=gene837 chr16 ENCODE exon 272616 272841 . + . Parent=gene837 ### chr16 ENCODE gene 273153 277216 . + . ID=gene838;Name=LA16c-314G4.2-001;name2=PDIA2 chr16 ENCODE exon 273153 273369 . + . Parent=gene838 chr16 ENCODE CDS 273171 273369 . + 0 Parent=gene838 chr16 ENCODE exon 274388 274594 . + . Parent=gene838 chr16 ENCODE CDS 274388 274594 . + 2 Parent=gene838 chr16 ENCODE exon 274660 274793 . + . Parent=gene838 chr16 ENCODE CDS 274660 274793 . + 2 Parent=gene838 chr16 ENCODE exon 274879 275016 . + . Parent=gene838 chr16 ENCODE CDS 274879 275016 . + 0 Parent=gene838 chr16 ENCODE exon 275085 275201 . + . Parent=gene838 chr16 ENCODE CDS 275085 275201 . + 0 Parent=gene838 chr16 ENCODE exon 275313 275438 . + . Parent=gene838 chr16 ENCODE CDS 275313 275438 . + 0 Parent=gene838 chr16 ENCODE exon 275507 275704 . + . Parent=gene838 chr16 ENCODE CDS 275507 275704 . + 0 Parent=gene838 chr16 ENCODE exon 276354 276474 . + . Parent=gene838 chr16 ENCODE CDS 276354 276474 . + 0 Parent=gene838 chr16 ENCODE exon 276555 276736 . + . Parent=gene838 chr16 ENCODE CDS 276555 276736 . + 2 Parent=gene838 chr16 ENCODE exon 276836 276946 . + . Parent=gene838 chr16 ENCODE CDS 276836 276946 . + 0 Parent=gene838 chr16 ENCODE CDS 277070 277114 . + 0 Parent=gene838 chr16 ENCODE exon 277070 277216 . + . Parent=gene838 ### chr16 ENCODE gene 273165 277215 . + . ID=gene839;Name=LA16c-314G4.2-002;name2=PDIA2 chr16 ENCODE exon 273165 273369 . + . Parent=gene839 chr16 ENCODE exon 274388 274475 . + . Parent=gene839 chr16 ENCODE exon 274513 274594 . + . Parent=gene839 chr16 ENCODE exon 274660 274793 . + . Parent=gene839 chr16 ENCODE exon 274879 275016 . + . Parent=gene839 chr16 ENCODE exon 275085 275201 . + . Parent=gene839 chr16 ENCODE exon 275313 275438 . + . Parent=gene839 chr16 ENCODE exon 275507 275704 . + . Parent=gene839 chr16 ENCODE exon 276354 276474 . + . Parent=gene839 chr16 ENCODE exon 276555 276736 . + . Parent=gene839 chr16 ENCODE exon 276836 276946 . + . Parent=gene839 chr16 ENCODE exon 277070 277215 . + . Parent=gene839 ### chr16 ENCODE gene 273165 277215 . + . ID=gene840;Name=LA16c-314G4.2-003;name2=PDIA2 chr16 ENCODE exon 273165 273369 . + . Parent=gene840 chr16 ENCODE exon 274388 274793 . + . Parent=gene840 chr16 ENCODE exon 274879 275016 . + . Parent=gene840 chr16 ENCODE exon 275085 275201 . + . Parent=gene840 chr16 ENCODE exon 275313 275438 . + . Parent=gene840 chr16 ENCODE exon 275507 275704 . + . Parent=gene840 chr16 ENCODE exon 276354 276474 . + . Parent=gene840 chr16 ENCODE exon 276555 276736 . + . Parent=gene840 chr16 ENCODE exon 276836 276946 . + . Parent=gene840 chr16 ENCODE exon 277070 277215 . + . Parent=gene840 ### chr16 ENCODE gene 273181 275141 . + . ID=gene841;Name=LA16c-314G4.2-005;name2=PDIA2 chr16 ENCODE exon 273181 273369 . + . Parent=gene841 chr16 ENCODE CDS 273181 273369 . + 0 Parent=gene841 chr16 ENCODE exon 274388 274594 . + . Parent=gene841 chr16 ENCODE CDS 274388 274594 . + 0 Parent=gene841 chr16 ENCODE exon 274660 274793 . + . Parent=gene841 chr16 ENCODE CDS 274660 274793 . + 0 Parent=gene841 chr16 ENCODE exon 274924 275016 . + . Parent=gene841 chr16 ENCODE CDS 274924 275016 . + 1 Parent=gene841 chr16 ENCODE exon 275085 275141 . + . Parent=gene841 chr16 ENCODE CDS 275085 275141 . + 1 Parent=gene841 ### chr16 ENCODE gene 274153 277209 . + . ID=gene842;Name=LA16c-314G4.2-004;name2=PDIA2 chr16 ENCODE exon 274153 274594 . + . Parent=gene842 chr16 ENCODE exon 274660 274793 . + . Parent=gene842 chr16 ENCODE exon 274879 275704 . + . Parent=gene842 chr16 ENCODE exon 276354 276474 . + . Parent=gene842 chr16 ENCODE exon 276555 276736 . + . Parent=gene842 chr16 ENCODE exon 276836 276946 . + . Parent=gene842 chr16 ENCODE exon 277070 277209 . + . Parent=gene842 ### chr16 ENCODE gene 274876 275577 . + . ID=gene843;Name=LA16c-314G4.2-006;name2=PDIA2 chr16 ENCODE exon 274876 275016 . + . Parent=gene843 chr16 ENCODE exon 275085 275201 . + . Parent=gene843 chr16 ENCODE exon 275313 275434 . + . Parent=gene843 chr16 ENCODE exon 275507 275577 . + . Parent=gene843 ### chr16 ENCODE gene 275681 277216 . + . ID=gene844;Name=LA16c-314G4.2-007;name2=PDIA2 chr16 ENCODE exon 275681 275704 . + . Parent=gene844 chr16 ENCODE CDS 275681 275704 . + 0 Parent=gene844 chr16 ENCODE exon 276372 276474 . + . Parent=gene844 chr16 ENCODE CDS 276372 276474 . + 0 Parent=gene844 chr16 ENCODE exon 276555 276736 . + . Parent=gene844 chr16 ENCODE CDS 276555 276736 . + 2 Parent=gene844 chr16 ENCODE exon 276836 276946 . + . Parent=gene844 chr16 ENCODE CDS 276836 276946 . + 0 Parent=gene844 chr16 ENCODE CDS 277070 277114 . + 0 Parent=gene844 chr16 ENCODE exon 277070 277216 . + . Parent=gene844 ### chr16 ENCODE gene 277441 283533 . - . ID=gene845;Name=LA16c-314G4.3-006;name2=AXIN1 chr16 ENCODE exon 277441 277626 . - . Parent=gene845 chr16 ENCODE exon 279465 279608 . - . Parent=gene845 chr16 ENCODE exon 283489 283533 . - . Parent=gene845 ### chr16 ENCODE gene 277441 336323 . - . ID=gene846;Name=LA16c-314G4.3-007;name2=AXIN1 chr16 ENCODE exon 277441 278249 . - . Parent=gene846 chr16 ENCODE exon 279441 283719 . - . Parent=gene846 chr16 ENCODE exon 287057 287227 . - . Parent=gene846 chr16 ENCODE exon 287723 288252 . - . Parent=gene846 chr16 ENCODE exon 294305 294442 . - . Parent=gene846 chr16 ENCODE exon 299974 300070 . - . Parent=gene846 chr16 ENCODE exon 304544 304684 . - . Parent=gene846 chr16 ENCODE exon 336149 336323 . - . Parent=gene846 ### chr16 ENCODE gene 277441 342660 . - . ID=gene847;Name=LA16c-314G4.3-001;name2=AXIN1 chr16 ENCODE exon 277441 278249 . - . Parent=gene847 chr16 ENCODE CDS 278123 278249 . - 1 Parent=gene847 chr16 ENCODE exon 279441 279608 . - . Parent=gene847 chr16 ENCODE CDS 279441 279608 . - 1 Parent=gene847 chr16 ENCODE exon 281191 281298 . - . Parent=gene847 chr16 ENCODE CDS 281191 281298 . - 1 Parent=gene847 chr16 ENCODE exon 283489 283719 . - . Parent=gene847 chr16 ENCODE CDS 283489 283719 . - 1 Parent=gene847 chr16 ENCODE exon 287057 287227 . - . Parent=gene847 chr16 ENCODE CDS 287057 287227 . - 1 Parent=gene847 chr16 ENCODE exon 287723 288252 . - . Parent=gene847 chr16 ENCODE CDS 287723 288252 . - 0 Parent=gene847 chr16 ENCODE exon 294305 294442 . - . Parent=gene847 chr16 ENCODE CDS 294305 294442 . - 0 Parent=gene847 chr16 ENCODE exon 299974 300070 . - . Parent=gene847 chr16 ENCODE CDS 299974 300070 . - 1 Parent=gene847 chr16 ENCODE exon 304544 304684 . - . Parent=gene847 chr16 ENCODE CDS 304544 304684 . - 1 Parent=gene847 chr16 ENCODE CDS 336149 337026 . - 0 Parent=gene847 chr16 ENCODE exon 336149 337107 . - . Parent=gene847 chr16 ENCODE exon 342370 342660 . - . Parent=gene847 ### chr16 ENCODE gene 277442 342450 . - . ID=gene848;Name=LA16c-314G4.3-002;name2=AXIN1 chr16 ENCODE exon 277442 278249 . - . Parent=gene848 chr16 ENCODE CDS 278123 278249 . - 1 Parent=gene848 chr16 ENCODE exon 279441 279608 . - . Parent=gene848 chr16 ENCODE CDS 279441 279608 . - 1 Parent=gene848 chr16 ENCODE exon 283489 283719 . - . Parent=gene848 chr16 ENCODE CDS 283489 283719 . - 1 Parent=gene848 chr16 ENCODE exon 287057 287227 . - . Parent=gene848 chr16 ENCODE CDS 287057 287227 . - 1 Parent=gene848 chr16 ENCODE exon 287723 288252 . - . Parent=gene848 chr16 ENCODE CDS 287723 288252 . - 0 Parent=gene848 chr16 ENCODE exon 294305 294442 . - . Parent=gene848 chr16 ENCODE CDS 294305 294442 . - 0 Parent=gene848 chr16 ENCODE exon 299974 300070 . - . Parent=gene848 chr16 ENCODE CDS 299974 300070 . - 1 Parent=gene848 chr16 ENCODE exon 304544 304684 . - . Parent=gene848 chr16 ENCODE CDS 304544 304684 . - 1 Parent=gene848 chr16 ENCODE CDS 336149 337026 . - 0 Parent=gene848 chr16 ENCODE exon 336149 337107 . - . Parent=gene848 chr16 ENCODE exon 342370 342450 . - . Parent=gene848 ### chr16 ENCODE gene 278191 283537 . - . ID=gene849;Name=LA16c-314G4.3-005;name2=AXIN1 chr16 ENCODE exon 278191 278307 . - . Parent=gene849 chr16 ENCODE exon 279441 279608 . - . Parent=gene849 chr16 ENCODE exon 283489 283537 . - . Parent=gene849 ### chr16 ENCODE gene 287845 342674 . - . ID=gene850;Name=LA16c-314G4.3-004;name2=AXIN1 chr16 ENCODE exon 287845 288252 . - . Parent=gene850 chr16 ENCODE exon 294305 294442 . - . Parent=gene850 chr16 ENCODE exon 299974 300070 . - . Parent=gene850 chr16 ENCODE exon 304544 304684 . - . Parent=gene850 chr16 ENCODE exon 342370 342674 . - . Parent=gene850 ### chr16 ENCODE gene 356928 360569 . - . ID=gene851;Name=Z97634.1-001;name2=MRPL28 chr16 ENCODE exon 356928 357783 . - . Parent=gene851 chr16 ENCODE CDS 357676 357783 . - 0 Parent=gene851 chr16 ENCODE exon 358329 358415 . - . Parent=gene851 chr16 ENCODE CDS 358329 358415 . - 0 Parent=gene851 chr16 ENCODE exon 358502 358627 . - . Parent=gene851 chr16 ENCODE CDS 358502 358627 . - 0 Parent=gene851 chr16 ENCODE exon 359060 359221 . - . Parent=gene851 chr16 ENCODE CDS 359060 359221 . - 0 Parent=gene851 chr16 ENCODE CDS 359932 360219 . - 0 Parent=gene851 chr16 ENCODE exon 359932 360226 . - . Parent=gene851 chr16 ENCODE exon 360500 360569 . - . Parent=gene851 ### chr16 ENCODE gene 357395 360510 . - . ID=gene852;Name=Z97634.1-004;name2=MRPL28 chr16 ENCODE exon 357395 357783 . - . Parent=gene852 chr16 ENCODE exon 358329 358415 . - . Parent=gene852 chr16 ENCODE exon 358502 359221 . - . Parent=gene852 chr16 ENCODE exon 359932 360226 . - . Parent=gene852 chr16 ENCODE exon 360500 360510 . - . Parent=gene852 ### chr16 ENCODE gene 357395 360527 . - . ID=gene853;name2=MRPL28;Name=Z97634.1-002 chr16 ENCODE exon 357395 357783 . - . Parent=gene853 chr16 ENCODE exon 358329 358415 . - . Parent=gene853 chr16 ENCODE exon 358502 360226 . - . Parent=gene853 chr16 ENCODE exon 360500 360527 . - . Parent=gene853 ### chr16 ENCODE gene 357397 359804 . - . ID=gene854;Name=Z97634.1-012;name2=MRPL28 chr16 ENCODE exon 357397 357496 . - . Parent=gene854 chr16 ENCODE CDS 357411 357496 . - 2 Parent=gene854 chr16 ENCODE CDS 359595 359655 . - 0 Parent=gene854 chr16 ENCODE exon 359595 359804 . - . Parent=gene854 ### chr16 ENCODE gene 357397 360528 . - . ID=gene855;Name=Z97634.1-006;name2=MRPL28 chr16 ENCODE exon 357397 357783 . - . Parent=gene855 chr16 ENCODE CDS 357676 357783 . - 0 Parent=gene855 chr16 ENCODE exon 358329 358415 . - . Parent=gene855 chr16 ENCODE CDS 358329 358415 . - 0 Parent=gene855 chr16 ENCODE exon 358502 358636 . - . Parent=gene855 chr16 ENCODE CDS 358502 358636 . - 0 Parent=gene855 chr16 ENCODE exon 359069 359221 . - . Parent=gene855 chr16 ENCODE CDS 359069 359221 . - 0 Parent=gene855 chr16 ENCODE CDS 359932 360219 . - 0 Parent=gene855 chr16 ENCODE exon 359932 360226 . - . Parent=gene855 chr16 ENCODE exon 360500 360528 . - . Parent=gene855 ### chr16 ENCODE gene 357399 360226 . - . ID=gene856;Name=Z97634.1-007;name2=MRPL28 chr16 ENCODE exon 357399 357783 . - . Parent=gene856 chr16 ENCODE exon 358329 358415 . - . Parent=gene856 chr16 ENCODE exon 358502 359212 . - . Parent=gene856 chr16 ENCODE exon 359932 360226 . - . Parent=gene856 ### chr16 ENCODE gene 357410 360235 . - . ID=gene857;Name=Z97634.1-005;name2=MRPL28 chr16 ENCODE exon 357410 357783 . - . Parent=gene857 chr16 ENCODE CDS 357676 357783 . - 0 Parent=gene857 chr16 ENCODE exon 358329 358415 . - . Parent=gene857 chr16 ENCODE CDS 358329 358415 . - 0 Parent=gene857 chr16 ENCODE exon 358502 358627 . - . Parent=gene857 chr16 ENCODE CDS 358502 358627 . - 0 Parent=gene857 chr16 ENCODE exon 359060 359221 . - . Parent=gene857 chr16 ENCODE CDS 359060 359221 . - 0 Parent=gene857 chr16 ENCODE CDS 359932 360219 . - 0 Parent=gene857 chr16 ENCODE exon 359932 360235 . - . Parent=gene857 ### chr16 ENCODE gene 357428 360235 . - . ID=gene858;Name=Z97634.1-003;name2=MRPL28 chr16 ENCODE exon 357428 357783 . - . Parent=gene858 chr16 ENCODE exon 358329 358415 . - . Parent=gene858 chr16 ENCODE exon 358502 359221 . - . Parent=gene858 chr16 ENCODE exon 359932 360235 . - . Parent=gene858 ### chr16 ENCODE gene 357614 360510 . - . ID=gene859;name2=MRPL28;Name=Z97634.1-008 chr16 ENCODE exon 357614 357783 . - . Parent=gene859 chr16 ENCODE CDS 357676 357783 . - 0 Parent=gene859 chr16 ENCODE exon 358329 358415 . - . Parent=gene859 chr16 ENCODE CDS 358329 358415 . - 0 Parent=gene859 chr16 ENCODE exon 358502 358636 . - . Parent=gene859 chr16 ENCODE CDS 358502 358636 . - 0 Parent=gene859 chr16 ENCODE exon 359069 359221 . - . Parent=gene859 chr16 ENCODE CDS 359069 359221 . - 0 Parent=gene859 chr16 ENCODE CDS 359932 360219 . - 0 Parent=gene859 chr16 ENCODE exon 359932 360226 . - . Parent=gene859 chr16 ENCODE exon 360486 360510 . - . Parent=gene859 ### chr16 ENCODE gene 357725 360433 . - . ID=gene860;Name=Z97634.1-010;name2=MRPL28 chr16 ENCODE exon 357725 357783 . - . Parent=gene860 chr16 ENCODE CDS 357725 357783 . - 0 Parent=gene860 chr16 ENCODE exon 358329 358415 . - . Parent=gene860 chr16 ENCODE CDS 358329 358415 . - 0 Parent=gene860 chr16 ENCODE exon 358502 358636 . - . Parent=gene860 chr16 ENCODE CDS 358502 358636 . - 0 Parent=gene860 chr16 ENCODE exon 359069 359221 . - . Parent=gene860 chr16 ENCODE CDS 359069 359221 . - 0 Parent=gene860 chr16 ENCODE CDS 359932 360219 . - 0 Parent=gene860 chr16 ENCODE exon 359932 360226 . - . Parent=gene860 chr16 ENCODE exon 360363 360433 . - . Parent=gene860 ### chr16 ENCODE gene 358336 360503 . - . ID=gene861;Name=Z97634.1-009;name2=MRPL28 chr16 ENCODE exon 358336 358415 . - . Parent=gene861 chr16 ENCODE CDS 358336 358415 . - 0 Parent=gene861 chr16 ENCODE exon 358502 358636 . - . Parent=gene861 chr16 ENCODE CDS 358502 358636 . - 0 Parent=gene861 chr16 ENCODE exon 359069 359221 . - . Parent=gene861 chr16 ENCODE CDS 359069 359221 . - 0 Parent=gene861 chr16 ENCODE CDS 359932 360219 . - 0 Parent=gene861 chr16 ENCODE exon 359932 360226 . - . Parent=gene861 chr16 ENCODE exon 360445 360503 . - . Parent=gene861 ### chr16 ENCODE gene 358409 360339 . - . ID=gene862;Name=Z97634.1-011;name2=MRPL28 chr16 ENCODE exon 358409 358415 . - . Parent=gene862 chr16 ENCODE CDS 358409 358415 . - 0 Parent=gene862 chr16 ENCODE exon 358502 358636 . - . Parent=gene862 chr16 ENCODE CDS 358502 358636 . - 0 Parent=gene862 chr16 ENCODE exon 359069 359221 . - . Parent=gene862 chr16 ENCODE CDS 359069 359221 . - 0 Parent=gene862 chr16 ENCODE CDS 359932 360219 . - 0 Parent=gene862 chr16 ENCODE exon 359932 360226 . - . Parent=gene862 chr16 ENCODE exon 360311 360339 . - . Parent=gene862 ### chr16 ENCODE gene 360774 371983 . - . ID=gene863;Name=Z97634.2-001;name2=TMEM8 chr16 ENCODE exon 360774 362284 . - . Parent=gene863 chr16 ENCODE CDS 361988 362284 . - 0 Parent=gene863 chr16 ENCODE exon 362612 362728 . - . Parent=gene863 chr16 ENCODE CDS 362612 362728 . - 0 Parent=gene863 chr16 ENCODE exon 364006 364152 . - . Parent=gene863 chr16 ENCODE CDS 364006 364152 . - 0 Parent=gene863 chr16 ENCODE exon 364222 364400 . - . Parent=gene863 chr16 ENCODE CDS 364222 364400 . - 2 Parent=gene863 chr16 ENCODE exon 364757 364893 . - . Parent=gene863 chr16 ENCODE CDS 364757 364893 . - 1 Parent=gene863 chr16 ENCODE exon 365134 365257 . - . Parent=gene863 chr16 ENCODE CDS 365134 365257 . - 2 Parent=gene863 chr16 ENCODE exon 365346 365436 . - . Parent=gene863 chr16 ENCODE CDS 365346 365436 . - 0 Parent=gene863 chr16 ENCODE exon 366137 366456 . - . Parent=gene863 chr16 ENCODE CDS 366137 366456 . - 2 Parent=gene863 chr16 ENCODE exon 366545 366813 . - . Parent=gene863 chr16 ENCODE CDS 366545 366813 . - 1 Parent=gene863 chr16 ENCODE exon 367038 367165 . - . Parent=gene863 chr16 ENCODE CDS 367038 367165 . - 0 Parent=gene863 chr16 ENCODE exon 367379 367586 . - . Parent=gene863 chr16 ENCODE CDS 367379 367586 . - 1 Parent=gene863 chr16 ENCODE exon 367672 367849 . - . Parent=gene863 chr16 ENCODE CDS 367672 367849 . - 2 Parent=gene863 chr16 ENCODE CDS 371702 371822 . - 0 Parent=gene863 chr16 ENCODE exon 371702 371983 . - . Parent=gene863 ### chr16 ENCODE gene 361863 364852 . - . ID=gene864;Name=Z97634.2-005;name2=TMEM8 chr16 ENCODE exon 361863 362284 . - . Parent=gene864 chr16 ENCODE CDS 361988 362284 . - 1 Parent=gene864 chr16 ENCODE exon 364006 364152 . - . Parent=gene864 chr16 ENCODE CDS 364006 364152 . - 1 Parent=gene864 chr16 ENCODE exon 364222 364400 . - . Parent=gene864 chr16 ENCODE CDS 364222 364400 . - 0 Parent=gene864 chr16 ENCODE exon 364757 364852 . - . Parent=gene864 chr16 ENCODE CDS 364757 364852 . - 0 Parent=gene864 ### chr16 ENCODE gene 361865 371979 . - . ID=gene865;Name=Z97634.2-002;name2=TMEM8 chr16 ENCODE exon 361865 362284 . - . Parent=gene865 chr16 ENCODE exon 362612 362728 . - . Parent=gene865 chr16 ENCODE exon 364006 364152 . - . Parent=gene865 chr16 ENCODE exon 364222 364400 . - . Parent=gene865 chr16 ENCODE exon 364757 364893 . - . Parent=gene865 chr16 ENCODE exon 365134 365257 . - . Parent=gene865 chr16 ENCODE exon 365346 365436 . - . Parent=gene865 chr16 ENCODE exon 366137 366456 . - . Parent=gene865 chr16 ENCODE exon 366545 366813 . - . Parent=gene865 chr16 ENCODE exon 367038 367165 . - . Parent=gene865 chr16 ENCODE exon 367379 367586 . - . Parent=gene865 chr16 ENCODE exon 367672 367806 . - . Parent=gene865 chr16 ENCODE exon 371909 371979 . - . Parent=gene865 ### chr16 ENCODE gene 362417 365216 . - . ID=gene866;Name=Z97634.2-006;name2=TMEM8 chr16 ENCODE exon 362417 362728 . - . Parent=gene866 chr16 ENCODE exon 364006 364152 . - . Parent=gene866 chr16 ENCODE exon 364222 364400 . - . Parent=gene866 chr16 ENCODE exon 364757 364893 . - . Parent=gene866 chr16 ENCODE exon 365134 365216 . - . Parent=gene866 ### chr16 ENCODE gene 364006 365076 . - . ID=gene867;Name=Z97634.2-004;name2=TMEM8 chr16 ENCODE exon 364006 364152 . - . Parent=gene867 chr16 ENCODE exon 364222 364400 . - . Parent=gene867 chr16 ENCODE exon 364757 365076 . - . Parent=gene867 ### chr16 ENCODE gene 364810 366476 . - . ID=gene868;Name=Z97634.2-003;name2=TMEM8 chr16 ENCODE exon 364810 364893 . - . Parent=gene868 chr16 ENCODE exon 365134 365257 . - . Parent=gene868 chr16 ENCODE exon 365346 365436 . - . Parent=gene868 chr16 ENCODE exon 366137 366476 . - . Parent=gene868 ### chr16 ENCODE gene 366807 377000 . - . ID=gene869;Name=Z97634.2-008;name2=TMEM8 chr16 ENCODE exon 366807 366813 . - . Parent=gene869 chr16 ENCODE exon 367038 367165 . - . Parent=gene869 chr16 ENCODE exon 367379 367586 . - . Parent=gene869 chr16 ENCODE exon 374257 374397 . - . Parent=gene869 chr16 ENCODE exon 376898 377000 . - . Parent=gene869 ### chr16 ENCODE gene 367109 377114 . - . ID=gene870;Name=Z97634.2-007;name2=TMEM8 chr16 ENCODE exon 367109 367165 . - . Parent=gene870 chr16 ENCODE exon 367379 367586 . - . Parent=gene870 chr16 ENCODE exon 367672 367849 . - . Parent=gene870 chr16 ENCODE exon 374257 374397 . - . Parent=gene870 chr16 ENCODE exon 376898 377114 . - . Parent=gene870 ### chr16 ENCODE gene 386726 390747 . + . ID=gene871;Name=Z97634.4-002;name2=NME4 chr16 ENCODE exon 386726 387080 . + . Parent=gene871 chr16 ENCODE exon 388991 389124 . + . Parent=gene871 chr16 ENCODE CDS 389110 389124 . + 0 Parent=gene871 chr16 ENCODE exon 389380 389481 . + . Parent=gene871 chr16 ENCODE CDS 389380 389481 . + 0 Parent=gene871 chr16 ENCODE exon 389628 389740 . + . Parent=gene871 chr16 ENCODE CDS 389628 389740 . + 0 Parent=gene871 chr16 ENCODE CDS 390220 390343 . + 1 Parent=gene871 chr16 ENCODE exon 390220 390747 . + . Parent=gene871 ### chr16 ENCODE gene 386770 389475 . + . ID=gene872;Name=Z97634.4-005;name2=NME4 chr16 ENCODE exon 386770 387080 . + . Parent=gene872 chr16 ENCODE exon 388209 388386 . + . Parent=gene872 chr16 ENCODE exon 388991 389124 . + . Parent=gene872 chr16 ENCODE CDS 389110 389124 . + 0 Parent=gene872 chr16 ENCODE exon 389380 389475 . + . Parent=gene872 chr16 ENCODE CDS 389380 389475 . + 0 Parent=gene872 ### chr16 ENCODE gene 387200 390735 . + . ID=gene873;Name=Z97634.4-006;name2=NME4 chr16 ENCODE exon 387200 387314 . + . Parent=gene873 chr16 ENCODE exon 388209 388395 . + . Parent=gene873 chr16 ENCODE exon 388991 389124 . + . Parent=gene873 chr16 ENCODE exon 389380 389481 . + . Parent=gene873 chr16 ENCODE exon 389628 389740 . + . Parent=gene873 chr16 ENCODE exon 390220 390735 . + . Parent=gene873 ### chr16 ENCODE gene 387201 400368 . + . ID=gene874;Name=Z97634.4-0012;name2=NME4 chr16 ENCODE exon 387201 387314 . + . Parent=gene874 chr16 ENCODE exon 388991 389124 . + . Parent=gene874 chr16 ENCODE exon 389380 389481 . + . Parent=gene874 chr16 ENCODE exon 389628 389740 . + . Parent=gene874 chr16 ENCODE exon 390220 390295 . + . Parent=gene874 chr16 ENCODE exon 391948 392044 . + . Parent=gene874 chr16 ENCODE exon 394957 395025 . + . Parent=gene874 chr16 ENCODE exon 396347 396398 . + . Parent=gene874 chr16 ENCODE exon 396686 396778 . + . Parent=gene874 chr16 ENCODE exon 397426 397561 . + . Parent=gene874 chr16 ENCODE exon 400244 400368 . + . Parent=gene874 ### chr16 ENCODE gene 387209 390588 . + . ID=gene875;Name=Z97634.4-007;name2=NME4 chr16 ENCODE exon 387209 387314 . + . Parent=gene875 chr16 ENCODE exon 388991 389012 . + . Parent=gene875 chr16 ENCODE exon 389067 389124 . + . Parent=gene875 chr16 ENCODE exon 389380 389481 . + . Parent=gene875 chr16 ENCODE exon 389628 389740 . + . Parent=gene875 chr16 ENCODE exon 390220 390588 . + . Parent=gene875 ### chr16 ENCODE gene 387209 390634 . + . ID=gene876;Name=Z97634.4-003;name2=NME4 chr16 ENCODE exon 387209 387314 . + . Parent=gene876 chr16 ENCODE exon 388209 389124 . + . Parent=gene876 chr16 ENCODE exon 389380 389481 . + . Parent=gene876 chr16 ENCODE exon 389628 389740 . + . Parent=gene876 chr16 ENCODE exon 390220 390634 . + . Parent=gene876 ### chr16 ENCODE gene 387210 390507 . + . ID=gene877;Name=Z97634.4-011;name2=NME4 chr16 ENCODE exon 387210 387314 . + . Parent=gene877 chr16 ENCODE CDS 387224 387314 . + 0 Parent=gene877 chr16 ENCODE exon 387880 387903 . + . Parent=gene877 chr16 ENCODE CDS 387880 387903 . + 2 Parent=gene877 chr16 ENCODE exon 388991 389124 . + . Parent=gene877 chr16 ENCODE CDS 388991 389124 . + 2 Parent=gene877 chr16 ENCODE exon 389380 389481 . + . Parent=gene877 chr16 ENCODE CDS 389380 389481 . + 0 Parent=gene877 chr16 ENCODE exon 389628 389740 . + . Parent=gene877 chr16 ENCODE CDS 389628 389740 . + 0 Parent=gene877 chr16 ENCODE CDS 390220 390343 . + 1 Parent=gene877 chr16 ENCODE exon 390220 390507 . + . Parent=gene877 ### chr16 ENCODE gene 387210 390760 . + . ID=gene878;Name=Z97634.4-001;name2=NME4 chr16 ENCODE exon 387210 387314 . + . Parent=gene878 chr16 ENCODE CDS 387224 387314 . + 0 Parent=gene878 chr16 ENCODE exon 388991 389124 . + . Parent=gene878 chr16 ENCODE CDS 388991 389124 . + 2 Parent=gene878 chr16 ENCODE exon 389380 389481 . + . Parent=gene878 chr16 ENCODE CDS 389380 389481 . + 0 Parent=gene878 chr16 ENCODE exon 389628 389740 . + . Parent=gene878 chr16 ENCODE CDS 389628 389740 . + 0 Parent=gene878 chr16 ENCODE CDS 390220 390343 . + 1 Parent=gene878 chr16 ENCODE exon 390220 390760 . + . Parent=gene878 ### chr16 ENCODE gene 387238 390649 . + . ID=gene879;Name=Z97634.4-009;name2=NME4 chr16 ENCODE exon 387238 387314 . + . Parent=gene879 chr16 ENCODE CDS 387238 387314 . + 0 Parent=gene879 chr16 ENCODE exon 388991 389124 . + . Parent=gene879 chr16 ENCODE CDS 388991 389124 . + 1 Parent=gene879 chr16 ENCODE exon 389380 389481 . + . Parent=gene879 chr16 ENCODE CDS 389380 389481 . + 2 Parent=gene879 chr16 ENCODE exon 389628 389740 . + . Parent=gene879 chr16 ENCODE CDS 389628 389740 . + 2 Parent=gene879 chr16 ENCODE CDS 390110 390191 . + 0 Parent=gene879 chr16 ENCODE exon 390110 390649 . + . Parent=gene879 ### chr16 ENCODE gene 387743 390417 . + . ID=gene880;Name=Z97634.4-010;name2=NME4 chr16 ENCODE exon 387743 388180 . + . Parent=gene880 chr16 ENCODE exon 388991 389124 . + . Parent=gene880 chr16 ENCODE exon 389380 389481 . + . Parent=gene880 chr16 ENCODE exon 389628 389740 . + . Parent=gene880 chr16 ENCODE exon 390220 390417 . + . Parent=gene880 ### chr16 ENCODE gene 387774 402488 . + . ID=gene881;Name=Z97634.4-0013;name2=NME4 chr16 ENCODE exon 387774 387893 . + . Parent=gene881 chr16 ENCODE exon 394986 395025 . + . Parent=gene881 chr16 ENCODE exon 396347 396398 . + . Parent=gene881 chr16 ENCODE exon 397426 397561 . + . Parent=gene881 chr16 ENCODE exon 400244 400368 . + . Parent=gene881 chr16 ENCODE exon 400692 400785 . + . Parent=gene881 chr16 ENCODE exon 400973 401077 . + . Parent=gene881 chr16 ENCODE exon 401362 401579 . + . Parent=gene881 chr16 ENCODE exon 401891 402488 . + . Parent=gene881 ### chr16 ENCODE gene 388411 390750 . + . ID=gene882;Name=Z97634.4-004;name2=NME4 chr16 ENCODE exon 388411 389740 . + . Parent=gene882 chr16 ENCODE exon 390220 390750 . + . Parent=gene882 ### chr16 ENCODE gene 389048 389740 . + . ID=gene883;Name=Z97634.4-008;name2=NME4 chr16 ENCODE exon 389048 389124 . + . Parent=gene883 chr16 ENCODE exon 389296 389481 . + . Parent=gene883 chr16 ENCODE exon 389628 389740 . + . Parent=gene883 ### chr16 ENCODE gene 391827 402488 . + . ID=gene884;Name=AL023881.1-001;name2=DECR2 chr16 ENCODE exon 391827 392044 . + . Parent=gene884 chr16 ENCODE CDS 391965 392044 . + 0 Parent=gene884 chr16 ENCODE exon 394957 395025 . + . Parent=gene884 chr16 ENCODE CDS 394957 395025 . + 1 Parent=gene884 chr16 ENCODE exon 396347 396398 . + . Parent=gene884 chr16 ENCODE CDS 396347 396398 . + 1 Parent=gene884 chr16 ENCODE exon 397426 397561 . + . Parent=gene884 chr16 ENCODE CDS 397426 397561 . + 0 Parent=gene884 chr16 ENCODE exon 400244 400368 . + . Parent=gene884 chr16 ENCODE CDS 400244 400368 . + 2 Parent=gene884 chr16 ENCODE exon 400692 400785 . + . Parent=gene884 chr16 ENCODE CDS 400692 400785 . + 0 Parent=gene884 chr16 ENCODE exon 400973 401077 . + . Parent=gene884 chr16 ENCODE CDS 400973 401077 . + 2 Parent=gene884 chr16 ENCODE exon 401362 401579 . + . Parent=gene884 chr16 ENCODE CDS 401362 401579 . + 2 Parent=gene884 chr16 ENCODE exon 401891 402488 . + . Parent=gene884 ### chr16 ENCODE gene 391859 402371 . + . ID=gene885;name2=DECR2;Name=AL023881.1-005 chr16 ENCODE exon 391859 392044 . + . Parent=gene885 chr16 ENCODE exon 394957 395025 . + . Parent=gene885 chr16 ENCODE exon 396347 396398 . + . Parent=gene885 chr16 ENCODE exon 396686 397201 . + . Parent=gene885 chr16 ENCODE exon 397296 397561 . + . Parent=gene885 chr16 ENCODE exon 400244 400368 . + . Parent=gene885 chr16 ENCODE exon 400692 400785 . + . Parent=gene885 chr16 ENCODE exon 400973 401077 . + . Parent=gene885 chr16 ENCODE exon 401362 401579 . + . Parent=gene885 chr16 ENCODE exon 401891 402094 . + . Parent=gene885 chr16 ENCODE exon 402121 402371 . + . Parent=gene885 ### chr16 ENCODE gene 391883 401977 . + . ID=gene886;Name=AL023881.1-008;name2=DECR2 chr16 ENCODE exon 391883 392044 . + . Parent=gene886 chr16 ENCODE CDS 391965 392044 . + 0 Parent=gene886 chr16 ENCODE exon 394957 395025 . + . Parent=gene886 chr16 ENCODE CDS 394957 395025 . + 1 Parent=gene886 chr16 ENCODE exon 396347 396362 . + . Parent=gene886 chr16 ENCODE CDS 396347 396362 . + 1 Parent=gene886 chr16 ENCODE exon 397426 397561 . + . Parent=gene886 chr16 ENCODE CDS 397426 397561 . + 0 Parent=gene886 chr16 ENCODE exon 400244 400368 . + . Parent=gene886 chr16 ENCODE CDS 400244 400368 . + 2 Parent=gene886 chr16 ENCODE exon 400692 400785 . + . Parent=gene886 chr16 ENCODE CDS 400692 400785 . + 0 Parent=gene886 chr16 ENCODE exon 400973 401077 . + . Parent=gene886 chr16 ENCODE CDS 400973 401077 . + 2 Parent=gene886 chr16 ENCODE exon 401362 401579 . + . Parent=gene886 chr16 ENCODE CDS 401362 401579 . + 2 Parent=gene886 chr16 ENCODE exon 401891 401977 . + . Parent=gene886 ### chr16 ENCODE gene 391883 402467 . + . ID=gene887;Name=AL023881.1-004;name2=DECR2 chr16 ENCODE exon 391883 392044 . + . Parent=gene887 chr16 ENCODE exon 394957 395040 . + . Parent=gene887 chr16 ENCODE exon 397426 397561 . + . Parent=gene887 chr16 ENCODE exon 400244 400368 . + . Parent=gene887 chr16 ENCODE exon 400692 400785 . + . Parent=gene887 chr16 ENCODE exon 400973 401077 . + . Parent=gene887 chr16 ENCODE exon 401362 401579 . + . Parent=gene887 chr16 ENCODE exon 401891 402467 . + . Parent=gene887 ### chr16 ENCODE gene 391894 402371 . + . ID=gene888;Name=AL023881.1-003;name2=DECR2 chr16 ENCODE exon 391894 392044 . + . Parent=gene888 chr16 ENCODE exon 394957 395025 . + . Parent=gene888 chr16 ENCODE exon 395514 395666 . + . Parent=gene888 chr16 ENCODE exon 396347 396398 . + . Parent=gene888 chr16 ENCODE exon 397426 397561 . + . Parent=gene888 chr16 ENCODE exon 400210 400368 . + . Parent=gene888 chr16 ENCODE exon 400692 400785 . + . Parent=gene888 chr16 ENCODE exon 400973 401077 . + . Parent=gene888 chr16 ENCODE exon 401362 401579 . + . Parent=gene888 chr16 ENCODE exon 401891 402371 . + . Parent=gene888 ### chr16 ENCODE gene 391916 402488 . + . ID=gene889;Name=AL023881.1-006;name2=DECR2 chr16 ENCODE exon 391916 392044 . + . Parent=gene889 chr16 ENCODE exon 394957 395025 . + . Parent=gene889 chr16 ENCODE exon 396347 396398 . + . Parent=gene889 chr16 ENCODE exon 396686 396834 . + . Parent=gene889 chr16 ENCODE exon 396891 396953 . + . Parent=gene889 chr16 ENCODE exon 397426 397561 . + . Parent=gene889 chr16 ENCODE exon 400244 400368 . + . Parent=gene889 chr16 ENCODE exon 400692 400785 . + . Parent=gene889 chr16 ENCODE exon 400973 401077 . + . Parent=gene889 chr16 ENCODE exon 401362 401579 . + . Parent=gene889 chr16 ENCODE exon 401891 402488 . + . Parent=gene889 ### chr16 ENCODE gene 391927 401472 . + . ID=gene890;Name=AL023881.1-009;name2=DECR2 chr16 ENCODE exon 391927 392044 . + . Parent=gene890 chr16 ENCODE exon 394957 395025 . + . Parent=gene890 chr16 ENCODE exon 396347 396398 . + . Parent=gene890 chr16 ENCODE exon 396686 396953 . + . Parent=gene890 chr16 ENCODE exon 397426 397561 . + . Parent=gene890 chr16 ENCODE exon 400244 400368 . + . Parent=gene890 chr16 ENCODE exon 400692 400785 . + . Parent=gene890 chr16 ENCODE exon 400973 401077 . + . Parent=gene890 chr16 ENCODE exon 401362 401472 . + . Parent=gene890 ### chr16 ENCODE gene 392006 397172 . + . ID=gene891;name2=DECR2;Name=AL023881.1-010 chr16 ENCODE exon 392006 392044 . + . Parent=gene891 chr16 ENCODE exon 394957 395025 . + . Parent=gene891 chr16 ENCODE exon 396347 396834 . + . Parent=gene891 chr16 ENCODE exon 396891 397172 . + . Parent=gene891 ### chr16 ENCODE gene 396896 402488 . + . ID=gene892;Name=AL023881.1-015;name2=DECR2 chr16 ENCODE exon 396896 396953 . + . Parent=gene892 chr16 ENCODE exon 400244 400405 . + . Parent=gene892 chr16 ENCODE exon 400692 400785 . + . Parent=gene892 chr16 ENCODE exon 400973 401077 . + . Parent=gene892 chr16 ENCODE exon 401891 402488 . + . Parent=gene892 ### chr16 ENCODE gene 396947 400296 . + . ID=gene893;Name=AL023881.1-012;name2=DECR2 chr16 ENCODE exon 396947 397561 . + . Parent=gene893 chr16 ENCODE exon 400210 400296 . + . Parent=gene893 ### chr16 ENCODE gene 397428 401929 . + . ID=gene894;Name=AL023881.1-014;name2=DECR2 chr16 ENCODE exon 397428 397561 . + . Parent=gene894 chr16 ENCODE exon 400244 400405 . + . Parent=gene894 chr16 ENCODE exon 400692 400754 . + . Parent=gene894 chr16 ENCODE exon 400973 401077 . + . Parent=gene894 chr16 ENCODE exon 401362 401579 . + . Parent=gene894 chr16 ENCODE exon 401891 401929 . + . Parent=gene894 ### chr16 ENCODE gene 399600 402482 . + . ID=gene895;name2=DECR2;Name=AL023881.1-007 chr16 ENCODE exon 399600 400368 . + . Parent=gene895 chr16 ENCODE exon 400692 400785 . + . Parent=gene895 chr16 ENCODE exon 400973 401579 . + . Parent=gene895 chr16 ENCODE exon 401891 402482 . + . Parent=gene895 ### chr16 ENCODE gene 400113 401051 . + . ID=gene896;Name=AL023881.1-013;name2=DECR2 chr16 ENCODE exon 400113 400368 . + . Parent=gene896 chr16 ENCODE exon 400692 401051 . + . Parent=gene896 ### chr16 ENCODE gene 415620 495628 . + . ID=gene897;Name=Z98882.1-001;name2=RAB11FIP3 chr16 ENCODE exon 415620 416721 . + . Parent=gene897 chr16 ENCODE exon 451405 451498 . + . Parent=gene897 chr16 ENCODE exon 461296 461390 . + . Parent=gene897 chr16 ENCODE exon 472526 472737 . + . Parent=gene897 chr16 ENCODE exon 478852 479001 . + . Parent=gene897 chr16 ENCODE exon 486825 486860 . + . Parent=gene897 chr16 ENCODE exon 493005 493098 . + . Parent=gene897 chr16 ENCODE exon 495525 495628 . + . Parent=gene897 ### chr16 ENCODE gene 464870 495606 . + . ID=gene898;Name=Z98882.1-002;name2=RAB11FIP3 chr16 ENCODE exon 464870 465099 . + . Parent=gene898 chr16 ENCODE exon 472526 472737 . + . Parent=gene898 chr16 ENCODE CDS 472553 472737 . + 0 Parent=gene898 chr16 ENCODE exon 478852 479001 . + . Parent=gene898 chr16 ENCODE CDS 478852 479001 . + 1 Parent=gene898 chr16 ENCODE exon 486825 486860 . + . Parent=gene898 chr16 ENCODE CDS 486825 486860 . + 1 Parent=gene898 chr16 ENCODE exon 493005 493098 . + . Parent=gene898 chr16 ENCODE CDS 493005 493098 . + 1 Parent=gene898 chr16 ENCODE exon 495525 495606 . + . Parent=gene898 chr16 ENCODE CDS 495525 495606 . + 0 Parent=gene898 ### chr16 ENCODE gene 464925 479102 . + . ID=gene899;Name=Z98882.1-008;name2=RAB11FIP3 chr16 ENCODE exon 464925 465046 . + . Parent=gene899 chr16 ENCODE exon 472526 472737 . + . Parent=gene899 chr16 ENCODE exon 478852 479102 . + . Parent=gene899 ### chr16 ENCODE gene 464925 493064 . + . ID=gene900;Name=Z98882.1-009;name2=RAB11FIP3 chr16 ENCODE exon 464925 465046 . + . Parent=gene900 chr16 ENCODE CDS 465032 465046 . + 0 Parent=gene900 chr16 ENCODE exon 472526 472737 . + . Parent=gene900 chr16 ENCODE CDS 472526 472737 . + 0 Parent=gene900 chr16 ENCODE exon 478852 479001 . + . Parent=gene900 chr16 ENCODE CDS 478852 479001 . + 1 Parent=gene900 chr16 ENCODE exon 486825 486860 . + . Parent=gene900 chr16 ENCODE CDS 486825 486860 . + 1 Parent=gene900 chr16 ENCODE exon 493005 493064 . + . Parent=gene900 chr16 ENCODE CDS 493005 493064 . + 1 Parent=gene900 ### chr16 ENCODE gene 472658 487449 . + . ID=gene901;Name=Z98882.1-004;name2=RAB11FIP3 chr16 ENCODE exon 472658 472737 . + . Parent=gene901 chr16 ENCODE exon 478852 479001 . + . Parent=gene901 chr16 ENCODE exon 481135 481269 . + . Parent=gene901 chr16 ENCODE exon 486825 486860 . + . Parent=gene901 chr16 ENCODE exon 487293 487449 . + . Parent=gene901 ### chr16 ENCODE gene 478943 487159 . + . ID=gene902;Name=Z98882.1-003;name2=RAB11FIP3 chr16 ENCODE exon 478943 479001 . + . Parent=gene902 chr16 ENCODE exon 481135 481269 . + . Parent=gene902 chr16 ENCODE exon 486825 487159 . + . Parent=gene902 ### chr16 ENCODE gene 492751 495628 . + . ID=gene903;Name=Z98882.1-005;name2=RAB11FIP3 chr16 ENCODE exon 492751 493098 . + . Parent=gene903 chr16 ENCODE exon 495525 495628 . + . Parent=gene903 ### chr16 ENCODE gene 25805568 26055029 . + . ID=gene904;Name=AC093511.1-002;name2=HS3ST4 chr16 ENCODE exon 25805568 25805743 . + . Parent=gene904 chr16 ENCODE exon 26054434 26055029 . + . Parent=gene904 ### chr16 ENCODE gene 26054434 26056510 . + . ID=gene905;Name=AC093511.1-001;name2=HS3ST4 chr16 ENCODE exon 26054434 26056510 . + . Parent=gene905 ### chr18 ENCODE gene 23784928 24011408 . - . ID=gene906;Name=AC110015.1-001;name2=CDH2 chr18 ENCODE exon 23784928 23786321 . - . Parent=gene906 chr18 ENCODE CDS 23786115 23786321 . - 0 Parent=gene906 chr18 ENCODE exon 23797319 23797483 . - . Parent=gene906 chr18 ENCODE CDS 23797319 23797483 . - 0 Parent=gene906 chr18 ENCODE exon 23816906 23817045 . - . Parent=gene906 chr18 ENCODE CDS 23816906 23817045 . - 2 Parent=gene906 chr18 ENCODE exon 23818962 23819195 . - . Parent=gene906 chr18 ENCODE CDS 23818962 23819195 . - 2 Parent=gene906 chr18 ENCODE exon 23819490 23819723 . - . Parent=gene906 chr18 ENCODE CDS 23819490 23819723 . - 2 Parent=gene906 chr18 ENCODE exon 23822486 23822628 . - . Parent=gene906 chr18 ENCODE CDS 23822486 23822628 . - 1 Parent=gene906 chr18 ENCODE exon 23824059 23824312 . - . Parent=gene906 chr18 ENCODE CDS 23824059 23824312 . - 0 Parent=gene906 chr18 ENCODE exon 23826617 23826802 . - . Parent=gene906 chr18 ENCODE CDS 23826617 23826802 . - 0 Parent=gene906 chr18 ENCODE exon 23827462 23827599 . - . Parent=gene906 chr18 ENCODE CDS 23827462 23827599 . - 0 Parent=gene906 chr18 ENCODE exon 23836959 23837131 . - . Parent=gene906 chr18 ENCODE CDS 23836959 23837131 . - 2 Parent=gene906 chr18 ENCODE exon 23839811 23839955 . - . Parent=gene906 chr18 ENCODE CDS 23839811 23839955 . - 0 Parent=gene906 chr18 ENCODE exon 23843679 23843834 . - . Parent=gene906 chr18 ENCODE CDS 23843679 23843834 . - 0 Parent=gene906 chr18 ENCODE exon 23845808 23845954 . - . Parent=gene906 chr18 ENCODE CDS 23845808 23845954 . - 0 Parent=gene906 chr18 ENCODE exon 23847645 23847871 . - . Parent=gene906 chr18 ENCODE CDS 23847645 23847871 . - 2 Parent=gene906 chr18 ENCODE exon 23981635 23981746 . - . Parent=gene906 chr18 ENCODE CDS 23981635 23981746 . - 0 Parent=gene906 chr18 ENCODE CDS 24010925 24010984 . - 0 Parent=gene906 chr18 ENCODE exon 24010925 24011408 . - . Parent=gene906 ### chr18 ENCODE gene 23785043 23870547 . - . ID=gene907;Name=AC110015.1-003;name2=CDH2 chr18 ENCODE exon 23785043 23786321 . - . Parent=gene907 chr18 ENCODE CDS 23786115 23786321 . - 0 Parent=gene907 chr18 ENCODE exon 23797319 23797483 . - . Parent=gene907 chr18 ENCODE CDS 23797319 23797483 . - 0 Parent=gene907 chr18 ENCODE exon 23816906 23817045 . - . Parent=gene907 chr18 ENCODE CDS 23816906 23817045 . - 2 Parent=gene907 chr18 ENCODE exon 23818962 23819195 . - . Parent=gene907 chr18 ENCODE CDS 23818962 23819195 . - 2 Parent=gene907 chr18 ENCODE exon 23819490 23819723 . - . Parent=gene907 chr18 ENCODE CDS 23819490 23819723 . - 2 Parent=gene907 chr18 ENCODE exon 23822486 23822628 . - . Parent=gene907 chr18 ENCODE CDS 23822486 23822628 . - 1 Parent=gene907 chr18 ENCODE exon 23824059 23824312 . - . Parent=gene907 chr18 ENCODE CDS 23824059 23824312 . - 0 Parent=gene907 chr18 ENCODE exon 23826617 23826802 . - . Parent=gene907 chr18 ENCODE CDS 23826617 23826802 . - 0 Parent=gene907 chr18 ENCODE exon 23827462 23827599 . - . Parent=gene907 chr18 ENCODE CDS 23827462 23827599 . - 0 Parent=gene907 chr18 ENCODE exon 23836959 23837131 . - . Parent=gene907 chr18 ENCODE CDS 23836959 23837131 . - 2 Parent=gene907 chr18 ENCODE exon 23839811 23839955 . - . Parent=gene907 chr18 ENCODE CDS 23839811 23839955 . - 0 Parent=gene907 chr18 ENCODE exon 23843679 23843834 . - . Parent=gene907 chr18 ENCODE CDS 23843679 23843834 . - 0 Parent=gene907 chr18 ENCODE exon 23845808 23845954 . - . Parent=gene907 chr18 ENCODE CDS 23845808 23845954 . - 0 Parent=gene907 chr18 ENCODE exon 23847645 23847871 . - . Parent=gene907 chr18 ENCODE CDS 23847645 23847871 . - 2 Parent=gene907 chr18 ENCODE CDS 23870432 23870510 . - 0 Parent=gene907 chr18 ENCODE exon 23870432 23870547 . - . Parent=gene907 ### chr18 ENCODE gene 23839932 23879558 . - . ID=gene908;Name=AC110015.1-002;name2=CDH2 chr18 ENCODE exon 23839932 23839955 . - . Parent=gene908 chr18 ENCODE CDS 23839932 23839955 . - 0 Parent=gene908 chr18 ENCODE exon 23843679 23843834 . - . Parent=gene908 chr18 ENCODE CDS 23843679 23843834 . - 0 Parent=gene908 chr18 ENCODE exon 23845808 23845954 . - . Parent=gene908 chr18 ENCODE CDS 23845808 23845954 . - 0 Parent=gene908 chr18 ENCODE exon 23847645 23847871 . - . Parent=gene908 chr18 ENCODE CDS 23847645 23847871 . - 2 Parent=gene908 chr18 ENCODE CDS 23879373 23879391 . - 0 Parent=gene908 chr18 ENCODE exon 23879373 23879558 . - . Parent=gene908 ### chr18 ENCODE gene 23843766 23931191 . - . ID=gene909;Name=AC110015.1-005;name2=CDH2 chr18 ENCODE exon 23843766 23843834 . - . Parent=gene909 chr18 ENCODE exon 23845808 23845954 . - . Parent=gene909 chr18 ENCODE exon 23847645 23847871 . - . Parent=gene909 chr18 ENCODE exon 23931025 23931191 . - . Parent=gene909 ### chr18 ENCODE gene 23845880 23993259 . - . ID=gene910;Name=AC110015.1-004;name2=CDH2 chr18 ENCODE exon 23845880 23845954 . - . Parent=gene910 chr18 ENCODE exon 23847645 23847871 . - . Parent=gene910 chr18 ENCODE exon 23981635 23981746 . - . Parent=gene910 chr18 ENCODE exon 23993111 23993259 . - . Parent=gene910 ### chr18 ENCODE gene 59412569 59416957 . + . ID=gene911;Name=AC090307.1-002;name2=SERPINB13 chr18 ENCODE exon 59412569 59412711 . + . Parent=gene911 chr18 ENCODE exon 59413243 59413398 . + . Parent=gene911 chr18 ENCODE exon 59415173 59416957 . + . Parent=gene911 ### chr18 ENCODE gene 59412569 59417413 . + . ID=gene912;Name=AC090307.1-001;name2=SERPINB13 chr18 ENCODE exon 59412569 59412711 . + . Parent=gene912 chr18 ENCODE exon 59413243 59413398 . + . Parent=gene912 chr18 ENCODE exon 59415173 59417413 . + . Parent=gene912 ### chr18 ENCODE gene 59413243 59422853 . + . ID=gene913;name2=SERPINB13;Name=AC090307.1-004 chr18 ENCODE exon 59413243 59413398 . + . Parent=gene913 chr18 ENCODE exon 59422154 59422853 . + . Parent=gene913 ### chr18 ENCODE gene 59455473 59462512 . - . ID=gene914;Name=AC069356.2-001;name2=SERPINB4 chr18 ENCODE exon 59455473 59456337 . - . Parent=gene914 chr18 ENCODE CDS 59455933 59456337 . - 0 Parent=gene914 chr18 ENCODE exon 59457399 59457554 . - . Parent=gene914 chr18 ENCODE CDS 59457399 59457554 . - 0 Parent=gene914 chr18 ENCODE exon 59457848 59457990 . - . Parent=gene914 chr18 ENCODE CDS 59457848 59457990 . - 2 Parent=gene914 chr18 ENCODE exon 59459088 59459205 . - . Parent=gene914 chr18 ENCODE CDS 59459088 59459205 . - 0 Parent=gene914 chr18 ENCODE exon 59459974 59460102 . - . Parent=gene914 chr18 ENCODE CDS 59459974 59460102 . - 0 Parent=gene914 chr18 ENCODE exon 59461375 59461431 . - . Parent=gene914 chr18 ENCODE CDS 59461375 59461431 . - 0 Parent=gene914 chr18 ENCODE CDS 59461627 59461791 . - 0 Parent=gene914 chr18 ENCODE exon 59461627 59461817 . - . Parent=gene914 chr18 ENCODE exon 59462423 59462512 . - . Parent=gene914 ### chr18 ENCODE gene 59455932 59461796 . - . ID=gene915;Name=AC069356.2-002;name2=SERPINB4 chr18 ENCODE exon 59455932 59456337 . - . Parent=gene915 chr18 ENCODE CDS 59455933 59456337 . - 1 Parent=gene915 chr18 ENCODE exon 59457399 59457491 . - . Parent=gene915 chr18 ENCODE CDS 59457399 59457491 . - 1 Parent=gene915 chr18 ENCODE exon 59457848 59457990 . - . Parent=gene915 chr18 ENCODE CDS 59457848 59457990 . - 0 Parent=gene915 chr18 ENCODE exon 59459088 59459205 . - . Parent=gene915 chr18 ENCODE CDS 59459088 59459205 . - 1 Parent=gene915 chr18 ENCODE exon 59459974 59460102 . - . Parent=gene915 chr18 ENCODE CDS 59459974 59460102 . - 1 Parent=gene915 chr18 ENCODE exon 59461375 59461431 . - . Parent=gene915 chr18 ENCODE CDS 59461375 59461431 . - 1 Parent=gene915 chr18 ENCODE exon 59461627 59461796 . - . Parent=gene915 chr18 ENCODE CDS 59461627 59461796 . - 0 Parent=gene915 ### chr18 ENCODE gene 59457403 59462470 . - . ID=gene916;name2=SERPINB4;Name=AC069356.2-004 chr18 ENCODE exon 59457403 59457554 . - . Parent=gene916 chr18 ENCODE CDS 59457403 59457554 . - 0 Parent=gene916 chr18 ENCODE exon 59457848 59457990 . - . Parent=gene916 chr18 ENCODE CDS 59457848 59457990 . - 2 Parent=gene916 chr18 ENCODE exon 59459088 59459205 . - . Parent=gene916 chr18 ENCODE CDS 59459088 59459205 . - 0 Parent=gene916 chr18 ENCODE exon 59461375 59461431 . - . Parent=gene916 chr18 ENCODE CDS 59461375 59461431 . - 0 Parent=gene916 chr18 ENCODE CDS 59461627 59461791 . - 0 Parent=gene916 chr18 ENCODE exon 59461627 59461817 . - . Parent=gene916 chr18 ENCODE exon 59462423 59462470 . - . Parent=gene916 ### chr18 ENCODE gene 59461111 59462469 . - . ID=gene917;Name=AC069356.2-003;name2=SERPINB4 chr18 ENCODE exon 59461111 59461431 . - . Parent=gene917 chr18 ENCODE exon 59461627 59461817 . - . Parent=gene917 chr18 ENCODE exon 59462423 59462469 . - . Parent=gene917 ### chr18 ENCODE gene 59473411 59480177 . - . ID=gene918;Name=AC069356.1-001;name2=SERPINB3 chr18 ENCODE exon 59473411 59474275 . - . Parent=gene918 chr18 ENCODE CDS 59473871 59474275 . - 0 Parent=gene918 chr18 ENCODE exon 59475045 59475200 . - . Parent=gene918 chr18 ENCODE CDS 59475045 59475200 . - 0 Parent=gene918 chr18 ENCODE exon 59475484 59475626 . - . Parent=gene918 chr18 ENCODE CDS 59475484 59475626 . - 2 Parent=gene918 chr18 ENCODE exon 59476727 59476844 . - . Parent=gene918 chr18 ENCODE CDS 59476727 59476844 . - 0 Parent=gene918 chr18 ENCODE exon 59477613 59477741 . - . Parent=gene918 chr18 ENCODE CDS 59477613 59477741 . - 0 Parent=gene918 chr18 ENCODE exon 59479014 59479070 . - . Parent=gene918 chr18 ENCODE CDS 59479014 59479070 . - 0 Parent=gene918 chr18 ENCODE CDS 59479266 59479430 . - 0 Parent=gene918 chr18 ENCODE exon 59479266 59479456 . - . Parent=gene918 chr18 ENCODE exon 59480060 59480177 . - . Parent=gene918 ### chr18 ENCODE gene 59473412 59480098 . - . ID=gene919;Name=AC069356.1-002;name2=SERPINB3 chr18 ENCODE exon 59473412 59474275 . - . Parent=gene919 chr18 ENCODE CDS 59473871 59474275 . - 0 Parent=gene919 chr18 ENCODE exon 59475484 59475626 . - . Parent=gene919 chr18 ENCODE CDS 59475484 59475626 . - 2 Parent=gene919 chr18 ENCODE exon 59476727 59476844 . - . Parent=gene919 chr18 ENCODE CDS 59476727 59476844 . - 0 Parent=gene919 chr18 ENCODE exon 59477613 59477741 . - . Parent=gene919 chr18 ENCODE CDS 59477613 59477741 . - 0 Parent=gene919 chr18 ENCODE exon 59479014 59479070 . - . Parent=gene919 chr18 ENCODE CDS 59479014 59479070 . - 0 Parent=gene919 chr18 ENCODE CDS 59479266 59479430 . - 0 Parent=gene919 chr18 ENCODE exon 59479266 59479456 . - . Parent=gene919 chr18 ENCODE exon 59480060 59480098 . - . Parent=gene919 ### chr18 ENCODE gene 59571149 59614526 . + . ID=gene920;Name=AC072051.1-002;name2=SERPINB7 chr18 ENCODE exon 59571149 59571334 . + . Parent=gene920 chr18 ENCODE exon 59600569 59600754 . + . Parent=gene920 chr18 ENCODE CDS 59600587 59600754 . + 0 Parent=gene920 chr18 ENCODE exon 59610607 59610657 . + . Parent=gene920 chr18 ENCODE CDS 59610607 59610657 . + 0 Parent=gene920 chr18 ENCODE exon 59611375 59611491 . + . Parent=gene920 chr18 ENCODE CDS 59611375 59611491 . + 0 Parent=gene920 chr18 ENCODE exon 59614480 59614526 . + . Parent=gene920 chr18 ENCODE CDS 59614480 59614526 . + 0 Parent=gene920 ### chr18 ENCODE gene 59593624 59623584 . + . ID=gene921;Name=AC072051.1-001;name2=SERPINB7 chr18 ENCODE exon 59593624 59593930 . + . Parent=gene921 chr18 ENCODE exon 59600569 59600754 . + . Parent=gene921 chr18 ENCODE CDS 59600587 59600754 . + 0 Parent=gene921 chr18 ENCODE exon 59610607 59610657 . + . Parent=gene921 chr18 ENCODE CDS 59610607 59610657 . + 0 Parent=gene921 chr18 ENCODE exon 59611375 59611491 . + . Parent=gene921 chr18 ENCODE CDS 59611375 59611491 . + 0 Parent=gene921 chr18 ENCODE exon 59614480 59614597 . + . Parent=gene921 chr18 ENCODE CDS 59614480 59614597 . + 0 Parent=gene921 chr18 ENCODE exon 59616818 59616960 . + . Parent=gene921 chr18 ENCODE CDS 59616818 59616960 . + 2 Parent=gene921 chr18 ENCODE exon 59619080 59619226 . + . Parent=gene921 chr18 ENCODE CDS 59619080 59619226 . + 0 Parent=gene921 chr18 ENCODE CDS 59622451 59622849 . + 0 Parent=gene921 chr18 ENCODE exon 59622451 59623584 . + . Parent=gene921 ### chr18 ENCODE gene 59595991 59616857 . + . ID=gene922;name2=SERPINB7;Name=AC072051.1-004 chr18 ENCODE exon 59595991 59596039 . + . Parent=gene922 chr18 ENCODE exon 59600569 59600754 . + . Parent=gene922 chr18 ENCODE CDS 59600587 59600754 . + 0 Parent=gene922 chr18 ENCODE exon 59610607 59610657 . + . Parent=gene922 chr18 ENCODE CDS 59610607 59610657 . + 0 Parent=gene922 chr18 ENCODE exon 59611375 59611491 . + . Parent=gene922 chr18 ENCODE CDS 59611375 59611491 . + 0 Parent=gene922 chr18 ENCODE exon 59614480 59614597 . + . Parent=gene922 chr18 ENCODE CDS 59614480 59614597 . + 0 Parent=gene922 chr18 ENCODE exon 59616818 59616857 . + . Parent=gene922 chr18 ENCODE CDS 59616818 59616857 . + 2 Parent=gene922 ### chr18 ENCODE gene 59596191 59614527 . + . ID=gene923;Name=AC072051.1-005;name2=SERPINB7 chr18 ENCODE exon 59596191 59596348 . + . Parent=gene923 chr18 ENCODE exon 59600569 59600754 . + . Parent=gene923 chr18 ENCODE CDS 59600587 59600754 . + 0 Parent=gene923 chr18 ENCODE exon 59610607 59610657 . + . Parent=gene923 chr18 ENCODE CDS 59610607 59610657 . + 0 Parent=gene923 chr18 ENCODE exon 59611375 59611491 . + . Parent=gene923 chr18 ENCODE CDS 59611375 59611491 . + 0 Parent=gene923 chr18 ENCODE exon 59614480 59614527 . + . Parent=gene923 chr18 ENCODE CDS 59614480 59614527 . + 0 Parent=gene923 ### chr18 ENCODE gene 59619580 59623496 . + . ID=gene924;Name=AC072051.1-003;name2=SERPINB7 chr18 ENCODE exon 59619580 59623496 . + . Parent=gene924 ### chr18 ENCODE gene 59689906 59715357 . + . ID=gene925;Name=AC072051.2-005;name2=SERPINB2 chr18 ENCODE exon 59689906 59690014 . + . Parent=gene925 chr18 ENCODE exon 59708052 59708309 . + . Parent=gene925 chr18 ENCODE exon 59709650 59709826 . + . Parent=gene925 chr18 ENCODE CDS 59709659 59709826 . + 0 Parent=gene925 chr18 ENCODE exon 59713478 59713597 . + . Parent=gene925 chr18 ENCODE CDS 59713478 59713597 . + 0 Parent=gene925 chr18 ENCODE exon 59715305 59715357 . + . Parent=gene925 chr18 ENCODE CDS 59715305 59715357 . + 0 Parent=gene925 ### chr18 ENCODE gene 59705914 59722104 . + . ID=gene926;Name=AC072051.2-001;name2=SERPINB2 chr18 ENCODE exon 59705914 59705984 . + . Parent=gene926 chr18 ENCODE exon 59709650 59709826 . + . Parent=gene926 chr18 ENCODE CDS 59709659 59709826 . + 0 Parent=gene926 chr18 ENCODE exon 59713478 59713597 . + . Parent=gene926 chr18 ENCODE CDS 59713478 59713597 . + 0 Parent=gene926 chr18 ENCODE exon 59715305 59715433 . + . Parent=gene926 chr18 ENCODE CDS 59715305 59715433 . + 0 Parent=gene926 chr18 ENCODE exon 59715941 59716058 . + . Parent=gene926 chr18 ENCODE CDS 59715941 59716058 . + 0 Parent=gene926 chr18 ENCODE exon 59719954 59720096 . + . Parent=gene926 chr18 ENCODE CDS 59719954 59720096 . + 2 Parent=gene926 chr18 ENCODE exon 59720618 59720782 . + . Parent=gene926 chr18 ENCODE CDS 59720618 59720782 . + 0 Parent=gene926 chr18 ENCODE CDS 59721115 59721519 . + 0 Parent=gene926 chr18 ENCODE exon 59721115 59722104 . + . Parent=gene926 ### chr18 ENCODE gene 59705973 59716006 . + . ID=gene927;Name=AC072051.2-002;name2=SERPINB2 chr18 ENCODE exon 59705973 59705984 . + . Parent=gene927 chr18 ENCODE exon 59708052 59708309 . + . Parent=gene927 chr18 ENCODE exon 59709650 59709826 . + . Parent=gene927 chr18 ENCODE CDS 59709659 59709826 . + 0 Parent=gene927 chr18 ENCODE exon 59713478 59713597 . + . Parent=gene927 chr18 ENCODE CDS 59713478 59713597 . + 0 Parent=gene927 chr18 ENCODE exon 59715305 59715433 . + . Parent=gene927 chr18 ENCODE CDS 59715305 59715433 . + 0 Parent=gene927 chr18 ENCODE exon 59715941 59716006 . + . Parent=gene927 chr18 ENCODE CDS 59715941 59716006 . + 0 Parent=gene927 ### chr18 ENCODE gene 59708771 59715414 . + . ID=gene928;Name=AC072051.2-003;name2=SERPINB2 chr18 ENCODE exon 59708771 59709114 . + . Parent=gene928 chr18 ENCODE exon 59709650 59709826 . + . Parent=gene928 chr18 ENCODE CDS 59709659 59709826 . + 0 Parent=gene928 chr18 ENCODE exon 59713478 59713597 . + . Parent=gene928 chr18 ENCODE CDS 59713478 59713597 . + 0 Parent=gene928 chr18 ENCODE exon 59715305 59715414 . + . Parent=gene928 chr18 ENCODE CDS 59715305 59715414 . + 0 Parent=gene928 ### chr18 ENCODE gene 59710831 59720767 . + . ID=gene929;Name=AC072051.2-004;name2=SERPINB2 chr18 ENCODE exon 59710831 59710954 . + . Parent=gene929 chr18 ENCODE exon 59713478 59713597 . + . Parent=gene929 chr18 ENCODE exon 59715305 59715433 . + . Parent=gene929 chr18 ENCODE exon 59715941 59716058 . + . Parent=gene929 chr18 ENCODE exon 59719954 59720096 . + . Parent=gene929 chr18 ENCODE exon 59720618 59720767 . + . Parent=gene929 ### chr18 ENCODE gene 59715388 59735704 . + . ID=gene930;Name=AC009802.1-003;name2=SERPINB10 chr18 ENCODE exon 59715388 59715433 . + . Parent=gene930 chr18 ENCODE CDS 59715388 59715433 . + 0 Parent=gene930 chr18 ENCODE exon 59715941 59716058 . + . Parent=gene930 chr18 ENCODE CDS 59715941 59716058 . + 2 Parent=gene930 chr18 ENCODE exon 59719954 59720096 . + . Parent=gene930 chr18 ENCODE CDS 59719954 59720096 . + 1 Parent=gene930 chr18 ENCODE exon 59720618 59720782 . + . Parent=gene930 chr18 ENCODE CDS 59720618 59720782 . + 2 Parent=gene930 chr18 ENCODE exon 59721115 59721189 . + . Parent=gene930 chr18 ENCODE CDS 59721115 59721189 . + 2 Parent=gene930 chr18 ENCODE exon 59733716 59733892 . + . Parent=gene930 chr18 ENCODE CDS 59733716 59733892 . + 2 Parent=gene930 chr18 ENCODE exon 59735670 59735704 . + . Parent=gene930 chr18 ENCODE CDS 59735670 59735704 . + 2 Parent=gene930 ### chr18 ENCODE gene 59715388 59735704 . + . ID=gene931;Name=AC009802.1-002;name2=SERPINB10 chr18 ENCODE exon 59715388 59715433 . + . Parent=gene931 chr18 ENCODE CDS 59715388 59715433 . + 0 Parent=gene931 chr18 ENCODE exon 59715941 59716058 . + . Parent=gene931 chr18 ENCODE CDS 59715941 59716058 . + 2 Parent=gene931 chr18 ENCODE exon 59719954 59720096 . + . Parent=gene931 chr18 ENCODE CDS 59719954 59720096 . + 1 Parent=gene931 chr18 ENCODE exon 59720618 59720782 . + . Parent=gene931 chr18 ENCODE CDS 59720618 59720782 . + 2 Parent=gene931 chr18 ENCODE exon 59721115 59721189 . + . Parent=gene931 chr18 ENCODE CDS 59721115 59721189 . + 2 Parent=gene931 chr18 ENCODE exon 59726174 59726254 . + . Parent=gene931 chr18 ENCODE CDS 59726174 59726254 . + 2 Parent=gene931 chr18 ENCODE exon 59733716 59733892 . + . Parent=gene931 chr18 ENCODE CDS 59733716 59733892 . + 2 Parent=gene931 chr18 ENCODE exon 59735670 59735704 . + . Parent=gene931 chr18 ENCODE CDS 59735670 59735704 . + 2 Parent=gene931 ### chr18 ENCODE gene 59726205 59754325 . + . ID=gene932;Name=AC009802.1-001;name2=SERPINB10 chr18 ENCODE exon 59726205 59726254 . + . Parent=gene932 chr18 ENCODE exon 59733716 59733892 . + . Parent=gene932 chr18 ENCODE CDS 59733725 59733892 . + 0 Parent=gene932 chr18 ENCODE exon 59735670 59735735 . + . Parent=gene932 chr18 ENCODE CDS 59735670 59735735 . + 0 Parent=gene932 chr18 ENCODE exon 59736179 59736316 . + . Parent=gene932 chr18 ENCODE CDS 59736179 59736316 . + 0 Parent=gene932 chr18 ENCODE exon 59738002 59738119 . + . Parent=gene932 chr18 ENCODE CDS 59738002 59738119 . + 0 Parent=gene932 chr18 ENCODE exon 59748259 59748401 . + . Parent=gene932 chr18 ENCODE CDS 59748259 59748401 . + 2 Parent=gene932 chr18 ENCODE exon 59751262 59751417 . + . Parent=gene932 chr18 ENCODE CDS 59751262 59751417 . + 0 Parent=gene932 chr18 ENCODE CDS 59753052 59753456 . + 0 Parent=gene932 chr18 ENCODE exon 59753052 59754325 . + . Parent=gene932 ### chr18 ENCODE gene 59767515 59778626 . + . ID=gene933;name2=AC009802.2;Name=AC009802.2-001 chr18 ENCODE exon 59767515 59767614 . + . Parent=gene933 chr18 ENCODE exon 59771568 59771741 . + . Parent=gene933 chr18 ENCODE CDS 59771670 59771741 . + 0 Parent=gene933 chr18 ENCODE exon 59772622 59772771 . + . Parent=gene933 chr18 ENCODE CDS 59772622 59772771 . + 0 Parent=gene933 chr18 ENCODE CDS 59778372 59778569 . + 0 Parent=gene933 chr18 ENCODE exon 59778372 59778626 . + . Parent=gene933 ### chr18 ENCODE gene 59767571 59799988 . + . ID=gene934;Name=AC009802.2-002;name2=AC009802.2 chr18 ENCODE exon 59767571 59767614 . + . Parent=gene934 chr18 ENCODE exon 59772622 59772771 . + . Parent=gene934 chr18 ENCODE exon 59778372 59778489 . + . Parent=gene934 chr18 ENCODE exon 59796513 59796690 . + . Parent=gene934 chr18 ENCODE exon 59798015 59798152 . + . Parent=gene934 chr18 ENCODE exon 59799935 59799988 . + . Parent=gene934 ### chr18 ENCODE gene 59778396 59787000 . + . ID=gene935;Name=AC009802.2-003;name2=AC009802.2 chr18 ENCODE exon 59778396 59778489 . + . Parent=gene935 chr18 ENCODE exon 59786552 59787000 . + . Parent=gene935 ### chr18 ENCODE gene 59788139 59807588 . + . ID=gene936;Name=AC009802.3-001;name2=SERPINB8 chr18 ENCODE exon 59788139 59788384 . + . Parent=gene936 chr18 ENCODE exon 59796513 59796690 . + . Parent=gene936 chr18 ENCODE CDS 59796523 59796690 . + 0 Parent=gene936 chr18 ENCODE exon 59798015 59798152 . + . Parent=gene936 chr18 ENCODE CDS 59798015 59798152 . + 0 Parent=gene936 chr18 ENCODE exon 59799935 59800052 . + . Parent=gene936 chr18 ENCODE CDS 59799935 59800052 . + 0 Parent=gene936 chr18 ENCODE exon 59801793 59801935 . + . Parent=gene936 chr18 ENCODE CDS 59801793 59801935 . + 2 Parent=gene936 chr18 ENCODE exon 59803307 59803459 . + . Parent=gene936 chr18 ENCODE CDS 59803307 59803459 . + 0 Parent=gene936 chr18 ENCODE CDS 59805088 59805492 . + 0 Parent=gene936 chr18 ENCODE exon 59805088 59807588 . + . Parent=gene936 ### chr18 ENCODE gene 59788333 59804867 . + . ID=gene937;Name=AC009802.3-002;name2=SERPINB8 chr18 ENCODE exon 59788333 59788384 . + . Parent=gene937 chr18 ENCODE exon 59796513 59796690 . + . Parent=gene937 chr18 ENCODE CDS 59796523 59796690 . + 0 Parent=gene937 chr18 ENCODE exon 59798015 59798152 . + . Parent=gene937 chr18 ENCODE CDS 59798015 59798152 . + 0 Parent=gene937 chr18 ENCODE exon 59799935 59800052 . + . Parent=gene937 chr18 ENCODE CDS 59799935 59800052 . + 0 Parent=gene937 chr18 ENCODE exon 59801793 59801935 . + . Parent=gene937 chr18 ENCODE CDS 59801793 59801935 . + 2 Parent=gene937 chr18 ENCODE exon 59803307 59803459 . + . Parent=gene937 chr18 ENCODE CDS 59803307 59803459 . + 0 Parent=gene937 chr18 ENCODE CDS 59804472 59804480 . + 0 Parent=gene937 chr18 ENCODE exon 59804472 59804867 . + . Parent=gene937 ### chr18 ENCODE gene 59788463 59800000 . + . ID=gene938;Name=AC009802.3-005;name2=SERPINB8 chr18 ENCODE exon 59788463 59788660 . + . Parent=gene938 chr18 ENCODE exon 59796513 59796690 . + . Parent=gene938 chr18 ENCODE CDS 59796523 59796690 . + 0 Parent=gene938 chr18 ENCODE exon 59798015 59798152 . + . Parent=gene938 chr18 ENCODE CDS 59798015 59798152 . + 0 Parent=gene938 chr18 ENCODE exon 59799935 59800000 . + . Parent=gene938 chr18 ENCODE CDS 59799935 59800000 . + 0 Parent=gene938 ### chr18 ENCODE gene 59788719 59801861 . + . ID=gene939;Name=AC009802.3-006;name2=SERPINB8 chr18 ENCODE exon 59788719 59788779 . + . Parent=gene939 chr18 ENCODE exon 59796513 59796690 . + . Parent=gene939 chr18 ENCODE CDS 59796523 59796690 . + 0 Parent=gene939 chr18 ENCODE exon 59798015 59798152 . + . Parent=gene939 chr18 ENCODE CDS 59798015 59798152 . + 0 Parent=gene939 chr18 ENCODE exon 59799935 59800052 . + . Parent=gene939 chr18 ENCODE CDS 59799935 59800052 . + 0 Parent=gene939 chr18 ENCODE exon 59801793 59801861 . + . Parent=gene939 chr18 ENCODE CDS 59801793 59801861 . + 2 Parent=gene939 ### chr18 ENCODE gene 59798022 59805610 . + . ID=gene940;Name=AC009802.3-003;name2=SERPINB8 chr18 ENCODE exon 59798022 59798152 . + . Parent=gene940 chr18 ENCODE CDS 59798022 59798152 . + 0 Parent=gene940 chr18 ENCODE exon 59799935 59800052 . + . Parent=gene940 chr18 ENCODE CDS 59799935 59800052 . + 1 Parent=gene940 chr18 ENCODE exon 59801793 59801935 . + . Parent=gene940 chr18 ENCODE CDS 59801793 59801935 . + 0 Parent=gene940 chr18 ENCODE exon 59803307 59803459 . + . Parent=gene940 chr18 ENCODE CDS 59803307 59803459 . + 1 Parent=gene940 chr18 ENCODE CDS 59805177 59805200 . + 1 Parent=gene940 chr18 ENCODE exon 59805177 59805610 . + . Parent=gene940 ### chr18 ENCODE gene 59803390 59823258 . + . ID=gene941;Name=AC009802.3-004;name2=SERPINB8 chr18 ENCODE exon 59803390 59803459 . + . Parent=gene941 chr18 ENCODE exon 59823033 59823258 . + . Parent=gene941 ### chr19 ENCODE gene 59061289 59069322 . + . ID=gene942;Name=AC008440.4-004;name2=MYADM chr19 ENCODE exon 59061289 59061483 . + . Parent=gene942 chr19 ENCODE exon 59064820 59064904 . + . Parent=gene942 chr19 ENCODE exon 59068594 59069322 . + . Parent=gene942 chr19 ENCODE CDS 59068596 59069322 . + 0 Parent=gene942 ### chr19 ENCODE gene 59062949 59069160 . + . ID=gene943;Name=AC008440.4-005;name2=MYADM chr19 ENCODE exon 59062949 59063009 . + . Parent=gene943 chr19 ENCODE exon 59064756 59064904 . + . Parent=gene943 chr19 ENCODE exon 59068594 59069160 . + . Parent=gene943 chr19 ENCODE CDS 59068596 59069160 . + 0 Parent=gene943 ### chr19 ENCODE gene 59062949 59069373 . + . ID=gene944;Name=AC008440.4-006;name2=MYADM chr19 ENCODE exon 59062949 59063009 . + . Parent=gene944 chr19 ENCODE exon 59068594 59069373 . + . Parent=gene944 chr19 ENCODE CDS 59068596 59069373 . + 0 Parent=gene944 ### chr19 ENCODE gene 59062949 59071503 . + . ID=gene945;name2=MYADM;Name=AC008440.4-001 chr19 ENCODE exon 59062949 59063009 . + . Parent=gene945 chr19 ENCODE exon 59064820 59064904 . + . Parent=gene945 chr19 ENCODE exon 59068594 59071503 . + . Parent=gene945 chr19 ENCODE CDS 59068596 59069564 . + 0 Parent=gene945 ### chr19 ENCODE gene 59064472 59071501 . + . ID=gene946;Name=AC008440.4-002;name2=MYADM chr19 ENCODE exon 59064472 59064664 . + . Parent=gene946 chr19 ENCODE exon 59064820 59064904 . + . Parent=gene946 chr19 ENCODE exon 59068594 59071501 . + . Parent=gene946 chr19 ENCODE CDS 59068596 59069564 . + 0 Parent=gene946 ### chr19 ENCODE gene 59064505 59069685 . + . ID=gene947;Name=AC008440.4-003;name2=MYADM chr19 ENCODE exon 59064505 59064904 . + . Parent=gene947 chr19 ENCODE exon 59068594 59069685 . + . Parent=gene947 chr19 ENCODE CDS 59068596 59069564 . + 0 Parent=gene947 ### chr19 ENCODE gene 59074256 59084996 . + . ID=gene948;Name=AC008440.6-004;name2=PRKCG chr19 ENCODE exon 59074256 59074446 . + . Parent=gene948 chr19 ENCODE exon 59077623 59077730 . + . Parent=gene948 chr19 ENCODE exon 59078229 59078260 . + . Parent=gene948 chr19 ENCODE exon 59079227 59079309 . + . Parent=gene948 chr19 ENCODE exon 59084704 59084815 . + . Parent=gene948 chr19 ENCODE exon 59084952 59084996 . + . Parent=gene948 ### chr19 ENCODE gene 59076850 59086893 . + . ID=gene949;Name=AC008440.6-005;name2=PRKCG chr19 ENCODE exon 59076850 59076906 . + . Parent=gene949 chr19 ENCODE exon 59077623 59077730 . + . Parent=gene949 chr19 ENCODE exon 59078229 59078260 . + . Parent=gene949 chr19 ENCODE exon 59079227 59079309 . + . Parent=gene949 chr19 ENCODE exon 59084704 59084815 . + . Parent=gene949 chr19 ENCODE exon 59084952 59085083 . + . Parent=gene949 chr19 ENCODE exon 59086740 59086893 . + . Parent=gene949 ### chr19 ENCODE gene 59077279 59102718 . + . ID=gene950;Name=AC008440.6-001;name2=PRKCG chr19 ENCODE exon 59077279 59077730 . + . Parent=gene950 chr19 ENCODE CDS 59077561 59077730 . + 0 Parent=gene950 chr19 ENCODE exon 59078229 59078260 . + . Parent=gene950 chr19 ENCODE CDS 59078229 59078260 . + 1 Parent=gene950 chr19 ENCODE exon 59079227 59079309 . + . Parent=gene950 chr19 ENCODE CDS 59079227 59079309 . + 2 Parent=gene950 chr19 ENCODE exon 59084704 59084815 . + . Parent=gene950 chr19 ENCODE CDS 59084704 59084815 . + 0 Parent=gene950 chr19 ENCODE exon 59084952 59085083 . + . Parent=gene950 chr19 ENCODE CDS 59084952 59085083 . + 2 Parent=gene950 chr19 ENCODE exon 59086740 59086896 . + . Parent=gene950 chr19 ENCODE CDS 59086740 59086896 . + 2 Parent=gene950 chr19 ENCODE exon 59087575 59087709 . + . Parent=gene950 chr19 ENCODE CDS 59087575 59087709 . + 1 Parent=gene950 chr19 ENCODE exon 59088054 59088141 . + . Parent=gene950 chr19 ENCODE CDS 59088054 59088141 . + 1 Parent=gene950 chr19 ENCODE exon 59088428 59088457 . + . Parent=gene950 chr19 ENCODE CDS 59088428 59088457 . + 0 Parent=gene950 chr19 ENCODE exon 59093025 59093177 . + . Parent=gene950 chr19 ENCODE CDS 59093025 59093177 . + 0 Parent=gene950 chr19 ENCODE exon 59093506 59093694 . + . Parent=gene950 chr19 ENCODE CDS 59093506 59093694 . + 0 Parent=gene950 chr19 ENCODE exon 59095299 59095390 . + . Parent=gene950 chr19 ENCODE CDS 59095299 59095390 . + 0 Parent=gene950 chr19 ENCODE exon 59095485 59095547 . + . Parent=gene950 chr19 ENCODE CDS 59095485 59095547 . + 1 Parent=gene950 chr19 ENCODE exon 59095677 59095815 . + . Parent=gene950 chr19 ENCODE CDS 59095677 59095815 . + 1 Parent=gene950 chr19 ENCODE exon 59098139 59098219 . + . Parent=gene950 chr19 ENCODE CDS 59098139 59098219 . + 0 Parent=gene950 chr19 ENCODE exon 59099701 59099808 . + . Parent=gene950 chr19 ENCODE CDS 59099701 59099808 . + 0 Parent=gene950 chr19 ENCODE exon 59101383 59101523 . + . Parent=gene950 chr19 ENCODE CDS 59101383 59101523 . + 0 Parent=gene950 chr19 ENCODE CDS 59101773 59101961 . + 0 Parent=gene950 chr19 ENCODE exon 59101773 59102718 . + . Parent=gene950 ### chr19 ENCODE gene 59077295 59085045 . + . ID=gene951;Name=AC008440.6-006;name2=PRKCG chr19 ENCODE exon 59077295 59077425 . + . Parent=gene951 chr19 ENCODE CDS 59077295 59077425 . + 0 Parent=gene951 chr19 ENCODE exon 59077623 59077730 . + . Parent=gene951 chr19 ENCODE CDS 59077623 59077730 . + 1 Parent=gene951 chr19 ENCODE exon 59078229 59078260 . + . Parent=gene951 chr19 ENCODE CDS 59078229 59078260 . + 1 Parent=gene951 chr19 ENCODE exon 59079227 59079309 . + . Parent=gene951 chr19 ENCODE CDS 59079227 59079309 . + 2 Parent=gene951 chr19 ENCODE exon 59084704 59084815 . + . Parent=gene951 chr19 ENCODE CDS 59084704 59084815 . + 0 Parent=gene951 chr19 ENCODE exon 59084952 59085045 . + . Parent=gene951 chr19 ENCODE CDS 59084952 59085045 . + 2 Parent=gene951 ### chr19 ENCODE gene 59077366 59088469 . + . ID=gene952;Name=AC008440.6-002;name2=PRKCG chr19 ENCODE exon 59077366 59077730 . + . Parent=gene952 chr19 ENCODE exon 59078229 59078260 . + . Parent=gene952 chr19 ENCODE exon 59079227 59079309 . + . Parent=gene952 chr19 ENCODE exon 59084704 59084815 . + . Parent=gene952 chr19 ENCODE exon 59084952 59085083 . + . Parent=gene952 chr19 ENCODE exon 59086740 59086896 . + . Parent=gene952 chr19 ENCODE exon 59087575 59087709 . + . Parent=gene952 chr19 ENCODE exon 59088054 59088141 . + . Parent=gene952 chr19 ENCODE exon 59088428 59088469 . + . Parent=gene952 ### chr19 ENCODE gene 59077531 59091127 . + . ID=gene953;Name=AC008440.6-003;name2=PRKCG chr19 ENCODE exon 59077531 59077730 . + . Parent=gene953 chr19 ENCODE exon 59078229 59078260 . + . Parent=gene953 chr19 ENCODE exon 59079227 59079309 . + . Parent=gene953 chr19 ENCODE exon 59084704 59084815 . + . Parent=gene953 chr19 ENCODE exon 59084952 59085083 . + . Parent=gene953 chr19 ENCODE exon 59086740 59087709 . + . Parent=gene953 chr19 ENCODE exon 59088054 59088141 . + . Parent=gene953 chr19 ENCODE exon 59088428 59089165 . + . Parent=gene953 chr19 ENCODE exon 59091089 59091127 . + . Parent=gene953 ### chr19 ENCODE gene 59104401 59136659 . + . ID=gene954;name2=CACNG7;Name=AC008440.7-003 chr19 ENCODE exon 59104401 59104583 . + . Parent=gene954 chr19 ENCODE exon 59110431 59110571 . + . Parent=gene954 chr19 ENCODE exon 59136536 59136659 . + . Parent=gene954 ### chr19 ENCODE gene 59104401 59139007 . + . ID=gene955;Name=AC008440.7-001;name2=CACNG7 chr19 ENCODE exon 59104401 59104583 . + . Parent=gene955 chr19 ENCODE exon 59107869 59108093 . + . Parent=gene955 chr19 ENCODE CDS 59107898 59108093 . + 0 Parent=gene955 chr19 ENCODE exon 59109566 59109652 . + . Parent=gene955 chr19 ENCODE CDS 59109566 59109652 . + 2 Parent=gene955 chr19 ENCODE exon 59110431 59110571 . + . Parent=gene955 chr19 ENCODE CDS 59110431 59110571 . + 2 Parent=gene955 chr19 ENCODE exon 59136536 59136681 . + . Parent=gene955 chr19 ENCODE CDS 59136536 59136681 . + 2 Parent=gene955 chr19 ENCODE CDS 59137102 59137359 . + 0 Parent=gene955 chr19 ENCODE exon 59137102 59139007 . + . Parent=gene955 ### chr19 ENCODE gene 59107883 59136727 . + . ID=gene956;Name=AC008440.7-002;name2=CACNG7 chr19 ENCODE exon 59107883 59108093 . + . Parent=gene956 chr19 ENCODE CDS 59107898 59108093 . + 0 Parent=gene956 chr19 ENCODE exon 59109566 59109652 . + . Parent=gene956 chr19 ENCODE CDS 59109566 59109652 . + 2 Parent=gene956 chr19 ENCODE exon 59110431 59110571 . + . Parent=gene956 chr19 ENCODE CDS 59110431 59110571 . + 2 Parent=gene956 chr19 ENCODE CDS 59136536 59136708 . + 2 Parent=gene956 chr19 ENCODE exon 59136536 59136727 . + . Parent=gene956 ### chr19 ENCODE gene 59158106 59185281 . + . ID=gene957;Name=AC008440.8-001;name2=CACNG8 chr19 ENCODE exon 59158106 59158491 . + . Parent=gene957 chr19 ENCODE CDS 59158209 59158491 . + 0 Parent=gene957 chr19 ENCODE exon 59173212 59173295 . + . Parent=gene957 chr19 ENCODE CDS 59173212 59173295 . + 2 Parent=gene957 chr19 ENCODE exon 59174933 59175073 . + . Parent=gene957 chr19 ENCODE CDS 59174933 59175073 . + 2 Parent=gene957 chr19 ENCODE CDS 59177146 59177915 . + 2 Parent=gene957 chr19 ENCODE exon 59177146 59185281 . + . Parent=gene957 ### chr19 ENCODE gene 59187354 59207735 . + . ID=gene958;Name=AC008440.9-001;name2=CACNG6 chr19 ENCODE exon 59187354 59188274 . + . Parent=gene958 chr19 ENCODE CDS 59187944 59188274 . + 0 Parent=gene958 chr19 ENCODE exon 59193305 59193379 . + . Parent=gene958 chr19 ENCODE CDS 59193305 59193379 . + 2 Parent=gene958 chr19 ENCODE exon 59194700 59194837 . + . Parent=gene958 chr19 ENCODE CDS 59194700 59194837 . + 2 Parent=gene958 chr19 ENCODE CDS 59207017 59207255 . + 2 Parent=gene958 chr19 ENCODE exon 59207017 59207735 . + . Parent=gene958 ### chr19 ENCODE gene 59187944 59207255 . + . ID=gene959;Name=AC008440.9-002;name2=CACNG6 chr19 ENCODE exon 59187944 59188274 . + . Parent=gene959 chr19 ENCODE CDS 59187944 59188274 . + 0 Parent=gene959 chr19 ENCODE exon 59193305 59193379 . + . Parent=gene959 chr19 ENCODE CDS 59193305 59193379 . + 2 Parent=gene959 chr19 ENCODE exon 59207017 59207255 . + . Parent=gene959 chr19 ENCODE CDS 59207017 59207255 . + 2 Parent=gene959 ### chr19 ENCODE gene 59235891 59253489 . - . ID=gene960;name2=VSTM1;Name=AC012314.1-003 chr19 ENCODE exon 59235891 59236146 . - . Parent=gene960 chr19 ENCODE CDS 59236027 59236146 . - 0 Parent=gene960 chr19 ENCODE exon 59236845 59236882 . - . Parent=gene960 chr19 ENCODE CDS 59236845 59236882 . - 2 Parent=gene960 chr19 ENCODE exon 59236982 59237019 . - . Parent=gene960 chr19 ENCODE CDS 59236982 59237019 . - 1 Parent=gene960 chr19 ENCODE exon 59237235 59237262 . - . Parent=gene960 chr19 ENCODE CDS 59237235 59237262 . - 2 Parent=gene960 chr19 ENCODE exon 59246476 59246514 . - . Parent=gene960 chr19 ENCODE CDS 59246476 59246514 . - 2 Parent=gene960 chr19 ENCODE exon 59253372 59253489 . - . Parent=gene960 chr19 ENCODE CDS 59253372 59253489 . - 0 Parent=gene960 ### chr19 ENCODE gene 59235891 59259019 . - . ID=gene961;Name=AC012314.1-001;name2=VSTM1 chr19 ENCODE exon 59235891 59236146 . - . Parent=gene961 chr19 ENCODE CDS 59236027 59236146 . - 0 Parent=gene961 chr19 ENCODE exon 59236845 59236882 . - . Parent=gene961 chr19 ENCODE CDS 59236845 59236882 . - 2 Parent=gene961 chr19 ENCODE exon 59236982 59237019 . - . Parent=gene961 chr19 ENCODE CDS 59236982 59237019 . - 1 Parent=gene961 chr19 ENCODE exon 59237235 59237262 . - . Parent=gene961 chr19 ENCODE CDS 59237235 59237262 . - 2 Parent=gene961 chr19 ENCODE exon 59237343 59237435 . - . Parent=gene961 chr19 ENCODE CDS 59237343 59237435 . - 2 Parent=gene961 chr19 ENCODE exon 59246476 59246514 . - . Parent=gene961 chr19 ENCODE CDS 59246476 59246514 . - 2 Parent=gene961 chr19 ENCODE exon 59253372 59253656 . - . Parent=gene961 chr19 ENCODE CDS 59253372 59253656 . - 2 Parent=gene961 chr19 ENCODE exon 59253763 59253798 . - . Parent=gene961 chr19 ENCODE CDS 59253763 59253798 . - 2 Parent=gene961 chr19 ENCODE CDS 59258810 59258843 . - 0 Parent=gene961 chr19 ENCODE exon 59258810 59259019 . - . Parent=gene961 ### chr19 ENCODE gene 59235895 59259019 . - . ID=gene962;Name=AC012314.1-002;name2=VSTM1 chr19 ENCODE exon 59235895 59236146 . - . Parent=gene962 chr19 ENCODE exon 59236845 59236882 . - . Parent=gene962 chr19 ENCODE exon 59236982 59237019 . - . Parent=gene962 chr19 ENCODE exon 59237293 59237435 . - . Parent=gene962 chr19 ENCODE exon 59246476 59246514 . - . Parent=gene962 chr19 ENCODE exon 59253372 59253656 . - . Parent=gene962 chr19 ENCODE exon 59253763 59253798 . - . Parent=gene962 chr19 ENCODE exon 59258810 59259019 . - . Parent=gene962 ### chr19 ENCODE gene 59289745 59295895 . - . ID=gene963;Name=AC012314.3-008;name2=OSCAR chr19 ENCODE exon 59289745 59291230 . - . Parent=gene963 chr19 ENCODE CDS 59290755 59291230 . - 2 Parent=gene963 chr19 ENCODE exon 59291961 59292263 . - . Parent=gene963 chr19 ENCODE CDS 59291961 59292263 . - 2 Parent=gene963 chr19 ENCODE exon 59295859 59295895 . - . Parent=gene963 chr19 ENCODE CDS 59295859 59295895 . - 0 Parent=gene963 ### chr19 ENCODE gene 59289747 59295895 . - . ID=gene964;Name=AC012314.3-005;name2=OSCAR chr19 ENCODE exon 59289747 59290434 . - . Parent=gene964 chr19 ENCODE CDS 59290298 59290434 . - 2 Parent=gene964 chr19 ENCODE exon 59290949 59291230 . - . Parent=gene964 chr19 ENCODE CDS 59290949 59291230 . - 2 Parent=gene964 chr19 ENCODE exon 59291961 59292263 . - . Parent=gene964 chr19 ENCODE CDS 59291961 59292263 . - 2 Parent=gene964 chr19 ENCODE exon 59294693 59294704 . - . Parent=gene964 chr19 ENCODE CDS 59294693 59294704 . - 2 Parent=gene964 chr19 ENCODE exon 59294851 59294883 . - . Parent=gene964 chr19 ENCODE CDS 59294851 59294883 . - 2 Parent=gene964 chr19 ENCODE exon 59295859 59295895 . - . Parent=gene964 chr19 ENCODE CDS 59295859 59295895 . - 0 Parent=gene964 ### chr19 ENCODE gene 59289747 59295904 . - . ID=gene965;Name=AC012314.3-003;name2=OSCAR chr19 ENCODE exon 59289747 59291202 . - . Parent=gene965 chr19 ENCODE exon 59291221 59291230 . - . Parent=gene965 chr19 ENCODE exon 59291961 59292263 . - . Parent=gene965 chr19 ENCODE exon 59294851 59294883 . - . Parent=gene965 chr19 ENCODE exon 59295859 59295904 . - . Parent=gene965 ### chr19 ENCODE gene 59289747 59295918 . - . ID=gene966;Name=AC012314.3-002;name2=OSCAR chr19 ENCODE exon 59289747 59291230 . - . Parent=gene966 chr19 ENCODE CDS 59290755 59291230 . - 2 Parent=gene966 chr19 ENCODE exon 59291961 59292263 . - . Parent=gene966 chr19 ENCODE CDS 59291961 59292263 . - 2 Parent=gene966 chr19 ENCODE exon 59294693 59294704 . - . Parent=gene966 chr19 ENCODE CDS 59294693 59294704 . - 2 Parent=gene966 chr19 ENCODE exon 59294851 59294883 . - . Parent=gene966 chr19 ENCODE CDS 59294851 59294883 . - 2 Parent=gene966 chr19 ENCODE CDS 59295859 59295895 . - 0 Parent=gene966 chr19 ENCODE exon 59295859 59295918 . - . Parent=gene966 ### chr19 ENCODE gene 59289747 59295941 . - . ID=gene967;Name=AC012314.3-004;name2=OSCAR chr19 ENCODE exon 59289747 59290434 . - . Parent=gene967 chr19 ENCODE CDS 59290298 59290434 . - 2 Parent=gene967 chr19 ENCODE exon 59290949 59291230 . - . Parent=gene967 chr19 ENCODE CDS 59290949 59291230 . - 2 Parent=gene967 chr19 ENCODE exon 59291961 59292263 . - . Parent=gene967 chr19 ENCODE CDS 59291961 59292263 . - 2 Parent=gene967 chr19 ENCODE exon 59294851 59294883 . - . Parent=gene967 chr19 ENCODE CDS 59294851 59294883 . - 2 Parent=gene967 chr19 ENCODE CDS 59295859 59295895 . - 0 Parent=gene967 chr19 ENCODE exon 59295859 59295941 . - . Parent=gene967 ### chr19 ENCODE gene 59289747 59295960 . - . ID=gene968;name2=OSCAR;Name=AC012314.3-006 chr19 ENCODE exon 59289747 59290434 . - . Parent=gene968 chr19 ENCODE CDS 59290298 59290434 . - 2 Parent=gene968 chr19 ENCODE exon 59290949 59291230 . - . Parent=gene968 chr19 ENCODE CDS 59290949 59291230 . - 2 Parent=gene968 chr19 ENCODE exon 59291961 59292263 . - . Parent=gene968 chr19 ENCODE CDS 59291961 59292263 . - 2 Parent=gene968 chr19 ENCODE CDS 59295859 59295895 . - 0 Parent=gene968 chr19 ENCODE exon 59295859 59295960 . - . Parent=gene968 ### chr19 ENCODE gene 59289747 59297812 . - . ID=gene969;Name=AC012314.3-001;name2=OSCAR chr19 ENCODE exon 59289747 59291230 . - . Parent=gene969 chr19 ENCODE CDS 59290755 59291230 . - 2 Parent=gene969 chr19 ENCODE exon 59291961 59292263 . - . Parent=gene969 chr19 ENCODE CDS 59291961 59292263 . - 2 Parent=gene969 chr19 ENCODE exon 59294851 59294883 . - . Parent=gene969 chr19 ENCODE CDS 59294851 59294883 . - 2 Parent=gene969 chr19 ENCODE CDS 59295859 59295895 . - 0 Parent=gene969 chr19 ENCODE exon 59295859 59296054 . - . Parent=gene969 chr19 ENCODE exon 59297774 59297812 . - . Parent=gene969 ### chr19 ENCODE gene 59290851 59295944 . - . ID=gene970;Name=AC012314.3-007;name2=OSCAR chr19 ENCODE exon 59290851 59291230 . - . Parent=gene970 chr19 ENCODE CDS 59290945 59291230 . - 1 Parent=gene970 chr19 ENCODE exon 59291961 59292090 . - . Parent=gene970 chr19 ENCODE CDS 59291961 59292090 . - 2 Parent=gene970 chr19 ENCODE exon 59294851 59294883 . - . Parent=gene970 chr19 ENCODE CDS 59294851 59294883 . - 2 Parent=gene970 chr19 ENCODE CDS 59295859 59295895 . - 0 Parent=gene970 chr19 ENCODE exon 59295859 59295944 . - . Parent=gene970 ### chr19 ENCODE gene 59297848 59302080 . + . ID=gene971;Name=AC012314.4-003;name2=NDUFA3 chr19 ENCODE exon 59297848 59298008 . + . Parent=gene971 chr19 ENCODE exon 59298234 59298308 . + . Parent=gene971 chr19 ENCODE exon 59300716 59300822 . + . Parent=gene971 chr19 ENCODE exon 59301053 59301130 . + . Parent=gene971 chr19 ENCODE exon 59301472 59301565 . + . Parent=gene971 chr19 ENCODE exon 59301930 59302080 . + . Parent=gene971 ### chr19 ENCODE gene 59297941 59303823 . + . ID=gene972;Name=AC012314.4-010;name2=NDUFA3 chr19 ENCODE exon 59297941 59298008 . + . Parent=gene972 chr19 ENCODE exon 59298234 59298308 . + . Parent=gene972 chr19 ENCODE exon 59301053 59301130 . + . Parent=gene972 chr19 ENCODE exon 59301930 59302097 . + . Parent=gene972 chr19 ENCODE exon 59303559 59303823 . + . Parent=gene972 ### chr19 ENCODE gene 59297957 59302687 . + . ID=gene973;Name=AC012314.4-001;name2=NDUFA3 chr19 ENCODE exon 59297957 59298008 . + . Parent=gene973 chr19 ENCODE CDS 59297999 59298008 . + 0 Parent=gene973 chr19 ENCODE exon 59298234 59298308 . + . Parent=gene973 chr19 ENCODE CDS 59298234 59298308 . + 2 Parent=gene973 chr19 ENCODE exon 59301053 59301130 . + . Parent=gene973 chr19 ENCODE CDS 59301053 59301130 . + 2 Parent=gene973 chr19 ENCODE CDS 59301930 59302021 . + 2 Parent=gene973 chr19 ENCODE exon 59301930 59302687 . + . Parent=gene973 ### chr19 ENCODE gene 59297972 59302080 . + . ID=gene974;Name=AC012314.4-004;name2=NDUFA3 chr19 ENCODE exon 59297972 59298008 . + . Parent=gene974 chr19 ENCODE CDS 59297999 59298008 . + 0 Parent=gene974 chr19 ENCODE exon 59298234 59298308 . + . Parent=gene974 chr19 ENCODE CDS 59298234 59298308 . + 2 Parent=gene974 chr19 ENCODE exon 59301053 59301130 . + . Parent=gene974 chr19 ENCODE CDS 59301053 59301130 . + 2 Parent=gene974 chr19 ENCODE CDS 59301472 59301527 . + 2 Parent=gene974 chr19 ENCODE exon 59301472 59301565 . + . Parent=gene974 chr19 ENCODE exon 59301930 59302080 . + . Parent=gene974 ### chr19 ENCODE gene 59297975 59301589 . + . ID=gene975;Name=AC012314.4-007;name2=NDUFA3 chr19 ENCODE exon 59297975 59298008 . + . Parent=gene975 chr19 ENCODE exon 59298234 59298308 . + . Parent=gene975 chr19 ENCODE exon 59301053 59301589 . + . Parent=gene975 ### chr19 ENCODE gene 59297975 59302080 . + . ID=gene976;name2=NDUFA3;Name=AC012314.4-002 chr19 ENCODE exon 59297975 59298008 . + . Parent=gene976 chr19 ENCODE exon 59298234 59298308 . + . Parent=gene976 chr19 ENCODE exon 59300716 59300822 . + . Parent=gene976 chr19 ENCODE exon 59301053 59301130 . + . Parent=gene976 chr19 ENCODE exon 59301930 59302080 . + . Parent=gene976 ### chr19 ENCODE gene 59297989 59302084 . + . ID=gene977;Name=AC012314.4-005;name2=NDUFA3 chr19 ENCODE exon 59297989 59298018 . + . Parent=gene977 chr19 ENCODE CDS 59297999 59298018 . + 0 Parent=gene977 chr19 ENCODE exon 59298234 59298308 . + . Parent=gene977 chr19 ENCODE CDS 59298234 59298308 . + 1 Parent=gene977 chr19 ENCODE exon 59301053 59301130 . + . Parent=gene977 chr19 ENCODE CDS 59301053 59301130 . + 1 Parent=gene977 chr19 ENCODE CDS 59301930 59301942 . + 1 Parent=gene977 chr19 ENCODE exon 59301930 59302084 . + . Parent=gene977 ### chr19 ENCODE gene 59297989 59303652 . + . ID=gene978;Name=AC012314.4-011;name2=NDUFA3 chr19 ENCODE exon 59297989 59298008 . + . Parent=gene978 chr19 ENCODE CDS 59297999 59298008 . + 0 Parent=gene978 chr19 ENCODE exon 59298234 59298308 . + . Parent=gene978 chr19 ENCODE CDS 59298234 59298308 . + 2 Parent=gene978 chr19 ENCODE exon 59301053 59301130 . + . Parent=gene978 chr19 ENCODE CDS 59301053 59301130 . + 2 Parent=gene978 chr19 ENCODE CDS 59303559 59303641 . + 2 Parent=gene978 chr19 ENCODE exon 59303559 59303652 . + . Parent=gene978 ### chr19 ENCODE gene 59298005 59302080 . + . ID=gene979;Name=AC012314.4-006;name2=NDUFA3 chr19 ENCODE exon 59298005 59298079 . + . Parent=gene979 chr19 ENCODE exon 59298234 59298308 . + . Parent=gene979 chr19 ENCODE exon 59301053 59301130 . + . Parent=gene979 chr19 ENCODE exon 59301930 59302080 . + . Parent=gene979 ### chr19 ENCODE gene 59298234 59303846 . + . ID=gene980;Name=AC012314.4-009;name2=NDUFA3 chr19 ENCODE exon 59298234 59298308 . + . Parent=gene980 chr19 ENCODE exon 59301053 59301130 . + . Parent=gene980 chr19 ENCODE exon 59301472 59301565 . + . Parent=gene980 chr19 ENCODE exon 59301930 59302089 . + . Parent=gene980 chr19 ENCODE exon 59303559 59303846 . + . Parent=gene980 ### chr19 ENCODE gene 59301084 59302080 . + . ID=gene981;Name=AC012314.4-008;name2=NDUFA3 chr19 ENCODE exon 59301084 59301130 . + . Parent=gene981 chr19 ENCODE exon 59301472 59301565 . + . Parent=gene981 chr19 ENCODE exon 59301883 59302080 . + . Parent=gene981 ### chr19 ENCODE gene 59302082 59306710 . + . ID=gene982;Name=AC012314.4-012;name2=NDUFA3 chr19 ENCODE exon 59302082 59302137 . + . Parent=gene982 chr19 ENCODE exon 59303559 59303845 . + . Parent=gene982 chr19 ENCODE exon 59303947 59304001 . + . Parent=gene982 chr19 ENCODE exon 59306490 59306710 . + . Parent=gene982 ### chr19 ENCODE gene 59302132 59310867 . - . ID=gene983;Name=AC012314.5-003;name2=TFPT chr19 ENCODE exon 59302132 59302288 . - . Parent=gene983 chr19 ENCODE CDS 59302169 59302288 . - 0 Parent=gene983 chr19 ENCODE exon 59303145 59303363 . - . Parent=gene983 chr19 ENCODE CDS 59303145 59303363 . - 0 Parent=gene983 chr19 ENCODE exon 59303445 59303514 . - . Parent=gene983 chr19 ENCODE CDS 59303445 59303514 . - 1 Parent=gene983 chr19 ENCODE exon 59305246 59305316 . - . Parent=gene983 chr19 ENCODE CDS 59305246 59305316 . - 0 Parent=gene983 chr19 ENCODE exon 59309634 59309892 . - . Parent=gene983 chr19 ENCODE CDS 59309634 59309892 . - 1 Parent=gene983 chr19 ENCODE CDS 59310439 59310461 . - 0 Parent=gene983 chr19 ENCODE exon 59310439 59310867 . - . Parent=gene983 ### chr19 ENCODE gene 59302139 59310266 . - . ID=gene984;Name=AC012314.5-002;name2=TFPT chr19 ENCODE exon 59302139 59302288 . - . Parent=gene984 chr19 ENCODE CDS 59302169 59302288 . - 0 Parent=gene984 chr19 ENCODE exon 59303145 59303363 . - . Parent=gene984 chr19 ENCODE CDS 59303145 59303363 . - 0 Parent=gene984 chr19 ENCODE exon 59303445 59303514 . - . Parent=gene984 chr19 ENCODE CDS 59303445 59303514 . - 1 Parent=gene984 chr19 ENCODE exon 59305246 59305316 . - . Parent=gene984 chr19 ENCODE CDS 59305246 59305316 . - 0 Parent=gene984 chr19 ENCODE CDS 59309634 59309888 . - 0 Parent=gene984 chr19 ENCODE exon 59309634 59309892 . - . Parent=gene984 chr19 ENCODE exon 59310232 59310266 . - . Parent=gene984 ### chr19 ENCODE gene 59302139 59310480 . - . ID=gene985;Name=AC012314.5-005;name2=TFPT chr19 ENCODE exon 59302139 59302288 . - . Parent=gene985 chr19 ENCODE exon 59303145 59303326 . - . Parent=gene985 chr19 ENCODE CDS 59303168 59303326 . - 0 Parent=gene985 chr19 ENCODE exon 59303445 59303514 . - . Parent=gene985 chr19 ENCODE CDS 59303445 59303514 . - 1 Parent=gene985 chr19 ENCODE exon 59305246 59305316 . - . Parent=gene985 chr19 ENCODE CDS 59305246 59305316 . - 0 Parent=gene985 chr19 ENCODE exon 59309634 59309892 . - . Parent=gene985 chr19 ENCODE CDS 59309634 59309892 . - 1 Parent=gene985 chr19 ENCODE CDS 59310439 59310461 . - 0 Parent=gene985 chr19 ENCODE exon 59310439 59310480 . - . Parent=gene985 ### chr19 ENCODE gene 59302139 59310625 . - . ID=gene986;Name=AC012314.5-004;name2=TFPT chr19 ENCODE exon 59302139 59302288 . - . Parent=gene986 chr19 ENCODE exon 59303145 59303182 . - . Parent=gene986 chr19 ENCODE exon 59303356 59303363 . - . Parent=gene986 chr19 ENCODE exon 59303445 59303514 . - . Parent=gene986 chr19 ENCODE exon 59305246 59305316 . - . Parent=gene986 chr19 ENCODE exon 59309634 59309892 . - . Parent=gene986 chr19 ENCODE exon 59310439 59310625 . - . Parent=gene986 ### chr19 ENCODE gene 59302142 59310848 . - . ID=gene987;Name=AC012314.5-001;name2=TFPT chr19 ENCODE exon 59302142 59302288 . - . Parent=gene987 chr19 ENCODE exon 59303145 59303363 . - . Parent=gene987 chr19 ENCODE exon 59303445 59303514 . - . Parent=gene987 chr19 ENCODE exon 59305246 59305316 . - . Parent=gene987 chr19 ENCODE exon 59309634 59309892 . - . Parent=gene987 chr19 ENCODE exon 59310439 59310597 . - . Parent=gene987 chr19 ENCODE exon 59310705 59310848 . - . Parent=gene987 ### chr19 ENCODE gene 59303666 59304048 . + . ID=gene988;Name=AC012314.4-013;name2=NDUFA3 chr19 ENCODE exon 59303666 59303845 . + . Parent=gene988 chr19 ENCODE exon 59303947 59304048 . + . Parent=gene988 ### chr19 ENCODE gene 59303823 59304376 . + . ID=gene989;Name=AC012314.4-014;name2=NDUFA3 chr19 ENCODE exon 59303823 59303845 . + . Parent=gene989 chr19 ENCODE exon 59303947 59304013 . + . Parent=gene989 chr19 ENCODE exon 59304201 59304376 . + . Parent=gene989 ### chr19 ENCODE gene 59310649 59326952 . + . ID=gene990;Name=AC012314.7-001;name2=PRPF31 chr19 ENCODE exon 59310649 59310989 . + . Parent=gene990 chr19 ENCODE exon 59313463 59313647 . + . Parent=gene990 chr19 ENCODE CDS 59313471 59313647 . + 0 Parent=gene990 chr19 ENCODE exon 59313765 59313825 . + . Parent=gene990 chr19 ENCODE CDS 59313765 59313825 . + 0 Parent=gene990 chr19 ENCODE exon 59317051 59317134 . + . Parent=gene990 chr19 ENCODE CDS 59317051 59317134 . + 2 Parent=gene990 chr19 ENCODE exon 59317688 59317785 . + . Parent=gene990 chr19 ENCODE CDS 59317688 59317785 . + 2 Parent=gene990 chr19 ENCODE exon 59318645 59318751 . + . Parent=gene990 chr19 ENCODE CDS 59318645 59318751 . + 0 Parent=gene990 chr19 ENCODE exon 59318940 59319109 . + . Parent=gene990 chr19 ENCODE CDS 59318940 59319109 . + 1 Parent=gene990 chr19 ENCODE exon 59319690 59319847 . + . Parent=gene990 chr19 ENCODE CDS 59319690 59319847 . + 2 Parent=gene990 chr19 ENCODE exon 59321715 59321804 . + . Parent=gene990 chr19 ENCODE CDS 59321715 59321804 . + 0 Parent=gene990 chr19 ENCODE exon 59323260 59323387 . + . Parent=gene990 chr19 ENCODE CDS 59323260 59323387 . + 0 Parent=gene990 chr19 ENCODE exon 59323492 59323564 . + . Parent=gene990 chr19 ENCODE CDS 59323492 59323564 . + 1 Parent=gene990 chr19 ENCODE exon 59324244 59324372 . + . Parent=gene990 chr19 ENCODE CDS 59324244 59324372 . + 0 Parent=gene990 chr19 ENCODE exon 59324459 59324557 . + . Parent=gene990 chr19 ENCODE CDS 59324459 59324557 . + 0 Parent=gene990 chr19 ENCODE CDS 59326550 59326675 . + 0 Parent=gene990 chr19 ENCODE exon 59326550 59326952 . + . Parent=gene990 ### chr19 ENCODE gene 59310946 59319845 . + . ID=gene991;Name=AC012314.7-005;name2=PRPF31 chr19 ENCODE exon 59310946 59310989 . + . Parent=gene991 chr19 ENCODE exon 59313440 59313647 . + . Parent=gene991 chr19 ENCODE CDS 59313471 59313647 . + 0 Parent=gene991 chr19 ENCODE exon 59313765 59313825 . + . Parent=gene991 chr19 ENCODE CDS 59313765 59313825 . + 0 Parent=gene991 chr19 ENCODE exon 59317051 59317134 . + . Parent=gene991 chr19 ENCODE CDS 59317051 59317134 . + 2 Parent=gene991 chr19 ENCODE exon 59317688 59317785 . + . Parent=gene991 chr19 ENCODE CDS 59317688 59317785 . + 2 Parent=gene991 chr19 ENCODE exon 59318645 59318751 . + . Parent=gene991 chr19 ENCODE CDS 59318645 59318751 . + 0 Parent=gene991 chr19 ENCODE exon 59318940 59319109 . + . Parent=gene991 chr19 ENCODE CDS 59318940 59319109 . + 1 Parent=gene991 chr19 ENCODE exon 59319690 59319845 . + . Parent=gene991 chr19 ENCODE CDS 59319690 59319845 . + 2 Parent=gene991 ### chr19 ENCODE gene 59310963 59326955 . + . ID=gene992;Name=AC012314.7-002;name2=PRPF31 chr19 ENCODE exon 59310963 59310989 . + . Parent=gene992 chr19 ENCODE exon 59313463 59313647 . + . Parent=gene992 chr19 ENCODE CDS 59313471 59313647 . + 0 Parent=gene992 chr19 ENCODE exon 59313765 59313825 . + . Parent=gene992 chr19 ENCODE CDS 59313765 59313825 . + 0 Parent=gene992 chr19 ENCODE exon 59317051 59317134 . + . Parent=gene992 chr19 ENCODE CDS 59317051 59317134 . + 2 Parent=gene992 chr19 ENCODE exon 59317688 59317785 . + . Parent=gene992 chr19 ENCODE CDS 59317688 59317785 . + 2 Parent=gene992 chr19 ENCODE exon 59318645 59318751 . + . Parent=gene992 chr19 ENCODE CDS 59318645 59318751 . + 0 Parent=gene992 chr19 ENCODE exon 59318940 59319109 . + . Parent=gene992 chr19 ENCODE CDS 59318940 59319109 . + 1 Parent=gene992 chr19 ENCODE exon 59319690 59319847 . + . Parent=gene992 chr19 ENCODE CDS 59319690 59319847 . + 2 Parent=gene992 chr19 ENCODE exon 59321715 59321804 . + . Parent=gene992 chr19 ENCODE CDS 59321715 59321804 . + 0 Parent=gene992 chr19 ENCODE exon 59323260 59323303 . + . Parent=gene992 chr19 ENCODE CDS 59323260 59323303 . + 0 Parent=gene992 chr19 ENCODE CDS 59326574 59326679 . + 1 Parent=gene992 chr19 ENCODE exon 59326574 59326955 . + . Parent=gene992 ### chr19 ENCODE gene 59310967 59326834 . + . ID=gene993;Name=AC012314.7-007;name2=PRPF31 chr19 ENCODE exon 59310967 59310989 . + . Parent=gene993 chr19 ENCODE exon 59313463 59313551 . + . Parent=gene993 chr19 ENCODE exon 59324250 59324372 . + . Parent=gene993 chr19 ENCODE exon 59324459 59324557 . + . Parent=gene993 chr19 ENCODE exon 59326550 59326834 . + . Parent=gene993 ### chr19 ENCODE gene 59310971 59319821 . + . ID=gene994;Name=AC012314.7-006;name2=PRPF31 chr19 ENCODE exon 59310971 59310989 . + . Parent=gene994 chr19 ENCODE exon 59313433 59313647 . + . Parent=gene994 chr19 ENCODE CDS 59313471 59313647 . + 0 Parent=gene994 chr19 ENCODE exon 59313765 59313825 . + . Parent=gene994 chr19 ENCODE CDS 59313765 59313825 . + 0 Parent=gene994 chr19 ENCODE exon 59317051 59317134 . + . Parent=gene994 chr19 ENCODE CDS 59317051 59317134 . + 2 Parent=gene994 chr19 ENCODE exon 59317688 59317785 . + . Parent=gene994 chr19 ENCODE CDS 59317688 59317785 . + 2 Parent=gene994 chr19 ENCODE exon 59318645 59318751 . + . Parent=gene994 chr19 ENCODE CDS 59318645 59318751 . + 0 Parent=gene994 chr19 ENCODE exon 59318940 59319109 . + . Parent=gene994 chr19 ENCODE CDS 59318940 59319109 . + 1 Parent=gene994 chr19 ENCODE exon 59319690 59319821 . + . Parent=gene994 chr19 ENCODE CDS 59319690 59319821 . + 2 Parent=gene994 ### chr19 ENCODE gene 59311001 59319774 . + . ID=gene995;name2=PRPF31;Name=AC012314.7-009 chr19 ENCODE exon 59311001 59311064 . + . Parent=gene995 chr19 ENCODE exon 59313463 59313647 . + . Parent=gene995 chr19 ENCODE CDS 59313471 59313647 . + 0 Parent=gene995 chr19 ENCODE exon 59313765 59313825 . + . Parent=gene995 chr19 ENCODE CDS 59313765 59313825 . + 0 Parent=gene995 chr19 ENCODE exon 59317051 59317134 . + . Parent=gene995 chr19 ENCODE CDS 59317051 59317134 . + 2 Parent=gene995 chr19 ENCODE exon 59317688 59317785 . + . Parent=gene995 chr19 ENCODE CDS 59317688 59317785 . + 2 Parent=gene995 chr19 ENCODE exon 59318645 59318751 . + . Parent=gene995 chr19 ENCODE CDS 59318645 59318751 . + 0 Parent=gene995 chr19 ENCODE exon 59318940 59319109 . + . Parent=gene995 chr19 ENCODE CDS 59318940 59319109 . + 1 Parent=gene995 chr19 ENCODE exon 59319690 59319774 . + . Parent=gene995 chr19 ENCODE CDS 59319690 59319774 . + 2 Parent=gene995 ### chr19 ENCODE gene 59313463 59326952 . + . ID=gene996;Name=AC012314.7-003;name2=PRPF31 chr19 ENCODE exon 59313463 59313647 . + . Parent=gene996 chr19 ENCODE CDS 59313471 59313647 . + 0 Parent=gene996 chr19 ENCODE exon 59313765 59313825 . + . Parent=gene996 chr19 ENCODE CDS 59313765 59313825 . + 0 Parent=gene996 chr19 ENCODE exon 59317051 59317134 . + . Parent=gene996 chr19 ENCODE CDS 59317051 59317134 . + 2 Parent=gene996 chr19 ENCODE exon 59317688 59317785 . + . Parent=gene996 chr19 ENCODE CDS 59317688 59317785 . + 2 Parent=gene996 chr19 ENCODE exon 59318645 59318751 . + . Parent=gene996 chr19 ENCODE CDS 59318645 59318751 . + 0 Parent=gene996 chr19 ENCODE exon 59318940 59319109 . + . Parent=gene996 chr19 ENCODE CDS 59318940 59319109 . + 1 Parent=gene996 chr19 ENCODE exon 59319690 59319847 . + . Parent=gene996 chr19 ENCODE CDS 59319690 59319847 . + 2 Parent=gene996 chr19 ENCODE exon 59321715 59321804 . + . Parent=gene996 chr19 ENCODE CDS 59321715 59321804 . + 0 Parent=gene996 chr19 ENCODE exon 59323278 59323387 . + . Parent=gene996 chr19 ENCODE CDS 59323278 59323387 . + 0 Parent=gene996 chr19 ENCODE exon 59323492 59323564 . + . Parent=gene996 chr19 ENCODE CDS 59323492 59323564 . + 1 Parent=gene996 chr19 ENCODE exon 59324244 59324372 . + . Parent=gene996 chr19 ENCODE CDS 59324244 59324372 . + 0 Parent=gene996 chr19 ENCODE exon 59324459 59324557 . + . Parent=gene996 chr19 ENCODE CDS 59324459 59324557 . + 0 Parent=gene996 chr19 ENCODE CDS 59326550 59326675 . + 0 Parent=gene996 chr19 ENCODE exon 59326550 59326952 . + . Parent=gene996 ### chr19 ENCODE gene 59313598 59314003 . + . ID=gene997;Name=AC012314.7-010;name2=PRPF31 chr19 ENCODE exon 59313598 59313647 . + . Parent=gene997 chr19 ENCODE exon 59313765 59314003 . + . Parent=gene997 ### chr19 ENCODE gene 59313601 59326952 . + . ID=gene998;Name=AC012314.7-004;name2=PRPF31 chr19 ENCODE exon 59313601 59313647 . + . Parent=gene998 chr19 ENCODE exon 59313765 59313825 . + . Parent=gene998 chr19 ENCODE exon 59317051 59317134 . + . Parent=gene998 chr19 ENCODE exon 59317688 59317785 . + . Parent=gene998 chr19 ENCODE exon 59318645 59318751 . + . Parent=gene998 chr19 ENCODE exon 59318940 59319109 . + . Parent=gene998 chr19 ENCODE exon 59319690 59319847 . + . Parent=gene998 chr19 ENCODE exon 59321715 59321804 . + . Parent=gene998 chr19 ENCODE exon 59323260 59323564 . + . Parent=gene998 chr19 ENCODE exon 59324244 59324557 . + . Parent=gene998 chr19 ENCODE exon 59326550 59326952 . + . Parent=gene998 ### chr19 ENCODE gene 59313805 59323384 . + . ID=gene999;Name=AC012314.7-008;name2=PRPF31 chr19 ENCODE exon 59313805 59313825 . + . Parent=gene999 chr19 ENCODE exon 59317051 59317134 . + . Parent=gene999 chr19 ENCODE exon 59317688 59317785 . + . Parent=gene999 chr19 ENCODE exon 59318645 59318751 . + . Parent=gene999 chr19 ENCODE exon 59318940 59319109 . + . Parent=gene999 chr19 ENCODE exon 59319690 59319847 . + . Parent=gene999 chr19 ENCODE exon 59321687 59321804 . + . Parent=gene999 chr19 ENCODE exon 59323260 59323384 . + . Parent=gene999 ### chr19 ENCODE gene 59324792 59326952 . + . ID=gene1000;Name=AC012314.7-011;name2=PRPF31 chr19 ENCODE exon 59324792 59325284 . + . Parent=gene1000 chr19 ENCODE exon 59325341 59326952 . + . Parent=gene1000 ### chr19 ENCODE gene 59333256 59351231 . + . ID=gene1001;Name=AC012314.9-001;name2=CNOT3 chr19 ENCODE exon 59333256 59333521 . + . Parent=gene1001 chr19 ENCODE exon 59338477 59338551 . + . Parent=gene1001 chr19 ENCODE CDS 59338527 59338551 . + 0 Parent=gene1001 chr19 ENCODE exon 59338667 59338734 . + . Parent=gene1001 chr19 ENCODE CDS 59338667 59338734 . + 2 Parent=gene1001 chr19 ENCODE exon 59338990 59339064 . + . Parent=gene1001 chr19 ENCODE CDS 59338990 59339064 . + 0 Parent=gene1001 chr19 ENCODE exon 59339208 59339297 . + . Parent=gene1001 chr19 ENCODE CDS 59339208 59339297 . + 0 Parent=gene1001 chr19 ENCODE exon 59339554 59339682 . + . Parent=gene1001 chr19 ENCODE CDS 59339554 59339682 . + 0 Parent=gene1001 chr19 ENCODE exon 59339785 59339880 . + . Parent=gene1001 chr19 ENCODE CDS 59339785 59339880 . + 0 Parent=gene1001 chr19 ENCODE exon 59341146 59341365 . + . Parent=gene1001 chr19 ENCODE CDS 59341146 59341365 . + 0 Parent=gene1001 chr19 ENCODE exon 59341458 59341591 . + . Parent=gene1001 chr19 ENCODE CDS 59341458 59341591 . + 2 Parent=gene1001 chr19 ENCODE exon 59342149 59342205 . + . Parent=gene1001 chr19 ENCODE CDS 59342149 59342205 . + 0 Parent=gene1001 chr19 ENCODE exon 59343695 59344082 . + . Parent=gene1001 chr19 ENCODE CDS 59343695 59344082 . + 0 Parent=gene1001 chr19 ENCODE exon 59344167 59344290 . + . Parent=gene1001 chr19 ENCODE CDS 59344167 59344290 . + 2 Parent=gene1001 chr19 ENCODE exon 59345107 59345305 . + . Parent=gene1001 chr19 ENCODE CDS 59345107 59345305 . + 1 Parent=gene1001 chr19 ENCODE exon 59347775 59347874 . + . Parent=gene1001 chr19 ENCODE CDS 59347775 59347874 . + 0 Parent=gene1001 chr19 ENCODE exon 59347977 59348175 . + . Parent=gene1001 chr19 ENCODE CDS 59347977 59348175 . + 2 Parent=gene1001 chr19 ENCODE exon 59348416 59348548 . + . Parent=gene1001 chr19 ENCODE CDS 59348416 59348548 . + 1 Parent=gene1001 chr19 ENCODE exon 59349264 59349389 . + . Parent=gene1001 chr19 ENCODE CDS 59349264 59349389 . + 0 Parent=gene1001 chr19 ENCODE CDS 59350859 59350957 . + 0 Parent=gene1001 chr19 ENCODE exon 59350859 59351231 . + . Parent=gene1001 ### chr19 ENCODE gene 59333315 59351230 . + . ID=gene1002;Name=AC012314.9-002;name2=CNOT3 chr19 ENCODE exon 59333315 59333521 . + . Parent=gene1002 chr19 ENCODE exon 59338477 59338551 . + . Parent=gene1002 chr19 ENCODE exon 59338667 59338734 . + . Parent=gene1002 chr19 ENCODE exon 59338990 59339064 . + . Parent=gene1002 chr19 ENCODE exon 59339208 59339682 . + . Parent=gene1002 chr19 ENCODE exon 59339785 59339880 . + . Parent=gene1002 chr19 ENCODE exon 59341146 59341365 . + . Parent=gene1002 chr19 ENCODE exon 59341458 59341591 . + . Parent=gene1002 chr19 ENCODE exon 59342149 59342205 . + . Parent=gene1002 chr19 ENCODE exon 59343695 59344082 . + . Parent=gene1002 chr19 ENCODE exon 59344167 59344290 . + . Parent=gene1002 chr19 ENCODE exon 59345107 59345305 . + . Parent=gene1002 chr19 ENCODE exon 59347775 59347874 . + . Parent=gene1002 chr19 ENCODE exon 59347977 59348175 . + . Parent=gene1002 chr19 ENCODE exon 59348416 59348548 . + . Parent=gene1002 chr19 ENCODE exon 59349264 59351230 . + . Parent=gene1002 ### chr19 ENCODE gene 59336924 59351230 . + . ID=gene1003;Name=AC012314.9-003;name2=CNOT3 chr19 ENCODE exon 59336924 59338551 . + . Parent=gene1003 chr19 ENCODE exon 59338667 59338734 . + . Parent=gene1003 chr19 ENCODE exon 59338990 59339064 . + . Parent=gene1003 chr19 ENCODE exon 59339208 59339297 . + . Parent=gene1003 chr19 ENCODE exon 59339554 59339682 . + . Parent=gene1003 chr19 ENCODE exon 59339785 59339880 . + . Parent=gene1003 chr19 ENCODE exon 59341146 59341365 . + . Parent=gene1003 chr19 ENCODE exon 59341458 59341591 . + . Parent=gene1003 chr19 ENCODE exon 59342149 59342205 . + . Parent=gene1003 chr19 ENCODE exon 59343695 59344082 . + . Parent=gene1003 chr19 ENCODE exon 59344167 59344290 . + . Parent=gene1003 chr19 ENCODE exon 59345107 59345305 . + . Parent=gene1003 chr19 ENCODE exon 59347775 59347874 . + . Parent=gene1003 chr19 ENCODE exon 59347977 59348175 . + . Parent=gene1003 chr19 ENCODE exon 59348416 59348548 . + . Parent=gene1003 chr19 ENCODE exon 59349264 59349389 . + . Parent=gene1003 chr19 ENCODE exon 59350859 59351230 . + . Parent=gene1003 ### chr19 ENCODE gene 59338477 59351258 . + . ID=gene1004;name2=CNOT3;Name=AC012314.9-004 chr19 ENCODE exon 59338477 59338551 . + . Parent=gene1004 chr19 ENCODE exon 59338667 59338734 . + . Parent=gene1004 chr19 ENCODE exon 59338990 59339064 . + . Parent=gene1004 chr19 ENCODE exon 59339208 59339297 . + . Parent=gene1004 chr19 ENCODE exon 59339554 59339682 . + . Parent=gene1004 chr19 ENCODE exon 59339785 59339880 . + . Parent=gene1004 chr19 ENCODE exon 59341146 59341365 . + . Parent=gene1004 chr19 ENCODE exon 59341458 59341591 . + . Parent=gene1004 chr19 ENCODE exon 59342149 59342205 . + . Parent=gene1004 chr19 ENCODE exon 59343695 59344082 . + . Parent=gene1004 chr19 ENCODE exon 59344167 59344290 . + . Parent=gene1004 chr19 ENCODE exon 59345107 59345305 . + . Parent=gene1004 chr19 ENCODE exon 59347775 59347874 . + . Parent=gene1004 chr19 ENCODE exon 59347977 59348086 . + . Parent=gene1004 chr19 ENCODE exon 59351003 59351258 . + . Parent=gene1004 ### chr19 ENCODE gene 59339278 59344244 . + . ID=gene1005;Name=AC012314.9-009;name2=CNOT3 chr19 ENCODE exon 59339278 59339297 . + . Parent=gene1005 chr19 ENCODE CDS 59339278 59339297 . + 0 Parent=gene1005 chr19 ENCODE exon 59339554 59339682 . + . Parent=gene1005 chr19 ENCODE CDS 59339554 59339682 . + 1 Parent=gene1005 chr19 ENCODE exon 59339785 59339880 . + . Parent=gene1005 chr19 ENCODE CDS 59339785 59339880 . + 1 Parent=gene1005 chr19 ENCODE exon 59341143 59341365 . + . Parent=gene1005 chr19 ENCODE CDS 59341143 59341365 . + 1 Parent=gene1005 chr19 ENCODE exon 59341458 59341591 . + . Parent=gene1005 chr19 ENCODE CDS 59341458 59341591 . + 0 Parent=gene1005 chr19 ENCODE exon 59342149 59342205 . + . Parent=gene1005 chr19 ENCODE CDS 59342149 59342205 . + 1 Parent=gene1005 chr19 ENCODE exon 59343695 59344082 . + . Parent=gene1005 chr19 ENCODE CDS 59343695 59344082 . + 1 Parent=gene1005 chr19 ENCODE exon 59344167 59344244 . + . Parent=gene1005 chr19 ENCODE CDS 59344167 59344244 . + 0 Parent=gene1005 ### chr19 ENCODE gene 59339285 59351231 . + . ID=gene1006;Name=AC012314.9-005;name2=CNOT3 chr19 ENCODE exon 59339285 59339297 . + . Parent=gene1006 chr19 ENCODE exon 59339554 59339682 . + . Parent=gene1006 chr19 ENCODE exon 59339785 59339880 . + . Parent=gene1006 chr19 ENCODE exon 59341090 59341365 . + . Parent=gene1006 chr19 ENCODE exon 59341458 59341591 . + . Parent=gene1006 chr19 ENCODE exon 59342149 59342205 . + . Parent=gene1006 chr19 ENCODE exon 59343695 59344082 . + . Parent=gene1006 chr19 ENCODE exon 59344167 59344290 . + . Parent=gene1006 chr19 ENCODE exon 59345107 59345305 . + . Parent=gene1006 chr19 ENCODE exon 59347775 59347874 . + . Parent=gene1006 chr19 ENCODE exon 59347977 59348175 . + . Parent=gene1006 chr19 ENCODE exon 59348416 59348548 . + . Parent=gene1006 chr19 ENCODE exon 59348730 59348942 . + . Parent=gene1006 chr19 ENCODE exon 59349046 59349389 . + . Parent=gene1006 chr19 ENCODE exon 59350859 59351231 . + . Parent=gene1006 ### chr19 ENCODE gene 59345107 59350004 . + . ID=gene1007;Name=AC012314.9-006;name2=CNOT3 chr19 ENCODE exon 59345107 59345305 . + . Parent=gene1007 chr19 ENCODE exon 59347775 59347874 . + . Parent=gene1007 chr19 ENCODE exon 59347977 59348175 . + . Parent=gene1007 chr19 ENCODE exon 59348416 59348548 . + . Parent=gene1007 chr19 ENCODE exon 59349264 59349389 . + . Parent=gene1007 chr19 ENCODE exon 59349493 59350004 . + . Parent=gene1007 ### chr19 ENCODE gene 59345277 59349368 . + . ID=gene1008;Name=AC012314.9-010;name2=CNOT3 chr19 ENCODE exon 59345277 59345305 . + . Parent=gene1008 chr19 ENCODE exon 59347775 59347874 . + . Parent=gene1008 chr19 ENCODE exon 59347977 59348175 . + . Parent=gene1008 chr19 ENCODE exon 59348416 59348548 . + . Parent=gene1008 chr19 ENCODE exon 59349046 59349368 . + . Parent=gene1008 ### chr19 ENCODE gene 59348552 59351231 . + . ID=gene1009;Name=AC012314.9-007;name2=CNOT3 chr19 ENCODE exon 59348552 59348631 . + . Parent=gene1009 chr19 ENCODE exon 59349264 59351231 . + . Parent=gene1009 ### chr19 ENCODE gene 59350711 59355432 . - . ID=gene1010;Name=AC012314.10-001;name2=LENG1 chr19 ENCODE exon 59350711 59351490 . - . Parent=gene1010 chr19 ENCODE CDS 59351271 59351490 . - 1 Parent=gene1010 chr19 ENCODE exon 59352313 59352575 . - . Parent=gene1010 chr19 ENCODE CDS 59352313 59352575 . - 0 Parent=gene1010 chr19 ENCODE exon 59353832 59354011 . - . Parent=gene1010 chr19 ENCODE CDS 59353832 59354011 . - 0 Parent=gene1010 chr19 ENCODE CDS 59355114 59355245 . - 0 Parent=gene1010 chr19 ENCODE exon 59355114 59355432 . - . Parent=gene1010 ### chr19 ENCODE gene 59355658 59356198 . - . ID=gene1011;Name=AC012314.11-009;name2=TMC4 chr19 ENCODE exon 59355658 59355923 . - . Parent=gene1011 chr19 ENCODE exon 59356016 59356198 . - . Parent=gene1011 ### chr19 ENCODE gene 59355658 59356521 . - . ID=gene1012;Name=AC012314.11-007;name2=TMC4 chr19 ENCODE exon 59355658 59355923 . - . Parent=gene1012 chr19 ENCODE exon 59356016 59356159 . - . Parent=gene1012 chr19 ENCODE exon 59356427 59356521 . - . Parent=gene1012 ### chr19 ENCODE gene 59355658 59360262 . - . ID=gene1013;Name=AC012314.11-010;name2=TMC4 chr19 ENCODE exon 59355658 59355923 . - . Parent=gene1013 chr19 ENCODE exon 59356016 59356094 . - . Parent=gene1013 chr19 ENCODE exon 59356427 59356582 . - . Parent=gene1013 chr19 ENCODE exon 59356679 59356809 . - . Parent=gene1013 chr19 ENCODE exon 59357650 59357833 . - . Parent=gene1013 chr19 ENCODE exon 59358218 59358315 . - . Parent=gene1013 chr19 ENCODE exon 59358578 59358704 . - . Parent=gene1013 chr19 ENCODE exon 59359197 59359431 . - . Parent=gene1013 chr19 ENCODE exon 59359980 59360262 . - . Parent=gene1013 ### chr19 ENCODE gene 59355658 59368677 . - . ID=gene1014;Name=AC012314.11-001;name2=TMC4 chr19 ENCODE exon 59355658 59355923 . - . Parent=gene1014 chr19 ENCODE CDS 59355855 59355923 . - 0 Parent=gene1014 chr19 ENCODE exon 59356016 59356094 . - . Parent=gene1014 chr19 ENCODE CDS 59356016 59356094 . - 1 Parent=gene1014 chr19 ENCODE exon 59356427 59356582 . - . Parent=gene1014 chr19 ENCODE CDS 59356427 59356582 . - 1 Parent=gene1014 chr19 ENCODE exon 59356679 59356809 . - . Parent=gene1014 chr19 ENCODE CDS 59356679 59356809 . - 0 Parent=gene1014 chr19 ENCODE exon 59357650 59357833 . - . Parent=gene1014 chr19 ENCODE CDS 59357650 59357833 . - 1 Parent=gene1014 chr19 ENCODE exon 59358218 59358315 . - . Parent=gene1014 chr19 ENCODE CDS 59358218 59358315 . - 0 Parent=gene1014 chr19 ENCODE exon 59358578 59358704 . - . Parent=gene1014 chr19 ENCODE CDS 59358578 59358704 . - 1 Parent=gene1014 chr19 ENCODE exon 59359268 59359431 . - . Parent=gene1014 chr19 ENCODE CDS 59359268 59359431 . - 0 Parent=gene1014 chr19 ENCODE exon 59359980 59360147 . - . Parent=gene1014 chr19 ENCODE CDS 59359980 59360147 . - 0 Parent=gene1014 chr19 ENCODE exon 59360965 59361112 . - . Parent=gene1014 chr19 ENCODE CDS 59360965 59361112 . - 1 Parent=gene1014 chr19 ENCODE exon 59363709 59363830 . - . Parent=gene1014 chr19 ENCODE CDS 59363709 59363830 . - 0 Parent=gene1014 chr19 ENCODE exon 59363986 59364218 . - . Parent=gene1014 chr19 ENCODE CDS 59363986 59364218 . - 2 Parent=gene1014 chr19 ENCODE exon 59365062 59365210 . - . Parent=gene1014 chr19 ENCODE CDS 59365062 59365210 . - 1 Parent=gene1014 chr19 ENCODE exon 59367451 59367664 . - . Parent=gene1014 chr19 ENCODE CDS 59367451 59367664 . - 2 Parent=gene1014 chr19 ENCODE CDS 59368546 59368624 . - 0 Parent=gene1014 chr19 ENCODE exon 59368546 59368677 . - . Parent=gene1014 ### chr19 ENCODE gene 59355714 59368756 . - . ID=gene1015;Name=AC012314.11-011;name2=TMC4 chr19 ENCODE exon 59355714 59355923 . - . Parent=gene1015 chr19 ENCODE CDS 59355855 59355923 . - 0 Parent=gene1015 chr19 ENCODE exon 59356016 59356094 . - . Parent=gene1015 chr19 ENCODE CDS 59356016 59356094 . - 1 Parent=gene1015 chr19 ENCODE exon 59356427 59356582 . - . Parent=gene1015 chr19 ENCODE CDS 59356427 59356582 . - 1 Parent=gene1015 chr19 ENCODE exon 59356679 59356809 . - . Parent=gene1015 chr19 ENCODE CDS 59356679 59356809 . - 0 Parent=gene1015 chr19 ENCODE exon 59357650 59357833 . - . Parent=gene1015 chr19 ENCODE CDS 59357650 59357833 . - 1 Parent=gene1015 chr19 ENCODE exon 59358218 59358315 . - . Parent=gene1015 chr19 ENCODE CDS 59358218 59358315 . - 0 Parent=gene1015 chr19 ENCODE exon 59358578 59358704 . - . Parent=gene1015 chr19 ENCODE CDS 59358578 59358704 . - 1 Parent=gene1015 chr19 ENCODE exon 59359268 59359431 . - . Parent=gene1015 chr19 ENCODE CDS 59359268 59359431 . - 0 Parent=gene1015 chr19 ENCODE exon 59359980 59360147 . - . Parent=gene1015 chr19 ENCODE CDS 59359980 59360147 . - 0 Parent=gene1015 chr19 ENCODE exon 59360965 59361112 . - . Parent=gene1015 chr19 ENCODE CDS 59360965 59361112 . - 1 Parent=gene1015 chr19 ENCODE exon 59363709 59363830 . - . Parent=gene1015 chr19 ENCODE CDS 59363709 59363830 . - 0 Parent=gene1015 chr19 ENCODE exon 59363986 59364218 . - . Parent=gene1015 chr19 ENCODE CDS 59363986 59364218 . - 2 Parent=gene1015 chr19 ENCODE exon 59365062 59365210 . - . Parent=gene1015 chr19 ENCODE CDS 59365062 59365210 . - 1 Parent=gene1015 chr19 ENCODE exon 59367451 59367682 . - . Parent=gene1015 chr19 ENCODE CDS 59367451 59367682 . - 2 Parent=gene1015 chr19 ENCODE CDS 59368546 59368624 . - 0 Parent=gene1015 chr19 ENCODE exon 59368546 59368756 . - . Parent=gene1015 ### chr19 ENCODE gene 59356886 59359025 . - . ID=gene1016;Name=AC012314.11-005;name2=TMC4 chr19 ENCODE exon 59356886 59358315 . - . Parent=gene1016 chr19 ENCODE exon 59358578 59359025 . - . Parent=gene1016 ### chr19 ENCODE gene 59357774 59358812 . - . ID=gene1017;Name=AC012314.11-006;name2=TMC4 chr19 ENCODE exon 59357774 59357833 . - . Parent=gene1017 chr19 ENCODE exon 59358218 59358315 . - . Parent=gene1017 chr19 ENCODE exon 59358578 59358812 . - . Parent=gene1017 ### chr19 ENCODE gene 59358653 59368666 . - . ID=gene1018;Name=AC012314.11-003;name2=TMC4 chr19 ENCODE exon 59358653 59358704 . - . Parent=gene1018 chr19 ENCODE exon 59365062 59365210 . - . Parent=gene1018 chr19 ENCODE exon 59367451 59367664 . - . Parent=gene1018 chr19 ENCODE exon 59368546 59368666 . - . Parent=gene1018 ### chr19 ENCODE gene 59360085 59368666 . - . ID=gene1019;Name=AC012314.11-004;name2=TMC4 chr19 ENCODE exon 59360085 59360147 . - . Parent=gene1019 chr19 ENCODE exon 59365062 59365210 . - . Parent=gene1019 chr19 ENCODE exon 59367451 59367664 . - . Parent=gene1019 chr19 ENCODE exon 59368546 59368666 . - . Parent=gene1019 ### chr19 ENCODE gene 59360098 59364020 . - . ID=gene1020;Name=AC012314.11-008;name2=TMC4 chr19 ENCODE exon 59360098 59360147 . - . Parent=gene1020 chr19 ENCODE exon 59360965 59361112 . - . Parent=gene1020 chr19 ENCODE exon 59363709 59364020 . - . Parent=gene1020 ### chr19 ENCODE gene 59363709 59368259 . - . ID=gene1021;Name=AC012314.11-002;name2=TMC4 chr19 ENCODE exon 59363709 59363830 . - . Parent=gene1021 chr19 ENCODE CDS 59363709 59363830 . - 0 Parent=gene1021 chr19 ENCODE exon 59363986 59364218 . - . Parent=gene1021 chr19 ENCODE CDS 59363986 59364218 . - 2 Parent=gene1021 chr19 ENCODE exon 59365062 59365210 . - . Parent=gene1021 chr19 ENCODE CDS 59365062 59365210 . - 1 Parent=gene1021 chr19 ENCODE CDS 59367451 59367473 . - 0 Parent=gene1021 chr19 ENCODE exon 59367451 59367664 . - . Parent=gene1021 chr19 ENCODE exon 59368221 59368259 . - . Parent=gene1021 ### chr19 ENCODE gene 59368921 59385106 . - . ID=gene1022;name2=LENG4;Name=AC012314.12-007 chr19 ENCODE exon 59368921 59369937 . - . Parent=gene1022 chr19 ENCODE exon 59374294 59374470 . - . Parent=gene1022 chr19 ENCODE exon 59376302 59376662 . - . Parent=gene1022 chr19 ENCODE exon 59379216 59379375 . - . Parent=gene1022 chr19 ENCODE exon 59383883 59384012 . - . Parent=gene1022 chr19 ENCODE exon 59384099 59384177 . - . Parent=gene1022 chr19 ENCODE exon 59385001 59385106 . - . Parent=gene1022 ### chr19 ENCODE gene 59368921 59385478 . - . ID=gene1023;Name=AC012314.12-001;name2=LENG4 chr19 ENCODE exon 59368921 59369937 . - . Parent=gene1023 chr19 ENCODE CDS 59369550 59369937 . - 1 Parent=gene1023 chr19 ENCODE exon 59374294 59374470 . - . Parent=gene1023 chr19 ENCODE CDS 59374294 59374470 . - 1 Parent=gene1023 chr19 ENCODE exon 59376302 59376662 . - . Parent=gene1023 chr19 ENCODE CDS 59376302 59376662 . - 2 Parent=gene1023 chr19 ENCODE exon 59379216 59379375 . - . Parent=gene1023 chr19 ENCODE CDS 59379216 59379375 . - 0 Parent=gene1023 chr19 ENCODE exon 59382855 59382981 . - . Parent=gene1023 chr19 ENCODE CDS 59382855 59382981 . - 1 Parent=gene1023 chr19 ENCODE exon 59383883 59384012 . - . Parent=gene1023 chr19 ENCODE CDS 59383883 59384012 . - 2 Parent=gene1023 chr19 ENCODE CDS 59384099 59384174 . - 0 Parent=gene1023 chr19 ENCODE exon 59384099 59384177 . - . Parent=gene1023 chr19 ENCODE exon 59385001 59385478 . - . Parent=gene1023 ### chr19 ENCODE gene 59368925 59376319 . - . ID=gene1024;Name=AC012314.12-003;name2=LENG4 chr19 ENCODE exon 59368925 59369937 . - . Parent=gene1024 chr19 ENCODE exon 59374294 59376319 . - . Parent=gene1024 ### chr19 ENCODE gene 59373866 59385335 . - . ID=gene1025;Name=AC012314.12-002;name2=LENG4 chr19 ENCODE exon 59373866 59374470 . - . Parent=gene1025 chr19 ENCODE CDS 59374290 59374470 . - 1 Parent=gene1025 chr19 ENCODE exon 59376302 59376662 . - . Parent=gene1025 chr19 ENCODE CDS 59376302 59376662 . - 2 Parent=gene1025 chr19 ENCODE exon 59379216 59379375 . - . Parent=gene1025 chr19 ENCODE CDS 59379216 59379375 . - 0 Parent=gene1025 chr19 ENCODE exon 59382855 59382981 . - . Parent=gene1025 chr19 ENCODE CDS 59382855 59382981 . - 1 Parent=gene1025 chr19 ENCODE exon 59383883 59384012 . - . Parent=gene1025 chr19 ENCODE CDS 59383883 59384012 . - 2 Parent=gene1025 chr19 ENCODE CDS 59384099 59384174 . - 0 Parent=gene1025 chr19 ENCODE exon 59384099 59384177 . - . Parent=gene1025 chr19 ENCODE exon 59385001 59385335 . - . Parent=gene1025 ### chr19 ENCODE gene 59375850 59379329 . - . ID=gene1026;Name=AC012314.12-005;name2=LENG4 chr19 ENCODE exon 59375850 59376662 . - . Parent=gene1026 chr19 ENCODE exon 59379216 59379329 . - . Parent=gene1026 ### chr19 ENCODE gene 59376388 59384958 . - . ID=gene1027;Name=AC012314.12-004;name2=LENG4 chr19 ENCODE exon 59376388 59376662 . - . Parent=gene1027 chr19 ENCODE CDS 59376388 59376662 . - 2 Parent=gene1027 chr19 ENCODE exon 59379216 59379375 . - . Parent=gene1027 chr19 ENCODE CDS 59379216 59379375 . - 0 Parent=gene1027 chr19 ENCODE exon 59382855 59382981 . - . Parent=gene1027 chr19 ENCODE CDS 59382855 59382981 . - 1 Parent=gene1027 chr19 ENCODE exon 59383883 59384012 . - . Parent=gene1027 chr19 ENCODE CDS 59383883 59384012 . - 2 Parent=gene1027 chr19 ENCODE CDS 59384099 59384174 . - 0 Parent=gene1027 chr19 ENCODE exon 59384099 59384177 . - . Parent=gene1027 chr19 ENCODE exon 59384854 59384958 . - . Parent=gene1027 ### chr19 ENCODE gene 59379216 59385212 . - . ID=gene1028;Name=AC012314.12-006;name2=LENG4 chr19 ENCODE exon 59379216 59379375 . - . Parent=gene1028 chr19 ENCODE exon 59382855 59382981 . - . Parent=gene1028 chr19 ENCODE exon 59383883 59384012 . - . Parent=gene1028 chr19 ENCODE exon 59385001 59385212 . - . Parent=gene1028 ### chr19 ENCODE gene 59385601 59388018 . + . ID=gene1029;name2=TSEN34;Name=AC012314.13-006 chr19 ENCODE exon 59385601 59385825 . + . Parent=gene1029 chr19 ENCODE exon 59387024 59387270 . + . Parent=gene1029 chr19 ENCODE CDS 59387028 59387270 . + 0 Parent=gene1029 chr19 ENCODE exon 59387384 59387627 . + . Parent=gene1029 chr19 ENCODE CDS 59387384 59387627 . + 0 Parent=gene1029 chr19 ENCODE exon 59387779 59388018 . + . Parent=gene1029 chr19 ENCODE CDS 59387779 59388018 . + 2 Parent=gene1029 ### chr19 ENCODE gene 59385931 59388036 . + . ID=gene1030;Name=AC012314.13-005;name2=TSEN34 chr19 ENCODE exon 59385931 59386034 . + . Parent=gene1030 chr19 ENCODE exon 59387024 59387270 . + . Parent=gene1030 chr19 ENCODE CDS 59387028 59387270 . + 0 Parent=gene1030 chr19 ENCODE exon 59387384 59387627 . + . Parent=gene1030 chr19 ENCODE CDS 59387384 59387627 . + 0 Parent=gene1030 chr19 ENCODE exon 59387779 59388036 . + . Parent=gene1030 chr19 ENCODE CDS 59387779 59388036 . + 2 Parent=gene1030 ### chr19 ENCODE gene 59385931 59389333 . + . ID=gene1031;Name=AC012314.13-001;name2=TSEN34 chr19 ENCODE exon 59385931 59386113 . + . Parent=gene1031 chr19 ENCODE exon 59387024 59387270 . + . Parent=gene1031 chr19 ENCODE CDS 59387028 59387270 . + 0 Parent=gene1031 chr19 ENCODE exon 59387384 59387627 . + . Parent=gene1031 chr19 ENCODE CDS 59387384 59387627 . + 0 Parent=gene1031 chr19 ENCODE exon 59387779 59388036 . + . Parent=gene1031 chr19 ENCODE CDS 59387779 59388036 . + 2 Parent=gene1031 chr19 ENCODE CDS 59388842 59389029 . + 2 Parent=gene1031 chr19 ENCODE exon 59388842 59389333 . + . Parent=gene1031 ### chr19 ENCODE gene 59386006 59389333 . + . ID=gene1032;Name=AC012314.13-002;name2=TSEN34 chr19 ENCODE exon 59386006 59387627 . + . Parent=gene1032 chr19 ENCODE exon 59387779 59388036 . + . Parent=gene1032 chr19 ENCODE exon 59388842 59389333 . + . Parent=gene1032 ### chr19 ENCODE gene 59386394 59389333 . + . ID=gene1033;Name=AC012314.13-003;name2=TSEN34 chr19 ENCODE exon 59386394 59386700 . + . Parent=gene1033 chr19 ENCODE exon 59387024 59387270 . + . Parent=gene1033 chr19 ENCODE CDS 59387028 59387270 . + 0 Parent=gene1033 chr19 ENCODE exon 59387384 59387627 . + . Parent=gene1033 chr19 ENCODE CDS 59387384 59387627 . + 0 Parent=gene1033 chr19 ENCODE exon 59387779 59388036 . + . Parent=gene1033 chr19 ENCODE CDS 59387779 59388036 . + 2 Parent=gene1033 chr19 ENCODE CDS 59388842 59389029 . + 2 Parent=gene1033 chr19 ENCODE exon 59388842 59389333 . + . Parent=gene1033 ### chr19 ENCODE gene 59386916 59389333 . + . ID=gene1034;Name=AC012314.13-004;name2=TSEN34 chr19 ENCODE exon 59386916 59387270 . + . Parent=gene1034 chr19 ENCODE CDS 59387028 59387270 . + 0 Parent=gene1034 chr19 ENCODE exon 59387384 59387627 . + . Parent=gene1034 chr19 ENCODE CDS 59387384 59387627 . + 0 Parent=gene1034 chr19 ENCODE exon 59387779 59388036 . + . Parent=gene1034 chr19 ENCODE CDS 59387779 59388036 . + 2 Parent=gene1034 chr19 ENCODE CDS 59388842 59389029 . + 2 Parent=gene1034 chr19 ENCODE exon 59388842 59389333 . + . Parent=gene1034 ### chr19 ENCODE gene 59396422 59403327 . + . ID=gene1035;Name=AC012314.14-003;name2=RPS9 chr19 ENCODE exon 59396422 59396568 . + . Parent=gene1035 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1035 chr19 ENCODE CDS 59396865 59396961 . + 0 Parent=gene1035 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1035 chr19 ENCODE CDS 59397167 59397289 . + 2 Parent=gene1035 chr19 ENCODE exon 59401956 59402142 . + . Parent=gene1035 chr19 ENCODE CDS 59401956 59402142 . + 2 Parent=gene1035 chr19 ENCODE CDS 59403078 59403255 . + 1 Parent=gene1035 chr19 ENCODE exon 59403078 59403327 . + . Parent=gene1035 ### chr19 ENCODE gene 59396489 59402527 . + . ID=gene1036;Name=AC012314.14-008;name2=RPS9 chr19 ENCODE exon 59396489 59396568 . + . Parent=gene1036 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1036 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1036 chr19 ENCODE exon 59401956 59402527 . + . Parent=gene1036 ### chr19 ENCODE gene 59396538 59444674 . + . ID=gene1037;name2=RPS9;Name=AC012314.14-002 chr19 ENCODE exon 59396538 59396568 . + . Parent=gene1037 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1037 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1037 chr19 ENCODE exon 59427429 59427624 . + . Parent=gene1037 chr19 ENCODE exon 59442763 59444674 . + . Parent=gene1037 ### chr19 ENCODE gene 59396551 59403202 . + . ID=gene1038;Name=AC012314.14-009;name2=RPS9 chr19 ENCODE exon 59396551 59396573 . + . Parent=gene1038 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1038 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1038 chr19 ENCODE exon 59401956 59402142 . + . Parent=gene1038 chr19 ENCODE exon 59402233 59402404 . + . Parent=gene1038 chr19 ENCODE exon 59403078 59403202 . + . Parent=gene1038 ### chr19 ENCODE gene 59396552 59403327 . + . ID=gene1039;Name=AC012314.14-001;name2=RPS9 chr19 ENCODE exon 59396552 59396641 . + . Parent=gene1039 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1039 chr19 ENCODE CDS 59396865 59396961 . + 0 Parent=gene1039 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1039 chr19 ENCODE CDS 59397167 59397289 . + 2 Parent=gene1039 chr19 ENCODE exon 59401956 59402142 . + . Parent=gene1039 chr19 ENCODE CDS 59401956 59402142 . + 2 Parent=gene1039 chr19 ENCODE CDS 59403078 59403255 . + 1 Parent=gene1039 chr19 ENCODE exon 59403078 59403327 . + . Parent=gene1039 ### chr19 ENCODE gene 59396552 59403327 . + . ID=gene1040;Name=AC012314.14-006;name2=RPS9 chr19 ENCODE exon 59396552 59396641 . + . Parent=gene1040 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1040 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1040 chr19 ENCODE exon 59401956 59402142 . + . Parent=gene1040 chr19 ENCODE exon 59402233 59403327 . + . Parent=gene1040 ### chr19 ENCODE gene 59396552 59403327 . + . ID=gene1041;Name=AC012314.14-007;name2=RPS9 chr19 ENCODE exon 59396552 59396641 . + . Parent=gene1041 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1041 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1041 chr19 ENCODE exon 59401956 59402142 . + . Parent=gene1041 chr19 ENCODE exon 59402233 59402404 . + . Parent=gene1041 chr19 ENCODE exon 59403078 59403327 . + . Parent=gene1041 ### chr19 ENCODE gene 59396554 59403327 . + . ID=gene1042;Name=AC012314.14-012;name2=RPS9 chr19 ENCODE exon 59396554 59396568 . + . Parent=gene1042 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1042 chr19 ENCODE CDS 59396865 59396961 . + 0 Parent=gene1042 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1042 chr19 ENCODE CDS 59397167 59397289 . + 2 Parent=gene1042 chr19 ENCODE CDS 59403078 59403097 . + 2 Parent=gene1042 chr19 ENCODE exon 59403078 59403327 . + . Parent=gene1042 ### chr19 ENCODE gene 59396559 59403324 . + . ID=gene1043;name2=RPS9;Name=AC012314.14-005 chr19 ENCODE exon 59396559 59396573 . + . Parent=gene1043 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1043 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1043 chr19 ENCODE exon 59401956 59402404 . + . Parent=gene1043 chr19 ENCODE exon 59403078 59403324 . + . Parent=gene1043 ### chr19 ENCODE gene 59396813 59403327 . + . ID=gene1044;Name=AC012314.14-010;name2=RPS9 chr19 ENCODE exon 59396813 59396961 . + . Parent=gene1044 chr19 ENCODE CDS 59396865 59396961 . + 0 Parent=gene1044 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1044 chr19 ENCODE CDS 59397167 59397289 . + 2 Parent=gene1044 chr19 ENCODE exon 59401956 59402142 . + . Parent=gene1044 chr19 ENCODE CDS 59401956 59402142 . + 2 Parent=gene1044 chr19 ENCODE CDS 59403078 59403255 . + 1 Parent=gene1044 chr19 ENCODE exon 59403078 59403327 . + . Parent=gene1044 ### chr19 ENCODE gene 59396840 59397688 . + . ID=gene1045;Name=AC012314.14-011;name2=RPS9 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1045 chr19 ENCODE exon 59397167 59397688 . + . Parent=gene1045 ### chr19 ENCODE gene 59396840 59403310 . + . ID=gene1046;Name=AC012314.14-004;name2=RPS9 chr19 ENCODE exon 59396840 59396961 . + . Parent=gene1046 chr19 ENCODE exon 59397167 59397289 . + . Parent=gene1046 chr19 ENCODE exon 59401956 59403310 . + . Parent=gene1046 ### chr19 ENCODE gene 59411959 59419190 . - . ID=gene1047;Name=AC012314.15-001;name2=LILRB3 chr19 ENCODE exon 59411959 59412920 . - . Parent=gene1047 chr19 ENCODE CDS 59412774 59412920 . - 0 Parent=gene1047 chr19 ENCODE exon 59413000 59413155 . - . Parent=gene1047 chr19 ENCODE CDS 59413000 59413155 . - 0 Parent=gene1047 chr19 ENCODE exon 59414042 59414094 . - . Parent=gene1047 chr19 ENCODE CDS 59414042 59414094 . - 2 Parent=gene1047 chr19 ENCODE exon 59414326 59414363 . - . Parent=gene1047 chr19 ENCODE CDS 59414326 59414363 . - 1 Parent=gene1047 chr19 ENCODE exon 59414444 59414519 . - . Parent=gene1047 chr19 ENCODE CDS 59414444 59414519 . - 2 Parent=gene1047 chr19 ENCODE exon 59414810 59414926 . - . Parent=gene1047 chr19 ENCODE CDS 59414810 59414926 . - 2 Parent=gene1047 chr19 ENCODE exon 59415837 59415887 . - . Parent=gene1047 chr19 ENCODE CDS 59415837 59415887 . - 2 Parent=gene1047 chr19 ENCODE exon 59416210 59416512 . - . Parent=gene1047 chr19 ENCODE CDS 59416210 59416512 . - 2 Parent=gene1047 chr19 ENCODE exon 59416767 59417063 . - . Parent=gene1047 chr19 ENCODE CDS 59416767 59417063 . - 2 Parent=gene1047 chr19 ENCODE exon 59417512 59417814 . - . Parent=gene1047 chr19 ENCODE CDS 59417512 59417814 . - 2 Parent=gene1047 chr19 ENCODE exon 59417962 59418246 . - . Parent=gene1047 chr19 ENCODE CDS 59417962 59418246 . - 2 Parent=gene1047 chr19 ENCODE exon 59418431 59418466 . - . Parent=gene1047 chr19 ENCODE CDS 59418431 59418466 . - 2 Parent=gene1047 chr19 ENCODE CDS 59418627 59418660 . - 0 Parent=gene1047 chr19 ENCODE exon 59418627 59418711 . - . Parent=gene1047 chr19 ENCODE exon 59419105 59419190 . - . Parent=gene1047 ### chr19 ENCODE gene 59412777 59413379 . - . ID=gene1048;Name=AC012314.15-002;name2=LILRB3 chr19 ENCODE exon 59412777 59412920 . - . Parent=gene1048 chr19 ENCODE exon 59413000 59413379 . - . Parent=gene1048 ### chr19 ENCODE gene 59414276 59415036 . - . ID=gene1049;Name=AC012314.15-003;name2=LILRB3 chr19 ENCODE exon 59414276 59414363 . - . Parent=gene1049 chr19 ENCODE exon 59414444 59414519 . - . Parent=gene1049 chr19 ENCODE exon 59414810 59415036 . - . Parent=gene1049 ### chr19 ENCODE gene 59417662 59418771 . - . ID=gene1050;Name=AC012314.15-004;name2=LILRB3 chr19 ENCODE exon 59417662 59417814 . - . Parent=gene1050 chr19 ENCODE exon 59417962 59418246 . - . Parent=gene1050 chr19 ENCODE exon 59418431 59418771 . - . Parent=gene1050 ### chr19 ENCODE gene 59417695 59418771 . - . ID=gene1051;Name=AC012314.15-005;name2=LILRB3 chr19 ENCODE exon 59417695 59417814 . - . Parent=gene1051 chr19 ENCODE CDS 59417695 59417814 . - 2 Parent=gene1051 chr19 ENCODE exon 59417962 59418246 . - . Parent=gene1051 chr19 ENCODE CDS 59417962 59418246 . - 2 Parent=gene1051 chr19 ENCODE exon 59418431 59418466 . - . Parent=gene1051 chr19 ENCODE CDS 59418431 59418466 . - 2 Parent=gene1051 chr19 ENCODE CDS 59418627 59418660 . - 0 Parent=gene1051 chr19 ENCODE exon 59418627 59418771 . - . Parent=gene1051 ### chr19 ENCODE gene 59432280 59438429 . - . ID=gene1052;Name=AC010492.1-002;name2=LILRA6 chr19 ENCODE exon 59432280 59432881 . - . Parent=gene1052 chr19 ENCODE exon 59434174 59434301 . - . Parent=gene1052 chr19 ENCODE exon 59434510 59434777 . - . Parent=gene1052 chr19 ENCODE exon 59435589 59435639 . - . Parent=gene1052 chr19 ENCODE exon 59435962 59436264 . - . Parent=gene1052 chr19 ENCODE exon 59436519 59436815 . - . Parent=gene1052 chr19 ENCODE exon 59437350 59437566 . - . Parent=gene1052 chr19 ENCODE exon 59437714 59437998 . - . Parent=gene1052 chr19 ENCODE exon 59438183 59438218 . - . Parent=gene1052 chr19 ENCODE exon 59438379 59438429 . - . Parent=gene1052 ### chr19 ENCODE gene 59434237 59438452 . - . ID=gene1053;Name=AC010492.1-003;name2=LILRA6 chr19 ENCODE exon 59434237 59434777 . - . Parent=gene1053 chr19 ENCODE CDS 59434641 59434777 . - 2 Parent=gene1053 chr19 ENCODE exon 59435589 59435639 . - . Parent=gene1053 chr19 ENCODE CDS 59435589 59435639 . - 2 Parent=gene1053 chr19 ENCODE exon 59435962 59436264 . - . Parent=gene1053 chr19 ENCODE CDS 59435962 59436264 . - 2 Parent=gene1053 chr19 ENCODE exon 59436519 59436815 . - . Parent=gene1053 chr19 ENCODE CDS 59436519 59436815 . - 2 Parent=gene1053 chr19 ENCODE exon 59437264 59437566 . - . Parent=gene1053 chr19 ENCODE CDS 59437264 59437566 . - 2 Parent=gene1053 chr19 ENCODE exon 59437714 59437998 . - . Parent=gene1053 chr19 ENCODE CDS 59437714 59437998 . - 2 Parent=gene1053 chr19 ENCODE exon 59438183 59438218 . - . Parent=gene1053 chr19 ENCODE CDS 59438183 59438218 . - 2 Parent=gene1053 chr19 ENCODE CDS 59438379 59438412 . - 0 Parent=gene1053 chr19 ENCODE exon 59438379 59438452 . - . Parent=gene1053 ### chr19 ENCODE gene 59434641 59438942 . - . ID=gene1054;Name=AC010492.1-001;name2=LILRA6 chr19 ENCODE exon 59434641 59434777 . - . Parent=gene1054 chr19 ENCODE CDS 59434641 59434777 . - 2 Parent=gene1054 chr19 ENCODE exon 59435962 59436264 . - . Parent=gene1054 chr19 ENCODE CDS 59435962 59436264 . - 2 Parent=gene1054 chr19 ENCODE exon 59436519 59436815 . - . Parent=gene1054 chr19 ENCODE CDS 59436519 59436815 . - 2 Parent=gene1054 chr19 ENCODE exon 59437264 59437566 . - . Parent=gene1054 chr19 ENCODE CDS 59437264 59437566 . - 2 Parent=gene1054 chr19 ENCODE exon 59437714 59437998 . - . Parent=gene1054 chr19 ENCODE CDS 59437714 59437998 . - 2 Parent=gene1054 chr19 ENCODE exon 59438183 59438218 . - . Parent=gene1054 chr19 ENCODE CDS 59438183 59438218 . - 2 Parent=gene1054 chr19 ENCODE CDS 59438379 59438412 . - 0 Parent=gene1054 chr19 ENCODE exon 59438379 59438463 . - . Parent=gene1054 chr19 ENCODE exon 59438857 59438942 . - . Parent=gene1054 ### chr19 ENCODE gene 59436726 59438433 . - . ID=gene1055;Name=AC010492.1-004;name2=LILRA6 chr19 ENCODE exon 59436726 59436815 . - . Parent=gene1055 chr19 ENCODE exon 59437264 59437566 . - . Parent=gene1055 chr19 ENCODE exon 59437714 59437998 . - . Parent=gene1055 chr19 ENCODE exon 59438183 59438433 . - . Parent=gene1055 ### chr19 ENCODE gene 59446075 59452976 . - . ID=gene1056;Name=AC010492.3-001;name2=LILRB5 chr19 ENCODE exon 59446075 59446608 . - . Parent=gene1056 chr19 ENCODE CDS 59446462 59446608 . - 0 Parent=gene1056 chr19 ENCODE exon 59447729 59447781 . - . Parent=gene1056 chr19 ENCODE CDS 59447729 59447781 . - 2 Parent=gene1056 chr19 ENCODE exon 59448041 59448078 . - . Parent=gene1056 chr19 ENCODE CDS 59448041 59448078 . - 1 Parent=gene1056 chr19 ENCODE exon 59448161 59448224 . - . Parent=gene1056 chr19 ENCODE CDS 59448161 59448224 . - 2 Parent=gene1056 chr19 ENCODE exon 59448546 59448662 . - . Parent=gene1056 chr19 ENCODE CDS 59448546 59448662 . - 2 Parent=gene1056 chr19 ENCODE exon 59449693 59449740 . - . Parent=gene1056 chr19 ENCODE CDS 59449693 59449740 . - 2 Parent=gene1056 chr19 ENCODE exon 59450040 59450090 . - . Parent=gene1056 chr19 ENCODE CDS 59450040 59450090 . - 2 Parent=gene1056 chr19 ENCODE exon 59450410 59450712 . - . Parent=gene1056 chr19 ENCODE CDS 59450410 59450712 . - 2 Parent=gene1056 chr19 ENCODE exon 59450961 59451257 . - . Parent=gene1056 chr19 ENCODE CDS 59450961 59451257 . - 2 Parent=gene1056 chr19 ENCODE exon 59451718 59452017 . - . Parent=gene1056 chr19 ENCODE CDS 59451718 59452017 . - 2 Parent=gene1056 chr19 ENCODE exon 59452164 59452448 . - . Parent=gene1056 chr19 ENCODE CDS 59452164 59452448 . - 2 Parent=gene1056 chr19 ENCODE exon 59452636 59452671 . - . Parent=gene1056 chr19 ENCODE CDS 59452636 59452671 . - 2 Parent=gene1056 chr19 ENCODE CDS 59452835 59452868 . - 0 Parent=gene1056 chr19 ENCODE exon 59452835 59452976 . - . Parent=gene1056 ### chr19 ENCODE gene 59446101 59452967 . - . ID=gene1057;Name=AC010492.3-004;name2=LILRB5 chr19 ENCODE exon 59446101 59446844 . - . Parent=gene1057 chr19 ENCODE exon 59447729 59447781 . - . Parent=gene1057 chr19 ENCODE exon 59448041 59448078 . - . Parent=gene1057 chr19 ENCODE exon 59448161 59448224 . - . Parent=gene1057 chr19 ENCODE exon 59448546 59449743 . - . Parent=gene1057 chr19 ENCODE exon 59450040 59450090 . - . Parent=gene1057 chr19 ENCODE exon 59450410 59450712 . - . Parent=gene1057 chr19 ENCODE exon 59450961 59451257 . - . Parent=gene1057 chr19 ENCODE exon 59451718 59452017 . - . Parent=gene1057 chr19 ENCODE exon 59452164 59452332 . - . Parent=gene1057 chr19 ENCODE exon 59452636 59452671 . - . Parent=gene1057 chr19 ENCODE exon 59452835 59452967 . - . Parent=gene1057 ### chr19 ENCODE gene 59446143 59452937 . - . ID=gene1058;Name=AC010492.3-002;name2=LILRB5 chr19 ENCODE exon 59446143 59446608 . - . Parent=gene1058 chr19 ENCODE CDS 59446462 59446608 . - 0 Parent=gene1058 chr19 ENCODE exon 59447729 59447781 . - . Parent=gene1058 chr19 ENCODE CDS 59447729 59447781 . - 2 Parent=gene1058 chr19 ENCODE exon 59448041 59448078 . - . Parent=gene1058 chr19 ENCODE CDS 59448041 59448078 . - 1 Parent=gene1058 chr19 ENCODE exon 59448161 59448224 . - . Parent=gene1058 chr19 ENCODE CDS 59448161 59448224 . - 2 Parent=gene1058 chr19 ENCODE exon 59448546 59448662 . - . Parent=gene1058 chr19 ENCODE CDS 59448546 59448662 . - 2 Parent=gene1058 chr19 ENCODE exon 59449693 59449743 . - . Parent=gene1058 chr19 ENCODE CDS 59449693 59449743 . - 2 Parent=gene1058 chr19 ENCODE exon 59450040 59450090 . - . Parent=gene1058 chr19 ENCODE CDS 59450040 59450090 . - 2 Parent=gene1058 chr19 ENCODE exon 59450410 59450712 . - . Parent=gene1058 chr19 ENCODE CDS 59450410 59450712 . - 2 Parent=gene1058 chr19 ENCODE exon 59450961 59451257 . - . Parent=gene1058 chr19 ENCODE CDS 59450961 59451257 . - 2 Parent=gene1058 chr19 ENCODE exon 59452164 59452448 . - . Parent=gene1058 chr19 ENCODE CDS 59452164 59452448 . - 2 Parent=gene1058 chr19 ENCODE exon 59452636 59452671 . - . Parent=gene1058 chr19 ENCODE CDS 59452636 59452671 . - 2 Parent=gene1058 chr19 ENCODE CDS 59452835 59452868 . - 0 Parent=gene1058 chr19 ENCODE exon 59452835 59452937 . - . Parent=gene1058 ### chr19 ENCODE gene 59446222 59452920 . - . ID=gene1059;Name=AC010492.3-003;name2=LILRB5 chr19 ENCODE exon 59446222 59450712 . - . Parent=gene1059 chr19 ENCODE exon 59450961 59451257 . - . Parent=gene1059 chr19 ENCODE exon 59452164 59452920 . - . Parent=gene1059 ### chr19 ENCODE gene 59446231 59452949 . - . ID=gene1060;Name=AC010492.3-005;name2=LILRB5 chr19 ENCODE exon 59446231 59446844 . - . Parent=gene1060 chr19 ENCODE exon 59447729 59447781 . - . Parent=gene1060 chr19 ENCODE exon 59448041 59448078 . - . Parent=gene1060 chr19 ENCODE exon 59448161 59448224 . - . Parent=gene1060 chr19 ENCODE exon 59448546 59449740 . - . Parent=gene1060 chr19 ENCODE exon 59450040 59450491 . - . Parent=gene1060 chr19 ENCODE exon 59452285 59452448 . - . Parent=gene1060 chr19 ENCODE exon 59452636 59452671 . - . Parent=gene1060 chr19 ENCODE exon 59452835 59452949 . - . Parent=gene1060 ### chr19 ENCODE gene 59469487 59476550 . - . ID=gene1061;Name=AC010518.1-001;name2=LILRB2 chr19 ENCODE exon 59469487 59470495 . - . Parent=gene1061 chr19 ENCODE CDS 59470349 59470495 . - 0 Parent=gene1061 chr19 ENCODE exon 59471617 59471669 . - . Parent=gene1061 chr19 ENCODE CDS 59471617 59471669 . - 2 Parent=gene1061 chr19 ENCODE exon 59471930 59471967 . - . Parent=gene1061 chr19 ENCODE CDS 59471930 59471967 . - 1 Parent=gene1061 chr19 ENCODE exon 59472047 59472122 . - . Parent=gene1061 chr19 ENCODE CDS 59472047 59472122 . - 2 Parent=gene1061 chr19 ENCODE exon 59472473 59472595 . - . Parent=gene1061 chr19 ENCODE CDS 59472473 59472595 . - 2 Parent=gene1061 chr19 ENCODE exon 59473216 59473263 . - . Parent=gene1061 chr19 ENCODE CDS 59473216 59473263 . - 2 Parent=gene1061 chr19 ENCODE exon 59473555 59473605 . - . Parent=gene1061 chr19 ENCODE CDS 59473555 59473605 . - 2 Parent=gene1061 chr19 ENCODE exon 59473926 59474228 . - . Parent=gene1061 chr19 ENCODE CDS 59473926 59474228 . - 2 Parent=gene1061 chr19 ENCODE exon 59474479 59474775 . - . Parent=gene1061 chr19 ENCODE CDS 59474479 59474775 . - 2 Parent=gene1061 chr19 ENCODE exon 59475012 59475314 . - . Parent=gene1061 chr19 ENCODE CDS 59475012 59475314 . - 2 Parent=gene1061 chr19 ENCODE exon 59475458 59475742 . - . Parent=gene1061 chr19 ENCODE CDS 59475458 59475742 . - 2 Parent=gene1061 chr19 ENCODE exon 59475931 59475966 . - . Parent=gene1061 chr19 ENCODE CDS 59475931 59475966 . - 2 Parent=gene1061 chr19 ENCODE CDS 59476130 59476163 . - 0 Parent=gene1061 chr19 ENCODE exon 59476130 59476211 . - . Parent=gene1061 chr19 ENCODE exon 59476471 59476550 . - . Parent=gene1061 ### chr19 ENCODE gene 59470018 59476851 . - . ID=gene1062;Name=AC010518.1-004;name2=LILRB2 chr19 ENCODE exon 59470018 59470495 . - . Parent=gene1062 chr19 ENCODE CDS 59470349 59470495 . - 0 Parent=gene1062 chr19 ENCODE exon 59471617 59471669 . - . Parent=gene1062 chr19 ENCODE CDS 59471617 59471669 . - 2 Parent=gene1062 chr19 ENCODE exon 59471930 59471967 . - . Parent=gene1062 chr19 ENCODE CDS 59471930 59471967 . - 1 Parent=gene1062 chr19 ENCODE exon 59472047 59472122 . - . Parent=gene1062 chr19 ENCODE CDS 59472047 59472122 . - 2 Parent=gene1062 chr19 ENCODE exon 59472473 59472595 . - . Parent=gene1062 chr19 ENCODE CDS 59472473 59472595 . - 2 Parent=gene1062 chr19 ENCODE exon 59473216 59473263 . - . Parent=gene1062 chr19 ENCODE CDS 59473216 59473263 . - 2 Parent=gene1062 chr19 ENCODE exon 59473555 59473605 . - . Parent=gene1062 chr19 ENCODE CDS 59473555 59473605 . - 2 Parent=gene1062 chr19 ENCODE exon 59473926 59474228 . - . Parent=gene1062 chr19 ENCODE CDS 59473926 59474228 . - 2 Parent=gene1062 chr19 ENCODE exon 59474479 59474775 . - . Parent=gene1062 chr19 ENCODE CDS 59474479 59474775 . - 2 Parent=gene1062 chr19 ENCODE exon 59475012 59475314 . - . Parent=gene1062 chr19 ENCODE CDS 59475012 59475314 . - 2 Parent=gene1062 chr19 ENCODE exon 59475458 59475742 . - . Parent=gene1062 chr19 ENCODE CDS 59475458 59475742 . - 2 Parent=gene1062 chr19 ENCODE exon 59475931 59475966 . - . Parent=gene1062 chr19 ENCODE CDS 59475931 59475966 . - 2 Parent=gene1062 chr19 ENCODE CDS 59476130 59476163 . - 0 Parent=gene1062 chr19 ENCODE exon 59476130 59476211 . - . Parent=gene1062 chr19 ENCODE exon 59476628 59476851 . - . Parent=gene1062 ### chr19 ENCODE gene 59470132 59474210 . - . ID=gene1063;Name=AC010518.1-007;name2=LILRB2 chr19 ENCODE exon 59470132 59470495 . - . Parent=gene1063 chr19 ENCODE exon 59471617 59471669 . - . Parent=gene1063 chr19 ENCODE exon 59471913 59471967 . - . Parent=gene1063 chr19 ENCODE exon 59472047 59472122 . - . Parent=gene1063 chr19 ENCODE exon 59472473 59472595 . - . Parent=gene1063 chr19 ENCODE exon 59473216 59473266 . - . Parent=gene1063 chr19 ENCODE exon 59473555 59473605 . - . Parent=gene1063 chr19 ENCODE exon 59473926 59474210 . - . Parent=gene1063 ### chr19 ENCODE gene 59470132 59476165 . - . ID=gene1064;Name=AC010518.1-005;name2=LILRB2 chr19 ENCODE exon 59470132 59470495 . - . Parent=gene1064 chr19 ENCODE exon 59471617 59471669 . - . Parent=gene1064 chr19 ENCODE CDS 59471658 59471669 . - 0 Parent=gene1064 chr19 ENCODE exon 59471930 59471967 . - . Parent=gene1064 chr19 ENCODE CDS 59471930 59471967 . - 2 Parent=gene1064 chr19 ENCODE exon 59472473 59472595 . - . Parent=gene1064 chr19 ENCODE CDS 59472473 59472595 . - 2 Parent=gene1064 chr19 ENCODE exon 59473216 59473266 . - . Parent=gene1064 chr19 ENCODE CDS 59473216 59473266 . - 2 Parent=gene1064 chr19 ENCODE exon 59473555 59473605 . - . Parent=gene1064 chr19 ENCODE CDS 59473555 59473605 . - 2 Parent=gene1064 chr19 ENCODE exon 59473926 59474228 . - . Parent=gene1064 chr19 ENCODE CDS 59473926 59474228 . - 2 Parent=gene1064 chr19 ENCODE exon 59474479 59474775 . - . Parent=gene1064 chr19 ENCODE CDS 59474479 59474775 . - 2 Parent=gene1064 chr19 ENCODE exon 59475012 59475314 . - . Parent=gene1064 chr19 ENCODE CDS 59475012 59475314 . - 2 Parent=gene1064 chr19 ENCODE exon 59475458 59475742 . - . Parent=gene1064 chr19 ENCODE CDS 59475458 59475742 . - 2 Parent=gene1064 chr19 ENCODE exon 59475931 59475966 . - . Parent=gene1064 chr19 ENCODE CDS 59475931 59475966 . - 2 Parent=gene1064 chr19 ENCODE CDS 59476130 59476163 . - 0 Parent=gene1064 chr19 ENCODE exon 59476130 59476165 . - . Parent=gene1064 ### chr19 ENCODE gene 59470132 59476764 . - . ID=gene1065;Name=AC010518.1-002;name2=LILRB2 chr19 ENCODE exon 59470132 59470495 . - . Parent=gene1065 chr19 ENCODE exon 59471617 59471669 . - . Parent=gene1065 chr19 ENCODE exon 59471930 59471967 . - . Parent=gene1065 chr19 ENCODE exon 59472047 59472122 . - . Parent=gene1065 chr19 ENCODE exon 59472473 59473266 . - . Parent=gene1065 chr19 ENCODE exon 59473555 59473605 . - . Parent=gene1065 chr19 ENCODE exon 59473926 59474228 . - . Parent=gene1065 chr19 ENCODE exon 59474479 59474775 . - . Parent=gene1065 chr19 ENCODE exon 59475012 59475314 . - . Parent=gene1065 chr19 ENCODE exon 59475458 59475742 . - . Parent=gene1065 chr19 ENCODE exon 59475931 59475966 . - . Parent=gene1065 chr19 ENCODE exon 59476130 59476211 . - . Parent=gene1065 chr19 ENCODE exon 59476628 59476764 . - . Parent=gene1065 ### chr19 ENCODE gene 59470132 59476851 . - . ID=gene1066;Name=AC010518.1-003;name2=LILRB2 chr19 ENCODE exon 59470132 59470495 . - . Parent=gene1066 chr19 ENCODE CDS 59470349 59470495 . - 0 Parent=gene1066 chr19 ENCODE exon 59471617 59471669 . - . Parent=gene1066 chr19 ENCODE CDS 59471617 59471669 . - 2 Parent=gene1066 chr19 ENCODE exon 59471930 59471967 . - . Parent=gene1066 chr19 ENCODE CDS 59471930 59471967 . - 1 Parent=gene1066 chr19 ENCODE exon 59472047 59472122 . - . Parent=gene1066 chr19 ENCODE CDS 59472047 59472122 . - 2 Parent=gene1066 chr19 ENCODE exon 59472473 59472595 . - . Parent=gene1066 chr19 ENCODE CDS 59472473 59472595 . - 2 Parent=gene1066 chr19 ENCODE exon 59473216 59473266 . - . Parent=gene1066 chr19 ENCODE CDS 59473216 59473266 . - 2 Parent=gene1066 chr19 ENCODE exon 59473555 59473605 . - . Parent=gene1066 chr19 ENCODE CDS 59473555 59473605 . - 2 Parent=gene1066 chr19 ENCODE exon 59473926 59474228 . - . Parent=gene1066 chr19 ENCODE CDS 59473926 59474228 . - 2 Parent=gene1066 chr19 ENCODE exon 59474479 59474775 . - . Parent=gene1066 chr19 ENCODE CDS 59474479 59474775 . - 2 Parent=gene1066 chr19 ENCODE exon 59475012 59475314 . - . Parent=gene1066 chr19 ENCODE CDS 59475012 59475314 . - 2 Parent=gene1066 chr19 ENCODE exon 59475458 59475742 . - . Parent=gene1066 chr19 ENCODE CDS 59475458 59475742 . - 2 Parent=gene1066 chr19 ENCODE exon 59475931 59475966 . - . Parent=gene1066 chr19 ENCODE CDS 59475931 59475966 . - 2 Parent=gene1066 chr19 ENCODE CDS 59476130 59476163 . - 0 Parent=gene1066 chr19 ENCODE exon 59476130 59476211 . - . Parent=gene1066 chr19 ENCODE exon 59476628 59476851 . - . Parent=gene1066 ### chr19 ENCODE gene 59475517 59476128 . - . ID=gene1067;Name=AC010518.1-008;name2=LILRB2 chr19 ENCODE exon 59475517 59475742 . - . Parent=gene1067 chr19 ENCODE exon 59475931 59476128 . - . Parent=gene1067 ### chr19 ENCODE gene 59491666 59495985 . - . ID=gene1068;Name=AC010518.2-002;name2=LILRA3 chr19 ENCODE exon 59491666 59491916 . - . Parent=gene1068 chr19 ENCODE CDS 59491858 59491916 . - 2 Parent=gene1068 chr19 ENCODE exon 59493739 59494041 . - . Parent=gene1068 chr19 ENCODE CDS 59493739 59494041 . - 2 Parent=gene1068 chr19 ENCODE exon 59494295 59494591 . - . Parent=gene1068 chr19 ENCODE CDS 59494295 59494591 . - 2 Parent=gene1068 chr19 ENCODE exon 59495020 59495130 . - . Parent=gene1068 chr19 ENCODE CDS 59495020 59495130 . - 2 Parent=gene1068 chr19 ENCODE exon 59495278 59495565 . - . Parent=gene1068 chr19 ENCODE CDS 59495278 59495565 . - 2 Parent=gene1068 chr19 ENCODE exon 59495755 59495790 . - . Parent=gene1068 chr19 ENCODE CDS 59495755 59495790 . - 2 Parent=gene1068 chr19 ENCODE exon 59495952 59495985 . - . Parent=gene1068 chr19 ENCODE CDS 59495952 59495985 . - 0 Parent=gene1068 ### chr19 ENCODE gene 59491666 59496077 . - . ID=gene1069;name2=LILRA3;Name=AC010518.2-001 chr19 ENCODE exon 59491666 59491916 . - . Parent=gene1069 chr19 ENCODE CDS 59491858 59491916 . - 2 Parent=gene1069 chr19 ENCODE exon 59493739 59494041 . - . Parent=gene1069 chr19 ENCODE CDS 59493739 59494041 . - 2 Parent=gene1069 chr19 ENCODE exon 59494295 59494591 . - . Parent=gene1069 chr19 ENCODE CDS 59494295 59494591 . - 2 Parent=gene1069 chr19 ENCODE exon 59494828 59495130 . - . Parent=gene1069 chr19 ENCODE CDS 59494828 59495130 . - 2 Parent=gene1069 chr19 ENCODE exon 59495278 59495565 . - . Parent=gene1069 chr19 ENCODE CDS 59495278 59495565 . - 2 Parent=gene1069 chr19 ENCODE exon 59495755 59495790 . - . Parent=gene1069 chr19 ENCODE CDS 59495755 59495790 . - 2 Parent=gene1069 chr19 ENCODE CDS 59495952 59495985 . - 0 Parent=gene1069 chr19 ENCODE exon 59495952 59496077 . - . Parent=gene1069 ### chr19 ENCODE gene 59491666 59501764 . - . ID=gene1070;Name=AC010518.2-003;name2=LILRA3 chr19 ENCODE exon 59491666 59491916 . - . Parent=gene1070 chr19 ENCODE CDS 59491858 59491916 . - 2 Parent=gene1070 chr19 ENCODE exon 59493739 59494041 . - . Parent=gene1070 chr19 ENCODE CDS 59493739 59494041 . - 2 Parent=gene1070 chr19 ENCODE exon 59494295 59494591 . - . Parent=gene1070 chr19 ENCODE CDS 59494295 59494591 . - 2 Parent=gene1070 chr19 ENCODE exon 59494828 59495130 . - . Parent=gene1070 chr19 ENCODE CDS 59494828 59495130 . - 2 Parent=gene1070 chr19 ENCODE exon 59495278 59495565 . - . Parent=gene1070 chr19 ENCODE CDS 59495278 59495565 . - 2 Parent=gene1070 chr19 ENCODE exon 59495755 59495790 . - . Parent=gene1070 chr19 ENCODE CDS 59495755 59495790 . - 2 Parent=gene1070 chr19 ENCODE CDS 59495952 59495985 . - 0 Parent=gene1070 chr19 ENCODE exon 59495952 59496033 . - . Parent=gene1070 chr19 ENCODE exon 59496416 59496533 . - . Parent=gene1070 chr19 ENCODE exon 59496716 59496780 . - . Parent=gene1070 chr19 ENCODE exon 59501004 59501039 . - . Parent=gene1070 chr19 ENCODE exon 59501664 59501764 . - . Parent=gene1070 ### chr19 ENCODE gene 59510165 59516221 . - . ID=gene1071;Name=AC008984.1-001;name2=LILRA5 chr19 ENCODE exon 59510165 59510646 . - . Parent=gene1071 chr19 ENCODE CDS 59510510 59510646 . - 2 Parent=gene1071 chr19 ENCODE exon 59510795 59510845 . - . Parent=gene1071 chr19 ENCODE CDS 59510795 59510845 . - 2 Parent=gene1071 chr19 ENCODE exon 59514496 59514798 . - . Parent=gene1071 chr19 ENCODE CDS 59514496 59514798 . - 2 Parent=gene1071 chr19 ENCODE exon 59514946 59515230 . - . Parent=gene1071 chr19 ENCODE CDS 59514946 59515230 . - 2 Parent=gene1071 chr19 ENCODE exon 59515417 59515452 . - . Parent=gene1071 chr19 ENCODE CDS 59515417 59515452 . - 2 Parent=gene1071 chr19 ENCODE exon 59515619 59515703 . - . Parent=gene1071 chr19 ENCODE CDS 59515619 59515703 . - 0 Parent=gene1071 chr19 ENCODE CDS 59516099 59516101 . - 0 Parent=gene1071 chr19 ENCODE exon 59516099 59516221 . - . Parent=gene1071 ### chr19 ENCODE gene 59510349 59516156 . - . ID=gene1072;Name=AC008984.1-002;name2=LILRA5 chr19 ENCODE exon 59510349 59510646 . - . Parent=gene1072 chr19 ENCODE CDS 59510510 59510646 . - 2 Parent=gene1072 chr19 ENCODE exon 59510795 59510845 . - . Parent=gene1072 chr19 ENCODE CDS 59510795 59510845 . - 2 Parent=gene1072 chr19 ENCODE exon 59514496 59514798 . - . Parent=gene1072 chr19 ENCODE CDS 59514496 59514798 . - 2 Parent=gene1072 chr19 ENCODE exon 59514946 59515230 . - . Parent=gene1072 chr19 ENCODE CDS 59514946 59515230 . - 2 Parent=gene1072 chr19 ENCODE exon 59515619 59515703 . - . Parent=gene1072 chr19 ENCODE CDS 59515619 59515703 . - 0 Parent=gene1072 chr19 ENCODE CDS 59516099 59516101 . - 0 Parent=gene1072 chr19 ENCODE exon 59516099 59516156 . - . Parent=gene1072 ### chr19 ENCODE gene 59510556 59514745 . - . ID=gene1073;Name=AC008984.1-005;name2=LILRA5 chr19 ENCODE exon 59510556 59510845 . - . Parent=gene1073 chr19 ENCODE exon 59514496 59514745 . - . Parent=gene1073 ### chr19 ENCODE gene 59514247 59516173 . - . ID=gene1074;Name=AC008984.1-004;name2=LILRA5 chr19 ENCODE exon 59514247 59514798 . - . Parent=gene1074 chr19 ENCODE exon 59514946 59515230 . - . Parent=gene1074 chr19 ENCODE exon 59515619 59515703 . - . Parent=gene1074 chr19 ENCODE exon 59516099 59516173 . - . Parent=gene1074 ### chr19 ENCODE gene 59514365 59516180 . - . ID=gene1075;Name=AC008984.1-003;name2=LILRA5 chr19 ENCODE exon 59514365 59514798 . - . Parent=gene1075 chr19 ENCODE exon 59514946 59515230 . - . Parent=gene1075 chr19 ENCODE exon 59515417 59515452 . - . Parent=gene1075 chr19 ENCODE exon 59515619 59515703 . - . Parent=gene1075 chr19 ENCODE exon 59516099 59516180 . - . Parent=gene1075 ### chr19 ENCODE gene 59536268 59542233 . - . ID=gene1076;Name=AC008984.3-001;name2=LILRA4 chr19 ENCODE exon 59536268 59536848 . - . Parent=gene1076 chr19 ENCODE CDS 59536655 59536848 . - 2 Parent=gene1076 chr19 ENCODE exon 59536998 59537048 . - . Parent=gene1076 chr19 ENCODE CDS 59536998 59537048 . - 2 Parent=gene1076 chr19 ENCODE exon 59539924 59540226 . - . Parent=gene1076 chr19 ENCODE CDS 59539924 59540226 . - 2 Parent=gene1076 chr19 ENCODE exon 59540483 59540779 . - . Parent=gene1076 chr19 ENCODE CDS 59540483 59540779 . - 2 Parent=gene1076 chr19 ENCODE exon 59541019 59541318 . - . Parent=gene1076 chr19 ENCODE CDS 59541019 59541318 . - 2 Parent=gene1076 chr19 ENCODE exon 59541479 59541763 . - . Parent=gene1076 chr19 ENCODE CDS 59541479 59541763 . - 2 Parent=gene1076 chr19 ENCODE exon 59541949 59541984 . - . Parent=gene1076 chr19 ENCODE CDS 59541949 59541984 . - 2 Parent=gene1076 chr19 ENCODE CDS 59542143 59542176 . - 0 Parent=gene1076 chr19 ENCODE exon 59542143 59542233 . - . Parent=gene1076 ### chr19 ENCODE gene 59541295 59542188 . - . ID=gene1077;Name=AC008984.3-002;name2=LILRA4 chr19 ENCODE exon 59541295 59541318 . - . Parent=gene1077 chr19 ENCODE exon 59541479 59541763 . - . Parent=gene1077 chr19 ENCODE exon 59541949 59542188 . - . Parent=gene1077 ### chr19 ENCODE gene 59557074 59559433 . - . ID=gene1078;Name=AC008746.1-008;name2=LAIR1 chr19 ENCODE exon 59557074 59558835 . - . Parent=gene1078 chr19 ENCODE exon 59559375 59559433 . - . Parent=gene1078 ### chr19 ENCODE gene 59557174 59573977 . - . ID=gene1079;Name=AC008746.1-005;name2=LAIR1 chr19 ENCODE exon 59557174 59558835 . - . Parent=gene1079 chr19 ENCODE CDS 59558689 59558835 . - 0 Parent=gene1079 chr19 ENCODE exon 59559375 59559427 . - . Parent=gene1079 chr19 ENCODE CDS 59559375 59559427 . - 2 Parent=gene1079 chr19 ENCODE exon 59559651 59559688 . - . Parent=gene1079 chr19 ENCODE CDS 59559651 59559688 . - 1 Parent=gene1079 chr19 ENCODE exon 59559777 59559819 . - . Parent=gene1079 chr19 ENCODE CDS 59559777 59559819 . - 2 Parent=gene1079 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1079 chr19 ENCODE CDS 59559912 59560040 . - 2 Parent=gene1079 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1079 chr19 ENCODE CDS 59560349 59560387 . - 2 Parent=gene1079 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1079 chr19 ENCODE CDS 59563441 59563491 . - 2 Parent=gene1079 chr19 ENCODE exon 59564335 59564628 . - . Parent=gene1079 chr19 ENCODE CDS 59564335 59564628 . - 2 Parent=gene1079 chr19 ENCODE CDS 59573681 59573696 . - 0 Parent=gene1079 chr19 ENCODE exon 59573681 59573977 . - . Parent=gene1079 ### chr19 ENCODE gene 59558096 59560768 . - . ID=gene1080;Name=AC008746.1-007;name2=LAIR1 chr19 ENCODE exon 59558096 59558835 . - . Parent=gene1080 chr19 ENCODE exon 59559375 59559427 . - . Parent=gene1080 chr19 ENCODE exon 59559651 59559688 . - . Parent=gene1080 chr19 ENCODE exon 59559777 59559819 . - . Parent=gene1080 chr19 ENCODE exon 59559912 59560768 . - . Parent=gene1080 ### chr19 ENCODE gene 59558096 59568284 . - . ID=gene1081;Name=AC008746.1-003;name2=LAIR1 chr19 ENCODE exon 59558096 59558835 . - . Parent=gene1081 chr19 ENCODE CDS 59558689 59558835 . - 0 Parent=gene1081 chr19 ENCODE exon 59559375 59559427 . - . Parent=gene1081 chr19 ENCODE CDS 59559375 59559427 . - 2 Parent=gene1081 chr19 ENCODE exon 59559651 59559688 . - . Parent=gene1081 chr19 ENCODE CDS 59559651 59559688 . - 1 Parent=gene1081 chr19 ENCODE exon 59559777 59559819 . - . Parent=gene1081 chr19 ENCODE CDS 59559777 59559819 . - 2 Parent=gene1081 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1081 chr19 ENCODE CDS 59559912 59560040 . - 2 Parent=gene1081 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1081 chr19 ENCODE CDS 59560349 59560387 . - 2 Parent=gene1081 chr19 ENCODE exon 59564335 59564628 . - . Parent=gene1081 chr19 ENCODE CDS 59564335 59564628 . - 2 Parent=gene1081 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1081 chr19 ENCODE CDS 59567714 59567749 . - 2 Parent=gene1081 chr19 ENCODE CDS 59568190 59568223 . - 0 Parent=gene1081 chr19 ENCODE exon 59568190 59568284 . - . Parent=gene1081 ### chr19 ENCODE gene 59558096 59568376 . - . ID=gene1082;Name=AC008746.1-001;name2=LAIR1 chr19 ENCODE exon 59558096 59558835 . - . Parent=gene1082 chr19 ENCODE CDS 59558689 59558835 . - 0 Parent=gene1082 chr19 ENCODE exon 59559375 59559427 . - . Parent=gene1082 chr19 ENCODE CDS 59559375 59559427 . - 2 Parent=gene1082 chr19 ENCODE exon 59559651 59559688 . - . Parent=gene1082 chr19 ENCODE CDS 59559651 59559688 . - 1 Parent=gene1082 chr19 ENCODE exon 59559777 59559819 . - . Parent=gene1082 chr19 ENCODE CDS 59559777 59559819 . - 2 Parent=gene1082 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1082 chr19 ENCODE CDS 59559912 59560040 . - 2 Parent=gene1082 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1082 chr19 ENCODE CDS 59560349 59560387 . - 2 Parent=gene1082 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1082 chr19 ENCODE CDS 59563441 59563491 . - 2 Parent=gene1082 chr19 ENCODE exon 59564335 59564628 . - . Parent=gene1082 chr19 ENCODE CDS 59564335 59564628 . - 2 Parent=gene1082 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1082 chr19 ENCODE CDS 59567714 59567749 . - 2 Parent=gene1082 chr19 ENCODE CDS 59568190 59568223 . - 0 Parent=gene1082 chr19 ENCODE exon 59568190 59568376 . - . Parent=gene1082 ### chr19 ENCODE gene 59558096 59568414 . - . ID=gene1083;Name=AC008746.1-002;name2=LAIR1 chr19 ENCODE exon 59558096 59558835 . - . Parent=gene1083 chr19 ENCODE CDS 59558689 59558835 . - 0 Parent=gene1083 chr19 ENCODE exon 59559375 59559427 . - . Parent=gene1083 chr19 ENCODE CDS 59559375 59559427 . - 2 Parent=gene1083 chr19 ENCODE exon 59559651 59559688 . - . Parent=gene1083 chr19 ENCODE CDS 59559651 59559688 . - 1 Parent=gene1083 chr19 ENCODE exon 59559777 59559819 . - . Parent=gene1083 chr19 ENCODE CDS 59559777 59559819 . - 2 Parent=gene1083 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1083 chr19 ENCODE CDS 59559912 59560040 . - 2 Parent=gene1083 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1083 chr19 ENCODE CDS 59560349 59560387 . - 2 Parent=gene1083 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1083 chr19 ENCODE CDS 59563441 59563491 . - 2 Parent=gene1083 chr19 ENCODE exon 59564335 59564625 . - . Parent=gene1083 chr19 ENCODE CDS 59564335 59564625 . - 2 Parent=gene1083 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1083 chr19 ENCODE CDS 59567714 59567749 . - 2 Parent=gene1083 chr19 ENCODE CDS 59568190 59568223 . - 0 Parent=gene1083 chr19 ENCODE exon 59568190 59568414 . - . Parent=gene1083 ### chr19 ENCODE gene 59558622 59564612 . - . ID=gene1084;Name=AC008746.1-013;name2=LAIR1 chr19 ENCODE exon 59558622 59558835 . - . Parent=gene1084 chr19 ENCODE exon 59559375 59559427 . - . Parent=gene1084 chr19 ENCODE exon 59559651 59559819 . - . Parent=gene1084 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1084 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1084 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1084 chr19 ENCODE exon 59564429 59564612 . - . Parent=gene1084 ### chr19 ENCODE gene 59558679 59568289 . - . ID=gene1085;Name=AC008746.1-009;name2=LAIR1 chr19 ENCODE exon 59558679 59558835 . - . Parent=gene1085 chr19 ENCODE exon 59559375 59559427 . - . Parent=gene1085 chr19 ENCODE exon 59559651 59559688 . - . Parent=gene1085 chr19 ENCODE exon 59559777 59559819 . - . Parent=gene1085 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1085 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1085 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1085 chr19 ENCODE exon 59564429 59564628 . - . Parent=gene1085 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1085 chr19 ENCODE exon 59568190 59568289 . - . Parent=gene1085 ### chr19 ENCODE gene 59558688 59568226 . - . ID=gene1086;Name=AC008746.1-004;name2=LAIR1 chr19 ENCODE exon 59558688 59558835 . - . Parent=gene1086 chr19 ENCODE CDS 59558689 59558835 . - 0 Parent=gene1086 chr19 ENCODE exon 59559375 59559427 . - . Parent=gene1086 chr19 ENCODE CDS 59559375 59559427 . - 2 Parent=gene1086 chr19 ENCODE exon 59559651 59559688 . - . Parent=gene1086 chr19 ENCODE CDS 59559651 59559688 . - 1 Parent=gene1086 chr19 ENCODE exon 59559777 59559819 . - . Parent=gene1086 chr19 ENCODE CDS 59559777 59559819 . - 2 Parent=gene1086 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1086 chr19 ENCODE CDS 59559912 59560040 . - 2 Parent=gene1086 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1086 chr19 ENCODE CDS 59560349 59560387 . - 2 Parent=gene1086 chr19 ENCODE exon 59564335 59564625 . - . Parent=gene1086 chr19 ENCODE CDS 59564335 59564625 . - 2 Parent=gene1086 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1086 chr19 ENCODE CDS 59567714 59567749 . - 2 Parent=gene1086 chr19 ENCODE CDS 59568190 59568223 . - 0 Parent=gene1086 chr19 ENCODE exon 59568190 59568226 . - . Parent=gene1086 ### chr19 ENCODE gene 59558688 59568226 . - . ID=gene1087;Name=AC008746.1-006;name2=LAIR1 chr19 ENCODE exon 59558688 59558835 . - . Parent=gene1087 chr19 ENCODE exon 59559375 59559427 . - . Parent=gene1087 chr19 ENCODE exon 59559651 59559819 . - . Parent=gene1087 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1087 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1087 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1087 chr19 ENCODE exon 59564335 59564628 . - . Parent=gene1087 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1087 chr19 ENCODE exon 59568190 59568226 . - . Parent=gene1087 ### chr19 ENCODE gene 59558767 59568255 . - . ID=gene1088;Name=AC008746.1-011;name2=LAIR1 chr19 ENCODE exon 59558767 59558835 . - . Parent=gene1088 chr19 ENCODE exon 59559375 59559427 . - . Parent=gene1088 chr19 ENCODE exon 59559651 59559688 . - . Parent=gene1088 chr19 ENCODE exon 59559777 59559819 . - . Parent=gene1088 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1088 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1088 chr19 ENCODE exon 59563262 59563491 . - . Parent=gene1088 chr19 ENCODE exon 59564429 59564628 . - . Parent=gene1088 chr19 ENCODE exon 59567714 59567905 . - . Parent=gene1088 chr19 ENCODE exon 59568190 59568255 . - . Parent=gene1088 ### chr19 ENCODE gene 59559401 59568509 . - . ID=gene1089;Name=AC008746.1-019;name2=LAIR1 chr19 ENCODE exon 59559401 59559427 . - . Parent=gene1089 chr19 ENCODE exon 59559651 59559688 . - . Parent=gene1089 chr19 ENCODE exon 59559777 59559819 . - . Parent=gene1089 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1089 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1089 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1089 chr19 ENCODE exon 59564429 59564628 . - . Parent=gene1089 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1089 chr19 ENCODE exon 59568449 59568509 . - . Parent=gene1089 ### chr19 ENCODE gene 59559658 59568286 . - . ID=gene1090;name2=LAIR1;Name=AC008746.1-010 chr19 ENCODE exon 59559658 59559688 . - . Parent=gene1090 chr19 ENCODE exon 59559777 59559819 . - . Parent=gene1090 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1090 chr19 ENCODE exon 59560133 59560387 . - . Parent=gene1090 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1090 chr19 ENCODE exon 59564335 59564628 . - . Parent=gene1090 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1090 chr19 ENCODE exon 59568190 59568286 . - . Parent=gene1090 ### chr19 ENCODE gene 59559707 59561050 . - . ID=gene1091;Name=AC008746.1-014;name2=LAIR1 chr19 ENCODE exon 59559707 59559819 . - . Parent=gene1091 chr19 ENCODE exon 59559912 59560040 . - . Parent=gene1091 chr19 ENCODE exon 59560349 59561050 . - . Parent=gene1091 ### chr19 ENCODE gene 59559978 59568518 . - . ID=gene1092;Name=AC008746.1-018;name2=LAIR1 chr19 ENCODE exon 59559978 59560040 . - . Parent=gene1092 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1092 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1092 chr19 ENCODE exon 59564335 59564625 . - . Parent=gene1092 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1092 chr19 ENCODE exon 59568449 59568518 . - . Parent=gene1092 ### chr19 ENCODE gene 59560006 59568350 . - . ID=gene1093;Name=AC008746.1-021;name2=LAIR1 chr19 ENCODE exon 59560006 59560040 . - . Parent=gene1093 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1093 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1093 chr19 ENCODE exon 59564335 59564662 . - . Parent=gene1093 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1093 chr19 ENCODE exon 59568190 59568350 . - . Parent=gene1093 ### chr19 ENCODE gene 59560029 59568350 . - . ID=gene1094;Name=AC008746.1-020;name2=LAIR1 chr19 ENCODE exon 59560029 59560040 . - . Parent=gene1094 chr19 ENCODE exon 59560349 59560387 . - . Parent=gene1094 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1094 chr19 ENCODE exon 59564429 59564662 . - . Parent=gene1094 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1094 chr19 ENCODE exon 59568190 59568350 . - . Parent=gene1094 ### chr19 ENCODE gene 59561427 59564368 . - . ID=gene1095;Name=AC008746.1-016;name2=LAIR1 chr19 ENCODE exon 59561427 59562044 . - . Parent=gene1095 chr19 ENCODE CDS 59561890 59562044 . - 2 Parent=gene1095 chr19 ENCODE exon 59563441 59563491 . - . Parent=gene1095 chr19 ENCODE CDS 59563441 59563491 . - 2 Parent=gene1095 chr19 ENCODE exon 59564335 59564368 . - . Parent=gene1095 chr19 ENCODE CDS 59564335 59564368 . - 0 Parent=gene1095 ### chr19 ENCODE gene 59564114 59568533 . - . ID=gene1096;name2=LAIR1;Name=AC008746.1-012 chr19 ENCODE exon 59564114 59564153 . - . Parent=gene1096 chr19 ENCODE exon 59564335 59564628 . - . Parent=gene1096 chr19 ENCODE exon 59567714 59567905 . - . Parent=gene1096 chr19 ENCODE exon 59568190 59568533 . - . Parent=gene1096 ### chr19 ENCODE gene 59564219 59568268 . - . ID=gene1097;Name=AC008746.1-023;name2=LAIR1 chr19 ENCODE exon 59564219 59564662 . - . Parent=gene1097 chr19 ENCODE CDS 59564598 59564662 . - 2 Parent=gene1097 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1097 chr19 ENCODE CDS 59567714 59567749 . - 2 Parent=gene1097 chr19 ENCODE CDS 59568190 59568223 . - 0 Parent=gene1097 chr19 ENCODE exon 59568190 59568268 . - . Parent=gene1097 ### chr19 ENCODE gene 59564378 59568350 . - . ID=gene1098;Name=AC008746.1-022;name2=LAIR1 chr19 ENCODE exon 59564378 59564662 . - . Parent=gene1098 chr19 ENCODE exon 59567714 59567905 . - . Parent=gene1098 chr19 ENCODE exon 59568190 59568350 . - . Parent=gene1098 ### chr19 ENCODE gene 59564379 59572018 . - . ID=gene1099;Name=AC008746.1-017;name2=LAIR1 chr19 ENCODE exon 59564379 59564628 . - . Parent=gene1099 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1099 chr19 ENCODE exon 59571731 59572018 . - . Parent=gene1099 ### chr19 ENCODE gene 59564401 59573910 . - . ID=gene1100;Name=AC008746.1-015;name2=LAIR1 chr19 ENCODE exon 59564401 59564628 . - . Parent=gene1100 chr19 ENCODE CDS 59564401 59564628 . - 2 Parent=gene1100 chr19 ENCODE exon 59567714 59567749 . - . Parent=gene1100 chr19 ENCODE CDS 59567714 59567749 . - 2 Parent=gene1100 chr19 ENCODE CDS 59573681 59573696 . - 0 Parent=gene1100 chr19 ENCODE exon 59573681 59573910 . - . Parent=gene1100 ### chr19 ENCODE gene 59618185 59624317 . + . ID=gene1101;Name=AC008746.2-010;name2=TTYH1 chr19 ENCODE exon 59618185 59618280 . + . Parent=gene1101 chr19 ENCODE CDS 59618239 59618280 . + 0 Parent=gene1101 chr19 ENCODE exon 59622114 59622292 . + . Parent=gene1101 chr19 ENCODE CDS 59622114 59622292 . + 0 Parent=gene1101 chr19 ENCODE exon 59624263 59624317 . + . Parent=gene1101 chr19 ENCODE CDS 59624263 59624317 . + 1 Parent=gene1101 ### chr19 ENCODE gene 59618417 59639892 . + . ID=gene1102;Name=AC008746.2-001;name2=TTYH1 chr19 ENCODE exon 59618417 59618664 . + . Parent=gene1102 chr19 ENCODE CDS 59618539 59618664 . + 0 Parent=gene1102 chr19 ENCODE exon 59622114 59622292 . + . Parent=gene1102 chr19 ENCODE CDS 59622114 59622292 . + 0 Parent=gene1102 chr19 ENCODE exon 59624263 59624374 . + . Parent=gene1102 chr19 ENCODE CDS 59624263 59624374 . + 1 Parent=gene1102 chr19 ENCODE exon 59625176 59625396 . + . Parent=gene1102 chr19 ENCODE CDS 59625176 59625396 . + 0 Parent=gene1102 chr19 ENCODE exon 59629662 59629757 . + . Parent=gene1102 chr19 ENCODE CDS 59629662 59629757 . + 1 Parent=gene1102 chr19 ENCODE exon 59632297 59632369 . + . Parent=gene1102 chr19 ENCODE CDS 59632297 59632369 . + 1 Parent=gene1102 chr19 ENCODE exon 59632872 59632947 . + . Parent=gene1102 chr19 ENCODE CDS 59632872 59632947 . + 0 Parent=gene1102 chr19 ENCODE exon 59633540 59633595 . + . Parent=gene1102 chr19 ENCODE CDS 59633540 59633595 . + 2 Parent=gene1102 chr19 ENCODE exon 59633803 59633895 . + . Parent=gene1102 chr19 ENCODE CDS 59633803 59633895 . + 0 Parent=gene1102 chr19 ENCODE exon 59634089 59634181 . + . Parent=gene1102 chr19 ENCODE CDS 59634089 59634181 . + 0 Parent=gene1102 chr19 ENCODE exon 59638534 59638676 . + . Parent=gene1102 chr19 ENCODE CDS 59638534 59638676 . + 0 Parent=gene1102 chr19 ENCODE exon 59638820 59638865 . + . Parent=gene1102 chr19 ENCODE CDS 59638820 59638865 . + 1 Parent=gene1102 chr19 ENCODE CDS 59639080 59639121 . + 0 Parent=gene1102 chr19 ENCODE exon 59639080 59639163 . + . Parent=gene1102 chr19 ENCODE exon 59639325 59639892 . + . Parent=gene1102 ### chr19 ENCODE gene 59618436 59639711 . + . ID=gene1103;Name=AC008746.2-002;name2=TTYH1 chr19 ENCODE exon 59618436 59618664 . + . Parent=gene1103 chr19 ENCODE CDS 59618539 59618664 . + 0 Parent=gene1103 chr19 ENCODE exon 59622114 59622292 . + . Parent=gene1103 chr19 ENCODE CDS 59622114 59622292 . + 0 Parent=gene1103 chr19 ENCODE exon 59624263 59624374 . + . Parent=gene1103 chr19 ENCODE CDS 59624263 59624374 . + 1 Parent=gene1103 chr19 ENCODE exon 59625176 59625396 . + . Parent=gene1103 chr19 ENCODE CDS 59625176 59625396 . + 0 Parent=gene1103 chr19 ENCODE exon 59629662 59629757 . + . Parent=gene1103 chr19 ENCODE CDS 59629662 59629757 . + 1 Parent=gene1103 chr19 ENCODE exon 59632297 59632369 . + . Parent=gene1103 chr19 ENCODE CDS 59632297 59632369 . + 1 Parent=gene1103 chr19 ENCODE exon 59632872 59632947 . + . Parent=gene1103 chr19 ENCODE CDS 59632872 59632947 . + 0 Parent=gene1103 chr19 ENCODE exon 59633540 59633595 . + . Parent=gene1103 chr19 ENCODE CDS 59633540 59633595 . + 2 Parent=gene1103 chr19 ENCODE exon 59633803 59633895 . + . Parent=gene1103 chr19 ENCODE CDS 59633803 59633895 . + 0 Parent=gene1103 chr19 ENCODE exon 59634089 59634181 . + . Parent=gene1103 chr19 ENCODE CDS 59634089 59634181 . + 0 Parent=gene1103 chr19 ENCODE exon 59638534 59638676 . + . Parent=gene1103 chr19 ENCODE CDS 59638534 59638676 . + 0 Parent=gene1103 chr19 ENCODE exon 59638820 59638865 . + . Parent=gene1103 chr19 ENCODE CDS 59638820 59638865 . + 1 Parent=gene1103 chr19 ENCODE CDS 59639083 59639121 . + 0 Parent=gene1103 chr19 ENCODE exon 59639083 59639163 . + . Parent=gene1103 chr19 ENCODE exon 59639325 59639711 . + . Parent=gene1103 ### chr19 ENCODE gene 59618451 59629717 . + . ID=gene1104;Name=AC008746.2-007;name2=TTYH1 chr19 ENCODE exon 59618451 59618664 . + . Parent=gene1104 chr19 ENCODE CDS 59618539 59618664 . + 0 Parent=gene1104 chr19 ENCODE exon 59619042 59619052 . + . Parent=gene1104 chr19 ENCODE CDS 59619042 59619052 . + 0 Parent=gene1104 chr19 ENCODE exon 59619775 59619910 . + . Parent=gene1104 chr19 ENCODE CDS 59619775 59619910 . + 1 Parent=gene1104 chr19 ENCODE exon 59622114 59622292 . + . Parent=gene1104 chr19 ENCODE CDS 59622114 59622292 . + 0 Parent=gene1104 chr19 ENCODE exon 59624263 59624374 . + . Parent=gene1104 chr19 ENCODE CDS 59624263 59624374 . + 1 Parent=gene1104 chr19 ENCODE exon 59625176 59625396 . + . Parent=gene1104 chr19 ENCODE CDS 59625176 59625396 . + 0 Parent=gene1104 chr19 ENCODE exon 59629662 59629717 . + . Parent=gene1104 chr19 ENCODE CDS 59629662 59629717 . + 1 Parent=gene1104 ### chr19 ENCODE gene 59618496 59629757 . + . ID=gene1105;Name=AC008746.2-008;name2=TTYH1 chr19 ENCODE exon 59618496 59618664 . + . Parent=gene1105 chr19 ENCODE exon 59622114 59622292 . + . Parent=gene1105 chr19 ENCODE exon 59625176 59625396 . + . Parent=gene1105 chr19 ENCODE exon 59629662 59629757 . + . Parent=gene1105 ### chr19 ENCODE gene 59618498 59639711 . + . ID=gene1106;name2=TTYH1;Name=AC008746.2-005 chr19 ENCODE exon 59618498 59618664 . + . Parent=gene1106 chr19 ENCODE exon 59619042 59619910 . + . Parent=gene1106 chr19 ENCODE exon 59622114 59622292 . + . Parent=gene1106 chr19 ENCODE exon 59624263 59624374 . + . Parent=gene1106 chr19 ENCODE exon 59625176 59625396 . + . Parent=gene1106 chr19 ENCODE exon 59629662 59629757 . + . Parent=gene1106 chr19 ENCODE exon 59632297 59632369 . + . Parent=gene1106 chr19 ENCODE exon 59632872 59632947 . + . Parent=gene1106 chr19 ENCODE exon 59633540 59633595 . + . Parent=gene1106 chr19 ENCODE exon 59633803 59633895 . + . Parent=gene1106 chr19 ENCODE exon 59634089 59634181 . + . Parent=gene1106 chr19 ENCODE exon 59638534 59638676 . + . Parent=gene1106 chr19 ENCODE exon 59638820 59638865 . + . Parent=gene1106 chr19 ENCODE exon 59639083 59639163 . + . Parent=gene1106 chr19 ENCODE exon 59639325 59639711 . + . Parent=gene1106 ### chr19 ENCODE gene 59618512 59639711 . + . ID=gene1107;Name=AC008746.2-003;name2=TTYH1 chr19 ENCODE exon 59618512 59618664 . + . Parent=gene1107 chr19 ENCODE CDS 59618539 59618664 . + 0 Parent=gene1107 chr19 ENCODE exon 59622114 59622292 . + . Parent=gene1107 chr19 ENCODE CDS 59622114 59622292 . + 0 Parent=gene1107 chr19 ENCODE exon 59624263 59624374 . + . Parent=gene1107 chr19 ENCODE CDS 59624263 59624374 . + 1 Parent=gene1107 chr19 ENCODE exon 59625176 59625396 . + . Parent=gene1107 chr19 ENCODE CDS 59625176 59625396 . + 0 Parent=gene1107 chr19 ENCODE exon 59629662 59629757 . + . Parent=gene1107 chr19 ENCODE CDS 59629662 59629757 . + 1 Parent=gene1107 chr19 ENCODE exon 59632297 59632369 . + . Parent=gene1107 chr19 ENCODE CDS 59632297 59632369 . + 1 Parent=gene1107 chr19 ENCODE exon 59632872 59632947 . + . Parent=gene1107 chr19 ENCODE CDS 59632872 59632947 . + 0 Parent=gene1107 chr19 ENCODE exon 59633540 59633595 . + . Parent=gene1107 chr19 ENCODE CDS 59633540 59633595 . + 2 Parent=gene1107 chr19 ENCODE exon 59633803 59633895 . + . Parent=gene1107 chr19 ENCODE CDS 59633803 59633895 . + 0 Parent=gene1107 chr19 ENCODE exon 59634089 59634181 . + . Parent=gene1107 chr19 ENCODE CDS 59634089 59634181 . + 0 Parent=gene1107 chr19 ENCODE exon 59638534 59638676 . + . Parent=gene1107 chr19 ENCODE CDS 59638534 59638676 . + 0 Parent=gene1107 chr19 ENCODE exon 59639083 59639163 . + . Parent=gene1107 chr19 ENCODE CDS 59639083 59639163 . + 1 Parent=gene1107 chr19 ENCODE CDS 59639325 59639358 . + 1 Parent=gene1107 chr19 ENCODE exon 59639325 59639711 . + . Parent=gene1107 ### chr19 ENCODE gene 59621248 59622522 . + . ID=gene1108;Name=AC008746.2-011;name2=TTYH1 chr19 ENCODE exon 59621248 59621698 . + . Parent=gene1108 chr19 ENCODE exon 59622114 59622292 . + . Parent=gene1108 chr19 ENCODE exon 59622437 59622522 . + . Parent=gene1108 ### chr19 ENCODE gene 59622182 59636702 . + . ID=gene1109;Name=AC008746.2-006;name2=TTYH1 chr19 ENCODE exon 59622182 59622528 . + . Parent=gene1109 chr19 ENCODE exon 59624263 59624374 . + . Parent=gene1109 chr19 ENCODE exon 59625185 59625396 . + . Parent=gene1109 chr19 ENCODE exon 59629662 59629757 . + . Parent=gene1109 chr19 ENCODE exon 59632297 59632369 . + . Parent=gene1109 chr19 ENCODE exon 59632872 59632947 . + . Parent=gene1109 chr19 ENCODE exon 59633540 59633595 . + . Parent=gene1109 chr19 ENCODE exon 59633803 59633895 . + . Parent=gene1109 chr19 ENCODE exon 59634089 59636702 . + . Parent=gene1109 ### chr19 ENCODE gene 59623654 59629722 . + . ID=gene1110;Name=AC008746.2-013;name2=TTYH1 chr19 ENCODE exon 59623654 59623818 . + . Parent=gene1110 chr19 ENCODE exon 59624263 59624374 . + . Parent=gene1110 chr19 ENCODE exon 59625176 59625396 . + . Parent=gene1110 chr19 ENCODE exon 59629662 59629722 . + . Parent=gene1110 ### chr19 ENCODE gene 59623685 59632343 . + . ID=gene1111;Name=AC008746.2-012;name2=TTYH1 chr19 ENCODE exon 59623685 59623787 . + . Parent=gene1111 chr19 ENCODE CDS 59623744 59623787 . + 0 Parent=gene1111 chr19 ENCODE exon 59624263 59624374 . + . Parent=gene1111 chr19 ENCODE CDS 59624263 59624374 . + 1 Parent=gene1111 chr19 ENCODE exon 59625176 59625396 . + . Parent=gene1111 chr19 ENCODE CDS 59625176 59625396 . + 0 Parent=gene1111 chr19 ENCODE exon 59629662 59629757 . + . Parent=gene1111 chr19 ENCODE CDS 59629662 59629757 . + 1 Parent=gene1111 chr19 ENCODE exon 59632297 59632343 . + . Parent=gene1111 chr19 ENCODE CDS 59632297 59632343 . + 1 Parent=gene1111 ### chr19 ENCODE gene 59629463 59639711 . + . ID=gene1112;Name=AC008746.2-004;name2=TTYH1 chr19 ENCODE exon 59629463 59629555 . + . Parent=gene1112 chr19 ENCODE CDS 59629554 59629555 . + 0 Parent=gene1112 chr19 ENCODE exon 59629662 59629757 . + . Parent=gene1112 chr19 ENCODE CDS 59629662 59629757 . + 1 Parent=gene1112 chr19 ENCODE exon 59632297 59632369 . + . Parent=gene1112 chr19 ENCODE CDS 59632297 59632369 . + 1 Parent=gene1112 chr19 ENCODE exon 59632872 59632947 . + . Parent=gene1112 chr19 ENCODE CDS 59632872 59632947 . + 0 Parent=gene1112 chr19 ENCODE exon 59633540 59633595 . + . Parent=gene1112 chr19 ENCODE CDS 59633540 59633595 . + 2 Parent=gene1112 chr19 ENCODE exon 59633803 59633895 . + . Parent=gene1112 chr19 ENCODE CDS 59633803 59633895 . + 0 Parent=gene1112 chr19 ENCODE exon 59634089 59634181 . + . Parent=gene1112 chr19 ENCODE CDS 59634089 59634181 . + 0 Parent=gene1112 chr19 ENCODE exon 59638534 59638676 . + . Parent=gene1112 chr19 ENCODE CDS 59638534 59638676 . + 0 Parent=gene1112 chr19 ENCODE exon 59638820 59638865 . + . Parent=gene1112 chr19 ENCODE CDS 59638820 59638865 . + 1 Parent=gene1112 chr19 ENCODE CDS 59639080 59639121 . + 0 Parent=gene1112 chr19 ENCODE exon 59639080 59639163 . + . Parent=gene1112 chr19 ENCODE exon 59639325 59639711 . + . Parent=gene1112 ### chr19 ENCODE gene 59633803 59639464 . + . ID=gene1113;Name=AC008746.2-009;name2=TTYH1 chr19 ENCODE exon 59633803 59633895 . + . Parent=gene1113 chr19 ENCODE exon 59634089 59634181 . + . Parent=gene1113 chr19 ENCODE exon 59638534 59638676 . + . Parent=gene1113 chr19 ENCODE exon 59638820 59638865 . + . Parent=gene1113 chr19 ENCODE exon 59639083 59639464 . + . Parent=gene1113 ### chr19 ENCODE gene 59637952 59639320 . + . ID=gene1114;Name=AC008746.2-014;name2=TTYH1 chr19 ENCODE exon 59637952 59638105 . + . Parent=gene1114 chr19 ENCODE exon 59638534 59638676 . + . Parent=gene1114 chr19 ENCODE exon 59638820 59638865 . + . Parent=gene1114 chr19 ENCODE exon 59639083 59639320 . + . Parent=gene1114 ### chr19 ENCODE gene 59638997 59639709 . + . ID=gene1115;Name=AC008746.2-015;name2=TTYH1 chr19 ENCODE exon 59638997 59639163 . + . Parent=gene1115 chr19 ENCODE exon 59639325 59639709 . + . Parent=gene1115 ### chr19 ENCODE gene 59651877 59665029 . + . ID=gene1116;Name=AC008746.4-001;name2=LENG8 chr19 ENCODE exon 59651877 59652300 . + . Parent=gene1116 chr19 ENCODE exon 59654279 59654371 . + . Parent=gene1116 chr19 ENCODE CDS 59654334 59654371 . + 0 Parent=gene1116 chr19 ENCODE exon 59655082 59655256 . + . Parent=gene1116 chr19 ENCODE CDS 59655082 59655256 . + 1 Parent=gene1116 chr19 ENCODE exon 59655642 59655743 . + . Parent=gene1116 chr19 ENCODE CDS 59655642 59655743 . + 0 Parent=gene1116 chr19 ENCODE exon 59656537 59656647 . + . Parent=gene1116 chr19 ENCODE CDS 59656537 59656647 . + 0 Parent=gene1116 chr19 ENCODE exon 59657421 59657673 . + . Parent=gene1116 chr19 ENCODE CDS 59657421 59657673 . + 0 Parent=gene1116 chr19 ENCODE exon 59657942 59658083 . + . Parent=gene1116 chr19 ENCODE CDS 59657942 59658083 . + 2 Parent=gene1116 chr19 ENCODE exon 59658355 59658558 . + . Parent=gene1116 chr19 ENCODE CDS 59658355 59658558 . + 1 Parent=gene1116 chr19 ENCODE exon 59658958 59659236 . + . Parent=gene1116 chr19 ENCODE CDS 59658958 59659236 . + 1 Parent=gene1116 chr19 ENCODE exon 59659316 59659456 . + . Parent=gene1116 chr19 ENCODE CDS 59659316 59659456 . + 1 Parent=gene1116 chr19 ENCODE exon 59659627 59659912 . + . Parent=gene1116 chr19 ENCODE CDS 59659627 59659912 . + 1 Parent=gene1116 chr19 ENCODE exon 59660738 59660839 . + . Parent=gene1116 chr19 ENCODE CDS 59660738 59660839 . + 0 Parent=gene1116 chr19 ENCODE exon 59660925 59660993 . + . Parent=gene1116 chr19 ENCODE CDS 59660925 59660993 . + 0 Parent=gene1116 chr19 ENCODE exon 59661094 59661223 . + . Parent=gene1116 chr19 ENCODE CDS 59661094 59661223 . + 0 Parent=gene1116 chr19 ENCODE exon 59661305 59661512 . + . Parent=gene1116 chr19 ENCODE CDS 59661305 59661512 . + 2 Parent=gene1116 chr19 ENCODE CDS 59663758 59663920 . + 1 Parent=gene1116 chr19 ENCODE exon 59663758 59665029 . + . Parent=gene1116 ### chr19 ENCODE gene 59652180 59658434 . + . ID=gene1117;Name=AC008746.4-002;name2=LENG8 chr19 ENCODE exon 59652180 59652296 . + . Parent=gene1117 chr19 ENCODE exon 59654279 59654371 . + . Parent=gene1117 chr19 ENCODE CDS 59654334 59654371 . + 0 Parent=gene1117 chr19 ENCODE exon 59655082 59655256 . + . Parent=gene1117 chr19 ENCODE CDS 59655082 59655256 . + 1 Parent=gene1117 chr19 ENCODE exon 59655642 59655743 . + . Parent=gene1117 chr19 ENCODE CDS 59655642 59655743 . + 0 Parent=gene1117 chr19 ENCODE exon 59656537 59656647 . + . Parent=gene1117 chr19 ENCODE CDS 59656537 59656647 . + 0 Parent=gene1117 chr19 ENCODE exon 59657421 59657673 . + . Parent=gene1117 chr19 ENCODE CDS 59657421 59657673 . + 0 Parent=gene1117 chr19 ENCODE exon 59657942 59658083 . + . Parent=gene1117 chr19 ENCODE CDS 59657942 59658083 . + 2 Parent=gene1117 chr19 ENCODE exon 59658355 59658434 . + . Parent=gene1117 chr19 ENCODE CDS 59658355 59658434 . + 1 Parent=gene1117 ### chr19 ENCODE gene 59652208 59665029 . + . ID=gene1118;Name=AC008746.4-007;name2=LENG8 chr19 ENCODE exon 59652208 59652296 . + . Parent=gene1118 chr19 ENCODE exon 59654279 59654371 . + . Parent=gene1118 chr19 ENCODE exon 59655082 59655156 . + . Parent=gene1118 chr19 ENCODE exon 59663869 59665029 . + . Parent=gene1118 ### chr19 ENCODE gene 59652214 59665012 . + . ID=gene1119;Name=AC008746.4-008;name2=LENG8 chr19 ENCODE exon 59652214 59652296 . + . Parent=gene1119 chr19 ENCODE exon 59654279 59654371 . + . Parent=gene1119 chr19 ENCODE exon 59655082 59655256 . + . Parent=gene1119 chr19 ENCODE exon 59655642 59655743 . + . Parent=gene1119 chr19 ENCODE exon 59657421 59657673 . + . Parent=gene1119 chr19 ENCODE exon 59657942 59658083 . + . Parent=gene1119 chr19 ENCODE exon 59658355 59658558 . + . Parent=gene1119 chr19 ENCODE exon 59658958 59659236 . + . Parent=gene1119 chr19 ENCODE exon 59659316 59659456 . + . Parent=gene1119 chr19 ENCODE exon 59659627 59659912 . + . Parent=gene1119 chr19 ENCODE exon 59660738 59660839 . + . Parent=gene1119 chr19 ENCODE exon 59660925 59660993 . + . Parent=gene1119 chr19 ENCODE exon 59661094 59661223 . + . Parent=gene1119 chr19 ENCODE exon 59661305 59661564 . + . Parent=gene1119 chr19 ENCODE exon 59664550 59664694 . + . Parent=gene1119 chr19 ENCODE exon 59664811 59665012 . + . Parent=gene1119 ### chr19 ENCODE gene 59652602 59655703 . + . ID=gene1120;name2=LENG8;Name=AC008746.4-003 chr19 ENCODE exon 59652602 59652734 . + . Parent=gene1120 chr19 ENCODE exon 59654279 59654371 . + . Parent=gene1120 chr19 ENCODE CDS 59654334 59654371 . + 0 Parent=gene1120 chr19 ENCODE exon 59655082 59655256 . + . Parent=gene1120 chr19 ENCODE CDS 59655082 59655256 . + 1 Parent=gene1120 chr19 ENCODE exon 59655642 59655703 . + . Parent=gene1120 chr19 ENCODE CDS 59655642 59655703 . + 0 Parent=gene1120 ### chr19 ENCODE gene 59654981 59656614 . + . ID=gene1121;Name=AC008746.4-005;name2=LENG8 chr19 ENCODE exon 59654981 59655256 . + . Parent=gene1121 chr19 ENCODE exon 59655642 59655743 . + . Parent=gene1121 chr19 ENCODE exon 59656537 59656614 . + . Parent=gene1121 ### chr19 ENCODE gene 59657441 59664392 . + . ID=gene1122;Name=AC008746.4-004;name2=LENG8 chr19 ENCODE exon 59657441 59657673 . + . Parent=gene1122 chr19 ENCODE CDS 59657441 59657673 . + 0 Parent=gene1122 chr19 ENCODE exon 59657942 59658083 . + . Parent=gene1122 chr19 ENCODE CDS 59657942 59658083 . + 1 Parent=gene1122 chr19 ENCODE exon 59658355 59658558 . + . Parent=gene1122 chr19 ENCODE CDS 59658355 59658558 . + 0 Parent=gene1122 chr19 ENCODE exon 59658958 59659236 . + . Parent=gene1122 chr19 ENCODE CDS 59658958 59659236 . + 0 Parent=gene1122 chr19 ENCODE exon 59659316 59659456 . + . Parent=gene1122 chr19 ENCODE CDS 59659316 59659456 . + 0 Parent=gene1122 chr19 ENCODE exon 59659627 59659912 . + . Parent=gene1122 chr19 ENCODE CDS 59659627 59659912 . + 0 Parent=gene1122 chr19 ENCODE exon 59660738 59660839 . + . Parent=gene1122 chr19 ENCODE CDS 59660738 59660839 . + 2 Parent=gene1122 chr19 ENCODE exon 59660925 59660993 . + . Parent=gene1122 chr19 ENCODE CDS 59660925 59660993 . + 2 Parent=gene1122 chr19 ENCODE exon 59661094 59661223 . + . Parent=gene1122 chr19 ENCODE CDS 59661094 59661223 . + 2 Parent=gene1122 chr19 ENCODE CDS 59661305 59661897 . + 1 Parent=gene1122 chr19 ENCODE exon 59661305 59664392 . + . Parent=gene1122 ### chr19 ENCODE gene 59661406 59664704 . + . ID=gene1123;Name=AC008746.4-006;name2=LENG8 chr19 ENCODE exon 59661406 59661512 . + . Parent=gene1123 chr19 ENCODE exon 59664218 59664704 . + . Parent=gene1123 ### chr19 ENCODE gene 59664788 59666706 . - . ID=gene1124;Name=AC008746.6-001;name2=LENG9 chr19 ENCODE exon 59664788 59666706 . - . Parent=gene1124 chr19 ENCODE CDS 59665082 59666521 . - 0 Parent=gene1124 ### chr19 ENCODE gene 59668022 59676223 . - . ID=gene1125;Name=AC008746.7-001;name2=CDC42EP5 chr19 ENCODE exon 59668022 59668543 . - . Parent=gene1125 chr19 ENCODE CDS 59668097 59668543 . - 0 Parent=gene1125 chr19 ENCODE exon 59674578 59674718 . - . Parent=gene1125 chr19 ENCODE exon 59676023 59676223 . - . Parent=gene1125 ### chr19 ENCODE gene 59674539 59676130 . - . ID=gene1126;Name=AC008746.7-002;name2=CDC42EP5 chr19 ENCODE exon 59674539 59674718 . - . Parent=gene1126 chr19 ENCODE exon 59676023 59676130 . - . Parent=gene1126 ### chr19 ENCODE gene 59700912 59711133 . + . ID=gene1127;Name=AC008746.8-004;name2=LAIR2 chr19 ENCODE exon 59700912 59701290 . + . Parent=gene1127 chr19 ENCODE CDS 59701275 59701290 . + 0 Parent=gene1127 chr19 ENCODE exon 59710918 59711133 . + . Parent=gene1127 chr19 ENCODE CDS 59710918 59711133 . + 2 Parent=gene1127 ### chr19 ENCODE gene 59700912 59711133 . + . ID=gene1128;Name=AC008746.8-003;name2=LAIR2 chr19 ENCODE exon 59700912 59701290 . + . Parent=gene1128 chr19 ENCODE CDS 59701275 59701290 . + 0 Parent=gene1128 chr19 ENCODE exon 59706728 59706763 . + . Parent=gene1128 chr19 ENCODE CDS 59706728 59706763 . + 2 Parent=gene1128 chr19 ENCODE exon 59710918 59711133 . + . Parent=gene1128 chr19 ENCODE CDS 59710918 59711133 . + 2 Parent=gene1128 ### chr19 ENCODE gene 59705825 59713709 . + . ID=gene1129;Name=AC008746.8-001;name2=LAIR2 chr19 ENCODE exon 59705825 59705980 . + . Parent=gene1129 chr19 ENCODE CDS 59705947 59705980 . + 0 Parent=gene1129 chr19 ENCODE exon 59706728 59706763 . + . Parent=gene1129 chr19 ENCODE CDS 59706728 59706763 . + 2 Parent=gene1129 chr19 ENCODE exon 59710918 59711211 . + . Parent=gene1129 chr19 ENCODE CDS 59710918 59711211 . + 2 Parent=gene1129 chr19 ENCODE exon 59712057 59712107 . + . Parent=gene1129 chr19 ENCODE CDS 59712057 59712107 . + 2 Parent=gene1129 chr19 ENCODE CDS 59713548 59713591 . + 2 Parent=gene1129 chr19 ENCODE exon 59713548 59713709 . + . Parent=gene1129 ### chr19 ENCODE gene 59705935 59713709 . + . ID=gene1130;Name=AC008746.8-002;name2=LAIR2 chr19 ENCODE exon 59705935 59705980 . + . Parent=gene1130 chr19 ENCODE CDS 59705947 59705980 . + 0 Parent=gene1130 chr19 ENCODE exon 59706728 59706763 . + . Parent=gene1130 chr19 ENCODE CDS 59706728 59706763 . + 2 Parent=gene1130 chr19 ENCODE exon 59710918 59711211 . + . Parent=gene1130 chr19 ENCODE CDS 59710918 59711211 . + 2 Parent=gene1130 chr19 ENCODE CDS 59713548 59713591 . + 2 Parent=gene1130 chr19 ENCODE exon 59713548 59713709 . + . Parent=gene1130 ### chr19 ENCODE gene 59735789 59748865 . + . ID=gene1131;Name=AC009892.1-002;name2=KIR3DX1 chr19 ENCODE exon 59735789 59735860 . + . Parent=gene1131 chr19 ENCODE CDS 59735827 59735860 . + 0 Parent=gene1131 chr19 ENCODE exon 59736074 59736109 . + . Parent=gene1131 chr19 ENCODE CDS 59736074 59736109 . + 2 Parent=gene1131 chr19 ENCODE exon 59736763 59737041 . + . Parent=gene1131 chr19 ENCODE CDS 59736763 59737041 . + 2 Parent=gene1131 chr19 ENCODE exon 59738617 59738922 . + . Parent=gene1131 chr19 ENCODE CDS 59738617 59738922 . + 2 Parent=gene1131 chr19 ENCODE exon 59739901 59740193 . + . Parent=gene1131 chr19 ENCODE CDS 59739901 59740193 . + 2 Parent=gene1131 chr19 ENCODE exon 59740996 59741046 . + . Parent=gene1131 chr19 ENCODE CDS 59740996 59741046 . + 0 Parent=gene1131 chr19 ENCODE exon 59746397 59746449 . + . Parent=gene1131 chr19 ENCODE CDS 59746397 59746449 . + 0 Parent=gene1131 chr19 ENCODE CDS 59746558 59746603 . + 1 Parent=gene1131 chr19 ENCODE exon 59746558 59748865 . + . Parent=gene1131 ### chr19 ENCODE gene 59738309 59748834 . + . ID=gene1132;Name=AC009892.1-001;name2=KIR3DX1 chr19 ENCODE exon 59738309 59738922 . + . Parent=gene1132 chr19 ENCODE exon 59739901 59740193 . + . Parent=gene1132 chr19 ENCODE exon 59740996 59741680 . + . Parent=gene1132 chr19 ENCODE exon 59746050 59748834 . + . Parent=gene1132 ### chr19 ENCODE gene 59776199 59778189 . + . ID=gene1133;name2=LILRA2;Name=AC009892.3-005 chr19 ENCODE exon 59776199 59776714 . + . Parent=gene1133 chr19 ENCODE exon 59777355 59777390 . + . Parent=gene1133 chr19 ENCODE exon 59777580 59777861 . + . Parent=gene1133 chr19 ENCODE exon 59778010 59778189 . + . Parent=gene1133 ### chr19 ENCODE gene 59776307 59779115 . + . ID=gene1134;Name=AC009892.3-006;name2=LILRA2 chr19 ENCODE exon 59776307 59776714 . + . Parent=gene1134 chr19 ENCODE exon 59776977 59777191 . + . Parent=gene1134 chr19 ENCODE CDS 59777158 59777191 . + 0 Parent=gene1134 chr19 ENCODE exon 59777355 59777390 . + . Parent=gene1134 chr19 ENCODE CDS 59777355 59777390 . + 2 Parent=gene1134 chr19 ENCODE exon 59777580 59777861 . + . Parent=gene1134 chr19 ENCODE CDS 59777580 59777861 . + 2 Parent=gene1134 chr19 ENCODE exon 59778010 59778312 . + . Parent=gene1134 chr19 ENCODE CDS 59778010 59778312 . + 2 Parent=gene1134 chr19 ENCODE exon 59778535 59778831 . + . Parent=gene1134 chr19 ENCODE CDS 59778535 59778831 . + 2 Parent=gene1134 chr19 ENCODE exon 59779086 59779115 . + . Parent=gene1134 chr19 ENCODE CDS 59779086 59779115 . + 2 Parent=gene1134 ### chr19 ENCODE gene 59776630 59790839 . + . ID=gene1135;Name=AC009892.3-001;name2=LILRA2 chr19 ENCODE exon 59776630 59776714 . + . Parent=gene1135 chr19 ENCODE exon 59777110 59777191 . + . Parent=gene1135 chr19 ENCODE CDS 59777158 59777191 . + 0 Parent=gene1135 chr19 ENCODE exon 59777355 59777390 . + . Parent=gene1135 chr19 ENCODE CDS 59777355 59777390 . + 2 Parent=gene1135 chr19 ENCODE exon 59777580 59777861 . + . Parent=gene1135 chr19 ENCODE CDS 59777580 59777861 . + 2 Parent=gene1135 chr19 ENCODE exon 59778010 59778312 . + . Parent=gene1135 chr19 ENCODE CDS 59778010 59778312 . + 2 Parent=gene1135 chr19 ENCODE exon 59778535 59778831 . + . Parent=gene1135 chr19 ENCODE CDS 59778535 59778831 . + 2 Parent=gene1135 chr19 ENCODE exon 59779086 59779388 . + . Parent=gene1135 chr19 ENCODE CDS 59779086 59779388 . + 2 Parent=gene1135 chr19 ENCODE exon 59790289 59790339 . + . Parent=gene1135 chr19 ENCODE CDS 59790289 59790339 . + 2 Parent=gene1135 chr19 ENCODE CDS 59790480 59790625 . + 2 Parent=gene1135 chr19 ENCODE exon 59790480 59790839 . + . Parent=gene1135 ### chr19 ENCODE gene 59777071 59790839 . + . ID=gene1136;Name=AC009892.3-003;name2=LILRA2 chr19 ENCODE exon 59777071 59777191 . + . Parent=gene1136 chr19 ENCODE CDS 59777158 59777191 . + 0 Parent=gene1136 chr19 ENCODE exon 59777355 59777390 . + . Parent=gene1136 chr19 ENCODE CDS 59777355 59777390 . + 2 Parent=gene1136 chr19 ENCODE exon 59777580 59777861 . + . Parent=gene1136 chr19 ENCODE CDS 59777580 59777861 . + 2 Parent=gene1136 chr19 ENCODE exon 59778010 59778312 . + . Parent=gene1136 chr19 ENCODE CDS 59778010 59778312 . + 2 Parent=gene1136 chr19 ENCODE exon 59778535 59778831 . + . Parent=gene1136 chr19 ENCODE CDS 59778535 59778831 . + 2 Parent=gene1136 chr19 ENCODE exon 59779086 59779388 . + . Parent=gene1136 chr19 ENCODE CDS 59779086 59779388 . + 2 Parent=gene1136 chr19 ENCODE CDS 59790480 59790625 . + 2 Parent=gene1136 chr19 ENCODE exon 59790480 59790839 . + . Parent=gene1136 ### chr19 ENCODE gene 59777120 59790674 . + . ID=gene1137;Name=AC009892.3-002;name2=LILRA2 chr19 ENCODE exon 59777120 59777191 . + . Parent=gene1137 chr19 ENCODE CDS 59777158 59777191 . + 0 Parent=gene1137 chr19 ENCODE exon 59777580 59777861 . + . Parent=gene1137 chr19 ENCODE CDS 59777580 59777861 . + 2 Parent=gene1137 chr19 ENCODE exon 59778010 59778312 . + . Parent=gene1137 chr19 ENCODE CDS 59778010 59778312 . + 2 Parent=gene1137 chr19 ENCODE exon 59778535 59778831 . + . Parent=gene1137 chr19 ENCODE CDS 59778535 59778831 . + 2 Parent=gene1137 chr19 ENCODE exon 59779086 59779388 . + . Parent=gene1137 chr19 ENCODE CDS 59779086 59779388 . + 2 Parent=gene1137 chr19 ENCODE CDS 59790480 59790625 . + 2 Parent=gene1137 chr19 ENCODE exon 59790480 59790674 . + . Parent=gene1137 ### chr19 ENCODE gene 59777158 59790674 . + . ID=gene1138;Name=AC009892.3-004;name2=LILRA2 chr19 ENCODE exon 59777158 59777191 . + . Parent=gene1138 chr19 ENCODE exon 59777355 59777390 . + . Parent=gene1138 chr19 ENCODE exon 59777580 59777829 . + . Parent=gene1138 chr19 ENCODE exon 59779243 59779388 . + . Parent=gene1138 chr19 ENCODE exon 59790480 59790674 . + . Parent=gene1138 ### chr19 ENCODE gene 59779351 59790826 . + . ID=gene1139;Name=AC009892.3-007;name2=LILRA2 chr19 ENCODE exon 59779351 59779388 . + . Parent=gene1139 chr19 ENCODE exon 59780744 59781002 . + . Parent=gene1139 chr19 ENCODE exon 59790480 59790826 . + . Parent=gene1139 ### chr19 ENCODE gene 59796859 59802997 . + . ID=gene1140;Name=AC009892.4-005;name2=LILRA1 chr19 ENCODE exon 59796859 59797058 . + . Parent=gene1140 chr19 ENCODE exon 59797718 59797753 . + . Parent=gene1140 chr19 ENCODE exon 59797942 59798229 . + . Parent=gene1140 chr19 ENCODE exon 59798377 59798679 . + . Parent=gene1140 chr19 ENCODE exon 59798916 59799212 . + . Parent=gene1140 chr19 ENCODE exon 59799466 59799768 . + . Parent=gene1140 chr19 ENCODE exon 59802513 59802997 . + . Parent=gene1140 ### chr19 ENCODE gene 59796859 59805154 . + . ID=gene1141;Name=AC009892.4-003;name2=LILRA1 chr19 ENCODE exon 59796859 59797058 . + . Parent=gene1141 chr19 ENCODE exon 59797718 59797753 . + . Parent=gene1141 chr19 ENCODE exon 59797942 59798229 . + . Parent=gene1141 chr19 ENCODE exon 59798377 59798679 . + . Parent=gene1141 chr19 ENCODE exon 59799032 59799212 . + . Parent=gene1141 chr19 ENCODE exon 59799466 59799768 . + . Parent=gene1141 chr19 ENCODE exon 59802513 59802563 . + . Parent=gene1141 chr19 ENCODE exon 59803789 59803827 . + . Parent=gene1141 chr19 ENCODE exon 59803976 59805154 . + . Parent=gene1141 ### chr19 ENCODE gene 59796925 59804352 . + . ID=gene1142;Name=AC009892.4-001;name2=LILRA1 chr19 ENCODE exon 59796925 59797058 . + . Parent=gene1142 chr19 ENCODE exon 59797474 59797555 . + . Parent=gene1142 chr19 ENCODE CDS 59797522 59797555 . + 0 Parent=gene1142 chr19 ENCODE exon 59797718 59797753 . + . Parent=gene1142 chr19 ENCODE CDS 59797718 59797753 . + 2 Parent=gene1142 chr19 ENCODE exon 59797942 59798229 . + . Parent=gene1142 chr19 ENCODE CDS 59797942 59798229 . + 2 Parent=gene1142 chr19 ENCODE exon 59798377 59798679 . + . Parent=gene1142 chr19 ENCODE CDS 59798377 59798679 . + 2 Parent=gene1142 chr19 ENCODE exon 59798916 59799212 . + . Parent=gene1142 chr19 ENCODE CDS 59798916 59799212 . + 2 Parent=gene1142 chr19 ENCODE exon 59799466 59799768 . + . Parent=gene1142 chr19 ENCODE CDS 59799466 59799768 . + 2 Parent=gene1142 chr19 ENCODE exon 59802513 59802563 . + . Parent=gene1142 chr19 ENCODE CDS 59802513 59802563 . + 2 Parent=gene1142 chr19 ENCODE exon 59803789 59803827 . + . Parent=gene1142 chr19 ENCODE CDS 59803789 59803827 . + 2 Parent=gene1142 chr19 ENCODE CDS 59803976 59804094 . + 2 Parent=gene1142 chr19 ENCODE exon 59803976 59804352 . + . Parent=gene1142 ### chr19 ENCODE gene 59796927 59802993 . + . ID=gene1143;Name=AC009892.4-004;name2=LILRA1 chr19 ENCODE exon 59796927 59797058 . + . Parent=gene1143 chr19 ENCODE exon 59797474 59797753 . + . Parent=gene1143 chr19 ENCODE exon 59797942 59798229 . + . Parent=gene1143 chr19 ENCODE exon 59798377 59798679 . + . Parent=gene1143 chr19 ENCODE exon 59798916 59799212 . + . Parent=gene1143 chr19 ENCODE exon 59799466 59799768 . + . Parent=gene1143 chr19 ENCODE exon 59802513 59802993 . + . Parent=gene1143 ### chr19 ENCODE gene 59796937 59805367 . + . ID=gene1144;Name=AC009892.4-002;name2=LILRA1 chr19 ENCODE exon 59796937 59797058 . + . Parent=gene1144 chr19 ENCODE exon 59797474 59797555 . + . Parent=gene1144 chr19 ENCODE CDS 59797522 59797555 . + 0 Parent=gene1144 chr19 ENCODE exon 59797718 59797753 . + . Parent=gene1144 chr19 ENCODE CDS 59797718 59797753 . + 2 Parent=gene1144 chr19 ENCODE exon 59797942 59798229 . + . Parent=gene1144 chr19 ENCODE CDS 59797942 59798229 . + 2 Parent=gene1144 chr19 ENCODE exon 59798377 59798679 . + . Parent=gene1144 chr19 ENCODE CDS 59798377 59798679 . + 2 Parent=gene1144 chr19 ENCODE exon 59802513 59802563 . + . Parent=gene1144 chr19 ENCODE CDS 59802513 59802563 . + 2 Parent=gene1144 chr19 ENCODE exon 59803789 59803827 . + . Parent=gene1144 chr19 ENCODE CDS 59803789 59803827 . + 2 Parent=gene1144 chr19 ENCODE CDS 59803976 59804094 . + 2 Parent=gene1144 chr19 ENCODE exon 59803976 59805367 . + . Parent=gene1144 ### chr19 ENCODE gene 59820424 59840791 . + . ID=gene1145;Name=AC009892.6-002;name2=LILRB1 chr19 ENCODE exon 59820424 59820615 . + . Parent=gene1145 chr19 ENCODE exon 59833780 59833896 . + . Parent=gene1145 chr19 ENCODE exon 59834289 59834370 . + . Parent=gene1145 chr19 ENCODE CDS 59834337 59834370 . + 0 Parent=gene1145 chr19 ENCODE exon 59834534 59834569 . + . Parent=gene1145 chr19 ENCODE CDS 59834534 59834569 . + 2 Parent=gene1145 chr19 ENCODE exon 59834763 59835050 . + . Parent=gene1145 chr19 ENCODE CDS 59834763 59835050 . + 2 Parent=gene1145 chr19 ENCODE exon 59835198 59835500 . + . Parent=gene1145 chr19 ENCODE CDS 59835198 59835500 . + 2 Parent=gene1145 chr19 ENCODE exon 59835727 59836023 . + . Parent=gene1145 chr19 ENCODE CDS 59835727 59836023 . + 2 Parent=gene1145 chr19 ENCODE exon 59836279 59836581 . + . Parent=gene1145 chr19 ENCODE CDS 59836279 59836581 . + 2 Parent=gene1145 chr19 ENCODE exon 59836901 59836951 . + . Parent=gene1145 chr19 ENCODE CDS 59836901 59836951 . + 2 Parent=gene1145 chr19 ENCODE exon 59837237 59837284 . + . Parent=gene1145 chr19 ENCODE CDS 59837237 59837284 . + 2 Parent=gene1145 chr19 ENCODE exon 59837904 59838026 . + . Parent=gene1145 chr19 ENCODE CDS 59837904 59838026 . + 2 Parent=gene1145 chr19 ENCODE exon 59838367 59838442 . + . Parent=gene1145 chr19 ENCODE CDS 59838367 59838442 . + 2 Parent=gene1145 chr19 ENCODE exon 59838522 59838559 . + . Parent=gene1145 chr19 ENCODE CDS 59838522 59838559 . + 1 Parent=gene1145 chr19 ENCODE exon 59838820 59838872 . + . Parent=gene1145 chr19 ENCODE CDS 59838820 59838872 . + 2 Parent=gene1145 chr19 ENCODE exon 59839760 59839915 . + . Parent=gene1145 chr19 ENCODE CDS 59839760 59839915 . + 0 Parent=gene1145 chr19 ENCODE CDS 59839995 59840141 . + 0 Parent=gene1145 chr19 ENCODE exon 59839995 59840791 . + . Parent=gene1145 ### chr19 ENCODE gene 59833673 59840791 . + . ID=gene1146;Name=AC009892.6-001;name2=LILRB1 chr19 ENCODE exon 59833673 59833896 . + . Parent=gene1146 chr19 ENCODE exon 59834289 59834370 . + . Parent=gene1146 chr19 ENCODE CDS 59834337 59834370 . + 0 Parent=gene1146 chr19 ENCODE exon 59834534 59834569 . + . Parent=gene1146 chr19 ENCODE CDS 59834534 59834569 . + 2 Parent=gene1146 chr19 ENCODE exon 59834763 59835050 . + . Parent=gene1146 chr19 ENCODE CDS 59834763 59835050 . + 2 Parent=gene1146 chr19 ENCODE exon 59835198 59835500 . + . Parent=gene1146 chr19 ENCODE CDS 59835198 59835500 . + 2 Parent=gene1146 chr19 ENCODE exon 59835727 59836023 . + . Parent=gene1146 chr19 ENCODE CDS 59835727 59836023 . + 2 Parent=gene1146 chr19 ENCODE exon 59836279 59836581 . + . Parent=gene1146 chr19 ENCODE CDS 59836279 59836581 . + 2 Parent=gene1146 chr19 ENCODE exon 59836901 59836951 . + . Parent=gene1146 chr19 ENCODE CDS 59836901 59836951 . + 2 Parent=gene1146 chr19 ENCODE exon 59837234 59837284 . + . Parent=gene1146 chr19 ENCODE CDS 59837234 59837284 . + 2 Parent=gene1146 chr19 ENCODE exon 59837904 59838026 . + . Parent=gene1146 chr19 ENCODE CDS 59837904 59838026 . + 2 Parent=gene1146 chr19 ENCODE exon 59838367 59838442 . + . Parent=gene1146 chr19 ENCODE CDS 59838367 59838442 . + 2 Parent=gene1146 chr19 ENCODE exon 59838522 59838559 . + . Parent=gene1146 chr19 ENCODE CDS 59838522 59838559 . + 1 Parent=gene1146 chr19 ENCODE exon 59838820 59838872 . + . Parent=gene1146 chr19 ENCODE CDS 59838820 59838872 . + 2 Parent=gene1146 chr19 ENCODE exon 59839760 59839915 . + . Parent=gene1146 chr19 ENCODE CDS 59839760 59839915 . + 0 Parent=gene1146 chr19 ENCODE CDS 59839995 59840141 . + 0 Parent=gene1146 chr19 ENCODE exon 59839995 59840791 . + . Parent=gene1146 ### chr19 ENCODE gene 59833775 59840791 . + . ID=gene1147;name2=LILRB1;Name=AC009892.6-003 chr19 ENCODE exon 59833775 59833896 . + . Parent=gene1147 chr19 ENCODE exon 59834289 59834370 . + . Parent=gene1147 chr19 ENCODE CDS 59834337 59834370 . + 0 Parent=gene1147 chr19 ENCODE exon 59834534 59834569 . + . Parent=gene1147 chr19 ENCODE CDS 59834534 59834569 . + 2 Parent=gene1147 chr19 ENCODE exon 59834763 59835050 . + . Parent=gene1147 chr19 ENCODE CDS 59834763 59835050 . + 2 Parent=gene1147 chr19 ENCODE exon 59835198 59835500 . + . Parent=gene1147 chr19 ENCODE CDS 59835198 59835500 . + 2 Parent=gene1147 chr19 ENCODE exon 59835727 59836023 . + . Parent=gene1147 chr19 ENCODE CDS 59835727 59836023 . + 2 Parent=gene1147 chr19 ENCODE exon 59836279 59836581 . + . Parent=gene1147 chr19 ENCODE CDS 59836279 59836581 . + 2 Parent=gene1147 chr19 ENCODE exon 59836901 59836951 . + . Parent=gene1147 chr19 ENCODE CDS 59836901 59836951 . + 2 Parent=gene1147 chr19 ENCODE exon 59837237 59837284 . + . Parent=gene1147 chr19 ENCODE CDS 59837237 59837284 . + 2 Parent=gene1147 chr19 ENCODE exon 59837904 59838026 . + . Parent=gene1147 chr19 ENCODE CDS 59837904 59838026 . + 2 Parent=gene1147 chr19 ENCODE exon 59838367 59838442 . + . Parent=gene1147 chr19 ENCODE CDS 59838367 59838442 . + 2 Parent=gene1147 chr19 ENCODE exon 59838522 59838559 . + . Parent=gene1147 chr19 ENCODE CDS 59838522 59838559 . + 1 Parent=gene1147 chr19 ENCODE exon 59838820 59838872 . + . Parent=gene1147 chr19 ENCODE CDS 59838820 59838872 . + 2 Parent=gene1147 chr19 ENCODE exon 59839757 59839915 . + . Parent=gene1147 chr19 ENCODE CDS 59839757 59839915 . + 0 Parent=gene1147 chr19 ENCODE CDS 59839995 59840141 . + 0 Parent=gene1147 chr19 ENCODE exon 59839995 59840791 . + . Parent=gene1147 ### chr19 ENCODE gene 59833896 59840453 . + . ID=gene1148;name2=LILRB1;Name=AC009892.6-007 chr19 ENCODE exon 59833896 59834370 . + . Parent=gene1148 chr19 ENCODE CDS 59834337 59834370 . + 0 Parent=gene1148 chr19 ENCODE exon 59834534 59834569 . + . Parent=gene1148 chr19 ENCODE CDS 59834534 59834569 . + 2 Parent=gene1148 chr19 ENCODE exon 59834763 59835050 . + . Parent=gene1148 chr19 ENCODE CDS 59834763 59835050 . + 2 Parent=gene1148 chr19 ENCODE exon 59835198 59835500 . + . Parent=gene1148 chr19 ENCODE CDS 59835198 59835500 . + 2 Parent=gene1148 chr19 ENCODE exon 59835727 59836023 . + . Parent=gene1148 chr19 ENCODE CDS 59835727 59836023 . + 2 Parent=gene1148 chr19 ENCODE exon 59836279 59836581 . + . Parent=gene1148 chr19 ENCODE CDS 59836279 59836581 . + 2 Parent=gene1148 chr19 ENCODE exon 59836901 59836951 . + . Parent=gene1148 chr19 ENCODE CDS 59836901 59836951 . + 2 Parent=gene1148 chr19 ENCODE exon 59837234 59837284 . + . Parent=gene1148 chr19 ENCODE CDS 59837234 59837284 . + 2 Parent=gene1148 chr19 ENCODE exon 59837627 59837665 . + . Parent=gene1148 chr19 ENCODE CDS 59837627 59837665 . + 2 Parent=gene1148 chr19 ENCODE exon 59837904 59838026 . + . Parent=gene1148 chr19 ENCODE CDS 59837904 59838026 . + 2 Parent=gene1148 chr19 ENCODE exon 59838367 59838442 . + . Parent=gene1148 chr19 ENCODE CDS 59838367 59838442 . + 2 Parent=gene1148 chr19 ENCODE exon 59838522 59838559 . + . Parent=gene1148 chr19 ENCODE CDS 59838522 59838559 . + 1 Parent=gene1148 chr19 ENCODE exon 59838820 59838872 . + . Parent=gene1148 chr19 ENCODE CDS 59838820 59838872 . + 2 Parent=gene1148 chr19 ENCODE exon 59839757 59839915 . + . Parent=gene1148 chr19 ENCODE CDS 59839757 59839915 . + 0 Parent=gene1148 chr19 ENCODE CDS 59839995 59840141 . + 0 Parent=gene1148 chr19 ENCODE exon 59839995 59840453 . + . Parent=gene1148 ### chr19 ENCODE gene 59834337 59840339 . + . ID=gene1149;name2=LILRB1;Name=AC009892.6-004 chr19 ENCODE exon 59834337 59834370 . + . Parent=gene1149 chr19 ENCODE CDS 59834337 59834370 . + 0 Parent=gene1149 chr19 ENCODE exon 59834534 59834569 . + . Parent=gene1149 chr19 ENCODE CDS 59834534 59834569 . + 2 Parent=gene1149 chr19 ENCODE exon 59834763 59835050 . + . Parent=gene1149 chr19 ENCODE CDS 59834763 59835050 . + 2 Parent=gene1149 chr19 ENCODE exon 59835198 59835500 . + . Parent=gene1149 chr19 ENCODE CDS 59835198 59835500 . + 2 Parent=gene1149 chr19 ENCODE exon 59835727 59836023 . + . Parent=gene1149 chr19 ENCODE CDS 59835727 59836023 . + 2 Parent=gene1149 chr19 ENCODE exon 59836279 59836581 . + . Parent=gene1149 chr19 ENCODE CDS 59836279 59836581 . + 2 Parent=gene1149 chr19 ENCODE exon 59837234 59837284 . + . Parent=gene1149 chr19 ENCODE CDS 59837234 59837284 . + 2 Parent=gene1149 chr19 ENCODE exon 59837904 59838026 . + . Parent=gene1149 chr19 ENCODE CDS 59837904 59838026 . + 2 Parent=gene1149 chr19 ENCODE exon 59838367 59838442 . + . Parent=gene1149 chr19 ENCODE CDS 59838367 59838442 . + 2 Parent=gene1149 chr19 ENCODE exon 59838522 59838559 . + . Parent=gene1149 chr19 ENCODE CDS 59838522 59838559 . + 1 Parent=gene1149 chr19 ENCODE exon 59838820 59838872 . + . Parent=gene1149 chr19 ENCODE CDS 59838820 59838872 . + 2 Parent=gene1149 chr19 ENCODE exon 59839760 59839915 . + . Parent=gene1149 chr19 ENCODE CDS 59839760 59839915 . + 0 Parent=gene1149 chr19 ENCODE CDS 59839995 59840141 . + 0 Parent=gene1149 chr19 ENCODE exon 59839995 59840339 . + . Parent=gene1149 ### chr19 ENCODE gene 59834337 59840339 . + . ID=gene1150;Name=AC009892.6-006;name2=LILRB1 chr19 ENCODE exon 59834337 59834370 . + . Parent=gene1150 chr19 ENCODE exon 59834534 59834569 . + . Parent=gene1150 chr19 ENCODE exon 59834763 59835050 . + . Parent=gene1150 chr19 ENCODE exon 59835198 59835500 . + . Parent=gene1150 chr19 ENCODE exon 59835727 59836023 . + . Parent=gene1150 chr19 ENCODE exon 59836279 59836581 . + . Parent=gene1150 chr19 ENCODE exon 59836901 59836951 . + . Parent=gene1150 chr19 ENCODE exon 59837237 59837284 . + . Parent=gene1150 chr19 ENCODE exon 59837904 59838026 . + . Parent=gene1150 chr19 ENCODE exon 59838522 59838559 . + . Parent=gene1150 chr19 ENCODE exon 59838820 59838872 . + . Parent=gene1150 chr19 ENCODE exon 59839760 59839915 . + . Parent=gene1150 chr19 ENCODE exon 59839995 59840339 . + . Parent=gene1150 ### chr19 ENCODE gene 59834337 59840339 . + . ID=gene1151;Name=AC009892.6-005;name2=LILRB1 chr19 ENCODE exon 59834337 59834370 . + . Parent=gene1151 chr19 ENCODE CDS 59834337 59834370 . + 0 Parent=gene1151 chr19 ENCODE exon 59834534 59834569 . + . Parent=gene1151 chr19 ENCODE CDS 59834534 59834569 . + 2 Parent=gene1151 chr19 ENCODE exon 59834763 59835050 . + . Parent=gene1151 chr19 ENCODE CDS 59834763 59835050 . + 2 Parent=gene1151 chr19 ENCODE exon 59835198 59835500 . + . Parent=gene1151 chr19 ENCODE CDS 59835198 59835500 . + 2 Parent=gene1151 chr19 ENCODE exon 59835727 59836023 . + . Parent=gene1151 chr19 ENCODE CDS 59835727 59836023 . + 2 Parent=gene1151 chr19 ENCODE exon 59836279 59836581 . + . Parent=gene1151 chr19 ENCODE CDS 59836279 59836581 . + 2 Parent=gene1151 chr19 ENCODE exon 59836901 59836951 . + . Parent=gene1151 chr19 ENCODE CDS 59836901 59836951 . + 2 Parent=gene1151 chr19 ENCODE exon 59837234 59837284 . + . Parent=gene1151 chr19 ENCODE CDS 59837234 59837284 . + 2 Parent=gene1151 chr19 ENCODE exon 59837904 59838026 . + . Parent=gene1151 chr19 ENCODE CDS 59837904 59838026 . + 2 Parent=gene1151 chr19 ENCODE exon 59838367 59838442 . + . Parent=gene1151 chr19 ENCODE CDS 59838367 59838442 . + 2 Parent=gene1151 chr19 ENCODE exon 59838522 59838559 . + . Parent=gene1151 chr19 ENCODE CDS 59838522 59838559 . + 1 Parent=gene1151 chr19 ENCODE exon 59838820 59838872 . + . Parent=gene1151 chr19 ENCODE CDS 59838820 59838872 . + 2 Parent=gene1151 chr19 ENCODE exon 59839757 59839915 . + . Parent=gene1151 chr19 ENCODE CDS 59839757 59839915 . + 0 Parent=gene1151 chr19 ENCODE CDS 59839995 59840141 . + 0 Parent=gene1151 chr19 ENCODE exon 59839995 59840339 . + . Parent=gene1151 ### chr19 ENCODE gene 59834525 59835318 . + . ID=gene1152;Name=AC009892.6-009;name2=LILRB1 chr19 ENCODE exon 59834525 59834569 . + . Parent=gene1152 chr19 ENCODE exon 59834763 59835050 . + . Parent=gene1152 chr19 ENCODE exon 59835198 59835318 . + . Parent=gene1152 ### chr19 ENCODE gene 59836389 59837446 . + . ID=gene1153;Name=AC009892.6-010;name2=LILRB1 chr19 ENCODE exon 59836389 59836581 . + . Parent=gene1153 chr19 ENCODE exon 59836901 59836951 . + . Parent=gene1153 chr19 ENCODE exon 59837234 59837446 . + . Parent=gene1153 ### chr19 ENCODE gene 59836406 59840791 . + . ID=gene1154;Name=AC009892.6-008;name2=LILRB1 chr19 ENCODE exon 59836406 59836507 . + . Parent=gene1154 chr19 ENCODE exon 59836901 59836951 . + . Parent=gene1154 chr19 ENCODE exon 59837234 59837284 . + . Parent=gene1154 chr19 ENCODE exon 59837851 59838026 . + . Parent=gene1154 chr19 ENCODE exon 59838367 59838442 . + . Parent=gene1154 chr19 ENCODE exon 59838522 59838559 . + . Parent=gene1154 chr19 ENCODE exon 59838820 59839915 . + . Parent=gene1154 chr19 ENCODE exon 59839995 59840791 . + . Parent=gene1154 ### chr19 ENCODE gene 59837634 59838879 . + . ID=gene1155;Name=AC009892.6-012;name2=LILRB1 chr19 ENCODE exon 59837634 59838026 . + . Parent=gene1155 chr19 ENCODE exon 59838367 59838442 . + . Parent=gene1155 chr19 ENCODE exon 59838522 59838559 . + . Parent=gene1155 chr19 ENCODE exon 59838820 59838879 . + . Parent=gene1155 ### chr19 ENCODE gene 59838156 59839368 . + . ID=gene1156;Name=AC009892.6-011;name2=LILRB1 chr19 ENCODE exon 59838156 59838442 . + . Parent=gene1156 chr19 ENCODE exon 59838522 59838559 . + . Parent=gene1156 chr19 ENCODE exon 59838820 59839368 . + . Parent=gene1156 ### chr19 ENCODE gene 59838985 59842155 . - . ID=gene1157;name2=AC009892.10;Name=AC009892.10-001 chr19 ENCODE exon 59838985 59839339 . - . Parent=gene1157 chr19 ENCODE CDS 59839184 59839339 . - 0 Parent=gene1157 chr19 ENCODE CDS 59841957 59842001 . - 0 Parent=gene1157 chr19 ENCODE exon 59841957 59842155 . - . Parent=gene1157 ### chr19 ENCODE gene 59847152 59852861 . + . ID=gene1158;name2=LILRB4;Name=AC011515.1-011 chr19 ENCODE exon 59847152 59847229 . + . Parent=gene1158 chr19 ENCODE exon 59851295 59852861 . + . Parent=gene1158 ### chr19 ENCODE gene 59847178 59867225 . + . ID=gene1159;Name=AC011515.1-010;name2=LILRB4 chr19 ENCODE exon 59847178 59847229 . + . Parent=gene1159 chr19 ENCODE exon 59866083 59866331 . + . Parent=gene1159 chr19 ENCODE CDS 59866298 59866331 . + 0 Parent=gene1159 chr19 ENCODE exon 59866802 59866837 . + . Parent=gene1159 chr19 ENCODE CDS 59866802 59866837 . + 2 Parent=gene1159 chr19 ENCODE exon 59867024 59867225 . + . Parent=gene1159 chr19 ENCODE CDS 59867024 59867225 . + 2 Parent=gene1159 ### chr19 ENCODE gene 59865391 59873622 . + . ID=gene1160;Name=AC011515.1-001;name2=LILRB4 chr19 ENCODE exon 59865391 59865451 . + . Parent=gene1160 chr19 ENCODE exon 59865772 59865810 . + . Parent=gene1160 chr19 ENCODE exon 59866083 59866331 . + . Parent=gene1160 chr19 ENCODE CDS 59866298 59866331 . + 0 Parent=gene1160 chr19 ENCODE exon 59866802 59866837 . + . Parent=gene1160 chr19 ENCODE CDS 59866802 59866837 . + 2 Parent=gene1160 chr19 ENCODE exon 59867024 59867308 . + . Parent=gene1160 chr19 ENCODE CDS 59867024 59867308 . + 2 Parent=gene1160 chr19 ENCODE exon 59867449 59867748 . + . Parent=gene1160 chr19 ENCODE CDS 59867449 59867748 . + 2 Parent=gene1160 chr19 ENCODE exon 59868062 59868112 . + . Parent=gene1160 chr19 ENCODE CDS 59868062 59868112 . + 2 Parent=gene1160 chr19 ENCODE exon 59868393 59868443 . + . Parent=gene1160 chr19 ENCODE CDS 59868393 59868443 . + 2 Parent=gene1160 chr19 ENCODE exon 59869078 59869194 . + . Parent=gene1160 chr19 ENCODE CDS 59869078 59869194 . + 2 Parent=gene1160 chr19 ENCODE exon 59869503 59869578 . + . Parent=gene1160 chr19 ENCODE CDS 59869503 59869578 . + 2 Parent=gene1160 chr19 ENCODE exon 59869662 59869699 . + . Parent=gene1160 chr19 ENCODE CDS 59869662 59869699 . + 1 Parent=gene1160 chr19 ENCODE exon 59869960 59870012 . + . Parent=gene1160 chr19 ENCODE CDS 59869960 59870012 . + 2 Parent=gene1160 chr19 ENCODE exon 59870898 59871056 . + . Parent=gene1160 chr19 ENCODE CDS 59870898 59871056 . + 0 Parent=gene1160 chr19 ENCODE CDS 59871136 59871282 . + 0 Parent=gene1160 chr19 ENCODE exon 59871136 59873622 . + . Parent=gene1160 ### chr19 ENCODE gene 59865421 59870962 . + . ID=gene1161;Name=AC011515.1-005;name2=LILRB4 chr19 ENCODE exon 59865421 59865451 . + . Parent=gene1161 chr19 ENCODE exon 59865772 59865810 . + . Parent=gene1161 chr19 ENCODE exon 59866083 59866331 . + . Parent=gene1161 chr19 ENCODE exon 59867104 59867308 . + . Parent=gene1161 chr19 ENCODE exon 59867449 59867748 . + . Parent=gene1161 chr19 ENCODE exon 59868062 59868112 . + . Parent=gene1161 chr19 ENCODE exon 59868393 59868443 . + . Parent=gene1161 chr19 ENCODE exon 59869078 59869194 . + . Parent=gene1161 chr19 ENCODE exon 59869503 59869578 . + . Parent=gene1161 chr19 ENCODE exon 59869662 59869699 . + . Parent=gene1161 chr19 ENCODE exon 59869960 59870012 . + . Parent=gene1161 chr19 ENCODE exon 59870901 59870962 . + . Parent=gene1161 ### chr19 ENCODE gene 59866259 59871660 . + . ID=gene1162;Name=AC011515.1-002;name2=LILRB4 chr19 ENCODE exon 59866259 59866331 . + . Parent=gene1162 chr19 ENCODE CDS 59866298 59866331 . + 0 Parent=gene1162 chr19 ENCODE exon 59866802 59866837 . + . Parent=gene1162 chr19 ENCODE CDS 59866802 59866837 . + 2 Parent=gene1162 chr19 ENCODE exon 59867024 59867308 . + . Parent=gene1162 chr19 ENCODE CDS 59867024 59867308 . + 2 Parent=gene1162 chr19 ENCODE exon 59867449 59867748 . + . Parent=gene1162 chr19 ENCODE CDS 59867449 59867748 . + 2 Parent=gene1162 chr19 ENCODE exon 59868062 59868112 . + . Parent=gene1162 chr19 ENCODE CDS 59868062 59868112 . + 2 Parent=gene1162 chr19 ENCODE exon 59868393 59868443 . + . Parent=gene1162 chr19 ENCODE CDS 59868393 59868443 . + 2 Parent=gene1162 chr19 ENCODE exon 59869078 59869194 . + . Parent=gene1162 chr19 ENCODE CDS 59869078 59869194 . + 2 Parent=gene1162 chr19 ENCODE exon 59869503 59869578 . + . Parent=gene1162 chr19 ENCODE CDS 59869503 59869578 . + 2 Parent=gene1162 chr19 ENCODE exon 59869662 59869699 . + . Parent=gene1162 chr19 ENCODE CDS 59869662 59869699 . + 1 Parent=gene1162 chr19 ENCODE exon 59869960 59870012 . + . Parent=gene1162 chr19 ENCODE CDS 59869960 59870012 . + 2 Parent=gene1162 chr19 ENCODE exon 59870901 59871056 . + . Parent=gene1162 chr19 ENCODE CDS 59870901 59871056 . + 0 Parent=gene1162 chr19 ENCODE CDS 59871136 59871282 . + 0 Parent=gene1162 chr19 ENCODE exon 59871136 59871660 . + . Parent=gene1162 ### chr19 ENCODE gene 59866262 59871660 . + . ID=gene1163;Name=AC011515.1-004;name2=LILRB4 chr19 ENCODE exon 59866262 59866331 . + . Parent=gene1163 chr19 ENCODE CDS 59866298 59866331 . + 0 Parent=gene1163 chr19 ENCODE exon 59866802 59866837 . + . Parent=gene1163 chr19 ENCODE CDS 59866802 59866837 . + 2 Parent=gene1163 chr19 ENCODE exon 59867024 59867308 . + . Parent=gene1163 chr19 ENCODE CDS 59867024 59867308 . + 2 Parent=gene1163 chr19 ENCODE exon 59867449 59867748 . + . Parent=gene1163 chr19 ENCODE CDS 59867449 59867748 . + 2 Parent=gene1163 chr19 ENCODE exon 59868062 59868112 . + . Parent=gene1163 chr19 ENCODE CDS 59868062 59868112 . + 2 Parent=gene1163 chr19 ENCODE exon 59868393 59868443 . + . Parent=gene1163 chr19 ENCODE CDS 59868393 59868443 . + 2 Parent=gene1163 chr19 ENCODE exon 59869078 59869194 . + . Parent=gene1163 chr19 ENCODE CDS 59869078 59869194 . + 2 Parent=gene1163 chr19 ENCODE exon 59869503 59869578 . + . Parent=gene1163 chr19 ENCODE CDS 59869503 59869578 . + 2 Parent=gene1163 chr19 ENCODE exon 59869662 59869699 . + . Parent=gene1163 chr19 ENCODE CDS 59869662 59869699 . + 1 Parent=gene1163 chr19 ENCODE exon 59869960 59870012 . + . Parent=gene1163 chr19 ENCODE CDS 59869960 59870012 . + 2 Parent=gene1163 chr19 ENCODE CDS 59871136 59871282 . + 0 Parent=gene1163 chr19 ENCODE exon 59871136 59871660 . + . Parent=gene1163 ### chr19 ENCODE gene 59866284 59871660 . + . ID=gene1164;Name=AC011515.1-003;name2=LILRB4 chr19 ENCODE exon 59866284 59866331 . + . Parent=gene1164 chr19 ENCODE CDS 59866298 59866331 . + 0 Parent=gene1164 chr19 ENCODE exon 59866802 59866837 . + . Parent=gene1164 chr19 ENCODE CDS 59866802 59866837 . + 2 Parent=gene1164 chr19 ENCODE exon 59867024 59867308 . + . Parent=gene1164 chr19 ENCODE CDS 59867024 59867308 . + 2 Parent=gene1164 chr19 ENCODE exon 59867449 59867748 . + . Parent=gene1164 chr19 ENCODE CDS 59867449 59867748 . + 2 Parent=gene1164 chr19 ENCODE exon 59868062 59868112 . + . Parent=gene1164 chr19 ENCODE CDS 59868062 59868112 . + 2 Parent=gene1164 chr19 ENCODE exon 59868393 59868443 . + . Parent=gene1164 chr19 ENCODE CDS 59868393 59868443 . + 2 Parent=gene1164 chr19 ENCODE exon 59869078 59869194 . + . Parent=gene1164 chr19 ENCODE CDS 59869078 59869194 . + 2 Parent=gene1164 chr19 ENCODE exon 59869503 59869578 . + . Parent=gene1164 chr19 ENCODE CDS 59869503 59869578 . + 2 Parent=gene1164 chr19 ENCODE exon 59869662 59869699 . + . Parent=gene1164 chr19 ENCODE CDS 59869662 59869699 . + 1 Parent=gene1164 chr19 ENCODE exon 59869957 59870012 . + . Parent=gene1164 chr19 ENCODE CDS 59869957 59870012 . + 2 Parent=gene1164 chr19 ENCODE exon 59870898 59871056 . + . Parent=gene1164 chr19 ENCODE CDS 59870898 59871056 . + 0 Parent=gene1164 chr19 ENCODE CDS 59871136 59871282 . + 0 Parent=gene1164 chr19 ENCODE exon 59871136 59871660 . + . Parent=gene1164 ### chr19 ENCODE gene 59866291 59871056 . + . ID=gene1165;Name=AC011515.1-006;name2=LILRB4 chr19 ENCODE exon 59866291 59866331 . + . Parent=gene1165 chr19 ENCODE CDS 59866298 59866331 . + 0 Parent=gene1165 chr19 ENCODE exon 59866802 59866837 . + . Parent=gene1165 chr19 ENCODE CDS 59866802 59866837 . + 2 Parent=gene1165 chr19 ENCODE exon 59867024 59867308 . + . Parent=gene1165 chr19 ENCODE CDS 59867024 59867308 . + 2 Parent=gene1165 chr19 ENCODE exon 59867449 59867748 . + . Parent=gene1165 chr19 ENCODE CDS 59867449 59867748 . + 2 Parent=gene1165 chr19 ENCODE exon 59868062 59868112 . + . Parent=gene1165 chr19 ENCODE CDS 59868062 59868112 . + 2 Parent=gene1165 chr19 ENCODE exon 59868396 59868443 . + . Parent=gene1165 chr19 ENCODE CDS 59868396 59868443 . + 2 Parent=gene1165 chr19 ENCODE exon 59869078 59869194 . + . Parent=gene1165 chr19 ENCODE CDS 59869078 59869194 . + 2 Parent=gene1165 chr19 ENCODE exon 59869503 59869578 . + . Parent=gene1165 chr19 ENCODE CDS 59869503 59869578 . + 2 Parent=gene1165 chr19 ENCODE exon 59869662 59869699 . + . Parent=gene1165 chr19 ENCODE CDS 59869662 59869699 . + 1 Parent=gene1165 chr19 ENCODE exon 59869960 59870012 . + . Parent=gene1165 chr19 ENCODE CDS 59869960 59870012 . + 2 Parent=gene1165 chr19 ENCODE exon 59870898 59871056 . + . Parent=gene1165 chr19 ENCODE CDS 59870898 59871056 . + 0 Parent=gene1165 ### chr19 ENCODE gene 59868393 59870301 . + . ID=gene1166;Name=AC011515.1-008;name2=LILRB4 chr19 ENCODE exon 59868393 59868443 . + . Parent=gene1166 chr19 ENCODE exon 59869078 59869194 . + . Parent=gene1166 chr19 ENCODE exon 59869503 59869578 . + . Parent=gene1166 chr19 ENCODE exon 59869662 59869699 . + . Parent=gene1166 chr19 ENCODE exon 59869957 59870012 . + . Parent=gene1166 chr19 ENCODE exon 59870106 59870301 . + . Parent=gene1166 ### chr19 ENCODE gene 59869061 59870653 . + . ID=gene1167;Name=AC011515.1-007;name2=LILRB4 chr19 ENCODE exon 59869061 59869194 . + . Parent=gene1167 chr19 ENCODE exon 59869503 59869578 . + . Parent=gene1167 chr19 ENCODE exon 59869662 59869699 . + . Parent=gene1167 chr19 ENCODE exon 59869957 59870653 . + . Parent=gene1167 ### chr19 ENCODE gene 59869549 59870301 . + . ID=gene1168;Name=AC011515.1-009;name2=LILRB4 chr19 ENCODE exon 59869549 59869578 . + . Parent=gene1168 chr19 ENCODE exon 59869662 59869719 . + . Parent=gene1168 chr19 ENCODE exon 59869960 59870301 . + . Parent=gene1168 ### chr19 ENCODE gene 59927796 59939815 . + . ID=gene1169;Name=AC006293.2-001;name2=KIR3DL3 chr19 ENCODE exon 59927796 59927847 . + . Parent=gene1169 chr19 ENCODE CDS 59927814 59927847 . + 0 Parent=gene1169 chr19 ENCODE exon 59928525 59928560 . + . Parent=gene1169 chr19 ENCODE CDS 59928525 59928560 . + 2 Parent=gene1169 chr19 ENCODE exon 59929331 59929615 . + . Parent=gene1169 chr19 ENCODE CDS 59929331 59929615 . + 2 Parent=gene1169 chr19 ENCODE exon 59930889 59931188 . + . Parent=gene1169 chr19 ENCODE CDS 59930889 59931188 . + 2 Parent=gene1169 chr19 ENCODE exon 59932771 59933064 . + . Parent=gene1169 chr19 ENCODE CDS 59932771 59933064 . + 2 Parent=gene1169 chr19 ENCODE exon 59938532 59938636 . + . Parent=gene1169 chr19 ENCODE CDS 59938532 59938636 . + 2 Parent=gene1169 chr19 ENCODE exon 59939099 59939151 . + . Parent=gene1169 chr19 ENCODE CDS 59939099 59939151 . + 2 Parent=gene1169 chr19 ENCODE CDS 59939250 59939375 . + 0 Parent=gene1169 chr19 ENCODE exon 59939250 59939815 . + . Parent=gene1169 ### chr19 ENCODE gene 59941792 59956316 . + . ID=gene1170;Name=AC011501.1-001;name2=KIR2DL3 chr19 ENCODE exon 59941792 59941856 . + . Parent=gene1170 chr19 ENCODE CDS 59941823 59941856 . + 0 Parent=gene1170 chr19 ENCODE exon 59942765 59942800 . + . Parent=gene1170 chr19 ENCODE CDS 59942765 59942800 . + 2 Parent=gene1170 chr19 ENCODE exon 59945238 59945537 . + . Parent=gene1170 chr19 ENCODE CDS 59945238 59945537 . + 2 Parent=gene1170 chr19 ENCODE exon 59947055 59947348 . + . Parent=gene1170 chr19 ENCODE CDS 59947055 59947348 . + 2 Parent=gene1170 chr19 ENCODE exon 59950599 59950649 . + . Parent=gene1170 chr19 ENCODE CDS 59950599 59950649 . + 2 Parent=gene1170 chr19 ENCODE exon 59954913 59955017 . + . Parent=gene1170 chr19 ENCODE CDS 59954913 59955017 . + 2 Parent=gene1170 chr19 ENCODE exon 59955480 59955532 . + . Parent=gene1170 chr19 ENCODE CDS 59955480 59955532 . + 2 Parent=gene1170 chr19 ENCODE CDS 59955631 59955783 . + 0 Parent=gene1170 chr19 ENCODE exon 59955631 59956316 . + . Parent=gene1170 ### chr19 ENCODE gene 59973075 59987310 . + . ID=gene1171;Name=AC011501.3-001;name2=KIR2DL1 chr19 ENCODE exon 59973075 59973148 . + . Parent=gene1171 chr19 ENCODE CDS 59973115 59973148 . + 0 Parent=gene1171 chr19 ENCODE exon 59974113 59974148 . + . Parent=gene1171 chr19 ENCODE CDS 59974113 59974148 . + 2 Parent=gene1171 chr19 ENCODE exon 59976597 59976896 . + . Parent=gene1171 chr19 ENCODE CDS 59976597 59976896 . + 2 Parent=gene1171 chr19 ENCODE exon 59978429 59978722 . + . Parent=gene1171 chr19 ENCODE CDS 59978429 59978722 . + 2 Parent=gene1171 chr19 ENCODE exon 59981876 59981926 . + . Parent=gene1171 chr19 ENCODE CDS 59981876 59981926 . + 2 Parent=gene1171 chr19 ENCODE exon 59986186 59986287 . + . Parent=gene1171 chr19 ENCODE CDS 59986186 59986287 . + 2 Parent=gene1171 chr19 ENCODE exon 59986750 59986802 . + . Parent=gene1171 chr19 ENCODE CDS 59986750 59986802 . + 2 Parent=gene1171 chr19 ENCODE CDS 59986901 59987077 . + 0 Parent=gene1171 chr19 ENCODE exon 59986901 59987310 . + . Parent=gene1171 ### chr19 ENCODE gene 59973089 59987129 . + . ID=gene1172;name2=KIR2DL1;Name=AC011501.3-002 chr19 ENCODE exon 59973089 59973148 . + . Parent=gene1172 chr19 ENCODE CDS 59973115 59973148 . + 0 Parent=gene1172 chr19 ENCODE exon 59974113 59974148 . + . Parent=gene1172 chr19 ENCODE CDS 59974113 59974148 . + 2 Parent=gene1172 chr19 ENCODE exon 59976597 59976896 . + . Parent=gene1172 chr19 ENCODE CDS 59976597 59976896 . + 2 Parent=gene1172 chr19 ENCODE exon 59978429 59978722 . + . Parent=gene1172 chr19 ENCODE CDS 59978429 59978722 . + 2 Parent=gene1172 chr19 ENCODE exon 59981876 59981926 . + . Parent=gene1172 chr19 ENCODE CDS 59981876 59981926 . + 2 Parent=gene1172 chr19 ENCODE exon 59983353 59983430 . + . Parent=gene1172 chr19 ENCODE CDS 59983353 59983430 . + 2 Parent=gene1172 chr19 ENCODE exon 59986186 59986287 . + . Parent=gene1172 chr19 ENCODE CDS 59986186 59986287 . + 2 Parent=gene1172 chr19 ENCODE exon 59986750 59986802 . + . Parent=gene1172 chr19 ENCODE CDS 59986750 59986802 . + 2 Parent=gene1172 chr19 ENCODE CDS 59986901 59987077 . + 0 Parent=gene1172 chr19 ENCODE exon 59986901 59987129 . + . Parent=gene1172 ### chr19 ENCODE gene 60006878 60017784 . + . ID=gene1173;Name=AC011501.5-001;name2=KIR2DL4 chr19 ENCODE exon 60006878 60006958 . + . Parent=gene1173 chr19 ENCODE CDS 60006919 60006958 . + 0 Parent=gene1173 chr19 ENCODE exon 60007158 60007193 . + . Parent=gene1173 chr19 ENCODE CDS 60007158 60007193 . + 2 Parent=gene1173 chr19 ENCODE exon 60008060 60008344 . + . Parent=gene1173 chr19 ENCODE CDS 60008060 60008344 . + 2 Parent=gene1173 chr19 ENCODE exon 60009218 60009511 . + . Parent=gene1173 chr19 ENCODE CDS 60009218 60009511 . + 2 Parent=gene1173 chr19 ENCODE exon 60012100 60012150 . + . Parent=gene1173 chr19 ENCODE CDS 60012100 60012150 . + 2 Parent=gene1173 chr19 ENCODE exon 60016392 60016495 . + . Parent=gene1173 chr19 ENCODE CDS 60016392 60016495 . + 2 Parent=gene1173 chr19 ENCODE CDS 60016957 60016968 . + 0 Parent=gene1173 chr19 ENCODE exon 60016957 60017009 . + . Parent=gene1173 chr19 ENCODE exon 60017109 60017784 . + . Parent=gene1173 ### chr19 ENCODE gene 60006907 60017784 . + . ID=gene1174;Name=AC011501.5-005;name2=KIR2DL4 chr19 ENCODE exon 60006907 60006958 . + . Parent=gene1174 chr19 ENCODE exon 60007158 60007193 . + . Parent=gene1174 chr19 ENCODE exon 60008060 60008344 . + . Parent=gene1174 chr19 ENCODE exon 60009218 60009511 . + . Parent=gene1174 chr19 ENCODE exon 60016392 60016495 . + . Parent=gene1174 chr19 ENCODE exon 60016957 60017009 . + . Parent=gene1174 chr19 ENCODE exon 60017109 60017784 . + . Parent=gene1174 ### chr19 ENCODE gene 60006907 60017784 . + . ID=gene1175;Name=AC011501.5-002;name2=KIR2DL4 chr19 ENCODE exon 60006907 60006958 . + . Parent=gene1175 chr19 ENCODE exon 60007158 60007193 . + . Parent=gene1175 chr19 ENCODE exon 60008060 60008344 . + . Parent=gene1175 chr19 ENCODE exon 60009218 60009511 . + . Parent=gene1175 chr19 ENCODE exon 60017109 60017784 . + . Parent=gene1175 ### chr19 ENCODE gene 60006907 60017784 . + . ID=gene1176;Name=AC011501.5-003;name2=KIR2DL4 chr19 ENCODE exon 60006907 60006958 . + . Parent=gene1176 chr19 ENCODE CDS 60006919 60006958 . + 0 Parent=gene1176 chr19 ENCODE exon 60007158 60007193 . + . Parent=gene1176 chr19 ENCODE CDS 60007158 60007193 . + 2 Parent=gene1176 chr19 ENCODE exon 60008060 60008344 . + . Parent=gene1176 chr19 ENCODE CDS 60008060 60008344 . + 2 Parent=gene1176 chr19 ENCODE exon 60009218 60009511 . + . Parent=gene1176 chr19 ENCODE CDS 60009218 60009511 . + 2 Parent=gene1176 chr19 ENCODE exon 60012100 60012150 . + . Parent=gene1176 chr19 ENCODE CDS 60012100 60012150 . + 2 Parent=gene1176 chr19 ENCODE exon 60016957 60017009 . + . Parent=gene1176 chr19 ENCODE CDS 60016957 60017009 . + 2 Parent=gene1176 chr19 ENCODE CDS 60017109 60017378 . + 0 Parent=gene1176 chr19 ENCODE exon 60017109 60017784 . + . Parent=gene1176 ### chr19 ENCODE gene 60006907 60017784 . + . ID=gene1177;name2=KIR2DL4;Name=AC011501.5-004 chr19 ENCODE exon 60006907 60006958 . + . Parent=gene1177 chr19 ENCODE CDS 60006919 60006958 . + 0 Parent=gene1177 chr19 ENCODE exon 60007158 60007193 . + . Parent=gene1177 chr19 ENCODE CDS 60007158 60007193 . + 2 Parent=gene1177 chr19 ENCODE exon 60008060 60008344 . + . Parent=gene1177 chr19 ENCODE CDS 60008060 60008344 . + 2 Parent=gene1177 chr19 ENCODE exon 60009218 60009511 . + . Parent=gene1177 chr19 ENCODE CDS 60009218 60009511 . + 2 Parent=gene1177 chr19 ENCODE exon 60016957 60017009 . + . Parent=gene1177 chr19 ENCODE CDS 60016957 60017009 . + 2 Parent=gene1177 chr19 ENCODE CDS 60017109 60017378 . + 0 Parent=gene1177 chr19 ENCODE exon 60017109 60017784 . + . Parent=gene1177 ### chr19 ENCODE gene 60006908 60017389 . + . ID=gene1178;Name=AC011501.5-007;name2=KIR2DL4 chr19 ENCODE exon 60006908 60006958 . + . Parent=gene1178 chr19 ENCODE CDS 60006919 60006958 . + 0 Parent=gene1178 chr19 ENCODE exon 60007158 60007193 . + . Parent=gene1178 chr19 ENCODE CDS 60007158 60007193 . + 2 Parent=gene1178 chr19 ENCODE exon 60009218 60009511 . + . Parent=gene1178 chr19 ENCODE CDS 60009218 60009511 . + 2 Parent=gene1178 chr19 ENCODE exon 60016957 60017009 . + . Parent=gene1178 chr19 ENCODE CDS 60016957 60017009 . + 2 Parent=gene1178 chr19 ENCODE CDS 60017109 60017378 . + 0 Parent=gene1178 chr19 ENCODE exon 60017109 60017389 . + . Parent=gene1178 ### chr19 ENCODE gene 60006919 60017660 . + . ID=gene1179;Name=AC011501.5-006;name2=KIR2DL4 chr19 ENCODE exon 60006919 60006958 . + . Parent=gene1179 chr19 ENCODE CDS 60006919 60006958 . + 0 Parent=gene1179 chr19 ENCODE exon 60007158 60007193 . + . Parent=gene1179 chr19 ENCODE CDS 60007158 60007193 . + 2 Parent=gene1179 chr19 ENCODE exon 60009218 60009511 . + . Parent=gene1179 chr19 ENCODE CDS 60009218 60009511 . + 2 Parent=gene1179 chr19 ENCODE exon 60012100 60012150 . + . Parent=gene1179 chr19 ENCODE CDS 60012100 60012150 . + 2 Parent=gene1179 chr19 ENCODE exon 60016957 60017009 . + . Parent=gene1179 chr19 ENCODE CDS 60016957 60017009 . + 2 Parent=gene1179 chr19 ENCODE CDS 60017109 60017378 . + 0 Parent=gene1179 chr19 ENCODE exon 60017109 60017660 . + . Parent=gene1179 ### chr19 ENCODE gene 60006919 60017784 . + . ID=gene1180;name2=KIR2DL4;Name=AC011501.5-008 chr19 ENCODE exon 60006919 60006958 . + . Parent=gene1180 chr19 ENCODE CDS 60006919 60006958 . + 0 Parent=gene1180 chr19 ENCODE exon 60007158 60007193 . + . Parent=gene1180 chr19 ENCODE CDS 60007158 60007193 . + 2 Parent=gene1180 chr19 ENCODE exon 60008060 60008344 . + . Parent=gene1180 chr19 ENCODE CDS 60008060 60008344 . + 2 Parent=gene1180 chr19 ENCODE exon 60009218 60009511 . + . Parent=gene1180 chr19 ENCODE CDS 60009218 60009511 . + 2 Parent=gene1180 chr19 ENCODE exon 60012100 60012150 . + . Parent=gene1180 chr19 ENCODE CDS 60012100 60012150 . + 2 Parent=gene1180 chr19 ENCODE exon 60016392 60016562 . + . Parent=gene1180 chr19 ENCODE CDS 60016392 60016562 . + 2 Parent=gene1180 chr19 ENCODE exon 60016957 60017009 . + . Parent=gene1180 chr19 ENCODE CDS 60016957 60017009 . + 2 Parent=gene1180 chr19 ENCODE CDS 60017109 60017378 . + 0 Parent=gene1180 chr19 ENCODE exon 60017109 60017784 . + . Parent=gene1180 ### chr19 ENCODE gene 60019735 60023279 . + . ID=gene1181;Name=AC011501.6-001;name2=KIR3DL1 chr19 ENCODE exon 60019735 60019801 . + . Parent=gene1181 chr19 ENCODE exon 60020801 60020836 . + . Parent=gene1181 chr19 ENCODE exon 60021582 60021866 . + . Parent=gene1181 chr19 ENCODE exon 60022980 60023279 . + . Parent=gene1181 ### chr19 ENCODE gene 60019754 60023279 . + . ID=gene1182;Name=AC011501.6-003;name2=KIR3DL1 chr19 ENCODE exon 60019754 60019801 . + . Parent=gene1182 chr19 ENCODE exon 60020801 60020836 . + . Parent=gene1182 chr19 ENCODE exon 60021582 60021866 . + . Parent=gene1182 chr19 ENCODE exon 60022980 60023279 . + . Parent=gene1182 ### chr19 ENCODE gene 60019757 60023279 . + . ID=gene1183;Name=AC011501.6-002;name2=KIR3DL1 chr19 ENCODE exon 60019757 60019801 . + . Parent=gene1183 chr19 ENCODE exon 60020801 60020836 . + . Parent=gene1183 chr19 ENCODE exon 60022980 60023279 . + . Parent=gene1183 ### chr2 ENCODE gene 118288456 118306185 . + . ID=gene1184;Name=AC009404.1-001;name2=DDX18 chr2 ENCODE exon 118288456 118288668 . + . Parent=gene1184 chr2 ENCODE CDS 118288584 118288668 . + 0 Parent=gene1184 chr2 ENCODE exon 118291250 118291534 . + . Parent=gene1184 chr2 ENCODE CDS 118291250 118291534 . + 2 Parent=gene1184 chr2 ENCODE exon 118293455 118293598 . + . Parent=gene1184 chr2 ENCODE CDS 118293455 118293598 . + 2 Parent=gene1184 chr2 ENCODE exon 118294967 118295102 . + . Parent=gene1184 chr2 ENCODE CDS 118294967 118295102 . + 2 Parent=gene1184 chr2 ENCODE exon 118295456 118295556 . + . Parent=gene1184 chr2 ENCODE CDS 118295456 118295556 . + 1 Parent=gene1184 chr2 ENCODE exon 118295668 118295867 . + . Parent=gene1184 chr2 ENCODE CDS 118295668 118295867 . + 2 Parent=gene1184 chr2 ENCODE exon 118295953 118296067 . + . Parent=gene1184 chr2 ENCODE CDS 118295953 118296067 . + 0 Parent=gene1184 chr2 ENCODE exon 118298375 118298514 . + . Parent=gene1184 chr2 ENCODE CDS 118298375 118298514 . + 2 Parent=gene1184 chr2 ENCODE exon 118298746 118298907 . + . Parent=gene1184 chr2 ENCODE CDS 118298746 118298907 . + 0 Parent=gene1184 chr2 ENCODE exon 118299253 118299405 . + . Parent=gene1184 chr2 ENCODE CDS 118299253 118299405 . + 0 Parent=gene1184 chr2 ENCODE exon 118300075 118300188 . + . Parent=gene1184 chr2 ENCODE CDS 118300075 118300188 . + 0 Parent=gene1184 chr2 ENCODE exon 118302755 118302811 . + . Parent=gene1184 chr2 ENCODE CDS 118302755 118302811 . + 0 Parent=gene1184 chr2 ENCODE exon 118303095 118303272 . + . Parent=gene1184 chr2 ENCODE CDS 118303095 118303272 . + 0 Parent=gene1184 chr2 ENCODE CDS 118304388 118304530 . + 2 Parent=gene1184 chr2 ENCODE exon 118304388 118306185 . + . Parent=gene1184 ### chr2 ENCODE gene 118288864 118298405 . + . ID=gene1185;Name=AC009404.1-006;name2=DDX18 chr2 ENCODE exon 118288864 118288898 . + . Parent=gene1185 chr2 ENCODE exon 118289494 118289529 . + . Parent=gene1185 chr2 ENCODE exon 118291250 118291534 . + . Parent=gene1185 chr2 ENCODE exon 118293455 118293598 . + . Parent=gene1185 chr2 ENCODE exon 118294967 118295102 . + . Parent=gene1185 chr2 ENCODE exon 118295456 118295556 . + . Parent=gene1185 chr2 ENCODE exon 118295668 118295867 . + . Parent=gene1185 chr2 ENCODE exon 118295953 118296067 . + . Parent=gene1185 chr2 ENCODE exon 118298375 118298405 . + . Parent=gene1185 ### chr2 ENCODE gene 118291328 118306178 . + . ID=gene1186;name2=DDX18;Name=AC009404.1-007 chr2 ENCODE exon 118291328 118291534 . + . Parent=gene1186 chr2 ENCODE exon 118293455 118293598 . + . Parent=gene1186 chr2 ENCODE exon 118294967 118295102 . + . Parent=gene1186 chr2 ENCODE exon 118295456 118295556 . + . Parent=gene1186 chr2 ENCODE exon 118295668 118295867 . + . Parent=gene1186 chr2 ENCODE exon 118295953 118296067 . + . Parent=gene1186 chr2 ENCODE exon 118298375 118298514 . + . Parent=gene1186 chr2 ENCODE exon 118298746 118298907 . + . Parent=gene1186 chr2 ENCODE exon 118299253 118299405 . + . Parent=gene1186 chr2 ENCODE exon 118300075 118300188 . + . Parent=gene1186 chr2 ENCODE exon 118302755 118302811 . + . Parent=gene1186 chr2 ENCODE exon 118303095 118303272 . + . Parent=gene1186 chr2 ENCODE exon 118304388 118304971 . + . Parent=gene1186 chr2 ENCODE exon 118305350 118306178 . + . Parent=gene1186 ### chr2 ENCODE gene 118295782 118296586 . + . ID=gene1187;Name=AC009404.1-002;name2=DDX18 chr2 ENCODE exon 118295782 118295867 . + . Parent=gene1187 chr2 ENCODE exon 118295953 118296586 . + . Parent=gene1187 ### chr2 ENCODE gene 118295953 118302771 . + . ID=gene1188;Name=AC009404.1-003;name2=DDX18 chr2 ENCODE exon 118295953 118296067 . + . Parent=gene1188 chr2 ENCODE CDS 118295953 118296067 . + 0 Parent=gene1188 chr2 ENCODE exon 118298375 118298514 . + . Parent=gene1188 chr2 ENCODE CDS 118298375 118298514 . + 2 Parent=gene1188 chr2 ENCODE exon 118298803 118298907 . + . Parent=gene1188 chr2 ENCODE CDS 118298803 118298907 . + 0 Parent=gene1188 chr2 ENCODE exon 118299253 118299405 . + . Parent=gene1188 chr2 ENCODE CDS 118299253 118299405 . + 0 Parent=gene1188 chr2 ENCODE exon 118300075 118300188 . + . Parent=gene1188 chr2 ENCODE CDS 118300075 118300188 . + 0 Parent=gene1188 chr2 ENCODE exon 118302755 118302771 . + . Parent=gene1188 chr2 ENCODE CDS 118302755 118302771 . + 0 Parent=gene1188 ### chr2 ENCODE gene 118298143 118306176 . + . ID=gene1189;Name=AC009404.1-005;name2=DDX18 chr2 ENCODE exon 118298143 118298514 . + . Parent=gene1189 chr2 ENCODE exon 118298746 118298907 . + . Parent=gene1189 chr2 ENCODE exon 118299253 118299405 . + . Parent=gene1189 chr2 ENCODE exon 118300075 118303272 . + . Parent=gene1189 chr2 ENCODE exon 118304388 118306176 . + . Parent=gene1189 ### chr2 ENCODE gene 118298803 118299789 . + . ID=gene1190;Name=AC009404.1-004;name2=DDX18 chr2 ENCODE exon 118298803 118298907 . + . Parent=gene1190 chr2 ENCODE exon 118299253 118299789 . + . Parent=gene1190 ### chr2 ENCODE gene 118389284 118487939 . - . ID=gene1191;name2=CCDC93;Name=AC009404.6-001 chr2 ENCODE exon 118389284 118394202 . - . Parent=gene1191 chr2 ENCODE CDS 118394149 118394202 . - 0 Parent=gene1191 chr2 ENCODE exon 118404843 118404956 . - . Parent=gene1191 chr2 ENCODE CDS 118404843 118404956 . - 0 Parent=gene1191 chr2 ENCODE exon 118409301 118409385 . - . Parent=gene1191 chr2 ENCODE CDS 118409301 118409385 . - 1 Parent=gene1191 chr2 ENCODE exon 118410508 118410545 . - . Parent=gene1191 chr2 ENCODE CDS 118410508 118410545 . - 0 Parent=gene1191 chr2 ENCODE exon 118412835 118412917 . - . Parent=gene1191 chr2 ENCODE CDS 118412835 118412917 . - 2 Parent=gene1191 chr2 ENCODE exon 118414995 118415103 . - . Parent=gene1191 chr2 ENCODE CDS 118414995 118415103 . - 0 Parent=gene1191 chr2 ENCODE exon 118417830 118417892 . - . Parent=gene1191 chr2 ENCODE CDS 118417830 118417892 . - 0 Parent=gene1191 chr2 ENCODE exon 118419335 118419388 . - . Parent=gene1191 chr2 ENCODE CDS 118419335 118419388 . - 0 Parent=gene1191 chr2 ENCODE exon 118420617 118420688 . - . Parent=gene1191 chr2 ENCODE CDS 118420617 118420688 . - 0 Parent=gene1191 chr2 ENCODE exon 118421911 118421992 . - . Parent=gene1191 chr2 ENCODE CDS 118421911 118421992 . - 1 Parent=gene1191 chr2 ENCODE exon 118423128 118423201 . - . Parent=gene1191 chr2 ENCODE CDS 118423128 118423201 . - 0 Parent=gene1191 chr2 ENCODE exon 118426179 118426241 . - . Parent=gene1191 chr2 ENCODE CDS 118426179 118426241 . - 0 Parent=gene1191 chr2 ENCODE exon 118432171 118432287 . - . Parent=gene1191 chr2 ENCODE CDS 118432171 118432287 . - 0 Parent=gene1191 chr2 ENCODE exon 118447714 118447800 . - . Parent=gene1191 chr2 ENCODE CDS 118447714 118447800 . - 0 Parent=gene1191 chr2 ENCODE exon 118448656 118448706 . - . Parent=gene1191 chr2 ENCODE CDS 118448656 118448706 . - 0 Parent=gene1191 chr2 ENCODE exon 118448994 118449086 . - . Parent=gene1191 chr2 ENCODE CDS 118448994 118449086 . - 0 Parent=gene1191 chr2 ENCODE exon 118451800 118451836 . - . Parent=gene1191 chr2 ENCODE CDS 118451800 118451836 . - 1 Parent=gene1191 chr2 ENCODE exon 118459775 118459875 . - . Parent=gene1191 chr2 ENCODE CDS 118459775 118459875 . - 0 Parent=gene1191 chr2 ENCODE exon 118469252 118469308 . - . Parent=gene1191 chr2 ENCODE CDS 118469252 118469308 . - 0 Parent=gene1191 chr2 ENCODE exon 118470070 118470168 . - . Parent=gene1191 chr2 ENCODE CDS 118470070 118470168 . - 0 Parent=gene1191 chr2 ENCODE exon 118474627 118474738 . - . Parent=gene1191 chr2 ENCODE CDS 118474627 118474738 . - 1 Parent=gene1191 chr2 ENCODE exon 118480528 118480622 . - . Parent=gene1191 chr2 ENCODE CDS 118480528 118480622 . - 0 Parent=gene1191 chr2 ENCODE exon 118482351 118482464 . - . Parent=gene1191 chr2 ENCODE CDS 118482351 118482464 . - 0 Parent=gene1191 chr2 ENCODE CDS 118487760 118487801 . - 0 Parent=gene1191 chr2 ENCODE exon 118487760 118487939 . - . Parent=gene1191 ### chr2 ENCODE gene 118389284 118487939 . - . ID=gene1192;Name=AC009404.6-010;name2=CCDC93 chr2 ENCODE exon 118389284 118394202 . - . Parent=gene1192 chr2 ENCODE CDS 118394149 118394202 . - 0 Parent=gene1192 chr2 ENCODE exon 118404843 118404956 . - . Parent=gene1192 chr2 ENCODE CDS 118404843 118404956 . - 0 Parent=gene1192 chr2 ENCODE exon 118409301 118409385 . - . Parent=gene1192 chr2 ENCODE CDS 118409301 118409385 . - 1 Parent=gene1192 chr2 ENCODE exon 118410508 118410545 . - . Parent=gene1192 chr2 ENCODE CDS 118410508 118410545 . - 0 Parent=gene1192 chr2 ENCODE exon 118412835 118412917 . - . Parent=gene1192 chr2 ENCODE CDS 118412835 118412917 . - 2 Parent=gene1192 chr2 ENCODE exon 118414995 118415103 . - . Parent=gene1192 chr2 ENCODE CDS 118414995 118415103 . - 0 Parent=gene1192 chr2 ENCODE exon 118417830 118417892 . - . Parent=gene1192 chr2 ENCODE CDS 118417830 118417892 . - 0 Parent=gene1192 chr2 ENCODE exon 118419335 118419388 . - . Parent=gene1192 chr2 ENCODE CDS 118419335 118419388 . - 0 Parent=gene1192 chr2 ENCODE exon 118420617 118420688 . - . Parent=gene1192 chr2 ENCODE CDS 118420617 118420688 . - 0 Parent=gene1192 chr2 ENCODE exon 118421911 118421992 . - . Parent=gene1192 chr2 ENCODE CDS 118421911 118421992 . - 1 Parent=gene1192 chr2 ENCODE exon 118423128 118423201 . - . Parent=gene1192 chr2 ENCODE CDS 118423128 118423201 . - 0 Parent=gene1192 chr2 ENCODE exon 118426179 118426241 . - . Parent=gene1192 chr2 ENCODE CDS 118426179 118426241 . - 0 Parent=gene1192 chr2 ENCODE exon 118432171 118432287 . - . Parent=gene1192 chr2 ENCODE CDS 118432171 118432287 . - 0 Parent=gene1192 chr2 ENCODE exon 118447714 118447800 . - . Parent=gene1192 chr2 ENCODE CDS 118447714 118447800 . - 0 Parent=gene1192 chr2 ENCODE exon 118448656 118448706 . - . Parent=gene1192 chr2 ENCODE CDS 118448656 118448706 . - 0 Parent=gene1192 chr2 ENCODE exon 118448994 118449086 . - . Parent=gene1192 chr2 ENCODE CDS 118448994 118449086 . - 0 Parent=gene1192 chr2 ENCODE exon 118451800 118451833 . - . Parent=gene1192 chr2 ENCODE CDS 118451800 118451833 . - 1 Parent=gene1192 chr2 ENCODE exon 118459775 118459875 . - . Parent=gene1192 chr2 ENCODE CDS 118459775 118459875 . - 0 Parent=gene1192 chr2 ENCODE exon 118469252 118469308 . - . Parent=gene1192 chr2 ENCODE CDS 118469252 118469308 . - 0 Parent=gene1192 chr2 ENCODE exon 118470070 118470168 . - . Parent=gene1192 chr2 ENCODE CDS 118470070 118470168 . - 0 Parent=gene1192 chr2 ENCODE exon 118474627 118474738 . - . Parent=gene1192 chr2 ENCODE CDS 118474627 118474738 . - 1 Parent=gene1192 chr2 ENCODE exon 118480528 118480622 . - . Parent=gene1192 chr2 ENCODE CDS 118480528 118480622 . - 0 Parent=gene1192 chr2 ENCODE exon 118482351 118482464 . - . Parent=gene1192 chr2 ENCODE CDS 118482351 118482464 . - 0 Parent=gene1192 chr2 ENCODE CDS 118487760 118487801 . - 0 Parent=gene1192 chr2 ENCODE exon 118487760 118487939 . - . Parent=gene1192 ### chr2 ENCODE gene 118389377 118390700 . - . ID=gene1193;Name=AC009404.6-009;name2=CCDC93 chr2 ENCODE exon 118389377 118390700 . - . Parent=gene1193 ### chr2 ENCODE gene 118394111 118421985 . - . ID=gene1194;name2=CCDC93;Name=AC009404.6-005 chr2 ENCODE exon 118394111 118394202 . - . Parent=gene1194 chr2 ENCODE exon 118404843 118404956 . - . Parent=gene1194 chr2 ENCODE exon 118409301 118409385 . - . Parent=gene1194 chr2 ENCODE exon 118410508 118410545 . - . Parent=gene1194 chr2 ENCODE exon 118412835 118412917 . - . Parent=gene1194 chr2 ENCODE exon 118414995 118415103 . - . Parent=gene1194 chr2 ENCODE exon 118417830 118417892 . - . Parent=gene1194 chr2 ENCODE exon 118418539 118418603 . - . Parent=gene1194 chr2 ENCODE exon 118419335 118419388 . - . Parent=gene1194 chr2 ENCODE exon 118420617 118420688 . - . Parent=gene1194 chr2 ENCODE exon 118421911 118421985 . - . Parent=gene1194 ### chr2 ENCODE gene 118404849 118409644 . - . ID=gene1195;name2=CCDC93;Name=AC009404.6-008 chr2 ENCODE exon 118404849 118404956 . - . Parent=gene1195 chr2 ENCODE exon 118409301 118409644 . - . Parent=gene1195 ### chr2 ENCODE gene 118409304 118410707 . - . ID=gene1196;Name=AC009404.6-007;name2=CCDC93 chr2 ENCODE exon 118409304 118409385 . - . Parent=gene1196 chr2 ENCODE exon 118410508 118410707 . - . Parent=gene1196 ### chr2 ENCODE gene 118410318 118417886 . - . ID=gene1197;name2=CCDC93;Name=AC009404.6-006 chr2 ENCODE exon 118410318 118410545 . - . Parent=gene1197 chr2 ENCODE exon 118412835 118412917 . - . Parent=gene1197 chr2 ENCODE exon 118414995 118415103 . - . Parent=gene1197 chr2 ENCODE exon 118417830 118417886 . - . Parent=gene1197 ### chr2 ENCODE gene 118421839 118426218 . - . ID=gene1198;Name=AC009404.6-004;name2=CCDC93 chr2 ENCODE exon 118421839 118421992 . - . Parent=gene1198 chr2 ENCODE exon 118423128 118423201 . - . Parent=gene1198 chr2 ENCODE exon 118426179 118426218 . - . Parent=gene1198 ### chr2 ENCODE gene 118425295 118470095 . - . ID=gene1199;Name=AC009404.6-003;name2=CCDC93 chr2 ENCODE exon 118425295 118425507 . - . Parent=gene1199 chr2 ENCODE CDS 118425484 118425507 . - 1 Parent=gene1199 chr2 ENCODE exon 118426179 118426241 . - . Parent=gene1199 chr2 ENCODE CDS 118426179 118426241 . - 1 Parent=gene1199 chr2 ENCODE exon 118432171 118432284 . - . Parent=gene1199 chr2 ENCODE CDS 118432171 118432284 . - 1 Parent=gene1199 chr2 ENCODE exon 118447714 118447800 . - . Parent=gene1199 chr2 ENCODE CDS 118447714 118447800 . - 1 Parent=gene1199 chr2 ENCODE exon 118448656 118448706 . - . Parent=gene1199 chr2 ENCODE CDS 118448656 118448706 . - 1 Parent=gene1199 chr2 ENCODE exon 118448994 118449086 . - . Parent=gene1199 chr2 ENCODE CDS 118448994 118449086 . - 1 Parent=gene1199 chr2 ENCODE exon 118451800 118451836 . - . Parent=gene1199 chr2 ENCODE CDS 118451800 118451836 . - 2 Parent=gene1199 chr2 ENCODE exon 118459775 118459875 . - . Parent=gene1199 chr2 ENCODE CDS 118459775 118459875 . - 1 Parent=gene1199 chr2 ENCODE exon 118469252 118469308 . - . Parent=gene1199 chr2 ENCODE CDS 118469252 118469308 . - 1 Parent=gene1199 chr2 ENCODE exon 118470070 118470095 . - . Parent=gene1199 chr2 ENCODE CDS 118470070 118470095 . - 0 Parent=gene1199 ### chr2 ENCODE gene 118469258 118474943 . - . ID=gene1200;Name=AC009404.6-002;name2=CCDC93 chr2 ENCODE exon 118469258 118469308 . - . Parent=gene1200 chr2 ENCODE exon 118470070 118470168 . - . Parent=gene1200 chr2 ENCODE exon 118474627 118474943 . - . Parent=gene1200 ### chr2 ENCODE gene 220108604 220116959 . + . ID=gene1201;Name=AC053503.5-002;name2=DES chr2 ENCODE exon 220108604 220108865 . + . Parent=gene1201 chr2 ENCODE exon 220108926 220109267 . + . Parent=gene1201 chr2 ENCODE exon 220110322 220110382 . + . Parent=gene1201 chr2 ENCODE exon 220110478 220110573 . + . Parent=gene1201 chr2 ENCODE exon 220110722 220110883 . + . Parent=gene1201 chr2 ENCODE exon 220111055 220111180 . + . Parent=gene1201 chr2 ENCODE exon 220111567 220111787 . + . Parent=gene1201 chr2 ENCODE exon 220114004 220114047 . + . Parent=gene1201 chr2 ENCODE exon 220115890 220115972 . + . Parent=gene1201 chr2 ENCODE exon 220116176 220116959 . + . Parent=gene1201 ### chr2 ENCODE gene 220108604 220116966 . + . ID=gene1202;name2=DES;Name=AC053503.5-001 chr2 ENCODE exon 220108604 220109267 . + . Parent=gene1202 chr2 ENCODE CDS 220108690 220109267 . + 0 Parent=gene1202 chr2 ENCODE exon 220110322 220110382 . + . Parent=gene1202 chr2 ENCODE CDS 220110322 220110382 . + 1 Parent=gene1202 chr2 ENCODE exon 220110478 220110573 . + . Parent=gene1202 chr2 ENCODE CDS 220110478 220110573 . + 0 Parent=gene1202 chr2 ENCODE exon 220110722 220110883 . + . Parent=gene1202 chr2 ENCODE CDS 220110722 220110883 . + 0 Parent=gene1202 chr2 ENCODE exon 220111055 220111180 . + . Parent=gene1202 chr2 ENCODE CDS 220111055 220111180 . + 0 Parent=gene1202 chr2 ENCODE exon 220111567 220111787 . + . Parent=gene1202 chr2 ENCODE CDS 220111567 220111787 . + 0 Parent=gene1202 chr2 ENCODE exon 220114004 220114047 . + . Parent=gene1202 chr2 ENCODE CDS 220114004 220114047 . + 1 Parent=gene1202 chr2 ENCODE exon 220115890 220115972 . + . Parent=gene1202 chr2 ENCODE CDS 220115890 220115972 . + 2 Parent=gene1202 chr2 ENCODE CDS 220116176 220116217 . + 0 Parent=gene1202 chr2 ENCODE exon 220116176 220116966 . + . Parent=gene1202 ### chr2 ENCODE gene 220108606 220116959 . + . ID=gene1203;name2=DES;Name=AC053503.5-003 chr2 ENCODE exon 220108606 220108723 . + . Parent=gene1203 chr2 ENCODE exon 220108928 220109267 . + . Parent=gene1203 chr2 ENCODE exon 220110322 220110382 . + . Parent=gene1203 chr2 ENCODE exon 220110478 220110573 . + . Parent=gene1203 chr2 ENCODE exon 220110722 220110883 . + . Parent=gene1203 chr2 ENCODE exon 220111055 220111180 . + . Parent=gene1203 chr2 ENCODE exon 220111567 220111787 . + . Parent=gene1203 chr2 ENCODE exon 220114004 220114047 . + . Parent=gene1203 chr2 ENCODE exon 220115890 220115972 . + . Parent=gene1203 chr2 ENCODE exon 220116176 220116959 . + . Parent=gene1203 ### chr2 ENCODE gene 220108609 220116964 . + . ID=gene1204;Name=AC053503.5-004;name2=DES chr2 ENCODE exon 220108609 220108914 . + . Parent=gene1204 chr2 ENCODE exon 220109171 220109267 . + . Parent=gene1204 chr2 ENCODE exon 220110322 220110382 . + . Parent=gene1204 chr2 ENCODE exon 220110478 220110573 . + . Parent=gene1204 chr2 ENCODE exon 220110722 220110883 . + . Parent=gene1204 chr2 ENCODE exon 220111055 220111180 . + . Parent=gene1204 chr2 ENCODE exon 220111567 220111787 . + . Parent=gene1204 chr2 ENCODE exon 220114004 220114047 . + . Parent=gene1204 chr2 ENCODE exon 220115890 220115972 . + . Parent=gene1204 chr2 ENCODE exon 220116176 220116964 . + . Parent=gene1204 ### chr2 ENCODE gene 220108622 220111180 . + . ID=gene1205;name2=DES;Name=AC053503.5-005 chr2 ENCODE exon 220108622 220108719 . + . Parent=gene1205 chr2 ENCODE exon 220109071 220109267 . + . Parent=gene1205 chr2 ENCODE exon 220110322 220110382 . + . Parent=gene1205 chr2 ENCODE exon 220110478 220110573 . + . Parent=gene1205 chr2 ENCODE exon 220110722 220110883 . + . Parent=gene1205 chr2 ENCODE exon 220111055 220111180 . + . Parent=gene1205 ### chr2 ENCODE gene 220110272 220114047 . + . ID=gene1206;Name=AC053503.5-006;name2=DES chr2 ENCODE exon 220110272 220110382 . + . Parent=gene1206 chr2 ENCODE exon 220110478 220110573 . + . Parent=gene1206 chr2 ENCODE exon 220110722 220110883 . + . Parent=gene1206 chr2 ENCODE exon 220111055 220111180 . + . Parent=gene1206 chr2 ENCODE exon 220111567 220111787 . + . Parent=gene1206 chr2 ENCODE exon 220114004 220114047 . + . Parent=gene1206 ### chr2 ENCODE gene 220110349 220114070 . + . ID=gene1207;Name=AC053503.5-007;name2=DES chr2 ENCODE exon 220110349 220110382 . + . Parent=gene1207 chr2 ENCODE exon 220110478 220110573 . + . Parent=gene1207 chr2 ENCODE exon 220110722 220110883 . + . Parent=gene1207 chr2 ENCODE exon 220111055 220111180 . + . Parent=gene1207 chr2 ENCODE exon 220111567 220111787 . + . Parent=gene1207 chr2 ENCODE exon 220114004 220114070 . + . Parent=gene1207 ### chr2 ENCODE gene 220111174 220116961 . + . ID=gene1208;Name=AC053503.5-009;name2=DES chr2 ENCODE exon 220111174 220111180 . + . Parent=gene1208 chr2 ENCODE exon 220111567 220111787 . + . Parent=gene1208 chr2 ENCODE exon 220114004 220114047 . + . Parent=gene1208 chr2 ENCODE exon 220115890 220115972 . + . Parent=gene1208 chr2 ENCODE exon 220116176 220116223 . + . Parent=gene1208 chr2 ENCODE exon 220116860 220116961 . + . Parent=gene1208 ### chr2 ENCODE gene 220115747 220116411 . + . ID=gene1209;name2=DES;Name=AC053503.5-008 chr2 ENCODE exon 220115747 220115972 . + . Parent=gene1209 chr2 ENCODE exon 220116176 220116411 . + . Parent=gene1209 ### chr2 ENCODE gene 220125073 220183859 . + . ID=gene1210;Name=AC053503.7-004;name2=SPEG chr2 ENCODE exon 220125073 220125592 . + . Parent=gene1210 chr2 ENCODE CDS 220125205 220125592 . + 0 Parent=gene1210 chr2 ENCODE exon 220134880 220134969 . + . Parent=gene1210 chr2 ENCODE CDS 220134880 220134969 . + 2 Parent=gene1210 chr2 ENCODE exon 220135052 220135388 . + . Parent=gene1210 chr2 ENCODE CDS 220135052 220135388 . + 2 Parent=gene1210 chr2 ENCODE exon 220138201 220139498 . + . Parent=gene1210 chr2 ENCODE CDS 220138201 220139498 . + 1 Parent=gene1210 chr2 ENCODE exon 220141363 220141506 . + . Parent=gene1210 chr2 ENCODE CDS 220141363 220141506 . + 2 Parent=gene1210 chr2 ENCODE exon 220141852 220142034 . + . Parent=gene1210 chr2 ENCODE CDS 220141852 220142034 . + 2 Parent=gene1210 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1210 chr2 ENCODE CDS 220152109 220152284 . + 2 Parent=gene1210 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1210 chr2 ENCODE CDS 220152525 220152613 . + 0 Parent=gene1210 chr2 ENCODE exon 220154660 220154835 . + . Parent=gene1210 chr2 ENCODE CDS 220154660 220154835 . + 1 Parent=gene1210 chr2 ENCODE exon 220157401 220157661 . + . Parent=gene1210 chr2 ENCODE CDS 220157401 220157661 . + 2 Parent=gene1210 chr2 ENCODE exon 220158805 220158963 . + . Parent=gene1210 chr2 ENCODE CDS 220158805 220158963 . + 2 Parent=gene1210 chr2 ENCODE exon 220159086 220159275 . + . Parent=gene1210 chr2 ENCODE CDS 220159086 220159275 . + 2 Parent=gene1210 chr2 ENCODE exon 220159383 220159606 . + . Parent=gene1210 chr2 ENCODE CDS 220159383 220159606 . + 1 Parent=gene1210 chr2 ENCODE exon 220162095 220162214 . + . Parent=gene1210 chr2 ENCODE CDS 220162095 220162214 . + 2 Parent=gene1210 chr2 ENCODE exon 220162454 220162558 . + . Parent=gene1210 chr2 ENCODE CDS 220162454 220162558 . + 2 Parent=gene1210 chr2 ENCODE exon 220163117 220163323 . + . Parent=gene1210 chr2 ENCODE CDS 220163117 220163323 . + 2 Parent=gene1210 chr2 ENCODE exon 220163731 220163854 . + . Parent=gene1210 chr2 ENCODE CDS 220163731 220163854 . + 2 Parent=gene1210 chr2 ENCODE exon 220163955 220164130 . + . Parent=gene1210 chr2 ENCODE CDS 220163955 220164130 . + 1 Parent=gene1210 chr2 ENCODE exon 220167097 220167209 . + . Parent=gene1210 chr2 ENCODE CDS 220167097 220167209 . + 2 Parent=gene1210 chr2 ENCODE exon 220167504 220167672 . + . Parent=gene1210 chr2 ENCODE CDS 220167504 220167672 . + 0 Parent=gene1210 chr2 ENCODE exon 220167916 220168012 . + . Parent=gene1210 chr2 ENCODE CDS 220167916 220168012 . + 2 Parent=gene1210 chr2 ENCODE exon 220168132 220168332 . + . Parent=gene1210 chr2 ENCODE CDS 220168132 220168332 . + 1 Parent=gene1210 chr2 ENCODE exon 220169371 220169428 . + . Parent=gene1210 chr2 ENCODE CDS 220169371 220169428 . + 1 Parent=gene1210 chr2 ENCODE exon 220170010 220170087 . + . Parent=gene1210 chr2 ENCODE CDS 220170010 220170087 . + 0 Parent=gene1210 chr2 ENCODE exon 220170189 220170367 . + . Parent=gene1210 chr2 ENCODE CDS 220170189 220170367 . + 0 Parent=gene1210 chr2 ENCODE exon 220170898 220170924 . + . Parent=gene1210 chr2 ENCODE CDS 220170898 220170924 . + 1 Parent=gene1210 chr2 ENCODE exon 220171531 220171683 . + . Parent=gene1210 chr2 ENCODE CDS 220171531 220171683 . + 1 Parent=gene1210 chr2 ENCODE exon 220171865 220171907 . + . Parent=gene1210 chr2 ENCODE CDS 220171865 220171907 . + 1 Parent=gene1210 chr2 ENCODE exon 220173011 220173079 . + . Parent=gene1210 chr2 ENCODE CDS 220173011 220173079 . + 0 Parent=gene1210 chr2 ENCODE exon 220173325 220175299 . + . Parent=gene1210 chr2 ENCODE CDS 220173325 220175299 . + 0 Parent=gene1210 chr2 ENCODE exon 220175573 220175704 . + . Parent=gene1210 chr2 ENCODE CDS 220175573 220175704 . + 2 Parent=gene1210 chr2 ENCODE exon 220178421 220178537 . + . Parent=gene1210 chr2 ENCODE CDS 220178421 220178537 . + 2 Parent=gene1210 chr2 ENCODE exon 220178725 220178892 . + . Parent=gene1210 chr2 ENCODE CDS 220178725 220178892 . + 2 Parent=gene1210 chr2 ENCODE exon 220179005 220179127 . + . Parent=gene1210 chr2 ENCODE CDS 220179005 220179127 . + 2 Parent=gene1210 chr2 ENCODE exon 220179281 220179448 . + . Parent=gene1210 chr2 ENCODE CDS 220179281 220179448 . + 2 Parent=gene1210 chr2 ENCODE exon 220179563 220180166 . + . Parent=gene1210 chr2 ENCODE CDS 220179563 220180166 . + 2 Parent=gene1210 chr2 ENCODE exon 220180636 220180875 . + . Parent=gene1210 chr2 ENCODE CDS 220180636 220180875 . + 1 Parent=gene1210 chr2 ENCODE exon 220180960 220181183 . + . Parent=gene1210 chr2 ENCODE CDS 220180960 220181183 . + 1 Parent=gene1210 chr2 ENCODE exon 220182021 220182096 . + . Parent=gene1210 chr2 ENCODE CDS 220182021 220182096 . + 2 Parent=gene1210 chr2 ENCODE exon 220182338 220182487 . + . Parent=gene1210 chr2 ENCODE CDS 220182338 220182487 . + 1 Parent=gene1210 chr2 ENCODE CDS 220182821 220183013 . + 1 Parent=gene1210 chr2 ENCODE exon 220182821 220183859 . + . Parent=gene1210 ### chr2 ENCODE gene 220127502 220157088 . + . ID=gene1211;Name=AC053503.7-001;name2=SPEG chr2 ENCODE exon 220127502 220127547 . + . Parent=gene1211 chr2 ENCODE exon 220133335 220133864 . + . Parent=gene1211 chr2 ENCODE exon 220134880 220134969 . + . Parent=gene1211 chr2 ENCODE exon 220135052 220135388 . + . Parent=gene1211 chr2 ENCODE exon 220138201 220139498 . + . Parent=gene1211 chr2 ENCODE exon 220141363 220141506 . + . Parent=gene1211 chr2 ENCODE exon 220141852 220142034 . + . Parent=gene1211 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1211 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1211 chr2 ENCODE exon 220154660 220154835 . + . Parent=gene1211 chr2 ENCODE exon 220156284 220157088 . + . Parent=gene1211 ### chr2 ENCODE gene 220131743 220138398 . + . ID=gene1212;name2=SPEG;Name=AC053503.7-013 chr2 ENCODE exon 220131743 220131821 . + . Parent=gene1212 chr2 ENCODE CDS 220131785 220131821 . + 0 Parent=gene1212 chr2 ENCODE exon 220133335 220133377 . + . Parent=gene1212 chr2 ENCODE CDS 220133335 220133377 . + 2 Parent=gene1212 chr2 ENCODE exon 220134252 220134286 . + . Parent=gene1212 chr2 ENCODE CDS 220134252 220134286 . + 1 Parent=gene1212 chr2 ENCODE exon 220134880 220134969 . + . Parent=gene1212 chr2 ENCODE CDS 220134880 220134969 . + 2 Parent=gene1212 chr2 ENCODE exon 220135052 220135211 . + . Parent=gene1212 chr2 ENCODE CDS 220135052 220135211 . + 2 Parent=gene1212 chr2 ENCODE exon 220138201 220138398 . + . Parent=gene1212 chr2 ENCODE CDS 220138201 220138398 . + 1 Parent=gene1212 ### chr2 ENCODE gene 220132243 220135071 . + . ID=gene1213;Name=AC053503.7-016;name2=SPEG chr2 ENCODE exon 220132243 220132310 . + . Parent=gene1213 chr2 ENCODE exon 220133335 220133667 . + . Parent=gene1213 chr2 ENCODE exon 220134252 220134286 . + . Parent=gene1213 chr2 ENCODE exon 220134880 220134969 . + . Parent=gene1213 chr2 ENCODE exon 220135052 220135071 . + . Parent=gene1213 ### chr2 ENCODE gene 220132250 220138742 . + . ID=gene1214;Name=AC053503.7-009;name2=SPEG chr2 ENCODE exon 220132250 220132310 . + . Parent=gene1214 chr2 ENCODE CDS 220132278 220132310 . + 0 Parent=gene1214 chr2 ENCODE exon 220133335 220133377 . + . Parent=gene1214 chr2 ENCODE CDS 220133335 220133377 . + 0 Parent=gene1214 chr2 ENCODE exon 220134257 220134286 . + . Parent=gene1214 chr2 ENCODE CDS 220134257 220134286 . + 2 Parent=gene1214 chr2 ENCODE exon 220134880 220134969 . + . Parent=gene1214 chr2 ENCODE CDS 220134880 220134969 . + 2 Parent=gene1214 chr2 ENCODE exon 220135052 220135211 . + . Parent=gene1214 chr2 ENCODE CDS 220135052 220135211 . + 2 Parent=gene1214 chr2 ENCODE exon 220138201 220138742 . + . Parent=gene1214 chr2 ENCODE CDS 220138201 220138742 . + 1 Parent=gene1214 ### chr2 ENCODE gene 220132272 220157087 . + . ID=gene1215;Name=AC053503.7-014;name2=SPEG chr2 ENCODE exon 220132272 220132310 . + . Parent=gene1215 chr2 ENCODE CDS 220132278 220132310 . + 0 Parent=gene1215 chr2 ENCODE exon 220133335 220133377 . + . Parent=gene1215 chr2 ENCODE CDS 220133335 220133377 . + 0 Parent=gene1215 chr2 ENCODE exon 220134880 220134969 . + . Parent=gene1215 chr2 ENCODE CDS 220134880 220134969 . + 2 Parent=gene1215 chr2 ENCODE exon 220135052 220135388 . + . Parent=gene1215 chr2 ENCODE CDS 220135052 220135388 . + 2 Parent=gene1215 chr2 ENCODE exon 220138201 220139498 . + . Parent=gene1215 chr2 ENCODE CDS 220138201 220139498 . + 1 Parent=gene1215 chr2 ENCODE exon 220141363 220141506 . + . Parent=gene1215 chr2 ENCODE CDS 220141363 220141506 . + 2 Parent=gene1215 chr2 ENCODE exon 220141852 220142034 . + . Parent=gene1215 chr2 ENCODE CDS 220141852 220142034 . + 2 Parent=gene1215 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1215 chr2 ENCODE CDS 220152109 220152284 . + 2 Parent=gene1215 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1215 chr2 ENCODE CDS 220152525 220152613 . + 0 Parent=gene1215 chr2 ENCODE exon 220154660 220154835 . + . Parent=gene1215 chr2 ENCODE CDS 220154660 220154835 . + 1 Parent=gene1215 chr2 ENCODE CDS 220156284 220156291 . + 2 Parent=gene1215 chr2 ENCODE exon 220156284 220157087 . + . Parent=gene1215 ### chr2 ENCODE gene 220132274 220138418 . + . ID=gene1216;name2=SPEG;Name=AC053503.7-011 chr2 ENCODE exon 220132274 220132310 . + . Parent=gene1216 chr2 ENCODE exon 220133335 220133377 . + . Parent=gene1216 chr2 ENCODE exon 220134252 220134286 . + . Parent=gene1216 chr2 ENCODE exon 220134880 220134969 . + . Parent=gene1216 chr2 ENCODE exon 220135052 220135211 . + . Parent=gene1216 chr2 ENCODE exon 220138201 220138418 . + . Parent=gene1216 ### chr2 ENCODE gene 220132276 220135142 . + . ID=gene1217;Name=AC053503.7-015;name2=SPEG chr2 ENCODE exon 220132276 220132310 . + . Parent=gene1217 chr2 ENCODE exon 220133335 220133667 . + . Parent=gene1217 chr2 ENCODE exon 220134257 220134286 . + . Parent=gene1217 chr2 ENCODE exon 220134880 220134969 . + . Parent=gene1217 chr2 ENCODE exon 220135052 220135142 . + . Parent=gene1217 ### chr2 ENCODE gene 220133901 220157088 . + . ID=gene1218;Name=AC053503.7-002;name2=SPEG chr2 ENCODE exon 220133901 220134286 . + . Parent=gene1218 chr2 ENCODE exon 220134880 220134969 . + . Parent=gene1218 chr2 ENCODE exon 220135052 220135388 . + . Parent=gene1218 chr2 ENCODE exon 220138201 220139498 . + . Parent=gene1218 chr2 ENCODE exon 220141363 220141506 . + . Parent=gene1218 chr2 ENCODE exon 220141852 220142034 . + . Parent=gene1218 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1218 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1218 chr2 ENCODE exon 220154660 220157088 . + . Parent=gene1218 ### chr2 ENCODE gene 220134880 220183855 . + . ID=gene1219;Name=AC053503.7-003;name2=SPEG chr2 ENCODE exon 220134880 220134969 . + . Parent=gene1219 chr2 ENCODE exon 220135052 220135388 . + . Parent=gene1219 chr2 ENCODE exon 220138201 220139498 . + . Parent=gene1219 chr2 ENCODE exon 220141363 220141506 . + . Parent=gene1219 chr2 ENCODE exon 220141852 220142034 . + . Parent=gene1219 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1219 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1219 chr2 ENCODE exon 220154660 220154835 . + . Parent=gene1219 chr2 ENCODE exon 220157401 220157661 . + . Parent=gene1219 chr2 ENCODE exon 220158805 220158963 . + . Parent=gene1219 chr2 ENCODE exon 220159086 220159275 . + . Parent=gene1219 chr2 ENCODE exon 220159383 220159606 . + . Parent=gene1219 chr2 ENCODE exon 220162095 220162214 . + . Parent=gene1219 chr2 ENCODE exon 220162454 220162558 . + . Parent=gene1219 chr2 ENCODE exon 220163117 220163323 . + . Parent=gene1219 chr2 ENCODE exon 220163731 220163854 . + . Parent=gene1219 chr2 ENCODE exon 220163955 220164130 . + . Parent=gene1219 chr2 ENCODE exon 220167097 220167209 . + . Parent=gene1219 chr2 ENCODE exon 220167504 220167672 . + . Parent=gene1219 chr2 ENCODE exon 220167916 220168012 . + . Parent=gene1219 chr2 ENCODE exon 220168132 220168332 . + . Parent=gene1219 chr2 ENCODE exon 220169371 220169428 . + . Parent=gene1219 chr2 ENCODE exon 220170010 220170087 . + . Parent=gene1219 chr2 ENCODE exon 220170189 220170367 . + . Parent=gene1219 chr2 ENCODE exon 220170898 220170924 . + . Parent=gene1219 chr2 ENCODE exon 220171531 220171683 . + . Parent=gene1219 chr2 ENCODE exon 220171865 220171907 . + . Parent=gene1219 chr2 ENCODE exon 220173011 220173079 . + . Parent=gene1219 chr2 ENCODE exon 220173325 220175299 . + . Parent=gene1219 chr2 ENCODE exon 220175573 220175704 . + . Parent=gene1219 chr2 ENCODE exon 220178421 220178537 . + . Parent=gene1219 chr2 ENCODE exon 220178725 220178892 . + . Parent=gene1219 chr2 ENCODE exon 220179005 220179127 . + . Parent=gene1219 chr2 ENCODE exon 220179281 220179448 . + . Parent=gene1219 chr2 ENCODE exon 220179563 220180166 . + . Parent=gene1219 chr2 ENCODE exon 220180636 220180875 . + . Parent=gene1219 chr2 ENCODE exon 220180960 220181183 . + . Parent=gene1219 chr2 ENCODE exon 220182021 220182096 . + . Parent=gene1219 chr2 ENCODE exon 220182338 220182487 . + . Parent=gene1219 chr2 ENCODE exon 220182821 220182827 . + . Parent=gene1219 chr2 ENCODE exon 220183805 220183855 . + . Parent=gene1219 ### chr2 ENCODE gene 220135778 220138622 . + . ID=gene1220;Name=AC053503.7-018;name2=SPEG chr2 ENCODE exon 220135778 220135909 . + . Parent=gene1220 chr2 ENCODE exon 220138201 220138622 . + . Parent=gene1220 ### chr2 ENCODE gene 220135807 220138682 . + . ID=gene1221;Name=AC053503.7-017;name2=SPEG chr2 ENCODE exon 220135807 220135914 . + . Parent=gene1221 chr2 ENCODE exon 220138201 220138682 . + . Parent=gene1221 ### chr2 ENCODE gene 220140897 220157088 . + . ID=gene1222;name2=SPEG;Name=AC053503.7-005 chr2 ENCODE exon 220140897 220141506 . + . Parent=gene1222 chr2 ENCODE exon 220141852 220142034 . + . Parent=gene1222 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1222 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1222 chr2 ENCODE exon 220154660 220157088 . + . Parent=gene1222 ### chr2 ENCODE gene 220141968 220154894 . + . ID=gene1223;Name=AC053503.7-020;name2=SPEG chr2 ENCODE exon 220141968 220142034 . + . Parent=gene1223 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1223 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1223 chr2 ENCODE exon 220154660 220154894 . + . Parent=gene1223 ### chr2 ENCODE gene 220150993 220157068 . + . ID=gene1224;Name=AC053503.7-006;name2=SPEG chr2 ENCODE exon 220150993 220151223 . + . Parent=gene1224 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1224 chr2 ENCODE CDS 220152216 220152284 . + 0 Parent=gene1224 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1224 chr2 ENCODE CDS 220152525 220152613 . + 0 Parent=gene1224 chr2 ENCODE exon 220154660 220154835 . + . Parent=gene1224 chr2 ENCODE CDS 220154660 220154835 . + 1 Parent=gene1224 chr2 ENCODE CDS 220156284 220156291 . + 2 Parent=gene1224 chr2 ENCODE exon 220156284 220157068 . + . Parent=gene1224 ### chr2 ENCODE gene 220151449 220154881 . + . ID=gene1225;Name=AC053503.7-019;name2=SPEG chr2 ENCODE exon 220151449 220151527 . + . Parent=gene1225 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1225 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1225 chr2 ENCODE exon 220154660 220154881 . + . Parent=gene1225 ### chr2 ENCODE gene 220151467 220157088 . + . ID=gene1226;Name=AC053503.7-012;name2=SPEG chr2 ENCODE exon 220151467 220152284 . + . Parent=gene1226 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1226 chr2 ENCODE exon 220154660 220154835 . + . Parent=gene1226 chr2 ENCODE exon 220156284 220157088 . + . Parent=gene1226 ### chr2 ENCODE gene 220151482 220156882 . + . ID=gene1227;Name=AC053503.7-010;name2=SPEG chr2 ENCODE exon 220151482 220151527 . + . Parent=gene1227 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1227 chr2 ENCODE CDS 220152216 220152284 . + 0 Parent=gene1227 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1227 chr2 ENCODE CDS 220152525 220152613 . + 0 Parent=gene1227 chr2 ENCODE exon 220154660 220154835 . + . Parent=gene1227 chr2 ENCODE CDS 220154660 220154835 . + 1 Parent=gene1227 chr2 ENCODE CDS 220156284 220156291 . + 2 Parent=gene1227 chr2 ENCODE exon 220156284 220156882 . + . Parent=gene1227 ### chr2 ENCODE gene 220151612 220157089 . + . ID=gene1228;Name=AC053503.7-007;name2=SPEG chr2 ENCODE exon 220151612 220151638 . + . Parent=gene1228 chr2 ENCODE exon 220152109 220152284 . + . Parent=gene1228 chr2 ENCODE CDS 220152216 220152284 . + 0 Parent=gene1228 chr2 ENCODE exon 220152525 220152613 . + . Parent=gene1228 chr2 ENCODE CDS 220152525 220152613 . + 0 Parent=gene1228 chr2 ENCODE exon 220154660 220154835 . + . Parent=gene1228 chr2 ENCODE CDS 220154660 220154835 . + 1 Parent=gene1228 chr2 ENCODE CDS 220156284 220156291 . + 2 Parent=gene1228 chr2 ENCODE exon 220156284 220157089 . + . Parent=gene1228 ### chr2 ENCODE gene 220161889 220164605 . + . ID=gene1229;name2=SPEG;Name=AC053503.7-008 chr2 ENCODE exon 220161889 220162558 . + . Parent=gene1229 chr2 ENCODE exon 220163117 220164605 . + . Parent=gene1229 ### chr2 ENCODE gene 220182094 220188471 . + . ID=gene1230;Name=AC053503.7-021;name2=SPEG chr2 ENCODE exon 220182094 220182096 . + . Parent=gene1230 chr2 ENCODE CDS 220182094 220182096 . + 0 Parent=gene1230 chr2 ENCODE exon 220182338 220182487 . + . Parent=gene1230 chr2 ENCODE CDS 220182338 220182487 . + 0 Parent=gene1230 chr2 ENCODE exon 220182821 220182980 . + . Parent=gene1230 chr2 ENCODE CDS 220182821 220182980 . + 0 Parent=gene1230 chr2 ENCODE exon 220186582 220186709 . + . Parent=gene1230 chr2 ENCODE CDS 220186582 220186709 . + 2 Parent=gene1230 chr2 ENCODE exon 220187036 220187343 . + . Parent=gene1230 chr2 ENCODE CDS 220187036 220187343 . + 0 Parent=gene1230 chr2 ENCODE exon 220187947 220188088 . + . Parent=gene1230 chr2 ENCODE CDS 220187947 220188088 . + 1 Parent=gene1230 chr2 ENCODE CDS 220188278 220188416 . + 0 Parent=gene1230 chr2 ENCODE exon 220188278 220188471 . + . Parent=gene1230 ### chr2 ENCODE gene 220187918 220188514 . + . ID=gene1231;name2=SPEG;Name=AC053503.7-022 chr2 ENCODE exon 220187918 220188088 . + . Parent=gene1231 chr2 ENCODE exon 220188278 220188514 . + . Parent=gene1231 ### chr2 ENCODE gene 220189094 220197214 . + . ID=gene1232;Name=AC053503.10-001;name2=GMPPA chr2 ENCODE exon 220189094 220189165 . + . Parent=gene1232 chr2 ENCODE exon 220190183 220190242 . + . Parent=gene1232 chr2 ENCODE CDS 220190203 220190242 . + 0 Parent=gene1232 chr2 ENCODE exon 220190348 220190445 . + . Parent=gene1232 chr2 ENCODE CDS 220190348 220190445 . + 2 Parent=gene1232 chr2 ENCODE exon 220191703 220191806 . + . Parent=gene1232 chr2 ENCODE CDS 220191703 220191806 . + 0 Parent=gene1232 chr2 ENCODE exon 220192078 220192264 . + . Parent=gene1232 chr2 ENCODE CDS 220192078 220192264 . + 1 Parent=gene1232 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1232 chr2 ENCODE CDS 220192609 220192668 . + 0 Parent=gene1232 chr2 ENCODE exon 220194310 220194440 . + . Parent=gene1232 chr2 ENCODE CDS 220194310 220194440 . + 0 Parent=gene1232 chr2 ENCODE exon 220195455 220195589 . + . Parent=gene1232 chr2 ENCODE CDS 220195455 220195589 . + 1 Parent=gene1232 chr2 ENCODE exon 220195685 220195782 . + . Parent=gene1232 chr2 ENCODE CDS 220195685 220195782 . + 1 Parent=gene1232 chr2 ENCODE exon 220195942 220195988 . + . Parent=gene1232 chr2 ENCODE CDS 220195942 220195988 . + 2 Parent=gene1232 chr2 ENCODE exon 220196207 220196299 . + . Parent=gene1232 chr2 ENCODE CDS 220196207 220196299 . + 0 Parent=gene1232 chr2 ENCODE exon 220196481 220196649 . + . Parent=gene1232 chr2 ENCODE CDS 220196481 220196649 . + 0 Parent=gene1232 chr2 ENCODE CDS 220196925 220197025 . + 2 Parent=gene1232 chr2 ENCODE exon 220196925 220197214 . + . Parent=gene1232 ### chr2 ENCODE gene 220189111 220192668 . + . ID=gene1233;name2=GMPPA;Name=AC053503.10-009 chr2 ENCODE exon 220189111 220189165 . + . Parent=gene1233 chr2 ENCODE exon 220190183 220190242 . + . Parent=gene1233 chr2 ENCODE exon 220190348 220190445 . + . Parent=gene1233 chr2 ENCODE exon 220191703 220192264 . + . Parent=gene1233 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1233 ### chr2 ENCODE gene 220189115 220197162 . + . ID=gene1234;Name=AC053503.10-002;name2=GMPPA chr2 ENCODE exon 220189115 220189165 . + . Parent=gene1234 chr2 ENCODE exon 220190183 220190242 . + . Parent=gene1234 chr2 ENCODE CDS 220190203 220190242 . + 0 Parent=gene1234 chr2 ENCODE exon 220190348 220190445 . + . Parent=gene1234 chr2 ENCODE CDS 220190348 220190445 . + 2 Parent=gene1234 chr2 ENCODE exon 220191703 220191806 . + . Parent=gene1234 chr2 ENCODE CDS 220191703 220191806 . + 0 Parent=gene1234 chr2 ENCODE exon 220192078 220192264 . + . Parent=gene1234 chr2 ENCODE CDS 220192078 220192264 . + 1 Parent=gene1234 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1234 chr2 ENCODE CDS 220192609 220192668 . + 0 Parent=gene1234 chr2 ENCODE exon 220194310 220194440 . + . Parent=gene1234 chr2 ENCODE CDS 220194310 220194440 . + 0 Parent=gene1234 chr2 ENCODE exon 220195455 220195589 . + . Parent=gene1234 chr2 ENCODE CDS 220195455 220195589 . + 1 Parent=gene1234 chr2 ENCODE exon 220195685 220195988 . + . Parent=gene1234 chr2 ENCODE CDS 220195685 220195988 . + 1 Parent=gene1234 chr2 ENCODE exon 220196207 220196299 . + . Parent=gene1234 chr2 ENCODE CDS 220196207 220196299 . + 0 Parent=gene1234 chr2 ENCODE exon 220196481 220196649 . + . Parent=gene1234 chr2 ENCODE CDS 220196481 220196649 . + 0 Parent=gene1234 chr2 ENCODE CDS 220196925 220197025 . + 2 Parent=gene1234 chr2 ENCODE exon 220196925 220197162 . + . Parent=gene1234 ### chr2 ENCODE gene 220189128 220197215 . + . ID=gene1235;Name=AC053503.10-003;name2=GMPPA chr2 ENCODE exon 220189128 220189481 . + . Parent=gene1235 chr2 ENCODE exon 220190188 220190242 . + . Parent=gene1235 chr2 ENCODE CDS 220190203 220190242 . + 0 Parent=gene1235 chr2 ENCODE exon 220190348 220190445 . + . Parent=gene1235 chr2 ENCODE CDS 220190348 220190445 . + 2 Parent=gene1235 chr2 ENCODE exon 220191703 220191806 . + . Parent=gene1235 chr2 ENCODE CDS 220191703 220191806 . + 0 Parent=gene1235 chr2 ENCODE exon 220192078 220192264 . + . Parent=gene1235 chr2 ENCODE CDS 220192078 220192264 . + 1 Parent=gene1235 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1235 chr2 ENCODE CDS 220192609 220192668 . + 0 Parent=gene1235 chr2 ENCODE exon 220194310 220194440 . + . Parent=gene1235 chr2 ENCODE CDS 220194310 220194440 . + 0 Parent=gene1235 chr2 ENCODE exon 220195455 220195589 . + . Parent=gene1235 chr2 ENCODE CDS 220195455 220195589 . + 1 Parent=gene1235 chr2 ENCODE exon 220195685 220195782 . + . Parent=gene1235 chr2 ENCODE CDS 220195685 220195782 . + 1 Parent=gene1235 chr2 ENCODE exon 220195942 220195988 . + . Parent=gene1235 chr2 ENCODE CDS 220195942 220195988 . + 2 Parent=gene1235 chr2 ENCODE exon 220196207 220196299 . + . Parent=gene1235 chr2 ENCODE CDS 220196207 220196299 . + 0 Parent=gene1235 chr2 ENCODE exon 220196481 220196649 . + . Parent=gene1235 chr2 ENCODE CDS 220196481 220196649 . + 0 Parent=gene1235 chr2 ENCODE CDS 220196925 220197025 . + 2 Parent=gene1235 chr2 ENCODE exon 220196925 220197215 . + . Parent=gene1235 ### chr2 ENCODE gene 220189132 220197160 . + . ID=gene1236;name2=GMPPA;Name=AC053503.10-005 chr2 ENCODE exon 220189132 220189481 . + . Parent=gene1236 chr2 ENCODE exon 220190188 220190242 . + . Parent=gene1236 chr2 ENCODE exon 220190348 220190445 . + . Parent=gene1236 chr2 ENCODE exon 220191703 220191806 . + . Parent=gene1236 chr2 ENCODE exon 220192078 220192264 . + . Parent=gene1236 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1236 chr2 ENCODE exon 220194310 220194440 . + . Parent=gene1236 chr2 ENCODE exon 220195455 220195589 . + . Parent=gene1236 chr2 ENCODE exon 220195685 220195782 . + . Parent=gene1236 chr2 ENCODE exon 220195922 220195988 . + . Parent=gene1236 chr2 ENCODE exon 220196207 220196299 . + . Parent=gene1236 chr2 ENCODE exon 220196481 220196649 . + . Parent=gene1236 chr2 ENCODE exon 220196925 220197160 . + . Parent=gene1236 ### chr2 ENCODE gene 220189133 220197215 . + . ID=gene1237;Name=AC053503.10-004;name2=GMPPA chr2 ENCODE exon 220189133 220189165 . + . Parent=gene1237 chr2 ENCODE exon 220190188 220190242 . + . Parent=gene1237 chr2 ENCODE CDS 220190203 220190242 . + 0 Parent=gene1237 chr2 ENCODE exon 220190348 220190445 . + . Parent=gene1237 chr2 ENCODE CDS 220190348 220190445 . + 2 Parent=gene1237 chr2 ENCODE exon 220191703 220191806 . + . Parent=gene1237 chr2 ENCODE CDS 220191703 220191806 . + 0 Parent=gene1237 chr2 ENCODE exon 220192078 220192264 . + . Parent=gene1237 chr2 ENCODE CDS 220192078 220192264 . + 1 Parent=gene1237 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1237 chr2 ENCODE CDS 220192609 220192668 . + 0 Parent=gene1237 chr2 ENCODE exon 220194310 220194440 . + . Parent=gene1237 chr2 ENCODE CDS 220194310 220194440 . + 0 Parent=gene1237 chr2 ENCODE exon 220195455 220195589 . + . Parent=gene1237 chr2 ENCODE CDS 220195455 220195589 . + 1 Parent=gene1237 chr2 ENCODE exon 220195685 220195782 . + . Parent=gene1237 chr2 ENCODE CDS 220195685 220195782 . + 1 Parent=gene1237 chr2 ENCODE exon 220195942 220195988 . + . Parent=gene1237 chr2 ENCODE CDS 220195942 220195988 . + 2 Parent=gene1237 chr2 ENCODE exon 220196207 220196299 . + . Parent=gene1237 chr2 ENCODE CDS 220196207 220196299 . + 0 Parent=gene1237 chr2 ENCODE exon 220196481 220196649 . + . Parent=gene1237 chr2 ENCODE CDS 220196481 220196649 . + 0 Parent=gene1237 chr2 ENCODE CDS 220196925 220197025 . + 2 Parent=gene1237 chr2 ENCODE exon 220196925 220197215 . + . Parent=gene1237 ### chr2 ENCODE gene 220189134 220194311 . + . ID=gene1238;Name=AC053503.10-006;name2=GMPPA chr2 ENCODE exon 220189134 220189481 . + . Parent=gene1238 chr2 ENCODE exon 220190183 220190242 . + . Parent=gene1238 chr2 ENCODE CDS 220190203 220190242 . + 0 Parent=gene1238 chr2 ENCODE exon 220190348 220190445 . + . Parent=gene1238 chr2 ENCODE CDS 220190348 220190445 . + 2 Parent=gene1238 chr2 ENCODE exon 220191703 220191806 . + . Parent=gene1238 chr2 ENCODE CDS 220191703 220191806 . + 0 Parent=gene1238 chr2 ENCODE exon 220192078 220192264 . + . Parent=gene1238 chr2 ENCODE CDS 220192078 220192264 . + 1 Parent=gene1238 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1238 chr2 ENCODE CDS 220192609 220192668 . + 0 Parent=gene1238 chr2 ENCODE exon 220194310 220194311 . + . Parent=gene1238 chr2 ENCODE CDS 220194310 220194311 . + 0 Parent=gene1238 ### chr2 ENCODE gene 220189136 220195782 . + . ID=gene1239;Name=AC053503.10-008;name2=GMPPA chr2 ENCODE exon 220189136 220189165 . + . Parent=gene1239 chr2 ENCODE exon 220190405 220190445 . + . Parent=gene1239 chr2 ENCODE CDS 220190413 220190445 . + 0 Parent=gene1239 chr2 ENCODE exon 220191703 220191806 . + . Parent=gene1239 chr2 ENCODE CDS 220191703 220191806 . + 0 Parent=gene1239 chr2 ENCODE exon 220192078 220192264 . + . Parent=gene1239 chr2 ENCODE CDS 220192078 220192264 . + 1 Parent=gene1239 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1239 chr2 ENCODE CDS 220192609 220192668 . + 0 Parent=gene1239 chr2 ENCODE exon 220194310 220194440 . + . Parent=gene1239 chr2 ENCODE CDS 220194310 220194440 . + 0 Parent=gene1239 chr2 ENCODE exon 220195455 220195589 . + . Parent=gene1239 chr2 ENCODE CDS 220195455 220195589 . + 1 Parent=gene1239 chr2 ENCODE exon 220195685 220195782 . + . Parent=gene1239 chr2 ENCODE CDS 220195685 220195782 . + 1 Parent=gene1239 ### chr2 ENCODE gene 220189142 220197214 . + . ID=gene1240;Name=AC053503.10-012;name2=GMPPA chr2 ENCODE exon 220189142 220189198 . + . Parent=gene1240 chr2 ENCODE exon 220190188 220190242 . + . Parent=gene1240 chr2 ENCODE CDS 220190203 220190242 . + 0 Parent=gene1240 chr2 ENCODE exon 220190348 220190445 . + . Parent=gene1240 chr2 ENCODE CDS 220190348 220190445 . + 2 Parent=gene1240 chr2 ENCODE exon 220191703 220191806 . + . Parent=gene1240 chr2 ENCODE CDS 220191703 220191806 . + 0 Parent=gene1240 chr2 ENCODE exon 220192078 220192264 . + . Parent=gene1240 chr2 ENCODE CDS 220192078 220192264 . + 1 Parent=gene1240 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1240 chr2 ENCODE CDS 220192609 220192668 . + 0 Parent=gene1240 chr2 ENCODE exon 220194310 220194440 . + . Parent=gene1240 chr2 ENCODE CDS 220194310 220194440 . + 0 Parent=gene1240 chr2 ENCODE exon 220195455 220195589 . + . Parent=gene1240 chr2 ENCODE CDS 220195455 220195589 . + 1 Parent=gene1240 chr2 ENCODE exon 220195685 220195782 . + . Parent=gene1240 chr2 ENCODE CDS 220195685 220195782 . + 1 Parent=gene1240 chr2 ENCODE exon 220195942 220195988 . + . Parent=gene1240 chr2 ENCODE CDS 220195942 220195988 . + 2 Parent=gene1240 chr2 ENCODE exon 220196207 220196299 . + . Parent=gene1240 chr2 ENCODE CDS 220196207 220196299 . + 0 Parent=gene1240 chr2 ENCODE exon 220196481 220196649 . + . Parent=gene1240 chr2 ENCODE CDS 220196481 220196649 . + 0 Parent=gene1240 chr2 ENCODE CDS 220196925 220197025 . + 2 Parent=gene1240 chr2 ENCODE exon 220196925 220197214 . + . Parent=gene1240 ### chr2 ENCODE gene 220190002 220197214 . + . ID=gene1241;Name=AC053503.10-013;name2=GMPPA chr2 ENCODE exon 220190002 220190242 . + . Parent=gene1241 chr2 ENCODE exon 220190348 220192264 . + . Parent=gene1241 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1241 chr2 ENCODE exon 220194310 220196299 . + . Parent=gene1241 chr2 ENCODE exon 220196481 220197214 . + . Parent=gene1241 ### chr2 ENCODE gene 220190171 220194468 . + . ID=gene1242;name2=GMPPA;Name=AC053503.10-007 chr2 ENCODE exon 220190171 220190242 . + . Parent=gene1242 chr2 ENCODE exon 220190348 220190445 . + . Parent=gene1242 chr2 ENCODE exon 220191703 220191806 . + . Parent=gene1242 chr2 ENCODE exon 220192078 220192264 . + . Parent=gene1242 chr2 ENCODE exon 220192609 220192668 . + . Parent=gene1242 chr2 ENCODE exon 220194310 220194468 . + . Parent=gene1242 ### chr2 ENCODE gene 220195952 220196921 . + . ID=gene1243;Name=AC053503.10-011;name2=GMPPA chr2 ENCODE exon 220195952 220195988 . + . Parent=gene1243 chr2 ENCODE exon 220196207 220196299 . + . Parent=gene1243 chr2 ENCODE exon 220196481 220196921 . + . Parent=gene1243 ### chr2 ENCODE gene 220196167 220196649 . + . ID=gene1244;Name=AC053503.10-010;name2=GMPPA chr2 ENCODE exon 220196167 220196299 . + . Parent=gene1244 chr2 ENCODE exon 220196481 220196649 . + . Parent=gene1244 ### chr2 ENCODE gene 220204397 220224285 . + . ID=gene1245;Name=AC009955.2-004;name2=ACCN4 chr2 ENCODE exon 220204397 220205533 . + . Parent=gene1245 chr2 ENCODE exon 220221985 220222129 . + . Parent=gene1245 chr2 ENCODE exon 220222228 220224285 . + . Parent=gene1245 ### chr2 ENCODE gene 220204557 220228999 . + . ID=gene1246;Name=AC009955.2-001;name2=ACCN4 chr2 ENCODE exon 220204557 220205533 . + . Parent=gene1246 chr2 ENCODE CDS 220204571 220205533 . + 0 Parent=gene1246 chr2 ENCODE exon 220221985 220222129 . + . Parent=gene1246 chr2 ENCODE CDS 220221985 220222129 . + 0 Parent=gene1246 chr2 ENCODE exon 220222228 220222355 . + . Parent=gene1246 chr2 ENCODE CDS 220222228 220222355 . + 2 Parent=gene1246 chr2 ENCODE exon 220222542 220222704 . + . Parent=gene1246 chr2 ENCODE CDS 220222542 220222704 . + 0 Parent=gene1246 chr2 ENCODE exon 220225398 220225551 . + . Parent=gene1246 chr2 ENCODE CDS 220225398 220225551 . + 2 Parent=gene1246 chr2 ENCODE exon 220227293 220227384 . + . Parent=gene1246 chr2 ENCODE CDS 220227293 220227384 . + 1 Parent=gene1246 chr2 ENCODE exon 220227469 220227548 . + . Parent=gene1246 chr2 ENCODE CDS 220227469 220227548 . + 2 Parent=gene1246 chr2 ENCODE exon 220227859 220227963 . + . Parent=gene1246 chr2 ENCODE CDS 220227859 220227963 . + 0 Parent=gene1246 chr2 ENCODE CDS 220228160 220228273 . + 0 Parent=gene1246 chr2 ENCODE exon 220228160 220228999 . + . Parent=gene1246 ### chr2 ENCODE gene 220204557 220228999 . + . ID=gene1247;Name=AC009955.2-002;name2=ACCN4 chr2 ENCODE exon 220204557 220205533 . + . Parent=gene1247 chr2 ENCODE CDS 220204571 220205533 . + 0 Parent=gene1247 chr2 ENCODE exon 220221985 220222129 . + . Parent=gene1247 chr2 ENCODE CDS 220221985 220222129 . + 0 Parent=gene1247 chr2 ENCODE exon 220222228 220222355 . + . Parent=gene1247 chr2 ENCODE CDS 220222228 220222355 . + 2 Parent=gene1247 chr2 ENCODE exon 220222542 220222704 . + . Parent=gene1247 chr2 ENCODE CDS 220222542 220222704 . + 0 Parent=gene1247 chr2 ENCODE exon 220223110 220223166 . + . Parent=gene1247 chr2 ENCODE CDS 220223110 220223166 . + 2 Parent=gene1247 chr2 ENCODE exon 220225398 220225551 . + . Parent=gene1247 chr2 ENCODE CDS 220225398 220225551 . + 2 Parent=gene1247 chr2 ENCODE exon 220227293 220227384 . + . Parent=gene1247 chr2 ENCODE CDS 220227293 220227384 . + 1 Parent=gene1247 chr2 ENCODE exon 220227469 220227548 . + . Parent=gene1247 chr2 ENCODE CDS 220227469 220227548 . + 2 Parent=gene1247 chr2 ENCODE exon 220227859 220227963 . + . Parent=gene1247 chr2 ENCODE CDS 220227859 220227963 . + 0 Parent=gene1247 chr2 ENCODE CDS 220228160 220228273 . + 0 Parent=gene1247 chr2 ENCODE exon 220228160 220228999 . + . Parent=gene1247 ### chr2 ENCODE gene 220207363 220228999 . + . ID=gene1248;Name=AC009955.2-003;name2=ACCN4 chr2 ENCODE exon 220207363 220207495 . + . Parent=gene1248 chr2 ENCODE exon 220221985 220222129 . + . Parent=gene1248 chr2 ENCODE exon 220222228 220222355 . + . Parent=gene1248 chr2 ENCODE exon 220222542 220222704 . + . Parent=gene1248 chr2 ENCODE exon 220223110 220223166 . + . Parent=gene1248 chr2 ENCODE exon 220225398 220225551 . + . Parent=gene1248 chr2 ENCODE exon 220227293 220227384 . + . Parent=gene1248 chr2 ENCODE exon 220227469 220228999 . + . Parent=gene1248 ### chr2 ENCODE gene 220207468 220223258 . + . ID=gene1249;Name=AC009955.2-005;name2=ACCN4 chr2 ENCODE exon 220207468 220207495 . + . Parent=gene1249 chr2 ENCODE exon 220221985 220222129 . + . Parent=gene1249 chr2 ENCODE exon 220222228 220222355 . + . Parent=gene1249 chr2 ENCODE exon 220222542 220222704 . + . Parent=gene1249 chr2 ENCODE exon 220223110 220223258 . + . Parent=gene1249 ### chr2 ENCODE gene 220229174 220234014 . - . ID=gene1250;Name=AC009955.3-001;name2=CHPF chr2 ENCODE exon 220229174 220230869 . - . Parent=gene1250 chr2 ENCODE CDS 220229610 220230869 . - 0 Parent=gene1250 chr2 ENCODE exon 220231173 220231352 . - . Parent=gene1250 chr2 ENCODE CDS 220231173 220231352 . - 0 Parent=gene1250 chr2 ENCODE exon 220231843 220232416 . - . Parent=gene1250 chr2 ENCODE CDS 220231843 220232416 . - 1 Parent=gene1250 chr2 ENCODE CDS 220233452 220233765 . - 0 Parent=gene1250 chr2 ENCODE exon 220233452 220234014 . - . Parent=gene1250 ### chr2 ENCODE gene 220231687 220233800 . - . ID=gene1251;Name=AC009955.3-002;name2=CHPF chr2 ENCODE exon 220231687 220232416 . - . Parent=gene1251 chr2 ENCODE CDS 220231834 220232416 . - 1 Parent=gene1251 chr2 ENCODE CDS 220233452 220233765 . - 0 Parent=gene1251 chr2 ENCODE exon 220233452 220233800 . - . Parent=gene1251 ### chr2 ENCODE gene 220233890 220240806 . + . ID=gene1252;Name=AC009955.4-002;name2=AC009955.4 chr2 ENCODE exon 220233890 220234238 . + . Parent=gene1252 chr2 ENCODE exon 220234373 220234604 . + . Parent=gene1252 chr2 ENCODE exon 220234951 220235120 . + . Parent=gene1252 chr2 ENCODE CDS 220234955 220235120 . + 0 Parent=gene1252 chr2 ENCODE exon 220237733 220238308 . + . Parent=gene1252 chr2 ENCODE CDS 220237733 220238308 . + 2 Parent=gene1252 chr2 ENCODE exon 220239379 220239581 . + . Parent=gene1252 chr2 ENCODE CDS 220239379 220239581 . + 2 Parent=gene1252 chr2 ENCODE CDS 220239944 220240081 . + 0 Parent=gene1252 chr2 ENCODE exon 220239944 220240806 . + . Parent=gene1252 ### chr2 ENCODE gene 220234233 220238247 . + . ID=gene1253;Name=AC009955.4-003;name2=AC009955.4 chr2 ENCODE exon 220234233 220234604 . + . Parent=gene1253 chr2 ENCODE exon 220234951 220235120 . + . Parent=gene1253 chr2 ENCODE CDS 220234955 220235120 . + 0 Parent=gene1253 chr2 ENCODE exon 220237733 220238247 . + . Parent=gene1253 chr2 ENCODE CDS 220237733 220238247 . + 2 Parent=gene1253 ### chr2 ENCODE gene 220234250 220240822 . + . ID=gene1254;Name=AC009955.4-001;name2=AC009955.4 chr2 ENCODE exon 220234250 220234604 . + . Parent=gene1254 chr2 ENCODE exon 220234916 220235120 . + . Parent=gene1254 chr2 ENCODE CDS 220234955 220235120 . + 0 Parent=gene1254 chr2 ENCODE exon 220237733 220238308 . + . Parent=gene1254 chr2 ENCODE CDS 220237733 220238308 . + 2 Parent=gene1254 chr2 ENCODE exon 220239379 220239581 . + . Parent=gene1254 chr2 ENCODE CDS 220239379 220239581 . + 2 Parent=gene1254 chr2 ENCODE CDS 220239944 220240081 . + 0 Parent=gene1254 chr2 ENCODE exon 220239944 220240822 . + . Parent=gene1254 ### chr2 ENCODE gene 220234277 220237776 . + . ID=gene1255;Name=AC009955.4-004;name2=AC009955.4 chr2 ENCODE exon 220234277 220234604 . + . Parent=gene1255 chr2 ENCODE CDS 220234314 220234604 . + 0 Parent=gene1255 chr2 ENCODE exon 220234988 220235120 . + . Parent=gene1255 chr2 ENCODE CDS 220234988 220235120 . + 0 Parent=gene1255 chr2 ENCODE exon 220237733 220237776 . + . Parent=gene1255 chr2 ENCODE CDS 220237733 220237776 . + 2 Parent=gene1255 ### chr2 ENCODE gene 220240956 220242616 . - . ID=gene1256;name2=OBSL1;Name=AC009955.5-011 chr2 ENCODE exon 220240956 220241069 . - . Parent=gene1256 chr2 ENCODE exon 220241756 220242025 . - . Parent=gene1256 chr2 ENCODE exon 220242339 220242616 . - . Parent=gene1256 ### chr2 ENCODE gene 220240956 220242941 . - . ID=gene1257;Name=AC009955.5-012;name2=OBSL1 chr2 ENCODE exon 220240956 220241095 . - . Parent=gene1257 chr2 ENCODE exon 220241756 220242025 . - . Parent=gene1257 chr2 ENCODE exon 220242339 220242443 . - . Parent=gene1257 chr2 ENCODE exon 220242763 220242941 . - . Parent=gene1257 ### chr2 ENCODE gene 220240956 220260966 . - . ID=gene1258;Name=AC009955.5-004;name2=OBSL1 chr2 ENCODE exon 220240956 220242025 . - . Parent=gene1258 chr2 ENCODE exon 220242339 220242443 . - . Parent=gene1258 chr2 ENCODE exon 220242763 220243251 . - . Parent=gene1258 chr2 ENCODE exon 220246247 220246519 . - . Parent=gene1258 chr2 ENCODE exon 220246805 220246950 . - . Parent=gene1258 chr2 ENCODE exon 220247570 220247845 . - . Parent=gene1258 chr2 ENCODE exon 220248050 220248337 . - . Parent=gene1258 chr2 ENCODE exon 220249452 220249724 . - . Parent=gene1258 chr2 ENCODE exon 220252629 220252901 . - . Parent=gene1258 chr2 ENCODE exon 220253582 220253854 . - . Parent=gene1258 chr2 ENCODE exon 220255469 220255741 . - . Parent=gene1258 chr2 ENCODE exon 220257057 220257353 . - . Parent=gene1258 chr2 ENCODE exon 220257500 220257802 . - . Parent=gene1258 chr2 ENCODE exon 220257945 220258196 . - . Parent=gene1258 chr2 ENCODE exon 220258282 220258551 . - . Parent=gene1258 chr2 ENCODE exon 220260448 220260966 . - . Parent=gene1258 ### chr2 ENCODE gene 220240983 220261468 . - . ID=gene1259;Name=AC009955.5-001;name2=OBSL1 chr2 ENCODE exon 220240983 220241069 . - . Parent=gene1259 chr2 ENCODE CDS 220241062 220241069 . - 2 Parent=gene1259 chr2 ENCODE exon 220241756 220242025 . - . Parent=gene1259 chr2 ENCODE CDS 220241756 220242025 . - 2 Parent=gene1259 chr2 ENCODE exon 220242339 220242443 . - . Parent=gene1259 chr2 ENCODE CDS 220242339 220242443 . - 2 Parent=gene1259 chr2 ENCODE exon 220242763 220242924 . - . Parent=gene1259 chr2 ENCODE CDS 220242763 220242924 . - 2 Parent=gene1259 chr2 ENCODE exon 220243095 220243251 . - . Parent=gene1259 chr2 ENCODE CDS 220243095 220243251 . - 0 Parent=gene1259 chr2 ENCODE exon 220243801 220243913 . - . Parent=gene1259 chr2 ENCODE CDS 220243801 220243913 . - 2 Parent=gene1259 chr2 ENCODE exon 220244701 220244967 . - . Parent=gene1259 chr2 ENCODE CDS 220244701 220244967 . - 2 Parent=gene1259 chr2 ENCODE exon 220246247 220246519 . - . Parent=gene1259 chr2 ENCODE CDS 220246247 220246519 . - 2 Parent=gene1259 chr2 ENCODE exon 220246681 220246950 . - . Parent=gene1259 chr2 ENCODE CDS 220246681 220246950 . - 2 Parent=gene1259 chr2 ENCODE exon 220248050 220248337 . - . Parent=gene1259 chr2 ENCODE CDS 220248050 220248337 . - 2 Parent=gene1259 chr2 ENCODE exon 220248411 220248686 . - . Parent=gene1259 chr2 ENCODE CDS 220248411 220248686 . - 2 Parent=gene1259 chr2 ENCODE exon 220249452 220249724 . - . Parent=gene1259 chr2 ENCODE CDS 220249452 220249724 . - 2 Parent=gene1259 chr2 ENCODE exon 220252629 220252901 . - . Parent=gene1259 chr2 ENCODE CDS 220252629 220252901 . - 2 Parent=gene1259 chr2 ENCODE exon 220253582 220253854 . - . Parent=gene1259 chr2 ENCODE CDS 220253582 220253854 . - 2 Parent=gene1259 chr2 ENCODE exon 220255469 220255741 . - . Parent=gene1259 chr2 ENCODE CDS 220255469 220255741 . - 2 Parent=gene1259 chr2 ENCODE exon 220257057 220257353 . - . Parent=gene1259 chr2 ENCODE CDS 220257057 220257353 . - 2 Parent=gene1259 chr2 ENCODE exon 220257500 220257802 . - . Parent=gene1259 chr2 ENCODE CDS 220257500 220257802 . - 2 Parent=gene1259 chr2 ENCODE exon 220257945 220258196 . - . Parent=gene1259 chr2 ENCODE CDS 220257945 220258196 . - 2 Parent=gene1259 chr2 ENCODE exon 220258282 220258551 . - . Parent=gene1259 chr2 ENCODE CDS 220258282 220258551 . - 2 Parent=gene1259 chr2 ENCODE CDS 220260448 220261459 . - 0 Parent=gene1259 chr2 ENCODE exon 220260448 220261468 . - . Parent=gene1259 ### chr2 ENCODE gene 220245990 220249658 . - . ID=gene1260;Name=AC009955.5-005;name2=OBSL1 chr2 ENCODE exon 220245990 220246519 . - . Parent=gene1260 chr2 ENCODE CDS 220246224 220246519 . - 0 Parent=gene1260 chr2 ENCODE exon 220246681 220246950 . - . Parent=gene1260 chr2 ENCODE CDS 220246681 220246950 . - 0 Parent=gene1260 chr2 ENCODE exon 220248050 220248337 . - . Parent=gene1260 chr2 ENCODE CDS 220248050 220248337 . - 0 Parent=gene1260 chr2 ENCODE exon 220248411 220248686 . - . Parent=gene1260 chr2 ENCODE CDS 220248411 220248686 . - 0 Parent=gene1260 chr2 ENCODE exon 220249452 220249658 . - . Parent=gene1260 chr2 ENCODE CDS 220249452 220249658 . - 0 Parent=gene1260 ### chr2 ENCODE gene 220246300 220248608 . - . ID=gene1261;Name=AC009955.5-009;name2=OBSL1 chr2 ENCODE exon 220246300 220246519 . - . Parent=gene1261 chr2 ENCODE CDS 220246300 220246519 . - 0 Parent=gene1261 chr2 ENCODE exon 220246681 220246950 . - . Parent=gene1261 chr2 ENCODE CDS 220246681 220246950 . - 0 Parent=gene1261 chr2 ENCODE exon 220247570 220247845 . - . Parent=gene1261 chr2 ENCODE CDS 220247570 220247845 . - 0 Parent=gene1261 chr2 ENCODE exon 220248050 220248337 . - . Parent=gene1261 chr2 ENCODE CDS 220248050 220248337 . - 0 Parent=gene1261 chr2 ENCODE exon 220248411 220248608 . - . Parent=gene1261 chr2 ENCODE CDS 220248411 220248608 . - 0 Parent=gene1261 ### chr2 ENCODE gene 220246469 220247254 . - . ID=gene1262;Name=AC009955.5-010;name2=OBSL1 chr2 ENCODE exon 220246469 220246519 . - . Parent=gene1262 chr2 ENCODE exon 220246681 220247254 . - . Parent=gene1262 ### chr2 ENCODE gene 220251949 220261516 . - . ID=gene1263;Name=AC009955.5-002;name2=OBSL1 chr2 ENCODE exon 220251949 220252235 . - . Parent=gene1263 chr2 ENCODE CDS 220252111 220252235 . - 2 Parent=gene1263 chr2 ENCODE exon 220252629 220252901 . - . Parent=gene1263 chr2 ENCODE CDS 220252629 220252901 . - 2 Parent=gene1263 chr2 ENCODE exon 220253582 220253854 . - . Parent=gene1263 chr2 ENCODE CDS 220253582 220253854 . - 2 Parent=gene1263 chr2 ENCODE exon 220255469 220255741 . - . Parent=gene1263 chr2 ENCODE CDS 220255469 220255741 . - 2 Parent=gene1263 chr2 ENCODE exon 220257057 220257353 . - . Parent=gene1263 chr2 ENCODE CDS 220257057 220257353 . - 2 Parent=gene1263 chr2 ENCODE exon 220257500 220257802 . - . Parent=gene1263 chr2 ENCODE CDS 220257500 220257802 . - 2 Parent=gene1263 chr2 ENCODE exon 220257945 220258196 . - . Parent=gene1263 chr2 ENCODE CDS 220257945 220258196 . - 2 Parent=gene1263 chr2 ENCODE exon 220258282 220258551 . - . Parent=gene1263 chr2 ENCODE CDS 220258282 220258551 . - 2 Parent=gene1263 chr2 ENCODE CDS 220260448 220261459 . - 0 Parent=gene1263 chr2 ENCODE exon 220260448 220261516 . - . Parent=gene1263 ### chr2 ENCODE gene 220251974 220261691 . - . ID=gene1264;Name=AC009955.5-003;name2=OBSL1 chr2 ENCODE exon 220251974 220252235 . - . Parent=gene1264 chr2 ENCODE CDS 220252111 220252235 . - 2 Parent=gene1264 chr2 ENCODE exon 220252629 220252901 . - . Parent=gene1264 chr2 ENCODE CDS 220252629 220252901 . - 2 Parent=gene1264 chr2 ENCODE exon 220253582 220253854 . - . Parent=gene1264 chr2 ENCODE CDS 220253582 220253854 . - 2 Parent=gene1264 chr2 ENCODE exon 220255469 220255741 . - . Parent=gene1264 chr2 ENCODE CDS 220255469 220255741 . - 2 Parent=gene1264 chr2 ENCODE exon 220257057 220257353 . - . Parent=gene1264 chr2 ENCODE CDS 220257057 220257353 . - 2 Parent=gene1264 chr2 ENCODE exon 220257500 220257802 . - . Parent=gene1264 chr2 ENCODE CDS 220257500 220257802 . - 2 Parent=gene1264 chr2 ENCODE exon 220257945 220258196 . - . Parent=gene1264 chr2 ENCODE CDS 220257945 220258196 . - 2 Parent=gene1264 chr2 ENCODE CDS 220258282 220258324 . - 0 Parent=gene1264 chr2 ENCODE exon 220258282 220258551 . - . Parent=gene1264 chr2 ENCODE exon 220261621 220261691 . - . Parent=gene1264 ### chr2 ENCODE gene 220253042 220255606 . - . ID=gene1265;Name=AC009955.5-008;name2=OBSL1 chr2 ENCODE exon 220253042 220253854 . - . Parent=gene1265 chr2 ENCODE exon 220255469 220255606 . - . Parent=gene1265 ### chr2 ENCODE gene 220258123 220261748 . - . ID=gene1266;Name=AC009955.5-006;name2=OBSL1 chr2 ENCODE exon 220258123 220258196 . - . Parent=gene1266 chr2 ENCODE exon 220258282 220258551 . - . Parent=gene1266 chr2 ENCODE exon 220260448 220260593 . - . Parent=gene1266 chr2 ENCODE exon 220261664 220261748 . - . Parent=gene1266 ### chr2 ENCODE gene 220259389 220265280 . + . ID=gene1267;Name=AC009955.6-002;name2=INHA chr2 ENCODE exon 220259389 220259673 . + . Parent=gene1267 chr2 ENCODE exon 220264921 220265280 . + . Parent=gene1267 ### chr2 ENCODE gene 220260448 220261719 . - . ID=gene1268;Name=AC009955.5-007;name2=OBSL1 chr2 ENCODE exon 220260448 220260919 . - . Parent=gene1268 chr2 ENCODE exon 220261621 220261719 . - . Parent=gene1268 ### chr2 ENCODE gene 220260685 220262086 . - . ID=gene1269;Name=AC009955.5-013;name2=OBSL1 chr2 ENCODE exon 220260685 220260802 . - . Parent=gene1269 chr2 ENCODE exon 220261621 220262086 . - . Parent=gene1269 ### chr2 ENCODE gene 220262422 220265940 . + . ID=gene1270;Name=AC009955.6-001;name2=INHA chr2 ENCODE exon 220262422 220262869 . + . Parent=gene1270 chr2 ENCODE CDS 220262602 220262869 . + 0 Parent=gene1270 chr2 ENCODE CDS 220264921 220265753 . + 2 Parent=gene1270 chr2 ENCODE exon 220264921 220265940 . + . Parent=gene1270 ### chr2 ENCODE gene 220288087 220306678 . + . ID=gene1271;Name=AC009955.7-001;name2=STK11IP chr2 ENCODE exon 220288087 220288150 . + . Parent=gene1271 chr2 ENCODE exon 220288321 220288407 . + . Parent=gene1271 chr2 ENCODE CDS 220288347 220288407 . + 0 Parent=gene1271 chr2 ENCODE exon 220291462 220291667 . + . Parent=gene1271 chr2 ENCODE CDS 220291462 220291667 . + 2 Parent=gene1271 chr2 ENCODE exon 220291868 220291942 . + . Parent=gene1271 chr2 ENCODE CDS 220291868 220291942 . + 0 Parent=gene1271 chr2 ENCODE exon 220292215 220292310 . + . Parent=gene1271 chr2 ENCODE CDS 220292215 220292310 . + 0 Parent=gene1271 chr2 ENCODE exon 220292695 220292802 . + . Parent=gene1271 chr2 ENCODE CDS 220292695 220292802 . + 0 Parent=gene1271 chr2 ENCODE exon 220292932 220293003 . + . Parent=gene1271 chr2 ENCODE CDS 220292932 220293003 . + 0 Parent=gene1271 chr2 ENCODE exon 220295835 220295961 . + . Parent=gene1271 chr2 ENCODE CDS 220295835 220295961 . + 0 Parent=gene1271 chr2 ENCODE exon 220296183 220296286 . + . Parent=gene1271 chr2 ENCODE CDS 220296183 220296286 . + 2 Parent=gene1271 chr2 ENCODE exon 220296422 220296517 . + . Parent=gene1271 chr2 ENCODE CDS 220296422 220296517 . + 0 Parent=gene1271 chr2 ENCODE exon 220296703 220296744 . + . Parent=gene1271 chr2 ENCODE CDS 220296703 220296744 . + 0 Parent=gene1271 chr2 ENCODE exon 220296939 220297085 . + . Parent=gene1271 chr2 ENCODE CDS 220296939 220297085 . + 0 Parent=gene1271 chr2 ENCODE exon 220297280 220297364 . + . Parent=gene1271 chr2 ENCODE CDS 220297280 220297364 . + 0 Parent=gene1271 chr2 ENCODE exon 220298274 220298657 . + . Parent=gene1271 chr2 ENCODE CDS 220298274 220298657 . + 2 Parent=gene1271 chr2 ENCODE exon 220298810 220299015 . + . Parent=gene1271 chr2 ENCODE CDS 220298810 220299015 . + 2 Parent=gene1271 chr2 ENCODE exon 220299324 220299440 . + . Parent=gene1271 chr2 ENCODE CDS 220299324 220299440 . + 0 Parent=gene1271 chr2 ENCODE exon 220299590 220299767 . + . Parent=gene1271 chr2 ENCODE CDS 220299590 220299767 . + 0 Parent=gene1271 chr2 ENCODE exon 220301831 220302061 . + . Parent=gene1271 chr2 ENCODE CDS 220301831 220302061 . + 2 Parent=gene1271 chr2 ENCODE exon 220302182 220302285 . + . Parent=gene1271 chr2 ENCODE CDS 220302182 220302285 . + 2 Parent=gene1271 chr2 ENCODE exon 220303355 220303452 . + . Parent=gene1271 chr2 ENCODE CDS 220303355 220303452 . + 0 Parent=gene1271 chr2 ENCODE exon 220303979 220304157 . + . Parent=gene1271 chr2 ENCODE CDS 220303979 220304157 . + 1 Parent=gene1271 chr2 ENCODE exon 220304388 220304469 . + . Parent=gene1271 chr2 ENCODE CDS 220304388 220304469 . + 2 Parent=gene1271 chr2 ENCODE exon 220304703 220304773 . + . Parent=gene1271 chr2 ENCODE CDS 220304703 220304773 . + 1 Parent=gene1271 chr2 ENCODE exon 220305321 220305568 . + . Parent=gene1271 chr2 ENCODE CDS 220305321 220305568 . + 2 Parent=gene1271 chr2 ENCODE CDS 220306271 220306420 . + 0 Parent=gene1271 chr2 ENCODE exon 220306271 220306678 . + . Parent=gene1271 ### chr2 ENCODE gene 220288098 220292067 . + . ID=gene1272;Name=AC009955.7-015;name2=STK11IP chr2 ENCODE exon 220288098 220288150 . + . Parent=gene1272 chr2 ENCODE exon 220288321 220288407 . + . Parent=gene1272 chr2 ENCODE exon 220291462 220291667 . + . Parent=gene1272 chr2 ENCODE exon 220291868 220292067 . + . Parent=gene1272 ### chr2 ENCODE gene 220288321 220292310 . + . ID=gene1273;Name=AC009955.7-004;name2=STK11IP chr2 ENCODE exon 220288321 220288407 . + . Parent=gene1273 chr2 ENCODE exon 220291462 220291781 . + . Parent=gene1273 chr2 ENCODE exon 220291868 220291942 . + . Parent=gene1273 chr2 ENCODE exon 220292215 220292310 . + . Parent=gene1273 ### chr2 ENCODE gene 220288366 220299933 . + . ID=gene1274;name2=STK11IP;Name=AC009955.7-002 chr2 ENCODE exon 220288366 220288407 . + . Parent=gene1274 chr2 ENCODE exon 220291462 220291667 . + . Parent=gene1274 chr2 ENCODE exon 220291868 220291942 . + . Parent=gene1274 chr2 ENCODE exon 220292215 220292310 . + . Parent=gene1274 chr2 ENCODE exon 220292695 220292802 . + . Parent=gene1274 chr2 ENCODE exon 220292932 220293003 . + . Parent=gene1274 chr2 ENCODE exon 220295835 220295961 . + . Parent=gene1274 chr2 ENCODE exon 220296183 220296286 . + . Parent=gene1274 chr2 ENCODE exon 220296422 220296517 . + . Parent=gene1274 chr2 ENCODE exon 220296703 220296744 . + . Parent=gene1274 chr2 ENCODE exon 220296939 220297085 . + . Parent=gene1274 chr2 ENCODE exon 220297280 220297364 . + . Parent=gene1274 chr2 ENCODE exon 220298274 220298657 . + . Parent=gene1274 chr2 ENCODE exon 220298810 220299015 . + . Parent=gene1274 chr2 ENCODE exon 220299324 220299440 . + . Parent=gene1274 chr2 ENCODE exon 220299590 220299933 . + . Parent=gene1274 ### chr2 ENCODE gene 220288394 220291886 . + . ID=gene1275;Name=AC009955.7-012;name2=STK11IP chr2 ENCODE exon 220288394 220288549 . + . Parent=gene1275 chr2 ENCODE exon 220291462 220291667 . + . Parent=gene1275 chr2 ENCODE exon 220291868 220291886 . + . Parent=gene1275 ### chr2 ENCODE gene 220288421 220292936 . + . ID=gene1276;Name=AC009955.7-013;name2=STK11IP chr2 ENCODE exon 220288421 220288504 . + . Parent=gene1276 chr2 ENCODE exon 220291462 220291667 . + . Parent=gene1276 chr2 ENCODE exon 220291868 220291942 . + . Parent=gene1276 chr2 ENCODE exon 220292215 220292310 . + . Parent=gene1276 chr2 ENCODE exon 220292695 220292802 . + . Parent=gene1276 chr2 ENCODE exon 220292932 220292936 . + . Parent=gene1276 ### chr2 ENCODE gene 220288670 220296285 . + . ID=gene1277;name2=STK11IP;Name=AC009955.7-003 chr2 ENCODE exon 220288670 220288736 . + . Parent=gene1277 chr2 ENCODE exon 220291462 220291667 . + . Parent=gene1277 chr2 ENCODE exon 220291868 220291942 . + . Parent=gene1277 chr2 ENCODE exon 220292215 220292310 . + . Parent=gene1277 chr2 ENCODE exon 220292695 220292802 . + . Parent=gene1277 chr2 ENCODE exon 220292932 220293003 . + . Parent=gene1277 chr2 ENCODE exon 220295835 220295961 . + . Parent=gene1277 chr2 ENCODE exon 220296183 220296285 . + . Parent=gene1277 ### chr2 ENCODE gene 220295734 220296860 . + . ID=gene1278;name2=STK11IP;Name=AC009955.7-005 chr2 ENCODE exon 220295734 220295961 . + . Parent=gene1278 chr2 ENCODE exon 220296183 220296286 . + . Parent=gene1278 chr2 ENCODE exon 220296422 220296860 . + . Parent=gene1278 ### chr2 ENCODE gene 220295756 220297084 . + . ID=gene1279;Name=AC009955.7-006;name2=STK11IP chr2 ENCODE exon 220295756 220295961 . + . Parent=gene1279 chr2 ENCODE exon 220296183 220296286 . + . Parent=gene1279 chr2 ENCODE exon 220296422 220296517 . + . Parent=gene1279 chr2 ENCODE exon 220296703 220296744 . + . Parent=gene1279 chr2 ENCODE exon 220296939 220297084 . + . Parent=gene1279 ### chr2 ENCODE gene 220298625 220299699 . + . ID=gene1280;Name=AC009955.7-014;name2=STK11IP chr2 ENCODE exon 220298625 220298657 . + . Parent=gene1280 chr2 ENCODE exon 220298810 220299015 . + . Parent=gene1280 chr2 ENCODE exon 220299324 220299699 . + . Parent=gene1280 ### chr2 ENCODE gene 220299373 220300353 . + . ID=gene1281;Name=AC009955.7-007;name2=STK11IP chr2 ENCODE exon 220299373 220299440 . + . Parent=gene1281 chr2 ENCODE exon 220299590 220299767 . + . Parent=gene1281 chr2 ENCODE exon 220300295 220300353 . + . Parent=gene1281 ### chr2 ENCODE gene 220302270 220305429 . + . ID=gene1282;Name=AC009955.7-009;name2=STK11IP chr2 ENCODE exon 220302270 220302285 . + . Parent=gene1282 chr2 ENCODE exon 220303355 220303452 . + . Parent=gene1282 chr2 ENCODE exon 220303979 220304157 . + . Parent=gene1282 chr2 ENCODE exon 220304388 220304469 . + . Parent=gene1282 chr2 ENCODE exon 220304703 220305098 . + . Parent=gene1282 chr2 ENCODE exon 220305321 220305429 . + . Parent=gene1282 ### chr2 ENCODE gene 220303278 220304947 . + . ID=gene1283;Name=AC009955.7-008;name2=STK11IP chr2 ENCODE exon 220303278 220303452 . + . Parent=gene1283 chr2 ENCODE exon 220303979 220304157 . + . Parent=gene1283 chr2 ENCODE exon 220304388 220304469 . + . Parent=gene1283 chr2 ENCODE exon 220304703 220304947 . + . Parent=gene1283 ### chr2 ENCODE gene 220304143 220306222 . + . ID=gene1284;name2=STK11IP;Name=AC009955.7-011 chr2 ENCODE exon 220304143 220304157 . + . Parent=gene1284 chr2 ENCODE exon 220304388 220304469 . + . Parent=gene1284 chr2 ENCODE exon 220304703 220304773 . + . Parent=gene1284 chr2 ENCODE exon 220305321 220305568 . + . Parent=gene1284 chr2 ENCODE exon 220305934 220306222 . + . Parent=gene1284 ### chr2 ENCODE gene 220305033 220306439 . + . ID=gene1285;Name=AC009955.7-010;name2=STK11IP chr2 ENCODE exon 220305033 220305568 . + . Parent=gene1285 chr2 ENCODE exon 220306271 220306439 . + . Parent=gene1285 ### chr2 ENCODE gene 220317554 220332198 . + . ID=gene1286;Name=AC009955.9-009;name2=SLC4A3 chr2 ENCODE exon 220317554 220317972 . + . Parent=gene1286 chr2 ENCODE exon 220318127 220318270 . + . Parent=gene1286 chr2 ENCODE CDS 220318220 220318270 . + 0 Parent=gene1286 chr2 ENCODE exon 220318632 220318797 . + . Parent=gene1286 chr2 ENCODE CDS 220318632 220318797 . + 0 Parent=gene1286 chr2 ENCODE exon 220319371 220319648 . + . Parent=gene1286 chr2 ENCODE CDS 220319371 220319648 . + 2 Parent=gene1286 chr2 ENCODE exon 220319807 220319922 . + . Parent=gene1286 chr2 ENCODE CDS 220319807 220319922 . + 0 Parent=gene1286 chr2 ENCODE exon 220320380 220320579 . + . Parent=gene1286 chr2 ENCODE CDS 220320380 220320579 . + 1 Parent=gene1286 chr2 ENCODE exon 220322195 220322343 . + . Parent=gene1286 chr2 ENCODE CDS 220322195 220322343 . + 2 Parent=gene1286 chr2 ENCODE exon 220322489 220322669 . + . Parent=gene1286 chr2 ENCODE CDS 220322489 220322669 . + 0 Parent=gene1286 chr2 ENCODE exon 220323101 220323236 . + . Parent=gene1286 chr2 ENCODE CDS 220323101 220323236 . + 2 Parent=gene1286 chr2 ENCODE exon 220323501 220323684 . + . Parent=gene1286 chr2 ENCODE CDS 220323501 220323684 . + 1 Parent=gene1286 chr2 ENCODE exon 220324107 220324206 . + . Parent=gene1286 chr2 ENCODE CDS 220324107 220324206 . + 0 Parent=gene1286 chr2 ENCODE exon 220324647 220324831 . + . Parent=gene1286 chr2 ENCODE CDS 220324647 220324831 . + 2 Parent=gene1286 chr2 ENCODE exon 220325498 220325723 . + . Parent=gene1286 chr2 ENCODE CDS 220325498 220325723 . + 0 Parent=gene1286 chr2 ENCODE exon 220325900 220326118 . + . Parent=gene1286 chr2 ENCODE CDS 220325900 220326118 . + 2 Parent=gene1286 chr2 ENCODE exon 220326529 220326677 . + . Parent=gene1286 chr2 ENCODE CDS 220326529 220326677 . + 2 Parent=gene1286 chr2 ENCODE exon 220326907 220327101 . + . Parent=gene1286 chr2 ENCODE CDS 220326907 220327101 . + 0 Parent=gene1286 chr2 ENCODE exon 220327808 220328038 . + . Parent=gene1286 chr2 ENCODE CDS 220327808 220328038 . + 0 Parent=gene1286 chr2 ENCODE exon 220328391 220328480 . + . Parent=gene1286 chr2 ENCODE CDS 220328391 220328480 . + 0 Parent=gene1286 chr2 ENCODE exon 220328930 220329096 . + . Parent=gene1286 chr2 ENCODE CDS 220328930 220329096 . + 0 Parent=gene1286 chr2 ENCODE exon 220329709 220329962 . + . Parent=gene1286 chr2 ENCODE CDS 220329709 220329962 . + 1 Parent=gene1286 chr2 ENCODE exon 220330657 220330826 . + . Parent=gene1286 chr2 ENCODE CDS 220330657 220330826 . + 2 Parent=gene1286 chr2 ENCODE exon 220331016 220331189 . + . Parent=gene1286 chr2 ENCODE CDS 220331016 220331189 . + 0 Parent=gene1286 chr2 ENCODE CDS 220331878 220331955 . + 0 Parent=gene1286 chr2 ENCODE exon 220331878 220332198 . + . Parent=gene1286 ### chr2 ENCODE gene 220317621 220332198 . + . ID=gene1287;name2=SLC4A3;Name=AC009955.9-010 chr2 ENCODE exon 220317621 220317719 . + . Parent=gene1287 chr2 ENCODE exon 220318127 220318270 . + . Parent=gene1287 chr2 ENCODE CDS 220318220 220318270 . + 0 Parent=gene1287 chr2 ENCODE exon 220318632 220318797 . + . Parent=gene1287 chr2 ENCODE CDS 220318632 220318797 . + 0 Parent=gene1287 chr2 ENCODE exon 220319371 220319648 . + . Parent=gene1287 chr2 ENCODE CDS 220319371 220319648 . + 2 Parent=gene1287 chr2 ENCODE exon 220319807 220319922 . + . Parent=gene1287 chr2 ENCODE CDS 220319807 220319922 . + 0 Parent=gene1287 chr2 ENCODE exon 220320380 220320579 . + . Parent=gene1287 chr2 ENCODE CDS 220320380 220320579 . + 1 Parent=gene1287 chr2 ENCODE exon 220322195 220322343 . + . Parent=gene1287 chr2 ENCODE CDS 220322195 220322343 . + 2 Parent=gene1287 chr2 ENCODE exon 220322489 220322669 . + . Parent=gene1287 chr2 ENCODE CDS 220322489 220322669 . + 0 Parent=gene1287 chr2 ENCODE exon 220323101 220323236 . + . Parent=gene1287 chr2 ENCODE CDS 220323101 220323236 . + 2 Parent=gene1287 chr2 ENCODE exon 220323501 220323684 . + . Parent=gene1287 chr2 ENCODE CDS 220323501 220323684 . + 1 Parent=gene1287 chr2 ENCODE exon 220324107 220324206 . + . Parent=gene1287 chr2 ENCODE CDS 220324107 220324206 . + 0 Parent=gene1287 chr2 ENCODE exon 220324647 220324831 . + . Parent=gene1287 chr2 ENCODE CDS 220324647 220324831 . + 2 Parent=gene1287 chr2 ENCODE exon 220325498 220325723 . + . Parent=gene1287 chr2 ENCODE CDS 220325498 220325723 . + 0 Parent=gene1287 chr2 ENCODE exon 220325900 220326118 . + . Parent=gene1287 chr2 ENCODE CDS 220325900 220326118 . + 2 Parent=gene1287 chr2 ENCODE exon 220326529 220326677 . + . Parent=gene1287 chr2 ENCODE CDS 220326529 220326677 . + 2 Parent=gene1287 chr2 ENCODE exon 220326907 220327101 . + . Parent=gene1287 chr2 ENCODE CDS 220326907 220327101 . + 0 Parent=gene1287 chr2 ENCODE exon 220327808 220328038 . + . Parent=gene1287 chr2 ENCODE CDS 220327808 220328038 . + 0 Parent=gene1287 chr2 ENCODE exon 220328391 220328480 . + . Parent=gene1287 chr2 ENCODE CDS 220328391 220328480 . + 0 Parent=gene1287 chr2 ENCODE exon 220328930 220329096 . + . Parent=gene1287 chr2 ENCODE CDS 220328930 220329096 . + 0 Parent=gene1287 chr2 ENCODE exon 220329709 220329962 . + . Parent=gene1287 chr2 ENCODE CDS 220329709 220329962 . + 1 Parent=gene1287 chr2 ENCODE exon 220330657 220330826 . + . Parent=gene1287 chr2 ENCODE CDS 220330657 220330826 . + 2 Parent=gene1287 chr2 ENCODE exon 220331016 220331189 . + . Parent=gene1287 chr2 ENCODE CDS 220331016 220331189 . + 0 Parent=gene1287 chr2 ENCODE CDS 220331878 220331955 . + 0 Parent=gene1287 chr2 ENCODE exon 220331878 220332198 . + . Parent=gene1287 ### chr2 ENCODE gene 220317792 220332207 . + . ID=gene1288;Name=AC009955.9-001;name2=SLC4A3 chr2 ENCODE exon 220317792 220317972 . + . Parent=gene1288 chr2 ENCODE exon 220318187 220318270 . + . Parent=gene1288 chr2 ENCODE CDS 220318220 220318270 . + 0 Parent=gene1288 chr2 ENCODE exon 220318632 220318797 . + . Parent=gene1288 chr2 ENCODE CDS 220318632 220318797 . + 0 Parent=gene1288 chr2 ENCODE exon 220319371 220319648 . + . Parent=gene1288 chr2 ENCODE CDS 220319371 220319648 . + 2 Parent=gene1288 chr2 ENCODE exon 220319807 220319922 . + . Parent=gene1288 chr2 ENCODE CDS 220319807 220319922 . + 0 Parent=gene1288 chr2 ENCODE exon 220320299 220320579 . + . Parent=gene1288 chr2 ENCODE CDS 220320299 220320579 . + 1 Parent=gene1288 chr2 ENCODE exon 220322195 220322343 . + . Parent=gene1288 chr2 ENCODE CDS 220322195 220322343 . + 2 Parent=gene1288 chr2 ENCODE exon 220322489 220322669 . + . Parent=gene1288 chr2 ENCODE CDS 220322489 220322669 . + 0 Parent=gene1288 chr2 ENCODE exon 220323101 220323236 . + . Parent=gene1288 chr2 ENCODE CDS 220323101 220323236 . + 2 Parent=gene1288 chr2 ENCODE exon 220323501 220323684 . + . Parent=gene1288 chr2 ENCODE CDS 220323501 220323684 . + 1 Parent=gene1288 chr2 ENCODE exon 220324107 220324206 . + . Parent=gene1288 chr2 ENCODE CDS 220324107 220324206 . + 0 Parent=gene1288 chr2 ENCODE exon 220324647 220324831 . + . Parent=gene1288 chr2 ENCODE CDS 220324647 220324831 . + 2 Parent=gene1288 chr2 ENCODE exon 220325498 220325723 . + . Parent=gene1288 chr2 ENCODE CDS 220325498 220325723 . + 0 Parent=gene1288 chr2 ENCODE exon 220325900 220326118 . + . Parent=gene1288 chr2 ENCODE CDS 220325900 220326118 . + 2 Parent=gene1288 chr2 ENCODE exon 220326529 220326677 . + . Parent=gene1288 chr2 ENCODE CDS 220326529 220326677 . + 2 Parent=gene1288 chr2 ENCODE exon 220326907 220327101 . + . Parent=gene1288 chr2 ENCODE CDS 220326907 220327101 . + 0 Parent=gene1288 chr2 ENCODE exon 220327808 220328038 . + . Parent=gene1288 chr2 ENCODE CDS 220327808 220328038 . + 0 Parent=gene1288 chr2 ENCODE exon 220328391 220328480 . + . Parent=gene1288 chr2 ENCODE CDS 220328391 220328480 . + 0 Parent=gene1288 chr2 ENCODE exon 220328930 220329096 . + . Parent=gene1288 chr2 ENCODE CDS 220328930 220329096 . + 0 Parent=gene1288 chr2 ENCODE exon 220329709 220329962 . + . Parent=gene1288 chr2 ENCODE CDS 220329709 220329962 . + 1 Parent=gene1288 chr2 ENCODE exon 220330657 220330826 . + . Parent=gene1288 chr2 ENCODE CDS 220330657 220330826 . + 2 Parent=gene1288 chr2 ENCODE exon 220331016 220331189 . + . Parent=gene1288 chr2 ENCODE CDS 220331016 220331189 . + 0 Parent=gene1288 chr2 ENCODE CDS 220331878 220331955 . + 0 Parent=gene1288 chr2 ENCODE exon 220331878 220332207 . + . Parent=gene1288 ### chr2 ENCODE gene 220317888 220332207 . + . ID=gene1289;Name=AC009955.9-002;name2=SLC4A3 chr2 ENCODE exon 220317888 220317972 . + . Parent=gene1289 chr2 ENCODE exon 220318187 220318270 . + . Parent=gene1289 chr2 ENCODE CDS 220318220 220318270 . + 0 Parent=gene1289 chr2 ENCODE exon 220318632 220318797 . + . Parent=gene1289 chr2 ENCODE CDS 220318632 220318797 . + 0 Parent=gene1289 chr2 ENCODE exon 220319371 220319648 . + . Parent=gene1289 chr2 ENCODE CDS 220319371 220319648 . + 2 Parent=gene1289 chr2 ENCODE exon 220319807 220319922 . + . Parent=gene1289 chr2 ENCODE CDS 220319807 220319922 . + 0 Parent=gene1289 chr2 ENCODE exon 220320380 220320579 . + . Parent=gene1289 chr2 ENCODE CDS 220320380 220320579 . + 1 Parent=gene1289 chr2 ENCODE exon 220322195 220322343 . + . Parent=gene1289 chr2 ENCODE CDS 220322195 220322343 . + 2 Parent=gene1289 chr2 ENCODE exon 220322489 220322669 . + . Parent=gene1289 chr2 ENCODE CDS 220322489 220322669 . + 0 Parent=gene1289 chr2 ENCODE exon 220323101 220323236 . + . Parent=gene1289 chr2 ENCODE CDS 220323101 220323236 . + 2 Parent=gene1289 chr2 ENCODE exon 220323501 220323684 . + . Parent=gene1289 chr2 ENCODE CDS 220323501 220323684 . + 1 Parent=gene1289 chr2 ENCODE exon 220324107 220324206 . + . Parent=gene1289 chr2 ENCODE CDS 220324107 220324206 . + 0 Parent=gene1289 chr2 ENCODE exon 220324647 220324831 . + . Parent=gene1289 chr2 ENCODE CDS 220324647 220324831 . + 2 Parent=gene1289 chr2 ENCODE exon 220325498 220325723 . + . Parent=gene1289 chr2 ENCODE CDS 220325498 220325723 . + 0 Parent=gene1289 chr2 ENCODE exon 220325900 220326118 . + . Parent=gene1289 chr2 ENCODE CDS 220325900 220326118 . + 2 Parent=gene1289 chr2 ENCODE exon 220326529 220326677 . + . Parent=gene1289 chr2 ENCODE CDS 220326529 220326677 . + 2 Parent=gene1289 chr2 ENCODE exon 220326907 220327101 . + . Parent=gene1289 chr2 ENCODE CDS 220326907 220327101 . + 0 Parent=gene1289 chr2 ENCODE exon 220327808 220328038 . + . Parent=gene1289 chr2 ENCODE CDS 220327808 220328038 . + 0 Parent=gene1289 chr2 ENCODE exon 220328391 220328480 . + . Parent=gene1289 chr2 ENCODE CDS 220328391 220328480 . + 0 Parent=gene1289 chr2 ENCODE exon 220328930 220329096 . + . Parent=gene1289 chr2 ENCODE CDS 220328930 220329096 . + 0 Parent=gene1289 chr2 ENCODE exon 220329709 220329962 . + . Parent=gene1289 chr2 ENCODE CDS 220329709 220329962 . + 1 Parent=gene1289 chr2 ENCODE exon 220330657 220330826 . + . Parent=gene1289 chr2 ENCODE CDS 220330657 220330826 . + 2 Parent=gene1289 chr2 ENCODE exon 220331016 220331189 . + . Parent=gene1289 chr2 ENCODE CDS 220331016 220331189 . + 0 Parent=gene1289 chr2 ENCODE CDS 220331878 220331955 . + 0 Parent=gene1289 chr2 ENCODE exon 220331878 220332207 . + . Parent=gene1289 ### chr2 ENCODE gene 220317927 220332207 . + . ID=gene1290;Name=AC009955.9-007;name2=SLC4A3 chr2 ENCODE exon 220317927 220317972 . + . Parent=gene1290 chr2 ENCODE exon 220318127 220318270 . + . Parent=gene1290 chr2 ENCODE exon 220318632 220318797 . + . Parent=gene1290 chr2 ENCODE exon 220319371 220319648 . + . Parent=gene1290 chr2 ENCODE exon 220319807 220319922 . + . Parent=gene1290 chr2 ENCODE exon 220320299 220320579 . + . Parent=gene1290 chr2 ENCODE exon 220322195 220322275 . + . Parent=gene1290 chr2 ENCODE exon 220323203 220323236 . + . Parent=gene1290 chr2 ENCODE exon 220323501 220323684 . + . Parent=gene1290 chr2 ENCODE exon 220324107 220324206 . + . Parent=gene1290 chr2 ENCODE exon 220324647 220324831 . + . Parent=gene1290 chr2 ENCODE exon 220325498 220325723 . + . Parent=gene1290 chr2 ENCODE exon 220325900 220326118 . + . Parent=gene1290 chr2 ENCODE exon 220326529 220326677 . + . Parent=gene1290 chr2 ENCODE exon 220326907 220327101 . + . Parent=gene1290 chr2 ENCODE exon 220327808 220328038 . + . Parent=gene1290 chr2 ENCODE exon 220328391 220328480 . + . Parent=gene1290 chr2 ENCODE exon 220328930 220329096 . + . Parent=gene1290 chr2 ENCODE exon 220329709 220329962 . + . Parent=gene1290 chr2 ENCODE exon 220330657 220330826 . + . Parent=gene1290 chr2 ENCODE exon 220331016 220331189 . + . Parent=gene1290 chr2 ENCODE exon 220331878 220332207 . + . Parent=gene1290 ### chr2 ENCODE gene 220318743 220322645 . + . ID=gene1291;Name=AC009955.9-003;name2=SLC4A3 chr2 ENCODE exon 220318743 220318993 . + . Parent=gene1291 chr2 ENCODE exon 220319371 220319648 . + . Parent=gene1291 chr2 ENCODE exon 220322195 220322343 . + . Parent=gene1291 chr2 ENCODE exon 220322489 220322645 . + . Parent=gene1291 ### chr2 ENCODE gene 220319193 220319590 . + . ID=gene1292;Name=AC009955.9-006;name2=SLC4A3 chr2 ENCODE exon 220319193 220319218 . + . Parent=gene1292 chr2 ENCODE exon 220319371 220319590 . + . Parent=gene1292 ### chr2 ENCODE gene 220321357 220323236 . + . ID=gene1293;Name=AC009955.9-008;name2=SLC4A3 chr2 ENCODE exon 220321357 220321682 . + . Parent=gene1293 chr2 ENCODE CDS 220321466 220321682 . + 0 Parent=gene1293 chr2 ENCODE exon 220322195 220322343 . + . Parent=gene1293 chr2 ENCODE CDS 220322195 220322343 . + 2 Parent=gene1293 chr2 ENCODE exon 220322489 220322669 . + . Parent=gene1293 chr2 ENCODE CDS 220322489 220322669 . + 0 Parent=gene1293 chr2 ENCODE exon 220323101 220323236 . + . Parent=gene1293 chr2 ENCODE CDS 220323101 220323236 . + 2 Parent=gene1293 ### chr2 ENCODE gene 220322630 220324671 . + . ID=gene1294;Name=AC009955.9-004;name2=SLC4A3 chr2 ENCODE exon 220322630 220322669 . + . Parent=gene1294 chr2 ENCODE exon 220323101 220323236 . + . Parent=gene1294 chr2 ENCODE exon 220323501 220323684 . + . Parent=gene1294 chr2 ENCODE exon 220324082 220324206 . + . Parent=gene1294 chr2 ENCODE exon 220324647 220324671 . + . Parent=gene1294 ### chr2 ENCODE gene 220323573 220326008 . + . ID=gene1295;Name=AC009955.9-005;name2=SLC4A3 chr2 ENCODE exon 220323573 220323684 . + . Parent=gene1295 chr2 ENCODE exon 220324107 220324206 . + . Parent=gene1295 chr2 ENCODE exon 220325498 220325723 . + . Parent=gene1295 chr2 ENCODE exon 220325900 220326008 . + . Parent=gene1295 ### chr2 ENCODE gene 234308291 234463956 . + . ID=gene1296;Name=AC006985.6-001;name2=UGT1A8 chr2 ENCODE exon 234308291 234309208 . + . Parent=gene1296 chr2 ENCODE CDS 234308354 234309208 . + 0 Parent=gene1296 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1296 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1296 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1296 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1296 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1296 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1296 chr2 ENCODE CDS 234462908 234463205 . + 1 Parent=gene1296 chr2 ENCODE exon 234462908 234463956 . + . Parent=gene1296 ### chr2 ENCODE gene 234327100 234463951 . + . ID=gene1297;Name=AC006985.7-001;name2=UGT1A10 chr2 ENCODE exon 234327100 234328023 . + . Parent=gene1297 chr2 ENCODE CDS 234327169 234328023 . + 0 Parent=gene1297 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1297 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1297 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1297 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1297 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1297 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1297 chr2 ENCODE CDS 234462908 234463205 . + 1 Parent=gene1297 chr2 ENCODE exon 234462908 234463951 . + . Parent=gene1297 ### chr2 ENCODE gene 234327148 234460925 . + . ID=gene1298;Name=AC006985.7-002;name2=UGT1A10 chr2 ENCODE exon 234327148 234328023 . + . Parent=gene1298 chr2 ENCODE CDS 234327169 234328023 . + 0 Parent=gene1298 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1298 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1298 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1298 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1298 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1298 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1298 chr2 ENCODE CDS 234460177 234460207 . + 1 Parent=gene1298 chr2 ENCODE exon 234460177 234460925 . + . Parent=gene1298 ### chr2 ENCODE gene 234362499 234463946 . + . ID=gene1299;Name=AC006985.8-001;name2=UGT1A9 chr2 ENCODE exon 234362499 234363435 . + . Parent=gene1299 chr2 ENCODE CDS 234362581 234363435 . + 0 Parent=gene1299 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1299 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1299 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1299 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1299 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1299 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1299 chr2 ENCODE CDS 234462908 234463205 . + 1 Parent=gene1299 chr2 ENCODE exon 234462908 234463946 . + . Parent=gene1299 ### chr2 ENCODE gene 234372584 234463945 . + . ID=gene1300;Name=AC006985.4-001;name2=UGT1A7 chr2 ENCODE exon 234372584 234373438 . + . Parent=gene1300 chr2 ENCODE CDS 234372584 234373438 . + 0 Parent=gene1300 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1300 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1300 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1300 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1300 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1300 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1300 chr2 ENCODE CDS 234462908 234463205 . + 1 Parent=gene1300 chr2 ENCODE exon 234462908 234463945 . + . Parent=gene1300 ### chr2 ENCODE gene 234373014 234382993 . + . ID=gene1301;Name=AC006985.4-002;name2=UGT1A7 chr2 ENCODE exon 234373014 234373438 . + . Parent=gene1301 chr2 ENCODE exon 234380545 234380550 . + . Parent=gene1301 chr2 ENCODE exon 234381166 234382993 . + . Parent=gene1301 ### chr2 ENCODE gene 234382253 234463314 . + . ID=gene1302;Name=AC006985.9-003;name2=UGT1A6 chr2 ENCODE exon 234382253 234382466 . + . Parent=gene1302 chr2 ENCODE exon 234384445 234384511 . + . Parent=gene1302 chr2 ENCODE CDS 234384452 234384511 . + 0 Parent=gene1302 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1302 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1302 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1302 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1302 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1302 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1302 chr2 ENCODE CDS 234462908 234463205 . + 1 Parent=gene1302 chr2 ENCODE exon 234462908 234463314 . + . Parent=gene1302 ### chr2 ENCODE gene 234382290 234384217 . + . ID=gene1303;Name=AC006985.9-007;name2=UGT1A6 chr2 ENCODE exon 234382290 234382466 . + . Parent=gene1303 chr2 ENCODE exon 234383650 234384217 . + . Parent=gene1303 chr2 ENCODE CDS 234383651 234384217 . + 0 Parent=gene1303 ### chr2 ENCODE gene 234382348 234446997 . + . ID=gene1304;Name=AC006985.9-002;name2=UGT1A6 chr2 ENCODE exon 234382348 234382466 . + . Parent=gene1304 chr2 ENCODE exon 234384445 234384511 . + . Parent=gene1304 chr2 ENCODE exon 234445336 234446997 . + . Parent=gene1304 ### chr2 ENCODE gene 234382356 234463115 . + . ID=gene1305;Name=AC006985.9-004;name2=UGT1A6 chr2 ENCODE exon 234382356 234382466 . + . Parent=gene1305 chr2 ENCODE exon 234384445 234384511 . + . Parent=gene1305 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1305 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1305 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1305 chr2 ENCODE exon 234460177 234460310 . + . Parent=gene1305 chr2 ENCODE exon 234462908 234463115 . + . Parent=gene1305 ### chr2 ENCODE gene 234383512 234463946 . + . ID=gene1306;Name=AC006985.9-001;name2=UGT1A6 chr2 ENCODE exon 234383512 234384511 . + . Parent=gene1306 chr2 ENCODE CDS 234383651 234384511 . + 0 Parent=gene1306 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1306 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1306 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1306 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1306 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1306 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1306 chr2 ENCODE CDS 234462908 234463205 . + 1 Parent=gene1306 chr2 ENCODE exon 234462908 234463946 . + . Parent=gene1306 ### chr2 ENCODE gene 234384311 234457805 . + . ID=gene1307;Name=AC006985.9-008;name2=UGT1A6 chr2 ENCODE exon 234384311 234384511 . + . Parent=gene1307 chr2 ENCODE exon 234408437 234408678 . + . Parent=gene1307 chr2 ENCODE exon 234457680 234457805 . + . Parent=gene1307 ### chr2 ENCODE gene 234384331 234404505 . + . ID=gene1308;Name=AC006985.9-006;name2=UGT1A6 chr2 ENCODE exon 234384331 234384511 . + . Parent=gene1308 chr2 ENCODE exon 234404015 234404505 . + . Parent=gene1308 ### chr2 ENCODE gene 234384338 234460347 . + . ID=gene1309;Name=AC006985.9-005;name2=UGT1A6 chr2 ENCODE exon 234384338 234384511 . + . Parent=gene1309 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1309 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1309 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1309 chr2 ENCODE exon 234460177 234460347 . + . Parent=gene1309 ### chr2 ENCODE gene 234403638 234463945 . + . ID=gene1310;Name=AC006985.10-001;name2=UGT1A5 chr2 ENCODE exon 234403638 234404504 . + . Parent=gene1310 chr2 ENCODE CDS 234403638 234404504 . + 0 Parent=gene1310 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1310 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1310 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1310 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1310 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1310 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1310 chr2 ENCODE CDS 234462908 234463205 . + 1 Parent=gene1310 chr2 ENCODE exon 234462908 234463945 . + . Parent=gene1310 ### chr2 ENCODE gene 234409424 234463945 . + . ID=gene1311;Name=AC006985.11-001;name2=UGT1A4 chr2 ENCODE exon 234409424 234410333 . + . Parent=gene1311 chr2 ENCODE CDS 234409467 234410333 . + 0 Parent=gene1311 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1311 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1311 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1311 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1311 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1311 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1311 chr2 ENCODE CDS 234462908 234463205 . + 1 Parent=gene1311 chr2 ENCODE exon 234462908 234463945 . + . Parent=gene1311 ### chr2 ENCODE gene 234409467 234463652 . + . ID=gene1312;Name=AC006985.11-002;name2=UGT1A4 chr2 ENCODE exon 234409467 234410333 . + . Parent=gene1312 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1312 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1312 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1312 chr2 ENCODE exon 234460177 234460310 . + . Parent=gene1312 chr2 ENCODE exon 234462908 234463652 . + . Parent=gene1312 ### chr2 ENCODE gene 234419754 234463945 . + . ID=gene1313;Name=AC006985.12-001;name2=UGT1A3 chr2 ENCODE exon 234419754 234420639 . + . Parent=gene1313 chr2 ENCODE CDS 234419773 234420639 . + 0 Parent=gene1313 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1313 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1313 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1313 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1313 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1313 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1313 chr2 ENCODE CDS 234462908 234463205 . + 1 Parent=gene1313 chr2 ENCODE exon 234462908 234463945 . + . Parent=gene1313 ### chr2 ENCODE gene 234450894 234463945 . + . ID=gene1314;Name=AC006985.13-001;name2=UGT1A1 chr2 ENCODE exon 234450894 234451797 . + . Parent=gene1314 chr2 ENCODE CDS 234450934 234451797 . + 0 Parent=gene1314 chr2 ENCODE exon 234457680 234457811 . + . Parent=gene1314 chr2 ENCODE CDS 234457680 234457811 . + 0 Parent=gene1314 chr2 ENCODE exon 234458495 234458582 . + . Parent=gene1314 chr2 ENCODE CDS 234458495 234458582 . + 0 Parent=gene1314 chr2 ENCODE exon 234458866 234459085 . + . Parent=gene1314 chr2 ENCODE CDS 234458866 234459085 . + 2 Parent=gene1314 chr2 ENCODE CDS 234462908 234463205 . + 1 Parent=gene1314 chr2 ENCODE exon 234462908 234463945 . + . Parent=gene1314 ### chr2 ENCODE gene 234466370 234470428 . + . ID=gene1315;Name=AC006985.5-006;name2=AC006985.5 chr2 ENCODE exon 234466370 234466403 . + . Parent=gene1315 chr2 ENCODE exon 234469991 234470098 . + . Parent=gene1315 chr2 ENCODE CDS 234470005 234470098 . + 0 Parent=gene1315 chr2 ENCODE exon 234470317 234470428 . + . Parent=gene1315 chr2 ENCODE CDS 234470317 234470428 . + 2 Parent=gene1315 ### chr2 ENCODE gene 234466370 234470428 . + . ID=gene1316;Name=AC006985.5-008;name2=AC006985.5 chr2 ENCODE exon 234466370 234466403 . + . Parent=gene1316 chr2 ENCODE exon 234470317 234470428 . + . Parent=gene1316 chr2 ENCODE CDS 234470400 234470428 . + 0 Parent=gene1316 ### chr2 ENCODE gene 234466370 234470428 . + . ID=gene1317;Name=AC006985.5-007;name2=AC006985.5 chr2 ENCODE exon 234466370 234466403 . + . Parent=gene1317 chr2 ENCODE exon 234469993 234470098 . + . Parent=gene1317 chr2 ENCODE CDS 234470005 234470098 . + 0 Parent=gene1317 chr2 ENCODE exon 234470317 234470428 . + . Parent=gene1317 chr2 ENCODE CDS 234470317 234470428 . + 2 Parent=gene1317 ### chr2 ENCODE gene 234468900 234484463 . + . ID=gene1318;name2=AC006985.5;Name=AC006985.5-002 chr2 ENCODE exon 234468900 234469127 . + . Parent=gene1318 chr2 ENCODE exon 234469991 234470098 . + . Parent=gene1318 chr2 ENCODE exon 234470317 234470498 . + . Parent=gene1318 chr2 ENCODE exon 234484319 234484463 . + . Parent=gene1318 ### chr2 ENCODE gene 234468976 234524069 . + . ID=gene1319;Name=AC006985.5-001;name2=AC006985.5 chr2 ENCODE exon 234468976 234469127 . + . Parent=gene1319 chr2 ENCODE CDS 234469052 234469127 . + 0 Parent=gene1319 chr2 ENCODE exon 234469991 234470098 . + . Parent=gene1319 chr2 ENCODE CDS 234469991 234470098 . + 2 Parent=gene1319 chr2 ENCODE exon 234470317 234470498 . + . Parent=gene1319 chr2 ENCODE CDS 234470317 234470498 . + 2 Parent=gene1319 chr2 ENCODE exon 234480143 234480274 . + . Parent=gene1319 chr2 ENCODE CDS 234480143 234480274 . + 0 Parent=gene1319 chr2 ENCODE exon 234480498 234480660 . + . Parent=gene1319 chr2 ENCODE CDS 234480498 234480660 . + 0 Parent=gene1319 chr2 ENCODE exon 234483442 234483540 . + . Parent=gene1319 chr2 ENCODE CDS 234483442 234483540 . + 2 Parent=gene1319 chr2 ENCODE exon 234484319 234484470 . + . Parent=gene1319 chr2 ENCODE CDS 234484319 234484470 . + 2 Parent=gene1319 chr2 ENCODE exon 234485009 234485152 . + . Parent=gene1319 chr2 ENCODE CDS 234485009 234485152 . + 0 Parent=gene1319 chr2 ENCODE exon 234486299 234486391 . + . Parent=gene1319 chr2 ENCODE CDS 234486299 234486391 . + 0 Parent=gene1319 chr2 ENCODE exon 234486613 234486691 . + . Parent=gene1319 chr2 ENCODE CDS 234486613 234486691 . + 0 Parent=gene1319 chr2 ENCODE exon 234486846 234486959 . + . Parent=gene1319 chr2 ENCODE CDS 234486846 234486959 . + 2 Parent=gene1319 chr2 ENCODE exon 234489420 234489496 . + . Parent=gene1319 chr2 ENCODE CDS 234489420 234489496 . + 2 Parent=gene1319 chr2 ENCODE exon 234490426 234490545 . + . Parent=gene1319 chr2 ENCODE CDS 234490426 234490545 . + 0 Parent=gene1319 chr2 ENCODE exon 234490851 234490961 . + . Parent=gene1319 chr2 ENCODE CDS 234490851 234490961 . + 0 Parent=gene1319 chr2 ENCODE exon 234492814 234492961 . + . Parent=gene1319 chr2 ENCODE CDS 234492814 234492961 . + 0 Parent=gene1319 chr2 ENCODE exon 234494094 234494134 . + . Parent=gene1319 chr2 ENCODE CDS 234494094 234494134 . + 2 Parent=gene1319 chr2 ENCODE exon 234494697 234494838 . + . Parent=gene1319 chr2 ENCODE CDS 234494697 234494838 . + 0 Parent=gene1319 chr2 ENCODE exon 234495141 234495193 . + . Parent=gene1319 chr2 ENCODE CDS 234495141 234495193 . + 2 Parent=gene1319 chr2 ENCODE exon 234495650 234495757 . + . Parent=gene1319 chr2 ENCODE CDS 234495650 234495757 . + 0 Parent=gene1319 chr2 ENCODE exon 234498069 234498188 . + . Parent=gene1319 chr2 ENCODE CDS 234498069 234498188 . + 0 Parent=gene1319 chr2 ENCODE exon 234498379 234498501 . + . Parent=gene1319 chr2 ENCODE CDS 234498379 234498501 . + 0 Parent=gene1319 chr2 ENCODE exon 234499772 234499924 . + . Parent=gene1319 chr2 ENCODE CDS 234499772 234499924 . + 0 Parent=gene1319 chr2 ENCODE exon 234501440 234501562 . + . Parent=gene1319 chr2 ENCODE CDS 234501440 234501562 . + 0 Parent=gene1319 chr2 ENCODE exon 234502526 234502605 . + . Parent=gene1319 chr2 ENCODE CDS 234502526 234502605 . + 0 Parent=gene1319 chr2 ENCODE exon 234504316 234504424 . + . Parent=gene1319 chr2 ENCODE CDS 234504316 234504424 . + 1 Parent=gene1319 chr2 ENCODE exon 234505228 234505323 . + . Parent=gene1319 chr2 ENCODE CDS 234505228 234505323 . + 0 Parent=gene1319 chr2 ENCODE exon 234507427 234507531 . + . Parent=gene1319 chr2 ENCODE CDS 234507427 234507531 . + 0 Parent=gene1319 chr2 ENCODE exon 234508648 234508771 . + . Parent=gene1319 chr2 ENCODE CDS 234508648 234508771 . + 0 Parent=gene1319 chr2 ENCODE exon 234509298 234509416 . + . Parent=gene1319 chr2 ENCODE CDS 234509298 234509416 . + 2 Parent=gene1319 chr2 ENCODE exon 234509963 234510115 . + . Parent=gene1319 chr2 ENCODE CDS 234509963 234510115 . + 0 Parent=gene1319 chr2 ENCODE exon 234510548 234510702 . + . Parent=gene1319 chr2 ENCODE CDS 234510548 234510702 . + 0 Parent=gene1319 chr2 ENCODE exon 234512770 234512929 . + . Parent=gene1319 chr2 ENCODE CDS 234512770 234512929 . + 1 Parent=gene1319 chr2 ENCODE exon 234513009 234513202 . + . Parent=gene1319 chr2 ENCODE CDS 234513009 234513202 . + 0 Parent=gene1319 chr2 ENCODE exon 234513527 234513664 . + . Parent=gene1319 chr2 ENCODE CDS 234513527 234513664 . + 1 Parent=gene1319 chr2 ENCODE exon 234514202 234514316 . + . Parent=gene1319 chr2 ENCODE CDS 234514202 234514316 . + 1 Parent=gene1319 chr2 ENCODE exon 234519276 234519425 . + . Parent=gene1319 chr2 ENCODE CDS 234519276 234519425 . + 0 Parent=gene1319 chr2 ENCODE exon 234519536 234519718 . + . Parent=gene1319 chr2 ENCODE CDS 234519536 234519718 . + 0 Parent=gene1319 chr2 ENCODE exon 234520266 234520421 . + . Parent=gene1319 chr2 ENCODE CDS 234520266 234520421 . + 0 Parent=gene1319 chr2 ENCODE exon 234522055 234522186 . + . Parent=gene1319 chr2 ENCODE CDS 234522055 234522186 . + 0 Parent=gene1319 chr2 ENCODE exon 234522823 234522925 . + . Parent=gene1319 chr2 ENCODE CDS 234522823 234522925 . + 0 Parent=gene1319 chr2 ENCODE exon 234523225 234523290 . + . Parent=gene1319 chr2 ENCODE CDS 234523225 234523290 . + 2 Parent=gene1319 chr2 ENCODE CDS 234523784 234523905 . + 2 Parent=gene1319 chr2 ENCODE exon 234523784 234524069 . + . Parent=gene1319 ### chr2 ENCODE gene 234486295 234493114 . + . ID=gene1320;Name=AC006985.5-003;name2=AC006985.5 chr2 ENCODE exon 234486295 234486391 . + . Parent=gene1320 chr2 ENCODE exon 234486613 234486691 . + . Parent=gene1320 chr2 ENCODE exon 234486846 234486959 . + . Parent=gene1320 chr2 ENCODE exon 234489420 234489496 . + . Parent=gene1320 chr2 ENCODE exon 234490426 234490545 . + . Parent=gene1320 chr2 ENCODE exon 234490851 234490961 . + . Parent=gene1320 chr2 ENCODE exon 234492814 234493114 . + . Parent=gene1320 ### chr2 ENCODE gene 234519201 234524064 . + . ID=gene1321;name2=AC006985.5;Name=AC006985.5-005 chr2 ENCODE exon 234519201 234519425 . + . Parent=gene1321 chr2 ENCODE exon 234519536 234519718 . + . Parent=gene1321 chr2 ENCODE exon 234520266 234520421 . + . Parent=gene1321 chr2 ENCODE exon 234522055 234522186 . + . Parent=gene1321 chr2 ENCODE exon 234522823 234522925 . + . Parent=gene1321 chr2 ENCODE exon 234523225 234523290 . + . Parent=gene1321 chr2 ENCODE exon 234523784 234524064 . + . Parent=gene1321 ### chr2 ENCODE gene 234524062 234531384 . - . ID=gene1322;Name=AC005538.1-005;name2=AC005538.1 chr2 ENCODE exon 234524062 234524378 . - . Parent=gene1322 chr2 ENCODE exon 234527924 234528298 . - . Parent=gene1322 chr2 ENCODE exon 234531255 234531384 . - . Parent=gene1322 ### chr2 ENCODE gene 234527486 234545212 . - . ID=gene1323;Name=AC005538.1-001;name2=AC005538.1 chr2 ENCODE exon 234527486 234528298 . - . Parent=gene1323 chr2 ENCODE CDS 234528223 234528298 . - 1 Parent=gene1323 chr2 ENCODE exon 234531255 234532851 . - . Parent=gene1323 chr2 ENCODE CDS 234531255 234532851 . - 2 Parent=gene1323 chr2 ENCODE exon 234534851 234534929 . - . Parent=gene1323 chr2 ENCODE CDS 234534851 234534929 . - 0 Parent=gene1323 chr2 ENCODE exon 234536374 234536466 . - . Parent=gene1323 chr2 ENCODE CDS 234536374 234536466 . - 0 Parent=gene1323 chr2 ENCODE exon 234538043 234538107 . - . Parent=gene1323 chr2 ENCODE CDS 234538043 234538107 . - 2 Parent=gene1323 chr2 ENCODE exon 234540409 234540505 . - . Parent=gene1323 chr2 ENCODE CDS 234540409 234540505 . - 0 Parent=gene1323 chr2 ENCODE exon 234543211 234543266 . - . Parent=gene1323 chr2 ENCODE CDS 234543211 234543266 . - 2 Parent=gene1323 chr2 ENCODE exon 234544490 234544556 . - . Parent=gene1323 chr2 ENCODE CDS 234544490 234544556 . - 0 Parent=gene1323 chr2 ENCODE CDS 234545030 234545146 . - 0 Parent=gene1323 chr2 ENCODE exon 234545030 234545212 . - . Parent=gene1323 ### chr2 ENCODE gene 234531652 234536409 . - . ID=gene1324;Name=AC005538.1-004;name2=AC005538.1 chr2 ENCODE exon 234531652 234531784 . - . Parent=gene1324 chr2 ENCODE exon 234532733 234532851 . - . Parent=gene1324 chr2 ENCODE exon 234534851 234534929 . - . Parent=gene1324 chr2 ENCODE exon 234536374 234536409 . - . Parent=gene1324 ### chr2 ENCODE gene 234532497 234545120 . - . ID=gene1325;Name=AC005538.1-002;name2=AC005538.1 chr2 ENCODE exon 234532497 234532851 . - . Parent=gene1325 chr2 ENCODE CDS 234532497 234532851 . - 2 Parent=gene1325 chr2 ENCODE exon 234534851 234534929 . - . Parent=gene1325 chr2 ENCODE CDS 234534851 234534929 . - 0 Parent=gene1325 chr2 ENCODE exon 234536374 234536466 . - . Parent=gene1325 chr2 ENCODE CDS 234536374 234536466 . - 0 Parent=gene1325 chr2 ENCODE exon 234538043 234538107 . - . Parent=gene1325 chr2 ENCODE CDS 234538043 234538107 . - 2 Parent=gene1325 chr2 ENCODE exon 234543211 234543266 . - . Parent=gene1325 chr2 ENCODE CDS 234543211 234543266 . - 1 Parent=gene1325 chr2 ENCODE exon 234544490 234544556 . - . Parent=gene1325 chr2 ENCODE CDS 234544490 234544556 . - 2 Parent=gene1325 chr2 ENCODE exon 234545030 234545120 . - . Parent=gene1325 chr2 ENCODE CDS 234545030 234545120 . - 0 Parent=gene1325 ### chr2 ENCODE gene 234534871 234536781 . - . ID=gene1326;Name=AC005538.1-003;name2=AC005538.1 chr2 ENCODE exon 234534871 234534929 . - . Parent=gene1326 chr2 ENCODE exon 234536374 234536781 . - . Parent=gene1326 ### chr2 ENCODE gene 234608043 234710166 . + . ID=gene1327;Name=AC005538.4-001;name2=TRPM8 chr2 ENCODE exon 234608043 234608077 . + . Parent=gene1327 chr2 ENCODE exon 234617178 234617299 . + . Parent=gene1327 chr2 ENCODE CDS 234617183 234617299 . + 0 Parent=gene1327 chr2 ENCODE exon 234621313 234621386 . + . Parent=gene1327 chr2 ENCODE CDS 234621313 234621386 . + 0 Parent=gene1327 chr2 ENCODE exon 234627997 234628153 . + . Parent=gene1327 chr2 ENCODE CDS 234627997 234628153 . + 1 Parent=gene1327 chr2 ENCODE exon 234629642 234629819 . + . Parent=gene1327 chr2 ENCODE CDS 234629642 234629819 . + 0 Parent=gene1327 chr2 ENCODE exon 234633220 234633392 . + . Parent=gene1327 chr2 ENCODE CDS 234633220 234633392 . + 2 Parent=gene1327 chr2 ENCODE exon 234636500 234636674 . + . Parent=gene1327 chr2 ENCODE CDS 234636500 234636674 . + 0 Parent=gene1327 chr2 ENCODE exon 234637732 234637799 . + . Parent=gene1327 chr2 ENCODE CDS 234637732 234637799 . + 2 Parent=gene1327 chr2 ENCODE exon 234640593 234640790 . + . Parent=gene1327 chr2 ENCODE CDS 234640593 234640790 . + 0 Parent=gene1327 chr2 ENCODE exon 234644561 234644663 . + . Parent=gene1327 chr2 ENCODE CDS 234644561 234644663 . + 0 Parent=gene1327 chr2 ENCODE exon 234645776 234645894 . + . Parent=gene1327 chr2 ENCODE CDS 234645776 234645894 . + 2 Parent=gene1327 chr2 ENCODE exon 234651420 234651710 . + . Parent=gene1327 chr2 ENCODE CDS 234651420 234651710 . + 0 Parent=gene1327 chr2 ENCODE exon 234653926 234654021 . + . Parent=gene1327 chr2 ENCODE CDS 234653926 234654021 . + 0 Parent=gene1327 chr2 ENCODE exon 234655272 234655401 . + . Parent=gene1327 chr2 ENCODE CDS 234655272 234655401 . + 0 Parent=gene1327 chr2 ENCODE exon 234657254 234657399 . + . Parent=gene1327 chr2 ENCODE CDS 234657254 234657399 . + 2 Parent=gene1327 chr2 ENCODE exon 234660339 234660451 . + . Parent=gene1327 chr2 ENCODE CDS 234660339 234660451 . + 0 Parent=gene1327 chr2 ENCODE exon 234660854 234661070 . + . Parent=gene1327 chr2 ENCODE CDS 234660854 234661070 . + 1 Parent=gene1327 chr2 ENCODE exon 234670832 234670923 . + . Parent=gene1327 chr2 ENCODE CDS 234670832 234670923 . + 0 Parent=gene1327 chr2 ENCODE exon 234672418 234672559 . + . Parent=gene1327 chr2 ENCODE CDS 234672418 234672559 . + 1 Parent=gene1327 chr2 ENCODE exon 234673697 234673868 . + . Parent=gene1327 chr2 ENCODE CDS 234673697 234673868 . + 0 Parent=gene1327 chr2 ENCODE exon 234676332 234676509 . + . Parent=gene1327 chr2 ENCODE CDS 234676332 234676509 . + 2 Parent=gene1327 chr2 ENCODE exon 234686970 234687160 . + . Parent=gene1327 chr2 ENCODE CDS 234686970 234687160 . + 1 Parent=gene1327 chr2 ENCODE exon 234697497 234697596 . + . Parent=gene1327 chr2 ENCODE CDS 234697497 234697596 . + 2 Parent=gene1327 chr2 ENCODE exon 234698714 234698747 . + . Parent=gene1327 chr2 ENCODE CDS 234698714 234698747 . + 1 Parent=gene1327 chr2 ENCODE CDS 234705206 234705256 . + 0 Parent=gene1327 chr2 ENCODE exon 234705206 234705298 . + . Parent=gene1327 chr2 ENCODE exon 234707943 234710166 . + . Parent=gene1327 ### chr2 ENCODE gene 234620361 234633633 . + . ID=gene1328;name2=TRPM8;Name=AC005538.4-002 chr2 ENCODE exon 234620361 234620395 . + . Parent=gene1328 chr2 ENCODE exon 234621313 234621386 . + . Parent=gene1328 chr2 ENCODE exon 234627951 234628153 . + . Parent=gene1328 chr2 ENCODE exon 234629642 234629819 . + . Parent=gene1328 chr2 ENCODE exon 234633220 234633633 . + . Parent=gene1328 ### chr2 ENCODE gene 234620387 234633523 . + . ID=gene1329;Name=AC005538.4-003;name2=TRPM8 chr2 ENCODE exon 234620387 234620395 . + . Parent=gene1329 chr2 ENCODE exon 234621313 234621386 . + . Parent=gene1329 chr2 ENCODE exon 234627997 234628153 . + . Parent=gene1329 chr2 ENCODE exon 234629642 234629819 . + . Parent=gene1329 chr2 ENCODE exon 234633220 234633523 . + . Parent=gene1329 ### chr2 ENCODE gene 234624385 234628094 . + . ID=gene1330;Name=AC005538.4-009;name2=TRPM8 chr2 ENCODE exon 234624385 234624601 . + . Parent=gene1330 chr2 ENCODE CDS 234624574 234624601 . + 0 Parent=gene1330 chr2 ENCODE exon 234627997 234628094 . + . Parent=gene1330 chr2 ENCODE CDS 234627997 234628094 . + 2 Parent=gene1330 ### chr2 ENCODE gene 234644353 234651568 . + . ID=gene1331;Name=AC005538.4-012;name2=TRPM8 chr2 ENCODE exon 234644353 234644663 . + . Parent=gene1331 chr2 ENCODE exon 234645776 234645894 . + . Parent=gene1331 chr2 ENCODE exon 234651420 234651568 . + . Parent=gene1331 ### chr2 ENCODE gene 234656626 234661183 . + . ID=gene1332;Name=AC005538.4-004;name2=TRPM8 chr2 ENCODE exon 234656626 234656771 . + . Parent=gene1332 chr2 ENCODE exon 234657254 234657399 . + . Parent=gene1332 chr2 ENCODE exon 234660339 234660451 . + . Parent=gene1332 chr2 ENCODE exon 234660854 234661183 . + . Parent=gene1332 ### chr2 ENCODE gene 234657279 234660556 . + . ID=gene1333;Name=AC005538.4-005;name2=TRPM8 chr2 ENCODE exon 234657279 234657399 . + . Parent=gene1333 chr2 ENCODE exon 234660339 234660556 . + . Parent=gene1333 ### chr2 ENCODE gene 234658806 234687160 . + . ID=gene1334;Name=AC005538.4-010;name2=TRPM8 chr2 ENCODE exon 234658806 234658931 . + . Parent=gene1334 chr2 ENCODE exon 234673697 234673868 . + . Parent=gene1334 chr2 ENCODE exon 234676332 234676509 . + . Parent=gene1334 chr2 ENCODE exon 234686970 234687160 . + . Parent=gene1334 ### chr2 ENCODE gene 234672452 234709082 . + . ID=gene1335;Name=AC005538.4-006;name2=TRPM8 chr2 ENCODE exon 234672452 234672559 . + . Parent=gene1335 chr2 ENCODE exon 234673697 234673995 . + . Parent=gene1335 chr2 ENCODE exon 234676332 234676509 . + . Parent=gene1335 chr2 ENCODE exon 234686970 234687160 . + . Parent=gene1335 chr2 ENCODE exon 234697497 234697596 . + . Parent=gene1335 chr2 ENCODE exon 234698714 234698747 . + . Parent=gene1335 chr2 ENCODE exon 234705206 234705298 . + . Parent=gene1335 chr2 ENCODE exon 234707943 234709082 . + . Parent=gene1335 ### chr2 ENCODE gene 234687115 234708334 . + . ID=gene1336;Name=AC005538.4-008;name2=TRPM8 chr2 ENCODE exon 234687115 234687160 . + . Parent=gene1336 chr2 ENCODE exon 234697497 234697596 . + . Parent=gene1336 chr2 ENCODE exon 234698714 234698747 . + . Parent=gene1336 chr2 ENCODE exon 234705206 234705280 . + . Parent=gene1336 chr2 ENCODE exon 234707978 234708334 . + . Parent=gene1336 ### chr2 ENCODE gene 234703869 234705331 . + . ID=gene1337;Name=AC005538.4-011;name2=TRPM8 chr2 ENCODE exon 234703869 234704430 . + . Parent=gene1337 chr2 ENCODE exon 234705206 234705331 . + . Parent=gene1337 ### chr2 ENCODE gene 234741323 234767774 . + . ID=gene1338;Name=AC006037.1-002;name2=SPP2 chr2 ENCODE exon 234741323 234741515 . + . Parent=gene1338 chr2 ENCODE CDS 234741431 234741515 . + 0 Parent=gene1338 chr2 ENCODE exon 234741615 234741739 . + . Parent=gene1338 chr2 ENCODE CDS 234741615 234741739 . + 2 Parent=gene1338 chr2 ENCODE exon 234749480 234749602 . + . Parent=gene1338 chr2 ENCODE CDS 234749480 234749602 . + 0 Parent=gene1338 chr2 ENCODE exon 234751013 234751123 . + . Parent=gene1338 chr2 ENCODE CDS 234751013 234751123 . + 0 Parent=gene1338 chr2 ENCODE exon 234757177 234757231 . + . Parent=gene1338 chr2 ENCODE CDS 234757177 234757231 . + 0 Parent=gene1338 chr2 ENCODE exon 234757868 234757918 . + . Parent=gene1338 chr2 ENCODE CDS 234757868 234757918 . + 2 Parent=gene1338 chr2 ENCODE CDS 234760572 234760657 . + 2 Parent=gene1338 chr2 ENCODE exon 234760572 234760667 . + . Parent=gene1338 chr2 ENCODE exon 234767669 234767774 . + . Parent=gene1338 ### chr2 ENCODE gene 234741343 234767778 . + . ID=gene1339;Name=AC006037.1-001;name2=SPP2 chr2 ENCODE exon 234741343 234741515 . + . Parent=gene1339 chr2 ENCODE CDS 234741431 234741515 . + 0 Parent=gene1339 chr2 ENCODE exon 234741615 234741739 . + . Parent=gene1339 chr2 ENCODE CDS 234741615 234741739 . + 2 Parent=gene1339 chr2 ENCODE exon 234749480 234749602 . + . Parent=gene1339 chr2 ENCODE CDS 234749480 234749602 . + 0 Parent=gene1339 chr2 ENCODE exon 234751013 234751123 . + . Parent=gene1339 chr2 ENCODE CDS 234751013 234751123 . + 0 Parent=gene1339 chr2 ENCODE exon 234757177 234757231 . + . Parent=gene1339 chr2 ENCODE CDS 234757177 234757231 . + 0 Parent=gene1339 chr2 ENCODE exon 234757868 234757918 . + . Parent=gene1339 chr2 ENCODE CDS 234757868 234757918 . + 2 Parent=gene1339 chr2 ENCODE CDS 234760572 234760657 . + 2 Parent=gene1339 chr2 ENCODE exon 234760572 234760667 . + . Parent=gene1339 chr2 ENCODE exon 234767489 234767778 . + . Parent=gene1339 ### chr2 ENCODE gene 234741481 234746922 . + . ID=gene1340;Name=AC006037.1-003;name2=SPP2 chr2 ENCODE exon 234741481 234741515 . + . Parent=gene1340 chr2 ENCODE exon 234741615 234741739 . + . Parent=gene1340 chr2 ENCODE exon 234746702 234746922 . + . Parent=gene1340 ### chr20 ENCODE gene 33305669 33328215 . + . ID=gene1341;Name=RP4-614O4.10-001;name2=MMP24 chr20 ENCODE exon 33305669 33305973 . + . Parent=gene1341 chr20 ENCODE exon 33315010 33315171 . + . Parent=gene1341 chr20 ENCODE exon 33318422 33318636 . + . Parent=gene1341 chr20 ENCODE exon 33320977 33321115 . + . Parent=gene1341 chr20 ENCODE exon 33322786 33323052 . + . Parent=gene1341 chr20 ENCODE exon 33325489 33328215 . + . Parent=gene1341 ### chr20 ENCODE gene 33330128 33335740 . - . ID=gene1342;Name=RP4-614O4.1-007;name2=ITGB4BP chr20 ENCODE exon 33330128 33330423 . - . Parent=gene1342 chr20 ENCODE exon 33330783 33330964 . - . Parent=gene1342 chr20 ENCODE exon 33331159 33331335 . - . Parent=gene1342 chr20 ENCODE exon 33335598 33335740 . - . Parent=gene1342 ### chr20 ENCODE gene 33330128 33335932 . - . ID=gene1343;Name=RP4-614O4.1-002;name2=ITGB4BP chr20 ENCODE exon 33330128 33330423 . - . Parent=gene1343 chr20 ENCODE CDS 33330414 33330423 . - 1 Parent=gene1343 chr20 ENCODE exon 33330783 33330964 . - . Parent=gene1343 chr20 ENCODE CDS 33330783 33330964 . - 0 Parent=gene1343 chr20 ENCODE exon 33331159 33331335 . - . Parent=gene1343 chr20 ENCODE CDS 33331159 33331335 . - 0 Parent=gene1343 chr20 ENCODE exon 33331871 33332046 . - . Parent=gene1343 chr20 ENCODE CDS 33331871 33332046 . - 2 Parent=gene1343 chr20 ENCODE exon 33335393 33335478 . - . Parent=gene1343 chr20 ENCODE CDS 33335393 33335478 . - 1 Parent=gene1343 chr20 ENCODE CDS 33335598 33335704 . - 0 Parent=gene1343 chr20 ENCODE exon 33335598 33335932 . - . Parent=gene1343 ### chr20 ENCODE gene 33330128 33335987 . - . ID=gene1344;Name=RP4-614O4.1-005;name2=ITGB4BP chr20 ENCODE exon 33330128 33330423 . - . Parent=gene1344 chr20 ENCODE CDS 33330414 33330423 . - 1 Parent=gene1344 chr20 ENCODE exon 33330783 33330964 . - . Parent=gene1344 chr20 ENCODE CDS 33330783 33330964 . - 0 Parent=gene1344 chr20 ENCODE exon 33331159 33331335 . - . Parent=gene1344 chr20 ENCODE CDS 33331159 33331335 . - 0 Parent=gene1344 chr20 ENCODE CDS 33335393 33335704 . - 0 Parent=gene1344 chr20 ENCODE exon 33335393 33335709 . - . Parent=gene1344 chr20 ENCODE exon 33335943 33335987 . - . Parent=gene1344 ### chr20 ENCODE gene 33330128 33336021 . - . ID=gene1345;name2=ITGB4BP;Name=RP4-614O4.1-003 chr20 ENCODE exon 33330128 33330423 . - . Parent=gene1345 chr20 ENCODE exon 33330783 33330964 . - . Parent=gene1345 chr20 ENCODE exon 33331159 33331335 . - . Parent=gene1345 chr20 ENCODE exon 33335393 33335478 . - . Parent=gene1345 chr20 ENCODE exon 33335598 33335709 . - . Parent=gene1345 chr20 ENCODE exon 33335943 33336021 . - . Parent=gene1345 ### chr20 ENCODE gene 33330128 33336202 . - . ID=gene1346;Name=RP4-614O4.1-001;name2=ITGB4BP chr20 ENCODE exon 33330128 33330423 . - . Parent=gene1346 chr20 ENCODE CDS 33330414 33330423 . - 1 Parent=gene1346 chr20 ENCODE exon 33330783 33330964 . - . Parent=gene1346 chr20 ENCODE CDS 33330783 33330964 . - 0 Parent=gene1346 chr20 ENCODE exon 33331159 33331335 . - . Parent=gene1346 chr20 ENCODE CDS 33331159 33331335 . - 0 Parent=gene1346 chr20 ENCODE exon 33331871 33332046 . - . Parent=gene1346 chr20 ENCODE CDS 33331871 33332046 . - 2 Parent=gene1346 chr20 ENCODE exon 33335393 33335478 . - . Parent=gene1346 chr20 ENCODE CDS 33335393 33335478 . - 1 Parent=gene1346 chr20 ENCODE CDS 33335598 33335704 . - 0 Parent=gene1346 chr20 ENCODE exon 33335598 33335709 . - . Parent=gene1346 chr20 ENCODE exon 33335943 33336202 . - . Parent=gene1346 ### chr20 ENCODE gene 33330957 33336003 . - . ID=gene1347;Name=RP4-614O4.1-004;name2=ITGB4BP chr20 ENCODE exon 33330957 33330964 . - . Parent=gene1347 chr20 ENCODE exon 33331159 33331335 . - . Parent=gene1347 chr20 ENCODE exon 33331871 33332046 . - . Parent=gene1347 chr20 ENCODE exon 33335393 33335709 . - . Parent=gene1347 chr20 ENCODE exon 33335943 33336003 . - . Parent=gene1347 ### chr20 ENCODE gene 33331291 33335919 . - . ID=gene1348;Name=RP4-614O4.1-006;name2=ITGB4BP chr20 ENCODE exon 33331291 33331335 . - . Parent=gene1348 chr20 ENCODE exon 33335393 33335478 . - . Parent=gene1348 chr20 ENCODE exon 33335598 33335919 . - . Parent=gene1348 ### chr20 ENCODE gene 33331915 33336202 . - . ID=gene1349;Name=RP4-614O4.1-008;name2=ITGB4BP chr20 ENCODE exon 33331915 33332046 . - . Parent=gene1349 chr20 ENCODE CDS 33331915 33332046 . - 2 Parent=gene1349 chr20 ENCODE exon 33335393 33335478 . - . Parent=gene1349 chr20 ENCODE CDS 33335393 33335478 . - 1 Parent=gene1349 chr20 ENCODE CDS 33335598 33335704 . - 0 Parent=gene1349 chr20 ENCODE exon 33335598 33335709 . - . Parent=gene1349 chr20 ENCODE exon 33335982 33336202 . - . Parent=gene1349 ### chr20 ENCODE gene 33336948 33343618 . - . ID=gene1350;Name=RP4-614O4.9-001;name2=FAM83C chr20 ENCODE exon 33336948 33339189 . - . Parent=gene1350 chr20 ENCODE CDS 33337752 33339189 . - 1 Parent=gene1350 chr20 ENCODE exon 33339678 33339802 . - . Parent=gene1350 chr20 ENCODE CDS 33339678 33339802 . - 0 Parent=gene1350 chr20 ENCODE exon 33340008 33340175 . - . Parent=gene1350 chr20 ENCODE CDS 33340008 33340175 . - 0 Parent=gene1350 chr20 ENCODE CDS 33343009 33343521 . - 0 Parent=gene1350 chr20 ENCODE exon 33343009 33343618 . - . Parent=gene1350 ### chr20 ENCODE gene 33336948 33343639 . - . ID=gene1351;Name=RP4-614O4.9-002;name2=FAM83C chr20 ENCODE exon 33336948 33338723 . - . Parent=gene1351 chr20 ENCODE exon 33339719 33339802 . - . Parent=gene1351 chr20 ENCODE exon 33340008 33340175 . - . Parent=gene1351 chr20 ENCODE exon 33341620 33341692 . - . Parent=gene1351 chr20 ENCODE exon 33343009 33343639 . - . Parent=gene1351 ### chr20 ENCODE gene 33353783 33358299 . - . ID=gene1352;Name=RP4-614O4.7-014;name2=C20orf44 chr20 ENCODE exon 33353783 33355286 . - . Parent=gene1352 chr20 ENCODE exon 33357883 33358299 . - . Parent=gene1352 ### chr20 ENCODE gene 33353783 33463175 . - . ID=gene1353;Name=RP4-614O4.7-002;name2=C20orf44 chr20 ENCODE exon 33353783 33355286 . - . Parent=gene1353 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1353 chr20 ENCODE exon 33365905 33365982 . - . Parent=gene1353 chr20 ENCODE exon 33398381 33398489 . - . Parent=gene1353 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1353 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1353 chr20 ENCODE exon 33463157 33463175 . - . Parent=gene1353 ### chr20 ENCODE gene 33353783 33463180 . - . ID=gene1354;Name=RP4-614O4.7-017;name2=C20orf44 chr20 ENCODE exon 33353783 33355286 . - . Parent=gene1354 chr20 ENCODE CDS 33355152 33355286 . - 0 Parent=gene1354 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1354 chr20 ENCODE CDS 33357883 33357996 . - 0 Parent=gene1354 chr20 ENCODE exon 33365905 33365982 . - . Parent=gene1354 chr20 ENCODE CDS 33365905 33365982 . - 0 Parent=gene1354 chr20 ENCODE exon 33398381 33398489 . - . Parent=gene1354 chr20 ENCODE CDS 33398381 33398489 . - 1 Parent=gene1354 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1354 chr20 ENCODE CDS 33417774 33417831 . - 2 Parent=gene1354 chr20 ENCODE exon 33433143 33433242 . - . Parent=gene1354 chr20 ENCODE CDS 33433143 33433242 . - 0 Parent=gene1354 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1354 chr20 ENCODE CDS 33435255 33435350 . - 0 Parent=gene1354 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1354 chr20 ENCODE CDS 33445309 33445413 . - 0 Parent=gene1354 chr20 ENCODE exon 33463157 33463180 . - . Parent=gene1354 chr20 ENCODE CDS 33463157 33463180 . - 0 Parent=gene1354 ### chr20 ENCODE gene 33353783 33463187 . - . ID=gene1355;Name=RP4-614O4.7-006;name2=C20orf44 chr20 ENCODE exon 33353783 33355286 . - . Parent=gene1355 chr20 ENCODE CDS 33355152 33355286 . - 0 Parent=gene1355 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1355 chr20 ENCODE CDS 33357883 33357996 . - 0 Parent=gene1355 chr20 ENCODE exon 33365905 33365982 . - . Parent=gene1355 chr20 ENCODE CDS 33365905 33365982 . - 0 Parent=gene1355 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1355 chr20 ENCODE CDS 33433135 33433242 . - 0 Parent=gene1355 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1355 chr20 ENCODE CDS 33435255 33435350 . - 0 Parent=gene1355 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1355 chr20 ENCODE CDS 33445309 33445413 . - 0 Parent=gene1355 chr20 ENCODE CDS 33463157 33463180 . - 0 Parent=gene1355 chr20 ENCODE exon 33463157 33463187 . - . Parent=gene1355 ### chr20 ENCODE gene 33353783 33463190 . - . ID=gene1356;Name=RP4-614O4.7-012;name2=C20orf44 chr20 ENCODE exon 33353783 33355286 . - . Parent=gene1356 chr20 ENCODE CDS 33355152 33355286 . - 0 Parent=gene1356 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1356 chr20 ENCODE CDS 33357883 33357996 . - 0 Parent=gene1356 chr20 ENCODE exon 33398381 33398489 . - . Parent=gene1356 chr20 ENCODE CDS 33398381 33398489 . - 1 Parent=gene1356 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1356 chr20 ENCODE CDS 33417774 33417831 . - 2 Parent=gene1356 chr20 ENCODE exon 33425401 33425473 . - . Parent=gene1356 chr20 ENCODE CDS 33425401 33425473 . - 0 Parent=gene1356 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1356 chr20 ENCODE CDS 33433135 33433242 . - 0 Parent=gene1356 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1356 chr20 ENCODE CDS 33435255 33435350 . - 0 Parent=gene1356 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1356 chr20 ENCODE CDS 33445309 33445413 . - 0 Parent=gene1356 chr20 ENCODE CDS 33463157 33463180 . - 0 Parent=gene1356 chr20 ENCODE exon 33463157 33463190 . - . Parent=gene1356 ### chr20 ENCODE gene 33353783 33463190 . - . ID=gene1357;Name=RP4-614O4.7-011;name2=C20orf44 chr20 ENCODE exon 33353783 33355286 . - . Parent=gene1357 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1357 chr20 ENCODE exon 33365905 33365982 . - . Parent=gene1357 chr20 ENCODE exon 33398381 33398489 . - . Parent=gene1357 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1357 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1357 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1357 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1357 chr20 ENCODE exon 33460562 33460684 . - . Parent=gene1357 chr20 ENCODE exon 33463157 33463190 . - . Parent=gene1357 ### chr20 ENCODE gene 33353783 33463248 . - . ID=gene1358;Name=RP4-614O4.7-018;name2=C20orf44 chr20 ENCODE exon 33353783 33355286 . - . Parent=gene1358 chr20 ENCODE CDS 33355152 33355286 . - 0 Parent=gene1358 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1358 chr20 ENCODE CDS 33357883 33357996 . - 0 Parent=gene1358 chr20 ENCODE exon 33365905 33365982 . - . Parent=gene1358 chr20 ENCODE CDS 33365905 33365982 . - 0 Parent=gene1358 chr20 ENCODE exon 33398381 33398489 . - . Parent=gene1358 chr20 ENCODE CDS 33398381 33398489 . - 1 Parent=gene1358 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1358 chr20 ENCODE CDS 33417774 33417831 . - 2 Parent=gene1358 chr20 ENCODE exon 33425401 33425473 . - . Parent=gene1358 chr20 ENCODE CDS 33425401 33425473 . - 0 Parent=gene1358 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1358 chr20 ENCODE CDS 33445309 33445413 . - 0 Parent=gene1358 chr20 ENCODE CDS 33463157 33463180 . - 0 Parent=gene1358 chr20 ENCODE exon 33463157 33463248 . - . Parent=gene1358 ### chr20 ENCODE gene 33353783 33463358 . - . ID=gene1359;Name=RP4-614O4.7-010;name2=C20orf44 chr20 ENCODE exon 33353783 33355286 . - . Parent=gene1359 chr20 ENCODE CDS 33355152 33355286 . - 0 Parent=gene1359 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1359 chr20 ENCODE CDS 33357883 33357996 . - 0 Parent=gene1359 chr20 ENCODE exon 33365905 33365982 . - . Parent=gene1359 chr20 ENCODE CDS 33365905 33365982 . - 0 Parent=gene1359 chr20 ENCODE exon 33398381 33398489 . - . Parent=gene1359 chr20 ENCODE CDS 33398381 33398489 . - 1 Parent=gene1359 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1359 chr20 ENCODE CDS 33417774 33417831 . - 2 Parent=gene1359 chr20 ENCODE exon 33425401 33425473 . - . Parent=gene1359 chr20 ENCODE CDS 33425401 33425473 . - 0 Parent=gene1359 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1359 chr20 ENCODE CDS 33433135 33433242 . - 0 Parent=gene1359 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1359 chr20 ENCODE CDS 33435255 33435350 . - 0 Parent=gene1359 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1359 chr20 ENCODE CDS 33445309 33445413 . - 0 Parent=gene1359 chr20 ENCODE CDS 33463157 33463180 . - 0 Parent=gene1359 chr20 ENCODE exon 33463157 33463358 . - . Parent=gene1359 ### chr20 ENCODE gene 33354650 33463177 . - . ID=gene1360;Name=RP4-614O4.7-009;name2=C20orf44 chr20 ENCODE exon 33354650 33355286 . - . Parent=gene1360 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1360 chr20 ENCODE exon 33365905 33365924 . - . Parent=gene1360 chr20 ENCODE exon 33433201 33433242 . - . Parent=gene1360 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1360 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1360 chr20 ENCODE exon 33463157 33463177 . - . Parent=gene1360 ### chr20 ENCODE gene 33354671 33358272 . - . ID=gene1361;name2=C20orf44;Name=RP4-614O4.7-015 chr20 ENCODE exon 33354671 33355286 . - . Parent=gene1361 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1361 chr20 ENCODE exon 33358202 33358272 . - . Parent=gene1361 ### chr20 ENCODE gene 33355011 33355873 . - . ID=gene1362;Name=RP4-614O4.7-019;name2=C20orf44 chr20 ENCODE exon 33355011 33355286 . - . Parent=gene1362 chr20 ENCODE exon 33355844 33355873 . - . Parent=gene1362 ### chr20 ENCODE gene 33355188 33366653 . - . ID=gene1363;name2=C20orf44;Name=RP4-614O4.7-020 chr20 ENCODE exon 33355188 33355286 . - . Parent=gene1363 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1363 chr20 ENCODE exon 33365905 33365983 . - . Parent=gene1363 chr20 ENCODE exon 33366394 33366653 . - . Parent=gene1363 ### chr20 ENCODE gene 33355208 33463190 . - . ID=gene1364;Name=RP4-614O4.7-003;name2=C20orf44 chr20 ENCODE exon 33355208 33355286 . - . Parent=gene1364 chr20 ENCODE CDS 33355208 33355286 . - 0 Parent=gene1364 chr20 ENCODE exon 33357883 33357996 . - . Parent=gene1364 chr20 ENCODE CDS 33357883 33357996 . - 0 Parent=gene1364 chr20 ENCODE exon 33365905 33365982 . - . Parent=gene1364 chr20 ENCODE CDS 33365905 33365982 . - 0 Parent=gene1364 chr20 ENCODE exon 33398381 33398489 . - . Parent=gene1364 chr20 ENCODE CDS 33398381 33398489 . - 1 Parent=gene1364 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1364 chr20 ENCODE CDS 33417774 33417831 . - 2 Parent=gene1364 chr20 ENCODE exon 33425401 33425473 . - . Parent=gene1364 chr20 ENCODE CDS 33425401 33425473 . - 0 Parent=gene1364 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1364 chr20 ENCODE CDS 33433135 33433242 . - 0 Parent=gene1364 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1364 chr20 ENCODE CDS 33445309 33445413 . - 0 Parent=gene1364 chr20 ENCODE CDS 33463157 33463180 . - 0 Parent=gene1364 chr20 ENCODE exon 33463157 33463190 . - . Parent=gene1364 ### chr20 ENCODE gene 33357667 33398443 . - . ID=gene1365;Name=RP4-614O4.7-008;name2=C20orf44 chr20 ENCODE exon 33357667 33357996 . - . Parent=gene1365 chr20 ENCODE exon 33365905 33365982 . - . Parent=gene1365 chr20 ENCODE exon 33398381 33398443 . - . Parent=gene1365 ### chr20 ENCODE gene 33357890 33463187 . - . ID=gene1366;Name=RP4-614O4.7-004;name2=C20orf44 chr20 ENCODE exon 33357890 33357996 . - . Parent=gene1366 chr20 ENCODE exon 33365905 33365982 . - . Parent=gene1366 chr20 ENCODE exon 33398381 33398489 . - . Parent=gene1366 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1366 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1366 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1366 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1366 chr20 ENCODE exon 33463157 33463187 . - . Parent=gene1366 ### chr20 ENCODE gene 33357960 33463186 . - . ID=gene1367;Name=RP4-614O4.7-007;name2=C20orf44 chr20 ENCODE exon 33357960 33357996 . - . Parent=gene1367 chr20 ENCODE CDS 33357960 33357996 . - 0 Parent=gene1367 chr20 ENCODE exon 33365905 33365982 . - . Parent=gene1367 chr20 ENCODE CDS 33365905 33365982 . - 0 Parent=gene1367 chr20 ENCODE exon 33398381 33398489 . - . Parent=gene1367 chr20 ENCODE CDS 33398381 33398489 . - 1 Parent=gene1367 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1367 chr20 ENCODE CDS 33417774 33417831 . - 2 Parent=gene1367 chr20 ENCODE exon 33425401 33425473 . - . Parent=gene1367 chr20 ENCODE CDS 33425401 33425473 . - 0 Parent=gene1367 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1367 chr20 ENCODE CDS 33433135 33433242 . - 0 Parent=gene1367 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1367 chr20 ENCODE CDS 33435255 33435350 . - 0 Parent=gene1367 chr20 ENCODE exon 33443453 33443494 . - . Parent=gene1367 chr20 ENCODE CDS 33443453 33443494 . - 0 Parent=gene1367 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1367 chr20 ENCODE CDS 33445309 33445413 . - 0 Parent=gene1367 chr20 ENCODE CDS 33463157 33463180 . - 0 Parent=gene1367 chr20 ENCODE exon 33463157 33463186 . - . Parent=gene1367 ### chr20 ENCODE gene 33395327 33463191 . - . ID=gene1368;Name=RP4-614O4.7-005;name2=C20orf44 chr20 ENCODE exon 33395327 33398489 . - . Parent=gene1368 chr20 ENCODE CDS 33398288 33398489 . - 1 Parent=gene1368 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1368 chr20 ENCODE CDS 33417774 33417831 . - 2 Parent=gene1368 chr20 ENCODE exon 33425401 33425473 . - . Parent=gene1368 chr20 ENCODE CDS 33425401 33425473 . - 0 Parent=gene1368 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1368 chr20 ENCODE CDS 33433135 33433242 . - 0 Parent=gene1368 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1368 chr20 ENCODE CDS 33435255 33435350 . - 0 Parent=gene1368 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1368 chr20 ENCODE CDS 33445309 33445413 . - 0 Parent=gene1368 chr20 ENCODE CDS 33463157 33463180 . - 0 Parent=gene1368 chr20 ENCODE exon 33463157 33463191 . - . Parent=gene1368 ### chr20 ENCODE gene 33396933 33398406 . - . ID=gene1369;Name=RP4-614O4.7-016;name2=C20orf44 chr20 ENCODE exon 33396933 33397640 . - . Parent=gene1369 chr20 ENCODE exon 33397918 33397964 . - . Parent=gene1369 chr20 ENCODE exon 33398381 33398406 . - . Parent=gene1369 ### chr20 ENCODE gene 33397237 33463193 . - . ID=gene1370;Name=RP4-614O4.7-001;name2=C20orf44 chr20 ENCODE exon 33397237 33397640 . - . Parent=gene1370 chr20 ENCODE exon 33398381 33398489 . - . Parent=gene1370 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1370 chr20 ENCODE exon 33425401 33425473 . - . Parent=gene1370 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1370 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1370 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1370 chr20 ENCODE exon 33463157 33463193 . - . Parent=gene1370 ### chr20 ENCODE gene 33398484 33463190 . - . ID=gene1371;Name=RP4-614O4.7-021;name2=C20orf44 chr20 ENCODE exon 33398484 33398489 . - . Parent=gene1371 chr20 ENCODE exon 33417774 33417831 . - . Parent=gene1371 chr20 ENCODE exon 33425401 33425473 . - . Parent=gene1371 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1371 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1371 chr20 ENCODE exon 33435776 33435861 . - . Parent=gene1371 chr20 ENCODE CDS 33435841 33435861 . - 0 Parent=gene1371 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1371 chr20 ENCODE CDS 33445309 33445413 . - 0 Parent=gene1371 chr20 ENCODE CDS 33463157 33463180 . - 0 Parent=gene1371 chr20 ENCODE exon 33463157 33463190 . - . Parent=gene1371 ### chr20 ENCODE gene 33433135 33461372 . - . ID=gene1372;Name=RP4-614O4.7-013;name2=C20orf44 chr20 ENCODE exon 33433135 33433242 . - . Parent=gene1372 chr20 ENCODE exon 33435255 33435350 . - . Parent=gene1372 chr20 ENCODE exon 33445309 33445413 . - . Parent=gene1372 chr20 ENCODE exon 33461272 33461372 . - . Parent=gene1372 ### chr20 ENCODE gene 33484241 33486662 . + . ID=gene1373;Name=RP3-477O4.13-001;name2=RP3-477O4.13 chr20 ENCODE exon 33484241 33484375 . + . Parent=gene1373 chr20 ENCODE exon 33485064 33486662 . + . Parent=gene1373 chr20 ENCODE CDS 33485371 33486123 . + 0 Parent=gene1373 ### chr20 ENCODE gene 33484559 33489437 . - . ID=gene1374;Name=RP3-477O4.6-002;name2=GDF5 chr20 ENCODE exon 33484559 33485995 . - . Parent=gene1374 chr20 ENCODE CDS 33485121 33485995 . - 2 Parent=gene1374 chr20 ENCODE CDS 33488492 33489122 . - 0 Parent=gene1374 chr20 ENCODE exon 33488492 33489437 . - . Parent=gene1374 ### chr20 ENCODE gene 33484559 33505982 . - . ID=gene1375;Name=RP3-477O4.6-001;name2=GDF5 chr20 ENCODE exon 33484559 33485995 . - . Parent=gene1375 chr20 ENCODE CDS 33485121 33485995 . - 2 Parent=gene1375 chr20 ENCODE CDS 33488492 33489122 . - 0 Parent=gene1375 chr20 ENCODE exon 33488492 33489363 . - . Parent=gene1375 chr20 ENCODE exon 33492453 33492608 . - . Parent=gene1375 chr20 ENCODE exon 33505876 33505982 . - . Parent=gene1375 ### chr20 ENCODE gene 33506399 33517443 . + . ID=gene1376;Name=RP3-477O4.2-002;name2=CEP250 chr20 ENCODE exon 33506399 33506477 . + . Parent=gene1376 chr20 ENCODE exon 33509539 33509613 . + . Parent=gene1376 chr20 ENCODE exon 33511221 33511339 . + . Parent=gene1376 chr20 ENCODE exon 33513504 33513792 . + . Parent=gene1376 chr20 ENCODE CDS 33513607 33513792 . + 0 Parent=gene1376 chr20 ENCODE exon 33514814 33514870 . + . Parent=gene1376 chr20 ENCODE CDS 33514814 33514870 . + 0 Parent=gene1376 chr20 ENCODE exon 33516982 33517064 . + . Parent=gene1376 chr20 ENCODE CDS 33516982 33517064 . + 0 Parent=gene1376 chr20 ENCODE exon 33517278 33517443 . + . Parent=gene1376 chr20 ENCODE CDS 33517278 33517443 . + 1 Parent=gene1376 ### chr20 ENCODE gene 33506410 33517293 . + . ID=gene1377;Name=RP3-477O4.2-003;name2=CEP250 chr20 ENCODE exon 33506410 33506472 . + . Parent=gene1377 chr20 ENCODE exon 33509539 33509609 . + . Parent=gene1377 chr20 ENCODE exon 33511217 33511339 . + . Parent=gene1377 chr20 ENCODE exon 33513504 33513792 . + . Parent=gene1377 chr20 ENCODE CDS 33513607 33513792 . + 0 Parent=gene1377 chr20 ENCODE exon 33514814 33514870 . + . Parent=gene1377 chr20 ENCODE CDS 33514814 33514870 . + 0 Parent=gene1377 chr20 ENCODE exon 33516982 33517064 . + . Parent=gene1377 chr20 ENCODE CDS 33516982 33517064 . + 0 Parent=gene1377 chr20 ENCODE exon 33517278 33517293 . + . Parent=gene1377 chr20 ENCODE CDS 33517278 33517293 . + 1 Parent=gene1377 ### chr20 ENCODE gene 33506436 33513543 . + . ID=gene1378;Name=RP3-477O4.2-007;name2=CEP250 chr20 ENCODE exon 33506436 33506751 . + . Parent=gene1378 chr20 ENCODE exon 33509539 33509609 . + . Parent=gene1378 chr20 ENCODE exon 33511217 33511339 . + . Parent=gene1378 chr20 ENCODE exon 33513504 33513543 . + . Parent=gene1378 ### chr20 ENCODE gene 33506564 33563218 . + . ID=gene1379;Name=RP3-477O4.2-001;name2=CEP250 chr20 ENCODE exon 33506564 33506986 . + . Parent=gene1379 chr20 ENCODE exon 33509539 33509609 . + . Parent=gene1379 chr20 ENCODE exon 33511217 33511339 . + . Parent=gene1379 chr20 ENCODE exon 33513504 33513792 . + . Parent=gene1379 chr20 ENCODE exon 33514814 33514870 . + . Parent=gene1379 chr20 ENCODE exon 33516982 33517064 . + . Parent=gene1379 chr20 ENCODE exon 33517278 33517443 . + . Parent=gene1379 chr20 ENCODE exon 33518205 33518311 . + . Parent=gene1379 chr20 ENCODE exon 33518543 33518794 . + . Parent=gene1379 chr20 ENCODE exon 33521129 33521225 . + . Parent=gene1379 chr20 ENCODE exon 33523289 33523390 . + . Parent=gene1379 chr20 ENCODE exon 33523912 33524070 . + . Parent=gene1379 chr20 ENCODE exon 33524613 33524791 . + . Parent=gene1379 chr20 ENCODE exon 33525109 33525291 . + . Parent=gene1379 chr20 ENCODE exon 33526741 33526885 . + . Parent=gene1379 chr20 ENCODE CDS 33526748 33526885 . + 0 Parent=gene1379 chr20 ENCODE exon 33527688 33527834 . + . Parent=gene1379 chr20 ENCODE CDS 33527688 33527834 . + 0 Parent=gene1379 chr20 ENCODE exon 33529110 33529340 . + . Parent=gene1379 chr20 ENCODE CDS 33529110 33529340 . + 0 Parent=gene1379 chr20 ENCODE exon 33530470 33530663 . + . Parent=gene1379 chr20 ENCODE CDS 33530470 33530663 . + 0 Parent=gene1379 chr20 ENCODE exon 33530885 33531012 . + . Parent=gene1379 chr20 ENCODE CDS 33530885 33531012 . + 1 Parent=gene1379 chr20 ENCODE exon 33531215 33531384 . + . Parent=gene1379 chr20 ENCODE CDS 33531215 33531384 . + 2 Parent=gene1379 chr20 ENCODE exon 33541877 33542044 . + . Parent=gene1379 chr20 ENCODE CDS 33541877 33542044 . + 0 Parent=gene1379 chr20 ENCODE exon 33542452 33542586 . + . Parent=gene1379 chr20 ENCODE CDS 33542452 33542586 . + 0 Parent=gene1379 chr20 ENCODE exon 33544670 33544813 . + . Parent=gene1379 chr20 ENCODE CDS 33544670 33544813 . + 0 Parent=gene1379 chr20 ENCODE exon 33545765 33545898 . + . Parent=gene1379 chr20 ENCODE CDS 33545765 33545898 . + 0 Parent=gene1379 chr20 ENCODE exon 33547820 33547958 . + . Parent=gene1379 chr20 ENCODE CDS 33547820 33547958 . + 1 Parent=gene1379 chr20 ENCODE exon 33548962 33549310 . + . Parent=gene1379 chr20 ENCODE CDS 33548962 33549310 . + 0 Parent=gene1379 chr20 ENCODE exon 33549838 33549959 . + . Parent=gene1379 chr20 ENCODE CDS 33549838 33549959 . + 2 Parent=gene1379 chr20 ENCODE exon 33551292 33551412 . + . Parent=gene1379 chr20 ENCODE CDS 33551292 33551412 . + 0 Parent=gene1379 chr20 ENCODE exon 33553086 33553207 . + . Parent=gene1379 chr20 ENCODE CDS 33553086 33553207 . + 2 Parent=gene1379 chr20 ENCODE exon 33553632 33556247 . + . Parent=gene1379 chr20 ENCODE CDS 33553632 33556247 . + 0 Parent=gene1379 chr20 ENCODE exon 33558981 33559094 . + . Parent=gene1379 chr20 ENCODE CDS 33558981 33559094 . + 0 Parent=gene1379 chr20 ENCODE exon 33559278 33559433 . + . Parent=gene1379 chr20 ENCODE CDS 33559278 33559433 . + 0 Parent=gene1379 chr20 ENCODE exon 33560186 33560287 . + . Parent=gene1379 chr20 ENCODE CDS 33560186 33560287 . + 0 Parent=gene1379 chr20 ENCODE exon 33561241 33561297 . + . Parent=gene1379 chr20 ENCODE CDS 33561241 33561297 . + 0 Parent=gene1379 chr20 ENCODE CDS 33562606 33562869 . + 0 Parent=gene1379 chr20 ENCODE exon 33562606 33563218 . + . Parent=gene1379 ### chr20 ENCODE gene 33506959 33521371 . + . ID=gene1380;Name=RP3-477O4.2-006;name2=CEP250 chr20 ENCODE exon 33506959 33506986 . + . Parent=gene1380 chr20 ENCODE exon 33509539 33509609 . + . Parent=gene1380 chr20 ENCODE exon 33511217 33511339 . + . Parent=gene1380 chr20 ENCODE exon 33513504 33513792 . + . Parent=gene1380 chr20 ENCODE exon 33514814 33514870 . + . Parent=gene1380 chr20 ENCODE exon 33516982 33517064 . + . Parent=gene1380 chr20 ENCODE exon 33517278 33517387 . + . Parent=gene1380 chr20 ENCODE exon 33518291 33518311 . + . Parent=gene1380 chr20 ENCODE exon 33518543 33518794 . + . Parent=gene1380 chr20 ENCODE exon 33521129 33521371 . + . Parent=gene1380 ### chr20 ENCODE gene 33517003 33518555 . + . ID=gene1381;Name=RP3-477O4.2-008;name2=CEP250 chr20 ENCODE exon 33517003 33517064 . + . Parent=gene1381 chr20 ENCODE exon 33517278 33517443 . + . Parent=gene1381 chr20 ENCODE exon 33518205 33518311 . + . Parent=gene1381 chr20 ENCODE exon 33518511 33518555 . + . Parent=gene1381 ### chr20 ENCODE gene 33521085 33524024 . + . ID=gene1382;Name=RP3-477O4.2-009;name2=CEP250 chr20 ENCODE exon 33521085 33521225 . + . Parent=gene1382 chr20 ENCODE exon 33523289 33523390 . + . Parent=gene1382 chr20 ENCODE exon 33523912 33524024 . + . Parent=gene1382 ### chr20 ENCODE gene 33525240 33529335 . + . ID=gene1383;Name=RP3-477O4.2-010;name2=CEP250 chr20 ENCODE exon 33525240 33525291 . + . Parent=gene1383 chr20 ENCODE CDS 33525240 33525291 . + 0 Parent=gene1383 chr20 ENCODE exon 33526033 33526091 . + . Parent=gene1383 chr20 ENCODE CDS 33526033 33526091 . + 2 Parent=gene1383 chr20 ENCODE exon 33526741 33526885 . + . Parent=gene1383 chr20 ENCODE CDS 33526741 33526885 . + 0 Parent=gene1383 chr20 ENCODE exon 33527688 33527834 . + . Parent=gene1383 chr20 ENCODE CDS 33527688 33527834 . + 2 Parent=gene1383 chr20 ENCODE exon 33529110 33529335 . + . Parent=gene1383 chr20 ENCODE CDS 33529110 33529335 . + 2 Parent=gene1383 ### chr20 ENCODE gene 33545619 33547880 . + . ID=gene1384;Name=RP3-477O4.2-005;name2=CEP250 chr20 ENCODE exon 33545619 33545898 . + . Parent=gene1384 chr20 ENCODE exon 33547820 33547880 . + . Parent=gene1384 ### chr20 ENCODE gene 33549052 33554046 . + . ID=gene1385;Name=RP3-477O4.2-004;name2=CEP250 chr20 ENCODE exon 33549052 33549310 . + . Parent=gene1385 chr20 ENCODE exon 33549838 33549959 . + . Parent=gene1385 chr20 ENCODE exon 33553086 33553207 . + . Parent=gene1385 chr20 ENCODE exon 33553632 33554046 . + . Parent=gene1385 ### chr20 ENCODE gene 33578213 33580862 . - . ID=gene1386;Name=RP3-477O4.9-001;name2=C20orf173 chr20 ENCODE exon 33578213 33578492 . - . Parent=gene1386 chr20 ENCODE exon 33579476 33579527 . - . Parent=gene1386 chr20 ENCODE CDS 33579501 33579527 . - 0 Parent=gene1386 chr20 ENCODE exon 33579694 33579787 . - . Parent=gene1386 chr20 ENCODE CDS 33579694 33579787 . - 1 Parent=gene1386 chr20 ENCODE CDS 33579944 33580272 . - 0 Parent=gene1386 chr20 ENCODE exon 33579944 33580490 . - . Parent=gene1386 chr20 ENCODE exon 33580802 33580862 . - . Parent=gene1386 ### chr20 ENCODE gene 33579971 33580891 . - . ID=gene1387;Name=RP3-477O4.9-003;name2=C20orf173 chr20 ENCODE exon 33579971 33580122 . - . Parent=gene1387 chr20 ENCODE CDS 33579971 33580122 . - 0 Parent=gene1387 chr20 ENCODE CDS 33580308 33580616 . - 0 Parent=gene1387 chr20 ENCODE exon 33580308 33580667 . - . Parent=gene1387 chr20 ENCODE exon 33580802 33580891 . - . Parent=gene1387 ### chr20 ENCODE gene 33579988 33580866 . - . ID=gene1388;Name=RP3-477O4.9-002;name2=C20orf173 chr20 ENCODE exon 33579988 33580122 . - . Parent=gene1388 chr20 ENCODE CDS 33579988 33580122 . - 0 Parent=gene1388 chr20 ENCODE CDS 33580308 33580367 . - 0 Parent=gene1388 chr20 ENCODE exon 33580308 33580490 . - . Parent=gene1388 chr20 ENCODE exon 33580802 33580866 . - . Parent=gene1388 ### chr20 ENCODE gene 33593184 33608819 . + . ID=gene1389;Name=RP3-477O4.12-001;name2=ERGIC3 chr20 ENCODE exon 33593184 33593348 . + . Parent=gene1389 chr20 ENCODE CDS 33593261 33593348 . + 0 Parent=gene1389 chr20 ENCODE exon 33593486 33593556 . + . Parent=gene1389 chr20 ENCODE CDS 33593486 33593556 . + 2 Parent=gene1389 chr20 ENCODE exon 33593676 33593763 . + . Parent=gene1389 chr20 ENCODE CDS 33593676 33593763 . + 0 Parent=gene1389 chr20 ENCODE exon 33593985 33594104 . + . Parent=gene1389 chr20 ENCODE CDS 33593985 33594104 . + 2 Parent=gene1389 chr20 ENCODE exon 33598577 33598670 . + . Parent=gene1389 chr20 ENCODE CDS 33598577 33598670 . + 2 Parent=gene1389 chr20 ENCODE exon 33599676 33599841 . + . Parent=gene1389 chr20 ENCODE CDS 33599676 33599841 . + 1 Parent=gene1389 chr20 ENCODE exon 33599975 33600032 . + . Parent=gene1389 chr20 ENCODE CDS 33599975 33600032 . + 0 Parent=gene1389 chr20 ENCODE exon 33606229 33606260 . + . Parent=gene1389 chr20 ENCODE CDS 33606229 33606260 . + 2 Parent=gene1389 chr20 ENCODE exon 33607218 33607314 . + . Parent=gene1389 chr20 ENCODE CDS 33607218 33607314 . + 0 Parent=gene1389 chr20 ENCODE exon 33607392 33607456 . + . Parent=gene1389 chr20 ENCODE CDS 33607392 33607456 . + 2 Parent=gene1389 chr20 ENCODE exon 33608158 33608294 . + . Parent=gene1389 chr20 ENCODE CDS 33608158 33608294 . + 0 Parent=gene1389 chr20 ENCODE exon 33608379 33608434 . + . Parent=gene1389 chr20 ENCODE CDS 33608379 33608434 . + 1 Parent=gene1389 chr20 ENCODE CDS 33608610 33608689 . + 2 Parent=gene1389 chr20 ENCODE exon 33608610 33608819 . + . Parent=gene1389 ### chr20 ENCODE gene 33593201 33608819 . + . ID=gene1390;Name=RP3-477O4.12-003;name2=ERGIC3 chr20 ENCODE exon 33593201 33593348 . + . Parent=gene1390 chr20 ENCODE CDS 33593261 33593348 . + 0 Parent=gene1390 chr20 ENCODE exon 33593486 33593556 . + . Parent=gene1390 chr20 ENCODE CDS 33593486 33593556 . + 2 Parent=gene1390 chr20 ENCODE exon 33593676 33593763 . + . Parent=gene1390 chr20 ENCODE CDS 33593676 33593763 . + 0 Parent=gene1390 chr20 ENCODE exon 33593985 33594104 . + . Parent=gene1390 chr20 ENCODE CDS 33593985 33594104 . + 2 Parent=gene1390 chr20 ENCODE exon 33598577 33598670 . + . Parent=gene1390 chr20 ENCODE CDS 33598577 33598670 . + 2 Parent=gene1390 chr20 ENCODE exon 33599676 33599841 . + . Parent=gene1390 chr20 ENCODE CDS 33599676 33599841 . + 1 Parent=gene1390 chr20 ENCODE exon 33599975 33600032 . + . Parent=gene1390 chr20 ENCODE CDS 33599975 33600032 . + 0 Parent=gene1390 chr20 ENCODE exon 33605557 33605571 . + . Parent=gene1390 chr20 ENCODE CDS 33605557 33605571 . + 2 Parent=gene1390 chr20 ENCODE exon 33606229 33606260 . + . Parent=gene1390 chr20 ENCODE CDS 33606229 33606260 . + 2 Parent=gene1390 chr20 ENCODE exon 33607218 33607314 . + . Parent=gene1390 chr20 ENCODE CDS 33607218 33607314 . + 0 Parent=gene1390 chr20 ENCODE exon 33607392 33607456 . + . Parent=gene1390 chr20 ENCODE CDS 33607392 33607456 . + 2 Parent=gene1390 chr20 ENCODE exon 33608158 33608294 . + . Parent=gene1390 chr20 ENCODE CDS 33608158 33608294 . + 0 Parent=gene1390 chr20 ENCODE exon 33608379 33608434 . + . Parent=gene1390 chr20 ENCODE CDS 33608379 33608434 . + 1 Parent=gene1390 chr20 ENCODE CDS 33608610 33608689 . + 2 Parent=gene1390 chr20 ENCODE exon 33608610 33608819 . + . Parent=gene1390 ### chr20 ENCODE gene 33593232 33600951 . + . ID=gene1391;Name=RP3-477O4.12-004;name2=ERGIC3 chr20 ENCODE exon 33593232 33593348 . + . Parent=gene1391 chr20 ENCODE exon 33593486 33593556 . + . Parent=gene1391 chr20 ENCODE exon 33593676 33593763 . + . Parent=gene1391 chr20 ENCODE exon 33593985 33594104 . + . Parent=gene1391 chr20 ENCODE exon 33598577 33598670 . + . Parent=gene1391 chr20 ENCODE exon 33599676 33599841 . + . Parent=gene1391 chr20 ENCODE exon 33599975 33600951 . + . Parent=gene1391 ### chr20 ENCODE gene 33593242 33594302 . + . ID=gene1392;Name=RP3-477O4.12-018;name2=ERGIC3 chr20 ENCODE exon 33593242 33593348 . + . Parent=gene1392 chr20 ENCODE exon 33593486 33593556 . + . Parent=gene1392 chr20 ENCODE exon 33593676 33593763 . + . Parent=gene1392 chr20 ENCODE exon 33593985 33594302 . + . Parent=gene1392 ### chr20 ENCODE gene 33593242 33598636 . + . ID=gene1393;Name=RP3-477O4.12-010;name2=ERGIC3 chr20 ENCODE exon 33593242 33593348 . + . Parent=gene1393 chr20 ENCODE exon 33593486 33593556 . + . Parent=gene1393 chr20 ENCODE exon 33593676 33593763 . + . Parent=gene1393 chr20 ENCODE exon 33593985 33594104 . + . Parent=gene1393 chr20 ENCODE exon 33594824 33594967 . + . Parent=gene1393 chr20 ENCODE exon 33598577 33598636 . + . Parent=gene1393 ### chr20 ENCODE gene 33593245 33596569 . + . ID=gene1394;name2=ERGIC3;Name=RP3-477O4.12-005 chr20 ENCODE exon 33593245 33593348 . + . Parent=gene1394 chr20 ENCODE exon 33593486 33593556 . + . Parent=gene1394 chr20 ENCODE exon 33593676 33593763 . + . Parent=gene1394 chr20 ENCODE exon 33593985 33596569 . + . Parent=gene1394 ### chr20 ENCODE gene 33593265 33608731 . + . ID=gene1395;Name=RP3-477O4.12-006;name2=ERGIC3 chr20 ENCODE exon 33593265 33593348 . + . Parent=gene1395 chr20 ENCODE CDS 33593265 33593348 . + 0 Parent=gene1395 chr20 ENCODE exon 33593486 33593556 . + . Parent=gene1395 chr20 ENCODE CDS 33593486 33593556 . + 0 Parent=gene1395 chr20 ENCODE exon 33593676 33593763 . + . Parent=gene1395 chr20 ENCODE CDS 33593676 33593763 . + 1 Parent=gene1395 chr20 ENCODE exon 33593985 33594104 . + . Parent=gene1395 chr20 ENCODE CDS 33593985 33594104 . + 0 Parent=gene1395 chr20 ENCODE exon 33598577 33598670 . + . Parent=gene1395 chr20 ENCODE CDS 33598577 33598670 . + 0 Parent=gene1395 chr20 ENCODE exon 33599676 33599841 . + . Parent=gene1395 chr20 ENCODE CDS 33599676 33599841 . + 2 Parent=gene1395 chr20 ENCODE exon 33599975 33600032 . + . Parent=gene1395 chr20 ENCODE CDS 33599975 33600032 . + 1 Parent=gene1395 chr20 ENCODE exon 33600331 33600375 . + . Parent=gene1395 chr20 ENCODE CDS 33600331 33600375 . + 0 Parent=gene1395 chr20 ENCODE exon 33606229 33606260 . + . Parent=gene1395 chr20 ENCODE CDS 33606229 33606260 . + 0 Parent=gene1395 chr20 ENCODE exon 33607218 33607314 . + . Parent=gene1395 chr20 ENCODE CDS 33607218 33607314 . + 1 Parent=gene1395 chr20 ENCODE exon 33607392 33607456 . + . Parent=gene1395 chr20 ENCODE CDS 33607392 33607456 . + 0 Parent=gene1395 chr20 ENCODE exon 33608158 33608294 . + . Parent=gene1395 chr20 ENCODE CDS 33608158 33608294 . + 1 Parent=gene1395 chr20 ENCODE exon 33608379 33608434 . + . Parent=gene1395 chr20 ENCODE CDS 33608379 33608434 . + 2 Parent=gene1395 chr20 ENCODE CDS 33608610 33608689 . + 0 Parent=gene1395 chr20 ENCODE exon 33608610 33608731 . + . Parent=gene1395 ### chr20 ENCODE gene 33593272 33608819 . + . ID=gene1396;Name=RP3-477O4.12-002;name2=ERGIC3 chr20 ENCODE exon 33593272 33593348 . + . Parent=gene1396 chr20 ENCODE exon 33593486 33593510 . + . Parent=gene1396 chr20 ENCODE exon 33598640 33598670 . + . Parent=gene1396 chr20 ENCODE exon 33599676 33599841 . + . Parent=gene1396 chr20 ENCODE exon 33599975 33600032 . + . Parent=gene1396 chr20 ENCODE exon 33606229 33606260 . + . Parent=gene1396 chr20 ENCODE exon 33607218 33607314 . + . Parent=gene1396 chr20 ENCODE exon 33607392 33607456 . + . Parent=gene1396 chr20 ENCODE exon 33608158 33608244 . + . Parent=gene1396 chr20 ENCODE exon 33608629 33608819 . + . Parent=gene1396 ### chr20 ENCODE gene 33593279 33595072 . + . ID=gene1397;Name=RP3-477O4.12-011;name2=ERGIC3 chr20 ENCODE exon 33593279 33593348 . + . Parent=gene1397 chr20 ENCODE CDS 33593279 33593348 . + 0 Parent=gene1397 chr20 ENCODE exon 33593486 33593556 . + . Parent=gene1397 chr20 ENCODE CDS 33593486 33593556 . + 2 Parent=gene1397 chr20 ENCODE exon 33593676 33593763 . + . Parent=gene1397 chr20 ENCODE CDS 33593676 33593763 . + 0 Parent=gene1397 chr20 ENCODE exon 33593985 33594104 . + . Parent=gene1397 chr20 ENCODE CDS 33593985 33594104 . + 2 Parent=gene1397 chr20 ENCODE CDS 33594821 33594828 . + 2 Parent=gene1397 chr20 ENCODE exon 33594821 33595072 . + . Parent=gene1397 ### chr20 ENCODE gene 33593293 33608251 . + . ID=gene1398;Name=RP3-477O4.12-017;name2=ERGIC3 chr20 ENCODE exon 33593293 33593348 . + . Parent=gene1398 chr20 ENCODE CDS 33593293 33593348 . + 0 Parent=gene1398 chr20 ENCODE exon 33593486 33593556 . + . Parent=gene1398 chr20 ENCODE CDS 33593486 33593556 . + 1 Parent=gene1398 chr20 ENCODE exon 33593676 33593763 . + . Parent=gene1398 chr20 ENCODE CDS 33593676 33593763 . + 2 Parent=gene1398 chr20 ENCODE exon 33593949 33594104 . + . Parent=gene1398 chr20 ENCODE CDS 33593949 33594104 . + 1 Parent=gene1398 chr20 ENCODE exon 33598577 33598670 . + . Parent=gene1398 chr20 ENCODE CDS 33598577 33598670 . + 1 Parent=gene1398 chr20 ENCODE exon 33599676 33599841 . + . Parent=gene1398 chr20 ENCODE CDS 33599676 33599841 . + 0 Parent=gene1398 chr20 ENCODE exon 33599975 33600032 . + . Parent=gene1398 chr20 ENCODE CDS 33599975 33600032 . + 2 Parent=gene1398 chr20 ENCODE exon 33606229 33606260 . + . Parent=gene1398 chr20 ENCODE CDS 33606229 33606260 . + 1 Parent=gene1398 chr20 ENCODE exon 33607218 33607314 . + . Parent=gene1398 chr20 ENCODE CDS 33607218 33607314 . + 2 Parent=gene1398 chr20 ENCODE exon 33607392 33607456 . + . Parent=gene1398 chr20 ENCODE CDS 33607392 33607456 . + 1 Parent=gene1398 chr20 ENCODE exon 33608158 33608251 . + . Parent=gene1398 chr20 ENCODE CDS 33608158 33608251 . + 2 Parent=gene1398 ### chr20 ENCODE gene 33593355 33600032 . + . ID=gene1399;Name=RP3-477O4.12-012;name2=ERGIC3 chr20 ENCODE exon 33593355 33593556 . + . Parent=gene1399 chr20 ENCODE exon 33593676 33593763 . + . Parent=gene1399 chr20 ENCODE exon 33593985 33594104 . + . Parent=gene1399 chr20 ENCODE exon 33598577 33598670 . + . Parent=gene1399 chr20 ENCODE exon 33599676 33599821 . + . Parent=gene1399 chr20 ENCODE exon 33599975 33600032 . + . Parent=gene1399 ### chr20 ENCODE gene 33593606 33607447 . + . ID=gene1400;Name=RP3-477O4.12-013;name2=ERGIC3 chr20 ENCODE exon 33593606 33593763 . + . Parent=gene1400 chr20 ENCODE exon 33593985 33594104 . + . Parent=gene1400 chr20 ENCODE exon 33598577 33598670 . + . Parent=gene1400 chr20 ENCODE exon 33599676 33599841 . + . Parent=gene1400 chr20 ENCODE exon 33599975 33600032 . + . Parent=gene1400 chr20 ENCODE exon 33606229 33606260 . + . Parent=gene1400 chr20 ENCODE exon 33607218 33607314 . + . Parent=gene1400 chr20 ENCODE exon 33607392 33607447 . + . Parent=gene1400 ### chr20 ENCODE gene 33598427 33600146 . + . ID=gene1401;Name=RP3-477O4.12-019;name2=ERGIC3 chr20 ENCODE exon 33598427 33598670 . + . Parent=gene1401 chr20 ENCODE exon 33599676 33599841 . + . Parent=gene1401 chr20 ENCODE exon 33599975 33600146 . + . Parent=gene1401 ### chr20 ENCODE gene 33598652 33607617 . + . ID=gene1402;Name=RP3-477O4.12-014;name2=ERGIC3 chr20 ENCODE exon 33598652 33598670 . + . Parent=gene1402 chr20 ENCODE exon 33599676 33599841 . + . Parent=gene1402 chr20 ENCODE exon 33599975 33600032 . + . Parent=gene1402 chr20 ENCODE exon 33606229 33606260 . + . Parent=gene1402 chr20 ENCODE exon 33607218 33607314 . + . Parent=gene1402 chr20 ENCODE exon 33607392 33607617 . + . Parent=gene1402 ### chr20 ENCODE gene 33606042 33608281 . + . ID=gene1403;Name=RP3-477O4.12-020;name2=ERGIC3 chr20 ENCODE exon 33606042 33606260 . + . Parent=gene1403 chr20 ENCODE exon 33607218 33607314 . + . Parent=gene1403 chr20 ENCODE exon 33607392 33607456 . + . Parent=gene1403 chr20 ENCODE exon 33608158 33608281 . + . Parent=gene1403 ### chr20 ENCODE gene 33606101 33607745 . + . ID=gene1404;Name=RP3-477O4.12-021;name2=ERGIC3 chr20 ENCODE exon 33606101 33606260 . + . Parent=gene1404 chr20 ENCODE exon 33607392 33607745 . + . Parent=gene1404 ### chr20 ENCODE gene 33607228 33608640 . + . ID=gene1405;Name=RP3-477O4.12-008;name2=ERGIC3 chr20 ENCODE exon 33607228 33607314 . + . Parent=gene1405 chr20 ENCODE CDS 33607228 33607314 . + 0 Parent=gene1405 chr20 ENCODE exon 33607392 33607456 . + . Parent=gene1405 chr20 ENCODE CDS 33607392 33607456 . + 0 Parent=gene1405 chr20 ENCODE exon 33608062 33608294 . + . Parent=gene1405 chr20 ENCODE CDS 33608062 33608294 . + 1 Parent=gene1405 chr20 ENCODE exon 33608379 33608434 . + . Parent=gene1405 chr20 ENCODE CDS 33608379 33608434 . + 2 Parent=gene1405 chr20 ENCODE exon 33608610 33608640 . + . Parent=gene1405 chr20 ENCODE CDS 33608610 33608640 . + 0 Parent=gene1405 ### chr20 ENCODE gene 33607280 33608818 . + . ID=gene1406;Name=RP3-477O4.12-015;name2=ERGIC3 chr20 ENCODE exon 33607280 33607314 . + . Parent=gene1406 chr20 ENCODE CDS 33607280 33607314 . + 0 Parent=gene1406 chr20 ENCODE exon 33607392 33607456 . + . Parent=gene1406 chr20 ENCODE CDS 33607392 33607456 . + 1 Parent=gene1406 chr20 ENCODE exon 33608140 33608294 . + . Parent=gene1406 chr20 ENCODE CDS 33608140 33608294 . + 2 Parent=gene1406 chr20 ENCODE exon 33608379 33608434 . + . Parent=gene1406 chr20 ENCODE CDS 33608379 33608434 . + 0 Parent=gene1406 chr20 ENCODE CDS 33608610 33608689 . + 1 Parent=gene1406 chr20 ENCODE exon 33608610 33608818 . + . Parent=gene1406 ### chr20 ENCODE gene 33607764 33608635 . + . ID=gene1407;Name=RP3-477O4.12-009;name2=ERGIC3 chr20 ENCODE exon 33607764 33607933 . + . Parent=gene1407 chr20 ENCODE exon 33608158 33608294 . + . Parent=gene1407 chr20 ENCODE exon 33608379 33608434 . + . Parent=gene1407 chr20 ENCODE exon 33608610 33608635 . + . Parent=gene1407 ### chr20 ENCODE gene 33607795 33608819 . + . ID=gene1408;Name=RP3-477O4.12-016;name2=ERGIC3 chr20 ENCODE exon 33607795 33608294 . + . Parent=gene1408 chr20 ENCODE exon 33608379 33608434 . + . Parent=gene1408 chr20 ENCODE exon 33608610 33608819 . + . Parent=gene1408 ### chr20 ENCODE gene 33609921 33615871 . - . ID=gene1409;Name=RP3-477O4.7-006;name2=FER1L4 chr20 ENCODE exon 33609921 33610236 . - . Parent=gene1409 chr20 ENCODE exon 33610340 33610440 . - . Parent=gene1409 chr20 ENCODE exon 33610525 33610808 . - . Parent=gene1409 chr20 ENCODE exon 33611304 33611545 . - . Parent=gene1409 chr20 ENCODE exon 33611721 33611819 . - . Parent=gene1409 chr20 ENCODE exon 33613033 33613118 . - . Parent=gene1409 chr20 ENCODE exon 33615036 33615871 . - . Parent=gene1409 ### chr20 ENCODE gene 33609921 33630266 . - . ID=gene1410;Name=RP3-477O4.7-001;name2=FER1L4 chr20 ENCODE exon 33609921 33610236 . - . Parent=gene1410 chr20 ENCODE exon 33610340 33610440 . - . Parent=gene1410 chr20 ENCODE exon 33610525 33610808 . - . Parent=gene1410 chr20 ENCODE exon 33611344 33611545 . - . Parent=gene1410 chr20 ENCODE exon 33611721 33611819 . - . Parent=gene1410 chr20 ENCODE exon 33613033 33613118 . - . Parent=gene1410 chr20 ENCODE exon 33615036 33616248 . - . Parent=gene1410 chr20 ENCODE exon 33616430 33616557 . - . Parent=gene1410 chr20 ENCODE exon 33627503 33627619 . - . Parent=gene1410 chr20 ENCODE exon 33627717 33627854 . - . Parent=gene1410 chr20 ENCODE exon 33627932 33628032 . - . Parent=gene1410 chr20 ENCODE exon 33628122 33628164 . - . Parent=gene1410 chr20 ENCODE exon 33630172 33630266 . - . Parent=gene1410 ### chr20 ENCODE gene 33609921 33651008 . - . ID=gene1411;Name=RP3-477O4.7-002;name2=FER1L4 chr20 ENCODE exon 33609921 33610236 . - . Parent=gene1411 chr20 ENCODE exon 33610340 33610440 . - . Parent=gene1411 chr20 ENCODE exon 33610525 33611819 . - . Parent=gene1411 chr20 ENCODE exon 33613033 33613118 . - . Parent=gene1411 chr20 ENCODE exon 33615036 33616248 . - . Parent=gene1411 chr20 ENCODE exon 33616430 33616557 . - . Parent=gene1411 chr20 ENCODE exon 33618934 33618987 . - . Parent=gene1411 chr20 ENCODE exon 33627503 33627619 . - . Parent=gene1411 chr20 ENCODE exon 33627717 33627854 . - . Parent=gene1411 chr20 ENCODE exon 33627932 33628032 . - . Parent=gene1411 chr20 ENCODE exon 33628122 33628164 . - . Parent=gene1411 chr20 ENCODE exon 33646813 33646929 . - . Parent=gene1411 chr20 ENCODE exon 33647003 33647090 . - . Parent=gene1411 chr20 ENCODE exon 33650350 33650450 . - . Parent=gene1411 chr20 ENCODE exon 33650902 33651008 . - . Parent=gene1411 ### chr20 ENCODE gene 33609926 33633951 . - . ID=gene1412;Name=RP3-477O4.7-008;name2=FER1L4 chr20 ENCODE exon 33609926 33610236 . - . Parent=gene1412 chr20 ENCODE exon 33610340 33610440 . - . Parent=gene1412 chr20 ENCODE exon 33610525 33610808 . - . Parent=gene1412 chr20 ENCODE exon 33611304 33611819 . - . Parent=gene1412 chr20 ENCODE exon 33613033 33613118 . - . Parent=gene1412 chr20 ENCODE exon 33615036 33616248 . - . Parent=gene1412 chr20 ENCODE exon 33616430 33616557 . - . Parent=gene1412 chr20 ENCODE exon 33627503 33627619 . - . Parent=gene1412 chr20 ENCODE exon 33627717 33627854 . - . Parent=gene1412 chr20 ENCODE exon 33627988 33628032 . - . Parent=gene1412 chr20 ENCODE exon 33628122 33628164 . - . Parent=gene1412 chr20 ENCODE exon 33630172 33630303 . - . Parent=gene1412 chr20 ENCODE exon 33630392 33630450 . - . Parent=gene1412 chr20 ENCODE exon 33630594 33630792 . - . Parent=gene1412 chr20 ENCODE exon 33633375 33633536 . - . Parent=gene1412 chr20 ENCODE exon 33633631 33633951 . - . Parent=gene1412 ### chr20 ENCODE gene 33609928 33635303 . - . ID=gene1413;Name=RP3-477O4.7-009;name2=FER1L4 chr20 ENCODE exon 33609928 33610236 . - . Parent=gene1413 chr20 ENCODE exon 33610340 33610808 . - . Parent=gene1413 chr20 ENCODE exon 33611304 33611545 . - . Parent=gene1413 chr20 ENCODE exon 33611721 33611819 . - . Parent=gene1413 chr20 ENCODE exon 33613033 33613118 . - . Parent=gene1413 chr20 ENCODE exon 33613990 33614150 . - . Parent=gene1413 chr20 ENCODE exon 33615036 33615190 . - . Parent=gene1413 chr20 ENCODE exon 33616078 33616248 . - . Parent=gene1413 chr20 ENCODE exon 33616430 33616557 . - . Parent=gene1413 chr20 ENCODE exon 33627503 33627619 . - . Parent=gene1413 chr20 ENCODE exon 33627717 33627854 . - . Parent=gene1413 chr20 ENCODE exon 33627932 33628032 . - . Parent=gene1413 chr20 ENCODE exon 33628122 33628164 . - . Parent=gene1413 chr20 ENCODE exon 33630172 33630303 . - . Parent=gene1413 chr20 ENCODE exon 33630392 33630450 . - . Parent=gene1413 chr20 ENCODE exon 33630594 33630792 . - . Parent=gene1413 chr20 ENCODE exon 33633375 33633536 . - . Parent=gene1413 chr20 ENCODE exon 33633631 33633747 . - . Parent=gene1413 chr20 ENCODE exon 33634175 33634348 . - . Parent=gene1413 chr20 ENCODE exon 33634464 33634598 . - . Parent=gene1413 chr20 ENCODE exon 33635022 33635146 . - . Parent=gene1413 chr20 ENCODE exon 33635276 33635303 . - . Parent=gene1413 ### chr20 ENCODE gene 33609928 33658898 . - . ID=gene1414;name2=FER1L4;Name=RP3-477O4.7-010 chr20 ENCODE exon 33609928 33610236 . - . Parent=gene1414 chr20 ENCODE CDS 33610050 33610236 . - 1 Parent=gene1414 chr20 ENCODE exon 33610340 33610440 . - . Parent=gene1414 chr20 ENCODE CDS 33610340 33610440 . - 0 Parent=gene1414 chr20 ENCODE exon 33610525 33610808 . - . Parent=gene1414 chr20 ENCODE CDS 33610525 33610808 . - 2 Parent=gene1414 chr20 ENCODE exon 33611304 33611545 . - . Parent=gene1414 chr20 ENCODE CDS 33611304 33611545 . - 1 Parent=gene1414 chr20 ENCODE exon 33611721 33611819 . - . Parent=gene1414 chr20 ENCODE CDS 33611721 33611819 . - 1 Parent=gene1414 chr20 ENCODE exon 33613033 33613118 . - . Parent=gene1414 chr20 ENCODE CDS 33613033 33613118 . - 0 Parent=gene1414 chr20 ENCODE exon 33613990 33614132 . - . Parent=gene1414 chr20 ENCODE CDS 33613990 33614132 . - 2 Parent=gene1414 chr20 ENCODE exon 33615036 33615190 . - . Parent=gene1414 chr20 ENCODE CDS 33615036 33615190 . - 1 Parent=gene1414 chr20 ENCODE exon 33616078 33616248 . - . Parent=gene1414 chr20 ENCODE CDS 33616078 33616248 . - 1 Parent=gene1414 chr20 ENCODE exon 33616430 33616557 . - . Parent=gene1414 chr20 ENCODE CDS 33616430 33616557 . - 0 Parent=gene1414 chr20 ENCODE exon 33627503 33627619 . - . Parent=gene1414 chr20 ENCODE CDS 33627503 33627619 . - 0 Parent=gene1414 chr20 ENCODE exon 33627717 33627854 . - . Parent=gene1414 chr20 ENCODE CDS 33627717 33627854 . - 0 Parent=gene1414 chr20 ENCODE exon 33627932 33628032 . - . Parent=gene1414 chr20 ENCODE CDS 33627932 33628032 . - 2 Parent=gene1414 chr20 ENCODE exon 33628122 33628164 . - . Parent=gene1414 chr20 ENCODE CDS 33628122 33628164 . - 0 Parent=gene1414 chr20 ENCODE exon 33630172 33630303 . - . Parent=gene1414 chr20 ENCODE CDS 33630172 33630303 . - 0 Parent=gene1414 chr20 ENCODE exon 33630392 33630450 . - . Parent=gene1414 chr20 ENCODE CDS 33630392 33630450 . - 2 Parent=gene1414 chr20 ENCODE exon 33630594 33630792 . - . Parent=gene1414 chr20 ENCODE CDS 33630594 33630792 . - 0 Parent=gene1414 chr20 ENCODE exon 33633375 33633536 . - . Parent=gene1414 chr20 ENCODE CDS 33633375 33633536 . - 0 Parent=gene1414 chr20 ENCODE exon 33633631 33633747 . - . Parent=gene1414 chr20 ENCODE CDS 33633631 33633747 . - 0 Parent=gene1414 chr20 ENCODE exon 33634175 33634348 . - . Parent=gene1414 chr20 ENCODE CDS 33634175 33634348 . - 0 Parent=gene1414 chr20 ENCODE exon 33634464 33634598 . - . Parent=gene1414 chr20 ENCODE CDS 33634464 33634598 . - 0 Parent=gene1414 chr20 ENCODE exon 33635022 33635146 . - . Parent=gene1414 chr20 ENCODE CDS 33635022 33635146 . - 2 Parent=gene1414 chr20 ENCODE exon 33635276 33635429 . - . Parent=gene1414 chr20 ENCODE CDS 33635276 33635429 . - 0 Parent=gene1414 chr20 ENCODE exon 33636460 33636612 . - . Parent=gene1414 chr20 ENCODE CDS 33636460 33636612 . - 0 Parent=gene1414 chr20 ENCODE exon 33646813 33646929 . - . Parent=gene1414 chr20 ENCODE CDS 33646813 33646929 . - 0 Parent=gene1414 chr20 ENCODE exon 33647003 33647090 . - . Parent=gene1414 chr20 ENCODE CDS 33647003 33647090 . - 1 Parent=gene1414 chr20 ENCODE exon 33650350 33650450 . - . Parent=gene1414 chr20 ENCODE CDS 33650350 33650450 . - 0 Parent=gene1414 chr20 ENCODE exon 33650902 33651022 . - . Parent=gene1414 chr20 ENCODE CDS 33650902 33651022 . - 1 Parent=gene1414 chr20 ENCODE exon 33651109 33651280 . - . Parent=gene1414 chr20 ENCODE CDS 33651109 33651280 . - 2 Parent=gene1414 chr20 ENCODE exon 33651449 33651557 . - . Parent=gene1414 chr20 ENCODE CDS 33651449 33651557 . - 0 Parent=gene1414 chr20 ENCODE exon 33651899 33652260 . - . Parent=gene1414 chr20 ENCODE CDS 33651899 33652260 . - 2 Parent=gene1414 chr20 ENCODE exon 33652868 33653054 . - . Parent=gene1414 chr20 ENCODE CDS 33652868 33653054 . - 0 Parent=gene1414 chr20 ENCODE exon 33653142 33653325 . - . Parent=gene1414 chr20 ENCODE CDS 33653142 33653325 . - 1 Parent=gene1414 chr20 ENCODE exon 33653443 33653602 . - . Parent=gene1414 chr20 ENCODE CDS 33653443 33653602 . - 2 Parent=gene1414 chr20 ENCODE exon 33653859 33653943 . - . Parent=gene1414 chr20 ENCODE CDS 33653859 33653943 . - 0 Parent=gene1414 chr20 ENCODE exon 33654025 33654087 . - . Parent=gene1414 chr20 ENCODE CDS 33654025 33654087 . - 0 Parent=gene1414 chr20 ENCODE exon 33654346 33654477 . - . Parent=gene1414 chr20 ENCODE CDS 33654346 33654477 . - 0 Parent=gene1414 chr20 ENCODE exon 33654595 33654655 . - . Parent=gene1414 chr20 ENCODE CDS 33654595 33654655 . - 1 Parent=gene1414 chr20 ENCODE CDS 33655133 33655152 . - 0 Parent=gene1414 chr20 ENCODE exon 33655133 33655303 . - . Parent=gene1414 chr20 ENCODE exon 33655640 33655681 . - . Parent=gene1414 chr20 ENCODE exon 33655866 33655957 . - . Parent=gene1414 chr20 ENCODE exon 33657458 33657557 . - . Parent=gene1414 chr20 ENCODE exon 33657654 33657742 . - . Parent=gene1414 chr20 ENCODE exon 33658437 33658492 . - . Parent=gene1414 chr20 ENCODE exon 33658751 33658898 . - . Parent=gene1414 ### chr20 ENCODE gene 33627512 33630597 . - . ID=gene1415;Name=RP3-477O4.7-003;name2=FER1L4 chr20 ENCODE exon 33627512 33627619 . - . Parent=gene1415 chr20 ENCODE CDS 33627512 33627619 . - 0 Parent=gene1415 chr20 ENCODE exon 33627717 33627854 . - . Parent=gene1415 chr20 ENCODE CDS 33627717 33627854 . - 0 Parent=gene1415 chr20 ENCODE exon 33627932 33628032 . - . Parent=gene1415 chr20 ENCODE CDS 33627932 33628032 . - 2 Parent=gene1415 chr20 ENCODE exon 33628122 33628164 . - . Parent=gene1415 chr20 ENCODE CDS 33628122 33628164 . - 0 Parent=gene1415 chr20 ENCODE exon 33630392 33630450 . - . Parent=gene1415 chr20 ENCODE CDS 33630392 33630450 . - 2 Parent=gene1415 chr20 ENCODE exon 33630594 33630597 . - . Parent=gene1415 chr20 ENCODE CDS 33630594 33630597 . - 0 Parent=gene1415 ### chr20 ENCODE gene 33627566 33627922 . - . ID=gene1416;Name=RP3-477O4.7-011;name2=FER1L4 chr20 ENCODE exon 33627566 33627619 . - . Parent=gene1416 chr20 ENCODE exon 33627717 33627922 . - . Parent=gene1416 ### chr20 ENCODE gene 33633455 33636545 . - . ID=gene1417;Name=RP3-477O4.7-004;name2=FER1L4 chr20 ENCODE exon 33633455 33633536 . - . Parent=gene1417 chr20 ENCODE exon 33633631 33633747 . - . Parent=gene1417 chr20 ENCODE exon 33634464 33634598 . - . Parent=gene1417 chr20 ENCODE exon 33635276 33635429 . - . Parent=gene1417 chr20 ENCODE exon 33636460 33636545 . - . Parent=gene1417 ### chr20 ENCODE gene 33651047 33652110 . - . ID=gene1418;Name=RP3-477O4.7-012;name2=FER1L4 chr20 ENCODE exon 33651047 33651557 . - . Parent=gene1418 chr20 ENCODE exon 33651899 33652110 . - . Parent=gene1418 ### chr20 ENCODE gene 33652035 33656662 . - . ID=gene1419;Name=RP3-477O4.7-013;name2=FER1L4 chr20 ENCODE exon 33652035 33652260 . - . Parent=gene1419 chr20 ENCODE exon 33652868 33653054 . - . Parent=gene1419 chr20 ENCODE exon 33653142 33654087 . - . Parent=gene1419 chr20 ENCODE exon 33654346 33654477 . - . Parent=gene1419 chr20 ENCODE exon 33654595 33654655 . - . Parent=gene1419 chr20 ENCODE exon 33655133 33655303 . - . Parent=gene1419 chr20 ENCODE exon 33655640 33655681 . - . Parent=gene1419 chr20 ENCODE exon 33655866 33655957 . - . Parent=gene1419 chr20 ENCODE exon 33656438 33656662 . - . Parent=gene1419 ### chr20 ENCODE gene 33654440 33657795 . - . ID=gene1420;Name=RP3-477O4.7-014;name2=FER1L4 chr20 ENCODE exon 33654440 33654477 . - . Parent=gene1420 chr20 ENCODE exon 33654595 33654655 . - . Parent=gene1420 chr20 ENCODE exon 33655133 33655303 . - . Parent=gene1420 chr20 ENCODE exon 33655640 33655681 . - . Parent=gene1420 chr20 ENCODE exon 33655866 33655957 . - . Parent=gene1420 chr20 ENCODE exon 33657458 33657557 . - . Parent=gene1420 chr20 ENCODE exon 33657654 33657795 . - . Parent=gene1420 ### chr20 ENCODE gene 33655257 33658865 . - . ID=gene1421;Name=RP3-477O4.7-015;name2=FER1L4 chr20 ENCODE exon 33655257 33655303 . - . Parent=gene1421 chr20 ENCODE exon 33655640 33655681 . - . Parent=gene1421 chr20 ENCODE exon 33655866 33655957 . - . Parent=gene1421 chr20 ENCODE exon 33657458 33657557 . - . Parent=gene1421 chr20 ENCODE exon 33657654 33657742 . - . Parent=gene1421 chr20 ENCODE exon 33658437 33658502 . - . Parent=gene1421 chr20 ENCODE exon 33658751 33658865 . - . Parent=gene1421 ### chr20 ENCODE gene 33667228 33672385 . + . ID=gene1422;Name=RP1-309K20.4-001;name2=SPAG4 chr20 ENCODE exon 33667228 33667643 . + . Parent=gene1422 chr20 ENCODE CDS 33667340 33667643 . + 0 Parent=gene1422 chr20 ENCODE exon 33668472 33668576 . + . Parent=gene1422 chr20 ENCODE CDS 33668472 33668576 . + 2 Parent=gene1422 chr20 ENCODE exon 33668856 33668922 . + . Parent=gene1422 chr20 ENCODE CDS 33668856 33668922 . + 2 Parent=gene1422 chr20 ENCODE exon 33669115 33669176 . + . Parent=gene1422 chr20 ENCODE CDS 33669115 33669176 . + 1 Parent=gene1422 chr20 ENCODE exon 33669423 33669466 . + . Parent=gene1422 chr20 ENCODE CDS 33669423 33669466 . + 2 Parent=gene1422 chr20 ENCODE exon 33669786 33669811 . + . Parent=gene1422 chr20 ENCODE CDS 33669786 33669811 . + 0 Parent=gene1422 chr20 ENCODE exon 33669948 33670056 . + . Parent=gene1422 chr20 ENCODE CDS 33669948 33670056 . + 1 Parent=gene1422 chr20 ENCODE exon 33670259 33670334 . + . Parent=gene1422 chr20 ENCODE CDS 33670259 33670334 . + 0 Parent=gene1422 chr20 ENCODE exon 33670531 33670646 . + . Parent=gene1422 chr20 ENCODE CDS 33670531 33670646 . + 2 Parent=gene1422 chr20 ENCODE exon 33670915 33671082 . + . Parent=gene1422 chr20 ENCODE CDS 33670915 33671082 . + 0 Parent=gene1422 chr20 ENCODE exon 33672020 33672109 . + . Parent=gene1422 chr20 ENCODE CDS 33672020 33672109 . + 0 Parent=gene1422 chr20 ENCODE CDS 33672212 33672358 . + 0 Parent=gene1422 chr20 ENCODE exon 33672212 33672385 . + . Parent=gene1422 ### chr20 ENCODE gene 33668216 33670232 . + . ID=gene1423;Name=RP1-309K20.4-003;name2=SPAG4 chr20 ENCODE exon 33668216 33668576 . + . Parent=gene1423 chr20 ENCODE exon 33668856 33668922 . + . Parent=gene1423 chr20 ENCODE exon 33669115 33669176 . + . Parent=gene1423 chr20 ENCODE exon 33669423 33669466 . + . Parent=gene1423 chr20 ENCODE exon 33669786 33670232 . + . Parent=gene1423 ### chr20 ENCODE gene 33668360 33670188 . + . ID=gene1424;Name=RP1-309K20.4-006;name2=SPAG4 chr20 ENCODE exon 33668360 33668576 . + . Parent=gene1424 chr20 ENCODE exon 33668856 33668922 . + . Parent=gene1424 chr20 ENCODE exon 33670105 33670188 . + . Parent=gene1424 ### chr20 ENCODE gene 33668360 33671024 . + . ID=gene1425;Name=RP1-309K20.4-002;name2=SPAG4 chr20 ENCODE exon 33668360 33668576 . + . Parent=gene1425 chr20 ENCODE exon 33668856 33668922 . + . Parent=gene1425 chr20 ENCODE exon 33669115 33669176 . + . Parent=gene1425 chr20 ENCODE exon 33669423 33669466 . + . Parent=gene1425 chr20 ENCODE exon 33669786 33669811 . + . Parent=gene1425 chr20 ENCODE exon 33669948 33670056 . + . Parent=gene1425 chr20 ENCODE exon 33670259 33670334 . + . Parent=gene1425 chr20 ENCODE exon 33670531 33670646 . + . Parent=gene1425 chr20 ENCODE exon 33670915 33671024 . + . Parent=gene1425 ### chr20 ENCODE gene 33668382 33671072 . + . ID=gene1426;Name=RP1-309K20.4-004;name2=SPAG4 chr20 ENCODE exon 33668382 33668576 . + . Parent=gene1426 chr20 ENCODE exon 33668856 33669176 . + . Parent=gene1426 chr20 ENCODE exon 33669423 33669466 . + . Parent=gene1426 chr20 ENCODE exon 33669786 33670056 . + . Parent=gene1426 chr20 ENCODE exon 33670259 33670334 . + . Parent=gene1426 chr20 ENCODE exon 33670531 33670646 . + . Parent=gene1426 chr20 ENCODE exon 33670915 33671072 . + . Parent=gene1426 ### chr20 ENCODE gene 33669025 33672270 . + . ID=gene1427;name2=SPAG4;Name=RP1-309K20.4-005 chr20 ENCODE exon 33669025 33669176 . + . Parent=gene1427 chr20 ENCODE exon 33669786 33669811 . + . Parent=gene1427 chr20 ENCODE exon 33670259 33670334 . + . Parent=gene1427 chr20 ENCODE exon 33670531 33670646 . + . Parent=gene1427 chr20 ENCODE exon 33670915 33671082 . + . Parent=gene1427 chr20 ENCODE exon 33672020 33672109 . + . Parent=gene1427 chr20 ENCODE exon 33672212 33672270 . + . Parent=gene1427 ### chr20 ENCODE gene 33670921 33672385 . + . ID=gene1428;Name=RP1-309K20.4-007;name2=SPAG4 chr20 ENCODE exon 33670921 33671082 . + . Parent=gene1428 chr20 ENCODE CDS 33670921 33671082 . + 0 Parent=gene1428 chr20 ENCODE exon 33671993 33672109 . + . Parent=gene1428 chr20 ENCODE CDS 33671993 33672109 . + 0 Parent=gene1428 chr20 ENCODE CDS 33672212 33672358 . + 0 Parent=gene1428 chr20 ENCODE exon 33672212 33672385 . + . Parent=gene1428 ### chr20 ENCODE gene 33677367 33716222 . - . ID=gene1429;Name=RP1-309K20.2-004;name2=CPNE1 chr20 ENCODE exon 33677367 33677717 . - . Parent=gene1429 chr20 ENCODE CDS 33677577 33677717 . - 0 Parent=gene1429 chr20 ENCODE exon 33677903 33678139 . - . Parent=gene1429 chr20 ENCODE CDS 33677903 33678139 . - 0 Parent=gene1429 chr20 ENCODE exon 33678616 33678749 . - . Parent=gene1429 chr20 ENCODE CDS 33678616 33678749 . - 2 Parent=gene1429 chr20 ENCODE exon 33681775 33681826 . - . Parent=gene1429 chr20 ENCODE CDS 33681775 33681826 . - 0 Parent=gene1429 chr20 ENCODE exon 33682077 33682131 . - . Parent=gene1429 chr20 ENCODE CDS 33682077 33682131 . - 1 Parent=gene1429 chr20 ENCODE exon 33682237 33682370 . - . Parent=gene1429 chr20 ENCODE CDS 33682237 33682370 . - 0 Parent=gene1429 chr20 ENCODE exon 33682450 33682509 . - . Parent=gene1429 chr20 ENCODE CDS 33682450 33682509 . - 0 Parent=gene1429 chr20 ENCODE exon 33682604 33682690 . - . Parent=gene1429 chr20 ENCODE CDS 33682604 33682690 . - 0 Parent=gene1429 chr20 ENCODE exon 33682828 33682914 . - . Parent=gene1429 chr20 ENCODE CDS 33682828 33682914 . - 0 Parent=gene1429 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1429 chr20 ENCODE CDS 33683024 33683113 . - 0 Parent=gene1429 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1429 chr20 ENCODE CDS 33683281 33683361 . - 0 Parent=gene1429 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1429 chr20 ENCODE CDS 33683499 33683570 . - 0 Parent=gene1429 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1429 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1429 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1429 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1429 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1429 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1429 chr20 ENCODE exon 33706538 33706680 . - . Parent=gene1429 chr20 ENCODE exon 33710266 33710318 . - . Parent=gene1429 chr20 ENCODE exon 33716096 33716222 . - . Parent=gene1429 ### chr20 ENCODE gene 33677380 33678189 . - . ID=gene1430;Name=RP1-309K20.2-018;name2=CPNE1 chr20 ENCODE exon 33677380 33677717 . - . Parent=gene1430 chr20 ENCODE exon 33677903 33678189 . - . Parent=gene1430 ### chr20 ENCODE gene 33677380 33678676 . - . ID=gene1431;Name=RP1-309K20.2-022;name2=CPNE1 chr20 ENCODE exon 33677380 33678139 . - . Parent=gene1431 chr20 ENCODE exon 33678616 33678676 . - . Parent=gene1431 ### chr20 ENCODE gene 33677380 33678735 . - . ID=gene1432;name2=CPNE1;Name=RP1-309K20.2-019 chr20 ENCODE exon 33677380 33677717 . - . Parent=gene1432 chr20 ENCODE exon 33678071 33678162 . - . Parent=gene1432 chr20 ENCODE exon 33678616 33678735 . - . Parent=gene1432 ### chr20 ENCODE gene 33677380 33681792 . - . ID=gene1433;Name=RP1-309K20.2-015;name2=CPNE1 chr20 ENCODE exon 33677380 33677717 . - . Parent=gene1433 chr20 ENCODE CDS 33677485 33677717 . - 0 Parent=gene1433 chr20 ENCODE exon 33677899 33678139 . - . Parent=gene1433 chr20 ENCODE CDS 33677899 33678139 . - 1 Parent=gene1433 chr20 ENCODE exon 33678616 33678749 . - . Parent=gene1433 chr20 ENCODE CDS 33678616 33678749 . - 0 Parent=gene1433 chr20 ENCODE exon 33681775 33681792 . - . Parent=gene1433 chr20 ENCODE CDS 33681775 33681792 . - 0 Parent=gene1433 ### chr20 ENCODE gene 33677380 33705013 . - . ID=gene1434;Name=RP1-309K20.2-005;name2=CPNE1 chr20 ENCODE exon 33677380 33677717 . - . Parent=gene1434 chr20 ENCODE CDS 33677577 33677717 . - 0 Parent=gene1434 chr20 ENCODE exon 33677903 33678139 . - . Parent=gene1434 chr20 ENCODE CDS 33677903 33678139 . - 0 Parent=gene1434 chr20 ENCODE exon 33678616 33678749 . - . Parent=gene1434 chr20 ENCODE CDS 33678616 33678749 . - 2 Parent=gene1434 chr20 ENCODE exon 33681775 33681826 . - . Parent=gene1434 chr20 ENCODE CDS 33681775 33681826 . - 0 Parent=gene1434 chr20 ENCODE exon 33682077 33682131 . - . Parent=gene1434 chr20 ENCODE CDS 33682077 33682131 . - 1 Parent=gene1434 chr20 ENCODE exon 33682237 33682370 . - . Parent=gene1434 chr20 ENCODE CDS 33682237 33682370 . - 0 Parent=gene1434 chr20 ENCODE exon 33682450 33682509 . - . Parent=gene1434 chr20 ENCODE CDS 33682450 33682509 . - 0 Parent=gene1434 chr20 ENCODE exon 33682604 33682690 . - . Parent=gene1434 chr20 ENCODE CDS 33682604 33682690 . - 0 Parent=gene1434 chr20 ENCODE exon 33682828 33682914 . - . Parent=gene1434 chr20 ENCODE CDS 33682828 33682914 . - 0 Parent=gene1434 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1434 chr20 ENCODE CDS 33683024 33683113 . - 0 Parent=gene1434 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1434 chr20 ENCODE CDS 33683281 33683361 . - 0 Parent=gene1434 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1434 chr20 ENCODE CDS 33683499 33683570 . - 0 Parent=gene1434 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1434 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1434 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1434 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1434 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1434 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1434 chr20 ENCODE exon 33704864 33705013 . - . Parent=gene1434 ### chr20 ENCODE gene 33677394 33716197 . - . ID=gene1435;Name=RP1-309K20.2-027;name2=CPNE1 chr20 ENCODE exon 33677394 33677717 . - . Parent=gene1435 chr20 ENCODE exon 33677903 33678139 . - . Parent=gene1435 chr20 ENCODE exon 33678616 33678749 . - . Parent=gene1435 chr20 ENCODE exon 33681775 33681826 . - . Parent=gene1435 chr20 ENCODE exon 33682077 33682131 . - . Parent=gene1435 chr20 ENCODE exon 33682237 33682370 . - . Parent=gene1435 chr20 ENCODE exon 33682450 33682509 . - . Parent=gene1435 chr20 ENCODE exon 33682604 33682690 . - . Parent=gene1435 chr20 ENCODE exon 33682828 33682914 . - . Parent=gene1435 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1435 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1435 chr20 ENCODE exon 33683499 33683721 . - . Parent=gene1435 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1435 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1435 chr20 ENCODE exon 33716096 33716197 . - . Parent=gene1435 ### chr20 ENCODE gene 33677422 33683890 . - . ID=gene1436;Name=RP1-309K20.2-001;name2=CPNE1 chr20 ENCODE exon 33677422 33677717 . - . Parent=gene1436 chr20 ENCODE exon 33677903 33678139 . - . Parent=gene1436 chr20 ENCODE exon 33678616 33678749 . - . Parent=gene1436 chr20 ENCODE exon 33681775 33682370 . - . Parent=gene1436 chr20 ENCODE exon 33682450 33682509 . - . Parent=gene1436 chr20 ENCODE exon 33682604 33682690 . - . Parent=gene1436 chr20 ENCODE exon 33682828 33682914 . - . Parent=gene1436 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1436 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1436 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1436 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1436 chr20 ENCODE exon 33683853 33683890 . - . Parent=gene1436 ### chr20 ENCODE gene 33677495 33716213 . - . ID=gene1437;Name=RP1-309K20.2-028;name2=CPNE1 chr20 ENCODE exon 33677495 33677717 . - . Parent=gene1437 chr20 ENCODE exon 33677903 33678162 . - . Parent=gene1437 chr20 ENCODE exon 33678616 33678749 . - . Parent=gene1437 chr20 ENCODE exon 33681775 33681826 . - . Parent=gene1437 chr20 ENCODE exon 33682077 33682131 . - . Parent=gene1437 chr20 ENCODE exon 33682237 33682370 . - . Parent=gene1437 chr20 ENCODE exon 33682450 33682509 . - . Parent=gene1437 chr20 ENCODE exon 33682604 33682690 . - . Parent=gene1437 chr20 ENCODE exon 33682828 33682914 . - . Parent=gene1437 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1437 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1437 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1437 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1437 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1437 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1437 chr20 ENCODE exon 33716138 33716213 . - . Parent=gene1437 ### chr20 ENCODE gene 33677588 33716292 . - . ID=gene1438;Name=RP1-309K20.2-006;name2=CPNE1 chr20 ENCODE exon 33677588 33677717 . - . Parent=gene1438 chr20 ENCODE exon 33677903 33678136 . - . Parent=gene1438 chr20 ENCODE exon 33678616 33678749 . - . Parent=gene1438 chr20 ENCODE exon 33681775 33681826 . - . Parent=gene1438 chr20 ENCODE exon 33682077 33682131 . - . Parent=gene1438 chr20 ENCODE exon 33682237 33682370 . - . Parent=gene1438 chr20 ENCODE exon 33682450 33682509 . - . Parent=gene1438 chr20 ENCODE exon 33682604 33682690 . - . Parent=gene1438 chr20 ENCODE exon 33682828 33682914 . - . Parent=gene1438 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1438 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1438 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1438 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1438 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1438 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1438 chr20 ENCODE exon 33716138 33716292 . - . Parent=gene1438 ### chr20 ENCODE gene 33678030 33678867 . - . ID=gene1439;Name=RP1-309K20.2-003;name2=CPNE1 chr20 ENCODE exon 33678030 33678139 . - . Parent=gene1439 chr20 ENCODE exon 33678616 33678867 . - . Parent=gene1439 ### chr20 ENCODE gene 33678621 33716268 . - . ID=gene1440;Name=RP1-309K20.2-013;name2=CPNE1 chr20 ENCODE exon 33678621 33678749 . - . Parent=gene1440 chr20 ENCODE CDS 33678621 33678749 . - 2 Parent=gene1440 chr20 ENCODE exon 33681775 33681826 . - . Parent=gene1440 chr20 ENCODE CDS 33681775 33681826 . - 0 Parent=gene1440 chr20 ENCODE exon 33682077 33682131 . - . Parent=gene1440 chr20 ENCODE CDS 33682077 33682131 . - 1 Parent=gene1440 chr20 ENCODE exon 33682237 33682370 . - . Parent=gene1440 chr20 ENCODE CDS 33682237 33682370 . - 0 Parent=gene1440 chr20 ENCODE exon 33682450 33682509 . - . Parent=gene1440 chr20 ENCODE CDS 33682450 33682509 . - 0 Parent=gene1440 chr20 ENCODE exon 33682604 33682690 . - . Parent=gene1440 chr20 ENCODE CDS 33682604 33682690 . - 0 Parent=gene1440 chr20 ENCODE exon 33682828 33682914 . - . Parent=gene1440 chr20 ENCODE CDS 33682828 33682914 . - 0 Parent=gene1440 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1440 chr20 ENCODE CDS 33683024 33683113 . - 0 Parent=gene1440 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1440 chr20 ENCODE CDS 33683281 33683361 . - 0 Parent=gene1440 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1440 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1440 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1440 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1440 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1440 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1440 chr20 ENCODE exon 33716096 33716268 . - . Parent=gene1440 ### chr20 ENCODE gene 33682244 33716219 . - . ID=gene1441;Name=RP1-309K20.2-014;name2=CPNE1 chr20 ENCODE exon 33682244 33682370 . - . Parent=gene1441 chr20 ENCODE CDS 33682244 33682370 . - 0 Parent=gene1441 chr20 ENCODE exon 33682450 33682509 . - . Parent=gene1441 chr20 ENCODE CDS 33682450 33682509 . - 0 Parent=gene1441 chr20 ENCODE exon 33682604 33682690 . - . Parent=gene1441 chr20 ENCODE CDS 33682604 33682690 . - 0 Parent=gene1441 chr20 ENCODE exon 33682828 33682914 . - . Parent=gene1441 chr20 ENCODE CDS 33682828 33682914 . - 0 Parent=gene1441 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1441 chr20 ENCODE CDS 33683024 33683113 . - 0 Parent=gene1441 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1441 chr20 ENCODE CDS 33683281 33683361 . - 0 Parent=gene1441 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1441 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1441 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1441 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1441 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1441 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1441 chr20 ENCODE exon 33716138 33716219 . - . Parent=gene1441 ### chr20 ENCODE gene 33682294 33683385 . - . ID=gene1442;name2=CPNE1;Name=RP1-309K20.2-026 chr20 ENCODE exon 33682294 33682370 . - . Parent=gene1442 chr20 ENCODE exon 33682450 33682509 . - . Parent=gene1442 chr20 ENCODE exon 33682604 33682690 . - . Parent=gene1442 chr20 ENCODE exon 33682828 33682914 . - . Parent=gene1442 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1442 chr20 ENCODE exon 33683281 33683385 . - . Parent=gene1442 ### chr20 ENCODE gene 33682319 33716252 . - . ID=gene1443;name2=CPNE1;Name=RP1-309K20.2-007 chr20 ENCODE exon 33682319 33682370 . - . Parent=gene1443 chr20 ENCODE CDS 33682319 33682370 . - 0 Parent=gene1443 chr20 ENCODE exon 33682450 33682509 . - . Parent=gene1443 chr20 ENCODE CDS 33682450 33682509 . - 0 Parent=gene1443 chr20 ENCODE exon 33682604 33682690 . - . Parent=gene1443 chr20 ENCODE CDS 33682604 33682690 . - 0 Parent=gene1443 chr20 ENCODE exon 33682828 33682914 . - . Parent=gene1443 chr20 ENCODE CDS 33682828 33682914 . - 0 Parent=gene1443 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1443 chr20 ENCODE CDS 33683024 33683113 . - 0 Parent=gene1443 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1443 chr20 ENCODE CDS 33683281 33683361 . - 0 Parent=gene1443 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1443 chr20 ENCODE CDS 33683499 33683570 . - 0 Parent=gene1443 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1443 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1443 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1443 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1443 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1443 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1443 chr20 ENCODE exon 33716096 33716252 . - . Parent=gene1443 ### chr20 ENCODE gene 33682830 33716199 . - . ID=gene1444;Name=RP1-309K20.2-017;name2=CPNE1 chr20 ENCODE exon 33682830 33682914 . - . Parent=gene1444 chr20 ENCODE CDS 33682830 33682914 . - 0 Parent=gene1444 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1444 chr20 ENCODE CDS 33683024 33683113 . - 0 Parent=gene1444 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1444 chr20 ENCODE CDS 33683281 33683361 . - 0 Parent=gene1444 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1444 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1444 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1444 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1444 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1444 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1444 chr20 ENCODE exon 33716096 33716199 . - . Parent=gene1444 ### chr20 ENCODE gene 33682848 33716268 . - . ID=gene1445;Name=RP1-309K20.2-009;name2=CPNE1 chr20 ENCODE exon 33682848 33682914 . - . Parent=gene1445 chr20 ENCODE CDS 33682848 33682914 . - 0 Parent=gene1445 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1445 chr20 ENCODE CDS 33683024 33683113 . - 0 Parent=gene1445 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1445 chr20 ENCODE CDS 33683281 33683361 . - 0 Parent=gene1445 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1445 chr20 ENCODE CDS 33683499 33683570 . - 0 Parent=gene1445 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1445 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1445 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1445 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1445 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1445 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1445 chr20 ENCODE exon 33716212 33716268 . - . Parent=gene1445 ### chr20 ENCODE gene 33682895 33716218 . - . ID=gene1446;Name=RP1-309K20.2-025;name2=CPNE1 chr20 ENCODE exon 33682895 33682914 . - . Parent=gene1446 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1446 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1446 chr20 ENCODE exon 33683499 33683584 . - . Parent=gene1446 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1446 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1446 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1446 chr20 ENCODE exon 33716096 33716218 . - . Parent=gene1446 ### chr20 ENCODE gene 33683024 33716236 . - . ID=gene1447;name2=CPNE1;Name=RP1-309K20.2-008 chr20 ENCODE exon 33683024 33683113 . - . Parent=gene1447 chr20 ENCODE CDS 33683024 33683113 . - 0 Parent=gene1447 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1447 chr20 ENCODE CDS 33683281 33683361 . - 0 Parent=gene1447 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1447 chr20 ENCODE CDS 33683499 33683570 . - 0 Parent=gene1447 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1447 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1447 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1447 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1447 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1447 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1447 chr20 ENCODE exon 33710266 33710318 . - . Parent=gene1447 chr20 ENCODE exon 33716096 33716236 . - . Parent=gene1447 ### chr20 ENCODE gene 33683046 33716236 . - . ID=gene1448;Name=RP1-309K20.2-016;name2=CPNE1 chr20 ENCODE exon 33683046 33683113 . - . Parent=gene1448 chr20 ENCODE CDS 33683046 33683113 . - 0 Parent=gene1448 chr20 ENCODE exon 33683281 33683361 . - . Parent=gene1448 chr20 ENCODE CDS 33683281 33683361 . - 0 Parent=gene1448 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1448 chr20 ENCODE CDS 33683499 33683570 . - 0 Parent=gene1448 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1448 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1448 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1448 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1448 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1448 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1448 chr20 ENCODE exon 33710266 33710350 . - . Parent=gene1448 chr20 ENCODE exon 33716096 33716236 . - . Parent=gene1448 ### chr20 ENCODE gene 33683062 33684001 . - . ID=gene1449;Name=RP1-309K20.2-002;name2=CPNE1 chr20 ENCODE exon 33683062 33683113 . - . Parent=gene1449 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1449 chr20 ENCODE exon 33683853 33684001 . - . Parent=gene1449 ### chr20 ENCODE gene 33683296 33716218 . - . ID=gene1450;Name=RP1-309K20.2-012;name2=CPNE1 chr20 ENCODE exon 33683296 33683361 . - . Parent=gene1450 chr20 ENCODE CDS 33683296 33683361 . - 0 Parent=gene1450 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1450 chr20 ENCODE CDS 33683499 33683570 . - 0 Parent=gene1450 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1450 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1450 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1450 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1450 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1450 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1450 chr20 ENCODE exon 33706538 33706680 . - . Parent=gene1450 chr20 ENCODE exon 33716138 33716218 . - . Parent=gene1450 ### chr20 ENCODE gene 33683333 33716225 . - . ID=gene1451;Name=RP1-309K20.2-020;name2=CPNE1 chr20 ENCODE exon 33683333 33683361 . - . Parent=gene1451 chr20 ENCODE CDS 33683333 33683361 . - 0 Parent=gene1451 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1451 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1451 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1451 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1451 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1451 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1451 chr20 ENCODE exon 33710266 33710318 . - . Parent=gene1451 chr20 ENCODE exon 33716096 33716225 . - . Parent=gene1451 ### chr20 ENCODE gene 33683499 33716237 . - . ID=gene1452;Name=RP1-309K20.2-010;name2=CPNE1 chr20 ENCODE exon 33683499 33683570 . - . Parent=gene1452 chr20 ENCODE CDS 33683499 33683570 . - 0 Parent=gene1452 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1452 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1452 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1452 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1452 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1452 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1452 chr20 ENCODE exon 33706538 33706680 . - . Parent=gene1452 chr20 ENCODE exon 33710266 33710350 . - . Parent=gene1452 chr20 ENCODE exon 33716096 33716237 . - . Parent=gene1452 ### chr20 ENCODE gene 33683546 33716173 . - . ID=gene1453;Name=RP1-309K20.2-011;name2=CPNE1 chr20 ENCODE exon 33683546 33683570 . - . Parent=gene1453 chr20 ENCODE CDS 33683546 33683570 . - 0 Parent=gene1453 chr20 ENCODE exon 33683647 33683721 . - . Parent=gene1453 chr20 ENCODE CDS 33683647 33683721 . - 0 Parent=gene1453 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1453 chr20 ENCODE CDS 33683853 33684032 . - 0 Parent=gene1453 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1453 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1453 chr20 ENCODE exon 33706538 33706680 . - . Parent=gene1453 chr20 ENCODE exon 33710266 33710350 . - . Parent=gene1453 chr20 ENCODE exon 33716138 33716173 . - . Parent=gene1453 ### chr20 ENCODE gene 33683676 33725736 . - . ID=gene1454;Name=RP1-309K20.2-030;name2=CPNE1 chr20 ENCODE exon 33683676 33683721 . - . Parent=gene1454 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1454 chr20 ENCODE exon 33706538 33706680 . - . Parent=gene1454 chr20 ENCODE exon 33710266 33710350 . - . Parent=gene1454 chr20 ENCODE exon 33724091 33724180 . - . Parent=gene1454 chr20 ENCODE exon 33724937 33724952 . - . Parent=gene1454 chr20 ENCODE exon 33725686 33725736 . - . Parent=gene1454 ### chr20 ENCODE gene 33683676 33725736 . - . ID=gene1455;Name=RP1-309K20.2-031;name2=CPNE1 chr20 ENCODE exon 33683676 33683721 . - . Parent=gene1455 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1455 chr20 ENCODE exon 33706538 33706680 . - . Parent=gene1455 chr20 ENCODE exon 33710266 33710350 . - . Parent=gene1455 chr20 ENCODE exon 33724091 33724180 . - . Parent=gene1455 chr20 ENCODE exon 33724937 33725020 . - . Parent=gene1455 chr20 ENCODE exon 33725686 33725736 . - . Parent=gene1455 ### chr20 ENCODE gene 33683676 33725880 . - . ID=gene1456;name2=CPNE1;Name=RP1-309K20.2-029 chr20 ENCODE exon 33683676 33683721 . - . Parent=gene1456 chr20 ENCODE exon 33683853 33684032 . - . Parent=gene1456 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1456 chr20 ENCODE exon 33706538 33706680 . - . Parent=gene1456 chr20 ENCODE exon 33710266 33710350 . - . Parent=gene1456 chr20 ENCODE exon 33724091 33724180 . - . Parent=gene1456 chr20 ENCODE exon 33724937 33725020 . - . Parent=gene1456 chr20 ENCODE exon 33725686 33725767 . - . Parent=gene1456 chr20 ENCODE exon 33725848 33725880 . - . Parent=gene1456 ### chr20 ENCODE gene 33683962 33715894 . - . ID=gene1457;Name=RP1-309K20.2-021;name2=CPNE1 chr20 ENCODE exon 33683962 33684032 . - . Parent=gene1457 chr20 ENCODE CDS 33683962 33684032 . - 0 Parent=gene1457 chr20 ENCODE exon 33684131 33684259 . - . Parent=gene1457 chr20 ENCODE CDS 33684131 33684259 . - 0 Parent=gene1457 chr20 ENCODE exon 33715695 33715894 . - . Parent=gene1457 ### chr20 ENCODE gene 33700261 33716252 . - . ID=gene1458;name2=RBM12;Name=RP1-309K20.5-001 chr20 ENCODE exon 33700261 33706680 . - . Parent=gene1458 chr20 ENCODE CDS 33703860 33706658 . - 0 Parent=gene1458 chr20 ENCODE exon 33710266 33710350 . - . Parent=gene1458 chr20 ENCODE exon 33716096 33716252 . - . Parent=gene1458 ### chr20 ENCODE gene 33701478 33716224 . - . ID=gene1459;Name=RP1-309K20.5-003;name2=RBM12 chr20 ENCODE exon 33701478 33706680 . - . Parent=gene1459 chr20 ENCODE CDS 33703860 33706658 . - 0 Parent=gene1459 chr20 ENCODE exon 33716096 33716224 . - . Parent=gene1459 ### chr20 ENCODE gene 33701662 33716236 . - . ID=gene1460;Name=RP1-309K20.5-002;name2=RBM12 chr20 ENCODE exon 33701662 33706680 . - . Parent=gene1460 chr20 ENCODE CDS 33703860 33706658 . - 0 Parent=gene1460 chr20 ENCODE exon 33710266 33710318 . - . Parent=gene1460 chr20 ENCODE exon 33716096 33716236 . - . Parent=gene1460 ### chr20 ENCODE gene 33705786 33716225 . - . ID=gene1461;Name=RP1-309K20.5-004;name2=RBM12 chr20 ENCODE CDS 33705786 33706658 . - 0 Parent=gene1461 chr20 ENCODE exon 33705786 33706680 . - . Parent=gene1461 chr20 ENCODE exon 33710266 33710350 . - . Parent=gene1461 chr20 ENCODE exon 33716138 33716225 . - . Parent=gene1461 ### chr20 ENCODE gene 33710266 33716236 . - . ID=gene1462;Name=RP1-309K20.2-024;name2=CPNE1 chr20 ENCODE exon 33710266 33710350 . - . Parent=gene1462 chr20 ENCODE exon 33715695 33716236 . - . Parent=gene1462 ### chr20 ENCODE gene 33720024 33750695 . - . ID=gene1463;Name=RP1-309K20.1-001;name2=NFS1 chr20 ENCODE exon 33720024 33721021 . - . Parent=gene1463 chr20 ENCODE CDS 33720958 33721021 . - 1 Parent=gene1463 chr20 ENCODE exon 33724091 33724180 . - . Parent=gene1463 chr20 ENCODE CDS 33724091 33724180 . - 1 Parent=gene1463 chr20 ENCODE exon 33724937 33725020 . - . Parent=gene1463 chr20 ENCODE CDS 33724937 33725020 . - 1 Parent=gene1463 chr20 ENCODE exon 33725686 33725767 . - . Parent=gene1463 chr20 ENCODE CDS 33725686 33725767 . - 2 Parent=gene1463 chr20 ENCODE exon 33725848 33725953 . - . Parent=gene1463 chr20 ENCODE CDS 33725848 33725953 . - 0 Parent=gene1463 chr20 ENCODE exon 33726381 33726538 . - . Parent=gene1463 chr20 ENCODE CDS 33726381 33726538 . - 2 Parent=gene1463 chr20 ENCODE exon 33732073 33732207 . - . Parent=gene1463 chr20 ENCODE CDS 33732073 33732207 . - 2 Parent=gene1463 chr20 ENCODE exon 33733224 33733317 . - . Parent=gene1463 chr20 ENCODE CDS 33733224 33733317 . - 0 Parent=gene1463 chr20 ENCODE exon 33741749 33741901 . - . Parent=gene1463 chr20 ENCODE CDS 33741749 33741901 . - 0 Parent=gene1463 chr20 ENCODE exon 33747713 33747796 . - . Parent=gene1463 chr20 ENCODE CDS 33747713 33747796 . - 0 Parent=gene1463 chr20 ENCODE exon 33749020 33749136 . - . Parent=gene1463 chr20 ENCODE CDS 33749020 33749136 . - 0 Parent=gene1463 chr20 ENCODE exon 33749817 33749926 . - . Parent=gene1463 chr20 ENCODE CDS 33749817 33749926 . - 2 Parent=gene1463 chr20 ENCODE CDS 33750528 33750624 . - 0 Parent=gene1463 chr20 ENCODE exon 33750528 33750695 . - . Parent=gene1463 ### chr20 ENCODE gene 33720035 33750525 . - . ID=gene1464;Name=RP1-309K20.1-003;name2=NFS1 chr20 ENCODE exon 33720035 33721021 . - . Parent=gene1464 chr20 ENCODE CDS 33720958 33721021 . - 1 Parent=gene1464 chr20 ENCODE exon 33724091 33724180 . - . Parent=gene1464 chr20 ENCODE CDS 33724091 33724180 . - 1 Parent=gene1464 chr20 ENCODE exon 33724937 33725020 . - . Parent=gene1464 chr20 ENCODE CDS 33724937 33725020 . - 1 Parent=gene1464 chr20 ENCODE exon 33725686 33725767 . - . Parent=gene1464 chr20 ENCODE CDS 33725686 33725767 . - 2 Parent=gene1464 chr20 ENCODE exon 33725848 33725953 . - . Parent=gene1464 chr20 ENCODE CDS 33725848 33725953 . - 0 Parent=gene1464 chr20 ENCODE exon 33726381 33726538 . - . Parent=gene1464 chr20 ENCODE CDS 33726381 33726538 . - 2 Parent=gene1464 chr20 ENCODE exon 33732073 33732207 . - . Parent=gene1464 chr20 ENCODE CDS 33732073 33732207 . - 2 Parent=gene1464 chr20 ENCODE exon 33733224 33733317 . - . Parent=gene1464 chr20 ENCODE CDS 33733224 33733317 . - 0 Parent=gene1464 chr20 ENCODE exon 33741749 33741901 . - . Parent=gene1464 chr20 ENCODE CDS 33741749 33741901 . - 0 Parent=gene1464 chr20 ENCODE exon 33747713 33747796 . - . Parent=gene1464 chr20 ENCODE CDS 33747713 33747796 . - 0 Parent=gene1464 chr20 ENCODE exon 33749020 33749136 . - . Parent=gene1464 chr20 ENCODE CDS 33749020 33749136 . - 0 Parent=gene1464 chr20 ENCODE CDS 33749817 33749843 . - 0 Parent=gene1464 chr20 ENCODE exon 33749817 33749926 . - . Parent=gene1464 chr20 ENCODE exon 33750081 33750525 . - . Parent=gene1464 ### chr20 ENCODE gene 33720300 33725402 . - . ID=gene1465;Name=RP1-309K20.1-005;name2=NFS1 chr20 ENCODE exon 33720300 33721021 . - . Parent=gene1465 chr20 ENCODE exon 33724091 33724180 . - . Parent=gene1465 chr20 ENCODE exon 33724937 33725020 . - . Parent=gene1465 chr20 ENCODE exon 33725322 33725402 . - . Parent=gene1465 ### chr20 ENCODE gene 33720300 33727522 . - . ID=gene1466;Name=RP1-309K20.1-004;name2=NFS1 chr20 ENCODE exon 33720300 33721021 . - . Parent=gene1466 chr20 ENCODE exon 33724091 33724180 . - . Parent=gene1466 chr20 ENCODE exon 33724937 33725020 . - . Parent=gene1466 chr20 ENCODE exon 33725686 33725767 . - . Parent=gene1466 chr20 ENCODE exon 33725848 33727522 . - . Parent=gene1466 ### chr20 ENCODE gene 33720319 33750685 . - . ID=gene1467;Name=RP1-309K20.1-009;name2=NFS1 chr20 ENCODE exon 33720319 33721021 . - . Parent=gene1467 chr20 ENCODE CDS 33720958 33721021 . - 1 Parent=gene1467 chr20 ENCODE exon 33724091 33724180 . - . Parent=gene1467 chr20 ENCODE CDS 33724091 33724180 . - 1 Parent=gene1467 chr20 ENCODE exon 33724937 33725020 . - . Parent=gene1467 chr20 ENCODE CDS 33724937 33725020 . - 1 Parent=gene1467 chr20 ENCODE exon 33725686 33725767 . - . Parent=gene1467 chr20 ENCODE CDS 33725686 33725767 . - 2 Parent=gene1467 chr20 ENCODE exon 33725848 33725953 . - . Parent=gene1467 chr20 ENCODE CDS 33725848 33725953 . - 0 Parent=gene1467 chr20 ENCODE exon 33726381 33726538 . - . Parent=gene1467 chr20 ENCODE CDS 33726381 33726538 . - 2 Parent=gene1467 chr20 ENCODE exon 33732073 33732207 . - . Parent=gene1467 chr20 ENCODE CDS 33732073 33732207 . - 2 Parent=gene1467 chr20 ENCODE exon 33733224 33733317 . - . Parent=gene1467 chr20 ENCODE CDS 33733224 33733317 . - 0 Parent=gene1467 chr20 ENCODE exon 33741749 33741901 . - . Parent=gene1467 chr20 ENCODE CDS 33741749 33741901 . - 0 Parent=gene1467 chr20 ENCODE exon 33747713 33747796 . - . Parent=gene1467 chr20 ENCODE CDS 33747713 33747796 . - 0 Parent=gene1467 chr20 ENCODE exon 33749020 33749136 . - . Parent=gene1467 chr20 ENCODE CDS 33749020 33749136 . - 0 Parent=gene1467 chr20 ENCODE CDS 33749817 33749843 . - 0 Parent=gene1467 chr20 ENCODE exon 33749817 33749926 . - . Parent=gene1467 chr20 ENCODE exon 33750646 33750685 . - . Parent=gene1467 ### chr20 ENCODE gene 33720329 33750691 . - . ID=gene1468;Name=RP1-309K20.1-002;name2=NFS1 chr20 ENCODE exon 33720329 33721021 . - . Parent=gene1468 chr20 ENCODE exon 33724091 33724180 . - . Parent=gene1468 chr20 ENCODE exon 33724937 33725020 . - . Parent=gene1468 chr20 ENCODE exon 33725686 33725767 . - . Parent=gene1468 chr20 ENCODE exon 33725848 33725953 . - . Parent=gene1468 chr20 ENCODE exon 33732073 33732207 . - . Parent=gene1468 chr20 ENCODE exon 33733224 33733317 . - . Parent=gene1468 chr20 ENCODE exon 33741749 33741901 . - . Parent=gene1468 chr20 ENCODE exon 33747713 33747796 . - . Parent=gene1468 chr20 ENCODE exon 33749020 33749136 . - . Parent=gene1468 chr20 ENCODE exon 33749817 33749926 . - . Parent=gene1468 chr20 ENCODE exon 33750646 33750691 . - . Parent=gene1468 ### chr20 ENCODE gene 33725094 33726134 . - . ID=gene1469;Name=RP1-309K20.1-008;name2=NFS1 chr20 ENCODE exon 33725094 33725767 . - . Parent=gene1469 chr20 ENCODE exon 33725848 33726134 . - . Parent=gene1469 ### chr20 ENCODE gene 33725867 33734127 . - . ID=gene1470;Name=RP1-309K20.1-007;name2=NFS1 chr20 ENCODE exon 33725867 33725953 . - . Parent=gene1470 chr20 ENCODE exon 33726381 33726538 . - . Parent=gene1470 chr20 ENCODE exon 33732073 33732207 . - . Parent=gene1470 chr20 ENCODE exon 33733224 33733317 . - . Parent=gene1470 chr20 ENCODE exon 33734000 33734127 . - . Parent=gene1470 ### chr20 ENCODE gene 33733301 33750688 . - . ID=gene1471;Name=RP1-309K20.1-011;name2=NFS1 chr20 ENCODE exon 33733301 33733317 . - . Parent=gene1471 chr20 ENCODE exon 33741749 33741901 . - . Parent=gene1471 chr20 ENCODE exon 33743585 33743706 . - . Parent=gene1471 chr20 ENCODE exon 33747713 33747796 . - . Parent=gene1471 chr20 ENCODE exon 33749020 33749136 . - . Parent=gene1471 chr20 ENCODE exon 33749817 33749926 . - . Parent=gene1471 chr20 ENCODE exon 33750646 33750688 . - . Parent=gene1471 ### chr20 ENCODE gene 33741749 33750688 . - . ID=gene1472;Name=RP1-309K20.1-012;name2=NFS1 chr20 ENCODE exon 33741749 33741901 . - . Parent=gene1472 chr20 ENCODE exon 33743585 33743706 . - . Parent=gene1472 chr20 ENCODE exon 33747713 33747796 . - . Parent=gene1472 chr20 ENCODE exon 33749020 33749136 . - . Parent=gene1472 chr20 ENCODE exon 33749817 33749926 . - . Parent=gene1472 chr20 ENCODE exon 33750528 33750688 . - . Parent=gene1472 ### chr20 ENCODE gene 33741807 33750525 . - . ID=gene1473;Name=RP1-309K20.1-013;name2=NFS1 chr20 ENCODE exon 33741807 33741901 . - . Parent=gene1473 chr20 ENCODE CDS 33741807 33741901 . - 0 Parent=gene1473 chr20 ENCODE exon 33747713 33747796 . - . Parent=gene1473 chr20 ENCODE CDS 33747713 33747796 . - 0 Parent=gene1473 chr20 ENCODE exon 33749020 33749136 . - . Parent=gene1473 chr20 ENCODE CDS 33749020 33749136 . - 0 Parent=gene1473 chr20 ENCODE CDS 33749817 33749843 . - 0 Parent=gene1473 chr20 ENCODE exon 33749817 33749926 . - . Parent=gene1473 chr20 ENCODE exon 33750381 33750525 . - . Parent=gene1473 ### chr20 ENCODE gene 33741862 33750691 . - . ID=gene1474;Name=RP1-309K20.1-010;name2=NFS1 chr20 ENCODE exon 33741862 33741901 . - . Parent=gene1474 chr20 ENCODE exon 33743585 33743632 . - . Parent=gene1474 chr20 ENCODE exon 33747713 33747796 . - . Parent=gene1474 chr20 ENCODE exon 33749020 33749136 . - . Parent=gene1474 chr20 ENCODE exon 33749817 33749926 . - . Parent=gene1474 chr20 ENCODE exon 33750528 33750691 . - . Parent=gene1474 ### chr20 ENCODE gene 33745908 33750640 . - . ID=gene1475;Name=RP1-309K20.1-006;name2=NFS1 chr20 ENCODE exon 33745908 33746221 . - . Parent=gene1475 chr20 ENCODE CDS 33746060 33746221 . - 0 Parent=gene1475 chr20 ENCODE exon 33747713 33747796 . - . Parent=gene1475 chr20 ENCODE CDS 33747713 33747796 . - 0 Parent=gene1475 chr20 ENCODE exon 33749020 33749136 . - . Parent=gene1475 chr20 ENCODE CDS 33749020 33749136 . - 0 Parent=gene1475 chr20 ENCODE exon 33749817 33749926 . - . Parent=gene1475 chr20 ENCODE CDS 33749817 33749926 . - 2 Parent=gene1475 chr20 ENCODE CDS 33750528 33750624 . - 0 Parent=gene1475 chr20 ENCODE exon 33750528 33750640 . - . Parent=gene1475 ### chr20 ENCODE gene 33750608 33752320 . + . ID=gene1476;Name=RP11-353C18.54-003;name2=C20orf52 chr20 ENCODE exon 33750608 33750787 . + . Parent=gene1476 chr20 ENCODE exon 33750969 33751099 . + . Parent=gene1476 chr20 ENCODE CDS 33750969 33751099 . + 0 Parent=gene1476 chr20 ENCODE CDS 33752134 33752242 . + 1 Parent=gene1476 chr20 ENCODE exon 33752134 33752320 . + . Parent=gene1476 ### chr20 ENCODE gene 33750689 33752320 . + . ID=gene1477;name2=C20orf52;Name=RP11-353C18.54-001 chr20 ENCODE exon 33750689 33750792 . + . Parent=gene1477 chr20 ENCODE exon 33750969 33751099 . + . Parent=gene1477 chr20 ENCODE CDS 33750969 33751099 . + 0 Parent=gene1477 chr20 ENCODE CDS 33752134 33752242 . + 1 Parent=gene1477 chr20 ENCODE exon 33752134 33752320 . + . Parent=gene1477 ### chr20 ENCODE gene 33750778 33752314 . + . ID=gene1478;Name=RP11-353C18.54-004;name2=C20orf52 chr20 ENCODE exon 33750778 33750792 . + . Parent=gene1478 chr20 ENCODE exon 33750969 33751099 . + . Parent=gene1478 chr20 ENCODE CDS 33750969 33751099 . + 0 Parent=gene1478 chr20 ENCODE CDS 33752111 33752159 . + 1 Parent=gene1478 chr20 ENCODE exon 33752111 33752314 . + . Parent=gene1478 ### chr20 ENCODE gene 33750787 33752316 . + . ID=gene1479;Name=RP11-353C18.54-002;name2=C20orf52 chr20 ENCODE exon 33750787 33751099 . + . Parent=gene1479 chr20 ENCODE CDS 33750969 33751099 . + 0 Parent=gene1479 chr20 ENCODE CDS 33752134 33752242 . + 1 Parent=gene1479 chr20 ENCODE exon 33752134 33752316 . + . Parent=gene1479 ### chr20 ENCODE gene 33754946 33790373 . - . ID=gene1480;Name=RP11-353C18.2-009;name2=RBM39 chr20 ENCODE exon 33754946 33755917 . - . Parent=gene1480 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1480 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1480 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1480 chr20 ENCODE exon 33760560 33760592 . - . Parent=gene1480 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1480 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1480 chr20 ENCODE exon 33768076 33768141 . - . Parent=gene1480 chr20 ENCODE exon 33773076 33773213 . - . Parent=gene1480 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1480 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1480 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1480 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1480 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1480 chr20 ENCODE exon 33790304 33790373 . - . Parent=gene1480 ### chr20 ENCODE gene 33754946 33793287 . - . ID=gene1481;Name=RP11-353C18.2-002;name2=RBM39 chr20 ENCODE exon 33754946 33755917 . - . Parent=gene1481 chr20 ENCODE CDS 33755817 33755917 . - 2 Parent=gene1481 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1481 chr20 ENCODE CDS 33756004 33756082 . - 0 Parent=gene1481 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1481 chr20 ENCODE CDS 33756561 33756666 . - 1 Parent=gene1481 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1481 chr20 ENCODE CDS 33758456 33758537 . - 2 Parent=gene1481 chr20 ENCODE exon 33760560 33760610 . - . Parent=gene1481 chr20 ENCODE CDS 33760560 33760610 . - 2 Parent=gene1481 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1481 chr20 ENCODE CDS 33764355 33764432 . - 2 Parent=gene1481 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1481 chr20 ENCODE CDS 33765521 33765725 . - 0 Parent=gene1481 chr20 ENCODE exon 33768076 33768141 . - . Parent=gene1481 chr20 ENCODE CDS 33768076 33768141 . - 0 Parent=gene1481 chr20 ENCODE exon 33773076 33773213 . - . Parent=gene1481 chr20 ENCODE CDS 33773076 33773213 . - 0 Parent=gene1481 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1481 chr20 ENCODE CDS 33775906 33776058 . - 0 Parent=gene1481 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1481 chr20 ENCODE CDS 33776374 33776491 . - 1 Parent=gene1481 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1481 chr20 ENCODE CDS 33780648 33780701 . - 1 Parent=gene1481 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1481 chr20 ENCODE CDS 33780798 33780863 . - 1 Parent=gene1481 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1481 chr20 ENCODE CDS 33783277 33783471 . - 1 Parent=gene1481 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1481 chr20 ENCODE CDS 33790304 33790353 . - 0 Parent=gene1481 chr20 ENCODE CDS 33792160 33792210 . - 0 Parent=gene1481 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1481 chr20 ENCODE exon 33793277 33793287 . - . Parent=gene1481 ### chr20 ENCODE gene 33754946 33793648 . - . ID=gene1482;Name=RP11-353C18.2-001;name2=RBM39 chr20 ENCODE exon 33754946 33755917 . - . Parent=gene1482 chr20 ENCODE CDS 33755817 33755917 . - 2 Parent=gene1482 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1482 chr20 ENCODE CDS 33756004 33756082 . - 0 Parent=gene1482 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1482 chr20 ENCODE CDS 33756561 33756666 . - 1 Parent=gene1482 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1482 chr20 ENCODE CDS 33758456 33758537 . - 2 Parent=gene1482 chr20 ENCODE exon 33760560 33760592 . - . Parent=gene1482 chr20 ENCODE CDS 33760560 33760592 . - 2 Parent=gene1482 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1482 chr20 ENCODE CDS 33764355 33764432 . - 2 Parent=gene1482 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1482 chr20 ENCODE CDS 33765521 33765725 . - 0 Parent=gene1482 chr20 ENCODE exon 33768076 33768141 . - . Parent=gene1482 chr20 ENCODE CDS 33768076 33768141 . - 0 Parent=gene1482 chr20 ENCODE exon 33773076 33773213 . - . Parent=gene1482 chr20 ENCODE CDS 33773076 33773213 . - 0 Parent=gene1482 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1482 chr20 ENCODE CDS 33775906 33776058 . - 0 Parent=gene1482 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1482 chr20 ENCODE CDS 33776374 33776491 . - 1 Parent=gene1482 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1482 chr20 ENCODE CDS 33780648 33780701 . - 1 Parent=gene1482 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1482 chr20 ENCODE CDS 33780798 33780863 . - 1 Parent=gene1482 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1482 chr20 ENCODE CDS 33783277 33783471 . - 1 Parent=gene1482 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1482 chr20 ENCODE CDS 33790304 33790353 . - 0 Parent=gene1482 chr20 ENCODE CDS 33792160 33792210 . - 0 Parent=gene1482 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1482 chr20 ENCODE exon 33793277 33793648 . - . Parent=gene1482 ### chr20 ENCODE gene 33754947 33793557 . - . ID=gene1483;Name=RP11-353C18.2-008;name2=RBM39 chr20 ENCODE exon 33754947 33755917 . - . Parent=gene1483 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1483 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1483 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1483 chr20 ENCODE exon 33759276 33759328 . - . Parent=gene1483 chr20 ENCODE exon 33760560 33760592 . - . Parent=gene1483 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1483 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1483 chr20 ENCODE exon 33768076 33768141 . - . Parent=gene1483 chr20 ENCODE exon 33773076 33773213 . - . Parent=gene1483 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1483 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1483 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1483 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1483 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1483 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1483 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1483 chr20 ENCODE exon 33793277 33793557 . - . Parent=gene1483 ### chr20 ENCODE gene 33754947 33793610 . - . ID=gene1484;Name=RP11-353C18.2-006;name2=RBM39 chr20 ENCODE exon 33754947 33755917 . - . Parent=gene1484 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1484 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1484 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1484 chr20 ENCODE exon 33760560 33760610 . - . Parent=gene1484 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1484 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1484 chr20 ENCODE exon 33768076 33768141 . - . Parent=gene1484 chr20 ENCODE exon 33773076 33773213 . - . Parent=gene1484 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1484 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1484 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1484 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1484 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1484 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1484 chr20 ENCODE exon 33791861 33791933 . - . Parent=gene1484 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1484 chr20 ENCODE exon 33793277 33793610 . - . Parent=gene1484 ### chr20 ENCODE gene 33755662 33764539 . - . ID=gene1485;Name=RP11-353C18.2-032;name2=RBM39 chr20 ENCODE exon 33755662 33755917 . - . Parent=gene1485 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1485 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1485 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1485 chr20 ENCODE exon 33760560 33760610 . - . Parent=gene1485 chr20 ENCODE exon 33764355 33764539 . - . Parent=gene1485 ### chr20 ENCODE gene 33755662 33765587 . - . ID=gene1486;Name=RP11-353C18.2-029;name2=RBM39 chr20 ENCODE exon 33755662 33755917 . - . Parent=gene1486 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1486 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1486 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1486 chr20 ENCODE exon 33760560 33760645 . - . Parent=gene1486 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1486 chr20 ENCODE exon 33765521 33765587 . - . Parent=gene1486 ### chr20 ENCODE gene 33755662 33793584 . - . ID=gene1487;Name=RP11-353C18.2-007;name2=RBM39 chr20 ENCODE exon 33755662 33755917 . - . Parent=gene1487 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1487 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1487 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1487 chr20 ENCODE exon 33760560 33760592 . - . Parent=gene1487 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1487 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1487 chr20 ENCODE exon 33768076 33768141 . - . Parent=gene1487 chr20 ENCODE exon 33773076 33773213 . - . Parent=gene1487 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1487 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1487 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1487 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1487 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1487 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1487 chr20 ENCODE exon 33791861 33791933 . - . Parent=gene1487 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1487 chr20 ENCODE exon 33793277 33793584 . - . Parent=gene1487 ### chr20 ENCODE gene 33755662 33793592 . - . ID=gene1488;Name=RP11-353C18.2-005;name2=RBM39 chr20 ENCODE exon 33755662 33755917 . - . Parent=gene1488 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1488 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1488 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1488 chr20 ENCODE exon 33760560 33760610 . - . Parent=gene1488 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1488 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1488 chr20 ENCODE exon 33768076 33768141 . - . Parent=gene1488 chr20 ENCODE exon 33773076 33773213 . - . Parent=gene1488 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1488 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1488 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1488 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1488 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1488 chr20 ENCODE exon 33785522 33785593 . - . Parent=gene1488 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1488 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1488 chr20 ENCODE exon 33793277 33793592 . - . Parent=gene1488 ### chr20 ENCODE gene 33755664 33784142 . - . ID=gene1489;Name=RP11-353C18.2-010;name2=RBM39 chr20 ENCODE exon 33755664 33755917 . - . Parent=gene1489 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1489 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1489 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1489 chr20 ENCODE exon 33760560 33760610 . - . Parent=gene1489 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1489 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1489 chr20 ENCODE exon 33768076 33768141 . - . Parent=gene1489 chr20 ENCODE exon 33773076 33773213 . - . Parent=gene1489 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1489 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1489 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1489 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1489 chr20 ENCODE exon 33783277 33784142 . - . Parent=gene1489 ### chr20 ENCODE gene 33755713 33758697 . - . ID=gene1490;Name=RP11-353C18.2-033;name2=RBM39 chr20 ENCODE exon 33755713 33755917 . - . Parent=gene1490 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1490 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1490 chr20 ENCODE exon 33758456 33758697 . - . Parent=gene1490 ### chr20 ENCODE gene 33755713 33759324 . - . ID=gene1491;Name=RP11-353C18.2-011;name2=RBM39 chr20 ENCODE exon 33755713 33755917 . - . Parent=gene1491 chr20 ENCODE exon 33756004 33756666 . - . Parent=gene1491 chr20 ENCODE exon 33758456 33759324 . - . Parent=gene1491 ### chr20 ENCODE gene 33755736 33756735 . - . ID=gene1492;name2=RBM39;Name=RP11-353C18.2-034 chr20 ENCODE exon 33755736 33755917 . - . Parent=gene1492 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1492 chr20 ENCODE exon 33756561 33756735 . - . Parent=gene1492 ### chr20 ENCODE gene 33755741 33764702 . - . ID=gene1493;Name=RP11-353C18.2-031;name2=RBM39 chr20 ENCODE exon 33755741 33755917 . - . Parent=gene1493 chr20 ENCODE exon 33756004 33756082 . - . Parent=gene1493 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1493 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1493 chr20 ENCODE exon 33760560 33760592 . - . Parent=gene1493 chr20 ENCODE exon 33764355 33764702 . - . Parent=gene1493 ### chr20 ENCODE gene 33756039 33780680 . - . ID=gene1494;Name=RP11-353C18.2-035;name2=RBM39 chr20 ENCODE exon 33756039 33756082 . - . Parent=gene1494 chr20 ENCODE CDS 33756039 33756082 . - 2 Parent=gene1494 chr20 ENCODE exon 33756561 33756666 . - . Parent=gene1494 chr20 ENCODE CDS 33756561 33756666 . - 0 Parent=gene1494 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1494 chr20 ENCODE CDS 33758456 33758537 . - 1 Parent=gene1494 chr20 ENCODE exon 33760560 33760610 . - . Parent=gene1494 chr20 ENCODE CDS 33760560 33760610 . - 1 Parent=gene1494 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1494 chr20 ENCODE CDS 33764355 33764432 . - 1 Parent=gene1494 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1494 chr20 ENCODE CDS 33765521 33765725 . - 2 Parent=gene1494 chr20 ENCODE exon 33773076 33773213 . - . Parent=gene1494 chr20 ENCODE CDS 33773076 33773213 . - 2 Parent=gene1494 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1494 chr20 ENCODE CDS 33775906 33776058 . - 2 Parent=gene1494 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1494 chr20 ENCODE CDS 33776374 33776491 . - 0 Parent=gene1494 chr20 ENCODE exon 33780648 33780680 . - . Parent=gene1494 chr20 ENCODE CDS 33780648 33780680 . - 0 Parent=gene1494 ### chr20 ENCODE gene 33756598 33764751 . - . ID=gene1495;Name=RP11-353C18.2-027;name2=RBM39 chr20 ENCODE exon 33756598 33756666 . - . Parent=gene1495 chr20 ENCODE exon 33758456 33758537 . - . Parent=gene1495 chr20 ENCODE exon 33760560 33760592 . - . Parent=gene1495 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1495 chr20 ENCODE exon 33764630 33764751 . - . Parent=gene1495 ### chr20 ENCODE gene 33760140 33764432 . - . ID=gene1496;Name=RP11-353C18.2-030;name2=RBM39 chr20 ENCODE exon 33760140 33760610 . - . Parent=gene1496 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1496 ### chr20 ENCODE gene 33760328 33761902 . - . ID=gene1497;Name=RP11-353C18.2-041;name2=RBM39 chr20 ENCODE exon 33760328 33760592 . - . Parent=gene1497 chr20 ENCODE exon 33761619 33761902 . - . Parent=gene1497 ### chr20 ENCODE gene 33760369 33768123 . - . ID=gene1498;Name=RP11-353C18.2-028;name2=RBM39 chr20 ENCODE exon 33760369 33760592 . - . Parent=gene1498 chr20 ENCODE exon 33764355 33764432 . - . Parent=gene1498 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1498 chr20 ENCODE exon 33768076 33768123 . - . Parent=gene1498 ### chr20 ENCODE gene 33764654 33776399 . - . ID=gene1499;Name=RP11-353C18.2-040;name2=RBM39 chr20 ENCODE exon 33764654 33764743 . - . Parent=gene1499 chr20 ENCODE exon 33765168 33765193 . - . Parent=gene1499 chr20 ENCODE exon 33765521 33765725 . - . Parent=gene1499 chr20 ENCODE exon 33768076 33768141 . - . Parent=gene1499 chr20 ENCODE exon 33773076 33773213 . - . Parent=gene1499 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1499 chr20 ENCODE exon 33776374 33776399 . - . Parent=gene1499 ### chr20 ENCODE gene 33765144 33765689 . - . ID=gene1500;Name=RP11-353C18.2-036;name2=RBM39 chr20 ENCODE exon 33765144 33765193 . - . Parent=gene1500 chr20 ENCODE exon 33765521 33765689 . - . Parent=gene1500 ### chr20 ENCODE gene 33773203 33793594 . - . ID=gene1501;Name=RP11-353C18.2-020;name2=RBM39 chr20 ENCODE exon 33773203 33773213 . - . Parent=gene1501 chr20 ENCODE CDS 33773203 33773213 . - 0 Parent=gene1501 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1501 chr20 ENCODE CDS 33775906 33776058 . - 0 Parent=gene1501 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1501 chr20 ENCODE CDS 33776374 33776491 . - 1 Parent=gene1501 chr20 ENCODE exon 33780648 33780698 . - . Parent=gene1501 chr20 ENCODE CDS 33780648 33780698 . - 1 Parent=gene1501 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1501 chr20 ENCODE CDS 33780798 33780863 . - 1 Parent=gene1501 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1501 chr20 ENCODE CDS 33783277 33783471 . - 1 Parent=gene1501 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1501 chr20 ENCODE CDS 33790304 33790353 . - 0 Parent=gene1501 chr20 ENCODE CDS 33792160 33792210 . - 0 Parent=gene1501 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1501 chr20 ENCODE exon 33793277 33793594 . - . Parent=gene1501 ### chr20 ENCODE gene 33775906 33793449 . - . ID=gene1502;Name=RP11-353C18.2-017;name2=RBM39 chr20 ENCODE exon 33775906 33776058 . - . Parent=gene1502 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1502 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1502 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1502 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1502 chr20 ENCODE exon 33785522 33785593 . - . Parent=gene1502 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1502 chr20 ENCODE exon 33791861 33791933 . - . Parent=gene1502 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1502 chr20 ENCODE exon 33793277 33793449 . - . Parent=gene1502 ### chr20 ENCODE gene 33775921 33793572 . - . ID=gene1503;name2=RBM39;Name=RP11-353C18.2-015 chr20 ENCODE exon 33775921 33776058 . - . Parent=gene1503 chr20 ENCODE CDS 33775921 33776058 . - 0 Parent=gene1503 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1503 chr20 ENCODE CDS 33776374 33776491 . - 1 Parent=gene1503 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1503 chr20 ENCODE CDS 33780648 33780701 . - 1 Parent=gene1503 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1503 chr20 ENCODE CDS 33783277 33783471 . - 1 Parent=gene1503 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1503 chr20 ENCODE CDS 33790304 33790353 . - 0 Parent=gene1503 chr20 ENCODE CDS 33792160 33792210 . - 0 Parent=gene1503 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1503 chr20 ENCODE exon 33793277 33793572 . - . Parent=gene1503 ### chr20 ENCODE gene 33776012 33792945 . - . ID=gene1504;Name=RP11-353C18.2-018;name2=RBM39 chr20 ENCODE exon 33776012 33776058 . - . Parent=gene1504 chr20 ENCODE CDS 33776012 33776058 . - 0 Parent=gene1504 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1504 chr20 ENCODE CDS 33776374 33776491 . - 1 Parent=gene1504 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1504 chr20 ENCODE CDS 33780648 33780701 . - 1 Parent=gene1504 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1504 chr20 ENCODE CDS 33780798 33780863 . - 1 Parent=gene1504 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1504 chr20 ENCODE CDS 33783277 33783471 . - 1 Parent=gene1504 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1504 chr20 ENCODE CDS 33790304 33790353 . - 0 Parent=gene1504 chr20 ENCODE CDS 33792160 33792210 . - 0 Parent=gene1504 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1504 chr20 ENCODE exon 33792824 33792945 . - . Parent=gene1504 ### chr20 ENCODE gene 33776051 33790924 . - . ID=gene1505;Name=RP11-353C18.2-023;name2=RBM39 chr20 ENCODE exon 33776051 33776058 . - . Parent=gene1505 chr20 ENCODE exon 33776374 33776491 . - . Parent=gene1505 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1505 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1505 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1505 chr20 ENCODE exon 33790304 33790924 . - . Parent=gene1505 ### chr20 ENCODE gene 33776401 33791933 . - . ID=gene1506;Name=RP11-353C18.2-021;name2=RBM39 chr20 ENCODE exon 33776401 33776491 . - . Parent=gene1506 chr20 ENCODE exon 33780648 33780698 . - . Parent=gene1506 chr20 ENCODE exon 33780798 33780863 . - . Parent=gene1506 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1506 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1506 chr20 ENCODE exon 33791861 33791933 . - . Parent=gene1506 ### chr20 ENCODE gene 33776460 33790619 . - . ID=gene1507;Name=RP11-353C18.2-022;name2=RBM39 chr20 ENCODE exon 33776460 33776491 . - . Parent=gene1507 chr20 ENCODE exon 33780648 33780701 . - . Parent=gene1507 chr20 ENCODE exon 33780798 33780887 . - . Parent=gene1507 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1507 chr20 ENCODE exon 33790304 33790619 . - . Parent=gene1507 ### chr20 ENCODE gene 33780658 33793294 . - . ID=gene1508;name2=RBM39;Name=RP11-353C18.2-019 chr20 ENCODE exon 33780658 33780698 . - . Parent=gene1508 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1508 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1508 chr20 ENCODE exon 33791861 33791933 . - . Parent=gene1508 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1508 chr20 ENCODE exon 33793277 33793294 . - . Parent=gene1508 ### chr20 ENCODE gene 33782696 33790476 . - . ID=gene1509;name2=RBM39;Name=RP11-353C18.2-026 chr20 ENCODE exon 33782696 33783471 . - . Parent=gene1509 chr20 ENCODE exon 33790304 33790476 . - . Parent=gene1509 ### chr20 ENCODE gene 33782696 33792173 . - . ID=gene1510;Name=RP11-353C18.2-039;name2=RBM39 chr20 ENCODE exon 33782696 33783471 . - . Parent=gene1510 chr20 ENCODE CDS 33783276 33783471 . - 2 Parent=gene1510 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1510 chr20 ENCODE CDS 33790304 33790353 . - 1 Parent=gene1510 chr20 ENCODE exon 33792160 33792173 . - . Parent=gene1510 chr20 ENCODE CDS 33792160 33792173 . - 0 Parent=gene1510 ### chr20 ENCODE gene 33783252 33793514 . - . ID=gene1511;Name=RP11-353C18.2-016;name2=RBM39 chr20 ENCODE exon 33783252 33783471 . - . Parent=gene1511 chr20 ENCODE exon 33785522 33785593 . - . Parent=gene1511 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1511 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1511 chr20 ENCODE exon 33793277 33793514 . - . Parent=gene1511 ### chr20 ENCODE gene 33783277 33792226 . - . ID=gene1512;Name=RP11-353C18.2-038;name2=RBM39 chr20 ENCODE exon 33783277 33783471 . - . Parent=gene1512 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1512 chr20 ENCODE exon 33792160 33792226 . - . Parent=gene1512 ### chr20 ENCODE gene 33783396 33790525 . - . ID=gene1513;Name=RP11-353C18.2-025;name2=RBM39 chr20 ENCODE exon 33783396 33783471 . - . Parent=gene1513 chr20 ENCODE exon 33785522 33785593 . - . Parent=gene1513 chr20 ENCODE exon 33790304 33790525 . - . Parent=gene1513 ### chr20 ENCODE gene 33785855 33793594 . - . ID=gene1514;name2=RBM39;Name=RP11-353C18.2-012 chr20 ENCODE exon 33785855 33786417 . - . Parent=gene1514 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1514 chr20 ENCODE exon 33791861 33791933 . - . Parent=gene1514 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1514 chr20 ENCODE exon 33793277 33793594 . - . Parent=gene1514 ### chr20 ENCODE gene 33786103 33787977 . - . ID=gene1515;Name=RP11-353C18.2-037;name2=RBM39 chr20 ENCODE exon 33786103 33786417 . - . Parent=gene1515 chr20 ENCODE exon 33787849 33787977 . - . Parent=gene1515 ### chr20 ENCODE gene 33786132 33793315 . - . ID=gene1516;Name=RP11-353C18.2-024;name2=RBM39 chr20 ENCODE exon 33786132 33786417 . - . Parent=gene1516 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1516 chr20 ENCODE exon 33790729 33790883 . - . Parent=gene1516 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1516 chr20 ENCODE exon 33793277 33793315 . - . Parent=gene1516 ### chr20 ENCODE gene 33786212 33793568 . - . ID=gene1517;Name=RP11-353C18.2-013;name2=RBM39 chr20 ENCODE exon 33786212 33786417 . - . Parent=gene1517 chr20 ENCODE CDS 33786231 33786417 . - 1 Parent=gene1517 chr20 ENCODE exon 33790304 33790353 . - . Parent=gene1517 chr20 ENCODE CDS 33790304 33790353 . - 0 Parent=gene1517 chr20 ENCODE CDS 33792160 33792210 . - 0 Parent=gene1517 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1517 chr20 ENCODE exon 33793277 33793568 . - . Parent=gene1517 ### chr20 ENCODE gene 33790564 33793557 . - . ID=gene1518;Name=RP11-353C18.2-003;name2=RBM39 chr20 ENCODE exon 33790564 33790883 . - . Parent=gene1518 chr20 ENCODE exon 33791861 33791933 . - . Parent=gene1518 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1518 chr20 ENCODE exon 33793277 33793557 . - . Parent=gene1518 ### chr20 ENCODE gene 33791435 33793574 . - . ID=gene1519;Name=RP11-353C18.2-014;name2=RBM39 chr20 ENCODE exon 33791435 33791933 . - . Parent=gene1519 chr20 ENCODE exon 33792160 33792223 . - . Parent=gene1519 chr20 ENCODE exon 33793277 33793574 . - . Parent=gene1519 ### chr20 ENCODE gene 33791547 33793600 . - . ID=gene1520;Name=RP11-353C18.2-004;name2=RBM39 chr20 ENCODE exon 33791547 33792223 . - . Parent=gene1520 chr20 ENCODE exon 33793277 33793600 . - . Parent=gene1520 ### chr21 ENCODE gene 32669578 32687206 . - . ID=gene1521;Name=AP000266.110-001;name2=URB1 chr21 ENCODE exon 32669578 32669663 . - . Parent=gene1521 chr21 ENCODE exon 32672625 32672721 . - . Parent=gene1521 chr21 ENCODE exon 32677602 32677734 . - . Parent=gene1521 chr21 ENCODE exon 32678493 32678644 . - . Parent=gene1521 chr21 ENCODE exon 32679725 32679864 . - . Parent=gene1521 chr21 ENCODE exon 32686949 32687206 . - . Parent=gene1521 ### chr21 ENCODE gene 32706185 32762234 . + . ID=gene1522;Name=AP000272.65-004;name2=C21orf63 chr21 ENCODE exon 32706185 32707192 . + . Parent=gene1522 chr21 ENCODE exon 32747491 32747687 . + . Parent=gene1522 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene1522 chr21 ENCODE exon 32761875 32762234 . + . Parent=gene1522 ### chr21 ENCODE gene 32706221 32795636 . + . ID=gene1523;Name=AP000272.65-009;name2=C21orf63 chr21 ENCODE exon 32706221 32706372 . + . Parent=gene1523 chr21 ENCODE exon 32747491 32747687 . + . Parent=gene1523 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene1523 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene1523 chr21 ENCODE exon 32795596 32795636 . + . Parent=gene1523 ### chr21 ENCODE gene 32706560 32809570 . + . ID=gene1524;Name=AP000272.65-001;name2=C21orf63 chr21 ENCODE exon 32706560 32707192 . + . Parent=gene1524 chr21 ENCODE CDS 32707033 32707192 . + 0 Parent=gene1524 chr21 ENCODE exon 32747491 32747687 . + . Parent=gene1524 chr21 ENCODE CDS 32747491 32747687 . + 2 Parent=gene1524 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene1524 chr21 ENCODE CDS 32751776 32751899 . + 0 Parent=gene1524 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene1524 chr21 ENCODE CDS 32761875 32762027 . + 2 Parent=gene1524 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene1524 chr21 ENCODE CDS 32789208 32789351 . + 2 Parent=gene1524 chr21 ENCODE exon 32795596 32795676 . + . Parent=gene1524 chr21 ENCODE CDS 32795596 32795676 . + 2 Parent=gene1524 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene1524 chr21 ENCODE CDS 32798107 32798196 . + 2 Parent=gene1524 chr21 ENCODE CDS 32808995 32809371 . + 2 Parent=gene1524 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene1524 ### chr21 ENCODE gene 32706616 32809570 . + . ID=gene1525;Name=AP000272.65-007;name2=C21orf63 chr21 ENCODE exon 32706616 32707192 . + . Parent=gene1525 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene1525 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene1525 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene1525 chr21 ENCODE exon 32795596 32795676 . + . Parent=gene1525 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene1525 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene1525 ### chr21 ENCODE gene 32706616 32809570 . + . ID=gene1526;Name=AP000272.65-005;name2=C21orf63 chr21 ENCODE exon 32706616 32707192 . + . Parent=gene1526 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene1526 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene1526 chr21 ENCODE exon 32795596 32795676 . + . Parent=gene1526 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene1526 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene1526 ### chr21 ENCODE gene 32706732 32809570 . + . ID=gene1527;Name=AP000272.65-006;name2=C21orf63 chr21 ENCODE exon 32706732 32707192 . + . Parent=gene1527 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene1527 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene1527 chr21 ENCODE exon 32795596 32795719 . + . Parent=gene1527 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene1527 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene1527 ### chr21 ENCODE gene 32706881 32809570 . + . ID=gene1528;Name=AP000272.65-002;name2=C21orf63 chr21 ENCODE exon 32706881 32707192 . + . Parent=gene1528 chr21 ENCODE CDS 32707033 32707192 . + 0 Parent=gene1528 chr21 ENCODE exon 32747491 32747687 . + . Parent=gene1528 chr21 ENCODE CDS 32747491 32747687 . + 2 Parent=gene1528 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene1528 chr21 ENCODE CDS 32751776 32751899 . + 0 Parent=gene1528 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene1528 chr21 ENCODE CDS 32761875 32762027 . + 2 Parent=gene1528 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene1528 chr21 ENCODE CDS 32789208 32789351 . + 2 Parent=gene1528 chr21 ENCODE exon 32795596 32795667 . + . Parent=gene1528 chr21 ENCODE CDS 32795596 32795667 . + 2 Parent=gene1528 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene1528 chr21 ENCODE CDS 32798107 32798196 . + 2 Parent=gene1528 chr21 ENCODE CDS 32808995 32809371 . + 2 Parent=gene1528 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene1528 ### chr21 ENCODE gene 32706943 32727463 . + . ID=gene1529;Name=AP000272.65-010;name2=C21orf63 chr21 ENCODE exon 32706943 32707192 . + . Parent=gene1529 chr21 ENCODE exon 32727330 32727463 . + . Parent=gene1529 ### chr21 ENCODE gene 32722513 32789318 . + . ID=gene1530;Name=AP000272.65-008;name2=C21orf63 chr21 ENCODE exon 32722513 32722863 . + . Parent=gene1530 chr21 ENCODE exon 32747491 32747687 . + . Parent=gene1530 chr21 ENCODE CDS 32747616 32747687 . + 0 Parent=gene1530 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene1530 chr21 ENCODE CDS 32751776 32751899 . + 0 Parent=gene1530 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene1530 chr21 ENCODE CDS 32761875 32762027 . + 2 Parent=gene1530 chr21 ENCODE exon 32789208 32789318 . + . Parent=gene1530 chr21 ENCODE CDS 32789208 32789318 . + 2 Parent=gene1530 ### chr21 ENCODE gene 32746364 32809570 . + . ID=gene1531;Name=AP000272.65-003;name2=C21orf63 chr21 ENCODE exon 32746364 32747687 . + . Parent=gene1531 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene1531 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene1531 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene1531 chr21 ENCODE exon 32795596 32795676 . + . Parent=gene1531 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene1531 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene1531 ### chr21 ENCODE gene 32787834 32809061 . + . ID=gene1532;Name=AP000272.65-011;name2=C21orf63 chr21 ENCODE exon 32787834 32787943 . + . Parent=gene1532 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene1532 chr21 ENCODE exon 32795596 32795676 . + . Parent=gene1532 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene1532 chr21 ENCODE exon 32808995 32809061 . + . Parent=gene1532 ### chr21 ENCODE gene 32789298 32809570 . + . ID=gene1533;Name=AP000272.65-012;name2=C21orf63 chr21 ENCODE exon 32789298 32789351 . + . Parent=gene1533 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene1533 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene1533 ### chr21 ENCODE gene 32870733 32879714 . - . ID=gene1534;Name=AP000274.7-001;name2=TCP10L chr21 ENCODE exon 32870733 32871104 . - . Parent=gene1534 chr21 ENCODE CDS 32870955 32871104 . - 0 Parent=gene1534 chr21 ENCODE exon 32872875 32873012 . - . Parent=gene1534 chr21 ENCODE CDS 32872875 32873012 . - 0 Parent=gene1534 chr21 ENCODE exon 32876381 32876596 . - . Parent=gene1534 chr21 ENCODE CDS 32876381 32876596 . - 0 Parent=gene1534 chr21 ENCODE CDS 32878342 32878485 . - 0 Parent=gene1534 chr21 ENCODE exon 32878342 32878486 . - . Parent=gene1534 chr21 ENCODE exon 32879602 32879714 . - . Parent=gene1534 ### chr21 ENCODE gene 32870840 32876615 . - . ID=gene1535;Name=AP000274.7-002;name2=TCP10L chr21 ENCODE exon 32870840 32871104 . - . Parent=gene1535 chr21 ENCODE exon 32871607 32871857 . - . Parent=gene1535 chr21 ENCODE exon 32872875 32873012 . - . Parent=gene1535 chr21 ENCODE exon 32876381 32876615 . - . Parent=gene1535 ### chr21 ENCODE gene 32870840 32879714 . - . ID=gene1536;Name=AP000274.7-003;name2=TCP10L chr21 ENCODE exon 32870840 32871104 . - . Parent=gene1536 chr21 ENCODE exon 32872875 32873012 . - . Parent=gene1536 chr21 ENCODE exon 32876381 32876596 . - . Parent=gene1536 chr21 ENCODE exon 32879602 32879714 . - . Parent=gene1536 ### chr21 ENCODE gene 32873003 32906327 . - . ID=gene1537;Name=AP000274.7-005;name2=TCP10L chr21 ENCODE exon 32873003 32873012 . - . Parent=gene1537 chr21 ENCODE CDS 32873003 32873012 . - 1 Parent=gene1537 chr21 ENCODE exon 32876381 32876596 . - . Parent=gene1537 chr21 ENCODE CDS 32876381 32876596 . - 1 Parent=gene1537 chr21 ENCODE exon 32896453 32896548 . - . Parent=gene1537 chr21 ENCODE CDS 32896453 32896548 . - 1 Parent=gene1537 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene1537 chr21 ENCODE CDS 32897342 32897473 . - 1 Parent=gene1537 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene1537 chr21 ENCODE CDS 32898306 32898464 . - 1 Parent=gene1537 chr21 ENCODE exon 32901830 32901897 . - . Parent=gene1537 chr21 ENCODE CDS 32901830 32901897 . - 0 Parent=gene1537 chr21 ENCODE exon 32904019 32904186 . - . Parent=gene1537 chr21 ENCODE CDS 32904019 32904186 . - 0 Parent=gene1537 chr21 ENCODE exon 32906286 32906327 . - . Parent=gene1537 chr21 ENCODE CDS 32906286 32906327 . - 0 Parent=gene1537 ### chr21 ENCODE gene 32873004 32906462 . - . ID=gene1538;Name=AP000274.7-004;name2=TCP10L chr21 ENCODE exon 32873004 32873012 . - . Parent=gene1538 chr21 ENCODE CDS 32873004 32873012 . - 0 Parent=gene1538 chr21 ENCODE exon 32876381 32876596 . - . Parent=gene1538 chr21 ENCODE CDS 32876381 32876596 . - 0 Parent=gene1538 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene1538 chr21 ENCODE CDS 32897342 32897473 . - 0 Parent=gene1538 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene1538 chr21 ENCODE CDS 32898306 32898464 . - 0 Parent=gene1538 chr21 ENCODE exon 32901830 32901897 . - . Parent=gene1538 chr21 ENCODE CDS 32901830 32901897 . - 2 Parent=gene1538 chr21 ENCODE exon 32904019 32904186 . - . Parent=gene1538 chr21 ENCODE CDS 32904019 32904186 . - 2 Parent=gene1538 chr21 ENCODE CDS 32906286 32906424 . - 0 Parent=gene1538 chr21 ENCODE exon 32906286 32906462 . - . Parent=gene1538 ### chr21 ENCODE gene 32876405 32901879 . - . ID=gene1539;Name=AP000274.7-006;name2=TCP10L chr21 ENCODE exon 32876405 32876596 . - . Parent=gene1539 chr21 ENCODE CDS 32876405 32876596 . - 1 Parent=gene1539 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene1539 chr21 ENCODE CDS 32898306 32898464 . - 1 Parent=gene1539 chr21 ENCODE exon 32901830 32901879 . - . Parent=gene1539 chr21 ENCODE CDS 32901830 32901879 . - 0 Parent=gene1539 ### chr21 ENCODE gene 32886260 32897418 . - . ID=gene1540;Name=AP000275.61-005;name2=C21orf59 chr21 ENCODE exon 32886260 32886599 . - . Parent=gene1540 chr21 ENCODE exon 32897342 32897418 . - . Parent=gene1540 ### chr21 ENCODE gene 32895848 32898452 . - . ID=gene1541;Name=AP000275.61-006;name2=C21orf59 chr21 ENCODE exon 32895848 32896154 . - . Parent=gene1541 chr21 ENCODE CDS 32896044 32896154 . - 0 Parent=gene1541 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene1541 chr21 ENCODE CDS 32897342 32897473 . - 0 Parent=gene1541 chr21 ENCODE exon 32898306 32898452 . - . Parent=gene1541 chr21 ENCODE CDS 32898306 32898452 . - 0 Parent=gene1541 ### chr21 ENCODE gene 32895848 32906767 . - . ID=gene1542;name2=C21orf59;Name=AP000275.61-002 chr21 ENCODE exon 32895848 32897473 . - . Parent=gene1542 chr21 ENCODE CDS 32897270 32897473 . - 0 Parent=gene1542 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene1542 chr21 ENCODE CDS 32898306 32898464 . - 0 Parent=gene1542 chr21 ENCODE exon 32901830 32901897 . - . Parent=gene1542 chr21 ENCODE CDS 32901830 32901897 . - 2 Parent=gene1542 chr21 ENCODE exon 32904019 32904186 . - . Parent=gene1542 chr21 ENCODE CDS 32904019 32904186 . - 2 Parent=gene1542 chr21 ENCODE CDS 32906286 32906424 . - 0 Parent=gene1542 chr21 ENCODE exon 32906286 32906767 . - . Parent=gene1542 ### chr21 ENCODE gene 32895848 32907047 . - . ID=gene1543;Name=AP000275.61-001;name2=C21orf59 chr21 ENCODE exon 32895848 32896154 . - . Parent=gene1543 chr21 ENCODE CDS 32896044 32896154 . - 0 Parent=gene1543 chr21 ENCODE exon 32896453 32896548 . - . Parent=gene1543 chr21 ENCODE CDS 32896453 32896548 . - 0 Parent=gene1543 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene1543 chr21 ENCODE CDS 32897342 32897473 . - 0 Parent=gene1543 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene1543 chr21 ENCODE CDS 32898306 32898464 . - 0 Parent=gene1543 chr21 ENCODE exon 32901830 32901897 . - . Parent=gene1543 chr21 ENCODE CDS 32901830 32901897 . - 2 Parent=gene1543 chr21 ENCODE exon 32904019 32904186 . - . Parent=gene1543 chr21 ENCODE CDS 32904019 32904186 . - 2 Parent=gene1543 chr21 ENCODE CDS 32906286 32906424 . - 0 Parent=gene1543 chr21 ENCODE exon 32906286 32907047 . - . Parent=gene1543 ### chr21 ENCODE gene 32895884 32898381 . - . ID=gene1544;Name=AP000275.61-004;name2=C21orf59 chr21 ENCODE exon 32895884 32896548 . - . Parent=gene1544 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene1544 chr21 ENCODE exon 32898306 32898381 . - . Parent=gene1544 ### chr21 ENCODE gene 32895966 32906784 . - . ID=gene1545;Name=AP000275.61-003;name2=C21orf59 chr21 ENCODE exon 32895966 32896154 . - . Parent=gene1545 chr21 ENCODE exon 32896453 32896548 . - . Parent=gene1545 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene1545 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene1545 chr21 ENCODE exon 32904019 32904186 . - . Parent=gene1545 chr21 ENCODE exon 32906286 32906784 . - . Parent=gene1545 ### chr21 ENCODE gene 32895991 32898694 . - . ID=gene1546;Name=AP000275.61-008;name2=C21orf59 chr21 ENCODE exon 32895991 32897473 . - . Parent=gene1546 chr21 ENCODE exon 32898306 32898694 . - . Parent=gene1546 ### chr21 ENCODE gene 32897406 32906736 . - . ID=gene1547;Name=AP000275.61-007;name2=C21orf59 chr21 ENCODE exon 32897406 32897473 . - . Parent=gene1547 chr21 ENCODE CDS 32897406 32897473 . - 0 Parent=gene1547 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene1547 chr21 ENCODE CDS 32898306 32898464 . - 0 Parent=gene1547 chr21 ENCODE exon 32901830 32901897 . - . Parent=gene1547 chr21 ENCODE CDS 32901830 32901897 . - 2 Parent=gene1547 chr21 ENCODE exon 32904019 32904135 . - . Parent=gene1547 chr21 ENCODE CDS 32904019 32904135 . - 2 Parent=gene1547 chr21 ENCODE CDS 32906286 32906424 . - 0 Parent=gene1547 chr21 ENCODE exon 32906286 32906736 . - . Parent=gene1547 ### chr21 ENCODE gene 32922944 33022105 . - . ID=gene1548;Name=AP000275.63-003;name2=SYNJ1 chr21 ENCODE exon 32922944 32925982 . - . Parent=gene1548 chr21 ENCODE exon 32929042 32929065 . - . Parent=gene1548 chr21 ENCODE exon 32933089 32933306 . - . Parent=gene1548 chr21 ENCODE exon 32933852 32933960 . - . Parent=gene1548 chr21 ENCODE exon 32936077 32936147 . - . Parent=gene1548 chr21 ENCODE exon 32936276 32936314 . - . Parent=gene1548 chr21 ENCODE exon 32939149 32939187 . - . Parent=gene1548 chr21 ENCODE exon 32939827 32939891 . - . Parent=gene1548 chr21 ENCODE exon 32939940 32939970 . - . Parent=gene1548 chr21 ENCODE exon 32940574 32940783 . - . Parent=gene1548 chr21 ENCODE exon 32944365 32944527 . - . Parent=gene1548 chr21 ENCODE exon 32947469 32947547 . - . Parent=gene1548 chr21 ENCODE exon 32950868 32951083 . - . Parent=gene1548 chr21 ENCODE exon 32951184 32951301 . - . Parent=gene1548 chr21 ENCODE exon 32951897 32952053 . - . Parent=gene1548 chr21 ENCODE exon 32959094 32959252 . - . Parent=gene1548 chr21 ENCODE exon 32960124 32960316 . - . Parent=gene1548 chr21 ENCODE exon 32960614 32960754 . - . Parent=gene1548 chr21 ENCODE exon 32964469 32964553 . - . Parent=gene1548 chr21 ENCODE exon 32967521 32967712 . - . Parent=gene1548 chr21 ENCODE exon 32970513 32970536 . - . Parent=gene1548 chr21 ENCODE exon 32972826 32972982 . - . Parent=gene1548 chr21 ENCODE exon 32975677 32975829 . - . Parent=gene1548 chr21 ENCODE exon 32978219 32978300 . - . Parent=gene1548 chr21 ENCODE exon 32979929 32980098 . - . Parent=gene1548 chr21 ENCODE exon 32981159 32981255 . - . Parent=gene1548 chr21 ENCODE exon 32982487 32982548 . - . Parent=gene1548 chr21 ENCODE exon 32988409 32988492 . - . Parent=gene1548 chr21 ENCODE exon 32989238 32989463 . - . Parent=gene1548 chr21 ENCODE exon 32994019 32994286 . - . Parent=gene1548 chr21 ENCODE exon 32996142 32996228 . - . Parent=gene1548 chr21 ENCODE exon 33020954 33021099 . - . Parent=gene1548 chr21 ENCODE exon 33022019 33022105 . - . Parent=gene1548 ### chr21 ENCODE gene 32922945 33022183 . - . ID=gene1549;Name=AP000275.63-001;name2=SYNJ1 chr21 ENCODE exon 32922945 32925982 . - . Parent=gene1549 chr21 ENCODE exon 32929042 32929065 . - . Parent=gene1549 chr21 ENCODE CDS 32929045 32929065 . - 0 Parent=gene1549 chr21 ENCODE exon 32933089 32933306 . - . Parent=gene1549 chr21 ENCODE CDS 32933089 32933306 . - 2 Parent=gene1549 chr21 ENCODE exon 32933852 32933960 . - . Parent=gene1549 chr21 ENCODE CDS 32933852 32933960 . - 0 Parent=gene1549 chr21 ENCODE exon 32936077 32936147 . - . Parent=gene1549 chr21 ENCODE CDS 32936077 32936147 . - 2 Parent=gene1549 chr21 ENCODE exon 32936276 32936314 . - . Parent=gene1549 chr21 ENCODE CDS 32936276 32936314 . - 2 Parent=gene1549 chr21 ENCODE exon 32937591 32937638 . - . Parent=gene1549 chr21 ENCODE CDS 32937591 32937638 . - 2 Parent=gene1549 chr21 ENCODE exon 32939149 32939187 . - . Parent=gene1549 chr21 ENCODE CDS 32939149 32939187 . - 2 Parent=gene1549 chr21 ENCODE exon 32939827 32939970 . - . Parent=gene1549 chr21 ENCODE CDS 32939827 32939970 . - 2 Parent=gene1549 chr21 ENCODE exon 32940574 32940783 . - . Parent=gene1549 chr21 ENCODE CDS 32940574 32940783 . - 2 Parent=gene1549 chr21 ENCODE exon 32944365 32944527 . - . Parent=gene1549 chr21 ENCODE CDS 32944365 32944527 . - 0 Parent=gene1549 chr21 ENCODE exon 32947469 32947547 . - . Parent=gene1549 chr21 ENCODE CDS 32947469 32947547 . - 1 Parent=gene1549 chr21 ENCODE exon 32950868 32951083 . - . Parent=gene1549 chr21 ENCODE CDS 32950868 32951083 . - 1 Parent=gene1549 chr21 ENCODE exon 32951184 32951301 . - . Parent=gene1549 chr21 ENCODE CDS 32951184 32951301 . - 2 Parent=gene1549 chr21 ENCODE exon 32951897 32952053 . - . Parent=gene1549 chr21 ENCODE CDS 32951897 32952053 . - 0 Parent=gene1549 chr21 ENCODE exon 32959094 32959252 . - . Parent=gene1549 chr21 ENCODE CDS 32959094 32959252 . - 0 Parent=gene1549 chr21 ENCODE exon 32960124 32960316 . - . Parent=gene1549 chr21 ENCODE CDS 32960124 32960316 . - 1 Parent=gene1549 chr21 ENCODE exon 32960614 32960754 . - . Parent=gene1549 chr21 ENCODE CDS 32960614 32960754 . - 1 Parent=gene1549 chr21 ENCODE exon 32964469 32964553 . - . Parent=gene1549 chr21 ENCODE CDS 32964469 32964553 . - 2 Parent=gene1549 chr21 ENCODE exon 32967521 32967712 . - . Parent=gene1549 chr21 ENCODE CDS 32967521 32967712 . - 2 Parent=gene1549 chr21 ENCODE exon 32970513 32970536 . - . Parent=gene1549 chr21 ENCODE CDS 32970513 32970536 . - 2 Parent=gene1549 chr21 ENCODE exon 32972826 32972982 . - . Parent=gene1549 chr21 ENCODE CDS 32972826 32972982 . - 0 Parent=gene1549 chr21 ENCODE exon 32975677 32975829 . - . Parent=gene1549 chr21 ENCODE CDS 32975677 32975829 . - 0 Parent=gene1549 chr21 ENCODE exon 32978219 32978300 . - . Parent=gene1549 chr21 ENCODE CDS 32978219 32978300 . - 1 Parent=gene1549 chr21 ENCODE exon 32979929 32980098 . - . Parent=gene1549 chr21 ENCODE CDS 32979929 32980098 . - 0 Parent=gene1549 chr21 ENCODE exon 32981159 32981255 . - . Parent=gene1549 chr21 ENCODE CDS 32981159 32981255 . - 1 Parent=gene1549 chr21 ENCODE exon 32982487 32982548 . - . Parent=gene1549 chr21 ENCODE CDS 32982487 32982548 . - 0 Parent=gene1549 chr21 ENCODE exon 32988409 32988492 . - . Parent=gene1549 chr21 ENCODE CDS 32988409 32988492 . - 0 Parent=gene1549 chr21 ENCODE exon 32989238 32989463 . - . Parent=gene1549 chr21 ENCODE CDS 32989238 32989463 . - 1 Parent=gene1549 chr21 ENCODE exon 32994019 32994286 . - . Parent=gene1549 chr21 ENCODE CDS 32994019 32994286 . - 2 Parent=gene1549 chr21 ENCODE exon 32996142 32996228 . - . Parent=gene1549 chr21 ENCODE CDS 32996142 32996228 . - 2 Parent=gene1549 chr21 ENCODE CDS 33020954 33021077 . - 0 Parent=gene1549 chr21 ENCODE exon 33020954 33021099 . - . Parent=gene1549 chr21 ENCODE exon 33022128 33022183 . - . Parent=gene1549 ### chr21 ENCODE gene 32925171 33022148 . - . ID=gene1550;Name=AP000275.63-004;name2=SYNJ1 chr21 ENCODE exon 32925171 32925982 . - . Parent=gene1550 chr21 ENCODE CDS 32925176 32925982 . - 0 Parent=gene1550 chr21 ENCODE exon 32933089 32933306 . - . Parent=gene1550 chr21 ENCODE CDS 32933089 32933306 . - 2 Parent=gene1550 chr21 ENCODE exon 32933852 32933960 . - . Parent=gene1550 chr21 ENCODE CDS 32933852 32933960 . - 0 Parent=gene1550 chr21 ENCODE exon 32936077 32936147 . - . Parent=gene1550 chr21 ENCODE CDS 32936077 32936147 . - 2 Parent=gene1550 chr21 ENCODE exon 32936276 32936314 . - . Parent=gene1550 chr21 ENCODE CDS 32936276 32936314 . - 2 Parent=gene1550 chr21 ENCODE exon 32937591 32937638 . - . Parent=gene1550 chr21 ENCODE CDS 32937591 32937638 . - 2 Parent=gene1550 chr21 ENCODE exon 32939149 32939187 . - . Parent=gene1550 chr21 ENCODE CDS 32939149 32939187 . - 2 Parent=gene1550 chr21 ENCODE exon 32939827 32939970 . - . Parent=gene1550 chr21 ENCODE CDS 32939827 32939970 . - 2 Parent=gene1550 chr21 ENCODE exon 32940574 32940783 . - . Parent=gene1550 chr21 ENCODE CDS 32940574 32940783 . - 2 Parent=gene1550 chr21 ENCODE exon 32944365 32944527 . - . Parent=gene1550 chr21 ENCODE CDS 32944365 32944527 . - 0 Parent=gene1550 chr21 ENCODE exon 32947469 32947547 . - . Parent=gene1550 chr21 ENCODE CDS 32947469 32947547 . - 1 Parent=gene1550 chr21 ENCODE exon 32950868 32951083 . - . Parent=gene1550 chr21 ENCODE CDS 32950868 32951083 . - 1 Parent=gene1550 chr21 ENCODE exon 32951184 32951301 . - . Parent=gene1550 chr21 ENCODE CDS 32951184 32951301 . - 2 Parent=gene1550 chr21 ENCODE exon 32951897 32952053 . - . Parent=gene1550 chr21 ENCODE CDS 32951897 32952053 . - 0 Parent=gene1550 chr21 ENCODE exon 32959094 32959252 . - . Parent=gene1550 chr21 ENCODE CDS 32959094 32959252 . - 0 Parent=gene1550 chr21 ENCODE exon 32960124 32960316 . - . Parent=gene1550 chr21 ENCODE CDS 32960124 32960316 . - 1 Parent=gene1550 chr21 ENCODE exon 32960614 32960754 . - . Parent=gene1550 chr21 ENCODE CDS 32960614 32960754 . - 1 Parent=gene1550 chr21 ENCODE exon 32964469 32964553 . - . Parent=gene1550 chr21 ENCODE CDS 32964469 32964553 . - 2 Parent=gene1550 chr21 ENCODE exon 32967521 32967712 . - . Parent=gene1550 chr21 ENCODE CDS 32967521 32967712 . - 2 Parent=gene1550 chr21 ENCODE exon 32970513 32970536 . - . Parent=gene1550 chr21 ENCODE CDS 32970513 32970536 . - 2 Parent=gene1550 chr21 ENCODE exon 32972826 32972982 . - . Parent=gene1550 chr21 ENCODE CDS 32972826 32972982 . - 0 Parent=gene1550 chr21 ENCODE exon 32975677 32975829 . - . Parent=gene1550 chr21 ENCODE CDS 32975677 32975829 . - 0 Parent=gene1550 chr21 ENCODE exon 32978219 32978300 . - . Parent=gene1550 chr21 ENCODE CDS 32978219 32978300 . - 1 Parent=gene1550 chr21 ENCODE exon 32979929 32980098 . - . Parent=gene1550 chr21 ENCODE CDS 32979929 32980098 . - 0 Parent=gene1550 chr21 ENCODE exon 32981159 32981255 . - . Parent=gene1550 chr21 ENCODE CDS 32981159 32981255 . - 1 Parent=gene1550 chr21 ENCODE exon 32982487 32982548 . - . Parent=gene1550 chr21 ENCODE CDS 32982487 32982548 . - 0 Parent=gene1550 chr21 ENCODE exon 32988409 32988492 . - . Parent=gene1550 chr21 ENCODE CDS 32988409 32988492 . - 0 Parent=gene1550 chr21 ENCODE exon 32989238 32989463 . - . Parent=gene1550 chr21 ENCODE CDS 32989238 32989463 . - 1 Parent=gene1550 chr21 ENCODE exon 32994019 32994286 . - . Parent=gene1550 chr21 ENCODE CDS 32994019 32994286 . - 2 Parent=gene1550 chr21 ENCODE exon 32996142 32996228 . - . Parent=gene1550 chr21 ENCODE CDS 32996142 32996228 . - 2 Parent=gene1550 chr21 ENCODE CDS 33020954 33021077 . - 0 Parent=gene1550 chr21 ENCODE exon 33020954 33021099 . - . Parent=gene1550 chr21 ENCODE exon 33022128 33022148 . - . Parent=gene1550 ### chr21 ENCODE gene 32933195 32939900 . - . ID=gene1551;Name=AP000275.63-008;name2=SYNJ1 chr21 ENCODE exon 32933195 32933306 . - . Parent=gene1551 chr21 ENCODE CDS 32933195 32933306 . - 1 Parent=gene1551 chr21 ENCODE exon 32933852 32933960 . - . Parent=gene1551 chr21 ENCODE CDS 32933852 32933960 . - 2 Parent=gene1551 chr21 ENCODE exon 32936077 32936147 . - . Parent=gene1551 chr21 ENCODE CDS 32936077 32936147 . - 1 Parent=gene1551 chr21 ENCODE exon 32939827 32939900 . - . Parent=gene1551 chr21 ENCODE CDS 32939827 32939900 . - 0 Parent=gene1551 ### chr21 ENCODE gene 32944365 32948282 . - . ID=gene1552;Name=AP000275.63-005;name2=SYNJ1 chr21 ENCODE exon 32944365 32944527 . - . Parent=gene1552 chr21 ENCODE exon 32947469 32948282 . - . Parent=gene1552 ### chr21 ENCODE gene 32950872 32952742 . - . ID=gene1553;Name=AP000275.63-007;name2=SYNJ1 chr21 ENCODE exon 32950872 32951083 . - . Parent=gene1553 chr21 ENCODE exon 32951184 32951301 . - . Parent=gene1553 chr21 ENCODE exon 32951897 32952053 . - . Parent=gene1553 chr21 ENCODE exon 32952652 32952742 . - . Parent=gene1553 ### chr21 ENCODE gene 32960167 33022121 . - . ID=gene1554;Name=AP000275.63-002;name2=SYNJ1 chr21 ENCODE exon 32960167 32960316 . - . Parent=gene1554 chr21 ENCODE CDS 32960167 32960316 . - 1 Parent=gene1554 chr21 ENCODE exon 32960614 32960754 . - . Parent=gene1554 chr21 ENCODE CDS 32960614 32960754 . - 1 Parent=gene1554 chr21 ENCODE exon 32964469 32964553 . - . Parent=gene1554 chr21 ENCODE CDS 32964469 32964553 . - 2 Parent=gene1554 chr21 ENCODE exon 32967521 32967712 . - . Parent=gene1554 chr21 ENCODE CDS 32967521 32967712 . - 2 Parent=gene1554 chr21 ENCODE exon 32972826 32972991 . - . Parent=gene1554 chr21 ENCODE CDS 32972826 32972991 . - 0 Parent=gene1554 chr21 ENCODE exon 32975677 32975829 . - . Parent=gene1554 chr21 ENCODE CDS 32975677 32975829 . - 0 Parent=gene1554 chr21 ENCODE exon 32978219 32978300 . - . Parent=gene1554 chr21 ENCODE CDS 32978219 32978300 . - 1 Parent=gene1554 chr21 ENCODE exon 32979929 32980098 . - . Parent=gene1554 chr21 ENCODE CDS 32979929 32980098 . - 0 Parent=gene1554 chr21 ENCODE exon 32981159 32981255 . - . Parent=gene1554 chr21 ENCODE CDS 32981159 32981255 . - 1 Parent=gene1554 chr21 ENCODE exon 32982487 32982548 . - . Parent=gene1554 chr21 ENCODE CDS 32982487 32982548 . - 0 Parent=gene1554 chr21 ENCODE exon 32988409 32988492 . - . Parent=gene1554 chr21 ENCODE CDS 32988409 32988492 . - 0 Parent=gene1554 chr21 ENCODE exon 32989238 32989463 . - . Parent=gene1554 chr21 ENCODE CDS 32989238 32989463 . - 1 Parent=gene1554 chr21 ENCODE exon 32994019 32994286 . - . Parent=gene1554 chr21 ENCODE CDS 32994019 32994286 . - 2 Parent=gene1554 chr21 ENCODE exon 32996142 32996228 . - . Parent=gene1554 chr21 ENCODE CDS 32996142 32996228 . - 2 Parent=gene1554 chr21 ENCODE CDS 33020954 33021077 . - 0 Parent=gene1554 chr21 ENCODE exon 33020954 33021099 . - . Parent=gene1554 chr21 ENCODE exon 33022019 33022121 . - . Parent=gene1554 ### chr21 ENCODE gene 32989407 33021124 . - . ID=gene1555;Name=AP000275.63-006;name2=SYNJ1 chr21 ENCODE exon 32989407 32989463 . - . Parent=gene1555 chr21 ENCODE CDS 32989407 32989463 . - 1 Parent=gene1555 chr21 ENCODE exon 32994019 32994286 . - . Parent=gene1555 chr21 ENCODE CDS 32994019 32994286 . - 2 Parent=gene1555 chr21 ENCODE exon 32996142 32996228 . - . Parent=gene1555 chr21 ENCODE CDS 32996142 32996228 . - 2 Parent=gene1555 chr21 ENCODE CDS 33020954 33021077 . - 0 Parent=gene1555 chr21 ENCODE exon 33020954 33021124 . - . Parent=gene1555 ### chr21 ENCODE gene 33028081 33066040 . - . ID=gene1556;name2=C21orf66;Name=AP000279.68-001 chr21 ENCODE exon 33028081 33029249 . - . Parent=gene1556 chr21 ENCODE CDS 33029132 33029249 . - 1 Parent=gene1556 chr21 ENCODE exon 33031436 33031590 . - . Parent=gene1556 chr21 ENCODE CDS 33031436 33031590 . - 0 Parent=gene1556 chr21 ENCODE exon 33032355 33032501 . - . Parent=gene1556 chr21 ENCODE CDS 33032355 33032501 . - 0 Parent=gene1556 chr21 ENCODE exon 33037430 33037496 . - . Parent=gene1556 chr21 ENCODE CDS 33037430 33037496 . - 1 Parent=gene1556 chr21 ENCODE exon 33037860 33037936 . - . Parent=gene1556 chr21 ENCODE CDS 33037860 33037936 . - 0 Parent=gene1556 chr21 ENCODE exon 33038974 33039095 . - . Parent=gene1556 chr21 ENCODE CDS 33038974 33039095 . - 2 Parent=gene1556 chr21 ENCODE exon 33039756 33039900 . - . Parent=gene1556 chr21 ENCODE CDS 33039756 33039900 . - 0 Parent=gene1556 chr21 ENCODE exon 33042681 33042880 . - . Parent=gene1556 chr21 ENCODE CDS 33042681 33042880 . - 2 Parent=gene1556 chr21 ENCODE exon 33045099 33045214 . - . Parent=gene1556 chr21 ENCODE CDS 33045099 33045214 . - 1 Parent=gene1556 chr21 ENCODE exon 33045301 33045400 . - . Parent=gene1556 chr21 ENCODE CDS 33045301 33045400 . - 2 Parent=gene1556 chr21 ENCODE exon 33049412 33049535 . - . Parent=gene1556 chr21 ENCODE CDS 33049412 33049535 . - 0 Parent=gene1556 chr21 ENCODE exon 33053262 33053451 . - . Parent=gene1556 chr21 ENCODE CDS 33053262 33053451 . - 1 Parent=gene1556 chr21 ENCODE exon 33053959 33054176 . - . Parent=gene1556 chr21 ENCODE CDS 33053959 33054176 . - 0 Parent=gene1556 chr21 ENCODE exon 33055241 33055344 . - . Parent=gene1556 chr21 ENCODE CDS 33055241 33055344 . - 2 Parent=gene1556 chr21 ENCODE exon 33056278 33056499 . - . Parent=gene1556 chr21 ENCODE CDS 33056278 33056499 . - 2 Parent=gene1556 chr21 ENCODE exon 33058530 33058706 . - . Parent=gene1556 chr21 ENCODE CDS 33058530 33058706 . - 2 Parent=gene1556 chr21 ENCODE exon 33063996 33064124 . - . Parent=gene1556 chr21 ENCODE CDS 33063996 33064124 . - 2 Parent=gene1556 chr21 ENCODE CDS 33065508 33065850 . - 0 Parent=gene1556 chr21 ENCODE exon 33065508 33066040 . - . Parent=gene1556 ### chr21 ENCODE gene 33028082 33050976 . - . ID=gene1557;Name=AP000279.68-002;name2=C21orf66 chr21 ENCODE exon 33028082 33029249 . - . Parent=gene1557 chr21 ENCODE exon 33031436 33031590 . - . Parent=gene1557 chr21 ENCODE exon 33032355 33032501 . - . Parent=gene1557 chr21 ENCODE exon 33037430 33037496 . - . Parent=gene1557 chr21 ENCODE exon 33037860 33037936 . - . Parent=gene1557 chr21 ENCODE exon 33038974 33039095 . - . Parent=gene1557 chr21 ENCODE exon 33039756 33039900 . - . Parent=gene1557 chr21 ENCODE exon 33042681 33042880 . - . Parent=gene1557 chr21 ENCODE exon 33045099 33045214 . - . Parent=gene1557 chr21 ENCODE exon 33045301 33045400 . - . Parent=gene1557 chr21 ENCODE exon 33049395 33050976 . - . Parent=gene1557 ### chr21 ENCODE gene 33029002 33065869 . - . ID=gene1558;Name=AP000279.68-006;name2=C21orf66 chr21 ENCODE exon 33029002 33029249 . - . Parent=gene1558 chr21 ENCODE exon 33031436 33031590 . - . Parent=gene1558 chr21 ENCODE exon 33032355 33032501 . - . Parent=gene1558 chr21 ENCODE exon 33037430 33037496 . - . Parent=gene1558 chr21 ENCODE exon 33037860 33037936 . - . Parent=gene1558 chr21 ENCODE exon 33038974 33039095 . - . Parent=gene1558 chr21 ENCODE exon 33039756 33039900 . - . Parent=gene1558 chr21 ENCODE exon 33042681 33042880 . - . Parent=gene1558 chr21 ENCODE exon 33045099 33045214 . - . Parent=gene1558 chr21 ENCODE exon 33045301 33045400 . - . Parent=gene1558 chr21 ENCODE exon 33049395 33049535 . - . Parent=gene1558 chr21 ENCODE exon 33053262 33053451 . - . Parent=gene1558 chr21 ENCODE exon 33053959 33054176 . - . Parent=gene1558 chr21 ENCODE exon 33055241 33055344 . - . Parent=gene1558 chr21 ENCODE exon 33056278 33056499 . - . Parent=gene1558 chr21 ENCODE exon 33058530 33058706 . - . Parent=gene1558 chr21 ENCODE exon 33063996 33064124 . - . Parent=gene1558 chr21 ENCODE exon 33065508 33065869 . - . Parent=gene1558 ### chr21 ENCODE gene 33029008 33046306 . - . ID=gene1559;name2=C21orf66;Name=AP000279.68-003 chr21 ENCODE exon 33029008 33029249 . - . Parent=gene1559 chr21 ENCODE exon 33031436 33031590 . - . Parent=gene1559 chr21 ENCODE exon 33032355 33032501 . - . Parent=gene1559 chr21 ENCODE exon 33037430 33037496 . - . Parent=gene1559 chr21 ENCODE exon 33037860 33037936 . - . Parent=gene1559 chr21 ENCODE exon 33038974 33039095 . - . Parent=gene1559 chr21 ENCODE exon 33039756 33039900 . - . Parent=gene1559 chr21 ENCODE exon 33042681 33042880 . - . Parent=gene1559 chr21 ENCODE exon 33045099 33045214 . - . Parent=gene1559 chr21 ENCODE exon 33045301 33046306 . - . Parent=gene1559 ### chr21 ENCODE gene 33035575 33065850 . - . ID=gene1560;Name=AP000279.68-005;name2=C21orf66 chr21 ENCODE exon 33035575 33035804 . - . Parent=gene1560 chr21 ENCODE CDS 33035691 33035804 . - 0 Parent=gene1560 chr21 ENCODE exon 33037430 33037496 . - . Parent=gene1560 chr21 ENCODE CDS 33037430 33037496 . - 1 Parent=gene1560 chr21 ENCODE exon 33037860 33037936 . - . Parent=gene1560 chr21 ENCODE CDS 33037860 33037936 . - 0 Parent=gene1560 chr21 ENCODE exon 33038974 33039095 . - . Parent=gene1560 chr21 ENCODE CDS 33038974 33039095 . - 2 Parent=gene1560 chr21 ENCODE exon 33039756 33039900 . - . Parent=gene1560 chr21 ENCODE CDS 33039756 33039900 . - 0 Parent=gene1560 chr21 ENCODE exon 33042681 33042880 . - . Parent=gene1560 chr21 ENCODE CDS 33042681 33042880 . - 2 Parent=gene1560 chr21 ENCODE exon 33045099 33045214 . - . Parent=gene1560 chr21 ENCODE CDS 33045099 33045214 . - 1 Parent=gene1560 chr21 ENCODE exon 33045301 33045400 . - . Parent=gene1560 chr21 ENCODE CDS 33045301 33045400 . - 2 Parent=gene1560 chr21 ENCODE exon 33049412 33049535 . - . Parent=gene1560 chr21 ENCODE CDS 33049412 33049535 . - 0 Parent=gene1560 chr21 ENCODE exon 33053262 33053451 . - . Parent=gene1560 chr21 ENCODE CDS 33053262 33053451 . - 1 Parent=gene1560 chr21 ENCODE exon 33053959 33054176 . - . Parent=gene1560 chr21 ENCODE CDS 33053959 33054176 . - 0 Parent=gene1560 chr21 ENCODE exon 33055241 33055344 . - . Parent=gene1560 chr21 ENCODE CDS 33055241 33055344 . - 2 Parent=gene1560 chr21 ENCODE exon 33056278 33056499 . - . Parent=gene1560 chr21 ENCODE CDS 33056278 33056499 . - 2 Parent=gene1560 chr21 ENCODE exon 33058530 33058706 . - . Parent=gene1560 chr21 ENCODE CDS 33058530 33058706 . - 2 Parent=gene1560 chr21 ENCODE exon 33063996 33064124 . - . Parent=gene1560 chr21 ENCODE CDS 33063996 33064124 . - 2 Parent=gene1560 chr21 ENCODE exon 33065508 33065850 . - . Parent=gene1560 chr21 ENCODE CDS 33065508 33065850 . - 0 Parent=gene1560 ### chr21 ENCODE gene 33035601 33037450 . - . ID=gene1561;Name=AP000279.68-009;name2=C21orf66 chr21 ENCODE exon 33035601 33035804 . - . Parent=gene1561 chr21 ENCODE exon 33036542 33036683 . - . Parent=gene1561 chr21 ENCODE exon 33037143 33037248 . - . Parent=gene1561 chr21 ENCODE exon 33037430 33037450 . - . Parent=gene1561 ### chr21 ENCODE gene 33042741 33049493 . - . ID=gene1562;Name=AP000279.68-008;name2=C21orf66 chr21 ENCODE exon 33042741 33042880 . - . Parent=gene1562 chr21 ENCODE exon 33045301 33045400 . - . Parent=gene1562 chr21 ENCODE exon 33049395 33049493 . - . Parent=gene1562 ### chr21 ENCODE gene 33050524 33065850 . - . ID=gene1563;Name=AP000279.68-004;name2=C21orf66 chr21 ENCODE exon 33050524 33050550 . - . Parent=gene1563 chr21 ENCODE exon 33053262 33053451 . - . Parent=gene1563 chr21 ENCODE exon 33053959 33054176 . - . Parent=gene1563 chr21 ENCODE exon 33055241 33055344 . - . Parent=gene1563 chr21 ENCODE exon 33056278 33056499 . - . Parent=gene1563 chr21 ENCODE exon 33058530 33058706 . - . Parent=gene1563 chr21 ENCODE exon 33063996 33064124 . - . Parent=gene1563 chr21 ENCODE exon 33065508 33065850 . - . Parent=gene1563 ### chr21 ENCODE gene 33053584 33065974 . - . ID=gene1564;Name=AP000279.68-007;name2=C21orf66 chr21 ENCODE exon 33053584 33054176 . - . Parent=gene1564 chr21 ENCODE exon 33055241 33055344 . - . Parent=gene1564 chr21 ENCODE exon 33056278 33056499 . - . Parent=gene1564 chr21 ENCODE exon 33058530 33058706 . - . Parent=gene1564 chr21 ENCODE exon 33063996 33064124 . - . Parent=gene1564 chr21 ENCODE exon 33065508 33065974 . - . Parent=gene1564 ### chr21 ENCODE gene 33066282 33093149 . + . ID=gene1565;name2=C21orf49;Name=AP000281.64-001 chr21 ENCODE exon 33066282 33066490 . + . Parent=gene1565 chr21 ENCODE exon 33078979 33079101 . + . Parent=gene1565 chr21 ENCODE CDS 33079060 33079101 . + 0 Parent=gene1565 chr21 ENCODE exon 33082794 33082883 . + . Parent=gene1565 chr21 ENCODE CDS 33082794 33082883 . + 0 Parent=gene1565 chr21 ENCODE CDS 33091119 33091226 . + 0 Parent=gene1565 chr21 ENCODE exon 33091119 33093149 . + . Parent=gene1565 ### chr21 ENCODE gene 33066307 33091887 . + . ID=gene1566;Name=AP000281.64-002;name2=C21orf49 chr21 ENCODE exon 33066307 33066454 . + . Parent=gene1566 chr21 ENCODE exon 33091119 33091887 . + . Parent=gene1566 ### chr21 ENCODE gene 33066332 33187913 . + . ID=gene1567;Name=AP000281.64-007;name2=C21orf49 chr21 ENCODE exon 33066332 33066454 . + . Parent=gene1567 chr21 ENCODE exon 33078957 33079101 . + . Parent=gene1567 chr21 ENCODE exon 33180110 33180246 . + . Parent=gene1567 chr21 ENCODE exon 33187756 33187913 . + . Parent=gene1567 ### chr21 ENCODE gene 33066343 33146649 . + . ID=gene1568;name2=C21orf49;Name=AP000281.64-004 chr21 ENCODE exon 33066343 33066490 . + . Parent=gene1568 chr21 ENCODE exon 33078979 33079101 . + . Parent=gene1568 chr21 ENCODE exon 33145929 33146649 . + . Parent=gene1568 ### chr21 ENCODE gene 33066344 33091348 . + . ID=gene1569;Name=AP000281.64-005;name2=C21orf49 chr21 ENCODE exon 33066344 33066502 . + . Parent=gene1569 chr21 ENCODE exon 33078979 33079101 . + . Parent=gene1569 chr21 ENCODE CDS 33079060 33079101 . + 0 Parent=gene1569 chr21 ENCODE exon 33082794 33082883 . + . Parent=gene1569 chr21 ENCODE CDS 33082794 33082883 . + 0 Parent=gene1569 chr21 ENCODE CDS 33091119 33091226 . + 0 Parent=gene1569 chr21 ENCODE exon 33091119 33091348 . + . Parent=gene1569 ### chr21 ENCODE gene 33066356 33091626 . + . ID=gene1570;Name=AP000281.64-003;name2=C21orf49 chr21 ENCODE exon 33066356 33066490 . + . Parent=gene1570 chr21 ENCODE exon 33082794 33082883 . + . Parent=gene1570 chr21 ENCODE exon 33091119 33091626 . + . Parent=gene1570 ### chr21 ENCODE gene 33066370 33091274 . + . ID=gene1571;name2=C21orf49;Name=AP000281.64-006 chr21 ENCODE exon 33066370 33066490 . + . Parent=gene1571 chr21 ENCODE exon 33078979 33079101 . + . Parent=gene1571 chr21 ENCODE CDS 33079060 33079101 . + 0 Parent=gene1571 chr21 ENCODE CDS 33091119 33091226 . + 0 Parent=gene1571 chr21 ENCODE exon 33091119 33091274 . + . Parent=gene1571 ### chr21 ENCODE gene 33087746 33107923 . - . ID=gene1572;Name=AP000280.67-001;name2=C21orf62 chr21 ENCODE exon 33087746 33088666 . - . Parent=gene1572 chr21 ENCODE CDS 33087859 33088602 . - 0 Parent=gene1572 chr21 ENCODE exon 33104754 33104834 . - . Parent=gene1572 chr21 ENCODE exon 33107772 33107923 . - . Parent=gene1572 ### chr21 ENCODE gene 33087747 33107859 . - . ID=gene1573;Name=AP000280.67-003;name2=C21orf62 chr21 ENCODE exon 33087747 33088666 . - . Parent=gene1573 chr21 ENCODE CDS 33087859 33088602 . - 0 Parent=gene1573 chr21 ENCODE exon 33107772 33107859 . - . Parent=gene1573 ### chr21 ENCODE gene 33087867 33107869 . - . ID=gene1574;Name=AP000280.67-004;name2=C21orf62 chr21 ENCODE exon 33087867 33088564 . - . Parent=gene1574 chr21 ENCODE CDS 33087867 33088564 . - 1 Parent=gene1574 chr21 ENCODE exon 33104754 33104834 . - . Parent=gene1574 chr21 ENCODE CDS 33104754 33104834 . - 1 Parent=gene1574 chr21 ENCODE exon 33107772 33107869 . - . Parent=gene1574 chr21 ENCODE CDS 33107772 33107869 . - 0 Parent=gene1574 ### chr21 ENCODE gene 33087903 33107814 . - . ID=gene1575;Name=AP000280.67-002;name2=C21orf62 chr21 ENCODE CDS 33087903 33088602 . - 0 Parent=gene1575 chr21 ENCODE exon 33087903 33088666 . - . Parent=gene1575 chr21 ENCODE exon 33101822 33101896 . - . Parent=gene1575 chr21 ENCODE exon 33104754 33104834 . - . Parent=gene1575 chr21 ENCODE exon 33107772 33107814 . - . Parent=gene1575 ### chr21 ENCODE gene 33320023 33323374 . + . ID=gene1576;Name=AP000287.4-001;name2=OLIG2 chr21 ENCODE exon 33320023 33320204 . + . Parent=gene1576 chr21 ENCODE exon 33320979 33323374 . + . Parent=gene1576 chr21 ENCODE CDS 33321041 33322012 . + 0 Parent=gene1576 ### chr21 ENCODE gene 33320113 33321227 . + . ID=gene1577;Name=AP000287.4-003;name2=OLIG2 chr21 ENCODE exon 33320113 33320438 . + . Parent=gene1577 chr21 ENCODE exon 33320979 33321227 . + . Parent=gene1577 chr21 ENCODE CDS 33321041 33321227 . + 0 Parent=gene1577 ### chr21 ENCODE gene 33320113 33323374 . + . ID=gene1578;name2=OLIG2;Name=AP000287.4-002 chr21 ENCODE exon 33320113 33323374 . + . Parent=gene1578 chr21 ENCODE CDS 33321041 33322012 . + 0 Parent=gene1578 ### chr21 ENCODE gene 33364320 33366596 . + . ID=gene1579;Name=AP000289.5-001;name2=OLIG1 chr21 ENCODE exon 33364320 33366596 . + . Parent=gene1579 chr21 ENCODE CDS 33364423 33365238 . + 0 Parent=gene1579 ### chr21 ENCODE gene 33365141 33366589 . + . ID=gene1580;Name=AP000289.5-002;name2=OLIG1 chr21 ENCODE exon 33365141 33365861 . + . Parent=gene1580 chr21 ENCODE exon 33366228 33366589 . + . Parent=gene1580 ### chr21 ENCODE gene 33365844 33366589 . + . ID=gene1581;Name=AP000289.5-003;name2=OLIG1 chr21 ENCODE exon 33365844 33365881 . + . Parent=gene1581 chr21 ENCODE exon 33366228 33366589 . + . Parent=gene1581 ### chr21 ENCODE gene 33459646 33464824 . - . ID=gene1582;Name=AP000290.56-001;name2=C21orf54 chr21 ENCODE exon 33459646 33459867 . - . Parent=gene1582 chr21 ENCODE CDS 33459847 33459867 . - 0 Parent=gene1582 chr21 ENCODE exon 33462618 33462756 . - . Parent=gene1582 chr21 ENCODE CDS 33462618 33462756 . - 1 Parent=gene1582 chr21 ENCODE exon 33463871 33464008 . - . Parent=gene1582 chr21 ENCODE CDS 33463871 33464008 . - 1 Parent=gene1582 chr21 ENCODE CDS 33464316 33464344 . - 0 Parent=gene1582 chr21 ENCODE exon 33464316 33464426 . - . Parent=gene1582 chr21 ENCODE exon 33464739 33464824 . - . Parent=gene1582 ### chr21 ENCODE gene 33524076 33556931 . + . ID=gene1583;Name=AP000295.6-004;name2=IFNAR2 chr21 ENCODE exon 33524076 33524391 . + . Parent=gene1583 chr21 ENCODE exon 33536061 33536152 . + . Parent=gene1583 chr21 ENCODE CDS 33536098 33536152 . + 0 Parent=gene1583 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene1583 chr21 ENCODE CDS 33537848 33537889 . + 2 Parent=gene1583 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene1583 chr21 ENCODE CDS 33539126 33539249 . + 2 Parent=gene1583 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene1583 chr21 ENCODE CDS 33540893 33541065 . + 1 Parent=gene1583 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene1583 chr21 ENCODE CDS 33542884 33543029 . + 2 Parent=gene1583 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1583 chr21 ENCODE CDS 33546837 33547005 . + 0 Parent=gene1583 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene1583 chr21 ENCODE CDS 33554772 33554902 . + 2 Parent=gene1583 chr21 ENCODE CDS 33556736 33556891 . + 0 Parent=gene1583 chr21 ENCODE exon 33556736 33556931 . + . Parent=gene1583 ### chr21 ENCODE gene 33524084 33559839 . + . ID=gene1584;Name=AP000295.6-001;name2=IFNAR2 chr21 ENCODE exon 33524084 33524391 . + . Parent=gene1584 chr21 ENCODE exon 33536015 33536152 . + . Parent=gene1584 chr21 ENCODE CDS 33536098 33536152 . + 0 Parent=gene1584 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene1584 chr21 ENCODE CDS 33537848 33537889 . + 2 Parent=gene1584 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene1584 chr21 ENCODE CDS 33539126 33539249 . + 2 Parent=gene1584 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene1584 chr21 ENCODE CDS 33540893 33541065 . + 1 Parent=gene1584 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene1584 chr21 ENCODE CDS 33542884 33543029 . + 2 Parent=gene1584 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1584 chr21 ENCODE CDS 33546837 33547005 . + 0 Parent=gene1584 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene1584 chr21 ENCODE CDS 33554772 33554902 . + 2 Parent=gene1584 chr21 ENCODE CDS 33556736 33556891 . + 0 Parent=gene1584 chr21 ENCODE exon 33556736 33559839 . + . Parent=gene1584 ### chr21 ENCODE gene 33524149 33558700 . + . ID=gene1585;Name=AP000295.6-002;name2=IFNAR2 chr21 ENCODE exon 33524149 33524391 . + . Parent=gene1585 chr21 ENCODE exon 33536015 33536152 . + . Parent=gene1585 chr21 ENCODE CDS 33536098 33536152 . + 0 Parent=gene1585 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene1585 chr21 ENCODE CDS 33537848 33537889 . + 2 Parent=gene1585 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene1585 chr21 ENCODE CDS 33539126 33539249 . + 2 Parent=gene1585 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene1585 chr21 ENCODE CDS 33540893 33541065 . + 1 Parent=gene1585 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene1585 chr21 ENCODE CDS 33542884 33543029 . + 2 Parent=gene1585 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1585 chr21 ENCODE CDS 33546837 33547005 . + 0 Parent=gene1585 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene1585 chr21 ENCODE CDS 33554772 33554902 . + 2 Parent=gene1585 chr21 ENCODE CDS 33556968 33557675 . + 0 Parent=gene1585 chr21 ENCODE exon 33556968 33558700 . + . Parent=gene1585 ### chr21 ENCODE gene 33524234 33556897 . + . ID=gene1586;Name=AP000295.6-005;name2=IFNAR2 chr21 ENCODE exon 33524234 33524391 . + . Parent=gene1586 chr21 ENCODE exon 33536061 33536152 . + . Parent=gene1586 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene1586 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene1586 chr21 ENCODE exon 33539668 33539980 . + . Parent=gene1586 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene1586 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene1586 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1586 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene1586 chr21 ENCODE exon 33556736 33556897 . + . Parent=gene1586 ### chr21 ENCODE gene 33524311 33558700 . + . ID=gene1587;Name=AP000295.6-003;name2=IFNAR2 chr21 ENCODE exon 33524311 33524391 . + . Parent=gene1587 chr21 ENCODE exon 33536015 33536152 . + . Parent=gene1587 chr21 ENCODE CDS 33536098 33536152 . + 0 Parent=gene1587 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene1587 chr21 ENCODE CDS 33537848 33537889 . + 2 Parent=gene1587 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene1587 chr21 ENCODE CDS 33539126 33539249 . + 2 Parent=gene1587 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene1587 chr21 ENCODE CDS 33540893 33541065 . + 1 Parent=gene1587 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene1587 chr21 ENCODE CDS 33542884 33543029 . + 2 Parent=gene1587 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1587 chr21 ENCODE CDS 33546837 33547005 . + 0 Parent=gene1587 chr21 ENCODE CDS 33556968 33556978 . + 2 Parent=gene1587 chr21 ENCODE exon 33556968 33558700 . + . Parent=gene1587 ### chr21 ENCODE gene 33524316 33557030 . + . ID=gene1588;Name=AP000295.6-006;name2=IFNAR2 chr21 ENCODE exon 33524316 33524391 . + . Parent=gene1588 chr21 ENCODE exon 33536061 33536152 . + . Parent=gene1588 chr21 ENCODE CDS 33536098 33536152 . + 0 Parent=gene1588 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene1588 chr21 ENCODE CDS 33537848 33537889 . + 2 Parent=gene1588 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene1588 chr21 ENCODE CDS 33539126 33539249 . + 2 Parent=gene1588 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene1588 chr21 ENCODE CDS 33540893 33541065 . + 1 Parent=gene1588 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene1588 chr21 ENCODE CDS 33542884 33543029 . + 2 Parent=gene1588 chr21 ENCODE CDS 33546313 33546366 . + 0 Parent=gene1588 chr21 ENCODE exon 33546313 33546423 . + . Parent=gene1588 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1588 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene1588 chr21 ENCODE exon 33556968 33557030 . + . Parent=gene1588 ### chr21 ENCODE gene 33524357 33557030 . + . ID=gene1589;Name=AP000295.6-009;name2=IFNAR2 chr21 ENCODE exon 33524357 33524391 . + . Parent=gene1589 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene1589 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene1589 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene1589 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1589 chr21 ENCODE exon 33556968 33557030 . + . Parent=gene1589 ### chr21 ENCODE gene 33524357 33557030 . + . ID=gene1590;Name=AP000295.6-010;name2=IFNAR2 chr21 ENCODE exon 33524357 33524391 . + . Parent=gene1590 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene1590 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene1590 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene1590 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1590 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene1590 chr21 ENCODE exon 33556968 33557030 . + . Parent=gene1590 ### chr21 ENCODE gene 33524584 33543029 . + . ID=gene1591;name2=IFNAR2;Name=AP000295.6-008 chr21 ENCODE exon 33524584 33524732 . + . Parent=gene1591 chr21 ENCODE exon 33536061 33536152 . + . Parent=gene1591 chr21 ENCODE CDS 33536098 33536152 . + 0 Parent=gene1591 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene1591 chr21 ENCODE CDS 33537848 33537889 . + 2 Parent=gene1591 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene1591 chr21 ENCODE CDS 33539126 33539249 . + 2 Parent=gene1591 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene1591 chr21 ENCODE CDS 33540893 33541065 . + 1 Parent=gene1591 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene1591 chr21 ENCODE CDS 33542884 33543029 . + 2 Parent=gene1591 ### chr21 ENCODE gene 33542890 33577387 . + . ID=gene1592;Name=AP000295.8-006;name2=IL10RB chr21 ENCODE exon 33542890 33543029 . + . Parent=gene1592 chr21 ENCODE CDS 33542890 33543029 . + 0 Parent=gene1592 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1592 chr21 ENCODE CDS 33546837 33547005 . + 1 Parent=gene1592 chr21 ENCODE exon 33562569 33562692 . + . Parent=gene1592 chr21 ENCODE CDS 33562569 33562692 . + 0 Parent=gene1592 chr21 ENCODE exon 33570771 33570928 . + . Parent=gene1592 chr21 ENCODE CDS 33570771 33570928 . + 2 Parent=gene1592 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene1592 chr21 ENCODE CDS 33573927 33574093 . + 0 Parent=gene1592 chr21 ENCODE exon 33577269 33577387 . + . Parent=gene1592 chr21 ENCODE CDS 33577269 33577387 . + 1 Parent=gene1592 ### chr21 ENCODE gene 33542890 33577387 . + . ID=gene1593;Name=AP000295.8-007;name2=IL10RB chr21 ENCODE exon 33542890 33543029 . + . Parent=gene1593 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1593 chr21 ENCODE exon 33570771 33570928 . + . Parent=gene1593 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene1593 chr21 ENCODE exon 33577269 33577387 . + . Parent=gene1593 ### chr21 ENCODE gene 33542919 33556932 . + . ID=gene1594;Name=AP000295.6-007;name2=IFNAR2 chr21 ENCODE exon 33542919 33543029 . + . Parent=gene1594 chr21 ENCODE CDS 33542919 33543029 . + 0 Parent=gene1594 chr21 ENCODE CDS 33546313 33546366 . + 0 Parent=gene1594 chr21 ENCODE exon 33546313 33546423 . + . Parent=gene1594 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene1594 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene1594 chr21 ENCODE exon 33556736 33556932 . + . Parent=gene1594 ### chr21 ENCODE gene 33560533 33591409 . + . ID=gene1595;Name=AP000295.8-001;name2=IL10RB chr21 ENCODE exon 33560533 33560689 . + . Parent=gene1595 chr21 ENCODE CDS 33560641 33560689 . + 0 Parent=gene1595 chr21 ENCODE exon 33562569 33562692 . + . Parent=gene1595 chr21 ENCODE CDS 33562569 33562692 . + 2 Parent=gene1595 chr21 ENCODE exon 33570771 33570928 . + . Parent=gene1595 chr21 ENCODE CDS 33570771 33570928 . + 1 Parent=gene1595 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene1595 chr21 ENCODE CDS 33573927 33574093 . + 2 Parent=gene1595 chr21 ENCODE exon 33577269 33577416 . + . Parent=gene1595 chr21 ENCODE CDS 33577269 33577416 . + 0 Parent=gene1595 chr21 ENCODE exon 33582279 33582436 . + . Parent=gene1595 chr21 ENCODE CDS 33582279 33582436 . + 2 Parent=gene1595 chr21 ENCODE CDS 33590359 33590532 . + 0 Parent=gene1595 chr21 ENCODE exon 33590359 33591409 . + . Parent=gene1595 ### chr21 ENCODE gene 33560557 33590414 . + . ID=gene1596;Name=AP000295.8-003;name2=IL10RB chr21 ENCODE exon 33560557 33560689 . + . Parent=gene1596 chr21 ENCODE exon 33562569 33562692 . + . Parent=gene1596 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene1596 chr21 ENCODE exon 33577269 33577416 . + . Parent=gene1596 chr21 ENCODE exon 33582279 33582436 . + . Parent=gene1596 chr21 ENCODE exon 33590359 33590414 . + . Parent=gene1596 ### chr21 ENCODE gene 33562103 33591128 . + . ID=gene1597;name2=IL10RB;Name=AP000295.8-002 chr21 ENCODE exon 33562103 33562692 . + . Parent=gene1597 chr21 ENCODE exon 33570771 33570928 . + . Parent=gene1597 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene1597 chr21 ENCODE exon 33577269 33577416 . + . Parent=gene1597 chr21 ENCODE exon 33582279 33582436 . + . Parent=gene1597 chr21 ENCODE exon 33590359 33591128 . + . Parent=gene1597 ### chr21 ENCODE gene 33562457 33582295 . + . ID=gene1598;Name=AP000295.8-005;name2=IL10RB chr21 ENCODE exon 33562457 33562692 . + . Parent=gene1598 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene1598 chr21 ENCODE exon 33577269 33577416 . + . Parent=gene1598 chr21 ENCODE exon 33582279 33582295 . + . Parent=gene1598 ### chr21 ENCODE gene 33570787 33590525 . + . ID=gene1599;Name=AP000295.8-004;name2=IL10RB chr21 ENCODE exon 33570787 33570928 . + . Parent=gene1599 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene1599 chr21 ENCODE exon 33577269 33577416 . + . Parent=gene1599 chr21 ENCODE exon 33582279 33582436 . + . Parent=gene1599 chr21 ENCODE exon 33588187 33588302 . + . Parent=gene1599 chr21 ENCODE exon 33590359 33590525 . + . Parent=gene1599 ### chr21 ENCODE gene 33618652 33629787 . + . ID=gene1600;Name=AP000298.3-002;name2=IFNAR1 chr21 ENCODE exon 33618652 33618813 . + . Parent=gene1600 chr21 ENCODE exon 33629700 33629787 . + . Parent=gene1600 ### chr21 ENCODE gene 33619079 33654038 . + . ID=gene1601;Name=AP000298.3-001;name2=IFNAR1 chr21 ENCODE exon 33619079 33619306 . + . Parent=gene1601 chr21 ENCODE CDS 33619231 33619306 . + 0 Parent=gene1601 chr21 ENCODE exon 33629700 33629823 . + . Parent=gene1601 chr21 ENCODE CDS 33629700 33629823 . + 2 Parent=gene1601 chr21 ENCODE exon 33635175 33635350 . + . Parent=gene1601 chr21 ENCODE CDS 33635175 33635350 . + 1 Parent=gene1601 chr21 ENCODE exon 33637444 33637598 . + . Parent=gene1601 chr21 ENCODE CDS 33637444 33637598 . + 2 Parent=gene1601 chr21 ENCODE exon 33637711 33637852 . + . Parent=gene1601 chr21 ENCODE CDS 33637711 33637852 . + 0 Parent=gene1601 chr21 ENCODE exon 33639422 33639536 . + . Parent=gene1601 chr21 ENCODE CDS 33639422 33639536 . + 2 Parent=gene1601 chr21 ENCODE exon 33643267 33643466 . + . Parent=gene1601 chr21 ENCODE CDS 33643267 33643466 . + 1 Parent=gene1601 chr21 ENCODE exon 33643565 33643719 . + . Parent=gene1601 chr21 ENCODE CDS 33643565 33643719 . + 2 Parent=gene1601 chr21 ENCODE exon 33646934 33647084 . + . Parent=gene1601 chr21 ENCODE CDS 33646934 33647084 . + 0 Parent=gene1601 chr21 ENCODE exon 33647814 33647959 . + . Parent=gene1601 chr21 ENCODE CDS 33647814 33647959 . + 2 Parent=gene1601 chr21 ENCODE CDS 33649492 33649725 . + 0 Parent=gene1601 chr21 ENCODE exon 33649492 33654038 . + . Parent=gene1601 ### chr21 ENCODE gene 33619148 33639453 . + . ID=gene1602;Name=AP000298.3-003;name2=IFNAR1 chr21 ENCODE exon 33619148 33619306 . + . Parent=gene1602 chr21 ENCODE CDS 33619231 33619306 . + 0 Parent=gene1602 chr21 ENCODE exon 33629700 33629823 . + . Parent=gene1602 chr21 ENCODE CDS 33629700 33629823 . + 2 Parent=gene1602 chr21 ENCODE exon 33635175 33635350 . + . Parent=gene1602 chr21 ENCODE CDS 33635175 33635350 . + 1 Parent=gene1602 chr21 ENCODE exon 33639422 33639453 . + . Parent=gene1602 chr21 ENCODE CDS 33639422 33639453 . + 2 Parent=gene1602 ### chr21 ENCODE gene 33679169 33709121 . + . ID=gene1603;Name=AP000300.6-006;name2=IFNGR2 chr21 ENCODE exon 33679169 33679203 . + . Parent=gene1603 chr21 ENCODE exon 33679392 33679560 . + . Parent=gene1603 chr21 ENCODE exon 33709065 33709121 . + . Parent=gene1603 ### chr21 ENCODE gene 33697072 33731698 . + . ID=gene1604;Name=AP000300.6-001;name2=IFNGR2 chr21 ENCODE exon 33697072 33697792 . + . Parent=gene1604 chr21 ENCODE CDS 33697720 33697792 . + 0 Parent=gene1604 chr21 ENCODE exon 33709065 33709197 . + . Parent=gene1604 chr21 ENCODE CDS 33709065 33709197 . + 2 Parent=gene1604 chr21 ENCODE exon 33715657 33715862 . + . Parent=gene1604 chr21 ENCODE CDS 33715657 33715862 . + 1 Parent=gene1604 chr21 ENCODE exon 33721061 33721209 . + . Parent=gene1604 chr21 ENCODE CDS 33721061 33721209 . + 2 Parent=gene1604 chr21 ENCODE exon 33726354 33726513 . + . Parent=gene1604 chr21 ENCODE CDS 33726354 33726513 . + 0 Parent=gene1604 chr21 ENCODE exon 33726891 33727048 . + . Parent=gene1604 chr21 ENCODE CDS 33726891 33727048 . + 2 Parent=gene1604 chr21 ENCODE CDS 33731005 33731139 . + 0 Parent=gene1604 chr21 ENCODE exon 33731005 33731698 . + . Parent=gene1604 ### chr21 ENCODE gene 33697603 33726393 . + . ID=gene1605;Name=AP000300.6-003;name2=IFNGR2 chr21 ENCODE exon 33697603 33697792 . + . Parent=gene1605 chr21 ENCODE exon 33705012 33705068 . + . Parent=gene1605 chr21 ENCODE exon 33705621 33705751 . + . Parent=gene1605 chr21 ENCODE exon 33709065 33709197 . + . Parent=gene1605 chr21 ENCODE exon 33715657 33715862 . + . Parent=gene1605 chr21 ENCODE exon 33721061 33721209 . + . Parent=gene1605 chr21 ENCODE exon 33726354 33726393 . + . Parent=gene1605 ### chr21 ENCODE gene 33697608 33731698 . + . ID=gene1606;Name=AP000300.6-002;name2=IFNGR2 chr21 ENCODE exon 33697608 33697792 . + . Parent=gene1606 chr21 ENCODE CDS 33697720 33697792 . + 0 Parent=gene1606 chr21 ENCODE exon 33705012 33705068 . + . Parent=gene1606 chr21 ENCODE CDS 33705012 33705068 . + 2 Parent=gene1606 chr21 ENCODE exon 33709065 33709197 . + . Parent=gene1606 chr21 ENCODE CDS 33709065 33709197 . + 2 Parent=gene1606 chr21 ENCODE exon 33715657 33715862 . + . Parent=gene1606 chr21 ENCODE CDS 33715657 33715862 . + 1 Parent=gene1606 chr21 ENCODE exon 33721061 33721209 . + . Parent=gene1606 chr21 ENCODE CDS 33721061 33721209 . + 2 Parent=gene1606 chr21 ENCODE exon 33726354 33726513 . + . Parent=gene1606 chr21 ENCODE CDS 33726354 33726513 . + 0 Parent=gene1606 chr21 ENCODE exon 33726891 33727048 . + . Parent=gene1606 chr21 ENCODE CDS 33726891 33727048 . + 2 Parent=gene1606 chr21 ENCODE CDS 33731005 33731139 . + 0 Parent=gene1606 chr21 ENCODE exon 33731005 33731698 . + . Parent=gene1606 ### chr21 ENCODE gene 33697617 33731121 . + . ID=gene1607;Name=AP000300.6-004;name2=IFNGR2 chr21 ENCODE exon 33697617 33697792 . + . Parent=gene1607 chr21 ENCODE exon 33715657 33715862 . + . Parent=gene1607 chr21 ENCODE exon 33721061 33721209 . + . Parent=gene1607 chr21 ENCODE exon 33726354 33726513 . + . Parent=gene1607 chr21 ENCODE exon 33726891 33727048 . + . Parent=gene1607 chr21 ENCODE exon 33731005 33731121 . + . Parent=gene1607 ### chr21 ENCODE gene 33726496 33773525 . + . ID=gene1608;Name=AP000300.6-005;name2=IFNGR2 chr21 ENCODE exon 33726496 33726513 . + . Parent=gene1608 chr21 ENCODE exon 33726891 33727048 . + . Parent=gene1608 chr21 ENCODE exon 33772975 33773525 . + . Parent=gene1608 ### chr21 ENCODE gene 33726662 33743141 . - . ID=gene1609;name2=TMEM50B;Name=AP000300.7-009 chr21 ENCODE exon 33726662 33726979 . - . Parent=gene1609 chr21 ENCODE exon 33731060 33731169 . - . Parent=gene1609 chr21 ENCODE exon 33733391 33733474 . - . Parent=gene1609 chr21 ENCODE exon 33742959 33743141 . - . Parent=gene1609 ### chr21 ENCODE gene 33726662 33774120 . - . ID=gene1610;name2=TMEM50B;Name=AP000300.7-002 chr21 ENCODE exon 33726662 33726979 . - . Parent=gene1610 chr21 ENCODE exon 33733391 33733474 . - . Parent=gene1610 chr21 ENCODE exon 33742959 33745040 . - . Parent=gene1610 chr21 ENCODE exon 33749904 33749961 . - . Parent=gene1610 chr21 ENCODE exon 33754590 33754682 . - . Parent=gene1610 chr21 ENCODE exon 33759519 33759586 . - . Parent=gene1610 chr21 ENCODE exon 33761187 33761299 . - . Parent=gene1610 chr21 ENCODE exon 33762964 33763103 . - . Parent=gene1610 chr21 ENCODE exon 33774015 33774120 . - . Parent=gene1610 ### chr21 ENCODE gene 33726975 33743587 . - . ID=gene1611;Name=AP000300.7-007;name2=TMEM50B chr21 ENCODE exon 33726975 33726979 . - . Parent=gene1611 chr21 ENCODE exon 33733391 33733474 . - . Parent=gene1611 chr21 ENCODE exon 33742959 33743056 . - . Parent=gene1611 chr21 ENCODE exon 33743411 33743587 . - . Parent=gene1611 ### chr21 ENCODE gene 33731061 33743366 . - . ID=gene1612;Name=AP000300.7-008;name2=TMEM50B chr21 ENCODE exon 33731061 33731169 . - . Parent=gene1612 chr21 ENCODE exon 33733391 33733474 . - . Parent=gene1612 chr21 ENCODE exon 33741195 33741317 . - . Parent=gene1612 chr21 ENCODE exon 33742959 33743136 . - . Parent=gene1612 chr21 ENCODE exon 33743191 33743366 . - . Parent=gene1612 ### chr21 ENCODE gene 33743312 33774188 . - . ID=gene1613;Name=AP000300.7-001;name2=TMEM50B chr21 ENCODE exon 33743312 33745040 . - . Parent=gene1613 chr21 ENCODE CDS 33744995 33745040 . - 1 Parent=gene1613 chr21 ENCODE exon 33749904 33749961 . - . Parent=gene1613 chr21 ENCODE CDS 33749904 33749961 . - 2 Parent=gene1613 chr21 ENCODE exon 33754590 33754682 . - . Parent=gene1613 chr21 ENCODE CDS 33754590 33754682 . - 2 Parent=gene1613 chr21 ENCODE exon 33759519 33759586 . - . Parent=gene1613 chr21 ENCODE CDS 33759519 33759586 . - 1 Parent=gene1613 chr21 ENCODE exon 33761187 33761299 . - . Parent=gene1613 chr21 ENCODE CDS 33761187 33761299 . - 0 Parent=gene1613 chr21 ENCODE CDS 33762964 33763062 . - 0 Parent=gene1613 chr21 ENCODE exon 33762964 33763103 . - . Parent=gene1613 chr21 ENCODE exon 33774015 33774188 . - . Parent=gene1613 ### chr21 ENCODE gene 33744724 33774113 . - . ID=gene1614;Name=AP000300.7-004;name2=TMEM50B chr21 ENCODE exon 33744724 33745040 . - . Parent=gene1614 chr21 ENCODE exon 33749904 33749961 . - . Parent=gene1614 chr21 ENCODE exon 33750181 33750274 . - . Parent=gene1614 chr21 ENCODE exon 33754590 33754682 . - . Parent=gene1614 chr21 ENCODE exon 33759519 33759586 . - . Parent=gene1614 chr21 ENCODE exon 33761187 33761299 . - . Parent=gene1614 chr21 ENCODE exon 33762964 33763103 . - . Parent=gene1614 chr21 ENCODE exon 33774015 33774113 . - . Parent=gene1614 ### chr21 ENCODE gene 33759195 33761312 . - . ID=gene1615;Name=AP000300.7-006;name2=TMEM50B chr21 ENCODE exon 33759195 33759586 . - . Parent=gene1615 chr21 ENCODE exon 33761187 33761312 . - . Parent=gene1615 ### chr21 ENCODE gene 33759555 33773466 . - . ID=gene1616;name2=TMEM50B;Name=AP000300.7-005 chr21 ENCODE exon 33759555 33759586 . - . Parent=gene1616 chr21 ENCODE CDS 33759555 33759586 . - 1 Parent=gene1616 chr21 ENCODE exon 33761187 33761299 . - . Parent=gene1616 chr21 ENCODE CDS 33761187 33761299 . - 0 Parent=gene1616 chr21 ENCODE CDS 33762964 33763062 . - 0 Parent=gene1616 chr21 ENCODE exon 33762964 33763103 . - . Parent=gene1616 chr21 ENCODE exon 33763708 33763860 . - . Parent=gene1616 chr21 ENCODE exon 33773286 33773466 . - . Parent=gene1616 ### chr21 ENCODE gene 33761212 33775369 . - . ID=gene1617;Name=AP000300.7-010;name2=TMEM50B chr21 ENCODE exon 33761212 33761299 . - . Parent=gene1617 chr21 ENCODE CDS 33761212 33761299 . - 0 Parent=gene1617 chr21 ENCODE CDS 33762964 33763062 . - 0 Parent=gene1617 chr21 ENCODE exon 33762964 33763103 . - . Parent=gene1617 chr21 ENCODE exon 33775311 33775369 . - . Parent=gene1617 ### chr21 ENCODE gene 33762597 33774125 . - . ID=gene1618;Name=AP000300.7-003;name2=TMEM50B chr21 ENCODE exon 33762597 33763103 . - . Parent=gene1618 chr21 ENCODE exon 33774015 33774125 . - . Parent=gene1618 ### chr21 ENCODE gene 33779707 33785650 . - . ID=gene1619;Name=AP000302.59-003;name2=C21orf55 chr21 ENCODE exon 33779707 33779932 . - . Parent=gene1619 chr21 ENCODE exon 33782006 33783601 . - . Parent=gene1619 chr21 ENCODE exon 33785243 33785650 . - . Parent=gene1619 ### chr21 ENCODE gene 33782367 33785897 . - . ID=gene1620;Name=AP000302.59-002;name2=C21orf55 chr21 ENCODE exon 33782367 33783601 . - . Parent=gene1620 chr21 ENCODE CDS 33782404 33783570 . - 0 Parent=gene1620 chr21 ENCODE exon 33785779 33785897 . - . Parent=gene1620 ### chr21 ENCODE gene 33782385 33785650 . - . ID=gene1621;Name=AP000302.59-001;name2=C21orf55 chr21 ENCODE exon 33782385 33783601 . - . Parent=gene1621 chr21 ENCODE CDS 33782404 33783570 . - 0 Parent=gene1621 chr21 ENCODE exon 33785243 33785650 . - . Parent=gene1621 ### chr21 ENCODE gene 33798108 33836314 . - . ID=gene1622;Name=AP000302.60-003;name2=GART chr21 ENCODE exon 33798108 33798492 . - . Parent=gene1622 chr21 ENCODE CDS 33798301 33798492 . - 0 Parent=gene1622 chr21 ENCODE exon 33798589 33798704 . - . Parent=gene1622 chr21 ENCODE CDS 33798589 33798704 . - 2 Parent=gene1622 chr21 ENCODE exon 33799738 33799879 . - . Parent=gene1622 chr21 ENCODE CDS 33799738 33799879 . - 0 Parent=gene1622 chr21 ENCODE exon 33800151 33800281 . - . Parent=gene1622 chr21 ENCODE CDS 33800151 33800281 . - 2 Parent=gene1622 chr21 ENCODE exon 33803960 33804097 . - . Parent=gene1622 chr21 ENCODE CDS 33803960 33804097 . - 2 Parent=gene1622 chr21 ENCODE exon 33805429 33805635 . - . Parent=gene1622 chr21 ENCODE CDS 33805429 33805635 . - 2 Parent=gene1622 chr21 ENCODE exon 33811166 33811318 . - . Parent=gene1622 chr21 ENCODE CDS 33811166 33811318 . - 2 Parent=gene1622 chr21 ENCODE exon 33811534 33811785 . - . Parent=gene1622 chr21 ENCODE CDS 33811534 33811785 . - 2 Parent=gene1622 chr21 ENCODE exon 33814541 33814739 . - . Parent=gene1622 chr21 ENCODE CDS 33814541 33814739 . - 0 Parent=gene1622 chr21 ENCODE exon 33815083 33815192 . - . Parent=gene1622 chr21 ENCODE CDS 33815083 33815192 . - 2 Parent=gene1622 chr21 ENCODE exon 33816365 33816459 . - . Parent=gene1622 chr21 ENCODE CDS 33816365 33816459 . - 1 Parent=gene1622 chr21 ENCODE exon 33818946 33819177 . - . Parent=gene1622 chr21 ENCODE CDS 33818946 33819177 . - 2 Parent=gene1622 chr21 ENCODE exon 33822343 33822511 . - . Parent=gene1622 chr21 ENCODE CDS 33822343 33822511 . - 0 Parent=gene1622 chr21 ENCODE exon 33822695 33822780 . - . Parent=gene1622 chr21 ENCODE CDS 33822695 33822780 . - 2 Parent=gene1622 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene1622 chr21 ENCODE CDS 33823026 33823113 . - 0 Parent=gene1622 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene1622 chr21 ENCODE CDS 33824935 33825060 . - 0 Parent=gene1622 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene1622 chr21 ENCODE CDS 33825665 33825733 . - 0 Parent=gene1622 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene1622 chr21 ENCODE CDS 33826521 33826632 . - 1 Parent=gene1622 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene1622 chr21 ENCODE CDS 33828755 33828929 . - 2 Parent=gene1622 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene1622 chr21 ENCODE CDS 33829401 33829496 . - 2 Parent=gene1622 chr21 ENCODE CDS 33833347 33833491 . - 0 Parent=gene1622 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene1622 chr21 ENCODE exon 33836241 33836314 . - . Parent=gene1622 ### chr21 ENCODE gene 33798108 33837018 . - . ID=gene1623;Name=AP000302.60-001;name2=GART chr21 ENCODE exon 33798108 33798492 . - . Parent=gene1623 chr21 ENCODE CDS 33798301 33798492 . - 0 Parent=gene1623 chr21 ENCODE exon 33798589 33798704 . - . Parent=gene1623 chr21 ENCODE CDS 33798589 33798704 . - 2 Parent=gene1623 chr21 ENCODE exon 33799738 33799879 . - . Parent=gene1623 chr21 ENCODE CDS 33799738 33799879 . - 0 Parent=gene1623 chr21 ENCODE exon 33800151 33800281 . - . Parent=gene1623 chr21 ENCODE CDS 33800151 33800281 . - 2 Parent=gene1623 chr21 ENCODE exon 33803960 33804097 . - . Parent=gene1623 chr21 ENCODE CDS 33803960 33804097 . - 2 Parent=gene1623 chr21 ENCODE exon 33805429 33805635 . - . Parent=gene1623 chr21 ENCODE CDS 33805429 33805635 . - 2 Parent=gene1623 chr21 ENCODE exon 33811166 33811318 . - . Parent=gene1623 chr21 ENCODE CDS 33811166 33811318 . - 2 Parent=gene1623 chr21 ENCODE exon 33811534 33811785 . - . Parent=gene1623 chr21 ENCODE CDS 33811534 33811785 . - 2 Parent=gene1623 chr21 ENCODE exon 33814541 33814739 . - . Parent=gene1623 chr21 ENCODE CDS 33814541 33814739 . - 0 Parent=gene1623 chr21 ENCODE exon 33815083 33815192 . - . Parent=gene1623 chr21 ENCODE CDS 33815083 33815192 . - 2 Parent=gene1623 chr21 ENCODE exon 33816365 33816459 . - . Parent=gene1623 chr21 ENCODE CDS 33816365 33816459 . - 1 Parent=gene1623 chr21 ENCODE exon 33818946 33819177 . - . Parent=gene1623 chr21 ENCODE CDS 33818946 33819177 . - 2 Parent=gene1623 chr21 ENCODE exon 33822343 33822511 . - . Parent=gene1623 chr21 ENCODE CDS 33822343 33822511 . - 0 Parent=gene1623 chr21 ENCODE exon 33822695 33822780 . - . Parent=gene1623 chr21 ENCODE CDS 33822695 33822780 . - 2 Parent=gene1623 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene1623 chr21 ENCODE CDS 33823026 33823113 . - 0 Parent=gene1623 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene1623 chr21 ENCODE CDS 33824935 33825060 . - 0 Parent=gene1623 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene1623 chr21 ENCODE CDS 33825665 33825733 . - 0 Parent=gene1623 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene1623 chr21 ENCODE CDS 33826521 33826632 . - 1 Parent=gene1623 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene1623 chr21 ENCODE CDS 33828755 33828929 . - 2 Parent=gene1623 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene1623 chr21 ENCODE CDS 33829401 33829496 . - 2 Parent=gene1623 chr21 ENCODE CDS 33833347 33833491 . - 0 Parent=gene1623 chr21 ENCODE exon 33833347 33833499 . - . Parent=gene1623 chr21 ENCODE exon 33836763 33837018 . - . Parent=gene1623 ### chr21 ENCODE gene 33798108 33837037 . - . ID=gene1624;Name=AP000302.60-006;name2=GART chr21 ENCODE exon 33798108 33798492 . - . Parent=gene1624 chr21 ENCODE CDS 33798301 33798492 . - 0 Parent=gene1624 chr21 ENCODE exon 33798589 33798704 . - . Parent=gene1624 chr21 ENCODE CDS 33798589 33798704 . - 2 Parent=gene1624 chr21 ENCODE exon 33799738 33799879 . - . Parent=gene1624 chr21 ENCODE CDS 33799738 33799879 . - 0 Parent=gene1624 chr21 ENCODE exon 33800151 33800281 . - . Parent=gene1624 chr21 ENCODE CDS 33800151 33800281 . - 2 Parent=gene1624 chr21 ENCODE exon 33803960 33804097 . - . Parent=gene1624 chr21 ENCODE CDS 33803960 33804097 . - 2 Parent=gene1624 chr21 ENCODE exon 33805429 33805635 . - . Parent=gene1624 chr21 ENCODE CDS 33805429 33805635 . - 2 Parent=gene1624 chr21 ENCODE exon 33811166 33811318 . - . Parent=gene1624 chr21 ENCODE CDS 33811166 33811318 . - 2 Parent=gene1624 chr21 ENCODE exon 33811534 33811785 . - . Parent=gene1624 chr21 ENCODE CDS 33811534 33811785 . - 2 Parent=gene1624 chr21 ENCODE exon 33814541 33814739 . - . Parent=gene1624 chr21 ENCODE CDS 33814541 33814739 . - 0 Parent=gene1624 chr21 ENCODE exon 33815083 33815192 . - . Parent=gene1624 chr21 ENCODE CDS 33815083 33815192 . - 2 Parent=gene1624 chr21 ENCODE exon 33816365 33816459 . - . Parent=gene1624 chr21 ENCODE CDS 33816365 33816459 . - 1 Parent=gene1624 chr21 ENCODE exon 33818946 33819177 . - . Parent=gene1624 chr21 ENCODE CDS 33818946 33819177 . - 2 Parent=gene1624 chr21 ENCODE exon 33822343 33822511 . - . Parent=gene1624 chr21 ENCODE CDS 33822343 33822511 . - 0 Parent=gene1624 chr21 ENCODE exon 33822695 33822780 . - . Parent=gene1624 chr21 ENCODE CDS 33822695 33822780 . - 2 Parent=gene1624 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene1624 chr21 ENCODE CDS 33823026 33823113 . - 0 Parent=gene1624 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene1624 chr21 ENCODE CDS 33824935 33825060 . - 0 Parent=gene1624 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene1624 chr21 ENCODE CDS 33825665 33825733 . - 0 Parent=gene1624 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene1624 chr21 ENCODE CDS 33826521 33826632 . - 1 Parent=gene1624 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene1624 chr21 ENCODE CDS 33828755 33828929 . - 2 Parent=gene1624 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene1624 chr21 ENCODE CDS 33829401 33829496 . - 2 Parent=gene1624 chr21 ENCODE CDS 33833347 33833491 . - 0 Parent=gene1624 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene1624 chr21 ENCODE exon 33836836 33837037 . - . Parent=gene1624 ### chr21 ENCODE gene 33798110 33837068 . - . ID=gene1625;Name=AP000302.60-002;name2=GART chr21 ENCODE exon 33798110 33798492 . - . Parent=gene1625 chr21 ENCODE exon 33798589 33798704 . - . Parent=gene1625 chr21 ENCODE exon 33799738 33799879 . - . Parent=gene1625 chr21 ENCODE exon 33800151 33800281 . - . Parent=gene1625 chr21 ENCODE exon 33803960 33804097 . - . Parent=gene1625 chr21 ENCODE exon 33805429 33805635 . - . Parent=gene1625 chr21 ENCODE exon 33811166 33811318 . - . Parent=gene1625 chr21 ENCODE exon 33811534 33811785 . - . Parent=gene1625 chr21 ENCODE exon 33814541 33814739 . - . Parent=gene1625 chr21 ENCODE exon 33815083 33815192 . - . Parent=gene1625 chr21 ENCODE exon 33816365 33816459 . - . Parent=gene1625 chr21 ENCODE exon 33818946 33819177 . - . Parent=gene1625 chr21 ENCODE exon 33822343 33822511 . - . Parent=gene1625 chr21 ENCODE exon 33822691 33822780 . - . Parent=gene1625 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene1625 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene1625 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene1625 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene1625 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene1625 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene1625 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene1625 chr21 ENCODE exon 33836767 33837068 . - . Parent=gene1625 ### chr21 ENCODE gene 33800152 33805569 . - . ID=gene1626;Name=AP000302.60-017;name2=GART chr21 ENCODE exon 33800152 33800257 . - . Parent=gene1626 chr21 ENCODE exon 33803991 33804097 . - . Parent=gene1626 chr21 ENCODE exon 33805429 33805569 . - . Parent=gene1626 ### chr21 ENCODE gene 33800217 33804510 . - . ID=gene1627;Name=AP000302.60-018;name2=GART chr21 ENCODE exon 33800217 33800281 . - . Parent=gene1627 chr21 ENCODE exon 33803960 33804510 . - . Parent=gene1627 ### chr21 ENCODE gene 33803365 33805481 . - . ID=gene1628;Name=AP000302.60-019;name2=GART chr21 ENCODE exon 33803365 33804097 . - . Parent=gene1628 chr21 ENCODE exon 33805429 33805481 . - . Parent=gene1628 ### chr21 ENCODE gene 33814699 33819005 . - . ID=gene1629;name2=GART;Name=AP000302.60-005 chr21 ENCODE exon 33814699 33814822 . - . Parent=gene1629 chr21 ENCODE exon 33815083 33815192 . - . Parent=gene1629 chr21 ENCODE exon 33816365 33816459 . - . Parent=gene1629 chr21 ENCODE exon 33818946 33819005 . - . Parent=gene1629 ### chr21 ENCODE gene 33816368 33822940 . - . ID=gene1630;Name=AP000302.60-016;name2=GART chr21 ENCODE exon 33816368 33816459 . - . Parent=gene1630 chr21 ENCODE exon 33818946 33819177 . - . Parent=gene1630 chr21 ENCODE exon 33822343 33822940 . - . Parent=gene1630 ### chr21 ENCODE gene 33818186 33836290 . - . ID=gene1631;Name=AP000302.60-004;name2=GART chr21 ENCODE exon 33818186 33819177 . - . Parent=gene1631 chr21 ENCODE CDS 33818942 33819177 . - 2 Parent=gene1631 chr21 ENCODE exon 33822343 33822511 . - . Parent=gene1631 chr21 ENCODE CDS 33822343 33822511 . - 0 Parent=gene1631 chr21 ENCODE exon 33822695 33822780 . - . Parent=gene1631 chr21 ENCODE CDS 33822695 33822780 . - 2 Parent=gene1631 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene1631 chr21 ENCODE CDS 33823026 33823113 . - 0 Parent=gene1631 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene1631 chr21 ENCODE CDS 33824935 33825060 . - 0 Parent=gene1631 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene1631 chr21 ENCODE CDS 33825665 33825733 . - 0 Parent=gene1631 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene1631 chr21 ENCODE CDS 33826521 33826632 . - 1 Parent=gene1631 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene1631 chr21 ENCODE CDS 33828755 33828929 . - 2 Parent=gene1631 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene1631 chr21 ENCODE CDS 33829401 33829496 . - 2 Parent=gene1631 chr21 ENCODE CDS 33833347 33833491 . - 0 Parent=gene1631 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene1631 chr21 ENCODE exon 33836241 33836290 . - . Parent=gene1631 ### chr21 ENCODE gene 33822442 33828806 . - . ID=gene1632;Name=AP000302.60-014;name2=GART chr21 ENCODE exon 33822442 33822511 . - . Parent=gene1632 chr21 ENCODE exon 33822695 33822780 . - . Parent=gene1632 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene1632 chr21 ENCODE exon 33823743 33823944 . - . Parent=gene1632 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene1632 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene1632 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene1632 chr21 ENCODE exon 33828755 33828806 . - . Parent=gene1632 ### chr21 ENCODE gene 33822739 33825458 . - . ID=gene1633;Name=AP000302.60-015;name2=GART chr21 ENCODE exon 33822739 33822780 . - . Parent=gene1633 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene1633 chr21 ENCODE exon 33824935 33825458 . - . Parent=gene1633 ### chr21 ENCODE gene 33824886 33828855 . - . ID=gene1634;Name=AP000302.60-012;name2=GART chr21 ENCODE exon 33824886 33825060 . - . Parent=gene1634 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene1634 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene1634 chr21 ENCODE exon 33828755 33828855 . - . Parent=gene1634 ### chr21 ENCODE gene 33824935 33837667 . - . ID=gene1635;Name=AP000302.60-007;name2=GART chr21 ENCODE exon 33824935 33825060 . - . Parent=gene1635 chr21 ENCODE CDS 33824935 33825060 . - 0 Parent=gene1635 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene1635 chr21 ENCODE CDS 33825665 33825733 . - 0 Parent=gene1635 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene1635 chr21 ENCODE CDS 33826521 33826632 . - 1 Parent=gene1635 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene1635 chr21 ENCODE CDS 33828755 33828929 . - 2 Parent=gene1635 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene1635 chr21 ENCODE CDS 33829401 33829496 . - 2 Parent=gene1635 chr21 ENCODE CDS 33833347 33833491 . - 0 Parent=gene1635 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene1635 chr21 ENCODE exon 33837396 33837667 . - . Parent=gene1635 ### chr21 ENCODE gene 33824963 33836969 . - . ID=gene1636;Name=AP000302.60-009;name2=GART chr21 ENCODE exon 33824963 33825060 . - . Parent=gene1636 chr21 ENCODE CDS 33824963 33825060 . - 0 Parent=gene1636 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene1636 chr21 ENCODE CDS 33825665 33825733 . - 0 Parent=gene1636 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene1636 chr21 ENCODE CDS 33826521 33826632 . - 1 Parent=gene1636 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene1636 chr21 ENCODE CDS 33828755 33828929 . - 2 Parent=gene1636 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene1636 chr21 ENCODE CDS 33829401 33829496 . - 2 Parent=gene1636 chr21 ENCODE CDS 33833347 33833491 . - 0 Parent=gene1636 chr21 ENCODE exon 33833347 33833499 . - . Parent=gene1636 chr21 ENCODE exon 33836836 33836969 . - . Parent=gene1636 ### chr21 ENCODE gene 33825512 33836255 . - . ID=gene1637;Name=AP000302.60-011;name2=GART chr21 ENCODE exon 33825512 33825733 . - . Parent=gene1637 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene1637 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene1637 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene1637 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene1637 chr21 ENCODE exon 33836241 33836255 . - . Parent=gene1637 ### chr21 ENCODE gene 33825949 33828848 . - . ID=gene1638;Name=AP000302.60-013;name2=GART chr21 ENCODE exon 33825949 33826632 . - . Parent=gene1638 chr21 ENCODE exon 33828755 33828848 . - . Parent=gene1638 ### chr21 ENCODE gene 33828755 33836996 . - . ID=gene1639;Name=AP000302.60-008;name2=GART chr21 ENCODE exon 33828755 33828929 . - . Parent=gene1639 chr21 ENCODE CDS 33828755 33828929 . - 2 Parent=gene1639 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene1639 chr21 ENCODE CDS 33829401 33829496 . - 2 Parent=gene1639 chr21 ENCODE CDS 33833347 33833491 . - 0 Parent=gene1639 chr21 ENCODE exon 33833347 33833499 . - . Parent=gene1639 chr21 ENCODE exon 33836724 33836996 . - . Parent=gene1639 ### chr21 ENCODE gene 33828763 33836539 . - . ID=gene1640;Name=AP000302.60-010;name2=GART chr21 ENCODE exon 33828763 33828929 . - . Parent=gene1640 chr21 ENCODE CDS 33828763 33828929 . - 2 Parent=gene1640 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene1640 chr21 ENCODE CDS 33829401 33829496 . - 2 Parent=gene1640 chr21 ENCODE CDS 33833347 33833491 . - 0 Parent=gene1640 chr21 ENCODE exon 33833347 33833499 . - . Parent=gene1640 chr21 ENCODE exon 33836241 33836539 . - . Parent=gene1640 ### chr21 ENCODE gene 33836794 33871657 . + . ID=gene1641;Name=AP000304.8-001;name2=SON chr21 ENCODE exon 33836794 33837345 . + . Parent=gene1641 chr21 ENCODE CDS 33837269 33837345 . + 0 Parent=gene1641 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene1641 chr21 ENCODE CDS 33840389 33840555 . + 1 Parent=gene1641 chr21 ENCODE exon 33843652 33849567 . + . Parent=gene1641 chr21 ENCODE CDS 33843652 33849567 . + 2 Parent=gene1641 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene1641 chr21 ENCODE CDS 33851332 33851492 . + 2 Parent=gene1641 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene1641 chr21 ENCODE CDS 33853406 33853552 . + 0 Parent=gene1641 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene1641 chr21 ENCODE CDS 33853763 33853951 . + 0 Parent=gene1641 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene1641 chr21 ENCODE CDS 33861333 33861443 . + 0 Parent=gene1641 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene1641 chr21 ENCODE CDS 33863147 33863263 . + 0 Parent=gene1641 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1641 chr21 ENCODE CDS 33867484 33867631 . + 0 Parent=gene1641 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1641 chr21 ENCODE CDS 33869772 33869843 . + 2 Parent=gene1641 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1641 chr21 ENCODE CDS 33869954 33870069 . + 2 Parent=gene1641 chr21 ENCODE CDS 33870541 33870600 . + 0 Parent=gene1641 chr21 ENCODE exon 33870541 33871657 . + . Parent=gene1641 ### chr21 ENCODE gene 33837220 33871655 . + . ID=gene1642;Name=AP000304.8-021;name2=SON chr21 ENCODE exon 33837220 33837345 . + . Parent=gene1642 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene1642 chr21 ENCODE exon 33843652 33845625 . + . Parent=gene1642 chr21 ENCODE exon 33845746 33849567 . + . Parent=gene1642 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene1642 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene1642 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene1642 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene1642 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene1642 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1642 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1642 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1642 chr21 ENCODE exon 33870541 33871655 . + . Parent=gene1642 ### chr21 ENCODE gene 33837228 33840928 . + . ID=gene1643;Name=AP000304.8-010;name2=SON chr21 ENCODE exon 33837228 33837345 . + . Parent=gene1643 chr21 ENCODE exon 33840389 33840928 . + . Parent=gene1643 ### chr21 ENCODE gene 33837228 33871657 . + . ID=gene1644;Name=AP000304.8-002;name2=SON chr21 ENCODE exon 33837228 33837345 . + . Parent=gene1644 chr21 ENCODE CDS 33837269 33837345 . + 0 Parent=gene1644 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene1644 chr21 ENCODE CDS 33840389 33840555 . + 1 Parent=gene1644 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene1644 chr21 ENCODE CDS 33851332 33851492 . + 2 Parent=gene1644 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene1644 chr21 ENCODE CDS 33853406 33853552 . + 0 Parent=gene1644 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene1644 chr21 ENCODE CDS 33853763 33853951 . + 0 Parent=gene1644 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene1644 chr21 ENCODE CDS 33861333 33861443 . + 0 Parent=gene1644 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene1644 chr21 ENCODE CDS 33863147 33863263 . + 0 Parent=gene1644 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1644 chr21 ENCODE CDS 33867484 33867631 . + 0 Parent=gene1644 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1644 chr21 ENCODE CDS 33869772 33869843 . + 2 Parent=gene1644 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1644 chr21 ENCODE CDS 33869954 33870069 . + 2 Parent=gene1644 chr21 ENCODE CDS 33870541 33870600 . + 0 Parent=gene1644 chr21 ENCODE exon 33870541 33871657 . + . Parent=gene1644 ### chr21 ENCODE gene 33837240 33854843 . + . ID=gene1645;Name=AP000304.8-003;name2=SON chr21 ENCODE exon 33837240 33837345 . + . Parent=gene1645 chr21 ENCODE CDS 33837269 33837345 . + 0 Parent=gene1645 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene1645 chr21 ENCODE CDS 33840389 33840555 . + 1 Parent=gene1645 chr21 ENCODE exon 33843652 33849567 . + . Parent=gene1645 chr21 ENCODE CDS 33843652 33849567 . + 2 Parent=gene1645 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene1645 chr21 ENCODE CDS 33851332 33851492 . + 2 Parent=gene1645 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene1645 chr21 ENCODE CDS 33853406 33853552 . + 0 Parent=gene1645 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene1645 chr21 ENCODE CDS 33853763 33853951 . + 0 Parent=gene1645 chr21 ENCODE CDS 33854053 33854307 . + 0 Parent=gene1645 chr21 ENCODE exon 33854053 33854843 . + . Parent=gene1645 ### chr21 ENCODE gene 33837240 33871657 . + . ID=gene1646;Name=AP000304.8-005;name2=SON chr21 ENCODE exon 33837240 33837345 . + . Parent=gene1646 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene1646 chr21 ENCODE exon 33843652 33849567 . + . Parent=gene1646 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene1646 chr21 ENCODE exon 33851722 33851844 . + . Parent=gene1646 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene1646 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene1646 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene1646 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene1646 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1646 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1646 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1646 chr21 ENCODE exon 33870594 33871657 . + . Parent=gene1646 ### chr21 ENCODE gene 33837240 33871657 . + . ID=gene1647;name2=SON;Name=AP000304.8-004 chr21 ENCODE exon 33837240 33837345 . + . Parent=gene1647 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene1647 chr21 ENCODE exon 33843652 33849567 . + . Parent=gene1647 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene1647 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene1647 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene1647 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene1647 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene1647 chr21 ENCODE exon 33866727 33866806 . + . Parent=gene1647 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1647 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1647 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1647 chr21 ENCODE exon 33870594 33871657 . + . Parent=gene1647 ### chr21 ENCODE gene 33837241 33853232 . + . ID=gene1648;name2=SON;Name=AP000304.8-006 chr21 ENCODE exon 33837241 33837345 . + . Parent=gene1648 chr21 ENCODE CDS 33837269 33837345 . + 0 Parent=gene1648 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene1648 chr21 ENCODE CDS 33840389 33840555 . + 1 Parent=gene1648 chr21 ENCODE exon 33843652 33849567 . + . Parent=gene1648 chr21 ENCODE CDS 33843652 33849567 . + 2 Parent=gene1648 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene1648 chr21 ENCODE CDS 33851332 33851492 . + 2 Parent=gene1648 chr21 ENCODE CDS 33851722 33851727 . + 0 Parent=gene1648 chr21 ENCODE exon 33851722 33853232 . + . Parent=gene1648 ### chr21 ENCODE gene 33837246 33841215 . + . ID=gene1649;Name=AP000304.8-011;name2=SON chr21 ENCODE exon 33837246 33837345 . + . Parent=gene1649 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene1649 chr21 ENCODE exon 33841177 33841215 . + . Parent=gene1649 ### chr21 ENCODE gene 33843772 33871651 . + . ID=gene1650;Name=AP000304.8-020;name2=SON chr21 ENCODE exon 33843772 33844416 . + . Parent=gene1650 chr21 ENCODE exon 33849478 33849567 . + . Parent=gene1650 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene1650 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene1650 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene1650 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene1650 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene1650 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1650 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1650 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1650 chr21 ENCODE exon 33870594 33871651 . + . Parent=gene1650 ### chr21 ENCODE gene 33845060 33871657 . + . ID=gene1651;Name=AP000304.8-007;name2=SON chr21 ENCODE exon 33845060 33845465 . + . Parent=gene1651 chr21 ENCODE exon 33846424 33849567 . + . Parent=gene1651 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene1651 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene1651 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene1651 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene1651 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene1651 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1651 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1651 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1651 chr21 ENCODE exon 33870541 33871657 . + . Parent=gene1651 ### chr21 ENCODE gene 33849225 33861643 . + . ID=gene1652;name2=SON;Name=AP000304.8-008 chr21 ENCODE exon 33849225 33849567 . + . Parent=gene1652 chr21 ENCODE CDS 33849225 33849567 . + 0 Parent=gene1652 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene1652 chr21 ENCODE CDS 33851332 33851492 . + 2 Parent=gene1652 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene1652 chr21 ENCODE CDS 33853406 33853552 . + 0 Parent=gene1652 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene1652 chr21 ENCODE CDS 33853763 33853951 . + 0 Parent=gene1652 chr21 ENCODE CDS 33861333 33861524 . + 0 Parent=gene1652 chr21 ENCODE exon 33861333 33861643 . + . Parent=gene1652 ### chr21 ENCODE gene 33861355 33863459 . + . ID=gene1653;Name=AP000304.8-012;name2=SON chr21 ENCODE exon 33861355 33861443 . + . Parent=gene1653 chr21 ENCODE exon 33863147 33863459 . + . Parent=gene1653 ### chr21 ENCODE gene 33861361 33870689 . + . ID=gene1654;Name=AP000304.8-013;name2=SON chr21 ENCODE exon 33861361 33861443 . + . Parent=gene1654 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene1654 chr21 ENCODE exon 33866727 33866806 . + . Parent=gene1654 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1654 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1654 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1654 chr21 ENCODE exon 33870541 33870689 . + . Parent=gene1654 ### chr21 ENCODE gene 33863952 33870660 . + . ID=gene1655;Name=AP000304.8-019;name2=SON chr21 ENCODE exon 33863952 33864106 . + . Parent=gene1655 chr21 ENCODE exon 33865927 33865964 . + . Parent=gene1655 chr21 ENCODE exon 33866727 33866806 . + . Parent=gene1655 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1655 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1655 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1655 chr21 ENCODE exon 33870594 33870660 . + . Parent=gene1655 ### chr21 ENCODE gene 33865911 33870623 . + . ID=gene1656;name2=SON;Name=AP000304.8-017 chr21 ENCODE exon 33865911 33865964 . + . Parent=gene1656 chr21 ENCODE exon 33866727 33866806 . + . Parent=gene1656 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1656 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1656 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1656 chr21 ENCODE exon 33870594 33870623 . + . Parent=gene1656 ### chr21 ENCODE gene 33865911 33870645 . + . ID=gene1657;Name=AP000304.8-018;name2=SON chr21 ENCODE exon 33865911 33865964 . + . Parent=gene1657 chr21 ENCODE exon 33866727 33866806 . + . Parent=gene1657 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1657 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1657 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1657 chr21 ENCODE exon 33870541 33870645 . + . Parent=gene1657 ### chr21 ENCODE gene 33866389 33871657 . + . ID=gene1658;Name=AP000304.8-009;name2=SON chr21 ENCODE exon 33866389 33866806 . + . Parent=gene1658 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1658 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1658 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1658 chr21 ENCODE exon 33870594 33871657 . + . Parent=gene1658 ### chr21 ENCODE gene 33866703 33871057 . + . ID=gene1659;Name=AP000304.8-014;name2=SON chr21 ENCODE exon 33866703 33866806 . + . Parent=gene1659 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene1659 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1659 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1659 chr21 ENCODE exon 33870541 33871057 . + . Parent=gene1659 ### chr21 ENCODE gene 33867201 33870692 . + . ID=gene1660;Name=AP000304.8-015;name2=SON chr21 ENCODE exon 33867201 33867631 . + . Parent=gene1660 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1660 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1660 chr21 ENCODE exon 33870541 33870692 . + . Parent=gene1660 ### chr21 ENCODE gene 33867390 33871158 . + . ID=gene1661;Name=AP000304.8-016;name2=SON chr21 ENCODE exon 33867390 33867631 . + . Parent=gene1661 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene1661 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene1661 chr21 ENCODE exon 33870594 33871158 . + . Parent=gene1661 ### chr21 ENCODE gene 33869653 33882846 . - . ID=gene1662;Name=AP000304.11-008;name2=DONSON chr21 ENCODE exon 33869653 33869984 . - . Parent=gene1662 chr21 ENCODE exon 33872475 33872620 . - . Parent=gene1662 chr21 ENCODE CDS 33872483 33872620 . - 0 Parent=gene1662 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene1662 chr21 ENCODE CDS 33873526 33873738 . - 0 Parent=gene1662 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene1662 chr21 ENCODE CDS 33875478 33875676 . - 1 Parent=gene1662 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene1662 chr21 ENCODE CDS 33876127 33876231 . - 1 Parent=gene1662 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene1662 chr21 ENCODE CDS 33876341 33876422 . - 2 Parent=gene1662 chr21 ENCODE exon 33877664 33877842 . - . Parent=gene1662 chr21 ENCODE CDS 33877664 33877842 . - 1 Parent=gene1662 chr21 ENCODE exon 33878766 33878902 . - . Parent=gene1662 chr21 ENCODE CDS 33878766 33878902 . - 0 Parent=gene1662 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene1662 chr21 ENCODE CDS 33880154 33880357 . - 0 Parent=gene1662 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene1662 chr21 ENCODE CDS 33881698 33881778 . - 0 Parent=gene1662 chr21 ENCODE CDS 33882497 33882817 . - 0 Parent=gene1662 chr21 ENCODE exon 33882497 33882846 . - . Parent=gene1662 ### chr21 ENCODE gene 33871737 33882822 . - . ID=gene1663;Name=AP000304.11-007;name2=DONSON chr21 ENCODE exon 33871737 33872620 . - . Parent=gene1663 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene1663 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene1663 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene1663 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene1663 chr21 ENCODE exon 33877664 33877842 . - . Parent=gene1663 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene1663 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene1663 chr21 ENCODE exon 33882497 33882822 . - . Parent=gene1663 ### chr21 ENCODE gene 33872081 33882884 . - . ID=gene1664;Name=AP000304.11-001;name2=DONSON chr21 ENCODE exon 33872081 33872620 . - . Parent=gene1664 chr21 ENCODE CDS 33872483 33872620 . - 0 Parent=gene1664 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene1664 chr21 ENCODE CDS 33873526 33873738 . - 0 Parent=gene1664 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene1664 chr21 ENCODE CDS 33875478 33875676 . - 1 Parent=gene1664 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene1664 chr21 ENCODE CDS 33876127 33876231 . - 1 Parent=gene1664 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene1664 chr21 ENCODE CDS 33876341 33876422 . - 2 Parent=gene1664 chr21 ENCODE exon 33877664 33877842 . - . Parent=gene1664 chr21 ENCODE CDS 33877664 33877842 . - 1 Parent=gene1664 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene1664 chr21 ENCODE CDS 33878766 33878944 . - 0 Parent=gene1664 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene1664 chr21 ENCODE CDS 33880154 33880357 . - 0 Parent=gene1664 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene1664 chr21 ENCODE CDS 33881698 33881778 . - 0 Parent=gene1664 chr21 ENCODE CDS 33882497 33882817 . - 0 Parent=gene1664 chr21 ENCODE exon 33882497 33882884 . - . Parent=gene1664 ### chr21 ENCODE gene 33872081 33889641 . - . ID=gene1665;Name=AP000304.11-003;name2=DONSON chr21 ENCODE exon 33872081 33872620 . - . Parent=gene1665 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene1665 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene1665 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene1665 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene1665 chr21 ENCODE exon 33877664 33877842 . - . Parent=gene1665 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene1665 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene1665 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene1665 chr21 ENCODE exon 33882497 33883137 . - . Parent=gene1665 chr21 ENCODE exon 33884017 33884097 . - . Parent=gene1665 chr21 ENCODE exon 33885338 33885547 . - . Parent=gene1665 chr21 ENCODE exon 33889532 33889641 . - . Parent=gene1665 ### chr21 ENCODE gene 33872093 33882846 . - . ID=gene1666;Name=AP000304.11-004;name2=DONSON chr21 ENCODE exon 33872093 33872620 . - . Parent=gene1666 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene1666 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene1666 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene1666 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene1666 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene1666 chr21 ENCODE exon 33880154 33880236 . - . Parent=gene1666 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene1666 chr21 ENCODE exon 33882497 33882846 . - . Parent=gene1666 ### chr21 ENCODE gene 33872100 33873790 . - . ID=gene1667;Name=AP000304.11-010;name2=DONSON chr21 ENCODE exon 33872100 33872620 . - . Parent=gene1667 chr21 ENCODE exon 33873526 33873790 . - . Parent=gene1667 ### chr21 ENCODE gene 33872118 33881778 . - . ID=gene1668;Name=AP000304.11-006;name2=DONSON chr21 ENCODE exon 33872118 33872620 . - . Parent=gene1668 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene1668 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene1668 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene1668 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene1668 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene1668 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene1668 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene1668 ### chr21 ENCODE gene 33872118 33881778 . - . ID=gene1669;Name=AP000304.11-005;name2=DONSON chr21 ENCODE exon 33872118 33872620 . - . Parent=gene1669 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene1669 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene1669 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene1669 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene1669 ### chr21 ENCODE gene 33872377 33882810 . - . ID=gene1670;Name=AP000304.11-002;name2=DONSON chr21 ENCODE exon 33872377 33872620 . - . Parent=gene1670 chr21 ENCODE CDS 33872483 33872620 . - 1 Parent=gene1670 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene1670 chr21 ENCODE CDS 33873526 33873738 . - 1 Parent=gene1670 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene1670 chr21 ENCODE CDS 33875478 33875676 . - 2 Parent=gene1670 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene1670 chr21 ENCODE CDS 33876127 33876231 . - 2 Parent=gene1670 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene1670 chr21 ENCODE CDS 33876341 33876422 . - 0 Parent=gene1670 chr21 ENCODE exon 33877664 33877842 . - . Parent=gene1670 chr21 ENCODE CDS 33877664 33877842 . - 2 Parent=gene1670 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene1670 chr21 ENCODE CDS 33878766 33878944 . - 1 Parent=gene1670 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene1670 chr21 ENCODE CDS 33880154 33880357 . - 1 Parent=gene1670 chr21 ENCODE exon 33882497 33882810 . - . Parent=gene1670 chr21 ENCODE CDS 33882497 33882810 . - 0 Parent=gene1670 ### chr21 ENCODE gene 33873700 33880334 . - . ID=gene1671;Name=AP000304.11-009;name2=DONSON chr21 ENCODE exon 33873700 33873738 . - . Parent=gene1671 chr21 ENCODE CDS 33873700 33873738 . - 2 Parent=gene1671 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene1671 chr21 ENCODE CDS 33875478 33875676 . - 0 Parent=gene1671 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene1671 chr21 ENCODE CDS 33876127 33876231 . - 0 Parent=gene1671 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene1671 chr21 ENCODE CDS 33878766 33878944 . - 2 Parent=gene1671 chr21 ENCODE exon 33880154 33880334 . - . Parent=gene1671 chr21 ENCODE CDS 33880154 33880334 . - 0 Parent=gene1671 ### chr21 ENCODE gene 33875351 33876230 . - . ID=gene1672;Name=AP000304.11-011;name2=DONSON chr21 ENCODE exon 33875351 33875676 . - . Parent=gene1672 chr21 ENCODE exon 33876127 33876230 . - . Parent=gene1672 ### chr21 ENCODE gene 33878863 34206505 . - . ID=gene1673;Name=AP000304.11-012;name2=DONSON chr21 ENCODE exon 33878863 33878944 . - . Parent=gene1673 chr21 ENCODE CDS 33878863 33878944 . - 2 Parent=gene1673 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene1673 chr21 ENCODE CDS 33880154 33880357 . - 2 Parent=gene1673 chr21 ENCODE exon 34201515 34201627 . - . Parent=gene1673 chr21 ENCODE CDS 34201515 34201627 . - 1 Parent=gene1673 chr21 ENCODE exon 34203256 34203385 . - . Parent=gene1673 chr21 ENCODE CDS 34203256 34203385 . - 2 Parent=gene1673 chr21 ENCODE exon 34206463 34206505 . - . Parent=gene1673 chr21 ENCODE CDS 34206463 34206505 . - 0 Parent=gene1673 ### chr21 ENCODE gene 33883517 33935936 . - . ID=gene1674;Name=AP000304.10-001;name2=CRYZL1 chr21 ENCODE exon 33883517 33884097 . - . Parent=gene1674 chr21 ENCODE CDS 33883998 33884097 . - 1 Parent=gene1674 chr21 ENCODE exon 33885338 33885383 . - . Parent=gene1674 chr21 ENCODE CDS 33885338 33885383 . - 2 Parent=gene1674 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene1674 chr21 ENCODE CDS 33889907 33890012 . - 0 Parent=gene1674 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene1674 chr21 ENCODE CDS 33891456 33891577 . - 2 Parent=gene1674 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene1674 chr21 ENCODE CDS 33893326 33893424 . - 2 Parent=gene1674 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene1674 chr21 ENCODE CDS 33896410 33896521 . - 0 Parent=gene1674 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1674 chr21 ENCODE CDS 33897580 33897713 . - 2 Parent=gene1674 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1674 chr21 ENCODE CDS 33907714 33907782 . - 2 Parent=gene1674 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene1674 chr21 ENCODE CDS 33910882 33910926 . - 2 Parent=gene1674 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1674 chr21 ENCODE CDS 33916172 33916244 . - 0 Parent=gene1674 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1674 chr21 ENCODE CDS 33918859 33918936 . - 0 Parent=gene1674 chr21 ENCODE CDS 33925662 33925727 . - 0 Parent=gene1674 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene1674 chr21 ENCODE exon 33935857 33935936 . - . Parent=gene1674 ### chr21 ENCODE gene 33883562 33936094 . - . ID=gene1675;Name=AP000304.10-007;name2=CRYZL1 chr21 ENCODE exon 33883562 33884097 . - . Parent=gene1675 chr21 ENCODE CDS 33883998 33884097 . - 1 Parent=gene1675 chr21 ENCODE exon 33885338 33885383 . - . Parent=gene1675 chr21 ENCODE CDS 33885338 33885383 . - 2 Parent=gene1675 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene1675 chr21 ENCODE CDS 33889907 33890012 . - 0 Parent=gene1675 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene1675 chr21 ENCODE CDS 33891456 33891577 . - 2 Parent=gene1675 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene1675 chr21 ENCODE CDS 33893326 33893424 . - 2 Parent=gene1675 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene1675 chr21 ENCODE CDS 33896410 33896521 . - 0 Parent=gene1675 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1675 chr21 ENCODE CDS 33897580 33897713 . - 2 Parent=gene1675 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1675 chr21 ENCODE CDS 33907714 33907782 . - 2 Parent=gene1675 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1675 chr21 ENCODE CDS 33916172 33916244 . - 0 Parent=gene1675 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1675 chr21 ENCODE CDS 33918859 33918936 . - 0 Parent=gene1675 chr21 ENCODE CDS 33925662 33925727 . - 0 Parent=gene1675 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene1675 chr21 ENCODE exon 33935857 33936094 . - . Parent=gene1675 ### chr21 ENCODE gene 33883637 33885894 . - . ID=gene1676;Name=AP000304.10-023;name2=CRYZL1 chr21 ENCODE exon 33883637 33884097 . - . Parent=gene1676 chr21 ENCODE exon 33885338 33885894 . - . Parent=gene1676 ### chr21 ENCODE gene 33883643 33935923 . - . ID=gene1677;Name=AP000304.10-002;name2=CRYZL1 chr21 ENCODE exon 33883643 33884097 . - . Parent=gene1677 chr21 ENCODE CDS 33884083 33884097 . - 0 Parent=gene1677 chr21 ENCODE exon 33885338 33885387 . - . Parent=gene1677 chr21 ENCODE CDS 33885338 33885387 . - 2 Parent=gene1677 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene1677 chr21 ENCODE CDS 33889907 33890012 . - 0 Parent=gene1677 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene1677 chr21 ENCODE CDS 33891456 33891577 . - 2 Parent=gene1677 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene1677 chr21 ENCODE CDS 33893326 33893424 . - 2 Parent=gene1677 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene1677 chr21 ENCODE CDS 33896410 33896521 . - 0 Parent=gene1677 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1677 chr21 ENCODE CDS 33897580 33897713 . - 2 Parent=gene1677 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1677 chr21 ENCODE CDS 33907714 33907782 . - 2 Parent=gene1677 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene1677 chr21 ENCODE CDS 33910882 33910926 . - 2 Parent=gene1677 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1677 chr21 ENCODE CDS 33916172 33916244 . - 0 Parent=gene1677 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1677 chr21 ENCODE CDS 33918859 33918936 . - 0 Parent=gene1677 chr21 ENCODE CDS 33925662 33925727 . - 0 Parent=gene1677 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene1677 chr21 ENCODE exon 33935857 33935923 . - . Parent=gene1677 ### chr21 ENCODE gene 33883644 33907736 . - . ID=gene1678;Name=AP000304.10-009;name2=CRYZL1 chr21 ENCODE exon 33883644 33884097 . - . Parent=gene1678 chr21 ENCODE exon 33885338 33885547 . - . Parent=gene1678 chr21 ENCODE exon 33889532 33889790 . - . Parent=gene1678 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene1678 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene1678 chr21 ENCODE exon 33893326 33893461 . - . Parent=gene1678 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene1678 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1678 chr21 ENCODE exon 33907714 33907736 . - . Parent=gene1678 ### chr21 ENCODE gene 33883721 33893327 . - . ID=gene1679;Name=AP000304.10-021;name2=CRYZL1 chr21 ENCODE exon 33883721 33883981 . - . Parent=gene1679 chr21 ENCODE CDS 33883921 33883981 . - 0 Parent=gene1679 chr21 ENCODE exon 33885338 33885383 . - . Parent=gene1679 chr21 ENCODE CDS 33885338 33885383 . - 1 Parent=gene1679 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene1679 chr21 ENCODE CDS 33889907 33890012 . - 2 Parent=gene1679 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene1679 chr21 ENCODE CDS 33891456 33891577 . - 1 Parent=gene1679 chr21 ENCODE exon 33893326 33893327 . - . Parent=gene1679 chr21 ENCODE CDS 33893326 33893327 . - 0 Parent=gene1679 ### chr21 ENCODE gene 33883736 33891576 . - . ID=gene1680;Name=AP000304.10-022;name2=CRYZL1 chr21 ENCODE exon 33883736 33884097 . - . Parent=gene1680 chr21 ENCODE exon 33885338 33885404 . - . Parent=gene1680 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene1680 chr21 ENCODE exon 33891456 33891576 . - . Parent=gene1680 ### chr21 ENCODE gene 33883945 33896441 . - . ID=gene1681;Name=AP000304.10-019;name2=CRYZL1 chr21 ENCODE exon 33883945 33884097 . - . Parent=gene1681 chr21 ENCODE exon 33885338 33885383 . - . Parent=gene1681 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene1681 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene1681 chr21 ENCODE exon 33893326 33893461 . - . Parent=gene1681 chr21 ENCODE exon 33896410 33896441 . - . Parent=gene1681 ### chr21 ENCODE gene 33888683 33935935 . - . ID=gene1682;Name=AP000304.10-003;name2=CRYZL1 chr21 ENCODE exon 33888683 33889790 . - . Parent=gene1682 chr21 ENCODE CDS 33889789 33889790 . - 2 Parent=gene1682 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene1682 chr21 ENCODE CDS 33889907 33890012 . - 0 Parent=gene1682 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene1682 chr21 ENCODE CDS 33891456 33891577 . - 2 Parent=gene1682 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene1682 chr21 ENCODE CDS 33893326 33893424 . - 2 Parent=gene1682 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene1682 chr21 ENCODE CDS 33896410 33896521 . - 0 Parent=gene1682 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1682 chr21 ENCODE CDS 33897580 33897713 . - 2 Parent=gene1682 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1682 chr21 ENCODE CDS 33907714 33907782 . - 2 Parent=gene1682 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene1682 chr21 ENCODE CDS 33910882 33910926 . - 2 Parent=gene1682 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1682 chr21 ENCODE CDS 33916172 33916244 . - 0 Parent=gene1682 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1682 chr21 ENCODE CDS 33918859 33918936 . - 0 Parent=gene1682 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene1682 chr21 ENCODE CDS 33925662 33925733 . - 0 Parent=gene1682 chr21 ENCODE CDS 33935355 33935420 . - 0 Parent=gene1682 chr21 ENCODE exon 33935355 33935481 . - . Parent=gene1682 chr21 ENCODE exon 33935857 33935935 . - . Parent=gene1682 ### chr21 ENCODE gene 33888819 33935917 . - . ID=gene1683;Name=AP000304.10-006;name2=CRYZL1 chr21 ENCODE exon 33888819 33889790 . - . Parent=gene1683 chr21 ENCODE exon 33889905 33890012 . - . Parent=gene1683 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene1683 chr21 ENCODE exon 33893326 33893461 . - . Parent=gene1683 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene1683 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1683 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1683 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1683 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1683 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene1683 chr21 ENCODE exon 33935857 33935917 . - . Parent=gene1683 ### chr21 ENCODE gene 33888838 33936514 . - . ID=gene1684;name2=CRYZL1;Name=AP000304.10-005 chr21 ENCODE exon 33888838 33889790 . - . Parent=gene1684 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene1684 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene1684 chr21 ENCODE exon 33893326 33893461 . - . Parent=gene1684 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene1684 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1684 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1684 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene1684 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1684 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1684 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene1684 chr21 ENCODE exon 33935857 33936514 . - . Parent=gene1684 ### chr21 ENCODE gene 33889307 33916218 . - . ID=gene1685;Name=AP000304.10-017;name2=CRYZL1 chr21 ENCODE exon 33889307 33889704 . - . Parent=gene1685 chr21 ENCODE CDS 33889609 33889704 . - 2 Parent=gene1685 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene1685 chr21 ENCODE CDS 33891456 33891577 . - 1 Parent=gene1685 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene1685 chr21 ENCODE CDS 33893326 33893424 . - 1 Parent=gene1685 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene1685 chr21 ENCODE CDS 33896410 33896521 . - 2 Parent=gene1685 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1685 chr21 ENCODE CDS 33897580 33897713 . - 1 Parent=gene1685 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1685 chr21 ENCODE CDS 33907714 33907782 . - 1 Parent=gene1685 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene1685 chr21 ENCODE CDS 33910882 33910926 . - 1 Parent=gene1685 chr21 ENCODE exon 33916172 33916218 . - . Parent=gene1685 chr21 ENCODE CDS 33916172 33916218 . - 0 Parent=gene1685 ### chr21 ENCODE gene 33889513 33896432 . - . ID=gene1686;Name=AP000304.10-020;name2=CRYZL1 chr21 ENCODE exon 33889513 33889790 . - . Parent=gene1686 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene1686 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene1686 chr21 ENCODE exon 33896410 33896432 . - . Parent=gene1686 ### chr21 ENCODE gene 33890238 33897624 . - . ID=gene1687;Name=AP000304.10-018;name2=CRYZL1 chr21 ENCODE exon 33890238 33890389 . - . Parent=gene1687 chr21 ENCODE CDS 33890352 33890389 . - 2 Parent=gene1687 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene1687 chr21 ENCODE CDS 33893326 33893424 . - 2 Parent=gene1687 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene1687 chr21 ENCODE CDS 33896410 33896521 . - 0 Parent=gene1687 chr21 ENCODE exon 33897580 33897624 . - . Parent=gene1687 chr21 ENCODE CDS 33897580 33897624 . - 0 Parent=gene1687 ### chr21 ENCODE gene 33893372 33935921 . - . ID=gene1688;Name=AP000304.10-012;name2=CRYZL1 chr21 ENCODE exon 33893372 33893424 . - . Parent=gene1688 chr21 ENCODE CDS 33893372 33893424 . - 2 Parent=gene1688 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene1688 chr21 ENCODE CDS 33896410 33896521 . - 0 Parent=gene1688 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1688 chr21 ENCODE CDS 33897580 33897713 . - 2 Parent=gene1688 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1688 chr21 ENCODE CDS 33907714 33907782 . - 2 Parent=gene1688 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene1688 chr21 ENCODE CDS 33910882 33910926 . - 2 Parent=gene1688 chr21 ENCODE CDS 33916172 33916232 . - 0 Parent=gene1688 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1688 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1688 chr21 ENCODE exon 33935857 33935921 . - . Parent=gene1688 ### chr21 ENCODE gene 33896444 33927878 . - . ID=gene1689;Name=AP000304.10-013;name2=CRYZL1 chr21 ENCODE exon 33896444 33896521 . - . Parent=gene1689 chr21 ENCODE CDS 33896444 33896521 . - 0 Parent=gene1689 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1689 chr21 ENCODE CDS 33897580 33897713 . - 2 Parent=gene1689 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1689 chr21 ENCODE CDS 33907714 33907782 . - 2 Parent=gene1689 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene1689 chr21 ENCODE CDS 33910882 33910926 . - 2 Parent=gene1689 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1689 chr21 ENCODE CDS 33916172 33916244 . - 0 Parent=gene1689 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1689 chr21 ENCODE CDS 33918859 33918936 . - 0 Parent=gene1689 chr21 ENCODE CDS 33925662 33925727 . - 0 Parent=gene1689 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene1689 chr21 ENCODE exon 33927822 33927878 . - . Parent=gene1689 ### chr21 ENCODE gene 33896508 33911352 . - . ID=gene1690;Name=AP000304.10-015;name2=CRYZL1 chr21 ENCODE exon 33896508 33896521 . - . Parent=gene1690 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1690 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1690 chr21 ENCODE exon 33910882 33911352 . - . Parent=gene1690 ### chr21 ENCODE gene 33896509 33935906 . - . ID=gene1691;Name=AP000304.10-014;name2=CRYZL1 chr21 ENCODE exon 33896509 33896521 . - . Parent=gene1691 chr21 ENCODE CDS 33896509 33896521 . - 0 Parent=gene1691 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene1691 chr21 ENCODE CDS 33897580 33897713 . - 2 Parent=gene1691 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1691 chr21 ENCODE CDS 33907714 33907782 . - 2 Parent=gene1691 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene1691 chr21 ENCODE CDS 33910882 33910926 . - 2 Parent=gene1691 chr21 ENCODE CDS 33916172 33916232 . - 0 Parent=gene1691 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1691 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1691 chr21 ENCODE exon 33925662 33925703 . - . Parent=gene1691 chr21 ENCODE exon 33935857 33935906 . - . Parent=gene1691 ### chr21 ENCODE gene 33897332 33935896 . - . ID=gene1692;Name=AP000304.10-016;name2=CRYZL1 chr21 ENCODE exon 33897332 33897713 . - . Parent=gene1692 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene1692 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene1692 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1692 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1692 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene1692 chr21 ENCODE exon 33935857 33935896 . - . Parent=gene1692 ### chr21 ENCODE gene 33910463 33935898 . - . ID=gene1693;Name=AP000304.10-008;name2=CRYZL1 chr21 ENCODE exon 33910463 33910779 . - . Parent=gene1693 chr21 ENCODE CDS 33910700 33910779 . - 2 Parent=gene1693 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene1693 chr21 ENCODE CDS 33910882 33910926 . - 2 Parent=gene1693 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene1693 chr21 ENCODE CDS 33916172 33916244 . - 0 Parent=gene1693 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene1693 chr21 ENCODE CDS 33918859 33918936 . - 0 Parent=gene1693 chr21 ENCODE CDS 33925662 33925727 . - 0 Parent=gene1693 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene1693 chr21 ENCODE exon 33935857 33935898 . - . Parent=gene1693 ### chr21 ENCODE gene 33925669 33938102 . - . ID=gene1694;Name=AP000304.10-011;name2=CRYZL1 chr21 ENCODE exon 33925669 33925733 . - . Parent=gene1694 chr21 ENCODE exon 33937548 33938102 . - . Parent=gene1694 ### chr21 ENCODE gene 33933921 33935897 . - . ID=gene1695;Name=AP000304.10-004;name2=CRYZL1 chr21 ENCODE exon 33933921 33934364 . - . Parent=gene1695 chr21 ENCODE CDS 33934356 33934364 . - 0 Parent=gene1695 chr21 ENCODE CDS 33935355 33935420 . - 0 Parent=gene1695 chr21 ENCODE exon 33935355 33935481 . - . Parent=gene1695 chr21 ENCODE exon 33935857 33935897 . - . Parent=gene1695 ### chr21 ENCODE gene 33936576 34088586 . + . ID=gene1696;Name=AP000313.6-020;name2=ITSN1 chr21 ENCODE exon 33936576 33936889 . + . Parent=gene1696 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene1696 chr21 ENCODE CDS 34013004 34013031 . + 0 Parent=gene1696 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene1696 chr21 ENCODE CDS 34015353 34015445 . + 2 Parent=gene1696 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene1696 chr21 ENCODE CDS 34016763 34016826 . + 2 Parent=gene1696 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene1696 chr21 ENCODE CDS 34029219 34029379 . + 1 Parent=gene1696 chr21 ENCODE exon 34044429 34044497 . + . Parent=gene1696 chr21 ENCODE CDS 34044429 34044497 . + 2 Parent=gene1696 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene1696 chr21 ENCODE CDS 34045985 34046081 . + 2 Parent=gene1696 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene1696 chr21 ENCODE CDS 34049472 34049572 . + 1 Parent=gene1696 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene1696 chr21 ENCODE CDS 34056097 34056160 . + 2 Parent=gene1696 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene1696 chr21 ENCODE CDS 34060049 34060186 . + 1 Parent=gene1696 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene1696 chr21 ENCODE CDS 34061887 34062002 . + 1 Parent=gene1696 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene1696 chr21 ENCODE CDS 34066235 34066497 . + 2 Parent=gene1696 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene1696 chr21 ENCODE CDS 34068903 34069052 . + 0 Parent=gene1696 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene1696 chr21 ENCODE CDS 34069142 34069282 . + 0 Parent=gene1696 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene1696 chr21 ENCODE CDS 34075635 34075722 . + 0 Parent=gene1696 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene1696 chr21 ENCODE CDS 34076168 34076307 . + 2 Parent=gene1696 chr21 ENCODE exon 34088515 34088586 . + . Parent=gene1696 chr21 ENCODE CDS 34088515 34088586 . + 0 Parent=gene1696 ### chr21 ENCODE gene 33936576 34131192 . + . ID=gene1697;Name=AP000313.6-025;name2=ITSN1 chr21 ENCODE exon 33936576 33936889 . + . Parent=gene1697 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene1697 chr21 ENCODE CDS 34013004 34013031 . + 0 Parent=gene1697 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene1697 chr21 ENCODE CDS 34015353 34015445 . + 2 Parent=gene1697 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene1697 chr21 ENCODE CDS 34016763 34016826 . + 2 Parent=gene1697 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene1697 chr21 ENCODE CDS 34029219 34029379 . + 1 Parent=gene1697 chr21 ENCODE exon 34044429 34044497 . + . Parent=gene1697 chr21 ENCODE CDS 34044429 34044497 . + 2 Parent=gene1697 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene1697 chr21 ENCODE CDS 34045985 34046081 . + 2 Parent=gene1697 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene1697 chr21 ENCODE CDS 34049472 34049572 . + 1 Parent=gene1697 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene1697 chr21 ENCODE CDS 34056097 34056160 . + 2 Parent=gene1697 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene1697 chr21 ENCODE CDS 34060049 34060186 . + 1 Parent=gene1697 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene1697 chr21 ENCODE CDS 34061887 34062002 . + 1 Parent=gene1697 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene1697 chr21 ENCODE CDS 34066235 34066497 . + 2 Parent=gene1697 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene1697 chr21 ENCODE CDS 34068903 34069052 . + 0 Parent=gene1697 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene1697 chr21 ENCODE CDS 34069142 34069282 . + 0 Parent=gene1697 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene1697 chr21 ENCODE CDS 34075635 34075722 . + 0 Parent=gene1697 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene1697 chr21 ENCODE CDS 34076168 34076307 . + 2 Parent=gene1697 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene1697 chr21 ENCODE CDS 34088515 34088642 . + 0 Parent=gene1697 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene1697 chr21 ENCODE CDS 34091553 34091782 . + 1 Parent=gene1697 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene1697 chr21 ENCODE CDS 34093982 34094103 . + 2 Parent=gene1697 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene1697 chr21 ENCODE CDS 34105149 34105396 . + 0 Parent=gene1697 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene1697 chr21 ENCODE CDS 34108087 34108246 . + 1 Parent=gene1697 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene1697 chr21 ENCODE CDS 34112441 34112646 . + 0 Parent=gene1697 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene1697 chr21 ENCODE CDS 34113415 34113497 . + 1 Parent=gene1697 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene1697 chr21 ENCODE CDS 34117661 34117827 . + 2 Parent=gene1697 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene1697 chr21 ENCODE CDS 34120992 34121037 . + 0 Parent=gene1697 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1697 chr21 ENCODE CDS 34123798 34123919 . + 2 Parent=gene1697 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1697 chr21 ENCODE CDS 34128481 34128598 . + 0 Parent=gene1697 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1697 chr21 ENCODE CDS 34130615 34130806 . + 2 Parent=gene1697 chr21 ENCODE CDS 34131161 34131162 . + 2 Parent=gene1697 chr21 ENCODE exon 34131161 34131192 . + . Parent=gene1697 ### chr21 ENCODE gene 33936628 34029379 . + . ID=gene1698;Name=AP000313.6-033;name2=ITSN1 chr21 ENCODE exon 33936628 33936889 . + . Parent=gene1698 chr21 ENCODE exon 33983497 33983558 . + . Parent=gene1698 chr21 ENCODE exon 34010606 34010730 . + . Parent=gene1698 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene1698 chr21 ENCODE CDS 34013004 34013031 . + 0 Parent=gene1698 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene1698 chr21 ENCODE CDS 34015353 34015445 . + 2 Parent=gene1698 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene1698 chr21 ENCODE CDS 34016763 34016826 . + 2 Parent=gene1698 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene1698 chr21 ENCODE CDS 34029219 34029379 . + 1 Parent=gene1698 ### chr21 ENCODE gene 33936629 34016166 . + . ID=gene1699;Name=AP000313.6-034;name2=ITSN1 chr21 ENCODE exon 33936629 33936889 . + . Parent=gene1699 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene1699 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene1699 chr21 ENCODE exon 34016107 34016166 . + . Parent=gene1699 ### chr21 ENCODE gene 33936634 34194035 . + . ID=gene1700;Name=AP000313.6-001;name2=ITSN1 chr21 ENCODE exon 33936634 33936889 . + . Parent=gene1700 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene1700 chr21 ENCODE CDS 34013004 34013031 . + 0 Parent=gene1700 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene1700 chr21 ENCODE CDS 34015353 34015445 . + 2 Parent=gene1700 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene1700 chr21 ENCODE CDS 34016763 34016826 . + 2 Parent=gene1700 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene1700 chr21 ENCODE CDS 34029219 34029379 . + 1 Parent=gene1700 chr21 ENCODE exon 34044318 34044497 . + . Parent=gene1700 chr21 ENCODE CDS 34044318 34044497 . + 2 Parent=gene1700 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene1700 chr21 ENCODE CDS 34045985 34046081 . + 2 Parent=gene1700 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene1700 chr21 ENCODE CDS 34049472 34049572 . + 1 Parent=gene1700 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene1700 chr21 ENCODE CDS 34056097 34056160 . + 2 Parent=gene1700 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene1700 chr21 ENCODE CDS 34060049 34060186 . + 1 Parent=gene1700 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene1700 chr21 ENCODE CDS 34061887 34062002 . + 1 Parent=gene1700 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene1700 chr21 ENCODE CDS 34066235 34066497 . + 2 Parent=gene1700 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene1700 chr21 ENCODE CDS 34068903 34069052 . + 0 Parent=gene1700 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene1700 chr21 ENCODE CDS 34069142 34069282 . + 0 Parent=gene1700 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene1700 chr21 ENCODE CDS 34075635 34075722 . + 0 Parent=gene1700 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene1700 chr21 ENCODE CDS 34076168 34076307 . + 2 Parent=gene1700 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene1700 chr21 ENCODE CDS 34088515 34088642 . + 0 Parent=gene1700 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene1700 chr21 ENCODE CDS 34091553 34091782 . + 1 Parent=gene1700 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene1700 chr21 ENCODE CDS 34093982 34094103 . + 2 Parent=gene1700 chr21 ENCODE exon 34096604 34096618 . + . Parent=gene1700 chr21 ENCODE CDS 34096604 34096618 . + 0 Parent=gene1700 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene1700 chr21 ENCODE CDS 34105149 34105396 . + 0 Parent=gene1700 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene1700 chr21 ENCODE CDS 34108087 34108246 . + 1 Parent=gene1700 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene1700 chr21 ENCODE CDS 34112441 34112646 . + 0 Parent=gene1700 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene1700 chr21 ENCODE CDS 34113415 34113497 . + 1 Parent=gene1700 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene1700 chr21 ENCODE CDS 34117661 34117827 . + 2 Parent=gene1700 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene1700 chr21 ENCODE CDS 34120992 34121037 . + 0 Parent=gene1700 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1700 chr21 ENCODE CDS 34123798 34123919 . + 2 Parent=gene1700 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1700 chr21 ENCODE CDS 34128481 34128598 . + 0 Parent=gene1700 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1700 chr21 ENCODE CDS 34130615 34130806 . + 2 Parent=gene1700 chr21 ENCODE exon 34150910 34151031 . + . Parent=gene1700 chr21 ENCODE CDS 34150910 34151031 . + 2 Parent=gene1700 chr21 ENCODE exon 34152860 34152966 . + . Parent=gene1700 chr21 ENCODE CDS 34152860 34152966 . + 0 Parent=gene1700 chr21 ENCODE exon 34159325 34159508 . + . Parent=gene1700 chr21 ENCODE CDS 34159325 34159508 . + 1 Parent=gene1700 chr21 ENCODE exon 34161407 34161505 . + . Parent=gene1700 chr21 ENCODE CDS 34161407 34161505 . + 0 Parent=gene1700 chr21 ENCODE exon 34169528 34169695 . + . Parent=gene1700 chr21 ENCODE CDS 34169528 34169695 . + 0 Parent=gene1700 chr21 ENCODE exon 34176417 34176629 . + . Parent=gene1700 chr21 ENCODE CDS 34176417 34176629 . + 0 Parent=gene1700 chr21 ENCODE exon 34177724 34177845 . + . Parent=gene1700 chr21 ENCODE CDS 34177724 34177845 . + 0 Parent=gene1700 chr21 ENCODE exon 34179215 34179297 . + . Parent=gene1700 chr21 ENCODE CDS 34179215 34179297 . + 1 Parent=gene1700 chr21 ENCODE exon 34179613 34179696 . + . Parent=gene1700 chr21 ENCODE CDS 34179613 34179696 . + 2 Parent=gene1700 chr21 ENCODE exon 34180461 34180634 . + . Parent=gene1700 chr21 ENCODE CDS 34180461 34180634 . + 2 Parent=gene1700 chr21 ENCODE CDS 34182326 34182474 . + 2 Parent=gene1700 chr21 ENCODE exon 34182326 34194035 . + . Parent=gene1700 ### chr21 ENCODE gene 33936654 34132668 . + . ID=gene1701;Name=AP000313.6-002;name2=ITSN1 chr21 ENCODE exon 33936654 33936889 . + . Parent=gene1701 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene1701 chr21 ENCODE CDS 34013004 34013031 . + 0 Parent=gene1701 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene1701 chr21 ENCODE CDS 34015353 34015445 . + 2 Parent=gene1701 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene1701 chr21 ENCODE CDS 34016763 34016826 . + 2 Parent=gene1701 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene1701 chr21 ENCODE CDS 34029219 34029379 . + 1 Parent=gene1701 chr21 ENCODE exon 34044318 34044497 . + . Parent=gene1701 chr21 ENCODE CDS 34044318 34044497 . + 2 Parent=gene1701 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene1701 chr21 ENCODE CDS 34045985 34046081 . + 2 Parent=gene1701 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene1701 chr21 ENCODE CDS 34049472 34049572 . + 1 Parent=gene1701 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene1701 chr21 ENCODE CDS 34056097 34056160 . + 2 Parent=gene1701 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene1701 chr21 ENCODE CDS 34060049 34060186 . + 1 Parent=gene1701 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene1701 chr21 ENCODE CDS 34061887 34062002 . + 1 Parent=gene1701 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene1701 chr21 ENCODE CDS 34066235 34066497 . + 2 Parent=gene1701 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene1701 chr21 ENCODE CDS 34068903 34069052 . + 0 Parent=gene1701 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene1701 chr21 ENCODE CDS 34069142 34069282 . + 0 Parent=gene1701 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene1701 chr21 ENCODE CDS 34075635 34075722 . + 0 Parent=gene1701 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene1701 chr21 ENCODE CDS 34076168 34076307 . + 2 Parent=gene1701 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene1701 chr21 ENCODE CDS 34088515 34088642 . + 0 Parent=gene1701 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene1701 chr21 ENCODE CDS 34091553 34091782 . + 1 Parent=gene1701 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene1701 chr21 ENCODE CDS 34093982 34094103 . + 2 Parent=gene1701 chr21 ENCODE exon 34096604 34096618 . + . Parent=gene1701 chr21 ENCODE CDS 34096604 34096618 . + 0 Parent=gene1701 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene1701 chr21 ENCODE CDS 34105149 34105396 . + 0 Parent=gene1701 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene1701 chr21 ENCODE CDS 34108087 34108246 . + 1 Parent=gene1701 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene1701 chr21 ENCODE CDS 34112441 34112646 . + 0 Parent=gene1701 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene1701 chr21 ENCODE CDS 34113415 34113497 . + 1 Parent=gene1701 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene1701 chr21 ENCODE CDS 34117661 34117827 . + 2 Parent=gene1701 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene1701 chr21 ENCODE CDS 34120992 34121037 . + 0 Parent=gene1701 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1701 chr21 ENCODE CDS 34123798 34123919 . + 2 Parent=gene1701 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1701 chr21 ENCODE CDS 34128481 34128598 . + 0 Parent=gene1701 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1701 chr21 ENCODE CDS 34130615 34130806 . + 2 Parent=gene1701 chr21 ENCODE CDS 34131161 34131162 . + 2 Parent=gene1701 chr21 ENCODE exon 34131161 34132668 . + . Parent=gene1701 ### chr21 ENCODE gene 33936659 34182782 . + . ID=gene1702;Name=AP000313.6-023;name2=ITSN1 chr21 ENCODE exon 33936659 33936889 . + . Parent=gene1702 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene1702 chr21 ENCODE CDS 34013004 34013031 . + 0 Parent=gene1702 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene1702 chr21 ENCODE CDS 34015353 34015445 . + 2 Parent=gene1702 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene1702 chr21 ENCODE CDS 34016763 34016826 . + 2 Parent=gene1702 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene1702 chr21 ENCODE CDS 34029219 34029379 . + 1 Parent=gene1702 chr21 ENCODE exon 34044318 34044497 . + . Parent=gene1702 chr21 ENCODE CDS 34044318 34044497 . + 2 Parent=gene1702 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene1702 chr21 ENCODE CDS 34045985 34046081 . + 2 Parent=gene1702 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene1702 chr21 ENCODE CDS 34049472 34049572 . + 1 Parent=gene1702 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene1702 chr21 ENCODE CDS 34056097 34056160 . + 2 Parent=gene1702 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene1702 chr21 ENCODE CDS 34060049 34060186 . + 1 Parent=gene1702 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene1702 chr21 ENCODE CDS 34061887 34062002 . + 1 Parent=gene1702 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene1702 chr21 ENCODE CDS 34066235 34066497 . + 2 Parent=gene1702 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene1702 chr21 ENCODE CDS 34068903 34069052 . + 0 Parent=gene1702 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene1702 chr21 ENCODE CDS 34069142 34069282 . + 0 Parent=gene1702 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene1702 chr21 ENCODE CDS 34075635 34075722 . + 0 Parent=gene1702 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene1702 chr21 ENCODE CDS 34076168 34076307 . + 2 Parent=gene1702 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene1702 chr21 ENCODE CDS 34088515 34088642 . + 0 Parent=gene1702 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene1702 chr21 ENCODE CDS 34091553 34091782 . + 1 Parent=gene1702 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene1702 chr21 ENCODE CDS 34093982 34094103 . + 2 Parent=gene1702 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene1702 chr21 ENCODE CDS 34105149 34105396 . + 0 Parent=gene1702 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene1702 chr21 ENCODE CDS 34108087 34108246 . + 1 Parent=gene1702 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene1702 chr21 ENCODE CDS 34112441 34112646 . + 0 Parent=gene1702 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene1702 chr21 ENCODE CDS 34113415 34113497 . + 1 Parent=gene1702 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene1702 chr21 ENCODE CDS 34117661 34117827 . + 2 Parent=gene1702 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene1702 chr21 ENCODE CDS 34120992 34121037 . + 0 Parent=gene1702 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1702 chr21 ENCODE CDS 34123798 34123919 . + 2 Parent=gene1702 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1702 chr21 ENCODE CDS 34128481 34128598 . + 0 Parent=gene1702 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1702 chr21 ENCODE CDS 34130615 34130806 . + 2 Parent=gene1702 chr21 ENCODE exon 34150910 34151031 . + . Parent=gene1702 chr21 ENCODE CDS 34150910 34151031 . + 2 Parent=gene1702 chr21 ENCODE exon 34152860 34152966 . + . Parent=gene1702 chr21 ENCODE CDS 34152860 34152966 . + 0 Parent=gene1702 chr21 ENCODE exon 34159325 34159508 . + . Parent=gene1702 chr21 ENCODE CDS 34159325 34159508 . + 1 Parent=gene1702 chr21 ENCODE exon 34161407 34161505 . + . Parent=gene1702 chr21 ENCODE CDS 34161407 34161505 . + 0 Parent=gene1702 chr21 ENCODE exon 34169528 34169695 . + . Parent=gene1702 chr21 ENCODE CDS 34169528 34169695 . + 0 Parent=gene1702 chr21 ENCODE exon 34176417 34176629 . + . Parent=gene1702 chr21 ENCODE CDS 34176417 34176629 . + 0 Parent=gene1702 chr21 ENCODE exon 34177724 34177845 . + . Parent=gene1702 chr21 ENCODE CDS 34177724 34177845 . + 0 Parent=gene1702 chr21 ENCODE exon 34179215 34179297 . + . Parent=gene1702 chr21 ENCODE CDS 34179215 34179297 . + 1 Parent=gene1702 chr21 ENCODE exon 34179613 34179696 . + . Parent=gene1702 chr21 ENCODE CDS 34179613 34179696 . + 2 Parent=gene1702 chr21 ENCODE exon 34180461 34180634 . + . Parent=gene1702 chr21 ENCODE CDS 34180461 34180634 . + 2 Parent=gene1702 chr21 ENCODE CDS 34182326 34182474 . + 2 Parent=gene1702 chr21 ENCODE exon 34182326 34182782 . + . Parent=gene1702 ### chr21 ENCODE gene 33936672 34132672 . + . ID=gene1703;Name=AP000313.6-024;name2=ITSN1 chr21 ENCODE exon 33936672 33936889 . + . Parent=gene1703 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene1703 chr21 ENCODE CDS 34013004 34013031 . + 0 Parent=gene1703 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene1703 chr21 ENCODE CDS 34015353 34015445 . + 2 Parent=gene1703 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene1703 chr21 ENCODE CDS 34016763 34016826 . + 2 Parent=gene1703 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene1703 chr21 ENCODE CDS 34029219 34029379 . + 1 Parent=gene1703 chr21 ENCODE exon 34044318 34044497 . + . Parent=gene1703 chr21 ENCODE CDS 34044318 34044497 . + 2 Parent=gene1703 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene1703 chr21 ENCODE CDS 34045985 34046081 . + 2 Parent=gene1703 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene1703 chr21 ENCODE CDS 34049472 34049572 . + 1 Parent=gene1703 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene1703 chr21 ENCODE CDS 34056097 34056160 . + 2 Parent=gene1703 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene1703 chr21 ENCODE CDS 34060049 34060186 . + 1 Parent=gene1703 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene1703 chr21 ENCODE CDS 34061887 34062002 . + 1 Parent=gene1703 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene1703 chr21 ENCODE CDS 34066235 34066497 . + 2 Parent=gene1703 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene1703 chr21 ENCODE CDS 34068903 34069052 . + 0 Parent=gene1703 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene1703 chr21 ENCODE CDS 34069142 34069282 . + 0 Parent=gene1703 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene1703 chr21 ENCODE CDS 34075635 34075722 . + 0 Parent=gene1703 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene1703 chr21 ENCODE CDS 34076168 34076307 . + 2 Parent=gene1703 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene1703 chr21 ENCODE CDS 34088515 34088642 . + 0 Parent=gene1703 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene1703 chr21 ENCODE CDS 34091553 34091782 . + 1 Parent=gene1703 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene1703 chr21 ENCODE CDS 34093982 34094103 . + 2 Parent=gene1703 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene1703 chr21 ENCODE CDS 34105149 34105396 . + 0 Parent=gene1703 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene1703 chr21 ENCODE CDS 34108087 34108246 . + 1 Parent=gene1703 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene1703 chr21 ENCODE CDS 34112441 34112646 . + 0 Parent=gene1703 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene1703 chr21 ENCODE CDS 34113415 34113497 . + 1 Parent=gene1703 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene1703 chr21 ENCODE CDS 34117661 34117827 . + 2 Parent=gene1703 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene1703 chr21 ENCODE CDS 34120992 34121037 . + 0 Parent=gene1703 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1703 chr21 ENCODE CDS 34123798 34123919 . + 2 Parent=gene1703 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1703 chr21 ENCODE CDS 34128481 34128598 . + 0 Parent=gene1703 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1703 chr21 ENCODE CDS 34130615 34130806 . + 2 Parent=gene1703 chr21 ENCODE CDS 34131161 34131162 . + 2 Parent=gene1703 chr21 ENCODE exon 34131161 34132672 . + . Parent=gene1703 ### chr21 ENCODE gene 33936674 34132670 . + . ID=gene1704;Name=AP000313.6-003;name2=ITSN1 chr21 ENCODE exon 33936674 33936889 . + . Parent=gene1704 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene1704 chr21 ENCODE CDS 34013004 34013031 . + 0 Parent=gene1704 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene1704 chr21 ENCODE CDS 34015353 34015445 . + 2 Parent=gene1704 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene1704 chr21 ENCODE CDS 34016763 34016826 . + 2 Parent=gene1704 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene1704 chr21 ENCODE CDS 34029219 34029379 . + 1 Parent=gene1704 chr21 ENCODE exon 34044318 34044497 . + . Parent=gene1704 chr21 ENCODE CDS 34044318 34044497 . + 2 Parent=gene1704 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene1704 chr21 ENCODE CDS 34045985 34046081 . + 2 Parent=gene1704 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene1704 chr21 ENCODE CDS 34049472 34049572 . + 1 Parent=gene1704 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene1704 chr21 ENCODE CDS 34056097 34056160 . + 2 Parent=gene1704 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene1704 chr21 ENCODE CDS 34060049 34060186 . + 1 Parent=gene1704 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene1704 chr21 ENCODE CDS 34061887 34062002 . + 1 Parent=gene1704 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene1704 chr21 ENCODE CDS 34066235 34066497 . + 2 Parent=gene1704 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene1704 chr21 ENCODE CDS 34068903 34069052 . + 0 Parent=gene1704 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene1704 chr21 ENCODE CDS 34069142 34069282 . + 0 Parent=gene1704 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene1704 chr21 ENCODE CDS 34075635 34075722 . + 0 Parent=gene1704 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene1704 chr21 ENCODE CDS 34076168 34076307 . + 2 Parent=gene1704 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene1704 chr21 ENCODE CDS 34088515 34088642 . + 0 Parent=gene1704 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene1704 chr21 ENCODE CDS 34091553 34091782 . + 1 Parent=gene1704 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene1704 chr21 ENCODE CDS 34093982 34094103 . + 2 Parent=gene1704 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene1704 chr21 ENCODE CDS 34105149 34105396 . + 0 Parent=gene1704 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene1704 chr21 ENCODE CDS 34108087 34108246 . + 1 Parent=gene1704 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene1704 chr21 ENCODE CDS 34112441 34112646 . + 0 Parent=gene1704 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene1704 chr21 ENCODE CDS 34113415 34113497 . + 1 Parent=gene1704 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1704 chr21 ENCODE CDS 34123798 34123919 . + 2 Parent=gene1704 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1704 chr21 ENCODE CDS 34128481 34128598 . + 0 Parent=gene1704 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1704 chr21 ENCODE CDS 34130615 34130806 . + 2 Parent=gene1704 chr21 ENCODE CDS 34131161 34131162 . + 2 Parent=gene1704 chr21 ENCODE exon 34131161 34132670 . + . Parent=gene1704 ### chr21 ENCODE gene 33936718 34029268 . + . ID=gene1705;Name=AP000313.6-032;name2=ITSN1 chr21 ENCODE exon 33936718 33936889 . + . Parent=gene1705 chr21 ENCODE exon 33983497 33983558 . + . Parent=gene1705 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene1705 chr21 ENCODE CDS 34013004 34013031 . + 0 Parent=gene1705 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene1705 chr21 ENCODE CDS 34015353 34015445 . + 2 Parent=gene1705 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene1705 chr21 ENCODE CDS 34016763 34016826 . + 2 Parent=gene1705 chr21 ENCODE exon 34029219 34029268 . + . Parent=gene1705 chr21 ENCODE CDS 34029219 34029268 . + 1 Parent=gene1705 ### chr21 ENCODE gene 34015412 34036947 . + . ID=gene1706;Name=AP000313.6-018;name2=ITSN1 chr21 ENCODE exon 34015412 34015445 . + . Parent=gene1706 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene1706 chr21 ENCODE exon 34029219 34030908 . + . Parent=gene1706 chr21 ENCODE exon 34034992 34035796 . + . Parent=gene1706 chr21 ENCODE exon 34036517 34036947 . + . Parent=gene1706 ### chr21 ENCODE gene 34029216 34029801 . + . ID=gene1707;name2=ITSN1;Name=AP000313.6-017 chr21 ENCODE exon 34029216 34029379 . + . Parent=gene1707 chr21 ENCODE CDS 34029216 34029379 . + 0 Parent=gene1707 chr21 ENCODE CDS 34029481 34029497 . + 1 Parent=gene1707 chr21 ENCODE exon 34029481 34029801 . + . Parent=gene1707 ### chr21 ENCODE gene 34044454 34132672 . + . ID=gene1708;Name=AP000313.6-014;name2=ITSN1 chr21 ENCODE exon 34044454 34044497 . + . Parent=gene1708 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene1708 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene1708 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene1708 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene1708 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene1708 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene1708 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene1708 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene1708 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene1708 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene1708 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene1708 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene1708 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene1708 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene1708 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene1708 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene1708 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene1708 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1708 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1708 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1708 chr21 ENCODE exon 34131161 34131197 . + . Parent=gene1708 chr21 ENCODE exon 34131420 34132672 . + . Parent=gene1708 ### chr21 ENCODE gene 34048358 34066474 . + . ID=gene1709;Name=AP000313.6-019;name2=ITSN1 chr21 ENCODE exon 34048358 34048397 . + . Parent=gene1709 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene1709 chr21 ENCODE exon 34050962 34051248 . + . Parent=gene1709 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene1709 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene1709 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene1709 chr21 ENCODE exon 34066235 34066474 . + . Parent=gene1709 ### chr21 ENCODE gene 34068537 34069253 . + . ID=gene1710;Name=AP000313.6-021;name2=ITSN1 chr21 ENCODE exon 34068537 34069052 . + . Parent=gene1710 chr21 ENCODE exon 34069142 34069253 . + . Parent=gene1710 ### chr21 ENCODE gene 34091728 34111568 . + . ID=gene1711;Name=AP000313.6-029;name2=ITSN1 chr21 ENCODE exon 34091728 34091782 . + . Parent=gene1711 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene1711 chr21 ENCODE exon 34096611 34096618 . + . Parent=gene1711 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene1711 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene1711 chr21 ENCODE exon 34111405 34111568 . + . Parent=gene1711 ### chr21 ENCODE gene 34094097 34111910 . + . ID=gene1712;Name=AP000313.6-030;name2=ITSN1 chr21 ENCODE exon 34094097 34094103 . + . Parent=gene1712 chr21 ENCODE CDS 34094097 34094103 . + 0 Parent=gene1712 chr21 ENCODE exon 34096604 34096618 . + . Parent=gene1712 chr21 ENCODE CDS 34096604 34096618 . + 2 Parent=gene1712 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene1712 chr21 ENCODE CDS 34105149 34105396 . + 2 Parent=gene1712 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene1712 chr21 ENCODE CDS 34108087 34108246 . + 0 Parent=gene1712 chr21 ENCODE CDS 34111405 34111755 . + 2 Parent=gene1712 chr21 ENCODE exon 34111405 34111910 . + . Parent=gene1712 ### chr21 ENCODE gene 34105378 34108681 . + . ID=gene1713;Name=AP000313.6-035;name2=ITSN1 chr21 ENCODE exon 34105378 34105396 . + . Parent=gene1713 chr21 ENCODE exon 34108087 34108681 . + . Parent=gene1713 ### chr21 ENCODE gene 34112200 34123203 . + . ID=gene1714;Name=AP000313.6-007;name2=ITSN1 chr21 ENCODE exon 34112200 34112646 . + . Parent=gene1714 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene1714 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene1714 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene1714 chr21 ENCODE exon 34123142 34123203 . + . Parent=gene1714 ### chr21 ENCODE gene 34112557 34123203 . + . ID=gene1715;name2=ITSN1;Name=AP000313.6-006 chr21 ENCODE exon 34112557 34112646 . + . Parent=gene1715 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene1715 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene1715 chr21 ENCODE exon 34123142 34123203 . + . Parent=gene1715 ### chr21 ENCODE gene 34112626 34123860 . + . ID=gene1716;Name=AP000313.6-016;name2=ITSN1 chr21 ENCODE exon 34112626 34112646 . + . Parent=gene1716 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene1716 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene1716 chr21 ENCODE exon 34123798 34123860 . + . Parent=gene1716 ### chr21 ENCODE gene 34120990 34128570 . + . ID=gene1717;Name=AP000313.6-022;name2=ITSN1 chr21 ENCODE exon 34120990 34121037 . + . Parent=gene1717 chr21 ENCODE exon 34123142 34123224 . + . Parent=gene1717 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1717 chr21 ENCODE exon 34128481 34128570 . + . Parent=gene1717 ### chr21 ENCODE gene 34123180 34131212 . + . ID=gene1718;name2=ITSN1;Name=AP000313.6-010 chr21 ENCODE exon 34123180 34123342 . + . Parent=gene1718 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1718 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1718 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1718 chr21 ENCODE exon 34131161 34131212 . + . Parent=gene1718 ### chr21 ENCODE gene 34123180 34131212 . + . ID=gene1719;Name=AP000313.6-008;name2=ITSN1 chr21 ENCODE exon 34123180 34123224 . + . Parent=gene1719 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1719 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1719 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1719 chr21 ENCODE exon 34131161 34131212 . + . Parent=gene1719 ### chr21 ENCODE gene 34123180 34131212 . + . ID=gene1720;Name=AP000313.6-013;name2=ITSN1 chr21 ENCODE exon 34123180 34123919 . + . Parent=gene1720 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1720 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1720 chr21 ENCODE exon 34131161 34131212 . + . Parent=gene1720 ### chr21 ENCODE gene 34123180 34150967 . + . ID=gene1721;Name=AP000313.6-012;name2=ITSN1 chr21 ENCODE exon 34123180 34123919 . + . Parent=gene1721 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1721 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1721 chr21 ENCODE exon 34150910 34150967 . + . Parent=gene1721 ### chr21 ENCODE gene 34123180 34150967 . + . ID=gene1722;Name=AP000313.6-011;name2=ITSN1 chr21 ENCODE exon 34123180 34123919 . + . Parent=gene1722 chr21 ENCODE exon 34150910 34150967 . + . Parent=gene1722 ### chr21 ENCODE gene 34123180 34150967 . + . ID=gene1723;Name=AP000313.6-009;name2=ITSN1 chr21 ENCODE exon 34123180 34123224 . + . Parent=gene1723 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene1723 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene1723 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene1723 chr21 ENCODE exon 34150910 34150967 . + . Parent=gene1723 ### chr21 ENCODE gene 34152871 34180528 . + . ID=gene1724;name2=ITSN1;Name=AP000313.6-004 chr21 ENCODE exon 34152871 34152966 . + . Parent=gene1724 chr21 ENCODE CDS 34152871 34152966 . + 0 Parent=gene1724 chr21 ENCODE exon 34159325 34159508 . + . Parent=gene1724 chr21 ENCODE CDS 34159325 34159508 . + 0 Parent=gene1724 chr21 ENCODE exon 34161407 34161505 . + . Parent=gene1724 chr21 ENCODE CDS 34161407 34161505 . + 2 Parent=gene1724 chr21 ENCODE exon 34176417 34176629 . + . Parent=gene1724 chr21 ENCODE CDS 34176417 34176629 . + 2 Parent=gene1724 chr21 ENCODE exon 34177724 34177845 . + . Parent=gene1724 chr21 ENCODE CDS 34177724 34177845 . + 2 Parent=gene1724 chr21 ENCODE exon 34179215 34179297 . + . Parent=gene1724 chr21 ENCODE CDS 34179215 34179297 . + 0 Parent=gene1724 chr21 ENCODE exon 34179613 34179696 . + . Parent=gene1724 chr21 ENCODE CDS 34179613 34179696 . + 1 Parent=gene1724 chr21 ENCODE exon 34180461 34180528 . + . Parent=gene1724 chr21 ENCODE CDS 34180461 34180528 . + 1 Parent=gene1724 ### chr21 ENCODE gene 34169532 34180551 . + . ID=gene1725;Name=AP000313.6-031;name2=ITSN1 chr21 ENCODE exon 34169532 34169695 . + . Parent=gene1725 chr21 ENCODE exon 34179215 34179297 . + . Parent=gene1725 chr21 ENCODE exon 34179613 34179696 . + . Parent=gene1725 chr21 ENCODE exon 34180461 34180551 . + . Parent=gene1725 ### chr21 ENCODE gene 34169534 34180528 . + . ID=gene1726;Name=AP000313.6-005;name2=ITSN1 chr21 ENCODE exon 34169534 34169695 . + . Parent=gene1726 chr21 ENCODE CDS 34169534 34169695 . + 0 Parent=gene1726 chr21 ENCODE exon 34177724 34177845 . + . Parent=gene1726 chr21 ENCODE CDS 34177724 34177845 . + 0 Parent=gene1726 chr21 ENCODE exon 34179215 34179297 . + . Parent=gene1726 chr21 ENCODE CDS 34179215 34179297 . + 1 Parent=gene1726 chr21 ENCODE exon 34179613 34179696 . + . Parent=gene1726 chr21 ENCODE CDS 34179613 34179696 . + 2 Parent=gene1726 chr21 ENCODE exon 34180461 34180528 . + . Parent=gene1726 chr21 ENCODE CDS 34180461 34180528 . + 2 Parent=gene1726 ### chr21 ENCODE gene 34197627 34199755 . - . ID=gene1727;Name=AP000313.5-006;name2=ATP5O chr21 ENCODE exon 34197627 34197813 . - . Parent=gene1727 chr21 ENCODE exon 34198109 34198748 . - . Parent=gene1727 chr21 ENCODE exon 34198856 34199755 . - . Parent=gene1727 ### chr21 ENCODE gene 34197627 34209935 . - . ID=gene1728;Name=AP000313.5-003;name2=ATP5O chr21 ENCODE exon 34197627 34197813 . - . Parent=gene1728 chr21 ENCODE exon 34198109 34198195 . - . Parent=gene1728 chr21 ENCODE exon 34201515 34201627 . - . Parent=gene1728 chr21 ENCODE exon 34206463 34206573 . - . Parent=gene1728 chr21 ENCODE exon 34208624 34208674 . - . Parent=gene1728 chr21 ENCODE exon 34209902 34209935 . - . Parent=gene1728 ### chr21 ENCODE gene 34197627 34209942 . - . ID=gene1729;Name=AP000313.5-002;name2=ATP5O chr21 ENCODE exon 34197627 34197813 . - . Parent=gene1729 chr21 ENCODE exon 34198109 34198195 . - . Parent=gene1729 chr21 ENCODE exon 34200623 34201627 . - . Parent=gene1729 chr21 ENCODE exon 34203256 34203385 . - . Parent=gene1729 chr21 ENCODE exon 34206463 34206573 . - . Parent=gene1729 chr21 ENCODE exon 34208624 34209942 . - . Parent=gene1729 ### chr21 ENCODE gene 34197627 34210154 . - . ID=gene1730;Name=AP000313.5-001;name2=ATP5O chr21 ENCODE exon 34197627 34197813 . - . Parent=gene1730 chr21 ENCODE CDS 34197700 34197813 . - 0 Parent=gene1730 chr21 ENCODE exon 34198109 34198195 . - . Parent=gene1730 chr21 ENCODE CDS 34198109 34198195 . - 0 Parent=gene1730 chr21 ENCODE exon 34201515 34201627 . - . Parent=gene1730 chr21 ENCODE CDS 34201515 34201627 . - 2 Parent=gene1730 chr21 ENCODE exon 34203256 34203385 . - . Parent=gene1730 chr21 ENCODE CDS 34203256 34203385 . - 0 Parent=gene1730 chr21 ENCODE exon 34206463 34206573 . - . Parent=gene1730 chr21 ENCODE CDS 34206463 34206573 . - 0 Parent=gene1730 chr21 ENCODE exon 34208624 34208674 . - . Parent=gene1730 chr21 ENCODE CDS 34208624 34208674 . - 0 Parent=gene1730 chr21 ENCODE CDS 34209902 34209937 . - 0 Parent=gene1730 chr21 ENCODE exon 34209902 34210154 . - . Parent=gene1730 ### chr21 ENCODE gene 34197630 34201586 . - . ID=gene1731;name2=ATP5O;Name=AP000313.5-009 chr21 ENCODE exon 34197630 34197813 . - . Parent=gene1731 chr21 ENCODE exon 34198109 34198195 . - . Parent=gene1731 chr21 ENCODE exon 34200623 34200674 . - . Parent=gene1731 chr21 ENCODE exon 34200902 34200968 . - . Parent=gene1731 chr21 ENCODE exon 34201515 34201586 . - . Parent=gene1731 ### chr21 ENCODE gene 34197630 34203269 . - . ID=gene1732;name2=ATP5O;Name=AP000313.5-010 chr21 ENCODE exon 34197630 34197830 . - . Parent=gene1732 chr21 ENCODE CDS 34197786 34197830 . - 2 Parent=gene1732 chr21 ENCODE exon 34198109 34198195 . - . Parent=gene1732 chr21 ENCODE CDS 34198109 34198195 . - 2 Parent=gene1732 chr21 ENCODE exon 34201515 34201627 . - . Parent=gene1732 chr21 ENCODE CDS 34201515 34201627 . - 1 Parent=gene1732 chr21 ENCODE exon 34203256 34203269 . - . Parent=gene1732 chr21 ENCODE CDS 34203256 34203269 . - 0 Parent=gene1732 ### chr21 ENCODE gene 34202988 34209927 . - . ID=gene1733;Name=AP000313.5-004;name2=ATP5O chr21 ENCODE exon 34202988 34203385 . - . Parent=gene1733 chr21 ENCODE exon 34206463 34206573 . - . Parent=gene1733 chr21 ENCODE exon 34208624 34208674 . - . Parent=gene1733 chr21 ENCODE exon 34209902 34209927 . - . Parent=gene1733 ### chr21 ENCODE gene 34206541 34209898 . - . ID=gene1734;Name=AP000313.5-007;name2=ATP5O chr21 ENCODE exon 34206541 34206573 . - . Parent=gene1734 chr21 ENCODE exon 34208624 34208674 . - . Parent=gene1734 chr21 ENCODE exon 34209310 34209898 . - . Parent=gene1734 ### chr21 ENCODE gene 34206552 34209953 . - . ID=gene1735;Name=AP000313.5-008;name2=ATP5O chr21 ENCODE exon 34206552 34206573 . - . Parent=gene1735 chr21 ENCODE exon 34208624 34208674 . - . Parent=gene1735 chr21 ENCODE exon 34209558 34209953 . - . Parent=gene1735 ### chr21 ENCODE gene 39468565 39477647 . - . ID=gene1736;Name=AF129408.12-001;name2=DSCR2 chr21 ENCODE exon 39468565 39469460 . - . Parent=gene1736 chr21 ENCODE CDS 39469386 39469460 . - 0 Parent=gene1736 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene1736 chr21 ENCODE CDS 39471231 39471367 . - 2 Parent=gene1736 chr21 ENCODE exon 39472245 39472443 . - . Parent=gene1736 chr21 ENCODE CDS 39472245 39472443 . - 0 Parent=gene1736 chr21 ENCODE exon 39473720 39473782 . - . Parent=gene1736 chr21 ENCODE CDS 39473720 39473782 . - 0 Parent=gene1736 chr21 ENCODE exon 39474081 39474232 . - . Parent=gene1736 chr21 ENCODE CDS 39474081 39474232 . - 2 Parent=gene1736 chr21 ENCODE exon 39475568 39475674 . - . Parent=gene1736 chr21 ENCODE CDS 39475568 39475674 . - 1 Parent=gene1736 chr21 ENCODE CDS 39477048 39477181 . - 0 Parent=gene1736 chr21 ENCODE exon 39477048 39477647 . - . Parent=gene1736 ### chr21 ENCODE gene 39469254 39472616 . - . ID=gene1737;Name=AF129408.12-004;name2=DSCR2 chr21 ENCODE exon 39469254 39469460 . - . Parent=gene1737 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene1737 chr21 ENCODE exon 39472245 39472616 . - . Parent=gene1737 ### chr21 ENCODE gene 39469254 39474234 . - . ID=gene1738;Name=AF129408.12-003;name2=DSCR2 chr21 ENCODE exon 39469254 39469460 . - . Parent=gene1738 chr21 ENCODE CDS 39469386 39469460 . - 2 Parent=gene1738 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene1738 chr21 ENCODE CDS 39471231 39471367 . - 1 Parent=gene1738 chr21 ENCODE exon 39472245 39472314 . - . Parent=gene1738 chr21 ENCODE CDS 39472245 39472314 . - 2 Parent=gene1738 chr21 ENCODE exon 39474081 39474234 . - . Parent=gene1738 chr21 ENCODE CDS 39474081 39474234 . - 0 Parent=gene1738 ### chr21 ENCODE gene 39469384 39477083 . - . ID=gene1739;Name=AF129408.12-005;name2=DSCR2 chr21 ENCODE exon 39469384 39469460 . - . Parent=gene1739 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene1739 chr21 ENCODE exon 39472245 39472443 . - . Parent=gene1739 chr21 ENCODE exon 39473720 39473782 . - . Parent=gene1739 chr21 ENCODE exon 39474081 39474232 . - . Parent=gene1739 chr21 ENCODE exon 39475568 39475674 . - . Parent=gene1739 chr21 ENCODE exon 39476860 39477083 . - . Parent=gene1739 ### chr21 ENCODE gene 39469386 39477181 . - . ID=gene1740;name2=DSCR2;Name=AF129408.12-006 chr21 ENCODE exon 39469386 39469460 . - . Parent=gene1740 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene1740 chr21 ENCODE exon 39472245 39472443 . - . Parent=gene1740 chr21 ENCODE exon 39473720 39473782 . - . Parent=gene1740 chr21 ENCODE exon 39474081 39474232 . - . Parent=gene1740 chr21 ENCODE exon 39477048 39477181 . - . Parent=gene1740 ### chr21 ENCODE gene 39469386 39477284 . - . ID=gene1741;Name=AF129408.12-002;name2=DSCR2 chr21 ENCODE exon 39469386 39469460 . - . Parent=gene1741 chr21 ENCODE CDS 39469386 39469460 . - 0 Parent=gene1741 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene1741 chr21 ENCODE CDS 39471231 39471367 . - 2 Parent=gene1741 chr21 ENCODE exon 39472245 39472443 . - . Parent=gene1741 chr21 ENCODE CDS 39472245 39472443 . - 0 Parent=gene1741 chr21 ENCODE exon 39474081 39474232 . - . Parent=gene1741 chr21 ENCODE CDS 39474081 39474232 . - 2 Parent=gene1741 chr21 ENCODE exon 39475568 39475674 . - . Parent=gene1741 chr21 ENCODE CDS 39475568 39475674 . - 1 Parent=gene1741 chr21 ENCODE CDS 39477048 39477181 . - 0 Parent=gene1741 chr21 ENCODE exon 39477048 39477284 . - . Parent=gene1741 ### chr21 ENCODE gene 39477972 39607366 . - . ID=gene1742;Name=AF129408.13-001;name2=BRWD1 chr21 ENCODE exon 39477972 39481213 . - . Parent=gene1742 chr21 ENCODE CDS 39480822 39481213 . - 2 Parent=gene1742 chr21 ENCODE exon 39490294 39491211 . - . Parent=gene1742 chr21 ENCODE CDS 39490294 39491211 . - 2 Parent=gene1742 chr21 ENCODE exon 39492559 39493458 . - . Parent=gene1742 chr21 ENCODE CDS 39492559 39493458 . - 2 Parent=gene1742 chr21 ENCODE exon 39494015 39494182 . - . Parent=gene1742 chr21 ENCODE CDS 39494015 39494182 . - 2 Parent=gene1742 chr21 ENCODE exon 39496121 39496341 . - . Parent=gene1742 chr21 ENCODE CDS 39496121 39496341 . - 1 Parent=gene1742 chr21 ENCODE exon 39499904 39500070 . - . Parent=gene1742 chr21 ENCODE CDS 39499904 39500070 . - 0 Parent=gene1742 chr21 ENCODE exon 39503791 39503943 . - . Parent=gene1742 chr21 ENCODE CDS 39503791 39503943 . - 0 Parent=gene1742 chr21 ENCODE exon 39504582 39504725 . - . Parent=gene1742 chr21 ENCODE CDS 39504582 39504725 . - 0 Parent=gene1742 chr21 ENCODE exon 39506462 39506503 . - . Parent=gene1742 chr21 ENCODE CDS 39506462 39506503 . - 0 Parent=gene1742 chr21 ENCODE exon 39507277 39507349 . - . Parent=gene1742 chr21 ENCODE CDS 39507277 39507349 . - 1 Parent=gene1742 chr21 ENCODE exon 39509033 39509158 . - . Parent=gene1742 chr21 ENCODE CDS 39509033 39509158 . - 1 Parent=gene1742 chr21 ENCODE exon 39511948 39512068 . - . Parent=gene1742 chr21 ENCODE CDS 39511948 39512068 . - 2 Parent=gene1742 chr21 ENCODE exon 39512301 39512456 . - . Parent=gene1742 chr21 ENCODE CDS 39512301 39512456 . - 2 Parent=gene1742 chr21 ENCODE exon 39518204 39518265 . - . Parent=gene1742 chr21 ENCODE CDS 39518204 39518265 . - 1 Parent=gene1742 chr21 ENCODE exon 39518882 39518993 . - . Parent=gene1742 chr21 ENCODE CDS 39518882 39518993 . - 2 Parent=gene1742 chr21 ENCODE exon 39522296 39522378 . - . Parent=gene1742 chr21 ENCODE CDS 39522296 39522378 . - 1 Parent=gene1742 chr21 ENCODE exon 39523108 39523232 . - . Parent=gene1742 chr21 ENCODE CDS 39523108 39523232 . - 0 Parent=gene1742 chr21 ENCODE exon 39525973 39526080 . - . Parent=gene1742 chr21 ENCODE CDS 39525973 39526080 . - 0 Parent=gene1742 chr21 ENCODE exon 39526169 39526294 . - . Parent=gene1742 chr21 ENCODE CDS 39526169 39526294 . - 0 Parent=gene1742 chr21 ENCODE exon 39530391 39530580 . - . Parent=gene1742 chr21 ENCODE CDS 39530391 39530580 . - 1 Parent=gene1742 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene1742 chr21 ENCODE CDS 39532275 39532369 . - 0 Parent=gene1742 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene1742 chr21 ENCODE CDS 39541497 39541628 . - 0 Parent=gene1742 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene1742 chr21 ENCODE CDS 39544592 39544685 . - 1 Parent=gene1742 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene1742 chr21 ENCODE CDS 39549441 39549624 . - 2 Parent=gene1742 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene1742 chr21 ENCODE CDS 39552283 39552468 . - 2 Parent=gene1742 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene1742 chr21 ENCODE CDS 39558256 39558481 . - 0 Parent=gene1742 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene1742 chr21 ENCODE CDS 39558687 39558815 . - 0 Parent=gene1742 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene1742 chr21 ENCODE CDS 39563695 39563829 . - 0 Parent=gene1742 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene1742 chr21 ENCODE CDS 39564079 39564229 . - 1 Parent=gene1742 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene1742 chr21 ENCODE CDS 39568170 39568268 . - 1 Parent=gene1742 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene1742 chr21 ENCODE CDS 39569969 39570009 . - 0 Parent=gene1742 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene1742 chr21 ENCODE CDS 39571047 39571147 . - 2 Parent=gene1742 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene1742 chr21 ENCODE CDS 39572539 39572609 . - 1 Parent=gene1742 chr21 ENCODE exon 39573944 39574044 . - . Parent=gene1742 chr21 ENCODE CDS 39573944 39574044 . - 0 Parent=gene1742 chr21 ENCODE exon 39587607 39587828 . - . Parent=gene1742 chr21 ENCODE CDS 39587607 39587828 . - 0 Parent=gene1742 chr21 ENCODE exon 39589539 39589699 . - . Parent=gene1742 chr21 ENCODE CDS 39589539 39589699 . - 2 Parent=gene1742 chr21 ENCODE exon 39590061 39590159 . - . Parent=gene1742 chr21 ENCODE CDS 39590061 39590159 . - 2 Parent=gene1742 chr21 ENCODE exon 39592228 39592378 . - . Parent=gene1742 chr21 ENCODE CDS 39592228 39592378 . - 0 Parent=gene1742 chr21 ENCODE exon 39606637 39606696 . - . Parent=gene1742 chr21 ENCODE CDS 39606637 39606696 . - 0 Parent=gene1742 chr21 ENCODE exon 39606868 39606897 . - . Parent=gene1742 chr21 ENCODE CDS 39606868 39606897 . - 0 Parent=gene1742 chr21 ENCODE exon 39607037 39607095 . - . Parent=gene1742 chr21 ENCODE CDS 39607037 39607095 . - 2 Parent=gene1742 chr21 ENCODE CDS 39607239 39607287 . - 0 Parent=gene1742 chr21 ENCODE exon 39607239 39607366 . - . Parent=gene1742 ### chr21 ENCODE gene 39481042 39558737 . - . ID=gene1743;Name=AF129408.13-009;name2=BRWD1 chr21 ENCODE exon 39481042 39481213 . - . Parent=gene1743 chr21 ENCODE exon 39490294 39491211 . - . Parent=gene1743 chr21 ENCODE exon 39492559 39493458 . - . Parent=gene1743 chr21 ENCODE exon 39494015 39494182 . - . Parent=gene1743 chr21 ENCODE exon 39496121 39496341 . - . Parent=gene1743 chr21 ENCODE exon 39499904 39500070 . - . Parent=gene1743 chr21 ENCODE exon 39503791 39503943 . - . Parent=gene1743 chr21 ENCODE exon 39504582 39504725 . - . Parent=gene1743 chr21 ENCODE exon 39506462 39506503 . - . Parent=gene1743 chr21 ENCODE exon 39507277 39507349 . - . Parent=gene1743 chr21 ENCODE exon 39509033 39509158 . - . Parent=gene1743 chr21 ENCODE exon 39512325 39512456 . - . Parent=gene1743 chr21 ENCODE exon 39518204 39518265 . - . Parent=gene1743 chr21 ENCODE exon 39518882 39518993 . - . Parent=gene1743 chr21 ENCODE exon 39522296 39522378 . - . Parent=gene1743 chr21 ENCODE exon 39523108 39523232 . - . Parent=gene1743 chr21 ENCODE exon 39525973 39526080 . - . Parent=gene1743 chr21 ENCODE exon 39526169 39526294 . - . Parent=gene1743 chr21 ENCODE exon 39530391 39530580 . - . Parent=gene1743 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene1743 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene1743 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene1743 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene1743 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene1743 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene1743 chr21 ENCODE exon 39558687 39558737 . - . Parent=gene1743 ### chr21 ENCODE gene 39484015 39607366 . - . ID=gene1744;Name=AF129408.13-002;name2=BRWD1 chr21 ENCODE exon 39484015 39491211 . - . Parent=gene1744 chr21 ENCODE CDS 39490055 39491211 . - 2 Parent=gene1744 chr21 ENCODE exon 39492559 39493458 . - . Parent=gene1744 chr21 ENCODE CDS 39492559 39493458 . - 2 Parent=gene1744 chr21 ENCODE exon 39494015 39494182 . - . Parent=gene1744 chr21 ENCODE CDS 39494015 39494182 . - 2 Parent=gene1744 chr21 ENCODE exon 39496121 39496341 . - . Parent=gene1744 chr21 ENCODE CDS 39496121 39496341 . - 1 Parent=gene1744 chr21 ENCODE exon 39499904 39500070 . - . Parent=gene1744 chr21 ENCODE CDS 39499904 39500070 . - 0 Parent=gene1744 chr21 ENCODE exon 39503791 39503943 . - . Parent=gene1744 chr21 ENCODE CDS 39503791 39503943 . - 0 Parent=gene1744 chr21 ENCODE exon 39504582 39504725 . - . Parent=gene1744 chr21 ENCODE CDS 39504582 39504725 . - 0 Parent=gene1744 chr21 ENCODE exon 39506462 39506503 . - . Parent=gene1744 chr21 ENCODE CDS 39506462 39506503 . - 0 Parent=gene1744 chr21 ENCODE exon 39507277 39507349 . - . Parent=gene1744 chr21 ENCODE CDS 39507277 39507349 . - 1 Parent=gene1744 chr21 ENCODE exon 39509033 39509158 . - . Parent=gene1744 chr21 ENCODE CDS 39509033 39509158 . - 1 Parent=gene1744 chr21 ENCODE exon 39511948 39512068 . - . Parent=gene1744 chr21 ENCODE CDS 39511948 39512068 . - 2 Parent=gene1744 chr21 ENCODE exon 39512301 39512456 . - . Parent=gene1744 chr21 ENCODE CDS 39512301 39512456 . - 2 Parent=gene1744 chr21 ENCODE exon 39518204 39518265 . - . Parent=gene1744 chr21 ENCODE CDS 39518204 39518265 . - 1 Parent=gene1744 chr21 ENCODE exon 39518882 39518993 . - . Parent=gene1744 chr21 ENCODE CDS 39518882 39518993 . - 2 Parent=gene1744 chr21 ENCODE exon 39522296 39522378 . - . Parent=gene1744 chr21 ENCODE CDS 39522296 39522378 . - 1 Parent=gene1744 chr21 ENCODE exon 39523108 39523232 . - . Parent=gene1744 chr21 ENCODE CDS 39523108 39523232 . - 0 Parent=gene1744 chr21 ENCODE exon 39525973 39526080 . - . Parent=gene1744 chr21 ENCODE CDS 39525973 39526080 . - 0 Parent=gene1744 chr21 ENCODE exon 39526169 39526294 . - . Parent=gene1744 chr21 ENCODE CDS 39526169 39526294 . - 0 Parent=gene1744 chr21 ENCODE exon 39530391 39530580 . - . Parent=gene1744 chr21 ENCODE CDS 39530391 39530580 . - 1 Parent=gene1744 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene1744 chr21 ENCODE CDS 39532275 39532369 . - 0 Parent=gene1744 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene1744 chr21 ENCODE CDS 39541497 39541628 . - 0 Parent=gene1744 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene1744 chr21 ENCODE CDS 39544592 39544685 . - 1 Parent=gene1744 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene1744 chr21 ENCODE CDS 39549441 39549624 . - 2 Parent=gene1744 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene1744 chr21 ENCODE CDS 39552283 39552468 . - 2 Parent=gene1744 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene1744 chr21 ENCODE CDS 39558256 39558481 . - 0 Parent=gene1744 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene1744 chr21 ENCODE CDS 39558687 39558815 . - 0 Parent=gene1744 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene1744 chr21 ENCODE CDS 39563695 39563829 . - 0 Parent=gene1744 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene1744 chr21 ENCODE CDS 39564079 39564229 . - 1 Parent=gene1744 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene1744 chr21 ENCODE CDS 39568170 39568268 . - 1 Parent=gene1744 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene1744 chr21 ENCODE CDS 39569969 39570009 . - 0 Parent=gene1744 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene1744 chr21 ENCODE CDS 39571047 39571147 . - 2 Parent=gene1744 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene1744 chr21 ENCODE CDS 39572539 39572609 . - 1 Parent=gene1744 chr21 ENCODE exon 39573944 39574044 . - . Parent=gene1744 chr21 ENCODE CDS 39573944 39574044 . - 0 Parent=gene1744 chr21 ENCODE exon 39587607 39587828 . - . Parent=gene1744 chr21 ENCODE CDS 39587607 39587828 . - 0 Parent=gene1744 chr21 ENCODE exon 39589539 39589699 . - . Parent=gene1744 chr21 ENCODE CDS 39589539 39589699 . - 2 Parent=gene1744 chr21 ENCODE exon 39590061 39590159 . - . Parent=gene1744 chr21 ENCODE CDS 39590061 39590159 . - 2 Parent=gene1744 chr21 ENCODE exon 39592228 39592378 . - . Parent=gene1744 chr21 ENCODE CDS 39592228 39592378 . - 0 Parent=gene1744 chr21 ENCODE exon 39606637 39606696 . - . Parent=gene1744 chr21 ENCODE CDS 39606637 39606696 . - 0 Parent=gene1744 chr21 ENCODE exon 39606868 39606897 . - . Parent=gene1744 chr21 ENCODE CDS 39606868 39606897 . - 0 Parent=gene1744 chr21 ENCODE exon 39607037 39607095 . - . Parent=gene1744 chr21 ENCODE CDS 39607037 39607095 . - 2 Parent=gene1744 chr21 ENCODE CDS 39607239 39607287 . - 0 Parent=gene1744 chr21 ENCODE exon 39607239 39607366 . - . Parent=gene1744 ### chr21 ENCODE gene 39493215 39494292 . - . ID=gene1745;Name=AF129408.13-007;name2=BRWD1 chr21 ENCODE exon 39493215 39493458 . - . Parent=gene1745 chr21 ENCODE exon 39494015 39494292 . - . Parent=gene1745 ### chr21 ENCODE gene 39496162 39523188 . - . ID=gene1746;Name=AF129408.13-010;name2=BRWD1 chr21 ENCODE exon 39496162 39496341 . - . Parent=gene1746 chr21 ENCODE CDS 39496162 39496341 . - 0 Parent=gene1746 chr21 ENCODE exon 39499904 39500070 . - . Parent=gene1746 chr21 ENCODE CDS 39499904 39500070 . - 2 Parent=gene1746 chr21 ENCODE exon 39503791 39503943 . - . Parent=gene1746 chr21 ENCODE CDS 39503791 39503943 . - 2 Parent=gene1746 chr21 ENCODE exon 39506462 39506503 . - . Parent=gene1746 chr21 ENCODE CDS 39506462 39506503 . - 2 Parent=gene1746 chr21 ENCODE exon 39507277 39507349 . - . Parent=gene1746 chr21 ENCODE CDS 39507277 39507349 . - 0 Parent=gene1746 chr21 ENCODE exon 39509033 39509158 . - . Parent=gene1746 chr21 ENCODE CDS 39509033 39509158 . - 0 Parent=gene1746 chr21 ENCODE exon 39511948 39512068 . - . Parent=gene1746 chr21 ENCODE CDS 39511948 39512068 . - 1 Parent=gene1746 chr21 ENCODE exon 39512301 39512456 . - . Parent=gene1746 chr21 ENCODE CDS 39512301 39512456 . - 1 Parent=gene1746 chr21 ENCODE exon 39518204 39518265 . - . Parent=gene1746 chr21 ENCODE CDS 39518204 39518265 . - 0 Parent=gene1746 chr21 ENCODE exon 39518882 39518993 . - . Parent=gene1746 chr21 ENCODE CDS 39518882 39518993 . - 1 Parent=gene1746 chr21 ENCODE exon 39522296 39522378 . - . Parent=gene1746 chr21 ENCODE CDS 39522296 39522378 . - 0 Parent=gene1746 chr21 ENCODE exon 39523108 39523188 . - . Parent=gene1746 chr21 ENCODE CDS 39523108 39523188 . - 0 Parent=gene1746 ### chr21 ENCODE gene 39503582 39512456 . - . ID=gene1747;Name=AF129408.13-006;name2=BRWD1 chr21 ENCODE exon 39503582 39503943 . - . Parent=gene1747 chr21 ENCODE exon 39504662 39504725 . - . Parent=gene1747 chr21 ENCODE exon 39506462 39506503 . - . Parent=gene1747 chr21 ENCODE exon 39507277 39507349 . - . Parent=gene1747 chr21 ENCODE exon 39509033 39509158 . - . Parent=gene1747 chr21 ENCODE exon 39511948 39512068 . - . Parent=gene1747 chr21 ENCODE exon 39512301 39512456 . - . Parent=gene1747 ### chr21 ENCODE gene 39530514 39574009 . - . ID=gene1748;name2=BRWD1;Name=AF129408.13-011 chr21 ENCODE exon 39530514 39530580 . - . Parent=gene1748 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene1748 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene1748 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene1748 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene1748 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene1748 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene1748 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene1748 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene1748 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene1748 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene1748 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene1748 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene1748 chr21 ENCODE exon 39573944 39574009 . - . Parent=gene1748 ### chr21 ENCODE gene 39530514 39574009 . - . ID=gene1749;Name=AF129408.13-012;name2=BRWD1 chr21 ENCODE exon 39530514 39530580 . - . Parent=gene1749 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene1749 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene1749 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene1749 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene1749 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene1749 chr21 ENCODE exon 39558256 39558360 . - . Parent=gene1749 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene1749 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene1749 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene1749 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene1749 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene1749 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene1749 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene1749 chr21 ENCODE exon 39573944 39574009 . - . Parent=gene1749 ### chr21 ENCODE gene 39530514 39574009 . - . ID=gene1750;Name=AF129408.13-013;name2=BRWD1 chr21 ENCODE exon 39530514 39530580 . - . Parent=gene1750 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene1750 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene1750 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene1750 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene1750 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene1750 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene1750 chr21 ENCODE exon 39558782 39558815 . - . Parent=gene1750 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene1750 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene1750 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene1750 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene1750 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene1750 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene1750 chr21 ENCODE exon 39573944 39574009 . - . Parent=gene1750 ### chr21 ENCODE gene 39530515 39574009 . - . ID=gene1751;Name=AF129408.13-014;name2=BRWD1 chr21 ENCODE exon 39530515 39530580 . - . Parent=gene1751 chr21 ENCODE CDS 39530515 39530580 . - 0 Parent=gene1751 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene1751 chr21 ENCODE CDS 39532275 39532369 . - 2 Parent=gene1751 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene1751 chr21 ENCODE CDS 39544592 39544685 . - 0 Parent=gene1751 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene1751 chr21 ENCODE CDS 39549441 39549624 . - 1 Parent=gene1751 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene1751 chr21 ENCODE CDS 39552283 39552468 . - 1 Parent=gene1751 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene1751 chr21 ENCODE CDS 39558256 39558481 . - 2 Parent=gene1751 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene1751 chr21 ENCODE CDS 39558687 39558815 . - 2 Parent=gene1751 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene1751 chr21 ENCODE CDS 39563695 39563829 . - 2 Parent=gene1751 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene1751 chr21 ENCODE CDS 39564079 39564229 . - 0 Parent=gene1751 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene1751 chr21 ENCODE CDS 39568170 39568268 . - 0 Parent=gene1751 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene1751 chr21 ENCODE CDS 39569969 39570009 . - 2 Parent=gene1751 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene1751 chr21 ENCODE CDS 39571047 39571147 . - 1 Parent=gene1751 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene1751 chr21 ENCODE CDS 39572539 39572609 . - 0 Parent=gene1751 chr21 ENCODE exon 39573944 39574009 . - . Parent=gene1751 chr21 ENCODE CDS 39573944 39574009 . - 0 Parent=gene1751 ### chr21 ENCODE gene 39530515 39574009 . - . ID=gene1752;name2=BRWD1;Name=AF129408.13-015 chr21 ENCODE exon 39530515 39530580 . - . Parent=gene1752 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene1752 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene1752 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene1752 chr21 ENCODE exon 39549461 39549624 . - . Parent=gene1752 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene1752 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene1752 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene1752 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene1752 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene1752 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene1752 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene1752 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene1752 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene1752 chr21 ENCODE exon 39573944 39574009 . - . Parent=gene1752 ### chr21 ENCODE gene 39572293 39574003 . - . ID=gene1753;Name=AF129408.13-003;name2=BRWD1 chr21 ENCODE exon 39572293 39572609 . - . Parent=gene1753 chr21 ENCODE exon 39573944 39574003 . - . Parent=gene1753 ### chr21 ENCODE gene 39590233 39607438 . - . ID=gene1754;Name=AF129408.13-004;name2=BRWD1 chr21 ENCODE exon 39590233 39592378 . - . Parent=gene1754 chr21 ENCODE CDS 39592214 39592378 . - 0 Parent=gene1754 chr21 ENCODE exon 39606637 39606696 . - . Parent=gene1754 chr21 ENCODE CDS 39606637 39606696 . - 0 Parent=gene1754 chr21 ENCODE exon 39606868 39606897 . - . Parent=gene1754 chr21 ENCODE CDS 39606868 39606897 . - 0 Parent=gene1754 chr21 ENCODE exon 39607037 39607095 . - . Parent=gene1754 chr21 ENCODE CDS 39607037 39607095 . - 2 Parent=gene1754 chr21 ENCODE CDS 39607239 39607287 . - 0 Parent=gene1754 chr21 ENCODE exon 39607239 39607438 . - . Parent=gene1754 ### chr21 ENCODE gene 39591886 39615355 . - . ID=gene1755;Name=AF129408.13-008;name2=BRWD1 chr21 ENCODE exon 39591886 39592378 . - . Parent=gene1755 chr21 ENCODE exon 39606637 39606696 . - . Parent=gene1755 chr21 ENCODE exon 39606868 39606897 . - . Parent=gene1755 chr21 ENCODE exon 39607037 39607095 . - . Parent=gene1755 chr21 ENCODE exon 39614822 39615355 . - . Parent=gene1755 ### chr21 ENCODE gene 39606359 39607097 . - . ID=gene1756;Name=AF129408.13-005;name2=BRWD1 chr21 ENCODE exon 39606359 39606696 . - . Parent=gene1756 chr21 ENCODE exon 39606868 39606897 . - . Parent=gene1756 chr21 ENCODE exon 39607037 39607097 . - . Parent=gene1756 ### chr21 ENCODE gene 39636111 39642787 . - . ID=gene1757;Name=AF064861.91-004;name2=HMGN1 chr21 ENCODE exon 39636111 39636955 . - . Parent=gene1757 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1757 chr21 ENCODE exon 39639626 39639754 . - . Parent=gene1757 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1757 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1757 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1757 chr21 ENCODE exon 39642699 39642787 . - . Parent=gene1757 ### chr21 ENCODE gene 39636111 39642895 . - . ID=gene1758;Name=AF064861.91-006;name2=HMGN1 chr21 ENCODE exon 39636111 39636955 . - . Parent=gene1758 chr21 ENCODE exon 39638942 39642135 . - . Parent=gene1758 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1758 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1758 chr21 ENCODE exon 39642699 39642895 . - . Parent=gene1758 ### chr21 ENCODE gene 39636111 39642936 . - . ID=gene1759;Name=AF064861.91-002;name2=HMGN1 chr21 ENCODE exon 39636111 39636955 . - . Parent=gene1759 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1759 chr21 ENCODE exon 39639626 39639754 . - . Parent=gene1759 chr21 ENCODE exon 39641175 39641274 . - . Parent=gene1759 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1759 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1759 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1759 chr21 ENCODE exon 39642699 39642936 . - . Parent=gene1759 ### chr21 ENCODE gene 39636111 39642996 . - . ID=gene1760;Name=AF064861.91-001;name2=HMGN1 chr21 ENCODE exon 39636111 39636955 . - . Parent=gene1760 chr21 ENCODE CDS 39636908 39636955 . - 0 Parent=gene1760 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1760 chr21 ENCODE CDS 39638942 39639070 . - 0 Parent=gene1760 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1760 chr21 ENCODE CDS 39642088 39642135 . - 0 Parent=gene1760 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1760 chr21 ENCODE CDS 39642218 39642247 . - 0 Parent=gene1760 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1760 chr21 ENCODE CDS 39642341 39642373 . - 0 Parent=gene1760 chr21 ENCODE CDS 39642699 39642713 . - 0 Parent=gene1760 chr21 ENCODE exon 39642699 39642996 . - . Parent=gene1760 ### chr21 ENCODE gene 39636111 39643140 . - . ID=gene1761;Name=AF064861.91-003;name2=HMGN1 chr21 ENCODE exon 39636111 39636955 . - . Parent=gene1761 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1761 chr21 ENCODE exon 39639626 39641088 . - . Parent=gene1761 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene1761 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1761 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1761 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1761 chr21 ENCODE exon 39643087 39643140 . - . Parent=gene1761 ### chr21 ENCODE gene 39636442 39642884 . - . ID=gene1762;Name=AF064861.91-009;name2=HMGN1 chr21 ENCODE exon 39636442 39636955 . - . Parent=gene1762 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1762 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene1762 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1762 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1762 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1762 chr21 ENCODE exon 39642699 39642884 . - . Parent=gene1762 ### chr21 ENCODE gene 39636488 39642849 . - . ID=gene1763;Name=AF064861.91-018;name2=HMGN1 chr21 ENCODE exon 39636488 39636955 . - . Parent=gene1763 chr21 ENCODE CDS 39636908 39636955 . - 0 Parent=gene1763 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1763 chr21 ENCODE CDS 39638942 39639070 . - 0 Parent=gene1763 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1763 chr21 ENCODE CDS 39642088 39642135 . - 0 Parent=gene1763 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1763 chr21 ENCODE CDS 39642341 39642373 . - 0 Parent=gene1763 chr21 ENCODE CDS 39642699 39642713 . - 0 Parent=gene1763 chr21 ENCODE exon 39642699 39642849 . - . Parent=gene1763 ### chr21 ENCODE gene 39636584 39642836 . - . ID=gene1764;Name=AF064861.91-015;name2=HMGN1 chr21 ENCODE exon 39636584 39636955 . - . Parent=gene1764 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1764 chr21 ENCODE exon 39641175 39641274 . - . Parent=gene1764 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1764 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1764 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1764 chr21 ENCODE exon 39642699 39642836 . - . Parent=gene1764 ### chr21 ENCODE gene 39636596 39642658 . - . ID=gene1765;Name=AF064861.91-012;name2=HMGN1 chr21 ENCODE exon 39636596 39636955 . - . Parent=gene1765 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1765 chr21 ENCODE exon 39639626 39639754 . - . Parent=gene1765 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1765 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1765 chr21 ENCODE exon 39642341 39642658 . - . Parent=gene1765 ### chr21 ENCODE gene 39636600 39642419 . - . ID=gene1766;Name=AF064861.91-008;name2=HMGN1 chr21 ENCODE exon 39636600 39636955 . - . Parent=gene1766 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1766 chr21 ENCODE exon 39641043 39641088 . - . Parent=gene1766 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene1766 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1766 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1766 chr21 ENCODE exon 39642341 39642419 . - . Parent=gene1766 ### chr21 ENCODE gene 39636675 39643443 . - . ID=gene1767;Name=AF064861.91-013;name2=HMGN1 chr21 ENCODE exon 39636675 39636955 . - . Parent=gene1767 chr21 ENCODE CDS 39636908 39636955 . - 0 Parent=gene1767 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1767 chr21 ENCODE CDS 39638942 39639070 . - 0 Parent=gene1767 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1767 chr21 ENCODE CDS 39642088 39642135 . - 0 Parent=gene1767 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1767 chr21 ENCODE CDS 39642218 39642247 . - 0 Parent=gene1767 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1767 chr21 ENCODE CDS 39642341 39642373 . - 0 Parent=gene1767 chr21 ENCODE CDS 39643256 39643318 . - 0 Parent=gene1767 chr21 ENCODE exon 39643256 39643443 . - . Parent=gene1767 ### chr21 ENCODE gene 39636705 39642393 . - . ID=gene1768;name2=HMGN1;Name=AF064861.91-021 chr21 ENCODE exon 39636705 39636955 . - . Parent=gene1768 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1768 chr21 ENCODE exon 39639626 39639754 . - . Parent=gene1768 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene1768 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1768 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1768 chr21 ENCODE exon 39642341 39642393 . - . Parent=gene1768 ### chr21 ENCODE gene 39636774 39642135 . - . ID=gene1769;Name=AF064861.91-010;name2=HMGN1 chr21 ENCODE exon 39636774 39636955 . - . Parent=gene1769 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1769 chr21 ENCODE exon 39641043 39641088 . - . Parent=gene1769 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1769 ### chr21 ENCODE gene 39636805 39642850 . - . ID=gene1770;Name=AF064861.91-017;name2=HMGN1 chr21 ENCODE exon 39636805 39636955 . - . Parent=gene1770 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1770 chr21 ENCODE exon 39639626 39639754 . - . Parent=gene1770 chr21 ENCODE exon 39641043 39641088 . - . Parent=gene1770 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene1770 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1770 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1770 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1770 chr21 ENCODE exon 39642699 39642850 . - . Parent=gene1770 ### chr21 ENCODE gene 39636933 39642850 . - . ID=gene1771;Name=AF064861.91-007;name2=HMGN1 chr21 ENCODE exon 39636933 39636955 . - . Parent=gene1771 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene1771 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1771 chr21 ENCODE exon 39642218 39642373 . - . Parent=gene1771 chr21 ENCODE exon 39642699 39642850 . - . Parent=gene1771 ### chr21 ENCODE gene 39640943 39642863 . - . ID=gene1772;Name=AF064861.91-016;name2=HMGN1 chr21 ENCODE exon 39640943 39641088 . - . Parent=gene1772 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene1772 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1772 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1772 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1772 chr21 ENCODE exon 39642699 39642863 . - . Parent=gene1772 ### chr21 ENCODE gene 39641132 39642811 . - . ID=gene1773;Name=AF064861.91-019;name2=HMGN1 chr21 ENCODE exon 39641132 39641748 . - . Parent=gene1773 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1773 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1773 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene1773 chr21 ENCODE exon 39642699 39642811 . - . Parent=gene1773 ### chr21 ENCODE gene 39641288 39642416 . - . ID=gene1774;Name=AF064861.91-020;name2=HMGN1 chr21 ENCODE exon 39641288 39641748 . - . Parent=gene1774 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene1774 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene1774 chr21 ENCODE exon 39642341 39642416 . - . Parent=gene1774 ### chr21 ENCODE gene 39641791 39642816 . - . ID=gene1775;Name=AF064861.91-014;name2=HMGN1 chr21 ENCODE exon 39641791 39642373 . - . Parent=gene1775 chr21 ENCODE exon 39642699 39642816 . - . Parent=gene1775 ### chr21 ENCODE gene 39641861 39642850 . - . ID=gene1776;Name=AF064861.91-005;name2=HMGN1 chr21 ENCODE exon 39641861 39642135 . - . Parent=gene1776 chr21 ENCODE exon 39642218 39642373 . - . Parent=gene1776 chr21 ENCODE exon 39642699 39642850 . - . Parent=gene1776 ### chr21 ENCODE gene 39674040 39691685 . + . ID=gene1777;Name=AF064861.92-001;name2=WRB chr21 ENCODE exon 39674040 39674282 . + . Parent=gene1777 chr21 ENCODE CDS 39674181 39674282 . + 0 Parent=gene1777 chr21 ENCODE exon 39684494 39684659 . + . Parent=gene1777 chr21 ENCODE CDS 39684494 39684659 . + 0 Parent=gene1777 chr21 ENCODE exon 39685565 39685632 . + . Parent=gene1777 chr21 ENCODE CDS 39685565 39685632 . + 2 Parent=gene1777 chr21 ENCODE exon 39686962 39687076 . + . Parent=gene1777 chr21 ENCODE CDS 39686962 39687076 . + 0 Parent=gene1777 chr21 ENCODE CDS 39690662 39690735 . + 2 Parent=gene1777 chr21 ENCODE exon 39690662 39691685 . + . Parent=gene1777 ### chr21 ENCODE gene 39674190 39685842 . + . ID=gene1778;Name=AF064861.92-005;name2=WRB chr21 ENCODE exon 39674190 39674282 . + . Parent=gene1778 chr21 ENCODE exon 39684494 39684659 . + . Parent=gene1778 chr21 ENCODE exon 39685565 39685842 . + . Parent=gene1778 ### chr21 ENCODE gene 39674210 39685001 . + . ID=gene1779;Name=AF064861.92-008;name2=WRB chr21 ENCODE exon 39674210 39674282 . + . Parent=gene1779 chr21 ENCODE exon 39684494 39685001 . + . Parent=gene1779 ### chr21 ENCODE gene 39674254 39690912 . + . ID=gene1780;Name=AF064861.92-002;name2=WRB chr21 ENCODE exon 39674254 39674352 . + . Parent=gene1780 chr21 ENCODE exon 39684494 39684659 . + . Parent=gene1780 chr21 ENCODE CDS 39684494 39684659 . + 0 Parent=gene1780 chr21 ENCODE exon 39685565 39685632 . + . Parent=gene1780 chr21 ENCODE CDS 39685565 39685632 . + 2 Parent=gene1780 chr21 ENCODE exon 39686962 39687076 . + . Parent=gene1780 chr21 ENCODE CDS 39686962 39687076 . + 0 Parent=gene1780 chr21 ENCODE CDS 39690662 39690735 . + 2 Parent=gene1780 chr21 ENCODE exon 39690662 39690912 . + . Parent=gene1780 ### chr21 ENCODE gene 39674283 39684599 . + . ID=gene1781;Name=AF064861.92-003;name2=WRB chr21 ENCODE exon 39674283 39674717 . + . Parent=gene1781 chr21 ENCODE exon 39684494 39684599 . + . Parent=gene1781 chr21 ENCODE CDS 39684494 39684599 . + 0 Parent=gene1781 ### chr21 ENCODE gene 39679889 39687076 . + . ID=gene1782;Name=AF064861.92-009;name2=WRB chr21 ENCODE exon 39679889 39680307 . + . Parent=gene1782 chr21 ENCODE exon 39684494 39684659 . + . Parent=gene1782 chr21 ENCODE CDS 39684494 39684659 . + 0 Parent=gene1782 chr21 ENCODE exon 39685565 39685632 . + . Parent=gene1782 chr21 ENCODE CDS 39685565 39685632 . + 2 Parent=gene1782 chr21 ENCODE exon 39686962 39687076 . + . Parent=gene1782 chr21 ENCODE CDS 39686962 39687076 . + 0 Parent=gene1782 ### chr21 ENCODE gene 39681561 39691685 . + . ID=gene1783;Name=AF064861.92-004;name2=WRB chr21 ENCODE exon 39681561 39681651 . + . Parent=gene1783 chr21 ENCODE exon 39684494 39684659 . + . Parent=gene1783 chr21 ENCODE CDS 39684494 39684659 . + 0 Parent=gene1783 chr21 ENCODE exon 39685565 39685632 . + . Parent=gene1783 chr21 ENCODE CDS 39685565 39685632 . + 2 Parent=gene1783 chr21 ENCODE exon 39686962 39687076 . + . Parent=gene1783 chr21 ENCODE CDS 39686962 39687076 . + 0 Parent=gene1783 chr21 ENCODE CDS 39690662 39690735 . + 2 Parent=gene1783 chr21 ENCODE exon 39690662 39691685 . + . Parent=gene1783 ### chr21 ENCODE gene 39681587 39691050 . + . ID=gene1784;Name=AF064861.92-006;name2=WRB chr21 ENCODE exon 39681587 39681651 . + . Parent=gene1784 chr21 ENCODE exon 39684494 39685272 . + . Parent=gene1784 chr21 ENCODE exon 39685565 39685632 . + . Parent=gene1784 chr21 ENCODE exon 39686962 39687076 . + . Parent=gene1784 chr21 ENCODE exon 39690662 39691050 . + . Parent=gene1784 ### chr21 ENCODE gene 39686692 39690900 . + . ID=gene1785;name2=WRB;Name=AF064861.92-007 chr21 ENCODE exon 39686692 39687076 . + . Parent=gene1785 chr21 ENCODE exon 39690662 39690900 . + . Parent=gene1785 ### chr21 ENCODE gene 39699640 39739573 . - . ID=gene1786;Name=AF121781.16-001;name2=C21orf13 chr21 ENCODE exon 39699640 39700408 . - . Parent=gene1786 chr21 ENCODE CDS 39699678 39700408 . - 2 Parent=gene1786 chr21 ENCODE exon 39703775 39703892 . - . Parent=gene1786 chr21 ENCODE CDS 39703775 39703892 . - 0 Parent=gene1786 chr21 ENCODE exon 39704060 39704163 . - . Parent=gene1786 chr21 ENCODE CDS 39704060 39704163 . - 2 Parent=gene1786 chr21 ENCODE exon 39705514 39705598 . - . Parent=gene1786 chr21 ENCODE CDS 39705514 39705598 . - 0 Parent=gene1786 chr21 ENCODE exon 39714502 39714639 . - . Parent=gene1786 chr21 ENCODE CDS 39714502 39714639 . - 0 Parent=gene1786 chr21 ENCODE exon 39716772 39717286 . - . Parent=gene1786 chr21 ENCODE CDS 39716772 39717286 . - 2 Parent=gene1786 chr21 ENCODE CDS 39721968 39722289 . - 0 Parent=gene1786 chr21 ENCODE exon 39721968 39722299 . - . Parent=gene1786 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1786 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1786 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1786 chr21 ENCODE exon 39739521 39739573 . - . Parent=gene1786 ### chr21 ENCODE gene 39699656 39739529 . - . ID=gene1787;Name=AF121781.16-002;name2=C21orf13 chr21 ENCODE exon 39699656 39700408 . - . Parent=gene1787 chr21 ENCODE CDS 39699678 39700408 . - 2 Parent=gene1787 chr21 ENCODE exon 39703775 39703892 . - . Parent=gene1787 chr21 ENCODE CDS 39703775 39703892 . - 0 Parent=gene1787 chr21 ENCODE exon 39704060 39704163 . - . Parent=gene1787 chr21 ENCODE CDS 39704060 39704163 . - 2 Parent=gene1787 chr21 ENCODE exon 39705514 39705598 . - . Parent=gene1787 chr21 ENCODE CDS 39705514 39705598 . - 0 Parent=gene1787 chr21 ENCODE exon 39714502 39714639 . - . Parent=gene1787 chr21 ENCODE CDS 39714502 39714639 . - 0 Parent=gene1787 chr21 ENCODE exon 39716772 39717286 . - . Parent=gene1787 chr21 ENCODE CDS 39716772 39717286 . - 2 Parent=gene1787 chr21 ENCODE CDS 39721968 39722289 . - 0 Parent=gene1787 chr21 ENCODE exon 39721968 39722299 . - . Parent=gene1787 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1787 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1787 chr21 ENCODE exon 39739246 39739529 . - . Parent=gene1787 ### chr21 ENCODE gene 39699774 39704943 . - . ID=gene1788;name2=C21orf13;Name=AF121781.16-020 chr21 ENCODE exon 39699774 39700408 . - . Parent=gene1788 chr21 ENCODE exon 39703775 39703892 . - . Parent=gene1788 chr21 ENCODE exon 39704060 39704163 . - . Parent=gene1788 chr21 ENCODE exon 39704829 39704943 . - . Parent=gene1788 ### chr21 ENCODE gene 39705514 39739548 . - . ID=gene1789;Name=AF121781.16-016;name2=C21orf13 chr21 ENCODE exon 39705514 39705598 . - . Parent=gene1789 chr21 ENCODE exon 39714502 39714639 . - . Parent=gene1789 chr21 ENCODE exon 39716772 39716879 . - . Parent=gene1789 chr21 ENCODE exon 39722984 39723007 . - . Parent=gene1789 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1789 chr21 ENCODE exon 39729893 39729963 . - . Parent=gene1789 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1789 chr21 ENCODE exon 39739521 39739548 . - . Parent=gene1789 ### chr21 ENCODE gene 39715860 39732732 . - . ID=gene1790;Name=AF121781.16-005;name2=C21orf13 chr21 ENCODE exon 39715860 39717704 . - . Parent=gene1790 chr21 ENCODE exon 39721214 39722299 . - . Parent=gene1790 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1790 chr21 ENCODE exon 39732480 39732732 . - . Parent=gene1790 ### chr21 ENCODE gene 39716208 39739573 . - . ID=gene1791;Name=AF121781.16-006;name2=C21orf13 chr21 ENCODE exon 39716208 39717286 . - . Parent=gene1791 chr21 ENCODE exon 39721968 39722299 . - . Parent=gene1791 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1791 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1791 chr21 ENCODE exon 39739521 39739573 . - . Parent=gene1791 ### chr21 ENCODE gene 39716208 39739601 . - . ID=gene1792;Name=AF121781.16-003;name2=C21orf13 chr21 ENCODE exon 39716208 39717286 . - . Parent=gene1792 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1792 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1792 chr21 ENCODE exon 39739521 39739601 . - . Parent=gene1792 ### chr21 ENCODE gene 39716784 39739557 . - . ID=gene1793;Name=AF121781.16-021;name2=C21orf13 chr21 ENCODE exon 39716784 39717286 . - . Parent=gene1793 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1793 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1793 chr21 ENCODE exon 39739521 39739557 . - . Parent=gene1793 ### chr21 ENCODE gene 39717036 39739571 . - . ID=gene1794;Name=AF121781.16-007;name2=C21orf13 chr21 ENCODE exon 39717036 39717286 . - . Parent=gene1794 chr21 ENCODE exon 39721555 39721701 . - . Parent=gene1794 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1794 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1794 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1794 chr21 ENCODE exon 39738440 39738541 . - . Parent=gene1794 chr21 ENCODE exon 39739521 39739571 . - . Parent=gene1794 ### chr21 ENCODE gene 39717041 39739556 . - . ID=gene1795;Name=AF121781.16-019;name2=C21orf13 chr21 ENCODE exon 39717041 39717286 . - . Parent=gene1795 chr21 ENCODE CDS 39717041 39717286 . - 2 Parent=gene1795 chr21 ENCODE CDS 39721968 39722289 . - 0 Parent=gene1795 chr21 ENCODE exon 39721968 39722299 . - . Parent=gene1795 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1795 chr21 ENCODE exon 39729216 39729338 . - . Parent=gene1795 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1795 chr21 ENCODE exon 39739521 39739556 . - . Parent=gene1795 ### chr21 ENCODE gene 39717216 39739529 . - . ID=gene1796;Name=AF121781.16-012;name2=C21orf13 chr21 ENCODE exon 39717216 39717286 . - . Parent=gene1796 chr21 ENCODE exon 39722927 39723190 . - . Parent=gene1796 chr21 ENCODE exon 39729216 39729338 . - . Parent=gene1796 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1796 chr21 ENCODE exon 39739246 39739529 . - . Parent=gene1796 ### chr21 ENCODE gene 39721967 39739574 . - . ID=gene1797;Name=AF121781.16-014;name2=C21orf13 chr21 ENCODE CDS 39721967 39722289 . - 0 Parent=gene1797 chr21 ENCODE exon 39721967 39722299 . - . Parent=gene1797 chr21 ENCODE exon 39722927 39723190 . - . Parent=gene1797 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1797 chr21 ENCODE exon 39739521 39739574 . - . Parent=gene1797 ### chr21 ENCODE gene 39722004 39739599 . - . ID=gene1798;Name=AF121781.16-018;name2=C21orf13 chr21 ENCODE CDS 39722004 39722289 . - 0 Parent=gene1798 chr21 ENCODE exon 39722004 39722299 . - . Parent=gene1798 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1798 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1798 chr21 ENCODE exon 39739521 39739599 . - . Parent=gene1798 ### chr21 ENCODE gene 39722006 39739515 . - . ID=gene1799;Name=AF121781.16-009;name2=C21orf13 chr21 ENCODE CDS 39722006 39722289 . - 0 Parent=gene1799 chr21 ENCODE exon 39722006 39722299 . - . Parent=gene1799 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1799 chr21 ENCODE exon 39732480 39732514 . - . Parent=gene1799 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1799 chr21 ENCODE exon 39738440 39738541 . - . Parent=gene1799 chr21 ENCODE exon 39739246 39739515 . - . Parent=gene1799 ### chr21 ENCODE gene 39722011 39739529 . - . ID=gene1800;name2=C21orf13;Name=AF121781.16-013 chr21 ENCODE CDS 39722011 39722289 . - 0 Parent=gene1800 chr21 ENCODE exon 39722011 39722299 . - . Parent=gene1800 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1800 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1800 chr21 ENCODE exon 39739246 39739529 . - . Parent=gene1800 ### chr21 ENCODE gene 39722081 39739565 . - . ID=gene1801;Name=AF121781.16-010;name2=C21orf13 chr21 ENCODE CDS 39722081 39722289 . - 0 Parent=gene1801 chr21 ENCODE exon 39722081 39722299 . - . Parent=gene1801 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1801 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1801 chr21 ENCODE exon 39733430 39733569 . - . Parent=gene1801 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1801 chr21 ENCODE exon 39739521 39739565 . - . Parent=gene1801 ### chr21 ENCODE gene 39722101 39739565 . - . ID=gene1802;Name=AF121781.16-015;name2=C21orf13 chr21 ENCODE CDS 39722101 39722289 . - 0 Parent=gene1802 chr21 ENCODE exon 39722101 39722299 . - . Parent=gene1802 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene1802 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1802 chr21 ENCODE exon 39729893 39729963 . - . Parent=gene1802 chr21 ENCODE exon 39733430 39733569 . - . Parent=gene1802 chr21 ENCODE exon 39739521 39739565 . - . Parent=gene1802 ### chr21 ENCODE gene 39722198 39739576 . - . ID=gene1803;Name=AF121781.16-017;name2=C21orf13 chr21 ENCODE CDS 39722198 39722289 . - 0 Parent=gene1803 chr21 ENCODE exon 39722198 39722299 . - . Parent=gene1803 chr21 ENCODE exon 39722927 39723190 . - . Parent=gene1803 chr21 ENCODE exon 39729216 39729338 . - . Parent=gene1803 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1803 chr21 ENCODE exon 39739521 39739576 . - . Parent=gene1803 ### chr21 ENCODE gene 39722258 39739548 . - . ID=gene1804;Name=AF121781.16-008;name2=C21orf13 chr21 ENCODE CDS 39722258 39722289 . - 0 Parent=gene1804 chr21 ENCODE exon 39722258 39722299 . - . Parent=gene1804 chr21 ENCODE exon 39722927 39723190 . - . Parent=gene1804 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene1804 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene1804 chr21 ENCODE exon 39738440 39738541 . - . Parent=gene1804 chr21 ENCODE exon 39739521 39739548 . - . Parent=gene1804 ### chr21 ENCODE gene 39737255 39739549 . - . ID=gene1805;Name=AF121781.16-011;name2=C21orf13 chr21 ENCODE exon 39737255 39737997 . - . Parent=gene1805 chr21 ENCODE exon 39739521 39739549 . - . Parent=gene1805 ### chr21 ENCODE gene 39739651 39739725 . + . ID=gene1806;Name=AF121897.3-002;name2=SH3BGR chr21 ENCODE exon 39739651 39739725 . + . Parent=gene1806 ### chr21 ENCODE gene 39739651 39739725 . + . ID=gene1807;Name=AF121897.3-003;name2=SH3BGR chr21 ENCODE exon 39739651 39739725 . + . Parent=gene1807 ### chr21 ENCODE gene 39739661 39739688 . + . ID=gene1808;Name=AF121897.3-007;name2=SH3BGR chr21 ENCODE exon 39739661 39739688 . + . Parent=gene1808 ### chr21 ENCODE gene 39739671 39739877 . + . ID=gene1809;Name=AF121897.3-004;name2=SH3BGR chr21 ENCODE exon 39739671 39739877 . + . Parent=gene1809 ### chr21 ENCODE gene 39739727 39739894 . + . ID=gene1810;Name=AF121897.3-005;name2=SH3BGR chr21 ENCODE exon 39739727 39739894 . + . Parent=gene1810 ### chr21 ENCODE gene 39739738 39739877 . + . ID=gene1811;Name=AF121897.3-006;name2=SH3BGR chr21 ENCODE exon 39739738 39739877 . + . Parent=gene1811 ### chr22 ENCODE gene 30131552 30143859 . + . ID=gene1812;name2=DRG1;Name=RP11-247I13.1-004 chr22 ENCODE exon 30131552 30131621 . + . Parent=gene1812 chr22 ENCODE exon 30140796 30140965 . + . Parent=gene1812 chr22 ENCODE exon 30141848 30141939 . + . Parent=gene1812 chr22 ENCODE exon 30143820 30143859 . + . Parent=gene1812 ### chr22 ENCODE gene 30131552 30143886 . + . ID=gene1813;Name=RP11-247I13.1-002;name2=DRG1 chr22 ENCODE exon 30131552 30131621 . + . Parent=gene1813 chr22 ENCODE exon 30140796 30140965 . + . Parent=gene1813 chr22 ENCODE exon 30141848 30141939 . + . Parent=gene1813 chr22 ENCODE exon 30143820 30143886 . + . Parent=gene1813 ### chr22 ENCODE gene 30131552 30154992 . + . ID=gene1814;Name=RP11-247I13.1-001;name2=DRG1 chr22 ENCODE exon 30131552 30131621 . + . Parent=gene1814 chr22 ENCODE exon 30140796 30140965 . + . Parent=gene1814 chr22 ENCODE exon 30143820 30143950 . + . Parent=gene1814 chr22 ENCODE exon 30147155 30147322 . + . Parent=gene1814 chr22 ENCODE exon 30147600 30147722 . + . Parent=gene1814 chr22 ENCODE exon 30154412 30154992 . + . Parent=gene1814 ### chr22 ENCODE gene 30147053 30154695 . + . ID=gene1815;Name=RP11-247I13.1-003;name2=DRG1 chr22 ENCODE exon 30147053 30147322 . + . Parent=gene1815 chr22 ENCODE exon 30147600 30147722 . + . Parent=gene1815 chr22 ENCODE exon 30154412 30154695 . + . Parent=gene1815 ### chr22 ENCODE gene 30159903 30210364 . - . ID=gene1816;Name=RP11-247I13.2-001;name2=EIF4ENIF1 chr22 ENCODE exon 30159903 30160661 . - . Parent=gene1816 chr22 ENCODE CDS 30160420 30160661 . - 2 Parent=gene1816 chr22 ENCODE exon 30161244 30161408 . - . Parent=gene1816 chr22 ENCODE CDS 30161244 30161408 . - 2 Parent=gene1816 chr22 ENCODE exon 30162314 30162658 . - . Parent=gene1816 chr22 ENCODE CDS 30162314 30162658 . - 2 Parent=gene1816 chr22 ENCODE exon 30163502 30163634 . - . Parent=gene1816 chr22 ENCODE CDS 30163502 30163634 . - 0 Parent=gene1816 chr22 ENCODE exon 30165146 30165230 . - . Parent=gene1816 chr22 ENCODE CDS 30165146 30165230 . - 1 Parent=gene1816 chr22 ENCODE exon 30167966 30168108 . - . Parent=gene1816 chr22 ENCODE CDS 30167966 30168108 . - 0 Parent=gene1816 chr22 ENCODE exon 30168693 30168772 . - . Parent=gene1816 chr22 ENCODE CDS 30168693 30168772 . - 2 Parent=gene1816 chr22 ENCODE exon 30169888 30170071 . - . Parent=gene1816 chr22 ENCODE CDS 30169888 30170071 . - 0 Parent=gene1816 chr22 ENCODE exon 30170829 30170900 . - . Parent=gene1816 chr22 ENCODE CDS 30170829 30170900 . - 0 Parent=gene1816 chr22 ENCODE exon 30174720 30174916 . - . Parent=gene1816 chr22 ENCODE CDS 30174720 30174916 . - 2 Parent=gene1816 chr22 ENCODE exon 30175676 30175855 . - . Parent=gene1816 chr22 ENCODE CDS 30175676 30175855 . - 2 Parent=gene1816 chr22 ENCODE exon 30176392 30176527 . - . Parent=gene1816 chr22 ENCODE CDS 30176392 30176527 . - 0 Parent=gene1816 chr22 ENCODE exon 30179015 30179190 . - . Parent=gene1816 chr22 ENCODE CDS 30179015 30179190 . - 2 Parent=gene1816 chr22 ENCODE exon 30188715 30188842 . - . Parent=gene1816 chr22 ENCODE CDS 30188715 30188842 . - 1 Parent=gene1816 chr22 ENCODE exon 30192384 30192457 . - . Parent=gene1816 chr22 ENCODE CDS 30192384 30192457 . - 0 Parent=gene1816 chr22 ENCODE CDS 30209163 30209258 . - 0 Parent=gene1816 chr22 ENCODE exon 30209163 30209285 . - . Parent=gene1816 chr22 ENCODE exon 30210234 30210364 . - . Parent=gene1816 ### chr22 ENCODE gene 30159905 30171800 . - . ID=gene1817;Name=RP11-247I13.2-004;name2=EIF4ENIF1 chr22 ENCODE exon 30159905 30160661 . - . Parent=gene1817 chr22 ENCODE exon 30161244 30161408 . - . Parent=gene1817 chr22 ENCODE exon 30162314 30162658 . - . Parent=gene1817 chr22 ENCODE exon 30163502 30163634 . - . Parent=gene1817 chr22 ENCODE exon 30165146 30165230 . - . Parent=gene1817 chr22 ENCODE exon 30167966 30168108 . - . Parent=gene1817 chr22 ENCODE exon 30168693 30168772 . - . Parent=gene1817 chr22 ENCODE exon 30169888 30170071 . - . Parent=gene1817 chr22 ENCODE exon 30170829 30171800 . - . Parent=gene1817 ### chr22 ENCODE gene 30159907 30210127 . - . ID=gene1818;Name=RP11-247I13.2-003;name2=EIF4ENIF1 chr22 ENCODE exon 30159907 30160661 . - . Parent=gene1818 chr22 ENCODE CDS 30160420 30160661 . - 2 Parent=gene1818 chr22 ENCODE exon 30161244 30161408 . - . Parent=gene1818 chr22 ENCODE CDS 30161244 30161408 . - 2 Parent=gene1818 chr22 ENCODE exon 30162314 30162658 . - . Parent=gene1818 chr22 ENCODE CDS 30162314 30162658 . - 2 Parent=gene1818 chr22 ENCODE exon 30163502 30163634 . - . Parent=gene1818 chr22 ENCODE CDS 30163502 30163634 . - 0 Parent=gene1818 chr22 ENCODE exon 30165146 30165230 . - . Parent=gene1818 chr22 ENCODE CDS 30165146 30165230 . - 1 Parent=gene1818 chr22 ENCODE exon 30167966 30168105 . - . Parent=gene1818 chr22 ENCODE CDS 30167966 30168105 . - 0 Parent=gene1818 chr22 ENCODE exon 30168693 30168772 . - . Parent=gene1818 chr22 ENCODE CDS 30168693 30168772 . - 2 Parent=gene1818 chr22 ENCODE exon 30169888 30170071 . - . Parent=gene1818 chr22 ENCODE CDS 30169888 30170071 . - 0 Parent=gene1818 chr22 ENCODE exon 30170829 30170900 . - . Parent=gene1818 chr22 ENCODE CDS 30170829 30170900 . - 0 Parent=gene1818 chr22 ENCODE exon 30174684 30174916 . - . Parent=gene1818 chr22 ENCODE CDS 30174684 30174916 . - 2 Parent=gene1818 chr22 ENCODE exon 30175676 30175855 . - . Parent=gene1818 chr22 ENCODE CDS 30175676 30175855 . - 2 Parent=gene1818 chr22 ENCODE exon 30176392 30176527 . - . Parent=gene1818 chr22 ENCODE CDS 30176392 30176527 . - 0 Parent=gene1818 chr22 ENCODE exon 30179015 30179190 . - . Parent=gene1818 chr22 ENCODE CDS 30179015 30179190 . - 2 Parent=gene1818 chr22 ENCODE exon 30183472 30183673 . - . Parent=gene1818 chr22 ENCODE CDS 30183472 30183673 . - 0 Parent=gene1818 chr22 ENCODE exon 30184221 30184507 . - . Parent=gene1818 chr22 ENCODE CDS 30184221 30184507 . - 2 Parent=gene1818 chr22 ENCODE exon 30188715 30188842 . - . Parent=gene1818 chr22 ENCODE CDS 30188715 30188842 . - 1 Parent=gene1818 chr22 ENCODE exon 30192384 30192457 . - . Parent=gene1818 chr22 ENCODE CDS 30192384 30192457 . - 0 Parent=gene1818 chr22 ENCODE CDS 30209163 30209258 . - 0 Parent=gene1818 chr22 ENCODE exon 30209163 30209285 . - . Parent=gene1818 chr22 ENCODE exon 30209931 30210127 . - . Parent=gene1818 ### chr22 ENCODE gene 30159909 30210281 . - . ID=gene1819;Name=RP11-247I13.2-002;name2=EIF4ENIF1 chr22 ENCODE exon 30159909 30160661 . - . Parent=gene1819 chr22 ENCODE CDS 30160420 30160661 . - 2 Parent=gene1819 chr22 ENCODE exon 30161244 30161408 . - . Parent=gene1819 chr22 ENCODE CDS 30161244 30161408 . - 2 Parent=gene1819 chr22 ENCODE exon 30162314 30162658 . - . Parent=gene1819 chr22 ENCODE CDS 30162314 30162658 . - 2 Parent=gene1819 chr22 ENCODE exon 30163502 30163634 . - . Parent=gene1819 chr22 ENCODE CDS 30163502 30163634 . - 0 Parent=gene1819 chr22 ENCODE exon 30165146 30165230 . - . Parent=gene1819 chr22 ENCODE CDS 30165146 30165230 . - 1 Parent=gene1819 chr22 ENCODE exon 30167966 30168105 . - . Parent=gene1819 chr22 ENCODE CDS 30167966 30168105 . - 0 Parent=gene1819 chr22 ENCODE exon 30168693 30168772 . - . Parent=gene1819 chr22 ENCODE CDS 30168693 30168772 . - 2 Parent=gene1819 chr22 ENCODE exon 30169888 30170071 . - . Parent=gene1819 chr22 ENCODE CDS 30169888 30170071 . - 0 Parent=gene1819 chr22 ENCODE exon 30170829 30170900 . - . Parent=gene1819 chr22 ENCODE CDS 30170829 30170900 . - 0 Parent=gene1819 chr22 ENCODE exon 30174684 30174916 . - . Parent=gene1819 chr22 ENCODE CDS 30174684 30174916 . - 2 Parent=gene1819 chr22 ENCODE exon 30175676 30175855 . - . Parent=gene1819 chr22 ENCODE CDS 30175676 30175855 . - 2 Parent=gene1819 chr22 ENCODE exon 30176392 30176527 . - . Parent=gene1819 chr22 ENCODE CDS 30176392 30176527 . - 0 Parent=gene1819 chr22 ENCODE exon 30179015 30179190 . - . Parent=gene1819 chr22 ENCODE CDS 30179015 30179190 . - 2 Parent=gene1819 chr22 ENCODE exon 30183472 30183673 . - . Parent=gene1819 chr22 ENCODE CDS 30183472 30183673 . - 0 Parent=gene1819 chr22 ENCODE exon 30184221 30184507 . - . Parent=gene1819 chr22 ENCODE CDS 30184221 30184507 . - 2 Parent=gene1819 chr22 ENCODE exon 30188715 30188842 . - . Parent=gene1819 chr22 ENCODE CDS 30188715 30188842 . - 1 Parent=gene1819 chr22 ENCODE exon 30192384 30192457 . - . Parent=gene1819 chr22 ENCODE CDS 30192384 30192457 . - 0 Parent=gene1819 chr22 ENCODE CDS 30209163 30209258 . - 0 Parent=gene1819 chr22 ENCODE exon 30209163 30209285 . - . Parent=gene1819 chr22 ENCODE exon 30210234 30210281 . - . Parent=gene1819 ### chr22 ENCODE gene 30159913 30209285 . - . ID=gene1820;Name=RP11-247I13.2-005;name2=EIF4ENIF1 chr22 ENCODE exon 30159913 30160661 . - . Parent=gene1820 chr22 ENCODE CDS 30160420 30160661 . - 2 Parent=gene1820 chr22 ENCODE exon 30161244 30161408 . - . Parent=gene1820 chr22 ENCODE CDS 30161244 30161408 . - 2 Parent=gene1820 chr22 ENCODE exon 30162314 30162658 . - . Parent=gene1820 chr22 ENCODE CDS 30162314 30162658 . - 2 Parent=gene1820 chr22 ENCODE exon 30163502 30163634 . - . Parent=gene1820 chr22 ENCODE CDS 30163502 30163634 . - 0 Parent=gene1820 chr22 ENCODE exon 30165146 30165230 . - . Parent=gene1820 chr22 ENCODE CDS 30165146 30165230 . - 1 Parent=gene1820 chr22 ENCODE exon 30167966 30168105 . - . Parent=gene1820 chr22 ENCODE CDS 30167966 30168105 . - 0 Parent=gene1820 chr22 ENCODE exon 30168693 30168772 . - . Parent=gene1820 chr22 ENCODE CDS 30168693 30168772 . - 2 Parent=gene1820 chr22 ENCODE exon 30169888 30170071 . - . Parent=gene1820 chr22 ENCODE CDS 30169888 30170071 . - 0 Parent=gene1820 chr22 ENCODE exon 30174684 30174916 . - . Parent=gene1820 chr22 ENCODE CDS 30174684 30174916 . - 2 Parent=gene1820 chr22 ENCODE exon 30175676 30175855 . - . Parent=gene1820 chr22 ENCODE CDS 30175676 30175855 . - 2 Parent=gene1820 chr22 ENCODE exon 30176392 30176527 . - . Parent=gene1820 chr22 ENCODE CDS 30176392 30176527 . - 0 Parent=gene1820 chr22 ENCODE exon 30179015 30179190 . - . Parent=gene1820 chr22 ENCODE CDS 30179015 30179190 . - 2 Parent=gene1820 chr22 ENCODE exon 30183472 30183673 . - . Parent=gene1820 chr22 ENCODE CDS 30183472 30183673 . - 0 Parent=gene1820 chr22 ENCODE exon 30184221 30184507 . - . Parent=gene1820 chr22 ENCODE CDS 30184221 30184507 . - 2 Parent=gene1820 chr22 ENCODE exon 30188715 30188842 . - . Parent=gene1820 chr22 ENCODE CDS 30188715 30188842 . - 1 Parent=gene1820 chr22 ENCODE exon 30192384 30192457 . - . Parent=gene1820 chr22 ENCODE CDS 30192384 30192457 . - 0 Parent=gene1820 chr22 ENCODE CDS 30209163 30209258 . - 0 Parent=gene1820 chr22 ENCODE exon 30209163 30209285 . - . Parent=gene1820 ### chr22 ENCODE gene 30162343 30169923 . - . ID=gene1821;Name=RP11-247I13.2-007;name2=EIF4ENIF1 chr22 ENCODE exon 30162343 30162658 . - . Parent=gene1821 chr22 ENCODE exon 30163502 30163634 . - . Parent=gene1821 chr22 ENCODE exon 30165146 30165230 . - . Parent=gene1821 chr22 ENCODE exon 30167478 30167548 . - . Parent=gene1821 chr22 ENCODE exon 30167966 30168105 . - . Parent=gene1821 chr22 ENCODE exon 30168693 30168772 . - . Parent=gene1821 chr22 ENCODE exon 30169888 30169923 . - . Parent=gene1821 ### chr22 ENCODE gene 30162575 30163959 . - . ID=gene1822;Name=RP11-247I13.2-011;name2=EIF4ENIF1 chr22 ENCODE exon 30162575 30162658 . - . Parent=gene1822 chr22 ENCODE exon 30163502 30163959 . - . Parent=gene1822 ### chr22 ENCODE gene 30164978 30170030 . - . ID=gene1823;Name=RP11-247I13.2-010;name2=EIF4ENIF1 chr22 ENCODE exon 30164978 30165230 . - . Parent=gene1823 chr22 ENCODE exon 30167966 30168108 . - . Parent=gene1823 chr22 ENCODE exon 30168693 30168772 . - . Parent=gene1823 chr22 ENCODE exon 30169888 30170030 . - . Parent=gene1823 ### chr22 ENCODE gene 30184240 30209782 . - . ID=gene1824;Name=RP11-247I13.2-006;name2=EIF4ENIF1 chr22 ENCODE exon 30184240 30184507 . - . Parent=gene1824 chr22 ENCODE CDS 30184240 30184507 . - 2 Parent=gene1824 chr22 ENCODE exon 30188715 30188842 . - . Parent=gene1824 chr22 ENCODE CDS 30188715 30188842 . - 1 Parent=gene1824 chr22 ENCODE exon 30192384 30192457 . - . Parent=gene1824 chr22 ENCODE CDS 30192384 30192457 . - 0 Parent=gene1824 chr22 ENCODE CDS 30209163 30209258 . - 0 Parent=gene1824 chr22 ENCODE exon 30209163 30209285 . - . Parent=gene1824 chr22 ENCODE exon 30209688 30209782 . - . Parent=gene1824 ### chr22 ENCODE gene 30188822 30210477 . - . ID=gene1825;Name=RP11-247I13.2-009;name2=EIF4ENIF1 chr22 ENCODE exon 30188822 30188842 . - . Parent=gene1825 chr22 ENCODE CDS 30188822 30188842 . - 1 Parent=gene1825 chr22 ENCODE exon 30192384 30192457 . - . Parent=gene1825 chr22 ENCODE CDS 30192384 30192457 . - 0 Parent=gene1825 chr22 ENCODE CDS 30209163 30209258 . - 0 Parent=gene1825 chr22 ENCODE exon 30209163 30209285 . - . Parent=gene1825 chr22 ENCODE exon 30210445 30210477 . - . Parent=gene1825 ### chr22 ENCODE gene 30188822 30216648 . - . ID=gene1826;Name=RP11-247I13.2-008;name2=EIF4ENIF1 chr22 ENCODE exon 30188822 30188842 . - . Parent=gene1826 chr22 ENCODE CDS 30188822 30188842 . - 1 Parent=gene1826 chr22 ENCODE exon 30192384 30192457 . - . Parent=gene1826 chr22 ENCODE CDS 30192384 30192457 . - 0 Parent=gene1826 chr22 ENCODE CDS 30209163 30209258 . - 0 Parent=gene1826 chr22 ENCODE exon 30209163 30209285 . - . Parent=gene1826 chr22 ENCODE exon 30216493 30216648 . - . Parent=gene1826 ### chr22 ENCODE gene 30209228 30249607 . + . ID=gene1827;Name=RP5-858B16.1-016;name2=SFI1 chr22 ENCODE exon 30209228 30209323 . + . Parent=gene1827 chr22 ENCODE exon 30228795 30228916 . + . Parent=gene1827 chr22 ENCODE exon 30249230 30249607 . + . Parent=gene1827 ### chr22 ENCODE gene 30216815 30339091 . + . ID=gene1828;name2=SFI1;Name=RP5-858B16.1-001 chr22 ENCODE exon 30216815 30217177 . + . Parent=gene1828 chr22 ENCODE exon 30228795 30228916 . + . Parent=gene1828 chr22 ENCODE CDS 30228825 30228916 . + 0 Parent=gene1828 chr22 ENCODE exon 30249230 30249403 . + . Parent=gene1828 chr22 ENCODE CDS 30249230 30249403 . + 1 Parent=gene1828 chr22 ENCODE exon 30251598 30251669 . + . Parent=gene1828 chr22 ENCODE CDS 30251598 30251669 . + 1 Parent=gene1828 chr22 ENCODE exon 30267401 30267511 . + . Parent=gene1828 chr22 ENCODE CDS 30267401 30267511 . + 1 Parent=gene1828 chr22 ENCODE exon 30270794 30270888 . + . Parent=gene1828 chr22 ENCODE CDS 30270794 30270888 . + 1 Parent=gene1828 chr22 ENCODE exon 30277482 30277599 . + . Parent=gene1828 chr22 ENCODE CDS 30277482 30277599 . + 2 Parent=gene1828 chr22 ENCODE exon 30281830 30281932 . + . Parent=gene1828 chr22 ENCODE CDS 30281830 30281932 . + 1 Parent=gene1828 chr22 ENCODE exon 30293598 30293754 . + . Parent=gene1828 chr22 ENCODE CDS 30293598 30293754 . + 0 Parent=gene1828 chr22 ENCODE exon 30295771 30295932 . + . Parent=gene1828 chr22 ENCODE CDS 30295771 30295932 . + 2 Parent=gene1828 chr22 ENCODE exon 30298922 30298992 . + . Parent=gene1828 chr22 ENCODE CDS 30298922 30298992 . + 2 Parent=gene1828 chr22 ENCODE exon 30304415 30304512 . + . Parent=gene1828 chr22 ENCODE CDS 30304415 30304512 . + 0 Parent=gene1828 chr22 ENCODE exon 30305608 30305674 . + . Parent=gene1828 chr22 ENCODE CDS 30305608 30305674 . + 1 Parent=gene1828 chr22 ENCODE exon 30309987 30310117 . + . Parent=gene1828 chr22 ENCODE CDS 30309987 30310117 . + 0 Parent=gene1828 chr22 ENCODE exon 30322752 30322833 . + . Parent=gene1828 chr22 ENCODE CDS 30322752 30322833 . + 1 Parent=gene1828 chr22 ENCODE exon 30323147 30323325 . + . Parent=gene1828 chr22 ENCODE CDS 30323147 30323325 . + 0 Parent=gene1828 chr22 ENCODE exon 30324284 30324359 . + . Parent=gene1828 chr22 ENCODE CDS 30324284 30324359 . + 1 Parent=gene1828 chr22 ENCODE exon 30324849 30324944 . + . Parent=gene1828 chr22 ENCODE CDS 30324849 30324944 . + 0 Parent=gene1828 chr22 ENCODE exon 30325409 30325485 . + . Parent=gene1828 chr22 ENCODE CDS 30325409 30325485 . + 0 Parent=gene1828 chr22 ENCODE exon 30326868 30326970 . + . Parent=gene1828 chr22 ENCODE CDS 30326868 30326970 . + 1 Parent=gene1828 chr22 ENCODE exon 30328477 30328573 . + . Parent=gene1828 chr22 ENCODE CDS 30328477 30328573 . + 0 Parent=gene1828 chr22 ENCODE exon 30331683 30331843 . + . Parent=gene1828 chr22 ENCODE CDS 30331683 30331843 . + 2 Parent=gene1828 chr22 ENCODE exon 30332306 30332380 . + . Parent=gene1828 chr22 ENCODE CDS 30332306 30332380 . + 0 Parent=gene1828 chr22 ENCODE exon 30333682 30333756 . + . Parent=gene1828 chr22 ENCODE CDS 30333682 30333756 . + 0 Parent=gene1828 chr22 ENCODE exon 30333894 30334070 . + . Parent=gene1828 chr22 ENCODE CDS 30333894 30334070 . + 0 Parent=gene1828 chr22 ENCODE exon 30334142 30334395 . + . Parent=gene1828 chr22 ENCODE CDS 30334142 30334395 . + 0 Parent=gene1828 chr22 ENCODE exon 30335329 30335400 . + . Parent=gene1828 chr22 ENCODE CDS 30335329 30335400 . + 1 Parent=gene1828 chr22 ENCODE exon 30335588 30335819 . + . Parent=gene1828 chr22 ENCODE CDS 30335588 30335819 . + 1 Parent=gene1828 chr22 ENCODE exon 30337285 30337417 . + . Parent=gene1828 chr22 ENCODE CDS 30337285 30337417 . + 0 Parent=gene1828 chr22 ENCODE exon 30337540 30337618 . + . Parent=gene1828 chr22 ENCODE CDS 30337540 30337618 . + 2 Parent=gene1828 chr22 ENCODE exon 30338655 30338766 . + . Parent=gene1828 chr22 ENCODE CDS 30338655 30338766 . + 1 Parent=gene1828 chr22 ENCODE CDS 30338854 30338958 . + 0 Parent=gene1828 chr22 ENCODE exon 30338854 30339091 . + . Parent=gene1828 ### chr22 ENCODE gene 30217059 30251645 . + . ID=gene1829;name2=SFI1;Name=RP5-858B16.1-017 chr22 ENCODE exon 30217059 30217177 . + . Parent=gene1829 chr22 ENCODE exon 30228795 30228916 . + . Parent=gene1829 chr22 ENCODE exon 30249230 30249403 . + . Parent=gene1829 chr22 ENCODE exon 30251132 30251324 . + . Parent=gene1829 chr22 ENCODE exon 30251598 30251645 . + . Parent=gene1829 ### chr22 ENCODE gene 30217078 30339088 . + . ID=gene1830;Name=RP5-858B16.1-014;name2=SFI1 chr22 ENCODE exon 30217078 30217177 . + . Parent=gene1830 chr22 ENCODE exon 30228799 30228916 . + . Parent=gene1830 chr22 ENCODE CDS 30228825 30228916 . + 0 Parent=gene1830 chr22 ENCODE exon 30267401 30267511 . + . Parent=gene1830 chr22 ENCODE CDS 30267401 30267511 . + 1 Parent=gene1830 chr22 ENCODE exon 30270794 30270888 . + . Parent=gene1830 chr22 ENCODE CDS 30270794 30270888 . + 1 Parent=gene1830 chr22 ENCODE exon 30277482 30277599 . + . Parent=gene1830 chr22 ENCODE CDS 30277482 30277599 . + 2 Parent=gene1830 chr22 ENCODE exon 30281830 30281932 . + . Parent=gene1830 chr22 ENCODE CDS 30281830 30281932 . + 1 Parent=gene1830 chr22 ENCODE exon 30293598 30293754 . + . Parent=gene1830 chr22 ENCODE CDS 30293598 30293754 . + 0 Parent=gene1830 chr22 ENCODE exon 30295771 30295932 . + . Parent=gene1830 chr22 ENCODE CDS 30295771 30295932 . + 2 Parent=gene1830 chr22 ENCODE exon 30298922 30298992 . + . Parent=gene1830 chr22 ENCODE CDS 30298922 30298992 . + 2 Parent=gene1830 chr22 ENCODE exon 30300812 30300904 . + . Parent=gene1830 chr22 ENCODE CDS 30300812 30300904 . + 0 Parent=gene1830 chr22 ENCODE exon 30304415 30304512 . + . Parent=gene1830 chr22 ENCODE CDS 30304415 30304512 . + 0 Parent=gene1830 chr22 ENCODE exon 30305608 30305674 . + . Parent=gene1830 chr22 ENCODE CDS 30305608 30305674 . + 1 Parent=gene1830 chr22 ENCODE exon 30309987 30310117 . + . Parent=gene1830 chr22 ENCODE CDS 30309987 30310117 . + 0 Parent=gene1830 chr22 ENCODE exon 30322752 30322833 . + . Parent=gene1830 chr22 ENCODE CDS 30322752 30322833 . + 1 Parent=gene1830 chr22 ENCODE exon 30323147 30323325 . + . Parent=gene1830 chr22 ENCODE CDS 30323147 30323325 . + 0 Parent=gene1830 chr22 ENCODE exon 30324284 30324359 . + . Parent=gene1830 chr22 ENCODE CDS 30324284 30324359 . + 1 Parent=gene1830 chr22 ENCODE exon 30324849 30324944 . + . Parent=gene1830 chr22 ENCODE CDS 30324849 30324944 . + 0 Parent=gene1830 chr22 ENCODE exon 30325409 30325485 . + . Parent=gene1830 chr22 ENCODE CDS 30325409 30325485 . + 0 Parent=gene1830 chr22 ENCODE exon 30326868 30326970 . + . Parent=gene1830 chr22 ENCODE CDS 30326868 30326970 . + 1 Parent=gene1830 chr22 ENCODE exon 30328477 30328573 . + . Parent=gene1830 chr22 ENCODE CDS 30328477 30328573 . + 0 Parent=gene1830 chr22 ENCODE exon 30331683 30331843 . + . Parent=gene1830 chr22 ENCODE CDS 30331683 30331843 . + 2 Parent=gene1830 chr22 ENCODE exon 30332306 30332380 . + . Parent=gene1830 chr22 ENCODE CDS 30332306 30332380 . + 0 Parent=gene1830 chr22 ENCODE exon 30333682 30333756 . + . Parent=gene1830 chr22 ENCODE CDS 30333682 30333756 . + 0 Parent=gene1830 chr22 ENCODE exon 30333894 30334070 . + . Parent=gene1830 chr22 ENCODE CDS 30333894 30334070 . + 0 Parent=gene1830 chr22 ENCODE exon 30334142 30334395 . + . Parent=gene1830 chr22 ENCODE CDS 30334142 30334395 . + 0 Parent=gene1830 chr22 ENCODE exon 30335329 30335400 . + . Parent=gene1830 chr22 ENCODE CDS 30335329 30335400 . + 1 Parent=gene1830 chr22 ENCODE exon 30335588 30335819 . + . Parent=gene1830 chr22 ENCODE CDS 30335588 30335819 . + 1 Parent=gene1830 chr22 ENCODE exon 30337285 30337417 . + . Parent=gene1830 chr22 ENCODE CDS 30337285 30337417 . + 0 Parent=gene1830 chr22 ENCODE exon 30337540 30337618 . + . Parent=gene1830 chr22 ENCODE CDS 30337540 30337618 . + 2 Parent=gene1830 chr22 ENCODE exon 30338655 30338766 . + . Parent=gene1830 chr22 ENCODE CDS 30338655 30338766 . + 1 Parent=gene1830 chr22 ENCODE CDS 30338854 30338958 . + 0 Parent=gene1830 chr22 ENCODE exon 30338854 30339088 . + . Parent=gene1830 ### chr22 ENCODE gene 30217098 30249375 . + . ID=gene1831;Name=RP5-858B16.1-015;name2=SFI1 chr22 ENCODE exon 30217098 30217177 . + . Parent=gene1831 chr22 ENCODE exon 30217788 30217888 . + . Parent=gene1831 chr22 ENCODE exon 30228795 30228916 . + . Parent=gene1831 chr22 ENCODE CDS 30228825 30228916 . + 0 Parent=gene1831 chr22 ENCODE exon 30249230 30249375 . + . Parent=gene1831 chr22 ENCODE CDS 30249230 30249375 . + 1 Parent=gene1831 ### chr22 ENCODE gene 30217123 30339088 . + . ID=gene1832;Name=RP5-858B16.1-002;name2=SFI1 chr22 ENCODE exon 30217123 30217177 . + . Parent=gene1832 chr22 ENCODE exon 30228795 30228916 . + . Parent=gene1832 chr22 ENCODE exon 30249230 30249403 . + . Parent=gene1832 chr22 ENCODE exon 30251598 30251669 . + . Parent=gene1832 chr22 ENCODE exon 30267401 30267511 . + . Parent=gene1832 chr22 ENCODE exon 30270794 30270888 . + . Parent=gene1832 chr22 ENCODE exon 30277482 30277599 . + . Parent=gene1832 chr22 ENCODE exon 30281830 30281932 . + . Parent=gene1832 chr22 ENCODE exon 30293598 30293754 . + . Parent=gene1832 chr22 ENCODE exon 30295771 30295932 . + . Parent=gene1832 chr22 ENCODE exon 30298922 30298992 . + . Parent=gene1832 chr22 ENCODE exon 30300812 30300904 . + . Parent=gene1832 chr22 ENCODE exon 30304415 30304512 . + . Parent=gene1832 chr22 ENCODE exon 30305608 30305674 . + . Parent=gene1832 chr22 ENCODE exon 30309987 30310117 . + . Parent=gene1832 chr22 ENCODE exon 30322752 30322833 . + . Parent=gene1832 chr22 ENCODE exon 30323147 30323325 . + . Parent=gene1832 chr22 ENCODE exon 30324849 30324944 . + . Parent=gene1832 chr22 ENCODE exon 30325409 30326970 . + . Parent=gene1832 chr22 ENCODE exon 30328477 30328573 . + . Parent=gene1832 chr22 ENCODE exon 30331683 30331843 . + . Parent=gene1832 chr22 ENCODE exon 30332306 30332380 . + . Parent=gene1832 chr22 ENCODE exon 30333682 30333756 . + . Parent=gene1832 chr22 ENCODE exon 30333894 30334070 . + . Parent=gene1832 chr22 ENCODE exon 30334142 30334395 . + . Parent=gene1832 chr22 ENCODE exon 30335329 30335400 . + . Parent=gene1832 chr22 ENCODE exon 30335588 30335819 . + . Parent=gene1832 chr22 ENCODE exon 30337285 30337417 . + . Parent=gene1832 chr22 ENCODE exon 30337540 30337618 . + . Parent=gene1832 chr22 ENCODE exon 30338655 30338766 . + . Parent=gene1832 chr22 ENCODE exon 30338854 30339088 . + . Parent=gene1832 ### chr22 ENCODE gene 30249360 30271217 . + . ID=gene1833;Name=RP5-858B16.1-007;name2=SFI1 chr22 ENCODE exon 30249360 30249403 . + . Parent=gene1833 chr22 ENCODE exon 30251598 30251669 . + . Parent=gene1833 chr22 ENCODE exon 30267401 30267511 . + . Parent=gene1833 chr22 ENCODE exon 30270794 30271217 . + . Parent=gene1833 ### chr22 ENCODE gene 30293303 30304474 . + . ID=gene1834;Name=RP5-858B16.1-018;name2=SFI1 chr22 ENCODE exon 30293303 30293754 . + . Parent=gene1834 chr22 ENCODE exon 30295771 30295932 . + . Parent=gene1834 chr22 ENCODE exon 30298922 30298992 . + . Parent=gene1834 chr22 ENCODE exon 30304415 30304474 . + . Parent=gene1834 ### chr22 ENCODE gene 30293517 30304417 . + . ID=gene1835;Name=RP5-858B16.1-019;name2=SFI1 chr22 ENCODE exon 30293517 30293754 . + . Parent=gene1835 chr22 ENCODE exon 30295771 30295932 . + . Parent=gene1835 chr22 ENCODE exon 30298922 30298992 . + . Parent=gene1835 chr22 ENCODE exon 30300812 30300904 . + . Parent=gene1835 chr22 ENCODE exon 30304415 30304417 . + . Parent=gene1835 ### chr22 ENCODE gene 30293714 30339087 . + . ID=gene1836;Name=RP5-858B16.1-003;name2=SFI1 chr22 ENCODE exon 30293714 30293754 . + . Parent=gene1836 chr22 ENCODE exon 30295771 30295932 . + . Parent=gene1836 chr22 ENCODE exon 30298922 30298992 . + . Parent=gene1836 chr22 ENCODE exon 30300812 30300904 . + . Parent=gene1836 chr22 ENCODE exon 30304415 30304512 . + . Parent=gene1836 chr22 ENCODE exon 30305608 30305674 . + . Parent=gene1836 chr22 ENCODE exon 30309987 30310117 . + . Parent=gene1836 chr22 ENCODE exon 30322752 30322833 . + . Parent=gene1836 chr22 ENCODE exon 30323147 30323325 . + . Parent=gene1836 chr22 ENCODE exon 30328477 30328573 . + . Parent=gene1836 chr22 ENCODE exon 30331683 30331843 . + . Parent=gene1836 chr22 ENCODE exon 30332306 30332380 . + . Parent=gene1836 chr22 ENCODE exon 30333682 30333756 . + . Parent=gene1836 chr22 ENCODE exon 30333894 30334070 . + . Parent=gene1836 chr22 ENCODE exon 30334142 30334395 . + . Parent=gene1836 chr22 ENCODE exon 30335329 30335400 . + . Parent=gene1836 chr22 ENCODE exon 30335588 30335819 . + . Parent=gene1836 chr22 ENCODE exon 30337285 30337417 . + . Parent=gene1836 chr22 ENCODE exon 30337540 30337618 . + . Parent=gene1836 chr22 ENCODE exon 30338655 30338766 . + . Parent=gene1836 chr22 ENCODE exon 30338854 30339087 . + . Parent=gene1836 ### chr22 ENCODE gene 30298488 30305666 . + . ID=gene1837;Name=RP5-858B16.1-020;name2=SFI1 chr22 ENCODE exon 30298488 30298992 . + . Parent=gene1837 chr22 ENCODE exon 30304415 30304512 . + . Parent=gene1837 chr22 ENCODE exon 30305608 30305666 . + . Parent=gene1837 ### chr22 ENCODE gene 30300628 30304509 . + . ID=gene1838;name2=SFI1;Name=RP5-858B16.1-008 chr22 ENCODE exon 30300628 30300904 . + . Parent=gene1838 chr22 ENCODE exon 30304415 30304509 . + . Parent=gene1838 ### chr22 ENCODE gene 30304446 30308452 . + . ID=gene1839;Name=RP5-858B16.1-009;name2=SFI1 chr22 ENCODE exon 30304446 30304512 . + . Parent=gene1839 chr22 ENCODE exon 30305608 30305674 . + . Parent=gene1839 chr22 ENCODE exon 30307868 30308452 . + . Parent=gene1839 ### chr22 ENCODE gene 30324854 30327266 . + . ID=gene1840;Name=RP5-858B16.1-010;name2=SFI1 chr22 ENCODE exon 30324854 30324944 . + . Parent=gene1840 chr22 ENCODE exon 30325409 30325485 . + . Parent=gene1840 chr22 ENCODE exon 30326868 30327266 . + . Parent=gene1840 ### chr22 ENCODE gene 30325109 30332309 . + . ID=gene1841;Name=RP5-858B16.1-021;name2=SFI1 chr22 ENCODE exon 30325109 30325211 . + . Parent=gene1841 chr22 ENCODE exon 30325409 30325485 . + . Parent=gene1841 chr22 ENCODE exon 30326868 30326970 . + . Parent=gene1841 chr22 ENCODE exon 30328477 30328573 . + . Parent=gene1841 chr22 ENCODE exon 30331683 30331843 . + . Parent=gene1841 chr22 ENCODE exon 30332306 30332309 . + . Parent=gene1841 ### chr22 ENCODE gene 30328191 30332341 . + . ID=gene1842;Name=RP5-858B16.1-022;name2=SFI1 chr22 ENCODE exon 30328191 30328573 . + . Parent=gene1842 chr22 ENCODE exon 30331683 30331843 . + . Parent=gene1842 chr22 ENCODE exon 30332306 30332341 . + . Parent=gene1842 ### chr22 ENCODE gene 30332306 30332982 . + . ID=gene1843;Name=RP5-858B16.1-011;name2=SFI1 chr22 ENCODE exon 30332306 30332380 . + . Parent=gene1843 chr22 ENCODE exon 30332539 30332982 . + . Parent=gene1843 ### chr22 ENCODE gene 30333313 30334255 . + . ID=gene1844;Name=RP5-858B16.1-012;name2=SFI1 chr22 ENCODE exon 30333313 30333756 . + . Parent=gene1844 chr22 ENCODE exon 30333894 30334070 . + . Parent=gene1844 chr22 ENCODE exon 30334142 30334255 . + . Parent=gene1844 ### chr22 ENCODE gene 30334375 30339088 . + . ID=gene1845;Name=RP5-858B16.1-013;name2=SFI1 chr22 ENCODE exon 30334375 30334395 . + . Parent=gene1845 chr22 ENCODE exon 30335329 30335400 . + . Parent=gene1845 chr22 ENCODE exon 30335588 30335819 . + . Parent=gene1845 chr22 ENCODE exon 30337285 30337417 . + . Parent=gene1845 chr22 ENCODE exon 30338752 30338766 . + . Parent=gene1845 chr22 ENCODE exon 30338854 30339088 . + . Parent=gene1845 ### chr22 ENCODE gene 30334707 30339088 . + . ID=gene1846;Name=RP5-858B16.1-004;name2=SFI1 chr22 ENCODE exon 30334707 30335400 . + . Parent=gene1846 chr22 ENCODE exon 30335588 30335819 . + . Parent=gene1846 chr22 ENCODE exon 30337285 30337417 . + . Parent=gene1846 chr22 ENCODE exon 30337540 30337618 . + . Parent=gene1846 chr22 ENCODE exon 30338655 30338766 . + . Parent=gene1846 chr22 ENCODE exon 30338854 30339088 . + . Parent=gene1846 ### chr22 ENCODE gene 30334911 30339087 . + . ID=gene1847;Name=RP5-858B16.1-006;name2=SFI1 chr22 ENCODE exon 30334911 30337417 . + . Parent=gene1847 chr22 ENCODE exon 30337540 30337618 . + . Parent=gene1847 chr22 ENCODE exon 30338655 30339087 . + . Parent=gene1847 ### chr22 ENCODE gene 30334926 30339088 . + . ID=gene1848;Name=RP5-858B16.1-005;name2=SFI1 chr22 ENCODE exon 30334926 30335819 . + . Parent=gene1848 chr22 ENCODE exon 30337285 30337417 . + . Parent=gene1848 chr22 ENCODE exon 30337540 30337618 . + . Parent=gene1848 chr22 ENCODE exon 30338655 30338766 . + . Parent=gene1848 chr22 ENCODE exon 30338854 30339088 . + . Parent=gene1848 ### chr22 ENCODE gene 30339031 30348761 . - . ID=gene1849;Name=RP5-858B16.2-007;name2=PISD chr22 ENCODE exon 30339031 30340376 . - . Parent=gene1849 chr22 ENCODE CDS 30340152 30340376 . - 0 Parent=gene1849 chr22 ENCODE exon 30341093 30341253 . - . Parent=gene1849 chr22 ENCODE CDS 30341093 30341253 . - 2 Parent=gene1849 chr22 ENCODE exon 30341536 30341682 . - . Parent=gene1849 chr22 ENCODE CDS 30341536 30341682 . - 2 Parent=gene1849 chr22 ENCODE exon 30341874 30342012 . - . Parent=gene1849 chr22 ENCODE CDS 30341874 30342012 . - 0 Parent=gene1849 chr22 ENCODE exon 30342189 30342425 . - . Parent=gene1849 chr22 ENCODE CDS 30342189 30342425 . - 0 Parent=gene1849 chr22 ENCODE exon 30344224 30344389 . - . Parent=gene1849 chr22 ENCODE CDS 30344224 30344389 . - 1 Parent=gene1849 chr22 ENCODE CDS 30346303 30346355 . - 0 Parent=gene1849 chr22 ENCODE exon 30346303 30346556 . - . Parent=gene1849 chr22 ENCODE exon 30348543 30348761 . - . Parent=gene1849 ### chr22 ENCODE gene 30339031 30382755 . - . ID=gene1850;Name=RP5-858B16.2-002;name2=PISD chr22 ENCODE exon 30339031 30340376 . - . Parent=gene1850 chr22 ENCODE exon 30341093 30341253 . - . Parent=gene1850 chr22 ENCODE exon 30341536 30341682 . - . Parent=gene1850 chr22 ENCODE exon 30341874 30342425 . - . Parent=gene1850 chr22 ENCODE exon 30368641 30368816 . - . Parent=gene1850 chr22 ENCODE exon 30371239 30371318 . - . Parent=gene1850 chr22 ENCODE exon 30382684 30382755 . - . Parent=gene1850 ### chr22 ENCODE gene 30339099 30351402 . - . ID=gene1851;Name=RP5-858B16.2-005;name2=PISD chr22 ENCODE exon 30339099 30340376 . - . Parent=gene1851 chr22 ENCODE exon 30341093 30341253 . - . Parent=gene1851 chr22 ENCODE exon 30341536 30342012 . - . Parent=gene1851 chr22 ENCODE exon 30342189 30342425 . - . Parent=gene1851 chr22 ENCODE exon 30344224 30344389 . - . Parent=gene1851 chr22 ENCODE exon 30351344 30351402 . - . Parent=gene1851 ### chr22 ENCODE gene 30339154 30351371 . - . ID=gene1852;Name=RP5-858B16.2-006;name2=PISD chr22 ENCODE exon 30339154 30340376 . - . Parent=gene1852 chr22 ENCODE CDS 30340330 30340376 . - 2 Parent=gene1852 chr22 ENCODE exon 30341536 30341682 . - . Parent=gene1852 chr22 ENCODE CDS 30341536 30341682 . - 2 Parent=gene1852 chr22 ENCODE exon 30341874 30342012 . - . Parent=gene1852 chr22 ENCODE CDS 30341874 30342012 . - 0 Parent=gene1852 chr22 ENCODE exon 30342189 30342425 . - . Parent=gene1852 chr22 ENCODE CDS 30342189 30342425 . - 0 Parent=gene1852 chr22 ENCODE exon 30344224 30344389 . - . Parent=gene1852 chr22 ENCODE CDS 30344224 30344389 . - 1 Parent=gene1852 chr22 ENCODE CDS 30346303 30346355 . - 0 Parent=gene1852 chr22 ENCODE exon 30346303 30346556 . - . Parent=gene1852 chr22 ENCODE exon 30351344 30351371 . - . Parent=gene1852 ### chr22 ENCODE gene 30339433 30346557 . - . ID=gene1853;Name=RP5-858B16.2-008;name2=PISD chr22 ENCODE exon 30339433 30340376 . - . Parent=gene1853 chr22 ENCODE exon 30341093 30341253 . - . Parent=gene1853 chr22 ENCODE exon 30341536 30341700 . - . Parent=gene1853 chr22 ENCODE exon 30346408 30346557 . - . Parent=gene1853 ### chr22 ENCODE gene 30339517 30382720 . - . ID=gene1854;Name=RP5-858B16.2-004;name2=PISD chr22 ENCODE exon 30339517 30340376 . - . Parent=gene1854 chr22 ENCODE CDS 30340152 30340376 . - 1 Parent=gene1854 chr22 ENCODE exon 30341093 30341139 . - . Parent=gene1854 chr22 ENCODE CDS 30341093 30341139 . - 0 Parent=gene1854 chr22 ENCODE exon 30341536 30341682 . - . Parent=gene1854 chr22 ENCODE CDS 30341536 30341682 . - 0 Parent=gene1854 chr22 ENCODE exon 30341874 30342012 . - . Parent=gene1854 chr22 ENCODE CDS 30341874 30342012 . - 1 Parent=gene1854 chr22 ENCODE exon 30342189 30342425 . - . Parent=gene1854 chr22 ENCODE CDS 30342189 30342425 . - 1 Parent=gene1854 chr22 ENCODE exon 30368641 30368816 . - . Parent=gene1854 chr22 ENCODE CDS 30368641 30368816 . - 0 Parent=gene1854 chr22 ENCODE exon 30371239 30371318 . - . Parent=gene1854 chr22 ENCODE CDS 30371239 30371318 . - 2 Parent=gene1854 chr22 ENCODE exon 30382684 30382720 . - . Parent=gene1854 chr22 ENCODE CDS 30382684 30382720 . - 0 Parent=gene1854 ### chr22 ENCODE gene 30339643 30382972 . - . ID=gene1855;name2=PISD;Name=RP5-858B16.2-001 chr22 ENCODE exon 30339643 30340376 . - . Parent=gene1855 chr22 ENCODE CDS 30340152 30340376 . - 0 Parent=gene1855 chr22 ENCODE exon 30341093 30341253 . - . Parent=gene1855 chr22 ENCODE CDS 30341093 30341253 . - 2 Parent=gene1855 chr22 ENCODE exon 30341536 30341682 . - . Parent=gene1855 chr22 ENCODE CDS 30341536 30341682 . - 2 Parent=gene1855 chr22 ENCODE exon 30341874 30342012 . - . Parent=gene1855 chr22 ENCODE CDS 30341874 30342012 . - 0 Parent=gene1855 chr22 ENCODE exon 30342189 30342425 . - . Parent=gene1855 chr22 ENCODE CDS 30342189 30342425 . - 0 Parent=gene1855 chr22 ENCODE exon 30368641 30368816 . - . Parent=gene1855 chr22 ENCODE CDS 30368641 30368816 . - 2 Parent=gene1855 chr22 ENCODE exon 30371239 30371318 . - . Parent=gene1855 chr22 ENCODE CDS 30371239 30371318 . - 1 Parent=gene1855 chr22 ENCODE CDS 30382684 30382748 . - 0 Parent=gene1855 chr22 ENCODE exon 30382684 30382972 . - . Parent=gene1855 ### chr22 ENCODE gene 30339984 30382743 . - . ID=gene1856;Name=RP5-858B16.2-003;name2=PISD chr22 ENCODE exon 30339984 30340376 . - . Parent=gene1856 chr22 ENCODE exon 30341093 30341253 . - . Parent=gene1856 chr22 ENCODE exon 30341536 30342425 . - . Parent=gene1856 chr22 ENCODE exon 30368641 30368816 . - . Parent=gene1856 chr22 ENCODE exon 30371239 30371318 . - . Parent=gene1856 chr22 ENCODE exon 30382684 30382743 . - . Parent=gene1856 ### chr22 ENCODE gene 30341093 30346326 . - . ID=gene1857;Name=RP5-858B16.2-015;name2=PISD chr22 ENCODE exon 30341093 30341253 . - . Parent=gene1857 chr22 ENCODE exon 30341536 30341682 . - . Parent=gene1857 chr22 ENCODE exon 30341874 30342012 . - . Parent=gene1857 chr22 ENCODE exon 30342189 30342425 . - . Parent=gene1857 chr22 ENCODE exon 30344224 30344389 . - . Parent=gene1857 chr22 ENCODE exon 30346121 30346326 . - . Parent=gene1857 ### chr22 ENCODE gene 30341118 30358938 . - . ID=gene1858;Name=RP5-858B16.2-011;name2=PISD chr22 ENCODE exon 30341118 30341253 . - . Parent=gene1858 chr22 ENCODE exon 30341536 30341682 . - . Parent=gene1858 chr22 ENCODE exon 30341874 30342012 . - . Parent=gene1858 chr22 ENCODE exon 30342189 30342425 . - . Parent=gene1858 chr22 ENCODE exon 30358906 30358938 . - . Parent=gene1858 ### chr22 ENCODE gene 30341594 30349522 . - . ID=gene1859;Name=RP5-858B16.2-012;name2=PISD chr22 ENCODE exon 30341594 30341682 . - . Parent=gene1859 chr22 ENCODE CDS 30341594 30341682 . - 2 Parent=gene1859 chr22 ENCODE exon 30341874 30342012 . - . Parent=gene1859 chr22 ENCODE CDS 30341874 30342012 . - 0 Parent=gene1859 chr22 ENCODE exon 30342189 30342425 . - . Parent=gene1859 chr22 ENCODE CDS 30342189 30342425 . - 0 Parent=gene1859 chr22 ENCODE exon 30344224 30344389 . - . Parent=gene1859 chr22 ENCODE CDS 30344224 30344389 . - 1 Parent=gene1859 chr22 ENCODE CDS 30346303 30346355 . - 0 Parent=gene1859 chr22 ENCODE exon 30346303 30346556 . - . Parent=gene1859 chr22 ENCODE exon 30349393 30349522 . - . Parent=gene1859 ### chr22 ENCODE gene 30342402 30346834 . - . ID=gene1860;Name=RP5-858B16.2-014;name2=PISD chr22 ENCODE exon 30342402 30342425 . - . Parent=gene1860 chr22 ENCODE CDS 30342402 30342425 . - 0 Parent=gene1860 chr22 ENCODE exon 30344224 30344389 . - . Parent=gene1860 chr22 ENCODE CDS 30344224 30344389 . - 1 Parent=gene1860 chr22 ENCODE CDS 30346303 30346355 . - 0 Parent=gene1860 chr22 ENCODE exon 30346303 30346834 . - . Parent=gene1860 ### chr22 ENCODE gene 30344224 30358945 . - . ID=gene1861;Name=RP5-858B16.2-010;name2=PISD chr22 ENCODE exon 30344224 30344389 . - . Parent=gene1861 chr22 ENCODE CDS 30344224 30344389 . - 1 Parent=gene1861 chr22 ENCODE CDS 30346303 30346355 . - 0 Parent=gene1861 chr22 ENCODE exon 30346303 30346556 . - . Parent=gene1861 chr22 ENCODE exon 30358906 30358945 . - . Parent=gene1861 ### chr22 ENCODE gene 30344224 30358985 . - . ID=gene1862;Name=RP5-858B16.2-009;name2=PISD chr22 ENCODE exon 30344224 30344389 . - . Parent=gene1862 chr22 ENCODE CDS 30344224 30344389 . - 1 Parent=gene1862 chr22 ENCODE CDS 30346303 30346355 . - 0 Parent=gene1862 chr22 ENCODE exon 30346303 30346556 . - . Parent=gene1862 chr22 ENCODE exon 30352723 30352831 . - . Parent=gene1862 chr22 ENCODE exon 30358906 30358985 . - . Parent=gene1862 ### chr22 ENCODE gene 30346362 30350546 . - . ID=gene1863;Name=RP5-858B16.2-013;name2=PISD chr22 ENCODE exon 30346362 30346556 . - . Parent=gene1863 chr22 ENCODE exon 30348543 30348750 . - . Parent=gene1863 chr22 ENCODE exon 30349393 30349521 . - . Parent=gene1863 chr22 ENCODE exon 30350242 30350546 . - . Parent=gene1863 ### chr22 ENCODE gene 30396796 30433285 . - . ID=gene1864;Name=RP4-694E4.2-003;name2=C22orf30 chr22 ENCODE exon 30396796 30397558 . - . Parent=gene1864 chr22 ENCODE CDS 30397288 30397558 . - 0 Parent=gene1864 chr22 ENCODE exon 30408696 30408767 . - . Parent=gene1864 chr22 ENCODE CDS 30408696 30408767 . - 0 Parent=gene1864 chr22 ENCODE exon 30422196 30422302 . - . Parent=gene1864 chr22 ENCODE CDS 30422196 30422302 . - 2 Parent=gene1864 chr22 ENCODE exon 30424090 30424261 . - . Parent=gene1864 chr22 ENCODE CDS 30424090 30424261 . - 0 Parent=gene1864 chr22 ENCODE exon 30425195 30425266 . - . Parent=gene1864 chr22 ENCODE CDS 30425195 30425266 . - 0 Parent=gene1864 chr22 ENCODE exon 30432623 30433285 . - . Parent=gene1864 chr22 ENCODE CDS 30432623 30433285 . - 0 Parent=gene1864 ### chr22 ENCODE gene 30401887 30470671 . - . ID=gene1865;Name=RP4-694E4.2-001;name2=C22orf30 chr22 ENCODE exon 30401887 30406343 . - . Parent=gene1865 chr22 ENCODE CDS 30406067 30406343 . - 1 Parent=gene1865 chr22 ENCODE exon 30408696 30408767 . - . Parent=gene1865 chr22 ENCODE CDS 30408696 30408767 . - 1 Parent=gene1865 chr22 ENCODE exon 30422196 30422302 . - . Parent=gene1865 chr22 ENCODE CDS 30422196 30422302 . - 0 Parent=gene1865 chr22 ENCODE exon 30424090 30424261 . - . Parent=gene1865 chr22 ENCODE CDS 30424090 30424261 . - 1 Parent=gene1865 chr22 ENCODE exon 30425195 30425266 . - . Parent=gene1865 chr22 ENCODE CDS 30425195 30425266 . - 1 Parent=gene1865 chr22 ENCODE exon 30432623 30437831 . - . Parent=gene1865 chr22 ENCODE CDS 30432623 30437831 . - 2 Parent=gene1865 chr22 ENCODE exon 30446078 30446150 . - . Parent=gene1865 chr22 ENCODE CDS 30446078 30446150 . - 0 Parent=gene1865 chr22 ENCODE CDS 30458927 30459400 . - 0 Parent=gene1865 chr22 ENCODE exon 30458927 30459451 . - . Parent=gene1865 chr22 ENCODE exon 30470533 30470671 . - . Parent=gene1865 ### chr22 ENCODE gene 30401890 30424258 . - . ID=gene1866;Name=RP4-694E4.2-004;name2=C22orf30 chr22 ENCODE exon 30401890 30402674 . - . Parent=gene1866 chr22 ENCODE exon 30404169 30406343 . - . Parent=gene1866 chr22 ENCODE exon 30408696 30408767 . - . Parent=gene1866 chr22 ENCODE exon 30422196 30422302 . - . Parent=gene1866 chr22 ENCODE exon 30424090 30424258 . - . Parent=gene1866 ### chr22 ENCODE gene 30405582 30434385 . - . ID=gene1867;Name=RP4-694E4.2-002;name2=C22orf30 chr22 ENCODE exon 30405582 30406343 . - . Parent=gene1867 chr22 ENCODE exon 30408696 30408767 . - . Parent=gene1867 chr22 ENCODE exon 30424090 30424261 . - . Parent=gene1867 chr22 ENCODE exon 30425195 30425266 . - . Parent=gene1867 chr22 ENCODE exon 30432623 30434385 . - . Parent=gene1867 ### chr22 ENCODE gene 30424984 30432887 . - . ID=gene1868;Name=RP4-694E4.2-006;name2=C22orf30 chr22 ENCODE exon 30424984 30425266 . - . Parent=gene1868 chr22 ENCODE exon 30432623 30432887 . - . Parent=gene1868 ### chr22 ENCODE gene 30437267 30470612 . - . ID=gene1869;Name=RP4-694E4.2-005;name2=C22orf30 chr22 ENCODE exon 30437267 30437831 . - . Parent=gene1869 chr22 ENCODE exon 30446078 30446150 . - . Parent=gene1869 chr22 ENCODE exon 30470533 30470612 . - . Parent=gene1869 ### chr22 ENCODE gene 30446084 30470680 . - . ID=gene1870;Name=RP4-694E4.2-007;name2=C22orf30 chr22 ENCODE exon 30446084 30446150 . - . Parent=gene1870 chr22 ENCODE CDS 30446084 30446150 . - 0 Parent=gene1870 chr22 ENCODE CDS 30458927 30459400 . - 0 Parent=gene1870 chr22 ENCODE exon 30458927 30459451 . - . Parent=gene1870 chr22 ENCODE exon 30470612 30470680 . - . Parent=gene1870 ### chr22 ENCODE gene 30474498 30479164 . + . ID=gene1871;Name=LL22NC03-113A11.1-012;name2=DEPDC5 chr22 ENCODE exon 30474498 30474536 . + . Parent=gene1871 chr22 ENCODE exon 30475402 30475519 . + . Parent=gene1871 chr22 ENCODE CDS 30475462 30475519 . + 0 Parent=gene1871 chr22 ENCODE exon 30479086 30479164 . + . Parent=gene1871 chr22 ENCODE CDS 30479086 30479164 . + 2 Parent=gene1871 ### chr22 ENCODE gene 30474510 30476051 . + . ID=gene1872;Name=LL22NC03-113A11.1-013;name2=DEPDC5 chr22 ENCODE exon 30474510 30474536 . + . Parent=gene1872 chr22 ENCODE exon 30475402 30476051 . + . Parent=gene1872 ### chr22 ENCODE gene 30474519 30498677 . + . ID=gene1873;Name=LL22NC03-113A11.1-014;name2=DEPDC5 chr22 ENCODE exon 30474519 30474536 . + . Parent=gene1873 chr22 ENCODE exon 30475402 30475519 . + . Parent=gene1873 chr22 ENCODE exon 30479067 30479173 . + . Parent=gene1873 chr22 ENCODE exon 30481196 30481242 . + . Parent=gene1873 chr22 ENCODE exon 30485515 30485600 . + . Parent=gene1873 chr22 ENCODE exon 30487125 30487208 . + . Parent=gene1873 chr22 ENCODE exon 30489354 30489403 . + . Parent=gene1873 chr22 ENCODE exon 30498639 30498677 . + . Parent=gene1873 ### chr22 ENCODE gene 30474609 30536528 . + . ID=gene1874;name2=DEPDC5;Name=LL22NC03-113A11.1-002 chr22 ENCODE exon 30474609 30474704 . + . Parent=gene1874 chr22 ENCODE exon 30475402 30475519 . + . Parent=gene1874 chr22 ENCODE CDS 30475462 30475519 . + 0 Parent=gene1874 chr22 ENCODE exon 30479086 30479173 . + . Parent=gene1874 chr22 ENCODE CDS 30479086 30479173 . + 2 Parent=gene1874 chr22 ENCODE exon 30481196 30481242 . + . Parent=gene1874 chr22 ENCODE CDS 30481196 30481242 . + 1 Parent=gene1874 chr22 ENCODE exon 30485515 30485600 . + . Parent=gene1874 chr22 ENCODE CDS 30485515 30485600 . + 2 Parent=gene1874 chr22 ENCODE exon 30487125 30487208 . + . Parent=gene1874 chr22 ENCODE CDS 30487125 30487208 . + 0 Parent=gene1874 chr22 ENCODE exon 30489354 30489403 . + . Parent=gene1874 chr22 ENCODE CDS 30489354 30489403 . + 0 Parent=gene1874 chr22 ENCODE exon 30498639 30498708 . + . Parent=gene1874 chr22 ENCODE CDS 30498639 30498708 . + 1 Parent=gene1874 chr22 ENCODE exon 30504447 30504525 . + . Parent=gene1874 chr22 ENCODE CDS 30504447 30504525 . + 0 Parent=gene1874 chr22 ENCODE exon 30505354 30505415 . + . Parent=gene1874 chr22 ENCODE CDS 30505354 30505415 . + 2 Parent=gene1874 chr22 ENCODE exon 30512573 30512642 . + . Parent=gene1874 chr22 ENCODE CDS 30512573 30512642 . + 0 Parent=gene1874 chr22 ENCODE exon 30513285 30513357 . + . Parent=gene1874 chr22 ENCODE CDS 30513285 30513357 . + 2 Parent=gene1874 chr22 ENCODE exon 30518140 30518243 . + . Parent=gene1874 chr22 ENCODE CDS 30518140 30518243 . + 1 Parent=gene1874 chr22 ENCODE exon 30519122 30519196 . + . Parent=gene1874 chr22 ENCODE CDS 30519122 30519196 . + 2 Parent=gene1874 chr22 ENCODE exon 30523244 30523378 . + . Parent=gene1874 chr22 ENCODE CDS 30523244 30523378 . + 2 Parent=gene1874 chr22 ENCODE exon 30524702 30524763 . + . Parent=gene1874 chr22 ENCODE CDS 30524702 30524763 . + 2 Parent=gene1874 chr22 ENCODE exon 30525382 30525455 . + . Parent=gene1874 chr22 ENCODE CDS 30525382 30525455 . + 0 Parent=gene1874 chr22 ENCODE exon 30526662 30526731 . + . Parent=gene1874 chr22 ENCODE CDS 30526662 30526731 . + 1 Parent=gene1874 chr22 ENCODE exon 30530151 30530187 . + . Parent=gene1874 chr22 ENCODE CDS 30530151 30530187 . + 0 Parent=gene1874 chr22 ENCODE exon 30531061 30531181 . + . Parent=gene1874 chr22 ENCODE CDS 30531061 30531181 . + 2 Parent=gene1874 chr22 ENCODE exon 30535532 30535752 . + . Parent=gene1874 chr22 ENCODE CDS 30535532 30535752 . + 1 Parent=gene1874 chr22 ENCODE CDS 30535956 30535969 . + 2 Parent=gene1874 chr22 ENCODE exon 30535956 30536528 . + . Parent=gene1874 ### chr22 ENCODE gene 30475392 30627545 . + . ID=gene1875;Name=LL22NC03-113A11.1-006;name2=DEPDC5 chr22 ENCODE exon 30475392 30475519 . + . Parent=gene1875 chr22 ENCODE CDS 30475462 30475519 . + 0 Parent=gene1875 chr22 ENCODE exon 30479086 30479173 . + . Parent=gene1875 chr22 ENCODE CDS 30479086 30479173 . + 2 Parent=gene1875 chr22 ENCODE exon 30481196 30481242 . + . Parent=gene1875 chr22 ENCODE CDS 30481196 30481242 . + 1 Parent=gene1875 chr22 ENCODE exon 30485515 30485600 . + . Parent=gene1875 chr22 ENCODE CDS 30485515 30485600 . + 2 Parent=gene1875 chr22 ENCODE exon 30487125 30487208 . + . Parent=gene1875 chr22 ENCODE CDS 30487125 30487208 . + 0 Parent=gene1875 chr22 ENCODE exon 30489354 30489403 . + . Parent=gene1875 chr22 ENCODE CDS 30489354 30489403 . + 0 Parent=gene1875 chr22 ENCODE exon 30498639 30498708 . + . Parent=gene1875 chr22 ENCODE CDS 30498639 30498708 . + 1 Parent=gene1875 chr22 ENCODE exon 30504447 30504525 . + . Parent=gene1875 chr22 ENCODE CDS 30504447 30504525 . + 0 Parent=gene1875 chr22 ENCODE exon 30505354 30505415 . + . Parent=gene1875 chr22 ENCODE CDS 30505354 30505415 . + 2 Parent=gene1875 chr22 ENCODE exon 30512573 30512642 . + . Parent=gene1875 chr22 ENCODE CDS 30512573 30512642 . + 0 Parent=gene1875 chr22 ENCODE exon 30513285 30513357 . + . Parent=gene1875 chr22 ENCODE CDS 30513285 30513357 . + 2 Parent=gene1875 chr22 ENCODE exon 30518140 30518243 . + . Parent=gene1875 chr22 ENCODE CDS 30518140 30518243 . + 1 Parent=gene1875 chr22 ENCODE exon 30519122 30519196 . + . Parent=gene1875 chr22 ENCODE CDS 30519122 30519196 . + 2 Parent=gene1875 chr22 ENCODE exon 30523244 30523378 . + . Parent=gene1875 chr22 ENCODE CDS 30523244 30523378 . + 2 Parent=gene1875 chr22 ENCODE exon 30524702 30524763 . + . Parent=gene1875 chr22 ENCODE CDS 30524702 30524763 . + 2 Parent=gene1875 chr22 ENCODE exon 30525382 30525455 . + . Parent=gene1875 chr22 ENCODE CDS 30525382 30525455 . + 0 Parent=gene1875 chr22 ENCODE exon 30526662 30526731 . + . Parent=gene1875 chr22 ENCODE CDS 30526662 30526731 . + 1 Parent=gene1875 chr22 ENCODE exon 30530151 30530187 . + . Parent=gene1875 chr22 ENCODE CDS 30530151 30530187 . + 0 Parent=gene1875 chr22 ENCODE exon 30531061 30531181 . + . Parent=gene1875 chr22 ENCODE CDS 30531061 30531181 . + 2 Parent=gene1875 chr22 ENCODE exon 30535532 30535752 . + . Parent=gene1875 chr22 ENCODE CDS 30535532 30535752 . + 1 Parent=gene1875 chr22 ENCODE exon 30539562 30539765 . + . Parent=gene1875 chr22 ENCODE CDS 30539562 30539765 . + 2 Parent=gene1875 chr22 ENCODE exon 30542042 30542177 . + . Parent=gene1875 chr22 ENCODE CDS 30542042 30542177 . + 2 Parent=gene1875 chr22 ENCODE exon 30543233 30543330 . + . Parent=gene1875 chr22 ENCODE CDS 30543233 30543330 . + 1 Parent=gene1875 chr22 ENCODE exon 30554455 30554520 . + . Parent=gene1875 chr22 ENCODE CDS 30554455 30554520 . + 2 Parent=gene1875 chr22 ENCODE exon 30557539 30557695 . + . Parent=gene1875 chr22 ENCODE CDS 30557539 30557695 . + 2 Parent=gene1875 chr22 ENCODE exon 30559225 30559385 . + . Parent=gene1875 chr22 ENCODE CDS 30559225 30559385 . + 1 Parent=gene1875 chr22 ENCODE exon 30563635 30563752 . + . Parent=gene1875 chr22 ENCODE CDS 30563635 30563752 . + 2 Parent=gene1875 chr22 ENCODE exon 30564185 30564352 . + . Parent=gene1875 chr22 ENCODE CDS 30564185 30564352 . + 1 Parent=gene1875 chr22 ENCODE exon 30565558 30565777 . + . Parent=gene1875 chr22 ENCODE CDS 30565558 30565777 . + 1 Parent=gene1875 chr22 ENCODE exon 30567374 30567507 . + . Parent=gene1875 chr22 ENCODE CDS 30567374 30567507 . + 0 Parent=gene1875 chr22 ENCODE exon 30577985 30578093 . + . Parent=gene1875 chr22 ENCODE CDS 30577985 30578093 . + 1 Parent=gene1875 chr22 ENCODE exon 30581908 30581973 . + . Parent=gene1875 chr22 ENCODE CDS 30581908 30581973 . + 0 Parent=gene1875 chr22 ENCODE exon 30591130 30591284 . + . Parent=gene1875 chr22 ENCODE CDS 30591130 30591284 . + 0 Parent=gene1875 chr22 ENCODE exon 30593795 30593872 . + . Parent=gene1875 chr22 ENCODE CDS 30593795 30593872 . + 1 Parent=gene1875 chr22 ENCODE exon 30594813 30594945 . + . Parent=gene1875 chr22 ENCODE CDS 30594813 30594945 . + 1 Parent=gene1875 chr22 ENCODE exon 30596697 30596805 . + . Parent=gene1875 chr22 ENCODE CDS 30596697 30596805 . + 0 Parent=gene1875 chr22 ENCODE exon 30600065 30600292 . + . Parent=gene1875 chr22 ENCODE CDS 30600065 30600292 . + 2 Parent=gene1875 chr22 ENCODE exon 30614122 30614291 . + . Parent=gene1875 chr22 ENCODE CDS 30614122 30614291 . + 2 Parent=gene1875 chr22 ENCODE exon 30618022 30618193 . + . Parent=gene1875 chr22 ENCODE CDS 30618022 30618193 . + 0 Parent=gene1875 chr22 ENCODE exon 30622282 30622342 . + . Parent=gene1875 chr22 ENCODE CDS 30622282 30622342 . + 2 Parent=gene1875 chr22 ENCODE exon 30626524 30626606 . + . Parent=gene1875 chr22 ENCODE CDS 30626524 30626606 . + 1 Parent=gene1875 chr22 ENCODE CDS 30626745 30627037 . + 2 Parent=gene1875 chr22 ENCODE exon 30626745 30627545 . + . Parent=gene1875 ### chr22 ENCODE gene 30475402 30627438 . + . ID=gene1876;Name=LL22NC03-113A11.1-004;name2=DEPDC5 chr22 ENCODE exon 30475402 30475519 . + . Parent=gene1876 chr22 ENCODE CDS 30475462 30475519 . + 0 Parent=gene1876 chr22 ENCODE exon 30479086 30479173 . + . Parent=gene1876 chr22 ENCODE CDS 30479086 30479173 . + 2 Parent=gene1876 chr22 ENCODE exon 30481196 30481242 . + . Parent=gene1876 chr22 ENCODE CDS 30481196 30481242 . + 1 Parent=gene1876 chr22 ENCODE exon 30485515 30485600 . + . Parent=gene1876 chr22 ENCODE CDS 30485515 30485600 . + 2 Parent=gene1876 chr22 ENCODE exon 30487125 30487208 . + . Parent=gene1876 chr22 ENCODE CDS 30487125 30487208 . + 0 Parent=gene1876 chr22 ENCODE exon 30489354 30489403 . + . Parent=gene1876 chr22 ENCODE CDS 30489354 30489403 . + 0 Parent=gene1876 chr22 ENCODE exon 30498639 30498708 . + . Parent=gene1876 chr22 ENCODE CDS 30498639 30498708 . + 1 Parent=gene1876 chr22 ENCODE exon 30504447 30504525 . + . Parent=gene1876 chr22 ENCODE CDS 30504447 30504525 . + 0 Parent=gene1876 chr22 ENCODE exon 30505354 30505415 . + . Parent=gene1876 chr22 ENCODE CDS 30505354 30505415 . + 2 Parent=gene1876 chr22 ENCODE exon 30512573 30512642 . + . Parent=gene1876 chr22 ENCODE CDS 30512573 30512642 . + 0 Parent=gene1876 chr22 ENCODE exon 30513285 30513357 . + . Parent=gene1876 chr22 ENCODE CDS 30513285 30513357 . + 2 Parent=gene1876 chr22 ENCODE exon 30518140 30518243 . + . Parent=gene1876 chr22 ENCODE CDS 30518140 30518243 . + 1 Parent=gene1876 chr22 ENCODE exon 30519122 30519196 . + . Parent=gene1876 chr22 ENCODE CDS 30519122 30519196 . + 2 Parent=gene1876 chr22 ENCODE exon 30523244 30523378 . + . Parent=gene1876 chr22 ENCODE CDS 30523244 30523378 . + 2 Parent=gene1876 chr22 ENCODE exon 30524702 30524763 . + . Parent=gene1876 chr22 ENCODE CDS 30524702 30524763 . + 2 Parent=gene1876 chr22 ENCODE exon 30525382 30525455 . + . Parent=gene1876 chr22 ENCODE CDS 30525382 30525455 . + 0 Parent=gene1876 chr22 ENCODE exon 30526662 30526731 . + . Parent=gene1876 chr22 ENCODE CDS 30526662 30526731 . + 1 Parent=gene1876 chr22 ENCODE exon 30530151 30530187 . + . Parent=gene1876 chr22 ENCODE CDS 30530151 30530187 . + 0 Parent=gene1876 chr22 ENCODE exon 30531061 30531181 . + . Parent=gene1876 chr22 ENCODE CDS 30531061 30531181 . + 2 Parent=gene1876 chr22 ENCODE exon 30535532 30535752 . + . Parent=gene1876 chr22 ENCODE CDS 30535532 30535752 . + 1 Parent=gene1876 chr22 ENCODE exon 30539562 30539765 . + . Parent=gene1876 chr22 ENCODE CDS 30539562 30539765 . + 2 Parent=gene1876 chr22 ENCODE exon 30542042 30542177 . + . Parent=gene1876 chr22 ENCODE CDS 30542042 30542177 . + 2 Parent=gene1876 chr22 ENCODE exon 30543233 30543330 . + . Parent=gene1876 chr22 ENCODE CDS 30543233 30543330 . + 1 Parent=gene1876 chr22 ENCODE exon 30554455 30554520 . + . Parent=gene1876 chr22 ENCODE CDS 30554455 30554520 . + 2 Parent=gene1876 chr22 ENCODE exon 30557512 30557695 . + . Parent=gene1876 chr22 ENCODE CDS 30557512 30557695 . + 2 Parent=gene1876 chr22 ENCODE exon 30559225 30559385 . + . Parent=gene1876 chr22 ENCODE CDS 30559225 30559385 . + 1 Parent=gene1876 chr22 ENCODE exon 30563635 30563752 . + . Parent=gene1876 chr22 ENCODE CDS 30563635 30563752 . + 2 Parent=gene1876 chr22 ENCODE exon 30564185 30564352 . + . Parent=gene1876 chr22 ENCODE CDS 30564185 30564352 . + 1 Parent=gene1876 chr22 ENCODE exon 30565558 30565777 . + . Parent=gene1876 chr22 ENCODE CDS 30565558 30565777 . + 1 Parent=gene1876 chr22 ENCODE exon 30567374 30567507 . + . Parent=gene1876 chr22 ENCODE CDS 30567374 30567507 . + 0 Parent=gene1876 chr22 ENCODE exon 30577985 30578093 . + . Parent=gene1876 chr22 ENCODE CDS 30577985 30578093 . + 1 Parent=gene1876 chr22 ENCODE exon 30581908 30581973 . + . Parent=gene1876 chr22 ENCODE CDS 30581908 30581973 . + 0 Parent=gene1876 chr22 ENCODE exon 30591130 30591284 . + . Parent=gene1876 chr22 ENCODE CDS 30591130 30591284 . + 0 Parent=gene1876 chr22 ENCODE exon 30593795 30593872 . + . Parent=gene1876 chr22 ENCODE CDS 30593795 30593872 . + 1 Parent=gene1876 chr22 ENCODE exon 30594813 30594945 . + . Parent=gene1876 chr22 ENCODE CDS 30594813 30594945 . + 1 Parent=gene1876 chr22 ENCODE exon 30596697 30596805 . + . Parent=gene1876 chr22 ENCODE CDS 30596697 30596805 . + 0 Parent=gene1876 chr22 ENCODE exon 30600065 30600292 . + . Parent=gene1876 chr22 ENCODE CDS 30600065 30600292 . + 2 Parent=gene1876 chr22 ENCODE exon 30614122 30614291 . + . Parent=gene1876 chr22 ENCODE CDS 30614122 30614291 . + 2 Parent=gene1876 chr22 ENCODE exon 30618022 30618193 . + . Parent=gene1876 chr22 ENCODE CDS 30618022 30618193 . + 0 Parent=gene1876 chr22 ENCODE exon 30626524 30626606 . + . Parent=gene1876 chr22 ENCODE CDS 30626524 30626606 . + 2 Parent=gene1876 chr22 ENCODE CDS 30626745 30626945 . + 0 Parent=gene1876 chr22 ENCODE exon 30626745 30627438 . + . Parent=gene1876 ### chr22 ENCODE gene 30475403 30627555 . + . ID=gene1877;Name=LL22NC03-113A11.1-001;name2=DEPDC5 chr22 ENCODE exon 30475403 30475519 . + . Parent=gene1877 chr22 ENCODE CDS 30475462 30475519 . + 0 Parent=gene1877 chr22 ENCODE exon 30479086 30479173 . + . Parent=gene1877 chr22 ENCODE CDS 30479086 30479173 . + 2 Parent=gene1877 chr22 ENCODE exon 30481196 30481242 . + . Parent=gene1877 chr22 ENCODE CDS 30481196 30481242 . + 1 Parent=gene1877 chr22 ENCODE exon 30485515 30485600 . + . Parent=gene1877 chr22 ENCODE CDS 30485515 30485600 . + 2 Parent=gene1877 chr22 ENCODE exon 30487125 30487208 . + . Parent=gene1877 chr22 ENCODE CDS 30487125 30487208 . + 0 Parent=gene1877 chr22 ENCODE exon 30489354 30489403 . + . Parent=gene1877 chr22 ENCODE CDS 30489354 30489403 . + 0 Parent=gene1877 chr22 ENCODE exon 30498639 30498708 . + . Parent=gene1877 chr22 ENCODE CDS 30498639 30498708 . + 1 Parent=gene1877 chr22 ENCODE exon 30504447 30504525 . + . Parent=gene1877 chr22 ENCODE CDS 30504447 30504525 . + 0 Parent=gene1877 chr22 ENCODE exon 30505354 30505415 . + . Parent=gene1877 chr22 ENCODE CDS 30505354 30505415 . + 2 Parent=gene1877 chr22 ENCODE exon 30512573 30512642 . + . Parent=gene1877 chr22 ENCODE CDS 30512573 30512642 . + 0 Parent=gene1877 chr22 ENCODE exon 30513285 30513357 . + . Parent=gene1877 chr22 ENCODE CDS 30513285 30513357 . + 2 Parent=gene1877 chr22 ENCODE exon 30518140 30518243 . + . Parent=gene1877 chr22 ENCODE CDS 30518140 30518243 . + 1 Parent=gene1877 chr22 ENCODE exon 30519122 30519196 . + . Parent=gene1877 chr22 ENCODE CDS 30519122 30519196 . + 2 Parent=gene1877 chr22 ENCODE exon 30523244 30523378 . + . Parent=gene1877 chr22 ENCODE CDS 30523244 30523378 . + 2 Parent=gene1877 chr22 ENCODE exon 30524702 30524763 . + . Parent=gene1877 chr22 ENCODE CDS 30524702 30524763 . + 2 Parent=gene1877 chr22 ENCODE exon 30525382 30525455 . + . Parent=gene1877 chr22 ENCODE CDS 30525382 30525455 . + 0 Parent=gene1877 chr22 ENCODE exon 30526662 30526731 . + . Parent=gene1877 chr22 ENCODE CDS 30526662 30526731 . + 1 Parent=gene1877 chr22 ENCODE exon 30530151 30530187 . + . Parent=gene1877 chr22 ENCODE CDS 30530151 30530187 . + 0 Parent=gene1877 chr22 ENCODE exon 30531061 30531181 . + . Parent=gene1877 chr22 ENCODE CDS 30531061 30531181 . + 2 Parent=gene1877 chr22 ENCODE exon 30535532 30535752 . + . Parent=gene1877 chr22 ENCODE CDS 30535532 30535752 . + 1 Parent=gene1877 chr22 ENCODE exon 30539562 30539765 . + . Parent=gene1877 chr22 ENCODE CDS 30539562 30539765 . + 2 Parent=gene1877 chr22 ENCODE exon 30542042 30542177 . + . Parent=gene1877 chr22 ENCODE CDS 30542042 30542177 . + 2 Parent=gene1877 chr22 ENCODE exon 30543233 30543330 . + . Parent=gene1877 chr22 ENCODE CDS 30543233 30543330 . + 1 Parent=gene1877 chr22 ENCODE exon 30554455 30554520 . + . Parent=gene1877 chr22 ENCODE CDS 30554455 30554520 . + 2 Parent=gene1877 chr22 ENCODE exon 30557539 30557695 . + . Parent=gene1877 chr22 ENCODE CDS 30557539 30557695 . + 2 Parent=gene1877 chr22 ENCODE exon 30559225 30559385 . + . Parent=gene1877 chr22 ENCODE CDS 30559225 30559385 . + 1 Parent=gene1877 chr22 ENCODE exon 30563635 30563752 . + . Parent=gene1877 chr22 ENCODE CDS 30563635 30563752 . + 2 Parent=gene1877 chr22 ENCODE exon 30564185 30564352 . + . Parent=gene1877 chr22 ENCODE CDS 30564185 30564352 . + 1 Parent=gene1877 chr22 ENCODE exon 30565558 30565777 . + . Parent=gene1877 chr22 ENCODE CDS 30565558 30565777 . + 1 Parent=gene1877 chr22 ENCODE exon 30567374 30567507 . + . Parent=gene1877 chr22 ENCODE CDS 30567374 30567507 . + 0 Parent=gene1877 chr22 ENCODE exon 30577985 30578093 . + . Parent=gene1877 chr22 ENCODE CDS 30577985 30578093 . + 1 Parent=gene1877 chr22 ENCODE exon 30591130 30591284 . + . Parent=gene1877 chr22 ENCODE CDS 30591130 30591284 . + 0 Parent=gene1877 chr22 ENCODE exon 30593795 30593872 . + . Parent=gene1877 chr22 ENCODE CDS 30593795 30593872 . + 1 Parent=gene1877 chr22 ENCODE exon 30594813 30594945 . + . Parent=gene1877 chr22 ENCODE CDS 30594813 30594945 . + 1 Parent=gene1877 chr22 ENCODE exon 30596697 30596805 . + . Parent=gene1877 chr22 ENCODE CDS 30596697 30596805 . + 0 Parent=gene1877 chr22 ENCODE exon 30600065 30600292 . + . Parent=gene1877 chr22 ENCODE CDS 30600065 30600292 . + 2 Parent=gene1877 chr22 ENCODE exon 30614122 30614291 . + . Parent=gene1877 chr22 ENCODE CDS 30614122 30614291 . + 2 Parent=gene1877 chr22 ENCODE exon 30618022 30618193 . + . Parent=gene1877 chr22 ENCODE CDS 30618022 30618193 . + 0 Parent=gene1877 chr22 ENCODE exon 30622282 30622342 . + . Parent=gene1877 chr22 ENCODE CDS 30622282 30622342 . + 2 Parent=gene1877 chr22 ENCODE exon 30626524 30626606 . + . Parent=gene1877 chr22 ENCODE CDS 30626524 30626606 . + 1 Parent=gene1877 chr22 ENCODE CDS 30626745 30627037 . + 2 Parent=gene1877 chr22 ENCODE exon 30626745 30627555 . + . Parent=gene1877 ### chr22 ENCODE gene 30489392 30504798 . + . ID=gene1878;Name=LL22NC03-113A11.1-007;name2=DEPDC5 chr22 ENCODE exon 30489392 30489403 . + . Parent=gene1878 chr22 ENCODE CDS 30489392 30489403 . + 0 Parent=gene1878 chr22 ENCODE exon 30498639 30498708 . + . Parent=gene1878 chr22 ENCODE CDS 30498639 30498708 . + 0 Parent=gene1878 chr22 ENCODE CDS 30504447 30504545 . + 2 Parent=gene1878 chr22 ENCODE exon 30504447 30504798 . + . Parent=gene1878 ### chr22 ENCODE gene 30505365 30523278 . + . ID=gene1879;Name=LL22NC03-113A11.1-008;name2=DEPDC5 chr22 ENCODE exon 30505365 30505647 . + . Parent=gene1879 chr22 ENCODE exon 30512573 30512642 . + . Parent=gene1879 chr22 ENCODE exon 30513285 30513357 . + . Parent=gene1879 chr22 ENCODE exon 30518140 30518243 . + . Parent=gene1879 chr22 ENCODE exon 30519122 30519196 . + . Parent=gene1879 chr22 ENCODE exon 30523244 30523278 . + . Parent=gene1879 ### chr22 ENCODE gene 30513227 30524759 . + . ID=gene1880;Name=LL22NC03-113A11.1-009;name2=DEPDC5 chr22 ENCODE exon 30513227 30513357 . + . Parent=gene1880 chr22 ENCODE exon 30518140 30518243 . + . Parent=gene1880 chr22 ENCODE exon 30519122 30519196 . + . Parent=gene1880 chr22 ENCODE exon 30523244 30523378 . + . Parent=gene1880 chr22 ENCODE exon 30524702 30524759 . + . Parent=gene1880 ### chr22 ENCODE gene 30539606 30627538 . + . ID=gene1881;Name=LL22NC03-113A11.1-003;name2=DEPDC5 chr22 ENCODE exon 30539606 30539765 . + . Parent=gene1881 chr22 ENCODE exon 30554455 30554520 . + . Parent=gene1881 chr22 ENCODE exon 30557512 30557695 . + . Parent=gene1881 chr22 ENCODE exon 30559225 30559385 . + . Parent=gene1881 chr22 ENCODE exon 30563635 30563752 . + . Parent=gene1881 chr22 ENCODE exon 30564185 30564352 . + . Parent=gene1881 chr22 ENCODE exon 30565558 30565777 . + . Parent=gene1881 chr22 ENCODE exon 30567374 30567507 . + . Parent=gene1881 chr22 ENCODE exon 30577985 30578093 . + . Parent=gene1881 chr22 ENCODE exon 30581908 30581973 . + . Parent=gene1881 chr22 ENCODE exon 30591130 30591284 . + . Parent=gene1881 chr22 ENCODE exon 30593795 30593872 . + . Parent=gene1881 chr22 ENCODE exon 30594813 30594945 . + . Parent=gene1881 chr22 ENCODE exon 30600065 30600292 . + . Parent=gene1881 chr22 ENCODE exon 30614122 30614291 . + . Parent=gene1881 chr22 ENCODE exon 30618022 30618193 . + . Parent=gene1881 chr22 ENCODE exon 30622282 30622342 . + . Parent=gene1881 chr22 ENCODE exon 30626524 30626606 . + . Parent=gene1881 chr22 ENCODE exon 30626745 30627538 . + . Parent=gene1881 ### chr22 ENCODE gene 30539704 30627549 . + . ID=gene1882;name2=DEPDC5;Name=LL22NC03-113A11.1-005 chr22 ENCODE exon 30539704 30539765 . + . Parent=gene1882 chr22 ENCODE CDS 30539704 30539765 . + 0 Parent=gene1882 chr22 ENCODE exon 30542042 30542177 . + . Parent=gene1882 chr22 ENCODE CDS 30542042 30542177 . + 1 Parent=gene1882 chr22 ENCODE exon 30543233 30543330 . + . Parent=gene1882 chr22 ENCODE CDS 30543233 30543330 . + 0 Parent=gene1882 chr22 ENCODE exon 30554455 30554520 . + . Parent=gene1882 chr22 ENCODE CDS 30554455 30554520 . + 1 Parent=gene1882 chr22 ENCODE exon 30557512 30557695 . + . Parent=gene1882 chr22 ENCODE CDS 30557512 30557695 . + 1 Parent=gene1882 chr22 ENCODE exon 30559225 30559385 . + . Parent=gene1882 chr22 ENCODE CDS 30559225 30559385 . + 0 Parent=gene1882 chr22 ENCODE exon 30563635 30563752 . + . Parent=gene1882 chr22 ENCODE CDS 30563635 30563752 . + 1 Parent=gene1882 chr22 ENCODE exon 30564185 30564352 . + . Parent=gene1882 chr22 ENCODE CDS 30564185 30564352 . + 0 Parent=gene1882 chr22 ENCODE exon 30565558 30565777 . + . Parent=gene1882 chr22 ENCODE CDS 30565558 30565777 . + 0 Parent=gene1882 chr22 ENCODE exon 30567374 30567507 . + . Parent=gene1882 chr22 ENCODE CDS 30567374 30567507 . + 2 Parent=gene1882 chr22 ENCODE exon 30577985 30578093 . + . Parent=gene1882 chr22 ENCODE CDS 30577985 30578093 . + 0 Parent=gene1882 chr22 ENCODE exon 30591130 30591284 . + . Parent=gene1882 chr22 ENCODE CDS 30591130 30591284 . + 2 Parent=gene1882 chr22 ENCODE exon 30593795 30593872 . + . Parent=gene1882 chr22 ENCODE CDS 30593795 30593872 . + 0 Parent=gene1882 chr22 ENCODE exon 30594813 30594945 . + . Parent=gene1882 chr22 ENCODE CDS 30594813 30594945 . + 0 Parent=gene1882 chr22 ENCODE exon 30596697 30596805 . + . Parent=gene1882 chr22 ENCODE CDS 30596697 30596805 . + 2 Parent=gene1882 chr22 ENCODE exon 30600065 30600292 . + . Parent=gene1882 chr22 ENCODE CDS 30600065 30600292 . + 1 Parent=gene1882 chr22 ENCODE exon 30614122 30614291 . + . Parent=gene1882 chr22 ENCODE CDS 30614122 30614291 . + 1 Parent=gene1882 chr22 ENCODE exon 30618022 30618193 . + . Parent=gene1882 chr22 ENCODE CDS 30618022 30618193 . + 2 Parent=gene1882 chr22 ENCODE exon 30622282 30622342 . + . Parent=gene1882 chr22 ENCODE CDS 30622282 30622342 . + 1 Parent=gene1882 chr22 ENCODE exon 30626524 30626606 . + . Parent=gene1882 chr22 ENCODE CDS 30626524 30626606 . + 0 Parent=gene1882 chr22 ENCODE CDS 30626745 30627037 . + 1 Parent=gene1882 chr22 ENCODE exon 30626745 30627549 . + . Parent=gene1882 ### chr22 ENCODE gene 30554389 30559261 . + . ID=gene1883;Name=LL22NC03-113A11.1-015;name2=DEPDC5 chr22 ENCODE exon 30554389 30554520 . + . Parent=gene1883 chr22 ENCODE exon 30557634 30557695 . + . Parent=gene1883 chr22 ENCODE exon 30559225 30559261 . + . Parent=gene1883 ### chr22 ENCODE gene 30554406 30564202 . + . ID=gene1884;Name=LL22NC03-113A11.1-016;name2=DEPDC5 chr22 ENCODE exon 30554406 30554520 . + . Parent=gene1884 chr22 ENCODE exon 30557539 30557695 . + . Parent=gene1884 chr22 ENCODE exon 30559225 30559385 . + . Parent=gene1884 chr22 ENCODE exon 30563635 30563752 . + . Parent=gene1884 chr22 ENCODE exon 30564185 30564202 . + . Parent=gene1884 ### chr22 ENCODE gene 30554458 30557854 . + . ID=gene1885;Name=LL22NC03-113A11.1-010;name2=DEPDC5 chr22 ENCODE exon 30554458 30554520 . + . Parent=gene1885 chr22 ENCODE exon 30557512 30557854 . + . Parent=gene1885 ### chr22 ENCODE gene 30557388 30564199 . + . ID=gene1886;Name=LL22NC03-113A11.1-017;name2=DEPDC5 chr22 ENCODE exon 30557388 30557695 . + . Parent=gene1886 chr22 ENCODE exon 30559225 30559385 . + . Parent=gene1886 chr22 ENCODE exon 30563635 30563752 . + . Parent=gene1886 chr22 ENCODE exon 30564185 30564199 . + . Parent=gene1886 ### chr22 ENCODE gene 30567479 30595983 . + . ID=gene1887;Name=LL22NC03-113A11.1-019;name2=DEPDC5 chr22 ENCODE exon 30567479 30567507 . + . Parent=gene1887 chr22 ENCODE exon 30577985 30578093 . + . Parent=gene1887 chr22 ENCODE exon 30591130 30591284 . + . Parent=gene1887 chr22 ENCODE exon 30593795 30593872 . + . Parent=gene1887 chr22 ENCODE exon 30594813 30594945 . + . Parent=gene1887 chr22 ENCODE exon 30595738 30595983 . + . Parent=gene1887 ### chr22 ENCODE gene 30594514 30600236 . + . ID=gene1888;Name=LL22NC03-113A11.1-018;name2=DEPDC5 chr22 ENCODE exon 30594514 30594945 . + . Parent=gene1888 chr22 ENCODE exon 30596697 30596805 . + . Parent=gene1888 chr22 ENCODE exon 30600065 30600236 . + . Parent=gene1888 ### chr22 ENCODE gene 30618175 30627552 . + . ID=gene1889;name2=DEPDC5;Name=LL22NC03-113A11.1-011 chr22 ENCODE exon 30618175 30618193 . + . Parent=gene1889 chr22 ENCODE exon 30622282 30622342 . + . Parent=gene1889 chr22 ENCODE exon 30627345 30627552 . + . Parent=gene1889 ### chr22 ENCODE gene 30654061 30665890 . - . ID=gene1890;Name=LL22NC03-44A4.2-002;name2=C22orf24 chr22 ENCODE exon 30654061 30654989 . - . Parent=gene1890 chr22 ENCODE CDS 30654658 30654989 . - 2 Parent=gene1890 chr22 ENCODE CDS 30658456 30658606 . - 0 Parent=gene1890 chr22 ENCODE exon 30658456 30658655 . - . Parent=gene1890 chr22 ENCODE exon 30665773 30665890 . - . Parent=gene1890 ### chr22 ENCODE gene 30654580 30666058 . - . ID=gene1891;Name=LL22NC03-44A4.2-004;name2=C22orf24 chr22 ENCODE exon 30654580 30654989 . - . Parent=gene1891 chr22 ENCODE exon 30658529 30658655 . - . Parent=gene1891 chr22 ENCODE exon 30665773 30666058 . - . Parent=gene1891 ### chr22 ENCODE gene 30654888 30658994 . - . ID=gene1892;Name=LL22NC03-44A4.2-003;name2=C22orf24 chr22 ENCODE exon 30654888 30654989 . - . Parent=gene1892 chr22 ENCODE exon 30658529 30658994 . - . Parent=gene1892 ### chr22 ENCODE gene 30665001 30678144 . + . ID=gene1893;Name=LL22NC03-44A4.1-001;name2=YWHAH chr22 ENCODE exon 30665001 30665360 . + . Parent=gene1893 chr22 ENCODE CDS 30665274 30665360 . + 0 Parent=gene1893 chr22 ENCODE CDS 30676680 30677333 . + 0 Parent=gene1893 chr22 ENCODE exon 30676680 30678144 . + . Parent=gene1893 ### chr22 ENCODE gene 30665062 30677023 . + . ID=gene1894;name2=YWHAH;Name=LL22NC03-44A4.1-005 chr22 ENCODE exon 30665062 30665360 . + . Parent=gene1894 chr22 ENCODE exon 30666040 30666218 . + . Parent=gene1894 chr22 ENCODE exon 30676680 30677023 . + . Parent=gene1894 ### chr22 ENCODE gene 30665062 30678144 . + . ID=gene1895;Name=LL22NC03-44A4.1-002;name2=YWHAH chr22 ENCODE exon 30665062 30665360 . + . Parent=gene1895 chr22 ENCODE CDS 30665274 30665360 . + 0 Parent=gene1895 chr22 ENCODE exon 30670849 30670963 . + . Parent=gene1895 chr22 ENCODE CDS 30670849 30670963 . + 0 Parent=gene1895 chr22 ENCODE CDS 30676680 30676696 . + 2 Parent=gene1895 chr22 ENCODE exon 30676680 30678144 . + . Parent=gene1895 ### chr22 ENCODE gene 30665506 30678144 . + . ID=gene1896;Name=LL22NC03-44A4.1-003;name2=YWHAH chr22 ENCODE exon 30665506 30665775 . + . Parent=gene1896 chr22 ENCODE exon 30676680 30678144 . + . Parent=gene1896 ### chr22 ENCODE gene 30667963 30677117 . + . ID=gene1897;Name=LL22NC03-44A4.1-004;name2=YWHAH chr22 ENCODE exon 30667963 30668026 . + . Parent=gene1897 chr22 ENCODE CDS 30667979 30668026 . + 0 Parent=gene1897 chr22 ENCODE exon 30676680 30677117 . + . Parent=gene1897 chr22 ENCODE CDS 30676680 30677117 . + 0 Parent=gene1897 ### chr22 ENCODE gene 30763573 30833570 . + . ID=gene1898;name2=SLC5A1;Name=RP1-127L4.1-001 chr22 ENCODE exon 30763573 30763957 . + . Parent=gene1898 chr22 ENCODE CDS 30763823 30763957 . + 0 Parent=gene1898 chr22 ENCODE exon 30770484 30770555 . + . Parent=gene1898 chr22 ENCODE CDS 30770484 30770555 . + 0 Parent=gene1898 chr22 ENCODE exon 30787476 30787580 . + . Parent=gene1898 chr22 ENCODE CDS 30787476 30787580 . + 0 Parent=gene1898 chr22 ENCODE exon 30788508 30788567 . + . Parent=gene1898 chr22 ENCODE CDS 30788508 30788567 . + 0 Parent=gene1898 chr22 ENCODE exon 30789037 30789141 . + . Parent=gene1898 chr22 ENCODE CDS 30789037 30789141 . + 0 Parent=gene1898 chr22 ENCODE exon 30802407 30802512 . + . Parent=gene1898 chr22 ENCODE CDS 30802407 30802512 . + 0 Parent=gene1898 chr22 ENCODE exon 30803615 30803695 . + . Parent=gene1898 chr22 ENCODE CDS 30803615 30803695 . + 2 Parent=gene1898 chr22 ENCODE exon 30804980 30805200 . + . Parent=gene1898 chr22 ENCODE CDS 30804980 30805200 . + 2 Parent=gene1898 chr22 ENCODE exon 30805441 30805576 . + . Parent=gene1898 chr22 ENCODE CDS 30805441 30805576 . + 0 Parent=gene1898 chr22 ENCODE exon 30806761 30806868 . + . Parent=gene1898 chr22 ENCODE CDS 30806761 30806868 . + 2 Parent=gene1898 chr22 ENCODE exon 30812153 30812303 . + . Parent=gene1898 chr22 ENCODE CDS 30812153 30812303 . + 2 Parent=gene1898 chr22 ENCODE exon 30819724 30819892 . + . Parent=gene1898 chr22 ENCODE CDS 30819724 30819892 . + 1 Parent=gene1898 chr22 ENCODE exon 30822563 30822778 . + . Parent=gene1898 chr22 ENCODE CDS 30822563 30822778 . + 0 Parent=gene1898 chr22 ENCODE exon 30825327 30825432 . + . Parent=gene1898 chr22 ENCODE CDS 30825327 30825432 . + 0 Parent=gene1898 chr22 ENCODE CDS 30830531 30830754 . + 2 Parent=gene1898 chr22 ENCODE exon 30830531 30833570 . + . Parent=gene1898 ### chr22 ENCODE gene 30803592 30806867 . + . ID=gene1899;Name=RP1-127L4.1-003;name2=SLC5A1 chr22 ENCODE exon 30803592 30803695 . + . Parent=gene1899 chr22 ENCODE exon 30804980 30805200 . + . Parent=gene1899 chr22 ENCODE exon 30805441 30805576 . + . Parent=gene1899 chr22 ENCODE exon 30806761 30806867 . + . Parent=gene1899 ### chr22 ENCODE gene 30805390 30822748 . + . ID=gene1900;Name=RP1-127L4.1-002;name2=SLC5A1 chr22 ENCODE exon 30805390 30805576 . + . Parent=gene1900 chr22 ENCODE exon 30806761 30806868 . + . Parent=gene1900 chr22 ENCODE exon 30812153 30812303 . + . Parent=gene1900 chr22 ENCODE exon 30819724 30819892 . + . Parent=gene1900 chr22 ENCODE exon 30822563 30822748 . + . Parent=gene1900 ### chr22 ENCODE gene 30869547 30879829 . - . ID=gene1901;Name=RP1-127L4.6-001;name2=RP1-127L4.6 chr22 ENCODE exon 30869547 30870154 . - . Parent=gene1901 chr22 ENCODE CDS 30870081 30870154 . - 2 Parent=gene1901 chr22 ENCODE exon 30870294 30870321 . - . Parent=gene1901 chr22 ENCODE CDS 30870294 30870321 . - 0 Parent=gene1901 chr22 ENCODE exon 30870860 30871020 . - . Parent=gene1901 chr22 ENCODE CDS 30870860 30871020 . - 2 Parent=gene1901 chr22 ENCODE exon 30871533 30871560 . - . Parent=gene1901 chr22 ENCODE CDS 30871533 30871560 . - 0 Parent=gene1901 chr22 ENCODE exon 30872028 30872092 . - . Parent=gene1901 chr22 ENCODE CDS 30872028 30872092 . - 2 Parent=gene1901 chr22 ENCODE exon 30872608 30872635 . - . Parent=gene1901 chr22 ENCODE CDS 30872608 30872635 . - 0 Parent=gene1901 chr22 ENCODE exon 30873103 30873167 . - . Parent=gene1901 chr22 ENCODE CDS 30873103 30873167 . - 2 Parent=gene1901 chr22 ENCODE exon 30874785 30874859 . - . Parent=gene1901 chr22 ENCODE CDS 30874785 30874859 . - 2 Parent=gene1901 chr22 ENCODE CDS 30879525 30879756 . - 0 Parent=gene1901 chr22 ENCODE exon 30879525 30879829 . - . Parent=gene1901 ### chr22 ENCODE gene 30869547 30879863 . - . ID=gene1902;Name=RP1-127L4.6-002;name2=RP1-127L4.6 chr22 ENCODE exon 30869547 30870154 . - . Parent=gene1902 chr22 ENCODE exon 30870294 30870321 . - . Parent=gene1902 chr22 ENCODE exon 30870860 30871560 . - . Parent=gene1902 chr22 ENCODE exon 30872028 30872092 . - . Parent=gene1902 chr22 ENCODE exon 30872608 30872635 . - . Parent=gene1902 chr22 ENCODE exon 30873103 30873167 . - . Parent=gene1902 chr22 ENCODE exon 30874785 30874859 . - . Parent=gene1902 chr22 ENCODE exon 30879525 30879863 . - . Parent=gene1902 ### chr22 ENCODE gene 30869721 30870467 . - . ID=gene1903;Name=RP1-127L4.6-003;name2=RP1-127L4.6 chr22 ENCODE exon 30869721 30870154 . - . Parent=gene1903 chr22 ENCODE exon 30870294 30870467 . - . Parent=gene1903 ### chr22 ENCODE gene 30910979 30924018 . - . ID=gene1904;Name=RP1-90G24.3-001;name2=RFPL2 chr22 ENCODE exon 30910979 30911893 . - . Parent=gene1904 chr22 ENCODE CDS 30911313 30911893 . - 2 Parent=gene1904 chr22 ENCODE exon 30913443 30913733 . - . Parent=gene1904 chr22 ENCODE CDS 30913443 30913733 . - 2 Parent=gene1904 chr22 ENCODE exon 30914886 30915031 . - . Parent=gene1904 chr22 ENCODE CDS 30914886 30915031 . - 1 Parent=gene1904 chr22 ENCODE CDS 30922874 30922992 . - 0 Parent=gene1904 chr22 ENCODE exon 30922874 30923091 . - . Parent=gene1904 chr22 ENCODE exon 30923182 30924018 . - . Parent=gene1904 ### chr22 ENCODE gene 30911245 30913942 . - . ID=gene1905;Name=RP1-90G24.3-002;name2=RFPL2 chr22 ENCODE exon 30911245 30911893 . - . Parent=gene1905 chr22 ENCODE exon 30913443 30913942 . - . Parent=gene1905 ### chr22 ENCODE gene 30939019 30975882 . - . ID=gene1906;Name=RP1-90G24.9-001;name2=SLC5A4 chr22 ENCODE exon 30939019 30939266 . - . Parent=gene1906 chr22 ENCODE CDS 30939055 30939266 . - 2 Parent=gene1906 chr22 ENCODE exon 30941461 30941563 . - . Parent=gene1906 chr22 ENCODE CDS 30941461 30941563 . - 0 Parent=gene1906 chr22 ENCODE exon 30944808 30945023 . - . Parent=gene1906 chr22 ENCODE CDS 30944808 30945023 . - 0 Parent=gene1906 chr22 ENCODE exon 30946196 30946364 . - . Parent=gene1906 chr22 ENCODE CDS 30946196 30946364 . - 1 Parent=gene1906 chr22 ENCODE exon 30949735 30949885 . - . Parent=gene1906 chr22 ENCODE CDS 30949735 30949885 . - 2 Parent=gene1906 chr22 ENCODE exon 30951509 30951616 . - . Parent=gene1906 chr22 ENCODE CDS 30951509 30951616 . - 2 Parent=gene1906 chr22 ENCODE exon 30953440 30953575 . - . Parent=gene1906 chr22 ENCODE CDS 30953440 30953575 . - 0 Parent=gene1906 chr22 ENCODE exon 30955414 30955634 . - . Parent=gene1906 chr22 ENCODE CDS 30955414 30955634 . - 2 Parent=gene1906 chr22 ENCODE exon 30957785 30957865 . - . Parent=gene1906 chr22 ENCODE CDS 30957785 30957865 . - 2 Parent=gene1906 chr22 ENCODE exon 30959526 30959631 . - . Parent=gene1906 chr22 ENCODE CDS 30959526 30959631 . - 0 Parent=gene1906 chr22 ENCODE exon 30967952 30968056 . - . Parent=gene1906 chr22 ENCODE CDS 30967952 30968056 . - 0 Parent=gene1906 chr22 ENCODE exon 30969284 30969343 . - . Parent=gene1906 chr22 ENCODE CDS 30969284 30969343 . - 0 Parent=gene1906 chr22 ENCODE exon 30972311 30972415 . - . Parent=gene1906 chr22 ENCODE CDS 30972311 30972415 . - 0 Parent=gene1906 chr22 ENCODE exon 30974683 30974754 . - . Parent=gene1906 chr22 ENCODE CDS 30974683 30974754 . - 0 Parent=gene1906 chr22 ENCODE CDS 30975736 30975870 . - 0 Parent=gene1906 chr22 ENCODE exon 30975736 30975882 . - . Parent=gene1906 ### chr22 ENCODE gene 31075426 31081702 . + . ID=gene1907;Name=RP1-149A16.1-002;name2=RFPL3 chr22 ENCODE exon 31075426 31075438 . + . Parent=gene1907 chr22 ENCODE exon 31078695 31078985 . + . Parent=gene1907 chr22 ENCODE CDS 31078700 31078985 . + 0 Parent=gene1907 chr22 ENCODE CDS 31080793 31081373 . + 2 Parent=gene1907 chr22 ENCODE exon 31080793 31081702 . + . Parent=gene1907 ### chr22 ENCODE gene 31075849 31081701 . + . ID=gene1908;Name=RP1-149A16.1-003;name2=RFPL3 chr22 ENCODE exon 31075849 31076043 . + . Parent=gene1908 chr22 ENCODE exon 31078127 31078985 . + . Parent=gene1908 chr22 ENCODE exon 31080793 31081701 . + . Parent=gene1908 ### chr22 ENCODE gene 31078408 31081702 . + . ID=gene1909;Name=RP1-149A16.1-001;name2=RFPL3 chr22 ENCODE exon 31078408 31078985 . + . Parent=gene1909 chr22 ENCODE CDS 31078613 31078985 . + 0 Parent=gene1909 chr22 ENCODE CDS 31080793 31081373 . + 2 Parent=gene1909 chr22 ENCODE exon 31080793 31081702 . + . Parent=gene1909 ### chr22 ENCODE gene 31080447 31091526 . - . ID=gene1910;Name=RP1-149A16.4-002;name2=RFPL3S chr22 ENCODE exon 31080447 31081380 . - . Parent=gene1910 chr22 ENCODE CDS 31081295 31081380 . - 2 Parent=gene1910 chr22 ENCODE exon 31088231 31088255 . - . Parent=gene1910 chr22 ENCODE CDS 31088231 31088255 . - 0 Parent=gene1910 chr22 ENCODE exon 31089038 31089108 . - . Parent=gene1910 chr22 ENCODE CDS 31089038 31089108 . - 2 Parent=gene1910 chr22 ENCODE CDS 31091440 31091467 . - 0 Parent=gene1910 chr22 ENCODE exon 31091440 31091526 . - . Parent=gene1910 ### chr22 ENCODE gene 31080447 31091617 . - . ID=gene1911;Name=RP1-149A16.4-001;name2=RFPL3S chr22 ENCODE exon 31080447 31081380 . - . Parent=gene1911 chr22 ENCODE CDS 31081295 31081380 . - 2 Parent=gene1911 chr22 ENCODE exon 31083513 31083599 . - . Parent=gene1911 chr22 ENCODE CDS 31083513 31083599 . - 2 Parent=gene1911 chr22 ENCODE exon 31088231 31088255 . - . Parent=gene1911 chr22 ENCODE CDS 31088231 31088255 . - 0 Parent=gene1911 chr22 ENCODE exon 31089038 31089108 . - . Parent=gene1911 chr22 ENCODE CDS 31089038 31089108 . - 2 Parent=gene1911 chr22 ENCODE CDS 31091440 31091467 . - 0 Parent=gene1911 chr22 ENCODE exon 31091440 31091617 . - . Parent=gene1911 ### chr22 ENCODE gene 31081193 31083658 . - . ID=gene1912;Name=RP1-149A16.4-004;name2=RFPL3S chr22 ENCODE exon 31081193 31081380 . - . Parent=gene1912 chr22 ENCODE exon 31083513 31083658 . - . Parent=gene1912 ### chr22 ENCODE gene 31083342 31091540 . - . ID=gene1913;Name=RP1-149A16.4-003;name2=RFPL3S chr22 ENCODE exon 31083342 31083599 . - . Parent=gene1913 chr22 ENCODE CDS 31083493 31083599 . - 2 Parent=gene1913 chr22 ENCODE exon 31088231 31088255 . - . Parent=gene1913 chr22 ENCODE CDS 31088231 31088255 . - 0 Parent=gene1913 chr22 ENCODE exon 31089038 31089108 . - . Parent=gene1913 chr22 ENCODE CDS 31089038 31089108 . - 2 Parent=gene1913 chr22 ENCODE CDS 31091440 31091467 . - 0 Parent=gene1913 chr22 ENCODE exon 31091440 31091540 . - . Parent=gene1913 ### chr22 ENCODE gene 31108123 31132796 . - . ID=gene1914;Name=RP1-149A16.6-001;name2=C22orf28 chr22 ENCODE exon 31108123 31108640 . - . Parent=gene1914 chr22 ENCODE CDS 31108533 31108640 . - 0 Parent=gene1914 chr22 ENCODE exon 31112781 31112900 . - . Parent=gene1914 chr22 ENCODE CDS 31112781 31112900 . - 0 Parent=gene1914 chr22 ENCODE exon 31114433 31114543 . - . Parent=gene1914 chr22 ENCODE CDS 31114433 31114543 . - 0 Parent=gene1914 chr22 ENCODE exon 31115567 31115755 . - . Parent=gene1914 chr22 ENCODE CDS 31115567 31115755 . - 0 Parent=gene1914 chr22 ENCODE exon 31116615 31116790 . - . Parent=gene1914 chr22 ENCODE CDS 31116615 31116790 . - 2 Parent=gene1914 chr22 ENCODE exon 31118482 31118641 . - . Parent=gene1914 chr22 ENCODE CDS 31118482 31118641 . - 0 Parent=gene1914 chr22 ENCODE exon 31120144 31120300 . - . Parent=gene1914 chr22 ENCODE CDS 31120144 31120300 . - 1 Parent=gene1914 chr22 ENCODE exon 31122288 31122444 . - . Parent=gene1914 chr22 ENCODE CDS 31122288 31122444 . - 2 Parent=gene1914 chr22 ENCODE exon 31127203 31127302 . - . Parent=gene1914 chr22 ENCODE CDS 31127203 31127302 . - 0 Parent=gene1914 chr22 ENCODE exon 31128716 31128783 . - . Parent=gene1914 chr22 ENCODE CDS 31128716 31128783 . - 2 Parent=gene1914 chr22 ENCODE exon 31129296 31129374 . - . Parent=gene1914 chr22 ENCODE CDS 31129296 31129374 . - 0 Parent=gene1914 chr22 ENCODE CDS 31132605 31132697 . - 0 Parent=gene1914 chr22 ENCODE exon 31132605 31132796 . - . Parent=gene1914 ### chr22 ENCODE gene 31108377 31122385 . - . ID=gene1915;name2=C22orf28;Name=RP1-149A16.6-005 chr22 ENCODE exon 31108377 31108640 . - . Parent=gene1915 chr22 ENCODE exon 31112781 31112884 . - . Parent=gene1915 chr22 ENCODE exon 31118548 31118641 . - . Parent=gene1915 chr22 ENCODE exon 31120144 31120300 . - . Parent=gene1915 chr22 ENCODE exon 31122288 31122385 . - . Parent=gene1915 ### chr22 ENCODE gene 31118489 31120526 . - . ID=gene1916;Name=RP1-149A16.6-008;name2=C22orf28 chr22 ENCODE exon 31118489 31118641 . - . Parent=gene1916 chr22 ENCODE exon 31120144 31120526 . - . Parent=gene1916 ### chr22 ENCODE gene 31118583 31128067 . - . ID=gene1917;Name=RP1-149A16.6-006;name2=C22orf28 chr22 ENCODE exon 31118583 31118641 . - . Parent=gene1917 chr22 ENCODE exon 31120144 31120300 . - . Parent=gene1917 chr22 ENCODE exon 31122288 31122444 . - . Parent=gene1917 chr22 ENCODE exon 31127203 31127302 . - . Parent=gene1917 chr22 ENCODE exon 31127947 31128067 . - . Parent=gene1917 ### chr22 ENCODE gene 31118589 31127950 . - . ID=gene1918;Name=RP1-149A16.6-007;name2=C22orf28 chr22 ENCODE exon 31118589 31118641 . - . Parent=gene1918 chr22 ENCODE exon 31120144 31120300 . - . Parent=gene1918 chr22 ENCODE exon 31122288 31122444 . - . Parent=gene1918 chr22 ENCODE exon 31127203 31127302 . - . Parent=gene1918 chr22 ENCODE exon 31127854 31127950 . - . Parent=gene1918 ### chr22 ENCODE gene 31122103 31132782 . - . ID=gene1919;Name=RP1-149A16.6-004;name2=C22orf28 chr22 ENCODE exon 31122103 31122444 . - . Parent=gene1919 chr22 ENCODE exon 31127203 31127302 . - . Parent=gene1919 chr22 ENCODE exon 31128716 31128783 . - . Parent=gene1919 chr22 ENCODE exon 31129296 31129374 . - . Parent=gene1919 chr22 ENCODE exon 31132605 31132782 . - . Parent=gene1919 ### chr22 ENCODE gene 31122385 31132789 . - . ID=gene1920;Name=RP1-149A16.6-002;name2=C22orf28 chr22 ENCODE exon 31122385 31122444 . - . Parent=gene1920 chr22 ENCODE exon 31127203 31127302 . - . Parent=gene1920 chr22 ENCODE exon 31129296 31129374 . - . Parent=gene1920 chr22 ENCODE exon 31132605 31132789 . - . Parent=gene1920 ### chr22 ENCODE gene 31128420 31132789 . - . ID=gene1921;name2=C22orf28;Name=RP1-149A16.6-003 chr22 ENCODE exon 31128420 31128783 . - . Parent=gene1921 chr22 ENCODE exon 31129296 31129374 . - . Parent=gene1921 chr22 ENCODE exon 31132605 31132789 . - . Parent=gene1921 ### chr22 ENCODE gene 31134388 31185025 . - . ID=gene1922;Name=RP1-149A16.10-010;name2=BPIL2 chr22 ENCODE exon 31134388 31134966 . - . Parent=gene1922 chr22 ENCODE CDS 31134844 31134966 . - 0 Parent=gene1922 chr22 ENCODE exon 31136456 31136532 . - . Parent=gene1922 chr22 ENCODE CDS 31136456 31136532 . - 2 Parent=gene1922 chr22 ENCODE exon 31137626 31137689 . - . Parent=gene1922 chr22 ENCODE CDS 31137626 31137689 . - 0 Parent=gene1922 chr22 ENCODE exon 31139903 31139945 . - . Parent=gene1922 chr22 ENCODE CDS 31139903 31139945 . - 1 Parent=gene1922 chr22 ENCODE exon 31151888 31151955 . - . Parent=gene1922 chr22 ENCODE CDS 31151888 31151955 . - 0 Parent=gene1922 chr22 ENCODE exon 31152914 31153084 . - . Parent=gene1922 chr22 ENCODE CDS 31152914 31153084 . - 0 Parent=gene1922 chr22 ENCODE exon 31154260 31154313 . - . Parent=gene1922 chr22 ENCODE CDS 31154260 31154313 . - 0 Parent=gene1922 chr22 ENCODE exon 31156245 31156421 . - . Parent=gene1922 chr22 ENCODE CDS 31156245 31156421 . - 0 Parent=gene1922 chr22 ENCODE exon 31158301 31158392 . - . Parent=gene1922 chr22 ENCODE CDS 31158301 31158392 . - 2 Parent=gene1922 chr22 ENCODE exon 31163212 31163272 . - . Parent=gene1922 chr22 ENCODE CDS 31163212 31163272 . - 0 Parent=gene1922 chr22 ENCODE exon 31166176 31166239 . - . Parent=gene1922 chr22 ENCODE CDS 31166176 31166239 . - 1 Parent=gene1922 chr22 ENCODE exon 31166382 31166537 . - . Parent=gene1922 chr22 ENCODE CDS 31166382 31166537 . - 1 Parent=gene1922 chr22 ENCODE exon 31167753 31167881 . - . Parent=gene1922 chr22 ENCODE CDS 31167753 31167881 . - 1 Parent=gene1922 chr22 ENCODE exon 31173924 31174044 . - . Parent=gene1922 chr22 ENCODE CDS 31173924 31174044 . - 2 Parent=gene1922 chr22 ENCODE exon 31177804 31177927 . - . Parent=gene1922 chr22 ENCODE CDS 31177804 31177927 . - 0 Parent=gene1922 chr22 ENCODE exon 31184915 31185025 . - . Parent=gene1922 ### chr22 ENCODE gene 31173875 31184990 . - . ID=gene1923;name2=BPIL2;Name=RP1-149A16.10-011 chr22 ENCODE exon 31173875 31174044 . - . Parent=gene1923 chr22 ENCODE CDS 31173920 31174044 . - 2 Parent=gene1923 chr22 ENCODE exon 31177804 31177927 . - . Parent=gene1923 chr22 ENCODE CDS 31177804 31177927 . - 0 Parent=gene1923 chr22 ENCODE exon 31182115 31182202 . - . Parent=gene1923 chr22 ENCODE exon 31184915 31184990 . - . Parent=gene1923 ### chr22 ENCODE gene 31195217 31219370 . + . ID=gene1924;Name=LL22NC03-28H9.2-003;name2=FBXO7 chr22 ENCODE exon 31195217 31195665 . + . Parent=gene1924 chr22 ENCODE exon 31204438 31204665 . + . Parent=gene1924 chr22 ENCODE exon 31205609 31205750 . + . Parent=gene1924 chr22 ENCODE exon 31208286 31208369 . + . Parent=gene1924 chr22 ENCODE exon 31211627 31211722 . + . Parent=gene1924 chr22 ENCODE exon 31213646 31213822 . + . Parent=gene1924 chr22 ENCODE exon 31216034 31216071 . + . Parent=gene1924 chr22 ENCODE exon 31218685 31219370 . + . Parent=gene1924 ### chr22 ENCODE gene 31195217 31219370 . + . ID=gene1925;Name=LL22NC03-28H9.2-001;name2=FBXO7 chr22 ENCODE exon 31195217 31195665 . + . Parent=gene1925 chr22 ENCODE CDS 31195544 31195665 . + 0 Parent=gene1925 chr22 ENCODE exon 31199522 31199816 . + . Parent=gene1925 chr22 ENCODE CDS 31199522 31199816 . + 1 Parent=gene1925 chr22 ENCODE exon 31204438 31204665 . + . Parent=gene1925 chr22 ENCODE CDS 31204438 31204665 . + 0 Parent=gene1925 chr22 ENCODE exon 31205609 31205750 . + . Parent=gene1925 chr22 ENCODE CDS 31205609 31205750 . + 0 Parent=gene1925 chr22 ENCODE exon 31208286 31208369 . + . Parent=gene1925 chr22 ENCODE CDS 31208286 31208369 . + 2 Parent=gene1925 chr22 ENCODE exon 31211627 31211722 . + . Parent=gene1925 chr22 ENCODE CDS 31211627 31211722 . + 2 Parent=gene1925 chr22 ENCODE exon 31213646 31213822 . + . Parent=gene1925 chr22 ENCODE CDS 31213646 31213822 . + 2 Parent=gene1925 chr22 ENCODE exon 31216034 31216071 . + . Parent=gene1925 chr22 ENCODE CDS 31216034 31216071 . + 2 Parent=gene1925 chr22 ENCODE CDS 31218685 31219071 . + 0 Parent=gene1925 chr22 ENCODE exon 31218685 31219370 . + . Parent=gene1925 ### chr22 ENCODE gene 31195339 31219370 . + . ID=gene1926;name2=FBXO7;Name=LL22NC03-28H9.2-004 chr22 ENCODE exon 31195339 31195665 . + . Parent=gene1926 chr22 ENCODE exon 31199674 31199816 . + . Parent=gene1926 chr22 ENCODE exon 31204438 31204665 . + . Parent=gene1926 chr22 ENCODE exon 31205609 31205750 . + . Parent=gene1926 chr22 ENCODE exon 31208286 31208369 . + . Parent=gene1926 chr22 ENCODE exon 31211627 31211722 . + . Parent=gene1926 chr22 ENCODE exon 31213646 31213822 . + . Parent=gene1926 chr22 ENCODE exon 31216034 31216071 . + . Parent=gene1926 chr22 ENCODE exon 31218685 31219370 . + . Parent=gene1926 ### chr22 ENCODE gene 31195556 31219370 . + . ID=gene1927;Name=LL22NC03-28H9.2-005;name2=FBXO7 chr22 ENCODE exon 31195556 31195665 . + . Parent=gene1927 chr22 ENCODE exon 31199674 31199816 . + . Parent=gene1927 chr22 ENCODE exon 31204438 31204665 . + . Parent=gene1927 chr22 ENCODE exon 31205609 31205750 . + . Parent=gene1927 chr22 ENCODE exon 31208286 31213822 . + . Parent=gene1927 chr22 ENCODE exon 31216034 31216071 . + . Parent=gene1927 chr22 ENCODE exon 31218685 31219370 . + . Parent=gene1927 ### chr22 ENCODE gene 31195778 31204646 . + . ID=gene1928;Name=LL22NC03-28H9.2-006;name2=FBXO7 chr22 ENCODE exon 31195778 31195939 . + . Parent=gene1928 chr22 ENCODE CDS 31195903 31195939 . + 0 Parent=gene1928 chr22 ENCODE exon 31199674 31199816 . + . Parent=gene1928 chr22 ENCODE CDS 31199674 31199816 . + 2 Parent=gene1928 chr22 ENCODE exon 31204438 31204646 . + . Parent=gene1928 chr22 ENCODE CDS 31204438 31204646 . + 0 Parent=gene1928 ### chr22 ENCODE gene 31195798 31219370 . + . ID=gene1929;Name=LL22NC03-28H9.2-002;name2=FBXO7 chr22 ENCODE exon 31195798 31195939 . + . Parent=gene1929 chr22 ENCODE exon 31199522 31199816 . + . Parent=gene1929 chr22 ENCODE CDS 31199742 31199816 . + 0 Parent=gene1929 chr22 ENCODE exon 31204438 31204665 . + . Parent=gene1929 chr22 ENCODE CDS 31204438 31204665 . + 0 Parent=gene1929 chr22 ENCODE exon 31205609 31205750 . + . Parent=gene1929 chr22 ENCODE CDS 31205609 31205750 . + 0 Parent=gene1929 chr22 ENCODE exon 31208286 31208369 . + . Parent=gene1929 chr22 ENCODE CDS 31208286 31208369 . + 2 Parent=gene1929 chr22 ENCODE exon 31211627 31211722 . + . Parent=gene1929 chr22 ENCODE CDS 31211627 31211722 . + 2 Parent=gene1929 chr22 ENCODE exon 31213646 31213822 . + . Parent=gene1929 chr22 ENCODE CDS 31213646 31213822 . + 2 Parent=gene1929 chr22 ENCODE exon 31216034 31216071 . + . Parent=gene1929 chr22 ENCODE CDS 31216034 31216071 . + 2 Parent=gene1929 chr22 ENCODE CDS 31218685 31219071 . + 0 Parent=gene1929 chr22 ENCODE exon 31218685 31219370 . + . Parent=gene1929 ### chr22 ENCODE gene 31196134 31204524 . + . ID=gene1930;Name=LL22NC03-28H9.2-007;name2=FBXO7 chr22 ENCODE exon 31196134 31196498 . + . Parent=gene1930 chr22 ENCODE exon 31199522 31199816 . + . Parent=gene1930 chr22 ENCODE CDS 31199742 31199816 . + 0 Parent=gene1930 chr22 ENCODE exon 31204438 31204524 . + . Parent=gene1930 chr22 ENCODE CDS 31204438 31204524 . + 0 Parent=gene1930 ### chr22 ENCODE gene 31198576 31199772 . + . ID=gene1931;Name=LL22NC03-28H9.2-008;name2=FBXO7 chr22 ENCODE exon 31198576 31198737 . + . Parent=gene1931 chr22 ENCODE exon 31199522 31199772 . + . Parent=gene1931 ### chr22 ENCODE gene 31207829 31211654 . + . ID=gene1932;Name=LL22NC03-28H9.2-010;name2=FBXO7 chr22 ENCODE exon 31207829 31208369 . + . Parent=gene1932 chr22 ENCODE exon 31211627 31211654 . + . Parent=gene1932 ### chr22 ENCODE gene 31207849 31219244 . + . ID=gene1933;name2=FBXO7;Name=LL22NC03-28H9.2-009 chr22 ENCODE exon 31207849 31207899 . + . Parent=gene1933 chr22 ENCODE exon 31208286 31208369 . + . Parent=gene1933 chr22 ENCODE exon 31211627 31211722 . + . Parent=gene1933 chr22 ENCODE exon 31213646 31213822 . + . Parent=gene1933 chr22 ENCODE exon 31216034 31216071 . + . Parent=gene1933 chr22 ENCODE exon 31218685 31219244 . + . Parent=gene1933 ### chr22 ENCODE gene 31233093 31778912 . - . ID=gene1934;Name=LL22NC03-28H9.1-001;name2=SYN3 chr22 ENCODE exon 31233093 31234365 . - . Parent=gene1934 chr22 ENCODE CDS 31234233 31234365 . - 1 Parent=gene1934 chr22 ENCODE exon 31238584 31238875 . - . Parent=gene1934 chr22 ENCODE CDS 31238584 31238875 . - 2 Parent=gene1934 chr22 ENCODE exon 31248459 31248546 . - . Parent=gene1934 chr22 ENCODE CDS 31248459 31248546 . - 0 Parent=gene1934 chr22 ENCODE exon 31249415 31249549 . - . Parent=gene1934 chr22 ENCODE CDS 31249415 31249549 . - 0 Parent=gene1934 chr22 ENCODE exon 31254333 31254435 . - . Parent=gene1934 chr22 ENCODE CDS 31254333 31254435 . - 1 Parent=gene1934 chr22 ENCODE exon 31258576 31258650 . - . Parent=gene1934 chr22 ENCODE CDS 31258576 31258650 . - 1 Parent=gene1934 chr22 ENCODE exon 31262111 31262253 . - . Parent=gene1934 chr22 ENCODE CDS 31262111 31262253 . - 0 Parent=gene1934 chr22 ENCODE exon 31317214 31317276 . - . Parent=gene1934 chr22 ENCODE CDS 31317214 31317276 . - 0 Parent=gene1934 chr22 ENCODE exon 31585456 31585545 . - . Parent=gene1934 chr22 ENCODE CDS 31585456 31585545 . - 0 Parent=gene1934 chr22 ENCODE exon 31589507 31589666 . - . Parent=gene1934 chr22 ENCODE CDS 31589507 31589666 . - 1 Parent=gene1934 chr22 ENCODE exon 31651929 31652020 . - . Parent=gene1934 chr22 ENCODE CDS 31651929 31652020 . - 0 Parent=gene1934 chr22 ENCODE exon 31701184 31701241 . - . Parent=gene1934 chr22 ENCODE CDS 31701184 31701241 . - 1 Parent=gene1934 chr22 ENCODE CDS 31726891 31727201 . - 0 Parent=gene1934 chr22 ENCODE exon 31726891 31727363 . - . Parent=gene1934 chr22 ENCODE exon 31778832 31778912 . - . Parent=gene1934 ### chr22 ENCODE gene 31234117 31249612 . - . ID=gene1935;Name=LL22NC03-28H9.1-005;name2=SYN3 chr22 ENCODE exon 31234117 31234365 . - . Parent=gene1935 chr22 ENCODE exon 31238584 31238875 . - . Parent=gene1935 chr22 ENCODE exon 31248459 31248546 . - . Parent=gene1935 chr22 ENCODE exon 31249415 31249612 . - . Parent=gene1935 ### chr22 ENCODE gene 31234216 31240227 . - . ID=gene1936;Name=LL22NC03-28H9.1-007;name2=SYN3 chr22 ENCODE exon 31234216 31234365 . - . Parent=gene1936 chr22 ENCODE exon 31238584 31238875 . - . Parent=gene1936 chr22 ENCODE exon 31239928 31240227 . - . Parent=gene1936 ### chr22 ENCODE gene 31234980 31249623 . - . ID=gene1937;Name=LL22NC03-28H9.1-006;name2=SYN3 chr22 ENCODE exon 31234980 31235191 . - . Parent=gene1937 chr22 ENCODE exon 31238584 31238875 . - . Parent=gene1937 chr22 ENCODE exon 31249415 31249623 . - . Parent=gene1937 ### chr22 ENCODE gene 31238734 31250729 . - . ID=gene1938;Name=LL22NC03-28H9.1-004;name2=SYN3 chr22 ENCODE exon 31238734 31238875 . - . Parent=gene1938 chr22 ENCODE exon 31248459 31248546 . - . Parent=gene1938 chr22 ENCODE exon 31249415 31249549 . - . Parent=gene1938 chr22 ENCODE exon 31250588 31250729 . - . Parent=gene1938 ### chr22 ENCODE gene 31350146 31589641 . - . ID=gene1939;Name=LL22NC03-28H9.1-002;name2=SYN3 chr22 ENCODE exon 31350146 31350408 . - . Parent=gene1939 chr22 ENCODE exon 31585456 31585545 . - . Parent=gene1939 chr22 ENCODE exon 31589507 31589641 . - . Parent=gene1939 ### chr22 ENCODE gene 31522241 31583584 . + . ID=gene1940;Name=RP1-309I22.1-001;name2=TIMP3 chr22 ENCODE exon 31522241 31522662 . + . Parent=gene1940 chr22 ENCODE CDS 31522542 31522662 . + 0 Parent=gene1940 chr22 ENCODE exon 31569993 31570075 . + . Parent=gene1940 chr22 ENCODE CDS 31569993 31570075 . + 2 Parent=gene1940 chr22 ENCODE exon 31577790 31577901 . + . Parent=gene1940 chr22 ENCODE CDS 31577790 31577901 . + 0 Parent=gene1940 chr22 ENCODE exon 31578558 31578679 . + . Parent=gene1940 chr22 ENCODE CDS 31578558 31578679 . + 2 Parent=gene1940 chr22 ENCODE CDS 31579721 31579918 . + 0 Parent=gene1940 chr22 ENCODE exon 31579721 31583584 . + . Parent=gene1940 ### chr22 ENCODE gene 31522260 31583584 . + . ID=gene1941;Name=RP1-309I22.1-002;name2=TIMP3 chr22 ENCODE exon 31522260 31522662 . + . Parent=gene1941 chr22 ENCODE CDS 31522542 31522662 . + 0 Parent=gene1941 chr22 ENCODE exon 31569993 31570075 . + . Parent=gene1941 chr22 ENCODE CDS 31569993 31570075 . + 2 Parent=gene1941 chr22 ENCODE exon 31577790 31577901 . + . Parent=gene1941 chr22 ENCODE CDS 31577790 31577901 . + 0 Parent=gene1941 chr22 ENCODE exon 31578558 31578654 . + . Parent=gene1941 chr22 ENCODE CDS 31578558 31578654 . + 2 Parent=gene1941 chr22 ENCODE CDS 31579689 31579890 . + 1 Parent=gene1941 chr22 ENCODE exon 31579689 31583584 . + . Parent=gene1941 ### chr22 ENCODE gene 31522260 31583584 . + . ID=gene1942;Name=RP1-309I22.1-003;name2=TIMP3 chr22 ENCODE exon 31522260 31522662 . + . Parent=gene1942 chr22 ENCODE exon 31569993 31570075 . + . Parent=gene1942 chr22 ENCODE exon 31577790 31577901 . + . Parent=gene1942 chr22 ENCODE exon 31578558 31578679 . + . Parent=gene1942 chr22 ENCODE exon 31579714 31583584 . + . Parent=gene1942 ### chr22 ENCODE gene 31585116 31589599 . - . ID=gene1943;Name=LL22NC03-28H9.1-003;name2=SYN3 chr22 ENCODE exon 31585116 31585545 . - . Parent=gene1943 chr22 ENCODE exon 31589507 31589599 . - . Parent=gene1943 ### chr22 ENCODE gene 31651534 31668118 . - . ID=gene1944;Name=LL22NC03-28H9.1-010;name2=SYN3 chr22 ENCODE exon 31651534 31652020 . - . Parent=gene1944 chr22 ENCODE exon 31668011 31668118 . - . Parent=gene1944 ### chr22 ENCODE gene 31701184 31778398 . - . ID=gene1945;Name=LL22NC03-28H9.1-009;name2=SYN3 chr22 ENCODE exon 31701184 31701241 . - . Parent=gene1945 chr22 ENCODE CDS 31701184 31701241 . - 1 Parent=gene1945 chr22 ENCODE CDS 31726891 31727201 . - 0 Parent=gene1945 chr22 ENCODE exon 31726891 31727363 . - . Parent=gene1945 chr22 ENCODE exon 31778075 31778398 . - . Parent=gene1945 ### chr22 ENCODE gene 31701212 31735068 . - . ID=gene1946;Name=LL22NC03-28H9.1-008;name2=SYN3 chr22 ENCODE exon 31701212 31701241 . - . Parent=gene1946 chr22 ENCODE CDS 31701212 31701241 . - 1 Parent=gene1946 chr22 ENCODE CDS 31726891 31727201 . - 0 Parent=gene1946 chr22 ENCODE exon 31726891 31727363 . - . Parent=gene1946 chr22 ENCODE exon 31734940 31735068 . - . Parent=gene1946 ### chr5 ENCODE gene 55887725 55937816 . - . ID=gene1947;Name=AC022431.2-001;name2=AC022431.2 chr5 ENCODE exon 55887725 55887771 . - . Parent=gene1947 chr5 ENCODE exon 55937606 55937816 . - . Parent=gene1947 ### chr5 ENCODE gene 56147158 56227736 . + . ID=gene1948;Name=AC008937.1-001;name2=MAP3K1 chr5 ENCODE exon 56147158 56147639 . + . Parent=gene1948 chr5 ENCODE CDS 56147158 56147639 . + 0 Parent=gene1948 chr5 ENCODE exon 56188184 56188334 . + . Parent=gene1948 chr5 ENCODE CDS 56188184 56188334 . + 1 Parent=gene1948 chr5 ENCODE exon 56191299 56191499 . + . Parent=gene1948 chr5 ENCODE CDS 56191299 56191499 . + 0 Parent=gene1948 chr5 ENCODE exon 56196318 56196518 . + . Parent=gene1948 chr5 ENCODE CDS 56196318 56196518 . + 0 Parent=gene1948 chr5 ENCODE exon 56196924 56197040 . + . Parent=gene1948 chr5 ENCODE CDS 56196924 56197040 . + 0 Parent=gene1948 chr5 ENCODE exon 56197413 56197561 . + . Parent=gene1948 chr5 ENCODE CDS 56197413 56197561 . + 0 Parent=gene1948 chr5 ENCODE exon 56203494 56203615 . + . Parent=gene1948 chr5 ENCODE CDS 56203494 56203615 . + 1 Parent=gene1948 chr5 ENCODE exon 56204225 56204306 . + . Parent=gene1948 chr5 ENCODE CDS 56204225 56204306 . + 2 Parent=gene1948 chr5 ENCODE exon 56204409 56204589 . + . Parent=gene1948 chr5 ENCODE CDS 56204409 56204589 . + 1 Parent=gene1948 chr5 ENCODE exon 56206616 56206894 . + . Parent=gene1948 chr5 ENCODE CDS 56206616 56206894 . + 0 Parent=gene1948 chr5 ENCODE exon 56210564 56210685 . + . Parent=gene1948 chr5 ENCODE CDS 56210564 56210685 . + 0 Parent=gene1948 chr5 ENCODE exon 56212295 56212386 . + . Parent=gene1948 chr5 ENCODE CDS 56212295 56212386 . + 1 Parent=gene1948 chr5 ENCODE exon 56212667 56212856 . + . Parent=gene1948 chr5 ENCODE CDS 56212667 56212856 . + 2 Parent=gene1948 chr5 ENCODE exon 56213154 56214450 . + . Parent=gene1948 chr5 ENCODE CDS 56213154 56214450 . + 1 Parent=gene1948 chr5 ENCODE exon 56215111 56215263 . + . Parent=gene1948 chr5 ENCODE CDS 56215111 56215263 . + 0 Parent=gene1948 chr5 ENCODE exon 56216248 56216410 . + . Parent=gene1948 chr5 ENCODE CDS 56216248 56216410 . + 0 Parent=gene1948 chr5 ENCODE exon 56217516 56217647 . + . Parent=gene1948 chr5 ENCODE CDS 56217516 56217647 . + 2 Parent=gene1948 chr5 ENCODE exon 56218962 56219104 . + . Parent=gene1948 chr5 ENCODE CDS 56218962 56219104 . + 2 Parent=gene1948 chr5 ENCODE exon 56219810 56219941 . + . Parent=gene1948 chr5 ENCODE CDS 56219810 56219941 . + 0 Parent=gene1948 chr5 ENCODE CDS 56225115 56225264 . + 0 Parent=gene1948 chr5 ENCODE exon 56225115 56227736 . + . Parent=gene1948 ### chr5 ENCODE gene 56188289 56227665 . + . ID=gene1949;name2=MAP3K1;Name=AC008937.1-003 chr5 ENCODE exon 56188289 56188334 . + . Parent=gene1949 chr5 ENCODE exon 56191299 56191436 . + . Parent=gene1949 chr5 ENCODE exon 56227451 56227665 . + . Parent=gene1949 ### chr5 ENCODE gene 56217537 56227736 . + . ID=gene1950;Name=AC008937.1-002;name2=MAP3K1 chr5 ENCODE exon 56217537 56217647 . + . Parent=gene1950 chr5 ENCODE exon 56218962 56219941 . + . Parent=gene1950 chr5 ENCODE exon 56225115 56227736 . + . Parent=gene1950 ### chr5 ENCODE gene 56240844 56248528 . + . ID=gene1951;Name=AC008937.4-003;name2=C5orf35 chr5 ENCODE exon 56240844 56241044 . + . Parent=gene1951 chr5 ENCODE exon 56242893 56243120 . + . Parent=gene1951 chr5 ENCODE exon 56244595 56244718 . + . Parent=gene1951 chr5 ENCODE exon 56245458 56245573 . + . Parent=gene1951 chr5 ENCODE exon 56246445 56246550 . + . Parent=gene1951 chr5 ENCODE exon 56248399 56248528 . + . Parent=gene1951 ### chr5 ENCODE gene 56240844 56248819 . + . ID=gene1952;Name=AC008937.4-001;name2=C5orf35 chr5 ENCODE exon 56240844 56241327 . + . Parent=gene1952 chr5 ENCODE CDS 56241230 56241327 . + 0 Parent=gene1952 chr5 ENCODE exon 56242753 56243120 . + . Parent=gene1952 chr5 ENCODE CDS 56242753 56243120 . + 1 Parent=gene1952 chr5 ENCODE exon 56244595 56244718 . + . Parent=gene1952 chr5 ENCODE CDS 56244595 56244718 . + 2 Parent=gene1952 chr5 ENCODE exon 56245458 56245573 . + . Parent=gene1952 chr5 ENCODE CDS 56245458 56245573 . + 1 Parent=gene1952 chr5 ENCODE exon 56246445 56246550 . + . Parent=gene1952 chr5 ENCODE CDS 56246445 56246550 . + 2 Parent=gene1952 chr5 ENCODE CDS 56248399 56248486 . + 1 Parent=gene1952 chr5 ENCODE exon 56248399 56248819 . + . Parent=gene1952 ### chr5 ENCODE gene 56241177 56243172 . + . ID=gene1953;name2=C5orf35;Name=AC008937.4-010 chr5 ENCODE exon 56241177 56241327 . + . Parent=gene1953 chr5 ENCODE exon 56242753 56243172 . + . Parent=gene1953 ### chr5 ENCODE gene 56241199 56248932 . + . ID=gene1954;Name=AC008937.4-002;name2=C5orf35 chr5 ENCODE exon 56241199 56241327 . + . Parent=gene1954 chr5 ENCODE exon 56244595 56244718 . + . Parent=gene1954 chr5 ENCODE exon 56245458 56245573 . + . Parent=gene1954 chr5 ENCODE exon 56246445 56246550 . + . Parent=gene1954 chr5 ENCODE exon 56248399 56248932 . + . Parent=gene1954 ### chr5 ENCODE gene 56241208 56244700 . + . ID=gene1955;Name=AC008937.4-008;name2=C5orf35 chr5 ENCODE exon 56241208 56241327 . + . Parent=gene1955 chr5 ENCODE exon 56242753 56243086 . + . Parent=gene1955 chr5 ENCODE exon 56244595 56244700 . + . Parent=gene1955 ### chr5 ENCODE gene 56241644 56248503 . + . ID=gene1956;name2=C5orf35;Name=AC008937.4-004 chr5 ENCODE exon 56241644 56241978 . + . Parent=gene1956 chr5 ENCODE exon 56244595 56244718 . + . Parent=gene1956 chr5 ENCODE exon 56245458 56245573 . + . Parent=gene1956 chr5 ENCODE exon 56246445 56246550 . + . Parent=gene1956 chr5 ENCODE exon 56248399 56248503 . + . Parent=gene1956 ### chr5 ENCODE gene 56241671 56245561 . + . ID=gene1957;Name=AC008937.4-005;name2=C5orf35 chr5 ENCODE exon 56241671 56241978 . + . Parent=gene1957 chr5 ENCODE exon 56242626 56242695 . + . Parent=gene1957 chr5 ENCODE exon 56244595 56244718 . + . Parent=gene1957 chr5 ENCODE exon 56245458 56245561 . + . Parent=gene1957 ### chr5 ENCODE gene 56241689 56242879 . + . ID=gene1958;Name=AC008937.4-006;name2=C5orf35 chr5 ENCODE exon 56241689 56241978 . + . Parent=gene1958 chr5 ENCODE CDS 56241959 56241978 . + 0 Parent=gene1958 chr5 ENCODE exon 56242753 56242879 . + . Parent=gene1958 chr5 ENCODE CDS 56242753 56242879 . + 1 Parent=gene1958 ### chr5 ENCODE gene 56242361 56245566 . + . ID=gene1959;Name=AC008937.4-009;name2=C5orf35 chr5 ENCODE exon 56242361 56242506 . + . Parent=gene1959 chr5 ENCODE exon 56242626 56242695 . + . Parent=gene1959 chr5 ENCODE exon 56244595 56244718 . + . Parent=gene1959 chr5 ENCODE exon 56245458 56245566 . + . Parent=gene1959 ### chr5 ENCODE gene 56242496 56242879 . + . ID=gene1960;Name=AC008937.4-007;name2=C5orf35 chr5 ENCODE exon 56242496 56242879 . + . Parent=gene1960 ### chr5 ENCODE gene 56251186 56283702 . - . ID=gene1961;Name=AC008937.5-003;name2=MIER3 chr5 ENCODE exon 56251186 56255169 . - . Parent=gene1961 chr5 ENCODE CDS 56254712 56255169 . - 2 Parent=gene1961 chr5 ENCODE exon 56255275 56255417 . - . Parent=gene1961 chr5 ENCODE CDS 56255275 56255417 . - 1 Parent=gene1961 chr5 ENCODE exon 56255499 56255626 . - . Parent=gene1961 chr5 ENCODE CDS 56255499 56255626 . - 0 Parent=gene1961 chr5 ENCODE exon 56260351 56260445 . - . Parent=gene1961 chr5 ENCODE CDS 56260351 56260445 . - 2 Parent=gene1961 chr5 ENCODE exon 56262248 56262329 . - . Parent=gene1961 chr5 ENCODE CDS 56262248 56262329 . - 0 Parent=gene1961 chr5 ENCODE exon 56264831 56264982 . - . Parent=gene1961 chr5 ENCODE CDS 56264831 56264982 . - 2 Parent=gene1961 chr5 ENCODE exon 56267012 56267084 . - . Parent=gene1961 chr5 ENCODE CDS 56267012 56267084 . - 0 Parent=gene1961 chr5 ENCODE exon 56267250 56267335 . - . Parent=gene1961 chr5 ENCODE CDS 56267250 56267335 . - 2 Parent=gene1961 chr5 ENCODE exon 56269162 56269282 . - . Parent=gene1961 chr5 ENCODE CDS 56269162 56269282 . - 0 Parent=gene1961 chr5 ENCODE exon 56270467 56270601 . - . Parent=gene1961 chr5 ENCODE CDS 56270467 56270601 . - 0 Parent=gene1961 chr5 ENCODE exon 56278510 56278670 . - . Parent=gene1961 chr5 ENCODE CDS 56278510 56278670 . - 2 Parent=gene1961 chr5 ENCODE exon 56282212 56282236 . - . Parent=gene1961 chr5 ENCODE CDS 56282212 56282236 . - 0 Parent=gene1961 chr5 ENCODE CDS 56283678 56283686 . - 0 Parent=gene1961 chr5 ENCODE exon 56283678 56283702 . - . Parent=gene1961 ### chr5 ENCODE gene 56251187 56283709 . - . ID=gene1962;name2=MIER3;Name=AC008937.5-001 chr5 ENCODE exon 56251187 56255169 . - . Parent=gene1962 chr5 ENCODE CDS 56254712 56255169 . - 2 Parent=gene1962 chr5 ENCODE exon 56255275 56255417 . - . Parent=gene1962 chr5 ENCODE CDS 56255275 56255417 . - 1 Parent=gene1962 chr5 ENCODE exon 56255499 56255626 . - . Parent=gene1962 chr5 ENCODE CDS 56255499 56255626 . - 0 Parent=gene1962 chr5 ENCODE exon 56260351 56260442 . - . Parent=gene1962 chr5 ENCODE CDS 56260351 56260442 . - 2 Parent=gene1962 chr5 ENCODE exon 56262248 56262329 . - . Parent=gene1962 chr5 ENCODE CDS 56262248 56262329 . - 0 Parent=gene1962 chr5 ENCODE exon 56264831 56264982 . - . Parent=gene1962 chr5 ENCODE CDS 56264831 56264982 . - 2 Parent=gene1962 chr5 ENCODE exon 56267012 56267084 . - . Parent=gene1962 chr5 ENCODE CDS 56267012 56267084 . - 0 Parent=gene1962 chr5 ENCODE exon 56267250 56267335 . - . Parent=gene1962 chr5 ENCODE CDS 56267250 56267335 . - 2 Parent=gene1962 chr5 ENCODE exon 56269162 56269282 . - . Parent=gene1962 chr5 ENCODE CDS 56269162 56269282 . - 0 Parent=gene1962 chr5 ENCODE exon 56270467 56270601 . - . Parent=gene1962 chr5 ENCODE CDS 56270467 56270601 . - 0 Parent=gene1962 chr5 ENCODE exon 56278510 56278655 . - . Parent=gene1962 chr5 ENCODE CDS 56278510 56278655 . - 2 Parent=gene1962 chr5 ENCODE exon 56282212 56282236 . - . Parent=gene1962 chr5 ENCODE CDS 56282212 56282236 . - 0 Parent=gene1962 chr5 ENCODE CDS 56283678 56283686 . - 0 Parent=gene1962 chr5 ENCODE exon 56283678 56283709 . - . Parent=gene1962 ### chr5 ENCODE gene 56251188 56283697 . - . ID=gene1963;Name=AC008937.5-004;name2=MIER3 chr5 ENCODE exon 56251188 56255169 . - . Parent=gene1963 chr5 ENCODE CDS 56254712 56255169 . - 2 Parent=gene1963 chr5 ENCODE exon 56255275 56255417 . - . Parent=gene1963 chr5 ENCODE CDS 56255275 56255417 . - 1 Parent=gene1963 chr5 ENCODE exon 56255499 56255626 . - . Parent=gene1963 chr5 ENCODE CDS 56255499 56255626 . - 0 Parent=gene1963 chr5 ENCODE exon 56260351 56260445 . - . Parent=gene1963 chr5 ENCODE CDS 56260351 56260445 . - 2 Parent=gene1963 chr5 ENCODE exon 56262248 56262329 . - . Parent=gene1963 chr5 ENCODE CDS 56262248 56262329 . - 0 Parent=gene1963 chr5 ENCODE exon 56264831 56264982 . - . Parent=gene1963 chr5 ENCODE CDS 56264831 56264982 . - 2 Parent=gene1963 chr5 ENCODE exon 56267012 56267084 . - . Parent=gene1963 chr5 ENCODE CDS 56267012 56267084 . - 0 Parent=gene1963 chr5 ENCODE exon 56267250 56267335 . - . Parent=gene1963 chr5 ENCODE CDS 56267250 56267335 . - 2 Parent=gene1963 chr5 ENCODE exon 56269162 56269282 . - . Parent=gene1963 chr5 ENCODE CDS 56269162 56269282 . - 0 Parent=gene1963 chr5 ENCODE exon 56270467 56270601 . - . Parent=gene1963 chr5 ENCODE CDS 56270467 56270601 . - 0 Parent=gene1963 chr5 ENCODE exon 56278510 56278655 . - . Parent=gene1963 chr5 ENCODE CDS 56278510 56278655 . - 2 Parent=gene1963 chr5 ENCODE exon 56282212 56282236 . - . Parent=gene1963 chr5 ENCODE CDS 56282212 56282236 . - 0 Parent=gene1963 chr5 ENCODE CDS 56283678 56283686 . - 0 Parent=gene1963 chr5 ENCODE exon 56283678 56283697 . - . Parent=gene1963 ### chr5 ENCODE gene 56251188 56283706 . - . ID=gene1964;Name=AC008937.5-002;name2=MIER3 chr5 ENCODE exon 56251188 56255169 . - . Parent=gene1964 chr5 ENCODE exon 56255275 56255417 . - . Parent=gene1964 chr5 ENCODE exon 56255499 56255626 . - . Parent=gene1964 chr5 ENCODE exon 56260351 56260445 . - . Parent=gene1964 chr5 ENCODE exon 56262248 56262329 . - . Parent=gene1964 chr5 ENCODE exon 56264831 56264982 . - . Parent=gene1964 chr5 ENCODE exon 56267012 56267084 . - . Parent=gene1964 chr5 ENCODE exon 56267250 56267335 . - . Parent=gene1964 chr5 ENCODE exon 56269162 56269282 . - . Parent=gene1964 chr5 ENCODE exon 56269880 56269922 . - . Parent=gene1964 chr5 ENCODE exon 56270467 56270601 . - . Parent=gene1964 chr5 ENCODE exon 56278510 56278655 . - . Parent=gene1964 chr5 ENCODE exon 56282212 56282236 . - . Parent=gene1964 chr5 ENCODE exon 56283678 56283706 . - . Parent=gene1964 ### chr5 ENCODE gene 56254168 56272717 . - . ID=gene1965;Name=AC008937.5-005;name2=MIER3 chr5 ENCODE exon 56254168 56255169 . - . Parent=gene1965 chr5 ENCODE exon 56255275 56255417 . - . Parent=gene1965 chr5 ENCODE exon 56255499 56255626 . - . Parent=gene1965 chr5 ENCODE exon 56260351 56260445 . - . Parent=gene1965 chr5 ENCODE exon 56262248 56262329 . - . Parent=gene1965 chr5 ENCODE exon 56264831 56264982 . - . Parent=gene1965 chr5 ENCODE exon 56267012 56267084 . - . Parent=gene1965 chr5 ENCODE exon 56267250 56267335 . - . Parent=gene1965 chr5 ENCODE exon 56269162 56269282 . - . Parent=gene1965 chr5 ENCODE exon 56270467 56270601 . - . Parent=gene1965 chr5 ENCODE exon 56272583 56272717 . - . Parent=gene1965 ### chr5 ENCODE gene 56267255 56283775 . - . ID=gene1966;Name=AC008937.5-008;name2=MIER3 chr5 ENCODE exon 56267255 56267335 . - . Parent=gene1966 chr5 ENCODE CDS 56267255 56267335 . - 2 Parent=gene1966 chr5 ENCODE exon 56269162 56269282 . - . Parent=gene1966 chr5 ENCODE CDS 56269162 56269282 . - 0 Parent=gene1966 chr5 ENCODE exon 56270467 56270601 . - . Parent=gene1966 chr5 ENCODE CDS 56270467 56270601 . - 0 Parent=gene1966 chr5 ENCODE CDS 56278510 56278608 . - 0 Parent=gene1966 chr5 ENCODE exon 56278510 56278655 . - . Parent=gene1966 chr5 ENCODE exon 56282212 56282236 . - . Parent=gene1966 chr5 ENCODE exon 56283695 56283775 . - . Parent=gene1966 ### chr5 ENCODE gene 56267328 56270555 . - . ID=gene1967;Name=AC008937.5-007;name2=MIER3 chr5 ENCODE exon 56267328 56267335 . - . Parent=gene1967 chr5 ENCODE exon 56268478 56268520 . - . Parent=gene1967 chr5 ENCODE exon 56269162 56269282 . - . Parent=gene1967 chr5 ENCODE exon 56269880 56269922 . - . Parent=gene1967 chr5 ENCODE exon 56270467 56270555 . - . Parent=gene1967 ### chr5 ENCODE gene 56270398 56283696 . - . ID=gene1968;Name=AC008937.5-006;name2=MIER3 chr5 ENCODE exon 56270398 56270601 . - . Parent=gene1968 chr5 ENCODE exon 56278510 56278655 . - . Parent=gene1968 chr5 ENCODE exon 56282212 56282236 . - . Parent=gene1968 chr5 ENCODE exon 56283678 56283696 . - . Parent=gene1968 ### chr5 ENCODE gene 56278615 56303259 . - . ID=gene1969;Name=AC008937.5-010;name2=MIER3 chr5 ENCODE exon 56278615 56278655 . - . Parent=gene1969 chr5 ENCODE exon 56282212 56282236 . - . Parent=gene1969 chr5 ENCODE exon 56303217 56303259 . - . Parent=gene1969 ### chr5 ENCODE gene 56278615 56303259 . - . ID=gene1970;Name=AC008937.5-009;name2=MIER3 chr5 ENCODE exon 56278615 56278655 . - . Parent=gene1970 chr5 ENCODE exon 56282212 56282236 . - . Parent=gene1970 chr5 ENCODE exon 56290970 56291104 . - . Parent=gene1970 chr5 ENCODE exon 56303217 56303259 . - . Parent=gene1970 ### chr5 ENCODE gene 56278615 56303259 . - . ID=gene1971;Name=AC008937.5-011;name2=MIER3 chr5 ENCODE exon 56278615 56278655 . - . Parent=gene1971 chr5 ENCODE CDS 56278615 56278655 . - 2 Parent=gene1971 chr5 ENCODE CDS 56290970 56291000 . - 0 Parent=gene1971 chr5 ENCODE exon 56290970 56291104 . - . Parent=gene1971 chr5 ENCODE exon 56303217 56303259 . - . Parent=gene1971 ### chr5 ENCODE gene 131285414 131285530 . - . ID=gene1972;Name=AC034228.1-013;name2=ACSL6 chr5 ENCODE exon 131285414 131285530 . - . Parent=gene1972 ### chr5 ENCODE gene 131285414 131308384 . - . ID=gene1973;Name=AC034228.1-015;name2=ACSL6 chr5 ENCODE exon 131285414 131285533 . - . Parent=gene1973 chr5 ENCODE exon 131297105 131297233 . - . Parent=gene1973 chr5 ENCODE exon 131306227 131306287 . - . Parent=gene1973 chr5 ENCODE exon 131308257 131308384 . - . Parent=gene1973 ### chr5 ENCODE gene 131285414 131357870 . - . ID=gene1974;Name=AC034228.1-006;name2=ACSL6 chr5 ENCODE exon 131285414 131285533 . - . Parent=gene1974 chr5 ENCODE exon 131297105 131297233 . - . Parent=gene1974 chr5 ENCODE exon 131306227 131306287 . - . Parent=gene1974 chr5 ENCODE exon 131308257 131308344 . - . Parent=gene1974 chr5 ENCODE exon 131308748 131308841 . - . Parent=gene1974 chr5 ENCODE exon 131311176 131311254 . - . Parent=gene1974 chr5 ENCODE exon 131323128 131323199 . - . Parent=gene1974 chr5 ENCODE exon 131324112 131324213 . - . Parent=gene1974 chr5 ENCODE exon 131326127 131326270 . - . Parent=gene1974 chr5 ENCODE exon 131330008 131330124 . - . Parent=gene1974 chr5 ENCODE exon 131331532 131331620 . - . Parent=gene1974 chr5 ENCODE exon 131333720 131333792 . - . Parent=gene1974 chr5 ENCODE exon 131335142 131335237 . - . Parent=gene1974 chr5 ENCODE exon 131336316 131336450 . - . Parent=gene1974 chr5 ENCODE exon 131336858 131336992 . - . Parent=gene1974 chr5 ENCODE exon 131338350 131338427 . - . Parent=gene1974 chr5 ENCODE exon 131340240 131340313 . - . Parent=gene1974 chr5 ENCODE exon 131348999 131349050 . - . Parent=gene1974 chr5 ENCODE exon 131350414 131350446 . - . Parent=gene1974 chr5 ENCODE exon 131351640 131351818 . - . Parent=gene1974 chr5 ENCODE exon 131352397 131352496 . - . Parent=gene1974 chr5 ENCODE exon 131352999 131353100 . - . Parent=gene1974 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1974 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1974 chr5 ENCODE exon 131357623 131357870 . - . Parent=gene1974 ### chr5 ENCODE gene 131313565 131375254 . - . ID=gene1975;name2=ACSL6;Name=AC034228.1-001 chr5 ENCODE exon 131313565 131317963 . - . Parent=gene1975 chr5 ENCODE CDS 131317826 131317963 . - 0 Parent=gene1975 chr5 ENCODE exon 131323128 131323199 . - . Parent=gene1975 chr5 ENCODE CDS 131323128 131323199 . - 0 Parent=gene1975 chr5 ENCODE exon 131324112 131324213 . - . Parent=gene1975 chr5 ENCODE CDS 131324112 131324213 . - 0 Parent=gene1975 chr5 ENCODE exon 131326127 131326270 . - . Parent=gene1975 chr5 ENCODE CDS 131326127 131326270 . - 0 Parent=gene1975 chr5 ENCODE exon 131330008 131330124 . - . Parent=gene1975 chr5 ENCODE CDS 131330008 131330124 . - 0 Parent=gene1975 chr5 ENCODE exon 131331532 131331620 . - . Parent=gene1975 chr5 ENCODE CDS 131331532 131331620 . - 2 Parent=gene1975 chr5 ENCODE exon 131333720 131333792 . - . Parent=gene1975 chr5 ENCODE CDS 131333720 131333792 . - 0 Parent=gene1975 chr5 ENCODE exon 131335142 131335237 . - . Parent=gene1975 chr5 ENCODE CDS 131335142 131335237 . - 0 Parent=gene1975 chr5 ENCODE exon 131336316 131336450 . - . Parent=gene1975 chr5 ENCODE CDS 131336316 131336450 . - 0 Parent=gene1975 chr5 ENCODE exon 131336858 131336992 . - . Parent=gene1975 chr5 ENCODE CDS 131336858 131336992 . - 0 Parent=gene1975 chr5 ENCODE exon 131338485 131338562 . - . Parent=gene1975 chr5 ENCODE CDS 131338485 131338562 . - 0 Parent=gene1975 chr5 ENCODE exon 131340240 131340313 . - . Parent=gene1975 chr5 ENCODE CDS 131340240 131340313 . - 2 Parent=gene1975 chr5 ENCODE exon 131348999 131349050 . - . Parent=gene1975 chr5 ENCODE CDS 131348999 131349050 . - 0 Parent=gene1975 chr5 ENCODE exon 131350414 131350446 . - . Parent=gene1975 chr5 ENCODE CDS 131350414 131350446 . - 0 Parent=gene1975 chr5 ENCODE exon 131351640 131351818 . - . Parent=gene1975 chr5 ENCODE CDS 131351640 131351818 . - 2 Parent=gene1975 chr5 ENCODE exon 131352397 131352496 . - . Parent=gene1975 chr5 ENCODE CDS 131352397 131352496 . - 0 Parent=gene1975 chr5 ENCODE exon 131352999 131353100 . - . Parent=gene1975 chr5 ENCODE CDS 131352999 131353100 . - 0 Parent=gene1975 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1975 chr5 ENCODE CDS 131353692 131353756 . - 2 Parent=gene1975 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1975 chr5 ENCODE CDS 131354445 131354559 . - 0 Parent=gene1975 chr5 ENCODE exon 131357623 131357843 . - . Parent=gene1975 chr5 ENCODE CDS 131357623 131357843 . - 2 Parent=gene1975 chr5 ENCODE CDS 131375097 131375145 . - 0 Parent=gene1975 chr5 ENCODE exon 131375097 131375254 . - . Parent=gene1975 ### chr5 ENCODE gene 131317490 131375482 . - . ID=gene1976;Name=AC034228.1-003;name2=ACSL6 chr5 ENCODE exon 131317490 131317963 . - . Parent=gene1976 chr5 ENCODE CDS 131317826 131317963 . - 0 Parent=gene1976 chr5 ENCODE exon 131323128 131323199 . - . Parent=gene1976 chr5 ENCODE CDS 131323128 131323199 . - 0 Parent=gene1976 chr5 ENCODE exon 131324112 131324213 . - . Parent=gene1976 chr5 ENCODE CDS 131324112 131324213 . - 0 Parent=gene1976 chr5 ENCODE exon 131326127 131326270 . - . Parent=gene1976 chr5 ENCODE CDS 131326127 131326270 . - 0 Parent=gene1976 chr5 ENCODE exon 131330008 131330124 . - . Parent=gene1976 chr5 ENCODE CDS 131330008 131330124 . - 0 Parent=gene1976 chr5 ENCODE exon 131331532 131331620 . - . Parent=gene1976 chr5 ENCODE CDS 131331532 131331620 . - 2 Parent=gene1976 chr5 ENCODE exon 131333720 131333792 . - . Parent=gene1976 chr5 ENCODE CDS 131333720 131333792 . - 0 Parent=gene1976 chr5 ENCODE exon 131335142 131335237 . - . Parent=gene1976 chr5 ENCODE CDS 131335142 131335237 . - 0 Parent=gene1976 chr5 ENCODE exon 131336316 131336450 . - . Parent=gene1976 chr5 ENCODE CDS 131336316 131336450 . - 0 Parent=gene1976 chr5 ENCODE exon 131336858 131336950 . - . Parent=gene1976 chr5 ENCODE CDS 131336858 131336950 . - 0 Parent=gene1976 chr5 ENCODE exon 131340240 131340313 . - . Parent=gene1976 chr5 ENCODE CDS 131340240 131340313 . - 2 Parent=gene1976 chr5 ENCODE exon 131348999 131349050 . - . Parent=gene1976 chr5 ENCODE CDS 131348999 131349050 . - 0 Parent=gene1976 chr5 ENCODE exon 131350414 131350446 . - . Parent=gene1976 chr5 ENCODE CDS 131350414 131350446 . - 0 Parent=gene1976 chr5 ENCODE exon 131351640 131351818 . - . Parent=gene1976 chr5 ENCODE CDS 131351640 131351818 . - 2 Parent=gene1976 chr5 ENCODE exon 131352397 131352496 . - . Parent=gene1976 chr5 ENCODE CDS 131352397 131352496 . - 0 Parent=gene1976 chr5 ENCODE exon 131352999 131353100 . - . Parent=gene1976 chr5 ENCODE CDS 131352999 131353100 . - 0 Parent=gene1976 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1976 chr5 ENCODE CDS 131353692 131353756 . - 2 Parent=gene1976 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1976 chr5 ENCODE CDS 131354445 131354559 . - 0 Parent=gene1976 chr5 ENCODE CDS 131357728 131357817 . - 0 Parent=gene1976 chr5 ENCODE exon 131357728 131357843 . - . Parent=gene1976 chr5 ENCODE exon 131375413 131375482 . - . Parent=gene1976 ### chr5 ENCODE gene 131317494 131375205 . - . ID=gene1977;Name=AC034228.1-009;name2=ACSL6 chr5 ENCODE exon 131317494 131317963 . - . Parent=gene1977 chr5 ENCODE CDS 131317826 131317963 . - 0 Parent=gene1977 chr5 ENCODE exon 131323128 131323199 . - . Parent=gene1977 chr5 ENCODE CDS 131323128 131323199 . - 0 Parent=gene1977 chr5 ENCODE exon 131324112 131324213 . - . Parent=gene1977 chr5 ENCODE CDS 131324112 131324213 . - 0 Parent=gene1977 chr5 ENCODE exon 131326127 131326270 . - . Parent=gene1977 chr5 ENCODE CDS 131326127 131326270 . - 0 Parent=gene1977 chr5 ENCODE exon 131330008 131330124 . - . Parent=gene1977 chr5 ENCODE CDS 131330008 131330124 . - 0 Parent=gene1977 chr5 ENCODE exon 131331532 131331620 . - . Parent=gene1977 chr5 ENCODE CDS 131331532 131331620 . - 2 Parent=gene1977 chr5 ENCODE exon 131333720 131333792 . - . Parent=gene1977 chr5 ENCODE CDS 131333720 131333792 . - 0 Parent=gene1977 chr5 ENCODE exon 131335142 131335237 . - . Parent=gene1977 chr5 ENCODE CDS 131335142 131335237 . - 0 Parent=gene1977 chr5 ENCODE exon 131336316 131336450 . - . Parent=gene1977 chr5 ENCODE CDS 131336316 131336450 . - 0 Parent=gene1977 chr5 ENCODE exon 131336858 131336992 . - . Parent=gene1977 chr5 ENCODE CDS 131336858 131336992 . - 0 Parent=gene1977 chr5 ENCODE exon 131338350 131338427 . - . Parent=gene1977 chr5 ENCODE CDS 131338350 131338427 . - 0 Parent=gene1977 chr5 ENCODE exon 131340240 131340313 . - . Parent=gene1977 chr5 ENCODE CDS 131340240 131340313 . - 2 Parent=gene1977 chr5 ENCODE exon 131348999 131349050 . - . Parent=gene1977 chr5 ENCODE CDS 131348999 131349050 . - 0 Parent=gene1977 chr5 ENCODE exon 131350414 131350446 . - . Parent=gene1977 chr5 ENCODE CDS 131350414 131350446 . - 0 Parent=gene1977 chr5 ENCODE exon 131351640 131351818 . - . Parent=gene1977 chr5 ENCODE CDS 131351640 131351818 . - 2 Parent=gene1977 chr5 ENCODE exon 131352397 131352496 . - . Parent=gene1977 chr5 ENCODE CDS 131352397 131352496 . - 0 Parent=gene1977 chr5 ENCODE exon 131352999 131353100 . - . Parent=gene1977 chr5 ENCODE CDS 131352999 131353100 . - 0 Parent=gene1977 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1977 chr5 ENCODE CDS 131353692 131353756 . - 2 Parent=gene1977 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1977 chr5 ENCODE CDS 131354445 131354559 . - 0 Parent=gene1977 chr5 ENCODE exon 131357623 131357843 . - . Parent=gene1977 chr5 ENCODE CDS 131357623 131357843 . - 2 Parent=gene1977 chr5 ENCODE CDS 131375097 131375145 . - 0 Parent=gene1977 chr5 ENCODE exon 131375097 131375205 . - . Parent=gene1977 ### chr5 ENCODE gene 131317496 131337627 . - . ID=gene1978;Name=AC034228.1-010;name2=ACSL6 chr5 ENCODE exon 131317496 131317963 . - . Parent=gene1978 chr5 ENCODE exon 131323128 131323199 . - . Parent=gene1978 chr5 ENCODE exon 131324112 131324213 . - . Parent=gene1978 chr5 ENCODE exon 131326127 131326270 . - . Parent=gene1978 chr5 ENCODE exon 131330008 131330124 . - . Parent=gene1978 chr5 ENCODE exon 131331532 131331620 . - . Parent=gene1978 chr5 ENCODE exon 131333720 131333792 . - . Parent=gene1978 chr5 ENCODE exon 131335142 131335237 . - . Parent=gene1978 chr5 ENCODE exon 131336316 131336450 . - . Parent=gene1978 chr5 ENCODE exon 131336858 131337627 . - . Parent=gene1978 ### chr5 ENCODE gene 131317497 131375678 . - . ID=gene1979;Name=AC034228.1-002;name2=ACSL6 chr5 ENCODE exon 131317497 131317963 . - . Parent=gene1979 chr5 ENCODE CDS 131317826 131317963 . - 0 Parent=gene1979 chr5 ENCODE exon 131323128 131323199 . - . Parent=gene1979 chr5 ENCODE CDS 131323128 131323199 . - 0 Parent=gene1979 chr5 ENCODE exon 131324112 131324213 . - . Parent=gene1979 chr5 ENCODE CDS 131324112 131324213 . - 0 Parent=gene1979 chr5 ENCODE exon 131326127 131326270 . - . Parent=gene1979 chr5 ENCODE CDS 131326127 131326270 . - 0 Parent=gene1979 chr5 ENCODE exon 131330008 131330124 . - . Parent=gene1979 chr5 ENCODE CDS 131330008 131330124 . - 0 Parent=gene1979 chr5 ENCODE exon 131331532 131331620 . - . Parent=gene1979 chr5 ENCODE CDS 131331532 131331620 . - 2 Parent=gene1979 chr5 ENCODE exon 131333720 131333792 . - . Parent=gene1979 chr5 ENCODE CDS 131333720 131333792 . - 0 Parent=gene1979 chr5 ENCODE exon 131335142 131335237 . - . Parent=gene1979 chr5 ENCODE CDS 131335142 131335237 . - 0 Parent=gene1979 chr5 ENCODE exon 131336316 131336450 . - . Parent=gene1979 chr5 ENCODE CDS 131336316 131336450 . - 0 Parent=gene1979 chr5 ENCODE exon 131336858 131336992 . - . Parent=gene1979 chr5 ENCODE CDS 131336858 131336992 . - 0 Parent=gene1979 chr5 ENCODE exon 131338485 131338562 . - . Parent=gene1979 chr5 ENCODE CDS 131338485 131338562 . - 0 Parent=gene1979 chr5 ENCODE exon 131340240 131340313 . - . Parent=gene1979 chr5 ENCODE CDS 131340240 131340313 . - 2 Parent=gene1979 chr5 ENCODE exon 131348999 131349050 . - . Parent=gene1979 chr5 ENCODE CDS 131348999 131349050 . - 0 Parent=gene1979 chr5 ENCODE exon 131350414 131350446 . - . Parent=gene1979 chr5 ENCODE CDS 131350414 131350446 . - 0 Parent=gene1979 chr5 ENCODE exon 131351640 131351818 . - . Parent=gene1979 chr5 ENCODE CDS 131351640 131351818 . - 2 Parent=gene1979 chr5 ENCODE exon 131352397 131352496 . - . Parent=gene1979 chr5 ENCODE CDS 131352397 131352496 . - 0 Parent=gene1979 chr5 ENCODE exon 131352999 131353100 . - . Parent=gene1979 chr5 ENCODE CDS 131352999 131353100 . - 0 Parent=gene1979 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1979 chr5 ENCODE CDS 131353692 131353756 . - 2 Parent=gene1979 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1979 chr5 ENCODE CDS 131354445 131354559 . - 0 Parent=gene1979 chr5 ENCODE exon 131357623 131357843 . - . Parent=gene1979 chr5 ENCODE CDS 131357623 131357843 . - 2 Parent=gene1979 chr5 ENCODE CDS 131375506 131375512 . - 0 Parent=gene1979 chr5 ENCODE exon 131375506 131375678 . - . Parent=gene1979 ### chr5 ENCODE gene 131317499 131363216 . - . ID=gene1980;Name=AC034228.1-008;name2=ACSL6 chr5 ENCODE exon 131317499 131317963 . - . Parent=gene1980 chr5 ENCODE CDS 131317826 131317963 . - 0 Parent=gene1980 chr5 ENCODE exon 131323128 131323199 . - . Parent=gene1980 chr5 ENCODE CDS 131323128 131323199 . - 0 Parent=gene1980 chr5 ENCODE exon 131324112 131324213 . - . Parent=gene1980 chr5 ENCODE CDS 131324112 131324213 . - 0 Parent=gene1980 chr5 ENCODE exon 131326127 131326270 . - . Parent=gene1980 chr5 ENCODE CDS 131326127 131326270 . - 0 Parent=gene1980 chr5 ENCODE exon 131330008 131330124 . - . Parent=gene1980 chr5 ENCODE CDS 131330008 131330124 . - 0 Parent=gene1980 chr5 ENCODE exon 131331532 131331620 . - . Parent=gene1980 chr5 ENCODE CDS 131331532 131331620 . - 2 Parent=gene1980 chr5 ENCODE exon 131333720 131333792 . - . Parent=gene1980 chr5 ENCODE CDS 131333720 131333792 . - 0 Parent=gene1980 chr5 ENCODE exon 131335142 131335237 . - . Parent=gene1980 chr5 ENCODE CDS 131335142 131335237 . - 0 Parent=gene1980 chr5 ENCODE exon 131336316 131336450 . - . Parent=gene1980 chr5 ENCODE CDS 131336316 131336450 . - 0 Parent=gene1980 chr5 ENCODE exon 131336858 131336992 . - . Parent=gene1980 chr5 ENCODE CDS 131336858 131336992 . - 0 Parent=gene1980 chr5 ENCODE exon 131338350 131338427 . - . Parent=gene1980 chr5 ENCODE CDS 131338350 131338427 . - 0 Parent=gene1980 chr5 ENCODE exon 131340240 131340313 . - . Parent=gene1980 chr5 ENCODE CDS 131340240 131340313 . - 2 Parent=gene1980 chr5 ENCODE exon 131348999 131349050 . - . Parent=gene1980 chr5 ENCODE CDS 131348999 131349050 . - 0 Parent=gene1980 chr5 ENCODE exon 131350414 131350446 . - . Parent=gene1980 chr5 ENCODE CDS 131350414 131350446 . - 0 Parent=gene1980 chr5 ENCODE exon 131351640 131351818 . - . Parent=gene1980 chr5 ENCODE CDS 131351640 131351818 . - 2 Parent=gene1980 chr5 ENCODE exon 131352397 131352496 . - . Parent=gene1980 chr5 ENCODE CDS 131352397 131352496 . - 0 Parent=gene1980 chr5 ENCODE exon 131352999 131353100 . - . Parent=gene1980 chr5 ENCODE CDS 131352999 131353100 . - 0 Parent=gene1980 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1980 chr5 ENCODE CDS 131353692 131353756 . - 2 Parent=gene1980 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1980 chr5 ENCODE CDS 131354445 131354559 . - 0 Parent=gene1980 chr5 ENCODE CDS 131357623 131357817 . - 0 Parent=gene1980 chr5 ENCODE exon 131357623 131357843 . - . Parent=gene1980 chr5 ENCODE exon 131363006 131363216 . - . Parent=gene1980 ### chr5 ENCODE gene 131317526 131358171 . - . ID=gene1981;Name=AC034228.1-004;name2=ACSL6 chr5 ENCODE exon 131317526 131317963 . - . Parent=gene1981 chr5 ENCODE CDS 131317826 131317963 . - 0 Parent=gene1981 chr5 ENCODE exon 131323128 131323199 . - . Parent=gene1981 chr5 ENCODE CDS 131323128 131323199 . - 0 Parent=gene1981 chr5 ENCODE exon 131324112 131324213 . - . Parent=gene1981 chr5 ENCODE CDS 131324112 131324213 . - 0 Parent=gene1981 chr5 ENCODE exon 131326127 131326270 . - . Parent=gene1981 chr5 ENCODE CDS 131326127 131326270 . - 0 Parent=gene1981 chr5 ENCODE exon 131330008 131330124 . - . Parent=gene1981 chr5 ENCODE CDS 131330008 131330124 . - 0 Parent=gene1981 chr5 ENCODE exon 131331532 131331620 . - . Parent=gene1981 chr5 ENCODE CDS 131331532 131331620 . - 2 Parent=gene1981 chr5 ENCODE exon 131333720 131333792 . - . Parent=gene1981 chr5 ENCODE CDS 131333720 131333792 . - 0 Parent=gene1981 chr5 ENCODE exon 131335142 131335237 . - . Parent=gene1981 chr5 ENCODE CDS 131335142 131335237 . - 0 Parent=gene1981 chr5 ENCODE exon 131336316 131336450 . - . Parent=gene1981 chr5 ENCODE CDS 131336316 131336450 . - 0 Parent=gene1981 chr5 ENCODE exon 131336858 131336992 . - . Parent=gene1981 chr5 ENCODE CDS 131336858 131336992 . - 0 Parent=gene1981 chr5 ENCODE exon 131338485 131338562 . - . Parent=gene1981 chr5 ENCODE CDS 131338485 131338562 . - 0 Parent=gene1981 chr5 ENCODE exon 131340240 131340313 . - . Parent=gene1981 chr5 ENCODE CDS 131340240 131340313 . - 2 Parent=gene1981 chr5 ENCODE exon 131348999 131349050 . - . Parent=gene1981 chr5 ENCODE CDS 131348999 131349050 . - 0 Parent=gene1981 chr5 ENCODE exon 131350414 131350446 . - . Parent=gene1981 chr5 ENCODE CDS 131350414 131350446 . - 0 Parent=gene1981 chr5 ENCODE exon 131351640 131351818 . - . Parent=gene1981 chr5 ENCODE CDS 131351640 131351818 . - 2 Parent=gene1981 chr5 ENCODE exon 131352397 131352496 . - . Parent=gene1981 chr5 ENCODE CDS 131352397 131352496 . - 0 Parent=gene1981 chr5 ENCODE exon 131352999 131353100 . - . Parent=gene1981 chr5 ENCODE CDS 131352999 131353100 . - 0 Parent=gene1981 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1981 chr5 ENCODE CDS 131353692 131353756 . - 2 Parent=gene1981 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1981 chr5 ENCODE CDS 131354445 131354559 . - 0 Parent=gene1981 chr5 ENCODE CDS 131357623 131357817 . - 0 Parent=gene1981 chr5 ENCODE exon 131357623 131357843 . - . Parent=gene1981 chr5 ENCODE exon 131358044 131358171 . - . Parent=gene1981 ### chr5 ENCODE gene 131336379 131357845 . - . ID=gene1982;Name=AC034228.1-005;name2=ACSL6 chr5 ENCODE exon 131336379 131336450 . - . Parent=gene1982 chr5 ENCODE CDS 131336379 131336450 . - 2 Parent=gene1982 chr5 ENCODE exon 131336858 131336992 . - . Parent=gene1982 chr5 ENCODE CDS 131336858 131336992 . - 2 Parent=gene1982 chr5 ENCODE exon 131338350 131338427 . - . Parent=gene1982 chr5 ENCODE CDS 131338350 131338427 . - 2 Parent=gene1982 chr5 ENCODE exon 131340240 131340313 . - . Parent=gene1982 chr5 ENCODE CDS 131340240 131340313 . - 1 Parent=gene1982 chr5 ENCODE exon 131348999 131349050 . - . Parent=gene1982 chr5 ENCODE CDS 131348999 131349050 . - 2 Parent=gene1982 chr5 ENCODE exon 131350414 131350446 . - . Parent=gene1982 chr5 ENCODE CDS 131350414 131350446 . - 2 Parent=gene1982 chr5 ENCODE exon 131351640 131351818 . - . Parent=gene1982 chr5 ENCODE CDS 131351640 131351818 . - 1 Parent=gene1982 chr5 ENCODE exon 131352397 131352496 . - . Parent=gene1982 chr5 ENCODE CDS 131352397 131352496 . - 2 Parent=gene1982 chr5 ENCODE exon 131352999 131353100 . - . Parent=gene1982 chr5 ENCODE CDS 131352999 131353100 . - 2 Parent=gene1982 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1982 chr5 ENCODE CDS 131353692 131353756 . - 1 Parent=gene1982 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1982 chr5 ENCODE CDS 131354445 131354559 . - 2 Parent=gene1982 chr5 ENCODE exon 131357728 131357845 . - . Parent=gene1982 chr5 ENCODE CDS 131357728 131357845 . - 0 Parent=gene1982 ### chr5 ENCODE gene 131345451 131351682 . - . ID=gene1983;Name=AC034228.1-007;name2=ACSL6 chr5 ENCODE exon 131345451 131349050 . - . Parent=gene1983 chr5 ENCODE exon 131350414 131350446 . - . Parent=gene1983 chr5 ENCODE exon 131351640 131351682 . - . Parent=gene1983 ### chr5 ENCODE gene 131351757 131375495 . - . ID=gene1984;Name=AC034228.1-011;name2=ACSL6 chr5 ENCODE exon 131351757 131351818 . - . Parent=gene1984 chr5 ENCODE CDS 131351757 131351818 . - 2 Parent=gene1984 chr5 ENCODE exon 131352397 131352496 . - . Parent=gene1984 chr5 ENCODE CDS 131352397 131352496 . - 0 Parent=gene1984 chr5 ENCODE exon 131352999 131353100 . - . Parent=gene1984 chr5 ENCODE CDS 131352999 131353100 . - 0 Parent=gene1984 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1984 chr5 ENCODE CDS 131353692 131353756 . - 2 Parent=gene1984 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1984 chr5 ENCODE CDS 131354445 131354559 . - 0 Parent=gene1984 chr5 ENCODE CDS 131357623 131357817 . - 0 Parent=gene1984 chr5 ENCODE exon 131357623 131357843 . - . Parent=gene1984 chr5 ENCODE exon 131375362 131375495 . - . Parent=gene1984 ### chr5 ENCODE gene 131353018 131358293 . - . ID=gene1985;Name=AC034228.1-012;name2=ACSL6 chr5 ENCODE exon 131353018 131353100 . - . Parent=gene1985 chr5 ENCODE CDS 131353018 131353100 . - 0 Parent=gene1985 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1985 chr5 ENCODE CDS 131353692 131353756 . - 2 Parent=gene1985 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1985 chr5 ENCODE CDS 131354445 131354559 . - 0 Parent=gene1985 chr5 ENCODE CDS 131357623 131357817 . - 0 Parent=gene1985 chr5 ENCODE exon 131357623 131358293 . - . Parent=gene1985 ### chr5 ENCODE gene 131353072 131375769 . - . ID=gene1986;Name=AC034228.1-017;name2=ACSL6 chr5 ENCODE exon 131353072 131353100 . - . Parent=gene1986 chr5 ENCODE CDS 131353072 131353100 . - 0 Parent=gene1986 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1986 chr5 ENCODE CDS 131353692 131353756 . - 2 Parent=gene1986 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1986 chr5 ENCODE CDS 131354445 131354559 . - 0 Parent=gene1986 chr5 ENCODE CDS 131357728 131357817 . - 0 Parent=gene1986 chr5 ENCODE exon 131357728 131357843 . - . Parent=gene1986 chr5 ENCODE exon 131375681 131375769 . - . Parent=gene1986 ### chr5 ENCODE gene 131353072 131375769 . - . ID=gene1987;name2=ACSL6;Name=AC034228.1-016 chr5 ENCODE exon 131353072 131353100 . - . Parent=gene1987 chr5 ENCODE CDS 131353072 131353100 . - 0 Parent=gene1987 chr5 ENCODE exon 131353692 131353756 . - . Parent=gene1987 chr5 ENCODE CDS 131353692 131353756 . - 2 Parent=gene1987 chr5 ENCODE exon 131354445 131354559 . - . Parent=gene1987 chr5 ENCODE CDS 131354445 131354559 . - 0 Parent=gene1987 chr5 ENCODE CDS 131357623 131357817 . - 0 Parent=gene1987 chr5 ENCODE exon 131357623 131357843 . - . Parent=gene1987 chr5 ENCODE exon 131375681 131375769 . - . Parent=gene1987 ### chr5 ENCODE gene 131424121 131426796 . + . ID=gene1988;Name=AC034228.5-001;name2=IL3 chr5 ENCODE exon 131424121 131424460 . + . Parent=gene1988 chr5 ENCODE CDS 131424299 131424460 . + 0 Parent=gene1988 chr5 ENCODE exon 131424559 131424600 . + . Parent=gene1988 chr5 ENCODE CDS 131424559 131424600 . + 0 Parent=gene1988 chr5 ENCODE exon 131425904 131425993 . + . Parent=gene1988 chr5 ENCODE CDS 131425904 131425993 . + 0 Parent=gene1988 chr5 ENCODE exon 131426118 131426159 . + . Parent=gene1988 chr5 ENCODE CDS 131426118 131426159 . + 0 Parent=gene1988 chr5 ENCODE CDS 131426261 131426383 . + 0 Parent=gene1988 chr5 ENCODE exon 131426261 131426796 . + . Parent=gene1988 ### chr5 ENCODE gene 131437382 131439758 . + . ID=gene1989;Name=AC034228.6-001;name2=CSF2 chr5 ENCODE exon 131437382 131437574 . + . Parent=gene1989 chr5 ENCODE CDS 131437416 131437574 . + 0 Parent=gene1989 chr5 ENCODE exon 131437673 131437714 . + . Parent=gene1989 chr5 ENCODE CDS 131437673 131437714 . + 0 Parent=gene1989 chr5 ENCODE exon 131438402 131438527 . + . Parent=gene1989 chr5 ENCODE CDS 131438402 131438527 . + 0 Parent=gene1989 chr5 ENCODE CDS 131439337 131439444 . + 0 Parent=gene1989 chr5 ENCODE exon 131439337 131439758 . + . Parent=gene1989 ### chr5 ENCODE gene 131555430 131590655 . - . ID=gene1990;Name=AC063976.5-001;name2=P4HA2 chr5 ENCODE exon 131555430 131556672 . - . Parent=gene1990 chr5 ENCODE CDS 131556602 131556672 . - 2 Parent=gene1990 chr5 ENCODE exon 131558518 131558614 . - . Parent=gene1990 chr5 ENCODE CDS 131558518 131558614 . - 0 Parent=gene1990 chr5 ENCODE exon 131559004 131559072 . - . Parent=gene1990 chr5 ENCODE CDS 131559004 131559072 . - 0 Parent=gene1990 chr5 ENCODE exon 131561798 131561863 . - . Parent=gene1990 chr5 ENCODE CDS 131561798 131561863 . - 0 Parent=gene1990 chr5 ENCODE exon 131562471 131562524 . - . Parent=gene1990 chr5 ENCODE CDS 131562471 131562524 . - 0 Parent=gene1990 chr5 ENCODE exon 131567340 131567439 . - . Parent=gene1990 chr5 ENCODE CDS 131567340 131567439 . - 1 Parent=gene1990 chr5 ENCODE exon 131567674 131567744 . - . Parent=gene1990 chr5 ENCODE CDS 131567674 131567744 . - 0 Parent=gene1990 chr5 ENCODE exon 131571300 131571476 . - . Parent=gene1990 chr5 ENCODE CDS 131571300 131571476 . - 0 Parent=gene1990 chr5 ENCODE exon 131572730 131572923 . - . Parent=gene1990 chr5 ENCODE CDS 131572730 131572923 . - 2 Parent=gene1990 chr5 ENCODE exon 131573876 131574115 . - . Parent=gene1990 chr5 ENCODE CDS 131573876 131574115 . - 2 Parent=gene1990 chr5 ENCODE exon 131577508 131577645 . - . Parent=gene1990 chr5 ENCODE CDS 131577508 131577645 . - 2 Parent=gene1990 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene1990 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene1990 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene1990 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene1990 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene1990 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene1990 chr5 ENCODE exon 131590289 131590655 . - . Parent=gene1990 ### chr5 ENCODE gene 131556202 131591411 . - . ID=gene1991;Name=AC063976.5-004;name2=P4HA2 chr5 ENCODE exon 131556202 131556672 . - . Parent=gene1991 chr5 ENCODE CDS 131556602 131556672 . - 2 Parent=gene1991 chr5 ENCODE exon 131558518 131558614 . - . Parent=gene1991 chr5 ENCODE CDS 131558518 131558614 . - 0 Parent=gene1991 chr5 ENCODE exon 131559004 131559072 . - . Parent=gene1991 chr5 ENCODE CDS 131559004 131559072 . - 0 Parent=gene1991 chr5 ENCODE exon 131561913 131561972 . - . Parent=gene1991 chr5 ENCODE CDS 131561913 131561972 . - 0 Parent=gene1991 chr5 ENCODE exon 131562471 131562524 . - . Parent=gene1991 chr5 ENCODE CDS 131562471 131562524 . - 0 Parent=gene1991 chr5 ENCODE exon 131567340 131567439 . - . Parent=gene1991 chr5 ENCODE CDS 131567340 131567439 . - 1 Parent=gene1991 chr5 ENCODE exon 131567674 131567744 . - . Parent=gene1991 chr5 ENCODE CDS 131567674 131567744 . - 0 Parent=gene1991 chr5 ENCODE exon 131571300 131571476 . - . Parent=gene1991 chr5 ENCODE CDS 131571300 131571476 . - 0 Parent=gene1991 chr5 ENCODE exon 131572730 131572923 . - . Parent=gene1991 chr5 ENCODE CDS 131572730 131572923 . - 2 Parent=gene1991 chr5 ENCODE exon 131573876 131574115 . - . Parent=gene1991 chr5 ENCODE CDS 131573876 131574115 . - 2 Parent=gene1991 chr5 ENCODE exon 131577508 131577645 . - . Parent=gene1991 chr5 ENCODE CDS 131577508 131577645 . - 2 Parent=gene1991 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene1991 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene1991 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene1991 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene1991 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene1991 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene1991 chr5 ENCODE exon 131590678 131590850 . - . Parent=gene1991 chr5 ENCODE exon 131591382 131591411 . - . Parent=gene1991 ### chr5 ENCODE gene 131556202 131591449 . - . ID=gene1992;Name=AC063976.5-003;name2=P4HA2 chr5 ENCODE exon 131556202 131556672 . - . Parent=gene1992 chr5 ENCODE CDS 131556602 131556672 . - 2 Parent=gene1992 chr5 ENCODE exon 131558518 131558614 . - . Parent=gene1992 chr5 ENCODE CDS 131558518 131558614 . - 0 Parent=gene1992 chr5 ENCODE exon 131559004 131559072 . - . Parent=gene1992 chr5 ENCODE CDS 131559004 131559072 . - 0 Parent=gene1992 chr5 ENCODE exon 131561798 131561863 . - . Parent=gene1992 chr5 ENCODE CDS 131561798 131561863 . - 0 Parent=gene1992 chr5 ENCODE exon 131562471 131562524 . - . Parent=gene1992 chr5 ENCODE CDS 131562471 131562524 . - 0 Parent=gene1992 chr5 ENCODE exon 131567340 131567439 . - . Parent=gene1992 chr5 ENCODE CDS 131567340 131567439 . - 1 Parent=gene1992 chr5 ENCODE exon 131567674 131567744 . - . Parent=gene1992 chr5 ENCODE CDS 131567674 131567744 . - 0 Parent=gene1992 chr5 ENCODE exon 131571300 131571476 . - . Parent=gene1992 chr5 ENCODE CDS 131571300 131571476 . - 0 Parent=gene1992 chr5 ENCODE exon 131572730 131572923 . - . Parent=gene1992 chr5 ENCODE CDS 131572730 131572923 . - 2 Parent=gene1992 chr5 ENCODE exon 131573876 131574115 . - . Parent=gene1992 chr5 ENCODE CDS 131573876 131574115 . - 2 Parent=gene1992 chr5 ENCODE exon 131577508 131577645 . - . Parent=gene1992 chr5 ENCODE CDS 131577508 131577645 . - 2 Parent=gene1992 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene1992 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene1992 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene1992 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene1992 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene1992 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene1992 chr5 ENCODE exon 131590678 131590813 . - . Parent=gene1992 chr5 ENCODE exon 131591382 131591449 . - . Parent=gene1992 ### chr5 ENCODE gene 131556202 131591674 . - . ID=gene1993;Name=AC063976.5-002;name2=P4HA2 chr5 ENCODE exon 131556202 131556672 . - . Parent=gene1993 chr5 ENCODE CDS 131556602 131556672 . - 2 Parent=gene1993 chr5 ENCODE exon 131558518 131558614 . - . Parent=gene1993 chr5 ENCODE CDS 131558518 131558614 . - 0 Parent=gene1993 chr5 ENCODE exon 131559004 131559072 . - . Parent=gene1993 chr5 ENCODE CDS 131559004 131559072 . - 0 Parent=gene1993 chr5 ENCODE exon 131561913 131561972 . - . Parent=gene1993 chr5 ENCODE CDS 131561913 131561972 . - 0 Parent=gene1993 chr5 ENCODE exon 131562471 131562524 . - . Parent=gene1993 chr5 ENCODE CDS 131562471 131562524 . - 0 Parent=gene1993 chr5 ENCODE exon 131567340 131567439 . - . Parent=gene1993 chr5 ENCODE CDS 131567340 131567439 . - 1 Parent=gene1993 chr5 ENCODE exon 131567674 131567744 . - . Parent=gene1993 chr5 ENCODE CDS 131567674 131567744 . - 0 Parent=gene1993 chr5 ENCODE exon 131571300 131571476 . - . Parent=gene1993 chr5 ENCODE CDS 131571300 131571476 . - 0 Parent=gene1993 chr5 ENCODE exon 131572730 131572923 . - . Parent=gene1993 chr5 ENCODE CDS 131572730 131572923 . - 2 Parent=gene1993 chr5 ENCODE exon 131573876 131574115 . - . Parent=gene1993 chr5 ENCODE CDS 131573876 131574115 . - 2 Parent=gene1993 chr5 ENCODE exon 131577508 131577645 . - . Parent=gene1993 chr5 ENCODE CDS 131577508 131577645 . - 2 Parent=gene1993 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene1993 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene1993 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene1993 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene1993 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene1993 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene1993 chr5 ENCODE exon 131591382 131591674 . - . Parent=gene1993 ### chr5 ENCODE gene 131556263 131558850 . - . ID=gene1994;Name=AC063976.5-007;name2=P4HA2 chr5 ENCODE exon 131556263 131556672 . - . Parent=gene1994 chr5 ENCODE exon 131558518 131558850 . - . Parent=gene1994 ### chr5 ENCODE gene 131556633 131559322 . - . ID=gene1995;Name=AC063976.5-008;name2=P4HA2 chr5 ENCODE exon 131556633 131556672 . - . Parent=gene1995 chr5 ENCODE exon 131558518 131558614 . - . Parent=gene1995 chr5 ENCODE exon 131559004 131559322 . - . Parent=gene1995 ### chr5 ENCODE gene 131573972 131591386 . - . ID=gene1996;Name=AC063976.5-010;name2=P4HA2 chr5 ENCODE exon 131573972 131574115 . - . Parent=gene1996 chr5 ENCODE CDS 131573972 131574115 . - 2 Parent=gene1996 chr5 ENCODE exon 131577508 131577645 . - . Parent=gene1996 chr5 ENCODE CDS 131577508 131577645 . - 2 Parent=gene1996 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene1996 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene1996 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene1996 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene1996 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene1996 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene1996 chr5 ENCODE exon 131590678 131590813 . - . Parent=gene1996 chr5 ENCODE exon 131591131 131591386 . - . Parent=gene1996 ### chr5 ENCODE gene 131573973 131658863 . - . ID=gene1997;Name=AC063976.5-014;name2=P4HA2 chr5 ENCODE exon 131573973 131574115 . - . Parent=gene1997 chr5 ENCODE CDS 131573973 131574115 . - 2 Parent=gene1997 chr5 ENCODE exon 131577508 131577645 . - . Parent=gene1997 chr5 ENCODE CDS 131577508 131577645 . - 2 Parent=gene1997 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene1997 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene1997 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene1997 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene1997 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene1997 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene1997 chr5 ENCODE exon 131658770 131658863 . - . Parent=gene1997 ### chr5 ENCODE gene 131574033 131641447 . - . ID=gene1998;Name=AC063976.5-015;name2=P4HA2 chr5 ENCODE exon 131574033 131574115 . - . Parent=gene1998 chr5 ENCODE CDS 131574033 131574115 . - 2 Parent=gene1998 chr5 ENCODE exon 131577508 131577645 . - . Parent=gene1998 chr5 ENCODE CDS 131577508 131577645 . - 2 Parent=gene1998 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene1998 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene1998 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene1998 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene1998 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene1998 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene1998 chr5 ENCODE exon 131640934 131641080 . - . Parent=gene1998 chr5 ENCODE exon 131641299 131641447 . - . Parent=gene1998 ### chr5 ENCODE gene 131574082 131585683 . - . ID=gene1999;Name=AC063976.5-017;name2=P4HA2 chr5 ENCODE exon 131574082 131574115 . - . Parent=gene1999 chr5 ENCODE CDS 131574082 131574115 . - 2 Parent=gene1999 chr5 ENCODE exon 131577508 131577645 . - . Parent=gene1999 chr5 ENCODE CDS 131577508 131577645 . - 2 Parent=gene1999 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene1999 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene1999 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene1999 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene1999 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene1999 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene1999 chr5 ENCODE exon 131585637 131585683 . - . Parent=gene1999 ### chr5 ENCODE gene 131577516 131591431 . - . ID=gene2000;Name=AC063976.5-005;name2=P4HA2 chr5 ENCODE exon 131577516 131577645 . - . Parent=gene2000 chr5 ENCODE CDS 131577516 131577645 . - 2 Parent=gene2000 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene2000 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene2000 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene2000 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene2000 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene2000 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene2000 chr5 ENCODE exon 131590524 131590813 . - . Parent=gene2000 chr5 ENCODE exon 131591382 131591431 . - . Parent=gene2000 ### chr5 ENCODE gene 131577537 131590970 . - . ID=gene2001;Name=AC063976.5-009;name2=P4HA2 chr5 ENCODE exon 131577537 131577645 . - . Parent=gene2001 chr5 ENCODE CDS 131577537 131577645 . - 2 Parent=gene2001 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene2001 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene2001 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene2001 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene2001 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene2001 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene2001 chr5 ENCODE exon 131590678 131590970 . - . Parent=gene2001 ### chr5 ENCODE gene 131577633 131591427 . - . ID=gene2002;Name=AC063976.5-016;name2=P4HA2 chr5 ENCODE exon 131577633 131577645 . - . Parent=gene2002 chr5 ENCODE CDS 131577633 131577645 . - 2 Parent=gene2002 chr5 ENCODE exon 131580789 131580940 . - . Parent=gene2002 chr5 ENCODE CDS 131580789 131580940 . - 1 Parent=gene2002 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene2002 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene2002 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene2002 chr5 ENCODE exon 131582137 131582260 . - . Parent=gene2002 chr5 ENCODE exon 131590678 131590813 . - . Parent=gene2002 chr5 ENCODE exon 131591382 131591427 . - . Parent=gene2002 ### chr5 ENCODE gene 131580789 131590854 . - . ID=gene2003;name2=P4HA2;Name=AC063976.5-006 chr5 ENCODE exon 131580789 131581440 . - . Parent=gene2003 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene2003 chr5 ENCODE exon 131590678 131590854 . - . Parent=gene2003 ### chr5 ENCODE gene 131580815 131641192 . - . ID=gene2004;Name=AC063976.5-011;name2=P4HA2 chr5 ENCODE exon 131580815 131580940 . - . Parent=gene2004 chr5 ENCODE CDS 131580815 131580940 . - 1 Parent=gene2004 chr5 ENCODE exon 131581344 131581440 . - . Parent=gene2004 chr5 ENCODE CDS 131581344 131581440 . - 2 Parent=gene2004 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene2004 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene2004 chr5 ENCODE exon 131640934 131641192 . - . Parent=gene2004 ### chr5 ENCODE gene 131581371 131591850 . - . ID=gene2005;Name=AC063976.5-018;name2=P4HA2 chr5 ENCODE exon 131581371 131581440 . - . Parent=gene2005 chr5 ENCODE CDS 131581371 131581440 . - 2 Parent=gene2005 chr5 ENCODE CDS 131582137 131582218 . - 0 Parent=gene2005 chr5 ENCODE exon 131582137 131582236 . - . Parent=gene2005 chr5 ENCODE exon 131590678 131590813 . - . Parent=gene2005 chr5 ENCODE exon 131591730 131591850 . - . Parent=gene2005 ### chr5 ENCODE gene 131612499 131658907 . - . ID=gene2006;Name=AC063976.5-013;name2=P4HA2 chr5 ENCODE exon 131612499 131614548 . - . Parent=gene2006 chr5 ENCODE exon 131640934 131641080 . - . Parent=gene2006 chr5 ENCODE exon 131644374 131644546 . - . Parent=gene2006 chr5 ENCODE exon 131658770 131658907 . - . Parent=gene2006 ### chr5 ENCODE gene 131621263 131637046 . + . ID=gene2007;name2=PDLIM4;Name=AC034220.2-001 chr5 ENCODE exon 131621263 131621419 . + . Parent=gene2007 chr5 ENCODE CDS 131621327 131621419 . + 0 Parent=gene2007 chr5 ENCODE exon 131626201 131626352 . + . Parent=gene2007 chr5 ENCODE CDS 131626201 131626352 . + 0 Parent=gene2007 chr5 ENCODE exon 131630056 131630137 . + . Parent=gene2007 chr5 ENCODE CDS 131630056 131630137 . + 1 Parent=gene2007 chr5 ENCODE exon 131634507 131634685 . + . Parent=gene2007 chr5 ENCODE CDS 131634507 131634685 . + 0 Parent=gene2007 chr5 ENCODE exon 131634895 131635058 . + . Parent=gene2007 chr5 ENCODE CDS 131634895 131635058 . + 1 Parent=gene2007 chr5 ENCODE exon 131635383 131635500 . + . Parent=gene2007 chr5 ENCODE CDS 131635383 131635500 . + 2 Parent=gene2007 chr5 ENCODE CDS 131635617 131635821 . + 1 Parent=gene2007 chr5 ENCODE exon 131635617 131637046 . + . Parent=gene2007 ### chr5 ENCODE gene 131621288 131630353 . + . ID=gene2008;name2=PDLIM4;Name=AC034220.2-007 chr5 ENCODE exon 131621288 131621419 . + . Parent=gene2008 chr5 ENCODE exon 131626201 131626352 . + . Parent=gene2008 chr5 ENCODE exon 131630056 131630353 . + . Parent=gene2008 ### chr5 ENCODE gene 131621295 131635465 . + . ID=gene2009;Name=AC034220.2-003;name2=PDLIM4 chr5 ENCODE exon 131621295 131621419 . + . Parent=gene2009 chr5 ENCODE exon 131634507 131635465 . + . Parent=gene2009 ### chr5 ENCODE gene 131621299 131635924 . + . ID=gene2010;name2=PDLIM4;Name=AC034220.2-002 chr5 ENCODE exon 131621299 131621419 . + . Parent=gene2010 chr5 ENCODE CDS 131621327 131621419 . + 0 Parent=gene2010 chr5 ENCODE exon 131626201 131626352 . + . Parent=gene2010 chr5 ENCODE CDS 131626201 131626352 . + 0 Parent=gene2010 chr5 ENCODE exon 131630056 131630137 . + . Parent=gene2010 chr5 ENCODE CDS 131630056 131630137 . + 1 Parent=gene2010 chr5 ENCODE exon 131634507 131634685 . + . Parent=gene2010 chr5 ENCODE CDS 131634507 131634685 . + 0 Parent=gene2010 chr5 ENCODE exon 131634895 131635058 . + . Parent=gene2010 chr5 ENCODE CDS 131634895 131635058 . + 1 Parent=gene2010 chr5 ENCODE CDS 131635617 131635687 . + 2 Parent=gene2010 chr5 ENCODE exon 131635617 131635924 . + . Parent=gene2010 ### chr5 ENCODE gene 131625041 131634928 . + . ID=gene2011;Name=AC034220.2-004;name2=PDLIM4 chr5 ENCODE exon 131625041 131625131 . + . Parent=gene2011 chr5 ENCODE exon 131626201 131626352 . + . Parent=gene2011 chr5 ENCODE exon 131630056 131630137 . + . Parent=gene2011 chr5 ENCODE exon 131634507 131634685 . + . Parent=gene2011 chr5 ENCODE exon 131634895 131634928 . + . Parent=gene2011 ### chr5 ENCODE gene 131634024 131635425 . + . ID=gene2012;Name=AC034220.2-005;name2=PDLIM4 chr5 ENCODE exon 131634024 131634093 . + . Parent=gene2012 chr5 ENCODE exon 131634507 131634685 . + . Parent=gene2012 chr5 ENCODE exon 131634895 131635058 . + . Parent=gene2012 chr5 ENCODE exon 131635383 131635425 . + . Parent=gene2012 ### chr5 ENCODE gene 131634564 131635655 . + . ID=gene2013;Name=AC034220.2-006;name2=PDLIM4 chr5 ENCODE exon 131634564 131634685 . + . Parent=gene2013 chr5 ENCODE exon 131634895 131635500 . + . Parent=gene2013 chr5 ENCODE exon 131635617 131635655 . + . Parent=gene2013 ### chr5 ENCODE gene 131640801 131641514 . - . ID=gene2014;Name=AC063976.5-012;name2=P4HA2 chr5 ENCODE exon 131640801 131641080 . - . Parent=gene2014 chr5 ENCODE exon 131641299 131641514 . - . Parent=gene2014 ### chr5 ENCODE gene 131658035 131707798 . + . ID=gene2015;Name=AC008599.1-001;name2=SLC22A4 chr5 ENCODE exon 131658035 131658601 . + . Parent=gene2015 chr5 ENCODE CDS 131658209 131658601 . + 0 Parent=gene2015 chr5 ENCODE exon 131675753 131675856 . + . Parent=gene2015 chr5 ENCODE CDS 131675753 131675856 . + 0 Parent=gene2015 chr5 ENCODE exon 131677206 131677360 . + . Parent=gene2015 chr5 ENCODE CDS 131677206 131677360 . + 1 Parent=gene2015 chr5 ENCODE exon 131685776 131685947 . + . Parent=gene2015 chr5 ENCODE CDS 131685776 131685947 . + 2 Parent=gene2015 chr5 ENCODE exon 131690869 131690995 . + . Parent=gene2015 chr5 ENCODE CDS 131690869 131690995 . + 1 Parent=gene2015 chr5 ENCODE exon 131695348 131695442 . + . Parent=gene2015 chr5 ENCODE CDS 131695348 131695442 . + 0 Parent=gene2015 chr5 ENCODE exon 131698310 131698524 . + . Parent=gene2015 chr5 ENCODE CDS 131698310 131698524 . + 1 Parent=gene2015 chr5 ENCODE exon 131699410 131699592 . + . Parent=gene2015 chr5 ENCODE CDS 131699410 131699592 . + 2 Parent=gene2015 chr5 ENCODE exon 131704157 131704292 . + . Parent=gene2015 chr5 ENCODE CDS 131704157 131704292 . + 2 Parent=gene2015 chr5 ENCODE CDS 131707352 131707427 . + 1 Parent=gene2015 chr5 ENCODE exon 131707352 131707798 . + . Parent=gene2015 ### chr5 ENCODE gene 131659017 131684564 . + . ID=gene2016;Name=AC008599.1-003;name2=SLC22A4 chr5 ENCODE exon 131659017 131659213 . + . Parent=gene2016 chr5 ENCODE exon 131675753 131675856 . + . Parent=gene2016 chr5 ENCODE exon 131677206 131677360 . + . Parent=gene2016 chr5 ENCODE exon 131684457 131684564 . + . Parent=gene2016 ### chr5 ENCODE gene 131685776 131690977 . + . ID=gene2017;Name=AC008599.1-002;name2=SLC22A4 chr5 ENCODE exon 131685776 131685947 . + . Parent=gene2017 chr5 ENCODE exon 131688053 131688234 . + . Parent=gene2017 chr5 ENCODE exon 131690869 131690977 . + . Parent=gene2017 ### chr5 ENCODE gene 131733343 131759205 . + . ID=gene2018;name2=SLC22A5;Name=AC118464.1-001 chr5 ENCODE exon 131733343 131733956 . + . Parent=gene2018 chr5 ENCODE CDS 131733564 131733956 . + 0 Parent=gene2018 chr5 ENCODE exon 131741969 131742072 . + . Parent=gene2018 chr5 ENCODE CDS 131741969 131742072 . + 0 Parent=gene2018 chr5 ENCODE exon 131747738 131747892 . + . Parent=gene2018 chr5 ENCODE CDS 131747738 131747892 . + 1 Parent=gene2018 chr5 ENCODE exon 131748919 131749090 . + . Parent=gene2018 chr5 ENCODE CDS 131748919 131749090 . + 2 Parent=gene2018 chr5 ENCODE exon 131750616 131750742 . + . Parent=gene2018 chr5 ENCODE CDS 131750616 131750742 . + 1 Parent=gene2018 chr5 ENCODE exon 131752512 131752612 . + . Parent=gene2018 chr5 ENCODE CDS 131752512 131752612 . + 0 Parent=gene2018 chr5 ENCODE exon 131754281 131754495 . + . Parent=gene2018 chr5 ENCODE CDS 131754281 131754495 . + 1 Parent=gene2018 chr5 ENCODE exon 131756024 131756206 . + . Parent=gene2018 chr5 ENCODE CDS 131756024 131756206 . + 2 Parent=gene2018 chr5 ENCODE exon 131757267 131757402 . + . Parent=gene2018 chr5 ENCODE CDS 131757267 131757402 . + 2 Parent=gene2018 chr5 ENCODE CDS 131757776 131757863 . + 1 Parent=gene2018 chr5 ENCODE exon 131757776 131759205 . + . Parent=gene2018 ### chr5 ENCODE gene 131733867 131750742 . + . ID=gene2019;Name=AC118464.1-004;name2=SLC22A5 chr5 ENCODE exon 131733867 131733956 . + . Parent=gene2019 chr5 ENCODE CDS 131733867 131733956 . + 0 Parent=gene2019 chr5 ENCODE exon 131741755 131741826 . + . Parent=gene2019 chr5 ENCODE CDS 131741755 131741826 . + 0 Parent=gene2019 chr5 ENCODE exon 131741969 131742072 . + . Parent=gene2019 chr5 ENCODE CDS 131741969 131742072 . + 0 Parent=gene2019 chr5 ENCODE exon 131747738 131747892 . + . Parent=gene2019 chr5 ENCODE CDS 131747738 131747892 . + 1 Parent=gene2019 chr5 ENCODE exon 131748919 131749090 . + . Parent=gene2019 chr5 ENCODE CDS 131748919 131749090 . + 2 Parent=gene2019 chr5 ENCODE exon 131750616 131750742 . + . Parent=gene2019 chr5 ENCODE CDS 131750616 131750742 . + 1 Parent=gene2019 ### chr5 ENCODE gene 131739677 131759202 . + . ID=gene2020;Name=AC118464.1-006;name2=SLC22A5 chr5 ENCODE exon 131739677 131741826 . + . Parent=gene2020 chr5 ENCODE exon 131741969 131747892 . + . Parent=gene2020 chr5 ENCODE exon 131748919 131749090 . + . Parent=gene2020 chr5 ENCODE exon 131750616 131750742 . + . Parent=gene2020 chr5 ENCODE exon 131752512 131752612 . + . Parent=gene2020 chr5 ENCODE exon 131754281 131754495 . + . Parent=gene2020 chr5 ENCODE exon 131756024 131756206 . + . Parent=gene2020 chr5 ENCODE exon 131757267 131757402 . + . Parent=gene2020 chr5 ENCODE exon 131757776 131759202 . + . Parent=gene2020 ### chr5 ENCODE gene 131748919 131757406 . + . ID=gene2021;Name=AC118464.1-002;name2=SLC22A5 chr5 ENCODE exon 131748919 131749090 . + . Parent=gene2021 chr5 ENCODE exon 131750616 131750742 . + . Parent=gene2021 chr5 ENCODE exon 131752512 131752612 . + . Parent=gene2021 chr5 ENCODE exon 131754367 131754495 . + . Parent=gene2021 chr5 ENCODE exon 131756024 131756206 . + . Parent=gene2021 chr5 ENCODE exon 131757267 131757406 . + . Parent=gene2021 ### chr5 ENCODE gene 131751404 131757274 . + . ID=gene2022;Name=AC118464.1-007;name2=SLC22A5 chr5 ENCODE exon 131751404 131751457 . + . Parent=gene2022 chr5 ENCODE exon 131752512 131752612 . + . Parent=gene2022 chr5 ENCODE exon 131754281 131754495 . + . Parent=gene2022 chr5 ENCODE exon 131756024 131756206 . + . Parent=gene2022 chr5 ENCODE exon 131757267 131757274 . + . Parent=gene2022 ### chr5 ENCODE gene 131752502 131758343 . + . ID=gene2023;name2=SLC22A5;Name=AC118464.1-005 chr5 ENCODE exon 131752502 131752612 . + . Parent=gene2023 chr5 ENCODE exon 131756024 131756206 . + . Parent=gene2023 chr5 ENCODE exon 131757267 131757402 . + . Parent=gene2023 chr5 ENCODE exon 131757776 131758343 . + . Parent=gene2023 ### chr5 ENCODE gene 131752551 131759204 . + . ID=gene2024;Name=AC118464.1-003;name2=SLC22A5 chr5 ENCODE exon 131752551 131754495 . + . Parent=gene2024 chr5 ENCODE exon 131756024 131756206 . + . Parent=gene2024 chr5 ENCODE exon 131757267 131757402 . + . Parent=gene2024 chr5 ENCODE exon 131757776 131759204 . + . Parent=gene2024 ### chr5 ENCODE gene 131774227 131839635 . + . ID=gene2025;Name=AC116366.4-002;name2=AC116366.4 chr5 ENCODE exon 131774227 131774632 . + . Parent=gene2025 chr5 ENCODE exon 131783414 131783531 . + . Parent=gene2025 chr5 ENCODE CDS 131783484 131783531 . + 0 Parent=gene2025 chr5 ENCODE exon 131813241 131813280 . + . Parent=gene2025 chr5 ENCODE CDS 131813241 131813280 . + 0 Parent=gene2025 chr5 ENCODE CDS 131839258 131839523 . + 2 Parent=gene2025 chr5 ENCODE exon 131839258 131839635 . + . Parent=gene2025 ### chr5 ENCODE gene 131774572 131813582 . + . ID=gene2026;Name=AC116366.4-004;name2=AC116366.4 chr5 ENCODE exon 131774572 131774632 . + . Parent=gene2026 chr5 ENCODE exon 131783414 131783531 . + . Parent=gene2026 chr5 ENCODE exon 131813241 131813582 . + . Parent=gene2026 ### chr5 ENCODE gene 131774572 131825958 . + . ID=gene2027;Name=AC116366.4-001;name2=AC116366.4 chr5 ENCODE exon 131774572 131774632 . + . Parent=gene2027 chr5 ENCODE exon 131783414 131783531 . + . Parent=gene2027 chr5 ENCODE CDS 131783484 131783531 . + 0 Parent=gene2027 chr5 ENCODE exon 131813241 131813280 . + . Parent=gene2027 chr5 ENCODE CDS 131813241 131813280 . + 0 Parent=gene2027 chr5 ENCODE CDS 131824153 131824445 . + 2 Parent=gene2027 chr5 ENCODE exon 131824153 131825958 . + . Parent=gene2027 ### chr5 ENCODE gene 131774580 131821012 . + . ID=gene2028;Name=AC116366.4-003;name2=AC116366.4 chr5 ENCODE exon 131774580 131774632 . + . Parent=gene2028 chr5 ENCODE exon 131783414 131783531 . + . Parent=gene2028 chr5 ENCODE CDS 131783484 131783531 . + 0 Parent=gene2028 chr5 ENCODE exon 131813241 131813280 . + . Parent=gene2028 chr5 ENCODE CDS 131813241 131813280 . + 0 Parent=gene2028 chr5 ENCODE CDS 131820603 131820757 . + 2 Parent=gene2028 chr5 ENCODE exon 131820603 131821012 . + . Parent=gene2028 ### chr5 ENCODE gene 131774580 131834499 . + . ID=gene2029;Name=AC116366.4-005;name2=AC116366.4 chr5 ENCODE exon 131774580 131774632 . + . Parent=gene2029 chr5 ENCODE exon 131783414 131783531 . + . Parent=gene2029 chr5 ENCODE exon 131813241 131813280 . + . Parent=gene2029 chr5 ENCODE exon 131833631 131834499 . + . Parent=gene2029 ### chr5 ENCODE gene 131834123 131839601 . + . ID=gene2030;Name=AC116366.4-006;name2=AC116366.4 chr5 ENCODE exon 131834123 131834645 . + . Parent=gene2030 chr5 ENCODE exon 131839258 131839601 . + . Parent=gene2030 ### chr5 ENCODE gene 131845200 131854389 . - . ID=gene2031;Name=AC116366.3-001;name2=IRF1 chr5 ENCODE exon 131845200 131847666 . - . Parent=gene2031 chr5 ENCODE CDS 131847542 131847666 . - 2 Parent=gene2031 chr5 ENCODE exon 131847953 131848088 . - . Parent=gene2031 chr5 ENCODE CDS 131847953 131848088 . - 0 Parent=gene2031 chr5 ENCODE exon 131849258 131849307 . - . Parent=gene2031 chr5 ENCODE CDS 131849258 131849307 . - 2 Parent=gene2031 chr5 ENCODE exon 131849842 131849964 . - . Parent=gene2031 chr5 ENCODE CDS 131849842 131849964 . - 2 Parent=gene2031 chr5 ENCODE exon 131850148 131850277 . - . Parent=gene2031 chr5 ENCODE CDS 131850148 131850277 . - 0 Parent=gene2031 chr5 ENCODE exon 131850386 131850435 . - . Parent=gene2031 chr5 ENCODE CDS 131850386 131850435 . - 2 Parent=gene2031 chr5 ENCODE exon 131850545 131850721 . - . Parent=gene2031 chr5 ENCODE CDS 131850545 131850721 . - 2 Parent=gene2031 chr5 ENCODE exon 131851517 131851616 . - . Parent=gene2031 chr5 ENCODE CDS 131851517 131851616 . - 0 Parent=gene2031 chr5 ENCODE CDS 131852983 131853069 . - 0 Parent=gene2031 chr5 ENCODE exon 131852983 131853074 . - . Parent=gene2031 chr5 ENCODE exon 131854136 131854389 . - . Parent=gene2031 ### chr5 ENCODE gene 131846676 131852623 . - . ID=gene2032;Name=AC116366.3-006;name2=IRF1 chr5 ENCODE exon 131846676 131850721 . - . Parent=gene2032 chr5 ENCODE exon 131851517 131852623 . - . Parent=gene2032 ### chr5 ENCODE gene 131849258 131854368 . - . ID=gene2033;Name=AC116366.3-002;name2=IRF1 chr5 ENCODE exon 131849258 131849307 . - . Parent=gene2033 chr5 ENCODE CDS 131849258 131849307 . - 2 Parent=gene2033 chr5 ENCODE exon 131850148 131850277 . - . Parent=gene2033 chr5 ENCODE CDS 131850148 131850277 . - 0 Parent=gene2033 chr5 ENCODE exon 131850386 131850435 . - . Parent=gene2033 chr5 ENCODE CDS 131850386 131850435 . - 2 Parent=gene2033 chr5 ENCODE exon 131850545 131850721 . - . Parent=gene2033 chr5 ENCODE CDS 131850545 131850721 . - 2 Parent=gene2033 chr5 ENCODE exon 131851517 131851616 . - . Parent=gene2033 chr5 ENCODE CDS 131851517 131851616 . - 0 Parent=gene2033 chr5 ENCODE CDS 131852983 131853069 . - 0 Parent=gene2033 chr5 ENCODE exon 131852983 131853074 . - . Parent=gene2033 chr5 ENCODE exon 131854136 131854368 . - . Parent=gene2033 ### chr5 ENCODE gene 131849714 131854356 . - . ID=gene2034;name2=IRF1;Name=AC116366.3-004 chr5 ENCODE exon 131849714 131850277 . - . Parent=gene2034 chr5 ENCODE exon 131850386 131850435 . - . Parent=gene2034 chr5 ENCODE exon 131850545 131850721 . - . Parent=gene2034 chr5 ENCODE exon 131851517 131851643 . - . Parent=gene2034 chr5 ENCODE exon 131852983 131853074 . - . Parent=gene2034 chr5 ENCODE exon 131854136 131854356 . - . Parent=gene2034 ### chr5 ENCODE gene 131850208 131854358 . - . ID=gene2035;Name=AC116366.3-003;name2=IRF1 chr5 ENCODE exon 131850208 131850277 . - . Parent=gene2035 chr5 ENCODE exon 131850386 131850435 . - . Parent=gene2035 chr5 ENCODE exon 131850545 131850721 . - . Parent=gene2035 chr5 ENCODE exon 131854136 131854358 . - . Parent=gene2035 ### chr5 ENCODE gene 131850553 131853236 . - . ID=gene2036;Name=AC116366.3-007;name2=IRF1 chr5 ENCODE exon 131850553 131850721 . - . Parent=gene2036 chr5 ENCODE exon 131851517 131851616 . - . Parent=gene2036 chr5 ENCODE exon 131852983 131853236 . - . Parent=gene2036 ### chr5 ENCODE gene 131852262 131854345 . - . ID=gene2037;Name=AC116366.3-005;name2=IRF1 chr5 ENCODE exon 131852262 131853074 . - . Parent=gene2037 chr5 ENCODE exon 131854136 131854345 . - . Parent=gene2037 ### chr5 ENCODE gene 131905035 131907113 . - . ID=gene2038;Name=AC116366.2-001;name2=IL5 chr5 ENCODE exon 131905035 131905500 . - . Parent=gene2038 chr5 ENCODE CDS 131905402 131905500 . - 0 Parent=gene2038 chr5 ENCODE exon 131905606 131905734 . - . Parent=gene2038 chr5 ENCODE CDS 131905606 131905734 . - 0 Parent=gene2038 chr5 ENCODE exon 131906685 131906717 . - . Parent=gene2038 chr5 ENCODE CDS 131906685 131906717 . - 0 Parent=gene2038 chr5 ENCODE CDS 131906926 131907069 . - 0 Parent=gene2038 chr5 ENCODE exon 131906926 131907113 . - . Parent=gene2038 ### chr5 ENCODE gene 131905657 131907511 . - . ID=gene2039;Name=AC116366.2-003;name2=IL5 chr5 ENCODE exon 131905657 131905734 . - . Parent=gene2039 chr5 ENCODE exon 131906685 131907511 . - . Parent=gene2039 ### chr5 ENCODE gene 131905657 131920429 . - . ID=gene2040;name2=IL5;Name=AC116366.2-002 chr5 ENCODE exon 131905657 131905734 . - . Parent=gene2040 chr5 ENCODE CDS 131905657 131905734 . - 0 Parent=gene2040 chr5 ENCODE exon 131906685 131906717 . - . Parent=gene2040 chr5 ENCODE CDS 131906685 131906717 . - 0 Parent=gene2040 chr5 ENCODE CDS 131920265 131920306 . - 0 Parent=gene2040 chr5 ENCODE exon 131920265 131920429 . - . Parent=gene2040 ### chr5 ENCODE gene 131919610 131943498 . + . ID=gene2041;Name=AC004041.1-006;name2=RAD50 chr5 ENCODE exon 131919610 131920064 . + . Parent=gene2041 chr5 ENCODE exon 131922875 131922958 . + . Parent=gene2041 chr5 ENCODE exon 131939368 131939519 . + . Parent=gene2041 chr5 ENCODE CDS 131939452 131939519 . + 0 Parent=gene2041 chr5 ENCODE exon 131942908 131943093 . + . Parent=gene2041 chr5 ENCODE CDS 131942908 131943093 . + 1 Parent=gene2041 chr5 ENCODE exon 131943453 131943498 . + . Parent=gene2041 chr5 ENCODE CDS 131943453 131943498 . + 1 Parent=gene2041 ### chr5 ENCODE gene 131920529 132006067 . + . ID=gene2042;Name=AC004041.1-002;name2=RAD50 chr5 ENCODE exon 131920529 131921044 . + . Parent=gene2042 chr5 ENCODE exon 131922875 131922958 . + . Parent=gene2042 chr5 ENCODE exon 131939368 131939454 . + . Parent=gene2042 chr5 ENCODE exon 131942908 131943093 . + . Parent=gene2042 chr5 ENCODE CDS 131942960 131943093 . + 0 Parent=gene2042 chr5 ENCODE exon 131943453 131943657 . + . Parent=gene2042 chr5 ENCODE CDS 131943453 131943657 . + 1 Parent=gene2042 chr5 ENCODE exon 131951153 131951281 . + . Parent=gene2042 chr5 ENCODE CDS 131951153 131951281 . + 0 Parent=gene2042 chr5 ENCODE exon 131951515 131951680 . + . Parent=gene2042 chr5 ENCODE CDS 131951515 131951680 . + 0 Parent=gene2042 chr5 ENCODE exon 131952278 131952471 . + . Parent=gene2042 chr5 ENCODE CDS 131952278 131952471 . + 2 Parent=gene2042 chr5 ENCODE exon 131953222 131953428 . + . Parent=gene2042 chr5 ENCODE CDS 131953222 131953428 . + 0 Parent=gene2042 chr5 ENCODE exon 131954815 131954997 . + . Parent=gene2042 chr5 ENCODE CDS 131954815 131954997 . + 0 Parent=gene2042 chr5 ENCODE exon 131955468 131955625 . + . Parent=gene2042 chr5 ENCODE CDS 131955468 131955625 . + 0 Parent=gene2042 chr5 ENCODE exon 131958460 131958635 . + . Parent=gene2042 chr5 ENCODE CDS 131958460 131958635 . + 1 Parent=gene2042 chr5 ENCODE exon 131959164 131959401 . + . Parent=gene2042 chr5 ENCODE CDS 131959164 131959401 . + 2 Parent=gene2042 chr5 ENCODE exon 131966891 131967080 . + . Parent=gene2042 chr5 ENCODE CDS 131966891 131967080 . + 1 Parent=gene2042 chr5 ENCODE exon 131967511 131967637 . + . Parent=gene2042 chr5 ENCODE CDS 131967511 131967637 . + 0 Parent=gene2042 chr5 ENCODE exon 131968397 131968590 . + . Parent=gene2042 chr5 ENCODE CDS 131968397 131968590 . + 2 Parent=gene2042 chr5 ENCODE exon 131972206 131972316 . + . Parent=gene2042 chr5 ENCODE CDS 131972206 131972316 . + 0 Parent=gene2042 chr5 ENCODE exon 131972708 131972800 . + . Parent=gene2042 chr5 ENCODE CDS 131972708 131972800 . + 0 Parent=gene2042 chr5 ENCODE exon 131972874 131972987 . + . Parent=gene2042 chr5 ENCODE CDS 131972874 131972987 . + 0 Parent=gene2042 chr5 ENCODE exon 131979594 131979721 . + . Parent=gene2042 chr5 ENCODE CDS 131979594 131979721 . + 0 Parent=gene2042 chr5 ENCODE exon 131981661 131981885 . + . Parent=gene2042 chr5 ENCODE CDS 131981661 131981885 . + 1 Parent=gene2042 chr5 ENCODE exon 132000706 132000791 . + . Parent=gene2042 chr5 ENCODE CDS 132000706 132000791 . + 1 Parent=gene2042 chr5 ENCODE exon 132001672 132001814 . + . Parent=gene2042 chr5 ENCODE CDS 132001672 132001814 . + 2 Parent=gene2042 chr5 ENCODE exon 132004263 132004396 . + . Parent=gene2042 chr5 ENCODE CDS 132004263 132004396 . + 0 Parent=gene2042 chr5 ENCODE CDS 132005769 132005955 . + 1 Parent=gene2042 chr5 ENCODE exon 132005769 132006067 . + . Parent=gene2042 ### chr5 ENCODE gene 131920529 132007651 . + . ID=gene2043;Name=AC004041.1-001;name2=RAD50 chr5 ENCODE exon 131920529 131921044 . + . Parent=gene2043 chr5 ENCODE CDS 131920916 131921044 . + 0 Parent=gene2043 chr5 ENCODE exon 131922875 131922958 . + . Parent=gene2043 chr5 ENCODE CDS 131922875 131922958 . + 0 Parent=gene2043 chr5 ENCODE exon 131939368 131939519 . + . Parent=gene2043 chr5 ENCODE CDS 131939368 131939519 . + 0 Parent=gene2043 chr5 ENCODE exon 131942908 131943093 . + . Parent=gene2043 chr5 ENCODE CDS 131942908 131943093 . + 1 Parent=gene2043 chr5 ENCODE exon 131943453 131943657 . + . Parent=gene2043 chr5 ENCODE CDS 131943453 131943657 . + 1 Parent=gene2043 chr5 ENCODE exon 131951153 131951281 . + . Parent=gene2043 chr5 ENCODE CDS 131951153 131951281 . + 0 Parent=gene2043 chr5 ENCODE exon 131951515 131951680 . + . Parent=gene2043 chr5 ENCODE CDS 131951515 131951680 . + 0 Parent=gene2043 chr5 ENCODE exon 131952278 131952471 . + . Parent=gene2043 chr5 ENCODE CDS 131952278 131952471 . + 2 Parent=gene2043 chr5 ENCODE exon 131953222 131953428 . + . Parent=gene2043 chr5 ENCODE CDS 131953222 131953428 . + 0 Parent=gene2043 chr5 ENCODE exon 131954815 131954997 . + . Parent=gene2043 chr5 ENCODE CDS 131954815 131954997 . + 0 Parent=gene2043 chr5 ENCODE exon 131955468 131955625 . + . Parent=gene2043 chr5 ENCODE CDS 131955468 131955625 . + 0 Parent=gene2043 chr5 ENCODE exon 131958460 131958635 . + . Parent=gene2043 chr5 ENCODE CDS 131958460 131958635 . + 1 Parent=gene2043 chr5 ENCODE exon 131959164 131959401 . + . Parent=gene2043 chr5 ENCODE CDS 131959164 131959401 . + 2 Parent=gene2043 chr5 ENCODE exon 131966891 131967080 . + . Parent=gene2043 chr5 ENCODE CDS 131966891 131967080 . + 1 Parent=gene2043 chr5 ENCODE exon 131967511 131967637 . + . Parent=gene2043 chr5 ENCODE CDS 131967511 131967637 . + 0 Parent=gene2043 chr5 ENCODE exon 131968397 131968590 . + . Parent=gene2043 chr5 ENCODE CDS 131968397 131968590 . + 2 Parent=gene2043 chr5 ENCODE exon 131972206 131972316 . + . Parent=gene2043 chr5 ENCODE CDS 131972206 131972316 . + 0 Parent=gene2043 chr5 ENCODE exon 131972708 131972800 . + . Parent=gene2043 chr5 ENCODE CDS 131972708 131972800 . + 0 Parent=gene2043 chr5 ENCODE exon 131972874 131972987 . + . Parent=gene2043 chr5 ENCODE CDS 131972874 131972987 . + 0 Parent=gene2043 chr5 ENCODE exon 131979594 131979721 . + . Parent=gene2043 chr5 ENCODE CDS 131979594 131979721 . + 0 Parent=gene2043 chr5 ENCODE exon 131981661 131981885 . + . Parent=gene2043 chr5 ENCODE CDS 131981661 131981885 . + 1 Parent=gene2043 chr5 ENCODE exon 132000706 132000791 . + . Parent=gene2043 chr5 ENCODE CDS 132000706 132000791 . + 1 Parent=gene2043 chr5 ENCODE exon 132001672 132001814 . + . Parent=gene2043 chr5 ENCODE CDS 132001672 132001814 . + 2 Parent=gene2043 chr5 ENCODE exon 132004263 132004396 . + . Parent=gene2043 chr5 ENCODE CDS 132004263 132004396 . + 0 Parent=gene2043 chr5 ENCODE CDS 132005769 132005955 . + 1 Parent=gene2043 chr5 ENCODE exon 132005769 132007651 . + . Parent=gene2043 ### chr5 ENCODE gene 131920822 131959359 . + . ID=gene2044;Name=AC004041.1-003;name2=RAD50 chr5 ENCODE exon 131920822 131921044 . + . Parent=gene2044 chr5 ENCODE CDS 131920916 131921044 . + 0 Parent=gene2044 chr5 ENCODE exon 131922875 131922958 . + . Parent=gene2044 chr5 ENCODE CDS 131922875 131922958 . + 0 Parent=gene2044 chr5 ENCODE exon 131939368 131939519 . + . Parent=gene2044 chr5 ENCODE CDS 131939368 131939519 . + 0 Parent=gene2044 chr5 ENCODE exon 131942908 131943093 . + . Parent=gene2044 chr5 ENCODE CDS 131942908 131943093 . + 1 Parent=gene2044 chr5 ENCODE exon 131943453 131943657 . + . Parent=gene2044 chr5 ENCODE CDS 131943453 131943657 . + 1 Parent=gene2044 chr5 ENCODE exon 131951153 131951281 . + . Parent=gene2044 chr5 ENCODE CDS 131951153 131951281 . + 0 Parent=gene2044 chr5 ENCODE exon 131951515 131951680 . + . Parent=gene2044 chr5 ENCODE CDS 131951515 131951680 . + 0 Parent=gene2044 chr5 ENCODE exon 131952278 131952471 . + . Parent=gene2044 chr5 ENCODE CDS 131952278 131952471 . + 2 Parent=gene2044 chr5 ENCODE exon 131953222 131953428 . + . Parent=gene2044 chr5 ENCODE CDS 131953222 131953428 . + 0 Parent=gene2044 chr5 ENCODE exon 131955468 131955625 . + . Parent=gene2044 chr5 ENCODE CDS 131955468 131955625 . + 0 Parent=gene2044 chr5 ENCODE exon 131958460 131958635 . + . Parent=gene2044 chr5 ENCODE CDS 131958460 131958635 . + 1 Parent=gene2044 chr5 ENCODE exon 131959164 131959359 . + . Parent=gene2044 chr5 ENCODE CDS 131959164 131959359 . + 2 Parent=gene2044 ### chr5 ENCODE gene 131920822 131972930 . + . ID=gene2045;name2=RAD50;Name=AC004041.1-004 chr5 ENCODE exon 131920822 131921044 . + . Parent=gene2045 chr5 ENCODE exon 131922875 131922958 . + . Parent=gene2045 chr5 ENCODE exon 131939368 131939519 . + . Parent=gene2045 chr5 ENCODE exon 131942908 131943093 . + . Parent=gene2045 chr5 ENCODE exon 131943453 131943657 . + . Parent=gene2045 chr5 ENCODE exon 131951153 131951281 . + . Parent=gene2045 chr5 ENCODE exon 131951515 131951680 . + . Parent=gene2045 chr5 ENCODE exon 131952278 131952471 . + . Parent=gene2045 chr5 ENCODE exon 131953222 131953428 . + . Parent=gene2045 chr5 ENCODE exon 131954815 131954997 . + . Parent=gene2045 chr5 ENCODE exon 131958460 131958635 . + . Parent=gene2045 chr5 ENCODE exon 131959164 131959401 . + . Parent=gene2045 chr5 ENCODE exon 131966891 131967080 . + . Parent=gene2045 chr5 ENCODE exon 131967511 131967637 . + . Parent=gene2045 chr5 ENCODE exon 131968397 131968590 . + . Parent=gene2045 chr5 ENCODE exon 131972206 131972316 . + . Parent=gene2045 chr5 ENCODE exon 131972708 131972800 . + . Parent=gene2045 chr5 ENCODE exon 131972874 131972930 . + . Parent=gene2045 ### chr5 ENCODE gene 131943336 131952398 . + . ID=gene2046;Name=AC004041.1-007;name2=RAD50 chr5 ENCODE exon 131943336 131943657 . + . Parent=gene2046 chr5 ENCODE exon 131951153 131951281 . + . Parent=gene2046 chr5 ENCODE exon 131951515 131951680 . + . Parent=gene2046 chr5 ENCODE exon 131952278 131952398 . + . Parent=gene2046 ### chr5 ENCODE gene 131954868 131957118 . + . ID=gene2047;Name=AC004041.1-005;name2=RAD50 chr5 ENCODE exon 131954868 131954997 . + . Parent=gene2047 chr5 ENCODE exon 131955468 131955625 . + . Parent=gene2047 chr5 ENCODE exon 131956355 131957118 . + . Parent=gene2047 ### chr5 ENCODE gene 131958813 131966996 . + . ID=gene2048;Name=AC004041.1-008;name2=RAD50 chr5 ENCODE exon 131958813 131958864 . + . Parent=gene2048 chr5 ENCODE exon 131959164 131959401 . + . Parent=gene2048 chr5 ENCODE exon 131963653 131963729 . + . Parent=gene2048 chr5 ENCODE exon 131966891 131966996 . + . Parent=gene2048 ### chr5 ENCODE gene 131981862 132006772 . + . ID=gene2049;Name=AC004041.1-009;name2=RAD50 chr5 ENCODE exon 131981862 131981885 . + . Parent=gene2049 chr5 ENCODE CDS 131981862 131981885 . + 0 Parent=gene2049 chr5 ENCODE exon 132000706 132000791 . + . Parent=gene2049 chr5 ENCODE CDS 132000706 132000791 . + 0 Parent=gene2049 chr5 ENCODE exon 132001672 132001814 . + . Parent=gene2049 chr5 ENCODE CDS 132001672 132001814 . + 1 Parent=gene2049 chr5 ENCODE exon 132004263 132004396 . + . Parent=gene2049 chr5 ENCODE CDS 132004263 132004396 . + 2 Parent=gene2049 chr5 ENCODE CDS 132006596 132006680 . + 0 Parent=gene2049 chr5 ENCODE exon 132006596 132006772 . + . Parent=gene2049 ### chr5 ENCODE gene 132019854 132024141 . + . ID=gene2050;name2=IL13;Name=AC004039.3-002 chr5 ENCODE exon 132019854 132020221 . + . Parent=gene2050 chr5 ENCODE exon 132020657 132020835 . + . Parent=gene2050 chr5 ENCODE exon 132023009 132023062 . + . Parent=gene2050 chr5 ENCODE exon 132023315 132023419 . + . Parent=gene2050 chr5 ENCODE exon 132023766 132024141 . + . Parent=gene2050 ### chr5 ENCODE gene 132020115 132024205 . + . ID=gene2051;Name=AC004039.3-004;name2=IL13 chr5 ENCODE exon 132020115 132020221 . + . Parent=gene2051 chr5 ENCODE exon 132021881 132021951 . + . Parent=gene2051 chr5 ENCODE exon 132023009 132023062 . + . Parent=gene2051 chr5 ENCODE exon 132023315 132023419 . + . Parent=gene2051 chr5 ENCODE exon 132023766 132024205 . + . Parent=gene2051 ### chr5 ENCODE gene 132020127 132024294 . + . ID=gene2052;Name=AC004039.3-003;name2=IL13 chr5 ENCODE exon 132020127 132020221 . + . Parent=gene2052 chr5 ENCODE exon 132020657 132020835 . + . Parent=gene2052 chr5 ENCODE exon 132021881 132021951 . + . Parent=gene2052 chr5 ENCODE exon 132023009 132023062 . + . Parent=gene2052 chr5 ENCODE exon 132023315 132023419 . + . Parent=gene2052 chr5 ENCODE exon 132023766 132024294 . + . Parent=gene2052 ### chr5 ENCODE gene 132021764 132023923 . + . ID=gene2053;Name=AC004039.3-005;name2=IL13 chr5 ENCODE exon 132021764 132023062 . + . Parent=gene2053 chr5 ENCODE exon 132023315 132023419 . + . Parent=gene2053 chr5 ENCODE exon 132023766 132023923 . + . Parent=gene2053 ### chr5 ENCODE gene 132021764 132024701 . + . ID=gene2054;Name=AC004039.3-001;name2=IL13 chr5 ENCODE exon 132021764 132021951 . + . Parent=gene2054 chr5 ENCODE CDS 132021778 132021951 . + 0 Parent=gene2054 chr5 ENCODE exon 132023009 132023062 . + . Parent=gene2054 chr5 ENCODE CDS 132023009 132023062 . + 0 Parent=gene2054 chr5 ENCODE exon 132023315 132023419 . + . Parent=gene2054 chr5 ENCODE CDS 132023315 132023419 . + 0 Parent=gene2054 chr5 ENCODE CDS 132023766 132023873 . + 0 Parent=gene2054 chr5 ENCODE exon 132023766 132024701 . + . Parent=gene2054 ### chr5 ENCODE gene 132037577 132046267 . + . ID=gene2055;Name=AC004039.4-001;name2=IL4 chr5 ENCODE exon 132037577 132037776 . + . Parent=gene2055 chr5 ENCODE CDS 132037642 132037776 . + 0 Parent=gene2055 chr5 ENCODE exon 132038050 132038097 . + . Parent=gene2055 chr5 ENCODE CDS 132038050 132038097 . + 0 Parent=gene2055 chr5 ENCODE exon 132043305 132043481 . + . Parent=gene2055 chr5 ENCODE CDS 132043305 132043481 . + 0 Parent=gene2055 chr5 ENCODE CDS 132046077 132046178 . + 0 Parent=gene2055 chr5 ENCODE exon 132046077 132046267 . + . Parent=gene2055 ### chr5 ENCODE gene 132037642 132046178 . + . ID=gene2056;Name=AC004039.4-002;name2=IL4 chr5 ENCODE exon 132037642 132037776 . + . Parent=gene2056 chr5 ENCODE CDS 132037642 132037776 . + 0 Parent=gene2056 chr5 ENCODE exon 132043305 132043481 . + . Parent=gene2056 chr5 ENCODE CDS 132043305 132043481 . + 0 Parent=gene2056 chr5 ENCODE exon 132046077 132046178 . + . Parent=gene2056 chr5 ENCODE CDS 132046077 132046178 . + 0 Parent=gene2056 ### chr5 ENCODE gene 132037949 132043460 . + . ID=gene2057;Name=AC004039.4-003;name2=IL4 chr5 ENCODE exon 132037949 132038097 . + . Parent=gene2057 chr5 ENCODE exon 132043305 132043460 . + . Parent=gene2057 ### chr5 ENCODE gene 132056267 132101229 . - . ID=gene2058;Name=AC004039.5-001;name2=KIF3A chr5 ENCODE exon 132056267 132060273 . - . Parent=gene2058 chr5 ENCODE CDS 132060225 132060273 . - 1 Parent=gene2058 chr5 ENCODE exon 132062762 132062886 . - . Parent=gene2058 chr5 ENCODE CDS 132062762 132062886 . - 0 Parent=gene2058 chr5 ENCODE exon 132063807 132063875 . - . Parent=gene2058 chr5 ENCODE CDS 132063807 132063875 . - 0 Parent=gene2058 chr5 ENCODE exon 132064238 132064291 . - . Parent=gene2058 chr5 ENCODE CDS 132064238 132064291 . - 0 Parent=gene2058 chr5 ENCODE exon 132065678 132065803 . - . Parent=gene2058 chr5 ENCODE CDS 132065678 132065803 . - 0 Parent=gene2058 chr5 ENCODE exon 132066149 132066259 . - . Parent=gene2058 chr5 ENCODE CDS 132066149 132066259 . - 0 Parent=gene2058 chr5 ENCODE exon 132066476 132066656 . - . Parent=gene2058 chr5 ENCODE CDS 132066476 132066656 . - 1 Parent=gene2058 chr5 ENCODE exon 132067054 132067210 . - . Parent=gene2058 chr5 ENCODE CDS 132067054 132067210 . - 2 Parent=gene2058 chr5 ENCODE exon 132074550 132074648 . - . Parent=gene2058 chr5 ENCODE CDS 132074550 132074648 . - 2 Parent=gene2058 chr5 ENCODE exon 132079348 132079522 . - . Parent=gene2058 chr5 ENCODE CDS 132079348 132079522 . - 0 Parent=gene2058 chr5 ENCODE exon 132079836 132080033 . - . Parent=gene2058 chr5 ENCODE CDS 132079836 132080033 . - 0 Parent=gene2058 chr5 ENCODE exon 132080436 132080575 . - . Parent=gene2058 chr5 ENCODE CDS 132080436 132080575 . - 2 Parent=gene2058 chr5 ENCODE exon 132084200 132084305 . - . Parent=gene2058 chr5 ENCODE CDS 132084200 132084305 . - 0 Parent=gene2058 chr5 ENCODE exon 132089719 132089803 . - . Parent=gene2058 chr5 ENCODE CDS 132089719 132089803 . - 1 Parent=gene2058 chr5 ENCODE exon 132089945 132090089 . - . Parent=gene2058 chr5 ENCODE CDS 132089945 132090089 . - 2 Parent=gene2058 chr5 ENCODE exon 132097796 132098069 . - . Parent=gene2058 chr5 ENCODE CDS 132097796 132098069 . - 0 Parent=gene2058 chr5 ENCODE CDS 132101005 132101010 . - 0 Parent=gene2058 chr5 ENCODE exon 132101005 132101229 . - . Parent=gene2058 ### chr5 ENCODE gene 132059221 132101163 . - . ID=gene2059;Name=AC004039.5-002;name2=KIF3A chr5 ENCODE exon 132059221 132060273 . - . Parent=gene2059 chr5 ENCODE CDS 132060225 132060273 . - 1 Parent=gene2059 chr5 ENCODE exon 132062762 132062886 . - . Parent=gene2059 chr5 ENCODE CDS 132062762 132062886 . - 0 Parent=gene2059 chr5 ENCODE exon 132063807 132063875 . - . Parent=gene2059 chr5 ENCODE CDS 132063807 132063875 . - 0 Parent=gene2059 chr5 ENCODE exon 132064238 132064291 . - . Parent=gene2059 chr5 ENCODE CDS 132064238 132064291 . - 0 Parent=gene2059 chr5 ENCODE exon 132065678 132065803 . - . Parent=gene2059 chr5 ENCODE CDS 132065678 132065803 . - 0 Parent=gene2059 chr5 ENCODE exon 132066149 132066259 . - . Parent=gene2059 chr5 ENCODE CDS 132066149 132066259 . - 0 Parent=gene2059 chr5 ENCODE exon 132066476 132066656 . - . Parent=gene2059 chr5 ENCODE CDS 132066476 132066656 . - 1 Parent=gene2059 chr5 ENCODE exon 132067054 132067210 . - . Parent=gene2059 chr5 ENCODE CDS 132067054 132067210 . - 2 Parent=gene2059 chr5 ENCODE exon 132070042 132070050 . - . Parent=gene2059 chr5 ENCODE CDS 132070042 132070050 . - 2 Parent=gene2059 chr5 ENCODE exon 132074550 132074648 . - . Parent=gene2059 chr5 ENCODE CDS 132074550 132074648 . - 2 Parent=gene2059 chr5 ENCODE exon 132079348 132079522 . - . Parent=gene2059 chr5 ENCODE CDS 132079348 132079522 . - 0 Parent=gene2059 chr5 ENCODE exon 132079836 132080033 . - . Parent=gene2059 chr5 ENCODE CDS 132079836 132080033 . - 0 Parent=gene2059 chr5 ENCODE exon 132080436 132080575 . - . Parent=gene2059 chr5 ENCODE CDS 132080436 132080575 . - 2 Parent=gene2059 chr5 ENCODE exon 132084200 132084305 . - . Parent=gene2059 chr5 ENCODE CDS 132084200 132084305 . - 0 Parent=gene2059 chr5 ENCODE exon 132089719 132089803 . - . Parent=gene2059 chr5 ENCODE CDS 132089719 132089803 . - 1 Parent=gene2059 chr5 ENCODE exon 132089945 132090089 . - . Parent=gene2059 chr5 ENCODE CDS 132089945 132090089 . - 2 Parent=gene2059 chr5 ENCODE exon 132097796 132098069 . - . Parent=gene2059 chr5 ENCODE CDS 132097796 132098069 . - 0 Parent=gene2059 chr5 ENCODE CDS 132101005 132101010 . - 0 Parent=gene2059 chr5 ENCODE exon 132101005 132101163 . - . Parent=gene2059 ### chr5 ENCODE gene 132060045 132066625 . - . ID=gene2060;Name=AC004039.5-006;name2=KIF3A chr5 ENCODE exon 132060045 132060273 . - . Parent=gene2060 chr5 ENCODE CDS 132060225 132060273 . - 1 Parent=gene2060 chr5 ENCODE exon 132062762 132062886 . - . Parent=gene2060 chr5 ENCODE CDS 132062762 132062886 . - 0 Parent=gene2060 chr5 ENCODE exon 132063807 132063875 . - . Parent=gene2060 chr5 ENCODE CDS 132063807 132063875 . - 0 Parent=gene2060 chr5 ENCODE exon 132064238 132064291 . - . Parent=gene2060 chr5 ENCODE CDS 132064238 132064291 . - 0 Parent=gene2060 chr5 ENCODE exon 132066149 132066259 . - . Parent=gene2060 chr5 ENCODE CDS 132066149 132066259 . - 0 Parent=gene2060 chr5 ENCODE exon 132066476 132066625 . - . Parent=gene2060 chr5 ENCODE CDS 132066476 132066625 . - 0 Parent=gene2060 ### chr5 ENCODE gene 132060139 132063071 . - . ID=gene2061;Name=AC004039.5-004;name2=KIF3A chr5 ENCODE exon 132060139 132060273 . - . Parent=gene2061 chr5 ENCODE exon 132062762 132063071 . - . Parent=gene2061 ### chr5 ENCODE gene 132062810 132067210 . - . ID=gene2062;Name=AC004039.5-003;name2=KIF3A chr5 ENCODE exon 132062810 132062886 . - . Parent=gene2062 chr5 ENCODE exon 132063807 132063875 . - . Parent=gene2062 chr5 ENCODE exon 132064238 132064291 . - . Parent=gene2062 chr5 ENCODE exon 132065678 132065803 . - . Parent=gene2062 chr5 ENCODE exon 132066149 132066195 . - . Parent=gene2062 chr5 ENCODE exon 132066509 132066656 . - . Parent=gene2062 chr5 ENCODE exon 132067054 132067210 . - . Parent=gene2062 ### chr5 ENCODE gene 132064127 132067201 . - . ID=gene2063;Name=AC004039.5-005;name2=KIF3A chr5 ENCODE exon 132064127 132064291 . - . Parent=gene2063 chr5 ENCODE exon 132065678 132065803 . - . Parent=gene2063 chr5 ENCODE exon 132066149 132066259 . - . Parent=gene2063 chr5 ENCODE exon 132066476 132066656 . - . Parent=gene2063 chr5 ENCODE exon 132067054 132067201 . - . Parent=gene2063 ### chr5 ENCODE gene 132089719 132100519 . - . ID=gene2064;Name=AC004039.5-007;name2=KIF3A chr5 ENCODE exon 132089719 132089803 . - . Parent=gene2064 chr5 ENCODE CDS 132089719 132089803 . - 1 Parent=gene2064 chr5 ENCODE exon 132089945 132090089 . - . Parent=gene2064 chr5 ENCODE CDS 132089945 132090089 . - 2 Parent=gene2064 chr5 ENCODE exon 132097796 132098069 . - . Parent=gene2064 chr5 ENCODE CDS 132097796 132098069 . - 0 Parent=gene2064 chr5 ENCODE CDS 132100366 132100368 . - 0 Parent=gene2064 chr5 ENCODE exon 132100366 132100519 . - . Parent=gene2064 ### chr5 ENCODE gene 132111036 132117755 . + . ID=gene2065;Name=AC004775.1-001;name2=AC004775.1 chr5 ENCODE exon 132111036 132111515 . + . Parent=gene2065 chr5 ENCODE CDS 132111087 132111515 . + 0 Parent=gene2065 chr5 ENCODE exon 132111938 132112066 . + . Parent=gene2065 chr5 ENCODE CDS 132111938 132112066 . + 0 Parent=gene2065 chr5 ENCODE exon 132112939 132113013 . + . Parent=gene2065 chr5 ENCODE CDS 132112939 132113013 . + 0 Parent=gene2065 chr5 ENCODE exon 132114448 132114588 . + . Parent=gene2065 chr5 ENCODE CDS 132114448 132114588 . + 0 Parent=gene2065 chr5 ENCODE exon 132115557 132115787 . + . Parent=gene2065 chr5 ENCODE CDS 132115557 132115787 . + 0 Parent=gene2065 chr5 ENCODE CDS 132116457 132116561 . + 0 Parent=gene2065 chr5 ENCODE exon 132116457 132117755 . + . Parent=gene2065 ### chr5 ENCODE gene 132112961 132114884 . + . ID=gene2066;Name=AC004775.1-002;name2=AC004775.1 chr5 ENCODE exon 132112961 132113013 . + . Parent=gene2066 chr5 ENCODE exon 132114448 132114884 . + . Parent=gene2066 ### chr5 ENCODE gene 132114408 132140966 . - . ID=gene2067;Name=AC004775.2-002;name2=SEPT8 chr5 ENCODE exon 132114408 132115772 . - . Parent=gene2067 chr5 ENCODE CDS 132115607 132115772 . - 1 Parent=gene2067 chr5 ENCODE exon 132124393 132124583 . - . Parent=gene2067 chr5 ENCODE CDS 132124393 132124583 . - 0 Parent=gene2067 chr5 ENCODE exon 132124724 132124856 . - . Parent=gene2067 chr5 ENCODE CDS 132124724 132124856 . - 1 Parent=gene2067 chr5 ENCODE exon 132125049 132125217 . - . Parent=gene2067 chr5 ENCODE CDS 132125049 132125217 . - 2 Parent=gene2067 chr5 ENCODE exon 132125391 132125487 . - . Parent=gene2067 chr5 ENCODE CDS 132125391 132125487 . - 0 Parent=gene2067 chr5 ENCODE exon 132126075 132126236 . - . Parent=gene2067 chr5 ENCODE CDS 132126075 132126236 . - 0 Parent=gene2067 chr5 ENCODE exon 132127297 132127483 . - . Parent=gene2067 chr5 ENCODE CDS 132127297 132127483 . - 1 Parent=gene2067 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2067 chr5 ENCODE CDS 132127815 132128010 . - 2 Parent=gene2067 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2067 chr5 ENCODE CDS 132129000 132129120 . - 0 Parent=gene2067 chr5 ENCODE CDS 132140699 132140728 . - 0 Parent=gene2067 chr5 ENCODE exon 132140699 132140966 . - . Parent=gene2067 ### chr5 ENCODE gene 132114531 132115602 . + . ID=gene2068;name2=AC004775.1;Name=AC004775.1-003 chr5 ENCODE exon 132114531 132114588 . + . Parent=gene2068 chr5 ENCODE exon 132115285 132115602 . + . Parent=gene2068 ### chr5 ENCODE gene 132115050 132124462 . - . ID=gene2069;Name=AC004775.2-010;name2=SEPT8 chr5 ENCODE exon 132115050 132115769 . - . Parent=gene2069 chr5 ENCODE exon 132124393 132124462 . - . Parent=gene2069 ### chr5 ENCODE gene 132117770 132140829 . - . ID=gene2070;Name=AC004775.2-006;name2=SEPT8 chr5 ENCODE exon 132117770 132118111 . - . Parent=gene2070 chr5 ENCODE CDS 132118009 132118111 . - 1 Parent=gene2070 chr5 ENCODE exon 132124393 132124583 . - . Parent=gene2070 chr5 ENCODE CDS 132124393 132124583 . - 0 Parent=gene2070 chr5 ENCODE exon 132124724 132124856 . - . Parent=gene2070 chr5 ENCODE CDS 132124724 132124856 . - 1 Parent=gene2070 chr5 ENCODE exon 132125049 132125217 . - . Parent=gene2070 chr5 ENCODE CDS 132125049 132125217 . - 2 Parent=gene2070 chr5 ENCODE exon 132125391 132125487 . - . Parent=gene2070 chr5 ENCODE CDS 132125391 132125487 . - 0 Parent=gene2070 chr5 ENCODE exon 132126075 132126236 . - . Parent=gene2070 chr5 ENCODE CDS 132126075 132126236 . - 0 Parent=gene2070 chr5 ENCODE exon 132127297 132127477 . - . Parent=gene2070 chr5 ENCODE CDS 132127297 132127477 . - 1 Parent=gene2070 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2070 chr5 ENCODE CDS 132127815 132128010 . - 2 Parent=gene2070 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2070 chr5 ENCODE CDS 132129000 132129120 . - 0 Parent=gene2070 chr5 ENCODE CDS 132140699 132140728 . - 0 Parent=gene2070 chr5 ENCODE exon 132140699 132140829 . - . Parent=gene2070 ### chr5 ENCODE gene 132119596 132141012 . - . ID=gene2071;name2=SEPT8;Name=AC004775.2-003 chr5 ENCODE exon 132119596 132122415 . - . Parent=gene2071 chr5 ENCODE CDS 132122412 132122415 . - 1 Parent=gene2071 chr5 ENCODE exon 132124393 132124583 . - . Parent=gene2071 chr5 ENCODE CDS 132124393 132124583 . - 0 Parent=gene2071 chr5 ENCODE exon 132124724 132124856 . - . Parent=gene2071 chr5 ENCODE CDS 132124724 132124856 . - 1 Parent=gene2071 chr5 ENCODE exon 132125049 132125217 . - . Parent=gene2071 chr5 ENCODE CDS 132125049 132125217 . - 2 Parent=gene2071 chr5 ENCODE exon 132125391 132125487 . - . Parent=gene2071 chr5 ENCODE CDS 132125391 132125487 . - 0 Parent=gene2071 chr5 ENCODE exon 132126075 132126236 . - . Parent=gene2071 chr5 ENCODE CDS 132126075 132126236 . - 0 Parent=gene2071 chr5 ENCODE exon 132127297 132127483 . - . Parent=gene2071 chr5 ENCODE CDS 132127297 132127483 . - 1 Parent=gene2071 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2071 chr5 ENCODE CDS 132127815 132128010 . - 2 Parent=gene2071 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2071 chr5 ENCODE CDS 132129000 132129120 . - 0 Parent=gene2071 chr5 ENCODE CDS 132140699 132140728 . - 0 Parent=gene2071 chr5 ENCODE exon 132140699 132141012 . - . Parent=gene2071 ### chr5 ENCODE gene 132119924 132140935 . - . ID=gene2072;Name=AC004775.2-004;name2=SEPT8 chr5 ENCODE exon 132119924 132122598 . - . Parent=gene2072 chr5 ENCODE CDS 132122592 132122598 . - 1 Parent=gene2072 chr5 ENCODE exon 132124393 132124583 . - . Parent=gene2072 chr5 ENCODE CDS 132124393 132124583 . - 0 Parent=gene2072 chr5 ENCODE exon 132124724 132124856 . - . Parent=gene2072 chr5 ENCODE CDS 132124724 132124856 . - 1 Parent=gene2072 chr5 ENCODE exon 132125049 132125217 . - . Parent=gene2072 chr5 ENCODE CDS 132125049 132125217 . - 2 Parent=gene2072 chr5 ENCODE exon 132125391 132125487 . - . Parent=gene2072 chr5 ENCODE CDS 132125391 132125487 . - 0 Parent=gene2072 chr5 ENCODE exon 132126075 132126236 . - . Parent=gene2072 chr5 ENCODE CDS 132126075 132126236 . - 0 Parent=gene2072 chr5 ENCODE exon 132127297 132127483 . - . Parent=gene2072 chr5 ENCODE CDS 132127297 132127483 . - 1 Parent=gene2072 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2072 chr5 ENCODE CDS 132127815 132128010 . - 2 Parent=gene2072 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2072 chr5 ENCODE CDS 132129000 132129120 . - 0 Parent=gene2072 chr5 ENCODE CDS 132140699 132140728 . - 0 Parent=gene2072 chr5 ENCODE exon 132140699 132140935 . - . Parent=gene2072 ### chr5 ENCODE gene 132121734 132141807 . - . ID=gene2073;Name=AC004775.2-001;name2=SEPT8 chr5 ENCODE exon 132121734 132122415 . - . Parent=gene2073 chr5 ENCODE exon 132124393 132124583 . - . Parent=gene2073 chr5 ENCODE exon 132124724 132124856 . - . Parent=gene2073 chr5 ENCODE exon 132125049 132125217 . - . Parent=gene2073 chr5 ENCODE exon 132125391 132125487 . - . Parent=gene2073 chr5 ENCODE exon 132126075 132126236 . - . Parent=gene2073 chr5 ENCODE exon 132127297 132127483 . - . Parent=gene2073 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2073 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2073 chr5 ENCODE exon 132141267 132141485 . - . Parent=gene2073 chr5 ENCODE exon 132141676 132141807 . - . Parent=gene2073 ### chr5 ENCODE gene 132121735 132140852 . - . ID=gene2074;Name=AC004775.2-005;name2=SEPT8 chr5 ENCODE exon 132121735 132122147 . - . Parent=gene2074 chr5 ENCODE CDS 132122105 132122147 . - 1 Parent=gene2074 chr5 ENCODE exon 132124393 132124583 . - . Parent=gene2074 chr5 ENCODE CDS 132124393 132124583 . - 0 Parent=gene2074 chr5 ENCODE exon 132124724 132124856 . - . Parent=gene2074 chr5 ENCODE CDS 132124724 132124856 . - 1 Parent=gene2074 chr5 ENCODE exon 132125049 132125217 . - . Parent=gene2074 chr5 ENCODE CDS 132125049 132125217 . - 2 Parent=gene2074 chr5 ENCODE exon 132125391 132125487 . - . Parent=gene2074 chr5 ENCODE CDS 132125391 132125487 . - 0 Parent=gene2074 chr5 ENCODE exon 132126075 132126236 . - . Parent=gene2074 chr5 ENCODE CDS 132126075 132126236 . - 0 Parent=gene2074 chr5 ENCODE exon 132127297 132127477 . - . Parent=gene2074 chr5 ENCODE CDS 132127297 132127477 . - 1 Parent=gene2074 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2074 chr5 ENCODE CDS 132127815 132128010 . - 2 Parent=gene2074 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2074 chr5 ENCODE CDS 132129000 132129120 . - 0 Parent=gene2074 chr5 ENCODE CDS 132140699 132140728 . - 0 Parent=gene2074 chr5 ENCODE exon 132140699 132140852 . - . Parent=gene2074 ### chr5 ENCODE gene 132121791 132140811 . - . ID=gene2075;Name=AC004775.2-007;name2=SEPT8 chr5 ENCODE exon 132121791 132122147 . - . Parent=gene2075 chr5 ENCODE CDS 132122105 132122147 . - 1 Parent=gene2075 chr5 ENCODE exon 132124393 132124583 . - . Parent=gene2075 chr5 ENCODE CDS 132124393 132124583 . - 0 Parent=gene2075 chr5 ENCODE exon 132124724 132124856 . - . Parent=gene2075 chr5 ENCODE CDS 132124724 132124856 . - 1 Parent=gene2075 chr5 ENCODE exon 132125049 132125217 . - . Parent=gene2075 chr5 ENCODE CDS 132125049 132125217 . - 2 Parent=gene2075 chr5 ENCODE exon 132125391 132125487 . - . Parent=gene2075 chr5 ENCODE CDS 132125391 132125487 . - 0 Parent=gene2075 chr5 ENCODE exon 132126075 132126236 . - . Parent=gene2075 chr5 ENCODE CDS 132126075 132126236 . - 0 Parent=gene2075 chr5 ENCODE exon 132127297 132127483 . - . Parent=gene2075 chr5 ENCODE CDS 132127297 132127483 . - 1 Parent=gene2075 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2075 chr5 ENCODE CDS 132127815 132128010 . - 2 Parent=gene2075 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2075 chr5 ENCODE CDS 132129000 132129120 . - 0 Parent=gene2075 chr5 ENCODE CDS 132140699 132140728 . - 0 Parent=gene2075 chr5 ENCODE exon 132140699 132140811 . - . Parent=gene2075 ### chr5 ENCODE gene 132122192 132126083 . - . ID=gene2076;Name=AC004775.2-011;name2=SEPT8 chr5 ENCODE exon 132122192 132122415 . - . Parent=gene2076 chr5 ENCODE exon 132124393 132124583 . - . Parent=gene2076 chr5 ENCODE exon 132124724 132124856 . - . Parent=gene2076 chr5 ENCODE exon 132125049 132125089 . - . Parent=gene2076 chr5 ENCODE exon 132125443 132125487 . - . Parent=gene2076 chr5 ENCODE exon 132126075 132126083 . - . Parent=gene2076 ### chr5 ENCODE gene 132125092 132129065 . - . ID=gene2077;Name=AC004775.2-009;name2=SEPT8 chr5 ENCODE exon 132125092 132125217 . - . Parent=gene2077 chr5 ENCODE exon 132126075 132126236 . - . Parent=gene2077 chr5 ENCODE exon 132127297 132127483 . - . Parent=gene2077 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2077 chr5 ENCODE exon 132129000 132129065 . - . Parent=gene2077 ### chr5 ENCODE gene 132126128 132140830 . - . ID=gene2078;name2=SEPT8;Name=AC004775.2-014 chr5 ENCODE exon 132126128 132126236 . - . Parent=gene2078 chr5 ENCODE CDS 132126128 132126236 . - 0 Parent=gene2078 chr5 ENCODE exon 132127297 132127477 . - . Parent=gene2078 chr5 ENCODE CDS 132127297 132127477 . - 1 Parent=gene2078 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2078 chr5 ENCODE CDS 132127815 132128010 . - 2 Parent=gene2078 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2078 chr5 ENCODE CDS 132129000 132129120 . - 0 Parent=gene2078 chr5 ENCODE CDS 132140699 132140728 . - 0 Parent=gene2078 chr5 ENCODE exon 132140699 132140830 . - . Parent=gene2078 ### chr5 ENCODE gene 132126194 132139557 . - . ID=gene2079;Name=AC004775.2-013;name2=SEPT8 chr5 ENCODE exon 132126194 132126236 . - . Parent=gene2079 chr5 ENCODE exon 132127297 132127477 . - . Parent=gene2079 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2079 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2079 chr5 ENCODE exon 132139326 132139557 . - . Parent=gene2079 ### chr5 ENCODE gene 132127360 132141600 . - . ID=gene2080;Name=AC004775.2-012;name2=SEPT8 chr5 ENCODE exon 132127360 132127483 . - . Parent=gene2080 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2080 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2080 chr5 ENCODE exon 132141349 132141600 . - . Parent=gene2080 ### chr5 ENCODE gene 132127415 132170832 . - . ID=gene2081;Name=AC004775.2-016;name2=SEPT8 chr5 ENCODE exon 132127415 132127483 . - . Parent=gene2081 chr5 ENCODE exon 132127815 132128010 . - . Parent=gene2081 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2081 chr5 ENCODE exon 132170657 132170832 . - . Parent=gene2081 ### chr5 ENCODE gene 132127552 132140812 . - . ID=gene2082;Name=AC004775.2-008;name2=SEPT8 chr5 ENCODE exon 132127552 132128010 . - . Parent=gene2082 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2082 chr5 ENCODE exon 132140699 132140812 . - . Parent=gene2082 ### chr5 ENCODE gene 132127982 132140839 . - . ID=gene2083;Name=AC004775.2-015;name2=SEPT8 chr5 ENCODE exon 132127982 132128010 . - . Parent=gene2083 chr5 ENCODE exon 132129000 132129120 . - . Parent=gene2083 chr5 ENCODE exon 132137514 132137803 . - . Parent=gene2083 chr5 ENCODE exon 132140699 132140839 . - . Parent=gene2083 ### chr5 ENCODE gene 132177178 132180388 . + . ID=gene2084;Name=AC004775.3-001;name2=ANKRD43 chr5 ENCODE exon 132177178 132180388 . + . Parent=gene2084 chr5 ENCODE CDS 132177213 132178862 . + 0 Parent=gene2084 ### chr5 ENCODE gene 132185732 132189019 . - . ID=gene2085;Name=AC004775.4-005;name2=SHROOM1 chr5 ENCODE exon 132185732 132185798 . - . Parent=gene2085 chr5 ENCODE exon 132188327 132188412 . - . Parent=gene2085 chr5 ENCODE exon 132188609 132188664 . - . Parent=gene2085 chr5 ENCODE exon 132188754 132189019 . - . Parent=gene2085 ### chr5 ENCODE gene 132185732 132194489 . - . ID=gene2086;Name=AC004775.4-001;name2=SHROOM1 chr5 ENCODE exon 132185732 132186719 . - . Parent=gene2086 chr5 ENCODE CDS 132186387 132186719 . - 0 Parent=gene2086 chr5 ENCODE exon 132186841 132187113 . - . Parent=gene2086 chr5 ENCODE CDS 132186841 132187113 . - 0 Parent=gene2086 chr5 ENCODE exon 132187214 132187355 . - . Parent=gene2086 chr5 ENCODE CDS 132187214 132187355 . - 1 Parent=gene2086 chr5 ENCODE exon 132187441 132188010 . - . Parent=gene2086 chr5 ENCODE CDS 132187441 132188010 . - 1 Parent=gene2086 chr5 ENCODE exon 132188206 132188412 . - . Parent=gene2086 chr5 ENCODE CDS 132188206 132188412 . - 1 Parent=gene2086 chr5 ENCODE exon 132188609 132188664 . - . Parent=gene2086 chr5 ENCODE CDS 132188609 132188664 . - 0 Parent=gene2086 chr5 ENCODE CDS 132188754 132189731 . - 0 Parent=gene2086 chr5 ENCODE exon 132188754 132189773 . - . Parent=gene2086 chr5 ENCODE exon 132189868 132190178 . - . Parent=gene2086 chr5 ENCODE exon 132191052 132191198 . - . Parent=gene2086 chr5 ENCODE exon 132194185 132194489 . - . Parent=gene2086 ### chr5 ENCODE gene 132185911 132189901 . - . ID=gene2087;Name=AC004775.4-002;name2=SHROOM1 chr5 ENCODE exon 132185911 132186704 . - . Parent=gene2087 chr5 ENCODE CDS 132186387 132186704 . - 0 Parent=gene2087 chr5 ENCODE exon 132186841 132187113 . - . Parent=gene2087 chr5 ENCODE CDS 132186841 132187113 . - 0 Parent=gene2087 chr5 ENCODE exon 132187214 132187355 . - . Parent=gene2087 chr5 ENCODE CDS 132187214 132187355 . - 1 Parent=gene2087 chr5 ENCODE exon 132187441 132188010 . - . Parent=gene2087 chr5 ENCODE CDS 132187441 132188010 . - 1 Parent=gene2087 chr5 ENCODE exon 132188206 132188412 . - . Parent=gene2087 chr5 ENCODE CDS 132188206 132188412 . - 1 Parent=gene2087 chr5 ENCODE exon 132188609 132188664 . - . Parent=gene2087 chr5 ENCODE CDS 132188609 132188664 . - 0 Parent=gene2087 chr5 ENCODE CDS 132188754 132189731 . - 0 Parent=gene2087 chr5 ENCODE exon 132188754 132189901 . - . Parent=gene2087 ### chr5 ENCODE gene 132186387 132189731 . - . ID=gene2088;Name=AC004775.4-007;name2=SHROOM1 chr5 ENCODE exon 132186387 132186719 . - . Parent=gene2088 chr5 ENCODE CDS 132186387 132186719 . - 0 Parent=gene2088 chr5 ENCODE exon 132186841 132187113 . - . Parent=gene2088 chr5 ENCODE CDS 132186841 132187113 . - 0 Parent=gene2088 chr5 ENCODE exon 132187214 132187355 . - . Parent=gene2088 chr5 ENCODE CDS 132187214 132187355 . - 1 Parent=gene2088 chr5 ENCODE exon 132187441 132188010 . - . Parent=gene2088 chr5 ENCODE CDS 132187441 132188010 . - 1 Parent=gene2088 chr5 ENCODE exon 132188609 132188664 . - . Parent=gene2088 chr5 ENCODE CDS 132188609 132188664 . - 0 Parent=gene2088 chr5 ENCODE exon 132188754 132189731 . - . Parent=gene2088 chr5 ENCODE CDS 132188754 132189731 . - 0 Parent=gene2088 ### chr5 ENCODE gene 132186874 132187396 . - . ID=gene2089;Name=AC004775.4-004;name2=SHROOM1 chr5 ENCODE exon 132186874 132187113 . - . Parent=gene2089 chr5 ENCODE exon 132187214 132187396 . - . Parent=gene2089 ### chr5 ENCODE gene 132187630 132188207 . - . ID=gene2090;Name=AC004775.4-006;name2=SHROOM1 chr5 ENCODE exon 132187630 132187771 . - . Parent=gene2090 chr5 ENCODE exon 132187872 132188010 . - . Parent=gene2090 chr5 ENCODE exon 132188206 132188207 . - . Parent=gene2090 ### chr5 ENCODE gene 132188760 132194250 . - . ID=gene2091;Name=AC004775.4-003;name2=SHROOM1 chr5 ENCODE CDS 132188760 132189731 . - 0 Parent=gene2091 chr5 ENCODE exon 132188760 132189773 . - . Parent=gene2091 chr5 ENCODE exon 132194185 132194250 . - . Parent=gene2091 ### chr5 ENCODE gene 132224772 132230228 . - . ID=gene2092;Name=AC004500.1-001;name2=GDF9 chr5 ENCODE exon 132224772 132226147 . - . Parent=gene2092 chr5 ENCODE CDS 132225180 132226147 . - 2 Parent=gene2092 chr5 ENCODE CDS 132227728 132228124 . - 0 Parent=gene2092 chr5 ENCODE exon 132227728 132228952 . - . Parent=gene2092 chr5 ENCODE exon 132230190 132230228 . - . Parent=gene2092 ### chr5 ENCODE gene 132230151 132231622 . + . ID=gene2093;Name=AC004500.2-001;name2=UQCRQ chr5 ENCODE exon 132230151 132230278 . + . Parent=gene2093 chr5 ENCODE exon 132230460 132230626 . + . Parent=gene2093 chr5 ENCODE CDS 132230473 132230626 . + 0 Parent=gene2093 chr5 ENCODE CDS 132231079 132231173 . + 2 Parent=gene2093 chr5 ENCODE exon 132231079 132231622 . + . Parent=gene2093 ### chr5 ENCODE gene 132230221 132231278 . + . ID=gene2094;name2=UQCRQ;Name=AC004500.2-002 chr5 ENCODE exon 132230221 132230282 . + . Parent=gene2094 chr5 ENCODE exon 132230460 132230626 . + . Parent=gene2094 chr5 ENCODE CDS 132230473 132230626 . + 0 Parent=gene2094 chr5 ENCODE CDS 132231079 132231173 . + 2 Parent=gene2094 chr5 ENCODE exon 132231079 132231278 . + . Parent=gene2094 ### chr5 ENCODE gene 132230224 132231278 . + . ID=gene2095;Name=AC004500.2-003;name2=UQCRQ chr5 ENCODE exon 132230224 132230278 . + . Parent=gene2095 chr5 ENCODE exon 132230460 132231278 . + . Parent=gene2095 ### chr5 ENCODE gene 132230233 132231290 . + . ID=gene2096;Name=AC004500.2-004;name2=UQCRQ chr5 ENCODE exon 132230233 132230278 . + . Parent=gene2096 chr5 ENCODE exon 132231079 132231290 . + . Parent=gene2096 ### chr5 ENCODE gene 132230237 132231274 . + . ID=gene2097;Name=AC004500.2-005;name2=UQCRQ chr5 ENCODE exon 132230237 132230626 . + . Parent=gene2097 chr5 ENCODE CDS 132230473 132230626 . + 0 Parent=gene2097 chr5 ENCODE CDS 132231079 132231173 . + 2 Parent=gene2097 chr5 ENCODE exon 132231079 132231274 . + . Parent=gene2097 ### chr5 ENCODE gene 132230248 132230933 . + . ID=gene2098;Name=AC004500.2-006;name2=UQCRQ chr5 ENCODE exon 132230248 132230282 . + . Parent=gene2098 chr5 ENCODE exon 132230460 132230933 . + . Parent=gene2098 ### chr5 ENCODE gene 132235913 132238637 . + . ID=gene2099;Name=AC004500.3-001;name2=LEAP2 chr5 ENCODE exon 132235913 132237342 . + . Parent=gene2099 chr5 ENCODE CDS 132237286 132237342 . + 0 Parent=gene2099 chr5 ENCODE exon 132237541 132237680 . + . Parent=gene2099 chr5 ENCODE CDS 132237541 132237680 . + 0 Parent=gene2099 chr5 ENCODE CDS 132238001 132238037 . + 1 Parent=gene2099 chr5 ENCODE exon 132238001 132238637 . + . Parent=gene2099 ### chr5 ENCODE gene 132237035 132238289 . + . ID=gene2100;Name=AC004500.3-002;name2=LEAP2 chr5 ENCODE exon 132237035 132237680 . + . Parent=gene2100 chr5 ENCODE exon 132238001 132238289 . + . Parent=gene2100 ### chr5 ENCODE gene 132237257 132238286 . + . ID=gene2101;Name=AC004500.3-003;name2=LEAP2 chr5 ENCODE exon 132237257 132237342 . + . Parent=gene2101 chr5 ENCODE exon 132237541 132237680 . + . Parent=gene2101 chr5 ENCODE exon 132238056 132238286 . + . Parent=gene2101 ### chr5 ENCODE gene 132238970 132267995 . - . ID=gene2102;Name=AC004500.4-001;name2=AFF4 chr5 ENCODE exon 132238970 132244777 . - . Parent=gene2102 chr5 ENCODE exon 132246931 132247151 . - . Parent=gene2102 chr5 ENCODE exon 132248667 132248710 . - . Parent=gene2102 chr5 ENCODE exon 132249901 132249994 . - . Parent=gene2102 chr5 ENCODE exon 132251112 132251183 . - . Parent=gene2102 chr5 ENCODE exon 132251437 132251573 . - . Parent=gene2102 chr5 ENCODE exon 132251688 132251751 . - . Parent=gene2102 chr5 ENCODE exon 132252670 132252764 . - . Parent=gene2102 chr5 ENCODE exon 132255755 132255995 . - . Parent=gene2102 chr5 ENCODE exon 132256621 132256709 . - . Parent=gene2102 chr5 ENCODE exon 132259914 132260831 . - . Parent=gene2102 chr5 ENCODE exon 132261821 132261983 . - . Parent=gene2102 chr5 ENCODE exon 132262695 132262732 . - . Parent=gene2102 chr5 ENCODE exon 132263178 132263232 . - . Parent=gene2102 chr5 ENCODE exon 132266033 132266078 . - . Parent=gene2102 chr5 ENCODE exon 132267959 132267995 . - . Parent=gene2102 ### chr5 ENCODE gene 132255408 132267995 . - . ID=gene2103;Name=AC004500.4-004;name2=AC004500.4 chr5 ENCODE exon 132255408 132255995 . - . Parent=gene2103 chr5 ENCODE exon 132256621 132256709 . - . Parent=gene2103 chr5 ENCODE exon 132259914 132260831 . - . Parent=gene2103 chr5 ENCODE exon 132261821 132261983 . - . Parent=gene2103 chr5 ENCODE exon 132262695 132262732 . - . Parent=gene2103 chr5 ENCODE exon 132263178 132263232 . - . Parent=gene2103 chr5 ENCODE exon 132266033 132266078 . - . Parent=gene2103 chr5 ENCODE exon 132267959 132267995 . - . Parent=gene2103 ### chr5 ENCODE gene 132260402 132264673 . - . ID=gene2104;Name=AC004500.4-008;name2=AC004500.4 chr5 ENCODE exon 132260402 132260831 . - . Parent=gene2104 chr5 ENCODE exon 132261821 132261983 . - . Parent=gene2104 chr5 ENCODE exon 132262695 132262732 . - . Parent=gene2104 chr5 ENCODE exon 132263178 132263232 . - . Parent=gene2104 chr5 ENCODE exon 132264463 132264673 . - . Parent=gene2104 ### chr5 ENCODE gene 132260795 132267995 . - . ID=gene2105;Name=AC004500.4-006;name2=AC004500.4 chr5 ENCODE exon 132260795 132260831 . - . Parent=gene2105 chr5 ENCODE exon 132262695 132262732 . - . Parent=gene2105 chr5 ENCODE exon 132263178 132263232 . - . Parent=gene2105 chr5 ENCODE exon 132266033 132266078 . - . Parent=gene2105 chr5 ENCODE exon 132267959 132267995 . - . Parent=gene2105 ### chr5 ENCODE gene 132260795 132267995 . - . ID=gene2106;Name=AC004500.4-005;name2=AC004500.4 chr5 ENCODE exon 132260795 132260831 . - . Parent=gene2106 chr5 ENCODE exon 132261821 132261983 . - . Parent=gene2106 chr5 ENCODE exon 132262695 132262732 . - . Parent=gene2106 chr5 ENCODE exon 132263178 132263232 . - . Parent=gene2106 chr5 ENCODE exon 132266033 132266078 . - . Parent=gene2106 chr5 ENCODE exon 132267959 132267995 . - . Parent=gene2106 ### chr5 ENCODE gene 132261874 132267995 . - . ID=gene2107;Name=AC004500.4-007;name2=AC004500.4 chr5 ENCODE exon 132261874 132261983 . - . Parent=gene2107 chr5 ENCODE exon 132262695 132262732 . - . Parent=gene2107 chr5 ENCODE exon 132263178 132263232 . - . Parent=gene2107 chr5 ENCODE exon 132266033 132266078 . - . Parent=gene2107 chr5 ENCODE exon 132267959 132267995 . - . Parent=gene2107 ### chr5 ENCODE gene 132267452 132267995 . - . ID=gene2108;name2=AC004500.4;Name=AC004500.4-002 chr5 ENCODE exon 132267452 132267771 . - . Parent=gene2108 chr5 ENCODE exon 132267959 132267995 . - . Parent=gene2108 ### chr5 ENCODE gene 141951927 141981091 . - . ID=gene2109;Name=AC005370.1-001;name2=FGF1 chr5 ENCODE exon 141951927 141955233 . - . Parent=gene2109 chr5 ENCODE CDS 141955039 141955233 . - 0 Parent=gene2109 chr5 ENCODE exon 141960451 141960554 . - . Parent=gene2109 chr5 ENCODE CDS 141960451 141960554 . - 2 Parent=gene2109 chr5 ENCODE CDS 141973708 141973876 . - 0 Parent=gene2109 chr5 ENCODE exon 141973708 141973910 . - . Parent=gene2109 chr5 ENCODE exon 141981046 141981091 . - . Parent=gene2109 ### chr5 ENCODE gene 141953118 142045421 . - . ID=gene2110;name2=FGF1;Name=AC005370.1-008 chr5 ENCODE exon 141953118 141955233 . - . Parent=gene2110 chr5 ENCODE CDS 141955039 141955233 . - 0 Parent=gene2110 chr5 ENCODE exon 141960451 141960554 . - . Parent=gene2110 chr5 ENCODE CDS 141960451 141960554 . - 2 Parent=gene2110 chr5 ENCODE CDS 141973708 141973876 . - 0 Parent=gene2110 chr5 ENCODE exon 141973708 141973910 . - . Parent=gene2110 chr5 ENCODE exon 142045263 142045421 . - . Parent=gene2110 ### chr5 ENCODE gene 141953592 142057467 . - . ID=gene2111;Name=AC005370.1-005;name2=FGF1 chr5 ENCODE exon 141953592 141954351 . - . Parent=gene2111 chr5 ENCODE exon 141973887 141973910 . - . Parent=gene2111 chr5 ENCODE exon 142057371 142057467 . - . Parent=gene2111 ### chr5 ENCODE gene 141954501 142046134 . - . ID=gene2112;Name=AC005370.1-002;name2=FGF1 chr5 ENCODE exon 141954501 141955233 . - . Parent=gene2112 chr5 ENCODE CDS 141955039 141955233 . - 0 Parent=gene2112 chr5 ENCODE exon 141960451 141960554 . - . Parent=gene2112 chr5 ENCODE CDS 141960451 141960554 . - 2 Parent=gene2112 chr5 ENCODE CDS 141973708 141973876 . - 0 Parent=gene2112 chr5 ENCODE exon 141973708 141973910 . - . Parent=gene2112 chr5 ENCODE exon 142045706 142046134 . - . Parent=gene2112 ### chr5 ENCODE gene 141954837 142045800 . - . ID=gene2113;Name=AC005370.1-007;name2=FGF1 chr5 ENCODE exon 141954837 141955233 . - . Parent=gene2113 chr5 ENCODE exon 141973708 141973910 . - . Parent=gene2113 chr5 ENCODE exon 142045706 142045800 . - . Parent=gene2113 ### chr5 ENCODE gene 141954910 142057801 . - . ID=gene2114;name2=FGF1;Name=AC005370.1-003 chr5 ENCODE exon 141954910 141955233 . - . Parent=gene2114 chr5 ENCODE exon 141973708 141973910 . - . Parent=gene2114 chr5 ENCODE exon 142057371 142057801 . - . Parent=gene2114 ### chr5 ENCODE gene 141954980 142057770 . - . ID=gene2115;Name=AC005370.1-009;name2=FGF1 chr5 ENCODE exon 141954980 141955233 . - . Parent=gene2115 chr5 ENCODE exon 141960451 141960549 . - . Parent=gene2115 chr5 ENCODE exon 141973708 141973910 . - . Parent=gene2115 chr5 ENCODE exon 142057371 142057464 . - . Parent=gene2115 chr5 ENCODE exon 142057662 142057770 . - . Parent=gene2115 ### chr5 ENCODE gene 141954980 142057801 . - . ID=gene2116;Name=AC005370.1-012;name2=FGF1 chr5 ENCODE exon 141954980 141955233 . - . Parent=gene2116 chr5 ENCODE exon 141960451 141960554 . - . Parent=gene2116 chr5 ENCODE exon 141973708 141973910 . - . Parent=gene2116 chr5 ENCODE exon 142057371 142057801 . - . Parent=gene2116 ### chr5 ENCODE gene 141954992 142057795 . - . ID=gene2117;Name=AC005370.1-010;name2=FGF1 chr5 ENCODE exon 141954992 141955233 . - . Parent=gene2117 chr5 ENCODE CDS 141955039 141955233 . - 0 Parent=gene2117 chr5 ENCODE exon 141960451 141960554 . - . Parent=gene2117 chr5 ENCODE CDS 141960451 141960554 . - 2 Parent=gene2117 chr5 ENCODE CDS 141973708 141973876 . - 0 Parent=gene2117 chr5 ENCODE exon 141973708 141973910 . - . Parent=gene2117 chr5 ENCODE exon 142057662 142057795 . - . Parent=gene2117 ### chr5 ENCODE gene 141954992 142057795 . - . ID=gene2118;Name=AC005370.1-006;name2=FGF1 chr5 ENCODE exon 141954992 141955233 . - . Parent=gene2118 chr5 ENCODE CDS 141955039 141955233 . - 0 Parent=gene2118 chr5 ENCODE exon 141960451 141960554 . - . Parent=gene2118 chr5 ENCODE CDS 141960451 141960554 . - 2 Parent=gene2118 chr5 ENCODE CDS 141973708 141973876 . - 0 Parent=gene2118 chr5 ENCODE exon 141973708 141973910 . - . Parent=gene2118 chr5 ENCODE exon 142057371 142057464 . - . Parent=gene2118 chr5 ENCODE exon 142057662 142057795 . - . Parent=gene2118 ### chr5 ENCODE gene 141954992 142057801 . - . ID=gene2119;Name=AC005370.1-011;name2=FGF1 chr5 ENCODE exon 141954992 141955233 . - . Parent=gene2119 chr5 ENCODE exon 141960451 141960554 . - . Parent=gene2119 chr5 ENCODE exon 142057757 142057801 . - . Parent=gene2119 ### chr5 ENCODE gene 141960549 142003950 . - . ID=gene2120;Name=AC005370.1-004;name2=FGF1 chr5 ENCODE exon 141960549 141960554 . - . Parent=gene2120 chr5 ENCODE CDS 141960549 141960554 . - 2 Parent=gene2120 chr5 ENCODE CDS 141973708 141973876 . - 0 Parent=gene2120 chr5 ENCODE exon 141973708 141973910 . - . Parent=gene2120 chr5 ENCODE exon 142003862 142003950 . - . Parent=gene2120 ### chr5 ENCODE gene 141973754 142045815 . - . ID=gene2121;Name=AC005370.1-013;name2=FGF1 chr5 ENCODE CDS 141973754 141973876 . - 0 Parent=gene2121 chr5 ENCODE exon 141973754 141973910 . - . Parent=gene2121 chr5 ENCODE exon 142039673 142039816 . - . Parent=gene2121 chr5 ENCODE exon 142040460 142040598 . - . Parent=gene2121 chr5 ENCODE exon 142045706 142045815 . - . Parent=gene2121 ### chr5 ENCODE gene 142130133 142373874 . + . ID=gene2122;Name=AC012630.1-001;name2=ARHGAP26 chr5 ENCODE exon 142130133 142130664 . + . Parent=gene2122 chr5 ENCODE exon 142233149 142233244 . + . Parent=gene2122 chr5 ENCODE exon 142234859 142234920 . + . Parent=gene2122 chr5 ENCODE exon 142239123 142239194 . + . Parent=gene2122 chr5 ENCODE exon 142245047 142245148 . + . Parent=gene2122 chr5 ENCODE exon 142253987 142254097 . + . Parent=gene2122 chr5 ENCODE exon 142261684 142261788 . + . Parent=gene2122 chr5 ENCODE exon 142263289 142263418 . + . Parent=gene2122 chr5 ENCODE exon 142267453 142267553 . + . Parent=gene2122 chr5 ENCODE exon 142272948 142273042 . + . Parent=gene2122 chr5 ENCODE exon 142291796 142291874 . + . Parent=gene2122 chr5 ENCODE exon 142373838 142373874 . + . Parent=gene2122 ### chr5 ENCODE gene 142130156 142373874 . + . ID=gene2123;Name=AC012630.1-008;name2=ARHGAP26 chr5 ENCODE exon 142130156 142130664 . + . Parent=gene2123 chr5 ENCODE exon 142233149 142233244 . + . Parent=gene2123 chr5 ENCODE exon 142234859 142234920 . + . Parent=gene2123 chr5 ENCODE exon 142239123 142239194 . + . Parent=gene2123 chr5 ENCODE exon 142245047 142245148 . + . Parent=gene2123 chr5 ENCODE exon 142253987 142254097 . + . Parent=gene2123 chr5 ENCODE exon 142261684 142261788 . + . Parent=gene2123 chr5 ENCODE exon 142263289 142263418 . + . Parent=gene2123 chr5 ENCODE exon 142267453 142267553 . + . Parent=gene2123 chr5 ENCODE exon 142272948 142273042 . + . Parent=gene2123 chr5 ENCODE exon 142291796 142291874 . + . Parent=gene2123 chr5 ENCODE exon 142373838 142373874 . + . Parent=gene2123 ### chr5 ENCODE gene 142132466 142254084 . + . ID=gene2124;Name=AC012630.1-014;name2=ARHGAP26 chr5 ENCODE exon 142132466 142132599 . + . Parent=gene2124 chr5 ENCODE CDS 142132530 142132599 . + 0 Parent=gene2124 chr5 ENCODE exon 142233149 142233244 . + . Parent=gene2124 chr5 ENCODE CDS 142233149 142233244 . + 2 Parent=gene2124 chr5 ENCODE exon 142234859 142234920 . + . Parent=gene2124 chr5 ENCODE CDS 142234859 142234920 . + 2 Parent=gene2124 chr5 ENCODE exon 142239123 142239194 . + . Parent=gene2124 chr5 ENCODE CDS 142239123 142239194 . + 0 Parent=gene2124 chr5 ENCODE exon 142245047 142245148 . + . Parent=gene2124 chr5 ENCODE CDS 142245047 142245148 . + 0 Parent=gene2124 chr5 ENCODE exon 142253987 142254084 . + . Parent=gene2124 chr5 ENCODE CDS 142253987 142254084 . + 0 Parent=gene2124 ### chr5 ENCODE gene 142234642 142261762 . + . ID=gene2125;Name=AC012630.1-003;name2=ARHGAP26 chr5 ENCODE exon 142234642 142234920 . + . Parent=gene2125 chr5 ENCODE CDS 142234837 142234920 . + 0 Parent=gene2125 chr5 ENCODE exon 142239123 142239194 . + . Parent=gene2125 chr5 ENCODE CDS 142239123 142239194 . + 0 Parent=gene2125 chr5 ENCODE exon 142245047 142245148 . + . Parent=gene2125 chr5 ENCODE CDS 142245047 142245148 . + 0 Parent=gene2125 chr5 ENCODE exon 142253987 142254097 . + . Parent=gene2125 chr5 ENCODE CDS 142253987 142254097 . + 0 Parent=gene2125 chr5 ENCODE exon 142261684 142261762 . + . Parent=gene2125 chr5 ENCODE CDS 142261684 142261762 . + 0 Parent=gene2125 ### chr5 ENCODE gene 142263289 142281863 . + . ID=gene2126;Name=AC012630.1-017;name2=ARHGAP26 chr5 ENCODE exon 142263289 142263418 . + . Parent=gene2126 chr5 ENCODE exon 142267453 142267553 . + . Parent=gene2126 chr5 ENCODE exon 142272948 142273042 . + . Parent=gene2126 chr5 ENCODE exon 142281280 142281863 . + . Parent=gene2126 ### chr5 ENCODE gene 142267071 142373874 . + . ID=gene2127;Name=AC012630.1-015;name2=ARHGAP26 chr5 ENCODE exon 142267071 142267257 . + . Parent=gene2127 chr5 ENCODE exon 142267453 142267553 . + . Parent=gene2127 chr5 ENCODE exon 142272948 142273042 . + . Parent=gene2127 chr5 ENCODE exon 142291796 142291874 . + . Parent=gene2127 chr5 ENCODE exon 142373838 142373874 . + . Parent=gene2127 ### chr5 ENCODE gene 142267110 142291874 . + . ID=gene2128;Name=AC012630.1-016;name2=ARHGAP26 chr5 ENCODE exon 142267110 142267257 . + . Parent=gene2128 chr5 ENCODE exon 142267453 142267553 . + . Parent=gene2128 chr5 ENCODE exon 142272948 142273042 . + . Parent=gene2128 chr5 ENCODE exon 142275291 142275433 . + . Parent=gene2128 chr5 ENCODE exon 142291796 142291874 . + . Parent=gene2128 ### chr5 ENCODE gene 142267327 142373874 . + . ID=gene2129;Name=AC012630.1-004;name2=ARHGAP26 chr5 ENCODE exon 142267327 142267553 . + . Parent=gene2129 chr5 ENCODE exon 142272948 142273042 . + . Parent=gene2129 chr5 ENCODE exon 142291796 142291874 . + . Parent=gene2129 chr5 ENCODE exon 142373838 142373874 . + . Parent=gene2129 ### chr5 ENCODE gene 142268471 142373874 . + . ID=gene2130;name2=ARHGAP26;Name=AC012630.1-005 chr5 ENCODE exon 142268471 142268631 . + . Parent=gene2130 chr5 ENCODE exon 142272948 142273042 . + . Parent=gene2130 chr5 ENCODE exon 142291796 142291874 . + . Parent=gene2130 chr5 ENCODE exon 142373838 142373874 . + . Parent=gene2130 ### chr5 ENCODE gene 142329080 142374051 . + . ID=gene2131;Name=AC012630.1-002;name2=ARHGAP26 chr5 ENCODE exon 142329080 142329157 . + . Parent=gene2131 chr5 ENCODE exon 142373838 142374051 . + . Parent=gene2131 ### chr5 ENCODE gene 142370494 142374155 . + . ID=gene2132;Name=AC012630.1-006;name2=ARHGAP26 chr5 ENCODE exon 142370494 142370731 . + . Parent=gene2132 chr5 ENCODE exon 142373838 142374155 . + . Parent=gene2132 ### chr5 ENCODE gene 142373838 142373874 . + . ID=gene2133;Name=AC012630.1-007;name2=ARHGAP26 chr5 ENCODE exon 142373838 142373874 . + . Parent=gene2133 ### chr6 ENCODE gene 41411371 41426574 . + . ID=gene2134;Name=RP1-149M18.2-001;name2=NCR2 chr6 ENCODE exon 41411371 41411644 . + . Parent=gene2134 chr6 ENCODE CDS 41411593 41411644 . + 0 Parent=gene2134 chr6 ENCODE exon 41411803 41412144 . + . Parent=gene2134 chr6 ENCODE CDS 41411803 41412144 . + 2 Parent=gene2134 chr6 ENCODE exon 41417510 41417645 . + . Parent=gene2134 chr6 ENCODE CDS 41417510 41417645 . + 2 Parent=gene2134 chr6 ENCODE exon 41417752 41417865 . + . Parent=gene2134 chr6 ENCODE CDS 41417752 41417865 . + 1 Parent=gene2134 chr6 ENCODE exon 41418634 41418740 . + . Parent=gene2134 chr6 ENCODE CDS 41418634 41418740 . + 1 Parent=gene2134 chr6 ENCODE CDS 41426394 41426419 . + 2 Parent=gene2134 chr6 ENCODE exon 41426394 41426574 . + . Parent=gene2134 ### chr6 ENCODE gene 41411505 41426603 . + . ID=gene2135;name2=NCR2;Name=RP1-149M18.2-003 chr6 ENCODE exon 41411505 41411644 . + . Parent=gene2135 chr6 ENCODE CDS 41411593 41411644 . + 0 Parent=gene2135 chr6 ENCODE exon 41411803 41412144 . + . Parent=gene2135 chr6 ENCODE CDS 41411803 41412144 . + 2 Parent=gene2135 chr6 ENCODE exon 41417510 41417645 . + . Parent=gene2135 chr6 ENCODE CDS 41417510 41417645 . + 2 Parent=gene2135 chr6 ENCODE exon 41417752 41417865 . + . Parent=gene2135 chr6 ENCODE CDS 41417752 41417865 . + 1 Parent=gene2135 chr6 ENCODE CDS 41426394 41426580 . + 1 Parent=gene2135 chr6 ENCODE exon 41426394 41426603 . + . Parent=gene2135 ### chr6 ENCODE gene 41411567 41426580 . + . ID=gene2136;Name=RP1-149M18.2-002;name2=NCR2 chr6 ENCODE exon 41411567 41411644 . + . Parent=gene2136 chr6 ENCODE CDS 41411593 41411644 . + 0 Parent=gene2136 chr6 ENCODE exon 41411803 41412144 . + . Parent=gene2136 chr6 ENCODE CDS 41411803 41412144 . + 2 Parent=gene2136 chr6 ENCODE exon 41417510 41417645 . + . Parent=gene2136 chr6 ENCODE CDS 41417510 41417645 . + 2 Parent=gene2136 chr6 ENCODE exon 41417716 41417865 . + . Parent=gene2136 chr6 ENCODE CDS 41417716 41417865 . + 1 Parent=gene2136 chr6 ENCODE exon 41418634 41418740 . + . Parent=gene2136 chr6 ENCODE CDS 41418634 41418740 . + 1 Parent=gene2136 chr6 ENCODE CDS 41426394 41426419 . + 2 Parent=gene2136 chr6 ENCODE exon 41426394 41426580 . + . Parent=gene2136 ### chr6 ENCODE gene 41578160 41595568 . + . ID=gene2137;Name=RP11-328M4.3-002;name2=RP11-328M4.3 chr6 ENCODE exon 41578160 41578327 . + . Parent=gene2137 chr6 ENCODE CDS 41578275 41578327 . + 0 Parent=gene2137 chr6 ENCODE exon 41578519 41578689 . + . Parent=gene2137 chr6 ENCODE CDS 41578519 41578689 . + 1 Parent=gene2137 chr6 ENCODE CDS 41595092 41595119 . + 1 Parent=gene2137 chr6 ENCODE exon 41595092 41595568 . + . Parent=gene2137 ### chr6 ENCODE gene 41594089 41595568 . + . ID=gene2138;Name=RP11-328M4.3-001;name2=RP11-328M4.3 chr6 ENCODE exon 41594089 41594271 . + . Parent=gene2138 chr6 ENCODE exon 41595092 41595568 . + . Parent=gene2138 ### chr6 ENCODE gene 41622142 41678100 . + . ID=gene2139;Name=RP11-328M4.1-001;name2=FOXP4 chr6 ENCODE exon 41622142 41622583 . + . Parent=gene2139 chr6 ENCODE exon 41641461 41641680 . + . Parent=gene2139 chr6 ENCODE CDS 41641477 41641680 . + 0 Parent=gene2139 chr6 ENCODE exon 41653702 41653797 . + . Parent=gene2139 chr6 ENCODE CDS 41653702 41653797 . + 0 Parent=gene2139 chr6 ENCODE exon 41660485 41660607 . + . Parent=gene2139 chr6 ENCODE CDS 41660485 41660607 . + 0 Parent=gene2139 chr6 ENCODE exon 41661147 41661233 . + . Parent=gene2139 chr6 ENCODE CDS 41661147 41661233 . + 0 Parent=gene2139 chr6 ENCODE exon 41662725 41662872 . + . Parent=gene2139 chr6 ENCODE CDS 41662725 41662872 . + 0 Parent=gene2139 chr6 ENCODE exon 41663018 41663228 . + . Parent=gene2139 chr6 ENCODE CDS 41663018 41663228 . + 2 Parent=gene2139 chr6 ENCODE exon 41663509 41663613 . + . Parent=gene2139 chr6 ENCODE CDS 41663509 41663613 . + 1 Parent=gene2139 chr6 ENCODE exon 41664360 41664447 . + . Parent=gene2139 chr6 ENCODE CDS 41664360 41664447 . + 1 Parent=gene2139 chr6 ENCODE exon 41665487 41665570 . + . Parent=gene2139 chr6 ENCODE CDS 41665487 41665570 . + 0 Parent=gene2139 chr6 ENCODE exon 41665715 41665886 . + . Parent=gene2139 chr6 ENCODE CDS 41665715 41665886 . + 0 Parent=gene2139 chr6 ENCODE exon 41665987 41666063 . + . Parent=gene2139 chr6 ENCODE CDS 41665987 41666063 . + 2 Parent=gene2139 chr6 ENCODE exon 41666937 41667038 . + . Parent=gene2139 chr6 ENCODE CDS 41666937 41667038 . + 0 Parent=gene2139 chr6 ENCODE exon 41670586 41670707 . + . Parent=gene2139 chr6 ENCODE CDS 41670586 41670707 . + 0 Parent=gene2139 chr6 ENCODE exon 41672892 41672958 . + . Parent=gene2139 chr6 ENCODE CDS 41672892 41672958 . + 1 Parent=gene2139 chr6 ENCODE exon 41673497 41673666 . + . Parent=gene2139 chr6 ENCODE CDS 41673497 41673666 . + 0 Parent=gene2139 chr6 ENCODE CDS 41674505 41674652 . + 1 Parent=gene2139 chr6 ENCODE exon 41674505 41678100 . + . Parent=gene2139 ### chr6 ENCODE gene 41622364 41675679 . + . ID=gene2140;Name=RP11-328M4.1-003;name2=FOXP4 chr6 ENCODE exon 41622364 41622583 . + . Parent=gene2140 chr6 ENCODE exon 41641461 41641680 . + . Parent=gene2140 chr6 ENCODE CDS 41641477 41641680 . + 0 Parent=gene2140 chr6 ENCODE exon 41653702 41653797 . + . Parent=gene2140 chr6 ENCODE CDS 41653702 41653797 . + 0 Parent=gene2140 chr6 ENCODE exon 41660485 41660607 . + . Parent=gene2140 chr6 ENCODE CDS 41660485 41660607 . + 0 Parent=gene2140 chr6 ENCODE exon 41661153 41661233 . + . Parent=gene2140 chr6 ENCODE CDS 41661153 41661233 . + 0 Parent=gene2140 chr6 ENCODE exon 41662725 41662872 . + . Parent=gene2140 chr6 ENCODE CDS 41662725 41662872 . + 0 Parent=gene2140 chr6 ENCODE exon 41663015 41663228 . + . Parent=gene2140 chr6 ENCODE CDS 41663015 41663228 . + 2 Parent=gene2140 chr6 ENCODE exon 41663509 41663613 . + . Parent=gene2140 chr6 ENCODE CDS 41663509 41663613 . + 1 Parent=gene2140 chr6 ENCODE exon 41664360 41664447 . + . Parent=gene2140 chr6 ENCODE CDS 41664360 41664447 . + 1 Parent=gene2140 chr6 ENCODE exon 41665487 41665570 . + . Parent=gene2140 chr6 ENCODE CDS 41665487 41665570 . + 0 Parent=gene2140 chr6 ENCODE exon 41665679 41665886 . + . Parent=gene2140 chr6 ENCODE CDS 41665679 41665886 . + 0 Parent=gene2140 chr6 ENCODE exon 41665987 41666063 . + . Parent=gene2140 chr6 ENCODE CDS 41665987 41666063 . + 2 Parent=gene2140 chr6 ENCODE exon 41666937 41667038 . + . Parent=gene2140 chr6 ENCODE CDS 41666937 41667038 . + 0 Parent=gene2140 chr6 ENCODE exon 41670586 41670707 . + . Parent=gene2140 chr6 ENCODE CDS 41670586 41670707 . + 0 Parent=gene2140 chr6 ENCODE exon 41672892 41672958 . + . Parent=gene2140 chr6 ENCODE CDS 41672892 41672958 . + 1 Parent=gene2140 chr6 ENCODE exon 41673497 41673666 . + . Parent=gene2140 chr6 ENCODE CDS 41673497 41673666 . + 0 Parent=gene2140 chr6 ENCODE CDS 41674505 41674652 . + 1 Parent=gene2140 chr6 ENCODE exon 41674505 41675679 . + . Parent=gene2140 ### chr6 ENCODE gene 41641465 41676342 . + . ID=gene2141;Name=RP11-328M4.1-002;name2=FOXP4 chr6 ENCODE exon 41641465 41641680 . + . Parent=gene2141 chr6 ENCODE CDS 41641477 41641680 . + 0 Parent=gene2141 chr6 ENCODE exon 41653702 41653797 . + . Parent=gene2141 chr6 ENCODE CDS 41653702 41653797 . + 0 Parent=gene2141 chr6 ENCODE exon 41660485 41660607 . + . Parent=gene2141 chr6 ENCODE CDS 41660485 41660607 . + 0 Parent=gene2141 chr6 ENCODE exon 41661147 41661233 . + . Parent=gene2141 chr6 ENCODE CDS 41661147 41661233 . + 0 Parent=gene2141 chr6 ENCODE exon 41662725 41662872 . + . Parent=gene2141 chr6 ENCODE CDS 41662725 41662872 . + 0 Parent=gene2141 chr6 ENCODE exon 41663015 41663228 . + . Parent=gene2141 chr6 ENCODE CDS 41663015 41663228 . + 2 Parent=gene2141 chr6 ENCODE exon 41663509 41663613 . + . Parent=gene2141 chr6 ENCODE CDS 41663509 41663613 . + 1 Parent=gene2141 chr6 ENCODE exon 41664360 41664447 . + . Parent=gene2141 chr6 ENCODE CDS 41664360 41664447 . + 1 Parent=gene2141 chr6 ENCODE exon 41665487 41665570 . + . Parent=gene2141 chr6 ENCODE CDS 41665487 41665570 . + 0 Parent=gene2141 chr6 ENCODE exon 41665679 41665886 . + . Parent=gene2141 chr6 ENCODE CDS 41665679 41665886 . + 0 Parent=gene2141 chr6 ENCODE exon 41665987 41666063 . + . Parent=gene2141 chr6 ENCODE CDS 41665987 41666063 . + 2 Parent=gene2141 chr6 ENCODE exon 41666937 41667038 . + . Parent=gene2141 chr6 ENCODE CDS 41666937 41667038 . + 0 Parent=gene2141 chr6 ENCODE exon 41670586 41670707 . + . Parent=gene2141 chr6 ENCODE CDS 41670586 41670707 . + 0 Parent=gene2141 chr6 ENCODE exon 41672892 41672958 . + . Parent=gene2141 chr6 ENCODE CDS 41672892 41672958 . + 1 Parent=gene2141 chr6 ENCODE exon 41673497 41673666 . + . Parent=gene2141 chr6 ENCODE CDS 41673497 41673666 . + 0 Parent=gene2141 chr6 ENCODE CDS 41674505 41674652 . + 1 Parent=gene2141 chr6 ENCODE exon 41674505 41676342 . + . Parent=gene2141 ### chr6 ENCODE gene 41645890 41660534 . + . ID=gene2142;Name=RP11-328M4.1-004;name2=FOXP4 chr6 ENCODE exon 41645890 41646110 . + . Parent=gene2142 chr6 ENCODE CDS 41645994 41646110 . + 0 Parent=gene2142 chr6 ENCODE exon 41653702 41653797 . + . Parent=gene2142 chr6 ENCODE CDS 41653702 41653797 . + 0 Parent=gene2142 chr6 ENCODE exon 41660485 41660534 . + . Parent=gene2142 chr6 ENCODE CDS 41660485 41660534 . + 0 Parent=gene2142 ### chr6 ENCODE gene 41663159 41675682 . + . ID=gene2143;Name=RP11-328M4.1-005;name2=FOXP4 chr6 ENCODE exon 41663159 41663228 . + . Parent=gene2143 chr6 ENCODE exon 41663509 41663613 . + . Parent=gene2143 chr6 ENCODE exon 41664360 41664447 . + . Parent=gene2143 chr6 ENCODE exon 41665487 41665570 . + . Parent=gene2143 chr6 ENCODE exon 41665715 41665886 . + . Parent=gene2143 chr6 ENCODE exon 41665987 41666063 . + . Parent=gene2143 chr6 ENCODE exon 41666937 41667038 . + . Parent=gene2143 chr6 ENCODE exon 41670586 41670707 . + . Parent=gene2143 chr6 ENCODE exon 41672892 41672958 . + . Parent=gene2143 chr6 ENCODE exon 41673497 41673632 . + . Parent=gene2143 chr6 ENCODE exon 41675540 41675682 . + . Parent=gene2143 ### chr6 ENCODE gene 41712598 41729190 . + . ID=gene2144;Name=RP4-696P19.1-005;name2=MDFI chr6 ENCODE exon 41712598 41712649 . + . Parent=gene2144 chr6 ENCODE exon 41714455 41714541 . + . Parent=gene2144 chr6 ENCODE CDS 41714466 41714541 . + 0 Parent=gene2144 chr6 ENCODE exon 41721842 41722024 . + . Parent=gene2144 chr6 ENCODE CDS 41721842 41722024 . + 2 Parent=gene2144 chr6 ENCODE exon 41725335 41725559 . + . Parent=gene2144 chr6 ENCODE CDS 41725335 41725559 . + 2 Parent=gene2144 chr6 ENCODE exon 41729035 41729190 . + . Parent=gene2144 chr6 ENCODE CDS 41729035 41729190 . + 2 Parent=gene2144 ### chr6 ENCODE gene 41712748 41729244 . + . ID=gene2145;Name=RP4-696P19.1-003;name2=MDFI chr6 ENCODE exon 41712748 41712989 . + . Parent=gene2145 chr6 ENCODE exon 41713856 41714091 . + . Parent=gene2145 chr6 ENCODE exon 41714455 41714541 . + . Parent=gene2145 chr6 ENCODE CDS 41714466 41714541 . + 0 Parent=gene2145 chr6 ENCODE exon 41721842 41722024 . + . Parent=gene2145 chr6 ENCODE CDS 41721842 41722024 . + 2 Parent=gene2145 chr6 ENCODE exon 41725335 41725559 . + . Parent=gene2145 chr6 ENCODE CDS 41725335 41725559 . + 2 Parent=gene2145 chr6 ENCODE exon 41729035 41729244 . + . Parent=gene2145 chr6 ENCODE CDS 41729035 41729244 . + 2 Parent=gene2145 ### chr6 ENCODE gene 41712784 41729955 . + . ID=gene2146;Name=RP4-696P19.1-008;name2=MDFI chr6 ENCODE exon 41712784 41712989 . + . Parent=gene2146 chr6 ENCODE exon 41714455 41714541 . + . Parent=gene2146 chr6 ENCODE CDS 41714466 41714541 . + 0 Parent=gene2146 chr6 ENCODE exon 41721842 41722024 . + . Parent=gene2146 chr6 ENCODE CDS 41721842 41722024 . + 2 Parent=gene2146 chr6 ENCODE exon 41725335 41725559 . + . Parent=gene2146 chr6 ENCODE CDS 41725335 41725559 . + 2 Parent=gene2146 chr6 ENCODE CDS 41729035 41729291 . + 2 Parent=gene2146 chr6 ENCODE exon 41729035 41729955 . + . Parent=gene2146 ### chr6 ENCODE gene 41714154 41725369 . + . ID=gene2147;Name=RP4-696P19.1-009;name2=MDFI chr6 ENCODE exon 41714154 41714201 . + . Parent=gene2147 chr6 ENCODE exon 41714455 41714541 . + . Parent=gene2147 chr6 ENCODE CDS 41714466 41714541 . + 0 Parent=gene2147 chr6 ENCODE exon 41721842 41722024 . + . Parent=gene2147 chr6 ENCODE CDS 41721842 41722024 . + 2 Parent=gene2147 chr6 ENCODE exon 41725335 41725369 . + . Parent=gene2147 chr6 ENCODE CDS 41725335 41725369 . + 2 Parent=gene2147 ### chr6 ENCODE gene 41714163 41729962 . + . ID=gene2148;Name=RP4-696P19.1-001;name2=MDFI chr6 ENCODE exon 41714163 41714368 . + . Parent=gene2148 chr6 ENCODE exon 41714455 41714541 . + . Parent=gene2148 chr6 ENCODE CDS 41714466 41714541 . + 0 Parent=gene2148 chr6 ENCODE exon 41721842 41722024 . + . Parent=gene2148 chr6 ENCODE CDS 41721842 41722024 . + 2 Parent=gene2148 chr6 ENCODE exon 41725335 41725559 . + . Parent=gene2148 chr6 ENCODE CDS 41725335 41725559 . + 2 Parent=gene2148 chr6 ENCODE CDS 41729035 41729291 . + 2 Parent=gene2148 chr6 ENCODE exon 41729035 41729962 . + . Parent=gene2148 ### chr6 ENCODE gene 41714193 41729355 . + . ID=gene2149;name2=MDFI;Name=RP4-696P19.1-002 chr6 ENCODE exon 41714193 41714368 . + . Parent=gene2149 chr6 ENCODE exon 41714455 41714541 . + . Parent=gene2149 chr6 ENCODE CDS 41714466 41714541 . + 0 Parent=gene2149 chr6 ENCODE exon 41725335 41725559 . + . Parent=gene2149 chr6 ENCODE CDS 41725335 41725559 . + 2 Parent=gene2149 chr6 ENCODE CDS 41729035 41729291 . + 2 Parent=gene2149 chr6 ENCODE exon 41729035 41729355 . + . Parent=gene2149 ### chr6 ENCODE gene 41714215 41725459 . + . ID=gene2150;Name=RP4-696P19.1-006;name2=MDFI chr6 ENCODE exon 41714215 41714541 . + . Parent=gene2150 chr6 ENCODE CDS 41714466 41714541 . + 0 Parent=gene2150 chr6 ENCODE exon 41721842 41722024 . + . Parent=gene2150 chr6 ENCODE CDS 41721842 41722024 . + 2 Parent=gene2150 chr6 ENCODE exon 41725335 41725459 . + . Parent=gene2150 chr6 ENCODE CDS 41725335 41725459 . + 2 Parent=gene2150 ### chr6 ENCODE gene 41714243 41729160 . + . ID=gene2151;Name=RP4-696P19.1-007;name2=MDFI chr6 ENCODE exon 41714243 41714541 . + . Parent=gene2151 chr6 ENCODE CDS 41714466 41714541 . + 0 Parent=gene2151 chr6 ENCODE exon 41725335 41725559 . + . Parent=gene2151 chr6 ENCODE CDS 41725335 41725559 . + 2 Parent=gene2151 chr6 ENCODE exon 41729035 41729160 . + . Parent=gene2151 chr6 ENCODE CDS 41729035 41729160 . + 2 Parent=gene2151 ### chr6 ENCODE gene 41721970 41725828 . + . ID=gene2152;Name=RP4-696P19.1-004;name2=MDFI chr6 ENCODE exon 41721970 41722024 . + . Parent=gene2152 chr6 ENCODE exon 41725335 41725828 . + . Parent=gene2152 ### chr6 ENCODE gene 41759694 41766758 . - . ID=gene2153;Name=RP4-696P19.3-003;name2=TFEB chr6 ENCODE exon 41759694 41760794 . - . Parent=gene2153 chr6 ENCODE CDS 41760315 41760794 . - 0 Parent=gene2153 chr6 ENCODE exon 41761806 41761953 . - . Parent=gene2153 chr6 ENCODE CDS 41761806 41761953 . - 1 Parent=gene2153 chr6 ENCODE exon 41762810 41762885 . - . Parent=gene2153 chr6 ENCODE CDS 41762810 41762885 . - 2 Parent=gene2153 chr6 ENCODE exon 41763469 41763525 . - . Parent=gene2153 chr6 ENCODE CDS 41763469 41763525 . - 2 Parent=gene2153 chr6 ENCODE exon 41763624 41763744 . - . Parent=gene2153 chr6 ENCODE CDS 41763624 41763744 . - 0 Parent=gene2153 chr6 ENCODE exon 41765447 41765527 . - . Parent=gene2153 chr6 ENCODE CDS 41765447 41765527 . - 0 Parent=gene2153 chr6 ENCODE exon 41766717 41766758 . - . Parent=gene2153 chr6 ENCODE CDS 41766717 41766758 . - 0 Parent=gene2153 ### chr6 ENCODE gene 41759694 41767192 . - . ID=gene2154;Name=RP4-696P19.3-015;name2=TFEB chr6 ENCODE exon 41759694 41760794 . - . Parent=gene2154 chr6 ENCODE CDS 41760315 41760794 . - 0 Parent=gene2154 chr6 ENCODE exon 41761806 41761953 . - . Parent=gene2154 chr6 ENCODE CDS 41761806 41761953 . - 1 Parent=gene2154 chr6 ENCODE exon 41762810 41762885 . - . Parent=gene2154 chr6 ENCODE CDS 41762810 41762885 . - 2 Parent=gene2154 chr6 ENCODE exon 41763469 41763525 . - . Parent=gene2154 chr6 ENCODE CDS 41763469 41763525 . - 2 Parent=gene2154 chr6 ENCODE exon 41763624 41763744 . - . Parent=gene2154 chr6 ENCODE CDS 41763624 41763744 . - 0 Parent=gene2154 chr6 ENCODE exon 41765447 41765527 . - . Parent=gene2154 chr6 ENCODE CDS 41765447 41765527 . - 0 Parent=gene2154 chr6 ENCODE exon 41766379 41766633 . - . Parent=gene2154 chr6 ENCODE CDS 41766379 41766633 . - 0 Parent=gene2154 chr6 ENCODE CDS 41766717 41767130 . - 0 Parent=gene2154 chr6 ENCODE exon 41766717 41767192 . - . Parent=gene2154 ### chr6 ENCODE gene 41759694 41810776 . - . ID=gene2155;Name=RP4-696P19.3-001;name2=TFEB chr6 ENCODE exon 41759694 41760794 . - . Parent=gene2155 chr6 ENCODE CDS 41760315 41760794 . - 0 Parent=gene2155 chr6 ENCODE exon 41761806 41761953 . - . Parent=gene2155 chr6 ENCODE CDS 41761806 41761953 . - 1 Parent=gene2155 chr6 ENCODE exon 41762810 41762885 . - . Parent=gene2155 chr6 ENCODE CDS 41762810 41762885 . - 2 Parent=gene2155 chr6 ENCODE exon 41763469 41763525 . - . Parent=gene2155 chr6 ENCODE CDS 41763469 41763525 . - 2 Parent=gene2155 chr6 ENCODE exon 41763624 41763744 . - . Parent=gene2155 chr6 ENCODE CDS 41763624 41763744 . - 0 Parent=gene2155 chr6 ENCODE exon 41765447 41765527 . - . Parent=gene2155 chr6 ENCODE CDS 41765447 41765527 . - 0 Parent=gene2155 chr6 ENCODE exon 41766379 41766633 . - . Parent=gene2155 chr6 ENCODE CDS 41766379 41766633 . - 0 Parent=gene2155 chr6 ENCODE CDS 41766717 41766929 . - 0 Parent=gene2155 chr6 ENCODE exon 41766717 41766951 . - . Parent=gene2155 chr6 ENCODE exon 41808365 41808483 . - . Parent=gene2155 chr6 ENCODE exon 41810616 41810776 . - . Parent=gene2155 ### chr6 ENCODE gene 41759694 41811975 . - . ID=gene2156;Name=RP4-696P19.3-010;name2=TFEB chr6 ENCODE exon 41759694 41760794 . - . Parent=gene2156 chr6 ENCODE CDS 41760315 41760794 . - 0 Parent=gene2156 chr6 ENCODE exon 41761806 41761953 . - . Parent=gene2156 chr6 ENCODE CDS 41761806 41761953 . - 1 Parent=gene2156 chr6 ENCODE exon 41762810 41762885 . - . Parent=gene2156 chr6 ENCODE CDS 41762810 41762885 . - 2 Parent=gene2156 chr6 ENCODE exon 41763469 41763525 . - . Parent=gene2156 chr6 ENCODE CDS 41763469 41763525 . - 2 Parent=gene2156 chr6 ENCODE exon 41763624 41763744 . - . Parent=gene2156 chr6 ENCODE CDS 41763624 41763744 . - 0 Parent=gene2156 chr6 ENCODE exon 41765447 41765527 . - . Parent=gene2156 chr6 ENCODE CDS 41765447 41765527 . - 0 Parent=gene2156 chr6 ENCODE exon 41766379 41766633 . - . Parent=gene2156 chr6 ENCODE CDS 41766379 41766633 . - 0 Parent=gene2156 chr6 ENCODE CDS 41766717 41766929 . - 0 Parent=gene2156 chr6 ENCODE exon 41766717 41766951 . - . Parent=gene2156 chr6 ENCODE exon 41811862 41811975 . - . Parent=gene2156 ### chr6 ENCODE gene 41759696 41811324 . - . ID=gene2157;Name=RP4-696P19.3-005;name2=TFEB chr6 ENCODE exon 41759696 41760794 . - . Parent=gene2157 chr6 ENCODE CDS 41760315 41760794 . - 0 Parent=gene2157 chr6 ENCODE exon 41761806 41761953 . - . Parent=gene2157 chr6 ENCODE CDS 41761806 41761953 . - 1 Parent=gene2157 chr6 ENCODE exon 41762810 41762885 . - . Parent=gene2157 chr6 ENCODE CDS 41762810 41762885 . - 2 Parent=gene2157 chr6 ENCODE exon 41763469 41763525 . - . Parent=gene2157 chr6 ENCODE CDS 41763469 41763525 . - 2 Parent=gene2157 chr6 ENCODE exon 41763624 41763744 . - . Parent=gene2157 chr6 ENCODE CDS 41763624 41763744 . - 0 Parent=gene2157 chr6 ENCODE exon 41765447 41765527 . - . Parent=gene2157 chr6 ENCODE CDS 41765447 41765527 . - 0 Parent=gene2157 chr6 ENCODE exon 41766379 41766633 . - . Parent=gene2157 chr6 ENCODE CDS 41766379 41766633 . - 0 Parent=gene2157 chr6 ENCODE CDS 41766717 41766929 . - 0 Parent=gene2157 chr6 ENCODE exon 41766717 41766951 . - . Parent=gene2157 chr6 ENCODE exon 41811066 41811324 . - . Parent=gene2157 ### chr6 ENCODE gene 41762245 41809569 . - . ID=gene2158;Name=RP4-696P19.3-004;name2=TFEB chr6 ENCODE exon 41762245 41762885 . - . Parent=gene2158 chr6 ENCODE CDS 41762806 41762885 . - 2 Parent=gene2158 chr6 ENCODE exon 41763469 41763525 . - . Parent=gene2158 chr6 ENCODE CDS 41763469 41763525 . - 2 Parent=gene2158 chr6 ENCODE exon 41763624 41763744 . - . Parent=gene2158 chr6 ENCODE CDS 41763624 41763744 . - 0 Parent=gene2158 chr6 ENCODE exon 41765447 41765527 . - . Parent=gene2158 chr6 ENCODE CDS 41765447 41765527 . - 0 Parent=gene2158 chr6 ENCODE exon 41766379 41766633 . - . Parent=gene2158 chr6 ENCODE CDS 41766379 41766633 . - 0 Parent=gene2158 chr6 ENCODE CDS 41766717 41766929 . - 0 Parent=gene2158 chr6 ENCODE exon 41766717 41766951 . - . Parent=gene2158 chr6 ENCODE exon 41808365 41809569 . - . Parent=gene2158 ### chr6 ENCODE gene 41762810 41763916 . - . ID=gene2159;name2=TFEB;Name=RP4-696P19.3-007 chr6 ENCODE exon 41762810 41762885 . - . Parent=gene2159 chr6 ENCODE exon 41763469 41763916 . - . Parent=gene2159 ### chr6 ENCODE gene 41762810 41810117 . - . ID=gene2160;Name=RP4-696P19.3-006;name2=TFEB chr6 ENCODE exon 41762810 41762885 . - . Parent=gene2160 chr6 ENCODE CDS 41762810 41762885 . - 2 Parent=gene2160 chr6 ENCODE exon 41763469 41763525 . - . Parent=gene2160 chr6 ENCODE CDS 41763469 41763525 . - 2 Parent=gene2160 chr6 ENCODE exon 41763624 41763744 . - . Parent=gene2160 chr6 ENCODE CDS 41763624 41763744 . - 0 Parent=gene2160 chr6 ENCODE exon 41765447 41765527 . - . Parent=gene2160 chr6 ENCODE CDS 41765447 41765527 . - 0 Parent=gene2160 chr6 ENCODE exon 41766379 41766633 . - . Parent=gene2160 chr6 ENCODE CDS 41766379 41766633 . - 0 Parent=gene2160 chr6 ENCODE CDS 41766717 41766929 . - 0 Parent=gene2160 chr6 ENCODE exon 41766717 41766951 . - . Parent=gene2160 chr6 ENCODE exon 41810029 41810117 . - . Parent=gene2160 ### chr6 ENCODE gene 41762879 41799442 . - . ID=gene2161;Name=RP4-696P19.3-008;name2=TFEB chr6 ENCODE exon 41762879 41762885 . - . Parent=gene2161 chr6 ENCODE CDS 41762879 41762885 . - 2 Parent=gene2161 chr6 ENCODE exon 41763469 41763525 . - . Parent=gene2161 chr6 ENCODE CDS 41763469 41763525 . - 2 Parent=gene2161 chr6 ENCODE exon 41763624 41763744 . - . Parent=gene2161 chr6 ENCODE CDS 41763624 41763744 . - 0 Parent=gene2161 chr6 ENCODE exon 41765447 41765527 . - . Parent=gene2161 chr6 ENCODE CDS 41765447 41765527 . - 0 Parent=gene2161 chr6 ENCODE exon 41766379 41766633 . - . Parent=gene2161 chr6 ENCODE CDS 41766379 41766633 . - 0 Parent=gene2161 chr6 ENCODE CDS 41766717 41766929 . - 0 Parent=gene2161 chr6 ENCODE exon 41766717 41766951 . - . Parent=gene2161 chr6 ENCODE exon 41799177 41799442 . - . Parent=gene2161 ### chr6 ENCODE gene 41763626 41781656 . - . ID=gene2162;Name=RP4-696P19.3-002;name2=TFEB chr6 ENCODE exon 41763626 41763744 . - . Parent=gene2162 chr6 ENCODE CDS 41763626 41763744 . - 0 Parent=gene2162 chr6 ENCODE exon 41765447 41765527 . - . Parent=gene2162 chr6 ENCODE CDS 41765447 41765527 . - 0 Parent=gene2162 chr6 ENCODE exon 41766379 41766633 . - . Parent=gene2162 chr6 ENCODE CDS 41766379 41766633 . - 0 Parent=gene2162 chr6 ENCODE CDS 41766717 41766929 . - 0 Parent=gene2162 chr6 ENCODE exon 41766717 41766951 . - . Parent=gene2162 chr6 ENCODE exon 41781363 41781656 . - . Parent=gene2162 ### chr6 ENCODE gene 41766610 41809406 . - . ID=gene2163;Name=RP4-696P19.3-014;name2=TFEB chr6 ENCODE exon 41766610 41766633 . - . Parent=gene2163 chr6 ENCODE CDS 41766610 41766633 . - 0 Parent=gene2163 chr6 ENCODE CDS 41766717 41766929 . - 0 Parent=gene2163 chr6 ENCODE exon 41766717 41766951 . - . Parent=gene2163 chr6 ENCODE exon 41808365 41808455 . - . Parent=gene2163 chr6 ENCODE exon 41809380 41809406 . - . Parent=gene2163 ### chr6 ENCODE gene 41766717 41781656 . - . ID=gene2164;Name=RP4-696P19.3-009;name2=TFEB chr6 ENCODE CDS 41766717 41766929 . - 0 Parent=gene2164 chr6 ENCODE exon 41766717 41766951 . - . Parent=gene2164 chr6 ENCODE exon 41781363 41781468 . - . Parent=gene2164 chr6 ENCODE exon 41781633 41781656 . - . Parent=gene2164 ### chr6 ENCODE gene 41766717 41792987 . - . ID=gene2165;Name=RP4-696P19.3-016;name2=TFEB chr6 ENCODE CDS 41766717 41766929 . - 0 Parent=gene2165 chr6 ENCODE exon 41766717 41766951 . - . Parent=gene2165 chr6 ENCODE exon 41792883 41792987 . - . Parent=gene2165 ### chr6 ENCODE gene 41766832 41810776 . - . ID=gene2166;Name=RP4-696P19.3-011;name2=TFEB chr6 ENCODE CDS 41766832 41766929 . - 0 Parent=gene2166 chr6 ENCODE exon 41766832 41766951 . - . Parent=gene2166 chr6 ENCODE exon 41810616 41810776 . - . Parent=gene2166 ### chr6 ENCODE gene 41766894 41809544 . - . ID=gene2167;Name=RP4-696P19.3-013;name2=TFEB chr6 ENCODE CDS 41766894 41766929 . - 0 Parent=gene2167 chr6 ENCODE exon 41766894 41766951 . - . Parent=gene2167 chr6 ENCODE exon 41809380 41809544 . - . Parent=gene2167 ### chr6 ENCODE gene 41766894 41809910 . - . ID=gene2168;Name=RP4-696P19.3-012;name2=TFEB chr6 ENCODE CDS 41766894 41766929 . - 0 Parent=gene2168 chr6 ENCODE exon 41766894 41766951 . - . Parent=gene2168 chr6 ENCODE exon 41809801 41809910 . - . Parent=gene2168 ### chr6 ENCODE gene 41812427 41823113 . - . ID=gene2169;Name=RP11-298J23.1-001;name2=PGC chr6 ENCODE exon 41812427 41812720 . - . Parent=gene2169 chr6 ENCODE CDS 41812568 41812720 . - 0 Parent=gene2169 chr6 ENCODE exon 41813446 41813544 . - . Parent=gene2169 chr6 ENCODE CDS 41813446 41813544 . - 0 Parent=gene2169 chr6 ENCODE exon 41815515 41815662 . - . Parent=gene2169 chr6 ENCODE CDS 41815515 41815662 . - 1 Parent=gene2169 chr6 ENCODE exon 41816207 41816326 . - . Parent=gene2169 chr6 ENCODE CDS 41816207 41816326 . - 1 Parent=gene2169 chr6 ENCODE exon 41818006 41818205 . - . Parent=gene2169 chr6 ENCODE CDS 41818006 41818205 . - 0 Parent=gene2169 chr6 ENCODE exon 41818987 41819105 . - . Parent=gene2169 chr6 ENCODE CDS 41818987 41819105 . - 2 Parent=gene2169 chr6 ENCODE exon 41820113 41820230 . - . Parent=gene2169 chr6 ENCODE CDS 41820113 41820230 . - 0 Parent=gene2169 chr6 ENCODE exon 41820374 41820524 . - . Parent=gene2169 chr6 ENCODE CDS 41820374 41820524 . - 1 Parent=gene2169 chr6 ENCODE CDS 41822992 41823050 . - 0 Parent=gene2169 chr6 ENCODE exon 41822992 41823113 . - . Parent=gene2169 ### chr6 ENCODE gene 41812428 41823099 . - . ID=gene2170;Name=RP11-298J23.1-002;name2=PGC chr6 ENCODE exon 41812428 41812541 . - . Parent=gene2170 chr6 ENCODE exon 41820156 41820230 . - . Parent=gene2170 chr6 ENCODE exon 41820374 41820524 . - . Parent=gene2170 chr6 ENCODE exon 41822992 41823099 . - . Parent=gene2170 ### chr6 ENCODE gene 41816318 41823111 . - . ID=gene2171;Name=RP11-298J23.1-003;name2=PGC chr6 ENCODE exon 41816318 41816326 . - . Parent=gene2171 chr6 ENCODE CDS 41816318 41816326 . - 1 Parent=gene2171 chr6 ENCODE exon 41818006 41818205 . - . Parent=gene2171 chr6 ENCODE CDS 41818006 41818205 . - 0 Parent=gene2171 chr6 ENCODE exon 41820374 41820524 . - . Parent=gene2171 chr6 ENCODE CDS 41820374 41820524 . - 1 Parent=gene2171 chr6 ENCODE CDS 41822992 41823050 . - 0 Parent=gene2171 chr6 ENCODE exon 41822992 41823111 . - . Parent=gene2171 ### chr6 ENCODE gene 41820195 41829825 . - . ID=gene2172;Name=RP11-298J23.1-004;name2=PGC chr6 ENCODE exon 41820195 41820230 . - . Parent=gene2172 chr6 ENCODE CDS 41820195 41820230 . - 0 Parent=gene2172 chr6 ENCODE exon 41820374 41820524 . - . Parent=gene2172 chr6 ENCODE CDS 41820374 41820524 . - 1 Parent=gene2172 chr6 ENCODE CDS 41829614 41829684 . - 0 Parent=gene2172 chr6 ENCODE exon 41829614 41829825 . - . Parent=gene2172 ### chr6 ENCODE gene 41845892 41855616 . - . ID=gene2173;name2=FRS3;Name=RP11-298J23.2-001 chr6 ENCODE exon 41845892 41847249 . - . Parent=gene2173 chr6 ENCODE CDS 41846335 41847249 . - 0 Parent=gene2173 chr6 ENCODE exon 41847532 41847680 . - . Parent=gene2173 chr6 ENCODE CDS 41847532 41847680 . - 2 Parent=gene2173 chr6 ENCODE exon 41848514 41848675 . - . Parent=gene2173 chr6 ENCODE CDS 41848514 41848675 . - 2 Parent=gene2173 chr6 ENCODE exon 41851135 41851321 . - . Parent=gene2173 chr6 ENCODE CDS 41851135 41851321 . - 0 Parent=gene2173 chr6 ENCODE CDS 41852638 41852703 . - 0 Parent=gene2173 chr6 ENCODE exon 41852638 41852726 . - . Parent=gene2173 chr6 ENCODE exon 41853749 41853892 . - . Parent=gene2173 chr6 ENCODE exon 41855532 41855616 . - . Parent=gene2173 ### chr6 ENCODE gene 41848560 41856182 . - . ID=gene2174;Name=RP11-298J23.2-004;name2=FRS3 chr6 ENCODE exon 41848560 41848675 . - . Parent=gene2174 chr6 ENCODE CDS 41848560 41848675 . - 2 Parent=gene2174 chr6 ENCODE exon 41851135 41851321 . - . Parent=gene2174 chr6 ENCODE CDS 41851135 41851321 . - 0 Parent=gene2174 chr6 ENCODE CDS 41852638 41852703 . - 0 Parent=gene2174 chr6 ENCODE exon 41852638 41852726 . - . Parent=gene2174 chr6 ENCODE exon 41856101 41856182 . - . Parent=gene2174 ### chr6 ENCODE gene 41851279 41862258 . - . ID=gene2175;Name=RP11-298J23.2-005;name2=FRS3 chr6 ENCODE exon 41851279 41851321 . - . Parent=gene2175 chr6 ENCODE CDS 41851279 41851321 . - 0 Parent=gene2175 chr6 ENCODE CDS 41852638 41852703 . - 0 Parent=gene2175 chr6 ENCODE exon 41852638 41852726 . - . Parent=gene2175 chr6 ENCODE exon 41853749 41853892 . - . Parent=gene2175 chr6 ENCODE exon 41862209 41862258 . - . Parent=gene2175 ### chr6 ENCODE gene 41852135 41853892 . - . ID=gene2176;Name=RP11-298J23.2-003;name2=FRS3 chr6 ENCODE exon 41852135 41852338 . - . Parent=gene2176 chr6 ENCODE exon 41852638 41852726 . - . Parent=gene2176 chr6 ENCODE exon 41853201 41853543 . - . Parent=gene2176 chr6 ENCODE exon 41853749 41853892 . - . Parent=gene2176 ### chr6 ENCODE gene 41856065 41865857 . + . ID=gene2177;Name=RP11-298J23.3-003;name2=C6orf49 chr6 ENCODE exon 41856065 41856542 . + . Parent=gene2177 chr6 ENCODE exon 41857066 41857236 . + . Parent=gene2177 chr6 ENCODE exon 41859178 41859321 . + . Parent=gene2177 chr6 ENCODE exon 41859450 41859954 . + . Parent=gene2177 chr6 ENCODE exon 41860651 41860788 . + . Parent=gene2177 chr6 ENCODE exon 41861053 41861256 . + . Parent=gene2177 chr6 ENCODE exon 41861844 41862048 . + . Parent=gene2177 chr6 ENCODE exon 41862156 41863541 . + . Parent=gene2177 chr6 ENCODE exon 41864948 41865052 . + . Parent=gene2177 chr6 ENCODE exon 41865247 41865857 . + . Parent=gene2177 ### chr6 ENCODE gene 41856488 41865607 . + . ID=gene2178;Name=RP11-298J23.3-004;name2=C6orf49 chr6 ENCODE exon 41856488 41856542 . + . Parent=gene2178 chr6 ENCODE exon 41857066 41857236 . + . Parent=gene2178 chr6 ENCODE exon 41859178 41859954 . + . Parent=gene2178 chr6 ENCODE exon 41860651 41860788 . + . Parent=gene2178 chr6 ENCODE exon 41861053 41861256 . + . Parent=gene2178 chr6 ENCODE exon 41861844 41862048 . + . Parent=gene2178 chr6 ENCODE exon 41862478 41863541 . + . Parent=gene2178 chr6 ENCODE exon 41864948 41865052 . + . Parent=gene2178 chr6 ENCODE exon 41865284 41865607 . + . Parent=gene2178 ### chr6 ENCODE gene 41856662 41865611 . + . ID=gene2179;Name=RP11-298J23.3-001;name2=C6orf49 chr6 ENCODE exon 41856662 41857236 . + . Parent=gene2179 chr6 ENCODE exon 41859178 41859321 . + . Parent=gene2179 chr6 ENCODE exon 41859847 41859954 . + . Parent=gene2179 chr6 ENCODE exon 41860651 41860788 . + . Parent=gene2179 chr6 ENCODE exon 41861053 41861256 . + . Parent=gene2179 chr6 ENCODE exon 41861844 41862048 . + . Parent=gene2179 chr6 ENCODE exon 41862478 41863541 . + . Parent=gene2179 chr6 ENCODE exon 41864948 41865052 . + . Parent=gene2179 chr6 ENCODE exon 41865284 41865611 . + . Parent=gene2179 ### chr6 ENCODE gene 41859190 41862845 . + . ID=gene2180;Name=RP11-298J23.3-006;name2=C6orf49 chr6 ENCODE exon 41859190 41859321 . + . Parent=gene2180 chr6 ENCODE CDS 41859190 41859321 . + 0 Parent=gene2180 chr6 ENCODE exon 41859847 41859954 . + . Parent=gene2180 chr6 ENCODE CDS 41859847 41859954 . + 0 Parent=gene2180 chr6 ENCODE exon 41860651 41860788 . + . Parent=gene2180 chr6 ENCODE CDS 41860651 41860788 . + 0 Parent=gene2180 chr6 ENCODE exon 41861053 41861256 . + . Parent=gene2180 chr6 ENCODE CDS 41861053 41861256 . + 0 Parent=gene2180 chr6 ENCODE exon 41861844 41862048 . + . Parent=gene2180 chr6 ENCODE CDS 41861844 41862048 . + 0 Parent=gene2180 chr6 ENCODE exon 41862478 41862845 . + . Parent=gene2180 chr6 ENCODE CDS 41862478 41862845 . + 2 Parent=gene2180 ### chr6 ENCODE gene 41859835 41862427 . + . ID=gene2181;Name=RP11-298J23.3-008;name2=C6orf49 chr6 ENCODE exon 41859835 41859954 . + . Parent=gene2181 chr6 ENCODE CDS 41859835 41859954 . + 0 Parent=gene2181 chr6 ENCODE exon 41860651 41860788 . + . Parent=gene2181 chr6 ENCODE CDS 41860651 41860788 . + 0 Parent=gene2181 chr6 ENCODE exon 41861053 41861256 . + . Parent=gene2181 chr6 ENCODE CDS 41861053 41861256 . + 0 Parent=gene2181 chr6 ENCODE exon 41861844 41862048 . + . Parent=gene2181 chr6 ENCODE CDS 41861844 41862048 . + 0 Parent=gene2181 chr6 ENCODE exon 41862156 41862427 . + . Parent=gene2181 chr6 ENCODE CDS 41862156 41862427 . + 2 Parent=gene2181 ### chr6 ENCODE gene 41859835 41862845 . + . ID=gene2182;name2=C6orf49;Name=RP11-298J23.3-007 chr6 ENCODE exon 41859835 41859954 . + . Parent=gene2182 chr6 ENCODE CDS 41859835 41859954 . + 0 Parent=gene2182 chr6 ENCODE exon 41860651 41860788 . + . Parent=gene2182 chr6 ENCODE CDS 41860651 41860788 . + 0 Parent=gene2182 chr6 ENCODE exon 41861053 41861256 . + . Parent=gene2182 chr6 ENCODE CDS 41861053 41861256 . + 0 Parent=gene2182 chr6 ENCODE exon 41861844 41862048 . + . Parent=gene2182 chr6 ENCODE CDS 41861844 41862048 . + 0 Parent=gene2182 chr6 ENCODE exon 41862478 41862845 . + . Parent=gene2182 chr6 ENCODE CDS 41862478 41862845 . + 2 Parent=gene2182 ### chr6 ENCODE gene 41860508 41861137 . + . ID=gene2183;Name=RP11-298J23.3-002;name2=C6orf49 chr6 ENCODE exon 41860508 41860788 . + . Parent=gene2183 chr6 ENCODE exon 41861053 41861137 . + . Parent=gene2183 ### chr6 ENCODE gene 41860722 41862452 . + . ID=gene2184;Name=RP11-298J23.3-005;name2=C6orf49 chr6 ENCODE exon 41860722 41860788 . + . Parent=gene2184 chr6 ENCODE exon 41861053 41861256 . + . Parent=gene2184 chr6 ENCODE exon 41861844 41862452 . + . Parent=gene2184 ### chr6 ENCODE gene 41863378 41865614 . + . ID=gene2185;Name=RP11-298J23.7-001;name2=RP11-298J23.7 chr6 ENCODE exon 41863378 41863541 . + . Parent=gene2185 chr6 ENCODE CDS 41863414 41863541 . + 0 Parent=gene2185 chr6 ENCODE CDS 41864948 41865044 . + 1 Parent=gene2185 chr6 ENCODE exon 41864948 41865052 . + . Parent=gene2185 chr6 ENCODE exon 41865247 41865614 . + . Parent=gene2185 ### chr6 ENCODE gene 41863381 41865612 . + . ID=gene2186;Name=RP11-298J23.7-002;name2=RP11-298J23.7 chr6 ENCODE exon 41863381 41863541 . + . Parent=gene2186 chr6 ENCODE CDS 41863414 41863541 . + 0 Parent=gene2186 chr6 ENCODE CDS 41864948 41865044 . + 1 Parent=gene2186 chr6 ENCODE exon 41864948 41865052 . + . Parent=gene2186 chr6 ENCODE exon 41865284 41865612 . + . Parent=gene2186 ### chr6 ENCODE gene 41865612 41882699 . - . ID=gene2187;Name=RP11-298J23.4-003;name2=USP49 chr6 ENCODE exon 41865612 41872439 . - . Parent=gene2187 chr6 ENCODE CDS 41872249 41872439 . - 2 Parent=gene2187 chr6 ENCODE exon 41874440 41874645 . - . Parent=gene2187 chr6 ENCODE CDS 41874440 41874645 . - 1 Parent=gene2187 chr6 ENCODE exon 41875546 41875654 . - . Parent=gene2187 chr6 ENCODE CDS 41875546 41875654 . - 2 Parent=gene2187 chr6 ENCODE exon 41879522 41879726 . - . Parent=gene2187 chr6 ENCODE CDS 41879522 41879726 . - 0 Parent=gene2187 chr6 ENCODE exon 41881344 41882699 . - . Parent=gene2187 chr6 ENCODE CDS 41881344 41882699 . - 0 Parent=gene2187 ### chr6 ENCODE gene 41871236 41882727 . - . ID=gene2188;Name=RP11-298J23.4-007;name2=USP49 chr6 ENCODE exon 41871236 41872439 . - . Parent=gene2188 chr6 ENCODE exon 41874440 41874645 . - . Parent=gene2188 chr6 ENCODE exon 41875546 41875654 . - . Parent=gene2188 chr6 ENCODE exon 41879522 41879726 . - . Parent=gene2188 chr6 ENCODE exon 41881344 41882727 . - . Parent=gene2188 ### chr6 ENCODE gene 41872214 41882727 . - . ID=gene2189;Name=RP11-298J23.4-002;name2=USP49 chr6 ENCODE exon 41872214 41872439 . - . Parent=gene2189 chr6 ENCODE exon 41874591 41874645 . - . Parent=gene2189 chr6 ENCODE exon 41875546 41875654 . - . Parent=gene2189 chr6 ENCODE exon 41879522 41879726 . - . Parent=gene2189 chr6 ENCODE exon 41881344 41882727 . - . Parent=gene2189 ### chr6 ENCODE gene 41872393 41881461 . - . ID=gene2190;Name=RP11-298J23.4-004;name2=USP49 chr6 ENCODE exon 41872393 41872439 . - . Parent=gene2190 chr6 ENCODE exon 41874440 41874645 . - . Parent=gene2190 chr6 ENCODE exon 41875546 41875654 . - . Parent=gene2190 chr6 ENCODE exon 41881344 41881461 . - . Parent=gene2190 ### chr6 ENCODE gene 41873361 41882727 . - . ID=gene2191;Name=RP11-298J23.4-001;name2=USP49 chr6 ENCODE exon 41873361 41874645 . - . Parent=gene2191 chr6 ENCODE exon 41875546 41875654 . - . Parent=gene2191 chr6 ENCODE exon 41879522 41879726 . - . Parent=gene2191 chr6 ENCODE exon 41881344 41882727 . - . Parent=gene2191 ### chr6 ENCODE gene 41882587 41882727 . - . ID=gene2192;Name=RP11-298J23.4-006;name2=USP49 chr6 ENCODE exon 41882587 41882727 . - . Parent=gene2192 ### chr6 ENCODE gene 41882655 41882727 . - . ID=gene2193;name2=USP49;Name=RP11-298J23.4-005 chr6 ENCODE exon 41882655 41882727 . - . Parent=gene2193 ### chr6 ENCODE gene 73808380 73808631 . + . ID=gene2194;Name=RP11-257K9.5-005;name2=KCNQ5 chr6 ENCODE exon 73808380 73808631 . + . Parent=gene2194 ### chr6 ENCODE gene 73808380 73809705 . + . ID=gene2195;name2=KCNQ5;Name=RP11-257K9.5-003 chr6 ENCODE exon 73808380 73808506 . + . Parent=gene2195 chr6 ENCODE CDS 73808380 73808506 . + 0 Parent=gene2195 chr6 ENCODE CDS 73809512 73809657 . + 2 Parent=gene2195 chr6 ENCODE exon 73809512 73809705 . + . Parent=gene2195 ### chr6 ENCODE gene 73808380 73891094 . + . ID=gene2196;Name=RP11-257K9.5-002;name2=KCNQ5 chr6 ENCODE exon 73808380 73808506 . + . Parent=gene2196 chr6 ENCODE exon 73843766 73843941 . + . Parent=gene2196 chr6 ENCODE exon 73844206 73844331 . + . Parent=gene2196 chr6 ENCODE exon 73871701 73871811 . + . Parent=gene2196 chr6 ENCODE exon 73877752 73877847 . + . Parent=gene2196 chr6 ENCODE exon 73886927 73887021 . + . Parent=gene2196 chr6 ENCODE exon 73890930 73891094 . + . Parent=gene2196 ### chr6 ENCODE gene 73808380 73965292 . + . ID=gene2197;Name=RP11-257K9.5-006;name2=KCNQ5 chr6 ENCODE exon 73808380 73808506 . + . Parent=gene2197 chr6 ENCODE exon 73843766 73843941 . + . Parent=gene2197 chr6 ENCODE exon 73844206 73844331 . + . Parent=gene2197 chr6 ENCODE exon 73871701 73871811 . + . Parent=gene2197 chr6 ENCODE exon 73877752 73877847 . + . Parent=gene2197 chr6 ENCODE exon 73886927 73887021 . + . Parent=gene2197 chr6 ENCODE exon 73890930 73890956 . + . Parent=gene2197 chr6 ENCODE exon 73896237 73896293 . + . Parent=gene2197 chr6 ENCODE exon 73899865 73900085 . + . Parent=gene2197 chr6 ENCODE exon 73936190 73936298 . + . Parent=gene2197 chr6 ENCODE exon 73957017 73957148 . + . Parent=gene2197 chr6 ENCODE exon 73959009 73959135 . + . Parent=gene2197 chr6 ENCODE exon 73960896 73965292 . + . Parent=gene2197 ### chr6 ENCODE gene 73808380 73965295 . + . ID=gene2198;Name=RP11-257K9.5-001;name2=KCNQ5 chr6 ENCODE exon 73808380 73808506 . + . Parent=gene2198 chr6 ENCODE exon 73843766 73843941 . + . Parent=gene2198 chr6 ENCODE exon 73844206 73844331 . + . Parent=gene2198 chr6 ENCODE exon 73871701 73871811 . + . Parent=gene2198 chr6 ENCODE exon 73877752 73877847 . + . Parent=gene2198 chr6 ENCODE exon 73886927 73887021 . + . Parent=gene2198 chr6 ENCODE exon 73890930 73890956 . + . Parent=gene2198 chr6 ENCODE exon 73899865 73900085 . + . Parent=gene2198 chr6 ENCODE exon 73936190 73936298 . + . Parent=gene2198 chr6 ENCODE exon 73957017 73957148 . + . Parent=gene2198 chr6 ENCODE exon 73959009 73959135 . + . Parent=gene2198 chr6 ENCODE exon 73960896 73965295 . + . Parent=gene2198 ### chr6 ENCODE gene 73887001 73900771 . + . ID=gene2199;Name=RP11-257K9.5-004;name2=KCNQ5 chr6 ENCODE exon 73887001 73887021 . + . Parent=gene2199 chr6 ENCODE CDS 73887001 73887021 . + 0 Parent=gene2199 chr6 ENCODE exon 73899865 73900085 . + . Parent=gene2199 chr6 ENCODE CDS 73899865 73900085 . + 0 Parent=gene2199 chr6 ENCODE CDS 73900365 73900414 . + 1 Parent=gene2199 chr6 ENCODE exon 73900365 73900771 . + . Parent=gene2199 ### chr6 ENCODE gene 73975314 74029640 . - . ID=gene2200;Name=RP11-257K9.4-002;name2=C6orf148 chr6 ENCODE exon 73975314 73975694 . - . Parent=gene2200 chr6 ENCODE exon 73976193 73976524 . - . Parent=gene2200 chr6 ENCODE exon 73982963 73983083 . - . Parent=gene2200 chr6 ENCODE exon 73990143 73990283 . - . Parent=gene2200 chr6 ENCODE exon 73990610 73990792 . - . Parent=gene2200 chr6 ENCODE exon 73991741 73991865 . - . Parent=gene2200 chr6 ENCODE exon 74008499 74008681 . - . Parent=gene2200 chr6 ENCODE exon 74008850 74008974 . - . Parent=gene2200 chr6 ENCODE exon 74029218 74029640 . - . Parent=gene2200 ### chr6 ENCODE gene 73989988 73991896 . - . ID=gene2201;Name=RP11-257K9.7-001;name2=RP11-257K9.7 chr6 ENCODE exon 73989988 73990283 . - . Parent=gene2201 chr6 ENCODE CDS 73990192 73990283 . - 2 Parent=gene2201 chr6 ENCODE exon 73990610 73990792 . - . Parent=gene2201 chr6 ENCODE CDS 73990610 73990792 . - 2 Parent=gene2201 chr6 ENCODE CDS 73991741 73991852 . - 0 Parent=gene2201 chr6 ENCODE exon 73991741 73991896 . - . Parent=gene2201 ### chr6 ENCODE gene 73990700 73992214 . - . ID=gene2202;Name=RP11-257K9.7-002;name2=RP11-257K9.7 chr6 ENCODE exon 73990700 73990792 . - . Parent=gene2202 chr6 ENCODE exon 73991741 73992214 . - . Parent=gene2202 ### chr6 ENCODE gene 74007758 74029628 . - . ID=gene2203;name2=C6orf148;Name=RP11-257K9.4-001 chr6 ENCODE exon 74007758 74008172 . - . Parent=gene2203 chr6 ENCODE CDS 74007973 74008172 . - 2 Parent=gene2203 chr6 ENCODE exon 74008499 74008681 . - . Parent=gene2203 chr6 ENCODE CDS 74008499 74008681 . - 2 Parent=gene2203 chr6 ENCODE CDS 74008850 74008961 . - 0 Parent=gene2203 chr6 ENCODE exon 74008850 74008974 . - . Parent=gene2203 chr6 ENCODE exon 74029218 74029628 . - . Parent=gene2203 ### chr6 ENCODE gene 74007758 74076659 . - . ID=gene2204;Name=RP11-257K9.4-005;name2=C6orf148 chr6 ENCODE exon 74007758 74008172 . - . Parent=gene2204 chr6 ENCODE CDS 74007973 74008172 . - 2 Parent=gene2204 chr6 ENCODE exon 74008499 74008681 . - . Parent=gene2204 chr6 ENCODE CDS 74008499 74008681 . - 2 Parent=gene2204 chr6 ENCODE exon 74008850 74008974 . - . Parent=gene2204 chr6 ENCODE CDS 74008850 74008974 . - 1 Parent=gene2204 chr6 ENCODE exon 74058442 74058484 . - . Parent=gene2204 chr6 ENCODE CDS 74058442 74058484 . - 2 Parent=gene2204 chr6 ENCODE CDS 74075996 74076158 . - 0 Parent=gene2204 chr6 ENCODE exon 74075996 74076659 . - . Parent=gene2204 ### chr6 ENCODE gene 74008499 74029616 . - . ID=gene2205;Name=RP11-257K9.4-004;name2=C6orf148 chr6 ENCODE exon 74008499 74008681 . - . Parent=gene2205 chr6 ENCODE CDS 74008499 74008681 . - 2 Parent=gene2205 chr6 ENCODE CDS 74008850 74008961 . - 0 Parent=gene2205 chr6 ENCODE exon 74008850 74008974 . - . Parent=gene2205 chr6 ENCODE exon 74029378 74029616 . - . Parent=gene2205 ### chr6 ENCODE gene 74040583 74076587 . - . ID=gene2206;name2=RP11-398K22.8;Name=RP11-398K22.8-002 chr6 ENCODE exon 74040583 74042000 . - . Parent=gene2206 chr6 ENCODE CDS 74041997 74042000 . - 1 Parent=gene2206 chr6 ENCODE exon 74058442 74058484 . - . Parent=gene2206 chr6 ENCODE CDS 74058442 74058484 . - 2 Parent=gene2206 chr6 ENCODE CDS 74075996 74076158 . - 0 Parent=gene2206 chr6 ENCODE exon 74075996 74076587 . - . Parent=gene2206 ### chr6 ENCODE gene 74041490 74076809 . - . ID=gene2207;Name=RP11-398K22.8-001;name2=RP11-398K22.8 chr6 ENCODE exon 74041490 74041603 . - . Parent=gene2207 chr6 ENCODE exon 74041858 74042000 . - . Parent=gene2207 chr6 ENCODE CDS 74041997 74042000 . - 1 Parent=gene2207 chr6 ENCODE exon 74058442 74058484 . - . Parent=gene2207 chr6 ENCODE CDS 74058442 74058484 . - 2 Parent=gene2207 chr6 ENCODE CDS 74075996 74076158 . - 0 Parent=gene2207 chr6 ENCODE exon 74075996 74076172 . - . Parent=gene2207 chr6 ENCODE exon 74076750 74076809 . - . Parent=gene2207 ### chr6 ENCODE gene 74119506 74120739 . - . ID=gene2208;name2=RP11-398K22.7;Name=RP11-398K22.7-001 chr6 ENCODE exon 74119506 74119822 . - . Parent=gene2208 chr6 ENCODE CDS 74119764 74119822 . - 2 Parent=gene2208 chr6 ENCODE exon 74120297 74120476 . - . Parent=gene2208 chr6 ENCODE CDS 74120297 74120476 . - 2 Parent=gene2208 chr6 ENCODE CDS 74120558 74120669 . - 0 Parent=gene2208 chr6 ENCODE exon 74120558 74120739 . - . Parent=gene2208 ### chr6 ENCODE gene 74129121 74130615 . + . ID=gene2209;name2=RP11-398K22.4;Name=RP11-398K22.4-001 chr6 ENCODE exon 74129121 74129342 . + . Parent=gene2209 chr6 ENCODE CDS 74129174 74129342 . + 0 Parent=gene2209 chr6 ENCODE exon 74129539 74129718 . + . Parent=gene2209 chr6 ENCODE CDS 74129539 74129718 . + 2 Parent=gene2209 chr6 ENCODE CDS 74130000 74130304 . + 2 Parent=gene2209 chr6 ENCODE exon 74130000 74130615 . + . Parent=gene2209 ### chr6 ENCODE gene 74134999 74161537 . - . ID=gene2210;Name=RP11-398K22.11-001;name2=RP11-398K22.11 chr6 ENCODE exon 74134999 74135307 . - . Parent=gene2210 chr6 ENCODE CDS 74135228 74135307 . - 2 Parent=gene2210 chr6 ENCODE exon 74135650 74135829 . - . Parent=gene2210 chr6 ENCODE CDS 74135650 74135829 . - 2 Parent=gene2210 chr6 ENCODE CDS 74160790 74160814 . - 0 Parent=gene2210 chr6 ENCODE exon 74160790 74160932 . - . Parent=gene2210 chr6 ENCODE exon 74161163 74161537 . - . Parent=gene2210 ### chr6 ENCODE gene 74135200 74136226 . - . ID=gene2211;Name=RP11-398K22.11-003;name2=RP11-398K22.11 chr6 ENCODE exon 74135200 74135307 . - . Parent=gene2211 chr6 ENCODE CDS 74135228 74135307 . - 0 Parent=gene2211 chr6 ENCODE exon 74135650 74135829 . - . Parent=gene2211 chr6 ENCODE CDS 74135650 74135829 . - 0 Parent=gene2211 chr6 ENCODE exon 74136047 74136226 . - . Parent=gene2211 chr6 ENCODE CDS 74136047 74136226 . - 0 Parent=gene2211 ### chr6 ENCODE gene 74135654 74161577 . - . ID=gene2212;Name=RP11-398K22.11-002;name2=RP11-398K22.11 chr6 ENCODE exon 74135654 74135829 . - . Parent=gene2212 chr6 ENCODE CDS 74135654 74135829 . - 2 Parent=gene2212 chr6 ENCODE CDS 74160790 74160814 . - 0 Parent=gene2212 chr6 ENCODE exon 74160790 74161577 . - . Parent=gene2212 ### chr6 ENCODE gene 74161192 74184013 . + . ID=gene2213;Name=RP11-398K22.1-001;name2=DDX43 chr6 ENCODE exon 74161192 74161599 . + . Parent=gene2213 chr6 ENCODE CDS 74161350 74161599 . + 0 Parent=gene2213 chr6 ENCODE exon 74164133 74164188 . + . Parent=gene2213 chr6 ENCODE CDS 74164133 74164188 . + 2 Parent=gene2213 chr6 ENCODE exon 74166678 74166807 . + . Parent=gene2213 chr6 ENCODE CDS 74166678 74166807 . + 0 Parent=gene2213 chr6 ENCODE exon 74168303 74168434 . + . Parent=gene2213 chr6 ENCODE CDS 74168303 74168434 . + 2 Parent=gene2213 chr6 ENCODE exon 74171134 74171215 . + . Parent=gene2213 chr6 ENCODE CDS 74171134 74171215 . + 2 Parent=gene2213 chr6 ENCODE exon 74172123 74172279 . + . Parent=gene2213 chr6 ENCODE CDS 74172123 74172279 . + 1 Parent=gene2213 chr6 ENCODE exon 74172808 74172926 . + . Parent=gene2213 chr6 ENCODE CDS 74172808 74172926 . + 0 Parent=gene2213 chr6 ENCODE exon 74173949 74174059 . + . Parent=gene2213 chr6 ENCODE CDS 74173949 74174059 . + 1 Parent=gene2213 chr6 ENCODE exon 74174404 74174545 . + . Parent=gene2213 chr6 ENCODE CDS 74174404 74174545 . + 1 Parent=gene2213 chr6 ENCODE exon 74175692 74175792 . + . Parent=gene2213 chr6 ENCODE CDS 74175692 74175792 . + 0 Parent=gene2213 chr6 ENCODE exon 74178649 74178736 . + . Parent=gene2213 chr6 ENCODE CDS 74178649 74178736 . + 1 Parent=gene2213 chr6 ENCODE exon 74180102 74180229 . + . Parent=gene2213 chr6 ENCODE CDS 74180102 74180229 . + 0 Parent=gene2213 chr6 ENCODE exon 74180414 74180523 . + . Parent=gene2213 chr6 ENCODE CDS 74180414 74180523 . + 1 Parent=gene2213 chr6 ENCODE exon 74180992 74181130 . + . Parent=gene2213 chr6 ENCODE CDS 74180992 74181130 . + 2 Parent=gene2213 chr6 ENCODE exon 74181941 74182028 . + . Parent=gene2213 chr6 ENCODE CDS 74181941 74182028 . + 1 Parent=gene2213 chr6 ENCODE CDS 74182557 74182670 . + 0 Parent=gene2213 chr6 ENCODE exon 74182557 74182695 . + . Parent=gene2213 chr6 ENCODE exon 74183631 74184013 . + . Parent=gene2213 ### chr6 ENCODE gene 74161338 74164438 . + . ID=gene2214;Name=RP11-398K22.1-003;name2=DDX43 chr6 ENCODE exon 74161338 74161599 . + . Parent=gene2214 chr6 ENCODE exon 74164133 74164438 . + . Parent=gene2214 ### chr6 ENCODE gene 74173409 74180451 . + . ID=gene2215;Name=RP11-398K22.1-002;name2=DDX43 chr6 ENCODE exon 74173409 74173452 . + . Parent=gene2215 chr6 ENCODE exon 74173949 74174059 . + . Parent=gene2215 chr6 ENCODE exon 74174404 74174545 . + . Parent=gene2215 chr6 ENCODE exon 74175692 74175792 . + . Parent=gene2215 chr6 ENCODE exon 74178649 74178736 . + . Parent=gene2215 chr6 ENCODE exon 74180102 74180229 . + . Parent=gene2215 chr6 ENCODE exon 74180414 74180451 . + . Parent=gene2215 ### chr6 ENCODE gene 74179959 74218703 . - . ID=gene2216;Name=RP11-398K22.2-001;name2=C6orf150 chr6 ENCODE exon 74179959 74180465 . - . Parent=gene2216 chr6 ENCODE CDS 74180454 74180465 . - 0 Parent=gene2216 chr6 ENCODE exon 74191908 74192022 . - . Parent=gene2216 chr6 ENCODE CDS 74191908 74192022 . - 1 Parent=gene2216 chr6 ENCODE exon 74195153 74195255 . - . Parent=gene2216 chr6 ENCODE CDS 74195153 74195255 . - 2 Parent=gene2216 chr6 ENCODE exon 74206653 74206889 . - . Parent=gene2216 chr6 ENCODE CDS 74206653 74206889 . - 2 Parent=gene2216 chr6 ENCODE exon 74211972 74212191 . - . Parent=gene2216 chr6 ENCODE CDS 74211972 74212191 . - 0 Parent=gene2216 chr6 ENCODE CDS 74217969 74218625 . - 0 Parent=gene2216 chr6 ENCODE exon 74217969 74218703 . - . Parent=gene2216 ### chr6 ENCODE gene 74190153 74218720 . - . ID=gene2217;Name=RP11-398K22.2-002;name2=C6orf150 chr6 ENCODE exon 74190153 74192022 . - . Parent=gene2217 chr6 ENCODE CDS 74191671 74192022 . - 1 Parent=gene2217 chr6 ENCODE exon 74195153 74195255 . - . Parent=gene2217 chr6 ENCODE CDS 74195153 74195255 . - 2 Parent=gene2217 chr6 ENCODE exon 74206653 74206889 . - . Parent=gene2217 chr6 ENCODE CDS 74206653 74206889 . - 2 Parent=gene2217 chr6 ENCODE exon 74211972 74212191 . - . Parent=gene2217 chr6 ENCODE CDS 74211972 74212191 . - 0 Parent=gene2217 chr6 ENCODE CDS 74217969 74218625 . - 0 Parent=gene2217 chr6 ENCODE exon 74217969 74218720 . - . Parent=gene2217 ### chr6 ENCODE gene 74191661 74218720 . - . ID=gene2218;Name=RP11-398K22.2-004;name2=C6orf150 chr6 ENCODE exon 74191661 74191971 . - . Parent=gene2218 chr6 ENCODE CDS 74191671 74191971 . - 1 Parent=gene2218 chr6 ENCODE exon 74195153 74195255 . - . Parent=gene2218 chr6 ENCODE CDS 74195153 74195255 . - 2 Parent=gene2218 chr6 ENCODE exon 74206653 74206889 . - . Parent=gene2218 chr6 ENCODE CDS 74206653 74206889 . - 2 Parent=gene2218 chr6 ENCODE exon 74211972 74212191 . - . Parent=gene2218 chr6 ENCODE CDS 74211972 74212191 . - 0 Parent=gene2218 chr6 ENCODE CDS 74217969 74218625 . - 0 Parent=gene2218 chr6 ENCODE exon 74217969 74218720 . - . Parent=gene2218 ### chr6 ENCODE gene 74206187 74212129 . - . ID=gene2219;Name=RP11-398K22.2-003;name2=C6orf150 chr6 ENCODE exon 74206187 74206889 . - . Parent=gene2219 chr6 ENCODE exon 74211972 74212129 . - . Parent=gene2219 ### chr6 ENCODE gene 74228022 74275680 . + . ID=gene2220;Name=RP11-505P4.1-001;name2=MTO1 chr6 ENCODE exon 74228022 74228515 . + . Parent=gene2220 chr6 ENCODE CDS 74228299 74228515 . + 0 Parent=gene2220 chr6 ENCODE exon 74232653 74232852 . + . Parent=gene2220 chr6 ENCODE CDS 74232653 74232852 . + 2 Parent=gene2220 chr6 ENCODE exon 74232933 74233050 . + . Parent=gene2220 chr6 ENCODE CDS 74232933 74233050 . + 0 Parent=gene2220 chr6 ENCODE exon 74239809 74240098 . + . Parent=gene2220 chr6 ENCODE CDS 74239809 74240098 . + 2 Parent=gene2220 chr6 ENCODE exon 74246176 74246288 . + . Parent=gene2220 chr6 ENCODE CDS 74246176 74246288 . + 0 Parent=gene2220 chr6 ENCODE exon 74246380 74246570 . + . Parent=gene2220 chr6 ENCODE CDS 74246380 74246570 . + 1 Parent=gene2220 chr6 ENCODE exon 74247119 74247249 . + . Parent=gene2220 chr6 ENCODE CDS 74247119 74247249 . + 2 Parent=gene2220 chr6 ENCODE exon 74248484 74248688 . + . Parent=gene2220 chr6 ENCODE CDS 74248484 74248688 . + 0 Parent=gene2220 chr6 ENCODE exon 74248893 74249064 . + . Parent=gene2220 chr6 ENCODE CDS 74248893 74249064 . + 2 Parent=gene2220 chr6 ENCODE exon 74258678 74258796 . + . Parent=gene2220 chr6 ENCODE CDS 74258678 74258796 . + 1 Parent=gene2220 chr6 ENCODE exon 74264180 74264340 . + . Parent=gene2220 chr6 ENCODE CDS 74264180 74264340 . + 2 Parent=gene2220 chr6 ENCODE CDS 74267018 74267179 . + 0 Parent=gene2220 chr6 ENCODE exon 74267018 74275680 . + . Parent=gene2220 ### chr6 ENCODE gene 74228190 74267367 . + . ID=gene2221;Name=RP11-505P4.1-007;name2=MTO1 chr6 ENCODE exon 74228190 74228238 . + . Parent=gene2221 chr6 ENCODE exon 74232653 74232852 . + . Parent=gene2221 chr6 ENCODE CDS 74232658 74232852 . + 0 Parent=gene2221 chr6 ENCODE exon 74232933 74233050 . + . Parent=gene2221 chr6 ENCODE CDS 74232933 74233050 . + 0 Parent=gene2221 chr6 ENCODE exon 74239809 74240098 . + . Parent=gene2221 chr6 ENCODE CDS 74239809 74240098 . + 2 Parent=gene2221 chr6 ENCODE exon 74246176 74246288 . + . Parent=gene2221 chr6 ENCODE CDS 74246176 74246288 . + 0 Parent=gene2221 chr6 ENCODE exon 74246380 74246570 . + . Parent=gene2221 chr6 ENCODE CDS 74246380 74246570 . + 1 Parent=gene2221 chr6 ENCODE exon 74246737 74246811 . + . Parent=gene2221 chr6 ENCODE CDS 74246737 74246811 . + 2 Parent=gene2221 chr6 ENCODE exon 74247119 74247249 . + . Parent=gene2221 chr6 ENCODE CDS 74247119 74247249 . + 2 Parent=gene2221 chr6 ENCODE exon 74248484 74248688 . + . Parent=gene2221 chr6 ENCODE CDS 74248484 74248688 . + 0 Parent=gene2221 chr6 ENCODE exon 74248893 74249064 . + . Parent=gene2221 chr6 ENCODE CDS 74248893 74249064 . + 2 Parent=gene2221 chr6 ENCODE exon 74258678 74258796 . + . Parent=gene2221 chr6 ENCODE CDS 74258678 74258796 . + 1 Parent=gene2221 chr6 ENCODE exon 74264180 74264340 . + . Parent=gene2221 chr6 ENCODE CDS 74264180 74264340 . + 2 Parent=gene2221 chr6 ENCODE CDS 74267018 74267179 . + 0 Parent=gene2221 chr6 ENCODE exon 74267018 74267367 . + . Parent=gene2221 ### chr6 ENCODE gene 74228209 74267540 . + . ID=gene2222;Name=RP11-505P4.1-002;name2=MTO1 chr6 ENCODE exon 74228209 74228515 . + . Parent=gene2222 chr6 ENCODE exon 74232653 74232852 . + . Parent=gene2222 chr6 ENCODE exon 74232933 74233050 . + . Parent=gene2222 chr6 ENCODE exon 74239809 74240098 . + . Parent=gene2222 chr6 ENCODE exon 74246176 74246570 . + . Parent=gene2222 chr6 ENCODE exon 74247119 74247249 . + . Parent=gene2222 chr6 ENCODE exon 74248484 74248688 . + . Parent=gene2222 chr6 ENCODE exon 74248893 74249064 . + . Parent=gene2222 chr6 ENCODE exon 74258678 74258796 . + . Parent=gene2222 chr6 ENCODE exon 74264180 74264340 . + . Parent=gene2222 chr6 ENCODE exon 74267018 74267540 . + . Parent=gene2222 ### chr6 ENCODE gene 74228209 74267540 . + . ID=gene2223;Name=RP11-505P4.1-005;name2=MTO1 chr6 ENCODE exon 74228209 74228515 . + . Parent=gene2223 chr6 ENCODE exon 74232653 74232852 . + . Parent=gene2223 chr6 ENCODE exon 74232933 74233050 . + . Parent=gene2223 chr6 ENCODE exon 74246176 74246288 . + . Parent=gene2223 chr6 ENCODE exon 74246380 74246570 . + . Parent=gene2223 chr6 ENCODE exon 74247119 74247249 . + . Parent=gene2223 chr6 ENCODE exon 74248484 74248688 . + . Parent=gene2223 chr6 ENCODE exon 74248893 74249064 . + . Parent=gene2223 chr6 ENCODE exon 74258678 74258796 . + . Parent=gene2223 chr6 ENCODE exon 74264180 74264340 . + . Parent=gene2223 chr6 ENCODE exon 74267018 74267540 . + . Parent=gene2223 ### chr6 ENCODE gene 74228209 74267896 . + . ID=gene2224;Name=RP11-505P4.1-003;name2=MTO1 chr6 ENCODE exon 74228209 74228515 . + . Parent=gene2224 chr6 ENCODE CDS 74228299 74228515 . + 0 Parent=gene2224 chr6 ENCODE exon 74232653 74232852 . + . Parent=gene2224 chr6 ENCODE CDS 74232653 74232852 . + 2 Parent=gene2224 chr6 ENCODE exon 74232933 74233050 . + . Parent=gene2224 chr6 ENCODE CDS 74232933 74233050 . + 0 Parent=gene2224 chr6 ENCODE exon 74239809 74240098 . + . Parent=gene2224 chr6 ENCODE CDS 74239809 74240098 . + 2 Parent=gene2224 chr6 ENCODE exon 74246176 74246288 . + . Parent=gene2224 chr6 ENCODE CDS 74246176 74246288 . + 0 Parent=gene2224 chr6 ENCODE exon 74246380 74246570 . + . Parent=gene2224 chr6 ENCODE CDS 74246380 74246570 . + 1 Parent=gene2224 chr6 ENCODE exon 74246737 74246811 . + . Parent=gene2224 chr6 ENCODE CDS 74246737 74246811 . + 2 Parent=gene2224 chr6 ENCODE exon 74247119 74247249 . + . Parent=gene2224 chr6 ENCODE CDS 74247119 74247249 . + 2 Parent=gene2224 chr6 ENCODE exon 74248484 74248688 . + . Parent=gene2224 chr6 ENCODE CDS 74248484 74248688 . + 0 Parent=gene2224 chr6 ENCODE exon 74248893 74249064 . + . Parent=gene2224 chr6 ENCODE CDS 74248893 74249064 . + 2 Parent=gene2224 chr6 ENCODE exon 74258678 74258796 . + . Parent=gene2224 chr6 ENCODE CDS 74258678 74258796 . + 1 Parent=gene2224 chr6 ENCODE exon 74264180 74264340 . + . Parent=gene2224 chr6 ENCODE CDS 74264180 74264340 . + 2 Parent=gene2224 chr6 ENCODE CDS 74267018 74267179 . + 0 Parent=gene2224 chr6 ENCODE exon 74267018 74267896 . + . Parent=gene2224 ### chr6 ENCODE gene 74228239 74267494 . + . ID=gene2225;Name=RP11-505P4.1-004;name2=MTO1 chr6 ENCODE exon 74228239 74228515 . + . Parent=gene2225 chr6 ENCODE exon 74232653 74232852 . + . Parent=gene2225 chr6 ENCODE exon 74232933 74233050 . + . Parent=gene2225 chr6 ENCODE exon 74246176 74246288 . + . Parent=gene2225 chr6 ENCODE exon 74246380 74246811 . + . Parent=gene2225 chr6 ENCODE exon 74247119 74247249 . + . Parent=gene2225 chr6 ENCODE exon 74248473 74248688 . + . Parent=gene2225 chr6 ENCODE exon 74248893 74249064 . + . Parent=gene2225 chr6 ENCODE exon 74258678 74258796 . + . Parent=gene2225 chr6 ENCODE exon 74264180 74264340 . + . Parent=gene2225 chr6 ENCODE exon 74267018 74267494 . + . Parent=gene2225 ### chr6 ENCODE gene 74228528 74233032 . + . ID=gene2226;Name=RP11-505P4.1-011;name2=MTO1 chr6 ENCODE exon 74228528 74228617 . + . Parent=gene2226 chr6 ENCODE exon 74232653 74232852 . + . Parent=gene2226 chr6 ENCODE CDS 74232658 74232852 . + 0 Parent=gene2226 chr6 ENCODE exon 74232933 74233032 . + . Parent=gene2226 chr6 ENCODE CDS 74232933 74233032 . + 0 Parent=gene2226 ### chr6 ENCODE gene 74232707 74238239 . + . ID=gene2227;Name=RP11-505P4.1-008;name2=MTO1 chr6 ENCODE exon 74232707 74232852 . + . Parent=gene2227 chr6 ENCODE exon 74232933 74233050 . + . Parent=gene2227 chr6 ENCODE exon 74237904 74238239 . + . Parent=gene2227 ### chr6 ENCODE gene 74239997 74246615 . + . ID=gene2228;Name=RP11-505P4.1-009;name2=MTO1 chr6 ENCODE exon 74239997 74240098 . + . Parent=gene2228 chr6 ENCODE exon 74246176 74246288 . + . Parent=gene2228 chr6 ENCODE exon 74246380 74246615 . + . Parent=gene2228 ### chr6 ENCODE gene 74246444 74248978 . + . ID=gene2229;name2=MTO1;Name=RP11-505P4.1-006 chr6 ENCODE exon 74246444 74246570 . + . Parent=gene2229 chr6 ENCODE exon 74247119 74247249 . + . Parent=gene2229 chr6 ENCODE exon 74247445 74247560 . + . Parent=gene2229 chr6 ENCODE exon 74248484 74248688 . + . Parent=gene2229 chr6 ENCODE exon 74248893 74248978 . + . Parent=gene2229 ### chr6 ENCODE gene 74246610 74247472 . + . ID=gene2230;Name=RP11-505P4.1-010;name2=MTO1 chr6 ENCODE exon 74246610 74246811 . + . Parent=gene2230 chr6 ENCODE exon 74247119 74247249 . + . Parent=gene2230 chr6 ENCODE exon 74247445 74247472 . + . Parent=gene2230 ### chr6 ENCODE gene 74282194 74287462 . - . ID=gene2231;name2=EEF1A1;Name=RP11-505P4.2-001 chr6 ENCODE exon 74282194 74284378 . - . Parent=gene2231 chr6 ENCODE CDS 74284254 74284378 . - 2 Parent=gene2231 chr6 ENCODE exon 74284474 74284708 . - . Parent=gene2231 chr6 ENCODE CDS 74284474 74284708 . - 0 Parent=gene2231 chr6 ENCODE exon 74284798 74285054 . - . Parent=gene2231 chr6 ENCODE CDS 74284798 74285054 . - 2 Parent=gene2231 chr6 ENCODE exon 74285142 74285292 . - . Parent=gene2231 chr6 ENCODE CDS 74285142 74285292 . - 0 Parent=gene2231 chr6 ENCODE exon 74285376 74285672 . - . Parent=gene2231 chr6 ENCODE CDS 74285376 74285672 . - 0 Parent=gene2231 chr6 ENCODE exon 74285781 74285960 . - . Parent=gene2231 chr6 ENCODE CDS 74285781 74285960 . - 0 Parent=gene2231 chr6 ENCODE CDS 74286327 74286470 . - 0 Parent=gene2231 chr6 ENCODE exon 74286327 74287462 . - . Parent=gene2231 ### chr6 ENCODE gene 74283959 74285861 . - . ID=gene2232;Name=RP11-505P4.2-014;name2=EEF1A1 chr6 ENCODE exon 74283959 74284262 . - . Parent=gene2232 chr6 ENCODE exon 74285425 74285672 . - . Parent=gene2232 chr6 ENCODE exon 74285781 74285861 . - . Parent=gene2232 ### chr6 ENCODE gene 74283959 74287478 . - . ID=gene2233;Name=RP11-505P4.2-013;name2=EEF1A1 chr6 ENCODE exon 74283959 74284325 . - . Parent=gene2233 chr6 ENCODE exon 74285854 74285960 . - . Parent=gene2233 chr6 ENCODE exon 74286327 74286500 . - . Parent=gene2233 chr6 ENCODE exon 74287444 74287478 . - . Parent=gene2233 ### chr6 ENCODE gene 74283959 74288032 . - . ID=gene2234;Name=RP11-505P4.2-009;name2=EEF1A1 chr6 ENCODE exon 74283959 74284378 . - . Parent=gene2234 chr6 ENCODE CDS 74284254 74284378 . - 2 Parent=gene2234 chr6 ENCODE exon 74284474 74284708 . - . Parent=gene2234 chr6 ENCODE CDS 74284474 74284708 . - 0 Parent=gene2234 chr6 ENCODE exon 74284798 74285054 . - . Parent=gene2234 chr6 ENCODE CDS 74284798 74285054 . - 2 Parent=gene2234 chr6 ENCODE exon 74285142 74285292 . - . Parent=gene2234 chr6 ENCODE CDS 74285142 74285292 . - 0 Parent=gene2234 chr6 ENCODE exon 74285376 74285672 . - . Parent=gene2234 chr6 ENCODE CDS 74285376 74285672 . - 0 Parent=gene2234 chr6 ENCODE exon 74285781 74285960 . - . Parent=gene2234 chr6 ENCODE CDS 74285781 74285960 . - 0 Parent=gene2234 chr6 ENCODE CDS 74286327 74286470 . - 0 Parent=gene2234 chr6 ENCODE exon 74286327 74286500 . - . Parent=gene2234 chr6 ENCODE exon 74287444 74288032 . - . Parent=gene2234 ### chr6 ENCODE gene 74283960 74286455 . - . ID=gene2235;Name=RP11-505P4.2-012;name2=EEF1A1 chr6 ENCODE exon 74283960 74284378 . - . Parent=gene2235 chr6 ENCODE exon 74284474 74284552 . - . Parent=gene2235 chr6 ENCODE exon 74286339 74286455 . - . Parent=gene2235 ### chr6 ENCODE gene 74283962 74287476 . - . ID=gene2236;name2=EEF1A1;Name=RP11-505P4.2-006 chr6 ENCODE exon 74283962 74284378 . - . Parent=gene2236 chr6 ENCODE exon 74284474 74284518 . - . Parent=gene2236 chr6 ENCODE exon 74284812 74285054 . - . Parent=gene2236 chr6 ENCODE exon 74285142 74285292 . - . Parent=gene2236 chr6 ENCODE exon 74285376 74285672 . - . Parent=gene2236 chr6 ENCODE exon 74285781 74285960 . - . Parent=gene2236 chr6 ENCODE exon 74286327 74286500 . - . Parent=gene2236 chr6 ENCODE exon 74287444 74287476 . - . Parent=gene2236 ### chr6 ENCODE gene 74283962 74287476 . - . ID=gene2237;Name=RP11-505P4.2-007;name2=EEF1A1 chr6 ENCODE exon 74283962 74284378 . - . Parent=gene2237 chr6 ENCODE exon 74284474 74284708 . - . Parent=gene2237 chr6 ENCODE exon 74284798 74284818 . - . Parent=gene2237 chr6 ENCODE exon 74285478 74285672 . - . Parent=gene2237 chr6 ENCODE exon 74285781 74285960 . - . Parent=gene2237 chr6 ENCODE exon 74286327 74286500 . - . Parent=gene2237 chr6 ENCODE exon 74287444 74287476 . - . Parent=gene2237 ### chr6 ENCODE gene 74283963 74286503 . - . ID=gene2238;name2=EEF1A1;Name=RP11-505P4.2-008 chr6 ENCODE exon 74283963 74284378 . - . Parent=gene2238 chr6 ENCODE exon 74284474 74285054 . - . Parent=gene2238 chr6 ENCODE exon 74285142 74285292 . - . Parent=gene2238 chr6 ENCODE exon 74285376 74285672 . - . Parent=gene2238 chr6 ENCODE exon 74285781 74285960 . - . Parent=gene2238 chr6 ENCODE exon 74286327 74286503 . - . Parent=gene2238 ### chr6 ENCODE gene 74283965 74288165 . - . ID=gene2239;name2=EEF1A1;Name=RP11-505P4.2-004 chr6 ENCODE exon 74283965 74284378 . - . Parent=gene2239 chr6 ENCODE CDS 74284254 74284378 . - 2 Parent=gene2239 chr6 ENCODE exon 74284474 74284708 . - . Parent=gene2239 chr6 ENCODE CDS 74284474 74284708 . - 0 Parent=gene2239 chr6 ENCODE exon 74284798 74285054 . - . Parent=gene2239 chr6 ENCODE CDS 74284798 74285054 . - 2 Parent=gene2239 chr6 ENCODE exon 74285142 74285292 . - . Parent=gene2239 chr6 ENCODE CDS 74285142 74285292 . - 0 Parent=gene2239 chr6 ENCODE exon 74285376 74285672 . - . Parent=gene2239 chr6 ENCODE CDS 74285376 74285672 . - 0 Parent=gene2239 chr6 ENCODE exon 74285781 74285960 . - . Parent=gene2239 chr6 ENCODE CDS 74285781 74285960 . - 0 Parent=gene2239 chr6 ENCODE CDS 74286327 74286470 . - 0 Parent=gene2239 chr6 ENCODE exon 74286327 74286500 . - . Parent=gene2239 chr6 ENCODE exon 74287951 74288165 . - . Parent=gene2239 ### chr6 ENCODE gene 74284034 74286503 . - . ID=gene2240;Name=RP11-505P4.2-005;name2=EEF1A1 chr6 ENCODE exon 74284034 74284349 . - . Parent=gene2240 chr6 ENCODE exon 74285816 74285960 . - . Parent=gene2240 chr6 ENCODE exon 74286327 74286503 . - . Parent=gene2240 ### chr6 ENCODE gene 74284062 74286503 . - . ID=gene2241;Name=RP11-505P4.2-010;name2=EEF1A1 chr6 ENCODE exon 74284062 74284378 . - . Parent=gene2241 chr6 ENCODE exon 74284474 74284642 . - . Parent=gene2241 chr6 ENCODE exon 74286425 74286503 . - . Parent=gene2241 ### chr6 ENCODE gene 74285010 74286503 . - . ID=gene2242;Name=RP11-505P4.2-002;name2=EEF1A1 chr6 ENCODE exon 74285010 74285054 . - . Parent=gene2242 chr6 ENCODE exon 74285142 74285292 . - . Parent=gene2242 chr6 ENCODE exon 74285376 74285960 . - . Parent=gene2242 chr6 ENCODE exon 74286327 74286503 . - . Parent=gene2242 ### chr6 ENCODE gene 74285238 74286503 . - . ID=gene2243;Name=RP11-505P4.2-011;name2=EEF1A1 chr6 ENCODE exon 74285238 74285672 . - . Parent=gene2243 chr6 ENCODE exon 74285781 74285960 . - . Parent=gene2243 chr6 ENCODE exon 74286327 74286503 . - . Parent=gene2243 ### chr6 ENCODE gene 74285561 74288344 . - . ID=gene2244;name2=EEF1A1;Name=RP11-505P4.2-015 chr6 ENCODE exon 74285561 74285672 . - . Parent=gene2244 chr6 ENCODE CDS 74285561 74285672 . - 0 Parent=gene2244 chr6 ENCODE exon 74285781 74285960 . - . Parent=gene2244 chr6 ENCODE CDS 74285781 74285960 . - 0 Parent=gene2244 chr6 ENCODE CDS 74286327 74286470 . - 0 Parent=gene2244 chr6 ENCODE exon 74286327 74286500 . - . Parent=gene2244 chr6 ENCODE exon 74288176 74288344 . - . Parent=gene2244 ### chr6 ENCODE gene 74285785 74286500 . - . ID=gene2245;Name=RP11-505P4.2-003;name2=EEF1A1 chr6 ENCODE exon 74285785 74285960 . - . Parent=gene2245 chr6 ENCODE exon 74286327 74286500 . - . Parent=gene2245 ### chr6 ENCODE gene 108382481 108385939 . - . ID=gene2246;Name=RP1-191J18.4-002;name2=SEC63 chr6 ENCODE exon 108382481 108382663 . - . Parent=gene2246 chr6 ENCODE exon 108383862 108384003 . - . Parent=gene2246 chr6 ENCODE exon 108385783 108385939 . - . Parent=gene2246 ### chr6 ENCODE gene 108383862 108386008 . - . ID=gene2247;Name=RP1-191J18.4-010;name2=SEC63 chr6 ENCODE exon 108383862 108384003 . - . Parent=gene2247 chr6 ENCODE exon 108385783 108386008 . - . Parent=gene2247 ### chr6 ENCODE gene 108385119 108385237 . - . ID=gene2248;Name=RP1-191J18.4-007;name2=SEC63 chr6 ENCODE exon 108385119 108385237 . - . Parent=gene2248 ### chr6 ENCODE gene 108385783 108385828 . - . ID=gene2249;Name=RP1-191J18.4-005;name2=SEC63 chr6 ENCODE exon 108385783 108385828 . - . Parent=gene2249 ### chr6 ENCODE gene 108385783 108386086 . - . ID=gene2250;name2=SEC63;Name=RP1-191J18.4-001 chr6 ENCODE exon 108385783 108386086 . - . Parent=gene2250 ### chr6 ENCODE gene 108469306 108502634 . - . ID=gene2251;Name=RP1-111B22.1-001;name2=OSTM1 chr6 ENCODE exon 108469306 108472737 . - . Parent=gene2251 chr6 ENCODE CDS 108472682 108472737 . - 2 Parent=gene2251 chr6 ENCODE exon 108477150 108477315 . - . Parent=gene2251 chr6 ENCODE CDS 108477150 108477315 . - 0 Parent=gene2251 chr6 ENCODE exon 108478928 108479095 . - . Parent=gene2251 chr6 ENCODE CDS 108478928 108479095 . - 0 Parent=gene2251 chr6 ENCODE exon 108482387 108482484 . - . Parent=gene2251 chr6 ENCODE CDS 108482387 108482484 . - 2 Parent=gene2251 chr6 ENCODE exon 108492082 108492196 . - . Parent=gene2251 chr6 ENCODE CDS 108492082 108492196 . - 0 Parent=gene2251 chr6 ENCODE CDS 108502147 108502548 . - 0 Parent=gene2251 chr6 ENCODE exon 108502147 108502634 . - . Parent=gene2251 ### chr6 ENCODE gene 108469369 108472135 . - . ID=gene2252;Name=RP1-111B22.1-003;name2=OSTM1 chr6 ENCODE exon 108469369 108470161 . - . Parent=gene2252 chr6 ENCODE exon 108470464 108472135 . - . Parent=gene2252 ### chr6 ENCODE gene 108472276 108478963 . - . ID=gene2253;Name=RP1-111B22.1-005;name2=OSTM1 chr6 ENCODE exon 108472276 108472737 . - . Parent=gene2253 chr6 ENCODE exon 108477150 108477315 . - . Parent=gene2253 chr6 ENCODE exon 108477429 108477480 . - . Parent=gene2253 chr6 ENCODE exon 108478928 108478963 . - . Parent=gene2253 ### chr6 ENCODE gene 108472630 108477565 . - . ID=gene2254;Name=RP1-111B22.1-004;name2=OSTM1 chr6 ENCODE exon 108472630 108472737 . - . Parent=gene2254 chr6 ENCODE exon 108477150 108477315 . - . Parent=gene2254 chr6 ENCODE exon 108477429 108477565 . - . Parent=gene2254 ### chr6 ENCODE gene 108472728 108593737 . - . ID=gene2255;Name=RP1-111B22.1-006;name2=OSTM1 chr6 ENCODE exon 108472728 108472737 . - . Parent=gene2255 chr6 ENCODE CDS 108472728 108472737 . - 1 Parent=gene2255 chr6 ENCODE exon 108477152 108477315 . - . Parent=gene2255 chr6 ENCODE CDS 108477152 108477315 . - 0 Parent=gene2255 chr6 ENCODE exon 108478928 108479095 . - . Parent=gene2255 chr6 ENCODE CDS 108478928 108479095 . - 0 Parent=gene2255 chr6 ENCODE exon 108482387 108482484 . - . Parent=gene2255 chr6 ENCODE CDS 108482387 108482484 . - 2 Parent=gene2255 chr6 ENCODE CDS 108492082 108492157 . - 0 Parent=gene2255 chr6 ENCODE exon 108492082 108492196 . - . Parent=gene2255 chr6 ENCODE exon 108593464 108593601 . - . Parent=gene2255 chr6 ENCODE exon 108593709 108593737 . - . Parent=gene2255 ### chr6 ENCODE gene 108492082 108502638 . - . ID=gene2256;Name=RP1-111B22.1-002;name2=OSTM1 chr6 ENCODE exon 108492082 108492196 . - . Parent=gene2256 chr6 ENCODE exon 108501539 108501695 . - . Parent=gene2256 chr6 ENCODE exon 108502147 108502638 . - . Parent=gene2256 ### chr6 ENCODE gene 108550233 108593751 . - . ID=gene2257;Name=RP1-111B22.1-007;name2=OSTM1 chr6 ENCODE exon 108550233 108550611 . - . Parent=gene2257 chr6 ENCODE exon 108593464 108593601 . - . Parent=gene2257 chr6 ENCODE exon 108593709 108593751 . - . Parent=gene2257 ### chr6 ENCODE gene 108593955 108616706 . + . ID=gene2258;Name=RP3-429G5.1-001;name2=NR2E1 chr6 ENCODE exon 108593955 108594687 . + . Parent=gene2258 chr6 ENCODE CDS 108594663 108594687 . + 0 Parent=gene2258 chr6 ENCODE exon 108599355 108599500 . + . Parent=gene2258 chr6 ENCODE CDS 108599355 108599500 . + 2 Parent=gene2258 chr6 ENCODE exon 108602733 108602820 . + . Parent=gene2258 chr6 ENCODE CDS 108602733 108602820 . + 0 Parent=gene2258 chr6 ENCODE exon 108604400 108604635 . + . Parent=gene2258 chr6 ENCODE CDS 108604400 108604635 . + 2 Parent=gene2258 chr6 ENCODE exon 108605992 108606138 . + . Parent=gene2258 chr6 ENCODE CDS 108605992 108606138 . + 0 Parent=gene2258 chr6 ENCODE exon 108608220 108608316 . + . Parent=gene2258 chr6 ENCODE CDS 108608220 108608316 . + 0 Parent=gene2258 chr6 ENCODE exon 108608704 108608853 . + . Parent=gene2258 chr6 ENCODE CDS 108608704 108608853 . + 2 Parent=gene2258 chr6 ENCODE exon 108609443 108609548 . + . Parent=gene2258 chr6 ENCODE CDS 108609443 108609548 . + 2 Parent=gene2258 chr6 ENCODE CDS 108615198 108615360 . + 1 Parent=gene2258 chr6 ENCODE exon 108615198 108616706 . + . Parent=gene2258 ### chr6 ENCODE gene 108595920 108616699 . + . ID=gene2259;Name=RP3-429G5.1-002;name2=NR2E1 chr6 ENCODE exon 108595920 108596059 . + . Parent=gene2259 chr6 ENCODE CDS 108595924 108596059 . + 0 Parent=gene2259 chr6 ENCODE exon 108599355 108599500 . + . Parent=gene2259 chr6 ENCODE CDS 108599355 108599500 . + 2 Parent=gene2259 chr6 ENCODE exon 108602733 108602820 . + . Parent=gene2259 chr6 ENCODE CDS 108602733 108602820 . + 0 Parent=gene2259 chr6 ENCODE exon 108604400 108604635 . + . Parent=gene2259 chr6 ENCODE CDS 108604400 108604635 . + 2 Parent=gene2259 chr6 ENCODE exon 108605992 108606138 . + . Parent=gene2259 chr6 ENCODE CDS 108605992 108606138 . + 0 Parent=gene2259 chr6 ENCODE exon 108608220 108608316 . + . Parent=gene2259 chr6 ENCODE CDS 108608220 108608316 . + 0 Parent=gene2259 chr6 ENCODE exon 108608704 108608853 . + . Parent=gene2259 chr6 ENCODE CDS 108608704 108608853 . + 2 Parent=gene2259 chr6 ENCODE exon 108609443 108609548 . + . Parent=gene2259 chr6 ENCODE CDS 108609443 108609548 . + 2 Parent=gene2259 chr6 ENCODE CDS 108615198 108615360 . + 1 Parent=gene2259 chr6 ENCODE exon 108615198 108616699 . + . Parent=gene2259 ### chr6 ENCODE gene 108596660 108604523 . + . ID=gene2260;Name=RP3-429G5.1-003;name2=NR2E1 chr6 ENCODE exon 108596660 108596818 . + . Parent=gene2260 chr6 ENCODE exon 108599355 108599500 . + . Parent=gene2260 chr6 ENCODE exon 108602733 108602820 . + . Parent=gene2260 chr6 ENCODE CDS 108602808 108602820 . + 0 Parent=gene2260 chr6 ENCODE exon 108604400 108604523 . + . Parent=gene2260 chr6 ENCODE CDS 108604400 108604523 . + 2 Parent=gene2260 ### chr6 ENCODE gene 108604001 108606044 . + . ID=gene2261;Name=RP3-429G5.1-004;name2=NR2E1 chr6 ENCODE exon 108604001 108604222 . + . Parent=gene2261 chr6 ENCODE exon 108604400 108604635 . + . Parent=gene2261 chr6 ENCODE exon 108605992 108606044 . + . Parent=gene2261 ### chr6 ENCODE gene 108639119 108689157 . - . ID=gene2262;Name=RP3-429G5.4-001;name2=SNX3 chr6 ENCODE exon 108639119 108640151 . - . Parent=gene2262 chr6 ENCODE CDS 108640046 108640151 . - 1 Parent=gene2262 chr6 ENCODE exon 108642395 108642519 . - . Parent=gene2262 chr6 ENCODE CDS 108642395 108642519 . - 0 Parent=gene2262 chr6 ENCODE exon 108650847 108650942 . - . Parent=gene2262 chr6 ENCODE CDS 108650847 108650942 . - 0 Parent=gene2262 chr6 ENCODE CDS 108688657 108688818 . - 0 Parent=gene2262 chr6 ENCODE exon 108688657 108689157 . - . Parent=gene2262 ### chr6 ENCODE gene 108639410 108688861 . - . ID=gene2263;Name=RP3-429G5.4-004;name2=SNX3 chr6 ENCODE exon 108639410 108640151 . - . Parent=gene2263 chr6 ENCODE CDS 108640046 108640151 . - 1 Parent=gene2263 chr6 ENCODE exon 108642395 108642519 . - . Parent=gene2263 chr6 ENCODE CDS 108642395 108642519 . - 0 Parent=gene2263 chr6 ENCODE CDS 108688657 108688818 . - 0 Parent=gene2263 chr6 ENCODE exon 108688657 108688861 . - . Parent=gene2263 ### chr6 ENCODE gene 108639410 108689143 . - . ID=gene2264;name2=SNX3;Name=RP3-429G5.4-002 chr6 ENCODE exon 108639410 108640151 . - . Parent=gene2264 chr6 ENCODE exon 108642395 108642519 . - . Parent=gene2264 chr6 ENCODE exon 108650131 108650217 . - . Parent=gene2264 chr6 ENCODE exon 108650847 108650942 . - . Parent=gene2264 chr6 ENCODE exon 108688657 108689143 . - . Parent=gene2264 ### chr6 ENCODE gene 108639902 108689141 . - . ID=gene2265;Name=RP3-429G5.4-003;name2=SNX3 chr6 ENCODE exon 108639902 108640151 . - . Parent=gene2265 chr6 ENCODE CDS 108640046 108640151 . - 1 Parent=gene2265 chr6 ENCODE exon 108642395 108642519 . - . Parent=gene2265 chr6 ENCODE CDS 108642395 108642519 . - 0 Parent=gene2265 chr6 ENCODE exon 108650847 108650942 . - . Parent=gene2265 chr6 ENCODE CDS 108650847 108650942 . - 0 Parent=gene2265 chr6 ENCODE CDS 108688723 108688818 . - 0 Parent=gene2265 chr6 ENCODE exon 108688723 108689141 . - . Parent=gene2265 ### chr6 ENCODE gene 108722791 108829951 . + . ID=gene2266;Name=RP3-479O19.1-001;name2=LACE1 chr6 ENCODE exon 108722791 108723115 . + . Parent=gene2266 chr6 ENCODE exon 108751722 108751945 . + . Parent=gene2266 chr6 ENCODE exon 108774885 108774936 . + . Parent=gene2266 chr6 ENCODE exon 108783551 108783652 . + . Parent=gene2266 chr6 ENCODE exon 108784587 108784717 . + . Parent=gene2266 chr6 ENCODE exon 108794130 108794229 . + . Parent=gene2266 chr6 ENCODE exon 108829893 108829951 . + . Parent=gene2266 ### chr6 ENCODE gene 108722888 108774887 . + . ID=gene2267;name2=LACE1;Name=RP3-479O19.1-004 chr6 ENCODE exon 108722888 108723115 . + . Parent=gene2267 chr6 ENCODE exon 108751722 108751945 . + . Parent=gene2267 chr6 ENCODE exon 108772672 108772758 . + . Parent=gene2267 chr6 ENCODE exon 108774885 108774887 . + . Parent=gene2267 ### chr6 ENCODE gene 108723098 108829951 . + . ID=gene2268;name2=LACE1;Name=RP3-479O19.1-006 chr6 ENCODE exon 108723098 108723115 . + . Parent=gene2268 chr6 ENCODE exon 108783551 108783652 . + . Parent=gene2268 chr6 ENCODE exon 108784587 108784717 . + . Parent=gene2268 chr6 ENCODE exon 108794130 108794229 . + . Parent=gene2268 chr6 ENCODE exon 108829893 108829951 . + . Parent=gene2268 ### chr6 ENCODE gene 108723650 108784648 . + . ID=gene2269;Name=RP3-479O19.1-007;name2=LACE1 chr6 ENCODE exon 108723650 108723776 . + . Parent=gene2269 chr6 ENCODE exon 108747514 108747688 . + . Parent=gene2269 chr6 ENCODE CDS 108747649 108747688 . + 0 Parent=gene2269 chr6 ENCODE exon 108751722 108751945 . + . Parent=gene2269 chr6 ENCODE CDS 108751722 108751945 . + 2 Parent=gene2269 chr6 ENCODE exon 108774885 108774936 . + . Parent=gene2269 chr6 ENCODE CDS 108774885 108774936 . + 0 Parent=gene2269 chr6 ENCODE exon 108783551 108783652 . + . Parent=gene2269 chr6 ENCODE CDS 108783551 108783652 . + 2 Parent=gene2269 chr6 ENCODE exon 108784587 108784648 . + . Parent=gene2269 chr6 ENCODE CDS 108784587 108784648 . + 2 Parent=gene2269 ### chr6 ENCODE gene 108784587 108794229 . + . ID=gene2270;Name=RP3-479O19.1-002;name2=LACE1 chr6 ENCODE exon 108784587 108784717 . + . Parent=gene2270 chr6 ENCODE exon 108794130 108794229 . + . Parent=gene2270 ### chr6 ENCODE gene 132221501 132253675 . + . ID=gene2271;Name=RP1-131F15.1-004;name2=ENPP1 chr6 ENCODE exon 132221501 132221580 . + . Parent=gene2271 chr6 ENCODE exon 132223220 132223339 . + . Parent=gene2271 chr6 ENCODE exon 132224428 132224537 . + . Parent=gene2271 chr6 ENCODE exon 132227339 132227404 . + . Parent=gene2271 chr6 ENCODE exon 132227725 132227771 . + . Parent=gene2271 chr6 ENCODE exon 132230851 132230959 . + . Parent=gene2271 chr6 ENCODE exon 132232191 132232322 . + . Parent=gene2271 chr6 ENCODE exon 132234903 132234934 . + . Parent=gene2271 chr6 ENCODE exon 132235756 132235883 . + . Parent=gene2271 chr6 ENCODE exon 132237101 132237170 . + . Parent=gene2271 chr6 ENCODE exon 132238609 132238696 . + . Parent=gene2271 chr6 ENCODE exon 132239825 132239994 . + . Parent=gene2271 chr6 ENCODE exon 132241375 132241426 . + . Parent=gene2271 chr6 ENCODE exon 132242713 132242867 . + . Parent=gene2271 chr6 ENCODE exon 132245178 132245307 . + . Parent=gene2271 chr6 ENCODE exon 132246527 132246607 . + . Parent=gene2271 chr6 ENCODE exon 132247764 132247896 . + . Parent=gene2271 chr6 ENCODE exon 132249395 132249557 . + . Parent=gene2271 chr6 ENCODE exon 132253174 132253675 . + . Parent=gene2271 ### chr6 ENCODE gene 132221501 132257988 . + . ID=gene2272;name2=ENPP1;Name=RP1-131F15.1-001 chr6 ENCODE exon 132221501 132221580 . + . Parent=gene2272 chr6 ENCODE exon 132223220 132223339 . + . Parent=gene2272 chr6 ENCODE exon 132224428 132224537 . + . Parent=gene2272 chr6 ENCODE exon 132227339 132227404 . + . Parent=gene2272 chr6 ENCODE exon 132227699 132227771 . + . Parent=gene2272 chr6 ENCODE exon 132230851 132230959 . + . Parent=gene2272 chr6 ENCODE exon 132232191 132232322 . + . Parent=gene2272 chr6 ENCODE exon 132234903 132234934 . + . Parent=gene2272 chr6 ENCODE exon 132235756 132235883 . + . Parent=gene2272 chr6 ENCODE exon 132237101 132237170 . + . Parent=gene2272 chr6 ENCODE exon 132238609 132238696 . + . Parent=gene2272 chr6 ENCODE exon 132239825 132239994 . + . Parent=gene2272 chr6 ENCODE exon 132241375 132241426 . + . Parent=gene2272 chr6 ENCODE exon 132242713 132242867 . + . Parent=gene2272 chr6 ENCODE exon 132245178 132245307 . + . Parent=gene2272 chr6 ENCODE exon 132246527 132246607 . + . Parent=gene2272 chr6 ENCODE exon 132247764 132247896 . + . Parent=gene2272 chr6 ENCODE exon 132249395 132249557 . + . Parent=gene2272 chr6 ENCODE exon 132253174 132257988 . + . Parent=gene2272 ### chr6 ENCODE gene 132224443 132240690 . + . ID=gene2273;name2=ENPP1;Name=RP1-131F15.1-002 chr6 ENCODE exon 132224443 132224537 . + . Parent=gene2273 chr6 ENCODE exon 132227339 132227404 . + . Parent=gene2273 chr6 ENCODE exon 132227725 132227771 . + . Parent=gene2273 chr6 ENCODE exon 132230851 132230959 . + . Parent=gene2273 chr6 ENCODE exon 132232191 132232322 . + . Parent=gene2273 chr6 ENCODE exon 132234903 132234934 . + . Parent=gene2273 chr6 ENCODE exon 132235756 132235883 . + . Parent=gene2273 chr6 ENCODE exon 132237101 132237170 . + . Parent=gene2273 chr6 ENCODE exon 132238609 132238696 . + . Parent=gene2273 chr6 ENCODE exon 132239825 132240690 . + . Parent=gene2273 ### chr6 ENCODE gene 132311009 132314206 . - . ID=gene2274;Name=RP11-69I8.1-001;name2=CTGF chr6 ENCODE exon 132311009 132312393 . - . Parent=gene2274 chr6 ENCODE CDS 132312097 132312393 . - 0 Parent=gene2274 chr6 ENCODE exon 132312782 132312993 . - . Parent=gene2274 chr6 ENCODE CDS 132312782 132312993 . - 2 Parent=gene2274 chr6 ENCODE exon 132313125 132313376 . - . Parent=gene2274 chr6 ENCODE CDS 132313125 132313376 . - 2 Parent=gene2274 chr6 ENCODE exon 132313603 132313825 . - . Parent=gene2274 chr6 ENCODE CDS 132313603 132313825 . - 0 Parent=gene2274 chr6 ENCODE CDS 132313940 132314005 . - 0 Parent=gene2274 chr6 ENCODE exon 132313940 132314206 . - . Parent=gene2274 ### chr6 ENCODE gene 132311012 132314205 . - . ID=gene2275;Name=RP11-69I8.1-003;name2=CTGF chr6 ENCODE exon 132311012 132312390 . - . Parent=gene2275 chr6 ENCODE exon 132312782 132312993 . - . Parent=gene2275 chr6 ENCODE exon 132313125 132313376 . - . Parent=gene2275 chr6 ENCODE exon 132313603 132313726 . - . Parent=gene2275 chr6 ENCODE exon 132314050 132314205 . - . Parent=gene2275 ### chr6 ENCODE gene 132311014 132314206 . - . ID=gene2276;Name=RP11-69I8.1-002;name2=CTGF chr6 ENCODE exon 132311014 132312393 . - . Parent=gene2276 chr6 ENCODE exon 132312782 132312993 . - . Parent=gene2276 chr6 ENCODE exon 132313125 132313376 . - . Parent=gene2276 chr6 ENCODE exon 132313603 132313717 . - . Parent=gene2276 chr6 ENCODE exon 132313976 132314206 . - . Parent=gene2276 ### chr6 ENCODE gene 132312060 132314203 . - . ID=gene2277;name2=CTGF;Name=RP11-69I8.1-005 chr6 ENCODE exon 132312060 132312393 . - . Parent=gene2277 chr6 ENCODE exon 132312782 132312993 . - . Parent=gene2277 chr6 ENCODE exon 132313125 132313224 . - . Parent=gene2277 chr6 ENCODE exon 132314001 132314203 . - . Parent=gene2277 ### chr6 ENCODE gene 132312319 132314205 . - . ID=gene2278;Name=RP11-69I8.1-004;name2=CTGF chr6 ENCODE exon 132312319 132312393 . - . Parent=gene2278 chr6 ENCODE exon 132312782 132312993 . - . Parent=gene2278 chr6 ENCODE exon 132313125 132313376 . - . Parent=gene2278 chr6 ENCODE exon 132313603 132313675 . - . Parent=gene2278 chr6 ENCODE exon 132314163 132314205 . - . Parent=gene2278 ### chr6 ENCODE gene 132658887 132691426 . - . ID=gene2279;Name=RP1-248E1.1-002;name2=MOXD1 chr6 ENCODE exon 132658887 132660149 . - . Parent=gene2279 chr6 ENCODE exon 132660619 132660787 . - . Parent=gene2279 chr6 ENCODE exon 132678467 132678609 . - . Parent=gene2279 chr6 ENCODE exon 132683461 132683520 . - . Parent=gene2279 chr6 ENCODE exon 132685511 132685702 . - . Parent=gene2279 chr6 ENCODE exon 132686763 132686929 . - . Parent=gene2279 chr6 ENCODE exon 132690845 132690947 . - . Parent=gene2279 chr6 ENCODE exon 132691247 132691426 . - . Parent=gene2279 ### chr6 ENCODE gene 132658901 132691426 . - . ID=gene2280;Name=RP1-248E1.1-001;name2=MOXD1 chr6 ENCODE exon 132658901 132660149 . - . Parent=gene2280 chr6 ENCODE exon 132660619 132660787 . - . Parent=gene2280 chr6 ENCODE exon 132678467 132678609 . - . Parent=gene2280 chr6 ENCODE exon 132683461 132683520 . - . Parent=gene2280 chr6 ENCODE exon 132685511 132685702 . - . Parent=gene2280 chr6 ENCODE exon 132686763 132686929 . - . Parent=gene2280 chr6 ENCODE exon 132690845 132690947 . - . Parent=gene2280 chr6 ENCODE exon 132691247 132691426 . - . Parent=gene2280 ### chr6 ENCODE gene 132659751 132685609 . - . ID=gene2281;Name=RP1-248E1.1-003;name2=MOXD1 chr6 ENCODE exon 132659751 132660149 . - . Parent=gene2281 chr6 ENCODE exon 132660619 132660641 . - . Parent=gene2281 chr6 ENCODE exon 132685511 132685609 . - . Parent=gene2281 ### chr6 ENCODE gene 132678529 132687979 . - . ID=gene2282;Name=RP1-248E1.1-004;name2=MOXD1 chr6 ENCODE exon 132678529 132678609 . - . Parent=gene2282 chr6 ENCODE exon 132683461 132683520 . - . Parent=gene2282 chr6 ENCODE exon 132685511 132685702 . - . Parent=gene2282 chr6 ENCODE exon 132686763 132686929 . - . Parent=gene2282 chr6 ENCODE exon 132687912 132687979 . - . Parent=gene2282 ### chr7 ENCODE gene 26905852 26908833 . - . ID=gene2283;Name=AC004079.5-001;name2=HOXA1 chr7 ENCODE exon 26905852 26907654 . - . Parent=gene2283 chr7 ENCODE CDS 26907299 26907654 . - 2 Parent=gene2283 chr7 ENCODE CDS 26908120 26908771 . - 0 Parent=gene2283 chr7 ENCODE exon 26908120 26908833 . - . Parent=gene2283 ### chr7 ENCODE gene 26906162 26908833 . - . ID=gene2284;Name=AC004079.5-002;name2=HOXA1 chr7 ENCODE exon 26906162 26907654 . - . Parent=gene2284 chr7 ENCODE exon 26908120 26908214 . - . Parent=gene2284 chr7 ENCODE CDS 26908155 26908214 . - 0 Parent=gene2284 chr7 ENCODE CDS 26908418 26908771 . - 0 Parent=gene2284 chr7 ENCODE exon 26908418 26908833 . - . Parent=gene2284 ### chr7 ENCODE gene 26913216 26915545 . - . ID=gene2285;Name=AC004079.1-001;name2=HOXA2 chr7 ENCODE exon 26913216 26914324 . - . Parent=gene2285 chr7 ENCODE CDS 26913585 26914324 . - 2 Parent=gene2285 chr7 ENCODE CDS 26914969 26915359 . - 0 Parent=gene2285 chr7 ENCODE exon 26914969 26915545 . - . Parent=gene2285 ### chr7 ENCODE gene 26919043 26932454 . - . ID=gene2286;Name=AC004079.3-003;name2=HOXA3 chr7 ENCODE exon 26919043 26921579 . - . Parent=gene2286 chr7 ENCODE CDS 26920774 26921579 . - 2 Parent=gene2286 chr7 ENCODE CDS 26922974 26923499 . - 0 Parent=gene2286 chr7 ENCODE exon 26922974 26923619 . - . Parent=gene2286 chr7 ENCODE exon 26932375 26932454 . - . Parent=gene2286 ### chr7 ENCODE gene 26919871 26926856 . - . ID=gene2287;Name=AC004079.3-002;name2=HOXA3 chr7 ENCODE exon 26919871 26921579 . - . Parent=gene2287 chr7 ENCODE exon 26922974 26923135 . - . Parent=gene2287 chr7 ENCODE exon 26926777 26926856 . - . Parent=gene2287 ### chr7 ENCODE gene 26919871 26939879 . - . ID=gene2288;Name=AC004079.3-001;name2=HOXA3 chr7 ENCODE exon 26919871 26921579 . - . Parent=gene2288 chr7 ENCODE CDS 26920774 26921579 . - 2 Parent=gene2288 chr7 ENCODE CDS 26922974 26923499 . - 0 Parent=gene2288 chr7 ENCODE exon 26922974 26923619 . - . Parent=gene2288 chr7 ENCODE exon 26935418 26935501 . - . Parent=gene2288 chr7 ENCODE exon 26939745 26939879 . - . Parent=gene2288 ### chr7 ENCODE gene 26923247 26953065 . - . ID=gene2289;Name=AC004079.3-005;name2=HOXA3 chr7 ENCODE CDS 26923247 26923499 . - 0 Parent=gene2289 chr7 ENCODE exon 26923247 26923619 . - . Parent=gene2289 chr7 ENCODE exon 26935418 26935501 . - . Parent=gene2289 chr7 ENCODE exon 26952942 26953065 . - . Parent=gene2289 ### chr7 ENCODE gene 26923338 26926704 . - . ID=gene2290;Name=AC004079.3-006;name2=HOXA3 chr7 ENCODE CDS 26923338 26923499 . - 0 Parent=gene2290 chr7 ENCODE exon 26923338 26923619 . - . Parent=gene2290 chr7 ENCODE exon 26926484 26926704 . - . Parent=gene2290 ### chr7 ENCODE gene 26923550 26953067 . - . ID=gene2291;Name=AC004079.3-004;name2=HOXA3 chr7 ENCODE exon 26923550 26923619 . - . Parent=gene2291 chr7 ENCODE exon 26935418 26935501 . - . Parent=gene2291 chr7 ENCODE exon 26937293 26937408 . - . Parent=gene2291 chr7 ENCODE exon 26939745 26939929 . - . Parent=gene2291 chr7 ENCODE exon 26952942 26953067 . - . Parent=gene2291 ### chr7 ENCODE gene 26941366 26943658 . - . ID=gene2292;name2=HOXA4;Name=AC004080.5-001 chr7 ENCODE exon 26941366 26942430 . - . Parent=gene2292 chr7 ENCODE CDS 26942084 26942430 . - 2 Parent=gene2292 chr7 ENCODE CDS 26942977 26943592 . - 0 Parent=gene2292 chr7 ENCODE exon 26942977 26943658 . - . Parent=gene2292 ### chr7 ENCODE gene 26953911 26956703 . - . ID=gene2293;Name=AC004080.7-001;name2=HOXA5 chr7 ENCODE exon 26953911 26954944 . - . Parent=gene2293 chr7 ENCODE CDS 26954694 26954944 . - 2 Parent=gene2293 chr7 ENCODE CDS 26955905 26956466 . - 0 Parent=gene2293 chr7 ENCODE exon 26955905 26956703 . - . Parent=gene2293 ### chr7 ENCODE gene 26954666 26955634 . - . ID=gene2294;Name=AC004080.7-002;name2=HOXA5 chr7 ENCODE exon 26954666 26954944 . - . Parent=gene2294 chr7 ENCODE exon 26955585 26955634 . - . Parent=gene2294 ### chr7 ENCODE gene 26958255 26960717 . - . ID=gene2295;Name=AC004080.2-003;name2=HOXA6 chr7 ENCODE exon 26958255 26958776 . - . Parent=gene2295 chr7 ENCODE CDS 26958517 26958776 . - 2 Parent=gene2295 chr7 ENCODE CDS 26960167 26960608 . - 0 Parent=gene2295 chr7 ENCODE exon 26960167 26960717 . - . Parent=gene2295 ### chr7 ENCODE gene 26958255 26963462 . - . ID=gene2296;Name=AC004080.2-001;name2=HOXA6 chr7 ENCODE exon 26958255 26958776 . - . Parent=gene2296 chr7 ENCODE exon 26960167 26960428 . - . Parent=gene2296 chr7 ENCODE exon 26963167 26963462 . - . Parent=gene2296 ### chr7 ENCODE gene 26960179 26963836 . - . ID=gene2297;Name=AC004080.2-002;name2=HOXA6 chr7 ENCODE exon 26960179 26960281 . - . Parent=gene2297 chr7 ENCODE exon 26963167 26963836 . - . Parent=gene2297 ### chr7 ENCODE gene 26960225 26965457 . - . ID=gene2298;Name=AC004080.2-004;name2=HOXA6 chr7 ENCODE exon 26960225 26960281 . - . Parent=gene2298 chr7 ENCODE exon 26965147 26965457 . - . Parent=gene2298 ### chr7 ENCODE gene 26966575 26970795 . - . ID=gene2299;Name=AC004080.3-002;name2=HOXA7 chr7 ENCODE exon 26966575 26968081 . - . Parent=gene2299 chr7 ENCODE CDS 26967768 26968081 . - 2 Parent=gene2299 chr7 ENCODE CDS 26969026 26969404 . - 0 Parent=gene2299 chr7 ENCODE exon 26969026 26969613 . - . Parent=gene2299 chr7 ENCODE exon 26969977 26970147 . - . Parent=gene2299 chr7 ENCODE exon 26970683 26970795 . - . Parent=gene2299 ### chr7 ENCODE gene 26967642 26968863 . - . ID=gene2300;Name=AC004080.3-001;name2=HOXA7 chr7 ENCODE exon 26967642 26968081 . - . Parent=gene2300 chr7 ENCODE exon 26968826 26968863 . - . Parent=gene2300 ### chr7 ENCODE gene 26975297 26978369 . - . ID=gene2301;Name=AC004080.4-001;name2=HOXA9 chr7 ENCODE exon 26975297 26976700 . - . Parent=gene2301 chr7 ENCODE CDS 26976462 26976700 . - 2 Parent=gene2301 chr7 ENCODE CDS 26977737 26978316 . - 0 Parent=gene2301 chr7 ENCODE exon 26977737 26978369 . - . Parent=gene2301 ### chr7 ENCODE gene 26975459 26982303 . - . ID=gene2302;Name=AC004080.4-002;name2=HOXA9 chr7 ENCODE exon 26975459 26976700 . - . Parent=gene2302 chr7 ENCODE exon 26982153 26982303 . - . Parent=gene2302 ### chr7 ENCODE gene 26976166 26983357 . - . ID=gene2303;Name=AC004080.4-004;name2=HOXA9 chr7 ENCODE exon 26976166 26976700 . - . Parent=gene2303 chr7 ENCODE exon 26977737 26977826 . - . Parent=gene2303 chr7 ENCODE exon 26983290 26983357 . - . Parent=gene2303 ### chr7 ENCODE gene 26976380 26978385 . - . ID=gene2304;Name=AC004080.4-005;name2=HOXA9 chr7 ENCODE exon 26976380 26976700 . - . Parent=gene2304 chr7 ENCODE exon 26977737 26977826 . - . Parent=gene2304 chr7 ENCODE CDS 26977823 26977826 . - 1 Parent=gene2304 chr7 ENCODE CDS 26978000 26978316 . - 0 Parent=gene2304 chr7 ENCODE exon 26978000 26978385 . - . Parent=gene2304 ### chr7 ENCODE gene 26976523 26988039 . - . ID=gene2305;Name=AC004080.4-006;name2=HOXA9 chr7 ENCODE exon 26976523 26976700 . - . Parent=gene2305 chr7 ENCODE exon 26987561 26988039 . - . Parent=gene2305 ### chr7 ENCODE gene 26976541 26982596 . - . ID=gene2306;Name=AC004080.4-003;name2=HOXA9 chr7 ENCODE exon 26976541 26976700 . - . Parent=gene2306 chr7 ENCODE exon 26977737 26977826 . - . Parent=gene2306 chr7 ENCODE exon 26982326 26982596 . - . Parent=gene2306 ### chr7 ENCODE gene 26983450 26987163 . - . ID=gene2307;Name=AC004080.9-001;name2=HOXA10 chr7 ENCODE exon 26983450 26985032 . - . Parent=gene2307 chr7 ENCODE CDS 26984758 26985032 . - 2 Parent=gene2307 chr7 ENCODE CDS 26986208 26987114 . - 0 Parent=gene2307 chr7 ENCODE exon 26986208 26987163 . - . Parent=gene2307 ### chr7 ENCODE gene 26984092 26987154 . - . ID=gene2308;name2=HOXA10;Name=AC004080.9-002 chr7 ENCODE exon 26984092 26985032 . - . Parent=gene2308 chr7 ENCODE exon 26986208 26986473 . - . Parent=gene2308 chr7 ENCODE exon 26986788 26987154 . - . Parent=gene2308 ### chr7 ENCODE gene 26984092 26993120 . - . ID=gene2309;Name=AC004080.9-003;name2=HOXA10 chr7 ENCODE exon 26984092 26985032 . - . Parent=gene2309 chr7 ENCODE CDS 26984758 26985032 . - 2 Parent=gene2309 chr7 ENCODE CDS 26992505 26992514 . - 0 Parent=gene2309 chr7 ENCODE exon 26992505 26993120 . - . Parent=gene2309 ### chr7 ENCODE gene 26984237 26985822 . - . ID=gene2310;Name=AC004080.9-006;name2=HOXA10 chr7 ENCODE exon 26984237 26985032 . - . Parent=gene2310 chr7 ENCODE exon 26985677 26985822 . - . Parent=gene2310 ### chr7 ENCODE gene 26984322 26985748 . - . ID=gene2311;name2=HOXA10;Name=AC004080.9-005 chr7 ENCODE exon 26984322 26985032 . - . Parent=gene2311 chr7 ENCODE exon 26985273 26985748 . - . Parent=gene2311 ### chr7 ENCODE gene 26984636 26985748 . - . ID=gene2312;Name=AC004080.9-004;name2=HOXA10 chr7 ENCODE exon 26984636 26985032 . - . Parent=gene2312 chr7 ENCODE exon 26985423 26985748 . - . Parent=gene2312 ### chr7 ENCODE gene 26994016 26998075 . - . ID=gene2313;Name=AC004080.6-001;name2=HOXA11 chr7 ENCODE exon 26994016 26995887 . - . Parent=gene2313 chr7 ENCODE CDS 26995655 26995887 . - 2 Parent=gene2313 chr7 ENCODE CDS 26997295 26998003 . - 0 Parent=gene2313 chr7 ENCODE exon 26997295 26998075 . - . Parent=gene2313 ### chr7 ENCODE gene 26994369 26998082 . - . ID=gene2314;Name=AC004080.6-002;name2=HOXA11 chr7 ENCODE exon 26994369 26995887 . - . Parent=gene2314 chr7 ENCODE exon 26997295 26997844 . - . Parent=gene2314 chr7 ENCODE exon 26998015 26998082 . - . Parent=gene2314 ### chr7 ENCODE gene 27008262 27012965 . - . ID=gene2315;Name=AC004080.10-001;name2=HOXA13 chr7 ENCODE exon 27008262 27011301 . - . Parent=gene2315 chr7 ENCODE CDS 27011057 27011301 . - 2 Parent=gene2315 chr7 ENCODE CDS 27012015 27012936 . - 0 Parent=gene2315 chr7 ENCODE exon 27012015 27012965 . - . Parent=gene2315 ### chr7 ENCODE gene 27055524 27060691 . + . ID=gene2316;Name=AC004080.8-001;name2=EVX1 chr7 ENCODE exon 27055524 27056316 . + . Parent=gene2316 chr7 ENCODE CDS 27055890 27056316 . + 0 Parent=gene2316 chr7 ENCODE exon 27057907 27058163 . + . Parent=gene2316 chr7 ENCODE CDS 27057907 27058163 . + 2 Parent=gene2316 chr7 ENCODE CDS 27058745 27059284 . + 0 Parent=gene2316 chr7 ENCODE exon 27058745 27060691 . + . Parent=gene2316 ### chr7 ENCODE gene 89428340 89438792 . + . ID=gene2317;Name=AC004969.1-001;name2=STEAP1 chr7 ENCODE exon 89428340 89428508 . + . Parent=gene2317 chr7 ENCODE exon 89433723 89433837 . + . Parent=gene2317 chr7 ENCODE CDS 89433754 89433837 . + 0 Parent=gene2317 chr7 ENCODE exon 89434770 89435282 . + . Parent=gene2317 chr7 ENCODE CDS 89434770 89435282 . + 0 Parent=gene2317 chr7 ENCODE exon 89435879 89436043 . + . Parent=gene2317 chr7 ENCODE CDS 89435879 89436043 . + 0 Parent=gene2317 chr7 ENCODE CDS 89438442 89438699 . + 0 Parent=gene2317 chr7 ENCODE exon 89438442 89438792 . + . Parent=gene2317 ### chr7 ENCODE gene 89435231 89438794 . + . ID=gene2318;Name=AC004969.1-002;name2=STEAP1 chr7 ENCODE exon 89435231 89435282 . + . Parent=gene2318 chr7 ENCODE exon 89435879 89436043 . + . Parent=gene2318 chr7 ENCODE exon 89436939 89437075 . + . Parent=gene2318 chr7 ENCODE exon 89438442 89438794 . + . Parent=gene2318 ### chr7 ENCODE gene 89441555 89500988 . + . ID=gene2319;Name=AC002064.1-009;name2=STEAP2 chr7 ENCODE exon 89441555 89441878 . + . Parent=gene2319 chr7 ENCODE CDS 89441786 89441878 . + 0 Parent=gene2319 chr7 ENCODE exon 89499015 89499539 . + . Parent=gene2319 chr7 ENCODE CDS 89499015 89499539 . + 0 Parent=gene2319 chr7 ENCODE exon 89500936 89500988 . + . Parent=gene2319 chr7 ENCODE CDS 89500936 89500988 . + 0 Parent=gene2319 ### chr7 ENCODE gene 89483235 89485600 . - . ID=gene2320;Name=AC002064.3-001;name2=AC002064.3 chr7 ENCODE exon 89483235 89483903 . - . Parent=gene2320 chr7 ENCODE CDS 89483815 89483903 . - 2 Parent=gene2320 chr7 ENCODE CDS 89485265 89485400 . - 0 Parent=gene2320 chr7 ENCODE exon 89485265 89485600 . - . Parent=gene2320 ### chr7 ENCODE gene 89485651 89511596 . + . ID=gene2321;Name=AC002064.1-001;name2=STEAP2 chr7 ENCODE exon 89485651 89486010 . + . Parent=gene2321 chr7 ENCODE exon 89499015 89499539 . + . Parent=gene2321 chr7 ENCODE CDS 89499048 89499539 . + 0 Parent=gene2321 chr7 ENCODE exon 89500936 89501463 . + . Parent=gene2321 chr7 ENCODE CDS 89500936 89501463 . + 0 Parent=gene2321 chr7 ENCODE exon 89503837 89504001 . + . Parent=gene2321 chr7 ENCODE CDS 89503837 89504001 . + 0 Parent=gene2321 chr7 ENCODE CDS 89506302 89506589 . + 0 Parent=gene2321 chr7 ENCODE exon 89506302 89511596 . + . Parent=gene2321 ### chr7 ENCODE gene 89485709 89511643 . + . ID=gene2322;Name=AC002064.1-002;name2=STEAP2 chr7 ENCODE exon 89485709 89486010 . + . Parent=gene2322 chr7 ENCODE exon 89499015 89499539 . + . Parent=gene2322 chr7 ENCODE CDS 89499048 89499539 . + 0 Parent=gene2322 chr7 ENCODE exon 89500936 89501463 . + . Parent=gene2322 chr7 ENCODE CDS 89500936 89501463 . + 0 Parent=gene2322 chr7 ENCODE exon 89503837 89504001 . + . Parent=gene2322 chr7 ENCODE CDS 89503837 89504001 . + 0 Parent=gene2322 chr7 ENCODE exon 89506302 89506449 . + . Parent=gene2322 chr7 ENCODE CDS 89506302 89506449 . + 0 Parent=gene2322 chr7 ENCODE CDS 89510856 89510887 . + 2 Parent=gene2322 chr7 ENCODE exon 89510856 89511643 . + . Parent=gene2322 ### chr7 ENCODE gene 89485825 89511559 . + . ID=gene2323;Name=AC002064.1-004;name2=STEAP2 chr7 ENCODE exon 89485825 89485899 . + . Parent=gene2323 chr7 ENCODE exon 89486241 89486301 . + . Parent=gene2323 chr7 ENCODE exon 89499015 89499539 . + . Parent=gene2323 chr7 ENCODE CDS 89499048 89499539 . + 0 Parent=gene2323 chr7 ENCODE exon 89500936 89501463 . + . Parent=gene2323 chr7 ENCODE CDS 89500936 89501463 . + 0 Parent=gene2323 chr7 ENCODE exon 89503837 89504001 . + . Parent=gene2323 chr7 ENCODE CDS 89503837 89504001 . + 0 Parent=gene2323 chr7 ENCODE CDS 89506302 89506589 . + 0 Parent=gene2323 chr7 ENCODE exon 89506302 89511559 . + . Parent=gene2323 ### chr7 ENCODE gene 89485825 89511573 . + . ID=gene2324;Name=AC002064.1-003;name2=STEAP2 chr7 ENCODE exon 89485825 89485899 . + . Parent=gene2324 chr7 ENCODE exon 89486241 89486301 . + . Parent=gene2324 chr7 ENCODE exon 89499015 89499539 . + . Parent=gene2324 chr7 ENCODE CDS 89499048 89499539 . + 0 Parent=gene2324 chr7 ENCODE exon 89500936 89501463 . + . Parent=gene2324 chr7 ENCODE CDS 89500936 89501463 . + 0 Parent=gene2324 chr7 ENCODE exon 89503837 89504001 . + . Parent=gene2324 chr7 ENCODE CDS 89503837 89504001 . + 0 Parent=gene2324 chr7 ENCODE CDS 89510856 89510930 . + 0 Parent=gene2324 chr7 ENCODE exon 89510856 89511573 . + . Parent=gene2324 ### chr7 ENCODE gene 89485825 89511573 . + . ID=gene2325;Name=AC002064.1-005;name2=STEAP2 chr7 ENCODE exon 89485825 89485899 . + . Parent=gene2325 chr7 ENCODE exon 89486241 89486316 . + . Parent=gene2325 chr7 ENCODE exon 89499015 89499539 . + . Parent=gene2325 chr7 ENCODE CDS 89499048 89499539 . + 0 Parent=gene2325 chr7 ENCODE exon 89500936 89501463 . + . Parent=gene2325 chr7 ENCODE CDS 89500936 89501463 . + 0 Parent=gene2325 chr7 ENCODE exon 89503837 89504001 . + . Parent=gene2325 chr7 ENCODE CDS 89503837 89504001 . + 0 Parent=gene2325 chr7 ENCODE exon 89506302 89506449 . + . Parent=gene2325 chr7 ENCODE CDS 89506302 89506449 . + 0 Parent=gene2325 chr7 ENCODE CDS 89510856 89510887 . + 2 Parent=gene2325 chr7 ENCODE exon 89510856 89511573 . + . Parent=gene2325 ### chr7 ENCODE gene 89485838 89499311 . + . ID=gene2326;Name=AC002064.1-007;name2=STEAP2 chr7 ENCODE exon 89485838 89486010 . + . Parent=gene2326 chr7 ENCODE exon 89490460 89490568 . + . Parent=gene2326 chr7 ENCODE exon 89499015 89499311 . + . Parent=gene2326 chr7 ENCODE CDS 89499048 89499311 . + 0 Parent=gene2326 ### chr7 ENCODE gene 89487785 89511596 . + . ID=gene2327;Name=AC002064.1-006;name2=STEAP2 chr7 ENCODE exon 89487785 89487825 . + . Parent=gene2327 chr7 ENCODE exon 89490456 89490568 . + . Parent=gene2327 chr7 ENCODE exon 89499015 89499539 . + . Parent=gene2327 chr7 ENCODE CDS 89499048 89499539 . + 0 Parent=gene2327 chr7 ENCODE exon 89500936 89501463 . + . Parent=gene2327 chr7 ENCODE CDS 89500936 89501463 . + 0 Parent=gene2327 chr7 ENCODE exon 89503837 89504001 . + . Parent=gene2327 chr7 ENCODE CDS 89503837 89504001 . + 0 Parent=gene2327 chr7 ENCODE exon 89506302 89506449 . + . Parent=gene2327 chr7 ENCODE CDS 89506302 89506449 . + 0 Parent=gene2327 chr7 ENCODE CDS 89510856 89510887 . + 2 Parent=gene2327 chr7 ENCODE exon 89510856 89511596 . + . Parent=gene2327 ### chr7 ENCODE gene 89489239 89500998 . + . ID=gene2328;Name=AC002064.1-008;name2=STEAP2 chr7 ENCODE exon 89489239 89490568 . + . Parent=gene2328 chr7 ENCODE exon 89499015 89499539 . + . Parent=gene2328 chr7 ENCODE exon 89500936 89500998 . + . Parent=gene2328 ### chr7 ENCODE gene 89519150 89585028 . + . ID=gene2329;Name=AC002064.2-001;name2=AC002064.2 chr7 ENCODE exon 89519150 89519509 . + . Parent=gene2329 chr7 ENCODE CDS 89519390 89519509 . + 0 Parent=gene2329 chr7 ENCODE exon 89529388 89529447 . + . Parent=gene2329 chr7 ENCODE CDS 89529388 89529447 . + 0 Parent=gene2329 chr7 ENCODE exon 89532063 89532128 . + . Parent=gene2329 chr7 ENCODE CDS 89532063 89532128 . + 0 Parent=gene2329 chr7 ENCODE exon 89535912 89536021 . + . Parent=gene2329 chr7 ENCODE CDS 89535912 89536021 . + 0 Parent=gene2329 chr7 ENCODE exon 89539266 89539342 . + . Parent=gene2329 chr7 ENCODE CDS 89539266 89539342 . + 1 Parent=gene2329 chr7 ENCODE exon 89542251 89542349 . + . Parent=gene2329 chr7 ENCODE CDS 89542251 89542349 . + 2 Parent=gene2329 chr7 ENCODE exon 89545491 89545640 . + . Parent=gene2329 chr7 ENCODE CDS 89545491 89545640 . + 2 Parent=gene2329 chr7 ENCODE exon 89545746 89545923 . + . Parent=gene2329 chr7 ENCODE CDS 89545746 89545923 . + 2 Parent=gene2329 chr7 ENCODE exon 89547952 89548075 . + . Parent=gene2329 chr7 ENCODE CDS 89547952 89548075 . + 1 Parent=gene2329 chr7 ENCODE exon 89551038 89551086 . + . Parent=gene2329 chr7 ENCODE CDS 89551038 89551086 . + 0 Parent=gene2329 chr7 ENCODE exon 89551178 89551299 . + . Parent=gene2329 chr7 ENCODE CDS 89551178 89551299 . + 2 Parent=gene2329 chr7 ENCODE exon 89553642 89553858 . + . Parent=gene2329 chr7 ENCODE CDS 89553642 89553858 . + 0 Parent=gene2329 chr7 ENCODE exon 89556857 89557021 . + . Parent=gene2329 chr7 ENCODE CDS 89556857 89557021 . + 2 Parent=gene2329 chr7 ENCODE exon 89560246 89560364 . + . Parent=gene2329 chr7 ENCODE CDS 89560246 89560364 . + 2 Parent=gene2329 chr7 ENCODE exon 89562199 89562317 . + . Parent=gene2329 chr7 ENCODE CDS 89562199 89562317 . + 0 Parent=gene2329 chr7 ENCODE exon 89571714 89571795 . + . Parent=gene2329 chr7 ENCODE CDS 89571714 89571795 . + 1 Parent=gene2329 chr7 ENCODE exon 89573832 89574024 . + . Parent=gene2329 chr7 ENCODE CDS 89573832 89574024 . + 0 Parent=gene2329 chr7 ENCODE exon 89577934 89578071 . + . Parent=gene2329 chr7 ENCODE CDS 89577934 89578071 . + 2 Parent=gene2329 chr7 ENCODE exon 89578709 89578785 . + . Parent=gene2329 chr7 ENCODE CDS 89578709 89578785 . + 2 Parent=gene2329 chr7 ENCODE exon 89580866 89581063 . + . Parent=gene2329 chr7 ENCODE CDS 89580866 89581063 . + 0 Parent=gene2329 chr7 ENCODE exon 89581733 89581819 . + . Parent=gene2329 chr7 ENCODE CDS 89581733 89581819 . + 0 Parent=gene2329 chr7 ENCODE exon 89583228 89583332 . + . Parent=gene2329 chr7 ENCODE CDS 89583228 89583332 . + 0 Parent=gene2329 chr7 ENCODE CDS 89584033 89584203 . + 0 Parent=gene2329 chr7 ENCODE exon 89584033 89585028 . + . Parent=gene2329 ### chr7 ENCODE gene 89519160 89580870 . + . ID=gene2330;Name=AC002064.2-004;name2=AC002064.2 chr7 ENCODE exon 89519160 89519509 . + . Parent=gene2330 chr7 ENCODE exon 89529388 89529447 . + . Parent=gene2330 chr7 ENCODE exon 89532063 89532128 . + . Parent=gene2330 chr7 ENCODE exon 89535912 89536021 . + . Parent=gene2330 chr7 ENCODE exon 89542251 89542349 . + . Parent=gene2330 chr7 ENCODE exon 89545491 89545640 . + . Parent=gene2330 chr7 ENCODE exon 89545746 89545923 . + . Parent=gene2330 chr7 ENCODE exon 89551038 89551086 . + . Parent=gene2330 chr7 ENCODE exon 89551178 89551299 . + . Parent=gene2330 chr7 ENCODE exon 89553642 89553858 . + . Parent=gene2330 chr7 ENCODE exon 89556857 89557021 . + . Parent=gene2330 chr7 ENCODE exon 89560246 89560364 . + . Parent=gene2330 chr7 ENCODE exon 89562199 89562317 . + . Parent=gene2330 chr7 ENCODE exon 89571714 89571795 . + . Parent=gene2330 chr7 ENCODE exon 89573832 89574024 . + . Parent=gene2330 chr7 ENCODE exon 89577934 89578071 . + . Parent=gene2330 chr7 ENCODE exon 89578709 89578785 . + . Parent=gene2330 chr7 ENCODE exon 89580866 89580870 . + . Parent=gene2330 ### chr7 ENCODE gene 89519176 89578718 . + . ID=gene2331;Name=AC002064.2-002;name2=AC002064.2 chr7 ENCODE exon 89519176 89519509 . + . Parent=gene2331 chr7 ENCODE exon 89529388 89529447 . + . Parent=gene2331 chr7 ENCODE exon 89532063 89532128 . + . Parent=gene2331 chr7 ENCODE exon 89535912 89536021 . + . Parent=gene2331 chr7 ENCODE exon 89539266 89539342 . + . Parent=gene2331 chr7 ENCODE exon 89542251 89542349 . + . Parent=gene2331 chr7 ENCODE exon 89545491 89545640 . + . Parent=gene2331 chr7 ENCODE exon 89547952 89548075 . + . Parent=gene2331 chr7 ENCODE exon 89549986 89550117 . + . Parent=gene2331 chr7 ENCODE exon 89551038 89551086 . + . Parent=gene2331 chr7 ENCODE exon 89551178 89551299 . + . Parent=gene2331 chr7 ENCODE exon 89553642 89553858 . + . Parent=gene2331 chr7 ENCODE exon 89556857 89557021 . + . Parent=gene2331 chr7 ENCODE exon 89560246 89560364 . + . Parent=gene2331 chr7 ENCODE exon 89561467 89561714 . + . Parent=gene2331 chr7 ENCODE exon 89562199 89562317 . + . Parent=gene2331 chr7 ENCODE exon 89571714 89571795 . + . Parent=gene2331 chr7 ENCODE exon 89573832 89574024 . + . Parent=gene2331 chr7 ENCODE exon 89577934 89578071 . + . Parent=gene2331 chr7 ENCODE exon 89578709 89578718 . + . Parent=gene2331 ### chr7 ENCODE gene 89519181 89573969 . + . ID=gene2332;Name=AC002064.2-005;name2=AC002064.2 chr7 ENCODE exon 89519181 89519509 . + . Parent=gene2332 chr7 ENCODE CDS 89519390 89519509 . + 0 Parent=gene2332 chr7 ENCODE exon 89529388 89529447 . + . Parent=gene2332 chr7 ENCODE CDS 89529388 89529447 . + 0 Parent=gene2332 chr7 ENCODE exon 89532063 89532128 . + . Parent=gene2332 chr7 ENCODE CDS 89532063 89532128 . + 0 Parent=gene2332 chr7 ENCODE exon 89535912 89536021 . + . Parent=gene2332 chr7 ENCODE CDS 89535912 89536021 . + 0 Parent=gene2332 chr7 ENCODE exon 89539266 89539342 . + . Parent=gene2332 chr7 ENCODE CDS 89539266 89539342 . + 1 Parent=gene2332 chr7 ENCODE exon 89542251 89542349 . + . Parent=gene2332 chr7 ENCODE CDS 89542251 89542349 . + 2 Parent=gene2332 chr7 ENCODE exon 89545491 89545640 . + . Parent=gene2332 chr7 ENCODE CDS 89545491 89545640 . + 2 Parent=gene2332 chr7 ENCODE exon 89545746 89545923 . + . Parent=gene2332 chr7 ENCODE CDS 89545746 89545923 . + 2 Parent=gene2332 chr7 ENCODE exon 89547952 89548075 . + . Parent=gene2332 chr7 ENCODE CDS 89547952 89548075 . + 1 Parent=gene2332 chr7 ENCODE exon 89553642 89553858 . + . Parent=gene2332 chr7 ENCODE CDS 89553642 89553858 . + 0 Parent=gene2332 chr7 ENCODE exon 89556857 89557021 . + . Parent=gene2332 chr7 ENCODE CDS 89556857 89557021 . + 2 Parent=gene2332 chr7 ENCODE exon 89560246 89560364 . + . Parent=gene2332 chr7 ENCODE CDS 89560246 89560364 . + 2 Parent=gene2332 chr7 ENCODE exon 89562199 89562317 . + . Parent=gene2332 chr7 ENCODE CDS 89562199 89562317 . + 0 Parent=gene2332 chr7 ENCODE exon 89571714 89571795 . + . Parent=gene2332 chr7 ENCODE CDS 89571714 89571795 . + 1 Parent=gene2332 chr7 ENCODE exon 89573931 89573969 . + . Parent=gene2332 chr7 ENCODE CDS 89573931 89573969 . + 0 Parent=gene2332 ### chr7 ENCODE gene 89519390 89547959 . + . ID=gene2333;name2=AC002064.2;Name=AC002064.2-003 chr7 ENCODE exon 89519390 89519509 . + . Parent=gene2333 chr7 ENCODE exon 89529388 89529447 . + . Parent=gene2333 chr7 ENCODE exon 89532063 89532128 . + . Parent=gene2333 chr7 ENCODE exon 89535912 89536015 . + . Parent=gene2333 chr7 ENCODE exon 89539266 89539342 . + . Parent=gene2333 chr7 ENCODE exon 89542251 89542349 . + . Parent=gene2333 chr7 ENCODE exon 89545491 89545640 . + . Parent=gene2333 chr7 ENCODE exon 89547952 89547959 . + . Parent=gene2333 ### chr7 ENCODE gene 89545554 89546184 . + . ID=gene2334;name2=AC002064.2;Name=AC002064.2-008 chr7 ENCODE exon 89545554 89545640 . + . Parent=gene2334 chr7 ENCODE CDS 89545554 89545640 . + 0 Parent=gene2334 chr7 ENCODE CDS 89545746 89545927 . + 0 Parent=gene2334 chr7 ENCODE exon 89545746 89546184 . + . Parent=gene2334 ### chr7 ENCODE gene 89545868 89584353 . + . ID=gene2335;Name=AC002064.2-006;name2=AC002064.2 chr7 ENCODE exon 89545868 89545923 . + . Parent=gene2335 chr7 ENCODE exon 89547952 89548075 . + . Parent=gene2335 chr7 ENCODE exon 89551038 89551086 . + . Parent=gene2335 chr7 ENCODE exon 89551178 89551299 . + . Parent=gene2335 chr7 ENCODE exon 89553642 89553858 . + . Parent=gene2335 chr7 ENCODE exon 89556857 89557021 . + . Parent=gene2335 chr7 ENCODE exon 89560246 89560364 . + . Parent=gene2335 chr7 ENCODE exon 89561467 89561714 . + . Parent=gene2335 chr7 ENCODE exon 89562199 89562317 . + . Parent=gene2335 chr7 ENCODE exon 89571714 89571795 . + . Parent=gene2335 chr7 ENCODE exon 89573832 89578785 . + . Parent=gene2335 chr7 ENCODE exon 89580866 89581063 . + . Parent=gene2335 chr7 ENCODE exon 89581733 89581819 . + . Parent=gene2335 chr7 ENCODE exon 89583228 89583332 . + . Parent=gene2335 chr7 ENCODE exon 89584033 89584353 . + . Parent=gene2335 ### chr7 ENCODE gene 89553738 89584255 . + . ID=gene2336;Name=AC002064.2-007;name2=AC002064.2 chr7 ENCODE exon 89553738 89553858 . + . Parent=gene2336 chr7 ENCODE CDS 89553738 89553858 . + 0 Parent=gene2336 chr7 ENCODE exon 89556857 89557021 . + . Parent=gene2336 chr7 ENCODE CDS 89556857 89557021 . + 2 Parent=gene2336 chr7 ENCODE exon 89560246 89560364 . + . Parent=gene2336 chr7 ENCODE CDS 89560246 89560364 . + 2 Parent=gene2336 chr7 ENCODE exon 89562199 89562317 . + . Parent=gene2336 chr7 ENCODE CDS 89562199 89562317 . + 0 Parent=gene2336 chr7 ENCODE exon 89571714 89571795 . + . Parent=gene2336 chr7 ENCODE CDS 89571714 89571795 . + 1 Parent=gene2336 chr7 ENCODE exon 89573832 89574024 . + . Parent=gene2336 chr7 ENCODE CDS 89573832 89574024 . + 0 Parent=gene2336 chr7 ENCODE exon 89578709 89578785 . + . Parent=gene2336 chr7 ENCODE CDS 89578709 89578785 . + 2 Parent=gene2336 chr7 ENCODE exon 89580866 89581063 . + . Parent=gene2336 chr7 ENCODE CDS 89580866 89581063 . + 0 Parent=gene2336 chr7 ENCODE exon 89581733 89581819 . + . Parent=gene2336 chr7 ENCODE CDS 89581733 89581819 . + 0 Parent=gene2336 chr7 ENCODE exon 89583228 89583332 . + . Parent=gene2336 chr7 ENCODE CDS 89583228 89583332 . + 0 Parent=gene2336 chr7 ENCODE CDS 89584033 89584203 . + 0 Parent=gene2336 chr7 ENCODE exon 89584033 89584255 . + . Parent=gene2336 ### chr7 ENCODE gene 89553754 89560414 . + . ID=gene2337;Name=AC002064.2-009;name2=AC002064.2 chr7 ENCODE exon 89553754 89553858 . + . Parent=gene2337 chr7 ENCODE exon 89556857 89557021 . + . Parent=gene2337 chr7 ENCODE exon 89560246 89560414 . + . Parent=gene2337 ### chr7 ENCODE gene 89578001 89584265 . + . ID=gene2338;name2=AC002064.2;Name=AC002064.2-011 chr7 ENCODE exon 89578001 89578071 . + . Parent=gene2338 chr7 ENCODE CDS 89578001 89578071 . + 0 Parent=gene2338 chr7 ENCODE exon 89578709 89578785 . + . Parent=gene2338 chr7 ENCODE CDS 89578709 89578785 . + 1 Parent=gene2338 chr7 ENCODE exon 89581733 89581819 . + . Parent=gene2338 chr7 ENCODE CDS 89581733 89581819 . + 2 Parent=gene2338 chr7 ENCODE exon 89583228 89583332 . + . Parent=gene2338 chr7 ENCODE CDS 89583228 89583332 . + 2 Parent=gene2338 chr7 ENCODE CDS 89584033 89584203 . + 2 Parent=gene2338 chr7 ENCODE exon 89584033 89584265 . + . Parent=gene2338 ### chr7 ENCODE gene 89581042 89584534 . + . ID=gene2339;Name=AC002064.2-012;name2=AC002064.2 chr7 ENCODE exon 89581042 89581063 . + . Parent=gene2339 chr7 ENCODE CDS 89581042 89581063 . + 0 Parent=gene2339 chr7 ENCODE exon 89581733 89581819 . + . Parent=gene2339 chr7 ENCODE CDS 89581733 89581819 . + 2 Parent=gene2339 chr7 ENCODE CDS 89584033 89584203 . + 2 Parent=gene2339 chr7 ENCODE exon 89584033 89584534 . + . Parent=gene2339 ### chr7 ENCODE gene 89614336 89651537 . + . ID=gene2340;Name=AC006153.3-008;name2=AC006153.3 chr7 ENCODE exon 89614336 89614489 . + . Parent=gene2340 chr7 ENCODE CDS 89614484 89614489 . + 0 Parent=gene2340 chr7 ENCODE exon 89626781 89626974 . + . Parent=gene2340 chr7 ENCODE CDS 89626781 89626974 . + 0 Parent=gene2340 chr7 ENCODE exon 89628423 89628514 . + . Parent=gene2340 chr7 ENCODE CDS 89628423 89628514 . + 1 Parent=gene2340 chr7 ENCODE exon 89629051 89629195 . + . Parent=gene2340 chr7 ENCODE CDS 89629051 89629195 . + 2 Parent=gene2340 chr7 ENCODE exon 89646120 89646193 . + . Parent=gene2340 chr7 ENCODE CDS 89646120 89646193 . + 1 Parent=gene2340 chr7 ENCODE exon 89648267 89648319 . + . Parent=gene2340 chr7 ENCODE CDS 89648267 89648319 . + 2 Parent=gene2340 chr7 ENCODE exon 89651472 89651537 . + . Parent=gene2340 chr7 ENCODE CDS 89651472 89651537 . + 0 Parent=gene2340 ### chr7 ENCODE gene 89614336 89651537 . + . ID=gene2341;name2=AC006153.3;Name=AC006153.3-009 chr7 ENCODE exon 89614336 89614489 . + . Parent=gene2341 chr7 ENCODE exon 89626781 89626974 . + . Parent=gene2341 chr7 ENCODE exon 89629051 89629195 . + . Parent=gene2341 chr7 ENCODE exon 89646120 89646193 . + . Parent=gene2341 chr7 ENCODE exon 89648267 89648319 . + . Parent=gene2341 chr7 ENCODE exon 89651472 89651537 . + . Parent=gene2341 ### chr7 ENCODE gene 89614336 89651537 . + . ID=gene2342;Name=AC006153.3-010;name2=AC006153.3 chr7 ENCODE exon 89614336 89614489 . + . Parent=gene2342 chr7 ENCODE CDS 89614484 89614489 . + 0 Parent=gene2342 chr7 ENCODE exon 89616210 89616287 . + . Parent=gene2342 chr7 ENCODE CDS 89616210 89616287 . + 0 Parent=gene2342 chr7 ENCODE exon 89626781 89626974 . + . Parent=gene2342 chr7 ENCODE CDS 89626781 89626974 . + 0 Parent=gene2342 chr7 ENCODE exon 89628423 89628514 . + . Parent=gene2342 chr7 ENCODE CDS 89628423 89628514 . + 1 Parent=gene2342 chr7 ENCODE exon 89629051 89629195 . + . Parent=gene2342 chr7 ENCODE CDS 89629051 89629195 . + 2 Parent=gene2342 chr7 ENCODE exon 89646120 89646193 . + . Parent=gene2342 chr7 ENCODE CDS 89646120 89646193 . + 1 Parent=gene2342 chr7 ENCODE exon 89648267 89648319 . + . Parent=gene2342 chr7 ENCODE CDS 89648267 89648319 . + 2 Parent=gene2342 chr7 ENCODE exon 89651472 89651537 . + . Parent=gene2342 chr7 ENCODE CDS 89651472 89651537 . + 0 Parent=gene2342 ### chr7 ENCODE gene 89614336 89651540 . + . ID=gene2343;Name=AC006153.3-007;name2=AC006153.3 chr7 ENCODE exon 89614336 89614489 . + . Parent=gene2343 chr7 ENCODE exon 89626781 89626974 . + . Parent=gene2343 chr7 ENCODE exon 89628423 89628514 . + . Parent=gene2343 chr7 ENCODE exon 89646120 89646193 . + . Parent=gene2343 chr7 ENCODE exon 89648267 89648319 . + . Parent=gene2343 chr7 ENCODE exon 89651472 89651540 . + . Parent=gene2343 ### chr7 ENCODE gene 89620600 89651534 . + . ID=gene2344;Name=AC006153.3-006;name2=AC006153.3 chr7 ENCODE exon 89620600 89620662 . + . Parent=gene2344 chr7 ENCODE exon 89626781 89626974 . + . Parent=gene2344 chr7 ENCODE exon 89628423 89628514 . + . Parent=gene2344 chr7 ENCODE exon 89629051 89629195 . + . Parent=gene2344 chr7 ENCODE exon 89646120 89646193 . + . Parent=gene2344 chr7 ENCODE exon 89648267 89648319 . + . Parent=gene2344 chr7 ENCODE exon 89651472 89651534 . + . Parent=gene2344 ### chr7 ENCODE gene 89620630 89659608 . + . ID=gene2345;Name=AC006153.3-002;name2=GTPBP10 chr7 ENCODE exon 89620630 89620739 . + . Parent=gene2345 chr7 ENCODE CDS 89620707 89620739 . + 0 Parent=gene2345 chr7 ENCODE exon 89626781 89626974 . + . Parent=gene2345 chr7 ENCODE CDS 89626781 89626974 . + 0 Parent=gene2345 chr7 ENCODE exon 89646120 89646193 . + . Parent=gene2345 chr7 ENCODE CDS 89646120 89646193 . + 1 Parent=gene2345 chr7 ENCODE exon 89648267 89648319 . + . Parent=gene2345 chr7 ENCODE CDS 89648267 89648319 . + 2 Parent=gene2345 chr7 ENCODE exon 89651472 89651579 . + . Parent=gene2345 chr7 ENCODE CDS 89651472 89651579 . + 0 Parent=gene2345 chr7 ENCODE exon 89652099 89652176 . + . Parent=gene2345 chr7 ENCODE CDS 89652099 89652176 . + 0 Parent=gene2345 chr7 ENCODE exon 89656921 89657044 . + . Parent=gene2345 chr7 ENCODE CDS 89656921 89657044 . + 0 Parent=gene2345 chr7 ENCODE CDS 89658857 89659119 . + 2 Parent=gene2345 chr7 ENCODE exon 89658857 89659608 . + . Parent=gene2345 ### chr7 ENCODE gene 89620641 89665420 . + . ID=gene2346;Name=AC006153.3-001;name2=GTPBP10 chr7 ENCODE exon 89620641 89620739 . + . Parent=gene2346 chr7 ENCODE CDS 89620707 89620739 . + 0 Parent=gene2346 chr7 ENCODE exon 89626781 89626974 . + . Parent=gene2346 chr7 ENCODE CDS 89626781 89626974 . + 0 Parent=gene2346 chr7 ENCODE exon 89628423 89628514 . + . Parent=gene2346 chr7 ENCODE CDS 89628423 89628514 . + 1 Parent=gene2346 chr7 ENCODE exon 89629051 89629195 . + . Parent=gene2346 chr7 ENCODE CDS 89629051 89629195 . + 2 Parent=gene2346 chr7 ENCODE exon 89646120 89646193 . + . Parent=gene2346 chr7 ENCODE CDS 89646120 89646193 . + 1 Parent=gene2346 chr7 ENCODE exon 89648267 89648319 . + . Parent=gene2346 chr7 ENCODE CDS 89648267 89648319 . + 2 Parent=gene2346 chr7 ENCODE exon 89651472 89651579 . + . Parent=gene2346 chr7 ENCODE CDS 89651472 89651579 . + 0 Parent=gene2346 chr7 ENCODE exon 89652099 89652176 . + . Parent=gene2346 chr7 ENCODE CDS 89652099 89652176 . + 0 Parent=gene2346 chr7 ENCODE exon 89656921 89657044 . + . Parent=gene2346 chr7 ENCODE CDS 89656921 89657044 . + 0 Parent=gene2346 chr7 ENCODE CDS 89658857 89659119 . + 2 Parent=gene2346 chr7 ENCODE exon 89658857 89665420 . + . Parent=gene2346 ### chr7 ENCODE gene 89620667 89627197 . + . ID=gene2347;Name=AC006153.3-011;name2=GTPBP10 chr7 ENCODE exon 89620667 89620739 . + . Parent=gene2347 chr7 ENCODE exon 89626781 89627197 . + . Parent=gene2347 ### chr7 ENCODE gene 89620688 89659126 . + . ID=gene2348;Name=AC006153.3-003;name2=AC006153.3 chr7 ENCODE exon 89620688 89620739 . + . Parent=gene2348 chr7 ENCODE exon 89626781 89626974 . + . Parent=gene2348 chr7 ENCODE exon 89628423 89628514 . + . Parent=gene2348 chr7 ENCODE exon 89629051 89629195 . + . Parent=gene2348 chr7 ENCODE exon 89646120 89646193 . + . Parent=gene2348 chr7 ENCODE exon 89648267 89648319 . + . Parent=gene2348 chr7 ENCODE exon 89651472 89651579 . + . Parent=gene2348 chr7 ENCODE exon 89652099 89652176 . + . Parent=gene2348 chr7 ENCODE exon 89656921 89656955 . + . Parent=gene2348 chr7 ENCODE exon 89658857 89659126 . + . Parent=gene2348 ### chr7 ENCODE gene 89620695 89651579 . + . ID=gene2349;Name=AC006153.3-004;name2=AC006153.3 chr7 ENCODE exon 89620695 89620739 . + . Parent=gene2349 chr7 ENCODE exon 89626781 89626974 . + . Parent=gene2349 chr7 ENCODE exon 89629051 89629195 . + . Parent=gene2349 chr7 ENCODE exon 89648267 89648319 . + . Parent=gene2349 chr7 ENCODE exon 89651472 89651579 . + . Parent=gene2349 ### chr7 ENCODE gene 89628493 89659041 . + . ID=gene2350;Name=AC006153.3-005;name2=AC006153.3 chr7 ENCODE exon 89628493 89628514 . + . Parent=gene2350 chr7 ENCODE exon 89629051 89629195 . + . Parent=gene2350 chr7 ENCODE exon 89648267 89648319 . + . Parent=gene2350 chr7 ENCODE exon 89651472 89651579 . + . Parent=gene2350 chr7 ENCODE exon 89652099 89652176 . + . Parent=gene2350 chr7 ENCODE exon 89656921 89657044 . + . Parent=gene2350 chr7 ENCODE exon 89658857 89659041 . + . Parent=gene2350 ### chr7 ENCODE gene 89657686 89687168 . + . ID=gene2351;Name=AC006153.2-014;name2=CLDN12 chr7 ENCODE exon 89657686 89657752 . + . Parent=gene2351 chr7 ENCODE exon 89658857 89659203 . + . Parent=gene2351 chr7 ENCODE exon 89679484 89679573 . + . Parent=gene2351 chr7 ENCODE exon 89686609 89687168 . + . Parent=gene2351 ### chr7 ENCODE gene 89657686 89687168 . + . ID=gene2352;name2=CLDN12;Name=AC006153.2-015 chr7 ENCODE exon 89657686 89657752 . + . Parent=gene2352 chr7 ENCODE exon 89658857 89659203 . + . Parent=gene2352 chr7 ENCODE exon 89679484 89679573 . + . Parent=gene2352 chr7 ENCODE exon 89685928 89686026 . + . Parent=gene2352 chr7 ENCODE exon 89686609 89687168 . + . Parent=gene2352 ### chr7 ENCODE gene 89677351 89689919 . + . ID=gene2353;Name=AC006153.2-001;name2=CLDN12 chr7 ENCODE exon 89677351 89677514 . + . Parent=gene2353 chr7 ENCODE exon 89679484 89679573 . + . Parent=gene2353 chr7 ENCODE exon 89686609 89689919 . + . Parent=gene2353 chr7 ENCODE CDS 89686642 89687376 . + 0 Parent=gene2353 ### chr7 ENCODE gene 89677399 89787356 . + . ID=gene2354;Name=AC006153.2-003;name2=CLDN12 chr7 ENCODE exon 89677399 89677514 . + . Parent=gene2354 chr7 ENCODE exon 89679484 89679577 . + . Parent=gene2354 chr7 ENCODE exon 89753193 89753239 . + . Parent=gene2354 chr7 ENCODE exon 89787243 89787356 . + . Parent=gene2354 ### chr7 ENCODE gene 89677403 89680045 . + . ID=gene2355;Name=AC006153.2-004;name2=CLDN12 chr7 ENCODE exon 89677403 89677514 . + . Parent=gene2355 chr7 ENCODE exon 89679484 89680045 . + . Parent=gene2355 ### chr7 ENCODE gene 89677413 89687203 . + . ID=gene2356;Name=AC006153.2-013;name2=CLDN12 chr7 ENCODE exon 89677413 89677514 . + . Parent=gene2356 chr7 ENCODE exon 89679484 89679577 . + . Parent=gene2356 chr7 ENCODE exon 89685972 89686026 . + . Parent=gene2356 chr7 ENCODE exon 89686609 89687203 . + . Parent=gene2356 chr7 ENCODE CDS 89686642 89687203 . + 0 Parent=gene2356 ### chr7 ENCODE gene 89677449 89768381 . + . ID=gene2357;Name=AC006153.2-008;name2=CLDN12 chr7 ENCODE exon 89677449 89677514 . + . Parent=gene2357 chr7 ENCODE exon 89679484 89679573 . + . Parent=gene2357 chr7 ENCODE exon 89740375 89740478 . + . Parent=gene2357 chr7 ENCODE exon 89743856 89743918 . + . Parent=gene2357 chr7 ENCODE exon 89753193 89753239 . + . Parent=gene2357 chr7 ENCODE exon 89768332 89768381 . + . Parent=gene2357 ### chr7 ENCODE gene 89677484 89787348 . + . ID=gene2358;Name=AC006153.2-006;name2=CLDN12 chr7 ENCODE exon 89677484 89677514 . + . Parent=gene2358 chr7 ENCODE exon 89679484 89679573 . + . Parent=gene2358 chr7 ENCODE exon 89753193 89753239 . + . Parent=gene2358 chr7 ENCODE exon 89768332 89768395 . + . Parent=gene2358 chr7 ENCODE exon 89787243 89787348 . + . Parent=gene2358 ### chr7 ENCODE gene 89677501 89683149 . + . ID=gene2359;Name=AC006153.2-007;name2=CLDN12 chr7 ENCODE exon 89677501 89677514 . + . Parent=gene2359 chr7 ENCODE exon 89679484 89679573 . + . Parent=gene2359 chr7 ENCODE exon 89682912 89683149 . + . Parent=gene2359 ### chr7 ENCODE gene 89677514 89689919 . + . ID=gene2360;Name=AC006153.2-002;name2=CLDN12 chr7 ENCODE exon 89677514 89677514 . + . Parent=gene2360 chr7 ENCODE exon 89679484 89679577 . + . Parent=gene2360 chr7 ENCODE exon 89686609 89689919 . + . Parent=gene2360 chr7 ENCODE CDS 89686642 89687376 . + 0 Parent=gene2360 ### chr7 ENCODE gene 89677532 89687020 . + . ID=gene2361;Name=AC006153.2-005;name2=CLDN12 chr7 ENCODE exon 89677532 89677647 . + . Parent=gene2361 chr7 ENCODE exon 89679484 89679573 . + . Parent=gene2361 chr7 ENCODE exon 89686609 89687020 . + . Parent=gene2361 chr7 ENCODE CDS 89686642 89687020 . + 0 Parent=gene2361 ### chr7 ENCODE gene 89679546 89787367 . + . ID=gene2362;Name=AC006153.2-011;name2=CLDN12 chr7 ENCODE exon 89679546 89679577 . + . Parent=gene2362 chr7 ENCODE exon 89753193 89753239 . + . Parent=gene2362 chr7 ENCODE exon 89761292 89761385 . + . Parent=gene2362 chr7 ENCODE exon 89762836 89762929 . + . Parent=gene2362 chr7 ENCODE exon 89766204 89766274 . + . Parent=gene2362 chr7 ENCODE exon 89768332 89768395 . + . Parent=gene2362 chr7 ENCODE exon 89787243 89787367 . + . Parent=gene2362 ### chr7 ENCODE gene 89737205 89744312 . + . ID=gene2363;Name=AC006153.2-009;name2=CLDN12 chr7 ENCODE exon 89737205 89737336 . + . Parent=gene2363 chr7 ENCODE exon 89740375 89740478 . + . Parent=gene2363 chr7 ENCODE exon 89743856 89744312 . + . Parent=gene2363 ### chr7 ENCODE gene 89740375 89787336 . + . ID=gene2364;Name=AC006153.2-010;name2=CLDN12 chr7 ENCODE exon 89740375 89740478 . + . Parent=gene2364 chr7 ENCODE exon 89753193 89753239 . + . Parent=gene2364 chr7 ENCODE exon 89768332 89768395 . + . Parent=gene2364 chr7 ENCODE exon 89787243 89787336 . + . Parent=gene2364 ### chr7 ENCODE gene 89740389 90064594 . + . ID=gene2365;Name=AC084381.2-007;name2=PFTK1 chr7 ENCODE exon 89740389 89740478 . + . Parent=gene2365 chr7 ENCODE exon 89753193 89753239 . + . Parent=gene2365 chr7 ENCODE exon 89768332 89768395 . + . Parent=gene2365 chr7 ENCODE exon 89837700 89837828 . + . Parent=gene2365 chr7 ENCODE exon 89878183 89878214 . + . Parent=gene2365 chr7 ENCODE exon 90000532 90000777 . + . Parent=gene2365 chr7 ENCODE exon 90021647 90021741 . + . Parent=gene2365 chr7 ENCODE exon 90064539 90064594 . + . Parent=gene2365 ### chr7 ENCODE gene 89768135 89787353 . + . ID=gene2366;Name=AC006153.2-012;name2=CLDN12 chr7 ENCODE exon 89768135 89768395 . + . Parent=gene2366 chr7 ENCODE exon 89787243 89787353 . + . Parent=gene2366 ### chr7 ENCODE gene 89837739 90064591 . + . ID=gene2367;name2=PFTK1;Name=AC084381.2-009 chr7 ENCODE exon 89837739 89837828 . + . Parent=gene2367 chr7 ENCODE exon 89878183 89878214 . + . Parent=gene2367 chr7 ENCODE exon 90064539 90064591 . + . Parent=gene2367 ### chr7 ENCODE gene 89837739 90064593 . + . ID=gene2368;Name=AC084381.2-010;name2=PFTK1 chr7 ENCODE exon 89837739 89837828 . + . Parent=gene2368 chr7 ENCODE exon 89878183 89878214 . + . Parent=gene2368 chr7 ENCODE exon 89940305 89940376 . + . Parent=gene2368 chr7 ENCODE exon 90000532 90000777 . + . Parent=gene2368 chr7 ENCODE exon 90021647 90021741 . + . Parent=gene2368 chr7 ENCODE exon 90064539 90064593 . + . Parent=gene2368 ### chr7 ENCODE gene 89837739 90064594 . + . ID=gene2369;Name=AC084381.2-008;name2=PFTK1 chr7 ENCODE exon 89837739 89837828 . + . Parent=gene2369 chr7 ENCODE exon 89878183 89878214 . + . Parent=gene2369 chr7 ENCODE exon 89882495 89882540 . + . Parent=gene2369 chr7 ENCODE exon 90000532 90000777 . + . Parent=gene2369 chr7 ENCODE exon 90021647 90021741 . + . Parent=gene2369 chr7 ENCODE exon 90064539 90064594 . + . Parent=gene2369 ### chr7 ENCODE gene 89837739 90064594 . + . ID=gene2370;Name=AC084381.2-011;name2=PFTK1 chr7 ENCODE exon 89837739 89837828 . + . Parent=gene2370 chr7 ENCODE exon 89878183 89878214 . + . Parent=gene2370 chr7 ENCODE exon 89882495 89882540 . + . Parent=gene2370 chr7 ENCODE exon 89990305 89990359 . + . Parent=gene2370 chr7 ENCODE exon 90000532 90000777 . + . Parent=gene2370 chr7 ENCODE exon 90021647 90021741 . + . Parent=gene2370 chr7 ENCODE exon 90064539 90064594 . + . Parent=gene2370 ### chr7 ENCODE gene 89870462 90484556 . + . ID=gene2371;name2=PFTK1;Name=AC084381.2-001 chr7 ENCODE exon 89870462 89870683 . + . Parent=gene2371 chr7 ENCODE CDS 89870593 89870683 . + 0 Parent=gene2371 chr7 ENCODE exon 89878183 89878214 . + . Parent=gene2371 chr7 ENCODE CDS 89878183 89878214 . + 2 Parent=gene2371 chr7 ENCODE exon 90000532 90000777 . + . Parent=gene2371 chr7 ENCODE CDS 90000532 90000777 . + 0 Parent=gene2371 chr7 ENCODE exon 90021647 90021741 . + . Parent=gene2371 chr7 ENCODE CDS 90021647 90021741 . + 0 Parent=gene2371 chr7 ENCODE exon 90064539 90064618 . + . Parent=gene2371 chr7 ENCODE CDS 90064539 90064618 . + 1 Parent=gene2371 chr7 ENCODE exon 90137141 90137235 . + . Parent=gene2371 chr7 ENCODE CDS 90137141 90137235 . + 2 Parent=gene2371 chr7 ENCODE exon 90173257 90173319 . + . Parent=gene2371 chr7 ENCODE CDS 90173257 90173319 . + 0 Parent=gene2371 chr7 ENCODE exon 90191567 90191690 . + . Parent=gene2371 chr7 ENCODE CDS 90191567 90191690 . + 0 Parent=gene2371 chr7 ENCODE exon 90229663 90229783 . + . Parent=gene2371 chr7 ENCODE CDS 90229663 90229783 . + 2 Parent=gene2371 chr7 ENCODE exon 90258114 90258207 . + . Parent=gene2371 chr7 ENCODE CDS 90258114 90258207 . + 1 Parent=gene2371 chr7 ENCODE exon 90319863 90319926 . + . Parent=gene2371 chr7 ENCODE CDS 90319863 90319926 . + 0 Parent=gene2371 chr7 ENCODE exon 90353398 90353446 . + . Parent=gene2371 chr7 ENCODE CDS 90353398 90353446 . + 2 Parent=gene2371 chr7 ENCODE exon 90386508 90386647 . + . Parent=gene2371 chr7 ENCODE CDS 90386508 90386647 . + 1 Parent=gene2371 chr7 ENCODE CDS 90392031 90392146 . + 2 Parent=gene2371 chr7 ENCODE exon 90392031 90392174 . + . Parent=gene2371 chr7 ENCODE exon 90481131 90484556 . + . Parent=gene2371 ### chr7 ENCODE gene 89983363 90484555 . + . ID=gene2372;name2=PFTK1;Name=AC084381.2-002 chr7 ENCODE exon 89983363 89983575 . + . Parent=gene2372 chr7 ENCODE CDS 89983507 89983575 . + 0 Parent=gene2372 chr7 ENCODE exon 90000532 90000777 . + . Parent=gene2372 chr7 ENCODE CDS 90000532 90000777 . + 0 Parent=gene2372 chr7 ENCODE exon 90021647 90021741 . + . Parent=gene2372 chr7 ENCODE CDS 90021647 90021741 . + 0 Parent=gene2372 chr7 ENCODE exon 90064539 90064618 . + . Parent=gene2372 chr7 ENCODE CDS 90064539 90064618 . + 1 Parent=gene2372 chr7 ENCODE exon 90137141 90137235 . + . Parent=gene2372 chr7 ENCODE CDS 90137141 90137235 . + 2 Parent=gene2372 chr7 ENCODE exon 90173257 90173319 . + . Parent=gene2372 chr7 ENCODE CDS 90173257 90173319 . + 0 Parent=gene2372 chr7 ENCODE exon 90191567 90191690 . + . Parent=gene2372 chr7 ENCODE CDS 90191567 90191690 . + 0 Parent=gene2372 chr7 ENCODE exon 90229663 90229783 . + . Parent=gene2372 chr7 ENCODE CDS 90229663 90229783 . + 2 Parent=gene2372 chr7 ENCODE exon 90258114 90258207 . + . Parent=gene2372 chr7 ENCODE CDS 90258114 90258207 . + 1 Parent=gene2372 chr7 ENCODE exon 90319863 90319926 . + . Parent=gene2372 chr7 ENCODE CDS 90319863 90319926 . + 0 Parent=gene2372 chr7 ENCODE exon 90353398 90353446 . + . Parent=gene2372 chr7 ENCODE CDS 90353398 90353446 . + 2 Parent=gene2372 chr7 ENCODE exon 90386508 90386647 . + . Parent=gene2372 chr7 ENCODE CDS 90386508 90386647 . + 1 Parent=gene2372 chr7 ENCODE CDS 90392031 90392146 . + 2 Parent=gene2372 chr7 ENCODE exon 90392031 90392174 . + . Parent=gene2372 chr7 ENCODE exon 90481131 90484555 . + . Parent=gene2372 ### chr7 ENCODE gene 89983496 90484551 . + . ID=gene2373;Name=AC084381.2-003;name2=PFTK1 chr7 ENCODE exon 89983496 89983922 . + . Parent=gene2373 chr7 ENCODE exon 90000532 90000777 . + . Parent=gene2373 chr7 ENCODE exon 90021647 90021741 . + . Parent=gene2373 chr7 ENCODE exon 90064539 90064618 . + . Parent=gene2373 chr7 ENCODE exon 90137141 90137235 . + . Parent=gene2373 chr7 ENCODE exon 90173257 90173319 . + . Parent=gene2373 chr7 ENCODE exon 90191567 90191690 . + . Parent=gene2373 chr7 ENCODE exon 90229663 90229783 . + . Parent=gene2373 chr7 ENCODE exon 90258114 90258207 . + . Parent=gene2373 chr7 ENCODE exon 90319863 90319926 . + . Parent=gene2373 chr7 ENCODE exon 90353398 90353446 . + . Parent=gene2373 chr7 ENCODE exon 90386508 90386647 . + . Parent=gene2373 chr7 ENCODE exon 90392031 90392174 . + . Parent=gene2373 chr7 ENCODE exon 90481131 90484551 . + . Parent=gene2373 ### chr7 ENCODE gene 89983827 90229759 . + . ID=gene2374;Name=AC084381.2-004;name2=PFTK1 chr7 ENCODE exon 89983827 89983922 . + . Parent=gene2374 chr7 ENCODE exon 90000532 90000777 . + . Parent=gene2374 chr7 ENCODE exon 90064539 90064618 . + . Parent=gene2374 chr7 ENCODE exon 90137141 90137235 . + . Parent=gene2374 chr7 ENCODE exon 90173257 90173319 . + . Parent=gene2374 chr7 ENCODE exon 90191567 90191690 . + . Parent=gene2374 chr7 ENCODE exon 90229663 90229759 . + . Parent=gene2374 ### chr7 ENCODE gene 90000469 90064580 . + . ID=gene2375;Name=AC084381.2-005;name2=PFTK1 chr7 ENCODE exon 90000469 90000777 . + . Parent=gene2375 chr7 ENCODE exon 90021647 90021741 . + . Parent=gene2375 chr7 ENCODE exon 90064539 90064580 . + . Parent=gene2375 ### chr7 ENCODE gene 90098571 90229762 . + . ID=gene2376;Name=AC084381.2-012;name2=PFTK1 chr7 ENCODE exon 90098571 90098733 . + . Parent=gene2376 chr7 ENCODE exon 90137141 90137235 . + . Parent=gene2376 chr7 ENCODE exon 90173257 90173319 . + . Parent=gene2376 chr7 ENCODE exon 90191567 90191690 . + . Parent=gene2376 chr7 ENCODE exon 90229663 90229762 . + . Parent=gene2376 ### chr7 ENCODE gene 90229758 90253767 . + . ID=gene2377;Name=AC084381.2-006;name2=PFTK1 chr7 ENCODE exon 90229758 90229783 . + . Parent=gene2377 chr7 ENCODE exon 90253358 90253767 . + . Parent=gene2377 ### chr7 ENCODE gene 90538330 90542684 . + . ID=gene2378;name2=FZD1;Name=AC084381.1-002 chr7 ENCODE exon 90538330 90538879 . + . Parent=gene2378 chr7 ENCODE exon 90540488 90542684 . + . Parent=gene2378 ### chr7 ENCODE gene 90538330 90542763 . + . ID=gene2379;Name=AC084381.1-001;name2=FZD1 chr7 ENCODE exon 90538330 90542763 . + . Parent=gene2379 chr7 ENCODE CDS 90538847 90540790 . + 0 Parent=gene2379 ### chr7 ENCODE gene 113649061 113924106 . + . ID=gene2380;Name=AC020606.1-001;name2=FOXP2 chr7 ENCODE exon 113649061 113649366 . + . Parent=gene2380 chr7 ENCODE exon 113660508 113660685 . + . Parent=gene2380 chr7 ENCODE CDS 113660518 113660685 . + 0 Parent=gene2380 chr7 ENCODE exon 113768623 113768712 . + . Parent=gene2380 chr7 ENCODE CDS 113768623 113768712 . + 0 Parent=gene2380 chr7 ENCODE exon 113862546 113862683 . + . Parent=gene2380 chr7 ENCODE CDS 113862546 113862683 . + 0 Parent=gene2380 chr7 ENCODE exon 113863811 113864011 . + . Parent=gene2380 chr7 ENCODE CDS 113863811 113864011 . + 0 Parent=gene2380 chr7 ENCODE exon 113865534 113865711 . + . Parent=gene2380 chr7 ENCODE CDS 113865534 113865711 . + 0 Parent=gene2380 chr7 ENCODE exon 113876416 113876629 . + . Parent=gene2380 chr7 ENCODE CDS 113876416 113876629 . + 2 Parent=gene2380 chr7 ENCODE exon 113878691 113878795 . + . Parent=gene2380 chr7 ENCODE CDS 113878691 113878795 . + 1 Parent=gene2380 chr7 ENCODE exon 113886209 113886296 . + . Parent=gene2380 chr7 ENCODE CDS 113886209 113886296 . + 1 Parent=gene2380 chr7 ENCODE exon 113887932 113888015 . + . Parent=gene2380 chr7 ENCODE CDS 113887932 113888015 . + 0 Parent=gene2380 chr7 ENCODE exon 113892072 113892273 . + . Parent=gene2380 chr7 ENCODE CDS 113892072 113892273 . + 0 Parent=gene2380 chr7 ENCODE exon 113893362 113893438 . + . Parent=gene2380 chr7 ENCODE CDS 113893362 113893438 . + 2 Parent=gene2380 chr7 ENCODE exon 113893578 113893679 . + . Parent=gene2380 chr7 ENCODE CDS 113893578 113893679 . + 0 Parent=gene2380 chr7 ENCODE exon 113896071 113896192 . + . Parent=gene2380 chr7 ENCODE CDS 113896071 113896192 . + 0 Parent=gene2380 chr7 ENCODE exon 113897456 113897525 . + . Parent=gene2380 chr7 ENCODE CDS 113897456 113897525 . + 1 Parent=gene2380 chr7 ENCODE exon 113898279 113898442 . + . Parent=gene2380 chr7 ENCODE CDS 113898279 113898442 . + 0 Parent=gene2380 chr7 ENCODE CDS 113923788 113923932 . + 1 Parent=gene2380 chr7 ENCODE exon 113923788 113924106 . + . Parent=gene2380 ### chr7 ENCODE gene 113649064 113924151 . + . ID=gene2381;name2=FOXP2;Name=AC020606.1-005 chr7 ENCODE exon 113649064 113649366 . + . Parent=gene2381 chr7 ENCODE exon 113660508 113660685 . + . Parent=gene2381 chr7 ENCODE CDS 113660518 113660685 . + 0 Parent=gene2381 chr7 ENCODE exon 113768623 113768712 . + . Parent=gene2381 chr7 ENCODE CDS 113768623 113768712 . + 0 Parent=gene2381 chr7 ENCODE exon 113862546 113862683 . + . Parent=gene2381 chr7 ENCODE CDS 113862546 113862683 . + 0 Parent=gene2381 chr7 ENCODE exon 113863877 113864011 . + . Parent=gene2381 chr7 ENCODE CDS 113863877 113864011 . + 0 Parent=gene2381 chr7 ENCODE exon 113865537 113865711 . + . Parent=gene2381 chr7 ENCODE CDS 113865537 113865711 . + 0 Parent=gene2381 chr7 ENCODE exon 113876416 113876629 . + . Parent=gene2381 chr7 ENCODE CDS 113876416 113876629 . + 2 Parent=gene2381 chr7 ENCODE exon 113878691 113878795 . + . Parent=gene2381 chr7 ENCODE CDS 113878691 113878795 . + 1 Parent=gene2381 chr7 ENCODE exon 113886209 113886296 . + . Parent=gene2381 chr7 ENCODE CDS 113886209 113886296 . + 1 Parent=gene2381 chr7 ENCODE exon 113887932 113888015 . + . Parent=gene2381 chr7 ENCODE CDS 113887932 113888015 . + 0 Parent=gene2381 chr7 ENCODE exon 113892072 113892273 . + . Parent=gene2381 chr7 ENCODE CDS 113892072 113892273 . + 0 Parent=gene2381 chr7 ENCODE exon 113893362 113893438 . + . Parent=gene2381 chr7 ENCODE CDS 113893362 113893438 . + 2 Parent=gene2381 chr7 ENCODE exon 113893578 113893679 . + . Parent=gene2381 chr7 ENCODE CDS 113893578 113893679 . + 0 Parent=gene2381 chr7 ENCODE exon 113896071 113896192 . + . Parent=gene2381 chr7 ENCODE CDS 113896071 113896192 . + 0 Parent=gene2381 chr7 ENCODE exon 113897456 113897525 . + . Parent=gene2381 chr7 ENCODE CDS 113897456 113897525 . + 1 Parent=gene2381 chr7 ENCODE exon 113898279 113898442 . + . Parent=gene2381 chr7 ENCODE CDS 113898279 113898442 . + 0 Parent=gene2381 chr7 ENCODE CDS 113923788 113923932 . + 1 Parent=gene2381 chr7 ENCODE exon 113923788 113924151 . + . Parent=gene2381 ### chr7 ENCODE gene 113649325 113879836 . + . ID=gene2382;Name=AC020606.1-010;name2=FOXP2 chr7 ENCODE exon 113649325 113649366 . + . Parent=gene2382 chr7 ENCODE exon 113660508 113660685 . + . Parent=gene2382 chr7 ENCODE exon 113768623 113768712 . + . Parent=gene2382 chr7 ENCODE exon 113862546 113862683 . + . Parent=gene2382 chr7 ENCODE exon 113863811 113864011 . + . Parent=gene2382 chr7 ENCODE exon 113865534 113865711 . + . Parent=gene2382 chr7 ENCODE exon 113876416 113876629 . + . Parent=gene2382 chr7 ENCODE exon 113878691 113879836 . + . Parent=gene2382 ### chr7 ENCODE gene 113863576 113876589 . + . ID=gene2383;Name=AC020606.1-013;name2=FOXP2 chr7 ENCODE exon 113863576 113863793 . + . Parent=gene2383 chr7 ENCODE exon 113863847 113864011 . + . Parent=gene2383 chr7 ENCODE exon 113865534 113865711 . + . Parent=gene2383 chr7 ENCODE exon 113876416 113876589 . + . Parent=gene2383 ### chr7 ENCODE gene 113876416 113888149 . + . ID=gene2384;Name=AC020606.1-011;name2=FOXP2 chr7 ENCODE exon 113876416 113876629 . + . Parent=gene2384 chr7 ENCODE exon 113878691 113878795 . + . Parent=gene2384 chr7 ENCODE exon 113886209 113886296 . + . Parent=gene2384 chr7 ENCODE exon 113887932 113888149 . + . Parent=gene2384 ### chr7 ENCODE gene 113887876 113898383 . + . ID=gene2385;Name=AC020606.1-012;name2=FOXP2 chr7 ENCODE exon 113887876 113888015 . + . Parent=gene2385 chr7 ENCODE exon 113893362 113893438 . + . Parent=gene2385 chr7 ENCODE exon 113893578 113893679 . + . Parent=gene2385 chr7 ENCODE exon 113896071 113896192 . + . Parent=gene2385 chr7 ENCODE exon 113897456 113897472 . + . Parent=gene2385 chr7 ENCODE exon 113898280 113898383 . + . Parent=gene2385 ### chr7 ENCODE gene 114156160 114253207 . + . ID=gene2386;Name=AC017003.2-001;name2=MDFIC chr7 ENCODE exon 114156160 114156642 . + . Parent=gene2386 chr7 ENCODE exon 114156933 114157133 . + . Parent=gene2386 chr7 ENCODE CDS 114157040 114157133 . + 0 Parent=gene2386 chr7 ENCODE exon 114176281 114176403 . + . Parent=gene2386 chr7 ENCODE CDS 114176281 114176403 . + 2 Parent=gene2386 chr7 ENCODE exon 114213512 114213787 . + . Parent=gene2386 chr7 ENCODE CDS 114213512 114213787 . + 2 Parent=gene2386 chr7 ENCODE CDS 114249693 114249940 . + 2 Parent=gene2386 chr7 ENCODE exon 114249693 114253207 . + . Parent=gene2386 ### chr7 ENCODE gene 114156567 114157671 . + . ID=gene2387;Name=AC017003.2-003;name2=MDFIC chr7 ENCODE exon 114156567 114156642 . + . Parent=gene2387 chr7 ENCODE exon 114156933 114157133 . + . Parent=gene2387 chr7 ENCODE exon 114157465 114157671 . + . Parent=gene2387 ### chr7 ENCODE gene 114156860 114157664 . + . ID=gene2388;Name=AC017003.2-002;name2=MDFIC chr7 ENCODE exon 114156860 114157133 . + . Parent=gene2388 chr7 ENCODE exon 114157465 114157664 . + . Parent=gene2388 ### chr7 ENCODE gene 114157070 114249966 . + . ID=gene2389;Name=AC017003.2-005;name2=MDFIC chr7 ENCODE exon 114157070 114157133 . + . Parent=gene2389 chr7 ENCODE exon 114176281 114176403 . + . Parent=gene2389 chr7 ENCODE exon 114213512 114213787 . + . Parent=gene2389 chr7 ENCODE exon 114248468 114248538 . + . Parent=gene2389 chr7 ENCODE exon 114249693 114249966 . + . Parent=gene2389 ### chr7 ENCODE gene 114157082 114214090 . + . ID=gene2390;Name=AC017003.2-004;name2=MDFIC chr7 ENCODE exon 114157082 114157133 . + . Parent=gene2390 chr7 ENCODE exon 114176281 114176403 . + . Parent=gene2390 chr7 ENCODE exon 114213512 114213787 . + . Parent=gene2390 chr7 ENCODE exon 114213895 114214090 . + . Parent=gene2390 ### chr7 ENCODE gene 115444498 115492788 . + . ID=gene2391;Name=AC073130.2-001;name2=TES chr7 ENCODE exon 115444498 115444739 . + . Parent=gene2391 chr7 ENCODE CDS 115444713 115444739 . + 0 Parent=gene2391 chr7 ENCODE exon 115468539 115468624 . + . Parent=gene2391 chr7 ENCODE CDS 115468539 115468624 . + 0 Parent=gene2391 chr7 ENCODE exon 115483025 115483277 . + . Parent=gene2391 chr7 ENCODE CDS 115483025 115483277 . + 1 Parent=gene2391 chr7 ENCODE exon 115484166 115484501 . + . Parent=gene2391 chr7 ENCODE CDS 115484166 115484501 . + 0 Parent=gene2391 chr7 ENCODE exon 115485765 115485980 . + . Parent=gene2391 chr7 ENCODE CDS 115485765 115485980 . + 0 Parent=gene2391 chr7 ENCODE exon 115486323 115486481 . + . Parent=gene2391 chr7 ENCODE CDS 115486323 115486481 . + 0 Parent=gene2391 chr7 ENCODE CDS 115491299 115491487 . + 0 Parent=gene2391 chr7 ENCODE exon 115491299 115492788 . + . Parent=gene2391 ### chr7 ENCODE gene 115444566 115483430 . + . ID=gene2392;Name=AC073130.2-007;name2=TES chr7 ENCODE exon 115444566 115444739 . + . Parent=gene2392 chr7 ENCODE exon 115483025 115483430 . + . Parent=gene2392 ### chr7 ENCODE gene 115456956 115483369 . + . ID=gene2393;Name=AC073130.2-006;name2=TES chr7 ENCODE exon 115456956 115457031 . + . Parent=gene2393 chr7 ENCODE exon 115468539 115468624 . + . Parent=gene2393 chr7 ENCODE exon 115483025 115483369 . + . Parent=gene2393 ### chr7 ENCODE gene 115484440 115486743 . + . ID=gene2394;Name=AC073130.2-005;name2=TES chr7 ENCODE exon 115484440 115484501 . + . Parent=gene2394 chr7 ENCODE exon 115485765 115485980 . + . Parent=gene2394 chr7 ENCODE exon 115486323 115486743 . + . Parent=gene2394 ### chr7 ENCODE gene 115485512 115491581 . + . ID=gene2395;Name=AC073130.2-003;name2=TES chr7 ENCODE exon 115485512 115485980 . + . Parent=gene2395 chr7 ENCODE exon 115486323 115486481 . + . Parent=gene2395 chr7 ENCODE exon 115491299 115491581 . + . Parent=gene2395 ### chr7 ENCODE gene 115485756 115486585 . + . ID=gene2396;Name=AC073130.2-004;name2=TES chr7 ENCODE exon 115485756 115485980 . + . Parent=gene2396 chr7 ENCODE exon 115486323 115486585 . + . Parent=gene2396 ### chr7 ENCODE gene 115522078 115740105 . + . ID=gene2397;Name=AC006159.1-009;name2=CAV2 chr7 ENCODE exon 115522078 115522119 . + . Parent=gene2397 chr7 ENCODE exon 115523857 115524055 . + . Parent=gene2397 chr7 ENCODE exon 115550437 115550515 . + . Parent=gene2397 chr7 ENCODE exon 115553646 115553764 . + . Parent=gene2397 chr7 ENCODE exon 115556807 115556893 . + . Parent=gene2397 chr7 ENCODE exon 115571125 115571186 . + . Parent=gene2397 chr7 ENCODE exon 115573828 115573924 . + . Parent=gene2397 chr7 ENCODE exon 115704049 115704094 . + . Parent=gene2397 chr7 ENCODE exon 115731829 115731988 . + . Parent=gene2397 chr7 ENCODE exon 115733249 115733346 . + . Parent=gene2397 chr7 ENCODE exon 115739976 115740105 . + . Parent=gene2397 ### chr7 ENCODE gene 115522078 115740108 . + . ID=gene2398;Name=AC006159.1-016;name2=CAV2 chr7 ENCODE exon 115522078 115522119 . + . Parent=gene2398 chr7 ENCODE exon 115523857 115524055 . + . Parent=gene2398 chr7 ENCODE exon 115550437 115550515 . + . Parent=gene2398 chr7 ENCODE exon 115553646 115553764 . + . Parent=gene2398 chr7 ENCODE exon 115556807 115556893 . + . Parent=gene2398 chr7 ENCODE exon 115573836 115573874 . + . Parent=gene2398 chr7 ENCODE exon 115740011 115740108 . + . Parent=gene2398 ### chr7 ENCODE gene 115522078 115740110 . + . ID=gene2399;Name=AC006159.1-008;name2=CAV2 chr7 ENCODE exon 115522078 115522119 . + . Parent=gene2399 chr7 ENCODE exon 115523857 115524055 . + . Parent=gene2399 chr7 ENCODE exon 115532462 115532514 . + . Parent=gene2399 chr7 ENCODE exon 115573828 115573959 . + . Parent=gene2399 chr7 ENCODE exon 115661327 115661491 . + . Parent=gene2399 chr7 ENCODE exon 115666964 115667124 . + . Parent=gene2399 chr7 ENCODE exon 115731774 115731988 . + . Parent=gene2399 chr7 ENCODE exon 115733249 115733346 . + . Parent=gene2399 chr7 ENCODE exon 115739976 115740110 . + . Parent=gene2399 ### chr7 ENCODE gene 115522078 115740110 . + . ID=gene2400;Name=AC006159.1-012;name2=CAV2 chr7 ENCODE exon 115522078 115522119 . + . Parent=gene2400 chr7 ENCODE exon 115523857 115524055 . + . Parent=gene2400 chr7 ENCODE exon 115550437 115550515 . + . Parent=gene2400 chr7 ENCODE exon 115553646 115553764 . + . Parent=gene2400 chr7 ENCODE exon 115556807 115556893 . + . Parent=gene2400 chr7 ENCODE exon 115557095 115557184 . + . Parent=gene2400 chr7 ENCODE exon 115571125 115571263 . + . Parent=gene2400 chr7 ENCODE exon 115740086 115740110 . + . Parent=gene2400 ### chr7 ENCODE gene 115522078 115740113 . + . ID=gene2401;Name=AC006159.1-015;name2=CAV2 chr7 ENCODE exon 115522078 115522119 . + . Parent=gene2401 chr7 ENCODE exon 115523857 115524055 . + . Parent=gene2401 chr7 ENCODE exon 115661327 115661491 . + . Parent=gene2401 chr7 ENCODE exon 115731774 115731988 . + . Parent=gene2401 chr7 ENCODE exon 115733249 115733346 . + . Parent=gene2401 chr7 ENCODE exon 115739976 115740113 . + . Parent=gene2401 ### chr7 ENCODE gene 115522078 115740113 . + . ID=gene2402;Name=AC006159.1-010;name2=CAV2 chr7 ENCODE exon 115522078 115522119 . + . Parent=gene2402 chr7 ENCODE exon 115523857 115524055 . + . Parent=gene2402 chr7 ENCODE exon 115731774 115731988 . + . Parent=gene2402 chr7 ENCODE exon 115733249 115733346 . + . Parent=gene2402 chr7 ENCODE exon 115733846 115733936 . + . Parent=gene2402 chr7 ENCODE exon 115734265 115734452 . + . Parent=gene2402 chr7 ENCODE exon 115739976 115740113 . + . Parent=gene2402 ### chr7 ENCODE gene 115522080 115740102 . + . ID=gene2403;Name=AC006159.1-014;name2=CAV2 chr7 ENCODE exon 115522080 115522119 . + . Parent=gene2403 chr7 ENCODE exon 115523857 115524055 . + . Parent=gene2403 chr7 ENCODE exon 115550437 115550515 . + . Parent=gene2403 chr7 ENCODE exon 115553646 115553764 . + . Parent=gene2403 chr7 ENCODE exon 115556807 115556893 . + . Parent=gene2403 chr7 ENCODE exon 115557095 115557184 . + . Parent=gene2403 chr7 ENCODE exon 115565590 115565781 . + . Parent=gene2403 chr7 ENCODE exon 115571125 115571263 . + . Parent=gene2403 chr7 ENCODE exon 115740086 115740102 . + . Parent=gene2403 ### chr7 ENCODE gene 115522085 115740113 . + . ID=gene2404;Name=AC006159.1-013;name2=CAV2 chr7 ENCODE exon 115522085 115522119 . + . Parent=gene2404 chr7 ENCODE exon 115523857 115524055 . + . Parent=gene2404 chr7 ENCODE exon 115550437 115550515 . + . Parent=gene2404 chr7 ENCODE exon 115553646 115553764 . + . Parent=gene2404 chr7 ENCODE exon 115739976 115740113 . + . Parent=gene2404 ### chr7 ENCODE gene 115522093 115740113 . + . ID=gene2405;Name=AC006159.1-017;name2=CAV2 chr7 ENCODE exon 115522093 115522119 . + . Parent=gene2405 chr7 ENCODE exon 115523857 115524055 . + . Parent=gene2405 chr7 ENCODE exon 115553646 115553764 . + . Parent=gene2405 chr7 ENCODE exon 115556807 115556893 . + . Parent=gene2405 chr7 ENCODE exon 115571125 115571263 . + . Parent=gene2405 chr7 ENCODE exon 115740086 115740113 . + . Parent=gene2405 ### chr7 ENCODE gene 115522095 115740110 . + . ID=gene2406;Name=AC006159.1-011;name2=CAV2 chr7 ENCODE exon 115522095 115522119 . + . Parent=gene2406 chr7 ENCODE exon 115523857 115524055 . + . Parent=gene2406 chr7 ENCODE exon 115550437 115550515 . + . Parent=gene2406 chr7 ENCODE exon 115553646 115553764 . + . Parent=gene2406 chr7 ENCODE exon 115556807 115556893 . + . Parent=gene2406 chr7 ENCODE exon 115571125 115571263 . + . Parent=gene2406 chr7 ENCODE exon 115740086 115740110 . + . Parent=gene2406 ### chr7 ENCODE gene 115523882 115740098 . + . ID=gene2407;Name=AC006159.1-005;name2=CAV2 chr7 ENCODE exon 115523882 115524055 . + . Parent=gene2407 chr7 ENCODE exon 115587923 115588022 . + . Parent=gene2407 chr7 ENCODE exon 115641417 115641485 . + . Parent=gene2407 chr7 ENCODE exon 115654168 115654365 . + . Parent=gene2407 chr7 ENCODE exon 115659769 115659908 . + . Parent=gene2407 chr7 ENCODE exon 115661327 115661491 . + . Parent=gene2407 chr7 ENCODE exon 115731774 115731988 . + . Parent=gene2407 chr7 ENCODE exon 115733249 115733346 . + . Parent=gene2407 chr7 ENCODE exon 115733846 115733936 . + . Parent=gene2407 chr7 ENCODE exon 115734265 115734452 . + . Parent=gene2407 chr7 ENCODE exon 115739976 115740098 . + . Parent=gene2407 ### chr7 ENCODE gene 115523883 115740034 . + . ID=gene2408;Name=AC006159.1-006;name2=CAV2 chr7 ENCODE exon 115523883 115524055 . + . Parent=gene2408 chr7 ENCODE exon 115550437 115550515 . + . Parent=gene2408 chr7 ENCODE exon 115553646 115553764 . + . Parent=gene2408 chr7 ENCODE exon 115556807 115556893 . + . Parent=gene2408 chr7 ENCODE exon 115661327 115661491 . + . Parent=gene2408 chr7 ENCODE exon 115731774 115731988 . + . Parent=gene2408 chr7 ENCODE exon 115733249 115733346 . + . Parent=gene2408 chr7 ENCODE exon 115739976 115740034 . + . Parent=gene2408 ### chr7 ENCODE gene 115523883 115740113 . + . ID=gene2409;Name=AC006159.1-004;name2=CAV2 chr7 ENCODE exon 115523883 115524055 . + . Parent=gene2409 chr7 ENCODE exon 115553646 115553764 . + . Parent=gene2409 chr7 ENCODE exon 115556807 115556893 . + . Parent=gene2409 chr7 ENCODE exon 115557095 115557184 . + . Parent=gene2409 chr7 ENCODE exon 115571125 115571186 . + . Parent=gene2409 chr7 ENCODE exon 115573828 115573924 . + . Parent=gene2409 chr7 ENCODE exon 115641273 115641485 . + . Parent=gene2409 chr7 ENCODE exon 115661327 115661491 . + . Parent=gene2409 chr7 ENCODE exon 115731774 115731988 . + . Parent=gene2409 chr7 ENCODE exon 115733249 115733346 . + . Parent=gene2409 chr7 ENCODE exon 115733846 115733936 . + . Parent=gene2409 chr7 ENCODE exon 115734265 115734452 . + . Parent=gene2409 chr7 ENCODE exon 115734539 115734663 . + . Parent=gene2409 chr7 ENCODE exon 115739976 115740113 . + . Parent=gene2409 ### chr7 ENCODE gene 115523883 115740114 . + . ID=gene2410;Name=AC006159.1-007;name2=CAV2 chr7 ENCODE exon 115523883 115524055 . + . Parent=gene2410 chr7 ENCODE exon 115565590 115565781 . + . Parent=gene2410 chr7 ENCODE exon 115571125 115571263 . + . Parent=gene2410 chr7 ENCODE exon 115740086 115740114 . + . Parent=gene2410 ### chr7 ENCODE gene 115733247 115740263 . + . ID=gene2411;Name=AC006159.1-003;name2=CAV2 chr7 ENCODE exon 115733247 115733346 . + . Parent=gene2411 chr7 ENCODE CDS 115733312 115733346 . + 0 Parent=gene2411 chr7 ENCODE exon 115733846 115733936 . + . Parent=gene2411 chr7 ENCODE CDS 115733846 115733936 . + 1 Parent=gene2411 chr7 ENCODE exon 115734265 115734452 . + . Parent=gene2411 chr7 ENCODE CDS 115734265 115734452 . + 0 Parent=gene2411 chr7 ENCODE CDS 115739976 115740126 . + 1 Parent=gene2411 chr7 ENCODE exon 115739976 115740263 . + . Parent=gene2411 ### chr7 ENCODE gene 115733395 115742546 . + . ID=gene2412;Name=AC006159.1-001;name2=CAV2 chr7 ENCODE exon 115733395 115733936 . + . Parent=gene2412 chr7 ENCODE CDS 115733787 115733936 . + 0 Parent=gene2412 chr7 ENCODE exon 115734265 115734452 . + . Parent=gene2412 chr7 ENCODE CDS 115734265 115734452 . + 0 Parent=gene2412 chr7 ENCODE CDS 115739976 115740126 . + 1 Parent=gene2412 chr7 ENCODE exon 115739976 115742546 . + . Parent=gene2412 ### chr7 ENCODE gene 115733606 115740939 . + . ID=gene2413;Name=AC006159.1-018;name2=CAV2 chr7 ENCODE exon 115733606 115733936 . + . Parent=gene2413 chr7 ENCODE exon 115734265 115734283 . + . Parent=gene2413 chr7 ENCODE exon 115739976 115740939 . + . Parent=gene2413 ### chr7 ENCODE gene 115733787 115740559 . + . ID=gene2414;Name=AC006159.1-019;name2=CAV2 chr7 ENCODE exon 115733787 115733936 . + . Parent=gene2414 chr7 ENCODE CDS 115733787 115733936 . + 0 Parent=gene2414 chr7 ENCODE CDS 115739976 115740164 . + 0 Parent=gene2414 chr7 ENCODE exon 115739976 115740559 . + . Parent=gene2414 ### chr7 ENCODE gene 115734102 115740358 . + . ID=gene2415;Name=AC006159.1-002;name2=CAV2 chr7 ENCODE exon 115734102 115734452 . + . Parent=gene2415 chr7 ENCODE exon 115739976 115740358 . + . Parent=gene2415 ### chr7 ENCODE gene 115758790 115795181 . + . ID=gene2416;Name=AC006159.2-001;name2=CAV1 chr7 ENCODE exon 115758790 115759097 . + . Parent=gene2416 chr7 ENCODE CDS 115759068 115759097 . + 0 Parent=gene2416 chr7 ENCODE exon 115760530 115760694 . + . Parent=gene2416 chr7 ENCODE CDS 115760530 115760694 . + 0 Parent=gene2416 chr7 ENCODE CDS 115792951 115793292 . + 0 Parent=gene2416 chr7 ENCODE exon 115792951 115795181 . + . Parent=gene2416 ### chr7 ENCODE gene 115759014 115793641 . + . ID=gene2417;name2=CAV1;Name=AC006159.2-002 chr7 ENCODE exon 115759014 115759810 . + . Parent=gene2417 chr7 ENCODE exon 115760530 115760694 . + . Parent=gene2417 chr7 ENCODE exon 115792951 115793641 . + . Parent=gene2417 ### chr7 ENCODE gene 115759017 115761023 . + . ID=gene2418;Name=AC006159.2-005;name2=CAV1 chr7 ENCODE exon 115759017 115759097 . + . Parent=gene2418 chr7 ENCODE exon 115760530 115761023 . + . Parent=gene2418 ### chr7 ENCODE gene 115760282 115793050 . + . ID=gene2419;name2=CAV1;Name=AC006159.2-004 chr7 ENCODE exon 115760282 115760393 . + . Parent=gene2419 chr7 ENCODE exon 115760530 115760694 . + . Parent=gene2419 chr7 ENCODE CDS 115760593 115760694 . + 0 Parent=gene2419 chr7 ENCODE exon 115792951 115793050 . + . Parent=gene2419 chr7 ENCODE CDS 115792951 115793050 . + 0 Parent=gene2419 ### chr7 ENCODE gene 115760358 115793638 . + . ID=gene2420;Name=AC006159.2-003;name2=CAV1 chr7 ENCODE exon 115760358 115760694 . + . Parent=gene2420 chr7 ENCODE CDS 115760593 115760694 . + 0 Parent=gene2420 chr7 ENCODE CDS 115792951 115793292 . + 0 Parent=gene2420 chr7 ENCODE exon 115792951 115793638 . + . Parent=gene2420 ### chr7 ENCODE gene 115906410 116030347 . + . ID=gene2421;Name=AC002543.3-001;name2=MET chr7 ENCODE exon 115906410 115906582 . + . Parent=gene2421 chr7 ENCODE exon 115933076 115934289 . + . Parent=gene2421 chr7 ENCODE CDS 115933090 115934289 . + 0 Parent=gene2421 chr7 ENCODE exon 115965673 115965864 . + . Parent=gene2421 chr7 ENCODE CDS 115965673 115965864 . + 0 Parent=gene2421 chr7 ENCODE exon 115973955 115974089 . + . Parent=gene2421 chr7 ENCODE CDS 115973955 115974089 . + 0 Parent=gene2421 chr7 ENCODE exon 115974857 115975030 . + . Parent=gene2421 chr7 ENCODE CDS 115974857 115975030 . + 0 Parent=gene2421 chr7 ENCODE exon 115989360 115989520 . + . Parent=gene2421 chr7 ENCODE CDS 115989360 115989520 . + 0 Parent=gene2421 chr7 ENCODE exon 115991442 115991544 . + . Parent=gene2421 chr7 ENCODE CDS 115991442 115991544 . + 1 Parent=gene2421 chr7 ENCODE exon 115991643 115991779 . + . Parent=gene2421 chr7 ENCODE CDS 115991643 115991779 . + 0 Parent=gene2421 chr7 ENCODE exon 115992464 115992625 . + . Parent=gene2421 chr7 ENCODE CDS 115992464 115992625 . + 1 Parent=gene2421 chr7 ENCODE exon 115993342 115993495 . + . Parent=gene2421 chr7 ENCODE CDS 115993342 115993495 . + 1 Parent=gene2421 chr7 ENCODE exon 115997055 115997273 . + . Parent=gene2421 chr7 ENCODE CDS 115997055 115997273 . + 0 Parent=gene2421 chr7 ENCODE exon 116003650 116003796 . + . Parent=gene2421 chr7 ENCODE CDS 116003650 116003796 . + 0 Parent=gene2421 chr7 ENCODE exon 116005503 116005659 . + . Parent=gene2421 chr7 ENCODE CDS 116005503 116005659 . + 0 Parent=gene2421 chr7 ENCODE exon 116005854 116005994 . + . Parent=gene2421 chr7 ENCODE CDS 116005854 116005994 . + 2 Parent=gene2421 chr7 ENCODE exon 116008886 116009116 . + . Parent=gene2421 chr7 ENCODE CDS 116008886 116009116 . + 2 Parent=gene2421 chr7 ENCODE exon 116011394 116011474 . + . Parent=gene2421 chr7 ENCODE CDS 116011394 116011474 . + 2 Parent=gene2421 chr7 ENCODE exon 116012781 116012962 . + . Parent=gene2421 chr7 ENCODE CDS 116012781 116012962 . + 2 Parent=gene2421 chr7 ENCODE exon 116015993 116016102 . + . Parent=gene2421 chr7 ENCODE CDS 116015993 116016102 . + 0 Parent=gene2421 chr7 ENCODE exon 116017309 116017474 . + . Parent=gene2421 chr7 ENCODE CDS 116017309 116017474 . + 1 Parent=gene2421 chr7 ENCODE exon 116029660 116029796 . + . Parent=gene2421 chr7 ENCODE CDS 116029660 116029796 . + 0 Parent=gene2421 chr7 ENCODE CDS 116029892 116030129 . + 1 Parent=gene2421 chr7 ENCODE exon 116029892 116030347 . + . Parent=gene2421 ### chr7 ENCODE gene 115906410 116032391 . + . ID=gene2422;Name=AC002543.3-002;name2=MET chr7 ENCODE exon 115906410 115906582 . + . Parent=gene2422 chr7 ENCODE exon 115933076 115934289 . + . Parent=gene2422 chr7 ENCODE CDS 115933090 115934289 . + 0 Parent=gene2422 chr7 ENCODE exon 115965673 115965864 . + . Parent=gene2422 chr7 ENCODE CDS 115965673 115965864 . + 0 Parent=gene2422 chr7 ENCODE exon 115973955 115974089 . + . Parent=gene2422 chr7 ENCODE CDS 115973955 115974089 . + 0 Parent=gene2422 chr7 ENCODE exon 115974857 115975030 . + . Parent=gene2422 chr7 ENCODE CDS 115974857 115975030 . + 0 Parent=gene2422 chr7 ENCODE exon 115989360 115989520 . + . Parent=gene2422 chr7 ENCODE CDS 115989360 115989520 . + 0 Parent=gene2422 chr7 ENCODE exon 115991442 115991544 . + . Parent=gene2422 chr7 ENCODE CDS 115991442 115991544 . + 1 Parent=gene2422 chr7 ENCODE exon 115991643 115991779 . + . Parent=gene2422 chr7 ENCODE CDS 115991643 115991779 . + 0 Parent=gene2422 chr7 ENCODE exon 115992464 115992625 . + . Parent=gene2422 chr7 ENCODE CDS 115992464 115992625 . + 1 Parent=gene2422 chr7 ENCODE exon 115993396 115993495 . + . Parent=gene2422 chr7 ENCODE CDS 115993396 115993495 . + 1 Parent=gene2422 chr7 ENCODE exon 115997055 115997273 . + . Parent=gene2422 chr7 ENCODE CDS 115997055 115997273 . + 0 Parent=gene2422 chr7 ENCODE exon 116003650 116003796 . + . Parent=gene2422 chr7 ENCODE CDS 116003650 116003796 . + 0 Parent=gene2422 chr7 ENCODE exon 116005503 116005659 . + . Parent=gene2422 chr7 ENCODE CDS 116005503 116005659 . + 0 Parent=gene2422 chr7 ENCODE exon 116005854 116005994 . + . Parent=gene2422 chr7 ENCODE CDS 116005854 116005994 . + 2 Parent=gene2422 chr7 ENCODE exon 116008886 116009116 . + . Parent=gene2422 chr7 ENCODE CDS 116008886 116009116 . + 2 Parent=gene2422 chr7 ENCODE exon 116011394 116011474 . + . Parent=gene2422 chr7 ENCODE CDS 116011394 116011474 . + 2 Parent=gene2422 chr7 ENCODE exon 116012781 116012962 . + . Parent=gene2422 chr7 ENCODE CDS 116012781 116012962 . + 2 Parent=gene2422 chr7 ENCODE exon 116015993 116016102 . + . Parent=gene2422 chr7 ENCODE CDS 116015993 116016102 . + 0 Parent=gene2422 chr7 ENCODE exon 116017309 116017474 . + . Parent=gene2422 chr7 ENCODE CDS 116017309 116017474 . + 1 Parent=gene2422 chr7 ENCODE exon 116029660 116029796 . + . Parent=gene2422 chr7 ENCODE CDS 116029660 116029796 . + 0 Parent=gene2422 chr7 ENCODE CDS 116029892 116030129 . + 1 Parent=gene2422 chr7 ENCODE exon 116029892 116032391 . + . Parent=gene2422 ### chr7 ENCODE gene 115906411 115933604 . + . ID=gene2423;Name=AC002543.3-005;name2=MET chr7 ENCODE exon 115906411 115906582 . + . Parent=gene2423 chr7 ENCODE exon 115929755 115929804 . + . Parent=gene2423 chr7 ENCODE exon 115933076 115933604 . + . Parent=gene2423 chr7 ENCODE CDS 115933090 115933604 . + 0 Parent=gene2423 ### chr7 ENCODE gene 115958151 115989419 . + . ID=gene2424;Name=AC002543.3-003;name2=MET chr7 ENCODE exon 115958151 115958254 . + . Parent=gene2424 chr7 ENCODE exon 115958777 115958852 . + . Parent=gene2424 chr7 ENCODE exon 115965673 115965864 . + . Parent=gene2424 chr7 ENCODE exon 115973955 115974089 . + . Parent=gene2424 chr7 ENCODE exon 115974857 115975030 . + . Parent=gene2424 chr7 ENCODE exon 115989360 115989419 . + . Parent=gene2424 ### chr7 ENCODE gene 115992522 116003914 . + . ID=gene2425;Name=AC002543.3-004;name2=MET chr7 ENCODE exon 115992522 115992625 . + . Parent=gene2425 chr7 ENCODE CDS 115992522 115992625 . + 0 Parent=gene2425 chr7 ENCODE exon 115993396 115993495 . + . Parent=gene2425 chr7 ENCODE CDS 115993396 115993495 . + 1 Parent=gene2425 chr7 ENCODE exon 115997055 115997273 . + . Parent=gene2425 chr7 ENCODE CDS 115997055 115997273 . + 0 Parent=gene2425 chr7 ENCODE CDS 116003650 116003871 . + 0 Parent=gene2425 chr7 ENCODE exon 116003650 116003914 . + . Parent=gene2425 ### chr7 ENCODE gene 116045075 116132791 . + . ID=gene2426;Name=AC002543.1-010;name2=CAPZA2 chr7 ENCODE exon 116045075 116045107 . + . Parent=gene2426 chr7 ENCODE exon 116095196 116095355 . + . Parent=gene2426 chr7 ENCODE exon 116122132 116122195 . + . Parent=gene2426 chr7 ENCODE exon 116126999 116127050 . + . Parent=gene2426 chr7 ENCODE exon 116132777 116132791 . + . Parent=gene2426 ### chr7 ENCODE gene 116045075 116132791 . + . ID=gene2427;Name=AC002543.1-009;name2=CAPZA2 chr7 ENCODE exon 116045075 116045107 . + . Parent=gene2427 chr7 ENCODE exon 116122132 116122195 . + . Parent=gene2427 chr7 ENCODE exon 116126999 116127050 . + . Parent=gene2427 chr7 ENCODE exon 116132777 116132791 . + . Parent=gene2427 ### chr7 ENCODE gene 116096517 116153266 . + . ID=gene2428;Name=AC002543.1-002;name2=CAPZA2 chr7 ENCODE exon 116096517 116096655 . + . Parent=gene2428 chr7 ENCODE CDS 116096617 116096655 . + 0 Parent=gene2428 chr7 ENCODE exon 116122132 116122195 . + . Parent=gene2428 chr7 ENCODE CDS 116122132 116122195 . + 0 Parent=gene2428 chr7 ENCODE exon 116126999 116127050 . + . Parent=gene2428 chr7 ENCODE CDS 116126999 116127050 . + 2 Parent=gene2428 chr7 ENCODE exon 116132777 116132840 . + . Parent=gene2428 chr7 ENCODE CDS 116132777 116132840 . + 1 Parent=gene2428 chr7 ENCODE exon 116138182 116138388 . + . Parent=gene2428 chr7 ENCODE CDS 116138182 116138388 . + 0 Parent=gene2428 chr7 ENCODE exon 116140268 116140347 . + . Parent=gene2428 chr7 ENCODE CDS 116140268 116140347 . + 0 Parent=gene2428 chr7 ENCODE exon 116144238 116144316 . + . Parent=gene2428 chr7 ENCODE CDS 116144238 116144316 . + 1 Parent=gene2428 chr7 ENCODE exon 116146074 116146145 . + . Parent=gene2428 chr7 ENCODE CDS 116146074 116146145 . + 0 Parent=gene2428 chr7 ENCODE exon 116150065 116150127 . + . Parent=gene2428 chr7 ENCODE CDS 116150065 116150127 . + 0 Parent=gene2428 chr7 ENCODE CDS 116151732 116151872 . + 0 Parent=gene2428 chr7 ENCODE exon 116151732 116153266 . + . Parent=gene2428 ### chr7 ENCODE gene 116096592 116150115 . + . ID=gene2429;Name=AC002543.1-004;name2=CAPZA2 chr7 ENCODE exon 116096592 116096655 . + . Parent=gene2429 chr7 ENCODE exon 116114072 116114152 . + . Parent=gene2429 chr7 ENCODE exon 116122132 116122195 . + . Parent=gene2429 chr7 ENCODE exon 116126999 116127050 . + . Parent=gene2429 chr7 ENCODE exon 116132777 116132840 . + . Parent=gene2429 chr7 ENCODE exon 116138182 116138388 . + . Parent=gene2429 chr7 ENCODE exon 116140268 116140347 . + . Parent=gene2429 chr7 ENCODE exon 116144238 116144316 . + . Parent=gene2429 chr7 ENCODE exon 116146074 116146145 . + . Parent=gene2429 chr7 ENCODE exon 116150065 116150115 . + . Parent=gene2429 ### chr7 ENCODE gene 116096605 116138759 . + . ID=gene2430;Name=AC002543.1-006;name2=CAPZA2 chr7 ENCODE exon 116096605 116096655 . + . Parent=gene2430 chr7 ENCODE exon 116122132 116122195 . + . Parent=gene2430 chr7 ENCODE exon 116126999 116127050 . + . Parent=gene2430 chr7 ENCODE exon 116132777 116132840 . + . Parent=gene2430 chr7 ENCODE exon 116138182 116138759 . + . Parent=gene2430 ### chr7 ENCODE gene 116096608 116122704 . + . ID=gene2431;Name=AC002543.1-003;name2=CAPZA2 chr7 ENCODE exon 116096608 116096655 . + . Parent=gene2431 chr7 ENCODE exon 116122132 116122704 . + . Parent=gene2431 ### chr7 ENCODE gene 116096609 116108295 . + . ID=gene2432;Name=AC002543.1-007;name2=CAPZA2 chr7 ENCODE exon 116096609 116096655 . + . Parent=gene2432 chr7 ENCODE exon 116107717 116108295 . + . Parent=gene2432 ### chr7 ENCODE gene 116096619 116140741 . + . ID=gene2433;Name=AC002543.1-005;name2=CAPZA2 chr7 ENCODE exon 116096619 116096655 . + . Parent=gene2433 chr7 ENCODE exon 116122132 116122195 . + . Parent=gene2433 chr7 ENCODE exon 116126999 116127050 . + . Parent=gene2433 chr7 ENCODE exon 116132777 116132840 . + . Parent=gene2433 chr7 ENCODE exon 116138182 116138388 . + . Parent=gene2433 chr7 ENCODE exon 116140268 116140741 . + . Parent=gene2433 ### chr7 ENCODE gene 116140347 116150127 . + . ID=gene2434;Name=AC002543.1-011;name2=CAPZA2 chr7 ENCODE exon 116140347 116143760 . + . Parent=gene2434 chr7 ENCODE exon 116144238 116144316 . + . Parent=gene2434 chr7 ENCODE exon 116146074 116146145 . + . Parent=gene2434 chr7 ENCODE exon 116150065 116150127 . + . Parent=gene2434 ### chr7 ENCODE gene 116149461 116151765 . + . ID=gene2435;Name=AC002543.1-012;name2=CAPZA2 chr7 ENCODE exon 116149461 116150127 . + . Parent=gene2435 chr7 ENCODE exon 116151732 116151765 . + . Parent=gene2435 ### chr7 ENCODE gene 116149461 116151765 . + . ID=gene2436;Name=AC002543.1-008;name2=CAPZA2 chr7 ENCODE exon 116149461 116150127 . + . Parent=gene2436 chr7 ENCODE exon 116151732 116151765 . + . Parent=gene2436 ### chr7 ENCODE gene 116187332 116457912 . + . ID=gene2437;Name=AC003987.1-002;name2=ST7 chr7 ENCODE exon 116187332 116187696 . + . Parent=gene2437 chr7 ENCODE CDS 116187546 116187696 . + 0 Parent=gene2437 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2437 chr7 ENCODE CDS 116333767 116333849 . + 2 Parent=gene2437 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2437 chr7 ENCODE CDS 116353566 116353725 . + 0 Parent=gene2437 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2437 chr7 ENCODE CDS 116363798 116363852 . + 2 Parent=gene2437 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2437 chr7 ENCODE CDS 116364496 116364611 . + 1 Parent=gene2437 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2437 chr7 ENCODE CDS 116365890 116365965 . + 2 Parent=gene2437 chr7 ENCODE exon 116368129 116368197 . + . Parent=gene2437 chr7 ENCODE CDS 116368129 116368197 . + 1 Parent=gene2437 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2437 chr7 ENCODE CDS 116370086 116370240 . + 1 Parent=gene2437 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2437 chr7 ENCODE CDS 116372440 116372537 . + 2 Parent=gene2437 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2437 chr7 ENCODE CDS 116404867 116404981 . + 0 Parent=gene2437 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2437 chr7 ENCODE CDS 116423326 116423398 . + 2 Parent=gene2437 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2437 chr7 ENCODE CDS 116424839 116424941 . + 1 Parent=gene2437 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2437 chr7 ENCODE CDS 116443792 116443942 . + 0 Parent=gene2437 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2437 chr7 ENCODE CDS 116453089 116453181 . + 2 Parent=gene2437 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2437 chr7 ENCODE CDS 116455928 116456067 . + 2 Parent=gene2437 chr7 ENCODE CDS 116456866 116456985 . + 0 Parent=gene2437 chr7 ENCODE exon 116456866 116457912 . + . Parent=gene2437 ### chr7 ENCODE gene 116187347 116464108 . + . ID=gene2438;Name=AC003987.1-007;name2=ST7 chr7 ENCODE exon 116187347 116187696 . + . Parent=gene2438 chr7 ENCODE CDS 116187546 116187696 . + 0 Parent=gene2438 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2438 chr7 ENCODE CDS 116333767 116333849 . + 2 Parent=gene2438 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2438 chr7 ENCODE CDS 116353566 116353725 . + 0 Parent=gene2438 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2438 chr7 ENCODE CDS 116363798 116363852 . + 2 Parent=gene2438 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2438 chr7 ENCODE CDS 116364496 116364611 . + 1 Parent=gene2438 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2438 chr7 ENCODE CDS 116365890 116365965 . + 2 Parent=gene2438 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2438 chr7 ENCODE CDS 116370086 116370240 . + 1 Parent=gene2438 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2438 chr7 ENCODE CDS 116372440 116372537 . + 2 Parent=gene2438 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2438 chr7 ENCODE CDS 116404867 116404981 . + 0 Parent=gene2438 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2438 chr7 ENCODE CDS 116423326 116423398 . + 2 Parent=gene2438 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2438 chr7 ENCODE CDS 116424839 116424941 . + 1 Parent=gene2438 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2438 chr7 ENCODE CDS 116443792 116443942 . + 0 Parent=gene2438 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2438 chr7 ENCODE CDS 116453089 116453181 . + 2 Parent=gene2438 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2438 chr7 ENCODE CDS 116455928 116456067 . + 2 Parent=gene2438 chr7 ENCODE CDS 116463767 116463862 . + 0 Parent=gene2438 chr7 ENCODE exon 116463767 116464108 . + . Parent=gene2438 ### chr7 ENCODE gene 116187352 116372537 . + . ID=gene2439;Name=AC003987.1-015;name2=ST7 chr7 ENCODE exon 116187352 116187696 . + . Parent=gene2439 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2439 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2439 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2439 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2439 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2439 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2439 ### chr7 ENCODE gene 116187384 116464108 . + . ID=gene2440;Name=AC003987.1-001;name2=ST7 chr7 ENCODE exon 116187384 116187696 . + . Parent=gene2440 chr7 ENCODE CDS 116187546 116187696 . + 0 Parent=gene2440 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2440 chr7 ENCODE CDS 116333767 116333849 . + 2 Parent=gene2440 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2440 chr7 ENCODE CDS 116353566 116353725 . + 0 Parent=gene2440 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2440 chr7 ENCODE CDS 116363798 116363852 . + 2 Parent=gene2440 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2440 chr7 ENCODE CDS 116364496 116364611 . + 1 Parent=gene2440 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2440 chr7 ENCODE CDS 116365890 116365965 . + 2 Parent=gene2440 chr7 ENCODE exon 116368129 116368197 . + . Parent=gene2440 chr7 ENCODE CDS 116368129 116368197 . + 1 Parent=gene2440 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2440 chr7 ENCODE CDS 116370086 116370240 . + 1 Parent=gene2440 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2440 chr7 ENCODE CDS 116372440 116372537 . + 2 Parent=gene2440 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2440 chr7 ENCODE CDS 116404867 116404981 . + 0 Parent=gene2440 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2440 chr7 ENCODE CDS 116423326 116423398 . + 2 Parent=gene2440 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2440 chr7 ENCODE CDS 116424839 116424941 . + 1 Parent=gene2440 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2440 chr7 ENCODE CDS 116443792 116443942 . + 0 Parent=gene2440 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2440 chr7 ENCODE CDS 116453089 116453181 . + 2 Parent=gene2440 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2440 chr7 ENCODE CDS 116455928 116456067 . + 2 Parent=gene2440 chr7 ENCODE CDS 116463767 116463862 . + 0 Parent=gene2440 chr7 ENCODE exon 116463767 116464108 . + . Parent=gene2440 ### chr7 ENCODE gene 116187384 116464108 . + . ID=gene2441;Name=AC003987.1-014;name2=ST7 chr7 ENCODE exon 116187384 116187696 . + . Parent=gene2441 chr7 ENCODE CDS 116187546 116187696 . + 0 Parent=gene2441 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2441 chr7 ENCODE CDS 116333767 116333849 . + 2 Parent=gene2441 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2441 chr7 ENCODE CDS 116353566 116353725 . + 0 Parent=gene2441 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2441 chr7 ENCODE CDS 116363798 116363852 . + 2 Parent=gene2441 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2441 chr7 ENCODE CDS 116364496 116364611 . + 1 Parent=gene2441 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2441 chr7 ENCODE CDS 116365890 116365965 . + 2 Parent=gene2441 chr7 ENCODE exon 116368129 116368197 . + . Parent=gene2441 chr7 ENCODE CDS 116368129 116368197 . + 1 Parent=gene2441 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2441 chr7 ENCODE CDS 116370086 116370240 . + 1 Parent=gene2441 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2441 chr7 ENCODE CDS 116372440 116372537 . + 2 Parent=gene2441 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2441 chr7 ENCODE CDS 116404867 116404981 . + 0 Parent=gene2441 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2441 chr7 ENCODE CDS 116423326 116423398 . + 2 Parent=gene2441 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2441 chr7 ENCODE CDS 116424839 116424941 . + 1 Parent=gene2441 chr7 ENCODE exon 116443792 116443927 . + . Parent=gene2441 chr7 ENCODE CDS 116443792 116443927 . + 0 Parent=gene2441 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2441 chr7 ENCODE CDS 116453089 116453181 . + 2 Parent=gene2441 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2441 chr7 ENCODE CDS 116455928 116456067 . + 2 Parent=gene2441 chr7 ENCODE CDS 116463767 116463862 . + 0 Parent=gene2441 chr7 ENCODE exon 116463767 116464108 . + . Parent=gene2441 ### chr7 ENCODE gene 116187506 116464022 . + . ID=gene2442;Name=AC003987.1-003;name2=ST7 chr7 ENCODE exon 116187506 116187696 . + . Parent=gene2442 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2442 chr7 ENCODE exon 116353566 116353675 . + . Parent=gene2442 chr7 ENCODE exon 116353697 116353725 . + . Parent=gene2442 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2442 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2442 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2442 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2442 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2442 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2442 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2442 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2442 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2442 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2442 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2442 chr7 ENCODE exon 116463767 116464022 . + . Parent=gene2442 ### chr7 ENCODE gene 116187904 116193822 . + . ID=gene2443;Name=AC106873.3-001;name2=ST7OT4 chr7 ENCODE exon 116187904 116188114 . + . Parent=gene2443 chr7 ENCODE exon 116188466 116188684 . + . Parent=gene2443 chr7 ENCODE exon 116188979 116189158 . + . Parent=gene2443 chr7 ENCODE CDS 116189090 116189158 . + 0 Parent=gene2443 chr7 ENCODE exon 116190428 116190728 . + . Parent=gene2443 chr7 ENCODE CDS 116190428 116190728 . + 0 Parent=gene2443 chr7 ENCODE CDS 116193158 116193297 . + 2 Parent=gene2443 chr7 ENCODE exon 116193158 116193822 . + . Parent=gene2443 ### chr7 ENCODE gene 116188244 116202579 . + . ID=gene2444;Name=AC106873.3-002;name2=ST7OT4 chr7 ENCODE exon 116188244 116188684 . + . Parent=gene2444 chr7 ENCODE exon 116188979 116189158 . + . Parent=gene2444 chr7 ENCODE exon 116192594 116192690 . + . Parent=gene2444 chr7 ENCODE exon 116202404 116202579 . + . Parent=gene2444 ### chr7 ENCODE gene 116188625 116202579 . + . ID=gene2445;Name=AC106873.3-003;name2=ST7OT4 chr7 ENCODE exon 116188625 116188684 . + . Parent=gene2445 chr7 ENCODE exon 116188979 116189158 . + . Parent=gene2445 chr7 ENCODE exon 116202404 116202579 . + . Parent=gene2445 ### chr7 ENCODE gene 116188979 116202579 . + . ID=gene2446;name2=ST7OT4;Name=AC106873.3-004 chr7 ENCODE exon 116188979 116189158 . + . Parent=gene2446 chr7 ENCODE CDS 116189090 116189158 . + 0 Parent=gene2446 chr7 ENCODE exon 116190428 116190728 . + . Parent=gene2446 chr7 ENCODE CDS 116190428 116190728 . + 0 Parent=gene2446 chr7 ENCODE exon 116192594 116192690 . + . Parent=gene2446 chr7 ENCODE CDS 116192594 116192690 . + 2 Parent=gene2446 chr7 ENCODE CDS 116202404 116202419 . + 1 Parent=gene2446 chr7 ENCODE exon 116202404 116202579 . + . Parent=gene2446 ### chr7 ENCODE gene 116199851 116201477 . - . ID=gene2447;Name=AC106873.4-001;name2=AC106873.4 chr7 ENCODE exon 116199851 116200127 . - . Parent=gene2447 chr7 ENCODE CDS 116200100 116200127 . - 1 Parent=gene2447 chr7 ENCODE CDS 116201296 116201426 . - 0 Parent=gene2447 chr7 ENCODE exon 116201296 116201477 . - . Parent=gene2447 ### chr7 ENCODE gene 116248893 116365930 . + . ID=gene2448;Name=AC003987.1-016;name2=ST7 chr7 ENCODE exon 116248893 116249019 . + . Parent=gene2448 chr7 ENCODE CDS 116249007 116249019 . + 0 Parent=gene2448 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2448 chr7 ENCODE CDS 116333767 116333849 . + 2 Parent=gene2448 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2448 chr7 ENCODE CDS 116353566 116353725 . + 0 Parent=gene2448 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2448 chr7 ENCODE CDS 116363798 116363852 . + 2 Parent=gene2448 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2448 chr7 ENCODE CDS 116364496 116364611 . + 1 Parent=gene2448 chr7 ENCODE exon 116365890 116365930 . + . Parent=gene2448 chr7 ENCODE CDS 116365890 116365930 . + 2 Parent=gene2448 ### chr7 ENCODE gene 116248941 116363814 . + . ID=gene2449;Name=AC003987.1-019;name2=ST7 chr7 ENCODE exon 116248941 116249019 . + . Parent=gene2449 chr7 ENCODE exon 116332618 116332820 . + . Parent=gene2449 chr7 ENCODE CDS 116332820 116332820 . + 0 Parent=gene2449 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2449 chr7 ENCODE CDS 116333767 116333849 . + 2 Parent=gene2449 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2449 chr7 ENCODE CDS 116353566 116353725 . + 0 Parent=gene2449 chr7 ENCODE exon 116363798 116363814 . + . Parent=gene2449 chr7 ENCODE CDS 116363798 116363814 . + 2 Parent=gene2449 ### chr7 ENCODE gene 116254189 116424937 . + . ID=gene2450;Name=AC003987.1-011;name2=ST7 chr7 ENCODE exon 116254189 116254634 . + . Parent=gene2450 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2450 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2450 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2450 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2450 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2450 chr7 ENCODE exon 116368129 116368197 . + . Parent=gene2450 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2450 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2450 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2450 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2450 chr7 ENCODE exon 116424138 116424273 . + . Parent=gene2450 chr7 ENCODE exon 116424839 116424937 . + . Parent=gene2450 ### chr7 ENCODE gene 116254189 116464108 . + . ID=gene2451;Name=AC003987.1-012;name2=ST7 chr7 ENCODE exon 116254189 116254634 . + . Parent=gene2451 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2451 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2451 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2451 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2451 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2451 chr7 ENCODE exon 116368129 116370240 . + . Parent=gene2451 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2451 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2451 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2451 chr7 ENCODE exon 116424138 116424273 . + . Parent=gene2451 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2451 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2451 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2451 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2451 chr7 ENCODE exon 116463767 116464108 . + . Parent=gene2451 ### chr7 ENCODE gene 116254223 116464108 . + . ID=gene2452;Name=AC003987.1-004;name2=ST7 chr7 ENCODE exon 116254223 116254634 . + . Parent=gene2452 chr7 ENCODE exon 116332618 116332820 . + . Parent=gene2452 chr7 ENCODE CDS 116332820 116332820 . + 0 Parent=gene2452 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2452 chr7 ENCODE CDS 116333767 116333849 . + 2 Parent=gene2452 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2452 chr7 ENCODE CDS 116353566 116353725 . + 0 Parent=gene2452 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2452 chr7 ENCODE CDS 116363798 116363852 . + 2 Parent=gene2452 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2452 chr7 ENCODE CDS 116364496 116364611 . + 1 Parent=gene2452 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2452 chr7 ENCODE CDS 116365890 116365965 . + 2 Parent=gene2452 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2452 chr7 ENCODE CDS 116370086 116370240 . + 1 Parent=gene2452 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2452 chr7 ENCODE CDS 116372440 116372537 . + 2 Parent=gene2452 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2452 chr7 ENCODE CDS 116404867 116404981 . + 0 Parent=gene2452 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2452 chr7 ENCODE CDS 116423326 116423398 . + 2 Parent=gene2452 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2452 chr7 ENCODE CDS 116424839 116424941 . + 1 Parent=gene2452 chr7 ENCODE exon 116443792 116443927 . + . Parent=gene2452 chr7 ENCODE CDS 116443792 116443927 . + 0 Parent=gene2452 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2452 chr7 ENCODE CDS 116453089 116453181 . + 2 Parent=gene2452 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2452 chr7 ENCODE CDS 116455928 116456067 . + 2 Parent=gene2452 chr7 ENCODE CDS 116463767 116463862 . + 0 Parent=gene2452 chr7 ENCODE exon 116463767 116464108 . + . Parent=gene2452 ### chr7 ENCODE gene 116254282 116464108 . + . ID=gene2453;Name=AC003987.1-006;name2=ST7 chr7 ENCODE exon 116254282 116254634 . + . Parent=gene2453 chr7 ENCODE CDS 116254613 116254634 . + 0 Parent=gene2453 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2453 chr7 ENCODE CDS 116333767 116333849 . + 2 Parent=gene2453 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2453 chr7 ENCODE CDS 116353566 116353725 . + 0 Parent=gene2453 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2453 chr7 ENCODE CDS 116363798 116363852 . + 2 Parent=gene2453 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2453 chr7 ENCODE CDS 116364496 116364611 . + 1 Parent=gene2453 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2453 chr7 ENCODE CDS 116365890 116365965 . + 2 Parent=gene2453 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2453 chr7 ENCODE CDS 116370086 116370240 . + 1 Parent=gene2453 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2453 chr7 ENCODE CDS 116372440 116372537 . + 2 Parent=gene2453 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2453 chr7 ENCODE CDS 116404867 116404981 . + 0 Parent=gene2453 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2453 chr7 ENCODE CDS 116423326 116423398 . + 2 Parent=gene2453 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2453 chr7 ENCODE CDS 116424839 116424941 . + 1 Parent=gene2453 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2453 chr7 ENCODE CDS 116443792 116443942 . + 0 Parent=gene2453 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2453 chr7 ENCODE CDS 116453089 116453181 . + 2 Parent=gene2453 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2453 chr7 ENCODE CDS 116455928 116456067 . + 2 Parent=gene2453 chr7 ENCODE CDS 116463767 116463862 . + 0 Parent=gene2453 chr7 ENCODE exon 116463767 116464108 . + . Parent=gene2453 ### chr7 ENCODE gene 116254282 116464108 . + . ID=gene2454;Name=AC003987.1-005;name2=ST7 chr7 ENCODE exon 116254282 116254634 . + . Parent=gene2454 chr7 ENCODE CDS 116254613 116254634 . + 0 Parent=gene2454 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2454 chr7 ENCODE CDS 116333767 116333849 . + 2 Parent=gene2454 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2454 chr7 ENCODE CDS 116353566 116353725 . + 0 Parent=gene2454 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2454 chr7 ENCODE CDS 116363798 116363852 . + 2 Parent=gene2454 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2454 chr7 ENCODE CDS 116364496 116364611 . + 1 Parent=gene2454 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2454 chr7 ENCODE CDS 116365890 116365965 . + 2 Parent=gene2454 chr7 ENCODE exon 116368129 116368197 . + . Parent=gene2454 chr7 ENCODE CDS 116368129 116368197 . + 1 Parent=gene2454 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2454 chr7 ENCODE CDS 116370086 116370240 . + 1 Parent=gene2454 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2454 chr7 ENCODE CDS 116372440 116372537 . + 2 Parent=gene2454 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2454 chr7 ENCODE CDS 116404867 116404981 . + 0 Parent=gene2454 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2454 chr7 ENCODE CDS 116423326 116423398 . + 2 Parent=gene2454 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2454 chr7 ENCODE CDS 116424839 116424941 . + 1 Parent=gene2454 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2454 chr7 ENCODE CDS 116443792 116443942 . + 0 Parent=gene2454 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2454 chr7 ENCODE CDS 116453089 116453181 . + 2 Parent=gene2454 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2454 chr7 ENCODE CDS 116455928 116456067 . + 2 Parent=gene2454 chr7 ENCODE CDS 116463767 116463862 . + 0 Parent=gene2454 chr7 ENCODE exon 116463767 116464108 . + . Parent=gene2454 ### chr7 ENCODE gene 116254420 116464108 . + . ID=gene2455;Name=AC003987.1-013;name2=ST7 chr7 ENCODE exon 116254420 116254634 . + . Parent=gene2455 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2455 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2455 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2455 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2455 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2455 chr7 ENCODE exon 116368129 116370240 . + . Parent=gene2455 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2455 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2455 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2455 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2455 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2455 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2455 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2455 chr7 ENCODE exon 116463767 116464108 . + . Parent=gene2455 ### chr7 ENCODE gene 116333767 116464108 . + . ID=gene2456;name2=ST7;Name=AC003987.1-008 chr7 ENCODE exon 116333767 116333849 . + . Parent=gene2456 chr7 ENCODE exon 116353566 116353725 . + . Parent=gene2456 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2456 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2456 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2456 chr7 ENCODE exon 116368129 116368197 . + . Parent=gene2456 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2456 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2456 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2456 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2456 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2456 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2456 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2456 chr7 ENCODE exon 116463767 116464108 . + . Parent=gene2456 ### chr7 ENCODE gene 116353691 116432402 . + . ID=gene2457;name2=ST7;Name=AC003987.1-009 chr7 ENCODE exon 116353691 116353725 . + . Parent=gene2457 chr7 ENCODE exon 116363798 116363852 . + . Parent=gene2457 chr7 ENCODE exon 116364496 116364611 . + . Parent=gene2457 chr7 ENCODE exon 116365890 116365965 . + . Parent=gene2457 chr7 ENCODE exon 116370086 116370240 . + . Parent=gene2457 chr7 ENCODE exon 116372440 116372537 . + . Parent=gene2457 chr7 ENCODE exon 116404867 116404981 . + . Parent=gene2457 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2457 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2457 chr7 ENCODE exon 116432325 116432402 . + . Parent=gene2457 ### chr7 ENCODE gene 116407413 116443942 . + . ID=gene2458;Name=AC003987.1-017;name2=ST7 chr7 ENCODE exon 116407413 116407571 . + . Parent=gene2458 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2458 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2458 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2458 ### chr7 ENCODE gene 116416674 116456067 . + . ID=gene2459;Name=AC003987.1-018;name2=ST7 chr7 ENCODE exon 116416674 116416750 . + . Parent=gene2459 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2459 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2459 chr7 ENCODE exon 116425640 116425766 . + . Parent=gene2459 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2459 chr7 ENCODE exon 116453089 116453181 . + . Parent=gene2459 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2459 ### chr7 ENCODE gene 116416686 116453095 . + . ID=gene2460;Name=AC003987.1-010;name2=ST7 chr7 ENCODE exon 116416686 116416750 . + . Parent=gene2460 chr7 ENCODE exon 116418130 116418204 . + . Parent=gene2460 chr7 ENCODE exon 116423326 116423398 . + . Parent=gene2460 chr7 ENCODE exon 116424138 116424273 . + . Parent=gene2460 chr7 ENCODE exon 116424839 116424941 . + . Parent=gene2460 chr7 ENCODE exon 116425640 116425766 . + . Parent=gene2460 chr7 ENCODE exon 116432325 116432545 . + . Parent=gene2460 chr7 ENCODE exon 116433077 116433149 . + . Parent=gene2460 chr7 ENCODE exon 116443792 116443942 . + . Parent=gene2460 chr7 ENCODE exon 116453089 116453095 . + . Parent=gene2460 ### chr7 ENCODE gene 116453030 116457138 . + . ID=gene2461;Name=AC003987.1-020;name2=ST7 chr7 ENCODE exon 116453030 116453181 . + . Parent=gene2461 chr7 ENCODE exon 116455928 116456067 . + . Parent=gene2461 chr7 ENCODE exon 116456866 116457138 . + . Parent=gene2461 ### chr7 ENCODE gene 116510636 116557294 . - . ID=gene2462;Name=AC006326.1-002;name2=WNT2 chr7 ENCODE exon 116510636 116512389 . - . Parent=gene2462 chr7 ENCODE CDS 116512160 116512389 . - 2 Parent=gene2462 chr7 ENCODE exon 116531617 116531881 . - . Parent=gene2462 chr7 ENCODE CDS 116531617 116531881 . - 0 Parent=gene2462 chr7 ENCODE exon 116549076 116549353 . - . Parent=gene2462 chr7 ENCODE CDS 116549076 116549353 . - 2 Parent=gene2462 chr7 ENCODE exon 116554572 116554798 . - . Parent=gene2462 chr7 ENCODE CDS 116554572 116554798 . - 1 Parent=gene2462 chr7 ENCODE CDS 116556912 116556994 . - 0 Parent=gene2462 chr7 ENCODE exon 116556912 116557294 . - . Parent=gene2462 ### chr7 ENCODE gene 116597227 116661513 . - . ID=gene2463;Name=AC002465.3-001;name2=ASZ1 chr7 ENCODE exon 116597227 116597753 . - . Parent=gene2463 chr7 ENCODE CDS 116597601 116597753 . - 0 Parent=gene2463 chr7 ENCODE exon 116601357 116601470 . - . Parent=gene2463 chr7 ENCODE CDS 116601357 116601470 . - 0 Parent=gene2463 chr7 ENCODE exon 116602617 116602722 . - . Parent=gene2463 chr7 ENCODE CDS 116602617 116602722 . - 1 Parent=gene2463 chr7 ENCODE exon 116613943 116614052 . - . Parent=gene2463 chr7 ENCODE CDS 116613943 116614052 . - 0 Parent=gene2463 chr7 ENCODE exon 116615016 116615072 . - . Parent=gene2463 chr7 ENCODE CDS 116615016 116615072 . - 0 Parent=gene2463 chr7 ENCODE exon 116616074 116616149 . - . Parent=gene2463 chr7 ENCODE CDS 116616074 116616149 . - 1 Parent=gene2463 chr7 ENCODE exon 116616991 116617115 . - . Parent=gene2463 chr7 ENCODE CDS 116616991 116617115 . - 0 Parent=gene2463 chr7 ENCODE exon 116618731 116618865 . - . Parent=gene2463 chr7 ENCODE CDS 116618731 116618865 . - 0 Parent=gene2463 chr7 ENCODE exon 116619703 116619814 . - . Parent=gene2463 chr7 ENCODE CDS 116619703 116619814 . - 1 Parent=gene2463 chr7 ENCODE exon 116654168 116654279 . - . Parent=gene2463 chr7 ENCODE CDS 116654168 116654279 . - 2 Parent=gene2463 chr7 ENCODE exon 116656242 116656364 . - . Parent=gene2463 chr7 ENCODE CDS 116656242 116656364 . - 2 Parent=gene2463 chr7 ENCODE exon 116660841 116660940 . - . Parent=gene2463 chr7 ENCODE CDS 116660841 116660940 . - 0 Parent=gene2463 chr7 ENCODE CDS 116661361 116661465 . - 0 Parent=gene2463 chr7 ENCODE exon 116661361 116661513 . - . Parent=gene2463 ### chr7 ENCODE gene 116597313 116661503 . - . ID=gene2464;Name=AC002465.3-003;name2=ASZ1 chr7 ENCODE exon 116597313 116597753 . - . Parent=gene2464 chr7 ENCODE exon 116601357 116602722 . - . Parent=gene2464 chr7 ENCODE exon 116613943 116614052 . - . Parent=gene2464 chr7 ENCODE exon 116615016 116615072 . - . Parent=gene2464 chr7 ENCODE exon 116616074 116616149 . - . Parent=gene2464 chr7 ENCODE exon 116616991 116617115 . - . Parent=gene2464 chr7 ENCODE exon 116618731 116618865 . - . Parent=gene2464 chr7 ENCODE exon 116619703 116619814 . - . Parent=gene2464 chr7 ENCODE exon 116654168 116654279 . - . Parent=gene2464 chr7 ENCODE exon 116656242 116656364 . - . Parent=gene2464 chr7 ENCODE exon 116660841 116660940 . - . Parent=gene2464 chr7 ENCODE exon 116661361 116661503 . - . Parent=gene2464 ### chr7 ENCODE gene 116597320 116661510 . - . ID=gene2465;Name=AC002465.3-002;name2=ASZ1 chr7 ENCODE exon 116597320 116597753 . - . Parent=gene2465 chr7 ENCODE exon 116601357 116602722 . - . Parent=gene2465 chr7 ENCODE exon 116613943 116614052 . - . Parent=gene2465 chr7 ENCODE exon 116615016 116615072 . - . Parent=gene2465 chr7 ENCODE exon 116616074 116616149 . - . Parent=gene2465 chr7 ENCODE exon 116616991 116617115 . - . Parent=gene2465 chr7 ENCODE exon 116618731 116618865 . - . Parent=gene2465 chr7 ENCODE exon 116619703 116619814 . - . Parent=gene2465 chr7 ENCODE exon 116654168 116654279 . - . Parent=gene2465 chr7 ENCODE exon 116660841 116660940 . - . Parent=gene2465 chr7 ENCODE exon 116661361 116661510 . - . Parent=gene2465 ### chr7 ENCODE gene 116616991 116661512 . - . ID=gene2466;Name=AC002465.3-004;name2=ASZ1 chr7 ENCODE exon 116616991 116617115 . - . Parent=gene2466 chr7 ENCODE exon 116618731 116618865 . - . Parent=gene2466 chr7 ENCODE exon 116654168 116654279 . - . Parent=gene2466 chr7 ENCODE exon 116656242 116656364 . - . Parent=gene2466 chr7 ENCODE exon 116660841 116660940 . - . Parent=gene2466 chr7 ENCODE exon 116661361 116661512 . - . Parent=gene2466 ### chr7 ENCODE gene 116656277 116662128 . - . ID=gene2467;Name=AC002465.3-005;name2=ASZ1 chr7 ENCODE exon 116656277 116656364 . - . Parent=gene2467 chr7 ENCODE CDS 116656277 116656364 . - 2 Parent=gene2467 chr7 ENCODE CDS 116660841 116660886 . - 0 Parent=gene2467 chr7 ENCODE exon 116660841 116660940 . - . Parent=gene2467 chr7 ENCODE exon 116662075 116662128 . - . Parent=gene2467 ### chr7 ENCODE gene 116699789 116738313 . + . ID=gene2468;Name=AC000061.1-003;name2=CFTR chr7 ENCODE exon 116699789 116699836 . + . Parent=gene2468 chr7 ENCODE exon 116709696 116709813 . + . Parent=gene2468 chr7 ENCODE exon 116738258 116738313 . + . Parent=gene2468 ### chr7 ENCODE gene 116713309 116764983 . + . ID=gene2469;Name=AC000061.1-004;name2=CFTR chr7 ENCODE exon 116713309 116713350 . + . Parent=gene2469 chr7 ENCODE exon 116713467 116713699 . + . Parent=gene2469 chr7 ENCODE exon 116738258 116738368 . + . Parent=gene2469 chr7 ENCODE exon 116743039 116743147 . + . Parent=gene2469 chr7 ENCODE CDS 116743118 116743147 . + 0 Parent=gene2469 chr7 ENCODE exon 116764904 116764983 . + . Parent=gene2469 chr7 ENCODE CDS 116764904 116764983 . + 0 Parent=gene2469 ### chr7 ENCODE gene 116713968 116902666 . + . ID=gene2470;Name=AC000061.1-001;name2=CFTR chr7 ENCODE exon 116713968 116714152 . + . Parent=gene2470 chr7 ENCODE CDS 116714100 116714152 . + 0 Parent=gene2470 chr7 ENCODE exon 116738258 116738368 . + . Parent=gene2470 chr7 ENCODE CDS 116738258 116738368 . + 1 Parent=gene2470 chr7 ENCODE exon 116743039 116743147 . + . Parent=gene2470 chr7 ENCODE CDS 116743039 116743147 . + 1 Parent=gene2470 chr7 ENCODE exon 116764904 116765119 . + . Parent=gene2470 chr7 ENCODE CDS 116764904 116765119 . + 0 Parent=gene2470 chr7 ENCODE exon 116768281 116768370 . + . Parent=gene2470 chr7 ENCODE CDS 116768281 116768370 . + 0 Parent=gene2470 chr7 ENCODE exon 116769253 116769416 . + . Parent=gene2470 chr7 ENCODE CDS 116769253 116769416 . + 0 Parent=gene2470 chr7 ENCODE exon 116770553 116770678 . + . Parent=gene2470 chr7 ENCODE CDS 116770553 116770678 . + 1 Parent=gene2470 chr7 ENCODE exon 116774105 116774351 . + . Parent=gene2470 chr7 ENCODE CDS 116774105 116774351 . + 1 Parent=gene2470 chr7 ENCODE exon 116776021 116776113 . + . Parent=gene2470 chr7 ENCODE CDS 116776021 116776113 . + 0 Parent=gene2470 chr7 ENCODE exon 116782646 116782828 . + . Parent=gene2470 chr7 ENCODE CDS 116782646 116782828 . + 0 Parent=gene2470 chr7 ENCODE exon 116793469 116793660 . + . Parent=gene2470 chr7 ENCODE CDS 116793469 116793660 . + 0 Parent=gene2470 chr7 ENCODE exon 116821744 116821838 . + . Parent=gene2470 chr7 ENCODE CDS 116821744 116821838 . + 0 Parent=gene2470 chr7 ENCODE exon 116824358 116824444 . + . Parent=gene2470 chr7 ENCODE CDS 116824358 116824444 . + 1 Parent=gene2470 chr7 ENCODE exon 116825939 116826662 . + . Parent=gene2470 chr7 ENCODE CDS 116825939 116826662 . + 1 Parent=gene2470 chr7 ENCODE exon 116828935 116829063 . + . Parent=gene2470 chr7 ENCODE CDS 116828935 116829063 . + 0 Parent=gene2470 chr7 ENCODE exon 116836831 116836868 . + . Parent=gene2470 chr7 ENCODE CDS 116836831 116836868 . + 0 Parent=gene2470 chr7 ENCODE exon 116837537 116837787 . + . Parent=gene2470 chr7 ENCODE CDS 116837537 116837787 . + 1 Parent=gene2470 chr7 ENCODE exon 116840679 116840758 . + . Parent=gene2470 chr7 ENCODE CDS 116840679 116840758 . + 2 Parent=gene2470 chr7 ENCODE exon 116844524 116844674 . + . Parent=gene2470 chr7 ENCODE CDS 116844524 116844674 . + 0 Parent=gene2470 chr7 ENCODE exon 116845586 116845813 . + . Parent=gene2470 chr7 ENCODE CDS 116845586 116845813 . + 2 Parent=gene2470 chr7 ENCODE exon 116848618 116848718 . + . Parent=gene2470 chr7 ENCODE CDS 116848618 116848718 . + 2 Parent=gene2470 chr7 ENCODE exon 116861527 116861775 . + . Parent=gene2470 chr7 ENCODE CDS 116861527 116861775 . + 0 Parent=gene2470 chr7 ENCODE exon 116876443 116876598 . + . Parent=gene2470 chr7 ENCODE CDS 116876443 116876598 . + 0 Parent=gene2470 chr7 ENCODE exon 116886847 116886936 . + . Parent=gene2470 chr7 ENCODE CDS 116886847 116886936 . + 0 Parent=gene2470 chr7 ENCODE exon 116898693 116898865 . + . Parent=gene2470 chr7 ENCODE CDS 116898693 116898865 . + 0 Parent=gene2470 chr7 ENCODE exon 116899464 116899569 . + . Parent=gene2470 chr7 ENCODE CDS 116899464 116899569 . + 1 Parent=gene2470 chr7 ENCODE CDS 116900913 116901113 . + 0 Parent=gene2470 chr7 ENCODE exon 116900913 116902666 . + . Parent=gene2470 ### chr7 ENCODE gene 116845622 116861915 . + . ID=gene2471;Name=AC000061.1-002;name2=CFTR chr7 ENCODE exon 116845622 116845813 . + . Parent=gene2471 chr7 ENCODE exon 116848618 116848718 . + . Parent=gene2471 chr7 ENCODE exon 116861527 116861915 . + . Parent=gene2471 ### chr7 ENCODE gene 116944656 117107512 . - . ID=gene2472;Name=AC004240.1-001;name2=CTTNBP2 chr7 ENCODE exon 116944656 116945787 . - . Parent=gene2472 chr7 ENCODE CDS 116945542 116945787 . - 0 Parent=gene2472 chr7 ENCODE exon 116952023 116952124 . - . Parent=gene2472 chr7 ENCODE CDS 116952023 116952124 . - 0 Parent=gene2472 chr7 ENCODE exon 116953509 116953641 . - . Parent=gene2472 chr7 ENCODE CDS 116953509 116953641 . - 1 Parent=gene2472 chr7 ENCODE exon 116955072 116955135 . - . Parent=gene2472 chr7 ENCODE CDS 116955072 116955135 . - 2 Parent=gene2472 chr7 ENCODE exon 116958552 116958737 . - . Parent=gene2472 chr7 ENCODE CDS 116958552 116958737 . - 2 Parent=gene2472 chr7 ENCODE exon 116959057 116959262 . - . Parent=gene2472 chr7 ENCODE CDS 116959057 116959262 . - 1 Parent=gene2472 chr7 ENCODE exon 116962094 116962272 . - . Parent=gene2472 chr7 ENCODE CDS 116962094 116962272 . - 0 Parent=gene2472 chr7 ENCODE exon 116968918 116969105 . - . Parent=gene2472 chr7 ENCODE CDS 116968918 116969105 . - 2 Parent=gene2472 chr7 ENCODE exon 116969274 116969426 . - . Parent=gene2472 chr7 ENCODE CDS 116969274 116969426 . - 2 Parent=gene2472 chr7 ENCODE exon 116979836 116979935 . - . Parent=gene2472 chr7 ENCODE CDS 116979836 116979935 . - 0 Parent=gene2472 chr7 ENCODE exon 116980018 116980104 . - . Parent=gene2472 chr7 ENCODE CDS 116980018 116980104 . - 0 Parent=gene2472 chr7 ENCODE exon 116990560 116990639 . - . Parent=gene2472 chr7 ENCODE CDS 116990560 116990639 . - 2 Parent=gene2472 chr7 ENCODE exon 116991880 116991975 . - . Parent=gene2472 chr7 ENCODE CDS 116991880 116991975 . - 2 Parent=gene2472 chr7 ENCODE exon 116994440 116994715 . - . Parent=gene2472 chr7 ENCODE CDS 116994440 116994715 . - 2 Parent=gene2472 chr7 ENCODE exon 117001064 117001181 . - . Parent=gene2472 chr7 ENCODE CDS 117001064 117001181 . - 0 Parent=gene2472 chr7 ENCODE exon 117011516 117011770 . - . Parent=gene2472 chr7 ENCODE CDS 117011516 117011770 . - 0 Parent=gene2472 chr7 ENCODE exon 117014446 117014596 . - . Parent=gene2472 chr7 ENCODE CDS 117014446 117014596 . - 1 Parent=gene2472 chr7 ENCODE exon 117016867 117016966 . - . Parent=gene2472 chr7 ENCODE CDS 117016867 117016966 . - 2 Parent=gene2472 chr7 ENCODE exon 117018256 117018459 . - . Parent=gene2472 chr7 ENCODE CDS 117018256 117018459 . - 2 Parent=gene2472 chr7 ENCODE exon 117025133 117026786 . - . Parent=gene2472 chr7 ENCODE CDS 117025133 117026786 . - 0 Parent=gene2472 chr7 ENCODE exon 117044770 117044994 . - . Parent=gene2472 chr7 ENCODE CDS 117044770 117044994 . - 0 Parent=gene2472 chr7 ENCODE exon 117095214 117095321 . - . Parent=gene2472 chr7 ENCODE CDS 117095214 117095321 . - 0 Parent=gene2472 chr7 ENCODE CDS 117107340 117107420 . - 0 Parent=gene2472 chr7 ENCODE exon 117107340 117107512 . - . Parent=gene2472 ### chr7 ENCODE gene 116989377 116992117 . - . ID=gene2473;Name=AC004240.1-005;name2=CTTNBP2 chr7 ENCODE exon 116989377 116989579 . - . Parent=gene2473 chr7 ENCODE exon 116990560 116990639 . - . Parent=gene2473 chr7 ENCODE exon 116991880 116992117 . - . Parent=gene2473 ### chr7 ENCODE gene 116989385 116994525 . - . ID=gene2474;Name=AC004240.1-004;name2=CTTNBP2 chr7 ENCODE exon 116989385 116989579 . - . Parent=gene2474 chr7 ENCODE CDS 116989553 116989579 . - 2 Parent=gene2474 chr7 ENCODE exon 116990560 116990639 . - . Parent=gene2474 chr7 ENCODE CDS 116990560 116990639 . - 1 Parent=gene2474 chr7 ENCODE exon 116991880 116991975 . - . Parent=gene2474 chr7 ENCODE CDS 116991880 116991975 . - 1 Parent=gene2474 chr7 ENCODE exon 116994440 116994525 . - . Parent=gene2474 chr7 ENCODE CDS 116994440 116994525 . - 0 Parent=gene2474 ### chr7 ENCODE gene 117026591 117105643 . - . ID=gene2475;Name=AC004240.1-002;name2=CTTNBP2 chr7 ENCODE exon 117026591 117026786 . - . Parent=gene2475 chr7 ENCODE CDS 117026591 117026786 . - 2 Parent=gene2475 chr7 ENCODE exon 117044770 117044994 . - . Parent=gene2475 chr7 ENCODE CDS 117044770 117044994 . - 2 Parent=gene2475 chr7 ENCODE exon 117095214 117095321 . - . Parent=gene2475 chr7 ENCODE CDS 117095214 117095321 . - 2 Parent=gene2475 chr7 ENCODE exon 117105595 117105643 . - . Parent=gene2475 chr7 ENCODE CDS 117105595 117105643 . - 0 Parent=gene2475 ### chr7 ENCODE gene 117026601 117027610 . - . ID=gene2476;Name=AC004240.1-003;name2=CTTNBP2 chr7 ENCODE exon 117026601 117026786 . - . Parent=gene2476 chr7 ENCODE exon 117027418 117027610 . - . Parent=gene2476 ### chr7 ENCODE gene 117026667 117106225 . - . ID=gene2477;Name=AC004240.1-006;name2=CTTNBP2 chr7 ENCODE exon 117026667 117026786 . - . Parent=gene2477 chr7 ENCODE CDS 117026667 117026786 . - 0 Parent=gene2477 chr7 ENCODE exon 117044770 117044994 . - . Parent=gene2477 chr7 ENCODE CDS 117044770 117044994 . - 0 Parent=gene2477 chr7 ENCODE CDS 117095214 117095276 . - 0 Parent=gene2477 chr7 ENCODE exon 117095214 117095321 . - . Parent=gene2477 chr7 ENCODE exon 117106109 117106225 . - . Parent=gene2477 ### chr7 ENCODE gene 117044772 117108144 . - . ID=gene2478;Name=AC004240.1-007;name2=CTTNBP2 chr7 ENCODE exon 117044772 117044994 . - . Parent=gene2478 chr7 ENCODE CDS 117044772 117044994 . - 0 Parent=gene2478 chr7 ENCODE CDS 117095214 117095276 . - 0 Parent=gene2478 chr7 ENCODE exon 117095214 117095321 . - . Parent=gene2478 chr7 ENCODE exon 117108006 117108144 . - . Parent=gene2478 ### chr7 ENCODE gene 125672607 126487299 . - . ID=gene2479;Name=AC000370.1-001;name2=GRM8 chr7 ENCODE exon 125672607 125673173 . - . Parent=gene2479 chr7 ENCODE CDS 125673124 125673173 . - 2 Parent=gene2479 chr7 ENCODE exon 125680131 125680377 . - . Parent=gene2479 chr7 ENCODE CDS 125680131 125680377 . - 0 Parent=gene2479 chr7 ENCODE exon 125766957 125767892 . - . Parent=gene2479 chr7 ENCODE CDS 125766957 125767892 . - 0 Parent=gene2479 chr7 ENCODE exon 125843367 125843503 . - . Parent=gene2479 chr7 ENCODE CDS 125843367 125843503 . - 2 Parent=gene2479 chr7 ENCODE exon 126003870 126004070 . - . Parent=gene2479 chr7 ENCODE CDS 126003870 126004070 . - 2 Parent=gene2479 chr7 ENCODE exon 126136547 126136684 . - . Parent=gene2479 chr7 ENCODE CDS 126136547 126136684 . - 2 Parent=gene2479 chr7 ENCODE exon 126137977 126138131 . - . Parent=gene2479 chr7 ENCODE CDS 126137977 126138131 . - 1 Parent=gene2479 chr7 ENCODE exon 126138553 126138688 . - . Parent=gene2479 chr7 ENCODE CDS 126138553 126138688 . - 2 Parent=gene2479 chr7 ENCODE exon 126340501 126340717 . - . Parent=gene2479 chr7 ENCODE CDS 126340501 126340717 . - 0 Parent=gene2479 chr7 ENCODE CDS 126476700 126477209 . - 0 Parent=gene2479 chr7 ENCODE exon 126476700 126477520 . - . Parent=gene2479 chr7 ENCODE exon 126486802 126487299 . - . Parent=gene2479 ### chr7 ENCODE gene 125672620 126477224 . - . ID=gene2480;Name=AC000370.1-002;name2=GRM8 chr7 ENCODE exon 125672620 125673173 . - . Parent=gene2480 chr7 ENCODE exon 125680076 125680377 . - . Parent=gene2480 chr7 ENCODE CDS 125680081 125680377 . - 0 Parent=gene2480 chr7 ENCODE exon 125766957 125767892 . - . Parent=gene2480 chr7 ENCODE CDS 125766957 125767892 . - 0 Parent=gene2480 chr7 ENCODE exon 125843367 125843503 . - . Parent=gene2480 chr7 ENCODE CDS 125843367 125843503 . - 2 Parent=gene2480 chr7 ENCODE exon 126003870 126004070 . - . Parent=gene2480 chr7 ENCODE CDS 126003870 126004070 . - 2 Parent=gene2480 chr7 ENCODE exon 126136547 126136684 . - . Parent=gene2480 chr7 ENCODE CDS 126136547 126136684 . - 2 Parent=gene2480 chr7 ENCODE exon 126137977 126138131 . - . Parent=gene2480 chr7 ENCODE CDS 126137977 126138131 . - 1 Parent=gene2480 chr7 ENCODE exon 126138553 126138688 . - . Parent=gene2480 chr7 ENCODE CDS 126138553 126138688 . - 2 Parent=gene2480 chr7 ENCODE exon 126340501 126340717 . - . Parent=gene2480 chr7 ENCODE CDS 126340501 126340717 . - 0 Parent=gene2480 chr7 ENCODE CDS 126476700 126477209 . - 0 Parent=gene2480 chr7 ENCODE exon 126476700 126477224 . - . Parent=gene2480 ### chr7 ENCODE gene 125672633 125699304 . - . ID=gene2481;Name=AC000370.1-007;name2=GRM8 chr7 ENCODE exon 125672633 125673173 . - . Parent=gene2481 chr7 ENCODE exon 125680131 125680377 . - . Parent=gene2481 chr7 ENCODE exon 125681141 125681193 . - . Parent=gene2481 chr7 ENCODE exon 125699236 125699304 . - . Parent=gene2481 ### chr7 ENCODE gene 125672697 126477224 . - . ID=gene2482;Name=AC000370.1-003;name2=GRM8 chr7 ENCODE exon 125672697 125673173 . - . Parent=gene2482 chr7 ENCODE exon 125680131 125680377 . - . Parent=gene2482 chr7 ENCODE exon 125766957 125767892 . - . Parent=gene2482 chr7 ENCODE exon 125843367 125843503 . - . Parent=gene2482 chr7 ENCODE exon 125935762 125935832 . - . Parent=gene2482 chr7 ENCODE exon 126003870 126004070 . - . Parent=gene2482 chr7 ENCODE exon 126136547 126136684 . - . Parent=gene2482 chr7 ENCODE exon 126137977 126138131 . - . Parent=gene2482 chr7 ENCODE exon 126138553 126138688 . - . Parent=gene2482 chr7 ENCODE exon 126340501 126340717 . - . Parent=gene2482 chr7 ENCODE exon 126476700 126477224 . - . Parent=gene2482 ### chr7 ENCODE gene 125672698 125681193 . - . ID=gene2483;Name=AC000370.1-008;name2=GRM8 chr7 ENCODE exon 125672698 125673173 . - . Parent=gene2483 chr7 ENCODE exon 125680076 125680377 . - . Parent=gene2483 chr7 ENCODE exon 125681141 125681193 . - . Parent=gene2483 ### chr7 ENCODE gene 125767056 126346325 . - . ID=gene2484;Name=AC000370.1-004;name2=GRM8 chr7 ENCODE exon 125767056 125767783 . - . Parent=gene2484 chr7 ENCODE exon 125843499 125843503 . - . Parent=gene2484 chr7 ENCODE exon 125935762 125935832 . - . Parent=gene2484 chr7 ENCODE exon 126003870 126004070 . - . Parent=gene2484 chr7 ENCODE exon 126136547 126136684 . - . Parent=gene2484 chr7 ENCODE exon 126137977 126138131 . - . Parent=gene2484 chr7 ENCODE exon 126138553 126138688 . - . Parent=gene2484 chr7 ENCODE exon 126339301 126339375 . - . Parent=gene2484 chr7 ENCODE exon 126340501 126340717 . - . Parent=gene2484 chr7 ENCODE exon 126346174 126346325 . - . Parent=gene2484 ### chr7 ENCODE gene 126003926 126352277 . - . ID=gene2485;Name=AC000370.1-009;name2=GRM8 chr7 ENCODE exon 126003926 126004070 . - . Parent=gene2485 chr7 ENCODE exon 126136547 126136684 . - . Parent=gene2485 chr7 ENCODE exon 126137977 126138131 . - . Parent=gene2485 chr7 ENCODE exon 126138553 126138688 . - . Parent=gene2485 chr7 ENCODE exon 126340501 126340717 . - . Parent=gene2485 chr7 ENCODE exon 126352226 126352277 . - . Parent=gene2485 ### chr7 ENCODE gene 126138114 126485224 . - . ID=gene2486;Name=AC000370.1-012;name2=GRM8 chr7 ENCODE exon 126138114 126138131 . - . Parent=gene2486 chr7 ENCODE CDS 126138114 126138131 . - 1 Parent=gene2486 chr7 ENCODE exon 126138553 126138688 . - . Parent=gene2486 chr7 ENCODE CDS 126138553 126138688 . - 2 Parent=gene2486 chr7 ENCODE exon 126340501 126340717 . - . Parent=gene2486 chr7 ENCODE CDS 126340501 126340717 . - 0 Parent=gene2486 chr7 ENCODE CDS 126476700 126477209 . - 0 Parent=gene2486 chr7 ENCODE exon 126476700 126477520 . - . Parent=gene2486 chr7 ENCODE exon 126485170 126485224 . - . Parent=gene2486 ### chr7 ENCODE gene 126309970 126340657 . - . ID=gene2487;name2=GRM8;Name=AC000370.1-006 chr7 ENCODE exon 126309970 126310241 . - . Parent=gene2487 chr7 ENCODE exon 126340501 126340657 . - . Parent=gene2487 ### chr7 ENCODE gene 126318294 126329815 . - . ID=gene2488;Name=AC000370.1-013;name2=GRM8 chr7 ENCODE exon 126318294 126318420 . - . Parent=gene2488 chr7 ENCODE exon 126318696 126318794 . - . Parent=gene2488 chr7 ENCODE exon 126324914 126325018 . - . Parent=gene2488 chr7 ENCODE exon 126329670 126329815 . - . Parent=gene2488 ### chr7 ENCODE gene 126324928 126346291 . - . ID=gene2489;Name=AC000370.1-005;name2=GRM8 chr7 ENCODE exon 126324928 126325018 . - . Parent=gene2489 chr7 ENCODE exon 126339301 126339375 . - . Parent=gene2489 chr7 ENCODE exon 126340501 126340717 . - . Parent=gene2489 chr7 ENCODE exon 126345046 126345191 . - . Parent=gene2489 chr7 ENCODE exon 126346174 126346291 . - . Parent=gene2489 ### chr7 ENCODE gene 126477079 126486386 . - . ID=gene2490;Name=AC000370.1-010;name2=GRM8 chr7 ENCODE CDS 126477079 126477209 . - 0 Parent=gene2490 chr7 ENCODE exon 126477079 126477520 . - . Parent=gene2490 chr7 ENCODE exon 126486134 126486386 . - . Parent=gene2490 ### chr7 ENCODE gene 126477148 126485031 . - . ID=gene2491;Name=AC000370.1-011;name2=GRM8 chr7 ENCODE CDS 126477148 126477209 . - 0 Parent=gene2491 chr7 ENCODE exon 126477148 126477520 . - . Parent=gene2491 chr7 ENCODE exon 126484854 126485031 . - . Parent=gene2491 ### chr7 ENCODE gene 126580795 126607570 . - . ID=gene2492;Name=AC000123.1-004;name2=ZNF800 chr7 ENCODE exon 126580795 126582048 . - . Parent=gene2492 chr7 ENCODE exon 126607347 126607570 . - . Parent=gene2492 ### chr7 ENCODE gene 126604048 126626696 . - . ID=gene2493;Name=AC000123.1-002;name2=ZNF800 chr7 ENCODE exon 126604048 126605819 . - . Parent=gene2493 chr7 ENCODE CDS 126605819 126605819 . - 1 Parent=gene2493 chr7 ENCODE exon 126607347 126609039 . - . Parent=gene2493 chr7 ENCODE CDS 126607347 126609039 . - 2 Parent=gene2493 chr7 ENCODE exon 126611191 126611334 . - . Parent=gene2493 chr7 ENCODE CDS 126611191 126611334 . - 2 Parent=gene2493 chr7 ENCODE exon 126620065 126620160 . - . Parent=gene2493 chr7 ENCODE CDS 126620065 126620160 . - 2 Parent=gene2493 chr7 ENCODE CDS 126625502 126625562 . - 0 Parent=gene2493 chr7 ENCODE exon 126625502 126625620 . - . Parent=gene2493 chr7 ENCODE exon 126626163 126626696 . - . Parent=gene2493 ### chr7 ENCODE gene 126604304 126626699 . - . ID=gene2494;Name=AC000123.1-001;name2=ZNF800 chr7 ENCODE exon 126604304 126605819 . - . Parent=gene2494 chr7 ENCODE CDS 126605819 126605819 . - 1 Parent=gene2494 chr7 ENCODE exon 126607347 126609039 . - . Parent=gene2494 chr7 ENCODE CDS 126607347 126609039 . - 2 Parent=gene2494 chr7 ENCODE exon 126611191 126611334 . - . Parent=gene2494 chr7 ENCODE CDS 126611191 126611334 . - 2 Parent=gene2494 chr7 ENCODE exon 126620065 126620160 . - . Parent=gene2494 chr7 ENCODE CDS 126620065 126620160 . - 2 Parent=gene2494 chr7 ENCODE CDS 126625502 126625562 . - 0 Parent=gene2494 chr7 ENCODE exon 126625502 126625620 . - . Parent=gene2494 chr7 ENCODE exon 126626065 126626699 . - . Parent=gene2494 ### chr7 ENCODE gene 126604446 126626095 . - . ID=gene2495;Name=AC000123.1-006;name2=ZNF800 chr7 ENCODE exon 126604446 126604720 . - . Parent=gene2495 chr7 ENCODE exon 126611310 126611334 . - . Parent=gene2495 chr7 ENCODE exon 126620065 126620160 . - . Parent=gene2495 chr7 ENCODE exon 126625502 126625620 . - . Parent=gene2495 chr7 ENCODE exon 126626065 126626095 . - . Parent=gene2495 ### chr7 ENCODE gene 126605605 126626371 . - . ID=gene2496;Name=AC000123.1-009;name2=ZNF800 chr7 ENCODE exon 126605605 126605819 . - . Parent=gene2496 chr7 ENCODE CDS 126605819 126605819 . - 1 Parent=gene2496 chr7 ENCODE exon 126607347 126609039 . - . Parent=gene2496 chr7 ENCODE CDS 126607347 126609039 . - 2 Parent=gene2496 chr7 ENCODE exon 126611191 126611334 . - . Parent=gene2496 chr7 ENCODE CDS 126611191 126611334 . - 2 Parent=gene2496 chr7 ENCODE exon 126620065 126620160 . - . Parent=gene2496 chr7 ENCODE CDS 126620065 126620160 . - 2 Parent=gene2496 chr7 ENCODE CDS 126625502 126625562 . - 0 Parent=gene2496 chr7 ENCODE exon 126625502 126625620 . - . Parent=gene2496 chr7 ENCODE exon 126626264 126626371 . - . Parent=gene2496 ### chr7 ENCODE gene 126605706 126626723 . - . ID=gene2497;Name=AC000123.1-003;name2=ZNF800 chr7 ENCODE exon 126605706 126605819 . - . Parent=gene2497 chr7 ENCODE exon 126607347 126609039 . - . Parent=gene2497 chr7 ENCODE exon 126611191 126611334 . - . Parent=gene2497 chr7 ENCODE exon 126620065 126620185 . - . Parent=gene2497 chr7 ENCODE exon 126625502 126625620 . - . Parent=gene2497 chr7 ENCODE exon 126626065 126626723 . - . Parent=gene2497 ### chr7 ENCODE gene 126608615 126626723 . - . ID=gene2498;Name=AC000123.1-007;name2=ZNF800 chr7 ENCODE exon 126608615 126609039 . - . Parent=gene2498 chr7 ENCODE CDS 126608615 126609039 . - 2 Parent=gene2498 chr7 ENCODE exon 126611191 126611334 . - . Parent=gene2498 chr7 ENCODE CDS 126611191 126611334 . - 2 Parent=gene2498 chr7 ENCODE exon 126620065 126620160 . - . Parent=gene2498 chr7 ENCODE CDS 126620065 126620160 . - 2 Parent=gene2498 chr7 ENCODE CDS 126625502 126625562 . - 0 Parent=gene2498 chr7 ENCODE exon 126625502 126625620 . - . Parent=gene2498 chr7 ENCODE exon 126626553 126626723 . - . Parent=gene2498 ### chr7 ENCODE gene 126608951 126626123 . - . ID=gene2499;Name=AC000123.1-005;name2=ZNF800 chr7 ENCODE exon 126608951 126609039 . - . Parent=gene2499 chr7 ENCODE CDS 126608951 126609039 . - 2 Parent=gene2499 chr7 ENCODE exon 126611191 126611334 . - . Parent=gene2499 chr7 ENCODE CDS 126611191 126611334 . - 2 Parent=gene2499 chr7 ENCODE exon 126620065 126620160 . - . Parent=gene2499 chr7 ENCODE CDS 126620065 126620160 . - 2 Parent=gene2499 chr7 ENCODE CDS 126625502 126625562 . - 0 Parent=gene2499 chr7 ENCODE exon 126625502 126625620 . - . Parent=gene2499 chr7 ENCODE exon 126626070 126626123 . - . Parent=gene2499 ### chr7 ENCODE gene 126611196 126665929 . - . ID=gene2500;Name=AC000123.1-008;name2=ZNF800 chr7 ENCODE exon 126611196 126611334 . - . Parent=gene2500 chr7 ENCODE CDS 126611196 126611334 . - 2 Parent=gene2500 chr7 ENCODE exon 126620065 126620160 . - . Parent=gene2500 chr7 ENCODE CDS 126620065 126620160 . - 2 Parent=gene2500 chr7 ENCODE CDS 126625502 126625562 . - 0 Parent=gene2500 chr7 ENCODE exon 126625502 126625620 . - . Parent=gene2500 chr7 ENCODE exon 126665874 126665929 . - . Parent=gene2500 ### chr7 ENCODE gene 126814623 126819612 . - . ID=gene2501;Name=AC000357.1-001;name2=GCC1 chr7 ENCODE exon 126814623 126817314 . - . Parent=gene2501 chr7 ENCODE CDS 126816019 126817314 . - 0 Parent=gene2501 chr7 ENCODE CDS 126818156 126819187 . - 0 Parent=gene2501 chr7 ENCODE exon 126818156 126819612 . - . Parent=gene2501 ### chr7 ENCODE gene 126816825 126827611 . - . ID=gene2502;Name=AC000357.1-002;name2=GCC1 chr7 ENCODE exon 126816825 126817314 . - . Parent=gene2502 chr7 ENCODE exon 126823761 126823956 . - . Parent=gene2502 chr7 ENCODE exon 126827503 126827611 . - . Parent=gene2502 ### chr7 ENCODE gene 126822350 126825710 . + . ID=gene2503;Name=AC000357.2-001;name2=ARF5 chr7 ENCODE exon 126822350 126822570 . + . Parent=gene2503 chr7 ENCODE CDS 126822504 126822570 . + 0 Parent=gene2503 chr7 ENCODE exon 126823088 126823168 . + . Parent=gene2503 chr7 ENCODE CDS 126823088 126823168 . + 2 Parent=gene2503 chr7 ENCODE exon 126823490 126823599 . + . Parent=gene2503 chr7 ENCODE CDS 126823490 126823599 . + 2 Parent=gene2503 chr7 ENCODE exon 126824071 126824142 . + . Parent=gene2503 chr7 ENCODE CDS 126824071 126824142 . + 0 Parent=gene2503 chr7 ENCODE exon 126824968 126825093 . + . Parent=gene2503 chr7 ENCODE CDS 126824968 126825093 . + 0 Parent=gene2503 chr7 ENCODE CDS 126825218 126825304 . + 0 Parent=gene2503 chr7 ENCODE exon 126825218 126825710 . + . Parent=gene2503 ### chr7 ENCODE gene 126822391 126825686 . + . ID=gene2504;Name=AC000357.2-002;name2=ARF5 chr7 ENCODE exon 126822391 126822570 . + . Parent=gene2504 chr7 ENCODE exon 126823088 126823168 . + . Parent=gene2504 chr7 ENCODE exon 126823490 126824142 . + . Parent=gene2504 chr7 ENCODE exon 126824968 126825093 . + . Parent=gene2504 chr7 ENCODE exon 126825218 126825686 . + . Parent=gene2504 ### chr7 ENCODE gene 126822410 126823579 . + . ID=gene2505;Name=AC000357.2-006;name2=ARF5 chr7 ENCODE exon 126822410 126822805 . + . Parent=gene2505 chr7 ENCODE exon 126823088 126823168 . + . Parent=gene2505 chr7 ENCODE exon 126823490 126823579 . + . Parent=gene2505 ### chr7 ENCODE gene 126822418 126825117 . + . ID=gene2506;Name=AC000357.2-003;name2=ARF5 chr7 ENCODE exon 126822418 126822570 . + . Parent=gene2506 chr7 ENCODE exon 126823088 126823168 . + . Parent=gene2506 chr7 ENCODE exon 126823490 126823599 . + . Parent=gene2506 chr7 ENCODE exon 126824071 126824142 . + . Parent=gene2506 chr7 ENCODE exon 126824968 126825117 . + . Parent=gene2506 ### chr7 ENCODE gene 126823050 126823836 . + . ID=gene2507;name2=ARF5;Name=AC000357.2-004 chr7 ENCODE exon 126823050 126823168 . + . Parent=gene2507 chr7 ENCODE exon 126823490 126823836 . + . Parent=gene2507 ### chr7 ENCODE gene 126823613 126825042 . + . ID=gene2508;Name=AC000357.2-005;name2=ARF5 chr7 ENCODE exon 126823613 126823781 . + . Parent=gene2508 chr7 ENCODE exon 126824041 126824142 . + . Parent=gene2508 chr7 ENCODE exon 126824968 126825042 . + . Parent=gene2508 ### chr7 ENCODE gene 126825414 126829473 . + . ID=gene2509;name2=FSCN3;Name=AC073934.3-005 chr7 ENCODE exon 126825414 126825956 . + . Parent=gene2509 chr7 ENCODE exon 126829312 126829473 . + . Parent=gene2509 ### chr7 ENCODE gene 126825497 126827616 . - . ID=gene2510;Name=AC000357.1-003;name2=GCC1 chr7 ENCODE exon 126825497 126825723 . - . Parent=gene2510 chr7 ENCODE exon 126825818 126826009 . - . Parent=gene2510 chr7 ENCODE exon 126826134 126826242 . - . Parent=gene2510 chr7 ENCODE exon 126827503 126827616 . - . Parent=gene2510 ### chr7 ENCODE gene 126827640 126835803 . + . ID=gene2511;Name=AC073934.3-001;name2=FSCN3 chr7 ENCODE exon 126827640 126828002 . + . Parent=gene2511 chr7 ENCODE CDS 126827859 126828002 . + 0 Parent=gene2511 chr7 ENCODE exon 126829312 126830008 . + . Parent=gene2511 chr7 ENCODE CDS 126829312 126830008 . + 0 Parent=gene2511 chr7 ENCODE exon 126830333 126830451 . + . Parent=gene2511 chr7 ENCODE CDS 126830333 126830451 . + 2 Parent=gene2511 chr7 ENCODE exon 126832440 126832599 . + . Parent=gene2511 chr7 ENCODE CDS 126832440 126832599 . + 0 Parent=gene2511 chr7 ENCODE exon 126833386 126833556 . + . Parent=gene2511 chr7 ENCODE CDS 126833386 126833556 . + 2 Parent=gene2511 chr7 ENCODE exon 126834199 126834404 . + . Parent=gene2511 chr7 ENCODE CDS 126834199 126834404 . + 2 Parent=gene2511 chr7 ENCODE exon 126835628 126835803 . + . Parent=gene2511 ### chr7 ENCODE gene 126827733 126830335 . + . ID=gene2512;Name=AC073934.3-002;name2=FSCN3 chr7 ENCODE exon 126827733 126827757 . + . Parent=gene2512 chr7 ENCODE exon 126829312 126830008 . + . Parent=gene2512 chr7 ENCODE exon 126830333 126830335 . + . Parent=gene2512 ### chr7 ENCODE gene 126827747 126829490 . + . ID=gene2513;Name=AC073934.3-003;name2=FSCN3 chr7 ENCODE exon 126827747 126828002 . + . Parent=gene2513 chr7 ENCODE exon 126828499 126828579 . + . Parent=gene2513 chr7 ENCODE exon 126828785 126828964 . + . Parent=gene2513 chr7 ENCODE exon 126829312 126829490 . + . Parent=gene2513 ### chr7 ENCODE gene 126829446 126830623 . + . ID=gene2514;Name=AC073934.3-004;name2=FSCN3 chr7 ENCODE exon 126829446 126830008 . + . Parent=gene2514 chr7 ENCODE exon 126830333 126830623 . + . Parent=gene2514 ### chr8 ENCODE gene 118886142 119192762 . - . ID=gene2515;Name=AC113188.1-004;name2=EXT1 chr8 ENCODE exon 118886142 118886313 . - . Parent=gene2515 chr8 ENCODE exon 118888637 118888797 . - . Parent=gene2515 chr8 ENCODE exon 118894292 118894381 . - . Parent=gene2515 chr8 ENCODE exon 118899855 118899950 . - . Parent=gene2515 chr8 ENCODE exon 118901096 118901214 . - . Parent=gene2515 chr8 ENCODE exon 118903885 118904017 . - . Parent=gene2515 chr8 ENCODE exon 118911650 118911769 . - . Parent=gene2515 chr8 ENCODE exon 118916864 118916971 . - . Parent=gene2515 chr8 ENCODE exon 119192394 119192762 . - . Parent=gene2515 ### chr8 ENCODE gene 118886142 119192806 . - . ID=gene2516;Name=AC113188.1-002;name2=EXT1 chr8 ENCODE exon 118886142 118886313 . - . Parent=gene2516 chr8 ENCODE exon 118888637 118888797 . - . Parent=gene2516 chr8 ENCODE exon 118894292 118894381 . - . Parent=gene2516 chr8 ENCODE exon 118899855 118899880 . - . Parent=gene2516 chr8 ENCODE exon 119191651 119192806 . - . Parent=gene2516 ### chr8 ENCODE gene 118886142 119193119 . - . ID=gene2517;Name=AC113188.1-001;name2=EXT1 chr8 ENCODE exon 118886142 118886313 . - . Parent=gene2517 chr8 ENCODE exon 118888637 118888797 . - . Parent=gene2517 chr8 ENCODE exon 118894292 118894381 . - . Parent=gene2517 chr8 ENCODE exon 118899855 118899950 . - . Parent=gene2517 chr8 ENCODE exon 118901096 118901214 . - . Parent=gene2517 chr8 ENCODE exon 118903885 118904017 . - . Parent=gene2517 chr8 ENCODE exon 118911650 118911769 . - . Parent=gene2517 chr8 ENCODE exon 118916864 118916971 . - . Parent=gene2517 chr8 ENCODE exon 118918528 118918621 . - . Parent=gene2517 chr8 ENCODE exon 119191505 119193119 . - . Parent=gene2517 ### chr8 ENCODE gene 118911657 119191834 . - . ID=gene2518;Name=AC113188.1-003;name2=EXT1 chr8 ENCODE exon 118911657 118911769 . - . Parent=gene2518 chr8 ENCODE exon 118913019 118913073 . - . Parent=gene2518 chr8 ENCODE exon 118916864 118916971 . - . Parent=gene2518 chr8 ENCODE exon 118918528 118918621 . - . Parent=gene2518 chr8 ENCODE exon 119191505 119191834 . - . Parent=gene2518 ### chr8 ENCODE gene 119276307 119279152 . - . ID=gene2519;Name=AC023590.2-005;name2=SAMD12 chr8 ENCODE exon 119276307 119279152 . - . Parent=gene2519 ### chr8 ENCODE gene 119276307 119279152 . - . ID=gene2520;Name=AC023590.2-003;name2=SAMD12 chr8 ENCODE exon 119276307 119279152 . - . Parent=gene2520 ### chr8 ENCODE gene 119278740 119279152 . - . ID=gene2521;Name=AC023590.2-004;name2=SAMD12 chr8 ENCODE exon 119278740 119279152 . - . Parent=gene2521 ### chr9 ENCODE gene 128768701 128778478 . + . ID=gene2522;Name=RP11-101E3.2-006;name2=PHYHD1 chr9 ENCODE exon 128768701 128769029 . + . Parent=gene2522 chr9 ENCODE exon 128775615 128775690 . + . Parent=gene2522 chr9 ENCODE exon 128775844 128775891 . + . Parent=gene2522 chr9 ENCODE exon 128778281 128778336 . + . Parent=gene2522 chr9 ENCODE exon 128778416 128778478 . + . Parent=gene2522 ### chr9 ENCODE gene 128768871 128769029 . + . ID=gene2523;Name=RP11-101E3.2-011;name2=PHYHD1 chr9 ENCODE exon 128768871 128769029 . + . Parent=gene2523 ### chr9 ENCODE gene 128768871 128775621 . + . ID=gene2524;Name=RP11-101E3.2-012;name2=PHYHD1 chr9 ENCODE exon 128768871 128769029 . + . Parent=gene2524 chr9 ENCODE exon 128775615 128775621 . + . Parent=gene2524 ### chr9 ENCODE gene 128768871 128782275 . + . ID=gene2525;Name=RP11-101E3.2-005;name2=PHYHD1 chr9 ENCODE exon 128768871 128769029 . + . Parent=gene2525 chr9 ENCODE exon 128775615 128775690 . + . Parent=gene2525 chr9 ENCODE exon 128775844 128775891 . + . Parent=gene2525 chr9 ENCODE exon 128778281 128778336 . + . Parent=gene2525 chr9 ENCODE exon 128778416 128778478 . + . Parent=gene2525 chr9 ENCODE exon 128779590 128779611 . + . Parent=gene2525 chr9 ENCODE exon 128782202 128782275 . + . Parent=gene2525 ### chr9 ENCODE gene 128768871 128783404 . + . ID=gene2526;name2=PHYHD1;Name=RP11-101E3.2-002 chr9 ENCODE exon 128768871 128769029 . + . Parent=gene2526 chr9 ENCODE exon 128775615 128775690 . + . Parent=gene2526 chr9 ENCODE exon 128775844 128775891 . + . Parent=gene2526 chr9 ENCODE exon 128778281 128778336 . + . Parent=gene2526 chr9 ENCODE exon 128779590 128779611 . + . Parent=gene2526 chr9 ENCODE exon 128782202 128782330 . + . Parent=gene2526 chr9 ENCODE exon 128782432 128782548 . + . Parent=gene2526 chr9 ENCODE exon 128783278 128783404 . + . Parent=gene2526 ### chr9 ENCODE gene 128768871 128783870 . + . ID=gene2527;name2=PHYHD1;Name=RP11-101E3.2-001 chr9 ENCODE exon 128768871 128769029 . + . Parent=gene2527 chr9 ENCODE exon 128775615 128775690 . + . Parent=gene2527 chr9 ENCODE exon 128775844 128775891 . + . Parent=gene2527 chr9 ENCODE exon 128778281 128778336 . + . Parent=gene2527 chr9 ENCODE exon 128778416 128778478 . + . Parent=gene2527 chr9 ENCODE exon 128779590 128779611 . + . Parent=gene2527 chr9 ENCODE exon 128782202 128782330 . + . Parent=gene2527 chr9 ENCODE exon 128782432 128782548 . + . Parent=gene2527 chr9 ENCODE exon 128783278 128783404 . + . Parent=gene2527 chr9 ENCODE exon 128783501 128783870 . + . Parent=gene2527 ### chr9 ENCODE gene 128768871 128783870 . + . ID=gene2528;Name=RP11-101E3.2-009;name2=PHYHD1 chr9 ENCODE exon 128768871 128769029 . + . Parent=gene2528 chr9 ENCODE exon 128775615 128775690 . + . Parent=gene2528 chr9 ENCODE exon 128775844 128775891 . + . Parent=gene2528 chr9 ENCODE exon 128778281 128778336 . + . Parent=gene2528 chr9 ENCODE exon 128778416 128778478 . + . Parent=gene2528 chr9 ENCODE exon 128779590 128779777 . + . Parent=gene2528 chr9 ENCODE exon 128782202 128782330 . + . Parent=gene2528 chr9 ENCODE exon 128782432 128782548 . + . Parent=gene2528 chr9 ENCODE exon 128783278 128783404 . + . Parent=gene2528 chr9 ENCODE exon 128783501 128783870 . + . Parent=gene2528 ### chr9 ENCODE gene 128768871 128783871 . + . ID=gene2529;Name=RP11-101E3.2-008;name2=PHYHD1 chr9 ENCODE exon 128768871 128769029 . + . Parent=gene2529 chr9 ENCODE exon 128775615 128775690 . + . Parent=gene2529 chr9 ENCODE exon 128775844 128775891 . + . Parent=gene2529 chr9 ENCODE exon 128778281 128778336 . + . Parent=gene2529 chr9 ENCODE exon 128778416 128778478 . + . Parent=gene2529 chr9 ENCODE exon 128782202 128782330 . + . Parent=gene2529 chr9 ENCODE exon 128782432 128782548 . + . Parent=gene2529 chr9 ENCODE exon 128783278 128783404 . + . Parent=gene2529 chr9 ENCODE exon 128783501 128783871 . + . Parent=gene2529 ### chr9 ENCODE gene 128768879 128782542 . + . ID=gene2530;Name=RP11-101E3.2-010;name2=PHYHD1 chr9 ENCODE exon 128768879 128769029 . + . Parent=gene2530 chr9 ENCODE CDS 128768968 128769029 . + 0 Parent=gene2530 chr9 ENCODE exon 128775560 128775690 . + . Parent=gene2530 chr9 ENCODE CDS 128775560 128775690 . + 1 Parent=gene2530 chr9 ENCODE exon 128775844 128775891 . + . Parent=gene2530 chr9 ENCODE CDS 128775844 128775891 . + 2 Parent=gene2530 chr9 ENCODE exon 128778281 128778336 . + . Parent=gene2530 chr9 ENCODE CDS 128778281 128778336 . + 2 Parent=gene2530 chr9 ENCODE exon 128778416 128778478 . + . Parent=gene2530 chr9 ENCODE CDS 128778416 128778478 . + 0 Parent=gene2530 chr9 ENCODE exon 128779590 128779611 . + . Parent=gene2530 chr9 ENCODE CDS 128779590 128779611 . + 0 Parent=gene2530 chr9 ENCODE exon 128782202 128782330 . + . Parent=gene2530 chr9 ENCODE CDS 128782202 128782330 . + 2 Parent=gene2530 chr9 ENCODE exon 128782432 128782542 . + . Parent=gene2530 chr9 ENCODE CDS 128782432 128782542 . + 2 Parent=gene2530 ### chr9 ENCODE gene 128775858 128783871 . + . ID=gene2531;Name=RP11-101E3.2-004;name2=PHYHD1 chr9 ENCODE exon 128775858 128775891 . + . Parent=gene2531 chr9 ENCODE CDS 128775858 128775891 . + 0 Parent=gene2531 chr9 ENCODE exon 128778281 128778336 . + . Parent=gene2531 chr9 ENCODE CDS 128778281 128778336 . + 2 Parent=gene2531 chr9 ENCODE exon 128778416 128778478 . + . Parent=gene2531 chr9 ENCODE CDS 128778416 128778478 . + 0 Parent=gene2531 chr9 ENCODE exon 128782202 128782330 . + . Parent=gene2531 chr9 ENCODE CDS 128782202 128782330 . + 0 Parent=gene2531 chr9 ENCODE exon 128783278 128783404 . + . Parent=gene2531 chr9 ENCODE CDS 128783278 128783404 . + 0 Parent=gene2531 chr9 ENCODE CDS 128783501 128783586 . + 2 Parent=gene2531 chr9 ENCODE exon 128783501 128783871 . + . Parent=gene2531 ### chr9 ENCODE gene 128779582 128783871 . + . ID=gene2532;Name=RP11-101E3.2-003;name2=PHYHD1 chr9 ENCODE exon 128779582 128779611 . + . Parent=gene2532 chr9 ENCODE CDS 128779582 128779611 . + 0 Parent=gene2532 chr9 ENCODE exon 128782202 128782330 . + . Parent=gene2532 chr9 ENCODE CDS 128782202 128782330 . + 0 Parent=gene2532 chr9 ENCODE CDS 128783278 128783412 . + 0 Parent=gene2532 chr9 ENCODE exon 128783278 128783871 . + . Parent=gene2532 ### chr9 ENCODE gene 128782226 128783541 . + . ID=gene2533;Name=RP11-101E3.2-007;name2=PHYHD1 chr9 ENCODE exon 128782226 128782548 . + . Parent=gene2533 chr9 ENCODE exon 128783278 128783404 . + . Parent=gene2533 chr9 ENCODE exon 128783501 128783541 . + . Parent=gene2533 ### chr9 ENCODE gene 128783311 128798854 . + . ID=gene2534;Name=RP11-167N5.2-009;name2=NUP188 chr9 ENCODE exon 128783311 128783404 . + . Parent=gene2534 chr9 ENCODE CDS 128783311 128783404 . + 0 Parent=gene2534 chr9 ENCODE exon 128791022 128791076 . + . Parent=gene2534 chr9 ENCODE CDS 128791022 128791076 . + 2 Parent=gene2534 chr9 ENCODE exon 128794606 128794679 . + . Parent=gene2534 chr9 ENCODE CDS 128794606 128794679 . + 1 Parent=gene2534 chr9 ENCODE exon 128798183 128798267 . + . Parent=gene2534 chr9 ENCODE CDS 128798183 128798267 . + 2 Parent=gene2534 chr9 ENCODE exon 128798785 128798854 . + . Parent=gene2534 chr9 ENCODE CDS 128798785 128798854 . + 1 Parent=gene2534 ### chr9 ENCODE gene 128787363 128789452 . - . ID=gene2535;Name=RP11-101E3.1-001;name2=TMEM15 chr9 ENCODE exon 128787363 128789452 . - . Parent=gene2535 chr9 ENCODE CDS 128787520 128789136 . - 0 Parent=gene2535 ### chr9 ENCODE gene 128789532 128848929 . + . ID=gene2536;Name=RP11-167N5.2-001;name2=NUP188 chr9 ENCODE exon 128789532 128789584 . + . Parent=gene2536 chr9 ENCODE CDS 128789553 128789584 . + 0 Parent=gene2536 chr9 ENCODE exon 128791022 128791076 . + . Parent=gene2536 chr9 ENCODE CDS 128791022 128791076 . + 1 Parent=gene2536 chr9 ENCODE exon 128794606 128794679 . + . Parent=gene2536 chr9 ENCODE CDS 128794606 128794679 . + 0 Parent=gene2536 chr9 ENCODE exon 128798183 128798267 . + . Parent=gene2536 chr9 ENCODE CDS 128798183 128798267 . + 1 Parent=gene2536 chr9 ENCODE exon 128798785 128798865 . + . Parent=gene2536 chr9 ENCODE CDS 128798785 128798865 . + 0 Parent=gene2536 chr9 ENCODE exon 128799843 128799887 . + . Parent=gene2536 chr9 ENCODE CDS 128799843 128799887 . + 0 Parent=gene2536 chr9 ENCODE exon 128800635 128800727 . + . Parent=gene2536 chr9 ENCODE CDS 128800635 128800727 . + 0 Parent=gene2536 chr9 ENCODE exon 128800848 128800967 . + . Parent=gene2536 chr9 ENCODE CDS 128800848 128800967 . + 0 Parent=gene2536 chr9 ENCODE exon 128810339 128810550 . + . Parent=gene2536 chr9 ENCODE CDS 128810339 128810550 . + 0 Parent=gene2536 chr9 ENCODE exon 128811233 128811347 . + . Parent=gene2536 chr9 ENCODE CDS 128811233 128811347 . + 1 Parent=gene2536 chr9 ENCODE exon 128812591 128812791 . + . Parent=gene2536 chr9 ENCODE CDS 128812591 128812791 . + 0 Parent=gene2536 chr9 ENCODE exon 128814993 128815082 . + . Parent=gene2536 chr9 ENCODE CDS 128814993 128815082 . + 0 Parent=gene2536 chr9 ENCODE exon 128821095 128821160 . + . Parent=gene2536 chr9 ENCODE CDS 128821095 128821160 . + 0 Parent=gene2536 chr9 ENCODE exon 128822439 128822558 . + . Parent=gene2536 chr9 ENCODE CDS 128822439 128822558 . + 0 Parent=gene2536 chr9 ENCODE exon 128823097 128823223 . + . Parent=gene2536 chr9 ENCODE CDS 128823097 128823223 . + 0 Parent=gene2536 chr9 ENCODE exon 128824382 128824534 . + . Parent=gene2536 chr9 ENCODE CDS 128824382 128824534 . + 2 Parent=gene2536 chr9 ENCODE exon 128824735 128824861 . + . Parent=gene2536 chr9 ENCODE CDS 128824735 128824861 . + 2 Parent=gene2536 chr9 ENCODE exon 128825126 128825213 . + . Parent=gene2536 chr9 ENCODE CDS 128825126 128825213 . + 1 Parent=gene2536 chr9 ENCODE exon 128825307 128825383 . + . Parent=gene2536 chr9 ENCODE CDS 128825307 128825383 . + 0 Parent=gene2536 chr9 ENCODE exon 128826733 128826847 . + . Parent=gene2536 chr9 ENCODE CDS 128826733 128826847 . + 1 Parent=gene2536 chr9 ENCODE exon 128828391 128828511 . + . Parent=gene2536 chr9 ENCODE CDS 128828391 128828511 . + 0 Parent=gene2536 chr9 ENCODE exon 128828642 128828708 . + . Parent=gene2536 chr9 ENCODE CDS 128828642 128828708 . + 2 Parent=gene2536 chr9 ENCODE exon 128829422 128829550 . + . Parent=gene2536 chr9 ENCODE CDS 128829422 128829550 . + 1 Parent=gene2536 chr9 ENCODE exon 128829880 128830019 . + . Parent=gene2536 chr9 ENCODE CDS 128829880 128830019 . + 1 Parent=gene2536 chr9 ENCODE exon 128831953 128832059 . + . Parent=gene2536 chr9 ENCODE CDS 128831953 128832059 . + 2 Parent=gene2536 chr9 ENCODE exon 128835030 128835236 . + . Parent=gene2536 chr9 ENCODE CDS 128835030 128835236 . + 0 Parent=gene2536 chr9 ENCODE exon 128835358 128835527 . + . Parent=gene2536 chr9 ENCODE CDS 128835358 128835527 . + 0 Parent=gene2536 chr9 ENCODE exon 128836206 128836275 . + . Parent=gene2536 chr9 ENCODE CDS 128836206 128836275 . + 1 Parent=gene2536 chr9 ENCODE exon 128836689 128836756 . + . Parent=gene2536 chr9 ENCODE CDS 128836689 128836756 . + 0 Parent=gene2536 chr9 ENCODE exon 128837152 128837347 . + . Parent=gene2536 chr9 ENCODE CDS 128837152 128837347 . + 1 Parent=gene2536 chr9 ENCODE exon 128839984 128840061 . + . Parent=gene2536 chr9 ENCODE CDS 128839984 128840061 . + 0 Parent=gene2536 chr9 ENCODE exon 128840371 128840456 . + . Parent=gene2536 chr9 ENCODE CDS 128840371 128840456 . + 0 Parent=gene2536 chr9 ENCODE exon 128841005 128841150 . + . Parent=gene2536 chr9 ENCODE CDS 128841005 128841150 . + 1 Parent=gene2536 chr9 ENCODE exon 128841457 128841638 . + . Parent=gene2536 chr9 ENCODE CDS 128841457 128841638 . + 2 Parent=gene2536 chr9 ENCODE exon 128843362 128843562 . + . Parent=gene2536 chr9 ENCODE CDS 128843362 128843562 . + 0 Parent=gene2536 chr9 ENCODE exon 128843717 128843809 . + . Parent=gene2536 chr9 ENCODE CDS 128843717 128843809 . + 0 Parent=gene2536 chr9 ENCODE exon 128844650 128844808 . + . Parent=gene2536 chr9 ENCODE CDS 128844650 128844808 . + 0 Parent=gene2536 chr9 ENCODE exon 128845150 128845287 . + . Parent=gene2536 chr9 ENCODE CDS 128845150 128845287 . + 0 Parent=gene2536 chr9 ENCODE exon 128846980 128847054 . + . Parent=gene2536 chr9 ENCODE CDS 128846980 128847054 . + 0 Parent=gene2536 chr9 ENCODE exon 128847136 128847363 . + . Parent=gene2536 chr9 ENCODE CDS 128847136 128847363 . + 0 Parent=gene2536 chr9 ENCODE exon 128847478 128847609 . + . Parent=gene2536 chr9 ENCODE CDS 128847478 128847609 . + 0 Parent=gene2536 chr9 ENCODE exon 128847883 128847956 . + . Parent=gene2536 chr9 ENCODE CDS 128847883 128847956 . + 0 Parent=gene2536 chr9 ENCODE exon 128848072 128848201 . + . Parent=gene2536 chr9 ENCODE CDS 128848072 128848201 . + 1 Parent=gene2536 chr9 ENCODE CDS 128848335 128848511 . + 0 Parent=gene2536 chr9 ENCODE exon 128848335 128848929 . + . Parent=gene2536 ### chr9 ENCODE gene 128789850 128798844 . + . ID=gene2537;Name=RP11-167N5.2-010;name2=NUP188 chr9 ENCODE exon 128789850 128790461 . + . Parent=gene2537 chr9 ENCODE exon 128791022 128791076 . + . Parent=gene2537 chr9 ENCODE exon 128794606 128794679 . + . Parent=gene2537 chr9 ENCODE exon 128798183 128798267 . + . Parent=gene2537 chr9 ENCODE exon 128798785 128798844 . + . Parent=gene2537 ### chr9 ENCODE gene 128790792 128794728 . + . ID=gene2538;Name=RP11-167N5.2-004;name2=NUP188 chr9 ENCODE exon 128790792 128791076 . + . Parent=gene2538 chr9 ENCODE exon 128794606 128794728 . + . Parent=gene2538 ### chr9 ENCODE gene 128825347 128827095 . + . ID=gene2539;Name=RP11-167N5.2-008;name2=NUP188 chr9 ENCODE exon 128825347 128825383 . + . Parent=gene2539 chr9 ENCODE exon 128826733 128827095 . + . Parent=gene2539 ### chr9 ENCODE gene 128826804 128845826 . + . ID=gene2540;Name=RP11-167N5.2-002;name2=NUP188 chr9 ENCODE exon 128826804 128826847 . + . Parent=gene2540 chr9 ENCODE exon 128828391 128828511 . + . Parent=gene2540 chr9 ENCODE exon 128828642 128828708 . + . Parent=gene2540 chr9 ENCODE exon 128829422 128829550 . + . Parent=gene2540 chr9 ENCODE exon 128829880 128830019 . + . Parent=gene2540 chr9 ENCODE exon 128831953 128832059 . + . Parent=gene2540 chr9 ENCODE exon 128835030 128835236 . + . Parent=gene2540 chr9 ENCODE exon 128835358 128835527 . + . Parent=gene2540 chr9 ENCODE exon 128836206 128836275 . + . Parent=gene2540 chr9 ENCODE exon 128836689 128836756 . + . Parent=gene2540 chr9 ENCODE exon 128837152 128837347 . + . Parent=gene2540 chr9 ENCODE exon 128839984 128840061 . + . Parent=gene2540 chr9 ENCODE exon 128840371 128840456 . + . Parent=gene2540 chr9 ENCODE exon 128841005 128841150 . + . Parent=gene2540 chr9 ENCODE exon 128841457 128841638 . + . Parent=gene2540 chr9 ENCODE exon 128843362 128843562 . + . Parent=gene2540 chr9 ENCODE exon 128843717 128843809 . + . Parent=gene2540 chr9 ENCODE exon 128844650 128844808 . + . Parent=gene2540 chr9 ENCODE exon 128845150 128845826 . + . Parent=gene2540 ### chr9 ENCODE gene 128828422 128835063 . + . ID=gene2541;Name=RP11-167N5.2-005;name2=NUP188 chr9 ENCODE exon 128828422 128828511 . + . Parent=gene2541 chr9 ENCODE exon 128828642 128828708 . + . Parent=gene2541 chr9 ENCODE exon 128829422 128829550 . + . Parent=gene2541 chr9 ENCODE exon 128829880 128830019 . + . Parent=gene2541 chr9 ENCODE exon 128831986 128832059 . + . Parent=gene2541 chr9 ENCODE exon 128835030 128835063 . + . Parent=gene2541 ### chr9 ENCODE gene 128834928 128836723 . + . ID=gene2542;Name=RP11-167N5.2-011;name2=NUP188 chr9 ENCODE exon 128834928 128835236 . + . Parent=gene2542 chr9 ENCODE exon 128835358 128835527 . + . Parent=gene2542 chr9 ENCODE exon 128836206 128836275 . + . Parent=gene2542 chr9 ENCODE exon 128836689 128836723 . + . Parent=gene2542 ### chr9 ENCODE gene 128836229 128837033 . + . ID=gene2543;Name=RP11-167N5.2-006;name2=NUP188 chr9 ENCODE exon 128836229 128836275 . + . Parent=gene2543 chr9 ENCODE exon 128836689 128837033 . + . Parent=gene2543 ### chr9 ENCODE gene 128836969 128840429 . + . ID=gene2544;Name=RP11-167N5.2-003;name2=NUP188 chr9 ENCODE exon 128836969 128837347 . + . Parent=gene2544 chr9 ENCODE exon 128839984 128840061 . + . Parent=gene2544 chr9 ENCODE exon 128840371 128840429 . + . Parent=gene2544 ### chr9 ENCODE gene 128841434 128843724 . + . ID=gene2545;Name=RP11-167N5.2-012;name2=NUP188 chr9 ENCODE exon 128841434 128841638 . + . Parent=gene2545 chr9 ENCODE exon 128843362 128843724 . + . Parent=gene2545 ### chr9 ENCODE gene 128848869 128870133 . - . ID=gene2546;Name=RP11-167N5.3-001;name2=SH3GLB2 chr9 ENCODE exon 128848869 128850624 . - . Parent=gene2546 chr9 ENCODE CDS 128850517 128850624 . - 0 Parent=gene2546 chr9 ENCODE exon 128850939 128851179 . - . Parent=gene2546 chr9 ENCODE CDS 128850939 128851179 . - 1 Parent=gene2546 chr9 ENCODE exon 128851604 128851704 . - . Parent=gene2546 chr9 ENCODE CDS 128851604 128851704 . - 0 Parent=gene2546 chr9 ENCODE exon 128851953 128852042 . - . Parent=gene2546 chr9 ENCODE CDS 128851953 128852042 . - 0 Parent=gene2546 chr9 ENCODE exon 128852503 128852526 . - . Parent=gene2546 chr9 ENCODE CDS 128852503 128852526 . - 0 Parent=gene2546 chr9 ENCODE exon 128854069 128854131 . - . Parent=gene2546 chr9 ENCODE CDS 128854069 128854131 . - 0 Parent=gene2546 chr9 ENCODE exon 128856244 128856336 . - . Parent=gene2546 chr9 ENCODE CDS 128856244 128856336 . - 0 Parent=gene2546 chr9 ENCODE exon 128856604 128856737 . - . Parent=gene2546 chr9 ENCODE CDS 128856604 128856737 . - 2 Parent=gene2546 chr9 ENCODE exon 128862924 128863052 . - . Parent=gene2546 chr9 ENCODE CDS 128862924 128863052 . - 2 Parent=gene2546 chr9 ENCODE exon 128864115 128864256 . - . Parent=gene2546 chr9 ENCODE CDS 128864115 128864256 . - 0 Parent=gene2546 chr9 ENCODE CDS 128869925 128869987 . - 0 Parent=gene2546 chr9 ENCODE exon 128869925 128870133 . - . Parent=gene2546 ### chr9 ENCODE gene 128849625 128853849 . - . ID=gene2547;Name=RP11-167N5.3-003;name2=SH3GLB2 chr9 ENCODE exon 128849625 128850624 . - . Parent=gene2547 chr9 ENCODE exon 128850939 128851179 . - . Parent=gene2547 chr9 ENCODE exon 128851286 128851300 . - . Parent=gene2547 chr9 ENCODE exon 128851604 128851704 . - . Parent=gene2547 chr9 ENCODE exon 128851953 128852042 . - . Parent=gene2547 chr9 ENCODE exon 128852503 128853849 . - . Parent=gene2547 ### chr9 ENCODE gene 128849867 128870047 . - . ID=gene2548;Name=RP11-167N5.3-002;name2=SH3GLB2 chr9 ENCODE exon 128849867 128849983 . - . Parent=gene2548 chr9 ENCODE exon 128850517 128850624 . - . Parent=gene2548 chr9 ENCODE CDS 128850517 128850624 . - 0 Parent=gene2548 chr9 ENCODE exon 128850939 128851179 . - . Parent=gene2548 chr9 ENCODE CDS 128850939 128851179 . - 1 Parent=gene2548 chr9 ENCODE exon 128851604 128851704 . - . Parent=gene2548 chr9 ENCODE CDS 128851604 128851704 . - 0 Parent=gene2548 chr9 ENCODE exon 128851953 128852042 . - . Parent=gene2548 chr9 ENCODE CDS 128851953 128852042 . - 0 Parent=gene2548 chr9 ENCODE exon 128852503 128852526 . - . Parent=gene2548 chr9 ENCODE CDS 128852503 128852526 . - 0 Parent=gene2548 chr9 ENCODE exon 128854069 128854131 . - . Parent=gene2548 chr9 ENCODE CDS 128854069 128854131 . - 0 Parent=gene2548 chr9 ENCODE exon 128856244 128856336 . - . Parent=gene2548 chr9 ENCODE CDS 128856244 128856336 . - 0 Parent=gene2548 chr9 ENCODE exon 128856604 128856737 . - . Parent=gene2548 chr9 ENCODE CDS 128856604 128856737 . - 2 Parent=gene2548 chr9 ENCODE exon 128862924 128863052 . - . Parent=gene2548 chr9 ENCODE CDS 128862924 128863052 . - 2 Parent=gene2548 chr9 ENCODE exon 128864115 128864256 . - . Parent=gene2548 chr9 ENCODE CDS 128864115 128864256 . - 0 Parent=gene2548 chr9 ENCODE CDS 128869925 128869987 . - 0 Parent=gene2548 chr9 ENCODE exon 128869925 128870047 . - . Parent=gene2548 ### chr9 ENCODE gene 128849872 128870112 . - . ID=gene2549;Name=RP11-167N5.3-008;name2=SH3GLB2 chr9 ENCODE exon 128849872 128850624 . - . Parent=gene2549 chr9 ENCODE CDS 128850517 128850624 . - 0 Parent=gene2549 chr9 ENCODE exon 128850939 128851179 . - . Parent=gene2549 chr9 ENCODE CDS 128850939 128851179 . - 1 Parent=gene2549 chr9 ENCODE exon 128851286 128851300 . - . Parent=gene2549 chr9 ENCODE CDS 128851286 128851300 . - 1 Parent=gene2549 chr9 ENCODE exon 128851604 128851704 . - . Parent=gene2549 chr9 ENCODE CDS 128851604 128851704 . - 0 Parent=gene2549 chr9 ENCODE exon 128851953 128852042 . - . Parent=gene2549 chr9 ENCODE CDS 128851953 128852042 . - 0 Parent=gene2549 chr9 ENCODE exon 128852503 128852526 . - . Parent=gene2549 chr9 ENCODE CDS 128852503 128852526 . - 0 Parent=gene2549 chr9 ENCODE exon 128854069 128854131 . - . Parent=gene2549 chr9 ENCODE CDS 128854069 128854131 . - 0 Parent=gene2549 chr9 ENCODE exon 128854841 128854852 . - . Parent=gene2549 chr9 ENCODE CDS 128854841 128854852 . - 0 Parent=gene2549 chr9 ENCODE exon 128856244 128856336 . - . Parent=gene2549 chr9 ENCODE CDS 128856244 128856336 . - 0 Parent=gene2549 chr9 ENCODE exon 128856604 128856737 . - . Parent=gene2549 chr9 ENCODE CDS 128856604 128856737 . - 2 Parent=gene2549 chr9 ENCODE exon 128862924 128863052 . - . Parent=gene2549 chr9 ENCODE CDS 128862924 128863052 . - 2 Parent=gene2549 chr9 ENCODE exon 128864115 128864256 . - . Parent=gene2549 chr9 ENCODE CDS 128864115 128864256 . - 0 Parent=gene2549 chr9 ENCODE CDS 128869925 128869987 . - 0 Parent=gene2549 chr9 ENCODE exon 128869925 128870112 . - . Parent=gene2549 ### chr9 ENCODE gene 128849970 128855783 . - . ID=gene2550;Name=RP11-167N5.3-004;name2=SH3GLB2 chr9 ENCODE exon 128849970 128850624 . - . Parent=gene2550 chr9 ENCODE exon 128850939 128851179 . - . Parent=gene2550 chr9 ENCODE exon 128851604 128851704 . - . Parent=gene2550 chr9 ENCODE exon 128851953 128855783 . - . Parent=gene2550 ### chr9 ENCODE gene 128851060 128870136 . - . ID=gene2551;Name=RP11-167N5.3-005;name2=SH3GLB2 chr9 ENCODE exon 128851060 128851179 . - . Parent=gene2551 chr9 ENCODE exon 128851604 128851704 . - . Parent=gene2551 chr9 ENCODE exon 128851953 128852042 . - . Parent=gene2551 chr9 ENCODE exon 128852503 128852526 . - . Parent=gene2551 chr9 ENCODE exon 128854069 128854131 . - . Parent=gene2551 chr9 ENCODE exon 128856244 128856336 . - . Parent=gene2551 chr9 ENCODE exon 128856604 128856737 . - . Parent=gene2551 chr9 ENCODE exon 128869925 128870136 . - . Parent=gene2551 ### chr9 ENCODE gene 128851569 128870128 . - . ID=gene2552;Name=RP11-167N5.3-010;name2=SH3GLB2 chr9 ENCODE exon 128851569 128851704 . - . Parent=gene2552 chr9 ENCODE exon 128851953 128852042 . - . Parent=gene2552 chr9 ENCODE exon 128852503 128852526 . - . Parent=gene2552 chr9 ENCODE exon 128854069 128854131 . - . Parent=gene2552 chr9 ENCODE exon 128856244 128856336 . - . Parent=gene2552 chr9 ENCODE exon 128856604 128856737 . - . Parent=gene2552 chr9 ENCODE exon 128862924 128863052 . - . Parent=gene2552 chr9 ENCODE exon 128864115 128864256 . - . Parent=gene2552 chr9 ENCODE exon 128869925 128870128 . - . Parent=gene2552 ### chr9 ENCODE gene 128853557 128856291 . - . ID=gene2553;Name=RP11-167N5.3-009;name2=SH3GLB2 chr9 ENCODE exon 128853557 128854131 . - . Parent=gene2553 chr9 ENCODE exon 128856244 128856291 . - . Parent=gene2553 ### chr9 ENCODE gene 128854063 128863044 . - . ID=gene2554;Name=RP11-167N5.3-007;name2=SH3GLB2 chr9 ENCODE exon 128854063 128854131 . - . Parent=gene2554 chr9 ENCODE exon 128856244 128856336 . - . Parent=gene2554 chr9 ENCODE exon 128856604 128856737 . - . Parent=gene2554 chr9 ENCODE exon 128857573 128857693 . - . Parent=gene2554 chr9 ENCODE exon 128862924 128863044 . - . Parent=gene2554 ### chr9 ENCODE gene 128856254 128870031 . - . ID=gene2555;Name=RP11-167N5.3-006;name2=SH3GLB2 chr9 ENCODE exon 128856254 128856336 . - . Parent=gene2555 chr9 ENCODE exon 128856604 128856737 . - . Parent=gene2555 chr9 ENCODE exon 128857573 128857697 . - . Parent=gene2555 chr9 ENCODE exon 128862924 128863052 . - . Parent=gene2555 chr9 ENCODE exon 128864115 128864256 . - . Parent=gene2555 chr9 ENCODE exon 128869925 128870031 . - . Parent=gene2555 ### chr9 ENCODE gene 128878454 128884233 . + . ID=gene2556;Name=RP11-167N5.1-010;name2=FAM73B chr9 ENCODE exon 128878454 128878514 . + . Parent=gene2556 chr9 ENCODE exon 128882285 128882523 . + . Parent=gene2556 chr9 ENCODE exon 128883965 128884233 . + . Parent=gene2556 ### chr9 ENCODE gene 128878454 128889057 . + . ID=gene2557;Name=RP11-167N5.1-007;name2=FAM73B chr9 ENCODE exon 128878454 128878514 . + . Parent=gene2557 chr9 ENCODE exon 128882285 128882523 . + . Parent=gene2557 chr9 ENCODE exon 128884137 128884347 . + . Parent=gene2557 chr9 ENCODE exon 128888938 128889057 . + . Parent=gene2557 ### chr9 ENCODE gene 128878477 128913904 . + . ID=gene2558;Name=RP11-167N5.1-002;name2=FAM73B chr9 ENCODE exon 128878477 128878514 . + . Parent=gene2558 chr9 ENCODE exon 128882285 128882523 . + . Parent=gene2558 chr9 ENCODE exon 128884137 128884347 . + . Parent=gene2558 chr9 ENCODE exon 128890260 128890372 . + . Parent=gene2558 chr9 ENCODE exon 128891214 128891331 . + . Parent=gene2558 chr9 ENCODE exon 128891660 128891796 . + . Parent=gene2558 chr9 ENCODE exon 128893133 128893253 . + . Parent=gene2558 chr9 ENCODE exon 128900987 128901104 . + . Parent=gene2558 chr9 ENCODE exon 128902383 128902483 . + . Parent=gene2558 chr9 ENCODE exon 128903064 128903179 . + . Parent=gene2558 chr9 ENCODE exon 128905077 128905149 . + . Parent=gene2558 chr9 ENCODE exon 128905378 128905464 . + . Parent=gene2558 chr9 ENCODE exon 128909606 128909704 . + . Parent=gene2558 chr9 ENCODE exon 128910031 128910808 . + . Parent=gene2558 chr9 ENCODE exon 128910909 128910962 . + . Parent=gene2558 chr9 ENCODE exon 128911682 128911798 . + . Parent=gene2558 chr9 ENCODE exon 128912080 128913904 . + . Parent=gene2558 ### chr9 ENCODE gene 128878479 128913904 . + . ID=gene2559;Name=RP11-167N5.1-003;name2=FAM73B chr9 ENCODE exon 128878479 128878514 . + . Parent=gene2559 chr9 ENCODE exon 128882285 128882523 . + . Parent=gene2559 chr9 ENCODE exon 128884137 128884347 . + . Parent=gene2559 chr9 ENCODE exon 128890260 128890372 . + . Parent=gene2559 chr9 ENCODE exon 128891214 128891331 . + . Parent=gene2559 chr9 ENCODE exon 128891660 128891796 . + . Parent=gene2559 chr9 ENCODE exon 128900987 128901104 . + . Parent=gene2559 chr9 ENCODE exon 128902383 128902483 . + . Parent=gene2559 chr9 ENCODE exon 128903064 128903179 . + . Parent=gene2559 chr9 ENCODE exon 128909606 128909704 . + . Parent=gene2559 chr9 ENCODE exon 128909852 128910165 . + . Parent=gene2559 chr9 ENCODE exon 128910909 128910962 . + . Parent=gene2559 chr9 ENCODE exon 128911682 128911798 . + . Parent=gene2559 chr9 ENCODE exon 128912080 128913904 . + . Parent=gene2559 ### chr9 ENCODE gene 128878767 128913915 . + . ID=gene2560;Name=RP11-167N5.1-001;name2=FAM73B chr9 ENCODE exon 128878767 128878849 . + . Parent=gene2560 chr9 ENCODE exon 128882285 128882523 . + . Parent=gene2560 chr9 ENCODE CDS 128882428 128882523 . + 0 Parent=gene2560 chr9 ENCODE exon 128884137 128884347 . + . Parent=gene2560 chr9 ENCODE CDS 128884137 128884347 . + 0 Parent=gene2560 chr9 ENCODE exon 128890260 128890372 . + . Parent=gene2560 chr9 ENCODE CDS 128890260 128890372 . + 2 Parent=gene2560 chr9 ENCODE exon 128891214 128891331 . + . Parent=gene2560 chr9 ENCODE CDS 128891214 128891331 . + 0 Parent=gene2560 chr9 ENCODE exon 128891660 128891796 . + . Parent=gene2560 chr9 ENCODE CDS 128891660 128891796 . + 2 Parent=gene2560 chr9 ENCODE exon 128900987 128901104 . + . Parent=gene2560 chr9 ENCODE CDS 128900987 128901104 . + 0 Parent=gene2560 chr9 ENCODE exon 128902383 128902483 . + . Parent=gene2560 chr9 ENCODE CDS 128902383 128902483 . + 2 Parent=gene2560 chr9 ENCODE exon 128903064 128903179 . + . Parent=gene2560 chr9 ENCODE CDS 128903064 128903179 . + 0 Parent=gene2560 chr9 ENCODE exon 128905077 128905149 . + . Parent=gene2560 chr9 ENCODE CDS 128905077 128905149 . + 1 Parent=gene2560 chr9 ENCODE exon 128905378 128905464 . + . Parent=gene2560 chr9 ENCODE CDS 128905378 128905464 . + 0 Parent=gene2560 chr9 ENCODE exon 128909606 128909704 . + . Parent=gene2560 chr9 ENCODE CDS 128909606 128909704 . + 0 Parent=gene2560 chr9 ENCODE exon 128910031 128910165 . + . Parent=gene2560 chr9 ENCODE CDS 128910031 128910165 . + 0 Parent=gene2560 chr9 ENCODE exon 128910909 128910962 . + . Parent=gene2560 chr9 ENCODE CDS 128910909 128910962 . + 0 Parent=gene2560 chr9 ENCODE exon 128911682 128911798 . + . Parent=gene2560 chr9 ENCODE CDS 128911682 128911798 . + 0 Parent=gene2560 chr9 ENCODE CDS 128912080 128912286 . + 0 Parent=gene2560 chr9 ENCODE exon 128912080 128913915 . + . Parent=gene2560 ### chr9 ENCODE gene 128878828 128884339 . + . ID=gene2561;Name=RP11-167N5.1-009;name2=FAM73B chr9 ENCODE exon 128878828 128878849 . + . Parent=gene2561 chr9 ENCODE exon 128881621 128881719 . + . Parent=gene2561 chr9 ENCODE exon 128882285 128882523 . + . Parent=gene2561 chr9 ENCODE CDS 128882428 128882523 . + 0 Parent=gene2561 chr9 ENCODE exon 128884137 128884339 . + . Parent=gene2561 chr9 ENCODE CDS 128884137 128884339 . + 0 Parent=gene2561 ### chr9 ENCODE gene 128902315 128910144 . + . ID=gene2562;Name=RP11-167N5.1-011;name2=FAM73B chr9 ENCODE exon 128902315 128902483 . + . Parent=gene2562 chr9 ENCODE exon 128903064 128903179 . + . Parent=gene2562 chr9 ENCODE exon 128905378 128905464 . + . Parent=gene2562 chr9 ENCODE exon 128909606 128909704 . + . Parent=gene2562 chr9 ENCODE exon 128910031 128910144 . + . Parent=gene2562 ### chr9 ENCODE gene 128902385 128905463 . + . ID=gene2563;Name=RP11-167N5.1-006;name2=FAM73B chr9 ENCODE exon 128902385 128902483 . + . Parent=gene2563 chr9 ENCODE exon 128903064 128903179 . + . Parent=gene2563 chr9 ENCODE exon 128905006 128905149 . + . Parent=gene2563 chr9 ENCODE exon 128905378 128905463 . + . Parent=gene2563 ### chr9 ENCODE gene 128903130 128909847 . + . ID=gene2564;Name=RP11-167N5.1-005;name2=FAM73B chr9 ENCODE exon 128903130 128903179 . + . Parent=gene2564 chr9 ENCODE exon 128905077 128905149 . + . Parent=gene2564 chr9 ENCODE exon 128905378 128905464 . + . Parent=gene2564 chr9 ENCODE exon 128909606 128909847 . + . Parent=gene2564 ### chr9 ENCODE gene 128905120 128910928 . + . ID=gene2565;Name=RP11-167N5.1-013;name2=FAM73B chr9 ENCODE exon 128905120 128905149 . + . Parent=gene2565 chr9 ENCODE exon 128905378 128905464 . + . Parent=gene2565 chr9 ENCODE exon 128909606 128909704 . + . Parent=gene2565 chr9 ENCODE exon 128909828 128910165 . + . Parent=gene2565 chr9 ENCODE exon 128910909 128910928 . + . Parent=gene2565 ### chr9 ENCODE gene 128909341 128910233 . + . ID=gene2566;Name=RP11-167N5.1-012;name2=FAM73B chr9 ENCODE exon 128909341 128909704 . + . Parent=gene2566 chr9 ENCODE exon 128910031 128910233 . + . Parent=gene2566 ### chr9 ENCODE gene 128910767 128911767 . + . ID=gene2567;Name=RP11-167N5.1-008;name2=FAM73B chr9 ENCODE exon 128910767 128910808 . + . Parent=gene2567 chr9 ENCODE exon 128910909 128911767 . + . Parent=gene2567 ### chr9 ENCODE gene 128911092 128913904 . + . ID=gene2568;Name=RP11-167N5.1-004;name2=FAM73B chr9 ENCODE exon 128911092 128911798 . + . Parent=gene2568 chr9 ENCODE exon 128912080 128913904 . + . Parent=gene2568 ### chr9 ENCODE gene 128922933 128932268 . + . ID=gene2569;Name=RP11-167N5.4-001;name2=DOLPP1 chr9 ENCODE exon 128922933 128923040 . + . Parent=gene2569 chr9 ENCODE CDS 128922965 128923040 . + 0 Parent=gene2569 chr9 ENCODE exon 128926501 128926601 . + . Parent=gene2569 chr9 ENCODE CDS 128926501 128926601 . + 2 Parent=gene2569 chr9 ENCODE exon 128926856 128926940 . + . Parent=gene2569 chr9 ENCODE CDS 128926856 128926940 . + 0 Parent=gene2569 chr9 ENCODE exon 128927040 128927139 . + . Parent=gene2569 chr9 ENCODE CDS 128927040 128927139 . + 2 Parent=gene2569 chr9 ENCODE exon 128927351 128927449 . + . Parent=gene2569 chr9 ENCODE CDS 128927351 128927449 . + 1 Parent=gene2569 chr9 ENCODE exon 128927972 128928100 . + . Parent=gene2569 chr9 ENCODE CDS 128927972 128928100 . + 1 Parent=gene2569 chr9 ENCODE exon 128928542 128928631 . + . Parent=gene2569 chr9 ENCODE CDS 128928542 128928631 . + 1 Parent=gene2569 chr9 ENCODE CDS 128930804 128930840 . + 1 Parent=gene2569 chr9 ENCODE exon 128930804 128932268 . + . Parent=gene2569 ### chr9 ENCODE gene 128922967 128932271 . + . ID=gene2570;Name=RP11-167N5.4-002;name2=DOLPP1 chr9 ENCODE exon 128922967 128923040 . + . Parent=gene2570 chr9 ENCODE exon 128926501 128926601 . + . Parent=gene2570 chr9 ENCODE exon 128927040 128927139 . + . Parent=gene2570 chr9 ENCODE exon 128927351 128927449 . + . Parent=gene2570 chr9 ENCODE exon 128928542 128928631 . + . Parent=gene2570 chr9 ENCODE exon 128930804 128932271 . + . Parent=gene2570 ### chr9 ENCODE gene 128922969 128931188 . + . ID=gene2571;Name=RP11-167N5.4-003;name2=DOLPP1 chr9 ENCODE exon 128922969 128923040 . + . Parent=gene2571 chr9 ENCODE exon 128926501 128926601 . + . Parent=gene2571 chr9 ENCODE exon 128926856 128926940 . + . Parent=gene2571 chr9 ENCODE exon 128927040 128927139 . + . Parent=gene2571 chr9 ENCODE exon 128927351 128927449 . + . Parent=gene2571 chr9 ENCODE exon 128928542 128928631 . + . Parent=gene2571 chr9 ENCODE exon 128930804 128931188 . + . Parent=gene2571 ### chr9 ENCODE gene 128926432 128932268 . + . ID=gene2572;Name=RP11-167N5.4-004;name2=DOLPP1 chr9 ENCODE exon 128926432 128926601 . + . Parent=gene2572 chr9 ENCODE exon 128926856 128926940 . + . Parent=gene2572 chr9 ENCODE exon 128927040 128927139 . + . Parent=gene2572 chr9 ENCODE exon 128932074 128932268 . + . Parent=gene2572 ### chr9 ENCODE gene 128936643 128952637 . - . ID=gene2573;Name=RP11-247A12.5-006;name2=CRAT chr9 ENCODE exon 128936643 128937445 . - . Parent=gene2573 chr9 ENCODE CDS 128937230 128937445 . - 0 Parent=gene2573 chr9 ENCODE exon 128937831 128937968 . - . Parent=gene2573 chr9 ENCODE CDS 128937831 128937968 . - 0 Parent=gene2573 chr9 ENCODE exon 128939083 128939145 . - . Parent=gene2573 chr9 ENCODE CDS 128939083 128939145 . - 0 Parent=gene2573 chr9 ENCODE exon 128939846 128939981 . - . Parent=gene2573 chr9 ENCODE CDS 128939846 128939981 . - 1 Parent=gene2573 chr9 ENCODE exon 128940082 128940204 . - . Parent=gene2573 chr9 ENCODE CDS 128940082 128940204 . - 1 Parent=gene2573 chr9 ENCODE exon 128940364 128940483 . - . Parent=gene2573 chr9 ENCODE CDS 128940364 128940483 . - 1 Parent=gene2573 chr9 ENCODE exon 128941699 128941799 . - . Parent=gene2573 chr9 ENCODE CDS 128941699 128941799 . - 0 Parent=gene2573 chr9 ENCODE exon 128942344 128942522 . - . Parent=gene2573 chr9 ENCODE CDS 128942344 128942522 . - 2 Parent=gene2573 chr9 ENCODE exon 128943716 128943890 . - . Parent=gene2573 chr9 ENCODE CDS 128943716 128943890 . - 0 Parent=gene2573 chr9 ENCODE exon 128944233 128944398 . - . Parent=gene2573 chr9 ENCODE CDS 128944233 128944398 . - 1 Parent=gene2573 chr9 ENCODE exon 128944846 128944899 . - . Parent=gene2573 chr9 ENCODE CDS 128944846 128944899 . - 1 Parent=gene2573 chr9 ENCODE exon 128946021 128946139 . - . Parent=gene2573 chr9 ENCODE CDS 128946021 128946139 . - 0 Parent=gene2573 chr9 ENCODE exon 128949647 128949910 . - . Parent=gene2573 chr9 ENCODE CDS 128949647 128949910 . - 0 Parent=gene2573 chr9 ENCODE CDS 128952316 128952342 . - 0 Parent=gene2573 chr9 ENCODE exon 128952316 128952637 . - . Parent=gene2573 ### chr9 ENCODE gene 128937039 128940204 . - . ID=gene2574;Name=RP11-247A12.5-010;name2=CRAT chr9 ENCODE exon 128937039 128937445 . - . Parent=gene2574 chr9 ENCODE CDS 128937230 128937445 . - 2 Parent=gene2574 chr9 ENCODE exon 128937903 128937968 . - . Parent=gene2574 chr9 ENCODE CDS 128937903 128937968 . - 2 Parent=gene2574 chr9 ENCODE exon 128939083 128939145 . - . Parent=gene2574 chr9 ENCODE CDS 128939083 128939145 . - 2 Parent=gene2574 chr9 ENCODE exon 128939846 128939981 . - . Parent=gene2574 chr9 ENCODE CDS 128939846 128939981 . - 0 Parent=gene2574 chr9 ENCODE exon 128940082 128940204 . - . Parent=gene2574 chr9 ENCODE CDS 128940082 128940204 . - 0 Parent=gene2574 ### chr9 ENCODE gene 128943740 128953022 . - . ID=gene2575;Name=RP11-247A12.5-003;name2=CRAT chr9 ENCODE exon 128943740 128943890 . - . Parent=gene2575 chr9 ENCODE exon 128944233 128944398 . - . Parent=gene2575 chr9 ENCODE exon 128944846 128944899 . - . Parent=gene2575 chr9 ENCODE exon 128949647 128949910 . - . Parent=gene2575 chr9 ENCODE exon 128952791 128953022 . - . Parent=gene2575 ### chr9 ENCODE gene 128944247 128952615 . - . ID=gene2576;Name=RP11-247A12.5-002;name2=CRAT chr9 ENCODE exon 128944247 128944398 . - . Parent=gene2576 chr9 ENCODE exon 128944846 128944899 . - . Parent=gene2576 chr9 ENCODE exon 128946021 128946139 . - . Parent=gene2576 chr9 ENCODE exon 128949647 128949910 . - . Parent=gene2576 chr9 ENCODE exon 128951012 128951110 . - . Parent=gene2576 chr9 ENCODE exon 128952316 128952615 . - . Parent=gene2576 ### chr9 ENCODE gene 128944275 128950725 . - . ID=gene2577;Name=RP11-247A12.5-007;name2=CRAT chr9 ENCODE exon 128944275 128944398 . - . Parent=gene2577 chr9 ENCODE CDS 128944275 128944398 . - 1 Parent=gene2577 chr9 ENCODE exon 128944846 128944899 . - . Parent=gene2577 chr9 ENCODE CDS 128944846 128944899 . - 1 Parent=gene2577 chr9 ENCODE exon 128946021 128946139 . - . Parent=gene2577 chr9 ENCODE CDS 128946021 128946139 . - 0 Parent=gene2577 chr9 ENCODE exon 128949647 128949910 . - . Parent=gene2577 chr9 ENCODE CDS 128949647 128949910 . - 0 Parent=gene2577 chr9 ENCODE CDS 128950596 128950625 . - 0 Parent=gene2577 chr9 ENCODE exon 128950596 128950725 . - . Parent=gene2577 ### chr9 ENCODE gene 128946030 128952602 . - . ID=gene2578;Name=RP11-247A12.5-005;name2=CRAT chr9 ENCODE exon 128946030 128946139 . - . Parent=gene2578 chr9 ENCODE exon 128949647 128949910 . - . Parent=gene2578 chr9 ENCODE exon 128950241 128950311 . - . Parent=gene2578 chr9 ENCODE exon 128951012 128951110 . - . Parent=gene2578 chr9 ENCODE exon 128952316 128952602 . - . Parent=gene2578 ### chr9 ENCODE gene 128949167 128952544 . - . ID=gene2579;Name=RP11-247A12.5-004;name2=CRAT chr9 ENCODE exon 128949167 128949910 . - . Parent=gene2579 chr9 ENCODE CDS 128949452 128949910 . - 0 Parent=gene2579 chr9 ENCODE CDS 128952316 128952342 . - 0 Parent=gene2579 chr9 ENCODE exon 128952316 128952544 . - . Parent=gene2579 ### chr9 ENCODE gene 128949709 128951109 . - . ID=gene2580;Name=RP11-247A12.5-009;name2=CRAT chr9 ENCODE exon 128949709 128949910 . - . Parent=gene2580 chr9 ENCODE CDS 128949709 128949910 . - 0 Parent=gene2580 chr9 ENCODE CDS 128950596 128950625 . - 0 Parent=gene2580 chr9 ENCODE exon 128950596 128950736 . - . Parent=gene2580 chr9 ENCODE exon 128951012 128951109 . - . Parent=gene2580 ### chr9 ENCODE gene 128949782 128950849 . - . ID=gene2581;Name=RP11-247A12.5-008;name2=CRAT chr9 ENCODE exon 128949782 128949910 . - . Parent=gene2581 chr9 ENCODE exon 128950732 128950849 . - . Parent=gene2581 ### chr9 ENCODE gene 128952783 128990777 . + . ID=gene2582;Name=RP11-247A12.4-010;name2=PPP2R4 chr9 ENCODE exon 128952783 128952865 . + . Parent=gene2582 chr9 ENCODE exon 128953305 128953464 . + . Parent=gene2582 chr9 ENCODE CDS 128953434 128953464 . + 0 Parent=gene2582 chr9 ENCODE exon 128962346 128962443 . + . Parent=gene2582 chr9 ENCODE CDS 128962346 128962443 . + 2 Parent=gene2582 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2582 chr9 ENCODE CDS 128964885 128964971 . + 0 Parent=gene2582 chr9 ENCODE exon 128970818 128970943 . + . Parent=gene2582 chr9 ENCODE CDS 128970818 128970943 . + 0 Parent=gene2582 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2582 chr9 ENCODE CDS 128973355 128973472 . + 0 Parent=gene2582 chr9 ENCODE exon 128976628 128976727 . + . Parent=gene2582 chr9 ENCODE CDS 128976628 128976727 . + 2 Parent=gene2582 chr9 ENCODE exon 128978304 128978428 . + . Parent=gene2582 chr9 ENCODE CDS 128978304 128978428 . + 1 Parent=gene2582 chr9 ENCODE exon 128979425 128979525 . + . Parent=gene2582 chr9 ENCODE CDS 128979425 128979525 . + 2 Parent=gene2582 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2582 chr9 ENCODE CDS 128984278 128984385 . + 0 Parent=gene2582 chr9 ENCODE CDS 128989220 128989297 . + 0 Parent=gene2582 chr9 ENCODE exon 128989220 128990777 . + . Parent=gene2582 ### chr9 ENCODE gene 128952797 128978389 . + . ID=gene2583;Name=RP11-247A12.4-012;name2=PPP2R4 chr9 ENCODE exon 128952797 128952865 . + . Parent=gene2583 chr9 ENCODE exon 128953305 128953464 . + . Parent=gene2583 chr9 ENCODE CDS 128953434 128953464 . + 0 Parent=gene2583 chr9 ENCODE exon 128962346 128962443 . + . Parent=gene2583 chr9 ENCODE CDS 128962346 128962443 . + 2 Parent=gene2583 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2583 chr9 ENCODE CDS 128964885 128964971 . + 0 Parent=gene2583 chr9 ENCODE exon 128969797 128969901 . + . Parent=gene2583 chr9 ENCODE CDS 128969797 128969901 . + 0 Parent=gene2583 chr9 ENCODE exon 128970818 128970943 . + . Parent=gene2583 chr9 ENCODE CDS 128970818 128970943 . + 0 Parent=gene2583 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2583 chr9 ENCODE CDS 128973355 128973472 . + 0 Parent=gene2583 chr9 ENCODE exon 128976628 128976727 . + . Parent=gene2583 chr9 ENCODE CDS 128976628 128976727 . + 2 Parent=gene2583 chr9 ENCODE exon 128978304 128978389 . + . Parent=gene2583 chr9 ENCODE CDS 128978304 128978389 . + 1 Parent=gene2583 ### chr9 ENCODE gene 128953151 128990779 . + . ID=gene2584;Name=RP11-247A12.4-011;name2=PPP2R4 chr9 ENCODE exon 128953151 128953464 . + . Parent=gene2584 chr9 ENCODE CDS 128953434 128953464 . + 0 Parent=gene2584 chr9 ENCODE exon 128962346 128962443 . + . Parent=gene2584 chr9 ENCODE CDS 128962346 128962443 . + 2 Parent=gene2584 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2584 chr9 ENCODE CDS 128964885 128964971 . + 0 Parent=gene2584 chr9 ENCODE exon 128970818 128970943 . + . Parent=gene2584 chr9 ENCODE CDS 128970818 128970943 . + 0 Parent=gene2584 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2584 chr9 ENCODE CDS 128973355 128973472 . + 0 Parent=gene2584 chr9 ENCODE exon 128976628 128976727 . + . Parent=gene2584 chr9 ENCODE CDS 128976628 128976727 . + 2 Parent=gene2584 chr9 ENCODE exon 128978304 128978428 . + . Parent=gene2584 chr9 ENCODE CDS 128978304 128978428 . + 1 Parent=gene2584 chr9 ENCODE exon 128979425 128979525 . + . Parent=gene2584 chr9 ENCODE CDS 128979425 128979525 . + 2 Parent=gene2584 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2584 chr9 ENCODE CDS 128984278 128984385 . + 0 Parent=gene2584 chr9 ENCODE CDS 128989220 128989297 . + 0 Parent=gene2584 chr9 ENCODE exon 128989220 128990779 . + . Parent=gene2584 ### chr9 ENCODE gene 128953169 128990779 . + . ID=gene2585;Name=RP11-247A12.4-020;name2=PPP2R4 chr9 ENCODE exon 128953169 128953464 . + . Parent=gene2585 chr9 ENCODE CDS 128953434 128953464 . + 0 Parent=gene2585 chr9 ENCODE exon 128962346 128962461 . + . Parent=gene2585 chr9 ENCODE CDS 128962346 128962461 . + 2 Parent=gene2585 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2585 chr9 ENCODE CDS 128964885 128964971 . + 0 Parent=gene2585 chr9 ENCODE exon 128970818 128970943 . + . Parent=gene2585 chr9 ENCODE CDS 128970818 128970943 . + 0 Parent=gene2585 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2585 chr9 ENCODE CDS 128973355 128973472 . + 0 Parent=gene2585 chr9 ENCODE exon 128976628 128976727 . + . Parent=gene2585 chr9 ENCODE CDS 128976628 128976727 . + 2 Parent=gene2585 chr9 ENCODE exon 128978304 128978428 . + . Parent=gene2585 chr9 ENCODE CDS 128978304 128978428 . + 1 Parent=gene2585 chr9 ENCODE exon 128979425 128979525 . + . Parent=gene2585 chr9 ENCODE CDS 128979425 128979525 . + 2 Parent=gene2585 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2585 chr9 ENCODE CDS 128984278 128984385 . + 0 Parent=gene2585 chr9 ENCODE CDS 128989220 128989297 . + 0 Parent=gene2585 chr9 ENCODE exon 128989220 128990779 . + . Parent=gene2585 ### chr9 ENCODE gene 128953242 128990779 . + . ID=gene2586;name2=PPP2R4;Name=RP11-247A12.4-015 chr9 ENCODE exon 128953242 128953464 . + . Parent=gene2586 chr9 ENCODE CDS 128953434 128953464 . + 0 Parent=gene2586 chr9 ENCODE exon 128962346 128962443 . + . Parent=gene2586 chr9 ENCODE CDS 128962346 128962443 . + 2 Parent=gene2586 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2586 chr9 ENCODE CDS 128984278 128984385 . + 0 Parent=gene2586 chr9 ENCODE CDS 128989220 128989297 . + 0 Parent=gene2586 chr9 ENCODE exon 128989220 128990779 . + . Parent=gene2586 ### chr9 ENCODE gene 128953246 128978399 . + . ID=gene2587;Name=RP11-247A12.4-013;name2=PPP2R4 chr9 ENCODE exon 128953246 128953464 . + . Parent=gene2587 chr9 ENCODE CDS 128953434 128953464 . + 0 Parent=gene2587 chr9 ENCODE exon 128962346 128962443 . + . Parent=gene2587 chr9 ENCODE CDS 128962346 128962443 . + 2 Parent=gene2587 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2587 chr9 ENCODE CDS 128964885 128964971 . + 0 Parent=gene2587 chr9 ENCODE exon 128969797 128969901 . + . Parent=gene2587 chr9 ENCODE CDS 128969797 128969901 . + 0 Parent=gene2587 chr9 ENCODE exon 128970818 128970943 . + . Parent=gene2587 chr9 ENCODE CDS 128970818 128970943 . + 0 Parent=gene2587 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2587 chr9 ENCODE CDS 128973355 128973472 . + 0 Parent=gene2587 chr9 ENCODE exon 128976628 128976727 . + . Parent=gene2587 chr9 ENCODE CDS 128976628 128976727 . + 2 Parent=gene2587 chr9 ENCODE exon 128978304 128978399 . + . Parent=gene2587 chr9 ENCODE CDS 128978304 128978399 . + 1 Parent=gene2587 ### chr9 ENCODE gene 128953247 128990779 . + . ID=gene2588;Name=RP11-247A12.4-016;name2=PPP2R4 chr9 ENCODE exon 128953247 128953464 . + . Parent=gene2588 chr9 ENCODE CDS 128953434 128953464 . + 0 Parent=gene2588 chr9 ENCODE exon 128962346 128962443 . + . Parent=gene2588 chr9 ENCODE CDS 128962346 128962443 . + 2 Parent=gene2588 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2588 chr9 ENCODE CDS 128964885 128964971 . + 0 Parent=gene2588 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2588 chr9 ENCODE CDS 128973355 128973472 . + 0 Parent=gene2588 chr9 ENCODE exon 128976628 128976727 . + . Parent=gene2588 chr9 ENCODE CDS 128976628 128976727 . + 2 Parent=gene2588 chr9 ENCODE exon 128978304 128978428 . + . Parent=gene2588 chr9 ENCODE CDS 128978304 128978428 . + 1 Parent=gene2588 chr9 ENCODE exon 128979425 128979525 . + . Parent=gene2588 chr9 ENCODE CDS 128979425 128979525 . + 2 Parent=gene2588 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2588 chr9 ENCODE CDS 128984278 128984385 . + 0 Parent=gene2588 chr9 ENCODE CDS 128989220 128989297 . + 0 Parent=gene2588 chr9 ENCODE exon 128989220 128990779 . + . Parent=gene2588 ### chr9 ENCODE gene 128953268 128976675 . + . ID=gene2589;Name=RP11-247A12.4-009;name2=PPP2R4 chr9 ENCODE exon 128953268 128953464 . + . Parent=gene2589 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2589 chr9 ENCODE exon 128969797 128969901 . + . Parent=gene2589 chr9 ENCODE exon 128970818 128970943 . + . Parent=gene2589 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2589 chr9 ENCODE exon 128976628 128976675 . + . Parent=gene2589 ### chr9 ENCODE gene 128953426 128978308 . + . ID=gene2590;Name=RP11-247A12.4-008;name2=PPP2R4 chr9 ENCODE exon 128953426 128953464 . + . Parent=gene2590 chr9 ENCODE CDS 128953434 128953464 . + 0 Parent=gene2590 chr9 ENCODE exon 128962346 128962443 . + . Parent=gene2590 chr9 ENCODE CDS 128962346 128962443 . + 2 Parent=gene2590 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2590 chr9 ENCODE CDS 128964885 128964971 . + 0 Parent=gene2590 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2590 chr9 ENCODE CDS 128973355 128973472 . + 0 Parent=gene2590 chr9 ENCODE exon 128976628 128976727 . + . Parent=gene2590 chr9 ENCODE CDS 128976628 128976727 . + 2 Parent=gene2590 chr9 ENCODE exon 128978304 128978308 . + . Parent=gene2590 chr9 ENCODE CDS 128978304 128978308 . + 1 Parent=gene2590 ### chr9 ENCODE gene 128953521 128984385 . + . ID=gene2591;Name=RP11-247A12.4-017;name2=PPP2R4 chr9 ENCODE exon 128953521 128953624 . + . Parent=gene2591 chr9 ENCODE exon 128962346 128962443 . + . Parent=gene2591 chr9 ENCODE CDS 128962420 128962443 . + 0 Parent=gene2591 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2591 chr9 ENCODE CDS 128964885 128964971 . + 0 Parent=gene2591 chr9 ENCODE exon 128970818 128970943 . + . Parent=gene2591 chr9 ENCODE CDS 128970818 128970943 . + 0 Parent=gene2591 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2591 chr9 ENCODE CDS 128973355 128973472 . + 0 Parent=gene2591 chr9 ENCODE exon 128976628 128976727 . + . Parent=gene2591 chr9 ENCODE CDS 128976628 128976727 . + 2 Parent=gene2591 chr9 ENCODE exon 128978304 128978428 . + . Parent=gene2591 chr9 ENCODE CDS 128978304 128978428 . + 1 Parent=gene2591 chr9 ENCODE exon 128979425 128979525 . + . Parent=gene2591 chr9 ENCODE CDS 128979425 128979525 . + 2 Parent=gene2591 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2591 chr9 ENCODE CDS 128984278 128984385 . + 0 Parent=gene2591 ### chr9 ENCODE gene 128953701 128976660 . + . ID=gene2592;Name=RP11-247A12.4-018;name2=PPP2R4 chr9 ENCODE exon 128953701 128953786 . + . Parent=gene2592 chr9 ENCODE exon 128962346 128962443 . + . Parent=gene2592 chr9 ENCODE CDS 128962420 128962443 . + 0 Parent=gene2592 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2592 chr9 ENCODE CDS 128964885 128964971 . + 0 Parent=gene2592 chr9 ENCODE exon 128970818 128970943 . + . Parent=gene2592 chr9 ENCODE CDS 128970818 128970943 . + 0 Parent=gene2592 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2592 chr9 ENCODE CDS 128973355 128973472 . + 0 Parent=gene2592 chr9 ENCODE exon 128976628 128976660 . + . Parent=gene2592 chr9 ENCODE CDS 128976628 128976660 . + 2 Parent=gene2592 ### chr9 ENCODE gene 128960855 128973472 . + . ID=gene2593;Name=RP11-247A12.4-021;name2=PPP2R4 chr9 ENCODE exon 128960855 128960974 . + . Parent=gene2593 chr9 ENCODE CDS 128960893 128960974 . + 0 Parent=gene2593 chr9 ENCODE exon 128962346 128962461 . + . Parent=gene2593 chr9 ENCODE CDS 128962346 128962461 . + 2 Parent=gene2593 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2593 chr9 ENCODE CDS 128964885 128964971 . + 0 Parent=gene2593 chr9 ENCODE exon 128970818 128970943 . + . Parent=gene2593 chr9 ENCODE CDS 128970818 128970943 . + 0 Parent=gene2593 chr9 ENCODE exon 128973355 128973472 . + . Parent=gene2593 chr9 ENCODE CDS 128973355 128973472 . + 0 Parent=gene2593 ### chr9 ENCODE gene 128961346 128970898 . + . ID=gene2594;Name=RP11-247A12.4-019;name2=PPP2R4 chr9 ENCODE exon 128961346 128961569 . + . Parent=gene2594 chr9 ENCODE exon 128962346 128962443 . + . Parent=gene2594 chr9 ENCODE exon 128964885 128964971 . + . Parent=gene2594 chr9 ENCODE exon 128970818 128970898 . + . Parent=gene2594 ### chr9 ENCODE gene 128978304 128979944 . + . ID=gene2595;Name=RP11-247A12.4-022;name2=PPP2R4 chr9 ENCODE exon 128978304 128978428 . + . Parent=gene2595 chr9 ENCODE CDS 128978304 128978428 . + 0 Parent=gene2595 chr9 ENCODE CDS 128979425 128979660 . + 1 Parent=gene2595 chr9 ENCODE exon 128979425 128979944 . + . Parent=gene2595 ### chr9 ENCODE gene 128978330 128984815 . + . ID=gene2596;Name=RP11-247A12.4-001;name2=PPP2R4 chr9 ENCODE exon 128978330 128978428 . + . Parent=gene2596 chr9 ENCODE exon 128979425 128979525 . + . Parent=gene2596 chr9 ENCODE exon 128984278 128984815 . + . Parent=gene2596 ### chr9 ENCODE gene 128981215 128989831 . + . ID=gene2597;Name=RP11-247A12.4-002;name2=PPP2R4 chr9 ENCODE exon 128981215 128981482 . + . Parent=gene2597 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2597 chr9 ENCODE exon 128989220 128989831 . + . Parent=gene2597 ### chr9 ENCODE gene 128981841 128985487 . + . ID=gene2598;Name=RP11-247A12.4-023;name2=PPP2R4 chr9 ENCODE exon 128981841 128981984 . + . Parent=gene2598 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2598 chr9 ENCODE exon 128985208 128985487 . + . Parent=gene2598 ### chr9 ENCODE gene 128981841 128990120 . + . ID=gene2599;name2=PPP2R4;Name=RP11-247A12.4-003 chr9 ENCODE exon 128981841 128981984 . + . Parent=gene2599 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2599 chr9 ENCODE exon 128989220 128990120 . + . Parent=gene2599 ### chr9 ENCODE gene 128981933 128984920 . + . ID=gene2600;Name=RP11-247A12.4-024;name2=PPP2R4 chr9 ENCODE exon 128981933 128981984 . + . Parent=gene2600 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2600 chr9 ENCODE exon 128984514 128984920 . + . Parent=gene2600 ### chr9 ENCODE gene 128981951 128984773 . + . ID=gene2601;Name=RP11-247A12.4-004;name2=PPP2R4 chr9 ENCODE exon 128981951 128981984 . + . Parent=gene2601 chr9 ENCODE exon 128984278 128984773 . + . Parent=gene2601 ### chr9 ENCODE gene 128983479 128989790 . + . ID=gene2602;Name=RP11-247A12.4-005;name2=PPP2R4 chr9 ENCODE exon 128983479 128983751 . + . Parent=gene2602 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2602 chr9 ENCODE exon 128989220 128989790 . + . Parent=gene2602 ### chr9 ENCODE gene 128983787 128989839 . + . ID=gene2603;Name=RP11-247A12.4-006;name2=PPP2R4 chr9 ENCODE exon 128983787 128983915 . + . Parent=gene2603 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2603 chr9 ENCODE exon 128989220 128989839 . + . Parent=gene2603 ### chr9 ENCODE gene 128983827 128989605 . + . ID=gene2604;Name=RP11-247A12.4-014;name2=PPP2R4 chr9 ENCODE exon 128983827 128983950 . + . Parent=gene2604 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2604 chr9 ENCODE exon 128989220 128989605 . + . Parent=gene2604 ### chr9 ENCODE gene 128983858 128989828 . + . ID=gene2605;Name=RP11-247A12.4-007;name2=PPP2R4 chr9 ENCODE exon 128983858 128984010 . + . Parent=gene2605 chr9 ENCODE exon 128984278 128984385 . + . Parent=gene2605 chr9 ENCODE exon 128989220 128989828 . + . Parent=gene2605 ### chr9 ENCODE gene 129017385 129020095 . - . ID=gene2606;Name=RP11-247A12.3-001;name2=IER5L chr9 ENCODE exon 129017385 129020095 . - . Parent=gene2606 chr9 ENCODE CDS 129018671 129019885 . - 0 Parent=gene2606 ### chrX ENCODE gene 122525028 122592422 . - . ID=gene2607;Name=RP5-1189B24.5-002;name2=THOC2 chrX ENCODE exon 122525028 122525223 . - . Parent=gene2607 chrX ENCODE exon 122526492 122526664 . - . Parent=gene2607 chrX ENCODE exon 122527545 122527700 . - . Parent=gene2607 chrX ENCODE exon 122531055 122531147 . - . Parent=gene2607 chrX ENCODE exon 122545933 122546099 . - . Parent=gene2607 chrX ENCODE exon 122555406 122555539 . - . Parent=gene2607 chrX ENCODE exon 122556106 122556220 . - . Parent=gene2607 chrX ENCODE exon 122557066 122557136 . - . Parent=gene2607 chrX ENCODE exon 122562839 122562890 . - . Parent=gene2607 chrX ENCODE exon 122566243 122566334 . - . Parent=gene2607 chrX ENCODE exon 122572235 122572293 . - . Parent=gene2607 chrX ENCODE exon 122592337 122592422 . - . Parent=gene2607 ### chrX ENCODE gene 122525028 122592441 . - . ID=gene2608;Name=RP5-1189B24.5-001;name2=THOC2 chrX ENCODE exon 122525028 122525223 . - . Parent=gene2608 chrX ENCODE exon 122526492 122526664 . - . Parent=gene2608 chrX ENCODE exon 122527545 122527700 . - . Parent=gene2608 chrX ENCODE exon 122531055 122531147 . - . Parent=gene2608 chrX ENCODE exon 122545933 122546099 . - . Parent=gene2608 chrX ENCODE exon 122555406 122555539 . - . Parent=gene2608 chrX ENCODE exon 122556106 122556227 . - . Parent=gene2608 chrX ENCODE exon 122557066 122557136 . - . Parent=gene2608 chrX ENCODE exon 122562839 122562890 . - . Parent=gene2608 chrX ENCODE exon 122566243 122566334 . - . Parent=gene2608 chrX ENCODE exon 122572235 122572293 . - . Parent=gene2608 chrX ENCODE exon 122592337 122592441 . - . Parent=gene2608 ### chrX ENCODE gene 122527694 122592422 . - . ID=gene2609;Name=RP5-1189B24.5-017;name2=THOC2 chrX ENCODE exon 122527694 122527700 . - . Parent=gene2609 chrX ENCODE exon 122531055 122531147 . - . Parent=gene2609 chrX ENCODE exon 122545933 122546099 . - . Parent=gene2609 chrX ENCODE exon 122555406 122555539 . - . Parent=gene2609 chrX ENCODE exon 122556106 122556220 . - . Parent=gene2609 chrX ENCODE exon 122557066 122557136 . - . Parent=gene2609 chrX ENCODE exon 122562839 122562890 . - . Parent=gene2609 chrX ENCODE exon 122566243 122566334 . - . Parent=gene2609 chrX ENCODE exon 122572235 122572293 . - . Parent=gene2609 chrX ENCODE exon 122592337 122592422 . - . Parent=gene2609 ### chrX ENCODE gene 122557111 122572289 . - . ID=gene2610;name2=THOC2;Name=RP5-1189B24.5-016 chrX ENCODE exon 122557111 122557136 . - . Parent=gene2610 chrX ENCODE exon 122562839 122562890 . - . Parent=gene2610 chrX ENCODE exon 122566239 122566334 . - . Parent=gene2610 chrX ENCODE exon 122572235 122572289 . - . Parent=gene2610 ### chrX ENCODE gene 122719109 122745096 . + . ID=gene2611;Name=RP1-315G1.5-007;name2=BIRC4 chrX ENCODE exon 122719109 122719290 . + . Parent=gene2611 chrX ENCODE exon 122719552 122719678 . + . Parent=gene2611 chrX ENCODE exon 122745016 122745096 . + . Parent=gene2611 chrX ENCODE CDS 122745048 122745096 . + 0 Parent=gene2611 ### chrX ENCODE gene 122719149 122766405 . + . ID=gene2612;Name=RP1-315G1.5-003;name2=BIRC4 chrX ENCODE exon 122719149 122719290 . + . Parent=gene2612 chrX ENCODE exon 122748004 122748103 . + . Parent=gene2612 chrX ENCODE exon 122750623 122750701 . + . Parent=gene2612 chrX ENCODE exon 122752116 122752158 . + . Parent=gene2612 chrX ENCODE exon 122759878 122760078 . + . Parent=gene2612 chrX ENCODE exon 122766373 122766405 . + . Parent=gene2612 ### chrX ENCODE gene 122719212 122759951 . + . ID=gene2613;Name=RP1-315G1.5-008;name2=BIRC4 chrX ENCODE exon 122719212 122719290 . + . Parent=gene2613 chrX ENCODE exon 122719552 122719678 . + . Parent=gene2613 chrX ENCODE exon 122748004 122748103 . + . Parent=gene2613 chrX ENCODE exon 122750623 122750694 . + . Parent=gene2613 chrX ENCODE exon 122752116 122752158 . + . Parent=gene2613 chrX ENCODE exon 122759878 122759951 . + . Parent=gene2613 ### chrX ENCODE gene 122719262 122766636 . + . ID=gene2614;Name=RP1-315G1.5-001;name2=BIRC4 chrX ENCODE exon 122719262 122719290 . + . Parent=gene2614 chrX ENCODE exon 122719552 122719678 . + . Parent=gene2614 chrX ENCODE exon 122748004 122748103 . + . Parent=gene2614 chrX ENCODE exon 122752116 122752158 . + . Parent=gene2614 chrX ENCODE exon 122759878 122760078 . + . Parent=gene2614 chrX ENCODE exon 122766373 122766636 . + . Parent=gene2614 ### chrX ENCODE gene 122719263 122745515 . + . ID=gene2615;Name=RP1-315G1.5-005;name2=BIRC4 chrX ENCODE exon 122719263 122719290 . + . Parent=gene2615 chrX ENCODE exon 122745016 122745515 . + . Parent=gene2615 chrX ENCODE CDS 122745048 122745515 . + 0 Parent=gene2615 ### chrX ENCODE gene 122719412 122773364 . + . ID=gene2616;Name=RP1-315G1.5-002;name2=BIRC4 chrX ENCODE exon 122719412 122719678 . + . Parent=gene2616 chrX ENCODE exon 122745016 122745924 . + . Parent=gene2616 chrX ENCODE CDS 122745048 122745924 . + 0 Parent=gene2616 chrX ENCODE exon 122748004 122748103 . + . Parent=gene2616 chrX ENCODE CDS 122748004 122748103 . + 2 Parent=gene2616 chrX ENCODE exon 122750623 122750701 . + . Parent=gene2616 chrX ENCODE CDS 122750623 122750701 . + 1 Parent=gene2616 chrX ENCODE exon 122752116 122752158 . + . Parent=gene2616 chrX ENCODE CDS 122752116 122752158 . + 0 Parent=gene2616 chrX ENCODE exon 122759878 122760078 . + . Parent=gene2616 chrX ENCODE CDS 122759878 122760078 . + 2 Parent=gene2616 chrX ENCODE CDS 122766373 122766566 . + 2 Parent=gene2616 chrX ENCODE exon 122766373 122773364 . + . Parent=gene2616 ### chrX ENCODE gene 122719580 122766383 . + . ID=gene2617;Name=RP1-315G1.5-004;name2=BIRC4 chrX ENCODE exon 122719580 122719678 . + . Parent=gene2617 chrX ENCODE exon 122748004 122748103 . + . Parent=gene2617 chrX ENCODE exon 122750623 122750701 . + . Parent=gene2617 chrX ENCODE exon 122752116 122752158 . + . Parent=gene2617 chrX ENCODE exon 122759878 122760078 . + . Parent=gene2617 chrX ENCODE exon 122766373 122766383 . + . Parent=gene2617 ### chrX ENCODE gene 122719657 122773350 . + . ID=gene2618;Name=RP1-315G1.5-009;name2=BIRC4 chrX ENCODE exon 122719657 122719930 . + . Parent=gene2618 chrX ENCODE exon 122745016 122745924 . + . Parent=gene2618 chrX ENCODE CDS 122745048 122745924 . + 0 Parent=gene2618 chrX ENCODE exon 122748004 122748103 . + . Parent=gene2618 chrX ENCODE CDS 122748004 122748103 . + 2 Parent=gene2618 chrX ENCODE exon 122750623 122750701 . + . Parent=gene2618 chrX ENCODE CDS 122750623 122750701 . + 1 Parent=gene2618 chrX ENCODE exon 122752116 122752158 . + . Parent=gene2618 chrX ENCODE CDS 122752116 122752158 . + 0 Parent=gene2618 chrX ENCODE exon 122759878 122760078 . + . Parent=gene2618 chrX ENCODE CDS 122759878 122760078 . + 2 Parent=gene2618 chrX ENCODE CDS 122766373 122766566 . + 2 Parent=gene2618 chrX ENCODE exon 122766373 122773350 . + . Parent=gene2618 ### chrX ENCODE gene 122719839 122748068 . + . ID=gene2619;Name=RP1-315G1.5-010;name2=BIRC4 chrX ENCODE exon 122719839 122719930 . + . Parent=gene2619 chrX ENCODE exon 122748004 122748068 . + . Parent=gene2619 ### chrX ENCODE gene 122772145 122773000 . + . ID=gene2620;name2=BIRC4;Name=RP1-315G1.5-006 chrX ENCODE exon 122772145 122772401 . + . Parent=gene2620 chrX ENCODE exon 122772630 122773000 . + . Parent=gene2620 ### chrX ENCODE gene 122819597 122890433 . + . ID=gene2621;name2=STAG2;Name=RP11-517O1.1-020 chrX ENCODE exon 122819597 122819673 . + . Parent=gene2621 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2621 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2621 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2621 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2621 chrX ENCODE exon 122890346 122890433 . + . Parent=gene2621 chrX ENCODE CDS 122890346 122890433 . + 0 Parent=gene2621 ### chrX ENCODE gene 122819904 122922292 . + . ID=gene2622;name2=STAG2;Name=RP11-517O1.1-002 chrX ENCODE exon 122819904 122820251 . + . Parent=gene2622 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2622 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2622 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2622 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2622 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2622 chrX ENCODE CDS 122890346 122890510 . + 0 Parent=gene2622 chrX ENCODE exon 122896912 122897008 . + . Parent=gene2622 chrX ENCODE CDS 122896912 122897008 . + 0 Parent=gene2622 chrX ENCODE exon 122901954 122902030 . + . Parent=gene2622 chrX ENCODE CDS 122901954 122902030 . + 2 Parent=gene2622 chrX ENCODE exon 122904549 122904753 . + . Parent=gene2622 chrX ENCODE CDS 122904549 122904753 . + 0 Parent=gene2622 chrX ENCODE exon 122906739 122906890 . + . Parent=gene2622 chrX ENCODE CDS 122906739 122906890 . + 2 Parent=gene2622 chrX ENCODE exon 122908390 122908463 . + . Parent=gene2622 chrX ENCODE CDS 122908390 122908463 . + 0 Parent=gene2622 chrX ENCODE exon 122909571 122909694 . + . Parent=gene2622 chrX ENCODE CDS 122909571 122909694 . + 1 Parent=gene2622 chrX ENCODE exon 122910506 122910604 . + . Parent=gene2622 chrX ENCODE CDS 122910506 122910604 . + 0 Parent=gene2622 chrX ENCODE exon 122910700 122910779 . + . Parent=gene2622 chrX ENCODE CDS 122910700 122910779 . + 0 Parent=gene2622 chrX ENCODE exon 122915513 122915620 . + . Parent=gene2622 chrX ENCODE CDS 122915513 122915620 . + 1 Parent=gene2622 chrX ENCODE exon 122917251 122917362 . + . Parent=gene2622 chrX ENCODE CDS 122917251 122917362 . + 1 Parent=gene2622 chrX ENCODE exon 122920609 122920726 . + . Parent=gene2622 chrX ENCODE CDS 122920609 122920726 . + 0 Parent=gene2622 chrX ENCODE exon 122921156 122921259 . + . Parent=gene2622 chrX ENCODE CDS 122921156 122921259 . + 2 Parent=gene2622 chrX ENCODE exon 122922287 122922292 . + . Parent=gene2622 chrX ENCODE CDS 122922287 122922292 . + 0 Parent=gene2622 ### chrX ENCODE gene 122819904 122960883 . + . ID=gene2623;Name=RP11-517O1.1-006;name2=STAG2 chrX ENCODE exon 122819904 122820251 . + . Parent=gene2623 chrX ENCODE exon 122880752 122880816 . + . Parent=gene2623 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2623 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2623 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2623 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2623 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2623 chrX ENCODE CDS 122890346 122890510 . + 0 Parent=gene2623 chrX ENCODE exon 122896912 122897008 . + . Parent=gene2623 chrX ENCODE CDS 122896912 122897008 . + 0 Parent=gene2623 chrX ENCODE exon 122901954 122902030 . + . Parent=gene2623 chrX ENCODE CDS 122901954 122902030 . + 2 Parent=gene2623 chrX ENCODE exon 122904549 122904753 . + . Parent=gene2623 chrX ENCODE CDS 122904549 122904753 . + 0 Parent=gene2623 chrX ENCODE exon 122906739 122906890 . + . Parent=gene2623 chrX ENCODE CDS 122906739 122906890 . + 2 Parent=gene2623 chrX ENCODE exon 122908390 122908463 . + . Parent=gene2623 chrX ENCODE CDS 122908390 122908463 . + 0 Parent=gene2623 chrX ENCODE exon 122909571 122909694 . + . Parent=gene2623 chrX ENCODE CDS 122909571 122909694 . + 1 Parent=gene2623 chrX ENCODE exon 122910506 122910604 . + . Parent=gene2623 chrX ENCODE CDS 122910506 122910604 . + 0 Parent=gene2623 chrX ENCODE exon 122910700 122910779 . + . Parent=gene2623 chrX ENCODE CDS 122910700 122910779 . + 0 Parent=gene2623 chrX ENCODE exon 122915513 122915620 . + . Parent=gene2623 chrX ENCODE CDS 122915513 122915620 . + 1 Parent=gene2623 chrX ENCODE exon 122917251 122917362 . + . Parent=gene2623 chrX ENCODE CDS 122917251 122917362 . + 1 Parent=gene2623 chrX ENCODE exon 122920609 122920726 . + . Parent=gene2623 chrX ENCODE CDS 122920609 122920726 . + 0 Parent=gene2623 chrX ENCODE exon 122921156 122921259 . + . Parent=gene2623 chrX ENCODE CDS 122921156 122921259 . + 2 Parent=gene2623 chrX ENCODE exon 122922287 122922379 . + . Parent=gene2623 chrX ENCODE CDS 122922287 122922379 . + 0 Parent=gene2623 chrX ENCODE exon 122922501 122922590 . + . Parent=gene2623 chrX ENCODE CDS 122922501 122922590 . + 0 Parent=gene2623 chrX ENCODE exon 122923233 122923436 . + . Parent=gene2623 chrX ENCODE CDS 122923233 122923436 . + 0 Parent=gene2623 chrX ENCODE exon 122925261 122925331 . + . Parent=gene2623 chrX ENCODE CDS 122925261 122925331 . + 0 Parent=gene2623 chrX ENCODE exon 122925560 122925647 . + . Parent=gene2623 chrX ENCODE CDS 122925560 122925647 . + 1 Parent=gene2623 chrX ENCODE exon 122925741 122925821 . + . Parent=gene2623 chrX ENCODE CDS 122925741 122925821 . + 0 Parent=gene2623 chrX ENCODE exon 122927949 122928041 . + . Parent=gene2623 chrX ENCODE CDS 122927949 122928041 . + 0 Parent=gene2623 chrX ENCODE exon 122930534 122930708 . + . Parent=gene2623 chrX ENCODE CDS 122930534 122930708 . + 0 Parent=gene2623 chrX ENCODE exon 122935717 122935856 . + . Parent=gene2623 chrX ENCODE CDS 122935717 122935856 . + 2 Parent=gene2623 chrX ENCODE exon 122937342 122937443 . + . Parent=gene2623 chrX ENCODE CDS 122937342 122937443 . + 0 Parent=gene2623 chrX ENCODE exon 122940765 122940913 . + . Parent=gene2623 chrX ENCODE CDS 122940765 122940913 . + 0 Parent=gene2623 chrX ENCODE exon 122942806 122942934 . + . Parent=gene2623 chrX ENCODE CDS 122942806 122942934 . + 1 Parent=gene2623 chrX ENCODE exon 122945932 122946155 . + . Parent=gene2623 chrX ENCODE CDS 122945932 122946155 . + 1 Parent=gene2623 chrX ENCODE exon 122949960 122950149 . + . Parent=gene2623 chrX ENCODE CDS 122949960 122950149 . + 2 Parent=gene2623 chrX ENCODE exon 122950239 122950349 . + . Parent=gene2623 chrX ENCODE CDS 122950239 122950349 . + 1 Parent=gene2623 chrX ENCODE exon 122953403 122953529 . + . Parent=gene2623 chrX ENCODE CDS 122953403 122953529 . + 1 Parent=gene2623 chrX ENCODE exon 122954757 122954834 . + . Parent=gene2623 chrX ENCODE CDS 122954757 122954834 . + 0 Parent=gene2623 chrX ENCODE CDS 122959959 122959982 . + 0 Parent=gene2623 chrX ENCODE exon 122959959 122960883 . + . Parent=gene2623 ### chrX ENCODE gene 122819945 122922379 . + . ID=gene2624;Name=RP11-517O1.1-009;name2=STAG2 chrX ENCODE exon 122819945 122820251 . + . Parent=gene2624 chrX ENCODE exon 122881916 122881937 . + . Parent=gene2624 chrX ENCODE exon 122915513 122915620 . + . Parent=gene2624 chrX ENCODE exon 122917251 122917362 . + . Parent=gene2624 chrX ENCODE exon 122920609 122920726 . + . Parent=gene2624 chrX ENCODE exon 122921156 122921259 . + . Parent=gene2624 chrX ENCODE exon 122922287 122922379 . + . Parent=gene2624 ### chrX ENCODE gene 122820080 122863132 . + . ID=gene2625;Name=RP11-517O1.1-010;name2=STAG2 chrX ENCODE exon 122820080 122820251 . + . Parent=gene2625 chrX ENCODE exon 122862852 122863132 . + . Parent=gene2625 ### chrX ENCODE gene 122820249 122885300 . + . ID=gene2626;Name=RP11-517O1.1-007;name2=STAG2 chrX ENCODE exon 122820249 122820327 . + . Parent=gene2626 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2626 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2626 chrX ENCODE exon 122885225 122885300 . + . Parent=gene2626 chrX ENCODE CDS 122885225 122885300 . + 1 Parent=gene2626 ### chrX ENCODE gene 122820699 122962041 . + . ID=gene2627;Name=RP11-517O1.1-018;name2=STAG2 chrX ENCODE exon 122820699 122820820 . + . Parent=gene2627 chrX ENCODE exon 122821171 122821241 . + . Parent=gene2627 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2627 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2627 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2627 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2627 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2627 chrX ENCODE CDS 122890346 122890510 . + 0 Parent=gene2627 chrX ENCODE exon 122896912 122897008 . + . Parent=gene2627 chrX ENCODE CDS 122896912 122897008 . + 0 Parent=gene2627 chrX ENCODE exon 122901954 122902030 . + . Parent=gene2627 chrX ENCODE CDS 122901954 122902030 . + 2 Parent=gene2627 chrX ENCODE exon 122904549 122904753 . + . Parent=gene2627 chrX ENCODE CDS 122904549 122904753 . + 0 Parent=gene2627 chrX ENCODE exon 122906739 122906890 . + . Parent=gene2627 chrX ENCODE CDS 122906739 122906890 . + 2 Parent=gene2627 chrX ENCODE exon 122908390 122908463 . + . Parent=gene2627 chrX ENCODE CDS 122908390 122908463 . + 0 Parent=gene2627 chrX ENCODE exon 122909571 122909694 . + . Parent=gene2627 chrX ENCODE CDS 122909571 122909694 . + 1 Parent=gene2627 chrX ENCODE exon 122910506 122910604 . + . Parent=gene2627 chrX ENCODE CDS 122910506 122910604 . + 0 Parent=gene2627 chrX ENCODE exon 122910700 122910779 . + . Parent=gene2627 chrX ENCODE CDS 122910700 122910779 . + 0 Parent=gene2627 chrX ENCODE exon 122915513 122915620 . + . Parent=gene2627 chrX ENCODE CDS 122915513 122915620 . + 1 Parent=gene2627 chrX ENCODE exon 122917251 122917362 . + . Parent=gene2627 chrX ENCODE CDS 122917251 122917362 . + 1 Parent=gene2627 chrX ENCODE exon 122920609 122920726 . + . Parent=gene2627 chrX ENCODE CDS 122920609 122920726 . + 0 Parent=gene2627 chrX ENCODE exon 122921156 122921259 . + . Parent=gene2627 chrX ENCODE CDS 122921156 122921259 . + 2 Parent=gene2627 chrX ENCODE exon 122922287 122922379 . + . Parent=gene2627 chrX ENCODE CDS 122922287 122922379 . + 0 Parent=gene2627 chrX ENCODE exon 122922501 122922590 . + . Parent=gene2627 chrX ENCODE CDS 122922501 122922590 . + 0 Parent=gene2627 chrX ENCODE exon 122923233 122923436 . + . Parent=gene2627 chrX ENCODE CDS 122923233 122923436 . + 0 Parent=gene2627 chrX ENCODE exon 122925261 122925331 . + . Parent=gene2627 chrX ENCODE CDS 122925261 122925331 . + 0 Parent=gene2627 chrX ENCODE exon 122925560 122925647 . + . Parent=gene2627 chrX ENCODE CDS 122925560 122925647 . + 1 Parent=gene2627 chrX ENCODE exon 122925741 122925821 . + . Parent=gene2627 chrX ENCODE CDS 122925741 122925821 . + 0 Parent=gene2627 chrX ENCODE exon 122927949 122928041 . + . Parent=gene2627 chrX ENCODE CDS 122927949 122928041 . + 0 Parent=gene2627 chrX ENCODE exon 122930534 122930708 . + . Parent=gene2627 chrX ENCODE CDS 122930534 122930708 . + 0 Parent=gene2627 chrX ENCODE exon 122935717 122935856 . + . Parent=gene2627 chrX ENCODE CDS 122935717 122935856 . + 2 Parent=gene2627 chrX ENCODE exon 122937342 122937443 . + . Parent=gene2627 chrX ENCODE CDS 122937342 122937443 . + 0 Parent=gene2627 chrX ENCODE exon 122940765 122940913 . + . Parent=gene2627 chrX ENCODE CDS 122940765 122940913 . + 0 Parent=gene2627 chrX ENCODE exon 122942806 122942934 . + . Parent=gene2627 chrX ENCODE CDS 122942806 122942934 . + 1 Parent=gene2627 chrX ENCODE exon 122945932 122946155 . + . Parent=gene2627 chrX ENCODE CDS 122945932 122946155 . + 1 Parent=gene2627 chrX ENCODE exon 122949960 122950149 . + . Parent=gene2627 chrX ENCODE CDS 122949960 122950149 . + 2 Parent=gene2627 chrX ENCODE exon 122953403 122953529 . + . Parent=gene2627 chrX ENCODE CDS 122953403 122953529 . + 1 Parent=gene2627 chrX ENCODE exon 122954757 122954834 . + . Parent=gene2627 chrX ENCODE CDS 122954757 122954834 . + 0 Parent=gene2627 chrX ENCODE CDS 122959959 122959982 . + 0 Parent=gene2627 chrX ENCODE exon 122959959 122962041 . + . Parent=gene2627 ### chrX ENCODE gene 122820703 122902030 . + . ID=gene2628;name2=STAG2;Name=RP11-517O1.1-011 chrX ENCODE exon 122820703 122820820 . + . Parent=gene2628 chrX ENCODE exon 122880752 122880816 . + . Parent=gene2628 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2628 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2628 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2628 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2628 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2628 chrX ENCODE CDS 122890346 122890510 . + 0 Parent=gene2628 chrX ENCODE exon 122896912 122897008 . + . Parent=gene2628 chrX ENCODE CDS 122896912 122897008 . + 0 Parent=gene2628 chrX ENCODE exon 122901954 122902030 . + . Parent=gene2628 chrX ENCODE CDS 122901954 122902030 . + 2 Parent=gene2628 ### chrX ENCODE gene 122821103 122962041 . + . ID=gene2629;Name=RP11-517O1.1-001;name2=STAG2 chrX ENCODE exon 122821103 122821241 . + . Parent=gene2629 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2629 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2629 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2629 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2629 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2629 chrX ENCODE CDS 122890346 122890510 . + 0 Parent=gene2629 chrX ENCODE exon 122896912 122897008 . + . Parent=gene2629 chrX ENCODE CDS 122896912 122897008 . + 0 Parent=gene2629 chrX ENCODE exon 122901954 122902030 . + . Parent=gene2629 chrX ENCODE CDS 122901954 122902030 . + 2 Parent=gene2629 chrX ENCODE exon 122904549 122904753 . + . Parent=gene2629 chrX ENCODE CDS 122904549 122904753 . + 0 Parent=gene2629 chrX ENCODE exon 122906739 122906890 . + . Parent=gene2629 chrX ENCODE CDS 122906739 122906890 . + 2 Parent=gene2629 chrX ENCODE exon 122908390 122908463 . + . Parent=gene2629 chrX ENCODE CDS 122908390 122908463 . + 0 Parent=gene2629 chrX ENCODE exon 122909571 122909694 . + . Parent=gene2629 chrX ENCODE CDS 122909571 122909694 . + 1 Parent=gene2629 chrX ENCODE exon 122910506 122910604 . + . Parent=gene2629 chrX ENCODE CDS 122910506 122910604 . + 0 Parent=gene2629 chrX ENCODE exon 122910700 122910779 . + . Parent=gene2629 chrX ENCODE CDS 122910700 122910779 . + 0 Parent=gene2629 chrX ENCODE exon 122915513 122915620 . + . Parent=gene2629 chrX ENCODE CDS 122915513 122915620 . + 1 Parent=gene2629 chrX ENCODE exon 122917251 122917362 . + . Parent=gene2629 chrX ENCODE CDS 122917251 122917362 . + 1 Parent=gene2629 chrX ENCODE exon 122920609 122920726 . + . Parent=gene2629 chrX ENCODE CDS 122920609 122920726 . + 0 Parent=gene2629 chrX ENCODE exon 122921156 122921259 . + . Parent=gene2629 chrX ENCODE CDS 122921156 122921259 . + 2 Parent=gene2629 chrX ENCODE exon 122922287 122922379 . + . Parent=gene2629 chrX ENCODE CDS 122922287 122922379 . + 0 Parent=gene2629 chrX ENCODE exon 122922501 122922590 . + . Parent=gene2629 chrX ENCODE CDS 122922501 122922590 . + 0 Parent=gene2629 chrX ENCODE exon 122923233 122923436 . + . Parent=gene2629 chrX ENCODE CDS 122923233 122923436 . + 0 Parent=gene2629 chrX ENCODE exon 122925261 122925331 . + . Parent=gene2629 chrX ENCODE CDS 122925261 122925331 . + 0 Parent=gene2629 chrX ENCODE exon 122925560 122925647 . + . Parent=gene2629 chrX ENCODE CDS 122925560 122925647 . + 1 Parent=gene2629 chrX ENCODE exon 122925741 122925821 . + . Parent=gene2629 chrX ENCODE CDS 122925741 122925821 . + 0 Parent=gene2629 chrX ENCODE exon 122927949 122928041 . + . Parent=gene2629 chrX ENCODE CDS 122927949 122928041 . + 0 Parent=gene2629 chrX ENCODE exon 122930534 122930708 . + . Parent=gene2629 chrX ENCODE CDS 122930534 122930708 . + 0 Parent=gene2629 chrX ENCODE exon 122935717 122935856 . + . Parent=gene2629 chrX ENCODE CDS 122935717 122935856 . + 2 Parent=gene2629 chrX ENCODE exon 122937342 122937443 . + . Parent=gene2629 chrX ENCODE CDS 122937342 122937443 . + 0 Parent=gene2629 chrX ENCODE exon 122940765 122940913 . + . Parent=gene2629 chrX ENCODE CDS 122940765 122940913 . + 0 Parent=gene2629 chrX ENCODE exon 122942806 122942934 . + . Parent=gene2629 chrX ENCODE CDS 122942806 122942934 . + 1 Parent=gene2629 chrX ENCODE exon 122945932 122946155 . + . Parent=gene2629 chrX ENCODE CDS 122945932 122946155 . + 1 Parent=gene2629 chrX ENCODE exon 122949960 122950149 . + . Parent=gene2629 chrX ENCODE CDS 122949960 122950149 . + 2 Parent=gene2629 chrX ENCODE exon 122953403 122953529 . + . Parent=gene2629 chrX ENCODE CDS 122953403 122953529 . + 1 Parent=gene2629 chrX ENCODE exon 122954757 122954834 . + . Parent=gene2629 chrX ENCODE CDS 122954757 122954834 . + 0 Parent=gene2629 chrX ENCODE CDS 122959959 122959982 . + 0 Parent=gene2629 chrX ENCODE exon 122959959 122962041 . + . Parent=gene2629 ### chrX ENCODE gene 122821123 122960287 . + . ID=gene2630;Name=RP11-517O1.1-019;name2=STAG2 chrX ENCODE exon 122821123 122821241 . + . Parent=gene2630 chrX ENCODE exon 122880752 122880816 . + . Parent=gene2630 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2630 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2630 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2630 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2630 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2630 chrX ENCODE CDS 122890346 122890510 . + 0 Parent=gene2630 chrX ENCODE exon 122896912 122897008 . + . Parent=gene2630 chrX ENCODE CDS 122896912 122897008 . + 0 Parent=gene2630 chrX ENCODE exon 122901954 122902030 . + . Parent=gene2630 chrX ENCODE CDS 122901954 122902030 . + 2 Parent=gene2630 chrX ENCODE exon 122904549 122904753 . + . Parent=gene2630 chrX ENCODE CDS 122904549 122904753 . + 0 Parent=gene2630 chrX ENCODE exon 122906739 122906890 . + . Parent=gene2630 chrX ENCODE CDS 122906739 122906890 . + 2 Parent=gene2630 chrX ENCODE exon 122908390 122908463 . + . Parent=gene2630 chrX ENCODE CDS 122908390 122908463 . + 0 Parent=gene2630 chrX ENCODE exon 122909571 122909694 . + . Parent=gene2630 chrX ENCODE CDS 122909571 122909694 . + 1 Parent=gene2630 chrX ENCODE exon 122910506 122910604 . + . Parent=gene2630 chrX ENCODE CDS 122910506 122910604 . + 0 Parent=gene2630 chrX ENCODE exon 122910700 122910779 . + . Parent=gene2630 chrX ENCODE CDS 122910700 122910779 . + 0 Parent=gene2630 chrX ENCODE exon 122915513 122915620 . + . Parent=gene2630 chrX ENCODE CDS 122915513 122915620 . + 1 Parent=gene2630 chrX ENCODE exon 122917251 122917362 . + . Parent=gene2630 chrX ENCODE CDS 122917251 122917362 . + 1 Parent=gene2630 chrX ENCODE exon 122920609 122920726 . + . Parent=gene2630 chrX ENCODE CDS 122920609 122920726 . + 0 Parent=gene2630 chrX ENCODE exon 122921156 122921259 . + . Parent=gene2630 chrX ENCODE CDS 122921156 122921259 . + 2 Parent=gene2630 chrX ENCODE exon 122922287 122922379 . + . Parent=gene2630 chrX ENCODE CDS 122922287 122922379 . + 0 Parent=gene2630 chrX ENCODE exon 122922501 122922590 . + . Parent=gene2630 chrX ENCODE CDS 122922501 122922590 . + 0 Parent=gene2630 chrX ENCODE exon 122923233 122923436 . + . Parent=gene2630 chrX ENCODE CDS 122923233 122923436 . + 0 Parent=gene2630 chrX ENCODE exon 122925261 122925331 . + . Parent=gene2630 chrX ENCODE CDS 122925261 122925331 . + 0 Parent=gene2630 chrX ENCODE exon 122925560 122925647 . + . Parent=gene2630 chrX ENCODE CDS 122925560 122925647 . + 1 Parent=gene2630 chrX ENCODE exon 122925741 122925821 . + . Parent=gene2630 chrX ENCODE CDS 122925741 122925821 . + 0 Parent=gene2630 chrX ENCODE exon 122927949 122928041 . + . Parent=gene2630 chrX ENCODE CDS 122927949 122928041 . + 0 Parent=gene2630 chrX ENCODE exon 122930534 122930708 . + . Parent=gene2630 chrX ENCODE CDS 122930534 122930708 . + 0 Parent=gene2630 chrX ENCODE exon 122935717 122935856 . + . Parent=gene2630 chrX ENCODE CDS 122935717 122935856 . + 2 Parent=gene2630 chrX ENCODE exon 122937342 122937443 . + . Parent=gene2630 chrX ENCODE CDS 122937342 122937443 . + 0 Parent=gene2630 chrX ENCODE exon 122940765 122940913 . + . Parent=gene2630 chrX ENCODE CDS 122940765 122940913 . + 0 Parent=gene2630 chrX ENCODE exon 122942806 122942934 . + . Parent=gene2630 chrX ENCODE CDS 122942806 122942934 . + 1 Parent=gene2630 chrX ENCODE exon 122945932 122946155 . + . Parent=gene2630 chrX ENCODE CDS 122945932 122946155 . + 1 Parent=gene2630 chrX ENCODE exon 122949960 122950149 . + . Parent=gene2630 chrX ENCODE CDS 122949960 122950149 . + 2 Parent=gene2630 chrX ENCODE exon 122950239 122950349 . + . Parent=gene2630 chrX ENCODE CDS 122950239 122950349 . + 1 Parent=gene2630 chrX ENCODE exon 122953403 122953529 . + . Parent=gene2630 chrX ENCODE CDS 122953403 122953529 . + 1 Parent=gene2630 chrX ENCODE exon 122954757 122954834 . + . Parent=gene2630 chrX ENCODE CDS 122954757 122954834 . + 0 Parent=gene2630 chrX ENCODE CDS 122959959 122959982 . + 0 Parent=gene2630 chrX ENCODE exon 122959959 122960287 . + . Parent=gene2630 ### chrX ENCODE gene 122821124 122904593 . + . ID=gene2631;Name=RP11-517O1.1-005;name2=STAG2 chrX ENCODE exon 122821124 122821241 . + . Parent=gene2631 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2631 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2631 chrX ENCODE exon 122885950 122886072 . + . Parent=gene2631 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2631 chrX ENCODE exon 122896912 122897008 . + . Parent=gene2631 chrX ENCODE exon 122901954 122902030 . + . Parent=gene2631 chrX ENCODE exon 122904549 122904593 . + . Parent=gene2631 ### chrX ENCODE gene 122821124 122960287 . + . ID=gene2632;Name=RP11-517O1.1-008;name2=STAG2 chrX ENCODE exon 122821124 122821241 . + . Parent=gene2632 chrX ENCODE exon 122880752 122880816 . + . Parent=gene2632 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2632 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2632 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2632 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2632 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2632 chrX ENCODE CDS 122890346 122890510 . + 0 Parent=gene2632 chrX ENCODE exon 122896912 122897008 . + . Parent=gene2632 chrX ENCODE CDS 122896912 122897008 . + 0 Parent=gene2632 chrX ENCODE exon 122901954 122902030 . + . Parent=gene2632 chrX ENCODE CDS 122901954 122902030 . + 2 Parent=gene2632 chrX ENCODE exon 122904549 122904753 . + . Parent=gene2632 chrX ENCODE CDS 122904549 122904753 . + 0 Parent=gene2632 chrX ENCODE exon 122906739 122906890 . + . Parent=gene2632 chrX ENCODE CDS 122906739 122906890 . + 2 Parent=gene2632 chrX ENCODE exon 122908390 122908463 . + . Parent=gene2632 chrX ENCODE CDS 122908390 122908463 . + 0 Parent=gene2632 chrX ENCODE exon 122909571 122909694 . + . Parent=gene2632 chrX ENCODE CDS 122909571 122909694 . + 1 Parent=gene2632 chrX ENCODE exon 122910506 122910604 . + . Parent=gene2632 chrX ENCODE CDS 122910506 122910604 . + 0 Parent=gene2632 chrX ENCODE exon 122910700 122910779 . + . Parent=gene2632 chrX ENCODE CDS 122910700 122910779 . + 0 Parent=gene2632 chrX ENCODE exon 122915513 122915620 . + . Parent=gene2632 chrX ENCODE CDS 122915513 122915620 . + 1 Parent=gene2632 chrX ENCODE exon 122917251 122917362 . + . Parent=gene2632 chrX ENCODE CDS 122917251 122917362 . + 1 Parent=gene2632 chrX ENCODE exon 122920609 122920726 . + . Parent=gene2632 chrX ENCODE CDS 122920609 122920726 . + 0 Parent=gene2632 chrX ENCODE exon 122921156 122921259 . + . Parent=gene2632 chrX ENCODE CDS 122921156 122921259 . + 2 Parent=gene2632 chrX ENCODE exon 122922287 122922379 . + . Parent=gene2632 chrX ENCODE CDS 122922287 122922379 . + 0 Parent=gene2632 chrX ENCODE exon 122922501 122922590 . + . Parent=gene2632 chrX ENCODE CDS 122922501 122922590 . + 0 Parent=gene2632 chrX ENCODE exon 122923233 122923436 . + . Parent=gene2632 chrX ENCODE CDS 122923233 122923436 . + 0 Parent=gene2632 chrX ENCODE exon 122925261 122925331 . + . Parent=gene2632 chrX ENCODE CDS 122925261 122925331 . + 0 Parent=gene2632 chrX ENCODE exon 122925560 122925647 . + . Parent=gene2632 chrX ENCODE CDS 122925560 122925647 . + 1 Parent=gene2632 chrX ENCODE exon 122925741 122925821 . + . Parent=gene2632 chrX ENCODE CDS 122925741 122925821 . + 0 Parent=gene2632 chrX ENCODE exon 122927949 122928041 . + . Parent=gene2632 chrX ENCODE CDS 122927949 122928041 . + 0 Parent=gene2632 chrX ENCODE exon 122930534 122930708 . + . Parent=gene2632 chrX ENCODE CDS 122930534 122930708 . + 0 Parent=gene2632 chrX ENCODE exon 122935717 122935856 . + . Parent=gene2632 chrX ENCODE CDS 122935717 122935856 . + 2 Parent=gene2632 chrX ENCODE exon 122937342 122937443 . + . Parent=gene2632 chrX ENCODE CDS 122937342 122937443 . + 0 Parent=gene2632 chrX ENCODE exon 122940765 122940913 . + . Parent=gene2632 chrX ENCODE CDS 122940765 122940913 . + 0 Parent=gene2632 chrX ENCODE exon 122942806 122942934 . + . Parent=gene2632 chrX ENCODE CDS 122942806 122942934 . + 1 Parent=gene2632 chrX ENCODE exon 122945932 122946155 . + . Parent=gene2632 chrX ENCODE CDS 122945932 122946155 . + 1 Parent=gene2632 chrX ENCODE exon 122949960 122950149 . + . Parent=gene2632 chrX ENCODE CDS 122949960 122950149 . + 2 Parent=gene2632 chrX ENCODE exon 122953403 122953529 . + . Parent=gene2632 chrX ENCODE CDS 122953403 122953529 . + 1 Parent=gene2632 chrX ENCODE exon 122954757 122954834 . + . Parent=gene2632 chrX ENCODE CDS 122954757 122954834 . + 0 Parent=gene2632 chrX ENCODE CDS 122959959 122959982 . + 0 Parent=gene2632 chrX ENCODE exon 122959959 122960287 . + . Parent=gene2632 ### chrX ENCODE gene 122821146 122942827 . + . ID=gene2633;Name=RP11-517O1.1-003;name2=STAG2 chrX ENCODE exon 122821146 122821241 . + . Parent=gene2633 chrX ENCODE exon 122881916 122881958 . + . Parent=gene2633 chrX ENCODE exon 122915513 122915620 . + . Parent=gene2633 chrX ENCODE exon 122917251 122917357 . + . Parent=gene2633 chrX ENCODE exon 122923358 122923436 . + . Parent=gene2633 chrX ENCODE exon 122925261 122925293 . + . Parent=gene2633 chrX ENCODE exon 122930687 122930708 . + . Parent=gene2633 chrX ENCODE exon 122935717 122935856 . + . Parent=gene2633 chrX ENCODE exon 122937342 122937443 . + . Parent=gene2633 chrX ENCODE exon 122940765 122940913 . + . Parent=gene2633 chrX ENCODE exon 122942806 122942827 . + . Parent=gene2633 ### chrX ENCODE gene 122821160 122923376 . + . ID=gene2634;Name=RP11-517O1.1-012;name2=STAG2 chrX ENCODE exon 122821160 122821241 . + . Parent=gene2634 chrX ENCODE exon 122881916 122881937 . + . Parent=gene2634 chrX ENCODE exon 122915513 122915620 . + . Parent=gene2634 chrX ENCODE exon 122917251 122917362 . + . Parent=gene2634 chrX ENCODE exon 122920609 122920726 . + . Parent=gene2634 chrX ENCODE exon 122921156 122921259 . + . Parent=gene2634 chrX ENCODE exon 122922287 122922379 . + . Parent=gene2634 chrX ENCODE exon 122922501 122922590 . + . Parent=gene2634 chrX ENCODE exon 122923233 122923376 . + . Parent=gene2634 ### chrX ENCODE gene 122821208 122922590 . + . ID=gene2635;Name=RP11-517O1.1-015;name2=STAG2 chrX ENCODE exon 122821208 122821241 . + . Parent=gene2635 chrX ENCODE exon 122821464 122821491 . + . Parent=gene2635 chrX ENCODE exon 122881916 122881937 . + . Parent=gene2635 chrX ENCODE exon 122915513 122915620 . + . Parent=gene2635 chrX ENCODE exon 122917251 122917362 . + . Parent=gene2635 chrX ENCODE exon 122920609 122920726 . + . Parent=gene2635 chrX ENCODE exon 122921156 122921259 . + . Parent=gene2635 chrX ENCODE exon 122922287 122922379 . + . Parent=gene2635 chrX ENCODE exon 122922501 122922590 . + . Parent=gene2635 ### chrX ENCODE gene 122821418 122904593 . + . ID=gene2636;name2=STAG2;Name=RP11-517O1.1-014 chrX ENCODE exon 122821418 122821491 . + . Parent=gene2636 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2636 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2636 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2636 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2636 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2636 chrX ENCODE CDS 122890346 122890510 . + 0 Parent=gene2636 chrX ENCODE exon 122896912 122897008 . + . Parent=gene2636 chrX ENCODE CDS 122896912 122897008 . + 0 Parent=gene2636 chrX ENCODE exon 122901954 122902030 . + . Parent=gene2636 chrX ENCODE CDS 122901954 122902030 . + 2 Parent=gene2636 chrX ENCODE exon 122904549 122904593 . + . Parent=gene2636 chrX ENCODE CDS 122904549 122904593 . + 0 Parent=gene2636 ### chrX ENCODE gene 122821479 122904709 . + . ID=gene2637;Name=RP11-517O1.1-013;name2=STAG2 chrX ENCODE exon 122821479 122821491 . + . Parent=gene2637 chrX ENCODE exon 122880752 122880816 . + . Parent=gene2637 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2637 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2637 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2637 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2637 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2637 chrX ENCODE CDS 122890346 122890510 . + 0 Parent=gene2637 chrX ENCODE exon 122896912 122897008 . + . Parent=gene2637 chrX ENCODE CDS 122896912 122897008 . + 0 Parent=gene2637 chrX ENCODE exon 122901954 122902030 . + . Parent=gene2637 chrX ENCODE CDS 122901954 122902030 . + 2 Parent=gene2637 chrX ENCODE exon 122904549 122904709 . + . Parent=gene2637 chrX ENCODE CDS 122904549 122904709 . + 0 Parent=gene2637 ### chrX ENCODE gene 122822555 122896970 . + . ID=gene2638;Name=RP11-517O1.1-017;name2=STAG2 chrX ENCODE exon 122822555 122822786 . + . Parent=gene2638 chrX ENCODE exon 122881916 122882056 . + . Parent=gene2638 chrX ENCODE CDS 122882013 122882056 . + 0 Parent=gene2638 chrX ENCODE exon 122885225 122885303 . + . Parent=gene2638 chrX ENCODE CDS 122885225 122885303 . + 1 Parent=gene2638 chrX ENCODE exon 122890346 122890510 . + . Parent=gene2638 chrX ENCODE CDS 122890346 122890510 . + 0 Parent=gene2638 chrX ENCODE exon 122896912 122896970 . + . Parent=gene2638 chrX ENCODE CDS 122896912 122896970 . + 0 Parent=gene2638 ### chrX ENCODE gene 122953298 122954880 . + . ID=gene2639;Name=RP11-517O1.1-016;name2=STAG2 chrX ENCODE exon 122953298 122953529 . + . Parent=gene2639 chrX ENCODE exon 122954757 122954880 . + . Parent=gene2639 ### chrX ENCODE gene 152647816 152672447 . - . ID=gene2640;Name=U52111.6-001;name2=L1CAM chrX ENCODE exon 152647816 152649196 . - . Parent=gene2640 chrX ENCODE CDS 152648965 152649196 . - 1 Parent=gene2640 chrX ENCODE exon 152649670 152649681 . - . Parent=gene2640 chrX ENCODE CDS 152649670 152649681 . - 1 Parent=gene2640 chrX ENCODE exon 152649779 152649851 . - . Parent=gene2640 chrX ENCODE CDS 152649779 152649851 . - 2 Parent=gene2640 chrX ENCODE exon 152650185 152650319 . - . Parent=gene2640 chrX ENCODE CDS 152650185 152650319 . - 2 Parent=gene2640 chrX ENCODE exon 152650624 152650779 . - . Parent=gene2640 chrX ENCODE CDS 152650624 152650779 . - 2 Parent=gene2640 chrX ENCODE exon 152650887 152651006 . - . Parent=gene2640 chrX ENCODE CDS 152650887 152651006 . - 2 Parent=gene2640 chrX ENCODE exon 152651123 152651296 . - . Parent=gene2640 chrX ENCODE CDS 152651123 152651296 . - 2 Parent=gene2640 chrX ENCODE exon 152651390 152651512 . - . Parent=gene2640 chrX ENCODE CDS 152651390 152651512 . - 2 Parent=gene2640 chrX ENCODE exon 152651601 152651802 . - . Parent=gene2640 chrX ENCODE CDS 152651601 152651802 . - 0 Parent=gene2640 chrX ENCODE exon 152652006 152652121 . - . Parent=gene2640 chrX ENCODE CDS 152652006 152652121 . - 2 Parent=gene2640 chrX ENCODE exon 152652951 152653173 . - . Parent=gene2640 chrX ENCODE CDS 152652951 152653173 . - 0 Parent=gene2640 chrX ENCODE exon 152653356 152653426 . - . Parent=gene2640 chrX ENCODE CDS 152653356 152653426 . - 2 Parent=gene2640 chrX ENCODE exon 152653658 152653855 . - . Parent=gene2640 chrX ENCODE CDS 152653658 152653855 . - 2 Parent=gene2640 chrX ENCODE exon 152654102 152654212 . - . Parent=gene2640 chrX ENCODE CDS 152654102 152654212 . - 2 Parent=gene2640 chrX ENCODE exon 152654300 152654424 . - . Parent=gene2640 chrX ENCODE CDS 152654300 152654424 . - 1 Parent=gene2640 chrX ENCODE exon 152654604 152654760 . - . Parent=gene2640 chrX ENCODE CDS 152654604 152654760 . - 2 Parent=gene2640 chrX ENCODE exon 152654863 152655029 . - . Parent=gene2640 chrX ENCODE CDS 152654863 152655029 . - 1 Parent=gene2640 chrX ENCODE exon 152655143 152655254 . - . Parent=gene2640 chrX ENCODE CDS 152655143 152655254 . - 2 Parent=gene2640 chrX ENCODE exon 152655822 152655965 . - . Parent=gene2640 chrX ENCODE CDS 152655822 152655965 . - 2 Parent=gene2640 chrX ENCODE exon 152656105 152656236 . - . Parent=gene2640 chrX ENCODE CDS 152656105 152656236 . - 2 Parent=gene2640 chrX ENCODE exon 152656358 152656542 . - . Parent=gene2640 chrX ENCODE CDS 152656358 152656542 . - 1 Parent=gene2640 chrX ENCODE exon 152656690 152656801 . - . Parent=gene2640 chrX ENCODE CDS 152656690 152656801 . - 2 Parent=gene2640 chrX ENCODE exon 152657092 152657262 . - . Parent=gene2640 chrX ENCODE CDS 152657092 152657262 . - 2 Parent=gene2640 chrX ENCODE exon 152657359 152657481 . - . Parent=gene2640 chrX ENCODE CDS 152657359 152657481 . - 2 Parent=gene2640 chrX ENCODE exon 152658454 152658656 . - . Parent=gene2640 chrX ENCODE CDS 152658454 152658656 . - 1 Parent=gene2640 chrX ENCODE exon 152658894 152658999 . - . Parent=gene2640 chrX ENCODE CDS 152658894 152658999 . - 2 Parent=gene2640 chrX ENCODE exon 152659530 152659544 . - . Parent=gene2640 chrX ENCODE CDS 152659530 152659544 . - 2 Parent=gene2640 chrX ENCODE CDS 152662063 152662138 . - 0 Parent=gene2640 chrX ENCODE exon 152662063 152662246 . - . Parent=gene2640 chrX ENCODE exon 152672366 152672447 . - . Parent=gene2640 ### chrX ENCODE gene 152648255 152672455 . - . ID=gene2641;Name=U52111.6-006;name2=L1CAM chrX ENCODE exon 152648255 152649196 . - . Parent=gene2641 chrX ENCODE CDS 152648965 152649196 . - 1 Parent=gene2641 chrX ENCODE exon 152649779 152649851 . - . Parent=gene2641 chrX ENCODE CDS 152649779 152649851 . - 2 Parent=gene2641 chrX ENCODE exon 152650185 152650319 . - . Parent=gene2641 chrX ENCODE CDS 152650185 152650319 . - 2 Parent=gene2641 chrX ENCODE exon 152650624 152650779 . - . Parent=gene2641 chrX ENCODE CDS 152650624 152650779 . - 2 Parent=gene2641 chrX ENCODE exon 152650887 152651006 . - . Parent=gene2641 chrX ENCODE CDS 152650887 152651006 . - 2 Parent=gene2641 chrX ENCODE exon 152651123 152651296 . - . Parent=gene2641 chrX ENCODE CDS 152651123 152651296 . - 2 Parent=gene2641 chrX ENCODE exon 152651390 152651512 . - . Parent=gene2641 chrX ENCODE CDS 152651390 152651512 . - 2 Parent=gene2641 chrX ENCODE exon 152651601 152651802 . - . Parent=gene2641 chrX ENCODE CDS 152651601 152651802 . - 0 Parent=gene2641 chrX ENCODE exon 152652006 152652121 . - . Parent=gene2641 chrX ENCODE CDS 152652006 152652121 . - 2 Parent=gene2641 chrX ENCODE exon 152652951 152653173 . - . Parent=gene2641 chrX ENCODE CDS 152652951 152653173 . - 0 Parent=gene2641 chrX ENCODE exon 152653356 152653426 . - . Parent=gene2641 chrX ENCODE CDS 152653356 152653426 . - 2 Parent=gene2641 chrX ENCODE exon 152653658 152653855 . - . Parent=gene2641 chrX ENCODE CDS 152653658 152653855 . - 2 Parent=gene2641 chrX ENCODE exon 152654102 152654212 . - . Parent=gene2641 chrX ENCODE CDS 152654102 152654212 . - 2 Parent=gene2641 chrX ENCODE exon 152654300 152654424 . - . Parent=gene2641 chrX ENCODE CDS 152654300 152654424 . - 1 Parent=gene2641 chrX ENCODE exon 152654604 152654760 . - . Parent=gene2641 chrX ENCODE CDS 152654604 152654760 . - 2 Parent=gene2641 chrX ENCODE exon 152654863 152655029 . - . Parent=gene2641 chrX ENCODE CDS 152654863 152655029 . - 1 Parent=gene2641 chrX ENCODE exon 152655143 152655254 . - . Parent=gene2641 chrX ENCODE CDS 152655143 152655254 . - 2 Parent=gene2641 chrX ENCODE exon 152655822 152655965 . - . Parent=gene2641 chrX ENCODE CDS 152655822 152655965 . - 2 Parent=gene2641 chrX ENCODE exon 152656105 152656236 . - . Parent=gene2641 chrX ENCODE CDS 152656105 152656236 . - 2 Parent=gene2641 chrX ENCODE exon 152656358 152656542 . - . Parent=gene2641 chrX ENCODE CDS 152656358 152656542 . - 1 Parent=gene2641 chrX ENCODE exon 152656690 152656801 . - . Parent=gene2641 chrX ENCODE CDS 152656690 152656801 . - 2 Parent=gene2641 chrX ENCODE exon 152657092 152657262 . - . Parent=gene2641 chrX ENCODE CDS 152657092 152657262 . - 2 Parent=gene2641 chrX ENCODE exon 152657359 152657481 . - . Parent=gene2641 chrX ENCODE CDS 152657359 152657481 . - 2 Parent=gene2641 chrX ENCODE exon 152658454 152658656 . - . Parent=gene2641 chrX ENCODE CDS 152658454 152658656 . - 1 Parent=gene2641 chrX ENCODE exon 152658894 152658999 . - . Parent=gene2641 chrX ENCODE CDS 152658894 152658999 . - 2 Parent=gene2641 chrX ENCODE CDS 152662063 152662138 . - 0 Parent=gene2641 chrX ENCODE exon 152662063 152662246 . - . Parent=gene2641 chrX ENCODE exon 152672366 152672455 . - . Parent=gene2641 ### chrX ENCODE gene 152648735 152650780 . - . ID=gene2642;Name=U52111.6-003;name2=L1CAM chrX ENCODE exon 152648735 152649196 . - . Parent=gene2642 chrX ENCODE CDS 152648965 152649196 . - 1 Parent=gene2642 chrX ENCODE exon 152649779 152649851 . - . Parent=gene2642 chrX ENCODE CDS 152649779 152649851 . - 2 Parent=gene2642 chrX ENCODE exon 152650624 152650780 . - . Parent=gene2642 chrX ENCODE CDS 152650624 152650780 . - 0 Parent=gene2642 ### chrX ENCODE gene 152648850 152662149 . - . ID=gene2643;Name=U52111.6-002;name2=L1CAM chrX ENCODE exon 152648850 152649196 . - . Parent=gene2643 chrX ENCODE CDS 152648965 152649196 . - 1 Parent=gene2643 chrX ENCODE exon 152649779 152649851 . - . Parent=gene2643 chrX ENCODE CDS 152649779 152649851 . - 2 Parent=gene2643 chrX ENCODE exon 152650185 152650319 . - . Parent=gene2643 chrX ENCODE CDS 152650185 152650319 . - 2 Parent=gene2643 chrX ENCODE exon 152650624 152650779 . - . Parent=gene2643 chrX ENCODE CDS 152650624 152650779 . - 2 Parent=gene2643 chrX ENCODE exon 152650887 152651006 . - . Parent=gene2643 chrX ENCODE CDS 152650887 152651006 . - 2 Parent=gene2643 chrX ENCODE exon 152651123 152651296 . - . Parent=gene2643 chrX ENCODE CDS 152651123 152651296 . - 2 Parent=gene2643 chrX ENCODE exon 152651390 152651512 . - . Parent=gene2643 chrX ENCODE CDS 152651390 152651512 . - 2 Parent=gene2643 chrX ENCODE exon 152651601 152651802 . - . Parent=gene2643 chrX ENCODE CDS 152651601 152651802 . - 0 Parent=gene2643 chrX ENCODE exon 152652006 152652121 . - . Parent=gene2643 chrX ENCODE CDS 152652006 152652121 . - 2 Parent=gene2643 chrX ENCODE exon 152652951 152653173 . - . Parent=gene2643 chrX ENCODE CDS 152652951 152653173 . - 0 Parent=gene2643 chrX ENCODE exon 152653356 152653426 . - . Parent=gene2643 chrX ENCODE CDS 152653356 152653426 . - 2 Parent=gene2643 chrX ENCODE exon 152653658 152653855 . - . Parent=gene2643 chrX ENCODE CDS 152653658 152653855 . - 2 Parent=gene2643 chrX ENCODE exon 152654102 152654212 . - . Parent=gene2643 chrX ENCODE CDS 152654102 152654212 . - 2 Parent=gene2643 chrX ENCODE exon 152654300 152654424 . - . Parent=gene2643 chrX ENCODE CDS 152654300 152654424 . - 1 Parent=gene2643 chrX ENCODE exon 152654604 152654760 . - . Parent=gene2643 chrX ENCODE CDS 152654604 152654760 . - 2 Parent=gene2643 chrX ENCODE exon 152654863 152655029 . - . Parent=gene2643 chrX ENCODE CDS 152654863 152655029 . - 1 Parent=gene2643 chrX ENCODE exon 152655143 152655254 . - . Parent=gene2643 chrX ENCODE CDS 152655143 152655254 . - 2 Parent=gene2643 chrX ENCODE exon 152655822 152655965 . - . Parent=gene2643 chrX ENCODE CDS 152655822 152655965 . - 2 Parent=gene2643 chrX ENCODE exon 152656105 152656236 . - . Parent=gene2643 chrX ENCODE CDS 152656105 152656236 . - 2 Parent=gene2643 chrX ENCODE exon 152656358 152656542 . - . Parent=gene2643 chrX ENCODE CDS 152656358 152656542 . - 1 Parent=gene2643 chrX ENCODE exon 152656690 152656801 . - . Parent=gene2643 chrX ENCODE CDS 152656690 152656801 . - 2 Parent=gene2643 chrX ENCODE exon 152657092 152657262 . - . Parent=gene2643 chrX ENCODE CDS 152657092 152657262 . - 2 Parent=gene2643 chrX ENCODE exon 152657359 152657481 . - . Parent=gene2643 chrX ENCODE CDS 152657359 152657481 . - 2 Parent=gene2643 chrX ENCODE exon 152658454 152658656 . - . Parent=gene2643 chrX ENCODE CDS 152658454 152658656 . - 1 Parent=gene2643 chrX ENCODE exon 152658894 152658999 . - . Parent=gene2643 chrX ENCODE CDS 152658894 152658999 . - 2 Parent=gene2643 chrX ENCODE exon 152659530 152659544 . - . Parent=gene2643 chrX ENCODE CDS 152659530 152659544 . - 2 Parent=gene2643 chrX ENCODE CDS 152662063 152662138 . - 0 Parent=gene2643 chrX ENCODE exon 152662063 152662149 . - . Parent=gene2643 ### chrX ENCODE gene 152649094 152650271 . - . ID=gene2644;Name=U52111.6-015;name2=L1CAM chrX ENCODE exon 152649094 152649196 . - . Parent=gene2644 chrX ENCODE exon 152649670 152649681 . - . Parent=gene2644 chrX ENCODE exon 152649779 152650271 . - . Parent=gene2644 ### chrX ENCODE gene 152651266 152652217 . - . ID=gene2645;Name=U52111.6-014;name2=L1CAM chrX ENCODE exon 152651266 152651296 . - . Parent=gene2645 chrX ENCODE exon 152651390 152651512 . - . Parent=gene2645 chrX ENCODE exon 152651601 152651802 . - . Parent=gene2645 chrX ENCODE exon 152652006 152652217 . - . Parent=gene2645 ### chrX ENCODE gene 152653074 152654679 . - . ID=gene2646;Name=U52111.6-007;name2=L1CAM chrX ENCODE exon 152653074 152653173 . - . Parent=gene2646 chrX ENCODE CDS 152653074 152653173 . - 1 Parent=gene2646 chrX ENCODE exon 152653356 152653426 . - . Parent=gene2646 chrX ENCODE CDS 152653356 152653426 . - 0 Parent=gene2646 chrX ENCODE exon 152653658 152653855 . - . Parent=gene2646 chrX ENCODE CDS 152653658 152653855 . - 0 Parent=gene2646 chrX ENCODE exon 152654300 152654424 . - . Parent=gene2646 chrX ENCODE CDS 152654300 152654424 . - 2 Parent=gene2646 chrX ENCODE exon 152654604 152654679 . - . Parent=gene2646 chrX ENCODE CDS 152654604 152654679 . - 0 Parent=gene2646 ### chrX ENCODE gene 152653853 152654925 . - . ID=gene2647;Name=U52111.6-013;name2=L1CAM chrX ENCODE exon 152653853 152653855 . - . Parent=gene2647 chrX ENCODE exon 152654102 152654212 . - . Parent=gene2647 chrX ENCODE exon 152654300 152654424 . - . Parent=gene2647 chrX ENCODE exon 152654604 152654925 . - . Parent=gene2647 ### chrX ENCODE gene 152654709 152655474 . - . ID=gene2648;Name=U52111.6-012;name2=L1CAM chrX ENCODE exon 152654709 152654760 . - . Parent=gene2648 chrX ENCODE exon 152654863 152655029 . - . Parent=gene2648 chrX ENCODE exon 152655143 152655474 . - . Parent=gene2648 ### chrX ENCODE gene 152657430 152662341 . - . ID=gene2649;Name=U52111.6-011;name2=L1CAM chrX ENCODE exon 152657430 152657481 . - . Parent=gene2649 chrX ENCODE exon 152658454 152658656 . - . Parent=gene2649 chrX ENCODE exon 152658894 152658999 . - . Parent=gene2649 chrX ENCODE exon 152659530 152659544 . - . Parent=gene2649 chrX ENCODE exon 152662063 152662341 . - . Parent=gene2649 ### chrX ENCODE gene 152658523 152695524 . - . ID=gene2650;Name=U52111.6-016;name2=L1CAM chrX ENCODE exon 152658523 152658656 . - . Parent=gene2650 chrX ENCODE exon 152658894 152658999 . - . Parent=gene2650 chrX ENCODE exon 152659530 152659544 . - . Parent=gene2650 chrX ENCODE exon 152662063 152662246 . - . Parent=gene2650 chrX ENCODE exon 152695371 152695524 . - . Parent=gene2650 ### chrX ENCODE gene 152658569 152672474 . - . ID=gene2651;Name=U52111.6-008;name2=L1CAM chrX ENCODE exon 152658569 152658656 . - . Parent=gene2651 chrX ENCODE CDS 152658569 152658656 . - 1 Parent=gene2651 chrX ENCODE exon 152658894 152658999 . - . Parent=gene2651 chrX ENCODE CDS 152658894 152658999 . - 2 Parent=gene2651 chrX ENCODE CDS 152662063 152662138 . - 0 Parent=gene2651 chrX ENCODE exon 152662063 152662246 . - . Parent=gene2651 chrX ENCODE exon 152666584 152666665 . - . Parent=gene2651 chrX ENCODE exon 152672366 152672474 . - . Parent=gene2651 ### chrX ENCODE gene 152658603 152662693 . - . ID=gene2652;Name=U52111.6-010;name2=L1CAM chrX ENCODE exon 152658603 152658656 . - . Parent=gene2652 chrX ENCODE exon 152658894 152658999 . - . Parent=gene2652 chrX ENCODE exon 152659530 152659544 . - . Parent=gene2652 chrX ENCODE exon 152662063 152662246 . - . Parent=gene2652 chrX ENCODE exon 152662416 152662693 . - . Parent=gene2652 ### chrX ENCODE gene 152659251 152672443 . - . ID=gene2653;Name=U52111.6-009;name2=L1CAM chrX ENCODE exon 152659251 152659544 . - . Parent=gene2653 chrX ENCODE exon 152662063 152662246 . - . Parent=gene2653 chrX ENCODE exon 152672366 152672443 . - . Parent=gene2653 ### chrX ENCODE gene 152666974 152675291 . + . ID=gene2654;Name=U52112.12-001;name2=U52112.12 chrX ENCODE exon 152666974 152667020 . + . Parent=gene2654 chrX ENCODE CDS 152666974 152667020 . + 0 Parent=gene2654 chrX ENCODE exon 152670013 152670198 . + . Parent=gene2654 chrX ENCODE CDS 152670013 152670198 . + 1 Parent=gene2654 chrX ENCODE exon 152670250 152670574 . + . Parent=gene2654 chrX ENCODE CDS 152670250 152670574 . + 1 Parent=gene2654 chrX ENCODE exon 152671664 152671737 . + . Parent=gene2654 chrX ENCODE CDS 152671664 152671737 . + 0 Parent=gene2654 chrX ENCODE exon 152672109 152672278 . + . Parent=gene2654 chrX ENCODE CDS 152672109 152672278 . + 1 Parent=gene2654 chrX ENCODE exon 152673264 152673358 . + . Parent=gene2654 chrX ENCODE CDS 152673264 152673358 . + 2 Parent=gene2654 chrX ENCODE CDS 152674798 152674898 . + 0 Parent=gene2654 chrX ENCODE exon 152674798 152675291 . + . Parent=gene2654 ### chrX ENCODE gene 152670166 152672462 . - . ID=gene2655;name2=L1CAM;Name=U52111.6-005 chrX ENCODE exon 152670166 152670807 . - . Parent=gene2655 chrX ENCODE exon 152672366 152672462 . - . Parent=gene2655 ### chrX ENCODE gene 152688832 152693466 . + . ID=gene2656;name2=AVPR2;Name=U52112.2-002 chrX ENCODE exon 152688832 152689193 . + . Parent=gene2656 chrX ENCODE exon 152691275 152691471 . + . Parent=gene2656 chrX ENCODE exon 152692320 152692717 . + . Parent=gene2656 chrX ENCODE exon 152692824 152693466 . + . Parent=gene2656 ### chrX ENCODE gene 152691036 152693467 . + . ID=gene2657;Name=U52112.2-001;name2=AVPR2 chrX ENCODE exon 152691036 152691072 . + . Parent=gene2657 chrX ENCODE exon 152691275 152691471 . + . Parent=gene2657 chrX ENCODE CDS 152691447 152691471 . + 0 Parent=gene2657 chrX ENCODE exon 152691833 152692717 . + . Parent=gene2657 chrX ENCODE CDS 152691833 152692717 . + 2 Parent=gene2657 chrX ENCODE CDS 152692824 152693029 . + 2 Parent=gene2657 chrX ENCODE exon 152692824 152693467 . + . Parent=gene2657 ### chrX ENCODE gene 152691415 152693082 . + . ID=gene2658;Name=U52112.2-003;name2=AVPR2 chrX ENCODE exon 152691415 152691471 . + . Parent=gene2658 chrX ENCODE CDS 152691447 152691471 . + 0 Parent=gene2658 chrX ENCODE CDS 152691833 152692737 . + 2 Parent=gene2658 chrX ENCODE exon 152691833 152693082 . + . Parent=gene2658 ### chrX ENCODE gene 152693668 152712555 . - . ID=gene2659;Name=U52112.4-024;name2=ARHGAP4 chrX ENCODE exon 152693668 152694263 . - . Parent=gene2659 chrX ENCODE CDS 152694030 152694263 . - 0 Parent=gene2659 chrX ENCODE exon 152695371 152695470 . - . Parent=gene2659 chrX ENCODE CDS 152695371 152695470 . - 1 Parent=gene2659 chrX ENCODE exon 152695744 152695836 . - . Parent=gene2659 chrX ENCODE CDS 152695744 152695836 . - 1 Parent=gene2659 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2659 chrX ENCODE CDS 152696042 152696225 . - 2 Parent=gene2659 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2659 chrX ENCODE CDS 152696313 152696386 . - 1 Parent=gene2659 chrX ENCODE exon 152696472 152696705 . - . Parent=gene2659 chrX ENCODE CDS 152696472 152696705 . - 1 Parent=gene2659 chrX ENCODE exon 152696807 152696912 . - . Parent=gene2659 chrX ENCODE CDS 152696807 152696912 . - 2 Parent=gene2659 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2659 chrX ENCODE CDS 152697001 152697135 . - 2 Parent=gene2659 chrX ENCODE exon 152697223 152697300 . - . Parent=gene2659 chrX ENCODE CDS 152697223 152697300 . - 2 Parent=gene2659 chrX ENCODE exon 152697430 152697490 . - . Parent=gene2659 chrX ENCODE CDS 152697430 152697490 . - 0 Parent=gene2659 chrX ENCODE exon 152699001 152699103 . - . Parent=gene2659 chrX ENCODE CDS 152699001 152699103 . - 1 Parent=gene2659 chrX ENCODE exon 152699325 152699352 . - . Parent=gene2659 chrX ENCODE CDS 152699325 152699352 . - 2 Parent=gene2659 chrX ENCODE exon 152699519 152699603 . - . Parent=gene2659 chrX ENCODE CDS 152699519 152699603 . - 0 Parent=gene2659 chrX ENCODE exon 152699710 152699901 . - . Parent=gene2659 chrX ENCODE CDS 152699710 152699901 . - 0 Parent=gene2659 chrX ENCODE exon 152700079 152700180 . - . Parent=gene2659 chrX ENCODE CDS 152700079 152700180 . - 0 Parent=gene2659 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2659 chrX ENCODE CDS 152707397 152707459 . - 0 Parent=gene2659 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2659 chrX ENCODE CDS 152707665 152707827 . - 1 Parent=gene2659 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2659 chrX ENCODE CDS 152707905 152708109 . - 2 Parent=gene2659 chrX ENCODE CDS 152712437 152712503 . - 0 Parent=gene2659 chrX ENCODE exon 152712437 152712555 . - . Parent=gene2659 ### chrX ENCODE gene 152693677 152712561 . - . ID=gene2660;Name=U52112.4-001;name2=ARHGAP4 chrX ENCODE exon 152693677 152694263 . - . Parent=gene2660 chrX ENCODE CDS 152694030 152694263 . - 0 Parent=gene2660 chrX ENCODE exon 152695371 152695470 . - . Parent=gene2660 chrX ENCODE CDS 152695371 152695470 . - 1 Parent=gene2660 chrX ENCODE exon 152695744 152695836 . - . Parent=gene2660 chrX ENCODE CDS 152695744 152695836 . - 1 Parent=gene2660 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2660 chrX ENCODE CDS 152696042 152696225 . - 2 Parent=gene2660 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2660 chrX ENCODE CDS 152696313 152696386 . - 1 Parent=gene2660 chrX ENCODE exon 152696472 152696705 . - . Parent=gene2660 chrX ENCODE CDS 152696472 152696705 . - 1 Parent=gene2660 chrX ENCODE exon 152696807 152696912 . - . Parent=gene2660 chrX ENCODE CDS 152696807 152696912 . - 2 Parent=gene2660 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2660 chrX ENCODE CDS 152697001 152697135 . - 2 Parent=gene2660 chrX ENCODE exon 152697223 152697300 . - . Parent=gene2660 chrX ENCODE CDS 152697223 152697300 . - 2 Parent=gene2660 chrX ENCODE exon 152697430 152697490 . - . Parent=gene2660 chrX ENCODE CDS 152697430 152697490 . - 0 Parent=gene2660 chrX ENCODE exon 152699001 152699103 . - . Parent=gene2660 chrX ENCODE CDS 152699001 152699103 . - 1 Parent=gene2660 chrX ENCODE exon 152699325 152699352 . - . Parent=gene2660 chrX ENCODE CDS 152699325 152699352 . - 2 Parent=gene2660 chrX ENCODE exon 152699519 152699603 . - . Parent=gene2660 chrX ENCODE CDS 152699519 152699603 . - 0 Parent=gene2660 chrX ENCODE exon 152699710 152699901 . - . Parent=gene2660 chrX ENCODE CDS 152699710 152699901 . - 0 Parent=gene2660 chrX ENCODE exon 152700079 152700180 . - . Parent=gene2660 chrX ENCODE CDS 152700079 152700180 . - 0 Parent=gene2660 chrX ENCODE exon 152705133 152705354 . - . Parent=gene2660 chrX ENCODE CDS 152705133 152705354 . - 0 Parent=gene2660 chrX ENCODE exon 152705456 152705584 . - . Parent=gene2660 chrX ENCODE CDS 152705456 152705584 . - 0 Parent=gene2660 chrX ENCODE exon 152705868 152705987 . - . Parent=gene2660 chrX ENCODE CDS 152705868 152705987 . - 0 Parent=gene2660 chrX ENCODE exon 152706927 152707109 . - . Parent=gene2660 chrX ENCODE CDS 152706927 152707109 . - 0 Parent=gene2660 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2660 chrX ENCODE CDS 152707397 152707459 . - 0 Parent=gene2660 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2660 chrX ENCODE CDS 152707665 152707827 . - 1 Parent=gene2660 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2660 chrX ENCODE CDS 152707905 152708109 . - 2 Parent=gene2660 chrX ENCODE CDS 152712437 152712503 . - 0 Parent=gene2660 chrX ENCODE exon 152712437 152712561 . - . Parent=gene2660 ### chrX ENCODE gene 152693678 152712545 . - . ID=gene2661;Name=U52112.4-003;name2=ARHGAP4 chrX ENCODE exon 152693678 152694263 . - . Parent=gene2661 chrX ENCODE CDS 152694030 152694263 . - 0 Parent=gene2661 chrX ENCODE exon 152695371 152695470 . - . Parent=gene2661 chrX ENCODE CDS 152695371 152695470 . - 1 Parent=gene2661 chrX ENCODE exon 152695744 152695836 . - . Parent=gene2661 chrX ENCODE CDS 152695744 152695836 . - 1 Parent=gene2661 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2661 chrX ENCODE CDS 152696042 152696225 . - 2 Parent=gene2661 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2661 chrX ENCODE CDS 152696313 152696386 . - 1 Parent=gene2661 chrX ENCODE exon 152696472 152696705 . - . Parent=gene2661 chrX ENCODE CDS 152696472 152696705 . - 1 Parent=gene2661 chrX ENCODE exon 152696807 152696912 . - . Parent=gene2661 chrX ENCODE CDS 152696807 152696912 . - 2 Parent=gene2661 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2661 chrX ENCODE CDS 152697001 152697135 . - 2 Parent=gene2661 chrX ENCODE exon 152697223 152697300 . - . Parent=gene2661 chrX ENCODE CDS 152697223 152697300 . - 2 Parent=gene2661 chrX ENCODE exon 152697430 152697490 . - . Parent=gene2661 chrX ENCODE CDS 152697430 152697490 . - 0 Parent=gene2661 chrX ENCODE exon 152699001 152699103 . - . Parent=gene2661 chrX ENCODE CDS 152699001 152699103 . - 1 Parent=gene2661 chrX ENCODE exon 152699325 152699352 . - . Parent=gene2661 chrX ENCODE CDS 152699325 152699352 . - 2 Parent=gene2661 chrX ENCODE exon 152699519 152699603 . - . Parent=gene2661 chrX ENCODE CDS 152699519 152699603 . - 0 Parent=gene2661 chrX ENCODE exon 152699710 152699901 . - . Parent=gene2661 chrX ENCODE CDS 152699710 152699901 . - 0 Parent=gene2661 chrX ENCODE exon 152700079 152700180 . - . Parent=gene2661 chrX ENCODE CDS 152700079 152700180 . - 0 Parent=gene2661 chrX ENCODE exon 152705133 152705354 . - . Parent=gene2661 chrX ENCODE CDS 152705133 152705354 . - 0 Parent=gene2661 chrX ENCODE exon 152705456 152705584 . - . Parent=gene2661 chrX ENCODE CDS 152705456 152705584 . - 0 Parent=gene2661 chrX ENCODE exon 152706927 152707109 . - . Parent=gene2661 chrX ENCODE CDS 152706927 152707109 . - 0 Parent=gene2661 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2661 chrX ENCODE CDS 152707397 152707459 . - 0 Parent=gene2661 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2661 chrX ENCODE CDS 152707665 152707827 . - 1 Parent=gene2661 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2661 chrX ENCODE CDS 152707905 152708109 . - 2 Parent=gene2661 chrX ENCODE CDS 152712437 152712503 . - 0 Parent=gene2661 chrX ENCODE exon 152712437 152712545 . - . Parent=gene2661 ### chrX ENCODE gene 152693678 152712545 . - . ID=gene2662;Name=U52112.4-002;name2=ARHGAP4 chrX ENCODE exon 152693678 152694263 . - . Parent=gene2662 chrX ENCODE exon 152695371 152695470 . - . Parent=gene2662 chrX ENCODE exon 152695744 152695836 . - . Parent=gene2662 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2662 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2662 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2662 chrX ENCODE exon 152697430 152697490 . - . Parent=gene2662 chrX ENCODE exon 152699001 152699103 . - . Parent=gene2662 chrX ENCODE exon 152699325 152699352 . - . Parent=gene2662 chrX ENCODE exon 152699519 152699603 . - . Parent=gene2662 chrX ENCODE exon 152699710 152699901 . - . Parent=gene2662 chrX ENCODE exon 152700079 152700180 . - . Parent=gene2662 chrX ENCODE exon 152705133 152705354 . - . Parent=gene2662 chrX ENCODE exon 152705456 152705584 . - . Parent=gene2662 chrX ENCODE exon 152706927 152707109 . - . Parent=gene2662 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2662 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2662 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2662 chrX ENCODE exon 152712437 152712545 . - . Parent=gene2662 ### chrX ENCODE gene 152693716 152699038 . - . ID=gene2663;Name=U52112.4-016;name2=ARHGAP4 chrX ENCODE exon 152693716 152694263 . - . Parent=gene2663 chrX ENCODE exon 152695371 152695470 . - . Parent=gene2663 chrX ENCODE exon 152695744 152695836 . - . Parent=gene2663 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2663 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2663 chrX ENCODE exon 152696472 152696912 . - . Parent=gene2663 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2663 chrX ENCODE exon 152697223 152697300 . - . Parent=gene2663 chrX ENCODE exon 152697430 152697490 . - . Parent=gene2663 chrX ENCODE exon 152699001 152699038 . - . Parent=gene2663 ### chrX ENCODE gene 152693740 152695959 . - . ID=gene2664;Name=U52112.4-006;name2=ARHGAP4 chrX ENCODE exon 152693740 152694263 . - . Parent=gene2664 chrX ENCODE exon 152695371 152695470 . - . Parent=gene2664 chrX ENCODE exon 152695744 152695959 . - . Parent=gene2664 ### chrX ENCODE gene 152693755 152712545 . - . ID=gene2665;name2=ARHGAP4;Name=U52112.4-011 chrX ENCODE exon 152693755 152694263 . - . Parent=gene2665 chrX ENCODE CDS 152694030 152694263 . - 0 Parent=gene2665 chrX ENCODE exon 152695371 152695470 . - . Parent=gene2665 chrX ENCODE CDS 152695371 152695470 . - 1 Parent=gene2665 chrX ENCODE exon 152695744 152695836 . - . Parent=gene2665 chrX ENCODE CDS 152695744 152695836 . - 1 Parent=gene2665 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2665 chrX ENCODE CDS 152696042 152696225 . - 2 Parent=gene2665 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2665 chrX ENCODE CDS 152696313 152696386 . - 1 Parent=gene2665 chrX ENCODE exon 152696472 152696705 . - . Parent=gene2665 chrX ENCODE CDS 152696472 152696705 . - 1 Parent=gene2665 chrX ENCODE exon 152696807 152696912 . - . Parent=gene2665 chrX ENCODE CDS 152696807 152696912 . - 2 Parent=gene2665 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2665 chrX ENCODE CDS 152697001 152697135 . - 2 Parent=gene2665 chrX ENCODE exon 152697223 152697300 . - . Parent=gene2665 chrX ENCODE CDS 152697223 152697300 . - 2 Parent=gene2665 chrX ENCODE exon 152697430 152697490 . - . Parent=gene2665 chrX ENCODE CDS 152697430 152697490 . - 0 Parent=gene2665 chrX ENCODE exon 152699001 152699103 . - . Parent=gene2665 chrX ENCODE CDS 152699001 152699103 . - 1 Parent=gene2665 chrX ENCODE exon 152699325 152699352 . - . Parent=gene2665 chrX ENCODE CDS 152699325 152699352 . - 2 Parent=gene2665 chrX ENCODE exon 152699519 152699603 . - . Parent=gene2665 chrX ENCODE CDS 152699519 152699603 . - 0 Parent=gene2665 chrX ENCODE exon 152699710 152699901 . - . Parent=gene2665 chrX ENCODE CDS 152699710 152699901 . - 0 Parent=gene2665 chrX ENCODE exon 152700079 152700180 . - . Parent=gene2665 chrX ENCODE CDS 152700079 152700180 . - 0 Parent=gene2665 chrX ENCODE exon 152705133 152705354 . - . Parent=gene2665 chrX ENCODE CDS 152705133 152705354 . - 0 Parent=gene2665 chrX ENCODE exon 152705456 152705584 . - . Parent=gene2665 chrX ENCODE CDS 152705456 152705584 . - 0 Parent=gene2665 chrX ENCODE exon 152706927 152707109 . - . Parent=gene2665 chrX ENCODE CDS 152706927 152707109 . - 0 Parent=gene2665 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2665 chrX ENCODE CDS 152707665 152707827 . - 1 Parent=gene2665 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2665 chrX ENCODE CDS 152707905 152708109 . - 2 Parent=gene2665 chrX ENCODE CDS 152712437 152712503 . - 0 Parent=gene2665 chrX ENCODE exon 152712437 152712545 . - . Parent=gene2665 ### chrX ENCODE gene 152693755 152712545 . - . ID=gene2666;Name=U52112.4-012;name2=ARHGAP4 chrX ENCODE exon 152693755 152694263 . - . Parent=gene2666 chrX ENCODE exon 152695371 152695470 . - . Parent=gene2666 chrX ENCODE exon 152695744 152695836 . - . Parent=gene2666 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2666 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2666 chrX ENCODE exon 152696472 152696705 . - . Parent=gene2666 chrX ENCODE exon 152696807 152696912 . - . Parent=gene2666 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2666 chrX ENCODE exon 152697223 152697300 . - . Parent=gene2666 chrX ENCODE exon 152697430 152697490 . - . Parent=gene2666 chrX ENCODE exon 152699001 152699103 . - . Parent=gene2666 chrX ENCODE exon 152699325 152699352 . - . Parent=gene2666 chrX ENCODE exon 152699519 152699901 . - . Parent=gene2666 chrX ENCODE exon 152700079 152700180 . - . Parent=gene2666 chrX ENCODE exon 152705133 152705354 . - . Parent=gene2666 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2666 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2666 chrX ENCODE exon 152712437 152712545 . - . Parent=gene2666 ### chrX ENCODE gene 152693755 152712545 . - . ID=gene2667;Name=U52112.4-013;name2=ARHGAP4 chrX ENCODE exon 152693755 152694263 . - . Parent=gene2667 chrX ENCODE exon 152695371 152695470 . - . Parent=gene2667 chrX ENCODE exon 152695744 152695836 . - . Parent=gene2667 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2667 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2667 chrX ENCODE exon 152696472 152696705 . - . Parent=gene2667 chrX ENCODE exon 152696807 152696912 . - . Parent=gene2667 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2667 chrX ENCODE exon 152697223 152697300 . - . Parent=gene2667 chrX ENCODE exon 152697430 152697490 . - . Parent=gene2667 chrX ENCODE exon 152699001 152699103 . - . Parent=gene2667 chrX ENCODE exon 152699325 152699352 . - . Parent=gene2667 chrX ENCODE exon 152699519 152699901 . - . Parent=gene2667 chrX ENCODE exon 152700079 152700180 . - . Parent=gene2667 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2667 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2667 chrX ENCODE exon 152712437 152712545 . - . Parent=gene2667 ### chrX ENCODE gene 152693770 152712606 . - . ID=gene2668;Name=U52112.4-014;name2=ARHGAP4 chrX ENCODE exon 152693770 152694263 . - . Parent=gene2668 chrX ENCODE exon 152695371 152695470 . - . Parent=gene2668 chrX ENCODE exon 152695744 152695836 . - . Parent=gene2668 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2668 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2668 chrX ENCODE exon 152696472 152696705 . - . Parent=gene2668 chrX ENCODE exon 152696807 152696912 . - . Parent=gene2668 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2668 chrX ENCODE exon 152697223 152697300 . - . Parent=gene2668 chrX ENCODE exon 152697430 152697490 . - . Parent=gene2668 chrX ENCODE exon 152699001 152699103 . - . Parent=gene2668 chrX ENCODE exon 152699325 152699352 . - . Parent=gene2668 chrX ENCODE exon 152699519 152699603 . - . Parent=gene2668 chrX ENCODE exon 152699710 152699901 . - . Parent=gene2668 chrX ENCODE exon 152700079 152700180 . - . Parent=gene2668 chrX ENCODE exon 152705133 152705354 . - . Parent=gene2668 chrX ENCODE exon 152705456 152705584 . - . Parent=gene2668 chrX ENCODE exon 152706927 152707137 . - . Parent=gene2668 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2668 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2668 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2668 chrX ENCODE exon 152712437 152712606 . - . Parent=gene2668 ### chrX ENCODE gene 152695769 152697402 . - . ID=gene2669;Name=U52112.4-009;name2=ARHGAP4 chrX ENCODE exon 152695769 152695836 . - . Parent=gene2669 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2669 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2669 chrX ENCODE exon 152696807 152696912 . - . Parent=gene2669 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2669 chrX ENCODE exon 152697223 152697402 . - . Parent=gene2669 ### chrX ENCODE gene 152695809 152697172 . - . ID=gene2670;Name=U52112.4-008;name2=ARHGAP4 chrX ENCODE exon 152695809 152695836 . - . Parent=gene2670 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2670 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2670 chrX ENCODE exon 152696472 152696705 . - . Parent=gene2670 chrX ENCODE exon 152696807 152696912 . - . Parent=gene2670 chrX ENCODE exon 152697001 152697172 . - . Parent=gene2670 ### chrX ENCODE gene 152696042 152699086 . - . ID=gene2671;Name=U52112.4-010;name2=ARHGAP4 chrX ENCODE exon 152696042 152696225 . - . Parent=gene2671 chrX ENCODE CDS 152696042 152696225 . - 0 Parent=gene2671 chrX ENCODE exon 152696313 152696386 . - . Parent=gene2671 chrX ENCODE CDS 152696313 152696386 . - 2 Parent=gene2671 chrX ENCODE exon 152696472 152696705 . - . Parent=gene2671 chrX ENCODE CDS 152696472 152696705 . - 2 Parent=gene2671 chrX ENCODE exon 152696807 152696912 . - . Parent=gene2671 chrX ENCODE CDS 152696807 152696912 . - 0 Parent=gene2671 chrX ENCODE exon 152697001 152697135 . - . Parent=gene2671 chrX ENCODE CDS 152697001 152697135 . - 0 Parent=gene2671 chrX ENCODE exon 152697430 152697490 . - . Parent=gene2671 chrX ENCODE CDS 152697430 152697490 . - 1 Parent=gene2671 chrX ENCODE exon 152699001 152699086 . - . Parent=gene2671 chrX ENCODE CDS 152699001 152699086 . - 0 Parent=gene2671 ### chrX ENCODE gene 152696120 152696820 . - . ID=gene2672;Name=U52112.4-007;name2=ARHGAP4 chrX ENCODE exon 152696120 152696225 . - . Parent=gene2672 chrX ENCODE exon 152696313 152696820 . - . Parent=gene2672 ### chrX ENCODE gene 152699511 152721299 . - . ID=gene2673;Name=U52112.4-022;name2=ARHGAP4 chrX ENCODE exon 152699511 152699901 . - . Parent=gene2673 chrX ENCODE exon 152700079 152700180 . - . Parent=gene2673 chrX ENCODE exon 152705133 152705354 . - . Parent=gene2673 chrX ENCODE exon 152705456 152705584 . - . Parent=gene2673 chrX ENCODE exon 152706927 152707109 . - . Parent=gene2673 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2673 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2673 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2673 chrX ENCODE exon 152718371 152718415 . - . Parent=gene2673 chrX ENCODE exon 152718616 152718731 . - . Parent=gene2673 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2673 chrX ENCODE exon 152720243 152720301 . - . Parent=gene2673 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2673 chrX ENCODE exon 152721184 152721299 . - . Parent=gene2673 ### chrX ENCODE gene 152699529 152706932 . - . ID=gene2674;Name=U52112.4-005;name2=ARHGAP4 chrX ENCODE exon 152699529 152699603 . - . Parent=gene2674 chrX ENCODE CDS 152699529 152699603 . - 0 Parent=gene2674 chrX ENCODE exon 152699710 152699817 . - . Parent=gene2674 chrX ENCODE CDS 152699710 152699817 . - 0 Parent=gene2674 chrX ENCODE exon 152700079 152700180 . - . Parent=gene2674 chrX ENCODE CDS 152700079 152700180 . - 0 Parent=gene2674 chrX ENCODE exon 152705133 152705354 . - . Parent=gene2674 chrX ENCODE CDS 152705133 152705354 . - 0 Parent=gene2674 chrX ENCODE exon 152705456 152705584 . - . Parent=gene2674 chrX ENCODE CDS 152705456 152705584 . - 0 Parent=gene2674 chrX ENCODE exon 152706927 152706932 . - . Parent=gene2674 chrX ENCODE CDS 152706927 152706932 . - 0 Parent=gene2674 ### chrX ENCODE gene 152699825 152700554 . - . ID=gene2675;name2=ARHGAP4;Name=U52112.4-023 chrX ENCODE exon 152699825 152699901 . - . Parent=gene2675 chrX ENCODE exon 152700079 152700554 . - . Parent=gene2675 ### chrX ENCODE gene 152705143 152713058 . - . ID=gene2676;Name=U52112.4-015;name2=ARHGAP4 chrX ENCODE exon 152705143 152705354 . - . Parent=gene2676 chrX ENCODE exon 152705456 152705584 . - . Parent=gene2676 chrX ENCODE exon 152706927 152707109 . - . Parent=gene2676 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2676 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2676 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2676 chrX ENCODE exon 152712891 152713058 . - . Parent=gene2676 ### chrX ENCODE gene 152705241 152707704 . - . ID=gene2677;Name=U52112.4-020;name2=ARHGAP4 chrX ENCODE exon 152705241 152705354 . - . Parent=gene2677 chrX ENCODE CDS 152705241 152705354 . - 2 Parent=gene2677 chrX ENCODE exon 152705456 152705584 . - . Parent=gene2677 chrX ENCODE CDS 152705456 152705584 . - 2 Parent=gene2677 chrX ENCODE exon 152705868 152705987 . - . Parent=gene2677 chrX ENCODE CDS 152705868 152705987 . - 2 Parent=gene2677 chrX ENCODE exon 152706927 152707109 . - . Parent=gene2677 chrX ENCODE CDS 152706927 152707109 . - 2 Parent=gene2677 chrX ENCODE exon 152707665 152707704 . - . Parent=gene2677 chrX ENCODE CDS 152707665 152707704 . - 0 Parent=gene2677 ### chrX ENCODE gene 152705263 152708548 . - . ID=gene2678;Name=U52112.4-004;name2=ARHGAP4 chrX ENCODE exon 152705263 152705354 . - . Parent=gene2678 chrX ENCODE exon 152705456 152705584 . - . Parent=gene2678 chrX ENCODE exon 152706927 152707109 . - . Parent=gene2678 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2678 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2678 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2678 chrX ENCODE exon 152708424 152708548 . - . Parent=gene2678 ### chrX ENCODE gene 152706713 152707700 . - . ID=gene2679;name2=ARHGAP4;Name=U52112.4-021 chrX ENCODE exon 152706713 152707109 . - . Parent=gene2679 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2679 chrX ENCODE exon 152707665 152707700 . - . Parent=gene2679 ### chrX ENCODE gene 152707009 152714720 . - . ID=gene2680;Name=U52112.4-017;name2=ARHGAP4 chrX ENCODE exon 152707009 152707109 . - . Parent=gene2680 chrX ENCODE CDS 152707009 152707109 . - 0 Parent=gene2680 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2680 chrX ENCODE CDS 152707397 152707459 . - 0 Parent=gene2680 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2680 chrX ENCODE CDS 152707665 152707827 . - 1 Parent=gene2680 chrX ENCODE CDS 152707905 152708107 . - 0 Parent=gene2680 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2680 chrX ENCODE exon 152714628 152714720 . - . Parent=gene2680 ### chrX ENCODE gene 152707016 152713161 . - . ID=gene2681;Name=U52112.4-019;name2=ARHGAP4 chrX ENCODE exon 152707016 152707109 . - . Parent=gene2681 chrX ENCODE CDS 152707016 152707109 . - 0 Parent=gene2681 chrX ENCODE exon 152707397 152707459 . - . Parent=gene2681 chrX ENCODE CDS 152707397 152707459 . - 0 Parent=gene2681 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2681 chrX ENCODE CDS 152707665 152707827 . - 1 Parent=gene2681 chrX ENCODE CDS 152707905 152708107 . - 0 Parent=gene2681 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2681 chrX ENCODE exon 152713117 152713161 . - . Parent=gene2681 ### chrX ENCODE gene 152707040 152714655 . - . ID=gene2682;Name=U52112.4-018;name2=ARHGAP4 chrX ENCODE exon 152707040 152707109 . - . Parent=gene2682 chrX ENCODE exon 152707397 152707523 . - . Parent=gene2682 chrX ENCODE exon 152707665 152707827 . - . Parent=gene2682 chrX ENCODE exon 152707905 152708109 . - . Parent=gene2682 chrX ENCODE exon 152714628 152714655 . - . Parent=gene2682 ### chrX ENCODE gene 152715542 152721523 . - . ID=gene2683;name2=ARD1;Name=U52112.1-001 chrX ENCODE exon 152715542 152716523 . - . Parent=gene2683 chrX ENCODE CDS 152716287 152716523 . - 0 Parent=gene2683 chrX ENCODE exon 152717063 152717147 . - . Parent=gene2683 chrX ENCODE CDS 152717063 152717147 . - 1 Parent=gene2683 chrX ENCODE exon 152718371 152718415 . - . Parent=gene2683 chrX ENCODE CDS 152718371 152718415 . - 1 Parent=gene2683 chrX ENCODE exon 152718616 152718731 . - . Parent=gene2683 chrX ENCODE CDS 152718616 152718731 . - 0 Parent=gene2683 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2683 chrX ENCODE CDS 152718839 152718884 . - 1 Parent=gene2683 chrX ENCODE exon 152720243 152720301 . - . Parent=gene2683 chrX ENCODE CDS 152720243 152720301 . - 0 Parent=gene2683 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2683 chrX ENCODE CDS 152720677 152720775 . - 0 Parent=gene2683 chrX ENCODE CDS 152721184 152721204 . - 0 Parent=gene2683 chrX ENCODE exon 152721184 152721523 . - . Parent=gene2683 ### chrX ENCODE gene 152716127 152717740 . - . ID=gene2684;name2=ARD1;Name=U52112.1-004 chrX ENCODE exon 152716127 152716523 . - . Parent=gene2684 chrX ENCODE exon 152717063 152717740 . - . Parent=gene2684 ### chrX ENCODE gene 152716214 152721341 . - . ID=gene2685;Name=U52112.1-012;name2=ARD1 chrX ENCODE exon 152716214 152716607 . - . Parent=gene2685 chrX ENCODE CDS 152716569 152716607 . - 0 Parent=gene2685 chrX ENCODE exon 152717063 152717147 . - . Parent=gene2685 chrX ENCODE CDS 152717063 152717147 . - 1 Parent=gene2685 chrX ENCODE exon 152718371 152718415 . - . Parent=gene2685 chrX ENCODE CDS 152718371 152718415 . - 1 Parent=gene2685 chrX ENCODE exon 152718616 152718731 . - . Parent=gene2685 chrX ENCODE CDS 152718616 152718731 . - 0 Parent=gene2685 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2685 chrX ENCODE CDS 152718839 152718884 . - 1 Parent=gene2685 chrX ENCODE exon 152720243 152720301 . - . Parent=gene2685 chrX ENCODE CDS 152720243 152720301 . - 0 Parent=gene2685 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2685 chrX ENCODE CDS 152720677 152720775 . - 0 Parent=gene2685 chrX ENCODE CDS 152721184 152721204 . - 0 Parent=gene2685 chrX ENCODE exon 152721184 152721341 . - . Parent=gene2685 ### chrX ENCODE gene 152716221 152721258 . - . ID=gene2686;Name=U52112.1-015;name2=ARD1 chrX ENCODE exon 152716221 152716603 . - . Parent=gene2686 chrX ENCODE CDS 152716520 152716603 . - 0 Parent=gene2686 chrX ENCODE exon 152717063 152717147 . - . Parent=gene2686 chrX ENCODE CDS 152717063 152717147 . - 1 Parent=gene2686 chrX ENCODE exon 152718371 152718415 . - . Parent=gene2686 chrX ENCODE CDS 152718371 152718415 . - 1 Parent=gene2686 chrX ENCODE exon 152718616 152718731 . - . Parent=gene2686 chrX ENCODE CDS 152718616 152718731 . - 0 Parent=gene2686 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2686 chrX ENCODE CDS 152718839 152718884 . - 1 Parent=gene2686 chrX ENCODE exon 152720243 152720301 . - . Parent=gene2686 chrX ENCODE CDS 152720243 152720301 . - 0 Parent=gene2686 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2686 chrX ENCODE CDS 152720677 152720775 . - 0 Parent=gene2686 chrX ENCODE CDS 152721184 152721204 . - 0 Parent=gene2686 chrX ENCODE exon 152721184 152721258 . - . Parent=gene2686 ### chrX ENCODE gene 152716224 152721315 . - . ID=gene2687;Name=U52112.1-002;name2=ARD1 chrX ENCODE exon 152716224 152716523 . - . Parent=gene2687 chrX ENCODE CDS 152716287 152716523 . - 0 Parent=gene2687 chrX ENCODE exon 152717063 152717147 . - . Parent=gene2687 chrX ENCODE CDS 152717063 152717147 . - 1 Parent=gene2687 chrX ENCODE exon 152718616 152718731 . - . Parent=gene2687 chrX ENCODE CDS 152718616 152718731 . - 0 Parent=gene2687 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2687 chrX ENCODE CDS 152718839 152718884 . - 1 Parent=gene2687 chrX ENCODE exon 152720243 152720301 . - . Parent=gene2687 chrX ENCODE CDS 152720243 152720301 . - 0 Parent=gene2687 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2687 chrX ENCODE CDS 152720677 152720775 . - 0 Parent=gene2687 chrX ENCODE CDS 152721184 152721204 . - 0 Parent=gene2687 chrX ENCODE exon 152721184 152721315 . - . Parent=gene2687 ### chrX ENCODE gene 152716226 152721315 . - . ID=gene2688;Name=U52112.1-003;name2=ARD1 chrX ENCODE exon 152716226 152716523 . - . Parent=gene2688 chrX ENCODE exon 152717063 152717147 . - . Parent=gene2688 chrX ENCODE exon 152718371 152718731 . - . Parent=gene2688 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2688 chrX ENCODE exon 152720243 152720301 . - . Parent=gene2688 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2688 chrX ENCODE exon 152721184 152721315 . - . Parent=gene2688 ### chrX ENCODE gene 152716341 152719282 . - . ID=gene2689;Name=U52112.1-010;name2=ARD1 chrX ENCODE exon 152716341 152716523 . - . Parent=gene2689 chrX ENCODE exon 152717063 152717147 . - . Parent=gene2689 chrX ENCODE exon 152718371 152718415 . - . Parent=gene2689 chrX ENCODE exon 152718616 152718731 . - . Parent=gene2689 chrX ENCODE exon 152718839 152719282 . - . Parent=gene2689 ### chrX ENCODE gene 152716376 152721085 . - . ID=gene2690;Name=U52112.1-006;name2=ARD1 chrX ENCODE exon 152716376 152716523 . - . Parent=gene2690 chrX ENCODE exon 152717063 152717147 . - . Parent=gene2690 chrX ENCODE exon 152718371 152718415 . - . Parent=gene2690 chrX ENCODE exon 152718616 152718731 . - . Parent=gene2690 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2690 chrX ENCODE exon 152720243 152720301 . - . Parent=gene2690 chrX ENCODE exon 152720677 152721085 . - . Parent=gene2690 ### chrX ENCODE gene 152716505 152721315 . - . ID=gene2691;Name=U52112.1-014;name2=ARD1 chrX ENCODE exon 152716505 152716523 . - . Parent=gene2691 chrX ENCODE CDS 152716505 152716523 . - 0 Parent=gene2691 chrX ENCODE exon 152717063 152717147 . - . Parent=gene2691 chrX ENCODE CDS 152717063 152717147 . - 1 Parent=gene2691 chrX ENCODE exon 152718616 152718731 . - . Parent=gene2691 chrX ENCODE CDS 152718616 152718731 . - 0 Parent=gene2691 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2691 chrX ENCODE CDS 152718839 152718884 . - 1 Parent=gene2691 chrX ENCODE exon 152720261 152720301 . - . Parent=gene2691 chrX ENCODE CDS 152720261 152720301 . - 0 Parent=gene2691 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2691 chrX ENCODE CDS 152720677 152720775 . - 0 Parent=gene2691 chrX ENCODE CDS 152721184 152721204 . - 0 Parent=gene2691 chrX ENCODE exon 152721184 152721315 . - . Parent=gene2691 ### chrX ENCODE gene 152716593 152718558 . - . ID=gene2692;Name=U52112.1-009;name2=ARD1 chrX ENCODE exon 152716593 152717147 . - . Parent=gene2692 chrX ENCODE exon 152718371 152718558 . - . Parent=gene2692 ### chrX ENCODE gene 152717079 152721366 . - . ID=gene2693;name2=ARD1;Name=U52112.1-013 chrX ENCODE exon 152717079 152717147 . - . Parent=gene2693 chrX ENCODE CDS 152717079 152717147 . - 1 Parent=gene2693 chrX ENCODE exon 152718371 152718415 . - . Parent=gene2693 chrX ENCODE CDS 152718371 152718415 . - 1 Parent=gene2693 chrX ENCODE exon 152718616 152718731 . - . Parent=gene2693 chrX ENCODE CDS 152718616 152718731 . - 0 Parent=gene2693 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2693 chrX ENCODE CDS 152718839 152718884 . - 1 Parent=gene2693 chrX ENCODE exon 152720261 152720301 . - . Parent=gene2693 chrX ENCODE CDS 152720261 152720301 . - 0 Parent=gene2693 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2693 chrX ENCODE CDS 152720677 152720775 . - 0 Parent=gene2693 chrX ENCODE CDS 152721184 152721204 . - 0 Parent=gene2693 chrX ENCODE exon 152721184 152721366 . - . Parent=gene2693 ### chrX ENCODE gene 152718071 152721380 . - . ID=gene2694;Name=U52112.1-007;name2=ARD1 chrX ENCODE exon 152718071 152718731 . - . Parent=gene2694 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2694 chrX ENCODE exon 152720243 152720301 . - . Parent=gene2694 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2694 chrX ENCODE exon 152721184 152721380 . - . Parent=gene2694 ### chrX ENCODE gene 152718254 152721315 . - . ID=gene2695;Name=U52112.1-017;name2=ARD1 chrX ENCODE exon 152718254 152718281 . - . Parent=gene2695 chrX ENCODE CDS 152718254 152718281 . - 1 Parent=gene2695 chrX ENCODE exon 152718371 152718415 . - . Parent=gene2695 chrX ENCODE CDS 152718371 152718415 . - 1 Parent=gene2695 chrX ENCODE exon 152718616 152718731 . - . Parent=gene2695 chrX ENCODE CDS 152718616 152718731 . - 0 Parent=gene2695 chrX ENCODE exon 152718839 152718884 . - . Parent=gene2695 chrX ENCODE CDS 152718839 152718884 . - 1 Parent=gene2695 chrX ENCODE exon 152720243 152720301 . - . Parent=gene2695 chrX ENCODE CDS 152720243 152720301 . - 0 Parent=gene2695 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2695 chrX ENCODE CDS 152720677 152720775 . - 0 Parent=gene2695 chrX ENCODE CDS 152721184 152721204 . - 0 Parent=gene2695 chrX ENCODE exon 152721184 152721315 . - . Parent=gene2695 ### chrX ENCODE gene 152718367 152719282 . - . ID=gene2696;Name=U52112.1-005;name2=ARD1 chrX ENCODE exon 152718367 152718731 . - . Parent=gene2696 chrX ENCODE exon 152718839 152719282 . - . Parent=gene2696 ### chrX ENCODE gene 152719960 152721315 . - . ID=gene2697;Name=U52112.1-016;name2=ARD1 chrX ENCODE exon 152719960 152720301 . - . Parent=gene2697 chrX ENCODE exon 152720677 152720775 . - . Parent=gene2697 chrX ENCODE exon 152721184 152721315 . - . Parent=gene2697 ### chrX ENCODE gene 152720330 152721306 . - . ID=gene2698;Name=U52112.1-008;name2=ARD1 chrX ENCODE exon 152720330 152720775 . - . Parent=gene2698 chrX ENCODE exon 152721184 152721306 . - . Parent=gene2698 ### chrX ENCODE gene 152721563 152730990 . - . ID=gene2699;Name=U52112.5-001;name2=RENBP chrX ENCODE exon 152721563 152721704 . - . Parent=gene2699 chrX ENCODE CDS 152721586 152721704 . - 2 Parent=gene2699 chrX ENCODE exon 152721789 152721876 . - . Parent=gene2699 chrX ENCODE CDS 152721789 152721876 . - 0 Parent=gene2699 chrX ENCODE exon 152726402 152726533 . - . Parent=gene2699 chrX ENCODE CDS 152726402 152726533 . - 0 Parent=gene2699 chrX ENCODE exon 152727778 152727953 . - . Parent=gene2699 chrX ENCODE CDS 152727778 152727953 . - 2 Parent=gene2699 chrX ENCODE exon 152728250 152728331 . - . Parent=gene2699 chrX ENCODE CDS 152728250 152728331 . - 0 Parent=gene2699 chrX ENCODE exon 152729154 152729378 . - . Parent=gene2699 chrX ENCODE CDS 152729154 152729378 . - 0 Parent=gene2699 chrX ENCODE exon 152729845 152730017 . - . Parent=gene2699 chrX ENCODE CDS 152729845 152730017 . - 2 Parent=gene2699 chrX ENCODE exon 152730194 152730269 . - . Parent=gene2699 chrX ENCODE CDS 152730194 152730269 . - 0 Parent=gene2699 chrX ENCODE exon 152730379 152730454 . - . Parent=gene2699 chrX ENCODE CDS 152730379 152730454 . - 1 Parent=gene2699 chrX ENCODE exon 152730608 152730717 . - . Parent=gene2699 chrX ENCODE CDS 152730608 152730717 . - 0 Parent=gene2699 chrX ENCODE CDS 152730883 152730909 . - 0 Parent=gene2699 chrX ENCODE exon 152730883 152730990 . - . Parent=gene2699 ### chrX ENCODE gene 152721575 152728269 . - . ID=gene2700;name2=RENBP;Name=U52112.5-002 chrX ENCODE exon 152721575 152721704 . - . Parent=gene2700 chrX ENCODE exon 152721789 152721876 . - . Parent=gene2700 chrX ENCODE exon 152722304 152722405 . - . Parent=gene2700 chrX ENCODE exon 152723392 152723488 . - . Parent=gene2700 chrX ENCODE exon 152726402 152726533 . - . Parent=gene2700 chrX ENCODE exon 152727778 152727953 . - . Parent=gene2700 chrX ENCODE exon 152728250 152728269 . - . Parent=gene2700 ### chrX ENCODE gene 152721583 152730986 . - . ID=gene2701;Name=U52112.5-004;name2=RENBP chrX ENCODE exon 152721583 152721704 . - . Parent=gene2701 chrX ENCODE CDS 152721586 152721704 . - 2 Parent=gene2701 chrX ENCODE exon 152721789 152721876 . - . Parent=gene2701 chrX ENCODE CDS 152721789 152721876 . - 0 Parent=gene2701 chrX ENCODE exon 152726402 152726533 . - . Parent=gene2701 chrX ENCODE CDS 152726402 152726533 . - 0 Parent=gene2701 chrX ENCODE exon 152727778 152727953 . - . Parent=gene2701 chrX ENCODE CDS 152727778 152727953 . - 2 Parent=gene2701 chrX ENCODE exon 152728250 152728331 . - . Parent=gene2701 chrX ENCODE CDS 152728250 152728331 . - 0 Parent=gene2701 chrX ENCODE exon 152729154 152729378 . - . Parent=gene2701 chrX ENCODE CDS 152729154 152729378 . - 0 Parent=gene2701 chrX ENCODE exon 152729845 152730017 . - . Parent=gene2701 chrX ENCODE CDS 152729845 152730017 . - 2 Parent=gene2701 chrX ENCODE exon 152730194 152730269 . - . Parent=gene2701 chrX ENCODE CDS 152730194 152730269 . - 0 Parent=gene2701 chrX ENCODE exon 152730421 152730454 . - . Parent=gene2701 chrX ENCODE CDS 152730421 152730454 . - 1 Parent=gene2701 chrX ENCODE exon 152730608 152730717 . - . Parent=gene2701 chrX ENCODE CDS 152730608 152730717 . - 0 Parent=gene2701 chrX ENCODE CDS 152730883 152730909 . - 0 Parent=gene2701 chrX ENCODE exon 152730883 152730986 . - . Parent=gene2701 ### chrX ENCODE gene 152721586 152730925 . - . ID=gene2702;Name=U52112.5-009;name2=RENBP chrX ENCODE exon 152721586 152721704 . - . Parent=gene2702 chrX ENCODE CDS 152721586 152721704 . - 2 Parent=gene2702 chrX ENCODE exon 152721789 152721876 . - . Parent=gene2702 chrX ENCODE CDS 152721789 152721876 . - 0 Parent=gene2702 chrX ENCODE exon 152726402 152726533 . - . Parent=gene2702 chrX ENCODE CDS 152726402 152726533 . - 0 Parent=gene2702 chrX ENCODE exon 152727778 152727953 . - . Parent=gene2702 chrX ENCODE CDS 152727778 152727953 . - 2 Parent=gene2702 chrX ENCODE exon 152728250 152728331 . - . Parent=gene2702 chrX ENCODE CDS 152728250 152728331 . - 0 Parent=gene2702 chrX ENCODE exon 152729154 152729378 . - . Parent=gene2702 chrX ENCODE CDS 152729154 152729378 . - 0 Parent=gene2702 chrX ENCODE exon 152729845 152730017 . - . Parent=gene2702 chrX ENCODE CDS 152729845 152730017 . - 2 Parent=gene2702 chrX ENCODE exon 152730194 152730269 . - . Parent=gene2702 chrX ENCODE CDS 152730194 152730269 . - 0 Parent=gene2702 chrX ENCODE exon 152730379 152730454 . - . Parent=gene2702 chrX ENCODE CDS 152730379 152730454 . - 1 Parent=gene2702 chrX ENCODE CDS 152730608 152730714 . - 0 Parent=gene2702 chrX ENCODE exon 152730608 152730717 . - . Parent=gene2702 chrX ENCODE exon 152730879 152730925 . - . Parent=gene2702 ### chrX ENCODE gene 152721633 152726515 . - . ID=gene2703;Name=U52112.5-003;name2=RENBP chrX ENCODE exon 152721633 152721704 . - . Parent=gene2703 chrX ENCODE CDS 152721633 152721704 . - 2 Parent=gene2703 chrX ENCODE exon 152721789 152721876 . - . Parent=gene2703 chrX ENCODE CDS 152721789 152721876 . - 0 Parent=gene2703 chrX ENCODE exon 152722304 152722405 . - . Parent=gene2703 chrX ENCODE CDS 152722304 152722405 . - 0 Parent=gene2703 chrX ENCODE exon 152726402 152726515 . - . Parent=gene2703 chrX ENCODE CDS 152726402 152726515 . - 0 Parent=gene2703 ### chrX ENCODE gene 152722299 152730242 . - . ID=gene2704;Name=U52112.5-005;name2=RENBP chrX ENCODE exon 152722299 152722405 . - . Parent=gene2704 chrX ENCODE exon 152726402 152726533 . - . Parent=gene2704 chrX ENCODE exon 152727778 152727953 . - . Parent=gene2704 chrX ENCODE exon 152729154 152729333 . - . Parent=gene2704 chrX ENCODE exon 152729845 152730017 . - . Parent=gene2704 chrX ENCODE exon 152730194 152730242 . - . Parent=gene2704 ### chrX ENCODE gene 152728545 152729931 . - . ID=gene2705;Name=U52112.5-007;name2=RENBP chrX ENCODE exon 152728545 152728841 . - . Parent=gene2705 chrX ENCODE exon 152729154 152729378 . - . Parent=gene2705 chrX ENCODE exon 152729845 152729931 . - . Parent=gene2705 ### chrX ENCODE gene 152729154 152730910 . - . ID=gene2706;Name=U52112.5-008;name2=RENBP chrX ENCODE exon 152729154 152729378 . - . Parent=gene2706 chrX ENCODE exon 152729845 152730017 . - . Parent=gene2706 chrX ENCODE exon 152730194 152730269 . - . Parent=gene2706 chrX ENCODE exon 152730608 152730717 . - . Parent=gene2706 chrX ENCODE exon 152730883 152730910 . - . Parent=gene2706 ### chrX ENCODE gene 152729357 152730531 . - . ID=gene2707;Name=U52112.5-006;name2=RENBP chrX ENCODE exon 152729357 152729378 . - . Parent=gene2707 chrX ENCODE exon 152729845 152730017 . - . Parent=gene2707 chrX ENCODE exon 152730194 152730269 . - . Parent=gene2707 chrX ENCODE exon 152730379 152730531 . - . Parent=gene2707 ### chrX ENCODE gene 152729913 152730942 . - . ID=gene2708;name2=RENBP;Name=U52112.5-010 chrX ENCODE exon 152729913 152730017 . - . Parent=gene2708 chrX ENCODE exon 152730194 152730269 . - . Parent=gene2708 chrX ENCODE exon 152730379 152730717 . - . Parent=gene2708 chrX ENCODE exon 152730883 152730942 . - . Parent=gene2708 ### chrX ENCODE gene 152733851 152758105 . - . ID=gene2709;name2=HCFC1;Name=U52112.6-001 chrX ENCODE exon 152733851 152735684 . - . Parent=gene2709 chrX ENCODE CDS 152735645 152735684 . - 1 Parent=gene2709 chrX ENCODE exon 152735851 152735914 . - . Parent=gene2709 chrX ENCODE CDS 152735851 152735914 . - 2 Parent=gene2709 chrX ENCODE exon 152736541 152736841 . - . Parent=gene2709 chrX ENCODE CDS 152736541 152736841 . - 0 Parent=gene2709 chrX ENCODE exon 152737111 152737296 . - . Parent=gene2709 chrX ENCODE CDS 152737111 152737296 . - 0 Parent=gene2709 chrX ENCODE exon 152737648 152737785 . - . Parent=gene2709 chrX ENCODE CDS 152737648 152737785 . - 0 Parent=gene2709 chrX ENCODE exon 152737887 152738005 . - . Parent=gene2709 chrX ENCODE CDS 152737887 152738005 . - 2 Parent=gene2709 chrX ENCODE exon 152738139 152738456 . - . Parent=gene2709 chrX ENCODE CDS 152738139 152738456 . - 2 Parent=gene2709 chrX ENCODE exon 152738812 152739256 . - . Parent=gene2709 chrX ENCODE CDS 152738812 152739256 . - 0 Parent=gene2709 chrX ENCODE exon 152739905 152740068 . - . Parent=gene2709 chrX ENCODE CDS 152739905 152740068 . - 2 Parent=gene2709 chrX ENCODE exon 152740364 152741840 . - . Parent=gene2709 chrX ENCODE CDS 152740364 152741840 . - 0 Parent=gene2709 chrX ENCODE exon 152742489 152742709 . - . Parent=gene2709 chrX ENCODE CDS 152742489 152742709 . - 2 Parent=gene2709 chrX ENCODE exon 152742923 152743061 . - . Parent=gene2709 chrX ENCODE CDS 152742923 152743061 . - 0 Parent=gene2709 chrX ENCODE exon 152743216 152743358 . - . Parent=gene2709 chrX ENCODE CDS 152743216 152743358 . - 2 Parent=gene2709 chrX ENCODE exon 152743612 152743831 . - . Parent=gene2709 chrX ENCODE CDS 152743612 152743831 . - 0 Parent=gene2709 chrX ENCODE exon 152744080 152744184 . - . Parent=gene2709 chrX ENCODE CDS 152744080 152744184 . - 0 Parent=gene2709 chrX ENCODE exon 152744323 152744547 . - . Parent=gene2709 chrX ENCODE CDS 152744323 152744547 . - 0 Parent=gene2709 chrX ENCODE exon 152744867 152745064 . - . Parent=gene2709 chrX ENCODE CDS 152744867 152745064 . - 0 Parent=gene2709 chrX ENCODE exon 152745629 152745789 . - . Parent=gene2709 chrX ENCODE CDS 152745629 152745789 . - 2 Parent=gene2709 chrX ENCODE exon 152746100 152746459 . - . Parent=gene2709 chrX ENCODE CDS 152746100 152746459 . - 2 Parent=gene2709 chrX ENCODE exon 152746533 152746712 . - . Parent=gene2709 chrX ENCODE CDS 152746533 152746712 . - 2 Parent=gene2709 chrX ENCODE exon 152747840 152747946 . - . Parent=gene2709 chrX ENCODE CDS 152747840 152747946 . - 1 Parent=gene2709 chrX ENCODE exon 152748520 152748604 . - . Parent=gene2709 chrX ENCODE CDS 152748520 152748604 . - 2 Parent=gene2709 chrX ENCODE exon 152749523 152749731 . - . Parent=gene2709 chrX ENCODE CDS 152749523 152749731 . - 1 Parent=gene2709 chrX ENCODE exon 152750422 152750582 . - . Parent=gene2709 chrX ENCODE CDS 152750422 152750582 . - 0 Parent=gene2709 chrX ENCODE exon 152750876 152751024 . - . Parent=gene2709 chrX ENCODE CDS 152750876 152751024 . - 2 Parent=gene2709 chrX ENCODE CDS 152756946 152757138 . - 0 Parent=gene2709 chrX ENCODE exon 152756946 152758105 . - . Parent=gene2709 ### chrX ENCODE gene 152733855 152740419 . - . ID=gene2710;Name=U52112.6-004;name2=HCFC1 chrX ENCODE exon 152733855 152735684 . - . Parent=gene2710 chrX ENCODE CDS 152735645 152735684 . - 0 Parent=gene2710 chrX ENCODE exon 152735851 152735914 . - . Parent=gene2710 chrX ENCODE CDS 152735851 152735914 . - 1 Parent=gene2710 chrX ENCODE exon 152736541 152736841 . - . Parent=gene2710 chrX ENCODE CDS 152736541 152736841 . - 2 Parent=gene2710 chrX ENCODE exon 152737111 152737296 . - . Parent=gene2710 chrX ENCODE CDS 152737111 152737296 . - 2 Parent=gene2710 chrX ENCODE exon 152737648 152737785 . - . Parent=gene2710 chrX ENCODE CDS 152737648 152737785 . - 2 Parent=gene2710 chrX ENCODE exon 152737887 152738005 . - . Parent=gene2710 chrX ENCODE CDS 152737887 152738005 . - 1 Parent=gene2710 chrX ENCODE exon 152738139 152738459 . - . Parent=gene2710 chrX ENCODE CDS 152738139 152738459 . - 1 Parent=gene2710 chrX ENCODE exon 152738812 152739256 . - . Parent=gene2710 chrX ENCODE CDS 152738812 152739256 . - 2 Parent=gene2710 chrX ENCODE exon 152739905 152740068 . - . Parent=gene2710 chrX ENCODE CDS 152739905 152740068 . - 1 Parent=gene2710 chrX ENCODE exon 152740364 152740419 . - . Parent=gene2710 chrX ENCODE CDS 152740364 152740419 . - 0 Parent=gene2710 ### chrX ENCODE gene 152733857 152757482 . - . ID=gene2711;Name=U52112.6-003;name2=HCFC1 chrX ENCODE exon 152733857 152735684 . - . Parent=gene2711 chrX ENCODE CDS 152735645 152735684 . - 1 Parent=gene2711 chrX ENCODE exon 152735851 152735914 . - . Parent=gene2711 chrX ENCODE CDS 152735851 152735914 . - 2 Parent=gene2711 chrX ENCODE exon 152736541 152736841 . - . Parent=gene2711 chrX ENCODE CDS 152736541 152736841 . - 0 Parent=gene2711 chrX ENCODE exon 152737111 152737296 . - . Parent=gene2711 chrX ENCODE CDS 152737111 152737296 . - 0 Parent=gene2711 chrX ENCODE exon 152737648 152737785 . - . Parent=gene2711 chrX ENCODE CDS 152737648 152737785 . - 0 Parent=gene2711 chrX ENCODE exon 152737887 152738005 . - . Parent=gene2711 chrX ENCODE CDS 152737887 152738005 . - 2 Parent=gene2711 chrX ENCODE exon 152738139 152738459 . - . Parent=gene2711 chrX ENCODE CDS 152738139 152738459 . - 2 Parent=gene2711 chrX ENCODE exon 152738812 152739388 . - . Parent=gene2711 chrX ENCODE CDS 152738812 152739388 . - 0 Parent=gene2711 chrX ENCODE exon 152739905 152740068 . - . Parent=gene2711 chrX ENCODE CDS 152739905 152740068 . - 2 Parent=gene2711 chrX ENCODE exon 152740364 152741840 . - . Parent=gene2711 chrX ENCODE CDS 152740364 152741840 . - 0 Parent=gene2711 chrX ENCODE exon 152742489 152742709 . - . Parent=gene2711 chrX ENCODE CDS 152742489 152742709 . - 2 Parent=gene2711 chrX ENCODE exon 152742923 152743061 . - . Parent=gene2711 chrX ENCODE CDS 152742923 152743061 . - 0 Parent=gene2711 chrX ENCODE exon 152743216 152743358 . - . Parent=gene2711 chrX ENCODE CDS 152743216 152743358 . - 2 Parent=gene2711 chrX ENCODE exon 152743612 152743831 . - . Parent=gene2711 chrX ENCODE CDS 152743612 152743831 . - 0 Parent=gene2711 chrX ENCODE exon 152744080 152744184 . - . Parent=gene2711 chrX ENCODE CDS 152744080 152744184 . - 0 Parent=gene2711 chrX ENCODE exon 152744323 152744547 . - . Parent=gene2711 chrX ENCODE CDS 152744323 152744547 . - 0 Parent=gene2711 chrX ENCODE exon 152744867 152745064 . - . Parent=gene2711 chrX ENCODE CDS 152744867 152745064 . - 0 Parent=gene2711 chrX ENCODE exon 152745629 152745789 . - . Parent=gene2711 chrX ENCODE CDS 152745629 152745789 . - 2 Parent=gene2711 chrX ENCODE exon 152746100 152746459 . - . Parent=gene2711 chrX ENCODE CDS 152746100 152746459 . - 2 Parent=gene2711 chrX ENCODE exon 152746533 152746712 . - . Parent=gene2711 chrX ENCODE CDS 152746533 152746712 . - 2 Parent=gene2711 chrX ENCODE exon 152747840 152747946 . - . Parent=gene2711 chrX ENCODE CDS 152747840 152747946 . - 1 Parent=gene2711 chrX ENCODE exon 152748520 152748604 . - . Parent=gene2711 chrX ENCODE CDS 152748520 152748604 . - 2 Parent=gene2711 chrX ENCODE exon 152749523 152749731 . - . Parent=gene2711 chrX ENCODE CDS 152749523 152749731 . - 1 Parent=gene2711 chrX ENCODE exon 152750422 152750582 . - . Parent=gene2711 chrX ENCODE CDS 152750422 152750582 . - 0 Parent=gene2711 chrX ENCODE exon 152750876 152751024 . - . Parent=gene2711 chrX ENCODE CDS 152750876 152751024 . - 2 Parent=gene2711 chrX ENCODE CDS 152756946 152757138 . - 0 Parent=gene2711 chrX ENCODE exon 152756946 152757482 . - . Parent=gene2711 ### chrX ENCODE gene 152746307 152748565 . - . ID=gene2712;Name=U52112.6-002;name2=HCFC1 chrX ENCODE exon 152746307 152746459 . - . Parent=gene2712 chrX ENCODE exon 152746533 152746712 . - . Parent=gene2712 chrX ENCODE exon 152748520 152748565 . - . Parent=gene2712 ### chrX ENCODE gene 152758625 152769493 . + . ID=gene2713;Name=U52112.11-001;name2=CXorf12 chrX ENCODE exon 152758625 152759158 . + . Parent=gene2713 chrX ENCODE exon 152768148 152769493 . + . Parent=gene2713 chrX ENCODE CDS 152768361 152769146 . + 0 Parent=gene2713 ### chrX ENCODE gene 152759156 152768558 . + . ID=gene2714;Name=U52112.11-003;name2=CXorf12 chrX ENCODE exon 152759156 152759184 . + . Parent=gene2714 chrX ENCODE exon 152768148 152768558 . + . Parent=gene2714 chrX ENCODE CDS 152768361 152768558 . + 0 Parent=gene2714 ### chrX ENCODE gene 152766904 152768459 . + . ID=gene2715;name2=CXorf12;Name=U52112.11-002 chrX ENCODE exon 152766904 152766921 . + . Parent=gene2715 chrX ENCODE exon 152768148 152768459 . + . Parent=gene2715 chrX ENCODE CDS 152768361 152768459 . + 0 Parent=gene2715 ### chrX ENCODE gene 152796798 152806278 . - . ID=gene2716;Name=U52112.3-012;name2=IRAK1 chrX ENCODE exon 152796798 152798215 . - . Parent=gene2716 chrX ENCODE CDS 152798157 152798215 . - 2 Parent=gene2716 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2716 chrX ENCODE CDS 152798827 152798976 . - 2 Parent=gene2716 chrX ENCODE exon 152799341 152799731 . - . Parent=gene2716 chrX ENCODE CDS 152799341 152799731 . - 0 Parent=gene2716 chrX ENCODE exon 152800340 152800576 . - . Parent=gene2716 chrX ENCODE CDS 152800340 152800576 . - 0 Parent=gene2716 chrX ENCODE exon 152802330 152802395 . - . Parent=gene2716 chrX ENCODE CDS 152802330 152802395 . - 0 Parent=gene2716 chrX ENCODE exon 152802735 152802942 . - . Parent=gene2716 chrX ENCODE CDS 152802735 152802942 . - 1 Parent=gene2716 chrX ENCODE exon 152803247 152803365 . - . Parent=gene2716 chrX ENCODE CDS 152803247 152803365 . - 0 Parent=gene2716 chrX ENCODE exon 152804304 152804418 . - . Parent=gene2716 chrX ENCODE CDS 152804304 152804418 . - 1 Parent=gene2716 chrX ENCODE exon 152804589 152804653 . - . Parent=gene2716 chrX ENCODE CDS 152804589 152804653 . - 0 Parent=gene2716 chrX ENCODE exon 152804897 152805085 . - . Parent=gene2716 chrX ENCODE CDS 152804897 152805085 . - 0 Parent=gene2716 chrX ENCODE exon 152805273 152805376 . - . Parent=gene2716 chrX ENCODE CDS 152805273 152805376 . - 2 Parent=gene2716 chrX ENCODE exon 152805495 152805626 . - . Parent=gene2716 chrX ENCODE CDS 152805495 152805626 . - 2 Parent=gene2716 chrX ENCODE exon 152805729 152805896 . - . Parent=gene2716 chrX ENCODE CDS 152805729 152805896 . - 2 Parent=gene2716 chrX ENCODE CDS 152805975 152806110 . - 0 Parent=gene2716 chrX ENCODE exon 152805975 152806278 . - . Parent=gene2716 ### chrX ENCODE gene 152796804 152806174 . - . ID=gene2717;Name=U52112.3-001;name2=IRAK1 chrX ENCODE exon 152796804 152798215 . - . Parent=gene2717 chrX ENCODE CDS 152798157 152798215 . - 2 Parent=gene2717 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2717 chrX ENCODE CDS 152798827 152798976 . - 2 Parent=gene2717 chrX ENCODE exon 152799341 152799731 . - . Parent=gene2717 chrX ENCODE CDS 152799341 152799731 . - 0 Parent=gene2717 chrX ENCODE exon 152802330 152802395 . - . Parent=gene2717 chrX ENCODE CDS 152802330 152802395 . - 0 Parent=gene2717 chrX ENCODE exon 152802735 152802942 . - . Parent=gene2717 chrX ENCODE CDS 152802735 152802942 . - 1 Parent=gene2717 chrX ENCODE exon 152803247 152803365 . - . Parent=gene2717 chrX ENCODE CDS 152803247 152803365 . - 0 Parent=gene2717 chrX ENCODE exon 152804304 152804418 . - . Parent=gene2717 chrX ENCODE CDS 152804304 152804418 . - 1 Parent=gene2717 chrX ENCODE exon 152804589 152804653 . - . Parent=gene2717 chrX ENCODE CDS 152804589 152804653 . - 0 Parent=gene2717 chrX ENCODE exon 152804897 152805085 . - . Parent=gene2717 chrX ENCODE CDS 152804897 152805085 . - 0 Parent=gene2717 chrX ENCODE exon 152805273 152805376 . - . Parent=gene2717 chrX ENCODE CDS 152805273 152805376 . - 2 Parent=gene2717 chrX ENCODE exon 152805495 152805626 . - . Parent=gene2717 chrX ENCODE CDS 152805495 152805626 . - 2 Parent=gene2717 chrX ENCODE exon 152805729 152805896 . - . Parent=gene2717 chrX ENCODE CDS 152805729 152805896 . - 2 Parent=gene2717 chrX ENCODE CDS 152805975 152806110 . - 0 Parent=gene2717 chrX ENCODE exon 152805975 152806174 . - . Parent=gene2717 ### chrX ENCODE gene 152796805 152806188 . - . ID=gene2718;Name=U52112.3-009;name2=IRAK1 chrX ENCODE exon 152796805 152798215 . - . Parent=gene2718 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2718 chrX ENCODE exon 152799341 152799641 . - . Parent=gene2718 chrX ENCODE exon 152800340 152800405 . - . Parent=gene2718 chrX ENCODE exon 152800452 152800576 . - . Parent=gene2718 chrX ENCODE exon 152802330 152802395 . - . Parent=gene2718 chrX ENCODE exon 152802735 152802942 . - . Parent=gene2718 chrX ENCODE exon 152803247 152803365 . - . Parent=gene2718 chrX ENCODE exon 152804304 152804418 . - . Parent=gene2718 chrX ENCODE exon 152804589 152804653 . - . Parent=gene2718 chrX ENCODE exon 152804897 152805085 . - . Parent=gene2718 chrX ENCODE exon 152805273 152805376 . - . Parent=gene2718 chrX ENCODE exon 152805495 152805626 . - . Parent=gene2718 chrX ENCODE exon 152805729 152806188 . - . Parent=gene2718 ### chrX ENCODE gene 152796808 152804653 . - . ID=gene2719;Name=U52112.3-007;name2=IRAK1 chrX ENCODE exon 152796808 152796975 . - . Parent=gene2719 chrX ENCODE exon 152803298 152803365 . - . Parent=gene2719 chrX ENCODE exon 152804304 152804418 . - . Parent=gene2719 chrX ENCODE exon 152804589 152804653 . - . Parent=gene2719 ### chrX ENCODE gene 152796818 152806098 . - . ID=gene2720;Name=U52112.3-017;name2=IRAK1 chrX ENCODE exon 152796818 152797414 . - . Parent=gene2720 chrX ENCODE CDS 152797238 152797414 . - 0 Parent=gene2720 chrX ENCODE exon 152805273 152805376 . - . Parent=gene2720 chrX ENCODE CDS 152805273 152805376 . - 2 Parent=gene2720 chrX ENCODE exon 152805495 152805626 . - . Parent=gene2720 chrX ENCODE CDS 152805495 152805626 . - 2 Parent=gene2720 chrX ENCODE exon 152805729 152805896 . - . Parent=gene2720 chrX ENCODE CDS 152805729 152805896 . - 2 Parent=gene2720 chrX ENCODE exon 152805975 152806098 . - . Parent=gene2720 chrX ENCODE CDS 152805975 152806098 . - 0 Parent=gene2720 ### chrX ENCODE gene 152797020 152804945 . - . ID=gene2721;name2=IRAK1;Name=U52112.3-019 chrX ENCODE exon 152797020 152797109 . - . Parent=gene2721 chrX ENCODE exon 152802337 152802395 . - . Parent=gene2721 chrX ENCODE exon 152802735 152802942 . - . Parent=gene2721 chrX ENCODE exon 152803247 152803365 . - . Parent=gene2721 chrX ENCODE exon 152804304 152804418 . - . Parent=gene2721 chrX ENCODE exon 152804589 152804653 . - . Parent=gene2721 chrX ENCODE exon 152804897 152804945 . - . Parent=gene2721 ### chrX ENCODE gene 152797138 152806098 . - . ID=gene2722;Name=U52112.3-015;name2=IRAK1 chrX ENCODE exon 152797138 152797429 . - . Parent=gene2722 chrX ENCODE exon 152805291 152805376 . - . Parent=gene2722 chrX ENCODE exon 152805495 152805626 . - . Parent=gene2722 chrX ENCODE exon 152805729 152805896 . - . Parent=gene2722 chrX ENCODE exon 152805975 152806098 . - . Parent=gene2722 ### chrX ENCODE gene 152797861 152802371 . - . ID=gene2723;Name=U52112.3-016;name2=IRAK1 chrX ENCODE exon 152797861 152798215 . - . Parent=gene2723 chrX ENCODE CDS 152798006 152798215 . - 0 Parent=gene2723 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2723 chrX ENCODE CDS 152798827 152798976 . - 0 Parent=gene2723 chrX ENCODE exon 152800340 152800576 . - . Parent=gene2723 chrX ENCODE CDS 152800340 152800576 . - 0 Parent=gene2723 chrX ENCODE exon 152802330 152802371 . - . Parent=gene2723 chrX ENCODE CDS 152802330 152802371 . - 0 Parent=gene2723 ### chrX ENCODE gene 152797963 152806157 . - . ID=gene2724;Name=U52112.3-014;name2=IRAK1 chrX ENCODE exon 152797963 152798215 . - . Parent=gene2724 chrX ENCODE exon 152798827 152798964 . - . Parent=gene2724 chrX ENCODE exon 152805636 152805896 . - . Parent=gene2724 chrX ENCODE exon 152805975 152806157 . - . Parent=gene2724 ### chrX ENCODE gene 152797986 152806195 . - . ID=gene2725;Name=U52112.3-004;name2=IRAK1 chrX ENCODE exon 152797986 152798215 . - . Parent=gene2725 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2725 chrX ENCODE exon 152799341 152799731 . - . Parent=gene2725 chrX ENCODE exon 152800340 152800576 . - . Parent=gene2725 chrX ENCODE exon 152802330 152802395 . - . Parent=gene2725 chrX ENCODE exon 152802735 152802942 . - . Parent=gene2725 chrX ENCODE exon 152803247 152803365 . - . Parent=gene2725 chrX ENCODE exon 152804589 152804653 . - . Parent=gene2725 chrX ENCODE exon 152804897 152805085 . - . Parent=gene2725 chrX ENCODE exon 152805273 152805376 . - . Parent=gene2725 chrX ENCODE exon 152805495 152805626 . - . Parent=gene2725 chrX ENCODE exon 152805729 152806195 . - . Parent=gene2725 ### chrX ENCODE gene 152798029 152800544 . - . ID=gene2726;Name=U52112.3-010;name2=IRAK1 chrX ENCODE exon 152798029 152798215 . - . Parent=gene2726 chrX ENCODE CDS 152798157 152798215 . - 1 Parent=gene2726 chrX ENCODE exon 152799341 152799731 . - . Parent=gene2726 chrX ENCODE CDS 152799341 152799731 . - 2 Parent=gene2726 chrX ENCODE exon 152800340 152800544 . - . Parent=gene2726 chrX ENCODE CDS 152800340 152800544 . - 0 Parent=gene2726 ### chrX ENCODE gene 152798056 152802386 . - . ID=gene2727;name2=IRAK1;Name=U52112.3-013 chrX ENCODE exon 152798056 152798215 . - . Parent=gene2727 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2727 chrX ENCODE exon 152799341 152799731 . - . Parent=gene2727 chrX ENCODE exon 152800340 152800406 . - . Parent=gene2727 chrX ENCODE exon 152800452 152800576 . - . Parent=gene2727 chrX ENCODE exon 152802330 152802386 . - . Parent=gene2727 ### chrX ENCODE gene 152798056 152802858 . - . ID=gene2728;Name=U52112.3-011;name2=IRAK1 chrX ENCODE exon 152798056 152798215 . - . Parent=gene2728 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2728 chrX ENCODE exon 152799341 152799731 . - . Parent=gene2728 chrX ENCODE exon 152800340 152800399 . - . Parent=gene2728 chrX ENCODE exon 152800445 152800576 . - . Parent=gene2728 chrX ENCODE exon 152802330 152802395 . - . Parent=gene2728 chrX ENCODE exon 152802735 152802858 . - . Parent=gene2728 ### chrX ENCODE gene 152798125 152803292 . - . ID=gene2729;Name=U52112.3-003;name2=IRAK1 chrX ENCODE exon 152798125 152798215 . - . Parent=gene2729 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2729 chrX ENCODE exon 152799341 152799641 . - . Parent=gene2729 chrX ENCODE exon 152802330 152802395 . - . Parent=gene2729 chrX ENCODE exon 152802735 152802942 . - . Parent=gene2729 chrX ENCODE exon 152803247 152803292 . - . Parent=gene2729 ### chrX ENCODE gene 152798135 152803333 . - . ID=gene2730;name2=IRAK1;Name=U52112.3-008 chrX ENCODE exon 152798135 152798215 . - . Parent=gene2730 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2730 chrX ENCODE exon 152799341 152799731 . - . Parent=gene2730 chrX ENCODE exon 152800340 152800414 . - . Parent=gene2730 chrX ENCODE exon 152800452 152800576 . - . Parent=gene2730 chrX ENCODE exon 152802330 152802395 . - . Parent=gene2730 chrX ENCODE exon 152802735 152802942 . - . Parent=gene2730 chrX ENCODE exon 152803247 152803333 . - . Parent=gene2730 ### chrX ENCODE gene 152798157 152806110 . - . ID=gene2731;Name=U52112.3-020;name2=IRAK1 chrX ENCODE exon 152798157 152798215 . - . Parent=gene2731 chrX ENCODE CDS 152798157 152798215 . - 2 Parent=gene2731 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2731 chrX ENCODE CDS 152798827 152798976 . - 2 Parent=gene2731 chrX ENCODE exon 152799341 152799641 . - . Parent=gene2731 chrX ENCODE CDS 152799341 152799641 . - 0 Parent=gene2731 chrX ENCODE exon 152800340 152800576 . - . Parent=gene2731 chrX ENCODE CDS 152800340 152800576 . - 0 Parent=gene2731 chrX ENCODE exon 152802330 152802395 . - . Parent=gene2731 chrX ENCODE CDS 152802330 152802395 . - 0 Parent=gene2731 chrX ENCODE exon 152802735 152802942 . - . Parent=gene2731 chrX ENCODE CDS 152802735 152802942 . - 1 Parent=gene2731 chrX ENCODE exon 152803247 152803365 . - . Parent=gene2731 chrX ENCODE CDS 152803247 152803365 . - 0 Parent=gene2731 chrX ENCODE exon 152804304 152804418 . - . Parent=gene2731 chrX ENCODE CDS 152804304 152804418 . - 1 Parent=gene2731 chrX ENCODE exon 152804589 152804653 . - . Parent=gene2731 chrX ENCODE CDS 152804589 152804653 . - 0 Parent=gene2731 chrX ENCODE exon 152804897 152805085 . - . Parent=gene2731 chrX ENCODE CDS 152804897 152805085 . - 0 Parent=gene2731 chrX ENCODE exon 152805273 152805376 . - . Parent=gene2731 chrX ENCODE CDS 152805273 152805376 . - 2 Parent=gene2731 chrX ENCODE exon 152805495 152805626 . - . Parent=gene2731 chrX ENCODE CDS 152805495 152805626 . - 2 Parent=gene2731 chrX ENCODE exon 152805729 152806110 . - . Parent=gene2731 chrX ENCODE CDS 152805729 152806110 . - 0 Parent=gene2731 ### chrX ENCODE gene 152798157 152806110 . - . ID=gene2732;Name=U52112.3-002;name2=IRAK1 chrX ENCODE exon 152798157 152798215 . - . Parent=gene2732 chrX ENCODE CDS 152798157 152798215 . - 2 Parent=gene2732 chrX ENCODE exon 152798827 152798976 . - . Parent=gene2732 chrX ENCODE CDS 152798827 152798976 . - 2 Parent=gene2732 chrX ENCODE exon 152799341 152799641 . - . Parent=gene2732 chrX ENCODE CDS 152799341 152799641 . - 0 Parent=gene2732 chrX ENCODE exon 152800340 152800576 . - . Parent=gene2732 chrX ENCODE CDS 152800340 152800576 . - 0 Parent=gene2732 chrX ENCODE exon 152802330 152802395 . - . Parent=gene2732 chrX ENCODE CDS 152802330 152802395 . - 0 Parent=gene2732 chrX ENCODE exon 152802735 152802942 . - . Parent=gene2732 chrX ENCODE CDS 152802735 152802942 . - 1 Parent=gene2732 chrX ENCODE exon 152803247 152803365 . - . Parent=gene2732 chrX ENCODE CDS 152803247 152803365 . - 0 Parent=gene2732 chrX ENCODE exon 152804304 152804418 . - . Parent=gene2732 chrX ENCODE CDS 152804304 152804418 . - 1 Parent=gene2732 chrX ENCODE exon 152804589 152804653 . - . Parent=gene2732 chrX ENCODE CDS 152804589 152804653 . - 0 Parent=gene2732 chrX ENCODE exon 152804897 152805085 . - . Parent=gene2732 chrX ENCODE CDS 152804897 152805085 . - 0 Parent=gene2732 chrX ENCODE exon 152805273 152805376 . - . Parent=gene2732 chrX ENCODE CDS 152805273 152805376 . - 2 Parent=gene2732 chrX ENCODE exon 152805495 152805626 . - . Parent=gene2732 chrX ENCODE CDS 152805495 152805626 . - 2 Parent=gene2732 chrX ENCODE exon 152805729 152805896 . - . Parent=gene2732 chrX ENCODE CDS 152805729 152805896 . - 2 Parent=gene2732 chrX ENCODE exon 152805975 152806110 . - . Parent=gene2732 chrX ENCODE CDS 152805975 152806110 . - 0 Parent=gene2732 ### chrX ENCODE gene 152799341 152804936 . - . ID=gene2733;Name=U52112.3-005;name2=IRAK1 chrX ENCODE exon 152799341 152799731 . - . Parent=gene2733 chrX ENCODE CDS 152799341 152799731 . - 2 Parent=gene2733 chrX ENCODE exon 152800340 152800576 . - . Parent=gene2733 chrX ENCODE CDS 152800340 152800576 . - 2 Parent=gene2733 chrX ENCODE exon 152802735 152802942 . - . Parent=gene2733 chrX ENCODE CDS 152802735 152802942 . - 0 Parent=gene2733 chrX ENCODE exon 152803247 152803365 . - . Parent=gene2733 chrX ENCODE CDS 152803247 152803365 . - 2 Parent=gene2733 chrX ENCODE exon 152804304 152804418 . - . Parent=gene2733 chrX ENCODE CDS 152804304 152804418 . - 0 Parent=gene2733 chrX ENCODE exon 152804589 152804653 . - . Parent=gene2733 chrX ENCODE CDS 152804589 152804653 . - 2 Parent=gene2733 chrX ENCODE exon 152804897 152804936 . - . Parent=gene2733 chrX ENCODE CDS 152804897 152804936 . - 0 Parent=gene2733 ### chrX ENCODE gene 152799634 152800675 . - . ID=gene2734;Name=U52112.3-006;name2=IRAK1 chrX ENCODE exon 152799634 152799731 . - . Parent=gene2734 chrX ENCODE exon 152800340 152800675 . - . Parent=gene2734 ### chrX ENCODE gene 152804644 152805243 . - . ID=gene2735;Name=U52112.3-018;name2=IRAK1 chrX ENCODE exon 152804644 152804653 . - . Parent=gene2735 chrX ENCODE exon 152804897 152805243 . - . Parent=gene2735 ### chrX ENCODE gene 152807871 152884059 . - . ID=gene2736;Name=AF030876.1-001;name2=MECP2 chrX ENCODE exon 152807871 152817748 . - . Parent=gene2736 chrX ENCODE CDS 152816665 152817748 . - 1 Parent=gene2736 chrX ENCODE exon 152818505 152818855 . - . Parent=gene2736 chrX ENCODE CDS 152818505 152818855 . - 1 Parent=gene2736 chrX ENCODE CDS 152878489 152878514 . - 0 Parent=gene2736 chrX ENCODE exon 152878489 152878612 . - . Parent=gene2736 chrX ENCODE exon 152883908 152884059 . - . Parent=gene2736 ### chrX ENCODE gene 152816532 152884024 . - . ID=gene2737;Name=AF030876.1-002;name2=MECP2 chrX ENCODE exon 152816532 152817748 . - . Parent=gene2737 chrX ENCODE CDS 152816665 152817748 . - 1 Parent=gene2737 chrX ENCODE exon 152818505 152818855 . - . Parent=gene2737 chrX ENCODE CDS 152818505 152818855 . - 1 Parent=gene2737 chrX ENCODE CDS 152883908 152883969 . - 0 Parent=gene2737 chrX ENCODE exon 152883908 152884024 . - . Parent=gene2737 ### chrX ENCODE gene 152817311 152883995 . - . ID=gene2738;Name=AF030876.1-005;name2=MECP2 chrX ENCODE exon 152817311 152817584 . - . Parent=gene2738 chrX ENCODE exon 152817694 152817748 . - . Parent=gene2738 chrX ENCODE exon 152818505 152818855 . - . Parent=gene2738 chrX ENCODE exon 152878489 152878612 . - . Parent=gene2738 chrX ENCODE exon 152883908 152883995 . - . Parent=gene2738 ### chrX ENCODE gene 152817567 152844068 . - . ID=gene2739;Name=AF030876.1-004;name2=MECP2 chrX ENCODE exon 152817567 152817748 . - . Parent=gene2739 chrX ENCODE exon 152818505 152818855 . - . Parent=gene2739 chrX ENCODE exon 152843239 152843552 . - . Parent=gene2739 chrX ENCODE exon 152844041 152844068 . - . Parent=gene2739 ### chrX ENCODE gene 152817668 152883967 . - . ID=gene2740;Name=AF030876.1-003;name2=MECP2 chrX ENCODE exon 152817668 152817748 . - . Parent=gene2740 chrX ENCODE exon 152818505 152818855 . - . Parent=gene2740 chrX ENCODE exon 152844697 152844864 . - . Parent=gene2740 chrX ENCODE exon 152878489 152878612 . - . Parent=gene2740 chrX ENCODE exon 152883908 152883967 . - . Parent=gene2740 ### chrX ENCODE gene 152818671 152883283 . - . ID=gene2741;Name=AF030876.1-006;name2=MECP2 chrX ENCODE exon 152818671 152818855 . - . Parent=gene2741 chrX ENCODE exon 152883118 152883283 . - . Parent=gene2741 ### chrX ENCODE gene 152818671 152923425 . - . ID=gene2742;Name=AF030876.1-007;name2=MECP2 chrX ENCODE exon 152818671 152818855 . - . Parent=gene2742 chrX ENCODE exon 152891096 152891353 . - . Parent=gene2742 chrX ENCODE exon 152923379 152923425 . - . Parent=gene2742 ### chrX ENCODE gene 152818731 152874356 . - . ID=gene2743;Name=AF030876.1-009;name2=MECP2 chrX ENCODE exon 152818731 152818746 . - . Parent=gene2743 chrX ENCODE exon 152873964 152874356 . - . Parent=gene2743 ### chrX ENCODE gene 152818732 152820476 . - . ID=gene2744;Name=AF030876.1-014;name2=MECP2 chrX ENCODE exon 152818732 152820476 . - . Parent=gene2744 ### chrX ENCODE gene 152818732 152826401 . - . ID=gene2745;Name=AF030876.1-013;name2=MECP2 chrX ENCODE exon 152818732 152818855 . - . Parent=gene2745 chrX ENCODE exon 152826090 152826401 . - . Parent=gene2745 ### chrX ENCODE gene 152818732 152835779 . - . ID=gene2746;Name=AF030876.1-010;name2=MECP2 chrX ENCODE exon 152818732 152818855 . - . Parent=gene2746 chrX ENCODE exon 152826090 152826201 . - . Parent=gene2746 chrX ENCODE exon 152834815 152835779 . - . Parent=gene2746 ### chrX ENCODE gene 152818732 152835779 . - . ID=gene2747;Name=AF030876.1-012;name2=MECP2 chrX ENCODE exon 152818732 152818855 . - . Parent=gene2747 chrX ENCODE exon 152826090 152826201 . - . Parent=gene2747 chrX ENCODE exon 152834480 152834577 . - . Parent=gene2747 chrX ENCODE exon 152834815 152835779 . - . Parent=gene2747 ### chrX ENCODE gene 152818732 152835779 . - . ID=gene2748;Name=AF030876.1-011;name2=MECP2 chrX ENCODE exon 152818732 152818855 . - . Parent=gene2748 chrX ENCODE exon 152834815 152835779 . - . Parent=gene2748 ### chrX ENCODE gene 152818732 152883283 . - . ID=gene2749;Name=AF030876.1-008;name2=MECP2 chrX ENCODE exon 152818732 152818855 . - . Parent=gene2749 chrX ENCODE CDS 152818732 152818855 . - 1 Parent=gene2749 chrX ENCODE CDS 152878489 152878514 . - 0 Parent=gene2749 chrX ENCODE exon 152878489 152878612 . - . Parent=gene2749 chrX ENCODE exon 152883118 152883283 . - . Parent=gene2749 ### chrX ENCODE gene 152930592 152945354 . + . ID=gene2750;Name=Z68193.1-001;name2=OPN1LW chrX ENCODE exon 152930592 152930716 . + . Parent=gene2750 chrX ENCODE CDS 152930605 152930716 . + 0 Parent=gene2750 chrX ENCODE exon 152936975 152937271 . + . Parent=gene2750 chrX ENCODE CDS 152936975 152937271 . + 2 Parent=gene2750 chrX ENCODE exon 152939260 152939428 . + . Parent=gene2750 chrX ENCODE CDS 152939260 152939428 . + 2 Parent=gene2750 chrX ENCODE exon 152940896 152941061 . + . Parent=gene2750 chrX ENCODE CDS 152940896 152941061 . + 1 Parent=gene2750 chrX ENCODE exon 152942616 152942855 . + . Parent=gene2750 chrX ENCODE CDS 152942616 152942855 . + 0 Parent=gene2750 chrX ENCODE CDS 152945138 152945248 . + 0 Parent=gene2750 chrX ENCODE exon 152945138 152945354 . + . Parent=gene2750 ### chrX ENCODE gene 152939262 152945345 . + . ID=gene2751;Name=Z68193.1-002;name2=OPN1LW chrX ENCODE exon 152939262 152939428 . + . Parent=gene2751 chrX ENCODE CDS 152939262 152939428 . + 0 Parent=gene2751 chrX ENCODE exon 152940896 152941061 . + . Parent=gene2751 chrX ENCODE CDS 152940896 152941061 . + 1 Parent=gene2751 chrX ENCODE exon 152942616 152942666 . + . Parent=gene2751 chrX ENCODE CDS 152942616 152942666 . + 0 Parent=gene2751 chrX ENCODE CDS 152945138 152945248 . + 0 Parent=gene2751 chrX ENCODE exon 152945138 152945345 . + . Parent=gene2751 ### chrX ENCODE gene 152945529 152966481 . - . ID=gene2752;Name=Z68193.2-001;name2=CXorf2B chrX ENCODE exon 152945529 152946035 . - . Parent=gene2752 chrX ENCODE CDS 152945679 152946035 . - 0 Parent=gene2752 chrX ENCODE exon 152946655 152946790 . - . Parent=gene2752 chrX ENCODE CDS 152946655 152946790 . - 1 Parent=gene2752 chrX ENCODE exon 152961957 152962684 . - . Parent=gene2752 chrX ENCODE CDS 152961957 152962684 . - 0 Parent=gene2752 chrX ENCODE CDS 152966382 152966393 . - 0 Parent=gene2752 chrX ENCODE exon 152966382 152966481 . - . Parent=gene2752 ### chrX ENCODE gene 152969001 152982480 . + . ID=gene2753;Name=AC092402.1-001;name2=OPN1MW chrX ENCODE exon 152969001 152969125 . + . Parent=gene2753 chrX ENCODE CDS 152969014 152969125 . + 0 Parent=gene2753 chrX ENCODE exon 152974106 152974402 . + . Parent=gene2753 chrX ENCODE CDS 152974106 152974402 . + 2 Parent=gene2753 chrX ENCODE exon 152976390 152976558 . + . Parent=gene2753 chrX ENCODE CDS 152976390 152976558 . + 2 Parent=gene2753 chrX ENCODE exon 152978026 152978191 . + . Parent=gene2753 chrX ENCODE CDS 152978026 152978191 . + 1 Parent=gene2753 chrX ENCODE exon 152979746 152979985 . + . Parent=gene2753 chrX ENCODE CDS 152979746 152979985 . + 0 Parent=gene2753 chrX ENCODE CDS 152982268 152982378 . + 0 Parent=gene2753 chrX ENCODE exon 152982268 152982480 . + . Parent=gene2753 ### chrX ENCODE gene 152976394 152982475 . + . ID=gene2754;Name=AC092402.1-002;name2=OPN1MW chrX ENCODE exon 152976394 152976558 . + . Parent=gene2754 chrX ENCODE CDS 152976394 152976558 . + 0 Parent=gene2754 chrX ENCODE exon 152978026 152978191 . + . Parent=gene2754 chrX ENCODE CDS 152978026 152978191 . + 0 Parent=gene2754 chrX ENCODE exon 152979746 152979796 . + . Parent=gene2754 chrX ENCODE CDS 152979746 152979796 . + 2 Parent=gene2754 chrX ENCODE CDS 152982268 152982378 . + 2 Parent=gene2754 chrX ENCODE exon 152982268 152982475 . + . Parent=gene2754 ### chrX ENCODE gene 152982659 153003602 . - . ID=gene2755;name2=AC092402.4;Name=AC092402.4-001 chrX ENCODE exon 152982659 152983165 . - . Parent=gene2755 chrX ENCODE CDS 152982809 152983165 . - 0 Parent=gene2755 chrX ENCODE exon 152983785 152983920 . - . Parent=gene2755 chrX ENCODE CDS 152983785 152983920 . - 1 Parent=gene2755 chrX ENCODE exon 152999077 152999804 . - . Parent=gene2755 chrX ENCODE CDS 152999077 152999804 . - 0 Parent=gene2755 chrX ENCODE CDS 153003503 153003514 . - 0 Parent=gene2755 chrX ENCODE exon 153003503 153003602 . - . Parent=gene2755 ### chrX ENCODE gene 153006119 153019602 . + . ID=gene2756;Name=AC092402.5-001;name2=AC092402.5 chrX ENCODE exon 153006119 153006243 . + . Parent=gene2756 chrX ENCODE CDS 153006132 153006243 . + 0 Parent=gene2756 chrX ENCODE exon 153011224 153011520 . + . Parent=gene2756 chrX ENCODE CDS 153011224 153011520 . + 2 Parent=gene2756 chrX ENCODE exon 153013508 153013676 . + . Parent=gene2756 chrX ENCODE CDS 153013508 153013676 . + 2 Parent=gene2756 chrX ENCODE exon 153015144 153015309 . + . Parent=gene2756 chrX ENCODE CDS 153015144 153015309 . + 1 Parent=gene2756 chrX ENCODE exon 153016864 153017103 . + . Parent=gene2756 chrX ENCODE CDS 153016864 153017103 . + 0 Parent=gene2756 chrX ENCODE CDS 153019386 153019496 . + 0 Parent=gene2756 chrX ENCODE exon 153019386 153019602 . + . Parent=gene2756 ### chrX ENCODE gene 153013512 153019593 . + . ID=gene2757;Name=AC092402.5-002;name2=AC092402.5 chrX ENCODE exon 153013512 153013676 . + . Parent=gene2757 chrX ENCODE CDS 153013512 153013676 . + 0 Parent=gene2757 chrX ENCODE exon 153015144 153015309 . + . Parent=gene2757 chrX ENCODE CDS 153015144 153015309 . + 0 Parent=gene2757 chrX ENCODE exon 153016864 153016914 . + . Parent=gene2757 chrX ENCODE CDS 153016864 153016914 . + 2 Parent=gene2757 chrX ENCODE CDS 153019386 153019496 . + 2 Parent=gene2757 chrX ENCODE exon 153019386 153019593 . + . Parent=gene2757 ### chrX ENCODE gene 153019777 153044411 . - . ID=gene2758;Name=AC092402.6-001;name2=CXorf2 chrX ENCODE exon 153019777 153020283 . - . Parent=gene2758 chrX ENCODE CDS 153019927 153020283 . - 0 Parent=gene2758 chrX ENCODE exon 153020903 153021038 . - . Parent=gene2758 chrX ENCODE CDS 153020903 153021038 . - 1 Parent=gene2758 chrX ENCODE exon 153036882 153037609 . - . Parent=gene2758 chrX ENCODE CDS 153036882 153037609 . - 0 Parent=gene2758 chrX ENCODE CDS 153041306 153041317 . - 0 Parent=gene2758 chrX ENCODE exon 153041306 153041405 . - . Parent=gene2758 chrX ENCODE exon 153044334 153044411 . - . Parent=gene2758 ### chrX ENCODE gene 153019779 153044285 . - . ID=gene2759;Name=AC092402.6-002;name2=CXorf2 chrX ENCODE exon 153019779 153020283 . - . Parent=gene2759 chrX ENCODE CDS 153019927 153020283 . - 0 Parent=gene2759 chrX ENCODE exon 153020903 153021038 . - . Parent=gene2759 chrX ENCODE CDS 153020903 153021038 . - 1 Parent=gene2759 chrX ENCODE exon 153036882 153037609 . - . Parent=gene2759 chrX ENCODE CDS 153036882 153037609 . - 0 Parent=gene2759 chrX ENCODE CDS 153041306 153041317 . - 0 Parent=gene2759 chrX ENCODE exon 153041306 153041405 . - . Parent=gene2759 chrX ENCODE exon 153044230 153044285 . - . Parent=gene2759 ### chrX ENCODE gene 153037338 153044643 . - . ID=gene2760;name2=CXorf2;Name=AC092402.6-003 chrX ENCODE exon 153037338 153037609 . - . Parent=gene2760 chrX ENCODE CDS 153037338 153037609 . - 0 Parent=gene2760 chrX ENCODE CDS 153038933 153038953 . - 0 Parent=gene2760 chrX ENCODE exon 153038933 153039022 . - . Parent=gene2760 chrX ENCODE exon 153041306 153041405 . - . Parent=gene2760 chrX ENCODE exon 153044584 153044643 . - . Parent=gene2760 ### chrX ENCODE gene 153044871 153079547 . + . ID=gene2761;name2=TKTL1;Name=LL0XNC01-14B7.1-002 chrX ENCODE exon 153044871 153045193 . + . Parent=gene2761 chrX ENCODE CDS 153045060 153045193 . + 0 Parent=gene2761 chrX ENCODE exon 153054503 153054620 . + . Parent=gene2761 chrX ENCODE CDS 153054503 153054620 . + 1 Parent=gene2761 chrX ENCODE exon 153058544 153058641 . + . Parent=gene2761 chrX ENCODE CDS 153058544 153058641 . + 0 Parent=gene2761 chrX ENCODE exon 153060034 153060225 . + . Parent=gene2761 chrX ENCODE CDS 153060034 153060225 . + 1 Parent=gene2761 chrX ENCODE exon 153060309 153060436 . + . Parent=gene2761 chrX ENCODE CDS 153060309 153060436 . + 1 Parent=gene2761 chrX ENCODE exon 153061778 153061971 . + . Parent=gene2761 chrX ENCODE CDS 153061778 153061971 . + 2 Parent=gene2761 chrX ENCODE exon 153064370 153064534 . + . Parent=gene2761 chrX ENCODE CDS 153064370 153064534 . + 0 Parent=gene2761 chrX ENCODE exon 153069951 153070107 . + . Parent=gene2761 chrX ENCODE CDS 153069951 153070107 . + 0 Parent=gene2761 chrX ENCODE exon 153072400 153072530 . + . Parent=gene2761 chrX ENCODE CDS 153072400 153072530 . + 2 Parent=gene2761 chrX ENCODE exon 153074532 153074615 . + . Parent=gene2761 chrX ENCODE CDS 153074532 153074615 . + 0 Parent=gene2761 chrX ENCODE exon 153076784 153076880 . + . Parent=gene2761 chrX ENCODE CDS 153076784 153076880 . + 0 Parent=gene2761 chrX ENCODE exon 153077032 153077151 . + . Parent=gene2761 chrX ENCODE CDS 153077032 153077151 . + 2 Parent=gene2761 chrX ENCODE CDS 153078713 153078885 . + 2 Parent=gene2761 chrX ENCODE exon 153078713 153079547 . + . Parent=gene2761 ### chrX ENCODE gene 153054122 153060358 . + . ID=gene2762;Name=LL0XNC01-14B7.1-005;name2=TKTL1 chrX ENCODE exon 153054122 153054285 . + . Parent=gene2762 chrX ENCODE CDS 153054152 153054285 . + 0 Parent=gene2762 chrX ENCODE exon 153054503 153054620 . + . Parent=gene2762 chrX ENCODE CDS 153054503 153054620 . + 1 Parent=gene2762 chrX ENCODE exon 153058544 153058641 . + . Parent=gene2762 chrX ENCODE CDS 153058544 153058641 . + 0 Parent=gene2762 chrX ENCODE exon 153060034 153060225 . + . Parent=gene2762 chrX ENCODE CDS 153060034 153060225 . + 1 Parent=gene2762 chrX ENCODE exon 153060309 153060358 . + . Parent=gene2762 chrX ENCODE CDS 153060309 153060358 . + 1 Parent=gene2762 ### chrX ENCODE gene 153054243 153060344 . + . ID=gene2763;Name=LL0XNC01-14B7.1-006;name2=TKTL1 chrX ENCODE exon 153054243 153054323 . + . Parent=gene2763 chrX ENCODE CDS 153054243 153054323 . + 0 Parent=gene2763 chrX ENCODE exon 153054503 153054620 . + . Parent=gene2763 chrX ENCODE CDS 153054503 153054620 . + 0 Parent=gene2763 chrX ENCODE exon 153058544 153058641 . + . Parent=gene2763 chrX ENCODE CDS 153058544 153058641 . + 2 Parent=gene2763 chrX ENCODE exon 153060034 153060225 . + . Parent=gene2763 chrX ENCODE CDS 153060034 153060225 . + 0 Parent=gene2763 chrX ENCODE exon 153060309 153060344 . + . Parent=gene2763 chrX ENCODE CDS 153060309 153060344 . + 0 Parent=gene2763 ### chrX ENCODE gene 153054256 153079547 . + . ID=gene2764;Name=LL0XNC01-14B7.1-001;name2=TKTL1 chrX ENCODE exon 153054256 153054620 . + . Parent=gene2764 chrX ENCODE CDS 153054537 153054620 . + 0 Parent=gene2764 chrX ENCODE exon 153058544 153058641 . + . Parent=gene2764 chrX ENCODE CDS 153058544 153058641 . + 0 Parent=gene2764 chrX ENCODE exon 153060034 153060225 . + . Parent=gene2764 chrX ENCODE CDS 153060034 153060225 . + 1 Parent=gene2764 chrX ENCODE exon 153060309 153060436 . + . Parent=gene2764 chrX ENCODE CDS 153060309 153060436 . + 1 Parent=gene2764 chrX ENCODE exon 153061778 153061971 . + . Parent=gene2764 chrX ENCODE CDS 153061778 153061971 . + 2 Parent=gene2764 chrX ENCODE exon 153064370 153064534 . + . Parent=gene2764 chrX ENCODE CDS 153064370 153064534 . + 0 Parent=gene2764 chrX ENCODE exon 153069951 153070107 . + . Parent=gene2764 chrX ENCODE CDS 153069951 153070107 . + 0 Parent=gene2764 chrX ENCODE exon 153072400 153072530 . + . Parent=gene2764 chrX ENCODE CDS 153072400 153072530 . + 2 Parent=gene2764 chrX ENCODE exon 153074532 153074615 . + . Parent=gene2764 chrX ENCODE CDS 153074532 153074615 . + 0 Parent=gene2764 chrX ENCODE exon 153076784 153076880 . + . Parent=gene2764 chrX ENCODE CDS 153076784 153076880 . + 0 Parent=gene2764 chrX ENCODE exon 153077032 153077151 . + . Parent=gene2764 chrX ENCODE CDS 153077032 153077151 . + 2 Parent=gene2764 chrX ENCODE CDS 153078713 153078885 . + 2 Parent=gene2764 chrX ENCODE exon 153078713 153079547 . + . Parent=gene2764 ### chrX ENCODE gene 153069498 153074578 . + . ID=gene2765;Name=LL0XNC01-14B7.1-007;name2=TKTL1 chrX ENCODE exon 153069498 153069717 . + . Parent=gene2765 chrX ENCODE exon 153069951 153070107 . + . Parent=gene2765 chrX ENCODE exon 153072400 153072530 . + . Parent=gene2765 chrX ENCODE exon 153074532 153074578 . + . Parent=gene2765 ### chrX ENCODE gene 153076377 153077092 . + . ID=gene2766;Name=LL0XNC01-14B7.1-004;name2=TKTL1 chrX ENCODE exon 153076377 153076880 . + . Parent=gene2766 chrX ENCODE exon 153077032 153077092 . + . Parent=gene2766 ### chrX ENCODE gene 153076569 153078885 . + . ID=gene2767;Name=LL0XNC01-14B7.1-003;name2=TKTL1 chrX ENCODE exon 153076569 153076619 . + . Parent=gene2767 chrX ENCODE CDS 153076569 153076619 . + 0 Parent=gene2767 chrX ENCODE exon 153076784 153076880 . + . Parent=gene2767 chrX ENCODE CDS 153076784 153076880 . + 0 Parent=gene2767 chrX ENCODE exon 153077032 153077151 . + . Parent=gene2767 chrX ENCODE CDS 153077032 153077151 . + 2 Parent=gene2767 chrX ENCODE exon 153078713 153078885 . + . Parent=gene2767 chrX ENCODE CDS 153078713 153078885 . + 2 Parent=gene2767 ### chrX ENCODE gene 153097741 153120498 . - . ID=gene2768;Name=XX-FW83128A1.1-001;name2=FLNA chrX ENCODE exon 153097741 153098251 . - . Parent=gene2768 chrX ENCODE CDS 153098064 153098251 . - 2 Parent=gene2768 chrX ENCODE exon 153098577 153098780 . - . Parent=gene2768 chrX ENCODE CDS 153098577 153098780 . - 2 Parent=gene2768 chrX ENCODE exon 153098864 153099082 . - . Parent=gene2768 chrX ENCODE CDS 153098864 153099082 . - 2 Parent=gene2768 chrX ENCODE exon 153099246 153099422 . - . Parent=gene2768 chrX ENCODE CDS 153099246 153099422 . - 2 Parent=gene2768 chrX ENCODE exon 153100124 153100256 . - . Parent=gene2768 chrX ENCODE CDS 153100124 153100256 . - 0 Parent=gene2768 chrX ENCODE exon 153100796 153100911 . - . Parent=gene2768 chrX ENCODE CDS 153100796 153100911 . - 2 Parent=gene2768 chrX ENCODE exon 153101099 153101236 . - . Parent=gene2768 chrX ENCODE CDS 153101099 153101236 . - 2 Parent=gene2768 chrX ENCODE exon 153101396 153101662 . - . Parent=gene2768 chrX ENCODE CDS 153101396 153101662 . - 2 Parent=gene2768 chrX ENCODE exon 153101768 153101890 . - . Parent=gene2768 chrX ENCODE CDS 153101768 153101890 . - 2 Parent=gene2768 chrX ENCODE exon 153101987 153102139 . - . Parent=gene2768 chrX ENCODE CDS 153101987 153102139 . - 2 Parent=gene2768 chrX ENCODE exon 153102216 153102419 . - . Parent=gene2768 chrX ENCODE CDS 153102216 153102419 . - 2 Parent=gene2768 chrX ENCODE exon 153102511 153102672 . - . Parent=gene2768 chrX ENCODE CDS 153102511 153102672 . - 2 Parent=gene2768 chrX ENCODE exon 153102769 153102942 . - . Parent=gene2768 chrX ENCODE CDS 153102769 153102942 . - 2 Parent=gene2768 chrX ENCODE exon 153103130 153103258 . - . Parent=gene2768 chrX ENCODE CDS 153103130 153103258 . - 2 Parent=gene2768 chrX ENCODE exon 153103366 153103506 . - . Parent=gene2768 chrX ENCODE CDS 153103366 153103506 . - 2 Parent=gene2768 chrX ENCODE exon 153103596 153103698 . - . Parent=gene2768 chrX ENCODE CDS 153103596 153103698 . - 0 Parent=gene2768 chrX ENCODE exon 153103831 153103926 . - . Parent=gene2768 chrX ENCODE CDS 153103831 153103926 . - 0 Parent=gene2768 chrX ENCODE exon 153104040 153104287 . - . Parent=gene2768 chrX ENCODE CDS 153104040 153104287 . - 2 Parent=gene2768 chrX ENCODE exon 153106649 153106838 . - . Parent=gene2768 chrX ENCODE CDS 153106649 153106838 . - 0 Parent=gene2768 chrX ENCODE exon 153107414 153107570 . - . Parent=gene2768 chrX ENCODE CDS 153107414 153107570 . - 1 Parent=gene2768 chrX ENCODE exon 153107660 153107783 . - . Parent=gene2768 chrX ENCODE CDS 153107660 153107783 . - 2 Parent=gene2768 chrX ENCODE exon 153108199 153108369 . - . Parent=gene2768 chrX ENCODE CDS 153108199 153108369 . - 2 Parent=gene2768 chrX ENCODE exon 153108461 153108621 . - . Parent=gene2768 chrX ENCODE CDS 153108461 153108621 . - 1 Parent=gene2768 chrX ENCODE exon 153108699 153108861 . - . Parent=gene2768 chrX ENCODE CDS 153108699 153108861 . - 2 Parent=gene2768 chrX ENCODE exon 153108947 153109120 . - . Parent=gene2768 chrX ENCODE CDS 153108947 153109120 . - 2 Parent=gene2768 chrX ENCODE exon 153109205 153109802 . - . Parent=gene2768 chrX ENCODE CDS 153109205 153109802 . - 0 Parent=gene2768 chrX ENCODE exon 153110523 153110785 . - . Parent=gene2768 chrX ENCODE CDS 153110523 153110785 . - 2 Parent=gene2768 chrX ENCODE exon 153110885 153111002 . - . Parent=gene2768 chrX ENCODE CDS 153110885 153111002 . - 0 Parent=gene2768 chrX ENCODE exon 153111194 153111363 . - . Parent=gene2768 chrX ENCODE CDS 153111194 153111363 . - 2 Parent=gene2768 chrX ENCODE exon 153111457 153111547 . - . Parent=gene2768 chrX ENCODE CDS 153111457 153111547 . - 0 Parent=gene2768 chrX ENCODE exon 153111633 153111793 . - . Parent=gene2768 chrX ENCODE CDS 153111633 153111793 . - 2 Parent=gene2768 chrX ENCODE exon 153111876 153111999 . - . Parent=gene2768 chrX ENCODE CDS 153111876 153111999 . - 0 Parent=gene2768 chrX ENCODE exon 153113237 153113380 . - . Parent=gene2768 chrX ENCODE CDS 153113237 153113380 . - 0 Parent=gene2768 chrX ENCODE exon 153113474 153113587 . - . Parent=gene2768 chrX ENCODE CDS 153113474 153113587 . - 0 Parent=gene2768 chrX ENCODE exon 153113741 153113934 . - . Parent=gene2768 chrX ENCODE CDS 153113741 153113934 . - 2 Parent=gene2768 chrX ENCODE exon 153114036 153114172 . - . Parent=gene2768 chrX ENCODE CDS 153114036 153114172 . - 1 Parent=gene2768 chrX ENCODE exon 153114351 153114474 . - . Parent=gene2768 chrX ENCODE CDS 153114351 153114474 . - 2 Parent=gene2768 chrX ENCODE exon 153114564 153114701 . - . Parent=gene2768 chrX ENCODE CDS 153114564 153114701 . - 2 Parent=gene2768 chrX ENCODE exon 153115239 153115439 . - . Parent=gene2768 chrX ENCODE CDS 153115239 153115439 . - 2 Parent=gene2768 chrX ENCODE exon 153115523 153115685 . - . Parent=gene2768 chrX ENCODE CDS 153115523 153115685 . - 0 Parent=gene2768 chrX ENCODE exon 153115777 153115854 . - . Parent=gene2768 chrX ENCODE CDS 153115777 153115854 . - 0 Parent=gene2768 chrX ENCODE exon 153115947 153116065 . - . Parent=gene2768 chrX ENCODE CDS 153115947 153116065 . - 2 Parent=gene2768 chrX ENCODE exon 153116612 153116759 . - . Parent=gene2768 chrX ENCODE CDS 153116612 153116759 . - 0 Parent=gene2768 chrX ENCODE exon 153116856 153116953 . - . Parent=gene2768 chrX ENCODE CDS 153116856 153116953 . - 2 Parent=gene2768 chrX ENCODE exon 153117057 153117305 . - . Parent=gene2768 chrX ENCODE CDS 153117057 153117305 . - 2 Parent=gene2768 chrX ENCODE CDS 153120088 153120460 . - 0 Parent=gene2768 chrX ENCODE exon 153120088 153120498 . - . Parent=gene2768 ### chrX ENCODE gene 153097745 153102098 . - . ID=gene2769;Name=XX-FW83128A1.1-017;name2=FLNA chrX ENCODE exon 153097745 153098045 . - . Parent=gene2769 chrX ENCODE exon 153102032 153102098 . - . Parent=gene2769 ### chrX ENCODE gene 153097746 153102005 . - . ID=gene2770;Name=XX-FW83128A1.1-018;name2=FLNA chrX ENCODE exon 153097746 153097944 . - . Parent=gene2770 chrX ENCODE exon 153101557 153101662 . - . Parent=gene2770 chrX ENCODE exon 153101768 153101890 . - . Parent=gene2770 chrX ENCODE exon 153101987 153102005 . - . Parent=gene2770 ### chrX ENCODE gene 153097863 153108542 . - . ID=gene2771;name2=FLNA;Name=XX-FW83128A1.1-004 chrX ENCODE exon 153097863 153098251 . - . Parent=gene2771 chrX ENCODE exon 153098577 153098780 . - . Parent=gene2771 chrX ENCODE exon 153098864 153099082 . - . Parent=gene2771 chrX ENCODE exon 153099246 153099422 . - . Parent=gene2771 chrX ENCODE exon 153100124 153100911 . - . Parent=gene2771 chrX ENCODE exon 153101099 153101236 . - . Parent=gene2771 chrX ENCODE exon 153101396 153101662 . - . Parent=gene2771 chrX ENCODE exon 153101768 153101890 . - . Parent=gene2771 chrX ENCODE exon 153101987 153102139 . - . Parent=gene2771 chrX ENCODE exon 153102216 153102419 . - . Parent=gene2771 chrX ENCODE exon 153102511 153102672 . - . Parent=gene2771 chrX ENCODE exon 153102769 153102942 . - . Parent=gene2771 chrX ENCODE exon 153103130 153103258 . - . Parent=gene2771 chrX ENCODE exon 153103366 153103506 . - . Parent=gene2771 chrX ENCODE exon 153103596 153103698 . - . Parent=gene2771 chrX ENCODE exon 153103831 153103926 . - . Parent=gene2771 chrX ENCODE exon 153104040 153104287 . - . Parent=gene2771 chrX ENCODE exon 153106649 153106660 . - . Parent=gene2771 chrX ENCODE exon 153108316 153108369 . - . Parent=gene2771 chrX ENCODE exon 153108461 153108542 . - . Parent=gene2771 ### chrX ENCODE gene 153097863 153108853 . - . ID=gene2772;Name=XX-FW83128A1.1-003;name2=FLNA chrX ENCODE exon 153097863 153098251 . - . Parent=gene2772 chrX ENCODE exon 153098577 153098780 . - . Parent=gene2772 chrX ENCODE exon 153098864 153099082 . - . Parent=gene2772 chrX ENCODE exon 153099246 153100911 . - . Parent=gene2772 chrX ENCODE exon 153101099 153101236 . - . Parent=gene2772 chrX ENCODE exon 153101396 153101662 . - . Parent=gene2772 chrX ENCODE exon 153101768 153101890 . - . Parent=gene2772 chrX ENCODE exon 153101987 153102139 . - . Parent=gene2772 chrX ENCODE exon 153102216 153102419 . - . Parent=gene2772 chrX ENCODE exon 153102511 153102672 . - . Parent=gene2772 chrX ENCODE exon 153102769 153102942 . - . Parent=gene2772 chrX ENCODE exon 153103130 153103258 . - . Parent=gene2772 chrX ENCODE exon 153103366 153103506 . - . Parent=gene2772 chrX ENCODE exon 153103596 153103698 . - . Parent=gene2772 chrX ENCODE exon 153103831 153103926 . - . Parent=gene2772 chrX ENCODE exon 153104040 153104287 . - . Parent=gene2772 chrX ENCODE exon 153106649 153106838 . - . Parent=gene2772 chrX ENCODE exon 153107414 153107570 . - . Parent=gene2772 chrX ENCODE exon 153107660 153107783 . - . Parent=gene2772 chrX ENCODE exon 153108199 153108369 . - . Parent=gene2772 chrX ENCODE exon 153108461 153108621 . - . Parent=gene2772 chrX ENCODE exon 153108699 153108853 . - . Parent=gene2772 ### chrX ENCODE gene 153097863 153123841 . - . ID=gene2773;Name=XX-FW83128A1.1-002;name2=FLNA chrX ENCODE exon 153097863 153098251 . - . Parent=gene2773 chrX ENCODE CDS 153098064 153098251 . - 2 Parent=gene2773 chrX ENCODE exon 153098577 153098780 . - . Parent=gene2773 chrX ENCODE CDS 153098577 153098780 . - 2 Parent=gene2773 chrX ENCODE exon 153098864 153099082 . - . Parent=gene2773 chrX ENCODE CDS 153098864 153099082 . - 2 Parent=gene2773 chrX ENCODE exon 153099246 153099422 . - . Parent=gene2773 chrX ENCODE CDS 153099246 153099422 . - 2 Parent=gene2773 chrX ENCODE exon 153100124 153100256 . - . Parent=gene2773 chrX ENCODE CDS 153100124 153100256 . - 0 Parent=gene2773 chrX ENCODE exon 153100796 153100911 . - . Parent=gene2773 chrX ENCODE CDS 153100796 153100911 . - 2 Parent=gene2773 chrX ENCODE exon 153101099 153101236 . - . Parent=gene2773 chrX ENCODE CDS 153101099 153101236 . - 2 Parent=gene2773 chrX ENCODE exon 153101396 153101662 . - . Parent=gene2773 chrX ENCODE CDS 153101396 153101662 . - 2 Parent=gene2773 chrX ENCODE exon 153101768 153101890 . - . Parent=gene2773 chrX ENCODE CDS 153101768 153101890 . - 2 Parent=gene2773 chrX ENCODE exon 153101987 153102139 . - . Parent=gene2773 chrX ENCODE CDS 153101987 153102139 . - 2 Parent=gene2773 chrX ENCODE exon 153102216 153102419 . - . Parent=gene2773 chrX ENCODE CDS 153102216 153102419 . - 2 Parent=gene2773 chrX ENCODE exon 153102511 153102672 . - . Parent=gene2773 chrX ENCODE CDS 153102511 153102672 . - 2 Parent=gene2773 chrX ENCODE exon 153102769 153102942 . - . Parent=gene2773 chrX ENCODE CDS 153102769 153102942 . - 2 Parent=gene2773 chrX ENCODE exon 153103130 153103258 . - . Parent=gene2773 chrX ENCODE CDS 153103130 153103258 . - 2 Parent=gene2773 chrX ENCODE exon 153103366 153103506 . - . Parent=gene2773 chrX ENCODE CDS 153103366 153103506 . - 2 Parent=gene2773 chrX ENCODE exon 153103596 153103698 . - . Parent=gene2773 chrX ENCODE CDS 153103596 153103698 . - 0 Parent=gene2773 chrX ENCODE exon 153103831 153103926 . - . Parent=gene2773 chrX ENCODE CDS 153103831 153103926 . - 0 Parent=gene2773 chrX ENCODE exon 153104040 153104287 . - . Parent=gene2773 chrX ENCODE CDS 153104040 153104287 . - 2 Parent=gene2773 chrX ENCODE exon 153106466 153106489 . - . Parent=gene2773 chrX ENCODE CDS 153106466 153106489 . - 2 Parent=gene2773 chrX ENCODE exon 153106649 153106838 . - . Parent=gene2773 chrX ENCODE CDS 153106649 153106838 . - 0 Parent=gene2773 chrX ENCODE exon 153107414 153107570 . - . Parent=gene2773 chrX ENCODE CDS 153107414 153107570 . - 1 Parent=gene2773 chrX ENCODE exon 153107660 153107783 . - . Parent=gene2773 chrX ENCODE CDS 153107660 153107783 . - 2 Parent=gene2773 chrX ENCODE exon 153108199 153108369 . - . Parent=gene2773 chrX ENCODE CDS 153108199 153108369 . - 2 Parent=gene2773 chrX ENCODE exon 153108461 153108621 . - . Parent=gene2773 chrX ENCODE CDS 153108461 153108621 . - 1 Parent=gene2773 chrX ENCODE exon 153108699 153108861 . - . Parent=gene2773 chrX ENCODE CDS 153108699 153108861 . - 2 Parent=gene2773 chrX ENCODE exon 153108947 153109120 . - . Parent=gene2773 chrX ENCODE CDS 153108947 153109120 . - 2 Parent=gene2773 chrX ENCODE exon 153109205 153109802 . - . Parent=gene2773 chrX ENCODE CDS 153109205 153109802 . - 0 Parent=gene2773 chrX ENCODE exon 153110523 153110785 . - . Parent=gene2773 chrX ENCODE CDS 153110523 153110785 . - 2 Parent=gene2773 chrX ENCODE exon 153110885 153111002 . - . Parent=gene2773 chrX ENCODE CDS 153110885 153111002 . - 0 Parent=gene2773 chrX ENCODE exon 153111194 153111363 . - . Parent=gene2773 chrX ENCODE CDS 153111194 153111363 . - 2 Parent=gene2773 chrX ENCODE exon 153111457 153111547 . - . Parent=gene2773 chrX ENCODE CDS 153111457 153111547 . - 0 Parent=gene2773 chrX ENCODE exon 153111633 153111793 . - . Parent=gene2773 chrX ENCODE CDS 153111633 153111793 . - 2 Parent=gene2773 chrX ENCODE exon 153111876 153111999 . - . Parent=gene2773 chrX ENCODE CDS 153111876 153111999 . - 0 Parent=gene2773 chrX ENCODE exon 153113237 153113380 . - . Parent=gene2773 chrX ENCODE CDS 153113237 153113380 . - 0 Parent=gene2773 chrX ENCODE exon 153113474 153113587 . - . Parent=gene2773 chrX ENCODE CDS 153113474 153113587 . - 0 Parent=gene2773 chrX ENCODE exon 153113741 153113934 . - . Parent=gene2773 chrX ENCODE CDS 153113741 153113934 . - 2 Parent=gene2773 chrX ENCODE exon 153114036 153114172 . - . Parent=gene2773 chrX ENCODE CDS 153114036 153114172 . - 1 Parent=gene2773 chrX ENCODE exon 153114351 153114474 . - . Parent=gene2773 chrX ENCODE CDS 153114351 153114474 . - 2 Parent=gene2773 chrX ENCODE exon 153114564 153114701 . - . Parent=gene2773 chrX ENCODE CDS 153114564 153114701 . - 2 Parent=gene2773 chrX ENCODE exon 153115239 153115439 . - . Parent=gene2773 chrX ENCODE CDS 153115239 153115439 . - 2 Parent=gene2773 chrX ENCODE exon 153115523 153115685 . - . Parent=gene2773 chrX ENCODE CDS 153115523 153115685 . - 0 Parent=gene2773 chrX ENCODE exon 153115777 153115854 . - . Parent=gene2773 chrX ENCODE CDS 153115777 153115854 . - 0 Parent=gene2773 chrX ENCODE exon 153115947 153116065 . - . Parent=gene2773 chrX ENCODE CDS 153115947 153116065 . - 2 Parent=gene2773 chrX ENCODE exon 153116612 153116759 . - . Parent=gene2773 chrX ENCODE CDS 153116612 153116759 . - 0 Parent=gene2773 chrX ENCODE exon 153116856 153116953 . - . Parent=gene2773 chrX ENCODE CDS 153116856 153116953 . - 2 Parent=gene2773 chrX ENCODE exon 153117057 153117305 . - . Parent=gene2773 chrX ENCODE CDS 153117057 153117305 . - 2 Parent=gene2773 chrX ENCODE CDS 153120088 153120460 . - 0 Parent=gene2773 chrX ENCODE exon 153120088 153120576 . - . Parent=gene2773 chrX ENCODE exon 153123721 153123841 . - . Parent=gene2773 ### chrX ENCODE gene 153097999 153120503 . - . ID=gene2774;name2=FLNA;Name=XX-FW83128A1.1-010 chrX ENCODE exon 153097999 153098251 . - . Parent=gene2774 chrX ENCODE CDS 153098064 153098251 . - 2 Parent=gene2774 chrX ENCODE exon 153098577 153098780 . - . Parent=gene2774 chrX ENCODE CDS 153098577 153098780 . - 2 Parent=gene2774 chrX ENCODE exon 153098864 153099082 . - . Parent=gene2774 chrX ENCODE CDS 153098864 153099082 . - 2 Parent=gene2774 chrX ENCODE exon 153099246 153099422 . - . Parent=gene2774 chrX ENCODE CDS 153099246 153099422 . - 2 Parent=gene2774 chrX ENCODE exon 153100124 153100256 . - . Parent=gene2774 chrX ENCODE CDS 153100124 153100256 . - 0 Parent=gene2774 chrX ENCODE exon 153100796 153100911 . - . Parent=gene2774 chrX ENCODE CDS 153100796 153100911 . - 2 Parent=gene2774 chrX ENCODE exon 153101099 153101236 . - . Parent=gene2774 chrX ENCODE CDS 153101099 153101236 . - 2 Parent=gene2774 chrX ENCODE exon 153101396 153101662 . - . Parent=gene2774 chrX ENCODE CDS 153101396 153101662 . - 2 Parent=gene2774 chrX ENCODE exon 153101768 153101890 . - . Parent=gene2774 chrX ENCODE CDS 153101768 153101890 . - 2 Parent=gene2774 chrX ENCODE exon 153101987 153102139 . - . Parent=gene2774 chrX ENCODE CDS 153101987 153102139 . - 2 Parent=gene2774 chrX ENCODE exon 153102216 153102419 . - . Parent=gene2774 chrX ENCODE CDS 153102216 153102419 . - 2 Parent=gene2774 chrX ENCODE exon 153102511 153102672 . - . Parent=gene2774 chrX ENCODE CDS 153102511 153102672 . - 2 Parent=gene2774 chrX ENCODE exon 153102769 153102942 . - . Parent=gene2774 chrX ENCODE CDS 153102769 153102942 . - 2 Parent=gene2774 chrX ENCODE exon 153103130 153103258 . - . Parent=gene2774 chrX ENCODE CDS 153103130 153103258 . - 2 Parent=gene2774 chrX ENCODE exon 153103366 153103506 . - . Parent=gene2774 chrX ENCODE CDS 153103366 153103506 . - 2 Parent=gene2774 chrX ENCODE exon 153103596 153103698 . - . Parent=gene2774 chrX ENCODE CDS 153103596 153103698 . - 0 Parent=gene2774 chrX ENCODE exon 153104040 153104287 . - . Parent=gene2774 chrX ENCODE CDS 153104040 153104287 . - 2 Parent=gene2774 chrX ENCODE exon 153106649 153106838 . - . Parent=gene2774 chrX ENCODE CDS 153106649 153106838 . - 0 Parent=gene2774 chrX ENCODE exon 153107414 153107570 . - . Parent=gene2774 chrX ENCODE CDS 153107414 153107570 . - 1 Parent=gene2774 chrX ENCODE exon 153107660 153107783 . - . Parent=gene2774 chrX ENCODE CDS 153107660 153107783 . - 2 Parent=gene2774 chrX ENCODE exon 153108199 153108369 . - . Parent=gene2774 chrX ENCODE CDS 153108199 153108369 . - 2 Parent=gene2774 chrX ENCODE exon 153108461 153108621 . - . Parent=gene2774 chrX ENCODE CDS 153108461 153108621 . - 1 Parent=gene2774 chrX ENCODE exon 153108699 153108861 . - . Parent=gene2774 chrX ENCODE CDS 153108699 153108861 . - 2 Parent=gene2774 chrX ENCODE exon 153108947 153109120 . - . Parent=gene2774 chrX ENCODE CDS 153108947 153109120 . - 2 Parent=gene2774 chrX ENCODE exon 153109205 153109802 . - . Parent=gene2774 chrX ENCODE CDS 153109205 153109802 . - 0 Parent=gene2774 chrX ENCODE exon 153110523 153110785 . - . Parent=gene2774 chrX ENCODE CDS 153110523 153110785 . - 2 Parent=gene2774 chrX ENCODE exon 153110885 153111002 . - . Parent=gene2774 chrX ENCODE CDS 153110885 153111002 . - 0 Parent=gene2774 chrX ENCODE exon 153111194 153111363 . - . Parent=gene2774 chrX ENCODE CDS 153111194 153111363 . - 2 Parent=gene2774 chrX ENCODE exon 153111457 153111547 . - . Parent=gene2774 chrX ENCODE CDS 153111457 153111547 . - 0 Parent=gene2774 chrX ENCODE exon 153111633 153111793 . - . Parent=gene2774 chrX ENCODE CDS 153111633 153111793 . - 2 Parent=gene2774 chrX ENCODE exon 153111876 153111999 . - . Parent=gene2774 chrX ENCODE CDS 153111876 153111999 . - 0 Parent=gene2774 chrX ENCODE exon 153113237 153113380 . - . Parent=gene2774 chrX ENCODE CDS 153113237 153113380 . - 0 Parent=gene2774 chrX ENCODE exon 153113474 153113587 . - . Parent=gene2774 chrX ENCODE CDS 153113474 153113587 . - 0 Parent=gene2774 chrX ENCODE exon 153113741 153113934 . - . Parent=gene2774 chrX ENCODE CDS 153113741 153113934 . - 2 Parent=gene2774 chrX ENCODE exon 153114036 153114172 . - . Parent=gene2774 chrX ENCODE CDS 153114036 153114172 . - 1 Parent=gene2774 chrX ENCODE exon 153114351 153114474 . - . Parent=gene2774 chrX ENCODE CDS 153114351 153114474 . - 2 Parent=gene2774 chrX ENCODE exon 153114564 153114701 . - . Parent=gene2774 chrX ENCODE CDS 153114564 153114701 . - 2 Parent=gene2774 chrX ENCODE exon 153115239 153115439 . - . Parent=gene2774 chrX ENCODE CDS 153115239 153115439 . - 2 Parent=gene2774 chrX ENCODE exon 153115523 153115685 . - . Parent=gene2774 chrX ENCODE CDS 153115523 153115685 . - 0 Parent=gene2774 chrX ENCODE exon 153115777 153115854 . - . Parent=gene2774 chrX ENCODE CDS 153115777 153115854 . - 0 Parent=gene2774 chrX ENCODE exon 153115947 153116065 . - . Parent=gene2774 chrX ENCODE CDS 153115947 153116065 . - 2 Parent=gene2774 chrX ENCODE exon 153116612 153116759 . - . Parent=gene2774 chrX ENCODE CDS 153116612 153116759 . - 0 Parent=gene2774 chrX ENCODE exon 153116856 153116953 . - . Parent=gene2774 chrX ENCODE CDS 153116856 153116953 . - 2 Parent=gene2774 chrX ENCODE exon 153117057 153117305 . - . Parent=gene2774 chrX ENCODE CDS 153117057 153117305 . - 2 Parent=gene2774 chrX ENCODE CDS 153120088 153120460 . - 0 Parent=gene2774 chrX ENCODE exon 153120088 153120503 . - . Parent=gene2774 ### chrX ENCODE gene 153098135 153100418 . - . ID=gene2775;Name=XX-FW83128A1.1-008;name2=FLNA chrX ENCODE exon 153098135 153098251 . - . Parent=gene2775 chrX ENCODE exon 153098577 153098780 . - . Parent=gene2775 chrX ENCODE exon 153098864 153099082 . - . Parent=gene2775 chrX ENCODE exon 153099246 153099422 . - . Parent=gene2775 chrX ENCODE exon 153100124 153100256 . - . Parent=gene2775 chrX ENCODE exon 153100355 153100418 . - . Parent=gene2775 ### chrX ENCODE gene 153098137 153099570 . - . ID=gene2776;Name=XX-FW83128A1.1-009;name2=FLNA chrX ENCODE exon 153098137 153098251 . - . Parent=gene2776 chrX ENCODE exon 153098577 153098780 . - . Parent=gene2776 chrX ENCODE exon 153098864 153099570 . - . Parent=gene2776 ### chrX ENCODE gene 153099300 153109255 . - . ID=gene2777;Name=XX-FW83128A1.1-014;name2=FLNA chrX ENCODE exon 153099300 153099422 . - . Parent=gene2777 chrX ENCODE exon 153100124 153100256 . - . Parent=gene2777 chrX ENCODE exon 153100796 153100911 . - . Parent=gene2777 chrX ENCODE exon 153101099 153101236 . - . Parent=gene2777 chrX ENCODE exon 153101396 153101420 . - . Parent=gene2777 chrX ENCODE exon 153109220 153109255 . - . Parent=gene2777 ### chrX ENCODE gene 153100796 153102327 . - . ID=gene2778;Name=XX-FW83128A1.1-016;name2=FLNA chrX ENCODE exon 153100796 153100911 . - . Parent=gene2778 chrX ENCODE CDS 153100796 153100911 . - 2 Parent=gene2778 chrX ENCODE exon 153101099 153101236 . - . Parent=gene2778 chrX ENCODE CDS 153101099 153101236 . - 2 Parent=gene2778 chrX ENCODE exon 153101396 153101662 . - . Parent=gene2778 chrX ENCODE CDS 153101396 153101662 . - 2 Parent=gene2778 chrX ENCODE exon 153101987 153102139 . - . Parent=gene2778 chrX ENCODE CDS 153101987 153102139 . - 2 Parent=gene2778 chrX ENCODE exon 153102216 153102327 . - . Parent=gene2778 chrX ENCODE CDS 153102216 153102327 . - 0 Parent=gene2778 ### chrX ENCODE gene 153100943 153101998 . - . ID=gene2779;Name=XX-FW83128A1.1-007;name2=FLNA chrX ENCODE exon 153100943 153101236 . - . Parent=gene2779 chrX ENCODE exon 153101396 153101662 . - . Parent=gene2779 chrX ENCODE exon 153101768 153101890 . - . Parent=gene2779 chrX ENCODE exon 153101987 153101998 . - . Parent=gene2779 ### chrX ENCODE gene 153101768 153102813 . - . ID=gene2780;Name=XX-FW83128A1.1-019;name2=FLNA chrX ENCODE exon 153101768 153101890 . - . Parent=gene2780 chrX ENCODE exon 153101987 153102139 . - . Parent=gene2780 chrX ENCODE exon 153102216 153102436 . - . Parent=gene2780 chrX ENCODE exon 153102511 153102672 . - . Parent=gene2780 chrX ENCODE exon 153102769 153102813 . - . Parent=gene2780 ### chrX ENCODE gene 153102511 153104104 . - . ID=gene2781;Name=XX-FW83128A1.1-015;name2=FLNA chrX ENCODE exon 153102511 153102672 . - . Parent=gene2781 chrX ENCODE CDS 153102511 153102672 . - 0 Parent=gene2781 chrX ENCODE exon 153103130 153103258 . - . Parent=gene2781 chrX ENCODE CDS 153103130 153103258 . - 0 Parent=gene2781 chrX ENCODE exon 153103366 153103506 . - . Parent=gene2781 chrX ENCODE CDS 153103366 153103506 . - 0 Parent=gene2781 chrX ENCODE exon 153103596 153103698 . - . Parent=gene2781 chrX ENCODE CDS 153103596 153103698 . - 1 Parent=gene2781 chrX ENCODE exon 153103831 153103926 . - . Parent=gene2781 chrX ENCODE CDS 153103831 153103926 . - 1 Parent=gene2781 chrX ENCODE exon 153104040 153104104 . - . Parent=gene2781 chrX ENCODE CDS 153104040 153104104 . - 0 Parent=gene2781 ### chrX ENCODE gene 153103245 153103895 . - . ID=gene2782;Name=XX-FW83128A1.1-006;name2=FLNA chrX ENCODE exon 153103245 153103506 . - . Parent=gene2782 chrX ENCODE exon 153103596 153103698 . - . Parent=gene2782 chrX ENCODE exon 153103831 153103895 . - . Parent=gene2782 ### chrX ENCODE gene 153106756 153107879 . - . ID=gene2783;Name=XX-FW83128A1.1-005;name2=FLNA chrX ENCODE exon 153106756 153106838 . - . Parent=gene2783 chrX ENCODE exon 153107414 153107570 . - . Parent=gene2783 chrX ENCODE exon 153107660 153107879 . - . Parent=gene2783 ### chrX ENCODE gene 153113847 153114422 . - . ID=gene2784;Name=XX-FW83128A1.1-013;name2=FLNA chrX ENCODE exon 153113847 153114172 . - . Parent=gene2784 chrX ENCODE exon 153114351 153114422 . - . Parent=gene2784 ### chrX ENCODE gene 153114639 153120424 . - . ID=gene2785;Name=XX-FW83128A1.1-011;name2=FLNA chrX ENCODE exon 153114639 153114701 . - . Parent=gene2785 chrX ENCODE exon 153115239 153115436 . - . Parent=gene2785 chrX ENCODE exon 153115523 153115662 . - . Parent=gene2785 chrX ENCODE exon 153120327 153120424 . - . Parent=gene2785 ### chrX ENCODE gene 153115976 153120339 . - . ID=gene2786;Name=XX-FW83128A1.1-012;name2=FLNA chrX ENCODE exon 153115976 153116065 . - . Parent=gene2786 chrX ENCODE exon 153116612 153116759 . - . Parent=gene2786 chrX ENCODE exon 153116856 153116953 . - . Parent=gene2786 chrX ENCODE exon 153117057 153117068 . - . Parent=gene2786 chrX ENCODE exon 153120177 153120339 . - . Parent=gene2786 ### chrX ENCODE gene 153128404 153130730 . + . ID=gene2787;Name=XX-FW88778H2.1-001;name2=EMD chrX ENCODE exon 153128404 153128773 . + . Parent=gene2787 chrX ENCODE CDS 153128692 153128773 . + 0 Parent=gene2787 chrX ENCODE exon 153128897 153129001 . + . Parent=gene2787 chrX ENCODE CDS 153128897 153129001 . + 2 Parent=gene2787 chrX ENCODE exon 153129149 153129226 . + . Parent=gene2787 chrX ENCODE CDS 153129149 153129226 . + 2 Parent=gene2787 chrX ENCODE exon 153129441 153129574 . + . Parent=gene2787 chrX ENCODE CDS 153129441 153129574 . + 2 Parent=gene2787 chrX ENCODE exon 153129960 153130009 . + . Parent=gene2787 chrX ENCODE CDS 153129960 153130009 . + 0 Parent=gene2787 chrX ENCODE CDS 153130089 153130404 . + 1 Parent=gene2787 chrX ENCODE exon 153130089 153130730 . + . Parent=gene2787 ### chrX ENCODE gene 153128480 153130498 . + . ID=gene2788;Name=XX-FW88778H2.1-010;name2=EMD chrX ENCODE exon 153128480 153128773 . + . Parent=gene2788 chrX ENCODE CDS 153128692 153128773 . + 0 Parent=gene2788 chrX ENCODE exon 153129149 153129226 . + . Parent=gene2788 chrX ENCODE CDS 153129149 153129226 . + 2 Parent=gene2788 chrX ENCODE exon 153129441 153129574 . + . Parent=gene2788 chrX ENCODE CDS 153129441 153129574 . + 2 Parent=gene2788 chrX ENCODE exon 153129960 153130009 . + . Parent=gene2788 chrX ENCODE CDS 153129960 153130009 . + 0 Parent=gene2788 chrX ENCODE CDS 153130089 153130404 . + 1 Parent=gene2788 chrX ENCODE exon 153130089 153130498 . + . Parent=gene2788 ### chrX ENCODE gene 153128548 153130486 . + . ID=gene2789;Name=XX-FW88778H2.1-003;name2=EMD chrX ENCODE exon 153128548 153128773 . + . Parent=gene2789 chrX ENCODE exon 153128897 153129001 . + . Parent=gene2789 chrX ENCODE exon 153129149 153129574 . + . Parent=gene2789 chrX ENCODE exon 153129960 153130486 . + . Parent=gene2789 ### chrX ENCODE gene 153128568 153130490 . + . ID=gene2790;name2=EMD;Name=XX-FW88778H2.1-007 chrX ENCODE exon 153128568 153128744 . + . Parent=gene2790 chrX ENCODE exon 153128897 153129001 . + . Parent=gene2790 chrX ENCODE exon 153129149 153129226 . + . Parent=gene2790 chrX ENCODE exon 153129441 153129574 . + . Parent=gene2790 chrX ENCODE exon 153129960 153130009 . + . Parent=gene2790 chrX ENCODE exon 153130089 153130490 . + . Parent=gene2790 ### chrX ENCODE gene 153128611 153130162 . + . ID=gene2791;Name=XX-FW88778H2.1-006;name2=EMD chrX ENCODE exon 153128611 153128773 . + . Parent=gene2791 chrX ENCODE exon 153129149 153129574 . + . Parent=gene2791 chrX ENCODE exon 153129960 153130162 . + . Parent=gene2791 ### chrX ENCODE gene 153128635 153129669 . + . ID=gene2792;Name=XX-FW88778H2.1-005;name2=EMD chrX ENCODE exon 153128635 153128773 . + . Parent=gene2792 chrX ENCODE exon 153128897 153129001 . + . Parent=gene2792 chrX ENCODE exon 153129149 153129669 . + . Parent=gene2792 ### chrX ENCODE gene 153128732 153130101 . + . ID=gene2793;Name=XX-FW88778H2.1-008;name2=EMD chrX ENCODE exon 153128732 153128773 . + . Parent=gene2793 chrX ENCODE exon 153128897 153129001 . + . Parent=gene2793 chrX ENCODE exon 153129149 153129226 . + . Parent=gene2793 chrX ENCODE exon 153129441 153129574 . + . Parent=gene2793 chrX ENCODE exon 153129960 153130101 . + . Parent=gene2793 ### chrX ENCODE gene 153128832 153130488 . + . ID=gene2794;name2=EMD;Name=XX-FW88778H2.1-009 chrX ENCODE exon 153128832 153129001 . + . Parent=gene2794 chrX ENCODE exon 153129149 153129226 . + . Parent=gene2794 chrX ENCODE exon 153129441 153129574 . + . Parent=gene2794 chrX ENCODE exon 153129960 153130009 . + . Parent=gene2794 chrX ENCODE exon 153130089 153130488 . + . Parent=gene2794 ### chrX ENCODE gene 153129218 153130729 . + . ID=gene2795;name2=EMD;Name=XX-FW88778H2.1-011 chrX ENCODE exon 153129218 153129226 . + . Parent=gene2795 chrX ENCODE exon 153129441 153129574 . + . Parent=gene2795 chrX ENCODE exon 153129960 153130009 . + . Parent=gene2795 chrX ENCODE exon 153130089 153130105 . + . Parent=gene2795 chrX ENCODE exon 153130282 153130729 . + . Parent=gene2795 ### chrX ENCODE gene 153129772 153130650 . + . ID=gene2796;Name=XX-FW88778H2.1-004;name2=EMD chrX ENCODE exon 153129772 153130009 . + . Parent=gene2796 chrX ENCODE exon 153130089 153130650 . + . Parent=gene2796 ### chrX ENCODE gene 153147246 153149354 . + . ID=gene2797;Name=XX-FW83563B9.1-004;name2=RPL10 chrX ENCODE exon 153147246 153147582 . + . Parent=gene2797 chrX ENCODE exon 153147685 153147730 . + . Parent=gene2797 chrX ENCODE exon 153148526 153148584 . + . Parent=gene2797 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2797 chrX ENCODE exon 153148991 153149354 . + . Parent=gene2797 ### chrX ENCODE gene 153147418 153150105 . + . ID=gene2798;Name=XX-FW83563B9.1-008;name2=RPL10 chrX ENCODE exon 153147418 153147582 . + . Parent=gene2798 chrX ENCODE exon 153147685 153147730 . + . Parent=gene2798 chrX ENCODE CDS 153147708 153147730 . + 0 Parent=gene2798 chrX ENCODE exon 153148526 153148584 . + . Parent=gene2798 chrX ENCODE CDS 153148526 153148584 . + 1 Parent=gene2798 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2798 chrX ENCODE CDS 153148675 153148782 . + 2 Parent=gene2798 chrX ENCODE exon 153148991 153149129 . + . Parent=gene2798 chrX ENCODE CDS 153148991 153149129 . + 2 Parent=gene2798 chrX ENCODE exon 153149652 153149814 . + . Parent=gene2798 chrX ENCODE CDS 153149652 153149814 . + 1 Parent=gene2798 chrX ENCODE CDS 153149890 153150042 . + 0 Parent=gene2798 chrX ENCODE exon 153149890 153150105 . + . Parent=gene2798 ### chrX ENCODE gene 153147555 153149999 . + . ID=gene2799;Name=XX-FW83563B9.1-015;name2=RPL10 chrX ENCODE exon 153147555 153147586 . + . Parent=gene2799 chrX ENCODE exon 153147685 153147730 . + . Parent=gene2799 chrX ENCODE CDS 153147708 153147730 . + 0 Parent=gene2799 chrX ENCODE exon 153148526 153148584 . + . Parent=gene2799 chrX ENCODE CDS 153148526 153148584 . + 1 Parent=gene2799 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2799 chrX ENCODE CDS 153148675 153148782 . + 2 Parent=gene2799 chrX ENCODE exon 153148991 153149129 . + . Parent=gene2799 chrX ENCODE CDS 153148991 153149129 . + 2 Parent=gene2799 chrX ENCODE exon 153149652 153149814 . + . Parent=gene2799 chrX ENCODE CDS 153149652 153149814 . + 1 Parent=gene2799 chrX ENCODE exon 153149890 153149999 . + . Parent=gene2799 chrX ENCODE CDS 153149890 153149999 . + 0 Parent=gene2799 ### chrX ENCODE gene 153147560 153151527 . + . ID=gene2800;Name=XX-FW83563B9.1-001;name2=RPL10 chrX ENCODE exon 153147560 153147730 . + . Parent=gene2800 chrX ENCODE CDS 153147708 153147730 . + 0 Parent=gene2800 chrX ENCODE exon 153148526 153148584 . + . Parent=gene2800 chrX ENCODE CDS 153148526 153148584 . + 1 Parent=gene2800 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2800 chrX ENCODE CDS 153148675 153148782 . + 2 Parent=gene2800 chrX ENCODE exon 153148991 153149129 . + . Parent=gene2800 chrX ENCODE CDS 153148991 153149129 . + 2 Parent=gene2800 chrX ENCODE exon 153149652 153149814 . + . Parent=gene2800 chrX ENCODE CDS 153149652 153149814 . + 1 Parent=gene2800 chrX ENCODE CDS 153149890 153150042 . + 0 Parent=gene2800 chrX ENCODE exon 153149890 153151527 . + . Parent=gene2800 ### chrX ENCODE gene 153147565 153150086 . + . ID=gene2801;Name=XX-FW83563B9.1-006;name2=RPL10 chrX ENCODE exon 153147565 153147730 . + . Parent=gene2801 chrX ENCODE exon 153148526 153148782 . + . Parent=gene2801 chrX ENCODE exon 153148991 153150086 . + . Parent=gene2801 ### chrX ENCODE gene 153147565 153150101 . + . ID=gene2802;Name=XX-FW83563B9.1-007;name2=RPL10 chrX ENCODE exon 153147565 153147582 . + . Parent=gene2802 chrX ENCODE exon 153147685 153150101 . + . Parent=gene2802 ### chrX ENCODE gene 153147565 153150101 . + . ID=gene2803;Name=XX-FW83563B9.1-005;name2=RPL10 chrX ENCODE exon 153147565 153147730 . + . Parent=gene2803 chrX ENCODE exon 153148526 153148584 . + . Parent=gene2803 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2803 chrX ENCODE exon 153148991 153149814 . + . Parent=gene2803 chrX ENCODE exon 153149890 153150101 . + . Parent=gene2803 ### chrX ENCODE gene 153147566 153150105 . + . ID=gene2804;Name=XX-FW83563B9.1-009;name2=RPL10 chrX ENCODE exon 153147566 153147582 . + . Parent=gene2804 chrX ENCODE exon 153147685 153147730 . + . Parent=gene2804 chrX ENCODE exon 153148526 153148584 . + . Parent=gene2804 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2804 chrX ENCODE exon 153148991 153149129 . + . Parent=gene2804 chrX ENCODE exon 153149890 153150105 . + . Parent=gene2804 ### chrX ENCODE gene 153147567 153150005 . + . ID=gene2805;Name=XX-FW83563B9.1-010;name2=RPL10 chrX ENCODE exon 153147567 153147730 . + . Parent=gene2805 chrX ENCODE exon 153148526 153148782 . + . Parent=gene2805 chrX ENCODE exon 153148991 153149129 . + . Parent=gene2805 chrX ENCODE exon 153149652 153149814 . + . Parent=gene2805 chrX ENCODE exon 153149890 153150005 . + . Parent=gene2805 ### chrX ENCODE gene 153147576 153150101 . + . ID=gene2806;name2=RPL10;Name=XX-FW83563B9.1-003 chrX ENCODE exon 153147576 153147730 . + . Parent=gene2806 chrX ENCODE exon 153148526 153150101 . + . Parent=gene2806 ### chrX ENCODE gene 153147591 153150101 . + . ID=gene2807;Name=XX-FW83563B9.1-002;name2=RPL10 chrX ENCODE exon 153147591 153148584 . + . Parent=gene2807 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2807 chrX ENCODE exon 153148991 153150101 . + . Parent=gene2807 ### chrX ENCODE gene 153147684 153150085 . + . ID=gene2808;Name=XX-FW83563B9.1-013;name2=RPL10 chrX ENCODE exon 153147684 153147730 . + . Parent=gene2808 chrX ENCODE exon 153148526 153148584 . + . Parent=gene2808 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2808 chrX ENCODE exon 153148991 153150085 . + . Parent=gene2808 ### chrX ENCODE gene 153147685 153150101 . + . ID=gene2809;Name=XX-FW83563B9.1-012;name2=RPL10 chrX ENCODE exon 153147685 153147730 . + . Parent=gene2809 chrX ENCODE exon 153148526 153148584 . + . Parent=gene2809 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2809 chrX ENCODE exon 153148991 153149129 . + . Parent=gene2809 chrX ENCODE exon 153149652 153150101 . + . Parent=gene2809 ### chrX ENCODE gene 153148078 153150097 . + . ID=gene2810;Name=XX-FW83563B9.1-011;name2=RPL10 chrX ENCODE exon 153148078 153148148 . + . Parent=gene2810 chrX ENCODE CDS 153148078 153148148 . + 0 Parent=gene2810 chrX ENCODE exon 153148526 153148584 . + . Parent=gene2810 chrX ENCODE CDS 153148526 153148584 . + 1 Parent=gene2810 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2810 chrX ENCODE CDS 153148675 153148782 . + 2 Parent=gene2810 chrX ENCODE exon 153148991 153149129 . + . Parent=gene2810 chrX ENCODE CDS 153148991 153149129 . + 2 Parent=gene2810 chrX ENCODE exon 153149652 153149814 . + . Parent=gene2810 chrX ENCODE CDS 153149652 153149814 . + 1 Parent=gene2810 chrX ENCODE CDS 153149890 153150042 . + 0 Parent=gene2810 chrX ENCODE exon 153149890 153150097 . + . Parent=gene2810 ### chrX ENCODE gene 153148180 153150101 . + . ID=gene2811;Name=XX-FW83563B9.1-014;name2=RPL10 chrX ENCODE exon 153148180 153148260 . + . Parent=gene2811 chrX ENCODE exon 153148526 153148584 . + . Parent=gene2811 chrX ENCODE exon 153148675 153148782 . + . Parent=gene2811 chrX ENCODE exon 153148991 153149129 . + . Parent=gene2811 chrX ENCODE exon 153149652 153149814 . + . Parent=gene2811 chrX ENCODE exon 153149890 153150101 . + . Parent=gene2811 ### chrX ENCODE gene 153150946 153158459 . - . ID=gene2812;Name=XX-FW83563B9.2-006;name2=DNASE1L1 chrX ENCODE exon 153150946 153152029 . - . Parent=gene2812 chrX ENCODE CDS 153151895 153152029 . - 0 Parent=gene2812 chrX ENCODE exon 153152130 153152378 . - . Parent=gene2812 chrX ENCODE CDS 153152130 153152378 . - 0 Parent=gene2812 chrX ENCODE exon 153152457 153152569 . - . Parent=gene2812 chrX ENCODE CDS 153152457 153152569 . - 2 Parent=gene2812 chrX ENCODE exon 153152710 153152810 . - . Parent=gene2812 chrX ENCODE CDS 153152710 153152810 . - 1 Parent=gene2812 chrX ENCODE exon 153154016 153154102 . - . Parent=gene2812 chrX ENCODE CDS 153154016 153154102 . - 1 Parent=gene2812 chrX ENCODE exon 153154183 153154271 . - . Parent=gene2812 chrX ENCODE CDS 153154183 153154271 . - 0 Parent=gene2812 chrX ENCODE CDS 153154622 153154756 . - 0 Parent=gene2812 chrX ENCODE exon 153154622 153154843 . - . Parent=gene2812 chrX ENCODE exon 153158295 153158459 . - . Parent=gene2812 ### chrX ENCODE gene 153150946 153158461 . - . ID=gene2813;Name=XX-FW83563B9.2-002;name2=DNASE1L1 chrX ENCODE exon 153150946 153152029 . - . Parent=gene2813 chrX ENCODE CDS 153151895 153152029 . - 0 Parent=gene2813 chrX ENCODE exon 153152130 153152378 . - . Parent=gene2813 chrX ENCODE CDS 153152130 153152378 . - 0 Parent=gene2813 chrX ENCODE exon 153152457 153152569 . - . Parent=gene2813 chrX ENCODE CDS 153152457 153152569 . - 2 Parent=gene2813 chrX ENCODE exon 153152710 153152810 . - . Parent=gene2813 chrX ENCODE CDS 153152710 153152810 . - 1 Parent=gene2813 chrX ENCODE exon 153154016 153154102 . - . Parent=gene2813 chrX ENCODE CDS 153154016 153154102 . - 1 Parent=gene2813 chrX ENCODE exon 153154183 153154271 . - . Parent=gene2813 chrX ENCODE CDS 153154183 153154271 . - 0 Parent=gene2813 chrX ENCODE CDS 153154622 153154756 . - 0 Parent=gene2813 chrX ENCODE exon 153154622 153154843 . - . Parent=gene2813 chrX ENCODE exon 153157741 153158461 . - . Parent=gene2813 ### chrX ENCODE gene 153150946 153159222 . - . ID=gene2814;Name=XX-FW83563B9.2-001;name2=DNASE1L1 chrX ENCODE exon 153150946 153152029 . - . Parent=gene2814 chrX ENCODE CDS 153151895 153152029 . - 0 Parent=gene2814 chrX ENCODE exon 153152130 153152378 . - . Parent=gene2814 chrX ENCODE CDS 153152130 153152378 . - 0 Parent=gene2814 chrX ENCODE exon 153152457 153152569 . - . Parent=gene2814 chrX ENCODE CDS 153152457 153152569 . - 2 Parent=gene2814 chrX ENCODE exon 153152710 153152810 . - . Parent=gene2814 chrX ENCODE CDS 153152710 153152810 . - 1 Parent=gene2814 chrX ENCODE exon 153154016 153154102 . - . Parent=gene2814 chrX ENCODE CDS 153154016 153154102 . - 1 Parent=gene2814 chrX ENCODE exon 153154183 153154271 . - . Parent=gene2814 chrX ENCODE CDS 153154183 153154271 . - 0 Parent=gene2814 chrX ENCODE CDS 153154622 153154756 . - 0 Parent=gene2814 chrX ENCODE exon 153154622 153154843 . - . Parent=gene2814 chrX ENCODE exon 153158295 153158379 . - . Parent=gene2814 chrX ENCODE exon 153158601 153159222 . - . Parent=gene2814 ### chrX ENCODE gene 153150949 153161296 . - . ID=gene2815;Name=XX-FW83563B9.2-004;name2=DNASE1L1 chrX ENCODE exon 153150949 153152029 . - . Parent=gene2815 chrX ENCODE CDS 153151895 153152029 . - 0 Parent=gene2815 chrX ENCODE exon 153152130 153152378 . - . Parent=gene2815 chrX ENCODE CDS 153152130 153152378 . - 0 Parent=gene2815 chrX ENCODE exon 153152457 153152569 . - . Parent=gene2815 chrX ENCODE CDS 153152457 153152569 . - 2 Parent=gene2815 chrX ENCODE exon 153152710 153152810 . - . Parent=gene2815 chrX ENCODE CDS 153152710 153152810 . - 1 Parent=gene2815 chrX ENCODE exon 153154016 153154102 . - . Parent=gene2815 chrX ENCODE CDS 153154016 153154102 . - 1 Parent=gene2815 chrX ENCODE exon 153154183 153154271 . - . Parent=gene2815 chrX ENCODE CDS 153154183 153154271 . - 0 Parent=gene2815 chrX ENCODE CDS 153154622 153154756 . - 0 Parent=gene2815 chrX ENCODE exon 153154622 153154843 . - . Parent=gene2815 chrX ENCODE exon 153158295 153158379 . - . Parent=gene2815 chrX ENCODE exon 153161075 153161296 . - . Parent=gene2815 ### chrX ENCODE gene 153151675 153152784 . - . ID=gene2816;Name=XX-FW83563B9.2-007;name2=DNASE1L1 chrX ENCODE exon 153151675 153152378 . - . Parent=gene2816 chrX ENCODE exon 153152457 153152569 . - . Parent=gene2816 chrX ENCODE exon 153152710 153152784 . - . Parent=gene2816 ### chrX ENCODE gene 153154016 153161266 . - . ID=gene2817;Name=XX-FW83563B9.2-003;name2=DNASE1L1 chrX ENCODE exon 153154016 153154102 . - . Parent=gene2817 chrX ENCODE CDS 153154016 153154102 . - 1 Parent=gene2817 chrX ENCODE exon 153154183 153154271 . - . Parent=gene2817 chrX ENCODE CDS 153154183 153154271 . - 0 Parent=gene2817 chrX ENCODE CDS 153154622 153154756 . - 0 Parent=gene2817 chrX ENCODE exon 153154622 153154843 . - . Parent=gene2817 chrX ENCODE exon 153158295 153158379 . - . Parent=gene2817 chrX ENCODE exon 153158601 153158858 . - . Parent=gene2817 chrX ENCODE exon 153161075 153161266 . - . Parent=gene2817 ### chrX ENCODE gene 153154677 153161273 . - . ID=gene2818;Name=XX-FW83563B9.2-005;name2=DNASE1L1 chrX ENCODE CDS 153154677 153154756 . - 0 Parent=gene2818 chrX ENCODE exon 153154677 153154843 . - . Parent=gene2818 chrX ENCODE exon 153158295 153158379 . - . Parent=gene2818 chrX ENCODE exon 153158601 153158996 . - . Parent=gene2818 chrX ENCODE exon 153161075 153161273 . - . Parent=gene2818 ### chrX ENCODE gene 153159152 153161264 . - . ID=gene2819;Name=XX-FW83563B9.2-008;name2=DNASE1L1 chrX ENCODE exon 153159152 153159491 . - . Parent=gene2819 chrX ENCODE exon 153159808 153160054 . - . Parent=gene2819 chrX ENCODE exon 153161075 153161264 . - . Parent=gene2819 ### chrX ENCODE gene 153160701 153170846 . + . ID=gene2820;Name=XX-FW83563B9.3-010;name2=TAZ chrX ENCODE exon 153160701 153161136 . + . Parent=gene2820 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2820 chrX ENCODE exon 153162391 153162523 . + . Parent=gene2820 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2820 chrX ENCODE exon 153168729 153169280 . + . Parent=gene2820 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2820 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2820 chrX ENCODE exon 153170089 153170846 . + . Parent=gene2820 ### chrX ENCODE gene 153160707 153169228 . + . ID=gene2821;Name=XX-FW83563B9.3-014;name2=TAZ chrX ENCODE exon 153160707 153161136 . + . Parent=gene2821 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2821 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2821 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2821 chrX ENCODE exon 153168729 153168809 . + . Parent=gene2821 chrX ENCODE exon 153168891 153169228 . + . Parent=gene2821 ### chrX ENCODE gene 153160738 153170879 . + . ID=gene2822;Name=XX-FW83563B9.3-004;name2=TAZ chrX ENCODE exon 153160738 153161136 . + . Parent=gene2822 chrX ENCODE CDS 153161028 153161136 . + 0 Parent=gene2822 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2822 chrX ENCODE CDS 153161270 153161398 . + 2 Parent=gene2822 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2822 chrX ENCODE CDS 153162391 153162436 . + 2 Parent=gene2822 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2822 chrX ENCODE CDS 153162666 153162751 . + 1 Parent=gene2822 chrX ENCODE exon 153168729 153168809 . + . Parent=gene2822 chrX ENCODE CDS 153168729 153168809 . + 2 Parent=gene2822 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2822 chrX ENCODE CDS 153169218 153169280 . + 2 Parent=gene2822 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2822 chrX ENCODE CDS 153169398 153169450 . + 2 Parent=gene2822 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2822 chrX ENCODE CDS 153169844 153169921 . + 0 Parent=gene2822 chrX ENCODE CDS 153170089 153170190 . + 0 Parent=gene2822 chrX ENCODE exon 153170089 153170879 . + . Parent=gene2822 ### chrX ENCODE gene 153160739 153169259 . + . ID=gene2823;Name=XX-FW83563B9.3-012;name2=TAZ chrX ENCODE exon 153160739 153161190 . + . Parent=gene2823 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2823 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2823 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2823 chrX ENCODE exon 153168729 153168809 . + . Parent=gene2823 chrX ENCODE exon 153168891 153168932 . + . Parent=gene2823 chrX ENCODE exon 153169218 153169259 . + . Parent=gene2823 ### chrX ENCODE gene 153160739 153170906 . + . ID=gene2824;Name=XX-FW83563B9.3-002;name2=TAZ chrX ENCODE exon 153160739 153161136 . + . Parent=gene2824 chrX ENCODE CDS 153161028 153161136 . + 0 Parent=gene2824 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2824 chrX ENCODE CDS 153161270 153161398 . + 2 Parent=gene2824 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2824 chrX ENCODE CDS 153162391 153162436 . + 2 Parent=gene2824 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2824 chrX ENCODE CDS 153162666 153162751 . + 1 Parent=gene2824 chrX ENCODE exon 153168729 153168809 . + . Parent=gene2824 chrX ENCODE CDS 153168729 153168809 . + 2 Parent=gene2824 chrX ENCODE exon 153168891 153168932 . + . Parent=gene2824 chrX ENCODE CDS 153168891 153168932 . + 2 Parent=gene2824 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2824 chrX ENCODE CDS 153169218 153169280 . + 2 Parent=gene2824 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2824 chrX ENCODE CDS 153169398 153169450 . + 2 Parent=gene2824 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2824 chrX ENCODE CDS 153169844 153169921 . + 0 Parent=gene2824 chrX ENCODE CDS 153170089 153170190 . + 0 Parent=gene2824 chrX ENCODE exon 153170089 153170906 . + . Parent=gene2824 ### chrX ENCODE gene 153160739 153170912 . + . ID=gene2825;name2=TAZ;Name=XX-FW83563B9.3-001 chrX ENCODE exon 153160739 153161136 . + . Parent=gene2825 chrX ENCODE CDS 153161028 153161136 . + 0 Parent=gene2825 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2825 chrX ENCODE CDS 153161270 153161398 . + 2 Parent=gene2825 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2825 chrX ENCODE CDS 153162391 153162436 . + 2 Parent=gene2825 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2825 chrX ENCODE CDS 153162666 153162751 . + 1 Parent=gene2825 chrX ENCODE exon 153163285 153163374 . + . Parent=gene2825 chrX ENCODE CDS 153163285 153163374 . + 2 Parent=gene2825 chrX ENCODE exon 153168729 153168809 . + . Parent=gene2825 chrX ENCODE CDS 153168729 153168809 . + 2 Parent=gene2825 chrX ENCODE exon 153168891 153168932 . + . Parent=gene2825 chrX ENCODE CDS 153168891 153168932 . + 2 Parent=gene2825 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2825 chrX ENCODE CDS 153169218 153169280 . + 2 Parent=gene2825 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2825 chrX ENCODE CDS 153169398 153169450 . + 2 Parent=gene2825 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2825 chrX ENCODE CDS 153169844 153169921 . + 0 Parent=gene2825 chrX ENCODE CDS 153170089 153170190 . + 0 Parent=gene2825 chrX ENCODE exon 153170089 153170912 . + . Parent=gene2825 ### chrX ENCODE gene 153160742 153162853 . + . ID=gene2826;name2=TAZ;Name=XX-FW83563B9.3-009 chrX ENCODE exon 153160742 153161136 . + . Parent=gene2826 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2826 chrX ENCODE exon 153162391 153162853 . + . Parent=gene2826 ### chrX ENCODE gene 153160744 153170912 . + . ID=gene2827;Name=XX-FW83563B9.3-005;name2=TAZ chrX ENCODE exon 153160744 153161136 . + . Parent=gene2827 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2827 chrX ENCODE exon 153162391 153162542 . + . Parent=gene2827 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2827 chrX ENCODE exon 153168729 153168809 . + . Parent=gene2827 chrX ENCODE exon 153168891 153168932 . + . Parent=gene2827 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2827 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2827 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2827 chrX ENCODE exon 153170089 153170912 . + . Parent=gene2827 ### chrX ENCODE gene 153160745 153162751 . + . ID=gene2828;Name=XX-FW83563B9.3-015;name2=TAZ chrX ENCODE exon 153160745 153161136 . + . Parent=gene2828 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2828 chrX ENCODE exon 153162391 153162554 . + . Parent=gene2828 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2828 ### chrX ENCODE gene 153160757 153169870 . + . ID=gene2829;Name=XX-FW83563B9.3-016;name2=TAZ chrX ENCODE exon 153160757 153161136 . + . Parent=gene2829 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2829 chrX ENCODE exon 153162391 153162523 . + . Parent=gene2829 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2829 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2829 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2829 chrX ENCODE exon 153169844 153169870 . + . Parent=gene2829 ### chrX ENCODE gene 153160768 153163372 . + . ID=gene2830;Name=XX-FW83563B9.3-011;name2=TAZ chrX ENCODE exon 153160768 153161190 . + . Parent=gene2830 chrX ENCODE CDS 153161028 153161190 . + 0 Parent=gene2830 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2830 chrX ENCODE CDS 153161270 153161398 . + 2 Parent=gene2830 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2830 chrX ENCODE CDS 153162391 153162436 . + 2 Parent=gene2830 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2830 chrX ENCODE CDS 153162666 153162751 . + 1 Parent=gene2830 chrX ENCODE exon 153163285 153163372 . + . Parent=gene2830 chrX ENCODE CDS 153163285 153163372 . + 2 Parent=gene2830 ### chrX ENCODE gene 153160788 153170906 . + . ID=gene2831;Name=XX-FW83563B9.3-003;name2=TAZ chrX ENCODE exon 153160788 153161136 . + . Parent=gene2831 chrX ENCODE CDS 153161028 153161136 . + 0 Parent=gene2831 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2831 chrX ENCODE CDS 153161270 153161398 . + 2 Parent=gene2831 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2831 chrX ENCODE CDS 153162391 153162436 . + 2 Parent=gene2831 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2831 chrX ENCODE CDS 153162666 153162751 . + 1 Parent=gene2831 chrX ENCODE exon 153163285 153163374 . + . Parent=gene2831 chrX ENCODE CDS 153163285 153163374 . + 2 Parent=gene2831 chrX ENCODE exon 153168729 153168809 . + . Parent=gene2831 chrX ENCODE CDS 153168729 153168809 . + 2 Parent=gene2831 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2831 chrX ENCODE CDS 153169218 153169280 . + 2 Parent=gene2831 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2831 chrX ENCODE CDS 153169398 153169450 . + 2 Parent=gene2831 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2831 chrX ENCODE CDS 153169844 153169921 . + 0 Parent=gene2831 chrX ENCODE CDS 153170089 153170190 . + 0 Parent=gene2831 chrX ENCODE exon 153170089 153170906 . + . Parent=gene2831 ### chrX ENCODE gene 153160808 153161867 . + . ID=gene2832;Name=XX-FW83563B9.3-017;name2=TAZ chrX ENCODE exon 153160808 153161136 . + . Parent=gene2832 chrX ENCODE exon 153161270 153161867 . + . Parent=gene2832 ### chrX ENCODE gene 153160943 153170912 . + . ID=gene2833;Name=XX-FW83563B9.3-006;name2=TAZ chrX ENCODE exon 153160943 153161190 . + . Parent=gene2833 chrX ENCODE CDS 153161028 153161190 . + 0 Parent=gene2833 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2833 chrX ENCODE CDS 153162391 153162436 . + 2 Parent=gene2833 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2833 chrX ENCODE CDS 153162666 153162751 . + 1 Parent=gene2833 chrX ENCODE exon 153168729 153168809 . + . Parent=gene2833 chrX ENCODE CDS 153168729 153168809 . + 2 Parent=gene2833 chrX ENCODE exon 153169218 153169450 . + . Parent=gene2833 chrX ENCODE CDS 153169218 153169450 . + 2 Parent=gene2833 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2833 chrX ENCODE CDS 153169844 153169921 . + 0 Parent=gene2833 chrX ENCODE CDS 153170089 153170190 . + 0 Parent=gene2833 chrX ENCODE exon 153170089 153170912 . + . Parent=gene2833 ### chrX ENCODE gene 153161028 153170190 . + . ID=gene2834;Name=XX-FW83563B9.3-026;name2=TAZ chrX ENCODE exon 153161028 153161136 . + . Parent=gene2834 chrX ENCODE CDS 153161028 153161136 . + 0 Parent=gene2834 chrX ENCODE exon 153161270 153161398 . + . Parent=gene2834 chrX ENCODE CDS 153161270 153161398 . + 2 Parent=gene2834 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2834 chrX ENCODE CDS 153162391 153162436 . + 2 Parent=gene2834 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2834 chrX ENCODE CDS 153162666 153162751 . + 1 Parent=gene2834 chrX ENCODE exon 153163285 153163374 . + . Parent=gene2834 chrX ENCODE CDS 153163285 153163374 . + 2 Parent=gene2834 chrX ENCODE exon 153168891 153168932 . + . Parent=gene2834 chrX ENCODE CDS 153168891 153168932 . + 2 Parent=gene2834 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2834 chrX ENCODE CDS 153169218 153169280 . + 2 Parent=gene2834 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2834 chrX ENCODE CDS 153169398 153169450 . + 2 Parent=gene2834 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2834 chrX ENCODE CDS 153169844 153169921 . + 0 Parent=gene2834 chrX ENCODE exon 153170089 153170190 . + . Parent=gene2834 chrX ENCODE CDS 153170089 153170190 . + 0 Parent=gene2834 ### chrX ENCODE gene 153161345 153170178 . + . ID=gene2835;Name=XX-FW83563B9.3-018;name2=TAZ chrX ENCODE exon 153161345 153161398 . + . Parent=gene2835 chrX ENCODE exon 153162391 153162536 . + . Parent=gene2835 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2835 chrX ENCODE exon 153163285 153163374 . + . Parent=gene2835 chrX ENCODE exon 153168729 153168932 . + . Parent=gene2835 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2835 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2835 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2835 chrX ENCODE exon 153170089 153170178 . + . Parent=gene2835 ### chrX ENCODE gene 153161387 153168972 . + . ID=gene2836;name2=TAZ;Name=XX-FW83563B9.3-021 chrX ENCODE exon 153161387 153161398 . + . Parent=gene2836 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2836 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2836 chrX ENCODE exon 153168729 153168972 . + . Parent=gene2836 ### chrX ENCODE gene 153161899 153169138 . + . ID=gene2837;Name=XX-FW83563B9.3-019;name2=TAZ chrX ENCODE exon 153161899 153162049 . + . Parent=gene2837 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2837 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2837 chrX ENCODE exon 153163285 153163374 . + . Parent=gene2837 chrX ENCODE exon 153168729 153169138 . + . Parent=gene2837 ### chrX ENCODE gene 153161905 153162751 . + . ID=gene2838;Name=XX-FW83563B9.3-013;name2=TAZ chrX ENCODE exon 153161905 153162171 . + . Parent=gene2838 chrX ENCODE exon 153162391 153162436 . + . Parent=gene2838 chrX ENCODE exon 153162666 153162751 . + . Parent=gene2838 ### chrX ENCODE gene 153162149 153169015 . + . ID=gene2839;Name=XX-FW83563B9.3-007;name2=TAZ chrX ENCODE exon 153162149 153162751 . + . Parent=gene2839 chrX ENCODE exon 153168729 153169015 . + . Parent=gene2839 ### chrX ENCODE gene 153162275 153163325 . + . ID=gene2840;Name=XX-FW83563B9.3-020;name2=TAZ chrX ENCODE exon 153162275 153162751 . + . Parent=gene2840 chrX ENCODE exon 153163285 153163325 . + . Parent=gene2840 ### chrX ENCODE gene 153162713 153169327 . + . ID=gene2841;name2=TAZ;Name=XX-FW83563B9.3-022 chrX ENCODE exon 153162713 153162751 . + . Parent=gene2841 chrX ENCODE exon 153168729 153168809 . + . Parent=gene2841 chrX ENCODE exon 153168891 153168932 . + . Parent=gene2841 chrX ENCODE exon 153169218 153169327 . + . Parent=gene2841 ### chrX ENCODE gene 153167661 153170908 . + . ID=gene2842;Name=XX-FW83563B9.3-008;name2=TAZ chrX ENCODE exon 153167661 153168932 . + . Parent=gene2842 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2842 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2842 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2842 chrX ENCODE exon 153170089 153170908 . + . Parent=gene2842 ### chrX ENCODE gene 153168760 153170912 . + . ID=gene2843;Name=XX-FW83563B9.3-025;name2=TAZ chrX ENCODE exon 153168760 153168932 . + . Parent=gene2843 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2843 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2843 chrX ENCODE exon 153169844 153169879 . + . Parent=gene2843 chrX ENCODE exon 153170597 153170912 . + . Parent=gene2843 ### chrX ENCODE gene 153168839 153170223 . + . ID=gene2844;Name=XX-FW83563B9.3-023;name2=TAZ chrX ENCODE exon 153168839 153168932 . + . Parent=gene2844 chrX ENCODE exon 153169218 153169280 . + . Parent=gene2844 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2844 chrX ENCODE exon 153169898 153169921 . + . Parent=gene2844 chrX ENCODE exon 153170089 153170223 . + . Parent=gene2844 ### chrX ENCODE gene 153169177 153170510 . + . ID=gene2845;Name=XX-FW83563B9.3-024;name2=TAZ chrX ENCODE exon 153169177 153169280 . + . Parent=gene2845 chrX ENCODE exon 153169398 153169450 . + . Parent=gene2845 chrX ENCODE exon 153169844 153169921 . + . Parent=gene2845 chrX ENCODE exon 153170089 153170322 . + . Parent=gene2845 chrX ENCODE exon 153170443 153170510 . + . Parent=gene2845 ### chrX ENCODE gene 153177831 153183639 . + . ID=gene2846;Name=XX-FW83563B9.4-001;name2=ATP6AP1 chrX ENCODE exon 153177831 153178046 . + . Parent=gene2846 chrX ENCODE exon 153178241 153178367 . + . Parent=gene2846 chrX ENCODE exon 153181023 153181097 . + . Parent=gene2846 chrX ENCODE exon 153181459 153181652 . + . Parent=gene2846 chrX ENCODE exon 153182124 153182164 . + . Parent=gene2846 chrX ENCODE exon 153182828 153182913 . + . Parent=gene2846 chrX ENCODE exon 153183401 153183639 . + . Parent=gene2846 ### chrX ENCODE gene 153177838 153183639 . + . ID=gene2847;Name=XX-FW83563B9.4-003;name2=ATP6AP1 chrX ENCODE exon 153177838 153178046 . + . Parent=gene2847 chrX ENCODE exon 153178241 153178367 . + . Parent=gene2847 chrX ENCODE exon 153181023 153181097 . + . Parent=gene2847 chrX ENCODE exon 153181459 153181569 . + . Parent=gene2847 chrX ENCODE exon 153183401 153183639 . + . Parent=gene2847 ### chrX ENCODE gene 153177891 153183639 . + . ID=gene2848;Name=XX-FW83563B9.4-002;name2=ATP6AP1 chrX ENCODE exon 153177891 153178046 . + . Parent=gene2848 chrX ENCODE exon 153178241 153180850 . + . Parent=gene2848 chrX ENCODE exon 153181023 153181097 . + . Parent=gene2848 chrX ENCODE exon 153181459 153181652 . + . Parent=gene2848 chrX ENCODE exon 153182124 153182164 . + . Parent=gene2848 chrX ENCODE exon 153182828 153182913 . + . Parent=gene2848 chrX ENCODE exon 153183401 153183639 . + . Parent=gene2848 ### chrX ENCODE gene 153177934 153183639 . + . ID=gene2849;Name=XX-FW83563B9.4-006;name2=ATP6AP1 chrX ENCODE exon 153177934 153178046 . + . Parent=gene2849 chrX ENCODE exon 153178241 153178367 . + . Parent=gene2849 chrX ENCODE exon 153181023 153181097 . + . Parent=gene2849 chrX ENCODE exon 153182853 153182913 . + . Parent=gene2849 chrX ENCODE exon 153183401 153183639 . + . Parent=gene2849 ### chrX ENCODE gene 153178038 153183639 . + . ID=gene2850;Name=XX-FW83563B9.4-004;name2=ATP6AP1 chrX ENCODE exon 153178038 153178367 . + . Parent=gene2850 chrX ENCODE exon 153181023 153181097 . + . Parent=gene2850 chrX ENCODE exon 153181459 153181652 . + . Parent=gene2850 chrX ENCODE exon 153182124 153182164 . + . Parent=gene2850 chrX ENCODE exon 153182828 153182913 . + . Parent=gene2850 chrX ENCODE exon 153183401 153183639 . + . Parent=gene2850 ### chrX ENCODE gene 153236208 153242706 . + . ID=gene2851;Name=XX-FW81657B9.2-001;name2=FAM50A chrX ENCODE exon 153236208 153236397 . + . Parent=gene2851 chrX ENCODE CDS 153236287 153236397 . + 0 Parent=gene2851 chrX ENCODE exon 153237685 153237769 . + . Parent=gene2851 chrX ENCODE CDS 153237685 153237769 . + 0 Parent=gene2851 chrX ENCODE exon 153237864 153237963 . + . Parent=gene2851 chrX ENCODE CDS 153237864 153237963 . + 2 Parent=gene2851 chrX ENCODE exon 153238467 153238612 . + . Parent=gene2851 chrX ENCODE CDS 153238467 153238612 . + 1 Parent=gene2851 chrX ENCODE exon 153240536 153240612 . + . Parent=gene2851 chrX ENCODE CDS 153240536 153240612 . + 2 Parent=gene2851 chrX ENCODE exon 153240742 153240808 . + . Parent=gene2851 chrX ENCODE CDS 153240742 153240808 . + 0 Parent=gene2851 chrX ENCODE exon 153240945 153241006 . + . Parent=gene2851 chrX ENCODE CDS 153240945 153241006 . + 2 Parent=gene2851 chrX ENCODE exon 153241273 153241349 . + . Parent=gene2851 chrX ENCODE CDS 153241273 153241349 . + 0 Parent=gene2851 chrX ENCODE exon 153241733 153241787 . + . Parent=gene2851 chrX ENCODE CDS 153241733 153241787 . + 1 Parent=gene2851 chrX ENCODE exon 153241935 153241983 . + . Parent=gene2851 chrX ENCODE CDS 153241935 153241983 . + 0 Parent=gene2851 chrX ENCODE exon 153242081 153242151 . + . Parent=gene2851 chrX ENCODE CDS 153242081 153242151 . + 2 Parent=gene2851 chrX ENCODE exon 153242261 153242371 . + . Parent=gene2851 chrX ENCODE CDS 153242261 153242371 . + 0 Parent=gene2851 chrX ENCODE CDS 153242476 153242484 . + 0 Parent=gene2851 chrX ENCODE exon 153242476 153242706 . + . Parent=gene2851 ### chrX ENCODE gene 153236511 153242151 . + . ID=gene2852;Name=XX-FW81657B9.2-002;name2=FAM50A chrX ENCODE exon 153236511 153236961 . + . Parent=gene2852 chrX ENCODE exon 153237685 153237769 . + . Parent=gene2852 chrX ENCODE exon 153237864 153237963 . + . Parent=gene2852 chrX ENCODE exon 153238467 153238612 . + . Parent=gene2852 chrX ENCODE exon 153240536 153240612 . + . Parent=gene2852 chrX ENCODE exon 153240742 153240808 . + . Parent=gene2852 chrX ENCODE exon 153240945 153241006 . + . Parent=gene2852 chrX ENCODE exon 153241273 153241349 . + . Parent=gene2852 chrX ENCODE exon 153241733 153241787 . + . Parent=gene2852 chrX ENCODE exon 153241935 153241983 . + . Parent=gene2852 chrX ENCODE exon 153242081 153242151 . + . Parent=gene2852 ### chrX ENCODE gene 153237495 153237934 . + . ID=gene2853;Name=XX-FW81657B9.2-003;name2=FAM50A chrX ENCODE exon 153237495 153237769 . + . Parent=gene2853 chrX ENCODE exon 153237864 153237934 . + . Parent=gene2853 ### chrX ENCODE gene 153238318 153241187 . + . ID=gene2854;Name=XX-FW81657B9.2-004;name2=FAM50A chrX ENCODE exon 153238318 153238612 . + . Parent=gene2854 chrX ENCODE exon 153240536 153240612 . + . Parent=gene2854 chrX ENCODE exon 153240742 153240808 . + . Parent=gene2854 chrX ENCODE exon 153240945 153241187 . + . Parent=gene2854 ### chrX ENCODE gene 153238467 153242706 . + . ID=gene2855;name2=FAM50A;Name=XX-FW81657B9.2-005 chrX ENCODE exon 153238467 153238612 . + . Parent=gene2855 chrX ENCODE exon 153240536 153240612 . + . Parent=gene2855 chrX ENCODE exon 153240742 153240808 . + . Parent=gene2855 chrX ENCODE exon 153240945 153241006 . + . Parent=gene2855 chrX ENCODE exon 153241273 153241349 . + . Parent=gene2855 chrX ENCODE exon 153241733 153241983 . + . Parent=gene2855 chrX ENCODE exon 153242081 153242151 . + . Parent=gene2855 chrX ENCODE exon 153242261 153242371 . + . Parent=gene2855 chrX ENCODE exon 153242476 153242706 . + . Parent=gene2855 ### chrX ENCODE gene 153241939 153242341 . + . ID=gene2856;Name=XX-FW81657B9.2-006;name2=FAM50A chrX ENCODE exon 153241939 153242151 . + . Parent=gene2856 chrX ENCODE exon 153242261 153242341 . + . Parent=gene2856 ### chrX ENCODE gene 153250325 153265693 . + . ID=gene2857;name2=PLXNA3;Name=XX-FW81657B9.3-001 chrX ENCODE exon 153250325 153250472 . + . Parent=gene2857 chrX ENCODE exon 153252201 153252821 . + . Parent=gene2857 chrX ENCODE CDS 153252228 153252821 . + 0 Parent=gene2857 chrX ENCODE exon 153253143 153253682 . + . Parent=gene2857 chrX ENCODE CDS 153253143 153253682 . + 0 Parent=gene2857 chrX ENCODE exon 153254172 153254354 . + . Parent=gene2857 chrX ENCODE CDS 153254172 153254354 . + 0 Parent=gene2857 chrX ENCODE exon 153255438 153255566 . + . Parent=gene2857 chrX ENCODE CDS 153255438 153255566 . + 0 Parent=gene2857 chrX ENCODE exon 153255637 153255737 . + . Parent=gene2857 chrX ENCODE CDS 153255637 153255737 . + 0 Parent=gene2857 chrX ENCODE exon 153255998 153256121 . + . Parent=gene2857 chrX ENCODE CDS 153255998 153256121 . + 1 Parent=gene2857 chrX ENCODE exon 153256204 153256360 . + . Parent=gene2857 chrX ENCODE CDS 153256204 153256360 . + 0 Parent=gene2857 chrX ENCODE exon 153256449 153256548 . + . Parent=gene2857 chrX ENCODE CDS 153256449 153256548 . + 2 Parent=gene2857 chrX ENCODE exon 153256801 153256915 . + . Parent=gene2857 chrX ENCODE CDS 153256801 153256915 . + 1 Parent=gene2857 chrX ENCODE exon 153257065 153257265 . + . Parent=gene2857 chrX ENCODE CDS 153257065 153257265 . + 0 Parent=gene2857 chrX ENCODE exon 153257471 153257567 . + . Parent=gene2857 chrX ENCODE CDS 153257471 153257567 . + 0 Parent=gene2857 chrX ENCODE exon 153257704 153257894 . + . Parent=gene2857 chrX ENCODE CDS 153257704 153257894 . + 2 Parent=gene2857 chrX ENCODE exon 153257982 153258127 . + . Parent=gene2857 chrX ENCODE CDS 153257982 153258127 . + 0 Parent=gene2857 chrX ENCODE exon 153258197 153258317 . + . Parent=gene2857 chrX ENCODE CDS 153258197 153258317 . + 1 Parent=gene2857 chrX ENCODE exon 153258423 153258559 . + . Parent=gene2857 chrX ENCODE CDS 153258423 153258559 . + 0 Parent=gene2857 chrX ENCODE exon 153258670 153258840 . + . Parent=gene2857 chrX ENCODE CDS 153258670 153258840 . + 1 Parent=gene2857 chrX ENCODE exon 153259104 153259197 . + . Parent=gene2857 chrX ENCODE CDS 153259104 153259197 . + 1 Parent=gene2857 chrX ENCODE exon 153259279 153259518 . + . Parent=gene2857 chrX ENCODE CDS 153259279 153259518 . + 0 Parent=gene2857 chrX ENCODE exon 153259592 153259735 . + . Parent=gene2857 chrX ENCODE CDS 153259592 153259735 . + 0 Parent=gene2857 chrX ENCODE exon 153259814 153260048 . + . Parent=gene2857 chrX ENCODE CDS 153259814 153260048 . + 0 Parent=gene2857 chrX ENCODE exon 153260129 153260271 . + . Parent=gene2857 chrX ENCODE CDS 153260129 153260271 . + 2 Parent=gene2857 chrX ENCODE exon 153260350 153260606 . + . Parent=gene2857 chrX ENCODE CDS 153260350 153260606 . + 0 Parent=gene2857 chrX ENCODE exon 153260710 153260776 . + . Parent=gene2857 chrX ENCODE CDS 153260710 153260776 . + 1 Parent=gene2857 chrX ENCODE exon 153260870 153261016 . + . Parent=gene2857 chrX ENCODE CDS 153260870 153261016 . + 0 Parent=gene2857 chrX ENCODE exon 153261103 153261262 . + . Parent=gene2857 chrX ENCODE CDS 153261103 153261262 . + 0 Parent=gene2857 chrX ENCODE exon 153261426 153261529 . + . Parent=gene2857 chrX ENCODE CDS 153261426 153261529 . + 2 Parent=gene2857 chrX ENCODE exon 153261735 153261831 . + . Parent=gene2857 chrX ENCODE CDS 153261735 153261831 . + 0 Parent=gene2857 chrX ENCODE exon 153262024 153262214 . + . Parent=gene2857 chrX ENCODE CDS 153262024 153262214 . + 2 Parent=gene2857 chrX ENCODE exon 153262489 153262658 . + . Parent=gene2857 chrX ENCODE CDS 153262489 153262658 . + 0 Parent=gene2857 chrX ENCODE exon 153263152 153263364 . + . Parent=gene2857 chrX ENCODE CDS 153263152 153263364 . + 1 Parent=gene2857 chrX ENCODE exon 153263535 153263685 . + . Parent=gene2857 chrX ENCODE CDS 153263535 153263685 . + 1 Parent=gene2857 chrX ENCODE CDS 153264637 153264732 . + 0 Parent=gene2857 chrX ENCODE exon 153264637 153265693 . + . Parent=gene2857 ### chrX ENCODE gene 153250328 153253418 . + . ID=gene2858;Name=XX-FW81657B9.3-008;name2=PLXNA3 chrX ENCODE exon 153250328 153250472 . + . Parent=gene2858 chrX ENCODE exon 153253143 153253418 . + . Parent=gene2858 ### chrX ENCODE gene 153258138 153258812 . + . ID=gene2859;Name=XX-FW81657B9.3-004;name2=PLXNA3 chrX ENCODE exon 153258138 153258317 . + . Parent=gene2859 chrX ENCODE exon 153258423 153258559 . + . Parent=gene2859 chrX ENCODE exon 153258670 153258812 . + . Parent=gene2859 ### chrX ENCODE gene 153258466 153259222 . + . ID=gene2860;Name=XX-FW81657B9.3-005;name2=PLXNA3 chrX ENCODE exon 153258466 153258559 . + . Parent=gene2860 chrX ENCODE exon 153258670 153258840 . + . Parent=gene2860 chrX ENCODE exon 153259104 153259222 . + . Parent=gene2860 ### chrX ENCODE gene 153260664 153260916 . + . ID=gene2861;Name=XX-FW81657B9.3-006;name2=PLXNA3 chrX ENCODE exon 153260664 153260776 . + . Parent=gene2861 chrX ENCODE exon 153260870 153260916 . + . Parent=gene2861 ### chrX ENCODE gene 153260708 153261397 . + . ID=gene2862;Name=XX-FW81657B9.3-003;name2=PLXNA3 chrX ENCODE exon 153260708 153261016 . + . Parent=gene2862 chrX ENCODE exon 153261103 153261397 . + . Parent=gene2862 ### chrX ENCODE gene 153261129 153262755 . + . ID=gene2863;Name=XX-FW81657B9.3-007;name2=PLXNA3 chrX ENCODE exon 153261129 153261262 . + . Parent=gene2863 chrX ENCODE exon 153261426 153261529 . + . Parent=gene2863 chrX ENCODE exon 153261735 153261831 . + . Parent=gene2863 chrX ENCODE exon 153262024 153262214 . + . Parent=gene2863 chrX ENCODE exon 153262489 153262755 . + . Parent=gene2863 ### chrX ENCODE gene 153262894 153264743 . + . ID=gene2864;Name=XX-FW81657B9.3-002;name2=PLXNA3 chrX ENCODE exon 153262894 153263364 . + . Parent=gene2864 chrX ENCODE exon 153263535 153263685 . + . Parent=gene2864 chrX ENCODE exon 153264637 153264743 . + . Parent=gene2864 ### chrX ENCODE gene 153269812 153271300 . - . ID=gene2865;Name=XX-FW81657B9.4-001;name2=LAGE3 chrX ENCODE exon 153269812 153270101 . - . Parent=gene2865 chrX ENCODE CDS 153269987 153270101 . - 1 Parent=gene2865 chrX ENCODE exon 153270326 153270454 . - . Parent=gene2865 chrX ENCODE CDS 153270326 153270454 . - 1 Parent=gene2865 chrX ENCODE CDS 153270771 153270958 . - 0 Parent=gene2865 chrX ENCODE exon 153270771 153271300 . - . Parent=gene2865 ### chrX ENCODE gene 153275760 153278704 . - . ID=gene2866;Name=XX-FW89031B12.1-001;name2=UBL4 chrX ENCODE exon 153275760 153277692 . - . Parent=gene2866 chrX ENCODE CDS 153277582 153277692 . - 0 Parent=gene2866 chrX ENCODE exon 153277814 153278022 . - . Parent=gene2866 chrX ENCODE CDS 153277814 153278022 . - 2 Parent=gene2866 chrX ENCODE exon 153278271 153278376 . - . Parent=gene2866 chrX ENCODE CDS 153278271 153278376 . - 0 Parent=gene2866 chrX ENCODE CDS 153278580 153278627 . - 0 Parent=gene2866 chrX ENCODE exon 153278580 153278704 . - . Parent=gene2866 ### chrX ENCODE gene 153276326 153278655 . - . ID=gene2867;Name=XX-FW89031B12.1-003;name2=UBL4 chrX ENCODE exon 153276326 153277692 . - . Parent=gene2867 chrX ENCODE exon 153277814 153278022 . - . Parent=gene2867 chrX ENCODE exon 153278580 153278655 . - . Parent=gene2867 ### chrX ENCODE gene 153277236 153278658 . - . ID=gene2868;Name=XX-FW89031B12.1-002;name2=UBL4 chrX ENCODE exon 153277236 153277505 . - . Parent=gene2868 chrX ENCODE CDS 153277373 153277505 . - 1 Parent=gene2868 chrX ENCODE exon 153277646 153277692 . - . Parent=gene2868 chrX ENCODE CDS 153277646 153277692 . - 0 Parent=gene2868 chrX ENCODE exon 153277814 153278022 . - . Parent=gene2868 chrX ENCODE CDS 153277814 153278022 . - 2 Parent=gene2868 chrX ENCODE exon 153278271 153278376 . - . Parent=gene2868 chrX ENCODE CDS 153278271 153278376 . - 0 Parent=gene2868 chrX ENCODE CDS 153278580 153278627 . - 0 Parent=gene2868 chrX ENCODE exon 153278580 153278658 . - . Parent=gene2868 ### chrX ENCODE gene 153277396 153278145 . - . ID=gene2869;Name=XX-FW89031B12.1-004;name2=UBL4 chrX ENCODE exon 153277396 153277692 . - . Parent=gene2869 chrX ENCODE exon 153277814 153278145 . - . Parent=gene2869 ### chrX ENCODE gene 153277419 153278629 . - . ID=gene2870;Name=XX-FW89031B12.1-005;name2=UBL4 chrX ENCODE exon 153277419 153277692 . - . Parent=gene2870 chrX ENCODE exon 153277814 153278126 . - . Parent=gene2870 chrX ENCODE exon 153278271 153278376 . - . Parent=gene2870 chrX ENCODE exon 153278580 153278629 . - . Parent=gene2870 ### chrX ENCODE gene 153279349 153282657 . - . ID=gene2871;Name=XX-FW89031B12.2-001;name2=SLC10A3 chrX ENCODE exon 153279349 153280539 . - . Parent=gene2871 chrX ENCODE CDS 153279550 153280539 . - 0 Parent=gene2871 chrX ENCODE CDS 153280627 153280983 . - 0 Parent=gene2871 chrX ENCODE exon 153280627 153281125 . - . Parent=gene2871 chrX ENCODE exon 153282350 153282401 . - . Parent=gene2871 chrX ENCODE exon 153282637 153282657 . - . Parent=gene2871 ### chrX ENCODE gene 153279354 153282671 . - . ID=gene2872;Name=XX-FW89031B12.2-004;name2=SLC10A3 chrX ENCODE exon 153279354 153281125 . - . Parent=gene2872 chrX ENCODE CDS 153279550 153280983 . - 0 Parent=gene2872 chrX ENCODE exon 153281985 153282070 . - . Parent=gene2872 chrX ENCODE exon 153282637 153282671 . - . Parent=gene2872 ### chrX ENCODE gene 153279386 153282706 . - . ID=gene2873;Name=XX-FW89031B12.2-002;name2=SLC10A3 chrX ENCODE exon 153279386 153281125 . - . Parent=gene2873 chrX ENCODE CDS 153279550 153280983 . - 0 Parent=gene2873 chrX ENCODE exon 153282350 153282401 . - . Parent=gene2873 chrX ENCODE exon 153282637 153282706 . - . Parent=gene2873 ### chrX ENCODE gene 153280330 153282700 . - . ID=gene2874;Name=XX-FW89031B12.2-003;name2=SLC10A3 chrX ENCODE CDS 153280330 153280983 . - 0 Parent=gene2874 chrX ENCODE exon 153280330 153281125 . - . Parent=gene2874 chrX ENCODE exon 153282350 153282700 . - . Parent=gene2874 ### chrX ENCODE gene 153298194 153308264 . - . ID=gene2875;Name=XX-FW89031B12.3-001;name2=FAM3A chrX ENCODE exon 153298194 153298941 . - . Parent=gene2875 chrX ENCODE CDS 153298846 153298941 . - 0 Parent=gene2875 chrX ENCODE exon 153299238 153299364 . - . Parent=gene2875 chrX ENCODE CDS 153299238 153299364 . - 1 Parent=gene2875 chrX ENCODE exon 153299441 153299525 . - . Parent=gene2875 chrX ENCODE CDS 153299441 153299525 . - 2 Parent=gene2875 chrX ENCODE exon 153299846 153299896 . - . Parent=gene2875 chrX ENCODE CDS 153299846 153299896 . - 2 Parent=gene2875 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2875 chrX ENCODE CDS 153300324 153300382 . - 1 Parent=gene2875 chrX ENCODE exon 153300509 153300632 . - . Parent=gene2875 chrX ENCODE CDS 153300509 153300632 . - 2 Parent=gene2875 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2875 chrX ENCODE CDS 153303885 153303908 . - 2 Parent=gene2875 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2875 chrX ENCODE CDS 153304851 153304964 . - 2 Parent=gene2875 chrX ENCODE CDS 153307788 153307800 . - 0 Parent=gene2875 chrX ENCODE exon 153307788 153307840 . - . Parent=gene2875 chrX ENCODE exon 153307938 153308264 . - . Parent=gene2875 ### chrX ENCODE gene 153298206 153308144 . - . ID=gene2876;Name=XX-FW89031B12.3-003;name2=FAM3A chrX ENCODE exon 153298206 153298941 . - . Parent=gene2876 chrX ENCODE CDS 153298846 153298941 . - 0 Parent=gene2876 chrX ENCODE exon 153299238 153299364 . - . Parent=gene2876 chrX ENCODE CDS 153299238 153299364 . - 1 Parent=gene2876 chrX ENCODE exon 153299441 153299525 . - . Parent=gene2876 chrX ENCODE CDS 153299441 153299525 . - 2 Parent=gene2876 chrX ENCODE exon 153299846 153299896 . - . Parent=gene2876 chrX ENCODE CDS 153299846 153299896 . - 2 Parent=gene2876 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2876 chrX ENCODE CDS 153300324 153300382 . - 1 Parent=gene2876 chrX ENCODE exon 153300509 153300632 . - . Parent=gene2876 chrX ENCODE CDS 153300509 153300632 . - 2 Parent=gene2876 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2876 chrX ENCODE CDS 153303885 153303908 . - 2 Parent=gene2876 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2876 chrX ENCODE CDS 153304851 153304964 . - 2 Parent=gene2876 chrX ENCODE CDS 153307788 153307800 . - 0 Parent=gene2876 chrX ENCODE exon 153307788 153307840 . - . Parent=gene2876 chrX ENCODE exon 153307997 153308144 . - . Parent=gene2876 ### chrX ENCODE gene 153298206 153308267 . - . ID=gene2877;Name=XX-FW89031B12.3-004;name2=FAM3A chrX ENCODE exon 153298206 153298941 . - . Parent=gene2877 chrX ENCODE CDS 153298846 153298941 . - 0 Parent=gene2877 chrX ENCODE exon 153299238 153299364 . - . Parent=gene2877 chrX ENCODE CDS 153299238 153299364 . - 1 Parent=gene2877 chrX ENCODE exon 153299441 153299525 . - . Parent=gene2877 chrX ENCODE CDS 153299441 153299525 . - 2 Parent=gene2877 chrX ENCODE exon 153299846 153299896 . - . Parent=gene2877 chrX ENCODE CDS 153299846 153299896 . - 2 Parent=gene2877 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2877 chrX ENCODE CDS 153300324 153300382 . - 1 Parent=gene2877 chrX ENCODE exon 153300509 153300632 . - . Parent=gene2877 chrX ENCODE CDS 153300509 153300632 . - 2 Parent=gene2877 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2877 chrX ENCODE CDS 153303885 153303908 . - 2 Parent=gene2877 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2877 chrX ENCODE CDS 153304851 153304964 . - 2 Parent=gene2877 chrX ENCODE CDS 153307788 153307800 . - 0 Parent=gene2877 chrX ENCODE exon 153307788 153308267 . - . Parent=gene2877 ### chrX ENCODE gene 153298206 153308270 . - . ID=gene2878;Name=XX-FW89031B12.3-002;name2=FAM3A chrX ENCODE exon 153298206 153298941 . - . Parent=gene2878 chrX ENCODE exon 153299238 153299364 . - . Parent=gene2878 chrX ENCODE exon 153299441 153299525 . - . Parent=gene2878 chrX ENCODE exon 153299846 153299896 . - . Parent=gene2878 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2878 chrX ENCODE exon 153300509 153300632 . - . Parent=gene2878 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2878 chrX ENCODE exon 153304342 153304439 . - . Parent=gene2878 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2878 chrX ENCODE exon 153307788 153308270 . - . Parent=gene2878 ### chrX ENCODE gene 153298208 153303449 . - . ID=gene2879;Name=XX-FW89031B12.3-005;name2=FAM3A chrX ENCODE exon 153298208 153298941 . - . Parent=gene2879 chrX ENCODE exon 153299238 153299364 . - . Parent=gene2879 chrX ENCODE exon 153299441 153299525 . - . Parent=gene2879 chrX ENCODE exon 153299846 153299896 . - . Parent=gene2879 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2879 chrX ENCODE exon 153300509 153303449 . - . Parent=gene2879 ### chrX ENCODE gene 153298239 153308270 . - . ID=gene2880;Name=XX-FW89031B12.3-011;name2=FAM3A chrX ENCODE exon 153298239 153298941 . - . Parent=gene2880 chrX ENCODE exon 153299238 153299364 . - . Parent=gene2880 chrX ENCODE exon 153299441 153299525 . - . Parent=gene2880 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2880 chrX ENCODE exon 153300509 153300632 . - . Parent=gene2880 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2880 chrX ENCODE exon 153304342 153304439 . - . Parent=gene2880 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2880 chrX ENCODE exon 153307788 153308270 . - . Parent=gene2880 ### chrX ENCODE gene 153298570 153308266 . - . ID=gene2881;Name=XX-FW89031B12.3-012;name2=FAM3A chrX ENCODE exon 153298570 153298941 . - . Parent=gene2881 chrX ENCODE CDS 153298846 153298941 . - 0 Parent=gene2881 chrX ENCODE exon 153299238 153299364 . - . Parent=gene2881 chrX ENCODE CDS 153299238 153299364 . - 1 Parent=gene2881 chrX ENCODE exon 153299441 153299525 . - . Parent=gene2881 chrX ENCODE CDS 153299441 153299525 . - 2 Parent=gene2881 chrX ENCODE exon 153299846 153299917 . - . Parent=gene2881 chrX ENCODE CDS 153299846 153299917 . - 2 Parent=gene2881 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2881 chrX ENCODE CDS 153300324 153300382 . - 1 Parent=gene2881 chrX ENCODE exon 153300509 153300632 . - . Parent=gene2881 chrX ENCODE CDS 153300509 153300632 . - 2 Parent=gene2881 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2881 chrX ENCODE CDS 153303885 153303908 . - 2 Parent=gene2881 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2881 chrX ENCODE CDS 153304851 153304964 . - 2 Parent=gene2881 chrX ENCODE CDS 153307788 153307800 . - 0 Parent=gene2881 chrX ENCODE exon 153307788 153307840 . - . Parent=gene2881 chrX ENCODE exon 153307938 153308266 . - . Parent=gene2881 ### chrX ENCODE gene 153298746 153299626 . - . ID=gene2882;Name=XX-FW89031B12.3-010;name2=FAM3A chrX ENCODE exon 153298746 153298941 . - . Parent=gene2882 chrX ENCODE exon 153299238 153299626 . - . Parent=gene2882 ### chrX ENCODE gene 153298890 153308188 . - . ID=gene2883;Name=XX-FW89031B12.3-017;name2=FAM3A chrX ENCODE exon 153298890 153298941 . - . Parent=gene2883 chrX ENCODE CDS 153298890 153298941 . - 0 Parent=gene2883 chrX ENCODE exon 153299238 153299364 . - . Parent=gene2883 chrX ENCODE CDS 153299238 153299364 . - 1 Parent=gene2883 chrX ENCODE exon 153299441 153299525 . - . Parent=gene2883 chrX ENCODE CDS 153299441 153299525 . - 2 Parent=gene2883 chrX ENCODE exon 153299846 153299896 . - . Parent=gene2883 chrX ENCODE CDS 153299846 153299896 . - 2 Parent=gene2883 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2883 chrX ENCODE CDS 153300324 153300382 . - 1 Parent=gene2883 chrX ENCODE exon 153300509 153300632 . - . Parent=gene2883 chrX ENCODE CDS 153300509 153300632 . - 2 Parent=gene2883 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2883 chrX ENCODE CDS 153303885 153303908 . - 2 Parent=gene2883 chrX ENCODE CDS 153307788 153307800 . - 0 Parent=gene2883 chrX ENCODE exon 153307788 153307840 . - . Parent=gene2883 chrX ENCODE exon 153307938 153308188 . - . Parent=gene2883 ### chrX ENCODE gene 153299238 153308258 . - . ID=gene2884;Name=XX-FW89031B12.3-007;name2=FAM3A chrX ENCODE exon 153299238 153299364 . - . Parent=gene2884 chrX ENCODE exon 153299441 153299525 . - . Parent=gene2884 chrX ENCODE exon 153299846 153299896 . - . Parent=gene2884 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2884 chrX ENCODE exon 153300509 153300632 . - . Parent=gene2884 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2884 chrX ENCODE exon 153304342 153304439 . - . Parent=gene2884 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2884 chrX ENCODE exon 153307788 153307840 . - . Parent=gene2884 chrX ENCODE exon 153307938 153308258 . - . Parent=gene2884 ### chrX ENCODE gene 153299282 153308243 . - . ID=gene2885;Name=XX-FW89031B12.3-008;name2=FAM3A chrX ENCODE exon 153299282 153299364 . - . Parent=gene2885 chrX ENCODE exon 153299441 153299525 . - . Parent=gene2885 chrX ENCODE exon 153299846 153299896 . - . Parent=gene2885 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2885 chrX ENCODE exon 153300509 153300846 . - . Parent=gene2885 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2885 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2885 chrX ENCODE exon 153307788 153307840 . - . Parent=gene2885 chrX ENCODE exon 153307938 153308243 . - . Parent=gene2885 ### chrX ENCODE gene 153299715 153307849 . - . ID=gene2886;Name=XX-FW89031B12.3-013;name2=FAM3A chrX ENCODE exon 153299715 153299896 . - . Parent=gene2886 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2886 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2886 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2886 chrX ENCODE exon 153307788 153307849 . - . Parent=gene2886 ### chrX ENCODE gene 153299846 153308265 . - . ID=gene2887;Name=XX-FW89031B12.3-006;name2=FAM3A chrX ENCODE exon 153299846 153299896 . - . Parent=gene2887 chrX ENCODE exon 153300324 153300382 . - . Parent=gene2887 chrX ENCODE exon 153300509 153300687 . - . Parent=gene2887 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2887 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2887 chrX ENCODE exon 153307788 153308265 . - . Parent=gene2887 ### chrX ENCODE gene 153300324 153308198 . - . ID=gene2888;Name=XX-FW89031B12.3-009;name2=FAM3A chrX ENCODE exon 153300324 153300382 . - . Parent=gene2888 chrX ENCODE exon 153300509 153300846 . - . Parent=gene2888 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2888 chrX ENCODE exon 153307788 153308198 . - . Parent=gene2888 ### chrX ENCODE gene 153300351 153308193 . - . ID=gene2889;Name=XX-FW89031B12.3-016;name2=FAM3A chrX ENCODE exon 153300351 153300382 . - . Parent=gene2889 chrX ENCODE exon 153300509 153300687 . - . Parent=gene2889 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2889 chrX ENCODE exon 153304342 153304439 . - . Parent=gene2889 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2889 chrX ENCODE exon 153307788 153308193 . - . Parent=gene2889 ### chrX ENCODE gene 153300488 153308186 . - . ID=gene2890;Name=XX-FW89031B12.3-019;name2=FAM3A chrX ENCODE exon 153300488 153300632 . - . Parent=gene2890 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2890 chrX ENCODE exon 153307788 153308186 . - . Parent=gene2890 ### chrX ENCODE gene 153300607 153308237 . - . ID=gene2891;Name=XX-FW89031B12.3-018;name2=FAM3A chrX ENCODE exon 153300607 153300632 . - . Parent=gene2891 chrX ENCODE CDS 153300607 153300632 . - 2 Parent=gene2891 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2891 chrX ENCODE CDS 153303885 153303908 . - 2 Parent=gene2891 chrX ENCODE CDS 153307788 153307800 . - 0 Parent=gene2891 chrX ENCODE exon 153307788 153308237 . - . Parent=gene2891 ### chrX ENCODE gene 153300804 153308193 . - . ID=gene2892;Name=XX-FW89031B12.3-015;name2=FAM3A chrX ENCODE exon 153300804 153300846 . - . Parent=gene2892 chrX ENCODE exon 153303885 153303908 . - . Parent=gene2892 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2892 chrX ENCODE exon 153307788 153308193 . - . Parent=gene2892 ### chrX ENCODE gene 153303905 153308257 . - . ID=gene2893;Name=XX-FW89031B12.3-014;name2=FAM3A chrX ENCODE exon 153303905 153303908 . - . Parent=gene2893 chrX ENCODE exon 153304342 153304459 . - . Parent=gene2893 chrX ENCODE exon 153304851 153304964 . - . Parent=gene2893 chrX ENCODE exon 153307788 153308257 . - . Parent=gene2893 ### chrX ENCODE gene 153323310 153339173 . - . ID=gene2894;Name=AF277315.16-001;name2=G6PD chrX ENCODE exon 153323310 153324009 . - . Parent=gene2894 chrX ENCODE CDS 153323919 153324009 . - 1 Parent=gene2894 chrX ENCODE exon 153324107 153324199 . - . Parent=gene2894 chrX ENCODE CDS 153324107 153324199 . - 1 Parent=gene2894 chrX ENCODE exon 153324305 153324381 . - . Parent=gene2894 chrX ENCODE CDS 153324305 153324381 . - 0 Parent=gene2894 chrX ENCODE exon 153324486 153324721 . - . Parent=gene2894 chrX ENCODE CDS 153324486 153324721 . - 2 Parent=gene2894 chrX ENCODE exon 153324861 153325047 . - . Parent=gene2894 chrX ENCODE CDS 153324861 153325047 . - 0 Parent=gene2894 chrX ENCODE exon 153325495 153325588 . - . Parent=gene2894 chrX ENCODE CDS 153325495 153325588 . - 1 Parent=gene2894 chrX ENCODE exon 153325954 153326079 . - . Parent=gene2894 chrX ENCODE CDS 153325954 153326079 . - 1 Parent=gene2894 chrX ENCODE exon 153326257 153326415 . - . Parent=gene2894 chrX ENCODE CDS 153326257 153326415 . - 1 Parent=gene2894 chrX ENCODE exon 153327087 153327304 . - . Parent=gene2894 chrX ENCODE CDS 153327087 153327304 . - 0 Parent=gene2894 chrX ENCODE exon 153327856 153327964 . - . Parent=gene2894 chrX ENCODE CDS 153327856 153327964 . - 1 Parent=gene2894 chrX ENCODE exon 153328060 153328097 . - . Parent=gene2894 chrX ENCODE CDS 153328060 153328097 . - 0 Parent=gene2894 chrX ENCODE exon 153337955 153338082 . - . Parent=gene2894 chrX ENCODE CDS 153337955 153338082 . - 2 Parent=gene2894 chrX ENCODE CDS 153338708 153338789 . - 0 Parent=gene2894 chrX ENCODE exon 153338708 153339173 . - . Parent=gene2894 ### chrX ENCODE gene 153323919 153339491 . - . ID=gene2895;Name=AF277315.16-006;name2=G6PD chrX ENCODE exon 153323919 153324009 . - . Parent=gene2895 chrX ENCODE CDS 153323919 153324009 . - 1 Parent=gene2895 chrX ENCODE exon 153324107 153324199 . - . Parent=gene2895 chrX ENCODE CDS 153324107 153324199 . - 1 Parent=gene2895 chrX ENCODE exon 153324305 153324381 . - . Parent=gene2895 chrX ENCODE CDS 153324305 153324381 . - 0 Parent=gene2895 chrX ENCODE exon 153324486 153324721 . - . Parent=gene2895 chrX ENCODE CDS 153324486 153324721 . - 2 Parent=gene2895 chrX ENCODE exon 153324861 153325047 . - . Parent=gene2895 chrX ENCODE CDS 153324861 153325047 . - 0 Parent=gene2895 chrX ENCODE exon 153325495 153325588 . - . Parent=gene2895 chrX ENCODE CDS 153325495 153325588 . - 1 Parent=gene2895 chrX ENCODE exon 153325954 153326079 . - . Parent=gene2895 chrX ENCODE CDS 153325954 153326079 . - 1 Parent=gene2895 chrX ENCODE exon 153326257 153326415 . - . Parent=gene2895 chrX ENCODE CDS 153326257 153326415 . - 1 Parent=gene2895 chrX ENCODE exon 153327087 153327304 . - . Parent=gene2895 chrX ENCODE CDS 153327087 153327304 . - 0 Parent=gene2895 chrX ENCODE exon 153327856 153327964 . - . Parent=gene2895 chrX ENCODE CDS 153327856 153327964 . - 1 Parent=gene2895 chrX ENCODE exon 153328060 153328097 . - . Parent=gene2895 chrX ENCODE CDS 153328060 153328097 . - 0 Parent=gene2895 chrX ENCODE CDS 153337955 153338074 . - 0 Parent=gene2895 chrX ENCODE exon 153337955 153338082 . - . Parent=gene2895 chrX ENCODE exon 153339387 153339491 . - . Parent=gene2895 ### chrX ENCODE gene 153323919 153339491 . - . ID=gene2896;Name=AF277315.16-010;name2=G6PD chrX ENCODE exon 153323919 153324009 . - . Parent=gene2896 chrX ENCODE CDS 153323919 153324009 . - 1 Parent=gene2896 chrX ENCODE exon 153324107 153324199 . - . Parent=gene2896 chrX ENCODE CDS 153324107 153324199 . - 1 Parent=gene2896 chrX ENCODE exon 153324305 153324381 . - . Parent=gene2896 chrX ENCODE CDS 153324305 153324381 . - 0 Parent=gene2896 chrX ENCODE exon 153324486 153324721 . - . Parent=gene2896 chrX ENCODE CDS 153324486 153324721 . - 2 Parent=gene2896 chrX ENCODE exon 153324861 153325047 . - . Parent=gene2896 chrX ENCODE CDS 153324861 153325047 . - 0 Parent=gene2896 chrX ENCODE exon 153325495 153325726 . - . Parent=gene2896 chrX ENCODE CDS 153325495 153325726 . - 1 Parent=gene2896 chrX ENCODE exon 153325954 153326079 . - . Parent=gene2896 chrX ENCODE CDS 153325954 153326079 . - 1 Parent=gene2896 chrX ENCODE exon 153326257 153326415 . - . Parent=gene2896 chrX ENCODE CDS 153326257 153326415 . - 1 Parent=gene2896 chrX ENCODE exon 153327087 153327304 . - . Parent=gene2896 chrX ENCODE CDS 153327087 153327304 . - 0 Parent=gene2896 chrX ENCODE exon 153327856 153327964 . - . Parent=gene2896 chrX ENCODE CDS 153327856 153327964 . - 1 Parent=gene2896 chrX ENCODE exon 153328060 153328097 . - . Parent=gene2896 chrX ENCODE CDS 153328060 153328097 . - 0 Parent=gene2896 chrX ENCODE CDS 153337955 153338074 . - 0 Parent=gene2896 chrX ENCODE exon 153337955 153338082 . - . Parent=gene2896 chrX ENCODE exon 153339387 153339491 . - . Parent=gene2896 ### chrX ENCODE gene 153324002 153324993 . - . ID=gene2897;Name=AF277315.16-009;name2=G6PD chrX ENCODE exon 153324002 153324199 . - . Parent=gene2897 chrX ENCODE exon 153324305 153324381 . - . Parent=gene2897 chrX ENCODE exon 153324486 153324993 . - . Parent=gene2897 ### chrX ENCODE gene 153324899 153338757 . - . ID=gene2898;Name=AF277315.16-002;name2=G6PD chrX ENCODE exon 153324899 153325047 . - . Parent=gene2898 chrX ENCODE CDS 153324899 153325047 . - 2 Parent=gene2898 chrX ENCODE exon 153325495 153325588 . - . Parent=gene2898 chrX ENCODE CDS 153325495 153325588 . - 0 Parent=gene2898 chrX ENCODE exon 153325954 153326079 . - . Parent=gene2898 chrX ENCODE CDS 153325954 153326079 . - 0 Parent=gene2898 chrX ENCODE exon 153326257 153326418 . - . Parent=gene2898 chrX ENCODE CDS 153326257 153326418 . - 0 Parent=gene2898 chrX ENCODE exon 153327087 153327304 . - . Parent=gene2898 chrX ENCODE CDS 153327087 153327304 . - 2 Parent=gene2898 chrX ENCODE exon 153327856 153327964 . - . Parent=gene2898 chrX ENCODE CDS 153327856 153327964 . - 0 Parent=gene2898 chrX ENCODE exon 153328060 153328097 . - . Parent=gene2898 chrX ENCODE CDS 153328060 153328097 . - 2 Parent=gene2898 chrX ENCODE exon 153337955 153338082 . - . Parent=gene2898 chrX ENCODE CDS 153337955 153338082 . - 1 Parent=gene2898 chrX ENCODE exon 153338708 153338757 . - . Parent=gene2898 chrX ENCODE CDS 153338708 153338757 . - 0 Parent=gene2898 ### chrX ENCODE gene 153324953 153339476 . - . ID=gene2899;Name=AF277315.16-007;name2=G6PD chrX ENCODE exon 153324953 153325047 . - . Parent=gene2899 chrX ENCODE CDS 153324953 153325047 . - 0 Parent=gene2899 chrX ENCODE exon 153325495 153325588 . - . Parent=gene2899 chrX ENCODE CDS 153325495 153325588 . - 1 Parent=gene2899 chrX ENCODE exon 153325954 153326079 . - . Parent=gene2899 chrX ENCODE CDS 153325954 153326079 . - 1 Parent=gene2899 chrX ENCODE exon 153326257 153326418 . - . Parent=gene2899 chrX ENCODE CDS 153326257 153326418 . - 1 Parent=gene2899 chrX ENCODE exon 153327087 153327304 . - . Parent=gene2899 chrX ENCODE CDS 153327087 153327304 . - 0 Parent=gene2899 chrX ENCODE exon 153327856 153327964 . - . Parent=gene2899 chrX ENCODE CDS 153327856 153327964 . - 1 Parent=gene2899 chrX ENCODE exon 153328060 153328097 . - . Parent=gene2899 chrX ENCODE CDS 153328060 153328097 . - 0 Parent=gene2899 chrX ENCODE CDS 153337955 153338074 . - 0 Parent=gene2899 chrX ENCODE exon 153337955 153338078 . - . Parent=gene2899 chrX ENCODE exon 153339387 153339476 . - . Parent=gene2899 ### chrX ENCODE gene 153325236 153326112 . - . ID=gene2900;name2=G6PD;Name=AF277315.16-008 chrX ENCODE exon 153325236 153325588 . - . Parent=gene2900 chrX ENCODE exon 153325954 153326112 . - . Parent=gene2900 ### chrX ENCODE gene 153325955 153338751 . - . ID=gene2901;Name=AF277315.16-005;name2=G6PD chrX ENCODE exon 153325955 153326079 . - . Parent=gene2901 chrX ENCODE CDS 153325955 153326079 . - 1 Parent=gene2901 chrX ENCODE exon 153326257 153326415 . - . Parent=gene2901 chrX ENCODE CDS 153326257 153326415 . - 1 Parent=gene2901 chrX ENCODE exon 153327087 153327304 . - . Parent=gene2901 chrX ENCODE CDS 153327087 153327304 . - 0 Parent=gene2901 chrX ENCODE exon 153327856 153327964 . - . Parent=gene2901 chrX ENCODE CDS 153327856 153327964 . - 1 Parent=gene2901 chrX ENCODE exon 153328060 153328097 . - . Parent=gene2901 chrX ENCODE CDS 153328060 153328097 . - 0 Parent=gene2901 chrX ENCODE exon 153337955 153338078 . - . Parent=gene2901 chrX ENCODE CDS 153337955 153338078 . - 1 Parent=gene2901 chrX ENCODE exon 153338708 153338751 . - . Parent=gene2901 chrX ENCODE CDS 153338708 153338751 . - 0 Parent=gene2901 ### chrX ENCODE gene 153326994 153338028 . - . ID=gene2902;name2=G6PD;Name=AF277315.16-004 chrX ENCODE exon 153326994 153327304 . - . Parent=gene2902 chrX ENCODE exon 153327856 153327964 . - . Parent=gene2902 chrX ENCODE exon 153328060 153328097 . - . Parent=gene2902 chrX ENCODE exon 153337955 153338028 . - . Parent=gene2902 ### chrX ENCODE gene 153327645 153338028 . - . ID=gene2903;Name=AF277315.16-003;name2=G6PD chrX ENCODE exon 153327645 153327964 . - . Parent=gene2903 chrX ENCODE exon 153328060 153328097 . - . Parent=gene2903 chrX ENCODE exon 153337955 153338028 . - . Parent=gene2903 ### chrX ENCODE gene 153333118 153353687 . + . ID=gene2904;Name=AF277315.14-007;name2=IKBKG chrX ENCODE exon 153333118 153333310 . + . Parent=gene2904 chrX ENCODE exon 153343907 153344108 . + . Parent=gene2904 chrX ENCODE CDS 153343922 153344108 . + 0 Parent=gene2904 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2904 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2904 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2904 chrX ENCODE CDS 153350451 153350569 . + 0 Parent=gene2904 chrX ENCODE exon 153352326 153352478 . + . Parent=gene2904 chrX ENCODE CDS 153352326 153352478 . + 1 Parent=gene2904 chrX ENCODE exon 153353607 153353687 . + . Parent=gene2904 chrX ENCODE CDS 153353607 153353687 . + 1 Parent=gene2904 ### chrX ENCODE gene 153333174 153352424 . + . ID=gene2905;Name=AF277315.14-008;name2=IKBKG chrX ENCODE exon 153333174 153333310 . + . Parent=gene2905 chrX ENCODE exon 153334201 153334371 . + . Parent=gene2905 chrX ENCODE exon 153343907 153344108 . + . Parent=gene2905 chrX ENCODE CDS 153343922 153344108 . + 0 Parent=gene2905 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2905 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2905 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2905 chrX ENCODE CDS 153350451 153350569 . + 0 Parent=gene2905 chrX ENCODE exon 153352326 153352424 . + . Parent=gene2905 chrX ENCODE CDS 153352326 153352424 . + 1 Parent=gene2905 ### chrX ENCODE gene 153334163 153356952 . + . ID=gene2906;Name=AF277315.14-002;name2=IKBKG chrX ENCODE exon 153334163 153334371 . + . Parent=gene2906 chrX ENCODE CDS 153334183 153334371 . + 0 Parent=gene2906 chrX ENCODE exon 153343907 153344108 . + . Parent=gene2906 chrX ENCODE CDS 153343907 153344108 . + 0 Parent=gene2906 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2906 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2906 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2906 chrX ENCODE CDS 153350451 153350569 . + 0 Parent=gene2906 chrX ENCODE exon 153352326 153352478 . + . Parent=gene2906 chrX ENCODE CDS 153352326 153352478 . + 1 Parent=gene2906 chrX ENCODE exon 153353607 153353703 . + . Parent=gene2906 chrX ENCODE CDS 153353607 153353703 . + 1 Parent=gene2906 chrX ENCODE exon 153354729 153354872 . + . Parent=gene2906 chrX ENCODE CDS 153354729 153354872 . + 0 Parent=gene2906 chrX ENCODE exon 153355478 153355620 . + . Parent=gene2906 chrX ENCODE CDS 153355478 153355620 . + 0 Parent=gene2906 chrX ENCODE exon 153355878 153355939 . + . Parent=gene2906 chrX ENCODE CDS 153355878 153355939 . + 1 Parent=gene2906 chrX ENCODE CDS 153356238 153356380 . + 2 Parent=gene2906 chrX ENCODE exon 153356238 153356952 . + . Parent=gene2906 ### chrX ENCODE gene 153334182 153356952 . + . ID=gene2907;Name=AF277315.14-003;name2=IKBKG chrX ENCODE exon 153334182 153334306 . + . Parent=gene2907 chrX ENCODE exon 153343907 153344108 . + . Parent=gene2907 chrX ENCODE CDS 153343922 153344108 . + 0 Parent=gene2907 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2907 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2907 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2907 chrX ENCODE CDS 153350451 153350569 . + 0 Parent=gene2907 chrX ENCODE exon 153352326 153352478 . + . Parent=gene2907 chrX ENCODE CDS 153352326 153352478 . + 1 Parent=gene2907 chrX ENCODE exon 153353607 153353703 . + . Parent=gene2907 chrX ENCODE CDS 153353607 153353703 . + 1 Parent=gene2907 chrX ENCODE exon 153354729 153354872 . + . Parent=gene2907 chrX ENCODE CDS 153354729 153354872 . + 0 Parent=gene2907 chrX ENCODE exon 153355478 153355620 . + . Parent=gene2907 chrX ENCODE CDS 153355478 153355620 . + 0 Parent=gene2907 chrX ENCODE exon 153355878 153355939 . + . Parent=gene2907 chrX ENCODE CDS 153355878 153355939 . + 1 Parent=gene2907 chrX ENCODE CDS 153356238 153356380 . + 2 Parent=gene2907 chrX ENCODE exon 153356238 153356952 . + . Parent=gene2907 ### chrX ENCODE gene 153337846 153350465 . + . ID=gene2908;Name=AF277315.14-012;name2=IKBKG chrX ENCODE exon 153337846 153338109 . + . Parent=gene2908 chrX ENCODE exon 153343907 153344108 . + . Parent=gene2908 chrX ENCODE CDS 153343922 153344108 . + 0 Parent=gene2908 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2908 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2908 chrX ENCODE exon 153350451 153350465 . + . Parent=gene2908 chrX ENCODE CDS 153350451 153350465 . + 0 Parent=gene2908 ### chrX ENCODE gene 153339226 153356952 . + . ID=gene2909;Name=AF277315.14-004;name2=IKBKG chrX ENCODE exon 153339226 153339664 . + . Parent=gene2909 chrX ENCODE exon 153343907 153344108 . + . Parent=gene2909 chrX ENCODE CDS 153343922 153344108 . + 0 Parent=gene2909 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2909 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2909 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2909 chrX ENCODE CDS 153350451 153350569 . + 0 Parent=gene2909 chrX ENCODE exon 153352326 153352478 . + . Parent=gene2909 chrX ENCODE CDS 153352326 153352478 . + 1 Parent=gene2909 chrX ENCODE exon 153353607 153353703 . + . Parent=gene2909 chrX ENCODE CDS 153353607 153353703 . + 1 Parent=gene2909 chrX ENCODE exon 153354729 153354872 . + . Parent=gene2909 chrX ENCODE CDS 153354729 153354872 . + 0 Parent=gene2909 chrX ENCODE exon 153355478 153355620 . + . Parent=gene2909 chrX ENCODE CDS 153355478 153355620 . + 0 Parent=gene2909 chrX ENCODE exon 153355878 153355939 . + . Parent=gene2909 chrX ENCODE CDS 153355878 153355939 . + 1 Parent=gene2909 chrX ENCODE CDS 153356238 153356380 . + 2 Parent=gene2909 chrX ENCODE exon 153356238 153356952 . + . Parent=gene2909 ### chrX ENCODE gene 153339278 153352430 . + . ID=gene2910;Name=AF277315.14-009;name2=IKBKG chrX ENCODE exon 153339278 153339554 . + . Parent=gene2910 chrX ENCODE exon 153343930 153344108 . + . Parent=gene2910 chrX ENCODE CDS 153343958 153344108 . + 0 Parent=gene2910 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2910 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2910 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2910 chrX ENCODE CDS 153350451 153350569 . + 0 Parent=gene2910 chrX ENCODE exon 153352326 153352430 . + . Parent=gene2910 chrX ENCODE CDS 153352326 153352430 . + 1 Parent=gene2910 ### chrX ENCODE gene 153339553 153356897 . + . ID=gene2911;name2=IKBKG;Name=AF277315.14-011 chrX ENCODE exon 153339553 153339664 . + . Parent=gene2911 chrX ENCODE exon 153343907 153344108 . + . Parent=gene2911 chrX ENCODE CDS 153343922 153344108 . + 0 Parent=gene2911 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2911 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2911 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2911 chrX ENCODE CDS 153350451 153350569 . + 0 Parent=gene2911 chrX ENCODE exon 153353607 153353703 . + . Parent=gene2911 chrX ENCODE CDS 153353607 153353703 . + 1 Parent=gene2911 chrX ENCODE exon 153354729 153354872 . + . Parent=gene2911 chrX ENCODE CDS 153354729 153354872 . + 0 Parent=gene2911 chrX ENCODE exon 153355478 153355620 . + . Parent=gene2911 chrX ENCODE CDS 153355478 153355620 . + 0 Parent=gene2911 chrX ENCODE exon 153355878 153355939 . + . Parent=gene2911 chrX ENCODE CDS 153355878 153355939 . + 1 Parent=gene2911 chrX ENCODE CDS 153356238 153356380 . + 2 Parent=gene2911 chrX ENCODE exon 153356238 153356897 . + . Parent=gene2911 ### chrX ENCODE gene 153339557 153359508 . + . ID=gene2912;Name=AF277315.14-014;name2=IKBKG chrX ENCODE exon 153339557 153339664 . + . Parent=gene2912 chrX ENCODE exon 153343907 153344108 . + . Parent=gene2912 chrX ENCODE CDS 153343922 153344108 . + 0 Parent=gene2912 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2912 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2912 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2912 chrX ENCODE CDS 153350451 153350569 . + 0 Parent=gene2912 chrX ENCODE exon 153352326 153352478 . + . Parent=gene2912 chrX ENCODE CDS 153352326 153352478 . + 1 Parent=gene2912 chrX ENCODE exon 153353607 153353682 . + . Parent=gene2912 chrX ENCODE CDS 153353607 153353682 . + 1 Parent=gene2912 chrX ENCODE exon 153354729 153354872 . + . Parent=gene2912 chrX ENCODE CDS 153354729 153354872 . + 0 Parent=gene2912 chrX ENCODE exon 153355478 153355620 . + . Parent=gene2912 chrX ENCODE CDS 153355478 153355620 . + 0 Parent=gene2912 chrX ENCODE exon 153355878 153355939 . + . Parent=gene2912 chrX ENCODE CDS 153355878 153355939 . + 1 Parent=gene2912 chrX ENCODE CDS 153356238 153356380 . + 2 Parent=gene2912 chrX ENCODE exon 153356238 153359508 . + . Parent=gene2912 ### chrX ENCODE gene 153339561 153356952 . + . ID=gene2913;name2=IKBKG;Name=AF277315.14-006 chrX ENCODE exon 153339561 153339664 . + . Parent=gene2913 chrX ENCODE exon 153343907 153344108 . + . Parent=gene2913 chrX ENCODE CDS 153343922 153344108 . + 0 Parent=gene2913 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2913 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2913 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2913 chrX ENCODE CDS 153350451 153350569 . + 0 Parent=gene2913 chrX ENCODE exon 153353607 153353703 . + . Parent=gene2913 chrX ENCODE CDS 153353607 153353703 . + 1 Parent=gene2913 chrX ENCODE exon 153355478 153355620 . + . Parent=gene2913 chrX ENCODE CDS 153355478 153355620 . + 0 Parent=gene2913 chrX ENCODE exon 153355878 153355939 . + . Parent=gene2913 chrX ENCODE CDS 153355878 153355939 . + 1 Parent=gene2913 chrX ENCODE CDS 153356238 153356380 . + 2 Parent=gene2913 chrX ENCODE exon 153356238 153356952 . + . Parent=gene2913 ### chrX ENCODE gene 153339609 153355560 . + . ID=gene2914;name2=IKBKG;Name=AF277315.14-013 chrX ENCODE exon 153339609 153339664 . + . Parent=gene2914 chrX ENCODE exon 153348212 153348295 . + . Parent=gene2914 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2914 chrX ENCODE CDS 153350454 153350569 . + 0 Parent=gene2914 chrX ENCODE exon 153352326 153352478 . + . Parent=gene2914 chrX ENCODE CDS 153352326 153352478 . + 1 Parent=gene2914 chrX ENCODE exon 153353607 153353682 . + . Parent=gene2914 chrX ENCODE CDS 153353607 153353682 . + 1 Parent=gene2914 chrX ENCODE exon 153354729 153354872 . + . Parent=gene2914 chrX ENCODE CDS 153354729 153354872 . + 0 Parent=gene2914 chrX ENCODE exon 153355478 153355560 . + . Parent=gene2914 chrX ENCODE CDS 153355478 153355560 . + 0 Parent=gene2914 ### chrX ENCODE gene 153339766 153356965 . + . ID=gene2915;Name=AF277315.14-005;name2=IKBKG chrX ENCODE exon 153339766 153340008 . + . Parent=gene2915 chrX ENCODE exon 153343907 153344108 . + . Parent=gene2915 chrX ENCODE CDS 153343922 153344108 . + 0 Parent=gene2915 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2915 chrX ENCODE CDS 153348084 153348295 . + 2 Parent=gene2915 chrX ENCODE exon 153350451 153350569 . + . Parent=gene2915 chrX ENCODE CDS 153350451 153350569 . + 0 Parent=gene2915 chrX ENCODE exon 153352326 153352478 . + . Parent=gene2915 chrX ENCODE CDS 153352326 153352478 . + 1 Parent=gene2915 chrX ENCODE exon 153353607 153353703 . + . Parent=gene2915 chrX ENCODE CDS 153353607 153353703 . + 1 Parent=gene2915 chrX ENCODE exon 153354729 153354872 . + . Parent=gene2915 chrX ENCODE CDS 153354729 153354872 . + 0 Parent=gene2915 chrX ENCODE exon 153355478 153355620 . + . Parent=gene2915 chrX ENCODE CDS 153355478 153355620 . + 0 Parent=gene2915 chrX ENCODE exon 153355878 153355939 . + . Parent=gene2915 chrX ENCODE CDS 153355878 153355939 . + 1 Parent=gene2915 chrX ENCODE CDS 153356238 153356380 . + 2 Parent=gene2915 chrX ENCODE exon 153356238 153356965 . + . Parent=gene2915 ### chrX ENCODE gene 153344090 153348779 . + . ID=gene2916;Name=AF277315.14-010;name2=IKBKG chrX ENCODE exon 153344090 153344108 . + . Parent=gene2916 chrX ENCODE exon 153348084 153348295 . + . Parent=gene2916 chrX ENCODE exon 153348459 153348779 . + . Parent=gene2916 ### chrX ENCODE gene 153354317 153355902 . + . ID=gene2917;Name=AF277315.14-001;name2=IKBKG chrX ENCODE exon 153354317 153354872 . + . Parent=gene2917 chrX ENCODE exon 153355478 153355620 . + . Parent=gene2917 chrX ENCODE exon 153355878 153355902 . + . Parent=gene2917 ### chrX ENCODE gene 153363183 153363895 . + . ID=gene2918;Name=AF277315.18-001;name2=CXorf52 chrX ENCODE exon 153363183 153363895 . + . Parent=gene2918 chrX ENCODE CDS 153363389 153363757 . + 0 Parent=gene2918 ### chrX ENCODE gene 153377111 153378779 . + . ID=gene2919;Name=AF277315.1-001;name2=CTAG1A chrX ENCODE exon 153377111 153377443 . + . Parent=gene2919 chrX ENCODE CDS 153377175 153377443 . + 0 Parent=gene2919 chrX ENCODE CDS 153378115 153378352 . + 1 Parent=gene2919 chrX ENCODE exon 153378115 153378779 . + . Parent=gene2919 ### chrX ENCODE gene 153377122 153378778 . + . ID=gene2920;Name=AF277315.1-002;name2=CTAG1A chrX ENCODE exon 153377122 153377443 . + . Parent=gene2920 chrX ENCODE CDS 153377175 153377443 . + 0 Parent=gene2920 chrX ENCODE exon 153378115 153378249 . + . Parent=gene2920 chrX ENCODE CDS 153378115 153378249 . + 1 Parent=gene2920 chrX ENCODE CDS 153378489 153378627 . + 1 Parent=gene2920 chrX ENCODE exon 153378489 153378778 . + . Parent=gene2920 ### chrX ENCODE gene 153409569 153411226 . - . ID=gene2921;Name=AF277315.7-002;name2=CTAG1B chrX ENCODE exon 153409569 153409859 . - . Parent=gene2921 chrX ENCODE CDS 153409721 153409859 . - 1 Parent=gene2921 chrX ENCODE exon 153410099 153410233 . - . Parent=gene2921 chrX ENCODE CDS 153410099 153410233 . - 1 Parent=gene2921 chrX ENCODE CDS 153410905 153411173 . - 0 Parent=gene2921 chrX ENCODE exon 153410905 153411226 . - . Parent=gene2921 ### chrX ENCODE gene 153409569 153411237 . - . ID=gene2922;Name=AF277315.7-001;name2=CTAG1B chrX ENCODE exon 153409569 153410233 . - . Parent=gene2922 chrX ENCODE CDS 153409996 153410233 . - 1 Parent=gene2922 chrX ENCODE CDS 153410905 153411173 . - 0 Parent=gene2922 chrX ENCODE exon 153410905 153411237 . - . Parent=gene2922 ### chrX ENCODE gene 153424440 153425152 . - . ID=gene2923;Name=AF277315.17-001;name2=AF277315.17 chrX ENCODE exon 153424440 153425152 . - . Parent=gene2923 chrX ENCODE CDS 153424578 153424946 . - 0 Parent=gene2923 ### chrX ENCODE gene 153443950 153445557 . - . ID=gene2924;name2=CTAG2;Name=AF277315.2-001 chrX ENCODE exon 153443950 153444609 . - . Parent=gene2924 chrX ENCODE CDS 153444246 153444609 . - 1 Parent=gene2924 chrX ENCODE CDS 153445225 153445493 . - 0 Parent=gene2924 chrX ENCODE exon 153445225 153445557 . - . Parent=gene2924 ### chrX ENCODE gene 153443955 153445546 . - . ID=gene2925;Name=AF277315.2-002;name2=CTAG2 chrX ENCODE exon 153443955 153444245 . - . Parent=gene2925 chrX ENCODE CDS 153444107 153444245 . - 1 Parent=gene2925 chrX ENCODE exon 153444475 153444609 . - . Parent=gene2925 chrX ENCODE CDS 153444475 153444609 . - 1 Parent=gene2925 chrX ENCODE CDS 153445225 153445493 . - 0 Parent=gene2925 chrX ENCODE exon 153445225 153445546 . - . Parent=gene2925 ### chrX ENCODE gene 153467233 153543562 . - . ID=gene2926;Name=CTD-2173L12.1-003;name2=GAB3 chrX ENCODE exon 153467233 153470275 . - . Parent=gene2926 chrX ENCODE exon 153472113 153472229 . - . Parent=gene2926 chrX ENCODE exon 153487896 153487998 . - . Parent=gene2926 chrX ENCODE exon 153489111 153489192 . - . Parent=gene2926 chrX ENCODE exon 153491273 153491492 . - . Parent=gene2926 chrX ENCODE exon 153491983 153492038 . - . Parent=gene2926 chrX ENCODE exon 153505186 153505405 . - . Parent=gene2926 chrX ENCODE exon 153508005 153508308 . - . Parent=gene2926 chrX ENCODE exon 153543471 153543562 . - . Parent=gene2926 ### chrX ENCODE gene 153467234 153543036 . - . ID=gene2927;Name=CTD-2173L12.1-001;name2=GAB3 chrX ENCODE exon 153467234 153470275 . - . Parent=gene2927 chrX ENCODE CDS 153470159 153470275 . - 0 Parent=gene2927 chrX ENCODE exon 153472113 153472229 . - . Parent=gene2927 chrX ENCODE CDS 153472113 153472229 . - 0 Parent=gene2927 chrX ENCODE exon 153487896 153487998 . - . Parent=gene2927 chrX ENCODE CDS 153487896 153487998 . - 1 Parent=gene2927 chrX ENCODE exon 153489111 153489192 . - . Parent=gene2927 chrX ENCODE CDS 153489111 153489192 . - 2 Parent=gene2927 chrX ENCODE exon 153491273 153491492 . - . Parent=gene2927 chrX ENCODE CDS 153491273 153491492 . - 0 Parent=gene2927 chrX ENCODE exon 153491983 153492038 . - . Parent=gene2927 chrX ENCODE CDS 153491983 153492038 . - 2 Parent=gene2927 chrX ENCODE exon 153504208 153504680 . - . Parent=gene2927 chrX ENCODE CDS 153504208 153504680 . - 1 Parent=gene2927 chrX ENCODE exon 153505186 153505402 . - . Parent=gene2927 chrX ENCODE CDS 153505186 153505402 . - 2 Parent=gene2927 chrX ENCODE exon 153508005 153508308 . - . Parent=gene2927 chrX ENCODE CDS 153508005 153508308 . - 0 Parent=gene2927 chrX ENCODE CDS 153542933 153543004 . - 0 Parent=gene2927 chrX ENCODE exon 153542933 153543036 . - . Parent=gene2927 ### chrX ENCODE gene 153468150 153543052 . - . ID=gene2928;Name=CTD-2173L12.1-002;name2=GAB3 chrX ENCODE exon 153468150 153470275 . - . Parent=gene2928 chrX ENCODE CDS 153470159 153470275 . - 0 Parent=gene2928 chrX ENCODE exon 153487896 153487998 . - . Parent=gene2928 chrX ENCODE CDS 153487896 153487998 . - 1 Parent=gene2928 chrX ENCODE exon 153489111 153489192 . - . Parent=gene2928 chrX ENCODE CDS 153489111 153489192 . - 2 Parent=gene2928 chrX ENCODE exon 153491273 153491492 . - . Parent=gene2928 chrX ENCODE CDS 153491273 153491492 . - 0 Parent=gene2928 chrX ENCODE exon 153491983 153492038 . - . Parent=gene2928 chrX ENCODE CDS 153491983 153492038 . - 2 Parent=gene2928 chrX ENCODE exon 153504208 153504680 . - . Parent=gene2928 chrX ENCODE CDS 153504208 153504680 . - 1 Parent=gene2928 chrX ENCODE exon 153505186 153505405 . - . Parent=gene2928 chrX ENCODE CDS 153505186 153505405 . - 2 Parent=gene2928 chrX ENCODE exon 153508005 153508308 . - . Parent=gene2928 chrX ENCODE CDS 153508005 153508308 . - 0 Parent=gene2928 chrX ENCODE CDS 153542933 153543004 . - 0 Parent=gene2928 chrX ENCODE exon 153542933 153543052 . - . Parent=gene2928 ### chrX ENCODE gene 153470959 153472200 . - . ID=gene2929;Name=CTD-2173L12.1-004;name2=GAB3 chrX ENCODE exon 153470959 153471320 . - . Parent=gene2929 chrX ENCODE CDS 153470959 153471320 . - 2 Parent=gene2929 chrX ENCODE exon 153472113 153472200 . - . Parent=gene2929 chrX ENCODE CDS 153472113 153472200 . - 0 Parent=gene2929 ### chrX ENCODE gene 153554739 153569668 . + . ID=gene2930;name2=DKC1;Name=RP11-115M6.2-001 chrX ENCODE exon 153554739 153554960 . + . Parent=gene2930 chrX ENCODE CDS 153554945 153554960 . + 0 Parent=gene2930 chrX ENCODE exon 153556878 153556945 . + . Parent=gene2930 chrX ENCODE CDS 153556878 153556945 . + 2 Parent=gene2930 chrX ENCODE exon 153557423 153557509 . + . Parent=gene2930 chrX ENCODE CDS 153557423 153557509 . + 0 Parent=gene2930 chrX ENCODE exon 153557886 153557977 . + . Parent=gene2930 chrX ENCODE CDS 153557886 153557977 . + 0 Parent=gene2930 chrX ENCODE exon 153558195 153558379 . + . Parent=gene2930 chrX ENCODE CDS 153558195 153558379 . + 1 Parent=gene2930 chrX ENCODE exon 153558976 153559040 . + . Parent=gene2930 chrX ENCODE CDS 153558976 153559040 . + 2 Parent=gene2930 chrX ENCODE exon 153559235 153559361 . + . Parent=gene2930 chrX ENCODE CDS 153559235 153559361 . + 0 Parent=gene2930 chrX ENCODE exon 153560281 153560411 . + . Parent=gene2930 chrX ENCODE CDS 153560281 153560411 . + 2 Parent=gene2930 chrX ENCODE exon 153561146 153561289 . + . Parent=gene2930 chrX ENCODE CDS 153561146 153561289 . + 0 Parent=gene2930 chrX ENCODE exon 153562738 153562858 . + . Parent=gene2930 chrX ENCODE CDS 153562738 153562858 . + 0 Parent=gene2930 chrX ENCODE exon 153565110 153565228 . + . Parent=gene2930 chrX ENCODE CDS 153565110 153565228 . + 2 Parent=gene2930 chrX ENCODE exon 153566581 153566684 . + . Parent=gene2930 chrX ENCODE CDS 153566581 153566684 . + 0 Parent=gene2930 chrX ENCODE exon 153567174 153567252 . + . Parent=gene2930 chrX ENCODE CDS 153567174 153567252 . + 1 Parent=gene2930 chrX ENCODE exon 153568166 153568303 . + . Parent=gene2930 chrX ENCODE CDS 153568166 153568303 . + 0 Parent=gene2930 chrX ENCODE CDS 153568778 153568846 . + 0 Parent=gene2930 chrX ENCODE exon 153568778 153569668 . + . Parent=gene2930 ### chrX ENCODE gene 153554831 153557334 . + . ID=gene2931;Name=RP11-115M6.2-007;name2=DKC1 chrX ENCODE exon 153554831 153554960 . + . Parent=gene2931 chrX ENCODE exon 153556878 153557334 . + . Parent=gene2931 ### chrX ENCODE gene 153554870 153561270 . + . ID=gene2932;Name=RP11-115M6.2-008;name2=DKC1 chrX ENCODE exon 153554870 153554960 . + . Parent=gene2932 chrX ENCODE CDS 153554945 153554960 . + 0 Parent=gene2932 chrX ENCODE exon 153556878 153556945 . + . Parent=gene2932 chrX ENCODE CDS 153556878 153556945 . + 2 Parent=gene2932 chrX ENCODE exon 153557423 153557509 . + . Parent=gene2932 chrX ENCODE CDS 153557423 153557509 . + 0 Parent=gene2932 chrX ENCODE exon 153557886 153557977 . + . Parent=gene2932 chrX ENCODE CDS 153557886 153557977 . + 0 Parent=gene2932 chrX ENCODE exon 153558195 153558379 . + . Parent=gene2932 chrX ENCODE CDS 153558195 153558379 . + 1 Parent=gene2932 chrX ENCODE exon 153558976 153559040 . + . Parent=gene2932 chrX ENCODE CDS 153558976 153559040 . + 2 Parent=gene2932 chrX ENCODE exon 153559235 153559361 . + . Parent=gene2932 chrX ENCODE CDS 153559235 153559361 . + 0 Parent=gene2932 chrX ENCODE exon 153560281 153560291 . + . Parent=gene2932 chrX ENCODE CDS 153560281 153560291 . + 2 Parent=gene2932 chrX ENCODE exon 153561146 153561270 . + . Parent=gene2932 chrX ENCODE CDS 153561146 153561270 . + 0 Parent=gene2932 ### chrX ENCODE gene 153554892 153558534 . + . ID=gene2933;Name=RP11-115M6.2-009;name2=DKC1 chrX ENCODE exon 153554892 153554960 . + . Parent=gene2933 chrX ENCODE exon 153556878 153556945 . + . Parent=gene2933 chrX ENCODE exon 153557423 153557509 . + . Parent=gene2933 chrX ENCODE exon 153557886 153557977 . + . Parent=gene2933 chrX ENCODE exon 153558195 153558534 . + . Parent=gene2933 ### chrX ENCODE gene 153556904 153561189 . + . ID=gene2934;Name=RP11-115M6.2-012;name2=DKC1 chrX ENCODE exon 153556904 153556945 . + . Parent=gene2934 chrX ENCODE exon 153557423 153557509 . + . Parent=gene2934 chrX ENCODE exon 153557886 153557977 . + . Parent=gene2934 chrX ENCODE exon 153558195 153558379 . + . Parent=gene2934 chrX ENCODE exon 153559235 153559361 . + . Parent=gene2934 chrX ENCODE exon 153560281 153560411 . + . Parent=gene2934 chrX ENCODE exon 153561146 153561189 . + . Parent=gene2934 ### chrX ENCODE gene 153556906 153560337 . + . ID=gene2935;Name=RP11-115M6.2-010;name2=DKC1 chrX ENCODE exon 153556906 153556945 . + . Parent=gene2935 chrX ENCODE CDS 153556906 153556945 . + 0 Parent=gene2935 chrX ENCODE exon 153557423 153557509 . + . Parent=gene2935 chrX ENCODE CDS 153557423 153557509 . + 2 Parent=gene2935 chrX ENCODE exon 153557886 153557977 . + . Parent=gene2935 chrX ENCODE CDS 153557886 153557977 . + 2 Parent=gene2935 chrX ENCODE exon 153558195 153558379 . + . Parent=gene2935 chrX ENCODE CDS 153558195 153558379 . + 0 Parent=gene2935 chrX ENCODE exon 153558976 153559040 . + . Parent=gene2935 chrX ENCODE CDS 153558976 153559040 . + 1 Parent=gene2935 chrX ENCODE exon 153559235 153559361 . + . Parent=gene2935 chrX ENCODE CDS 153559235 153559361 . + 2 Parent=gene2935 chrX ENCODE exon 153560248 153560337 . + . Parent=gene2935 chrX ENCODE CDS 153560248 153560337 . + 1 Parent=gene2935 ### chrX ENCODE gene 153558995 153568239 . + . ID=gene2936;Name=RP11-115M6.2-011;name2=DKC1 chrX ENCODE exon 153558995 153559040 . + . Parent=gene2936 chrX ENCODE exon 153559235 153559361 . + . Parent=gene2936 chrX ENCODE exon 153562738 153562858 . + . Parent=gene2936 chrX ENCODE exon 153565110 153565228 . + . Parent=gene2936 chrX ENCODE exon 153566581 153566684 . + . Parent=gene2936 chrX ENCODE exon 153567174 153567252 . + . Parent=gene2936 chrX ENCODE exon 153568166 153568239 . + . Parent=gene2936 ### chrX ENCODE gene 153559360 153567252 . + . ID=gene2937;Name=RP11-115M6.2-005;name2=DKC1 chrX ENCODE exon 153559360 153559361 . + . Parent=gene2937 chrX ENCODE exon 153560281 153560411 . + . Parent=gene2937 chrX ENCODE exon 153561146 153561289 . + . Parent=gene2937 chrX ENCODE exon 153562738 153562858 . + . Parent=gene2937 chrX ENCODE exon 153565110 153565228 . + . Parent=gene2937 chrX ENCODE exon 153566581 153566684 . + . Parent=gene2937 chrX ENCODE exon 153566765 153566823 . + . Parent=gene2937 chrX ENCODE exon 153567174 153567252 . + . Parent=gene2937 ### chrX ENCODE gene 153560003 153562855 . + . ID=gene2938;Name=RP11-115M6.2-002;name2=DKC1 chrX ENCODE exon 153560003 153560411 . + . Parent=gene2938 chrX ENCODE exon 153561146 153561289 . + . Parent=gene2938 chrX ENCODE exon 153562738 153562855 . + . Parent=gene2938 ### chrX ENCODE gene 153560522 153568240 . + . ID=gene2939;Name=RP11-115M6.2-003;name2=DKC1 chrX ENCODE exon 153560522 153560781 . + . Parent=gene2939 chrX ENCODE exon 153561146 153561289 . + . Parent=gene2939 chrX ENCODE exon 153562738 153562858 . + . Parent=gene2939 chrX ENCODE exon 153565110 153565228 . + . Parent=gene2939 chrX ENCODE exon 153566581 153566684 . + . Parent=gene2939 chrX ENCODE exon 153567174 153567252 . + . Parent=gene2939 chrX ENCODE exon 153568166 153568240 . + . Parent=gene2939 ### chrX ENCODE gene 153565123 153567293 . + . ID=gene2940;Name=RP11-115M6.2-004;name2=DKC1 chrX ENCODE exon 153565123 153565228 . + . Parent=gene2940 chrX ENCODE exon 153566581 153567293 . + . Parent=gene2940 ### chrX ENCODE gene 153567098 153568890 . + . ID=gene2941;Name=RP11-115M6.2-006;name2=DKC1 chrX ENCODE exon 153567098 153567252 . + . Parent=gene2941 chrX ENCODE exon 153568166 153568303 . + . Parent=gene2941 chrX ENCODE exon 153568778 153568890 . + . Parent=gene2941 ### chrX ENCODE gene 153570663 153597487 . - . ID=gene2942;Name=RP11-115M6.1-006;name2=MPP1 chrX ENCODE exon 153570663 153571332 . - . Parent=gene2942 chrX ENCODE CDS 153571156 153571332 . - 0 Parent=gene2942 chrX ENCODE exon 153573218 153573292 . - . Parent=gene2942 chrX ENCODE CDS 153573218 153573292 . - 0 Parent=gene2942 chrX ENCODE exon 153573579 153573781 . - . Parent=gene2942 chrX ENCODE CDS 153573579 153573781 . - 2 Parent=gene2942 chrX ENCODE exon 153575406 153575486 . - . Parent=gene2942 chrX ENCODE CDS 153575406 153575486 . - 2 Parent=gene2942 chrX ENCODE exon 153576007 153576087 . - . Parent=gene2942 chrX ENCODE CDS 153576007 153576087 . - 2 Parent=gene2942 chrX ENCODE exon 153577030 153577136 . - . Parent=gene2942 chrX ENCODE CDS 153577030 153577136 . - 1 Parent=gene2942 chrX ENCODE exon 153578183 153578379 . - . Parent=gene2942 chrX ENCODE CDS 153578183 153578379 . - 0 Parent=gene2942 chrX ENCODE exon 153581933 153582001 . - . Parent=gene2942 chrX ENCODE CDS 153581933 153582001 . - 0 Parent=gene2942 chrX ENCODE exon 153582962 153583047 . - . Parent=gene2942 chrX ENCODE CDS 153582962 153583047 . - 2 Parent=gene2942 chrX ENCODE exon 153583748 153583826 . - . Parent=gene2942 chrX ENCODE CDS 153583748 153583826 . - 0 Parent=gene2942 chrX ENCODE exon 153584121 153584264 . - . Parent=gene2942 chrX ENCODE CDS 153584121 153584264 . - 0 Parent=gene2942 chrX ENCODE CDS 153597251 153597352 . - 0 Parent=gene2942 chrX ENCODE exon 153597251 153597487 . - . Parent=gene2942 ### chrX ENCODE gene 153570665 153575213 . - . ID=gene2943;Name=RP11-115M6.1-004;name2=MPP1 chrX ENCODE exon 153570665 153571332 . - . Parent=gene2943 chrX ENCODE exon 153573218 153573292 . - . Parent=gene2943 chrX ENCODE exon 153573579 153575213 . - . Parent=gene2943 ### chrX ENCODE gene 153570702 153573575 . - . ID=gene2944;Name=RP11-115M6.1-008;name2=MPP1 chrX ENCODE exon 153570702 153571332 . - . Parent=gene2944 chrX ENCODE exon 153573218 153573575 . - . Parent=gene2944 ### chrX ENCODE gene 153570705 153597435 . - . ID=gene2945;Name=RP11-115M6.1-007;name2=MPP1 chrX ENCODE exon 153570705 153571332 . - . Parent=gene2945 chrX ENCODE exon 153573218 153573292 . - . Parent=gene2945 chrX ENCODE exon 153573579 153573781 . - . Parent=gene2945 chrX ENCODE exon 153575406 153575486 . - . Parent=gene2945 chrX ENCODE exon 153576007 153576087 . - . Parent=gene2945 chrX ENCODE exon 153577030 153577136 . - . Parent=gene2945 chrX ENCODE exon 153578183 153578379 . - . Parent=gene2945 chrX ENCODE exon 153581933 153582001 . - . Parent=gene2945 chrX ENCODE exon 153582962 153583047 . - . Parent=gene2945 chrX ENCODE exon 153583748 153583826 . - . Parent=gene2945 chrX ENCODE exon 153584121 153584264 . - . Parent=gene2945 chrX ENCODE exon 153596676 153596806 . - . Parent=gene2945 chrX ENCODE exon 153597251 153597435 . - . Parent=gene2945 ### chrX ENCODE gene 153571132 153597376 . - . ID=gene2946;Name=RP11-115M6.1-009;name2=MPP1 chrX ENCODE exon 153571132 153571332 . - . Parent=gene2946 chrX ENCODE CDS 153571156 153571332 . - 0 Parent=gene2946 chrX ENCODE exon 153573218 153573292 . - . Parent=gene2946 chrX ENCODE CDS 153573218 153573292 . - 0 Parent=gene2946 chrX ENCODE exon 153573579 153573781 . - . Parent=gene2946 chrX ENCODE CDS 153573579 153573781 . - 2 Parent=gene2946 chrX ENCODE exon 153575406 153575486 . - . Parent=gene2946 chrX ENCODE CDS 153575406 153575486 . - 2 Parent=gene2946 chrX ENCODE exon 153576007 153576087 . - . Parent=gene2946 chrX ENCODE CDS 153576007 153576087 . - 2 Parent=gene2946 chrX ENCODE exon 153577030 153577136 . - . Parent=gene2946 chrX ENCODE CDS 153577030 153577136 . - 1 Parent=gene2946 chrX ENCODE exon 153578183 153578319 . - . Parent=gene2946 chrX ENCODE CDS 153578183 153578319 . - 0 Parent=gene2946 chrX ENCODE exon 153581933 153582001 . - . Parent=gene2946 chrX ENCODE CDS 153581933 153582001 . - 0 Parent=gene2946 chrX ENCODE exon 153582962 153583047 . - . Parent=gene2946 chrX ENCODE CDS 153582962 153583047 . - 2 Parent=gene2946 chrX ENCODE exon 153583748 153583826 . - . Parent=gene2946 chrX ENCODE CDS 153583748 153583826 . - 0 Parent=gene2946 chrX ENCODE exon 153584121 153584264 . - . Parent=gene2946 chrX ENCODE CDS 153584121 153584264 . - 0 Parent=gene2946 chrX ENCODE CDS 153597251 153597352 . - 0 Parent=gene2946 chrX ENCODE exon 153597251 153597376 . - . Parent=gene2946 ### chrX ENCODE gene 153573292 153597464 . - . ID=gene2947;name2=MPP1;Name=RP11-115M6.1-011 chrX ENCODE exon 153573292 153573781 . - . Parent=gene2947 chrX ENCODE exon 153575406 153575486 . - . Parent=gene2947 chrX ENCODE exon 153576007 153576087 . - . Parent=gene2947 chrX ENCODE exon 153577030 153577136 . - . Parent=gene2947 chrX ENCODE exon 153578183 153578379 . - . Parent=gene2947 chrX ENCODE exon 153597251 153597464 . - . Parent=gene2947 ### chrX ENCODE gene 153574688 153597420 . - . ID=gene2948;Name=RP11-115M6.1-014;name2=MPP1 chrX ENCODE exon 153574688 153575486 . - . Parent=gene2948 chrX ENCODE exon 153597251 153597420 . - . Parent=gene2948 ### chrX ENCODE gene 153575224 153578262 . - . ID=gene2949;Name=RP11-115M6.1-018;name2=MPP1 chrX ENCODE exon 153575224 153575486 . - . Parent=gene2949 chrX ENCODE exon 153576007 153576087 . - . Parent=gene2949 chrX ENCODE exon 153577101 153577136 . - . Parent=gene2949 chrX ENCODE exon 153578183 153578262 . - . Parent=gene2949 ### chrX ENCODE gene 153575356 153591794 . - . ID=gene2950;Name=RP11-115M6.1-015;name2=MPP1 chrX ENCODE exon 153575356 153575486 . - . Parent=gene2950 chrX ENCODE exon 153576007 153576087 . - . Parent=gene2950 chrX ENCODE exon 153577030 153577136 . - . Parent=gene2950 chrX ENCODE exon 153578183 153578379 . - . Parent=gene2950 chrX ENCODE exon 153591724 153591794 . - . Parent=gene2950 ### chrX ENCODE gene 153575632 153578204 . - . ID=gene2951;Name=RP11-115M6.1-019;name2=MPP1 chrX ENCODE exon 153575632 153576087 . - . Parent=gene2951 chrX ENCODE exon 153577030 153577136 . - . Parent=gene2951 chrX ENCODE exon 153578183 153578204 . - . Parent=gene2951 ### chrX ENCODE gene 153576010 153612986 . - . ID=gene2952;Name=RP11-115M6.1-016;name2=MPP1 chrX ENCODE exon 153576010 153576087 . - . Parent=gene2952 chrX ENCODE CDS 153576010 153576087 . - 2 Parent=gene2952 chrX ENCODE exon 153577030 153577136 . - . Parent=gene2952 chrX ENCODE CDS 153577030 153577136 . - 1 Parent=gene2952 chrX ENCODE exon 153578183 153578379 . - . Parent=gene2952 chrX ENCODE CDS 153578183 153578379 . - 0 Parent=gene2952 chrX ENCODE exon 153581933 153582001 . - . Parent=gene2952 chrX ENCODE CDS 153581933 153582001 . - 0 Parent=gene2952 chrX ENCODE exon 153582962 153583047 . - . Parent=gene2952 chrX ENCODE CDS 153582962 153583047 . - 2 Parent=gene2952 chrX ENCODE exon 153583748 153583826 . - . Parent=gene2952 chrX ENCODE CDS 153583748 153583826 . - 0 Parent=gene2952 chrX ENCODE CDS 153584121 153584228 . - 0 Parent=gene2952 chrX ENCODE exon 153584121 153584264 . - . Parent=gene2952 chrX ENCODE exon 153612953 153612986 . - . Parent=gene2952 ### chrX ENCODE gene 153576680 153597456 . - . ID=gene2953;Name=RP11-115M6.1-012;name2=MPP1 chrX ENCODE exon 153576680 153577136 . - . Parent=gene2953 chrX ENCODE exon 153578183 153578379 . - . Parent=gene2953 chrX ENCODE exon 153597251 153597456 . - . Parent=gene2953 ### chrX ENCODE gene 153577036 153597464 . - . ID=gene2954;Name=RP11-115M6.1-010;name2=MPP1 chrX ENCODE exon 153577036 153577136 . - . Parent=gene2954 chrX ENCODE CDS 153577036 153577136 . - 1 Parent=gene2954 chrX ENCODE exon 153578183 153578379 . - . Parent=gene2954 chrX ENCODE CDS 153578183 153578379 . - 0 Parent=gene2954 chrX ENCODE exon 153581933 153582001 . - . Parent=gene2954 chrX ENCODE CDS 153581933 153582001 . - 0 Parent=gene2954 chrX ENCODE CDS 153597251 153597352 . - 0 Parent=gene2954 chrX ENCODE exon 153597251 153597464 . - . Parent=gene2954 ### chrX ENCODE gene 153577063 153583174 . - . ID=gene2955;Name=RP11-115M6.1-017;name2=MPP1 chrX ENCODE exon 153577063 153577136 . - . Parent=gene2955 chrX ENCODE exon 153578183 153578379 . - . Parent=gene2955 chrX ENCODE exon 153581933 153582001 . - . Parent=gene2955 chrX ENCODE exon 153582962 153583174 . - . Parent=gene2955 ### chrX ENCODE gene 153578193 153597506 . - . ID=gene2956;Name=RP11-115M6.1-002;name2=MPP1 chrX ENCODE exon 153578193 153578379 . - . Parent=gene2956 chrX ENCODE exon 153581933 153582001 . - . Parent=gene2956 chrX ENCODE exon 153582962 153583047 . - . Parent=gene2956 chrX ENCODE exon 153583748 153583826 . - . Parent=gene2956 chrX ENCODE exon 153584121 153584264 . - . Parent=gene2956 chrX ENCODE exon 153591724 153591872 . - . Parent=gene2956 chrX ENCODE exon 153597251 153597506 . - . Parent=gene2956 ### chrX ENCODE gene 153578345 153584401 . - . ID=gene2957;Name=RP11-115M6.1-003;name2=MPP1 chrX ENCODE exon 153578345 153578379 . - . Parent=gene2957 chrX ENCODE exon 153581933 153582001 . - . Parent=gene2957 chrX ENCODE exon 153582962 153583047 . - . Parent=gene2957 chrX ENCODE exon 153583748 153583826 . - . Parent=gene2957 chrX ENCODE exon 153584121 153584401 . - . Parent=gene2957 ### chrX ENCODE gene 153581968 153597477 . - . ID=gene2958;Name=RP11-115M6.1-005;name2=MPP1 chrX ENCODE exon 153581968 153582001 . - . Parent=gene2958 chrX ENCODE CDS 153581968 153582001 . - 0 Parent=gene2958 chrX ENCODE exon 153582962 153583047 . - . Parent=gene2958 chrX ENCODE CDS 153582962 153583047 . - 2 Parent=gene2958 chrX ENCODE exon 153583748 153583826 . - . Parent=gene2958 chrX ENCODE CDS 153583748 153583826 . - 0 Parent=gene2958 chrX ENCODE exon 153584172 153584264 . - . Parent=gene2958 chrX ENCODE CDS 153584172 153584264 . - 0 Parent=gene2958 chrX ENCODE CDS 153597251 153597352 . - 0 Parent=gene2958 chrX ENCODE exon 153597251 153597477 . - . Parent=gene2958 ### chrX ENCODE gene 153583610 153597447 . - . ID=gene2959;name2=MPP1;Name=RP11-115M6.1-013 chrX ENCODE exon 153583610 153583826 . - . Parent=gene2959 chrX ENCODE exon 153584121 153584264 . - . Parent=gene2959 chrX ENCODE exon 153597251 153597447 . - . Parent=gene2959 ### chrX ENCODE gene 153583610 153597447 . - . ID=gene2960;Name=RP11-115M6.1-001;name2=MPP1 chrX ENCODE exon 153583610 153583826 . - . Parent=gene2960 chrX ENCODE exon 153584121 153584264 . - . Parent=gene2960 chrX ENCODE exon 153597251 153597447 . - . Parent=gene2960 ### chrX ENCODE gene 153608305 153609500 . - . ID=gene2961;Name=RP11-115M6.4-001;name2=RP11-115M6.4 chrX ENCODE exon 153608305 153609500 . - . Parent=gene2961 chrX ENCODE CDS 153609078 153609380 . - 0 Parent=gene2961 ### chrX ENCODE gene 153615327 153624650 . - . ID=gene2962;Name=RP11-115M6.5-001;name2=RP11-115M6.5 chrX ENCODE exon 153615327 153615761 . - . Parent=gene2962 chrX ENCODE CDS 153615734 153615761 . - 1 Parent=gene2962 chrX ENCODE exon 153621514 153621643 . - . Parent=gene2962 chrX ENCODE CDS 153621514 153621643 . - 2 Parent=gene2962 chrX ENCODE CDS 153622694 153622835 . - 0 Parent=gene2962 chrX ENCODE exon 153622694 153622934 . - . Parent=gene2962 chrX ENCODE exon 153624553 153624650 . - . Parent=gene2962 ### chrX ENCODE gene 153622552 153626641 . - . ID=gene2963;Name=RP11-115M6.5-002;name2=RP11-115M6.5 chrX ENCODE exon 153622552 153622934 . - . Parent=gene2963 chrX ENCODE exon 153624553 153624662 . - . Parent=gene2963 chrX ENCODE exon 153626542 153626641 . - . Parent=gene2963 ### chrX ENCODE gene 153627767 153678296 . - . ID=gene2964;Name=RP11-115M6.7-003;name2=F8 chrX ENCODE exon 153627767 153629731 . - . Parent=gene2964 chrX ENCODE CDS 153629576 153629731 . - 0 Parent=gene2964 chrX ENCODE exon 153652411 153652587 . - . Parent=gene2964 chrX ENCODE CDS 153652411 153652587 . - 0 Parent=gene2964 chrX ENCODE exon 153653697 153653845 . - . Parent=gene2964 chrX ENCODE CDS 153653697 153653845 . - 2 Parent=gene2964 chrX ENCODE exon 153655062 153655206 . - . Parent=gene2964 chrX ENCODE CDS 153655062 153655206 . - 0 Parent=gene2964 chrX ENCODE CDS 153678113 153678136 . - 0 Parent=gene2964 chrX ENCODE exon 153678113 153678296 . - . Parent=gene2964 ### chrX ENCODE gene 153627774 153814732 . - . ID=gene2965;name2=F8;Name=RP11-115M6.7-001 chrX ENCODE exon 153627774 153629731 . - . Parent=gene2965 chrX ENCODE CDS 153629576 153629731 . - 0 Parent=gene2965 chrX ENCODE exon 153652411 153652587 . - . Parent=gene2965 chrX ENCODE CDS 153652411 153652587 . - 0 Parent=gene2965 chrX ENCODE exon 153653697 153653845 . - . Parent=gene2965 chrX ENCODE CDS 153653697 153653845 . - 2 Parent=gene2965 chrX ENCODE exon 153655062 153655206 . - . Parent=gene2965 chrX ENCODE CDS 153655062 153655206 . - 0 Parent=gene2965 chrX ENCODE exon 153688056 153688211 . - . Parent=gene2965 chrX ENCODE CDS 153688056 153688211 . - 0 Parent=gene2965 chrX ENCODE exon 153691845 153691930 . - . Parent=gene2965 chrX ENCODE CDS 153691845 153691930 . - 2 Parent=gene2965 chrX ENCODE exon 153693350 153693421 . - . Parent=gene2965 chrX ENCODE CDS 153693350 153693421 . - 2 Parent=gene2965 chrX ENCODE exon 153694030 153694146 . - . Parent=gene2965 chrX ENCODE CDS 153694030 153694146 . - 2 Parent=gene2965 chrX ENCODE exon 153695885 153696067 . - . Parent=gene2965 chrX ENCODE CDS 153695885 153696067 . - 2 Parent=gene2965 chrX ENCODE exon 153696275 153696503 . - . Parent=gene2965 chrX ENCODE CDS 153696275 153696503 . - 0 Parent=gene2965 chrX ENCODE exon 153696790 153697002 . - . Parent=gene2965 chrX ENCODE CDS 153696790 153697002 . - 0 Parent=gene2965 chrX ENCODE exon 153698399 153698552 . - . Parent=gene2965 chrX ENCODE CDS 153698399 153698552 . - 1 Parent=gene2965 chrX ENCODE exon 153720550 153723655 . - . Parent=gene2965 chrX ENCODE CDS 153720550 153723655 . - 2 Parent=gene2965 chrX ENCODE exon 153739677 153739886 . - . Parent=gene2965 chrX ENCODE CDS 153739677 153739886 . - 2 Parent=gene2965 chrX ENCODE exon 153745871 153746021 . - . Parent=gene2965 chrX ENCODE CDS 153745871 153746021 . - 0 Parent=gene2965 chrX ENCODE exon 153748936 153749150 . - . Parent=gene2965 chrX ENCODE CDS 153748936 153749150 . - 2 Parent=gene2965 chrX ENCODE exon 153753054 153753147 . - . Parent=gene2965 chrX ENCODE CDS 153753054 153753147 . - 0 Parent=gene2965 chrX ENCODE exon 153757949 153758120 . - . Parent=gene2965 chrX ENCODE CDS 153757949 153758120 . - 1 Parent=gene2965 chrX ENCODE exon 153758405 153758666 . - . Parent=gene2965 chrX ENCODE CDS 153758405 153758666 . - 2 Parent=gene2965 chrX ENCODE exon 153761310 153761531 . - . Parent=gene2965 chrX ENCODE CDS 153761310 153761531 . - 2 Parent=gene2965 chrX ENCODE exon 153776666 153776782 . - . Parent=gene2965 chrX ENCODE CDS 153776666 153776782 . - 2 Parent=gene2965 chrX ENCODE exon 153779216 153779284 . - . Parent=gene2965 chrX ENCODE CDS 153779216 153779284 . - 2 Parent=gene2965 chrX ENCODE exon 153784915 153785127 . - . Parent=gene2965 chrX ENCODE CDS 153784915 153785127 . - 2 Parent=gene2965 chrX ENCODE exon 153788952 153789074 . - . Parent=gene2965 chrX ENCODE CDS 153788952 153789074 . - 2 Parent=gene2965 chrX ENCODE exon 153791458 153791579 . - . Parent=gene2965 chrX ENCODE CDS 153791458 153791579 . - 1 Parent=gene2965 chrX ENCODE CDS 153814389 153814531 . - 0 Parent=gene2965 chrX ENCODE exon 153814389 153814732 . - . Parent=gene2965 ### chrX ENCODE gene 153676951 153677537 . + . ID=gene2966;Name=CTD-2183H9.1-001;name2=H2AFB1 chrX ENCODE exon 153676951 153677537 . + . Parent=gene2966 chrX ENCODE CDS 153677029 153677376 . + 0 Parent=gene2966 ### chrX ENCODE gene 153678328 153680040 . + . ID=gene2967;Name=CTD-2183H9.2-001;name2=F8A1 chrX ENCODE exon 153678328 153680040 . + . Parent=gene2967 chrX ENCODE CDS 153678354 153679469 . + 0 Parent=gene2967 ### chrX ENCODE gene 153757757 153758495 . - . ID=gene2968;Name=RP11-115M6.7-002;name2=F8 chrX ENCODE exon 153757757 153758120 . - . Parent=gene2968 chrX ENCODE exon 153758405 153758495 . - . Parent=gene2968 ### chrX ENCODE gene 153776680 153818919 . - . ID=gene2969;Name=RP11-115M6.7-004;name2=F8 chrX ENCODE exon 153776680 153776782 . - . Parent=gene2969 chrX ENCODE CDS 153776680 153776782 . - 2 Parent=gene2969 chrX ENCODE exon 153779216 153779284 . - . Parent=gene2969 chrX ENCODE CDS 153779216 153779284 . - 2 Parent=gene2969 chrX ENCODE exon 153784915 153785127 . - . Parent=gene2969 chrX ENCODE CDS 153784915 153785127 . - 2 Parent=gene2969 chrX ENCODE exon 153788952 153789074 . - . Parent=gene2969 chrX ENCODE CDS 153788952 153789074 . - 2 Parent=gene2969 chrX ENCODE exon 153791458 153791579 . - . Parent=gene2969 chrX ENCODE CDS 153791458 153791579 . - 1 Parent=gene2969 chrX ENCODE CDS 153818759 153818796 . - 0 Parent=gene2969 chrX ENCODE exon 153818759 153818919 . - . Parent=gene2969 ### chrX ENCODE gene 153785004 153818847 . - . ID=gene2970;Name=RP11-115M6.7-005;name2=F8 chrX ENCODE exon 153785004 153785127 . - . Parent=gene2970 chrX ENCODE CDS 153785004 153785127 . - 2 Parent=gene2970 chrX ENCODE exon 153788952 153789074 . - . Parent=gene2970 chrX ENCODE CDS 153788952 153789074 . - 2 Parent=gene2970 chrX ENCODE exon 153791458 153791579 . - . Parent=gene2970 chrX ENCODE CDS 153791458 153791579 . - 1 Parent=gene2970 chrX ENCODE exon 153814389 153814475 . - . Parent=gene2970 chrX ENCODE CDS 153814389 153814475 . - 1 Parent=gene2970 chrX ENCODE CDS 153818759 153818796 . - 0 Parent=gene2970 chrX ENCODE exon 153818759 153818847 . - . Parent=gene2970 ### chrX ENCODE gene 153817959 153843711 . + . ID=gene2971;Name=GS1-273L24.1-003;name2=FUNDC2 chrX ENCODE exon 153817959 153818130 . + . Parent=gene2971 chrX ENCODE exon 153818590 153818659 . + . Parent=gene2971 chrX ENCODE exon 153825382 153825532 . + . Parent=gene2971 chrX ENCODE exon 153838488 153838563 . + . Parent=gene2971 chrX ENCODE exon 153843649 153843711 . + . Parent=gene2971 ### chrX ENCODE gene 153818664 153852282 . + . ID=gene2972;Name=GS1-273L24.1-001;name2=FUNDC2 chrX ENCODE exon 153818664 153819050 . + . Parent=gene2972 chrX ENCODE CDS 153818918 153819050 . + 0 Parent=gene2972 chrX ENCODE exon 153825382 153825532 . + . Parent=gene2972 chrX ENCODE CDS 153825382 153825532 . + 2 Parent=gene2972 chrX ENCODE exon 153838488 153838563 . + . Parent=gene2972 chrX ENCODE CDS 153838488 153838563 . + 1 Parent=gene2972 chrX ENCODE exon 153843649 153843780 . + . Parent=gene2972 chrX ENCODE CDS 153843649 153843780 . + 0 Parent=gene2972 chrX ENCODE CDS 153846574 153846651 . + 0 Parent=gene2972 chrX ENCODE exon 153846574 153852282 . + . Parent=gene2972 ### chrX ENCODE gene 153819132 153846660 . + . ID=gene2973;Name=GS1-273L24.1-004;name2=FUNDC2 chrX ENCODE exon 153819132 153819351 . + . Parent=gene2973 chrX ENCODE CDS 153819132 153819351 . + 0 Parent=gene2973 chrX ENCODE exon 153825382 153825532 . + . Parent=gene2973 chrX ENCODE CDS 153825382 153825532 . + 2 Parent=gene2973 chrX ENCODE exon 153838488 153838563 . + . Parent=gene2973 chrX ENCODE CDS 153838488 153838563 . + 1 Parent=gene2973 chrX ENCODE exon 153843649 153843780 . + . Parent=gene2973 chrX ENCODE CDS 153843649 153843780 . + 0 Parent=gene2973 chrX ENCODE CDS 153846574 153846651 . + 0 Parent=gene2973 chrX ENCODE exon 153846574 153846660 . + . Parent=gene2973 ### chrX ENCODE gene 153824958 153846592 . + . ID=gene2974;Name=GS1-273L24.1-005;name2=FUNDC2 chrX ENCODE exon 153824958 153825532 . + . Parent=gene2974 chrX ENCODE exon 153843649 153843780 . + . Parent=gene2974 chrX ENCODE exon 153846574 153846592 . + . Parent=gene2974 ### chrX ENCODE gene 153825405 153847085 . + . ID=gene2975;Name=GS1-273L24.1-006;name2=FUNDC2 chrX ENCODE exon 153825405 153825532 . + . Parent=gene2975 chrX ENCODE exon 153838488 153838563 . + . Parent=gene2975 chrX ENCODE exon 153839348 153839370 . + . Parent=gene2975 chrX ENCODE exon 153843649 153843780 . + . Parent=gene2975 chrX ENCODE exon 153846574 153847085 . + . Parent=gene2975 ### chrX ENCODE gene 153839036 153846871 . + . ID=gene2976;Name=GS1-273L24.1-007;name2=FUNDC2 chrX ENCODE exon 153839036 153839370 . + . Parent=gene2976 chrX ENCODE exon 153843649 153843780 . + . Parent=gene2976 chrX ENCODE exon 153846574 153846871 . + . Parent=gene2976 ### chrX ENCODE gene 153841073 153847550 . + . ID=gene2977;Name=GS1-273L24.1-002;name2=FUNDC2 chrX ENCODE exon 153841073 153843780 . + . Parent=gene2977 chrX ENCODE exon 153846574 153847550 . + . Parent=gene2977 ### chrX ENCODE gene 153853601 153857498 . - . ID=gene2978;Name=GS1-273L24.4-005;name2=MTCP1 chrX ENCODE exon 153853601 153853970 . - . Parent=gene2978 chrX ENCODE CDS 153853822 153853970 . - 2 Parent=gene2978 chrX ENCODE CDS 153855945 153856002 . - 0 Parent=gene2978 chrX ENCODE exon 153855945 153856012 . - . Parent=gene2978 chrX ENCODE exon 153857465 153857498 . - . Parent=gene2978 ### chrX ENCODE gene 153853601 153863341 . - . ID=gene2979;Name=GS1-273L24.4-001;name2=MTCP1 chrX ENCODE exon 153853601 153853970 . - . Parent=gene2979 chrX ENCODE CDS 153853822 153853970 . - 2 Parent=gene2979 chrX ENCODE CDS 153855945 153856002 . - 0 Parent=gene2979 chrX ENCODE exon 153855945 153856012 . - . Parent=gene2979 chrX ENCODE exon 153862673 153863341 . - . Parent=gene2979 ### chrX ENCODE gene 153853607 153857347 . - . ID=gene2980;Name=GS1-273L24.4-004;name2=MTCP1 chrX ENCODE exon 153853607 153853970 . - . Parent=gene2980 chrX ENCODE CDS 153853822 153853970 . - 2 Parent=gene2980 chrX ENCODE CDS 153855945 153856002 . - 0 Parent=gene2980 chrX ENCODE exon 153855945 153856012 . - . Parent=gene2980 chrX ENCODE exon 153856916 153857347 . - . Parent=gene2980 ### chrX ENCODE gene 153856013 153863205 . - . ID=gene2981;name2=MTCP1;Name=GS1-273L24.4-002 chrX ENCODE exon 153856013 153857378 . - . Parent=gene2981 chrX ENCODE exon 153857465 153857516 . - . Parent=gene2981 chrX ENCODE CDS 153857469 153857516 . - 0 Parent=gene2981 chrX ENCODE exon 153857598 153857768 . - . Parent=gene2981 chrX ENCODE CDS 153857598 153857768 . - 0 Parent=gene2981 chrX ENCODE CDS 153857885 153857989 . - 0 Parent=gene2981 chrX ENCODE exon 153857885 153858036 . - . Parent=gene2981 chrX ENCODE exon 153862673 153863205 . - . Parent=gene2981 ### chrX ENCODE gene 153856907 153863115 . - . ID=gene2982;Name=GS1-273L24.4-003;name2=MTCP1 chrX ENCODE exon 153856907 153857378 . - . Parent=gene2982 chrX ENCODE exon 153857465 153857516 . - . Parent=gene2982 chrX ENCODE exon 153857598 153857768 . - . Parent=gene2982 chrX ENCODE exon 153862673 153863115 . - . Parent=gene2982 ### chrX ENCODE gene 153857142 153939916 . - . ID=gene2983;name2=MTCP1;Name=GS1-273L24.4-007 chrX ENCODE exon 153857142 153857378 . - . Parent=gene2983 chrX ENCODE exon 153857465 153857516 . - . Parent=gene2983 chrX ENCODE exon 153857598 153857768 . - . Parent=gene2983 chrX ENCODE exon 153939639 153939916 . - . Parent=gene2983 ### chrX ENCODE gene 153857300 153939754 . - . ID=gene2984;name2=MTCP1;Name=GS1-273L24.4-006 chrX ENCODE exon 153857300 153857378 . - . Parent=gene2984 chrX ENCODE exon 153857465 153857516 . - . Parent=gene2984 chrX ENCODE CDS 153857469 153857516 . - 0 Parent=gene2984 chrX ENCODE exon 153857598 153857768 . - . Parent=gene2984 chrX ENCODE CDS 153857598 153857768 . - 0 Parent=gene2984 chrX ENCODE CDS 153857885 153857989 . - 0 Parent=gene2984 chrX ENCODE exon 153857885 153858036 . - . Parent=gene2984 chrX ENCODE exon 153939639 153939754 . - . Parent=gene2984 ### chrX ENCODE gene 153863399 153913297 . + . ID=gene2985;Name=RP11-143H17.2-006;name2=BRCC3 chrX ENCODE exon 153863399 153863629 . + . Parent=gene2985 chrX ENCODE CDS 153863507 153863629 . + 0 Parent=gene2985 chrX ENCODE exon 153864306 153864322 . + . Parent=gene2985 chrX ENCODE CDS 153864306 153864322 . + 0 Parent=gene2985 chrX ENCODE exon 153865353 153865410 . + . Parent=gene2985 chrX ENCODE CDS 153865353 153865410 . + 1 Parent=gene2985 chrX ENCODE exon 153869149 153869268 . + . Parent=gene2985 chrX ENCODE CDS 153869149 153869268 . + 0 Parent=gene2985 chrX ENCODE exon 153870595 153870682 . + . Parent=gene2985 chrX ENCODE CDS 153870595 153870682 . + 0 Parent=gene2985 chrX ENCODE exon 153881242 153881330 . + . Parent=gene2985 chrX ENCODE CDS 153881242 153881330 . + 2 Parent=gene2985 chrX ENCODE exon 153882763 153882818 . + . Parent=gene2985 chrX ENCODE CDS 153882763 153882818 . + 0 Parent=gene2985 chrX ENCODE exon 153908036 153908167 . + . Parent=gene2985 chrX ENCODE CDS 153908036 153908167 . + 1 Parent=gene2985 chrX ENCODE exon 153908690 153908733 . + . Parent=gene2985 chrX ENCODE CDS 153908690 153908733 . + 1 Parent=gene2985 chrX ENCODE CDS 153911978 153912129 . + 2 Parent=gene2985 chrX ENCODE exon 153911978 153912147 . + . Parent=gene2985 chrX ENCODE exon 153913202 153913297 . + . Parent=gene2985 ### chrX ENCODE gene 153863410 153914706 . + . ID=gene2986;Name=RP11-143H17.2-002;name2=BRCC3 chrX ENCODE exon 153863410 153863629 . + . Parent=gene2986 chrX ENCODE CDS 153863507 153863629 . + 0 Parent=gene2986 chrX ENCODE exon 153864306 153864322 . + . Parent=gene2986 chrX ENCODE CDS 153864306 153864322 . + 0 Parent=gene2986 chrX ENCODE exon 153865356 153865410 . + . Parent=gene2986 chrX ENCODE CDS 153865356 153865410 . + 1 Parent=gene2986 chrX ENCODE exon 153869149 153869268 . + . Parent=gene2986 chrX ENCODE CDS 153869149 153869268 . + 0 Parent=gene2986 chrX ENCODE exon 153870595 153870682 . + . Parent=gene2986 chrX ENCODE CDS 153870595 153870682 . + 0 Parent=gene2986 chrX ENCODE exon 153881242 153881330 . + . Parent=gene2986 chrX ENCODE CDS 153881242 153881330 . + 2 Parent=gene2986 chrX ENCODE exon 153882763 153882818 . + . Parent=gene2986 chrX ENCODE CDS 153882763 153882818 . + 0 Parent=gene2986 chrX ENCODE exon 153908036 153908167 . + . Parent=gene2986 chrX ENCODE CDS 153908036 153908167 . + 1 Parent=gene2986 chrX ENCODE exon 153908690 153908733 . + . Parent=gene2986 chrX ENCODE CDS 153908690 153908733 . + 1 Parent=gene2986 chrX ENCODE CDS 153911978 153912129 . + 2 Parent=gene2986 chrX ENCODE exon 153911978 153912147 . + . Parent=gene2986 chrX ENCODE exon 153913202 153914706 . + . Parent=gene2986 ### chrX ENCODE gene 153863478 153915051 . + . ID=gene2987;Name=RP11-143H17.2-004;name2=BRCC3 chrX ENCODE exon 153863478 153863629 . + . Parent=gene2987 chrX ENCODE CDS 153863507 153863629 . + 0 Parent=gene2987 chrX ENCODE exon 153864306 153864322 . + . Parent=gene2987 chrX ENCODE CDS 153864306 153864322 . + 0 Parent=gene2987 chrX ENCODE exon 153865356 153865410 . + . Parent=gene2987 chrX ENCODE CDS 153865356 153865410 . + 1 Parent=gene2987 chrX ENCODE exon 153869149 153869268 . + . Parent=gene2987 chrX ENCODE CDS 153869149 153869268 . + 0 Parent=gene2987 chrX ENCODE exon 153870595 153870682 . + . Parent=gene2987 chrX ENCODE CDS 153870595 153870682 . + 0 Parent=gene2987 chrX ENCODE exon 153881242 153881330 . + . Parent=gene2987 chrX ENCODE CDS 153881242 153881330 . + 2 Parent=gene2987 chrX ENCODE exon 153882763 153882818 . + . Parent=gene2987 chrX ENCODE CDS 153882763 153882818 . + 0 Parent=gene2987 chrX ENCODE exon 153908690 153908733 . + . Parent=gene2987 chrX ENCODE CDS 153908690 153908733 . + 1 Parent=gene2987 chrX ENCODE CDS 153911978 153912129 . + 2 Parent=gene2987 chrX ENCODE exon 153911978 153912147 . + . Parent=gene2987 chrX ENCODE exon 153913202 153915051 . + . Parent=gene2987 ### chrX ENCODE gene 153863482 153915053 . + . ID=gene2988;Name=RP11-143H17.2-001;name2=BRCC3 chrX ENCODE exon 153863482 153863629 . + . Parent=gene2988 chrX ENCODE CDS 153863507 153863629 . + 0 Parent=gene2988 chrX ENCODE exon 153864306 153864322 . + . Parent=gene2988 chrX ENCODE CDS 153864306 153864322 . + 0 Parent=gene2988 chrX ENCODE exon 153865356 153865410 . + . Parent=gene2988 chrX ENCODE CDS 153865356 153865410 . + 1 Parent=gene2988 chrX ENCODE exon 153869149 153869268 . + . Parent=gene2988 chrX ENCODE CDS 153869149 153869268 . + 0 Parent=gene2988 chrX ENCODE exon 153870595 153870682 . + . Parent=gene2988 chrX ENCODE CDS 153870595 153870682 . + 0 Parent=gene2988 chrX ENCODE exon 153881242 153881330 . + . Parent=gene2988 chrX ENCODE CDS 153881242 153881330 . + 2 Parent=gene2988 chrX ENCODE exon 153882763 153882818 . + . Parent=gene2988 chrX ENCODE CDS 153882763 153882818 . + 0 Parent=gene2988 chrX ENCODE exon 153891294 153891368 . + . Parent=gene2988 chrX ENCODE CDS 153891294 153891368 . + 1 Parent=gene2988 chrX ENCODE exon 153908036 153908167 . + . Parent=gene2988 chrX ENCODE CDS 153908036 153908167 . + 1 Parent=gene2988 chrX ENCODE exon 153908690 153908733 . + . Parent=gene2988 chrX ENCODE CDS 153908690 153908733 . + 1 Parent=gene2988 chrX ENCODE CDS 153911978 153912129 . + 2 Parent=gene2988 chrX ENCODE exon 153911978 153912147 . + . Parent=gene2988 chrX ENCODE exon 153913202 153915053 . + . Parent=gene2988 ### chrX ENCODE gene 153863497 153908162 . + . ID=gene2989;Name=RP11-143H17.2-007;name2=BRCC3 chrX ENCODE exon 153863497 153863629 . + . Parent=gene2989 chrX ENCODE CDS 153863507 153863629 . + 0 Parent=gene2989 chrX ENCODE exon 153869149 153869268 . + . Parent=gene2989 chrX ENCODE CDS 153869149 153869268 . + 0 Parent=gene2989 chrX ENCODE exon 153870595 153870682 . + . Parent=gene2989 chrX ENCODE CDS 153870595 153870682 . + 0 Parent=gene2989 chrX ENCODE exon 153881242 153881330 . + . Parent=gene2989 chrX ENCODE CDS 153881242 153881330 . + 2 Parent=gene2989 chrX ENCODE exon 153882763 153882818 . + . Parent=gene2989 chrX ENCODE CDS 153882763 153882818 . + 0 Parent=gene2989 chrX ENCODE exon 153891294 153891368 . + . Parent=gene2989 chrX ENCODE CDS 153891294 153891368 . + 1 Parent=gene2989 chrX ENCODE exon 153908036 153908162 . + . Parent=gene2989 chrX ENCODE CDS 153908036 153908162 . + 1 Parent=gene2989 ### chrX ENCODE gene 153863511 153915015 . + . ID=gene2990;Name=RP11-143H17.2-005;name2=BRCC3 chrX ENCODE exon 153863511 153863633 . + . Parent=gene2990 chrX ENCODE exon 153865353 153865410 . + . Parent=gene2990 chrX ENCODE exon 153869149 153869268 . + . Parent=gene2990 chrX ENCODE exon 153870595 153870682 . + . Parent=gene2990 chrX ENCODE exon 153881242 153881330 . + . Parent=gene2990 chrX ENCODE exon 153882763 153882818 . + . Parent=gene2990 chrX ENCODE exon 153908036 153908167 . + . Parent=gene2990 chrX ENCODE exon 153908690 153908733 . + . Parent=gene2990 chrX ENCODE exon 153911978 153912147 . + . Parent=gene2990 chrX ENCODE exon 153913202 153915015 . + . Parent=gene2990 ### chrX ENCODE gene 153865390 153870909 . + . ID=gene2991;Name=RP11-143H17.2-003;name2=BRCC3 chrX ENCODE exon 153865390 153865410 . + . Parent=gene2991 chrX ENCODE CDS 153865390 153865410 . + 0 Parent=gene2991 chrX ENCODE exon 153869149 153869268 . + . Parent=gene2991 chrX ENCODE CDS 153869149 153869268 . + 0 Parent=gene2991 chrX ENCODE CDS 153870595 153870726 . + 0 Parent=gene2991 chrX ENCODE exon 153870595 153870909 . + . Parent=gene2991 ### genometools-1.5.1/testdata/encode_known_genes_Mar07.seqids000066400000000000000000000001601211610345200236640ustar00rootroot00000000000000chr1 chr10 chr11 chr12 chr13 chr14 chr15 chr16 chr18 chr19 chr2 chr20 chr21 chr22 chr5 chr6 chr7 chr8 chr9 chrX genometools-1.5.1/testdata/example_1.bam000066400000000000000000003671671211610345200202350ustar00rootroot00000000000000BC4sred& fBCu68Lj6t6&BCH iYX]՗Kw}ÿm@k q $zp0,bbN zS2(('˺'D4[B\D1ee\L f7稹w9Ly\[OV?Ѭ7gx6yRiw&[]rt !廈$yꍏz쉧ze_Xeʚp%H^f y3|2x:.,,WG_@$&ϊ"<΋x/X&oXKsb=;Χs3G qsWHB&҅x 0 y_l>N^_r}ެ;!<ÝPnJ TT({B1 7*MګsWHRRJͩra *gǽxޛ· Gh@NWӦʯ){$>ӸFv1<Ce 8Uާ@ɞs@Q CaɐAiT"!  >z/Gs! e e _.;" HM,@HG*N}AqDѓ䏹7>@ل s]^.g/Oi{]''+}K?sR%.1()nEbX/ ++bR3Z," HY",Fxsm! #"d xTDy;Er('GEeMPbꧪ?Gqw am@Y]@$.AeqM,'pn@1Rq{-Υ~D ;zь8$A7X[F8>"ʲ !}'E]?X{gtz8L\SVs&ғD''QrԣATb2RU,і rk#%_R>gP|*HM蹔(t,`j$DIr59M/I,< ~ pZz`}申Ee/״K x%(8_&N[ sD|~Eϧ;FG}i0)u>'!BZ\굺"КS"'I ~C-|gSHgu^1%WC0ݧ|'~w`s Ki\l*S9s);(K)9u&#Y6@iZ}#@!z> wɐAri*<;,bQǃ(>ƨ͞}cno~^z 8g=n0٩rA|/G:lF{u!GK.ӉIGKs8|QGtt9pF MJQ6|2Y*2àrrXD1 *.%P&wT+kQ~PȺ?!K! |½xȲ}ƽ0 BrnnOvpp$1_+HL>|fEs}Tvg ⬭EOqiHwӃ: }QERqnE`z j&k*vwmR,& , Ãԇ3e0 >;#(%"Cb#B_X,v ,_?-} ƭh&AUz)PcN@( 1a_Fx X"<4 p@ ^*DM0;;ur!{as=+"ς\  GuٹuTI9%{N~ U|)@2oHuu888`. Og'IIʹ,O;Ji'}0BrHsM_S)9@ ugJ,N d>θ7?h2`t)q݄ڠ Ô|w:K剰|X" Ex 5&b)5I(QN}~|NLXKNrtjⳛ\5iw)k*Oy#a揤"N/.]DTel"Kqq!(BR( [ɷadf'GEϦq`,?)8"xao>d]uE?i=!)#r1OU, 0>:CBS8aE%h!ro ו!U;~T}xk?W.onrՎ˛*8$/ ƵG(/Z@!uxL/48ug߯rrND|rK?BC'yпɪ3?_y @ @ 1߫~_'߮7KK44’:;`ǟ ~;:fhb$K* $Fj ٰr)Wn z4{՛ aa f0ML/VRO7Ud@`Ti| zIr,Wԣ1CH!l>+B#:$/(G~&) $Td7*]"~q|=0~ROgѾM".K|7K7 ,sDgNgB>S&ŕ2[8̳īх*@^R4RI"`^e"ay]}3C `@ez@q߭'/aB{_Ms'kʾ{5ڷ*|v*`Tu4ІT@y?cYLsin^#%G7cfTECA3^:#,V&M=B<uHP~ ioD]Gf<2TT"dfHɎ9:h(R' v&Uo`hFA7|ul/.O+(; ikFN7m=!!x>jBiYFw iuhR; vkA"\4:-s4K)OgҦ auLbpY#XG8`يM-$Pgu8ܵ[4^#j:K;r!#FG0rc$ٓRYʩ7ܣQݣgd:Ȃ7Gp>c gfuq!kF>X˛1`zGhwLt e1+1 3YQ= X~0O0^l.%,^gĔJ!]b]Mʶ`qKY(d)ߑz/m?X1/U.D#ty)@\ư)͖H4͢u<㖿ۥY4 =32$JGܼL MZq,O[eH vqeBoȴNꊧq+%d܅۰| pˤZ}I|m[frOb&߹U^qk\~wC$ s^SDZ2H} -#XA-2. >1ћu_@N] Kʩ)2L6YF,`*_|_ܑ΃ 4[4L[(,g< O%ѩMsV9[, ³v{}nֱ1aWyQyш->ywWNK),9Gݽ^#CG8nfMS ˁ#>^u[K>(kpҝ?7/TlAair(jP@eEY#×PښU-qʫZ0ZuܝZr0?(FX]`f'X0·3نǷ\i+Ç8M(L=Ů{KN `)ZA'MdDk6V7 y 7X4 5|L 4l+DIMPL[K1^r9LNd*ԧVjO \K,%IV8)ZacE)JnXu\5&* Rg"DA ),Ê=`c 1GG4eź0b.}ѡ2/jz*|;ކtJ%h>0z`lO];1a[̽sKVxgq>m [N%Q11R%bKDp4,CoB /sF58s*QN3'hlh*ѼdeuEEdᎇG*yi+ߡxos[z؇zRZWP߮`ɟdJEԠv{LκVhVk,}Ȱ`_ej1ޭ⩄uʟY,ٛNh^#kZ+iGu#jwh<,5܈vF}Ƶ&Ӗיv+# Sj!m?ew _7(yB"JR?8Ud1}xQi"! Qs:q fp NpxBYI=oy4Έ4?+,ALlk 3{"&_^q|DˑҖ;`lįU\g+L+(t ){zdv$)Č[OF>9-|2dZt0t%4XJF̛m0c{9OyF!`a_\?߭z-}ts'423- -_zaIߪEl piܦ|mFitPjf]5b70.o;Yd7vkd/}DmC!=,RzMS5 HnM״ݖ$&vWexX5)Cx^uamQelvVq$߯htlJKZ.@v,j-FRK@$ɰ{kP`2e[+Va8a,Ldߧ}싍!a]=͔&UߌR,CnFM{GyԴw{`BtvP iKF!f9rO~159fAL*"S(8=ap.}$`hQ&`~U}ˎpBK9T$OpHDc)_v9m{ؓ&eXڨ\I`4i6c-K[,eolx3h!LUH]F~I$[s񀢗QJ} 7¹hHRG2ТmWr P0˚hacZ&nUq"f*ba t>Z`υmUJDlzJ8Z3 OY8c%,M 7&gdJ fqЋ6e-Y|Wי,'@0JkVi3 I8<(RFLc|r],d!0[ ɓ˽W[N,kRӤTH%EƤ]*sU~]zQ(F=viu'c`LrKMrey0`8Ǔ|-6xʼ"gcM#I]+94W8;4xg{~<z,InRp`!共sPA cW[e zPsWO3Oj, >P(A8pXӰo%_n9&8ń]4 r,}.9"wN=2s;'&,k~:؏\Jc" hB#T7Ew"Wi!}|b%TbYWF_x)BooZ9zn]ҷi>^另 -ssy}-`Rps`(SM ʗd9r` 6QtG˶WdҬԏv9^V$"#V2Xo1G!%툈g~}WʓłoH-ۘPP$̂,s`1ި\:rXXVtv0ޞg>UQr @;ڧMԡ8g`DLmOb\qF+ l=@CnS p+&5<%\1*N4o9F4B K}-{,^U:@ym/93җ#?e𮜈gq{(,勲Dd-qcLxܧyK OzWi-$pXuYf^cy>GT7oSfez6l gFvX+=m L+,8j*U^.u%].[L'w`3k]+FX0&nS#҄\E)ҋvs xAKU0t[{U*cMq:QC2JhV|xWȌ!M,-af|.J.r~ZIu9 9T4[/H/թ֩6 >sτJTaFog8lA;NuNe|Lup u/1-"@IpD7-V:ܮYI%\Q|Hp !sq)P̜kqD>㰫)qBAy(%)ɓ;@y z/b茘-poRf%dwZp{ekX:զTeQe}·694K(1~^Ab^\0w!9CBmś`~+b6gTVc1+B]IR!-XaXL`oT ?͸[]ApW5BIa>͐"eQ7*G =FiXڀ)΄^DN"]gV|3@cE tb+"\B2 >a8~DDhBe2 /U7#;t漃}oD!ʘ-[MaDl6lS~Lt?ıE,͚nڄrߧIq:ύ#)ީv:U o`Z{֮.'$Ǭ$*+AEP!L_H%Rsrzi?$Qr!+Uı"rmꪼ M+G[n_t zFE;E(.L w/~{&OJdyJi05]w [MF/7뎵t)I#I7EtT[ÿ ŞZޤ[C>^ |dj:*m:zʤNpn`o6 'v<8Ra Pё'Y15"0`iSҨDE>ƀF)Љ-J+=NRa˼ d緰-IH6u~GUI'W4Y5xpfCXMsg'k,Z!Es| {5e;2FcMZӈ#h@s +N6HrT4=S}< ZJ1O'©ˎr2h>M=c\lw2:LNbM5,e@βoń7NrlL67X.3K@nB;h$ϘNik<XЧ*[K@)X2:J.U*Zh]:sCgҥI !ZVB;>]*c&0`da-}W~726/6J} j&cMos e37i]S,r pe/NxmN nGSwK3dOG q)*Ժa[ ^.[2-&Tͥ`]so1Awt\]CIeoA9M9{Ik҄ j )ap?+hL]Cw4[ XPaGa\A\#yʢK'e QaA͑XVmx "4r];UmSLl|mU֟pA*-шނJR"&`L&k8վKO>8ķ8\Y0a 65p~đGAYp6aF#(ÅT9l۪\t?tε7#-do9rO_)JnSŋ3d KX,l+c--_TM)%}tDtndz: K)C '=Tr n,zW87_ yh)ϒq_a#֍E'J6E?PtOH߅ٌX߂5jӤ Ab*c-z}q`txL &YNafs^FI 0>6Β;)),[EaQs3!QJ0?$=l1e0=,םvtZ/GIHuܡe_x^ȗH$Ꮟv"&{.?wԓ"Qe/Pfw+0WC/CCơ!i1]< R" {/$Em#[II=Ғ @0==:J} ^JGbS q\YcA;؄#[bGU6 (5bƋ2G5IQ;,n~u?4^r6N.__)#zԧbX4'R_%KrmjE,ɥBev9O2 !RG-~ђ>SbC U;Z.oWW*\ۦ7ڞNϛ~$ 8ܳtNnnNys1 pIrq?H?Zt`ȠH:ru7'w^GPqCm7kYh#\!iuC.Nye*3mc,N1dKrL؈݂1h#:6cv gt nj7S['unߩOfu0.I=?ܚs? ݏmR/#-i:jSO9Wkx1S|deq]tHlӎs%#+VL NEsH, o(S6$+Y}]ɺ^Vޣ x8S=l,w[QDO8R8[t;؅1I31X+tSKPb?b:|y;vۥM`W7͜g wRF?9;P|-N6AH9 wAm;XaCYfw9LN/ȿ*PXwe)uLN~TP#ف~תgf?v(WY:[ԺEZQVfK6pN.;tLBZPߞ.ajtkܓZTJ*6A?ΊMy\rOP}8#8s dY +xrZ=I&8piͫ2F"}ʯ9o Y:^gaI:UV"˜i307X>X'A6;K;rk|܆wQp .+{2->4f&7-KP3 >3Fi3) s꧄ج:lg>;Ԗ.nq8Fiv6]E (适Q)un1r7q/ű8|9a>By-Xig4hKtaEW^9Fa;<#-Z[ٱe  6d6!5\D-+sd^GQ&ý0.FfwcxZűgH+|5Пsh\p'fٙ۹y,5Пs~ x|C Пxش`HN( ,,Us& F/$D!9!A-Z\YeUk^OSrHIPS&inP1*[(r[vq`ɇd:;( ox.tVN.SLŮ=:Ao43bY=o+oߔyIMsg[c؛teݑcInZ U-s[<*3R $%kKdu#".pT)?wx+ ,4V9 ?j{meIwfj7ԍ/܊%?ޜo;R_UG'lH 3>qd C;m6E ޡlVUIiDC,&Sy]s.,We eC1,2:a+kmb/8|H ⍌}l+_>;ܔS7g&y,b$`)o(4 *SI- MY9J5G!NrF 6K>\-GB~ N:fjD "V1Y꽬8|9lr-fo3Yscb]? ~.Ӽ 4YW :ϧ|#czx2s5_wD8)ď5䘛4Ń9 9'G>VQ:hsǬfǓI6zšapE27bX4˨v YoϪ}.ZK8DyMXC[{ KJpS/&Y"-m+WdMbc^:dY k%Cw`hUn}=pIɳI3 _!D/:BwwIf4ZG8=p.K؛̴LA: -,${غA?vM#=nhu]IK, 8*Hh17Bٓ,A-,rTh_k *,8&`يLFD#Xu@ 3a-1,8_1h֜.situ?V-p0x9/*,$hF[ftytuŻEbZqLx0KB P -'{/J)Y]QCN&FmM}3_QaR*4,oE"eP^}Ӎr-:r\G) 떖j+;nj.?^-7!x8!hC+7*rd0)`goU ͒,&Nsm.Vl_q`DB|UѠCژKwzTX`:}$Y[t :QTm[%/Yhn@*ꥏBqE[&OoM3 7$t5I:: ̫ncG]^z}g}`ngW9Rǚ՘gԹJ2Pe@1E'i=oXAG#ӺcRJ3d:6w7!#@-9ZS튥4e}n누#ӨIQόXqyfl%sٱ?\7j,;45v1(n΁ql 6synBk(q[A"=g!K+~+sH$ءC&*o/=*gZ0`>+ ?0Aegy;دgRO о 䛯ҍӧjo5f˨pi a!2:jV֋)PTe#`jDc(نQ}6wܹS?z=\\4QoArR ~jFȧk%/1)yoԉClUn݄PN2V ӮIYqjw:󜔵7D[\}a qEܢ`:n| ^1w*yI F'Z+ms;K# Y休\#'=xOҟNɵxo1^2ZE,CVAHuq@`0s"(wvw'yAAٟF]1̂}qWm8W\ǻ"sZ%IٖvN7@"S0]%e!u%hX3)\R9sη" 62t`Olc492/T˱Wbf)88pmBKRN{_倜AG=ZڟB'-sc^I ;7Bi?Ok,X| h M( XrX]e#KKhp,odQ >,|FE>CZ,=a5X$m¯Ln#E)I{]A\JSK R7VՎkI:FVHCC5nXF*N :/cu=]ШXI!ZAQ jMq,meߴ;_ d~w R F 97:ڊS߅,2 A`u}#r={4IvNsѢiacUFJ~U8<\P6n^Fhn- !BS{ҷUZtF2ТsӦ4YA q obf mE,$&aqSe[/i߄"= 0㽓zݧUL&{8a3j|oe K}f縨׹DJg掲PYHϑ'̷ROI `p:l ,K{ѷHEhub-ҹ`1 e.}:^oG.Vأa=,Y1Y4;/ʅA'͓FjrIC:2ܵzɔ켕yP6V$I8+CvBCDG} tiYfu*uTR+p`ӐhHiH78AqD НhquPvA(AD\paPQ[ѱ}mg:{^aR>+{ Jܺ~wu0yowܛ&.9<= nxvmgnWIEVESpKMԧRynrQʝ?°\{ `Ѭ7{|Lc %4N;ET'F-H}gA*h\@ff1ܯf 2@Z^E)!OY{(4x>z˿@m :pYIgz8S ChZF9T$5,СAhZR|0ߛ\ $HE^4l,}tǂrC:{om?Y>1kux\R!(A 8Vn3X#˭wSh~|2 @PFi|1CX "AdymjX@t{ |:0=*fPNz "yV /"XdE%ʽ0-EッŸgpP?=8O/#2-w)HLÍX0yr@ÜU@D.ůa)^z A$`v$OK=t]Y|s*!h"]g\@+hP\ f cn$+b|j?ɡHd* >wS'Kp7)|644mq(>wI+4'ԃi08`zvQK -ail>wWw>ؼ2C&8.z !SA6G[v]o1<. Z.aa,4#:ժ|,Q;T7,5/uX_TH(#̼ ⁴Ȳg? {G!e*#5ŒቜŰiET!bΠhkޮsdR,_oF5.ҸP,aqYiwm&9?~Fou;Jr#CҞZh=&1'>>Wiѽt0q O刉)Pn_ڄAuܐ9O.ws4.=LK̍ԸD9ڧR&Wا:YGP)S =h}x$g4zt7,f 37t @Ǖ;xcX6*5.$MZQMF`rBfnJ~1%d;:w"ύ =t2B+4_Go=o]dϲ=3r|Yg8RIӒ(SвL0  .Z(e]l,(}h),e2G#/#"ҢPPf D>ؖ?r@1YG*e:+\a߃UI$M[iQt\Sgy3{ =qi0): "}0 pgF03,yiˑYrMHIGqyNNPwrIKH[gEZf2)\ёAIQh{mﵪF\ ´頲b Dd$u!ҙ`4=¨E'`\(U9;;X-QN͵,RK0VNDRpY, z< HJ,W:Q&vF2 aȄ& )X*O!yIS)c0֐Ӭ{)"&Hjܹ,4C2aDᔡI/}v:JbTD@X;AEAQhG{j_vؕ?2[C͇}6. MҩQD2"\CTԪpNa` ҴF7VJ52kqȻL42ϸ`Reg LKžA4(R `ese~^ Kd-]@<ĺ8{ fQ2(3E9*u[:b,/0,wb{ ,e_},)1 z +g$ rRJ^E/ח/tީrYbuvow6?3M0Oٺo(m507MB%u{[Jk5J'Dz @dǒa_^HK$ lhDRB5s@QYGcԋ.*}7ih5'iD|%d0A͆H7skg+H8IJR`[ci$Ͳ8!-I}`A(R`cq{/|hd>I0 8)&dx{#qPWϧOK,$杖os3Ԁ%XKW6M_vJ|Ñ!+e@ث55r,>, {^x6/WTѨ^/r`xԯJy*)]44&S=QbaɲxeQ2G}#Ep@L2a`*[2bWzD<$Kh9a=oLmCPhP!^%օd>z ò{.}bwNZt~h,zNWw[X\Յ`{h4[3nmWf'eA?4#I I]T ȋ4~eK:p84Y4oE#П]P H2}k(rJ)rxxrҤfZE.Iz Q׻KAbf?HnT]ztxr*RpVXլE='o+J'(SWMd\E*rL4dqƢԑF_^ ea_^0'"_&9d ~"$w6%F~ˀhl`yxX@H*&H*/^sWŻHHg_!&@D z˛g/*JokTY?sډ̥؜[Ӽ`13t)4FAhIf0q;IT" ԳSXG9{oyopplr<ټFb47 r}F)p(}jeK ,XcbUbVdI,S%WIh>r6eE Lvi.^WWW GMba{2jf<?˳;#xd˾Jg*РLxã)Ivrz}u^_×FmcQ,\xkCx !d 1 J! yؗ S :fQ mJu2 YHfe 1D,Tr8&D]o6z=xLXb[9\U?K,І{l34u?U:ԙm?F΀XZi+yN(8{=RQ"b?{"MAӆi0 p+׃E3?`F#:]p0c_&`cq0 ?iuyqT^?&+}\p}Diϒ_UX4z#?*5/G 7>$DkV QD0Dr_T)< \jsNsDca$Zh$$H@HhCr>>;nDaI,dNjtJdͬhVjd`h®l`d3AFyp:;OueSS̹Ύxt7+䙲ÚPE/'GM9O 7`,QA`ZIO8Hwnu<;b 'bewҩ#kHTԢ(cyMbFB }cCFN[YFj YL -j{ڄ:(G?ۮ$hƢ2>f~Ac1d07&A-mӱ,s4"o61͆A$ccSBouO) "{ة|Aݽ@wjٳcJJÊ" 4ڕ;tc{ޭ\G hp%YE~OK[<:N=Rk*C7қLXFc>a0 $&ű&e8GG}>fd"̲ĨX?Arn:S%gH8$smᰌ] SrWK*h6OPѬ]L(U#&|ofc: txN=$Y(5WT+K:osd_tl\Njn fg[PNYFVZlp(o[ $&4b$eܢ9ӯli _}$E6#3KholANE`0.n{áCQE|``2Zo|-㍑m(R/ Bfȩ>`g[JERס4Έ2 AJH`'IIAZjy=_]PeJЭ-(Dy|0K~ }vLRO$'YFSas+mq-d,] NsKoq||Ù[}>M /D^G$GвXP8SrTbIse8Bp^x˸Ļ(MIA}*QnigĈPU7 zl)l &RbOCSXJXL1=.y嫪l/0p|ʠȎnH1Q"EF6JXeWTKcɁj0;IηTP_|jM5>,w*XL B[/ \qؙ6 uYoA}Kv-i)ts peP(V)Ts)+TF= x6TviB2Mj#۸~H />d#L f6kE_wx%Y?ƫfݷ C݃rX4I! "BV"l5](.k\XbP$dg(|EGE*[VXʖ+4+(L*(aw߷5%8QBhTv h{I vImK Iy! D SXb k:+A%Dsbk^9>puƱ<\q"#Jn].c=X0r"z>_EQ}t3p-C[S~Љ;!sgH,(dw(#|b+_3m%*Kl/130DH `MqMZlVnVَ.e같oѨp_vBM+nI(YbU^#DN>s3 !I6@.ɬ7)Yps$˗.=?YCXvηb0fsrt2 ̟8/:nx̺L|$L:LndI[/LtmG&|WK7Hta J6/6)T_b"3w3,E%ƅh_-W+ew)sST$C݃}Uf7F\ 1VbmCx} J<]vѼb_?qфr%1f 'w5e#g⛥xHǸUQ,VQZ(|nW;i1=1@}8gAv$#o)`_Bݩ1ܾHŨ<$>Csؕ;{Qc3{ϵ%O3A",/DɞʐfMgLTtI9aPƾ jŦPZ5A'qՉ SS4q”l\A"5<8,4gyi;(ڄ[ AYx**[Ez߅2c؄gG07ƥ%pncDQPsME`ѾL/$@{H$w,Փ;6rc'zTz j t:&Tf1ڿ:B_q 300mHwIiI|{֣ :-G.G"?dfn>ʹ<_h,]e 8肱C}>ƒ^\QCxG?IzR36(K"C`l.-6q-^ip,I3]IKakf噤yvm쇀.Fި_mZ͢^j&d2:+kD*7'%CWB}U`gc@;eG1.M ˏjo6-\LOj#&G fJ<[<;x)Min>$$fLʼnu54Du M=&idOGs Cm +U=YC4P`OD|d=_ҲZs{(sֺk;WZg(7.,[AScLNИ(?~%Čnj7=hPrX R,[Nj} njwX(hWnꂒ^?C~?l1E(u}<\bH/0d[ߨy,E&+Ǟv\FN}|ފ6Hxϻ uRmPHcѦCnqMʸ7N`1rz\mY:Rq_f,DqMMVS J* \ XqS"}=;;M Va㼆!|HuY?-DމCе͍\yP":Q7SSi/A.'۸E-h2ʌ),.mZZejU4,*l3n0G)5!?@1(ܧg0v'`q U~"o_ n}|-&NqBCa\R} (@ٹsE]oFDJtqԒYQ{{`$kh|^bumҷ"OԊMzXH}Nj[0y瞝&iE4ayE/Kt3/Hғd!$av=#@SCĶ/UN"*-J"Pzaw,Y@d^jZQgQ;,*S-~ՀN2ҁ] RO/~~UI@_M`.]ٛM&ZղܣxUqxyto 7ˆZ}Y!CC'{\)I ݰĝ<*gڌH"kɊ< v֛Z\Y/έ DOHǡ| p_iҽ(nChKgYk Zך+RC`# 1rwx?q"1ͮeYy3+#N~槥srgxtr\<yL.[{78YlK}opq'[*^-e7"zBM Iyz GTAΌ$ɶ/㑀j\bkewj!NE#iTI9OU"P>2g!2_+O1ⲨJrClU Ixn8a =|J,ħ`ryd7!}1ŌЫzcJ.- 7`1YdY,lm\bz#sm,s Dyt?cm55MW)&}V1EdBwyZ{zr(A3ź|Pp2߮<ýμnwd[Ԯ:ǖn~@OVPsϘe]Yf##ꪎ]AV|Lʃgj';wQQ;قe1=TLa{EeR!nq wY[ zDQڦq4 M,jxbnSU@@x1&9Lb{#Fu^6JAEsi_sKXZ.{++Yktt6=fO(siw?;&!ޅ3UM8ƣU^!q&L(K˛H9(7,+'&5Z:{Ϝ*Sm(\xM}" _]X]uAkeQQ_VEGϞ&q[a?8QyCڅ ;xR; ŦE+ |{e&F:r5u:G_%G Nߩ`1ަ5+/DA}wHMXr=';|+m,"hvK髪(7]!ړ)4;QM\ŖkPVBdyHlvF S_§\_fK{?1U9 $ Zs .A`&O^p|P2qh`>=Ɍ, m/72n͖Ѡ{ _+?!C=).ǍKF(!)ȺSVwp>A6uI;DZ[eF:mJ}5!+ݭeۦl1_wYgQF5-T[e!ୠYH,u6uv`0N}#NU9Ga0 tJW& ] 7NubV ә|#G~r$,Y*V{ŎjC'OC"wlnpzu/vXGRaGS+S~2Y WTyr> i^>劇.!hQ\-K\7:*^yoE-h򴇥!oiHKw%[!VV79ʲ^ك]\Y.49J|5gB?qch,ޱ8J։^~|%YKGJY)p`-81o)ah(nBs@vCױ乹Mj{C!qH}q&K8tZ_lvW2&}Pڃ習^tiVR>>Re?ޢ/p47PηؕX^ܛe:ărI\h OB"gn=R01Hx]E\OlH+E%;+& ׋u k5#l_Q."l6L'qm paAܼXmڲlNw+o:zOgÍO`DCNJxLVBi-2F KliInbcYQGJ1j.6P(<]E/EޮE hܗEl,j;g;ҵQ?kk*rCҥOy0,#XȕQ./yU+r# =$L$$Y^{މDcr 8@:6[4 qH ĝcnIJ l9$z#MVYK^]wKveJ8lA3VUb 7}jGo|Ry.HFy}NHkm!>0lM^6zC"roUFjܷqNm :ɸ(@W/Ue0Q틢c{Ҝi 6y2JF"iHmJL;:>󸾽&z_břz H'ڦn{&M{qJBDiVE#u?3`Ww`> 6 5nmB.&nYXo)>v;NR8V^uV;{YDā ]opOx|EL{\:tW`Kq78SZwkѾxFnr+I~MxR(Oc83rJdJQ Q H;rE>fA#z5a2rrEocw9_]8h;:ߞ !lNҪ',UTl\L=h9ЀhQQ=ZXKjn*oij7quE"'ird[ +Zi4>a9;:;<(+ikEDw*PLݿ.qHʎRcDަ؇l,a,c;8*u$ ֬004,`_fc̺f /ArHq"3lU7j|]P2.(LCE~,i[BF,S\,EQÑ^._܏º՗!g 4 Чܷ)U{'| PU$K@??Io "##2m)oP$%!ll"J65J/ҥ+bq [|ې`TyNYyCV ";]bd݂i){żSLot/9w6 6(]\!c}jc8c.&Gfo]u/Ėɜ,de*gQћp|%c" S^OX=]aӛ%e>h`9.+9&n>QC Sh1ޥ p!0/6.'~!R-s5nMq oM|iW7\UOBrFe!}͹:IgzϦ}幂dГWlӅspR'7jd/TyOiJDܲ?PF%3JRlrK85<+mFlǪv.=P3\CL=8WL)$&-$ɏ+r]<0;jpCRxZZX?״ !(dLL@2;X7r>8oO.+tMJoD B XP,Xw[>{knNƻ";9ټ}&;9Kd#]qGɢ}R%SPНoGBw*vDLldrlF1A[r%)<'hc>bSXSZȽUIIǏVeCtE?ώF;!MB Cn#[vFj|Ƚ@ߩ(O x/o(ΪXP̄z& |EDGƦr]"] Z%ڃp'tFEwLYN+Kj9*ّBf=(Y%^wA䝎y*6$9; rE5: VbQ=李[{.ЗmޔeqJ|]pűQ2Ms⧆6*.MsP!|WQb 4?cDTL -}Wn>,dNv曅 p$ 8x.:'y7/t| `7&|gN'WL*qP|\ > %$,Y{Clq]؍u@YY@$£@[m^e?5CeEypΕPsUs[1ë~?ʠ DD!^fڶakl&hՍ%ZDӆI9jFy_9DEJD粨72ߴ{|_Νl? tSF/;cU ҊPooYic։r߳e-Rrd7C8a/^#nWLDi -o;r粱ctdU شOT6ϵwXylA{fᐭQAoo͕c9fgo6W XW(PivZG xz"1?3S(ap`\׉+/oMڋ)IvZ$v܎EU^ɲ&x>EiPKU@8nD]`Xu40,D6 y5 p޷~[閤A6Z#}ʴ`҇=vtZiuY9A'LmiR/yArCX韋G5"p9 Q>vؽa)nv]Xη݆? to9*NJ{YQah:ֹE92؆٢ONؗ9]JK]cf3,m9 Yk{"eLZ'd~oֳl99} _5V:`RWثbŌ,^'MK2gL(u(?ZmQ=Jب ,aM3)v-Q.V;Ehv0MjFkݿro,?[Q&Jq]$x'`ꄲm1_F[+mCr_5L%O޲`p.D鿌e|^T3IN[D_P#2-Étl3K)ip?PʕgşcTOYz^!k;%EЀbuD] 6r|M>bN85O 1}ﱖT%`j .^)ċM Θ^2agu%''I%ϲMʎBCuF} |WYgaR]v_;LR ݝ&t@@QgpݛJ+X K?cXt;ٸ3uMQt47 9h\*^l8Nz~?S ?㳸~v\,E`B ̫0@0tgNOHkVDdt9uAޟh2 *ވ~800!&࿿9E\߀>" r(Szk03+sx_=^*Ht}|%~:#XƓٰBץT1WBҤCNp}2ȻF죂*c=l8d@6E!H rD'+"Hhl4j8Br/DVB߸h"x%4V.A(Hp62VpCywdR¡<*^oYeL-N@25nOONBPzٴ 'ά!}d3v5貗4r/0N+:i"-7&\AYɕU>!-"ޅaQk ȲQR_)'Khvܰy2nbǥLH,O,} P ( C%X*q9[p2 sRg٨*i([Q&XbH g)N{xheLğGIa IEQ /tV&m9Ce,,8A!,۳q6Grm U.theFI70#['RM,rqm"sˀkHe6RK"X#LC@#7:LK2d#YheHt q-|BK|$RA $=jD͠7V,x@B4'߃T!B =_~k ,U8N ܟt|?SK9;rrIk@@8z <2 940-Na͟ϾXRt3u!,ľ3Idgz~Br/6Vrn4E?iSgX$i9ꠧ{N&UM+iDIذ00ZQ/)x!20.B3yԇ^*HߜHэ^-K׉s#'Iߚd死׺bsQYFÄ~s^@2E;rUmLdkzkqy|F$pD2|.{|p݀K9^RGz$3I3 20'ŞvkDսM6 76: nv4uij hu8xc.rP$F5kY]N(\R1e>P.q` Wanzȼ[[p@ᰜ)X§yc_KSf#BS(TTRfHzhTRLݨ$ʎ8 ,g v75pBq HaYw?KNC̣Gf `gvwF$[eT8Ҥ_&$U> --Ee c:S,ZnZvYwg @ ]X\t("e =I낓&F3Y|~??KzR8ʪ,~+R(KEc4IR_$AC8M]rL{<<@u"]8,$AjujdYm/xN%Q#%%Bt(:)Q; tՙj2 ʩPYS0j̠M_]OEN4A`&r21H,6\fr-,;zzBu;``NY|ɹF]\X,gL\ftb%*ڧ ڻ'p}X]tlJjON{`%zv(y$_SH_k1oFmƨ2ex<^\ơ7ۮmf-'jas((WHK( g}PΐzyVY/i$Z=Z'I@JwkR\by>"Eè%:#Y ܙ#⓸^ uW&b@ϑͦ̚#5ÑK&]: ,W3,̉ n.GڈI ޶e/}L#4|#]db$Or}~VkUm䈛 Gs%iDnĆLq{(k:FQ\ \RAK]ۡi+4^ȾX "yfՙgil~߅%ɰ8["Q"**nزƳ!PVㆂY[XK٧KY~Q$="볕J.yId*757Ĩ9-`?CvUЛmFUIAhf8a)KlPA *!N0BL-f\/sV#dm}&q#ڟo1ŊfGak\T!m |vgIm,}0bƄs:oM#yn屨.ڹMBۛ5x x Yvf9_ %7Z v9iUGt/? Ɩ]F(θ25y D7XL{O2 sAi0X"#(˃-!xG''bSLsd%i50ݬ9ڇE%d%r CNOH}^( +Q%] +õ-zDd2*j!7*.\Q*)Γ쯤T *EW$b O#p&Ab1Xsc,vwcAUI5֣RĉyFF5ysAuBc^abQax |}14TՆ41iF.,!~iV?.&&dڧw_P@} &9f@|rأ*1m㯴7H5jd7* O(ȱ ('׀,"D P{Y5?(Tq,R+)RZ-lfJmoVeo&IʨͰ=<) k[ Z=LKQL>BeA! ůy^*~=8G%"IhX'D.)Xba~F J Jl;\ܒz{ ؒY_B5wX?q@Y-[6_lGJ ˃rO3XËL,$Hw}VAgsRa*hbL;evcrOÃ^`#]9Ƌsi4vKQP,䝎/TECU5Xuyy_}ցFC:=1!-d+tKӖEtS`C _qB~JzXmz\8M>EG)ŸJfjl0#"t9g1b.~7HLX FO>c1<g꣑]NP7`*wqA9`4nԛ[[X4,͢" @梀B"EN|\"ژ ^%ր`. er?>Ԃ 6*Amc#hvQ[5k2 NKD ͺ4_~Q$vP̛P ,A-7>]7Dѯ-eyT$zkFÉ&yG]VrVz-w<eaW-npE%|#ܝ*xGkD*#+XqetKQ`r oFCnXꧣ'Zc/V)"{/JgAzlV9, K3 fVôRXQoZ!.۰N]v,pjiCmYK_'#3}]nraN+sD|n0*]A;?4*@ߔCtn|<\d.V`?\`]"_b[p2¢.V0pK2n8g}Rިjyco؏Jr:KOM%v7Ć".ǂ.~c$(Jz89bIIjm'8*)h2og5Woԍ-#˕uҙhQl<QҁEUL8N8[C`rTnlnsl҃ & + Ca!}o">p0p:CCDZD.ڤEy( .}:6PZU+bQXMٴ_ Lq!"O˃U/3Dc,*Ws+bӳjmOVB&۰NT@f?$..}wgJ0tr:ԒSvUrx}cZ$N!w8uR?pZ?X9]llꏳ\ ɲjn}F8l5oVlLZҧ6C})0jIB[Iϰ8aAlLv49/Hwc2ߩz~ZNrG,˛1]FWJ> P$x̼JΨS\P5,Mz@RQo#*y L(Xv $M ,Zw0I.92̮Ѵ+٨v#q4S%z 6"$tGa4KYV<2&IyYY.X2hǢ<c(l% ?{>1ka,$O:Ѡ#E϶DKd '덳vʼE0kOvszSrH~Rgs 䓊B)\"ñW'hӱAc};;̺JrYXtYb.77xiLll''t!4%(K7L@R6 #uЀb2L.,l7|6}< ओކ@(T;;#!U T;S1k9Q%Q~\8f@tDFFil:c? c{mQ',pZҎCmПޙ~:gpv[OSU?iqv zȵaxoth3k&8abugӎ{2T`H9ּWQˢ銸^Pl#MGi-R8Oq[ʏl:uw8g*z@p+E4>MJfZU|E\ zD#p.`,KR'ТmpĜW aTb<1mWQt+̢ j)+n:QoɓcFP(aTQ)l#L:3]%hH8vg8.nPN1LdBQ9gN⤽K)@ | xqe֒r8o ,R-wH] )á 2pJXi$ ^i´Qޱg:b%j즉V@\s,llM"=QUΙ?k?zia%TlPrdY.:FQ`8cu\)0%fh>c,#e]EIJҒr2lkg_ڙÍc-tZ;(s_dJ26Nb SJ%ZωlsqFF%~VӐt`-#x Ts,cN-q6,-S<'@NfN?!?<mS :!āEΛ38(ġ_.e$\-c/W&*kE%錢\ٜ}a ˖hlr~ yyUS>E6:i #p',%Y- i38HFQ "P?ؚ6ji-kϸ[ƺySO,@7|XO ɳN xÔmɳtR7w޶Bh_9o!5Pdlx.6`ˆq)ovn֩Ԇ$ rB4nv P(VK NŖ: @,床#@2:NY:H],04D>8wbq 8c /\0ψT^좟4,UG$,2v{H] ԣ'`]DAeQI}QD".vKD$#̈N;iq\pJܗ[N1R8pE3@COZK{PYYI% {!0#FJd[ }s&zм> a4]3v48Eஓr:`S5$'m. vSA0єv: A欂\9f| wSΏ K6w.Gr*w˕F_eqtjO}c99:ޣ_ڶ,,"vEhFa)7}#@SZw2PGQW$:H.̓ji>vd}5dus &II-BKHDu3p_]-8HX06IkV"W-1')w 3]++RzP*:w>ځ N^`+Nvo~L}uNw-ÓXZӗMԱXEzE,&xWc\eߓaR!:ߍ6UNX$[lg]MqXdпxX*yyS㱓HW>lqܓ;D)t73rHVŘY1E[ +y#@ >(BoV )]RG,iJ+ױ)}ڧ<Èv6|rtc/|>kUykӈ–(RLg18rμoЖsD9ь/-]a5e@؀~+/M,N ) "ea}~@Gsl\Q?r^)OX"c̕:UCQ d󅺻΁/RwGk}q~\R)oArh JCiY''-J@OB.8?L\X@=D3T9k&j: .wIgƊ\q1THe1$mb${ 2-\h–ϨKKNfgto, ^'/yk'QssۓRεJ㽔$f%8ӋWW94[e!=E-a sʬ}lIؼGNɜgQI<4V#p) ι&eRZLGk i]fAR78LT֐G>(*ˆ̅(E!=\:Y{ a֒4 sGdQH2i[SȲ 9(ZD- I.K/yRI:1܁"{E3e]pMQp7^~S?b 3.qQ,"bq*ݔDL@onP=W%&P53NubmQIثK.U0m2;t=-x@η0TW {aeQM=n/)HҼ?ufei & Ud~FW,nK*y[*/u$@ª@ՁH~Lۑ2WW,l|kߤd"I$me/ 0T(oؗxVۿ4]+D@ b05-&-7J)XKeh9g=f4,:i5X4f>G-݌-2ƍ$-)"-~bVӣS'#ؼO{f/_\#=fdKaav!^%Fߔ *n\&XhC:] °:c"'OV4ky%o&u 7{iX!_K<"s?H32D -dyLYØ(Y*vٌ.S;C&pRO/@ F j1_V$Ĵ6':FܲlA'|syOH]>u睁SǞIwnϱKЁVKl> WI1E#Eֿdkqwh2pGQ;E>Kh,­@m~{y8rB9\.v SKB _EP8LXv:2ŹrE3HC\E 6XRi:>=9h/3,5occ.|60f$L$JE@9z55_EJt ']lH:\=C<H陦ܣd͂cWNg 刜nHم6Z.g.^ZKAF$~Ɯ+ &>Ogт j 'aAjL e a*iNJ_qQ԰ՋEG4S$n,\_*g!ie,j_8jIC{Ke:Q(O O)kC'\\`P.Jc7 F#xU6ōQ7dۻ{ %ZoUy] 0EYc9+ݩvd'p{E "O/Үg6=8Q-RdoYjJ D䃒iylyJWDbb?6|T6qOF⥦QBSu0='>8vU$xro5FI)lY4Ȫ1*{H{958XW~M0QŮ5%vgh0 yƨ2T XsrkfBm.*JthIH(8Ix^? . HXk"ުh6@4XgJ"+}ڊNyIBk+;^͝բ~ x&|> @Ӝ͈צGv#CzJSqBNBb֫]:F9KMM,V+)#;-[43ǩ(K,z駔pk-#0sqgUEjO}\!3XXZݖU~Fy-Ϝ^9zzj\Ay;چuB}-9KMM:6[!g Xśm+L\f}->{,3{3p ,Jq5c+貧8I℞ ]t˃$[dH)5gf"m ƴ`I.Ok`,S|7sVª!aWTc)>:jp(텀"†{SY}eܮݳn (Ej Z}%XQpy[i*i Puc2`s[ I%nuP,JWey_pgN%`l'lTni/7+4]\ D2"^Y$ 6Ij^W[_>_RVՏq E|D4n.Z*@8CJj GCbYħ3R={vn,xɮXz"jLqz0ơ@c|N=à}RO S\mt?<44iL-l9.+4/r^ɂz[YJ,Jq:0`^L&a0yH}ko"ٶś}1mLW8yy%_G\'BW !3*1̺x ҼG8&LgxReؔ0ra~s5YHk,]l0gLӞɞUUƗ(Htwpyf//nE%9No֒{,vO*4$։õn7&4w $țE~5s@ {)N18w{H$8qP;=U2HI%FO'%AM޷XG &hu9t ]IϓK.hnHVe:nAeoɛ9nH&E9ʾDܥwž:P2H|S,)xi>hMOlYo)ef ƁWHQ[diToEwUPbbeAg튷a"bKr{E/J&VB2:Dnl4.Ԯ<VAc9%E=10q!L,NZ,̭n}Vs+a;+w'O V,dbDǂveдpN5.^3Ko\}7eY̕lD@\@`ZeM>ve|pdբBY.Vi,l5,y7J>!:.G*4:AdXd~;7OJ٣TDt-ecJlo[XN¸3pBP@9ɚut!`)Xb)R/_&A?=[,q N o R{]aQnwx(wJM|lw"@𿾜QaDr=QbvǎA6('=NWy`8<\[*JKdR- g0MN@pM*P&a6>-&Ha F2ZL#0xI"E𬜤\E.PҡMy[]&6Bh >oaOpu(RWd 5|>7Y+44V&$!'PhSoAݷaD~WUK4ʈoQ"e*/R0fD|?Bq,ho:OlPT$CAgB]m(fʹZwk"NZJYcOtHGU҅ U*NaB;Bns\gVZ#TPnۛ=sP+e6 S&e,e%ù&$Z+b'R`0U)!QK Eȉ28e`@lND؍ VdbZò%,.9@LҀxʲxx"%%\8u$KܺtF"N]4*YU:-(zK-2m ȕ̳p>E5\yk) ti?WQI!As%U܁NXrٹ]a# I4 Mtr{{뉑(_Ua4ZY)N@I+8+hy>` c+H(Xy,z:D\ÝL/ I8:>?ѹ*T;;v.)HyWY7˚`Zʦ_ nWBx%eXygN9m;,tf94-.1.Z$?go¶KX wjD}!urKyXzem1|B:ikuM . mY;" ֎hk;T9ɥN oԲcmX""*G0Dl:mhĥGzQVKE]]lOYJQϒixv1ng }8@mcO*d nqrqӱVs0 A$$%T?DlŹzeށcNf-3V s֓,WypK1 e(G$HQKƩ3Tٯ*KM,JF`ԢZB*5aU&zQ픦""E%c1BYD7})p5fgHinPS395FO\UZK]TuZZ6Ntgɖ07z0qZ lV ׊7^qa0)'LO({k(LjkiL^wq9l5%J^<7J tFOT-ϛƦW$kvNam J'5jGU$4pdqZoK}~RoAUv⯭*kAQU=mE + *!QK]+S1tgY%rm-+I0L7|(AC*V "L+e%ڋ8KU:"q#TrEA)ihXfb"qV?rc#gi4iLJըٌpzUc’{FT p6k8YHNj~PKq6 tE*(oı-ՄRA᾽MU4Xf)%[ERň a@˹%օ'y(~0a / q%.Tj4N ,[:_llPS a9ݵ+'\Ώ|̍erB?rߦenhBS1$_n "$ϳV"E$EXHsV 72\D7hDAxC?iH$-gˏ `hdWn)IeV8Viyrt4xAC'X<)T,$ IID$!-xwUKiwg.YxoU؏1b<Y $TKEU4g9Y1~7XV$9/h #P;%N ȗʦG A$ nSm i;@U(Pn/0W}|h B>dž]ӪN1Fvv̢^s7D|b76Fܢ>5h:]q36rak/{ԡ͛bGHGֹ@S5k%sK:]Ek 9#CSsgqF\zvC?@N9!$x7Z6hVƭ8veU|L=$ߞ/}^%/;:m;,9iٱ~bn5U#mN6f_rm$OD7XՖ#\!Y͓"6W(% ]ߜaCYΉW'nT^BCC} d]_4~Yif:u~ӻ+k$Y X6.ء\8U)P35$J\ G I )c16`| b6ymWEkZ+z7.Z'Wl<$QkLurO'|txrrifYIG;ͥG݉x7>9&(/С}Ig[;H3&ՔQQw;Kl= #'DqK.|R |6b_-hqϦ%JC{ή~l{tc9͖^ݐ3&`IK\,-rMke 6Œë%fU> cF 0W%23 _' L>)pHd:Ƴq9uɂK9H  `\`bL>838!՛)B7p`Yɂ~㗮Po!{`2,,ok|lnPx b9cd2o|Y m;M5."EGFm-ԁ@<f{ Vɫj1Ce4JY$i 1.$_l?TwiVb6z%(䀌_m˧࿀@3hr499:49 `Ñ,[f]^ezŀYK;de΁cGE/A ϓL!ÖvQs,""$Ͽ4caLM~crM]Ls眹?L֮S4XbBh r Q%<8 m&A{X\j~PhI])^̓M# ȂqcNԁs(@S Qb8=Mr6RW݀RUAhś89ɬd(M戤V6ee͊|?!!e^L*lӨP2p);#x7Y=c#Hp SJOt[c%u$$0"81uFy<_WSLt :NZ3[&(xy@)N *с](w)[oRfRס¨P ˉŕ8Ts~; ]$BB}Q^Y툎NKӄ3b'_^&Rօ0m bT`3,:U.,N#zGvs.CfHdNzLM{컩xDC6bdU`}o@;1a|Q|R{ _y>:D -:SP.`: eor,E&7<iLxߍef[:V0Ĉm|J_,DbgGFZzw?ɡ-d[U8PY@#=@(t^w4 ;YV8Z_;]]tJr%`v Ӭj$"^[ f o໌F,ȮiFO gck}B4#Y1-ge`¤DDŽ}? "~'Z1D07x]c  Q-:'{ RUs$T bc56VTLCI0rͅo~?{^!D,,Qg'VL7.~RB ;~.ƜGBĽ3XKGuʃիҭʼGY|cCU$JbWzH6J΃ݘj7F`>") MȭyfNyF PԦ&)DR,lֲU®Y^U,Nnmyo&(pWisau:HILIX$nn9X@]xS#+lWNags`-)& 8 qD!R(p~AA 6dba[]PY%  nt, O5MiwwAO 縌1;[LJMÝ|^v'ʤ8LݹpUwE}TH5u \ G!K$0$$0^eLFMqZXf%n$KT~fXB1 ʮd}8灑O\mFLIa¹䖫*]ޯ*91q)jT܋ R3Sԋ3Jy ;J.鳠N¦8 {F1%E1 g@,놢av1~b4gcl,dgO␔@tt(HzB"D Q҈PiT{YOo>p?4 9$.&B HLہTa$gڥ*!rT ߢGŊ( qKꋁȣRE*wte1{ lʇLP?qk5L5כAOiq#5YFM'hr4;I8YZN9DeH()"a7Ȝ~\nȀӳ)ȇ< |\8P21Y Xˑ0p!=]C0&/X5A1+]lŃz=ȨVV(gyvŋ%jvZdhfSKIBY g4ٳmI4xXM[J \ k8I_hEZx0QKu>5Y.YȲol$1đbdR\"XaC&ˈ$ t#~X29tvHg$,$Fpu;4 AZ`Ksdmqs_RʲG WԘcN¶;ɞs#pÃyAˌH>KΆaK>`'$M/hPCIb e_`ݶGAR31D#N PJ"N}CR{P*"R  GӤgO{tB8M|4v wV"%H9w[4$ zٚqb8Q^h9Da*W KXґ컃WOwA-҇?kQڐ'P+ ? p=[1r*dTqXaN$4?- à\W%n U| " /O:[]"\)7v]:a8unX`@흂{ɐE9r.NoJv~JILG@D p7kRh V2AJZbhC~H`2MXzW:;;f|$?dwhc+XM=;2!V̻ U,aыz}`?%a#O5e'ADl`ΖMH~uГyLo &< Jhn%vPJà:*@eX}o^bIx0eFOY$ 4׳'-KMWHc+Qǵy$f#ohQf6ǐXl6nI kZfD{'R}"`*XJ"֎T(!{jw=NF~K oΐLWI,L>(ReD/ E˄Rc2ɃV5|'27Hn~VqYbU%fC^H&@6F򾖚qlסJ';i*F'F3] ͍R vW2 $:!;F )B`d'+ז[ą^B|v·N,ʲ^!qHqe,yBB;{O KIj*AIL"sfiY" f!&x-Cq6H@tNy'PeVڰ$ 1dJ4V\nm֗۲ F%~GL*]+)(ʱDmUe4OntZdCi!N%f1v9W 4镊v^ EM7[=%1Q6bT mnhd̝=& u7KznUg}w:s.佯_]7qSj)̯C:s8<.3`5g^oӒW|4Җ)sG ι,eIn1pYn6GK. yjHBZ?ɽb<;źZfUOux4ⰹ:oXJe() g-r"& K:[F@YP~eVs_raD;\28i!/+<>G"1ˆO/JŜHHt3f!0P O%Q(Mo35X gIځ8 J( $n'sx#Xot7<\_ܥgz埵ZjqP>PdgE!%I? dݵ;d,-z2?w"z.mR{tq7ҍ7+Jv,ȻHEgq z ピUl'%zqx*lM ֹ\v.=rFzIGDKV4\FKDt_samB7L4㦉kb{F`5<9W}}iӤ=B\T qOwK CX yE~HnpD^Ć#ۙ孭vjo>@t1ez)U6d'dba4)9ȪCﰾƱ^пDw7 /,q'՞~kr}B_b9#Z{-!bEtr'p "3a℮iÍU)TDz6?6^VqG3z-" G JˮI 6w9OJ@?qtu@4[ޮ7wXoƎDγ5ᦊY{=+U *Z5@x7(Q9Q>ěN4n`곺|au% (G2:Mo:h%n]9ꋛ<;Mik<r6OYAD00( [3𣊑.%+.:Dx=wOb&,[|c3LǠϜfL? Z.IHbFF2gcWeHH>Yإ`a-yi5IB׎=iTЌqQ^r]RV&qhLڐi?8=k[@Oqa"*n&αisQn/n]V($Q̒ E޿'r^t2"*mM; ͸|m\ߣʵmĒ6J7Y'8}Q0$3&s&ך0jIdx荴TC:sv TDvVxWL>}|7tM >ATzvݒv $>=Yo%@UYCssō1gN#'P6Nn?"$zF>Š٥:@~$ B{^齻:t1g&~5"n $F+079~57xBK b')j(G;YOFJ2M]+L(O&Ǯ@\'-5ee_~:NZP_; ^*׾VJRL?84̭S\0[c_MCBv{,2[O7HPn23vwHƵI ermi]$-*L(|INpEנJu m~>S]9$h,9/e8c&%p k0˙|3%|\?$$!hCX6죝.:Lu8Y>jysõz@[ _,΄G-rм=[$1YsB1 \x_.7ԏhI#ķ4+6)Ydy rKD (eKr;_ŃзME'] ݶrF/ Ծ8pťt}slљrg /Hw˶r:81xVe}V3:),~l#BJ.Dɹ_!'(/td2~"aBЁդ]Ԓi t5#.JLllU{]OY,ҿb5'/FK%&x6/ڜabyT#sOIbBF.e' mK8e#&O+:6MH? }ιza*}ĺ.U괥u&&Fk?PɄp>$U#$Jb$Ȉz)3f Y٥j49x#98j1HUڜ,Úu?2/^ f*V@1F{"*Y{Gd)mPx/\ĩZ>g!l|I VYQDHX NX`Qsƣ?< Sd>A z9)ɻ i'-s[;;{U >Z6,i!Od*M#PxeXY Ƭ' RuOjjkeɫg*ypT`j(˸> úa 1!olY|suWp\{ 7flJcN0 (&'$0UĨ_Xi@!㩤ɹ_j )~p˴ιRY%?"j/Y|KHÊM8,bt:+8Yl9!_\ٟ3w SR7&AW: WL=:QΕ+$IKN@f+y)ͳmq?׷etKnaxunDc'rWg+g$K3^2 m<"Zr$ŋe? xFv6w(/WWKED9߆. ߢg{2 -{`Ҍ*;9o,yEhj9Y?cGG$<(ץeX|J)I5(Ǽ/# Y;i ?$:_9j)e{!U0>-뽨%*Ѹo(%,[/rť]MFX =à#͖Lta8z?V SXR˗IPx%UeX+Q?rd+;GDAtKQNLhTq&#%$LUU 0DzT.4']L 23f<̢5;Հ3^3t)XKYdD?]k}Szs4F,VhKWC E/`pA;-m ,!= }If|o~f&eOd9X,/:4IHl9 \|r-+mP 1[%ֈ$ʶ7E##+,`0Cbf2%SrXeb~KR݂ԁ.TGzr9Ofq[1NNһGc>U : )>K8I٘ZXߔ"Hg7Y0G IXd w+Z-tpK|Jv|H^-#!o9|O'KZZaEnxre@ Spic3.0s$ʢٲM ܘ=S JA2fC.ؤO0l+ 6`?<1Ynm4F"m봾~nu1^W+cJ tfCژl4o7F4|6,7?QŶYgϣP=7, 'In#>B$lzf-ReYPv[}<"mFYC)n Uv*ZM.1b3C໼V-FJ❮⮴ujN[$.;gB>I999^hŹ/sl\ZU4n@L=iMWιWnrѿ8Łu~ū7-!!cL_PBiÄ"X^U5TY W-l׫/;bp|FD.0\W7m^Ze:dxK^djpDhH0))MQZ&}ʑr4Un> ˦Q{dh/M{k!B_j:p,VO gަ7SV^?AuVzkQYdP A((Xr.P(v6<4' J" R0N,YLk㿡{ $,4+,+M'T`NyVc~'ˑ77,i+V,D[BьEf͝E&mM,B`39`g\EcR7o\-Ϭ4|MRg*q.q0Է{MɌ POJ`6I8iC pA%}X?{Q/`̃N6qlzD_ WHN'rӌUbMQ&;a?cVQg " /J&za8%H4st,rf]SP~J:*x9"gD_~WBZpnHNr7#Ng9Cg1 /@ `SūH;b]Sgxo_.sԉ]SrWաPtt2zASV ҡ5%_\Rq=f\Pķ*l\P8MʹxDome+ 3bяg Ilff*g$$CT~OX=9Q삺Za!u٧SI=(s9%'tG7۫92R*PXpM|w M(|PkMm[Cbi1~XX;pk % %ݞw\k%(êa+nyÀ~Hi!&SBAzX-\}p`fo4`>1Қ٘n getgt1ǃz\P%Z5_ 71޺ )1NTҠu ~t#|…..(\Xaɝ \Zn ʥߏ,}\t&zla']^$)O\˛/8[9J/@DR2y # ~&1nA28xu[M =5Ij`&h\ןN(~-tFn/d5, ?l͞/ J\Y2<7>♓T^Ž>b#n^+N_xuhǍjX.ֱޛ,f L ^w7\IN!.ej{Yk=3qF^=S,ڕa#6&cw;#w v ϳEȥ;gmkv[[\ -yvM&"18ƅ!QL͔kKV,43&DpVn|6p3u'$,}}ѫv4)ȅՄL60GA0f}tpV¬f+g{Ÿa9Q_ŭ|{ӑY\O\^dI D\uN$(9 P.g%䪐Ѡ5faIHF7cFH qMH啿t/̫]<HPXqs~[[A]},L}3o /d4MyfRe]w.[$p%Қ7>`UU,+Pdb6Zl\3K}^8 D tp%ղh7YvaIh3_&kT|3ğ':oPjlzg(=CO{I.#U 0;'?%@_Sl=la9"tsZWyf2~٧8ƍ Igw<^No[b$Ǥma=QL5$Ag1v[e~g6'g\Ka;_mI6 ڒS×SL,gjJ*65uK{'x&AcjѦz3NX+.x<* '=MwCABCUE} ewY{kwrj$}w N*2!2ڀ hH =ǃlTEmQNn jh4%=NƣߒV)~mpz>gY> ٴ*www^N;$'}鍷?^~cwG`M`$|M~᳓t2+fUtVUH9> v.m:jE(:iYJ4 9ȑg^Jrt"4)YYMgpÂ3HO$KS{{_ e/Of8Nb4$PON%4q<߅ :ONh: dz(e) M@z: B(Md:q?e',h<N`1p_KJhB~릛?0,Oq u/R,EGnAFǣY9Xv, $tu%M0,W1,`i#zѵ}nGTRr卵̦%bN]i#d^K䖢3bAp/g??d4=d!Y$Ow&Y|0NGE4DHi_To3?nH߸Hy2+&rG4Hz.$Lk@䔏-✒3t-Kq!dN'RXehb#f5b+pJ$NGrv'^I+"S6N9}eZg}"줈<h6-1s8_1*W*3ȹ񜆠=4NlCa  &)P"Q J>:?& ugCŠaoOZxrV siLw>T!%OةP³> bOx3h`ioO*ourDt(Hp(9 9jz2xX'e-0 /D;1x %U,V' BcG*ˎ/Qg4~Tb؈ʹK,, #)e yK^EY y 6k 4፠}ፀRM@6D]b]Eʎcu+ǔBeSG{#aTQ.c4M G0뢪6 $ J?[9f tIhP Q)r 'ǻSuT۴%:!`*9Q5FLC,|!8gkH|z Z00}̑&z~F-mQp sm,Q'C QvH$?01,`YWYXP@s l4xp{Y┹ycuJhHb6xgx}/C_ܣ` K%``q>@q^AYP^PlK`$c^HbPD(A_$l䀂zCT"1Ӂ2"yms'ǩ%P.*P=Y|YP RY@m.{;ȻÏ)Sw|G`$]nhQ@Ҥn4PO4!8A>N Fw5:_&`F!yE5 a؏WT{bWaaC-U*)ǓpcM$rfPB1ќ,FzU| KfY1Z; 4c&+r74Ȳf<"N'c8bxo}:Z/c:NLpM'L?6Ǩ*@9ɀj(Ű/[o m-R<=3$͋ ʘF̼`ȂvG,܌sȃ1ȟWt0*YYw1yN@[`ހqBc", a$EieM<IS}T0 2HwcAYws)[J{ka,O8 +-tG3T:bWH)A}uH(*OT 0roPj'8tDH1OL jbq#9gK0i <.?D tv8F,Jb+kfoC1.j!Pni U-?WE-(g <H{hfpV!&qhYbb<^у;)3RTM8XuaA!s(tAqƢ% >,oq0.ڕ w<q2H3Y (e53$V-MsQr*0s',KR{K{Nre'ǟҍA& n4馳j 8;A0#Dy9M(4 kabȻU0»*niB >1z Ta!_v<=Rd YoByfrupdrUmlڹrrt@L+OѼcN?GTnĥ~O^a,0 sl,@ ĶrOֹ֔U[$n$$K.xJFC`;fXbU*%Yg }g,,U=yBw* ,5uA@L!̰rH;F'MPr- ay:uC<]:@cf,*NVDT<%MYc ϕ' rLEϊ f0쨏]Gw;‰75`=S1gҥwD@P%34u]{.@RôPT|˭4;Ģ,;G OQ}!{=O̡vSgXR&V>W[#Y%+7h J%<8zr:ois\;_qw>Pi̽b>~ <|Ez6U= J䐸 maA'-R=[%yD˰TI)Hy6 n::qfyYl!e`6o`:-:lec< +b#<M8|\+JPe.:t6 Oek}zsQr(rw)9`R?\`Up,Zcc=Bdl,(ǚZTjaF,K Oχa8餋7S~"R+O逑@rA0x2}S'$%QMg#.|X|w,mY-F%0TekUp$e6b*PL Iå l;QWZ   ,R>$:'B>lzq^,eF"zD*kcg)lSeF!NoSyϞaX!y^F%քVQ\ˆ%<ݣZ[Fm¥zae T'>~)+d`_bW \h@ZL0ے*]bsVG*eNQ`!Tw]&N3- 8,XOâ15@}u,5$0g8,Daa!8z̼H0lPBVQ'Y4y+teեQ!k9CM;q#PSf3WjB G$W,dIS?PM=R%[EmaFKSW5MbC"@D!q_vl($" 9,o\e\UM xف=tr[4ەMnM0;hraYX׭B]'ro8ܣd/4:ҧ#Lo&Qfm'OJ2I óH*R"K B)kQލ~9&n &juY q+яX{5zF $FaדIFuMB?;}¯du$zUܣ 1t:ha aCI^ҴO[o3ʼANXBa?k= )H|,ÔX9m_cNeHc,wL*i9'Ieb#D5^>/S"ͼ gCt ?=uS>L o/ $4fmڵϝ67HIzWz=g6LmdCW7Jg!ddq $2r]&$˧)) j$6U; <*+c1UyBSTV4>-ݧ'nY:w0&* # !j!? qjޣ:dr45(E'ui3n`r|irt05%%_5~={dWEڡkbY =0L&1:} Q|O1]ܝ·'Co-̣ʏz:1i8xxK"w|kT40,9t8 xgIqYG 'I#Lv҆bB .'Zڵ94LGqЅIީ P5(ʘݗſ;Th2sM{e^ LjE/ԃC ^ΩyA Õp6l5Y>IX-wx/=YGTbIݰ t{k).:|؍63NYkxh]3M>HDzeSdD/p8 mR>9,vCddF*c{9+K1T`b܅@1td3%[+: l'mG uQ`]j>E^ :NƛXv&Hl3ݠ#i-}8u zxXT=e+(E}Ƥ~mWv N PwD޴CæhJtup@QkP Edត[NCs([$ enE}B/U.*PLTJ:<`(MPmVF`ݷء"9yz =Ĩ_ -F)A7b CAq{` ױH,d9Wd>]Hi K|yc3;KFC懄IN3+*~"lM XZ4LfVĖcO^=Uyamq7)PM@hNeՀZ6]x 1K|e:ڄ;whTc6Fݓ[}/샊"dè]]K*uß4mS_ErHA;RO奦O(r5kGA' :pmz!r>5q`cbyN7>G٤,fӥnOUo= :lL7.luwa7[N 8E(KtcS *2~s*E^ֶi[6]ג߉ҡ ԸEH+;ӌJ;fTjW喓-]?IGx3+րSeƴjm')r.NjhE_Ќ%zεϐ\KsD%)‡smtq`7~]yي9T:Nqِ=N.mEG(dԬLWL}^M}U%`jդEI5J=J(F;1+̽E9#yl(d%M J꧊&}Z8y,ՈK٭\GrB}i܍q.t +56mʾ^EEJLٔɼo i gUzAs:,KbϢ. ]ۘ͹R v&]8w,&Ni:6[U>>%So wPL,b2۷/M;f%yDcR;y"l-G J7L‚Z3 pKFD[mo P8λڴj~.!,C`<(T3R_e0\/>ܴw ]*^>)>OTΙ8/cc 5Z6S Y#vs7h> cRlid&bE9^;(:(.# .zMZļsM:9&`a,(a4*8jN %#V3/|,ZvEқoVE Oq/1bT䓼}=ɱ&TMs8p>cR(ŊK;[lqR%@:kf1]D9ˈl`]"VndBeTGшZEKlOWX>yKbo >Ucd(J,u%Y~NU `ZvM. Jd%oy5ED?׉]cL%KH`pDӐ\kdfDry9UVk%~"$\:BDY_K(~+XN'dSmMΑ0[Og64jڊ4VZ;"1t,G| /,EO  5;rJ`aη@:ﴷZke;}\  Pcagؓ8EN+Pem$lrI 2s,1 Y%p`#Ίu6D,c&Yl,!:,f2YÜh$d6FŚm0>uG43Y] bp.3غHpzsɆlo2 . ے_F~FgDa`#YΎ"Z"1-ݤNKGMKN8KL\Ouf:^ZcxoK-&%bbf*M 2?am_T>4zXwL8͊ր1]6j$-QYe,RY :lgQ/%Cs]+҇mCw`O;!%u\S.XVb SdQ:zɭ*Pbw)o/fD^,0(a;K;ނCr/l[G85(8d[^gn^26hE*U:Dį,aZޯU_+Ϭh-I7d Ŏ@"ix]ym,f=YOrC %5"eˈ0P:gԗkU؏؎g-ܯ`1M_"͈ø]IF`] LTT|1}X29&7jdܤ˃ G=Nv\o4dvoc,',j" i:#|>meJ9n"%#8Zd" 2ˎPonsJ9x3p g 4 )1[)7X %P[X:ƌ(r ę!+=v^AlrߵV7М*kRPcԅ:2wυB~J*|cfo`dQ9z{/#WNρ@Π/Ho5 Ls0f R_c\sƑZ}%(J@Y.v@]Ү7j66WKHn,!ȮjVbJkT" }t${y;IjUG x>[}-?&%v{BO!h{ZĨ57&wO^%e…w o*FG΅ScXTT,fUMٰF;\rbᶋ$u7o!'Z^6n٦%*mY6ICq7rżLL]sa $NF(H&W)9y d6mWqx$J*`xraqڕ ] RbL2miI%X:ߥp-H1&zEb,&hPr拀 nsR6!kOȢ cf'ktpn#ZOubRCߠ6qMYo扭Loށb>;]n " U+ gݎ8pЫdanj,Ũ9X|s xBO6,ptT̄dYVVfr} >Ԇp6LI)w<]@]Jbуl܀=6𬀃.0aF4 se%q.wa nձϘ 'C*L&J"i2fZ]2t_`(}u(#\otATY"Xvt(@L)!d`&p(zלr5}%kSt Ϙl}wa~I@nb h0UPk( ;y&# a7%'6P̾40I!|JUr%>g#|WLqz֜!4nn>ݖF5H0f\V(>dFngB[QYåECDŽ|.b򚦶|wbjj5nLH3&R10}a&`C)@, Fůu\UBd@T)K40lese(|7(7vR5yBS1c 6p.Æ7K 6#d8ӊNkҒx}aEO簽ǵa_6NHR&VW3qfHz">.7ёX I lFcqSMMYCz|y 72 ꭤ+Q-odF/a7sfyY^K hd[;@J,kD雝}x I:M)\0ކbw (slUh-PMŘn1!wnjx{tYg 7kB_+6}>_jMCrn\>,Asa4VɁ@-ٶGVM9gx7;bsD1q0/fYhm((+Ra5QL (3#UNGIܮCA'gv\[0AWk7ٶwP%aJq؅ x!!DCh, }{%iHz9n UGNj-;WLKr8i4>.*Hgfg8-c7a &UA(p;by {D8Be2Ҝ5@ ӠbT1sOWopc8F*\w.޼Z1RPex*pgW(8;:85tAz|wxs__!8,/Hς " $+.9d!c1b85a&Iаu눧mRUj6 fDC9^8c6a:BRܞ _}Vq/R,3h. 0lnVj.no٩A\Cx}njrm*̌78, nդ`#߼C >A79.q>sxk}>!w#,\=b2tR^ >,;#pjj2Q@xC|)zp1 WqT'/a_vqgSfEoװ>R;?#g}o>C1[hn9fǂALI=֜d/$3MJʜ>^Fs.A|$&^?6 8X8L!Tͣâqnvbsi!ϳqx3tvpD2,;vtt'~k ,kC rP&&׈( 䱶ކMlX59yle"fN!^ڝ2|UcϘ]Wr3;ᬡ1+2nC֓.e _d^: 7C8>r)VgnUk 2h#Hk]:" + $pdQQ c󩸏^"]K/+@gƘ:ҼIB$-cX,f>Mm!7jXKXl ,O.f[`;n<ɹ;(E-;ˎΘ„u"yOMˀHp\b&$k$ 3bw>dY.[P'Z̯7e]"i,Hn:V]<_J .Op =XR}޾l.<Җӆ$pXڋfly@su m/p}WMto7(AY -]y/oٵ4S=Rb>J2ǵBNUׅCMmiso5s2%j eamD^5x^H;d6rS *jlC+g!B)uUGlAd=mD1SV'YQ>Ck)%FGhp\ b"O̪neW~9TՂ6̣-K22x4`; BĨ2okg4Z;)ب2v=D+ҩ)F"k10ieSu1:`s:1VfaquRG2&z 3&+PbM0@9s2uёV_ ypcИٰ?H-I$PFCMKk̲w@7~bI7ƑjZj%}Fi6Iӕv*%@Ri%~~a {t19 jShOIP(Fg OuvZ8c2R4$&S!iQ{c6ƚM}e>QNKw@`$xvCM˜=c5K7mmP^/ +>Ucb62/D3xES[FC,cL2Ս(HK޻dʀQ]'.36YVf|A$ ,`n{HXv t"P;tyLYA Z }%Gw+[#ndbDFQ}d]k?'DqƜl"CgLx~FSNENru.h{I)3gt8'IA%JQ"%&Y1\{icx]"}$| ngcqtdϰ`1'ߪ%dnV-kU;Pu}ceȘׄC75m"} cK=cC$@{T ve"VC}&/bױ|I4lTH6O1;bHZ1$C׬,c\X~!^}AOOkX+%%[rϯk\[ j]~+ 8yH&y8$k':t X.Џk33ܑyXn^z4 z k0 sOʺ NgB$CnoS;8q`LY.ApfL J< "! s˂6Ya~Zb1Ht/6wGl57WD \ +x0L(|`x$gYxH'[F)qM(%K^:ר^2B$BW4*ﷶނXKA3HR`$}C:*t̐ M1)HzT~¥{32 v$۠IQ^O> *Tz"uHVG*wEcq˲:rc=4{jıaX5+XbÙ~هhBѺ6w8׼eW4[l`ÁrpD1P=Гׁp]w),;4!)KŚA~5JShDHuQ;7M&aĹ`6 ͭ9!_iL:b"&`g4>X+N!=0)$TI>Bw`H%@ɚi8̳05H=+L+Yw/LF3q }Pa~qiźs,(5r:>m$ZJ:C&GyEG0 Jޯ 1!-bNxА㠂z4nKQV+hߌBCPE} wUg^_Z:y$X^wMm( ayӤ_G!g#}Qd"J"kdJ 293dkU^uѤ~}=ZzZ-zKjogm{G}ƝgL>Up6MfbXۃy7vx?=:o >Y2|Rͬ綧j-vgN]_@v{{'@FgFgŬNf6~=A`+nmomeIӏ :$iȰ\fb[,/X^X>K2$Y04hqP3 dV5@dHeax1f0H7陂@[ޔ2+f`<+ ?1!gMF=KE98%?3N͊I5 @C"N+[[;e8 trt9&R!5T)6K78zT)kb9` R? 2+Y 3&shH5(OIp .4u3'$x0 lh-P7iON(Z\z.cCj̎8̬̇<>y>rEq|ba;V-;L9^MWy6:_|D`N)&6CÓY1񔊰I[n'2sģc0*x&&i9p`CdZ_NK ,$1T 5\g.(+6.6I9Q{TŇ; ()aQޘaL(Ԓy:` ŗ{W3,33FLhl(~ٓʗNȒ*1M1.gT5`4M''xÒ{OX|r1\KU7Ce|vO]VNCbKl(}S. #"ɷymX6 >)v%{̟IWU>jF춳6?P }zS=St.DMji;]IB25A. +18FR:E P5+E!,?R^P:XUޣLӌ/~^kL[{Og0Zx/gfh!v 7A H|q[!yN{Ct<p'3v $\\ʚ` 50\L&r 0$! iIM-v\~!+r ? f`ꡊbREZ688l͟,Ա1UUKʁW0xG(4Ug&@2RhkjZʖVh"`i9鲣8' (QW9PLlma1tbW J黇p`y`'Pˁ)W? >D8F><DŽ97%4C=P53⏅ȟ;t%~ YvTUC'@lm7бBŠde(PL"u ܉@rTLl Qn߳tmlC/8T9d"l'hJ|i8A7'lK8="7rzooogHJ4R""3HKx8Ԃ2tzoU搅[P_rXP,K;Đ.F0sAzٵh`9KS&Iz {!Q )߉~ s~NHHnb3O7ͤe'qk`o;iv XiZ.8R8pXOQJ.`jj\#EZtCײ-d5W pDbdƊ#^ u>kcVv7Ds0$I H6Ċ(HLA*Q8bp ȃ%:kE(BɽQSrjL9єAk(AK|TrUw*st_(P.38TJCȧgzhB=5y 15B$ˈBMG0M@Is7!F64Yw𱚌2GŽ#a cbdX4\`b9>uuf*qN{5@.42]zbB)̈ȍ$&w1"QL4  3cv`iJt c?ܤǘfZa"t| Ȳa\5 J 0C`vi! Im$@z %^/"̈&k/"(7L?{J(,III8inX ˈ[-T,PpxmY;XX0+pA)fB?E0ɳuay*wB3$sH[ZYnK0raviK1'Mhꀦh_nt@L5E,z|QxC{"p.3 m;aGGGQi&.ҿ k"q#c긚D9GsA:erAߦ߉ X4e,b`ŠA!gm&{ s̻V`(I@lفAs|We&׳:Ĥ[wWk6/8$uCp Bv7|D@*÷ bI㕒|8ͨ@ |VL/U1o—ɹn+/mWPau./57r s)YܯAtj4\@&fBway.n=L%&"a B@!R,cLZù[N2еޗjE' [9 S1L'L2}! I^/2ݤEgXvQ>&RnfkkkmqյA1mPP=a.[uJ G!҅JQE>ՓV ΐ]E#_e/0Ss.u$Gρf1D\Hx1⾓dzrřC,"]RbNaQY[3Ӊn5B.E:gjjX~2 R5.{ȍS㈼Q2T|;zR;B܀BtZcoO3Zs@ ;3%RihwL *Ȳc (]m^<usɄ§ԛ8)U l.dI5{*h'UZvnů`4"A xz,ϲFkMLܡl""_,y&s,B Xv,*d]6lX n###0k0(ܷm;ܪ;(jReG-' ԀBH&Beo"Jd@!EIuI#G)E ݻ}JĈIc/Qos¬0@5\U1,X>Q|>Zֹ Ţ97LHL_+5YT%ZS(7Q:/ov& t%;HʆH5ch$<đ wQ)O%@-`Bx.e. d mbn5$]h7%o`wHW7kBJsӁ aCJkJ^҃K=(%NmR(9b|CXZͅ70-x@'$=S[[u(\V:BV^yuw4)Ac@;ڎ m̏R9&j#%b:N1Pp  Ab$6 ^KʁNu_= zu,dSPhTr,%q|m=~C;W=!iOa!Z$7 1^+9L9ZlK򊗠oEKGhXI?]v 3ĈY:~> z#Qc|HPQ o *8/ĵz-yY,0ƞѬS:MZ`tHy }G0 ]IN wRXRY)+l IiE{C> M\Z EYv ]T*EZ*op?s5ƄPfƅg!ps.u@M4Ba) cJYSvjw!`ȭ(C97ݦEp٬d1BRC;8 GX2(9A  ў|1xhENl\&`v{5IVC📘:f`$I&,HFB1~Y5ɳYvgd2h|icԘO Њ/(PNbTKtI愨㊧#d>wם W r6fюReJ$H( k`Ab8WR$Z4 CZ {I ˬh9 ro\Zq(ޯ{_DSnBzl1 zdPs8mzdҍqS1*# 12K"5Zo'um1)v$4ff Z,YVqf8ސߋJ 0,:&".*d9ⱊ/=MՏdcu1܉acȱc2.*Gxn lGoD -L}(u Ti.,IVlZ)O EB˿{_`bzh"JPKhWg}c;îӛ0.h@{L$qvǛdD J9@.@FI:i)) n~Tž!)fČL= յfj($h %Fl:/)uJLAF h@i/2z~m{肅E=aNUE&n %q,,MML!OiА.K)ZݴDlAp\uь6ӥ[Kbz_ ).,X6L( DBeey}~>QSQ#+={W/ aX:YN8'i}z%S.0§ afZ3*l/3wB!/ 4% Ŵ-4eN27%iXRN\؝&u[)22)R'Y'7@i%#zyˣD`$rRˀe~32IҴu^kŭt&" oI:Ŭfd;c][K`]=]x s/5·oeP+:~W~pp_r;eQj+!t6Uvc9WJC, žL1ƁY`z<)7n`C%DY3prM|`dovϢi0PH 3f%Q[t(g7?>%z9@פԱ|NgMT=ʻ|rGn&5LvZ-Y $i(IDm&uW3<* q, kMf+`88MfxC8O<#1ر^t\Fi\~-Y'nK|^:ȌLJThm@ J2GO:|xawB x XA *ihwI$sxd2˫! Qc!aw6fL|FdfJz$$&E™b? m f KEqL{'"X<M1pgs #6Ԋ{iQ)f+{G;ӛ;q93F%ЇXXpYX w+XL4oL) 8xKO^ %y *'eJ%X`V i)-;;H8cm<ⳫJ99jKI7ɉ|P$',B$郊h-])Qpz8b@b\(C1mZ .18'ϞCcq>wL 6>l'ap%iNG^ ܔЍgEZD9@.GJݷ(t86MtNH6p_d注+PC\hYԐ1_dӝ;ӛ^+o/roh_)|,Z.q&KCZLi#K\.G; OʕѠ=ۉo8s2,@ARvc^E!%͔-)1鲲miI^Ғ",|Jh6<ԑA59IDS%Ǡj\uJ&G+PԹ)Ϣ8Ʈ0RqhmjXU hɭ = v+5 8M39ۜXx`]ȯW)+\!A }Hl6- -awxNo Q4!ʘ+`i*VႂlASYz g1wFo'0/h' |,)Y)fR6 Dz..?UX5&Ř9QRXvZ-1@TA:{lDu!}k y∑-*ŝыlϥuoBٰdĺsLW&?xk隆:6 ?aY&Tmp[g+@'a_$m43f|wkx$ 9)Aq#жX KIKv!YgemZS b DA*hHt( Ϧu虘 I#a㎼އga51_1c*|As)o_kAm V3u[?Ѽ"^Otc}YtT >,Q= +"b)- S>-mE3=tGdܷ$ ,A'N\[Mu.SbI.pA-ҩ~X_Xcr乃d qYt#\JGaXQ6\X@6uƸ R9G32zYYkQg~OSNԧ9\ KJ!ȳݮJۭӈZ=Ӵbic0S#LVI6eMn&aS`ҩw D:^t'X;|Ǽ1a-q]!&y5hzOH D*ftݠh\a/ gf&(ֶB% "5>R,} H $mφ,{Ŵti;7/\̧4h%#7Y O`pC_t1"tya>MWzab:sM("/lHOl,eFb%B4|/=87!G-,_wg,)Jf3tˠ4okHew+P̕x}} *gE6G=[0t}/pz>&qR|Kvn]9056/yE˭J$(2nȆi[PvsK:eYpב2؛DlƸ/_%5gCߩEePh\۠ʢ`SUY&u8,:Y NԸn:,.k*I TQz=UqZ)\RSJߥ]c\waQSlɇNY Yz.;͢t|[VQ+F-O ! GtTCݢ pL @bF\.(#zLIUЂХ7zXR ]4,A[C: ]G{SP|hr/`~QtrȭP#EMCV ?cz$V@B2],}tc,;+(ֶXo2 )ܯmnX0+vI ?ݵKab{݊GtGM+R}TnXr"Yh~KF3[&%qMieaG2uG@|?G2-@hJ@g$na¨\ EAfB%KZ&Ƃ6 4S0mUY䙾(A`oŀMئeHfsc9pV.)XE%W 1֩ݱ*E~+B XXItI/\I}*%P(n(9L{ шʇ#2ʋAǾT#J<[PK5rX9).y2MDZpJ*Eoo;߯enO1B֞Z rlSid= u[iw``2!Y aEã$wF:z V t9ĝX=2=0-Ȼwb@%|ta&(Z$c}T=M,^F\5:Ml}KJXC5,M 1*NX0E ' qrB}u@xVbQcmW{~DƎ CmrGfbk`E0Øw i?pw|lI,3gڀqh; J8U(i>؍Bklq.v\-u,*W 9lB"h^e1bDlKTd 9.-~ yegc#Z䣽q_\R[)eBUk~/ID=Ѕ"2M:G^ ,n]z~4xxjؕ˒4;/$+b0ւ/F*g90MUX4O \J'?` 3Tſ{e[ DD^wԗP8[M BMV %^qw{7oDj9\3<>$ N^|+\IW{JIPjO*).ݤlKlccfG͢ %bΦ9 M"P*kHidl "Oх姤 K~`bWu/"Xh `΁}H7jr\6Z`4s'0^kO,ݖ#cCblɡ|^D:c#e@BaOa(VgIsV;V .V 0f%Zj1rng>-\N{C-jMS$C0oD^C Sl$uCH%;fw+HSiWkElƾp7%L'픸#$gCG-;V0zZZ80_sy^b墜n0 %3)=jjl5}1@b,?)3 K"q ~27HK<=.29P102yX ]P[/Nja m1ş,q'>N ;htriC-JnWtoEgw TEXDq_ ~? yF ܙm蹼MjH,aGv&T-R8y+FxKۅ|Lѥzȣ|{^bVjSѵ eȴ|q&uwɖDlEQIp2Z$s=u{e 'R0[KMAwSO&G}W{E쎳᛼97ZM̿סoqj8ޚ`cf("^+#ql(/dXvT\ԧX>1B 6 ñEš5Yї1^Ͼ<ues7"߿94[Fbjٓl#-هt8/MW&^%"bMV @…#"6x`m1c ?'n^g[:feY6]h<ەBcY%LbN3µ yE"SVo9>i}6'Iju_9RGtW$z"U߳Z,((HLU뺞$ѺVs],q;L<־O8Z8冪K W*ݠ/3VY"o:eiZɠd i22JN̐@Zȡ|Сd^D Tqp:G87|]r%p#d-4r&[r?p[5Ɗ,q 'u)UB_XO}4 ݻnZsqhW5$VL2 3y!VEfK.,HeX*Ը5zoCYb{@1aϙ;b,,1v@-!d9 g2)i\`ځe N-5Bn|_ry˦CF±:8 Gh`X_,M57 $KM,ǎd)`gI:-1~S>p+BԔ 1n:ĎdJ ,-P .eJ .ϧIȣc 2ELi m꾢8? 1mTNYNp1 rA?I?o,-I1S'i XȲ$^mrWW%R; Ěyn n>O\<npib0hۼ'kyr.zҳƒFo^(\N1i]wۙiS;7]L'[!Pγx Yګ-(41s-I{r8hm2iKCdYub}ܾE'K\EF.SNs6T7uYdnCŽ^E'Kݴde[AH3j&on9=U* IIb%6b@1MTM~/R.,L $hרhⰘДkV dOJ .{V5g/`  xҍ ^ 䔺EN ʥiN՟f ٥F)-R4>75yEpl3x,"h{ ^ w dJM/#оÒPm" x݅_d<~~9]\bt9Y<#,I6"%av=K_thusʳKbDz-y7C5HC)V7ۘT{iB(N/9,:y RTd.,TW1 q,_r-AjQxG9PhÔJ&1[z ־/wjzDE1E+bA7noeb|I|P)6ӻ1pG"> 4`20b{zNTO?$8c2EhΈU7$(' bl>ovƅTXloδ86HS*4xoGvU^jM ܘkD>͘;E@١^d&3(/Ag~J^ːFuϔ L&8&-{5EesimNu͍5;YBeGR[WשּB0ѳubQ(b~.bb60j=xdJ/rDw|Xaq_(:r@`Nu]rOb}֊0m{'Xh"\~aZr!{ZbĽLyyyShpnC9\ˁ-0&a^kQBڱTqWŻ 9{y3Iҝ<]fY))ܛZٔj?lXp$r.tDB\5ҶFPqQɁwoط4֢Rʈ3^q7d1Ds) TCϞ3T')*^|2}GpXՂrV|`,f!.%ieE]*ssWa w,{v;.'pSS iyoe=tE>Y|WIQh_hiMg)dLhER7|˱?Qu%eE:QX|:F}OEkvL(J`+p#V zqwFk x@1lIb6i5X:Ƣ,mW1aS߮yߖ%g40 {^\z=x.ה8)3%f4oC\^j ;Όae:$Q"`%bcdK.1ͩD[ØaRyʅHb: sY3B;:U6 )sYz`QQXS_"| AeGw7q5~+nkKf]^?յKQɠ++ulͿTv RRMGcqSzd@ ESiChn~p b/Rm!5I'i`#$-lMV1W`}s̥ (arFRQG"=@l&x ă!^8k1p[2TFw|7 [HF)*eЦ?=Py,4:8PN,=Qơw%_ԎKvJ#Mn/j7K'h8)ݰoUrccS\(ru%2MF%Gh7q걪DԹk R=KIf1(+@԰Sk ^HnK+ץ 3״\H~@A- H6ep*gvs6~w/E*Z-q6cy"nc}eN0,6>a`xŝoW;ES3fSLY 9&pwM;Y]X>%m# ӃEհ3vm,/ұ H\u",'JXt,JE5c 1u`-r %hu@wtZa'\q}D`Ɯ1\ti ߟ 9UviәKjƟ+ KÜ,,^E&=>oV8_}!gz#ߑDz,Ɖ|yYRKG|]Im )LPa6/PLPĆV yڛKʄtZKp|L*h 9f82lE?΁BCD} dwYg;][u>{aɣ/t$Q QNβ{qV25a!F<* A]Q hP6D ,(q]#d~v/ERyۯV*oi<~{wtu;Yotg;V:U*haGGi#<,ܟn*vCﺡrй *,su,bvύl_tƠM(w_;_"P*-Ӝ,;gt6t z)#yd I $}@3u:t,.):4E{G{t)Usl86uY70a8awӽC +-fx 8rH˟ MgYo<&>A4E! ;7Tf?8rhtnr2uAnY1Xr Oa)KX* u샌(x:]q^y 'my7:~)8n6} XfV]r`A{iaEe&/y{ ig:f=ҧ&$CV,8.7q~SPKe4O @Z*Or4 /Lů(fg =IMx6 Zh4_8̭ܺ: ?{H.π*C0y{l0M8"g>EOO/>^pvbao?9>jQ)AG-&t-3/мQ@r:ftҝ">L "øȳ007r./t xg!hӸ烲TT(*'x%]@ˁ.05@t`2^Rsz.(HLe%TFde駉JNQ@e N <hQw<".]Y'Z-QЉr ɞ$f[(()ԧ∊.(!1nq 9幂*?#̺A@0&"dȉ-"kjAt|r9 eM/ Jˉ" 4̥C5ٟKmF#NgG}?d}~dž!N&#|S?Mq4jn ty e:D%Ym9>-B slU3g1򻄍icug(0?c錚Kyx?Hp$t/ 3T P͐ ix I kw/%gDa^D܍FSYotr,-KG}Kw4su=Xg%X@,ϴO2] IrAD^.4 ,+gJ΅Č.T3px#HABeU)=g8,׷<͌td@/Qz0v̌Tn,H܋-M N,դKRupb0LdUC`1rQYçO\ۡ(7XF..ϤK&Omק2{{hihz ^1hhՄ{6araʌ rNJv <=Aws@Lv]m,~Ga7 H |aavEH)CJ[EQlM> DDQ4Fh:4`DĶ:Ruʦ|X4y7Ek|dy6..?ҩ,c#A|6sI I^`οEJy2T" KQP "AF]ML]B=(@Zdi-b ~2U:RS8!21v#yË ?8'`tCLr8|RԷV uA{0eBi׏*Fp 4]̱\ŲR!J]Te)Ta4ƣ!E @kp,oA88.~3/#XOHi2@t\`T.0V]g~Mr7<;>wUjLYa*Y|(w9z0I҈ޏOz9UHzk4XYR2wy# ) "u,xs}L╠FN-̾;/P;^@I L%ohXX $jߵS0fM8+G"OWK>h&slgc>}/Y^S?#Iln "X$:sgދ5x-gX_(2Rz6$=2`׸(<͓f 6Iu:(<@0Hd:uу" 9* 9).b0 wƲo=yg-Z7vf\MyT3[en*\R D"̀&$i\uxVӖ?tdɆ7b'ZǠ=/r7;!ɻ@K1˽ʼ.Wm6|#j,W`ݽ҆uXn 7,B|(3q#0(V%6J>a}!ɢGEȽa>eEWEOd ekQDpgH"yDtxFCG&AɊ&p=#VE ]E=^M>ﲰô _žZS;l zS-VCQˠ<')/uH &$u1DC =sg kYV r/Unӛ I7̞2q\kQ;*GObRCAUX&aƟj)]KeͤF P1^;b 7aݗe 5F,{0&џhrz?}R.iҽe.IjBiFe?+"Q7uYÿ#r;*G#(I: nv-STW()(D_DmJ0i^j1a183u7!Y(HLU~0,G"wp:`l{8;ZξXxqHWab[<>sX0otw`|.-/wHTaH6^Ķ]Fa4uwUӴi6~]*in6!z :“;(B;6C78JL PǙ!TE^餜*ڮeq\lԡSq}yp@&JSj/!e*G2EqxF#J,P̮G0,TJJ't?X=XTBz H17 ̒C@ô80=YP< 'iW8Ϫcsd"g2skcIo 6uWVJiXN#m>9W]NSņNq 1V@Q P3~F'lʍfS3eTYwvv(C0Oaҡ֒ڒ6P|2YqG.:OBT]bǍXϑ`1+)v1i XTCug7GYgHm3812.+Qz Jے s3+J `j;ะ4۞feq`QWMTf=)س)N!+1a1hĢ~(RZVZ8~.m(8q1=9-]T]) A&G0\0H37e4)*F `"rO̳Fek5$Z5ROk B$A8BE֪ke(eLHKKVbQ8O,K))Tk\vht?+Z; 1i# $,z/݅$ f}"E(Nh2 xlfa$oVrڇC\ n:%;fMk Ofb>F%}F%[X`mF7LF Zq:kut(@l:pY&;Aޙ8^Oժd,a9^f٪H 4ߌ&Ҏ |LuVpeu b[%\ѽaHihGO+Muqy}¡VǶal IiCd/uy)}iPScj!lKԲ|Ϻ6TV-tg.{ ԛSP YVa%]~ :y@GWqr`]"~|WXx=A'Sܣ2qzju `RLu\]ue>Ghaio'djPƼi08ʌ ʙ.RaPh}<# EJ)Y굚@R.wP 41"X:(mi(n):}ho)1l<"6T2$ t!USlxm)p:i~n74Vjq'J&ڠM Kd37ɱ8,p| gLQ)1Mxgx$OE ʠ BZg&r[jxBd6RGhKn)deSr^(P]H׿A{h" KU2Q x͘?]neL2Ld<,0m ,X3rBbNݩ#K1,r`Y?%"KX2 ˵nPHg@`^,Vd*.Rn" IZx 'ICؘG% 5/'hG&jX ^f@RqWq^/>e| -Qo*GEKv8!rk(ۆV$tnt ͘"(< 0YsVc.*XҧdZQDa{ &&lM9F#!!jErS|[N40OciyD_/BMHZwBt\Hδx{2W!JoV_E\1 V`(&7Uo "ict!ғEFUaM6#+%G>2Aw ]%Ú8vCCAQR^t\g,]**"8܍Ķ`,Y_v諪..G$4U@](PL}f#ᶱ160(KO˥b3,W/;,ej4} *ig%s%LJɣ_qxU!x\/[L+GF0:=o*6G;X,2GC*h&Y\{'ezn@VEL~Pf`p/_ 4U' !^Y[ ѹ'mtq[98'X25㡋wr7X.fe:1ns5t%9Z3̆Յc@2a}Ӧ:2Ź'ysžVD7<>ٺê[jhѐiE d李Tdz.a8a"Ef6蟋K-B_[ S@lt =r#%vJHݫ ZZĝSd]_ea95'GdW_bb혱Ozb|ݔwO%X>FKӸ-}58MILF'|;윞 Ȱ( K]8$!u|mnee_sTԎ>t`pH{(LyƖN *йב(tQ9Qo^qp!>6T?!n[ߺV2}RݬZ4oA%g4Ok'o8\5Qe0;zrxmC$[nu4xq)3e4,+~wM:ihvOe'`A܄d*4Ӆ%j7FR1 HN#>|s-]6EK:JQf^CF#DM !}\E0%NܲbɲGĎvkv5FTMxP|T^60jѭ6]q`!8b9C$mxi z1=W? .mD5.>,̻΅M:)ǛYnr {qw.`W eВA]@AAY.LrHo{ u9IZI0/1Q>*92X Q+nbsqbzsb=+j-u郖F}*r؂cY$7OD?5Uu!)o$r4ο|ZЯA\R>T9kЫg lW!)i&i5foe[$5TUR0iz.Cd|N39(_Y4 XG !/Fc(,i19p!@@2eE5a. s ,0,@Qfm$ B\Y EN\ omYFtFa+J?EdYT1a l´SY(K]~ܑ^1yذuFnu/V['VrKrrD2q4Sp᪽=庪$KF؝ Pm{3ަ 1SS4:!-&㘰FjYE 0571p8Q? Q>P*4%40N-J ڬ%E "C$:YUD=8-7]~#C,ѨfXWQl _][%tV舑:Qs#s:`@j.%kdye>Ozu޲y[`ŭLK(ߩOϮҊ8׉t|8iT#LT',s2Yq|ƑՕoZ'onMgH޽/q'ӲK$HED$I֋= ag6lgLb)#y|gU%%c$X2#1xKI4-k{s,rx?+Ņ"{.{ <(b?wxVյ^#2?ҙbC/"5mN"[TYZ(P 7s/>e3$C65#2֩|d_9'̧^$<׽MŵLPRd6{mվq)ӊqݢ8tvIs ղ|R8Rq˳Ǿ{$bR䨞b""cqW6HK+:Į{:P=q\+gln}'PC6"tȆ"m)49 3rp`A9E0_xCT@reU'ZQ׿~-KA 2PҢD0w7t)j' ChYf6mݻ!,/řUVUV}i.F WJ"gz44%23?[V@W5m4Y-VkHθ H*`j. >Paqpph,^ 9m$_ln <A'gd:l9THDD;|+o^JOFRv͉ 4Xś:) F"^07sy7Tu WnD`m1QEE"fv|52AlnK'gʯ?+ 7$!n(]vaV"JC"^h=.sey5Q St ik%ᓞ}ɝynZ^NխbjPFkb-F5r\oڹͫچܘn|n>˔jbP5,l[(P̧GM":h<j[XQ́rxxTGx,;O8цl0N :qx"YPM`pwwbJM.ޞ#Ŝ8 m ]\Z524[+J!e&warߠ4yj =P  '0|sӅ&3v 2N{T}Vkp..D{M5U>`m%ulNNhϝ9s(h/ Kʚ`n$7;6_*d`y0B$B@k7;vJ h1v>NK%m̻Xϧ *TvJ Kˤ Ty{U;'-TyÑOz(CDs.Œ3e?xH6+1H4$*B,PXN7 n+>=ӎ܆? O+y2bGnx}-B&srmxKX'zCTVSIsy`ʪg2КDq+!Y+אC~f"&Q1SKgt̎XDDɆU8RFQ6Suo˔N?!waΞF81$]{Ac:-xX+M^ "$*Q<r$i(|ADC%/֔t1]> Ҳ;*@ZѲ8>*/^p(%=*F/Dk= ❠U7T yIDivۋՆrƗY\dA659cploHxBA7n|]<1"c:~x~?(zI-OOW 2㝭+@ѾeęcVRT7g\`J?ekS\yHYB9j4eB0ZGM zH'xWta=EkECow#գmQ |{h;@Y89"h-TYZ‡U-*bBLwKk67+q8O_R[Q GGxOq|myX(}w2twÍx^:Qi-5:BHf&Kg^ xJò:%=,370>9UésÛS"ʪxX>CojAoyi~L[XeRPv a29`"9taY+) ŷ߄_}[ܣ`1jr5M08bz0#FoḤJ&ʳnͦL* ngiY%{ H㆙cmth~w%;JҨor]-}yL"]2,s.,'5S{Yr,r`9t^RkI. v*ϥ sfs5:x4a>Ӊak\PD2Y9|%wX' ^~ q :a\Йs>e_FH{ X-IyTJgA4EXTYqݎQ%5k/ev>Yԡ5Y4?ȝ?%H @sr:%aw7MySƠ9ݯs*=Xjdt@9wdz$Ⱉ0 zsl3oɢohNlu8E]1%)^wiPe}c'^]5Gvõ k3BD1nҔՎh"{-*6hIވ[99lyJ_2`DA5ܵՑ.HF=Ȼw%F|Rm_ J$0ZۭdX= [/1SV> K9yC$:Y}8bG[B GZ ^)CI!oA#g߄X_CqZi^eZq+&Ko%UjZHa"Yj/2e )>H Ӵ1i(ISi_kti+:5 ]Vƭ)YHK:[\\pbN+7mqMAeJ9oP5dfXHq7-X;(YtaO{q2:$ZK$e,T؋B8m`F쉁C¢4Xu#5)8 jӶ412GC$9G\|0Yk֚A-8aA(`y,@~y $c|GV,8P06KPN ՊA.=9aXx.Nf)]p"no-ٸ܊ZoqP bo6u t& LA6!=f+'5{GfR+V\l&Y}r2F(/2+'C?8 A~zplav+Qn5Qzmu_4$?r].=]@S@dCE䱲ݲ&;LB @y߲L=˶_~p 6H| 2.&^?==2K? Ľ `-&463zMp,%q~ݞҙ`lEz /J~(Ueˆ& KB=z􄢜'Piޢb6TT &t01ڶ|䃭t%"sǤ娳<al0[qŸvxn$O67ANj٬mmA䶕盆nr?IBC@MoDǧ&M8_Y) \meR"H Xqe)WN|<]$8pǙqnRvb;2y!do5B,rg]1bۧ'Y )ނw Y1+pݶW'ߞ/gd:>kOo+J4%>KYgY4&Z2:(Wz5h&ONH.8z ^ "$|Nrijg1 I쓹3]N9uVֈf%m^[=ǯl\2Wa #EΞw܆t;,0VS کZ]]r @B', Y4+(#X^Q>Vu܍65|9GawUFAqrc.'pC8LAŝ}螋c7;R?+<\"`t0Ҙ%qX drJe<,/źcݾȔNY d+8#ǒcdt\u]OuRpų@(ԻV@L,'aQN)!1}|:H2$*Pԥm_u9"^2H- ^+xmJe(\B~~Kb8/c 3GDBA]+ׅc8*0MWoҹAT|0e~0a~ř\tadQ²4"t݀'Wb 3nape+替{W{nij}SZOU?{jܟ>Z[D԰]{4!pS6HTA(@k C$pC).%'zMrAnU hLp"fi1?I1wJ0t@EoX(0\*jDWFO^?]:C1wxUeqE%a񪂻Q+WR=K g?䫏+T]Y @[y472|,kEXh[Ż?q4 V,< \C CQhQKyduͭ^LeLP5E ]ɴ֨i4p+$<&ȻQH-n<Џ% gaP מ}1W`> o}h Bh=,H㫶jٺ\hX4}ȡAq# FOküc.nB#Pv%ʿI90#{o8bY.(cQWQVk0=~2'PlaݝF BCgenometools-1.5.1/testdata/example_1.fa000066400000000000000000000062311211610345200200420ustar00rootroot00000000000000>seq1 CACTAGTGGCTCATTGTAAATGTGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGCT GTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTGGCTGAGGGGTGCAGAGCCGAGTCAC GGGGTTGCCAGCACAGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTGGCAAGCTAGAG TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTAATGAAAACTATATTTATGCTATTC AGTTCTAAATATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAA CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAGTTACC AAATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGATGCCCT CTTCTTCCAAAGATGAAACGCGTAACTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA ATGGACCTGTGATATCTGGATTCTGGGAAATTCTTCATCCTGGACCCTGAGAGATTCTGC AGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAGCCATCACAATGAAC AACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCAACCTCATACACACAC ATGGTTTAGGGGTATAATACCTCTACATGGCTGATTATGAAAACAATGTTCCCCAGATAC CATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTCT TTTGGCATTTGCCTTCAGACCCTACACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTT TCCCATCATGAAGCACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT GCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAAT ACATGAGATTATTAGGAAATGCTTTACTGTCATAACTATGAAGAGACTATTGCCAGATGA ACCACACATTAATACTATGTTTCTTATCTGCACATTACTACCCTGCAATTAATATAATTG TGTCCATGTACACACGCTGTCCTATGTACTTATCATGACTCTATCCCAAATTCCCAATTA CGTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAG TCTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGC TTGGGCTGTAATGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCATCTCTTGTAATCTC TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTCTG TTTCTTTGTTTGATTTGGTGGAAGACATAATCCCACGCTTCCTATGGAAAGGTTGTTGGG AGATTTTTAATGATTCCTCAATGTTAAAATGTCTATTTTTGTCTTGACACCCAACTAATA TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTC TCCCTCGTCTTCTTA >seq2 TTCAAATGAACTTCTGTAATTGAAAAATTCATTTAAGAAATTACAAAATATAGTTGAAAG CTCTAACAATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCT TATGAATTAACCCAGTCAGACAAAAATAAAGAAAAAAATTTTAAAAATGAACAGAGCTTT CAAGAAGTATGAGATTATGTAAAGTAACTGAACCTATGAGTCACAGGTATTCCTGAGGAA AAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT AGTCTTGCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC ATTGCAAGACAGACTTCATCAAGATATGTAGTCATCAGACTATCTAAAGTCAACATGAAG GAAAAAAATTCTAAAATCAGCAAGAGAAAAGCATACAGTCATCTATAAAGGAAATCCCAT CAGAATAACAATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAAGAGATTGGATCTAATT TTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGTTATGCCCTGCTAAACTA AGCATCATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGATA ATTCATCATCACTAAACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT TAAAGTTCAATACTCACCATCATAAATACACACAAAAGTACAAAACTCACAGGTTTTATA AAACAATTGAGACTACAGAGCAACTAGGTAAAAAATTAACATTACAACAGGAACAAAACC TCATATATCAATATTAACTTTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAGATATA GATTGGCAGAACAGATTTAAAAACATGAACTAACTATATGCTGTTTACAAGAAACTCATT AATAAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAAACCA AATGAGAGAAGGAGTAGCTATACTTATATCAGATAAAGCACACTTTAAATCAACAACAGT AAAATAAAACAAAGGAGGTCATCATACAATGATAAAAAGATCAATTCAGCAAGAAGATAT AACCATCCTACTAAATACATATGCACCTAACACAAGACTACCCAGATTCATAAAACAAAT ACTACTAGACCTAAGAGGGATGAGAAATTACCTAATTGGTACAATGTACAATATTCTGAT GATGGTTACACTAAAAGCCCATACTTTACTGCTACTCAATATATCCATGTAACAAATCTG CGCTTGTACTTCTAAATCTATAAAAAAATTAAAATTTAACAAAAGTAAATAAAACACATA GCTAAAACTAAAAAAGCAAAAACAAAAACTATGCTAAGTATTGGTAAAGATGTGGGGAAA AAAGTAAACTCTCAAATATTGCTAGTGGGAGTATAAATTGTTTTCCACTTTGGAAAACAA TTTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTTTGCATGC CAGAAAAAAATATTTACAGTAACT genometools-1.5.1/testdata/example_1.fa.fai000066400000000000000000000000471211610345200205770ustar00rootroot00000000000000seq1 1575 6 60 61 seq2 1584 1614 60 61 genometools-1.5.1/testdata/example_1.sam.extract000066400000000000000000012663621211610345200217230ustar00rootroot00000000000000B7_591:4:96:693:509 73 seq1 36M cactagtggctcattgtaaatgtgtggtttaactcg <<<<<<<<<<<<<<<;<<<<<<<<<5<<<<<;:<;7 EAS54_65:7:152:368:113 73 seq1 35M ctagtggctcattgtaaatgtgtggtttaactcgt <<<<<<<<<<0<<<<655<<7<<<:9<<3/:<6): EAS51_64:8:5:734:57 137 seq1 35M agtggctcattgtaaatgtgtggtttaactcgtcc <<<<<<<<<<<7;71<<;<;;<7;<<3;);3*8/5 B7_591:1:289:587:906 137 seq1 36M gtggctcattgtaattttttgttttaactcttctct (-&----,----)-)-),'--)---',+-,),''*, EAS56_59:8:38:671:758 137 seq1 35M gctcattgtaaatgtgtggtttaactcgtccatgg <<<<<<<<<<<<<<<;<;7<<<<<<<<7<<;:<5% EAS56_61:6:18:467:281 73 seq1 35M attgtaaatgtgtggtttaactcgtccctggccca <<<<<<<<;<<<8<<<<<;8:;6/686&;(16666 EAS114_28:5:296:340:699 137 seq1 36M attgtaaatgtgtggtttaactcgtccatggcccag <<<<<;<<<;<;<<<<<<<<<<<8<8<3<8;<;<0; B7_597:6:194:894:408 73 seq1 35M tgtaaatgtgtggtttaactcgtccattgcccagc <<<<<<<<<7<<;<<<<;<<<7;;<<<*,;;572< EAS188_4:8:12:628:973 89 seq1 35M aaatgtgtggtttaactcgtccatggcccagcatt ==;=:;:;;:====;=;===:=======;==;=== EAS51_66:7:68:402:50 137 seq1 35M gtgtggtttaactcgtccatggcccagcatttggg <<<<<<<<<<<<<<:<<<9<6;9;;&697;7&<55 EAS114_30:6:298:115:564 137 seq1 35M gtgtggtttaactcgtccatggcccagcattaggg <<<<<<<<<<<<<;<<<;<<<;<<<;<:<<;;5;; B7_591:3:188:662:155 73 seq1 36M gtggtttaactcgtccatggcccagcattagggagc <<<<<<<<<<<<<<<<<<:;<<<4<<+<<14991;4 EAS56_59:2:225:608:291 73 seq1 35M tttaactcgtccatggcccagcattagggatctgt <<<<<<<<<<<<<<8&<<<;6<9;;+2++(%59(< EAS51_66:7:328:397:316 73 seq1 35M ttaactcgtccatggcccagcattagggagctgtg <<<<<<<<<<<<<6=<<<;<<5<<<+<15:'<;;4 EAS51_64:5:257:960:682 73 seq1 35M aactcgtccatggcccagcattagggagctgtgga <<<<<<<<<<<;<<<<<<<<<<<<<<<<<<9;;9< EAS54_61:4:143:69:578 99 seq1 35M gtacatggcccagcattagggagctgtggaccccg ===;=====48=844;=;+=5==*57,2+5&,5+5 EAS114_32:5:78:583:499 163 seq1 35M tccatggcccagcattagggcgctgtggaccctgc <<8;<<<<<<1<<-1<+8<<&;:555;5-*77/51 EAS1_93:7:252:171:323 163 seq1 35M gcccagcattagggagctgtggaccctgcagcctg <<<):<<<<<<<<<:<<<&5<<2<562<<<<-7-- B7_593:4:106:316:452 99 seq1 36M cattagggagctgtggaccctgcagcctggctgttg ;<<;<<<<;<;;;;7;<;<<<;<<;<<;4:<<;+&+ B7_589:8:113:968:19 163 seq1 35M attagggagctgtggaccctgcagcctggctgggg <<<<;<;<<<<<<:;;;.;;<75;);;;<.2+(;5 EAS54_65:3:321:311:983 99 seq1 35M ttagggagctgtggaccctgcagcctggctgtggg <<<;<<<<<<<<+;;<47;<9;94430499<88+6 B7_591:6:155:12:674 163 seq1 36M tagggagctgtggaccctgcagcctggctgtggggg <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<+:9-<< EAS219_FC30151:7:51:1429:1043 163 seq1 35M ctgtggaccctgcagcctggctgtggggggcgccg <<<<<<<<<<<<<:<<<;<<<<:):;<;;-15)+1 B7_591:5:42:540:501 99 seq1 36M tgtggaccctgcagcctggctgtgggggccgcagtg <<<<<<<<<<<<<<<<<<<<<<.;<<<<,804,858 EAS192_3:5:223:142:410 99 seq1 35M tgtggaccctgcagcctggctggggggggcgcagt <<<<<<<<<<<<<<:<5<<2<<(<:<<<:5,((7( EAS1_108:1:65:787:74 163 seq1 35M gtggaccctgcagcctggctggggggggcacgggg <<<<<8-82<2823;-<;822222888,*(2%2-2 EAS56_61:6:227:259:597 99 seq1 35M gtggaccctgcagcctggctgtgggggccgcagtg <<<<<<<<<<;;<<<6;8:68333;<8(8,1,$$+ EAS114_30:1:243:10:911 163 seq1 35M ggaccctgcagcctggctgtgggggccgctgtggg <<;<<<<<<<<<<7<<<<<7<<<<<:4<((<%;<+ EAS221_1:2:90:986:1224 163 seq1 35M cctgcagcctggctgtgggggccgcagcgggtggg <<:<<<<<<<<<<<<0<<<<<)<<63<+<<2'<-< EAS54_67:3:175:730:949 163 seq1 35M gcagcctggctgtgggggccgcagtggctgagggg <<<<<<<<<<8<;<<<<<0(<<;;,<<7<4%7626 EAS54_65:8:76:493:708 99 seq1 35M gcctggctgtgggggcaccagccgctgcggggggt <<<<1<<1<;626<;<''+;-'';+2'+;;)6--+ EAS1_97:7:20:979:96 163 seq1 35M ctgtgggggccgcagtggctgagggggggaggggc <<<<<<;<<<<<7<<,<<,:;,<<<<17)++':.' EAS114_26:3:284:261:124 163 seq1 35M ctgtgggggccgcagtgggtgaggggtggaggggg ============'8====':=+====,=8,8'=++ EAS221_1:2:29:1486:672 99 seq1 35M ctgtgggggccgcagtggctgaggggtgcagagcc <<<<<<<<<<<<<;<;<<<<<;<<<<8;;;<8;-; EAS188_7:2:218:877:489 163 seq1 35M tgtgggggccgcagtggctgggggggggcgggcgg <<<<<<<;<<<07640<2<9(<9<<&9%(<(6%%3 EAS51_64:7:242:862:732 73 seq1 35M ggctgaggggtgcagagccgagtcacggggttgcc <<<<<<<<<<<<<<<;<<<:<;+<3<::3<';:'; EAS51_64:7:242:862:732 133 seq1 * gggtctatgtgaacaaaggcactaaacacagctgt <<<<<<<<<<8<<<<<78<<<378<<<77755++2 EAS56_57:6:190:289:82 69 seq1 * ctcaaggttgttgcaagggggtctatgtgaacaaa <<<7<<<;<<<<<<<<8;;<7;4<;<;;;;;94<; EAS56_57:6:190:289:82 137 seq1 35M aggggtgcagagccgagtcacggggttgccagcac <<<<<<;<<<<<<<<<<;<<;<<<<;8<6;9;;2; EAS51_64:3:190:727:308 99 seq1 35M ggtgcagagccgagtcacggggttgccagcacagg <<<<<<<<<<<<<<<<<<<<<<<<<<<::<<<844 EAS112_34:7:141:80:875 99 seq1 35M agccgagtcacggggttgccagcacaggggcttaa <<<<<<<<<<<<<<<<<<<<<<:<<8;<<8+7;-7 EAS219_FC30151:3:40:1128:1940 163 seq1 35M ccgagtcacggggttgccagcacaggggcttaacc <<<<<<<<<<<<<<<<<<<;<<5;;<<<9;;;;7: EAS51_62:5:290:319:736 69 seq1 * gttctcaaggttgttgcaagggggtctatgtgaac <<<<<<:7:<.<<<<7<<.<.<<.9*<4<:<4%74 EAS51_62:5:290:319:736 137 seq1 35M cgagtcacggggttgccagcacaggggcttaacct ==;=======7====6=;==:;;====66=::27: B7_597:2:132:493:921 69 seq1 * gttctcaaggttgttgcaagggggtctatgtgaac <<<<<<<<<<<<<<<<<<<;<<<<77;0<;;6777 B7_597:2:132:493:921 137 seq1 35M acggggttgccagcacaggggcttaacctctggtg <<<<<<<<<<<<<<<<;<<<<<<<<;<<<<;;88: EAS114_30:7:283:799:560 163 seq1 35M ggggttgccagcacaggggcttaacctctggtgac <<<<+<<<<8<<<+<<<<<;<<:07;8;7402447 EAS192_3:1:225:195:543 99 seq1 35M ggttgccagcacaggggcttaacctctggtgactg <<<<<<<<<<<<<<<<<<<<<<<9<<;::388998 B7_589:6:114:714:317 99 seq1 35M tgccagcacaggggcttaacctctggtgactgcca <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<5;<; EAS114_39:1:70:147:84 163 seq1 35M ccagcacaggggcttaacctctggtgactgccaga <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;(5<< EAS188_7:2:187:227:818 163 seq1 35M cagcacaggggcttaacctctggtgactgccagag <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<3<;<< EAS1_97:4:77:29:126 99 seq1 35M gcacaggggcttaacctctggtgactgccagagct <<<<<<<<<<3<<<<<<<;;;7<;<<449<-:977 EAS114_30:4:327:795:103 99 seq1 35M acaggggcttaacctctggtgactgccagagctgc <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<; EAS114_30:3:139:117:262 69 seq1 * gttctcaaggttgttgcaagggggtctatgtgaac <<<7<<<<<<<<<<<<<<<<<<<;<;<<<<<37;3 EAS114_30:3:139:117:262 137 seq1 35M aggggcttaacctctggtgactgccagagctgctg <<<<;<<<<<<<<<<<<<:<<<<<:<<8<<<<:<: EAS219_FC30151:5:29:817:854 73 seq1 35M aggggcttaacctctggtgactgccagagctgctg <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS219_FC30151:5:29:817:854 133 seq1 * gttctcaaggttgttgcaagggggtttatgtgaac <<<<<<<<<<<<<<<1..;:;;;;1%407)07&7. EAS192_3:6:170:169:57 163 seq1 35M ggcttgacctctggtgactgccagagctgctggcc <<<<<;<<<<<<;<<<<<<<<<<<<:<<<<<;;+% B7_595:4:84:802:737 99 seq1 35M cttaacctctggtgactgccagagctgctggcaag <<<<<<<<<<;9<9<<<;<<;73;<<<<<37;1+. EAS188_4:7:78:583:670 163 seq1 35M taacctctggtgactgccagagctgctggcaagct <<<<<<<<<<;;;<;;<<<:7;5;<5;;<2--8-; EAS51_64:3:90:435:691 99 seq1 35M tctggtgactgccagagctgctggcaagctagagt <<<<<<<<<<;<<<;<<<<:<<<;<81;<<1;784 EAS188_7:3:13:122:187 163 seq1 35M gactgccagagctgctggcaagctagagtcccctt <<<<<<<;<;<<<;<<<<:;6<<<<;;;;:<<%%< EAS221_1:6:69:735:1915 99 seq1 35M actgccagagctgctggcaagctagagtcccattt <<<<<<<<;<<<<<<<<<;<<<<;<8<<<<;1:<< EAS114_45:5:66:959:1311 163 seq1 35M cagagctgctggcaagctagaggcccatctggagc ;;4;;;+;;;-01;;&-;;4;;&;;73)(&**274 EAS56_57:6:325:759:288 99 seq1 35M gctgctggcaagctagagtcccatttggagcccct 8<;<<<<81<<<<<;<<;<<<;9<<<<1>><<<< EAS51_66:4:240:264:231 121 seq1 35M tgtaatgaaaactatatttatgctattcagttcta 9;,;;62<9<)29<<<;96<<<;<<7<<<<<<;<< EAS51_66:4:240:264:231 181 seq1 * caacagatcaagaaggaggggcaatggacgagtta %15+5022))0&<<)0)+7:4+&<0<<:0<<<7<< EAS1_93:7:14:426:613 99 seq1 35M gtaatgaaaactatatttatgctattcagttctaa ======;=;==========;;==3=;==-=<;<;< EAS1_93:2:173:995:93 163 seq1 35M taatgaaaactatatttatgctattcagttctaaa <<<<<<<<<<<<<<<<<<<7:<<<<;:<:<<<<:7 EAS51_64:6:195:348:703 163 seq1 35M taatgaaaactatatttatgctattcagttctaaa <<<<<<<;<<<<<;:<<<<<<<<<<<<:<1:<:7< EAS1_108:2:62:879:264 163 seq1 35M aatgaaaactatatttatgctattcagttctaaat <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<< EAS54_61:4:83:452:970 99 seq1 35M aatgaaaactatatttatgctattcagttctaaat ==========================;======== EAS218_1:2:64:1318:1711 99 seq1 35M tgaaaactatatttatgctattcagttctaaatat <<<<<<<<<<<<<<<<7<<<<<<<:<<<<<2<<<< B7_589:8:113:968:19 83 seq1 35M gaaaactatatttatgctattcagttctaaatata 8;<;8;9<<<<<<<9<:<<<<<<<<<;<<<<<<<< EAS1_93:4:160:896:275 163 seq1 35M aaaactatatttatgctattcagttctaaatatag ============<====<==<====<==<==;=:6 B7_591:6:181:191:418 163 seq1 36M aaactatatttatgctattcagttctaaatatagaa <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<988 EAS114_28:7:242:354:637 99 seq1 36M aactatatttatgctattcagttctaaatatagaaa <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<6<;; B7_589:1:122:77:789 163 seq1 35M actatatttatgctattcagttctaaatatagaaa <<<:<4<<9<:7<<<:<<<7<<<<<<<<<<9<9<< B7_591:5:42:540:501 147 seq1 36M ctatatttatgctattcagttctaaatatagaaatt ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< B7_591:6:155:12:674 83 seq1 36M ctatatttatgctattcagttctaaatatagaaatt ;<<<<<<<<<<;<<<<;<<<<8<<<<<<<<<<<<<< B7_593:4:106:316:452 147 seq1 36M ctatatttatgctattcagttctaaatatagaaatt :<<<<<;<<<<:<<:<<<<<<7<<<<<<<<<<<<<< EAS139_19:5:89:525:113 163 seq1 40M tatttatgctattcagttataaatatagaaattgaaacag <1<7<6;+0;7;7'<70;-<7<:<:<<5<<:9<5:7:%:7 EAS54_65:3:321:311:983 147 seq1 35M atttatgctattcagttctaaatatagaaattgaa ;;4;;<7<<<<<<77<<<<<<<<<<17<<<<<<<< EAS54_65:8:76:493:708 147 seq1 35M tttatgctattcagttctaaatatagaaattgaaa 5/)63.&1517(544(055(0454&7706566679 EAS54_71:2:125:628:79 163 seq1 35M tttatgctattcagttctaaatatagaaattgaaa ==================<6<====<<:<==7;:: EAS114_32:5:78:583:499 83 seq1 35M tttacgctattcagtactaaatatagaaattgaaa &6&9774&<;67<44&-4<;<9<7<<<<<;<<<<< EAS54_67:3:175:730:949 83 seq1 35M ttatgctattcagttctaaatatagaaattgaaac <<<<;+<<<<7<;<<;<<<<<<<<<<<<<<<<<<< EAS114_45:1:84:275:1572 163 seq1 35M ttatgctattcagttctaaatatagaaattgaaac /6;;;4;;;;;;;;7;;4;.4;;;;;6;;;77077 EAS1_108:4:248:753:731 99 seq1 35M tatgctattcagttctaaatatagaaattgaaaca <<<<<<<<<<<8<<<<<<<<<<<<:<<<<&<:<.: EAS114_45:1:9:1289:215 99 seq1 35M tatgctattcagttctaaatatagaaattgaaaca ;;;;;;9;;;67;;;;;99;9;;;;;;;;977747 B7_595:7:188:802:71 163 seq1 35M atgctattcagttctaaatatagaaattgaaacag <<<<<<<<<;<<<<<9<<<:<<<:<<<<<<:<<<; EAS1_93:7:252:171:323 83 seq1 35M gctattcagttctaaatatagaaattgaaacagct ;8<;<=3=6==:====;;======;========== EAS192_3:5:223:142:410 147 seq1 35M ctattcagttctaaatatagaaattgaaacagctg 8;<<<;<<<<;<<<<<<;<;<<<<<<<<<<<<;<< EAS114_30:1:243:10:911 83 seq1 35M tattcagttctaaatatagaaattgaaacagctgt ;<;;;<4;9:<<<;<<;<<<<<;;<<<<<<<<<<< EAS114_45:6:5:730:1436 163 seq1 35M tattcagttctaaatatagaaattgaaacagctgt ;;;;;;;;;;;;;;;;;;8;;;;;8;;;;;67777 EAS139_19:2:57:1672:1890 121 seq1 40M tattcagttctaaatatagaaattgaaacagctgtgttta :;;;9<8;;*<<<<<<:<<<<<<<<1:<<<<<<<<<<<7< EAS139_19:2:57:1672:1890 181 seq1 * cccccccccccccccccagccactgcggcccccccagcca -+)%)'-'+,,<066,))090+:&486083:5&&:<<5<0 EAS1_105:2:299:360:220 99 seq1 35M attcagttctaaatatagaaattgaaacagctgtg <<<<<<<9<9<<<<<<<<<<<<<<<<<5<;<0<<< EAS221_1:2:24:1037:84 163 seq1 35M ttcagttctaaatatagaaattgaaacagctgtgt <<<<<<<<<<<<<<<<<<<<<<;<<<<<<;:<57< EAS1_105:3:86:823:683 163 seq1 35M cagttctaaatatagaaattgaaacagctgtgttt <<<<<<<<;<<<<<<<<<<<<<<<<<<<<;;9<<< EAS56_53:4:130:568:978 99 seq1 35M taaatatagaaattgaaacagctgtgtttagtgac 7<<;<<;<7<:;<7<<<<<<<<);4;+<7+3+%;< EAS114_45:4:73:1208:495 163 seq1 35M taaatatagaaattgaaacagctgtgtttagtgcc ;;;;;;;;;;;;;;;;;;;;;;;;5;;;;;37377 EAS1_97:7:264:642:506 99 seq1 35M aaatatagaaattgaaacagctgtgtttattgtat <<;<<<<<<;<<<;:;;:;;<<;<<<<;*+;*&.4 EAS114_28:5:104:350:749 163 seq1 36M aaatatagaaattgaaacagctgtgtttagtgcctt <<8<<<<<<<<<<<;<<<<<<<<0;<<<9;<85;;; EAS56_61:6:227:259:597 147 seq1 35M aatatagaaattgaaacagctgtgtttagtgcctt <8<;2;9;<;;-92<;;;<;<<<<<<<<<<<<<<< EAS112_32:7:113:809:364 99 seq1 35M tatagaaattgaaacagctgtgtttagtgcctttg <<<<<<<<<<<<<<<<<<<<<<<<<<7<;<;<<<4 EAS188_7:2:218:877:489 83 seq1 35M tatagaaattgaaacagctgtgtttagtgcctttg 9<<<8<<<;<9<<<<<<<<<<;<<<<<<<<<<<<< EAS1_97:7:20:979:96 83 seq1 35M gaaattgaaacagctgtgtttagtgcctttgttca '9996;(:;-<;1<<<<=<<<<=<<<<<<<<<<<< EAS188_7:2:259:219:114 99 seq1 35M gaaattgaaacagctgtgtttagtgcctttgttca <<<<<<<<<<<<<<<;<<<<<<7<7<<<<<0<<9< EAS114_39:6:13:1034:1144 99 seq1 35M aattgaaacagctgtgtttagtgcctttgttcaca <<<<<<<<<<<<<<<<<<<<<<<<3<<<;<<;<++ EAS221_1:2:29:1486:672 147 seq1 35M aattgaaacagctgtgtttagtgcctttgttcaca <<:<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<++ EAS139_11:7:46:695:738 163 seq1 35M tgaaacagctgagtttagcgcctgtgttcacatag <;<<<<;<<),&4<3<<7&7<0;)).3;79;7<;0 EAS139_11:8:26:1221:222 163 seq1 35M aaacagctgtgtttagtgcctttgttcaaccccct <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS51_64:3:190:727:308 147 seq1 35M acagctgtgtttagtgcctttgttcaacccccttg ;;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS114_26:3:284:261:124 83 seq1 35M acagctgtgtttagtgcctttgttcaacccccttg ===27===.====&===========;;======== EAS112_34:7:141:80:875 147 seq1 35M agctgtgtttagtgcctttgttcaacccccttgca 6/<;84<;<;<<<<<<5<<<<<<<<<<<<<<<<<< EAS139_19:3:24:1135:563 163 seq1 40M gctgtgtttagtgcctttgttcaacccccttgcaacaacc <<<<:<<<<:1:<<<<<<.<<<<<<<<;<;;;43+:30:: EAS221_1:2:90:986:1224 83 seq1 35M ctgtgtttagtgcctttgttcaacccccttgcaac <7*37;;;;;;;9<<;<7<<<<<<<<<<<;;<<<< EAS114_28:7:287:492:169 99 seq1 36M gtgtttagtgcctttgttcaacccccttgcaacaac <<<7<<<<<<<<<<<<<<<<<<<<<<<8;;<;6<<; EAS218_4:1:48:9:409 99 seq1 18M5I12M gtttagtgcctttgttcacatagacccccttgcaa <<<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<< EAS139_19:1:87:1222:878 163 seq1 40M tatagggcctttgttcaaaccccttgcaacaaccttgaga &+6<6&<:<<9<1112<<;)9227>>>>>>>>>>>>>;<>>>>><<>>>;<+<>=>>+==>>==<==<=8=><:;8/;7<<<<<<<<;<:<<<< B7_591:2:240:603:890 83 seq1 36M gctcccaagagggaaagctttcaacgcttctagcca ;+&+//&<<<<<<<<<<9<<<8<<<<9<<<<<<<<< B7_591:7:129:956:115 163 seq1 36M gctccccagagggaaagctttcaacgcttctagcca <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;877- EAS56_53:4:168:528:288 83 seq1 35M gctccccagagggaaagctttcaacgcttctagcc 8<%<31;<<;<;<<<<<<<;<<<<<<<<<<;<<<< EAS56_65:8:275:851:240 147 seq1 35M ccccagagggaaagctttcaacgtttctagccatt 66614/&3616630666&66666&66666868666 EAS188_7:6:205:873:464 147 seq1 35M ccccagagggaaagctttcaacgcttctagccatt <-((+:+;289<--;<;-;<:;;<<<;;<<<<<<< EAS56_65:6:37:610:260 163 seq1 35M ccagagggaaagctttcaacgcttctagccatttc <<<;<;<<7<<<<<<<<<<<<<<;6<963;;;3;1 EAS192_3:7:93:945:176 147 seq1 35M ccagagggaaagctttcaacgcttctagccatttc 6;;;8<<3<<8.<;6)<<<<<9<<<<<<<<<<<<< B7_593:6:61:628:681 83 seq1 36M cagagggaaagctttcaacgcttctagccatttctt 95<<<<<<<<;<<<<;<<<:<<;;<<<<<<<<<<<< EAS56_65:7:288:552:440 83 seq1 35M agagggaacgctttcaactcttctagccatttctt 9<<%'%<<.2<<<<<<<<5:<<<<<<<<<<<<<<< EAS56_53:2:170:265:818 163 seq1 35M gaggggaagctttcaacgcttctagcactttcttt <<<<<(5/959<8.<9<8<<<2<&59&&:22:8+( B7_595:2:251:121:479 83 seq1 35M gggaaagctttcaacgcttctagccatttcttttg <<<<<6'..663;&<<;<<9<<<9<<<<<<<<<<< EAS221_1:8:67:1797:1931 147 seq1 35M gggaaagctttcaacgcttctagccatttcttttg <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS1_103:2:226:302:758 83 seq1 35M ggaaagctttcaacgcttctagccatttcttttgg ;<<<<9;<<<<<<<<<<7<<<<<<<<<<<<<<<<< EAS114_32:2:163:618:570 83 seq1 35M ggaaagctgtcaacgcttctagccatttcttttgg <9774<88&:8<:8<8:8<8<<<<<;88<88<<<< EAS1_97:3:73:292:429 99 seq1 35M gaaagctttcaacgcttctagccatttctttttgc <<<<<<<<<<7<<;<<<<<<<2<<<5<<<<<:%)< EAS1_108:3:82:356:253 99 seq1 35M gaaagctttcaacgcttctagccatttcttttggc ===================<========;===39= EAS114_30:6:62:386:959 147 seq1 35M aaaagctttcaacgcttctagccatttcttttggc %;71131((<<6<92(+<1<<;<-3<8<<;<;;<< EAS51_62:3:263:74:407 83 seq1 35M aagctttcaacgcttctagccatttcttttggcat ;;88<::+;<)<5<<:<<<<<<<<<<<<<<<<<<< B7_597:3:67:620:344 99 seq1 35M agctttcaacgcttctagccatttcttttggcatt <<<<2<:2<<<<<<7<<<<:<<*<<<<<<***3<< B7_610:6:148:776:486 83 seq1 35M agctttcaacgcttctagccatttcttttggcatt ;:<<<;<<;<<<<<;<<<<<<<<<<<<<<<<<<<< EAS54_61:3:150:933:810 83 seq1 35M agctttcaacgcttctagccatttcttttggcatt :89===:=:=;;==;==================== EAS51_64:4:102:467:897 99 seq1 35M gctttcaacgcttctagccatttcttttgtctttt <<<<9<<<<9<2<<<&,/=====>=>=>>>=>>==>=>>>>>> B7_595:3:297:637:86 83 seq1 35M tctcagctaggggaacagggaggtgcactaatgcg <:75<;<;;<<<<<<;;<<<<<<<<<<<<<<<<<< EAS54_65:3:290:558:349 147 seq1 35M tctcagctaggggaacagggaggtgcactaatgcg 2;2;;'5&;<<5<<;5/<<<<<7<<;+;<<+1<8< EAS1_95:3:308:956:873 99 seq1 35M ctcatctaggggaacagggaggtgcactaatgcgc <<<<<<<<<<<<<;<;<;1<<<<<.<9<;<<<<+; EAS51_78:7:147:64:416 147 seq1 35M ctcatctaggggaacagggaggtgcactaatgcgc /;49;:6<<<<<<<<<<<<<<<<<<<<<<<<<<<< B7_593:4:30:812:345 163 seq1 36M tcatctaggggaacagggaggtgcactaatgcgctc <<<<<<<7<;<<7<;77;3<&0-;<5<;6<1'13<: EAS54_73:7:134:243:630 163 seq1 35M tcatctaggggaacagggaggcgcactaatgagct <<<:<<<<::1:818;;&::<>.; EAS54_81:2:31:98:804 147 seq1 35M ctttactgtcataactatgaagagactattgccag ====;========7===================== EAS1_103:2:235:805:373 163 seq1 35M tttactgtcataactatgaagagactatttccaga <<<<<<<<<<<<<<<<<<<<;<;<<<<<<;;<99; EAS114_28:5:11:868:62 99 seq1 36M tttactgtcataactatgaagagactattgccagat <<<<<<<<<<<<<<<<<<<<:<<<;<<<<(7:7039 EAS54_81:2:280:512:316 163 seq1 35M ttactgtcataactatgaagagactattgccagct ==<========6==4==6;;==:===;=2/:+8%6 EAS1_93:5:292:122:666 99 seq1 35M tactgtcataactatgaagagactattgtcagatg <<<<<<6<<<<<<<<8;<<<<<<<<<<3&9+;;(; EAS56_53:1:23:403:981 99 seq1 35M tactgtcataactatgaagagactattgccagatg <8<<<;<<<<<<;<<<<<<8;<<<9<9,3;,6(91 EAS114_45:7:33:1566:588 99 seq1 35M tactgtcataactatgaagagcctattgccagatg <;.;;;;6;;;;6;;29;;;<+9;;;.3;;73797 EAS139_11:7:92:367:1495 83 seq1 35M ctgtcataactatgaagagactattgccagatgaa <8<88<<<<7<<<<<<<<<<<<<<<<<<<<<<<<< EAS220_1:8:38:1576:1923 83 seq1 35M ctgtcataactatgaagagactattgccagatgaa 8;<98<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< B7_595:7:190:481:295 163 seq1 35M tcataactatgaagagactattgccagatgaacca <<<<<<<<<<<<<<<<<<<<<<9<<<<<9<7<2:: EAS112_32:7:168:117:441 99 seq1 35M tcataactatgaagagactattgccagatgaacca <<3<<<<<<<<<<<<<<<<<<<+<<17;<;:<995 EAS54_73:3:239:796:221 163 seq1 35M ataactatgaagagactattgccagctgacccccc <<<7<<7<<7<<7<;<<<<<,;;,+'<+/+99%:' EAS220_1:4:69:88:1154 147 seq1 35M ataactatgaagagactattgccagatgaaccaca <<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS221_3:8:34:956:1309 99 seq1 35M aactatgaagagactattgccagatgaaccacaca <<<<<<7<<<<<<<<<<<6<<<<<<<<<<<:<8<8 EAS1_108:5:229:717:121 99 seq1 35M actatgaagagactattgccagatgaaccacacac =================<)=<4<0=.<<<71;41& EAS219_1:1:67:191:668 99 seq1 35M actatgaagagactattgccagatgaaccacacct <<<<<<<<<<<<<<<<<6<<;<;<;<<<<<<6;%2 EAS51_64:3:309:303:278 163 seq1 35M ctatgaagagactattgccagatgaaccacacatt <<<<<<<<<<<<<<<<+<<+<<7<<<<<5<<<;;; EAS221_1:8:60:1020:1259 99 seq1 35M ctatgaagagactattgccagatgaaccacacatt <;<<<<;<<<<<<<<<;<<<<<<<8<<<<<:<:<< EAS218_4:7:89:1487:520 83 seq1 35M tatgaagagactattgccagatgaaccacacatta 4;;/<<<<<:<;<;<<<<<<<<<<<<<<<<<<<<< B7_610:4:15:805:420 163 seq1 35M atgaagagactattcacatgtgaaccacacattta ;73;;;;67.;1<<+*.;*&<4947<&474&*9*( EAS56_57:3:119:761:239 147 seq1 35M tgaagagactattgccagatgaaccacacattaat ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS112_34:7:142:457:584 99 seq1 35M tgaagagactatttccagatgaaccacacattaat <<<<<<<<<<<<<<< EAS56_63:7:190:95:706 147 seq1 35M ttgtgtccatgtacacacgctgtcctatgtactta 9;97437;<;;<<;<;<<<<<<;<<<<<<<<<<<< B7_589:1:101:825:28 83 seq1 35M tgtgtccatgtacacacgctgtcctatgtacttat 0;0'0;<<<<<<8<;<<<<;;3<<;;<<<8<<<<< EAS51_66:4:188:460:1000 99 seq1 35M gtgtccatgtacacacgctgtcctatgtacttatc <<<<<<<<<<<<<<<<7<<;:4;44<;;:8;;9;; EAS1_95:3:268:523:511 99 seq1 35M tgtccatgtacacacgctgtcctatgtacttatca <<<<<<<<<<<<<<<<<<<<;<<<<6<:9<<3<44 EAS114_28:6:54:263:585 99 seq1 36M tgtccatgtacacacgctgtcctatgtacttatcat <<<<<<<<<<<<<<<<<<<:;<<;<:;::<<;;:;4 EAS51_66:7:174:987:334 83 seq1 35M gtccatgtacacacgctgtcctatgtacttatcat ,;<;;<<<&<<<1<<<<<<<<<<<<<;<<<<<<<< EAS54_71:6:224:932:942 99 seq1 34M gtccatgtacacacgctgtcctatgtacttatca <<<<<<<<<<<<<<<<<<<<<<;<<<<7<<(;3, EAS114_45:1:12:1296:358 99 seq1 35M gtccatgtacacacgctgtcctatgtacttatcat ;;;6;7;7;;;;;7;9;;-*1;9;699/99/7477 EAS114_32:2:306:119:56 147 seq1 35M tccatgtacacacgctgtcctatgtacttatcatg ;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS1_95:4:66:179:118 163 seq1 35M ccatgtacacacgctgtcctatgtacttatcatga <<<<<<<<<<<<<<<<<<<<<<<<<<:<<;<<6<< EAS1_105:2:110:584:649 99 seq1 35M ccatgtacacacgctgtcctatgtacttatcatga <<<<<<<<<<<<<<<<<<<<<<<<;<<<<<::<38 EAS218_1:4:28:315:310 163 seq1 35M catgtacacacgctgtcctatgtacttatcatgac <<<<<<<<<<<<<<<<<<<<<:<+.<<.<+7<*17 B7_595:7:242:4:593 147 seq1 35M atatacacacgctgtcctatgtacttatcatgact 1.%55877+8+88808887+7;7;18:8;;;.&;8 EAS1_93:1:131:946:353 163 seq1 35M tgtacacacgctgtcctatgtacttatcatgactc <<<<<<<<<<<<<;<<<<;;<<<<<<<;<:52;<2 EAS221_1:4:4:1732:88 99 seq1 35M tgtacacacgctgtcctatgtacttatcatgactc <<<<<<<<<<<<<<<<<2<8;8<;<8;<2;2:<:< B7_595:4:58:703:72 83 seq1 35M gtacacacgctgtcctatgtacttatcatgactct 5&<<7;+95;7'6<<<<<.<<<<<;<<9<7<<<<< EAS56_59:5:113:694:725 163 seq1 35M gtacacacgctgtcctatgtacttatcatgactct <<<<<<<<<<<<9<<<<<:<<<<<<<<<<:;;<;; EAS56_65:5:278:848:765 147 seq1 35M gtacacacgctgtcctatgtacttatcatgactct 7;;<;5<55<<;;<;<<<<<<<<<<<<<<<<<<<< EAS56_57:6:234:787:12 163 seq1 35M acacgctggcctatgtacttataatgactctatcc <;<<<9<<&+9;3;<993;<9<+94;9&41;08%9 EAS218_1:4:15:856:340 147 seq1 35M cacgctgtcctatgtacttatcatgactctatccc <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS51_62:2:258:266:101 163 seq1 35M acgctgtcctatgtacttatcatgactctatccca <<<<<<<<<<<<<<<<<<5<;,<-2<<<<;68<<6 EAS56_59:2:177:552:234 147 seq1 35M acgctgtcctatgtacttatcatgactctatccca ::;:=;=99=====;;====;==========<=== EAS114_30:1:134:379:893 147 seq1 35M cgctgtcctatgtacttatcatgactctatcccaa 7137::;<<<<<<<;<<<<<<<<<<;<<<<<<<<< EAS1_105:8:256:404:584 147 seq1 35M actgtcctatgtacttatcatgactctatcccaaa &&326+23<3<<<+:<<<<<< B7_595:3:57:735:151 99 seq1 35M ctatcccaaattcccaattacgtcctatcttcttc <<<<<<<<8<<8<:<<*<:<<<4<<<;,<<<<:<: EAS54_81:8:142:858:903 147 seq1 35M ctatcccaaattcccaattacgtcctatcttcttc <<<<<;<<<<9<<<<<<<<<<<<<<<<<<<<<<<< EAS56_57:7:247:522:670 83 seq1 35M ctatcccaaattcccaattacgtcctatcttcttc ;;;9;:<<<<<;<<<<<<<<<<<<<<<<<<<<<<< EAS139_19:3:75:732:442 99 seq1 40M ctatcccaaattcccaattacgtcctatcttcttcttagg <<<<<;<<<<<9<<<;<<;<<<5<<;8<<<<<<<<;:9%% EAS1_99:7:183:645:699 99 seq1 35M tatcccaaattcccaattacgtcctatcttcttct <<9<9<<<<<<<<<;<<;<<*175;173<;;;<-/ EAS192_3:6:175:437:950 163 seq1 35M ccaaattcccaattacgtcctatcttcttcttagg <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:59 EAS56_63:3:93:1002:845 83 seq1 35M aattcccaattacgtcctatcttcttcttagggaa <<::;;;<<<<<<<<<<<<<<<<;<<<<<<<<<<< EAS51_62:6:50:542:881 163 seq1 35M tcccaattacgtcctatcttcttcttaggtaagaa <<<<<4<09<<9<<2<<<<<<<<<<<2/.&2<%<7 EAS1_99:3:118:851:285 83 seq1 35M cccaattacgtcctatcttcttcttagggaagaac 3+7<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<< EAS219_1:1:67:191:668 147 seq1 35M ccaattacgtcctatcttcttcttagggaagaaca <<<<<7<<7<<<<<<<;<<<<<<<<<<<<<<<<<< B7_595:7:166:203:416 83 seq1 35M aattacgtcctatcttcttcttagggaagaacagc <<<<<<<<::<<<<<<<<<;<<<<<<<<<<<<<<< EAS114_45:2:15:1497:1530 99 seq1 35M aattacgtcctatcttcttcttagggaagaacagc 0<;;;9;;86<;;;<<&<<.<<;)3;7;654-471 EAS56_65:8:206:563:262 83 seq1 35M attacgtcctatcttcttcttagggaagaacagct <<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7 EAS114_26:4:40:352:151 99 seq1 35M attacgtcctatcttcttcttagggaagaacagct <<<<<<<<<<<<<<<;<<9<<<<:<<<<;<99<3< B7_593:7:67:302:762 99 seq1 36M ttacgtcctatcttcttcttagggaagaacagctta <<<<<<<<<<<<<<<<<<<<;;65;<-<;<:8<<<3 EAS1_97:5:84:927:843 147 seq1 35M ttacgtcctatcttcttcttagggaagaacagctt 588;<:<<<<<<<6<<<<;<<<:/<<3<:;<*<<< EAS1_99:5:147:479:41 163 seq1 35M tacgtcctatcttcttcttagggaagaacagctta <<<<<<<<<<<<<<<<<<<<::6<<;<<<;;9;;6 EAS1_105:3:329:177:267 83 seq1 35M tacgtcctatcttcttcttagggaagaacagctta <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< B7_589:7:72:916:763 163 seq1 35M gtcctatcttcttcttagggaagaacagcttaggt ==7>==9>=7=>=>>=>> EAS54_65:4:91:267:655 147 seq1 35M tgttgttggttttctgtttctttgtttgatttggt ;,:;5:<6:<<<<<<<<<<<<<<<<<<<<<<<<<< EAS221_1:2:91:856:504 99 seq1 35M gttgttggttttctgtttctttgtttgatttggtt <<<<<<<<<<<<<<7<<<<<<<7<<<&;<<<&&<& EAS1_108:2:170:326:433 99 seq1 35M ttgttggttttctgtttctttgtttgatttggtgg =====<=9===:=<:==2=======2:===9==/5 EAS1_93:6:132:717:233 99 seq1 35M tgttggttttctgtttctttgtttgatttggtgga <<<<<<<<<<<<;<<<<<<<<<<<7<<<<&-<4<1 EAS139_19:1:14:420:712 99 seq1 40M tgttggttttctgtttctttgtttgatttttttgaagaca <<<<<<<<<<<<;<<<<<<<;<<<-;<<<&,<&*8111:6 EAS114_39:4:43:1047:1626 163 seq1 35M gttggttttctgtttctttgtttgatttggtggaa <<<<<<<<<<<<<<<<<<<:<<<:<<<<:+;-4:( EAS114_45:2:20:413:1334 147 seq1 35M ttggttttctgtttctttgtttgatttggtggaag 88878777;:;:1:;9;;;6;;;6;9;;;;;296; EAS51_62:5:154:669:853 83 seq1 35M tggttttctgtttctttgtttgatttggtggaaga <::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< B7_610:7:117:857:942 99 seq1 35M ggttttctgtttctttgtttgatttggtggaagac <<<<<<<<<<<<<<<<<<<<<<<<<:6<;;7;9<; EAS56_57:6:145:144:796 147 seq1 35M ggttttctgtttctttgtttgatttggtggaagac ;<<<;<<<<<<<<<;<<<;<<<<<<<<<<<<<<<< EAS114_32:6:88:162:587 147 seq1 35M ggttttctgtttctttgtttgatttggtggaagac 386;;388-<8;<;68<<;;<;<6<<<8<<<<<<< EAS221_1:8:73:108:1621 99 seq1 35M gttttctgtttctttgtttgatttggtggaagaca <<<<<<<<71<<<<<<<<<+<<<<70:0<9<<61< EAS112_34:6:127:153:861 147 seq1 35M ttttctgtttctttgtttgatttggtggaagacat :;:6;9<<1;<<95<<<9<<<<<<<<<<<<<<<<< EAS188_7:2:152:765:744 163 seq1 35M ttttctgtttctttgtttgatttggtggaagacat <<<<<<<<<<<<<<<<<<:<<<<<<<<&<7293<< EAS54_73:3:313:827:992 147 seq1 35M tgtttctttgtttgatttggtggaagacataatcc '187:1'<75<.*<<:5<..<<*<<917<<7<<17 EAS51_64:3:7:268:263 121 seq1 35M ttgcgttatttgagttggtggaagacataatccca ',)*&2<$7+<<<'<-<7<<<<<<<7<<7><>;>+>>/;>>=>=>=:>><>=<<==;)<=8; EAS218_4:7:85:923:726 147 seq2 35M gtaaagtaactgaacctatgagtcacaggtattcc <:<<<%3<<1<<86<<-<<<<<<<<<<<<6<<1<< EAS1_103:5:285:241:560 83 seq2 35M taaagtaactgaacctatgagtcacaggtattcct :<<<<;<<,<<<<5<<<<<<<<<<<<<<<<<<<<< EAS114_30:6:41:461:436 163 seq2 35M taaagtaactgaacctatgagtcacaggtattcct <<<<<<<<<<<<<<<<<<<:<<<<<<<<;<;;;:; EAS54_61:6:25:949:33 99 seq2 35M aaagtaactgaacctatgagtcacaggtattcctg =;===/8========*==&;6=&=&:=6&:=::67 EAS221_3:2:60:590:1760 99 seq2 35M aaagtaactgaacctatgagtcacaggtattcctg <:<<<<<2<<<<:<::<<<::<<<<<6<<<<<<<6 EAS114_45:6:86:693:234 163 seq2 35M aagtaactgaacctatgagtcacaggtattcctga ;;;;;;;;;;;;;;;;9;;;;;;;;99;;&70777 EAS56_57:6:4:223:776 163 seq2 35M agtaactgaacctatgagtcacaggtattcctgag <<<<<<<<<<<<<<<<<<<<<<<<<9<<<:;<;2< EAS114_39:3:88:84:1558 99 seq2 35M agtaactgaacctatgagtcacaggtattcctgtg <<;<<<<<<<<<<<<;;<<<<<<<::<<<<<<7&< B7_597:2:168:829:88 163 seq2 35M taactgaacctatgagtcacaggtattcctgagga <<<<<<<<<<<<<<<<<<<<<<<6<<<<<<9;4;2 EAS114_28:1:168:389:889 147 seq2 36M taactgaacctatgagtcacaggtattcctgaggaa ;<<;;56;==================8========8 EAS54_71:5:81:685:141 99 seq2 34M actgaacctatgagtcacaggtattcctgaggaa <<<<<<<<<<<<<<<<<<<<<;;<<;<<<',7,7 EAS139_19:4:26:1312:1400 99 seq2 40M actgaacctatgagtcacaggtattcctgaggaaaaagaa <<<<;<<<:<<:<;<:<<<;:;<<<<<<:<8<1;;:::88 EAS54_71:4:127:725:381 83 seq2 34M tgaacctatgagtcacaggtattcctgaggaaaa +<<.<<;<;<<<3;<;<<<<<<6<8;<<<<<<<1 EAS188_7:2:19:736:559 99 seq2 35M tgaacctatgagtcacaggtattcctgaggaaaaa <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<< EAS114_26:3:117:284:589 83 seq2 35M gaacctatgagtcacaggtattcctgaggaaaaag ==8==;==================;========== B7_610:5:120:596:847 163 seq2 35M aacctatgagtcacaggtattcctgaggaaaaaga <<<<<<<<<<<<<;<<<9<<<<<<<;:<62;58;2 B7_610:5:51:904:391 163 seq2 35M acctatgagtcacaggtattcctgaggaaaaagaa <<<<<<<<<<<<<<<<<;<<<<<;:;<2<6;;;;; EAS139_11:8:96:1314:1448 163 seq2 35M cctatgagtcacaggtattcctgaggaaaaataaa <<<<<<<<<<<<<<<<<<<<<<<<5<4<<<<-<<< EAS139_19:3:73:1158:535 163 seq2 40M cctatgagtcacaggtattcctgaggaaaaagaaaaagtg <<<<<<<<<<<<<<<<<<<<<<8<;;<<<<<9<<9::8:8 B7_591:2:223:583:968 147 seq2 36M tatgaggcacaggtattcctgaggaaaaagaaaaag 1<';<<&%-:<<<<<:66%<<<<<<<<<<<<<<<<< EAS1_97:3:160:173:889 163 seq2 35M tatgagtcacaggtattcctgaggaaaaagaaaaa <<<<<<<<<<<<<<<<<<<<;0<7<<;<<<;7<09 EAS114_39:1:28:350:895 83 seq2 35M tatgagtcacaggtattcctgaggaaaaagaaaaa :<;<<<:;<-<<<<<4;77<<<<<<<<<<<<<<<< EAS56_53:4:45:707:147 163 seq2 35M atgagtcacaggtattcctgaggaaaaagaaaaag <<<<<<<<<<<<&<<<<:<<9<<<9<<<<75;;;< EAS220_1:8:18:1757:95 99 seq2 35M atgagtcgcaggtattcctgaggaaaaagaaaaag <<<<<<<<<<<<<<<<<<<1<:<<<<<<:<<<;:< EAS51_66:6:310:747:415 163 seq2 35M tgagtcacaggtattcctgaggaaaaagaaaaagt <<<<<<<<<<<<<<<<<<:<<<<<;<<<<<;<;<; EAS114_28:2:114:938:216 147 seq2 36M gagtcacaggtattcctgaggaaaaagaaaaagtga <<<<7<6<<<<<<<6<<<<<<<<<<<<<<<<<<<<< EAS1_93:1:179:629:513 163 seq2 35M gtcacaggtattcctgaggaaaaagaaaaagtgag <<<<<<<<<<<<<<<;<;<<<<<<<<<<<<<;<<< EAS114_45:4:88:55:1187 99 seq2 35M gtcacaggtattcctgaggaaaaagaaaaagtgag ;;<;;;<<99<<;;<;;;;;:;49;:;;;;87898 EAS51_62:5:119:38:945 99 seq2 35M tcacaggtattcctgaggaaaaagaaaaagtgaga <<<<<<<<<<<<<<<8<<<<<8<<<8<;<<7<:<< EAS56_65:6:67:800:450 147 seq2 35M tcacaggtattcctgaggaaaaagaaaaagtgaga 9-<9<;<<<<9;5<<<<<<<<<<<<<<<<<<<<<< B7_610:5:102:915:87 147 seq2 35M cacaggtattcctgaggaaaaagaaaaagtgagaa ;<8<;;<<<<7;<<<;<<<<<<<<<<<<<<<<<<< EAS114_26:1:113:367:659 163 seq2 35M cacaggtattcctgaggaaaaagaaaaagcgagaa =9====8==========:=:=====9=:=&====5 EAS218_1:2:26:211:481 147 seq2 35M cacaggtattcctgaggaaaaagaaaaagtgagaa :<:<<<<<<9:5<<<<<<<<<<<<<<:<:<<<<<< EAS219_FC30151:3:90:1906:1528 83 seq2 35M cacaggtattcctgaggaaaaagaaaaagtgagaa :<<<<<<<<<3:<<<<<<<<<<<<<<<<<<<<<<< B7_591:2:13:100:876 163 seq2 36M acagggattcctgaggaaaaagaaaaagtgagaagt <8<<<*<2<7<<<6<<<<<<6<<8<<<<5<<<<4<9 EAS56_63:5:117:570:971 163 seq2 35M acaggtattcctgaggaaaaagaaaaagtgagaag <<<<<<<<<<<<<;;;<<<<6<7;9;<:;<;<;;< EAS221_3:8:50:1203:1094 83 seq2 35M acaggtattcctgaggaaaaagaaaaagtgagaag <7<<<<<5:+63<<<<<<<<<<<<<<<<2<<<<<< EAS54_67:6:107:395:312 83 seq2 35M caggtattcctgaggaaaaagaaaaagtgagaagt ;<;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< EAS54_73:3:29:833:612 83 seq2 35M caggtattcctgaggaaaaagaaaaagtgagaagt <<;<<<;<::<<<<<<<<<<<<<<<<<<<<<<<<< B7_610:7:158:943:467 83 seq2 35M aggtattcctgaggaaaaagaaaaagtgagaagtt <:<<;;<:5<<<<<<<<<<<<<<<<<<;<<<;<<< EAS56_59:2:201:768:529 163 seq2 35M aggtattcctgaggaaaaagaaaaagtgagaagtt ==========================1=======; EAS188_7:6:11:994:584 99 seq2 35M ggtattcctgaggaaaaagaaaaagtgagaagttt <<<<<<<<<<<7<<<<<<<<<<<<<6<<<<<<3<6 EAS56_57:2:206:873:186 83 seq2 35M gtattcctgaggaaaaagaaaaagtgagaagtttg ;<<;--7<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS56_63:4:38:28:122 83 seq2 35M gtattcctgaggaaaaagaaaaagtgagaagtttg ;9;9;-1<<<<<<<<<<<<<<<<<;<<<<<<<<<< EAS1_93:5:66:372:343 83 seq2 35M tattcctgaggaaaaagaaaaagtgagaagtttgg ;<1;89<<<<<;<9<<<<9<<<;8<9<;<<<<<;8 EAS1_97:3:277:144:848 83 seq2 35M tattcctgaggaaaaagaaaaagtgagaagtttgg <<<)63<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS139_19:6:21:1601:1666 83 seq2 40M tattactgaggaaaaagaaaaagtgagaagtttggaaaaa -;;3&1<<<<<<<<<<<<1<<<<<<<<<<<7<<<<<<<<=<<<<<<<<<<<<<< EAS56_57:2:23:268:529 153 seq2 35M tgaaagaggctcaaagaatgccaggaagatacatt 7;<<<<<<57;-<<<<<<:<77<<<<<<<;<;<<< EAS114_26:2:315:219:7 153 seq2 35M gaaagaggctcaaagaatgccaggaagatacattg 7==::<2=8<<<=====>888<=2=>==>,>,>>8 EAS192_3:4:63:5:870 83 seq2 35M gaaagaggctcaaagaatgccaggaagatacattg :<;<;<<<4:;<<<<<<<<<<<<<<<<<<<<<<<< B7_591:5:243:557:560 163 seq2 36M aaagaggctcaaagaatgccaggaagatacattgca <<<<<<<9<<<<<<<<<<<<<<<<<<;<<89<<9<; B7_593:2:270:430:269 163 seq2 36M aaagaggctcaaagaatgccaggaagatacattgca <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;7;: EAS51_66:6:284:442:747 89 seq2 35M aaagaggctcaaagaatgccaggaagatacattgc <;<<<<<:<;<<<<<<<<;<<<<<<<<<<<<<<<< EAS218_4:7:71:31:1973 89 seq2 35M aaagaggctcaaagaatgccaggaagatacattgc <<<<<7<:<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS1_93:2:30:466:652 147 seq2 35M aagaggctaaaagaatgccaggaagatacattgca <<<<<;3;&<<<<<<<============= EAS114_39:3:88:84:1558 147 seq2 35M atcagactatctaaagtcaacatgaaggaaaaaaa ;;<<;<<;<<5<<<<<<;<<:<<<;<<<<<<;<<< EAS56_59:2:201:768:529 83 seq2 35M cagactatctaaagtcaacatgaaggaaaaaaatt 3<:<9<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< B7_591:2:13:100:876 83 seq2 36M agaatatataaagtcaacatgaaggaaaaaaattct ;9<$<<<$<<<<<<<<75<<<<<<<9<9<<<<<<<< EAS139_11:4:26:137:1382 99 seq2 35M agactatctaaagtcaacatgaaggaaaaaaattc <<<<<<7<<<77<<<<<<<<<<<<<<<<<<<< EAS56_59:1:93:490:901 83 seq2 35M agaaaagcatacagtcatctataaaggaaatccca <<<<<<<;<<<;<<<;<<;<<;<<<<<<<<<<<<< EAS112_34:7:96:489:453 99 seq2 35M agaaaagcatacagtcatctataaaggaaatccca <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;: EAS114_26:6:46:13:880 147 seq2 35M agaaaagcatacagtcatctataaaggaaatccca =&====8==========0================= EAS114_28:2:167:905:852 163 seq2 36M agaaaagcatacagtcatctataaagaaaatcccat <<<7<<<<<<<<<<<<<<:<:<<:::&.<:<66:3< EAS219_FC30151:3:13:674:1717 163 seq2 35M agaaaagcatgcagtcatctataaaggaaatccca <<<<<<<<<<%<<<<<<<<<<<<<<<<<<<;:;;; EAS51_62:7:196:511:896 83 seq2 35M gaaaagcatacagtcatctataaaggaaatcccat 8<<<<<;<<<:<<<<<<<<<<<<<<<<<<<<<<<< EAS56_53:1:154:118:488 163 seq2 35M aaaagcatacagtcatctataaaggaaatcccatc <<<<<<<<<<<<<<<<<<<<<<:7<<<<7<:;;:: EAS56_57:2:44:153:969 83 seq2 35M aaaagcatacagtcatctataaaggaaatcccatc <<5<:7<72<51<7<*79<<<<<5<<<<<<<<<2< EAS114_28:4:215:246:640 99 seq2 36M aaaagcatacagtcatctataaaggaaatcccatca <<<<<<<<<<9<;<<<<<<<<<<9;<<<<<<3;<;3 EAS219_1:7:94:1655:1921 147 seq2 35M aaaagcatacagtcatctataaaggaaatcccatc <<<<;:===<==;<==<;================; EAS221_1:6:60:1037:1146 147 seq2 35M aaaagcatacagtcatctataaaggaaatcccatc <<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< EAS56_65:1:23:536:229 99 seq2 35M aaagcatacagtcatctataaaggaaatcccatca <<<<<<<<<<<<<<<<<:<8<:<<;<<<<<<7<<< EAS112_34:6:130:865:838 163 seq2 35M aaagcatacagtcatctataaaggaaatcccatca <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;:<;3 EAS56_59:2:239:1001:406 99 seq2 35M agcatacagtcatctataaaggaaatcccatcaga <<<<<<7<<<<<<<<8<;<<<7<<<<36<<3<:33 EAS1_97:3:147:423:584 147 seq2 35M gcatacagtcatctataaaggaaatcccatcagaa 27<;<3<<<+<<;<<<;;-4<<<<<;<<<<<<<<< EAS1_99:1:187:715:521 83 seq2 35M gcatacagtcatctataaaggaaatcccatcagaa <7<:<9<<<<<<<<<;<<<<<<<<<<<<<<<<<<< EAS54_67:3:172:196:746 99 seq2 35M gcatacagtcatctataaaggaaatcccatcagaa <<<<<<<<9<<<<9<<<<<<<<<;<<<<6<<<<;< EAS54_71:3:267:821:860 83 seq2 34M gcatacagtcatctataaaggaaatcccatcaga $&<<<.<:;6<<;<<<<<<<<<<<<<<<<<<<<< EAS56_61:7:7:682:201 83 seq2 35M catacagtcatctataaaggaaatcccatcagaat 0:8;5<8<1:78<<<<<<<<<<<<:8<<2<<<<:< B7_589:3:82:13:897 163 seq2 35M atacagtcatctataaaggaaatcccagcagaata <<<<;<<<<<<;<;<;5<51;<1<<<<%<<<<,58 EAS56_53:6:180:695:621 99 seq2 35M atacagtcatctataaaggaaatcccatcagaata <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;::<<< EAS56_57:2:158:909:321 83 seq2 35M atacagtcatctataaaggaaatcccatcagaata <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS114_26:2:237:497:165 99 seq2 35M tacagtcatctataaaggaaatcccatcagaataa 8===<8===========37=<===7=;7=8===== EAS1_99:2:152:355:962 83 seq2 35M cagtcatctataaaggaaatcccatcagaataaca &<.9.<;+;<;<<<<<<<<<<::<<:<<<<<<<<< EAS192_3:4:255:549:422 83 seq2 35M aagtcatctataaaggaaatcccatcagaataaca &<;;+<;4;<<<<<<<<<<<;<;<<;<<<<<<<<< EAS220_1:4:100:20:1199 163 seq2 35M cagtcatctataaaggaaatcccatcagaataaca 7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<< EAS54_67:5:71:408:741 163 seq2 35M agtcatctataaaggaaatcccatcagaataacaa <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< EAS51_66:5:285:395:450 147 seq2 35M gtcatctataaaggaaatcccatcagaataacaat 8)3<8+;<)<<<<<<<<97:7<<<<<<<<<<<<<< EAS54_73:3:4:854:140 99 seq2 35M gtcatctataaaggaaatcccatcagaataacaat <<<6<<<:<6<<<:36:<<<<3<<8:.6<38::4< EAS56_59:6:227:657:95 147 seq2 35M gtcatctataaaggaaatcccatcagaataacaat ;3;<);<<<<<<<<<<<<18<<<<<<<<<<<<<<< EAS114_28:7:57:324:546 83 seq2 36M gtcatctataaaggaaatcccatcagaataacaatg ;;5<;,<<<;;<<<<<<<97<<<<<<<<<<9<<<<< EAS139_19:4:26:274:1078 83 seq2 40M gtcatctataaaggaaatcccatcagaataacaatgggct 9:*:64<<;<<<<<<<<<;8;<<:<<<<<<<<<<<<<<<< EAS188_7:6:107:636:642 163 seq2 35M gtcatctataaaggaaatcccatcagaataacaat <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS54_81:7:226:869:36 147 seq2 35M atatataaaggaaatcccatcagaataacaatggg <0/)&<=,==4>4=>>= EAS218_1:8:82:1540:77 163 seq2 35M gaaataaagtcaagtctttcctgacaagcaaatgc <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<:8 EAS54_67:3:172:196:746 147 seq2 35M aaataaagtcaagtctttcctgacaagcaaatgct <<<;><<+<<<<:<<<<2<;<<<;<<<<<<<<<<< EAS54_73:7:97:892:419 163 seq2 35M aataaagtcaagtctttcctgacaagcaaatgcta <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS192_3:4:312:915:751 147 seq2 35M aataaagtcaagtctttcctgacaagcaaaagcta <:-<<<99:::);:7<4;8<<<<<<<;<2<+8<;< EAS1_93:4:325:352:67 163 seq2 35M ataaagtcaagtctttcctgacaagcaaatgctaa ==================<========<=<;-=== EAS1_97:4:83:731:540 99 seq2 35M taaagtcaagtctttcctgacaagcaaatgctaag <<<<<<<<<;<<<<<<<<<<<<<:<7<*;&;<;;9 EAS188_7:5:74:329:459 163 seq2 35M taaagtcaagtctttcctgacaagcaaatgctaag <<<<<<<<<<<<<<<<<<<<<<<;<<;<<;9;599 EAS219_FC30151:3:13:674:1717 83 seq2 35M taaagtcaagtctttcctgacaagcaaatgctaag <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS1_105:1:141:415:738 69 seq2 * ttacctagttgctctgtagtctcaattaattgttt <<<<<<<<<<<<<<<<<<<<<<<;<<<<<;<8<<< EAS1_105:1:141:415:738 137 seq2 35M aaagtcaagtctttcctgacaagcaaatgctaaga <<<<<<<<<<<<<<<<<<<<<<:<<;<<;<<<<6: EAS56_53:1:154:118:488 83 seq2 35M aaagtcaagtctttcctgacaagcaaatgctaaga <<<;58<<95:<<;<;<<<;<<<;;<<<<<<<<<< EAS56_59:5:198:929:684 83 seq2 35M aaagtcaagtctttcctgacaagcaaatgctaaga <<;<<<<<:<<<<<<<<<<<<<<<<<;<<<<<<<< EAS114_28:4:215:246:640 147 seq2 36M aaagtcaagtctttcctgacaagcaaatgctaagat ;<<,<<<96<<:<:<9<6<97<<<<<9<<<<9<<9< EAS1_103:2:234:167:381 83 seq2 35M aagtcaagtctttcctgacaagcaaatgctaagat <<;<;<<<<;<<<<7<<<<<<<<<<<<<<<<<<<< EAS112_34:7:96:489:453 147 seq2 35M aagtcaagtctttcctgacaagcaaatgctaagat ;<;;;<<<<5:<<:<<<<:<<<<<<<<<<<<<<<< EAS1_93:3:79:879:15 99 seq2 35M agtcaagtctttcctgacaagcaaatgctaagata <<<<<<<<<<<<<<<<<<<<<<<<<<<<2<;<<1< EAS56_53:2:59:286:290 147 seq2 35M tcaagtctttcctgacaagcaaatgctaagataat 77<<<<7<<<97<<,7<<<;<<<;<9<<<<<<<<< EAS1_95:5:263:511:936 99 seq2 35M caagtctttcctgacaagcaaatgctaagataatt <<<<<<<<<<<<<<<<<;<<<<<;<<:<:<<<<<< EAS114_30:3:181:582:435 147 seq2 35M caagtctttcctgacaagcaaatgctaagataatt <<<<<<<<;<<<<<;<<4<<<<<<;<<<<<<<<<< EAS188_7:6:107:636:642 83 seq2 35M aagtctttcctgacaagcaaatgctaagataattc <<<<<<<;<<<<<;<<<<<<<<<<<<<<<<<<<<< EAS112_34:4:12:273:89 83 seq2 35M agtctttcctgacaagcaaatgctaagataattca <:737<288<<<7<<<<<<<<<:9<<<<<<<<<<< EAS56_59:2:239:1001:406 147 seq2 35M ctttcctgacaagcaaatgctaagataattcatca 0':.71;;:9==9=;====;=;============= EAS188_4:7:96:899:106 147 seq2 35M ttcctgacaagcaaatgctaagataattcatcatc ;;;;<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<< EAS54_65:6:67:56:806 147 seq2 35M tcctgacaagcaaatgctaagataattcatcatca 844:8;7<88;8<<<<<<<<<<<<<<<<<<<<<<< EAS54_67:5:71:408:741 83 seq2 35M tcctgacaagcaaatgctaagataattcatcatca ;7;<;<0<<<<<<<<:;<<<<<<<<<<<<<<<<<< EAS56_53:6:180:695:621 147 seq2 35M tactgaaaagcaaatgctaagataattcatcatca ;&377<&<<;7<<<<<7<<<<<<<<<<<<<<<<<< EAS114_30:6:49:656:507 147 seq2 35M tcctgacaagcaaatgctaagataattcatcatca %44;;<:<<;<;<<<<<<<<<<<<<<<<<<<<<<< EAS54_73:3:4:854:140 147 seq2 35M cctgacaagcaaatgctaagataattcatcatcac :9':<;<<<;<<<;<<<<<<<<<<<<<<<<<<<<< EAS139_19:1:85:1521:58 99 seq2 40M ctgacaagcaaatgctaagataattcatcatcactaaacc <<<<<<<<9<<<<<<<<<<<<<7<<<<<<<<<<<<;;:7: EAS114_39:2:57:1064:925 137 seq2 35M tgacaagcaaatgctaagataattcatcatcacta <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<< EAS1_103:3:323:196:855 163 seq2 35M acaagcaaatgctaagataattcatcatcactaaa <<<<<<<7<<<<<<:<<<<<<<<<<<<<<<<<;7: EAS54_67:5:117:33:262 163 seq2 35M acaagcaaatgctaagataattcatcatcactaaa <<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; EAS139_11:1:59:742:549 99 seq2 35M acaagcaaatgctaagataattcatcatcactaaa <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8< EAS114_28:2:55:562:403 163 seq2 36M caagcaaatgctaagataattcatcatcactaaacc <<<<<<<<<<<<<<<<<<<<<;<<;<<<<<<<;<;: EAS54_71:7:97:743:602 163 seq2 35M aagcaaatgctaagataattcatcatcactaaacc <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<: EAS114_28:2:167:905:852 83 seq2 36M caaatgctaagataattcatcatcactaaaccagtc +<<<9;7;<<+<<<<<39<;9<;9<<7<<<<<<<<< EAS112_34:6:130:865:838 83 seq2 35M aatgctaagataattcatcatcactaaaccagtcc ;<:84<<<4<<<<<<<<<<<<<<<<<<<<<<<<<< EAS219_1:1:60:1420:660 163 seq2 35M aatgctaagataattcatcatcactaaaccagtcc <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8<<<< B7_593:3:180:89:582 99 seq2 36M atgctaagataattcatcatcactaaaccagtccta <<<<<<<<<7<<<<<<<<<7<<<:<<<:<<::77:< EAS1_99:1:86:871:319 147 seq2 35M tgctaagataattcatcatcactaaaccagtccta 7;+1;<:<<<<<<<<;<<;<<9<<<<<<<<<<<<< EAS56_57:2:236:841:20 83 seq2 35M gctaagataattcatcatcactaaaccagtcctat 7;<<<;<<<<;;<<<<<<<<<<<<<<<<<<<<;<< EAS51_62:2:133:8:379 83 seq2 35M ataagataattcatcatcactaaaccagtcctata &=========='==7==0=2====28===00==== EAS1_105:8:96:720:940 83 seq2 35M taagataattcatcatcactaaaccagtcctataa *<<<<;<<<9<<;,<;0<;<<<<<<<<<<<<<<<< EAS56_57:5:71:994:576 99 seq2 35M aagataattcatcatcactaaaccagtcctataag <<<<<<<<<<<<<<<<<<<<<<<;<<5<<<<<<<< EAS1_103:4:164:79:134 147 seq2 35M agataattcatcatcactaaaccagtcctataaga <;<;<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<< EAS139_19:6:78:1029:512 83 seq2 40M agataattcatcatcactaaaccagtcctataagaaatgc ;;;;;<;;<<<.<<6;<<;<;8<<<<::<<<<<<<<;<<< EAS1_93:1:214:784:690 147 seq2 35M gataattcatcatcactaaaccagtcctataagaa -<7<<7<:<<2<<<<;<<<<<;<<<<3<<<<<<<< EAS220_1:4:6:1178:1105 99 seq2 35M gataattcatcatcactaaaccagtcctataagaa <<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS1_99:7:171:196:287 83 seq2 35M ataattcatcatcactaaaccagtcctataagaaa <;;;98;<;&<;;<<<<<<<;<<<<<<<<<<<<<< EAS114_28:1:220:801:282 99 seq2 36M aattcatcatcactaaaccagtcctataagaaatgc <<<<<<<<<<<<<<<<<<<<<;<+<;<<<<<::<<: EAS221_1:2:73:955:728 163 seq2 35M aattcatcatcactaaaccagtcctataagaaatg <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<< EAS1_105:1:3:903:957 147 seq2 35M attcatcatcactaaaccagtcctataagaaatgc <%12<&<<<;<:<<<<<<<<<7<<<<<<<<<<<<< EAS56_65:2:224:579:433 83 seq2 35M ttcatcatcactaaaccagtcctataagaaatgct '<08/8<+<>===> EAS1_105:2:146:374:692 99 seq2 35M aaatgctcaaaagaattgtaaaagtcaaaattaaa <<<<<<<<<<<<<<<=>>>==>>===>==> EAS1_108:6:159:493:275 99 seq2 35M acaaaactcacaggttttataaaacaattaattga =====3============================= EAS139_11:1:81:1019:558 163 seq2 35M acaaaactcacaggttttataaaacaattaattga <<<<<<<<<<<6<<<<<<<<<<<<<<<<<<<<<7< EAS51_62:7:162:195:761 163 seq2 18M4I13M tcacaggttttataaaacaattaattgagactaca <<<<<<<<<<<<<<<<<<<<<<<<<<;<:<<<<;; B7_597:3:115:646:430 147 seq2 17M4I14M cacaggttttataaaacaattaattgagactacag 5;5<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS114_30:6:243:209:110 163 seq2 17M4I14M cacaggttttataaaacaattaattgagactacag <<<<<;<;<<<;<<<<<<<<<<<;<:;<<:;;+85 EAS1_108:2:266:994:429 147 seq2 16M4I15M acaggttttataaaacaattaattgagactacaga <<<<<<<<<<<<<<<< EAS139_19:1:85:1521:58 147 seq2 40M aaattaacattacaacaggaacaaaacctcatatatcaat :::86<<:<<8<<<<;<<8<<<<<<<<<<<<<<<;<<<<< EAS188_7:4:164:719:947 99 seq2 35M aaattaacattacaacaggaacaaaacctcatata <<<<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<<< EAS219_1:1:50:257:341 163 seq2 35M aaattaacattacaacaggaacaaaacctcatata <<<<<<<<<<<<<<<<<<<<<<<<<<<<7<6<<<< EAS54_67:5:117:33:262 83 seq2 35M aattaacattacaacaggaacaaaacctcatatat <<;;<<;<:8<7<<;<<<<<<<<<<<<<<<<<<<< EAS218_1:8:90:706:1276 163 seq2 35M aattaacattacaacaggaacaaaacctcatatat <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<:<:< EAS1_108:2:116:966:193 163 seq2 35M attaacattacaacaggaacaaaacctcatatatc <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<< EAS139_11:1:59:742:549 147 seq2 35M ttaacattacaacaggaacaaaacctcatatatca -<<<3<<<<6<<6<<<<<6<<<<6<<<<<<<<<<< EAS139_11:7:74:213:877 99 seq2 35M ttaacattacaacaggaacaaaacctcatatatca <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< B7_610:3:85:219:371 163 seq2 35M taacattacaacaggaacaaaacctcatatatcaa <<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<;<; EAS1_108:2:176:653:957 163 seq2 35M acattacaacaggaacaaaacctcatatatcaata ????????????<==>=>=>=>>>==>>>=>>> EAS139_19:5:57:366:844 83 seq2 40M aaattcccccacttaagagatatagattggcagaacagat ;;;7:8&555<,;<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS114_32:3:236:475:254 163 seq2 35M ttcccccacttaagagatatagattggcagaacag <<<<<<<<<<<<<<<<<<<<<<<<<:::<:;>=>>>>==>=>>>==>=>=:=====;=:=6:::6 EAS218_1:2:10:686:1024 163 seq2 35M acaagaaactcattaataaagacatgagttcaggt <:<<<<:<<<<<<<<<<:<:<<<<<<<<<<<5<<< EAS54_73:5:53:61:31 163 seq2 35M aagaaactcattaataaagacatgagttcagataa <<<7;<7<<<;7<;;<7<7<7<;5<73<<<;>588>9<>7:<0<9; B7_589:2:30:644:942 99 seq2 35M tatatcagataaagcacactttaaatcaacaacag <<<<<<<<<<<<<<<<<<<<<<<9<<<<<<9;<9< B7_591:2:123:924:645 83 seq2 36M tatatcagataaagcacactttaaatcaacaacagt ;<<<<*<<<<<<<<8<<<<<><<<<<><<<<<<<<<<<<<<< EAS51_62:4:308:614:911 99 seq2 35M tgcgcttgtacttctaaatctataacaaaattaaa <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<8< EAS54_65:3:155:541:234 83 seq2 35M tgcgcttgtacttctaaatctataaaaaaattaaa 78;<7<<<<<<<<<<<<<<;<<<<<<<<<<;<<<< EAS56_57:6:175:289:351 147 seq2 35M tgcgcttgtacttctaaatctataaaaaaattaaa 9;;:+<<<<<;<<:<<<<<<<<<<<<<<<<<<<<< B7_593:7:283:186:707 83 seq2 36M cgcttgtacttctaaatctataacaaaattaaaatt 889;<7;<7<<7<<<<<7<<<<<<<<<<<<<<<<<< EAS1_105:3:308:66:538 147 seq2 35M cgcttgtacttctaaatctataacaaaattaaaat 996999;<9;<:<<<<<:<<7<<<<<<<<<<<<<< EAS1_108:5:11:555:330 163 seq2 35M cgcttgtacttctaaatctataaaaaaattaaaat <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<4<;< EAS51_66:7:84:411:336 73 seq2 35M gcttgtacttctaaatctataaaaaaattaaaatt <<<;<<<;<<<<<<<<<<<<:<<;<<<<<<;8<;< EAS139_11:5:52:1278:1478 163 seq2 35M gcttgtacttctaaatctataacaaaattaaaatt <<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<9<<< EAS56_53:3:101:809:776 147 seq2 35M gtacttctaaatctataaaaaaattaaaatttaac <<<-<;7;<<<<:;<<<7<<<<<<<<<<<<<<<<< EAS192_3:3:221:881:916 147 seq2 35M taattctaaatctagaacaaaattaaaatttaaca 44%-4(5<;9/,:<68:1<:8<:<<84;<<<<<;< EAS1_105:1:28:745:352 147 seq2 35M cttctaaatctataacaaaattaaaatttaacaaa 4;;*;<<<;;<<<<<<<<<<<<<<<<<<<<<<<<< EAS114_45:2:23:1754:796 99 seq2 35M cttctaaatctataaaaaaattaaaatttaacaaa ;<<;<;<;<;<;<<;;;;;<<<<;;<<<<<97999 EAS1_97:2:96:419:327 147 seq2 35M tctaaatctataacaaaattaaaatttaacaaaag ;1<<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<< EAS1_97:4:274:287:423 163 seq2 35M ctaaatctataaaaaaattaaaatttaacaaaagt <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<< EAS219_1:7:35:392:2042 83 seq2 35M ataaatctataaaaaaattaaaatttaacaaaagt +<<<<4<>>>>;>>&>->9>9;4>->>>>,4>9>,<1> EAS139_19:2:82:154:1333 99 seq2 40M ttaaaatttaacaaaagtaaataaaacacacagctaaaac <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;;:;: EAS188_7:1:290:286:763 99 seq2 35M ttaaaatttaacaaaagtaaataaaacacatagct <<<<<<<<<<<<<<<<7<<<<<<<<<<<<<<<8<< EAS221_1:4:3:248:1491 73 seq2 35M ttaaaatttaacaaaagtaaataaaacacatagct <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:8:< EAS114_39:3:6:1064:1805 99 seq2 35M taaaatttaacaaaagtaaataaaacacatagcta <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<< B7_595:6:137:811:130 83 seq2 35M aaaatttaacaaaagtaaataaaacacatagctaa <<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< EAS1_108:1:155:809:543 83 seq2 35M aaatttaacaaaagtaaataaaacacatagctaaa <<<+0<<<9<<<<<<<<<<<<<<<<<<<<<<<<<< EAS56_63:3:41:468:459 99 seq2 35M aaatttaacaaaagtaaataaaacacatagctaaa <<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<;;7 EAS1_108:4:31:622:216 73 seq2 35M atttaacaaaagtaaataaaacacatagctaaaac <<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<96<7 EAS54_71:8:105:854:975 163 seq2 35M atttaacaaaagtaaataaaacacatagctaaaac <<<<<<<<<<<<<<<<<<<<<<<<<<<7:<;;;;5 B7_610:7:26:749:174 147 seq2 35M taacaaaagtaaataaaacacatagctaaaactaa (<<)<<<<6<<<<<<<<<<&:<3<<<6<<<)<:<< EAS56_57:6:21:553:57 147 seq2 35M aacaaaagtaaataaaacacatagctaaaactaaa <<+<<<<<<<<<;<<<<8<<<<<<8<<<<<;<<<< EAS1_97:2:128:629:484 83 seq2 35M aaaaaagtaaataaaacacatagctaaaactaaaa :(::<<<<<<<<<< B7_589:6:33:356:636 73 seq2 35M tttttttcttttctctttttttttttttttttttt <<<<<<<8;<<<<<<<<<<<<<7<<<<<<<;;3&3 EAS114_45:6:86:859:1779 137 seq2 35M tttttttcatttctctttttttttttttttttttt ;;;;;;;;;;;;;;;;;;;;;;;;;;;8;;)7699 EAS54_71:8:105:854:975 83 seq2 33M ttttttttttttttttttttttttttttttttg <<<<;<:<<;<&<;<<<<<<<<<<<<<<<<<<< EAS51_62:4:187:907:145 153 seq2 35M tttcttctctctctttttttttttttttattgcat <<<+;;,6<<<<6<<<<<<<<<<<<<<<<<<<<<< EAS54_71:4:284:269:882 73 seq2 34M tttcttttctcttttttttttttttgtttttgca <;<<<<<8<7<8;<<<;<7<<<<<;272;73&&) EAS56_63:4:141:9:811 137 seq2 35M tttcttttctcctttttttttttttttttctacat <<<;<<<<<<<;<;<:<<<;<<<<<<<<..));;. EAS114_30:6:277:397:932 73 seq2 35M tttcttttcacttttttttttttttttttttactt <<<<<<<<<<<<<<<<<<<<<<<<<<<<:8(,0%( EAS139_11:7:50:1229:1313 83 seq2 35M ttttttcttttttttttttttttttttgcatgcca <<<<,<&<7<<<<<<<<<<<<<<<<<<<<<<<<<< EAS54_65:3:320:20:250 147 seq2 35M tttttttttttttttttttttttgcatgccagaaa +'''/<<<<7:;+<;::<<<;;<<<<<<<<<<<<< EAS114_26:7:37:79:581 83 seq2 35M tttttttttttttttttttttttcatgccagaaaa 3,,,===6===<===<;=====-============ genometools-1.5.1/testdata/example_1.sam.gz000066400000000000000000003376051211610345200206670ustar00rootroot00000000000000I\ɎJv]ѩL%,lKёl?g^2qItyJ8Nj5cX?dBF yChuKL1xs=?wmAhuA8>P7n{\e)gƲsc M! pB<9SUIH.D>L B"[t{+`̠ROmeDGQ>ݶu HzQp:p2Jim<9zgֲ {H~Rײ?LY 0_j\LE#0*BR)D{)LnGXm ⟅Zz9r1 W1W-ZSpQhHD^Vg }ç cŻⵆߩ/r4$ks8zfr1JFIb:3^EMtPUKr1l7"Y5!EcL2O~16#,b48PR0SisA ފ^K5Vgw>rR%au Vπ2 Q0rwWz 'f +[rDQltw@dL_Dr .^dgݳ ῀jf'n q'B7;%z x=ĴibL>!xz,/QG@pzQ1vD(-^kOФv.dyj]WR6m^9aj7uHsj2Jls5Rzt[=)LJwJWd2 i%HAشQv%D`DU2#R,-z6oHIj T=-O;}[VS&mk?~ӽ+w_^_uߜP0}Fێ| utB:$4$/M$t㎍; Ln/7Q{rFy&!K-᫛R=гT3˺3w00S _,ڡhInQm`m5x10PvԠ9hq%w{6W7QN2G.!_糟5)je'0=`j!}0/{){7"9?ϕ6rJ#CJ yL;gPРj!5N1Lnⷷv9J 41!bOx$}DWX-Sp"QJA)iϹ)b:~>?s M@n Ixҋܪx. ־J^L%T mC8n|Xd0'+rr%|rbZXx>iJ=ԓa|Sfv sޜ*fs⤮ :,J7 iy$%DGk*U"o] XE6嵠~dM6$mRayܭvOLPƶpܒtգ.ɒQ/)9QzGˠ299nLE/@H`P_4~PuciUL.* HR6ͧh,6<>M OiOsΙ-šC. CFPEvGLi4SeckmkO}N64 cZR=PD]f@QR̞H MCJ/x^.b24cI,0y646̧|\d-FQ& ^~v-׌r2%i:|V<Rm]~.SVg">ccl՟v>=*+= whl$<#΢LyEh ^I`xϮWKSeDHX8]/8PnB!1 ch4c0Gcl17±:Amy!9$:)M/OidG(ctSsP\~zRV9RH'hf}Bܠ~I=AIC$%reu\1zڂBG 隗X;"hXU.;shdQЛ&z54G2WFC&OR]h@JU^$&N;@Vn=_~^ċ+3#/]rG9;7yt 0aKi cݰ}x뗫CK[\(5wk@N{z _ r&nhryuEغH>B4D Vy0ܟ`r_涊c gՍo|+Ot;O{Few&FDP\K@?x\v]<OGLRZ*1re:NDі=0C*U;2^-Z#m3,Ey(m۵l3 "oԦxlXe=27(mI r(xʅ̷tmibE/ed `#ab-srb:bYc|`ܡyEiQ wp6TXeQL8Wټ y'f07JBm暯.@փNՓנoMhI9xpB0~.7sAC :ҶsTgxhýO}\qy܆Cw}''4)aNg^%ri|IJrʍ"`\]ʕe\x(6 %WjAhDԲլSP%00H:a3D\odkP6 ;w wul_/ -̝4`aG[̛/=H$=@T5|*mXz:X'tn]u;Zp6 2޺&Af"&Dۜ`YIX؄b$^YmTX[6i g6io6ke~: UuFƘF}pZ=Q:&NQ-J;p> \\wNF p09u s&Zg>劬|R}urX;S-y[%MuuO )/uIS=HTfR9_-z0 SV 4%(dy>8W6`Ngz_8 |d#hE~"Gڐc]y ]yvޙ<7 Os$/Aw"O[?02"{&=M!uP)RyC9NbIrOuߕgNr|m(P}ZU6ҢS;RNzuyXܧЊ9PƖgw%5wKyHOI0&eD=B 7yѽ@{B?S|Kܫ'=Cm~ur R^NmcxlBSǃA6C}ͬT'pwp͗YT;0)K,כֿpu[͉ӫ$ɧ󋿤so6IzlCl&1cRs2y[rUVrZTZBi?ֺv|tT.*J:DA>ժ~iSG!{ t'Rݾ-ۂ'*woxt RX&QnI뮢]{"ON}Hk6mTVnh4HyA1VMf-nզlenyY.~/}3u:CTvڅD9LA$3zIuPߐ3I?Ps^+qNm-]8 c υ& 'y yHضᬖ$.6AB#ҡLyj2ܖA¤}vEm܅s/[i{{LSiʑr'J'fﴁsej@0?SN iL9Ҳr'#Sf4!q4id^7,>QZ`YH=L) t$IwpJ.&ߞ勅S;>|U~FD &|m/k架/owɹrLthKiGZ5W_xI#qOx )ˍԕsw:N&ǔxAA;TɌTfBiʜ>l%t6R:}V5m^&KɍZhꎎ\\STxE~uدXA1Xv!7y0%O:\;,ba0]>X?Ϳ Z KN^6npW ;xϖ#בa𚏱8`$&/닮+ݟr 0|3%e9UkcpV6=3.Eu[j v_ӯ9jnw5+@݃߹KV:Gx}l^l޳ H$CU$rsdš`ˎn,Ai!l};%\<1ˏ8W.g]وi~yhJ7GImKHD.6`:z91.! )95'GmuN>hEAO="# 8p# JoU /~b_zyb+2 6+9F@1*|d&*9Ƭ[{1f`#jY):azBxv#\ƯZ} x`ˉJw"?ᛍZ h&gooԣ])X\ |EǓyϮe <"-Hf9Lɭ`(\iza@I,Z'Lӕaw}iO@m89,|'pF7.= @( vŜ~0:v.:-yL&8j7^kjE,qYfXfwaSzo痗g%Gn g%`=<ͨx Cd!4P9v.e8Fp( އ]d#D3?`E-ObS%5-P5ZMZoKfA;m@E!C]@3L_ǃ17d~se.NjYgܥAɿɹo.<.CjGxYa̻Kf$'h`vuuTh \F.BsTVy\=Vȿ'۽l5#~u ow*עN~=CclJqxc8;zRI`A'ףГu(%f;C0"Jzz6!R)9dF w4.]RG@>si1wl[Lj4GU y |B\o0e\,~RFeKŧV5EVߗ ughA7=.Zzm0}N^T.f!R;:$FK@RoFki\0⽲L|h= ӻέG1<<gjecք8Z:-$AOG ~W:/ϟ#QY )x~֟l9:1(O_|p~6?8OSpiޅ;$b~}G@N_B4HxG4)L^q&~~P~(%rWVF[zKcPOd۶u3&BOq=>U*DXJEB3瞏 ImRrڷyWN|XSJ=huK|swP-इi̕,^9I#]!UAkc k9);.ӲR7x"<2dݵJ)*&ֶ8~92FJix )}SeM3VHWG*#Ca{C~`8Ҩ;[((9ii.idڵe wLo?MɺR6c(@#]9D~T3(sr];o/}MSzvͭSъmʒ@'_!ZeƉ%d}t 3{?R}ч,|tnD^P<\f \$CڅzysyԬ. ݧ1d|4Am$lTI"Eݒ~4+wD:vFhEߍ3r,4@V[/IW_%Ծkp%#Bl*,z63֣I{hΊ.??Ǽž"{ 'T.cV|D3ۭf+\&qhHxp.i$"/yeNt Mk.3|M{I;.Miԩ 3rqJV|϶XKײaAl-iY,.츭MOEd@p 6 E^2=s&uж} |f-􎡤*JR#OMR|M"oY` 69̾1w.KV.EsRAF%7`Z(8*ݥӹ`yw6F ;#^rV?sUOyo9Gyʇɭ(?(m_=H'*BH b\"q4>ݻ4SDGn5qJ5(O'Kqs!ՌֈEٻQ Y2QT.({يBIOs{9yN0ּ!3V—ΊrjQfD˽WTlSX~_b)></ ѩT2|v[fF}Jm&U{vN/.jTº*̢*5NZ6мe3ZD)aコS;'eE0(|hgmeMf-IlHjDv3V{涝0^6 Vb3er2Exͻ;{VNqs|dM+[r"uE5Oې /tCOt:^1-mB¸ް*p2^5{4)kM5Q` _&Өby=W;:WO"wgI~[ڀY+gbe%gB<OZ>un90kZgM)BL휗*+bf TS^m8fwoLV|֝M|+Y 0{CT%*1ۤ7:<yx Ȗ&VׯxC+u&/̌oR Tӆ4B0I$~󛿬ջNӚZ'R{h+=鞩-ɧLmY?M>ΘO%FU"yrӔד,pPF>Z~ Oi |_TgqMh6ā"t^p 4Ji3نa~ԯEhx09IRTJ.G Ui*xOUy2Ch1u\YbhmN~/Hil;m:LƊD{$Cwz>>V:91ьEr7YIyۏr'ʈcrSp/MY%#jv @O5m1_NXi{GN~ ;lFAUN'](cV[Q,ǔ";߷Hb_.z:2pcυ8TI&iV "KM኿OęF7ѩTV񷾕~|D Tg0T~<p oB~Ъ >48+`gtLQG5)zh#hd|>b{۔s]OpHv-(|CMqJ-k`eyuh(icyuzI?QΗ x~"u^.rŦqg@ihltBRG >r(DEVq;z72q7jXpW@/Az4v}댜L9#[RXш]R|Fd2[<)T1pCs4ZXg$}{% wsȖ wJqࡺH='[.éG[\N$6iESƙM~쎤*SH- 5$kO0\d ʒ_.g5|4CEzSC^ ω:dw%Uc[4dys_XB7 ]_&N( 1D"@~5 oPcxz^SΧW)[R*azKMK#a>Ͷ:`%!ȃ/"rlSDq[|Kp : P%m%ɦm׹/εm􅐹h["N+rK%{G!xsqb|1ݓGyF,v9DRD W^ͣp0%FY4i-UgԍZIF ]^d\a0b |?@W -;DD˯~専-md; 6,8tu:9a-U[H&Iv;sb' 2`wҹJUT0]me$`hBTEE˯ |Dsy@)% 6*rT-5;ag q@cI_C8M*O{&Q C2%0 e4vxv_4 e VC&bT\@tQy%e\<)L"w*t928s9ZJ^B OkY[[t zlgF jC*!$}Rn)F?uY4A-:DϕZM"ίT[6FQr.{D PrK"o1M3j#)ڞM0pIO\8#Uff{1zM^ː&^7*ܦ"Tl9g\˓Fb.0cux\DF>B\ʘYuAoXm ^dc^~HBlh꠲6X#`{?;{˴pN,*i]X' rf`!$0trHaҀ Gpͻ(:]~:NA;?,V%rn0vƯI,c6<7}JK:]6]Ь~% ?mj&bAcv3E 5Nkm-X"Ӓzh}{ߤ2 ?R}#m_[o‘L@ACk(cnPǐ}oz3IO8ΡjtCxcB+֌؄W,hroQHfF[g"07%|GH8zev JCcL9sMW9_WSjQNX ^ ;ʫ=1H@.g?%V/r#k&)jX3GD|& stsC69sCqzb9svyD%˲]njʉvW552q6y}g贯=VQtjIBzhhM@_܎;%'cC [+`svMmSm◷sv|o]F|P cʇwH3z1|t"SW!c6%69uH3v\^ZY3kFy~SqFs:ɒOK%|)n{Sy!QXΏE-@ܬͼC vtHDNKB *,\mK>4ȂNC" E:NDPӏ6V&`uz^%V%+ţJ#\G&YKܷTbqR "FO@ZZZ#ZJ=C"Su+GmD0i;~9#<_'HЎa w"ѥFioL?hcQ(/7Zke+:Ac )/.weg0W9Ve$d2|1ieO.hPl l-Cg/Amm(# L`Z(Y*К14Ĥl:sbKdpy7p91uSP*=ߗY0(I-. oh`yUAQYXNFlwp?MIjZ{nJdIŻ7_RE,mL1) '=!YJnpfp:NG XՋ!sXGجiQJ^&|!J =[(Mp8 $L剎R|sGaFrtV&DzP©nEohF'v^XS^ %=CpdY1*RmYxL2e$%/u|7&yU*t@O29M% YP{ƥjOPVqm!<|]]!} _Թ/UҤ\~3ޮ<'?= e 8=x9Tqr_UN- vq4K\Kϐu،'[~wH: 5y]?zyIŽ * .uh-VuEI=\PBAH2e(D(V oC} S(r+Y i!:<[7H_*Ra&^#`e.96?zYۨV UcfG:{CmA)er}` yFsԅ%yBgf&A|V跛݊Ӧ^/7qoKIIзC$N֣"HDu!<6"Pk߲i،٬k%>o`prNFECM-We1-G v`CіC+YJOfŃzPUbd"Ix2N!d ' @HzlCpWѣGz٦{Q䷽OMYq~/4 }@4ɁPfM8]M':H"D9Hgşݘoox}v&}L ֟0wY]n_4?e۩lU@л͒qruG6m`[]gO ,Os}1TbLGFs@m)'_ʽv󓠍I( '8Z{iI̜ۖ f?-=[C_AuR#Jw~mJR5[{ *A8{"p y<尓"m/3)#긺)> 3T:#1;yd0K% =KƙyMs~wAn]dWY!tKl'ni8]J[@$zﺦ#iPq&`ҳHlATh9>Ӛ wpRi:*^OJ4k/˪ `_nv)MlE<7ύJOTXa,> #ٛh;A-M%5(v栂Kb,һ,S{ڏg|Oӭ@ gT_>LP*bM7Mi(8@b@W~i5K ZoGa;˔dj{X'7LZE3AYb_KygoPt)UC+4EQ5(s̤LULm?*Q!6M΢C_luEg1|B6RQ: 7b4[DKdc{YPttHu[Fc qA-+f+t[9P&]GZ= PhMT "7j,ޭbw [F6 Uԍ]?w%Iwn9N[(s);vx_'z $I>;ê GQg fj٤gbv' RI|9UiY mqiIHsc{fqf5#Pm[Y2^mUmr~1XڏѨrc @ĩ*-ZuU(1GUwbQi\)ЏڊqLVtBLE]t3cއY.j4Ls1t*M96 šKr"ڴX-N4*.F _Ur,cmiF٦,ı2TX ])fY`w>8؏/G2/|.=b'.Ĵ9_tr9Ee Y].zsM{9nGI n1io_?P HpCX4zHXаQaZmЄ+̳fOZ!A7;Ro zJ6 X;CwT\ P V}*{ZUs䫱b=ү3h{ڪ t9ߦ?&šddwϩU}vQش}i *3QS'Ɖnnw4a߬ŊN^U~uk4~fPFlA%7POh$0" ?;$I^[(RQ?%`($[boJL$H# *OPk&Hw]ɬ5i$ցejKa1fUN Z#8\F_Hu,Zюsz3CzNꥉo8'A?=߻oWiQ%v>9U$F@΀oL!3RtE=HH6֭TZ^5%,k`%D(M-&Z@{(|>Z)2 y/<ܭiy ̟ ӷqЃsqj_ƳLJkcG'?&ɀZrNO~[{kPC:+g+j9PgKBז~| =k:?Zx ױk )dh7yn?ݟV" ew^<\{yֽK4ˑWisMLJ jdb Q@R.O#Ʒ[[C {z]K\i PAHu^,Sv]Bdl rruu66 _Ooy_2JJ1Gm(, aj3=Mwۧve.\ =x0‰4Q! Gaz` $;1!itu}qO3S7}işnD}})QU{*wBV0H=Mi0AzlһNN/}74eQd8 ɇ2PU{eKf)AЁؓ~)Zv}n1H1p:-Ūq+hQ'k{Tr[/G.nӇGyRy+:gڥ˛X ԻVqRoA_͟RtW;I&&7|㣜]|ڽnT;A >#';WB *tWÔ;8e (>+ NNGhlWAKTB U5&I` S0oy }Bް"#Rho?omIb/2Qt7E4өѽ($kAHP Z~5GҪ7/zՄflٕg/m`fg/Nh@ANJak*FfZe} R@ C}L)ʮ"(NZRR[~>|D 7[#ols aUڷ%yGrOw0- TU@)FƯu,o|OY*Z~ &H0sF@`y 8MRbV'$<;jL̃PN 399ydrl8WE0K;/('^g[D c  8JPҵg5䱐 _1ˋs:MK)<0Nj+:&UIIGTBlq(׷=`dA@;Kƙ ZFH]$>I#PgAߦ)LJ\g2LhQ-w? 7-ݎȖ.F9{}2L*0WD5IÔhɊl=fK>(y:^9:p=+^h9p)PM"VN+=ě.ҫEBO߹޾lMe?Md$A՛(pH5QJl:.82Ȍ0 ID6-2Cnuܭ#D |Ji֦ yњi))EDlm/9Pz!ٻNcژH9H#%P;D42!4E" KG%aU˫v."e';ʙT<$bxo{T2 W 5%ipFAQiVbO|}C<窵+ dLw]Q 3$M}'ʃ׫^Nɰx5mO-Df))}pcdƥ U/Tgl uRɁamzj@J]Z 3YWTˮhP;hͮVL\zX\8xv e|>uIH4?L"ԔS(gISW{݃A׽#ӄv65: ?%g}dҢezڭ UT-_(:3LZ{`MJZ HֵM W)}x㱔C]Kk~WU4AQw(,uvkTķK8ڻ/$/D1[ r Y-[ȩ^ןi˂r֊_t\TL)G7q>bm-RTMq:/@~,pڠ!G*qNPG_! K`5Uj-_~k(R[O)skiPS4~{9ՠg]4#]x ο#aȲX!W`n&9M7^VJ >fJ;êvZKۨ7cd&R(*kDKJOqNCur;Cjs*!;^+NA |]^r*|pVՙV+n7  T*_McAIo:.`C V QI[ KI';үj1g`1Lt};>1 =Vuf۫s$X[jbPZ*,Nk%aH龋h&J$:_neODh:T)ǫ{$U&hgç,+)L& ަړ*X6յHF,1.ad?PӅg3iڣ`׻Zȓ"ZbpnXWҤ"9~|N'Mj@P''L2-5ƼD(޴ {%k6g3PfW~^z՘zպ;RD0e^@;fKUw[~) )iqFLvȡn )`(xƹyJHsArJ3TbP)g2)\.f^eV9Ref9g}[{W󧛍(hC>unk%YVikʀ;/%d*tK%2iwDOKT9J|Š8%U +ӎٻ~{Sमћ[M6"Mu,=Q^Qp>G)`df.LV| Jʓ+gE_aHeJ4aєeWi*N36MGyGo;K& 'K0&I[0$HdrQ꼆(5A~~f{9HXWrXl*/VƜHK buh#q+:}Qmjvݸ2  {JxA;al 盚5qGW \,HGah[b*~vם'X (Tt zW9X:;;a$NG;2'І:Bp 1ta!&2dbLuq8FuE9,S4DuyW逻'''eA]!luYP㿽}~y~=??_/ b3G,>l(ʢLRn4KQ?Hэ}_)\)o_*gh?rw_^_^_^om!j]Ý20Gg Vqr$zOy?ct mΠaQNj}U^Rbjœiͨʋy7Ȗ?5qCLJ5s`kNaJ!Dz|`qOk!x]Rֵ">XqoKGP Cڛl3H_H^g1)94 Wp!Nq[j _;:fU3]^ATXӪKE1(\ B%W&xtd$ ܮ} ? GqZz[\xH݀%.hWhZLBO7M&f-Mxcr 1KjpGCF|/w> >mϻ|ŧmmߞnZ} זZ*EĹq>$vh~}bKύ8G;Hֲ&eaMflHDl:n_$g8x)^M6w3LHRV7P_< r#ɀk ȁbW x7N ӝ56QUjB ߼4M"vqPJqg\hNŧ̰x/ ߧx:C?ԡKmGL0vTI6OvVճt7j]vyPcfco6^3؜fxa஧1ޗ)iCҖg#]j~U9Ј)sJ >O*R^JYΓT?9Y >JmR|[+z;ZMuZTHP+&uj2o# XZ;k]HƅNH4-oDxAXϵ9( OFtZN,٦3VSyKC{$V܀#:m_'b+3v5Fog9(~Jv~"5E}9)s}y5Urvk8P4`S p:yfs`U} t/C^lSÔ=7H.K[b&tt忙,6X}l9ISʀ"fY G/ CYRƄ<ˉf_Ց%CE"jN6S's C^䏓K ߓ|n/F)ٶ{ 7g-m>F_`CP]Q~tê&sM;yYIJ'I|$(GʶnΌ(5O7֯Tk J80{ԏ#tSo 32J+W4IJ! U@iq>TU?1+Rq/J Pͧs̻sjT]%C RMsZs^ntTxiKmHW{y~_PHZ!rrd.TǓP.Z o:B_үo4W4#OXYQ؏;HM"G84A8qm;F;Er7(y=pg侈6>?VsT_"\-]ΐ{.wYF-.gяm, >18#V FncXl6%X\D.]w@jD:,. ѳo)Bj~CvЈnSxPWM)%잛|^jeS K5o,n4+RuqRwF'/M"OZqm$i|Tr~=πVz _kN rƦ LO: oS'= _Noinexs[bbѧh$sH\,Pl?qSїRwq᡽>`TzMyaB "D=bp0FV%0%ȯDkI4T`r*"H5aP os(oipQG뢝jfg |`D逾پ }h7^';I(SXr:m~i%6WiɊ.!xYjzA|X\SiI)0; 9#?R  ~lBl=$$!Hӽ, #Xr[s ҉ӃoѴXc-) Dex>hq%t4swd,gE.&ίEMz=@~A_7ړ6TV4gW@Yɲ͞s ݧdAk&?(d<͘YS]#?\hZ&CeFf uno^ lfӟq GA^#Np.,t0)+$Љw "}rW&Fu"Zk]r"%l;@%q @ܞ2ҘS_٬='VRx׊wH^`j^fi3kOUiL"Nw贈?U;r= UHMwHG(/(KКyTD- EPODaCH뭺jΨ2]p~gqR{CH?6oI\&n qkN Ximђ} UU ^>c47y@[)ПP 4j^D*<~`m'}^rE9D7p'>tqHs5p 逇 qhH}b*͡^u֌ض`dU@5C}՝  1`9g-XRY'b4+>d=[q9潹o;x6(SavZ;NDCDd0}{{"ðt{ϗ&eG'zMOAZw|/pd2̟ƽzl)L 'מ4?iCw^$f^uޞ]Sph&4u̅zCJ;yW(s8]v;|-jD zp#V49[S"-;Ҵ91L[0PƳ`i(+T镲&}2-3HNp~3osnmi, J{tڢ.),;_R{vHI8ʏɢpsQ[r/R t34_}IʜͿƼIbϵГP#@pK"f4`(yR„毉H4z[7xMEc%1Py*N)e_L2n=safjRm:yC7y` F:z4Nl3#؂Ib<|`:M8j&ڛ)T0Ȧ.S'gf6?M{T'Jj4*oJ[KLy0nژaKS fBR濅(+=Jl빗/[=~5sF@}z^Q:$^ cdˡ5fz2L46d0J#߶MX.BtF2OgG{CL+VhA g@ &D ղe\6c ?{ غ mI=SYTz 2$z|u i5HjP4, ڱ\z e%+wh{aAw{N1Q@@G0=Ll4;wgL<.~tf<)zRvWWh3>WҶtt2AB^mV4U醦 I,%쪪eD`ȩw2~gÉ׉zћ{aYO\ה(7/Ѫ6%3Qb/#z,)'BY,,nxzМFjs͠#[?)ő`J0^D3^ZSIu ]"]wX i={/ BfIJf(OZ?s*e;"yvo=M] up;z`OCbNeG[ N7r(wn>}{\t&͎:atEQ= Uzέ :oY]sv6d,gޥ`>]##ZEGrpƉqҢ눿Jq>аGJH abt̨aUN 'Vr1pY=ݔq]{U;@BYR熰, " i[G{_ŵbش [ԟ<ԟf4EENɀ?g˹y'NkRB( p_u̮g q!$"Ĝvk"V[ߌo {Os"UШ&"xly7 ))D~492鶎xiFN igv>#Q(HE,"QHDn gZ-IS|zjⓥ}2uF۶.0K(ݕ7,(&IS#D ]ODXݕ74Z~DψAu]tT˛U;A$'6@'kF* JPi% A ^{}G~/6!]gguJ^Ǜ|?UTTyљ 󤉜޿D~}8NEPI wp'd ËjHq(ŝrۤrl6?9?ɐcFSUHwc?8+ r|AuLz7fQ³}fm밴Ia1ӡhQ=Lٔ&\Ĕ^uC -r9$E>xuFH,!ܫd5 (Д'Ѽ %ߥ))Zwcɗ,PB֝8zSmWt9Ccw{\I2IH|H3MTrHŒ& TENe0qH7.oocB>\ s\Cr=d G`c"Nt!1z}dp@Zm9t()I‘zȨ@* #mglvBa |NrR>n I*aGt_/ &I+ɫj3MjiIk6? /g))-))nFAE8حpbg/ؖt&|pJ@{ڌX\^ih盜{2; j&Jh8|o7F|m* '7+0nnPۋi3P4{ }dYW=e6Srw! |W j.yK>כۥ'4y4QMJbÑv`KT!9^Ldd p*StD0y}W|OXGgr]#8z(.{ᕙ/YM?B\(nqgdi4d_diyȒup]RfL)ʖudOOUz$z*t@fm[t<|ؓS2O~z3T7T (eLr]xΩT5N9`D҉0$~B4w-@r|'Yusy˷m*= ,l8Q.H~LEM]>- rWSڷID:E#.]T2TIn[qjlj*(*KޫWɽ*GY]Ŕ9}fvާ'N'̘:ځ{}Zǣ"?@MCPF^|<03ଽIr_@7,fNy#LːQiu=KLmFY^Oj,B^˴\K2^O=Ia6J8L7f^za ϘǂdkF3ጎ$iFX{zh Gg<)+S (T8ÊjL~ͭzn&@W4&Q[iR4^=q{#l) }ا 8uoRizB?4!WS~m0g)vHFc!#M9ՈeJooQckl0W's Xُ>a?GMGl)"߻R};v[o'gҁ"9/H`6wz3!@’FT:o0;H w`z ]-4,HK-{^=2z59}7H4M"9ubd'7&P+uV]詝&9v<},ƗSw(ҭ`P[U4-%0;ڞOcYӛeRFr>݁|9`qO0Q}wYߓ[\]Ⱦy)O֯<=lʣ%??K8 8m;Q 4k6f*{sJ0Y|1=ͩˑĚ%>Sbi;f߇he^S箓?"):ߝW>B=1-.WjM}ȸ3ڍ=W2:Gک+.{mkÀ֚5׃: e/wuAmr-"*Udh h*_4&'=.#"-MD9zjI]Q]A AILFC*6KsI+7l9u/`YgC)X._JwcwcM;}KAāB2ίfK(w۫ rG=B;BelKWBTQUIؒrva /K{̹%%@( D)UmPGvnI㝗t^F4@;*6mUBLG#n SW (Il4 t \rPwc onnq^KfOwj GGHe@DU@_#|?n35h'+=Xݑ]puT/*QSI0Ey0w5y~}LfzI֑R#|#.rB%kcz:,hח)b蔟 >:Eߙ!Y>RWMrH'W"؞ ¾9:lxC ܣXTGfTI2eTrz=-H0* 2e_ !gn3TFԘcW-MBxD,ёyR?ET q%HZd3mF^xW$+S&&BDfR"4hwZx ۂB]K,cWa 提b=uȁR_Х=k|{sq>b8N-&Aɮ鴵!W;HswѺeߙu /hAMrs { $7J{FEur"g莙tsԿiLϝ&a$kSM=m&lM mBȄvk/z;?/8n۫noݽHV4e攖s'OL:۷qe|q zL}p##Ήq1_)~K-e{ss܏&N‰L-8sa ܤOӟԇd7zcxF6ıS\L/ԝ~ث2loC!,T҄hɄC*d릌0e`v׾V vuQׂLo"$8GoC\'`̽O/YXb_Ek !21da҂:OD_ҲZX`#C&gEK;&w ^-)%_Šd +|DuKn/izj9q7/iYBt'ɺ$UohMa~.vsVӹhoRVI$kf=3h (O@UZbJIoޔU&¯G i䗠Evs0/@| TNdjO*3R2ꪑ{i4`W-QjE!Х@WpjL_Ψ'Ջ1iFZ?B JWwꪈ1==Pd`*䥲iיַT =Sti@ĵUv;g,M%2>Ԝ0Ҥ "RFtъ4Rm"ߴOQX(FO)ؿ|U"j6r׉HoKc|CVsL')]|o^ Ro>I2rz ぷiXJT×UefZH'*DWTw_w 'yPTHDHJF5# XVx(^ 2T}=U4Eq.8Ky9JP^$ 4"qW;ɀЗ`+8 t/(R#ƪi)B;mMdN[a%y]ݏ Wө$7ĵVMaӃ* s:;cy ؒeQ.̎2BG1qk~z /BNx%rIW I8RKDݢ~fhѽm`^k$DP^%%*`Ob]SٶyE)2u꘼#$e63@e½jbf\Gy>.[7^u`F(4Q^Hq)U$[ ${gI.68(h@cZ6jѓ0ݦ2b-ϲgTE~Ä.S7̕2nH9E1!v}A;rS+"@8*AӴxRmJ5Θv{Kd*gRH.@paYK5sHӰ{yQA'1iUIى %HHR>zP|MȄHDS=mѥSY>*iJHZ?܋ԋmr!Dvge9G@Et Zb-Ѥw E}22$07Al{jRke\+OFp=tAݛoFCM#7&1U.h+DldI|m\%2\lu{%4Q*jk?[Ĺ%מLfca]EPGGuJVo7a6^0oےZzO?*MREuA(>qxm^B #gM. rʸkW֘(R9J)}RnyQZr_j2ӆKGFzjbe!^UwT1D/Z<↪7DPx4cL(٦Yr&V;&5)eT2TU bA&%{$IH;C:5Hеk ϣjO|2fֈ$S̗TNSC0SDy2}ʿSSEQU%K Q<@ []z>h&2T$wxD7=Q U@ch&7p9:o)Ju>p+g$8e]<` ՘Gy"C i͛OD+"}tNS\tFٛU^}/P7_Jj38O5~N0(ZS:SvDK}݇H@Z /)I9 3H? ?,鷻~Vֽ߬XY1ۛiտ6 )X5yT @٪zwlQtn8^'@Ю~jB;+/>~@qK .8=F% պsB(&:J uGY=S/+U}EJ%Tb˨*#%3߻,%N`Գ.j,@W"'X- XNV5`/+\mi`ROzxV <\_[ѭD&Rx9JPNA &wau$X]}K@?Y-J2#upH˭ F;-(4Ȧioa30 U5u(ϣ壝&IϋTFOx6=4 *Bk~>Q+~8--<"Û٢,REI_6G^}bó5Hߑ+28tM4րw)q2Dےmjkwݟ ɔC:TnTUmCۿ'׼wZQ3=TE*D @o/pHQʃH9)ufN9$Zңv6Eѩy~H?"m/Qp !{*U gbg%ʳ8H2?IEy)J7@|'뻞_k+s_E }VMGJ܍1]umJTaIZYꄉsWzK˙>_iNU3zT|0p]8gCJ|fBכq+32ݾ 7Lpݭ_?, );(u&9p*|-w3H<@ґFuUQŤEP5 K2;V_ރ =Qz{F$A'BB]*Px̷p|b7MD˄ǒ7Ȓ2 S?\ У)sZǴ|$(s^D{hLBo+zn:51eN:3s#ZˑJf~E@dCܬpZ䤏hNˏ"JyYؾ(S5>Ѥ_7( ztm˯UFgHw9*gw0/N]׍G@ywz#ά*_zxqx'?_Ai_j'U)ijKz}@ݍ]եoHzf^HP]ʫ }[^Q}WXJT(ӮivdV T&yggt~^ZpRHG0=_R"~@ tTwUM=UMo'Bn݇+k {~esaE^aY#t_Uo"A4ROPMrzg$`%^6/R?dVܫYtoZϋ[Ԩҧ|2nIoȫ{>ռ Ba**(G4r?D=%&˿Jau¹P[dSx615o U;}tezT⮉l+ *蠍MTICd)g+M0~jݠԙ 3V -\^`7ĞwQ;gEDeu0X!{<к!$4N`™oČiE7T/KGicHS.5YԾv̾;Λ/U+m<  O|#J^b@E+ʏ !YIM|$u9|pbw),iF_~f^tQ9!>aC/v@ h=4Uy40݁$vb(cu o@.;Ҋt7 !*4WF%M{P͝P 09/']ΧTRLQ1叿hd5sZ3V?wN;HRXk aR !x@$d=iA+}C*8.0Q,a+IGPU}|~(5AMHu*nߨ] {QA) >![D nː' N4x9b7.b--xZz+0봜:=АGrb%@B%hdRinaO>H\/R+lilF˭ J &ti:)U~MA֔z?:%&aU- 8U-)rI/'#OIaxh@ÒjN^BZ5幒xv3Pg{Nr$oA:vWcU}d'QR!!hN 'k :)<@ܮ#ކ=tD5 K򛟖Щ l+8Qr~IB[h7K>-8]4u9~ 'Ej" Hy`rV h'wS[E ӻ.aHu>DSf;| REQ4(l š:,53tk;aUrr },dj^r)1LxRL.7eEu^&81A_usSͳ]Pйi4[|:i hE~C*D {= 췑%x4~ }`C=J/;Gk4MWM0aEhhy$-tD-!B,iI"J`w@KaUdPyohKHO}au*[7ڑ*1Ïc{}"xf ]UM,U|xG읥rg֚)Ϥx./4Opo/lSXɳ"ڐ)oBb|𤜘XD )GҕT>I9UB߱"YOЂ,nyY|"}ηm$ ”4KJ:F+<=ڙؓG7wT=LJYii}v*Rv_dY"tܼJ,=Jgq}aCRȘ.:JQfjʎڊ<'$yz@ ;(kGw+Bw (#=_vޑ֎Oy}seZ*ۀrڽѕk_~RyJRpq@ZC9ԘTTvf٦lUyZz+*FS¥(tܢfi 62MzhH)*О>BT!9%e>:׿DI!j1ͣ+V}L+_OݗLMMF#4 Vo V0zGgٳC ky*]q;a*w2<Мj!ET.2ԍ>ifRXKOJ)>vިAޔrjGSS:*|:D/REe'm*Ӱ~v" T5>P@@ h3+1K{s~|ʸ,YZts"1;b! u-Ϗ(OT{uKʢik8MUD<@]Z&N*zK=}ySPd5V/ivzM>Jc˅&{ՙҷL\ۖV5}g@~_'ݳeYUB迀 Ǣs$;/ dgִvdZ71{Ԟt~Ih+Z~TS{㜪Hx(=neΫ?)Ro%AghWXe"rSejejkR j{_ D4IϨZs=nIzt?Xo|L/mrXcGHs}zNAE~V:‚`$uKzZcA`TPݭzB*\:Z~QEiʈۯ:='ϣqۭ{ϔIijH/k SAv1O5MFdoF4ԡ*e]H@l8/-cс+WzG;DR:1_ճꫫNs5 ʃيUO(UD |:I { >P qQ+:BHYb_20tk2D }.^ 4h{eaERaMiG)゙h{q{zTI aHChYctQ2 WXuyN\@?*HzT`}s?G؈瓦mΪVeU-zp8 m()ʃU-g+h!voQ4̭AL}J$agl@jJPia;0~|픒R)rYɆ"b&k6"T8+<>S;ݩLCMa$hkY-u/0juMprrHkUEIO*wS,>(a4Tp^ ~wq_%ψݱ<%Q(4~5u3ETOTgÒrqRIo).c_ j;zS^x EO)1 ֭io缭7F ܞm&{{uWln{%|GxaQ5Y.k7PMo4oAI@Վh$ eK >J%ǝ GMԺ>iE mA*hv|cFNS'447Xn\@S&8,B#^6ѻ9.6tcFB%|a,0,%?@KPHA_1]r =%Rflͬ}̭tu:TZܣ`e-t@s YuU,Ltʵ Py2f+7 YF35֓BnKPlѝoh{_ȪXe-,!FW@PG@RsL"l%nSTg꽻[HߵWineT+ K@ḺZcM 驠?iCtNOWx 'V ޚE@\APsV7~4Z쾥EJGA2eV*B3 fW^ 7W%~d~Qє4&&/Jp*Ө2CyeJ1FmE)&Bý'."B2C'둞Ҧl0!%tIB*R;nwa^)I`ҝWC_ߜϲ%&hGӒTQR} CyE(U4\{e֊672ukXEܿ,NzٯiRmhghzLjf>sSwZp=)Q u\:o0~4fS5;UZ g+é2F9gR/:%sVRWiis\L;h@19֭͛!v4K8d̶-+![ƭԏJ qb:UAD=_W> Lު/ E[7j5WO8o$PFX{bS7xhewj|iyZk,/ h8Am ieLb )H+||I,eXL 2o,YX+TD/S8/b@xUY=[RQx j[s?+1>y~X6&VBesicZTmE0`n0s, 'Ӈ`/LC)At\Sy([UDPiIH 5cvv- Cl)n~.}+x <(nx۝2F^'Q&0OrZjC88K݀:@rvKGk:r$2+$9ŭDt!z[绿@1{KBPFƨx1p5hg*.~Y`AI ͫ߻Sۿ37Az 5.tR0TIVH< 4n(ԓe?ҦWf:113KC`zls{~~noooPxV/jw< t9V%"e5.L1 Xb\X=iJ>Y:Ӗѷ&%)qZwmw%8@o&p>ϋm Ơ :b !gқסq/rVں'Ub8 oh+b=+W"}V;Xiy`6L1HqsRw%MdY5 ~tP:v5N%seTx.>T })cҢ=VBU AWƷI[e9 =- Uϛ-MxY6txg աy )kCW`qI⴯j^Á>;42eΌȨ^"2Á~7~q<=ݥe o_1*I&rVAlh"hlEH\)?3/H9?<>Hb{eWWcPi~yFO~[L-T s!-Y01r-ڷ+ _qM]B7 Āp@S::q PmbˮU&S>uk8a%H.`^-TB|3Q b1.u 젌prg{@лVP5 j q*6}R,A 4 =-k, om=;y2&,ccƣS{!$Ɋ7az?WqFjrSPlB hoqƶW7M +"wODH"[Lw+$wF(hm݊)RJuUmoW6(?Z`X/"'z›r5vIfbt1T::ps~ ZXgu݃n szm͍ԻM~aZLS ~rr;" Z/g"c;ѬsՁ&9ÊTFj#Fq;w^a:*{`K//0kqF{ 5@EvX$ipEIBHqvͯ/q9 WucŽB"Cޕ^+ge!:ۇ!Ɓ8K0*S&/;>Vp@*x)h = @xwtG;;wJBm}b]Ou=[te(xخi+M@Y鍪վa\nm9FyO*}|,6؍0V^X~&8ohҺ 6na*[6;~rg(2,0hA;hc,G<"L?ƞ{"N:ƚw:/_K*Bc|t.d6DS[98'Ec!&OkL oz!v?X4^ Oə- yJ#UWA=\JPQQ^CtOk hGWM*<@U,]@"#R#Pf3ڽ9}/„Jo?q6>rN\U.àf+%(^7Crsxh^YcoJe+_8ǚR1<ρA G}hћrǬ]l:=/Hz)Zp cVL4#rpjN)]!&R5]Ҕj TQtםlkȒP|iy;C٣̯a1mB MuWZ6QER.k}O=,CYD3?"DŽ֐p]>h.huT@_$n!vOe qW-I *ީ!T`L?hDr|*vmdcgΆdn \|P 9E'1t~HBcKdУkE뻰O l2k|…ۣbA=i29]baXQX?x2P_`O@&.犏x ;?0_Һ\AQ)bsX yhNw[Ί^iXI{/4oh@nT2`S%6G$ϊvZz"gZs'ַm?たэaߟ Mr@ur RXh jVgOc /'B-D DO% !~,32Dtp&C&r^4!UrTI+:ͽ%g.\l(s@]t ~.M,CKjz!MA9t= XOLDwsG =yz8h)4c)$Z 'A}2cU<C>s~@14-!{== R(ѓB{fG7[̴SiK.:paZl4J.RpdoWny ,=`?}:a'SO~5#n$H^I:Q HڍF'D״UJ gz8y|ͷ|̱2!lFT9I߶Yv?Lǎ;}8C-/)ҝIuOq]S7D%eyжpzDC4m$_-)K|{1]׍ia2*sV HM =Q=_$8/5&ƧA2*VWtЫ8sh捲SEDv8 ToVs=ܔ_HG)uVJ[𩑚նs1S{7 0OyF5oxMiuX"=jGRUP+pdjA?4p>kƝ5LY5Y6EJA'dDO[YFCa{r(rQumz#P"rzOS۸Ӂb rQ+5*h^5sn@m, ΪF#'FJ{s_@񷃖Yu\T~\tI<'4 ,CD)1VZ~ɀtG˭;ENIfKN?`K`s8y+N$RR~7_uo uQiGM-zz:ڈN+R~OW݇FT<o3U,"x Ba{8#FWv~<#2A]QTωcSg{%..nD1h  &l \_#t琀j (ijߍOjx݉iMUA5Eq, NoW<;jwL<A*UPx)HXx!7;߯jA"e EUD㆔#9~x9)f8OY࣒$ F`i¢W=\f@{ E~jJNu(f)vj'A}Z, RչWK[Qa[˳$ ,w"c5x!Prh^+ *;jB3cĘ$:%.--2*hg0t5NK};]D ^OQ:g ?8wp;U4.H?FJ}]38}[|"S kgJ`@dxX"C l$j;v 8<dS~ﻶ)Ē^CUH+pz@)iёC4$<_ZߏwO ~*EB:En0d|vTI=(TRtE7hfLꕝ/ê#Ve_ZcvrZ|;͙ ۦ JGfHl1BWK.$t`P鳕[Dߟ7Me_p|{YS9,cF7e.jvtPߌ~f]cæ:y `)yw_)OKݪzT 8V.Rg^d:r*v/P|z`uQaF#,u]JEy^jNkm%{!AkjiRZ^p%y-"tv[K6ڝISUH}A"<2'X 2,[e7? +@*ȐV%V9I,9|]+SmuHm+MHg&H2uV`.霢̤0vb?GH9jL 9p Ӿ^8fZ5+<7H޳j:)6@%WM7K~(Lti0ѹTP/' (GW wXNq{xPICK1ʅ2$S^1̾1vv=oXƊ0c Mgg/1%T>\aQf=a'x;[_` s?"=+]DUVHUaC%Ѩrl֥"y[` '-a`#a\|`E5Ӛm5yC#D1^zĢܹ}!Rn^5gqaEZCHԋ6n=3Miuj_}`U+1jlU.i9xo^/" Te~pL]0+lE 1Vx|!;Sxw?nh5dUٵ^'>ǭq$&QYNd8Rsܗ2ߦK۾t֟𫞦n\60j~­(5Tebj3.kF_錿~~Im#+3S2#]R~EWw^^f۾@.{\bjC+R".OaA#g:Cjw?!=GRR3N+k\_Soynܴ>;X t#ܡrfpf T#I&.Pj{Hv"՚P1 8֖e^޶zòVy/kn,ZsMY9.'1z/۔ҲAYq:h"y2RZ_Кz8%~ᯪ6џ̒R1MwtvuYK%gk*{e.hG*N#R/j{=DCxJNij??=\M A9?W?KQjẘܭk .`<^.Zbh(/E^ N [[Xi*@7K@Pw#-D1O=?EݹTC:z}WgV9r kv #[ϫz:Sa'@IS"/` .:IU4)*p@΁bP[ٷ[V5Fꇟ*.~~z^@kک %D&4ws,ekGO.iV!dOiwPE06xYEN7($r ed1 _s7IC RUHR=55J_է}f N| $5v;.U'TK`E*9eZJXwR֭lPP")T8wx+)vPY2MCcm~Y޹g6eΑF*L{v~Kib6/RgkȍآF{5S{UQ:hr^/;p40~@aW)@&m'y@g0P{?Y-1`qdCci%~HP#r)rs} L,7z2Y[,!_m+.`XC-+vVvW B֭4  z_=HrY{Oʗ6*Sc_ˉn [v~/xrՓbj0 s1QX`>ꌖ&}{|e[-w1rnҺ⼖fH8aS a;WKw?CF.e %.1-Έ͗5 Д~7n6Ta=׬cᬊ4Ar=^K%ȉ`-)Mfhs4B?U0p61<ǓB|IXE<"yPR=XyFƢ yZx?{͖®+'+xaKM[\P)fQlbzi56--p"pq[8-hv^Na:yfmǖ>Cc!0yz}16K/|EC, jǴ)f^Ѹ(vt=5C]+)"a) # ѤTMg堥Va1 AE.=u5FW oA #v!fg? ctBRȕ`5<˟$D q=pAju.{~me@;KP$Yo q&~ >$4ǩK//ITks).a84bE\{koar-B<H ]^`i zOl}'eWqz#Ϟ;A~'-Vi]D*Z+Bs h(`" g*˻^]b3Crh }]{ L`@պKoF]0,* Я+~L YBƇk\- :ώip[6ܥ cP%> emR=Ah"݅ò{lilE  ֙);4*rY5<1d׫vy^#/]GN4j3zwQ˵p~So\ FPU4^^qn6]9@T%In^z9J+QzN]9`J=$RK?O xI#ٱ}NK8#rL3C xƹmCmnXe+pֵn*oF8)0 9l:x*6Y&bPk 4ѕTDJj/l)t19}R,vSlhnk((}Sw>e!}ަ+lei4"x"SE# cJj,,qW%Cͻ[[PEGY/}Og3C'9 a$*`RrwRG+Kע{fާ߆o`]>mnA\$Z8yBI)2eAAj/ˮm1s:(<u D8BL;`X`D0Ux= ܝ%u@'ѣ\uә !۶)dw`)f1] NcŜK֟Ͷ)f d%͊1uZM,z3rEYM$$Qf($\Qwq981otsk?]Yt d\8LmV 1?:3?}8W]F8ݻkk-Ϲ.{w^\_:"?@nBPn!`;V@ɬф}sZ4M2G4s {%W! ~%2 2tqꦈ+}0U4WM2Q4{!6YAq0;`F8qz}Oi\&@ƖNnmGfe%zw,mNH iiPqji6zZ*a1r'qhCYoGFR * g`[S>-[P#3Ԯ$:cEPJ تzeI-(CjQYfZ7Gk<1@Jm0Z8*`VaYK|U+4br2{ _w3ۑF֝8 $s xLSœ|iJfO[Q(C1*'pI\M <UR~jl|}K]nrHPҊ^ 3fo.R ʷzZ S^@ع.RuZZ˖6S+R=\<ǽcriC=NkSnq{C@źX[a.&{+|}y@c(Ku5P3 3< =v#bhG{z|%$B ǻ)13UF4^Mw`~̻^ZH_9 %~KIi#zfL:Su Sy봬M_CR>+((F!"5C5FFHI"&ógxY\oދk Kżgܭ}L/).YE' Lnz1 hEhWzW TjupZ:'%sjk/Zi݋Qt k ưϊqg/HMeۈ0[߻XJ܃%mhNi!e'{砶_4j(*Y~%J)|wd8ƓDz(mM2CPfPP{*xg8&P!{lg}v|BGRMJuh)īCwP/hHA|L3{R]ޡ#vg"op/!% cV)l`‘/>Ҟ߼~?+Y\<vȌĒ?.jMҲ&mmGoU0/Gn 99y{Ӗʟp]z88t>zh:CI ^'_?P\R{JY؀>l{㉳OVCk{|5YF@G_P[e0<׹ʹ|{pYĘ#e~[˃I @K< Q`C1#H>PCsRS2{Apl ^Iin>fz}{~))>h^S~yX~\eyyڟϲ! &d:5I&!6~'EAzg?QSө|lSvXUmc:ꅴG?sAvt>K8(lz@_UTQ.lRU5'_=9x+}cɧ"NM?xuR8gkdzp|"|d==#RcҙI^기ѩ![mMDh"_b2Fxu‡xK]x݃LȐ")q3?+UyV?7ۜ#G5K9_ˁt熲m^V?>%J?DtDS.+4_,Aro33#؛ }.z&S;JHj6 .JzAӿ"8=ϟ9=Շ5%)[?%J"]E} Gi}%9z$T-J0+eXqFjf.&P{ݶ@Z7Jw/f1iOGdaT%& _(ԵZ7i&bjEbc/Hb=)@PEi羚F .$CgX6^S}ؗ5 _]υ~MoQ-Q7tpmVj;SV蛧lQ*]ցlDaw`=+k(m$ZWr vGlY--9ZlQSqmɥKIPŗ^Kн&WhY~3? {J~cF?IZ2ɉ)ѶblQRp@IUG]g#^kdk]=4U,}=mw@w~1M v|ڣrDiMաwuEL􈶄D'{&푂$GНmu_Q?;zh:t鶴2|vܦy`$2Fy) hN@j=ϽRJRb3ź*bh*i"k)yRT:9bJgW?0ç[;d:¼v+- Ep[RWٖ:^aPs1Λ1UKlU[4YI潲n0)۱KeOŀu4cB'2t8TNXʭnFl|CU2@ Z; j֯DMeHR|F8D mj#Ka(YM!1j kޠ_ݡ١ĥ}ϚmK)oF1Ǻ7 LhNmOQ_Pr;Q]_ Erp;/[w G;x opwDɧB;d?g ,c^H0*\~Zf1SfPbXAblAP\tD~ ,Z^,ɪUwxWCc7?Sd%w$'LSџr&)a`.q,%䆒2ARVΙi1W)!=XúQ+wJ8Y*ݒ/y,ٮZ$ssF?t2r(ب!2 ۶̭' z2J⾽BY%Y$UtV&9T†pweQ&(w|Ĕ)!050e<ϫ &^"<=GJӼMp8ϋ7$b:_tԉr>[sNS8wM #;Feo~ REj4[Q\k"nGVZfx>&i yKG <#  ͕Pnsw_Q{g逖aP]zbs&e}g8ywo|ܷcP Kqh#v .:`*3R.!Hɫ rwN:^ sE,{7 OӪմp'mi"mxsK a`,$eN>7ZL.gK1L|簻Z=Fφlʳ6QbCeH&'1%Z ɦ2+!¼ H"]{3!sZ"ƃ;hqRW${!i+ c^KzݭiKUZa@c<+"xU qT|P4гG6To"1'D|Σ. ͯ/^N]FzdsB8Nʇu8)r+gKFƙzp'YՑU.<Ӧr]s̖U {pa!TkQn=MV{2L%ѶNs @g ˷ԥJwgev[8TCNfa!KP& B%?žMtFd(nꤻH̹ܹC~4S?^7s@߅,[cgInҵͿN-;M!nhwNes'u-wJ'v_~㗧"82<8  9g{7\ ?:VuS(n!2 %˗ЛebVT݌qZq~{6AHcςKztR2:5x.lABi~/;,)7)߈vez-K(~֌i3}\(EHokzuMv@ԕVW>.<Tp[^f_kmN*!&Z$57$Pzi eWNԆf:K}|VLl0?e zHU9H:maQgژ2aM EZ\&)?dų+Z[>\:CyZ2YԹj蹸 -p0fҵ "WF8;g> >OK]RL$A skgisQ0 8yKs6ޓ^M)*gl#6RA?WSUb?LoO5JC+ C@|??wHĒ;WʪJsU\&Km-KNДQ6ӬoE%TAzF%h=dn SխmAĥAfܝV3:+C Nٔa&N͸/n+.`81:ϨI!+߽ϥ;:CKj*~5E"e5˲B6eq!Dm|`XDG4ݚ/A})H\~e5/ϋ,0&L,ZZGi d[IH6(ks N?(z!" PeiaXsʵPL;{a6DS糊er/J1ژu~ U$wWO^'B,5N|D7$"I=/-*ߨۍU\'&*J"0QN).ewpS1B0Jsk*hA]qSjFC{>XjsL%}YtnQl9j#_TUU9N뵗 )ws|9J+ 2d$NԨPZj۟ZHZR]W\c/^l=eGO9hn+7M +WjVYM1m/{ԟ\mHҚWJ!soag~y]zJ2M.,ַVZ2 Z -,ӈL N眴iPQ=h/)]`? bv%+ǥPAAw>0kinH]4Q~f̯ sFϦ=g,gkpRly~jw2Y~5@uW@ߋF], gT-^ޅ?/h7;ف}(Д@Z||!57iQ4Cc00[eRT~>IbXѢ$i΅{JJ*YP@"}l-yMIj=` .4&.ߣeܭWͨǪңWL_ kO9 m =7/T:hdcSHSv(]xfH4./hFv>]rHڂ]e:Y:P~I> ̫vEeb0꽺 gcv~3n=5@-J@@޳>n{q5ȉh-6$߂v`<|~$%x*D#&P Ϛ ]GI+˹HvMt΁ 8P #Lj|a192vӎ  ͗% YXΜl:;zMQg2JPvb,}-YAXw^M`urȅTTT3~A]eGXT5}ur&<߼"{IS #uBOvN]| FJ4juA/h(P:Y(u-8K8˹A14޳bah_Q dťaMAJٮ!.ִK ڐ%jIEOJP"Xsw2a<9ާ&ZC>tS|@\o|#*iYY0ݱ٠O@J c:EPj r_OuoVdl9U')ndv\TzCK2k #U%PGG]MێMSA??j߅??Pg 86$%v^2~"ey!.UZߑ_-2V߮]tz8nx@*ۨ٤xPOR, r3%"YC]7VSOxsp;b6TP\XJH1ڏr8Qw9пXtOz:$ѵ`=IDyᩀy(֍rȖr !tXC 1f WeׇrN) 5I)vPYcQ =D=}2IuSg=סtb v~$|8SMUqBδqYF$^ 0=4gO:.; }wK1t:f>t\N|/ FTb,|{5 syJa_ )vӋq`trHyF w G2ܸߣnǃ )ɷژ iC;2ja5vjy7K ce^{2:pRu,:YFeK[ړ$-o} 1-|gj4Tt"E ׭۲z411cE` .dDž7'_5?u?5Wq)][4u KN,<ч m+&< yg+b,F)3n\n=}8[i:jt ݓABBЬ,|XQf(gEOO9gkE(!ѧW!R|#%#SQɚ5N0T;9|.]d_\܆2qցtkR3h9q~m-pbmo;d >gZu< 諥{~hlH8TTyDHʪɆmK-u*zV_EǪdhl05|_!^kމ];P'545G[`;<2 Hr*Zmji љ4NƗбGhq@ v'˫3Q7M| 1/= M\L1ՃnKm Db`&~LԭY eVĖF`;۠|HLU upanHZ/~7ּ,1=)Gcr*FbU'$`kleY N ^u|{ßkNqE{(b1ᬎ9eoFDjtoF[K?klaO}]0`q/0aI=()yn/N*fzKx*iD___0ob1\;K9ZuiKjVϔ$tWfWD# 3v߫l^%Hæ^_O[ji>sWlOﴈlCgIJc~9^;1f[6(W^lJs)'grOBdm:rFagpb?{ 4V?xDW4%ßH{(4)ku)iJ,5Zr̀GEU5Д;Rvr\ *%M( ]"cm ܾxLd0cڪ 0,嵍%!S OR e} -I~k[ByY+qcruMհQo3<=).R@ }LZ1 b\BDm%H‰2;'&~1c4_FKBU뮬uM/zIKMeÂz%HO1:CPYVSO8S֋|"aj24\ƃ&@N|OqYaSN'=Bmh+Z+;fLPs٧6%%+%/xIsX&ӵPEݸqʲUiMMŚepϴ]~)&/ _/a|~gw6tq ì%t* 5_^+zK 5ğMs( .)O XMo~2|߈Ձ2A N.m,^p<YZH|Ae1Sa_NUO@*"E~-IsĪˮH?VP]n%?uh).9uvVܼ)Qv /${:E<"A~טڝ^)QgiİTN: >hc4|]xSOsd|?JAC-I껊q_r"L{?Er0d%tHnli03$x8'.{tSI \~-OreiAQJU ll4;ؕ9VAx`<떮"*ߩy<<㺘CҳA1ɒVL[K= әZ;%";%uig$鬺*zŻ@S*W6 ?rGQ31hAq'ϩ6sn\i{z!]K{*DV qn)E  pJ8='ߩs4š'w \'Ad01&kZۂ0羔x?:L>f&Ъ=DKC7WDž5$PrybL+gT&ӓKc7hG7RC-qiSv~3Ht&hj}*dsS1M~k=k#W9K6:KN~"z)C* TpnMQ_+?u{P@/JwKهJߪ6ǔxq>,\ ǥh;ߴ-… zi Z0ԅ)+=Io=8[ .ᓥTgKjޯ*E}h =WIBǨe:&OpAİ#]5 /F56/@%@>?BzvHC3 zr^|[z%~ԳZ0͕|YBz-3m}۴c+&g\=ץhݳ^H/,R BƇ zCՙ[˵_#N-N{jނzriS/,{@۫8ʈD6|I2SHäGYHl=)tsj:Ziӹ%~E=]H=$fFD&BqMIyX<RIՁB؆wQ&Sg6:>H0?qJc69bh?g۴ŕ?y-ȵeIo D[-<{7jmM2qYv`9O<)@*"w1B 5&JNBڟw@tPk&͉9h ࿑@3aNn:yݞSm Y=iѯ@w :RQ}xB? Wpi:]ey^ߐ{^iId'ߞxwCJtbiTɓT|';/+\4 O<=wg+>mP~~aF˱fIoH] Ht7oct| |Q5yl 2ܸ4ЧVm {5ש䶁*LhFG'D49-  i\d5/u};<~攵gI!AqߪX ٶn .pyt%#xBNfts5]mH^$_y AЗZF O#hx/y0BS?`d^}~|򝣛R Y&iO&gG4M&ш^7࿩K5?I Og()}z]Iٸw>_.k*Ռ|c@us(`T>~\x{^  evXEx2Ā; JZ-S,a:M?NݞUc4BP- Ia;;w[ JNt@x_.68g:]hRhUB\&T(߇OfQFg_`YT-a>&4MH.cɸ/=C7s5>R;f~Bed t`SaPC,=hPڌu KO욡ecRJ=< =xNCeܡ X4B7%%-ׄ.yPBMQ]V%J}M-F`r9L1lJg82q'S^)/MtF GT"s(_mpyB&{ īKHQ-D:УOZzCg&6$:Gm#-@Ci3KW&_T ]:s%Z*ʥ >|sǜwT!ɾ\y$qYMiRKƬfx#<,  m(2q0OgDof3,z.?A9!ӊW@X}7hK\oRUU.`U1x%AD-T~D'=o9EMGՊ7*^`١\ȹ}ǃCUKR -bH"uA^u'AzhEjxfPǘ+׈sΓ\D@'YXݱkʱ3EU-@  {uդS!%Ž}k/iZO݀)ZJY!Ã*-<}uqg>S1XgT,:~ef0^\eFQHπތtcp׉^! ke[蓉pœJfG_Ո6߫_@k(VI̺@|ng?ScF_j^'K35@05gЂs_%b&JT[qd4̟0Y9?H@9f!_{<6C*c  vUbɤKzJ3<E=uc~1xzo~BBhe:Sup6Q=# (^a`x=ou1|R;iBg>5;)`zğM"lBI>' 9ü([8"8ΰht~k{]ʧ lAP1o1j }oڂ^ TL|(թL\h/p5Zn}h˜z ܚ4ؖ&tjL_W/0?5f\)jUw|kɋ6mc$㢛4o@yHS+N c= imDa(0"SRvќ;YQI"YJߐ[9/hStK;~#\yUtM,ojTq?çt:e=A\&0  qB=,LSu{ۧä1yzn{ |$r*E9N _{o/'x;PQiW!Nu]o˅A33oZ5-_I 4u6= Xuwtqv:/5埃1ˡң֧0  ;4Df?Ԁ~:W,VwTsF&-n0XcXb=-Bo8yefT m`I}7 _M9홀wj>?iW4eϓtO,1S;` xn/R;( IH;1j ŝvnX'&ccph_&̛tn#=8|v~7j[p7s#vL>~G@l;[3rD|G~fKPcK 5k1QΡEKVQX-b悶,Bhuq2y;&m ! #@}J۟JVѮ⩏[>rI'WIs:tReClJoo_ |0厘Gaw1rF1詃(ޝRӿFoXY~)Eq:!Ƨw)#:DU%+V5MDܥXsb!*6i<-wUftjRK@3{qT\S?^,9?RXy6;<8ВGS;OP7 \Ŋ+jfXx|,U$rX:br)FH<"i}v7Oq bKϩMnSV& EP,=4 s 4-|hAC:&03t0ΰxϠ\!5HZtH"=a溤y3t+qxV\E8X szRwgjWM9%$tuύAȞě>8V1h_D^lp@eIMc3Jszz+P,rsC%t0GT0Ec916kx"JF)MCI+ XK˯'] ]8vԣ@ZݡÜD =锍[@ DN$JPMЛqmʣPҋ4"fD#H }wGz%m,E%Ab !2Ĉ.SnSr.g̍P7(:Է:J3Ղ]͒2 @gu$l1U;rfs_~D9M?s(9v }4UD[cјm [t{@y}_7NO(Fwq(U$n2VbMd 1dHnRNRSPբORL#)?ڱSSY,<) R5kosEܻ(?q01G |Ml0v\d`&i% m4=Q~-\k>zB.']H:ȼKZ0+g~[}h{YNNQY;4^PMB.ziW>ɧ~I63gG&z5Up4k8n KP$O]gFK308eр鷭 )"xZTx ң#T%]ǠM=. xTu VTucLܺNwY͵?dR ub{G)՗<&hg.A *oue\Y:E$P`NXQYn.NuyP_ ƦíwBj x]L+v(xS+^ yu)+uE9}=<P+F/)A3{.]ÞEs \gt8>A򛃄5nf % stC$kڐNpxuwkWINR feCТzH]A[pFogX啼5WqA W1\93<7i?8&n>gRNE&OC\xBG'_7 ju^?f]ENL/C8uXxc@U&սK EH'(q(uK/VŢԢ˅Ds0Ϝ_N\[9gVlk?t uE \wC .dPt[E *j7d4O+C(4==^&=EX(#%E' :R)5Oc>MPhS"lP dץx+#ɺ[Uwh" !cST˩")[? A,1A9R-@gH7YIdAZ~$p>=>[} EW`)/Hj"dNNC\˜}tB\jtP˷  LyQ|oɒZ=#G1u(t7 Stozdt7t )rdH=WIN;aFtDAO “XlL A7W[RL)$@ȑbKϐ:=mz~RmE[sRF<r]_r%RC' mXK%Nk*C]x}w_oaE:݈S y\MA{E3熭NQ%8)2htB Eh Хxm0TRRWwT z(nN3y&v17dK0RD*KDqR'-s% nש&rG@scu%E5\c @*driBX6\NKj6_Y֯C}%nu%ec_#/V/e RKuE#Vk.:k rIT6!hcdʓ#͇ /=֒6mT.'M3ci#Ko4Deҷ5?lƛWK7v}$mbP7h2s8'[1/L=uO=#nrL*=8lp~bRoqO-#{qg_|-pZuJ!.jQjO&ub7S3)+Σ.bp:supDfɝ'e5 ]] 3OnnGT3hڧS>{ N6I!ң[4v& Z\ GsV3pCqes<-ZJd.h$J @ }kx)^ҫYT=ehQ%xn2(65%I^>Q?=u4ws Mn^c1Pa!WbJLJ{d/^OZ(`$⧺wi ~|{|\$|gliug湳G2cob {UM={Ι rVY]Jԑ5hP{ZTo^T8Ҧ-J"Q_O>.C}iS<RꙚ3@D{©;J$[0͸17A$*,JM䳸^ \nPW\Qz2pO}`߸=OTI $POcOh~謹;@)Jmfu5%;AObP 28ϤvnNAx_٤l5Hfw@z1IFmjC!Gn\BܷaX{J9h}b@)䩝OSOk01m:pjB/ B$ǩIkù] tAJA2v:z hQ{j)ns]"&F聋igϩfj 2=;:t(j?$IsKZ>Ó[W[zvte/n{ratPTbzehaP)ޠWA[4 T@pL \Qфs54M_=/ R U-~Ix?|_^M-f8v~>}RIZߤW销R&*Oλ<UW}A0?Ɂ ?}x~1:i[[7.!V)1((4b)>#]n^M&9 آ>OykٿSU3W>e#PĴ/dfD!S ꍬ+#M Yfn Lk.\(.uW!o+H5*@S a cIyp/OBanRBBċi60{RVc Z;B-$($2Ӯ<g~xj>)0ȣ,n&˞k;>5]sp>dz5' =1Y pȴa/4 8_jW5uzB 8ayFi1nx܄k{BñH_7%@?,'(>Ǭ>| ~2ms-Pw+Ԣst<+4ZI>${M[dfa:?f3ӷ+(L=V,y$QAk`]'UPVDLFT'I+*>.$ͳ,$srO].|v8놶#V!~ah,G&;. ĬtHRR9Llaxg{؜9HL@d)%wNF ^-;Y]1lQ5:ZNbOw @R³uw|) m@&P@4c(ubm=N M }RZ?_=$3-E㶜$Hfau{)N@:m;8e]TЃ^᭸I$,d`(_5.FAx %R+ڀ^+wg߁h8q4SUmT1Ukg;bao8[-7NJ|iPBo w-M~4~_F xsm`۔@'!qwoHUMMm1dʎ';tXkg*/Cvj0u7||KԿ| RSBc_+bkH*eFqu,OŢ/J Y9եo\^ ίrw/t]x$>M6k(FaN%=J T>~{UeaPd~q{NC:@:Yu^ /"{t0I(zxY\1VҢ%pDyPُV]ERuF<#7o٥v<з ?+ۚ6.{b|ywYa"& @6[Mp*KUm7NDmoTDtSdŻϩ@%TC|)#<M ]j[6o;DW| N| mIV9VzZ7;amG' YQHZ4;4(ƞүsЀvWʔnՒ^TM#2r͢xQ90W}SK>oB!T%I b Ev[Иy/;B:+A޲ y׉*q;) 30"𷟓 I2-PCtG~HǏ?{uZ;0==TݑIΗM8Rڳe癔ٜRf(͜MSj%M"q"iC}̢|ZC4s$7t2 qiB9τ]BOC|,bB;$oRertpMՠ{b8~l$J[{h ˝S>}O _ǧy:]y% Y̥QSì5Mvs}a0kz4Fo:pRpZǩKH8NjQA7]kfߢu_6Un~ߚYni9OԬI2#YP3B0 5$nڀ wuq-@}0Rp٪I:E{4rtM:R&er][ {TQ1MH1kPUz֚$2 k pF 1ds_#z;>:ơآb<\fYؘ/n:&<a :i<,gQ6Q?z208t?UzPn `&oE5_5o` L%" 'K@ur^% 8tfBh>̪"_KV __+<˷(&PG-rJ )RJw˳_u&,^ ƥG|Qvcd9f!,,J#Msw8|<YƖ;W%2y\|Õ VSbŨ&] =͋ܛ.Ҹu_>p[.v=do iyC8\ꖵ]*(󽤕JP8225>H̹wNz>Ǹ5 bOfE}(e8* GհW]T]U'nU~9FLb`4A[9]ӆ2Sz:9RkVH*qZj`_"mrICs } K4"keI,lZ!y @ !dR~y"$28iֿVj[rK-MML4wGh]4\i ?2TI@gt>-5K@Fn+rN0X/ְ\F)]/|W|H{(\^ƻAGY5u#0[ P7<İ\/tH=Fw^C {ٞ|(.Q~Gv.;w.H);ɤ<*} BG!>M3 E+9Ɯ =O/m_|VEtm| O ʳ2هF Mip)1mu8sW;qSA 3 KI Kb$%)(M 7e}kg*K}2WtxM8SJ(e|yƐJG4ho mǣ._Q_QLC>=8lo|z[{уv\+ H]/_jH}ao^U7@inHӰA ICؓJ\=J֊q1ᔵqGѴR}k>)F5Vj5a^(t8StFO+WP~xkؔU~/f G~y9LVs$=6Fō|↦v#9MsI 9'6Qk4R p!ȭI &y3rZLh>32nUY" :T!iA#\M!P̀w7M8ki>zN@!B$4y&|:-J~ǶbSZ?ќԬWKJD=>` ;kˬ1*y溏k|Mi.5J5U/!] &_blUHPjev{t潭(h瑊d-hm g!Gn)K:a{.sIԔ= iϐ{ɢ'9dDTIv"Kюeo mǦ:1B7kzEz|pEMCvo+X37#MYUH҄r嚀p~U-Z~~ήZRCz֨Eςa & ̽_qvmGČY٫4~dsWoH:3oR9Dȏi>H2p٥lIP~~=vRkpoPptq1~9IRR$!}!7ӖQAYL1??p $UJioEشJNTqWާ:OwW(=sdҊ_MQfuOz'g>¦taI?N .|Ǥg<0iq:_CCKG /rדdui!eY웺,T\x"x{cԈn`r~t8m]Dž^ +u&گUZ1XeV'}q_E,47se 5 }pʆ}lGXWr/HƢ&Wn%;m.Iuy ^&h)alz [Re)9z48l4ij[۴+B)Z4s>b/2ƈi:W%|y~i[6d fLʫ(L}P?IyX"?RGQVSE_AF0DcF8m/N=z! /W'NEҐIm<(n-b مS|`U1GgHbK\)WP6`/ =s_D rxŕ ֙[߫鲕ϑQP.iL./PAf)g%` G*ͺX<7y+`$kBu#k틵WKGIA3ƪ k-{#T @]#]m@!ܢ)aѢ* Iar)m|K )T>B@/|x̛^P6mJ P9{\EYNx.-fkx~kŞه?W[IOUҜL% {GlUr=(篝EpF*kSS/NPG-θl|OIy ގUJejR[Ժ^V>nytJ0I Bݐjι__1^Oƹ7!=JB=$T 8U"h^~0ϣB85z/>kĦqlGyg%AtŞ FLgݥ.\^tuScd#>g]ڸhNPw{~yhzH@8IռD]W~p~rVX.Cy~eRKCx!a4mS2&UuMt[wGzer^}~}_4>cfT03ݻft$su֧9룄bTE5׆+Tr22U`t@9^}԰ӣTe]_\FJ"4--Cr\I d.1A>wަf(3 O8_4+^{W:rNBCe 6er6s>MCtl5_|ej0PD"9)@Ji*[onw;XCyEuhe!((N_#I!vR3]L-1un (Ҭ$8@42O]9Ky'rMh1k4pi$q84ר VvM\ 7AV O8\*;ρަhǍ2 f1aZ`X/U՜ɞ}Z}R6F}c`u)z"kF~?l$vLZo+} 82 y1SI dJ)|=J, Q˄/v577GKǻfd9Bn.t7 P 8i|A~Y>FjTa6LH ?g:z-$OC7"ͭ 0um ăX>n,E֍qESɠ68$Bu&[BPj,CV7̙+y?AKr\*YZ7&]<q{`֖ͻUed.4b˖Ov͡MnTY齦nyY UA˞Sr&D1sw[3ul.M3]d l]ǒ֚e i|_gN\cZˉˉ/xF:睥J2ulwFFܘFG >*A_ JJS5_Om Eǟ*o1`C 4g=X2Q: pmx!׳! ﮟ=`2:5bf\ڻSjUq7^ryw;זFױ !@ :'&[Жu-yTΏZȊ2 'h珛5ZSh纷1lE܍4%.Jhma^խ0N@8ψn/k|VpFMAukwM0Ac]Öm]Wq N b݃0ݹHoK+1}%/66кtqpsXe32P{O`۸%x' YyUnyxhUX|ޯuoojvTrOZ/ 6eD4#$+:M$_$2I%l%Ea_ z{};`^\ʦ8}i\IU /u07i{>Rfyxڐ;U'"ܽook2Ⱦqۊ£H쉻4c1/Dtd`=f]0.P$ \>o֯v2`\1 2@mëQk %_qh[&A=a9W mp ¤I aܹv wX^T׀Y !P_:܏f}޵n SBt}҃Zl>) [d~;Hoݍ co;OI< 7Z]jĎÐH6 +̶lXt M"Ԛ )da$o+k?R* n>;\z ,Bb9̫:ӄts4Bga }2*nÁFGlHT8ڭ4r_9`߱bM+6iZ8FZb?rB:vʜO[gg=$`xFj VZ0d5M2<2x2Kxx#%ߛ2v C1dxSbLoKA,=z\۪G={I)gcis3'Rbu*-I xEj֠yxgPCTR<oi&nP{]j.N;a@3bW=Er\3ZD 1:+uu-3}D6aU`h`W !tɷT+cxK!+-6G$;Ӷg]绿{w9ǠgH M85 O7ո>2+hq1 rZMvL-}Al=@ m_|?}~>q>F/z|4䣟,qN:ZZdl[48~ L pH{g)pZC.diG*4 si됧t[ߚ#ǤYM;BPrpn0pjMk{r!LY璺VN ?]iFIj8ˢ@M-@鶜$~'b 49vILIM2:((ёdf2 tɓ:E9>p`@c{nO|&ݣISG0iY?4eakUڰmwO"u*|2.;qOӅ+(bGewi(n^ІMwŋ$R:Αo5Swb4( _7n}Hi腾'{/E*:Ac7@i+Npic2"-OW?˖Pq@nTm ShƟ_jO:t2y)Hq'&n{9QUr}<\*z^_f#ֶmpc/}G:#=ȗH쩅T Mڀ¿eu6> S̕gOTDPh9pz^C SSz͊wS ΧG0y 6)N=S]H :\wO@)E]*?_DP]@ gKL=I'0% H_$(rݭnu4o*RƑ#Hfytʌuwaiunoǵ.&߁|G+6AHԞ:e<.%@) fZ1̢[Tn[uaLÔ=Afjf !=m?q bK},Ѩ곢@6qxVPksv*N׿0i{ArJ@s~:RRЃt9||~ T'ӈ<.&oxt~`qTdW?& qSǥj$ 44;}i%;Rzs[d=3l:!ϑߥ>&{0?(W\{P$b[H5N?UqIUn> MǙFewMC4>?=4Cϳ5yrnS4*Wx^wji5lT.ǁ+}*>/~fΒT|(>l@/{liBZq̤?UP1|b>b' 4 qWo(b\ Kk nk=T{1er#g7sSgs[3=39J"&߄sx%`i4֮4 vϑʕ;_N/a;nRS&IRggM/=IA6TuI BJrY @gs?SzALr|BZ dk5o{geMOʏ[DwuQïs}oYǙ^p$MguvInwK+؛t쿦Z!?؃G2hpDEi :挀A[ 4ҙjIMuNEso_g,ppE vlӤ.oU4ƭŦgࢸP6͊EهW9/$ (c=}y%`JSԑOhI7pq$g^,jZc'7(.LAVGU85dw`8SI7П:1X+lŒiæa|]bR)FTo_=<}5cRfUo"P*5 ~jֆRG/h͘H}}}ɖ }4q'B̄6luy߀`R3-Q-wխZk*|){{D*6"yLl !]zGGW E_ӫxFĶl鏚[~ hV)$T(!C4he X4M @;8¹1տ9JyﭢdZgXzkvo^yX;N`)(Ah+ꋔ#>~x?M8PkƊk${~& Bu |yyy~~y>O[b袭u%}iuK=6 X75zkjؓ񑓌o K/:?o '_WG!W[A6 ZOCgef_R}IdxP jtFg*:0aoُѰh8#!YTe1;|DMDv GQyPm{K'n, 5)A%=mrD+V D|UA/F0 @#f|(択"KJTz@vKj|H ojF*څܹR' Mb!PQ_m-ݭ&7~{uRMi'^ n)6ͫnʼnh@|JMXM#_P2>㤯7QPݡiroexL+g+ nΜѯ۰IZ&[:a)&ӡ&s\M,?Wi$NH9\hpM>տ[0}69=Jl̪$XA2b2i[_)"gm  ?d/Z. ;']%:f'qO%SmLaж *D%6ϤUÊfF rՔd1lљ⩻49(tR .TcƗObx(Ƌ ,YDFF3PM7H壝!Vl/咾5>#s#:LKaŭw M0+Mp,KXR+xz5 Vݽ^)Px{FIR0۶ s}h )hW;T;ˡS;-9w;DY1rGDMu>a>>aK%E3'zKp ڈ3OV H@P9:F[&Fˋ-Rbܽ~4[7"kxi(eB"k5zj՟4K<(A$d]M}Oe޲kOM6»Kc_H=7$Տ4%43/$&%*mlF_}Ih =OCK#W\1"s_q~:w/(.kQBInRܿxŰWq/?qA|F\ ~u:-?6I_/6;whxpj8Yl`Mcw0-_i.֛`8-eJa~}}9?ٙ9Fb?cxgSN8bIkWсeu|֮-gt)evggb5VK)-:3{̧*;QOe*_IP_{M@Ll~'%OEHR_7ڽOF1 niKs"e&yo}6m*RӮ_|xPRLSьn$GѻKAy5QYL-&>H0R0Kr4?)*lK0+ԀېYz o|/ɼ(*韣<1a#_x>k_n|^'*sNooSJMw%/ u?ad0㫿fG uw4ѫӈ_7@S$ȍ*(WPw-~S3?L8zH*ibU'avo(D3*kAVQFtG9)MTS96Bi^0;Y16M@ך|S8B_:{L΃FMPsܡR2VFЅ+qTIᔚ)oUY}ԏHLх_NfRnAzH=ۢ ˛M'utHaf·*b "f]Q61)x\Cd!pC3,K)'coY}[1[,ۜ] Tn7pިe]2w!#x d&-jE)2QM:HYRhY!=Xg<&n[$M$zSsn*3PNmm xoٔiVqr6lTN~)Q=H1/|I6dsdOP6D+%~>;{&MWj֞,ݥܨ.ԩӼGgE6nW>!pHt@Sel?x$tI"e=+58&i|#Z 8G0~ kf<wǨ'J9iMޤ%;f*zQE<[I 1hSV61s2/2_Aly궃pL6Is{h*@G_BєzjH4Wq5WEED`P(`sw0CD\C'I jc ƼΪv-8kѫTG닊x)\ݟ!-0" u:` bq~d|4,Ę{zJrDgAxҮq<#̓M&M{cSYSJ6* v!`7`/՟=kXNWR3q2.oz%o tKja ײ%' פ %#s Y@OvAO |cJɃBGv {nko:Ljp.툸4{9PW [&m)Ґ^E>q٠ΧDN*Lv9|r˴X"Е|J`U͡^IG8Z>#IǦ j56t]&U0RE84;d8/˗Y?_܂M6u8zMi&v͜eC1ϫoK@8$6,eKҫ_.{M}2-@yMLMSA9%Gꨭؕ>7LJXΡ GAnp])ߎtߍv(0k׋7(AD $c4iTLb5tah#H|'^2;z8#3HIQ2IDbԖ+sK6L Qj^Mth7-HOsVgAXxZ`(6UHA ͩZaʯ⒒5 r-HM r7arAm#1cN>NMM&O94O|w 1(4=_p^˴zZKwX%[!u6GtlхZTF5s,GєQɈšYY3[Lfu>/QJC%i~Ɛ u7+ ?;T8!cPp|B0(XW:4;y茔xX)GH?_|mOԒjR>נ^_}&NSQm)aK/xg{û#2_Vp$& U7`?Snn=ģd*[jrh:x#&9\*A==)KpO CI$'w۩K3H< rd HohfX],+P/wlfm Cz:k285KzhgKv^wgP"$Ԁa,4a;5qzER19dgR!sOΓ҂55#NҬ@׸ >#%hrnF2#?MP,UcHU~ro&Ă-MʴURI+0L9=C<~z']]7?>U E0Itu&E5-k~nk٢MP{<$ k ^&4u7s Nf*JAn9R:@$8:ƥX"e}qnsο?K92# ʝSP(ţGv8ɢΔCз01JxG@Ḧr?3m/{?ُ@ԓ1م0@0eqDA,ye<ʣfϳ4rMѭOw֩Qjeq~?LMC2Sx@C$OTA]ԣU6E >~d(EW\vW Ru:Ѓs3y՟s>kO:@fSLZ!=綬-Mjv6^f0GI! Qysn-I w6T#. 4&IP*" r@M~3"8 5WsMZu;uk:FVO \M[ulXP}a8|19 Fk sN"LmJoP_*m,^]b,{ճT[>Xe$_:}^K%(qcPHʝAaIn(u' ? W)SJTЃV M)sn̶Q7 &(c^X՛٪.!oAr6@yHm\T~яw*:ծ UH2M_ !44 u#IZ"CZ / f߾W e:TyhN^N,B@MtR]e*tVXw6;F(HTXqh8QUo "Wqh͊ҒSJW[X1@A6Kti{ÖMbjr5J=S OA ⳊjzcMj8\_¨~{Bll4 xW0=?u_4 fS&φـ63^Ij>y9l 2BfuK9!. Ϥ}ޟEr0vzdI{7+A+ȃw@(v@\V뾗=5H\i8YcsjEza ;:_CnL]l쁸}iD[bAMwj q66㘭]U/X5O`G\X qYs-?QZbQ\ӉU ,2Ի&lKu`\_S!Y u# 4UY h.ߩE&es=vϦfb,kQZ#dRv{W}Z.*FuhHpBy9msꩺVyOT -:h8^CMaV OꃢIsHKٮhd|*Oj:ZTa!;tH}^tk4矛e_(*?&'JTVH/AC)LU4|[!u|L-S:}qr>*P⹏զ =Չ؀:jB8n:zzzE∦j?c${q6? )஢O]ɵ}g Y-}#R=1?q`xyt?6qW\3J 'mMZ'uWܛ8g<2[ ]b]*Wɳq֧mα灂zVH[ ̆tө Sx;g{ j@$;XjN펯%שQ/1EpSVHVFs4͍ŇKQC"jMaO&?DHuc]>W& sWWno>wٯVMbbhI G$,^Y<_ٔ\ZRzhk ]؛&wzBEoǎ|碹#e%s¢z2q!?N jIhE}|{1K>no"M4XRB[[?x~u{+@1қez;9.J۴ƌ5۠G`3MԴj[\0dXOj U06^+g-̕EoRNޢI)Ϲ\p2B>?_^Ms="kU{JW惘Ŧ1PRG^v Yg\oRAj5?fAZ$a UH&-?[?^]w>uiSԩULMClHmIAK\|.^P3< ee%Z)^'Mk%zss=:Zx~=eORC`yCW6Ց%9S1bB&n 6.j{#oiWU" ?O~TZBmԲR% zl}S O{%] n(cM ) ci Qҍӹ/+Q*e RTUkjU HOi2h/ZQ ֵ4P@5t…~*>+Nxӏr[ۓ}3ƥ%=ZfG}I_frj_ |lQd HO0?IYE`-etuV7 LFti8t&򪹶A2&ЀQ/i .Od~YGJcXS?OT+E3F eX!(](4"|Ӧ)BX`sXc[͟?|ҮdyLfOcHJݭq-]- J7bȠЂt$S)*Ȟ^($O@ڿw|{6 PBhйtfwp~nq~dK?w=O*q'˩MJcO ?>x/gis_JPKHEM-TAԗD^JI}GKvKO3Fw8N rSR՞E>KޙG3 ը< Y}k@|Ꞣ)Ijh\U i48 =c'OU%ŦO([3 <{*kM4X^[P MPOr?X~Ceg0DzHR ĩ:x>KgHGI~@lr&:Lab]OMj0 $BeZiC_qVv -7T{@bku~]e+i拀l &XT1 ;?:z҆V$Mʅ@EiԹ:eu1CG!/?Xs߿ds "RbǷ7lx軄~m6 )yzEA6کm+jEHҺej Ms;egp@OQH #p~M8W8nhWH JRufM(jKOQ *)G͔ %ԫ&S؇p 9V DPS44*@C.6ʆxHBIïZ$WG*"PU+x\y !θzRPuܛz*~ĞX4WFb<5GXKժM11_TX'DqT۫ ˎ d,TNɊU%蓯1BEe8:y6+1H@Bz94zhMp6e,;@SJYIGjM.;`;UӴQ%5pY qoAKooG9{m+1 >PO(."ҸYBjUշGv7,#MEjP{V"R`"wy5`^9)&Uϥc$4h*a=%$Qi*x)=ڠTӰ"O$qxJjDOHu Nzr%Qt)gS %l]Ŋf`Vmȴ:CلDd晴Som? Pc9+V;ɨ/^Iun[{bA*0/8|n4Xpk @" zOd#*5MPeZ˔Z4 oEU˯k}>I hLJWMj_-@IT(_AWVa:`)R~ҐgMsCQ VjDG|/'4Ƒw>*ZBj_Qcƞ1#r۪J֤HLhe'5a=D5dTS@aъ*)HdRj)h *L\SZ}f WtuZrjjJ VʃO;@o̪=iec|(ܓWR%_%4[ H#&ڦJb仔s驖@'_xK -dE{0$jsb.UD>!IR@>!)T!i–Lb+~UL B- x|XaX_(/"jM a~zrg/G8&CuᏀ\KQ]SdZtS }[}Q )oS#t}(}T[/x눚ԓj@h*f"mlGHhLI:(Op~߆Y}'?}t#P}Es*=>HB a: HO /~['U Ȓ'ԺY;_M?)H) ^D& EmLɓՔJS4G })|r~ /*-i͊OBV!.*~u),ZNC⿚z>g۴䗀"+z"Y)~AňӖ$BQ2+`$gDJH țT7A-2ghMt5т!:]tx^”ICH@GpQ(])NH 2U͚-cmݭR5c^}h0嵸 çRBT [tLP'6-?$zm:񯿴B TuA@Йr }%mn=̈́$\ZJQ6VSijB it"M7Mnս OkJ6R IѕRJ)4s͍}4"_׾MFӁ;UB9kPEiSӄY[`I1 . I-͢d{b 4>/U_)Zާs\ܰ38zuy8}{<4y=(i!PKּ>LKZ(s#n$ie۲?m h\iCRv(?BY?F}z{%Z}?oHW~ew;dC&lT`:u"-EhmQCB@ɨI->iSZ ߢ'n7L9E&[:cH+)I;>^0u#5!hHyjwE/zhDI.?(=9kRDyKLq; T9's7hc{Ɨ MP]Pi5ҡ.|JOy+4z& y *?]^R3Tt:^%_jL.'đWiʤZR(Dsi ķ?f`x( CI)*^ԩ/GP9rJ5* )*NFi\4ɩլgr{[l\ISW^3vʳPɮ9x!VYt#5!=ߓ}eПJ6OK.T(4 AB+C\?mRcUJIsVƠ==<6S~Ns "*_UMmL2k$GeQNE$HQytG s(%]=ޱrJԋ^G},}x$l!麸 VwfR[?37djL7 B2mkxq@x-c`6#ϓYW, hGo]"e˷bg-Hd[’>Oy *;29e|OP6|V.kӥ PF~Vj]XVMOԨR0>d.$RI5ǽڝUK)렟\a$YȞ?fAlͪoU)Os]m *K}P kZ:\"XCD!x ä:S{pgWU$ZLPD7Ao'I5m}•[=  r.scگIZSsRUQV eRN5߷MMhÖ xfj h,bJ};M546{}JACJ=+Ԟ|ύڦ7WX[I?9j{O{`:º* $ċY.]9REͦ gC6ztjuUAT E2yYu&j6RLmiAU8Cĉ{zXtgzX_?T |'Y䥛ԎWԐdFruKPA=$KKY uEU7Ҡl# MZ$b:|lQ4][Lv]Qm(׏2Y@4H YK\u@@ܮԖLmS l䁠'R$`þNQ }uƬVD]D`A]*vIC]5@ID P5QUjlXpuq*F:}4(֓Ч@E]8WT 0[tieD^ _/s[HhƲZ#\)S[ xNL_<$Y_W,K/@ T{W(G+ V~PtBI}z?=5Ff*ުRDF Hy\J4zqq䭾 Q!o-Г̍Z.AUyO$d 㿕. P"iIrU7o~=*Ru5]2+2څBq6H"z|LJ=Fz MXTB+G{KqzHV&?s]\z6i oŖyBwE zU#Z &nK+X4)& @bOYtЃݫJJvGS*W {ac_C`Sj~%ܠM jR s&Nm@y{8ϣLLoҨeZBpꆪg((*GئMV-[?lʒ>^3v/DҸԆcr)J ĬgoDJ})9̕_"qr+dISG":U|rgԭ\*"{,(A'*B`/i4÷Ot@V_"Bmw|u Vu jø/O_3,nS^ln\o7Qpd"эN`1teɚO?^':(rh+j +mVe s{|Wo-bةdVJ! iinxv7U$ՎtJd%lEW ub- ^ ŕ$UX41_ЅhB[OT's0 HwMXJtu?۞ʓ P ,@}2MVq_r8=)FPq)Rm~:WW04DkwVCY׼"xc$Sڕx5EWv~1D`})q]- aUTpT c-@\CMܨ_:{Ĭ}Q7/U8T^ \SI|Fu )3o }io^B+J]ӻ|ZZ݈0DD_MaRܦJ ZY50U;pz FIUJ䕂c;|?C+AlU* (8]a?\gF=iӮGEL]*"<d:֯[}O;{(%Zs٪-:pfg RX7Uǣk%ŻIݭ %s! UXN\'ѥ0뷳۽:}.gY1T3#JY{*V09 ӓSo 4*jZJ~ajUC c `%HE[n3*~Z/ʱ HW@s1]>}w /)d H 1\jjUݨ;S)U2Ẍq 4*m>[`xzd[ I0A\ c8ݨ;PK<(.ީ[2~hA9itr=C?{c]gq{5R1|^ ~!/O󌿾VR/a-OoO}َAZOьj&, VIaЙ=(!!A#%؎IЄQr NIwh_Lc1~2sEqG+zF]N/p#f\W~JY"BihcwMP|Ss޷ӈl*$*J2j%: wGt{P)*){5#'Pqޞs|@C_̨T{uN=| / h٧jU ;mNޙ{CY%(ӑ\GE* vUj åDU-ׁ.!ۧ^%b OHTVDA(hTARƓ<ߪDS֑BU;M]FgoGxEQ _P%_틋u͚if-%`%6ϧ`$QQjP =V&Q*RzU7k$z jI]ZE( )*ׁ,4aaCPohKI!iP ;VAzSQIӦg&N]ޣ5cDicVS귕]۔ԩxUB% O/ah:GɈ %ܶZ3S7t_T<)MZ)OpZ*P]诼 dٯ%K/K'̀nR~_!YA@o@l ҆16t {*+pw!ɘG_5/5nUU$=byZ.pfu)d Z*}P?zq'TȮu/T:B gE5~IʍtJ$6^NjW-QL3a˦_ %~-S4kRU ėo۰ED(((]6eZx njmOJJCtE&PTNhw0o!KGţWMC:EOWh GUUXE }=;j`S5u|!)BV$=e{k(YÔ,s]4ї_z:5=uS]PlRG$:PIO3ns~Ojӧ!V^t"Hc?`5z"w[Ԧ{5'?`d]eJ+!Smc/'Nǻ#nQ*{r%FHFW1*zy9tOxX:*~*}ީާ[vCR\tS;jz5eO4~,'^(B>biRl:cj3 A2~eBXc҄痽hR%74|yӉxq!u 5lEyEOf4XЬI?Uc\ƨt۟*( 1ޝTVMٿ +f=&\K.+S~X_\PzJ4ju1MkxH4VVȢ(7a,pFܱJP]aUheBFSѕSſgzN`?c%x}(2&J9 6K/xi(U'h:1mZĪ$sN'_u=Sy9n@tS.:ZϤgV&MfK?BH|lnXSskL bj})% LcrV0<7LO:$F*iQbJe|ďqJcJ:孯wAYVIWګHV ԱU<+ju \U8J҄&Q*%VQU*MiX!qYGzWI$zPƯue'Rb{sd"n Qk((-يCnŏ)piү# V_QXr! viZ;* k ZR% `S1&_tpߏA_>>rGϤ?")PZu+UIﳺS^S;UTttܱXC:Oo[2?q..*oyc$<UKZD9Tq*PU` Pzʫ ZZ$}ݾ2^4MA TWpV]GR[5BQ)`w_Kj^<ْR_ܧ \&z0k@Myui,|m[_A?Eǟ^Fʫv{7UrFPbQPFvn֯ϬRʂ?}KYc i \1j _| Tt=zO >jJLC@TʕpY\,ɱjH GhT%H.]U 15iSː"Y2e uoS䓨 )gCeH @O~AӨ &{er9œob|DT:ĭT!j/|8aRHuJm:.&4?O]/r u 59JLjWҞ5̮<:&T2L[;qA|IeI߆)~(\QN5Νwuҭ[=t_fPT&*NQtudϷ[5U-4F|Mq]iR|iC}oj6jYtJ^S[=񨶛`Ϯciz*٪}DlBݳ@?WM$E1arV1+ԑ>g}6kCteatK=MtLvU#V.H̠*Fw5+бxgU$w-/T˞_v_U8^^K/OX&ЮDeT+yWRΏ!Ĩ8ǂ:9)9#)TE⋔*]1*%T y R<Ÿ B.GO[|Ɠ?,.PvZD*zМpѾ 厰^cG|V ULXCsr^g_I43 :I@k=9Ç˾E3-jP'S}}uIZ_6>M)8MK8J)e"qJ)1:"X;<1wci J:h+[0Q+%*T96h7ӲDOcO@tRI j>vCm5]MGK67kW6M022_UnS^a6-*cd*ДxS eJ5PIESw)[xOaS]|p GygͼŢ+,&s4/A,;ӓ"XQ9XECśKM7Y8+& c_SIQSe`o$k$ uߔaOKց׽l;UDiq_cƼS% V3Wd6pA6X,hPWvݎ]Zp1Ub<|[{S5jZu`n6\{^(VTunTMj+C?̺+Q)(\kY6M{,ќ2榕7YrKzWv-^47Bm0]xmšo$)l T `jNmZ'9jMJ`@]ws |bH}tR:e<82G r9ZLL .ַKȰҬ:[vV{;^>Bq J`{s#ƉQk-oC?quXuC#OO'vC7^;#B]QPĥTwo:P( jm{:l`VUw0jcVw]!OWض5v ܪg]?DŪB.jlA~ SR>'!#jD5˰ȠKM ,@*<{-{\mű;V&rvh:0r3&di1 3C^ȩ?0/5\3Dl`~ğ5^qYbGTiғA1c?_ߟ.pX4L%KuV .?E0Mx3]`ߒ```2̳Y| tc/ Xs]@C5yۛqZ-3HNIȷGQϠ&fx&kV9$ )/Ҙ?>s;uNʝ`$ԱС8CYvv;Mh|_R2j%]٦s q|-Ͳo^[%9u낻y Wo,?Y+itGbI95][)D/1'0y4/<f"8}yA ^C+&M Of 2z_GxheLCT0)pwԜ,LI0xIbW*eq $|i"sG750.I_A(JB:S_3ۙ삌{9"]}8 4(uu>NDׯ =ɾ NniGaxY*IcP?gq>hl^^ǟuLǯ-Œbx[0GO,BfT]yM;@rU.5y;4aWq߼?{ ٙz'z70?"qPJMHoL[zRxRu`̭8:LSC[RߖfZoڢ |ϓ*z:PagzTg_ϳ^U_ů-$# b;k1|O=20( \0sv7>'׾ #xE`ώŴcG\'Oz^B|oz= TO6Gr2u5*4BA{!N(M$ck5tQO_"q]j?o6"k>N_`0SeԍXeܲA}Of ro{\d)v5!˕dp$4X̳8]6{{zQ/mK JOYrdœg~&Xj˂Mڳ&B|17y~7Ѽ r_!'6$.i0O~ktlOMrH!%J5?!"\J;pUn Ndl"N;Mh7L]DOVrWw\4!7ҲpKrޖs0r}U?t xlF~34nJ`!?{rvjㅳ4:PS9Or'gT:rKD9E}(UU&6܍1)BOƦlo_J_K;dNHveG29ȝN򟯙fI!A:98u?}M4nF"Ůԥ38IyyޞusjW/ҹ>ä6I$Ot~;;>Q!8KCA2^փEdO[i+|WwJ< &Q]?<3d~Wm_Z_IK/Fnڢ,l27 (Gz\fUWB>genometools-1.5.1/testdata/example_1.sorted.bam000066400000000000000000003671671211610345200215340ustar00rootroot00000000000000BC4sred& fBCu68Lj6t6&BCH iYX]՗Kw}ÿm@k q $zp0,bbN zS2(('˺'D4[B\D1ee\L f7稹w9Ly\[OV?Ѭ7gx6yRiw&[]rt !廈$yꍏz쉧ze_Xeʚp%H^f y3|2x:.,,WG_@$&ϊ"<΋x/X&oXKsb=;Χs3G qsWHB&҅x 0 y_l>N^_r}ެ;!<ÝPnJ TT({B1 7*MګsWHRRJͩra *gǽxޛ· Gh@NWӦʯ){$>ӸFv1<Ce 8Uާ@ɞs@Q CaɐAiT"!  >z/Gs! e e _.;" HM,@HG*N}AqDѓ䏹7>@ل s]^.g/Oi{]''+}K?sR%.1()nEbX/ ++bR3Z," HY",Fxsm! #"d xTDy;Er('GEeMPbꧪ?Gqw am@Y]@$.AeqM,'pn@1Rq{-Υ~D ;zь8$A7X[F8>"ʲ !}'E]?X{gtz8L\SVs&ғD''QrԣATb2RU,і rk#%_R>gP|*HM蹔(t,`j$DIr59M/I,< ~ pZz`}申Ee/״K x%(8_&N[ sD|~Eϧ;FG}i0)u>'!BZ\굺"КS"'I ~C-|gSHgu^1%WC0ݧ|'~w`s Ki\l*S9s);(K)9u&#Y6@iZ}#@!z> wɐAri*<;,bQǃ(>ƨ͞}cno~^z 8g=n0٩rA|/G:lF{u!GK.ӉIGKs8|QGtt9pF MJQ6|2Y*2àrrXD1 *.%P&wT+kQ~PȺ?!K! |½xȲ}ƽ0 BrnnOvpp$1_+HL>|fEs}Tvg ⬭EOqiHwӃ: }QERqnE`z j&k*vwmR,& , Ãԇ3e0 >;#(%"Cb#B_X,v ,_?-} ƭh&AUz)PcN@( 1a_Fx X"<4 p@ ^*DM0;;ur!{as=+"ς\  GuٹuTI9%{N~ U|)@2oHuu888`. Og'IIʹ,O;Ji'}0BrHsM_S)9@ ugJ,N d>θ7?h2`t)q݄ڠ Ô|w:K剰|X" Ex 5&b)5I(QN}~|NLXKNrtjⳛ\5iw)k*Oy#a揤"N/.]DTel"Kqq!(BR( [ɷadf'GEϦq`,?)8"xao>d]uE?i=!)#r1OU, 0>:CBS8aE%h!ro ו!U;~T}xk?W.onrՎ˛*8$/ ƵG(/Z@!uxL/48ug߯rrND|rK?BC'yпɪ3?_y @ @ 1߫~_'߮7KK44’:;`ǟ ~;:fhb$K* $Fj ٰr)Wn z4{՛ aa f0ML/VRO7Ud@`Ti| zIr,Wԣ1CH!l>+B#:$/(G~&) $Td7*]"~q|=0~ROgѾM".K|7K7 ,sDgNgB>S&ŕ2[8̳īх*@^R4RI"`^e"ay]}3C `@ez@q߭'/aB{_Ms'kʾ{5ڷ*|v*`Tu4ІT@y?cYLsin^#%G7cfTECA3^:#,V&M=B<uHP~ ioD]Gf<2TT"dfHɎ9:h(R' v&Uo`hFA7|ul/.O+(; ikFN7m=!!x>jBiYFw iuhR; vkA"\4:-s4K)OgҦ auLbpY#XG8`يM-$Pgu8ܵ[4^#j:K;r!#FG0rc$ٓRYʩ7ܣQݣgd:Ȃ7Gp>c gfuq!kF>X˛1`zGhwLt e1+1 3YQ= X~0O0^l.%,^gĔJ!]b]Mʶ`qKY(d)ߑz/m?X1/U.D#ty)@\ư)͖H4͢u<㖿ۥY4 =32$JGܼL MZq,O[eH vqeBoȴNꊧq+%d܅۰| pˤZ}I|m[frOb&߹U^qk\~wC$ s^SDZ2H} -#XA-2. >1ћu_@N] Kʩ)2L6YF,`*_|_ܑ΃ 4[4L[(,g< O%ѩMsV9[, ³v{}nֱ1aWyQyш->ywWNK),9Gݽ^#CG8nfMS ˁ#>^u[K>(kpҝ?7/TlAair(jP@eEY#×PښU-qʫZ0ZuܝZr0?(FX]`f'X0·3نǷ\i+Ç8M(L=Ů{KN `)ZA'MdDk6V7 y 7X4 5|L 4l+DIMPL[K1^r9LNd*ԧVjO \K,%IV8)ZacE)JnXu\5&* Rg"DA ),Ê=`c 1GG4eź0b.}ѡ2/jz*|;ކtJ%h>0z`lO];1a[̽sKVxgq>m [N%Q11R%bKDp4,CoB /sF58s*QN3'hlh*ѼdeuEEdᎇG*yi+ߡxos[z؇zRZWP߮`ɟdJEԠv{LκVhVk,}Ȱ`_ej1ޭ⩄uʟY,ٛNh^#kZ+iGu#jwh<,5܈vF}Ƶ&Ӗיv+# Sj!m?ew _7(yB"JR?8Ud1}xQi"! Qs:q fp NpxBYI=oy4Έ4?+,ALlk 3{"&_^q|DˑҖ;`lįU\g+L+(t ){zdv$)Č[OF>9-|2dZt0t%4XJF̛m0c{9OyF!`a_\?߭z-}ts'423- -_zaIߪEl piܦ|mFitPjf]5b70.o;Yd7vkd/}DmC!=,RzMS5 HnM״ݖ$&vWexX5)Cx^uamQelvVq$߯htlJKZ.@v,j-FRK@$ɰ{kP`2e[+Va8a,Ldߧ}싍!a]=͔&UߌR,CnFM{GyԴw{`BtvP iKF!f9rO~159fAL*"S(8=ap.}$`hQ&`~U}ˎpBK9T$OpHDc)_v9m{ؓ&eXڨ\I`4i6c-K[,eolx3h!LUH]F~I$[s񀢗QJ} 7¹hHRG2ТmWr P0˚hacZ&nUq"f*ba t>Z`υmUJDlzJ8Z3 OY8c%,M 7&gdJ fqЋ6e-Y|Wי,'@0JkVi3 I8<(RFLc|r],d!0[ ɓ˽W[N,kRӤTH%EƤ]*sU~]zQ(F=viu'c`LrKMrey0`8Ǔ|-6xʼ"gcM#I]+94W8;4xg{~<z,InRp`!共sPA cW[e zPsWO3Oj, >P(A8pXӰo%_n9&8ń]4 r,}.9"wN=2s;'&,k~:؏\Jc" hB#T7Ew"Wi!}|b%TbYWF_x)BooZ9zn]ҷi>^另 -ssy}-`Rps`(SM ʗd9r` 6QtG˶WdҬԏv9^V$"#V2Xo1G!%툈g~}WʓłoH-ۘPP$̂,s`1ި\:rXXVtv0ޞg>UQr @;ڧMԡ8g`DLmOb\qF+ l=@CnS p+&5<%\1*N4o9F4B K}-{,^U:@ym/93җ#?e𮜈gq{(,勲Dd-qcLxܧyK OzWi-$pXuYf^cy>GT7oSfez6l gFvX+=m L+,8j*U^.u%].[L'w`3k]+FX0&nS#҄\E)ҋvs xAKU0t[{U*cMq:QC2JhV|xWȌ!M,-af|.J.r~ZIu9 9T4[/H/թ֩6 >sτJTaFog8lA;NuNe|Lup u/1-"@IpD7-V:ܮYI%\Q|Hp !sq)P̜kqD>㰫)qBAy(%)ɓ;@y z/b茘-poRf%dwZp{ekX:զTeQe}·694K(1~^Ab^\0w!9CBmś`~+b6gTVc1+B]IR!-XaXL`oT ?͸[]ApW5BIa>͐"eQ7*G =FiXڀ)΄^DN"]gV|3@cE tb+"\B2 >a8~DDhBe2 /U7#;t漃}oD!ʘ-[MaDl6lS~Lt?ıE,͚nڄrߧIq:ύ#)ީv:U o`Z{֮.'$Ǭ$*+AEP!L_H%Rsrzi?$Qr!+Uı"rmꪼ M+G[n_t zFE;E(.L w/~{&OJdyJi05]w [MF/7뎵t)I#I7EtT[ÿ ŞZޤ[C>^ |dj:*m:zʤNpn`o6 'v<8Ra Pё'Y15"0`iSҨDE>ƀF)Љ-J+=NRa˼ d緰-IH6u~GUI'W4Y5xpfCXMsg'k,Z!Es| {5e;2FcMZӈ#h@s +N6HrT4=S}< ZJ1O'©ˎr2h>M=c\lw2:LNbM5,e@βoń7NrlL67X.3K@nB;h$ϘNik<XЧ*[K@)X2:J.U*Zh]:sCgҥI !ZVB;>]*c&0`da-}W~726/6J} j&cMos e37i]S,r pe/NxmN nGSwK3dOG q)*Ժa[ ^.[2-&Tͥ`]so1Awt\]CIeoA9M9{Ik҄ j )ap?+hL]Cw4[ XPaGa\A\#yʢK'e QaA͑XVmx "4r];UmSLl|mU֟pA*-шނJR"&`L&k8վKO>8ķ8\Y0a 65p~đGAYp6aF#(ÅT9l۪\t?tε7#-do9rO_)JnSŋ3d KX,l+c--_TM)%}tDtndz: K)C '=Tr n,zW87_ yh)ϒq_a#֍E'J6E?PtOH߅ٌX߂5jӤ Ab*c-z}q`txL &YNafs^FI 0>6Β;)),[EaQs3!QJ0?$=l1e0=,םvtZ/GIHuܡe_x^ȗH$Ꮟv"&{.?wԓ"Qe/Pfw+0WC/CCơ!i1]< R" {/$Em#[II=Ғ @0==:J} ^JGbS q\YcA;؄#[bGU6 (5bƋ2G5IQ;,n~u?4^r6N.__)#zԧbX4'R_%KrmjE,ɥBev9O2 !RG-~ђ>SbC U;Z.oWW*\ۦ7ڞNϛ~$ 8ܳtNnnNys1 pIrq?H?Zt`ȠH:ru7'w^GPqCm7kYh#\!iuC.Nye*3mc,N1dKrL؈݂1h#:6cv gt nj7S['unߩOfu0.I=?ܚs? ݏmR/#-i:jSO9Wkx1S|deq]tHlӎs%#+VL NEsH, o(S6$+Y}]ɺ^Vޣ x8S=l,w[QDO8R8[t;؅1I31X+tSKPb?b:|y;vۥM`W7͜g wRF?9;P|-N6AH9 wAm;XaCYfw9LN/ȿ*PXwe)uLN~TP#ف~תgf?v(WY:[ԺEZQVfK6pN.;tLBZPߞ.ajtkܓZTJ*6A?ΊMy\rOP}8#8s dY +xrZ=I&8piͫ2F"}ʯ9o Y:^gaI:UV"˜i307X>X'A6;K;rk|܆wQp .+{2->4f&7-KP3 >3Fi3) s꧄ج:lg>;Ԗ.nq8Fiv6]E (适Q)un1r7q/ű8|9a>By-Xig4hKtaEW^9Fa;<#-Z[ٱe  6d6!5\D-+sd^GQ&ý0.FfwcxZűgH+|5Пsh\p'fٙ۹y,5Пs~ x|C Пxش`HN( ,,Us& F/$D!9!A-Z\YeUk^OSrHIPS&inP1*[(r[vq`ɇd:;( ox.tVN.SLŮ=:Ao43bY=o+oߔyIMsg[c؛teݑcInZ U-s[<*3R $%kKdu#".pT)?wx+ ,4V9 ?j{meIwfj7ԍ/܊%?ޜo;R_UG'lH 3>qd C;m6E ޡlVUIiDC,&Sy]s.,We eC1,2:a+kmb/8|H ⍌}l+_>;ܔS7g&y,b$`)o(4 *SI- MY9J5G!NrF 6K>\-GB~ N:fjD "V1Y꽬8|9lr-fo3Yscb]? ~.Ӽ 4YW :ϧ|#czx2s5_wD8)ď5䘛4Ń9 9'G>VQ:hsǬfǓI6zšapE27bX4˨v YoϪ}.ZK8DyMXC[{ KJpS/&Y"-m+WdMbc^:dY k%Cw`hUn}=pIɳI3 _!D/:BwwIf4ZG8=p.K؛̴LA: -,${غA?vM#=nhu]IK, 8*Hh17Bٓ,A-,rTh_k *,8&`يLFD#Xu@ 3a-1,8_1h֜.situ?V-p0x9/*,$hF[ftytuŻEbZqLx0KB P -'{/J)Y]QCN&FmM}3_QaR*4,oE"eP^}Ӎr-:r\G) 떖j+;nj.?^-7!x8!hC+7*rd0)`goU ͒,&Nsm.Vl_q`DB|UѠCژKwzTX`:}$Y[t :QTm[%/Yhn@*ꥏBqE[&OoM3 7$t5I:: ̫ncG]^z}g}`ngW9Rǚ՘gԹJ2Pe@1E'i=oXAG#ӺcRJ3d:6w7!#@-9ZS튥4e}n누#ӨIQόXqyfl%sٱ?\7j,;45v1(n΁ql 6synBk(q[A"=g!K+~+sH$ءC&*o/=*gZ0`>+ ?0Aegy;دgRO о 䛯ҍӧjo5f˨pi a!2:jV֋)PTe#`jDc(نQ}6wܹS?z=\\4QoArR ~jFȧk%/1)yoԉClUn݄PN2V ӮIYqjw:󜔵7D[\}a qEܢ`:n| ^1w*yI F'Z+ms;K# Y休\#'=xOҟNɵxo1^2ZE,CVAHuq@`0s"(wvw'yAAٟF]1̂}qWm8W\ǻ"sZ%IٖvN7@"S0]%e!u%hX3)\R9sη" 62t`Olc492/T˱Wbf)88pmBKRN{_倜AG=ZڟB'-sc^I ;7Bi?Ok,X| h M( XrX]e#KKhp,odQ >,|FE>CZ,=a5X$m¯Ln#E)I{]A\JSK R7VՎkI:FVHCC5nXF*N :/cu=]ШXI!ZAQ jMq,meߴ;_ d~w R F 97:ڊS߅,2 A`u}#r={4IvNsѢiacUFJ~U8<\P6n^Fhn- !BS{ҷUZtF2ТsӦ4YA q obf mE,$&aqSe[/i߄"= 0㽓zݧUL&{8a3j|oe K}f縨׹DJg掲PYHϑ'̷ROI `p:l ,K{ѷHEhub-ҹ`1 e.}:^oG.Vأa=,Y1Y4;/ʅA'͓FjrIC:2ܵzɔ켕yP6V$I8+CvBCDG} tiYfu*uTR+p`ӐhHiH78AqD НhquPvA(AD\paPQ[ѱ}mg:{^aR>+{ Jܺ~wu0yowܛ&.9<= nxvmgnWIEVESpKMԧRynrQʝ?°\{ `Ѭ7{|Lc %4N;ET'F-H}gA*h\@ff1ܯf 2@Z^E)!OY{(4x>z˿@m :pYIgz8S ChZF9T$5,СAhZR|0ߛ\ $HE^4l,}tǂrC:{om?Y>1kux\R!(A 8Vn3X#˭wSh~|2 @PFi|1CX "AdymjX@t{ |:0=*fPNz "yV /"XdE%ʽ0-EッŸgpP?=8O/#2-w)HLÍX0yr@ÜU@D.ůa)^z A$`v$OK=t]Y|s*!h"]g\@+hP\ f cn$+b|j?ɡHd* >wS'Kp7)|644mq(>wI+4'ԃi08`zvQK -ail>wWw>ؼ2C&8.z !SA6G[v]o1<. Z.aa,4#:ժ|,Q;T7,5/uX_TH(#̼ ⁴Ȳg? {G!e*#5ŒቜŰiET!bΠhkޮsdR,_oF5.ҸP,aqYiwm&9?~Fou;Jr#CҞZh=&1'>>Wiѽt0q O刉)Pn_ڄAuܐ9O.ws4.=LK̍ԸD9ڧR&Wا:YGP)S =h}x$g4zt7,f 37t @Ǖ;xcX6*5.$MZQMF`rBfnJ~1%d;:w"ύ =t2B+4_Go=o]dϲ=3r|Yg8RIӒ(SвL0  .Z(e]l,(}h),e2G#/#"ҢPPf D>ؖ?r@1YG*e:+\a߃UI$M[iQt\Sgy3{ =qi0): "}0 pgF03,yiˑYrMHIGqyNNPwrIKH[gEZf2)\ёAIQh{mﵪF\ ´頲b Dd$u!ҙ`4=¨E'`\(U9;;X-QN͵,RK0VNDRpY, z< HJ,W:Q&vF2 aȄ& )X*O!yIS)c0֐Ӭ{)"&Hjܹ,4C2aDᔡI/}v:JbTD@X;AEAQhG{j_vؕ?2[C͇}6. MҩQD2"\CTԪpNa` ҴF7VJ52kqȻL42ϸ`Reg LKžA4(R `ese~^ Kd-]@<ĺ8{ fQ2(3E9*u[:b,/0,wb{ ,e_},)1 z +g$ rRJ^E/ח/tީrYbuvow6?3M0Oٺo(m507MB%u{[Jk5J'Dz @dǒa_^HK$ lhDRB5s@QYGcԋ.*}7ih5'iD|%d0A͆H7skg+H8IJR`[ci$Ͳ8!-I}`A(R`cq{/|hd>I0 8)&dx{#qPWϧOK,$杖os3Ԁ%XKW6M_vJ|Ñ!+e@ث55r,>, {^x6/WTѨ^/r`xԯJy*)]44&S=QbaɲxeQ2G}#Ep@L2a`*[2bWzD<$Kh9a=oLmCPhP!^%օd>z ò{.}bwNZt~h,zNWw[X\Յ`{h4[3nmWf'eA?4#I I]T ȋ4~eK:p84Y4oE#П]P H2}k(rJ)rxxrҤfZE.Iz Q׻KAbf?HnT]ztxr*RpVXլE='o+J'(SWMd\E*rL4dqƢԑF_^ ea_^0'"_&9d ~"$w6%F~ˀhl`yxX@H*&H*/^sWŻHHg_!&@D z˛g/*JokTY?sډ̥؜[Ӽ`13t)4FAhIf0q;IT" ԳSXG9{oyopplr<ټFb47 r}F)p(}jeK ,XcbUbVdI,S%WIh>r6eE Lvi.^WWW GMba{2jf<?˳;#xd˾Jg*РLxã)Ivrz}u^_×FmcQ,\xkCx !d 1 J! yؗ S :fQ mJu2 YHfe 1D,Tr8&D]o6z=xLXb[9\U?K,І{l34u?U:ԙm?F΀XZi+yN(8{=RQ"b?{"MAӆi0 p+׃E3?`F#:]p0c_&`cq0 ?iuyqT^?&+}\p}Diϒ_UX4z#?*5/G 7>$DkV QD0Dr_T)< \jsNsDca$Zh$$H@HhCr>>;nDaI,dNjtJdͬhVjd`h®l`d3AFyp:;OueSS̹Ύxt7+䙲ÚPE/'GM9O 7`,QA`ZIO8Hwnu<;b 'bewҩ#kHTԢ(cyMbFB }cCFN[YFj YL -j{ڄ:(G?ۮ$hƢ2>f~Ac1d07&A-mӱ,s4"o61͆A$ccSBouO) "{ة|Aݽ@wjٳcJJÊ" 4ڕ;tc{ޭ\G hp%YE~OK[<:N=Rk*C7қLXFc>a0 $&ű&e8GG}>fd"̲ĨX?Arn:S%gH8$smᰌ] SrWK*h6OPѬ]L(U#&|ofc: txN=$Y(5WT+K:osd_tl\Njn fg[PNYFVZlp(o[ $&4b$eܢ9ӯli _}$E6#3KholANE`0.n{áCQE|``2Zo|-㍑m(R/ Bfȩ>`g[JERס4Έ2 AJH`'IIAZjy=_]PeJЭ-(Dy|0K~ }vLRO$'YFSas+mq-d,] NsKoq||Ù[}>M /D^G$GвXP8SrTbIse8Bp^x˸Ļ(MIA}*QnigĈPU7 zl)l &RbOCSXJXL1=.y嫪l/0p|ʠȎnH1Q"EF6JXeWTKcɁj0;IηTP_|jM5>,w*XL B[/ \qؙ6 uYoA}Kv-i)ts peP(V)Ts)+TF= x6TviB2Mj#۸~H />d#L f6kE_wx%Y?ƫfݷ C݃rX4I! "BV"l5](.k\XbP$dg(|EGE*[VXʖ+4+(L*(aw߷5%8QBhTv h{I vImK Iy! D SXb k:+A%Dsbk^9>puƱ<\q"#Jn].c=X0r"z>_EQ}t3p-C[S~Љ;!sgH,(dw(#|b+_3m%*Kl/130DH `MqMZlVnVَ.e같oѨp_vBM+nI(YbU^#DN>s3 !I6@.ɬ7)Yps$˗.=?YCXvηb0fsrt2 ̟8/:nx̺L|$L:LndI[/LtmG&|WK7Hta J6/6)T_b"3w3,E%ƅh_-W+ew)sST$C݃}Uf7F\ 1VbmCx} J<]vѼb_?qфr%1f 'w5e#g⛥xHǸUQ,VQZ(|nW;i1=1@}8gAv$#o)`_Bݩ1ܾHŨ<$>Csؕ;{Qc3{ϵ%O3A",/DɞʐfMgLTtI9aPƾ jŦPZ5A'qՉ SS4q”l\A"5<8,4gyi;(ڄ[ AYx**[Ez߅2c؄gG07ƥ%pncDQPsME`ѾL/$@{H$w,Փ;6rc'zTz j t:&Tf1ڿ:B_q 300mHwIiI|{֣ :-G.G"?dfn>ʹ<_h,]e 8肱C}>ƒ^\QCxG?IzR36(K"C`l.-6q-^ip,I3]IKakf噤yvm쇀.Fި_mZ͢^j&d2:+kD*7'%CWB}U`gc@;eG1.M ˏjo6-\LOj#&G fJ<[<;x)Min>$$fLʼnu54Du M=&idOGs Cm +U=YC4P`OD|d=_ҲZs{(sֺk;WZg(7.,[AScLNИ(?~%Čnj7=hPrX R,[Nj} njwX(hWnꂒ^?C~?l1E(u}<\bH/0d[ߨy,E&+Ǟv\FN}|ފ6Hxϻ uRmPHcѦCnqMʸ7N`1rz\mY:Rq_f,DqMMVS J* \ XqS"}=;;M Va㼆!|HuY?-DމCе͍\yP":Q7SSi/A.'۸E-h2ʌ),.mZZejU4,*l3n0G)5!?@1(ܧg0v'`q U~"o_ n}|-&NqBCa\R} (@ٹsE]oFDJtqԒYQ{{`$kh|^bumҷ"OԊMzXH}Nj[0y瞝&iE4ayE/Kt3/Hғd!$av=#@SCĶ/UN"*-J"Pzaw,Y@d^jZQgQ;,*S-~ՀN2ҁ] RO/~~UI@_M`.]ٛM&ZղܣxUqxyto 7ˆZ}Y!CC'{\)I ݰĝ<*gڌH"kɊ< v֛Z\Y/έ DOHǡ| p_iҽ(nChKgYk Zך+RC`# 1rwx?q"1ͮeYy3+#N~槥srgxtr\<yL.[{78YlK}opq'[*^-e7"zBM Iyz GTAΌ$ɶ/㑀j\bkewj!NE#iTI9OU"P>2g!2_+O1ⲨJrClU Ixn8a =|J,ħ`ryd7!}1ŌЫzcJ.- 7`1YdY,lm\bz#sm,s Dyt?cm55MW)&}V1EdBwyZ{zr(A3ź|Pp2߮<ýμnwd[Ԯ:ǖn~@OVPsϘe]Yf##ꪎ]AV|Lʃgj';wQQ;قe1=TLa{EeR!nq wY[ zDQڦq4 M,jxbnSU@@x1&9Lb{#Fu^6JAEsi_sKXZ.{++Yktt6=fO(siw?;&!ޅ3UM8ƣU^!q&L(K˛H9(7,+'&5Z:{Ϝ*Sm(\xM}" _]X]uAkeQQ_VEGϞ&q[a?8QyCڅ ;xR; ŦE+ |{e&F:r5u:G_%G Nߩ`1ަ5+/DA}wHMXr=';|+m,"hvK髪(7]!ړ)4;QM\ŖkPVBdyHlvF S_§\_fK{?1U9 $ Zs .A`&O^p|P2qh`>=Ɍ, m/72n͖Ѡ{ _+?!C=).ǍKF(!)ȺSVwp>A6uI;DZ[eF:mJ}5!+ݭeۦl1_wYgQF5-T[e!ୠYH,u6uv`0N}#NU9Ga0 tJW& ] 7NubV ә|#G~r$,Y*V{ŎjC'OC"wlnpzu/vXGRaGS+S~2Y WTyr> i^>劇.!hQ\-K\7:*^yoE-h򴇥!oiHKw%[!VV79ʲ^ك]\Y.49J|5gB?qch,ޱ8J։^~|%YKGJY)p`-81o)ah(nBs@vCױ乹Mj{C!qH}q&K8tZ_lvW2&}Pڃ習^tiVR>>Re?ޢ/p47PηؕX^ܛe:ărI\h OB"gn=R01Hx]E\OlH+E%;+& ׋u k5#l_Q."l6L'qm paAܼXmڲlNw+o:zOgÍO`DCNJxLVBi-2F KliInbcYQGJ1j.6P(<]E/EޮE hܗEl,j;g;ҵQ?kk*rCҥOy0,#XȕQ./yU+r# =$L$$Y^{މDcr 8@:6[4 qH ĝcnIJ l9$z#MVYK^]wKveJ8lA3VUb 7}jGo|Ry.HFy}NHkm!>0lM^6zC"roUFjܷqNm :ɸ(@W/Ue0Q틢c{Ҝi 6y2JF"iHmJL;:>󸾽&z_břz H'ڦn{&M{qJBDiVE#u?3`Ww`> 6 5nmB.&nYXo)>v;NR8V^uV;{YDā ]opOx|EL{\:tW`Kq78SZwkѾxFnr+I~MxR(Oc83rJdJQ Q H;rE>fA#z5a2rrEocw9_]8h;:ߞ !lNҪ',UTl\L=h9ЀhQQ=ZXKjn*oij7quE"'ird[ +Zi4>a9;:;<(+ikEDw*PLݿ.qHʎRcDަ؇l,a,c;8*u$ ֬004,`_fc̺f /ArHq"3lU7j|]P2.(LCE~,i[BF,S\,EQÑ^._܏º՗!g 4 Чܷ)U{'| PU$K@??Io "##2m)oP$%!ll"J65J/ҥ+bq [|ې`TyNYyCV ";]bd݂i){żSLot/9w6 6(]\!c}jc8c.&Gfo]u/Ėɜ,de*gQћp|%c" S^OX=]aӛ%e>h`9.+9&n>QC Sh1ޥ p!0/6.'~!R-s5nMq oM|iW7\UOBrFe!}͹:IgzϦ}幂dГWlӅspR'7jd/TyOiJDܲ?PF%3JRlrK85<+mFlǪv.=P3\CL=8WL)$&-$ɏ+r]<0;jpCRxZZX?״ !(dLL@2;X7r>8oO.+tMJoD B XP,Xw[>{knNƻ";9ټ}&;9Kd#]qGɢ}R%SPНoGBw*vDLldrlF1A[r%)<'hc>bSXSZȽUIIǏVeCtE?ώF;!MB Cn#[vFj|Ƚ@ߩ(O x/o(ΪXP̄z& |EDGƦr]"] Z%ڃp'tFEwLYN+Kj9*ّBf=(Y%^wA䝎y*6$9; rE5: VbQ=李[{.ЗmޔeqJ|]pűQ2Ms⧆6*.MsP!|WQb 4?cDTL -}Wn>,dNv曅 p$ 8x.:'y7/t| `7&|gN'WL*qP|\ > %$,Y{Clq]؍u@YY@$£@[m^e?5CeEypΕPsUs[1ë~?ʠ DD!^fڶakl&hՍ%ZDӆI9jFy_9DEJD粨72ߴ{|_Νl? tSF/;cU ҊPooYic։r߳e-Rrd7C8a/^#nWLDi -o;r粱ctdU شOT6ϵwXylA{fᐭQAoo͕c9fgo6W XW(PivZG xz"1?3S(ap`\׉+/oMڋ)IvZ$v܎EU^ɲ&x>EiPKU@8nD]`Xu40,D6 y5 p޷~[閤A6Z#}ʴ`҇=vtZiuY9A'LmiR/yArCX韋G5"p9 Q>vؽa)nv]Xη݆? to9*NJ{YQah:ֹE92؆٢ONؗ9]JK]cf3,m9 Yk{"eLZ'd~oֳl99} _5V:`RWثbŌ,^'MK2gL(u(?ZmQ=Jب ,aM3)v-Q.V;Ehv0MjFkݿro,?[Q&Jq]$x'`ꄲm1_F[+mCr_5L%O޲`p.D鿌e|^T3IN[D_P#2-Étl3K)ip?PʕgşcTOYz^!k;%EЀbuD] 6r|M>bN85O 1}ﱖT%`j .^)ċM Θ^2agu%''I%ϲMʎBCuF} |WYgaR]v_;LR ݝ&t@@QgpݛJ+X K?cXt;ٸ3uMQt47 9h\*^l8Nz~?S ?㳸~v\,E`B ̫0@0tgNOHkVDdt9uAޟh2 *ވ~800!&࿿9E\߀>" r(Szk03+sx_=^*Ht}|%~:#XƓٰBץT1WBҤCNp}2ȻF죂*c=l8d@6E!H rD'+"Hhl4j8Br/DVB߸h"x%4V.A(Hp62VpCywdR¡<*^oYeL-N@25nOONBPzٴ 'ά!}d3v5貗4r/0N+:i"-7&\AYɕU>!-"ޅaQk ȲQR_)'Khvܰy2nbǥLH,O,} P ( C%X*q9[p2 sRg٨*i([Q&XbH g)N{xheLğGIa IEQ /tV&m9Ce,,8A!,۳q6Grm U.theFI70#['RM,rqm"sˀkHe6RK"X#LC@#7:LK2d#YheHt q-|BK|$RA $=jD͠7V,x@B4'߃T!B =_~k ,U8N ܟt|?SK9;rrIk@@8z <2 940-Na͟ϾXRt3u!,ľ3Idgz~Br/6Vrn4E?iSgX$i9ꠧ{N&UM+iDIذ00ZQ/)x!20.B3yԇ^*HߜHэ^-K׉s#'Iߚd死׺bsQYFÄ~s^@2E;rUmLdkzkqy|F$pD2|.{|p݀K9^RGz$3I3 20'ŞvkDսM6 76: nv4uij hu8xc.rP$F5kY]N(\R1e>P.q` Wanzȼ[[p@ᰜ)X§yc_KSf#BS(TTRfHzhTRLݨ$ʎ8 ,g v75pBq HaYw?KNC̣Gf `gvwF$[eT8Ҥ_&$U> --Ee c:S,ZnZvYwg @ ]X\t("e =I낓&F3Y|~??KzR8ʪ,~+R(KEc4IR_$AC8M]rL{<<@u"]8,$AjujdYm/xN%Q#%%Bt(:)Q; tՙj2 ʩPYS0j̠M_]OEN4A`&r21H,6\fr-,;zzBu;``NY|ɹF]\X,gL\ftb%*ڧ ڻ'p}X]tlJjON{`%zv(y$_SH_k1oFmƨ2ex<^\ơ7ۮmf-'jas((WHK( g}PΐzyVY/i$Z=Z'I@JwkR\by>"Eè%:#Y ܙ#⓸^ uW&b@ϑͦ̚#5ÑK&]: ,W3,̉ n.GڈI ޶e/}L#4|#]db$Or}~VkUm䈛 Gs%iDnĆLq{(k:FQ\ \RAK]ۡi+4^ȾX "yfՙgil~߅%ɰ8["Q"**nزƳ!PVㆂY[XK٧KY~Q$="볕J.yId*757Ĩ9-`?CvUЛmFUIAhf8a)KlPA *!N0BL-f\/sV#dm}&q#ڟo1ŊfGak\T!m |vgIm,}0bƄs:oM#yn屨.ڹMBۛ5x x Yvf9_ %7Z v9iUGt/? Ɩ]F(θ25y D7XL{O2 sAi0X"#(˃-!xG''bSLsd%i50ݬ9ڇE%d%r CNOH}^( +Q%] +õ-zDd2*j!7*.\Q*)Γ쯤T *EW$b O#p&Ab1Xsc,vwcAUI5֣RĉyFF5ysAuBc^abQax |}14TՆ41iF.,!~iV?.&&dڧw_P@} &9f@|rأ*1m㯴7H5jd7* O(ȱ ('׀,"D P{Y5?(Tq,R+)RZ-lfJmoVeo&IʨͰ=<) k[ Z=LKQL>BeA! ůy^*~=8G%"IhX'D.)Xba~F J Jl;\ܒz{ ؒY_B5wX?q@Y-[6_lGJ ˃rO3XËL,$Hw}VAgsRa*hbL;evcrOÃ^`#]9Ƌsi4vKQP,䝎/TECU5Xuyy_}ցFC:=1!-d+tKӖEtS`C _qB~JzXmz\8M>EG)ŸJfjl0#"t9g1b.~7HLX FO>c1<g꣑]NP7`*wqA9`4nԛ[[X4,͢" @梀B"EN|\"ژ ^%ր`. er?>Ԃ 6*Amc#hvQ[5k2 NKD ͺ4_~Q$vP̛P ,A-7>]7Dѯ-eyT$zkFÉ&yG]VrVz-w<eaW-npE%|#ܝ*xGkD*#+XqetKQ`r oFCnXꧣ'Zc/V)"{/JgAzlV9, K3 fVôRXQoZ!.۰N]v,pjiCmYK_'#3}]nraN+sD|n0*]A;?4*@ߔCtn|<\d.V`?\`]"_b[p2¢.V0pK2n8g}Rިjyco؏Jr:KOM%v7Ć".ǂ.~c$(Jz89bIIjm'8*)h2og5Woԍ-#˕uҙhQl<QҁEUL8N8[C`rTnlnsl҃ & + Ca!}o">p0p:CCDZD.ڤEy( .}:6PZU+bQXMٴ_ Lq!"O˃U/3Dc,*Ws+bӳjmOVB&۰NT@f?$..}wgJ0tr:ԒSvUrx}cZ$N!w8uR?pZ?X9]llꏳ\ ɲjn}F8l5oVlLZҧ6C})0jIB[Iϰ8aAlLv49/Hwc2ߩz~ZNrG,˛1]FWJ> P$x̼JΨS\P5,Mz@RQo#*y L(Xv $M ,Zw0I.92̮Ѵ+٨v#q4S%z 6"$tGa4KYV<2&IyYY.X2hǢ<c(l% ?{>1ka,$O:Ѡ#E϶DKd '덳vʼE0kOvszSrH~Rgs 䓊B)\"ñW'hӱAc};;̺JrYXtYb.77xiLll''t!4%(K7L@R6 #uЀb2L.,l7|6}< ओކ@(T;;#!U T;S1k9Q%Q~\8f@tDFFil:c? c{mQ',pZҎCmПޙ~:gpv[OSU?iqv zȵaxoth3k&8abugӎ{2T`H9ּWQˢ銸^Pl#MGi-R8Oq[ʏl:uw8g*z@p+E4>MJfZU|E\ zD#p.`,KR'ТmpĜW aTb<1mWQt+̢ j)+n:QoɓcFP(aTQ)l#L:3]%hH8vg8.nPN1LdBQ9gN⤽K)@ | xqe֒r8o ,R-wH] )á 2pJXi$ ^i´Qޱg:b%j즉V@\s,llM"=QUΙ?k?zia%TlPrdY.:FQ`8cu\)0%fh>c,#e]EIJҒr2lkg_ڙÍc-tZ;(s_dJ26Nb SJ%ZωlsqFF%~VӐt`-#x Ts,cN-q6,-S<'@NfN?!?<mS :!āEΛ38(ġ_.e$\-c/W&*kE%錢\ٜ}a ˖hlr~ yyUS>E6:i #p',%Y- i38HFQ "P?ؚ6ji-kϸ[ƺySO,@7|XO ɳN xÔmɳtR7w޶Bh_9o!5Pdlx.6`ˆq)ovn֩Ԇ$ rB4nv P(VK NŖ: @,床#@2:NY:H],04D>8wbq 8c /\0ψT^좟4,UG$,2v{H] ԣ'`]DAeQI}QD".vKD$#̈N;iq\pJܗ[N1R8pE3@COZK{PYYI% {!0#FJd[ }s&zм> a4]3v48Eஓr:`S5$'m. vSA0єv: A欂\9f| wSΏ K6w.Gr*w˕F_eqtjO}c99:ޣ_ڶ,,"vEhFa)7}#@SZw2PGQW$:H.̓ji>vd}5dus &II-BKHDu3p_]-8HX06IkV"W-1')w 3]++RzP*:w>ځ N^`+Nvo~L}uNw-ÓXZӗMԱXEzE,&xWc\eߓaR!:ߍ6UNX$[lg]MqXdпxX*yyS㱓HW>lqܓ;D)t73rHVŘY1E[ +y#@ >(BoV )]RG,iJ+ױ)}ڧ<Èv6|rtc/|>kUykӈ–(RLg18rμoЖsD9ь/-]a5e@؀~+/M,N ) "ea}~@Gsl\Q?r^)OX"c̕:UCQ d󅺻΁/RwGk}q~\R)oArh JCiY''-J@OB.8?L\X@=D3T9k&j: .wIgƊ\q1THe1$mb${ 2-\h–ϨKKNfgto, ^'/yk'QssۓRεJ㽔$f%8ӋWW94[e!=E-a sʬ}lIؼGNɜgQI<4V#p) ι&eRZLGk i]fAR78LT֐G>(*ˆ̅(E!=\:Y{ a֒4 sGdQH2i[SȲ 9(ZD- I.K/yRI:1܁"{E3e]pMQp7^~S?b 3.qQ,"bq*ݔDL@onP=W%&P53NubmQIثK.U0m2;t=-x@η0TW {aeQM=n/)HҼ?ufei & Ud~FW,nK*y[*/u$@ª@ՁH~Lۑ2WW,l|kߤd"I$me/ 0T(oؗxVۿ4]+D@ b05-&-7J)XKeh9g=f4,:i5X4f>G-݌-2ƍ$-)"-~bVӣS'#ؼO{f/_\#=fdKaav!^%Fߔ *n\&XhC:] °:c"'OV4ky%o&u 7{iX!_K<"s?H32D -dyLYØ(Y*vٌ.S;C&pRO/@ F j1_V$Ĵ6':FܲlA'|syOH]>u睁SǞIwnϱKЁVKl> WI1E#Eֿdkqwh2pGQ;E>Kh,­@m~{y8rB9\.v SKB _EP8LXv:2ŹrE3HC\E 6XRi:>=9h/3,5occ.|60f$L$JE@9z55_EJt ']lH:\=C<H陦ܣd͂cWNg 刜nHم6Z.g.^ZKAF$~Ɯ+ &>Ogт j 'aAjL e a*iNJ_qQ԰ՋEG4S$n,\_*g!ie,j_8jIC{Ke:Q(O O)kC'\\`P.Jc7 F#xU6ōQ7dۻ{ %ZoUy] 0EYc9+ݩvd'p{E "O/Үg6=8Q-RdoYjJ D䃒iylyJWDbb?6|T6qOF⥦QBSu0='>8vU$xro5FI)lY4Ȫ1*{H{958XW~M0QŮ5%vgh0 yƨ2T XsrkfBm.*JthIH(8Ix^? . HXk"ުh6@4XgJ"+}ڊNyIBk+;^͝բ~ x&|> @Ӝ͈צGv#CzJSqBNBb֫]:F9KMM,V+)#;-[43ǩ(K,z駔pk-#0sqgUEjO}\!3XXZݖU~Fy-Ϝ^9zzj\Ay;چuB}-9KMM:6[!g Xśm+L\f}->{,3{3p ,Jq5c+貧8I℞ ]t˃$[dH)5gf"m ƴ`I.Ok`,S|7sVª!aWTc)>:jp(텀"†{SY}eܮݳn (Ej Z}%XQpy[i*i Puc2`s[ I%nuP,JWey_pgN%`l'lTni/7+4]\ D2"^Y$ 6Ij^W[_>_RVՏq E|D4n.Z*@8CJj GCbYħ3R={vn,xɮXz"jLqz0ơ@c|N=à}RO S\mt?<44iL-l9.+4/r^ɂz[YJ,Jq:0`^L&a0yH}ko"ٶś}1mLW8yy%_G\'BW !3*1̺x ҼG8&LgxReؔ0ra~s5YHk,]l0gLӞɞUUƗ(Htwpyf//nE%9No֒{,vO*4$։õn7&4w $țE~5s@ {)N18w{H$8qP;=U2HI%FO'%AM޷XG &hu9t ]IϓK.hnHVe:nAeoɛ9nH&E9ʾDܥwž:P2H|S,)xi>hMOlYo)ef ƁWHQ[diToEwUPbbeAg튷a"bKr{E/J&VB2:Dnl4.Ԯ<VAc9%E=10q!L,NZ,̭n}Vs+a;+w'O V,dbDǂveдpN5.^3Ko\}7eY̕lD@\@`ZeM>ve|pdբBY.Vi,l5,y7J>!:.G*4:AdXd~;7OJ٣TDt-ecJlo[XN¸3pBP@9ɚut!`)Xb)R/_&A?=[,q N o R{]aQnwx(wJM|lw"@𿾜QaDr=QbvǎA6('=NWy`8<\[*JKdR- g0MN@pM*P&a6>-&Ha F2ZL#0xI"E𬜤\E.PҡMy[]&6Bh >oaOpu(RWd 5|>7Y+44V&$!'PhSoAݷaD~WUK4ʈoQ"e*/R0fD|?Bq,ho:OlPT$CAgB]m(fʹZwk"NZJYcOtHGU҅ U*NaB;Bns\gVZ#TPnۛ=sP+e6 S&e,e%ù&$Z+b'R`0U)!QK Eȉ28e`@lND؍ VdbZò%,.9@LҀxʲxx"%%\8u$KܺtF"N]4*YU:-(zK-2m ȕ̳p>E5\yk) ti?WQI!As%U܁NXrٹ]a# I4 Mtr{{뉑(_Ua4ZY)N@I+8+hy>` c+H(Xy,z:D\ÝL/ I8:>?ѹ*T;;v.)HyWY7˚`Zʦ_ nWBx%eXygN9m;,tf94-.1.Z$?go¶KX wjD}!urKyXzem1|B:ikuM . mY;" ֎hk;T9ɥN oԲcmX""*G0Dl:mhĥGzQVKE]]lOYJQϒixv1ng }8@mcO*d nqrqӱVs0 A$$%T?DlŹzeށcNf-3V s֓,WypK1 e(G$HQKƩ3Tٯ*KM,JF`ԢZB*5aU&zQ픦""E%c1BYD7})p5fgHinPS395FO\UZK]TuZZ6Ntgɖ07z0qZ lV ׊7^qa0)'LO({k(LjkiL^wq9l5%J^<7J tFOT-ϛƦW$kvNam J'5jGU$4pdqZoK}~RoAUv⯭*kAQU=mE + *!QK]+S1tgY%rm-+I0L7|(AC*V "L+e%ڋ8KU:"q#TrEA)ihXfb"qV?rc#gi4iLJըٌpzUc’{FT p6k8YHNj~PKq6 tE*(oı-ՄRA᾽MU4Xf)%[ERň a@˹%օ'y(~0a / q%.Tj4N ,[:_llPS a9ݵ+'\Ώ|̍erB?rߦenhBS1$_n "$ϳV"E$EXHsV 72\D7hDAxC?iH$-gˏ `hdWn)IeV8Viyrt4xAC'X<)T,$ IID$!-xwUKiwg.YxoU؏1b<Y $TKEU4g9Y1~7XV$9/h #P;%N ȗʦG A$ nSm i;@U(Pn/0W}|h B>dž]ӪN1Fvv̢^s7D|b76Fܢ>5h:]q36rak/{ԡ͛bGHGֹ@S5k%sK:]Ek 9#CSsgqF\zvC?@N9!$x7Z6hVƭ8veU|L=$ߞ/}^%/;:m;,9iٱ~bn5U#mN6f_rm$OD7XՖ#\!Y͓"6W(% ]ߜaCYΉW'nT^BCC} d]_4~Yif:u~ӻ+k$Y X6.ء\8U)P35$J\ G I )c16`| b6ymWEkZ+z7.Z'Wl<$QkLurO'|txrrifYIG;ͥG݉x7>9&(/С}Ig[;H3&ՔQQw;Kl= #'DqK.|R |6b_-hqϦ%JC{ή~l{tc9͖^ݐ3&`IK\,-rMke 6Œë%fU> cF 0W%23 _' L>)pHd:Ƴq9uɂK9H  `\`bL>838!՛)B7p`Yɂ~㗮Po!{`2,,ok|lnPx b9cd2o|Y m;M5."EGFm-ԁ@<f{ Vɫj1Ce4JY$i 1.$_l?TwiVb6z%(䀌_m˧࿀@3hr499:49 `Ñ,[f]^ezŀYK;de΁cGE/A ϓL!ÖvQs,""$Ͽ4caLM~crM]Ls眹?L֮S4XbBh r Q%<8 m&A{X\j~PhI])^̓M# ȂqcNԁs(@S Qb8=Mr6RW݀RUAhś89ɬd(M戤V6ee͊|?!!e^L*lӨP2p);#x7Y=c#Hp SJOt[c%u$$0"81uFy<_WSLt :NZ3[&(xy@)N *с](w)[oRfRס¨P ˉŕ8Ts~; ]$BB}Q^Y툎NKӄ3b'_^&Rօ0m bT`3,:U.,N#zGvs.CfHdNzLM{컩xDC6bdU`}o@;1a|Q|R{ _y>:D -:SP.`: eor,E&7<iLxߍef[:V0Ĉm|J_,DbgGFZzw?ɡ-d[U8PY@#=@(t^w4 ;YV8Z_;]]tJr%`v Ӭj$"^[ f o໌F,ȮiFO gck}B4#Y1-ge`¤DDŽ}? "~'Z1D07x]c  Q-:'{ RUs$T bc56VTLCI0rͅo~?{^!D,,Qg'VL7.~RB ;~.ƜGBĽ3XKGuʃիҭʼGY|cCU$JbWzH6J΃ݘj7F`>") MȭyfNyF PԦ&)DR,lֲU®Y^U,Nnmyo&(pWisau:HILIX$nn9X@]xS#+lWNags`-)& 8 qD!R(p~AA 6dba[]PY%  nt, O5MiwwAO 縌1;[LJMÝ|^v'ʤ8LݹpUwE}TH5u \ G!K$0$$0^eLFMqZXf%n$KT~fXB1 ʮd}8灑O\mFLIa¹䖫*]ޯ*91q)jT܋ R3Sԋ3Jy ;J.鳠N¦8 {F1%E1 g@,놢av1~b4gcl,dgO␔@tt(HzB"D Q҈PiT{YOo>p?4 9$.&B HLہTa$gڥ*!rT ߢGŊ( qKꋁȣRE*wte1{ lʇLP?qk5L5כAOiq#5YFM'hr4;I8YZN9DeH()"a7Ȝ~\nȀӳ)ȇ< |\8P21Y Xˑ0p!=]C0&/X5A1+]lŃz=ȨVV(gyvŋ%jvZdhfSKIBY g4ٳmI4xXM[J \ k8I_hEZx0QKu>5Y.YȲol$1đbdR\"XaC&ˈ$ t#~X29tvHg$,$Fpu;4 AZ`Ksdmqs_RʲG WԘcN¶;ɞs#pÃyAˌH>KΆaK>`'$M/hPCIb e_`ݶGAR31D#N PJ"N}CR{P*"R  GӤgO{tB8M|4v wV"%H9w[4$ zٚqb8Q^h9Da*W KXґ컃WOwA-҇?kQڐ'P+ ? p=[1r*dTqXaN$4?- à\W%n U| " /O:[]"\)7v]:a8unX`@흂{ɐE9r.NoJv~JILG@D p7kRh V2AJZbhC~H`2MXzW:;;f|$?dwhc+XM=;2!V̻ U,aыz}`?%a#O5e'ADl`ΖMH~uГyLo &< Jhn%vPJà:*@eX}o^bIx0eFOY$ 4׳'-KMWHc+Qǵy$f#ohQf6ǐXl6nI kZfD{'R}"`*XJ"֎T(!{jw=NF~K oΐLWI,L>(ReD/ E˄Rc2ɃV5|'27Hn~VqYbU%fC^H&@6F򾖚qlסJ';i*F'F3] ͍R vW2 $:!;F )B`d'+ז[ą^B|v·N,ʲ^!qHqe,yBB;{O KIj*AIL"sfiY" f!&x-Cq6H@tNy'PeVڰ$ 1dJ4V\nm֗۲ F%~GL*]+)(ʱDmUe4OntZdCi!N%f1v9W 4镊v^ EM7[=%1Q6bT mnhd̝=& u7KznUg}w:s.佯_]7qSj)̯C:s8<.3`5g^oӒW|4Җ)sG ι,eIn1pYn6GK. yjHBZ?ɽb<;źZfUOux4ⰹ:oXJe() g-r"& K:[F@YP~eVs_raD;\28i!/+<>G"1ˆO/JŜHHt3f!0P O%Q(Mo35X gIځ8 J( $n'sx#Xot7<\_ܥgz埵ZjqP>PdgE!%I? dݵ;d,-z2?w"z.mR{tq7ҍ7+Jv,ȻHEgq z ピUl'%zqx*lM ֹ\v.=rFzIGDKV4\FKDt_samB7L4㦉kb{F`5<9W}}iӤ=B\T qOwK CX yE~HnpD^Ć#ۙ孭vjo>@t1ez)U6d'dba4)9ȪCﰾƱ^пDw7 /,q'՞~kr}B_b9#Z{-!bEtr'p "3a℮iÍU)TDz6?6^VqG3z-" G JˮI 6w9OJ@?qtu@4[ޮ7wXoƎDγ5ᦊY{=+U *Z5@x7(Q9Q>ěN4n`곺|au% (G2:Mo:h%n]9ꋛ<;Mik<r6OYAD00( [3𣊑.%+.:Dx=wOb&,[|c3LǠϜfL? Z.IHbFF2gcWeHH>Yإ`a-yi5IB׎=iTЌqQ^r]RV&qhLڐi?8=k[@Oqa"*n&αisQn/n]V($Q̒ E޿'r^t2"*mM; ͸|m\ߣʵmĒ6J7Y'8}Q0$3&s&ך0jIdx荴TC:sv TDvVxWL>}|7tM >ATzvݒv $>=Yo%@UYCssō1gN#'P6Nn?"$zF>Š٥:@~$ B{^齻:t1g&~5"n $F+079~57xBK b')j(G;YOFJ2M]+L(O&Ǯ@\'-5ee_~:NZP_; ^*׾VJRL?84̭S\0[c_MCBv{,2[O7HPn23vwHƵI ermi]$-*L(|INpEנJu m~>S]9$h,9/e8c&%p k0˙|3%|\?$$!hCX6죝.:Lu8Y>jysõz@[ _,΄G-rм=[$1YsB1 \x_.7ԏhI#ķ4+6)Ydy rKD (eKr;_ŃзME'] ݶrF/ Ծ8pťt}slљrg /Hw˶r:81xVe}V3:),~l#BJ.Dɹ_!'(/td2~"aBЁդ]Ԓi t5#.JLllU{]OY,ҿb5'/FK%&x6/ڜabyT#sOIbBF.e' mK8e#&O+:6MH? }ιza*}ĺ.U괥u&&Fk?PɄp>$U#$Jb$Ȉz)3f Y٥j49x#98j1HUڜ,Úu?2/^ f*V@1F{"*Y{Gd)mPx/\ĩZ>g!l|I VYQDHX NX`Qsƣ?< Sd>A z9)ɻ i'-s[;;{U >Z6,i!Od*M#PxeXY Ƭ' RuOjjkeɫg*ypT`j(˸> úa 1!olY|suWp\{ 7flJcN0 (&'$0UĨ_Xi@!㩤ɹ_j )~p˴ιRY%?"j/Y|KHÊM8,bt:+8Yl9!_\ٟ3w SR7&AW: WL=:QΕ+$IKN@f+y)ͳmq?׷etKnaxunDc'rWg+g$K3^2 m<"Zr$ŋe? xFv6w(/WWKED9߆. ߢg{2 -{`Ҍ*;9o,yEhj9Y?cGG$<(ץeX|J)I5(Ǽ/# Y;i ?$:_9j)e{!U0>-뽨%*Ѹo(%,[/rť]MFX =à#͖Lta8z?V SXR˗IPx%UeX+Q?rd+;GDAtKQNLhTq&#%$LUU 0DzT.4']L 23f<̢5;Հ3^3t)XKYdD?]k}Szs4F,VhKWC E/`pA;-m ,!= }If|o~f&eOd9X,/:4IHl9 \|r-+mP 1[%ֈ$ʶ7E##+,`0Cbf2%SrXeb~KR݂ԁ.TGzr9Ofq[1NNһGc>U : )>K8I٘ZXߔ"Hg7Y0G IXd w+Z-tpK|Jv|H^-#!o9|O'KZZaEnxre@ Spic3.0s$ʢٲM ܘ=S JA2fC.ؤO0l+ 6`?<1Ynm4F"m봾~nu1^W+cJ tfCژl4o7F4|6,7?QŶYgϣP=7, 'In#>B$lzf-ReYPv[}<"mFYC)n Uv*ZM.1b3C໼V-FJ❮⮴ujN[$.;gB>I999^hŹ/sl\ZU4n@L=iMWιWnrѿ8Łu~ū7-!!cL_PBiÄ"X^U5TY W-l׫/;bp|FD.0\W7m^Ze:dxK^djpDhH0))MQZ&}ʑr4Un> ˦Q{dh/M{k!B_j:p,VO gަ7SV^?AuVzkQYdP A((Xr.P(v6<4' J" R0N,YLk㿡{ $,4+,+M'T`NyVc~'ˑ77,i+V,D[BьEf͝E&mM,B`39`g\EcR7o\-Ϭ4|MRg*q.q0Է{MɌ POJ`6I8iC pA%}X?{Q/`̃N6qlzD_ WHN'rӌUbMQ&;a?cVQg " /J&za8%H4st,rf]SP~J:*x9"gD_~WBZpnHNr7#Ng9Cg1 /@ `SūH;b]Sgxo_.sԉ]SrWաPtt2zASV ҡ5%_\Rq=f\Pķ*l\P8MʹxDome+ 3bяg Ilff*g$$CT~OX=9Q삺Za!u٧SI=(s9%'tG7۫92R*PXpM|w M(|PkMm[Cbi1~XX;pk % %ݞw\k%(êa+nyÀ~Hi!&SBAzX-\}p`fo4`>1Қ٘n getgt1ǃz\P%Z5_ 71޺ )1NTҠu ~t#|…..(\Xaɝ \Zn ʥߏ,}\t&zla']^$)O\˛/8[9J/@DR2y # ~&1nA28xu[M =5Ij`&h\ןN(~-tFn/d5, ?l͞/ J\Y2<7>♓T^Ž>b#n^+N_xuhǍjX.ֱޛ,f L ^w7\IN!.ej{Yk=3qF^=S,ڕa#6&cw;#w v ϳEȥ;gmkv[[\ -yvM&"18ƅ!QL͔kKV,43&DpVn|6p3u'$,}}ѫv4)ȅՄL60GA0f}tpV¬f+g{Ÿa9Q_ŭ|{ӑY\O\^dI D\uN$(9 P.g%䪐Ѡ5faIHF7cFH qMH啿t/̫]<HPXqs~[[A]},L}3o /d4MyfRe]w.[$p%Қ7>`UU,+Pdb6Zl\3K}^8 D tp%ղh7YvaIh3_&kT|3ğ':oPjlzg(=CO{I.#U 0;'?%@_Sl=la9"tsZWyf2~٧8ƍ Igw<^No[b$Ǥma=QL5$Ag1v[e~g6'g\Ka;_mI6 ڒS×SL,gjJ*65uK{'x&AcjѦz3NX+.x<* '=MwCABCUE} ewY{kwrj$}w N*2!2ڀ hH =ǃlTEmQNn jh4%=NƣߒV)~mpz>gY> ٴ*www^N;$'}鍷?^~cwG`M`$|M~᳓t2+fUtVUH9> v.m:jE(:iYJ4 9ȑg^Jrt"4)YYMgpÂ3HO$KS{{_ e/Of8Nb4$PON%4q<߅ :ONh: dz(e) M@z: B(Md:q?e',h<N`1p_KJhB~릛?0,Oq u/R,EGnAFǣY9Xv, $tu%M0,W1,`i#zѵ}nGTRr卵̦%bN]i#d^K䖢3bAp/g??d4=d!Y$Ow&Y|0NGE4DHi_To3?nH߸Hy2+&rG4Hz.$Lk@䔏-✒3t-Kq!dN'RXehb#f5b+pJ$NGrv'^I+"S6N9}eZg}"줈<h6-1s8_1*W*3ȹ񜆠=4NlCa  &)P"Q J>:?& ugCŠaoOZxrV siLw>T!%OةP³> bOx3h`ioO*ourDt(Hp(9 9jz2xX'e-0 /D;1x %U,V' BcG*ˎ/Qg4~Tb؈ʹK,, #)e yK^EY y 6k 4፠}ፀRM@6D]b]Eʎcu+ǔBeSG{#aTQ.c4M G0뢪6 $ J?[9f tIhP Q)r 'ǻSuT۴%:!`*9Q5FLC,|!8gkH|z Z00}̑&z~F-mQp sm,Q'C QvH$?01,`YWYXP@s l4xp{Y┹ycuJhHb6xgx}/C_ܣ` K%``q>@q^AYP^PlK`$c^HbPD(A_$l䀂zCT"1Ӂ2"yms'ǩ%P.*P=Y|YP RY@m.{;ȻÏ)Sw|G`$]nhQ@Ҥn4PO4!8A>N Fw5:_&`F!yE5 a؏WT{bWaaC-U*)ǓpcM$rfPB1ќ,FzU| KfY1Z; 4c&+r74Ȳf<"N'c8bxo}:Z/c:NLpM'L?6Ǩ*@9ɀj(Ű/[o m-R<=3$͋ ʘF̼`ȂvG,܌sȃ1ȟWt0*YYw1yN@[`ހqBc", a$EieM<IS}T0 2HwcAYws)[J{ka,O8 +-tG3T:bWH)A}uH(*OT 0roPj'8tDH1OL jbq#9gK0i <.?D tv8F,Jb+kfoC1.j!Pni U-?WE-(g <H{hfpV!&qhYbb<^у;)3RTM8XuaA!s(tAqƢ% >,oq0.ڕ w<q2H3Y (e53$V-MsQr*0s',KR{K{Nre'ǟҍA& n4馳j 8;A0#Dy9M(4 kabȻU0»*niB >1z Ta!_v<=Rd YoByfrupdrUmlڹrrt@L+OѼcN?GTnĥ~O^a,0 sl,@ ĶrOֹ֔U[$n$$K.xJFC`;fXbU*%Yg }g,,U=yBw* ,5uA@L!̰rH;F'MPr- ay:uC<]:@cf,*NVDT<%MYc ϕ' rLEϊ f0쨏]Gw;‰75`=S1gҥwD@P%34u]{.@RôPT|˭4;Ģ,;G OQ}!{=O̡vSgXR&V>W[#Y%+7h J%<8zr:ois\;_qw>Pi̽b>~ <|Ez6U= J䐸 maA'-R=[%yD˰TI)Hy6 n::qfyYl!e`6o`:-:lec< +b#<M8|\+JPe.:t6 Oek}zsQr(rw)9`R?\`Up,Zcc=Bdl,(ǚZTjaF,K Oχa8餋7S~"R+O逑@rA0x2}S'$%QMg#.|X|w,mY-F%0TekUp$e6b*PL Iå l;QWZ   ,R>$:'B>lzq^,eF"zD*kcg)lSeF!NoSyϞaX!y^F%քVQ\ˆ%<ݣZ[Fm¥zae T'>~)+d`_bW \h@ZL0ے*]bsVG*eNQ`!Tw]&N3- 8,XOâ15@}u,5$0g8,Daa!8z̼H0lPBVQ'Y4y+teեQ!k9CM;q#PSf3WjB G$W,dIS?PM=R%[EmaFKSW5MbC"@D!q_vl($" 9,o\e\UM xف=tr[4ەMnM0;hraYX׭B]'ro8ܣd/4:ҧ#Lo&Qfm'OJ2I óH*R"K B)kQލ~9&n &juY q+яX{5zF $FaדIFuMB?;}¯du$zUܣ 1t:ha aCI^ҴO[o3ʼANXBa?k= )H|,ÔX9m_cNeHc,wL*i9'Ieb#D5^>/S"ͼ gCt ?=uS>L o/ $4fmڵϝ67HIzWz=g6LmdCW7Jg!ddq $2r]&$˧)) j$6U; <*+c1UyBSTV4>-ݧ'nY:w0&* # !j!? qjޣ:dr45(E'ui3n`r|irt05%%_5~={dWEڡkbY =0L&1:} Q|O1]ܝ·'Co-̣ʏz:1i8xxK"w|kT40,9t8 xgIqYG 'I#Lv҆bB .'Zڵ94LGqЅIީ P5(ʘݗſ;Th2sM{e^ LjE/ԃC ^ΩyA Õp6l5Y>IX-wx/=YGTbIݰ t{k).:|؍63NYkxh]3M>HDzeSdD/p8 mR>9,vCddF*c{9+K1T`b܅@1td3%[+: l'mG uQ`]j>E^ :NƛXv&Hl3ݠ#i-}8u zxXT=e+(E}Ƥ~mWv N PwD޴CæhJtup@QkP Edត[NCs([$ enE}B/U.*PLTJ:<`(MPmVF`ݷء"9yz =Ĩ_ -F)A7b CAq{` ױH,d9Wd>]Hi K|yc3;KFC懄IN3+*~"lM XZ4LfVĖcO^=Uyamq7)PM@hNeՀZ6]x 1K|e:ڄ;whTc6Fݓ[}/샊"dè]]K*uß4mS_ErHA;RO奦O(r5kGA' :pmz!r>5q`cbyN7>G٤,fӥnOUo= :lL7.luwa7[N 8E(KtcS *2~s*E^ֶi[6]ג߉ҡ ԸEH+;ӌJ;fTjW喓-]?IGx3+րSeƴjm')r.NjhE_Ќ%zεϐ\KsD%)‡smtq`7~]yي9T:Nqِ=N.mEG(dԬLWL}^M}U%`jդEI5J=J(F;1+̽E9#yl(d%M J꧊&}Z8y,ՈK٭\GrB}i܍q.t +56mʾ^EEJLٔɼo i gUzAs:,KbϢ. ]ۘ͹R v&]8w,&Ni:6[U>>%So wPL,b2۷/M;f%yDcR;y"l-G J7L‚Z3 pKFD[mo P8λڴj~.!,C`<(T3R_e0\/>ܴw ]*^>)>OTΙ8/cc 5Z6S Y#vs7h> cRlid&bE9^;(:(.# .zMZļsM:9&`a,(a4*8jN %#V3/|,ZvEқoVE Oq/1bT䓼}=ɱ&TMs8p>cR(ŊK;[lqR%@:kf1]D9ˈl`]"VndBeTGшZEKlOWX>yKbo >Ucd(J,u%Y~NU `ZvM. Jd%oy5ED?׉]cL%KH`pDӐ\kdfDry9UVk%~"$\:BDY_K(~+XN'dSmMΑ0[Og64jڊ4VZ;"1t,G| /,EO  5;rJ`aη@:ﴷZke;}\  Pcagؓ8EN+Pem$lrI 2s,1 Y%p`#Ίu6D,c&Yl,!:,f2YÜh$d6FŚm0>uG43Y] bp.3غHpzsɆlo2 . ے_F~FgDa`#YΎ"Z"1-ݤNKGMKN8KL\Ouf:^ZcxoK-&%bbf*M 2?am_T>4zXwL8͊ր1]6j$-QYe,RY :lgQ/%Cs]+҇mCw`O;!%u\S.XVb SdQ:zɭ*Pbw)o/fD^,0(a;K;ނCr/l[G85(8d[^gn^26hE*U:Dį,aZޯU_+Ϭh-I7d Ŏ@"ix]ym,f=YOrC %5"eˈ0P:gԗkU؏؎g-ܯ`1M_"͈ø]IF`] LTT|1}X29&7jdܤ˃ G=Nv\o4dvoc,',j" i:#|>meJ9n"%#8Zd" 2ˎPonsJ9x3p g 4 )1[)7X %P[X:ƌ(r ę!+=v^AlrߵV7М*kRPcԅ:2wυB~J*|cfo`dQ9z{/#WNρ@Π/Ho5 Ls0f R_c\sƑZ}%(J@Y.v@]Ү7j66WKHn,!ȮjVbJkT" }t${y;IjUG x>[}-?&%v{BO!h{ZĨ57&wO^%e…w o*FG΅ScXTT,fUMٰF;\rbᶋ$u7o!'Z^6n٦%*mY6ICq7rżLL]sa $NF(H&W)9y d6mWqx$J*`xraqڕ ] RbL2miI%X:ߥp-H1&zEb,&hPr拀 nsR6!kOȢ cf'ktpn#ZOubRCߠ6qMYo扭Loށb>;]n " U+ gݎ8pЫdanj,Ũ9X|s xBO6,ptT̄dYVVfr} >Ԇp6LI)w<]@]Jbуl܀=6𬀃.0aF4 se%q.wa nձϘ 'C*L&J"i2fZ]2t_`(}u(#\otATY"Xvt(@L)!d`&p(zלr5}%kSt Ϙl}wa~I@nb h0UPk( ;y&# a7%'6P̾40I!|JUr%>g#|WLqz֜!4nn>ݖF5H0f\V(>dFngB[QYåECDŽ|.b򚦶|wbjj5nLH3&R10}a&`C)@, Fůu\UBd@T)K40lese(|7(7vR5yBS1c 6p.Æ7K 6#d8ӊNkҒx}aEO簽ǵa_6NHR&VW3qfHz">.7ёX I lFcqSMMYCz|y 72 ꭤ+Q-odF/a7sfyY^K hd[;@J,kD雝}x I:M)\0ކbw (slUh-PMŘn1!wnjx{tYg 7kB_+6}>_jMCrn\>,Asa4VɁ@-ٶGVM9gx7;bsD1q0/fYhm((+Ra5QL (3#UNGIܮCA'gv\[0AWk7ٶwP%aJq؅ x!!DCh, }{%iHz9n UGNj-;WLKr8i4>.*Hgfg8-c7a &UA(p;by {D8Be2Ҝ5@ ӠbT1sOWopc8F*\w.޼Z1RPex*pgW(8;:85tAz|wxs__!8,/Hς " $+.9d!c1b85a&Iаu눧mRUj6 fDC9^8c6a:BRܞ _}Vq/R,3h. 0lnVj.no٩A\Cx}njrm*̌78, nդ`#߼C >A79.q>sxk}>!w#,\=b2tR^ >,;#pjj2Q@xC|)zp1 WqT'/a_vqgSfEoװ>R;?#g}o>C1[hn9fǂALI=֜d/$3MJʜ>^Fs.A|$&^?6 8X8L!Tͣâqnvbsi!ϳqx3tvpD2,;vtt'~k ,kC rP&&׈( 䱶ކMlX59yle"fN!^ڝ2|UcϘ]Wr3;ᬡ1+2nC֓.e _d^: 7C8>r)VgnUk 2h#Hk]:" + $pdQQ c󩸏^"]K/+@gƘ:ҼIB$-cX,f>Mm!7jXKXl ,O.f[`;n<ɹ;(E-;ˎΘ„u"yOMˀHp\b&$k$ 3bw>dY.[P'Z̯7e]"i,Hn:V]<_J .Op =XR}޾l.<Җӆ$pXڋfly@su m/p}WMto7(AY -]y/oٵ4S=Rb>J2ǵBNUׅCMmiso5s2%j eamD^5x^H;d6rS *jlC+g!B)uUGlAd=mD1SV'YQ>Ck)%FGhp\ b"O̪neW~9TՂ6̣-K22x4`; BĨ2okg4Z;)ب2v=D+ҩ)F"k10ieSu1:`s:1VfaquRG2&z 3&+PbM0@9s2uёV_ ypcИٰ?H-I$PFCMKk̲w@7~bI7ƑjZj%}Fi6Iӕv*%@Ri%~~a {t19 jShOIP(Fg OuvZ8c2R4$&S!iQ{c6ƚM}e>QNKw@`$xvCM˜=c5K7mmP^/ +>Ucb62/D3xES[FC,cL2Ս(HK޻dʀQ]'.36YVf|A$ ,`n{HXv t"P;tyLYA Z }%Gw+[#ndbDFQ}d]k?'DqƜl"CgLx~FSNENru.h{I)3gt8'IA%JQ"%&Y1\{icx]"}$| ngcqtdϰ`1'ߪ%dnV-kU;Pu}ceȘׄC75m"} cK=cC$@{T ve"VC}&/bױ|I4lTH6O1;bHZ1$C׬,c\X~!^}AOOkX+%%[rϯk\[ j]~+ 8yH&y8$k':t X.Џk33ܑyXn^z4 z k0 sOʺ NgB$CnoS;8q`LY.ApfL J< "! s˂6Ya~Zb1Ht/6wGl57WD \ +x0L(|`x$gYxH'[F)qM(%K^:ר^2B$BW4*ﷶނXKA3HR`$}C:*t̐ M1)HzT~¥{32 v$۠IQ^O> *Tz"uHVG*wEcq˲:rc=4{jıaX5+XbÙ~هhBѺ6w8׼eW4[l`ÁrpD1P=Гׁp]w),;4!)KŚA~5JShDHuQ;7M&aĹ`6 ͭ9!_iL:b"&`g4>X+N!=0)$TI>Bw`H%@ɚi8̳05H=+L+Yw/LF3q }Pa~qiźs,(5r:>m$ZJ:C&GyEG0 Jޯ 1!-bNxА㠂z4nKQV+hߌBCPE} wUg^_Z:y$X^wMm( ayӤ_G!g#}Qd"J"kdJ 293dkU^uѤ~}=ZzZ-zKjogm{G}ƝgL>Up6MfbXۃy7vx?=:o >Y2|Rͬ綧j-vgN]_@v{{'@FgFgŬNf6~=A`+nmomeIӏ :$iȰ\fb[,/X^X>K2$Y04hqP3 dV5@dHeax1f0H7陂@[ޔ2+f`<+ ?1!gMF=KE98%?3N͊I5 @C"N+[[;e8 trt9&R!5T)6K78zT)kb9` R? 2+Y 3&shH5(OIp .4u3'$x0 lh-P7iON(Z\z.cCj̎8̬̇<>y>rEq|ba;V-;L9^MWy6:_|D`N)&6CÓY1񔊰I[n'2sģc0*x&&i9p`CdZ_NK ,$1T 5\g.(+6.6I9Q{TŇ; ()aQޘaL(Ԓy:` ŗ{W3,33FLhl(~ٓʗNȒ*1M1.gT5`4M''xÒ{OX|r1\KU7Ce|vO]VNCbKl(}S. #"ɷymX6 >)v%{̟IWU>jF춳6?P }zS=St.DMji;]IB25A. +18FR:E P5+E!,?R^P:XUޣLӌ/~^kL[{Og0Zx/gfh!v 7A H|q[!yN{Ct<p'3v $\\ʚ` 50\L&r 0$! iIM-v\~!+r ? f`ꡊbREZ688l͟,Ա1UUKʁW0xG(4Ug&@2RhkjZʖVh"`i9鲣8' (QW9PLlma1tbW J黇p`y`'Pˁ)W? >D8F><DŽ97%4C=P53⏅ȟ;t%~ YvTUC'@lm7бBŠde(PL"u ܉@rTLl Qn߳tmlC/8T9d"l'hJ|i8A7'lK8="7rzooogHJ4R""3HKx8Ԃ2tzoU搅[P_rXP,K;Đ.F0sAzٵh`9KS&Iz {!Q )߉~ s~NHHnb3O7ͤe'qk`o;iv XiZ.8R8pXOQJ.`jj\#EZtCײ-d5W pDbdƊ#^ u>kcVv7Ds0$I H6Ċ(HLA*Q8bp ȃ%:kE(BɽQSrjL9єAk(AK|TrUw*st_(P.38TJCȧgzhB=5y 15B$ˈBMG0M@Is7!F64Yw𱚌2GŽ#a cbdX4\`b9>uuf*qN{5@.42]zbB)̈ȍ$&w1"QL4  3cv`iJt c?ܤǘfZa"t| Ȳa\5 J 0C`vi! Im$@z %^/"̈&k/"(7L?{J(,III8inX ˈ[-T,PpxmY;XX0+pA)fB?E0ɳuay*wB3$sH[ZYnK0raviK1'Mhꀦh_nt@L5E,z|QxC{"p.3 m;aGGGQi&.ҿ k"q#c긚D9GsA:erAߦ߉ X4e,b`ŠA!gm&{ s̻V`(I@lفAs|We&׳:Ĥ[wWk6/8$uCp Bv7|D@*÷ bI㕒|8ͨ@ |VL/U1o—ɹn+/mWPau./57r s)YܯAtj4\@&fBway.n=L%&"a B@!R,cLZù[N2еޗjE' [9 S1L'L2}! I^/2ݤEgXvQ>&RnfkkkmqյA1mPP=a.[uJ G!҅JQE>ՓV ΐ]E#_e/0Ss.u$Gρf1D\Hx1⾓dzrřC,"]RbNaQY[3Ӊn5B.E:gjjX~2 R5.{ȍS㈼Q2T|;zR;B܀BtZcoO3Zs@ ;3%RihwL *Ȳc (]m^<usɄ§ԛ8)U l.dI5{*h'UZvnů`4"A xz,ϲFkMLܡl""_,y&s,B Xv,*d]6lX n###0k0(ܷm;ܪ;(jReG-' ԀBH&Beo"Jd@!EIuI#G)E ݻ}JĈIc/Qos¬0@5\U1,X>Q|>Zֹ Ţ97LHL_+5YT%ZS(7Q:/ov& t%;HʆH5ch$<đ wQ)O%@-`Bx.e. d mbn5$]h7%o`wHW7kBJsӁ aCJkJ^҃K=(%NmR(9b|CXZͅ70-x@'$=S[[u(\V:BV^yuw4)Ac@;ڎ m̏R9&j#%b:N1Pp  Ab$6 ^KʁNu_= zu,dSPhTr,%q|m=~C;W=!iOa!Z$7 1^+9L9ZlK򊗠oEKGhXI?]v 3ĈY:~> z#Qc|HPQ o *8/ĵz-yY,0ƞѬS:MZ`tHy }G0 ]IN wRXRY)+l IiE{C> M\Z EYv ]T*EZ*op?s5ƄPfƅg!ps.u@M4Ba) cJYSvjw!`ȭ(C97ݦEp٬d1BRC;8 GX2(9A  ў|1xhENl\&`v{5IVC📘:f`$I&,HFB1~Y5ɳYvgd2h|icԘO Њ/(PNbTKtI愨㊧#d>wם W r6fюReJ$H( k`Ab8WR$Z4 CZ {I ˬh9 ro\Zq(ޯ{_DSnBzl1 zdPs8mzdҍqS1*# 12K"5Zo'um1)v$4ff Z,YVqf8ސߋJ 0,:&".*d9ⱊ/=MՏdcu1܉acȱc2.*Gxn lGoD -L}(u Ti.,IVlZ)O EB˿{_`bzh"JPKhWg}c;îӛ0.h@{L$qvǛdD J9@.@FI:i)) n~Tž!)fČL= յfj($h %Fl:/)uJLAF h@i/2z~m{肅E=aNUE&n %q,,MML!OiА.K)ZݴDlAp\uь6ӥ[Kbz_ ).,X6L( DBeey}~>QSQ#+={W/ aX:YN8'i}z%S.0§ afZ3*l/3wB!/ 4% Ŵ-4eN27%iXRN\؝&u[)22)R'Y'7@i%#zyˣD`$rRˀe~32IҴu^kŭt&" oI:Ŭfd;c][K`]=]x s/5·oeP+:~W~pp_r;eQj+!t6Uvc9WJC, žL1ƁY`z<)7n`C%DY3prM|`dovϢi0PH 3f%Q[t(g7?>%z9@פԱ|NgMT=ʻ|rGn&5LvZ-Y $i(IDm&uW3<* q, kMf+`88MfxC8O<#1ر^t\Fi\~-Y'nK|^:ȌLJThm@ J2GO:|xawB x XA *ihwI$sxd2˫! Qc!aw6fL|FdfJz$$&E™b? m f KEqL{'"X<M1pgs #6Ԋ{iQ)f+{G;ӛ;q93F%ЇXXpYX w+XL4oL) 8xKO^ %y *'eJ%X`V i)-;;H8cm<ⳫJ99jKI7ɉ|P$',B$郊h-])Qpz8b@b\(C1mZ .18'ϞCcq>wL 6>l'ap%iNG^ ܔЍgEZD9@.GJݷ(t86MtNH6p_d注+PC\hYԐ1_dӝ;ӛ^+o/roh_)|,Z.q&KCZLi#K\.G; OʕѠ=ۉo8s2,@ARvc^E!%͔-)1鲲miI^Ғ",|Jh6<ԑA59IDS%Ǡj\uJ&G+PԹ)Ϣ8Ʈ0RqhmjXU hɭ = v+5 8M39ۜXx`]ȯW)+\!A }Hl6- -awxNo Q4!ʘ+`i*VႂlASYz g1wFo'0/h' |,)Y)fR6 Dz..?UX5&Ř9QRXvZ-1@TA:{lDu!}k y∑-*ŝыlϥuoBٰdĺsLW&?xk隆:6 ?aY&Tmp[g+@'a_$m43f|wkx$ 9)Aq#жX KIKv!YgemZS b DA*hHt( Ϧu虘 I#a㎼އga51_1c*|As)o_kAm V3u[?Ѽ"^Otc}YtT >,Q= +"b)- S>-mE3=tGdܷ$ ,A'N\[Mu.SbI.pA-ҩ~X_Xcr乃d qYt#\JGaXQ6\X@6uƸ R9G32zYYkQg~OSNԧ9\ KJ!ȳݮJۭӈZ=Ӵbic0S#LVI6eMn&aS`ҩw D:^t'X;|Ǽ1a-q]!&y5hzOH D*ftݠh\a/ gf&(ֶB% "5>R,} H $mφ,{Ŵti;7/\̧4h%#7Y O`pC_t1"tya>MWzab:sM("/lHOl,eFb%B4|/=87!G-,_wg,)Jf3tˠ4okHew+P̕x}} *gE6G=[0t}/pz>&qR|Kvn]9056/yE˭J$(2nȆi[PvsK:eYpב2؛DlƸ/_%5gCߩEePh\۠ʢ`SUY&u8,:Y NԸn:,.k*I TQz=UqZ)\RSJߥ]c\waQSlɇNY Yz.;͢t|[VQ+F-O ! GtTCݢ pL @bF\.(#zLIUЂХ7zXR ]4,A[C: ]G{SP|hr/`~QtrȭP#EMCV ?cz$V@B2],}tc,;+(ֶXo2 )ܯmnX0+vI ?ݵKab{݊GtGM+R}TnXr"Yh~KF3[&%qMieaG2uG@|?G2-@hJ@g$na¨\ EAfB%KZ&Ƃ6 4S0mUY䙾(A`oŀMئeHfsc9pV.)XE%W 1֩ݱ*E~+B XXItI/\I}*%P(n(9L{ шʇ#2ʋAǾT#J<[PK5rX9).y2MDZpJ*Eoo;߯enO1B֞Z rlSid= u[iw``2!Y aEã$wF:z V t9ĝX=2=0-Ȼwb@%|ta&(Z$c}T=M,^F\5:Ml}KJXC5,M 1*NX0E ' qrB}u@xVbQcmW{~DƎ CmrGfbk`E0Øw i?pw|lI,3gڀqh; J8U(i>؍Bklq.v\-u,*W 9lB"h^e1bDlKTd 9.-~ yegc#Z䣽q_\R[)eBUk~/ID=Ѕ"2M:G^ ,n]z~4xxjؕ˒4;/$+b0ւ/F*g90MUX4O \J'?` 3Tſ{e[ DD^wԗP8[M BMV %^qw{7oDj9\3<>$ N^|+\IW{JIPjO*).ݤlKlccfG͢ %bΦ9 M"P*kHidl "Oх姤 K~`bWu/"Xh `΁}H7jr\6Z`4s'0^kO,ݖ#cCblɡ|^D:c#e@BaOa(VgIsV;V .V 0f%Zj1rng>-\N{C-jMS$C0oD^C Sl$uCH%;fw+HSiWkElƾp7%L'픸#$gCG-;V0zZZ80_sy^b墜n0 %3)=jjl5}1@b,?)3 K"q ~27HK<=.29P102yX ]P[/Nja m1ş,q'>N ;htriC-JnWtoEgw TEXDq_ ~? yF ܙm蹼MjH,aGv&T-R8y+FxKۅ|Lѥzȣ|{^bVjSѵ eȴ|q&uwɖDlEQIp2Z$s=u{e 'R0[KMAwSO&G}W{E쎳᛼97ZM̿סoqj8ޚ`cf("^+#ql(/dXvT\ԧX>1B 6 ñEš5Yї1^Ͼ<ues7"߿94[Fbjٓl#-هt8/MW&^%"bMV @…#"6x`m1c ?'n^g[:feY6]h<ەBcY%LbN3µ yE"SVo9>i}6'Iju_9RGtW$z"U߳Z,((HLU뺞$ѺVs],q;L<־O8Z8冪K W*ݠ/3VY"o:eiZɠd i22JN̐@Zȡ|Сd^D Tqp:G87|]r%p#d-4r&[r?p[5Ɗ,q 'u)UB_XO}4 ݻnZsqhW5$VL2 3y!VEfK.,HeX*Ը5zoCYb{@1aϙ;b,,1v@-!d9 g2)i\`ځe N-5Bn|_ry˦CF±:8 Gh`X_,M57 $KM,ǎd)`gI:-1~S>p+BԔ 1n:ĎdJ ,-P .eJ .ϧIȣc 2ELi m꾢8? 1mTNYNp1 rA?I?o,-I1S'i XȲ$^mrWW%R; Ěyn n>O\<npib0hۼ'kyr.zҳƒFo^(\N1i]wۙiS;7]L'[!Pγx Yګ-(41s-I{r8hm2iKCdYub}ܾE'K\EF.SNs6T7uYdnCŽ^E'Kݴde[AH3j&on9=U* IIb%6b@1MTM~/R.,L $hרhⰘДkV dOJ .{V5g/`  xҍ ^ 䔺EN ʥiN՟f ٥F)-R4>75yEpl3x,"h{ ^ w dJM/#оÒPm" x݅_d<~~9]\bt9Y<#,I6"%av=K_thusʳKbDz-y7C5HC)V7ۘT{iB(N/9,:y RTd.,TW1 q,_r-AjQxG9PhÔJ&1[z ־/wjzDE1E+bA7noeb|I|P)6ӻ1pG"> 4`20b{zNTO?$8c2EhΈU7$(' bl>ovƅTXloδ86HS*4xoGvU^jM ܘkD>͘;E@١^d&3(/Ag~J^ːFuϔ L&8&-{5EesimNu͍5;YBeGR[WשּB0ѳubQ(b~.bb60j=xdJ/rDw|Xaq_(:r@`Nu]rOb}֊0m{'Xh"\~aZr!{ZbĽLyyyShpnC9\ˁ-0&a^kQBڱTqWŻ 9{y3Iҝ<]fY))ܛZٔj?lXp$r.tDB\5ҶFPqQɁwoط4֢Rʈ3^q7d1Ds) TCϞ3T')*^|2}GpXՂrV|`,f!.%ieE]*ssWa w,{v;.'pSS iyoe=tE>Y|WIQh_hiMg)dLhER7|˱?Qu%eE:QX|:F}OEkvL(J`+p#V zqwFk x@1lIb6i5X:Ƣ,mW1aS߮yߖ%g40 {^\z=x.ה8)3%f4oC\^j ;Όae:$Q"`%bcdK.1ͩD[ØaRyʅHb: sY3B;:U6 )sYz`QQXS_"| AeGw7q5~+nkKf]^?յKQɠ++ulͿTv RRMGcqSzd@ ESiChn~p b/Rm!5I'i`#$-lMV1W`}s̥ (arFRQG"=@l&x ă!^8k1p[2TFw|7 [HF)*eЦ?=Py,4:8PN,=Qơw%_ԎKvJ#Mn/j7K'h8)ݰoUrccS\(ru%2MF%Gh7q걪DԹk R=KIf1(+@԰Sk ^HnK+ץ 3״\H~@A- H6ep*gvs6~w/E*Z-q6cy"nc}eN0,6>a`xŝoW;ES3fSLY 9&pwM;Y]X>%m# ӃEհ3vm,/ұ H\u",'JXt,JE5c 1u`-r %hu@wtZa'\q}D`Ɯ1\ti ߟ 9UviәKjƟ+ KÜ,,^E&=>oV8_}!gz#ߑDz,Ɖ|yYRKG|]Im )LPa6/PLPĆV yڛKʄtZKp|L*h 9f82lE?΁BCD} dwYg;][u>{aɣ/t$Q QNβ{qV25a!F<* A]Q hP6D ,(q]#d~v/ERyۯV*oi<~{wtu;Yotg;V:U*haGGi#<,ܟn*vCﺡrй *,su,bvύl_tƠM(w_;_"P*-Ӝ,;gt6t z)#yd I $}@3u:t,.):4E{G{t)Usl86uY70a8awӽC +-fx 8rH˟ MgYo<&>A4E! ;7Tf?8rhtnr2uAnY1Xr Oa)KX* u샌(x:]q^y 'my7:~)8n6} XfV]r`A{iaEe&/y{ ig:f=ҧ&$CV,8.7q~SPKe4O @Z*Or4 /Lů(fg =IMx6 Zh4_8̭ܺ: ?{H.π*C0y{l0M8"g>EOO/>^pvbao?9>jQ)AG-&t-3/мQ@r:ftҝ">L "øȳ007r./t xg!hӸ烲TT(*'x%]@ˁ.05@t`2^Rsz.(HLe%TFde駉JNQ@e N <hQw<".]Y'Z-QЉr ɞ$f[(()ԧ∊.(!1nq 9幂*?#̺A@0&"dȉ-"kjAt|r9 eM/ Jˉ" 4̥C5ٟKmF#NgG}?d}~dž!N&#|S?Mq4jn ty e:D%Ym9>-B slU3g1򻄍icug(0?c錚Kyx?Hp$t/ 3T P͐ ix I kw/%gDa^D܍FSYotr,-KG}Kw4su=Xg%X@,ϴO2] IrAD^.4 ,+gJ΅Č.T3px#HABeU)=g8,׷<͌td@/Qz0v̌Tn,H܋-M N,դKRupb0LdUC`1rQYçO\ۡ(7XF..ϤK&Omק2{{hihz ^1hhՄ{6araʌ rNJv <=Aws@Lv]m,~Ga7 H |aavEH)CJ[EQlM> DDQ4Fh:4`DĶ:Ruʦ|X4y7Ek|dy6..?ҩ,c#A|6sI I^`οEJy2T" KQP "AF]ML]B=(@Zdi-b ~2U:RS8!21v#yË ?8'`tCLr8|RԷV uA{0eBi׏*Fp 4]̱\ŲR!J]Te)Ta4ƣ!E @kp,oA88.~3/#XOHi2@t\`T.0V]g~Mr7<;>wUjLYa*Y|(w9z0I҈ޏOz9UHzk4XYR2wy# ) "u,xs}L╠FN-̾;/P;^@I L%ohXX $jߵS0fM8+G"OWK>h&slgc>}/Y^S?#Iln "X$:sgދ5x-gX_(2Rz6$=2`׸(<͓f 6Iu:(<@0Hd:uу" 9* 9).b0 wƲo=yg-Z7vf\MyT3[en*\R D"̀&$i\uxVӖ?tdɆ7b'ZǠ=/r7;!ɻ@K1˽ʼ.Wm6|#j,W`ݽ҆uXn 7,B|(3q#0(V%6J>a}!ɢGEȽa>eEWEOd ekQDpgH"yDtxFCG&AɊ&p=#VE ]E=^M>ﲰô _žZS;l zS-VCQˠ<')/uH &$u1DC =sg kYV r/Unӛ I7̞2q\kQ;*GObRCAUX&aƟj)]KeͤF P1^;b 7aݗe 5F,{0&џhrz?}R.iҽe.IjBiFe?+"Q7uYÿ#r;*G#(I: nv-STW()(D_DmJ0i^j1a183u7!Y(HLU~0,G"wp:`l{8;ZξXxqHWab[<>sX0otw`|.-/wHTaH6^Ķ]Fa4uwUӴi6~]*in6!z :“;(B;6C78JL PǙ!TE^餜*ڮeq\lԡSq}yp@&JSj/!e*G2EqxF#J,P̮G0,TJJ't?X=XTBz H17 ̒C@ô80=YP< 'iW8Ϫcsd"g2skcIo 6uWVJiXN#m>9W]NSņNq 1V@Q P3~F'lʍfS3eTYwvv(C0Oaҡ֒ڒ6P|2YqG.:OBT]bǍXϑ`1+)v1i XTCug7GYgHm3812.+Qz Jے s3+J `j;ะ4۞feq`QWMTf=)س)N!+1a1hĢ~(RZVZ8~.m(8q1=9-]T]) A&G0\0H37e4)*F `"rO̳Fek5$Z5ROk B$A8BE֪ke(eLHKKVbQ8O,K))Tk\vht?+Z; 1i# $,z/݅$ f}"E(Nh2 xlfa$oVrڇC\ n:%;fMk Ofb>F%}F%[X`mF7LF Zq:kut(@l:pY&;Aޙ8^Oժd,a9^f٪H 4ߌ&Ҏ |LuVpeu b[%\ѽaHihGO+Muqy}¡VǶal IiCd/uy)}iPScj!lKԲ|Ϻ6TV-tg.{ ԛSP YVa%]~ :y@GWqr`]"~|WXx=A'Sܣ2qzju `RLu\]ue>Ghaio'djPƼi08ʌ ʙ.RaPh}<# EJ)Y굚@R.wP 41"X:(mi(n):}ho)1l<"6T2$ t!USlxm)p:i~n74Vjq'J&ڠM Kd37ɱ8,p| gLQ)1Mxgx$OE ʠ BZg&r[jxBd6RGhKn)deSr^(P]H׿A{h" KU2Q x͘?]neL2Ld<,0m ,X3rBbNݩ#K1,r`Y?%"KX2 ˵nPHg@`^,Vd*.Rn" IZx 'ICؘG% 5/'hG&jX ^f@RqWq^/>e| -Qo*GEKv8!rk(ۆV$tnt ͘"(< 0YsVc.*XҧdZQDa{ &&lM9F#!!jErS|[N40OciyD_/BMHZwBt\Hδx{2W!JoV_E\1 V`(&7Uo "ict!ғEFUaM6#+%G>2Aw ]%Ú8vCCAQR^t\g,]**"8܍Ķ`,Y_v諪..G$4U@](PL}f#ᶱ160(KO˥b3,W/;,ej4} *ig%s%LJɣ_qxU!x\/[L+GF0:=o*6G;X,2GC*h&Y\{'ezn@VEL~Pf`p/_ 4U' !^Y[ ѹ'mtq[98'X25㡋wr7X.fe:1ns5t%9Z3̆Յc@2a}Ӧ:2Ź'ysžVD7<>ٺê[jhѐiE d李Tdz.a8a"Ef6蟋K-B_[ S@lt =r#%vJHݫ ZZĝSd]_ea95'GdW_bb혱Ozb|ݔwO%X>FKӸ-}58MILF'|;윞 Ȱ( K]8$!u|mnee_sTԎ>t`pH{(LyƖN *йב(tQ9Qo^qp!>6T?!n[ߺV2}RݬZ4oA%g4Ok'o8\5Qe0;zrxmC$[nu4xq)3e4,+~wM:ihvOe'`A܄d*4Ӆ%j7FR1 HN#>|s-]6EK:JQf^CF#DM !}\E0%NܲbɲGĎvkv5FTMxP|T^60jѭ6]q`!8b9C$mxi z1=W? .mD5.>,̻΅M:)ǛYnr {qw.`W eВA]@AAY.LrHo{ u9IZI0/1Q>*92X Q+nbsqbzsb=+j-u郖F}*r؂cY$7OD?5Uu!)o$r4ο|ZЯA\R>T9kЫg lW!)i&i5foe[$5TUR0iz.Cd|N39(_Y4 XG !/Fc(,i19p!@@2eE5a. s ,0,@Qfm$ B\Y EN\ omYFtFa+J?EdYT1a l´SY(K]~ܑ^1yذuFnu/V['VrKrrD2q4Sp᪽=庪$KF؝ Pm{3ަ 1SS4:!-&㘰FjYE 0571p8Q? Q>P*4%40N-J ڬ%E "C$:YUD=8-7]~#C,ѨfXWQl _][%tV舑:Qs#s:`@j.%kdye>Ozu޲y[`ŭLK(ߩOϮҊ8׉t|8iT#LT',s2Yq|ƑՕoZ'onMgH޽/q'ӲK$HED$I֋= ag6lgLb)#y|gU%%c$X2#1xKI4-k{s,rx?+Ņ"{.{ <(b?wxVյ^#2?ҙbC/"5mN"[TYZ(P 7s/>e3$C65#2֩|d_9'̧^$<׽MŵLPRd6{mվq)ӊqݢ8tvIs ղ|R8Rq˳Ǿ{$bR䨞b""cqW6HK+:Į{:P=q\+gln}'PC6"tȆ"m)49 3rp`A9E0_xCT@reU'ZQ׿~-KA 2PҢD0w7t)j' ChYf6mݻ!,/řUVUV}i.F WJ"gz44%23?[V@W5m4Y-VkHθ H*`j. >Paqpph,^ 9m$_ln <A'gd:l9THDD;|+o^JOFRv͉ 4Xś:) F"^07sy7Tu WnD`m1QEE"fv|52AlnK'gʯ?+ 7$!n(]vaV"JC"^h=.sey5Q St ik%ᓞ}ɝynZ^NխbjPFkb-F5r\oڹͫچܘn|n>˔jbP5,l[(P̧GM":h<j[XQ́rxxTGx,;O8цl0N :qx"YPM`pwwbJM.ޞ#Ŝ8 m ]\Z524[+J!e&warߠ4yj =P  '0|sӅ&3v 2N{T}Vkp..D{M5U>`m%ulNNhϝ9s(h/ Kʚ`n$7;6_*d`y0B$B@k7;vJ h1v>NK%m̻Xϧ *TvJ Kˤ Ty{U;'-TyÑOz(CDs.Œ3e?xH6+1H4$*B,PXN7 n+>=ӎ܆? O+y2bGnx}-B&srmxKX'zCTVSIsy`ʪg2КDq+!Y+אC~f"&Q1SKgt̎XDDɆU8RFQ6Suo˔N?!waΞF81$]{Ac:-xX+M^ "$*Q<r$i(|ADC%/֔t1]> Ҳ;*@ZѲ8>*/^p(%=*F/Dk= ❠U7T yIDivۋՆrƗY\dA659cploHxBA7n|]<1"c:~x~?(zI-OOW 2㝭+@ѾeęcVRT7g\`J?ekS\yHYB9j4eB0ZGM zH'xWta=EkECow#գmQ |{h;@Y89"h-TYZ‡U-*bBLwKk67+q8O_R[Q GGxOq|myX(}w2twÍx^:Qi-5:BHf&Kg^ xJò:%=,370>9UésÛS"ʪxX>CojAoyi~L[XeRPv a29`"9taY+) ŷ߄_}[ܣ`1jr5M08bz0#FoḤJ&ʳnͦL* ngiY%{ H㆙cmth~w%;JҨor]-}yL"]2,s.,'5S{Yr,r`9t^RkI. v*ϥ sfs5:x4a>Ӊak\PD2Y9|%wX' ^~ q :a\Йs>e_FH{ X-IyTJgA4EXTYqݎQ%5k/ev>Yԡ5Y4?ȝ?%H @sr:%aw7MySƠ9ݯs*=Xjdt@9wdz$Ⱉ0 zsl3oɢohNlu8E]1%)^wiPe}c'^]5Gvõ k3BD1nҔՎh"{-*6hIވ[99lyJ_2`DA5ܵՑ.HF=Ȼw%F|Rm_ J$0ZۭdX= [/1SV> K9yC$:Y}8bG[B GZ ^)CI!oA#g߄X_CqZi^eZq+&Ko%UjZHa"Yj/2e )>H Ӵ1i(ISi_kti+:5 ]Vƭ)YHK:[\\pbN+7mqMAeJ9oP5dfXHq7-X;(YtaO{q2:$ZK$e,T؋B8m`F쉁C¢4Xu#5)8 jӶ412GC$9G\|0Yk֚A-8aA(`y,@~y $c|GV,8P06KPN ՊA.=9aXx.Nf)]p"no-ٸ܊ZoqP bo6u t& LA6!=f+'5{GfR+V\l&Y}r2F(/2+'C?8 A~zplav+Qn5Qzmu_4$?r].=]@S@dCE䱲ݲ&;LB @y߲L=˶_~p 6H| 2.&^?==2K? Ľ `-&463zMp,%q~ݞҙ`lEz /J~(Ueˆ& KB=z􄢜'Piޢb6TT &t01ڶ|䃭t%"sǤ娳<al0[qŸvxn$O67ANj٬mmA䶕盆nr?IBC@MoDǧ&M8_Y) \meR"H Xqe)WN|<]$8pǙqnRvb;2y!do5B,rg]1bۧ'Y )ނw Y1+pݶW'ߞ/gd:>kOo+J4%>KYgY4&Z2:(Wz5h&ONH.8z ^ "$|Nrijg1 I쓹3]N9uVֈf%m^[=ǯl\2Wa #EΞw܆t;,0VS کZ]]r @B', Y4+(#X^Q>Vu܍65|9GawUFAqrc.'pC8LAŝ}螋c7;R?+<\"`t0Ҙ%qX drJe<,/źcݾȔNY d+8#ǒcdt\u]OuRpų@(ԻV@L,'aQN)!1}|:H2$*Pԥm_u9"^2H- ^+xmJe(\B~~Kb8/c 3GDBA]+ׅc8*0MWoҹAT|0e~0a~ř\tadQ²4"t݀'Wb 3nape+替{W{nij}SZOU?{jܟ>Z[D԰]{4!pS6HTA(@k C$pC).%'zMrAnU hLp"fi1?I1wJ0t@EoX(0\*jDWFO^?]:C1wxUeqE%a񪂻Q+WR=K g?䫏+T]Y @[y472|,kEXh[Ż?q4 V,< \C CQhQKyduͭ^LeLP5E ]ɴ֨i4p+$<&ȻQH-n<Џ% gaP מ}1W`> o}h Bh=,H㫶jٺ\hX4}ȡAq# FOküc.nB#Pv%ʿI90#{o8bY.(cQWQVk0=~2'PlaݝF BCgenometools-1.5.1/testdata/example_1.sorted.bam.bai000066400000000000000000000002601211610345200222400ustar00rootroot00000000000000BAII52J525I2wJ2w2genometools-1.5.1/testdata/fail_arrow_width.style000066400000000000000000000047541211610345200222750ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = function(gn) fail() -- nonexistant call should fail here end, stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_background_color.style000066400000000000000000000050021211610345200232440ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = function(gn) fail() -- nonexistant call should fail here end, }, } genometools-1.5.1/testdata/fail_block_caption_font_size.style000066400000000000000000000050251211610345200246230ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = function(gn) fail() -- nonexistant call should fail here end, block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_block_caption_space.style000066400000000000000000000047731211610345200237270ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = function(gn) fail() -- nonexistant call should fail here end, track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_collapse.style000066400000000000000000000050421211610345200215350ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = function(gn) fail() -- nonexistant call should fail here end, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_default_stroke_color.style000066400000000000000000000050021211610345200241400ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = function(gn) fail() -- nonexistant call should fail here end, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_fill.style000066400000000000000000000050111211610345200206550ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = function(gn) fail() -- nonexistant call should fail here end, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_group_by_parent.style000066400000000000000000000047211211610345200231350ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, group_by_parent = function(gn) fail() -- nonexistant call should fail here end, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -- Defines various format options for drawing. format = { max_num_lines = 10, split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_max_capt_show_width.style000066400000000000000000000050441211610345200237700ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= function(gn) fail() -- nonexistant call should fail here end, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_max_num_lines.style000066400000000000000000000047251211610345200226000ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks }, -- Defines various format options for drawing. format = { max_num_lines = function(gn) fail() -- nonexistant call should fail here end, split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_max_show_width.style000066400000000000000000000050441211610345200227610ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = function(gn) fail() -- nonexistant call should fail here end, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_min_len_block.style000066400000000000000000000047321211610345200225330ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = function(gn) fail() -- nonexistant call should fail here end, track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_ruler_text.style000066400000000000000000000047751211610345200221440ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = function(gn) fail() -- nonexistant call should fail here end, ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_rulerfontsize.style000066400000000000000000000050151211610345200226460ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = function(gn) fail() -- nonexistant call should fail here end, ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_rulerspace.style000066400000000000000000000047761211610345200221150ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = function(gn) fail() -- nonexistant call should fail here end, block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_show_bar_height.style000066400000000000000000000047521211610345200230760ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = function(gn) fail() -- nonexistant call should fail here end, bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_show_block_captions.style000066400000000000000000000050071211610345200237660ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = function(gn) fail() -- nonexistant call should fail here end, show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_show_grid.style000066400000000000000000000047431211610345200217270ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = function(gn) fail() -- nonexistant call should fail here end, min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_show_margins.style000066400000000000000000000047311211610345200224370ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = function(gn) fail() -- nonexistant call should fail here end, bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_show_track_captions.style000066400000000000000000000047771211610345200240150ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = function(gn) fail() -- nonexistant call should fail here end, margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_split.style000066400000000000000000000047561211610345200211010ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = function() fail() -- nonexistant call should fail here end, show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_stroke.style000066400000000000000000000047741211610345200212550ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = function(gn) fail() -- nonexistant call should fail here end, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_stroke_width.style000066400000000000000000000047711211610345200224510ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = function(gn) fail() -- nonexistant call should fail here end, unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_style.style000066400000000000000000000050421211610345200210730ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = function(gn) fail() -- nonexistant call should fail here end, -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_track_caption_font_size.style000066400000000000000000000050251211610345200246350ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = function(gn) fail() -- nonexistant call should fail here end, track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_track_caption_space.style000066400000000000000000000047751211610345200237430ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = function(gn) fail() -- nonexistant call should fail here end, scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_track_title_color.style000066400000000000000000000050001211610345200234300ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = function() fail() -- nonexistant call should fail here end, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_track_vspace.style000066400000000000000000000050021211610345200223740ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = function(gn) fail() -- nonexistant call should fail here end, ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_unit.style000066400000000000000000000047451211610345200207230ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = function(gn) fail() -- nonexistant call should fail here end, ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fail_vspace.style000066400000000000000000000047471211610345200212270ustar00rootroot00000000000000style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=0.0, blue=0.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = function(gn) fail() -- nonexistant call should fail here end, track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/fasta_seq.gff3000066400000000000000000000000531211610345200203700ustar00rootroot00000000000000##gff-version 3 ##FASTA >seq1 cttctgggcg genometools-1.5.1/testdata/fastq_long.fastq000066400000000000000000003237621211610345200210670ustar00rootroot00000000000000@SRR015141.1 WICMT-SOLEXA_209LAAAXX_8_1_891_487 length=26 GAAACATTACCAGTTCTGTTTCATTT +SRR015141.1 WICMT-SOLEXA_209LAAAXX_8_1_891_487 length=26 IIIIIIIIIIIIH" @SRR015141.23 WICMT-SOLEXA_209LAAAXX_8_1_878_659 length=26 GGGCCTGGGGACCTAGGATGGTCAGA +SRR015141.23 WICMT-SOLEXA_209LAAAXX_8_1_878_659 length=26 IIIIIIIIIIIAIIII<9II2I>;.; @SRR015141.24 WICMT-SOLEXA_209LAAAXX_8_1_920_639 length=26 GTAATTTACCCATTACGGTGCATGAG +SRR015141.24 WICMT-SOLEXA_209LAAAXX_8_1_920_639 length=26 IIIIIIIIIIIIIDIIII+IIII$I2 @SRR015141.25 WICMT-SOLEXA_209LAAAXX_8_1_913_678 length=26 GAGACAGATTCTTTCCTCTGATTTTC +SRR015141.25 WICMT-SOLEXA_209LAAAXX_8_1_913_678 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.26 WICMT-SOLEXA_209LAAAXX_8_1_938_406 length=26 GGGTGGGGGTGGTGGAGTTGCGGGGG +SRR015141.26 WICMT-SOLEXA_209LAAAXX_8_1_938_406 length=26 IIIIIIIIIII1"IIHGII,I7"&C# @SRR015141.27 WICMT-SOLEXA_209LAAAXX_8_1_885_743 length=26 GAATTCATCTCTGGAAAATCTTATTA +SRR015141.27 WICMT-SOLEXA_209LAAAXX_8_1_885_743 length=26 IIIIIIIIIIII?3HIEIIEIIAI-G @SRR015141.28 WICMT-SOLEXA_209LAAAXX_8_1_886_705 length=26 GTGAGACAGTCCTTGGACCTTCACAT +SRR015141.28 WICMT-SOLEXA_209LAAAXX_8_1_886_705 length=26 IIIIIIIIIIIAII9<,/EII(E6BI @SRR015141.29 WICMT-SOLEXA_209LAAAXX_8_1_897_707 length=26 GAAGAGTTACTCTCAGATGATCCCAG +SRR015141.29 WICMT-SOLEXA_209LAAAXX_8_1_897_707 length=26 IIIIIIIIIIIIIIIIIIIIIIIIID @SRR015141.30 WICMT-SOLEXA_209LAAAXX_8_1_943_713 length=26 GATAATACTTTCTTTATAAATAATTT +SRR015141.30 WICMT-SOLEXA_209LAAAXX_8_1_943_713 length=26 IIII%IIIIIIIIII#III1IIIIII @SRR015141.31 WICMT-SOLEXA_209LAAAXX_8_1_943_458 length=26 GAAGATCAGCCTTAGTGCATGGTGAT +SRR015141.31 WICMT-SOLEXA_209LAAAXX_8_1_943_458 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.32 WICMT-SOLEXA_209LAAAXX_8_1_920_509 length=26 GATGATTGTATGTTGGCACTTTCTCC +SRR015141.32 WICMT-SOLEXA_209LAAAXX_8_1_920_509 length=26 IIIIIIIIIIIIII".IIIIICIIII @SRR015141.33 WICMT-SOLEXA_209LAAAXX_8_1_920_626 length=26 GTGGAACAACAATATGAACTAACCAT +SRR015141.33 WICMT-SOLEXA_209LAAAXX_8_1_920_626 length=26 IIIIIIIIIIIIIII)IIIIIIIIII @SRR015141.34 WICMT-SOLEXA_209LAAAXX_8_1_920_588 length=26 GCAACTAATGTCTCGTTTCCTTCCTC +SRR015141.34 WICMT-SOLEXA_209LAAAXX_8_1_920_588 length=26 IIIIIIIIIIIIIIIIIIIIIIIII< @SRR015141.35 WICMT-SOLEXA_209LAAAXX_8_1_894_696 length=26 GAAGTCCTCAGCTGAGATGCAGTCAT +SRR015141.35 WICMT-SOLEXA_209LAAAXX_8_1_894_696 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.36 WICMT-SOLEXA_209LAAAXX_8_1_915_879 length=26 TTTCGTAAGCTTTCTTGTATTCTATT +SRR015141.36 WICMT-SOLEXA_209LAAAXX_8_1_915_879 length=26 IIIIIIIIIIIIIIIFIICIIII#II @SRR015141.37 WICMT-SOLEXA_209LAAAXX_8_1_917_551 length=26 GTGAAAACCTTAGCCAGAAAAATACT +SRR015141.37 WICMT-SOLEXA_209LAAAXX_8_1_917_551 length=26 IIIIIIIIIIII.III;IIIIIIIII @SRR015141.38 WICMT-SOLEXA_209LAAAXX_8_1_882_423 length=26 GTCAGAGAAGGGAGAGAGGTTTGGTG +SRR015141.38 WICMT-SOLEXA_209LAAAXX_8_1_882_423 length=26 IIIIIIIIIIIIIIIIIIIIII,AI) @SRR015141.39 WICMT-SOLEXA_209LAAAXX_8_1_917_956 length=26 GGTCNNNNNNNNNNNNNNNNNNNNNN +SRR015141.39 WICMT-SOLEXA_209LAAAXX_8_1_917_956 length=26 IIII!!!!!!!!!!!!!!!!!!!!!! @SRR015141.40 WICMT-SOLEXA_209LAAAXX_8_1_878_554 length=26 GGATTTCTGAGTTTGATGTCAGCCTG +SRR015141.40 WICMT-SOLEXA_209LAAAXX_8_1_878_554 length=26 IIIIIIIIIIIIII$I%;IEI#91I& @SRR015141.41 WICMT-SOLEXA_209LAAAXX_8_1_925_433 length=26 GTTATGGCGCATGAATCCAAATCACA +SRR015141.41 WICMT-SOLEXA_209LAAAXX_8_1_925_433 length=26 IIIIIIIIIIII.IIIIIIIIIIIII @SRR015141.42 WICMT-SOLEXA_209LAAAXX_8_1_885_708 length=26 GGGAAAAGGCCCACTTATAGGACACA +SRR015141.42 WICMT-SOLEXA_209LAAAXX_8_1_885_708 length=26 IIIIIIIIIIIIIIIIFIIIIG8A9/ @SRR015141.43 WICMT-SOLEXA_209LAAAXX_8_1_916_212 length=26 GACTCATGGGAAACGAATGTCTGTTT +SRR015141.43 WICMT-SOLEXA_209LAAAXX_8_1_916_212 length=26 IIIIIIIIIIIIII9IIIIIIIIIII @SRR015141.44 WICMT-SOLEXA_209LAAAXX_8_1_929_382 length=26 GACGTTGACAACGTGGAATAGGAGCA +SRR015141.44 WICMT-SOLEXA_209LAAAXX_8_1_929_382 length=26 IIIIIIIIIIIIIIIIIIII3II&II @SRR015141.45 WICMT-SOLEXA_209LAAAXX_8_1_926_500 length=26 GACTCTGAGTGAAACTCGGAGGCTCT +SRR015141.45 WICMT-SOLEXA_209LAAAXX_8_1_926_500 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.46 WICMT-SOLEXA_209LAAAXX_8_1_880_600 length=26 TGGGTGTGACATGAAAAGGTTTTACC +SRR015141.46 WICMT-SOLEXA_209LAAAXX_8_1_880_600 length=26 IIIIIIIIIIIIIIIII@)IIIIH9: @SRR015141.47 WICMT-SOLEXA_209LAAAXX_8_1_882_542 length=26 GGTTCAAACTCAAATTCTTAGGCTTT +SRR015141.47 WICMT-SOLEXA_209LAAAXX_8_1_882_542 length=26 IIIIIIIIIIIIIIIIIIII',BII+ @SRR015141.48 WICMT-SOLEXA_209LAAAXX_8_1_896_744 length=26 GGGTTTCTGGGTTAAAGGAGCCTGGC +SRR015141.48 WICMT-SOLEXA_209LAAAXX_8_1_896_744 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.49 WICMT-SOLEXA_209LAAAXX_8_1_899_526 length=26 GGTCTCAACAGCCAGCGGCACCAAGT +SRR015141.49 WICMT-SOLEXA_209LAAAXX_8_1_899_526 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.50 WICMT-SOLEXA_209LAAAXX_8_1_879_606 length=26 TACATTAAATAAATAAATAAATAAAT +SRR015141.50 WICMT-SOLEXA_209LAAAXX_8_1_879_606 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.51 WICMT-SOLEXA_209LAAAXX_8_1_904_568 length=26 GGCTCACAGCACCTGGCTGCTTCTCA +SRR015141.51 WICMT-SOLEXA_209LAAAXX_8_1_904_568 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.52 WICMT-SOLEXA_209LAAAXX_8_1_945_450 length=26 GAGAAATGCACACAAAAGGACCTGGA +SRR015141.52 WICMT-SOLEXA_209LAAAXX_8_1_945_450 length=26 IIIIIIIIIIIIIIIIIIIIIIII.I @SRR015141.53 WICMT-SOLEXA_209LAAAXX_8_1_882_471 length=26 GTTCAGCAAGATAATATAACAGTTGA +SRR015141.53 WICMT-SOLEXA_209LAAAXX_8_1_882_471 length=26 IIIIIIIIIIIIIIIIIIIBI)$I': @SRR015141.54 WICMT-SOLEXA_209LAAAXX_8_1_903_472 length=26 GAGTGCTCTATCTGCATGTACACCTG +SRR015141.54 WICMT-SOLEXA_209LAAAXX_8_1_903_472 length=26 IIIIIIIIIIIIIIIIIIIIIIIII2 @SRR015141.55 WICMT-SOLEXA_209LAAAXX_8_1_895_668 length=26 GCTGGGCAGACATTGTGTTTTAAAGC +SRR015141.55 WICMT-SOLEXA_209LAAAXX_8_1_895_668 length=26 IIIIIII-6III'II,I;:=II @SRR015141.58 WICMT-SOLEXA_209LAAAXX_8_1_927_488 length=26 TCACGAGCGTTTGTGATTTCTCATCA +SRR015141.58 WICMT-SOLEXA_209LAAAXX_8_1_927_488 length=26 IIIIIIIIIIIIIIIIII2IIIIIII @SRR015141.59 WICMT-SOLEXA_209LAAAXX_8_1_917_350 length=26 AATTTTTTTAAGGAGCAGTTGTAATT +SRR015141.59 WICMT-SOLEXA_209LAAAXX_8_1_917_350 length=26 IIIIIIIIIIIIIIIIIIIIIIII9I @SRR015141.60 WICMT-SOLEXA_209LAAAXX_8_1_876_720 length=26 ACCAAGGTATCATTTAGAATAGTTTT +SRR015141.60 WICMT-SOLEXA_209LAAAXX_8_1_876_720 length=26 IIIIIIIIIIIIII"F<9@I--I&II @SRR015141.61 WICMT-SOLEXA_209LAAAXX_8_1_880_861 length=26 TCCTTCTAAGGTGATTGTTCTTTCTT +SRR015141.61 WICMT-SOLEXA_209LAAAXX_8_1_880_861 length=26 IIIIIIIIIIIIIIIIII%II,I"II @SRR015141.62 WICMT-SOLEXA_209LAAAXX_8_1_936_720 length=26 GGGGCATCTTCTGGATATATGCCCAT +SRR015141.62 WICMT-SOLEXA_209LAAAXX_8_1_936_720 length=26 IIIIIIIIIIIIIIIIIIII5IIII' @SRR015141.63 WICMT-SOLEXA_209LAAAXX_8_1_895_423 length=26 GTTGGCTGAGAGGAAAAAGCAGAGCT +SRR015141.63 WICMT-SOLEXA_209LAAAXX_8_1_895_423 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.64 WICMT-SOLEXA_209LAAAXX_8_1_905_700 length=26 GGAAATGGCACTATTAGGTGGTGTGG +SRR015141.64 WICMT-SOLEXA_209LAAAXX_8_1_905_700 length=26 IIIIIIIIIIIIIIIIIIIIIIIII> @SRR015141.65 WICMT-SOLEXA_209LAAAXX_8_1_908_663 length=26 TCTGAGTATCTTCAGCAGATAGAGAT +SRR015141.65 WICMT-SOLEXA_209LAAAXX_8_1_908_663 length=26 IIIIIIIIIII9IIIIIIIIIIIIII @SRR015141.66 WICMT-SOLEXA_209LAAAXX_8_1_935_598 length=26 TGTAAAAGACATTGTAATTTGCTGCA +SRR015141.66 WICMT-SOLEXA_209LAAAXX_8_1_935_598 length=26 IIIIIIIIIIIIIIIIIIII8II"IF @SRR015141.67 WICMT-SOLEXA_209LAAAXX_8_1_901_549 length=26 GTGTGGGAATATTTTGCATTTTTTTT +SRR015141.67 WICMT-SOLEXA_209LAAAXX_8_1_901_549 length=26 IIIIIIIIIIIIIII-IBIIIIIII5 @SRR015141.68 WICMT-SOLEXA_209LAAAXX_8_1_909_440 length=26 GTCTATCAGATAGTTATGATTCTTAA +SRR015141.68 WICMT-SOLEXA_209LAAAXX_8_1_909_440 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.69 WICMT-SOLEXA_209LAAAXX_8_1_890_595 length=26 GTACTTGGAGTAAAGGCGTGCGTCAC +SRR015141.69 WICMT-SOLEXA_209LAAAXX_8_1_890_595 length=26 III(IIIIII/IIII(+9I.08I0/- @SRR015141.70 WICMT-SOLEXA_209LAAAXX_8_1_887_685 length=26 GGGCGGGGGTGGTATTTTAGGAGGCT +SRR015141.70 WICMT-SOLEXA_209LAAAXX_8_1_887_685 length=26 IIIIIIIII5III @SRR015141.116 WICMT-SOLEXA_209LAAAXX_8_1_909_857 length=26 GAACACTCACAGGTAACACATTTATT +SRR015141.116 WICMT-SOLEXA_209LAAAXX_8_1_909_857 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.117 WICMT-SOLEXA_209LAAAXX_8_1_923_373 length=26 TCCTTTCTTATTCTCTTGTAATCATT +SRR015141.117 WICMT-SOLEXA_209LAAAXX_8_1_923_373 length=26 IIIIIIIIII#IIIII.$IIIIIIII @SRR015141.118 WICMT-SOLEXA_209LAAAXX_8_1_800_483 length=26 GTACTAGAAGGTGTTATGTTTACTAC +SRR015141.118 WICMT-SOLEXA_209LAAAXX_8_1_800_483 length=26 IIICIIBIII@IIII2I+I?II?I'( @SRR015141.119 WICMT-SOLEXA_209LAAAXX_8_1_937_561 length=26 GCTTTACCCGTGCTTCTTCCATTTAT +SRR015141.119 WICMT-SOLEXA_209LAAAXX_8_1_937_561 length=26 ICII&&)IIIIIIIIIIIIIIII-HI @SRR015141.120 WICMT-SOLEXA_209LAAAXX_8_1_930_907 length=26 TTCTGTGTGCATTTCTCATTTTTCTC +SRR015141.120 WICMT-SOLEXA_209LAAAXX_8_1_930_907 length=26 IIIIIIIIIIIIIIIIIIIIIIII9I @SRR015141.121 WICMT-SOLEXA_209LAAAXX_8_1_883_454 length=26 TAATTCCAGTTCTTCACAAACTATTC +SRR015141.121 WICMT-SOLEXA_209LAAAXX_8_1_883_454 length=26 IIIIIIIIIIIEIIIIEIII5ICIIF @SRR015141.122 WICMT-SOLEXA_209LAAAXX_8_1_905_398 length=26 TTTGAGCCTGAAGATTTTTTTGTGGT +SRR015141.122 WICMT-SOLEXA_209LAAAXX_8_1_905_398 length=26 IIIIDI3IIIFAII@ @SRR015141.136 WICMT-SOLEXA_209LAAAXX_8_1_891_687 length=26 GTGGTTTTCTTCTAACGGGCAATGTT +SRR015141.136 WICMT-SOLEXA_209LAAAXX_8_1_891_687 length=26 IIIIIIIIIII:IIIII @SRR015141.152 WICMT-SOLEXA_209LAAAXX_8_1_847_718 length=26 GTCCAAGTTATCATTGTGTAGGTTTT +SRR015141.152 WICMT-SOLEXA_209LAAAXX_8_1_847_718 length=26 IIIIIIIIIII;GIIII=IAI1)I+I @SRR015141.153 WICMT-SOLEXA_209LAAAXX_8_1_908_513 length=26 GTGGATCTTTGCTCCCTAGAGTCCTT +SRR015141.153 WICMT-SOLEXA_209LAAAXX_8_1_908_513 length=26 IIIIIIIIIIIII?&III&%,=IDII @SRR015141.154 WICMT-SOLEXA_209LAAAXX_8_1_896_688 length=26 TAGCATTCTTAACAAAAACTGTTTAA +SRR015141.154 WICMT-SOLEXA_209LAAAXX_8_1_896_688 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.155 WICMT-SOLEXA_209LAAAXX_8_1_914_470 length=26 GCATGTGTGTATGTTTTTATATATTT +SRR015141.155 WICMT-SOLEXA_209LAAAXX_8_1_914_470 length=26 II;I:>IIIIIIII.IIIIIIIIIII @SRR015141.156 WICMT-SOLEXA_209LAAAXX_8_1_759_678 length=26 GGGGGGTGCCTTTGGACCCTGTGCTG +SRR015141.156 WICMT-SOLEXA_209LAAAXX_8_1_759_678 length=26 IIIIII,I'#*+&*I"III>I,%#I" @SRR015141.157 WICMT-SOLEXA_209LAAAXX_8_1_909_364 length=26 TATCACACTCACGTACTGGAGTTCAT +SRR015141.157 WICMT-SOLEXA_209LAAAXX_8_1_909_364 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.158 WICMT-SOLEXA_209LAAAXX_8_1_952_461 length=26 TTTGGGACTGGATCTCATTGTGTATT +SRR015141.158 WICMT-SOLEXA_209LAAAXX_8_1_952_461 length=26 IIIIIIIIIIIIIIIIIIIII"I5'I @SRR015141.159 WICMT-SOLEXA_209LAAAXX_8_1_904_679 length=26 GAGTCAGACAATGGAGCAACCAGTGG +SRR015141.159 WICMT-SOLEXA_209LAAAXX_8_1_904_679 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.160 WICMT-SOLEXA_209LAAAXX_8_1_896_795 length=26 TCTTGCTATGTCCACACAGGGCTTCA +SRR015141.160 WICMT-SOLEXA_209LAAAXX_8_1_896_795 length=26 IIIIIIIIIIIIIIIIIIII6I?%II @SRR015141.161 WICMT-SOLEXA_209LAAAXX_8_1_885_350 length=26 TTATGAGATGGTTATTCTTGTCATTT +SRR015141.161 WICMT-SOLEXA_209LAAAXX_8_1_885_350 length=26 II2IIIIIIII(:"3III.#I$II7I @SRR015141.162 WICMT-SOLEXA_209LAAAXX_8_1_785_699 length=26 GCAGCCAAAACCTTTGTAGTGTTTTG +SRR015141.162 WICMT-SOLEXA_209LAAAXX_8_1_785_699 length=26 IIIIIIIIIIIIIIIIIICI2I(#&1 @SRR015141.163 WICMT-SOLEXA_209LAAAXX_8_1_903_299 length=26 AAAGTCGGAAAGTGGATGTTTGTGTT +SRR015141.163 WICMT-SOLEXA_209LAAAXX_8_1_903_299 length=26 IIII'IIIIIIIIIIIIIIII,IIII @SRR015141.164 WICMT-SOLEXA_209LAAAXX_8_1_775_694 length=26 GTTTCTTTATTTTTTATCTTTTTTTT +SRR015141.164 WICMT-SOLEXA_209LAAAXX_8_1_775_694 length=26 IIIIIIIIIIIIIIII()III)I$II @SRR015141.165 WICMT-SOLEXA_209LAAAXX_8_1_903_375 length=26 GTAAGAACATTCTTGTGAATTTCAAT +SRR015141.165 WICMT-SOLEXA_209LAAAXX_8_1_903_375 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.166 WICMT-SOLEXA_209LAAAXX_8_1_907_607 length=26 GACAAGGCTTTGGCCTGCAAGCCTTC +SRR015141.166 WICMT-SOLEXA_209LAAAXX_8_1_907_607 length=26 IIIIIIIIIII=IIIIIIIIIIIIII @SRR015141.167 WICMT-SOLEXA_209LAAAXX_8_1_956_500 length=26 GATGTCACACACCACCAGGCAGTTTA +SRR015141.167 WICMT-SOLEXA_209LAAAXX_8_1_956_500 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.168 WICMT-SOLEXA_209LAAAXX_8_1_877_851 length=26 TCCCACTACGCCTCTTCCTAGCATAA +SRR015141.168 WICMT-SOLEXA_209LAAAXX_8_1_877_851 length=26 III?I+IIII1IIIII/I$I9II+%$ @SRR015141.169 WICMT-SOLEXA_209LAAAXX_8_1_894_896 length=26 TGGGGTTTCTGAAACACGCACTTGGT +SRR015141.169 WICMT-SOLEXA_209LAAAXX_8_1_894_896 length=26 IIIIIIIIIIIIIIIIIII8III,(I @SRR015141.170 WICMT-SOLEXA_209LAAAXX_8_1_882_685 length=26 TTCTTGAAAGCTTTTTCTAACTTGTT +SRR015141.170 WICMT-SOLEXA_209LAAAXX_8_1_882_685 length=26 I@I8II(.05@I-*I3&I2%$II0I+ @SRR015141.171 WICMT-SOLEXA_209LAAAXX_8_1_927_789 length=26 GTGTGTGTTCCATTTTTGAATCCATA +SRR015141.171 WICMT-SOLEXA_209LAAAXX_8_1_927_789 length=26 IIIIIIIIIIIIIIIIIIIIIIII"I @SRR015141.172 WICMT-SOLEXA_209LAAAXX_8_1_909_369 length=26 AAAACATTTTACAAAACCAAGTGGCA +SRR015141.172 WICMT-SOLEXA_209LAAAXX_8_1_909_369 length=26 IIIIIIIIIIIIIIIIIIIIIII=II @SRR015141.173 WICMT-SOLEXA_209LAAAXX_8_1_926_695 length=26 GGCATAGATAAATAACATGGAGGCTT +SRR015141.173 WICMT-SOLEXA_209LAAAXX_8_1_926_695 length=26 IIIIIIIIIIIIIIIIIIIII7IIII @SRR015141.174 WICMT-SOLEXA_209LAAAXX_8_1_886_579 length=26 AGCCTCAGGGAGAATGAGGAGAAATA +SRR015141.174 WICMT-SOLEXA_209LAAAXX_8_1_886_579 length=26 IIIIIIIIII7I>HII:>5:<-F9I= @SRR015141.175 WICMT-SOLEXA_209LAAAXX_8_1_910_379 length=26 GCTGAGGTACCTATTTACTTCATTAT +SRR015141.175 WICMT-SOLEXA_209LAAAXX_8_1_910_379 length=26 IIIIIIIIIIIII"I%8"I>I.$=# @SRR015141.177 WICMT-SOLEXA_209LAAAXX_8_1_913_768 length=26 GGATGATGCTGGAAGATCACCAGCCG +SRR015141.177 WICMT-SOLEXA_209LAAAXX_8_1_913_768 length=26 IIIIIIIIIIIIIIIIIIIIII.II( @SRR015141.178 WICMT-SOLEXA_209LAAAXX_8_1_903_243 length=26 GGAGATTCTTCTTTGATGGCACTTTT +SRR015141.178 WICMT-SOLEXA_209LAAAXX_8_1_903_243 length=26 IIIIIIIIIIIIII*III0IIIIIII @SRR015141.179 WICMT-SOLEXA_209LAAAXX_8_1_902_707 length=26 GGATAAACCTGGACACAAATGGTAAG +SRR015141.179 WICMT-SOLEXA_209LAAAXX_8_1_902_707 length=26 IIIIIIIIIIIIIIIIIIIIIIIII" @SRR015141.180 WICMT-SOLEXA_209LAAAXX_8_1_887_922 length=26 TTAAGGATATGAAACACTCCAACACC +SRR015141.180 WICMT-SOLEXA_209LAAAXX_8_1_887_922 length=26 IIIIIIIIIIIIII,III)58I<.32 @SRR015141.181 WICMT-SOLEXA_209LAAAXX_8_1_903_337 length=26 GAATATGGCGAGAAAATTGAAAATCA +SRR015141.181 WICMT-SOLEXA_209LAAAXX_8_1_903_337 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.182 WICMT-SOLEXA_209LAAAXX_8_1_899_871 length=26 GGGGAACTTGATTTTACATTATTTCA +SRR015141.182 WICMT-SOLEXA_209LAAAXX_8_1_899_871 length=26 IIIIIIDIIIIIIIIIIIIIIIIIII @SRR015141.183 WICMT-SOLEXA_209LAAAXX_8_1_919_393 length=26 GACAGGTGTACCTGAACGGACCCCAC +SRR015141.183 WICMT-SOLEXA_209LAAAXX_8_1_919_393 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.184 WICMT-SOLEXA_209LAAAXX_8_1_926_888 length=26 TCCCGTGCAAGAGCAACCATTGCTTT +SRR015141.184 WICMT-SOLEXA_209LAAAXX_8_1_926_888 length=26 IIIIIIIIIIIIIIIIIII"IIIIII @SRR015141.185 WICMT-SOLEXA_209LAAAXX_8_1_947_680 length=26 GAAGTGGACAGTTCTGGGTTGTGCAG +SRR015141.185 WICMT-SOLEXA_209LAAAXX_8_1_947_680 length=26 IIIIIIIIIIIIII&IIIIIII&II5 @SRR015141.186 WICMT-SOLEXA_209LAAAXX_8_1_882_515 length=26 GAAAGTCGGTGTTGTGAATATATTTA +SRR015141.186 WICMT-SOLEXA_209LAAAXX_8_1_882_515 length=26 IAI;IIIIIIIIIIB"F.I9I%I?I- @SRR015141.187 WICMT-SOLEXA_209LAAAXX_8_1_879_720 length=26 TCTGCCCTGTGTCTGCTTGGCAGGTT +SRR015141.187 WICMT-SOLEXA_209LAAAXX_8_1_879_720 length=26 III4II:IFIIIIIIFII""1$/#BI @SRR015141.188 WICMT-SOLEXA_209LAAAXX_8_1_927_741 length=26 GGGCAGAGGGTCAGCATGGGAACGCA +SRR015141.188 WICMT-SOLEXA_209LAAAXX_8_1_927_741 length=26 IIIIIIIIIIIIIIIIIBIIIIIBII @SRR015141.189 WICMT-SOLEXA_209LAAAXX_8_1_894_589 length=26 TCTCAAGAACATTTTCTGTTGATTCT +SRR015141.189 WICMT-SOLEXA_209LAAAXX_8_1_894_589 length=26 IIIIIIIIIIIIIIIIIIII9IIIII @SRR015141.190 WICMT-SOLEXA_209LAAAXX_8_1_901_447 length=26 GACTATTCTACAAATACAATAATTCC +SRR015141.190 WICMT-SOLEXA_209LAAAXX_8_1_901_447 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.191 WICMT-SOLEXA_209LAAAXX_8_1_877_454 length=26 TTGGAGTGCTTTCCTGAATTGTTTCT +SRR015141.191 WICMT-SOLEXA_209LAAAXX_8_1_877_454 length=26 IIIIIIIIIIIII7I459II&III3I @SRR015141.192 WICMT-SOLEXA_209LAAAXX_8_1_932_881 length=26 TGGAATAATTCTTAAGTAATTTTTTA +SRR015141.192 WICMT-SOLEXA_209LAAAXX_8_1_932_881 length=26 IIIIIIIE+4II/I0IIIIIIIIII4 @SRR015141.193 WICMT-SOLEXA_209LAAAXX_8_1_912_568 length=26 GCAGAGTCTAGACCACACACAAGCTT +SRR015141.193 WICMT-SOLEXA_209LAAAXX_8_1_912_568 length=26 IIIIIIIIIIIIIIIIIIIIIIIII4 @SRR015141.194 WICMT-SOLEXA_209LAAAXX_8_1_898_723 length=26 AAGGACAGTGATCTGTGAAGAGATTA +SRR015141.194 WICMT-SOLEXA_209LAAAXX_8_1_898_723 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.195 WICMT-SOLEXA_209LAAAXX_8_1_927_516 length=26 GCAACATCGTAGCAATCAAATCCATC +SRR015141.195 WICMT-SOLEXA_209LAAAXX_8_1_927_516 length=26 IIIIIIIIIIIIIIIIIIIIIIIIIE @SRR015141.196 WICMT-SOLEXA_209LAAAXX_8_1_889_702 length=26 AGACCAGCTGAAACAACTAGCCTCGT +SRR015141.196 WICMT-SOLEXA_209LAAAXX_8_1_889_702 length=26 IIIIIIIIIIIIIIII9IIID8II. @SRR015141.202 WICMT-SOLEXA_209LAAAXX_8_1_944_420 length=26 GAACTGCCTAACATCCTTGGCCATTT +SRR015141.202 WICMT-SOLEXA_209LAAAXX_8_1_944_420 length=26 IIIIIIIIIIIIIIIIIII,IIII7% @SRR015141.203 WICMT-SOLEXA_209LAAAXX_8_1_933_517 length=26 GACCTCCAGTCTAGGGGTGACTCAGT +SRR015141.203 WICMT-SOLEXA_209LAAAXX_8_1_933_517 length=26 II2IIIIIIII22IIIII&I"III+I @SRR015141.204 WICMT-SOLEXA_209LAAAXX_8_1_913_580 length=26 AGACCTGGGTCTAAAAGATCCAGCTG +SRR015141.204 WICMT-SOLEXA_209LAAAXX_8_1_913_580 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.205 WICMT-SOLEXA_209LAAAXX_8_1_909_436 length=26 GCATATGAAAGGTGTATTCCTGGGCA +SRR015141.205 WICMT-SOLEXA_209LAAAXX_8_1_909_436 length=26 IIIIIIIIIIIIIIIIIII:I&3"I> @SRR015141.206 WICMT-SOLEXA_209LAAAXX_8_1_884_512 length=26 TTTACTCATTTGCTGATATACAAGTA +SRR015141.206 WICMT-SOLEXA_209LAAAXX_8_1_884_512 length=26 IIIIIIIIIIIIII+III*I9:I(I: @SRR015141.207 WICMT-SOLEXA_209LAAAXX_8_1_888_504 length=26 TGGTCTCTCGCTGTGTCTTTTTTTTC +SRR015141.207 WICMT-SOLEXA_209LAAAXX_8_1_888_504 length=26 IIIIIIIII9IIII4IIIIIIIII2" @SRR015141.208 WICMT-SOLEXA_209LAAAXX_8_1_928_437 length=26 GGTGGTGGTCACAACATGAGGAATTT +SRR015141.208 WICMT-SOLEXA_209LAAAXX_8_1_928_437 length=26 IIIIIIIIIIIIII"IIFIIIIIGII @SRR015141.209 WICMT-SOLEXA_209LAAAXX_8_1_903_423 length=26 GCAGTGTATCAATACTGACCTTTCCT +SRR015141.209 WICMT-SOLEXA_209LAAAXX_8_1_903_423 length=26 IIIIIIIIIIIIII+IIIIIII)III @SRR015141.210 WICMT-SOLEXA_209LAAAXX_8_1_877_493 length=26 TGTGGAAGGGGTTTTTTATTACTTTT +SRR015141.210 WICMT-SOLEXA_209LAAAXX_8_1_877_493 length=26 CI;II$ID'III,I#I5(II+#"I"+ @SRR015141.211 WICMT-SOLEXA_209LAAAXX_8_1_898_748 length=26 GGGCTGTATAGTAGCAACCTTGTCTC +SRR015141.211 WICMT-SOLEXA_209LAAAXX_8_1_898_748 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.212 WICMT-SOLEXA_209LAAAXX_8_1_884_976 length=26 GCNNNNNNNNNNNNNNNNNNNNNNNN +SRR015141.212 WICMT-SOLEXA_209LAAAXX_8_1_884_976 length=26 II!!!!!!!!!!!!!!!!!!!!!!!! @SRR015141.213 WICMT-SOLEXA_209LAAAXX_8_1_878_273 length=26 AACAGGTTCTTGATGTTTGTCATTTT +SRR015141.213 WICMT-SOLEXA_209LAAAXX_8_1_878_273 length=26 III)II,5I#2.:I,II4&IFII)II @SRR015141.214 WICMT-SOLEXA_209LAAAXX_8_1_903_340 length=26 CATACTTAACTGTGTCAGCTATAGTT +SRR015141.214 WICMT-SOLEXA_209LAAAXX_8_1_903_340 length=26 IIIIIIIIIIIIIIIIIIIIIIE"I& @SRR015141.215 WICMT-SOLEXA_209LAAAXX_8_1_908_261 length=26 ATTGCATTTAATAGGTGGTTTATTAA +SRR015141.215 WICMT-SOLEXA_209LAAAXX_8_1_908_261 length=26 IIIIIIIII*IIIIIII.IIIIII(I @SRR015141.216 WICMT-SOLEXA_209LAAAXX_8_1_891_564 length=26 TGTCAATCTTTCTCATAATTTTATTT +SRR015141.216 WICMT-SOLEXA_209LAAAXX_8_1_891_564 length=26 IIIIIIIIIIIIIIIIBII$I(4II( @SRR015141.217 WICMT-SOLEXA_209LAAAXX_8_1_765_690 length=26 GTGGGTTAAGTCTTTGGAGAAGAAAG +SRR015141.217 WICMT-SOLEXA_209LAAAXX_8_1_765_690 length=26 IIII3II+<*@D#II"2)=5I.DD4" @SRR015141.218 WICMT-SOLEXA_209LAAAXX_8_1_894_598 length=26 ATTCACCATCTAAATACTGCTCCCCG +SRR015141.218 WICMT-SOLEXA_209LAAAXX_8_1_894_598 length=26 IIIIIIIIIIIIIIIIIIIII=III. @SRR015141.219 WICMT-SOLEXA_209LAAAXX_8_1_877_619 length=26 GACCTGTGAGACCTACTCACATCAAT +SRR015141.219 WICMT-SOLEXA_209LAAAXX_8_1_877_619 length=26 IIIIIIIIIIC670E?I9=7HII @SRR015141.234 WICMT-SOLEXA_209LAAAXX_8_1_903_687 length=26 AGGTAAGAGAAATGGCTCCTTTTTTC +SRR015141.234 WICMT-SOLEXA_209LAAAXX_8_1_903_687 length=26 IIIIIIIIIIIIIIIIIIIIIII.II @SRR015141.235 WICMT-SOLEXA_209LAAAXX_8_1_904_683 length=26 TATTAATCAGTCATGAAAAGTGATTG +SRR015141.235 WICMT-SOLEXA_209LAAAXX_8_1_904_683 length=26 IIIIIIIIIIIIIIAIII)IIIIIII @SRR015141.236 WICMT-SOLEXA_209LAAAXX_8_1_891_796 length=26 GGTCTAAGAGACTGCTGATCCTCTTT +SRR015141.236 WICMT-SOLEXA_209LAAAXX_8_1_891_796 length=26 IIIIIIIIIIIIIIII<3IHFI5III @SRR015141.237 WICMT-SOLEXA_209LAAAXX_8_1_917_909 length=26 GTCAATGATGCCAATATGTGGAACAT +SRR015141.237 WICMT-SOLEXA_209LAAAXX_8_1_917_909 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.238 WICMT-SOLEXA_209LAAAXX_8_1_878_626 length=26 TGCAGCTTACCCACGCCCACTGCAGA +SRR015141.238 WICMT-SOLEXA_209LAAAXX_8_1_878_626 length=26 IIIIIIIIIIIIIIII>5D6ICE<07 @SRR015141.239 WICMT-SOLEXA_209LAAAXX_8_1_898_878 length=26 TCTGCCTCCAGGTACCTGCATAACCT +SRR015141.239 WICMT-SOLEXA_209LAAAXX_8_1_898_878 length=26 IIIIIIIIIIIIIIIIIIIIIIII5I @SRR015141.240 WICMT-SOLEXA_209LAAAXX_8_1_949_517 length=26 GCCTCGAACTCAAAAAGATCCACTCG +SRR015141.240 WICMT-SOLEXA_209LAAAXX_8_1_949_517 length=26 IIIIIIIIIIIIIIIIIIIIIIIII> @SRR015141.241 WICMT-SOLEXA_209LAAAXX_8_1_906_958 length=26 GCCNNNNNNNNNNNNNNNNNNNNNNN +SRR015141.241 WICMT-SOLEXA_209LAAAXX_8_1_906_958 length=26 III!!!!!!!!!!!!!!!!!!!!!!! @SRR015141.242 WICMT-SOLEXA_209LAAAXX_8_1_878_830 length=26 GATATCCAGCATGAAGGCTCTGCAGT +SRR015141.242 WICMT-SOLEXA_209LAAAXX_8_1_878_830 length=26 IIIIII/IIII%(@I"")III)DI*- @SRR015141.243 WICMT-SOLEXA_209LAAAXX_8_1_909_680 length=26 TATGCAGCAGTTGGAGAACTTTGGCT +SRR015141.243 WICMT-SOLEXA_209LAAAXX_8_1_909_680 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.244 WICMT-SOLEXA_209LAAAXX_8_1_887_568 length=26 AGATCAGAAGTTCAAGGCCAAATCAG +SRR015141.244 WICMT-SOLEXA_209LAAAXX_8_1_887_568 length=26 IIIIIIIIIIIIGII<);DIIIIEI& @SRR015141.245 WICMT-SOLEXA_209LAAAXX_8_1_940_311 length=26 CATAGGTTTCTTTGCACATATTATTA +SRR015141.245 WICMT-SOLEXA_209LAAAXX_8_1_940_311 length=26 IIIIIIIIIII"IIII1I$III*II' @SRR015141.246 WICMT-SOLEXA_209LAAAXX_8_1_936_834 length=26 TCAATGACCTTTGCTCTCTGGCCCAT +SRR015141.246 WICMT-SOLEXA_209LAAAXX_8_1_936_834 length=26 IIIIIIIIIIIIII;IIIII5IIIII @SRR015141.247 WICMT-SOLEXA_209LAAAXX_8_1_935_573 length=26 AATACACACTTTAGGACGTGAAATAT +SRR015141.247 WICMT-SOLEXA_209LAAAXX_8_1_935_573 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.248 WICMT-SOLEXA_209LAAAXX_8_1_907_322 length=26 ATGACGTGGAATATGGCAAGAAAACT +SRR015141.248 WICMT-SOLEXA_209LAAAXX_8_1_907_322 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.249 WICMT-SOLEXA_209LAAAXX_8_1_894_432 length=26 TGATGCTCCCATCCTCTGCTGGTTTT +SRR015141.249 WICMT-SOLEXA_209LAAAXX_8_1_894_432 length=26 IIIIIIIIIIIIIIIIIIIII"I$II @SRR015141.250 WICMT-SOLEXA_209LAAAXX_8_1_951_749 length=26 GATGGCTTCATGGTCCCCAAGTGATT +SRR015141.250 WICMT-SOLEXA_209LAAAXX_8_1_951_749 length=26 IIIIIIIIIII/IIIIIIIII#III" @SRR015141.251 WICMT-SOLEXA_209LAAAXX_8_1_808_645 length=26 GGTCAACCCTAGAAGTATTCTTCCAT +SRR015141.251 WICMT-SOLEXA_209LAAAXX_8_1_808_645 length=26 IIIIIIIIIIIIIIIIIII5II(/A" @SRR015141.252 WICMT-SOLEXA_209LAAAXX_8_1_895_371 length=26 TTCCACCTTTTTCAGTTGTCCTCTCC +SRR015141.252 WICMT-SOLEXA_209LAAAXX_8_1_895_371 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.253 WICMT-SOLEXA_209LAAAXX_8_1_896_517 length=26 GAACTCAATTACTCTGACCAAGATGT +SRR015141.253 WICMT-SOLEXA_209LAAAXX_8_1_896_517 length=26 IIIIIIIIIIIIIIIIIIFIIIIII# @SRR015141.254 WICMT-SOLEXA_209LAAAXX_8_1_915_852 length=26 TTAAAGTCAGAATGGTGCTTCTGACA +SRR015141.254 WICMT-SOLEXA_209LAAAXX_8_1_915_852 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.255 WICMT-SOLEXA_209LAAAXX_8_1_885_503 length=26 GTGCAGAGCCCCCTGGGGGGCACTAC +SRR015141.255 WICMT-SOLEXA_209LAAAXX_8_1_885_503 length=26 IIIIIIIIDII6.ICB7/,,6.0II# @SRR015141.256 WICMT-SOLEXA_209LAAAXX_8_1_793_732 length=26 GTGGGGGGAGGGGAGCGGCAGAGATG +SRR015141.256 WICMT-SOLEXA_209LAAAXX_8_1_793_732 length=26 IIIIIIIIII9I9IDA;I(F8'"";, @SRR015141.257 WICMT-SOLEXA_209LAAAXX_8_1_910_895 length=26 TCCGACATTGAATAATAAGGTATATA +SRR015141.257 WICMT-SOLEXA_209LAAAXX_8_1_910_895 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.258 WICMT-SOLEXA_209LAAAXX_8_1_908_579 length=26 TAGCTGTCTTCAGATATACTAGAAGA +SRR015141.258 WICMT-SOLEXA_209LAAAXX_8_1_908_579 length=26 IIIIIIIIIIIIIIIGI%I'/IIII& @SRR015141.259 WICMT-SOLEXA_209LAAAXX_8_1_927_359 length=26 ACCAGCGGGTGAAATACACCAAGGAC +SRR015141.259 WICMT-SOLEXA_209LAAAXX_8_1_927_359 length=26 IIIIIIIIIIIIIIII"IIIIIIIII @SRR015141.260 WICMT-SOLEXA_209LAAAXX_8_1_903_771 length=26 GACAGAGCTCCCTGTGGCACAAATGT +SRR015141.260 WICMT-SOLEXA_209LAAAXX_8_1_903_771 length=26 IIIIIIIIIIIIIIIIIIIIIIIID- @SRR015141.261 WICMT-SOLEXA_209LAAAXX_8_1_904_365 length=26 AGAAAGAACCTTACTCCTTGCTTAGG +SRR015141.261 WICMT-SOLEXA_209LAAAXX_8_1_904_365 length=26 IIIIIIIIIIIIIIIIIIIIIIII+& @SRR015141.262 WICMT-SOLEXA_209LAAAXX_8_1_892_532 length=26 TGGGTACACCAGAGAATTTATGTACA +SRR015141.262 WICMT-SOLEXA_209LAAAXX_8_1_892_532 length=26 IIIIIIIIIIIII?IIIII:I$$+/# @SRR015141.263 WICMT-SOLEXA_209LAAAXX_8_1_931_560 length=26 GCTTAGTCATTTATAGGTGAGAGTGC +SRR015141.263 WICMT-SOLEXA_209LAAAXX_8_1_931_560 length=26 IIIIIIIIIIIIIIIIIIIIIIIIDI @SRR015141.264 WICMT-SOLEXA_209LAAAXX_8_1_908_688 length=26 GCCAGTCAGGATATACCTATTTTAAG +SRR015141.264 WICMT-SOLEXA_209LAAAXX_8_1_908_688 length=26 IIIIIIIII2I8II.III"IIII(II @SRR015141.265 WICMT-SOLEXA_209LAAAXX_8_1_901_697 length=26 TAAATGTGTGGAAAGCCGCCTAGATT +SRR015141.265 WICMT-SOLEXA_209LAAAXX_8_1_901_697 length=26 IIIIIIIIIIIIIIIII9IIIIIIII @SRR015141.266 WICMT-SOLEXA_209LAAAXX_8_1_941_840 length=26 GGTTTTTAGTGATTTTTTAATTTTTC +SRR015141.266 WICMT-SOLEXA_209LAAAXX_8_1_941_840 length=26 IIIIIIIIIIIIIIIIII'IIIIII5 @SRR015141.267 WICMT-SOLEXA_209LAAAXX_8_1_831_726 length=26 GGACCCTTCCAGGTATCTCTGGCTAT +SRR015141.267 WICMT-SOLEXA_209LAAAXX_8_1_831_726 length=26 IIIIIIIIIIIIIIIIIIII.%CI9I @SRR015141.268 WICMT-SOLEXA_209LAAAXX_8_1_635_696 length=26 GTGAGTGTCTCTGTTTGTTCTTAATT +SRR015141.268 WICMT-SOLEXA_209LAAAXX_8_1_635_696 length=26 IIEI#"I?"-D'-I*I$I)'II<"IIII0 @SRR015141.291 WICMT-SOLEXA_209LAAAXX_8_1_940_515 length=26 TGACAGGAAAAGTATATTTCTGTCAT +SRR015141.291 WICMT-SOLEXA_209LAAAXX_8_1_940_515 length=26 IIIIIIIIIII;IIIIII.I;:3I7) @SRR015141.292 WICMT-SOLEXA_209LAAAXX_8_1_878_787 length=26 GAATTTTACGTAAGACTAATCTTTTA +SRR015141.292 WICMT-SOLEXA_209LAAAXX_8_1_878_787 length=26 IIIIIIIIIIIII6I>IIIIIII?(&I(7I4% @SRR015141.309 WICMT-SOLEXA_209LAAAXX_8_1_929_554 length=26 TTATTCTAAGATGTTAATTTTTTAAA +SRR015141.309 WICMT-SOLEXA_209LAAAXX_8_1_929_554 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.310 WICMT-SOLEXA_209LAAAXX_8_1_814_712 length=26 GTTGGCCAACAGGGAAATAGCATTCA +SRR015141.310 WICMT-SOLEXA_209LAAAXX_8_1_814_712 length=26 I1IIIIIIIC:=F"IIIIGI5III1; @SRR015141.311 WICMT-SOLEXA_209LAAAXX_8_1_811_746 length=26 GAAAATGAGAAACATCCACTTGACGA +SRR015141.311 WICMT-SOLEXA_209LAAAXX_8_1_811_746 length=26 IIIIIIIIIIIICIII:I5II?B0:9 @SRR015141.312 WICMT-SOLEXA_209LAAAXX_8_1_810_591 length=26 GGTTAGGGTGAGGTTAGGGTTAAGTT +SRR015141.312 WICMT-SOLEXA_209LAAAXX_8_1_810_591 length=26 IIIIIIII7IIIIIII4I2III+3"I @SRR015141.313 WICMT-SOLEXA_209LAAAXX_8_1_931_836 length=26 TATGCCCCTTGCGTGTTTGGCAAATT +SRR015141.313 WICMT-SOLEXA_209LAAAXX_8_1_931_836 length=26 IIIIII(#II5*II0IIIII/I-III @SRR015141.314 WICMT-SOLEXA_209LAAAXX_8_1_819_424 length=26 GGAAAGCAAACAGGAAGTCATGGCAC +SRR015141.314 WICMT-SOLEXA_209LAAAXX_8_1_819_424 length=26 IIIIIIIIIIIIIIIIII>#II/IC$ @SRR015141.315 WICMT-SOLEXA_209LAAAXX_8_1_870_741 length=26 GGATGGAACACAGGGCCCTCAATTGT +SRR015141.315 WICMT-SOLEXA_209LAAAXX_8_1_870_741 length=26 IIIIIIIIIIIIIII,III753I#-$ @SRR015141.316 WICMT-SOLEXA_209LAAAXX_8_1_884_113 length=26 TGTTTAAAAATGAACAGTGACAAAGT +SRR015141.316 WICMT-SOLEXA_209LAAAXX_8_1_884_113 length=26 IIIIIIIIIIIIIIIIII2IIIIICI @SRR015141.317 WICMT-SOLEXA_209LAAAXX_8_1_932_722 length=26 AGATGACTACTCACAAAAGCCCCCTC +SRR015141.317 WICMT-SOLEXA_209LAAAXX_8_1_932_722 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.318 WICMT-SOLEXA_209LAAAXX_8_1_884_701 length=26 AAGCAGGAGTGAGAAGCCAGTCACAT +SRR015141.318 WICMT-SOLEXA_209LAAAXX_8_1_884_701 length=26 IIIIIII@IIIEIDI7;CDAI0*.)I @SRR015141.319 WICMT-SOLEXA_209LAAAXX_8_1_917_218 length=26 GGAGGTCAGTAGTCATGAAGGTCAGA +SRR015141.319 WICMT-SOLEXA_209LAAAXX_8_1_917_218 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.320 WICMT-SOLEXA_209LAAAXX_8_1_762_719 length=26 GTAAGGAGAAAGTAAGAAAGACAACA +SRR015141.320 WICMT-SOLEXA_209LAAAXX_8_1_762_719 length=26 IIIIIIIIIIIIIIIIIIFIIDI;-? @SRR015141.321 WICMT-SOLEXA_209LAAAXX_8_1_773_676 length=26 GGCTGACCGTTTGGCACTGGGCAACC +SRR015141.321 WICMT-SOLEXA_209LAAAXX_8_1_773_676 length=26 IIIIIIIIIIII@HFI5I/:)558*- @SRR015141.322 WICMT-SOLEXA_209LAAAXX_8_1_910_811 length=26 GTCCAACGAGTATGTGCGTGCACACA +SRR015141.322 WICMT-SOLEXA_209LAAAXX_8_1_910_811 length=26 IIIIIIIIIIIII;IIIIIIIIIIII @SRR015141.323 WICMT-SOLEXA_209LAAAXX_8_1_547_913 length=26 GTGGATGTTTCTCATTTTCCATTATT +SRR015141.323 WICMT-SOLEXA_209LAAAXX_8_1_547_913 length=26 IIIIIIIIIIII(+IIII%,/I-#II @SRR015141.324 WICMT-SOLEXA_209LAAAXX_8_1_948_365 length=26 AGCAAAAATCTTGTTGAAATCATTTG +SRR015141.324 WICMT-SOLEXA_209LAAAXX_8_1_948_365 length=26 I(-II.III)IIIEIIIII*IIIIII @SRR015141.325 WICMT-SOLEXA_209LAAAXX_8_1_883_525 length=26 AAGCTGAACTCACATACATTATAACT +SRR015141.325 WICMT-SOLEXA_209LAAAXX_8_1_883_525 length=26 IIIIIIIIIIIIHIII:IIIIIII56 @SRR015141.326 WICMT-SOLEXA_209LAAAXX_8_1_889_539 length=26 TTGGTAGAACTGTTTATGAAGTATTA +SRR015141.326 WICMT-SOLEXA_209LAAAXX_8_1_889_539 length=26 IIIIIIIIIIIAIIII(8;I/#4II$ @SRR015141.327 WICMT-SOLEXA_209LAAAXX_8_1_922_269 length=26 AGCCCAATGTGGGTTGCAGAGATGTA +SRR015141.327 WICMT-SOLEXA_209LAAAXX_8_1_922_269 length=26 I.I"I:IIIIIIIII7IIIIAI74III"+ @SRR015141.362 WICMT-SOLEXA_209LAAAXX_8_1_829_694 length=26 GATCTGTCTGCTGAGACTTGCTACCT +SRR015141.362 WICMT-SOLEXA_209LAAAXX_8_1_829_694 length=26 IIIIIIIIIIII'D8G4II'II5+3I @SRR015141.363 WICMT-SOLEXA_209LAAAXX_8_1_884_507 length=26 AATAATTCATATTAGTGAGAGACACT +SRR015141.363 WICMT-SOLEXA_209LAAAXX_8_1_884_507 length=26 IIIII?I&I/"8=-&3I67<"I,'*I @SRR015141.364 WICMT-SOLEXA_209LAAAXX_8_1_925_391 length=26 TTAACTCCTGAACTCAGAAGGGCTGT +SRR015141.364 WICMT-SOLEXA_209LAAAXX_8_1_925_391 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.365 WICMT-SOLEXA_209LAAAXX_8_1_880_255 length=26 GGATTCATGGAAAGATAATGTGTGAA +SRR015141.365 WICMT-SOLEXA_209LAAAXX_8_1_880_255 length=26 IIIIIIIIIIIIIIIIIIIII@I.>% @SRR015141.366 WICMT-SOLEXA_209LAAAXX_8_1_831_862 length=26 GGATTATTTGGTTTCACATTTGCTTT +SRR015141.366 WICMT-SOLEXA_209LAAAXX_8_1_831_862 length=26 IIIIIIIIIIIIIIIIII"II..III @SRR015141.367 WICMT-SOLEXA_209LAAAXX_8_1_798_870 length=26 GAACCAGTTTAAGTGGAATGGCAAAG +SRR015141.367 WICMT-SOLEXA_209LAAAXX_8_1_798_870 length=26 IIIIIIIIIIIIII5/III7+IIII$ @SRR015141.368 WICMT-SOLEXA_209LAAAXX_8_1_931_874 length=26 GTAATGCAAGTGGTGTCTAGGATGAA +SRR015141.368 WICMT-SOLEXA_209LAAAXX_8_1_931_874 length=26 IIIIIIIIIII+=IIIII%I@II)?I @SRR015141.369 WICMT-SOLEXA_209LAAAXX_8_1_929_225 length=26 ACGTTGCTGTTTGCCTGGTTCATTTT +SRR015141.369 WICMT-SOLEXA_209LAAAXX_8_1_929_225 length=26 IIIIIIIIIIIIIIIII(IIIIIIII @SRR015141.370 WICMT-SOLEXA_209LAAAXX_8_1_881_361 length=26 AAGCACCCACTCTCCGGTAGTAATCC +SRR015141.370 WICMT-SOLEXA_209LAAAXX_8_1_881_361 length=26 IIIIIIIBIIIIIIA/III,#III<; @SRR015141.371 WICMT-SOLEXA_209LAAAXX_8_1_920_223 length=26 CCAGGAATGTTATCTTTGCTTTTTTT +SRR015141.371 WICMT-SOLEXA_209LAAAXX_8_1_920_223 length=26 IIIIIIIIIIIIIIIIIIIIIIIII; @SRR015141.372 WICMT-SOLEXA_209LAAAXX_8_1_913_890 length=26 AATTTTACCCGAGTAATATTTTAACA +SRR015141.372 WICMT-SOLEXA_209LAAAXX_8_1_913_890 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.373 WICMT-SOLEXA_209LAAAXX_8_1_795_633 length=26 GACGACTTGAAAAATGACGAAATCAC +SRR015141.373 WICMT-SOLEXA_209LAAAXX_8_1_795_633 length=26 IIIIIIIIIIIIIIIIIIIIIII=I3 @SRR015141.374 WICMT-SOLEXA_209LAAAXX_8_1_894_202 length=26 ACTGAAGGACGTTGAATATGGCAAGA +SRR015141.374 WICMT-SOLEXA_209LAAAXX_8_1_894_202 length=26 IIII9IIIIIIIII3IIII+$III:" @SRR015141.375 WICMT-SOLEXA_209LAAAXX_8_1_898_262 length=26 CATGCCTCCTGGACATGGTCACCACT +SRR015141.375 WICMT-SOLEXA_209LAAAXX_8_1_898_262 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.376 WICMT-SOLEXA_209LAAAXX_8_1_919_570 length=26 GTCGGGCTGCAGAAGCTGTGGGAGTG +SRR015141.376 WICMT-SOLEXA_209LAAAXX_8_1_919_570 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.377 WICMT-SOLEXA_209LAAAXX_8_1_858_424 length=26 GTGATTTCGTCATTTTTCAAGTCTTC +SRR015141.377 WICMT-SOLEXA_209LAAAXX_8_1_858_424 length=26 IIIIIIIIIIIIIIIIIIII'I3DI0 @SRR015141.378 WICMT-SOLEXA_209LAAAXX_8_1_927_567 length=26 TCAAGGACGTTTTTCCATTTGACCAT +SRR015141.378 WICMT-SOLEXA_209LAAAXX_8_1_927_567 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.379 WICMT-SOLEXA_209LAAAXX_8_1_881_891 length=26 TCTAGGCCTGGCTGGTAGCTGCCCAC +SRR015141.379 WICMT-SOLEXA_209LAAAXX_8_1_881_891 length=26 IIIIIIIIIIICIIII6I:I'>0I7# @SRR015141.380 WICMT-SOLEXA_209LAAAXX_8_1_725_631 length=26 GTACAAATAACATGACCAAAAGGATC +SRR015141.380 WICMT-SOLEXA_209LAAAXX_8_1_725_631 length=26 IIIIIIIIIIIIIIIIIIIII=2II7 @SRR015141.381 WICMT-SOLEXA_209LAAAXX_8_1_916_793 length=26 AAGCATTACATCATCACACTTCTTTT +SRR015141.381 WICMT-SOLEXA_209LAAAXX_8_1_916_793 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.382 WICMT-SOLEXA_209LAAAXX_8_1_944_695 length=26 GGTCTGTATAGAGCCATACACTGCTC +SRR015141.382 WICMT-SOLEXA_209LAAAXX_8_1_944_695 length=26 IIIIIIIIIIIIII8*"G4A;I+II, @SRR015141.383 WICMT-SOLEXA_209LAAAXX_8_1_876_905 length=26 GAAGATCAAACCCAAGACATGGCAAG +SRR015141.383 WICMT-SOLEXA_209LAAAXX_8_1_876_905 length=26 IIIIIIIIIIIIIII7IIII8@?II0 @SRR015141.384 WICMT-SOLEXA_209LAAAXX_8_1_894_327 length=26 ACGTATCCATTATGACTCTTAATATC +SRR015141.384 WICMT-SOLEXA_209LAAAXX_8_1_894_327 length=26 I:I>I#I1II?IIII6III/IIIIII @SRR015141.385 WICMT-SOLEXA_209LAAAXX_8_1_879_267 length=26 GAGGGTGTCTGTGTCAACTTCCCATT +SRR015141.385 WICMT-SOLEXA_209LAAAXX_8_1_879_267 length=26 IIIIIIIIIIIIIIFDIFII8IIAII @SRR015141.386 WICMT-SOLEXA_209LAAAXX_8_1_892_849 length=26 GAATTAAAAATGACCAGAACTTCTTT +SRR015141.386 WICMT-SOLEXA_209LAAAXX_8_1_892_849 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.387 WICMT-SOLEXA_209LAAAXX_8_1_855_718 length=26 GAGGTGGTGAGGGAGAGCGATGACGA +SRR015141.387 WICMT-SOLEXA_209LAAAXX_8_1_855_718 length=26 IIIIIIIIIEI7IDIAH0IAI3=:)$ @SRR015141.388 WICMT-SOLEXA_209LAAAXX_8_1_875_467 length=26 AGTCCTAATAAGAAGAAATGCTCTCA +SRR015141.388 WICMT-SOLEXA_209LAAAXX_8_1_875_467 length=26 IIIIIIIIIIIBII*IIIII@I7I7I @SRR015141.389 WICMT-SOLEXA_209LAAAXX_8_1_887_278 length=26 CATGTGTATGAAGTTTGTATTTTATC +SRR015141.389 WICMT-SOLEXA_209LAAAXX_8_1_887_278 length=26 IIIIIIIIIIII0I&I;III:IGF68 @SRR015141.390 WICMT-SOLEXA_209LAAAXX_8_1_918_397 length=26 GGACTGAGGATCAGCTCCGCCTCCTG +SRR015141.390 WICMT-SOLEXA_209LAAAXX_8_1_918_397 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.391 WICMT-SOLEXA_209LAAAXX_8_1_923_800 length=26 GCTTTCTTGTAGACACTGTTTTCCCT +SRR015141.391 WICMT-SOLEXA_209LAAAXX_8_1_923_800 length=26 IIIIIIIIIII@IIIIIIIIII'I$I @SRR015141.392 WICMT-SOLEXA_209LAAAXX_8_1_899_815 length=26 TCCCCGGGGCACACACTTTGCTTATC +SRR015141.392 WICMT-SOLEXA_209LAAAXX_8_1_899_815 length=26 IIIIIIIIIIIIIIIIIIIIII$I&I @SRR015141.393 WICMT-SOLEXA_209LAAAXX_8_1_903_347 length=26 AAAACCAGTCTAATACAAGGCCTGCT +SRR015141.393 WICMT-SOLEXA_209LAAAXX_8_1_903_347 length=26 IIFIII>IIIIIIIIII(IIAIIIII @SRR015141.394 WICMT-SOLEXA_209LAAAXX_8_1_929_175 length=26 GGCGAGAAAACTGAAAATCACGGAAA +SRR015141.394 WICMT-SOLEXA_209LAAAXX_8_1_929_175 length=26 IIIIIIIIIIIIIIIIIIIIII-III @SRR015141.395 WICMT-SOLEXA_209LAAAXX_8_1_808_675 length=26 GCAGTCAGTGCTCTTAGCCACTGAGC +SRR015141.395 WICMT-SOLEXA_209LAAAXX_8_1_808_675 length=26 IIIIIIIIIIII@III%2HIII-<4# @SRR015141.396 WICMT-SOLEXA_209LAAAXX_8_1_838_226 length=26 GTATTATTTTTAAGTCTCTATTGTAA +SRR015141.396 WICMT-SOLEXA_209LAAAXX_8_1_838_226 length=26 IIIIIIIIIIIIIIIIIIII$I(",= @SRR015141.397 WICMT-SOLEXA_209LAAAXX_8_1_863_733 length=26 GGATGGACATCTGTGGTGGATTCTTT +SRR015141.397 WICMT-SOLEXA_209LAAAXX_8_1_863_733 length=26 II3II@.$9III*'A5I22$A*/I&( @SRR015141.398 WICMT-SOLEXA_209LAAAXX_8_1_955_585 length=26 GTACTTCTTTCTTCTTTTTTTATTTT +SRR015141.398 WICMT-SOLEXA_209LAAAXX_8_1_955_585 length=26 IIIIIIIIIIIII2I*IIIIIIIIII @SRR015141.399 WICMT-SOLEXA_209LAAAXX_8_1_885_839 length=26 GCTCCCATAGATTCATGTGTTTTAAC +SRR015141.399 WICMT-SOLEXA_209LAAAXX_8_1_885_839 length=26 IIIIIIIIGIIIIIIIAI'III&??/ @SRR015141.400 WICMT-SOLEXA_209LAAAXX_8_1_882_82 length=26 GGTTGATTTTAACCCCTGAGTTTGAT +SRR015141.400 WICMT-SOLEXA_209LAAAXX_8_1_882_82 length=26 IIIIIIIIIIIIIIIIIIIHIIIDII @SRR015141.401 WICMT-SOLEXA_209LAAAXX_8_1_944_730 length=26 GTCCTCTGGAAAAAGAGCCAGTACTC +SRR015141.401 WICMT-SOLEXA_209LAAAXX_8_1_944_730 length=26 IIIIIIIIIIIIIIII'IIIIII1II @SRR015141.402 WICMT-SOLEXA_209LAAAXX_8_1_920_348 length=26 TGAGACCCTATCACAGTAGTTCTCAA +SRR015141.402 WICMT-SOLEXA_209LAAAXX_8_1_920_348 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.403 WICMT-SOLEXA_209LAAAXX_8_1_908_504 length=26 AGCATGGATCTGATTATAAGTCTATG +SRR015141.403 WICMT-SOLEXA_209LAAAXX_8_1_908_504 length=26 IIIIII"IIIIIIIIII#IIIIIII+ @SRR015141.404 WICMT-SOLEXA_209LAAAXX_8_1_929_207 length=26 GGATTTGATGATTTCTCTTCAACTAA +SRR015141.404 WICMT-SOLEXA_209LAAAXX_8_1_929_207 length=26 II(IIIII$$5III+I"I#II$,HII @SRR015141.405 WICMT-SOLEXA_209LAAAXX_8_1_875_425 length=26 GCGAGGAAAACTGAAAAAGGTGGAAA +SRR015141.405 WICMT-SOLEXA_209LAAAXX_8_1_875_425 length=26 IIIIIIIIIIIIIIIIIIIIIIBIII @SRR015141.406 WICMT-SOLEXA_209LAAAXX_8_1_906_484 length=26 ATTAGATATTCTGATAGCAAATATCA +SRR015141.406 WICMT-SOLEXA_209LAAAXX_8_1_906_484 length=26 IIIIIIIIIIIIIIIIIIIII.IIII @SRR015141.407 WICMT-SOLEXA_209LAAAXX_8_1_797_649 length=26 GCTAGCCCTTTGTTTTGTGATTTTAT +SRR015141.407 WICMT-SOLEXA_209LAAAXX_8_1_797_649 length=26 II,III$IHI(/)-II'-'37'I"G5 @SRR015141.408 WICMT-SOLEXA_209LAAAXX_8_1_894_572 length=26 CTCCCAGGCAGCTCATCTAACCTAAT +SRR015141.408 WICMT-SOLEXA_209LAAAXX_8_1_894_572 length=26 IIIIIIIIIIIIIIIIIIII24IIII @SRR015141.409 WICMT-SOLEXA_209LAAAXX_8_1_924_689 length=26 GCTCACAGTCATCTATAAGATGTTAC +SRR015141.409 WICMT-SOLEXA_209LAAAXX_8_1_924_689 length=26 IIIIIIIIIIIIIIIIIIIII:0@II @SRR015141.410 WICMT-SOLEXA_209LAAAXX_8_1_841_821 length=26 GGCTTGGAGATCCTTATCTTGATCTT +SRR015141.410 WICMT-SOLEXA_209LAAAXX_8_1_841_821 length=26 IIIIIIIIIIIIIIIIIII%)IIIII @SRR015141.411 WICMT-SOLEXA_209LAAAXX_8_1_944_925 length=26 TGTGGCTCAGGCTGAACCTGCATTCA +SRR015141.411 WICMT-SOLEXA_209LAAAXX_8_1_944_925 length=26 IIIIIIIIIIIII0IIIIIFIIII(I @SRR015141.412 WICMT-SOLEXA_209LAAAXX_8_1_900_911 length=26 CAGGTAATCGTTATTTGTTTTCTTGT +SRR015141.412 WICMT-SOLEXA_209LAAAXX_8_1_900_911 length=26 .I39II@II+II(IIAIIIIIEII0I @SRR015141.413 WICMT-SOLEXA_209LAAAXX_8_1_760_496 length=26 GTTGTTTGCTCATCTGTCTTCCTCCT +SRR015141.413 WICMT-SOLEXA_209LAAAXX_8_1_760_496 length=26 IIIIIIIIIIIIIBI(IIIIE0I-&I @SRR015141.414 WICMT-SOLEXA_209LAAAXX_8_1_909_553 length=26 TCAGGGCTTAAGCAGAGACTTTAAGA +SRR015141.414 WICMT-SOLEXA_209LAAAXX_8_1_909_553 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.415 WICMT-SOLEXA_209LAAAXX_8_1_941_538 length=26 AATTCCCATGTTTCTTCTAATTTTAT +SRR015141.415 WICMT-SOLEXA_209LAAAXX_8_1_941_538 length=26 IIIIIIIIIIIIIIIIIDIIIIIIII @SRR015141.416 WICMT-SOLEXA_209LAAAXX_8_1_909_709 length=26 TTGGTGTACCCAGTTTGGATGGTTCA +SRR015141.416 WICMT-SOLEXA_209LAAAXX_8_1_909_709 length=26 IIIIIIII"IIIIII)I'IIIIIIII @SRR015141.417 WICMT-SOLEXA_209LAAAXX_8_1_709_701 length=26 GAATCTCAGGTGCAGAAGATTCCATA +SRR015141.417 WICMT-SOLEXA_209LAAAXX_8_1_709_701 length=26 IIIIIIIIIIIIIIIIIIIIII5DII @SRR015141.418 WICMT-SOLEXA_209LAAAXX_8_1_667_695 length=26 GTGAGCAGGTGGGCTAGCATTACTTG +SRR015141.418 WICMT-SOLEXA_209LAAAXX_8_1_667_695 length=26 IIIIIIIII)III6II3;)II0"I"" @SRR015141.419 WICMT-SOLEXA_209LAAAXX_8_1_911_307 length=26 GACAGAGGGAGAATGAGGTCAGCCAG +SRR015141.419 WICMT-SOLEXA_209LAAAXX_8_1_911_307 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.420 WICMT-SOLEXA_209LAAAXX_8_1_876_593 length=26 GTATGGCAGGAACATTTAGTATTATG +SRR015141.420 WICMT-SOLEXA_209LAAAXX_8_1_876_593 length=26 I$IIII&"%I"-HII)6,"4"II=$# @SRR015141.421 WICMT-SOLEXA_209LAAAXX_8_1_888_488 length=26 TGTTGTCTTCTTTCCCTTAGATTTTT +SRR015141.421 WICMT-SOLEXA_209LAAAXX_8_1_888_488 length=26 IIIIIIIII/IID?-7II;6DIII1& @SRR015141.422 WICMT-SOLEXA_209LAAAXX_8_1_849_618 length=26 GACATGATGTTTTTCTATACTGTTGT +SRR015141.422 WICMT-SOLEXA_209LAAAXX_8_1_849_618 length=26 IIIIIIIII1IIII1)@II%I3I*&= @SRR015141.423 WICMT-SOLEXA_209LAAAXX_8_1_898_176 length=26 AAACCTGGAACAAACTGGAAATCTCT +SRR015141.423 WICMT-SOLEXA_209LAAAXX_8_1_898_176 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.424 WICMT-SOLEXA_209LAAAXX_8_1_915_459 length=26 TGAGGTACCTCACAGAGAGCTACCTG +SRR015141.424 WICMT-SOLEXA_209LAAAXX_8_1_915_459 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.425 WICMT-SOLEXA_209LAAAXX_8_1_893_288 length=26 GGGTATCTAAGGTACTGAAGTCATTT +SRR015141.425 WICMT-SOLEXA_209LAAAXX_8_1_893_288 length=26 II$8GIIIIIIIIIIIIII2=,IIII @SRR015141.426 WICMT-SOLEXA_209LAAAXX_8_1_903_500 length=26 AATGAATGTGGTAAAGCCTTTGCATA +SRR015141.426 WICMT-SOLEXA_209LAAAXX_8_1_903_500 length=26 IIIIIIIIIIIIIII.IIIIIIIIII @SRR015141.427 WICMT-SOLEXA_209LAAAXX_8_1_891_336 length=26 TGAATCTTCCATGTGTGCCTGTATTT +SRR015141.427 WICMT-SOLEXA_209LAAAXX_8_1_891_336 length=26 IIIIIIIIID'I1&*I+III?""FI/ @SRR015141.428 WICMT-SOLEXA_209LAAAXX_8_1_919_99 length=26 GGGTAATGTGCTATATGATTATATAC +SRR015141.428 WICMT-SOLEXA_209LAAAXX_8_1_919_99 length=26 IIII%I*IIIIIIIII"%"III4I/$ @SRR015141.429 WICMT-SOLEXA_209LAAAXX_8_1_876_328 length=26 AGATCACTGTTTGCAGCCAGATCACT +SRR015141.429 WICMT-SOLEXA_209LAAAXX_8_1_876_328 length=26 IIIIIIIIIIIIIIIIIDIIIIBIAI @SRR015141.430 WICMT-SOLEXA_209LAAAXX_8_1_770_277 length=26 GGTTTTGGTTTTTTTTTTTTTTATTT +SRR015141.430 WICMT-SOLEXA_209LAAAXX_8_1_770_277 length=26 IIIIIIIIIIIIIIIII+IIIIIIII @SRR015141.431 WICMT-SOLEXA_209LAAAXX_8_1_864_413 length=26 GTTCTCCTGCCTCAGCTTCCCAAATA +SRR015141.431 WICMT-SOLEXA_209LAAAXX_8_1_864_413 length=26 IIIIIIIIIIIIIIIIIIIIIIHIII @SRR015141.432 WICMT-SOLEXA_209LAAAXX_8_1_923_585 length=26 ACAAAGAAGTAGGTGCTGGCTCCCAC +SRR015141.432 WICMT-SOLEXA_209LAAAXX_8_1_923_585 length=26 IIII;IIIIIIIIIIIIIIIIIIIIC @SRR015141.433 WICMT-SOLEXA_209LAAAXX_8_1_915_177 length=26 ACTCAGCCTCAGCCTGGGATAGTGCT +SRR015141.433 WICMT-SOLEXA_209LAAAXX_8_1_915_177 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.434 WICMT-SOLEXA_209LAAAXX_8_1_920_886 length=26 GCGAAGGGAAGGGGATATTTCGGAAC +SRR015141.434 WICMT-SOLEXA_209LAAAXX_8_1_920_886 length=26 I1I6IIIIIIIIIIII*:-I>I9+I0 @SRR015141.435 WICMT-SOLEXA_209LAAAXX_8_1_918_782 length=26 GTGTGGAAAAATCTTTGATTTTTATT +SRR015141.435 WICMT-SOLEXA_209LAAAXX_8_1_918_782 length=26 IIIIIIIIIII2+II3IIIIIIBIII @SRR015141.436 WICMT-SOLEXA_209LAAAXX_8_1_914_714 length=26 CGGCGGCAATTGTTGTATTTTCTCTT +SRR015141.436 WICMT-SOLEXA_209LAAAXX_8_1_914_714 length=26 7III9III?6II)II%III*"=I%I1 @SRR015141.437 WICMT-SOLEXA_209LAAAXX_8_1_892_618 length=26 CTAAAATAGTTACAATGATTTATTAC +SRR015141.437 WICMT-SOLEXA_209LAAAXX_8_1_892_618 length=26 IIBFI68*IEIIII"I3CII"(?I"" @SRR015141.438 WICMT-SOLEXA_209LAAAXX_8_1_947_603 length=26 TGGCAGCTTCTCGGAACTTTCCGCAT +SRR015141.438 WICMT-SOLEXA_209LAAAXX_8_1_947_603 length=26 IIIIIIIIIIII6IIIII+III'IH9 @SRR015141.439 WICMT-SOLEXA_209LAAAXX_8_1_815_778 length=26 GGATGGACCATGTAGAGACTGCCATA +SRR015141.439 WICMT-SOLEXA_209LAAAXX_8_1_815_778 length=26 IIIIIIIIIIIIIIII7IFII/7II@ @SRR015141.440 WICMT-SOLEXA_209LAAAXX_8_1_540_910 length=26 GAAAATGTGGTAAATCTACATAATGG +SRR015141.440 WICMT-SOLEXA_209LAAAXX_8_1_540_910 length=26 IIIIIII.II%I%IIII#.$&?IB*" @SRR015141.441 WICMT-SOLEXA_209LAAAXX_8_1_892_961 length=26 TCTNNNNNNNNNNNNNNNNNNNNNNN +SRR015141.441 WICMT-SOLEXA_209LAAAXX_8_1_892_961 length=26 III!!!!!!!!!!!!!!!!!!!!!!! @SRR015141.442 WICMT-SOLEXA_209LAAAXX_8_1_756_462 length=26 GATCATTTCTGTTCCTAACACATAGT +SRR015141.442 WICMT-SOLEXA_209LAAAXX_8_1_756_462 length=26 IIIIIIIIIIIIII50*3II @SRR015141.444 WICMT-SOLEXA_209LAAAXX_8_1_900_605 length=26 AATCTCTAGTCTCACCAGAGAGAGAA +SRR015141.444 WICMT-SOLEXA_209LAAAXX_8_1_900_605 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.445 WICMT-SOLEXA_209LAAAXX_8_1_803_708 length=26 GGGCTTCTTGGATGGGAGCCTAGTTG +SRR015141.445 WICMT-SOLEXA_209LAAAXX_8_1_803_708 length=26 IIIIIIIIIIIII,-2.,.II@0I$+ @SRR015141.446 WICMT-SOLEXA_209LAAAXX_8_1_789_680 length=26 GGCTGAGCTAAGTCAAGAAGACATCT +SRR015141.446 WICMT-SOLEXA_209LAAAXX_8_1_789_680 length=26 IIIIIIIIIIIIIIIIIGI>IB8I?I @SRR015141.447 WICMT-SOLEXA_209LAAAXX_8_1_937_229 length=26 GACCTTCCTGACGTCTCCAGGATGGA +SRR015141.447 WICMT-SOLEXA_209LAAAXX_8_1_937_229 length=26 IIIIIIIIIIIIIIIIIIIIIIII3I @SRR015141.448 WICMT-SOLEXA_209LAAAXX_8_1_762_886 length=26 GATGCCCCTCATCAGAGGAATGGATA +SRR015141.448 WICMT-SOLEXA_209LAAAXX_8_1_762_886 length=26 IIIIIIIIIIIIII9I6FIII)-FIG @SRR015141.449 WICMT-SOLEXA_209LAAAXX_8_1_914_737 length=26 AGCATGCATGGTTGGTACACTTTTGT +SRR015141.449 WICMT-SOLEXA_209LAAAXX_8_1_914_737 length=26 IIIIIIIIIIIIIIIIIIIIIIIFII @SRR015141.450 WICMT-SOLEXA_209LAAAXX_8_1_947_508 length=26 TATCTCAGGCTCCCGCCAGAACCTTC +SRR015141.450 WICMT-SOLEXA_209LAAAXX_8_1_947_508 length=26 IIIIIIIIIIIIIIIIIIIIIIIII- @SRR015141.451 WICMT-SOLEXA_209LAAAXX_8_1_911_164 length=26 GTAGGATTTGCCTTTTTGTTAAATAC +SRR015141.451 WICMT-SOLEXA_209LAAAXX_8_1_911_164 length=26 IIIIIIIIIIIIIIIIIII&IIIIIG @SRR015141.452 WICMT-SOLEXA_209LAAAXX_8_1_774_635 length=26 GAGCCTCATTCTTGCAGCGTCTCACC +SRR015141.452 WICMT-SOLEXA_209LAAAXX_8_1_774_635 length=26 IIIIIIIIIIIII,B@",II%I6G%% @SRR015141.453 WICMT-SOLEXA_209LAAAXX_8_1_905_708 length=26 AAGTGGATTTTTCTCATTCTCCATTA +SRR015141.453 WICMT-SOLEXA_209LAAAXX_8_1_905_708 length=26 IIIIIIIIIIIIIIIIIIIIIIII.I @SRR015141.454 WICMT-SOLEXA_209LAAAXX_8_1_884_657 length=26 CCATCTGCATTAGTGGCAAGTCTTAC +SRR015141.454 WICMT-SOLEXA_209LAAAXX_8_1_884_657 length=26 IIIIIIIIIIIIIIA8CI<1I8IIIA @SRR015141.455 WICMT-SOLEXA_209LAAAXX_8_1_903_877 length=26 ATGTCTTCCCCTTCATCAAGAAGTAT +SRR015141.455 WICMT-SOLEXA_209LAAAXX_8_1_903_877 length=26 IIIIIIIIIIIIII$IIII.I1IIII @SRR015141.456 WICMT-SOLEXA_209LAAAXX_8_1_965_658 length=26 GCCTCTAGTCTGAGCTTTTGAGTTTT +SRR015141.456 WICMT-SOLEXA_209LAAAXX_8_1_965_658 length=26 IIIIIIIIIIIIIIIIII"II:IIII @SRR015141.457 WICMT-SOLEXA_209LAAAXX_8_1_953_455 length=26 GCAGGTTAGAGTACTTTCTCCTTTTA +SRR015141.457 WICMT-SOLEXA_209LAAAXX_8_1_953_455 length=26 IIIIIIIIIIIIIHII#III?I"II+ @SRR015141.458 WICMT-SOLEXA_209LAAAXX_8_1_810_650 length=26 GATAGGGGACTTGAATGTAGTATTCC +SRR015141.458 WICMT-SOLEXA_209LAAAXX_8_1_810_650 length=26 IIIII%III2III%/III$B.6II"% @SRR015141.459 WICMT-SOLEXA_209LAAAXX_8_1_931_656 length=26 TAAGACTTCAGCAATGAAGCTGCTTT +SRR015141.459 WICMT-SOLEXA_209LAAAXX_8_1_931_656 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.460 WICMT-SOLEXA_209LAAAXX_8_1_807_426 length=26 GTCATCTACGGTCAAGGTGAACTAAT +SRR015141.460 WICMT-SOLEXA_209LAAAXX_8_1_807_426 length=26 IIIIIII3IIII86#?9I?IDI&I1I @SRR015141.461 WICMT-SOLEXA_209LAAAXX_8_1_658_723 length=26 GGTCATCAGACTGGCTTATATAAACA +SRR015141.461 WICMT-SOLEXA_209LAAAXX_8_1_658_723 length=26 II7IIIIIIII$II7II2#H%II?)$ @SRR015141.462 WICMT-SOLEXA_209LAAAXX_8_1_802_477 length=26 GTTATAAACAGAAGAATTGCCAAGGA +SRR015141.462 WICMT-SOLEXA_209LAAAXX_8_1_802_477 length=26 IIIIIIIIIIIIIIIIIID1AII(75 @SRR015141.463 WICMT-SOLEXA_209LAAAXX_8_1_762_449 length=26 GGAAGTTGTAGCCATAGGATTCTCAT +SRR015141.463 WICMT-SOLEXA_209LAAAXX_8_1_762_449 length=26 IIIIIIIII9I0*FE7I8*II"I8)I @SRR015141.464 WICMT-SOLEXA_209LAAAXX_8_1_523_879 length=26 GTGATTTCGTCATTTTTCAATTTGTC +SRR015141.464 WICMT-SOLEXA_209LAAAXX_8_1_523_879 length=26 IIIIIIIIIIIIIIIII;IC*II&I" @SRR015141.465 WICMT-SOLEXA_209LAAAXX_8_1_584_904 length=26 GTTTCCAAAACTTACTCACAGCACTT +SRR015141.465 WICMT-SOLEXA_209LAAAXX_8_1_584_904 length=26 IIIIIDIIIII3$B"I/./0:"51II @SRR015141.466 WICMT-SOLEXA_209LAAAXX_8_1_770_865 length=26 GCATGTGTTTGTTGGAGAACGGTTAA +SRR015141.466 WICMT-SOLEXA_209LAAAXX_8_1_770_865 length=26 IIIIIIIIIIIII"5?-HIF(*II0' @SRR015141.467 WICMT-SOLEXA_209LAAAXX_8_1_903_210 length=26 TACTCTTGGGAATATACCCAAAAGAT +SRR015141.467 WICMT-SOLEXA_209LAAAXX_8_1_903_210 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.468 WICMT-SOLEXA_209LAAAXX_8_1_911_214 length=26 AGCCCCAACCGGACATCTCTGTGTAG +SRR015141.468 WICMT-SOLEXA_209LAAAXX_8_1_911_214 length=26 IIIIIIIIIIIIIIIIIIIIII:II4 @SRR015141.469 WICMT-SOLEXA_209LAAAXX_8_1_931_854 length=26 TGAACTCAGGACCTCTGGAAGAGCAG +SRR015141.469 WICMT-SOLEXA_209LAAAXX_8_1_931_854 length=26 IIIIIIIIIIIIIIIIIIII55I(I'HI6"1+E")$$ @SRR015141.489 WICMT-SOLEXA_209LAAAXX_8_1_925_896 length=26 GCAGAGCAGAAGGCGCTCTTGGATCT +SRR015141.489 WICMT-SOLEXA_209LAAAXX_8_1_925_896 length=26 IIIIIIIIIIIIIII%IIIIIIDIHI @SRR015141.490 WICMT-SOLEXA_209LAAAXX_8_1_733_766 length=26 GGATAAGGGCCAGATTGTAGCCACGT +SRR015141.490 WICMT-SOLEXA_209LAAAXX_8_1_733_766 length=26 IIIIIIIIIIIIIIIIIIID6DH.3I @SRR015141.491 WICMT-SOLEXA_209LAAAXX_8_1_888_398 length=26 GCTCTCTTCAGGGTGCCAAGCCTCAA +SRR015141.491 WICMT-SOLEXA_209LAAAXX_8_1_888_398 length=26 IIIIIIIIIIIIIIIA;IIG9FI@III$I1IIIII#IAI&" @SRR015141.498 WICMT-SOLEXA_209LAAAXX_8_1_737_613 length=26 GGTCAACTTCGGTGATGTTACCATTT +SRR015141.498 WICMT-SOLEXA_209LAAAXX_8_1_737_613 length=26 IIIIII.>I1I'",I129'I"%.I:$ @SRR015141.499 WICMT-SOLEXA_209LAAAXX_8_1_824_729 length=26 GTAGGCAGCATACACCAGCTGATATG +SRR015141.499 WICMT-SOLEXA_209LAAAXX_8_1_824_729 length=26 IIIIIIIIIIIII?7:=C2IF+I3I* @SRR015141.500 WICMT-SOLEXA_209LAAAXX_8_1_899_895 length=26 GTAGGCGCCCACGGGGGTCCAGGTAT +SRR015141.500 WICMT-SOLEXA_209LAAAXX_8_1_899_895 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.501 WICMT-SOLEXA_209LAAAXX_8_1_882_902 length=26 GCTCTTTGGATTACTTTGTTGCTTGC +SRR015141.501 WICMT-SOLEXA_209LAAAXX_8_1_882_902 length=26 ):IC-II>,ICIIII34&<+(@1I&, @SRR015141.502 WICMT-SOLEXA_209LAAAXX_8_1_911_619 length=26 TAAGCTGGAGACCCTATACTGAAATA +SRR015141.502 WICMT-SOLEXA_209LAAAXX_8_1_911_619 length=26 IBIIIIIIIIIIIII/IIIIIIIII+ @SRR015141.503 WICMT-SOLEXA_209LAAAXX_8_1_904_593 length=26 CCAGAAAAACCCAAGGAGGTTGTGCT +SRR015141.503 WICMT-SOLEXA_209LAAAXX_8_1_904_593 length=26 IIIIIIIIIIIIIIIIIIIIIII=GI @SRR015141.504 WICMT-SOLEXA_209LAAAXX_8_1_935_418 length=26 TGACAGACGGCCTCTACCTCAGAAGC +SRR015141.504 WICMT-SOLEXA_209LAAAXX_8_1_935_418 length=26 IIIIIIIIII,IIIIIGIIIIIIIII @SRR015141.505 WICMT-SOLEXA_209LAAAXX_8_1_896_623 length=26 AGTCTGGGTAGAGGAGTGGGCAGCAG +SRR015141.505 WICMT-SOLEXA_209LAAAXX_8_1_896_623 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.506 WICMT-SOLEXA_209LAAAXX_8_1_893_129 length=26 GAGGAGGGCTGTGGATGTGAATACTC +SRR015141.506 WICMT-SOLEXA_209LAAAXX_8_1_893_129 length=26 I*.III4I3IIIID5-@?I$+I-1I" @SRR015141.507 WICMT-SOLEXA_209LAAAXX_8_1_528_921 length=26 GATAAGCCAACCGTGAGCCAGGTCAG +SRR015141.507 WICMT-SOLEXA_209LAAAXX_8_1_528_921 length=26 IIIIIIIIIII;II7II9II5:+;25 @SRR015141.510 WICMT-SOLEXA_209LAAAXX_8_1_957_552 length=26 TGTACGCCCGACCTCCTGATCCCTGC +SRR015141.510 WICMT-SOLEXA_209LAAAXX_8_1_957_552 length=26 IIIIIIIIIIIIII(IIIIIIIIII4 @SRR015141.511 WICMT-SOLEXA_209LAAAXX_8_1_905_890 length=26 CTTTTAAACCTGCTCACTTTTATCAC +SRR015141.511 WICMT-SOLEXA_209LAAAXX_8_1_905_890 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.512 WICMT-SOLEXA_209LAAAXX_8_1_879_100 length=26 TTTGAGTTTAGGTCTTACTAAGTTAT +SRR015141.512 WICMT-SOLEXA_209LAAAXX_8_1_879_100 length=26 IIIIIIIIIIIIIIII%GIII4III7 @SRR015141.513 WICMT-SOLEXA_209LAAAXX_8_1_790_881 length=26 GTCCTGGGCTGGCTGGCTTATTTTTT +SRR015141.513 WICMT-SOLEXA_209LAAAXX_8_1_790_881 length=26 IIIIIIIIIIIIIII2HII/I$II>$ @SRR015141.514 WICMT-SOLEXA_209LAAAXX_8_1_876_219 length=26 TGTTAGAACCTTAGCTCAAAAGACAC +SRR015141.514 WICMT-SOLEXA_209LAAAXX_8_1_876_219 length=26 IIIIIIIIIIIIIHBIIIGIIII>IB @SRR015141.515 WICMT-SOLEXA_209LAAAXX_8_1_626_878 length=26 GTAAGGGGAAGTAGCTGACCCCTTGT +SRR015141.515 WICMT-SOLEXA_209LAAAXX_8_1_626_878 length=26 IIIIIIIIIII#I2II*I;4/(II&) @SRR015141.516 WICMT-SOLEXA_209LAAAXX_8_1_594_963 length=26 GGANNNNNNNNNNNNNNNNNNNNNNN +SRR015141.516 WICMT-SOLEXA_209LAAAXX_8_1_594_963 length=26 II-!!!!!!!!!!!!!!!!!!!!!!! @SRR015141.517 WICMT-SOLEXA_209LAAAXX_8_1_894_292 length=26 ATATGCATATAATTATTATTTTTCTT +SRR015141.517 WICMT-SOLEXA_209LAAAXX_8_1_894_292 length=26 IIIIIIIIIIIIIIIIIII(IIH5I@ @SRR015141.518 WICMT-SOLEXA_209LAAAXX_8_1_715_713 length=26 GATGTCAGGAGTTATGCCTTCGCAAT +SRR015141.518 WICMT-SOLEXA_209LAAAXX_8_1_715_713 length=26 IIIIIIIIIIIIIIIHAIII9+7ED# @SRR015141.519 WICMT-SOLEXA_209LAAAXX_8_1_900_223 length=26 TGTGCCCCAGTGGTAGATTAAATGTG +SRR015141.519 WICMT-SOLEXA_209LAAAXX_8_1_900_223 length=26 IIIIIIIIIIIIIIIII(II(IIIII @SRR015141.520 WICMT-SOLEXA_209LAAAXX_8_1_903_582 length=26 CTTTGCTGTGATTCCCCGTGACACTT +SRR015141.520 WICMT-SOLEXA_209LAAAXX_8_1_903_582 length=26 IIIIIIIIIIII9IIIIIIIIIIIII @SRR015141.521 WICMT-SOLEXA_209LAAAXX_8_1_946_438 length=26 ACTGGCAGCAGAGTTTATATGTATTT +SRR015141.521 WICMT-SOLEXA_209LAAAXX_8_1_946_438 length=26 =/IIIII"I%IIIIIIIII,HIIIII @SRR015141.522 WICMT-SOLEXA_209LAAAXX_8_1_957_887 length=26 GGTGGAAAAGTTAGAAATGTCCACTG +SRR015141.522 WICMT-SOLEXA_209LAAAXX_8_1_957_887 length=26 IIIIIIIIIIIIIIIIIIIIIIIIIG @SRR015141.523 WICMT-SOLEXA_209LAAAXX_8_1_897_588 length=26 AACAACCCCTCTCTGCTTCTCAGGAC +SRR015141.523 WICMT-SOLEXA_209LAAAXX_8_1_897_588 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.524 WICMT-SOLEXA_209LAAAXX_8_1_801_455 length=26 GCTGAGCCATCTCTCCAGACACCAAG +SRR015141.524 WICMT-SOLEXA_209LAAAXX_8_1_801_455 length=26 IIIIIIIIIIIIIIIGIIIIIIDC>3 @SRR015141.525 WICMT-SOLEXA_209LAAAXX_8_1_910_287 length=26 GCACAGAGCCTAGAGCTTAGGTGGAA +SRR015141.525 WICMT-SOLEXA_209LAAAXX_8_1_910_287 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.526 WICMT-SOLEXA_209LAAAXX_8_1_926_676 length=26 AATATGAATTGACTACATTTACATTC +SRR015141.526 WICMT-SOLEXA_209LAAAXX_8_1_926_676 length=26 IIIIIIIIIIIIIIIIIIIIIIII*I @SRR015141.527 WICMT-SOLEXA_209LAAAXX_8_1_901_363 length=26 GAGTTTGAGGCCAGCCTAGTCTACAA +SRR015141.527 WICMT-SOLEXA_209LAAAXX_8_1_901_363 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.528 WICMT-SOLEXA_209LAAAXX_8_1_883_603 length=26 ATTTTGCCTCTGGTAGGCATCGCCAT +SRR015141.528 WICMT-SOLEXA_209LAAAXX_8_1_883_603 length=26 IIIIIIIIIIII#II*#;>I<=875I @SRR015141.529 WICMT-SOLEXA_209LAAAXX_8_1_870_223 length=26 GTTTGTTTCTTTGAGGAAAGATCTTG +SRR015141.529 WICMT-SOLEXA_209LAAAXX_8_1_870_223 length=26 IIIIIIIIIIIIDI,AIIII>I.II1 @SRR015141.530 WICMT-SOLEXA_209LAAAXX_8_1_900_963 length=26 TAGNNNNNNNNNNNNNNNNNNNNNNN +SRR015141.530 WICMT-SOLEXA_209LAAAXX_8_1_900_963 length=26 III!!!!!!!!!!!!!!!!!!!!!!! @SRR015141.531 WICMT-SOLEXA_209LAAAXX_8_1_910_816 length=26 GAGGACATCAGATCTCATTACATATG +SRR015141.531 WICMT-SOLEXA_209LAAAXX_8_1_910_816 length=26 IIIIIIIIIIIIIIIIIIII;IIIII @SRR015141.532 WICMT-SOLEXA_209LAAAXX_8_1_773_723 length=26 GAAGGACCTGGAATATGGCGAGAAAA +SRR015141.532 WICMT-SOLEXA_209LAAAXX_8_1_773_723 length=26 IIIIIIIIIIIIIIIIIIIIA+8,III5+D' @SRR015141.538 WICMT-SOLEXA_209LAAAXX_8_1_802_633 length=26 GATACTTAGGTTTTCCATTCAACAGC +SRR015141.538 WICMT-SOLEXA_209LAAAXX_8_1_802_633 length=26 IIIIIIIIIIIIII?8="I48;*6*( @SRR015141.539 WICMT-SOLEXA_209LAAAXX_8_1_858_671 length=26 GTGTCTCCTTCCTAGCCTGGCTTCCA +SRR015141.539 WICMT-SOLEXA_209LAAAXX_8_1_858_671 length=26 IIIIIIIIIIIIIIFI9IG1>II74. @SRR015141.540 WICMT-SOLEXA_209LAAAXX_8_1_736_674 length=26 GTTGGCCATCAATGGGGAGTGTGGCC +SRR015141.540 WICMT-SOLEXA_209LAAAXX_8_1_736_674 length=26 I(I'I*+I7 @SRR015141.550 WICMT-SOLEXA_209LAAAXX_8_1_929_290 length=26 ACCTTGGAGACTGAAGTCAGGCACAA +SRR015141.550 WICMT-SOLEXA_209LAAAXX_8_1_929_290 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.551 WICMT-SOLEXA_209LAAAXX_8_1_876_749 length=26 GCAGGGTCTGGGAAACTAACCCTAAC +SRR015141.551 WICMT-SOLEXA_209LAAAXX_8_1_876_749 length=26 IIIIIIIIIIIGIEI@?D=H=I4 @SRR015141.555 WICMT-SOLEXA_209LAAAXX_8_1_240_835 length=26 GAATATGGCAACAAAACTGAAAATCA +SRR015141.555 WICMT-SOLEXA_209LAAAXX_8_1_240_835 length=26 IIIIIIIIIIIDIIIIGIIIIIII6B @SRR015141.556 WICMT-SOLEXA_209LAAAXX_8_1_963_389 length=26 GGGCGCGTACGTGTATGTTTGTTTTT +SRR015141.556 WICMT-SOLEXA_209LAAAXX_8_1_963_389 length=26 III8III35IIIIIIII=IIIIAIII @SRR015141.557 WICMT-SOLEXA_209LAAAXX_8_1_928_305 length=26 ATGGGAAGGAATAGAGTCCACCTTTG +SRR015141.557 WICMT-SOLEXA_209LAAAXX_8_1_928_305 length=26 IIIIIIIIIIIIIIIIIIIIIIIII( @SRR015141.558 WICMT-SOLEXA_209LAAAXX_8_1_957_537 length=26 GTGATTGTGGATATATACTCAAAATT +SRR015141.558 WICMT-SOLEXA_209LAAAXX_8_1_957_537 length=26 IIIIIIIIIIIII'IIIII**IIIII @SRR015141.559 WICMT-SOLEXA_209LAAAXX_8_1_925_332 length=26 CAACACCAGTTACCATCAGAGTGTGG +SRR015141.559 WICMT-SOLEXA_209LAAAXX_8_1_925_332 length=26 IIIIIIIIIIIIIIIIIIIIIIIIIE @SRR015141.560 WICMT-SOLEXA_209LAAAXX_8_1_815_655 length=26 GCTATTTGAGGTTAGTATGTTTTGGT +SRR015141.560 WICMT-SOLEXA_209LAAAXX_8_1_815_655 length=26 I2I+1III6II.I(&6&I&GCII'%= @SRR015141.561 WICMT-SOLEXA_209LAAAXX_8_1_931_634 length=26 ACAAAGATCCCAAACCCTTTTTTTAT +SRR015141.561 WICMT-SOLEXA_209LAAAXX_8_1_931_634 length=26 IIIIIIIIIIIIIIIIIIIIIIIII* @SRR015141.562 WICMT-SOLEXA_209LAAAXX_8_1_947_416 length=26 GACCAGTATTGGCATTGGTATCAGGG +SRR015141.562 WICMT-SOLEXA_209LAAAXX_8_1_947_416 length=26 IIIIIIIIIIIIIIIIIIIIIIII+I @SRR015141.563 WICMT-SOLEXA_209LAAAXX_8_1_912_363 length=26 ACCATCACCACCCGGCCACAGACCAC +SRR015141.563 WICMT-SOLEXA_209LAAAXX_8_1_912_363 length=26 IIIIIIIIIIIIIIIIIIIIIII=II @SRR015141.564 WICMT-SOLEXA_209LAAAXX_8_1_867_459 length=26 GACGCCTCAGACGCTCTGAAGAGGCT +SRR015141.564 WICMT-SOLEXA_209LAAAXX_8_1_867_459 length=26 IIIIIIIIIIIIIIIII9?I1A I @SRR015141.565 WICMT-SOLEXA_209LAAAXX_8_1_926_275 length=26 AAACTTGGACGGGTGTGTTTGAATAT +SRR015141.565 WICMT-SOLEXA_209LAAAXX_8_1_926_275 length=26 1*D/II'III;$;IIIIIIIIIIII" @SRR015141.566 WICMT-SOLEXA_209LAAAXX_8_1_903_827 length=26 GGATAAAGCAGTCCTCCCATGCATGC +SRR015141.566 WICMT-SOLEXA_209LAAAXX_8_1_903_827 length=26 IIIIIIIIIIIIIIIIII'IICIIII @SRR015141.567 WICMT-SOLEXA_209LAAAXX_8_1_892_770 length=26 GGGCTCTTGGGAGCTGCAGAAGGCTA +SRR015141.567 WICMT-SOLEXA_209LAAAXX_8_1_892_770 length=26 IIIIIIIIIIIII>IIIIIIF*9.I1 @SRR015141.568 WICMT-SOLEXA_209LAAAXX_8_1_556_839 length=26 GAAATACAATCAAAAATAAATCCATA +SRR015141.568 WICMT-SOLEXA_209LAAAXX_8_1_556_839 length=26 IIIIIIIIIIIIIIEIIIIII<.III @SRR015141.569 WICMT-SOLEXA_209LAAAXX_8_1_615_936 length=26 GGTATTTTAGCTTNNNNNNNTTNNNN +SRR015141.569 WICMT-SOLEXA_209LAAAXX_8_1_615_936 length=26 IIIIIIIIIIIII!!!!!!!I#!!!! @SRR015141.570 WICMT-SOLEXA_209LAAAXX_8_1_879_327 length=26 TGGACAAGTACTACAGCTTATCCTCA +SRR015141.570 WICMT-SOLEXA_209LAAAXX_8_1_879_327 length=26 IIIIIIIIIIIIIII?IIIIIIIIII @SRR015141.571 WICMT-SOLEXA_209LAAAXX_8_1_750_853 length=26 GGTACTCACCCTTCACTCTAGGATAT +SRR015141.571 WICMT-SOLEXA_209LAAAXX_8_1_750_853 length=26 IIIIIIIIIIIIIIIIIIII/-C)8I @SRR015141.572 WICMT-SOLEXA_209LAAAXX_8_1_442_897 length=26 GACACAGGGAAGGGACTCAGATGCCA +SRR015141.572 WICMT-SOLEXA_209LAAAXX_8_1_442_897 length=26 IIIIIIIIIIIIIII8I@I2II+,.I @SRR015141.573 WICMT-SOLEXA_209LAAAXX_8_1_935_862 length=26 GAGGGCACTTGCCACCACAGGTTGTC +SRR015141.573 WICMT-SOLEXA_209LAAAXX_8_1_935_862 length=26 IIIIIIIIIIIIIIIIIIIIIIIII9 @SRR015141.574 WICMT-SOLEXA_209LAAAXX_8_1_919_320 length=26 CCTCACGAGTCATATGCACTAGCTTT +SRR015141.574 WICMT-SOLEXA_209LAAAXX_8_1_919_320 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.575 WICMT-SOLEXA_209LAAAXX_8_1_915_658 length=26 TGGAGACTTTGACAAAGTACTCTTTT +SRR015141.575 WICMT-SOLEXA_209LAAAXX_8_1_915_658 length=26 IIIIIIIIIIIIIIIIIIIIIIIII? @SRR015141.576 WICMT-SOLEXA_209LAAAXX_8_1_824_625 length=26 GACACACACACAAATATTACGAGAAC +SRR015141.576 WICMT-SOLEXA_209LAAAXX_8_1_824_625 length=26 IIIIIIIIIIIIIIIIII;8I886I: @SRR015141.577 WICMT-SOLEXA_209LAAAXX_8_1_912_408 length=26 AGAGGACCAAAAGTTCAGCTCCCAGC +SRR015141.577 WICMT-SOLEXA_209LAAAXX_8_1_912_408 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.578 WICMT-SOLEXA_209LAAAXX_8_1_957_515 length=26 TGGGGGAAAGAGCGTCATTCTGTTTT +SRR015141.578 WICMT-SOLEXA_209LAAAXX_8_1_957_515 length=26 IIIIIIIIIIIIIIIIIIIGIIIIII @SRR015141.579 WICMT-SOLEXA_209LAAAXX_8_1_899_245 length=26 AAAACATCCACTTGTCGACTTGAAAT +SRR015141.579 WICMT-SOLEXA_209LAAAXX_8_1_899_245 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.580 WICMT-SOLEXA_209LAAAXX_8_1_967_398 length=26 TTTCTCGCATAATTCCAGGTCCTTCT +SRR015141.580 WICMT-SOLEXA_209LAAAXX_8_1_967_398 length=26 IIIIIIIIIIIIIIIIIBII'III%I @SRR015141.581 WICMT-SOLEXA_209LAAAXX_8_1_897_504 length=26 AGAAAACCTCCATATCACAAGGTTCT +SRR015141.581 WICMT-SOLEXA_209LAAAXX_8_1_897_504 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.582 WICMT-SOLEXA_209LAAAXX_8_1_811_757 length=26 TATACTAAAACTGGAATGATAAAGAA +SRR015141.582 WICMT-SOLEXA_209LAAAXX_8_1_811_757 length=26 IIIIIIIIIIIIIIIII7IIIII8II @SRR015141.583 WICMT-SOLEXA_209LAAAXX_8_1_650_728 length=26 GTTTCCGAACATTATCAAATTCCCAG +SRR015141.583 WICMT-SOLEXA_209LAAAXX_8_1_650_728 length=26 IIIIIIIIIIIIIII5II=IIG08I3 @SRR015141.584 WICMT-SOLEXA_209LAAAXX_8_1_878_299 length=26 CAGGGGAAATCAGAACTTGCATCACA +SRR015141.584 WICMT-SOLEXA_209LAAAXX_8_1_878_299 length=26 IIIIIIIIIIIIIIIIIIEIIIAI:; @SRR015141.585 WICMT-SOLEXA_209LAAAXX_8_1_880_825 length=26 CCATATCCGGGGATCCATCCCATAAT +SRR015141.585 WICMT-SOLEXA_209LAAAXX_8_1_880_825 length=26 IIIIIIIIIII4IIII)2II>AI# @SRR015141.593 WICMT-SOLEXA_209LAAAXX_8_1_910_305 length=26 AGGCAACGCTGTAGATAGAAACCCTA +SRR015141.593 WICMT-SOLEXA_209LAAAXX_8_1_910_305 length=26 III"IIIIIIIIIIIIIIIIIIIIII @SRR015141.594 WICMT-SOLEXA_209LAAAXX_8_1_877_347 length=26 TCTAAGCAGACCTCTGAATGCCAGAT +SRR015141.594 WICMT-SOLEXA_209LAAAXX_8_1_877_347 length=26 IIIIIIIIIIIIIIIIIII*III6II @SRR015141.595 WICMT-SOLEXA_209LAAAXX_8_1_908_198 length=26 AGTCAAAGGAAAACCTGAAAGGCCAT +SRR015141.595 WICMT-SOLEXA_209LAAAXX_8_1_908_198 length=26 IIIIIIIIIIIIIIIIIIIIIIIIII @SRR015141.596 WICMT-SOLEXA_209LAAAXX_8_1_856_487 length=26 GTAAGCATCTCATCAGCCATTTCTTT +SRR015141.596 WICMT-SOLEXA_209LAAAXX_8_1_856_487 length=26 IIIIIIIIGII;II4%H>@III-III @SRR015141.597 WICMT-SOLEXA_209LAAAXX_8_1_775_855 length=26 GATTGAGTATAAAGACTATGTGCTTT +SRR015141.597 WICMT-SOLEXA_209LAAAXX_8_1_775_855 length=26 I.IIIIIIIIIIIIIII2I/II& @SRR015141.598 WICMT-SOLEXA_209LAAAXX_8_1_778_686 length=26 GGTCATGGTAAGTCTACCAGAAGCCT +SRR015141.598 WICMT-SOLEXA_209LAAAXX_8_1_778_686 length=26 IIIIIIIIII0II>IE40IIHI,;*I @SRR015141.599 WICMT-SOLEXA_209LAAAXX_8_1_850_934 length=26 GTCTGTACACATGTNNNNNTGTCNTN +SRR015141.599 WICMT-SOLEXA_209LAAAXX_8_1_850_934 length=26 IIIIIIIIIIII5I!!!!!I,I#!I! @SRR015141.600 WICMT-SOLEXA_209LAAAXX_8_1_809_940 length=26 GATGAGNNNAAGNNNNNNNNNNNNNN +SRR015141.600 WICMT-SOLEXA_209LAAAXX_8_1_809_940 length=26 IIIIEI!!!IAI!!!!!!!!!!!!!! @SRR015141.601 WICMT-SOLEXA_209LAAAXX_8_1_893_365 length=26 ACAGATTTCTCAGCAGTTCTCGGAAG +SRR015141.601 WICMT-SOLEXA_209LAAAXX_8_1_893_365 length=26 IIIIIIIIIIIIIIIIIIII4F)8I* @SRR015141.602 WICMT-SOLEXA_209LAAAXX_8_1_765_608 length=26 GGAGTCCTCCCATTAGCATCAGCTAG +SRR015141.602 WICMT-SOLEXA_209LAAAXX_8_1_765_608 length=26 IIIIIIIIIII8IIII+;I4I22I.1 @SRR015141.603 WICMT-SOLEXA_209LAAAXX_8_1_939_904 length=26 GCCCATTCACTGCATCCCAGACAGGC +SRR015141.603 WICMT-SOLEXA_209LAAAXX_8_1_939_904 length=26 IIIIIIIIIIIIIIIIIIIIIIIII0IIGIII?*HI3,IA'*I34 @SRR015141.612 WICMT-SOLEXA_209LAAAXX_8_1_800_591 length=26 GCCTGGAGTTTCAGGGAGAGCAGATC +SRR015141.612 WICMT-SOLEXA_209LAAAXX_8_1_800_591 length=26 IIIIIIIIIII&>IIB?51H+9#F%% @SRR015141.613 WICMT-SOLEXA_209LAAAXX_8_1_933_880 length=26 GTCCACAATGCCTGTGTAATATTTTC +SRR015141.613 WICMT-SOLEXA_209LAAAXX_8_1_933_880 length=26 IIIIIIIIIII*IIIIIIIIIIIIID @SRR015141.614 WICMT-SOLEXA_209LAAAXX_8_1_894_922 length=26 GCTCTGGGACACCTCCAACTGCTGCA +SRR015141.614 WICMT-SOLEXA_209LAAAXX_8_1_894_922 length=26 IIIIIIIIIIIIIIIIIIIIIII3II @SRR015141.615 WICMT-SOLEXA_209LAAAXX_8_1_896_191 length=26 GGAGCAGCACCGTCTCAAATGCAAGG +SRR015141.615 WICMT-SOLEXA_209LAAAXX_8_1_896_191 length=26 IIII&IIIIII-IIIIIII' @SRR015141.622 WICMT-SOLEXA_209LAAAXX_8_1_810_796 length=26 GAACTCAGTACCTTCAGAAGAGCAGT +SRR015141.622 WICMT-SOLEXA_209LAAAXX_8_1_810_796 length=26 IIIIIIIIIIIIIIII1III?4foo aaaacccc genometools-1.5.1/testdata/foo_width4.fas000066400000000000000000000000171211610345200204140ustar00rootroot00000000000000>foo aaaa cccc genometools-1.5.1/testdata/foobar.fas000066400000000000000000000000341211610345200176150ustar00rootroot00000000000000>foo aaaacccc >bar ggggtttt genometools-1.5.1/testdata/foofoo.fas000066400000000000000000000000341211610345200176340ustar00rootroot00000000000000>foo aaaacccc >foo aaaacccc genometools-1.5.1/testdata/foofoofoo.fas000066400000000000000000000000521211610345200203400ustar00rootroot00000000000000>foo aaaacccc >foo aaaacccc >foo aaaacccc genometools-1.5.1/testdata/foorcfoo.fas000066400000000000000000000000361211610345200201630ustar00rootroot00000000000000>foo aaaacccc >rcfoo ggggtttt genometools-1.5.1/testdata/foorcfoofoo.fas000066400000000000000000000000541211610345200206670ustar00rootroot00000000000000>foo aaaacccc >rcfoo ggggtttt >foo aaaacccc genometools-1.5.1/testdata/frompos.fas000066400000000000000000000000131211610345200200270ustar00rootroot00000000000000> ccccgggg genometools-1.5.1/testdata/genbank_test.gbk000066400000000000000000000031331211610345200210060ustar00rootroot00000000000000LOCUS AF078689 275 bp mRNA linear EST 26-JUL-1999 DEFINITION AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. ACCESSION AF078689 VERSION AF078689.1 GI:5587835 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 275) AUTHORS Zhao,D., Chen,D., Yang,C. and Zhai,Z. TITLE Isolation of intermediate filament-like genes from Arabidopsis JOURNAL Unpublished (1999) COMMENT Contact: Tan K Plant Development Biology Institute of Botany 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. FEATURES Location/Qualifiers source 1..275 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="IFA2" /clone_lib="Arabidopsis thaliana library (Tan K)" ORIGIN 1 antnnctacn ncnncnntnn cnncnatnna antanacnna tnntnntann aatnaaannc 61 tanaancnnc nnanaantat ntnnataana aataacaaaa actnannnna tcatnaantt 121 cttcnttata ttatantttt caatctnaat ttcaattccn ccnctcncct ttttcctctc 181 cnccttttcc ntctctccna tctnctcccn ccnccnacct tntnatnatt atanctctna 241 anntccatac aannatataa aaaaaaaaaa aaaaa // genometools-1.5.1/testdata/genbank_test1.gbk000066400000000000000000000047321211610345200210750ustar00rootroot00000000000000LOCUS AF078689 275 bp mRNA linear EST 26-JUL-1999 DEFINITION AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. ACCESSION AF078689 VERSION AF078689.1 GI:5587835 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 275) AUTHORS Zhao,D., Chen,D., Yang,C. and Zhai,Z. TITLE Isolation of intermediate filament-like genes from Arabidopsis JOURNAL Unpublished (1999) COMMENT Contact: Tan K Plant Development Biology Institute of Botany 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. FEATURES Location/Qualifiers source 1..275 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="IFA2" /clone_lib="Arabidopsis thaliana library (Tan K)" // LOCUS AF078689 275 bp mRNA linear EST 26-JUL-1999 DEFINITION AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. ACCESSION AF078689 VERSION AF078689.1 GI:5587835 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 275) AUTHORS Zhao,D., Chen,D., Yang,C. and Zhai,Z. TITLE Isolation of intermediate filament-like genes from Arabidopsis JOURNAL Unpublished (1999) COMMENT Contact: Tan K Plant Development Biology Institute of Botany 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. FEATURES Location/Qualifiers source 1..275 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="IFA2" /clone_lib="Arabidopsis thaliana library (Tan K)" // genometools-1.5.1/testdata/genbank_test2.fas000066400000000000000000000005741211610345200211040ustar00rootroot00000000000000>AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. antnnctacnncnncnntnncnncnatnnaantanacnnatnntnntannaatnaaannc tanaancnncnnanaantatntnnataanaaataacaaaaactnannnnatcatnaantt cttcnttatattatanttttcaatctnaatttcaattccnccnctcncctttttcctctc cnccttttccntctctccnatctnctcccnccnccnaccttntnatnattatanctctna anntccatacaannatataaaaaaaaaaaaaaaaa genometools-1.5.1/testdata/genbank_test2.gbk000066400000000000000000000031441211610345200210720ustar00rootroot00000000000000foo bar LOCUS AF078689 275 bp mRNA linear EST 26-JUL-1999 DEFINITION AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. ACCESSION AF078689 VERSION AF078689.1 GI:5587835 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 275) AUTHORS Zhao,D., Chen,D., Yang,C. and Zhai,Z. TITLE Isolation of intermediate filament-like genes from Arabidopsis JOURNAL Unpublished (1999) COMMENT Contact: Tan K Plant Development Biology Institute of Botany 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. FEATURES Location/Qualifiers source 1..275 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="IFA2" /clone_lib="Arabidopsis thaliana library (Tan K)" ORIGIN 1 antnnctacn ncnncnntnn cnncnatnna antanacnna tnntnntann aatnaaannc 61 tanaancnnc nnanaantat ntnnataana aataacaaaa actnannnna tcatnaantt 121 cttcnttata ttatantttt caatctnaat ttcaattccn ccnctcncct ttttcctctc 181 cnccttttcc ntctctccna tctnctcccn ccnccnacct tntnatnatt atanctctna 241 anntccatac aannatataa aaaaaaaaaa aaaaa // genometools-1.5.1/testdata/genbank_test3.gbk000066400000000000000000000030131211610345200210660ustar00rootroot00000000000000DEFINITION AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. ACCESSION AF078689 VERSION AF078689.1 GI:5587835 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 275) AUTHORS Zhao,D., Chen,D., Yang,C. and Zhai,Z. TITLE Isolation of intermediate filament-like genes from Arabidopsis JOURNAL Unpublished (1999) COMMENT Contact: Tan K Plant Development Biology Institute of Botany 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. FEATURES Location/Qualifiers source 1..275 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="IFA2" /clone_lib="Arabidopsis thaliana library (Tan K)" ORIGIN 1 antnnctacn ncnncnntnn cnncnatnna antanacnna tnntnntann aatnaaannc 61 tanaancnnc nnanaantat ntnnataana aataacaaaa actnannnna tcatnaantt 121 cttcnttata ttatantttt caatctnaat ttcaattccn ccnctcncct ttttcctctc 181 cnccttttcc ntctctccna tctnctcccn ccnccnacct tntnatnatt atanctctna 241 anntccatac aannatataa aaaaaaaaaa aaaaa // genometools-1.5.1/testdata/genbank_test4.gbk000066400000000000000000000062631211610345200211010ustar00rootroot00000000000000LOCUS AF078689 275 bp mRNA linear EST 26-JUL-1999 DEFINITION AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. ACCESSION AF078689 VERSION AF078689.1 GI:5587835 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 275) AUTHORS Zhao,D., Chen,D., Yang,C. and Zhai,Z. TITLE Isolation of intermediate filament-like genes from Arabidopsis JOURNAL Unpublished (1999) COMMENT Contact: Tan K Plant Development Biology Institute of Botany 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. FEATURES Location/Qualifiers source 1..275 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="IFA2" /clone_lib="Arabidopsis thaliana library (Tan K)" ORIGIN 1 antnnctacn ncnncnntnn cnncnatnna antanacnna tnntnntann aatnaaannc 61 tanaancnnc nnanaantat ntnnataana aataacaaaa actnannnna tcatnaantt 121 cttcnttata ttatantttt caatctnaat ttcaattccn ccnctcncct ttttcctctc 181 cnccttttcc ntctctccna tctnctcccn ccnccnacct tntnatnatt atanctctna 241 anntccatac aannatataa aaaaaaaaaa aaaaa LOCUS AF078689 275 bp mRNA linear EST 26-JUL-1999 DEFINITION AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. ACCESSION AF078689 VERSION AF078689.1 GI:5587835 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 275) AUTHORS Zhao,D., Chen,D., Yang,C. and Zhai,Z. TITLE Isolation of intermediate filament-like genes from Arabidopsis JOURNAL Unpublished (1999) COMMENT Contact: Tan K Plant Development Biology Institute of Botany 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. FEATURES Location/Qualifiers source 1..275 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="IFA2" /clone_lib="Arabidopsis thaliana library (Tan K)" ORIGIN 1 antnnctacn ncnncnntnn cnncnatnna antanacnna tnntnntann aatnaaannc 61 tanaancnnc nnanaantat ntnnataana aataacaaaa actnannnna tcatnaantt 121 cttcnttata ttatantttt caatctnaat ttcaattccn ccnctcncct ttttcctctc 181 cnccttttcc ntctctccna tctnctcccn ccnccnacct tntnatnatt atanctctna 241 anntccatac aannatataa aaaaaaaaaa aaaaa // genometools-1.5.1/testdata/genbank_test5.gbk000066400000000000000000000031321211610345200210720ustar00rootroot00000000000000LOCUS AF078689 275 bp mRNA linear EST 26-JUL-1999 DEFINITION AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. ACCESSION AF078689 VERSION AF078689.1 GI:5587835 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 275) AUTHORS Zhao,D., Chen,D., Yang,C. and Zhai,Z. TITLE Isolation of intermediate filament-like genes from Arabidopsis JOURNAL Unpublished (1999) COMMENT Contact: Tan K Plant Development Biology Institute of Botany 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. FEATURES Location/Qualifiers source 1..275 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="IFA2" /clone_lib="Arabidopsis thaliana library (Tan K)" ORIGIN 1 antnnctacn ncnncnntnn cnncnatnna antanacnna tnntnntann aatnaaannc 61tanaancnnc nnanaantat ntnnataana aataacaaaa actnannnna tcatnaantt 121 cttcnttata ttatantttt caatctnaat ttcaattccn ccnctcncct ttttcctctc 181 cnccttttcc ntctctccna tctnctcccn ccnccnacct tntnatnatt atanctctna 241 anntccatac aannatataa aaaaaaaaaa aaaaa // genometools-1.5.1/testdata/genbank_test6.gbk000066400000000000000000000031331211610345200210740ustar00rootroot00000000000000LOCUS AF078689 275 bp mRNA linear EST 26-JUL-1999 DEFINITION AF078689 Arabidopsis thaliana library (Tan K) Arabidopsis thaliana cDNA clone IFA2, mRNA sequence. ACCESSION AF078689 VERSION AF078689.1 GI:5587835 KEYWORDS EST. SOURCE Arabidopsis thaliana (thale cress) ORGANISM Arabidopsis thaliana Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta; Spermatophyta; Magnoliophyta; eudicotyledons; core eudicotyledons; rosids; eurosids II; Brassicales; Brassicaceae; Arabidopsis. REFERENCE 1 (bases 1 to 275) AUTHORS Zhao,D., Chen,D., Yang,C. and Zhai,Z. TITLE Isolation of intermediate filament-like genes from Arabidopsis JOURNAL Unpublished (1999) COMMENT Contact: Tan K Plant Development Biology Institute of Botany 20 Nanxincun Xiangshan. Hai Dian, Beijing, 100871, P. R. China. FEATURES Location/Qualifiers source 1..275 /organism="Arabidopsis thaliana" /mol_type="mRNA" /db_xref="taxon:3702" /clone="IFA2" /clone_lib="Arabidopsis thaliana library (Tan K)" ORIGIN antnnctacn ncnncnntnn cnncnatnna antanacnna tnntnntann aatnaaannc tanaancnnc nnanaantat ntnnataana aataacaaaa actnannnna tcatnaantt cttcnttata ttatantttt caatctnaat ttcaattccn ccnctcncct ttttcctctc cnccttttcc ntctctccna tctnctcccn ccnccnacct tntnatnatt atanctctna anntccatac aannatataa aaaaaaaaaa aaaaa // genometools-1.5.1/testdata/genbank_test7.gbk000066400000000000000000000005521211610345200210770ustar00rootroot00000000000000LOCUS Random140 DEFINITION n140 ORIGIN 60 nnacancaaa cncaccaaac caanancnca cncnanaccc anccnnanna ancccnaacn 120 aacnaaaaan ncnncnanan accnacanaa cannnnncnn caanacnacc nnaaccnaac 140 ncanccancc naaaacaca // LOCUS Random18 DEFINITION n18 ORIGIN 18 caaccaannc cnaanccc // genometools-1.5.1/testdata/genbank_test8.gbk000066400000000000000000000006671211610345200211070ustar00rootroot00000000000000LOCUS Random DEFINITION Random DEFINITION bla ORIGIN 1 nnacancaaa cncaccaaac caanancnca cncnanaccc anccnnanna ancccnaacn 61 aacnaaaaan ncnncnanan accnacanaa cannnnncnn caanacnacc nnaaccnaac 121 ncanccancc naaaacacac caaccaannc cnaanccccn ccnnccacna ncccnnnnnc 181 nnacacaann acncacnnnc cnananacan nnccnnnanc acancaacna cacancaaca 241 aacaaaccac caaccacccc acaacaacnn cannacnaca accnaccnca // genometools-1.5.1/testdata/genomediff/000077500000000000000000000000001211610345200177605ustar00rootroot00000000000000genometools-1.5.1/testdata/genomediff/000050_001_0.1_002-kr.out000066400000000000000000000001441211610345200231650ustar00rootroot000000000000002 S1 0 942 S2 936 0 2 S1 0.000000 0.127152 S2 0.127152 0.000000 genometools-1.5.1/testdata/genomediff/000050_001_0.1_002_S001.fas000066400000000000000000000000671211610345200232240ustar00rootroot00000000000000>S1 ATTTACCCTTAAAGCTTAATTGGGTGTACATCTTAGACCCCACCCGACTT genometools-1.5.1/testdata/genomediff/000050_001_0.1_002_S002.fas000066400000000000000000000000671211610345200232250ustar00rootroot00000000000000>S2 ATTTACCCTTAAAGCTTAATTGGCAGAACATCTTAAATCCCACCCGACTT genometools-1.5.1/testdata/genomediff/000050_001_0.1_010-kr.out000066400000000000000000000031041211610345200231630ustar00rootroot0000000000000010 S1 0 1882 1082 2650 1082 1024 1882 1882 742 2650 S2 1888 0 1580 1888 1580 1522 2650 2650 952 1888 S3 1092 1584 0 1092 2650 2160 1584 1584 1422 1092 S4 2650 1882 1082 0 1082 1024 1882 1882 742 2650 S5 1092 1584 2650 1092 0 2160 1584 1584 1422 1092 S6 1034 1526 2160 1034 2160 0 1526 1526 1172 1034 S7 1888 2650 1580 1888 1580 1522 0 2650 952 1888 S8 1888 2650 1580 1888 1580 1522 2650 0 952 1888 S9 752 956 1422 752 1422 1172 956 956 0 752 S10 2650 1882 1082 2650 1082 1024 1882 1882 742 0 10 S1 0.000000 0.054530 0.105537 0.032124 0.105537 0.113021 0.054530 0.054530 0.174705 0.032124 S2 0.054530 0.000000 0.067461 0.054530 0.067461 0.070496 0.032119 0.032119 0.124041 0.054530 S3 0.105537 0.067461 0.000000 0.105537 0.032119 0.045429 0.067461 0.067461 0.076352 0.105537 S4 0.032124 0.054530 0.105537 0.000000 0.105537 0.113021 0.054530 0.054530 0.174705 0.032124 S5 0.105537 0.067461 0.032119 0.105537 0.000000 0.045429 0.067461 0.067461 0.076352 0.105537 S6 0.113021 0.070496 0.045429 0.113021 0.045429 0.000000 0.070496 0.070496 0.095901 0.113021 S7 0.054530 0.032119 0.067461 0.054530 0.067461 0.070496 0.000000 0.032119 0.124041 0.054530 S8 0.054530 0.032119 0.067461 0.054530 0.067461 0.070496 0.032119 0.000000 0.124041 0.054530 S9 0.174705 0.124041 0.076352 0.174705 0.076352 0.095901 0.124041 0.124041 0.000000 0.174705 S10 0.032124 0.054530 0.105537 0.032124 0.105537 0.113021 0.054530 0.054530 0.174705 0.000000 genometools-1.5.1/testdata/genomediff/000050_001_0.1_010_S001.fas000066400000000000000000000000671211610345200232230ustar00rootroot00000000000000>S1 TATCTTATGGTCATGTGTCGGGTCGATACCGCCTGAAATAAACACTGTTG genometools-1.5.1/testdata/genomediff/000050_001_0.1_010_S002.fas000066400000000000000000000000671211610345200232240ustar00rootroot00000000000000>S2 TAACTTATTGTCATGTGTCGGGTCGATACCGCCTGAAATAAACACTGTTG genometools-1.5.1/testdata/genomediff/000050_001_0.1_010_S003.fas000066400000000000000000000000671211610345200232250ustar00rootroot00000000000000>S3 TAACTTATTGTCATGTGTCGGGTCGATACCGCCTGTAATAAACACTGTTG genometools-1.5.1/testdata/genomediff/000050_001_0.1_010_S004.fas000066400000000000000000000000671211610345200232260ustar00rootroot00000000000000>S4 TATCTTATGGTCATGTGTCGGGTCGATACCGCCTGAAATAAACACTGTTG genometools-1.5.1/testdata/genomediff/000050_001_0.1_010_S005.fas000066400000000000000000000000671211610345200232270ustar00rootroot00000000000000>S5 TAACTTATTGTCATGTGTCGGGTCGATACCGCCTGTAATAAACACTGTTG genometools-1.5.1/testdata/genomediff/000050_001_0.1_010_S006.fas000066400000000000000000000000671211610345200232300ustar00rootroot00000000000000>S6 TAACTTATTGTCATGTGTCGGGTCGATACCGCCTGTAATAAACAGTGTTG genometools-1.5.1/testdata/genomediff/000050_001_0.1_010_S007.fas000066400000000000000000000000671211610345200232310ustar00rootroot00000000000000>S7 TAACTTATTGTCATGTGTCGGGTCGATACCGCCTGAAATAAACACTGTTG genometools-1.5.1/testdata/genomediff/000050_001_0.1_010_S008.fas000066400000000000000000000000671211610345200232320ustar00rootroot00000000000000>S8 TAACTTATTGTCATGTGTCGGGTCGATACCGCCTGAAATAAACACTGTTG genometools-1.5.1/testdata/genomediff/000050_001_0.1_010_S009.fas000066400000000000000000000000671211610345200232330ustar00rootroot00000000000000>S9 TAACTTATTGTCATGTGTCCGGTCGATACCGCCTGTAATAAACACTGTTG genometools-1.5.1/testdata/genomediff/000050_001_0.1_010_S010.fas000066400000000000000000000000701211610345200232150ustar00rootroot00000000000000>S10 TATCTTATGGTCATGTGTCGGGTCGATACCGCCTGAAATAAACACTGTTG genometools-1.5.1/testdata/genomediff/000050_005_0.1_002_S001.fas000066400000000000000000000001321211610345200232210ustar00rootroot00000000000000>L1_S1 TGAGGGATTA >L1_S2 TGTGGGATTA >L1_S3 TGAGGGATTA >L1_S4 TGAGGGATTA >L1_S5 TGAGGGATTA genometools-1.5.1/testdata/genomediff/000050_005_0.1_002_S002.fas000066400000000000000000000001321211610345200232220ustar00rootroot00000000000000>L2_S1 GCTCTGGTGC >L2_S2 GCTCTTGTGC >L2_S3 GCTCTTGTGC >L2_S4 GCTCTTGTGC >L2_S5 GCTCTTGTGC genometools-1.5.1/testdata/genomediff/000050_005_0.1_010_S001.fas000066400000000000000000000001321211610345200232200ustar00rootroot00000000000000>L1_S1 CCTACGAGCC >L1_S2 TCTACGAGCC >L1_S3 TCTACGAGCC >L1_S4 CCTACGAGCC >L1_S5 CCTACGAGCC genometools-1.5.1/testdata/genomediff/000050_005_0.1_010_S002.fas000066400000000000000000000001321211610345200232210ustar00rootroot00000000000000>L2_S1 TATTCTCTGG >L2_S2 TATTCTCTGG >L2_S3 TATTCTCCGG >L2_S4 TATTCTCTGG >L2_S5 TATTCTCTGG genometools-1.5.1/testdata/genomediff/000050_005_0.1_010_S003.fas000066400000000000000000000001321211610345200232220ustar00rootroot00000000000000>L3_S1 TTGGGGGTCA >L3_S2 TTTGGGGTCA >L3_S3 TTGGGGGTCA >L3_S4 TTGGGGGTCA >L3_S5 TTGGGGGTCA genometools-1.5.1/testdata/genomediff/000050_005_0.1_010_S004.fas000066400000000000000000000001321211610345200232230ustar00rootroot00000000000000>L4_S1 GGTGGTCCAC >L4_S2 GGTGGTCCAC >L4_S3 GGTGGTCCAC >L4_S4 GGTGTTCCAC >L4_S5 GGTGTTCCAC genometools-1.5.1/testdata/genomediff/000050_005_0.1_010_S005.fas000066400000000000000000000001321211610345200232240ustar00rootroot00000000000000>L5_S1 ACATGTAAGA >L5_S2 ACATGTAAGA >L5_S3 ACATGTAAGA >L5_S4 ACATGTAAGA >L5_S5 ACACGTAAGA genometools-1.5.1/testdata/genomediff/000050_005_0.1_010_S006.fas000066400000000000000000000001321211610345200232250ustar00rootroot00000000000000>L6_S1 CCTACTCATG >L6_S2 CCTACTCATG >L6_S3 CCTACTCATG >L6_S4 CCTACGCATG >L6_S5 CCTACGCATG genometools-1.5.1/testdata/genomediff/000050_005_0.1_010_S007.fas000066400000000000000000000001321211610345200232260ustar00rootroot00000000000000>L7_S1 GCTGGTATTG >L7_S2 GCTGGTATTG >L7_S3 GCTGGTATTG >L7_S4 GCTGGTATTG >L7_S5 GCTGGTAATG genometools-1.5.1/testdata/genomediff/000050_005_0.1_010_S008.fas000066400000000000000000000001321211610345200232270ustar00rootroot00000000000000>L8_S1 TTGCATTAAA >L8_S2 CTGCATTAAA >L8_S3 CTGCATTAAA >L8_S4 CTGCATTAAA >L8_S5 TTGCATTAAA genometools-1.5.1/testdata/genomediff/000050_005_0.1_010_S009.fas000066400000000000000000000001321211610345200232300ustar00rootroot00000000000000>L9_S1 GCGTAAAATC >L9_S2 GCGTTAAATC >L9_S3 GCGTAAAATC >L9_S4 GCGTTAAATC >L9_S5 GCGTAAAATC genometools-1.5.1/testdata/genomediff/000050_005_0.1_010_S010.fas000066400000000000000000000001371211610345200232250ustar00rootroot00000000000000>L10_S1 AGTGGTATAG >L10_S2 AGTGGTATAG >L10_S3 AGTGGTATAG >L10_S4 ACTGGTATAG >L10_S5 AGTGGTATAG genometools-1.5.1/testdata/genomediff/000100_001_0.1_002-kr.out000066400000000000000000000001461211610345200231630ustar00rootroot000000000000002 S1 0 1984 S2 1968 0 2 S1 0.000000 0.121848 S2 0.121848 0.000000 genometools-1.5.1/testdata/genomediff/000100_001_0.1_002_S001.fas000066400000000000000000000001521211610345200232130ustar00rootroot00000000000000>S1 TGTTGACTCAGAGAGAACTCCTTACGTTCGATGAGGTGTAAGAAATCCCCATTATCTCGGTTGTACCTAA CGCGTCACTCACTACAATCATTGCTAATAA genometools-1.5.1/testdata/genomediff/000100_001_0.1_002_S002.fas000066400000000000000000000001521211610345200232140ustar00rootroot00000000000000>S2 TGTTGAATCAGAGCGAACTCCTTACGTTCGATGAGGTGCAAGAAATGCCCATTTTCACGGTTGTACCTAA CGCGTCACTCACTAAATTCATTGCTTATAC genometools-1.5.1/testdata/genomediff/000100_001_0.1_010-kr.out000066400000000000000000000031241211610345200231610ustar00rootroot0000000000000010 S1 0 8458 2832 2704 5740 3120 2704 8458 2616 2730 S2 8458 0 3476 3448 5140 3864 3448 10300 3360 2894 S3 2840 3482 0 3534 2434 5400 3534 3482 3446 4600 S4 2704 3448 3526 0 2702 6046 10300 3448 9916 4190 S5 5728 5130 2416 2690 0 2704 2690 5130 2606 2316 S6 3132 3874 5402 6056 2726 0 6056 3874 5968 7460 S7 2704 3448 3526 10300 2702 6046 0 3448 9916 4190 S8 8458 10300 3476 3448 5140 3864 3448 0 3360 2894 S9 2616 3360 3438 9916 2618 5958 9916 3360 0 4102 S10 2744 2910 4608 4208 2344 7466 4208 2910 4120 0 10 S1 0.000000 0.022649 0.077857 0.082135 0.035918 0.069725 0.082135 0.022649 0.085410 0.081216 S2 0.022649 0.000000 0.061779 0.062326 0.040493 0.055000 0.062326 0.016552 0.064169 0.075929 S3 0.077857 0.061779 0.000000 0.060786 0.093909 0.038299 0.060786 0.061779 0.062525 0.045534 S4 0.082135 0.062326 0.060786 0.000000 0.082634 0.033861 0.016552 0.062326 0.017770 0.050384 S5 0.035918 0.040493 0.093909 0.082634 0.000000 0.082123 0.082634 0.040493 0.085758 0.098828 S6 0.069725 0.055000 0.038299 0.033861 0.082123 0.000000 0.033861 0.055000 0.034412 0.026589 S7 0.082135 0.062326 0.060786 0.016552 0.082634 0.033861 0.000000 0.062326 0.017770 0.050384 S8 0.022649 0.016552 0.061779 0.062326 0.040493 0.055000 0.062326 0.000000 0.064169 0.075929 S9 0.085410 0.064169 0.062525 0.017770 0.085758 0.034412 0.017770 0.064169 0.000000 0.051560 S10 0.081216 0.075929 0.045534 0.050384 0.098828 0.026589 0.050384 0.075929 0.051560 0.000000 genometools-1.5.1/testdata/genomediff/000100_001_0.1_010_S001.fas000066400000000000000000000001521211610345200232120ustar00rootroot00000000000000>S1 TATGAGCCGCTAGTGCGCAGTGGGCGTGTATAGTTACAACTAAGCGAAACAGTTTAGATGAAGGAATTGG CTGCACTAAAGGAACGCGCCACCCGTGGTA genometools-1.5.1/testdata/genomediff/000100_001_0.1_010_S002.fas000066400000000000000000000001521211610345200232130ustar00rootroot00000000000000>S2 TATGTGCCGGTAGTGCGCAGTGGGCGTGTATAGTTACAACTAAGCGAAACAGTTTAGATGAAGGAATTGG CTGCACTAAAGGAACGCGCCACCCGTGGTA genometools-1.5.1/testdata/genomediff/000100_001_0.1_010_S003.fas000066400000000000000000000001521211610345200232140ustar00rootroot00000000000000>S3 TATGTGCCGGTAGTGCGCAGTGGGCGTGTATAGTTACAACAAAGCCAAACAGTTTAGATGAAGGACTTGG CTGCACTAAAGGAACGCGCCACCCGTGGTA genometools-1.5.1/testdata/genomediff/000100_001_0.1_010_S004.fas000066400000000000000000000001521211610345200232150ustar00rootroot00000000000000>S4 TATGTGCCGGTAGTGCGCAGTGGGCGTGTATAGTTACAACTAAGCCAAACAGTTTAGATGAAGGACTTGG CAGTACTAAAGGAACGCGCCACCCGTGGTA genometools-1.5.1/testdata/genomediff/000100_001_0.1_010_S005.fas000066400000000000000000000001521211610345200232160ustar00rootroot00000000000000>S5 TATGTGCCGCTAGTGCGCAGTGGGCGTGTATAGTTACAACTAAGCGAAACAGTTTAGATGAAGGAATTGG CTGCCCTAAAGGAACGCGCCACCCGTGGTA genometools-1.5.1/testdata/genomediff/000100_001_0.1_010_S006.fas000066400000000000000000000001521211610345200232170ustar00rootroot00000000000000>S6 TATGTGCCGGTAGTGCGCAGTGGGCGTGTATAGTTACAACTAAGCCAAACAGTTTAGATGAAGGACTTGG CTGCACTAAAGGAACGCGCCACCCGTGGTA genometools-1.5.1/testdata/genomediff/000100_001_0.1_010_S007.fas000066400000000000000000000001521211610345200232200ustar00rootroot00000000000000>S7 TATGTGCCGGTAGTGCGCAGTGGGCGTGTATAGTTACAACTAAGCCAAACAGTTTAGATGAAGGACTTGG CAGTACTAAAGGAACGCGCCACCCGTGGTA genometools-1.5.1/testdata/genomediff/000100_001_0.1_010_S008.fas000066400000000000000000000001521211610345200232210ustar00rootroot00000000000000>S8 TATGTGCCGGTAGTGCGCAGTGGGCGTGTATAGTTACAACTAAGCGAAACAGTTTAGATGAAGGAATTGG CTGCACTAAAGGAACGCGCCACCCGTGGTA genometools-1.5.1/testdata/genomediff/000100_001_0.1_010_S009.fas000066400000000000000000000001521211610345200232220ustar00rootroot00000000000000>S9 TATGTGCCGGTAGTGCGCAGTGGGCGTGTATAGTTACAACTAAGCCAAACAGTTTAGATGAAGGACTTGG CAGTACTAAAGGAACGCGCCACCCGTGGAA genometools-1.5.1/testdata/genomediff/000100_001_0.1_010_S010.fas000066400000000000000000000001531211610345200232130ustar00rootroot00000000000000>S10 TATGTGCCGGTAGTGCCCAGTGGGCGTGTATAGTTACAACTAAGCCAAACAGTTTAGATGAAGGACTTGG CTGCACTAAAGGAACGCGCCACCCGTGGTA genometools-1.5.1/testdata/genomediff/000100_005_0.1_002_S001.fas000066400000000000000000000002141211610345200232160ustar00rootroot00000000000000>L1_S1 TCAAGCCGATGAACGGCCAA >L1_S2 TCAAGCCGATAAACGGCCAA >L1_S3 TCAAGCCGATGAACGGCCAA >L1_S4 TCAAGCCGATAAACGGCCCA >L1_S5 TCAAGCCGATGAACGGCCAA genometools-1.5.1/testdata/genomediff/000100_005_0.1_002_S002.fas000066400000000000000000000002141211610345200232170ustar00rootroot00000000000000>L2_S1 GTCCTTGGATAGGAGTCACA >L2_S2 GTCCTTGGATAGGAGTCACA >L2_S3 GTCCTCGGATAGGACTCACA >L2_S4 GTCCTCGGATAGGACTCACA >L2_S5 GTCCTCGGATAGGACTCACA genometools-1.5.1/testdata/genomediff/000100_005_0.1_010_S001.fas000066400000000000000000000002141211610345200232150ustar00rootroot00000000000000>L1_S1 CGTACCAGTTATTGTGACAA >L1_S2 CGTACAAGTTATTGTGAAAA >L1_S3 CGTACAAGTTATTGTGAAAA >L1_S4 CGTACAAGTTATTGTGAAAA >L1_S5 CGTACAAGTTATTGTGAAAA genometools-1.5.1/testdata/genomediff/000100_005_0.1_010_S002.fas000066400000000000000000000002141211610345200232160ustar00rootroot00000000000000>L2_S1 ATCAAATAACGGGTGCCCAT >L2_S2 ATCAAATAACGGGTGCCCAT >L2_S3 ATCAAATAACGGGTGCCCAT >L2_S4 ATCAAATAACAGGTGTCCAT >L2_S5 ATCAAATAACAGGTGTCCAT genometools-1.5.1/testdata/genomediff/000100_005_0.1_010_S003.fas000066400000000000000000000002141211610345200232170ustar00rootroot00000000000000>L3_S1 CCTTGTTGCTCCCTACATGG >L3_S2 CCTTGTTGCTCCCTACATGG >L3_S3 CCTTGTTGCTCCCTACATGG >L3_S4 GCTTGTTGCTCCCTACATGG >L3_S5 CCTGGTTGCTCCCTACATGG genometools-1.5.1/testdata/genomediff/000100_005_0.1_010_S004.fas000066400000000000000000000002141211610345200232200ustar00rootroot00000000000000>L4_S1 CCCAAGAGTATCGTTGGGAA >L4_S2 CCCAAGAGTATCGTTTGGAA >L4_S3 CCCAAGAGTATCGTTTGGTA >L4_S4 CCCAAGAGTATCGTTTGGAA >L4_S5 CCCAAGAGTATCGTTTGGTA genometools-1.5.1/testdata/genomediff/000100_005_0.1_010_S005.fas000066400000000000000000000002141211610345200232210ustar00rootroot00000000000000>L5_S1 TTAAACTACCGTCGATCGGA >L5_S2 TTAAACTACCGTCGATCGGA >L5_S3 TTAAATTACCGACGATCGGA >L5_S4 TTAAATTACCGACGATCGGA >L5_S5 TTAAACTACCGTCGATCGGA genometools-1.5.1/testdata/genomediff/000100_005_0.1_010_S006.fas000066400000000000000000000002141211610345200232220ustar00rootroot00000000000000>L6_S1 AGCCTACTGGTCTGTCCTGC >L6_S2 AGCCTACTGGTCTGTCCTGC >L6_S3 AGCCTACGGGTCTGTCCAGC >L6_S4 AGCCTACGGGTCTGTCCAGC >L6_S5 AGCCTACTGGTCTGTCCTGC genometools-1.5.1/testdata/genomediff/000100_005_0.1_010_S007.fas000066400000000000000000000002141211610345200232230ustar00rootroot00000000000000>L7_S1 GCTTGCCTGTTCACCACGTG >L7_S2 GCTTGCCTGTTCACCACGTG >L7_S3 GCTTGGCTGTTCACCACGTG >L7_S4 GCTTCCCTGTTCACCACGTG >L7_S5 GCTTGCCTGTTCACCACGTG genometools-1.5.1/testdata/genomediff/000100_005_0.1_010_S008.fas000066400000000000000000000002141211610345200232240ustar00rootroot00000000000000>L8_S1 GTCACGCTTTGGCACCCGCT >L8_S2 GTCACGCTTTGGCACCCGCT >L8_S3 GTCACGCTTTGGCACGCGCT >L8_S4 GTCACGCGTTGGCACCCGCT >L8_S5 GTCACGCTTTGGCACCCGCT genometools-1.5.1/testdata/genomediff/000100_005_0.1_010_S009.fas000066400000000000000000000002141211610345200232250ustar00rootroot00000000000000>L9_S1 GTTTAAGCATAGTTCACCAA >L9_S2 GTTTAAGCATAGCTCATCAA >L9_S3 GTTTAAGCATAGCTCACCAA >L9_S4 GTTTAAGCATAGCTCACCAA >L9_S5 GTTTAAGCATAGCTCACCAA genometools-1.5.1/testdata/genomediff/000100_005_0.1_010_S010.fas000066400000000000000000000002211211610345200232130ustar00rootroot00000000000000>L10_S1 GGAATGAGAAAATACGGCCG >L10_S2 GGAATGAGAAAATACGGCCG >L10_S3 GCAATGAGAAAAAACGGCCG >L10_S4 GGAATGAGAAAATACGGCCG >L10_S5 GGAATGAGAAAATACGGCCG genometools-1.5.1/testdata/genomediff/000150_001_0.1_002-kr.out000066400000000000000000000001461211610345200231700ustar00rootroot000000000000002 S1 0 2578 S2 2528 0 2 S1 0.000000 0.154497 S2 0.154497 0.000000 genometools-1.5.1/testdata/genomediff/000150_001_0.1_002_S001.fas000066400000000000000000000002351211610345200232220ustar00rootroot00000000000000>S1 GAATTGTTAGGTTATCGTGTCACTTGTTTACTCCCGACACTTGTTAATGCTTACAACCAGGAGCGACGCT CTCTCGTAAATAACCACGCACCCCTCTAATCTCCCGACCTACACTGGAAGATCCATCCCTATAGCGTCAA ATTTTGTAGC genometools-1.5.1/testdata/genomediff/000150_001_0.1_002_S002.fas000066400000000000000000000002351211610345200232230ustar00rootroot00000000000000>S2 GAATTGTTGGGTTATCGTGCCACTTGTTTACTCCCGAGACTTGTTAATGCTTACAACCAGGTGCGACGCT GTCTCGTAAATTACCACGTCCCCCTCTAATCTCCTGACCTACACTCGAGGACCGATCCCTATAGCGTCAA ATATTGTATC genometools-1.5.1/testdata/genomediff/000150_001_0.1_010-kr.out000066400000000000000000000031421211610345200231660ustar00rootroot0000000000000010 S1 0 22950 4916 5820 4652 8318 11654 9736 22950 6568 S2 22950 0 4916 5820 4652 8318 11654 9736 22950 6568 S3 4952 4952 0 4302 3510 4994 5140 5634 4952 4372 S4 5818 5818 4262 0 6812 7288 8212 6232 5818 15716 S5 4630 4630 3452 6804 0 4298 5218 4782 4630 6854 S6 8326 8326 4964 7304 4326 0 14236 8928 8326 8672 S7 11658 11658 5102 8218 5240 14232 0 11324 11658 9586 S8 9746 9746 5604 6244 4812 8926 11330 0 9746 7232 S9 22950 22950 4916 5820 4652 8318 11654 9736 0 6568 S10 6572 6572 4338 15722 6868 8668 9586 7226 6572 0 10 S1 0.000000 0.011152 0.066279 0.054946 0.070961 0.037465 0.026294 0.031763 0.011152 0.048206 S2 0.011152 0.000000 0.066279 0.054946 0.070961 0.037465 0.026294 0.031763 0.011152 0.048206 S3 0.066279 0.066279 0.000000 0.078083 0.100727 0.065562 0.063555 0.057287 0.066279 0.076494 S4 0.054946 0.054946 0.078083 0.000000 0.046396 0.043095 0.037978 0.051020 0.054946 0.018948 S5 0.070961 0.070961 0.100727 0.046396 0.000000 0.077322 0.062016 0.068402 0.070961 0.046031 S6 0.037465 0.037465 0.065562 0.043095 0.077322 0.000000 0.021194 0.034800 0.037465 0.035879 S7 0.026294 0.026294 0.063555 0.037978 0.062016 0.021194 0.000000 0.027084 0.026294 0.032288 S8 0.031763 0.031763 0.057287 0.051020 0.068402 0.034800 0.027084 0.000000 0.031763 0.043501 S9 0.011152 0.011152 0.066279 0.054946 0.070961 0.037465 0.026294 0.031763 0.000000 0.048206 S10 0.048206 0.048206 0.076494 0.018948 0.046031 0.035879 0.032288 0.043501 0.048206 0.000000 genometools-1.5.1/testdata/genomediff/000150_001_0.1_010_S001.fas000066400000000000000000000002351211610345200232210ustar00rootroot00000000000000>S1 TTCGCATAACCCTTCTTCTAAGGTGACTCACGGAATAGGGCGACCCAGTGACCGGACGGCCTACCTTCCA ATTGATCCGGACTAGCCCCATTACGAATTCGAAGGTCGGCTCTGTGCATAAGGGTAGAAACGCACCGCTT TTTCACCTAA genometools-1.5.1/testdata/genomediff/000150_001_0.1_010_S002.fas000066400000000000000000000002351211610345200232220ustar00rootroot00000000000000>S2 TTCGCATAACCCTTCTTCTAAGGTGACTCACGGAATAGGGCGACCCAGTGACCGGACGGCCTACCTTCCA ATTGATCCGGACTAGCCCCATTACGAATTCGAAGGTCGGCTCTGTGCATAAGGGTAGAAACGCACCGCTT TTTCACCTAA genometools-1.5.1/testdata/genomediff/000150_001_0.1_010_S003.fas000066400000000000000000000002351211610345200232230ustar00rootroot00000000000000>S3 TTCGCATAACCCTTCTTCTAAGGTGACTCACGGAATAGGGTGACCCAGTGACCGGACGGCCTACCTTCCT ATTGATCCAGATTAGCCCCATTACGAATTCGAAGGTCGGCTCTGTCCATAAGGGTAGAAACGCACCGCTT TTTCTTCTAA genometools-1.5.1/testdata/genomediff/000150_001_0.1_010_S004.fas000066400000000000000000000002351211610345200232240ustar00rootroot00000000000000>S4 TTCGCATAACCCTTCTTCTAAGGTGACTCACGGAATAGGGCGACCCAGTGGCCGGACGGCCTACCTTCCA ATTGATCCGGATTAGCCCCATTACGAATTCGAAGGTCGGCTCTGTGCATAGGGGTAGAAAGGCACCGCTT TTTCACCTAA genometools-1.5.1/testdata/genomediff/000150_001_0.1_010_S005.fas000066400000000000000000000002351211610345200232250ustar00rootroot00000000000000>S5 TTCGCATAACCCTTCTTCTAAGGTGACTCACGGAATAGGGCGACCCAGTGGCCGGACGGCCTGCCTTCCA ATTGATCCGGATTAGCCCCATTACGAAATCGAAGGTCGGCTCTGTGCATTAGGGTAGAAAGGCACCGCTT TTTCACCTAA genometools-1.5.1/testdata/genomediff/000150_001_0.1_010_S006.fas000066400000000000000000000002351211610345200232260ustar00rootroot00000000000000>S6 TTCGCATAACCCTTCTTCTAAGGTGACTCACGGAATAGAGCGACCCAGTGACCGGACGGCCTACCTTCCA ATTGATCCGGATTAGCCCCATTACGAATTCGAAGGTCGGCTCTGTGCATAAGGGTAGAAACGCACCGCTT TTTCACCTAA genometools-1.5.1/testdata/genomediff/000150_001_0.1_010_S007.fas000066400000000000000000000002351211610345200232270ustar00rootroot00000000000000>S7 TTCGCATAACCCTTCTTCTAAGGTGACTCACGGAATAGGGCGACCCAGTGACCGGACGGCCTACCTTCCA ATTGATCCGGATTAGCCCCATTACGAATTCGAAGGTCGGCTCTGTGCATAAGGGTAGAAACGCACCGCTT TTTCACCTAA genometools-1.5.1/testdata/genomediff/000150_001_0.1_010_S008.fas000066400000000000000000000002351211610345200232300ustar00rootroot00000000000000>S8 TTCGCATAACCCTTCTTCTAAGGTGACTCACGGAATAGGGCGACCCAGTGACCGGACGGCCTACCTTCCT ATTGATCCGGATTAGCCCCATTACGAATTCGAAGGTCGGCTCTGTGCATAAGGGTAGAAACGCACCGCTT TTTCACCTCA genometools-1.5.1/testdata/genomediff/000150_001_0.1_010_S009.fas000066400000000000000000000002351211610345200232310ustar00rootroot00000000000000>S9 TTCGCATAACCCTTCTTCTAAGGTGACTCACGGAATAGGGCGACCCAGTGACCGGACGGCCTACCTTCCA ATTGATCCGGACTAGCCCCATTACGAATTCGAAGGTCGGCTCTGTGCATAAGGGTAGAAACGCACCGCTT TTTCACCTAA genometools-1.5.1/testdata/genomediff/000150_001_0.1_010_S010.fas000066400000000000000000000002361211610345200232220ustar00rootroot00000000000000>S10 TTCGCATAACCCTTCTTCTAAGGTGACTCACGGAATAGGGCGACCCAGTGGCCGGACGGCCTACCTTCCA ATTGATCCGGATTAGCCCCATTACGAATTCGAAGGTCGGCTCTGTGCATAAGGGTAGAAAGGCACCGCTT TTTCACCTAA genometools-1.5.1/testdata/genomediff/000150_005_0.1_002_S001.fas000066400000000000000000000002761211610345200232330ustar00rootroot00000000000000>L1_S1 ACAGCAATACCGGCGAAAGGACGTGCCGTA >L1_S2 ACAGCAATACCGGCTAAAGGACGTGCCGTT >L1_S3 ACAGCAATACCGGCTAAAGGACGTGCGGTT >L1_S4 ACAGCAATACCGGCTAAAGGACGTGCGGTT >L1_S5 ACAGCAATACCGGCTAAAGGACGTGCCGTT genometools-1.5.1/testdata/genomediff/000150_005_0.1_002_S002.fas000066400000000000000000000002761211610345200232340ustar00rootroot00000000000000>L2_S1 GGACAATGAACTTTCATGGGATATTATGCA >L2_S2 GGACAACGAACTTTCTTAGGATATTATGCA >L2_S3 GGACAATGAACTTTCTTGGGATATTATGCA >L2_S4 GGACAATGAACTTTCTTAGGATATTATGCA >L2_S5 GGACAATGAACTTTCTTGGGATATTATGCA genometools-1.5.1/testdata/genomediff/000150_005_0.1_010_S001.fas000066400000000000000000000002761211610345200232320ustar00rootroot00000000000000>L1_S1 GCGCCATTACGAGACATACGGTACTAATTC >L1_S2 GCGCCATTACGAGACATAGGGTACGAATTC >L1_S3 GCGCCATTACGAGACATACGGTACTAATTC >L1_S4 GCGCCATTACGAGACATAGGGTGCTAATTC >L1_S5 GCGCCATTACGAGACATAGGGTACTAATTC genometools-1.5.1/testdata/genomediff/000150_005_0.1_010_S002.fas000066400000000000000000000002761211610345200232330ustar00rootroot00000000000000>L2_S1 CGATGCTACACTCGTCTTGGAGCCCAGTAC >L2_S2 CGACGCAACACCCGTCTTGGAGCCCAGTAC >L2_S3 CGACGCAACACCCGTCTTGGAGCCCAGTAC >L2_S4 CGATGCTACACTCGTCTTGGAGCCCAGTAC >L2_S5 CGATGCTACACTCGTCTTGGAGCCCAGTAC genometools-1.5.1/testdata/genomediff/000150_005_0.1_010_S003.fas000066400000000000000000000002761211610345200232340ustar00rootroot00000000000000>L3_S1 GCGCTGTGGTTCGCTCTCTGAGGTCTACCA >L3_S2 GCGCAGTGGTTCGCTCTCTGAGGTCTACCA >L3_S3 GCGCAGTGGTTCGCTCTCTGAGGTCTACCA >L3_S4 GCGCAGTGGTTCGCTCTCTGAGGTCTTCCA >L3_S5 GCGCAGAGGTTCGCTCTCTGAGGTCTACCA genometools-1.5.1/testdata/genomediff/000150_005_0.1_010_S004.fas000066400000000000000000000002761211610345200232350ustar00rootroot00000000000000>L4_S1 GATGGGAATAGGACTCGCGGGCGGTGTAGC >L4_S2 GATGGGAATAGGACTCGCGGACGGTGTAGG >L4_S3 GATGGGAATAGGACTCGCGGACGGTGTAGG >L4_S4 GATGGGAATAGGACTCGCGGACGGTGTACC >L4_S5 GATGGGAATAGGACTCGCGGACGGTGTAGG genometools-1.5.1/testdata/genomediff/000150_005_0.1_010_S005.fas000066400000000000000000000002761211610345200232360ustar00rootroot00000000000000>L5_S1 GTGCTTATGCCCCGATGACATTACATATGC >L5_S2 CTGCTTATGGCCCGATGACATTACATATGC >L5_S3 CTGCTTAGGGCCCGATGACATTACATATGC >L5_S4 CTGCTTATGGCCCGATGACATTACATATGC >L5_S5 GTGCTTATGCCCCGATGACATTACATATGC genometools-1.5.1/testdata/genomediff/000150_005_0.1_010_S006.fas000066400000000000000000000002761211610345200232370ustar00rootroot00000000000000>L6_S1 GGGGCGGGAGTAAAGCGGAGGGACGGAGCT >L6_S2 GGGGCTGGAGTAAAGCGGAGGGACGGAGCT >L6_S3 GGGGCTGGAGTAAAGCGGAGGGCCGGAGCT >L6_S4 GGGGCGGGAGTAAAGCGGAGGGACGGAGCT >L6_S5 GGGGCTGGAGTAAAGCGGAGGGACGTAGCT genometools-1.5.1/testdata/genomediff/000150_005_0.1_010_S007.fas000066400000000000000000000002761211610345200232400ustar00rootroot00000000000000>L7_S1 TACCATGGCCTGTAACCAACCCTCTAAGAG >L7_S2 TACCATGGCCTGTAACCAACCCTCTTAGAG >L7_S3 TACCATGGCCTGTAACCAACCCTCTAAGAG >L7_S4 TACCATGGCCTGTAACAAACCCACTAAGAG >L7_S5 TACCATGGCCTGTAACAAACCCACTAAGAG genometools-1.5.1/testdata/genomediff/000150_005_0.1_010_S008.fas000066400000000000000000000002761211610345200232410ustar00rootroot00000000000000>L8_S1 AGCAGTGAGCCTATAAAGCCGTATGCTCTG >L8_S2 AGCATTGAGCCTTTAAAGCCGTATGCTCTG >L8_S3 AGCAGTGAGCCTATAAAGCCGTATGCTCTG >L8_S4 AGCATTGAGTCTTTAAAGCCGTATGCTCTG >L8_S5 AGCAGTGAGCCTATAAAGCCGTATGCTCTG genometools-1.5.1/testdata/genomediff/000150_005_0.1_010_S009.fas000066400000000000000000000002761211610345200232420ustar00rootroot00000000000000>L9_S1 TACACACCTTAAAGTAGTCCTTGACGGATA >L9_S2 TACAAACCTTAAAGTAGTCCCTGACAGATA >L9_S3 TACACACCTTAAAGTAGTCCTTGACGGATA >L9_S4 TACACACCTTAAAGTAGTCCCTGACGGATA >L9_S5 TACACACCTTAAAGTAGTCCTTGACGGATA genometools-1.5.1/testdata/genomediff/000150_005_0.1_010_S010.fas000066400000000000000000000003031211610345200232210ustar00rootroot00000000000000>L10_S1 AGCTACTTCGGGTCCTACTTTTCCATGATT >L10_S2 AGCTACTTCGGGTCCTACTTTTCCATGATT >L10_S3 AGCTACTTCGGGTCCTACTTTTCCATGATT >L10_S4 AGCTACTTCGGGTCCTACTTTTCCATGATT >L10_S5 ACCTACGTCGGGTGCTACTTTTCCATGATT genometools-1.5.1/testdata/genomediff/testsuite000066400000000000000000000000231211610345200217270ustar00rootroot00000000000000000150_001_0.1_010 genometools-1.5.1/testdata/genomediff/unitfile1.lua000066400000000000000000000007401211610345200223640ustar00rootroot00000000000000--correct file units = { genome1 = { "000150_001_0.1_010_S001.fas", "000150_001_0.1_010_S002.fas", "000150_001_0.1_010_S003.fas", "000150_001_0.1_010_S004.fas", "000150_001_0.1_010_S005.fas" }, genome2 = { "000150_001_0.1_010_S006.fas", "000150_001_0.1_010_S007.fas", "000150_001_0.1_010_S008.fas", "000150_001_0.1_010_S009.fas", "000150_001_0.1_010_S010.fas" } } genometools-1.5.1/testdata/genomediff/unitfile2.lua000066400000000000000000000010051211610345200223600ustar00rootroot00000000000000-- double file in genome1 and genome2 should fail! units = { genome1 = { "000150_001_0.1_010_S001.fas", "000150_001_0.1_010_S002.fas", "000150_001_0.1_010_S003.fas", "000150_001_0.1_010_S004.fas", "000150_001_0.1_010_S005.fas" }, genome2 = { "000150_001_0.1_010_S002.fas", "000150_001_0.1_010_S007.fas", "000150_001_0.1_010_S008.fas", "000150_001_0.1_010_S009.fas", "000150_001_0.1_010_S010.fas" } } genometools-1.5.1/testdata/genomediff/unitfile3.lua000066400000000000000000000006731211610345200223730ustar00rootroot00000000000000-- one file is missing units = { genome1 = { "000150_001_0.1_010_S001.fas", "000150_001_0.1_010_S002.fas", "000150_001_0.1_010_S003.fas", "000150_001_0.1_010_S004.fas" }, genome2 = { "000150_001_0.1_010_S006.fas", "000150_001_0.1_010_S007.fas", "000150_001_0.1_010_S008.fas", "000150_001_0.1_010_S009.fas", "000150_001_0.1_010_S010.fas" } } genometools-1.5.1/testdata/genomediff/unitfile4.lua000066400000000000000000000010051211610345200223620ustar00rootroot00000000000000-- file not in index units = { genome1 = { "000150_001_0.1_010_S001.fas", "not_there.fas", "000150_001_0.1_010_S002.fas", "000150_001_0.1_010_S003.fas", "000150_001_0.1_010_S004.fas", "000150_001_0.1_010_S005.fas" }, genome2 = { "000150_001_0.1_010_S006.fas", "000150_001_0.1_010_S007.fas", "000150_001_0.1_010_S008.fas", "000150_001_0.1_010_S009.fas", "000150_001_0.1_010_S010.fas" } } genometools-1.5.1/testdata/gff3_file_1_short.txt000066400000000000000000000011671211610345200217060ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00002;Parent=gene00001 ctg123 . mRNA 1300 9000 . + . ID=mRNA00003;Parent=gene00001 ctg123 . exon 1300 1500 . + . Parent=mRNA00003 ctg123 . exon 1050 1500 . + . Parent=mRNA00001,mRNA00002 ctg123 . exon 3000 3902 . + . Parent=mRNA00001,mRNA00003 ctg123 . exon 5000 5500 . + . Parent=mRNA00001,mRNA00002,mRNA00003 ctg123 . exon 7000 9000 . + . Parent=mRNA00001,mRNA00002,mRNA00003 genometools-1.5.1/testdata/gff3_file_1_short_sorted.txt000066400000000000000000000010571211610345200232640ustar00rootroot00000000000000### ##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1,mRNA2 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA1,mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA1,mRNA2,mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA1,mRNA2,mRNA3 ctg123 . gene 1000 9000 . + . ID=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 genometools-1.5.1/testdata/gmap2gff3_prob.gmap000066400000000000000000000034271211610345200213270ustar00rootroot00000000000000>gi|22209069|gb|BC036470.1| Homo sapiens cadherin 2, type 1, N-cadherin (neuronal), mRNA (cDNA clone MGC:41765 IMAGE:5264944), complete cds Paths (1): Path 1: query 2--4018 (4017 bp) => chr NA:20,789,928--20,563,762 (-226167 bp) cDNA direction: sense Genomic pos: encode_regions:20,789,928--20,563,762 (- strand) Accessions: ENr213:65,702--291,868 (out of 500000 bp) Number of exons: 16 Coverage: 99.6 (query length: 4033 bp) Trimmed coverage: 100.0 (trimmed length: 4018 bp, trimmed region: 1..4018) Percent identity: 99.6 (4003 matches, 14 mismatches, 1 indels, 0 unknowns) Non-intron gaps: 0 openings, 0 bases in cdna; 1 openings, 1 bases in genome Translation: 3..2837 (944 aa) Amino acid changes: P1R [2], P202S [605], P475Q [1424], T492A [1475], V522M [1565], D667G [2000] Alignments: Alignment for path 1: -NA:20789928-20789754 (2-176) 98% -> ...29178... -NA:20760575-20760464 (177-288) 100% -> ...133763... -NA:20626700-20626474 (289-515) 99% -> ...1690... -NA:20624783-20624637 (516-662) 99% -> ...1973... -NA:20622663-20622508 (663-818) 100% -> ...3723... -NA:20618784-20618640 (819-963) 100% -> ...2679... -NA:20615960-20615788 (964-1136) 100% -> ...9359... -NA:20606428-20606291 (1137-1274) 100% -> ...659... -NA:20605631-20605446 (1275-1460) 99% -> ...2304... -NA:20603141-20602888 (1461-1714) 98% -> ...1430... -NA:20601457-20601315 (1715-1857) 100% -> ...2762... -NA:20598552-20598319 (1858-2091) 99% -> ...294... -NA:20598024-20597791 (2092-2325) 99% -> ...1916... -NA:20595874-20595735 (2326-2465) 100% -> ...19422... -NA:20576312-20576148 (2466-2630) 99% -> ...10997... -NA:20565150-20563762 (2631-4018) 99% genometools-1.5.1/testdata/gmap2gff3_prob.out000066400000000000000000000017231211610345200212070ustar00rootroot00000000000000##gff-version 3 ##sequence-region ENr213 20563762 20789928 ENr213 gmap gene 20563762 20789928 . - . ID=gene1 ENr213 gmap exon 20789754 20789928 . - . Parent=gene1 ENr213 gmap exon 20760464 20760575 . - . Parent=gene1 ENr213 gmap exon 20626474 20626700 . - . Parent=gene1 ENr213 gmap exon 20624637 20624783 . - . Parent=gene1 ENr213 gmap exon 20622508 20622663 . - . Parent=gene1 ENr213 gmap exon 20618640 20618784 . - . Parent=gene1 ENr213 gmap exon 20615788 20615960 . - . Parent=gene1 ENr213 gmap exon 20606291 20606428 . - . Parent=gene1 ENr213 gmap exon 20605446 20605631 . - . Parent=gene1 ENr213 gmap exon 20602888 20603141 . - . Parent=gene1 ENr213 gmap exon 20601315 20601457 . - . Parent=gene1 ENr213 gmap exon 20598319 20598552 . - . Parent=gene1 ENr213 gmap exon 20597791 20598024 . - . Parent=gene1 ENr213 gmap exon 20595735 20595874 . - . Parent=gene1 ENr213 gmap exon 20576148 20576312 . - . Parent=gene1 ENr213 gmap exon 20563762 20565150 . - . Parent=gene1 ### genometools-1.5.1/testdata/graphics_curve_test_coords.txt000066400000000000000000000034111211610345200240310ustar00rootroot000000000000000.252464995017 0.716618647975 0.83852191163 0.202045104845 0.682322663933 0.625222020058 0.0464627170919 0.492734099275 0.654170946759 0.438116845367 0.0264870130995 0.430784649214 0.78778849365 0.348824961841 0.103773357931 0.257709570123 0.23014191757 0.662081461976 0.219166988477 0.0540194033005 0.54875457577 0.00565834156609 0.321912792477 0.402201358964 0.330139923464 0.0292826637407 0.606652525416 0.559477125422 0.72900242578 0.184423871612 0.688571973222 0.0687212062229 0.944742395088 0.863826487571 0.551930189584 0.739601363475 0.269300385162 0.764335175928 0.437325266564 0.943464908586 0.919697953018 0.688069524851 0.355759601303 0.351355072497 0.130259609106 0.430024816487 0.352326305516 0.869812762779 0.952130989772 0.588517073104 0.46576596471 0.964169927055 0.674351493669 0.920811068874 0.894093170248 0.740538396554 0.839071476775 0.318254040324 0.504775279167 0.68327537007 0.246838393533 0.0722537150165 0.144005651683 0.523513216403 0.310615087258 0.609291526849 0.722830866929 0.444321122305 0.168699740012 0.98193385698 0.885837262411 0.774797127085 0.509025068478 0.266816134398 0.145493119599 0.0505351051504 0.485829240225 0.406962804646 0.243669183637 0.0438175910366 0.572172305413 0.086649699935 0.302807895428 0.702069476032 0.272007127656 0.966887090457 0.0755566399874 0.39672632104 0.272856207442 0.177205544617 0.994850549681 0.935342011844 0.890435332824 0.503080598578 0.188600735111 0.757298718726 0.588767547135 0.426300856701 0.446797036927 0.201569236252 0.677500844938 0.935258347902 0.589133015268 0.632577206141 0.884366783136 0.712853930128 0.701441659378 0.10350035832 0.765294727045 0.25596088855 0.296620166883 0.805385889229 0.689686748786 0.749523614437 0.533825839419 0.603982863779 0.110041882939 0.833757730072 0.0157582782621 0.318078355996 genometools-1.5.1/testdata/graphics_test.out000066400000000000000000000646001211610345200212530ustar00rootroot00000000000000 genometools-1.5.1/testdata/gt.supp000066400000000000000000000045161211610345200172060ustar00rootroot00000000000000{ Memcheck:Cond fun:_tr_flush_block fun:deflate_slow fun:deflate fun:png_write_finish_row } { Memcheck:Cond fun:_tr_flush_block fun:deflate_slow fun:deflate fun:png_write_filtered_row } { Memcheck:Cond fun:longest_match fun:deflate_slow fun:deflate fun:do_flush fun:gzclose ... } { Memcheck:Cond fun:deflate_slow fun:deflate fun:gzclose ... } { Memcheck:Cond fun:longest_match fun:deflate_slow ... fun:gt_graphics_cairo_save_to_* ... } { Memcheck:Cond ... fun:deflate_slow fun:deflate ... obj:*lib/*libcairo* ... } { Memcheck:Cond fun:pthread_rwlock_init fun:gt_rwlock_new fun:gt_ma_init fun:gt_lib_init ... } { Fontconfig_static_data_problem Memcheck:Addr4 ... fun:FcConfigParseAndLoad ... } { Fontconfig_static_data_problem Memcheck:Addr8 ... fun:FcConfigParseAndLoad ... } { leak_within_pango1 fun:*alloc ... fun:g_type_init_with_debug_flags fun:pango_cairo_font_map_new } { leak_within_pango3 Memcheck:Leak fun:*alloc ... fun:g_get_language_names fun:g_thread_init_glib fun:g_type_init_with_debug_flags fun:pango_cairo_font_map_new } { leak_within_pango5 Memcheck:Leak fun:*alloc ... fun:g_type_register_fundamental ... fun:g_type_init_with_debug_flags fun:pango_cairo_font_map_new } { leak_within_pango8 Memcheck:Leak fun:*alloc ... fun:pango_find_map } { leak_within_pango13 Memcheck:Leak fun:*alloc ... fun:pango_itemize_with_base_dir } { leak_within_pango15 Memcheck:Leak fun:memalign ... fun:g_type_init_with_debug_flags fun:pango_cairo_font_map_new } { leak_within_pango18 Memcheck:Leak fun:*alloc ... fun:pango_cairo_font_map_get_default } { leak_within_pango19 Memcheck:Leak fun:*alloc ... obj:/usr/lib*/libpango* } { leak_within_pango20 Memcheck:Leak fun:memalign ... obj:/usr/lib*/libpango* } { freetype_leak Memcheck:Leak fun:*alloc ... obj:*lib/libfreetype* ... } { cairo_catchall_static_leaks Memcheck:Leak fun:malloc ... obj:*lib/libcairo* ... } { fontconfig_leak Memcheck:Leak fun:*alloc ... obj:*lib/libfontconfig* ... } genometools-1.5.1/testdata/gt_bioseq_fail_1.fas000066400000000000000000000000001211610345200215250ustar00rootroot00000000000000genometools-1.5.1/testdata/gt_bioseq_fail_2.fas000066400000000000000000000000021211610345200215300ustar00rootroot00000000000000x genometools-1.5.1/testdata/gt_bioseq_fail_3.fas000066400000000000000000000000021211610345200215310ustar00rootroot00000000000000> genometools-1.5.1/testdata/gt_bioseq_fail_4.fas000066400000000000000000000000031211610345200215330ustar00rootroot00000000000000>d genometools-1.5.1/testdata/gt_bioseq_fail_5.fas000066400000000000000000000000031211610345200215340ustar00rootroot00000000000000> genometools-1.5.1/testdata/gt_bioseq_fail_6.fas000066400000000000000000000000041211610345200215360ustar00rootroot00000000000000> > genometools-1.5.1/testdata/gt_bioseq_fail_7.fas000066400000000000000000000000021211610345200215350ustar00rootroot00000000000000>dgenometools-1.5.1/testdata/gt_bioseq_seqlengthdistri.out000066400000000000000000000007611211610345200236570ustar00rootroot00000000000000sequence length distribution: 29: 1 (prob=0.0833,cumulative=0.0833) 75: 1 (prob=0.0833,cumulative=0.1667) 102: 1 (prob=0.0833,cumulative=0.2500) 111: 1 (prob=0.0833,cumulative=0.3333) 156: 1 (prob=0.0833,cumulative=0.4167) 296: 1 (prob=0.0833,cumulative=0.5000) 368: 1 (prob=0.0833,cumulative=0.5833) 480: 1 (prob=0.0833,cumulative=0.6667) 493: 1 (prob=0.0833,cumulative=0.7500) 889: 1 (prob=0.0833,cumulative=0.8333) 924: 1 (prob=0.0833,cumulative=0.9167) 1300: 1 (prob=0.0833,cumulative=1.0000) genometools-1.5.1/testdata/gt_bioseq_succ_1.fas000066400000000000000000000000041211610345200215530ustar00rootroot00000000000000> c genometools-1.5.1/testdata/gt_bioseq_succ_2.fas000066400000000000000000000000101211610345200215510ustar00rootroot00000000000000> c > c genometools-1.5.1/testdata/gt_bioseq_succ_3.fas000066400000000000000000000040741211610345200215700ustar00rootroot00000000000000>gi|8690385|dbj|AV530102.1|AV530102 AV530102 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL58h01R 5', mRNA sequence CTGGTTCGTTGCCGCCTTGCACGTTCCTTCTTCTTCCTTCTCTCCCCCCCATCTTATCTCTTTCCCCCCC TTTACCCTAACCCTAATTTTCTTCGCCGTCCTCTCTTTTCTCTCTATCTAATTTCGTTCCCATATTCGAA ATCTCTTACCTTTTATCTCCAGATCTTTTAGATCCGTAATTCCCTACTATTGATTATACCCAAACTTTTA CTCTTATCTTCCTCGTTTGATTCTTATGCTTCCTTTTATGAATTGATTTCTTCATAAAGTCATCATCTTT GGATTGAATTCGACTCATTAATCAATCCGTTAACCAATAACCACCTTGACAGTTTCTTCTCCGAGGATTC CAGATTACAATTCTAGTGGAGCTGTAATTGGATTCAGATCTAACTCAAGTTAGTGTTACTGATGTGTCTA TTGGATGCAATCGTGTAGTGATATTGAATATATTTCTGATGGGAGAAGGAACTATTTGTTTGGAGATGCC AAAGGAAGAGAATGGTCAATTGAAAAGAGATA >gi|8690380|dbj|AV530097.1|AV530097 AV530097 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL58e12R 5', mRNA sequence GTCGTGAAGAATCCACTCAGTCCAAATTCTGGACAAGCAAACCTTAAAAGGAATATGGTATCTGAAAAGG AAATTGATGCACCTTTGCAGATTGGAATTGTTCGTGTCTTTGAGCAACAAGGTATTGAAGCTCCTAGTGA CGATGATGATTTTATTGAGGTAAGATCAAAAAGGCAAATGCTTAATGATCGCCGTGAACAGAGAGAAAAG GAAATTAAAGAGAAGTCTCAGGCAGCCAAGGCATTCCGAAAACCTCGTTCAACTTTCCAGAACAATACTA CTGCAGCCAGGTCCAACAGAAGCCCACCAGCTAGCCGAGCTGCGAACAATAAGCAGTTTAATCCAGTCTC CAACAGACAGACGTTAGCCCCAATTGGCACACCTTCACCTAAAATAGATTCCCATGTTGATGAAAAATCT GGGAGCAACAAGTCCACTCAGGAAAGTAGTGCTCTTCCAGTTATACCCAAAAATGATCAGAATCCAGCGT CAGGTTTTGTATTCAGCAACAAAAATAAGGTTCTCGATAACAGTCATACACCTGTGGGGAC >gi|8690379|dbj|AV530096.1|AV530096 AV530096 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL58e11R 5', mRNA sequence CCAAAATCCTCAAAGAGAGACTATACTTCTCTCGGATCCTTCCTGATTTCAAAATTTCTTCAACCCACCA GCAGCAGCAGCAGATGAAGAAGGTTAAACAGATTCGTGTCTTAAAGCCTTTCGATCTTCTCTCGGAAGAG CTCGTCTTTATCATCCTTGACCTCATCTCTCCCAACCCTTCCGATCTCAAATCCTTCTCTCTTACTTGCA AATCTTTCTACCAGCTCGAGTCCAAGCACCGCGGATCCTTAAAACCTCTCCGCTCCGACTATCTCCCTCG CATCTTGACTCGTTACCGGAACACCACCGATCTCGATCTTACCTTCTGCCCGCGTGTCACTGACTACGCG CTTAGCGTCGTTGGCTGTCTCTCCGGACCTACGCTTCGCTCCCTCGACCTCTCGCGCTCTGGCTCCTTCT CCGCCGCGGGACTACTGCGATTGGCCCTCAAATGTGTCAATTTAGTCGAGATTGACCTGTCCAATGCGAC GGAGATGAGAGACGCCGATGCTG genometools-1.5.1/testdata/gt_bioseq_succ_3.gc000066400000000000000000000001431211610345200214010ustar00rootroot00000000000000showing GC-content for sequence file "-" GC-content: 44.07% (AT-content: 55.93%, N-content: 0.00%) genometools-1.5.1/testdata/gt_bioseq_succ_3.out1000066400000000000000000000012701211610345200217020ustar00rootroot00000000000000>gi|8690385|dbj|AV530102.1|AV530102 AV530102 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL58h01R 5', mRNA sequence CTGGTTCGTTGCCGCCTTGCACGTTCCTTCTTCTTCCTTCTCTCCCCCCCATCTTATCTCTTTCCCCCCC TTTACCCTAACCCTAATTTTCTTCGCCGTCCTCTCTTTTCTCTCTATCTAATTTCGTTCCCATATTCGAA ATCTCTTACCTTTTATCTCCAGATCTTTTAGATCCGTAATTCCCTACTATTGATTATACCCAAACTTTTA CTCTTATCTTCCTCGTTTGATTCTTATGCTTCCTTTTATGAATTGATTTCTTCATAAAGTCATCATCTTT GGATTGAATTCGACTCATTAATCAATCCGTTAACCAATAACCACCTTGACAGTTTCTTCTCCGAGGATTC CAGATTACAATTCTAGTGGAGCTGTAATTGGATTCAGATCTAACTCAAGTTAGTGTTACTGATGTGTCTA TTGGATGCAATCGTGTAGTGATATTGAATATATTTCTGATGGGAGAAGGAACTATTTGTTTGGAGATGCC AAAGGAAGAGAATGGTCAATTGAAAAGAGATA genometools-1.5.1/testdata/gt_bioseq_succ_3.out2000066400000000000000000000013251211610345200217040ustar00rootroot00000000000000>gi|8690380|dbj|AV530097.1|AV530097 AV530097 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL58e12R 5', mRNA sequence GTCGTGAAGAATCCACTCAGTCCAAATTCTGGACAAGCAAACCTTAAAAGGAATATGGTATCTGAAAAGG AAATTGATGCACCTTTGCAGATTGGAATTGTTCGTGTCTTTGAGCAACAAGGTATTGAAGCTCCTAGTGA CGATGATGATTTTATTGAGGTAAGATCAAAAAGGCAAATGCTTAATGATCGCCGTGAACAGAGAGAAAAG GAAATTAAAGAGAAGTCTCAGGCAGCCAAGGCATTCCGAAAACCTCGTTCAACTTTCCAGAACAATACTA CTGCAGCCAGGTCCAACAGAAGCCCACCAGCTAGCCGAGCTGCGAACAATAAGCAGTTTAATCCAGTCTC CAACAGACAGACGTTAGCCCCAATTGGCACACCTTCACCTAAAATAGATTCCCATGTTGATGAAAAATCT GGGAGCAACAAGTCCACTCAGGAAAGTAGTGCTCTTCCAGTTATACCCAAAAATGATCAGAATCCAGCGT CAGGTTTTGTATTCAGCAACAAAAATAAGGTTCTCGATAACAGTCATACACCTGTGGGGAC genometools-1.5.1/testdata/gt_bioseq_succ_3.out3000066400000000000000000000012571211610345200217110ustar00rootroot00000000000000>gi|8690379|dbj|AV530096.1|AV530096 AV530096 Arabidopsis thaliana aboveground organs two to six-week old Arabidopsis thaliana cDNA clone APZL58e11R 5', mRNA sequence CCAAAATCCTCAAAGAGAGACTATACTTCTCTCGGATCCTTCCTGATTTCAAAATTTCTTCAACCCACCA GCAGCAGCAGCAGATGAAGAAGGTTAAACAGATTCGTGTCTTAAAGCCTTTCGATCTTCTCTCGGAAGAG CTCGTCTTTATCATCCTTGACCTCATCTCTCCCAACCCTTCCGATCTCAAATCCTTCTCTCTTACTTGCA AATCTTTCTACCAGCTCGAGTCCAAGCACCGCGGATCCTTAAAACCTCTCCGCTCCGACTATCTCCCTCG CATCTTGACTCGTTACCGGAACACCACCGATCTCGATCTTACCTTCTGCCCGCGTGTCACTGACTACGCG CTTAGCGTCGTTGGCTGTCTCTCCGGACCTACGCTTCGCTCCCTCGACCTCTCGCGCTCTGGCTCCTTCT CCGCCGCGGGACTACTGCGATTGGCCCTCAAATGTGTCAATTTAGTCGAGATTGACCTGTCCAATGCGAC GGAGATGAGAGACGCCGATGCTG genometools-1.5.1/testdata/gt_cds_descrange_multi.fas000066400000000000000000000000601211610345200230340ustar00rootroot00000000000000>dna:101..109 augggguag >dna:201..209 augggguag genometools-1.5.1/testdata/gt_cds_descrange_multi.in000066400000000000000000000003121211610345200226710ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 101 209 dna . gene 101 109 . + . ID=gene1 dna . exon 101 109 . + . Parent=gene1 ### dna . gene 201 209 . + . ID=gene2 dna . exon 201 209 . + . Parent=gene2 ### genometools-1.5.1/testdata/gt_cds_descrange_multi.out000066400000000000000000000004561211610345200231030ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 101 209 dna . gene 101 109 . + . ID=gene1 dna . exon 101 109 . + . Parent=gene1 dna gt cds CDS 101 109 . + 0 ID=CDS1;Parent=gene1 ### dna . gene 201 209 . + . ID=gene2 dna . exon 201 209 . + . Parent=gene2 dna gt cds CDS 201 209 . + 0 ID=CDS2;Parent=gene2 ### genometools-1.5.1/testdata/gt_cds_descrange_multi_fail_1.fas000066400000000000000000000000471211610345200242540ustar00rootroot00000000000000>dna:101..109 augggguag >dna augggguag genometools-1.5.1/testdata/gt_cds_descrange_multi_fail_2.fas000066400000000000000000000000471211610345200242550ustar00rootroot00000000000000>dna augggguag >dna:101..109 augggguag genometools-1.5.1/testdata/gt_cds_descrange_wrong_id.fas000066400000000000000000000000301211610345200235070ustar00rootroot00000000000000>dns:101..109 augggguag genometools-1.5.1/testdata/gt_cds_descrange_wrong_range.fas000066400000000000000000000000301211610345200242070ustar00rootroot00000000000000>dna:201..209 augggguag genometools-1.5.1/testdata/gt_cds_nostartcodon_nofinalstopcodon.in000066400000000000000000000020271211610345200257050ustar00rootroot00000000000000##gff-version 3 ##sequence-region 1877523 1 106973 1877523 gth gene 30278 31355 . + . ID=gene1 1877523 gth mRNA 30278 31355 . + . ID=mRNA1;Parent=gene1;Target=8690080 1 524 + 1877523 gth exon 30278 30391 1 + . Parent=mRNA1 1877523 1877523 five_prime_cis_splice_site 30392 30393 0.985 + . Parent=mRNA1 1877523 1877523 three_prime_cis_splice_site 30475 30476 0.918 + . Parent=mRNA1 1877523 gth exon 30477 30562 1 + . Parent=mRNA1 1877523 1877523 five_prime_cis_splice_site 30563 30564 0.938 + . Parent=mRNA1 1877523 1877523 three_prime_cis_splice_site 30656 30657 0.973 + . Parent=mRNA1 1877523 gth exon 30658 30763 1 + . Parent=mRNA1 1877523 1877523 five_prime_cis_splice_site 30764 30765 0.996 + . Parent=mRNA1 1877523 1877523 three_prime_cis_splice_site 30988 30989 1 + . Parent=mRNA1 1877523 gth exon 30990 31085 1 + . Parent=mRNA1 1877523 1877523 five_prime_cis_splice_site 31086 31087 0.644 + . Parent=mRNA1 1877523 1877523 three_prime_cis_splice_site 31232 31233 0.987 + . Parent=mRNA1 1877523 gth exon 31234 31355 1 + . Parent=mRNA1 ### genometools-1.5.1/testdata/gt_cds_nostartcodon_nofinalstopcodon.out000066400000000000000000000024711211610345200261110ustar00rootroot00000000000000##gff-version 3 ##sequence-region 1877523 1 106973 1877523 gth gene 30278 31355 . + . ID=gene1 1877523 gth mRNA 30278 31355 . + . ID=mRNA1;Parent=gene1;Target=8690080 1 524 + 1877523 gth exon 30278 30391 1 + . Parent=mRNA1 1877523 gt cds CDS 30278 30391 . + 0 ID=CDS1;Parent=mRNA1 1877523 1877523 five_prime_cis_splice_site 30392 30393 0.985 + . Parent=mRNA1 1877523 1877523 three_prime_cis_splice_site 30475 30476 0.918 + . Parent=mRNA1 1877523 gth exon 30477 30562 1 + . Parent=mRNA1 1877523 gt cds CDS 30477 30562 . + 0 ID=CDS1;Parent=mRNA1 1877523 1877523 five_prime_cis_splice_site 30563 30564 0.938 + . Parent=mRNA1 1877523 1877523 three_prime_cis_splice_site 30656 30657 0.973 + . Parent=mRNA1 1877523 gth exon 30658 30763 1 + . Parent=mRNA1 1877523 gt cds CDS 30658 30763 . + 1 ID=CDS1;Parent=mRNA1 1877523 1877523 five_prime_cis_splice_site 30764 30765 0.996 + . Parent=mRNA1 1877523 1877523 three_prime_cis_splice_site 30988 30989 1 + . Parent=mRNA1 1877523 gth exon 30990 31085 1 + . Parent=mRNA1 1877523 gt cds CDS 30990 31085 . + 0 ID=CDS1;Parent=mRNA1 1877523 1877523 five_prime_cis_splice_site 31086 31087 0.644 + . Parent=mRNA1 1877523 1877523 three_prime_cis_splice_site 31232 31233 0.987 + . Parent=mRNA1 1877523 gt cds CDS 31234 31353 . + 0 ID=CDS1;Parent=mRNA1 1877523 gth exon 31234 31355 1 + . Parent=mRNA1 ### genometools-1.5.1/testdata/gt_cds_test_1.fas000066400000000000000000000000171211610345200210700ustar00rootroot00000000000000>dna augggguag genometools-1.5.1/testdata/gt_cds_test_1.in000066400000000000000000000001541211610345200207270ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 9 dna . gene 1 9 . + . ID=gene1 dna . exon 1 9 . + . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_1.out000066400000000000000000000002401211610345200211240ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 9 dna . gene 1 9 . + . ID=gene1 dna . exon 1 9 . + . Parent=gene1 dna gt cds CDS 1 9 . + 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_10.fas000066400000000000000000000000201211610345200211420ustar00rootroot00000000000000>dna ctaccccatt genometools-1.5.1/testdata/gt_cds_test_10.in000066400000000000000000000001571211610345200210120ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 10 dna . gene 1 10 . - . ID=gene1 dna . exon 1 10 . - . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_10.out000066400000000000000000000002431211610345200212070ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 10 dna . gene 1 10 . - . ID=gene1 dna gt cds CDS 1 9 . - 0 ID=CDS1;Parent=gene1 dna . exon 1 10 . - . Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_11.fas000066400000000000000000000000211211610345200211440ustar00rootroot00000000000000>dna ctaccccattt genometools-1.5.1/testdata/gt_cds_test_11.in000066400000000000000000000001571211610345200210130ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 11 dna . gene 1 11 . - . ID=gene1 dna . exon 1 11 . - . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_11.out000066400000000000000000000002431211610345200212100ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 11 dna . gene 1 11 . - . ID=gene1 dna gt cds CDS 1 9 . - 0 ID=CDS1;Parent=gene1 dna . exon 1 11 . - . Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_12.fas000066400000000000000000000000321211610345200211470ustar00rootroot00000000000000>dna ctacccnnnnnnnnccccat genometools-1.5.1/testdata/gt_cds_test_12.in000066400000000000000000000002221211610345200210050ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 20 dna . gene 1 20 . - . ID=gene1 dna . exon 1 6 . - . Parent=gene1 dna . exon 15 20 . - . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_12.out000066400000000000000000000003661211610345200212170ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 20 dna . gene 1 20 . - . ID=gene1 dna . exon 1 6 . - . Parent=gene1 dna gt cds CDS 1 6 . - 0 ID=CDS1;Parent=gene1 dna . exon 15 20 . - . Parent=gene1 dna gt cds CDS 15 20 . - 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_13.fas000066400000000000000000000000251211610345200211520ustar00rootroot00000000000000>dna augnnngggtttuag genometools-1.5.1/testdata/gt_cds_test_13.in000066400000000000000000000002641211610345200210140ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 15 dna . gene 1 15 . + . ID=gene1 dna . exon 1 3 . + . Parent=gene1 dna . exon 7 9 . + . Parent=gene1 dna . exon 13 15 . + . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_13.out000066400000000000000000000005061211610345200212140ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 15 dna . gene 1 15 . + . ID=gene1 dna . exon 1 3 . + . Parent=gene1 dna gt cds CDS 1 3 . + 0 ID=CDS1;Parent=gene1 dna . exon 7 9 . + . Parent=gene1 dna gt cds CDS 7 9 . + 0 ID=CDS1;Parent=gene1 dna . exon 13 15 . + . Parent=gene1 dna gt cds CDS 13 15 . + 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_14.fas000066400000000000000000000000251211610345200211530ustar00rootroot00000000000000>dna ctaaaacccnnncat genometools-1.5.1/testdata/gt_cds_test_14.in000066400000000000000000000002641211610345200210150ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 15 dna . gene 1 15 . - . ID=gene1 dna . exon 1 3 . - . Parent=gene1 dna . exon 7 9 . - . Parent=gene1 dna . exon 13 15 . - . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_14.out000066400000000000000000000005061211610345200212150ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 15 dna . gene 1 15 . - . ID=gene1 dna . exon 1 3 . - . Parent=gene1 dna gt cds CDS 1 3 . - 0 ID=CDS1;Parent=gene1 dna . exon 7 9 . - . Parent=gene1 dna gt cds CDS 7 9 . - 0 ID=CDS1;Parent=gene1 dna . exon 13 15 . - . Parent=gene1 dna gt cds CDS 13 15 . - 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_2.fas000066400000000000000000000000201211610345200210630ustar00rootroot00000000000000>dna aaugggguag genometools-1.5.1/testdata/gt_cds_test_2.in000066400000000000000000000001571211610345200207330ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 10 dna . gene 1 10 . + . ID=gene1 dna . exon 1 10 . + . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_2.out000066400000000000000000000002441211610345200211310ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 10 dna . gene 1 10 . + . ID=gene1 dna . exon 1 10 . + . Parent=gene1 dna gt cds CDS 2 10 . + 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_3.fas000066400000000000000000000000211211610345200210650ustar00rootroot00000000000000>dna aaaugggguag genometools-1.5.1/testdata/gt_cds_test_3.in000066400000000000000000000001571211610345200207340ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 11 dna . gene 1 11 . + . ID=gene1 dna . exon 1 11 . + . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_3.out000066400000000000000000000002441211610345200211320ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 11 dna . gene 1 11 . + . ID=gene1 dna . exon 1 11 . + . Parent=gene1 dna gt cds CDS 3 11 . + 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_4.fas000066400000000000000000000000171211610345200210730ustar00rootroot00000000000000>dna augggguag genometools-1.5.1/testdata/gt_cds_test_4.in000066400000000000000000000002271211610345200207330ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 9 dna . gene 1 9 . + . ID=gene1 dna . mRNA 1 9 . + . ID=mRNA1;Parent=gene1 dna . exon 1 9 . + . Parent=mRNA1 genometools-1.5.1/testdata/gt_cds_test_4.out000066400000000000000000000003131211610345200211300ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 9 dna . gene 1 9 . + . ID=gene1 dna . mRNA 1 9 . + . ID=mRNA1;Parent=gene1 dna . exon 1 9 . + . Parent=mRNA1 dna gt cds CDS 1 9 . + 0 ID=CDS1;Parent=mRNA1 ### genometools-1.5.1/testdata/gt_cds_test_5.fas000066400000000000000000000000201211610345200210660ustar00rootroot00000000000000>dna aaugggguag genometools-1.5.1/testdata/gt_cds_test_5.in000066400000000000000000000002331211610345200207310ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 10 dna . gene 1 10 . + . ID=gene1 dna . mRNA 1 10 . + . ID=mRNA1;Parent=gene1 dna . exon 1 10 . + . Parent=mRNA1 genometools-1.5.1/testdata/gt_cds_test_5.out000066400000000000000000000003201211610345200211270ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 10 dna . gene 1 10 . + . ID=gene1 dna . mRNA 1 10 . + . ID=mRNA1;Parent=gene1 dna . exon 1 10 . + . Parent=mRNA1 dna gt cds CDS 2 10 . + 0 ID=CDS1;Parent=mRNA1 ### genometools-1.5.1/testdata/gt_cds_test_6.fas000066400000000000000000000000211211610345200210700ustar00rootroot00000000000000>dna aaaugggguag genometools-1.5.1/testdata/gt_cds_test_6.in000066400000000000000000000002331211610345200207320ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 11 dna . gene 1 11 . + . ID=gene1 dna . mRNA 1 11 . + . ID=mRNA1;Parent=gene1 dna . exon 1 11 . + . Parent=mRNA1 genometools-1.5.1/testdata/gt_cds_test_6.out000066400000000000000000000003201211610345200211300ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 11 dna . gene 1 11 . + . ID=gene1 dna . mRNA 1 11 . + . ID=mRNA1;Parent=gene1 dna . exon 1 11 . + . Parent=mRNA1 dna gt cds CDS 3 11 . + 0 ID=CDS1;Parent=mRNA1 ### genometools-1.5.1/testdata/gt_cds_test_7.fas000066400000000000000000000000321211610345200210730ustar00rootroot00000000000000>dna auggggnnnnnnnnggguag genometools-1.5.1/testdata/gt_cds_test_7.in000066400000000000000000000002221211610345200207310ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 20 dna . gene 1 20 . + . ID=gene1 dna . exon 1 6 . + . Parent=gene1 dna . exon 15 20 . + . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_7.out000066400000000000000000000003661211610345200211430ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 20 dna . gene 1 20 . + . ID=gene1 dna . exon 1 6 . + . Parent=gene1 dna gt cds CDS 1 6 . + 0 ID=CDS1;Parent=gene1 dna . exon 15 20 . + . Parent=gene1 dna gt cds CDS 15 20 . + 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_8.fas000066400000000000000000000000441211610345200210770ustar00rootroot00000000000000>dna ttttttttttauggggnnnnnnnnggguag genometools-1.5.1/testdata/gt_cds_test_8.in000066400000000000000000000002261211610345200207360ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 11 30 dna . gene 11 30 . + . ID=gene1 dna . exon 11 16 . + . Parent=gene1 dna . exon 25 30 . + . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_8.out000066400000000000000000000003741211610345200211430ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 11 30 dna . gene 11 30 . + . ID=gene1 dna . exon 11 16 . + . Parent=gene1 dna gt cds CDS 11 16 . + 0 ID=CDS1;Parent=gene1 dna . exon 25 30 . + . Parent=gene1 dna gt cds CDS 25 30 . + 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_9.fas000066400000000000000000000000171211610345200211000ustar00rootroot00000000000000>dna ctaccccat genometools-1.5.1/testdata/gt_cds_test_9.in000066400000000000000000000001541211610345200207370ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 9 dna . gene 1 9 . - . ID=gene1 dna . exon 1 9 . - . Parent=gene1 genometools-1.5.1/testdata/gt_cds_test_9.out000066400000000000000000000002401211610345200211340ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 1 9 dna . gene 1 9 . - . ID=gene1 dna . exon 1 9 . - . Parent=gene1 dna gt cds CDS 1 9 . - 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_descrange.fas000066400000000000000000000000301211610345200226560ustar00rootroot00000000000000>dna:101..109 augggguag genometools-1.5.1/testdata/gt_cds_test_descrange.in000066400000000000000000000001761211610345200225260ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 101 109 dna . gene 101 109 . + . ID=gene1 dna . exon 101 109 . + . Parent=gene1 ### genometools-1.5.1/testdata/gt_cds_test_descrange.out000066400000000000000000000002601211610345200227210ustar00rootroot00000000000000##gff-version 3 ##sequence-region dna 101 109 dna . gene 101 109 . + . ID=gene1 dna . exon 101 109 . + . Parent=gene1 dna gt cds CDS 101 109 . + 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/gt_chseqids_test_1.chseqids000066400000000000000000000000601211610345200231520ustar00rootroot00000000000000chseqids = { seq1 = "chr1", seq2 = "chr2" } genometools-1.5.1/testdata/gt_chseqids_test_1.gff3000066400000000000000000000002201211610345200221720ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10000 ##sequence-region seq2 1 10000 seq1 . gene 1000 9000 . + . . seq2 . gene 1000 9000 . + . . genometools-1.5.1/testdata/gt_chseqids_test_1.out000066400000000000000000000002201211610345200221540ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr1 1 10000 ##sequence-region chr2 1 10000 chr1 . gene 1000 9000 . + . . chr2 . gene 1000 9000 . + . . genometools-1.5.1/testdata/gt_chseqids_test_2.chseqids000066400000000000000000000000601211610345200231530ustar00rootroot00000000000000chseqids = { seq1 = "chr1", seq2 = "chr1" } genometools-1.5.1/testdata/gt_chseqids_test_2.gff3000066400000000000000000000002201211610345200221730ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10000 ##sequence-region seq2 1 10000 seq1 . gene 1000 2000 . + . . seq2 . gene 3000 9000 . + . . genometools-1.5.1/testdata/gt_chseqids_test_2.out000066400000000000000000000001571211610345200221660ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr1 1 10000 chr1 . gene 1000 2000 . + . . chr1 . gene 3000 9000 . + . . genometools-1.5.1/testdata/gt_chseqids_test_3.chseqids000066400000000000000000000000401211610345200231520ustar00rootroot00000000000000chseqids = { seq1 = "chr1", } genometools-1.5.1/testdata/gt_chseqids_test_3.gff3000066400000000000000000000002201211610345200221740ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10000 ##sequence-region seq2 1 10000 seq1 . gene 1000 9000 . + . . seq2 . gene 1000 9000 . + . . genometools-1.5.1/testdata/gt_chseqids_test_4.chseqids000066400000000000000000000000361211610345200231600ustar00rootroot00000000000000chseqids = { seq = "chr", } genometools-1.5.1/testdata/gt_chseqids_test_4.gff3000066400000000000000000000001741211610345200222050ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 10000 seq . gene 1000 9000 . + . ID=gene seq . exon 1000 9000 . + . Parent=gene genometools-1.5.1/testdata/gt_chseqids_test_4.out000066400000000000000000000002021211610345200221570ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr 1 10000 chr . gene 1000 9000 . + . ID=gene1 chr . exon 1000 9000 . + . Parent=gene1 ### genometools-1.5.1/testdata/gt_chseqids_test_5.chseqids000066400000000000000000000000571211610345200231640ustar00rootroot00000000000000chseqids = { seq1 = "chr", seq2 = "chr", } genometools-1.5.1/testdata/gt_chseqids_test_5.gff3000066400000000000000000000003541211610345200222060ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10000 ##sequence-region seq2 1 10000 seq1 . gene 1000 9000 . + . ID=gene1 seq1 . exon 1000 9000 . + . Parent=gene1 seq2 . gene 100 900 . + . ID=gene2 seq2 . exon 100 900 . + . Parent=gene2 genometools-1.5.1/testdata/gt_chseqids_test_5.out000066400000000000000000000003161211610345200221660ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr 1 10000 chr . gene 1000 9000 . + . ID=gene1 chr . exon 1000 9000 . + . Parent=gene1 ### chr . gene 100 900 . + . ID=gene2 chr . exon 100 900 . + . Parent=gene2 ### genometools-1.5.1/testdata/gt_chseqids_test_5.sorted_out000066400000000000000000000003161211610345200235460ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr 1 10000 chr . gene 100 900 . + . ID=gene1 chr . exon 100 900 . + . Parent=gene1 ### chr . gene 1000 9000 . + . ID=gene2 chr . exon 1000 9000 . + . Parent=gene2 ### genometools-1.5.1/testdata/gt_chseqids_test_6.chseqids000066400000000000000000000000411211610345200231560ustar00rootroot00000000000000chseqids = { ENm001 = "chr7" } genometools-1.5.1/testdata/gt_chseqids_test_6.gff3000066400000000000000000000002761211610345200222120ustar00rootroot00000000000000##gff-version 3 ##sequence-region ENm001 115404472 2110371766 ENm001 gth gene 115422568 117114462 0.766362 + . ID=gene1 ### ENm001 gth gene 115422568 117114462 0.770928 + . ID=gene2 ### genometools-1.5.1/testdata/gt_chseqids_test_6.out000066400000000000000000000002341211610345200221660ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr7 115404472 2110371766 chr7 gth gene 115422568 117114462 0.766 + . . chr7 gth gene 115422568 117114462 0.771 + . . genometools-1.5.1/testdata/gt_csa_prob_1.debug000066400000000000000000000001041211610345200213620ustar00rootroot00000000000000debug: -from 5414975 debug: csa number_of_sas=2 debug: csa finished genometools-1.5.1/testdata/gt_csa_prob_1.in000066400000000000000000000007461211610345200207160ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 10000000 NC_003070 gth gene 5414975 5415790 0.998350 + . ID=gene1 NC_003070 gth exon 5414975 5415294 0.996875 + . Parent=gene1 NC_003070 gth exon 5415423 5415589 1.000000 + . Parent=gene1 NC_003070 gth exon 5415672 5415790 1.000000 + . Parent=gene1 ### NC_003070 gth gene 5415008 5415564 0.995338 + . ID=gene2 NC_003070 gth exon 5415008 5415294 0.996516 + . Parent=gene2 NC_003070 gth exon 5415423 5415564 0.992958 + . Parent=gene2 ### genometools-1.5.1/testdata/gt_csa_prob_1.out000066400000000000000000000005451211610345200211140ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 10000000 NC_003070 gt csa gene 5414975 5415790 . + . ID=gene1 NC_003070 gt csa mRNA 5414975 5415790 . + . ID=mRNA1;Parent=gene1 NC_003070 gt csa exon 5414975 5415294 0.997 + . Parent=mRNA1 NC_003070 gt csa exon 5415423 5415589 1 + . Parent=mRNA1 NC_003070 gt csa exon 5415672 5415790 1 + . Parent=mRNA1 ### genometools-1.5.1/testdata/gt_csa_prob_2.debug000066400000000000000000000002411211610345200213650ustar00rootroot00000000000000debug: process cluster debug: -from 10472279 debug: csa number_of_sas=3 debug: csa finished debug: -from 10478330 debug: csa number_of_sas=3 debug: csa finished genometools-1.5.1/testdata/gt_csa_prob_2.in000066400000000000000000000016551211610345200207170ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 20000000 NC_003070 gth gene 10472279 10475534 0.861423 + . ID=gene1 NC_003070 gth exon 10472279 10472330 0.788462 + . Parent=gene1 NC_003070 gth exon 10473721 10473759 0.666667 + . Parent=gene1 NC_003070 gth exon 10475053 10475534 0.869295 + . Parent=gene1 ### NC_003070 gth gene 10474921 10475416 1.000000 + . ID=gene2 NC_003070 gth exon 10474921 10475416 1.000000 + . Parent=gene2 ### NC_003070 gth gene 10475055 10475601 0.967093 + . ID=gene3 NC_003070 gth exon 10475055 10475601 0.967093 + . Parent=gene3 ### NC_003070 gth gene 10478330 10478934 0.995041 + . ID=gene4 NC_003070 gth exon 10478330 10478934 0.995041 + . Parent=gene4 ### NC_003070 gth gene 10478406 10478990 0.907692 + . ID=gene5 NC_003070 gth exon 10478406 10478990 0.907692 + . Parent=gene5 ### NC_003070 gth gene 10478515 10478896 0.955497 + . ID=gene6 NC_003070 gth exon 10478515 10478896 0.955497 + . Parent=gene6 ### genometools-1.5.1/testdata/gt_csa_prob_2.out000066400000000000000000000012701211610345200211110ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 20000000 NC_003070 gt csa gene 10472279 10475601 . + . ID=gene1 NC_003070 gt csa mRNA 10472279 10475601 . + . ID=mRNA1;Parent=gene1 NC_003070 gt csa exon 10472279 10472330 0.788 + . Parent=mRNA1 NC_003070 gt csa exon 10473721 10473759 0.667 + . Parent=mRNA1 NC_003070 gt csa exon 10475053 10475601 0.967 + . Parent=mRNA1 NC_003070 gt csa mRNA 10474921 10475601 . + . ID=mRNA2;Parent=gene1 NC_003070 gt csa exon 10474921 10475601 0.967 + . Parent=mRNA2 ### NC_003070 gt csa gene 10478330 10478990 . + . ID=gene2 NC_003070 gt csa mRNA 10478330 10478990 . + . ID=mRNA3;Parent=gene2 NC_003070 gt csa exon 10478330 10478990 0.908 + . Parent=mRNA3 ### genometools-1.5.1/testdata/gt_csa_prob_3.debug000066400000000000000000000002411211610345200213660ustar00rootroot00000000000000debug: process cluster debug: -from 20552738 debug: csa number_of_sas=2 debug: csa finished debug: -from 24280722 debug: csa number_of_sas=1 debug: csa finished genometools-1.5.1/testdata/gt_csa_prob_3.in000066400000000000000000000007641211610345200207200ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 30000000 NC_003070 gth gene 20552738 20552824 0.747126 + . ID=gene1 NC_003070 gth exon 20552738 20552824 0.747126 + . Parent=gene1 ### NC_003070 gth gene 20552738 20553188 0.780269 + . ID=gene2 NC_003070 gth exon 20552738 20552824 0.747126 + . Parent=gene2 NC_003070 gth exon 20553053 20553188 0.801471 + . Parent=gene2 ### NC_003070 gth gene 24280722 24280936 0.804651 + . ID=gene3 NC_003070 gth exon 24280722 24280936 0.804651 + . Parent=gene3 ### genometools-1.5.1/testdata/gt_csa_prob_3.out000066400000000000000000000007661211610345200211230ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 30000000 NC_003070 gt csa gene 20552738 20553188 . + . ID=gene1 NC_003070 gt csa mRNA 20552738 20553188 . + . ID=mRNA1;Parent=gene1 NC_003070 gt csa exon 20552738 20552824 0.747 + . Parent=mRNA1 NC_003070 gt csa exon 20553053 20553188 0.801 + . Parent=mRNA1 ### NC_003070 gt csa gene 24280722 24280936 . + . ID=gene2 NC_003070 gt csa mRNA 24280722 24280936 . + . ID=mRNA2;Parent=gene2 NC_003070 gt csa exon 24280722 24280936 0.805 + . Parent=mRNA2 ### genometools-1.5.1/testdata/gt_csa_prob_4.debug000066400000000000000000000001051211610345200213660ustar00rootroot00000000000000debug: -from 10472279 debug: csa number_of_sas=3 debug: csa finished genometools-1.5.1/testdata/gt_csa_prob_4.in000066400000000000000000000010631211610345200207120ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 20000000 NC_003070 gth gene 10472279 10475534 0.861423 + . ID=gene1 NC_003070 gth exon 10472279 10472330 0.788462 + . Parent=gene1 NC_003070 gth exon 10473721 10473759 0.666667 + . Parent=gene1 NC_003070 gth exon 10475053 10475534 0.869295 + . Parent=gene1 ### NC_003070 gth gene 10472500 10472941 1.000000 + . ID=gene2 NC_003070 gth exon 10472500 10472941 1.000000 + . Parent=gene2 ### NC_003070 gth gene 10474921 10475416 1.000000 + . ID=gene3 NC_003070 gth exon 10474921 10475416 1.000000 + . Parent=gene3 ### genometools-1.5.1/testdata/gt_csa_prob_4.out000066400000000000000000000011651211610345200211160ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 20000000 NC_003070 gt csa gene 10472279 10475534 . + . ID=gene1 NC_003070 gt csa mRNA 10472279 10475534 . + . ID=mRNA1;Parent=gene1 NC_003070 gt csa exon 10472279 10472330 0.788 + . Parent=mRNA1 NC_003070 gt csa exon 10473721 10473759 0.667 + . Parent=mRNA1 NC_003070 gt csa exon 10475053 10475534 0.869 + . Parent=mRNA1 NC_003070 gt csa mRNA 10472500 10472941 . + . ID=mRNA2;Parent=gene1 NC_003070 gt csa exon 10472500 10472941 1 + . Parent=mRNA2 NC_003070 gt csa mRNA 10474921 10475416 . + . ID=mRNA3;Parent=gene1 NC_003070 gt csa exon 10474921 10475416 1 + . Parent=mRNA3 ### genometools-1.5.1/testdata/gt_csa_prob_5.in000066400000000000000000000037111211610345200207150ustar00rootroot00000000000000##gff-version 3 ##sequence-region ENm002 1 1000000 ENm002 ENCODE gene 774908 816850 . - . ID=gene1;Name=AC004039.5-002;name2=KIF3A ENm002 ENCODE exon 774908 775960 . - . Parent=gene1 ENm002 ENCODE CDS 775912 775960 . - 1 Parent=gene1 ENm002 ENCODE exon 778449 778573 . - . Parent=gene1 ENm002 ENCODE CDS 778449 778573 . - 0 Parent=gene1 ENm002 ENCODE exon 779494 779562 . - . Parent=gene1 ENm002 ENCODE CDS 779494 779562 . - 0 Parent=gene1 ENm002 ENCODE exon 779925 779978 . - . Parent=gene1 ENm002 ENCODE CDS 779925 779978 . - 0 Parent=gene1 ENm002 ENCODE exon 781365 781490 . - . Parent=gene1 ENm002 ENCODE CDS 781365 781490 . - 0 Parent=gene1 ENm002 ENCODE exon 781836 781946 . - . Parent=gene1 ENm002 ENCODE CDS 781836 781946 . - 0 Parent=gene1 ENm002 ENCODE exon 782163 782343 . - . Parent=gene1 ENm002 ENCODE CDS 782163 782343 . - 1 Parent=gene1 ENm002 ENCODE exon 782741 782897 . - . Parent=gene1 ENm002 ENCODE CDS 782741 782897 . - 2 Parent=gene1 ENm002 ENCODE exon 785729 785737 . - . Parent=gene1 ENm002 ENCODE CDS 785729 785737 . - 2 Parent=gene1 ENm002 ENCODE exon 790237 790335 . - . Parent=gene1 ENm002 ENCODE CDS 790237 790335 . - 2 Parent=gene1 ENm002 ENCODE exon 795035 795209 . - . Parent=gene1 ENm002 ENCODE CDS 795035 795209 . - 0 Parent=gene1 ENm002 ENCODE exon 795523 795720 . - . Parent=gene1 ENm002 ENCODE CDS 795523 795720 . - 0 Parent=gene1 ENm002 ENCODE exon 796123 796262 . - . Parent=gene1 ENm002 ENCODE CDS 796123 796262 . - 2 Parent=gene1 ENm002 ENCODE exon 799887 799992 . - . Parent=gene1 ENm002 ENCODE CDS 799887 799992 . - 0 Parent=gene1 ENm002 ENCODE exon 805406 805490 . - . Parent=gene1 ENm002 ENCODE CDS 805406 805490 . - 1 Parent=gene1 ENm002 ENCODE exon 805632 805776 . - . Parent=gene1 ENm002 ENCODE CDS 805632 805776 . - 2 Parent=gene1 ENm002 ENCODE exon 813483 813756 . - . Parent=gene1 ENm002 ENCODE CDS 813483 813756 . - 0 Parent=gene1 ENm002 ENCODE CDS 816692 816697 . - 0 Parent=gene1 ENm002 ENCODE exon 816692 816850 . - . Parent=gene1 ### genometools-1.5.1/testdata/gt_csa_prob_5.out000066400000000000000000000021201211610345200211070ustar00rootroot00000000000000##gff-version 3 ##sequence-region ENm002 1 1000000 ENm002 gt csa gene 774908 816850 . - . ID=gene1 ENm002 gt csa mRNA 774908 816850 . - . ID=mRNA1;Parent=gene1 ENm002 gt csa exon 774908 775960 . - . Parent=mRNA1 ENm002 gt csa exon 778449 778573 . - . Parent=mRNA1 ENm002 gt csa exon 779494 779562 . - . Parent=mRNA1 ENm002 gt csa exon 779925 779978 . - . Parent=mRNA1 ENm002 gt csa exon 781365 781490 . - . Parent=mRNA1 ENm002 gt csa exon 781836 781946 . - . Parent=mRNA1 ENm002 gt csa exon 782163 782343 . - . Parent=mRNA1 ENm002 gt csa exon 782741 782897 . - . Parent=mRNA1 ENm002 gt csa exon 785729 785737 . - . Parent=mRNA1 ENm002 gt csa exon 790237 790335 . - . Parent=mRNA1 ENm002 gt csa exon 795035 795209 . - . Parent=mRNA1 ENm002 gt csa exon 795523 795720 . - . Parent=mRNA1 ENm002 gt csa exon 796123 796262 . - . Parent=mRNA1 ENm002 gt csa exon 799887 799992 . - . Parent=mRNA1 ENm002 gt csa exon 805406 805490 . - . Parent=mRNA1 ENm002 gt csa exon 805632 805776 . - . Parent=mRNA1 ENm002 gt csa exon 813483 813756 . - . Parent=mRNA1 ENm002 gt csa exon 816692 816850 . - . Parent=mRNA1 ### genometools-1.5.1/testdata/gt_csa_prob_6.in000066400000000000000000000100541211610345200207140ustar00rootroot00000000000000##gff-version 3 ##sequence-region ENm002 1 1000000 ENm002 gth gene 29252 90941 1.000 - . ID=gene1;Target=exon_1 1 6539 + ENm002 gth exon 29252 33650 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 33650 33651 0.997 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 38814 38815 0.896 - . Parent=gene1 ENm002 gth exon 38815 38886 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 38886 38887 0.969 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 39798 39799 0.965 - . Parent=gene1 ENm002 gth exon 39799 39900 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 39900 39901 0.000 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 41813 41814 0.991 - . Parent=gene1 ENm002 gth exon 41814 41957 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 41957 41958 0.896 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 45694 45695 0.532 - . Parent=gene1 ENm002 gth exon 45695 45811 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 45811 45812 0.950 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 47218 47219 0.655 - . Parent=gene1 ENm002 gth exon 47219 47307 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 47307 47308 0.932 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 49406 49407 0.964 - . Parent=gene1 ENm002 gth exon 49407 49479 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 49479 49480 0.985 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 50828 50829 0.201 - . Parent=gene1 ENm002 gth exon 50829 50924 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 50924 50925 0.998 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 52002 52003 0.959 - . Parent=gene1 ENm002 gth exon 52003 52137 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 52137 52138 0.864 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 52544 52545 0.999 - . Parent=gene1 ENm002 gth exon 52545 52679 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 52679 52680 0.984 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 54171 54172 0.991 - . Parent=gene1 ENm002 gth exon 54172 54249 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 54249 54250 0.831 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 55926 55927 0.557 - . Parent=gene1 ENm002 gth exon 55927 56000 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 56000 56001 1.000 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 64685 64686 0.975 - . Parent=gene1 ENm002 gth exon 64686 64737 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 64737 64738 0.973 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 66100 66101 0.847 - . Parent=gene1 ENm002 gth exon 66101 66133 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 66133 66134 0.989 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 67326 67327 0.934 - . Parent=gene1 ENm002 gth exon 67327 67505 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 67505 67506 0.901 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 68083 68084 0.995 - . Parent=gene1 ENm002 gth exon 68084 68183 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 68183 68184 0.941 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 68685 68686 0.962 - . Parent=gene1 ENm002 gth exon 68686 68787 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 68787 68788 0.762 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 69378 69379 0.974 - . Parent=gene1 ENm002 gth exon 69379 69443 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 69443 69444 0.975 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 70131 70132 0.998 - . Parent=gene1 ENm002 gth exon 70132 70246 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 70246 70247 0.831 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 73309 73310 0.916 - . Parent=gene1 ENm002 gth exon 73310 73530 1.000 - . Parent=gene1 ENm002 gth three_prime_cis_splice_site 73530 73531 0.992 - . Parent=gene1 ENm002 gth five_prime_cis_splice_site 90783 90784 0.939 - . Parent=gene1 ENm002 gth exon 90784 90941 1.000 - . Parent=gene1 ### genometools-1.5.1/testdata/gt_csa_prob_6.out000066400000000000000000000023251211610345200211170ustar00rootroot00000000000000##gff-version 3 ##sequence-region ENm002 1 1000000 ENm002 gt csa gene 29252 90941 . - . ID=gene1 ENm002 gt csa mRNA 29252 90941 . - . ID=mRNA1;Parent=gene1;Target=exon_1 1 6539 + ENm002 gt csa exon 29252 33650 1 - . Parent=mRNA1 ENm002 gt csa exon 38815 38886 1 - . Parent=mRNA1 ENm002 gt csa exon 39799 39900 1 - . Parent=mRNA1 ENm002 gt csa exon 41814 41957 1 - . Parent=mRNA1 ENm002 gt csa exon 45695 45811 1 - . Parent=mRNA1 ENm002 gt csa exon 47219 47307 1 - . Parent=mRNA1 ENm002 gt csa exon 49407 49479 1 - . Parent=mRNA1 ENm002 gt csa exon 50829 50924 1 - . Parent=mRNA1 ENm002 gt csa exon 52003 52137 1 - . Parent=mRNA1 ENm002 gt csa exon 52545 52679 1 - . Parent=mRNA1 ENm002 gt csa exon 54172 54249 1 - . Parent=mRNA1 ENm002 gt csa exon 55927 56000 1 - . Parent=mRNA1 ENm002 gt csa exon 64686 64737 1 - . Parent=mRNA1 ENm002 gt csa exon 66101 66133 1 - . Parent=mRNA1 ENm002 gt csa exon 67327 67505 1 - . Parent=mRNA1 ENm002 gt csa exon 68084 68183 1 - . Parent=mRNA1 ENm002 gt csa exon 68686 68787 1 - . Parent=mRNA1 ENm002 gt csa exon 69379 69443 1 - . Parent=mRNA1 ENm002 gt csa exon 70132 70246 1 - . Parent=mRNA1 ENm002 gt csa exon 73310 73530 1 - . Parent=mRNA1 ENm002 gt csa exon 90784 90941 1 - . Parent=mRNA1 ### genometools-1.5.1/testdata/gt_csa_test_1.in000066400000000000000000000002071211610345200207230ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 10000 19000 . + . ID=gene2 ctg123 . gene 1000 9000 . + . ID=gene1 genometools-1.5.1/testdata/gt_encseq_eqlen_last_empty.fas000066400000000000000000000004311211610345200237430ustar00rootroot00000000000000>read_0 taaaatatttccattgtatcatagaagagt >read_1 gttatgcagttagctggctggatgaattgg >read_2 ggacgtcttcacgccggccacgtccatcga >read_3 tcctgtaatcctagcactttgggaggccaa >read_4 caccatcttggccagggtggtcttgaactc >read_5 cacagaaagctgttgcaaagaccaacagtg >read_6 cacggctgaacagcaggggctcctttgggg >read_7 genometools-1.5.1/testdata/gt_eval_ltr_prob_1.out000066400000000000000000000002071211610345200221510ustar00rootroot00000000000000LTR_retrotransposon sensitivity: 59.06% (75/127) (missing LTRs: 46) LTR_retrotransposon specificity: 82.42% (75/91) (wrong LTRs: 13) genometools-1.5.1/testdata/gt_eval_ltr_prob_1.prediction000066400000000000000000001330441211610345200235100ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq0 1 22217931 # 2L 2L release:3 length:22217931bp Assembled 2L chromosome arm sequence md5:9e624e9793414e1ea0654b86db5f8c1d seq0 LTRharvest repeat_region 16487 19458 . ? . ID=RepeatReg0 seq0 LTRharvest LTR_retrotransposon 16491 19454 . ? . ID=LTRret0;Parent=RepeatReg0 seq0 LTRharvest long_terminal_repeat 16491 16628 . ? . ID=LTR0;Parent=LTRret0 seq0 LTRharvest long_terminal_repeat 19312 19454 . ? . ID=LTR1;Parent=LTRret0 seq0 LTRharvest target_site_duplication 16487 16490 . ? . ID=TSD0;Parent=RepeatReg0 seq0 LTRharvest target_site_duplication 19455 19458 . ? . ID=TSD1;Parent=RepeatReg0 seq0 LTRharvest repeat_region 13835290 13844390 . ? . ID=RepeatReg1 seq0 LTRharvest LTR_retrotransposon 13835294 13844386 . ? . ID=LTRret1;Parent=RepeatReg1 seq0 LTRharvest long_terminal_repeat 13835294 13835721 . ? . ID=LTR2;Parent=LTRret1 seq0 LTRharvest long_terminal_repeat 13843955 13844386 . ? . ID=LTR3;Parent=LTRret1 seq0 LTRharvest target_site_duplication 13835290 13835293 . ? . ID=TSD2;Parent=RepeatReg1 seq0 LTRharvest target_site_duplication 13844387 13844390 . ? . ID=TSD3;Parent=RepeatReg1 seq0 LTRharvest repeat_region 360552 367102 . ? . ID=RepeatReg2 seq0 LTRharvest LTR_retrotransposon 360556 367098 . ? . ID=LTRret2;Parent=RepeatReg2 seq0 LTRharvest long_terminal_repeat 360556 361259 . ? . ID=LTR4;Parent=LTRret2 seq0 LTRharvest long_terminal_repeat 366393 367098 . ? . ID=LTR5;Parent=LTRret2 seq0 LTRharvest target_site_duplication 360552 360555 . ? . ID=TSD4;Parent=RepeatReg2 seq0 LTRharvest target_site_duplication 367099 367102 . ? . ID=TSD5;Parent=RepeatReg2 seq0 LTRharvest repeat_region 6428216 6437343 . ? . ID=RepeatReg3 seq0 LTRharvest LTR_retrotransposon 6428220 6437339 . ? . ID=LTRret3;Parent=RepeatReg3 seq0 LTRharvest long_terminal_repeat 6428220 6428664 . ? . ID=LTR6;Parent=LTRret3 seq0 LTRharvest long_terminal_repeat 6436901 6437339 . ? . ID=LTR7;Parent=LTRret3 seq0 LTRharvest target_site_duplication 6428216 6428219 . ? . ID=TSD6;Parent=RepeatReg3 seq0 LTRharvest target_site_duplication 6437340 6437343 . ? . ID=TSD7;Parent=RepeatReg3 seq0 LTRharvest repeat_region 22116552 22123211 . ? . ID=RepeatReg4 seq0 LTRharvest LTR_retrotransposon 22116556 22123207 . ? . ID=LTRret4;Parent=RepeatReg4 seq0 LTRharvest long_terminal_repeat 22116556 22116842 . ? . ID=LTR8;Parent=LTRret4 seq0 LTRharvest long_terminal_repeat 22122921 22123207 . ? . ID=LTR9;Parent=LTRret4 seq0 LTRharvest target_site_duplication 22116552 22116555 . ? . ID=TSD8;Parent=RepeatReg4 seq0 LTRharvest target_site_duplication 22123208 22123211 . ? . ID=TSD9;Parent=RepeatReg4 seq0 LTRharvest repeat_region 12770724 12778118 . ? . ID=RepeatReg5 seq0 LTRharvest LTR_retrotransposon 12770728 12778114 . ? . ID=LTRret5;Parent=RepeatReg5 seq0 LTRharvest long_terminal_repeat 12770728 12771386 . ? . ID=LTR10;Parent=LTRret5 seq0 LTRharvest long_terminal_repeat 12777456 12778114 . ? . ID=LTR11;Parent=LTRret5 seq0 LTRharvest target_site_duplication 12770724 12770727 . ? . ID=TSD10;Parent=RepeatReg5 seq0 LTRharvest target_site_duplication 12778115 12778118 . ? . ID=TSD11;Parent=RepeatReg5 seq0 LTRharvest repeat_region 4173892 4176474 . ? . ID=RepeatReg6 seq0 LTRharvest LTR_retrotransposon 4173896 4176470 . ? . ID=LTRret6;Parent=RepeatReg6 seq0 LTRharvest long_terminal_repeat 4173896 4174171 . ? . ID=LTR12;Parent=LTRret6 seq0 LTRharvest long_terminal_repeat 4176195 4176470 . ? . ID=LTR13;Parent=LTRret6 seq0 LTRharvest target_site_duplication 4173892 4173895 . ? . ID=TSD12;Parent=RepeatReg6 seq0 LTRharvest target_site_duplication 4176471 4176474 . ? . ID=TSD13;Parent=RepeatReg6 seq0 LTRharvest repeat_region 21524999 21531419 . ? . ID=RepeatReg7 seq0 LTRharvest LTR_retrotransposon 21525003 21531415 . ? . ID=LTRret7;Parent=RepeatReg7 seq0 LTRharvest long_terminal_repeat 21525003 21525278 . ? . ID=LTR14;Parent=LTRret7 seq0 LTRharvest long_terminal_repeat 21531140 21531415 . ? . ID=LTR15;Parent=LTRret7 seq0 LTRharvest target_site_duplication 21524999 21525002 . ? . ID=TSD14;Parent=RepeatReg7 seq0 LTRharvest target_site_duplication 21531416 21531419 . ? . ID=TSD15;Parent=RepeatReg7 seq0 LTRharvest repeat_region 22062539 22067386 . ? . ID=RepeatReg8 seq0 LTRharvest LTR_retrotransposon 22062543 22067382 . ? . ID=LTRret8;Parent=RepeatReg8 seq0 LTRharvest long_terminal_repeat 22062543 22062706 . ? . ID=LTR16;Parent=LTRret8 seq0 LTRharvest long_terminal_repeat 22067216 22067382 . ? . ID=LTR17;Parent=LTRret8 seq0 LTRharvest target_site_duplication 22062539 22062542 . ? . ID=TSD16;Parent=RepeatReg8 seq0 LTRharvest target_site_duplication 22067383 22067386 . ? . ID=TSD17;Parent=RepeatReg8 seq0 LTRharvest repeat_region 8586747 8593751 . ? . ID=RepeatReg9 seq0 LTRharvest LTR_retrotransposon 8586751 8593747 . ? . ID=LTRret9;Parent=RepeatReg9 seq0 LTRharvest long_terminal_repeat 8586751 8587164 . ? . ID=LTR18;Parent=LTRret9 seq0 LTRharvest long_terminal_repeat 8593334 8593747 . ? . ID=LTR19;Parent=LTRret9 seq0 LTRharvest target_site_duplication 8586747 8586750 . ? . ID=TSD18;Parent=RepeatReg9 seq0 LTRharvest target_site_duplication 8593748 8593751 . ? . ID=TSD19;Parent=RepeatReg9 seq0 LTRharvest repeat_region 16131871 16138875 . ? . ID=RepeatReg10 seq0 LTRharvest LTR_retrotransposon 16131875 16138871 . ? . ID=LTRret10;Parent=RepeatReg10 seq0 LTRharvest long_terminal_repeat 16131875 16132289 . ? . ID=LTR20;Parent=LTRret10 seq0 LTRharvest long_terminal_repeat 16138457 16138871 . ? . ID=LTR21;Parent=LTRret10 seq0 LTRharvest target_site_duplication 16131871 16131874 . ? . ID=TSD20;Parent=RepeatReg10 seq0 LTRharvest target_site_duplication 16138872 16138875 . ? . ID=TSD21;Parent=RepeatReg10 seq0 LTRharvest repeat_region 15696860 15705658 . ? . ID=RepeatReg11 seq0 LTRharvest LTR_retrotransposon 15696864 15705654 . ? . ID=LTRret11;Parent=RepeatReg11 seq0 LTRharvest long_terminal_repeat 15696864 15697522 . ? . ID=LTR22;Parent=LTRret11 seq0 LTRharvest long_terminal_repeat 15704996 15705654 . ? . ID=LTR23;Parent=LTRret11 seq0 LTRharvest target_site_duplication 15696860 15696863 . ? . ID=TSD22;Parent=RepeatReg11 seq0 LTRharvest target_site_duplication 15705655 15705658 . ? . ID=TSD23;Parent=RepeatReg11 seq0 LTRharvest repeat_region 12056252 12063254 . ? . ID=RepeatReg12 seq0 LTRharvest LTR_retrotransposon 12056256 12063250 . ? . ID=LTRret12;Parent=RepeatReg12 seq0 LTRharvest long_terminal_repeat 12056256 12056669 . ? . ID=LTR24;Parent=LTRret12 seq0 LTRharvest long_terminal_repeat 12062837 12063250 . ? . ID=LTR25;Parent=LTRret12 seq0 LTRharvest target_site_duplication 12056252 12056255 . ? . ID=TSD24;Parent=RepeatReg12 seq0 LTRharvest target_site_duplication 12063251 12063254 . ? . ID=TSD25;Parent=RepeatReg12 seq0 LTRharvest repeat_region 2558156 2564174 . ? . ID=RepeatReg13 seq0 LTRharvest LTR_retrotransposon 2558160 2564170 . ? . ID=LTRret13;Parent=RepeatReg13 seq0 LTRharvest long_terminal_repeat 2558160 2558573 . ? . ID=LTR26;Parent=LTRret13 seq0 LTRharvest long_terminal_repeat 2563757 2564170 . ? . ID=LTR27;Parent=LTRret13 seq0 LTRharvest target_site_duplication 2558156 2558159 . ? . ID=TSD26;Parent=RepeatReg13 seq0 LTRharvest target_site_duplication 2564171 2564174 . ? . ID=TSD27;Parent=RepeatReg13 seq0 LTRharvest repeat_region 2765218 2771748 . ? . ID=RepeatReg14 seq0 LTRharvest LTR_retrotransposon 2765222 2771744 . ? . ID=LTRret14;Parent=RepeatReg14 seq0 LTRharvest long_terminal_repeat 2765222 2765635 . ? . ID=LTR28;Parent=LTRret14 seq0 LTRharvest long_terminal_repeat 2771331 2771744 . ? . ID=LTR29;Parent=LTRret14 seq0 LTRharvest target_site_duplication 2765218 2765221 . ? . ID=TSD28;Parent=RepeatReg14 seq0 LTRharvest target_site_duplication 2771745 2771748 . ? . ID=TSD29;Parent=RepeatReg14 seq0 LTRharvest repeat_region 10869003 10876009 . ? . ID=RepeatReg15 seq0 LTRharvest LTR_retrotransposon 10869007 10876005 . ? . ID=LTRret15;Parent=RepeatReg15 seq0 LTRharvest long_terminal_repeat 10869007 10869420 . ? . ID=LTR30;Parent=LTRret15 seq0 LTRharvest long_terminal_repeat 10875592 10876005 . ? . ID=LTR31;Parent=LTRret15 seq0 LTRharvest target_site_duplication 10869003 10869006 . ? . ID=TSD30;Parent=RepeatReg15 seq0 LTRharvest target_site_duplication 10876006 10876009 . ? . ID=TSD31;Parent=RepeatReg15 seq0 LTRharvest repeat_region 15564545 15571547 . ? . ID=RepeatReg16 seq0 LTRharvest LTR_retrotransposon 15564549 15571543 . ? . ID=LTRret16;Parent=RepeatReg16 seq0 LTRharvest long_terminal_repeat 15564549 15564962 . ? . ID=LTR32;Parent=LTRret16 seq0 LTRharvest long_terminal_repeat 15571130 15571543 . ? . ID=LTR33;Parent=LTRret16 seq0 LTRharvest target_site_duplication 15564545 15564548 . ? . ID=TSD32;Parent=RepeatReg16 seq0 LTRharvest target_site_duplication 15571544 15571547 . ? . ID=TSD33;Parent=RepeatReg16 seq0 LTRharvest repeat_region 19125504 19132489 . ? . ID=RepeatReg17 seq0 LTRharvest LTR_retrotransposon 19125508 19132485 . ? . ID=LTRret17;Parent=RepeatReg17 seq0 LTRharvest long_terminal_repeat 19125508 19125921 . ? . ID=LTR34;Parent=LTRret17 seq0 LTRharvest long_terminal_repeat 19132072 19132485 . ? . ID=LTR35;Parent=LTRret17 seq0 LTRharvest target_site_duplication 19125504 19125507 . ? . ID=TSD34;Parent=RepeatReg17 seq0 LTRharvest target_site_duplication 19132486 19132489 . ? . ID=TSD35;Parent=RepeatReg17 seq0 LTRharvest repeat_region 7969362 7976286 . ? . ID=RepeatReg18 seq0 LTRharvest LTR_retrotransposon 7969366 7976282 . ? . ID=LTRret18;Parent=RepeatReg18 seq0 LTRharvest long_terminal_repeat 7969366 7969778 . ? . ID=LTR36;Parent=LTRret18 seq0 LTRharvest long_terminal_repeat 7975870 7976282 . ? . ID=LTR37;Parent=LTRret18 seq0 LTRharvest target_site_duplication 7969362 7969365 . ? . ID=TSD36;Parent=RepeatReg18 seq0 LTRharvest target_site_duplication 7976283 7976286 . ? . ID=TSD37;Parent=RepeatReg18 seq0 LTRharvest repeat_region 6355416 6358288 . ? . ID=RepeatReg19 seq0 LTRharvest LTR_retrotransposon 6355420 6358284 . ? . ID=LTRret19;Parent=RepeatReg19 seq0 LTRharvest long_terminal_repeat 6355420 6355695 . ? . ID=LTR38;Parent=LTRret19 seq0 LTRharvest long_terminal_repeat 6358000 6358284 . ? . ID=LTR39;Parent=LTRret19 seq0 LTRharvest target_site_duplication 6355416 6355419 . ? . ID=TSD38;Parent=RepeatReg19 seq0 LTRharvest target_site_duplication 6358285 6358288 . ? . ID=TSD39;Parent=RepeatReg19 seq0 LTRharvest repeat_region 2104731 2112343 . ? . ID=RepeatReg20 seq0 LTRharvest LTR_retrotransposon 2104735 2112339 . ? . ID=LTRret20;Parent=RepeatReg20 seq0 LTRharvest long_terminal_repeat 2104735 2105252 . ? . ID=LTR40;Parent=LTRret20 seq0 LTRharvest long_terminal_repeat 2111822 2112339 . ? . ID=LTR41;Parent=LTRret20 seq0 LTRharvest target_site_duplication 2104731 2104734 . ? . ID=TSD40;Parent=RepeatReg20 seq0 LTRharvest target_site_duplication 2112340 2112343 . ? . ID=TSD41;Parent=RepeatReg20 seq0 LTRharvest repeat_region 17122465 17130082 . ? . ID=RepeatReg21 seq0 LTRharvest LTR_retrotransposon 17122469 17130078 . ? . ID=LTRret21;Parent=RepeatReg21 seq0 LTRharvest long_terminal_repeat 17122469 17122986 . ? . ID=LTR42;Parent=LTRret21 seq0 LTRharvest long_terminal_repeat 17129561 17130078 . ? . ID=LTR43;Parent=LTRret21 seq0 LTRharvest target_site_duplication 17122465 17122468 . ? . ID=TSD42;Parent=RepeatReg21 seq0 LTRharvest target_site_duplication 17130079 17130082 . ? . ID=TSD43;Parent=RepeatReg21 seq0 LTRharvest repeat_region 19635759 19643375 . ? . ID=RepeatReg22 seq0 LTRharvest LTR_retrotransposon 19635763 19643371 . ? . ID=LTRret22;Parent=RepeatReg22 seq0 LTRharvest long_terminal_repeat 19635763 19636280 . ? . ID=LTR44;Parent=LTRret22 seq0 LTRharvest long_terminal_repeat 19642854 19643371 . ? . ID=LTR45;Parent=LTRret22 seq0 LTRharvest target_site_duplication 19635759 19635762 . ? . ID=TSD44;Parent=RepeatReg22 seq0 LTRharvest target_site_duplication 19643372 19643375 . ? . ID=TSD45;Parent=RepeatReg22 seq0 LTRharvest repeat_region 4654445 4661975 . ? . ID=RepeatReg23 seq0 LTRharvest LTR_retrotransposon 4654449 4661971 . ? . ID=LTRret23;Parent=RepeatReg23 seq0 LTRharvest long_terminal_repeat 4654449 4654966 . ? . ID=LTR46;Parent=LTRret23 seq0 LTRharvest long_terminal_repeat 4661454 4661971 . ? . ID=LTR47;Parent=LTRret23 seq0 LTRharvest target_site_duplication 4654445 4654448 . ? . ID=TSD46;Parent=RepeatReg23 seq0 LTRharvest target_site_duplication 4661972 4661975 . ? . ID=TSD47;Parent=RepeatReg23 seq0 LTRharvest repeat_region 10585302 10592914 . ? . ID=RepeatReg24 seq0 LTRharvest LTR_retrotransposon 10585306 10592910 . ? . ID=LTRret24;Parent=RepeatReg24 seq0 LTRharvest long_terminal_repeat 10585306 10585823 . ? . ID=LTR48;Parent=LTRret24 seq0 LTRharvest long_terminal_repeat 10592393 10592910 . ? . ID=LTR49;Parent=LTRret24 seq0 LTRharvest target_site_duplication 10585302 10585305 . ? . ID=TSD48;Parent=RepeatReg24 seq0 LTRharvest target_site_duplication 10592911 10592914 . ? . ID=TSD49;Parent=RepeatReg24 seq0 LTRharvest repeat_region 3244114 3251629 . ? . ID=RepeatReg25 seq0 LTRharvest LTR_retrotransposon 3244118 3251625 . ? . ID=LTRret25;Parent=RepeatReg25 seq0 LTRharvest long_terminal_repeat 3244118 3244521 . ? . ID=LTR50;Parent=LTRret25 seq0 LTRharvest long_terminal_repeat 3251218 3251625 . ? . ID=LTR51;Parent=LTRret25 seq0 LTRharvest target_site_duplication 3244114 3244117 . ? . ID=TSD50;Parent=RepeatReg25 seq0 LTRharvest target_site_duplication 3251626 3251629 . ? . ID=TSD51;Parent=RepeatReg25 seq0 LTRharvest repeat_region 14962533 14970064 . ? . ID=RepeatReg26 seq0 LTRharvest LTR_retrotransposon 14962537 14970060 . ? . ID=LTRret26;Parent=RepeatReg26 seq0 LTRharvest long_terminal_repeat 14962537 14963054 . ? . ID=LTR52;Parent=LTRret26 seq0 LTRharvest long_terminal_repeat 14969543 14970060 . ? . ID=LTR53;Parent=LTRret26 seq0 LTRharvest target_site_duplication 14962533 14962536 . ? . ID=TSD52;Parent=RepeatReg26 seq0 LTRharvest target_site_duplication 14970061 14970064 . ? . ID=TSD53;Parent=RepeatReg26 seq0 LTRharvest repeat_region 20710029 20717869 . ? . ID=RepeatReg27 seq0 LTRharvest LTR_retrotransposon 20710033 20717865 . ? . ID=LTRret27;Parent=RepeatReg27 seq0 LTRharvest long_terminal_repeat 20710033 20710462 . ? . ID=LTR54;Parent=LTRret27 seq0 LTRharvest long_terminal_repeat 20717416 20717865 . ? . ID=LTR55;Parent=LTRret27 seq0 LTRharvest target_site_duplication 20710029 20710032 . ? . ID=TSD54;Parent=RepeatReg27 seq0 LTRharvest target_site_duplication 20717866 20717869 . ? . ID=TSD55;Parent=RepeatReg27 seq0 LTRharvest repeat_region 12547242 12554320 . ? . ID=RepeatReg28 seq0 LTRharvest LTR_retrotransposon 12547246 12554316 . ? . ID=LTRret28;Parent=RepeatReg28 seq0 LTRharvest long_terminal_repeat 12547246 12547512 . ? . ID=LTR56;Parent=LTRret28 seq0 LTRharvest long_terminal_repeat 12554050 12554316 . ? . ID=LTR57;Parent=LTRret28 seq0 LTRharvest target_site_duplication 12547242 12547245 . ? . ID=TSD56;Parent=RepeatReg28 seq0 LTRharvest target_site_duplication 12554317 12554320 . ? . ID=TSD57;Parent=RepeatReg28 seq0 LTRharvest repeat_region 6983714 6990783 . ? . ID=RepeatReg29 seq0 LTRharvest LTR_retrotransposon 6983718 6990779 . ? . ID=LTRret29;Parent=RepeatReg29 seq0 LTRharvest long_terminal_repeat 6983718 6983983 . ? . ID=LTR58;Parent=LTRret29 seq0 LTRharvest long_terminal_repeat 6990514 6990779 . ? . ID=LTR59;Parent=LTRret29 seq0 LTRharvest target_site_duplication 6983714 6983717 . ? . ID=TSD58;Parent=RepeatReg29 seq0 LTRharvest target_site_duplication 6990780 6990783 . ? . ID=TSD59;Parent=RepeatReg29 seq0 LTRharvest repeat_region 8715396 8723725 . ? . ID=RepeatReg30 seq0 LTRharvest LTR_retrotransposon 8715400 8723721 . ? . ID=LTRret30;Parent=RepeatReg30 seq0 LTRharvest long_terminal_repeat 8715400 8715818 . ? . ID=LTR60;Parent=LTRret30 seq0 LTRharvest long_terminal_repeat 8723298 8723721 . ? . ID=LTR61;Parent=LTRret30 seq0 LTRharvest target_site_duplication 8715396 8715399 . ? . ID=TSD60;Parent=RepeatReg30 seq0 LTRharvest target_site_duplication 8723722 8723725 . ? . ID=TSD61;Parent=RepeatReg30 seq0 LTRharvest repeat_region 13504460 13509716 . ? . ID=RepeatReg31 seq0 LTRharvest LTR_retrotransposon 13504464 13509712 . ? . ID=LTRret31;Parent=RepeatReg31 seq0 LTRharvest long_terminal_repeat 13504464 13504793 . ? . ID=LTR62;Parent=LTRret31 seq0 LTRharvest long_terminal_repeat 13509383 13509712 . ? . ID=LTR63;Parent=LTRret31 seq0 LTRharvest target_site_duplication 13504460 13504463 . ? . ID=TSD62;Parent=RepeatReg31 seq0 LTRharvest target_site_duplication 13509713 13509716 . ? . ID=TSD63;Parent=RepeatReg31 seq0 LTRharvest repeat_region 9966186 9973255 . ? . ID=RepeatReg32 seq0 LTRharvest LTR_retrotransposon 9966190 9973251 . ? . ID=LTRret32;Parent=RepeatReg32 seq0 LTRharvest long_terminal_repeat 9966190 9966458 . ? . ID=LTR64;Parent=LTRret32 seq0 LTRharvest long_terminal_repeat 9972986 9973251 . ? . ID=LTR65;Parent=LTRret32 seq0 LTRharvest target_site_duplication 9966186 9966189 . ? . ID=TSD64;Parent=RepeatReg32 seq0 LTRharvest target_site_duplication 9973252 9973255 . ? . ID=TSD65;Parent=RepeatReg32 seq0 LTRharvest repeat_region 16490098 16497162 . ? . ID=RepeatReg33 seq0 LTRharvest LTR_retrotransposon 16490102 16497158 . ? . ID=LTRret33;Parent=RepeatReg33 seq0 LTRharvest long_terminal_repeat 16490102 16490367 . ? . ID=LTR66;Parent=LTRret33 seq0 LTRharvest long_terminal_repeat 16496893 16497158 . ? . ID=LTR67;Parent=LTRret33 seq0 LTRharvest target_site_duplication 16490098 16490101 . ? . ID=TSD66;Parent=RepeatReg33 seq0 LTRharvest target_site_duplication 16497159 16497162 . ? . ID=TSD67;Parent=RepeatReg33 seq0 LTRharvest repeat_region 20377601 20382639 . ? . ID=RepeatReg34 seq0 LTRharvest LTR_retrotransposon 20377605 20382635 . ? . ID=LTRret34;Parent=RepeatReg34 seq0 LTRharvest long_terminal_repeat 20377605 20377883 . ? . ID=LTR68;Parent=LTRret34 seq0 LTRharvest long_terminal_repeat 20382359 20382635 . ? . ID=LTR69;Parent=LTRret34 seq0 LTRharvest target_site_duplication 20377601 20377604 . ? . ID=TSD68;Parent=RepeatReg34 seq0 LTRharvest target_site_duplication 20382636 20382639 . ? . ID=TSD69;Parent=RepeatReg34 seq0 LTRharvest repeat_region 19984001 19989027 . ? . ID=RepeatReg35 seq0 LTRharvest LTR_retrotransposon 19984005 19989023 . ? . ID=LTRret35;Parent=RepeatReg35 seq0 LTRharvest long_terminal_repeat 19984005 19984275 . ? . ID=LTR70;Parent=LTRret35 seq0 LTRharvest long_terminal_repeat 19988751 19989023 . ? . ID=LTR71;Parent=LTRret35 seq0 LTRharvest target_site_duplication 19984001 19984004 . ? . ID=TSD70;Parent=RepeatReg35 seq0 LTRharvest target_site_duplication 19989024 19989027 . ? . ID=TSD71;Parent=RepeatReg35 seq0 LTRharvest repeat_region 22102767 22105689 . ? . ID=RepeatReg36 seq0 LTRharvest LTR_retrotransposon 22102771 22105685 . ? . ID=LTRret36;Parent=RepeatReg36 seq0 LTRharvest long_terminal_repeat 22102771 22102903 . ? . ID=LTR72;Parent=LTRret36 seq0 LTRharvest long_terminal_repeat 22105549 22105685 . ? . ID=LTR73;Parent=LTRret36 seq0 LTRharvest target_site_duplication 22102767 22102770 . ? . ID=TSD72;Parent=RepeatReg36 seq0 LTRharvest target_site_duplication 22105686 22105689 . ? . ID=TSD73;Parent=RepeatReg36 seq0 LTRharvest repeat_region 21486364 21489620 . ? . ID=RepeatReg37 seq0 LTRharvest LTR_retrotransposon 21486368 21489616 . ? . ID=LTRret37;Parent=RepeatReg37 seq0 LTRharvest long_terminal_repeat 21486368 21486720 . ? . ID=LTR74;Parent=LTRret37 seq0 LTRharvest long_terminal_repeat 21489269 21489616 . ? . ID=LTR75;Parent=LTRret37 seq0 LTRharvest target_site_duplication 21486364 21486367 . ? . ID=TSD74;Parent=RepeatReg37 seq0 LTRharvest target_site_duplication 21489617 21489620 . ? . ID=TSD75;Parent=RepeatReg37 seq0 LTRharvest repeat_region 5165909 5172357 . ? . ID=RepeatReg38 seq0 LTRharvest LTR_retrotransposon 5165913 5172353 . ? . ID=LTRret38;Parent=RepeatReg38 seq0 LTRharvest long_terminal_repeat 5165913 5166527 . ? . ID=LTR76;Parent=LTRret38 seq0 LTRharvest long_terminal_repeat 5171742 5172353 . ? . ID=LTR77;Parent=LTRret38 seq0 LTRharvest target_site_duplication 5165909 5165912 . ? . ID=TSD76;Parent=RepeatReg38 seq0 LTRharvest target_site_duplication 5172354 5172357 . ? . ID=TSD77;Parent=RepeatReg38 seq0 LTRharvest repeat_region 21899579 21905022 . ? . ID=RepeatReg39 seq0 LTRharvest LTR_retrotransposon 21899583 21905018 . ? . ID=LTRret39;Parent=RepeatReg39 seq0 LTRharvest long_terminal_repeat 21899583 21900233 . ? . ID=LTR78;Parent=LTRret39 seq0 LTRharvest long_terminal_repeat 21904363 21905018 . ? . ID=LTR79;Parent=LTRret39 seq0 LTRharvest target_site_duplication 21899579 21899582 . ? . ID=TSD78;Parent=RepeatReg39 seq0 LTRharvest target_site_duplication 21905019 21905022 . ? . ID=TSD79;Parent=RepeatReg39 seq0 LTRharvest repeat_region 5 5205 . ? . ID=RepeatReg40 seq0 LTRharvest LTR_retrotransposon 9 5201 . ? . ID=LTRret40;Parent=RepeatReg40 seq0 LTRharvest long_terminal_repeat 9 627 . ? . ID=LTR80;Parent=LTRret40 seq0 LTRharvest long_terminal_repeat 4581 5201 . ? . ID=LTR81;Parent=LTRret40 seq0 LTRharvest target_site_duplication 5 8 . ? . ID=TSD80;Parent=RepeatReg40 seq0 LTRharvest target_site_duplication 5202 5205 . ? . ID=TSD81;Parent=RepeatReg40 seq0 LTRharvest repeat_region 16827055 16831986 . ? . ID=RepeatReg41 seq0 LTRharvest LTR_retrotransposon 16827059 16831982 . ? . ID=LTRret41;Parent=RepeatReg41 seq0 LTRharvest long_terminal_repeat 16827059 16827383 . ? . ID=LTR82;Parent=LTRret41 seq0 LTRharvest long_terminal_repeat 16831664 16831982 . ? . ID=LTR83;Parent=LTRret41 seq0 LTRharvest target_site_duplication 16827055 16827058 . ? . ID=TSD82;Parent=RepeatReg41 seq0 LTRharvest target_site_duplication 16831983 16831986 . ? . ID=TSD83;Parent=RepeatReg41 seq0 LTRharvest repeat_region 22209725 22216962 . ? . ID=RepeatReg42 seq0 LTRharvest LTR_retrotransposon 22209729 22216958 . ? . ID=LTRret42;Parent=RepeatReg42 seq0 LTRharvest long_terminal_repeat 22209729 22210140 . ? . ID=LTR84;Parent=LTRret42 seq0 LTRharvest long_terminal_repeat 22216538 22216958 . ? . ID=LTR85;Parent=LTRret42 seq0 LTRharvest target_site_duplication 22209725 22209728 . ? . ID=TSD84;Parent=RepeatReg42 seq0 LTRharvest target_site_duplication 22216959 22216962 . ? . ID=TSD85;Parent=RepeatReg42 seq0 LTRharvest repeat_region 21169130 21172063 . ? . ID=RepeatReg43 seq0 LTRharvest LTR_retrotransposon 21169134 21172059 . ? . ID=LTRret43;Parent=RepeatReg43 seq0 LTRharvest long_terminal_repeat 21169134 21169738 . ? . ID=LTR86;Parent=LTRret43 seq0 LTRharvest long_terminal_repeat 21171448 21172059 . ? . ID=LTR87;Parent=LTRret43 seq0 LTRharvest target_site_duplication 21169130 21169133 . ? . ID=TSD86;Parent=RepeatReg43 seq0 LTRharvest target_site_duplication 21172060 21172063 . ? . ID=TSD87;Parent=RepeatReg43 seq0 LTRharvest repeat_region 2286659 2291814 . ? . ID=RepeatReg44 seq0 LTRharvest LTR_retrotransposon 2286663 2291810 . ? . ID=LTRret44;Parent=RepeatReg44 seq0 LTRharvest long_terminal_repeat 2286663 2286939 . ? . ID=LTR88;Parent=LTRret44 seq0 LTRharvest long_terminal_repeat 2291534 2291810 . ? . ID=LTR89;Parent=LTRret44 seq0 LTRharvest target_site_duplication 2286659 2286662 . ? . ID=TSD88;Parent=RepeatReg44 seq0 LTRharvest target_site_duplication 2291811 2291814 . ? . ID=TSD89;Parent=RepeatReg44 seq0 LTRharvest repeat_region 14782014 14787167 . ? . ID=RepeatReg45 seq0 LTRharvest LTR_retrotransposon 14782018 14787163 . ? . ID=LTRret45;Parent=RepeatReg45 seq0 LTRharvest long_terminal_repeat 14782018 14782294 . ? . ID=LTR90;Parent=LTRret45 seq0 LTRharvest long_terminal_repeat 14786884 14787163 . ? . ID=LTR91;Parent=LTRret45 seq0 LTRharvest target_site_duplication 14782014 14782017 . ? . ID=TSD90;Parent=RepeatReg45 seq0 LTRharvest target_site_duplication 14787164 14787167 . ? . ID=TSD91;Parent=RepeatReg45 seq0 LTRharvest repeat_region 11552558 11557712 . ? . ID=RepeatReg46 seq0 LTRharvest LTR_retrotransposon 11552562 11557708 . ? . ID=LTRret46;Parent=RepeatReg46 seq0 LTRharvest long_terminal_repeat 11552562 11552838 . ? . ID=LTR92;Parent=LTRret46 seq0 LTRharvest long_terminal_repeat 11557432 11557708 . ? . ID=LTR93;Parent=LTRret46 seq0 LTRharvest target_site_duplication 11552558 11552561 . ? . ID=TSD92;Parent=RepeatReg46 seq0 LTRharvest target_site_duplication 11557709 11557712 . ? . ID=TSD93;Parent=RepeatReg46 seq0 LTRharvest repeat_region 11190070 11193184 . ? . ID=RepeatReg47 seq0 LTRharvest LTR_retrotransposon 11190074 11193180 . ? . ID=LTRret47;Parent=RepeatReg47 seq0 LTRharvest long_terminal_repeat 11190074 11190381 . ? . ID=LTR94;Parent=LTRret47 seq0 LTRharvest long_terminal_repeat 11192895 11193180 . ? . ID=LTR95;Parent=LTRret47 seq0 LTRharvest target_site_duplication 11190070 11190073 . ? . ID=TSD94;Parent=RepeatReg47 seq0 LTRharvest target_site_duplication 11193181 11193184 . ? . ID=TSD95;Parent=RepeatReg47 seq0 LTRharvest repeat_region 21010922 21019163 . ? . ID=RepeatReg48 seq0 LTRharvest LTR_retrotransposon 21010926 21019159 . ? . ID=LTRret48;Parent=RepeatReg48 seq0 LTRharvest long_terminal_repeat 21010926 21011356 . ? . ID=LTR96;Parent=LTRret48 seq0 LTRharvest long_terminal_repeat 21018739 21019159 . ? . ID=LTR97;Parent=LTRret48 seq0 LTRharvest target_site_duplication 21010922 21010925 . ? . ID=TSD96;Parent=RepeatReg48 seq0 LTRharvest target_site_duplication 21019160 21019163 . ? . ID=TSD97;Parent=RepeatReg48 seq0 LTRharvest repeat_region 22162396 22167448 . ? . ID=RepeatReg49 seq0 LTRharvest LTR_retrotransposon 22162400 22167444 . ? . ID=LTRret49;Parent=RepeatReg49 seq0 LTRharvest long_terminal_repeat 22162400 22162655 . ? . ID=LTR98;Parent=LTRret49 seq0 LTRharvest long_terminal_repeat 22167177 22167444 . ? . ID=LTR99;Parent=LTRret49 seq0 LTRharvest target_site_duplication 22162396 22162399 . ? . ID=TSD98;Parent=RepeatReg49 seq0 LTRharvest target_site_duplication 22167445 22167448 . ? . ID=TSD99;Parent=RepeatReg49 seq0 LTRharvest repeat_region 7727082 7733685 . ? . ID=RepeatReg50 seq0 LTRharvest LTR_retrotransposon 7727086 7733681 . ? . ID=LTRret50;Parent=RepeatReg50 seq0 LTRharvest long_terminal_repeat 7727086 7727530 . ? . ID=LTR100;Parent=LTRret50 seq0 LTRharvest long_terminal_repeat 7733234 7733681 . ? . ID=LTR101;Parent=LTRret50 seq0 LTRharvest target_site_duplication 7727082 7727085 . ? . ID=TSD100;Parent=RepeatReg50 seq0 LTRharvest target_site_duplication 7733682 7733685 . ? . ID=TSD101;Parent=RepeatReg50 seq0 LTRharvest repeat_region 1680693 1688108 . ? . ID=RepeatReg51 seq0 LTRharvest LTR_retrotransposon 1680697 1688104 . ? . ID=LTRret51;Parent=RepeatReg51 seq0 LTRharvest long_terminal_repeat 1680697 1681098 . ? . ID=LTR102;Parent=LTRret51 seq0 LTRharvest long_terminal_repeat 1687704 1688104 . ? . ID=LTR103;Parent=LTRret51 seq0 LTRharvest target_site_duplication 1680693 1680696 . ? . ID=TSD102;Parent=RepeatReg51 seq0 LTRharvest target_site_duplication 1688105 1688108 . ? . ID=TSD103;Parent=RepeatReg51 seq0 LTRharvest repeat_region 15424187 15431605 . ? . ID=RepeatReg52 seq0 LTRharvest LTR_retrotransposon 15424191 15431601 . ? . ID=LTRret52;Parent=RepeatReg52 seq0 LTRharvest long_terminal_repeat 15424191 15424595 . ? . ID=LTR104;Parent=LTRret52 seq0 LTRharvest long_terminal_repeat 15431201 15431601 . ? . ID=LTR105;Parent=LTRret52 seq0 LTRharvest target_site_duplication 15424187 15424190 . ? . ID=TSD104;Parent=RepeatReg52 seq0 LTRharvest target_site_duplication 15431602 15431605 . ? . ID=TSD105;Parent=RepeatReg52 seq0 LTRharvest repeat_region 11885842 11889161 . ? . ID=RepeatReg53 seq0 LTRharvest LTR_retrotransposon 11885846 11889157 . ? . ID=LTRret53;Parent=RepeatReg53 seq0 LTRharvest long_terminal_repeat 11885846 11886024 . ? . ID=LTR106;Parent=LTRret53 seq0 LTRharvest long_terminal_repeat 11888986 11889157 . ? . ID=LTR107;Parent=LTRret53 seq0 LTRharvest target_site_duplication 11885842 11885845 . ? . ID=TSD106;Parent=RepeatReg53 seq0 LTRharvest target_site_duplication 11889158 11889161 . ? . ID=TSD107;Parent=RepeatReg53 seq0 LTRharvest repeat_region 1221846 1229262 . ? . ID=RepeatReg54 seq0 LTRharvest LTR_retrotransposon 1221850 1229258 . ? . ID=LTRret54;Parent=RepeatReg54 seq0 LTRharvest long_terminal_repeat 1221850 1222248 . ? . ID=LTR108;Parent=LTRret54 seq0 LTRharvest long_terminal_repeat 1228859 1229258 . ? . ID=LTR109;Parent=LTRret54 seq0 LTRharvest target_site_duplication 1221846 1221849 . ? . ID=TSD108;Parent=RepeatReg54 seq0 LTRharvest target_site_duplication 1229259 1229262 . ? . ID=TSD109;Parent=RepeatReg54 seq0 LTRharvest repeat_region 11702429 11709847 . ? . ID=RepeatReg55 seq0 LTRharvest LTR_retrotransposon 11702433 11709843 . ? . ID=LTRret55;Parent=RepeatReg55 seq0 LTRharvest long_terminal_repeat 11702433 11702831 . ? . ID=LTR110;Parent=LTRret55 seq0 LTRharvest long_terminal_repeat 11709444 11709843 . ? . ID=LTR111;Parent=LTRret55 seq0 LTRharvest target_site_duplication 11702429 11702432 . ? . ID=TSD110;Parent=RepeatReg55 seq0 LTRharvest target_site_duplication 11709844 11709847 . ? . ID=TSD111;Parent=RepeatReg55 seq0 LTRharvest repeat_region 19325620 19333044 . ? . ID=RepeatReg56 seq0 LTRharvest LTR_retrotransposon 19325624 19333040 . ? . ID=LTRret56;Parent=RepeatReg56 seq0 LTRharvest long_terminal_repeat 19325624 19326024 . ? . ID=LTR112;Parent=LTRret56 seq0 LTRharvest long_terminal_repeat 19332639 19333040 . ? . ID=LTR113;Parent=LTRret56 seq0 LTRharvest target_site_duplication 19325620 19325623 . ? . ID=TSD112;Parent=RepeatReg56 seq0 LTRharvest target_site_duplication 19333041 19333044 . ? . ID=TSD113;Parent=RepeatReg56 seq0 LTRharvest repeat_region 22148779 22151273 . ? . ID=RepeatReg57 seq0 LTRharvest LTR_retrotransposon 22148784 22151268 . ? . ID=LTRret57;Parent=RepeatReg57 seq0 LTRharvest long_terminal_repeat 22148784 22148988 . ? . ID=LTR114;Parent=LTRret57 seq0 LTRharvest long_terminal_repeat 22151064 22151268 . ? . ID=LTR115;Parent=LTRret57 seq0 LTRharvest target_site_duplication 22148779 22148783 . ? . ID=TSD114;Parent=RepeatReg57 seq0 LTRharvest target_site_duplication 22151269 22151273 . ? . ID=TSD115;Parent=RepeatReg57 seq0 LTRharvest repeat_region 14624776 14633889 . ? . ID=RepeatReg58 seq0 LTRharvest LTR_retrotransposon 14624780 14633885 . ? . ID=LTRret58;Parent=RepeatReg58 seq0 LTRharvest long_terminal_repeat 14624780 14625208 . ? . ID=LTR116;Parent=LTRret58 seq0 LTRharvest long_terminal_repeat 14633455 14633885 . ? . ID=LTR117;Parent=LTRret58 seq0 LTRharvest target_site_duplication 14624776 14624779 . ? . ID=TSD116;Parent=RepeatReg58 seq0 LTRharvest target_site_duplication 14633886 14633889 . ? . ID=TSD117;Parent=RepeatReg58 seq0 LTRharvest repeat_region 21814824 21823958 . ? . ID=RepeatReg59 seq0 LTRharvest LTR_retrotransposon 21814828 21823954 . ? . ID=LTRret59;Parent=RepeatReg59 seq0 LTRharvest long_terminal_repeat 21814828 21815279 . ? . ID=LTR118;Parent=LTRret59 seq0 LTRharvest long_terminal_repeat 21823492 21823954 . ? . ID=LTR119;Parent=LTRret59 seq0 LTRharvest target_site_duplication 21814824 21814827 . ? . ID=TSD118;Parent=RepeatReg59 seq0 LTRharvest target_site_duplication 21823955 21823958 . ? . ID=TSD119;Parent=RepeatReg59 seq0 LTRharvest repeat_region 8992561 9000022 . ? . ID=RepeatReg60 seq0 LTRharvest LTR_retrotransposon 8992566 9000017 . ? . ID=LTRret60;Parent=RepeatReg60 seq0 LTRharvest long_terminal_repeat 8992566 8992993 . ? . ID=LTR120;Parent=LTRret60 seq0 LTRharvest long_terminal_repeat 8999590 9000017 . ? . ID=LTR121;Parent=LTRret60 seq0 LTRharvest target_site_duplication 8992561 8992565 . ? . ID=TSD120;Parent=RepeatReg60 seq0 LTRharvest target_site_duplication 9000018 9000022 . ? . ID=TSD121;Parent=RepeatReg60 seq0 LTRharvest repeat_region 688634 697625 . ? . ID=RepeatReg61 seq0 LTRharvest LTR_retrotransposon 688639 697620 . ? . ID=LTRret61;Parent=RepeatReg61 seq0 LTRharvest long_terminal_repeat 688639 689066 . ? . ID=LTR122;Parent=LTRret61 seq0 LTRharvest long_terminal_repeat 697193 697620 . ? . ID=LTR123;Parent=LTRret61 seq0 LTRharvest target_site_duplication 688634 688638 . ? . ID=TSD122;Parent=RepeatReg61 seq0 LTRharvest target_site_duplication 697621 697625 . ? . ID=TSD123;Parent=RepeatReg61 seq0 LTRharvest repeat_region 5819971 5828943 . ? . ID=RepeatReg62 seq0 LTRharvest LTR_retrotransposon 5819975 5828939 . ? . ID=LTRret62;Parent=RepeatReg62 seq0 LTRharvest long_terminal_repeat 5819975 5820419 . ? . ID=LTR124;Parent=LTRret62 seq0 LTRharvest long_terminal_repeat 5828500 5828939 . ? . ID=LTR125;Parent=LTRret62 seq0 LTRharvest target_site_duplication 5819971 5819974 . ? . ID=TSD124;Parent=RepeatReg62 seq0 LTRharvest target_site_duplication 5828940 5828943 . ? . ID=TSD125;Parent=RepeatReg62 seq0 LTRharvest repeat_region 998433 1007489 . ? . ID=RepeatReg63 seq0 LTRharvest LTR_retrotransposon 998437 1007485 . ? . ID=LTRret63;Parent=RepeatReg63 seq0 LTRharvest long_terminal_repeat 998437 998872 . ? . ID=LTR126;Parent=LTRret63 seq0 LTRharvest long_terminal_repeat 1007049 1007485 . ? . ID=LTR127;Parent=LTRret63 seq0 LTRharvest target_site_duplication 998433 998436 . ? . ID=TSD126;Parent=RepeatReg63 seq0 LTRharvest target_site_duplication 1007486 1007489 . ? . ID=TSD127;Parent=RepeatReg63 seq0 LTRharvest repeat_region 19681670 19690756 . ? . ID=RepeatReg64 seq0 LTRharvest LTR_retrotransposon 19681674 19690752 . ? . ID=LTRret64;Parent=RepeatReg64 seq0 LTRharvest long_terminal_repeat 19681674 19682102 . ? . ID=LTR128;Parent=LTRret64 seq0 LTRharvest long_terminal_repeat 19690311 19690752 . ? . ID=LTR129;Parent=LTRret64 seq0 LTRharvest target_site_duplication 19681670 19681673 . ? . ID=TSD128;Parent=RepeatReg64 seq0 LTRharvest target_site_duplication 19690753 19690756 . ? . ID=TSD129;Parent=RepeatReg64 seq0 LTRharvest repeat_region 10148766 10156202 . ? . ID=RepeatReg65 seq0 LTRharvest LTR_retrotransposon 10148770 10156198 . ? . ID=LTRret65;Parent=RepeatReg65 seq0 LTRharvest long_terminal_repeat 10148770 10149189 . ? . ID=LTR130;Parent=LTRret65 seq0 LTRharvest long_terminal_repeat 10155776 10156198 . ? . ID=LTR131;Parent=LTRret65 seq0 LTRharvest target_site_duplication 10148766 10148769 . ? . ID=TSD130;Parent=RepeatReg65 seq0 LTRharvest target_site_duplication 10156199 10156202 . ? . ID=TSD131;Parent=RepeatReg65 seq0 LTRharvest repeat_region 347937 355400 . ? . ID=RepeatReg66 seq0 LTRharvest LTR_retrotransposon 347941 355396 . ? . ID=LTRret66;Parent=RepeatReg66 seq0 LTRharvest long_terminal_repeat 347941 348364 . ? . ID=LTR132;Parent=LTRret66 seq0 LTRharvest long_terminal_repeat 354968 355396 . ? . ID=LTR133;Parent=LTRret66 seq0 LTRharvest target_site_duplication 347937 347940 . ? . ID=TSD132;Parent=RepeatReg66 seq0 LTRharvest target_site_duplication 355397 355400 . ? . ID=TSD133;Parent=RepeatReg66 seq0 LTRharvest repeat_region 20272953 20280372 . ? . ID=RepeatReg67 seq0 LTRharvest LTR_retrotransposon 20272957 20280368 . ? . ID=LTRret67;Parent=RepeatReg67 seq0 LTRharvest long_terminal_repeat 20272957 20273355 . ? . ID=LTR134;Parent=LTRret67 seq0 LTRharvest long_terminal_repeat 20279970 20280368 . ? . ID=LTR135;Parent=LTRret67 seq0 LTRharvest target_site_duplication 20272953 20272956 . ? . ID=TSD134;Parent=RepeatReg67 seq0 LTRharvest target_site_duplication 20280369 20280372 . ? . ID=TSD135;Parent=RepeatReg67 seq0 LTRharvest repeat_region 12922771 12930188 . ? . ID=RepeatReg68 seq0 LTRharvest LTR_retrotransposon 12922775 12930184 . ? . ID=LTRret68;Parent=RepeatReg68 seq0 LTRharvest long_terminal_repeat 12922775 12923173 . ? . ID=LTR136;Parent=LTRret68 seq0 LTRharvest long_terminal_repeat 12929786 12930184 . ? . ID=LTR137;Parent=LTRret68 seq0 LTRharvest target_site_duplication 12922771 12922774 . ? . ID=TSD136;Parent=RepeatReg68 seq0 LTRharvest target_site_duplication 12930185 12930188 . ? . ID=TSD137;Parent=RepeatReg68 seq0 LTRharvest repeat_region 11529506 11536858 . ? . ID=RepeatReg69 seq0 LTRharvest LTR_retrotransposon 11529510 11536854 . ? . ID=LTRret69;Parent=RepeatReg69 seq0 LTRharvest long_terminal_repeat 11529510 11530017 . ? . ID=LTR138;Parent=LTRret69 seq0 LTRharvest long_terminal_repeat 11536348 11536854 . ? . ID=LTR139;Parent=LTRret69 seq0 LTRharvest target_site_duplication 11529506 11529509 . ? . ID=TSD138;Parent=RepeatReg69 seq0 LTRharvest target_site_duplication 11536855 11536858 . ? . ID=TSD139;Parent=RepeatReg69 seq0 LTRharvest repeat_region 21387100 21394156 . ? . ID=RepeatReg70 seq0 LTRharvest LTR_retrotransposon 21387104 21394152 . ? . ID=LTRret70;Parent=RepeatReg70 seq0 LTRharvest long_terminal_repeat 21387104 21387878 . ? . ID=LTR140;Parent=LTRret70 seq0 LTRharvest long_terminal_repeat 21393380 21394152 . ? . ID=LTR141;Parent=LTRret70 seq0 LTRharvest target_site_duplication 21387100 21387103 . ? . ID=TSD140;Parent=RepeatReg70 seq0 LTRharvest target_site_duplication 21394153 21394156 . ? . ID=TSD141;Parent=RepeatReg70 seq0 LTRharvest repeat_region 6869036 6875208 . ? . ID=RepeatReg71 seq0 LTRharvest LTR_retrotransposon 6869040 6875204 . ? . ID=LTRret71;Parent=RepeatReg71 seq0 LTRharvest long_terminal_repeat 6869040 6869311 . ? . ID=LTR142;Parent=LTRret71 seq0 LTRharvest long_terminal_repeat 6874938 6875204 . ? . ID=LTR143;Parent=LTRret71 seq0 LTRharvest target_site_duplication 6869036 6869039 . ? . ID=TSD142;Parent=RepeatReg71 seq0 LTRharvest target_site_duplication 6875205 6875208 . ? . ID=TSD143;Parent=RepeatReg71 seq0 LTRharvest repeat_region 21317345 21324767 . ? . ID=RepeatReg72 seq0 LTRharvest LTR_retrotransposon 21317349 21324763 . ? . ID=LTRret72;Parent=RepeatReg72 seq0 LTRharvest long_terminal_repeat 21317349 21317747 . ? . ID=LTR144;Parent=LTRret72 seq0 LTRharvest long_terminal_repeat 21324365 21324763 . ? . ID=LTR145;Parent=LTRret72 seq0 LTRharvest target_site_duplication 21317345 21317348 . ? . ID=TSD144;Parent=RepeatReg72 seq0 LTRharvest target_site_duplication 21324764 21324767 . ? . ID=TSD145;Parent=RepeatReg72 seq0 LTRharvest repeat_region 20546012 20553430 . ? . ID=RepeatReg73 seq0 LTRharvest LTR_retrotransposon 20546016 20553426 . ? . ID=LTRret73;Parent=RepeatReg73 seq0 LTRharvest long_terminal_repeat 20546016 20546414 . ? . ID=LTR146;Parent=LTRret73 seq0 LTRharvest long_terminal_repeat 20553028 20553426 . ? . ID=LTR147;Parent=LTRret73 seq0 LTRharvest target_site_duplication 20546012 20546015 . ? . ID=TSD146;Parent=RepeatReg73 seq0 LTRharvest target_site_duplication 20553427 20553430 . ? . ID=TSD147;Parent=RepeatReg73 seq0 LTRharvest repeat_region 4594317 4601734 . ? . ID=RepeatReg74 seq0 LTRharvest LTR_retrotransposon 4594321 4601730 . ? . ID=LTRret74;Parent=RepeatReg74 seq0 LTRharvest long_terminal_repeat 4594321 4594788 . ? . ID=LTR148;Parent=LTRret74 seq0 LTRharvest long_terminal_repeat 4601268 4601730 . ? . ID=LTR149;Parent=LTRret74 seq0 LTRharvest target_site_duplication 4594317 4594320 . ? . ID=TSD148;Parent=RepeatReg74 seq0 LTRharvest target_site_duplication 4601731 4601734 . ? . ID=TSD149;Parent=RepeatReg74 seq0 LTRharvest repeat_region 3195359 3202738 . ? . ID=RepeatReg75 seq0 LTRharvest LTR_retrotransposon 3195363 3202734 . ? . ID=LTRret75;Parent=RepeatReg75 seq0 LTRharvest long_terminal_repeat 3195363 3195805 . ? . ID=LTR150;Parent=LTRret75 seq0 LTRharvest long_terminal_repeat 3202277 3202734 . ? . ID=LTR151;Parent=LTRret75 seq0 LTRharvest target_site_duplication 3195359 3195362 . ? . ID=TSD150;Parent=RepeatReg75 seq0 LTRharvest target_site_duplication 3202735 3202738 . ? . ID=TSD151;Parent=RepeatReg75 seq0 LTRharvest repeat_region 8444702 8453824 . ? . ID=RepeatReg76 seq0 LTRharvest LTR_retrotransposon 8444707 8453819 . ? . ID=LTRret76;Parent=RepeatReg76 seq0 LTRharvest long_terminal_repeat 8444707 8445135 . ? . ID=LTR152;Parent=LTRret76 seq0 LTRharvest long_terminal_repeat 8453391 8453819 . ? . ID=LTR153;Parent=LTRret76 seq0 LTRharvest target_site_duplication 8444702 8444706 . ? . ID=TSD152;Parent=RepeatReg76 seq0 LTRharvest target_site_duplication 8453820 8453824 . ? . ID=TSD153;Parent=RepeatReg76 seq0 LTRharvest repeat_region 978598 986207 . ? . ID=RepeatReg77 seq0 LTRharvest LTR_retrotransposon 978602 986203 . ? . ID=LTRret77;Parent=RepeatReg77 seq0 LTRharvest long_terminal_repeat 978602 979049 . ? . ID=LTR154;Parent=LTRret77 seq0 LTRharvest long_terminal_repeat 985750 986203 . ? . ID=LTR155;Parent=LTRret77 seq0 LTRharvest target_site_duplication 978598 978601 . ? . ID=TSD154;Parent=RepeatReg77 seq0 LTRharvest target_site_duplication 986204 986207 . ? . ID=TSD155;Parent=RepeatReg77 seq0 LTRharvest repeat_region 21430199 21437893 . ? . ID=RepeatReg78 seq0 LTRharvest LTR_retrotransposon 21430203 21437889 . ? . ID=LTRret78;Parent=RepeatReg78 seq0 LTRharvest long_terminal_repeat 21430203 21430631 . ? . ID=LTR156;Parent=LTRret78 seq0 LTRharvest long_terminal_repeat 21437458 21437889 . ? . ID=LTR157;Parent=LTRret78 seq0 LTRharvest target_site_duplication 21430199 21430202 . ? . ID=TSD156;Parent=RepeatReg78 seq0 LTRharvest target_site_duplication 21437890 21437893 . ? . ID=TSD157;Parent=RepeatReg78 seq0 LTRharvest repeat_region 10939403 10948569 . ? . ID=RepeatReg79 seq0 LTRharvest LTR_retrotransposon 10939408 10948564 . ? . ID=LTRret79;Parent=RepeatReg79 seq0 LTRharvest long_terminal_repeat 10939408 10939835 . ? . ID=LTR158;Parent=LTRret79 seq0 LTRharvest long_terminal_repeat 10948137 10948564 . ? . ID=LTR159;Parent=LTRret79 seq0 LTRharvest target_site_duplication 10939403 10939407 . ? . ID=TSD158;Parent=RepeatReg79 seq0 LTRharvest target_site_duplication 10948565 10948569 . ? . ID=TSD159;Parent=RepeatReg79 seq0 LTRharvest repeat_region 7335608 7342674 . ? . ID=RepeatReg80 seq0 LTRharvest LTR_retrotransposon 7335612 7342670 . ? . ID=LTRret80;Parent=RepeatReg80 seq0 LTRharvest long_terminal_repeat 7335612 7336049 . ? . ID=LTR160;Parent=LTRret80 seq0 LTRharvest long_terminal_repeat 7342242 7342670 . ? . ID=LTR161;Parent=LTRret80 seq0 LTRharvest target_site_duplication 7335608 7335611 . ? . ID=TSD160;Parent=RepeatReg80 seq0 LTRharvest target_site_duplication 7342671 7342674 . ? . ID=TSD161;Parent=RepeatReg80 seq0 LTRharvest repeat_region 18030009 18039107 . ? . ID=RepeatReg81 seq0 LTRharvest LTR_retrotransposon 18030014 18039102 . ? . ID=LTRret81;Parent=RepeatReg81 seq0 LTRharvest long_terminal_repeat 18030014 18030427 . ? . ID=LTR162;Parent=LTRret81 seq0 LTRharvest long_terminal_repeat 18038689 18039102 . ? . ID=LTR163;Parent=LTRret81 seq0 LTRharvest target_site_duplication 18030009 18030013 . ? . ID=TSD162;Parent=RepeatReg81 seq0 LTRharvest target_site_duplication 18039103 18039107 . ? . ID=TSD163;Parent=RepeatReg81 seq0 LTRharvest repeat_region 3642407 3647561 . ? . ID=RepeatReg82 seq0 LTRharvest LTR_retrotransposon 3642412 3647556 . ? . ID=LTRret82;Parent=RepeatReg82 seq0 LTRharvest long_terminal_repeat 3642412 3642687 . ? . ID=LTR164;Parent=LTRret82 seq0 LTRharvest long_terminal_repeat 3647281 3647556 . ? . ID=LTR165;Parent=LTRret82 seq0 LTRharvest target_site_duplication 3642407 3642411 . ? . ID=TSD164;Parent=RepeatReg82 seq0 LTRharvest target_site_duplication 3647557 3647561 . ? . ID=TSD165;Parent=RepeatReg82 seq0 LTRharvest repeat_region 8005895 8011050 . ? . ID=RepeatReg83 seq0 LTRharvest LTR_retrotransposon 8005900 8011045 . ? . ID=LTRret83;Parent=RepeatReg83 seq0 LTRharvest long_terminal_repeat 8005900 8006175 . ? . ID=LTR166;Parent=LTRret83 seq0 LTRharvest long_terminal_repeat 8010770 8011045 . ? . ID=LTR167;Parent=LTRret83 seq0 LTRharvest target_site_duplication 8005895 8005899 . ? . ID=TSD166;Parent=RepeatReg83 seq0 LTRharvest target_site_duplication 8011046 8011050 . ? . ID=TSD167;Parent=RepeatReg83 seq0 LTRharvest repeat_region 3065652 3070805 . ? . ID=RepeatReg84 seq0 LTRharvest LTR_retrotransposon 3065656 3070801 . ? . ID=LTRret84;Parent=RepeatReg84 seq0 LTRharvest long_terminal_repeat 3065656 3065937 . ? . ID=LTR168;Parent=LTRret84 seq0 LTRharvest long_terminal_repeat 3070525 3070801 . ? . ID=LTR169;Parent=LTRret84 seq0 LTRharvest target_site_duplication 3065652 3065655 . ? . ID=TSD168;Parent=RepeatReg84 seq0 LTRharvest target_site_duplication 3070802 3070805 . ? . ID=TSD169;Parent=RepeatReg84 seq0 LTRharvest repeat_region 20242518 20247671 . ? . ID=RepeatReg85 seq0 LTRharvest LTR_retrotransposon 20242523 20247666 . ? . ID=LTRret85;Parent=RepeatReg85 seq0 LTRharvest long_terminal_repeat 20242523 20242798 . ? . ID=LTR170;Parent=LTRret85 seq0 LTRharvest long_terminal_repeat 20247391 20247666 . ? . ID=LTR171;Parent=LTRret85 seq0 LTRharvest target_site_duplication 20242518 20242522 . ? . ID=TSD170;Parent=RepeatReg85 seq0 LTRharvest target_site_duplication 20247667 20247671 . ? . ID=TSD171;Parent=RepeatReg85 seq0 LTRharvest repeat_region 20137089 20142349 . ? . ID=RepeatReg86 seq0 LTRharvest LTR_retrotransposon 20137093 20142345 . ? . ID=LTRret86;Parent=RepeatReg86 seq0 LTRharvest long_terminal_repeat 20137093 20137368 . ? . ID=LTR172;Parent=LTRret86 seq0 LTRharvest long_terminal_repeat 20142068 20142345 . ? . ID=LTR173;Parent=LTRret86 seq0 LTRharvest target_site_duplication 20137089 20137092 . ? . ID=TSD172;Parent=RepeatReg86 seq0 LTRharvest target_site_duplication 20142346 20142349 . ? . ID=TSD173;Parent=RepeatReg86 seq0 LTRharvest repeat_region 16119297 16124455 . ? . ID=RepeatReg87 seq0 LTRharvest LTR_retrotransposon 16119302 16124450 . ? . ID=LTRret87;Parent=RepeatReg87 seq0 LTRharvest long_terminal_repeat 16119302 16119577 . ? . ID=LTR174;Parent=LTRret87 seq0 LTRharvest long_terminal_repeat 16124175 16124450 . ? . ID=LTR175;Parent=LTRret87 seq0 LTRharvest target_site_duplication 16119297 16119301 . ? . ID=TSD174;Parent=RepeatReg87 seq0 LTRharvest target_site_duplication 16124451 16124455 . ? . ID=TSD175;Parent=RepeatReg87 seq0 LTRharvest repeat_region 22034479 22039632 . ? . ID=RepeatReg88 seq0 LTRharvest LTR_retrotransposon 22034484 22039627 . ? . ID=LTRret88;Parent=RepeatReg88 seq0 LTRharvest long_terminal_repeat 22034484 22034759 . ? . ID=LTR176;Parent=LTRret88 seq0 LTRharvest long_terminal_repeat 22039352 22039627 . ? . ID=LTR177;Parent=LTRret88 seq0 LTRharvest target_site_duplication 22034479 22034483 . ? . ID=TSD176;Parent=RepeatReg88 seq0 LTRharvest target_site_duplication 22039628 22039632 . ? . ID=TSD177;Parent=RepeatReg88 seq0 LTRharvest repeat_region 17798056 17803210 . ? . ID=RepeatReg89 seq0 LTRharvest LTR_retrotransposon 17798061 17803205 . ? . ID=LTRret89;Parent=RepeatReg89 seq0 LTRharvest long_terminal_repeat 17798061 17798335 . ? . ID=LTR178;Parent=LTRret89 seq0 LTRharvest long_terminal_repeat 17802931 17803205 . ? . ID=LTR179;Parent=LTRret89 seq0 LTRharvest target_site_duplication 17798056 17798060 . ? . ID=TSD178;Parent=RepeatReg89 seq0 LTRharvest target_site_duplication 17803206 17803210 . ? . ID=TSD179;Parent=RepeatReg89 seq0 LTRharvest repeat_region 1802936 1808463 . ? . ID=RepeatReg90 seq0 LTRharvest LTR_retrotransposon 1802940 1808459 . ? . ID=LTRret90;Parent=RepeatReg90 seq0 LTRharvest long_terminal_repeat 1802940 1803212 . ? . ID=LTR180;Parent=LTRret90 seq0 LTRharvest long_terminal_repeat 1808191 1808459 . ? . ID=LTR181;Parent=LTRret90 seq0 LTRharvest target_site_duplication 1802936 1802939 . ? . ID=TSD180;Parent=RepeatReg90 seq0 LTRharvest target_site_duplication 1808460 1808463 . ? . ID=TSD181;Parent=RepeatReg90 genometools-1.5.1/testdata/gt_eval_ltr_prob_1.reality000066400000000000000000000176471211610345200230330ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq0 1 22217931 seq0 Fruitfly LTR_retrotransposon 347940 355382 . ? . . ### seq0 Fruitfly LTR_retrotransposon 688639 697620 . ? . . ### seq0 Fruitfly LTR_retrotransposon 978600 986177 . ? . . ### seq0 Fruitfly LTR_retrotransposon 998445 1007482 . ? . . ### seq0 Fruitfly LTR_retrotransposon 1221849 1229258 . ? . . ### seq0 Fruitfly LTR_retrotransposon 1303473 1303954 . ? . . ### seq0 Fruitfly LTR_retrotransposon 1680695 1688104 . ? . . ### seq0 Fruitfly LTR_retrotransposon 1713076 1713343 . ? . . ### seq0 Fruitfly LTR_retrotransposon 1802938 1808457 . ? . . ### seq0 Fruitfly LTR_retrotransposon 2104735 2112341 . ? . . ### seq0 Fruitfly LTR_retrotransposon 2286663 2291810 . ? . . ### seq0 Fruitfly LTR_retrotransposon 2558160 2564170 . ? . . ### seq0 Fruitfly LTR_retrotransposon 2765222 2771744 . ? . . ### seq0 Fruitfly LTR_retrotransposon 3065656 3070800 . ? . . ### seq0 Fruitfly LTR_retrotransposon 3195363 3202734 . ? . . ### seq0 Fruitfly LTR_retrotransposon 3244118 3251625 . ? . . ### seq0 Fruitfly LTR_retrotransposon 3642412 3647556 . ? . . ### seq0 Fruitfly LTR_retrotransposon 4173896 4176470 . ? . . ### seq0 Fruitfly LTR_retrotransposon 4594328 4601711 . ? . . ### seq0 Fruitfly LTR_retrotransposon 4654449 4661975 . ? . . ### seq0 Fruitfly LTR_retrotransposon 5819978 5828927 . ? . . ### seq0 Fruitfly LTR_retrotransposon 6355420 6358284 . ? . . ### seq0 Fruitfly LTR_retrotransposon 6419126 6423779 . ? . . ### seq0 Fruitfly LTR_retrotransposon 6423780 6428231 . ? . . ### seq0 Fruitfly LTR_retrotransposon 6428230 6437328 . ? . . ### seq0 Fruitfly LTR_retrotransposon 6869048 6875195 . ? . . ### seq0 Fruitfly LTR_retrotransposon 6983718 6990779 . ? . . ### seq0 Fruitfly LTR_retrotransposon 7335612 7342669 . ? . . ### seq0 Fruitfly LTR_retrotransposon 7540367 7542745 . ? . . ### seq0 Fruitfly LTR_retrotransposon 7969366 7976282 . ? . . ### seq0 Fruitfly LTR_retrotransposon 8005900 8011045 . ? . . ### seq0 Fruitfly LTR_retrotransposon 8444707 8453819 . ? . . ### seq0 Fruitfly LTR_retrotransposon 8586751 8593747 . ? . . ### seq0 Fruitfly LTR_retrotransposon 8715395 8723721 . ? . . ### seq0 Fruitfly LTR_retrotransposon 8992566 9000017 . ? . . ### seq0 Fruitfly LTR_retrotransposon 9966190 9973251 . ? . . ### seq0 Fruitfly LTR_retrotransposon 10148786 10156201 . ? . . ### seq0 Fruitfly LTR_retrotransposon 10585306 10592911 . ? . . ### seq0 Fruitfly LTR_retrotransposon 10869007 10876005 . ? . . ### seq0 Fruitfly LTR_retrotransposon 10939408 10948564 . ? . . ### seq0 Fruitfly LTR_retrotransposon 11529509 11536853 . ? . . ### seq0 Fruitfly LTR_retrotransposon 11552562 11557708 . ? . . ### seq0 Fruitfly LTR_retrotransposon 11702432 11709843 . ? . . ### seq0 Fruitfly LTR_retrotransposon 12056256 12063250 . ? . . ### seq0 Fruitfly LTR_retrotransposon 12547246 12554316 . ? . . ### seq0 Fruitfly LTR_retrotransposon 12770728 12778114 . ? . . ### seq0 Fruitfly LTR_retrotransposon 12922775 12930184 . ? . . ### seq0 Fruitfly LTR_retrotransposon 13438387 13439046 . ? . . ### seq0 Fruitfly LTR_retrotransposon 13504464 13509712 . ? . . ### seq0 Fruitfly LTR_retrotransposon 13835292 13844383 . ? . . ### seq0 Fruitfly LTR_retrotransposon 14624781 14633885 . ? . . ### seq0 Fruitfly LTR_retrotransposon 14782018 14787163 . ? . . ### seq0 Fruitfly LTR_retrotransposon 14962535 14970060 . ? . . ### seq0 Fruitfly LTR_retrotransposon 15424189 15431601 . ? . . ### seq0 Fruitfly LTR_retrotransposon 15564549 15571543 . ? . . ### seq0 Fruitfly LTR_retrotransposon 15661867 15662525 . ? . . ### seq0 Fruitfly LTR_retrotransposon 15662859 15664842 . ? . . ### seq0 Fruitfly LTR_retrotransposon 15696864 15699839 . ? . . ### seq0 Fruitfly LTR_retrotransposon 15701246 15705654 . ? . . ### seq0 Fruitfly LTR_retrotransposon 15804999 15807341 . ? . . ### seq0 Fruitfly LTR_retrotransposon 16119302 16124450 . ? . . ### seq0 Fruitfly LTR_retrotransposon 16131875 16138871 . ? . . ### seq0 Fruitfly LTR_retrotransposon 16490102 16497158 . ? . . ### seq0 Fruitfly LTR_retrotransposon 17122469 17130082 . ? . . ### seq0 Fruitfly LTR_retrotransposon 17798061 17803205 . ? . . ### seq0 Fruitfly LTR_retrotransposon 18030014 18039102 . ? . . ### seq0 Fruitfly LTR_retrotransposon 19125508 19132485 . ? . . ### seq0 Fruitfly LTR_retrotransposon 19325623 19333040 . ? . . ### seq0 Fruitfly LTR_retrotransposon 19630711 19635762 . ? . . ### seq0 Fruitfly LTR_retrotransposon 19635763 19643371 . ? . . ### seq0 Fruitfly LTR_retrotransposon 19643372 19646532 . ? . . ### seq0 Fruitfly LTR_retrotransposon 19651276 19652086 . ? . . ### seq0 Fruitfly LTR_retrotransposon 19681675 19690752 . ? . . ### seq0 Fruitfly LTR_retrotransposon 19984003 19989022 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20133886 20134160 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20135490 20135814 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20137094 20142345 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20143985 20144088 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20148441 20149279 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20150134 20150594 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20154138 20154859 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20154860 20162270 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20162270 20169186 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20169187 20169317 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20169316 20170809 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20170804 20171048 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20178952 20179192 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20241908 20242522 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20242523 20247666 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20247666 20252561 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20272957 20280368 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20377606 20382636 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20546016 20553426 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20605022 20605341 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20710045 20717862 . ? . . ### seq0 Fruitfly LTR_retrotransposon 20805605 20806264 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21010933 21019137 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21317349 21324763 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21372835 21373265 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21375980 21378558 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21383095 21383351 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21402852 21403334 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21430204 21437889 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21486368 21489615 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21525003 21531415 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21566520 21570614 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21814814 21823919 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21909869 21910105 . ? . . ### seq0 Fruitfly LTR_retrotransposon 21944136 21944820 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22015372 22015594 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22034484 22039627 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22049240 22049623 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22052309 22052654 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22116556 22123207 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22133407 22137517 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22140503 22144064 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22148784 22151268 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22155967 22156135 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22162400 22167445 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22167561 22167782 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22168147 22168625 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22169273 22169463 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22170878 22170980 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22207263 22209332 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22210048 22210140 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22214446 22214882 . ? . . ### seq0 Fruitfly LTR_retrotransposon 22214882 22217230 . ? . . ### genometools-1.5.1/testdata/gt_eval_ltr_test_1.in000066400000000000000000001106621211610345200217740ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq0 1 230209 ##sequence-region seq1 1 813139 ##sequence-region seq10 1 666449 ##sequence-region seq11 1 1078173 ##sequence-region seq12 1 924431 ##sequence-region seq13 1 784331 ##sequence-region seq14 1 1091284 ##sequence-region seq15 1 948061 ##sequence-region seq2 1 315342 ##sequence-region seq3 1 1531975 ##sequence-region seq4 1 576871 ##sequence-region seq5 1 270149 ##sequence-region seq6 1 1090937 ##sequence-region seq7 1 562639 ##sequence-region seq8 1 439886 ##sequence-region seq9 1 745441 seq0 LTRharvest repeat_region 160234 166168 . ? . ID=repeat_region1 seq0 LTRharvest target_site_duplication 160234 160238 . ? . Parent=repeat_region1 seq0 LTRharvest inverted_repeat 160239 160240 . ? . Parent=repeat_region1 seq0 LTRharvest LTR_retrotransposon 160239 166163 . ? . ID=LTR_retrotransposon1;Parent=repeat_region1 seq0 LTRharvest long_terminal_repeat 160239 160575 . ? . Parent=LTR_retrotransposon1 seq0 LTRharvest long_terminal_repeat 165827 166163 . ? . Parent=LTR_retrotransposon1 seq0 LTRharvest inverted_repeat 160574 160575 . ? . Parent=repeat_region1 seq0 LTRharvest inverted_repeat 165827 165828 . ? . Parent=repeat_region1 seq0 LTRharvest inverted_repeat 166162 166163 . ? . Parent=repeat_region1 seq0 LTRharvest target_site_duplication 166164 166168 . ? . Parent=repeat_region1 ### seq1 LTRharvest repeat_region 29627 35595 . ? . ID=repeat_region2 seq1 LTRharvest target_site_duplication 29627 29631 . ? . Parent=repeat_region2 seq1 LTRharvest inverted_repeat 29632 29633 . ? . Parent=repeat_region2 seq1 LTRharvest LTR_retrotransposon 29632 35590 . ? . ID=LTR_retrotransposon2;Parent=repeat_region2 seq1 LTRharvest long_terminal_repeat 29632 29963 . ? . Parent=LTR_retrotransposon2 seq1 LTRharvest long_terminal_repeat 35259 35590 . ? . Parent=LTR_retrotransposon2 seq1 LTRharvest inverted_repeat 29962 29963 . ? . Parent=repeat_region2 seq1 LTRharvest inverted_repeat 35259 35260 . ? . Parent=repeat_region2 seq1 LTRharvest inverted_repeat 35589 35590 . ? . Parent=repeat_region2 seq1 LTRharvest target_site_duplication 35591 35595 . ? . Parent=repeat_region2 ### seq1 LTRharvest repeat_region 220991 226916 . ? . ID=repeat_region3 seq1 LTRharvest target_site_duplication 220991 220995 . ? . Parent=repeat_region3 seq1 LTRharvest inverted_repeat 220996 220997 . ? . Parent=repeat_region3 seq1 LTRharvest LTR_retrotransposon 220996 226911 . ? . ID=LTR_retrotransposon3;Parent=repeat_region3 seq1 LTRharvest long_terminal_repeat 220996 221329 . ? . Parent=LTR_retrotransposon3 seq1 LTRharvest long_terminal_repeat 226575 226911 . ? . Parent=LTR_retrotransposon3 seq1 LTRharvest inverted_repeat 221328 221329 . ? . Parent=repeat_region3 seq1 LTRharvest inverted_repeat 226575 226576 . ? . Parent=repeat_region3 seq1 LTRharvest inverted_repeat 226910 226911 . ? . Parent=repeat_region3 seq1 LTRharvest target_site_duplication 226912 226916 . ? . Parent=repeat_region3 ### seq1 LTRharvest repeat_region 259527 265453 . ? . ID=repeat_region4 seq1 LTRharvest target_site_duplication 259527 259531 . ? . Parent=repeat_region4 seq1 LTRharvest inverted_repeat 259532 259533 . ? . Parent=repeat_region4 seq1 LTRharvest LTR_retrotransposon 259532 265448 . ? . ID=LTR_retrotransposon4;Parent=repeat_region4 seq1 LTRharvest long_terminal_repeat 259532 259863 . ? . Parent=LTR_retrotransposon4 seq1 LTRharvest long_terminal_repeat 265117 265448 . ? . Parent=LTR_retrotransposon4 seq1 LTRharvest inverted_repeat 259862 259863 . ? . Parent=repeat_region4 seq1 LTRharvest inverted_repeat 265117 265118 . ? . Parent=repeat_region4 seq1 LTRharvest inverted_repeat 265447 265448 . ? . Parent=repeat_region4 seq1 LTRharvest target_site_duplication 265449 265453 . ? . Parent=repeat_region4 ### seq11 LTRharvest repeat_region 215076 221011 . ? . ID=repeat_region5 seq11 LTRharvest target_site_duplication 215076 215080 . ? . Parent=repeat_region5 seq11 LTRharvest inverted_repeat 215081 215082 . ? . Parent=repeat_region5 seq11 LTRharvest LTR_retrotransposon 215081 221006 . ? . ID=LTR_retrotransposon5;Parent=repeat_region5 seq11 LTRharvest long_terminal_repeat 215081 215427 . ? . Parent=LTR_retrotransposon5 seq11 LTRharvest long_terminal_repeat 220669 221006 . ? . Parent=LTR_retrotransposon5 seq11 LTRharvest inverted_repeat 215426 215427 . ? . Parent=repeat_region5 seq11 LTRharvest inverted_repeat 220669 220670 . ? . Parent=repeat_region5 seq11 LTRharvest inverted_repeat 221005 221006 . ? . Parent=repeat_region5 seq11 LTRharvest target_site_duplication 221007 221011 . ? . Parent=repeat_region5 ### seq11 LTRharvest repeat_region 475970 481903 . ? . ID=repeat_region6 seq11 LTRharvest target_site_duplication 475970 475974 . ? . Parent=repeat_region6 seq11 LTRharvest inverted_repeat 475975 475976 . ? . Parent=repeat_region6 seq11 LTRharvest LTR_retrotransposon 475975 481898 . ? . ID=LTR_retrotransposon6;Parent=repeat_region6 seq11 LTRharvest long_terminal_repeat 475975 476311 . ? . Parent=LTR_retrotransposon6 seq11 LTRharvest long_terminal_repeat 481562 481898 . ? . Parent=LTR_retrotransposon6 seq11 LTRharvest inverted_repeat 476310 476311 . ? . Parent=repeat_region6 seq11 LTRharvest inverted_repeat 481562 481563 . ? . Parent=repeat_region6 seq11 LTRharvest inverted_repeat 481897 481898 . ? . Parent=repeat_region6 seq11 LTRharvest target_site_duplication 481899 481903 . ? . Parent=repeat_region6 ### seq11 LTRharvest repeat_region 593140 599067 . ? . ID=repeat_region7 seq11 LTRharvest target_site_duplication 593140 593144 . ? . Parent=repeat_region7 seq11 LTRharvest inverted_repeat 593145 593146 . ? . Parent=repeat_region7 seq11 LTRharvest LTR_retrotransposon 593145 599062 . ? . ID=LTR_retrotransposon7;Parent=repeat_region7 seq11 LTRharvest long_terminal_repeat 593145 593478 . ? . Parent=LTR_retrotransposon7 seq11 LTRharvest long_terminal_repeat 598695 599062 . ? . Parent=LTR_retrotransposon7 seq11 LTRharvest inverted_repeat 593477 593478 . ? . Parent=repeat_region7 seq11 LTRharvest inverted_repeat 598695 598696 . ? . Parent=repeat_region7 seq11 LTRharvest inverted_repeat 599061 599062 . ? . Parent=repeat_region7 seq11 LTRharvest target_site_duplication 599063 599067 . ? . Parent=repeat_region7 ### seq11 LTRharvest repeat_region 650819 656748 . ? . ID=repeat_region8 seq11 LTRharvest target_site_duplication 650819 650823 . ? . Parent=repeat_region8 seq11 LTRharvest inverted_repeat 650824 650825 . ? . Parent=repeat_region8 seq11 LTRharvest LTR_retrotransposon 650824 656743 . ? . ID=LTR_retrotransposon8;Parent=repeat_region8 seq11 LTRharvest long_terminal_repeat 650824 651157 . ? . Parent=LTR_retrotransposon8 seq11 LTRharvest long_terminal_repeat 656401 656743 . ? . Parent=LTR_retrotransposon8 seq11 LTRharvest inverted_repeat 651156 651157 . ? . Parent=repeat_region8 seq11 LTRharvest inverted_repeat 656401 656402 . ? . Parent=repeat_region8 seq11 LTRharvest inverted_repeat 656742 656743 . ? . Parent=repeat_region8 seq11 LTRharvest target_site_duplication 656744 656748 . ? . Parent=repeat_region8 ### seq11 LTRharvest repeat_region 941182 947150 . ? . ID=repeat_region9 seq11 LTRharvest target_site_duplication 941182 941186 . ? . Parent=repeat_region9 seq11 LTRharvest inverted_repeat 941187 941188 . ? . Parent=repeat_region9 seq11 LTRharvest LTR_retrotransposon 941187 947145 . ? . ID=LTR_retrotransposon9;Parent=repeat_region9 seq11 LTRharvest long_terminal_repeat 941187 941518 . ? . Parent=LTR_retrotransposon9 seq11 LTRharvest long_terminal_repeat 946814 947145 . ? . Parent=LTR_retrotransposon9 seq11 LTRharvest inverted_repeat 941517 941518 . ? . Parent=repeat_region9 seq11 LTRharvest inverted_repeat 946814 946815 . ? . Parent=repeat_region9 seq11 LTRharvest inverted_repeat 947144 947145 . ? . Parent=repeat_region9 seq11 LTRharvest target_site_duplication 947146 947150 . ? . Parent=repeat_region9 ### seq12 LTRharvest repeat_region 184165 190088 . ? . ID=repeat_region10 seq12 LTRharvest target_site_duplication 184165 184169 . ? . Parent=repeat_region10 seq12 LTRharvest inverted_repeat 184170 184171 . ? . Parent=repeat_region10 seq12 LTRharvest LTR_retrotransposon 184170 190083 . ? . ID=LTR_retrotransposon10;Parent=repeat_region10 seq12 LTRharvest long_terminal_repeat 184170 184501 . ? . Parent=LTR_retrotransposon10 seq12 LTRharvest long_terminal_repeat 189752 190083 . ? . Parent=LTR_retrotransposon10 seq12 LTRharvest inverted_repeat 184500 184501 . ? . Parent=repeat_region10 seq12 LTRharvest inverted_repeat 189752 189753 . ? . Parent=repeat_region10 seq12 LTRharvest inverted_repeat 190082 190083 . ? . Parent=repeat_region10 seq12 LTRharvest target_site_duplication 190084 190088 . ? . Parent=repeat_region10 ### seq12 LTRharvest repeat_region 356999 362922 . ? . ID=repeat_region11 seq12 LTRharvest target_site_duplication 356999 357003 . ? . Parent=repeat_region11 seq12 LTRharvest inverted_repeat 357004 357005 . ? . Parent=repeat_region11 seq12 LTRharvest LTR_retrotransposon 357004 362917 . ? . ID=LTR_retrotransposon11;Parent=repeat_region11 seq12 LTRharvest long_terminal_repeat 357004 357335 . ? . Parent=LTR_retrotransposon11 seq12 LTRharvest long_terminal_repeat 362586 362917 . ? . Parent=LTR_retrotransposon11 seq12 LTRharvest inverted_repeat 357334 357335 . ? . Parent=repeat_region11 seq12 LTRharvest inverted_repeat 362586 362587 . ? . Parent=repeat_region11 seq12 LTRharvest inverted_repeat 362916 362917 . ? . Parent=repeat_region11 seq12 LTRharvest target_site_duplication 362918 362922 . ? . Parent=repeat_region11 ### seq12 LTRharvest repeat_region 372691 378626 . ? . ID=repeat_region12 seq12 LTRharvest target_site_duplication 372691 372695 . ? . Parent=repeat_region12 seq12 LTRharvest inverted_repeat 372696 372697 . ? . Parent=repeat_region12 seq12 LTRharvest LTR_retrotransposon 372696 378621 . ? . ID=LTR_retrotransposon12;Parent=repeat_region12 seq12 LTRharvest long_terminal_repeat 372696 373033 . ? . Parent=LTR_retrotransposon12 seq12 LTRharvest long_terminal_repeat 378284 378621 . ? . Parent=LTR_retrotransposon12 seq12 LTRharvest inverted_repeat 373032 373033 . ? . Parent=repeat_region12 seq12 LTRharvest inverted_repeat 378284 378285 . ? . Parent=repeat_region12 seq12 LTRharvest inverted_repeat 378620 378621 . ? . Parent=repeat_region12 seq12 LTRharvest target_site_duplication 378622 378626 . ? . Parent=repeat_region12 ### seq13 LTRharvest repeat_region 96603 102526 . ? . ID=repeat_region13 seq13 LTRharvest target_site_duplication 96603 96607 . ? . Parent=repeat_region13 seq13 LTRharvest inverted_repeat 96608 96609 . ? . Parent=repeat_region13 seq13 LTRharvest LTR_retrotransposon 96608 102521 . ? . ID=LTR_retrotransposon13;Parent=repeat_region13 seq13 LTRharvest long_terminal_repeat 96608 96939 . ? . Parent=LTR_retrotransposon13 seq13 LTRharvest long_terminal_repeat 102190 102521 . ? . Parent=LTR_retrotransposon13 seq13 LTRharvest inverted_repeat 96938 96939 . ? . Parent=repeat_region13 seq13 LTRharvest inverted_repeat 102190 102191 . ? . Parent=repeat_region13 seq13 LTRharvest inverted_repeat 102520 102521 . ? . Parent=repeat_region13 seq13 LTRharvest target_site_duplication 102522 102526 . ? . Parent=repeat_region13 ### seq13 LTRharvest repeat_region 519156 525065 . ? . ID=repeat_region14 seq13 LTRharvest target_site_duplication 519156 519160 . ? . Parent=repeat_region14 seq13 LTRharvest inverted_repeat 519161 519162 . ? . Parent=repeat_region14 seq13 LTRharvest LTR_retrotransposon 519161 525060 . ? . ID=LTR_retrotransposon14;Parent=repeat_region14 seq13 LTRharvest long_terminal_repeat 519161 519494 . ? . Parent=LTR_retrotransposon14 seq13 LTRharvest long_terminal_repeat 524727 525060 . ? . Parent=LTR_retrotransposon14 seq13 LTRharvest inverted_repeat 519493 519494 . ? . Parent=repeat_region14 seq13 LTRharvest inverted_repeat 524727 524728 . ? . Parent=repeat_region14 seq13 LTRharvest inverted_repeat 525059 525060 . ? . Parent=repeat_region14 seq13 LTRharvest target_site_duplication 525061 525065 . ? . Parent=repeat_region14 ### seq13 LTRharvest repeat_region 562026 567995 . ? . ID=repeat_region15 seq13 LTRharvest target_site_duplication 562026 562030 . ? . Parent=repeat_region15 seq13 LTRharvest inverted_repeat 562031 562032 . ? . Parent=repeat_region15 seq13 LTRharvest LTR_retrotransposon 562031 567990 . ? . ID=LTR_retrotransposon15;Parent=repeat_region15 seq13 LTRharvest long_terminal_repeat 562031 562362 . ? . Parent=LTR_retrotransposon15 seq13 LTRharvest long_terminal_repeat 567658 567990 . ? . Parent=LTR_retrotransposon15 seq13 LTRharvest inverted_repeat 562361 562362 . ? . Parent=repeat_region15 seq13 LTRharvest inverted_repeat 567658 567659 . ? . Parent=repeat_region15 seq13 LTRharvest inverted_repeat 567989 567990 . ? . Parent=repeat_region15 seq13 LTRharvest target_site_duplication 567991 567995 . ? . Parent=repeat_region15 ### seq14 LTRharvest repeat_region 117697 123632 . ? . ID=repeat_region16 seq14 LTRharvest target_site_duplication 117697 117701 . ? . Parent=repeat_region16 seq14 LTRharvest inverted_repeat 117702 117703 . ? . Parent=repeat_region16 seq14 LTRharvest LTR_retrotransposon 117702 123627 . ? . ID=LTR_retrotransposon16;Parent=repeat_region16 seq14 LTRharvest long_terminal_repeat 117702 118028 . ? . Parent=LTR_retrotransposon16 seq14 LTRharvest long_terminal_repeat 123290 123627 . ? . Parent=LTR_retrotransposon16 seq14 LTRharvest inverted_repeat 118027 118028 . ? . Parent=repeat_region16 seq14 LTRharvest inverted_repeat 123290 123291 . ? . Parent=repeat_region16 seq14 LTRharvest inverted_repeat 123626 123627 . ? . Parent=repeat_region16 seq14 LTRharvest target_site_duplication 123628 123632 . ? . Parent=repeat_region16 ### seq14 LTRharvest repeat_region 594814 600737 . ? . ID=repeat_region17 seq14 LTRharvest target_site_duplication 594814 594818 . ? . Parent=repeat_region17 seq14 LTRharvest inverted_repeat 594819 594820 . ? . Parent=repeat_region17 seq14 LTRharvest LTR_retrotransposon 594819 600732 . ? . ID=LTR_retrotransposon17;Parent=repeat_region17 seq14 LTRharvest long_terminal_repeat 594819 595150 . ? . Parent=LTR_retrotransposon17 seq14 LTRharvest long_terminal_repeat 600401 600732 . ? . Parent=LTR_retrotransposon17 seq14 LTRharvest inverted_repeat 595149 595150 . ? . Parent=repeat_region17 seq14 LTRharvest inverted_repeat 600401 600402 . ? . Parent=repeat_region17 seq14 LTRharvest inverted_repeat 600731 600732 . ? . Parent=repeat_region17 seq14 LTRharvest target_site_duplication 600733 600737 . ? . Parent=repeat_region17 ### seq14 LTRharvest repeat_region 704057 710027 . ? . ID=repeat_region18 seq14 LTRharvest target_site_duplication 704057 704061 . ? . Parent=repeat_region18 seq14 LTRharvest inverted_repeat 704062 704063 . ? . Parent=repeat_region18 seq14 LTRharvest LTR_retrotransposon 704062 710022 . ? . ID=LTR_retrotransposon18;Parent=repeat_region18 seq14 LTRharvest long_terminal_repeat 704062 704394 . ? . Parent=LTR_retrotransposon18 seq14 LTRharvest long_terminal_repeat 709690 710022 . ? . Parent=LTR_retrotransposon18 seq14 LTRharvest inverted_repeat 704393 704394 . ? . Parent=repeat_region18 seq14 LTRharvest inverted_repeat 709690 709691 . ? . Parent=repeat_region18 seq14 LTRharvest inverted_repeat 710021 710022 . ? . Parent=repeat_region18 seq14 LTRharvest target_site_duplication 710023 710027 . ? . Parent=repeat_region18 ### seq14 LTRharvest repeat_region 970273 976241 . ? . ID=repeat_region19 seq14 LTRharvest target_site_duplication 970273 970277 . ? . Parent=repeat_region19 seq14 LTRharvest inverted_repeat 970278 970279 . ? . Parent=repeat_region19 seq14 LTRharvest LTR_retrotransposon 970278 976236 . ? . ID=LTR_retrotransposon19;Parent=repeat_region19 seq14 LTRharvest long_terminal_repeat 970278 970609 . ? . Parent=LTR_retrotransposon19 seq14 LTRharvest long_terminal_repeat 975900 976236 . ? . Parent=LTR_retrotransposon19 seq14 LTRharvest inverted_repeat 970608 970609 . ? . Parent=repeat_region19 seq14 LTRharvest inverted_repeat 975900 975901 . ? . Parent=repeat_region19 seq14 LTRharvest inverted_repeat 976235 976236 . ? . Parent=repeat_region19 seq14 LTRharvest target_site_duplication 976237 976241 . ? . Parent=repeat_region19 ### seq15 LTRharvest repeat_region 56447 62380 . ? . ID=repeat_region20 seq15 LTRharvest target_site_duplication 56447 56451 . ? . Parent=repeat_region20 seq15 LTRharvest inverted_repeat 56452 56453 . ? . Parent=repeat_region20 seq15 LTRharvest LTR_retrotransposon 56452 62375 . ? . ID=LTR_retrotransposon20;Parent=repeat_region20 seq15 LTRharvest long_terminal_repeat 56452 56788 . ? . Parent=LTR_retrotransposon20 seq15 LTRharvest long_terminal_repeat 62039 62375 . ? . Parent=LTR_retrotransposon20 seq15 LTRharvest inverted_repeat 56787 56788 . ? . Parent=repeat_region20 seq15 LTRharvest inverted_repeat 62039 62040 . ? . Parent=repeat_region20 seq15 LTRharvest inverted_repeat 62374 62375 . ? . Parent=repeat_region20 seq15 LTRharvest target_site_duplication 62376 62380 . ? . Parent=repeat_region20 ### seq15 LTRharvest repeat_region 436880 443112 . ? . ID=repeat_region21 seq15 LTRharvest target_site_duplication 436880 436884 . ? . Parent=repeat_region21 seq15 LTRharvest inverted_repeat 436885 436886 . ? . Parent=repeat_region21 seq15 LTRharvest LTR_retrotransposon 436885 443107 . ? . ID=LTR_retrotransposon21;Parent=repeat_region21 seq15 LTRharvest long_terminal_repeat 436885 437255 . ? . Parent=LTR_retrotransposon21 seq15 LTRharvest long_terminal_repeat 442737 443107 . ? . Parent=LTR_retrotransposon21 seq15 LTRharvest inverted_repeat 437254 437255 . ? . Parent=repeat_region21 seq15 LTRharvest inverted_repeat 442737 442738 . ? . Parent=repeat_region21 seq15 LTRharvest inverted_repeat 443106 443107 . ? . Parent=repeat_region21 seq15 LTRharvest target_site_duplication 443108 443112 . ? . Parent=repeat_region21 ### seq15 LTRharvest repeat_region 804635 810562 . ? . ID=repeat_region22 seq15 LTRharvest target_site_duplication 804635 804639 . ? . Parent=repeat_region22 seq15 LTRharvest inverted_repeat 804640 804641 . ? . Parent=repeat_region22 seq15 LTRharvest LTR_retrotransposon 804640 810557 . ? . ID=LTR_retrotransposon22;Parent=repeat_region22 seq15 LTRharvest long_terminal_repeat 804640 804973 . ? . Parent=LTR_retrotransposon22 seq15 LTRharvest long_terminal_repeat 810224 810557 . ? . Parent=LTR_retrotransposon22 seq15 LTRharvest inverted_repeat 804972 804973 . ? . Parent=repeat_region22 seq15 LTRharvest inverted_repeat 810224 810225 . ? . Parent=repeat_region22 seq15 LTRharvest inverted_repeat 810556 810557 . ? . Parent=repeat_region22 seq15 LTRharvest target_site_duplication 810558 810562 . ? . Parent=repeat_region22 ### seq15 LTRharvest repeat_region 844402 850340 . ? . ID=repeat_region23 seq15 LTRharvest target_site_duplication 844402 844406 . ? . Parent=repeat_region23 seq15 LTRharvest inverted_repeat 844407 844408 . ? . Parent=repeat_region23 seq15 LTRharvest LTR_retrotransposon 844407 850335 . ? . ID=LTR_retrotransposon23;Parent=repeat_region23 seq15 LTRharvest long_terminal_repeat 844407 844744 . ? . Parent=LTR_retrotransposon23 seq15 LTRharvest long_terminal_repeat 849998 850335 . ? . Parent=LTR_retrotransposon23 seq15 LTRharvest inverted_repeat 844743 844744 . ? . Parent=repeat_region23 seq15 LTRharvest inverted_repeat 849998 849999 . ? . Parent=repeat_region23 seq15 LTRharvest inverted_repeat 850334 850335 . ? . Parent=repeat_region23 seq15 LTRharvest target_site_duplication 850336 850340 . ? . Parent=repeat_region23 ### seq15 LTRharvest repeat_region 850619 856554 . ? . ID=repeat_region24 seq15 LTRharvest target_site_duplication 850619 850623 . ? . Parent=repeat_region24 seq15 LTRharvest inverted_repeat 850624 850625 . ? . Parent=repeat_region24 seq15 LTRharvest LTR_retrotransposon 850624 856549 . ? . ID=LTR_retrotransposon24;Parent=repeat_region24 seq15 LTRharvest long_terminal_repeat 850624 850961 . ? . Parent=LTR_retrotransposon24 seq15 LTRharvest long_terminal_repeat 856212 856549 . ? . Parent=LTR_retrotransposon24 seq15 LTRharvest inverted_repeat 850960 850961 . ? . Parent=repeat_region24 seq15 LTRharvest inverted_repeat 856212 856213 . ? . Parent=repeat_region24 seq15 LTRharvest inverted_repeat 856548 856549 . ? . Parent=repeat_region24 seq15 LTRharvest target_site_duplication 856550 856554 . ? . Parent=repeat_region24 ### seq2 LTRharvest repeat_region 84414 90385 . ? . ID=repeat_region25 seq2 LTRharvest target_site_duplication 84414 84418 . ? . Parent=repeat_region25 seq2 LTRharvest inverted_repeat 84419 84420 . ? . Parent=repeat_region25 seq2 LTRharvest LTR_retrotransposon 84419 90380 . ? . ID=LTR_retrotransposon25;Parent=repeat_region25 seq2 LTRharvest long_terminal_repeat 84419 84750 . ? . Parent=LTR_retrotransposon25 seq2 LTRharvest long_terminal_repeat 90049 90380 . ? . Parent=LTR_retrotransposon25 seq2 LTRharvest inverted_repeat 84749 84750 . ? . Parent=repeat_region25 seq2 LTRharvest inverted_repeat 90049 90050 . ? . Parent=repeat_region25 seq2 LTRharvest inverted_repeat 90379 90380 . ? . Parent=repeat_region25 seq2 LTRharvest target_site_duplication 90381 90385 . ? . Parent=repeat_region25 ### seq3 LTRharvest repeat_region 513723 519691 . ? . ID=repeat_region26 seq3 LTRharvest target_site_duplication 513723 513727 . ? . Parent=repeat_region26 seq3 LTRharvest inverted_repeat 513728 513729 . ? . Parent=repeat_region26 seq3 LTRharvest LTR_retrotransposon 513728 519686 . ? . ID=LTR_retrotransposon26;Parent=repeat_region26 seq3 LTRharvest long_terminal_repeat 513728 514059 . ? . Parent=LTR_retrotransposon26 seq3 LTRharvest long_terminal_repeat 519366 519686 . ? . Parent=LTR_retrotransposon26 seq3 LTRharvest inverted_repeat 514058 514059 . ? . Parent=repeat_region26 seq3 LTRharvest inverted_repeat 519366 519367 . ? . Parent=repeat_region26 seq3 LTRharvest inverted_repeat 519685 519686 . ? . Parent=repeat_region26 seq3 LTRharvest target_site_duplication 519687 519691 . ? . Parent=repeat_region26 ### seq3 LTRharvest repeat_region 645535 651462 . ? . ID=repeat_region27 seq3 LTRharvest target_site_duplication 645535 645539 . ? . Parent=repeat_region27 seq3 LTRharvest inverted_repeat 645540 645541 . ? . Parent=repeat_region27 seq3 LTRharvest LTR_retrotransposon 645540 651457 . ? . ID=LTR_retrotransposon27;Parent=repeat_region27 seq3 LTRharvest long_terminal_repeat 645540 645873 . ? . Parent=LTR_retrotransposon27 seq3 LTRharvest long_terminal_repeat 651124 651457 . ? . Parent=LTR_retrotransposon27 seq3 LTRharvest inverted_repeat 645872 645873 . ? . Parent=repeat_region27 seq3 LTRharvest inverted_repeat 651124 651125 . ? . Parent=repeat_region27 seq3 LTRharvest inverted_repeat 651456 651457 . ? . Parent=repeat_region27 seq3 LTRharvest target_site_duplication 651458 651462 . ? . Parent=repeat_region27 ### seq3 LTRharvest repeat_region 871853 877821 . ? . ID=repeat_region28 seq3 LTRharvest target_site_duplication 871853 871857 . ? . Parent=repeat_region28 seq3 LTRharvest inverted_repeat 871858 871859 . ? . Parent=repeat_region28 seq3 LTRharvest LTR_retrotransposon 871858 877816 . ? . ID=LTR_retrotransposon28;Parent=repeat_region28 seq3 LTRharvest long_terminal_repeat 871858 872189 . ? . Parent=LTR_retrotransposon28 seq3 LTRharvest long_terminal_repeat 877476 877816 . ? . Parent=LTR_retrotransposon28 seq3 LTRharvest inverted_repeat 872188 872189 . ? . Parent=repeat_region28 seq3 LTRharvest inverted_repeat 877476 877477 . ? . Parent=repeat_region28 seq3 LTRharvest inverted_repeat 877815 877816 . ? . Parent=repeat_region28 seq3 LTRharvest target_site_duplication 877817 877821 . ? . Parent=repeat_region28 ### seq3 LTRharvest repeat_region 878335 884262 . ? . ID=repeat_region29 seq3 LTRharvest target_site_duplication 878335 878339 . ? . Parent=repeat_region29 seq3 LTRharvest inverted_repeat 878340 878341 . ? . Parent=repeat_region29 seq3 LTRharvest LTR_retrotransposon 878340 884257 . ? . ID=LTR_retrotransposon29;Parent=repeat_region29 seq3 LTRharvest long_terminal_repeat 878340 878673 . ? . Parent=LTR_retrotransposon29 seq3 LTRharvest long_terminal_repeat 883924 884257 . ? . Parent=LTR_retrotransposon29 seq3 LTRharvest inverted_repeat 878672 878673 . ? . Parent=repeat_region29 seq3 LTRharvest inverted_repeat 883924 883925 . ? . Parent=repeat_region29 seq3 LTRharvest inverted_repeat 884256 884257 . ? . Parent=repeat_region29 seq3 LTRharvest target_site_duplication 884258 884262 . ? . Parent=repeat_region29 ### seq3 LTRharvest repeat_region 981202 987170 . ? . ID=repeat_region30 seq3 LTRharvest target_site_duplication 981202 981206 . ? . Parent=repeat_region30 seq3 LTRharvest inverted_repeat 981207 981208 . ? . Parent=repeat_region30 seq3 LTRharvest LTR_retrotransposon 981207 987165 . ? . ID=LTR_retrotransposon30;Parent=repeat_region30 seq3 LTRharvest long_terminal_repeat 981207 981538 . ? . Parent=LTR_retrotransposon30 seq3 LTRharvest long_terminal_repeat 986834 987165 . ? . Parent=LTR_retrotransposon30 seq3 LTRharvest inverted_repeat 981537 981538 . ? . Parent=repeat_region30 seq3 LTRharvest inverted_repeat 986834 986835 . ? . Parent=repeat_region30 seq3 LTRharvest inverted_repeat 987164 987165 . ? . Parent=repeat_region30 seq3 LTRharvest target_site_duplication 987166 987170 . ? . Parent=repeat_region30 ### seq3 LTRharvest repeat_region 987181 992683 . ? . ID=repeat_region31 seq3 LTRharvest target_site_duplication 987181 987185 . ? . Parent=repeat_region31 seq3 LTRharvest inverted_repeat 987186 987187 . ? . Parent=repeat_region31 seq3 LTRharvest LTR_retrotransposon 987186 992678 . ? . ID=LTR_retrotransposon31;Parent=repeat_region31 seq3 LTRharvest long_terminal_repeat 987186 987519 . ? . Parent=LTR_retrotransposon31 seq3 LTRharvest long_terminal_repeat 992345 992678 . ? . Parent=LTR_retrotransposon31 seq3 LTRharvest inverted_repeat 987518 987519 . ? . Parent=repeat_region31 seq3 LTRharvest inverted_repeat 992345 992346 . ? . Parent=repeat_region31 seq3 LTRharvest inverted_repeat 992677 992678 . ? . Parent=repeat_region31 seq3 LTRharvest target_site_duplication 992679 992683 . ? . Parent=repeat_region31 ### seq3 LTRharvest repeat_region 1095799 1101734 . ? . ID=repeat_region32 seq3 LTRharvest target_site_duplication 1095799 1095803 . ? . Parent=repeat_region32 seq3 LTRharvest inverted_repeat 1095804 1095805 . ? . Parent=repeat_region32 seq3 LTRharvest LTR_retrotransposon 1095804 1101729 . ? . ID=LTR_retrotransposon32;Parent=repeat_region32 seq3 LTRharvest long_terminal_repeat 1095804 1096141 . ? . Parent=LTR_retrotransposon32 seq3 LTRharvest long_terminal_repeat 1101392 1101729 . ? . Parent=LTR_retrotransposon32 seq3 LTRharvest inverted_repeat 1096140 1096141 . ? . Parent=repeat_region32 seq3 LTRharvest inverted_repeat 1101392 1101393 . ? . Parent=repeat_region32 seq3 LTRharvest inverted_repeat 1101728 1101729 . ? . Parent=repeat_region32 seq3 LTRharvest target_site_duplication 1101730 1101734 . ? . Parent=repeat_region32 ### seq3 LTRharvest repeat_region 1206733 1212660 . ? . ID=repeat_region33 seq3 LTRharvest target_site_duplication 1206733 1206737 . ? . Parent=repeat_region33 seq3 LTRharvest inverted_repeat 1206738 1206739 . ? . Parent=repeat_region33 seq3 LTRharvest LTR_retrotransposon 1206738 1212655 . ? . ID=LTR_retrotransposon33;Parent=repeat_region33 seq3 LTRharvest long_terminal_repeat 1206738 1207071 . ? . Parent=LTR_retrotransposon33 seq3 LTRharvest long_terminal_repeat 1212322 1212655 . ? . Parent=LTR_retrotransposon33 seq3 LTRharvest inverted_repeat 1207070 1207071 . ? . Parent=repeat_region33 seq3 LTRharvest inverted_repeat 1212322 1212323 . ? . Parent=repeat_region33 seq3 LTRharvest inverted_repeat 1212654 1212655 . ? . Parent=repeat_region33 seq3 LTRharvest target_site_duplication 1212656 1212660 . ? . Parent=repeat_region33 ### seq4 LTRharvest repeat_region 443389 449322 . ? . ID=repeat_region34 seq4 LTRharvest target_site_duplication 443389 443393 . ? . Parent=repeat_region34 seq4 LTRharvest inverted_repeat 443394 443395 . ? . Parent=repeat_region34 seq4 LTRharvest LTR_retrotransposon 443394 449317 . ? . ID=LTR_retrotransposon34;Parent=repeat_region34 seq4 LTRharvest long_terminal_repeat 443394 443735 . ? . Parent=LTR_retrotransposon34 seq4 LTRharvest long_terminal_repeat 448981 449317 . ? . Parent=LTR_retrotransposon34 seq4 LTRharvest inverted_repeat 443734 443735 . ? . Parent=repeat_region34 seq4 LTRharvest inverted_repeat 448981 448982 . ? . Parent=repeat_region34 seq4 LTRharvest inverted_repeat 449316 449317 . ? . Parent=repeat_region34 seq4 LTRharvest target_site_duplication 449318 449322 . ? . Parent=repeat_region34 ### seq5 LTRharvest repeat_region 137902 143870 . ? . ID=repeat_region35 seq5 LTRharvest target_site_duplication 137902 137906 . ? . Parent=repeat_region35 seq5 LTRharvest inverted_repeat 137907 137908 . ? . Parent=repeat_region35 seq5 LTRharvest LTR_retrotransposon 137907 143865 . ? . ID=LTR_retrotransposon35;Parent=repeat_region35 seq5 LTRharvest long_terminal_repeat 137907 138238 . ? . Parent=LTR_retrotransposon35 seq5 LTRharvest long_terminal_repeat 143534 143865 . ? . Parent=LTR_retrotransposon35 seq5 LTRharvest inverted_repeat 138237 138238 . ? . Parent=repeat_region35 seq5 LTRharvest inverted_repeat 143534 143535 . ? . Parent=repeat_region35 seq5 LTRharvest inverted_repeat 143864 143865 . ? . Parent=repeat_region35 seq5 LTRharvest target_site_duplication 143866 143870 . ? . Parent=repeat_region35 ### seq6 LTRharvest repeat_region 535749 541684 . ? . ID=repeat_region36 seq6 LTRharvest target_site_duplication 535749 535753 . ? . Parent=repeat_region36 seq6 LTRharvest inverted_repeat 535754 535755 . ? . Parent=repeat_region36 seq6 LTRharvest LTR_retrotransposon 535754 541679 . ? . ID=LTR_retrotransposon36;Parent=repeat_region36 seq6 LTRharvest long_terminal_repeat 535754 536091 . ? . Parent=LTR_retrotransposon36 seq6 LTRharvest long_terminal_repeat 541342 541679 . ? . Parent=LTR_retrotransposon36 seq6 LTRharvest inverted_repeat 536090 536091 . ? . Parent=repeat_region36 seq6 LTRharvest inverted_repeat 541342 541343 . ? . Parent=repeat_region36 seq6 LTRharvest inverted_repeat 541678 541679 . ? . Parent=repeat_region36 seq6 LTRharvest target_site_duplication 541680 541684 . ? . Parent=repeat_region36 ### seq6 LTRharvest repeat_region 561832 567759 . ? . ID=repeat_region37 seq6 LTRharvest target_site_duplication 561832 561836 . ? . Parent=repeat_region37 seq6 LTRharvest inverted_repeat 561837 561838 . ? . Parent=repeat_region37 seq6 LTRharvest LTR_retrotransposon 561837 567754 . ? . ID=LTR_retrotransposon37;Parent=repeat_region37 seq6 LTRharvest long_terminal_repeat 561837 562170 . ? . Parent=LTR_retrotransposon37 seq6 LTRharvest long_terminal_repeat 567421 567754 . ? . Parent=LTR_retrotransposon37 seq6 LTRharvest inverted_repeat 562169 562170 . ? . Parent=repeat_region37 seq6 LTRharvest inverted_repeat 567421 567422 . ? . Parent=repeat_region37 seq6 LTRharvest inverted_repeat 567753 567754 . ? . Parent=repeat_region37 seq6 LTRharvest target_site_duplication 567755 567759 . ? . Parent=repeat_region37 ### seq6 LTRharvest repeat_region 568730 574699 . ? . ID=repeat_region38 seq6 LTRharvest target_site_duplication 568730 568734 . ? . Parent=repeat_region38 seq6 LTRharvest inverted_repeat 568735 568736 . ? . Parent=repeat_region38 seq6 LTRharvest LTR_retrotransposon 568735 574694 . ? . ID=LTR_retrotransposon38;Parent=repeat_region38 seq6 LTRharvest long_terminal_repeat 568735 569066 . ? . Parent=LTR_retrotransposon38 seq6 LTRharvest long_terminal_repeat 574363 574694 . ? . Parent=LTR_retrotransposon38 seq6 LTRharvest inverted_repeat 569065 569066 . ? . Parent=repeat_region38 seq6 LTRharvest inverted_repeat 574363 574364 . ? . Parent=repeat_region38 seq6 LTRharvest inverted_repeat 574693 574694 . ? . Parent=repeat_region38 seq6 LTRharvest target_site_duplication 574695 574699 . ? . Parent=repeat_region38 ### seq6 LTRharvest repeat_region 707184 712544 . ? . ID=repeat_region39 seq6 LTRharvest target_site_duplication 707184 707188 . ? . Parent=repeat_region39 seq6 LTRharvest inverted_repeat 707189 707190 . ? . Parent=repeat_region39 seq6 LTRharvest LTR_retrotransposon 707189 712539 . ? . ID=LTR_retrotransposon39;Parent=repeat_region39 seq6 LTRharvest long_terminal_repeat 707189 707528 . ? . Parent=LTR_retrotransposon39 seq6 LTRharvest long_terminal_repeat 712200 712539 . ? . Parent=LTR_retrotransposon39 seq6 LTRharvest inverted_repeat 707527 707528 . ? . Parent=repeat_region39 seq6 LTRharvest inverted_repeat 712200 712201 . ? . Parent=repeat_region39 seq6 LTRharvest inverted_repeat 712538 712539 . ? . Parent=repeat_region39 seq6 LTRharvest target_site_duplication 712540 712544 . ? . Parent=repeat_region39 ### seq6 LTRharvest repeat_region 817382 823305 . ? . ID=repeat_region40 seq6 LTRharvest target_site_duplication 817382 817386 . ? . Parent=repeat_region40 seq6 LTRharvest inverted_repeat 817387 817388 . ? . Parent=repeat_region40 seq6 LTRharvest LTR_retrotransposon 817387 823300 . ? . ID=LTR_retrotransposon40;Parent=repeat_region40 seq6 LTRharvest long_terminal_repeat 817387 817718 . ? . Parent=LTR_retrotransposon40 seq6 LTRharvest long_terminal_repeat 822969 823300 . ? . Parent=LTR_retrotransposon40 seq6 LTRharvest inverted_repeat 817717 817718 . ? . Parent=repeat_region40 seq6 LTRharvest inverted_repeat 822969 822970 . ? . Parent=repeat_region40 seq6 LTRharvest inverted_repeat 823299 823300 . ? . Parent=repeat_region40 seq6 LTRharvest target_site_duplication 823301 823305 . ? . Parent=repeat_region40 ### seq7 LTRharvest repeat_region 85529 91761 . ? . ID=repeat_region41 seq7 LTRharvest target_site_duplication 85529 85533 . ? . Parent=repeat_region41 seq7 LTRharvest inverted_repeat 85534 85535 . ? . Parent=repeat_region41 seq7 LTRharvest LTR_retrotransposon 85534 91756 . ? . ID=LTR_retrotransposon41;Parent=repeat_region41 seq7 LTRharvest long_terminal_repeat 85534 85904 . ? . Parent=LTR_retrotransposon41 seq7 LTRharvest long_terminal_repeat 91386 91756 . ? . Parent=LTR_retrotransposon41 seq7 LTRharvest inverted_repeat 85903 85904 . ? . Parent=repeat_region41 seq7 LTRharvest inverted_repeat 91386 91387 . ? . Parent=repeat_region41 seq7 LTRharvest inverted_repeat 91755 91756 . ? . Parent=repeat_region41 seq7 LTRharvest target_site_duplication 91757 91761 . ? . Parent=repeat_region41 ### seq7 LTRharvest repeat_region 543600 549637 . ? . ID=repeat_region42 seq7 LTRharvest target_site_duplication 543600 543604 . ? . Parent=repeat_region42 seq7 LTRharvest inverted_repeat 543605 543606 . ? . Parent=repeat_region42 seq7 LTRharvest LTR_retrotransposon 543605 549632 . ? . ID=LTR_retrotransposon42;Parent=repeat_region42 seq7 LTRharvest long_terminal_repeat 543605 543936 . ? . Parent=LTR_retrotransposon42 seq7 LTRharvest long_terminal_repeat 549301 549632 . ? . Parent=LTR_retrotransposon42 seq7 LTRharvest inverted_repeat 543935 543936 . ? . Parent=repeat_region42 seq7 LTRharvest inverted_repeat 549301 549302 . ? . Parent=repeat_region42 seq7 LTRharvest inverted_repeat 549631 549632 . ? . Parent=repeat_region42 seq7 LTRharvest target_site_duplication 549633 549637 . ? . Parent=repeat_region42 ### seq8 LTRharvest repeat_region 205212 210649 . ? . ID=repeat_region43 seq8 LTRharvest target_site_duplication 205212 205216 . ? . Parent=repeat_region43 seq8 LTRharvest inverted_repeat 205217 205218 . ? . Parent=repeat_region43 seq8 LTRharvest LTR_retrotransposon 205217 210644 . ? . ID=LTR_retrotransposon43;Parent=repeat_region43 seq8 LTRharvest long_terminal_repeat 205217 205556 . ? . Parent=LTR_retrotransposon43 seq8 LTRharvest long_terminal_repeat 210305 210644 . ? . Parent=LTR_retrotransposon43 seq8 LTRharvest inverted_repeat 205555 205556 . ? . Parent=repeat_region43 seq8 LTRharvest inverted_repeat 210305 210306 . ? . Parent=repeat_region43 seq8 LTRharvest inverted_repeat 210643 210644 . ? . Parent=repeat_region43 seq8 LTRharvest target_site_duplication 210645 210649 . ? . Parent=repeat_region43 ### seq9 LTRharvest repeat_region 197239 203474 . ? . ID=repeat_region44 seq9 LTRharvest target_site_duplication 197239 197243 . ? . Parent=repeat_region44 seq9 LTRharvest inverted_repeat 197244 197245 . ? . Parent=repeat_region44 seq9 LTRharvest LTR_retrotransposon 197244 203469 . ? . ID=LTR_retrotransposon44;Parent=repeat_region44 seq9 LTRharvest long_terminal_repeat 197244 197614 . ? . Parent=LTR_retrotransposon44 seq9 LTRharvest long_terminal_repeat 203099 203469 . ? . Parent=LTR_retrotransposon44 seq9 LTRharvest inverted_repeat 197613 197614 . ? . Parent=repeat_region44 seq9 LTRharvest inverted_repeat 203099 203100 . ? . Parent=repeat_region44 seq9 LTRharvest inverted_repeat 203468 203469 . ? . Parent=repeat_region44 seq9 LTRharvest target_site_duplication 203470 203474 . ? . Parent=repeat_region44 ### seq9 LTRharvest repeat_region 472146 483665 . ? . ID=repeat_region45 seq9 LTRharvest target_site_duplication 472146 472150 . ? . Parent=repeat_region45 seq9 LTRharvest inverted_repeat 472151 472152 . ? . Parent=repeat_region45 seq9 LTRharvest LTR_retrotransposon 472151 483660 . ? . ID=LTR_retrotransposon45;Parent=repeat_region45 seq9 LTRharvest long_terminal_repeat 472151 472488 . ? . Parent=LTR_retrotransposon45 seq9 LTRharvest long_terminal_repeat 483323 483660 . ? . Parent=LTR_retrotransposon45 seq9 LTRharvest inverted_repeat 472487 472488 . ? . Parent=repeat_region45 seq9 LTRharvest inverted_repeat 483323 483324 . ? . Parent=repeat_region45 seq9 LTRharvest inverted_repeat 483659 483660 . ? . Parent=repeat_region45 seq9 LTRharvest target_site_duplication 483661 483665 . ? . Parent=repeat_region45 ### genometools-1.5.1/testdata/gt_eval_ltr_test_1.out000066400000000000000000000002041211610345200221630ustar00rootroot00000000000000LTR_retrotransposon sensitivity: 100.00% (45/45) (missing LTRs: 0) LTR_retrotransposon specificity: 100.00% (45/45) (wrong LTRs: 0) genometools-1.5.1/testdata/gt_eval_ltr_test_2.out000066400000000000000000000002001211610345200221600ustar00rootroot00000000000000LTR_retrotransposon sensitivity: 100.00% (1/1) (missing LTRs: 0) LTR_retrotransposon specificity: 100.00% (1/1) (wrong LTRs: 0) genometools-1.5.1/testdata/gt_eval_ltr_test_2.prediction000066400000000000000000000002441211610345200235210ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region gDNA . LTR_retrotransposon 100 200 . - . Parent=repeat_region genometools-1.5.1/testdata/gt_eval_ltr_test_2.reality000066400000000000000000000002441211610345200230320ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region gDNA . LTR_retrotransposon 100 200 . - . Parent=repeat_region genometools-1.5.1/testdata/gt_eval_ltr_test_3.out000066400000000000000000000002001211610345200221610ustar00rootroot00000000000000LTR_retrotransposon sensitivity: 50.00% (1/2) (missing LTRs: 1) LTR_retrotransposon specificity: 100.00% (1/1) (wrong LTRs: 0) genometools-1.5.1/testdata/gt_eval_ltr_test_3.prediction000066400000000000000000000002541211610345200235230ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region gDNA . LTR_retrotransposon 100 200 . - . ID=mRNA;Parent=repeat_region genometools-1.5.1/testdata/gt_eval_ltr_test_3.reality000066400000000000000000000004321211610345200230320ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region1 gDNA . LTR_retrotransposon 100 200 . - . Parent=repeat_region1 gDNA . repeat_region 300 400 . - . ID=repeat_region2 gDNA . LTR_retrotransposon 300 400 . - . Parent=repeat_region2 genometools-1.5.1/testdata/gt_eval_ltr_test_4.out000066400000000000000000000002001211610345200221620ustar00rootroot00000000000000LTR_retrotransposon sensitivity: 100.00% (1/1) (missing LTRs: 0) LTR_retrotransposon specificity: 50.00% (1/2) (wrong LTRs: 1) genometools-1.5.1/testdata/gt_eval_ltr_test_4.prediction000066400000000000000000000004321211610345200235220ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region1 gDNA . LTR_retrotransposon 100 200 . - . Parent=repeat_region1 gDNA . repeat_region 300 400 . - . ID=repeat_region2 gDNA . LTR_retrotransposon 300 400 . - . Parent=repeat_region2 genometools-1.5.1/testdata/gt_eval_ltr_test_4.reality000066400000000000000000000002541211610345200230350ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region gDNA . LTR_retrotransposon 100 200 . - . ID=mRNA;Parent=repeat_region genometools-1.5.1/testdata/gt_eval_ltr_test_5.out000066400000000000000000000002001211610345200221630ustar00rootroot00000000000000LTR_retrotransposon sensitivity: 0.00% (0/1) (missing LTRs: 1) LTR_retrotransposon specificity: 100.00% (0/0) (wrong LTRs: 0) genometools-1.5.1/testdata/gt_eval_ltr_test_5.prediction000066400000000000000000000000621211610345200235220ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 genometools-1.5.1/testdata/gt_eval_ltr_test_5.reality000066400000000000000000000002441211610345200230350ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region gDNA . LTR_retrotransposon 100 200 . - . Parent=repeat_region genometools-1.5.1/testdata/gt_eval_ltr_test_6.out000066400000000000000000000002001211610345200221640ustar00rootroot00000000000000LTR_retrotransposon sensitivity: 100.00% (0/0) (missing LTRs: 0) LTR_retrotransposon specificity: 0.00% (0/1) (wrong LTRs: 1) genometools-1.5.1/testdata/gt_eval_ltr_test_6.prediction000066400000000000000000000002441211610345200235250ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region gDNA . LTR_retrotransposon 100 200 . - . Parent=repeat_region genometools-1.5.1/testdata/gt_eval_ltr_test_6.reality000066400000000000000000000000621211610345200230340ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 genometools-1.5.1/testdata/gt_eval_ltr_test_7.out000066400000000000000000000002001211610345200221650ustar00rootroot00000000000000LTR_retrotransposon sensitivity: 100.00% (1/1) (missing LTRs: 0) LTR_retrotransposon specificity: 100.00% (1/1) (wrong LTRs: 0) genometools-1.5.1/testdata/gt_eval_ltr_test_7.prediction000066400000000000000000000002421211610345200235240ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 80 220 . - . ID=repeat_region gDNA . LTR_retrotransposon 80 220 . - . Parent=repeat_region genometools-1.5.1/testdata/gt_eval_ltr_test_7.reality000066400000000000000000000002441211610345200230370ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region gDNA . LTR_retrotransposon 100 200 . - . Parent=repeat_region genometools-1.5.1/testdata/gt_eval_ltr_test_8.out000066400000000000000000000002001211610345200221660ustar00rootroot00000000000000LTR_retrotransposon sensitivity: 50.00% (1/2) (missing LTRs: 1) LTR_retrotransposon specificity: 100.00% (1/1) (wrong LTRs: 0) genometools-1.5.1/testdata/gt_eval_ltr_test_8.prediction000066400000000000000000000002421211610345200235250ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 80 220 . - . ID=repeat_region gDNA . LTR_retrotransposon 80 220 . - . Parent=repeat_region genometools-1.5.1/testdata/gt_eval_ltr_test_8.reality000066400000000000000000000004321211610345200230370ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region1 gDNA . LTR_retrotransposon 100 200 . - . Parent=repeat_region1 gDNA . repeat_region 300 400 . - . ID=repeat_region2 gDNA . LTR_retrotransposon 300 400 . - . Parent=repeat_region2 genometools-1.5.1/testdata/gt_eval_ltr_test_9.out000066400000000000000000000002001211610345200221670ustar00rootroot00000000000000LTR_retrotransposon sensitivity: 100.00% (1/1) (missing LTRs: 0) LTR_retrotransposon specificity: 50.00% (1/2) (wrong LTRs: 1) genometools-1.5.1/testdata/gt_eval_ltr_test_9.prediction000066400000000000000000000004301211610345200235250ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 80 220 . - . ID=repeat_region1 gDNA . LTR_retrotransposon 80 220 . - . Parent=repeat_region1 gDNA . repeat_region 300 400 . - . ID=repeat_region2 gDNA . LTR_retrotransposon 300 400 . - . Parent=repeat_region2 genometools-1.5.1/testdata/gt_eval_ltr_test_9.reality000066400000000000000000000002441211610345200230410ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . repeat_region 100 200 . - . ID=repeat_region gDNA . LTR_retrotransposon 100 200 . - . Parent=repeat_region genometools-1.5.1/testdata/gt_eval_prob_1.out000066400000000000000000000054341211610345200212770ustar00rootroot00000000000000gene sensitivity (mRNA level): 0.00% (0/7) (missing genes: 3) gene specificity (mRNA level): 0.00% (0/4) (wrong genes: 2) gene sensitivity (CDS level): 0.00% (0/7) (missing genes: 3) gene specificity (CDS level): 0.00% (0/4) (wrong genes: 2) mRNA sensitivity (mRNA level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (mRNA level): 100.00% (0/0) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (CDS level): 100.00% (0/0) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 0.00% (0/32) exon specificity (mRNA level, all): 100.00% (0/0) exon sensitivity (mRNA level, single): 0.00% (0/3) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 0.00% (0/4) exon specificity (mRNA level, initial): 100.00% (0/0) exon sensitivity (mRNA level, internal): 0.00% (0/21) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 0.00% (0/4) exon specificity (mRNA level, terminal): 100.00% (0/0) exon sensitivity (mRNA level, all, collapsed): 0.00% (0/18) exon specificity (mRNA level, all, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, single, collapsed): 0.00% (0/2) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 0.00% (0/4) exon specificity (mRNA level, initial, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, internal, collapsed): 0.00% (0/10) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 0.00% (0/2) exon specificity (mRNA level, terminal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, all): 100.00% (0/0) exon specificity (CDS level, all): 0.00% (0/13) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 0.00% (0/13) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 100.00% (0/0) exon specificity (CDS level, all, collapsed): 0.00% (0/13) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 0.00% (0/13) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) genometools-1.5.1/testdata/gt_eval_prob_1.out_swapped000066400000000000000000000054341211610345200230220ustar00rootroot00000000000000gene sensitivity (mRNA level): 0.00% (0/4) (missing genes: 2) gene specificity (mRNA level): 0.00% (0/7) (wrong genes: 3) gene sensitivity (CDS level): 0.00% (0/4) (missing genes: 2) gene specificity (CDS level): 0.00% (0/7) (wrong genes: 3) mRNA sensitivity (mRNA level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (mRNA level): 100.00% (0/0) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (CDS level): 100.00% (0/0) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (0/0) exon specificity (mRNA level, all): 0.00% (0/32) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 0.00% (0/3) exon sensitivity (mRNA level, initial): 100.00% (0/0) exon specificity (mRNA level, initial): 0.00% (0/4) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 0.00% (0/21) exon sensitivity (mRNA level, terminal): 100.00% (0/0) exon specificity (mRNA level, terminal): 0.00% (0/4) exon sensitivity (mRNA level, all, collapsed): 100.00% (0/0) exon specificity (mRNA level, all, collapsed): 0.00% (0/18) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 0.00% (0/2) exon sensitivity (mRNA level, initial, collapsed): 100.00% (0/0) exon specificity (mRNA level, initial, collapsed): 0.00% (0/4) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 0.00% (0/10) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (0/0) exon specificity (mRNA level, terminal, collapsed): 0.00% (0/2) exon sensitivity (CDS level, all): 0.00% (0/13) exon specificity (CDS level, all): 100.00% (0/0) exon sensitivity (CDS level, single): 0.00% (0/13) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 0.00% (0/13) exon specificity (CDS level, all, collapsed): 100.00% (0/0) exon sensitivity (CDS level, single, collapsed): 0.00% (0/13) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) genometools-1.5.1/testdata/gt_eval_prob_1.prediction000066400000000000000000000027771211610345200226370ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr8 118886142 119354298 # # chr8 AUGUSTUS CDS 118886142 118886313 . - 1 gene_id="g1";transcript_id="g1.t1" chr8 AUGUSTUS gene 118886142 118926734 1.000000 - . . chr8 AUGUSTUS transcript 118886142 118926734 . - . . chr8 AUGUSTUS CDS 118888637 118888797 . - 0 gene_id="g1";transcript_id="g1.t1" chr8 AUGUSTUS CDS 118894292 118894381 . - 0 gene_id="g1";transcript_id="g1.t1" chr8 AUGUSTUS CDS 118899855 118899950 . - 0 gene_id="g1";transcript_id="g1.t1" chr8 AUGUSTUS CDS 118901096 118901214 . - 2 gene_id="g1";transcript_id="g1.t1" chr8 AUGUSTUS CDS 118903885 118904017 . - 0 gene_id="g1";transcript_id="g1.t1" chr8 AUGUSTUS CDS 118916864 118916971 . - 0 gene_id="g1";transcript_id="g1.t1" chr8 AUGUSTUS CDS 118918528 118918621 . - 1 gene_id="g1";transcript_id="g1.t1" chr8 AUGUSTUS CDS 118926685 118926734 . - 0 gene_id="g1";transcript_id="g1.t1" chr8 AUGUSTUS gene 119191501 119192466 1.000000 - . . chr8 AUGUSTUS transcript 119191501 119192466 . - . . chr8 AUGUSTUS CDS 119191501 119192466 . - 0 gene_id="g2";transcript_id="g2.t1" chr8 AUGUSTUS CDS 119192825 119192837 . + 0 gene_id="g3";transcript_id="g3.t1" chr8 AUGUSTUS gene 119192825 119193688 1.000000 + . . chr8 AUGUSTUS transcript 119192825 119193688 . + . . chr8 AUGUSTUS CDS 119193042 119193688 . + 2 gene_id="g3";transcript_id="g3.t1" chr8 AUGUSTUS gene 119353885 119354298 1.000000 - . . chr8 AUGUSTUS transcript 119353885 119354298 . - . . chr8 AUGUSTUS CDS 119353885 119354298 . - 0 gene_id="g4";transcript_id="g4.t1" genometools-1.5.1/testdata/gt_eval_prob_1.reality000066400000000000000000000046461211610345200221450ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr8 118886142 119279152 chr8 ENCODE gene 118886142 119192762 . - . ID=gene1;Name=AC113188.1-004;name2=EXT1 chr8 ENCODE exon 118886142 118886313 . - . Parent=gene1 chr8 ENCODE exon 118888637 118888797 . - . Parent=gene1 chr8 ENCODE exon 118894292 118894381 . - . Parent=gene1 chr8 ENCODE exon 118899855 118899950 . - . Parent=gene1 chr8 ENCODE exon 118901096 118901214 . - . Parent=gene1 chr8 ENCODE exon 118903885 118904017 . - . Parent=gene1 chr8 ENCODE exon 118911650 118911769 . - . Parent=gene1 chr8 ENCODE exon 118916864 118916971 . - . Parent=gene1 chr8 ENCODE exon 119192394 119192762 . - . Parent=gene1 ### chr8 ENCODE gene 118886142 119192806 . - . ID=gene2;Name=AC113188.1-002;name2=EXT1 chr8 ENCODE exon 118886142 118886313 . - . Parent=gene2 chr8 ENCODE exon 118888637 118888797 . - . Parent=gene2 chr8 ENCODE exon 118894292 118894381 . - . Parent=gene2 chr8 ENCODE exon 118899855 118899880 . - . Parent=gene2 chr8 ENCODE exon 119191651 119192806 . - . Parent=gene2 ### chr8 ENCODE gene 118886142 119193119 . - . ID=gene3;Name=AC113188.1-001;name2=EXT1 chr8 ENCODE exon 118886142 118886313 . - . Parent=gene3 chr8 ENCODE exon 118888637 118888797 . - . Parent=gene3 chr8 ENCODE exon 118894292 118894381 . - . Parent=gene3 chr8 ENCODE exon 118899855 118899950 . - . Parent=gene3 chr8 ENCODE exon 118901096 118901214 . - . Parent=gene3 chr8 ENCODE exon 118903885 118904017 . - . Parent=gene3 chr8 ENCODE exon 118911650 118911769 . - . Parent=gene3 chr8 ENCODE exon 118916864 118916971 . - . Parent=gene3 chr8 ENCODE exon 118918528 118918621 . - . Parent=gene3 chr8 ENCODE exon 119191505 119193119 . - . Parent=gene3 ### chr8 ENCODE gene 118911657 119191834 . - . ID=gene4;Name=AC113188.1-003;name2=EXT1 chr8 ENCODE exon 118911657 118911769 . - . Parent=gene4 chr8 ENCODE exon 118913019 118913073 . - . Parent=gene4 chr8 ENCODE exon 118916864 118916971 . - . Parent=gene4 chr8 ENCODE exon 118918528 118918621 . - . Parent=gene4 chr8 ENCODE exon 119191505 119191834 . - . Parent=gene4 ### chr8 ENCODE gene 119276307 119279152 . - . ID=gene5;Name=AC023590.2-005;name2=SAMD12 chr8 ENCODE exon 119276307 119279152 . - . Parent=gene5 ### chr8 ENCODE gene 119276307 119279152 . - . ID=gene6;Name=AC023590.2-003;name2=SAMD12 chr8 ENCODE exon 119276307 119279152 . - . Parent=gene6 ### chr8 ENCODE gene 119278740 119279152 . - . ID=gene7;Name=AC023590.2-004;name2=SAMD12 chr8 ENCODE exon 119278740 119279152 . - . Parent=gene7 ### genometools-1.5.1/testdata/gt_eval_test_1.in000066400000000000000000000414351211610345200211140ustar00rootroot00000000000000##gff-version 3 ##sequence-region ENm001 1 1500000 ENm001 gth gene 63867 87012 1.000000 + . ID=gene1 ENm001 gth exon 86827 87012 1.000000 + . Parent=gene1 ENm001 gth exon 81851 82009 1.000000 + . Parent=gene1 ENm001 gth exon 81293 81508 1.000000 + . Parent=gene1 ENm001 gth exon 79694 80029 1.000000 + . Parent=gene1 ENm001 gth exon 78553 78805 1.000000 + . Parent=gene1 ENm001 gth exon 64067 64152 1.000000 + . Parent=gene1 ENm001 gth exon 63867 63893 0.196078 + . Parent=gene1 ### ENm001 gth gene 78298 87012 0.883554 + . ID=gene2 ENm001 gth exon 86827 87012 0.960317 + . Parent=gene2 ENm001 gth exon 81851 82009 0.938776 + . Parent=gene2 ENm001 gth exon 81293 81508 0.899756 + . Parent=gene2 ENm001 gth exon 79694 80029 0.810409 + . Parent=gene2 ENm001 gth exon 78553 78805 0.883152 + . Parent=gene2 ENm001 gth exon 78298 78301 1.000000 + . Parent=gene2 ### ENm001 gth gene 286309 286912 0.663080 + . ID=gene3 ENm001 gth exon 286309 286912 0.663080 + . Parent=gene3 ### ENm001 gth gene 286309 287101 0.547515 + . ID=gene4 ENm001 gth exon 287066 287101 0.223881 + . Parent=gene4 ENm001 gth exon 286309 286974 0.547515 + . Parent=gene4 ### ENm001 gth gene 329315 335651 1.000000 + . ID=gene5 ENm001 gth exon 335504 335651 1.000000 + . Parent=gene5 ENm001 gth exon 329793 329980 1.000000 + . Parent=gene5 ENm001 gth exon 329315 329464 1.000000 + . Parent=gene5 ### ENm001 gth gene 329315 335651 0.796171 + . ID=gene6 ENm001 gth exon 335504 335651 0.900383 + . Parent=gene6 ENm001 gth exon 329793 329980 0.715789 + . Parent=gene6 ENm001 gth exon 329315 329451 0.809717 + . Parent=gene6 ### ENm001 gth gene 329315 335651 0.795647 + . ID=gene7 ENm001 gth exon 335504 335651 0.861660 + . Parent=gene7 ENm001 gth exon 329793 329980 0.815790 + . Parent=gene7 ENm001 gth exon 329315 329464 0.711111 + . Parent=gene7 ### ENm001 gth gene 329315 335651 0.859504 + . ID=gene8 ENm001 gth exon 335504 335651 0.896825 + . Parent=gene8 ENm001 gth exon 329793 329980 0.852761 + . Parent=gene8 ENm001 gth exon 329315 329458 0.832714 + . Parent=gene8 ### ENm001 gth gene 356027 388817 0.810929 + . ID=gene9 ENm001 gth exon 388479 388817 0.883275 + . Parent=gene9 ENm001 gth exon 356027 356222 0.689150 + . Parent=gene9 ### ENm001 gth gene 356028 388817 0.897489 + . ID=gene10 ENm001 gth exon 388479 388817 0.941957 + . Parent=gene10 ENm001 gth exon 356028 356222 0.821530 + . Parent=gene10 ### ENm001 gth gene 356028 388817 0.900932 + . ID=gene11 ENm001 gth exon 388479 388817 0.968379 + . Parent=gene11 ENm001 gth exon 356028 356222 0.803977 + . Parent=gene11 ### ENm001 gth gene 356028 388817 0.895961 + . ID=gene12 ENm001 gth exon 388479 388817 0.959432 + . Parent=gene12 ENm001 gth exon 356028 356222 0.799383 + . Parent=gene12 ### ENm001 gth gene 356028 388817 0.900932 + . ID=gene13 ENm001 gth exon 388479 388817 0.968379 + . Parent=gene13 ENm001 gth exon 356028 356222 0.803977 + . Parent=gene13 ### ENm001 gth gene 356028 388817 0.902720 + . ID=gene14 ENm001 gth exon 388479 388817 0.950249 + . Parent=gene14 ENm001 gth exon 356028 356222 0.821530 + . Parent=gene14 ### ENm001 gth gene 356031 388817 0.938775 + . ID=gene15 ENm001 gth exon 388479 388817 1.000000 + . Parent=gene15 ENm001 gth exon 356031 356222 0.866142 + . Parent=gene15 ### ENm001 gth gene 468516 468738 0.704600 + . ID=gene16 ENm001 gth exon 468516 468738 0.704600 + . Parent=gene16 ### ENm001 gth gene 468516 468738 0.730583 + . ID=gene17 ENm001 gth exon 468516 468738 0.730583 + . Parent=gene17 ### ENm001 gth gene 528618 625654 0.999442 + . ID=gene18 ENm001 gth exon 625420 625654 1.000000 + . Parent=gene18 ENm001 gth exon 625188 625324 0.981651 + . Parent=gene18 ENm001 gth exon 612837 613002 1.000000 + . Parent=gene18 ENm001 gth exon 611521 611630 1.000000 + . Parent=gene18 ENm001 gth exon 608309 608490 1.000000 + . Parent=gene18 ENm001 gth exon 606922 607002 1.000000 + . Parent=gene18 ENm001 gth exon 604414 604644 1.000000 + . Parent=gene18 ENm001 gth exon 601382 601522 1.000000 + . Parent=gene18 ENm001 gth exon 601031 601187 1.000000 + . Parent=gene18 ENm001 gth exon 599178 599324 1.000000 + . Parent=gene18 ENm001 gth exon 592583 592801 1.000000 + . Parent=gene18 ENm001 gth exon 588924 589023 1.000000 + . Parent=gene18 ENm001 gth exon 587992 588153 1.000000 + . Parent=gene18 ENm001 gth exon 587171 587307 1.000000 + . Parent=gene18 ENm001 gth exon 586970 587072 1.000000 + . Parent=gene18 ENm001 gth exon 584888 585048 1.000000 + . Parent=gene18 ENm001 gth exon 570385 570558 1.000000 + . Parent=gene18 ENm001 gth exon 569483 569617 1.000000 + . Parent=gene18 ENm001 gth exon 561201 561392 1.000000 + . Parent=gene18 ENm001 gth exon 528618 529817 1.000000 + . Parent=gene18 ### ENm001 gth gene 620432 684293 0.991022 - . ID=gene19 ENm001 gth exon 684144 684293 0.979167 - . Parent=gene19 ENm001 gth exon 680427 680540 1.000000 - . Parent=gene19 ENm001 gth exon 679175 679280 1.000000 - . Parent=gene19 ENm001 gth exon 667845 667954 1.000000 - . Parent=gene19 ENm001 gth exon 666825 666881 1.000000 - . Parent=gene19 ENm001 gth exon 665748 665823 0.961538 - . Parent=gene19 ENm001 gth exon 664782 664906 1.000000 - . Parent=gene19 ENm001 gth exon 663032 663166 1.000000 - . Parent=gene19 ENm001 gth exon 662083 662194 1.000000 - . Parent=gene19 ENm001 gth exon 627618 627729 1.000000 - . Parent=gene19 ENm001 gth exon 625533 625655 0.974468 - . Parent=gene19 ENm001 gth exon 620957 621056 0.963235 - . Parent=gene19 ENm001 gth exon 620432 620536 1.000000 - . Parent=gene19 ### ENm001 gth gene 620432 684293 1.000000 - . ID=gene20 ENm001 gth exon 684144 684293 1.000000 - . Parent=gene20 ENm001 gth exon 680427 680540 1.000000 - . Parent=gene20 ENm001 gth exon 679175 679280 1.000000 - . Parent=gene20 ENm001 gth exon 667845 667954 1.000000 - . Parent=gene20 ENm001 gth exon 666825 666881 1.000000 - . Parent=gene20 ENm001 gth exon 665748 665823 1.000000 - . Parent=gene20 ENm001 gth exon 664782 664906 1.000000 - . Parent=gene20 ENm001 gth exon 663032 663166 1.000000 - . Parent=gene20 ENm001 gth exon 662083 662194 1.000000 - . Parent=gene20 ENm001 gth exon 627618 627729 1.000000 - . Parent=gene20 ENm001 gth exon 625533 625655 1.000000 - . Parent=gene20 ENm001 gth exon 620957 621056 1.000000 - . Parent=gene20 ENm001 gth exon 620432 620536 1.000000 - . Parent=gene20 ### ENm001 gth gene 625234 684293 0.808461 - . ID=gene21 ENm001 gth exon 684144 684293 0.779468 - . Parent=gene21 ENm001 gth exon 680427 680540 0.811518 - . Parent=gene21 ENm001 gth exon 679175 679280 0.953608 - . Parent=gene21 ENm001 gth exon 667797 667954 0.516484 - . Parent=gene21 ENm001 gth exon 665748 665823 0.921053 - . Parent=gene21 ENm001 gth exon 664782 664906 0.850000 - . Parent=gene21 ENm001 gth exon 663032 663166 0.880184 - . Parent=gene21 ENm001 gth exon 662083 662194 0.973684 - . Parent=gene21 ENm001 gth exon 627618 627729 0.825581 - . Parent=gene21 ENm001 gth exon 625500 625655 0.752508 - . Parent=gene21 ENm001 gth exon 625234 625253 0.200000 - . Parent=gene21 ### ENm001 gth gene 717619 747397 0.765398 + . ID=gene22 ENm001 gth exon 747260 747397 1.000000 + . Parent=gene22 ENm001 gth exon 745593 745655 0.962264 + . Parent=gene22 ENm001 gth exon 741602 741673 1.000000 + . Parent=gene22 ENm001 gth exon 739766 739844 0.947059 + . Parent=gene22 ENm001 gth exon 735796 735875 0.953271 + . Parent=gene22 ENm001 gth exon 733622 733916 0.577438 + . Parent=gene22 ENm001 gth exon 717619 717748 0.530516 + . Parent=gene22 ### ENm001 gth gene 717622 747397 0.876956 + . ID=gene23 ENm001 gth exon 747260 747397 1.000000 + . Parent=gene23 ENm001 gth exon 745593 745655 1.000000 + . Parent=gene23 ENm001 gth exon 741602 741673 1.000000 + . Parent=gene23 ENm001 gth exon 739766 739844 0.973510 + . Parent=gene23 ENm001 gth exon 735796 735875 0.972222 + . Parent=gene23 ENm001 gth exon 733710 733916 0.945161 + . Parent=gene23 ENm001 gth exon 728305 728368 0.933333 + . Parent=gene23 ENm001 gth exon 717622 717773 0.451737 + . Parent=gene23 ### ENm001 gth gene 717622 747397 0.890370 + . ID=gene24 ENm001 gth exon 747260 747397 1.000000 + . Parent=gene24 ENm001 gth exon 745593 745655 1.000000 + . Parent=gene24 ENm001 gth exon 741602 741673 1.000000 + . Parent=gene24 ENm001 gth exon 739766 739844 1.000000 + . Parent=gene24 ENm001 gth exon 735796 735875 1.000000 + . Parent=gene24 ENm001 gth exon 733710 733916 1.000000 + . Parent=gene24 ENm001 gth exon 728305 728368 0.933333 + . Parent=gene24 ENm001 gth exon 717622 717773 0.451737 + . Parent=gene24 ### ENm001 gth gene 717625 733850 0.712980 + . ID=gene25 ENm001 gth exon 733710 733850 0.913043 + . Parent=gene25 ENm001 gth exon 728305 728368 0.933333 + . Parent=gene25 ENm001 gth exon 717625 717773 0.468000 + . Parent=gene25 ### ENm001 gth gene 724903 769734 0.966519 - . ID=gene26 ENm001 gth exon 769508 769734 0.953125 - . Parent=gene26 ENm001 gth exon 750016 750280 0.975824 - . Parent=gene26 ENm001 gth exon 732544 732821 0.973361 - . Parent=gene26 ENm001 gth exon 727099 727325 0.971800 - . Parent=gene26 ENm001 gth exon 724903 724985 0.944134 - . Parent=gene26 ### ENm001 gth gene 724903 769734 1.000000 - . ID=gene27 ENm001 gth exon 769508 769734 1.000000 - . Parent=gene27 ENm001 gth exon 750016 750280 1.000000 - . Parent=gene27 ENm001 gth exon 732544 732821 1.000000 - . Parent=gene27 ENm001 gth exon 727099 727325 1.000000 - . Parent=gene27 ENm001 gth exon 724903 724985 1.000000 - . Parent=gene27 ### ENm001 gth gene 1333735 1496638 0.889211 + . ID=gene28 ENm001 gth exon 1496441 1496638 0.739550 + . Parent=gene28 ENm001 gth exon 1494992 1495097 0.902703 + . Parent=gene28 ENm001 gth exon 1494221 1494393 1.000000 + . Parent=gene28 ENm001 gth exon 1482375 1482464 1.000000 + . Parent=gene28 ENm001 gth exon 1471971 1472126 0.965779 + . Parent=gene28 ENm001 gth exon 1457055 1457303 0.849020 + . Parent=gene28 ENm001 gth exon 1444146 1444246 0.976471 + . Parent=gene28 ENm001 gth exon 1441114 1441341 1.000000 + . Parent=gene28 ENm001 gth exon 1440052 1440202 0.846847 + . Parent=gene28 ENm001 gth exon 1436207 1436286 0.969697 + . Parent=gene28 ENm001 gth exon 1433027 1433315 0.740594 + . Parent=gene28 ENm001 gth exon 1424463 1424591 0.882353 + . Parent=gene28 ENm001 gth exon 1421467 1422190 0.835843 + . Parent=gene28 ENm001 gth exon 1419886 1419972 1.000000 + . Parent=gene28 ENm001 gth exon 1417272 1417366 0.974684 + . Parent=gene28 ENm001 gth exon 1388997 1389188 0.951923 + . Parent=gene28 ENm001 gth exon 1378174 1378356 0.843450 + . Parent=gene28 ENm001 gth exon 1371549 1371641 0.968944 + . Parent=gene28 ENm001 gth exon 1369633 1369879 0.977117 + . Parent=gene28 ENm001 gth exon 1366081 1366206 0.957547 + . Parent=gene28 ENm001 gth exon 1364781 1364944 0.851590 + . Parent=gene28 ENm001 gth exon 1363809 1363898 1.000000 + . Parent=gene28 ENm001 gth exon 1360432 1360647 0.986111 + . Parent=gene28 ENm001 gth exon 1338567 1338675 0.967033 + . Parent=gene28 ENm001 gth exon 1333735 1333896 0.682432 + . Parent=gene28 ### ENm001 gth gene 1333735 1496638 0.962358 + . ID=gene29 ENm001 gth exon 1496441 1496638 0.972050 + . Parent=gene29 ENm001 gth exon 1494992 1495097 1.000000 + . Parent=gene29 ENm001 gth exon 1494221 1494393 1.000000 + . Parent=gene29 ENm001 gth exon 1482375 1482464 1.000000 + . Parent=gene29 ENm001 gth exon 1471971 1472126 1.000000 + . Parent=gene29 ENm001 gth exon 1457055 1457303 0.909091 + . Parent=gene29 ENm001 gth exon 1444146 1444246 0.965035 + . Parent=gene29 ENm001 gth exon 1441114 1441341 1.000000 + . Parent=gene29 ENm001 gth exon 1440052 1440202 1.000000 + . Parent=gene29 ENm001 gth exon 1436207 1436286 1.000000 + . Parent=gene29 ENm001 gth exon 1433027 1433315 0.828753 + . Parent=gene29 ENm001 gth exon 1424463 1424591 1.000000 + . Parent=gene29 ENm001 gth exon 1421467 1422190 0.972794 + . Parent=gene29 ENm001 gth exon 1419886 1419972 1.000000 + . Parent=gene29 ENm001 gth exon 1417272 1417366 1.000000 + . Parent=gene29 ENm001 gth exon 1388997 1389188 0.965649 + . Parent=gene29 ENm001 gth exon 1378174 1378356 0.967213 + . Parent=gene29 ENm001 gth exon 1371549 1371641 1.000000 + . Parent=gene29 ENm001 gth exon 1369633 1369879 0.989305 + . Parent=gene29 ENm001 gth exon 1366081 1366206 0.981481 + . Parent=gene29 ENm001 gth exon 1364781 1364944 0.989041 + . Parent=gene29 ENm001 gth exon 1363809 1363898 1.000000 + . Parent=gene29 ENm001 gth exon 1360432 1360647 1.000000 + . Parent=gene29 ENm001 gth exon 1338567 1338675 0.967033 + . Parent=gene29 ENm001 gth exon 1333735 1333896 0.754777 + . Parent=gene29 ### ENm001 gth gene 1333735 1496638 0.983471 + . ID=gene30 ENm001 gth exon 1496441 1496638 1.000000 + . Parent=gene30 ENm001 gth exon 1494992 1495097 1.000000 + . Parent=gene30 ENm001 gth exon 1494221 1494393 1.000000 + . Parent=gene30 ENm001 gth exon 1482375 1482464 1.000000 + . Parent=gene30 ENm001 gth exon 1471971 1472126 1.000000 + . Parent=gene30 ENm001 gth exon 1457055 1457303 1.000000 + . Parent=gene30 ENm001 gth exon 1444146 1444246 1.000000 + . Parent=gene30 ENm001 gth exon 1441114 1441341 1.000000 + . Parent=gene30 ENm001 gth exon 1440052 1440202 1.000000 + . Parent=gene30 ENm001 gth exon 1436207 1436286 1.000000 + . Parent=gene30 ENm001 gth exon 1433027 1433315 0.873706 + . Parent=gene30 ENm001 gth exon 1424463 1424591 1.000000 + . Parent=gene30 ENm001 gth exon 1421467 1422190 1.000000 + . Parent=gene30 ENm001 gth exon 1419886 1419972 1.000000 + . Parent=gene30 ENm001 gth exon 1417272 1417366 1.000000 + . Parent=gene30 ENm001 gth exon 1388997 1389188 0.984674 + . Parent=gene30 ENm001 gth exon 1378174 1378356 1.000000 + . Parent=gene30 ENm001 gth exon 1371549 1371641 1.000000 + . Parent=gene30 ENm001 gth exon 1369633 1369879 1.000000 + . Parent=gene30 ENm001 gth exon 1366081 1366206 1.000000 + . Parent=gene30 ENm001 gth exon 1364781 1364944 1.000000 + . Parent=gene30 ENm001 gth exon 1363809 1363898 1.000000 + . Parent=gene30 ENm001 gth exon 1360432 1360647 1.000000 + . Parent=gene30 ENm001 gth exon 1338567 1338675 1.000000 + . Parent=gene30 ENm001 gth exon 1333735 1333896 0.768987 + . Parent=gene30 ### ENm001 gth gene 1333735 1496638 0.882760 + . ID=gene31 ENm001 gth exon 1496441 1496638 0.739550 + . Parent=gene31 ENm001 gth exon 1494992 1495097 0.862745 + . Parent=gene31 ENm001 gth exon 1494221 1494393 0.982684 + . Parent=gene31 ENm001 gth exon 1482375 1482464 0.966667 + . Parent=gene31 ENm001 gth exon 1471971 1472126 0.965779 + . Parent=gene31 ENm001 gth exon 1457055 1457303 0.846303 + . Parent=gene31 ENm001 gth exon 1444146 1444246 0.976471 + . Parent=gene31 ENm001 gth exon 1441114 1441341 0.968668 + . Parent=gene31 ENm001 gth exon 1440052 1440202 0.859155 + . Parent=gene31 ENm001 gth exon 1436207 1436286 0.939850 + . Parent=gene31 ENm001 gth exon 1433027 1433315 0.755859 + . Parent=gene31 ENm001 gth exon 1424463 1424591 0.882353 + . Parent=gene31 ENm001 gth exon 1421467 1422190 0.829035 + . Parent=gene31 ENm001 gth exon 1419886 1419972 1.000000 + . Parent=gene31 ENm001 gth exon 1417272 1417366 0.972222 + . Parent=gene31 ENm001 gth exon 1388997 1389188 0.914286 + . Parent=gene31 ENm001 gth exon 1378174 1378356 0.860841 + . Parent=gene31 ENm001 gth exon 1371549 1371641 0.943820 + . Parent=gene31 ENm001 gth exon 1369633 1369879 0.977117 + . Parent=gene31 ENm001 gth exon 1366081 1366206 0.930481 + . Parent=gene31 ENm001 gth exon 1364781 1364944 0.899083 + . Parent=gene31 ENm001 gth exon 1363809 1363898 0.963235 + . Parent=gene31 ENm001 gth exon 1360432 1360647 0.986111 + . Parent=gene31 ENm001 gth exon 1338567 1338675 0.967033 + . Parent=gene31 ENm001 gth exon 1333735 1333896 0.668919 + . Parent=gene31 ### ENm001 gth gene 1333738 1496638 0.906741 + . ID=gene32 ENm001 gth exon 1496441 1496638 0.801282 + . Parent=gene32 ENm001 gth exon 1494992 1495097 0.950276 + . Parent=gene32 ENm001 gth exon 1494221 1494393 0.961864 + . Parent=gene32 ENm001 gth exon 1482375 1482464 1.000000 + . Parent=gene32 ENm001 gth exon 1471971 1472126 0.974895 + . Parent=gene32 ENm001 gth exon 1457055 1457303 0.851852 + . Parent=gene32 ENm001 gth exon 1444146 1444246 1.000000 + . Parent=gene32 ENm001 gth exon 1441114 1441341 0.976982 + . Parent=gene32 ENm001 gth exon 1440052 1440202 0.884445 + . Parent=gene32 ENm001 gth exon 1436207 1436286 1.000000 + . Parent=gene32 ENm001 gth exon 1433027 1433315 0.775701 + . Parent=gene32 ENm001 gth exon 1424463 1424591 0.842391 + . Parent=gene32 ENm001 gth exon 1421467 1422190 0.864656 + . Parent=gene32 ENm001 gth exon 1419886 1419972 1.000000 + . Parent=gene32 ENm001 gth exon 1417272 1417366 0.942029 + . Parent=gene32 ENm001 gth exon 1388997 1389188 0.975936 + . Parent=gene32 ENm001 gth exon 1378174 1378356 0.871257 + . Parent=gene32 ENm001 gth exon 1371549 1371641 0.972973 + . Parent=gene32 ENm001 gth exon 1369633 1369879 0.990338 + . Parent=gene32 ENm001 gth exon 1366081 1366206 0.981481 + . Parent=gene32 ENm001 gth exon 1364781 1364944 0.933884 + . Parent=gene32 ENm001 gth exon 1360432 1360647 0.987805 + . Parent=gene32 ENm001 gth exon 1338567 1338675 1.000000 + . Parent=gene32 ENm001 gth exon 1333738 1333896 0.698842 + . Parent=gene32 ### ENm001 gth gene 1421486 1422028 0.816017 + . ID=gene33 ENm001 gth exon 1421486 1422028 0.816017 + . Parent=gene33 ### ENm001 gth gene 1421501 1422028 0.933333 + . ID=gene34 ENm001 gth exon 1421501 1422028 0.933333 + . Parent=gene34 ### genometools-1.5.1/testdata/gt_eval_test_1.out000066400000000000000000000061361211610345200213140ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (34/34) (missing genes: 0) gene specificity (mRNA level): 100.00% (34/34) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (34/34) (missing genes: 0) gene specificity (CDS level): 100.00% (34/34) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (mRNA level): 100.00% (0/0) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (CDS level): 100.00% (0/0) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (263/263) exon specificity (mRNA level, all): 100.00% (263/263) exon sensitivity (mRNA level, single): 100.00% (5/5) exon specificity (mRNA level, single): 100.00% (5/5) exon sensitivity (mRNA level, initial): 100.00% (29/29) exon specificity (mRNA level, initial): 100.00% (29/29) exon sensitivity (mRNA level, internal): 100.00% (200/200) exon specificity (mRNA level, internal): 100.00% (200/200) exon sensitivity (mRNA level, terminal): 100.00% (29/29) exon specificity (mRNA level, terminal): 100.00% (29/29) exon sensitivity (mRNA level, all, collapsed): 100.00% (102/102) exon specificity (mRNA level, all, collapsed): 100.00% (102/102) exon sensitivity (mRNA level, single, collapsed): 100.00% (4/4) exon specificity (mRNA level, single, collapsed): 100.00% (4/4) exon sensitivity (mRNA level, initial, collapsed): 100.00% (17/17) exon specificity (mRNA level, initial, collapsed): 100.00% (17/17) exon sensitivity (mRNA level, internal, collapsed): 100.00% (70/70) exon specificity (mRNA level, internal, collapsed): 100.00% (70/70) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (11/11) exon specificity (mRNA level, terminal, collapsed): 100.00% (11/11) exon sensitivity (CDS level, all): 100.00% (0/0) exon specificity (CDS level, all): 100.00% (0/0) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 100.00% (0/0) exon specificity (CDS level, all, collapsed): 100.00% (0/0) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) nucleotide sensitivity (mRNA level): 100.00% (TP=15373/(TP=15373 + FN=0)) nucleotide specificity (mRNA level): 100.00% (TP=15373/(TP=15373 + FP=0)) nucleotide sensitivity (CDS level): 100.00% (TP=0/(TP=0 + FN=0)) nucleotide specificity (CDS level): 100.00% (TP=0/(TP=0 + FP=0)) genometools-1.5.1/testdata/gt_eval_test_10.in000066400000000000000000000000601211610345200211610ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 80 genometools-1.5.1/testdata/gt_eval_test_10.out000066400000000000000000000060321211610345200213670ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (0/0) (missing genes: 0) gene specificity (mRNA level): 100.00% (0/0) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (0/0) (missing genes: 0) gene specificity (CDS level): 100.00% (0/0) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (mRNA level): 100.00% (0/0) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (CDS level): 100.00% (0/0) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (0/0) exon specificity (mRNA level, all): 100.00% (0/0) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 100.00% (0/0) exon specificity (mRNA level, initial): 100.00% (0/0) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (0/0) exon specificity (mRNA level, terminal): 100.00% (0/0) exon sensitivity (mRNA level, all, collapsed): 100.00% (0/0) exon specificity (mRNA level, all, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 100.00% (0/0) exon specificity (mRNA level, initial, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (0/0) exon specificity (mRNA level, terminal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, all): 100.00% (0/0) exon specificity (CDS level, all): 100.00% (0/0) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 100.00% (0/0) exon specificity (CDS level, all, collapsed): 100.00% (0/0) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) nucleotide sensitivity (mRNA level): 100.00% (TP=0/(TP=0 + FN=0)) nucleotide specificity (mRNA level): 100.00% (TP=0/(TP=0 + FP=0)) nucleotide sensitivity (CDS level): 100.00% (TP=0/(TP=0 + FN=0)) nucleotide specificity (CDS level): 100.00% (TP=0/(TP=0 + FP=0)) genometools-1.5.1/testdata/gt_eval_test_2.nuc000066400000000000000000000060401211610345200212650ustar00rootroot00000000000000gene sensitivity (mRNA level): 0.00% (0/1) (missing genes: 0) gene specificity (mRNA level): 0.00% (0/1) (wrong genes: 0) gene sensitivity (CDS level): 0.00% (0/1) (missing genes: 0) gene specificity (CDS level): 0.00% (0/1) (wrong genes: 0) mRNA sensitivity (mRNA level): 0.00% (0/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 0.00% (0/1) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 0.00% (0/1) (missing mRNAs: 0) mRNA specificity (CDS level): 0.00% (0/1) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 50.00% (1/2) exon specificity (mRNA level, all): 50.00% (1/2) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 0.00% (0/1) exon specificity (mRNA level, initial): 0.00% (0/1) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 0.00% (0/1) exon specificity (mRNA level, terminal): 0.00% (0/1) exon sensitivity (mRNA level, all, collapsed): 50.00% (1/2) exon specificity (mRNA level, all, collapsed): 50.00% (1/2) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 0.00% (0/1) exon specificity (mRNA level, initial, collapsed): 0.00% (0/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 0.00% (0/1) exon specificity (mRNA level, terminal, collapsed): 0.00% (0/1) exon sensitivity (CDS level, all): 100.00% (0/0) exon specificity (CDS level, all): 100.00% (0/0) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 100.00% (0/0) exon specificity (CDS level, all, collapsed): 100.00% (0/0) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) nucleotide sensitivity (mRNA level): 50.00% (TP=26/(TP=26 + FN=26)) nucleotide specificity (mRNA level): 33.77% (TP=26/(TP=26 + FP=51)) nucleotide sensitivity (CDS level): 100.00% (TP=0/(TP=0 + FN=0)) nucleotide specificity (CDS level): 100.00% (TP=0/(TP=0 + FP=0)) genometools-1.5.1/testdata/gt_eval_test_2.out000066400000000000000000000054241211610345200213140ustar00rootroot00000000000000gene sensitivity (mRNA level): 0.00% (0/1) (missing genes: 0) gene specificity (mRNA level): 0.00% (0/1) (wrong genes: 0) gene sensitivity (CDS level): 0.00% (0/1) (missing genes: 0) gene specificity (CDS level): 0.00% (0/1) (wrong genes: 0) mRNA sensitivity (mRNA level): 0.00% (0/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 0.00% (0/1) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 0.00% (0/1) (missing mRNAs: 0) mRNA specificity (CDS level): 0.00% (0/1) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 50.00% (1/2) exon specificity (mRNA level, all): 50.00% (1/2) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 0.00% (0/1) exon specificity (mRNA level, initial): 0.00% (0/1) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 0.00% (0/1) exon specificity (mRNA level, terminal): 0.00% (0/1) exon sensitivity (mRNA level, all, collapsed): 50.00% (1/2) exon specificity (mRNA level, all, collapsed): 50.00% (1/2) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 0.00% (0/1) exon specificity (mRNA level, initial, collapsed): 0.00% (0/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 0.00% (0/1) exon specificity (mRNA level, terminal, collapsed): 0.00% (0/1) exon sensitivity (CDS level, all): 100.00% (0/0) exon specificity (CDS level, all): 100.00% (0/0) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 100.00% (0/0) exon specificity (CDS level, all, collapsed): 100.00% (0/0) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) genometools-1.5.1/testdata/gt_eval_test_2.prediction000066400000000000000000000003161211610345200226400ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 175 300 . - . ID=gene gDNA . mRNA 175 300 . - . ID=mRNA;Parent=gene gDNA . exon 175 200 . - . Parent=mRNA gDNA . exon 250 300 . - . Parent=mRNA genometools-1.5.1/testdata/gt_eval_test_2.reality000066400000000000000000000003161211610345200221510ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene gDNA . mRNA 100 200 . - . ID=mRNA;Parent=gene gDNA . exon 100 125 . - . Parent=mRNA gDNA . exon 175 200 . - . Parent=mRNA genometools-1.5.1/testdata/gt_eval_test_3.nuc000066400000000000000000000060331211610345200212700ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (0/0) (missing genes: 0) gene specificity (mRNA level): 0.00% (0/1) (wrong genes: 1) gene sensitivity (CDS level): 100.00% (0/0) (missing genes: 0) gene specificity (CDS level): 0.00% (0/1) (wrong genes: 1) mRNA sensitivity (mRNA level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (mRNA level): 0.00% (0/1) (wrong mRNAs: 1) mRNA sensitivity (CDS level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (CDS level): 0.00% (0/1) (wrong mRNAs: 1) exon sensitivity (mRNA level, all): 100.00% (0/0) exon specificity (mRNA level, all): 0.00% (0/2) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 100.00% (0/0) exon specificity (mRNA level, initial): 0.00% (0/1) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (0/0) exon specificity (mRNA level, terminal): 0.00% (0/1) exon sensitivity (mRNA level, all, collapsed): 100.00% (0/0) exon specificity (mRNA level, all, collapsed): 0.00% (0/2) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 100.00% (0/0) exon specificity (mRNA level, initial, collapsed): 0.00% (0/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (0/0) exon specificity (mRNA level, terminal, collapsed): 0.00% (0/1) exon sensitivity (CDS level, all): 100.00% (0/0) exon specificity (CDS level, all): 100.00% (0/0) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 100.00% (0/0) exon specificity (CDS level, all, collapsed): 100.00% (0/0) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) nucleotide sensitivity (mRNA level): 100.00% (TP=0/(TP=0 + FN=0)) nucleotide specificity (mRNA level): 0.00% (TP=0/(TP=0 + FP=77)) nucleotide sensitivity (CDS level): 100.00% (TP=0/(TP=0 + FN=0)) nucleotide specificity (CDS level): 100.00% (TP=0/(TP=0 + FP=0)) genometools-1.5.1/testdata/gt_eval_test_3.out000066400000000000000000000054241211610345200213150ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (0/0) (missing genes: 0) gene specificity (mRNA level): 0.00% (0/1) (wrong genes: 1) gene sensitivity (CDS level): 100.00% (0/0) (missing genes: 0) gene specificity (CDS level): 0.00% (0/1) (wrong genes: 1) mRNA sensitivity (mRNA level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (mRNA level): 0.00% (0/1) (wrong mRNAs: 1) mRNA sensitivity (CDS level): 100.00% (0/0) (missing mRNAs: 0) mRNA specificity (CDS level): 0.00% (0/1) (wrong mRNAs: 1) exon sensitivity (mRNA level, all): 100.00% (0/0) exon specificity (mRNA level, all): 0.00% (0/2) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 100.00% (0/0) exon specificity (mRNA level, initial): 0.00% (0/1) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (0/0) exon specificity (mRNA level, terminal): 0.00% (0/1) exon sensitivity (mRNA level, all, collapsed): 100.00% (0/0) exon specificity (mRNA level, all, collapsed): 0.00% (0/2) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 100.00% (0/0) exon specificity (mRNA level, initial, collapsed): 0.00% (0/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (0/0) exon specificity (mRNA level, terminal, collapsed): 0.00% (0/1) exon sensitivity (CDS level, all): 100.00% (0/0) exon specificity (CDS level, all): 100.00% (0/0) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 100.00% (0/0) exon specificity (CDS level, all, collapsed): 100.00% (0/0) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) genometools-1.5.1/testdata/gt_eval_test_3.prediction000066400000000000000000000003161211610345200226410ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 175 300 . - . ID=gene gDNA . mRNA 175 300 . - . ID=mRNA;Parent=gene gDNA . exon 175 200 . - . Parent=mRNA gDNA . exon 250 300 . - . Parent=mRNA genometools-1.5.1/testdata/gt_eval_test_3.reality000066400000000000000000000000621211610345200221500ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 genometools-1.5.1/testdata/gt_eval_test_4.nuc000066400000000000000000000060331211610345200212710ustar00rootroot00000000000000gene sensitivity (mRNA level): 0.00% (0/1) (missing genes: 1) gene specificity (mRNA level): 100.00% (0/0) (wrong genes: 0) gene sensitivity (CDS level): 0.00% (0/1) (missing genes: 1) gene specificity (CDS level): 100.00% (0/0) (wrong genes: 0) mRNA sensitivity (mRNA level): 0.00% (0/1) (missing mRNAs: 1) mRNA specificity (mRNA level): 100.00% (0/0) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 0.00% (0/1) (missing mRNAs: 1) mRNA specificity (CDS level): 100.00% (0/0) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 0.00% (0/2) exon specificity (mRNA level, all): 100.00% (0/0) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 0.00% (0/1) exon specificity (mRNA level, initial): 100.00% (0/0) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 0.00% (0/1) exon specificity (mRNA level, terminal): 100.00% (0/0) exon sensitivity (mRNA level, all, collapsed): 0.00% (0/2) exon specificity (mRNA level, all, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 0.00% (0/1) exon specificity (mRNA level, initial, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 0.00% (0/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, all): 100.00% (0/0) exon specificity (CDS level, all): 100.00% (0/0) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 100.00% (0/0) exon specificity (CDS level, all, collapsed): 100.00% (0/0) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) nucleotide sensitivity (mRNA level): 0.00% (TP=0/(TP=0 + FN=52)) nucleotide specificity (mRNA level): 100.00% (TP=0/(TP=0 + FP=0)) nucleotide sensitivity (CDS level): 100.00% (TP=0/(TP=0 + FN=0)) nucleotide specificity (CDS level): 100.00% (TP=0/(TP=0 + FP=0)) genometools-1.5.1/testdata/gt_eval_test_4.out000066400000000000000000000054241211610345200213160ustar00rootroot00000000000000gene sensitivity (mRNA level): 0.00% (0/1) (missing genes: 1) gene specificity (mRNA level): 100.00% (0/0) (wrong genes: 0) gene sensitivity (CDS level): 0.00% (0/1) (missing genes: 1) gene specificity (CDS level): 100.00% (0/0) (wrong genes: 0) mRNA sensitivity (mRNA level): 0.00% (0/1) (missing mRNAs: 1) mRNA specificity (mRNA level): 100.00% (0/0) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 0.00% (0/1) (missing mRNAs: 1) mRNA specificity (CDS level): 100.00% (0/0) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 0.00% (0/2) exon specificity (mRNA level, all): 100.00% (0/0) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 0.00% (0/1) exon specificity (mRNA level, initial): 100.00% (0/0) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 0.00% (0/1) exon specificity (mRNA level, terminal): 100.00% (0/0) exon sensitivity (mRNA level, all, collapsed): 0.00% (0/2) exon specificity (mRNA level, all, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 0.00% (0/1) exon specificity (mRNA level, initial, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 0.00% (0/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, all): 100.00% (0/0) exon specificity (CDS level, all): 100.00% (0/0) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 100.00% (0/0) exon specificity (CDS level, all, collapsed): 100.00% (0/0) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) genometools-1.5.1/testdata/gt_eval_test_4.prediction000066400000000000000000000000621211610345200226400ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 genometools-1.5.1/testdata/gt_eval_test_4.reality000066400000000000000000000003161211610345200221530ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene gDNA . mRNA 100 200 . - . ID=mRNA;Parent=gene gDNA . exon 100 125 . - . Parent=mRNA gDNA . exon 175 200 . - . Parent=mRNA genometools-1.5.1/testdata/gt_eval_test_5.nuc000066400000000000000000000060421211610345200212720ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (1/1) (missing genes: 0) gene specificity (mRNA level): 50.00% (1/2) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (1/1) (missing genes: 0) gene specificity (CDS level): 50.00% (1/2) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 50.00% (1/2) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (CDS level): 50.00% (1/2) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (2/2) exon specificity (mRNA level, all): 50.00% (2/4) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 100.00% (1/1) exon specificity (mRNA level, initial): 50.00% (1/2) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (1/1) exon specificity (mRNA level, terminal): 50.00% (1/2) exon sensitivity (mRNA level, all, collapsed): 100.00% (2/2) exon specificity (mRNA level, all, collapsed): 100.00% (2/2) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 100.00% (1/1) exon specificity (mRNA level, initial, collapsed): 100.00% (1/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (1/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (1/1) exon sensitivity (CDS level, all): 100.00% (2/2) exon specificity (CDS level, all): 50.00% (2/4) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (1/1) exon specificity (CDS level, initial): 50.00% (1/2) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (1/1) exon specificity (CDS level, terminal): 50.00% (1/2) exon sensitivity (CDS level, all, collapsed): 100.00% (2/2) exon specificity (CDS level, all, collapsed): 100.00% (2/2) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (1/1) exon specificity (CDS level, initial, collapsed): 100.00% (1/1) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (1/1) exon specificity (CDS level, terminal, collapsed): 100.00% (1/1) nucleotide sensitivity (mRNA level): 100.00% (TP=52/(TP=52 + FN=0)) nucleotide specificity (mRNA level): 100.00% (TP=52/(TP=52 + FP=0)) nucleotide sensitivity (CDS level): 100.00% (TP=52/(TP=52 + FN=0)) nucleotide specificity (CDS level): 100.00% (TP=52/(TP=52 + FP=0)) genometools-1.5.1/testdata/gt_eval_test_5.out000066400000000000000000000054241211610345200213170ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (1/1) (missing genes: 0) gene specificity (mRNA level): 50.00% (1/2) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (1/1) (missing genes: 0) gene specificity (CDS level): 50.00% (1/2) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 50.00% (1/2) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (CDS level): 50.00% (1/2) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (2/2) exon specificity (mRNA level, all): 50.00% (2/4) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 100.00% (1/1) exon specificity (mRNA level, initial): 50.00% (1/2) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (1/1) exon specificity (mRNA level, terminal): 50.00% (1/2) exon sensitivity (mRNA level, all, collapsed): 100.00% (2/2) exon specificity (mRNA level, all, collapsed): 100.00% (2/2) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 100.00% (1/1) exon specificity (mRNA level, initial, collapsed): 100.00% (1/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (1/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (1/1) exon sensitivity (CDS level, all): 100.00% (2/2) exon specificity (CDS level, all): 50.00% (2/4) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (1/1) exon specificity (CDS level, initial): 50.00% (1/2) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (1/1) exon specificity (CDS level, terminal): 50.00% (1/2) exon sensitivity (CDS level, all, collapsed): 100.00% (2/2) exon specificity (CDS level, all, collapsed): 100.00% (2/2) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (1/1) exon specificity (CDS level, initial, collapsed): 100.00% (1/1) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (1/1) exon specificity (CDS level, terminal, collapsed): 100.00% (1/1) genometools-1.5.1/testdata/gt_eval_test_5.prediction000066400000000000000000000010241211610345200226400ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene1 gDNA . mRNA 100 200 . - . ID=mRNA1;Parent=gene1 gDNA . exon 100 125 . - . Parent=mRNA1 gDNA . CDS 100 125 . - 1 Parent=mRNA1 gDNA . exon 175 200 . - . Parent=mRNA1 gDNA . CDS 175 200 . - 0 Parent=mRNA1 ### gDNA . gene 100 200 . - . ID=gene2 gDNA . mRNA 100 200 . - . ID=mRNA2;Parent=gene2 gDNA . exon 100 125 . - . Parent=mRNA2 gDNA . CDS 100 125 . - 1 Parent=mRNA2 gDNA . exon 175 200 . - . Parent=mRNA2 gDNA . CDS 175 200 . - 0 Parent=mRNA2 ### genometools-1.5.1/testdata/gt_eval_test_5.reality000066400000000000000000000004431211610345200221550ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene1 gDNA . mRNA 100 200 . - . ID=mRNA1;Parent=gene1 gDNA . exon 100 125 . - . Parent=mRNA1 gDNA . CDS 100 125 . - 1 Parent=mRNA1 gDNA . exon 175 200 . - . Parent=mRNA1 gDNA . CDS 175 200 . - 0 Parent=mRNA1 ### genometools-1.5.1/testdata/gt_eval_test_6.nuc000066400000000000000000000060421211610345200212730ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (1/1) (missing genes: 0) gene specificity (mRNA level): 50.00% (1/2) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (1/1) (missing genes: 0) gene specificity (CDS level): 50.00% (1/2) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 50.00% (1/2) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (CDS level): 50.00% (1/2) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (2/2) exon specificity (mRNA level, all): 50.00% (2/4) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 100.00% (1/1) exon specificity (mRNA level, initial): 50.00% (1/2) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (1/1) exon specificity (mRNA level, terminal): 50.00% (1/2) exon sensitivity (mRNA level, all, collapsed): 100.00% (2/2) exon specificity (mRNA level, all, collapsed): 100.00% (2/2) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 100.00% (1/1) exon specificity (mRNA level, initial, collapsed): 100.00% (1/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (1/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (1/1) exon sensitivity (CDS level, all): 100.00% (2/2) exon specificity (CDS level, all): 50.00% (2/4) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (1/1) exon specificity (CDS level, initial): 50.00% (1/2) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (1/1) exon specificity (CDS level, terminal): 50.00% (1/2) exon sensitivity (CDS level, all, collapsed): 100.00% (2/2) exon specificity (CDS level, all, collapsed): 100.00% (2/2) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (1/1) exon specificity (CDS level, initial, collapsed): 100.00% (1/1) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (1/1) exon specificity (CDS level, terminal, collapsed): 100.00% (1/1) nucleotide sensitivity (mRNA level): 100.00% (TP=52/(TP=52 + FN=0)) nucleotide specificity (mRNA level): 100.00% (TP=52/(TP=52 + FP=0)) nucleotide sensitivity (CDS level): 100.00% (TP=52/(TP=52 + FN=0)) nucleotide specificity (CDS level): 100.00% (TP=52/(TP=52 + FP=0)) genometools-1.5.1/testdata/gt_eval_test_6.out000066400000000000000000000054241211610345200213200ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (1/1) (missing genes: 0) gene specificity (mRNA level): 50.00% (1/2) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (1/1) (missing genes: 0) gene specificity (CDS level): 50.00% (1/2) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 50.00% (1/2) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (CDS level): 50.00% (1/2) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (2/2) exon specificity (mRNA level, all): 50.00% (2/4) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 100.00% (1/1) exon specificity (mRNA level, initial): 50.00% (1/2) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (1/1) exon specificity (mRNA level, terminal): 50.00% (1/2) exon sensitivity (mRNA level, all, collapsed): 100.00% (2/2) exon specificity (mRNA level, all, collapsed): 100.00% (2/2) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 100.00% (1/1) exon specificity (mRNA level, initial, collapsed): 100.00% (1/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (1/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (1/1) exon sensitivity (CDS level, all): 100.00% (2/2) exon specificity (CDS level, all): 50.00% (2/4) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 100.00% (1/1) exon specificity (CDS level, initial): 50.00% (1/2) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (1/1) exon specificity (CDS level, terminal): 50.00% (1/2) exon sensitivity (CDS level, all, collapsed): 100.00% (2/2) exon specificity (CDS level, all, collapsed): 100.00% (2/2) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 100.00% (1/1) exon specificity (CDS level, initial, collapsed): 100.00% (1/1) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (1/1) exon specificity (CDS level, terminal, collapsed): 100.00% (1/1) genometools-1.5.1/testdata/gt_eval_test_6.prediction000066400000000000000000000010241211610345200226410ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene1 gDNA . mRNA 100 200 . - . ID=mRNA1;Parent=gene1 gDNA . exon 100 125 . - . Parent=mRNA1 gDNA . CDS 100 125 . - 1 Parent=mRNA1 gDNA . exon 175 200 . - . Parent=mRNA1 gDNA . CDS 175 200 . - 0 Parent=mRNA1 ### gDNA . gene 100 210 . - . ID=gene2 gDNA . mRNA 100 200 . - . ID=mRNA2;Parent=gene2 gDNA . exon 100 125 . - . Parent=mRNA2 gDNA . CDS 100 125 . - 1 Parent=mRNA2 gDNA . exon 175 200 . - . Parent=mRNA2 gDNA . CDS 175 200 . - 0 Parent=mRNA2 ### genometools-1.5.1/testdata/gt_eval_test_6.reality000066400000000000000000000004431211610345200221560ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene1 gDNA . mRNA 100 200 . - . ID=mRNA1;Parent=gene1 gDNA . exon 100 125 . - . Parent=mRNA1 gDNA . CDS 100 125 . - 1 Parent=mRNA1 gDNA . exon 175 200 . - . Parent=mRNA1 gDNA . CDS 175 200 . - 0 Parent=mRNA1 ### genometools-1.5.1/testdata/gt_eval_test_7.nuc000066400000000000000000000060421211610345200212740ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (1/1) (missing genes: 0) gene specificity (mRNA level): 50.00% (1/2) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (1/1) (missing genes: 0) gene specificity (CDS level): 50.00% (1/2) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 50.00% (1/2) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (CDS level): 50.00% (1/2) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (2/2) exon specificity (mRNA level, all): 66.67% (2/3) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 0.00% (0/1) exon sensitivity (mRNA level, initial): 100.00% (1/1) exon specificity (mRNA level, initial): 100.00% (1/1) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (1/1) exon specificity (mRNA level, terminal): 100.00% (1/1) exon sensitivity (mRNA level, all, collapsed): 100.00% (2/2) exon specificity (mRNA level, all, collapsed): 100.00% (2/2) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 0.00% (0/1) exon sensitivity (mRNA level, initial, collapsed): 100.00% (1/1) exon specificity (mRNA level, initial, collapsed): 100.00% (1/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (1/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (1/1) exon sensitivity (CDS level, all): 100.00% (2/2) exon specificity (CDS level, all): 66.67% (2/3) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 0.00% (0/1) exon sensitivity (CDS level, initial): 100.00% (1/1) exon specificity (CDS level, initial): 100.00% (1/1) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (1/1) exon specificity (CDS level, terminal): 100.00% (1/1) exon sensitivity (CDS level, all, collapsed): 100.00% (2/2) exon specificity (CDS level, all, collapsed): 66.67% (2/3) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 0.00% (0/1) exon sensitivity (CDS level, initial, collapsed): 100.00% (1/1) exon specificity (CDS level, initial, collapsed): 100.00% (1/1) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (1/1) exon specificity (CDS level, terminal, collapsed): 100.00% (1/1) nucleotide sensitivity (mRNA level): 100.00% (TP=52/(TP=52 + FN=0)) nucleotide specificity (mRNA level): 100.00% (TP=52/(TP=52 + FP=0)) nucleotide sensitivity (CDS level): 100.00% (TP=52/(TP=52 + FN=0)) nucleotide specificity (CDS level): 100.00% (TP=52/(TP=52 + FP=0)) genometools-1.5.1/testdata/gt_eval_test_7.out000066400000000000000000000054241211610345200213210ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (1/1) (missing genes: 0) gene specificity (mRNA level): 50.00% (1/2) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (1/1) (missing genes: 0) gene specificity (CDS level): 50.00% (1/2) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 50.00% (1/2) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (CDS level): 50.00% (1/2) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (2/2) exon specificity (mRNA level, all): 66.67% (2/3) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 0.00% (0/1) exon sensitivity (mRNA level, initial): 100.00% (1/1) exon specificity (mRNA level, initial): 100.00% (1/1) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (1/1) exon specificity (mRNA level, terminal): 100.00% (1/1) exon sensitivity (mRNA level, all, collapsed): 100.00% (2/2) exon specificity (mRNA level, all, collapsed): 100.00% (2/2) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 0.00% (0/1) exon sensitivity (mRNA level, initial, collapsed): 100.00% (1/1) exon specificity (mRNA level, initial, collapsed): 100.00% (1/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (1/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (1/1) exon sensitivity (CDS level, all): 100.00% (2/2) exon specificity (CDS level, all): 66.67% (2/3) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 0.00% (0/1) exon sensitivity (CDS level, initial): 100.00% (1/1) exon specificity (CDS level, initial): 100.00% (1/1) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (1/1) exon specificity (CDS level, terminal): 100.00% (1/1) exon sensitivity (CDS level, all, collapsed): 100.00% (2/2) exon specificity (CDS level, all, collapsed): 66.67% (2/3) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 0.00% (0/1) exon sensitivity (CDS level, initial, collapsed): 100.00% (1/1) exon specificity (CDS level, initial, collapsed): 100.00% (1/1) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (1/1) exon specificity (CDS level, terminal, collapsed): 100.00% (1/1) genometools-1.5.1/testdata/gt_eval_test_7.prediction000066400000000000000000000007071211610345200226510ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 125 . - . ID=gene1 gDNA . mRNA 100 125 . - . ID=mRNA1;Parent=gene1 gDNA . CDS 100 120 . - 0 Parent=mRNA1 gDNA . exon 100 125 . - . Parent=mRNA1 ### gDNA . gene 100 200 . - . ID=gene2 gDNA . mRNA 100 200 . - . ID=mRNA2;Parent=gene2 gDNA . exon 100 125 . - . Parent=mRNA2 gDNA . CDS 100 125 . - 1 Parent=mRNA2 gDNA . exon 175 200 . - . Parent=mRNA2 gDNA . CDS 175 200 . - 0 Parent=mRNA2 ### genometools-1.5.1/testdata/gt_eval_test_7.reality000066400000000000000000000004431211610345200221570ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene1 gDNA . mRNA 100 200 . - . ID=mRNA1;Parent=gene1 gDNA . exon 100 125 . - . Parent=mRNA1 gDNA . CDS 100 125 . - 1 Parent=mRNA1 gDNA . exon 175 200 . - . Parent=mRNA1 gDNA . CDS 175 200 . - 0 Parent=mRNA1 ### genometools-1.5.1/testdata/gt_eval_test_8.nuc000066400000000000000000000060421211610345200212750ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (1/1) (missing genes: 0) gene specificity (mRNA level): 50.00% (1/2) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (1/1) (missing genes: 0) gene specificity (CDS level): 50.00% (1/2) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 50.00% (1/2) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (CDS level): 50.00% (1/2) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (2/2) exon specificity (mRNA level, all): 66.67% (2/3) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 0.00% (0/1) exon sensitivity (mRNA level, initial): 100.00% (1/1) exon specificity (mRNA level, initial): 100.00% (1/1) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (1/1) exon specificity (mRNA level, terminal): 100.00% (1/1) exon sensitivity (mRNA level, all, collapsed): 100.00% (2/2) exon specificity (mRNA level, all, collapsed): 66.67% (2/3) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 0.00% (0/1) exon sensitivity (mRNA level, initial, collapsed): 100.00% (1/1) exon specificity (mRNA level, initial, collapsed): 100.00% (1/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (1/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (1/1) exon sensitivity (CDS level, all): 100.00% (2/2) exon specificity (CDS level, all): 66.67% (2/3) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 0.00% (0/1) exon sensitivity (CDS level, initial): 100.00% (1/1) exon specificity (CDS level, initial): 100.00% (1/1) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (1/1) exon specificity (CDS level, terminal): 100.00% (1/1) exon sensitivity (CDS level, all, collapsed): 100.00% (2/2) exon specificity (CDS level, all, collapsed): 100.00% (2/2) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 0.00% (0/1) exon sensitivity (CDS level, initial, collapsed): 100.00% (1/1) exon specificity (CDS level, initial, collapsed): 100.00% (1/1) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (1/1) exon specificity (CDS level, terminal, collapsed): 100.00% (1/1) nucleotide sensitivity (mRNA level): 100.00% (TP=52/(TP=52 + FN=0)) nucleotide specificity (mRNA level): 91.23% (TP=52/(TP=52 + FP=5)) nucleotide sensitivity (CDS level): 100.00% (TP=52/(TP=52 + FN=0)) nucleotide specificity (CDS level): 100.00% (TP=52/(TP=52 + FP=0)) genometools-1.5.1/testdata/gt_eval_test_8.out000066400000000000000000000054241211610345200213220ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (1/1) (missing genes: 0) gene specificity (mRNA level): 50.00% (1/2) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (1/1) (missing genes: 0) gene specificity (CDS level): 50.00% (1/2) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 50.00% (1/2) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (CDS level): 50.00% (1/2) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (2/2) exon specificity (mRNA level, all): 66.67% (2/3) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 0.00% (0/1) exon sensitivity (mRNA level, initial): 100.00% (1/1) exon specificity (mRNA level, initial): 100.00% (1/1) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (1/1) exon specificity (mRNA level, terminal): 100.00% (1/1) exon sensitivity (mRNA level, all, collapsed): 100.00% (2/2) exon specificity (mRNA level, all, collapsed): 66.67% (2/3) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 0.00% (0/1) exon sensitivity (mRNA level, initial, collapsed): 100.00% (1/1) exon specificity (mRNA level, initial, collapsed): 100.00% (1/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (1/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (1/1) exon sensitivity (CDS level, all): 100.00% (2/2) exon specificity (CDS level, all): 66.67% (2/3) exon sensitivity (CDS level, single): 100.00% (0/0) exon specificity (CDS level, single): 0.00% (0/1) exon sensitivity (CDS level, initial): 100.00% (1/1) exon specificity (CDS level, initial): 100.00% (1/1) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (1/1) exon specificity (CDS level, terminal): 100.00% (1/1) exon sensitivity (CDS level, all, collapsed): 100.00% (2/2) exon specificity (CDS level, all, collapsed): 100.00% (2/2) exon sensitivity (CDS level, single, collapsed): 100.00% (0/0) exon specificity (CDS level, single, collapsed): 0.00% (0/1) exon sensitivity (CDS level, initial, collapsed): 100.00% (1/1) exon specificity (CDS level, initial, collapsed): 100.00% (1/1) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (1/1) exon specificity (CDS level, terminal, collapsed): 100.00% (1/1) genometools-1.5.1/testdata/gt_eval_test_8.prediction000066400000000000000000000007071211610345200226520ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 125 . - . ID=gene1 gDNA . mRNA 100 125 . - . ID=mRNA1;Parent=gene1 gDNA . CDS 100 125 . - 0 Parent=mRNA1 gDNA . exon 100 130 . - . Parent=mRNA1 ### gDNA . gene 100 200 . - . ID=gene2 gDNA . mRNA 100 200 . - . ID=mRNA2;Parent=gene2 gDNA . exon 100 125 . - . Parent=mRNA2 gDNA . CDS 100 125 . - 1 Parent=mRNA2 gDNA . exon 175 200 . - . Parent=mRNA2 gDNA . CDS 175 200 . - 0 Parent=mRNA2 ### genometools-1.5.1/testdata/gt_eval_test_8.reality000066400000000000000000000004431211610345200221600ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene1 gDNA . mRNA 100 200 . - . ID=mRNA1;Parent=gene1 gDNA . exon 100 125 . - . Parent=mRNA1 gDNA . CDS 100 125 . - 1 Parent=mRNA1 gDNA . exon 175 200 . - . Parent=mRNA1 gDNA . CDS 175 200 . - 0 Parent=mRNA1 ### genometools-1.5.1/testdata/gt_eval_test_9.in000066400000000000000000000003611211610345200211150ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 80 gDNA . gene 10 20 . - . ID=gene1 gDNA . mRNA 10 20 . - . ID=mRNA1;Parent=gene1 gDNA . exon 10 20 . - . Parent=mRNA1 gDNA . CDS 10 20 . - 0 Parent=mRNA1 gDNA . exon 10 20 . - . Parent=mRNA1 ### genometools-1.5.1/testdata/gt_eval_test_9.out000066400000000000000000000060421211610345200213200ustar00rootroot00000000000000gene sensitivity (mRNA level): 100.00% (1/1) (missing genes: 0) gene specificity (mRNA level): 100.00% (1/1) (wrong genes: 0) gene sensitivity (CDS level): 100.00% (1/1) (missing genes: 0) gene specificity (CDS level): 100.00% (1/1) (wrong genes: 0) mRNA sensitivity (mRNA level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (mRNA level): 100.00% (1/1) (wrong mRNAs: 0) mRNA sensitivity (CDS level): 100.00% (1/1) (missing mRNAs: 0) mRNA specificity (CDS level): 100.00% (1/1) (wrong mRNAs: 0) exon sensitivity (mRNA level, all): 100.00% (2/2) exon specificity (mRNA level, all): 100.00% (2/2) exon sensitivity (mRNA level, single): 100.00% (0/0) exon specificity (mRNA level, single): 100.00% (0/0) exon sensitivity (mRNA level, initial): 100.00% (1/1) exon specificity (mRNA level, initial): 100.00% (1/1) exon sensitivity (mRNA level, internal): 100.00% (0/0) exon specificity (mRNA level, internal): 100.00% (0/0) exon sensitivity (mRNA level, terminal): 100.00% (1/1) exon specificity (mRNA level, terminal): 100.00% (1/1) exon sensitivity (mRNA level, all, collapsed): 100.00% (1/1) exon specificity (mRNA level, all, collapsed): 100.00% (1/1) exon sensitivity (mRNA level, single, collapsed): 100.00% (0/0) exon specificity (mRNA level, single, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, initial, collapsed): 100.00% (1/1) exon specificity (mRNA level, initial, collapsed): 100.00% (1/1) exon sensitivity (mRNA level, internal, collapsed): 100.00% (0/0) exon specificity (mRNA level, internal, collapsed): 100.00% (0/0) exon sensitivity (mRNA level, terminal, collapsed): 100.00% (1/1) exon specificity (mRNA level, terminal, collapsed): 100.00% (1/1) exon sensitivity (CDS level, all): 100.00% (1/1) exon specificity (CDS level, all): 100.00% (1/1) exon sensitivity (CDS level, single): 100.00% (1/1) exon specificity (CDS level, single): 100.00% (1/1) exon sensitivity (CDS level, initial): 100.00% (0/0) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 100.00% (0/0) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 100.00% (0/0) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 100.00% (1/1) exon specificity (CDS level, all, collapsed): 100.00% (1/1) exon sensitivity (CDS level, single, collapsed): 100.00% (1/1) exon specificity (CDS level, single, collapsed): 100.00% (1/1) exon sensitivity (CDS level, initial, collapsed): 100.00% (0/0) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 100.00% (0/0) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 100.00% (0/0) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) nucleotide sensitivity (mRNA level): 100.00% (TP=11/(TP=11 + FN=0)) nucleotide specificity (mRNA level): 100.00% (TP=11/(TP=11 + FP=0)) nucleotide sensitivity (CDS level): 100.00% (TP=11/(TP=11 + FN=0)) nucleotide specificity (CDS level): 100.00% (TP=11/(TP=11 + FP=0)) genometools-1.5.1/testdata/gt_evalviz_test.out000066400000000000000000000051741211610345200216260ustar00rootroot00000000000000gene sensitivity: 0.00% (0/291) (missing genes: 43) gene specificity: 0.00% (0/23) (wrong genes: 0) mRNA sensitivity: 100.00% (0/0) (missing mRNAs: 0) mRNA specificity: 0.00% (0/268) (wrong mRNAs: 268) exon sensitivity (mRNA level, all): 93.79% (1962/2092) exon specificity (mRNA level, all): 94.83% (1962/2069) exon sensitivity (mRNA level, single): 25.00% (2/8) exon specificity (mRNA level, single): 66.67% (2/3) exon sensitivity (mRNA level, initial): 86.22% (244/283) exon specificity (mRNA level, initial): 92.08% (244/265) exon sensitivity (mRNA level, internal): 96.05% (1458/1518) exon specificity (mRNA level, internal): 94.92% (1458/1536) exon sensitivity (mRNA level, terminal): 88.69% (251/283) exon specificity (mRNA level, terminal): 94.72% (251/265) exon sensitivity (mRNA level, all, collapsed): 90.68% (759/837) exon specificity (mRNA level, all, collapsed): 95.95% (759/791) exon sensitivity (mRNA level, single, collapsed): 28.57% (2/7) exon specificity (mRNA level, single, collapsed): 66.67% (2/3) exon sensitivity (mRNA level, initial, collapsed): 86.51% (218/252) exon specificity (mRNA level, initial, collapsed): 95.20% (218/229) exon sensitivity (mRNA level, internal, collapsed): 95.65% (330/345) exon specificity (mRNA level, internal, collapsed): 94.29% (330/350) exon sensitivity (mRNA level, terminal, collapsed): 88.48% (215/243) exon specificity (mRNA level, terminal, collapsed): 97.73% (215/220) exon sensitivity (CDS level, all): 0.00% (0/994) exon specificity (CDS level, all): 100.00% (0/0) exon sensitivity (CDS level, single): 0.00% (0/18) exon specificity (CDS level, single): 100.00% (0/0) exon sensitivity (CDS level, initial): 0.00% (0/102) exon specificity (CDS level, initial): 100.00% (0/0) exon sensitivity (CDS level, internal): 0.00% (0/772) exon specificity (CDS level, internal): 100.00% (0/0) exon sensitivity (CDS level, terminal): 0.00% (0/102) exon specificity (CDS level, terminal): 100.00% (0/0) exon sensitivity (CDS level, all, collapsed): 0.00% (0/382) exon specificity (CDS level, all, collapsed): 100.00% (0/0) exon sensitivity (CDS level, single, collapsed): 0.00% (0/15) exon specificity (CDS level, single, collapsed): 100.00% (0/0) exon sensitivity (CDS level, initial, collapsed): 0.00% (0/68) exon specificity (CDS level, initial, collapsed): 100.00% (0/0) exon sensitivity (CDS level, internal, collapsed): 0.00% (0/246) exon specificity (CDS level, internal, collapsed): 100.00% (0/0) exon sensitivity (CDS level, terminal, collapsed): 0.00% (0/59) exon specificity (CDS level, terminal, collapsed): 100.00% (0/0) genometools-1.5.1/testdata/gt_evalviz_test.prediction000066400000000000000000007251771211610345200231730ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr21 1 4294967295 chr21 gth gene 32669578 32687206 . - . ID=gene1 chr21 gth mRNA 32669578 32687206 . - . ID=mRNA1;Parent=gene1 chr21 gth exon 32669578 32669663 1.000000 - . Parent=mRNA1 chr21 . intron 32669664 32672624 . - . Parent=mRNA1 chr21 gth exon 32672625 32672721 1.000000 - . Parent=mRNA1 chr21 . intron 32672722 32677601 . - . Parent=mRNA1 chr21 gth exon 32677602 32677734 1.000000 - . Parent=mRNA1 chr21 . intron 32677735 32678492 . - . Parent=mRNA1 chr21 gth exon 32678493 32678644 1.000000 - . Parent=mRNA1 chr21 . intron 32678645 32679724 . - . Parent=mRNA1 chr21 gth exon 32679725 32679864 1.000000 - . Parent=mRNA1 chr21 . intron 32679865 32686948 . - . Parent=mRNA1 chr21 gth exon 32686949 32687206 1.000000 - . Parent=mRNA1 ### chr21 gth gene 32706185 32809570 . + . ID=gene2 chr21 gth mRNA 32706185 32762234 . + . ID=mRNA2;Parent=gene2 chr21 gth exon 32706185 32707192 1.000000 + . Parent=mRNA2 chr21 . intron 32707193 32747490 . + . Parent=mRNA2 chr21 gth exon 32747491 32747687 1.000000 + . Parent=mRNA2 chr21 . intron 32747688 32751775 . + . Parent=mRNA2 chr21 gth exon 32751776 32751899 1.000000 + . Parent=mRNA2 chr21 . intron 32751900 32761874 . + . Parent=mRNA2 chr21 gth exon 32761875 32762234 1.000000 + . Parent=mRNA2 chr21 gth mRNA 32706221 32795636 . + . ID=mRNA3;Parent=gene2 chr21 gth exon 32706221 32706372 1.000000 + . Parent=mRNA3 chr21 . intron 32706373 32747490 . + . Parent=mRNA3 chr21 gth exon 32747491 32747687 1.000000 + . Parent=mRNA3 chr21 . intron 32747688 32761874 . + . Parent=mRNA3 chr21 gth exon 32761875 32762027 1.000000 + . Parent=mRNA3 chr21 . intron 32762028 32789207 . + . Parent=mRNA3 chr21 gth exon 32789208 32789351 1.000000 + . Parent=mRNA3 chr21 . intron 32789352 32795595 . + . Parent=mRNA3 chr21 gth exon 32795596 32795636 1.000000 + . Parent=mRNA3 chr21 gth mRNA 32706560 32809570 . + . ID=mRNA4;Parent=gene2 chr21 gth exon 32706560 32707192 1.000000 + . Parent=mRNA4 chr21 . intron 32707193 32747490 . + . Parent=mRNA4 chr21 gth exon 32747491 32747687 1.000000 + . Parent=mRNA4 chr21 . intron 32747688 32751775 . + . Parent=mRNA4 chr21 gth exon 32751776 32751899 1.000000 + . Parent=mRNA4 chr21 . intron 32751900 32761874 . + . Parent=mRNA4 chr21 gth exon 32761875 32762027 1.000000 + . Parent=mRNA4 chr21 . intron 32762028 32789207 . + . Parent=mRNA4 chr21 gth exon 32789208 32789351 1.000000 + . Parent=mRNA4 chr21 . intron 32789352 32795595 . + . Parent=mRNA4 chr21 gth exon 32795596 32795676 1.000000 + . Parent=mRNA4 chr21 . intron 32795677 32798106 . + . Parent=mRNA4 chr21 gth exon 32798107 32798196 1.000000 + . Parent=mRNA4 chr21 . intron 32798197 32808994 . + . Parent=mRNA4 chr21 gth exon 32808995 32809570 1.000000 + . Parent=mRNA4 chr21 gth mRNA 32706616 32809570 . + . ID=mRNA5;Parent=gene2 chr21 gth exon 32706616 32707192 1.000000 + . Parent=mRNA5 chr21 . intron 32707193 32751775 . + . Parent=mRNA5 chr21 gth exon 32751776 32751899 1.000000 + . Parent=mRNA5 chr21 . intron 32751900 32761874 . + . Parent=mRNA5 chr21 gth exon 32761875 32762027 1.000000 + . Parent=mRNA5 chr21 . intron 32762028 32789207 . + . Parent=mRNA5 chr21 gth exon 32789208 32789351 1.000000 + . Parent=mRNA5 chr21 . intron 32789352 32795595 . + . Parent=mRNA5 chr21 gth exon 32795596 32795676 1.000000 + . Parent=mRNA5 chr21 . intron 32795677 32798106 . + . Parent=mRNA5 chr21 gth exon 32798107 32798196 1.000000 + . Parent=mRNA5 chr21 . intron 32798197 32808994 . + . Parent=mRNA5 chr21 gth exon 32808995 32809570 1.000000 + . Parent=mRNA5 chr21 gth mRNA 32706616 32809570 . + . ID=mRNA6;Parent=gene2 chr21 gth exon 32706616 32707192 1.000000 + . Parent=mRNA6 chr21 . intron 32707193 32751775 . + . Parent=mRNA6 chr21 gth exon 32751776 32751899 1.000000 + . Parent=mRNA6 chr21 . intron 32751900 32761874 . + . Parent=mRNA6 chr21 gth exon 32761875 32762027 1.000000 + . Parent=mRNA6 chr21 . intron 32762028 32795595 . + . Parent=mRNA6 chr21 gth exon 32795596 32795676 1.000000 + . Parent=mRNA6 chr21 . intron 32795677 32798106 . + . Parent=mRNA6 chr21 gth exon 32798107 32798196 1.000000 + . Parent=mRNA6 chr21 . intron 32798197 32808994 . + . Parent=mRNA6 chr21 gth exon 32808995 32809570 1.000000 + . Parent=mRNA6 chr21 gth mRNA 32706732 32809570 . + . ID=mRNA7;Parent=gene2 chr21 gth exon 32706732 32707192 1.000000 + . Parent=mRNA7 chr21 . intron 32707193 32761874 . + . Parent=mRNA7 chr21 gth exon 32761875 32762027 1.000000 + . Parent=mRNA7 chr21 . intron 32762028 32789207 . + . Parent=mRNA7 chr21 gth exon 32789208 32789351 1.000000 + . Parent=mRNA7 chr21 . intron 32789352 32795595 . + . Parent=mRNA7 chr21 gth exon 32795596 32795719 1.000000 + . Parent=mRNA7 chr21 . intron 32795720 32798106 . + . Parent=mRNA7 chr21 gth exon 32798107 32798196 1.000000 + . Parent=mRNA7 chr21 . intron 32798197 32808994 . + . Parent=mRNA7 chr21 gth exon 32808995 32809570 1.000000 + . Parent=mRNA7 chr21 gth mRNA 32706881 32809570 . + . ID=mRNA8;Parent=gene2 chr21 gth exon 32706881 32707192 1.000000 + . Parent=mRNA8 chr21 . intron 32707193 32747490 . + . Parent=mRNA8 chr21 gth exon 32747491 32747687 1.000000 + . Parent=mRNA8 chr21 . intron 32747688 32751775 . + . Parent=mRNA8 chr21 gth exon 32751776 32751899 1.000000 + . Parent=mRNA8 chr21 . intron 32751900 32761874 . + . Parent=mRNA8 chr21 gth exon 32761875 32762027 1.000000 + . Parent=mRNA8 chr21 . intron 32762028 32789207 . + . Parent=mRNA8 chr21 gth exon 32789208 32789351 1.000000 + . Parent=mRNA8 chr21 . intron 32789352 32795595 . + . Parent=mRNA8 chr21 gth exon 32795596 32795667 1.000000 + . Parent=mRNA8 chr21 . intron 32795668 32798106 . + . Parent=mRNA8 chr21 gth exon 32798107 32798196 1.000000 + . Parent=mRNA8 chr21 . intron 32798197 32808994 . + . Parent=mRNA8 chr21 gth exon 32808995 32809570 1.000000 + . Parent=mRNA8 chr21 gth mRNA 32706943 32727463 . + . ID=mRNA9;Parent=gene2 chr21 gth exon 32706943 32707192 1.000000 + . Parent=mRNA9 chr21 . intron 32707193 32727329 . + . Parent=mRNA9 chr21 gth exon 32727330 32727463 1.000000 + . Parent=mRNA9 chr21 gth mRNA 32722513 32809570 . + . ID=mRNA10;Parent=gene2 chr21 gth exon 32722513 32722863 1.000000 + . Parent=mRNA10 chr21 . intron 32722864 32747490 . + . Parent=mRNA10 chr21 gth exon 32747491 32747687 1.000000 + . Parent=mRNA10 chr21 . intron 32747688 32751775 . + . Parent=mRNA10 chr21 gth exon 32751776 32751899 1.000000 + . Parent=mRNA10 chr21 . intron 32751900 32761874 . + . Parent=mRNA10 chr21 gth exon 32761875 32762027 1.000000 + . Parent=mRNA10 chr21 . intron 32762028 32789207 . + . Parent=mRNA10 chr21 gth exon 32789208 32789351 1.000000 + . Parent=mRNA10 chr21 . intron 32789352 32798106 . + . Parent=mRNA10 chr21 gth exon 32798107 32798196 1.000000 + . Parent=mRNA10 chr21 . intron 32798197 32808994 . + . Parent=mRNA10 chr21 gth exon 32808995 32809570 1.000000 + . Parent=mRNA10 chr21 gth mRNA 32746364 32809570 . + . ID=mRNA11;Parent=gene2 chr21 gth exon 32746364 32747687 1.000000 + . Parent=mRNA11 chr21 . intron 32747688 32751775 . + . Parent=mRNA11 chr21 gth exon 32751776 32751899 1.000000 + . Parent=mRNA11 chr21 . intron 32751900 32761874 . + . Parent=mRNA11 chr21 gth exon 32761875 32762027 1.000000 + . Parent=mRNA11 chr21 . intron 32762028 32789207 . + . Parent=mRNA11 chr21 gth exon 32789208 32789351 1.000000 + . Parent=mRNA11 chr21 . intron 32789352 32795595 . + . Parent=mRNA11 chr21 gth exon 32795596 32795676 1.000000 + . Parent=mRNA11 chr21 . intron 32795677 32798106 . + . Parent=mRNA11 chr21 gth exon 32798107 32798196 1.000000 + . Parent=mRNA11 chr21 . intron 32798197 32808994 . + . Parent=mRNA11 chr21 gth exon 32808995 32809570 1.000000 + . Parent=mRNA11 chr21 gth mRNA 32787834 32809061 . + . ID=mRNA12;Parent=gene2 chr21 gth exon 32787834 32787943 1.000000 + . Parent=mRNA12 chr21 . intron 32787944 32789207 . + . Parent=mRNA12 chr21 gth exon 32789208 32789351 1.000000 + . Parent=mRNA12 chr21 . intron 32789352 32795595 . + . Parent=mRNA12 chr21 gth exon 32795596 32795676 1.000000 + . Parent=mRNA12 chr21 . intron 32795677 32798106 . + . Parent=mRNA12 chr21 gth exon 32798107 32798196 1.000000 + . Parent=mRNA12 chr21 . intron 32798197 32808994 . + . Parent=mRNA12 chr21 gth exon 32808995 32809061 1.000000 + . Parent=mRNA12 ### chr21 gth gene 32870733 32907047 . - . ID=gene3 chr21 gth mRNA 32870733 32879714 . - . ID=mRNA13;Parent=gene3 chr21 gth exon 32870733 32871104 1.000000 - . Parent=mRNA13 chr21 . intron 32871105 32872874 . - . Parent=mRNA13 chr21 gth exon 32872875 32873012 1.000000 - . Parent=mRNA13 chr21 . intron 32873013 32876380 . - . Parent=mRNA13 chr21 gth exon 32876381 32876596 1.000000 - . Parent=mRNA13 chr21 . intron 32876597 32878341 . - . Parent=mRNA13 chr21 gth exon 32878342 32878486 1.000000 - . Parent=mRNA13 chr21 . intron 32878487 32879601 . - . Parent=mRNA13 chr21 gth exon 32879602 32879714 1.000000 - . Parent=mRNA13 chr21 gth mRNA 32870840 32876615 . - . ID=mRNA14;Parent=gene3 chr21 gth exon 32870840 32871104 1.000000 - . Parent=mRNA14 chr21 . intron 32871105 32871606 . - . Parent=mRNA14 chr21 gth exon 32871607 32871857 1.000000 - . Parent=mRNA14 chr21 . intron 32871858 32872874 . - . Parent=mRNA14 chr21 gth exon 32872875 32873012 1.000000 - . Parent=mRNA14 chr21 . intron 32873013 32876380 . - . Parent=mRNA14 chr21 gth exon 32876381 32876615 1.000000 - . Parent=mRNA14 chr21 gth mRNA 32870840 32879714 . - . ID=mRNA15;Parent=gene3 chr21 gth exon 32870840 32871104 1.000000 - . Parent=mRNA15 chr21 . intron 32871105 32872874 . - . Parent=mRNA15 chr21 gth exon 32872875 32873012 1.000000 - . Parent=mRNA15 chr21 . intron 32873013 32876380 . - . Parent=mRNA15 chr21 gth exon 32876381 32876596 1.000000 - . Parent=mRNA15 chr21 . intron 32876597 32879601 . - . Parent=mRNA15 chr21 gth exon 32879602 32879714 1.000000 - . Parent=mRNA15 chr21 gth mRNA 32876381 32906327 . - . ID=mRNA16;Parent=gene3 chr21 gth exon 32876381 32876596 1.000000 - . Parent=mRNA16 chr21 . intron 32876597 32896452 . - . Parent=mRNA16 chr21 gth exon 32896453 32896548 1.000000 - . Parent=mRNA16 chr21 . intron 32896549 32897341 . - . Parent=mRNA16 chr21 gth exon 32897342 32897473 1.000000 - . Parent=mRNA16 chr21 . intron 32897474 32898305 . - . Parent=mRNA16 chr21 gth exon 32898306 32898464 1.000000 - . Parent=mRNA16 chr21 . intron 32898465 32901829 . - . Parent=mRNA16 chr21 gth exon 32901830 32901897 1.000000 - . Parent=mRNA16 chr21 . intron 32901898 32904018 . - . Parent=mRNA16 chr21 gth exon 32904019 32904186 1.000000 - . Parent=mRNA16 chr21 . intron 32904187 32906285 . - . Parent=mRNA16 chr21 gth exon 32906286 32906327 1.000000 - . Parent=mRNA16 chr21 gth mRNA 32876381 32906462 . - . ID=mRNA17;Parent=gene3 chr21 gth exon 32876381 32876596 1.000000 - . Parent=mRNA17 chr21 . intron 32876597 32897341 . - . Parent=mRNA17 chr21 gth exon 32897342 32897473 1.000000 - . Parent=mRNA17 chr21 . intron 32897474 32898305 . - . Parent=mRNA17 chr21 gth exon 32898306 32898464 1.000000 - . Parent=mRNA17 chr21 . intron 32898465 32901829 . - . Parent=mRNA17 chr21 gth exon 32901830 32901897 1.000000 - . Parent=mRNA17 chr21 . intron 32901898 32904018 . - . Parent=mRNA17 chr21 gth exon 32904019 32904186 1.000000 - . Parent=mRNA17 chr21 . intron 32904187 32906285 . - . Parent=mRNA17 chr21 gth exon 32906286 32906462 1.000000 - . Parent=mRNA17 chr21 gth mRNA 32876405 32901879 . - . ID=mRNA18;Parent=gene3 chr21 gth exon 32876405 32876596 1.000000 - . Parent=mRNA18 chr21 . intron 32876597 32898305 . - . Parent=mRNA18 chr21 gth exon 32898306 32898464 1.000000 - . Parent=mRNA18 chr21 . intron 32898465 32901829 . - . Parent=mRNA18 chr21 gth exon 32901830 32901879 1.000000 - . Parent=mRNA18 chr21 gth mRNA 32886260 32906736 . - . ID=mRNA19;Parent=gene3 chr21 gth exon 32886260 32886599 1.000000 - . Parent=mRNA19 chr21 . intron 32886600 32897341 . - . Parent=mRNA19 chr21 gth exon 32897342 32897473 1.000000 - . Parent=mRNA19 chr21 . intron 32897474 32898305 . - . Parent=mRNA19 chr21 gth exon 32898306 32898464 1.000000 - . Parent=mRNA19 chr21 . intron 32898465 32901829 . - . Parent=mRNA19 chr21 gth exon 32901830 32901897 1.000000 - . Parent=mRNA19 chr21 . intron 32901898 32904018 . - . Parent=mRNA19 chr21 gth exon 32904019 32904135 1.000000 - . Parent=mRNA19 chr21 . intron 32904136 32906285 . - . Parent=mRNA19 chr21 gth exon 32906286 32906736 1.000000 - . Parent=mRNA19 chr21 gth mRNA 32895848 32906736 . - . ID=mRNA20;Parent=gene3 chr21 gth exon 32895848 32896154 1.000000 - . Parent=mRNA20 chr21 . intron 32896155 32897341 . - . Parent=mRNA20 chr21 gth exon 32897342 32897473 1.000000 - . Parent=mRNA20 chr21 . intron 32897474 32898305 . - . Parent=mRNA20 chr21 gth exon 32898306 32898464 1.000000 - . Parent=mRNA20 chr21 . intron 32898465 32901829 . - . Parent=mRNA20 chr21 gth exon 32901830 32901897 1.000000 - . Parent=mRNA20 chr21 . intron 32901898 32904018 . - . Parent=mRNA20 chr21 gth exon 32904019 32904135 1.000000 - . Parent=mRNA20 chr21 . intron 32904136 32906285 . - . Parent=mRNA20 chr21 gth exon 32906286 32906736 1.000000 - . Parent=mRNA20 chr21 gth mRNA 32895848 32906767 . - . ID=mRNA21;Parent=gene3 chr21 gth exon 32895848 32897473 1.000000 - . Parent=mRNA21 chr21 . intron 32897474 32898305 . - . Parent=mRNA21 chr21 gth exon 32898306 32898464 1.000000 - . Parent=mRNA21 chr21 . intron 32898465 32901829 . - . Parent=mRNA21 chr21 gth exon 32901830 32901897 1.000000 - . Parent=mRNA21 chr21 . intron 32901898 32904018 . - . Parent=mRNA21 chr21 gth exon 32904019 32904186 1.000000 - . Parent=mRNA21 chr21 . intron 32904187 32906285 . - . Parent=mRNA21 chr21 gth exon 32906286 32906767 1.000000 - . Parent=mRNA21 chr21 gth mRNA 32895848 32907047 . - . ID=mRNA22;Parent=gene3 chr21 gth exon 32895848 32896154 1.000000 - . Parent=mRNA22 chr21 . intron 32896155 32896452 . - . Parent=mRNA22 chr21 gth exon 32896453 32896548 1.000000 - . Parent=mRNA22 chr21 . intron 32896549 32897341 . - . Parent=mRNA22 chr21 gth exon 32897342 32897473 1.000000 - . Parent=mRNA22 chr21 . intron 32897474 32898305 . - . Parent=mRNA22 chr21 gth exon 32898306 32898464 1.000000 - . Parent=mRNA22 chr21 . intron 32898465 32901829 . - . Parent=mRNA22 chr21 gth exon 32901830 32901897 1.000000 - . Parent=mRNA22 chr21 . intron 32901898 32904018 . - . Parent=mRNA22 chr21 gth exon 32904019 32904186 1.000000 - . Parent=mRNA22 chr21 . intron 32904187 32906285 . - . Parent=mRNA22 chr21 gth exon 32906286 32907047 1.000000 - . Parent=mRNA22 chr21 gth mRNA 32895884 32906736 . - . ID=mRNA23;Parent=gene3 chr21 gth exon 32895884 32896548 1.000000 - . Parent=mRNA23 chr21 . intron 32896549 32897341 . - . Parent=mRNA23 chr21 gth exon 32897342 32897473 1.000000 - . Parent=mRNA23 chr21 . intron 32897474 32898305 . - . Parent=mRNA23 chr21 gth exon 32898306 32898464 1.000000 - . Parent=mRNA23 chr21 . intron 32898465 32901829 . - . Parent=mRNA23 chr21 gth exon 32901830 32901897 1.000000 - . Parent=mRNA23 chr21 . intron 32901898 32904018 . - . Parent=mRNA23 chr21 gth exon 32904019 32904135 1.000000 - . Parent=mRNA23 chr21 . intron 32904136 32906285 . - . Parent=mRNA23 chr21 gth exon 32906286 32906736 1.000000 - . Parent=mRNA23 chr21 gth mRNA 32895966 32906784 . - . ID=mRNA24;Parent=gene3 chr21 gth exon 32895966 32896154 1.000000 - . Parent=mRNA24 chr21 . intron 32896155 32896452 . - . Parent=mRNA24 chr21 gth exon 32896453 32896548 1.000000 - . Parent=mRNA24 chr21 . intron 32896549 32897341 . - . Parent=mRNA24 chr21 gth exon 32897342 32897473 1.000000 - . Parent=mRNA24 chr21 . intron 32897474 32898305 . - . Parent=mRNA24 chr21 gth exon 32898306 32898464 1.000000 - . Parent=mRNA24 chr21 . intron 32898465 32904018 . - . Parent=mRNA24 chr21 gth exon 32904019 32904186 1.000000 - . Parent=mRNA24 chr21 . intron 32904187 32906285 . - . Parent=mRNA24 chr21 gth exon 32906286 32906784 1.000000 - . Parent=mRNA24 chr21 gth mRNA 32895991 32898694 . - . ID=mRNA25;Parent=gene3 chr21 gth exon 32895991 32897473 1.000000 - . Parent=mRNA25 chr21 . intron 32897474 32898305 . - . Parent=mRNA25 chr21 gth exon 32898306 32898694 1.000000 - . Parent=mRNA25 ### chr21 gth gene 32922944 33022183 . - . ID=gene4 chr21 gth mRNA 32922944 33022105 . - . ID=mRNA26;Parent=gene4 chr21 gth exon 32922944 32925982 1.000000 - . Parent=mRNA26 chr21 . intron 32925983 32929041 . - . Parent=mRNA26 chr21 gth exon 32929042 32929065 1.000000 - . Parent=mRNA26 chr21 . intron 32929066 32933088 . - . Parent=mRNA26 chr21 gth exon 32933089 32933306 1.000000 - . Parent=mRNA26 chr21 . intron 32933307 32933851 . - . Parent=mRNA26 chr21 gth exon 32933852 32933960 1.000000 - . Parent=mRNA26 chr21 . intron 32933961 32936076 . - . Parent=mRNA26 chr21 gth exon 32936077 32936147 1.000000 - . Parent=mRNA26 chr21 . intron 32936148 32936275 . - . Parent=mRNA26 chr21 gth exon 32936276 32936314 1.000000 - . Parent=mRNA26 chr21 . intron 32936315 32939148 . - . Parent=mRNA26 chr21 gth exon 32939149 32939187 1.000000 - . Parent=mRNA26 chr21 . intron 32939188 32939826 . - . Parent=mRNA26 chr21 gth exon 32939827 32939894 1.000000 - . Parent=mRNA26 chr21 . intron 32939895 32939942 . - . Parent=mRNA26 chr21 gth exon 32939943 32939970 1.000000 - . Parent=mRNA26 chr21 . intron 32939971 32940573 . - . Parent=mRNA26 chr21 gth exon 32940574 32940783 1.000000 - . Parent=mRNA26 chr21 . intron 32940784 32944364 . - . Parent=mRNA26 chr21 gth exon 32944365 32944527 1.000000 - . Parent=mRNA26 chr21 . intron 32944528 32947468 . - . Parent=mRNA26 chr21 gth exon 32947469 32947547 1.000000 - . Parent=mRNA26 chr21 . intron 32947548 32950867 . - . Parent=mRNA26 chr21 gth exon 32950868 32951083 1.000000 - . Parent=mRNA26 chr21 . intron 32951084 32951183 . - . Parent=mRNA26 chr21 gth exon 32951184 32951301 1.000000 - . Parent=mRNA26 chr21 . intron 32951302 32951896 . - . Parent=mRNA26 chr21 gth exon 32951897 32952053 1.000000 - . Parent=mRNA26 chr21 . intron 32952054 32959093 . - . Parent=mRNA26 chr21 gth exon 32959094 32959252 1.000000 - . Parent=mRNA26 chr21 . intron 32959253 32960123 . - . Parent=mRNA26 chr21 gth exon 32960124 32960316 1.000000 - . Parent=mRNA26 chr21 . intron 32960317 32960613 . - . Parent=mRNA26 chr21 gth exon 32960614 32960754 1.000000 - . Parent=mRNA26 chr21 . intron 32960755 32964468 . - . Parent=mRNA26 chr21 gth exon 32964469 32964553 1.000000 - . Parent=mRNA26 chr21 . intron 32964554 32967520 . - . Parent=mRNA26 chr21 gth exon 32967521 32967712 1.000000 - . Parent=mRNA26 chr21 . intron 32967713 32967727 . - . Parent=mRNA26 chr21 gth exon 32967728 32967743 0.500000 - . Parent=mRNA26 chr21 . intron 32967744 32972773 . - . Parent=mRNA26 chr21 gth exon 32972774 32972782 0.555556 - . Parent=mRNA26 chr21 . intron 32972783 32972825 . - . Parent=mRNA26 chr21 gth exon 32972826 32972982 1.000000 - . Parent=mRNA26 chr21 . intron 32972983 32975676 . - . Parent=mRNA26 chr21 gth exon 32975677 32975829 1.000000 - . Parent=mRNA26 chr21 . intron 32975830 32978218 . - . Parent=mRNA26 chr21 gth exon 32978219 32978300 1.000000 - . Parent=mRNA26 chr21 . intron 32978301 32979928 . - . Parent=mRNA26 chr21 gth exon 32979929 32980098 1.000000 - . Parent=mRNA26 chr21 . intron 32980099 32981158 . - . Parent=mRNA26 chr21 gth exon 32981159 32981255 1.000000 - . Parent=mRNA26 chr21 . intron 32981256 32982486 . - . Parent=mRNA26 chr21 gth exon 32982487 32982548 1.000000 - . Parent=mRNA26 chr21 . intron 32982549 32988408 . - . Parent=mRNA26 chr21 gth exon 32988409 32988492 1.000000 - . Parent=mRNA26 chr21 . intron 32988493 32989237 . - . Parent=mRNA26 chr21 gth exon 32989238 32989463 1.000000 - . Parent=mRNA26 chr21 . intron 32989464 32994018 . - . Parent=mRNA26 chr21 gth exon 32994019 32994286 1.000000 - . Parent=mRNA26 chr21 . intron 32994287 32996141 . - . Parent=mRNA26 chr21 gth exon 32996142 32996228 1.000000 - . Parent=mRNA26 chr21 . intron 32996229 33020953 . - . Parent=mRNA26 chr21 gth exon 33020954 33021099 1.000000 - . Parent=mRNA26 chr21 . intron 33021100 33022018 . - . Parent=mRNA26 chr21 gth exon 33022019 33022105 1.000000 - . Parent=mRNA26 chr21 gth mRNA 32922945 33022183 . - . ID=mRNA27;Parent=gene4 chr21 gth exon 32922945 32925982 1.000000 - . Parent=mRNA27 chr21 . intron 32925983 32929041 . - . Parent=mRNA27 chr21 gth exon 32929042 32929065 1.000000 - . Parent=mRNA27 chr21 . intron 32929066 32933088 . - . Parent=mRNA27 chr21 gth exon 32933089 32933306 1.000000 - . Parent=mRNA27 chr21 . intron 32933307 32933851 . - . Parent=mRNA27 chr21 gth exon 32933852 32933960 1.000000 - . Parent=mRNA27 chr21 . intron 32933961 32936076 . - . Parent=mRNA27 chr21 gth exon 32936077 32936147 1.000000 - . Parent=mRNA27 chr21 . intron 32936148 32936275 . - . Parent=mRNA27 chr21 gth exon 32936276 32936314 1.000000 - . Parent=mRNA27 chr21 . intron 32936315 32937590 . - . Parent=mRNA27 chr21 gth exon 32937591 32937638 1.000000 - . Parent=mRNA27 chr21 . intron 32937639 32939148 . - . Parent=mRNA27 chr21 gth exon 32939149 32939187 1.000000 - . Parent=mRNA27 chr21 . intron 32939188 32939826 . - . Parent=mRNA27 chr21 gth exon 32939827 32939970 1.000000 - . Parent=mRNA27 chr21 . intron 32939971 32940573 . - . Parent=mRNA27 chr21 gth exon 32940574 32940783 1.000000 - . Parent=mRNA27 chr21 . intron 32940784 32944364 . - . Parent=mRNA27 chr21 gth exon 32944365 32944527 1.000000 - . Parent=mRNA27 chr21 . intron 32944528 32947468 . - . Parent=mRNA27 chr21 gth exon 32947469 32947547 1.000000 - . Parent=mRNA27 chr21 . intron 32947548 32950867 . - . Parent=mRNA27 chr21 gth exon 32950868 32951083 1.000000 - . Parent=mRNA27 chr21 . intron 32951084 32951183 . - . Parent=mRNA27 chr21 gth exon 32951184 32951301 1.000000 - . Parent=mRNA27 chr21 . intron 32951302 32951896 . - . Parent=mRNA27 chr21 gth exon 32951897 32952053 1.000000 - . Parent=mRNA27 chr21 . intron 32952054 32959093 . - . Parent=mRNA27 chr21 gth exon 32959094 32959252 1.000000 - . Parent=mRNA27 chr21 . intron 32959253 32960123 . - . Parent=mRNA27 chr21 gth exon 32960124 32960316 1.000000 - . Parent=mRNA27 chr21 . intron 32960317 32960613 . - . Parent=mRNA27 chr21 gth exon 32960614 32960754 1.000000 - . Parent=mRNA27 chr21 . intron 32960755 32964468 . - . Parent=mRNA27 chr21 gth exon 32964469 32964553 1.000000 - . Parent=mRNA27 chr21 . intron 32964554 32967520 . - . Parent=mRNA27 chr21 gth exon 32967521 32967712 1.000000 - . Parent=mRNA27 chr21 . intron 32967713 32967727 . - . Parent=mRNA27 chr21 gth exon 32967728 32967743 0.500000 - . Parent=mRNA27 chr21 . intron 32967744 32972773 . - . Parent=mRNA27 chr21 gth exon 32972774 32972782 0.555556 - . Parent=mRNA27 chr21 . intron 32972783 32972825 . - . Parent=mRNA27 chr21 gth exon 32972826 32972982 1.000000 - . Parent=mRNA27 chr21 . intron 32972983 32975676 . - . Parent=mRNA27 chr21 gth exon 32975677 32975829 1.000000 - . Parent=mRNA27 chr21 . intron 32975830 32978218 . - . Parent=mRNA27 chr21 gth exon 32978219 32978300 1.000000 - . Parent=mRNA27 chr21 . intron 32978301 32979928 . - . Parent=mRNA27 chr21 gth exon 32979929 32980098 1.000000 - . Parent=mRNA27 chr21 . intron 32980099 32981158 . - . Parent=mRNA27 chr21 gth exon 32981159 32981255 1.000000 - . Parent=mRNA27 chr21 . intron 32981256 32982486 . - . Parent=mRNA27 chr21 gth exon 32982487 32982548 1.000000 - . Parent=mRNA27 chr21 . intron 32982549 32988408 . - . Parent=mRNA27 chr21 gth exon 32988409 32988492 1.000000 - . Parent=mRNA27 chr21 . intron 32988493 32989237 . - . Parent=mRNA27 chr21 gth exon 32989238 32989463 1.000000 - . Parent=mRNA27 chr21 . intron 32989464 32994018 . - . Parent=mRNA27 chr21 gth exon 32994019 32994286 1.000000 - . Parent=mRNA27 chr21 . intron 32994287 32996141 . - . Parent=mRNA27 chr21 gth exon 32996142 32996228 1.000000 - . Parent=mRNA27 chr21 . intron 32996229 33020953 . - . Parent=mRNA27 chr21 gth exon 33020954 33021099 1.000000 - . Parent=mRNA27 chr21 . intron 33021100 33022127 . - . Parent=mRNA27 chr21 gth exon 33022128 33022183 1.000000 - . Parent=mRNA27 chr21 gth mRNA 32925171 33022148 . - . ID=mRNA28;Parent=gene4 chr21 gth exon 32925171 32925982 1.000000 - . Parent=mRNA28 chr21 . intron 32925983 32933088 . - . Parent=mRNA28 chr21 gth exon 32933089 32933306 1.000000 - . Parent=mRNA28 chr21 . intron 32933307 32933851 . - . Parent=mRNA28 chr21 gth exon 32933852 32933960 1.000000 - . Parent=mRNA28 chr21 . intron 32933961 32936076 . - . Parent=mRNA28 chr21 gth exon 32936077 32936147 1.000000 - . Parent=mRNA28 chr21 . intron 32936148 32936275 . - . Parent=mRNA28 chr21 gth exon 32936276 32936314 1.000000 - . Parent=mRNA28 chr21 . intron 32936315 32937590 . - . Parent=mRNA28 chr21 gth exon 32937591 32937638 1.000000 - . Parent=mRNA28 chr21 . intron 32937639 32939148 . - . Parent=mRNA28 chr21 gth exon 32939149 32939187 1.000000 - . Parent=mRNA28 chr21 . intron 32939188 32939826 . - . Parent=mRNA28 chr21 gth exon 32939827 32939970 1.000000 - . Parent=mRNA28 chr21 . intron 32939971 32940573 . - . Parent=mRNA28 chr21 gth exon 32940574 32940783 1.000000 - . Parent=mRNA28 chr21 . intron 32940784 32944364 . - . Parent=mRNA28 chr21 gth exon 32944365 32944527 1.000000 - . Parent=mRNA28 chr21 . intron 32944528 32947468 . - . Parent=mRNA28 chr21 gth exon 32947469 32947547 1.000000 - . Parent=mRNA28 chr21 . intron 32947548 32950867 . - . Parent=mRNA28 chr21 gth exon 32950868 32951083 1.000000 - . Parent=mRNA28 chr21 . intron 32951084 32951183 . - . Parent=mRNA28 chr21 gth exon 32951184 32951301 1.000000 - . Parent=mRNA28 chr21 . intron 32951302 32951896 . - . Parent=mRNA28 chr21 gth exon 32951897 32952053 1.000000 - . Parent=mRNA28 chr21 . intron 32952054 32959093 . - . Parent=mRNA28 chr21 gth exon 32959094 32959252 1.000000 - . Parent=mRNA28 chr21 . intron 32959253 32960123 . - . Parent=mRNA28 chr21 gth exon 32960124 32960316 1.000000 - . Parent=mRNA28 chr21 . intron 32960317 32960613 . - . Parent=mRNA28 chr21 gth exon 32960614 32960754 1.000000 - . Parent=mRNA28 chr21 . intron 32960755 32964468 . - . Parent=mRNA28 chr21 gth exon 32964469 32964553 1.000000 - . Parent=mRNA28 chr21 . intron 32964554 32967520 . - . Parent=mRNA28 chr21 gth exon 32967521 32967712 1.000000 - . Parent=mRNA28 chr21 . intron 32967713 32967727 . - . Parent=mRNA28 chr21 gth exon 32967728 32967743 0.500000 - . Parent=mRNA28 chr21 . intron 32967744 32972773 . - . Parent=mRNA28 chr21 gth exon 32972774 32972782 0.555556 - . Parent=mRNA28 chr21 . intron 32972783 32972825 . - . Parent=mRNA28 chr21 gth exon 32972826 32972982 1.000000 - . Parent=mRNA28 chr21 . intron 32972983 32975676 . - . Parent=mRNA28 chr21 gth exon 32975677 32975829 1.000000 - . Parent=mRNA28 chr21 . intron 32975830 32978218 . - . Parent=mRNA28 chr21 gth exon 32978219 32978300 1.000000 - . Parent=mRNA28 chr21 . intron 32978301 32979928 . - . Parent=mRNA28 chr21 gth exon 32979929 32980098 1.000000 - . Parent=mRNA28 chr21 . intron 32980099 32981158 . - . Parent=mRNA28 chr21 gth exon 32981159 32981255 1.000000 - . Parent=mRNA28 chr21 . intron 32981256 32982486 . - . Parent=mRNA28 chr21 gth exon 32982487 32982548 1.000000 - . Parent=mRNA28 chr21 . intron 32982549 32988408 . - . Parent=mRNA28 chr21 gth exon 32988409 32988492 1.000000 - . Parent=mRNA28 chr21 . intron 32988493 32989237 . - . Parent=mRNA28 chr21 gth exon 32989238 32989463 1.000000 - . Parent=mRNA28 chr21 . intron 32989464 32994018 . - . Parent=mRNA28 chr21 gth exon 32994019 32994286 1.000000 - . Parent=mRNA28 chr21 . intron 32994287 32996141 . - . Parent=mRNA28 chr21 gth exon 32996142 32996228 1.000000 - . Parent=mRNA28 chr21 . intron 32996229 33020953 . - . Parent=mRNA28 chr21 gth exon 33020954 33021099 1.000000 - . Parent=mRNA28 chr21 . intron 33021100 33022127 . - . Parent=mRNA28 chr21 gth exon 33022128 33022148 1.000000 - . Parent=mRNA28 chr21 gth mRNA 32933195 32939900 . - . ID=mRNA29;Parent=gene4 chr21 gth exon 32933195 32933306 1.000000 - . Parent=mRNA29 chr21 . intron 32933307 32933851 . - . Parent=mRNA29 chr21 gth exon 32933852 32933960 1.000000 - . Parent=mRNA29 chr21 . intron 32933961 32936076 . - . Parent=mRNA29 chr21 gth exon 32936077 32936147 1.000000 - . Parent=mRNA29 chr21 . intron 32936148 32939826 . - . Parent=mRNA29 chr21 gth exon 32939827 32939900 1.000000 - . Parent=mRNA29 chr21 gth mRNA 32944365 32948282 . - . ID=mRNA30;Parent=gene4 chr21 gth exon 32944365 32944527 1.000000 - . Parent=mRNA30 chr21 . intron 32944528 32947468 . - . Parent=mRNA30 chr21 gth exon 32947469 32948282 1.000000 - . Parent=mRNA30 chr21 gth mRNA 32950872 32952742 . - . ID=mRNA31;Parent=gene4 chr21 gth exon 32950872 32951083 1.000000 - . Parent=mRNA31 chr21 . intron 32951084 32951183 . - . Parent=mRNA31 chr21 gth exon 32951184 32951301 1.000000 - . Parent=mRNA31 chr21 . intron 32951302 32951896 . - . Parent=mRNA31 chr21 gth exon 32951897 32952053 1.000000 - . Parent=mRNA31 chr21 . intron 32952054 32952651 . - . Parent=mRNA31 chr21 gth exon 32952652 32952742 1.000000 - . Parent=mRNA31 chr21 gth mRNA 32960167 33022121 . - . ID=mRNA32;Parent=gene4 chr21 gth exon 32960167 32960316 1.000000 - . Parent=mRNA32 chr21 . intron 32960317 32960613 . - . Parent=mRNA32 chr21 gth exon 32960614 32960754 1.000000 - . Parent=mRNA32 chr21 . intron 32960755 32964468 . - . Parent=mRNA32 chr21 gth exon 32964469 32964553 1.000000 - . Parent=mRNA32 chr21 . intron 32964554 32967520 . - . Parent=mRNA32 chr21 gth exon 32967521 32967712 1.000000 - . Parent=mRNA32 chr21 . intron 32967713 32972825 . - . Parent=mRNA32 chr21 gth exon 32972826 32972991 1.000000 - . Parent=mRNA32 chr21 . intron 32972992 32975676 . - . Parent=mRNA32 chr21 gth exon 32975677 32975829 1.000000 - . Parent=mRNA32 chr21 . intron 32975830 32978218 . - . Parent=mRNA32 chr21 gth exon 32978219 32978300 1.000000 - . Parent=mRNA32 chr21 . intron 32978301 32979928 . - . Parent=mRNA32 chr21 gth exon 32979929 32980098 1.000000 - . Parent=mRNA32 chr21 . intron 32980099 32981158 . - . Parent=mRNA32 chr21 gth exon 32981159 32981255 1.000000 - . Parent=mRNA32 chr21 . intron 32981256 32982486 . - . Parent=mRNA32 chr21 gth exon 32982487 32982548 1.000000 - . Parent=mRNA32 chr21 . intron 32982549 32988408 . - . Parent=mRNA32 chr21 gth exon 32988409 32988492 1.000000 - . Parent=mRNA32 chr21 . intron 32988493 32989237 . - . Parent=mRNA32 chr21 gth exon 32989238 32989463 1.000000 - . Parent=mRNA32 chr21 . intron 32989464 32994018 . - . Parent=mRNA32 chr21 gth exon 32994019 32994286 1.000000 - . Parent=mRNA32 chr21 . intron 32994287 32996141 . - . Parent=mRNA32 chr21 gth exon 32996142 32996228 1.000000 - . Parent=mRNA32 chr21 . intron 32996229 33020953 . - . Parent=mRNA32 chr21 gth exon 33020954 33021099 1.000000 - . Parent=mRNA32 chr21 . intron 33021100 33022018 . - . Parent=mRNA32 chr21 gth exon 33022019 33022121 1.000000 - . Parent=mRNA32 chr21 gth mRNA 32989407 33021124 . - . ID=mRNA33;Parent=gene4 chr21 gth exon 32989407 32989463 1.000000 - . Parent=mRNA33 chr21 . intron 32989464 32994018 . - . Parent=mRNA33 chr21 gth exon 32994019 32994286 1.000000 - . Parent=mRNA33 chr21 . intron 32994287 32996141 . - . Parent=mRNA33 chr21 gth exon 32996142 32996228 1.000000 - . Parent=mRNA33 chr21 . intron 32996229 33020953 . - . Parent=mRNA33 chr21 gth exon 33020954 33021124 1.000000 - . Parent=mRNA33 ### chr21 gth gene 33028081 33066040 . - . ID=gene5 chr21 gth mRNA 33028081 33066040 . - . ID=mRNA34;Parent=gene5 chr21 gth exon 33028081 33029249 1.000000 - . Parent=mRNA34 chr21 . intron 33029250 33031435 . - . Parent=mRNA34 chr21 gth exon 33031436 33031590 1.000000 - . Parent=mRNA34 chr21 . intron 33031591 33032354 . - . Parent=mRNA34 chr21 gth exon 33032355 33032501 1.000000 - . Parent=mRNA34 chr21 . intron 33032502 33037429 . - . Parent=mRNA34 chr21 gth exon 33037430 33037496 1.000000 - . Parent=mRNA34 chr21 . intron 33037497 33037859 . - . Parent=mRNA34 chr21 gth exon 33037860 33037936 1.000000 - . Parent=mRNA34 chr21 . intron 33037937 33038973 . - . Parent=mRNA34 chr21 gth exon 33038974 33039095 1.000000 - . Parent=mRNA34 chr21 . intron 33039096 33039755 . - . Parent=mRNA34 chr21 gth exon 33039756 33039900 1.000000 - . Parent=mRNA34 chr21 . intron 33039901 33042680 . - . Parent=mRNA34 chr21 gth exon 33042681 33042880 1.000000 - . Parent=mRNA34 chr21 . intron 33042881 33045098 . - . Parent=mRNA34 chr21 gth exon 33045099 33045214 1.000000 - . Parent=mRNA34 chr21 . intron 33045215 33045300 . - . Parent=mRNA34 chr21 gth exon 33045301 33045400 1.000000 - . Parent=mRNA34 chr21 . intron 33045401 33049411 . - . Parent=mRNA34 chr21 gth exon 33049412 33049535 1.000000 - . Parent=mRNA34 chr21 . intron 33049536 33053261 . - . Parent=mRNA34 chr21 gth exon 33053262 33053451 1.000000 - . Parent=mRNA34 chr21 . intron 33053452 33053958 . - . Parent=mRNA34 chr21 gth exon 33053959 33054176 1.000000 - . Parent=mRNA34 chr21 . intron 33054177 33055240 . - . Parent=mRNA34 chr21 gth exon 33055241 33055344 1.000000 - . Parent=mRNA34 chr21 . intron 33055345 33056277 . - . Parent=mRNA34 chr21 gth exon 33056278 33056499 1.000000 - . Parent=mRNA34 chr21 . intron 33056500 33058529 . - . Parent=mRNA34 chr21 gth exon 33058530 33058706 1.000000 - . Parent=mRNA34 chr21 . intron 33058707 33063995 . - . Parent=mRNA34 chr21 gth exon 33063996 33064124 1.000000 - . Parent=mRNA34 chr21 . intron 33064125 33065507 . - . Parent=mRNA34 chr21 gth exon 33065508 33066040 1.000000 - . Parent=mRNA34 chr21 gth mRNA 33028084 33050976 . - . ID=mRNA35;Parent=gene5 chr21 gth exon 33028084 33029249 1.000000 - . Parent=mRNA35 chr21 . intron 33029250 33031435 . - . Parent=mRNA35 chr21 gth exon 33031436 33031590 1.000000 - . Parent=mRNA35 chr21 . intron 33031591 33032354 . - . Parent=mRNA35 chr21 gth exon 33032355 33032501 1.000000 - . Parent=mRNA35 chr21 . intron 33032502 33037429 . - . Parent=mRNA35 chr21 gth exon 33037430 33037496 1.000000 - . Parent=mRNA35 chr21 . intron 33037497 33037859 . - . Parent=mRNA35 chr21 gth exon 33037860 33037936 1.000000 - . Parent=mRNA35 chr21 . intron 33037937 33038973 . - . Parent=mRNA35 chr21 gth exon 33038974 33039095 1.000000 - . Parent=mRNA35 chr21 . intron 33039096 33039755 . - . Parent=mRNA35 chr21 gth exon 33039756 33039900 1.000000 - . Parent=mRNA35 chr21 . intron 33039901 33042680 . - . Parent=mRNA35 chr21 gth exon 33042681 33042880 1.000000 - . Parent=mRNA35 chr21 . intron 33042881 33045098 . - . Parent=mRNA35 chr21 gth exon 33045099 33045214 1.000000 - . Parent=mRNA35 chr21 . intron 33045215 33045300 . - . Parent=mRNA35 chr21 gth exon 33045301 33045400 1.000000 - . Parent=mRNA35 chr21 . intron 33045401 33049394 . - . Parent=mRNA35 chr21 gth exon 33049395 33050976 1.000000 - . Parent=mRNA35 chr21 gth mRNA 33029002 33065869 . - . ID=mRNA36;Parent=gene5 chr21 gth exon 33029002 33029249 1.000000 - . Parent=mRNA36 chr21 . intron 33029250 33031435 . - . Parent=mRNA36 chr21 gth exon 33031436 33031590 1.000000 - . Parent=mRNA36 chr21 . intron 33031591 33032354 . - . Parent=mRNA36 chr21 gth exon 33032355 33032501 1.000000 - . Parent=mRNA36 chr21 . intron 33032502 33037429 . - . Parent=mRNA36 chr21 gth exon 33037430 33037496 1.000000 - . Parent=mRNA36 chr21 . intron 33037497 33037859 . - . Parent=mRNA36 chr21 gth exon 33037860 33037936 1.000000 - . Parent=mRNA36 chr21 . intron 33037937 33038973 . - . Parent=mRNA36 chr21 gth exon 33038974 33039095 1.000000 - . Parent=mRNA36 chr21 . intron 33039096 33039755 . - . Parent=mRNA36 chr21 gth exon 33039756 33039900 1.000000 - . Parent=mRNA36 chr21 . intron 33039901 33042680 . - . Parent=mRNA36 chr21 gth exon 33042681 33042880 1.000000 - . Parent=mRNA36 chr21 . intron 33042881 33045098 . - . Parent=mRNA36 chr21 gth exon 33045099 33045214 1.000000 - . Parent=mRNA36 chr21 . intron 33045215 33045300 . - . Parent=mRNA36 chr21 gth exon 33045301 33045400 1.000000 - . Parent=mRNA36 chr21 . intron 33045401 33049394 . - . Parent=mRNA36 chr21 gth exon 33049395 33049535 1.000000 - . Parent=mRNA36 chr21 . intron 33049536 33053261 . - . Parent=mRNA36 chr21 gth exon 33053262 33053451 1.000000 - . Parent=mRNA36 chr21 . intron 33053452 33053958 . - . Parent=mRNA36 chr21 gth exon 33053959 33054176 1.000000 - . Parent=mRNA36 chr21 . intron 33054177 33055240 . - . Parent=mRNA36 chr21 gth exon 33055241 33055344 1.000000 - . Parent=mRNA36 chr21 . intron 33055345 33056277 . - . Parent=mRNA36 chr21 gth exon 33056278 33056499 1.000000 - . Parent=mRNA36 chr21 . intron 33056500 33058529 . - . Parent=mRNA36 chr21 gth exon 33058530 33058706 1.000000 - . Parent=mRNA36 chr21 . intron 33058707 33063995 . - . Parent=mRNA36 chr21 gth exon 33063996 33064124 1.000000 - . Parent=mRNA36 chr21 . intron 33064125 33065507 . - . Parent=mRNA36 chr21 gth exon 33065508 33065869 1.000000 - . Parent=mRNA36 chr21 gth mRNA 33029008 33046306 . - . ID=mRNA37;Parent=gene5 chr21 gth exon 33029008 33029249 1.000000 - . Parent=mRNA37 chr21 . intron 33029250 33031435 . - . Parent=mRNA37 chr21 gth exon 33031436 33031590 1.000000 - . Parent=mRNA37 chr21 . intron 33031591 33032354 . - . Parent=mRNA37 chr21 gth exon 33032355 33032501 1.000000 - . Parent=mRNA37 chr21 . intron 33032502 33037429 . - . Parent=mRNA37 chr21 gth exon 33037430 33037496 1.000000 - . Parent=mRNA37 chr21 . intron 33037497 33037859 . - . Parent=mRNA37 chr21 gth exon 33037860 33037936 1.000000 - . Parent=mRNA37 chr21 . intron 33037937 33038973 . - . Parent=mRNA37 chr21 gth exon 33038974 33039095 1.000000 - . Parent=mRNA37 chr21 . intron 33039096 33039755 . - . Parent=mRNA37 chr21 gth exon 33039756 33039900 1.000000 - . Parent=mRNA37 chr21 . intron 33039901 33042680 . - . Parent=mRNA37 chr21 gth exon 33042681 33042880 1.000000 - . Parent=mRNA37 chr21 . intron 33042881 33045098 . - . Parent=mRNA37 chr21 gth exon 33045099 33045214 1.000000 - . Parent=mRNA37 chr21 . intron 33045215 33045300 . - . Parent=mRNA37 chr21 gth exon 33045301 33046306 1.000000 - . Parent=mRNA37 chr21 gth mRNA 33035575 33065850 . - . ID=mRNA38;Parent=gene5 chr21 gth exon 33035575 33035804 1.000000 - . Parent=mRNA38 chr21 . intron 33035805 33037429 . - . Parent=mRNA38 chr21 gth exon 33037430 33037496 1.000000 - . Parent=mRNA38 chr21 . intron 33037497 33037859 . - . Parent=mRNA38 chr21 gth exon 33037860 33037936 1.000000 - . Parent=mRNA38 chr21 . intron 33037937 33038973 . - . Parent=mRNA38 chr21 gth exon 33038974 33039095 1.000000 - . Parent=mRNA38 chr21 . intron 33039096 33039755 . - . Parent=mRNA38 chr21 gth exon 33039756 33039900 1.000000 - . Parent=mRNA38 chr21 . intron 33039901 33042680 . - . Parent=mRNA38 chr21 gth exon 33042681 33042880 1.000000 - . Parent=mRNA38 chr21 . intron 33042881 33045098 . - . Parent=mRNA38 chr21 gth exon 33045099 33045214 1.000000 - . Parent=mRNA38 chr21 . intron 33045215 33045300 . - . Parent=mRNA38 chr21 gth exon 33045301 33045400 1.000000 - . Parent=mRNA38 chr21 . intron 33045401 33049411 . - . Parent=mRNA38 chr21 gth exon 33049412 33049535 1.000000 - . Parent=mRNA38 chr21 . intron 33049536 33053261 . - . Parent=mRNA38 chr21 gth exon 33053262 33053451 1.000000 - . Parent=mRNA38 chr21 . intron 33053452 33053958 . - . Parent=mRNA38 chr21 gth exon 33053959 33054176 1.000000 - . Parent=mRNA38 chr21 . intron 33054177 33055240 . - . Parent=mRNA38 chr21 gth exon 33055241 33055344 1.000000 - . Parent=mRNA38 chr21 . intron 33055345 33056277 . - . Parent=mRNA38 chr21 gth exon 33056278 33056499 1.000000 - . Parent=mRNA38 chr21 . intron 33056500 33058529 . - . Parent=mRNA38 chr21 gth exon 33058530 33058706 1.000000 - . Parent=mRNA38 chr21 . intron 33058707 33063995 . - . Parent=mRNA38 chr21 gth exon 33063996 33064124 1.000000 - . Parent=mRNA38 chr21 . intron 33064125 33065507 . - . Parent=mRNA38 chr21 gth exon 33065508 33065850 1.000000 - . Parent=mRNA38 chr21 gth mRNA 33035601 33037450 . - . ID=mRNA39;Parent=gene5 chr21 gth exon 33035601 33035804 1.000000 - . Parent=mRNA39 chr21 . intron 33035805 33036541 . - . Parent=mRNA39 chr21 gth exon 33036542 33036683 1.000000 - . Parent=mRNA39 chr21 . intron 33036684 33037142 . - . Parent=mRNA39 chr21 gth exon 33037143 33037248 1.000000 - . Parent=mRNA39 chr21 . intron 33037249 33037429 . - . Parent=mRNA39 chr21 gth exon 33037430 33037450 1.000000 - . Parent=mRNA39 chr21 gth mRNA 33042741 33049493 . - . ID=mRNA40;Parent=gene5 chr21 gth exon 33042741 33042880 1.000000 - . Parent=mRNA40 chr21 . intron 33042881 33045300 . - . Parent=mRNA40 chr21 gth exon 33045301 33045400 1.000000 - . Parent=mRNA40 chr21 . intron 33045401 33049394 . - . Parent=mRNA40 chr21 gth exon 33049395 33049493 1.000000 - . Parent=mRNA40 chr21 gth mRNA 33050524 33065850 . - . ID=mRNA41;Parent=gene5 chr21 gth exon 33050524 33050550 1.000000 - . Parent=mRNA41 chr21 . intron 33050551 33053261 . - . Parent=mRNA41 chr21 gth exon 33053262 33053451 1.000000 - . Parent=mRNA41 chr21 . intron 33053452 33053958 . - . Parent=mRNA41 chr21 gth exon 33053959 33054176 1.000000 - . Parent=mRNA41 chr21 . intron 33054177 33055240 . - . Parent=mRNA41 chr21 gth exon 33055241 33055344 1.000000 - . Parent=mRNA41 chr21 . intron 33055345 33056277 . - . Parent=mRNA41 chr21 gth exon 33056278 33056499 1.000000 - . Parent=mRNA41 chr21 . intron 33056500 33058529 . - . Parent=mRNA41 chr21 gth exon 33058530 33058706 1.000000 - . Parent=mRNA41 chr21 . intron 33058707 33063995 . - . Parent=mRNA41 chr21 gth exon 33063996 33064124 1.000000 - . Parent=mRNA41 chr21 . intron 33064125 33065507 . - . Parent=mRNA41 chr21 gth exon 33065508 33065850 1.000000 - . Parent=mRNA41 chr21 gth mRNA 33053584 33065974 . - . ID=mRNA42;Parent=gene5 chr21 gth exon 33053584 33054176 1.000000 - . Parent=mRNA42 chr21 . intron 33054177 33055240 . - . Parent=mRNA42 chr21 gth exon 33055241 33055344 1.000000 - . Parent=mRNA42 chr21 . intron 33055345 33056277 . - . Parent=mRNA42 chr21 gth exon 33056278 33056499 1.000000 - . Parent=mRNA42 chr21 . intron 33056500 33058529 . - . Parent=mRNA42 chr21 gth exon 33058530 33058706 1.000000 - . Parent=mRNA42 chr21 . intron 33058707 33063995 . - . Parent=mRNA42 chr21 gth exon 33063996 33064124 1.000000 - . Parent=mRNA42 chr21 . intron 33064125 33065507 . - . Parent=mRNA42 chr21 gth exon 33065508 33065974 1.000000 - . Parent=mRNA42 ### chr21 gth gene 33066282 33187913 . + . ID=gene6 chr21 gth mRNA 33066282 33093149 . + . ID=mRNA43;Parent=gene6 chr21 gth exon 33066282 33066490 1.000000 + . Parent=mRNA43 chr21 . intron 33066491 33078978 . + . Parent=mRNA43 chr21 gth exon 33078979 33079101 1.000000 + . Parent=mRNA43 chr21 . intron 33079102 33082793 . + . Parent=mRNA43 chr21 gth exon 33082794 33082883 1.000000 + . Parent=mRNA43 chr21 . intron 33082884 33091118 . + . Parent=mRNA43 chr21 gth exon 33091119 33093149 1.000000 + . Parent=mRNA43 chr21 gth mRNA 33066307 33091887 . + . ID=mRNA44;Parent=gene6 chr21 gth exon 33066307 33066454 1.000000 + . Parent=mRNA44 chr21 . intron 33066455 33091118 . + . Parent=mRNA44 chr21 gth exon 33091119 33091887 1.000000 + . Parent=mRNA44 chr21 gth mRNA 33066332 33187913 . + . ID=mRNA45;Parent=gene6 chr21 gth exon 33066332 33066454 1.000000 + . Parent=mRNA45 chr21 . intron 33066455 33078956 . + . Parent=mRNA45 chr21 gth exon 33078957 33079101 1.000000 + . Parent=mRNA45 chr21 . intron 33079102 33180109 . + . Parent=mRNA45 chr21 gth exon 33180110 33180246 1.000000 + . Parent=mRNA45 chr21 . intron 33180247 33187755 . + . Parent=mRNA45 chr21 gth exon 33187756 33187913 1.000000 + . Parent=mRNA45 chr21 gth mRNA 33066343 33146649 . + . ID=mRNA46;Parent=gene6 chr21 gth exon 33066343 33066490 1.000000 + . Parent=mRNA46 chr21 . intron 33066491 33078978 . + . Parent=mRNA46 chr21 gth exon 33078979 33079101 1.000000 + . Parent=mRNA46 chr21 . intron 33079102 33145928 . + . Parent=mRNA46 chr21 gth exon 33145929 33146649 1.000000 + . Parent=mRNA46 chr21 gth mRNA 33066344 33091348 . + . ID=mRNA47;Parent=gene6 chr21 gth exon 33066344 33066502 1.000000 + . Parent=mRNA47 chr21 . intron 33066503 33078978 . + . Parent=mRNA47 chr21 gth exon 33078979 33079101 1.000000 + . Parent=mRNA47 chr21 . intron 33079102 33082793 . + . Parent=mRNA47 chr21 gth exon 33082794 33082883 1.000000 + . Parent=mRNA47 chr21 . intron 33082884 33091118 . + . Parent=mRNA47 chr21 gth exon 33091119 33091348 1.000000 + . Parent=mRNA47 chr21 gth mRNA 33066356 33091626 . + . ID=mRNA48;Parent=gene6 chr21 gth exon 33066356 33066490 1.000000 + . Parent=mRNA48 chr21 . intron 33066491 33082793 . + . Parent=mRNA48 chr21 gth exon 33082794 33082883 1.000000 + . Parent=mRNA48 chr21 . intron 33082884 33091118 . + . Parent=mRNA48 chr21 gth exon 33091119 33091626 1.000000 + . Parent=mRNA48 chr21 gth mRNA 33066370 33091274 . + . ID=mRNA49;Parent=gene6 chr21 gth exon 33066370 33066490 1.000000 + . Parent=mRNA49 chr21 . intron 33066491 33078978 . + . Parent=mRNA49 chr21 gth exon 33078979 33079101 1.000000 + . Parent=mRNA49 chr21 . intron 33079102 33091118 . + . Parent=mRNA49 chr21 gth exon 33091119 33091274 1.000000 + . Parent=mRNA49 ### chr21 gth gene 33087746 33107923 . - . ID=gene7 chr21 gth mRNA 33087746 33107923 . - . ID=mRNA50;Parent=gene7 chr21 gth exon 33087746 33088666 1.000000 - . Parent=mRNA50 chr21 . intron 33088667 33104753 . - . Parent=mRNA50 chr21 gth exon 33104754 33104834 1.000000 - . Parent=mRNA50 chr21 . intron 33104835 33107771 . - . Parent=mRNA50 chr21 gth exon 33107772 33107923 1.000000 - . Parent=mRNA50 chr21 gth mRNA 33087747 33107859 . - . ID=mRNA51;Parent=gene7 chr21 gth exon 33087747 33088666 1.000000 - . Parent=mRNA51 chr21 . intron 33088667 33107771 . - . Parent=mRNA51 chr21 gth exon 33107772 33107859 1.000000 - . Parent=mRNA51 chr21 gth mRNA 33087867 33107869 . - . ID=mRNA52;Parent=gene7 chr21 gth exon 33087867 33088564 1.000000 - . Parent=mRNA52 chr21 . intron 33088565 33104753 . - . Parent=mRNA52 chr21 gth exon 33104754 33104834 1.000000 - . Parent=mRNA52 chr21 . intron 33104835 33107771 . - . Parent=mRNA52 chr21 gth exon 33107772 33107869 1.000000 - . Parent=mRNA52 chr21 gth mRNA 33087903 33107814 . - . ID=mRNA53;Parent=gene7 chr21 gth exon 33087903 33088666 1.000000 - . Parent=mRNA53 chr21 . intron 33088667 33101821 . - . Parent=mRNA53 chr21 gth exon 33101822 33101896 1.000000 - . Parent=mRNA53 chr21 . intron 33101897 33104753 . - . Parent=mRNA53 chr21 gth exon 33104754 33104834 1.000000 - . Parent=mRNA53 chr21 . intron 33104835 33107771 . - . Parent=mRNA53 chr21 gth exon 33107772 33107814 1.000000 - . Parent=mRNA53 ### chr21 gth gene 33320023 33323374 . + . ID=gene8 chr21 gth mRNA 33320023 33323374 . + . ID=mRNA54;Parent=gene8 chr21 gth exon 33320023 33320204 1.000000 + . Parent=mRNA54 chr21 . intron 33320205 33320978 . + . Parent=mRNA54 chr21 gth exon 33320979 33323374 1.000000 + . Parent=mRNA54 chr21 gth mRNA 33320113 33321227 . + . ID=mRNA55;Parent=gene8 chr21 gth exon 33320113 33320438 1.000000 + . Parent=mRNA55 chr21 . intron 33320439 33320978 . + . Parent=mRNA55 chr21 gth exon 33320979 33321227 1.000000 + . Parent=mRNA55 chr21 gth mRNA 33320113 33323374 . + . ID=mRNA56;Parent=gene8 chr21 gth exon 33320113 33323374 1.000000 + . Parent=mRNA56 ### chr21 gth gene 33364320 33366596 . + . ID=gene9 chr21 gth mRNA 33364320 33366596 . + . ID=mRNA57;Parent=gene9 chr21 gth exon 33364320 33366596 1.000000 + . Parent=mRNA57 chr21 gth mRNA 33365141 33366589 . + . ID=mRNA58;Parent=gene9 chr21 gth exon 33365141 33365861 1.000000 + . Parent=mRNA58 chr21 . intron 33365862 33366227 . + . Parent=mRNA58 chr21 gth exon 33366228 33366589 1.000000 + . Parent=mRNA58 chr21 gth mRNA 33365844 33366589 . + . ID=mRNA59;Parent=gene9 chr21 gth exon 33365844 33365881 1.000000 + . Parent=mRNA59 chr21 . intron 33365882 33366227 . + . Parent=mRNA59 chr21 gth exon 33366228 33366589 1.000000 + . Parent=mRNA59 ### chr21 gth gene 33459646 33464824 . - . ID=gene10 chr21 gth mRNA 33459646 33464824 . - . ID=mRNA60;Parent=gene10 chr21 gth exon 33459646 33459867 1.000000 - . Parent=mRNA60 chr21 . intron 33459868 33462617 . - . Parent=mRNA60 chr21 gth exon 33462618 33462756 1.000000 - . Parent=mRNA60 chr21 . intron 33462757 33463870 . - . Parent=mRNA60 chr21 gth exon 33463871 33464008 1.000000 - . Parent=mRNA60 chr21 . intron 33464009 33464315 . - . Parent=mRNA60 chr21 gth exon 33464316 33464426 1.000000 - . Parent=mRNA60 chr21 . intron 33464427 33464738 . - . Parent=mRNA60 chr21 gth exon 33464739 33464824 1.000000 - . Parent=mRNA60 ### chr21 gth gene 33524076 33591409 . + . ID=gene11 chr21 gth mRNA 33524076 33556931 . + . ID=mRNA61;Parent=gene11 chr21 gth exon 33524076 33524391 1.000000 + . Parent=mRNA61 chr21 . intron 33524392 33536060 . + . Parent=mRNA61 chr21 gth exon 33536061 33536152 1.000000 + . Parent=mRNA61 chr21 . intron 33536153 33536175 . + . Parent=mRNA61 chr21 gth exon 33536176 33536220 0.477778 + . Parent=mRNA61 chr21 . intron 33536221 33539125 . + . Parent=mRNA61 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA61 chr21 . intron 33539250 33540892 . + . Parent=mRNA61 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA61 chr21 . intron 33541066 33542883 . + . Parent=mRNA61 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA61 chr21 . intron 33543030 33546836 . + . Parent=mRNA61 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA61 chr21 . intron 33547006 33554771 . + . Parent=mRNA61 chr21 gth exon 33554772 33554902 1.000000 + . Parent=mRNA61 chr21 . intron 33554903 33556735 . + . Parent=mRNA61 chr21 gth exon 33556736 33556931 1.000000 + . Parent=mRNA61 chr21 gth mRNA 33524084 33559839 . + . ID=mRNA62;Parent=gene11 chr21 gth exon 33524084 33524391 1.000000 + . Parent=mRNA62 chr21 . intron 33524392 33536014 . + . Parent=mRNA62 chr21 gth exon 33536015 33536152 1.000000 + . Parent=mRNA62 chr21 . intron 33536153 33536175 . + . Parent=mRNA62 chr21 gth exon 33536176 33536220 0.477778 + . Parent=mRNA62 chr21 . intron 33536221 33539125 . + . Parent=mRNA62 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA62 chr21 . intron 33539250 33540892 . + . Parent=mRNA62 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA62 chr21 . intron 33541066 33542883 . + . Parent=mRNA62 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA62 chr21 . intron 33543030 33546836 . + . Parent=mRNA62 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA62 chr21 . intron 33547006 33554771 . + . Parent=mRNA62 chr21 gth exon 33554772 33554902 1.000000 + . Parent=mRNA62 chr21 . intron 33554903 33556735 . + . Parent=mRNA62 chr21 gth exon 33556736 33559839 1.000000 + . Parent=mRNA62 chr21 gth mRNA 33524149 33558700 . + . ID=mRNA63;Parent=gene11 chr21 gth exon 33524149 33524391 1.000000 + . Parent=mRNA63 chr21 . intron 33524392 33536014 . + . Parent=mRNA63 chr21 gth exon 33536015 33536152 1.000000 + . Parent=mRNA63 chr21 . intron 33536153 33536175 . + . Parent=mRNA63 chr21 gth exon 33536176 33536220 0.477778 + . Parent=mRNA63 chr21 . intron 33536221 33539125 . + . Parent=mRNA63 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA63 chr21 . intron 33539250 33540892 . + . Parent=mRNA63 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA63 chr21 . intron 33541066 33542883 . + . Parent=mRNA63 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA63 chr21 . intron 33543030 33546836 . + . Parent=mRNA63 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA63 chr21 . intron 33547006 33554771 . + . Parent=mRNA63 chr21 gth exon 33554772 33554902 1.000000 + . Parent=mRNA63 chr21 . intron 33554903 33556967 . + . Parent=mRNA63 chr21 gth exon 33556968 33558700 1.000000 + . Parent=mRNA63 chr21 gth mRNA 33524234 33556897 . + . ID=mRNA64;Parent=gene11 chr21 gth exon 33524234 33524391 1.000000 + . Parent=mRNA64 chr21 . intron 33524392 33536060 . + . Parent=mRNA64 chr21 gth exon 33536061 33536152 1.000000 + . Parent=mRNA64 chr21 . intron 33536153 33536175 . + . Parent=mRNA64 chr21 gth exon 33536176 33536220 0.477778 + . Parent=mRNA64 chr21 . intron 33536221 33539125 . + . Parent=mRNA64 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA64 chr21 . intron 33539250 33539667 . + . Parent=mRNA64 chr21 gth exon 33539668 33539980 1.000000 + . Parent=mRNA64 chr21 . intron 33539981 33540892 . + . Parent=mRNA64 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA64 chr21 . intron 33541066 33542883 . + . Parent=mRNA64 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA64 chr21 . intron 33543030 33546836 . + . Parent=mRNA64 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA64 chr21 . intron 33547006 33554771 . + . Parent=mRNA64 chr21 gth exon 33554772 33554902 1.000000 + . Parent=mRNA64 chr21 . intron 33554903 33556735 . + . Parent=mRNA64 chr21 gth exon 33556736 33556897 1.000000 + . Parent=mRNA64 chr21 gth mRNA 33524311 33558700 . + . ID=mRNA65;Parent=gene11 chr21 gth exon 33524311 33524391 1.000000 + . Parent=mRNA65 chr21 . intron 33524392 33536014 . + . Parent=mRNA65 chr21 gth exon 33536015 33536152 1.000000 + . Parent=mRNA65 chr21 . intron 33536153 33536175 . + . Parent=mRNA65 chr21 gth exon 33536176 33536220 0.477778 + . Parent=mRNA65 chr21 . intron 33536221 33539125 . + . Parent=mRNA65 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA65 chr21 . intron 33539250 33540892 . + . Parent=mRNA65 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA65 chr21 . intron 33541066 33542883 . + . Parent=mRNA65 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA65 chr21 . intron 33543030 33546836 . + . Parent=mRNA65 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA65 chr21 . intron 33547006 33556967 . + . Parent=mRNA65 chr21 gth exon 33556968 33558700 1.000000 + . Parent=mRNA65 chr21 gth mRNA 33524316 33557030 . + . ID=mRNA66;Parent=gene11 chr21 gth exon 33524316 33524391 1.000000 + . Parent=mRNA66 chr21 . intron 33524392 33536060 . + . Parent=mRNA66 chr21 gth exon 33536061 33536152 1.000000 + . Parent=mRNA66 chr21 . intron 33536153 33536175 . + . Parent=mRNA66 chr21 gth exon 33536176 33536220 0.477778 + . Parent=mRNA66 chr21 . intron 33536221 33539125 . + . Parent=mRNA66 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA66 chr21 . intron 33539250 33540892 . + . Parent=mRNA66 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA66 chr21 . intron 33541066 33542883 . + . Parent=mRNA66 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA66 chr21 . intron 33543030 33546312 . + . Parent=mRNA66 chr21 gth exon 33546313 33546423 1.000000 + . Parent=mRNA66 chr21 . intron 33546424 33546836 . + . Parent=mRNA66 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA66 chr21 . intron 33547006 33554771 . + . Parent=mRNA66 chr21 gth exon 33554772 33554902 1.000000 + . Parent=mRNA66 chr21 . intron 33554903 33556967 . + . Parent=mRNA66 chr21 gth exon 33556968 33557030 1.000000 + . Parent=mRNA66 chr21 gth mRNA 33524357 33557030 . + . ID=mRNA67;Parent=gene11 chr21 gth exon 33524357 33524391 1.000000 + . Parent=mRNA67 chr21 . intron 33524392 33539125 . + . Parent=mRNA67 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA67 chr21 . intron 33539250 33540892 . + . Parent=mRNA67 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA67 chr21 . intron 33541066 33542883 . + . Parent=mRNA67 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA67 chr21 . intron 33543030 33546836 . + . Parent=mRNA67 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA67 chr21 . intron 33547006 33554771 . + . Parent=mRNA67 chr21 gth exon 33554772 33554902 1.000000 + . Parent=mRNA67 chr21 . intron 33554903 33556967 . + . Parent=mRNA67 chr21 gth exon 33556968 33557030 1.000000 + . Parent=mRNA67 chr21 gth mRNA 33524357 33557030 . + . ID=mRNA68;Parent=gene11 chr21 gth exon 33524357 33524391 1.000000 + . Parent=mRNA68 chr21 . intron 33524392 33539125 . + . Parent=mRNA68 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA68 chr21 . intron 33539250 33540892 . + . Parent=mRNA68 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA68 chr21 . intron 33541066 33542883 . + . Parent=mRNA68 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA68 chr21 . intron 33543030 33546836 . + . Parent=mRNA68 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA68 chr21 . intron 33547006 33556967 . + . Parent=mRNA68 chr21 gth exon 33556968 33557030 1.000000 + . Parent=mRNA68 chr21 gth mRNA 33524584 33556932 . + . ID=mRNA69;Parent=gene11 chr21 gth exon 33524584 33524732 1.000000 + . Parent=mRNA69 chr21 . intron 33524733 33536060 . + . Parent=mRNA69 chr21 gth exon 33536061 33536152 1.000000 + . Parent=mRNA69 chr21 . intron 33536153 33536175 . + . Parent=mRNA69 chr21 gth exon 33536176 33536220 0.477778 + . Parent=mRNA69 chr21 . intron 33536221 33539125 . + . Parent=mRNA69 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA69 chr21 . intron 33539250 33540892 . + . Parent=mRNA69 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA69 chr21 . intron 33541066 33542883 . + . Parent=mRNA69 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA69 chr21 . intron 33543030 33546312 . + . Parent=mRNA69 chr21 gth exon 33546313 33546423 1.000000 + . Parent=mRNA69 chr21 . intron 33546424 33546836 . + . Parent=mRNA69 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA69 chr21 . intron 33547006 33554771 . + . Parent=mRNA69 chr21 gth exon 33554772 33554902 1.000000 + . Parent=mRNA69 chr21 . intron 33554903 33556735 . + . Parent=mRNA69 chr21 gth exon 33556736 33556932 1.000000 + . Parent=mRNA69 chr21 gth mRNA 33524584 33590525 . + . ID=mRNA70;Parent=gene11 chr21 gth exon 33524584 33524732 1.000000 + . Parent=mRNA70 chr21 . intron 33524733 33536060 . + . Parent=mRNA70 chr21 gth exon 33536061 33536152 1.000000 + . Parent=mRNA70 chr21 . intron 33536153 33536175 . + . Parent=mRNA70 chr21 gth exon 33536176 33536220 0.477778 + . Parent=mRNA70 chr21 . intron 33536221 33539125 . + . Parent=mRNA70 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA70 chr21 . intron 33539250 33540892 . + . Parent=mRNA70 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA70 chr21 . intron 33541066 33542883 . + . Parent=mRNA70 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA70 chr21 . intron 33543030 33546836 . + . Parent=mRNA70 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA70 chr21 . intron 33547006 33562568 . + . Parent=mRNA70 chr21 gth exon 33562569 33562692 1.000000 + . Parent=mRNA70 chr21 . intron 33562693 33570770 . + . Parent=mRNA70 chr21 gth exon 33570771 33570928 1.000000 + . Parent=mRNA70 chr21 . intron 33570929 33573926 . + . Parent=mRNA70 chr21 gth exon 33573927 33574093 1.000000 + . Parent=mRNA70 chr21 . intron 33574094 33577268 . + . Parent=mRNA70 chr21 gth exon 33577269 33577416 1.000000 + . Parent=mRNA70 chr21 . intron 33577417 33582278 . + . Parent=mRNA70 chr21 gth exon 33582279 33582436 1.000000 + . Parent=mRNA70 chr21 . intron 33582437 33588186 . + . Parent=mRNA70 chr21 gth exon 33588187 33588302 1.000000 + . Parent=mRNA70 chr21 . intron 33588303 33590358 . + . Parent=mRNA70 chr21 gth exon 33590359 33590525 1.000000 + . Parent=mRNA70 chr21 gth mRNA 33524584 33590525 . + . ID=mRNA71;Parent=gene11 chr21 gth exon 33524584 33524732 1.000000 + . Parent=mRNA71 chr21 . intron 33524733 33536060 . + . Parent=mRNA71 chr21 gth exon 33536061 33536152 1.000000 + . Parent=mRNA71 chr21 . intron 33536153 33536175 . + . Parent=mRNA71 chr21 gth exon 33536176 33536220 0.477778 + . Parent=mRNA71 chr21 . intron 33536221 33539125 . + . Parent=mRNA71 chr21 gth exon 33539126 33539249 1.000000 + . Parent=mRNA71 chr21 . intron 33539250 33540892 . + . Parent=mRNA71 chr21 gth exon 33540893 33541065 1.000000 + . Parent=mRNA71 chr21 . intron 33541066 33542883 . + . Parent=mRNA71 chr21 gth exon 33542884 33543029 1.000000 + . Parent=mRNA71 chr21 . intron 33543030 33546836 . + . Parent=mRNA71 chr21 gth exon 33546837 33547005 1.000000 + . Parent=mRNA71 chr21 . intron 33547006 33570770 . + . Parent=mRNA71 chr21 gth exon 33570771 33570928 1.000000 + . Parent=mRNA71 chr21 . intron 33570929 33573926 . + . Parent=mRNA71 chr21 gth exon 33573927 33574093 1.000000 + . Parent=mRNA71 chr21 . intron 33574094 33577268 . + . Parent=mRNA71 chr21 gth exon 33577269 33577416 1.000000 + . Parent=mRNA71 chr21 . intron 33577417 33582278 . + . Parent=mRNA71 chr21 gth exon 33582279 33582436 1.000000 + . Parent=mRNA71 chr21 . intron 33582437 33588186 . + . Parent=mRNA71 chr21 gth exon 33588187 33588302 1.000000 + . Parent=mRNA71 chr21 . intron 33588303 33590358 . + . Parent=mRNA71 chr21 gth exon 33590359 33590525 1.000000 + . Parent=mRNA71 chr21 gth mRNA 33560533 33591409 . + . ID=mRNA72;Parent=gene11 chr21 gth exon 33560533 33560689 1.000000 + . Parent=mRNA72 chr21 . intron 33560690 33562568 . + . Parent=mRNA72 chr21 gth exon 33562569 33562692 1.000000 + . Parent=mRNA72 chr21 . intron 33562693 33570770 . + . Parent=mRNA72 chr21 gth exon 33570771 33570928 1.000000 + . Parent=mRNA72 chr21 . intron 33570929 33573926 . + . Parent=mRNA72 chr21 gth exon 33573927 33574093 1.000000 + . Parent=mRNA72 chr21 . intron 33574094 33577268 . + . Parent=mRNA72 chr21 gth exon 33577269 33577416 1.000000 + . Parent=mRNA72 chr21 . intron 33577417 33582278 . + . Parent=mRNA72 chr21 gth exon 33582279 33582436 1.000000 + . Parent=mRNA72 chr21 . intron 33582437 33590358 . + . Parent=mRNA72 chr21 gth exon 33590359 33591409 1.000000 + . Parent=mRNA72 chr21 gth mRNA 33560557 33590414 . + . ID=mRNA73;Parent=gene11 chr21 gth exon 33560557 33560689 1.000000 + . Parent=mRNA73 chr21 . intron 33560690 33562568 . + . Parent=mRNA73 chr21 gth exon 33562569 33562692 1.000000 + . Parent=mRNA73 chr21 . intron 33562693 33573926 . + . Parent=mRNA73 chr21 gth exon 33573927 33574093 1.000000 + . Parent=mRNA73 chr21 . intron 33574094 33577268 . + . Parent=mRNA73 chr21 gth exon 33577269 33577416 1.000000 + . Parent=mRNA73 chr21 . intron 33577417 33582278 . + . Parent=mRNA73 chr21 gth exon 33582279 33582436 1.000000 + . Parent=mRNA73 chr21 . intron 33582437 33590358 . + . Parent=mRNA73 chr21 gth exon 33590359 33590414 1.000000 + . Parent=mRNA73 chr21 gth mRNA 33562103 33591128 . + . ID=mRNA74;Parent=gene11 chr21 gth exon 33562103 33562692 1.000000 + . Parent=mRNA74 chr21 . intron 33562693 33570770 . + . Parent=mRNA74 chr21 gth exon 33570771 33570928 1.000000 + . Parent=mRNA74 chr21 . intron 33570929 33573926 . + . Parent=mRNA74 chr21 gth exon 33573927 33574093 1.000000 + . Parent=mRNA74 chr21 . intron 33574094 33577268 . + . Parent=mRNA74 chr21 gth exon 33577269 33577416 1.000000 + . Parent=mRNA74 chr21 . intron 33577417 33582278 . + . Parent=mRNA74 chr21 gth exon 33582279 33582436 1.000000 + . Parent=mRNA74 chr21 . intron 33582437 33590358 . + . Parent=mRNA74 chr21 gth exon 33590359 33591128 1.000000 + . Parent=mRNA74 chr21 gth mRNA 33562457 33582295 . + . ID=mRNA75;Parent=gene11 chr21 gth exon 33562457 33562692 1.000000 + . Parent=mRNA75 chr21 . intron 33562693 33573926 . + . Parent=mRNA75 chr21 gth exon 33573927 33574093 1.000000 + . Parent=mRNA75 chr21 . intron 33574094 33577268 . + . Parent=mRNA75 chr21 gth exon 33577269 33577416 1.000000 + . Parent=mRNA75 chr21 . intron 33577417 33582278 . + . Parent=mRNA75 chr21 gth exon 33582279 33582295 1.000000 + . Parent=mRNA75 ### chr21 gth gene 33618652 33654038 . + . ID=gene12 chr21 gth mRNA 33618652 33629787 . + . ID=mRNA76;Parent=gene12 chr21 gth exon 33618652 33618813 1.000000 + . Parent=mRNA76 chr21 . intron 33618814 33629699 . + . Parent=mRNA76 chr21 gth exon 33629700 33629787 1.000000 + . Parent=mRNA76 chr21 gth mRNA 33619079 33654038 . + . ID=mRNA77;Parent=gene12 chr21 gth exon 33619079 33619306 1.000000 + . Parent=mRNA77 chr21 . intron 33619307 33629699 . + . Parent=mRNA77 chr21 gth exon 33629700 33629823 1.000000 + . Parent=mRNA77 chr21 . intron 33629824 33635174 . + . Parent=mRNA77 chr21 gth exon 33635175 33635350 1.000000 + . Parent=mRNA77 chr21 . intron 33635351 33637443 . + . Parent=mRNA77 chr21 gth exon 33637444 33637598 1.000000 + . Parent=mRNA77 chr21 . intron 33637599 33637710 . + . Parent=mRNA77 chr21 gth exon 33637711 33637852 1.000000 + . Parent=mRNA77 chr21 . intron 33637853 33639421 . + . Parent=mRNA77 chr21 gth exon 33639422 33639536 1.000000 + . Parent=mRNA77 chr21 . intron 33639537 33643266 . + . Parent=mRNA77 chr21 gth exon 33643267 33643466 1.000000 + . Parent=mRNA77 chr21 . intron 33643467 33643564 . + . Parent=mRNA77 chr21 gth exon 33643565 33643719 1.000000 + . Parent=mRNA77 chr21 . intron 33643720 33646933 . + . Parent=mRNA77 chr21 gth exon 33646934 33647084 1.000000 + . Parent=mRNA77 chr21 . intron 33647085 33647813 . + . Parent=mRNA77 chr21 gth exon 33647814 33647959 1.000000 + . Parent=mRNA77 chr21 . intron 33647960 33649491 . + . Parent=mRNA77 chr21 gth exon 33649492 33654038 1.000000 + . Parent=mRNA77 chr21 gth mRNA 33619148 33639453 . + . ID=mRNA78;Parent=gene12 chr21 gth exon 33619148 33619306 1.000000 + . Parent=mRNA78 chr21 . intron 33619307 33629699 . + . Parent=mRNA78 chr21 gth exon 33629700 33629823 1.000000 + . Parent=mRNA78 chr21 . intron 33629824 33635174 . + . Parent=mRNA78 chr21 gth exon 33635175 33635350 1.000000 + . Parent=mRNA78 chr21 . intron 33635351 33639421 . + . Parent=mRNA78 chr21 gth exon 33639422 33639453 1.000000 + . Parent=mRNA78 ### chr21 gth gene 33679169 33773525 . + . ID=gene13 chr21 gth mRNA 33679169 33709121 . + . ID=mRNA79;Parent=gene13 chr21 gth exon 33679169 33679203 1.000000 + . Parent=mRNA79 chr21 . intron 33679204 33679391 . + . Parent=mRNA79 chr21 gth exon 33679392 33679560 1.000000 + . Parent=mRNA79 chr21 . intron 33679561 33709064 . + . Parent=mRNA79 chr21 gth exon 33709065 33709121 1.000000 + . Parent=mRNA79 chr21 gth mRNA 33697072 33731698 . + . ID=mRNA80;Parent=gene13 chr21 gth exon 33697072 33697792 1.000000 + . Parent=mRNA80 chr21 . intron 33697793 33709064 . + . Parent=mRNA80 chr21 gth exon 33709065 33709197 1.000000 + . Parent=mRNA80 chr21 . intron 33709198 33715656 . + . Parent=mRNA80 chr21 gth exon 33715657 33715862 1.000000 + . Parent=mRNA80 chr21 . intron 33715863 33721060 . + . Parent=mRNA80 chr21 gth exon 33721061 33721209 1.000000 + . Parent=mRNA80 chr21 . intron 33721210 33726353 . + . Parent=mRNA80 chr21 gth exon 33726354 33726513 1.000000 + . Parent=mRNA80 chr21 . intron 33726514 33726890 . + . Parent=mRNA80 chr21 gth exon 33726891 33727048 1.000000 + . Parent=mRNA80 chr21 . intron 33727049 33731004 . + . Parent=mRNA80 chr21 gth exon 33731005 33731698 1.000000 + . Parent=mRNA80 chr21 gth mRNA 33697603 33726393 . + . ID=mRNA81;Parent=gene13 chr21 gth exon 33697603 33697792 1.000000 + . Parent=mRNA81 chr21 . intron 33697793 33705011 . + . Parent=mRNA81 chr21 gth exon 33705012 33705068 1.000000 + . Parent=mRNA81 chr21 . intron 33705069 33705620 . + . Parent=mRNA81 chr21 gth exon 33705621 33705751 1.000000 + . Parent=mRNA81 chr21 . intron 33705752 33709064 . + . Parent=mRNA81 chr21 gth exon 33709065 33709197 1.000000 + . Parent=mRNA81 chr21 . intron 33709198 33715656 . + . Parent=mRNA81 chr21 gth exon 33715657 33715862 1.000000 + . Parent=mRNA81 chr21 . intron 33715863 33721060 . + . Parent=mRNA81 chr21 gth exon 33721061 33721209 1.000000 + . Parent=mRNA81 chr21 . intron 33721210 33726353 . + . Parent=mRNA81 chr21 gth exon 33726354 33726393 1.000000 + . Parent=mRNA81 chr21 gth mRNA 33697608 33731698 . + . ID=mRNA82;Parent=gene13 chr21 gth exon 33697608 33697792 1.000000 + . Parent=mRNA82 chr21 . intron 33697793 33705011 . + . Parent=mRNA82 chr21 gth exon 33705012 33705068 1.000000 + . Parent=mRNA82 chr21 . intron 33705069 33709064 . + . Parent=mRNA82 chr21 gth exon 33709065 33709197 1.000000 + . Parent=mRNA82 chr21 . intron 33709198 33715656 . + . Parent=mRNA82 chr21 gth exon 33715657 33715862 1.000000 + . Parent=mRNA82 chr21 . intron 33715863 33721060 . + . Parent=mRNA82 chr21 gth exon 33721061 33721209 1.000000 + . Parent=mRNA82 chr21 . intron 33721210 33726353 . + . Parent=mRNA82 chr21 gth exon 33726354 33726513 1.000000 + . Parent=mRNA82 chr21 . intron 33726514 33726890 . + . Parent=mRNA82 chr21 gth exon 33726891 33727048 1.000000 + . Parent=mRNA82 chr21 . intron 33727049 33731004 . + . Parent=mRNA82 chr21 gth exon 33731005 33731698 1.000000 + . Parent=mRNA82 chr21 gth mRNA 33697617 33731121 . + . ID=mRNA83;Parent=gene13 chr21 gth exon 33697617 33697792 1.000000 + . Parent=mRNA83 chr21 . intron 33697793 33715656 . + . Parent=mRNA83 chr21 gth exon 33715657 33715862 1.000000 + . Parent=mRNA83 chr21 . intron 33715863 33721060 . + . Parent=mRNA83 chr21 gth exon 33721061 33721209 1.000000 + . Parent=mRNA83 chr21 . intron 33721210 33726353 . + . Parent=mRNA83 chr21 gth exon 33726354 33726513 1.000000 + . Parent=mRNA83 chr21 . intron 33726514 33726890 . + . Parent=mRNA83 chr21 gth exon 33726891 33727048 1.000000 + . Parent=mRNA83 chr21 . intron 33727049 33731004 . + . Parent=mRNA83 chr21 gth exon 33731005 33731121 1.000000 + . Parent=mRNA83 chr21 gth mRNA 33726891 33773525 . + . ID=mRNA84;Parent=gene13 chr21 gth exon 33726891 33727048 1.000000 + . Parent=mRNA84 chr21 . intron 33727049 33772974 . + . Parent=mRNA84 chr21 gth exon 33772975 33773525 1.000000 + . Parent=mRNA84 ### chr21 gth gene 33726662 33775369 . - . ID=gene14 chr21 gth mRNA 33726662 33743141 . - . ID=mRNA85;Parent=gene14 chr21 gth exon 33726662 33726979 1.000000 - . Parent=mRNA85 chr21 . intron 33726980 33731059 . - . Parent=mRNA85 chr21 gth exon 33731060 33731169 1.000000 - . Parent=mRNA85 chr21 . intron 33731170 33733390 . - . Parent=mRNA85 chr21 gth exon 33733391 33733474 1.000000 - . Parent=mRNA85 chr21 . intron 33733475 33742958 . - . Parent=mRNA85 chr21 gth exon 33742959 33743141 1.000000 - . Parent=mRNA85 chr21 gth mRNA 33726662 33774188 . - . ID=mRNA86;Parent=gene14 chr21 gth exon 33726662 33726979 1.000000 - . Parent=mRNA86 chr21 . intron 33726980 33733390 . - . Parent=mRNA86 chr21 gth exon 33733391 33733474 1.000000 - . Parent=mRNA86 chr21 . intron 33733475 33742958 . - . Parent=mRNA86 chr21 gth exon 33742959 33745040 1.000000 - . Parent=mRNA86 chr21 . intron 33745041 33749903 . - . Parent=mRNA86 chr21 gth exon 33749904 33749961 1.000000 - . Parent=mRNA86 chr21 . intron 33749962 33754589 . - . Parent=mRNA86 chr21 gth exon 33754590 33754682 1.000000 - . Parent=mRNA86 chr21 . intron 33754683 33759518 . - . Parent=mRNA86 chr21 gth exon 33759519 33759586 1.000000 - . Parent=mRNA86 chr21 . intron 33759587 33761186 . - . Parent=mRNA86 chr21 gth exon 33761187 33761299 1.000000 - . Parent=mRNA86 chr21 . intron 33761300 33762963 . - . Parent=mRNA86 chr21 gth exon 33762964 33763103 1.000000 - . Parent=mRNA86 chr21 . intron 33763104 33774014 . - . Parent=mRNA86 chr21 gth exon 33774015 33774188 1.000000 - . Parent=mRNA86 chr21 gth mRNA 33731061 33774188 . - . ID=mRNA87;Parent=gene14 chr21 gth exon 33731061 33731169 1.000000 - . Parent=mRNA87 chr21 . intron 33731170 33733390 . - . Parent=mRNA87 chr21 gth exon 33733391 33733474 1.000000 - . Parent=mRNA87 chr21 . intron 33733475 33741194 . - . Parent=mRNA87 chr21 gth exon 33741195 33741317 1.000000 - . Parent=mRNA87 chr21 . intron 33741318 33742958 . - . Parent=mRNA87 chr21 gth exon 33742959 33743136 1.000000 - . Parent=mRNA87 chr21 . intron 33743137 33743190 . - . Parent=mRNA87 chr21 gth exon 33743191 33745040 1.000000 - . Parent=mRNA87 chr21 . intron 33745041 33749903 . - . Parent=mRNA87 chr21 gth exon 33749904 33749961 1.000000 - . Parent=mRNA87 chr21 . intron 33749962 33754589 . - . Parent=mRNA87 chr21 gth exon 33754590 33754682 1.000000 - . Parent=mRNA87 chr21 . intron 33754683 33759518 . - . Parent=mRNA87 chr21 gth exon 33759519 33759586 1.000000 - . Parent=mRNA87 chr21 . intron 33759587 33761186 . - . Parent=mRNA87 chr21 gth exon 33761187 33761299 1.000000 - . Parent=mRNA87 chr21 . intron 33761300 33762963 . - . Parent=mRNA87 chr21 gth exon 33762964 33763103 1.000000 - . Parent=mRNA87 chr21 . intron 33763104 33774014 . - . Parent=mRNA87 chr21 gth exon 33774015 33774188 1.000000 - . Parent=mRNA87 chr21 gth mRNA 33733331 33743587 . - . ID=mRNA88;Parent=gene14 chr21 gth exon 33733331 33733335 0.600000 - . Parent=mRNA88 chr21 . intron 33733336 33733390 . - . Parent=mRNA88 chr21 gth exon 33733391 33733474 1.000000 - . Parent=mRNA88 chr21 . intron 33733475 33742958 . - . Parent=mRNA88 chr21 gth exon 33742959 33743056 1.000000 - . Parent=mRNA88 chr21 . intron 33743057 33743410 . - . Parent=mRNA88 chr21 gth exon 33743411 33743587 1.000000 - . Parent=mRNA88 chr21 gth mRNA 33744724 33774113 . - . ID=mRNA89;Parent=gene14 chr21 gth exon 33744724 33745040 1.000000 - . Parent=mRNA89 chr21 . intron 33745041 33749903 . - . Parent=mRNA89 chr21 gth exon 33749904 33749961 1.000000 - . Parent=mRNA89 chr21 . intron 33749962 33750180 . - . Parent=mRNA89 chr21 gth exon 33750181 33750274 1.000000 - . Parent=mRNA89 chr21 . intron 33750275 33754589 . - . Parent=mRNA89 chr21 gth exon 33754590 33754682 1.000000 - . Parent=mRNA89 chr21 . intron 33754683 33759518 . - . Parent=mRNA89 chr21 gth exon 33759519 33759586 1.000000 - . Parent=mRNA89 chr21 . intron 33759587 33761186 . - . Parent=mRNA89 chr21 gth exon 33761187 33761299 1.000000 - . Parent=mRNA89 chr21 . intron 33761300 33762963 . - . Parent=mRNA89 chr21 gth exon 33762964 33763103 1.000000 - . Parent=mRNA89 chr21 . intron 33763104 33774014 . - . Parent=mRNA89 chr21 gth exon 33774015 33774113 1.000000 - . Parent=mRNA89 chr21 gth mRNA 33759195 33761312 . - . ID=mRNA90;Parent=gene14 chr21 gth exon 33759195 33759586 1.000000 - . Parent=mRNA90 chr21 . intron 33759587 33761186 . - . Parent=mRNA90 chr21 gth exon 33761187 33761312 1.000000 - . Parent=mRNA90 chr21 gth mRNA 33759555 33773466 . - . ID=mRNA91;Parent=gene14 chr21 gth exon 33759555 33759586 1.000000 - . Parent=mRNA91 chr21 . intron 33759587 33761186 . - . Parent=mRNA91 chr21 gth exon 33761187 33761299 1.000000 - . Parent=mRNA91 chr21 . intron 33761300 33762963 . - . Parent=mRNA91 chr21 gth exon 33762964 33763103 1.000000 - . Parent=mRNA91 chr21 . intron 33763104 33763707 . - . Parent=mRNA91 chr21 gth exon 33763708 33763860 1.000000 - . Parent=mRNA91 chr21 . intron 33763861 33773285 . - . Parent=mRNA91 chr21 gth exon 33773286 33773466 1.000000 - . Parent=mRNA91 chr21 gth mRNA 33761212 33775369 . - . ID=mRNA92;Parent=gene14 chr21 gth exon 33761212 33761299 1.000000 - . Parent=mRNA92 chr21 . intron 33761300 33762963 . - . Parent=mRNA92 chr21 gth exon 33762964 33763103 1.000000 - . Parent=mRNA92 chr21 . intron 33763104 33775310 . - . Parent=mRNA92 chr21 gth exon 33775311 33775369 1.000000 - . Parent=mRNA92 chr21 gth mRNA 33762597 33774125 . - . ID=mRNA93;Parent=gene14 chr21 gth exon 33762597 33763103 1.000000 - . Parent=mRNA93 chr21 . intron 33763104 33774014 . - . Parent=mRNA93 chr21 gth exon 33774015 33774125 1.000000 - . Parent=mRNA93 ### chr21 gth gene 33779707 33785897 . - . ID=gene15 chr21 gth mRNA 33779707 33785650 . - . ID=mRNA94;Parent=gene15 chr21 gth exon 33779707 33779934 1.000000 - . Parent=mRNA94 chr21 . intron 33779935 33782007 . - . Parent=mRNA94 chr21 gth exon 33782008 33783601 1.000000 - . Parent=mRNA94 chr21 . intron 33783602 33785242 . - . Parent=mRNA94 chr21 gth exon 33785243 33785650 1.000000 - . Parent=mRNA94 chr21 gth mRNA 33782367 33785897 . - . ID=mRNA95;Parent=gene15 chr21 gth exon 33782367 33783601 1.000000 - . Parent=mRNA95 chr21 . intron 33783602 33785778 . - . Parent=mRNA95 chr21 gth exon 33785779 33785897 1.000000 - . Parent=mRNA95 ### chr21 gth gene 33798108 33837667 . - . ID=gene16 chr21 gth mRNA 33798108 33836314 . - . ID=mRNA96;Parent=gene16 chr21 gth exon 33798108 33798492 1.000000 - . Parent=mRNA96 chr21 . intron 33798493 33798588 . - . Parent=mRNA96 chr21 gth exon 33798589 33798704 1.000000 - . Parent=mRNA96 chr21 . intron 33798705 33799737 . - . Parent=mRNA96 chr21 gth exon 33799738 33799879 1.000000 - . Parent=mRNA96 chr21 . intron 33799880 33800150 . - . Parent=mRNA96 chr21 gth exon 33800151 33800281 1.000000 - . Parent=mRNA96 chr21 . intron 33800282 33803959 . - . Parent=mRNA96 chr21 gth exon 33803960 33804097 1.000000 - . Parent=mRNA96 chr21 . intron 33804098 33805428 . - . Parent=mRNA96 chr21 gth exon 33805429 33805635 1.000000 - . Parent=mRNA96 chr21 . intron 33805636 33811165 . - . Parent=mRNA96 chr21 gth exon 33811166 33811318 1.000000 - . Parent=mRNA96 chr21 . intron 33811319 33811533 . - . Parent=mRNA96 chr21 gth exon 33811534 33811785 1.000000 - . Parent=mRNA96 chr21 . intron 33811786 33814540 . - . Parent=mRNA96 chr21 gth exon 33814541 33814739 1.000000 - . Parent=mRNA96 chr21 . intron 33814740 33815082 . - . Parent=mRNA96 chr21 gth exon 33815083 33815192 1.000000 - . Parent=mRNA96 chr21 . intron 33815193 33816364 . - . Parent=mRNA96 chr21 gth exon 33816365 33816459 1.000000 - . Parent=mRNA96 chr21 . intron 33816460 33818945 . - . Parent=mRNA96 chr21 gth exon 33818946 33819177 1.000000 - . Parent=mRNA96 chr21 . intron 33819178 33822342 . - . Parent=mRNA96 chr21 gth exon 33822343 33822511 1.000000 - . Parent=mRNA96 chr21 . intron 33822512 33822694 . - . Parent=mRNA96 chr21 gth exon 33822695 33822780 1.000000 - . Parent=mRNA96 chr21 . intron 33822781 33823025 . - . Parent=mRNA96 chr21 gth exon 33823026 33823113 1.000000 - . Parent=mRNA96 chr21 . intron 33823114 33824934 . - . Parent=mRNA96 chr21 gth exon 33824935 33825060 1.000000 - . Parent=mRNA96 chr21 . intron 33825061 33825664 . - . Parent=mRNA96 chr21 gth exon 33825665 33825733 1.000000 - . Parent=mRNA96 chr21 . intron 33825734 33826520 . - . Parent=mRNA96 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA96 chr21 . intron 33826633 33828754 . - . Parent=mRNA96 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA96 chr21 . intron 33828930 33829400 . - . Parent=mRNA96 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA96 chr21 . intron 33829497 33833346 . - . Parent=mRNA96 chr21 gth exon 33833347 33833532 1.000000 - . Parent=mRNA96 chr21 . intron 33833533 33836240 . - . Parent=mRNA96 chr21 gth exon 33836241 33836314 1.000000 - . Parent=mRNA96 chr21 gth mRNA 33798108 33837018 . - . ID=mRNA97;Parent=gene16 chr21 gth exon 33798108 33798492 1.000000 - . Parent=mRNA97 chr21 . intron 33798493 33798588 . - . Parent=mRNA97 chr21 gth exon 33798589 33798704 1.000000 - . Parent=mRNA97 chr21 . intron 33798705 33799737 . - . Parent=mRNA97 chr21 gth exon 33799738 33799879 1.000000 - . Parent=mRNA97 chr21 . intron 33799880 33800150 . - . Parent=mRNA97 chr21 gth exon 33800151 33800281 1.000000 - . Parent=mRNA97 chr21 . intron 33800282 33803959 . - . Parent=mRNA97 chr21 gth exon 33803960 33804097 1.000000 - . Parent=mRNA97 chr21 . intron 33804098 33805428 . - . Parent=mRNA97 chr21 gth exon 33805429 33805635 1.000000 - . Parent=mRNA97 chr21 . intron 33805636 33811165 . - . Parent=mRNA97 chr21 gth exon 33811166 33811318 1.000000 - . Parent=mRNA97 chr21 . intron 33811319 33811533 . - . Parent=mRNA97 chr21 gth exon 33811534 33811785 1.000000 - . Parent=mRNA97 chr21 . intron 33811786 33814540 . - . Parent=mRNA97 chr21 gth exon 33814541 33814739 1.000000 - . Parent=mRNA97 chr21 . intron 33814740 33815082 . - . Parent=mRNA97 chr21 gth exon 33815083 33815192 1.000000 - . Parent=mRNA97 chr21 . intron 33815193 33816364 . - . Parent=mRNA97 chr21 gth exon 33816365 33816459 1.000000 - . Parent=mRNA97 chr21 . intron 33816460 33818945 . - . Parent=mRNA97 chr21 gth exon 33818946 33819177 1.000000 - . Parent=mRNA97 chr21 . intron 33819178 33822342 . - . Parent=mRNA97 chr21 gth exon 33822343 33822511 1.000000 - . Parent=mRNA97 chr21 . intron 33822512 33822694 . - . Parent=mRNA97 chr21 gth exon 33822695 33822780 1.000000 - . Parent=mRNA97 chr21 . intron 33822781 33823025 . - . Parent=mRNA97 chr21 gth exon 33823026 33823113 1.000000 - . Parent=mRNA97 chr21 . intron 33823114 33824934 . - . Parent=mRNA97 chr21 gth exon 33824935 33825060 1.000000 - . Parent=mRNA97 chr21 . intron 33825061 33825664 . - . Parent=mRNA97 chr21 gth exon 33825665 33825733 1.000000 - . Parent=mRNA97 chr21 . intron 33825734 33826520 . - . Parent=mRNA97 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA97 chr21 . intron 33826633 33828754 . - . Parent=mRNA97 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA97 chr21 . intron 33828930 33829400 . - . Parent=mRNA97 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA97 chr21 . intron 33829497 33833346 . - . Parent=mRNA97 chr21 gth exon 33833347 33833499 1.000000 - . Parent=mRNA97 chr21 . intron 33833500 33836762 . - . Parent=mRNA97 chr21 gth exon 33836763 33837018 1.000000 - . Parent=mRNA97 chr21 gth mRNA 33798108 33837037 . - . ID=mRNA98;Parent=gene16 chr21 gth exon 33798108 33798492 1.000000 - . Parent=mRNA98 chr21 . intron 33798493 33798588 . - . Parent=mRNA98 chr21 gth exon 33798589 33798704 1.000000 - . Parent=mRNA98 chr21 . intron 33798705 33799737 . - . Parent=mRNA98 chr21 gth exon 33799738 33799879 1.000000 - . Parent=mRNA98 chr21 . intron 33799880 33800150 . - . Parent=mRNA98 chr21 gth exon 33800151 33800281 1.000000 - . Parent=mRNA98 chr21 . intron 33800282 33803959 . - . Parent=mRNA98 chr21 gth exon 33803960 33804097 1.000000 - . Parent=mRNA98 chr21 . intron 33804098 33805428 . - . Parent=mRNA98 chr21 gth exon 33805429 33805635 1.000000 - . Parent=mRNA98 chr21 . intron 33805636 33811165 . - . Parent=mRNA98 chr21 gth exon 33811166 33811318 1.000000 - . Parent=mRNA98 chr21 . intron 33811319 33811533 . - . Parent=mRNA98 chr21 gth exon 33811534 33811785 1.000000 - . Parent=mRNA98 chr21 . intron 33811786 33814540 . - . Parent=mRNA98 chr21 gth exon 33814541 33814739 1.000000 - . Parent=mRNA98 chr21 . intron 33814740 33815082 . - . Parent=mRNA98 chr21 gth exon 33815083 33815192 1.000000 - . Parent=mRNA98 chr21 . intron 33815193 33816364 . - . Parent=mRNA98 chr21 gth exon 33816365 33816459 1.000000 - . Parent=mRNA98 chr21 . intron 33816460 33818945 . - . Parent=mRNA98 chr21 gth exon 33818946 33819177 1.000000 - . Parent=mRNA98 chr21 . intron 33819178 33822342 . - . Parent=mRNA98 chr21 gth exon 33822343 33822511 1.000000 - . Parent=mRNA98 chr21 . intron 33822512 33822694 . - . Parent=mRNA98 chr21 gth exon 33822695 33822780 1.000000 - . Parent=mRNA98 chr21 . intron 33822781 33823025 . - . Parent=mRNA98 chr21 gth exon 33823026 33823113 1.000000 - . Parent=mRNA98 chr21 . intron 33823114 33824934 . - . Parent=mRNA98 chr21 gth exon 33824935 33825060 1.000000 - . Parent=mRNA98 chr21 . intron 33825061 33825664 . - . Parent=mRNA98 chr21 gth exon 33825665 33825733 1.000000 - . Parent=mRNA98 chr21 . intron 33825734 33826520 . - . Parent=mRNA98 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA98 chr21 . intron 33826633 33828754 . - . Parent=mRNA98 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA98 chr21 . intron 33828930 33829400 . - . Parent=mRNA98 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA98 chr21 . intron 33829497 33833346 . - . Parent=mRNA98 chr21 gth exon 33833347 33833532 1.000000 - . Parent=mRNA98 chr21 . intron 33833533 33836835 . - . Parent=mRNA98 chr21 gth exon 33836836 33837037 1.000000 - . Parent=mRNA98 chr21 gth mRNA 33798110 33837068 . - . ID=mRNA99;Parent=gene16 chr21 gth exon 33798110 33798492 1.000000 - . Parent=mRNA99 chr21 . intron 33798493 33798588 . - . Parent=mRNA99 chr21 gth exon 33798589 33798704 1.000000 - . Parent=mRNA99 chr21 . intron 33798705 33799737 . - . Parent=mRNA99 chr21 gth exon 33799738 33799879 1.000000 - . Parent=mRNA99 chr21 . intron 33799880 33800150 . - . Parent=mRNA99 chr21 gth exon 33800151 33800281 1.000000 - . Parent=mRNA99 chr21 . intron 33800282 33803959 . - . Parent=mRNA99 chr21 gth exon 33803960 33804097 1.000000 - . Parent=mRNA99 chr21 . intron 33804098 33805428 . - . Parent=mRNA99 chr21 gth exon 33805429 33805635 1.000000 - . Parent=mRNA99 chr21 . intron 33805636 33811165 . - . Parent=mRNA99 chr21 gth exon 33811166 33811318 1.000000 - . Parent=mRNA99 chr21 . intron 33811319 33811533 . - . Parent=mRNA99 chr21 gth exon 33811534 33811785 1.000000 - . Parent=mRNA99 chr21 . intron 33811786 33814540 . - . Parent=mRNA99 chr21 gth exon 33814541 33814739 1.000000 - . Parent=mRNA99 chr21 . intron 33814740 33815082 . - . Parent=mRNA99 chr21 gth exon 33815083 33815192 1.000000 - . Parent=mRNA99 chr21 . intron 33815193 33816364 . - . Parent=mRNA99 chr21 gth exon 33816365 33816459 1.000000 - . Parent=mRNA99 chr21 . intron 33816460 33818945 . - . Parent=mRNA99 chr21 gth exon 33818946 33819177 1.000000 - . Parent=mRNA99 chr21 . intron 33819178 33822342 . - . Parent=mRNA99 chr21 gth exon 33822343 33822511 1.000000 - . Parent=mRNA99 chr21 . intron 33822512 33822690 . - . Parent=mRNA99 chr21 gth exon 33822691 33822780 1.000000 - . Parent=mRNA99 chr21 . intron 33822781 33823025 . - . Parent=mRNA99 chr21 gth exon 33823026 33823113 1.000000 - . Parent=mRNA99 chr21 . intron 33823114 33824934 . - . Parent=mRNA99 chr21 gth exon 33824935 33825060 1.000000 - . Parent=mRNA99 chr21 . intron 33825061 33825664 . - . Parent=mRNA99 chr21 gth exon 33825665 33825733 1.000000 - . Parent=mRNA99 chr21 . intron 33825734 33826520 . - . Parent=mRNA99 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA99 chr21 . intron 33826633 33828754 . - . Parent=mRNA99 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA99 chr21 . intron 33828930 33829400 . - . Parent=mRNA99 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA99 chr21 . intron 33829497 33833346 . - . Parent=mRNA99 chr21 gth exon 33833347 33833532 1.000000 - . Parent=mRNA99 chr21 . intron 33833533 33836766 . - . Parent=mRNA99 chr21 gth exon 33836767 33837068 1.000000 - . Parent=mRNA99 chr21 gth mRNA 33800152 33805569 . - . ID=mRNA100;Parent=gene16 chr21 gth exon 33800152 33800257 1.000000 - . Parent=mRNA100 chr21 . intron 33800258 33803990 . - . Parent=mRNA100 chr21 gth exon 33803991 33804097 1.000000 - . Parent=mRNA100 chr21 . intron 33804098 33805428 . - . Parent=mRNA100 chr21 gth exon 33805429 33805569 1.000000 - . Parent=mRNA100 chr21 gth mRNA 33800217 33804510 . - . ID=mRNA101;Parent=gene16 chr21 gth exon 33800217 33800281 1.000000 - . Parent=mRNA101 chr21 . intron 33800282 33803959 . - . Parent=mRNA101 chr21 gth exon 33803960 33804510 1.000000 - . Parent=mRNA101 chr21 gth mRNA 33803365 33805481 . - . ID=mRNA102;Parent=gene16 chr21 gth exon 33803365 33804097 1.000000 - . Parent=mRNA102 chr21 . intron 33804098 33805428 . - . Parent=mRNA102 chr21 gth exon 33805429 33805481 1.000000 - . Parent=mRNA102 chr21 gth mRNA 33814699 33822940 . - . ID=mRNA103;Parent=gene16 chr21 gth exon 33814699 33814822 1.000000 - . Parent=mRNA103 chr21 . intron 33814823 33815082 . - . Parent=mRNA103 chr21 gth exon 33815083 33815192 1.000000 - . Parent=mRNA103 chr21 . intron 33815193 33816364 . - . Parent=mRNA103 chr21 gth exon 33816365 33816459 1.000000 - . Parent=mRNA103 chr21 . intron 33816460 33818945 . - . Parent=mRNA103 chr21 gth exon 33818946 33819177 1.000000 - . Parent=mRNA103 chr21 . intron 33819178 33822342 . - . Parent=mRNA103 chr21 gth exon 33822343 33822940 1.000000 - . Parent=mRNA103 chr21 gth mRNA 33818186 33836290 . - . ID=mRNA104;Parent=gene16 chr21 gth exon 33818186 33819177 1.000000 - . Parent=mRNA104 chr21 . intron 33819178 33822342 . - . Parent=mRNA104 chr21 gth exon 33822343 33822511 1.000000 - . Parent=mRNA104 chr21 . intron 33822512 33822694 . - . Parent=mRNA104 chr21 gth exon 33822695 33822780 1.000000 - . Parent=mRNA104 chr21 . intron 33822781 33823025 . - . Parent=mRNA104 chr21 gth exon 33823026 33823113 1.000000 - . Parent=mRNA104 chr21 . intron 33823114 33824934 . - . Parent=mRNA104 chr21 gth exon 33824935 33825060 1.000000 - . Parent=mRNA104 chr21 . intron 33825061 33825664 . - . Parent=mRNA104 chr21 gth exon 33825665 33825733 1.000000 - . Parent=mRNA104 chr21 . intron 33825734 33826520 . - . Parent=mRNA104 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA104 chr21 . intron 33826633 33828754 . - . Parent=mRNA104 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA104 chr21 . intron 33828930 33829400 . - . Parent=mRNA104 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA104 chr21 . intron 33829497 33833346 . - . Parent=mRNA104 chr21 gth exon 33833347 33833532 1.000000 - . Parent=mRNA104 chr21 . intron 33833533 33836240 . - . Parent=mRNA104 chr21 gth exon 33836241 33836290 1.000000 - . Parent=mRNA104 chr21 gth mRNA 33822442 33836539 . - . ID=mRNA105;Parent=gene16 chr21 gth exon 33822442 33822511 1.000000 - . Parent=mRNA105 chr21 . intron 33822512 33822694 . - . Parent=mRNA105 chr21 gth exon 33822695 33822780 1.000000 - . Parent=mRNA105 chr21 . intron 33822781 33823025 . - . Parent=mRNA105 chr21 gth exon 33823026 33823113 1.000000 - . Parent=mRNA105 chr21 . intron 33823114 33823742 . - . Parent=mRNA105 chr21 gth exon 33823743 33823944 1.000000 - . Parent=mRNA105 chr21 . intron 33823945 33824934 . - . Parent=mRNA105 chr21 gth exon 33824935 33825060 1.000000 - . Parent=mRNA105 chr21 . intron 33825061 33825664 . - . Parent=mRNA105 chr21 gth exon 33825665 33825733 1.000000 - . Parent=mRNA105 chr21 . intron 33825734 33826520 . - . Parent=mRNA105 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA105 chr21 . intron 33826633 33828754 . - . Parent=mRNA105 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA105 chr21 . intron 33828930 33829400 . - . Parent=mRNA105 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA105 chr21 . intron 33829497 33833346 . - . Parent=mRNA105 chr21 gth exon 33833347 33833499 1.000000 - . Parent=mRNA105 chr21 . intron 33833500 33836240 . - . Parent=mRNA105 chr21 gth exon 33836241 33836539 1.000000 - . Parent=mRNA105 chr21 gth mRNA 33822739 33825458 . - . ID=mRNA106;Parent=gene16 chr21 gth exon 33822739 33822780 1.000000 - . Parent=mRNA106 chr21 . intron 33822781 33823025 . - . Parent=mRNA106 chr21 gth exon 33823026 33823113 1.000000 - . Parent=mRNA106 chr21 . intron 33823114 33824934 . - . Parent=mRNA106 chr21 gth exon 33824935 33825458 1.000000 - . Parent=mRNA106 chr21 gth mRNA 33824886 33836539 . - . ID=mRNA107;Parent=gene16 chr21 gth exon 33824886 33825060 1.000000 - . Parent=mRNA107 chr21 . intron 33825061 33825664 . - . Parent=mRNA107 chr21 gth exon 33825665 33825733 1.000000 - . Parent=mRNA107 chr21 . intron 33825734 33826520 . - . Parent=mRNA107 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA107 chr21 . intron 33826633 33828754 . - . Parent=mRNA107 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA107 chr21 . intron 33828930 33829400 . - . Parent=mRNA107 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA107 chr21 . intron 33829497 33833346 . - . Parent=mRNA107 chr21 gth exon 33833347 33833499 1.000000 - . Parent=mRNA107 chr21 . intron 33833500 33836240 . - . Parent=mRNA107 chr21 gth exon 33836241 33836539 1.000000 - . Parent=mRNA107 chr21 gth mRNA 33824886 33836969 . - . ID=mRNA108;Parent=gene16 chr21 gth exon 33824886 33825060 1.000000 - . Parent=mRNA108 chr21 . intron 33825061 33825664 . - . Parent=mRNA108 chr21 gth exon 33825665 33825733 1.000000 - . Parent=mRNA108 chr21 . intron 33825734 33826520 . - . Parent=mRNA108 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA108 chr21 . intron 33826633 33828754 . - . Parent=mRNA108 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA108 chr21 . intron 33828930 33829400 . - . Parent=mRNA108 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA108 chr21 . intron 33829497 33833346 . - . Parent=mRNA108 chr21 gth exon 33833347 33833499 1.000000 - . Parent=mRNA108 chr21 . intron 33833500 33836835 . - . Parent=mRNA108 chr21 gth exon 33836836 33836969 1.000000 - . Parent=mRNA108 chr21 gth mRNA 33824886 33836996 . - . ID=mRNA109;Parent=gene16 chr21 gth exon 33824886 33825060 1.000000 - . Parent=mRNA109 chr21 . intron 33825061 33825664 . - . Parent=mRNA109 chr21 gth exon 33825665 33825733 1.000000 - . Parent=mRNA109 chr21 . intron 33825734 33826520 . - . Parent=mRNA109 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA109 chr21 . intron 33826633 33828754 . - . Parent=mRNA109 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA109 chr21 . intron 33828930 33829400 . - . Parent=mRNA109 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA109 chr21 . intron 33829497 33833346 . - . Parent=mRNA109 chr21 gth exon 33833347 33833499 1.000000 - . Parent=mRNA109 chr21 . intron 33833500 33836723 . - . Parent=mRNA109 chr21 gth exon 33836724 33836996 1.000000 - . Parent=mRNA109 chr21 gth mRNA 33824886 33837667 . - . ID=mRNA110;Parent=gene16 chr21 gth exon 33824886 33825060 1.000000 - . Parent=mRNA110 chr21 . intron 33825061 33825664 . - . Parent=mRNA110 chr21 gth exon 33825665 33825733 1.000000 - . Parent=mRNA110 chr21 . intron 33825734 33826520 . - . Parent=mRNA110 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA110 chr21 . intron 33826633 33828754 . - . Parent=mRNA110 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA110 chr21 . intron 33828930 33829400 . - . Parent=mRNA110 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA110 chr21 . intron 33829497 33833346 . - . Parent=mRNA110 chr21 gth exon 33833347 33833532 1.000000 - . Parent=mRNA110 chr21 . intron 33833533 33837395 . - . Parent=mRNA110 chr21 gth exon 33837396 33837667 1.000000 - . Parent=mRNA110 chr21 gth mRNA 33825512 33833532 . - . ID=mRNA111;Parent=gene16 chr21 gth exon 33825512 33825733 1.000000 - . Parent=mRNA111 chr21 . intron 33825734 33826520 . - . Parent=mRNA111 chr21 gth exon 33826521 33826632 1.000000 - . Parent=mRNA111 chr21 . intron 33826633 33828754 . - . Parent=mRNA111 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA111 chr21 . intron 33828930 33829400 . - . Parent=mRNA111 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA111 chr21 . intron 33829497 33833346 . - . Parent=mRNA111 chr21 gth exon 33833347 33833532 1.000000 - . Parent=mRNA111 chr21 gth mRNA 33825949 33836539 . - . ID=mRNA112;Parent=gene16 chr21 gth exon 33825949 33826632 1.000000 - . Parent=mRNA112 chr21 . intron 33826633 33828754 . - . Parent=mRNA112 chr21 gth exon 33828755 33828929 1.000000 - . Parent=mRNA112 chr21 . intron 33828930 33829400 . - . Parent=mRNA112 chr21 gth exon 33829401 33829496 1.000000 - . Parent=mRNA112 chr21 . intron 33829497 33833346 . - . Parent=mRNA112 chr21 gth exon 33833347 33833499 1.000000 - . Parent=mRNA112 chr21 . intron 33833500 33836240 . - . Parent=mRNA112 chr21 gth exon 33836241 33836539 1.000000 - . Parent=mRNA112 ### chr21 gth gene 33836794 33871657 . + . ID=gene17 chr21 gth mRNA 33836794 33871657 . + . ID=mRNA113;Parent=gene17 chr21 gth exon 33836794 33837345 1.000000 + . Parent=mRNA113 chr21 . intron 33837346 33840388 . + . Parent=mRNA113 chr21 gth exon 33840389 33840555 1.000000 + . Parent=mRNA113 chr21 . intron 33840556 33843651 . + . Parent=mRNA113 chr21 gth exon 33843652 33849567 1.000000 + . Parent=mRNA113 chr21 . intron 33849568 33851331 . + . Parent=mRNA113 chr21 gth exon 33851332 33851492 1.000000 + . Parent=mRNA113 chr21 . intron 33851493 33853405 . + . Parent=mRNA113 chr21 gth exon 33853406 33853552 1.000000 + . Parent=mRNA113 chr21 . intron 33853553 33853762 . + . Parent=mRNA113 chr21 gth exon 33853763 33853951 1.000000 + . Parent=mRNA113 chr21 . intron 33853952 33861332 . + . Parent=mRNA113 chr21 gth exon 33861333 33861443 1.000000 + . Parent=mRNA113 chr21 . intron 33861444 33863146 . + . Parent=mRNA113 chr21 gth exon 33863147 33863263 1.000000 + . Parent=mRNA113 chr21 . intron 33863264 33867483 . + . Parent=mRNA113 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA113 chr21 . intron 33867632 33869771 . + . Parent=mRNA113 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA113 chr21 . intron 33869844 33869953 . + . Parent=mRNA113 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA113 chr21 . intron 33870070 33870540 . + . Parent=mRNA113 chr21 gth exon 33870541 33871657 1.000000 + . Parent=mRNA113 chr21 gth mRNA 33837220 33871655 . + . ID=mRNA114;Parent=gene17 chr21 gth exon 33837220 33837345 1.000000 + . Parent=mRNA114 chr21 . intron 33837346 33840388 . + . Parent=mRNA114 chr21 gth exon 33840389 33840555 1.000000 + . Parent=mRNA114 chr21 . intron 33840556 33843651 . + . Parent=mRNA114 chr21 gth exon 33843652 33845641 1.000000 + . Parent=mRNA114 chr21 . intron 33845642 33845761 . + . Parent=mRNA114 chr21 gth exon 33845762 33849567 1.000000 + . Parent=mRNA114 chr21 . intron 33849568 33851331 . + . Parent=mRNA114 chr21 gth exon 33851332 33851492 1.000000 + . Parent=mRNA114 chr21 . intron 33851493 33853405 . + . Parent=mRNA114 chr21 gth exon 33853406 33853552 1.000000 + . Parent=mRNA114 chr21 . intron 33853553 33853762 . + . Parent=mRNA114 chr21 gth exon 33853763 33853951 1.000000 + . Parent=mRNA114 chr21 . intron 33853952 33861332 . + . Parent=mRNA114 chr21 gth exon 33861333 33861443 1.000000 + . Parent=mRNA114 chr21 . intron 33861444 33863146 . + . Parent=mRNA114 chr21 gth exon 33863147 33863263 1.000000 + . Parent=mRNA114 chr21 . intron 33863264 33867483 . + . Parent=mRNA114 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA114 chr21 . intron 33867632 33869771 . + . Parent=mRNA114 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA114 chr21 . intron 33869844 33869953 . + . Parent=mRNA114 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA114 chr21 . intron 33870070 33870540 . + . Parent=mRNA114 chr21 gth exon 33870541 33871655 1.000000 + . Parent=mRNA114 chr21 gth mRNA 33837228 33840928 . + . ID=mRNA115;Parent=gene17 chr21 gth exon 33837228 33837345 1.000000 + . Parent=mRNA115 chr21 . intron 33837346 33840388 . + . Parent=mRNA115 chr21 gth exon 33840389 33840928 1.000000 + . Parent=mRNA115 chr21 gth mRNA 33837228 33871657 . + . ID=mRNA116;Parent=gene17 chr21 gth exon 33837228 33837345 1.000000 + . Parent=mRNA116 chr21 . intron 33837346 33840388 . + . Parent=mRNA116 chr21 gth exon 33840389 33840555 1.000000 + . Parent=mRNA116 chr21 . intron 33840556 33851331 . + . Parent=mRNA116 chr21 gth exon 33851332 33851492 1.000000 + . Parent=mRNA116 chr21 . intron 33851493 33853405 . + . Parent=mRNA116 chr21 gth exon 33853406 33853552 1.000000 + . Parent=mRNA116 chr21 . intron 33853553 33853762 . + . Parent=mRNA116 chr21 gth exon 33853763 33853951 1.000000 + . Parent=mRNA116 chr21 . intron 33853952 33861332 . + . Parent=mRNA116 chr21 gth exon 33861333 33861443 1.000000 + . Parent=mRNA116 chr21 . intron 33861444 33863146 . + . Parent=mRNA116 chr21 gth exon 33863147 33863263 1.000000 + . Parent=mRNA116 chr21 . intron 33863264 33867483 . + . Parent=mRNA116 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA116 chr21 . intron 33867632 33869771 . + . Parent=mRNA116 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA116 chr21 . intron 33869844 33869953 . + . Parent=mRNA116 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA116 chr21 . intron 33870070 33870540 . + . Parent=mRNA116 chr21 gth exon 33870541 33871657 1.000000 + . Parent=mRNA116 chr21 gth mRNA 33837240 33854843 . + . ID=mRNA117;Parent=gene17 chr21 gth exon 33837240 33837345 1.000000 + . Parent=mRNA117 chr21 . intron 33837346 33840388 . + . Parent=mRNA117 chr21 gth exon 33840389 33840555 1.000000 + . Parent=mRNA117 chr21 . intron 33840556 33843651 . + . Parent=mRNA117 chr21 gth exon 33843652 33849567 1.000000 + . Parent=mRNA117 chr21 . intron 33849568 33851331 . + . Parent=mRNA117 chr21 gth exon 33851332 33851492 1.000000 + . Parent=mRNA117 chr21 . intron 33851493 33853405 . + . Parent=mRNA117 chr21 gth exon 33853406 33853552 1.000000 + . Parent=mRNA117 chr21 . intron 33853553 33853762 . + . Parent=mRNA117 chr21 gth exon 33853763 33853951 1.000000 + . Parent=mRNA117 chr21 . intron 33853952 33854052 . + . Parent=mRNA117 chr21 gth exon 33854053 33854843 1.000000 + . Parent=mRNA117 chr21 gth mRNA 33837240 33871657 . + . ID=mRNA118;Parent=gene17 chr21 gth exon 33837240 33837345 1.000000 + . Parent=mRNA118 chr21 . intron 33837346 33840388 . + . Parent=mRNA118 chr21 gth exon 33840389 33840555 1.000000 + . Parent=mRNA118 chr21 . intron 33840556 33843651 . + . Parent=mRNA118 chr21 gth exon 33843652 33849567 1.000000 + . Parent=mRNA118 chr21 . intron 33849568 33851331 . + . Parent=mRNA118 chr21 gth exon 33851332 33851492 1.000000 + . Parent=mRNA118 chr21 . intron 33851493 33851721 . + . Parent=mRNA118 chr21 gth exon 33851722 33851844 1.000000 + . Parent=mRNA118 chr21 . intron 33851845 33853405 . + . Parent=mRNA118 chr21 gth exon 33853406 33853552 1.000000 + . Parent=mRNA118 chr21 . intron 33853553 33853762 . + . Parent=mRNA118 chr21 gth exon 33853763 33853951 1.000000 + . Parent=mRNA118 chr21 . intron 33853952 33861332 . + . Parent=mRNA118 chr21 gth exon 33861333 33861443 1.000000 + . Parent=mRNA118 chr21 . intron 33861444 33863146 . + . Parent=mRNA118 chr21 gth exon 33863147 33863263 1.000000 + . Parent=mRNA118 chr21 . intron 33863264 33867483 . + . Parent=mRNA118 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA118 chr21 . intron 33867632 33869771 . + . Parent=mRNA118 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA118 chr21 . intron 33869844 33869953 . + . Parent=mRNA118 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA118 chr21 . intron 33870070 33870593 . + . Parent=mRNA118 chr21 gth exon 33870594 33871657 1.000000 + . Parent=mRNA118 chr21 gth mRNA 33837240 33871657 . + . ID=mRNA119;Parent=gene17 chr21 gth exon 33837240 33837345 1.000000 + . Parent=mRNA119 chr21 . intron 33837346 33840388 . + . Parent=mRNA119 chr21 gth exon 33840389 33840555 1.000000 + . Parent=mRNA119 chr21 . intron 33840556 33843651 . + . Parent=mRNA119 chr21 gth exon 33843652 33849567 1.000000 + . Parent=mRNA119 chr21 . intron 33849568 33851331 . + . Parent=mRNA119 chr21 gth exon 33851332 33851492 1.000000 + . Parent=mRNA119 chr21 . intron 33851493 33853405 . + . Parent=mRNA119 chr21 gth exon 33853406 33853552 1.000000 + . Parent=mRNA119 chr21 . intron 33853553 33853762 . + . Parent=mRNA119 chr21 gth exon 33853763 33853951 1.000000 + . Parent=mRNA119 chr21 . intron 33853952 33861332 . + . Parent=mRNA119 chr21 gth exon 33861333 33861443 1.000000 + . Parent=mRNA119 chr21 . intron 33861444 33863146 . + . Parent=mRNA119 chr21 gth exon 33863147 33863263 1.000000 + . Parent=mRNA119 chr21 . intron 33863264 33866726 . + . Parent=mRNA119 chr21 gth exon 33866727 33866806 1.000000 + . Parent=mRNA119 chr21 . intron 33866807 33867483 . + . Parent=mRNA119 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA119 chr21 . intron 33867632 33869771 . + . Parent=mRNA119 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA119 chr21 . intron 33869844 33869953 . + . Parent=mRNA119 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA119 chr21 . intron 33870070 33870593 . + . Parent=mRNA119 chr21 gth exon 33870594 33871657 1.000000 + . Parent=mRNA119 chr21 gth mRNA 33837241 33853232 . + . ID=mRNA120;Parent=gene17 chr21 gth exon 33837241 33837345 1.000000 + . Parent=mRNA120 chr21 . intron 33837346 33840388 . + . Parent=mRNA120 chr21 gth exon 33840389 33840555 1.000000 + . Parent=mRNA120 chr21 . intron 33840556 33843651 . + . Parent=mRNA120 chr21 gth exon 33843652 33849567 1.000000 + . Parent=mRNA120 chr21 . intron 33849568 33851331 . + . Parent=mRNA120 chr21 gth exon 33851332 33851492 1.000000 + . Parent=mRNA120 chr21 . intron 33851493 33851721 . + . Parent=mRNA120 chr21 gth exon 33851722 33853232 1.000000 + . Parent=mRNA120 chr21 gth mRNA 33837246 33841215 . + . ID=mRNA121;Parent=gene17 chr21 gth exon 33837246 33837345 1.000000 + . Parent=mRNA121 chr21 . intron 33837346 33840388 . + . Parent=mRNA121 chr21 gth exon 33840389 33840555 1.000000 + . Parent=mRNA121 chr21 . intron 33840556 33841176 . + . Parent=mRNA121 chr21 gth exon 33841177 33841215 1.000000 + . Parent=mRNA121 chr21 gth mRNA 33843772 33871651 . + . ID=mRNA122;Parent=gene17 chr21 gth exon 33843772 33844420 1.000000 + . Parent=mRNA122 chr21 . intron 33844421 33849481 . + . Parent=mRNA122 chr21 gth exon 33849482 33849567 1.000000 + . Parent=mRNA122 chr21 . intron 33849568 33851331 . + . Parent=mRNA122 chr21 gth exon 33851332 33851492 1.000000 + . Parent=mRNA122 chr21 . intron 33851493 33853405 . + . Parent=mRNA122 chr21 gth exon 33853406 33853552 1.000000 + . Parent=mRNA122 chr21 . intron 33853553 33853762 . + . Parent=mRNA122 chr21 gth exon 33853763 33853951 1.000000 + . Parent=mRNA122 chr21 . intron 33853952 33861332 . + . Parent=mRNA122 chr21 gth exon 33861333 33861443 1.000000 + . Parent=mRNA122 chr21 . intron 33861444 33863146 . + . Parent=mRNA122 chr21 gth exon 33863147 33863263 1.000000 + . Parent=mRNA122 chr21 . intron 33863264 33867483 . + . Parent=mRNA122 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA122 chr21 . intron 33867632 33869771 . + . Parent=mRNA122 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA122 chr21 . intron 33869844 33869953 . + . Parent=mRNA122 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA122 chr21 . intron 33870070 33870593 . + . Parent=mRNA122 chr21 gth exon 33870594 33871651 1.000000 + . Parent=mRNA122 chr21 gth mRNA 33845060 33871657 . + . ID=mRNA123;Parent=gene17 chr21 gth exon 33845060 33845465 1.000000 + . Parent=mRNA123 chr21 . intron 33845466 33846423 . + . Parent=mRNA123 chr21 gth exon 33846424 33849567 1.000000 + . Parent=mRNA123 chr21 . intron 33849568 33851331 . + . Parent=mRNA123 chr21 gth exon 33851332 33851492 1.000000 + . Parent=mRNA123 chr21 . intron 33851493 33853405 . + . Parent=mRNA123 chr21 gth exon 33853406 33853552 1.000000 + . Parent=mRNA123 chr21 . intron 33853553 33853762 . + . Parent=mRNA123 chr21 gth exon 33853763 33853951 1.000000 + . Parent=mRNA123 chr21 . intron 33853952 33861332 . + . Parent=mRNA123 chr21 gth exon 33861333 33861443 1.000000 + . Parent=mRNA123 chr21 . intron 33861444 33863146 . + . Parent=mRNA123 chr21 gth exon 33863147 33863263 1.000000 + . Parent=mRNA123 chr21 . intron 33863264 33867483 . + . Parent=mRNA123 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA123 chr21 . intron 33867632 33869771 . + . Parent=mRNA123 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA123 chr21 . intron 33869844 33869953 . + . Parent=mRNA123 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA123 chr21 . intron 33870070 33870540 . + . Parent=mRNA123 chr21 gth exon 33870541 33871657 1.000000 + . Parent=mRNA123 chr21 gth mRNA 33849225 33861643 . + . ID=mRNA124;Parent=gene17 chr21 gth exon 33849225 33849567 1.000000 + . Parent=mRNA124 chr21 . intron 33849568 33851331 . + . Parent=mRNA124 chr21 gth exon 33851332 33851492 1.000000 + . Parent=mRNA124 chr21 . intron 33851493 33853405 . + . Parent=mRNA124 chr21 gth exon 33853406 33853552 1.000000 + . Parent=mRNA124 chr21 . intron 33853553 33853762 . + . Parent=mRNA124 chr21 gth exon 33853763 33853951 1.000000 + . Parent=mRNA124 chr21 . intron 33853952 33861332 . + . Parent=mRNA124 chr21 gth exon 33861333 33861643 1.000000 + . Parent=mRNA124 chr21 gth mRNA 33861355 33863459 . + . ID=mRNA125;Parent=gene17 chr21 gth exon 33861355 33861443 1.000000 + . Parent=mRNA125 chr21 . intron 33861444 33863146 . + . Parent=mRNA125 chr21 gth exon 33863147 33863459 1.000000 + . Parent=mRNA125 chr21 gth mRNA 33861361 33870689 . + . ID=mRNA126;Parent=gene17 chr21 gth exon 33861361 33861443 1.000000 + . Parent=mRNA126 chr21 . intron 33861444 33863146 . + . Parent=mRNA126 chr21 gth exon 33863147 33863263 1.000000 + . Parent=mRNA126 chr21 . intron 33863264 33866726 . + . Parent=mRNA126 chr21 gth exon 33866727 33866806 1.000000 + . Parent=mRNA126 chr21 . intron 33866807 33867483 . + . Parent=mRNA126 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA126 chr21 . intron 33867632 33869771 . + . Parent=mRNA126 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA126 chr21 . intron 33869844 33869953 . + . Parent=mRNA126 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA126 chr21 . intron 33870070 33870540 . + . Parent=mRNA126 chr21 gth exon 33870541 33870689 1.000000 + . Parent=mRNA126 chr21 gth mRNA 33863952 33870660 . + . ID=mRNA127;Parent=gene17 chr21 gth exon 33863952 33864106 1.000000 + . Parent=mRNA127 chr21 . intron 33864107 33865926 . + . Parent=mRNA127 chr21 gth exon 33865927 33865964 1.000000 + . Parent=mRNA127 chr21 . intron 33865965 33866726 . + . Parent=mRNA127 chr21 gth exon 33866727 33866806 1.000000 + . Parent=mRNA127 chr21 . intron 33866807 33867483 . + . Parent=mRNA127 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA127 chr21 . intron 33867632 33869771 . + . Parent=mRNA127 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA127 chr21 . intron 33869844 33869953 . + . Parent=mRNA127 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA127 chr21 . intron 33870070 33870593 . + . Parent=mRNA127 chr21 gth exon 33870594 33870660 1.000000 + . Parent=mRNA127 chr21 gth mRNA 33865911 33870623 . + . ID=mRNA128;Parent=gene17 chr21 gth exon 33865911 33865964 1.000000 + . Parent=mRNA128 chr21 . intron 33865965 33866726 . + . Parent=mRNA128 chr21 gth exon 33866727 33866806 1.000000 + . Parent=mRNA128 chr21 . intron 33866807 33867483 . + . Parent=mRNA128 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA128 chr21 . intron 33867632 33869771 . + . Parent=mRNA128 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA128 chr21 . intron 33869844 33869953 . + . Parent=mRNA128 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA128 chr21 . intron 33870070 33870593 . + . Parent=mRNA128 chr21 gth exon 33870594 33870623 1.000000 + . Parent=mRNA128 chr21 gth mRNA 33865911 33870645 . + . ID=mRNA129;Parent=gene17 chr21 gth exon 33865911 33865964 1.000000 + . Parent=mRNA129 chr21 . intron 33865965 33866726 . + . Parent=mRNA129 chr21 gth exon 33866727 33866806 1.000000 + . Parent=mRNA129 chr21 . intron 33866807 33867483 . + . Parent=mRNA129 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA129 chr21 . intron 33867632 33869771 . + . Parent=mRNA129 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA129 chr21 . intron 33869844 33869953 . + . Parent=mRNA129 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA129 chr21 . intron 33870070 33870540 . + . Parent=mRNA129 chr21 gth exon 33870541 33870645 1.000000 + . Parent=mRNA129 chr21 gth mRNA 33866389 33871657 . + . ID=mRNA130;Parent=gene17 chr21 gth exon 33866389 33866806 1.000000 + . Parent=mRNA130 chr21 . intron 33866807 33867483 . + . Parent=mRNA130 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA130 chr21 . intron 33867632 33869771 . + . Parent=mRNA130 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA130 chr21 . intron 33869844 33869953 . + . Parent=mRNA130 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA130 chr21 . intron 33870070 33870593 . + . Parent=mRNA130 chr21 gth exon 33870594 33871657 1.000000 + . Parent=mRNA130 chr21 gth mRNA 33866703 33871057 . + . ID=mRNA131;Parent=gene17 chr21 gth exon 33866703 33866806 1.000000 + . Parent=mRNA131 chr21 . intron 33866807 33867483 . + . Parent=mRNA131 chr21 gth exon 33867484 33867631 1.000000 + . Parent=mRNA131 chr21 . intron 33867632 33869771 . + . Parent=mRNA131 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA131 chr21 . intron 33869844 33869953 . + . Parent=mRNA131 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA131 chr21 . intron 33870070 33870540 . + . Parent=mRNA131 chr21 gth exon 33870541 33871057 1.000000 + . Parent=mRNA131 chr21 gth mRNA 33867201 33870692 . + . ID=mRNA132;Parent=gene17 chr21 gth exon 33867201 33867631 1.000000 + . Parent=mRNA132 chr21 . intron 33867632 33869771 . + . Parent=mRNA132 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA132 chr21 . intron 33869844 33869953 . + . Parent=mRNA132 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA132 chr21 . intron 33870070 33870540 . + . Parent=mRNA132 chr21 gth exon 33870541 33870692 1.000000 + . Parent=mRNA132 chr21 gth mRNA 33867390 33871158 . + . ID=mRNA133;Parent=gene17 chr21 gth exon 33867390 33867631 1.000000 + . Parent=mRNA133 chr21 . intron 33867632 33869771 . + . Parent=mRNA133 chr21 gth exon 33869772 33869843 1.000000 + . Parent=mRNA133 chr21 . intron 33869844 33869953 . + . Parent=mRNA133 chr21 gth exon 33869954 33870069 1.000000 + . Parent=mRNA133 chr21 . intron 33870070 33870593 . + . Parent=mRNA133 chr21 gth exon 33870594 33871158 1.000000 + . Parent=mRNA133 ### chr21 gth gene 33869653 34210154 . - . ID=gene18 chr21 gth mRNA 33869653 33882846 . - . ID=mRNA134;Parent=gene18 chr21 gth exon 33869653 33869984 1.000000 - . Parent=mRNA134 chr21 . intron 33869985 33872474 . - . Parent=mRNA134 chr21 gth exon 33872475 33872620 1.000000 - . Parent=mRNA134 chr21 . intron 33872621 33873525 . - . Parent=mRNA134 chr21 gth exon 33873526 33873738 1.000000 - . Parent=mRNA134 chr21 . intron 33873739 33875477 . - . Parent=mRNA134 chr21 gth exon 33875478 33875676 1.000000 - . Parent=mRNA134 chr21 . intron 33875677 33876126 . - . Parent=mRNA134 chr21 gth exon 33876127 33876231 1.000000 - . Parent=mRNA134 chr21 . intron 33876232 33876340 . - . Parent=mRNA134 chr21 gth exon 33876341 33876422 1.000000 - . Parent=mRNA134 chr21 . intron 33876423 33877663 . - . Parent=mRNA134 chr21 gth exon 33877664 33877842 1.000000 - . Parent=mRNA134 chr21 . intron 33877843 33878765 . - . Parent=mRNA134 chr21 gth exon 33878766 33878902 1.000000 - . Parent=mRNA134 chr21 . intron 33878903 33880153 . - . Parent=mRNA134 chr21 gth exon 33880154 33880357 1.000000 - . Parent=mRNA134 chr21 . intron 33880358 33881697 . - . Parent=mRNA134 chr21 gth exon 33881698 33881778 1.000000 - . Parent=mRNA134 chr21 . intron 33881779 33882496 . - . Parent=mRNA134 chr21 gth exon 33882497 33882846 1.000000 - . Parent=mRNA134 chr21 gth mRNA 33871737 33882822 . - . ID=mRNA135;Parent=gene18 chr21 gth exon 33871737 33872620 1.000000 - . Parent=mRNA135 chr21 . intron 33872621 33873525 . - . Parent=mRNA135 chr21 gth exon 33873526 33873738 1.000000 - . Parent=mRNA135 chr21 . intron 33873739 33875477 . - . Parent=mRNA135 chr21 gth exon 33875478 33875676 1.000000 - . Parent=mRNA135 chr21 . intron 33875677 33876126 . - . Parent=mRNA135 chr21 gth exon 33876127 33876231 1.000000 - . Parent=mRNA135 chr21 . intron 33876232 33876340 . - . Parent=mRNA135 chr21 gth exon 33876341 33876422 1.000000 - . Parent=mRNA135 chr21 . intron 33876423 33877663 . - . Parent=mRNA135 chr21 gth exon 33877664 33877842 1.000000 - . Parent=mRNA135 chr21 . intron 33877843 33880153 . - . Parent=mRNA135 chr21 gth exon 33880154 33880357 1.000000 - . Parent=mRNA135 chr21 . intron 33880358 33881697 . - . Parent=mRNA135 chr21 gth exon 33881698 33881778 1.000000 - . Parent=mRNA135 chr21 . intron 33881779 33882496 . - . Parent=mRNA135 chr21 gth exon 33882497 33882822 1.000000 - . Parent=mRNA135 chr21 gth mRNA 33872081 33889641 . - . ID=mRNA136;Parent=gene18 chr21 gth exon 33872081 33872620 1.000000 - . Parent=mRNA136 chr21 . intron 33872621 33873525 . - . Parent=mRNA136 chr21 gth exon 33873526 33873738 1.000000 - . Parent=mRNA136 chr21 . intron 33873739 33875477 . - . Parent=mRNA136 chr21 gth exon 33875478 33875676 1.000000 - . Parent=mRNA136 chr21 . intron 33875677 33876126 . - . Parent=mRNA136 chr21 gth exon 33876127 33876231 1.000000 - . Parent=mRNA136 chr21 . intron 33876232 33876340 . - . Parent=mRNA136 chr21 gth exon 33876341 33876422 1.000000 - . Parent=mRNA136 chr21 . intron 33876423 33877663 . - . Parent=mRNA136 chr21 gth exon 33877664 33877842 1.000000 - . Parent=mRNA136 chr21 . intron 33877843 33878765 . - . Parent=mRNA136 chr21 gth exon 33878766 33878944 1.000000 - . Parent=mRNA136 chr21 . intron 33878945 33880153 . - . Parent=mRNA136 chr21 gth exon 33880154 33880357 1.000000 - . Parent=mRNA136 chr21 . intron 33880358 33881697 . - . Parent=mRNA136 chr21 gth exon 33881698 33881778 1.000000 - . Parent=mRNA136 chr21 . intron 33881779 33882496 . - . Parent=mRNA136 chr21 gth exon 33882497 33883137 1.000000 - . Parent=mRNA136 chr21 . intron 33883138 33884016 . - . Parent=mRNA136 chr21 gth exon 33884017 33884097 1.000000 - . Parent=mRNA136 chr21 . intron 33884098 33885337 . - . Parent=mRNA136 chr21 gth exon 33885338 33885547 1.000000 - . Parent=mRNA136 chr21 . intron 33885548 33889531 . - . Parent=mRNA136 chr21 gth exon 33889532 33889641 1.000000 - . Parent=mRNA136 chr21 gth mRNA 33872093 33882846 . - . ID=mRNA137;Parent=gene18 chr21 gth exon 33872093 33872620 1.000000 - . Parent=mRNA137 chr21 . intron 33872621 33873525 . - . Parent=mRNA137 chr21 gth exon 33873526 33873738 1.000000 - . Parent=mRNA137 chr21 . intron 33873739 33875477 . - . Parent=mRNA137 chr21 gth exon 33875478 33875676 1.000000 - . Parent=mRNA137 chr21 . intron 33875677 33876126 . - . Parent=mRNA137 chr21 gth exon 33876127 33876231 1.000000 - . Parent=mRNA137 chr21 . intron 33876232 33876340 . - . Parent=mRNA137 chr21 gth exon 33876341 33876422 1.000000 - . Parent=mRNA137 chr21 . intron 33876423 33878765 . - . Parent=mRNA137 chr21 gth exon 33878766 33878944 1.000000 - . Parent=mRNA137 chr21 . intron 33878945 33880153 . - . Parent=mRNA137 chr21 gth exon 33880154 33880236 1.000000 - . Parent=mRNA137 chr21 . intron 33880237 33881697 . - . Parent=mRNA137 chr21 gth exon 33881698 33881778 1.000000 - . Parent=mRNA137 chr21 . intron 33881779 33882496 . - . Parent=mRNA137 chr21 gth exon 33882497 33882846 1.000000 - . Parent=mRNA137 chr21 gth mRNA 33872100 33873790 . - . ID=mRNA138;Parent=gene18 chr21 gth exon 33872100 33872620 1.000000 - . Parent=mRNA138 chr21 . intron 33872621 33873525 . - . Parent=mRNA138 chr21 gth exon 33873526 33873790 1.000000 - . Parent=mRNA138 chr21 gth mRNA 33872118 33881778 . - . ID=mRNA139;Parent=gene18 chr21 gth exon 33872118 33872620 1.000000 - . Parent=mRNA139 chr21 . intron 33872621 33873525 . - . Parent=mRNA139 chr21 gth exon 33873526 33873738 1.000000 - . Parent=mRNA139 chr21 . intron 33873739 33875477 . - . Parent=mRNA139 chr21 gth exon 33875478 33875676 1.000000 - . Parent=mRNA139 chr21 . intron 33875677 33876126 . - . Parent=mRNA139 chr21 gth exon 33876127 33876231 1.000000 - . Parent=mRNA139 chr21 . intron 33876232 33876340 . - . Parent=mRNA139 chr21 gth exon 33876341 33876422 1.000000 - . Parent=mRNA139 chr21 . intron 33876423 33878765 . - . Parent=mRNA139 chr21 gth exon 33878766 33878944 1.000000 - . Parent=mRNA139 chr21 . intron 33878945 33880153 . - . Parent=mRNA139 chr21 gth exon 33880154 33880357 1.000000 - . Parent=mRNA139 chr21 . intron 33880358 33881697 . - . Parent=mRNA139 chr21 gth exon 33881698 33881778 1.000000 - . Parent=mRNA139 chr21 gth mRNA 33872118 33881778 . - . ID=mRNA140;Parent=gene18 chr21 gth exon 33872118 33872620 1.000000 - . Parent=mRNA140 chr21 . intron 33872621 33873525 . - . Parent=mRNA140 chr21 gth exon 33873526 33873738 1.000000 - . Parent=mRNA140 chr21 . intron 33873739 33878765 . - . Parent=mRNA140 chr21 gth exon 33878766 33878944 1.000000 - . Parent=mRNA140 chr21 . intron 33878945 33880153 . - . Parent=mRNA140 chr21 gth exon 33880154 33880357 1.000000 - . Parent=mRNA140 chr21 . intron 33880358 33881697 . - . Parent=mRNA140 chr21 gth exon 33881698 33881778 1.000000 - . Parent=mRNA140 chr21 gth mRNA 33872377 33882810 . - . ID=mRNA141;Parent=gene18 chr21 gth exon 33872377 33872620 1.000000 - . Parent=mRNA141 chr21 . intron 33872621 33873525 . - . Parent=mRNA141 chr21 gth exon 33873526 33873738 1.000000 - . Parent=mRNA141 chr21 . intron 33873739 33875477 . - . Parent=mRNA141 chr21 gth exon 33875478 33875676 1.000000 - . Parent=mRNA141 chr21 . intron 33875677 33876126 . - . Parent=mRNA141 chr21 gth exon 33876127 33876231 1.000000 - . Parent=mRNA141 chr21 . intron 33876232 33876340 . - . Parent=mRNA141 chr21 gth exon 33876341 33876422 1.000000 - . Parent=mRNA141 chr21 . intron 33876423 33877663 . - . Parent=mRNA141 chr21 gth exon 33877664 33877842 1.000000 - . Parent=mRNA141 chr21 . intron 33877843 33878765 . - . Parent=mRNA141 chr21 gth exon 33878766 33878944 1.000000 - . Parent=mRNA141 chr21 . intron 33878945 33880153 . - . Parent=mRNA141 chr21 gth exon 33880154 33880357 1.000000 - . Parent=mRNA141 chr21 . intron 33880358 33882496 . - . Parent=mRNA141 chr21 gth exon 33882497 33882810 1.000000 - . Parent=mRNA141 chr21 gth mRNA 33873700 34206505 . - . ID=mRNA142;Parent=gene18 chr21 gth exon 33873700 33873738 1.000000 - . Parent=mRNA142 chr21 . intron 33873739 33875477 . - . Parent=mRNA142 chr21 gth exon 33875478 33875676 1.000000 - . Parent=mRNA142 chr21 . intron 33875677 33876126 . - . Parent=mRNA142 chr21 gth exon 33876127 33876231 1.000000 - . Parent=mRNA142 chr21 . intron 33876232 33878765 . - . Parent=mRNA142 chr21 gth exon 33878766 33878944 1.000000 - . Parent=mRNA142 chr21 . intron 33878945 33880153 . - . Parent=mRNA142 chr21 gth exon 33880154 33880357 1.000000 - . Parent=mRNA142 chr21 . intron 33880358 34201514 . - . Parent=mRNA142 chr21 gth exon 34201515 34201627 1.000000 - . Parent=mRNA142 chr21 . intron 34201628 34203255 . - . Parent=mRNA142 chr21 gth exon 34203256 34203385 1.000000 - . Parent=mRNA142 chr21 . intron 34203386 34206462 . - . Parent=mRNA142 chr21 gth exon 34206463 34206505 1.000000 - . Parent=mRNA142 chr21 gth mRNA 33875351 33876230 . - . ID=mRNA143;Parent=gene18 chr21 gth exon 33875351 33875676 1.000000 - . Parent=mRNA143 chr21 . intron 33875677 33876126 . - . Parent=mRNA143 chr21 gth exon 33876127 33876230 1.000000 - . Parent=mRNA143 chr21 gth mRNA 33883517 33935936 . - . ID=mRNA144;Parent=gene18 chr21 gth exon 33883517 33884097 1.000000 - . Parent=mRNA144 chr21 . intron 33884098 33885337 . - . Parent=mRNA144 chr21 gth exon 33885338 33885383 1.000000 - . Parent=mRNA144 chr21 . intron 33885384 33889906 . - . Parent=mRNA144 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA144 chr21 . intron 33890013 33891455 . - . Parent=mRNA144 chr21 gth exon 33891456 33891577 1.000000 - . Parent=mRNA144 chr21 . intron 33891578 33893325 . - . Parent=mRNA144 chr21 gth exon 33893326 33893424 1.000000 - . Parent=mRNA144 chr21 . intron 33893425 33896409 . - . Parent=mRNA144 chr21 gth exon 33896410 33896521 1.000000 - . Parent=mRNA144 chr21 . intron 33896522 33897579 . - . Parent=mRNA144 chr21 gth exon 33897580 33897713 1.000000 - . Parent=mRNA144 chr21 . intron 33897714 33907713 . - . Parent=mRNA144 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA144 chr21 . intron 33907783 33910881 . - . Parent=mRNA144 chr21 gth exon 33910882 33910926 1.000000 - . Parent=mRNA144 chr21 . intron 33910927 33916171 . - . Parent=mRNA144 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA144 chr21 . intron 33916245 33918858 . - . Parent=mRNA144 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA144 chr21 . intron 33918937 33925661 . - . Parent=mRNA144 chr21 gth exon 33925662 33925733 1.000000 - . Parent=mRNA144 chr21 . intron 33925734 33935856 . - . Parent=mRNA144 chr21 gth exon 33935857 33935936 1.000000 - . Parent=mRNA144 chr21 gth mRNA 33883562 33936094 . - . ID=mRNA145;Parent=gene18 chr21 gth exon 33883562 33884097 1.000000 - . Parent=mRNA145 chr21 . intron 33884098 33885337 . - . Parent=mRNA145 chr21 gth exon 33885338 33885383 1.000000 - . Parent=mRNA145 chr21 . intron 33885384 33889906 . - . Parent=mRNA145 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA145 chr21 . intron 33890013 33891455 . - . Parent=mRNA145 chr21 gth exon 33891456 33891577 1.000000 - . Parent=mRNA145 chr21 . intron 33891578 33893325 . - . Parent=mRNA145 chr21 gth exon 33893326 33893424 1.000000 - . Parent=mRNA145 chr21 . intron 33893425 33896409 . - . Parent=mRNA145 chr21 gth exon 33896410 33896521 1.000000 - . Parent=mRNA145 chr21 . intron 33896522 33897579 . - . Parent=mRNA145 chr21 gth exon 33897580 33897713 1.000000 - . Parent=mRNA145 chr21 . intron 33897714 33907713 . - . Parent=mRNA145 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA145 chr21 . intron 33907783 33916171 . - . Parent=mRNA145 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA145 chr21 . intron 33916245 33918858 . - . Parent=mRNA145 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA145 chr21 . intron 33918937 33925661 . - . Parent=mRNA145 chr21 gth exon 33925662 33925733 1.000000 - . Parent=mRNA145 chr21 . intron 33925734 33935856 . - . Parent=mRNA145 chr21 gth exon 33935857 33936094 1.000000 - . Parent=mRNA145 chr21 gth mRNA 33883637 33885894 . - . ID=mRNA146;Parent=gene18 chr21 gth exon 33883637 33884097 1.000000 - . Parent=mRNA146 chr21 . intron 33884098 33885337 . - . Parent=mRNA146 chr21 gth exon 33885338 33885894 1.000000 - . Parent=mRNA146 chr21 gth mRNA 33883643 33935923 . - . ID=mRNA147;Parent=gene18 chr21 gth exon 33883643 33884097 1.000000 - . Parent=mRNA147 chr21 . intron 33884098 33885337 . - . Parent=mRNA147 chr21 gth exon 33885338 33885387 1.000000 - . Parent=mRNA147 chr21 . intron 33885388 33889906 . - . Parent=mRNA147 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA147 chr21 . intron 33890013 33891455 . - . Parent=mRNA147 chr21 gth exon 33891456 33891577 1.000000 - . Parent=mRNA147 chr21 . intron 33891578 33893325 . - . Parent=mRNA147 chr21 gth exon 33893326 33893424 1.000000 - . Parent=mRNA147 chr21 . intron 33893425 33896409 . - . Parent=mRNA147 chr21 gth exon 33896410 33896521 1.000000 - . Parent=mRNA147 chr21 . intron 33896522 33897579 . - . Parent=mRNA147 chr21 gth exon 33897580 33897713 1.000000 - . Parent=mRNA147 chr21 . intron 33897714 33907713 . - . Parent=mRNA147 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA147 chr21 . intron 33907783 33910881 . - . Parent=mRNA147 chr21 gth exon 33910882 33910926 1.000000 - . Parent=mRNA147 chr21 . intron 33910927 33916171 . - . Parent=mRNA147 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA147 chr21 . intron 33916245 33918858 . - . Parent=mRNA147 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA147 chr21 . intron 33918937 33925661 . - . Parent=mRNA147 chr21 gth exon 33925662 33925733 1.000000 - . Parent=mRNA147 chr21 . intron 33925734 33935856 . - . Parent=mRNA147 chr21 gth exon 33935857 33935923 1.000000 - . Parent=mRNA147 chr21 gth mRNA 33883644 33911352 . - . ID=mRNA148;Parent=gene18 chr21 gth exon 33883644 33884097 1.000000 - . Parent=mRNA148 chr21 . intron 33884098 33885337 . - . Parent=mRNA148 chr21 gth exon 33885338 33885547 1.000000 - . Parent=mRNA148 chr21 . intron 33885548 33889531 . - . Parent=mRNA148 chr21 gth exon 33889532 33889790 1.000000 - . Parent=mRNA148 chr21 . intron 33889791 33889906 . - . Parent=mRNA148 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA148 chr21 . intron 33890013 33891455 . - . Parent=mRNA148 chr21 gth exon 33891456 33891577 1.000000 - . Parent=mRNA148 chr21 . intron 33891578 33893325 . - . Parent=mRNA148 chr21 gth exon 33893326 33893461 1.000000 - . Parent=mRNA148 chr21 . intron 33893462 33896409 . - . Parent=mRNA148 chr21 gth exon 33896410 33896521 1.000000 - . Parent=mRNA148 chr21 . intron 33896522 33897579 . - . Parent=mRNA148 chr21 gth exon 33897580 33897713 1.000000 - . Parent=mRNA148 chr21 . intron 33897714 33907713 . - . Parent=mRNA148 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA148 chr21 . intron 33907783 33910881 . - . Parent=mRNA148 chr21 gth exon 33910882 33911352 1.000000 - . Parent=mRNA148 chr21 gth mRNA 33883721 33891579 . - . ID=mRNA149;Parent=gene18 chr21 gth exon 33883721 33883981 1.000000 - . Parent=mRNA149 chr21 . intron 33883982 33885337 . - . Parent=mRNA149 chr21 gth exon 33885338 33885383 1.000000 - . Parent=mRNA149 chr21 . intron 33885384 33889906 . - . Parent=mRNA149 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA149 chr21 . intron 33890013 33891455 . - . Parent=mRNA149 chr21 gth exon 33891456 33891579 1.000000 - . Parent=mRNA149 chr21 gth mRNA 33883736 33891576 . - . ID=mRNA150;Parent=gene18 chr21 gth exon 33883736 33884097 1.000000 - . Parent=mRNA150 chr21 . intron 33884098 33885337 . - . Parent=mRNA150 chr21 gth exon 33885338 33885404 1.000000 - . Parent=mRNA150 chr21 . intron 33885405 33889906 . - . Parent=mRNA150 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA150 chr21 . intron 33890013 33891455 . - . Parent=mRNA150 chr21 gth exon 33891456 33891576 1.000000 - . Parent=mRNA150 chr21 gth mRNA 33883945 33896441 . - . ID=mRNA151;Parent=gene18 chr21 gth exon 33883945 33884097 1.000000 - . Parent=mRNA151 chr21 . intron 33884098 33885337 . - . Parent=mRNA151 chr21 gth exon 33885338 33885383 1.000000 - . Parent=mRNA151 chr21 . intron 33885384 33889906 . - . Parent=mRNA151 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA151 chr21 . intron 33890013 33891455 . - . Parent=mRNA151 chr21 gth exon 33891456 33891577 1.000000 - . Parent=mRNA151 chr21 . intron 33891578 33893325 . - . Parent=mRNA151 chr21 gth exon 33893326 33893461 1.000000 - . Parent=mRNA151 chr21 . intron 33893462 33896409 . - . Parent=mRNA151 chr21 gth exon 33896410 33896441 1.000000 - . Parent=mRNA151 chr21 gth mRNA 33888683 33935935 . - . ID=mRNA152;Parent=gene18 chr21 gth exon 33888683 33889790 1.000000 - . Parent=mRNA152 chr21 . intron 33889791 33889906 . - . Parent=mRNA152 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA152 chr21 . intron 33890013 33891455 . - . Parent=mRNA152 chr21 gth exon 33891456 33891577 1.000000 - . Parent=mRNA152 chr21 . intron 33891578 33893325 . - . Parent=mRNA152 chr21 gth exon 33893326 33893424 1.000000 - . Parent=mRNA152 chr21 . intron 33893425 33896409 . - . Parent=mRNA152 chr21 gth exon 33896410 33896521 1.000000 - . Parent=mRNA152 chr21 . intron 33896522 33897579 . - . Parent=mRNA152 chr21 gth exon 33897580 33897713 1.000000 - . Parent=mRNA152 chr21 . intron 33897714 33907713 . - . Parent=mRNA152 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA152 chr21 . intron 33907783 33910881 . - . Parent=mRNA152 chr21 gth exon 33910882 33910926 1.000000 - . Parent=mRNA152 chr21 . intron 33910927 33916171 . - . Parent=mRNA152 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA152 chr21 . intron 33916245 33918858 . - . Parent=mRNA152 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA152 chr21 . intron 33918937 33925661 . - . Parent=mRNA152 chr21 gth exon 33925662 33925733 1.000000 - . Parent=mRNA152 chr21 . intron 33925734 33935354 . - . Parent=mRNA152 chr21 gth exon 33935355 33935481 1.000000 - . Parent=mRNA152 chr21 . intron 33935482 33935856 . - . Parent=mRNA152 chr21 gth exon 33935857 33935935 1.000000 - . Parent=mRNA152 chr21 gth mRNA 33888819 33935917 . - . ID=mRNA153;Parent=gene18 chr21 gth exon 33888819 33889792 0.998973 - . Parent=mRNA153 chr21 . intron 33889793 33889906 . - . Parent=mRNA153 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA153 chr21 . intron 33890013 33891455 . - . Parent=mRNA153 chr21 gth exon 33891456 33891577 1.000000 - . Parent=mRNA153 chr21 . intron 33891578 33893325 . - . Parent=mRNA153 chr21 gth exon 33893326 33893461 1.000000 - . Parent=mRNA153 chr21 . intron 33893462 33896409 . - . Parent=mRNA153 chr21 gth exon 33896410 33896521 1.000000 - . Parent=mRNA153 chr21 . intron 33896522 33897579 . - . Parent=mRNA153 chr21 gth exon 33897580 33897713 1.000000 - . Parent=mRNA153 chr21 . intron 33897714 33907713 . - . Parent=mRNA153 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA153 chr21 . intron 33907783 33916171 . - . Parent=mRNA153 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA153 chr21 . intron 33916245 33918858 . - . Parent=mRNA153 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA153 chr21 . intron 33918937 33925661 . - . Parent=mRNA153 chr21 gth exon 33925662 33925733 1.000000 - . Parent=mRNA153 chr21 . intron 33925734 33935856 . - . Parent=mRNA153 chr21 gth exon 33935857 33935917 1.000000 - . Parent=mRNA153 chr21 gth mRNA 33888838 33936514 . - . ID=mRNA154;Parent=gene18 chr21 gth exon 33888838 33889790 1.000000 - . Parent=mRNA154 chr21 . intron 33889791 33889906 . - . Parent=mRNA154 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA154 chr21 . intron 33890013 33891455 . - . Parent=mRNA154 chr21 gth exon 33891456 33891577 1.000000 - . Parent=mRNA154 chr21 . intron 33891578 33893325 . - . Parent=mRNA154 chr21 gth exon 33893326 33893461 1.000000 - . Parent=mRNA154 chr21 . intron 33893462 33896409 . - . Parent=mRNA154 chr21 gth exon 33896410 33896521 1.000000 - . Parent=mRNA154 chr21 . intron 33896522 33897579 . - . Parent=mRNA154 chr21 gth exon 33897580 33897713 1.000000 - . Parent=mRNA154 chr21 . intron 33897714 33907713 . - . Parent=mRNA154 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA154 chr21 . intron 33907783 33910881 . - . Parent=mRNA154 chr21 gth exon 33910882 33910926 1.000000 - . Parent=mRNA154 chr21 . intron 33910927 33916171 . - . Parent=mRNA154 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA154 chr21 . intron 33916245 33918858 . - . Parent=mRNA154 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA154 chr21 . intron 33918937 33925661 . - . Parent=mRNA154 chr21 gth exon 33925662 33925733 1.000000 - . Parent=mRNA154 chr21 . intron 33925734 33935856 . - . Parent=mRNA154 chr21 gth exon 33935857 33936514 1.000000 - . Parent=mRNA154 chr21 gth mRNA 33889307 33927878 . - . ID=mRNA155;Parent=gene18 chr21 gth exon 33889307 33889704 1.000000 - . Parent=mRNA155 chr21 . intron 33889705 33891455 . - . Parent=mRNA155 chr21 gth exon 33891456 33891577 1.000000 - . Parent=mRNA155 chr21 . intron 33891578 33893325 . - . Parent=mRNA155 chr21 gth exon 33893326 33893424 1.000000 - . Parent=mRNA155 chr21 . intron 33893425 33896409 . - . Parent=mRNA155 chr21 gth exon 33896410 33896521 1.000000 - . Parent=mRNA155 chr21 . intron 33896522 33897579 . - . Parent=mRNA155 chr21 gth exon 33897580 33897713 1.000000 - . Parent=mRNA155 chr21 . intron 33897714 33907713 . - . Parent=mRNA155 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA155 chr21 . intron 33907783 33910881 . - . Parent=mRNA155 chr21 gth exon 33910882 33910926 1.000000 - . Parent=mRNA155 chr21 . intron 33910927 33916171 . - . Parent=mRNA155 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA155 chr21 . intron 33916245 33918858 . - . Parent=mRNA155 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA155 chr21 . intron 33918937 33925661 . - . Parent=mRNA155 chr21 gth exon 33925662 33925733 1.000000 - . Parent=mRNA155 chr21 . intron 33925734 33927821 . - . Parent=mRNA155 chr21 gth exon 33927822 33927878 1.000000 - . Parent=mRNA155 chr21 gth mRNA 33889513 33935921 . - . ID=mRNA156;Parent=gene18 chr21 gth exon 33889513 33889790 1.000000 - . Parent=mRNA156 chr21 . intron 33889791 33889906 . - . Parent=mRNA156 chr21 gth exon 33889907 33890012 1.000000 - . Parent=mRNA156 chr21 . intron 33890013 33893325 . - . Parent=mRNA156 chr21 gth exon 33893326 33893424 1.000000 - . Parent=mRNA156 chr21 . intron 33893425 33896409 . - . Parent=mRNA156 chr21 gth exon 33896410 33896521 1.000000 - . Parent=mRNA156 chr21 . intron 33896522 33897579 . - . Parent=mRNA156 chr21 gth exon 33897580 33897713 1.000000 - . Parent=mRNA156 chr21 . intron 33897714 33907713 . - . Parent=mRNA156 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA156 chr21 . intron 33907783 33910881 . - . Parent=mRNA156 chr21 gth exon 33910882 33910926 1.000000 - . Parent=mRNA156 chr21 . intron 33910927 33916171 . - . Parent=mRNA156 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA156 chr21 . intron 33916245 33918858 . - . Parent=mRNA156 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA156 chr21 . intron 33918937 33935856 . - . Parent=mRNA156 chr21 gth exon 33935857 33935921 1.000000 - . Parent=mRNA156 chr21 gth mRNA 33890238 33911352 . - . ID=mRNA157;Parent=gene18 chr21 gth exon 33890238 33890389 1.000000 - . Parent=mRNA157 chr21 . intron 33890390 33893325 . - . Parent=mRNA157 chr21 gth exon 33893326 33893424 1.000000 - . Parent=mRNA157 chr21 . intron 33893425 33896409 . - . Parent=mRNA157 chr21 gth exon 33896410 33896521 1.000000 - . Parent=mRNA157 chr21 . intron 33896522 33897579 . - . Parent=mRNA157 chr21 gth exon 33897580 33897713 1.000000 - . Parent=mRNA157 chr21 . intron 33897714 33907713 . - . Parent=mRNA157 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA157 chr21 . intron 33907783 33910881 . - . Parent=mRNA157 chr21 gth exon 33910882 33911352 1.000000 - . Parent=mRNA157 chr21 gth mRNA 33897332 33935896 . - . ID=mRNA158;Parent=gene18 chr21 gth exon 33897332 33897713 1.000000 - . Parent=mRNA158 chr21 . intron 33897714 33907713 . - . Parent=mRNA158 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA158 chr21 . intron 33907783 33910881 . - . Parent=mRNA158 chr21 gth exon 33910882 33910926 1.000000 - . Parent=mRNA158 chr21 . intron 33910927 33916171 . - . Parent=mRNA158 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA158 chr21 . intron 33916245 33918858 . - . Parent=mRNA158 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA158 chr21 . intron 33918937 33925661 . - . Parent=mRNA158 chr21 gth exon 33925662 33925733 1.000000 - . Parent=mRNA158 chr21 . intron 33925734 33935856 . - . Parent=mRNA158 chr21 gth exon 33935857 33935896 1.000000 - . Parent=mRNA158 chr21 gth mRNA 33897567 33935906 . - . ID=mRNA159;Parent=gene18 chr21 gth exon 33897567 33897713 0.952381 - . Parent=mRNA159 chr21 . intron 33897714 33907713 . - . Parent=mRNA159 chr21 gth exon 33907714 33907782 1.000000 - . Parent=mRNA159 chr21 . intron 33907783 33910881 . - . Parent=mRNA159 chr21 gth exon 33910882 33910926 1.000000 - . Parent=mRNA159 chr21 . intron 33910927 33916171 . - . Parent=mRNA159 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA159 chr21 . intron 33916245 33918858 . - . Parent=mRNA159 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA159 chr21 . intron 33918937 33925661 . - . Parent=mRNA159 chr21 gth exon 33925662 33925703 1.000000 - . Parent=mRNA159 chr21 . intron 33925704 33935856 . - . Parent=mRNA159 chr21 gth exon 33935857 33935906 1.000000 - . Parent=mRNA159 chr21 gth mRNA 33910463 33935898 . - . ID=mRNA160;Parent=gene18 chr21 gth exon 33910463 33910779 1.000000 - . Parent=mRNA160 chr21 . intron 33910780 33910881 . - . Parent=mRNA160 chr21 gth exon 33910882 33910926 1.000000 - . Parent=mRNA160 chr21 . intron 33910927 33916171 . - . Parent=mRNA160 chr21 gth exon 33916172 33916244 1.000000 - . Parent=mRNA160 chr21 . intron 33916245 33918858 . - . Parent=mRNA160 chr21 gth exon 33918859 33918936 1.000000 - . Parent=mRNA160 chr21 . intron 33918937 33925661 . - . Parent=mRNA160 chr21 gth exon 33925662 33925733 1.000000 - . Parent=mRNA160 chr21 . intron 33925734 33935856 . - . Parent=mRNA160 chr21 gth exon 33935857 33935898 1.000000 - . Parent=mRNA160 chr21 gth mRNA 33925669 33938102 . - . ID=mRNA161;Parent=gene18 chr21 gth exon 33925669 33925733 1.000000 - . Parent=mRNA161 chr21 . intron 33925734 33937547 . - . Parent=mRNA161 chr21 gth exon 33937548 33938102 1.000000 - . Parent=mRNA161 chr21 gth mRNA 33933921 33935897 . - . ID=mRNA162;Parent=gene18 chr21 gth exon 33933921 33934364 1.000000 - . Parent=mRNA162 chr21 . intron 33934365 33935354 . - . Parent=mRNA162 chr21 gth exon 33935355 33935481 1.000000 - . Parent=mRNA162 chr21 . intron 33935482 33935856 . - . Parent=mRNA162 chr21 gth exon 33935857 33935897 1.000000 - . Parent=mRNA162 chr21 gth mRNA 34197627 34199755 . - . ID=mRNA163;Parent=gene18 chr21 gth exon 34197627 34197813 1.000000 - . Parent=mRNA163 chr21 . intron 34197814 34198108 . - . Parent=mRNA163 chr21 gth exon 34198109 34198746 1.000000 - . Parent=mRNA163 chr21 . intron 34198747 34198853 . - . Parent=mRNA163 chr21 gth exon 34198854 34199755 0.998891 - . Parent=mRNA163 chr21 gth mRNA 34197627 34209935 . - . ID=mRNA164;Parent=gene18 chr21 gth exon 34197627 34197813 1.000000 - . Parent=mRNA164 chr21 . intron 34197814 34198108 . - . Parent=mRNA164 chr21 gth exon 34198109 34198195 1.000000 - . Parent=mRNA164 chr21 . intron 34198196 34201514 . - . Parent=mRNA164 chr21 gth exon 34201515 34201627 1.000000 - . Parent=mRNA164 chr21 . intron 34201628 34206462 . - . Parent=mRNA164 chr21 gth exon 34206463 34206573 1.000000 - . Parent=mRNA164 chr21 . intron 34206574 34208623 . - . Parent=mRNA164 chr21 gth exon 34208624 34208674 1.000000 - . Parent=mRNA164 chr21 . intron 34208675 34209901 . - . Parent=mRNA164 chr21 gth exon 34209902 34209935 1.000000 - . Parent=mRNA164 chr21 gth mRNA 34197627 34209942 . - . ID=mRNA165;Parent=gene18 chr21 gth exon 34197627 34197813 1.000000 - . Parent=mRNA165 chr21 . intron 34197814 34198108 . - . Parent=mRNA165 chr21 gth exon 34198109 34198195 1.000000 - . Parent=mRNA165 chr21 . intron 34198196 34200622 . - . Parent=mRNA165 chr21 gth exon 34200623 34201627 1.000000 - . Parent=mRNA165 chr21 . intron 34201628 34203255 . - . Parent=mRNA165 chr21 gth exon 34203256 34203385 1.000000 - . Parent=mRNA165 chr21 . intron 34203386 34206462 . - . Parent=mRNA165 chr21 gth exon 34206463 34206573 1.000000 - . Parent=mRNA165 chr21 . intron 34206574 34208623 . - . Parent=mRNA165 chr21 gth exon 34208624 34209942 1.000000 - . Parent=mRNA165 chr21 gth mRNA 34197627 34210154 . - . ID=mRNA166;Parent=gene18 chr21 gth exon 34197627 34197813 1.000000 - . Parent=mRNA166 chr21 . intron 34197814 34198108 . - . Parent=mRNA166 chr21 gth exon 34198109 34198195 1.000000 - . Parent=mRNA166 chr21 . intron 34198196 34201514 . - . Parent=mRNA166 chr21 gth exon 34201515 34201627 1.000000 - . Parent=mRNA166 chr21 . intron 34201628 34203255 . - . Parent=mRNA166 chr21 gth exon 34203256 34203385 1.000000 - . Parent=mRNA166 chr21 . intron 34203386 34206462 . - . Parent=mRNA166 chr21 gth exon 34206463 34206573 1.000000 - . Parent=mRNA166 chr21 . intron 34206574 34208623 . - . Parent=mRNA166 chr21 gth exon 34208624 34208674 1.000000 - . Parent=mRNA166 chr21 . intron 34208675 34209901 . - . Parent=mRNA166 chr21 gth exon 34209902 34210154 1.000000 - . Parent=mRNA166 chr21 gth mRNA 34197630 34201586 . - . ID=mRNA167;Parent=gene18 chr21 gth exon 34197630 34197813 1.000000 - . Parent=mRNA167 chr21 . intron 34197814 34198108 . - . Parent=mRNA167 chr21 gth exon 34198109 34198195 1.000000 - . Parent=mRNA167 chr21 . intron 34198196 34200622 . - . Parent=mRNA167 chr21 gth exon 34200623 34200674 1.000000 - . Parent=mRNA167 chr21 . intron 34200675 34200901 . - . Parent=mRNA167 chr21 gth exon 34200902 34200968 1.000000 - . Parent=mRNA167 chr21 . intron 34200969 34201514 . - . Parent=mRNA167 chr21 gth exon 34201515 34201586 1.000000 - . Parent=mRNA167 chr21 gth mRNA 34197630 34201627 . - . ID=mRNA168;Parent=gene18 chr21 gth exon 34197630 34197830 1.000000 - . Parent=mRNA168 chr21 . intron 34197831 34198108 . - . Parent=mRNA168 chr21 gth exon 34198109 34198195 1.000000 - . Parent=mRNA168 chr21 . intron 34198196 34201514 . - . Parent=mRNA168 chr21 gth exon 34201515 34201627 1.000000 - . Parent=mRNA168 chr21 gth mRNA 34202988 34209927 . - . ID=mRNA169;Parent=gene18 chr21 gth exon 34202988 34203385 1.000000 - . Parent=mRNA169 chr21 . intron 34203386 34206462 . - . Parent=mRNA169 chr21 gth exon 34206463 34206573 1.000000 - . Parent=mRNA169 chr21 . intron 34206574 34208623 . - . Parent=mRNA169 chr21 gth exon 34208624 34208674 1.000000 - . Parent=mRNA169 chr21 . intron 34208675 34209901 . - . Parent=mRNA169 chr21 gth exon 34209902 34209927 1.000000 - . Parent=mRNA169 chr21 gth mRNA 34206541 34209898 . - . ID=mRNA170;Parent=gene18 chr21 gth exon 34206541 34206573 1.000000 - . Parent=mRNA170 chr21 . intron 34206574 34208623 . - . Parent=mRNA170 chr21 gth exon 34208624 34208674 1.000000 - . Parent=mRNA170 chr21 . intron 34208675 34209309 . - . Parent=mRNA170 chr21 gth exon 34209310 34209898 1.000000 - . Parent=mRNA170 chr21 gth mRNA 34206552 34209953 . - . ID=mRNA171;Parent=gene18 chr21 gth exon 34206552 34206573 1.000000 - . Parent=mRNA171 chr21 . intron 34206574 34208623 . - . Parent=mRNA171 chr21 gth exon 34208624 34208674 1.000000 - . Parent=mRNA171 chr21 . intron 34208675 34209557 . - . Parent=mRNA171 chr21 gth exon 34209558 34209953 1.000000 - . Parent=mRNA171 ### chr21 gth gene 33936576 34194035 . + . ID=gene19 chr21 gth mRNA 33936576 34131192 . + . ID=mRNA172;Parent=gene19 chr21 gth exon 33936576 33936889 1.000000 + . Parent=mRNA172 chr21 . intron 33936890 34012971 . + . Parent=mRNA172 chr21 gth exon 34012972 34013031 1.000000 + . Parent=mRNA172 chr21 . intron 34013032 34015352 . + . Parent=mRNA172 chr21 gth exon 34015353 34015445 1.000000 + . Parent=mRNA172 chr21 . intron 34015446 34016762 . + . Parent=mRNA172 chr21 gth exon 34016763 34016826 1.000000 + . Parent=mRNA172 chr21 . intron 34016827 34029218 . + . Parent=mRNA172 chr21 gth exon 34029219 34029379 1.000000 + . Parent=mRNA172 chr21 . intron 34029380 34044428 . + . Parent=mRNA172 chr21 gth exon 34044429 34044497 1.000000 + . Parent=mRNA172 chr21 . intron 34044498 34045984 . + . Parent=mRNA172 chr21 gth exon 34045985 34046081 1.000000 + . Parent=mRNA172 chr21 . intron 34046082 34049471 . + . Parent=mRNA172 chr21 gth exon 34049472 34049572 1.000000 + . Parent=mRNA172 chr21 . intron 34049573 34056096 . + . Parent=mRNA172 chr21 gth exon 34056097 34056160 1.000000 + . Parent=mRNA172 chr21 . intron 34056161 34060048 . + . Parent=mRNA172 chr21 gth exon 34060049 34060186 1.000000 + . Parent=mRNA172 chr21 . intron 34060187 34061886 . + . Parent=mRNA172 chr21 gth exon 34061887 34062002 1.000000 + . Parent=mRNA172 chr21 . intron 34062003 34066234 . + . Parent=mRNA172 chr21 gth exon 34066235 34066497 1.000000 + . Parent=mRNA172 chr21 . intron 34066498 34068902 . + . Parent=mRNA172 chr21 gth exon 34068903 34069052 1.000000 + . Parent=mRNA172 chr21 . intron 34069053 34069141 . + . Parent=mRNA172 chr21 gth exon 34069142 34069282 1.000000 + . Parent=mRNA172 chr21 . intron 34069283 34075634 . + . Parent=mRNA172 chr21 gth exon 34075635 34075722 1.000000 + . Parent=mRNA172 chr21 . intron 34075723 34076167 . + . Parent=mRNA172 chr21 gth exon 34076168 34076307 1.000000 + . Parent=mRNA172 chr21 . intron 34076308 34088514 . + . Parent=mRNA172 chr21 gth exon 34088515 34088642 1.000000 + . Parent=mRNA172 chr21 . intron 34088643 34091552 . + . Parent=mRNA172 chr21 gth exon 34091553 34091782 1.000000 + . Parent=mRNA172 chr21 . intron 34091783 34093981 . + . Parent=mRNA172 chr21 gth exon 34093982 34094103 1.000000 + . Parent=mRNA172 chr21 . intron 34094104 34105148 . + . Parent=mRNA172 chr21 gth exon 34105149 34105396 1.000000 + . Parent=mRNA172 chr21 . intron 34105397 34108086 . + . Parent=mRNA172 chr21 gth exon 34108087 34108246 1.000000 + . Parent=mRNA172 chr21 . intron 34108247 34112440 . + . Parent=mRNA172 chr21 gth exon 34112441 34112646 1.000000 + . Parent=mRNA172 chr21 . intron 34112647 34113414 . + . Parent=mRNA172 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA172 chr21 . intron 34113498 34117660 . + . Parent=mRNA172 chr21 gth exon 34117661 34117827 1.000000 + . Parent=mRNA172 chr21 . intron 34117828 34120991 . + . Parent=mRNA172 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA172 chr21 . intron 34121038 34123797 . + . Parent=mRNA172 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA172 chr21 . intron 34123920 34128480 . + . Parent=mRNA172 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA172 chr21 . intron 34128599 34130614 . + . Parent=mRNA172 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA172 chr21 . intron 34130807 34131160 . + . Parent=mRNA172 chr21 gth exon 34131161 34131192 1.000000 + . Parent=mRNA172 chr21 gth mRNA 33936576 34132672 . + . ID=mRNA173;Parent=gene19 chr21 gth exon 33936576 33936889 1.000000 + . Parent=mRNA173 chr21 . intron 33936890 34012971 . + . Parent=mRNA173 chr21 gth exon 34012972 34013031 1.000000 + . Parent=mRNA173 chr21 . intron 34013032 34015352 . + . Parent=mRNA173 chr21 gth exon 34015353 34015445 1.000000 + . Parent=mRNA173 chr21 . intron 34015446 34016762 . + . Parent=mRNA173 chr21 gth exon 34016763 34016826 1.000000 + . Parent=mRNA173 chr21 . intron 34016827 34029218 . + . Parent=mRNA173 chr21 gth exon 34029219 34029379 1.000000 + . Parent=mRNA173 chr21 . intron 34029380 34044428 . + . Parent=mRNA173 chr21 gth exon 34044429 34044497 1.000000 + . Parent=mRNA173 chr21 . intron 34044498 34045984 . + . Parent=mRNA173 chr21 gth exon 34045985 34046081 1.000000 + . Parent=mRNA173 chr21 . intron 34046082 34049471 . + . Parent=mRNA173 chr21 gth exon 34049472 34049572 1.000000 + . Parent=mRNA173 chr21 . intron 34049573 34056096 . + . Parent=mRNA173 chr21 gth exon 34056097 34056160 1.000000 + . Parent=mRNA173 chr21 . intron 34056161 34060048 . + . Parent=mRNA173 chr21 gth exon 34060049 34060186 1.000000 + . Parent=mRNA173 chr21 . intron 34060187 34061886 . + . Parent=mRNA173 chr21 gth exon 34061887 34062002 1.000000 + . Parent=mRNA173 chr21 . intron 34062003 34066234 . + . Parent=mRNA173 chr21 gth exon 34066235 34066497 1.000000 + . Parent=mRNA173 chr21 . intron 34066498 34068902 . + . Parent=mRNA173 chr21 gth exon 34068903 34069052 1.000000 + . Parent=mRNA173 chr21 . intron 34069053 34069141 . + . Parent=mRNA173 chr21 gth exon 34069142 34069282 1.000000 + . Parent=mRNA173 chr21 . intron 34069283 34075634 . + . Parent=mRNA173 chr21 gth exon 34075635 34075722 1.000000 + . Parent=mRNA173 chr21 . intron 34075723 34076167 . + . Parent=mRNA173 chr21 gth exon 34076168 34076307 1.000000 + . Parent=mRNA173 chr21 . intron 34076308 34088514 . + . Parent=mRNA173 chr21 gth exon 34088515 34088642 1.000000 + . Parent=mRNA173 chr21 . intron 34088643 34091552 . + . Parent=mRNA173 chr21 gth exon 34091553 34091782 1.000000 + . Parent=mRNA173 chr21 . intron 34091783 34093981 . + . Parent=mRNA173 chr21 gth exon 34093982 34094103 1.000000 + . Parent=mRNA173 chr21 . intron 34094104 34105148 . + . Parent=mRNA173 chr21 gth exon 34105149 34105396 1.000000 + . Parent=mRNA173 chr21 . intron 34105397 34108086 . + . Parent=mRNA173 chr21 gth exon 34108087 34108246 1.000000 + . Parent=mRNA173 chr21 . intron 34108247 34112440 . + . Parent=mRNA173 chr21 gth exon 34112441 34112646 1.000000 + . Parent=mRNA173 chr21 . intron 34112647 34113414 . + . Parent=mRNA173 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA173 chr21 . intron 34113498 34123797 . + . Parent=mRNA173 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA173 chr21 . intron 34123920 34128480 . + . Parent=mRNA173 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA173 chr21 . intron 34128599 34130614 . + . Parent=mRNA173 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA173 chr21 . intron 34130807 34131160 . + . Parent=mRNA173 chr21 gth exon 34131161 34131197 1.000000 + . Parent=mRNA173 chr21 . intron 34131198 34131419 . + . Parent=mRNA173 chr21 gth exon 34131420 34132672 1.000000 + . Parent=mRNA173 chr21 gth mRNA 33936628 34036947 . + . ID=mRNA174;Parent=gene19 chr21 gth exon 33936628 33936889 1.000000 + . Parent=mRNA174 chr21 . intron 33936890 33983496 . + . Parent=mRNA174 chr21 gth exon 33983497 33983558 1.000000 + . Parent=mRNA174 chr21 . intron 33983559 34010605 . + . Parent=mRNA174 chr21 gth exon 34010606 34010730 1.000000 + . Parent=mRNA174 chr21 . intron 34010731 34012971 . + . Parent=mRNA174 chr21 gth exon 34012972 34013031 1.000000 + . Parent=mRNA174 chr21 . intron 34013032 34015352 . + . Parent=mRNA174 chr21 gth exon 34015353 34015445 1.000000 + . Parent=mRNA174 chr21 . intron 34015446 34016762 . + . Parent=mRNA174 chr21 gth exon 34016763 34016826 1.000000 + . Parent=mRNA174 chr21 . intron 34016827 34029218 . + . Parent=mRNA174 chr21 gth exon 34029219 34030908 1.000000 + . Parent=mRNA174 chr21 . intron 34030909 34034991 . + . Parent=mRNA174 chr21 gth exon 34034992 34035796 1.000000 + . Parent=mRNA174 chr21 . intron 34035797 34036516 . + . Parent=mRNA174 chr21 gth exon 34036517 34036947 1.000000 + . Parent=mRNA174 chr21 gth mRNA 33936629 34016166 . + . ID=mRNA175;Parent=gene19 chr21 gth exon 33936629 33936889 1.000000 + . Parent=mRNA175 chr21 . intron 33936890 34012971 . + . Parent=mRNA175 chr21 gth exon 34012972 34013031 1.000000 + . Parent=mRNA175 chr21 . intron 34013032 34015352 . + . Parent=mRNA175 chr21 gth exon 34015353 34015445 1.000000 + . Parent=mRNA175 chr21 . intron 34015446 34016106 . + . Parent=mRNA175 chr21 gth exon 34016107 34016166 1.000000 + . Parent=mRNA175 chr21 gth mRNA 33936634 34194035 . + . ID=mRNA176;Parent=gene19 chr21 gth exon 33936634 33936889 1.000000 + . Parent=mRNA176 chr21 . intron 33936890 34012971 . + . Parent=mRNA176 chr21 gth exon 34012972 34013031 1.000000 + . Parent=mRNA176 chr21 . intron 34013032 34015352 . + . Parent=mRNA176 chr21 gth exon 34015353 34015445 1.000000 + . Parent=mRNA176 chr21 . intron 34015446 34016762 . + . Parent=mRNA176 chr21 gth exon 34016763 34016826 1.000000 + . Parent=mRNA176 chr21 . intron 34016827 34029218 . + . Parent=mRNA176 chr21 gth exon 34029219 34029379 1.000000 + . Parent=mRNA176 chr21 . intron 34029380 34044317 . + . Parent=mRNA176 chr21 gth exon 34044318 34044497 1.000000 + . Parent=mRNA176 chr21 . intron 34044498 34045984 . + . Parent=mRNA176 chr21 gth exon 34045985 34046081 1.000000 + . Parent=mRNA176 chr21 . intron 34046082 34049471 . + . Parent=mRNA176 chr21 gth exon 34049472 34049572 1.000000 + . Parent=mRNA176 chr21 . intron 34049573 34056096 . + . Parent=mRNA176 chr21 gth exon 34056097 34056160 1.000000 + . Parent=mRNA176 chr21 . intron 34056161 34060048 . + . Parent=mRNA176 chr21 gth exon 34060049 34060186 1.000000 + . Parent=mRNA176 chr21 . intron 34060187 34061886 . + . Parent=mRNA176 chr21 gth exon 34061887 34062002 1.000000 + . Parent=mRNA176 chr21 . intron 34062003 34066234 . + . Parent=mRNA176 chr21 gth exon 34066235 34066497 1.000000 + . Parent=mRNA176 chr21 . intron 34066498 34068902 . + . Parent=mRNA176 chr21 gth exon 34068903 34069052 1.000000 + . Parent=mRNA176 chr21 . intron 34069053 34069141 . + . Parent=mRNA176 chr21 gth exon 34069142 34069282 1.000000 + . Parent=mRNA176 chr21 . intron 34069283 34075634 . + . Parent=mRNA176 chr21 gth exon 34075635 34075722 1.000000 + . Parent=mRNA176 chr21 . intron 34075723 34076167 . + . Parent=mRNA176 chr21 gth exon 34076168 34076307 1.000000 + . Parent=mRNA176 chr21 . intron 34076308 34088514 . + . Parent=mRNA176 chr21 gth exon 34088515 34088642 1.000000 + . Parent=mRNA176 chr21 . intron 34088643 34091552 . + . Parent=mRNA176 chr21 gth exon 34091553 34091782 1.000000 + . Parent=mRNA176 chr21 . intron 34091783 34093981 . + . Parent=mRNA176 chr21 gth exon 34093982 34094118 0.927007 + . Parent=mRNA176 chr21 . intron 34094119 34105148 . + . Parent=mRNA176 chr21 gth exon 34105149 34105396 1.000000 + . Parent=mRNA176 chr21 . intron 34105397 34108086 . + . Parent=mRNA176 chr21 gth exon 34108087 34108246 1.000000 + . Parent=mRNA176 chr21 . intron 34108247 34112440 . + . Parent=mRNA176 chr21 gth exon 34112441 34112646 1.000000 + . Parent=mRNA176 chr21 . intron 34112647 34113414 . + . Parent=mRNA176 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA176 chr21 . intron 34113498 34117660 . + . Parent=mRNA176 chr21 gth exon 34117661 34117827 1.000000 + . Parent=mRNA176 chr21 . intron 34117828 34120991 . + . Parent=mRNA176 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA176 chr21 . intron 34121038 34123797 . + . Parent=mRNA176 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA176 chr21 . intron 34123920 34128480 . + . Parent=mRNA176 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA176 chr21 . intron 34128599 34130614 . + . Parent=mRNA176 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA176 chr21 . intron 34130807 34150909 . + . Parent=mRNA176 chr21 gth exon 34150910 34151031 1.000000 + . Parent=mRNA176 chr21 . intron 34151032 34152859 . + . Parent=mRNA176 chr21 gth exon 34152860 34152966 1.000000 + . Parent=mRNA176 chr21 . intron 34152967 34159324 . + . Parent=mRNA176 chr21 gth exon 34159325 34159508 1.000000 + . Parent=mRNA176 chr21 . intron 34159509 34161406 . + . Parent=mRNA176 chr21 gth exon 34161407 34161505 1.000000 + . Parent=mRNA176 chr21 . intron 34161506 34169527 . + . Parent=mRNA176 chr21 gth exon 34169528 34169695 1.000000 + . Parent=mRNA176 chr21 . intron 34169696 34176416 . + . Parent=mRNA176 chr21 gth exon 34176417 34176629 1.000000 + . Parent=mRNA176 chr21 . intron 34176630 34177723 . + . Parent=mRNA176 chr21 gth exon 34177724 34177845 1.000000 + . Parent=mRNA176 chr21 . intron 34177846 34179214 . + . Parent=mRNA176 chr21 gth exon 34179215 34179297 1.000000 + . Parent=mRNA176 chr21 . intron 34179298 34179612 . + . Parent=mRNA176 chr21 gth exon 34179613 34179696 1.000000 + . Parent=mRNA176 chr21 . intron 34179697 34180460 . + . Parent=mRNA176 chr21 gth exon 34180461 34180634 1.000000 + . Parent=mRNA176 chr21 . intron 34180635 34182325 . + . Parent=mRNA176 chr21 gth exon 34182326 34194035 1.000000 + . Parent=mRNA176 chr21 gth mRNA 33936654 34132668 . + . ID=mRNA177;Parent=gene19 chr21 gth exon 33936654 33936889 1.000000 + . Parent=mRNA177 chr21 . intron 33936890 34012971 . + . Parent=mRNA177 chr21 gth exon 34012972 34013031 1.000000 + . Parent=mRNA177 chr21 . intron 34013032 34015352 . + . Parent=mRNA177 chr21 gth exon 34015353 34015445 1.000000 + . Parent=mRNA177 chr21 . intron 34015446 34016762 . + . Parent=mRNA177 chr21 gth exon 34016763 34016826 1.000000 + . Parent=mRNA177 chr21 . intron 34016827 34029218 . + . Parent=mRNA177 chr21 gth exon 34029219 34029379 1.000000 + . Parent=mRNA177 chr21 . intron 34029380 34044317 . + . Parent=mRNA177 chr21 gth exon 34044318 34044497 1.000000 + . Parent=mRNA177 chr21 . intron 34044498 34045984 . + . Parent=mRNA177 chr21 gth exon 34045985 34046081 1.000000 + . Parent=mRNA177 chr21 . intron 34046082 34049471 . + . Parent=mRNA177 chr21 gth exon 34049472 34049572 1.000000 + . Parent=mRNA177 chr21 . intron 34049573 34056096 . + . Parent=mRNA177 chr21 gth exon 34056097 34056160 1.000000 + . Parent=mRNA177 chr21 . intron 34056161 34060048 . + . Parent=mRNA177 chr21 gth exon 34060049 34060186 1.000000 + . Parent=mRNA177 chr21 . intron 34060187 34061886 . + . Parent=mRNA177 chr21 gth exon 34061887 34062002 1.000000 + . Parent=mRNA177 chr21 . intron 34062003 34066234 . + . Parent=mRNA177 chr21 gth exon 34066235 34066497 1.000000 + . Parent=mRNA177 chr21 . intron 34066498 34068902 . + . Parent=mRNA177 chr21 gth exon 34068903 34069052 1.000000 + . Parent=mRNA177 chr21 . intron 34069053 34069141 . + . Parent=mRNA177 chr21 gth exon 34069142 34069282 1.000000 + . Parent=mRNA177 chr21 . intron 34069283 34075634 . + . Parent=mRNA177 chr21 gth exon 34075635 34075722 1.000000 + . Parent=mRNA177 chr21 . intron 34075723 34076167 . + . Parent=mRNA177 chr21 gth exon 34076168 34076307 1.000000 + . Parent=mRNA177 chr21 . intron 34076308 34088514 . + . Parent=mRNA177 chr21 gth exon 34088515 34088642 1.000000 + . Parent=mRNA177 chr21 . intron 34088643 34091552 . + . Parent=mRNA177 chr21 gth exon 34091553 34091782 1.000000 + . Parent=mRNA177 chr21 . intron 34091783 34093981 . + . Parent=mRNA177 chr21 gth exon 34093982 34094118 0.927007 + . Parent=mRNA177 chr21 . intron 34094119 34105148 . + . Parent=mRNA177 chr21 gth exon 34105149 34105396 1.000000 + . Parent=mRNA177 chr21 . intron 34105397 34108086 . + . Parent=mRNA177 chr21 gth exon 34108087 34108246 1.000000 + . Parent=mRNA177 chr21 . intron 34108247 34112440 . + . Parent=mRNA177 chr21 gth exon 34112441 34112646 1.000000 + . Parent=mRNA177 chr21 . intron 34112647 34113414 . + . Parent=mRNA177 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA177 chr21 . intron 34113498 34117660 . + . Parent=mRNA177 chr21 gth exon 34117661 34117827 1.000000 + . Parent=mRNA177 chr21 . intron 34117828 34120991 . + . Parent=mRNA177 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA177 chr21 . intron 34121038 34123797 . + . Parent=mRNA177 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA177 chr21 . intron 34123920 34128480 . + . Parent=mRNA177 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA177 chr21 . intron 34128599 34130614 . + . Parent=mRNA177 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA177 chr21 . intron 34130807 34131160 . + . Parent=mRNA177 chr21 gth exon 34131161 34132668 1.000000 + . Parent=mRNA177 chr21 gth mRNA 33936659 34182782 . + . ID=mRNA178;Parent=gene19 chr21 gth exon 33936659 33936889 1.000000 + . Parent=mRNA178 chr21 . intron 33936890 34012971 . + . Parent=mRNA178 chr21 gth exon 34012972 34013031 1.000000 + . Parent=mRNA178 chr21 . intron 34013032 34015352 . + . Parent=mRNA178 chr21 gth exon 34015353 34015445 1.000000 + . Parent=mRNA178 chr21 . intron 34015446 34016762 . + . Parent=mRNA178 chr21 gth exon 34016763 34016826 1.000000 + . Parent=mRNA178 chr21 . intron 34016827 34029218 . + . Parent=mRNA178 chr21 gth exon 34029219 34029379 1.000000 + . Parent=mRNA178 chr21 . intron 34029380 34044317 . + . Parent=mRNA178 chr21 gth exon 34044318 34044497 1.000000 + . Parent=mRNA178 chr21 . intron 34044498 34045984 . + . Parent=mRNA178 chr21 gth exon 34045985 34046081 1.000000 + . Parent=mRNA178 chr21 . intron 34046082 34049471 . + . Parent=mRNA178 chr21 gth exon 34049472 34049572 1.000000 + . Parent=mRNA178 chr21 . intron 34049573 34056096 . + . Parent=mRNA178 chr21 gth exon 34056097 34056160 1.000000 + . Parent=mRNA178 chr21 . intron 34056161 34060048 . + . Parent=mRNA178 chr21 gth exon 34060049 34060186 1.000000 + . Parent=mRNA178 chr21 . intron 34060187 34061886 . + . Parent=mRNA178 chr21 gth exon 34061887 34062002 1.000000 + . Parent=mRNA178 chr21 . intron 34062003 34066234 . + . Parent=mRNA178 chr21 gth exon 34066235 34066497 1.000000 + . Parent=mRNA178 chr21 . intron 34066498 34068902 . + . Parent=mRNA178 chr21 gth exon 34068903 34069052 1.000000 + . Parent=mRNA178 chr21 . intron 34069053 34069141 . + . Parent=mRNA178 chr21 gth exon 34069142 34069282 1.000000 + . Parent=mRNA178 chr21 . intron 34069283 34075634 . + . Parent=mRNA178 chr21 gth exon 34075635 34075722 1.000000 + . Parent=mRNA178 chr21 . intron 34075723 34076167 . + . Parent=mRNA178 chr21 gth exon 34076168 34076307 1.000000 + . Parent=mRNA178 chr21 . intron 34076308 34088514 . + . Parent=mRNA178 chr21 gth exon 34088515 34088642 1.000000 + . Parent=mRNA178 chr21 . intron 34088643 34091552 . + . Parent=mRNA178 chr21 gth exon 34091553 34091782 1.000000 + . Parent=mRNA178 chr21 . intron 34091783 34093981 . + . Parent=mRNA178 chr21 gth exon 34093982 34094103 1.000000 + . Parent=mRNA178 chr21 . intron 34094104 34105148 . + . Parent=mRNA178 chr21 gth exon 34105149 34105396 1.000000 + . Parent=mRNA178 chr21 . intron 34105397 34108086 . + . Parent=mRNA178 chr21 gth exon 34108087 34108246 1.000000 + . Parent=mRNA178 chr21 . intron 34108247 34112440 . + . Parent=mRNA178 chr21 gth exon 34112441 34112646 1.000000 + . Parent=mRNA178 chr21 . intron 34112647 34113414 . + . Parent=mRNA178 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA178 chr21 . intron 34113498 34117660 . + . Parent=mRNA178 chr21 gth exon 34117661 34117827 1.000000 + . Parent=mRNA178 chr21 . intron 34117828 34120991 . + . Parent=mRNA178 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA178 chr21 . intron 34121038 34123797 . + . Parent=mRNA178 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA178 chr21 . intron 34123920 34128480 . + . Parent=mRNA178 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA178 chr21 . intron 34128599 34130614 . + . Parent=mRNA178 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA178 chr21 . intron 34130807 34150909 . + . Parent=mRNA178 chr21 gth exon 34150910 34151031 1.000000 + . Parent=mRNA178 chr21 . intron 34151032 34152859 . + . Parent=mRNA178 chr21 gth exon 34152860 34152966 1.000000 + . Parent=mRNA178 chr21 . intron 34152967 34159324 . + . Parent=mRNA178 chr21 gth exon 34159325 34159508 1.000000 + . Parent=mRNA178 chr21 . intron 34159509 34161406 . + . Parent=mRNA178 chr21 gth exon 34161407 34161505 1.000000 + . Parent=mRNA178 chr21 . intron 34161506 34169527 . + . Parent=mRNA178 chr21 gth exon 34169528 34169695 1.000000 + . Parent=mRNA178 chr21 . intron 34169696 34176416 . + . Parent=mRNA178 chr21 gth exon 34176417 34176629 1.000000 + . Parent=mRNA178 chr21 . intron 34176630 34177723 . + . Parent=mRNA178 chr21 gth exon 34177724 34177845 1.000000 + . Parent=mRNA178 chr21 . intron 34177846 34179214 . + . Parent=mRNA178 chr21 gth exon 34179215 34179297 1.000000 + . Parent=mRNA178 chr21 . intron 34179298 34179612 . + . Parent=mRNA178 chr21 gth exon 34179613 34179696 1.000000 + . Parent=mRNA178 chr21 . intron 34179697 34180460 . + . Parent=mRNA178 chr21 gth exon 34180461 34180634 1.000000 + . Parent=mRNA178 chr21 . intron 34180635 34182325 . + . Parent=mRNA178 chr21 gth exon 34182326 34182782 1.000000 + . Parent=mRNA178 chr21 gth mRNA 33936672 34132672 . + . ID=mRNA179;Parent=gene19 chr21 gth exon 33936672 33936889 1.000000 + . Parent=mRNA179 chr21 . intron 33936890 34012971 . + . Parent=mRNA179 chr21 gth exon 34012972 34013031 1.000000 + . Parent=mRNA179 chr21 . intron 34013032 34015352 . + . Parent=mRNA179 chr21 gth exon 34015353 34015445 1.000000 + . Parent=mRNA179 chr21 . intron 34015446 34016762 . + . Parent=mRNA179 chr21 gth exon 34016763 34016826 1.000000 + . Parent=mRNA179 chr21 . intron 34016827 34029218 . + . Parent=mRNA179 chr21 gth exon 34029219 34029379 1.000000 + . Parent=mRNA179 chr21 . intron 34029380 34044317 . + . Parent=mRNA179 chr21 gth exon 34044318 34044497 1.000000 + . Parent=mRNA179 chr21 . intron 34044498 34045984 . + . Parent=mRNA179 chr21 gth exon 34045985 34046081 1.000000 + . Parent=mRNA179 chr21 . intron 34046082 34049471 . + . Parent=mRNA179 chr21 gth exon 34049472 34049572 1.000000 + . Parent=mRNA179 chr21 . intron 34049573 34056096 . + . Parent=mRNA179 chr21 gth exon 34056097 34056160 1.000000 + . Parent=mRNA179 chr21 . intron 34056161 34060048 . + . Parent=mRNA179 chr21 gth exon 34060049 34060186 1.000000 + . Parent=mRNA179 chr21 . intron 34060187 34061886 . + . Parent=mRNA179 chr21 gth exon 34061887 34062002 1.000000 + . Parent=mRNA179 chr21 . intron 34062003 34066234 . + . Parent=mRNA179 chr21 gth exon 34066235 34066497 1.000000 + . Parent=mRNA179 chr21 . intron 34066498 34068902 . + . Parent=mRNA179 chr21 gth exon 34068903 34069052 1.000000 + . Parent=mRNA179 chr21 . intron 34069053 34069141 . + . Parent=mRNA179 chr21 gth exon 34069142 34069282 1.000000 + . Parent=mRNA179 chr21 . intron 34069283 34075634 . + . Parent=mRNA179 chr21 gth exon 34075635 34075722 1.000000 + . Parent=mRNA179 chr21 . intron 34075723 34076167 . + . Parent=mRNA179 chr21 gth exon 34076168 34076307 1.000000 + . Parent=mRNA179 chr21 . intron 34076308 34088514 . + . Parent=mRNA179 chr21 gth exon 34088515 34088642 1.000000 + . Parent=mRNA179 chr21 . intron 34088643 34091552 . + . Parent=mRNA179 chr21 gth exon 34091553 34091782 1.000000 + . Parent=mRNA179 chr21 . intron 34091783 34093981 . + . Parent=mRNA179 chr21 gth exon 34093982 34094103 1.000000 + . Parent=mRNA179 chr21 . intron 34094104 34105148 . + . Parent=mRNA179 chr21 gth exon 34105149 34105396 1.000000 + . Parent=mRNA179 chr21 . intron 34105397 34108086 . + . Parent=mRNA179 chr21 gth exon 34108087 34108246 1.000000 + . Parent=mRNA179 chr21 . intron 34108247 34112440 . + . Parent=mRNA179 chr21 gth exon 34112441 34112646 1.000000 + . Parent=mRNA179 chr21 . intron 34112647 34113414 . + . Parent=mRNA179 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA179 chr21 . intron 34113498 34117660 . + . Parent=mRNA179 chr21 gth exon 34117661 34117827 1.000000 + . Parent=mRNA179 chr21 . intron 34117828 34120991 . + . Parent=mRNA179 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA179 chr21 . intron 34121038 34123797 . + . Parent=mRNA179 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA179 chr21 . intron 34123920 34128480 . + . Parent=mRNA179 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA179 chr21 . intron 34128599 34130614 . + . Parent=mRNA179 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA179 chr21 . intron 34130807 34131160 . + . Parent=mRNA179 chr21 gth exon 34131161 34132672 1.000000 + . Parent=mRNA179 chr21 gth mRNA 33936674 34132670 . + . ID=mRNA180;Parent=gene19 chr21 gth exon 33936674 33936889 1.000000 + . Parent=mRNA180 chr21 . intron 33936890 34012971 . + . Parent=mRNA180 chr21 gth exon 34012972 34013031 1.000000 + . Parent=mRNA180 chr21 . intron 34013032 34015352 . + . Parent=mRNA180 chr21 gth exon 34015353 34015445 1.000000 + . Parent=mRNA180 chr21 . intron 34015446 34016762 . + . Parent=mRNA180 chr21 gth exon 34016763 34016826 1.000000 + . Parent=mRNA180 chr21 . intron 34016827 34029218 . + . Parent=mRNA180 chr21 gth exon 34029219 34029379 1.000000 + . Parent=mRNA180 chr21 . intron 34029380 34044317 . + . Parent=mRNA180 chr21 gth exon 34044318 34044497 1.000000 + . Parent=mRNA180 chr21 . intron 34044498 34045984 . + . Parent=mRNA180 chr21 gth exon 34045985 34046081 1.000000 + . Parent=mRNA180 chr21 . intron 34046082 34049471 . + . Parent=mRNA180 chr21 gth exon 34049472 34049572 1.000000 + . Parent=mRNA180 chr21 . intron 34049573 34056096 . + . Parent=mRNA180 chr21 gth exon 34056097 34056160 1.000000 + . Parent=mRNA180 chr21 . intron 34056161 34060048 . + . Parent=mRNA180 chr21 gth exon 34060049 34060186 1.000000 + . Parent=mRNA180 chr21 . intron 34060187 34061886 . + . Parent=mRNA180 chr21 gth exon 34061887 34062002 1.000000 + . Parent=mRNA180 chr21 . intron 34062003 34066234 . + . Parent=mRNA180 chr21 gth exon 34066235 34066497 1.000000 + . Parent=mRNA180 chr21 . intron 34066498 34068902 . + . Parent=mRNA180 chr21 gth exon 34068903 34069052 1.000000 + . Parent=mRNA180 chr21 . intron 34069053 34069141 . + . Parent=mRNA180 chr21 gth exon 34069142 34069282 1.000000 + . Parent=mRNA180 chr21 . intron 34069283 34075634 . + . Parent=mRNA180 chr21 gth exon 34075635 34075722 1.000000 + . Parent=mRNA180 chr21 . intron 34075723 34076167 . + . Parent=mRNA180 chr21 gth exon 34076168 34076307 1.000000 + . Parent=mRNA180 chr21 . intron 34076308 34088514 . + . Parent=mRNA180 chr21 gth exon 34088515 34088642 1.000000 + . Parent=mRNA180 chr21 . intron 34088643 34091552 . + . Parent=mRNA180 chr21 gth exon 34091553 34091782 1.000000 + . Parent=mRNA180 chr21 . intron 34091783 34093981 . + . Parent=mRNA180 chr21 gth exon 34093982 34094103 1.000000 + . Parent=mRNA180 chr21 . intron 34094104 34105148 . + . Parent=mRNA180 chr21 gth exon 34105149 34105396 1.000000 + . Parent=mRNA180 chr21 . intron 34105397 34108086 . + . Parent=mRNA180 chr21 gth exon 34108087 34108246 1.000000 + . Parent=mRNA180 chr21 . intron 34108247 34112440 . + . Parent=mRNA180 chr21 gth exon 34112441 34112646 1.000000 + . Parent=mRNA180 chr21 . intron 34112647 34113414 . + . Parent=mRNA180 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA180 chr21 . intron 34113498 34123797 . + . Parent=mRNA180 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA180 chr21 . intron 34123920 34128480 . + . Parent=mRNA180 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA180 chr21 . intron 34128599 34130614 . + . Parent=mRNA180 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA180 chr21 . intron 34130807 34131160 . + . Parent=mRNA180 chr21 gth exon 34131161 34132670 1.000000 + . Parent=mRNA180 chr21 gth mRNA 33936718 34036947 . + . ID=mRNA181;Parent=gene19 chr21 gth exon 33936718 33936889 1.000000 + . Parent=mRNA181 chr21 . intron 33936890 33983496 . + . Parent=mRNA181 chr21 gth exon 33983497 33983558 1.000000 + . Parent=mRNA181 chr21 . intron 33983559 34012971 . + . Parent=mRNA181 chr21 gth exon 34012972 34013031 1.000000 + . Parent=mRNA181 chr21 . intron 34013032 34015352 . + . Parent=mRNA181 chr21 gth exon 34015353 34015445 1.000000 + . Parent=mRNA181 chr21 . intron 34015446 34016762 . + . Parent=mRNA181 chr21 gth exon 34016763 34016826 1.000000 + . Parent=mRNA181 chr21 . intron 34016827 34029218 . + . Parent=mRNA181 chr21 gth exon 34029219 34030908 1.000000 + . Parent=mRNA181 chr21 . intron 34030909 34034991 . + . Parent=mRNA181 chr21 gth exon 34034992 34035796 1.000000 + . Parent=mRNA181 chr21 . intron 34035797 34036516 . + . Parent=mRNA181 chr21 gth exon 34036517 34036947 1.000000 + . Parent=mRNA181 chr21 gth mRNA 34029216 34029801 . + . ID=mRNA182;Parent=gene19 chr21 gth exon 34029216 34029379 1.000000 + . Parent=mRNA182 chr21 . intron 34029380 34029480 . + . Parent=mRNA182 chr21 gth exon 34029481 34029801 1.000000 + . Parent=mRNA182 chr21 gth mRNA 34048358 34066474 . + . ID=mRNA183;Parent=gene19 chr21 gth exon 34048358 34048397 1.000000 + . Parent=mRNA183 chr21 . intron 34048398 34049471 . + . Parent=mRNA183 chr21 gth exon 34049472 34049572 1.000000 + . Parent=mRNA183 chr21 . intron 34049573 34050961 . + . Parent=mRNA183 chr21 gth exon 34050962 34051248 1.000000 + . Parent=mRNA183 chr21 . intron 34051249 34056096 . + . Parent=mRNA183 chr21 gth exon 34056097 34056160 1.000000 + . Parent=mRNA183 chr21 . intron 34056161 34060048 . + . Parent=mRNA183 chr21 gth exon 34060049 34060186 1.000000 + . Parent=mRNA183 chr21 . intron 34060187 34061886 . + . Parent=mRNA183 chr21 gth exon 34061887 34062002 1.000000 + . Parent=mRNA183 chr21 . intron 34062003 34066234 . + . Parent=mRNA183 chr21 gth exon 34066235 34066474 1.000000 + . Parent=mRNA183 chr21 gth mRNA 34068537 34069253 . + . ID=mRNA184;Parent=gene19 chr21 gth exon 34068537 34069052 1.000000 + . Parent=mRNA184 chr21 . intron 34069053 34069141 . + . Parent=mRNA184 chr21 gth exon 34069142 34069253 1.000000 + . Parent=mRNA184 chr21 gth mRNA 34091728 34111910 . + . ID=mRNA185;Parent=gene19 chr21 gth exon 34091728 34091782 1.000000 + . Parent=mRNA185 chr21 . intron 34091783 34093981 . + . Parent=mRNA185 chr21 gth exon 34093982 34094103 1.000000 + . Parent=mRNA185 chr21 . intron 34094104 34105106 . + . Parent=mRNA185 chr21 gth exon 34105107 34105116 0.600000 + . Parent=mRNA185 chr21 . intron 34105117 34105148 . + . Parent=mRNA185 chr21 gth exon 34105149 34105396 1.000000 + . Parent=mRNA185 chr21 . intron 34105397 34108086 . + . Parent=mRNA185 chr21 gth exon 34108087 34108246 1.000000 + . Parent=mRNA185 chr21 . intron 34108247 34111404 . + . Parent=mRNA185 chr21 gth exon 34111405 34111910 1.000000 + . Parent=mRNA185 chr21 gth mRNA 34105378 34108681 . + . ID=mRNA186;Parent=gene19 chr21 gth exon 34105378 34105396 1.000000 + . Parent=mRNA186 chr21 . intron 34105397 34108086 . + . Parent=mRNA186 chr21 gth exon 34108087 34108681 1.000000 + . Parent=mRNA186 chr21 gth mRNA 34112200 34150967 . + . ID=mRNA187;Parent=gene19 chr21 gth exon 34112200 34112646 1.000000 + . Parent=mRNA187 chr21 . intron 34112647 34113414 . + . Parent=mRNA187 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA187 chr21 . intron 34113498 34117660 . + . Parent=mRNA187 chr21 gth exon 34117661 34117827 1.000000 + . Parent=mRNA187 chr21 . intron 34117828 34120991 . + . Parent=mRNA187 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA187 chr21 . intron 34121038 34123141 . + . Parent=mRNA187 chr21 gth exon 34123142 34123224 1.000000 + . Parent=mRNA187 chr21 . intron 34123225 34123797 . + . Parent=mRNA187 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA187 chr21 . intron 34123920 34128480 . + . Parent=mRNA187 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA187 chr21 . intron 34128599 34130614 . + . Parent=mRNA187 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA187 chr21 . intron 34130807 34150909 . + . Parent=mRNA187 chr21 gth exon 34150910 34150967 1.000000 + . Parent=mRNA187 chr21 gth mRNA 34112557 34131212 . + . ID=mRNA188;Parent=gene19 chr21 gth exon 34112557 34112646 1.000000 + . Parent=mRNA188 chr21 . intron 34112647 34113414 . + . Parent=mRNA188 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA188 chr21 . intron 34113498 34120991 . + . Parent=mRNA188 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA188 chr21 . intron 34121038 34123141 . + . Parent=mRNA188 chr21 gth exon 34123142 34123919 1.000000 + . Parent=mRNA188 chr21 . intron 34123920 34128480 . + . Parent=mRNA188 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA188 chr21 . intron 34128599 34130614 . + . Parent=mRNA188 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA188 chr21 . intron 34130807 34131160 . + . Parent=mRNA188 chr21 gth exon 34131161 34131212 1.000000 + . Parent=mRNA188 chr21 gth mRNA 34112557 34131212 . + . ID=mRNA189;Parent=gene19 chr21 gth exon 34112557 34112646 1.000000 + . Parent=mRNA189 chr21 . intron 34112647 34113414 . + . Parent=mRNA189 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA189 chr21 . intron 34113498 34120991 . + . Parent=mRNA189 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA189 chr21 . intron 34121038 34123141 . + . Parent=mRNA189 chr21 gth exon 34123142 34123342 1.000000 + . Parent=mRNA189 chr21 . intron 34123343 34123797 . + . Parent=mRNA189 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA189 chr21 . intron 34123920 34128480 . + . Parent=mRNA189 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA189 chr21 . intron 34128599 34130614 . + . Parent=mRNA189 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA189 chr21 . intron 34130807 34131160 . + . Parent=mRNA189 chr21 gth exon 34131161 34131212 1.000000 + . Parent=mRNA189 chr21 gth mRNA 34112557 34150967 . + . ID=mRNA190;Parent=gene19 chr21 gth exon 34112557 34112646 1.000000 + . Parent=mRNA190 chr21 . intron 34112647 34113414 . + . Parent=mRNA190 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA190 chr21 . intron 34113498 34120991 . + . Parent=mRNA190 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA190 chr21 . intron 34121038 34123141 . + . Parent=mRNA190 chr21 gth exon 34123142 34123919 1.000000 + . Parent=mRNA190 chr21 . intron 34123920 34128480 . + . Parent=mRNA190 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA190 chr21 . intron 34128599 34130614 . + . Parent=mRNA190 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA190 chr21 . intron 34130807 34150909 . + . Parent=mRNA190 chr21 gth exon 34150910 34150967 1.000000 + . Parent=mRNA190 chr21 gth mRNA 34112557 34150967 . + . ID=mRNA191;Parent=gene19 chr21 gth exon 34112557 34112646 1.000000 + . Parent=mRNA191 chr21 . intron 34112647 34113414 . + . Parent=mRNA191 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA191 chr21 . intron 34113498 34120991 . + . Parent=mRNA191 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA191 chr21 . intron 34121038 34123141 . + . Parent=mRNA191 chr21 gth exon 34123142 34123919 1.000000 + . Parent=mRNA191 chr21 . intron 34123920 34150909 . + . Parent=mRNA191 chr21 gth exon 34150910 34150967 1.000000 + . Parent=mRNA191 chr21 gth mRNA 34112626 34123860 . + . ID=mRNA192;Parent=gene19 chr21 gth exon 34112626 34112646 1.000000 + . Parent=mRNA192 chr21 . intron 34112647 34113414 . + . Parent=mRNA192 chr21 gth exon 34113415 34113497 1.000000 + . Parent=mRNA192 chr21 . intron 34113498 34120991 . + . Parent=mRNA192 chr21 gth exon 34120992 34121037 1.000000 + . Parent=mRNA192 chr21 . intron 34121038 34123797 . + . Parent=mRNA192 chr21 gth exon 34123798 34123860 1.000000 + . Parent=mRNA192 chr21 gth mRNA 34120990 34131212 . + . ID=mRNA193;Parent=gene19 chr21 gth exon 34120990 34121037 1.000000 + . Parent=mRNA193 chr21 . intron 34121038 34123141 . + . Parent=mRNA193 chr21 gth exon 34123142 34123224 1.000000 + . Parent=mRNA193 chr21 . intron 34123225 34123797 . + . Parent=mRNA193 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA193 chr21 . intron 34123920 34128480 . + . Parent=mRNA193 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA193 chr21 . intron 34128599 34130614 . + . Parent=mRNA193 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA193 chr21 . intron 34130807 34131160 . + . Parent=mRNA193 chr21 gth exon 34131161 34131212 1.000000 + . Parent=mRNA193 chr21 gth mRNA 34120990 34150967 . + . ID=mRNA194;Parent=gene19 chr21 gth exon 34120990 34121037 1.000000 + . Parent=mRNA194 chr21 . intron 34121038 34123141 . + . Parent=mRNA194 chr21 gth exon 34123142 34123224 1.000000 + . Parent=mRNA194 chr21 . intron 34123225 34123797 . + . Parent=mRNA194 chr21 gth exon 34123798 34123919 1.000000 + . Parent=mRNA194 chr21 . intron 34123920 34128480 . + . Parent=mRNA194 chr21 gth exon 34128481 34128598 1.000000 + . Parent=mRNA194 chr21 . intron 34128599 34130614 . + . Parent=mRNA194 chr21 gth exon 34130615 34130806 1.000000 + . Parent=mRNA194 chr21 . intron 34130807 34150909 . + . Parent=mRNA194 chr21 gth exon 34150910 34150967 1.000000 + . Parent=mRNA194 chr21 gth mRNA 34152871 34180528 . + . ID=mRNA195;Parent=gene19 chr21 gth exon 34152871 34152966 1.000000 + . Parent=mRNA195 chr21 . intron 34152967 34159324 . + . Parent=mRNA195 chr21 gth exon 34159325 34159508 1.000000 + . Parent=mRNA195 chr21 . intron 34159509 34161406 . + . Parent=mRNA195 chr21 gth exon 34161407 34161505 1.000000 + . Parent=mRNA195 chr21 . intron 34161506 34176416 . + . Parent=mRNA195 chr21 gth exon 34176417 34176629 1.000000 + . Parent=mRNA195 chr21 . intron 34176630 34177723 . + . Parent=mRNA195 chr21 gth exon 34177724 34177845 1.000000 + . Parent=mRNA195 chr21 . intron 34177846 34179214 . + . Parent=mRNA195 chr21 gth exon 34179215 34179297 1.000000 + . Parent=mRNA195 chr21 . intron 34179298 34179612 . + . Parent=mRNA195 chr21 gth exon 34179613 34179696 1.000000 + . Parent=mRNA195 chr21 . intron 34179697 34180460 . + . Parent=mRNA195 chr21 gth exon 34180461 34180528 1.000000 + . Parent=mRNA195 chr21 gth mRNA 34169532 34180551 . + . ID=mRNA196;Parent=gene19 chr21 gth exon 34169532 34169695 1.000000 + . Parent=mRNA196 chr21 . intron 34169696 34179214 . + . Parent=mRNA196 chr21 gth exon 34179215 34179297 1.000000 + . Parent=mRNA196 chr21 . intron 34179298 34179612 . + . Parent=mRNA196 chr21 gth exon 34179613 34179696 1.000000 + . Parent=mRNA196 chr21 . intron 34179697 34180460 . + . Parent=mRNA196 chr21 gth exon 34180461 34180551 1.000000 + . Parent=mRNA196 chr21 gth mRNA 34169534 34180528 . + . ID=mRNA197;Parent=gene19 chr21 gth exon 34169534 34169695 1.000000 + . Parent=mRNA197 chr21 . intron 34169696 34177723 . + . Parent=mRNA197 chr21 gth exon 34177724 34177845 1.000000 + . Parent=mRNA197 chr21 . intron 34177846 34179214 . + . Parent=mRNA197 chr21 gth exon 34179215 34179297 1.000000 + . Parent=mRNA197 chr21 . intron 34179298 34179612 . + . Parent=mRNA197 chr21 gth exon 34179613 34179696 1.000000 + . Parent=mRNA197 chr21 . intron 34179697 34180460 . + . Parent=mRNA197 chr21 gth exon 34180461 34180528 1.000000 + . Parent=mRNA197 ### chr21 gth gene 39013395 39647224 . - . ID=gene20 chr21 gth mRNA 39013395 39647224 . - . ID=mRNA198;Parent=gene20 chr21 gth exon 39013395 39013432 0.736842 - . Parent=mRNA198 chr21 . intron 39013433 39013624 . - . Parent=mRNA198 chr21 gth exon 39013625 39013666 0.952381 - . Parent=mRNA198 chr21 . intron 39013667 39234091 . - . Parent=mRNA198 chr21 gth exon 39234092 39234281 0.863158 - . Parent=mRNA198 chr21 . intron 39234282 39647177 . - . Parent=mRNA198 chr21 gth exon 39647178 39647224 0.893617 - . Parent=mRNA198 chr21 gth mRNA 39468565 39477647 . - . ID=mRNA199;Parent=gene20 chr21 gth exon 39468565 39469460 1.000000 - . Parent=mRNA199 chr21 . intron 39469461 39471230 . - . Parent=mRNA199 chr21 gth exon 39471231 39471367 1.000000 - . Parent=mRNA199 chr21 . intron 39471368 39472244 . - . Parent=mRNA199 chr21 gth exon 39472245 39472443 1.000000 - . Parent=mRNA199 chr21 . intron 39472444 39473719 . - . Parent=mRNA199 chr21 gth exon 39473720 39473782 1.000000 - . Parent=mRNA199 chr21 . intron 39473783 39474080 . - . Parent=mRNA199 chr21 gth exon 39474081 39474232 1.000000 - . Parent=mRNA199 chr21 . intron 39474233 39475567 . - . Parent=mRNA199 chr21 gth exon 39475568 39475674 1.000000 - . Parent=mRNA199 chr21 . intron 39475675 39477047 . - . Parent=mRNA199 chr21 gth exon 39477048 39477647 1.000000 - . Parent=mRNA199 chr21 gth mRNA 39469254 39472616 . - . ID=mRNA200;Parent=gene20 chr21 gth exon 39469254 39469460 1.000000 - . Parent=mRNA200 chr21 . intron 39469461 39471230 . - . Parent=mRNA200 chr21 gth exon 39471231 39471367 1.000000 - . Parent=mRNA200 chr21 . intron 39471368 39472244 . - . Parent=mRNA200 chr21 gth exon 39472245 39472616 1.000000 - . Parent=mRNA200 chr21 gth mRNA 39469254 39474234 . - . ID=mRNA201;Parent=gene20 chr21 gth exon 39469254 39469460 1.000000 - . Parent=mRNA201 chr21 . intron 39469461 39471230 . - . Parent=mRNA201 chr21 gth exon 39471231 39471367 1.000000 - . Parent=mRNA201 chr21 . intron 39471368 39472244 . - . Parent=mRNA201 chr21 gth exon 39472245 39472314 1.000000 - . Parent=mRNA201 chr21 . intron 39472315 39474080 . - . Parent=mRNA201 chr21 gth exon 39474081 39474234 1.000000 - . Parent=mRNA201 chr21 gth mRNA 39469384 39477083 . - . ID=mRNA202;Parent=gene20 chr21 gth exon 39469384 39469460 1.000000 - . Parent=mRNA202 chr21 . intron 39469461 39471230 . - . Parent=mRNA202 chr21 gth exon 39471231 39471367 1.000000 - . Parent=mRNA202 chr21 . intron 39471368 39472244 . - . Parent=mRNA202 chr21 gth exon 39472245 39472443 1.000000 - . Parent=mRNA202 chr21 . intron 39472444 39473719 . - . Parent=mRNA202 chr21 gth exon 39473720 39473782 1.000000 - . Parent=mRNA202 chr21 . intron 39473783 39474080 . - . Parent=mRNA202 chr21 gth exon 39474081 39474232 1.000000 - . Parent=mRNA202 chr21 . intron 39474233 39475567 . - . Parent=mRNA202 chr21 gth exon 39475568 39475674 1.000000 - . Parent=mRNA202 chr21 . intron 39475675 39476859 . - . Parent=mRNA202 chr21 gth exon 39476860 39477083 1.000000 - . Parent=mRNA202 chr21 gth mRNA 39469386 39477181 . - . ID=mRNA203;Parent=gene20 chr21 gth exon 39469386 39469460 1.000000 - . Parent=mRNA203 chr21 . intron 39469461 39471230 . - . Parent=mRNA203 chr21 gth exon 39471231 39471367 1.000000 - . Parent=mRNA203 chr21 . intron 39471368 39472244 . - . Parent=mRNA203 chr21 gth exon 39472245 39472443 1.000000 - . Parent=mRNA203 chr21 . intron 39472444 39473719 . - . Parent=mRNA203 chr21 gth exon 39473720 39473782 1.000000 - . Parent=mRNA203 chr21 . intron 39473783 39474080 . - . Parent=mRNA203 chr21 gth exon 39474081 39474232 1.000000 - . Parent=mRNA203 chr21 . intron 39474233 39477047 . - . Parent=mRNA203 chr21 gth exon 39477048 39477181 1.000000 - . Parent=mRNA203 chr21 gth mRNA 39469386 39477284 . - . ID=mRNA204;Parent=gene20 chr21 gth exon 39469386 39469460 1.000000 - . Parent=mRNA204 chr21 . intron 39469461 39471230 . - . Parent=mRNA204 chr21 gth exon 39471231 39471367 1.000000 - . Parent=mRNA204 chr21 . intron 39471368 39472244 . - . Parent=mRNA204 chr21 gth exon 39472245 39472443 1.000000 - . Parent=mRNA204 chr21 . intron 39472444 39474080 . - . Parent=mRNA204 chr21 gth exon 39474081 39474232 1.000000 - . Parent=mRNA204 chr21 . intron 39474233 39475567 . - . Parent=mRNA204 chr21 gth exon 39475568 39475674 1.000000 - . Parent=mRNA204 chr21 . intron 39475675 39477047 . - . Parent=mRNA204 chr21 gth exon 39477048 39477284 1.000000 - . Parent=mRNA204 chr21 gth mRNA 39477972 39607366 . - . ID=mRNA205;Parent=gene20 chr21 gth exon 39477972 39481213 1.000000 - . Parent=mRNA205 chr21 . intron 39481214 39490293 . - . Parent=mRNA205 chr21 gth exon 39490294 39491211 1.000000 - . Parent=mRNA205 chr21 . intron 39491212 39492558 . - . Parent=mRNA205 chr21 gth exon 39492559 39493458 1.000000 - . Parent=mRNA205 chr21 . intron 39493459 39494014 . - . Parent=mRNA205 chr21 gth exon 39494015 39494182 1.000000 - . Parent=mRNA205 chr21 . intron 39494183 39496120 . - . Parent=mRNA205 chr21 gth exon 39496121 39496341 1.000000 - . Parent=mRNA205 chr21 . intron 39496342 39499903 . - . Parent=mRNA205 chr21 gth exon 39499904 39500070 1.000000 - . Parent=mRNA205 chr21 . intron 39500071 39503790 . - . Parent=mRNA205 chr21 gth exon 39503791 39503943 1.000000 - . Parent=mRNA205 chr21 . intron 39503944 39504581 . - . Parent=mRNA205 chr21 gth exon 39504582 39504725 1.000000 - . Parent=mRNA205 chr21 . intron 39504726 39506461 . - . Parent=mRNA205 chr21 gth exon 39506462 39506503 1.000000 - . Parent=mRNA205 chr21 . intron 39506504 39507276 . - . Parent=mRNA205 chr21 gth exon 39507277 39507349 1.000000 - . Parent=mRNA205 chr21 . intron 39507350 39509032 . - . Parent=mRNA205 chr21 gth exon 39509033 39509158 1.000000 - . Parent=mRNA205 chr21 . intron 39509159 39511947 . - . Parent=mRNA205 chr21 gth exon 39511948 39512068 1.000000 - . Parent=mRNA205 chr21 . intron 39512069 39512300 . - . Parent=mRNA205 chr21 gth exon 39512301 39512456 1.000000 - . Parent=mRNA205 chr21 . intron 39512457 39518203 . - . Parent=mRNA205 chr21 gth exon 39518204 39518265 1.000000 - . Parent=mRNA205 chr21 . intron 39518266 39518881 . - . Parent=mRNA205 chr21 gth exon 39518882 39518993 1.000000 - . Parent=mRNA205 chr21 . intron 39518994 39522295 . - . Parent=mRNA205 chr21 gth exon 39522296 39522378 1.000000 - . Parent=mRNA205 chr21 . intron 39522379 39523107 . - . Parent=mRNA205 chr21 gth exon 39523108 39523232 1.000000 - . Parent=mRNA205 chr21 . intron 39523233 39525972 . - . Parent=mRNA205 chr21 gth exon 39525973 39526080 1.000000 - . Parent=mRNA205 chr21 . intron 39526081 39526168 . - . Parent=mRNA205 chr21 gth exon 39526169 39526294 1.000000 - . Parent=mRNA205 chr21 . intron 39526295 39530390 . - . Parent=mRNA205 chr21 gth exon 39530391 39530580 1.000000 - . Parent=mRNA205 chr21 . intron 39530581 39532274 . - . Parent=mRNA205 chr21 gth exon 39532275 39532369 1.000000 - . Parent=mRNA205 chr21 . intron 39532370 39541496 . - . Parent=mRNA205 chr21 gth exon 39541497 39541628 1.000000 - . Parent=mRNA205 chr21 . intron 39541629 39544591 . - . Parent=mRNA205 chr21 gth exon 39544592 39544685 1.000000 - . Parent=mRNA205 chr21 . intron 39544686 39549440 . - . Parent=mRNA205 chr21 gth exon 39549441 39549624 1.000000 - . Parent=mRNA205 chr21 . intron 39549625 39552282 . - . Parent=mRNA205 chr21 gth exon 39552283 39552468 1.000000 - . Parent=mRNA205 chr21 . intron 39552469 39558255 . - . Parent=mRNA205 chr21 gth exon 39558256 39558481 1.000000 - . Parent=mRNA205 chr21 . intron 39558482 39558686 . - . Parent=mRNA205 chr21 gth exon 39558687 39558815 1.000000 - . Parent=mRNA205 chr21 . intron 39558816 39563694 . - . Parent=mRNA205 chr21 gth exon 39563695 39563829 1.000000 - . Parent=mRNA205 chr21 . intron 39563830 39564078 . - . Parent=mRNA205 chr21 gth exon 39564079 39564229 1.000000 - . Parent=mRNA205 chr21 . intron 39564230 39568169 . - . Parent=mRNA205 chr21 gth exon 39568170 39568268 1.000000 - . Parent=mRNA205 chr21 . intron 39568269 39569968 . - . Parent=mRNA205 chr21 gth exon 39569969 39570009 1.000000 - . Parent=mRNA205 chr21 . intron 39570010 39571046 . - . Parent=mRNA205 chr21 gth exon 39571047 39571147 1.000000 - . Parent=mRNA205 chr21 . intron 39571148 39572538 . - . Parent=mRNA205 chr21 gth exon 39572539 39572609 1.000000 - . Parent=mRNA205 chr21 . intron 39572610 39573943 . - . Parent=mRNA205 chr21 gth exon 39573944 39574044 1.000000 - . Parent=mRNA205 chr21 . intron 39574045 39587606 . - . Parent=mRNA205 chr21 gth exon 39587607 39587828 1.000000 - . Parent=mRNA205 chr21 . intron 39587829 39589538 . - . Parent=mRNA205 chr21 gth exon 39589539 39589699 1.000000 - . Parent=mRNA205 chr21 . intron 39589700 39590060 . - . Parent=mRNA205 chr21 gth exon 39590061 39590159 1.000000 - . Parent=mRNA205 chr21 . intron 39590160 39592227 . - . Parent=mRNA205 chr21 gth exon 39592228 39592378 1.000000 - . Parent=mRNA205 chr21 . intron 39592379 39606636 . - . Parent=mRNA205 chr21 gth exon 39606637 39606696 1.000000 - . Parent=mRNA205 chr21 . intron 39606697 39606867 . - . Parent=mRNA205 chr21 gth exon 39606868 39606897 1.000000 - . Parent=mRNA205 chr21 . intron 39606898 39607036 . - . Parent=mRNA205 chr21 gth exon 39607037 39607095 1.000000 - . Parent=mRNA205 chr21 . intron 39607096 39607238 . - . Parent=mRNA205 chr21 gth exon 39607239 39607366 1.000000 - . Parent=mRNA205 chr21 gth mRNA 39481042 39558737 . - . ID=mRNA206;Parent=gene20 chr21 gth exon 39481042 39481213 1.000000 - . Parent=mRNA206 chr21 . intron 39481214 39490293 . - . Parent=mRNA206 chr21 gth exon 39490294 39491211 1.000000 - . Parent=mRNA206 chr21 . intron 39491212 39492558 . - . Parent=mRNA206 chr21 gth exon 39492559 39493458 1.000000 - . Parent=mRNA206 chr21 . intron 39493459 39494014 . - . Parent=mRNA206 chr21 gth exon 39494015 39494182 1.000000 - . Parent=mRNA206 chr21 . intron 39494183 39496120 . - . Parent=mRNA206 chr21 gth exon 39496121 39496341 1.000000 - . Parent=mRNA206 chr21 . intron 39496342 39499903 . - . Parent=mRNA206 chr21 gth exon 39499904 39500070 1.000000 - . Parent=mRNA206 chr21 . intron 39500071 39503790 . - . Parent=mRNA206 chr21 gth exon 39503791 39503943 1.000000 - . Parent=mRNA206 chr21 . intron 39503944 39504581 . - . Parent=mRNA206 chr21 gth exon 39504582 39504725 1.000000 - . Parent=mRNA206 chr21 . intron 39504726 39506461 . - . Parent=mRNA206 chr21 gth exon 39506462 39506503 1.000000 - . Parent=mRNA206 chr21 . intron 39506504 39507276 . - . Parent=mRNA206 chr21 gth exon 39507277 39507349 1.000000 - . Parent=mRNA206 chr21 . intron 39507350 39509032 . - . Parent=mRNA206 chr21 gth exon 39509033 39509158 1.000000 - . Parent=mRNA206 chr21 . intron 39509159 39512324 . - . Parent=mRNA206 chr21 gth exon 39512325 39512456 1.000000 - . Parent=mRNA206 chr21 . intron 39512457 39518203 . - . Parent=mRNA206 chr21 gth exon 39518204 39518265 1.000000 - . Parent=mRNA206 chr21 . intron 39518266 39518881 . - . Parent=mRNA206 chr21 gth exon 39518882 39518993 1.000000 - . Parent=mRNA206 chr21 . intron 39518994 39522295 . - . Parent=mRNA206 chr21 gth exon 39522296 39522378 1.000000 - . Parent=mRNA206 chr21 . intron 39522379 39523107 . - . Parent=mRNA206 chr21 gth exon 39523108 39523232 1.000000 - . Parent=mRNA206 chr21 . intron 39523233 39525972 . - . Parent=mRNA206 chr21 gth exon 39525973 39526080 1.000000 - . Parent=mRNA206 chr21 . intron 39526081 39526168 . - . Parent=mRNA206 chr21 gth exon 39526169 39526294 1.000000 - . Parent=mRNA206 chr21 . intron 39526295 39530390 . - . Parent=mRNA206 chr21 gth exon 39530391 39530580 1.000000 - . Parent=mRNA206 chr21 . intron 39530581 39532274 . - . Parent=mRNA206 chr21 gth exon 39532275 39532369 1.000000 - . Parent=mRNA206 chr21 . intron 39532370 39541496 . - . Parent=mRNA206 chr21 gth exon 39541497 39541628 1.000000 - . Parent=mRNA206 chr21 . intron 39541629 39544591 . - . Parent=mRNA206 chr21 gth exon 39544592 39544685 1.000000 - . Parent=mRNA206 chr21 . intron 39544686 39549440 . - . Parent=mRNA206 chr21 gth exon 39549441 39549624 1.000000 - . Parent=mRNA206 chr21 . intron 39549625 39552282 . - . Parent=mRNA206 chr21 gth exon 39552283 39552468 1.000000 - . Parent=mRNA206 chr21 . intron 39552469 39558255 . - . Parent=mRNA206 chr21 gth exon 39558256 39558481 1.000000 - . Parent=mRNA206 chr21 . intron 39558482 39558686 . - . Parent=mRNA206 chr21 gth exon 39558687 39558737 1.000000 - . Parent=mRNA206 chr21 gth mRNA 39484015 39607366 . - . ID=mRNA207;Parent=gene20 chr21 gth exon 39484015 39491211 1.000000 - . Parent=mRNA207 chr21 . intron 39491212 39492558 . - . Parent=mRNA207 chr21 gth exon 39492559 39493458 1.000000 - . Parent=mRNA207 chr21 . intron 39493459 39494014 . - . Parent=mRNA207 chr21 gth exon 39494015 39494182 1.000000 - . Parent=mRNA207 chr21 . intron 39494183 39496120 . - . Parent=mRNA207 chr21 gth exon 39496121 39496341 1.000000 - . Parent=mRNA207 chr21 . intron 39496342 39499903 . - . Parent=mRNA207 chr21 gth exon 39499904 39500070 1.000000 - . Parent=mRNA207 chr21 . intron 39500071 39503790 . - . Parent=mRNA207 chr21 gth exon 39503791 39503943 1.000000 - . Parent=mRNA207 chr21 . intron 39503944 39504581 . - . Parent=mRNA207 chr21 gth exon 39504582 39504725 1.000000 - . Parent=mRNA207 chr21 . intron 39504726 39506461 . - . Parent=mRNA207 chr21 gth exon 39506462 39506503 1.000000 - . Parent=mRNA207 chr21 . intron 39506504 39507276 . - . Parent=mRNA207 chr21 gth exon 39507277 39507349 1.000000 - . Parent=mRNA207 chr21 . intron 39507350 39509032 . - . Parent=mRNA207 chr21 gth exon 39509033 39509158 1.000000 - . Parent=mRNA207 chr21 . intron 39509159 39511947 . - . Parent=mRNA207 chr21 gth exon 39511948 39512068 1.000000 - . Parent=mRNA207 chr21 . intron 39512069 39512300 . - . Parent=mRNA207 chr21 gth exon 39512301 39512456 1.000000 - . Parent=mRNA207 chr21 . intron 39512457 39518203 . - . Parent=mRNA207 chr21 gth exon 39518204 39518265 1.000000 - . Parent=mRNA207 chr21 . intron 39518266 39518881 . - . Parent=mRNA207 chr21 gth exon 39518882 39518993 1.000000 - . Parent=mRNA207 chr21 . intron 39518994 39522295 . - . Parent=mRNA207 chr21 gth exon 39522296 39522378 1.000000 - . Parent=mRNA207 chr21 . intron 39522379 39523107 . - . Parent=mRNA207 chr21 gth exon 39523108 39523232 1.000000 - . Parent=mRNA207 chr21 . intron 39523233 39525972 . - . Parent=mRNA207 chr21 gth exon 39525973 39526080 1.000000 - . Parent=mRNA207 chr21 . intron 39526081 39526168 . - . Parent=mRNA207 chr21 gth exon 39526169 39526294 1.000000 - . Parent=mRNA207 chr21 . intron 39526295 39530390 . - . Parent=mRNA207 chr21 gth exon 39530391 39530580 1.000000 - . Parent=mRNA207 chr21 . intron 39530581 39532274 . - . Parent=mRNA207 chr21 gth exon 39532275 39532369 1.000000 - . Parent=mRNA207 chr21 . intron 39532370 39541496 . - . Parent=mRNA207 chr21 gth exon 39541497 39541628 1.000000 - . Parent=mRNA207 chr21 . intron 39541629 39544591 . - . Parent=mRNA207 chr21 gth exon 39544592 39544685 1.000000 - . Parent=mRNA207 chr21 . intron 39544686 39549440 . - . Parent=mRNA207 chr21 gth exon 39549441 39549624 1.000000 - . Parent=mRNA207 chr21 . intron 39549625 39552282 . - . Parent=mRNA207 chr21 gth exon 39552283 39552468 1.000000 - . Parent=mRNA207 chr21 . intron 39552469 39558255 . - . Parent=mRNA207 chr21 gth exon 39558256 39558481 1.000000 - . Parent=mRNA207 chr21 . intron 39558482 39558686 . - . Parent=mRNA207 chr21 gth exon 39558687 39558815 1.000000 - . Parent=mRNA207 chr21 . intron 39558816 39563694 . - . Parent=mRNA207 chr21 gth exon 39563695 39563829 1.000000 - . Parent=mRNA207 chr21 . intron 39563830 39564078 . - . Parent=mRNA207 chr21 gth exon 39564079 39564229 1.000000 - . Parent=mRNA207 chr21 . intron 39564230 39568169 . - . Parent=mRNA207 chr21 gth exon 39568170 39568268 1.000000 - . Parent=mRNA207 chr21 . intron 39568269 39569968 . - . Parent=mRNA207 chr21 gth exon 39569969 39570009 1.000000 - . Parent=mRNA207 chr21 . intron 39570010 39571046 . - . Parent=mRNA207 chr21 gth exon 39571047 39571147 1.000000 - . Parent=mRNA207 chr21 . intron 39571148 39572538 . - . Parent=mRNA207 chr21 gth exon 39572539 39572609 1.000000 - . Parent=mRNA207 chr21 . intron 39572610 39573943 . - . Parent=mRNA207 chr21 gth exon 39573944 39574044 1.000000 - . Parent=mRNA207 chr21 . intron 39574045 39587606 . - . Parent=mRNA207 chr21 gth exon 39587607 39587828 1.000000 - . Parent=mRNA207 chr21 . intron 39587829 39589538 . - . Parent=mRNA207 chr21 gth exon 39589539 39589699 1.000000 - . Parent=mRNA207 chr21 . intron 39589700 39590060 . - . Parent=mRNA207 chr21 gth exon 39590061 39590159 1.000000 - . Parent=mRNA207 chr21 . intron 39590160 39592227 . - . Parent=mRNA207 chr21 gth exon 39592228 39592378 1.000000 - . Parent=mRNA207 chr21 . intron 39592379 39606636 . - . Parent=mRNA207 chr21 gth exon 39606637 39606696 1.000000 - . Parent=mRNA207 chr21 . intron 39606697 39606867 . - . Parent=mRNA207 chr21 gth exon 39606868 39606897 1.000000 - . Parent=mRNA207 chr21 . intron 39606898 39607036 . - . Parent=mRNA207 chr21 gth exon 39607037 39607095 1.000000 - . Parent=mRNA207 chr21 . intron 39607096 39607238 . - . Parent=mRNA207 chr21 gth exon 39607239 39607366 1.000000 - . Parent=mRNA207 chr21 gth mRNA 39493215 39494292 . - . ID=mRNA208;Parent=gene20 chr21 gth exon 39493215 39493458 1.000000 - . Parent=mRNA208 chr21 . intron 39493459 39494014 . - . Parent=mRNA208 chr21 gth exon 39494015 39494292 1.000000 - . Parent=mRNA208 chr21 gth mRNA 39496162 39523188 . - . ID=mRNA209;Parent=gene20 chr21 gth exon 39496162 39496341 1.000000 - . Parent=mRNA209 chr21 . intron 39496342 39499903 . - . Parent=mRNA209 chr21 gth exon 39499904 39500070 1.000000 - . Parent=mRNA209 chr21 . intron 39500071 39503790 . - . Parent=mRNA209 chr21 gth exon 39503791 39503943 1.000000 - . Parent=mRNA209 chr21 . intron 39503944 39506461 . - . Parent=mRNA209 chr21 gth exon 39506462 39506503 1.000000 - . Parent=mRNA209 chr21 . intron 39506504 39507276 . - . Parent=mRNA209 chr21 gth exon 39507277 39507349 1.000000 - . Parent=mRNA209 chr21 . intron 39507350 39509032 . - . Parent=mRNA209 chr21 gth exon 39509033 39509158 1.000000 - . Parent=mRNA209 chr21 . intron 39509159 39511947 . - . Parent=mRNA209 chr21 gth exon 39511948 39512068 1.000000 - . Parent=mRNA209 chr21 . intron 39512069 39512300 . - . Parent=mRNA209 chr21 gth exon 39512301 39512456 1.000000 - . Parent=mRNA209 chr21 . intron 39512457 39518203 . - . Parent=mRNA209 chr21 gth exon 39518204 39518265 1.000000 - . Parent=mRNA209 chr21 . intron 39518266 39518881 . - . Parent=mRNA209 chr21 gth exon 39518882 39518993 1.000000 - . Parent=mRNA209 chr21 . intron 39518994 39522295 . - . Parent=mRNA209 chr21 gth exon 39522296 39522378 1.000000 - . Parent=mRNA209 chr21 . intron 39522379 39523107 . - . Parent=mRNA209 chr21 gth exon 39523108 39523188 1.000000 - . Parent=mRNA209 chr21 gth mRNA 39503582 39512456 . - . ID=mRNA210;Parent=gene20 chr21 gth exon 39503582 39503943 1.000000 - . Parent=mRNA210 chr21 . intron 39503944 39504661 . - . Parent=mRNA210 chr21 gth exon 39504662 39504725 1.000000 - . Parent=mRNA210 chr21 . intron 39504726 39506461 . - . Parent=mRNA210 chr21 gth exon 39506462 39506503 1.000000 - . Parent=mRNA210 chr21 . intron 39506504 39507276 . - . Parent=mRNA210 chr21 gth exon 39507277 39507349 1.000000 - . Parent=mRNA210 chr21 . intron 39507350 39509032 . - . Parent=mRNA210 chr21 gth exon 39509033 39509158 1.000000 - . Parent=mRNA210 chr21 . intron 39509159 39511947 . - . Parent=mRNA210 chr21 gth exon 39511948 39512068 1.000000 - . Parent=mRNA210 chr21 . intron 39512069 39512300 . - . Parent=mRNA210 chr21 gth exon 39512301 39512456 1.000000 - . Parent=mRNA210 chr21 gth mRNA 39530514 39574009 . - . ID=mRNA211;Parent=gene20 chr21 gth exon 39530514 39530580 1.000000 - . Parent=mRNA211 chr21 . intron 39530581 39532274 . - . Parent=mRNA211 chr21 gth exon 39532275 39532369 1.000000 - . Parent=mRNA211 chr21 . intron 39532370 39541496 . - . Parent=mRNA211 chr21 gth exon 39541497 39541628 1.000000 - . Parent=mRNA211 chr21 . intron 39541629 39544591 . - . Parent=mRNA211 chr21 gth exon 39544592 39544685 1.000000 - . Parent=mRNA211 chr21 . intron 39544686 39552282 . - . Parent=mRNA211 chr21 gth exon 39552283 39552468 1.000000 - . Parent=mRNA211 chr21 . intron 39552469 39558255 . - . Parent=mRNA211 chr21 gth exon 39558256 39558481 1.000000 - . Parent=mRNA211 chr21 . intron 39558482 39558686 . - . Parent=mRNA211 chr21 gth exon 39558687 39558815 1.000000 - . Parent=mRNA211 chr21 . intron 39558816 39563694 . - . Parent=mRNA211 chr21 gth exon 39563695 39563829 1.000000 - . Parent=mRNA211 chr21 . intron 39563830 39564078 . - . Parent=mRNA211 chr21 gth exon 39564079 39564229 1.000000 - . Parent=mRNA211 chr21 . intron 39564230 39568169 . - . Parent=mRNA211 chr21 gth exon 39568170 39568268 1.000000 - . Parent=mRNA211 chr21 . intron 39568269 39569968 . - . Parent=mRNA211 chr21 gth exon 39569969 39570009 1.000000 - . Parent=mRNA211 chr21 . intron 39570010 39571046 . - . Parent=mRNA211 chr21 gth exon 39571047 39571147 1.000000 - . Parent=mRNA211 chr21 . intron 39571148 39572538 . - . Parent=mRNA211 chr21 gth exon 39572539 39572609 1.000000 - . Parent=mRNA211 chr21 . intron 39572610 39573943 . - . Parent=mRNA211 chr21 gth exon 39573944 39574009 1.000000 - . Parent=mRNA211 chr21 gth mRNA 39530514 39574009 . - . ID=mRNA212;Parent=gene20 chr21 gth exon 39530514 39530580 1.000000 - . Parent=mRNA212 chr21 . intron 39530581 39532274 . - . Parent=mRNA212 chr21 gth exon 39532275 39532369 1.000000 - . Parent=mRNA212 chr21 . intron 39532370 39541496 . - . Parent=mRNA212 chr21 gth exon 39541497 39541628 1.000000 - . Parent=mRNA212 chr21 . intron 39541629 39544591 . - . Parent=mRNA212 chr21 gth exon 39544592 39544685 1.000000 - . Parent=mRNA212 chr21 . intron 39544686 39549440 . - . Parent=mRNA212 chr21 gth exon 39549441 39549624 1.000000 - . Parent=mRNA212 chr21 . intron 39549625 39552282 . - . Parent=mRNA212 chr21 gth exon 39552283 39552468 1.000000 - . Parent=mRNA212 chr21 . intron 39552469 39558255 . - . Parent=mRNA212 chr21 gth exon 39558256 39558360 1.000000 - . Parent=mRNA212 chr21 . intron 39558361 39558686 . - . Parent=mRNA212 chr21 gth exon 39558687 39558815 1.000000 - . Parent=mRNA212 chr21 . intron 39558816 39563694 . - . Parent=mRNA212 chr21 gth exon 39563695 39563829 1.000000 - . Parent=mRNA212 chr21 . intron 39563830 39564078 . - . Parent=mRNA212 chr21 gth exon 39564079 39564229 1.000000 - . Parent=mRNA212 chr21 . intron 39564230 39568169 . - . Parent=mRNA212 chr21 gth exon 39568170 39568268 1.000000 - . Parent=mRNA212 chr21 . intron 39568269 39569968 . - . Parent=mRNA212 chr21 gth exon 39569969 39570009 1.000000 - . Parent=mRNA212 chr21 . intron 39570010 39571046 . - . Parent=mRNA212 chr21 gth exon 39571047 39571147 1.000000 - . Parent=mRNA212 chr21 . intron 39571148 39572538 . - . Parent=mRNA212 chr21 gth exon 39572539 39572609 1.000000 - . Parent=mRNA212 chr21 . intron 39572610 39573943 . - . Parent=mRNA212 chr21 gth exon 39573944 39574009 1.000000 - . Parent=mRNA212 chr21 gth mRNA 39530514 39574009 . - . ID=mRNA213;Parent=gene20 chr21 gth exon 39530514 39530580 1.000000 - . Parent=mRNA213 chr21 . intron 39530581 39532274 . - . Parent=mRNA213 chr21 gth exon 39532275 39532369 1.000000 - . Parent=mRNA213 chr21 . intron 39532370 39541496 . - . Parent=mRNA213 chr21 gth exon 39541497 39541628 1.000000 - . Parent=mRNA213 chr21 . intron 39541629 39544591 . - . Parent=mRNA213 chr21 gth exon 39544592 39544685 1.000000 - . Parent=mRNA213 chr21 . intron 39544686 39549440 . - . Parent=mRNA213 chr21 gth exon 39549441 39549624 1.000000 - . Parent=mRNA213 chr21 . intron 39549625 39552282 . - . Parent=mRNA213 chr21 gth exon 39552283 39552468 1.000000 - . Parent=mRNA213 chr21 . intron 39552469 39558255 . - . Parent=mRNA213 chr21 gth exon 39558256 39558481 1.000000 - . Parent=mRNA213 chr21 . intron 39558482 39558781 . - . Parent=mRNA213 chr21 gth exon 39558782 39558815 1.000000 - . Parent=mRNA213 chr21 . intron 39558816 39563694 . - . Parent=mRNA213 chr21 gth exon 39563695 39563829 1.000000 - . Parent=mRNA213 chr21 . intron 39563830 39564078 . - . Parent=mRNA213 chr21 gth exon 39564079 39564229 1.000000 - . Parent=mRNA213 chr21 . intron 39564230 39568169 . - . Parent=mRNA213 chr21 gth exon 39568170 39568268 1.000000 - . Parent=mRNA213 chr21 . intron 39568269 39569968 . - . Parent=mRNA213 chr21 gth exon 39569969 39570009 1.000000 - . Parent=mRNA213 chr21 . intron 39570010 39571046 . - . Parent=mRNA213 chr21 gth exon 39571047 39571147 1.000000 - . Parent=mRNA213 chr21 . intron 39571148 39572538 . - . Parent=mRNA213 chr21 gth exon 39572539 39572609 1.000000 - . Parent=mRNA213 chr21 . intron 39572610 39573943 . - . Parent=mRNA213 chr21 gth exon 39573944 39574009 1.000000 - . Parent=mRNA213 chr21 gth mRNA 39530515 39574009 . - . ID=mRNA214;Parent=gene20 chr21 gth exon 39530515 39530580 1.000000 - . Parent=mRNA214 chr21 . intron 39530581 39532274 . - . Parent=mRNA214 chr21 gth exon 39532275 39532369 1.000000 - . Parent=mRNA214 chr21 . intron 39532370 39544591 . - . Parent=mRNA214 chr21 gth exon 39544592 39544685 1.000000 - . Parent=mRNA214 chr21 . intron 39544686 39549440 . - . Parent=mRNA214 chr21 gth exon 39549441 39549624 1.000000 - . Parent=mRNA214 chr21 . intron 39549625 39552282 . - . Parent=mRNA214 chr21 gth exon 39552283 39552468 1.000000 - . Parent=mRNA214 chr21 . intron 39552469 39558255 . - . Parent=mRNA214 chr21 gth exon 39558256 39558481 1.000000 - . Parent=mRNA214 chr21 . intron 39558482 39558686 . - . Parent=mRNA214 chr21 gth exon 39558687 39558815 1.000000 - . Parent=mRNA214 chr21 . intron 39558816 39563694 . - . Parent=mRNA214 chr21 gth exon 39563695 39563829 1.000000 - . Parent=mRNA214 chr21 . intron 39563830 39564078 . - . Parent=mRNA214 chr21 gth exon 39564079 39564229 1.000000 - . Parent=mRNA214 chr21 . intron 39564230 39568169 . - . Parent=mRNA214 chr21 gth exon 39568170 39568268 1.000000 - . Parent=mRNA214 chr21 . intron 39568269 39569968 . - . Parent=mRNA214 chr21 gth exon 39569969 39570009 1.000000 - . Parent=mRNA214 chr21 . intron 39570010 39571046 . - . Parent=mRNA214 chr21 gth exon 39571047 39571147 1.000000 - . Parent=mRNA214 chr21 . intron 39571148 39572538 . - . Parent=mRNA214 chr21 gth exon 39572539 39572609 1.000000 - . Parent=mRNA214 chr21 . intron 39572610 39573943 . - . Parent=mRNA214 chr21 gth exon 39573944 39574009 1.000000 - . Parent=mRNA214 chr21 gth mRNA 39530515 39574009 . - . ID=mRNA215;Parent=gene20 chr21 gth exon 39530515 39530580 1.000000 - . Parent=mRNA215 chr21 . intron 39530581 39532274 . - . Parent=mRNA215 chr21 gth exon 39532275 39532369 1.000000 - . Parent=mRNA215 chr21 . intron 39532370 39541496 . - . Parent=mRNA215 chr21 gth exon 39541497 39541628 1.000000 - . Parent=mRNA215 chr21 . intron 39541629 39544591 . - . Parent=mRNA215 chr21 gth exon 39544592 39544685 1.000000 - . Parent=mRNA215 chr21 . intron 39544686 39549460 . - . Parent=mRNA215 chr21 gth exon 39549461 39549624 1.000000 - . Parent=mRNA215 chr21 . intron 39549625 39552282 . - . Parent=mRNA215 chr21 gth exon 39552283 39552468 1.000000 - . Parent=mRNA215 chr21 . intron 39552469 39558255 . - . Parent=mRNA215 chr21 gth exon 39558256 39558481 1.000000 - . Parent=mRNA215 chr21 . intron 39558482 39558686 . - . Parent=mRNA215 chr21 gth exon 39558687 39558815 1.000000 - . Parent=mRNA215 chr21 . intron 39558816 39563694 . - . Parent=mRNA215 chr21 gth exon 39563695 39563829 1.000000 - . Parent=mRNA215 chr21 . intron 39563830 39564078 . - . Parent=mRNA215 chr21 gth exon 39564079 39564229 1.000000 - . Parent=mRNA215 chr21 . intron 39564230 39568169 . - . Parent=mRNA215 chr21 gth exon 39568170 39568268 1.000000 - . Parent=mRNA215 chr21 . intron 39568269 39569968 . - . Parent=mRNA215 chr21 gth exon 39569969 39570009 1.000000 - . Parent=mRNA215 chr21 . intron 39570010 39571046 . - . Parent=mRNA215 chr21 gth exon 39571047 39571147 1.000000 - . Parent=mRNA215 chr21 . intron 39571148 39572538 . - . Parent=mRNA215 chr21 gth exon 39572539 39572609 1.000000 - . Parent=mRNA215 chr21 . intron 39572610 39573943 . - . Parent=mRNA215 chr21 gth exon 39573944 39574009 1.000000 - . Parent=mRNA215 chr21 gth mRNA 39572293 39574003 . - . ID=mRNA216;Parent=gene20 chr21 gth exon 39572293 39572609 1.000000 - . Parent=mRNA216 chr21 . intron 39572610 39573943 . - . Parent=mRNA216 chr21 gth exon 39573944 39574003 1.000000 - . Parent=mRNA216 chr21 gth mRNA 39590233 39607438 . - . ID=mRNA217;Parent=gene20 chr21 gth exon 39590233 39592378 1.000000 - . Parent=mRNA217 chr21 . intron 39592379 39606636 . - . Parent=mRNA217 chr21 gth exon 39606637 39606696 1.000000 - . Parent=mRNA217 chr21 . intron 39606697 39606867 . - . Parent=mRNA217 chr21 gth exon 39606868 39606897 1.000000 - . Parent=mRNA217 chr21 . intron 39606898 39607036 . - . Parent=mRNA217 chr21 gth exon 39607037 39607095 1.000000 - . Parent=mRNA217 chr21 . intron 39607096 39607238 . - . Parent=mRNA217 chr21 gth exon 39607239 39607438 1.000000 - . Parent=mRNA217 chr21 gth mRNA 39591886 39615355 . - . ID=mRNA218;Parent=gene20 chr21 gth exon 39591886 39592378 1.000000 - . Parent=mRNA218 chr21 . intron 39592379 39606636 . - . Parent=mRNA218 chr21 gth exon 39606637 39606696 1.000000 - . Parent=mRNA218 chr21 . intron 39606697 39606867 . - . Parent=mRNA218 chr21 gth exon 39606868 39606897 1.000000 - . Parent=mRNA218 chr21 . intron 39606898 39607036 . - . Parent=mRNA218 chr21 gth exon 39607037 39607095 1.000000 - . Parent=mRNA218 chr21 . intron 39607096 39614821 . - . Parent=mRNA218 chr21 gth exon 39614822 39615355 1.000000 - . Parent=mRNA218 chr21 gth mRNA 39606359 39607097 . - . ID=mRNA219;Parent=gene20 chr21 gth exon 39606359 39606696 1.000000 - . Parent=mRNA219 chr21 . intron 39606697 39606867 . - . Parent=mRNA219 chr21 gth exon 39606868 39606897 1.000000 - . Parent=mRNA219 chr21 . intron 39606898 39607036 . - . Parent=mRNA219 chr21 gth exon 39607037 39607097 1.000000 - . Parent=mRNA219 chr21 gth mRNA 39636111 39642787 . - . ID=mRNA220;Parent=gene20 chr21 gth exon 39636111 39636955 1.000000 - . Parent=mRNA220 chr21 . intron 39636956 39638941 . - . Parent=mRNA220 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA220 chr21 . intron 39639071 39639625 . - . Parent=mRNA220 chr21 gth exon 39639626 39639754 1.000000 - . Parent=mRNA220 chr21 . intron 39639755 39642087 . - . Parent=mRNA220 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA220 chr21 . intron 39642136 39642217 . - . Parent=mRNA220 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA220 chr21 . intron 39642248 39642340 . - . Parent=mRNA220 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA220 chr21 . intron 39642374 39642698 . - . Parent=mRNA220 chr21 gth exon 39642699 39642787 1.000000 - . Parent=mRNA220 chr21 gth mRNA 39636111 39642895 . - . ID=mRNA221;Parent=gene20 chr21 gth exon 39636111 39636955 1.000000 - . Parent=mRNA221 chr21 . intron 39636956 39638941 . - . Parent=mRNA221 chr21 gth exon 39638942 39642135 1.000000 - . Parent=mRNA221 chr21 . intron 39642136 39642217 . - . Parent=mRNA221 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA221 chr21 . intron 39642248 39642340 . - . Parent=mRNA221 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA221 chr21 . intron 39642374 39642698 . - . Parent=mRNA221 chr21 gth exon 39642699 39642895 1.000000 - . Parent=mRNA221 chr21 gth mRNA 39636111 39642936 . - . ID=mRNA222;Parent=gene20 chr21 gth exon 39636111 39636955 1.000000 - . Parent=mRNA222 chr21 . intron 39636956 39638941 . - . Parent=mRNA222 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA222 chr21 . intron 39639071 39639625 . - . Parent=mRNA222 chr21 gth exon 39639626 39639754 1.000000 - . Parent=mRNA222 chr21 . intron 39639755 39641174 . - . Parent=mRNA222 chr21 gth exon 39641175 39641274 1.000000 - . Parent=mRNA222 chr21 . intron 39641275 39642087 . - . Parent=mRNA222 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA222 chr21 . intron 39642136 39642217 . - . Parent=mRNA222 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA222 chr21 . intron 39642248 39642340 . - . Parent=mRNA222 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA222 chr21 . intron 39642374 39642698 . - . Parent=mRNA222 chr21 gth exon 39642699 39642936 1.000000 - . Parent=mRNA222 chr21 gth mRNA 39636111 39642996 . - . ID=mRNA223;Parent=gene20 chr21 gth exon 39636111 39636955 1.000000 - . Parent=mRNA223 chr21 . intron 39636956 39638941 . - . Parent=mRNA223 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA223 chr21 . intron 39639071 39642087 . - . Parent=mRNA223 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA223 chr21 . intron 39642136 39642217 . - . Parent=mRNA223 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA223 chr21 . intron 39642248 39642340 . - . Parent=mRNA223 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA223 chr21 . intron 39642374 39642698 . - . Parent=mRNA223 chr21 gth exon 39642699 39642996 1.000000 - . Parent=mRNA223 chr21 gth mRNA 39636111 39643140 . - . ID=mRNA224;Parent=gene20 chr21 gth exon 39636111 39636955 1.000000 - . Parent=mRNA224 chr21 . intron 39636956 39638941 . - . Parent=mRNA224 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA224 chr21 . intron 39639071 39639625 . - . Parent=mRNA224 chr21 gth exon 39639626 39641088 1.000000 - . Parent=mRNA224 chr21 . intron 39641089 39641174 . - . Parent=mRNA224 chr21 gth exon 39641175 39641279 1.000000 - . Parent=mRNA224 chr21 . intron 39641280 39642087 . - . Parent=mRNA224 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA224 chr21 . intron 39642136 39642217 . - . Parent=mRNA224 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA224 chr21 . intron 39642248 39642340 . - . Parent=mRNA224 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA224 chr21 . intron 39642374 39643086 . - . Parent=mRNA224 chr21 gth exon 39643087 39643140 1.000000 - . Parent=mRNA224 chr21 gth mRNA 39636442 39642884 . - . ID=mRNA225;Parent=gene20 chr21 gth exon 39636442 39636955 1.000000 - . Parent=mRNA225 chr21 . intron 39636956 39638941 . - . Parent=mRNA225 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA225 chr21 . intron 39639071 39641174 . - . Parent=mRNA225 chr21 gth exon 39641175 39641279 1.000000 - . Parent=mRNA225 chr21 . intron 39641280 39642087 . - . Parent=mRNA225 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA225 chr21 . intron 39642136 39642217 . - . Parent=mRNA225 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA225 chr21 . intron 39642248 39642340 . - . Parent=mRNA225 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA225 chr21 . intron 39642374 39642698 . - . Parent=mRNA225 chr21 gth exon 39642699 39642884 1.000000 - . Parent=mRNA225 chr21 gth mRNA 39636488 39642849 . - . ID=mRNA226;Parent=gene20 chr21 gth exon 39636488 39636955 1.000000 - . Parent=mRNA226 chr21 . intron 39636956 39638941 . - . Parent=mRNA226 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA226 chr21 . intron 39639071 39642087 . - . Parent=mRNA226 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA226 chr21 . intron 39642136 39642340 . - . Parent=mRNA226 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA226 chr21 . intron 39642374 39642698 . - . Parent=mRNA226 chr21 gth exon 39642699 39642849 1.000000 - . Parent=mRNA226 chr21 gth mRNA 39636584 39642836 . - . ID=mRNA227;Parent=gene20 chr21 gth exon 39636584 39636955 1.000000 - . Parent=mRNA227 chr21 . intron 39636956 39638941 . - . Parent=mRNA227 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA227 chr21 . intron 39639071 39641174 . - . Parent=mRNA227 chr21 gth exon 39641175 39641274 1.000000 - . Parent=mRNA227 chr21 . intron 39641275 39642087 . - . Parent=mRNA227 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA227 chr21 . intron 39642136 39642217 . - . Parent=mRNA227 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA227 chr21 . intron 39642248 39642340 . - . Parent=mRNA227 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA227 chr21 . intron 39642374 39642698 . - . Parent=mRNA227 chr21 gth exon 39642699 39642836 1.000000 - . Parent=mRNA227 chr21 gth mRNA 39636596 39642658 . - . ID=mRNA228;Parent=gene20 chr21 gth exon 39636596 39636955 1.000000 - . Parent=mRNA228 chr21 . intron 39636956 39638941 . - . Parent=mRNA228 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA228 chr21 . intron 39639071 39639625 . - . Parent=mRNA228 chr21 gth exon 39639626 39639754 1.000000 - . Parent=mRNA228 chr21 . intron 39639755 39642087 . - . Parent=mRNA228 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA228 chr21 . intron 39642136 39642217 . - . Parent=mRNA228 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA228 chr21 . intron 39642248 39642340 . - . Parent=mRNA228 chr21 gth exon 39642341 39642658 1.000000 - . Parent=mRNA228 chr21 gth mRNA 39636600 39642419 . - . ID=mRNA229;Parent=gene20 chr21 gth exon 39636600 39636955 1.000000 - . Parent=mRNA229 chr21 . intron 39636956 39638941 . - . Parent=mRNA229 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA229 chr21 . intron 39639071 39641042 . - . Parent=mRNA229 chr21 gth exon 39641043 39641088 1.000000 - . Parent=mRNA229 chr21 . intron 39641089 39641174 . - . Parent=mRNA229 chr21 gth exon 39641175 39641279 1.000000 - . Parent=mRNA229 chr21 . intron 39641280 39642087 . - . Parent=mRNA229 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA229 chr21 . intron 39642136 39642217 . - . Parent=mRNA229 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA229 chr21 . intron 39642248 39642340 . - . Parent=mRNA229 chr21 gth exon 39642341 39642419 1.000000 - . Parent=mRNA229 chr21 gth mRNA 39636675 39643443 . - . ID=mRNA230;Parent=gene20 chr21 gth exon 39636675 39636955 1.000000 - . Parent=mRNA230 chr21 . intron 39636956 39638941 . - . Parent=mRNA230 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA230 chr21 . intron 39639071 39642087 . - . Parent=mRNA230 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA230 chr21 . intron 39642136 39642217 . - . Parent=mRNA230 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA230 chr21 . intron 39642248 39642340 . - . Parent=mRNA230 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA230 chr21 . intron 39642374 39643255 . - . Parent=mRNA230 chr21 gth exon 39643256 39643443 1.000000 - . Parent=mRNA230 chr21 gth mRNA 39636705 39642393 . - . ID=mRNA231;Parent=gene20 chr21 gth exon 39636705 39636955 1.000000 - . Parent=mRNA231 chr21 . intron 39636956 39638941 . - . Parent=mRNA231 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA231 chr21 . intron 39639071 39639625 . - . Parent=mRNA231 chr21 gth exon 39639626 39639754 1.000000 - . Parent=mRNA231 chr21 . intron 39639755 39641174 . - . Parent=mRNA231 chr21 gth exon 39641175 39641279 1.000000 - . Parent=mRNA231 chr21 . intron 39641280 39642087 . - . Parent=mRNA231 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA231 chr21 . intron 39642136 39642217 . - . Parent=mRNA231 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA231 chr21 . intron 39642248 39642340 . - . Parent=mRNA231 chr21 gth exon 39642341 39642393 1.000000 - . Parent=mRNA231 chr21 gth mRNA 39636774 39642135 . - . ID=mRNA232;Parent=gene20 chr21 gth exon 39636774 39636955 1.000000 - . Parent=mRNA232 chr21 . intron 39636956 39638941 . - . Parent=mRNA232 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA232 chr21 . intron 39639071 39641042 . - . Parent=mRNA232 chr21 gth exon 39641043 39641088 1.000000 - . Parent=mRNA232 chr21 . intron 39641089 39642087 . - . Parent=mRNA232 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA232 chr21 gth mRNA 39636805 39642850 . - . ID=mRNA233;Parent=gene20 chr21 gth exon 39636805 39636955 1.000000 - . Parent=mRNA233 chr21 . intron 39636956 39638941 . - . Parent=mRNA233 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA233 chr21 . intron 39639071 39639625 . - . Parent=mRNA233 chr21 gth exon 39639626 39639754 1.000000 - . Parent=mRNA233 chr21 . intron 39639755 39641042 . - . Parent=mRNA233 chr21 gth exon 39641043 39641088 1.000000 - . Parent=mRNA233 chr21 . intron 39641089 39641174 . - . Parent=mRNA233 chr21 gth exon 39641175 39641279 1.000000 - . Parent=mRNA233 chr21 . intron 39641280 39642087 . - . Parent=mRNA233 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA233 chr21 . intron 39642136 39642217 . - . Parent=mRNA233 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA233 chr21 . intron 39642248 39642340 . - . Parent=mRNA233 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA233 chr21 . intron 39642374 39642698 . - . Parent=mRNA233 chr21 gth exon 39642699 39642850 1.000000 - . Parent=mRNA233 chr21 gth mRNA 39636933 39642850 . - . ID=mRNA234;Parent=gene20 chr21 gth exon 39636933 39636955 1.000000 - . Parent=mRNA234 chr21 . intron 39636956 39638941 . - . Parent=mRNA234 chr21 gth exon 39638942 39639070 1.000000 - . Parent=mRNA234 chr21 . intron 39639071 39642087 . - . Parent=mRNA234 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA234 chr21 . intron 39642136 39642217 . - . Parent=mRNA234 chr21 gth exon 39642218 39642373 1.000000 - . Parent=mRNA234 chr21 . intron 39642374 39642698 . - . Parent=mRNA234 chr21 gth exon 39642699 39642850 1.000000 - . Parent=mRNA234 chr21 gth mRNA 39640943 39642863 . - . ID=mRNA235;Parent=gene20 chr21 gth exon 39640943 39641088 1.000000 - . Parent=mRNA235 chr21 . intron 39641089 39641174 . - . Parent=mRNA235 chr21 gth exon 39641175 39641279 1.000000 - . Parent=mRNA235 chr21 . intron 39641280 39642087 . - . Parent=mRNA235 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA235 chr21 . intron 39642136 39642217 . - . Parent=mRNA235 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA235 chr21 . intron 39642248 39642340 . - . Parent=mRNA235 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA235 chr21 . intron 39642374 39642698 . - . Parent=mRNA235 chr21 gth exon 39642699 39642863 1.000000 - . Parent=mRNA235 chr21 gth mRNA 39641132 39642811 . - . ID=mRNA236;Parent=gene20 chr21 gth exon 39641132 39641748 1.000000 - . Parent=mRNA236 chr21 . intron 39641749 39642087 . - . Parent=mRNA236 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA236 chr21 . intron 39642136 39642217 . - . Parent=mRNA236 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA236 chr21 . intron 39642248 39642340 . - . Parent=mRNA236 chr21 gth exon 39642341 39642373 1.000000 - . Parent=mRNA236 chr21 . intron 39642374 39642698 . - . Parent=mRNA236 chr21 gth exon 39642699 39642811 1.000000 - . Parent=mRNA236 chr21 gth mRNA 39641288 39642416 . - . ID=mRNA237;Parent=gene20 chr21 gth exon 39641288 39641748 1.000000 - . Parent=mRNA237 chr21 . intron 39641749 39642087 . - . Parent=mRNA237 chr21 gth exon 39642088 39642135 1.000000 - . Parent=mRNA237 chr21 . intron 39642136 39642217 . - . Parent=mRNA237 chr21 gth exon 39642218 39642247 1.000000 - . Parent=mRNA237 chr21 . intron 39642248 39642340 . - . Parent=mRNA237 chr21 gth exon 39642341 39642416 1.000000 - . Parent=mRNA237 chr21 gth mRNA 39641791 39642816 . - . ID=mRNA238;Parent=gene20 chr21 gth exon 39641791 39642373 1.000000 - . Parent=mRNA238 chr21 . intron 39642374 39642698 . - . Parent=mRNA238 chr21 gth exon 39642699 39642816 1.000000 - . Parent=mRNA238 chr21 gth mRNA 39641861 39642850 . - . ID=mRNA239;Parent=gene20 chr21 gth exon 39641861 39642135 1.000000 - . Parent=mRNA239 chr21 . intron 39642136 39642217 . - . Parent=mRNA239 chr21 gth exon 39642218 39642373 1.000000 - . Parent=mRNA239 chr21 . intron 39642374 39642698 . - . Parent=mRNA239 chr21 gth exon 39642699 39642850 1.000000 - . Parent=mRNA239 ### chr21 gth gene 39674040 39691685 . + . ID=gene21 chr21 gth mRNA 39674040 39691685 . + . ID=mRNA240;Parent=gene21 chr21 gth exon 39674040 39674282 1.000000 + . Parent=mRNA240 chr21 . intron 39674283 39684493 . + . Parent=mRNA240 chr21 gth exon 39684494 39684659 1.000000 + . Parent=mRNA240 chr21 . intron 39684660 39685564 . + . Parent=mRNA240 chr21 gth exon 39685565 39685632 1.000000 + . Parent=mRNA240 chr21 . intron 39685633 39686961 . + . Parent=mRNA240 chr21 gth exon 39686962 39687076 1.000000 + . Parent=mRNA240 chr21 . intron 39687077 39690661 . + . Parent=mRNA240 chr21 gth exon 39690662 39691685 1.000000 + . Parent=mRNA240 chr21 gth mRNA 39674190 39685842 . + . ID=mRNA241;Parent=gene21 chr21 gth exon 39674190 39674282 1.000000 + . Parent=mRNA241 chr21 . intron 39674283 39684493 . + . Parent=mRNA241 chr21 gth exon 39684494 39684659 1.000000 + . Parent=mRNA241 chr21 . intron 39684660 39685564 . + . Parent=mRNA241 chr21 gth exon 39685565 39685842 1.000000 + . Parent=mRNA241 chr21 gth mRNA 39674210 39685001 . + . ID=mRNA242;Parent=gene21 chr21 gth exon 39674210 39674282 1.000000 + . Parent=mRNA242 chr21 . intron 39674283 39684493 . + . Parent=mRNA242 chr21 gth exon 39684494 39685001 1.000000 + . Parent=mRNA242 chr21 gth mRNA 39674254 39690912 . + . ID=mRNA243;Parent=gene21 chr21 gth exon 39674254 39674352 1.000000 + . Parent=mRNA243 chr21 . intron 39674353 39684493 . + . Parent=mRNA243 chr21 gth exon 39684494 39684659 1.000000 + . Parent=mRNA243 chr21 . intron 39684660 39685564 . + . Parent=mRNA243 chr21 gth exon 39685565 39685632 1.000000 + . Parent=mRNA243 chr21 . intron 39685633 39686961 . + . Parent=mRNA243 chr21 gth exon 39686962 39687076 1.000000 + . Parent=mRNA243 chr21 . intron 39687077 39690661 . + . Parent=mRNA243 chr21 gth exon 39690662 39690912 1.000000 + . Parent=mRNA243 chr21 gth mRNA 39674283 39684599 . + . ID=mRNA244;Parent=gene21 chr21 gth exon 39674283 39674717 1.000000 + . Parent=mRNA244 chr21 . intron 39674718 39684493 . + . Parent=mRNA244 chr21 gth exon 39684494 39684599 1.000000 + . Parent=mRNA244 chr21 gth mRNA 39679889 39687076 . + . ID=mRNA245;Parent=gene21 chr21 gth exon 39679889 39680307 1.000000 + . Parent=mRNA245 chr21 . intron 39680308 39684493 . + . Parent=mRNA245 chr21 gth exon 39684494 39684659 1.000000 + . Parent=mRNA245 chr21 . intron 39684660 39685564 . + . Parent=mRNA245 chr21 gth exon 39685565 39685632 1.000000 + . Parent=mRNA245 chr21 . intron 39685633 39686961 . + . Parent=mRNA245 chr21 gth exon 39686962 39687076 1.000000 + . Parent=mRNA245 chr21 gth mRNA 39681561 39691685 . + . ID=mRNA246;Parent=gene21 chr21 gth exon 39681561 39681651 1.000000 + . Parent=mRNA246 chr21 . intron 39681652 39684493 . + . Parent=mRNA246 chr21 gth exon 39684494 39684659 1.000000 + . Parent=mRNA246 chr21 . intron 39684660 39685564 . + . Parent=mRNA246 chr21 gth exon 39685565 39685632 1.000000 + . Parent=mRNA246 chr21 . intron 39685633 39686961 . + . Parent=mRNA246 chr21 gth exon 39686962 39687076 1.000000 + . Parent=mRNA246 chr21 . intron 39687077 39690661 . + . Parent=mRNA246 chr21 gth exon 39690662 39691685 1.000000 + . Parent=mRNA246 chr21 gth mRNA 39681587 39691050 . + . ID=mRNA247;Parent=gene21 chr21 gth exon 39681587 39681651 1.000000 + . Parent=mRNA247 chr21 . intron 39681652 39684493 . + . Parent=mRNA247 chr21 gth exon 39684494 39685272 1.000000 + . Parent=mRNA247 chr21 . intron 39685273 39685564 . + . Parent=mRNA247 chr21 gth exon 39685565 39685632 1.000000 + . Parent=mRNA247 chr21 . intron 39685633 39686961 . + . Parent=mRNA247 chr21 gth exon 39686962 39687076 1.000000 + . Parent=mRNA247 chr21 . intron 39687077 39690661 . + . Parent=mRNA247 chr21 gth exon 39690662 39691050 1.000000 + . Parent=mRNA247 chr21 gth mRNA 39686692 39690900 . + . ID=mRNA248;Parent=gene21 chr21 gth exon 39686692 39687076 1.000000 + . Parent=mRNA248 chr21 . intron 39687077 39690661 . + . Parent=mRNA248 chr21 gth exon 39690662 39690900 1.000000 + . Parent=mRNA248 ### chr21 gth gene 39699640 39739601 . - . ID=gene22 chr21 gth mRNA 39699640 39739573 . - . ID=mRNA249;Parent=gene22 chr21 gth exon 39699640 39700408 1.000000 - . Parent=mRNA249 chr21 . intron 39700409 39703774 . - . Parent=mRNA249 chr21 gth exon 39703775 39703892 1.000000 - . Parent=mRNA249 chr21 . intron 39703893 39704059 . - . Parent=mRNA249 chr21 gth exon 39704060 39704163 1.000000 - . Parent=mRNA249 chr21 . intron 39704164 39705513 . - . Parent=mRNA249 chr21 gth exon 39705514 39705598 1.000000 - . Parent=mRNA249 chr21 . intron 39705599 39714501 . - . Parent=mRNA249 chr21 gth exon 39714502 39714639 1.000000 - . Parent=mRNA249 chr21 . intron 39714640 39716771 . - . Parent=mRNA249 chr21 gth exon 39716772 39717286 1.000000 - . Parent=mRNA249 chr21 . intron 39717287 39721967 . - . Parent=mRNA249 chr21 gth exon 39721968 39722299 1.000000 - . Parent=mRNA249 chr21 . intron 39722300 39722926 . - . Parent=mRNA249 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA249 chr21 . intron 39723008 39729215 . - . Parent=mRNA249 chr21 gth exon 39729216 39729369 1.000000 - . Parent=mRNA249 chr21 . intron 39729370 39737930 . - . Parent=mRNA249 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA249 chr21 . intron 39737998 39739520 . - . Parent=mRNA249 chr21 gth exon 39739521 39739573 1.000000 - . Parent=mRNA249 chr21 gth mRNA 39699656 39739529 . - . ID=mRNA250;Parent=gene22 chr21 gth exon 39699656 39700408 1.000000 - . Parent=mRNA250 chr21 . intron 39700409 39703774 . - . Parent=mRNA250 chr21 gth exon 39703775 39703892 1.000000 - . Parent=mRNA250 chr21 . intron 39703893 39704059 . - . Parent=mRNA250 chr21 gth exon 39704060 39704163 1.000000 - . Parent=mRNA250 chr21 . intron 39704164 39705513 . - . Parent=mRNA250 chr21 gth exon 39705514 39705598 1.000000 - . Parent=mRNA250 chr21 . intron 39705599 39714501 . - . Parent=mRNA250 chr21 gth exon 39714502 39714639 1.000000 - . Parent=mRNA250 chr21 . intron 39714640 39716771 . - . Parent=mRNA250 chr21 gth exon 39716772 39717286 1.000000 - . Parent=mRNA250 chr21 . intron 39717287 39721967 . - . Parent=mRNA250 chr21 gth exon 39721968 39722299 1.000000 - . Parent=mRNA250 chr21 . intron 39722300 39722926 . - . Parent=mRNA250 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA250 chr21 . intron 39723008 39729215 . - . Parent=mRNA250 chr21 gth exon 39729216 39729369 1.000000 - . Parent=mRNA250 chr21 . intron 39729370 39739245 . - . Parent=mRNA250 chr21 gth exon 39739246 39739529 1.000000 - . Parent=mRNA250 chr21 gth mRNA 39699774 39704943 . - . ID=mRNA251;Parent=gene22 chr21 gth exon 39699774 39700408 1.000000 - . Parent=mRNA251 chr21 . intron 39700409 39703774 . - . Parent=mRNA251 chr21 gth exon 39703775 39703892 1.000000 - . Parent=mRNA251 chr21 . intron 39703893 39704059 . - . Parent=mRNA251 chr21 gth exon 39704060 39704163 1.000000 - . Parent=mRNA251 chr21 . intron 39704164 39704828 . - . Parent=mRNA251 chr21 gth exon 39704829 39704943 1.000000 - . Parent=mRNA251 chr21 gth mRNA 39705514 39739548 . - . ID=mRNA252;Parent=gene22 chr21 gth exon 39705514 39705598 1.000000 - . Parent=mRNA252 chr21 . intron 39705599 39714501 . - . Parent=mRNA252 chr21 gth exon 39714502 39714639 1.000000 - . Parent=mRNA252 chr21 . intron 39714640 39716771 . - . Parent=mRNA252 chr21 gth exon 39716772 39716882 0.990991 - . Parent=mRNA252 chr21 . intron 39716883 39729127 . - . Parent=mRNA252 chr21 gth exon 39729128 39729148 0.523810 - . Parent=mRNA252 chr21 . intron 39729149 39729215 . - . Parent=mRNA252 chr21 gth exon 39729216 39729369 1.000000 - . Parent=mRNA252 chr21 . intron 39729370 39729892 . - . Parent=mRNA252 chr21 gth exon 39729893 39729963 1.000000 - . Parent=mRNA252 chr21 . intron 39729964 39737930 . - . Parent=mRNA252 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA252 chr21 . intron 39737998 39739520 . - . Parent=mRNA252 chr21 gth exon 39739521 39739548 1.000000 - . Parent=mRNA252 chr21 gth mRNA 39715860 39732732 . - . ID=mRNA253;Parent=gene22 chr21 gth exon 39715860 39717714 0.999461 - . Parent=mRNA253 chr21 . intron 39717715 39721222 . - . Parent=mRNA253 chr21 gth exon 39721223 39722299 1.000000 - . Parent=mRNA253 chr21 . intron 39722300 39722926 . - . Parent=mRNA253 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA253 chr21 . intron 39723008 39732479 . - . Parent=mRNA253 chr21 gth exon 39732480 39732732 1.000000 - . Parent=mRNA253 chr21 gth mRNA 39716208 39739573 . - . ID=mRNA254;Parent=gene22 chr21 gth exon 39716208 39717286 1.000000 - . Parent=mRNA254 chr21 . intron 39717287 39721967 . - . Parent=mRNA254 chr21 gth exon 39721968 39722299 1.000000 - . Parent=mRNA254 chr21 . intron 39722300 39722926 . - . Parent=mRNA254 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA254 chr21 . intron 39723008 39729215 . - . Parent=mRNA254 chr21 gth exon 39729216 39729369 1.000000 - . Parent=mRNA254 chr21 . intron 39729370 39739520 . - . Parent=mRNA254 chr21 gth exon 39739521 39739573 1.000000 - . Parent=mRNA254 chr21 gth mRNA 39716208 39739601 . - . ID=mRNA255;Parent=gene22 chr21 gth exon 39716208 39717286 1.000000 - . Parent=mRNA255 chr21 . intron 39717287 39722926 . - . Parent=mRNA255 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA255 chr21 . intron 39723008 39737930 . - . Parent=mRNA255 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA255 chr21 . intron 39737998 39739520 . - . Parent=mRNA255 chr21 gth exon 39739521 39739601 1.000000 - . Parent=mRNA255 chr21 gth mRNA 39716784 39739557 . - . ID=mRNA256;Parent=gene22 chr21 gth exon 39716784 39717286 1.000000 - . Parent=mRNA256 chr21 . intron 39717287 39722926 . - . Parent=mRNA256 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA256 chr21 . intron 39723008 39729215 . - . Parent=mRNA256 chr21 gth exon 39729216 39729369 1.000000 - . Parent=mRNA256 chr21 . intron 39729370 39739520 . - . Parent=mRNA256 chr21 gth exon 39739521 39739557 1.000000 - . Parent=mRNA256 chr21 gth mRNA 39717036 39739571 . - . ID=mRNA257;Parent=gene22 chr21 gth exon 39717036 39717286 1.000000 - . Parent=mRNA257 chr21 . intron 39717287 39721554 . - . Parent=mRNA257 chr21 gth exon 39721555 39721701 1.000000 - . Parent=mRNA257 chr21 . intron 39721702 39722926 . - . Parent=mRNA257 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA257 chr21 . intron 39723008 39729215 . - . Parent=mRNA257 chr21 gth exon 39729216 39729369 1.000000 - . Parent=mRNA257 chr21 . intron 39729370 39737930 . - . Parent=mRNA257 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA257 chr21 . intron 39737998 39738439 . - . Parent=mRNA257 chr21 gth exon 39738440 39738541 1.000000 - . Parent=mRNA257 chr21 . intron 39738542 39739520 . - . Parent=mRNA257 chr21 gth exon 39739521 39739571 1.000000 - . Parent=mRNA257 chr21 gth mRNA 39717041 39739556 . - . ID=mRNA258;Parent=gene22 chr21 gth exon 39717041 39717286 1.000000 - . Parent=mRNA258 chr21 . intron 39717287 39721967 . - . Parent=mRNA258 chr21 gth exon 39721968 39722299 1.000000 - . Parent=mRNA258 chr21 . intron 39722300 39722926 . - . Parent=mRNA258 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA258 chr21 . intron 39723008 39729215 . - . Parent=mRNA258 chr21 gth exon 39729216 39729338 1.000000 - . Parent=mRNA258 chr21 . intron 39729339 39737930 . - . Parent=mRNA258 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA258 chr21 . intron 39737998 39739520 . - . Parent=mRNA258 chr21 gth exon 39739521 39739556 1.000000 - . Parent=mRNA258 chr21 gth mRNA 39717216 39739529 . - . ID=mRNA259;Parent=gene22 chr21 gth exon 39717216 39717286 1.000000 - . Parent=mRNA259 chr21 . intron 39717287 39722926 . - . Parent=mRNA259 chr21 gth exon 39722927 39723190 1.000000 - . Parent=mRNA259 chr21 . intron 39723191 39729215 . - . Parent=mRNA259 chr21 gth exon 39729216 39729338 1.000000 - . Parent=mRNA259 chr21 . intron 39729339 39737930 . - . Parent=mRNA259 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA259 chr21 . intron 39737998 39739245 . - . Parent=mRNA259 chr21 gth exon 39739246 39739529 1.000000 - . Parent=mRNA259 chr21 gth mRNA 39721968 39739574 . - . ID=mRNA260;Parent=gene22 chr21 gth exon 39721968 39722299 1.000000 - . Parent=mRNA260 chr21 . intron 39722300 39722926 . - . Parent=mRNA260 chr21 gth exon 39722927 39723190 1.000000 - . Parent=mRNA260 chr21 . intron 39723191 39729215 . - . Parent=mRNA260 chr21 gth exon 39729216 39729369 1.000000 - . Parent=mRNA260 chr21 . intron 39729370 39739520 . - . Parent=mRNA260 chr21 gth exon 39739521 39739574 1.000000 - . Parent=mRNA260 chr21 gth mRNA 39722004 39739599 . - . ID=mRNA261;Parent=gene22 chr21 gth exon 39722004 39722299 1.000000 - . Parent=mRNA261 chr21 . intron 39722300 39722926 . - . Parent=mRNA261 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA261 chr21 . intron 39723008 39737930 . - . Parent=mRNA261 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA261 chr21 . intron 39737998 39739520 . - . Parent=mRNA261 chr21 gth exon 39739521 39739599 1.000000 - . Parent=mRNA261 chr21 gth mRNA 39722006 39739515 . - . ID=mRNA262;Parent=gene22 chr21 gth exon 39722006 39722299 1.000000 - . Parent=mRNA262 chr21 . intron 39722300 39722926 . - . Parent=mRNA262 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA262 chr21 . intron 39723008 39732479 . - . Parent=mRNA262 chr21 gth exon 39732480 39732514 1.000000 - . Parent=mRNA262 chr21 . intron 39732515 39737930 . - . Parent=mRNA262 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA262 chr21 . intron 39737998 39738439 . - . Parent=mRNA262 chr21 gth exon 39738440 39738541 1.000000 - . Parent=mRNA262 chr21 . intron 39738542 39739245 . - . Parent=mRNA262 chr21 gth exon 39739246 39739515 1.000000 - . Parent=mRNA262 chr21 gth mRNA 39722081 39739565 . - . ID=mRNA263;Parent=gene22 chr21 gth exon 39722081 39722299 1.000000 - . Parent=mRNA263 chr21 . intron 39722300 39722926 . - . Parent=mRNA263 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA263 chr21 . intron 39723008 39729215 . - . Parent=mRNA263 chr21 gth exon 39729216 39729369 1.000000 - . Parent=mRNA263 chr21 . intron 39729370 39733429 . - . Parent=mRNA263 chr21 gth exon 39733430 39733569 1.000000 - . Parent=mRNA263 chr21 . intron 39733570 39737930 . - . Parent=mRNA263 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA263 chr21 . intron 39737998 39739520 . - . Parent=mRNA263 chr21 gth exon 39739521 39739565 1.000000 - . Parent=mRNA263 chr21 gth mRNA 39722101 39739565 . - . ID=mRNA264;Parent=gene22 chr21 gth exon 39722101 39722299 1.000000 - . Parent=mRNA264 chr21 . intron 39722300 39722926 . - . Parent=mRNA264 chr21 gth exon 39722927 39723007 1.000000 - . Parent=mRNA264 chr21 . intron 39723008 39729215 . - . Parent=mRNA264 chr21 gth exon 39729216 39729369 1.000000 - . Parent=mRNA264 chr21 . intron 39729370 39729892 . - . Parent=mRNA264 chr21 gth exon 39729893 39729963 1.000000 - . Parent=mRNA264 chr21 . intron 39729964 39733429 . - . Parent=mRNA264 chr21 gth exon 39733430 39733569 1.000000 - . Parent=mRNA264 chr21 . intron 39733570 39739520 . - . Parent=mRNA264 chr21 gth exon 39739521 39739565 1.000000 - . Parent=mRNA264 chr21 gth mRNA 39722198 39739576 . - . ID=mRNA265;Parent=gene22 chr21 gth exon 39722198 39722299 1.000000 - . Parent=mRNA265 chr21 . intron 39722300 39722926 . - . Parent=mRNA265 chr21 gth exon 39722927 39723190 1.000000 - . Parent=mRNA265 chr21 . intron 39723191 39729215 . - . Parent=mRNA265 chr21 gth exon 39729216 39729338 1.000000 - . Parent=mRNA265 chr21 . intron 39729339 39737930 . - . Parent=mRNA265 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA265 chr21 . intron 39737998 39739520 . - . Parent=mRNA265 chr21 gth exon 39739521 39739576 1.000000 - . Parent=mRNA265 chr21 gth mRNA 39722258 39739548 . - . ID=mRNA266;Parent=gene22 chr21 gth exon 39722258 39722299 1.000000 - . Parent=mRNA266 chr21 . intron 39722300 39722926 . - . Parent=mRNA266 chr21 gth exon 39722927 39723190 1.000000 - . Parent=mRNA266 chr21 . intron 39723191 39729215 . - . Parent=mRNA266 chr21 gth exon 39729216 39729369 1.000000 - . Parent=mRNA266 chr21 . intron 39729370 39737930 . - . Parent=mRNA266 chr21 gth exon 39737931 39737997 1.000000 - . Parent=mRNA266 chr21 . intron 39737998 39738439 . - . Parent=mRNA266 chr21 gth exon 39738440 39738541 1.000000 - . Parent=mRNA266 chr21 . intron 39738542 39739520 . - . Parent=mRNA266 chr21 gth exon 39739521 39739548 1.000000 - . Parent=mRNA266 chr21 gth mRNA 39737255 39739549 . - . ID=mRNA267;Parent=gene22 chr21 gth exon 39737255 39737997 1.000000 - . Parent=mRNA267 chr21 . intron 39737998 39739520 . - . Parent=mRNA267 chr21 gth exon 39739521 39739549 1.000000 - . Parent=mRNA267 ### chr21 gth gene 39739651 39739894 . + . ID=gene23 chr21 gth mRNA 39739651 39739894 . + . ID=mRNA268;Parent=gene23 chr21 gth exon 39739651 39739894 1.000000 + . Parent=mRNA268 ### genometools-1.5.1/testdata/gt_evalviz_test.reality000066400000000000000000011035671211610345200224760ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr21 32669578 39739894 chr21 ENCODE gene 32669578 32687206 . - . ID=gene1;Name=AP000266.110-001;name2=URB1 chr21 ENCODE exon 32669578 32669663 . - . Parent=gene1 chr21 . intron 32669664 32672624 . - . Parent=gene1 chr21 ENCODE exon 32672625 32672721 . - . Parent=gene1 chr21 . intron 32672722 32677601 . - . Parent=gene1 chr21 ENCODE exon 32677602 32677734 . - . Parent=gene1 chr21 . intron 32677735 32678492 . - . Parent=gene1 chr21 ENCODE exon 32678493 32678644 . - . Parent=gene1 chr21 . intron 32678645 32679724 . - . Parent=gene1 chr21 ENCODE exon 32679725 32679864 . - . Parent=gene1 chr21 . intron 32679865 32686948 . - . Parent=gene1 chr21 ENCODE exon 32686949 32687206 . - . Parent=gene1 ### chr21 ENCODE gene 32706185 32762234 . + . ID=gene2;Name=AP000272.65-004;name2=C21orf63 chr21 ENCODE exon 32706185 32707192 . + . Parent=gene2 chr21 . intron 32707193 32747490 . + . Parent=gene2 chr21 ENCODE exon 32747491 32747687 . + . Parent=gene2 chr21 . intron 32747688 32751775 . + . Parent=gene2 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene2 chr21 . intron 32751900 32761874 . + . Parent=gene2 chr21 ENCODE exon 32761875 32762234 . + . Parent=gene2 ### chr21 ENCODE gene 32706221 32795636 . + . ID=gene3;Name=AP000272.65-009;name2=C21orf63 chr21 ENCODE exon 32706221 32706372 . + . Parent=gene3 chr21 . intron 32706373 32747490 . + . Parent=gene3 chr21 ENCODE exon 32747491 32747687 . + . Parent=gene3 chr21 . intron 32747688 32761874 . + . Parent=gene3 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene3 chr21 . intron 32762028 32789207 . + . Parent=gene3 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene3 chr21 . intron 32789352 32795595 . + . Parent=gene3 chr21 ENCODE exon 32795596 32795636 . + . Parent=gene3 ### chr21 ENCODE gene 32706560 32809570 . + . ID=gene4;Name=AP000272.65-001;name2=C21orf63 chr21 ENCODE exon 32706560 32707192 . + . Parent=gene4 chr21 ENCODE CDS 32707033 32707192 . + . Parent=gene4 chr21 . intron 32707193 32747490 . + . Parent=gene4 chr21 ENCODE exon 32747491 32747687 . + . Parent=gene4 chr21 ENCODE CDS 32747491 32747687 . + . Parent=gene4 chr21 . intron 32747688 32751775 . + . Parent=gene4 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene4 chr21 ENCODE CDS 32751776 32751899 . + . Parent=gene4 chr21 . intron 32751900 32761874 . + . Parent=gene4 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene4 chr21 ENCODE CDS 32761875 32762027 . + . Parent=gene4 chr21 . intron 32762028 32789207 . + . Parent=gene4 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene4 chr21 ENCODE CDS 32789208 32789351 . + . Parent=gene4 chr21 . intron 32789352 32795595 . + . Parent=gene4 chr21 ENCODE exon 32795596 32795676 . + . Parent=gene4 chr21 ENCODE CDS 32795596 32795676 . + . Parent=gene4 chr21 . intron 32795677 32798106 . + . Parent=gene4 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene4 chr21 ENCODE CDS 32798107 32798196 . + . Parent=gene4 chr21 . intron 32798197 32808994 . + . Parent=gene4 chr21 ENCODE CDS 32808995 32809371 . + . Parent=gene4 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene4 ### chr21 ENCODE gene 32706616 32809570 . + . ID=gene5;Name=AP000272.65-007;name2=C21orf63 chr21 ENCODE exon 32706616 32707192 . + . Parent=gene5 chr21 . intron 32707193 32751775 . + . Parent=gene5 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene5 chr21 . intron 32751900 32761874 . + . Parent=gene5 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene5 chr21 . intron 32762028 32789207 . + . Parent=gene5 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene5 chr21 . intron 32789352 32795595 . + . Parent=gene5 chr21 ENCODE exon 32795596 32795676 . + . Parent=gene5 chr21 . intron 32795677 32798106 . + . Parent=gene5 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene5 chr21 . intron 32798197 32808994 . + . Parent=gene5 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene5 ### chr21 ENCODE gene 32706616 32809570 . + . ID=gene6;Name=AP000272.65-005;name2=C21orf63 chr21 ENCODE exon 32706616 32707192 . + . Parent=gene6 chr21 . intron 32707193 32751775 . + . Parent=gene6 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene6 chr21 . intron 32751900 32761874 . + . Parent=gene6 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene6 chr21 . intron 32762028 32795595 . + . Parent=gene6 chr21 ENCODE exon 32795596 32795676 . + . Parent=gene6 chr21 . intron 32795677 32798106 . + . Parent=gene6 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene6 chr21 . intron 32798197 32808994 . + . Parent=gene6 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene6 ### chr21 ENCODE gene 32706732 32809570 . + . ID=gene7;Name=AP000272.65-006;name2=C21orf63 chr21 ENCODE exon 32706732 32707192 . + . Parent=gene7 chr21 . intron 32707193 32761874 . + . Parent=gene7 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene7 chr21 . intron 32762028 32789207 . + . Parent=gene7 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene7 chr21 . intron 32789352 32795595 . + . Parent=gene7 chr21 ENCODE exon 32795596 32795719 . + . Parent=gene7 chr21 . intron 32795720 32798106 . + . Parent=gene7 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene7 chr21 . intron 32798197 32808994 . + . Parent=gene7 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene7 ### chr21 ENCODE gene 32706881 32809570 . + . ID=gene8;Name=AP000272.65-002;name2=C21orf63 chr21 ENCODE exon 32706881 32707192 . + . Parent=gene8 chr21 ENCODE CDS 32707033 32707192 . + . Parent=gene8 chr21 . intron 32707193 32747490 . + . Parent=gene8 chr21 ENCODE exon 32747491 32747687 . + . Parent=gene8 chr21 ENCODE CDS 32747491 32747687 . + . Parent=gene8 chr21 . intron 32747688 32751775 . + . Parent=gene8 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene8 chr21 ENCODE CDS 32751776 32751899 . + . Parent=gene8 chr21 . intron 32751900 32761874 . + . Parent=gene8 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene8 chr21 ENCODE CDS 32761875 32762027 . + . Parent=gene8 chr21 . intron 32762028 32789207 . + . Parent=gene8 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene8 chr21 ENCODE CDS 32789208 32789351 . + . Parent=gene8 chr21 . intron 32789352 32795595 . + . Parent=gene8 chr21 ENCODE exon 32795596 32795667 . + . Parent=gene8 chr21 ENCODE CDS 32795596 32795667 . + . Parent=gene8 chr21 . intron 32795668 32798106 . + . Parent=gene8 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene8 chr21 ENCODE CDS 32798107 32798196 . + . Parent=gene8 chr21 . intron 32798197 32808994 . + . Parent=gene8 chr21 ENCODE CDS 32808995 32809371 . + . Parent=gene8 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene8 ### chr21 ENCODE gene 32706943 32727463 . + . ID=gene9;Name=AP000272.65-010;name2=C21orf63 chr21 ENCODE exon 32706943 32707192 . + . Parent=gene9 chr21 . intron 32707193 32727329 . + . Parent=gene9 chr21 ENCODE exon 32727330 32727463 . + . Parent=gene9 ### chr21 ENCODE gene 32722513 32789318 . + . ID=gene10;Name=AP000272.65-008;name2=C21orf63 chr21 ENCODE exon 32722513 32722863 . + . Parent=gene10 chr21 . intron 32722864 32747490 . + . Parent=gene10 chr21 ENCODE exon 32747491 32747687 . + . Parent=gene10 chr21 ENCODE CDS 32747616 32747687 . + . Parent=gene10 chr21 . intron 32747688 32751775 . + . Parent=gene10 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene10 chr21 ENCODE CDS 32751776 32751899 . + . Parent=gene10 chr21 . intron 32751900 32761874 . + . Parent=gene10 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene10 chr21 ENCODE CDS 32761875 32762027 . + . Parent=gene10 chr21 . intron 32762028 32789207 . + . Parent=gene10 chr21 ENCODE exon 32789208 32789318 . + . Parent=gene10 chr21 ENCODE CDS 32789208 32789318 . + . Parent=gene10 ### chr21 ENCODE gene 32746364 32809570 . + . ID=gene11;Name=AP000272.65-003;name2=C21orf63 chr21 ENCODE exon 32746364 32747687 . + . Parent=gene11 chr21 . intron 32747688 32751775 . + . Parent=gene11 chr21 ENCODE exon 32751776 32751899 . + . Parent=gene11 chr21 . intron 32751900 32761874 . + . Parent=gene11 chr21 ENCODE exon 32761875 32762027 . + . Parent=gene11 chr21 . intron 32762028 32789207 . + . Parent=gene11 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene11 chr21 . intron 32789352 32795595 . + . Parent=gene11 chr21 ENCODE exon 32795596 32795676 . + . Parent=gene11 chr21 . intron 32795677 32798106 . + . Parent=gene11 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene11 chr21 . intron 32798197 32808994 . + . Parent=gene11 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene11 ### chr21 ENCODE gene 32787834 32809061 . + . ID=gene12;Name=AP000272.65-011;name2=C21orf63 chr21 ENCODE exon 32787834 32787943 . + . Parent=gene12 chr21 . intron 32787944 32789207 . + . Parent=gene12 chr21 ENCODE exon 32789208 32789351 . + . Parent=gene12 chr21 . intron 32789352 32795595 . + . Parent=gene12 chr21 ENCODE exon 32795596 32795676 . + . Parent=gene12 chr21 . intron 32795677 32798106 . + . Parent=gene12 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene12 chr21 . intron 32798197 32808994 . + . Parent=gene12 chr21 ENCODE exon 32808995 32809061 . + . Parent=gene12 ### chr21 ENCODE gene 32789298 32809570 . + . ID=gene13;Name=AP000272.65-012;name2=C21orf63 chr21 ENCODE exon 32789298 32789351 . + . Parent=gene13 chr21 . intron 32789352 32798106 . + . Parent=gene13 chr21 ENCODE exon 32798107 32798196 . + . Parent=gene13 chr21 . intron 32798197 32808994 . + . Parent=gene13 chr21 ENCODE exon 32808995 32809570 . + . Parent=gene13 ### chr21 ENCODE gene 32870733 32879714 . - . ID=gene14;Name=AP000274.7-001;name2=TCP10L chr21 ENCODE exon 32870733 32871104 . - . Parent=gene14 chr21 ENCODE CDS 32870955 32871104 . - . Parent=gene14 chr21 . intron 32871105 32872874 . - . Parent=gene14 chr21 ENCODE exon 32872875 32873012 . - . Parent=gene14 chr21 ENCODE CDS 32872875 32873012 . - . Parent=gene14 chr21 . intron 32873013 32876380 . - . Parent=gene14 chr21 ENCODE exon 32876381 32876596 . - . Parent=gene14 chr21 ENCODE CDS 32876381 32876596 . - . Parent=gene14 chr21 . intron 32876597 32878341 . - . Parent=gene14 chr21 ENCODE CDS 32878342 32878485 . - . Parent=gene14 chr21 ENCODE exon 32878342 32878486 . - . Parent=gene14 chr21 . intron 32878487 32879601 . - . Parent=gene14 chr21 ENCODE exon 32879602 32879714 . - . Parent=gene14 ### chr21 ENCODE gene 32870840 32876615 . - . ID=gene15;Name=AP000274.7-002;name2=TCP10L chr21 ENCODE exon 32870840 32871104 . - . Parent=gene15 chr21 . intron 32871105 32871606 . - . Parent=gene15 chr21 ENCODE exon 32871607 32871857 . - . Parent=gene15 chr21 . intron 32871858 32872874 . - . Parent=gene15 chr21 ENCODE exon 32872875 32873012 . - . Parent=gene15 chr21 . intron 32873013 32876380 . - . Parent=gene15 chr21 ENCODE exon 32876381 32876615 . - . Parent=gene15 ### chr21 ENCODE gene 32870840 32879714 . - . ID=gene16;Name=AP000274.7-003;name2=TCP10L chr21 ENCODE exon 32870840 32871104 . - . Parent=gene16 chr21 . intron 32871105 32872874 . - . Parent=gene16 chr21 ENCODE exon 32872875 32873012 . - . Parent=gene16 chr21 . intron 32873013 32876380 . - . Parent=gene16 chr21 ENCODE exon 32876381 32876596 . - . Parent=gene16 chr21 . intron 32876597 32879601 . - . Parent=gene16 chr21 ENCODE exon 32879602 32879714 . - . Parent=gene16 ### chr21 ENCODE gene 32873003 32906327 . - . ID=gene17;Name=AP000274.7-005;name2=TCP10L chr21 ENCODE exon 32873003 32873012 . - . Parent=gene17 chr21 ENCODE CDS 32873003 32873012 . - . Parent=gene17 chr21 . intron 32873013 32876380 . - . Parent=gene17 chr21 ENCODE exon 32876381 32876596 . - . Parent=gene17 chr21 ENCODE CDS 32876381 32876596 . - . Parent=gene17 chr21 . intron 32876597 32896452 . - . Parent=gene17 chr21 ENCODE exon 32896453 32896548 . - . Parent=gene17 chr21 ENCODE CDS 32896453 32896548 . - . Parent=gene17 chr21 . intron 32896549 32897341 . - . Parent=gene17 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene17 chr21 ENCODE CDS 32897342 32897473 . - . Parent=gene17 chr21 . intron 32897474 32898305 . - . Parent=gene17 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene17 chr21 ENCODE CDS 32898306 32898464 . - . Parent=gene17 chr21 . intron 32898465 32901829 . - . Parent=gene17 chr21 ENCODE exon 32901830 32901897 . - . Parent=gene17 chr21 ENCODE CDS 32901830 32901897 . - . Parent=gene17 chr21 . intron 32901898 32904018 . - . Parent=gene17 chr21 ENCODE exon 32904019 32904186 . - . Parent=gene17 chr21 ENCODE CDS 32904019 32904186 . - . Parent=gene17 chr21 . intron 32904187 32906285 . - . Parent=gene17 chr21 ENCODE exon 32906286 32906327 . - . Parent=gene17 chr21 ENCODE CDS 32906286 32906327 . - . Parent=gene17 ### chr21 ENCODE gene 32873004 32906462 . - . ID=gene18;Name=AP000274.7-004;name2=TCP10L chr21 ENCODE exon 32873004 32873012 . - . Parent=gene18 chr21 ENCODE CDS 32873004 32873012 . - . Parent=gene18 chr21 . intron 32873013 32876380 . - . Parent=gene18 chr21 ENCODE exon 32876381 32876596 . - . Parent=gene18 chr21 ENCODE CDS 32876381 32876596 . - . Parent=gene18 chr21 . intron 32876597 32897341 . - . Parent=gene18 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene18 chr21 ENCODE CDS 32897342 32897473 . - . Parent=gene18 chr21 . intron 32897474 32898305 . - . Parent=gene18 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene18 chr21 ENCODE CDS 32898306 32898464 . - . Parent=gene18 chr21 . intron 32898465 32901829 . - . Parent=gene18 chr21 ENCODE exon 32901830 32901897 . - . Parent=gene18 chr21 ENCODE CDS 32901830 32901897 . - . Parent=gene18 chr21 . intron 32901898 32904018 . - . Parent=gene18 chr21 ENCODE exon 32904019 32904186 . - . Parent=gene18 chr21 ENCODE CDS 32904019 32904186 . - . Parent=gene18 chr21 . intron 32904187 32906285 . - . Parent=gene18 chr21 ENCODE CDS 32906286 32906424 . - . Parent=gene18 chr21 ENCODE exon 32906286 32906462 . - . Parent=gene18 ### chr21 ENCODE gene 32876405 32901879 . - . ID=gene19;Name=AP000274.7-006;name2=TCP10L chr21 ENCODE exon 32876405 32876596 . - . Parent=gene19 chr21 ENCODE CDS 32876405 32876596 . - . Parent=gene19 chr21 . intron 32876597 32898305 . - . Parent=gene19 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene19 chr21 ENCODE CDS 32898306 32898464 . - . Parent=gene19 chr21 . intron 32898465 32901829 . - . Parent=gene19 chr21 ENCODE exon 32901830 32901879 . - . Parent=gene19 chr21 ENCODE CDS 32901830 32901879 . - . Parent=gene19 ### chr21 ENCODE gene 32886260 32897418 . - . ID=gene20;Name=AP000275.61-005;name2=C21orf59 chr21 ENCODE exon 32886260 32886599 . - . Parent=gene20 chr21 . intron 32886600 32897341 . - . Parent=gene20 chr21 ENCODE exon 32897342 32897418 . - . Parent=gene20 ### chr21 ENCODE gene 32895848 32898452 . - . ID=gene21;Name=AP000275.61-006;name2=C21orf59 chr21 ENCODE exon 32895848 32896154 . - . Parent=gene21 chr21 ENCODE CDS 32896044 32896154 . - . Parent=gene21 chr21 . intron 32896155 32897341 . - . Parent=gene21 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene21 chr21 ENCODE CDS 32897342 32897473 . - . Parent=gene21 chr21 . intron 32897474 32898305 . - . Parent=gene21 chr21 ENCODE exon 32898306 32898452 . - . Parent=gene21 chr21 ENCODE CDS 32898306 32898452 . - . Parent=gene21 ### chr21 ENCODE gene 32895848 32906767 . - . ID=gene22;Name=AP000275.61-002;name2=C21orf59 chr21 ENCODE exon 32895848 32897473 . - . Parent=gene22 chr21 ENCODE CDS 32897270 32897473 . - . Parent=gene22 chr21 . intron 32897474 32898305 . - . Parent=gene22 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene22 chr21 ENCODE CDS 32898306 32898464 . - . Parent=gene22 chr21 . intron 32898465 32901829 . - . Parent=gene22 chr21 ENCODE exon 32901830 32901897 . - . Parent=gene22 chr21 ENCODE CDS 32901830 32901897 . - . Parent=gene22 chr21 . intron 32901898 32904018 . - . Parent=gene22 chr21 ENCODE exon 32904019 32904186 . - . Parent=gene22 chr21 ENCODE CDS 32904019 32904186 . - . Parent=gene22 chr21 . intron 32904187 32906285 . - . Parent=gene22 chr21 ENCODE CDS 32906286 32906424 . - . Parent=gene22 chr21 ENCODE exon 32906286 32906767 . - . Parent=gene22 ### chr21 ENCODE gene 32895848 32907047 . - . ID=gene23;Name=AP000275.61-001;name2=C21orf59 chr21 ENCODE exon 32895848 32896154 . - . Parent=gene23 chr21 ENCODE CDS 32896044 32896154 . - . Parent=gene23 chr21 . intron 32896155 32896452 . - . Parent=gene23 chr21 ENCODE exon 32896453 32896548 . - . Parent=gene23 chr21 ENCODE CDS 32896453 32896548 . - . Parent=gene23 chr21 . intron 32896549 32897341 . - . Parent=gene23 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene23 chr21 ENCODE CDS 32897342 32897473 . - . Parent=gene23 chr21 . intron 32897474 32898305 . - . Parent=gene23 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene23 chr21 ENCODE CDS 32898306 32898464 . - . Parent=gene23 chr21 . intron 32898465 32901829 . - . Parent=gene23 chr21 ENCODE exon 32901830 32901897 . - . Parent=gene23 chr21 ENCODE CDS 32901830 32901897 . - . Parent=gene23 chr21 . intron 32901898 32904018 . - . Parent=gene23 chr21 ENCODE exon 32904019 32904186 . - . Parent=gene23 chr21 ENCODE CDS 32904019 32904186 . - . Parent=gene23 chr21 . intron 32904187 32906285 . - . Parent=gene23 chr21 ENCODE CDS 32906286 32906424 . - . Parent=gene23 chr21 ENCODE exon 32906286 32907047 . - . Parent=gene23 ### chr21 ENCODE gene 32895884 32898381 . - . ID=gene24;Name=AP000275.61-004;name2=C21orf59 chr21 ENCODE exon 32895884 32896548 . - . Parent=gene24 chr21 . intron 32896549 32897341 . - . Parent=gene24 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene24 chr21 . intron 32897474 32898305 . - . Parent=gene24 chr21 ENCODE exon 32898306 32898381 . - . Parent=gene24 ### chr21 ENCODE gene 32895966 32906784 . - . ID=gene25;Name=AP000275.61-003;name2=C21orf59 chr21 ENCODE exon 32895966 32896154 . - . Parent=gene25 chr21 . intron 32896155 32896452 . - . Parent=gene25 chr21 ENCODE exon 32896453 32896548 . - . Parent=gene25 chr21 . intron 32896549 32897341 . - . Parent=gene25 chr21 ENCODE exon 32897342 32897473 . - . Parent=gene25 chr21 . intron 32897474 32898305 . - . Parent=gene25 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene25 chr21 . intron 32898465 32904018 . - . Parent=gene25 chr21 ENCODE exon 32904019 32904186 . - . Parent=gene25 chr21 . intron 32904187 32906285 . - . Parent=gene25 chr21 ENCODE exon 32906286 32906784 . - . Parent=gene25 ### chr21 ENCODE gene 32895991 32898694 . - . ID=gene26;Name=AP000275.61-008;name2=C21orf59 chr21 ENCODE exon 32895991 32897473 . - . Parent=gene26 chr21 . intron 32897474 32898305 . - . Parent=gene26 chr21 ENCODE exon 32898306 32898694 . - . Parent=gene26 ### chr21 ENCODE gene 32897406 32906736 . - . ID=gene27;Name=AP000275.61-007;name2=C21orf59 chr21 ENCODE exon 32897406 32897473 . - . Parent=gene27 chr21 ENCODE CDS 32897406 32897473 . - . Parent=gene27 chr21 . intron 32897474 32898305 . - . Parent=gene27 chr21 ENCODE exon 32898306 32898464 . - . Parent=gene27 chr21 ENCODE CDS 32898306 32898464 . - . Parent=gene27 chr21 . intron 32898465 32901829 . - . Parent=gene27 chr21 ENCODE exon 32901830 32901897 . - . Parent=gene27 chr21 ENCODE CDS 32901830 32901897 . - . Parent=gene27 chr21 . intron 32901898 32904018 . - . Parent=gene27 chr21 ENCODE exon 32904019 32904135 . - . Parent=gene27 chr21 ENCODE CDS 32904019 32904135 . - . Parent=gene27 chr21 . intron 32904136 32906285 . - . Parent=gene27 chr21 ENCODE CDS 32906286 32906424 . - . Parent=gene27 chr21 ENCODE exon 32906286 32906736 . - . Parent=gene27 ### chr21 ENCODE gene 32922944 33022105 . - . ID=gene28;Name=AP000275.63-003;name2=SYNJ1 chr21 ENCODE exon 32922944 32925982 . - . Parent=gene28 chr21 . intron 32925983 32929041 . - . Parent=gene28 chr21 ENCODE exon 32929042 32929065 . - . Parent=gene28 chr21 . intron 32929066 32933088 . - . Parent=gene28 chr21 ENCODE exon 32933089 32933306 . - . Parent=gene28 chr21 . intron 32933307 32933851 . - . Parent=gene28 chr21 ENCODE exon 32933852 32933960 . - . Parent=gene28 chr21 . intron 32933961 32936076 . - . Parent=gene28 chr21 ENCODE exon 32936077 32936147 . - . Parent=gene28 chr21 . intron 32936148 32936275 . - . Parent=gene28 chr21 ENCODE exon 32936276 32936314 . - . Parent=gene28 chr21 . intron 32936315 32939148 . - . Parent=gene28 chr21 ENCODE exon 32939149 32939187 . - . Parent=gene28 chr21 . intron 32939188 32939826 . - . Parent=gene28 chr21 ENCODE exon 32939827 32939891 . - . Parent=gene28 chr21 . intron 32939892 32939939 . - . Parent=gene28 chr21 ENCODE exon 32939940 32939970 . - . Parent=gene28 chr21 . intron 32939971 32940573 . - . Parent=gene28 chr21 ENCODE exon 32940574 32940783 . - . Parent=gene28 chr21 . intron 32940784 32944364 . - . Parent=gene28 chr21 ENCODE exon 32944365 32944527 . - . Parent=gene28 chr21 . intron 32944528 32947468 . - . Parent=gene28 chr21 ENCODE exon 32947469 32947547 . - . Parent=gene28 chr21 . intron 32947548 32950867 . - . Parent=gene28 chr21 ENCODE exon 32950868 32951083 . - . Parent=gene28 chr21 . intron 32951084 32951183 . - . Parent=gene28 chr21 ENCODE exon 32951184 32951301 . - . Parent=gene28 chr21 . intron 32951302 32951896 . - . Parent=gene28 chr21 ENCODE exon 32951897 32952053 . - . Parent=gene28 chr21 . intron 32952054 32959093 . - . Parent=gene28 chr21 ENCODE exon 32959094 32959252 . - . Parent=gene28 chr21 . intron 32959253 32960123 . - . Parent=gene28 chr21 ENCODE exon 32960124 32960316 . - . Parent=gene28 chr21 . intron 32960317 32960613 . - . Parent=gene28 chr21 ENCODE exon 32960614 32960754 . - . Parent=gene28 chr21 . intron 32960755 32964468 . - . Parent=gene28 chr21 ENCODE exon 32964469 32964553 . - . Parent=gene28 chr21 . intron 32964554 32967520 . - . Parent=gene28 chr21 ENCODE exon 32967521 32967712 . - . Parent=gene28 chr21 . intron 32967713 32970512 . - . Parent=gene28 chr21 ENCODE exon 32970513 32970536 . - . Parent=gene28 chr21 . intron 32970537 32972825 . - . Parent=gene28 chr21 ENCODE exon 32972826 32972982 . - . Parent=gene28 chr21 . intron 32972983 32975676 . - . Parent=gene28 chr21 ENCODE exon 32975677 32975829 . - . Parent=gene28 chr21 . intron 32975830 32978218 . - . Parent=gene28 chr21 ENCODE exon 32978219 32978300 . - . Parent=gene28 chr21 . intron 32978301 32979928 . - . Parent=gene28 chr21 ENCODE exon 32979929 32980098 . - . Parent=gene28 chr21 . intron 32980099 32981158 . - . Parent=gene28 chr21 ENCODE exon 32981159 32981255 . - . Parent=gene28 chr21 . intron 32981256 32982486 . - . Parent=gene28 chr21 ENCODE exon 32982487 32982548 . - . Parent=gene28 chr21 . intron 32982549 32988408 . - . Parent=gene28 chr21 ENCODE exon 32988409 32988492 . - . Parent=gene28 chr21 . intron 32988493 32989237 . - . Parent=gene28 chr21 ENCODE exon 32989238 32989463 . - . Parent=gene28 chr21 . intron 32989464 32994018 . - . Parent=gene28 chr21 ENCODE exon 32994019 32994286 . - . Parent=gene28 chr21 . intron 32994287 32996141 . - . Parent=gene28 chr21 ENCODE exon 32996142 32996228 . - . Parent=gene28 chr21 . intron 32996229 33020953 . - . Parent=gene28 chr21 ENCODE exon 33020954 33021099 . - . Parent=gene28 chr21 . intron 33021100 33022018 . - . Parent=gene28 chr21 ENCODE exon 33022019 33022105 . - . Parent=gene28 ### chr21 ENCODE gene 32922945 33022183 . - . ID=gene29;Name=AP000275.63-001;name2=SYNJ1 chr21 ENCODE exon 32922945 32925982 . - . Parent=gene29 chr21 . intron 32925983 32929041 . - . Parent=gene29 chr21 ENCODE exon 32929042 32929065 . - . Parent=gene29 chr21 ENCODE CDS 32929045 32929065 . - . Parent=gene29 chr21 . intron 32929066 32933088 . - . Parent=gene29 chr21 ENCODE exon 32933089 32933306 . - . Parent=gene29 chr21 ENCODE CDS 32933089 32933306 . - . Parent=gene29 chr21 . intron 32933307 32933851 . - . Parent=gene29 chr21 ENCODE exon 32933852 32933960 . - . Parent=gene29 chr21 ENCODE CDS 32933852 32933960 . - . Parent=gene29 chr21 . intron 32933961 32936076 . - . Parent=gene29 chr21 ENCODE exon 32936077 32936147 . - . Parent=gene29 chr21 ENCODE CDS 32936077 32936147 . - . Parent=gene29 chr21 . intron 32936148 32936275 . - . Parent=gene29 chr21 ENCODE exon 32936276 32936314 . - . Parent=gene29 chr21 ENCODE CDS 32936276 32936314 . - . Parent=gene29 chr21 . intron 32936315 32937590 . - . Parent=gene29 chr21 ENCODE exon 32937591 32937638 . - . Parent=gene29 chr21 ENCODE CDS 32937591 32937638 . - . Parent=gene29 chr21 . intron 32937639 32939148 . - . Parent=gene29 chr21 ENCODE exon 32939149 32939187 . - . Parent=gene29 chr21 ENCODE CDS 32939149 32939187 . - . Parent=gene29 chr21 . intron 32939188 32939826 . - . Parent=gene29 chr21 ENCODE exon 32939827 32939970 . - . Parent=gene29 chr21 ENCODE CDS 32939827 32939970 . - . Parent=gene29 chr21 . intron 32939971 32940573 . - . Parent=gene29 chr21 ENCODE exon 32940574 32940783 . - . Parent=gene29 chr21 ENCODE CDS 32940574 32940783 . - . Parent=gene29 chr21 . intron 32940784 32944364 . - . Parent=gene29 chr21 ENCODE exon 32944365 32944527 . - . Parent=gene29 chr21 ENCODE CDS 32944365 32944527 . - . Parent=gene29 chr21 . intron 32944528 32947468 . - . Parent=gene29 chr21 ENCODE exon 32947469 32947547 . - . Parent=gene29 chr21 ENCODE CDS 32947469 32947547 . - . Parent=gene29 chr21 . intron 32947548 32950867 . - . Parent=gene29 chr21 ENCODE exon 32950868 32951083 . - . Parent=gene29 chr21 ENCODE CDS 32950868 32951083 . - . Parent=gene29 chr21 . intron 32951084 32951183 . - . Parent=gene29 chr21 ENCODE exon 32951184 32951301 . - . Parent=gene29 chr21 ENCODE CDS 32951184 32951301 . - . Parent=gene29 chr21 . intron 32951302 32951896 . - . Parent=gene29 chr21 ENCODE exon 32951897 32952053 . - . Parent=gene29 chr21 ENCODE CDS 32951897 32952053 . - . Parent=gene29 chr21 . intron 32952054 32959093 . - . Parent=gene29 chr21 ENCODE exon 32959094 32959252 . - . Parent=gene29 chr21 ENCODE CDS 32959094 32959252 . - . Parent=gene29 chr21 . intron 32959253 32960123 . - . Parent=gene29 chr21 ENCODE exon 32960124 32960316 . - . Parent=gene29 chr21 ENCODE CDS 32960124 32960316 . - . Parent=gene29 chr21 . intron 32960317 32960613 . - . Parent=gene29 chr21 ENCODE exon 32960614 32960754 . - . Parent=gene29 chr21 ENCODE CDS 32960614 32960754 . - . Parent=gene29 chr21 . intron 32960755 32964468 . - . Parent=gene29 chr21 ENCODE exon 32964469 32964553 . - . Parent=gene29 chr21 ENCODE CDS 32964469 32964553 . - . Parent=gene29 chr21 . intron 32964554 32967520 . - . Parent=gene29 chr21 ENCODE exon 32967521 32967712 . - . Parent=gene29 chr21 ENCODE CDS 32967521 32967712 . - . Parent=gene29 chr21 . intron 32967713 32970512 . - . Parent=gene29 chr21 ENCODE exon 32970513 32970536 . - . Parent=gene29 chr21 ENCODE CDS 32970513 32970536 . - . Parent=gene29 chr21 . intron 32970537 32972825 . - . Parent=gene29 chr21 ENCODE exon 32972826 32972982 . - . Parent=gene29 chr21 ENCODE CDS 32972826 32972982 . - . Parent=gene29 chr21 . intron 32972983 32975676 . - . Parent=gene29 chr21 ENCODE exon 32975677 32975829 . - . Parent=gene29 chr21 ENCODE CDS 32975677 32975829 . - . Parent=gene29 chr21 . intron 32975830 32978218 . - . Parent=gene29 chr21 ENCODE exon 32978219 32978300 . - . Parent=gene29 chr21 ENCODE CDS 32978219 32978300 . - . Parent=gene29 chr21 . intron 32978301 32979928 . - . Parent=gene29 chr21 ENCODE exon 32979929 32980098 . - . Parent=gene29 chr21 ENCODE CDS 32979929 32980098 . - . Parent=gene29 chr21 . intron 32980099 32981158 . - . Parent=gene29 chr21 ENCODE exon 32981159 32981255 . - . Parent=gene29 chr21 ENCODE CDS 32981159 32981255 . - . Parent=gene29 chr21 . intron 32981256 32982486 . - . Parent=gene29 chr21 ENCODE exon 32982487 32982548 . - . Parent=gene29 chr21 ENCODE CDS 32982487 32982548 . - . Parent=gene29 chr21 . intron 32982549 32988408 . - . Parent=gene29 chr21 ENCODE exon 32988409 32988492 . - . Parent=gene29 chr21 ENCODE CDS 32988409 32988492 . - . Parent=gene29 chr21 . intron 32988493 32989237 . - . Parent=gene29 chr21 ENCODE exon 32989238 32989463 . - . Parent=gene29 chr21 ENCODE CDS 32989238 32989463 . - . Parent=gene29 chr21 . intron 32989464 32994018 . - . Parent=gene29 chr21 ENCODE exon 32994019 32994286 . - . Parent=gene29 chr21 ENCODE CDS 32994019 32994286 . - . Parent=gene29 chr21 . intron 32994287 32996141 . - . Parent=gene29 chr21 ENCODE exon 32996142 32996228 . - . Parent=gene29 chr21 ENCODE CDS 32996142 32996228 . - . Parent=gene29 chr21 . intron 32996229 33020953 . - . Parent=gene29 chr21 ENCODE CDS 33020954 33021077 . - . Parent=gene29 chr21 ENCODE exon 33020954 33021099 . - . Parent=gene29 chr21 . intron 33021100 33022127 . - . Parent=gene29 chr21 ENCODE exon 33022128 33022183 . - . Parent=gene29 ### chr21 ENCODE gene 32925171 33022148 . - . ID=gene30;Name=AP000275.63-004;name2=SYNJ1 chr21 ENCODE exon 32925171 32925982 . - . Parent=gene30 chr21 ENCODE CDS 32925176 32925982 . - . Parent=gene30 chr21 . intron 32925983 32933088 . - . Parent=gene30 chr21 ENCODE exon 32933089 32933306 . - . Parent=gene30 chr21 ENCODE CDS 32933089 32933306 . - . Parent=gene30 chr21 . intron 32933307 32933851 . - . Parent=gene30 chr21 ENCODE exon 32933852 32933960 . - . Parent=gene30 chr21 ENCODE CDS 32933852 32933960 . - . Parent=gene30 chr21 . intron 32933961 32936076 . - . Parent=gene30 chr21 ENCODE exon 32936077 32936147 . - . Parent=gene30 chr21 ENCODE CDS 32936077 32936147 . - . Parent=gene30 chr21 . intron 32936148 32936275 . - . Parent=gene30 chr21 ENCODE exon 32936276 32936314 . - . Parent=gene30 chr21 ENCODE CDS 32936276 32936314 . - . Parent=gene30 chr21 . intron 32936315 32937590 . - . Parent=gene30 chr21 ENCODE exon 32937591 32937638 . - . Parent=gene30 chr21 ENCODE CDS 32937591 32937638 . - . Parent=gene30 chr21 . intron 32937639 32939148 . - . Parent=gene30 chr21 ENCODE exon 32939149 32939187 . - . Parent=gene30 chr21 ENCODE CDS 32939149 32939187 . - . Parent=gene30 chr21 . intron 32939188 32939826 . - . Parent=gene30 chr21 ENCODE exon 32939827 32939970 . - . Parent=gene30 chr21 ENCODE CDS 32939827 32939970 . - . Parent=gene30 chr21 . intron 32939971 32940573 . - . Parent=gene30 chr21 ENCODE exon 32940574 32940783 . - . Parent=gene30 chr21 ENCODE CDS 32940574 32940783 . - . Parent=gene30 chr21 . intron 32940784 32944364 . - . Parent=gene30 chr21 ENCODE exon 32944365 32944527 . - . Parent=gene30 chr21 ENCODE CDS 32944365 32944527 . - . Parent=gene30 chr21 . intron 32944528 32947468 . - . Parent=gene30 chr21 ENCODE exon 32947469 32947547 . - . Parent=gene30 chr21 ENCODE CDS 32947469 32947547 . - . Parent=gene30 chr21 . intron 32947548 32950867 . - . Parent=gene30 chr21 ENCODE exon 32950868 32951083 . - . Parent=gene30 chr21 ENCODE CDS 32950868 32951083 . - . Parent=gene30 chr21 . intron 32951084 32951183 . - . Parent=gene30 chr21 ENCODE exon 32951184 32951301 . - . Parent=gene30 chr21 ENCODE CDS 32951184 32951301 . - . Parent=gene30 chr21 . intron 32951302 32951896 . - . Parent=gene30 chr21 ENCODE exon 32951897 32952053 . - . Parent=gene30 chr21 ENCODE CDS 32951897 32952053 . - . Parent=gene30 chr21 . intron 32952054 32959093 . - . Parent=gene30 chr21 ENCODE exon 32959094 32959252 . - . Parent=gene30 chr21 ENCODE CDS 32959094 32959252 . - . Parent=gene30 chr21 . intron 32959253 32960123 . - . Parent=gene30 chr21 ENCODE exon 32960124 32960316 . - . Parent=gene30 chr21 ENCODE CDS 32960124 32960316 . - . Parent=gene30 chr21 . intron 32960317 32960613 . - . Parent=gene30 chr21 ENCODE exon 32960614 32960754 . - . Parent=gene30 chr21 ENCODE CDS 32960614 32960754 . - . Parent=gene30 chr21 . intron 32960755 32964468 . - . Parent=gene30 chr21 ENCODE exon 32964469 32964553 . - . Parent=gene30 chr21 ENCODE CDS 32964469 32964553 . - . Parent=gene30 chr21 . intron 32964554 32967520 . - . Parent=gene30 chr21 ENCODE exon 32967521 32967712 . - . Parent=gene30 chr21 ENCODE CDS 32967521 32967712 . - . Parent=gene30 chr21 . intron 32967713 32970512 . - . Parent=gene30 chr21 ENCODE exon 32970513 32970536 . - . Parent=gene30 chr21 ENCODE CDS 32970513 32970536 . - . Parent=gene30 chr21 . intron 32970537 32972825 . - . Parent=gene30 chr21 ENCODE exon 32972826 32972982 . - . Parent=gene30 chr21 ENCODE CDS 32972826 32972982 . - . Parent=gene30 chr21 . intron 32972983 32975676 . - . Parent=gene30 chr21 ENCODE exon 32975677 32975829 . - . Parent=gene30 chr21 ENCODE CDS 32975677 32975829 . - . Parent=gene30 chr21 . intron 32975830 32978218 . - . Parent=gene30 chr21 ENCODE exon 32978219 32978300 . - . Parent=gene30 chr21 ENCODE CDS 32978219 32978300 . - . Parent=gene30 chr21 . intron 32978301 32979928 . - . Parent=gene30 chr21 ENCODE exon 32979929 32980098 . - . Parent=gene30 chr21 ENCODE CDS 32979929 32980098 . - . Parent=gene30 chr21 . intron 32980099 32981158 . - . Parent=gene30 chr21 ENCODE exon 32981159 32981255 . - . Parent=gene30 chr21 ENCODE CDS 32981159 32981255 . - . Parent=gene30 chr21 . intron 32981256 32982486 . - . Parent=gene30 chr21 ENCODE exon 32982487 32982548 . - . Parent=gene30 chr21 ENCODE CDS 32982487 32982548 . - . Parent=gene30 chr21 . intron 32982549 32988408 . - . Parent=gene30 chr21 ENCODE exon 32988409 32988492 . - . Parent=gene30 chr21 ENCODE CDS 32988409 32988492 . - . Parent=gene30 chr21 . intron 32988493 32989237 . - . Parent=gene30 chr21 ENCODE exon 32989238 32989463 . - . Parent=gene30 chr21 ENCODE CDS 32989238 32989463 . - . Parent=gene30 chr21 . intron 32989464 32994018 . - . Parent=gene30 chr21 ENCODE exon 32994019 32994286 . - . Parent=gene30 chr21 ENCODE CDS 32994019 32994286 . - . Parent=gene30 chr21 . intron 32994287 32996141 . - . Parent=gene30 chr21 ENCODE exon 32996142 32996228 . - . Parent=gene30 chr21 ENCODE CDS 32996142 32996228 . - . Parent=gene30 chr21 . intron 32996229 33020953 . - . Parent=gene30 chr21 ENCODE CDS 33020954 33021077 . - . Parent=gene30 chr21 ENCODE exon 33020954 33021099 . - . Parent=gene30 chr21 . intron 33021100 33022127 . - . Parent=gene30 chr21 ENCODE exon 33022128 33022148 . - . Parent=gene30 ### chr21 ENCODE gene 32933195 32939900 . - . ID=gene31;Name=AP000275.63-008;name2=SYNJ1 chr21 ENCODE exon 32933195 32933306 . - . Parent=gene31 chr21 ENCODE CDS 32933195 32933306 . - . Parent=gene31 chr21 . intron 32933307 32933851 . - . Parent=gene31 chr21 ENCODE exon 32933852 32933960 . - . Parent=gene31 chr21 ENCODE CDS 32933852 32933960 . - . Parent=gene31 chr21 . intron 32933961 32936076 . - . Parent=gene31 chr21 ENCODE exon 32936077 32936147 . - . Parent=gene31 chr21 ENCODE CDS 32936077 32936147 . - . Parent=gene31 chr21 . intron 32936148 32939826 . - . Parent=gene31 chr21 ENCODE exon 32939827 32939900 . - . Parent=gene31 chr21 ENCODE CDS 32939827 32939900 . - . Parent=gene31 ### chr21 ENCODE gene 32944365 32948282 . - . ID=gene32;Name=AP000275.63-005;name2=SYNJ1 chr21 ENCODE exon 32944365 32944527 . - . Parent=gene32 chr21 . intron 32944528 32947468 . - . Parent=gene32 chr21 ENCODE exon 32947469 32948282 . - . Parent=gene32 ### chr21 ENCODE gene 32950872 32952742 . - . ID=gene33;Name=AP000275.63-007;name2=SYNJ1 chr21 ENCODE exon 32950872 32951083 . - . Parent=gene33 chr21 . intron 32951084 32951183 . - . Parent=gene33 chr21 ENCODE exon 32951184 32951301 . - . Parent=gene33 chr21 . intron 32951302 32951896 . - . Parent=gene33 chr21 ENCODE exon 32951897 32952053 . - . Parent=gene33 chr21 . intron 32952054 32952651 . - . Parent=gene33 chr21 ENCODE exon 32952652 32952742 . - . Parent=gene33 ### chr21 ENCODE gene 32960167 33022121 . - . ID=gene34;Name=AP000275.63-002;name2=SYNJ1 chr21 ENCODE exon 32960167 32960316 . - . Parent=gene34 chr21 ENCODE CDS 32960167 32960316 . - . Parent=gene34 chr21 . intron 32960317 32960613 . - . Parent=gene34 chr21 ENCODE exon 32960614 32960754 . - . Parent=gene34 chr21 ENCODE CDS 32960614 32960754 . - . Parent=gene34 chr21 . intron 32960755 32964468 . - . Parent=gene34 chr21 ENCODE exon 32964469 32964553 . - . Parent=gene34 chr21 ENCODE CDS 32964469 32964553 . - . Parent=gene34 chr21 . intron 32964554 32967520 . - . Parent=gene34 chr21 ENCODE exon 32967521 32967712 . - . Parent=gene34 chr21 ENCODE CDS 32967521 32967712 . - . Parent=gene34 chr21 . intron 32967713 32972825 . - . Parent=gene34 chr21 ENCODE exon 32972826 32972991 . - . Parent=gene34 chr21 ENCODE CDS 32972826 32972991 . - . Parent=gene34 chr21 . intron 32972992 32975676 . - . Parent=gene34 chr21 ENCODE exon 32975677 32975829 . - . Parent=gene34 chr21 ENCODE CDS 32975677 32975829 . - . Parent=gene34 chr21 . intron 32975830 32978218 . - . Parent=gene34 chr21 ENCODE exon 32978219 32978300 . - . Parent=gene34 chr21 ENCODE CDS 32978219 32978300 . - . Parent=gene34 chr21 . intron 32978301 32979928 . - . Parent=gene34 chr21 ENCODE exon 32979929 32980098 . - . Parent=gene34 chr21 ENCODE CDS 32979929 32980098 . - . Parent=gene34 chr21 . intron 32980099 32981158 . - . Parent=gene34 chr21 ENCODE exon 32981159 32981255 . - . Parent=gene34 chr21 ENCODE CDS 32981159 32981255 . - . Parent=gene34 chr21 . intron 32981256 32982486 . - . Parent=gene34 chr21 ENCODE exon 32982487 32982548 . - . Parent=gene34 chr21 ENCODE CDS 32982487 32982548 . - . Parent=gene34 chr21 . intron 32982549 32988408 . - . Parent=gene34 chr21 ENCODE exon 32988409 32988492 . - . Parent=gene34 chr21 ENCODE CDS 32988409 32988492 . - . Parent=gene34 chr21 . intron 32988493 32989237 . - . Parent=gene34 chr21 ENCODE exon 32989238 32989463 . - . Parent=gene34 chr21 ENCODE CDS 32989238 32989463 . - . Parent=gene34 chr21 . intron 32989464 32994018 . - . Parent=gene34 chr21 ENCODE exon 32994019 32994286 . - . Parent=gene34 chr21 ENCODE CDS 32994019 32994286 . - . Parent=gene34 chr21 . intron 32994287 32996141 . - . Parent=gene34 chr21 ENCODE exon 32996142 32996228 . - . Parent=gene34 chr21 ENCODE CDS 32996142 32996228 . - . Parent=gene34 chr21 . intron 32996229 33020953 . - . Parent=gene34 chr21 ENCODE CDS 33020954 33021077 . - . Parent=gene34 chr21 ENCODE exon 33020954 33021099 . - . Parent=gene34 chr21 . intron 33021100 33022018 . - . Parent=gene34 chr21 ENCODE exon 33022019 33022121 . - . Parent=gene34 ### chr21 ENCODE gene 32989407 33021124 . - . ID=gene35;Name=AP000275.63-006;name2=SYNJ1 chr21 ENCODE exon 32989407 32989463 . - . Parent=gene35 chr21 ENCODE CDS 32989407 32989463 . - . Parent=gene35 chr21 . intron 32989464 32994018 . - . Parent=gene35 chr21 ENCODE exon 32994019 32994286 . - . Parent=gene35 chr21 ENCODE CDS 32994019 32994286 . - . Parent=gene35 chr21 . intron 32994287 32996141 . - . Parent=gene35 chr21 ENCODE exon 32996142 32996228 . - . Parent=gene35 chr21 ENCODE CDS 32996142 32996228 . - . Parent=gene35 chr21 . intron 32996229 33020953 . - . Parent=gene35 chr21 ENCODE CDS 33020954 33021077 . - . Parent=gene35 chr21 ENCODE exon 33020954 33021124 . - . Parent=gene35 ### chr21 ENCODE gene 33028081 33066040 . - . ID=gene36;Name=AP000279.68-001;name2=C21orf66 chr21 ENCODE exon 33028081 33029249 . - . Parent=gene36 chr21 ENCODE CDS 33029132 33029249 . - . Parent=gene36 chr21 . intron 33029250 33031435 . - . Parent=gene36 chr21 ENCODE exon 33031436 33031590 . - . Parent=gene36 chr21 ENCODE CDS 33031436 33031590 . - . Parent=gene36 chr21 . intron 33031591 33032354 . - . Parent=gene36 chr21 ENCODE exon 33032355 33032501 . - . Parent=gene36 chr21 ENCODE CDS 33032355 33032501 . - . Parent=gene36 chr21 . intron 33032502 33037429 . - . Parent=gene36 chr21 ENCODE exon 33037430 33037496 . - . Parent=gene36 chr21 ENCODE CDS 33037430 33037496 . - . Parent=gene36 chr21 . intron 33037497 33037859 . - . Parent=gene36 chr21 ENCODE exon 33037860 33037936 . - . Parent=gene36 chr21 ENCODE CDS 33037860 33037936 . - . Parent=gene36 chr21 . intron 33037937 33038973 . - . Parent=gene36 chr21 ENCODE exon 33038974 33039095 . - . Parent=gene36 chr21 ENCODE CDS 33038974 33039095 . - . Parent=gene36 chr21 . intron 33039096 33039755 . - . Parent=gene36 chr21 ENCODE exon 33039756 33039900 . - . Parent=gene36 chr21 ENCODE CDS 33039756 33039900 . - . Parent=gene36 chr21 . intron 33039901 33042680 . - . Parent=gene36 chr21 ENCODE exon 33042681 33042880 . - . Parent=gene36 chr21 ENCODE CDS 33042681 33042880 . - . Parent=gene36 chr21 . intron 33042881 33045098 . - . Parent=gene36 chr21 ENCODE exon 33045099 33045214 . - . Parent=gene36 chr21 ENCODE CDS 33045099 33045214 . - . Parent=gene36 chr21 . intron 33045215 33045300 . - . Parent=gene36 chr21 ENCODE exon 33045301 33045400 . - . Parent=gene36 chr21 ENCODE CDS 33045301 33045400 . - . Parent=gene36 chr21 . intron 33045401 33049411 . - . Parent=gene36 chr21 ENCODE exon 33049412 33049535 . - . Parent=gene36 chr21 ENCODE CDS 33049412 33049535 . - . Parent=gene36 chr21 . intron 33049536 33053261 . - . Parent=gene36 chr21 ENCODE exon 33053262 33053451 . - . Parent=gene36 chr21 ENCODE CDS 33053262 33053451 . - . Parent=gene36 chr21 . intron 33053452 33053958 . - . Parent=gene36 chr21 ENCODE exon 33053959 33054176 . - . Parent=gene36 chr21 ENCODE CDS 33053959 33054176 . - . Parent=gene36 chr21 . intron 33054177 33055240 . - . Parent=gene36 chr21 ENCODE exon 33055241 33055344 . - . Parent=gene36 chr21 ENCODE CDS 33055241 33055344 . - . Parent=gene36 chr21 . intron 33055345 33056277 . - . Parent=gene36 chr21 ENCODE exon 33056278 33056499 . - . Parent=gene36 chr21 ENCODE CDS 33056278 33056499 . - . Parent=gene36 chr21 . intron 33056500 33058529 . - . Parent=gene36 chr21 ENCODE exon 33058530 33058706 . - . Parent=gene36 chr21 ENCODE CDS 33058530 33058706 . - . Parent=gene36 chr21 . intron 33058707 33063995 . - . Parent=gene36 chr21 ENCODE exon 33063996 33064124 . - . Parent=gene36 chr21 ENCODE CDS 33063996 33064124 . - . Parent=gene36 chr21 . intron 33064125 33065507 . - . Parent=gene36 chr21 ENCODE CDS 33065508 33065850 . - . Parent=gene36 chr21 ENCODE exon 33065508 33066040 . - . Parent=gene36 ### chr21 ENCODE gene 33028082 33050976 . - . ID=gene37;Name=AP000279.68-002;name2=C21orf66 chr21 ENCODE exon 33028082 33029249 . - . Parent=gene37 chr21 . intron 33029250 33031435 . - . Parent=gene37 chr21 ENCODE exon 33031436 33031590 . - . Parent=gene37 chr21 . intron 33031591 33032354 . - . Parent=gene37 chr21 ENCODE exon 33032355 33032501 . - . Parent=gene37 chr21 . intron 33032502 33037429 . - . Parent=gene37 chr21 ENCODE exon 33037430 33037496 . - . Parent=gene37 chr21 . intron 33037497 33037859 . - . Parent=gene37 chr21 ENCODE exon 33037860 33037936 . - . Parent=gene37 chr21 . intron 33037937 33038973 . - . Parent=gene37 chr21 ENCODE exon 33038974 33039095 . - . Parent=gene37 chr21 . intron 33039096 33039755 . - . Parent=gene37 chr21 ENCODE exon 33039756 33039900 . - . Parent=gene37 chr21 . intron 33039901 33042680 . - . Parent=gene37 chr21 ENCODE exon 33042681 33042880 . - . Parent=gene37 chr21 . intron 33042881 33045098 . - . Parent=gene37 chr21 ENCODE exon 33045099 33045214 . - . Parent=gene37 chr21 . intron 33045215 33045300 . - . Parent=gene37 chr21 ENCODE exon 33045301 33045400 . - . Parent=gene37 chr21 . intron 33045401 33049394 . - . Parent=gene37 chr21 ENCODE exon 33049395 33050976 . - . Parent=gene37 ### chr21 ENCODE gene 33029002 33065869 . - . ID=gene38;Name=AP000279.68-006;name2=C21orf66 chr21 ENCODE exon 33029002 33029249 . - . Parent=gene38 chr21 . intron 33029250 33031435 . - . Parent=gene38 chr21 ENCODE exon 33031436 33031590 . - . Parent=gene38 chr21 . intron 33031591 33032354 . - . Parent=gene38 chr21 ENCODE exon 33032355 33032501 . - . Parent=gene38 chr21 . intron 33032502 33037429 . - . Parent=gene38 chr21 ENCODE exon 33037430 33037496 . - . Parent=gene38 chr21 . intron 33037497 33037859 . - . Parent=gene38 chr21 ENCODE exon 33037860 33037936 . - . Parent=gene38 chr21 . intron 33037937 33038973 . - . Parent=gene38 chr21 ENCODE exon 33038974 33039095 . - . Parent=gene38 chr21 . intron 33039096 33039755 . - . Parent=gene38 chr21 ENCODE exon 33039756 33039900 . - . Parent=gene38 chr21 . intron 33039901 33042680 . - . Parent=gene38 chr21 ENCODE exon 33042681 33042880 . - . Parent=gene38 chr21 . intron 33042881 33045098 . - . Parent=gene38 chr21 ENCODE exon 33045099 33045214 . - . Parent=gene38 chr21 . intron 33045215 33045300 . - . Parent=gene38 chr21 ENCODE exon 33045301 33045400 . - . Parent=gene38 chr21 . intron 33045401 33049394 . - . Parent=gene38 chr21 ENCODE exon 33049395 33049535 . - . Parent=gene38 chr21 . intron 33049536 33053261 . - . Parent=gene38 chr21 ENCODE exon 33053262 33053451 . - . Parent=gene38 chr21 . intron 33053452 33053958 . - . Parent=gene38 chr21 ENCODE exon 33053959 33054176 . - . Parent=gene38 chr21 . intron 33054177 33055240 . - . Parent=gene38 chr21 ENCODE exon 33055241 33055344 . - . Parent=gene38 chr21 . intron 33055345 33056277 . - . Parent=gene38 chr21 ENCODE exon 33056278 33056499 . - . Parent=gene38 chr21 . intron 33056500 33058529 . - . Parent=gene38 chr21 ENCODE exon 33058530 33058706 . - . Parent=gene38 chr21 . intron 33058707 33063995 . - . Parent=gene38 chr21 ENCODE exon 33063996 33064124 . - . Parent=gene38 chr21 . intron 33064125 33065507 . - . Parent=gene38 chr21 ENCODE exon 33065508 33065869 . - . Parent=gene38 ### chr21 ENCODE gene 33029008 33046306 . - . ID=gene39;Name=AP000279.68-003;name2=C21orf66 chr21 ENCODE exon 33029008 33029249 . - . Parent=gene39 chr21 . intron 33029250 33031435 . - . Parent=gene39 chr21 ENCODE exon 33031436 33031590 . - . Parent=gene39 chr21 . intron 33031591 33032354 . - . Parent=gene39 chr21 ENCODE exon 33032355 33032501 . - . Parent=gene39 chr21 . intron 33032502 33037429 . - . Parent=gene39 chr21 ENCODE exon 33037430 33037496 . - . Parent=gene39 chr21 . intron 33037497 33037859 . - . Parent=gene39 chr21 ENCODE exon 33037860 33037936 . - . Parent=gene39 chr21 . intron 33037937 33038973 . - . Parent=gene39 chr21 ENCODE exon 33038974 33039095 . - . Parent=gene39 chr21 . intron 33039096 33039755 . - . Parent=gene39 chr21 ENCODE exon 33039756 33039900 . - . Parent=gene39 chr21 . intron 33039901 33042680 . - . Parent=gene39 chr21 ENCODE exon 33042681 33042880 . - . Parent=gene39 chr21 . intron 33042881 33045098 . - . Parent=gene39 chr21 ENCODE exon 33045099 33045214 . - . Parent=gene39 chr21 . intron 33045215 33045300 . - . Parent=gene39 chr21 ENCODE exon 33045301 33046306 . - . Parent=gene39 ### chr21 ENCODE gene 33035575 33065850 . - . ID=gene40;Name=AP000279.68-005;name2=C21orf66 chr21 ENCODE exon 33035575 33035804 . - . Parent=gene40 chr21 ENCODE CDS 33035691 33035804 . - . Parent=gene40 chr21 . intron 33035805 33037429 . - . Parent=gene40 chr21 ENCODE exon 33037430 33037496 . - . Parent=gene40 chr21 ENCODE CDS 33037430 33037496 . - . Parent=gene40 chr21 . intron 33037497 33037859 . - . Parent=gene40 chr21 ENCODE exon 33037860 33037936 . - . Parent=gene40 chr21 ENCODE CDS 33037860 33037936 . - . Parent=gene40 chr21 . intron 33037937 33038973 . - . Parent=gene40 chr21 ENCODE exon 33038974 33039095 . - . Parent=gene40 chr21 ENCODE CDS 33038974 33039095 . - . Parent=gene40 chr21 . intron 33039096 33039755 . - . Parent=gene40 chr21 ENCODE exon 33039756 33039900 . - . Parent=gene40 chr21 ENCODE CDS 33039756 33039900 . - . Parent=gene40 chr21 . intron 33039901 33042680 . - . Parent=gene40 chr21 ENCODE exon 33042681 33042880 . - . Parent=gene40 chr21 ENCODE CDS 33042681 33042880 . - . Parent=gene40 chr21 . intron 33042881 33045098 . - . Parent=gene40 chr21 ENCODE exon 33045099 33045214 . - . Parent=gene40 chr21 ENCODE CDS 33045099 33045214 . - . Parent=gene40 chr21 . intron 33045215 33045300 . - . Parent=gene40 chr21 ENCODE exon 33045301 33045400 . - . Parent=gene40 chr21 ENCODE CDS 33045301 33045400 . - . Parent=gene40 chr21 . intron 33045401 33049411 . - . Parent=gene40 chr21 ENCODE exon 33049412 33049535 . - . Parent=gene40 chr21 ENCODE CDS 33049412 33049535 . - . Parent=gene40 chr21 . intron 33049536 33053261 . - . Parent=gene40 chr21 ENCODE exon 33053262 33053451 . - . Parent=gene40 chr21 ENCODE CDS 33053262 33053451 . - . Parent=gene40 chr21 . intron 33053452 33053958 . - . Parent=gene40 chr21 ENCODE exon 33053959 33054176 . - . Parent=gene40 chr21 ENCODE CDS 33053959 33054176 . - . Parent=gene40 chr21 . intron 33054177 33055240 . - . Parent=gene40 chr21 ENCODE exon 33055241 33055344 . - . Parent=gene40 chr21 ENCODE CDS 33055241 33055344 . - . Parent=gene40 chr21 . intron 33055345 33056277 . - . Parent=gene40 chr21 ENCODE exon 33056278 33056499 . - . Parent=gene40 chr21 ENCODE CDS 33056278 33056499 . - . Parent=gene40 chr21 . intron 33056500 33058529 . - . Parent=gene40 chr21 ENCODE exon 33058530 33058706 . - . Parent=gene40 chr21 ENCODE CDS 33058530 33058706 . - . Parent=gene40 chr21 . intron 33058707 33063995 . - . Parent=gene40 chr21 ENCODE exon 33063996 33064124 . - . Parent=gene40 chr21 ENCODE CDS 33063996 33064124 . - . Parent=gene40 chr21 . intron 33064125 33065507 . - . Parent=gene40 chr21 ENCODE exon 33065508 33065850 . - . Parent=gene40 chr21 ENCODE CDS 33065508 33065850 . - . Parent=gene40 ### chr21 ENCODE gene 33035601 33037450 . - . ID=gene41;Name=AP000279.68-009;name2=C21orf66 chr21 ENCODE exon 33035601 33035804 . - . Parent=gene41 chr21 . intron 33035805 33036541 . - . Parent=gene41 chr21 ENCODE exon 33036542 33036683 . - . Parent=gene41 chr21 . intron 33036684 33037142 . - . Parent=gene41 chr21 ENCODE exon 33037143 33037248 . - . Parent=gene41 chr21 . intron 33037249 33037429 . - . Parent=gene41 chr21 ENCODE exon 33037430 33037450 . - . Parent=gene41 ### chr21 ENCODE gene 33042741 33049493 . - . ID=gene42;Name=AP000279.68-008;name2=C21orf66 chr21 ENCODE exon 33042741 33042880 . - . Parent=gene42 chr21 . intron 33042881 33045300 . - . Parent=gene42 chr21 ENCODE exon 33045301 33045400 . - . Parent=gene42 chr21 . intron 33045401 33049394 . - . Parent=gene42 chr21 ENCODE exon 33049395 33049493 . - . Parent=gene42 ### chr21 ENCODE gene 33050524 33065850 . - . ID=gene43;Name=AP000279.68-004;name2=C21orf66 chr21 ENCODE exon 33050524 33050550 . - . Parent=gene43 chr21 . intron 33050551 33053261 . - . Parent=gene43 chr21 ENCODE exon 33053262 33053451 . - . Parent=gene43 chr21 . intron 33053452 33053958 . - . Parent=gene43 chr21 ENCODE exon 33053959 33054176 . - . Parent=gene43 chr21 . intron 33054177 33055240 . - . Parent=gene43 chr21 ENCODE exon 33055241 33055344 . - . Parent=gene43 chr21 . intron 33055345 33056277 . - . Parent=gene43 chr21 ENCODE exon 33056278 33056499 . - . Parent=gene43 chr21 . intron 33056500 33058529 . - . Parent=gene43 chr21 ENCODE exon 33058530 33058706 . - . Parent=gene43 chr21 . intron 33058707 33063995 . - . Parent=gene43 chr21 ENCODE exon 33063996 33064124 . - . Parent=gene43 chr21 . intron 33064125 33065507 . - . Parent=gene43 chr21 ENCODE exon 33065508 33065850 . - . Parent=gene43 ### chr21 ENCODE gene 33053584 33065974 . - . ID=gene44;Name=AP000279.68-007;name2=C21orf66 chr21 ENCODE exon 33053584 33054176 . - . Parent=gene44 chr21 . intron 33054177 33055240 . - . Parent=gene44 chr21 ENCODE exon 33055241 33055344 . - . Parent=gene44 chr21 . intron 33055345 33056277 . - . Parent=gene44 chr21 ENCODE exon 33056278 33056499 . - . Parent=gene44 chr21 . intron 33056500 33058529 . - . Parent=gene44 chr21 ENCODE exon 33058530 33058706 . - . Parent=gene44 chr21 . intron 33058707 33063995 . - . Parent=gene44 chr21 ENCODE exon 33063996 33064124 . - . Parent=gene44 chr21 . intron 33064125 33065507 . - . Parent=gene44 chr21 ENCODE exon 33065508 33065974 . - . Parent=gene44 ### chr21 ENCODE gene 33066282 33093149 . + . ID=gene45;Name=AP000281.64-001;name2=C21orf49 chr21 ENCODE exon 33066282 33066490 . + . Parent=gene45 chr21 . intron 33066491 33078978 . + . Parent=gene45 chr21 ENCODE exon 33078979 33079101 . + . Parent=gene45 chr21 ENCODE CDS 33079060 33079101 . + . Parent=gene45 chr21 . intron 33079102 33082793 . + . Parent=gene45 chr21 ENCODE exon 33082794 33082883 . + . Parent=gene45 chr21 ENCODE CDS 33082794 33082883 . + . Parent=gene45 chr21 . intron 33082884 33091118 . + . Parent=gene45 chr21 ENCODE CDS 33091119 33091226 . + . Parent=gene45 chr21 ENCODE exon 33091119 33093149 . + . Parent=gene45 ### chr21 ENCODE gene 33066307 33091887 . + . ID=gene46;Name=AP000281.64-002;name2=C21orf49 chr21 ENCODE exon 33066307 33066454 . + . Parent=gene46 chr21 . intron 33066455 33091118 . + . Parent=gene46 chr21 ENCODE exon 33091119 33091887 . + . Parent=gene46 ### chr21 ENCODE gene 33066332 33187913 . + . ID=gene47;Name=AP000281.64-007;name2=C21orf49 chr21 ENCODE exon 33066332 33066454 . + . Parent=gene47 chr21 . intron 33066455 33078956 . + . Parent=gene47 chr21 ENCODE exon 33078957 33079101 . + . Parent=gene47 chr21 . intron 33079102 33180109 . + . Parent=gene47 chr21 ENCODE exon 33180110 33180246 . + . Parent=gene47 chr21 . intron 33180247 33187755 . + . Parent=gene47 chr21 ENCODE exon 33187756 33187913 . + . Parent=gene47 ### chr21 ENCODE gene 33066343 33146649 . + . ID=gene48;Name=AP000281.64-004;name2=C21orf49 chr21 ENCODE exon 33066343 33066490 . + . Parent=gene48 chr21 . intron 33066491 33078978 . + . Parent=gene48 chr21 ENCODE exon 33078979 33079101 . + . Parent=gene48 chr21 . intron 33079102 33145928 . + . Parent=gene48 chr21 ENCODE exon 33145929 33146649 . + . Parent=gene48 ### chr21 ENCODE gene 33066344 33091348 . + . ID=gene49;Name=AP000281.64-005;name2=C21orf49 chr21 ENCODE exon 33066344 33066502 . + . Parent=gene49 chr21 . intron 33066503 33078978 . + . Parent=gene49 chr21 ENCODE exon 33078979 33079101 . + . Parent=gene49 chr21 ENCODE CDS 33079060 33079101 . + . Parent=gene49 chr21 . intron 33079102 33082793 . + . Parent=gene49 chr21 ENCODE exon 33082794 33082883 . + . Parent=gene49 chr21 ENCODE CDS 33082794 33082883 . + . Parent=gene49 chr21 . intron 33082884 33091118 . + . Parent=gene49 chr21 ENCODE CDS 33091119 33091226 . + . Parent=gene49 chr21 ENCODE exon 33091119 33091348 . + . Parent=gene49 ### chr21 ENCODE gene 33066356 33091626 . + . ID=gene50;Name=AP000281.64-003;name2=C21orf49 chr21 ENCODE exon 33066356 33066490 . + . Parent=gene50 chr21 . intron 33066491 33082793 . + . Parent=gene50 chr21 ENCODE exon 33082794 33082883 . + . Parent=gene50 chr21 . intron 33082884 33091118 . + . Parent=gene50 chr21 ENCODE exon 33091119 33091626 . + . Parent=gene50 ### chr21 ENCODE gene 33066370 33091274 . + . ID=gene51;Name=AP000281.64-006;name2=C21orf49 chr21 ENCODE exon 33066370 33066490 . + . Parent=gene51 chr21 . intron 33066491 33078978 . + . Parent=gene51 chr21 ENCODE exon 33078979 33079101 . + . Parent=gene51 chr21 ENCODE CDS 33079060 33079101 . + . Parent=gene51 chr21 . intron 33079102 33091118 . + . Parent=gene51 chr21 ENCODE CDS 33091119 33091226 . + . Parent=gene51 chr21 ENCODE exon 33091119 33091274 . + . Parent=gene51 ### chr21 ENCODE gene 33087746 33107923 . - . ID=gene52;Name=AP000280.67-001;name2=C21orf62 chr21 ENCODE exon 33087746 33088666 . - . Parent=gene52 chr21 ENCODE CDS 33087859 33088602 . - . Parent=gene52 chr21 . intron 33088667 33104753 . - . Parent=gene52 chr21 ENCODE exon 33104754 33104834 . - . Parent=gene52 chr21 . intron 33104835 33107771 . - . Parent=gene52 chr21 ENCODE exon 33107772 33107923 . - . Parent=gene52 ### chr21 ENCODE gene 33087747 33107859 . - . ID=gene53;Name=AP000280.67-003;name2=C21orf62 chr21 ENCODE exon 33087747 33088666 . - . Parent=gene53 chr21 ENCODE CDS 33087859 33088602 . - . Parent=gene53 chr21 . intron 33088667 33107771 . - . Parent=gene53 chr21 ENCODE exon 33107772 33107859 . - . Parent=gene53 ### chr21 ENCODE gene 33087867 33107869 . - . ID=gene54;Name=AP000280.67-004;name2=C21orf62 chr21 ENCODE exon 33087867 33088564 . - . Parent=gene54 chr21 ENCODE CDS 33087867 33088564 . - . Parent=gene54 chr21 . intron 33088565 33104753 . - . Parent=gene54 chr21 ENCODE exon 33104754 33104834 . - . Parent=gene54 chr21 ENCODE CDS 33104754 33104834 . - . Parent=gene54 chr21 . intron 33104835 33107771 . - . Parent=gene54 chr21 ENCODE exon 33107772 33107869 . - . Parent=gene54 chr21 ENCODE CDS 33107772 33107869 . - . Parent=gene54 ### chr21 ENCODE gene 33087903 33107814 . - . ID=gene55;Name=AP000280.67-002;name2=C21orf62 chr21 ENCODE CDS 33087903 33088602 . - . Parent=gene55 chr21 ENCODE exon 33087903 33088666 . - . Parent=gene55 chr21 . intron 33088667 33101821 . - . Parent=gene55 chr21 ENCODE exon 33101822 33101896 . - . Parent=gene55 chr21 . intron 33101897 33104753 . - . Parent=gene55 chr21 ENCODE exon 33104754 33104834 . - . Parent=gene55 chr21 . intron 33104835 33107771 . - . Parent=gene55 chr21 ENCODE exon 33107772 33107814 . - . Parent=gene55 ### chr21 ENCODE gene 33320023 33323374 . + . ID=gene56;Name=AP000287.4-001;name2=OLIG2 chr21 ENCODE exon 33320023 33320204 . + . Parent=gene56 chr21 . intron 33320205 33320978 . + . Parent=gene56 chr21 ENCODE exon 33320979 33323374 . + . Parent=gene56 chr21 ENCODE CDS 33321041 33322012 . + . Parent=gene56 ### chr21 ENCODE gene 33320113 33321227 . + . ID=gene57;Name=AP000287.4-003;name2=OLIG2 chr21 ENCODE exon 33320113 33320438 . + . Parent=gene57 chr21 . intron 33320439 33320978 . + . Parent=gene57 chr21 ENCODE exon 33320979 33321227 . + . Parent=gene57 chr21 ENCODE CDS 33321041 33321227 . + . Parent=gene57 ### chr21 ENCODE gene 33320113 33323374 . + . ID=gene58;Name=AP000287.4-002;name2=OLIG2 chr21 ENCODE exon 33320113 33323374 . + . Parent=gene58 chr21 ENCODE CDS 33321041 33322012 . + . Parent=gene58 ### chr21 ENCODE gene 33364320 33366596 . + . ID=gene59;Name=AP000289.5-001;name2=OLIG1 chr21 ENCODE exon 33364320 33366596 . + . Parent=gene59 chr21 ENCODE CDS 33364423 33365238 . + . Parent=gene59 ### chr21 ENCODE gene 33365141 33366589 . + . ID=gene60;Name=AP000289.5-002;name2=OLIG1 chr21 ENCODE exon 33365141 33365861 . + . Parent=gene60 chr21 . intron 33365862 33366227 . + . Parent=gene60 chr21 ENCODE exon 33366228 33366589 . + . Parent=gene60 ### chr21 ENCODE gene 33365844 33366589 . + . ID=gene61;Name=AP000289.5-003;name2=OLIG1 chr21 ENCODE exon 33365844 33365881 . + . Parent=gene61 chr21 . intron 33365882 33366227 . + . Parent=gene61 chr21 ENCODE exon 33366228 33366589 . + . Parent=gene61 ### chr21 ENCODE gene 33459646 33464824 . - . ID=gene62;Name=AP000290.56-001;name2=C21orf54 chr21 ENCODE exon 33459646 33459867 . - . Parent=gene62 chr21 ENCODE CDS 33459847 33459867 . - . Parent=gene62 chr21 . intron 33459868 33462617 . - . Parent=gene62 chr21 ENCODE exon 33462618 33462756 . - . Parent=gene62 chr21 ENCODE CDS 33462618 33462756 . - . Parent=gene62 chr21 . intron 33462757 33463870 . - . Parent=gene62 chr21 ENCODE exon 33463871 33464008 . - . Parent=gene62 chr21 ENCODE CDS 33463871 33464008 . - . Parent=gene62 chr21 . intron 33464009 33464315 . - . Parent=gene62 chr21 ENCODE CDS 33464316 33464344 . - . Parent=gene62 chr21 ENCODE exon 33464316 33464426 . - . Parent=gene62 chr21 . intron 33464427 33464738 . - . Parent=gene62 chr21 ENCODE exon 33464739 33464824 . - . Parent=gene62 ### chr21 ENCODE gene 33524076 33556931 . + . ID=gene63;Name=AP000295.6-004;name2=IFNAR2 chr21 ENCODE exon 33524076 33524391 . + . Parent=gene63 chr21 . intron 33524392 33536060 . + . Parent=gene63 chr21 ENCODE exon 33536061 33536152 . + . Parent=gene63 chr21 ENCODE CDS 33536098 33536152 . + . Parent=gene63 chr21 . intron 33536153 33537847 . + . Parent=gene63 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene63 chr21 ENCODE CDS 33537848 33537889 . + . Parent=gene63 chr21 . intron 33537890 33539125 . + . Parent=gene63 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene63 chr21 ENCODE CDS 33539126 33539249 . + . Parent=gene63 chr21 . intron 33539250 33540892 . + . Parent=gene63 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene63 chr21 ENCODE CDS 33540893 33541065 . + . Parent=gene63 chr21 . intron 33541066 33542883 . + . Parent=gene63 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene63 chr21 ENCODE CDS 33542884 33543029 . + . Parent=gene63 chr21 . intron 33543030 33546836 . + . Parent=gene63 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene63 chr21 ENCODE CDS 33546837 33547005 . + . Parent=gene63 chr21 . intron 33547006 33554771 . + . Parent=gene63 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene63 chr21 ENCODE CDS 33554772 33554902 . + . Parent=gene63 chr21 . intron 33554903 33556735 . + . Parent=gene63 chr21 ENCODE CDS 33556736 33556891 . + . Parent=gene63 chr21 ENCODE exon 33556736 33556931 . + . Parent=gene63 ### chr21 ENCODE gene 33524084 33559839 . + . ID=gene64;Name=AP000295.6-001;name2=IFNAR2 chr21 ENCODE exon 33524084 33524391 . + . Parent=gene64 chr21 . intron 33524392 33536014 . + . Parent=gene64 chr21 ENCODE exon 33536015 33536152 . + . Parent=gene64 chr21 ENCODE CDS 33536098 33536152 . + . Parent=gene64 chr21 . intron 33536153 33537847 . + . Parent=gene64 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene64 chr21 ENCODE CDS 33537848 33537889 . + . Parent=gene64 chr21 . intron 33537890 33539125 . + . Parent=gene64 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene64 chr21 ENCODE CDS 33539126 33539249 . + . Parent=gene64 chr21 . intron 33539250 33540892 . + . Parent=gene64 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene64 chr21 ENCODE CDS 33540893 33541065 . + . Parent=gene64 chr21 . intron 33541066 33542883 . + . Parent=gene64 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene64 chr21 ENCODE CDS 33542884 33543029 . + . Parent=gene64 chr21 . intron 33543030 33546836 . + . Parent=gene64 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene64 chr21 ENCODE CDS 33546837 33547005 . + . Parent=gene64 chr21 . intron 33547006 33554771 . + . Parent=gene64 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene64 chr21 ENCODE CDS 33554772 33554902 . + . Parent=gene64 chr21 . intron 33554903 33556735 . + . Parent=gene64 chr21 ENCODE CDS 33556736 33556891 . + . Parent=gene64 chr21 ENCODE exon 33556736 33559839 . + . Parent=gene64 ### chr21 ENCODE gene 33524149 33558700 . + . ID=gene65;Name=AP000295.6-002;name2=IFNAR2 chr21 ENCODE exon 33524149 33524391 . + . Parent=gene65 chr21 . intron 33524392 33536014 . + . Parent=gene65 chr21 ENCODE exon 33536015 33536152 . + . Parent=gene65 chr21 ENCODE CDS 33536098 33536152 . + . Parent=gene65 chr21 . intron 33536153 33537847 . + . Parent=gene65 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene65 chr21 ENCODE CDS 33537848 33537889 . + . Parent=gene65 chr21 . intron 33537890 33539125 . + . Parent=gene65 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene65 chr21 ENCODE CDS 33539126 33539249 . + . Parent=gene65 chr21 . intron 33539250 33540892 . + . Parent=gene65 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene65 chr21 ENCODE CDS 33540893 33541065 . + . Parent=gene65 chr21 . intron 33541066 33542883 . + . Parent=gene65 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene65 chr21 ENCODE CDS 33542884 33543029 . + . Parent=gene65 chr21 . intron 33543030 33546836 . + . Parent=gene65 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene65 chr21 ENCODE CDS 33546837 33547005 . + . Parent=gene65 chr21 . intron 33547006 33554771 . + . Parent=gene65 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene65 chr21 ENCODE CDS 33554772 33554902 . + . Parent=gene65 chr21 . intron 33554903 33556967 . + . Parent=gene65 chr21 ENCODE CDS 33556968 33557675 . + . Parent=gene65 chr21 ENCODE exon 33556968 33558700 . + . Parent=gene65 ### chr21 ENCODE gene 33524234 33556897 . + . ID=gene66;Name=AP000295.6-005;name2=IFNAR2 chr21 ENCODE exon 33524234 33524391 . + . Parent=gene66 chr21 . intron 33524392 33536060 . + . Parent=gene66 chr21 ENCODE exon 33536061 33536152 . + . Parent=gene66 chr21 . intron 33536153 33537847 . + . Parent=gene66 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene66 chr21 . intron 33537890 33539125 . + . Parent=gene66 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene66 chr21 . intron 33539250 33539667 . + . Parent=gene66 chr21 ENCODE exon 33539668 33539980 . + . Parent=gene66 chr21 . intron 33539981 33540892 . + . Parent=gene66 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene66 chr21 . intron 33541066 33542883 . + . Parent=gene66 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene66 chr21 . intron 33543030 33546836 . + . Parent=gene66 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene66 chr21 . intron 33547006 33554771 . + . Parent=gene66 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene66 chr21 . intron 33554903 33556735 . + . Parent=gene66 chr21 ENCODE exon 33556736 33556897 . + . Parent=gene66 ### chr21 ENCODE gene 33524311 33558700 . + . ID=gene67;Name=AP000295.6-003;name2=IFNAR2 chr21 ENCODE exon 33524311 33524391 . + . Parent=gene67 chr21 . intron 33524392 33536014 . + . Parent=gene67 chr21 ENCODE exon 33536015 33536152 . + . Parent=gene67 chr21 ENCODE CDS 33536098 33536152 . + . Parent=gene67 chr21 . intron 33536153 33537847 . + . Parent=gene67 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene67 chr21 ENCODE CDS 33537848 33537889 . + . Parent=gene67 chr21 . intron 33537890 33539125 . + . Parent=gene67 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene67 chr21 ENCODE CDS 33539126 33539249 . + . Parent=gene67 chr21 . intron 33539250 33540892 . + . Parent=gene67 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene67 chr21 ENCODE CDS 33540893 33541065 . + . Parent=gene67 chr21 . intron 33541066 33542883 . + . Parent=gene67 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene67 chr21 ENCODE CDS 33542884 33543029 . + . Parent=gene67 chr21 . intron 33543030 33546836 . + . Parent=gene67 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene67 chr21 ENCODE CDS 33546837 33547005 . + . Parent=gene67 chr21 . intron 33547006 33556967 . + . Parent=gene67 chr21 ENCODE CDS 33556968 33556978 . + . Parent=gene67 chr21 ENCODE exon 33556968 33558700 . + . Parent=gene67 ### chr21 ENCODE gene 33524316 33557030 . + . ID=gene68;Name=AP000295.6-006;name2=IFNAR2 chr21 ENCODE exon 33524316 33524391 . + . Parent=gene68 chr21 . intron 33524392 33536060 . + . Parent=gene68 chr21 ENCODE exon 33536061 33536152 . + . Parent=gene68 chr21 ENCODE CDS 33536098 33536152 . + . Parent=gene68 chr21 . intron 33536153 33537847 . + . Parent=gene68 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene68 chr21 ENCODE CDS 33537848 33537889 . + . Parent=gene68 chr21 . intron 33537890 33539125 . + . Parent=gene68 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene68 chr21 ENCODE CDS 33539126 33539249 . + . Parent=gene68 chr21 . intron 33539250 33540892 . + . Parent=gene68 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene68 chr21 ENCODE CDS 33540893 33541065 . + . Parent=gene68 chr21 . intron 33541066 33542883 . + . Parent=gene68 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene68 chr21 ENCODE CDS 33542884 33543029 . + . Parent=gene68 chr21 . intron 33543030 33546312 . + . Parent=gene68 chr21 ENCODE CDS 33546313 33546366 . + . Parent=gene68 chr21 ENCODE exon 33546313 33546423 . + . Parent=gene68 chr21 . intron 33546424 33546836 . + . Parent=gene68 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene68 chr21 . intron 33547006 33554771 . + . Parent=gene68 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene68 chr21 . intron 33554903 33556967 . + . Parent=gene68 chr21 ENCODE exon 33556968 33557030 . + . Parent=gene68 ### chr21 ENCODE gene 33524357 33557030 . + . ID=gene69;Name=AP000295.6-009;name2=IFNAR2 chr21 ENCODE exon 33524357 33524391 . + . Parent=gene69 chr21 . intron 33524392 33539125 . + . Parent=gene69 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene69 chr21 . intron 33539250 33540892 . + . Parent=gene69 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene69 chr21 . intron 33541066 33542883 . + . Parent=gene69 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene69 chr21 . intron 33543030 33546836 . + . Parent=gene69 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene69 chr21 . intron 33547006 33556967 . + . Parent=gene69 chr21 ENCODE exon 33556968 33557030 . + . Parent=gene69 ### chr21 ENCODE gene 33524357 33557030 . + . ID=gene70;Name=AP000295.6-010;name2=IFNAR2 chr21 ENCODE exon 33524357 33524391 . + . Parent=gene70 chr21 . intron 33524392 33539125 . + . Parent=gene70 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene70 chr21 . intron 33539250 33540892 . + . Parent=gene70 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene70 chr21 . intron 33541066 33542883 . + . Parent=gene70 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene70 chr21 . intron 33543030 33546836 . + . Parent=gene70 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene70 chr21 . intron 33547006 33554771 . + . Parent=gene70 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene70 chr21 . intron 33554903 33556967 . + . Parent=gene70 chr21 ENCODE exon 33556968 33557030 . + . Parent=gene70 ### chr21 ENCODE gene 33524584 33543029 . + . ID=gene71;Name=AP000295.6-008;name2=IFNAR2 chr21 ENCODE exon 33524584 33524732 . + . Parent=gene71 chr21 . intron 33524733 33536060 . + . Parent=gene71 chr21 ENCODE exon 33536061 33536152 . + . Parent=gene71 chr21 ENCODE CDS 33536098 33536152 . + . Parent=gene71 chr21 . intron 33536153 33537847 . + . Parent=gene71 chr21 ENCODE exon 33537848 33537889 . + . Parent=gene71 chr21 ENCODE CDS 33537848 33537889 . + . Parent=gene71 chr21 . intron 33537890 33539125 . + . Parent=gene71 chr21 ENCODE exon 33539126 33539249 . + . Parent=gene71 chr21 ENCODE CDS 33539126 33539249 . + . Parent=gene71 chr21 . intron 33539250 33540892 . + . Parent=gene71 chr21 ENCODE exon 33540893 33541065 . + . Parent=gene71 chr21 ENCODE CDS 33540893 33541065 . + . Parent=gene71 chr21 . intron 33541066 33542883 . + . Parent=gene71 chr21 ENCODE exon 33542884 33543029 . + . Parent=gene71 chr21 ENCODE CDS 33542884 33543029 . + . Parent=gene71 ### chr21 ENCODE gene 33542890 33577387 . + . ID=gene72;Name=AP000295.8-006;name2=IL10RB chr21 ENCODE exon 33542890 33543029 . + . Parent=gene72 chr21 ENCODE CDS 33542890 33543029 . + . Parent=gene72 chr21 . intron 33543030 33546836 . + . Parent=gene72 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene72 chr21 ENCODE CDS 33546837 33547005 . + . Parent=gene72 chr21 . intron 33547006 33562568 . + . Parent=gene72 chr21 ENCODE exon 33562569 33562692 . + . Parent=gene72 chr21 ENCODE CDS 33562569 33562692 . + . Parent=gene72 chr21 . intron 33562693 33570770 . + . Parent=gene72 chr21 ENCODE exon 33570771 33570928 . + . Parent=gene72 chr21 ENCODE CDS 33570771 33570928 . + . Parent=gene72 chr21 . intron 33570929 33573926 . + . Parent=gene72 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene72 chr21 ENCODE CDS 33573927 33574093 . + . Parent=gene72 chr21 . intron 33574094 33577268 . + . Parent=gene72 chr21 ENCODE exon 33577269 33577387 . + . Parent=gene72 chr21 ENCODE CDS 33577269 33577387 . + . Parent=gene72 ### chr21 ENCODE gene 33542890 33577387 . + . ID=gene73;Name=AP000295.8-007;name2=IL10RB chr21 ENCODE exon 33542890 33543029 . + . Parent=gene73 chr21 . intron 33543030 33546836 . + . Parent=gene73 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene73 chr21 . intron 33547006 33570770 . + . Parent=gene73 chr21 ENCODE exon 33570771 33570928 . + . Parent=gene73 chr21 . intron 33570929 33573926 . + . Parent=gene73 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene73 chr21 . intron 33574094 33577268 . + . Parent=gene73 chr21 ENCODE exon 33577269 33577387 . + . Parent=gene73 ### chr21 ENCODE gene 33542919 33556932 . + . ID=gene74;Name=AP000295.6-007;name2=IFNAR2 chr21 ENCODE exon 33542919 33543029 . + . Parent=gene74 chr21 ENCODE CDS 33542919 33543029 . + . Parent=gene74 chr21 . intron 33543030 33546312 . + . Parent=gene74 chr21 ENCODE CDS 33546313 33546366 . + . Parent=gene74 chr21 ENCODE exon 33546313 33546423 . + . Parent=gene74 chr21 . intron 33546424 33546836 . + . Parent=gene74 chr21 ENCODE exon 33546837 33547005 . + . Parent=gene74 chr21 . intron 33547006 33554771 . + . Parent=gene74 chr21 ENCODE exon 33554772 33554902 . + . Parent=gene74 chr21 . intron 33554903 33556735 . + . Parent=gene74 chr21 ENCODE exon 33556736 33556932 . + . Parent=gene74 ### chr21 ENCODE gene 33560533 33591409 . + . ID=gene75;Name=AP000295.8-001;name2=IL10RB chr21 ENCODE exon 33560533 33560689 . + . Parent=gene75 chr21 ENCODE CDS 33560641 33560689 . + . Parent=gene75 chr21 . intron 33560690 33562568 . + . Parent=gene75 chr21 ENCODE exon 33562569 33562692 . + . Parent=gene75 chr21 ENCODE CDS 33562569 33562692 . + . Parent=gene75 chr21 . intron 33562693 33570770 . + . Parent=gene75 chr21 ENCODE exon 33570771 33570928 . + . Parent=gene75 chr21 ENCODE CDS 33570771 33570928 . + . Parent=gene75 chr21 . intron 33570929 33573926 . + . Parent=gene75 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene75 chr21 ENCODE CDS 33573927 33574093 . + . Parent=gene75 chr21 . intron 33574094 33577268 . + . Parent=gene75 chr21 ENCODE exon 33577269 33577416 . + . Parent=gene75 chr21 ENCODE CDS 33577269 33577416 . + . Parent=gene75 chr21 . intron 33577417 33582278 . + . Parent=gene75 chr21 ENCODE exon 33582279 33582436 . + . Parent=gene75 chr21 ENCODE CDS 33582279 33582436 . + . Parent=gene75 chr21 . intron 33582437 33590358 . + . Parent=gene75 chr21 ENCODE CDS 33590359 33590532 . + . Parent=gene75 chr21 ENCODE exon 33590359 33591409 . + . Parent=gene75 ### chr21 ENCODE gene 33560557 33590414 . + . ID=gene76;Name=AP000295.8-003;name2=IL10RB chr21 ENCODE exon 33560557 33560689 . + . Parent=gene76 chr21 . intron 33560690 33562568 . + . Parent=gene76 chr21 ENCODE exon 33562569 33562692 . + . Parent=gene76 chr21 . intron 33562693 33573926 . + . Parent=gene76 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene76 chr21 . intron 33574094 33577268 . + . Parent=gene76 chr21 ENCODE exon 33577269 33577416 . + . Parent=gene76 chr21 . intron 33577417 33582278 . + . Parent=gene76 chr21 ENCODE exon 33582279 33582436 . + . Parent=gene76 chr21 . intron 33582437 33590358 . + . Parent=gene76 chr21 ENCODE exon 33590359 33590414 . + . Parent=gene76 ### chr21 ENCODE gene 33562103 33591128 . + . ID=gene77;Name=AP000295.8-002;name2=IL10RB chr21 ENCODE exon 33562103 33562692 . + . Parent=gene77 chr21 . intron 33562693 33570770 . + . Parent=gene77 chr21 ENCODE exon 33570771 33570928 . + . Parent=gene77 chr21 . intron 33570929 33573926 . + . Parent=gene77 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene77 chr21 . intron 33574094 33577268 . + . Parent=gene77 chr21 ENCODE exon 33577269 33577416 . + . Parent=gene77 chr21 . intron 33577417 33582278 . + . Parent=gene77 chr21 ENCODE exon 33582279 33582436 . + . Parent=gene77 chr21 . intron 33582437 33590358 . + . Parent=gene77 chr21 ENCODE exon 33590359 33591128 . + . Parent=gene77 ### chr21 ENCODE gene 33562457 33582295 . + . ID=gene78;Name=AP000295.8-005;name2=IL10RB chr21 ENCODE exon 33562457 33562692 . + . Parent=gene78 chr21 . intron 33562693 33573926 . + . Parent=gene78 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene78 chr21 . intron 33574094 33577268 . + . Parent=gene78 chr21 ENCODE exon 33577269 33577416 . + . Parent=gene78 chr21 . intron 33577417 33582278 . + . Parent=gene78 chr21 ENCODE exon 33582279 33582295 . + . Parent=gene78 ### chr21 ENCODE gene 33570787 33590525 . + . ID=gene79;Name=AP000295.8-004;name2=IL10RB chr21 ENCODE exon 33570787 33570928 . + . Parent=gene79 chr21 . intron 33570929 33573926 . + . Parent=gene79 chr21 ENCODE exon 33573927 33574093 . + . Parent=gene79 chr21 . intron 33574094 33577268 . + . Parent=gene79 chr21 ENCODE exon 33577269 33577416 . + . Parent=gene79 chr21 . intron 33577417 33582278 . + . Parent=gene79 chr21 ENCODE exon 33582279 33582436 . + . Parent=gene79 chr21 . intron 33582437 33588186 . + . Parent=gene79 chr21 ENCODE exon 33588187 33588302 . + . Parent=gene79 chr21 . intron 33588303 33590358 . + . Parent=gene79 chr21 ENCODE exon 33590359 33590525 . + . Parent=gene79 ### chr21 ENCODE gene 33618652 33629787 . + . ID=gene80;Name=AP000298.3-002;name2=IFNAR1 chr21 ENCODE exon 33618652 33618813 . + . Parent=gene80 chr21 . intron 33618814 33629699 . + . Parent=gene80 chr21 ENCODE exon 33629700 33629787 . + . Parent=gene80 ### chr21 ENCODE gene 33619079 33654038 . + . ID=gene81;Name=AP000298.3-001;name2=IFNAR1 chr21 ENCODE exon 33619079 33619306 . + . Parent=gene81 chr21 ENCODE CDS 33619231 33619306 . + . Parent=gene81 chr21 . intron 33619307 33629699 . + . Parent=gene81 chr21 ENCODE exon 33629700 33629823 . + . Parent=gene81 chr21 ENCODE CDS 33629700 33629823 . + . Parent=gene81 chr21 . intron 33629824 33635174 . + . Parent=gene81 chr21 ENCODE exon 33635175 33635350 . + . Parent=gene81 chr21 ENCODE CDS 33635175 33635350 . + . Parent=gene81 chr21 . intron 33635351 33637443 . + . Parent=gene81 chr21 ENCODE exon 33637444 33637598 . + . Parent=gene81 chr21 ENCODE CDS 33637444 33637598 . + . Parent=gene81 chr21 . intron 33637599 33637710 . + . Parent=gene81 chr21 ENCODE exon 33637711 33637852 . + . Parent=gene81 chr21 ENCODE CDS 33637711 33637852 . + . Parent=gene81 chr21 . intron 33637853 33639421 . + . Parent=gene81 chr21 ENCODE exon 33639422 33639536 . + . Parent=gene81 chr21 ENCODE CDS 33639422 33639536 . + . Parent=gene81 chr21 . intron 33639537 33643266 . + . Parent=gene81 chr21 ENCODE exon 33643267 33643466 . + . Parent=gene81 chr21 ENCODE CDS 33643267 33643466 . + . Parent=gene81 chr21 . intron 33643467 33643564 . + . Parent=gene81 chr21 ENCODE exon 33643565 33643719 . + . Parent=gene81 chr21 ENCODE CDS 33643565 33643719 . + . Parent=gene81 chr21 . intron 33643720 33646933 . + . Parent=gene81 chr21 ENCODE exon 33646934 33647084 . + . Parent=gene81 chr21 ENCODE CDS 33646934 33647084 . + . Parent=gene81 chr21 . intron 33647085 33647813 . + . Parent=gene81 chr21 ENCODE exon 33647814 33647959 . + . Parent=gene81 chr21 ENCODE CDS 33647814 33647959 . + . Parent=gene81 chr21 . intron 33647960 33649491 . + . Parent=gene81 chr21 ENCODE CDS 33649492 33649725 . + . Parent=gene81 chr21 ENCODE exon 33649492 33654038 . + . Parent=gene81 ### chr21 ENCODE gene 33619148 33639453 . + . ID=gene82;Name=AP000298.3-003;name2=IFNAR1 chr21 ENCODE exon 33619148 33619306 . + . Parent=gene82 chr21 ENCODE CDS 33619231 33619306 . + . Parent=gene82 chr21 . intron 33619307 33629699 . + . Parent=gene82 chr21 ENCODE exon 33629700 33629823 . + . Parent=gene82 chr21 ENCODE CDS 33629700 33629823 . + . Parent=gene82 chr21 . intron 33629824 33635174 . + . Parent=gene82 chr21 ENCODE exon 33635175 33635350 . + . Parent=gene82 chr21 ENCODE CDS 33635175 33635350 . + . Parent=gene82 chr21 . intron 33635351 33639421 . + . Parent=gene82 chr21 ENCODE exon 33639422 33639453 . + . Parent=gene82 chr21 ENCODE CDS 33639422 33639453 . + . Parent=gene82 ### chr21 ENCODE gene 33679169 33709121 . + . ID=gene83;Name=AP000300.6-006;name2=IFNGR2 chr21 ENCODE exon 33679169 33679203 . + . Parent=gene83 chr21 . intron 33679204 33679391 . + . Parent=gene83 chr21 ENCODE exon 33679392 33679560 . + . Parent=gene83 chr21 . intron 33679561 33709064 . + . Parent=gene83 chr21 ENCODE exon 33709065 33709121 . + . Parent=gene83 ### chr21 ENCODE gene 33697072 33731698 . + . ID=gene84;Name=AP000300.6-001;name2=IFNGR2 chr21 ENCODE exon 33697072 33697792 . + . Parent=gene84 chr21 ENCODE CDS 33697720 33697792 . + . Parent=gene84 chr21 . intron 33697793 33709064 . + . Parent=gene84 chr21 ENCODE exon 33709065 33709197 . + . Parent=gene84 chr21 ENCODE CDS 33709065 33709197 . + . Parent=gene84 chr21 . intron 33709198 33715656 . + . Parent=gene84 chr21 ENCODE exon 33715657 33715862 . + . Parent=gene84 chr21 ENCODE CDS 33715657 33715862 . + . Parent=gene84 chr21 . intron 33715863 33721060 . + . Parent=gene84 chr21 ENCODE exon 33721061 33721209 . + . Parent=gene84 chr21 ENCODE CDS 33721061 33721209 . + . Parent=gene84 chr21 . intron 33721210 33726353 . + . Parent=gene84 chr21 ENCODE exon 33726354 33726513 . + . Parent=gene84 chr21 ENCODE CDS 33726354 33726513 . + . Parent=gene84 chr21 . intron 33726514 33726890 . + . Parent=gene84 chr21 ENCODE exon 33726891 33727048 . + . Parent=gene84 chr21 ENCODE CDS 33726891 33727048 . + . Parent=gene84 chr21 . intron 33727049 33731004 . + . Parent=gene84 chr21 ENCODE CDS 33731005 33731139 . + . Parent=gene84 chr21 ENCODE exon 33731005 33731698 . + . Parent=gene84 ### chr21 ENCODE gene 33697603 33726393 . + . ID=gene85;Name=AP000300.6-003;name2=IFNGR2 chr21 ENCODE exon 33697603 33697792 . + . Parent=gene85 chr21 . intron 33697793 33705011 . + . Parent=gene85 chr21 ENCODE exon 33705012 33705068 . + . Parent=gene85 chr21 . intron 33705069 33705620 . + . Parent=gene85 chr21 ENCODE exon 33705621 33705751 . + . Parent=gene85 chr21 . intron 33705752 33709064 . + . Parent=gene85 chr21 ENCODE exon 33709065 33709197 . + . Parent=gene85 chr21 . intron 33709198 33715656 . + . Parent=gene85 chr21 ENCODE exon 33715657 33715862 . + . Parent=gene85 chr21 . intron 33715863 33721060 . + . Parent=gene85 chr21 ENCODE exon 33721061 33721209 . + . Parent=gene85 chr21 . intron 33721210 33726353 . + . Parent=gene85 chr21 ENCODE exon 33726354 33726393 . + . Parent=gene85 ### chr21 ENCODE gene 33697608 33731698 . + . ID=gene86;Name=AP000300.6-002;name2=IFNGR2 chr21 ENCODE exon 33697608 33697792 . + . Parent=gene86 chr21 ENCODE CDS 33697720 33697792 . + . Parent=gene86 chr21 . intron 33697793 33705011 . + . Parent=gene86 chr21 ENCODE exon 33705012 33705068 . + . Parent=gene86 chr21 ENCODE CDS 33705012 33705068 . + . Parent=gene86 chr21 . intron 33705069 33709064 . + . Parent=gene86 chr21 ENCODE exon 33709065 33709197 . + . Parent=gene86 chr21 ENCODE CDS 33709065 33709197 . + . Parent=gene86 chr21 . intron 33709198 33715656 . + . Parent=gene86 chr21 ENCODE exon 33715657 33715862 . + . Parent=gene86 chr21 ENCODE CDS 33715657 33715862 . + . Parent=gene86 chr21 . intron 33715863 33721060 . + . Parent=gene86 chr21 ENCODE exon 33721061 33721209 . + . Parent=gene86 chr21 ENCODE CDS 33721061 33721209 . + . Parent=gene86 chr21 . intron 33721210 33726353 . + . Parent=gene86 chr21 ENCODE exon 33726354 33726513 . + . Parent=gene86 chr21 ENCODE CDS 33726354 33726513 . + . Parent=gene86 chr21 . intron 33726514 33726890 . + . Parent=gene86 chr21 ENCODE exon 33726891 33727048 . + . Parent=gene86 chr21 ENCODE CDS 33726891 33727048 . + . Parent=gene86 chr21 . intron 33727049 33731004 . + . Parent=gene86 chr21 ENCODE CDS 33731005 33731139 . + . Parent=gene86 chr21 ENCODE exon 33731005 33731698 . + . Parent=gene86 ### chr21 ENCODE gene 33697617 33731121 . + . ID=gene87;Name=AP000300.6-004;name2=IFNGR2 chr21 ENCODE exon 33697617 33697792 . + . Parent=gene87 chr21 . intron 33697793 33715656 . + . Parent=gene87 chr21 ENCODE exon 33715657 33715862 . + . Parent=gene87 chr21 . intron 33715863 33721060 . + . Parent=gene87 chr21 ENCODE exon 33721061 33721209 . + . Parent=gene87 chr21 . intron 33721210 33726353 . + . Parent=gene87 chr21 ENCODE exon 33726354 33726513 . + . Parent=gene87 chr21 . intron 33726514 33726890 . + . Parent=gene87 chr21 ENCODE exon 33726891 33727048 . + . Parent=gene87 chr21 . intron 33727049 33731004 . + . Parent=gene87 chr21 ENCODE exon 33731005 33731121 . + . Parent=gene87 ### chr21 ENCODE gene 33726496 33773525 . + . ID=gene88;Name=AP000300.6-005;name2=IFNGR2 chr21 ENCODE exon 33726496 33726513 . + . Parent=gene88 chr21 . intron 33726514 33726890 . + . Parent=gene88 chr21 ENCODE exon 33726891 33727048 . + . Parent=gene88 chr21 . intron 33727049 33772974 . + . Parent=gene88 chr21 ENCODE exon 33772975 33773525 . + . Parent=gene88 ### chr21 ENCODE gene 33726662 33743141 . - . ID=gene89;Name=AP000300.7-009;name2=TMEM50B chr21 ENCODE exon 33726662 33726979 . - . Parent=gene89 chr21 . intron 33726980 33731059 . - . Parent=gene89 chr21 ENCODE exon 33731060 33731169 . - . Parent=gene89 chr21 . intron 33731170 33733390 . - . Parent=gene89 chr21 ENCODE exon 33733391 33733474 . - . Parent=gene89 chr21 . intron 33733475 33742958 . - . Parent=gene89 chr21 ENCODE exon 33742959 33743141 . - . Parent=gene89 ### chr21 ENCODE gene 33726662 33774120 . - . ID=gene90;Name=AP000300.7-002;name2=TMEM50B chr21 ENCODE exon 33726662 33726979 . - . Parent=gene90 chr21 . intron 33726980 33733390 . - . Parent=gene90 chr21 ENCODE exon 33733391 33733474 . - . Parent=gene90 chr21 . intron 33733475 33742958 . - . Parent=gene90 chr21 ENCODE exon 33742959 33745040 . - . Parent=gene90 chr21 . intron 33745041 33749903 . - . Parent=gene90 chr21 ENCODE exon 33749904 33749961 . - . Parent=gene90 chr21 . intron 33749962 33754589 . - . Parent=gene90 chr21 ENCODE exon 33754590 33754682 . - . Parent=gene90 chr21 . intron 33754683 33759518 . - . Parent=gene90 chr21 ENCODE exon 33759519 33759586 . - . Parent=gene90 chr21 . intron 33759587 33761186 . - . Parent=gene90 chr21 ENCODE exon 33761187 33761299 . - . Parent=gene90 chr21 . intron 33761300 33762963 . - . Parent=gene90 chr21 ENCODE exon 33762964 33763103 . - . Parent=gene90 chr21 . intron 33763104 33774014 . - . Parent=gene90 chr21 ENCODE exon 33774015 33774120 . - . Parent=gene90 ### chr21 ENCODE gene 33726975 33743587 . - . ID=gene91;Name=AP000300.7-007;name2=TMEM50B chr21 ENCODE exon 33726975 33726979 . - . Parent=gene91 chr21 . intron 33726980 33733390 . - . Parent=gene91 chr21 ENCODE exon 33733391 33733474 . - . Parent=gene91 chr21 . intron 33733475 33742958 . - . Parent=gene91 chr21 ENCODE exon 33742959 33743056 . - . Parent=gene91 chr21 . intron 33743057 33743410 . - . Parent=gene91 chr21 ENCODE exon 33743411 33743587 . - . Parent=gene91 ### chr21 ENCODE gene 33731061 33743366 . - . ID=gene92;Name=AP000300.7-008;name2=TMEM50B chr21 ENCODE exon 33731061 33731169 . - . Parent=gene92 chr21 . intron 33731170 33733390 . - . Parent=gene92 chr21 ENCODE exon 33733391 33733474 . - . Parent=gene92 chr21 . intron 33733475 33741194 . - . Parent=gene92 chr21 ENCODE exon 33741195 33741317 . - . Parent=gene92 chr21 . intron 33741318 33742958 . - . Parent=gene92 chr21 ENCODE exon 33742959 33743136 . - . Parent=gene92 chr21 . intron 33743137 33743190 . - . Parent=gene92 chr21 ENCODE exon 33743191 33743366 . - . Parent=gene92 ### chr21 ENCODE gene 33743312 33774188 . - . ID=gene93;Name=AP000300.7-001;name2=TMEM50B chr21 ENCODE exon 33743312 33745040 . - . Parent=gene93 chr21 ENCODE CDS 33744995 33745040 . - . Parent=gene93 chr21 . intron 33745041 33749903 . - . Parent=gene93 chr21 ENCODE exon 33749904 33749961 . - . Parent=gene93 chr21 ENCODE CDS 33749904 33749961 . - . Parent=gene93 chr21 . intron 33749962 33754589 . - . Parent=gene93 chr21 ENCODE exon 33754590 33754682 . - . Parent=gene93 chr21 ENCODE CDS 33754590 33754682 . - . Parent=gene93 chr21 . intron 33754683 33759518 . - . Parent=gene93 chr21 ENCODE exon 33759519 33759586 . - . Parent=gene93 chr21 ENCODE CDS 33759519 33759586 . - . Parent=gene93 chr21 . intron 33759587 33761186 . - . Parent=gene93 chr21 ENCODE exon 33761187 33761299 . - . Parent=gene93 chr21 ENCODE CDS 33761187 33761299 . - . Parent=gene93 chr21 . intron 33761300 33762963 . - . Parent=gene93 chr21 ENCODE CDS 33762964 33763062 . - . Parent=gene93 chr21 ENCODE exon 33762964 33763103 . - . Parent=gene93 chr21 . intron 33763104 33774014 . - . Parent=gene93 chr21 ENCODE exon 33774015 33774188 . - . Parent=gene93 ### chr21 ENCODE gene 33744724 33774113 . - . ID=gene94;Name=AP000300.7-004;name2=TMEM50B chr21 ENCODE exon 33744724 33745040 . - . Parent=gene94 chr21 . intron 33745041 33749903 . - . Parent=gene94 chr21 ENCODE exon 33749904 33749961 . - . Parent=gene94 chr21 . intron 33749962 33750180 . - . Parent=gene94 chr21 ENCODE exon 33750181 33750274 . - . Parent=gene94 chr21 . intron 33750275 33754589 . - . Parent=gene94 chr21 ENCODE exon 33754590 33754682 . - . Parent=gene94 chr21 . intron 33754683 33759518 . - . Parent=gene94 chr21 ENCODE exon 33759519 33759586 . - . Parent=gene94 chr21 . intron 33759587 33761186 . - . Parent=gene94 chr21 ENCODE exon 33761187 33761299 . - . Parent=gene94 chr21 . intron 33761300 33762963 . - . Parent=gene94 chr21 ENCODE exon 33762964 33763103 . - . Parent=gene94 chr21 . intron 33763104 33774014 . - . Parent=gene94 chr21 ENCODE exon 33774015 33774113 . - . Parent=gene94 ### chr21 ENCODE gene 33759195 33761312 . - . ID=gene95;Name=AP000300.7-006;name2=TMEM50B chr21 ENCODE exon 33759195 33759586 . - . Parent=gene95 chr21 . intron 33759587 33761186 . - . Parent=gene95 chr21 ENCODE exon 33761187 33761312 . - . Parent=gene95 ### chr21 ENCODE gene 33759555 33773466 . - . ID=gene96;Name=AP000300.7-005;name2=TMEM50B chr21 ENCODE exon 33759555 33759586 . - . Parent=gene96 chr21 ENCODE CDS 33759555 33759586 . - . Parent=gene96 chr21 . intron 33759587 33761186 . - . Parent=gene96 chr21 ENCODE exon 33761187 33761299 . - . Parent=gene96 chr21 ENCODE CDS 33761187 33761299 . - . Parent=gene96 chr21 . intron 33761300 33762963 . - . Parent=gene96 chr21 ENCODE CDS 33762964 33763062 . - . Parent=gene96 chr21 ENCODE exon 33762964 33763103 . - . Parent=gene96 chr21 . intron 33763104 33763707 . - . Parent=gene96 chr21 ENCODE exon 33763708 33763860 . - . Parent=gene96 chr21 . intron 33763861 33773285 . - . Parent=gene96 chr21 ENCODE exon 33773286 33773466 . - . Parent=gene96 ### chr21 ENCODE gene 33761212 33775369 . - . ID=gene97;Name=AP000300.7-010;name2=TMEM50B chr21 ENCODE exon 33761212 33761299 . - . Parent=gene97 chr21 ENCODE CDS 33761212 33761299 . - . Parent=gene97 chr21 . intron 33761300 33762963 . - . Parent=gene97 chr21 ENCODE CDS 33762964 33763062 . - . Parent=gene97 chr21 ENCODE exon 33762964 33763103 . - . Parent=gene97 chr21 . intron 33763104 33775310 . - . Parent=gene97 chr21 ENCODE exon 33775311 33775369 . - . Parent=gene97 ### chr21 ENCODE gene 33762597 33774125 . - . ID=gene98;Name=AP000300.7-003;name2=TMEM50B chr21 ENCODE exon 33762597 33763103 . - . Parent=gene98 chr21 . intron 33763104 33774014 . - . Parent=gene98 chr21 ENCODE exon 33774015 33774125 . - . Parent=gene98 ### chr21 ENCODE gene 33779707 33785650 . - . ID=gene99;Name=AP000302.59-003;name2=C21orf55 chr21 ENCODE exon 33779707 33779932 . - . Parent=gene99 chr21 . intron 33779933 33782005 . - . Parent=gene99 chr21 ENCODE exon 33782006 33783601 . - . Parent=gene99 chr21 . intron 33783602 33785242 . - . Parent=gene99 chr21 ENCODE exon 33785243 33785650 . - . Parent=gene99 ### chr21 ENCODE gene 33782367 33785897 . - . ID=gene100;Name=AP000302.59-002;name2=C21orf55 chr21 ENCODE exon 33782367 33783601 . - . Parent=gene100 chr21 ENCODE CDS 33782404 33783570 . - . Parent=gene100 chr21 . intron 33783602 33785778 . - . Parent=gene100 chr21 ENCODE exon 33785779 33785897 . - . Parent=gene100 ### chr21 ENCODE gene 33782385 33785650 . - . ID=gene101;Name=AP000302.59-001;name2=C21orf55 chr21 ENCODE exon 33782385 33783601 . - . Parent=gene101 chr21 ENCODE CDS 33782404 33783570 . - . Parent=gene101 chr21 . intron 33783602 33785242 . - . Parent=gene101 chr21 ENCODE exon 33785243 33785650 . - . Parent=gene101 ### chr21 ENCODE gene 33798108 33836314 . - . ID=gene102;Name=AP000302.60-003;name2=GART chr21 ENCODE exon 33798108 33798492 . - . Parent=gene102 chr21 ENCODE CDS 33798301 33798492 . - . Parent=gene102 chr21 . intron 33798493 33798588 . - . Parent=gene102 chr21 ENCODE exon 33798589 33798704 . - . Parent=gene102 chr21 ENCODE CDS 33798589 33798704 . - . Parent=gene102 chr21 . intron 33798705 33799737 . - . Parent=gene102 chr21 ENCODE exon 33799738 33799879 . - . Parent=gene102 chr21 ENCODE CDS 33799738 33799879 . - . Parent=gene102 chr21 . intron 33799880 33800150 . - . Parent=gene102 chr21 ENCODE exon 33800151 33800281 . - . Parent=gene102 chr21 ENCODE CDS 33800151 33800281 . - . Parent=gene102 chr21 . intron 33800282 33803959 . - . Parent=gene102 chr21 ENCODE exon 33803960 33804097 . - . Parent=gene102 chr21 ENCODE CDS 33803960 33804097 . - . Parent=gene102 chr21 . intron 33804098 33805428 . - . Parent=gene102 chr21 ENCODE exon 33805429 33805635 . - . Parent=gene102 chr21 ENCODE CDS 33805429 33805635 . - . Parent=gene102 chr21 . intron 33805636 33811165 . - . Parent=gene102 chr21 ENCODE exon 33811166 33811318 . - . Parent=gene102 chr21 ENCODE CDS 33811166 33811318 . - . Parent=gene102 chr21 . intron 33811319 33811533 . - . Parent=gene102 chr21 ENCODE exon 33811534 33811785 . - . Parent=gene102 chr21 ENCODE CDS 33811534 33811785 . - . Parent=gene102 chr21 . intron 33811786 33814540 . - . Parent=gene102 chr21 ENCODE exon 33814541 33814739 . - . Parent=gene102 chr21 ENCODE CDS 33814541 33814739 . - . Parent=gene102 chr21 . intron 33814740 33815082 . - . Parent=gene102 chr21 ENCODE exon 33815083 33815192 . - . Parent=gene102 chr21 ENCODE CDS 33815083 33815192 . - . Parent=gene102 chr21 . intron 33815193 33816364 . - . Parent=gene102 chr21 ENCODE exon 33816365 33816459 . - . Parent=gene102 chr21 ENCODE CDS 33816365 33816459 . - . Parent=gene102 chr21 . intron 33816460 33818945 . - . Parent=gene102 chr21 ENCODE exon 33818946 33819177 . - . Parent=gene102 chr21 ENCODE CDS 33818946 33819177 . - . Parent=gene102 chr21 . intron 33819178 33822342 . - . Parent=gene102 chr21 ENCODE exon 33822343 33822511 . - . Parent=gene102 chr21 ENCODE CDS 33822343 33822511 . - . Parent=gene102 chr21 . intron 33822512 33822694 . - . Parent=gene102 chr21 ENCODE exon 33822695 33822780 . - . Parent=gene102 chr21 ENCODE CDS 33822695 33822780 . - . Parent=gene102 chr21 . intron 33822781 33823025 . - . Parent=gene102 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene102 chr21 ENCODE CDS 33823026 33823113 . - . Parent=gene102 chr21 . intron 33823114 33824934 . - . Parent=gene102 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene102 chr21 ENCODE CDS 33824935 33825060 . - . Parent=gene102 chr21 . intron 33825061 33825664 . - . Parent=gene102 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene102 chr21 ENCODE CDS 33825665 33825733 . - . Parent=gene102 chr21 . intron 33825734 33826520 . - . Parent=gene102 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene102 chr21 ENCODE CDS 33826521 33826632 . - . Parent=gene102 chr21 . intron 33826633 33828754 . - . Parent=gene102 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene102 chr21 ENCODE CDS 33828755 33828929 . - . Parent=gene102 chr21 . intron 33828930 33829400 . - . Parent=gene102 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene102 chr21 ENCODE CDS 33829401 33829496 . - . Parent=gene102 chr21 . intron 33829497 33833346 . - . Parent=gene102 chr21 ENCODE CDS 33833347 33833491 . - . Parent=gene102 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene102 chr21 . intron 33833533 33836240 . - . Parent=gene102 chr21 ENCODE exon 33836241 33836314 . - . Parent=gene102 ### chr21 ENCODE gene 33798108 33837018 . - . ID=gene103;Name=AP000302.60-001;name2=GART chr21 ENCODE exon 33798108 33798492 . - . Parent=gene103 chr21 ENCODE CDS 33798301 33798492 . - . Parent=gene103 chr21 . intron 33798493 33798588 . - . Parent=gene103 chr21 ENCODE exon 33798589 33798704 . - . Parent=gene103 chr21 ENCODE CDS 33798589 33798704 . - . Parent=gene103 chr21 . intron 33798705 33799737 . - . Parent=gene103 chr21 ENCODE exon 33799738 33799879 . - . Parent=gene103 chr21 ENCODE CDS 33799738 33799879 . - . Parent=gene103 chr21 . intron 33799880 33800150 . - . Parent=gene103 chr21 ENCODE exon 33800151 33800281 . - . Parent=gene103 chr21 ENCODE CDS 33800151 33800281 . - . Parent=gene103 chr21 . intron 33800282 33803959 . - . Parent=gene103 chr21 ENCODE exon 33803960 33804097 . - . Parent=gene103 chr21 ENCODE CDS 33803960 33804097 . - . Parent=gene103 chr21 . intron 33804098 33805428 . - . Parent=gene103 chr21 ENCODE exon 33805429 33805635 . - . Parent=gene103 chr21 ENCODE CDS 33805429 33805635 . - . Parent=gene103 chr21 . intron 33805636 33811165 . - . Parent=gene103 chr21 ENCODE exon 33811166 33811318 . - . Parent=gene103 chr21 ENCODE CDS 33811166 33811318 . - . Parent=gene103 chr21 . intron 33811319 33811533 . - . Parent=gene103 chr21 ENCODE exon 33811534 33811785 . - . Parent=gene103 chr21 ENCODE CDS 33811534 33811785 . - . Parent=gene103 chr21 . intron 33811786 33814540 . - . Parent=gene103 chr21 ENCODE exon 33814541 33814739 . - . Parent=gene103 chr21 ENCODE CDS 33814541 33814739 . - . Parent=gene103 chr21 . intron 33814740 33815082 . - . Parent=gene103 chr21 ENCODE exon 33815083 33815192 . - . Parent=gene103 chr21 ENCODE CDS 33815083 33815192 . - . Parent=gene103 chr21 . intron 33815193 33816364 . - . Parent=gene103 chr21 ENCODE exon 33816365 33816459 . - . Parent=gene103 chr21 ENCODE CDS 33816365 33816459 . - . Parent=gene103 chr21 . intron 33816460 33818945 . - . Parent=gene103 chr21 ENCODE exon 33818946 33819177 . - . Parent=gene103 chr21 ENCODE CDS 33818946 33819177 . - . Parent=gene103 chr21 . intron 33819178 33822342 . - . Parent=gene103 chr21 ENCODE exon 33822343 33822511 . - . Parent=gene103 chr21 ENCODE CDS 33822343 33822511 . - . Parent=gene103 chr21 . intron 33822512 33822694 . - . Parent=gene103 chr21 ENCODE exon 33822695 33822780 . - . Parent=gene103 chr21 ENCODE CDS 33822695 33822780 . - . Parent=gene103 chr21 . intron 33822781 33823025 . - . Parent=gene103 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene103 chr21 ENCODE CDS 33823026 33823113 . - . Parent=gene103 chr21 . intron 33823114 33824934 . - . Parent=gene103 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene103 chr21 ENCODE CDS 33824935 33825060 . - . Parent=gene103 chr21 . intron 33825061 33825664 . - . Parent=gene103 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene103 chr21 ENCODE CDS 33825665 33825733 . - . Parent=gene103 chr21 . intron 33825734 33826520 . - . Parent=gene103 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene103 chr21 ENCODE CDS 33826521 33826632 . - . Parent=gene103 chr21 . intron 33826633 33828754 . - . Parent=gene103 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene103 chr21 ENCODE CDS 33828755 33828929 . - . Parent=gene103 chr21 . intron 33828930 33829400 . - . Parent=gene103 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene103 chr21 ENCODE CDS 33829401 33829496 . - . Parent=gene103 chr21 . intron 33829497 33833346 . - . Parent=gene103 chr21 ENCODE CDS 33833347 33833491 . - . Parent=gene103 chr21 ENCODE exon 33833347 33833499 . - . Parent=gene103 chr21 . intron 33833500 33836762 . - . Parent=gene103 chr21 ENCODE exon 33836763 33837018 . - . Parent=gene103 ### chr21 ENCODE gene 33798108 33837037 . - . ID=gene104;Name=AP000302.60-006;name2=GART chr21 ENCODE exon 33798108 33798492 . - . Parent=gene104 chr21 ENCODE CDS 33798301 33798492 . - . Parent=gene104 chr21 . intron 33798493 33798588 . - . Parent=gene104 chr21 ENCODE exon 33798589 33798704 . - . Parent=gene104 chr21 ENCODE CDS 33798589 33798704 . - . Parent=gene104 chr21 . intron 33798705 33799737 . - . Parent=gene104 chr21 ENCODE exon 33799738 33799879 . - . Parent=gene104 chr21 ENCODE CDS 33799738 33799879 . - . Parent=gene104 chr21 . intron 33799880 33800150 . - . Parent=gene104 chr21 ENCODE exon 33800151 33800281 . - . Parent=gene104 chr21 ENCODE CDS 33800151 33800281 . - . Parent=gene104 chr21 . intron 33800282 33803959 . - . Parent=gene104 chr21 ENCODE exon 33803960 33804097 . - . Parent=gene104 chr21 ENCODE CDS 33803960 33804097 . - . Parent=gene104 chr21 . intron 33804098 33805428 . - . Parent=gene104 chr21 ENCODE exon 33805429 33805635 . - . Parent=gene104 chr21 ENCODE CDS 33805429 33805635 . - . Parent=gene104 chr21 . intron 33805636 33811165 . - . Parent=gene104 chr21 ENCODE exon 33811166 33811318 . - . Parent=gene104 chr21 ENCODE CDS 33811166 33811318 . - . Parent=gene104 chr21 . intron 33811319 33811533 . - . Parent=gene104 chr21 ENCODE exon 33811534 33811785 . - . Parent=gene104 chr21 ENCODE CDS 33811534 33811785 . - . Parent=gene104 chr21 . intron 33811786 33814540 . - . Parent=gene104 chr21 ENCODE exon 33814541 33814739 . - . Parent=gene104 chr21 ENCODE CDS 33814541 33814739 . - . Parent=gene104 chr21 . intron 33814740 33815082 . - . Parent=gene104 chr21 ENCODE exon 33815083 33815192 . - . Parent=gene104 chr21 ENCODE CDS 33815083 33815192 . - . Parent=gene104 chr21 . intron 33815193 33816364 . - . Parent=gene104 chr21 ENCODE exon 33816365 33816459 . - . Parent=gene104 chr21 ENCODE CDS 33816365 33816459 . - . Parent=gene104 chr21 . intron 33816460 33818945 . - . Parent=gene104 chr21 ENCODE exon 33818946 33819177 . - . Parent=gene104 chr21 ENCODE CDS 33818946 33819177 . - . Parent=gene104 chr21 . intron 33819178 33822342 . - . Parent=gene104 chr21 ENCODE exon 33822343 33822511 . - . Parent=gene104 chr21 ENCODE CDS 33822343 33822511 . - . Parent=gene104 chr21 . intron 33822512 33822694 . - . Parent=gene104 chr21 ENCODE exon 33822695 33822780 . - . Parent=gene104 chr21 ENCODE CDS 33822695 33822780 . - . Parent=gene104 chr21 . intron 33822781 33823025 . - . Parent=gene104 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene104 chr21 ENCODE CDS 33823026 33823113 . - . Parent=gene104 chr21 . intron 33823114 33824934 . - . Parent=gene104 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene104 chr21 ENCODE CDS 33824935 33825060 . - . Parent=gene104 chr21 . intron 33825061 33825664 . - . Parent=gene104 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene104 chr21 ENCODE CDS 33825665 33825733 . - . Parent=gene104 chr21 . intron 33825734 33826520 . - . Parent=gene104 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene104 chr21 ENCODE CDS 33826521 33826632 . - . Parent=gene104 chr21 . intron 33826633 33828754 . - . Parent=gene104 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene104 chr21 ENCODE CDS 33828755 33828929 . - . Parent=gene104 chr21 . intron 33828930 33829400 . - . Parent=gene104 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene104 chr21 ENCODE CDS 33829401 33829496 . - . Parent=gene104 chr21 . intron 33829497 33833346 . - . Parent=gene104 chr21 ENCODE CDS 33833347 33833491 . - . Parent=gene104 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene104 chr21 . intron 33833533 33836835 . - . Parent=gene104 chr21 ENCODE exon 33836836 33837037 . - . Parent=gene104 ### chr21 ENCODE gene 33798110 33837068 . - . ID=gene105;Name=AP000302.60-002;name2=GART chr21 ENCODE exon 33798110 33798492 . - . Parent=gene105 chr21 . intron 33798493 33798588 . - . Parent=gene105 chr21 ENCODE exon 33798589 33798704 . - . Parent=gene105 chr21 . intron 33798705 33799737 . - . Parent=gene105 chr21 ENCODE exon 33799738 33799879 . - . Parent=gene105 chr21 . intron 33799880 33800150 . - . Parent=gene105 chr21 ENCODE exon 33800151 33800281 . - . Parent=gene105 chr21 . intron 33800282 33803959 . - . Parent=gene105 chr21 ENCODE exon 33803960 33804097 . - . Parent=gene105 chr21 . intron 33804098 33805428 . - . Parent=gene105 chr21 ENCODE exon 33805429 33805635 . - . Parent=gene105 chr21 . intron 33805636 33811165 . - . Parent=gene105 chr21 ENCODE exon 33811166 33811318 . - . Parent=gene105 chr21 . intron 33811319 33811533 . - . Parent=gene105 chr21 ENCODE exon 33811534 33811785 . - . Parent=gene105 chr21 . intron 33811786 33814540 . - . Parent=gene105 chr21 ENCODE exon 33814541 33814739 . - . Parent=gene105 chr21 . intron 33814740 33815082 . - . Parent=gene105 chr21 ENCODE exon 33815083 33815192 . - . Parent=gene105 chr21 . intron 33815193 33816364 . - . Parent=gene105 chr21 ENCODE exon 33816365 33816459 . - . Parent=gene105 chr21 . intron 33816460 33818945 . - . Parent=gene105 chr21 ENCODE exon 33818946 33819177 . - . Parent=gene105 chr21 . intron 33819178 33822342 . - . Parent=gene105 chr21 ENCODE exon 33822343 33822511 . - . Parent=gene105 chr21 . intron 33822512 33822690 . - . Parent=gene105 chr21 ENCODE exon 33822691 33822780 . - . Parent=gene105 chr21 . intron 33822781 33823025 . - . Parent=gene105 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene105 chr21 . intron 33823114 33824934 . - . Parent=gene105 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene105 chr21 . intron 33825061 33825664 . - . Parent=gene105 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene105 chr21 . intron 33825734 33826520 . - . Parent=gene105 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene105 chr21 . intron 33826633 33828754 . - . Parent=gene105 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene105 chr21 . intron 33828930 33829400 . - . Parent=gene105 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene105 chr21 . intron 33829497 33833346 . - . Parent=gene105 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene105 chr21 . intron 33833533 33836766 . - . Parent=gene105 chr21 ENCODE exon 33836767 33837068 . - . Parent=gene105 ### chr21 ENCODE gene 33800152 33805569 . - . ID=gene106;Name=AP000302.60-017;name2=GART chr21 ENCODE exon 33800152 33800257 . - . Parent=gene106 chr21 . intron 33800258 33803990 . - . Parent=gene106 chr21 ENCODE exon 33803991 33804097 . - . Parent=gene106 chr21 . intron 33804098 33805428 . - . Parent=gene106 chr21 ENCODE exon 33805429 33805569 . - . Parent=gene106 ### chr21 ENCODE gene 33800217 33804510 . - . ID=gene107;Name=AP000302.60-018;name2=GART chr21 ENCODE exon 33800217 33800281 . - . Parent=gene107 chr21 . intron 33800282 33803959 . - . Parent=gene107 chr21 ENCODE exon 33803960 33804510 . - . Parent=gene107 ### chr21 ENCODE gene 33803365 33805481 . - . ID=gene108;Name=AP000302.60-019;name2=GART chr21 ENCODE exon 33803365 33804097 . - . Parent=gene108 chr21 . intron 33804098 33805428 . - . Parent=gene108 chr21 ENCODE exon 33805429 33805481 . - . Parent=gene108 ### chr21 ENCODE gene 33814699 33819005 . - . ID=gene109;Name=AP000302.60-005;name2=GART chr21 ENCODE exon 33814699 33814822 . - . Parent=gene109 chr21 . intron 33814823 33815082 . - . Parent=gene109 chr21 ENCODE exon 33815083 33815192 . - . Parent=gene109 chr21 . intron 33815193 33816364 . - . Parent=gene109 chr21 ENCODE exon 33816365 33816459 . - . Parent=gene109 chr21 . intron 33816460 33818945 . - . Parent=gene109 chr21 ENCODE exon 33818946 33819005 . - . Parent=gene109 ### chr21 ENCODE gene 33816368 33822940 . - . ID=gene110;Name=AP000302.60-016;name2=GART chr21 ENCODE exon 33816368 33816459 . - . Parent=gene110 chr21 . intron 33816460 33818945 . - . Parent=gene110 chr21 ENCODE exon 33818946 33819177 . - . Parent=gene110 chr21 . intron 33819178 33822342 . - . Parent=gene110 chr21 ENCODE exon 33822343 33822940 . - . Parent=gene110 ### chr21 ENCODE gene 33818186 33836290 . - . ID=gene111;Name=AP000302.60-004;name2=GART chr21 ENCODE exon 33818186 33819177 . - . Parent=gene111 chr21 ENCODE CDS 33818942 33819177 . - . Parent=gene111 chr21 . intron 33819178 33822342 . - . Parent=gene111 chr21 ENCODE exon 33822343 33822511 . - . Parent=gene111 chr21 ENCODE CDS 33822343 33822511 . - . Parent=gene111 chr21 . intron 33822512 33822694 . - . Parent=gene111 chr21 ENCODE exon 33822695 33822780 . - . Parent=gene111 chr21 ENCODE CDS 33822695 33822780 . - . Parent=gene111 chr21 . intron 33822781 33823025 . - . Parent=gene111 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene111 chr21 ENCODE CDS 33823026 33823113 . - . Parent=gene111 chr21 . intron 33823114 33824934 . - . Parent=gene111 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene111 chr21 ENCODE CDS 33824935 33825060 . - . Parent=gene111 chr21 . intron 33825061 33825664 . - . Parent=gene111 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene111 chr21 ENCODE CDS 33825665 33825733 . - . Parent=gene111 chr21 . intron 33825734 33826520 . - . Parent=gene111 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene111 chr21 ENCODE CDS 33826521 33826632 . - . Parent=gene111 chr21 . intron 33826633 33828754 . - . Parent=gene111 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene111 chr21 ENCODE CDS 33828755 33828929 . - . Parent=gene111 chr21 . intron 33828930 33829400 . - . Parent=gene111 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene111 chr21 ENCODE CDS 33829401 33829496 . - . Parent=gene111 chr21 . intron 33829497 33833346 . - . Parent=gene111 chr21 ENCODE CDS 33833347 33833491 . - . Parent=gene111 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene111 chr21 . intron 33833533 33836240 . - . Parent=gene111 chr21 ENCODE exon 33836241 33836290 . - . Parent=gene111 ### chr21 ENCODE gene 33822442 33828806 . - . ID=gene112;Name=AP000302.60-014;name2=GART chr21 ENCODE exon 33822442 33822511 . - . Parent=gene112 chr21 . intron 33822512 33822694 . - . Parent=gene112 chr21 ENCODE exon 33822695 33822780 . - . Parent=gene112 chr21 . intron 33822781 33823025 . - . Parent=gene112 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene112 chr21 . intron 33823114 33823742 . - . Parent=gene112 chr21 ENCODE exon 33823743 33823944 . - . Parent=gene112 chr21 . intron 33823945 33824934 . - . Parent=gene112 chr21 ENCODE exon 33824935 33825060 . - . Parent=gene112 chr21 . intron 33825061 33825664 . - . Parent=gene112 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene112 chr21 . intron 33825734 33826520 . - . Parent=gene112 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene112 chr21 . intron 33826633 33828754 . - . Parent=gene112 chr21 ENCODE exon 33828755 33828806 . - . Parent=gene112 ### chr21 ENCODE gene 33822739 33825458 . - . ID=gene113;Name=AP000302.60-015;name2=GART chr21 ENCODE exon 33822739 33822780 . - . Parent=gene113 chr21 . intron 33822781 33823025 . - . Parent=gene113 chr21 ENCODE exon 33823026 33823113 . - . Parent=gene113 chr21 . intron 33823114 33824934 . - . Parent=gene113 chr21 ENCODE exon 33824935 33825458 . - . Parent=gene113 ### chr21 ENCODE gene 33824886 33828855 . - . ID=gene114;Name=AP000302.60-012;name2=GART chr21 ENCODE exon 33824886 33825060 . - . Parent=gene114 chr21 . intron 33825061 33825664 . - . Parent=gene114 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene114 chr21 . intron 33825734 33826520 . - . Parent=gene114 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene114 chr21 . intron 33826633 33828754 . - . Parent=gene114 chr21 ENCODE exon 33828755 33828855 . - . Parent=gene114 ### chr21 ENCODE gene 33824935 33837667 . - . ID=gene115;Name=AP000302.60-007;name2=GART chr21 ENCODE exon 33824935 33825060 . - . Parent=gene115 chr21 ENCODE CDS 33824935 33825060 . - . Parent=gene115 chr21 . intron 33825061 33825664 . - . Parent=gene115 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene115 chr21 ENCODE CDS 33825665 33825733 . - . Parent=gene115 chr21 . intron 33825734 33826520 . - . Parent=gene115 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene115 chr21 ENCODE CDS 33826521 33826632 . - . Parent=gene115 chr21 . intron 33826633 33828754 . - . Parent=gene115 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene115 chr21 ENCODE CDS 33828755 33828929 . - . Parent=gene115 chr21 . intron 33828930 33829400 . - . Parent=gene115 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene115 chr21 ENCODE CDS 33829401 33829496 . - . Parent=gene115 chr21 . intron 33829497 33833346 . - . Parent=gene115 chr21 ENCODE CDS 33833347 33833491 . - . Parent=gene115 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene115 chr21 . intron 33833533 33837395 . - . Parent=gene115 chr21 ENCODE exon 33837396 33837667 . - . Parent=gene115 ### chr21 ENCODE gene 33824963 33836969 . - . ID=gene116;Name=AP000302.60-009;name2=GART chr21 ENCODE exon 33824963 33825060 . - . Parent=gene116 chr21 ENCODE CDS 33824963 33825060 . - . Parent=gene116 chr21 . intron 33825061 33825664 . - . Parent=gene116 chr21 ENCODE exon 33825665 33825733 . - . Parent=gene116 chr21 ENCODE CDS 33825665 33825733 . - . Parent=gene116 chr21 . intron 33825734 33826520 . - . Parent=gene116 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene116 chr21 ENCODE CDS 33826521 33826632 . - . Parent=gene116 chr21 . intron 33826633 33828754 . - . Parent=gene116 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene116 chr21 ENCODE CDS 33828755 33828929 . - . Parent=gene116 chr21 . intron 33828930 33829400 . - . Parent=gene116 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene116 chr21 ENCODE CDS 33829401 33829496 . - . Parent=gene116 chr21 . intron 33829497 33833346 . - . Parent=gene116 chr21 ENCODE CDS 33833347 33833491 . - . Parent=gene116 chr21 ENCODE exon 33833347 33833499 . - . Parent=gene116 chr21 . intron 33833500 33836835 . - . Parent=gene116 chr21 ENCODE exon 33836836 33836969 . - . Parent=gene116 ### chr21 ENCODE gene 33825512 33836255 . - . ID=gene117;Name=AP000302.60-011;name2=GART chr21 ENCODE exon 33825512 33825733 . - . Parent=gene117 chr21 . intron 33825734 33826520 . - . Parent=gene117 chr21 ENCODE exon 33826521 33826632 . - . Parent=gene117 chr21 . intron 33826633 33828754 . - . Parent=gene117 chr21 ENCODE exon 33828755 33828929 . - . Parent=gene117 chr21 . intron 33828930 33829400 . - . Parent=gene117 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene117 chr21 . intron 33829497 33833346 . - . Parent=gene117 chr21 ENCODE exon 33833347 33833532 . - . Parent=gene117 chr21 . intron 33833533 33836240 . - . Parent=gene117 chr21 ENCODE exon 33836241 33836255 . - . Parent=gene117 ### chr21 ENCODE gene 33825949 33828848 . - . ID=gene118;Name=AP000302.60-013;name2=GART chr21 ENCODE exon 33825949 33826632 . - . Parent=gene118 chr21 . intron 33826633 33828754 . - . Parent=gene118 chr21 ENCODE exon 33828755 33828848 . - . Parent=gene118 ### chr21 ENCODE gene 33828755 33836996 . - . ID=gene119;Name=AP000302.60-008;name2=GART chr21 ENCODE exon 33828755 33828929 . - . Parent=gene119 chr21 ENCODE CDS 33828755 33828929 . - . Parent=gene119 chr21 . intron 33828930 33829400 . - . Parent=gene119 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene119 chr21 ENCODE CDS 33829401 33829496 . - . Parent=gene119 chr21 . intron 33829497 33833346 . - . Parent=gene119 chr21 ENCODE CDS 33833347 33833491 . - . Parent=gene119 chr21 ENCODE exon 33833347 33833499 . - . Parent=gene119 chr21 . intron 33833500 33836723 . - . Parent=gene119 chr21 ENCODE exon 33836724 33836996 . - . Parent=gene119 ### chr21 ENCODE gene 33828763 33836539 . - . ID=gene120;Name=AP000302.60-010;name2=GART chr21 ENCODE exon 33828763 33828929 . - . Parent=gene120 chr21 ENCODE CDS 33828763 33828929 . - . Parent=gene120 chr21 . intron 33828930 33829400 . - . Parent=gene120 chr21 ENCODE exon 33829401 33829496 . - . Parent=gene120 chr21 ENCODE CDS 33829401 33829496 . - . Parent=gene120 chr21 . intron 33829497 33833346 . - . Parent=gene120 chr21 ENCODE CDS 33833347 33833491 . - . Parent=gene120 chr21 ENCODE exon 33833347 33833499 . - . Parent=gene120 chr21 . intron 33833500 33836240 . - . Parent=gene120 chr21 ENCODE exon 33836241 33836539 . - . Parent=gene120 ### chr21 ENCODE gene 33836794 33871657 . + . ID=gene121;Name=AP000304.8-001;name2=SON chr21 ENCODE exon 33836794 33837345 . + . Parent=gene121 chr21 ENCODE CDS 33837269 33837345 . + . Parent=gene121 chr21 . intron 33837346 33840388 . + . Parent=gene121 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene121 chr21 ENCODE CDS 33840389 33840555 . + . Parent=gene121 chr21 . intron 33840556 33843651 . + . Parent=gene121 chr21 ENCODE exon 33843652 33849567 . + . Parent=gene121 chr21 ENCODE CDS 33843652 33849567 . + . Parent=gene121 chr21 . intron 33849568 33851331 . + . Parent=gene121 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene121 chr21 ENCODE CDS 33851332 33851492 . + . Parent=gene121 chr21 . intron 33851493 33853405 . + . Parent=gene121 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene121 chr21 ENCODE CDS 33853406 33853552 . + . Parent=gene121 chr21 . intron 33853553 33853762 . + . Parent=gene121 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene121 chr21 ENCODE CDS 33853763 33853951 . + . Parent=gene121 chr21 . intron 33853952 33861332 . + . Parent=gene121 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene121 chr21 ENCODE CDS 33861333 33861443 . + . Parent=gene121 chr21 . intron 33861444 33863146 . + . Parent=gene121 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene121 chr21 ENCODE CDS 33863147 33863263 . + . Parent=gene121 chr21 . intron 33863264 33867483 . + . Parent=gene121 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene121 chr21 ENCODE CDS 33867484 33867631 . + . Parent=gene121 chr21 . intron 33867632 33869771 . + . Parent=gene121 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene121 chr21 ENCODE CDS 33869772 33869843 . + . Parent=gene121 chr21 . intron 33869844 33869953 . + . Parent=gene121 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene121 chr21 ENCODE CDS 33869954 33870069 . + . Parent=gene121 chr21 . intron 33870070 33870540 . + . Parent=gene121 chr21 ENCODE CDS 33870541 33870600 . + . Parent=gene121 chr21 ENCODE exon 33870541 33871657 . + . Parent=gene121 ### chr21 ENCODE gene 33837220 33871655 . + . ID=gene122;Name=AP000304.8-021;name2=SON chr21 ENCODE exon 33837220 33837345 . + . Parent=gene122 chr21 . intron 33837346 33840388 . + . Parent=gene122 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene122 chr21 . intron 33840556 33843651 . + . Parent=gene122 chr21 ENCODE exon 33843652 33845625 . + . Parent=gene122 chr21 . intron 33845626 33845745 . + . Parent=gene122 chr21 ENCODE exon 33845746 33849567 . + . Parent=gene122 chr21 . intron 33849568 33851331 . + . Parent=gene122 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene122 chr21 . intron 33851493 33853405 . + . Parent=gene122 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene122 chr21 . intron 33853553 33853762 . + . Parent=gene122 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene122 chr21 . intron 33853952 33861332 . + . Parent=gene122 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene122 chr21 . intron 33861444 33863146 . + . Parent=gene122 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene122 chr21 . intron 33863264 33867483 . + . Parent=gene122 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene122 chr21 . intron 33867632 33869771 . + . Parent=gene122 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene122 chr21 . intron 33869844 33869953 . + . Parent=gene122 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene122 chr21 . intron 33870070 33870540 . + . Parent=gene122 chr21 ENCODE exon 33870541 33871655 . + . Parent=gene122 ### chr21 ENCODE gene 33837228 33840928 . + . ID=gene123;Name=AP000304.8-010;name2=SON chr21 ENCODE exon 33837228 33837345 . + . Parent=gene123 chr21 . intron 33837346 33840388 . + . Parent=gene123 chr21 ENCODE exon 33840389 33840928 . + . Parent=gene123 ### chr21 ENCODE gene 33837228 33871657 . + . ID=gene124;Name=AP000304.8-002;name2=SON chr21 ENCODE exon 33837228 33837345 . + . Parent=gene124 chr21 ENCODE CDS 33837269 33837345 . + . Parent=gene124 chr21 . intron 33837346 33840388 . + . Parent=gene124 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene124 chr21 ENCODE CDS 33840389 33840555 . + . Parent=gene124 chr21 . intron 33840556 33851331 . + . Parent=gene124 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene124 chr21 ENCODE CDS 33851332 33851492 . + . Parent=gene124 chr21 . intron 33851493 33853405 . + . Parent=gene124 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene124 chr21 ENCODE CDS 33853406 33853552 . + . Parent=gene124 chr21 . intron 33853553 33853762 . + . Parent=gene124 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene124 chr21 ENCODE CDS 33853763 33853951 . + . Parent=gene124 chr21 . intron 33853952 33861332 . + . Parent=gene124 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene124 chr21 ENCODE CDS 33861333 33861443 . + . Parent=gene124 chr21 . intron 33861444 33863146 . + . Parent=gene124 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene124 chr21 ENCODE CDS 33863147 33863263 . + . Parent=gene124 chr21 . intron 33863264 33867483 . + . Parent=gene124 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene124 chr21 ENCODE CDS 33867484 33867631 . + . Parent=gene124 chr21 . intron 33867632 33869771 . + . Parent=gene124 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene124 chr21 ENCODE CDS 33869772 33869843 . + . Parent=gene124 chr21 . intron 33869844 33869953 . + . Parent=gene124 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene124 chr21 ENCODE CDS 33869954 33870069 . + . Parent=gene124 chr21 . intron 33870070 33870540 . + . Parent=gene124 chr21 ENCODE CDS 33870541 33870600 . + . Parent=gene124 chr21 ENCODE exon 33870541 33871657 . + . Parent=gene124 ### chr21 ENCODE gene 33837240 33854843 . + . ID=gene125;Name=AP000304.8-003;name2=SON chr21 ENCODE exon 33837240 33837345 . + . Parent=gene125 chr21 ENCODE CDS 33837269 33837345 . + . Parent=gene125 chr21 . intron 33837346 33840388 . + . Parent=gene125 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene125 chr21 ENCODE CDS 33840389 33840555 . + . Parent=gene125 chr21 . intron 33840556 33843651 . + . Parent=gene125 chr21 ENCODE exon 33843652 33849567 . + . Parent=gene125 chr21 ENCODE CDS 33843652 33849567 . + . Parent=gene125 chr21 . intron 33849568 33851331 . + . Parent=gene125 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene125 chr21 ENCODE CDS 33851332 33851492 . + . Parent=gene125 chr21 . intron 33851493 33853405 . + . Parent=gene125 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene125 chr21 ENCODE CDS 33853406 33853552 . + . Parent=gene125 chr21 . intron 33853553 33853762 . + . Parent=gene125 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene125 chr21 ENCODE CDS 33853763 33853951 . + . Parent=gene125 chr21 . intron 33853952 33854052 . + . Parent=gene125 chr21 ENCODE CDS 33854053 33854307 . + . Parent=gene125 chr21 ENCODE exon 33854053 33854843 . + . Parent=gene125 ### chr21 ENCODE gene 33837240 33871657 . + . ID=gene126;Name=AP000304.8-005;name2=SON chr21 ENCODE exon 33837240 33837345 . + . Parent=gene126 chr21 . intron 33837346 33840388 . + . Parent=gene126 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene126 chr21 . intron 33840556 33843651 . + . Parent=gene126 chr21 ENCODE exon 33843652 33849567 . + . Parent=gene126 chr21 . intron 33849568 33851331 . + . Parent=gene126 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene126 chr21 . intron 33851493 33851721 . + . Parent=gene126 chr21 ENCODE exon 33851722 33851844 . + . Parent=gene126 chr21 . intron 33851845 33853405 . + . Parent=gene126 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene126 chr21 . intron 33853553 33853762 . + . Parent=gene126 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene126 chr21 . intron 33853952 33861332 . + . Parent=gene126 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene126 chr21 . intron 33861444 33863146 . + . Parent=gene126 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene126 chr21 . intron 33863264 33867483 . + . Parent=gene126 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene126 chr21 . intron 33867632 33869771 . + . Parent=gene126 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene126 chr21 . intron 33869844 33869953 . + . Parent=gene126 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene126 chr21 . intron 33870070 33870593 . + . Parent=gene126 chr21 ENCODE exon 33870594 33871657 . + . Parent=gene126 ### chr21 ENCODE gene 33837240 33871657 . + . ID=gene127;Name=AP000304.8-004;name2=SON chr21 ENCODE exon 33837240 33837345 . + . Parent=gene127 chr21 . intron 33837346 33840388 . + . Parent=gene127 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene127 chr21 . intron 33840556 33843651 . + . Parent=gene127 chr21 ENCODE exon 33843652 33849567 . + . Parent=gene127 chr21 . intron 33849568 33851331 . + . Parent=gene127 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene127 chr21 . intron 33851493 33853405 . + . Parent=gene127 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene127 chr21 . intron 33853553 33853762 . + . Parent=gene127 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene127 chr21 . intron 33853952 33861332 . + . Parent=gene127 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene127 chr21 . intron 33861444 33863146 . + . Parent=gene127 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene127 chr21 . intron 33863264 33866726 . + . Parent=gene127 chr21 ENCODE exon 33866727 33866806 . + . Parent=gene127 chr21 . intron 33866807 33867483 . + . Parent=gene127 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene127 chr21 . intron 33867632 33869771 . + . Parent=gene127 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene127 chr21 . intron 33869844 33869953 . + . Parent=gene127 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene127 chr21 . intron 33870070 33870593 . + . Parent=gene127 chr21 ENCODE exon 33870594 33871657 . + . Parent=gene127 ### chr21 ENCODE gene 33837241 33853232 . + . ID=gene128;Name=AP000304.8-006;name2=SON chr21 ENCODE exon 33837241 33837345 . + . Parent=gene128 chr21 ENCODE CDS 33837269 33837345 . + . Parent=gene128 chr21 . intron 33837346 33840388 . + . Parent=gene128 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene128 chr21 ENCODE CDS 33840389 33840555 . + . Parent=gene128 chr21 . intron 33840556 33843651 . + . Parent=gene128 chr21 ENCODE exon 33843652 33849567 . + . Parent=gene128 chr21 ENCODE CDS 33843652 33849567 . + . Parent=gene128 chr21 . intron 33849568 33851331 . + . Parent=gene128 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene128 chr21 ENCODE CDS 33851332 33851492 . + . Parent=gene128 chr21 . intron 33851493 33851721 . + . Parent=gene128 chr21 ENCODE CDS 33851722 33851727 . + . Parent=gene128 chr21 ENCODE exon 33851722 33853232 . + . Parent=gene128 ### chr21 ENCODE gene 33837246 33841215 . + . ID=gene129;Name=AP000304.8-011;name2=SON chr21 ENCODE exon 33837246 33837345 . + . Parent=gene129 chr21 . intron 33837346 33840388 . + . Parent=gene129 chr21 ENCODE exon 33840389 33840555 . + . Parent=gene129 chr21 . intron 33840556 33841176 . + . Parent=gene129 chr21 ENCODE exon 33841177 33841215 . + . Parent=gene129 ### chr21 ENCODE gene 33843772 33871651 . + . ID=gene130;Name=AP000304.8-020;name2=SON chr21 ENCODE exon 33843772 33844416 . + . Parent=gene130 chr21 . intron 33844417 33849477 . + . Parent=gene130 chr21 ENCODE exon 33849478 33849567 . + . Parent=gene130 chr21 . intron 33849568 33851331 . + . Parent=gene130 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene130 chr21 . intron 33851493 33853405 . + . Parent=gene130 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene130 chr21 . intron 33853553 33853762 . + . Parent=gene130 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene130 chr21 . intron 33853952 33861332 . + . Parent=gene130 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene130 chr21 . intron 33861444 33863146 . + . Parent=gene130 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene130 chr21 . intron 33863264 33867483 . + . Parent=gene130 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene130 chr21 . intron 33867632 33869771 . + . Parent=gene130 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene130 chr21 . intron 33869844 33869953 . + . Parent=gene130 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene130 chr21 . intron 33870070 33870593 . + . Parent=gene130 chr21 ENCODE exon 33870594 33871651 . + . Parent=gene130 ### chr21 ENCODE gene 33845060 33871657 . + . ID=gene131;Name=AP000304.8-007;name2=SON chr21 ENCODE exon 33845060 33845465 . + . Parent=gene131 chr21 . intron 33845466 33846423 . + . Parent=gene131 chr21 ENCODE exon 33846424 33849567 . + . Parent=gene131 chr21 . intron 33849568 33851331 . + . Parent=gene131 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene131 chr21 . intron 33851493 33853405 . + . Parent=gene131 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene131 chr21 . intron 33853553 33853762 . + . Parent=gene131 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene131 chr21 . intron 33853952 33861332 . + . Parent=gene131 chr21 ENCODE exon 33861333 33861443 . + . Parent=gene131 chr21 . intron 33861444 33863146 . + . Parent=gene131 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene131 chr21 . intron 33863264 33867483 . + . Parent=gene131 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene131 chr21 . intron 33867632 33869771 . + . Parent=gene131 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene131 chr21 . intron 33869844 33869953 . + . Parent=gene131 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene131 chr21 . intron 33870070 33870540 . + . Parent=gene131 chr21 ENCODE exon 33870541 33871657 . + . Parent=gene131 ### chr21 ENCODE gene 33849225 33861643 . + . ID=gene132;Name=AP000304.8-008;name2=SON chr21 ENCODE exon 33849225 33849567 . + . Parent=gene132 chr21 ENCODE CDS 33849225 33849567 . + . Parent=gene132 chr21 . intron 33849568 33851331 . + . Parent=gene132 chr21 ENCODE exon 33851332 33851492 . + . Parent=gene132 chr21 ENCODE CDS 33851332 33851492 . + . Parent=gene132 chr21 . intron 33851493 33853405 . + . Parent=gene132 chr21 ENCODE exon 33853406 33853552 . + . Parent=gene132 chr21 ENCODE CDS 33853406 33853552 . + . Parent=gene132 chr21 . intron 33853553 33853762 . + . Parent=gene132 chr21 ENCODE exon 33853763 33853951 . + . Parent=gene132 chr21 ENCODE CDS 33853763 33853951 . + . Parent=gene132 chr21 . intron 33853952 33861332 . + . Parent=gene132 chr21 ENCODE CDS 33861333 33861524 . + . Parent=gene132 chr21 ENCODE exon 33861333 33861643 . + . Parent=gene132 ### chr21 ENCODE gene 33861355 33863459 . + . ID=gene133;Name=AP000304.8-012;name2=SON chr21 ENCODE exon 33861355 33861443 . + . Parent=gene133 chr21 . intron 33861444 33863146 . + . Parent=gene133 chr21 ENCODE exon 33863147 33863459 . + . Parent=gene133 ### chr21 ENCODE gene 33861361 33870689 . + . ID=gene134;Name=AP000304.8-013;name2=SON chr21 ENCODE exon 33861361 33861443 . + . Parent=gene134 chr21 . intron 33861444 33863146 . + . Parent=gene134 chr21 ENCODE exon 33863147 33863263 . + . Parent=gene134 chr21 . intron 33863264 33866726 . + . Parent=gene134 chr21 ENCODE exon 33866727 33866806 . + . Parent=gene134 chr21 . intron 33866807 33867483 . + . Parent=gene134 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene134 chr21 . intron 33867632 33869771 . + . Parent=gene134 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene134 chr21 . intron 33869844 33869953 . + . Parent=gene134 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene134 chr21 . intron 33870070 33870540 . + . Parent=gene134 chr21 ENCODE exon 33870541 33870689 . + . Parent=gene134 ### chr21 ENCODE gene 33863952 33870660 . + . ID=gene135;Name=AP000304.8-019;name2=SON chr21 ENCODE exon 33863952 33864106 . + . Parent=gene135 chr21 . intron 33864107 33865926 . + . Parent=gene135 chr21 ENCODE exon 33865927 33865964 . + . Parent=gene135 chr21 . intron 33865965 33866726 . + . Parent=gene135 chr21 ENCODE exon 33866727 33866806 . + . Parent=gene135 chr21 . intron 33866807 33867483 . + . Parent=gene135 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene135 chr21 . intron 33867632 33869771 . + . Parent=gene135 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene135 chr21 . intron 33869844 33869953 . + . Parent=gene135 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene135 chr21 . intron 33870070 33870593 . + . Parent=gene135 chr21 ENCODE exon 33870594 33870660 . + . Parent=gene135 ### chr21 ENCODE gene 33865911 33870623 . + . ID=gene136;Name=AP000304.8-017;name2=SON chr21 ENCODE exon 33865911 33865964 . + . Parent=gene136 chr21 . intron 33865965 33866726 . + . Parent=gene136 chr21 ENCODE exon 33866727 33866806 . + . Parent=gene136 chr21 . intron 33866807 33867483 . + . Parent=gene136 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene136 chr21 . intron 33867632 33869771 . + . Parent=gene136 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene136 chr21 . intron 33869844 33869953 . + . Parent=gene136 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene136 chr21 . intron 33870070 33870593 . + . Parent=gene136 chr21 ENCODE exon 33870594 33870623 . + . Parent=gene136 ### chr21 ENCODE gene 33865911 33870645 . + . ID=gene137;Name=AP000304.8-018;name2=SON chr21 ENCODE exon 33865911 33865964 . + . Parent=gene137 chr21 . intron 33865965 33866726 . + . Parent=gene137 chr21 ENCODE exon 33866727 33866806 . + . Parent=gene137 chr21 . intron 33866807 33867483 . + . Parent=gene137 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene137 chr21 . intron 33867632 33869771 . + . Parent=gene137 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene137 chr21 . intron 33869844 33869953 . + . Parent=gene137 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene137 chr21 . intron 33870070 33870540 . + . Parent=gene137 chr21 ENCODE exon 33870541 33870645 . + . Parent=gene137 ### chr21 ENCODE gene 33866389 33871657 . + . ID=gene138;Name=AP000304.8-009;name2=SON chr21 ENCODE exon 33866389 33866806 . + . Parent=gene138 chr21 . intron 33866807 33867483 . + . Parent=gene138 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene138 chr21 . intron 33867632 33869771 . + . Parent=gene138 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene138 chr21 . intron 33869844 33869953 . + . Parent=gene138 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene138 chr21 . intron 33870070 33870593 . + . Parent=gene138 chr21 ENCODE exon 33870594 33871657 . + . Parent=gene138 ### chr21 ENCODE gene 33866703 33871057 . + . ID=gene139;Name=AP000304.8-014;name2=SON chr21 ENCODE exon 33866703 33866806 . + . Parent=gene139 chr21 . intron 33866807 33867483 . + . Parent=gene139 chr21 ENCODE exon 33867484 33867631 . + . Parent=gene139 chr21 . intron 33867632 33869771 . + . Parent=gene139 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene139 chr21 . intron 33869844 33869953 . + . Parent=gene139 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene139 chr21 . intron 33870070 33870540 . + . Parent=gene139 chr21 ENCODE exon 33870541 33871057 . + . Parent=gene139 ### chr21 ENCODE gene 33867201 33870692 . + . ID=gene140;Name=AP000304.8-015;name2=SON chr21 ENCODE exon 33867201 33867631 . + . Parent=gene140 chr21 . intron 33867632 33869771 . + . Parent=gene140 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene140 chr21 . intron 33869844 33869953 . + . Parent=gene140 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene140 chr21 . intron 33870070 33870540 . + . Parent=gene140 chr21 ENCODE exon 33870541 33870692 . + . Parent=gene140 ### chr21 ENCODE gene 33867390 33871158 . + . ID=gene141;Name=AP000304.8-016;name2=SON chr21 ENCODE exon 33867390 33867631 . + . Parent=gene141 chr21 . intron 33867632 33869771 . + . Parent=gene141 chr21 ENCODE exon 33869772 33869843 . + . Parent=gene141 chr21 . intron 33869844 33869953 . + . Parent=gene141 chr21 ENCODE exon 33869954 33870069 . + . Parent=gene141 chr21 . intron 33870070 33870593 . + . Parent=gene141 chr21 ENCODE exon 33870594 33871158 . + . Parent=gene141 ### chr21 ENCODE gene 33869653 33882846 . - . ID=gene142;Name=AP000304.11-008;name2=DONSON chr21 ENCODE exon 33869653 33869984 . - . Parent=gene142 chr21 . intron 33869985 33872474 . - . Parent=gene142 chr21 ENCODE exon 33872475 33872620 . - . Parent=gene142 chr21 ENCODE CDS 33872483 33872620 . - . Parent=gene142 chr21 . intron 33872621 33873525 . - . Parent=gene142 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene142 chr21 ENCODE CDS 33873526 33873738 . - . Parent=gene142 chr21 . intron 33873739 33875477 . - . Parent=gene142 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene142 chr21 ENCODE CDS 33875478 33875676 . - . Parent=gene142 chr21 . intron 33875677 33876126 . - . Parent=gene142 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene142 chr21 ENCODE CDS 33876127 33876231 . - . Parent=gene142 chr21 . intron 33876232 33876340 . - . Parent=gene142 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene142 chr21 ENCODE CDS 33876341 33876422 . - . Parent=gene142 chr21 . intron 33876423 33877663 . - . Parent=gene142 chr21 ENCODE exon 33877664 33877842 . - . Parent=gene142 chr21 ENCODE CDS 33877664 33877842 . - . Parent=gene142 chr21 . intron 33877843 33878765 . - . Parent=gene142 chr21 ENCODE exon 33878766 33878902 . - . Parent=gene142 chr21 ENCODE CDS 33878766 33878902 . - . Parent=gene142 chr21 . intron 33878903 33880153 . - . Parent=gene142 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene142 chr21 ENCODE CDS 33880154 33880357 . - . Parent=gene142 chr21 . intron 33880358 33881697 . - . Parent=gene142 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene142 chr21 ENCODE CDS 33881698 33881778 . - . Parent=gene142 chr21 . intron 33881779 33882496 . - . Parent=gene142 chr21 ENCODE CDS 33882497 33882817 . - . Parent=gene142 chr21 ENCODE exon 33882497 33882846 . - . Parent=gene142 ### chr21 ENCODE gene 33871737 33882822 . - . ID=gene143;Name=AP000304.11-007;name2=DONSON chr21 ENCODE exon 33871737 33872620 . - . Parent=gene143 chr21 . intron 33872621 33873525 . - . Parent=gene143 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene143 chr21 . intron 33873739 33875477 . - . Parent=gene143 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene143 chr21 . intron 33875677 33876126 . - . Parent=gene143 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene143 chr21 . intron 33876232 33876340 . - . Parent=gene143 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene143 chr21 . intron 33876423 33877663 . - . Parent=gene143 chr21 ENCODE exon 33877664 33877842 . - . Parent=gene143 chr21 . intron 33877843 33880153 . - . Parent=gene143 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene143 chr21 . intron 33880358 33881697 . - . Parent=gene143 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene143 chr21 . intron 33881779 33882496 . - . Parent=gene143 chr21 ENCODE exon 33882497 33882822 . - . Parent=gene143 ### chr21 ENCODE gene 33872081 33882884 . - . ID=gene144;Name=AP000304.11-001;name2=DONSON chr21 ENCODE exon 33872081 33872620 . - . Parent=gene144 chr21 ENCODE CDS 33872483 33872620 . - . Parent=gene144 chr21 . intron 33872621 33873525 . - . Parent=gene144 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene144 chr21 ENCODE CDS 33873526 33873738 . - . Parent=gene144 chr21 . intron 33873739 33875477 . - . Parent=gene144 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene144 chr21 ENCODE CDS 33875478 33875676 . - . Parent=gene144 chr21 . intron 33875677 33876126 . - . Parent=gene144 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene144 chr21 ENCODE CDS 33876127 33876231 . - . Parent=gene144 chr21 . intron 33876232 33876340 . - . Parent=gene144 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene144 chr21 ENCODE CDS 33876341 33876422 . - . Parent=gene144 chr21 . intron 33876423 33877663 . - . Parent=gene144 chr21 ENCODE exon 33877664 33877842 . - . Parent=gene144 chr21 ENCODE CDS 33877664 33877842 . - . Parent=gene144 chr21 . intron 33877843 33878765 . - . Parent=gene144 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene144 chr21 ENCODE CDS 33878766 33878944 . - . Parent=gene144 chr21 . intron 33878945 33880153 . - . Parent=gene144 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene144 chr21 ENCODE CDS 33880154 33880357 . - . Parent=gene144 chr21 . intron 33880358 33881697 . - . Parent=gene144 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene144 chr21 ENCODE CDS 33881698 33881778 . - . Parent=gene144 chr21 . intron 33881779 33882496 . - . Parent=gene144 chr21 ENCODE CDS 33882497 33882817 . - . Parent=gene144 chr21 ENCODE exon 33882497 33882884 . - . Parent=gene144 ### chr21 ENCODE gene 33872081 33889641 . - . ID=gene145;Name=AP000304.11-003;name2=DONSON chr21 ENCODE exon 33872081 33872620 . - . Parent=gene145 chr21 . intron 33872621 33873525 . - . Parent=gene145 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene145 chr21 . intron 33873739 33875477 . - . Parent=gene145 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene145 chr21 . intron 33875677 33876126 . - . Parent=gene145 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene145 chr21 . intron 33876232 33876340 . - . Parent=gene145 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene145 chr21 . intron 33876423 33877663 . - . Parent=gene145 chr21 ENCODE exon 33877664 33877842 . - . Parent=gene145 chr21 . intron 33877843 33878765 . - . Parent=gene145 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene145 chr21 . intron 33878945 33880153 . - . Parent=gene145 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene145 chr21 . intron 33880358 33881697 . - . Parent=gene145 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene145 chr21 . intron 33881779 33882496 . - . Parent=gene145 chr21 ENCODE exon 33882497 33883137 . - . Parent=gene145 chr21 . intron 33883138 33884016 . - . Parent=gene145 chr21 ENCODE exon 33884017 33884097 . - . Parent=gene145 chr21 . intron 33884098 33885337 . - . Parent=gene145 chr21 ENCODE exon 33885338 33885547 . - . Parent=gene145 chr21 . intron 33885548 33889531 . - . Parent=gene145 chr21 ENCODE exon 33889532 33889641 . - . Parent=gene145 ### chr21 ENCODE gene 33872093 33882846 . - . ID=gene146;Name=AP000304.11-004;name2=DONSON chr21 ENCODE exon 33872093 33872620 . - . Parent=gene146 chr21 . intron 33872621 33873525 . - . Parent=gene146 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene146 chr21 . intron 33873739 33875477 . - . Parent=gene146 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene146 chr21 . intron 33875677 33876126 . - . Parent=gene146 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene146 chr21 . intron 33876232 33876340 . - . Parent=gene146 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene146 chr21 . intron 33876423 33878765 . - . Parent=gene146 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene146 chr21 . intron 33878945 33880153 . - . Parent=gene146 chr21 ENCODE exon 33880154 33880236 . - . Parent=gene146 chr21 . intron 33880237 33881697 . - . Parent=gene146 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene146 chr21 . intron 33881779 33882496 . - . Parent=gene146 chr21 ENCODE exon 33882497 33882846 . - . Parent=gene146 ### chr21 ENCODE gene 33872100 33873790 . - . ID=gene147;Name=AP000304.11-010;name2=DONSON chr21 ENCODE exon 33872100 33872620 . - . Parent=gene147 chr21 . intron 33872621 33873525 . - . Parent=gene147 chr21 ENCODE exon 33873526 33873790 . - . Parent=gene147 ### chr21 ENCODE gene 33872118 33881778 . - . ID=gene148;Name=AP000304.11-006;name2=DONSON chr21 ENCODE exon 33872118 33872620 . - . Parent=gene148 chr21 . intron 33872621 33873525 . - . Parent=gene148 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene148 chr21 . intron 33873739 33875477 . - . Parent=gene148 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene148 chr21 . intron 33875677 33876126 . - . Parent=gene148 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene148 chr21 . intron 33876232 33876340 . - . Parent=gene148 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene148 chr21 . intron 33876423 33878765 . - . Parent=gene148 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene148 chr21 . intron 33878945 33880153 . - . Parent=gene148 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene148 chr21 . intron 33880358 33881697 . - . Parent=gene148 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene148 ### chr21 ENCODE gene 33872118 33881778 . - . ID=gene149;Name=AP000304.11-005;name2=DONSON chr21 ENCODE exon 33872118 33872620 . - . Parent=gene149 chr21 . intron 33872621 33873525 . - . Parent=gene149 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene149 chr21 . intron 33873739 33878765 . - . Parent=gene149 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene149 chr21 . intron 33878945 33880153 . - . Parent=gene149 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene149 chr21 . intron 33880358 33881697 . - . Parent=gene149 chr21 ENCODE exon 33881698 33881778 . - . Parent=gene149 ### chr21 ENCODE gene 33872377 33882810 . - . ID=gene150;Name=AP000304.11-002;name2=DONSON chr21 ENCODE exon 33872377 33872620 . - . Parent=gene150 chr21 ENCODE CDS 33872483 33872620 . - . Parent=gene150 chr21 . intron 33872621 33873525 . - . Parent=gene150 chr21 ENCODE exon 33873526 33873738 . - . Parent=gene150 chr21 ENCODE CDS 33873526 33873738 . - . Parent=gene150 chr21 . intron 33873739 33875477 . - . Parent=gene150 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene150 chr21 ENCODE CDS 33875478 33875676 . - . Parent=gene150 chr21 . intron 33875677 33876126 . - . Parent=gene150 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene150 chr21 ENCODE CDS 33876127 33876231 . - . Parent=gene150 chr21 . intron 33876232 33876340 . - . Parent=gene150 chr21 ENCODE exon 33876341 33876422 . - . Parent=gene150 chr21 ENCODE CDS 33876341 33876422 . - . Parent=gene150 chr21 . intron 33876423 33877663 . - . Parent=gene150 chr21 ENCODE exon 33877664 33877842 . - . Parent=gene150 chr21 ENCODE CDS 33877664 33877842 . - . Parent=gene150 chr21 . intron 33877843 33878765 . - . Parent=gene150 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene150 chr21 ENCODE CDS 33878766 33878944 . - . Parent=gene150 chr21 . intron 33878945 33880153 . - . Parent=gene150 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene150 chr21 ENCODE CDS 33880154 33880357 . - . Parent=gene150 chr21 . intron 33880358 33882496 . - . Parent=gene150 chr21 ENCODE exon 33882497 33882810 . - . Parent=gene150 chr21 ENCODE CDS 33882497 33882810 . - . Parent=gene150 ### chr21 ENCODE gene 33873700 33880334 . - . ID=gene151;Name=AP000304.11-009;name2=DONSON chr21 ENCODE exon 33873700 33873738 . - . Parent=gene151 chr21 ENCODE CDS 33873700 33873738 . - . Parent=gene151 chr21 . intron 33873739 33875477 . - . Parent=gene151 chr21 ENCODE exon 33875478 33875676 . - . Parent=gene151 chr21 ENCODE CDS 33875478 33875676 . - . Parent=gene151 chr21 . intron 33875677 33876126 . - . Parent=gene151 chr21 ENCODE exon 33876127 33876231 . - . Parent=gene151 chr21 ENCODE CDS 33876127 33876231 . - . Parent=gene151 chr21 . intron 33876232 33878765 . - . Parent=gene151 chr21 ENCODE exon 33878766 33878944 . - . Parent=gene151 chr21 ENCODE CDS 33878766 33878944 . - . Parent=gene151 chr21 . intron 33878945 33880153 . - . Parent=gene151 chr21 ENCODE exon 33880154 33880334 . - . Parent=gene151 chr21 ENCODE CDS 33880154 33880334 . - . Parent=gene151 ### chr21 ENCODE gene 33875351 33876230 . - . ID=gene152;Name=AP000304.11-011;name2=DONSON chr21 ENCODE exon 33875351 33875676 . - . Parent=gene152 chr21 . intron 33875677 33876126 . - . Parent=gene152 chr21 ENCODE exon 33876127 33876230 . - . Parent=gene152 ### chr21 ENCODE gene 33878863 34206505 . - . ID=gene153;Name=AP000304.11-012;name2=DONSON chr21 ENCODE exon 33878863 33878944 . - . Parent=gene153 chr21 ENCODE CDS 33878863 33878944 . - . Parent=gene153 chr21 . intron 33878945 33880153 . - . Parent=gene153 chr21 ENCODE exon 33880154 33880357 . - . Parent=gene153 chr21 ENCODE CDS 33880154 33880357 . - . Parent=gene153 chr21 . intron 33880358 34201514 . - . Parent=gene153 chr21 ENCODE exon 34201515 34201627 . - . Parent=gene153 chr21 ENCODE CDS 34201515 34201627 . - . Parent=gene153 chr21 . intron 34201628 34203255 . - . Parent=gene153 chr21 ENCODE exon 34203256 34203385 . - . Parent=gene153 chr21 ENCODE CDS 34203256 34203385 . - . Parent=gene153 chr21 . intron 34203386 34206462 . - . Parent=gene153 chr21 ENCODE exon 34206463 34206505 . - . Parent=gene153 chr21 ENCODE CDS 34206463 34206505 . - . Parent=gene153 ### chr21 ENCODE gene 33883517 33935936 . - . ID=gene154;Name=AP000304.10-001;name2=CRYZL1 chr21 ENCODE exon 33883517 33884097 . - . Parent=gene154 chr21 ENCODE CDS 33883998 33884097 . - . Parent=gene154 chr21 . intron 33884098 33885337 . - . Parent=gene154 chr21 ENCODE exon 33885338 33885383 . - . Parent=gene154 chr21 ENCODE CDS 33885338 33885383 . - . Parent=gene154 chr21 . intron 33885384 33889906 . - . Parent=gene154 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene154 chr21 ENCODE CDS 33889907 33890012 . - . Parent=gene154 chr21 . intron 33890013 33891455 . - . Parent=gene154 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene154 chr21 ENCODE CDS 33891456 33891577 . - . Parent=gene154 chr21 . intron 33891578 33893325 . - . Parent=gene154 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene154 chr21 ENCODE CDS 33893326 33893424 . - . Parent=gene154 chr21 . intron 33893425 33896409 . - . Parent=gene154 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene154 chr21 ENCODE CDS 33896410 33896521 . - . Parent=gene154 chr21 . intron 33896522 33897579 . - . Parent=gene154 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene154 chr21 ENCODE CDS 33897580 33897713 . - . Parent=gene154 chr21 . intron 33897714 33907713 . - . Parent=gene154 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene154 chr21 ENCODE CDS 33907714 33907782 . - . Parent=gene154 chr21 . intron 33907783 33910881 . - . Parent=gene154 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene154 chr21 ENCODE CDS 33910882 33910926 . - . Parent=gene154 chr21 . intron 33910927 33916171 . - . Parent=gene154 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene154 chr21 ENCODE CDS 33916172 33916244 . - . Parent=gene154 chr21 . intron 33916245 33918858 . - . Parent=gene154 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene154 chr21 ENCODE CDS 33918859 33918936 . - . Parent=gene154 chr21 . intron 33918937 33925661 . - . Parent=gene154 chr21 ENCODE CDS 33925662 33925727 . - . Parent=gene154 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene154 chr21 . intron 33925734 33935856 . - . Parent=gene154 chr21 ENCODE exon 33935857 33935936 . - . Parent=gene154 ### chr21 ENCODE gene 33883562 33936094 . - . ID=gene155;Name=AP000304.10-007;name2=CRYZL1 chr21 ENCODE exon 33883562 33884097 . - . Parent=gene155 chr21 ENCODE CDS 33883998 33884097 . - . Parent=gene155 chr21 . intron 33884098 33885337 . - . Parent=gene155 chr21 ENCODE exon 33885338 33885383 . - . Parent=gene155 chr21 ENCODE CDS 33885338 33885383 . - . Parent=gene155 chr21 . intron 33885384 33889906 . - . Parent=gene155 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene155 chr21 ENCODE CDS 33889907 33890012 . - . Parent=gene155 chr21 . intron 33890013 33891455 . - . Parent=gene155 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene155 chr21 ENCODE CDS 33891456 33891577 . - . Parent=gene155 chr21 . intron 33891578 33893325 . - . Parent=gene155 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene155 chr21 ENCODE CDS 33893326 33893424 . - . Parent=gene155 chr21 . intron 33893425 33896409 . - . Parent=gene155 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene155 chr21 ENCODE CDS 33896410 33896521 . - . Parent=gene155 chr21 . intron 33896522 33897579 . - . Parent=gene155 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene155 chr21 ENCODE CDS 33897580 33897713 . - . Parent=gene155 chr21 . intron 33897714 33907713 . - . Parent=gene155 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene155 chr21 ENCODE CDS 33907714 33907782 . - . Parent=gene155 chr21 . intron 33907783 33916171 . - . Parent=gene155 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene155 chr21 ENCODE CDS 33916172 33916244 . - . Parent=gene155 chr21 . intron 33916245 33918858 . - . Parent=gene155 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene155 chr21 ENCODE CDS 33918859 33918936 . - . Parent=gene155 chr21 . intron 33918937 33925661 . - . Parent=gene155 chr21 ENCODE CDS 33925662 33925727 . - . Parent=gene155 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene155 chr21 . intron 33925734 33935856 . - . Parent=gene155 chr21 ENCODE exon 33935857 33936094 . - . Parent=gene155 ### chr21 ENCODE gene 33883637 33885894 . - . ID=gene156;Name=AP000304.10-023;name2=CRYZL1 chr21 ENCODE exon 33883637 33884097 . - . Parent=gene156 chr21 . intron 33884098 33885337 . - . Parent=gene156 chr21 ENCODE exon 33885338 33885894 . - . Parent=gene156 ### chr21 ENCODE gene 33883643 33935923 . - . ID=gene157;Name=AP000304.10-002;name2=CRYZL1 chr21 ENCODE exon 33883643 33884097 . - . Parent=gene157 chr21 ENCODE CDS 33884083 33884097 . - . Parent=gene157 chr21 . intron 33884098 33885337 . - . Parent=gene157 chr21 ENCODE exon 33885338 33885387 . - . Parent=gene157 chr21 ENCODE CDS 33885338 33885387 . - . Parent=gene157 chr21 . intron 33885388 33889906 . - . Parent=gene157 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene157 chr21 ENCODE CDS 33889907 33890012 . - . Parent=gene157 chr21 . intron 33890013 33891455 . - . Parent=gene157 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene157 chr21 ENCODE CDS 33891456 33891577 . - . Parent=gene157 chr21 . intron 33891578 33893325 . - . Parent=gene157 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene157 chr21 ENCODE CDS 33893326 33893424 . - . Parent=gene157 chr21 . intron 33893425 33896409 . - . Parent=gene157 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene157 chr21 ENCODE CDS 33896410 33896521 . - . Parent=gene157 chr21 . intron 33896522 33897579 . - . Parent=gene157 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene157 chr21 ENCODE CDS 33897580 33897713 . - . Parent=gene157 chr21 . intron 33897714 33907713 . - . Parent=gene157 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene157 chr21 ENCODE CDS 33907714 33907782 . - . Parent=gene157 chr21 . intron 33907783 33910881 . - . Parent=gene157 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene157 chr21 ENCODE CDS 33910882 33910926 . - . Parent=gene157 chr21 . intron 33910927 33916171 . - . Parent=gene157 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene157 chr21 ENCODE CDS 33916172 33916244 . - . Parent=gene157 chr21 . intron 33916245 33918858 . - . Parent=gene157 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene157 chr21 ENCODE CDS 33918859 33918936 . - . Parent=gene157 chr21 . intron 33918937 33925661 . - . Parent=gene157 chr21 ENCODE CDS 33925662 33925727 . - . Parent=gene157 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene157 chr21 . intron 33925734 33935856 . - . Parent=gene157 chr21 ENCODE exon 33935857 33935923 . - . Parent=gene157 ### chr21 ENCODE gene 33883644 33907736 . - . ID=gene158;Name=AP000304.10-009;name2=CRYZL1 chr21 ENCODE exon 33883644 33884097 . - . Parent=gene158 chr21 . intron 33884098 33885337 . - . Parent=gene158 chr21 ENCODE exon 33885338 33885547 . - . Parent=gene158 chr21 . intron 33885548 33889531 . - . Parent=gene158 chr21 ENCODE exon 33889532 33889790 . - . Parent=gene158 chr21 . intron 33889791 33889906 . - . Parent=gene158 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene158 chr21 . intron 33890013 33891455 . - . Parent=gene158 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene158 chr21 . intron 33891578 33893325 . - . Parent=gene158 chr21 ENCODE exon 33893326 33893461 . - . Parent=gene158 chr21 . intron 33893462 33896409 . - . Parent=gene158 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene158 chr21 . intron 33896522 33897579 . - . Parent=gene158 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene158 chr21 . intron 33897714 33907713 . - . Parent=gene158 chr21 ENCODE exon 33907714 33907736 . - . Parent=gene158 ### chr21 ENCODE gene 33883721 33893327 . - . ID=gene159;Name=AP000304.10-021;name2=CRYZL1 chr21 ENCODE exon 33883721 33883981 . - . Parent=gene159 chr21 ENCODE CDS 33883921 33883981 . - . Parent=gene159 chr21 . intron 33883982 33885337 . - . Parent=gene159 chr21 ENCODE exon 33885338 33885383 . - . Parent=gene159 chr21 ENCODE CDS 33885338 33885383 . - . Parent=gene159 chr21 . intron 33885384 33889906 . - . Parent=gene159 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene159 chr21 ENCODE CDS 33889907 33890012 . - . Parent=gene159 chr21 . intron 33890013 33891455 . - . Parent=gene159 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene159 chr21 ENCODE CDS 33891456 33891577 . - . Parent=gene159 chr21 . intron 33891578 33893325 . - . Parent=gene159 chr21 ENCODE exon 33893326 33893327 . - . Parent=gene159 chr21 ENCODE CDS 33893326 33893327 . - . Parent=gene159 ### chr21 ENCODE gene 33883736 33891576 . - . ID=gene160;Name=AP000304.10-022;name2=CRYZL1 chr21 ENCODE exon 33883736 33884097 . - . Parent=gene160 chr21 . intron 33884098 33885337 . - . Parent=gene160 chr21 ENCODE exon 33885338 33885404 . - . Parent=gene160 chr21 . intron 33885405 33889906 . - . Parent=gene160 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene160 chr21 . intron 33890013 33891455 . - . Parent=gene160 chr21 ENCODE exon 33891456 33891576 . - . Parent=gene160 ### chr21 ENCODE gene 33883945 33896441 . - . ID=gene161;Name=AP000304.10-019;name2=CRYZL1 chr21 ENCODE exon 33883945 33884097 . - . Parent=gene161 chr21 . intron 33884098 33885337 . - . Parent=gene161 chr21 ENCODE exon 33885338 33885383 . - . Parent=gene161 chr21 . intron 33885384 33889906 . - . Parent=gene161 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene161 chr21 . intron 33890013 33891455 . - . Parent=gene161 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene161 chr21 . intron 33891578 33893325 . - . Parent=gene161 chr21 ENCODE exon 33893326 33893461 . - . Parent=gene161 chr21 . intron 33893462 33896409 . - . Parent=gene161 chr21 ENCODE exon 33896410 33896441 . - . Parent=gene161 ### chr21 ENCODE gene 33888683 33935935 . - . ID=gene162;Name=AP000304.10-003;name2=CRYZL1 chr21 ENCODE exon 33888683 33889790 . - . Parent=gene162 chr21 ENCODE CDS 33889789 33889790 . - . Parent=gene162 chr21 . intron 33889791 33889906 . - . Parent=gene162 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene162 chr21 ENCODE CDS 33889907 33890012 . - . Parent=gene162 chr21 . intron 33890013 33891455 . - . Parent=gene162 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene162 chr21 ENCODE CDS 33891456 33891577 . - . Parent=gene162 chr21 . intron 33891578 33893325 . - . Parent=gene162 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene162 chr21 ENCODE CDS 33893326 33893424 . - . Parent=gene162 chr21 . intron 33893425 33896409 . - . Parent=gene162 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene162 chr21 ENCODE CDS 33896410 33896521 . - . Parent=gene162 chr21 . intron 33896522 33897579 . - . Parent=gene162 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene162 chr21 ENCODE CDS 33897580 33897713 . - . Parent=gene162 chr21 . intron 33897714 33907713 . - . Parent=gene162 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene162 chr21 ENCODE CDS 33907714 33907782 . - . Parent=gene162 chr21 . intron 33907783 33910881 . - . Parent=gene162 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene162 chr21 ENCODE CDS 33910882 33910926 . - . Parent=gene162 chr21 . intron 33910927 33916171 . - . Parent=gene162 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene162 chr21 ENCODE CDS 33916172 33916244 . - . Parent=gene162 chr21 . intron 33916245 33918858 . - . Parent=gene162 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene162 chr21 ENCODE CDS 33918859 33918936 . - . Parent=gene162 chr21 . intron 33918937 33925661 . - . Parent=gene162 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene162 chr21 ENCODE CDS 33925662 33925733 . - . Parent=gene162 chr21 . intron 33925734 33935354 . - . Parent=gene162 chr21 ENCODE CDS 33935355 33935420 . - . Parent=gene162 chr21 ENCODE exon 33935355 33935481 . - . Parent=gene162 chr21 . intron 33935482 33935856 . - . Parent=gene162 chr21 ENCODE exon 33935857 33935935 . - . Parent=gene162 ### chr21 ENCODE gene 33888819 33935917 . - . ID=gene163;Name=AP000304.10-006;name2=CRYZL1 chr21 ENCODE exon 33888819 33889790 . - . Parent=gene163 chr21 . intron 33889791 33889904 . - . Parent=gene163 chr21 ENCODE exon 33889905 33890012 . - . Parent=gene163 chr21 . intron 33890013 33891455 . - . Parent=gene163 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene163 chr21 . intron 33891578 33893325 . - . Parent=gene163 chr21 ENCODE exon 33893326 33893461 . - . Parent=gene163 chr21 . intron 33893462 33896409 . - . Parent=gene163 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene163 chr21 . intron 33896522 33897579 . - . Parent=gene163 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene163 chr21 . intron 33897714 33907713 . - . Parent=gene163 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene163 chr21 . intron 33907783 33916171 . - . Parent=gene163 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene163 chr21 . intron 33916245 33918858 . - . Parent=gene163 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene163 chr21 . intron 33918937 33925661 . - . Parent=gene163 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene163 chr21 . intron 33925734 33935856 . - . Parent=gene163 chr21 ENCODE exon 33935857 33935917 . - . Parent=gene163 ### chr21 ENCODE gene 33888838 33936514 . - . ID=gene164;Name=AP000304.10-005;name2=CRYZL1 chr21 ENCODE exon 33888838 33889790 . - . Parent=gene164 chr21 . intron 33889791 33889906 . - . Parent=gene164 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene164 chr21 . intron 33890013 33891455 . - . Parent=gene164 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene164 chr21 . intron 33891578 33893325 . - . Parent=gene164 chr21 ENCODE exon 33893326 33893461 . - . Parent=gene164 chr21 . intron 33893462 33896409 . - . Parent=gene164 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene164 chr21 . intron 33896522 33897579 . - . Parent=gene164 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene164 chr21 . intron 33897714 33907713 . - . Parent=gene164 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene164 chr21 . intron 33907783 33910881 . - . Parent=gene164 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene164 chr21 . intron 33910927 33916171 . - . Parent=gene164 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene164 chr21 . intron 33916245 33918858 . - . Parent=gene164 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene164 chr21 . intron 33918937 33925661 . - . Parent=gene164 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene164 chr21 . intron 33925734 33935856 . - . Parent=gene164 chr21 ENCODE exon 33935857 33936514 . - . Parent=gene164 ### chr21 ENCODE gene 33889307 33916218 . - . ID=gene165;Name=AP000304.10-017;name2=CRYZL1 chr21 ENCODE exon 33889307 33889704 . - . Parent=gene165 chr21 ENCODE CDS 33889609 33889704 . - . Parent=gene165 chr21 . intron 33889705 33891455 . - . Parent=gene165 chr21 ENCODE exon 33891456 33891577 . - . Parent=gene165 chr21 ENCODE CDS 33891456 33891577 . - . Parent=gene165 chr21 . intron 33891578 33893325 . - . Parent=gene165 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene165 chr21 ENCODE CDS 33893326 33893424 . - . Parent=gene165 chr21 . intron 33893425 33896409 . - . Parent=gene165 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene165 chr21 ENCODE CDS 33896410 33896521 . - . Parent=gene165 chr21 . intron 33896522 33897579 . - . Parent=gene165 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene165 chr21 ENCODE CDS 33897580 33897713 . - . Parent=gene165 chr21 . intron 33897714 33907713 . - . Parent=gene165 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene165 chr21 ENCODE CDS 33907714 33907782 . - . Parent=gene165 chr21 . intron 33907783 33910881 . - . Parent=gene165 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene165 chr21 ENCODE CDS 33910882 33910926 . - . Parent=gene165 chr21 . intron 33910927 33916171 . - . Parent=gene165 chr21 ENCODE exon 33916172 33916218 . - . Parent=gene165 chr21 ENCODE CDS 33916172 33916218 . - . Parent=gene165 ### chr21 ENCODE gene 33889513 33896432 . - . ID=gene166;Name=AP000304.10-020;name2=CRYZL1 chr21 ENCODE exon 33889513 33889790 . - . Parent=gene166 chr21 . intron 33889791 33889906 . - . Parent=gene166 chr21 ENCODE exon 33889907 33890012 . - . Parent=gene166 chr21 . intron 33890013 33893325 . - . Parent=gene166 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene166 chr21 . intron 33893425 33896409 . - . Parent=gene166 chr21 ENCODE exon 33896410 33896432 . - . Parent=gene166 ### chr21 ENCODE gene 33890238 33897624 . - . ID=gene167;Name=AP000304.10-018;name2=CRYZL1 chr21 ENCODE exon 33890238 33890389 . - . Parent=gene167 chr21 ENCODE CDS 33890352 33890389 . - . Parent=gene167 chr21 . intron 33890390 33893325 . - . Parent=gene167 chr21 ENCODE exon 33893326 33893424 . - . Parent=gene167 chr21 ENCODE CDS 33893326 33893424 . - . Parent=gene167 chr21 . intron 33893425 33896409 . - . Parent=gene167 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene167 chr21 ENCODE CDS 33896410 33896521 . - . Parent=gene167 chr21 . intron 33896522 33897579 . - . Parent=gene167 chr21 ENCODE exon 33897580 33897624 . - . Parent=gene167 chr21 ENCODE CDS 33897580 33897624 . - . Parent=gene167 ### chr21 ENCODE gene 33893372 33935921 . - . ID=gene168;Name=AP000304.10-012;name2=CRYZL1 chr21 ENCODE exon 33893372 33893424 . - . Parent=gene168 chr21 ENCODE CDS 33893372 33893424 . - . Parent=gene168 chr21 . intron 33893425 33896409 . - . Parent=gene168 chr21 ENCODE exon 33896410 33896521 . - . Parent=gene168 chr21 ENCODE CDS 33896410 33896521 . - . Parent=gene168 chr21 . intron 33896522 33897579 . - . Parent=gene168 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene168 chr21 ENCODE CDS 33897580 33897713 . - . Parent=gene168 chr21 . intron 33897714 33907713 . - . Parent=gene168 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene168 chr21 ENCODE CDS 33907714 33907782 . - . Parent=gene168 chr21 . intron 33907783 33910881 . - . Parent=gene168 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene168 chr21 ENCODE CDS 33910882 33910926 . - . Parent=gene168 chr21 . intron 33910927 33916171 . - . Parent=gene168 chr21 ENCODE CDS 33916172 33916232 . - . Parent=gene168 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene168 chr21 . intron 33916245 33918858 . - . Parent=gene168 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene168 chr21 . intron 33918937 33935856 . - . Parent=gene168 chr21 ENCODE exon 33935857 33935921 . - . Parent=gene168 ### chr21 ENCODE gene 33896444 33927878 . - . ID=gene169;Name=AP000304.10-013;name2=CRYZL1 chr21 ENCODE exon 33896444 33896521 . - . Parent=gene169 chr21 ENCODE CDS 33896444 33896521 . - . Parent=gene169 chr21 . intron 33896522 33897579 . - . Parent=gene169 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene169 chr21 ENCODE CDS 33897580 33897713 . - . Parent=gene169 chr21 . intron 33897714 33907713 . - . Parent=gene169 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene169 chr21 ENCODE CDS 33907714 33907782 . - . Parent=gene169 chr21 . intron 33907783 33910881 . - . Parent=gene169 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene169 chr21 ENCODE CDS 33910882 33910926 . - . Parent=gene169 chr21 . intron 33910927 33916171 . - . Parent=gene169 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene169 chr21 ENCODE CDS 33916172 33916244 . - . Parent=gene169 chr21 . intron 33916245 33918858 . - . Parent=gene169 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene169 chr21 ENCODE CDS 33918859 33918936 . - . Parent=gene169 chr21 . intron 33918937 33925661 . - . Parent=gene169 chr21 ENCODE CDS 33925662 33925727 . - . Parent=gene169 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene169 chr21 . intron 33925734 33927821 . - . Parent=gene169 chr21 ENCODE exon 33927822 33927878 . - . Parent=gene169 ### chr21 ENCODE gene 33896508 33911352 . - . ID=gene170;Name=AP000304.10-015;name2=CRYZL1 chr21 ENCODE exon 33896508 33896521 . - . Parent=gene170 chr21 . intron 33896522 33897579 . - . Parent=gene170 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene170 chr21 . intron 33897714 33907713 . - . Parent=gene170 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene170 chr21 . intron 33907783 33910881 . - . Parent=gene170 chr21 ENCODE exon 33910882 33911352 . - . Parent=gene170 ### chr21 ENCODE gene 33896509 33935906 . - . ID=gene171;Name=AP000304.10-014;name2=CRYZL1 chr21 ENCODE exon 33896509 33896521 . - . Parent=gene171 chr21 ENCODE CDS 33896509 33896521 . - . Parent=gene171 chr21 . intron 33896522 33897579 . - . Parent=gene171 chr21 ENCODE exon 33897580 33897713 . - . Parent=gene171 chr21 ENCODE CDS 33897580 33897713 . - . Parent=gene171 chr21 . intron 33897714 33907713 . - . Parent=gene171 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene171 chr21 ENCODE CDS 33907714 33907782 . - . Parent=gene171 chr21 . intron 33907783 33910881 . - . Parent=gene171 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene171 chr21 ENCODE CDS 33910882 33910926 . - . Parent=gene171 chr21 . intron 33910927 33916171 . - . Parent=gene171 chr21 ENCODE CDS 33916172 33916232 . - . Parent=gene171 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene171 chr21 . intron 33916245 33918858 . - . Parent=gene171 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene171 chr21 . intron 33918937 33925661 . - . Parent=gene171 chr21 ENCODE exon 33925662 33925703 . - . Parent=gene171 chr21 . intron 33925704 33935856 . - . Parent=gene171 chr21 ENCODE exon 33935857 33935906 . - . Parent=gene171 ### chr21 ENCODE gene 33897332 33935896 . - . ID=gene172;Name=AP000304.10-016;name2=CRYZL1 chr21 ENCODE exon 33897332 33897713 . - . Parent=gene172 chr21 . intron 33897714 33907713 . - . Parent=gene172 chr21 ENCODE exon 33907714 33907782 . - . Parent=gene172 chr21 . intron 33907783 33910881 . - . Parent=gene172 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene172 chr21 . intron 33910927 33916171 . - . Parent=gene172 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene172 chr21 . intron 33916245 33918858 . - . Parent=gene172 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene172 chr21 . intron 33918937 33925661 . - . Parent=gene172 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene172 chr21 . intron 33925734 33935856 . - . Parent=gene172 chr21 ENCODE exon 33935857 33935896 . - . Parent=gene172 ### chr21 ENCODE gene 33910463 33935898 . - . ID=gene173;Name=AP000304.10-008;name2=CRYZL1 chr21 ENCODE exon 33910463 33910779 . - . Parent=gene173 chr21 ENCODE CDS 33910700 33910779 . - . Parent=gene173 chr21 . intron 33910780 33910881 . - . Parent=gene173 chr21 ENCODE exon 33910882 33910926 . - . Parent=gene173 chr21 ENCODE CDS 33910882 33910926 . - . Parent=gene173 chr21 . intron 33910927 33916171 . - . Parent=gene173 chr21 ENCODE exon 33916172 33916244 . - . Parent=gene173 chr21 ENCODE CDS 33916172 33916244 . - . Parent=gene173 chr21 . intron 33916245 33918858 . - . Parent=gene173 chr21 ENCODE exon 33918859 33918936 . - . Parent=gene173 chr21 ENCODE CDS 33918859 33918936 . - . Parent=gene173 chr21 . intron 33918937 33925661 . - . Parent=gene173 chr21 ENCODE CDS 33925662 33925727 . - . Parent=gene173 chr21 ENCODE exon 33925662 33925733 . - . Parent=gene173 chr21 . intron 33925734 33935856 . - . Parent=gene173 chr21 ENCODE exon 33935857 33935898 . - . Parent=gene173 ### chr21 ENCODE gene 33925669 33938102 . - . ID=gene174;Name=AP000304.10-011;name2=CRYZL1 chr21 ENCODE exon 33925669 33925733 . - . Parent=gene174 chr21 . intron 33925734 33937547 . - . Parent=gene174 chr21 ENCODE exon 33937548 33938102 . - . Parent=gene174 ### chr21 ENCODE gene 33933921 33935897 . - . ID=gene175;Name=AP000304.10-004;name2=CRYZL1 chr21 ENCODE exon 33933921 33934364 . - . Parent=gene175 chr21 ENCODE CDS 33934356 33934364 . - . Parent=gene175 chr21 . intron 33934365 33935354 . - . Parent=gene175 chr21 ENCODE CDS 33935355 33935420 . - . Parent=gene175 chr21 ENCODE exon 33935355 33935481 . - . Parent=gene175 chr21 . intron 33935482 33935856 . - . Parent=gene175 chr21 ENCODE exon 33935857 33935897 . - . Parent=gene175 ### chr21 ENCODE gene 33936576 34088586 . + . ID=gene176;Name=AP000313.6-020;name2=ITSN1 chr21 ENCODE exon 33936576 33936889 . + . Parent=gene176 chr21 . intron 33936890 34012971 . + . Parent=gene176 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene176 chr21 ENCODE CDS 34013004 34013031 . + . Parent=gene176 chr21 . intron 34013032 34015352 . + . Parent=gene176 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene176 chr21 ENCODE CDS 34015353 34015445 . + . Parent=gene176 chr21 . intron 34015446 34016762 . + . Parent=gene176 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene176 chr21 ENCODE CDS 34016763 34016826 . + . Parent=gene176 chr21 . intron 34016827 34029218 . + . Parent=gene176 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene176 chr21 ENCODE CDS 34029219 34029379 . + . Parent=gene176 chr21 . intron 34029380 34044428 . + . Parent=gene176 chr21 ENCODE exon 34044429 34044497 . + . Parent=gene176 chr21 ENCODE CDS 34044429 34044497 . + . Parent=gene176 chr21 . intron 34044498 34045984 . + . Parent=gene176 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene176 chr21 ENCODE CDS 34045985 34046081 . + . Parent=gene176 chr21 . intron 34046082 34049471 . + . Parent=gene176 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene176 chr21 ENCODE CDS 34049472 34049572 . + . Parent=gene176 chr21 . intron 34049573 34056096 . + . Parent=gene176 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene176 chr21 ENCODE CDS 34056097 34056160 . + . Parent=gene176 chr21 . intron 34056161 34060048 . + . Parent=gene176 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene176 chr21 ENCODE CDS 34060049 34060186 . + . Parent=gene176 chr21 . intron 34060187 34061886 . + . Parent=gene176 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene176 chr21 ENCODE CDS 34061887 34062002 . + . Parent=gene176 chr21 . intron 34062003 34066234 . + . Parent=gene176 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene176 chr21 ENCODE CDS 34066235 34066497 . + . Parent=gene176 chr21 . intron 34066498 34068902 . + . Parent=gene176 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene176 chr21 ENCODE CDS 34068903 34069052 . + . Parent=gene176 chr21 . intron 34069053 34069141 . + . Parent=gene176 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene176 chr21 ENCODE CDS 34069142 34069282 . + . Parent=gene176 chr21 . intron 34069283 34075634 . + . Parent=gene176 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene176 chr21 ENCODE CDS 34075635 34075722 . + . Parent=gene176 chr21 . intron 34075723 34076167 . + . Parent=gene176 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene176 chr21 ENCODE CDS 34076168 34076307 . + . Parent=gene176 chr21 . intron 34076308 34088514 . + . Parent=gene176 chr21 ENCODE exon 34088515 34088586 . + . Parent=gene176 chr21 ENCODE CDS 34088515 34088586 . + . Parent=gene176 ### chr21 ENCODE gene 33936576 34131192 . + . ID=gene177;Name=AP000313.6-025;name2=ITSN1 chr21 ENCODE exon 33936576 33936889 . + . Parent=gene177 chr21 . intron 33936890 34012971 . + . Parent=gene177 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene177 chr21 ENCODE CDS 34013004 34013031 . + . Parent=gene177 chr21 . intron 34013032 34015352 . + . Parent=gene177 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene177 chr21 ENCODE CDS 34015353 34015445 . + . Parent=gene177 chr21 . intron 34015446 34016762 . + . Parent=gene177 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene177 chr21 ENCODE CDS 34016763 34016826 . + . Parent=gene177 chr21 . intron 34016827 34029218 . + . Parent=gene177 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene177 chr21 ENCODE CDS 34029219 34029379 . + . Parent=gene177 chr21 . intron 34029380 34044428 . + . Parent=gene177 chr21 ENCODE exon 34044429 34044497 . + . Parent=gene177 chr21 ENCODE CDS 34044429 34044497 . + . Parent=gene177 chr21 . intron 34044498 34045984 . + . Parent=gene177 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene177 chr21 ENCODE CDS 34045985 34046081 . + . Parent=gene177 chr21 . intron 34046082 34049471 . + . Parent=gene177 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene177 chr21 ENCODE CDS 34049472 34049572 . + . Parent=gene177 chr21 . intron 34049573 34056096 . + . Parent=gene177 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene177 chr21 ENCODE CDS 34056097 34056160 . + . Parent=gene177 chr21 . intron 34056161 34060048 . + . Parent=gene177 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene177 chr21 ENCODE CDS 34060049 34060186 . + . Parent=gene177 chr21 . intron 34060187 34061886 . + . Parent=gene177 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene177 chr21 ENCODE CDS 34061887 34062002 . + . Parent=gene177 chr21 . intron 34062003 34066234 . + . Parent=gene177 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene177 chr21 ENCODE CDS 34066235 34066497 . + . Parent=gene177 chr21 . intron 34066498 34068902 . + . Parent=gene177 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene177 chr21 ENCODE CDS 34068903 34069052 . + . Parent=gene177 chr21 . intron 34069053 34069141 . + . Parent=gene177 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene177 chr21 ENCODE CDS 34069142 34069282 . + . Parent=gene177 chr21 . intron 34069283 34075634 . + . Parent=gene177 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene177 chr21 ENCODE CDS 34075635 34075722 . + . Parent=gene177 chr21 . intron 34075723 34076167 . + . Parent=gene177 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene177 chr21 ENCODE CDS 34076168 34076307 . + . Parent=gene177 chr21 . intron 34076308 34088514 . + . Parent=gene177 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene177 chr21 ENCODE CDS 34088515 34088642 . + . Parent=gene177 chr21 . intron 34088643 34091552 . + . Parent=gene177 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene177 chr21 ENCODE CDS 34091553 34091782 . + . Parent=gene177 chr21 . intron 34091783 34093981 . + . Parent=gene177 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene177 chr21 ENCODE CDS 34093982 34094103 . + . Parent=gene177 chr21 . intron 34094104 34105148 . + . Parent=gene177 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene177 chr21 ENCODE CDS 34105149 34105396 . + . Parent=gene177 chr21 . intron 34105397 34108086 . + . Parent=gene177 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene177 chr21 ENCODE CDS 34108087 34108246 . + . Parent=gene177 chr21 . intron 34108247 34112440 . + . Parent=gene177 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene177 chr21 ENCODE CDS 34112441 34112646 . + . Parent=gene177 chr21 . intron 34112647 34113414 . + . Parent=gene177 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene177 chr21 ENCODE CDS 34113415 34113497 . + . Parent=gene177 chr21 . intron 34113498 34117660 . + . Parent=gene177 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene177 chr21 ENCODE CDS 34117661 34117827 . + . Parent=gene177 chr21 . intron 34117828 34120991 . + . Parent=gene177 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene177 chr21 ENCODE CDS 34120992 34121037 . + . Parent=gene177 chr21 . intron 34121038 34123797 . + . Parent=gene177 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene177 chr21 ENCODE CDS 34123798 34123919 . + . Parent=gene177 chr21 . intron 34123920 34128480 . + . Parent=gene177 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene177 chr21 ENCODE CDS 34128481 34128598 . + . Parent=gene177 chr21 . intron 34128599 34130614 . + . Parent=gene177 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene177 chr21 ENCODE CDS 34130615 34130806 . + . Parent=gene177 chr21 . intron 34130807 34131160 . + . Parent=gene177 chr21 ENCODE CDS 34131161 34131162 . + . Parent=gene177 chr21 ENCODE exon 34131161 34131192 . + . Parent=gene177 ### chr21 ENCODE gene 33936628 34029379 . + . ID=gene178;Name=AP000313.6-033;name2=ITSN1 chr21 ENCODE exon 33936628 33936889 . + . Parent=gene178 chr21 . intron 33936890 33983496 . + . Parent=gene178 chr21 ENCODE exon 33983497 33983558 . + . Parent=gene178 chr21 . intron 33983559 34010605 . + . Parent=gene178 chr21 ENCODE exon 34010606 34010730 . + . Parent=gene178 chr21 . intron 34010731 34012971 . + . Parent=gene178 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene178 chr21 ENCODE CDS 34013004 34013031 . + . Parent=gene178 chr21 . intron 34013032 34015352 . + . Parent=gene178 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene178 chr21 ENCODE CDS 34015353 34015445 . + . Parent=gene178 chr21 . intron 34015446 34016762 . + . Parent=gene178 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene178 chr21 ENCODE CDS 34016763 34016826 . + . Parent=gene178 chr21 . intron 34016827 34029218 . + . Parent=gene178 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene178 chr21 ENCODE CDS 34029219 34029379 . + . Parent=gene178 ### chr21 ENCODE gene 33936629 34016166 . + . ID=gene179;Name=AP000313.6-034;name2=ITSN1 chr21 ENCODE exon 33936629 33936889 . + . Parent=gene179 chr21 . intron 33936890 34012971 . + . Parent=gene179 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene179 chr21 . intron 34013032 34015352 . + . Parent=gene179 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene179 chr21 . intron 34015446 34016106 . + . Parent=gene179 chr21 ENCODE exon 34016107 34016166 . + . Parent=gene179 ### chr21 ENCODE gene 33936634 34194035 . + . ID=gene180;Name=AP000313.6-001;name2=ITSN1 chr21 ENCODE exon 33936634 33936889 . + . Parent=gene180 chr21 . intron 33936890 34012971 . + . Parent=gene180 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene180 chr21 ENCODE CDS 34013004 34013031 . + . Parent=gene180 chr21 . intron 34013032 34015352 . + . Parent=gene180 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene180 chr21 ENCODE CDS 34015353 34015445 . + . Parent=gene180 chr21 . intron 34015446 34016762 . + . Parent=gene180 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene180 chr21 ENCODE CDS 34016763 34016826 . + . Parent=gene180 chr21 . intron 34016827 34029218 . + . Parent=gene180 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene180 chr21 ENCODE CDS 34029219 34029379 . + . Parent=gene180 chr21 . intron 34029380 34044317 . + . Parent=gene180 chr21 ENCODE exon 34044318 34044497 . + . Parent=gene180 chr21 ENCODE CDS 34044318 34044497 . + . Parent=gene180 chr21 . intron 34044498 34045984 . + . Parent=gene180 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene180 chr21 ENCODE CDS 34045985 34046081 . + . Parent=gene180 chr21 . intron 34046082 34049471 . + . Parent=gene180 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene180 chr21 ENCODE CDS 34049472 34049572 . + . Parent=gene180 chr21 . intron 34049573 34056096 . + . Parent=gene180 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene180 chr21 ENCODE CDS 34056097 34056160 . + . Parent=gene180 chr21 . intron 34056161 34060048 . + . Parent=gene180 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene180 chr21 ENCODE CDS 34060049 34060186 . + . Parent=gene180 chr21 . intron 34060187 34061886 . + . Parent=gene180 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene180 chr21 ENCODE CDS 34061887 34062002 . + . Parent=gene180 chr21 . intron 34062003 34066234 . + . Parent=gene180 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene180 chr21 ENCODE CDS 34066235 34066497 . + . Parent=gene180 chr21 . intron 34066498 34068902 . + . Parent=gene180 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene180 chr21 ENCODE CDS 34068903 34069052 . + . Parent=gene180 chr21 . intron 34069053 34069141 . + . Parent=gene180 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene180 chr21 ENCODE CDS 34069142 34069282 . + . Parent=gene180 chr21 . intron 34069283 34075634 . + . Parent=gene180 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene180 chr21 ENCODE CDS 34075635 34075722 . + . Parent=gene180 chr21 . intron 34075723 34076167 . + . Parent=gene180 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene180 chr21 ENCODE CDS 34076168 34076307 . + . Parent=gene180 chr21 . intron 34076308 34088514 . + . Parent=gene180 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene180 chr21 ENCODE CDS 34088515 34088642 . + . Parent=gene180 chr21 . intron 34088643 34091552 . + . Parent=gene180 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene180 chr21 ENCODE CDS 34091553 34091782 . + . Parent=gene180 chr21 . intron 34091783 34093981 . + . Parent=gene180 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene180 chr21 ENCODE CDS 34093982 34094103 . + . Parent=gene180 chr21 . intron 34094104 34096603 . + . Parent=gene180 chr21 ENCODE exon 34096604 34096618 . + . Parent=gene180 chr21 ENCODE CDS 34096604 34096618 . + . Parent=gene180 chr21 . intron 34096619 34105148 . + . Parent=gene180 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene180 chr21 ENCODE CDS 34105149 34105396 . + . Parent=gene180 chr21 . intron 34105397 34108086 . + . Parent=gene180 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene180 chr21 ENCODE CDS 34108087 34108246 . + . Parent=gene180 chr21 . intron 34108247 34112440 . + . Parent=gene180 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene180 chr21 ENCODE CDS 34112441 34112646 . + . Parent=gene180 chr21 . intron 34112647 34113414 . + . Parent=gene180 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene180 chr21 ENCODE CDS 34113415 34113497 . + . Parent=gene180 chr21 . intron 34113498 34117660 . + . Parent=gene180 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene180 chr21 ENCODE CDS 34117661 34117827 . + . Parent=gene180 chr21 . intron 34117828 34120991 . + . Parent=gene180 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene180 chr21 ENCODE CDS 34120992 34121037 . + . Parent=gene180 chr21 . intron 34121038 34123797 . + . Parent=gene180 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene180 chr21 ENCODE CDS 34123798 34123919 . + . Parent=gene180 chr21 . intron 34123920 34128480 . + . Parent=gene180 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene180 chr21 ENCODE CDS 34128481 34128598 . + . Parent=gene180 chr21 . intron 34128599 34130614 . + . Parent=gene180 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene180 chr21 ENCODE CDS 34130615 34130806 . + . Parent=gene180 chr21 . intron 34130807 34150909 . + . Parent=gene180 chr21 ENCODE exon 34150910 34151031 . + . Parent=gene180 chr21 ENCODE CDS 34150910 34151031 . + . Parent=gene180 chr21 . intron 34151032 34152859 . + . Parent=gene180 chr21 ENCODE exon 34152860 34152966 . + . Parent=gene180 chr21 ENCODE CDS 34152860 34152966 . + . Parent=gene180 chr21 . intron 34152967 34159324 . + . Parent=gene180 chr21 ENCODE exon 34159325 34159508 . + . Parent=gene180 chr21 ENCODE CDS 34159325 34159508 . + . Parent=gene180 chr21 . intron 34159509 34161406 . + . Parent=gene180 chr21 ENCODE exon 34161407 34161505 . + . Parent=gene180 chr21 ENCODE CDS 34161407 34161505 . + . Parent=gene180 chr21 . intron 34161506 34169527 . + . Parent=gene180 chr21 ENCODE exon 34169528 34169695 . + . Parent=gene180 chr21 ENCODE CDS 34169528 34169695 . + . Parent=gene180 chr21 . intron 34169696 34176416 . + . Parent=gene180 chr21 ENCODE exon 34176417 34176629 . + . Parent=gene180 chr21 ENCODE CDS 34176417 34176629 . + . Parent=gene180 chr21 . intron 34176630 34177723 . + . Parent=gene180 chr21 ENCODE exon 34177724 34177845 . + . Parent=gene180 chr21 ENCODE CDS 34177724 34177845 . + . Parent=gene180 chr21 . intron 34177846 34179214 . + . Parent=gene180 chr21 ENCODE exon 34179215 34179297 . + . Parent=gene180 chr21 ENCODE CDS 34179215 34179297 . + . Parent=gene180 chr21 . intron 34179298 34179612 . + . Parent=gene180 chr21 ENCODE exon 34179613 34179696 . + . Parent=gene180 chr21 ENCODE CDS 34179613 34179696 . + . Parent=gene180 chr21 . intron 34179697 34180460 . + . Parent=gene180 chr21 ENCODE exon 34180461 34180634 . + . Parent=gene180 chr21 ENCODE CDS 34180461 34180634 . + . Parent=gene180 chr21 . intron 34180635 34182325 . + . Parent=gene180 chr21 ENCODE CDS 34182326 34182474 . + . Parent=gene180 chr21 ENCODE exon 34182326 34194035 . + . Parent=gene180 ### chr21 ENCODE gene 33936654 34132668 . + . ID=gene181;Name=AP000313.6-002;name2=ITSN1 chr21 ENCODE exon 33936654 33936889 . + . Parent=gene181 chr21 . intron 33936890 34012971 . + . Parent=gene181 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene181 chr21 ENCODE CDS 34013004 34013031 . + . Parent=gene181 chr21 . intron 34013032 34015352 . + . Parent=gene181 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene181 chr21 ENCODE CDS 34015353 34015445 . + . Parent=gene181 chr21 . intron 34015446 34016762 . + . Parent=gene181 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene181 chr21 ENCODE CDS 34016763 34016826 . + . Parent=gene181 chr21 . intron 34016827 34029218 . + . Parent=gene181 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene181 chr21 ENCODE CDS 34029219 34029379 . + . Parent=gene181 chr21 . intron 34029380 34044317 . + . Parent=gene181 chr21 ENCODE exon 34044318 34044497 . + . Parent=gene181 chr21 ENCODE CDS 34044318 34044497 . + . Parent=gene181 chr21 . intron 34044498 34045984 . + . Parent=gene181 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene181 chr21 ENCODE CDS 34045985 34046081 . + . Parent=gene181 chr21 . intron 34046082 34049471 . + . Parent=gene181 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene181 chr21 ENCODE CDS 34049472 34049572 . + . Parent=gene181 chr21 . intron 34049573 34056096 . + . Parent=gene181 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene181 chr21 ENCODE CDS 34056097 34056160 . + . Parent=gene181 chr21 . intron 34056161 34060048 . + . Parent=gene181 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene181 chr21 ENCODE CDS 34060049 34060186 . + . Parent=gene181 chr21 . intron 34060187 34061886 . + . Parent=gene181 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene181 chr21 ENCODE CDS 34061887 34062002 . + . Parent=gene181 chr21 . intron 34062003 34066234 . + . Parent=gene181 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene181 chr21 ENCODE CDS 34066235 34066497 . + . Parent=gene181 chr21 . intron 34066498 34068902 . + . Parent=gene181 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene181 chr21 ENCODE CDS 34068903 34069052 . + . Parent=gene181 chr21 . intron 34069053 34069141 . + . Parent=gene181 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene181 chr21 ENCODE CDS 34069142 34069282 . + . Parent=gene181 chr21 . intron 34069283 34075634 . + . Parent=gene181 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene181 chr21 ENCODE CDS 34075635 34075722 . + . Parent=gene181 chr21 . intron 34075723 34076167 . + . Parent=gene181 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene181 chr21 ENCODE CDS 34076168 34076307 . + . Parent=gene181 chr21 . intron 34076308 34088514 . + . Parent=gene181 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene181 chr21 ENCODE CDS 34088515 34088642 . + . Parent=gene181 chr21 . intron 34088643 34091552 . + . Parent=gene181 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene181 chr21 ENCODE CDS 34091553 34091782 . + . Parent=gene181 chr21 . intron 34091783 34093981 . + . Parent=gene181 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene181 chr21 ENCODE CDS 34093982 34094103 . + . Parent=gene181 chr21 . intron 34094104 34096603 . + . Parent=gene181 chr21 ENCODE exon 34096604 34096618 . + . Parent=gene181 chr21 ENCODE CDS 34096604 34096618 . + . Parent=gene181 chr21 . intron 34096619 34105148 . + . Parent=gene181 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene181 chr21 ENCODE CDS 34105149 34105396 . + . Parent=gene181 chr21 . intron 34105397 34108086 . + . Parent=gene181 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene181 chr21 ENCODE CDS 34108087 34108246 . + . Parent=gene181 chr21 . intron 34108247 34112440 . + . Parent=gene181 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene181 chr21 ENCODE CDS 34112441 34112646 . + . Parent=gene181 chr21 . intron 34112647 34113414 . + . Parent=gene181 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene181 chr21 ENCODE CDS 34113415 34113497 . + . Parent=gene181 chr21 . intron 34113498 34117660 . + . Parent=gene181 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene181 chr21 ENCODE CDS 34117661 34117827 . + . Parent=gene181 chr21 . intron 34117828 34120991 . + . Parent=gene181 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene181 chr21 ENCODE CDS 34120992 34121037 . + . Parent=gene181 chr21 . intron 34121038 34123797 . + . Parent=gene181 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene181 chr21 ENCODE CDS 34123798 34123919 . + . Parent=gene181 chr21 . intron 34123920 34128480 . + . Parent=gene181 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene181 chr21 ENCODE CDS 34128481 34128598 . + . Parent=gene181 chr21 . intron 34128599 34130614 . + . Parent=gene181 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene181 chr21 ENCODE CDS 34130615 34130806 . + . Parent=gene181 chr21 . intron 34130807 34131160 . + . Parent=gene181 chr21 ENCODE CDS 34131161 34131162 . + . Parent=gene181 chr21 ENCODE exon 34131161 34132668 . + . Parent=gene181 ### chr21 ENCODE gene 33936659 34182782 . + . ID=gene182;Name=AP000313.6-023;name2=ITSN1 chr21 ENCODE exon 33936659 33936889 . + . Parent=gene182 chr21 . intron 33936890 34012971 . + . Parent=gene182 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene182 chr21 ENCODE CDS 34013004 34013031 . + . Parent=gene182 chr21 . intron 34013032 34015352 . + . Parent=gene182 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene182 chr21 ENCODE CDS 34015353 34015445 . + . Parent=gene182 chr21 . intron 34015446 34016762 . + . Parent=gene182 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene182 chr21 ENCODE CDS 34016763 34016826 . + . Parent=gene182 chr21 . intron 34016827 34029218 . + . Parent=gene182 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene182 chr21 ENCODE CDS 34029219 34029379 . + . Parent=gene182 chr21 . intron 34029380 34044317 . + . Parent=gene182 chr21 ENCODE exon 34044318 34044497 . + . Parent=gene182 chr21 ENCODE CDS 34044318 34044497 . + . Parent=gene182 chr21 . intron 34044498 34045984 . + . Parent=gene182 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene182 chr21 ENCODE CDS 34045985 34046081 . + . Parent=gene182 chr21 . intron 34046082 34049471 . + . Parent=gene182 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene182 chr21 ENCODE CDS 34049472 34049572 . + . Parent=gene182 chr21 . intron 34049573 34056096 . + . Parent=gene182 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene182 chr21 ENCODE CDS 34056097 34056160 . + . Parent=gene182 chr21 . intron 34056161 34060048 . + . Parent=gene182 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene182 chr21 ENCODE CDS 34060049 34060186 . + . Parent=gene182 chr21 . intron 34060187 34061886 . + . Parent=gene182 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene182 chr21 ENCODE CDS 34061887 34062002 . + . Parent=gene182 chr21 . intron 34062003 34066234 . + . Parent=gene182 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene182 chr21 ENCODE CDS 34066235 34066497 . + . Parent=gene182 chr21 . intron 34066498 34068902 . + . Parent=gene182 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene182 chr21 ENCODE CDS 34068903 34069052 . + . Parent=gene182 chr21 . intron 34069053 34069141 . + . Parent=gene182 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene182 chr21 ENCODE CDS 34069142 34069282 . + . Parent=gene182 chr21 . intron 34069283 34075634 . + . Parent=gene182 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene182 chr21 ENCODE CDS 34075635 34075722 . + . Parent=gene182 chr21 . intron 34075723 34076167 . + . Parent=gene182 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene182 chr21 ENCODE CDS 34076168 34076307 . + . Parent=gene182 chr21 . intron 34076308 34088514 . + . Parent=gene182 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene182 chr21 ENCODE CDS 34088515 34088642 . + . Parent=gene182 chr21 . intron 34088643 34091552 . + . Parent=gene182 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene182 chr21 ENCODE CDS 34091553 34091782 . + . Parent=gene182 chr21 . intron 34091783 34093981 . + . Parent=gene182 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene182 chr21 ENCODE CDS 34093982 34094103 . + . Parent=gene182 chr21 . intron 34094104 34105148 . + . Parent=gene182 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene182 chr21 ENCODE CDS 34105149 34105396 . + . Parent=gene182 chr21 . intron 34105397 34108086 . + . Parent=gene182 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene182 chr21 ENCODE CDS 34108087 34108246 . + . Parent=gene182 chr21 . intron 34108247 34112440 . + . Parent=gene182 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene182 chr21 ENCODE CDS 34112441 34112646 . + . Parent=gene182 chr21 . intron 34112647 34113414 . + . Parent=gene182 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene182 chr21 ENCODE CDS 34113415 34113497 . + . Parent=gene182 chr21 . intron 34113498 34117660 . + . Parent=gene182 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene182 chr21 ENCODE CDS 34117661 34117827 . + . Parent=gene182 chr21 . intron 34117828 34120991 . + . Parent=gene182 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene182 chr21 ENCODE CDS 34120992 34121037 . + . Parent=gene182 chr21 . intron 34121038 34123797 . + . Parent=gene182 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene182 chr21 ENCODE CDS 34123798 34123919 . + . Parent=gene182 chr21 . intron 34123920 34128480 . + . Parent=gene182 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene182 chr21 ENCODE CDS 34128481 34128598 . + . Parent=gene182 chr21 . intron 34128599 34130614 . + . Parent=gene182 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene182 chr21 ENCODE CDS 34130615 34130806 . + . Parent=gene182 chr21 . intron 34130807 34150909 . + . Parent=gene182 chr21 ENCODE exon 34150910 34151031 . + . Parent=gene182 chr21 ENCODE CDS 34150910 34151031 . + . Parent=gene182 chr21 . intron 34151032 34152859 . + . Parent=gene182 chr21 ENCODE exon 34152860 34152966 . + . Parent=gene182 chr21 ENCODE CDS 34152860 34152966 . + . Parent=gene182 chr21 . intron 34152967 34159324 . + . Parent=gene182 chr21 ENCODE exon 34159325 34159508 . + . Parent=gene182 chr21 ENCODE CDS 34159325 34159508 . + . Parent=gene182 chr21 . intron 34159509 34161406 . + . Parent=gene182 chr21 ENCODE exon 34161407 34161505 . + . Parent=gene182 chr21 ENCODE CDS 34161407 34161505 . + . Parent=gene182 chr21 . intron 34161506 34169527 . + . Parent=gene182 chr21 ENCODE exon 34169528 34169695 . + . Parent=gene182 chr21 ENCODE CDS 34169528 34169695 . + . Parent=gene182 chr21 . intron 34169696 34176416 . + . Parent=gene182 chr21 ENCODE exon 34176417 34176629 . + . Parent=gene182 chr21 ENCODE CDS 34176417 34176629 . + . Parent=gene182 chr21 . intron 34176630 34177723 . + . Parent=gene182 chr21 ENCODE exon 34177724 34177845 . + . Parent=gene182 chr21 ENCODE CDS 34177724 34177845 . + . Parent=gene182 chr21 . intron 34177846 34179214 . + . Parent=gene182 chr21 ENCODE exon 34179215 34179297 . + . Parent=gene182 chr21 ENCODE CDS 34179215 34179297 . + . Parent=gene182 chr21 . intron 34179298 34179612 . + . Parent=gene182 chr21 ENCODE exon 34179613 34179696 . + . Parent=gene182 chr21 ENCODE CDS 34179613 34179696 . + . Parent=gene182 chr21 . intron 34179697 34180460 . + . Parent=gene182 chr21 ENCODE exon 34180461 34180634 . + . Parent=gene182 chr21 ENCODE CDS 34180461 34180634 . + . Parent=gene182 chr21 . intron 34180635 34182325 . + . Parent=gene182 chr21 ENCODE CDS 34182326 34182474 . + . Parent=gene182 chr21 ENCODE exon 34182326 34182782 . + . Parent=gene182 ### chr21 ENCODE gene 33936672 34132672 . + . ID=gene183;Name=AP000313.6-024;name2=ITSN1 chr21 ENCODE exon 33936672 33936889 . + . Parent=gene183 chr21 . intron 33936890 34012971 . + . Parent=gene183 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene183 chr21 ENCODE CDS 34013004 34013031 . + . Parent=gene183 chr21 . intron 34013032 34015352 . + . Parent=gene183 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene183 chr21 ENCODE CDS 34015353 34015445 . + . Parent=gene183 chr21 . intron 34015446 34016762 . + . Parent=gene183 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene183 chr21 ENCODE CDS 34016763 34016826 . + . Parent=gene183 chr21 . intron 34016827 34029218 . + . Parent=gene183 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene183 chr21 ENCODE CDS 34029219 34029379 . + . Parent=gene183 chr21 . intron 34029380 34044317 . + . Parent=gene183 chr21 ENCODE exon 34044318 34044497 . + . Parent=gene183 chr21 ENCODE CDS 34044318 34044497 . + . Parent=gene183 chr21 . intron 34044498 34045984 . + . Parent=gene183 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene183 chr21 ENCODE CDS 34045985 34046081 . + . Parent=gene183 chr21 . intron 34046082 34049471 . + . Parent=gene183 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene183 chr21 ENCODE CDS 34049472 34049572 . + . Parent=gene183 chr21 . intron 34049573 34056096 . + . Parent=gene183 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene183 chr21 ENCODE CDS 34056097 34056160 . + . Parent=gene183 chr21 . intron 34056161 34060048 . + . Parent=gene183 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene183 chr21 ENCODE CDS 34060049 34060186 . + . Parent=gene183 chr21 . intron 34060187 34061886 . + . Parent=gene183 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene183 chr21 ENCODE CDS 34061887 34062002 . + . Parent=gene183 chr21 . intron 34062003 34066234 . + . Parent=gene183 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene183 chr21 ENCODE CDS 34066235 34066497 . + . Parent=gene183 chr21 . intron 34066498 34068902 . + . Parent=gene183 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene183 chr21 ENCODE CDS 34068903 34069052 . + . Parent=gene183 chr21 . intron 34069053 34069141 . + . Parent=gene183 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene183 chr21 ENCODE CDS 34069142 34069282 . + . Parent=gene183 chr21 . intron 34069283 34075634 . + . Parent=gene183 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene183 chr21 ENCODE CDS 34075635 34075722 . + . Parent=gene183 chr21 . intron 34075723 34076167 . + . Parent=gene183 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene183 chr21 ENCODE CDS 34076168 34076307 . + . Parent=gene183 chr21 . intron 34076308 34088514 . + . Parent=gene183 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene183 chr21 ENCODE CDS 34088515 34088642 . + . Parent=gene183 chr21 . intron 34088643 34091552 . + . Parent=gene183 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene183 chr21 ENCODE CDS 34091553 34091782 . + . Parent=gene183 chr21 . intron 34091783 34093981 . + . Parent=gene183 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene183 chr21 ENCODE CDS 34093982 34094103 . + . Parent=gene183 chr21 . intron 34094104 34105148 . + . Parent=gene183 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene183 chr21 ENCODE CDS 34105149 34105396 . + . Parent=gene183 chr21 . intron 34105397 34108086 . + . Parent=gene183 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene183 chr21 ENCODE CDS 34108087 34108246 . + . Parent=gene183 chr21 . intron 34108247 34112440 . + . Parent=gene183 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene183 chr21 ENCODE CDS 34112441 34112646 . + . Parent=gene183 chr21 . intron 34112647 34113414 . + . Parent=gene183 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene183 chr21 ENCODE CDS 34113415 34113497 . + . Parent=gene183 chr21 . intron 34113498 34117660 . + . Parent=gene183 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene183 chr21 ENCODE CDS 34117661 34117827 . + . Parent=gene183 chr21 . intron 34117828 34120991 . + . Parent=gene183 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene183 chr21 ENCODE CDS 34120992 34121037 . + . Parent=gene183 chr21 . intron 34121038 34123797 . + . Parent=gene183 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene183 chr21 ENCODE CDS 34123798 34123919 . + . Parent=gene183 chr21 . intron 34123920 34128480 . + . Parent=gene183 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene183 chr21 ENCODE CDS 34128481 34128598 . + . Parent=gene183 chr21 . intron 34128599 34130614 . + . Parent=gene183 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene183 chr21 ENCODE CDS 34130615 34130806 . + . Parent=gene183 chr21 . intron 34130807 34131160 . + . Parent=gene183 chr21 ENCODE CDS 34131161 34131162 . + . Parent=gene183 chr21 ENCODE exon 34131161 34132672 . + . Parent=gene183 ### chr21 ENCODE gene 33936674 34132670 . + . ID=gene184;Name=AP000313.6-003;name2=ITSN1 chr21 ENCODE exon 33936674 33936889 . + . Parent=gene184 chr21 . intron 33936890 34012971 . + . Parent=gene184 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene184 chr21 ENCODE CDS 34013004 34013031 . + . Parent=gene184 chr21 . intron 34013032 34015352 . + . Parent=gene184 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene184 chr21 ENCODE CDS 34015353 34015445 . + . Parent=gene184 chr21 . intron 34015446 34016762 . + . Parent=gene184 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene184 chr21 ENCODE CDS 34016763 34016826 . + . Parent=gene184 chr21 . intron 34016827 34029218 . + . Parent=gene184 chr21 ENCODE exon 34029219 34029379 . + . Parent=gene184 chr21 ENCODE CDS 34029219 34029379 . + . Parent=gene184 chr21 . intron 34029380 34044317 . + . Parent=gene184 chr21 ENCODE exon 34044318 34044497 . + . Parent=gene184 chr21 ENCODE CDS 34044318 34044497 . + . Parent=gene184 chr21 . intron 34044498 34045984 . + . Parent=gene184 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene184 chr21 ENCODE CDS 34045985 34046081 . + . Parent=gene184 chr21 . intron 34046082 34049471 . + . Parent=gene184 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene184 chr21 ENCODE CDS 34049472 34049572 . + . Parent=gene184 chr21 . intron 34049573 34056096 . + . Parent=gene184 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene184 chr21 ENCODE CDS 34056097 34056160 . + . Parent=gene184 chr21 . intron 34056161 34060048 . + . Parent=gene184 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene184 chr21 ENCODE CDS 34060049 34060186 . + . Parent=gene184 chr21 . intron 34060187 34061886 . + . Parent=gene184 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene184 chr21 ENCODE CDS 34061887 34062002 . + . Parent=gene184 chr21 . intron 34062003 34066234 . + . Parent=gene184 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene184 chr21 ENCODE CDS 34066235 34066497 . + . Parent=gene184 chr21 . intron 34066498 34068902 . + . Parent=gene184 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene184 chr21 ENCODE CDS 34068903 34069052 . + . Parent=gene184 chr21 . intron 34069053 34069141 . + . Parent=gene184 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene184 chr21 ENCODE CDS 34069142 34069282 . + . Parent=gene184 chr21 . intron 34069283 34075634 . + . Parent=gene184 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene184 chr21 ENCODE CDS 34075635 34075722 . + . Parent=gene184 chr21 . intron 34075723 34076167 . + . Parent=gene184 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene184 chr21 ENCODE CDS 34076168 34076307 . + . Parent=gene184 chr21 . intron 34076308 34088514 . + . Parent=gene184 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene184 chr21 ENCODE CDS 34088515 34088642 . + . Parent=gene184 chr21 . intron 34088643 34091552 . + . Parent=gene184 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene184 chr21 ENCODE CDS 34091553 34091782 . + . Parent=gene184 chr21 . intron 34091783 34093981 . + . Parent=gene184 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene184 chr21 ENCODE CDS 34093982 34094103 . + . Parent=gene184 chr21 . intron 34094104 34105148 . + . Parent=gene184 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene184 chr21 ENCODE CDS 34105149 34105396 . + . Parent=gene184 chr21 . intron 34105397 34108086 . + . Parent=gene184 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene184 chr21 ENCODE CDS 34108087 34108246 . + . Parent=gene184 chr21 . intron 34108247 34112440 . + . Parent=gene184 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene184 chr21 ENCODE CDS 34112441 34112646 . + . Parent=gene184 chr21 . intron 34112647 34113414 . + . Parent=gene184 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene184 chr21 ENCODE CDS 34113415 34113497 . + . Parent=gene184 chr21 . intron 34113498 34123797 . + . Parent=gene184 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene184 chr21 ENCODE CDS 34123798 34123919 . + . Parent=gene184 chr21 . intron 34123920 34128480 . + . Parent=gene184 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene184 chr21 ENCODE CDS 34128481 34128598 . + . Parent=gene184 chr21 . intron 34128599 34130614 . + . Parent=gene184 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene184 chr21 ENCODE CDS 34130615 34130806 . + . Parent=gene184 chr21 . intron 34130807 34131160 . + . Parent=gene184 chr21 ENCODE CDS 34131161 34131162 . + . Parent=gene184 chr21 ENCODE exon 34131161 34132670 . + . Parent=gene184 ### chr21 ENCODE gene 33936718 34029268 . + . ID=gene185;Name=AP000313.6-032;name2=ITSN1 chr21 ENCODE exon 33936718 33936889 . + . Parent=gene185 chr21 . intron 33936890 33983496 . + . Parent=gene185 chr21 ENCODE exon 33983497 33983558 . + . Parent=gene185 chr21 . intron 33983559 34012971 . + . Parent=gene185 chr21 ENCODE exon 34012972 34013031 . + . Parent=gene185 chr21 ENCODE CDS 34013004 34013031 . + . Parent=gene185 chr21 . intron 34013032 34015352 . + . Parent=gene185 chr21 ENCODE exon 34015353 34015445 . + . Parent=gene185 chr21 ENCODE CDS 34015353 34015445 . + . Parent=gene185 chr21 . intron 34015446 34016762 . + . Parent=gene185 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene185 chr21 ENCODE CDS 34016763 34016826 . + . Parent=gene185 chr21 . intron 34016827 34029218 . + . Parent=gene185 chr21 ENCODE exon 34029219 34029268 . + . Parent=gene185 chr21 ENCODE CDS 34029219 34029268 . + . Parent=gene185 ### chr21 ENCODE gene 34015412 34036947 . + . ID=gene186;Name=AP000313.6-018;name2=ITSN1 chr21 ENCODE exon 34015412 34015445 . + . Parent=gene186 chr21 . intron 34015446 34016762 . + . Parent=gene186 chr21 ENCODE exon 34016763 34016826 . + . Parent=gene186 chr21 . intron 34016827 34029218 . + . Parent=gene186 chr21 ENCODE exon 34029219 34030908 . + . Parent=gene186 chr21 . intron 34030909 34034991 . + . Parent=gene186 chr21 ENCODE exon 34034992 34035796 . + . Parent=gene186 chr21 . intron 34035797 34036516 . + . Parent=gene186 chr21 ENCODE exon 34036517 34036947 . + . Parent=gene186 ### chr21 ENCODE gene 34029216 34029801 . + . ID=gene187;Name=AP000313.6-017;name2=ITSN1 chr21 ENCODE exon 34029216 34029379 . + . Parent=gene187 chr21 ENCODE CDS 34029216 34029379 . + . Parent=gene187 chr21 . intron 34029380 34029480 . + . Parent=gene187 chr21 ENCODE CDS 34029481 34029497 . + . Parent=gene187 chr21 ENCODE exon 34029481 34029801 . + . Parent=gene187 ### chr21 ENCODE gene 34044454 34132672 . + . ID=gene188;Name=AP000313.6-014;name2=ITSN1 chr21 ENCODE exon 34044454 34044497 . + . Parent=gene188 chr21 . intron 34044498 34045984 . + . Parent=gene188 chr21 ENCODE exon 34045985 34046081 . + . Parent=gene188 chr21 . intron 34046082 34049471 . + . Parent=gene188 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene188 chr21 . intron 34049573 34056096 . + . Parent=gene188 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene188 chr21 . intron 34056161 34060048 . + . Parent=gene188 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene188 chr21 . intron 34060187 34061886 . + . Parent=gene188 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene188 chr21 . intron 34062003 34066234 . + . Parent=gene188 chr21 ENCODE exon 34066235 34066497 . + . Parent=gene188 chr21 . intron 34066498 34068902 . + . Parent=gene188 chr21 ENCODE exon 34068903 34069052 . + . Parent=gene188 chr21 . intron 34069053 34069141 . + . Parent=gene188 chr21 ENCODE exon 34069142 34069282 . + . Parent=gene188 chr21 . intron 34069283 34075634 . + . Parent=gene188 chr21 ENCODE exon 34075635 34075722 . + . Parent=gene188 chr21 . intron 34075723 34076167 . + . Parent=gene188 chr21 ENCODE exon 34076168 34076307 . + . Parent=gene188 chr21 . intron 34076308 34088514 . + . Parent=gene188 chr21 ENCODE exon 34088515 34088642 . + . Parent=gene188 chr21 . intron 34088643 34091552 . + . Parent=gene188 chr21 ENCODE exon 34091553 34091782 . + . Parent=gene188 chr21 . intron 34091783 34093981 . + . Parent=gene188 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene188 chr21 . intron 34094104 34105148 . + . Parent=gene188 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene188 chr21 . intron 34105397 34108086 . + . Parent=gene188 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene188 chr21 . intron 34108247 34112440 . + . Parent=gene188 chr21 ENCODE exon 34112441 34112646 . + . Parent=gene188 chr21 . intron 34112647 34113414 . + . Parent=gene188 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene188 chr21 . intron 34113498 34123797 . + . Parent=gene188 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene188 chr21 . intron 34123920 34128480 . + . Parent=gene188 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene188 chr21 . intron 34128599 34130614 . + . Parent=gene188 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene188 chr21 . intron 34130807 34131160 . + . Parent=gene188 chr21 ENCODE exon 34131161 34131197 . + . Parent=gene188 chr21 . intron 34131198 34131419 . + . Parent=gene188 chr21 ENCODE exon 34131420 34132672 . + . Parent=gene188 ### chr21 ENCODE gene 34048358 34066474 . + . ID=gene189;Name=AP000313.6-019;name2=ITSN1 chr21 ENCODE exon 34048358 34048397 . + . Parent=gene189 chr21 . intron 34048398 34049471 . + . Parent=gene189 chr21 ENCODE exon 34049472 34049572 . + . Parent=gene189 chr21 . intron 34049573 34050961 . + . Parent=gene189 chr21 ENCODE exon 34050962 34051248 . + . Parent=gene189 chr21 . intron 34051249 34056096 . + . Parent=gene189 chr21 ENCODE exon 34056097 34056160 . + . Parent=gene189 chr21 . intron 34056161 34060048 . + . Parent=gene189 chr21 ENCODE exon 34060049 34060186 . + . Parent=gene189 chr21 . intron 34060187 34061886 . + . Parent=gene189 chr21 ENCODE exon 34061887 34062002 . + . Parent=gene189 chr21 . intron 34062003 34066234 . + . Parent=gene189 chr21 ENCODE exon 34066235 34066474 . + . Parent=gene189 ### chr21 ENCODE gene 34068537 34069253 . + . ID=gene190;Name=AP000313.6-021;name2=ITSN1 chr21 ENCODE exon 34068537 34069052 . + . Parent=gene190 chr21 . intron 34069053 34069141 . + . Parent=gene190 chr21 ENCODE exon 34069142 34069253 . + . Parent=gene190 ### chr21 ENCODE gene 34091728 34111568 . + . ID=gene191;Name=AP000313.6-029;name2=ITSN1 chr21 ENCODE exon 34091728 34091782 . + . Parent=gene191 chr21 . intron 34091783 34093981 . + . Parent=gene191 chr21 ENCODE exon 34093982 34094103 . + . Parent=gene191 chr21 . intron 34094104 34096610 . + . Parent=gene191 chr21 ENCODE exon 34096611 34096618 . + . Parent=gene191 chr21 . intron 34096619 34105148 . + . Parent=gene191 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene191 chr21 . intron 34105397 34108086 . + . Parent=gene191 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene191 chr21 . intron 34108247 34111404 . + . Parent=gene191 chr21 ENCODE exon 34111405 34111568 . + . Parent=gene191 ### chr21 ENCODE gene 34094097 34111910 . + . ID=gene192;Name=AP000313.6-030;name2=ITSN1 chr21 ENCODE exon 34094097 34094103 . + . Parent=gene192 chr21 ENCODE CDS 34094097 34094103 . + . Parent=gene192 chr21 . intron 34094104 34096603 . + . Parent=gene192 chr21 ENCODE exon 34096604 34096618 . + . Parent=gene192 chr21 ENCODE CDS 34096604 34096618 . + . Parent=gene192 chr21 . intron 34096619 34105148 . + . Parent=gene192 chr21 ENCODE exon 34105149 34105396 . + . Parent=gene192 chr21 ENCODE CDS 34105149 34105396 . + . Parent=gene192 chr21 . intron 34105397 34108086 . + . Parent=gene192 chr21 ENCODE exon 34108087 34108246 . + . Parent=gene192 chr21 ENCODE CDS 34108087 34108246 . + . Parent=gene192 chr21 . intron 34108247 34111404 . + . Parent=gene192 chr21 ENCODE CDS 34111405 34111755 . + . Parent=gene192 chr21 ENCODE exon 34111405 34111910 . + . Parent=gene192 ### chr21 ENCODE gene 34105378 34108681 . + . ID=gene193;Name=AP000313.6-035;name2=ITSN1 chr21 ENCODE exon 34105378 34105396 . + . Parent=gene193 chr21 . intron 34105397 34108086 . + . Parent=gene193 chr21 ENCODE exon 34108087 34108681 . + . Parent=gene193 ### chr21 ENCODE gene 34112200 34123203 . + . ID=gene194;Name=AP000313.6-007;name2=ITSN1 chr21 ENCODE exon 34112200 34112646 . + . Parent=gene194 chr21 . intron 34112647 34113414 . + . Parent=gene194 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene194 chr21 . intron 34113498 34117660 . + . Parent=gene194 chr21 ENCODE exon 34117661 34117827 . + . Parent=gene194 chr21 . intron 34117828 34120991 . + . Parent=gene194 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene194 chr21 . intron 34121038 34123141 . + . Parent=gene194 chr21 ENCODE exon 34123142 34123203 . + . Parent=gene194 ### chr21 ENCODE gene 34112557 34123203 . + . ID=gene195;Name=AP000313.6-006;name2=ITSN1 chr21 ENCODE exon 34112557 34112646 . + . Parent=gene195 chr21 . intron 34112647 34113414 . + . Parent=gene195 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene195 chr21 . intron 34113498 34120991 . + . Parent=gene195 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene195 chr21 . intron 34121038 34123141 . + . Parent=gene195 chr21 ENCODE exon 34123142 34123203 . + . Parent=gene195 ### chr21 ENCODE gene 34112626 34123860 . + . ID=gene196;Name=AP000313.6-016;name2=ITSN1 chr21 ENCODE exon 34112626 34112646 . + . Parent=gene196 chr21 . intron 34112647 34113414 . + . Parent=gene196 chr21 ENCODE exon 34113415 34113497 . + . Parent=gene196 chr21 . intron 34113498 34120991 . + . Parent=gene196 chr21 ENCODE exon 34120992 34121037 . + . Parent=gene196 chr21 . intron 34121038 34123797 . + . Parent=gene196 chr21 ENCODE exon 34123798 34123860 . + . Parent=gene196 ### chr21 ENCODE gene 34120990 34128570 . + . ID=gene197;Name=AP000313.6-022;name2=ITSN1 chr21 ENCODE exon 34120990 34121037 . + . Parent=gene197 chr21 . intron 34121038 34123141 . + . Parent=gene197 chr21 ENCODE exon 34123142 34123224 . + . Parent=gene197 chr21 . intron 34123225 34123797 . + . Parent=gene197 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene197 chr21 . intron 34123920 34128480 . + . Parent=gene197 chr21 ENCODE exon 34128481 34128570 . + . Parent=gene197 ### chr21 ENCODE gene 34123180 34131212 . + . ID=gene198;Name=AP000313.6-010;name2=ITSN1 chr21 ENCODE exon 34123180 34123342 . + . Parent=gene198 chr21 . intron 34123343 34123797 . + . Parent=gene198 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene198 chr21 . intron 34123920 34128480 . + . Parent=gene198 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene198 chr21 . intron 34128599 34130614 . + . Parent=gene198 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene198 chr21 . intron 34130807 34131160 . + . Parent=gene198 chr21 ENCODE exon 34131161 34131212 . + . Parent=gene198 ### chr21 ENCODE gene 34123180 34131212 . + . ID=gene199;Name=AP000313.6-008;name2=ITSN1 chr21 ENCODE exon 34123180 34123224 . + . Parent=gene199 chr21 . intron 34123225 34123797 . + . Parent=gene199 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene199 chr21 . intron 34123920 34128480 . + . Parent=gene199 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene199 chr21 . intron 34128599 34130614 . + . Parent=gene199 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene199 chr21 . intron 34130807 34131160 . + . Parent=gene199 chr21 ENCODE exon 34131161 34131212 . + . Parent=gene199 ### chr21 ENCODE gene 34123180 34131212 . + . ID=gene200;Name=AP000313.6-013;name2=ITSN1 chr21 ENCODE exon 34123180 34123919 . + . Parent=gene200 chr21 . intron 34123920 34128480 . + . Parent=gene200 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene200 chr21 . intron 34128599 34130614 . + . Parent=gene200 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene200 chr21 . intron 34130807 34131160 . + . Parent=gene200 chr21 ENCODE exon 34131161 34131212 . + . Parent=gene200 ### chr21 ENCODE gene 34123180 34150967 . + . ID=gene201;Name=AP000313.6-012;name2=ITSN1 chr21 ENCODE exon 34123180 34123919 . + . Parent=gene201 chr21 . intron 34123920 34128480 . + . Parent=gene201 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene201 chr21 . intron 34128599 34130614 . + . Parent=gene201 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene201 chr21 . intron 34130807 34150909 . + . Parent=gene201 chr21 ENCODE exon 34150910 34150967 . + . Parent=gene201 ### chr21 ENCODE gene 34123180 34150967 . + . ID=gene202;Name=AP000313.6-011;name2=ITSN1 chr21 ENCODE exon 34123180 34123919 . + . Parent=gene202 chr21 . intron 34123920 34150909 . + . Parent=gene202 chr21 ENCODE exon 34150910 34150967 . + . Parent=gene202 ### chr21 ENCODE gene 34123180 34150967 . + . ID=gene203;Name=AP000313.6-009;name2=ITSN1 chr21 ENCODE exon 34123180 34123224 . + . Parent=gene203 chr21 . intron 34123225 34123797 . + . Parent=gene203 chr21 ENCODE exon 34123798 34123919 . + . Parent=gene203 chr21 . intron 34123920 34128480 . + . Parent=gene203 chr21 ENCODE exon 34128481 34128598 . + . Parent=gene203 chr21 . intron 34128599 34130614 . + . Parent=gene203 chr21 ENCODE exon 34130615 34130806 . + . Parent=gene203 chr21 . intron 34130807 34150909 . + . Parent=gene203 chr21 ENCODE exon 34150910 34150967 . + . Parent=gene203 ### chr21 ENCODE gene 34152871 34180528 . + . ID=gene204;Name=AP000313.6-004;name2=ITSN1 chr21 ENCODE exon 34152871 34152966 . + . Parent=gene204 chr21 ENCODE CDS 34152871 34152966 . + . Parent=gene204 chr21 . intron 34152967 34159324 . + . Parent=gene204 chr21 ENCODE exon 34159325 34159508 . + . Parent=gene204 chr21 ENCODE CDS 34159325 34159508 . + . Parent=gene204 chr21 . intron 34159509 34161406 . + . Parent=gene204 chr21 ENCODE exon 34161407 34161505 . + . Parent=gene204 chr21 ENCODE CDS 34161407 34161505 . + . Parent=gene204 chr21 . intron 34161506 34176416 . + . Parent=gene204 chr21 ENCODE exon 34176417 34176629 . + . Parent=gene204 chr21 ENCODE CDS 34176417 34176629 . + . Parent=gene204 chr21 . intron 34176630 34177723 . + . Parent=gene204 chr21 ENCODE exon 34177724 34177845 . + . Parent=gene204 chr21 ENCODE CDS 34177724 34177845 . + . Parent=gene204 chr21 . intron 34177846 34179214 . + . Parent=gene204 chr21 ENCODE exon 34179215 34179297 . + . Parent=gene204 chr21 ENCODE CDS 34179215 34179297 . + . Parent=gene204 chr21 . intron 34179298 34179612 . + . Parent=gene204 chr21 ENCODE exon 34179613 34179696 . + . Parent=gene204 chr21 ENCODE CDS 34179613 34179696 . + . Parent=gene204 chr21 . intron 34179697 34180460 . + . Parent=gene204 chr21 ENCODE exon 34180461 34180528 . + . Parent=gene204 chr21 ENCODE CDS 34180461 34180528 . + . Parent=gene204 ### chr21 ENCODE gene 34169532 34180551 . + . ID=gene205;Name=AP000313.6-031;name2=ITSN1 chr21 ENCODE exon 34169532 34169695 . + . Parent=gene205 chr21 . intron 34169696 34179214 . + . Parent=gene205 chr21 ENCODE exon 34179215 34179297 . + . Parent=gene205 chr21 . intron 34179298 34179612 . + . Parent=gene205 chr21 ENCODE exon 34179613 34179696 . + . Parent=gene205 chr21 . intron 34179697 34180460 . + . Parent=gene205 chr21 ENCODE exon 34180461 34180551 . + . Parent=gene205 ### chr21 ENCODE gene 34169534 34180528 . + . ID=gene206;Name=AP000313.6-005;name2=ITSN1 chr21 ENCODE exon 34169534 34169695 . + . Parent=gene206 chr21 ENCODE CDS 34169534 34169695 . + . Parent=gene206 chr21 . intron 34169696 34177723 . + . Parent=gene206 chr21 ENCODE exon 34177724 34177845 . + . Parent=gene206 chr21 ENCODE CDS 34177724 34177845 . + . Parent=gene206 chr21 . intron 34177846 34179214 . + . Parent=gene206 chr21 ENCODE exon 34179215 34179297 . + . Parent=gene206 chr21 ENCODE CDS 34179215 34179297 . + . Parent=gene206 chr21 . intron 34179298 34179612 . + . Parent=gene206 chr21 ENCODE exon 34179613 34179696 . + . Parent=gene206 chr21 ENCODE CDS 34179613 34179696 . + . Parent=gene206 chr21 . intron 34179697 34180460 . + . Parent=gene206 chr21 ENCODE exon 34180461 34180528 . + . Parent=gene206 chr21 ENCODE CDS 34180461 34180528 . + . Parent=gene206 ### chr21 ENCODE gene 34197627 34199755 . - . ID=gene207;Name=AP000313.5-006;name2=ATP5O chr21 ENCODE exon 34197627 34197813 . - . Parent=gene207 chr21 . intron 34197814 34198108 . - . Parent=gene207 chr21 ENCODE exon 34198109 34198748 . - . Parent=gene207 chr21 . intron 34198749 34198855 . - . Parent=gene207 chr21 ENCODE exon 34198856 34199755 . - . Parent=gene207 ### chr21 ENCODE gene 34197627 34209935 . - . ID=gene208;Name=AP000313.5-003;name2=ATP5O chr21 ENCODE exon 34197627 34197813 . - . Parent=gene208 chr21 . intron 34197814 34198108 . - . Parent=gene208 chr21 ENCODE exon 34198109 34198195 . - . Parent=gene208 chr21 . intron 34198196 34201514 . - . Parent=gene208 chr21 ENCODE exon 34201515 34201627 . - . Parent=gene208 chr21 . intron 34201628 34206462 . - . Parent=gene208 chr21 ENCODE exon 34206463 34206573 . - . Parent=gene208 chr21 . intron 34206574 34208623 . - . Parent=gene208 chr21 ENCODE exon 34208624 34208674 . - . Parent=gene208 chr21 . intron 34208675 34209901 . - . Parent=gene208 chr21 ENCODE exon 34209902 34209935 . - . Parent=gene208 ### chr21 ENCODE gene 34197627 34209942 . - . ID=gene209;Name=AP000313.5-002;name2=ATP5O chr21 ENCODE exon 34197627 34197813 . - . Parent=gene209 chr21 . intron 34197814 34198108 . - . Parent=gene209 chr21 ENCODE exon 34198109 34198195 . - . Parent=gene209 chr21 . intron 34198196 34200622 . - . Parent=gene209 chr21 ENCODE exon 34200623 34201627 . - . Parent=gene209 chr21 . intron 34201628 34203255 . - . Parent=gene209 chr21 ENCODE exon 34203256 34203385 . - . Parent=gene209 chr21 . intron 34203386 34206462 . - . Parent=gene209 chr21 ENCODE exon 34206463 34206573 . - . Parent=gene209 chr21 . intron 34206574 34208623 . - . Parent=gene209 chr21 ENCODE exon 34208624 34209942 . - . Parent=gene209 ### chr21 ENCODE gene 34197627 34210154 . - . ID=gene210;Name=AP000313.5-001;name2=ATP5O chr21 ENCODE exon 34197627 34197813 . - . Parent=gene210 chr21 ENCODE CDS 34197700 34197813 . - . Parent=gene210 chr21 . intron 34197814 34198108 . - . Parent=gene210 chr21 ENCODE exon 34198109 34198195 . - . Parent=gene210 chr21 ENCODE CDS 34198109 34198195 . - . Parent=gene210 chr21 . intron 34198196 34201514 . - . Parent=gene210 chr21 ENCODE exon 34201515 34201627 . - . Parent=gene210 chr21 ENCODE CDS 34201515 34201627 . - . Parent=gene210 chr21 . intron 34201628 34203255 . - . Parent=gene210 chr21 ENCODE exon 34203256 34203385 . - . Parent=gene210 chr21 ENCODE CDS 34203256 34203385 . - . Parent=gene210 chr21 . intron 34203386 34206462 . - . Parent=gene210 chr21 ENCODE exon 34206463 34206573 . - . Parent=gene210 chr21 ENCODE CDS 34206463 34206573 . - . Parent=gene210 chr21 . intron 34206574 34208623 . - . Parent=gene210 chr21 ENCODE exon 34208624 34208674 . - . Parent=gene210 chr21 ENCODE CDS 34208624 34208674 . - . Parent=gene210 chr21 . intron 34208675 34209901 . - . Parent=gene210 chr21 ENCODE CDS 34209902 34209937 . - . Parent=gene210 chr21 ENCODE exon 34209902 34210154 . - . Parent=gene210 ### chr21 ENCODE gene 34197630 34201586 . - . ID=gene211;Name=AP000313.5-009;name2=ATP5O chr21 ENCODE exon 34197630 34197813 . - . Parent=gene211 chr21 . intron 34197814 34198108 . - . Parent=gene211 chr21 ENCODE exon 34198109 34198195 . - . Parent=gene211 chr21 . intron 34198196 34200622 . - . Parent=gene211 chr21 ENCODE exon 34200623 34200674 . - . Parent=gene211 chr21 . intron 34200675 34200901 . - . Parent=gene211 chr21 ENCODE exon 34200902 34200968 . - . Parent=gene211 chr21 . intron 34200969 34201514 . - . Parent=gene211 chr21 ENCODE exon 34201515 34201586 . - . Parent=gene211 ### chr21 ENCODE gene 34197630 34203269 . - . ID=gene212;Name=AP000313.5-010;name2=ATP5O chr21 ENCODE exon 34197630 34197830 . - . Parent=gene212 chr21 ENCODE CDS 34197786 34197830 . - . Parent=gene212 chr21 . intron 34197831 34198108 . - . Parent=gene212 chr21 ENCODE exon 34198109 34198195 . - . Parent=gene212 chr21 ENCODE CDS 34198109 34198195 . - . Parent=gene212 chr21 . intron 34198196 34201514 . - . Parent=gene212 chr21 ENCODE exon 34201515 34201627 . - . Parent=gene212 chr21 ENCODE CDS 34201515 34201627 . - . Parent=gene212 chr21 . intron 34201628 34203255 . - . Parent=gene212 chr21 ENCODE exon 34203256 34203269 . - . Parent=gene212 chr21 ENCODE CDS 34203256 34203269 . - . Parent=gene212 ### chr21 ENCODE gene 34202988 34209927 . - . ID=gene213;Name=AP000313.5-004;name2=ATP5O chr21 ENCODE exon 34202988 34203385 . - . Parent=gene213 chr21 . intron 34203386 34206462 . - . Parent=gene213 chr21 ENCODE exon 34206463 34206573 . - . Parent=gene213 chr21 . intron 34206574 34208623 . - . Parent=gene213 chr21 ENCODE exon 34208624 34208674 . - . Parent=gene213 chr21 . intron 34208675 34209901 . - . Parent=gene213 chr21 ENCODE exon 34209902 34209927 . - . Parent=gene213 ### chr21 ENCODE gene 34206541 34209898 . - . ID=gene214;Name=AP000313.5-007;name2=ATP5O chr21 ENCODE exon 34206541 34206573 . - . Parent=gene214 chr21 . intron 34206574 34208623 . - . Parent=gene214 chr21 ENCODE exon 34208624 34208674 . - . Parent=gene214 chr21 . intron 34208675 34209309 . - . Parent=gene214 chr21 ENCODE exon 34209310 34209898 . - . Parent=gene214 ### chr21 ENCODE gene 34206552 34209953 . - . ID=gene215;Name=AP000313.5-008;name2=ATP5O chr21 ENCODE exon 34206552 34206573 . - . Parent=gene215 chr21 . intron 34206574 34208623 . - . Parent=gene215 chr21 ENCODE exon 34208624 34208674 . - . Parent=gene215 chr21 . intron 34208675 34209557 . - . Parent=gene215 chr21 ENCODE exon 34209558 34209953 . - . Parent=gene215 ### chr21 ENCODE gene 39468565 39477647 . - . ID=gene216;Name=AF129408.12-001;name2=DSCR2 chr21 ENCODE exon 39468565 39469460 . - . Parent=gene216 chr21 ENCODE CDS 39469386 39469460 . - . Parent=gene216 chr21 . intron 39469461 39471230 . - . Parent=gene216 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene216 chr21 ENCODE CDS 39471231 39471367 . - . Parent=gene216 chr21 . intron 39471368 39472244 . - . Parent=gene216 chr21 ENCODE exon 39472245 39472443 . - . Parent=gene216 chr21 ENCODE CDS 39472245 39472443 . - . Parent=gene216 chr21 . intron 39472444 39473719 . - . Parent=gene216 chr21 ENCODE exon 39473720 39473782 . - . Parent=gene216 chr21 ENCODE CDS 39473720 39473782 . - . Parent=gene216 chr21 . intron 39473783 39474080 . - . Parent=gene216 chr21 ENCODE exon 39474081 39474232 . - . Parent=gene216 chr21 ENCODE CDS 39474081 39474232 . - . Parent=gene216 chr21 . intron 39474233 39475567 . - . Parent=gene216 chr21 ENCODE exon 39475568 39475674 . - . Parent=gene216 chr21 ENCODE CDS 39475568 39475674 . - . Parent=gene216 chr21 . intron 39475675 39477047 . - . Parent=gene216 chr21 ENCODE CDS 39477048 39477181 . - . Parent=gene216 chr21 ENCODE exon 39477048 39477647 . - . Parent=gene216 ### chr21 ENCODE gene 39469254 39472616 . - . ID=gene217;Name=AF129408.12-004;name2=DSCR2 chr21 ENCODE exon 39469254 39469460 . - . Parent=gene217 chr21 . intron 39469461 39471230 . - . Parent=gene217 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene217 chr21 . intron 39471368 39472244 . - . Parent=gene217 chr21 ENCODE exon 39472245 39472616 . - . Parent=gene217 ### chr21 ENCODE gene 39469254 39474234 . - . ID=gene218;Name=AF129408.12-003;name2=DSCR2 chr21 ENCODE exon 39469254 39469460 . - . Parent=gene218 chr21 ENCODE CDS 39469386 39469460 . - . Parent=gene218 chr21 . intron 39469461 39471230 . - . Parent=gene218 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene218 chr21 ENCODE CDS 39471231 39471367 . - . Parent=gene218 chr21 . intron 39471368 39472244 . - . Parent=gene218 chr21 ENCODE exon 39472245 39472314 . - . Parent=gene218 chr21 ENCODE CDS 39472245 39472314 . - . Parent=gene218 chr21 . intron 39472315 39474080 . - . Parent=gene218 chr21 ENCODE exon 39474081 39474234 . - . Parent=gene218 chr21 ENCODE CDS 39474081 39474234 . - . Parent=gene218 ### chr21 ENCODE gene 39469384 39477083 . - . ID=gene219;Name=AF129408.12-005;name2=DSCR2 chr21 ENCODE exon 39469384 39469460 . - . Parent=gene219 chr21 . intron 39469461 39471230 . - . Parent=gene219 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene219 chr21 . intron 39471368 39472244 . - . Parent=gene219 chr21 ENCODE exon 39472245 39472443 . - . Parent=gene219 chr21 . intron 39472444 39473719 . - . Parent=gene219 chr21 ENCODE exon 39473720 39473782 . - . Parent=gene219 chr21 . intron 39473783 39474080 . - . Parent=gene219 chr21 ENCODE exon 39474081 39474232 . - . Parent=gene219 chr21 . intron 39474233 39475567 . - . Parent=gene219 chr21 ENCODE exon 39475568 39475674 . - . Parent=gene219 chr21 . intron 39475675 39476859 . - . Parent=gene219 chr21 ENCODE exon 39476860 39477083 . - . Parent=gene219 ### chr21 ENCODE gene 39469386 39477181 . - . ID=gene220;Name=AF129408.12-006;name2=DSCR2 chr21 ENCODE exon 39469386 39469460 . - . Parent=gene220 chr21 . intron 39469461 39471230 . - . Parent=gene220 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene220 chr21 . intron 39471368 39472244 . - . Parent=gene220 chr21 ENCODE exon 39472245 39472443 . - . Parent=gene220 chr21 . intron 39472444 39473719 . - . Parent=gene220 chr21 ENCODE exon 39473720 39473782 . - . Parent=gene220 chr21 . intron 39473783 39474080 . - . Parent=gene220 chr21 ENCODE exon 39474081 39474232 . - . Parent=gene220 chr21 . intron 39474233 39477047 . - . Parent=gene220 chr21 ENCODE exon 39477048 39477181 . - . Parent=gene220 ### chr21 ENCODE gene 39469386 39477284 . - . ID=gene221;Name=AF129408.12-002;name2=DSCR2 chr21 ENCODE exon 39469386 39469460 . - . Parent=gene221 chr21 ENCODE CDS 39469386 39469460 . - . Parent=gene221 chr21 . intron 39469461 39471230 . - . Parent=gene221 chr21 ENCODE exon 39471231 39471367 . - . Parent=gene221 chr21 ENCODE CDS 39471231 39471367 . - . Parent=gene221 chr21 . intron 39471368 39472244 . - . Parent=gene221 chr21 ENCODE exon 39472245 39472443 . - . Parent=gene221 chr21 ENCODE CDS 39472245 39472443 . - . Parent=gene221 chr21 . intron 39472444 39474080 . - . Parent=gene221 chr21 ENCODE exon 39474081 39474232 . - . Parent=gene221 chr21 ENCODE CDS 39474081 39474232 . - . Parent=gene221 chr21 . intron 39474233 39475567 . - . Parent=gene221 chr21 ENCODE exon 39475568 39475674 . - . Parent=gene221 chr21 ENCODE CDS 39475568 39475674 . - . Parent=gene221 chr21 . intron 39475675 39477047 . - . Parent=gene221 chr21 ENCODE CDS 39477048 39477181 . - . Parent=gene221 chr21 ENCODE exon 39477048 39477284 . - . Parent=gene221 ### chr21 ENCODE gene 39477972 39607366 . - . ID=gene222;Name=AF129408.13-001;name2=BRWD1 chr21 ENCODE exon 39477972 39481213 . - . Parent=gene222 chr21 ENCODE CDS 39480822 39481213 . - . Parent=gene222 chr21 . intron 39481214 39490293 . - . Parent=gene222 chr21 ENCODE exon 39490294 39491211 . - . Parent=gene222 chr21 ENCODE CDS 39490294 39491211 . - . Parent=gene222 chr21 . intron 39491212 39492558 . - . Parent=gene222 chr21 ENCODE exon 39492559 39493458 . - . Parent=gene222 chr21 ENCODE CDS 39492559 39493458 . - . Parent=gene222 chr21 . intron 39493459 39494014 . - . Parent=gene222 chr21 ENCODE exon 39494015 39494182 . - . Parent=gene222 chr21 ENCODE CDS 39494015 39494182 . - . Parent=gene222 chr21 . intron 39494183 39496120 . - . Parent=gene222 chr21 ENCODE exon 39496121 39496341 . - . Parent=gene222 chr21 ENCODE CDS 39496121 39496341 . - . Parent=gene222 chr21 . intron 39496342 39499903 . - . Parent=gene222 chr21 ENCODE exon 39499904 39500070 . - . Parent=gene222 chr21 ENCODE CDS 39499904 39500070 . - . Parent=gene222 chr21 . intron 39500071 39503790 . - . Parent=gene222 chr21 ENCODE exon 39503791 39503943 . - . Parent=gene222 chr21 ENCODE CDS 39503791 39503943 . - . Parent=gene222 chr21 . intron 39503944 39504581 . - . Parent=gene222 chr21 ENCODE exon 39504582 39504725 . - . Parent=gene222 chr21 ENCODE CDS 39504582 39504725 . - . Parent=gene222 chr21 . intron 39504726 39506461 . - . Parent=gene222 chr21 ENCODE exon 39506462 39506503 . - . Parent=gene222 chr21 ENCODE CDS 39506462 39506503 . - . Parent=gene222 chr21 . intron 39506504 39507276 . - . Parent=gene222 chr21 ENCODE exon 39507277 39507349 . - . Parent=gene222 chr21 ENCODE CDS 39507277 39507349 . - . Parent=gene222 chr21 . intron 39507350 39509032 . - . Parent=gene222 chr21 ENCODE exon 39509033 39509158 . - . Parent=gene222 chr21 ENCODE CDS 39509033 39509158 . - . Parent=gene222 chr21 . intron 39509159 39511947 . - . Parent=gene222 chr21 ENCODE exon 39511948 39512068 . - . Parent=gene222 chr21 ENCODE CDS 39511948 39512068 . - . Parent=gene222 chr21 . intron 39512069 39512300 . - . Parent=gene222 chr21 ENCODE exon 39512301 39512456 . - . Parent=gene222 chr21 ENCODE CDS 39512301 39512456 . - . Parent=gene222 chr21 . intron 39512457 39518203 . - . Parent=gene222 chr21 ENCODE exon 39518204 39518265 . - . Parent=gene222 chr21 ENCODE CDS 39518204 39518265 . - . Parent=gene222 chr21 . intron 39518266 39518881 . - . Parent=gene222 chr21 ENCODE exon 39518882 39518993 . - . Parent=gene222 chr21 ENCODE CDS 39518882 39518993 . - . Parent=gene222 chr21 . intron 39518994 39522295 . - . Parent=gene222 chr21 ENCODE exon 39522296 39522378 . - . Parent=gene222 chr21 ENCODE CDS 39522296 39522378 . - . Parent=gene222 chr21 . intron 39522379 39523107 . - . Parent=gene222 chr21 ENCODE exon 39523108 39523232 . - . Parent=gene222 chr21 ENCODE CDS 39523108 39523232 . - . Parent=gene222 chr21 . intron 39523233 39525972 . - . Parent=gene222 chr21 ENCODE exon 39525973 39526080 . - . Parent=gene222 chr21 ENCODE CDS 39525973 39526080 . - . Parent=gene222 chr21 . intron 39526081 39526168 . - . Parent=gene222 chr21 ENCODE exon 39526169 39526294 . - . Parent=gene222 chr21 ENCODE CDS 39526169 39526294 . - . Parent=gene222 chr21 . intron 39526295 39530390 . - . Parent=gene222 chr21 ENCODE exon 39530391 39530580 . - . Parent=gene222 chr21 ENCODE CDS 39530391 39530580 . - . Parent=gene222 chr21 . intron 39530581 39532274 . - . Parent=gene222 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene222 chr21 ENCODE CDS 39532275 39532369 . - . Parent=gene222 chr21 . intron 39532370 39541496 . - . Parent=gene222 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene222 chr21 ENCODE CDS 39541497 39541628 . - . Parent=gene222 chr21 . intron 39541629 39544591 . - . Parent=gene222 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene222 chr21 ENCODE CDS 39544592 39544685 . - . Parent=gene222 chr21 . intron 39544686 39549440 . - . Parent=gene222 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene222 chr21 ENCODE CDS 39549441 39549624 . - . Parent=gene222 chr21 . intron 39549625 39552282 . - . Parent=gene222 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene222 chr21 ENCODE CDS 39552283 39552468 . - . Parent=gene222 chr21 . intron 39552469 39558255 . - . Parent=gene222 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene222 chr21 ENCODE CDS 39558256 39558481 . - . Parent=gene222 chr21 . intron 39558482 39558686 . - . Parent=gene222 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene222 chr21 ENCODE CDS 39558687 39558815 . - . Parent=gene222 chr21 . intron 39558816 39563694 . - . Parent=gene222 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene222 chr21 ENCODE CDS 39563695 39563829 . - . Parent=gene222 chr21 . intron 39563830 39564078 . - . Parent=gene222 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene222 chr21 ENCODE CDS 39564079 39564229 . - . Parent=gene222 chr21 . intron 39564230 39568169 . - . Parent=gene222 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene222 chr21 ENCODE CDS 39568170 39568268 . - . Parent=gene222 chr21 . intron 39568269 39569968 . - . Parent=gene222 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene222 chr21 ENCODE CDS 39569969 39570009 . - . Parent=gene222 chr21 . intron 39570010 39571046 . - . Parent=gene222 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene222 chr21 ENCODE CDS 39571047 39571147 . - . Parent=gene222 chr21 . intron 39571148 39572538 . - . Parent=gene222 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene222 chr21 ENCODE CDS 39572539 39572609 . - . Parent=gene222 chr21 . intron 39572610 39573943 . - . Parent=gene222 chr21 ENCODE exon 39573944 39574044 . - . Parent=gene222 chr21 ENCODE CDS 39573944 39574044 . - . Parent=gene222 chr21 . intron 39574045 39587606 . - . Parent=gene222 chr21 ENCODE exon 39587607 39587828 . - . Parent=gene222 chr21 ENCODE CDS 39587607 39587828 . - . Parent=gene222 chr21 . intron 39587829 39589538 . - . Parent=gene222 chr21 ENCODE exon 39589539 39589699 . - . Parent=gene222 chr21 ENCODE CDS 39589539 39589699 . - . Parent=gene222 chr21 . intron 39589700 39590060 . - . Parent=gene222 chr21 ENCODE exon 39590061 39590159 . - . Parent=gene222 chr21 ENCODE CDS 39590061 39590159 . - . Parent=gene222 chr21 . intron 39590160 39592227 . - . Parent=gene222 chr21 ENCODE exon 39592228 39592378 . - . Parent=gene222 chr21 ENCODE CDS 39592228 39592378 . - . Parent=gene222 chr21 . intron 39592379 39606636 . - . Parent=gene222 chr21 ENCODE exon 39606637 39606696 . - . Parent=gene222 chr21 ENCODE CDS 39606637 39606696 . - . Parent=gene222 chr21 . intron 39606697 39606867 . - . Parent=gene222 chr21 ENCODE exon 39606868 39606897 . - . Parent=gene222 chr21 ENCODE CDS 39606868 39606897 . - . Parent=gene222 chr21 . intron 39606898 39607036 . - . Parent=gene222 chr21 ENCODE exon 39607037 39607095 . - . Parent=gene222 chr21 ENCODE CDS 39607037 39607095 . - . Parent=gene222 chr21 . intron 39607096 39607238 . - . Parent=gene222 chr21 ENCODE CDS 39607239 39607287 . - . Parent=gene222 chr21 ENCODE exon 39607239 39607366 . - . Parent=gene222 ### chr21 ENCODE gene 39481042 39558737 . - . ID=gene223;Name=AF129408.13-009;name2=BRWD1 chr21 ENCODE exon 39481042 39481213 . - . Parent=gene223 chr21 . intron 39481214 39490293 . - . Parent=gene223 chr21 ENCODE exon 39490294 39491211 . - . Parent=gene223 chr21 . intron 39491212 39492558 . - . Parent=gene223 chr21 ENCODE exon 39492559 39493458 . - . Parent=gene223 chr21 . intron 39493459 39494014 . - . Parent=gene223 chr21 ENCODE exon 39494015 39494182 . - . Parent=gene223 chr21 . intron 39494183 39496120 . - . Parent=gene223 chr21 ENCODE exon 39496121 39496341 . - . Parent=gene223 chr21 . intron 39496342 39499903 . - . Parent=gene223 chr21 ENCODE exon 39499904 39500070 . - . Parent=gene223 chr21 . intron 39500071 39503790 . - . Parent=gene223 chr21 ENCODE exon 39503791 39503943 . - . Parent=gene223 chr21 . intron 39503944 39504581 . - . Parent=gene223 chr21 ENCODE exon 39504582 39504725 . - . Parent=gene223 chr21 . intron 39504726 39506461 . - . Parent=gene223 chr21 ENCODE exon 39506462 39506503 . - . Parent=gene223 chr21 . intron 39506504 39507276 . - . Parent=gene223 chr21 ENCODE exon 39507277 39507349 . - . Parent=gene223 chr21 . intron 39507350 39509032 . - . Parent=gene223 chr21 ENCODE exon 39509033 39509158 . - . Parent=gene223 chr21 . intron 39509159 39512324 . - . Parent=gene223 chr21 ENCODE exon 39512325 39512456 . - . Parent=gene223 chr21 . intron 39512457 39518203 . - . Parent=gene223 chr21 ENCODE exon 39518204 39518265 . - . Parent=gene223 chr21 . intron 39518266 39518881 . - . Parent=gene223 chr21 ENCODE exon 39518882 39518993 . - . Parent=gene223 chr21 . intron 39518994 39522295 . - . Parent=gene223 chr21 ENCODE exon 39522296 39522378 . - . Parent=gene223 chr21 . intron 39522379 39523107 . - . Parent=gene223 chr21 ENCODE exon 39523108 39523232 . - . Parent=gene223 chr21 . intron 39523233 39525972 . - . Parent=gene223 chr21 ENCODE exon 39525973 39526080 . - . Parent=gene223 chr21 . intron 39526081 39526168 . - . Parent=gene223 chr21 ENCODE exon 39526169 39526294 . - . Parent=gene223 chr21 . intron 39526295 39530390 . - . Parent=gene223 chr21 ENCODE exon 39530391 39530580 . - . Parent=gene223 chr21 . intron 39530581 39532274 . - . Parent=gene223 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene223 chr21 . intron 39532370 39541496 . - . Parent=gene223 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene223 chr21 . intron 39541629 39544591 . - . Parent=gene223 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene223 chr21 . intron 39544686 39549440 . - . Parent=gene223 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene223 chr21 . intron 39549625 39552282 . - . Parent=gene223 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene223 chr21 . intron 39552469 39558255 . - . Parent=gene223 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene223 chr21 . intron 39558482 39558686 . - . Parent=gene223 chr21 ENCODE exon 39558687 39558737 . - . Parent=gene223 ### chr21 ENCODE gene 39484015 39607366 . - . ID=gene224;Name=AF129408.13-002;name2=BRWD1 chr21 ENCODE exon 39484015 39491211 . - . Parent=gene224 chr21 ENCODE CDS 39490055 39491211 . - . Parent=gene224 chr21 . intron 39491212 39492558 . - . Parent=gene224 chr21 ENCODE exon 39492559 39493458 . - . Parent=gene224 chr21 ENCODE CDS 39492559 39493458 . - . Parent=gene224 chr21 . intron 39493459 39494014 . - . Parent=gene224 chr21 ENCODE exon 39494015 39494182 . - . Parent=gene224 chr21 ENCODE CDS 39494015 39494182 . - . Parent=gene224 chr21 . intron 39494183 39496120 . - . Parent=gene224 chr21 ENCODE exon 39496121 39496341 . - . Parent=gene224 chr21 ENCODE CDS 39496121 39496341 . - . Parent=gene224 chr21 . intron 39496342 39499903 . - . Parent=gene224 chr21 ENCODE exon 39499904 39500070 . - . Parent=gene224 chr21 ENCODE CDS 39499904 39500070 . - . Parent=gene224 chr21 . intron 39500071 39503790 . - . Parent=gene224 chr21 ENCODE exon 39503791 39503943 . - . Parent=gene224 chr21 ENCODE CDS 39503791 39503943 . - . Parent=gene224 chr21 . intron 39503944 39504581 . - . Parent=gene224 chr21 ENCODE exon 39504582 39504725 . - . Parent=gene224 chr21 ENCODE CDS 39504582 39504725 . - . Parent=gene224 chr21 . intron 39504726 39506461 . - . Parent=gene224 chr21 ENCODE exon 39506462 39506503 . - . Parent=gene224 chr21 ENCODE CDS 39506462 39506503 . - . Parent=gene224 chr21 . intron 39506504 39507276 . - . Parent=gene224 chr21 ENCODE exon 39507277 39507349 . - . Parent=gene224 chr21 ENCODE CDS 39507277 39507349 . - . Parent=gene224 chr21 . intron 39507350 39509032 . - . Parent=gene224 chr21 ENCODE exon 39509033 39509158 . - . Parent=gene224 chr21 ENCODE CDS 39509033 39509158 . - . Parent=gene224 chr21 . intron 39509159 39511947 . - . Parent=gene224 chr21 ENCODE exon 39511948 39512068 . - . Parent=gene224 chr21 ENCODE CDS 39511948 39512068 . - . Parent=gene224 chr21 . intron 39512069 39512300 . - . Parent=gene224 chr21 ENCODE exon 39512301 39512456 . - . Parent=gene224 chr21 ENCODE CDS 39512301 39512456 . - . Parent=gene224 chr21 . intron 39512457 39518203 . - . Parent=gene224 chr21 ENCODE exon 39518204 39518265 . - . Parent=gene224 chr21 ENCODE CDS 39518204 39518265 . - . Parent=gene224 chr21 . intron 39518266 39518881 . - . Parent=gene224 chr21 ENCODE exon 39518882 39518993 . - . Parent=gene224 chr21 ENCODE CDS 39518882 39518993 . - . Parent=gene224 chr21 . intron 39518994 39522295 . - . Parent=gene224 chr21 ENCODE exon 39522296 39522378 . - . Parent=gene224 chr21 ENCODE CDS 39522296 39522378 . - . Parent=gene224 chr21 . intron 39522379 39523107 . - . Parent=gene224 chr21 ENCODE exon 39523108 39523232 . - . Parent=gene224 chr21 ENCODE CDS 39523108 39523232 . - . Parent=gene224 chr21 . intron 39523233 39525972 . - . Parent=gene224 chr21 ENCODE exon 39525973 39526080 . - . Parent=gene224 chr21 ENCODE CDS 39525973 39526080 . - . Parent=gene224 chr21 . intron 39526081 39526168 . - . Parent=gene224 chr21 ENCODE exon 39526169 39526294 . - . Parent=gene224 chr21 ENCODE CDS 39526169 39526294 . - . Parent=gene224 chr21 . intron 39526295 39530390 . - . Parent=gene224 chr21 ENCODE exon 39530391 39530580 . - . Parent=gene224 chr21 ENCODE CDS 39530391 39530580 . - . Parent=gene224 chr21 . intron 39530581 39532274 . - . Parent=gene224 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene224 chr21 ENCODE CDS 39532275 39532369 . - . Parent=gene224 chr21 . intron 39532370 39541496 . - . Parent=gene224 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene224 chr21 ENCODE CDS 39541497 39541628 . - . Parent=gene224 chr21 . intron 39541629 39544591 . - . Parent=gene224 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene224 chr21 ENCODE CDS 39544592 39544685 . - . Parent=gene224 chr21 . intron 39544686 39549440 . - . Parent=gene224 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene224 chr21 ENCODE CDS 39549441 39549624 . - . Parent=gene224 chr21 . intron 39549625 39552282 . - . Parent=gene224 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene224 chr21 ENCODE CDS 39552283 39552468 . - . Parent=gene224 chr21 . intron 39552469 39558255 . - . Parent=gene224 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene224 chr21 ENCODE CDS 39558256 39558481 . - . Parent=gene224 chr21 . intron 39558482 39558686 . - . Parent=gene224 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene224 chr21 ENCODE CDS 39558687 39558815 . - . Parent=gene224 chr21 . intron 39558816 39563694 . - . Parent=gene224 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene224 chr21 ENCODE CDS 39563695 39563829 . - . Parent=gene224 chr21 . intron 39563830 39564078 . - . Parent=gene224 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene224 chr21 ENCODE CDS 39564079 39564229 . - . Parent=gene224 chr21 . intron 39564230 39568169 . - . Parent=gene224 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene224 chr21 ENCODE CDS 39568170 39568268 . - . Parent=gene224 chr21 . intron 39568269 39569968 . - . Parent=gene224 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene224 chr21 ENCODE CDS 39569969 39570009 . - . Parent=gene224 chr21 . intron 39570010 39571046 . - . Parent=gene224 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene224 chr21 ENCODE CDS 39571047 39571147 . - . Parent=gene224 chr21 . intron 39571148 39572538 . - . Parent=gene224 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene224 chr21 ENCODE CDS 39572539 39572609 . - . Parent=gene224 chr21 . intron 39572610 39573943 . - . Parent=gene224 chr21 ENCODE exon 39573944 39574044 . - . Parent=gene224 chr21 ENCODE CDS 39573944 39574044 . - . Parent=gene224 chr21 . intron 39574045 39587606 . - . Parent=gene224 chr21 ENCODE exon 39587607 39587828 . - . Parent=gene224 chr21 ENCODE CDS 39587607 39587828 . - . Parent=gene224 chr21 . intron 39587829 39589538 . - . Parent=gene224 chr21 ENCODE exon 39589539 39589699 . - . Parent=gene224 chr21 ENCODE CDS 39589539 39589699 . - . Parent=gene224 chr21 . intron 39589700 39590060 . - . Parent=gene224 chr21 ENCODE exon 39590061 39590159 . - . Parent=gene224 chr21 ENCODE CDS 39590061 39590159 . - . Parent=gene224 chr21 . intron 39590160 39592227 . - . Parent=gene224 chr21 ENCODE exon 39592228 39592378 . - . Parent=gene224 chr21 ENCODE CDS 39592228 39592378 . - . Parent=gene224 chr21 . intron 39592379 39606636 . - . Parent=gene224 chr21 ENCODE exon 39606637 39606696 . - . Parent=gene224 chr21 ENCODE CDS 39606637 39606696 . - . Parent=gene224 chr21 . intron 39606697 39606867 . - . Parent=gene224 chr21 ENCODE exon 39606868 39606897 . - . Parent=gene224 chr21 ENCODE CDS 39606868 39606897 . - . Parent=gene224 chr21 . intron 39606898 39607036 . - . Parent=gene224 chr21 ENCODE exon 39607037 39607095 . - . Parent=gene224 chr21 ENCODE CDS 39607037 39607095 . - . Parent=gene224 chr21 . intron 39607096 39607238 . - . Parent=gene224 chr21 ENCODE CDS 39607239 39607287 . - . Parent=gene224 chr21 ENCODE exon 39607239 39607366 . - . Parent=gene224 ### chr21 ENCODE gene 39493215 39494292 . - . ID=gene225;Name=AF129408.13-007;name2=BRWD1 chr21 ENCODE exon 39493215 39493458 . - . Parent=gene225 chr21 . intron 39493459 39494014 . - . Parent=gene225 chr21 ENCODE exon 39494015 39494292 . - . Parent=gene225 ### chr21 ENCODE gene 39496162 39523188 . - . ID=gene226;Name=AF129408.13-010;name2=BRWD1 chr21 ENCODE exon 39496162 39496341 . - . Parent=gene226 chr21 ENCODE CDS 39496162 39496341 . - . Parent=gene226 chr21 . intron 39496342 39499903 . - . Parent=gene226 chr21 ENCODE exon 39499904 39500070 . - . Parent=gene226 chr21 ENCODE CDS 39499904 39500070 . - . Parent=gene226 chr21 . intron 39500071 39503790 . - . Parent=gene226 chr21 ENCODE exon 39503791 39503943 . - . Parent=gene226 chr21 ENCODE CDS 39503791 39503943 . - . Parent=gene226 chr21 . intron 39503944 39506461 . - . Parent=gene226 chr21 ENCODE exon 39506462 39506503 . - . Parent=gene226 chr21 ENCODE CDS 39506462 39506503 . - . Parent=gene226 chr21 . intron 39506504 39507276 . - . Parent=gene226 chr21 ENCODE exon 39507277 39507349 . - . Parent=gene226 chr21 ENCODE CDS 39507277 39507349 . - . Parent=gene226 chr21 . intron 39507350 39509032 . - . Parent=gene226 chr21 ENCODE exon 39509033 39509158 . - . Parent=gene226 chr21 ENCODE CDS 39509033 39509158 . - . Parent=gene226 chr21 . intron 39509159 39511947 . - . Parent=gene226 chr21 ENCODE exon 39511948 39512068 . - . Parent=gene226 chr21 ENCODE CDS 39511948 39512068 . - . Parent=gene226 chr21 . intron 39512069 39512300 . - . Parent=gene226 chr21 ENCODE exon 39512301 39512456 . - . Parent=gene226 chr21 ENCODE CDS 39512301 39512456 . - . Parent=gene226 chr21 . intron 39512457 39518203 . - . Parent=gene226 chr21 ENCODE exon 39518204 39518265 . - . Parent=gene226 chr21 ENCODE CDS 39518204 39518265 . - . Parent=gene226 chr21 . intron 39518266 39518881 . - . Parent=gene226 chr21 ENCODE exon 39518882 39518993 . - . Parent=gene226 chr21 ENCODE CDS 39518882 39518993 . - . Parent=gene226 chr21 . intron 39518994 39522295 . - . Parent=gene226 chr21 ENCODE exon 39522296 39522378 . - . Parent=gene226 chr21 ENCODE CDS 39522296 39522378 . - . Parent=gene226 chr21 . intron 39522379 39523107 . - . Parent=gene226 chr21 ENCODE exon 39523108 39523188 . - . Parent=gene226 chr21 ENCODE CDS 39523108 39523188 . - . Parent=gene226 ### chr21 ENCODE gene 39503582 39512456 . - . ID=gene227;Name=AF129408.13-006;name2=BRWD1 chr21 ENCODE exon 39503582 39503943 . - . Parent=gene227 chr21 . intron 39503944 39504661 . - . Parent=gene227 chr21 ENCODE exon 39504662 39504725 . - . Parent=gene227 chr21 . intron 39504726 39506461 . - . Parent=gene227 chr21 ENCODE exon 39506462 39506503 . - . Parent=gene227 chr21 . intron 39506504 39507276 . - . Parent=gene227 chr21 ENCODE exon 39507277 39507349 . - . Parent=gene227 chr21 . intron 39507350 39509032 . - . Parent=gene227 chr21 ENCODE exon 39509033 39509158 . - . Parent=gene227 chr21 . intron 39509159 39511947 . - . Parent=gene227 chr21 ENCODE exon 39511948 39512068 . - . Parent=gene227 chr21 . intron 39512069 39512300 . - . Parent=gene227 chr21 ENCODE exon 39512301 39512456 . - . Parent=gene227 ### chr21 ENCODE gene 39530514 39574009 . - . ID=gene228;Name=AF129408.13-011;name2=BRWD1 chr21 ENCODE exon 39530514 39530580 . - . Parent=gene228 chr21 . intron 39530581 39532274 . - . Parent=gene228 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene228 chr21 . intron 39532370 39541496 . - . Parent=gene228 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene228 chr21 . intron 39541629 39544591 . - . Parent=gene228 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene228 chr21 . intron 39544686 39552282 . - . Parent=gene228 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene228 chr21 . intron 39552469 39558255 . - . Parent=gene228 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene228 chr21 . intron 39558482 39558686 . - . Parent=gene228 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene228 chr21 . intron 39558816 39563694 . - . Parent=gene228 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene228 chr21 . intron 39563830 39564078 . - . Parent=gene228 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene228 chr21 . intron 39564230 39568169 . - . Parent=gene228 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene228 chr21 . intron 39568269 39569968 . - . Parent=gene228 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene228 chr21 . intron 39570010 39571046 . - . Parent=gene228 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene228 chr21 . intron 39571148 39572538 . - . Parent=gene228 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene228 chr21 . intron 39572610 39573943 . - . Parent=gene228 chr21 ENCODE exon 39573944 39574009 . - . Parent=gene228 ### chr21 ENCODE gene 39530514 39574009 . - . ID=gene229;Name=AF129408.13-012;name2=BRWD1 chr21 ENCODE exon 39530514 39530580 . - . Parent=gene229 chr21 . intron 39530581 39532274 . - . Parent=gene229 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene229 chr21 . intron 39532370 39541496 . - . Parent=gene229 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene229 chr21 . intron 39541629 39544591 . - . Parent=gene229 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene229 chr21 . intron 39544686 39549440 . - . Parent=gene229 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene229 chr21 . intron 39549625 39552282 . - . Parent=gene229 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene229 chr21 . intron 39552469 39558255 . - . Parent=gene229 chr21 ENCODE exon 39558256 39558360 . - . Parent=gene229 chr21 . intron 39558361 39558686 . - . Parent=gene229 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene229 chr21 . intron 39558816 39563694 . - . Parent=gene229 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene229 chr21 . intron 39563830 39564078 . - . Parent=gene229 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene229 chr21 . intron 39564230 39568169 . - . Parent=gene229 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene229 chr21 . intron 39568269 39569968 . - . Parent=gene229 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene229 chr21 . intron 39570010 39571046 . - . Parent=gene229 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene229 chr21 . intron 39571148 39572538 . - . Parent=gene229 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene229 chr21 . intron 39572610 39573943 . - . Parent=gene229 chr21 ENCODE exon 39573944 39574009 . - . Parent=gene229 ### chr21 ENCODE gene 39530514 39574009 . - . ID=gene230;Name=AF129408.13-013;name2=BRWD1 chr21 ENCODE exon 39530514 39530580 . - . Parent=gene230 chr21 . intron 39530581 39532274 . - . Parent=gene230 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene230 chr21 . intron 39532370 39541496 . - . Parent=gene230 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene230 chr21 . intron 39541629 39544591 . - . Parent=gene230 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene230 chr21 . intron 39544686 39549440 . - . Parent=gene230 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene230 chr21 . intron 39549625 39552282 . - . Parent=gene230 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene230 chr21 . intron 39552469 39558255 . - . Parent=gene230 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene230 chr21 . intron 39558482 39558781 . - . Parent=gene230 chr21 ENCODE exon 39558782 39558815 . - . Parent=gene230 chr21 . intron 39558816 39563694 . - . Parent=gene230 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene230 chr21 . intron 39563830 39564078 . - . Parent=gene230 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene230 chr21 . intron 39564230 39568169 . - . Parent=gene230 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene230 chr21 . intron 39568269 39569968 . - . Parent=gene230 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene230 chr21 . intron 39570010 39571046 . - . Parent=gene230 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene230 chr21 . intron 39571148 39572538 . - . Parent=gene230 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene230 chr21 . intron 39572610 39573943 . - . Parent=gene230 chr21 ENCODE exon 39573944 39574009 . - . Parent=gene230 ### chr21 ENCODE gene 39530515 39574009 . - . ID=gene231;Name=AF129408.13-014;name2=BRWD1 chr21 ENCODE exon 39530515 39530580 . - . Parent=gene231 chr21 ENCODE CDS 39530515 39530580 . - . Parent=gene231 chr21 . intron 39530581 39532274 . - . Parent=gene231 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene231 chr21 ENCODE CDS 39532275 39532369 . - . Parent=gene231 chr21 . intron 39532370 39544591 . - . Parent=gene231 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene231 chr21 ENCODE CDS 39544592 39544685 . - . Parent=gene231 chr21 . intron 39544686 39549440 . - . Parent=gene231 chr21 ENCODE exon 39549441 39549624 . - . Parent=gene231 chr21 ENCODE CDS 39549441 39549624 . - . Parent=gene231 chr21 . intron 39549625 39552282 . - . Parent=gene231 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene231 chr21 ENCODE CDS 39552283 39552468 . - . Parent=gene231 chr21 . intron 39552469 39558255 . - . Parent=gene231 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene231 chr21 ENCODE CDS 39558256 39558481 . - . Parent=gene231 chr21 . intron 39558482 39558686 . - . Parent=gene231 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene231 chr21 ENCODE CDS 39558687 39558815 . - . Parent=gene231 chr21 . intron 39558816 39563694 . - . Parent=gene231 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene231 chr21 ENCODE CDS 39563695 39563829 . - . Parent=gene231 chr21 . intron 39563830 39564078 . - . Parent=gene231 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene231 chr21 ENCODE CDS 39564079 39564229 . - . Parent=gene231 chr21 . intron 39564230 39568169 . - . Parent=gene231 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene231 chr21 ENCODE CDS 39568170 39568268 . - . Parent=gene231 chr21 . intron 39568269 39569968 . - . Parent=gene231 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene231 chr21 ENCODE CDS 39569969 39570009 . - . Parent=gene231 chr21 . intron 39570010 39571046 . - . Parent=gene231 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene231 chr21 ENCODE CDS 39571047 39571147 . - . Parent=gene231 chr21 . intron 39571148 39572538 . - . Parent=gene231 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene231 chr21 ENCODE CDS 39572539 39572609 . - . Parent=gene231 chr21 . intron 39572610 39573943 . - . Parent=gene231 chr21 ENCODE exon 39573944 39574009 . - . Parent=gene231 chr21 ENCODE CDS 39573944 39574009 . - . Parent=gene231 ### chr21 ENCODE gene 39530515 39574009 . - . ID=gene232;Name=AF129408.13-015;name2=BRWD1 chr21 ENCODE exon 39530515 39530580 . - . Parent=gene232 chr21 . intron 39530581 39532274 . - . Parent=gene232 chr21 ENCODE exon 39532275 39532369 . - . Parent=gene232 chr21 . intron 39532370 39541496 . - . Parent=gene232 chr21 ENCODE exon 39541497 39541628 . - . Parent=gene232 chr21 . intron 39541629 39544591 . - . Parent=gene232 chr21 ENCODE exon 39544592 39544685 . - . Parent=gene232 chr21 . intron 39544686 39549460 . - . Parent=gene232 chr21 ENCODE exon 39549461 39549624 . - . Parent=gene232 chr21 . intron 39549625 39552282 . - . Parent=gene232 chr21 ENCODE exon 39552283 39552468 . - . Parent=gene232 chr21 . intron 39552469 39558255 . - . Parent=gene232 chr21 ENCODE exon 39558256 39558481 . - . Parent=gene232 chr21 . intron 39558482 39558686 . - . Parent=gene232 chr21 ENCODE exon 39558687 39558815 . - . Parent=gene232 chr21 . intron 39558816 39563694 . - . Parent=gene232 chr21 ENCODE exon 39563695 39563829 . - . Parent=gene232 chr21 . intron 39563830 39564078 . - . Parent=gene232 chr21 ENCODE exon 39564079 39564229 . - . Parent=gene232 chr21 . intron 39564230 39568169 . - . Parent=gene232 chr21 ENCODE exon 39568170 39568268 . - . Parent=gene232 chr21 . intron 39568269 39569968 . - . Parent=gene232 chr21 ENCODE exon 39569969 39570009 . - . Parent=gene232 chr21 . intron 39570010 39571046 . - . Parent=gene232 chr21 ENCODE exon 39571047 39571147 . - . Parent=gene232 chr21 . intron 39571148 39572538 . - . Parent=gene232 chr21 ENCODE exon 39572539 39572609 . - . Parent=gene232 chr21 . intron 39572610 39573943 . - . Parent=gene232 chr21 ENCODE exon 39573944 39574009 . - . Parent=gene232 ### chr21 ENCODE gene 39572293 39574003 . - . ID=gene233;Name=AF129408.13-003;name2=BRWD1 chr21 ENCODE exon 39572293 39572609 . - . Parent=gene233 chr21 . intron 39572610 39573943 . - . Parent=gene233 chr21 ENCODE exon 39573944 39574003 . - . Parent=gene233 ### chr21 ENCODE gene 39590233 39607438 . - . ID=gene234;Name=AF129408.13-004;name2=BRWD1 chr21 ENCODE exon 39590233 39592378 . - . Parent=gene234 chr21 ENCODE CDS 39592214 39592378 . - . Parent=gene234 chr21 . intron 39592379 39606636 . - . Parent=gene234 chr21 ENCODE exon 39606637 39606696 . - . Parent=gene234 chr21 ENCODE CDS 39606637 39606696 . - . Parent=gene234 chr21 . intron 39606697 39606867 . - . Parent=gene234 chr21 ENCODE exon 39606868 39606897 . - . Parent=gene234 chr21 ENCODE CDS 39606868 39606897 . - . Parent=gene234 chr21 . intron 39606898 39607036 . - . Parent=gene234 chr21 ENCODE exon 39607037 39607095 . - . Parent=gene234 chr21 ENCODE CDS 39607037 39607095 . - . Parent=gene234 chr21 . intron 39607096 39607238 . - . Parent=gene234 chr21 ENCODE CDS 39607239 39607287 . - . Parent=gene234 chr21 ENCODE exon 39607239 39607438 . - . Parent=gene234 ### chr21 ENCODE gene 39591886 39615355 . - . ID=gene235;Name=AF129408.13-008;name2=BRWD1 chr21 ENCODE exon 39591886 39592378 . - . Parent=gene235 chr21 . intron 39592379 39606636 . - . Parent=gene235 chr21 ENCODE exon 39606637 39606696 . - . Parent=gene235 chr21 . intron 39606697 39606867 . - . Parent=gene235 chr21 ENCODE exon 39606868 39606897 . - . Parent=gene235 chr21 . intron 39606898 39607036 . - . Parent=gene235 chr21 ENCODE exon 39607037 39607095 . - . Parent=gene235 chr21 . intron 39607096 39614821 . - . Parent=gene235 chr21 ENCODE exon 39614822 39615355 . - . Parent=gene235 ### chr21 ENCODE gene 39606359 39607097 . - . ID=gene236;Name=AF129408.13-005;name2=BRWD1 chr21 ENCODE exon 39606359 39606696 . - . Parent=gene236 chr21 . intron 39606697 39606867 . - . Parent=gene236 chr21 ENCODE exon 39606868 39606897 . - . Parent=gene236 chr21 . intron 39606898 39607036 . - . Parent=gene236 chr21 ENCODE exon 39607037 39607097 . - . Parent=gene236 ### chr21 ENCODE gene 39636111 39642787 . - . ID=gene237;Name=AF064861.91-004;name2=HMGN1 chr21 ENCODE exon 39636111 39636955 . - . Parent=gene237 chr21 . intron 39636956 39638941 . - . Parent=gene237 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene237 chr21 . intron 39639071 39639625 . - . Parent=gene237 chr21 ENCODE exon 39639626 39639754 . - . Parent=gene237 chr21 . intron 39639755 39642087 . - . Parent=gene237 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene237 chr21 . intron 39642136 39642217 . - . Parent=gene237 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene237 chr21 . intron 39642248 39642340 . - . Parent=gene237 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene237 chr21 . intron 39642374 39642698 . - . Parent=gene237 chr21 ENCODE exon 39642699 39642787 . - . Parent=gene237 ### chr21 ENCODE gene 39636111 39642895 . - . ID=gene238;Name=AF064861.91-006;name2=HMGN1 chr21 ENCODE exon 39636111 39636955 . - . Parent=gene238 chr21 . intron 39636956 39638941 . - . Parent=gene238 chr21 ENCODE exon 39638942 39642135 . - . Parent=gene238 chr21 . intron 39642136 39642217 . - . Parent=gene238 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene238 chr21 . intron 39642248 39642340 . - . Parent=gene238 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene238 chr21 . intron 39642374 39642698 . - . Parent=gene238 chr21 ENCODE exon 39642699 39642895 . - . Parent=gene238 ### chr21 ENCODE gene 39636111 39642936 . - . ID=gene239;Name=AF064861.91-002;name2=HMGN1 chr21 ENCODE exon 39636111 39636955 . - . Parent=gene239 chr21 . intron 39636956 39638941 . - . Parent=gene239 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene239 chr21 . intron 39639071 39639625 . - . Parent=gene239 chr21 ENCODE exon 39639626 39639754 . - . Parent=gene239 chr21 . intron 39639755 39641174 . - . Parent=gene239 chr21 ENCODE exon 39641175 39641274 . - . Parent=gene239 chr21 . intron 39641275 39642087 . - . Parent=gene239 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene239 chr21 . intron 39642136 39642217 . - . Parent=gene239 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene239 chr21 . intron 39642248 39642340 . - . Parent=gene239 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene239 chr21 . intron 39642374 39642698 . - . Parent=gene239 chr21 ENCODE exon 39642699 39642936 . - . Parent=gene239 ### chr21 ENCODE gene 39636111 39642996 . - . ID=gene240;Name=AF064861.91-001;name2=HMGN1 chr21 ENCODE exon 39636111 39636955 . - . Parent=gene240 chr21 ENCODE CDS 39636908 39636955 . - . Parent=gene240 chr21 . intron 39636956 39638941 . - . Parent=gene240 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene240 chr21 ENCODE CDS 39638942 39639070 . - . Parent=gene240 chr21 . intron 39639071 39642087 . - . Parent=gene240 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene240 chr21 ENCODE CDS 39642088 39642135 . - . Parent=gene240 chr21 . intron 39642136 39642217 . - . Parent=gene240 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene240 chr21 ENCODE CDS 39642218 39642247 . - . Parent=gene240 chr21 . intron 39642248 39642340 . - . Parent=gene240 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene240 chr21 ENCODE CDS 39642341 39642373 . - . Parent=gene240 chr21 . intron 39642374 39642698 . - . Parent=gene240 chr21 ENCODE CDS 39642699 39642713 . - . Parent=gene240 chr21 ENCODE exon 39642699 39642996 . - . Parent=gene240 ### chr21 ENCODE gene 39636111 39643140 . - . ID=gene241;Name=AF064861.91-003;name2=HMGN1 chr21 ENCODE exon 39636111 39636955 . - . Parent=gene241 chr21 . intron 39636956 39638941 . - . Parent=gene241 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene241 chr21 . intron 39639071 39639625 . - . Parent=gene241 chr21 ENCODE exon 39639626 39641088 . - . Parent=gene241 chr21 . intron 39641089 39641174 . - . Parent=gene241 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene241 chr21 . intron 39641280 39642087 . - . Parent=gene241 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene241 chr21 . intron 39642136 39642217 . - . Parent=gene241 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene241 chr21 . intron 39642248 39642340 . - . Parent=gene241 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene241 chr21 . intron 39642374 39643086 . - . Parent=gene241 chr21 ENCODE exon 39643087 39643140 . - . Parent=gene241 ### chr21 ENCODE gene 39636442 39642884 . - . ID=gene242;Name=AF064861.91-009;name2=HMGN1 chr21 ENCODE exon 39636442 39636955 . - . Parent=gene242 chr21 . intron 39636956 39638941 . - . Parent=gene242 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene242 chr21 . intron 39639071 39641174 . - . Parent=gene242 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene242 chr21 . intron 39641280 39642087 . - . Parent=gene242 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene242 chr21 . intron 39642136 39642217 . - . Parent=gene242 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene242 chr21 . intron 39642248 39642340 . - . Parent=gene242 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene242 chr21 . intron 39642374 39642698 . - . Parent=gene242 chr21 ENCODE exon 39642699 39642884 . - . Parent=gene242 ### chr21 ENCODE gene 39636488 39642849 . - . ID=gene243;Name=AF064861.91-018;name2=HMGN1 chr21 ENCODE exon 39636488 39636955 . - . Parent=gene243 chr21 ENCODE CDS 39636908 39636955 . - . Parent=gene243 chr21 . intron 39636956 39638941 . - . Parent=gene243 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene243 chr21 ENCODE CDS 39638942 39639070 . - . Parent=gene243 chr21 . intron 39639071 39642087 . - . Parent=gene243 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene243 chr21 ENCODE CDS 39642088 39642135 . - . Parent=gene243 chr21 . intron 39642136 39642340 . - . Parent=gene243 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene243 chr21 ENCODE CDS 39642341 39642373 . - . Parent=gene243 chr21 . intron 39642374 39642698 . - . Parent=gene243 chr21 ENCODE CDS 39642699 39642713 . - . Parent=gene243 chr21 ENCODE exon 39642699 39642849 . - . Parent=gene243 ### chr21 ENCODE gene 39636584 39642836 . - . ID=gene244;Name=AF064861.91-015;name2=HMGN1 chr21 ENCODE exon 39636584 39636955 . - . Parent=gene244 chr21 . intron 39636956 39638941 . - . Parent=gene244 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene244 chr21 . intron 39639071 39641174 . - . Parent=gene244 chr21 ENCODE exon 39641175 39641274 . - . Parent=gene244 chr21 . intron 39641275 39642087 . - . Parent=gene244 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene244 chr21 . intron 39642136 39642217 . - . Parent=gene244 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene244 chr21 . intron 39642248 39642340 . - . Parent=gene244 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene244 chr21 . intron 39642374 39642698 . - . Parent=gene244 chr21 ENCODE exon 39642699 39642836 . - . Parent=gene244 ### chr21 ENCODE gene 39636596 39642658 . - . ID=gene245;Name=AF064861.91-012;name2=HMGN1 chr21 ENCODE exon 39636596 39636955 . - . Parent=gene245 chr21 . intron 39636956 39638941 . - . Parent=gene245 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene245 chr21 . intron 39639071 39639625 . - . Parent=gene245 chr21 ENCODE exon 39639626 39639754 . - . Parent=gene245 chr21 . intron 39639755 39642087 . - . Parent=gene245 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene245 chr21 . intron 39642136 39642217 . - . Parent=gene245 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene245 chr21 . intron 39642248 39642340 . - . Parent=gene245 chr21 ENCODE exon 39642341 39642658 . - . Parent=gene245 ### chr21 ENCODE gene 39636600 39642419 . - . ID=gene246;Name=AF064861.91-008;name2=HMGN1 chr21 ENCODE exon 39636600 39636955 . - . Parent=gene246 chr21 . intron 39636956 39638941 . - . Parent=gene246 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene246 chr21 . intron 39639071 39641042 . - . Parent=gene246 chr21 ENCODE exon 39641043 39641088 . - . Parent=gene246 chr21 . intron 39641089 39641174 . - . Parent=gene246 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene246 chr21 . intron 39641280 39642087 . - . Parent=gene246 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene246 chr21 . intron 39642136 39642217 . - . Parent=gene246 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene246 chr21 . intron 39642248 39642340 . - . Parent=gene246 chr21 ENCODE exon 39642341 39642419 . - . Parent=gene246 ### chr21 ENCODE gene 39636675 39643443 . - . ID=gene247;Name=AF064861.91-013;name2=HMGN1 chr21 ENCODE exon 39636675 39636955 . - . Parent=gene247 chr21 ENCODE CDS 39636908 39636955 . - . Parent=gene247 chr21 . intron 39636956 39638941 . - . Parent=gene247 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene247 chr21 ENCODE CDS 39638942 39639070 . - . Parent=gene247 chr21 . intron 39639071 39642087 . - . Parent=gene247 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene247 chr21 ENCODE CDS 39642088 39642135 . - . Parent=gene247 chr21 . intron 39642136 39642217 . - . Parent=gene247 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene247 chr21 ENCODE CDS 39642218 39642247 . - . Parent=gene247 chr21 . intron 39642248 39642340 . - . Parent=gene247 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene247 chr21 ENCODE CDS 39642341 39642373 . - . Parent=gene247 chr21 . intron 39642374 39643255 . - . Parent=gene247 chr21 ENCODE CDS 39643256 39643318 . - . Parent=gene247 chr21 ENCODE exon 39643256 39643443 . - . Parent=gene247 ### chr21 ENCODE gene 39636705 39642393 . - . ID=gene248;Name=AF064861.91-021;name2=HMGN1 chr21 ENCODE exon 39636705 39636955 . - . Parent=gene248 chr21 . intron 39636956 39638941 . - . Parent=gene248 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene248 chr21 . intron 39639071 39639625 . - . Parent=gene248 chr21 ENCODE exon 39639626 39639754 . - . Parent=gene248 chr21 . intron 39639755 39641174 . - . Parent=gene248 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene248 chr21 . intron 39641280 39642087 . - . Parent=gene248 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene248 chr21 . intron 39642136 39642217 . - . Parent=gene248 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene248 chr21 . intron 39642248 39642340 . - . Parent=gene248 chr21 ENCODE exon 39642341 39642393 . - . Parent=gene248 ### chr21 ENCODE gene 39636774 39642135 . - . ID=gene249;Name=AF064861.91-010;name2=HMGN1 chr21 ENCODE exon 39636774 39636955 . - . Parent=gene249 chr21 . intron 39636956 39638941 . - . Parent=gene249 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene249 chr21 . intron 39639071 39641042 . - . Parent=gene249 chr21 ENCODE exon 39641043 39641088 . - . Parent=gene249 chr21 . intron 39641089 39642087 . - . Parent=gene249 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene249 ### chr21 ENCODE gene 39636805 39642850 . - . ID=gene250;Name=AF064861.91-017;name2=HMGN1 chr21 ENCODE exon 39636805 39636955 . - . Parent=gene250 chr21 . intron 39636956 39638941 . - . Parent=gene250 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene250 chr21 . intron 39639071 39639625 . - . Parent=gene250 chr21 ENCODE exon 39639626 39639754 . - . Parent=gene250 chr21 . intron 39639755 39641042 . - . Parent=gene250 chr21 ENCODE exon 39641043 39641088 . - . Parent=gene250 chr21 . intron 39641089 39641174 . - . Parent=gene250 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene250 chr21 . intron 39641280 39642087 . - . Parent=gene250 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene250 chr21 . intron 39642136 39642217 . - . Parent=gene250 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene250 chr21 . intron 39642248 39642340 . - . Parent=gene250 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene250 chr21 . intron 39642374 39642698 . - . Parent=gene250 chr21 ENCODE exon 39642699 39642850 . - . Parent=gene250 ### chr21 ENCODE gene 39636933 39642850 . - . ID=gene251;Name=AF064861.91-007;name2=HMGN1 chr21 ENCODE exon 39636933 39636955 . - . Parent=gene251 chr21 . intron 39636956 39638941 . - . Parent=gene251 chr21 ENCODE exon 39638942 39639070 . - . Parent=gene251 chr21 . intron 39639071 39642087 . - . Parent=gene251 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene251 chr21 . intron 39642136 39642217 . - . Parent=gene251 chr21 ENCODE exon 39642218 39642373 . - . Parent=gene251 chr21 . intron 39642374 39642698 . - . Parent=gene251 chr21 ENCODE exon 39642699 39642850 . - . Parent=gene251 ### chr21 ENCODE gene 39640943 39642863 . - . ID=gene252;Name=AF064861.91-016;name2=HMGN1 chr21 ENCODE exon 39640943 39641088 . - . Parent=gene252 chr21 . intron 39641089 39641174 . - . Parent=gene252 chr21 ENCODE exon 39641175 39641279 . - . Parent=gene252 chr21 . intron 39641280 39642087 . - . Parent=gene252 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene252 chr21 . intron 39642136 39642217 . - . Parent=gene252 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene252 chr21 . intron 39642248 39642340 . - . Parent=gene252 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene252 chr21 . intron 39642374 39642698 . - . Parent=gene252 chr21 ENCODE exon 39642699 39642863 . - . Parent=gene252 ### chr21 ENCODE gene 39641132 39642811 . - . ID=gene253;Name=AF064861.91-019;name2=HMGN1 chr21 ENCODE exon 39641132 39641748 . - . Parent=gene253 chr21 . intron 39641749 39642087 . - . Parent=gene253 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene253 chr21 . intron 39642136 39642217 . - . Parent=gene253 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene253 chr21 . intron 39642248 39642340 . - . Parent=gene253 chr21 ENCODE exon 39642341 39642373 . - . Parent=gene253 chr21 . intron 39642374 39642698 . - . Parent=gene253 chr21 ENCODE exon 39642699 39642811 . - . Parent=gene253 ### chr21 ENCODE gene 39641288 39642416 . - . ID=gene254;Name=AF064861.91-020;name2=HMGN1 chr21 ENCODE exon 39641288 39641748 . - . Parent=gene254 chr21 . intron 39641749 39642087 . - . Parent=gene254 chr21 ENCODE exon 39642088 39642135 . - . Parent=gene254 chr21 . intron 39642136 39642217 . - . Parent=gene254 chr21 ENCODE exon 39642218 39642247 . - . Parent=gene254 chr21 . intron 39642248 39642340 . - . Parent=gene254 chr21 ENCODE exon 39642341 39642416 . - . Parent=gene254 ### chr21 ENCODE gene 39641791 39642816 . - . ID=gene255;Name=AF064861.91-014;name2=HMGN1 chr21 ENCODE exon 39641791 39642373 . - . Parent=gene255 chr21 . intron 39642374 39642698 . - . Parent=gene255 chr21 ENCODE exon 39642699 39642816 . - . Parent=gene255 ### chr21 ENCODE gene 39641861 39642850 . - . ID=gene256;Name=AF064861.91-005;name2=HMGN1 chr21 ENCODE exon 39641861 39642135 . - . Parent=gene256 chr21 . intron 39642136 39642217 . - . Parent=gene256 chr21 ENCODE exon 39642218 39642373 . - . Parent=gene256 chr21 . intron 39642374 39642698 . - . Parent=gene256 chr21 ENCODE exon 39642699 39642850 . - . Parent=gene256 ### chr21 ENCODE gene 39674040 39691685 . + . ID=gene257;Name=AF064861.92-001;name2=WRB chr21 ENCODE exon 39674040 39674282 . + . Parent=gene257 chr21 ENCODE CDS 39674181 39674282 . + . Parent=gene257 chr21 . intron 39674283 39684493 . + . Parent=gene257 chr21 ENCODE exon 39684494 39684659 . + . Parent=gene257 chr21 ENCODE CDS 39684494 39684659 . + . Parent=gene257 chr21 . intron 39684660 39685564 . + . Parent=gene257 chr21 ENCODE exon 39685565 39685632 . + . Parent=gene257 chr21 ENCODE CDS 39685565 39685632 . + . Parent=gene257 chr21 . intron 39685633 39686961 . + . Parent=gene257 chr21 ENCODE exon 39686962 39687076 . + . Parent=gene257 chr21 ENCODE CDS 39686962 39687076 . + . Parent=gene257 chr21 . intron 39687077 39690661 . + . Parent=gene257 chr21 ENCODE CDS 39690662 39690735 . + . Parent=gene257 chr21 ENCODE exon 39690662 39691685 . + . Parent=gene257 ### chr21 ENCODE gene 39674190 39685842 . + . ID=gene258;Name=AF064861.92-005;name2=WRB chr21 ENCODE exon 39674190 39674282 . + . Parent=gene258 chr21 . intron 39674283 39684493 . + . Parent=gene258 chr21 ENCODE exon 39684494 39684659 . + . Parent=gene258 chr21 . intron 39684660 39685564 . + . Parent=gene258 chr21 ENCODE exon 39685565 39685842 . + . Parent=gene258 ### chr21 ENCODE gene 39674210 39685001 . + . ID=gene259;Name=AF064861.92-008;name2=WRB chr21 ENCODE exon 39674210 39674282 . + . Parent=gene259 chr21 . intron 39674283 39684493 . + . Parent=gene259 chr21 ENCODE exon 39684494 39685001 . + . Parent=gene259 ### chr21 ENCODE gene 39674254 39690912 . + . ID=gene260;Name=AF064861.92-002;name2=WRB chr21 ENCODE exon 39674254 39674352 . + . Parent=gene260 chr21 . intron 39674353 39684493 . + . Parent=gene260 chr21 ENCODE exon 39684494 39684659 . + . Parent=gene260 chr21 ENCODE CDS 39684494 39684659 . + . Parent=gene260 chr21 . intron 39684660 39685564 . + . Parent=gene260 chr21 ENCODE exon 39685565 39685632 . + . Parent=gene260 chr21 ENCODE CDS 39685565 39685632 . + . Parent=gene260 chr21 . intron 39685633 39686961 . + . Parent=gene260 chr21 ENCODE exon 39686962 39687076 . + . Parent=gene260 chr21 ENCODE CDS 39686962 39687076 . + . Parent=gene260 chr21 . intron 39687077 39690661 . + . Parent=gene260 chr21 ENCODE CDS 39690662 39690735 . + . Parent=gene260 chr21 ENCODE exon 39690662 39690912 . + . Parent=gene260 ### chr21 ENCODE gene 39674283 39684599 . + . ID=gene261;Name=AF064861.92-003;name2=WRB chr21 ENCODE exon 39674283 39674717 . + . Parent=gene261 chr21 . intron 39674718 39684493 . + . Parent=gene261 chr21 ENCODE exon 39684494 39684599 . + . Parent=gene261 chr21 ENCODE CDS 39684494 39684599 . + . Parent=gene261 ### chr21 ENCODE gene 39679889 39687076 . + . ID=gene262;Name=AF064861.92-009;name2=WRB chr21 ENCODE exon 39679889 39680307 . + . Parent=gene262 chr21 . intron 39680308 39684493 . + . Parent=gene262 chr21 ENCODE exon 39684494 39684659 . + . Parent=gene262 chr21 ENCODE CDS 39684494 39684659 . + . Parent=gene262 chr21 . intron 39684660 39685564 . + . Parent=gene262 chr21 ENCODE exon 39685565 39685632 . + . Parent=gene262 chr21 ENCODE CDS 39685565 39685632 . + . Parent=gene262 chr21 . intron 39685633 39686961 . + . Parent=gene262 chr21 ENCODE exon 39686962 39687076 . + . Parent=gene262 chr21 ENCODE CDS 39686962 39687076 . + . Parent=gene262 ### chr21 ENCODE gene 39681561 39691685 . + . ID=gene263;Name=AF064861.92-004;name2=WRB chr21 ENCODE exon 39681561 39681651 . + . Parent=gene263 chr21 . intron 39681652 39684493 . + . Parent=gene263 chr21 ENCODE exon 39684494 39684659 . + . Parent=gene263 chr21 ENCODE CDS 39684494 39684659 . + . Parent=gene263 chr21 . intron 39684660 39685564 . + . Parent=gene263 chr21 ENCODE exon 39685565 39685632 . + . Parent=gene263 chr21 ENCODE CDS 39685565 39685632 . + . Parent=gene263 chr21 . intron 39685633 39686961 . + . Parent=gene263 chr21 ENCODE exon 39686962 39687076 . + . Parent=gene263 chr21 ENCODE CDS 39686962 39687076 . + . Parent=gene263 chr21 . intron 39687077 39690661 . + . Parent=gene263 chr21 ENCODE CDS 39690662 39690735 . + . Parent=gene263 chr21 ENCODE exon 39690662 39691685 . + . Parent=gene263 ### chr21 ENCODE gene 39681587 39691050 . + . ID=gene264;Name=AF064861.92-006;name2=WRB chr21 ENCODE exon 39681587 39681651 . + . Parent=gene264 chr21 . intron 39681652 39684493 . + . Parent=gene264 chr21 ENCODE exon 39684494 39685272 . + . Parent=gene264 chr21 . intron 39685273 39685564 . + . Parent=gene264 chr21 ENCODE exon 39685565 39685632 . + . Parent=gene264 chr21 . intron 39685633 39686961 . + . Parent=gene264 chr21 ENCODE exon 39686962 39687076 . + . Parent=gene264 chr21 . intron 39687077 39690661 . + . Parent=gene264 chr21 ENCODE exon 39690662 39691050 . + . Parent=gene264 ### chr21 ENCODE gene 39686692 39690900 . + . ID=gene265;Name=AF064861.92-007;name2=WRB chr21 ENCODE exon 39686692 39687076 . + . Parent=gene265 chr21 . intron 39687077 39690661 . + . Parent=gene265 chr21 ENCODE exon 39690662 39690900 . + . Parent=gene265 ### chr21 ENCODE gene 39699640 39739573 . - . ID=gene266;Name=AF121781.16-001;name2=C21orf13 chr21 ENCODE exon 39699640 39700408 . - . Parent=gene266 chr21 ENCODE CDS 39699678 39700408 . - . Parent=gene266 chr21 . intron 39700409 39703774 . - . Parent=gene266 chr21 ENCODE exon 39703775 39703892 . - . Parent=gene266 chr21 ENCODE CDS 39703775 39703892 . - . Parent=gene266 chr21 . intron 39703893 39704059 . - . Parent=gene266 chr21 ENCODE exon 39704060 39704163 . - . Parent=gene266 chr21 ENCODE CDS 39704060 39704163 . - . Parent=gene266 chr21 . intron 39704164 39705513 . - . Parent=gene266 chr21 ENCODE exon 39705514 39705598 . - . Parent=gene266 chr21 ENCODE CDS 39705514 39705598 . - . Parent=gene266 chr21 . intron 39705599 39714501 . - . Parent=gene266 chr21 ENCODE exon 39714502 39714639 . - . Parent=gene266 chr21 ENCODE CDS 39714502 39714639 . - . Parent=gene266 chr21 . intron 39714640 39716771 . - . Parent=gene266 chr21 ENCODE exon 39716772 39717286 . - . Parent=gene266 chr21 ENCODE CDS 39716772 39717286 . - . Parent=gene266 chr21 . intron 39717287 39721967 . - . Parent=gene266 chr21 ENCODE CDS 39721968 39722289 . - . Parent=gene266 chr21 ENCODE exon 39721968 39722299 . - . Parent=gene266 chr21 . intron 39722300 39722926 . - . Parent=gene266 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene266 chr21 . intron 39723008 39729215 . - . Parent=gene266 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene266 chr21 . intron 39729370 39737930 . - . Parent=gene266 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene266 chr21 . intron 39737998 39739520 . - . Parent=gene266 chr21 ENCODE exon 39739521 39739573 . - . Parent=gene266 ### chr21 ENCODE gene 39699656 39739529 . - . ID=gene267;Name=AF121781.16-002;name2=C21orf13 chr21 ENCODE exon 39699656 39700408 . - . Parent=gene267 chr21 ENCODE CDS 39699678 39700408 . - . Parent=gene267 chr21 . intron 39700409 39703774 . - . Parent=gene267 chr21 ENCODE exon 39703775 39703892 . - . Parent=gene267 chr21 ENCODE CDS 39703775 39703892 . - . Parent=gene267 chr21 . intron 39703893 39704059 . - . Parent=gene267 chr21 ENCODE exon 39704060 39704163 . - . Parent=gene267 chr21 ENCODE CDS 39704060 39704163 . - . Parent=gene267 chr21 . intron 39704164 39705513 . - . Parent=gene267 chr21 ENCODE exon 39705514 39705598 . - . Parent=gene267 chr21 ENCODE CDS 39705514 39705598 . - . Parent=gene267 chr21 . intron 39705599 39714501 . - . Parent=gene267 chr21 ENCODE exon 39714502 39714639 . - . Parent=gene267 chr21 ENCODE CDS 39714502 39714639 . - . Parent=gene267 chr21 . intron 39714640 39716771 . - . Parent=gene267 chr21 ENCODE exon 39716772 39717286 . - . Parent=gene267 chr21 ENCODE CDS 39716772 39717286 . - . Parent=gene267 chr21 . intron 39717287 39721967 . - . Parent=gene267 chr21 ENCODE CDS 39721968 39722289 . - . Parent=gene267 chr21 ENCODE exon 39721968 39722299 . - . Parent=gene267 chr21 . intron 39722300 39722926 . - . Parent=gene267 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene267 chr21 . intron 39723008 39729215 . - . Parent=gene267 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene267 chr21 . intron 39729370 39739245 . - . Parent=gene267 chr21 ENCODE exon 39739246 39739529 . - . Parent=gene267 ### chr21 ENCODE gene 39699774 39704943 . - . ID=gene268;Name=AF121781.16-020;name2=C21orf13 chr21 ENCODE exon 39699774 39700408 . - . Parent=gene268 chr21 . intron 39700409 39703774 . - . Parent=gene268 chr21 ENCODE exon 39703775 39703892 . - . Parent=gene268 chr21 . intron 39703893 39704059 . - . Parent=gene268 chr21 ENCODE exon 39704060 39704163 . - . Parent=gene268 chr21 . intron 39704164 39704828 . - . Parent=gene268 chr21 ENCODE exon 39704829 39704943 . - . Parent=gene268 ### chr21 ENCODE gene 39705514 39739548 . - . ID=gene269;Name=AF121781.16-016;name2=C21orf13 chr21 ENCODE exon 39705514 39705598 . - . Parent=gene269 chr21 . intron 39705599 39714501 . - . Parent=gene269 chr21 ENCODE exon 39714502 39714639 . - . Parent=gene269 chr21 . intron 39714640 39716771 . - . Parent=gene269 chr21 ENCODE exon 39716772 39716879 . - . Parent=gene269 chr21 . intron 39716880 39722983 . - . Parent=gene269 chr21 ENCODE exon 39722984 39723007 . - . Parent=gene269 chr21 . intron 39723008 39729215 . - . Parent=gene269 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene269 chr21 . intron 39729370 39729892 . - . Parent=gene269 chr21 ENCODE exon 39729893 39729963 . - . Parent=gene269 chr21 . intron 39729964 39737930 . - . Parent=gene269 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene269 chr21 . intron 39737998 39739520 . - . Parent=gene269 chr21 ENCODE exon 39739521 39739548 . - . Parent=gene269 ### chr21 ENCODE gene 39715860 39732732 . - . ID=gene270;Name=AF121781.16-005;name2=C21orf13 chr21 ENCODE exon 39715860 39717704 . - . Parent=gene270 chr21 . intron 39717705 39721213 . - . Parent=gene270 chr21 ENCODE exon 39721214 39722299 . - . Parent=gene270 chr21 . intron 39722300 39722926 . - . Parent=gene270 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene270 chr21 . intron 39723008 39732479 . - . Parent=gene270 chr21 ENCODE exon 39732480 39732732 . - . Parent=gene270 ### chr21 ENCODE gene 39716208 39739573 . - . ID=gene271;Name=AF121781.16-006;name2=C21orf13 chr21 ENCODE exon 39716208 39717286 . - . Parent=gene271 chr21 . intron 39717287 39721967 . - . Parent=gene271 chr21 ENCODE exon 39721968 39722299 . - . Parent=gene271 chr21 . intron 39722300 39722926 . - . Parent=gene271 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene271 chr21 . intron 39723008 39729215 . - . Parent=gene271 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene271 chr21 . intron 39729370 39739520 . - . Parent=gene271 chr21 ENCODE exon 39739521 39739573 . - . Parent=gene271 ### chr21 ENCODE gene 39716208 39739601 . - . ID=gene272;Name=AF121781.16-003;name2=C21orf13 chr21 ENCODE exon 39716208 39717286 . - . Parent=gene272 chr21 . intron 39717287 39722926 . - . Parent=gene272 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene272 chr21 . intron 39723008 39737930 . - . Parent=gene272 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene272 chr21 . intron 39737998 39739520 . - . Parent=gene272 chr21 ENCODE exon 39739521 39739601 . - . Parent=gene272 ### chr21 ENCODE gene 39716784 39739557 . - . ID=gene273;Name=AF121781.16-021;name2=C21orf13 chr21 ENCODE exon 39716784 39717286 . - . Parent=gene273 chr21 . intron 39717287 39722926 . - . Parent=gene273 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene273 chr21 . intron 39723008 39729215 . - . Parent=gene273 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene273 chr21 . intron 39729370 39739520 . - . Parent=gene273 chr21 ENCODE exon 39739521 39739557 . - . Parent=gene273 ### chr21 ENCODE gene 39717036 39739571 . - . ID=gene274;Name=AF121781.16-007;name2=C21orf13 chr21 ENCODE exon 39717036 39717286 . - . Parent=gene274 chr21 . intron 39717287 39721554 . - . Parent=gene274 chr21 ENCODE exon 39721555 39721701 . - . Parent=gene274 chr21 . intron 39721702 39722926 . - . Parent=gene274 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene274 chr21 . intron 39723008 39729215 . - . Parent=gene274 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene274 chr21 . intron 39729370 39737930 . - . Parent=gene274 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene274 chr21 . intron 39737998 39738439 . - . Parent=gene274 chr21 ENCODE exon 39738440 39738541 . - . Parent=gene274 chr21 . intron 39738542 39739520 . - . Parent=gene274 chr21 ENCODE exon 39739521 39739571 . - . Parent=gene274 ### chr21 ENCODE gene 39717041 39739556 . - . ID=gene275;Name=AF121781.16-019;name2=C21orf13 chr21 ENCODE exon 39717041 39717286 . - . Parent=gene275 chr21 ENCODE CDS 39717041 39717286 . - . Parent=gene275 chr21 . intron 39717287 39721967 . - . Parent=gene275 chr21 ENCODE CDS 39721968 39722289 . - . Parent=gene275 chr21 ENCODE exon 39721968 39722299 . - . Parent=gene275 chr21 . intron 39722300 39722926 . - . Parent=gene275 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene275 chr21 . intron 39723008 39729215 . - . Parent=gene275 chr21 ENCODE exon 39729216 39729338 . - . Parent=gene275 chr21 . intron 39729339 39737930 . - . Parent=gene275 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene275 chr21 . intron 39737998 39739520 . - . Parent=gene275 chr21 ENCODE exon 39739521 39739556 . - . Parent=gene275 ### chr21 ENCODE gene 39717216 39739529 . - . ID=gene276;Name=AF121781.16-012;name2=C21orf13 chr21 ENCODE exon 39717216 39717286 . - . Parent=gene276 chr21 . intron 39717287 39722926 . - . Parent=gene276 chr21 ENCODE exon 39722927 39723190 . - . Parent=gene276 chr21 . intron 39723191 39729215 . - . Parent=gene276 chr21 ENCODE exon 39729216 39729338 . - . Parent=gene276 chr21 . intron 39729339 39737930 . - . Parent=gene276 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene276 chr21 . intron 39737998 39739245 . - . Parent=gene276 chr21 ENCODE exon 39739246 39739529 . - . Parent=gene276 ### chr21 ENCODE gene 39721967 39739574 . - . ID=gene277;Name=AF121781.16-014;name2=C21orf13 chr21 ENCODE CDS 39721967 39722289 . - . Parent=gene277 chr21 ENCODE exon 39721967 39722299 . - . Parent=gene277 chr21 . intron 39722300 39722926 . - . Parent=gene277 chr21 ENCODE exon 39722927 39723190 . - . Parent=gene277 chr21 . intron 39723191 39729215 . - . Parent=gene277 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene277 chr21 . intron 39729370 39739520 . - . Parent=gene277 chr21 ENCODE exon 39739521 39739574 . - . Parent=gene277 ### chr21 ENCODE gene 39722004 39739599 . - . ID=gene278;Name=AF121781.16-018;name2=C21orf13 chr21 ENCODE CDS 39722004 39722289 . - . Parent=gene278 chr21 ENCODE exon 39722004 39722299 . - . Parent=gene278 chr21 . intron 39722300 39722926 . - . Parent=gene278 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene278 chr21 . intron 39723008 39737930 . - . Parent=gene278 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene278 chr21 . intron 39737998 39739520 . - . Parent=gene278 chr21 ENCODE exon 39739521 39739599 . - . Parent=gene278 ### chr21 ENCODE gene 39722006 39739515 . - . ID=gene279;Name=AF121781.16-009;name2=C21orf13 chr21 ENCODE CDS 39722006 39722289 . - . Parent=gene279 chr21 ENCODE exon 39722006 39722299 . - . Parent=gene279 chr21 . intron 39722300 39722926 . - . Parent=gene279 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene279 chr21 . intron 39723008 39732479 . - . Parent=gene279 chr21 ENCODE exon 39732480 39732514 . - . Parent=gene279 chr21 . intron 39732515 39737930 . - . Parent=gene279 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene279 chr21 . intron 39737998 39738439 . - . Parent=gene279 chr21 ENCODE exon 39738440 39738541 . - . Parent=gene279 chr21 . intron 39738542 39739245 . - . Parent=gene279 chr21 ENCODE exon 39739246 39739515 . - . Parent=gene279 ### chr21 ENCODE gene 39722011 39739529 . - . ID=gene280;Name=AF121781.16-013;name2=C21orf13 chr21 ENCODE CDS 39722011 39722289 . - . Parent=gene280 chr21 ENCODE exon 39722011 39722299 . - . Parent=gene280 chr21 . intron 39722300 39722926 . - . Parent=gene280 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene280 chr21 . intron 39723008 39729215 . - . Parent=gene280 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene280 chr21 . intron 39729370 39739245 . - . Parent=gene280 chr21 ENCODE exon 39739246 39739529 . - . Parent=gene280 ### chr21 ENCODE gene 39722081 39739565 . - . ID=gene281;Name=AF121781.16-010;name2=C21orf13 chr21 ENCODE CDS 39722081 39722289 . - . Parent=gene281 chr21 ENCODE exon 39722081 39722299 . - . Parent=gene281 chr21 . intron 39722300 39722926 . - . Parent=gene281 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene281 chr21 . intron 39723008 39729215 . - . Parent=gene281 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene281 chr21 . intron 39729370 39733429 . - . Parent=gene281 chr21 ENCODE exon 39733430 39733569 . - . Parent=gene281 chr21 . intron 39733570 39737930 . - . Parent=gene281 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene281 chr21 . intron 39737998 39739520 . - . Parent=gene281 chr21 ENCODE exon 39739521 39739565 . - . Parent=gene281 ### chr21 ENCODE gene 39722101 39739565 . - . ID=gene282;Name=AF121781.16-015;name2=C21orf13 chr21 ENCODE CDS 39722101 39722289 . - . Parent=gene282 chr21 ENCODE exon 39722101 39722299 . - . Parent=gene282 chr21 . intron 39722300 39722926 . - . Parent=gene282 chr21 ENCODE exon 39722927 39723007 . - . Parent=gene282 chr21 . intron 39723008 39729215 . - . Parent=gene282 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene282 chr21 . intron 39729370 39729892 . - . Parent=gene282 chr21 ENCODE exon 39729893 39729963 . - . Parent=gene282 chr21 . intron 39729964 39733429 . - . Parent=gene282 chr21 ENCODE exon 39733430 39733569 . - . Parent=gene282 chr21 . intron 39733570 39739520 . - . Parent=gene282 chr21 ENCODE exon 39739521 39739565 . - . Parent=gene282 ### chr21 ENCODE gene 39722198 39739576 . - . ID=gene283;Name=AF121781.16-017;name2=C21orf13 chr21 ENCODE CDS 39722198 39722289 . - . Parent=gene283 chr21 ENCODE exon 39722198 39722299 . - . Parent=gene283 chr21 . intron 39722300 39722926 . - . Parent=gene283 chr21 ENCODE exon 39722927 39723190 . - . Parent=gene283 chr21 . intron 39723191 39729215 . - . Parent=gene283 chr21 ENCODE exon 39729216 39729338 . - . Parent=gene283 chr21 . intron 39729339 39737930 . - . Parent=gene283 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene283 chr21 . intron 39737998 39739520 . - . Parent=gene283 chr21 ENCODE exon 39739521 39739576 . - . Parent=gene283 ### chr21 ENCODE gene 39722258 39739548 . - . ID=gene284;Name=AF121781.16-008;name2=C21orf13 chr21 ENCODE CDS 39722258 39722289 . - . Parent=gene284 chr21 ENCODE exon 39722258 39722299 . - . Parent=gene284 chr21 . intron 39722300 39722926 . - . Parent=gene284 chr21 ENCODE exon 39722927 39723190 . - . Parent=gene284 chr21 . intron 39723191 39729215 . - . Parent=gene284 chr21 ENCODE exon 39729216 39729369 . - . Parent=gene284 chr21 . intron 39729370 39737930 . - . Parent=gene284 chr21 ENCODE exon 39737931 39737997 . - . Parent=gene284 chr21 . intron 39737998 39738439 . - . Parent=gene284 chr21 ENCODE exon 39738440 39738541 . - . Parent=gene284 chr21 . intron 39738542 39739520 . - . Parent=gene284 chr21 ENCODE exon 39739521 39739548 . - . Parent=gene284 ### chr21 ENCODE gene 39737255 39739549 . - . ID=gene285;Name=AF121781.16-011;name2=C21orf13 chr21 ENCODE exon 39737255 39737997 . - . Parent=gene285 chr21 . intron 39737998 39739520 . - . Parent=gene285 chr21 ENCODE exon 39739521 39739549 . - . Parent=gene285 ### chr21 ENCODE gene 39739651 39739725 . + . ID=gene286;Name=AF121897.3-002;name2=SH3BGR chr21 ENCODE exon 39739651 39739725 . + . Parent=gene286 ### chr21 ENCODE gene 39739651 39739725 . + . ID=gene287;Name=AF121897.3-003;name2=SH3BGR chr21 ENCODE exon 39739651 39739725 . + . Parent=gene287 ### chr21 ENCODE gene 39739661 39739688 . + . ID=gene288;Name=AF121897.3-007;name2=SH3BGR chr21 ENCODE exon 39739661 39739688 . + . Parent=gene288 ### chr21 ENCODE gene 39739671 39739877 . + . ID=gene289;Name=AF121897.3-004;name2=SH3BGR chr21 ENCODE exon 39739671 39739877 . + . Parent=gene289 ### chr21 ENCODE gene 39739727 39739894 . + . ID=gene290;Name=AF121897.3-005;name2=SH3BGR chr21 ENCODE exon 39739727 39739894 . + . Parent=gene290 ### chr21 ENCODE gene 39739738 39739877 . + . ID=gene291;Name=AF121897.3-006;name2=SH3BGR chr21 ENCODE exon 39739738 39739877 . + . Parent=gene291 ### genometools-1.5.1/testdata/gt_extractfeat_mappings.fas000066400000000000000000000006511211610345200232540ustar00rootroot00000000000000>foo AAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC >bar GCTGATCGCTGACCGGCCGCGCGTTTTTTTTTTTTTTTTTTTTTTTTTCGATCGCGCATCGGGCATTTTTTTTTTTTACCGACCCCCCCCCCCAAAAAAA >baz AATAAAAAAACCCCCCCCCCCCCCCCCCCCCCCAAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCAAAAAAAAAACCCCCTTTTTTTTTTTTCCCCCANN >quux TTTTTTTTTTTTTTTTTTTTTTCCCCCCCCCCCCCCGGGGGGGGGGGGGGGGGGGGGGAAAAAAAATTTTTTTTTTTTTTTTTTTNNNNGGCTGGGGGGG genometools-1.5.1/testdata/gt_extractfeat_mappings.gff3000066400000000000000000000003441211610345200233270ustar00rootroot00000000000000##gff-version 3 ##sequence-region bar 1 100 ##sequence-region baz 1 100 ##sequence-region foo 1 100 ##sequence-region quux 1 100 bar . gene 1 10 . . . . baz . gene 1 10 . . . . foo . gene 1 10 . . . . quux . gene 1 10 . . . . genometools-1.5.1/testdata/gt_extractfeat_mappings.md5.gff3000066400000000000000000000010241211610345200240070ustar00rootroot00000000000000##gff-version 3 ##sequence-region md5:9448bcca4c03ff54d1384378051e2a89:bar 1 100 ##sequence-region md5:99d681c067dc0429579ac0f192c2d8c8:quux 1 100 ##sequence-region md5:a39f549be076d51150511e802807cf51:foo 1 100 ##sequence-region md5:acff2b1574e4418ecdd8b31111c7bb7a:baz 1 100 md5:9448bcca4c03ff54d1384378051e2a89:bar . gene 1 10 . . . . md5:99d681c067dc0429579ac0f192c2d8c8:quux . gene 1 10 . . . . md5:a39f549be076d51150511e802807cf51:foo . gene 1 10 . . . . md5:acff2b1574e4418ecdd8b31111c7bb7a:baz . gene 1 10 . . . . genometools-1.5.1/testdata/gt_extractfeat_mappings_md5.fas000066400000000000000000000001141211610345200240130ustar00rootroot00000000000000>gene_1 GCTGATCGCT >gene_2 TTTTTTTTTT >gene_3 AAAAAAAAAA >gene_4 AATAAAAAAA genometools-1.5.1/testdata/gt_extractfeat_mappings_ref.fas000066400000000000000000000001141211610345200241020ustar00rootroot00000000000000>gene_1 GCTGATCGCT >gene_2 AATAAAAAAA >gene_3 AAAAAAAAAA >gene_4 TTTTTTTTTT genometools-1.5.1/testdata/gt_extractfeat_mappings_ref.md5.fas000066400000000000000000000001141211610345200245660ustar00rootroot00000000000000>gene_1 GCTGATCGCT >gene_2 TTTTTTTTTT >gene_3 AAAAAAAAAA >gene_4 AATAAAAAAA genometools-1.5.1/testdata/gt_extractfeat_mappings_sep1.fas000066400000000000000000000003251211610345200242020ustar00rootroot00000000000000>baz AATAAAAAAACCCCCCCCCCCCCCCCCCCCCCCAAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCAAAAAAAAAACCCCCTTTTTTTTTTTTCCCCCANN >quux TTTTTTTTTTTTTTTTTTTTTTCCCCCCCCCCCCCCGGGGGGGGGGGGGGGGGGGGGGAAAAAAAATTTTTTTTTTTTTTTTTTTNNNNGGCTGGGGGGG genometools-1.5.1/testdata/gt_extractfeat_mappings_sep2.fas000066400000000000000000000003241211610345200242020ustar00rootroot00000000000000>foo AAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC >bar GCTGATCGCTGACCGGCCGCGCGTTTTTTTTTTTTTTTTTTTTTTTTTCGATCGCGCATCGGGCATTTTTTTTTTTTACCGACCCCCCCCCCCAAAAAAA genometools-1.5.1/testdata/gt_extractfeat_mappings_seprm.lua000066400000000000000000000002041211610345200244640ustar00rootroot00000000000000function mapping(sequence_region) return os.getenv("GT_TESTDATA").."gt_extractfeat_mappings_seprm_"..sequence_region..".fas" end genometools-1.5.1/testdata/gt_extractfeat_mappings_seprm_bar.fas000066400000000000000000000001521211610345200253020ustar00rootroot00000000000000>bar GCTGATCGCTGACCGGCCGCGCGTTTTTTTTTTTTTTTTTTTTTTTTTCGATCGCGCATCGGGCATTTTTTTTTTTTACCGACCCCCCCCCCCAAAAAAA genometools-1.5.1/testdata/gt_extractfeat_mappings_seprm_baz.fas000066400000000000000000000001521211610345200253120ustar00rootroot00000000000000>baz AATAAAAAAACCCCCCCCCCCCCCCCCCCCCCCAAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCAAAAAAAAAACCCCCTTTTTTTTTTTTCCCCCANN genometools-1.5.1/testdata/gt_extractfeat_mappings_seprm_foo.fas000066400000000000000000000001521211610345200253210ustar00rootroot00000000000000>foo AAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC genometools-1.5.1/testdata/gt_extractfeat_mappings_seprm_quux.fas000066400000000000000000000001531211610345200255410ustar00rootroot00000000000000>quux TTTTTTTTTTTTTTTTTTTTTTCCCCCCCCCCCCCCGGGGGGGGGGGGGGGGGGGGGGAAAAAAAATTTTTTTTTTTTTTTTTTTNNNNGGCTGGGGGGG genometools-1.5.1/testdata/gt_extractfeat_seqid.fas000066400000000000000000000005521211610345200225430ustar00rootroot00000000000000>CDS_1 (joined) [seqid md5:063b1024d68e26716b7f38caf958316f] GACACAGGACTTCGGGATCTTGGGCAGCTGGAACAAGATCTTGTTTTTGGAGATGCAGGTGCCAAGGACGTTATCAACTTTCTGAGGACGAATCAGGACACAAACCCGGAAAACAAATTACGGCTTTTGATGATTTATGCAACAGTGTACCCCGAGAAGTTTGAAGGTGACAAGGGTGTGAAGCTAATGCAGCTTGCTAGATTATCACCTGTGGATATGAAGGTTATAAGCAACATGCAATTGATAGCTGGATCCCCAGAAAACAAAGCTAAGTCCGGTAGTTTCTCCCTCAAATTTGAC genometools-1.5.1/testdata/gt_extractfeat_seqid_target.fas000066400000000000000000000006341211610345200241120ustar00rootroot00000000000000>CDS_1 (joined) [seqid md5:063b1024d68e26716b7f38caf958316f] [target IDs md5:14c0ff5e76ef8ac009fdcc923f701356] GACACAGGACTTCGGGATCTTGGGCAGCTGGAACAAGATCTTGTTTTTGGAGATGCAGGTGCCAAGGACGTTATCAACTTTCTGAGGACGAATCAGGACACAAACCCGGAAAACAAATTACGGCTTTTGATGATTTATGCAACAGTGTACCCCGAGAAGTTTGAAGGTGACAAGGGTGTGAAGCTAATGCAGCTTGCTAGATTATCACCTGTGGATATGAAGGTTATAAGCAACATGCAATTGATAGCTGGATCCCCAGAAAACAAAGCTAAGTCCGGTAGTTTCTCCCTCAAATTTGAC genometools-1.5.1/testdata/gt_extractfeat_seqid_target.gff3000066400000000000000000000043071211610345200241670ustar00rootroot00000000000000##gff-version 3 ##sequence-region md5:063b1024d68e26716b7f38caf958316f 1 106973 md5:063b1024d68e26716b7f38caf958316f gth gene 1074 1540 . + . ID=gene1 md5:063b1024d68e26716b7f38caf958316f gth mRNA 1074 1540 . + . ID=mRNA1;Parent=gene1;Target=md5:14c0ff5e76ef8ac009fdcc923f701356 1 303 + md5:063b1024d68e26716b7f38caf958316f gth exon 1074 1171 1 + . Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f gth CDS 1076 1171 . + 0 ID=CDS1;Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f md5:063b1024d68e26716b7f38caf958316f five_prime_cis_splice_site 1172 1173 0.866 + . Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f md5:063b1024d68e26716b7f38caf958316f three_prime_cis_splice_site 1257 1258 0.994 + . Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f gth exon 1259 1354 1 + . Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f gth CDS 1259 1354 . + 0 ID=CDS1;Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f md5:063b1024d68e26716b7f38caf958316f five_prime_cis_splice_site 1355 1356 5e-05 + . Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f md5:063b1024d68e26716b7f38caf958316f three_prime_cis_splice_site 1430 1431 0.745 + . Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f gth CDS 1432 1539 . + 0 ID=CDS1;Parent=mRNA1 md5:063b1024d68e26716b7f38caf958316f gth exon 1432 1540 1 + . Parent=mRNA1 ### md5:063b1024d68e26716b7f38caf958316f gth gene 2779 3506 . + . ID=gene2 md5:063b1024d68e26716b7f38caf958316f gth mRNA 2779 3506 . + . ID=mRNA2;Parent=gene2;Target=md5:527995da853a37f9c47e616ce237d523 1 337 +,md5:a9dcd316817972a94c0af505715b10bc 1 426 + md5:063b1024d68e26716b7f38caf958316f gth exon 2779 2801 0.696 + . Parent=mRNA2 md5:063b1024d68e26716b7f38caf958316f md5:063b1024d68e26716b7f38caf958316f five_prime_cis_splice_site 2802 2803 0.459 + . Parent=mRNA2 md5:063b1024d68e26716b7f38caf958316f md5:063b1024d68e26716b7f38caf958316f three_prime_cis_splice_site 3041 3042 1e-06 + . Parent=mRNA2 md5:063b1024d68e26716b7f38caf958316f gth exon 3043 3506 0.974 + . Parent=mRNA2 md5:063b1024d68e26716b7f38caf958316f gth mRNA 3025 3506 . + . ID=mRNA3;Parent=gene2;Target=md5:f1a0d426e93585553b21aa1a47aa2970 1 327 +,md5:a9dcd316817972a94c0af505715b10bc 1 426 + md5:063b1024d68e26716b7f38caf958316f gth exon 3025 3506 0.974 + . Parent=mRNA3 ### genometools-1.5.1/testdata/gt_extractfeat_succ_1.fas000066400000000000000000000001521211610345200226070ustar00rootroot00000000000000>foo AAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC genometools-1.5.1/testdata/gt_extractfeat_succ_1.fas.gz000066400000000000000000000000711211610345200232260ustar00rootroot00000000000000^Egt_extractfeat_succ_1.fasKrg.jgenometools-1.5.1/testdata/gt_extractfeat_succ_1.gff3000066400000000000000000000001061211610345200226620ustar00rootroot00000000000000##gff-version 3 ##sequence-region foo 1 100 foo . gene 1 10 . . . . genometools-1.5.1/testdata/gt_extractfeat_succ_1.out000066400000000000000000000000231211610345200226420ustar00rootroot00000000000000>gene_1 AAAAAAAAAA genometools-1.5.1/testdata/gt_extractfeat_succ_2.fas000066400000000000000000000001521211610345200226100ustar00rootroot00000000000000>foo AAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGGGGGGGGGGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC genometools-1.5.1/testdata/gt_extractfeat_succ_2.gff3000066400000000000000000000002721211610345200226670ustar00rootroot00000000000000##gff-version 3 ##sequence-region foo 1 100 foo . gene 1 100 . . . ID=gene1 foo . exon 1 10 . . . Parent=gene1 foo . exon 41 50 . . . Parent=gene1 foo . exon 91 100 . . . Parent=gene1 genometools-1.5.1/testdata/gt_extractfeat_succ_2.out1000066400000000000000000000001551211610345200227320ustar00rootroot00000000000000>gene_1 AAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGGGGGGGGGGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC genometools-1.5.1/testdata/gt_extractfeat_succ_2.out2000066400000000000000000000000711211610345200227300ustar00rootroot00000000000000>exon_1 AAAAAAAAAA >exon_2 GGGGGGGGGG >exon_3 CCCCCCCCCC genometools-1.5.1/testdata/gt_extractfeat_succ_2.out3000066400000000000000000000000601211610345200227270ustar00rootroot00000000000000>exon_1 (joined) AAAAAAAAAAGGGGGGGGGGCCCCCCCCCC genometools-1.5.1/testdata/gt_extractfeat_succ_3.fas000066400000000000000000000001521211610345200226110ustar00rootroot00000000000000>foo AAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGGGGGGGGGGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC genometools-1.5.1/testdata/gt_extractfeat_succ_3.gff3000066400000000000000000000004761211610345200226760ustar00rootroot00000000000000##gff-version 3 ##sequence-region foo 1 100 foo . gene 1 100 . . . ID=gene1 foo . mRNA 1 50 . . . ID=mRNA1;Parent=gene1 foo . exon 1 10 . . . Parent=mRNA1 foo . exon 41 50 . . . Parent=mRNA1 foo . mRNA 41 100 . . . ID=mRNA2;Parent=gene1 foo . exon 41 50 . . . Parent=mRNA2 foo . exon 91 100 . . . Parent=mRNA2 ### genometools-1.5.1/testdata/gt_extractfeat_succ_3.out000066400000000000000000000001141211610345200226450ustar00rootroot00000000000000>exon_1 (joined) AAAAAAAAAAGGGGGGGGGG >exon_2 (joined) GGGGGGGGGGCCCCCCCCCC genometools-1.5.1/testdata/gt_extractfeat_target.fas000066400000000000000000000034721211610345200227300ustar00rootroot00000000000000>mRNA_1 (joined) [target IDs md5:14c0ff5e76ef8ac009fdcc923f701356] GAGACACAGGACTTCGGGATCTTGGGCAGCTGGAACAAGATCTTGTTTTTGGAGATGCAGGTGCCAAGGACGTTATCAACTTTCTGAGGACGAATCAGGTGAATAAGTTTGAAACATGACAAAAAAAACTTGATAGCCGCATTGATTTAGTGTTTGAAATGACACATCATGTATTTAAAATGCAGGACACAAACCCGGAAAACAAATTACGGCTTTTGATGATTTATGCAACAGTGTACCCCGAGAAGTTTGAAGGTGACAAGGGTGTGAAGCTAATGCAGGTAGCTTTTCGTGTGATAGAGACCCCTTGTAATGCATGGAACAACTTGCTAAACAAATACTGCATTTATGTTATCAGCTTGCTAGATTATCACCTGTGGATATGAAGGTTATAAGCAACATGCAATTGATAGCTGGATCCCCAGAAAACAAAGCTAAGTCCGGTAGTTTCTCCCTCAAATTTGACG >mRNA_2 (joined) [target IDs md5:527995da853a37f9c47e616ce237d523,md5:a9dcd316817972a94c0af505715b10bc] CCTTATTTTTTTTCTTCATATGGGTCATTTGGTTCATACTCTATATACTTTTGTGTCACAATTTAACTCTATATATTAGTCTCTACGTCGACTTAATGGAAAAAGTGAAGATGATAGCTTCTAATTTGCTTTATTTATTTATAAACTTTTGGCTATTATTGATTCTTCTGATGTAAGTTAATTTTAAGTTTCGAGTTATATAGCAATCGTTAAGTTGGCAAAAGATTTTAACCCTCGAGACTTTTTGGACAACAAAACGCAAATATGATAGAGCGGAAGCTCATTAAAAAATCGTTTTAGAGCAATGTCACCAAACAAAGAAAATCCATTTCCCAATAAAAAAACAACGAATATAAAATTCGATTATATATTTACCATCAACCACTTAACAGACCACAAAATGAAGGCTGTTTACGGATTCAACACAGATTAACGGGTATGTATGTATGATCTAGGCAACGGTGGTGGTGGGACCAGGATAAGCAGGAAGAGTCATGATCCGCTTGTCTACAACTGGACCTCCCACAGTGAAATGGTACAGACTCTGAAAGCTAGAGTCATTAATCCCCAGAACCTCGTGCACTGGATCATCGAAATAGCACCCAATCCCGGTTGCTGAGATCCCCATTGCGTGTGCTTCCAGGTACAAAACTTGTCCAACAACACCCGTCTCCCAGAACAGTCGAGGGTACATCCATGAGCCCTTCTCCCGCAGTGCTGGTTCAAACGGACAACAAAACGCAAATATGATAGAGCGGAAGCTCATTAAAAAATCGTTTTAGAGCAATGTCACCAAACAAAGAAAATCCATTTCCCAATAAAAAAACAACGAATATAAAATTCGATTATATATTTACCATCAACCACTTAACAGACCACAAAATGAAGGCTGTTTACGGATTCAACACAGATTAACGGGTATGTATGTATGATCTAGGCAACGGTGGTGGTGGGACCAGGATAAGCAGGAAGAGTCATGATCCGCTTGTCTACAACTGGACCTCCCACAGTGAAATGGTACAGACTCTGAAAGCTAGAGTCATTAATCCCCAGAACCTCGTGCACTGGATCATCGAAATAGCACCCAATCCCGGTTGCTGAGATCCCCATTGCGTGTGCTTCCAGGTACAAAACTTGTCCAACAACACCCGTCTCCCAGAACAGTCGAGGGTACATCCATGAGCCCTTCTCCCGCAGTGCTGGTTCAAAC genometools-1.5.1/testdata/gt_fingerprint_extract.out000066400000000000000000000001521211610345200231570ustar00rootroot00000000000000>SQ;8720010 TTTTTTTTTTTTTTTTTCCTGACAAAACCCCAAGACTCAATTTAATCAATCCTCAAATTTACATGATACCAACGTAATGGGAGCTTAAAAATA genometools-1.5.1/testdata/gt_gff3_addintrons_overlapping_exons.gff3000066400000000000000000000353201211610345200260150ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr6_ssto_hap7 1832076 30559309 chr6_ssto_hap7 . gene 1832076 30559309 . + . ID=ABCF1;Name=ABCF1 chr6_ssto_hap7 . mRNA 1832076 30559309 . + . ID=NM_001025091;Parent=ABCF1;Name=NM_001025091 chr6_ssto_hap7 . mRNA 1832076 30559309 . + . ID=NM_001090;Parent=ABCF1;Name=NM_001090 chr6_ssto_hap7 . exon 1832076 1832243 . + . ID=exon1;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1832805 1832972 . + . ID=exon2;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1838094 1838140 . + . ID=exon3;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1838503 1838598 . + . ID=exon4;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1838761 1838887 . + . ID=exon5;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1838825 1838871 . + . ID=exon6;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1839033 1839070 . + . ID=exon7;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1839155 1839262 . + . ID=exon8;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1839234 1839329 . + . ID=exon9;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1839492 1839618 . + . ID=exon10;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1839764 1839801 . + . ID=exon11;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1839886 1839993 . + . ID=exon12;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1840616 1840690 . + . ID=exon13;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1841090 1841203 . + . ID=exon14;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1841348 1841422 . + . ID=exon15;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1841822 1841935 . + . ID=exon16;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1843079 1843192 . + . ID=exon17;Parent=NM_001025091 chr6_ssto_hap7 . exon 1843751 1843873 . + . ID=exon18;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1843812 1843925 . + . ID=exon19;Parent=NM_001025091 chr6_ssto_hap7 . exon 1844293 1844393 . + . ID=exon20;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1844484 1844606 . + . ID=exon21;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1844490 1844575 . + . ID=exon22;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1844877 1845016 . + . ID=exon23;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1845026 1845126 . + . ID=exon24;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1845103 1845251 . + . ID=exon25;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1845223 1845308 . + . ID=exon26;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1845610 1845749 . + . ID=exon27;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1845836 1845984 . + . ID=exon28;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1845945 1846028 . + . ID=exon29;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1846243 1846367 . + . ID=exon30;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1846564 1846676 . + . ID=exon31;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1846678 1846761 . + . ID=exon32;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1846819 1846990 . + . ID=exon33;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1846976 1847100 . + . ID=exon34;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1847159 1847233 . + . ID=exon35;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1847297 1847409 . + . ID=exon36;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1847326 1847396 . + . ID=exon37;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1847552 1847723 . + . ID=exon38;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1847892 1847966 . + . ID=exon39;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1848059 1848129 . + . ID=exon40;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1850366 1850398 . + . ID=exon41;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1850484 1850652 . + . ID=exon42;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1850827 1850891 . + . ID=exon43;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1850984 1851056 . + . ID=exon44;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1851099 1851131 . + . ID=exon45;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1851213 1852211 . + . ID=exon46;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1851217 1851385 . + . ID=exon47;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1851560 1851624 . + . ID=exon48;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1851717 1851789 . + . ID=exon49;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1851946 1852944 . + . ID=exon50;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1871448 1871615 . + . ID=exon51;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1877467 1877513 . + . ID=exon52;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1877876 1877971 . + . ID=exon53;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1878134 1878260 . + . ID=exon54;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1878406 1878443 . + . ID=exon55;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1878528 1878635 . + . ID=exon56;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1879990 1880064 . + . ID=exon57;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1880464 1880577 . + . ID=exon58;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1882453 1882566 . + . ID=exon59;Parent=NM_001025091 chr6_ssto_hap7 . exon 1883125 1883247 . + . ID=exon60;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1883667 1883767 . + . ID=exon61;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1883864 1883949 . + . ID=exon62;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1884251 1884390 . + . ID=exon63;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1884477 1884625 . + . ID=exon64;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1885319 1885402 . + . ID=exon65;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1885617 1885741 . + . ID=exon66;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1885938 1886050 . + . ID=exon67;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1886193 1886364 . + . ID=exon68;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1886533 1886607 . + . ID=exon69;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1886700 1886770 . + . ID=exon70;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1887242 1887409 . + . ID=exon71;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1889741 1889773 . + . ID=exon72;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1889859 1890027 . + . ID=exon73;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1890202 1890266 . + . ID=exon74;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1890359 1890431 . + . ID=exon75;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1890588 1891586 . + . ID=exon76;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1893258 1893304 . + . ID=exon77;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1893667 1893762 . + . ID=exon78;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1893925 1894051 . + . ID=exon79;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1894197 1894234 . + . ID=exon80;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1894319 1894426 . + . ID=exon81;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1895780 1895854 . + . ID=exon82;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1896255 1896368 . + . ID=exon83;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1898243 1898356 . + . ID=exon84;Parent=NM_001025091 chr6_ssto_hap7 . exon 1898915 1899037 . + . ID=exon85;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1899457 1899557 . + . ID=exon86;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1899654 1899739 . + . ID=exon87;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1900041 1900180 . + . ID=exon88;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1900267 1900415 . + . ID=exon89;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1901109 1901192 . + . ID=exon90;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1901407 1901531 . + . ID=exon91;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1901728 1901840 . + . ID=exon92;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1901983 1902154 . + . ID=exon93;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1902323 1902397 . + . ID=exon94;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1902490 1902560 . + . ID=exon95;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1905537 1905569 . + . ID=exon96;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1905655 1905823 . + . ID=exon97;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1905998 1906062 . + . ID=exon98;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1906155 1906227 . + . ID=exon99;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1906384 1907381 . + . ID=exon100;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1921024 1921191 . + . ID=exon101;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1927040 1927086 . + . ID=exon102;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1927449 1927544 . + . ID=exon103;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1927707 1927833 . + . ID=exon104;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1927979 1928016 . + . ID=exon105;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1928101 1928208 . + . ID=exon106;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1929562 1929636 . + . ID=exon107;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1930037 1930150 . + . ID=exon108;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1932025 1932138 . + . ID=exon109;Parent=NM_001025091 chr6_ssto_hap7 . exon 1932697 1932819 . + . ID=exon110;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1933239 1933339 . + . ID=exon111;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1933436 1933521 . + . ID=exon112;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1933823 1933962 . + . ID=exon113;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1934049 1934197 . + . ID=exon114;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1934891 1934974 . + . ID=exon115;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1935189 1935313 . + . ID=exon116;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1935510 1935622 . + . ID=exon117;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1935765 1935936 . + . ID=exon118;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1936105 1936179 . + . ID=exon119;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1936272 1936342 . + . ID=exon120;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1939319 1939351 . + . ID=exon121;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1939437 1939605 . + . ID=exon122;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1939780 1939844 . + . ID=exon123;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1939937 1940009 . + . ID=exon124;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 1940166 1941163 . + . ID=exon125;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2051221 2051388 . + . ID=exon126;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2057238 2057284 . + . ID=exon127;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2057647 2057742 . + . ID=exon128;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2057905 2058031 . + . ID=exon129;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2058177 2058214 . + . ID=exon130;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2058299 2058406 . + . ID=exon131;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2059761 2059835 . + . ID=exon132;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2060235 2060348 . + . ID=exon133;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2062224 2062337 . + . ID=exon134;Parent=NM_001025091 chr6_ssto_hap7 . exon 2062896 2063018 . + . ID=exon135;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2063438 2063538 . + . ID=exon136;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2063635 2063720 . + . ID=exon137;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2064022 2064161 . + . ID=exon138;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2064248 2064396 . + . ID=exon139;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2065090 2065173 . + . ID=exon140;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2065388 2065512 . + . ID=exon141;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2065709 2065821 . + . ID=exon142;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2065964 2066135 . + . ID=exon143;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2066304 2066378 . + . ID=exon144;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2066471 2066541 . + . ID=exon145;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2069511 2069543 . + . ID=exon146;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2069629 2069797 . + . ID=exon147;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2069972 2070036 . + . ID=exon148;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2070129 2070201 . + . ID=exon149;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 2070358 2071356 . + . ID=exon150;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30539170 30539337 . + . ID=exon151;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30545186 30545232 . + . ID=exon152;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30545595 30545690 . + . ID=exon153;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30545853 30545979 . + . ID=exon154;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30546125 30546162 . + . ID=exon155;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30546247 30546354 . + . ID=exon156;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30547708 30547782 . + . ID=exon157;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30548183 30548296 . + . ID=exon158;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30550171 30550284 . + . ID=exon159;Parent=NM_001025091 chr6_ssto_hap7 . exon 30550843 30550965 . + . ID=exon160;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30551385 30551485 . + . ID=exon161;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30551582 30551667 . + . ID=exon162;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30551969 30552108 . + . ID=exon163;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30552195 30552343 . + . ID=exon164;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30553037 30553120 . + . ID=exon165;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30553335 30553459 . + . ID=exon166;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30553656 30553768 . + . ID=exon167;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30553911 30554082 . + . ID=exon168;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30554251 30554325 . + . ID=exon169;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30554418 30554488 . + . ID=exon170;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30557465 30557497 . + . ID=exon171;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30557583 30557751 . + . ID=exon172;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30557926 30557990 . + . ID=exon173;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30558083 30558155 . + . ID=exon174;Parent=NM_001090,NM_001025091 chr6_ssto_hap7 . exon 30558312 30559309 . + . ID=exon175;Parent=NM_001090,NM_001025091 genometools-1.5.1/testdata/gt_gff3_addintrons_overlapping_exons_with_introns.gff3000066400000000000000000000727651211610345200306420ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr6_ssto_hap7 1832076 30559309 chr6_ssto_hap7 . gene 1832076 30559309 . + . ID=gene1;Name=ABCF1 chr6_ssto_hap7 . mRNA 1832076 30559309 . + . ID=mRNA1;Parent=gene1;Name=NM_001025091 chr6_ssto_hap7 . intron 1832244 1832804 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1832973 1838093 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1838141 1838502 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1838599 1838760 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1838888 1839032 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1839071 1839154 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1839263 1839491 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1839619 1839763 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1839802 1839885 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1839994 1840615 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1840691 1841089 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1841204 1841347 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1841423 1841821 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1841936 1843078 . + . Parent=mRNA1 chr6_ssto_hap7 . exon 1843079 1843192 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1843193 1843750 . + . Parent=mRNA1 chr6_ssto_hap7 . exon 1843812 1843925 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1843874 1844292 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1844394 1844483 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1844607 1844876 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1845017 1845025 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1845127 1845222 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1845309 1845609 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1845750 1845835 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1845985 1846242 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1846368 1846563 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1846677 1846677 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1846762 1846818 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1846991 1847158 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1847234 1847296 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1847410 1847551 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1847724 1847891 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1847967 1848058 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1848130 1850365 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1850399 1850483 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1850653 1850826 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1850892 1850983 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1851057 1851098 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1851132 1851212 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1852212 1871447 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1871616 1877466 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1877514 1877875 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1877972 1878133 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1878261 1878405 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1878444 1878527 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1878636 1879989 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1880065 1880463 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1880578 1882452 . + . Parent=mRNA1 chr6_ssto_hap7 . exon 1882453 1882566 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1882567 1883124 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1883248 1883666 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1883768 1883863 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1883950 1884250 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1884391 1884476 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1884626 1885318 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1885403 1885616 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1885742 1885937 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1886051 1886192 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1886365 1886532 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1886608 1886699 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1886771 1887241 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1887410 1889740 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1889774 1889858 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1890028 1890201 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1890267 1890358 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1890432 1890587 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1891587 1893257 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1893305 1893666 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1893763 1893924 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1894052 1894196 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1894235 1894318 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1894427 1895779 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1895855 1896254 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1896369 1898242 . + . Parent=mRNA1 chr6_ssto_hap7 . exon 1898243 1898356 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1898357 1898914 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1899038 1899456 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1899558 1899653 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1899740 1900040 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1900181 1900266 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1900416 1901108 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1901193 1901406 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1901532 1901727 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1901841 1901982 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1902155 1902322 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1902398 1902489 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1902561 1905536 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1905570 1905654 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1905824 1905997 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1906063 1906154 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1906228 1906383 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1907382 1921023 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1921192 1927039 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1927087 1927448 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1927545 1927706 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1927834 1927978 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1928017 1928100 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1928209 1929561 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1929637 1930036 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1930151 1932024 . + . Parent=mRNA1 chr6_ssto_hap7 . exon 1932025 1932138 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1932139 1932696 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1932820 1933238 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1933340 1933435 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1933522 1933822 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1933963 1934048 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1934198 1934890 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1934975 1935188 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1935314 1935509 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1935623 1935764 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1935937 1936104 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1936180 1936271 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1936343 1939318 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1939352 1939436 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1939606 1939779 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1939845 1939936 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1940010 1940165 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 1941164 2051220 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2051389 2057237 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2057285 2057646 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2057743 2057904 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2058032 2058176 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2058215 2058298 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2058407 2059760 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2059836 2060234 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2060349 2062223 . + . Parent=mRNA1 chr6_ssto_hap7 . exon 2062224 2062337 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2062338 2062895 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2063019 2063437 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2063539 2063634 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2063721 2064021 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2064162 2064247 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2064397 2065089 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2065174 2065387 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2065513 2065708 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2065822 2065963 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2066136 2066303 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2066379 2066470 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2066542 2069510 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2069544 2069628 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2069798 2069971 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2070037 2070128 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2070202 2070357 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 2071357 30539169 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30539338 30545185 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30545233 30545594 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30545691 30545852 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30545980 30546124 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30546163 30546246 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30546355 30547707 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30547783 30548182 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30548297 30550170 . + . Parent=mRNA1 chr6_ssto_hap7 . exon 30550171 30550284 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30550285 30550842 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30550966 30551384 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30551486 30551581 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30551668 30551968 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30552109 30552194 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30552344 30553036 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30553121 30553334 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30553460 30553655 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30553769 30553910 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30554083 30554250 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30554326 30554417 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30554489 30557464 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30557498 30557582 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30557752 30557925 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30557991 30558082 . + . Parent=mRNA1 chr6_ssto_hap7 . intron 30558156 30558311 . + . Parent=mRNA1 chr6_ssto_hap7 . mRNA 1832076 30559309 . + . ID=mRNA2;Parent=gene1;Name=NM_001090 chr6_ssto_hap7 . exon 1832076 1832243 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1832244 1832804 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1832805 1832972 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1832973 1838093 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1838094 1838140 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1838141 1838502 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1838503 1838598 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1838599 1838760 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1838761 1838887 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1838825 1838871 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1838888 1839032 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1839033 1839070 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1839071 1839154 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1839155 1839262 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1839234 1839329 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1839263 1839491 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1839492 1839618 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1839619 1839763 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1839764 1839801 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1839802 1839885 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1839886 1839993 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1839994 1840615 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1840616 1840690 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1840691 1841089 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1841090 1841203 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1841204 1841347 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1841348 1841422 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1841423 1841821 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1841822 1841935 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1841936 1843750 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1843751 1843873 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1843874 1844292 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1844293 1844393 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1844394 1844483 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1844484 1844606 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1844490 1844575 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1844607 1844876 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1844877 1845016 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1845017 1845025 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1845026 1845126 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1845103 1845251 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1845127 1845222 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1845223 1845308 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1845309 1845609 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1845610 1845749 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1845750 1845835 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1845836 1845984 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1845945 1846028 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1845985 1846242 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1846243 1846367 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1846368 1846563 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1846564 1846676 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1846677 1846677 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1846678 1846761 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1846762 1846818 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1846819 1846990 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1846976 1847100 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1846991 1847158 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1847159 1847233 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1847234 1847296 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1847297 1847409 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1847326 1847396 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1847410 1847551 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1847552 1847723 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1847724 1847891 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1847892 1847966 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1847967 1848058 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1848059 1848129 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1848130 1850365 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1850366 1850398 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1850399 1850483 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1850484 1850652 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1850653 1850826 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1850827 1850891 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1850892 1850983 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1850984 1851056 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1851057 1851098 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1851099 1851131 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1851132 1851212 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1851213 1852211 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1851217 1851385 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1851560 1851624 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1851717 1851789 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . exon 1851946 1852944 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1852212 1871447 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1871448 1871615 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1871616 1877466 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1877467 1877513 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1877514 1877875 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1877876 1877971 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1877972 1878133 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1878134 1878260 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1878261 1878405 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1878406 1878443 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1878444 1878527 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1878528 1878635 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1878636 1879989 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1879990 1880064 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1880065 1880463 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1880464 1880577 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1880578 1883124 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1883125 1883247 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1883248 1883666 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1883667 1883767 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1883768 1883863 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1883864 1883949 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1883950 1884250 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1884251 1884390 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1884391 1884476 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1884477 1884625 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1884626 1885318 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1885319 1885402 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1885403 1885616 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1885617 1885741 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1885742 1885937 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1885938 1886050 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1886051 1886192 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1886193 1886364 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1886365 1886532 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1886533 1886607 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1886608 1886699 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1886700 1886770 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1886771 1887241 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1887242 1887409 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1887410 1889740 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1889741 1889773 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1889774 1889858 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1889859 1890027 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1890028 1890201 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1890202 1890266 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1890267 1890358 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1890359 1890431 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1890432 1890587 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1890588 1891586 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1891587 1893257 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1893258 1893304 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1893305 1893666 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1893667 1893762 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1893763 1893924 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1893925 1894051 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1894052 1894196 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1894197 1894234 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1894235 1894318 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1894319 1894426 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1894427 1895779 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1895780 1895854 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1895855 1896254 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1896255 1896368 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1896369 1898914 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1898915 1899037 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1899038 1899456 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1899457 1899557 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1899558 1899653 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1899654 1899739 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1899740 1900040 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1900041 1900180 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1900181 1900266 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1900267 1900415 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1900416 1901108 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1901109 1901192 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1901193 1901406 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1901407 1901531 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1901532 1901727 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1901728 1901840 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1901841 1901982 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1901983 1902154 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1902155 1902322 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1902323 1902397 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1902398 1902489 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1902490 1902560 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1902561 1905536 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1905537 1905569 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1905570 1905654 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1905655 1905823 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1905824 1905997 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1905998 1906062 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1906063 1906154 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1906155 1906227 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1906228 1906383 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1906384 1907381 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1907382 1921023 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1921024 1921191 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1921192 1927039 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1927040 1927086 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1927087 1927448 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1927449 1927544 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1927545 1927706 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1927707 1927833 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1927834 1927978 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1927979 1928016 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1928017 1928100 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1928101 1928208 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1928209 1929561 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1929562 1929636 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1929637 1930036 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1930037 1930150 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1930151 1932696 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1932697 1932819 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1932820 1933238 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1933239 1933339 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1933340 1933435 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1933436 1933521 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1933522 1933822 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1933823 1933962 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1933963 1934048 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1934049 1934197 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1934198 1934890 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1934891 1934974 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1934975 1935188 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1935189 1935313 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1935314 1935509 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1935510 1935622 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1935623 1935764 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1935765 1935936 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1935937 1936104 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1936105 1936179 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1936180 1936271 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1936272 1936342 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1936343 1939318 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1939319 1939351 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1939352 1939436 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1939437 1939605 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1939606 1939779 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1939780 1939844 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1939845 1939936 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1939937 1940009 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1940010 1940165 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 1940166 1941163 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 1941164 2051220 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2051221 2051388 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2051389 2057237 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2057238 2057284 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2057285 2057646 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2057647 2057742 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2057743 2057904 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2057905 2058031 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2058032 2058176 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2058177 2058214 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2058215 2058298 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2058299 2058406 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2058407 2059760 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2059761 2059835 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2059836 2060234 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2060235 2060348 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2060349 2062895 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2062896 2063018 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2063019 2063437 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2063438 2063538 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2063539 2063634 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2063635 2063720 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2063721 2064021 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2064022 2064161 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2064162 2064247 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2064248 2064396 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2064397 2065089 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2065090 2065173 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2065174 2065387 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2065388 2065512 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2065513 2065708 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2065709 2065821 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2065822 2065963 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2065964 2066135 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2066136 2066303 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2066304 2066378 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2066379 2066470 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2066471 2066541 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2066542 2069510 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2069511 2069543 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2069544 2069628 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2069629 2069797 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2069798 2069971 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2069972 2070036 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2070037 2070128 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2070129 2070201 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2070202 2070357 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 2070358 2071356 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 2071357 30539169 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30539170 30539337 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30539338 30545185 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30545186 30545232 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30545233 30545594 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30545595 30545690 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30545691 30545852 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30545853 30545979 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30545980 30546124 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30546125 30546162 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30546163 30546246 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30546247 30546354 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30546355 30547707 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30547708 30547782 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30547783 30548182 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30548183 30548296 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30548297 30550842 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30550843 30550965 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30550966 30551384 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30551385 30551485 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30551486 30551581 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30551582 30551667 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30551668 30551968 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30551969 30552108 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30552109 30552194 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30552195 30552343 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30552344 30553036 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30553037 30553120 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30553121 30553334 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30553335 30553459 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30553460 30553655 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30553656 30553768 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30553769 30553910 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30553911 30554082 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30554083 30554250 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30554251 30554325 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30554326 30554417 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30554418 30554488 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30554489 30557464 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30557465 30557497 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30557498 30557582 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30557583 30557751 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30557752 30557925 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30557926 30557990 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30557991 30558082 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30558083 30558155 . + . Parent=mRNA1,mRNA2 chr6_ssto_hap7 . intron 30558156 30558311 . + . Parent=mRNA2 chr6_ssto_hap7 . exon 30558312 30559309 . + . Parent=mRNA1,mRNA2 ### genometools-1.5.1/testdata/gt_gff3_fail_1.gff3000066400000000000000000000001341211610345200211540ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ##sequence-region ctg123 1 1497228 genometools-1.5.1/testdata/gt_gff3_illegal_feature_start.gff3000066400000000000000000000001111211610345200243550ustar00rootroot00000000000000##gff-version 3 ##sequence-region sr 1 1000 sr . gene 0 1000 . + . . genometools-1.5.1/testdata/gt_gff3_illegal_region_start.gff3000066400000000000000000000001111211610345200242050ustar00rootroot00000000000000##gff-version 3 ##sequence-region sr 0 1000 sr . gene 1 1000 . + . . genometools-1.5.1/testdata/gt_gff3_offset_test.gff3000066400000000000000000000002241211610345200223460ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1000 9000 ##sequence-region seq2 1000 9000 seq1 . gene 1000 9000 . + . . seq2 . gene 1000 9000 . + . . genometools-1.5.1/testdata/gt_gff3_offset_test.out-1000066400000000000000000000002201211610345200224620ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 999 8999 ##sequence-region seq2 999 8999 seq1 . gene 999 8999 . + . . seq2 . gene 999 8999 . + . . genometools-1.5.1/testdata/gt_gff3_offset_test.out-999000066400000000000000000000002101211610345200226530ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 8001 ##sequence-region seq2 1 8001 seq1 . gene 1 8001 . + . . seq2 . gene 1 8001 . + . . genometools-1.5.1/testdata/gt_gff3_offset_test.out1000000066400000000000000000000002301211610345200226260ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 2000 10000 ##sequence-region seq2 2000 10000 seq1 . gene 2000 10000 . + . . seq2 . gene 2000 10000 . + . . genometools-1.5.1/testdata/gt_gff3_offsetfile_test.gff3000066400000000000000000000002201211610345200232020ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10000 ##sequence-region seq2 1 10000 seq1 . gene 1000 9000 . + . . seq2 . gene 1000 9000 . + . . genometools-1.5.1/testdata/gt_gff3_offsetfile_test.offsetfile000066400000000000000000000000521211610345200245060ustar00rootroot00000000000000offsets = { seq1 = 1000, seq2 = 500 } genometools-1.5.1/testdata/gt_gff3_offsetfile_test.out000066400000000000000000000002261211610345200231720ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1001 11000 ##sequence-region seq2 501 10500 seq1 . gene 2000 10000 . + . . seq2 . gene 1500 9500 . + . . genometools-1.5.1/testdata/gt_gff3_prob_1.gff3000066400000000000000000000017461211610345200212150ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 5842386 5842719 . + . ID=gene485 NC_003070 gth mRNA 5842386 5842719 . + . ID=mRNA517;Parent=gene485 NC_003070 gth exon 5842386 5842719 0.934132 + . Parent=mRNA517 ### # the following mRNA refers to an undefined gene NC_003070 gth mRNA 5869883 5872798 . + . ID=mRNA520;Parent=gene488 NC_003070 gth exon 5869883 5870106 0.812500 + . Parent=mRNA520 NC_003070 gth exon 5872420 5872515 0.781250 + . Parent=mRNA520 NC_003070 gth exon 5872601 5872798 0.742424 + . Parent=mRNA520 NC_003070 gth mRNA 5869902 5870107 . + . ID=mRNA521;Parent=gene488 NC_003070 gth exon 5869902 5870107 0.766990 + . Parent=mRNA521 ### NC_003070 gth gene 5870624 5871356 . - . ID=gene489 NC_003070 gth mRNA 5870624 5871356 . - . ID=mRNA522;Parent=gene489 NC_003070 gth exon 5870624 5870822 1.000000 - . Parent=mRNA522 NC_003070 gth exon 5870939 5871023 0.976471 - . Parent=mRNA522 NC_003070 gth exon 5871121 5871356 0.775424 - . Parent=mRNA522 ### genometools-1.5.1/testdata/gt_gff3_prob_10.in000066400000000000000000000016211211610345200210460ustar00rootroot00000000000000##gff-version 3 # # ### gene g1 chr8 AUGUSTUS gene 3922 44514 1 - . ID=g1 chr8 AUGUSTUS CDS 3922 4093 . - 1 Parent=g1 chr8 AUGUSTUS CDS 6417 6577 . - 0 Parent=g1 chr8 AUGUSTUS CDS 12072 12161 . - 0 Parent=g1 chr8 AUGUSTUS CDS 17635 17730 . - 0 Parent=g1 chr8 AUGUSTUS CDS 18876 18994 . - 2 Parent=g1 chr8 AUGUSTUS CDS 21665 21797 . - 0 Parent=g1 chr8 AUGUSTUS CDS 34644 34751 . - 0 Parent=g1 chr8 AUGUSTUS CDS 36308 36401 . - 1 Parent=g1 chr8 AUGUSTUS CDS 44465 44514 . - 0 Parent=g1 ### end gene g1 ### gene g2 chr8 AUGUSTUS gene 309281 310246 1 - . ID=g2 chr8 AUGUSTUS CDS 309281 310246 . - 0 Parent=g2 ### end gene g2 ### gene g3 chr8 AUGUSTUS gene 310605 311468 1 + . ID=g3 chr8 AUGUSTUS CDS 310605 310617 . + 0 Parent=g3 chr8 AUGUSTUS CDS 310822 311468 . + 2 Parent=g3 ### end gene g3 ### gene g4 chr8 AUGUSTUS gene 471665 472078 1 - . ID=g4 chr8 AUGUSTUS CDS 471665 472078 . - 0 Parent=g4 ### end gene g4 genometools-1.5.1/testdata/gt_gff3_prob_10.out000066400000000000000000000016111211610345200212460ustar00rootroot00000000000000##gff-version 3 # # ##sequence-region chr8 3922 472078 chr8 AUGUSTUS gene 3922 44514 1 - . ID=gene1 chr8 AUGUSTUS CDS 3922 4093 . - 1 Parent=gene1 chr8 AUGUSTUS CDS 6417 6577 . - 0 Parent=gene1 chr8 AUGUSTUS CDS 12072 12161 . - 0 Parent=gene1 chr8 AUGUSTUS CDS 17635 17730 . - 0 Parent=gene1 chr8 AUGUSTUS CDS 18876 18994 . - 2 Parent=gene1 chr8 AUGUSTUS CDS 21665 21797 . - 0 Parent=gene1 chr8 AUGUSTUS CDS 34644 34751 . - 0 Parent=gene1 chr8 AUGUSTUS CDS 36308 36401 . - 1 Parent=gene1 chr8 AUGUSTUS CDS 44465 44514 . - 0 Parent=gene1 ### chr8 AUGUSTUS gene 309281 310246 1 - . ID=gene2 chr8 AUGUSTUS CDS 309281 310246 . - 0 Parent=gene2 ### chr8 AUGUSTUS gene 310605 311468 1 + . ID=gene3 chr8 AUGUSTUS CDS 310605 310617 . + 0 Parent=gene3 chr8 AUGUSTUS CDS 310822 311468 . + 2 Parent=gene3 ### chr8 AUGUSTUS gene 471665 472078 1 - . ID=gene4 chr8 AUGUSTUS CDS 471665 472078 . - 0 Parent=gene4 ### genometools-1.5.1/testdata/gt_gff3_prob_11.in000066400000000000000000000021461211610345200210520ustar00rootroot00000000000000##gff-version 3 # # ### gene g1 chr8 AUGUSTUS gene 3922 44514 1 - . ID=g1 chr8 AUGUSTUS transcript 3922 44514 . - . ID=g1.t1 chr8 AUGUSTUS CDS 3922 4093 . - 1 Parent=g1 chr8 AUGUSTUS CDS 6417 6577 . - 0 Parent=g1 chr8 AUGUSTUS CDS 12072 12161 . - 0 Parent=g1 chr8 AUGUSTUS CDS 17635 17730 . - 0 Parent=g1 chr8 AUGUSTUS CDS 18876 18994 . - 2 Parent=g1 chr8 AUGUSTUS CDS 21665 21797 . - 0 Parent=g1 chr8 AUGUSTUS CDS 34644 34751 . - 0 Parent=g1 chr8 AUGUSTUS CDS 36308 36401 . - 1 Parent=g1 chr8 AUGUSTUS CDS 44465 44514 . - 0 Parent=g1 ### end gene g1 ### gene g2 chr8 AUGUSTUS gene 309281 310246 1 - . ID=g2 chr8 AUGUSTUS transcript 309281 310246 . - . ID=g2.t1 chr8 AUGUSTUS CDS 309281 310246 . - 0 Parent=g2 ### end gene g2 ### gene g3 chr8 AUGUSTUS gene 310605 311468 1 + . ID=g3 chr8 AUGUSTUS transcript 310605 311468 . + . ID=g3.t1 chr8 AUGUSTUS CDS 310605 310617 . + 0 Parent=g3 chr8 AUGUSTUS CDS 310822 311468 . + 2 Parent=g3 ### end gene g3 ### gene g4 chr8 AUGUSTUS gene 471665 472078 1 - . ID=g4 chr8 AUGUSTUS transcript 471665 472078 . - . ID=g4.t1 chr8 AUGUSTUS CDS 471665 472078 . - 0 Parent=g4 ### end gene g4 genometools-1.5.1/testdata/gt_gff3_prob_11.out000066400000000000000000000021021211610345200212430ustar00rootroot00000000000000##gff-version 3 # # ##sequence-region chr8 3922 472078 chr8 AUGUSTUS gene 3922 44514 1 - . ID=gene1 chr8 AUGUSTUS CDS 3922 4093 . - 1 Parent=gene1 chr8 AUGUSTUS CDS 6417 6577 . - 0 Parent=gene1 chr8 AUGUSTUS CDS 12072 12161 . - 0 Parent=gene1 chr8 AUGUSTUS CDS 17635 17730 . - 0 Parent=gene1 chr8 AUGUSTUS CDS 18876 18994 . - 2 Parent=gene1 chr8 AUGUSTUS CDS 21665 21797 . - 0 Parent=gene1 chr8 AUGUSTUS CDS 34644 34751 . - 0 Parent=gene1 chr8 AUGUSTUS CDS 36308 36401 . - 1 Parent=gene1 chr8 AUGUSTUS CDS 44465 44514 . - 0 Parent=gene1 ### chr8 AUGUSTUS transcript 3922 44514 . - . . chr8 AUGUSTUS gene 309281 310246 1 - . ID=gene2 chr8 AUGUSTUS CDS 309281 310246 . - 0 Parent=gene2 ### chr8 AUGUSTUS transcript 309281 310246 . - . . chr8 AUGUSTUS gene 310605 311468 1 + . ID=gene3 chr8 AUGUSTUS CDS 310605 310617 . + 0 Parent=gene3 chr8 AUGUSTUS CDS 310822 311468 . + 2 Parent=gene3 ### chr8 AUGUSTUS transcript 310605 311468 . + . . chr8 AUGUSTUS gene 471665 472078 1 - . ID=gene4 chr8 AUGUSTUS CDS 471665 472078 . - 0 Parent=gene4 ### chr8 AUGUSTUS transcript 471665 472078 . - . . genometools-1.5.1/testdata/gt_gff3_prob_12.gff3000066400000000000000000000004421211610345200212670ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001;Name=EDEN ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 ctg123 . CDS 1201 1500 . + 0 ID=cds000001;Parent=mRNA00001 ### ctg123 . CDS 3000 3902 . + 0 ID=cds000001;Parent=mRNA00001 genometools-1.5.1/testdata/gt_gff3_prob_13.gff3000066400000000000000000000011621211610345200212700ustar00rootroot00000000000000Chr1 TAIR10 gene 52239 54692 . + . ID=AT1G01110;Note=protein_coding_gene;Name=AT1G01110 Chr1 TAIR10 mRNA 52869 54685 . + . ID=AT1G01110.1;Parent=AT1G01110;Name=AT1G01110.1;Index=1 Chr1 TAIR10 protein 53022 54494 . + . ID=AT1G01110.1-Protein;Name=AT1G01110.1;Derives_from=AT1G01110.1 Chr1 TAIR10 CDS 53022 53183 . + 0 Parent=AT1G01110.1,AT1G01110.1-Protein; Chr1 TAIR10 mRNA 52239 54692 . + . ID=AT1G01110.2;Parent=AT1G01110;Name=AT1G01110.2;Index=1 Chr1 TAIR10 protein 52239 54494 . + . ID=AT1G01110.2-Protein;Name=AT1G01110.2;Derives_from=AT1G01110.2 Chr1 TAIR10 CDS 52239 52346 . + 0 Parent=AT1G01110.2,AT1G01110.2-Protein; genometools-1.5.1/testdata/gt_gff3_prob_2.in000066400000000000000000000011321211610345200207640ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 10000000 # 1 comment #1 comment # a comment #a comment # z comment #z comment # A comment #A comment # Z comment #Z comment NC_003070 gth gene 5414975 5415790 0.998350 + . ID=gene1 NC_003070 gth exon 5414975 5415294 0.996875 + . Parent=gene1 NC_003070 gth exon 5415423 5415589 1.000000 + . Parent=gene1 NC_003070 gth exon 5415672 5415790 1.000000 + . Parent=gene1 ### NC_003070 gth gene 5415008 5415564 0.995338 + . ID=gene2 NC_003070 gth exon 5415008 5415294 0.996516 + . Parent=gene2 NC_003070 gth exon 5415423 5415564 0.992958 + . Parent=gene2 ### genometools-1.5.1/testdata/gt_gff3_prob_2.out000066400000000000000000000010751211610345200211730ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 10000000 # 1 comment #1 comment # a comment #a comment # z comment #z comment # A comment #A comment # Z comment #Z comment NC_003070 gth gene 5414975 5415790 0.998 + . ID=gene1 NC_003070 gth exon 5414975 5415294 0.997 + . Parent=gene1 NC_003070 gth exon 5415423 5415589 1 + . Parent=gene1 NC_003070 gth exon 5415672 5415790 1 + . Parent=gene1 ### NC_003070 gth gene 5415008 5415564 0.995 + . ID=gene2 NC_003070 gth exon 5415008 5415294 0.997 + . Parent=gene2 NC_003070 gth exon 5415423 5415564 0.993 + . Parent=gene2 ### genometools-1.5.1/testdata/gt_gff3_prob_3.gff3000066400000000000000000000021211211610345200212030ustar00rootroot00000000000000##gff-version 3 ##sequence-region ENm001 40027 1703041 ENm001 . gene 328776 338075 . + . ID=gene1 ENm001 . mRNA 328776 335792 . + . ID=mRNA1;Parent=gene1 ENm001 VEGA_Known exon 328776 328875 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 328841 328875 . + 0 Parent=mRNA1 ENm001 VEGA_Known CDS 329375 329465 . + 1 Parent=mRNA1 ENm001 VEGA_Known exon 329375 329465 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 329794 329981 . + 0 Parent=mRNA1 ENm001 VEGA_Known exon 329794 329981 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 335505 335652 . + 1 Parent=mRNA1 ENm001 VEGA_Known exon 335505 335792 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 335653 335655 . + 0 Parent=mRNA1 ENm001 . mRNA 328924 338075 . + . ID=mRNA2;Parent=gene1 ENm001 VEGA_Known exon 328924 329465 . + . Parent=mRNA2 ENm001 VEGA_Known CDS 329316 329465 . + 0 Parent=mRNA2 ENm001 VEGA_Known CDS 329794 329981 . + 0 Parent=mRNA2 ENm001 VEGA_Known exon 329794 329981 . + . Parent=mRNA2 ENm001 VEGA_Known CDS 335505 335652 . + 1 Parent=mRNA2 ENm001 VEGA_Known exon 335505 338075 . + . Parent=mRNA2 ENm001 VEGA_Known CDS 335653 335655 . + 0 Parent=mRNA2 ### genometools-1.5.1/testdata/gt_gff3_prob_4.gff3000066400000000000000000000004361211610345200212130ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001;Name=EDEN ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 ctg123 . CDS 1201 1500 . + 0 ID=cds000001;Parent=mRNA00001 ctg123 . CDS 3000 3902 . + 0 ID=cds000001;Parent=mRNA00001 genometools-1.5.1/testdata/gt_gff3_prob_5.in000066400000000000000000001050421211610345200207740ustar00rootroot00000000000000##gff-version 3 ##sequence-region ENm001 40027 1703041 ENm001 . gene 1540185 1703041 . - . ID=gene1 ENm001 . mRNA 1540185 1703041 . - . ID=mRNA1;Parent=gene1 ENm001 VEGA_Known exon 1540185 1541316 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1541071 1541073 . - 0 Parent=mRNA1 ENm001 VEGA_Known CDS 1541074 1541316 . - 0 Parent=mRNA1 ENm001 VEGA_Known CDS 1547552 1547653 . - 0 Parent=mRNA1 ENm001 VEGA_Known exon 1547552 1547653 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1549038 1549170 . - 1 Parent=mRNA1 ENm001 VEGA_Known exon 1549038 1549170 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1550601 1550664 . - 2 Parent=mRNA1 ENm001 VEGA_Known exon 1550601 1550664 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1554081 1554266 . - 2 Parent=mRNA1 ENm001 VEGA_Known exon 1554081 1554266 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1554586 1554791 . - 1 Parent=mRNA1 ENm001 VEGA_Known exon 1554586 1554791 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1557623 1557801 . - 0 Parent=mRNA1 ENm001 VEGA_Known exon 1557623 1557801 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1564447 1564634 . - 2 Parent=mRNA1 ENm001 VEGA_Known exon 1564447 1564634 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1564803 1564955 . - 2 Parent=mRNA1 ENm001 VEGA_Known exon 1564803 1564955 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1575365 1575464 . - 0 Parent=mRNA1 ENm001 VEGA_Known exon 1575365 1575464 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1575547 1575633 . - 0 Parent=mRNA1 ENm001 VEGA_Known exon 1575547 1575633 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1586089 1586168 . - 2 Parent=mRNA1 ENm001 VEGA_Known exon 1586089 1586168 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1587409 1587504 . - 2 Parent=mRNA1 ENm001 VEGA_Known exon 1587409 1587504 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1589969 1590244 . - 2 Parent=mRNA1 ENm001 VEGA_Known exon 1589969 1590244 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1596593 1596710 . - 0 Parent=mRNA1 ENm001 VEGA_Known exon 1596593 1596710 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1607045 1607299 . - 0 Parent=mRNA1 ENm001 VEGA_Known exon 1607045 1607299 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1609975 1610125 . - 1 Parent=mRNA1 ENm001 VEGA_Known exon 1609975 1610125 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1612396 1612495 . - 2 Parent=mRNA1 ENm001 VEGA_Known exon 1612396 1612495 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1613785 1613988 . - 2 Parent=mRNA1 ENm001 VEGA_Known exon 1613785 1613988 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1620662 1622315 . - 0 Parent=mRNA1 ENm001 VEGA_Known exon 1620662 1622315 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1640299 1640523 . - 0 Parent=mRNA1 ENm001 VEGA_Known exon 1640299 1640523 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1690743 1690850 . - 0 Parent=mRNA1 ENm001 VEGA_Known exon 1690743 1690850 . - . Parent=mRNA1 ENm001 VEGA_Known CDS 1702869 1702949 . - 0 Parent=mRNA1 ENm001 VEGA_Known exon 1702869 1703041 . - . Parent=mRNA1 ENm001 . mRNA 1622120 1701172 . - . ID=mRNA2;Parent=gene1 ENm001 VEGA_Known CDS 1622120 1622315 . - 0 Parent=mRNA2 ENm001 VEGA_Known exon 1622120 1622315 . - . Parent=mRNA2 ENm001 VEGA_Known CDS 1640299 1640523 . - 0 Parent=mRNA2 ENm001 VEGA_Known exon 1640299 1640523 . - . Parent=mRNA2 ENm001 VEGA_Known CDS 1690743 1690805 . - 0 Parent=mRNA2 ENm001 VEGA_Known exon 1690743 1690850 . - . Parent=mRNA2 ENm001 VEGA_Known exon 1701124 1701172 . - . Parent=mRNA2 ### ENm001 . gene 1192756 1257031 . - . ID=gene2 ENm001 . mRNA 1192756 1257031 . - . ID=mRNA3;Parent=gene2 ENm001 VEGA_Known exon 1192756 1193282 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1193130 1193132 . - 0 Parent=mRNA3 ENm001 VEGA_Known CDS 1193133 1193282 . - 0 Parent=mRNA3 ENm001 VEGA_Known CDS 1196886 1196999 . - 0 Parent=mRNA3 ENm001 VEGA_Known exon 1196886 1196999 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1198146 1198251 . - 1 Parent=mRNA3 ENm001 VEGA_Known exon 1198146 1198251 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1209472 1209581 . - 0 Parent=mRNA3 ENm001 VEGA_Known exon 1209472 1209581 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1210545 1210601 . - 0 Parent=mRNA3 ENm001 VEGA_Known exon 1210545 1210601 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1211603 1211678 . - 1 Parent=mRNA3 ENm001 VEGA_Known exon 1211603 1211678 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1212520 1212644 . - 0 Parent=mRNA3 ENm001 VEGA_Known exon 1212520 1212644 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1214260 1214394 . - 0 Parent=mRNA3 ENm001 VEGA_Known exon 1214260 1214394 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1215232 1215343 . - 1 Parent=mRNA3 ENm001 VEGA_Known exon 1215232 1215343 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1249697 1249808 . - 2 Parent=mRNA3 ENm001 VEGA_Known exon 1249697 1249808 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1251771 1251893 . - 2 Parent=mRNA3 ENm001 VEGA_Known exon 1251771 1251893 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1256370 1256469 . - 0 Parent=mRNA3 ENm001 VEGA_Known exon 1256370 1256469 . - . Parent=mRNA3 ENm001 VEGA_Known CDS 1256890 1256994 . - 0 Parent=mRNA3 ENm001 VEGA_Known exon 1256890 1257031 . - . Parent=mRNA3 ### ENm001 . gene 692046 748795 . + . ID=gene3 ENm001 . mRNA 692046 748795 . + . ID=mRNA4;Parent=gene3 ENm001 VEGA_Known exon 692046 692184 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 692146 692184 . + 0 Parent=mRNA4 ENm001 VEGA_Known CDS 717661 717724 . + 0 Parent=mRNA4 ENm001 VEGA_Known exon 717661 717724 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 722528 722579 . + 2 Parent=mRNA4 ENm001 VEGA_Known exon 722528 722579 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 728306 728369 . + 1 Parent=mRNA4 ENm001 VEGA_Known exon 728306 728369 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 733711 733917 . + 0 Parent=mRNA4 ENm001 VEGA_Known exon 733711 733917 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 735797 735876 . + 0 Parent=mRNA4 ENm001 VEGA_Known exon 735797 735876 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 739767 739845 . + 1 Parent=mRNA4 ENm001 VEGA_Known exon 739767 739845 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 741603 741674 . + 0 Parent=mRNA4 ENm001 VEGA_Known exon 741603 741674 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 745594 745656 . + 0 Parent=mRNA4 ENm001 VEGA_Known exon 745594 745656 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 747261 747398 . + 0 Parent=mRNA4 ENm001 VEGA_Known exon 747261 748795 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 747399 747401 . + 0 Parent=mRNA4 ENm001 . mRNA 692121 745644 . + . ID=mRNA5;Parent=gene3 ENm001 VEGA_Known exon 692121 692184 . + . Parent=mRNA5 ENm001 VEGA_Known exon 709601 709681 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 709676 709681 . + 0 Parent=mRNA5 ENm001 VEGA_Known CDS 717661 717724 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 717661 717724 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 722528 722579 . + 2 Parent=mRNA5 ENm001 VEGA_Known exon 722528 722579 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 728306 728369 . + 1 Parent=mRNA5 ENm001 VEGA_Known exon 728306 728369 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 733711 733917 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 733711 733917 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 735797 735876 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 735797 735876 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 739767 739845 . + 1 Parent=mRNA5 ENm001 VEGA_Known exon 739767 739845 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 741603 741674 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 741603 741674 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 745594 745644 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 745594 745644 . + . Parent=mRNA5 ### ENm001 . gene 501939 627920 . + . ID=gene4 ENm001 . mRNA 501939 625876 . + . ID=mRNA6;Parent=gene4 ENm001 VEGA_Known exon 501939 502111 . + . Parent=mRNA6 ENm001 VEGA_Known exon 528605 529818 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 528721 529818 . + 0 Parent=mRNA6 ENm001 VEGA_Known CDS 561202 561393 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 561202 561393 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 569484 569618 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 569484 569618 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 570386 570559 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 570386 570559 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 584889 585049 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 584889 585049 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 586971 587073 . + 1 Parent=mRNA6 ENm001 VEGA_Known exon 586971 587073 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 587172 587308 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 587172 587308 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 587993 588154 . + 1 Parent=mRNA6 ENm001 VEGA_Known exon 587993 588154 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 588871 589024 . + 1 Parent=mRNA6 ENm001 VEGA_Known exon 588871 589024 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 592584 592802 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 592584 592802 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 599179 599325 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 599179 599325 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 601032 601188 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 601032 601188 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 601383 601523 . + 2 Parent=mRNA6 ENm001 VEGA_Known exon 601383 601523 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 604415 604645 . + 2 Parent=mRNA6 ENm001 VEGA_Known exon 604415 604645 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 606923 607003 . + 2 Parent=mRNA6 ENm001 VEGA_Known exon 606923 607003 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 608310 608491 . + 2 Parent=mRNA6 ENm001 VEGA_Known exon 608310 608491 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 611522 611631 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 611522 611631 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 612838 613003 . + 1 Parent=mRNA6 ENm001 VEGA_Known exon 612838 613003 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 625189 625325 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 625189 625325 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 625421 625655 . + 1 Parent=mRNA6 ENm001 VEGA_Known exon 625421 625876 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 625656 625658 . + 0 Parent=mRNA6 ENm001 . mRNA 501939 627920 . + . ID=mRNA7;Parent=gene4 ENm001 VEGA_Known exon 501939 502111 . + . Parent=mRNA7 ENm001 VEGA_Known exon 528605 529818 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 528721 529818 . + 0 Parent=mRNA7 ENm001 VEGA_Known CDS 561202 561393 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 561202 561393 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 569484 569618 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 569484 569618 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 570386 570559 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 570386 570559 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 584889 585049 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 584889 585049 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 586971 587073 . + 1 Parent=mRNA7 ENm001 VEGA_Known exon 586971 587073 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 587172 587308 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 587172 587308 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 587993 588154 . + 1 Parent=mRNA7 ENm001 VEGA_Known exon 587993 588154 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 588925 589024 . + 1 Parent=mRNA7 ENm001 VEGA_Known exon 588925 589024 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 592584 592802 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 592584 592802 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 599179 599325 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 599179 599325 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 601032 601188 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 601032 601188 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 601383 601523 . + 2 Parent=mRNA7 ENm001 VEGA_Known exon 601383 601523 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 604415 604645 . + 2 Parent=mRNA7 ENm001 VEGA_Known exon 604415 604645 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 606923 607003 . + 2 Parent=mRNA7 ENm001 VEGA_Known exon 606923 607003 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 608310 608491 . + 2 Parent=mRNA7 ENm001 VEGA_Known exon 608310 608491 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 611522 611631 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 611522 611631 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 612838 613003 . + 1 Parent=mRNA7 ENm001 VEGA_Known exon 612838 613003 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 625189 625325 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 625189 625325 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 625421 625655 . + 1 Parent=mRNA7 ENm001 VEGA_Known exon 625421 627920 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 625656 625658 . + 0 Parent=mRNA7 ### ENm001 . gene 1309497 1498195 . + . ID=gene5 ENm001 . mRNA 1309497 1498195 . + . ID=mRNA8;Parent=gene5 ENm001 VEGA_Known exon 1309497 1309681 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1309629 1309681 . + 0 Parent=mRNA8 ENm001 VEGA_Known CDS 1333787 1333897 . + 1 Parent=mRNA8 ENm001 VEGA_Known exon 1333787 1333897 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1338568 1338676 . + 1 Parent=mRNA8 ENm001 VEGA_Known exon 1338568 1338676 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1360433 1360648 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1360433 1360648 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1363810 1363899 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1363810 1363899 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1364782 1364945 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1364782 1364945 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1366082 1366207 . + 1 Parent=mRNA8 ENm001 VEGA_Known exon 1366082 1366207 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1369634 1369880 . + 1 Parent=mRNA8 ENm001 VEGA_Known exon 1369634 1369880 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1371550 1371642 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1371550 1371642 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1378175 1378357 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1378175 1378357 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1388998 1389189 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1388998 1389189 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1417273 1417367 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1417273 1417367 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1419887 1419973 . + 1 Parent=mRNA8 ENm001 VEGA_Known exon 1419887 1419973 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1421468 1422191 . + 1 Parent=mRNA8 ENm001 VEGA_Known exon 1421468 1422191 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1424464 1424592 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1424464 1424592 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1432360 1432397 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1432360 1432397 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1433066 1433316 . + 1 Parent=mRNA8 ENm001 VEGA_Known exon 1433066 1433316 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1436208 1436287 . + 2 Parent=mRNA8 ENm001 VEGA_Known exon 1436208 1436287 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1440053 1440203 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1440053 1440203 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1441115 1441342 . + 2 Parent=mRNA8 ENm001 VEGA_Known exon 1441115 1441342 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1444147 1444247 . + 2 Parent=mRNA8 ENm001 VEGA_Known exon 1444147 1444247 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1457056 1457304 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1457056 1457304 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1471972 1472127 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1471972 1472127 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1482376 1482465 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1482376 1482465 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1494222 1494394 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1494222 1494394 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1494993 1495098 . + 1 Parent=mRNA8 ENm001 VEGA_Known exon 1494993 1495098 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1496442 1496639 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 1496442 1498195 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 1496640 1496642 . + 0 Parent=mRNA8 ### ENm001 . gene 40027 88317 . + . ID=gene6 ENm001 . mRNA 40027 88317 . + . ID=mRNA9;Parent=gene6 ENm001 VEGA_Known exon 40027 40268 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 40242 40268 . + 0 Parent=mRNA9 ENm001 VEGA_Known CDS 64068 64153 . + 0 Parent=mRNA9 ENm001 VEGA_Known exon 64068 64153 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 78554 78806 . + 1 Parent=mRNA9 ENm001 VEGA_Known exon 78554 78806 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 79695 80030 . + 0 Parent=mRNA9 ENm001 VEGA_Known exon 79695 80030 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 81294 81509 . + 0 Parent=mRNA9 ENm001 VEGA_Known exon 81294 81509 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 81852 82010 . + 0 Parent=mRNA9 ENm001 VEGA_Known exon 81852 82010 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 86828 87013 . + 0 Parent=mRNA9 ENm001 VEGA_Known exon 86828 88317 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 87014 87016 . + 0 Parent=mRNA9 ### ENm001 . gene 1106165 1152823 . - . ID=gene7 ENm001 . mRNA 1106165 1152823 . - . ID=mRNA10;Parent=gene7 ENm001 VEGA_Known exon 1106165 1107918 . - . Parent=mRNA10 ENm001 VEGA_Known CDS 1107689 1107691 . - 0 Parent=mRNA10 ENm001 VEGA_Known CDS 1107692 1107918 . - 2 Parent=mRNA10 ENm001 VEGA_Known CDS 1127146 1127410 . - 0 Parent=mRNA10 ENm001 VEGA_Known exon 1127146 1127410 . - . Parent=mRNA10 ENm001 VEGA_Known CDS 1144605 1144882 . - 2 Parent=mRNA10 ENm001 VEGA_Known exon 1144605 1144882 . - . Parent=mRNA10 ENm001 VEGA_Known CDS 1150101 1150327 . - 1 Parent=mRNA10 ENm001 VEGA_Known exon 1150101 1150327 . - . Parent=mRNA10 ENm001 VEGA_Known CDS 1152441 1152523 . - 0 Parent=mRNA10 ENm001 VEGA_Known exon 1152441 1152823 . - . Parent=mRNA10 ### ENm001 . gene 328776 338075 . + . ID=gene8 ENm001 . mRNA 328776 335792 . + . ID=mRNA11;Parent=gene8 ENm001 VEGA_Known exon 328776 328875 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 328841 328875 . + 0 Parent=mRNA11 ENm001 VEGA_Known CDS 329375 329465 . + 1 Parent=mRNA11 ENm001 VEGA_Known exon 329375 329465 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 329794 329981 . + 0 Parent=mRNA11 ENm001 VEGA_Known exon 329794 329981 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 335505 335652 . + 1 Parent=mRNA11 ENm001 VEGA_Known exon 335505 335792 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 335653 335655 . + 0 Parent=mRNA11 ENm001 . mRNA 328924 338075 . + . ID=mRNA12;Parent=gene8 ENm001 VEGA_Known exon 328924 329465 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 329316 329465 . + 0 Parent=mRNA12 ENm001 VEGA_Known CDS 329794 329981 . + 0 Parent=mRNA12 ENm001 VEGA_Known exon 329794 329981 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 335505 335652 . + 1 Parent=mRNA12 ENm001 VEGA_Known exon 335505 338075 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 335653 335655 . + 0 Parent=mRNA12 ### ENm001 . gene 354319 390710 . + . ID=gene9 ENm001 . mRNA 354319 390710 . + . ID=mRNA13;Parent=gene9 ENm001 VEGA_Known exon 354319 354626 . + . Parent=mRNA13 ENm001 VEGA_Known CDS 354597 354626 . + 0 Parent=mRNA13 ENm001 VEGA_Known CDS 356059 356223 . + 0 Parent=mRNA13 ENm001 VEGA_Known exon 356059 356223 . + . Parent=mRNA13 ENm001 VEGA_Known CDS 388480 388818 . + 0 Parent=mRNA13 ENm001 VEGA_Known exon 388480 390710 . + . Parent=mRNA13 ENm001 VEGA_Known CDS 388819 388821 . + 0 Parent=mRNA13 ### ENm001 . gene 782861 1059637 . + . ID=gene10 ENm001 . mRNA 782861 1053441 . + . ID=mRNA14;Parent=gene10 ENm001 VEGA_Known exon 782861 783225 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 783075 783225 . + 0 Parent=mRNA14 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA14 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA14 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 963658 963726 . + 1 Parent=mRNA14 ENm001 VEGA_Known exon 963658 963726 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA14 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA14 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA14 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1039321 1039471 . + 0 Parent=mRNA14 ENm001 VEGA_Known exon 1039321 1039471 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1052395 1052511 . + 0 Parent=mRNA14 ENm001 VEGA_Known exon 1052395 1053441 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1052512 1052514 . + 0 Parent=mRNA14 ENm001 . mRNA 782876 1059637 . + . ID=mRNA15;Parent=gene10 ENm001 VEGA_Known exon 782876 783225 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 783075 783225 . + 0 Parent=mRNA15 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA15 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA15 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA15 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA15 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA15 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1039321 1039471 . + 0 Parent=mRNA15 ENm001 VEGA_Known exon 1039321 1039471 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA15 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA15 ENm001 . mRNA 782913 1059637 . + . ID=mRNA16;Parent=gene10 ENm001 VEGA_Known exon 782913 783225 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 783075 783225 . + 0 Parent=mRNA16 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA16 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA16 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 963658 963726 . + 1 Parent=mRNA16 ENm001 VEGA_Known exon 963658 963726 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA16 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA16 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA16 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1039321 1039471 . + 0 Parent=mRNA16 ENm001 VEGA_Known exon 1039321 1039471 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA16 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA16 ENm001 . mRNA 782913 1059637 . + . ID=mRNA17;Parent=gene10 ENm001 VEGA_Known exon 782913 783225 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 783075 783225 . + 0 Parent=mRNA17 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA17 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA17 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 963658 963726 . + 1 Parent=mRNA17 ENm001 VEGA_Known exon 963658 963726 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA17 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA17 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA17 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1039321 1039456 . + 0 Parent=mRNA17 ENm001 VEGA_Known exon 1039321 1039456 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA17 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA17 ENm001 . mRNA 844422 961459 . + . ID=mRNA18;Parent=gene10 ENm001 VEGA_Known exon 844422 844548 . + . Parent=mRNA18 ENm001 VEGA_Known CDS 844536 844548 . + 0 Parent=mRNA18 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA18 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA18 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA18 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA18 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA18 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA18 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA18 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA18 ENm001 VEGA_Known CDS 961419 961459 . + 2 Parent=mRNA18 ENm001 VEGA_Known exon 961419 961459 . + . Parent=mRNA18 ENm001 . mRNA 849752 1059637 . + . ID=mRNA19;Parent=gene10 ENm001 VEGA_Known exon 849752 850163 . + . Parent=mRNA19 ENm001 VEGA_Known exon 928147 928349 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 928349 928349 . + 0 Parent=mRNA19 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA19 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA19 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA19 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA19 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA19 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA19 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA19 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA19 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA19 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA19 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 1039321 1039456 . + 0 Parent=mRNA19 ENm001 VEGA_Known exon 1039321 1039456 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA19 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA19 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA19 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA19 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA19 ENm001 . mRNA 849811 1059637 . + . ID=mRNA20;Parent=gene10 ENm001 VEGA_Known exon 849811 850163 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 850142 850163 . + 0 Parent=mRNA20 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA20 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA20 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA20 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA20 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA20 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA20 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA20 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA20 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA20 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA20 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 1039321 1039471 . + 0 Parent=mRNA20 ENm001 VEGA_Known exon 1039321 1039471 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA20 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA20 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA20 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA20 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA20 ENm001 . mRNA 849811 1059637 . + . ID=mRNA21;Parent=gene10 ENm001 VEGA_Known exon 849811 850163 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 850142 850163 . + 0 Parent=mRNA21 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA21 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA21 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA21 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA21 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA21 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 963658 963726 . + 1 Parent=mRNA21 ENm001 VEGA_Known exon 963658 963726 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA21 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA21 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA21 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA21 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA21 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 1039321 1039471 . + 0 Parent=mRNA21 ENm001 VEGA_Known exon 1039321 1039471 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA21 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA21 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA21 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA21 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA21 ENm001 . mRNA 949220 1027931 . + . ID=mRNA22;Parent=gene10 ENm001 VEGA_Known exon 949220 949254 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 949221 949254 . + 0 Parent=mRNA22 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA22 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA22 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA22 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA22 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1027854 1027865 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1027854 1027931 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1027866 1027868 . + 0 Parent=mRNA22 ### ENm001 . gene 783433 798108 . + . ID=gene11 ENm001 . mRNA 783433 789351 . + . ID=mRNA23;Parent=gene11 ENm001 VEGA_Novel_CDS exon 783433 783643 . + . Parent=mRNA23 ENm001 VEGA_Novel_CDS exon 783995 784213 . + . Parent=mRNA23 ENm001 VEGA_Novel_CDS exon 784508 784687 . + . Parent=mRNA23 ENm001 VEGA_Novel_CDS CDS 784619 784687 . + 0 Parent=mRNA23 ENm001 VEGA_Novel_CDS CDS 785957 786257 . + 0 Parent=mRNA23 ENm001 VEGA_Novel_CDS exon 785957 786257 . + . Parent=mRNA23 ENm001 VEGA_Novel_CDS CDS 788687 788823 . + 2 Parent=mRNA23 ENm001 VEGA_Novel_CDS exon 788687 789351 . + . Parent=mRNA23 ENm001 VEGA_Novel_CDS CDS 788824 788826 . + 0 Parent=mRNA23 ENm001 . mRNA 784508 798108 . + . ID=mRNA24;Parent=gene11 ENm001 VEGA_Novel_CDS exon 784508 784687 . + . Parent=mRNA24 ENm001 VEGA_Novel_CDS CDS 784619 784687 . + 0 Parent=mRNA24 ENm001 VEGA_Novel_CDS CDS 785957 786257 . + 0 Parent=mRNA24 ENm001 VEGA_Novel_CDS exon 785957 786257 . + . Parent=mRNA24 ENm001 VEGA_Novel_CDS CDS 788123 788219 . + 2 Parent=mRNA24 ENm001 VEGA_Novel_CDS exon 788123 788219 . + . Parent=mRNA24 ENm001 VEGA_Novel_CDS CDS 797933 797945 . + 1 Parent=mRNA24 ENm001 VEGA_Novel_CDS exon 797933 798108 . + . Parent=mRNA24 ENm001 VEGA_Novel_CDS CDS 797946 797948 . + 0 Parent=mRNA24 ### genometools-1.5.1/testdata/gt_gff3_prob_5.out000066400000000000000000001051521211610345200211770ustar00rootroot00000000000000##gff-version 3 ##sequence-region ENm001 40027 1703041 ENm001 . gene 40027 88317 . + . ID=gene1 ENm001 . mRNA 40027 88317 . + . ID=mRNA1;Parent=gene1 ENm001 VEGA_Known exon 40027 40268 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 40242 40268 . + 0 Parent=mRNA1 ENm001 VEGA_Known CDS 64068 64153 . + 0 Parent=mRNA1 ENm001 VEGA_Known exon 64068 64153 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 78554 78806 . + 1 Parent=mRNA1 ENm001 VEGA_Known exon 78554 78806 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 79695 80030 . + 0 Parent=mRNA1 ENm001 VEGA_Known exon 79695 80030 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 81294 81509 . + 0 Parent=mRNA1 ENm001 VEGA_Known exon 81294 81509 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 81852 82010 . + 0 Parent=mRNA1 ENm001 VEGA_Known exon 81852 82010 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 86828 87013 . + 0 Parent=mRNA1 ENm001 VEGA_Known exon 86828 88317 . + . Parent=mRNA1 ENm001 VEGA_Known CDS 87014 87016 . + 0 Parent=mRNA1 ### ENm001 . gene 328776 338075 . + . ID=gene2 ENm001 . mRNA 328776 335792 . + . ID=mRNA2;Parent=gene2 ENm001 VEGA_Known exon 328776 328875 . + . Parent=mRNA2 ENm001 VEGA_Known CDS 328841 328875 . + 0 Parent=mRNA2 ENm001 VEGA_Known CDS 329375 329465 . + 1 Parent=mRNA2 ENm001 VEGA_Known exon 329375 329465 . + . Parent=mRNA2 ENm001 VEGA_Known CDS 329794 329981 . + 0 Parent=mRNA2 ENm001 VEGA_Known exon 329794 329981 . + . Parent=mRNA2 ENm001 VEGA_Known CDS 335505 335652 . + 1 Parent=mRNA2 ENm001 VEGA_Known exon 335505 335792 . + . Parent=mRNA2 ENm001 VEGA_Known CDS 335653 335655 . + 0 Parent=mRNA2 ENm001 . mRNA 328924 338075 . + . ID=mRNA3;Parent=gene2 ENm001 VEGA_Known exon 328924 329465 . + . Parent=mRNA3 ENm001 VEGA_Known CDS 329316 329465 . + 0 Parent=mRNA3 ENm001 VEGA_Known CDS 329794 329981 . + 0 Parent=mRNA3 ENm001 VEGA_Known exon 329794 329981 . + . Parent=mRNA3 ENm001 VEGA_Known CDS 335505 335652 . + 1 Parent=mRNA3 ENm001 VEGA_Known exon 335505 338075 . + . Parent=mRNA3 ENm001 VEGA_Known CDS 335653 335655 . + 0 Parent=mRNA3 ### ENm001 . gene 354319 390710 . + . ID=gene3 ENm001 . mRNA 354319 390710 . + . ID=mRNA4;Parent=gene3 ENm001 VEGA_Known exon 354319 354626 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 354597 354626 . + 0 Parent=mRNA4 ENm001 VEGA_Known CDS 356059 356223 . + 0 Parent=mRNA4 ENm001 VEGA_Known exon 356059 356223 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 388480 388818 . + 0 Parent=mRNA4 ENm001 VEGA_Known exon 388480 390710 . + . Parent=mRNA4 ENm001 VEGA_Known CDS 388819 388821 . + 0 Parent=mRNA4 ### ENm001 . gene 501939 627920 . + . ID=gene4 ENm001 . mRNA 501939 625876 . + . ID=mRNA5;Parent=gene4 ENm001 VEGA_Known exon 501939 502111 . + . Parent=mRNA5 ENm001 VEGA_Known exon 528605 529818 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 528721 529818 . + 0 Parent=mRNA5 ENm001 VEGA_Known CDS 561202 561393 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 561202 561393 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 569484 569618 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 569484 569618 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 570386 570559 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 570386 570559 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 584889 585049 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 584889 585049 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 586971 587073 . + 1 Parent=mRNA5 ENm001 VEGA_Known exon 586971 587073 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 587172 587308 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 587172 587308 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 587993 588154 . + 1 Parent=mRNA5 ENm001 VEGA_Known exon 587993 588154 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 588871 589024 . + 1 Parent=mRNA5 ENm001 VEGA_Known exon 588871 589024 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 592584 592802 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 592584 592802 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 599179 599325 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 599179 599325 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 601032 601188 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 601032 601188 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 601383 601523 . + 2 Parent=mRNA5 ENm001 VEGA_Known exon 601383 601523 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 604415 604645 . + 2 Parent=mRNA5 ENm001 VEGA_Known exon 604415 604645 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 606923 607003 . + 2 Parent=mRNA5 ENm001 VEGA_Known exon 606923 607003 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 608310 608491 . + 2 Parent=mRNA5 ENm001 VEGA_Known exon 608310 608491 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 611522 611631 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 611522 611631 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 612838 613003 . + 1 Parent=mRNA5 ENm001 VEGA_Known exon 612838 613003 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 625189 625325 . + 0 Parent=mRNA5 ENm001 VEGA_Known exon 625189 625325 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 625421 625655 . + 1 Parent=mRNA5 ENm001 VEGA_Known exon 625421 625876 . + . Parent=mRNA5 ENm001 VEGA_Known CDS 625656 625658 . + 0 Parent=mRNA5 ENm001 . mRNA 501939 627920 . + . ID=mRNA6;Parent=gene4 ENm001 VEGA_Known exon 501939 502111 . + . Parent=mRNA6 ENm001 VEGA_Known exon 528605 529818 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 528721 529818 . + 0 Parent=mRNA6 ENm001 VEGA_Known CDS 561202 561393 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 561202 561393 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 569484 569618 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 569484 569618 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 570386 570559 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 570386 570559 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 584889 585049 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 584889 585049 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 586971 587073 . + 1 Parent=mRNA6 ENm001 VEGA_Known exon 586971 587073 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 587172 587308 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 587172 587308 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 587993 588154 . + 1 Parent=mRNA6 ENm001 VEGA_Known exon 587993 588154 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 588925 589024 . + 1 Parent=mRNA6 ENm001 VEGA_Known exon 588925 589024 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 592584 592802 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 592584 592802 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 599179 599325 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 599179 599325 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 601032 601188 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 601032 601188 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 601383 601523 . + 2 Parent=mRNA6 ENm001 VEGA_Known exon 601383 601523 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 604415 604645 . + 2 Parent=mRNA6 ENm001 VEGA_Known exon 604415 604645 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 606923 607003 . + 2 Parent=mRNA6 ENm001 VEGA_Known exon 606923 607003 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 608310 608491 . + 2 Parent=mRNA6 ENm001 VEGA_Known exon 608310 608491 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 611522 611631 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 611522 611631 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 612838 613003 . + 1 Parent=mRNA6 ENm001 VEGA_Known exon 612838 613003 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 625189 625325 . + 0 Parent=mRNA6 ENm001 VEGA_Known exon 625189 625325 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 625421 625655 . + 1 Parent=mRNA6 ENm001 VEGA_Known exon 625421 627920 . + . Parent=mRNA6 ENm001 VEGA_Known CDS 625656 625658 . + 0 Parent=mRNA6 ### ENm001 . gene 692046 748795 . + . ID=gene5 ENm001 . mRNA 692046 748795 . + . ID=mRNA7;Parent=gene5 ENm001 VEGA_Known exon 692046 692184 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 692146 692184 . + 0 Parent=mRNA7 ENm001 VEGA_Known CDS 717661 717724 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 717661 717724 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 722528 722579 . + 2 Parent=mRNA7 ENm001 VEGA_Known exon 722528 722579 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 728306 728369 . + 1 Parent=mRNA7 ENm001 VEGA_Known exon 728306 728369 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 733711 733917 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 733711 733917 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 735797 735876 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 735797 735876 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 739767 739845 . + 1 Parent=mRNA7 ENm001 VEGA_Known exon 739767 739845 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 741603 741674 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 741603 741674 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 745594 745656 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 745594 745656 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 747261 747398 . + 0 Parent=mRNA7 ENm001 VEGA_Known exon 747261 748795 . + . Parent=mRNA7 ENm001 VEGA_Known CDS 747399 747401 . + 0 Parent=mRNA7 ENm001 . mRNA 692121 745644 . + . ID=mRNA8;Parent=gene5 ENm001 VEGA_Known exon 692121 692184 . + . Parent=mRNA8 ENm001 VEGA_Known exon 709601 709681 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 709676 709681 . + 0 Parent=mRNA8 ENm001 VEGA_Known CDS 717661 717724 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 717661 717724 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 722528 722579 . + 2 Parent=mRNA8 ENm001 VEGA_Known exon 722528 722579 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 728306 728369 . + 1 Parent=mRNA8 ENm001 VEGA_Known exon 728306 728369 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 733711 733917 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 733711 733917 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 735797 735876 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 735797 735876 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 739767 739845 . + 1 Parent=mRNA8 ENm001 VEGA_Known exon 739767 739845 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 741603 741674 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 741603 741674 . + . Parent=mRNA8 ENm001 VEGA_Known CDS 745594 745644 . + 0 Parent=mRNA8 ENm001 VEGA_Known exon 745594 745644 . + . Parent=mRNA8 ### ENm001 . gene 782861 1059637 . + . ID=gene6 ENm001 . mRNA 782861 1053441 . + . ID=mRNA9;Parent=gene6 ENm001 VEGA_Known exon 782861 783225 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 783075 783225 . + 0 Parent=mRNA9 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA9 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA9 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA9 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA9 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA9 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 963658 963726 . + 1 Parent=mRNA9 ENm001 VEGA_Known exon 963658 963726 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA9 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA9 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA9 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA9 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA9 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 1039321 1039471 . + 0 Parent=mRNA9 ENm001 VEGA_Known exon 1039321 1039471 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA9 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA9 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 1052395 1052511 . + 0 Parent=mRNA9 ENm001 VEGA_Known exon 1052395 1053441 . + . Parent=mRNA9 ENm001 VEGA_Known CDS 1052512 1052514 . + 0 Parent=mRNA9 ENm001 . mRNA 782876 1059637 . + . ID=mRNA10;Parent=gene6 ENm001 VEGA_Known exon 782876 783225 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 783075 783225 . + 0 Parent=mRNA10 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA10 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA10 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA10 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA10 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA10 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA10 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA10 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA10 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA10 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA10 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 1039321 1039471 . + 0 Parent=mRNA10 ENm001 VEGA_Known exon 1039321 1039471 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA10 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA10 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA10 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA10 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA10 ENm001 . mRNA 782913 1059637 . + . ID=mRNA11;Parent=gene6 ENm001 VEGA_Known exon 782913 783225 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 783075 783225 . + 0 Parent=mRNA11 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA11 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA11 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA11 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA11 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA11 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 963658 963726 . + 1 Parent=mRNA11 ENm001 VEGA_Known exon 963658 963726 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA11 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA11 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA11 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA11 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA11 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 1039321 1039471 . + 0 Parent=mRNA11 ENm001 VEGA_Known exon 1039321 1039471 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA11 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA11 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA11 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA11 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA11 ENm001 . mRNA 782913 1059637 . + . ID=mRNA12;Parent=gene6 ENm001 VEGA_Known exon 782913 783225 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 783075 783225 . + 0 Parent=mRNA12 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA12 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA12 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA12 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA12 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA12 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 963658 963726 . + 1 Parent=mRNA12 ENm001 VEGA_Known exon 963658 963726 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA12 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA12 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA12 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA12 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA12 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 1039321 1039456 . + 0 Parent=mRNA12 ENm001 VEGA_Known exon 1039321 1039456 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA12 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA12 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA12 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA12 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA12 ENm001 . mRNA 844422 961459 . + . ID=mRNA13;Parent=gene6 ENm001 VEGA_Known exon 844422 844548 . + . Parent=mRNA13 ENm001 VEGA_Known CDS 844536 844548 . + 0 Parent=mRNA13 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA13 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA13 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA13 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA13 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA13 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA13 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA13 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA13 ENm001 VEGA_Known CDS 961419 961459 . + 2 Parent=mRNA13 ENm001 VEGA_Known exon 961419 961459 . + . Parent=mRNA13 ENm001 . mRNA 849752 1059637 . + . ID=mRNA14;Parent=gene6 ENm001 VEGA_Known exon 849752 850163 . + . Parent=mRNA14 ENm001 VEGA_Known exon 928147 928349 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 928349 928349 . + 0 Parent=mRNA14 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA14 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA14 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA14 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA14 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA14 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1039321 1039456 . + 0 Parent=mRNA14 ENm001 VEGA_Known exon 1039321 1039456 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA14 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA14 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA14 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA14 ENm001 . mRNA 849811 1059637 . + . ID=mRNA15;Parent=gene6 ENm001 VEGA_Known exon 849811 850163 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 850142 850163 . + 0 Parent=mRNA15 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA15 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA15 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA15 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA15 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA15 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1039321 1039471 . + 0 Parent=mRNA15 ENm001 VEGA_Known exon 1039321 1039471 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA15 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA15 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA15 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA15 ENm001 . mRNA 849811 1059637 . + . ID=mRNA16;Parent=gene6 ENm001 VEGA_Known exon 849811 850163 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 850142 850163 . + 0 Parent=mRNA16 ENm001 VEGA_Known CDS 929296 929378 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 929296 929378 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 949095 949254 . + 0 Parent=mRNA16 ENm001 VEGA_Known exon 949095 949254 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA16 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 963658 963726 . + 1 Parent=mRNA16 ENm001 VEGA_Known exon 963658 963726 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA16 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA16 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA16 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1039321 1039471 . + 0 Parent=mRNA16 ENm001 VEGA_Known exon 1039321 1039471 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1048618 1048710 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 1048618 1048710 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1051457 1051596 . + 2 Parent=mRNA16 ENm001 VEGA_Known exon 1051457 1051596 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1059296 1059388 . + 0 Parent=mRNA16 ENm001 VEGA_Known exon 1059296 1059637 . + . Parent=mRNA16 ENm001 VEGA_Known CDS 1059389 1059391 . + 0 Parent=mRNA16 ENm001 . mRNA 949220 1027931 . + . ID=mRNA17;Parent=gene6 ENm001 VEGA_Known exon 949220 949254 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 949221 949254 . + 0 Parent=mRNA17 ENm001 VEGA_Known CDS 959327 959381 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 959327 959381 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 960025 960140 . + 1 Parent=mRNA17 ENm001 VEGA_Known exon 960025 960140 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 961419 961494 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 961419 961494 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 965615 965769 . + 1 Parent=mRNA17 ENm001 VEGA_Known exon 965615 965769 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 967969 968066 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 967969 968066 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1000396 1000510 . + 0 Parent=mRNA17 ENm001 VEGA_Known exon 1000396 1000510 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1018855 1018927 . + 2 Parent=mRNA17 ENm001 VEGA_Known exon 1018855 1018927 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1020368 1020470 . + 1 Parent=mRNA17 ENm001 VEGA_Known exon 1020368 1020470 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1027854 1027865 . + 0 Parent=mRNA17 ENm001 VEGA_Known exon 1027854 1027931 . + . Parent=mRNA17 ENm001 VEGA_Known CDS 1027866 1027868 . + 0 Parent=mRNA17 ### ENm001 . gene 783433 798108 . + . ID=gene7 ENm001 . mRNA 783433 789351 . + . ID=mRNA18;Parent=gene7 ENm001 VEGA_Novel_CDS exon 783433 783643 . + . Parent=mRNA18 ENm001 VEGA_Novel_CDS exon 783995 784213 . + . Parent=mRNA18 ENm001 VEGA_Novel_CDS exon 784508 784687 . + . Parent=mRNA18 ENm001 VEGA_Novel_CDS CDS 784619 784687 . + 0 Parent=mRNA18 ENm001 VEGA_Novel_CDS CDS 785957 786257 . + 0 Parent=mRNA18 ENm001 VEGA_Novel_CDS exon 785957 786257 . + . Parent=mRNA18 ENm001 VEGA_Novel_CDS CDS 788687 788823 . + 2 Parent=mRNA18 ENm001 VEGA_Novel_CDS exon 788687 789351 . + . Parent=mRNA18 ENm001 VEGA_Novel_CDS CDS 788824 788826 . + 0 Parent=mRNA18 ENm001 . mRNA 784508 798108 . + . ID=mRNA19;Parent=gene7 ENm001 VEGA_Novel_CDS exon 784508 784687 . + . Parent=mRNA19 ENm001 VEGA_Novel_CDS CDS 784619 784687 . + 0 Parent=mRNA19 ENm001 VEGA_Novel_CDS CDS 785957 786257 . + 0 Parent=mRNA19 ENm001 VEGA_Novel_CDS exon 785957 786257 . + . Parent=mRNA19 ENm001 VEGA_Novel_CDS CDS 788123 788219 . + 2 Parent=mRNA19 ENm001 VEGA_Novel_CDS exon 788123 788219 . + . Parent=mRNA19 ENm001 VEGA_Novel_CDS CDS 797933 797945 . + 1 Parent=mRNA19 ENm001 VEGA_Novel_CDS exon 797933 798108 . + . Parent=mRNA19 ENm001 VEGA_Novel_CDS CDS 797946 797948 . + 0 Parent=mRNA19 ### ENm001 . gene 1106165 1152823 . - . ID=gene8 ENm001 . mRNA 1106165 1152823 . - . ID=mRNA20;Parent=gene8 ENm001 VEGA_Known exon 1106165 1107918 . - . Parent=mRNA20 ENm001 VEGA_Known CDS 1107689 1107691 . - 0 Parent=mRNA20 ENm001 VEGA_Known CDS 1107692 1107918 . - 2 Parent=mRNA20 ENm001 VEGA_Known CDS 1127146 1127410 . - 0 Parent=mRNA20 ENm001 VEGA_Known exon 1127146 1127410 . - . Parent=mRNA20 ENm001 VEGA_Known CDS 1144605 1144882 . - 2 Parent=mRNA20 ENm001 VEGA_Known exon 1144605 1144882 . - . Parent=mRNA20 ENm001 VEGA_Known CDS 1150101 1150327 . - 1 Parent=mRNA20 ENm001 VEGA_Known exon 1150101 1150327 . - . Parent=mRNA20 ENm001 VEGA_Known CDS 1152441 1152523 . - 0 Parent=mRNA20 ENm001 VEGA_Known exon 1152441 1152823 . - . Parent=mRNA20 ### ENm001 . gene 1192756 1257031 . - . ID=gene9 ENm001 . mRNA 1192756 1257031 . - . ID=mRNA21;Parent=gene9 ENm001 VEGA_Known exon 1192756 1193282 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1193130 1193132 . - 0 Parent=mRNA21 ENm001 VEGA_Known CDS 1193133 1193282 . - 0 Parent=mRNA21 ENm001 VEGA_Known CDS 1196886 1196999 . - 0 Parent=mRNA21 ENm001 VEGA_Known exon 1196886 1196999 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1198146 1198251 . - 1 Parent=mRNA21 ENm001 VEGA_Known exon 1198146 1198251 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1209472 1209581 . - 0 Parent=mRNA21 ENm001 VEGA_Known exon 1209472 1209581 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1210545 1210601 . - 0 Parent=mRNA21 ENm001 VEGA_Known exon 1210545 1210601 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1211603 1211678 . - 1 Parent=mRNA21 ENm001 VEGA_Known exon 1211603 1211678 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1212520 1212644 . - 0 Parent=mRNA21 ENm001 VEGA_Known exon 1212520 1212644 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1214260 1214394 . - 0 Parent=mRNA21 ENm001 VEGA_Known exon 1214260 1214394 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1215232 1215343 . - 1 Parent=mRNA21 ENm001 VEGA_Known exon 1215232 1215343 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1249697 1249808 . - 2 Parent=mRNA21 ENm001 VEGA_Known exon 1249697 1249808 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1251771 1251893 . - 2 Parent=mRNA21 ENm001 VEGA_Known exon 1251771 1251893 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1256370 1256469 . - 0 Parent=mRNA21 ENm001 VEGA_Known exon 1256370 1256469 . - . Parent=mRNA21 ENm001 VEGA_Known CDS 1256890 1256994 . - 0 Parent=mRNA21 ENm001 VEGA_Known exon 1256890 1257031 . - . Parent=mRNA21 ### ENm001 . gene 1309497 1498195 . + . ID=gene10 ENm001 . mRNA 1309497 1498195 . + . ID=mRNA22;Parent=gene10 ENm001 VEGA_Known exon 1309497 1309681 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1309629 1309681 . + 0 Parent=mRNA22 ENm001 VEGA_Known CDS 1333787 1333897 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 1333787 1333897 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1338568 1338676 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 1338568 1338676 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1360433 1360648 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1360433 1360648 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1363810 1363899 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1363810 1363899 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1364782 1364945 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1364782 1364945 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1366082 1366207 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 1366082 1366207 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1369634 1369880 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 1369634 1369880 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1371550 1371642 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1371550 1371642 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1378175 1378357 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1378175 1378357 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1388998 1389189 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1388998 1389189 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1417273 1417367 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1417273 1417367 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1419887 1419973 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 1419887 1419973 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1421468 1422191 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 1421468 1422191 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1424464 1424592 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1424464 1424592 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1432360 1432397 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1432360 1432397 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1433066 1433316 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 1433066 1433316 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1436208 1436287 . + 2 Parent=mRNA22 ENm001 VEGA_Known exon 1436208 1436287 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1440053 1440203 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1440053 1440203 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1441115 1441342 . + 2 Parent=mRNA22 ENm001 VEGA_Known exon 1441115 1441342 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1444147 1444247 . + 2 Parent=mRNA22 ENm001 VEGA_Known exon 1444147 1444247 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1457056 1457304 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1457056 1457304 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1471972 1472127 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1471972 1472127 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1482376 1482465 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1482376 1482465 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1494222 1494394 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1494222 1494394 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1494993 1495098 . + 1 Parent=mRNA22 ENm001 VEGA_Known exon 1494993 1495098 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1496442 1496639 . + 0 Parent=mRNA22 ENm001 VEGA_Known exon 1496442 1498195 . + . Parent=mRNA22 ENm001 VEGA_Known CDS 1496640 1496642 . + 0 Parent=mRNA22 ### ENm001 . gene 1540185 1703041 . - . ID=gene11 ENm001 . mRNA 1540185 1703041 . - . ID=mRNA23;Parent=gene11 ENm001 VEGA_Known exon 1540185 1541316 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1541071 1541073 . - 0 Parent=mRNA23 ENm001 VEGA_Known CDS 1541074 1541316 . - 0 Parent=mRNA23 ENm001 VEGA_Known CDS 1547552 1547653 . - 0 Parent=mRNA23 ENm001 VEGA_Known exon 1547552 1547653 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1549038 1549170 . - 1 Parent=mRNA23 ENm001 VEGA_Known exon 1549038 1549170 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1550601 1550664 . - 2 Parent=mRNA23 ENm001 VEGA_Known exon 1550601 1550664 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1554081 1554266 . - 2 Parent=mRNA23 ENm001 VEGA_Known exon 1554081 1554266 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1554586 1554791 . - 1 Parent=mRNA23 ENm001 VEGA_Known exon 1554586 1554791 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1557623 1557801 . - 0 Parent=mRNA23 ENm001 VEGA_Known exon 1557623 1557801 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1564447 1564634 . - 2 Parent=mRNA23 ENm001 VEGA_Known exon 1564447 1564634 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1564803 1564955 . - 2 Parent=mRNA23 ENm001 VEGA_Known exon 1564803 1564955 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1575365 1575464 . - 0 Parent=mRNA23 ENm001 VEGA_Known exon 1575365 1575464 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1575547 1575633 . - 0 Parent=mRNA23 ENm001 VEGA_Known exon 1575547 1575633 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1586089 1586168 . - 2 Parent=mRNA23 ENm001 VEGA_Known exon 1586089 1586168 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1587409 1587504 . - 2 Parent=mRNA23 ENm001 VEGA_Known exon 1587409 1587504 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1589969 1590244 . - 2 Parent=mRNA23 ENm001 VEGA_Known exon 1589969 1590244 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1596593 1596710 . - 0 Parent=mRNA23 ENm001 VEGA_Known exon 1596593 1596710 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1607045 1607299 . - 0 Parent=mRNA23 ENm001 VEGA_Known exon 1607045 1607299 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1609975 1610125 . - 1 Parent=mRNA23 ENm001 VEGA_Known exon 1609975 1610125 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1612396 1612495 . - 2 Parent=mRNA23 ENm001 VEGA_Known exon 1612396 1612495 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1613785 1613988 . - 2 Parent=mRNA23 ENm001 VEGA_Known exon 1613785 1613988 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1620662 1622315 . - 0 Parent=mRNA23 ENm001 VEGA_Known exon 1620662 1622315 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1640299 1640523 . - 0 Parent=mRNA23 ENm001 VEGA_Known exon 1640299 1640523 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1690743 1690850 . - 0 Parent=mRNA23 ENm001 VEGA_Known exon 1690743 1690850 . - . Parent=mRNA23 ENm001 VEGA_Known CDS 1702869 1702949 . - 0 Parent=mRNA23 ENm001 VEGA_Known exon 1702869 1703041 . - . Parent=mRNA23 ENm001 . mRNA 1622120 1701172 . - . ID=mRNA24;Parent=gene11 ENm001 VEGA_Known CDS 1622120 1622315 . - 0 Parent=mRNA24 ENm001 VEGA_Known exon 1622120 1622315 . - . Parent=mRNA24 ENm001 VEGA_Known CDS 1640299 1640523 . - 0 Parent=mRNA24 ENm001 VEGA_Known exon 1640299 1640523 . - . Parent=mRNA24 ENm001 VEGA_Known CDS 1690743 1690805 . - 0 Parent=mRNA24 ENm001 VEGA_Known exon 1690743 1690850 . - . Parent=mRNA24 ENm001 VEGA_Known exon 1701124 1701172 . - . Parent=mRNA24 ### genometools-1.5.1/testdata/gt_gff3_prob_6.in000066400000000000000000000034021211610345200207720ustar00rootroot00000000000000##gff-version 3 ##sequence-region chrX 122459947 153939754 chrX ENCODE gene 122459947 122480545 . - . ID=gene1;Name=RP5-1189B24.5-003;name2=THOC2 chrX ENCODE exon 122459947 122460724 . - . Parent=gene1 chrX ENCODE exon 122470304 122470349 . - . Parent=gene1 chrX ENCODE exon 122470826 122470902 . - . Parent=gene1 chrX ENCODE exon 122472785 122472942 . - . Parent=gene1 chrX ENCODE exon 122473025 122473094 . - . Parent=gene1 chrX ENCODE exon 122473438 122473575 . - . Parent=gene1 chrX ENCODE exon 122478787 122478822 . - . Parent=gene1 chrX ENCODE exon 122480293 122480351 . - . Parent=gene1 chrX ENCODE exon 122480543 122480545 . - . Parent=gene1 chrX ENCODE gene 122459955 122482231 . - . ID=gene2;Name=RP5-1189B24.5-009;name2=THOC2 chrX ENCODE exon 122459955 122463134 . - . Parent=gene2 chrX ENCODE exon 122470304 122470349 . - . Parent=gene2 chrX ENCODE CDS 122470324 122470349 . - . Parent=gene2 chrX ENCODE exon 122470826 122470902 . - . Parent=gene2 chrX ENCODE CDS 122470826 122470902 . - . Parent=gene2 chrX ENCODE exon 122472785 122472942 . - . Parent=gene2 chrX ENCODE CDS 122472785 122472942 . - . Parent=gene2 chrX ENCODE exon 122473025 122473094 . - . Parent=gene2 chrX ENCODE CDS 122473025 122473094 . - . Parent=gene2 chrX ENCODE exon 122473438 122473575 . - . Parent=gene2 chrX ENCODE CDS 122473438 122473575 . - . Parent=gene2 chrX ENCODE exon 122478787 122478903 . - . Parent=gene2 chrX ENCODE CDS 122478787 122478903 . - . Parent=gene2 chrX ENCODE exon 122480293 122480351 . - . Parent=gene2 chrX ENCODE CDS 122480293 122480351 . - . Parent=gene2 chrX ENCODE exon 122480543 122480973 . - . Parent=gene2 chrX ENCODE CDS 122480543 122480973 . - . Parent=gene2 chrX ENCODE exon 122482144 122482231 . - . Parent=gene2 chrX ENCODE CDS 122482144 122482231 . - . Parent=gene2 genometools-1.5.1/testdata/gt_gff3_prob_7.in000066400000000000000000000033341211610345200207770ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq0 1 135606 # CH478465 seq0 Genbank LTR_retrotransposon 3874 4142 . ? . ID=LTRret0 seq0 Genbank LTR_retrotransposon 57759 59137 . ? . ID=LTRret1 seq0 Genbank LTR_retrotransposon 58703 63379 . ? . ID=LTRret2 seq0 Genbank LTR_retrotransposon 63362 63799 . ? . ID=LTRret3 seq0 Genbank LTR_retrotransposon 63793 64472 . ? . ID=LTRret4 seq0 Genbank LTR_retrotransposon 82889 83299 . ? . ID=LTRret5 seq0 Genbank LTR_retrotransposon 83296 84549 . ? . ID=LTRret6 seq0 Genbank LTR_retrotransposon 84542 87203 . ? . ID=LTRret7 seq0 Genbank LTR_retrotransposon 119186 123973 . ? . ID=LTRret8 ##sequence-region seq1 1 163182 # CH478464 seq1 Genbank LTR_retrotransposon 67057 67156 . ? . ID=LTRret9 seq1 Genbank LTR_retrotransposon 74405 74533 . ? . ID=LTRret10 seq1 Genbank LTR_retrotransposon 74817 74954 . ? . ID=LTRret11 seq1 Genbank LTR_retrotransposon 83694 84311 . ? . ID=LTRret12 seq1 Genbank LTR_retrotransposon 106946 107130 . ? . ID=LTRret13 seq1 Genbank LTR_retrotransposon 114751 115665 . ? . ID=LTRret14 seq1 Genbank LTR_retrotransposon 117806 117952 . ? . ID=LTRret15 seq1 Genbank LTR_retrotransposon 121320 121492 . ? . ID=LTRret16 seq1 Genbank LTR_retrotransposon 129429 129553 . ? . ID=LTRret17 seq1 Genbank LTR_retrotransposon 129536 129703 . ? . ID=LTRret18 seq1 Genbank LTR_retrotransposon 129694 129847 . ? . ID=LTRret19 seq1 Genbank LTR_retrotransposon 138908 139082 . ? . ID=LTRret20 seq1 Genbank LTR_retrotransposon 147916 148117 . ? . ID=LTRret21 seq1 Genbank LTR_retrotransposon 149265 149964 . ? . ID=LTRret22 seq1 Genbank LTR_retrotransposon 153048 153242 . ? . ID=LTRret23 seq1 Genbank LTR_retrotransposon 153232 153342 . ? . ID=LTRret24 seq1 Genbank LTR_retrotransposon 153809 154103 . ? . ID=LTRret25 genometools-1.5.1/testdata/gt_gff3_prob_7.sorted000066400000000000000000000027501211610345200216720ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq0 1 135606 ##sequence-region seq1 1 163182 # CH478465 # CH478464 seq0 Genbank LTR_retrotransposon 3874 4142 . ? . . seq0 Genbank LTR_retrotransposon 57759 59137 . ? . . seq0 Genbank LTR_retrotransposon 58703 63379 . ? . . seq0 Genbank LTR_retrotransposon 63362 63799 . ? . . seq0 Genbank LTR_retrotransposon 63793 64472 . ? . . seq0 Genbank LTR_retrotransposon 82889 83299 . ? . . seq0 Genbank LTR_retrotransposon 83296 84549 . ? . . seq0 Genbank LTR_retrotransposon 84542 87203 . ? . . seq0 Genbank LTR_retrotransposon 119186 123973 . ? . . seq1 Genbank LTR_retrotransposon 67057 67156 . ? . . seq1 Genbank LTR_retrotransposon 74405 74533 . ? . . seq1 Genbank LTR_retrotransposon 74817 74954 . ? . . seq1 Genbank LTR_retrotransposon 83694 84311 . ? . . seq1 Genbank LTR_retrotransposon 106946 107130 . ? . . seq1 Genbank LTR_retrotransposon 114751 115665 . ? . . seq1 Genbank LTR_retrotransposon 117806 117952 . ? . . seq1 Genbank LTR_retrotransposon 121320 121492 . ? . . seq1 Genbank LTR_retrotransposon 129429 129553 . ? . . seq1 Genbank LTR_retrotransposon 129536 129703 . ? . . seq1 Genbank LTR_retrotransposon 129694 129847 . ? . . seq1 Genbank LTR_retrotransposon 138908 139082 . ? . . seq1 Genbank LTR_retrotransposon 147916 148117 . ? . . seq1 Genbank LTR_retrotransposon 149265 149964 . ? . . seq1 Genbank LTR_retrotransposon 153048 153242 . ? . . seq1 Genbank LTR_retrotransposon 153232 153342 . ? . . seq1 Genbank LTR_retrotransposon 153809 154103 . ? . . genometools-1.5.1/testdata/gt_gff3_prob_7.unsorted000066400000000000000000000027501211610345200222350ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq0 1 135606 # CH478465 seq0 Genbank LTR_retrotransposon 3874 4142 . ? . . seq0 Genbank LTR_retrotransposon 57759 59137 . ? . . seq0 Genbank LTR_retrotransposon 58703 63379 . ? . . seq0 Genbank LTR_retrotransposon 63362 63799 . ? . . seq0 Genbank LTR_retrotransposon 63793 64472 . ? . . seq0 Genbank LTR_retrotransposon 82889 83299 . ? . . seq0 Genbank LTR_retrotransposon 83296 84549 . ? . . seq0 Genbank LTR_retrotransposon 84542 87203 . ? . . seq0 Genbank LTR_retrotransposon 119186 123973 . ? . . ##sequence-region seq1 1 163182 # CH478464 seq1 Genbank LTR_retrotransposon 67057 67156 . ? . . seq1 Genbank LTR_retrotransposon 74405 74533 . ? . . seq1 Genbank LTR_retrotransposon 74817 74954 . ? . . seq1 Genbank LTR_retrotransposon 83694 84311 . ? . . seq1 Genbank LTR_retrotransposon 106946 107130 . ? . . seq1 Genbank LTR_retrotransposon 114751 115665 . ? . . seq1 Genbank LTR_retrotransposon 117806 117952 . ? . . seq1 Genbank LTR_retrotransposon 121320 121492 . ? . . seq1 Genbank LTR_retrotransposon 129429 129553 . ? . . seq1 Genbank LTR_retrotransposon 129536 129703 . ? . . seq1 Genbank LTR_retrotransposon 129694 129847 . ? . . seq1 Genbank LTR_retrotransposon 138908 139082 . ? . . seq1 Genbank LTR_retrotransposon 147916 148117 . ? . . seq1 Genbank LTR_retrotransposon 149265 149964 . ? . . seq1 Genbank LTR_retrotransposon 153048 153242 . ? . . seq1 Genbank LTR_retrotransposon 153232 153342 . ? . . seq1 Genbank LTR_retrotransposon 153809 154103 . ? . . genometools-1.5.1/testdata/gt_gff3_prob_8.in000066400000000000000000000002401211610345200207710ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene ##sequence-region cause_prob 1 1000 gDNA . exon 100 200 . - . Parent=gene genometools-1.5.1/testdata/gt_gff3_prob_8.out000066400000000000000000000002461211610345200212000ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene1 gDNA . exon 100 200 . - . Parent=gene1 ### ##sequence-region cause_prob 1 1000 genometools-1.5.1/testdata/gt_gff3_prob_9.in000066400000000000000000000002071211610345200207750ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene # cause prob gDNA . exon 100 200 . - . Parent=gene genometools-1.5.1/testdata/gt_gff3_prob_9.out000066400000000000000000000002151211610345200211750ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . gene 100 200 . - . ID=gene1 gDNA . exon 100 200 . - . Parent=gene1 ### # cause prob genometools-1.5.1/testdata/gt_gff3_range_check.gff3000066400000000000000000000001171211610345200222530ustar00rootroot00000000000000##gff-version 3 ##sequence-region sr 1000 2000 sr . gene 1000 2001 . + . . genometools-1.5.1/testdata/gt_gff3_range_check2.gff3000066400000000000000000000001161211610345200223340ustar00rootroot00000000000000##gff-version 3 ##sequence-region sr 1000 2000 sr . gene 900 2000 . + . . genometools-1.5.1/testdata/gt_gff3_range_check3.gff3000066400000000000000000000001161211610345200223350ustar00rootroot00000000000000##gff-version 3 ##sequence-region sr 1000 2000 sr . gene 900 2001 . + . . genometools-1.5.1/testdata/gt_gff3_test_1.in000066400000000000000000000002071211610345200210020ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1 ctg123 . gene 10000 19000 . + . ID=gene2 genometools-1.5.1/testdata/gt_gff3_test_1.out000066400000000000000000000001771211610345200212110ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ### ctg123 . gene 10000 19000 . + . ### genometools-1.5.1/testdata/gt_gff3_test_10.gff3000066400000000000000000000001001211610345200212710ustar00rootroot00000000000000##gff-version 3 ##sequence-region testregion 1 2 testregion . genometools-1.5.1/testdata/gt_gff3_test_11.gff3000066400000000000000000000001421211610345200213000ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . geNe 1000 9000 . + . ID=gene00001 genometools-1.5.1/testdata/gt_gff3_test_12.gff3000066400000000000000000000001561211610345200213060ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001;ID=gene0001 genometools-1.5.1/testdata/gt_gff3_test_13.gff3000066400000000000000000000001531211610345200213040ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001=gene0001 genometools-1.5.1/testdata/gt_gff3_test_14.gff3000066400000000000000000000002401211610345200213020ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene00001=bla genometools-1.5.1/testdata/gt_gff3_test_15.gff3000066400000000000000000000001421211610345200213040ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 CTG123 . gene 1000 9000 . + . ID=gene00001 genometools-1.5.1/testdata/gt_gff3_test_15.out000066400000000000000000000001741211610345200212730ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ##sequence-region CTG123 1000 9000 CTG123 . gene 1000 9000 . + . . genometools-1.5.1/testdata/gt_gff3_test_16.gff3000066400000000000000000000001271211610345200213100ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . . genometools-1.5.1/testdata/gt_gff3_test_17.gff3000066400000000000000000000000751211610345200213130ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ##foo genometools-1.5.1/testdata/gt_gff3_test_18.gff3000066400000000000000000000001371211610345200213130ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . Name=EDEN genometools-1.5.1/testdata/gt_gff3_test_19.gff3000066400000000000000000000000201211610345200213030ustar00rootroot00000000000000##gff-version 3 genometools-1.5.1/testdata/gt_gff3_test_2.gff3000066400000000000000000000000221211610345200212150ustar00rootroot00000000000000##gff-versIon 3 genometools-1.5.1/testdata/gt_gff3_test_20.gff3000066400000000000000000000000201211610345200212730ustar00rootroot00000000000000##gff-version X genometools-1.5.1/testdata/gt_gff3_test_21.gff3000066400000000000000000000000201211610345200212740ustar00rootroot00000000000000##gff-version 2 genometools-1.5.1/testdata/gt_gff3_test_22.gff3000066400000000000000000000010571211610345200213100ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1,mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA1,mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA1,mRNA2,mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA1,mRNA2,mRNA3 ### genometools-1.5.1/testdata/gt_gff3_test_23.gff3000066400000000000000000000004121211610345200213030ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . LTR_retrotransposon 100 200 . - . . gDNA . LTR_retrotransposon 300 400 . - . . gDNA . LTR_retrotransposon 500 600 . - . . gDNA . LTR_retrotransposon 700 800 . - . . gDNA . LTR_retrotransposon 900 1000 . - . . genometools-1.5.1/testdata/gt_gff3_test_24.gff3000066400000000000000000000004501211610345200213060ustar00rootroot00000000000000##gff-version 3 ##sequence-region gDNA 1 1000 gDNA . LTR_retrotransposon 100 200 . - . ID=LTR1 gDNA . LTR_retrotransposon 300 400 . - . ID=LTR2 gDNA . LTR_retrotransposon 500 600 . - . ID=LTR3 gDNA . LTR_retrotransposon 700 800 . - . ID=LTR4 gDNA . LTR_retrotransposon 900 1000 . - . ID=LTR5 genometools-1.5.1/testdata/gt_gff3_test_25.gff3000066400000000000000000000001521211610345200213060ustar00rootroot00000000000000##gff-version 3 CTG123 . gene 1000 9000 . + . ID=gene00001 CTG123 . gene 10000 11000 . + . ID=gene00002 genometools-1.5.1/testdata/gt_gff3_test_25.out000066400000000000000000000001721211610345200212720ustar00rootroot00000000000000##gff-version 3 ##sequence-region CTG123 1000 11000 CTG123 . gene 1000 9000 . + . . CTG123 . gene 10000 11000 . + . . genometools-1.5.1/testdata/gt_gff3_test_26.gff3000066400000000000000000000001101211610345200213010ustar00rootroot00000000000000##gff-version 3 CTG123 . gene 1000 9000 . + . ID=gene00001;Parent=nil genometools-1.5.1/testdata/gt_gff3_test_27.gff3000066400000000000000000000001361211610345200213120ustar00rootroot00000000000000##gff-version 3 CTG123 . gene 1000 9000 . + . ID=gene00001 ##sequence-region CTG123 1 10000 genometools-1.5.1/testdata/gt_gff3_test_3.gff3000066400000000000000000000000231211610345200212170ustar00rootroot00000000000000##gff-version 3 genometools-1.5.1/testdata/gt_gff3_test_4.gff3000066400000000000000000000000441211610345200212230ustar00rootroot00000000000000##gff-version 3 ##sequence-region genometools-1.5.1/testdata/gt_gff3_test_5.gff3000066400000000000000000000000571211610345200212300ustar00rootroot00000000000000##gff-version 3 ##sequence-region testregion genometools-1.5.1/testdata/gt_gff3_test_6.gff3000066400000000000000000000000621211610345200212250ustar00rootroot00000000000000##gff-version 3 ##sequence-region testregion 1 genometools-1.5.1/testdata/gt_gff3_test_7.gff3000066400000000000000000000000611211610345200212250ustar00rootroot00000000000000##gff-version 3 ##sequence-region testregion x genometools-1.5.1/testdata/gt_gff3_test_8.gff3000066400000000000000000000000631211610345200212300ustar00rootroot00000000000000##gff-version 3 ##sequence-region testregion 1 x genometools-1.5.1/testdata/gt_gff3_test_9.gff3000066400000000000000000000000631211610345200212310ustar00rootroot00000000000000##gff-version 3 ##sequence-region testregion 2 1 genometools-1.5.1/testdata/gt_gff3_undefined_range.gff3000066400000000000000000000004451211610345200231430ustar00rootroot00000000000000##gff-version 3 ##sequence-region NG_017013.1 1 26144 NG_017013.1 annotation remark . . . . . comment=foo NG_017013.1 feature STS 23478 24350 . + . db_xref=UniSTS%3A277840;standard_name=TP53_278 NG_017013.1 feature STS 23999 24075 . + . db_xref=UniSTS%3A59997;standard_name=WI-20715;gene=TP53 genometools-1.5.1/testdata/gt_gff3_undefined_range_parent.gff3000066400000000000000000000004671211610345200245200ustar00rootroot00000000000000##gff-version 3 ##sequence-region NG_017013.1 1 26144 NG_017013.1 annotation remark . . . . . comment=foo;ID=bar NG_017013.1 feature STS 23478 24350 . + . db_xref=UniSTS%3A277840;standard_name=TP53_278;Parent=bar NG_017013.1 feature STS 23999 24075 . + . db_xref=UniSTS%3A59997;standard_name=WI-20715;gene=TP53 genometools-1.5.1/testdata/gt_gff3_undefined_range_tidy.gff3000066400000000000000000000003651211610345200241750ustar00rootroot00000000000000##gff-version 3 ##sequence-region NG_017013.1 1 26144 NG_017013.1 feature STS 23478 24350 . + . db_xref=UniSTS%3A277840;standard_name=TP53_278 NG_017013.1 feature STS 23999 24075 . + . db_xref=UniSTS%3A59997;standard_name=WI-20715;gene=TP53 genometools-1.5.1/testdata/gt_gtf_to_gff3_test.gff3000066400000000000000000000215521211610345200223510ustar00rootroot00000000000000##gff-version 3 ##sequence-region Hs.22.ENST00000216085.2 27980398 27986169 ##sequence-region Hs.16.ENST00000219207.1 57024629 57053191 ##sequence-region Hs.1.ENST00000289753.1 19137760 19152035 ##sequence-region Hs.2.ENST00000233735.1 79305643 79308243 ##sequence-region Hs.3.ENST00000302762.1 156827614 156853401 ##sequence-region Hs.19.ENST00000301452.1 6246725 6273562 ##sequence-region Hs.5.ENST00000194152.1 140484730 140488350 ##sequence-region Hs.1.ENST00000294816.1 161868957 162021049 ##sequence-region Hs.22.ENST00000249079.1 36582572 36592644 Hs.2.ENST00000233735.1 . gene 79305643 79308243 . + . ID=gene1 Hs.2.ENST00000233735.1 . mRNA 79305643 79308243 . + . ID=mRNA1;Parent=gene1 Hs.2.ENST00000233735.1 EnsEMBL exon 79305643 79305759 . + . Parent=mRNA1 Hs.2.ENST00000233735.1 EnsEMBL CDS 79305696 79305759 . + 0 Parent=mRNA1 Hs.2.ENST00000233735.1 EnsEMBL exon 79306396 79306514 . + . Parent=mRNA1 Hs.2.ENST00000233735.1 EnsEMBL CDS 79306396 79306514 . + 2 Parent=mRNA1 Hs.2.ENST00000233735.1 EnsEMBL exon 79306822 79306959 . + . Parent=mRNA1 Hs.2.ENST00000233735.1 EnsEMBL CDS 79306822 79306959 . + 0 Parent=mRNA1 Hs.2.ENST00000233735.1 EnsEMBL exon 79307675 79307786 . + . Parent=mRNA1 Hs.2.ENST00000233735.1 EnsEMBL CDS 79307675 79307786 . + 0 Parent=mRNA1 Hs.2.ENST00000233735.1 EnsEMBL CDS 79307982 79308046 . + 2 Parent=mRNA1 Hs.2.ENST00000233735.1 EnsEMBL exon 79307982 79308243 . + . Parent=mRNA1 Hs.2.ENST00000233735.1 EnsEMBL CDS 79308047 79308049 . + 0 Parent=mRNA1 ### Hs.22.ENST00000249079.1 . gene 36582572 36592644 . - . ID=gene2 Hs.22.ENST00000249079.1 . mRNA 36582572 36592644 . - . ID=mRNA2;Parent=gene2 Hs.22.ENST00000249079.1 EnsEMBL exon 36582572 36583292 . - . Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL CDS 36583221 36583223 . - 0 Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL CDS 36583224 36583292 . - 0 Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL exon 36583463 36583563 . - . Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL CDS 36583463 36583563 . - 2 Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL exon 36584088 36584219 . - . Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL CDS 36584088 36584219 . - 2 Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL exon 36586327 36586509 . - . Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL CDS 36586327 36586509 . - 2 Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL exon 36590506 36590568 . - . Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL CDS 36590506 36590568 . - 2 Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL CDS 36592093 36592195 . - 0 Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL exon 36592093 36592204 . - . Parent=mRNA2 Hs.22.ENST00000249079.1 EnsEMBL exon 36592395 36592644 . - . Parent=mRNA2 ### Hs.1.ENST00000289753.1 . gene 19137760 19152035 . + . ID=gene3 Hs.1.ENST00000289753.1 . mRNA 19137760 19152035 . + . ID=mRNA3;Parent=gene3 Hs.1.ENST00000289753.1 EnsEMBL exon 19137760 19138940 . + . Parent=mRNA3 Hs.1.ENST00000289753.1 EnsEMBL CDS 19138227 19138940 . + 0 Parent=mRNA3 Hs.1.ENST00000289753.1 EnsEMBL exon 19151040 19151198 . + . Parent=mRNA3 Hs.1.ENST00000289753.1 EnsEMBL CDS 19151040 19151198 . + 0 Parent=mRNA3 Hs.1.ENST00000289753.1 EnsEMBL CDS 19151392 19151838 . + 0 Parent=mRNA3 Hs.1.ENST00000289753.1 EnsEMBL exon 19151392 19152035 . + . Parent=mRNA3 Hs.1.ENST00000289753.1 EnsEMBL CDS 19151839 19151841 . + 0 Parent=mRNA3 ### Hs.16.ENST00000219207.1 . gene 57024629 57053191 . - . ID=gene4 Hs.16.ENST00000219207.1 . mRNA 57024629 57053191 . - . ID=mRNA4;Parent=gene4 Hs.16.ENST00000219207.1 EnsEMBL exon 57024629 57025561 . - . Parent=mRNA4 Hs.16.ENST00000219207.1 EnsEMBL CDS 57025445 57025447 . - 0 Parent=mRNA4 Hs.16.ENST00000219207.1 EnsEMBL CDS 57025448 57025561 . - 0 Parent=mRNA4 Hs.16.ENST00000219207.1 EnsEMBL exon 57026994 57027116 . - . Parent=mRNA4 Hs.16.ENST00000219207.1 EnsEMBL CDS 57026994 57027116 . - 0 Parent=mRNA4 Hs.16.ENST00000219207.1 EnsEMBL exon 57030429 57030602 . - . Parent=mRNA4 Hs.16.ENST00000219207.1 EnsEMBL CDS 57030429 57030602 . - 0 Parent=mRNA4 Hs.16.ENST00000219207.1 EnsEMBL CDS 57052938 57053072 . - 0 Parent=mRNA4 Hs.16.ENST00000219207.1 EnsEMBL exon 57052938 57053191 . - . Parent=mRNA4 ### Hs.3.ENST00000302762.1 . gene 156827614 156853401 . - . ID=gene5 Hs.3.ENST00000302762.1 . mRNA 156827614 156853401 . - . ID=mRNA5;Parent=gene5 Hs.3.ENST00000302762.1 EnsEMBL CDS 156827614 156827616 . - 0 Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL exon 156827614 156827781 . - . Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL CDS 156827617 156827781 . - 0 Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL exon 156829092 156829307 . - . Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL CDS 156829092 156829307 . - 0 Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL exon 156832872 156832989 . - . Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL CDS 156832872 156832989 . - 1 Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL exon 156833261 156833445 . - . Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL CDS 156833261 156833445 . - 0 Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL exon 156841836 156842023 . - . Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL CDS 156841836 156842023 . - 2 Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL exon 156852627 156853401 . - . Parent=mRNA5 Hs.3.ENST00000302762.1 EnsEMBL CDS 156852627 156853401 . - 0 Parent=mRNA5 ### Hs.19.ENST00000301452.1 . gene 6246725 6273562 . - . ID=gene6 Hs.19.ENST00000301452.1 . mRNA 6246725 6273562 . - . ID=mRNA6;Parent=gene6 Hs.19.ENST00000301452.1 EnsEMBL CDS 6246725 6246727 . - 0 Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL exon 6246725 6246893 . - . Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL CDS 6246728 6246893 . - 1 Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL exon 6247164 6247301 . - . Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL CDS 6247164 6247301 . - 1 Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL exon 6249708 6249845 . - . Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL CDS 6249708 6249845 . - 1 Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL exon 6252160 6252301 . - . Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL CDS 6252160 6252301 . - 2 Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL exon 6252396 6252510 . - . Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL CDS 6252396 6252510 . - 0 Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL exon 6273470 6273562 . - . Parent=mRNA6 Hs.19.ENST00000301452.1 EnsEMBL CDS 6273470 6273562 . - 0 Parent=mRNA6 ### Hs.22.ENST00000216085.2 . gene 27980398 27986169 . - . ID=gene7 Hs.22.ENST00000216085.2 . mRNA 27980398 27986169 . - . ID=mRNA7;Parent=gene7 Hs.22.ENST00000216085.2 EnsEMBL exon 27980398 27980780 . - . Parent=mRNA7 Hs.22.ENST00000216085.2 EnsEMBL CDS 27980603 27980605 . - 0 Parent=mRNA7 Hs.22.ENST00000216085.2 EnsEMBL CDS 27980606 27980780 . - 1 Parent=mRNA7 Hs.22.ENST00000216085.2 EnsEMBL exon 27980869 27981156 . - . Parent=mRNA7 Hs.22.ENST00000216085.2 EnsEMBL CDS 27980869 27981156 . - 1 Parent=mRNA7 Hs.22.ENST00000216085.2 EnsEMBL exon 27981245 27981407 . - . Parent=mRNA7 Hs.22.ENST00000216085.2 EnsEMBL CDS 27981245 27981407 . - 2 Parent=mRNA7 Hs.22.ENST00000216085.2 EnsEMBL exon 27984378 27984761 . - . Parent=mRNA7 Hs.22.ENST00000216085.2 EnsEMBL CDS 27984378 27984761 . - 2 Parent=mRNA7 Hs.22.ENST00000216085.2 EnsEMBL exon 27986022 27986169 . - . Parent=mRNA7 Hs.22.ENST00000216085.2 EnsEMBL CDS 27986022 27986169 . - 0 Parent=mRNA7 ### Hs.5.ENST00000194152.1 . gene 140484730 140488350 . + . ID=gene8 Hs.5.ENST00000194152.1 . mRNA 140484730 140488350 . + . ID=mRNA8;Parent=gene8 Hs.5.ENST00000194152.1 EnsEMBL CDS 140484730 140487114 . + 0 Parent=mRNA8 Hs.5.ENST00000194152.1 EnsEMBL exon 140484730 140488350 . + . Parent=mRNA8 Hs.5.ENST00000194152.1 EnsEMBL CDS 140487115 140487117 . + 0 Parent=mRNA8 ### Hs.1.ENST00000294816.1 . gene 161868957 162021049 . - . ID=gene9 Hs.1.ENST00000294816.1 . mRNA 161868957 162021049 . - . ID=mRNA9;Parent=gene9 Hs.1.ENST00000294816.1 EnsEMBL exon 161868957 161869309 . - . Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL CDS 161869149 161869151 . - 0 Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL CDS 161869152 161869309 . - 2 Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL exon 161871133 161871303 . - . Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL CDS 161871133 161871303 . - 2 Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL exon 161873332 161873401 . - . Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL CDS 161873332 161873401 . - 0 Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL exon 161875968 161876045 . - . Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL CDS 161875968 161876045 . - 0 Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL exon 161878910 161879082 . - . Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL CDS 161878910 161879082 . - 2 Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL exon 161914677 161914909 . - . Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL CDS 161914677 161914909 . - 1 Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL exon 162018345 162018531 . - . Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL CDS 162018345 162018531 . - 2 Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL CDS 162020753 162020828 . - 0 Parent=mRNA9 Hs.1.ENST00000294816.1 EnsEMBL exon 162020753 162021049 . - . Parent=mRNA9 ### genometools-1.5.1/testdata/gt_gtf_to_gff3_test.gtf000066400000000000000000000403641211610345200223060ustar00rootroot00000000000000Hs.3.ENST00000302762.1 EnsEMBL exon 156852627 156853401 . - . gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001330091.1"; Hs.3.ENST00000302762.1 EnsEMBL CDS 156852627 156853401 . - 0 gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001330091.1"; Hs.3.ENST00000302762.1 EnsEMBL start_codon 156853399 156853401 . - 0 gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001330091.1"; Hs.3.ENST00000302762.1 EnsEMBL exon 156841836 156842023 . - . gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001182133.1"; Hs.3.ENST00000302762.1 EnsEMBL CDS 156841836 156842023 . - 2 gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001182133.1"; Hs.3.ENST00000302762.1 EnsEMBL exon 156833261 156833445 . - . gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001169591.1"; Hs.3.ENST00000302762.1 EnsEMBL CDS 156833261 156833445 . - 0 gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001169591.1"; Hs.3.ENST00000302762.1 EnsEMBL exon 156832872 156832989 . - . gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001169581.1"; Hs.3.ENST00000302762.1 EnsEMBL CDS 156832872 156832989 . - 1 gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001169581.1"; Hs.3.ENST00000302762.1 EnsEMBL exon 156829092 156829307 . - . gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001169576.1"; Hs.3.ENST00000302762.1 EnsEMBL CDS 156829092 156829307 . - 0 gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001169576.1"; Hs.3.ENST00000302762.1 EnsEMBL exon 156827614 156827781 . - . gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001318604.1"; Hs.3.ENST00000302762.1 EnsEMBL CDS 156827617 156827781 . - 0 gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001318604.1"; Hs.3.ENST00000302762.1 EnsEMBL stop_codon 156827614 156827616 . - 0 gene_id "ENSG00000169359.2"; transcript_id "ENST00000302762.1"; exon_id "ENSE00001318604.1"; Hs.22.ENST00000216085.2 EnsEMBL exon 27986022 27986169 . - . gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000879709.2"; Hs.22.ENST00000216085.2 EnsEMBL CDS 27986022 27986169 . - 0 gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000879709.2"; Hs.22.ENST00000216085.2 EnsEMBL start_codon 27986167 27986169 . - 0 gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000879709.2"; Hs.22.ENST00000216085.2 EnsEMBL exon 27984378 27984761 . - . gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000652009.1"; Hs.22.ENST00000216085.2 EnsEMBL CDS 27984378 27984761 . - 2 gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000652009.1"; Hs.22.ENST00000216085.2 EnsEMBL exon 27981245 27981407 . - . gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000652008.1"; Hs.22.ENST00000216085.2 EnsEMBL CDS 27981245 27981407 . - 2 gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000652008.1"; Hs.22.ENST00000216085.2 EnsEMBL exon 27980869 27981156 . - . gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000652007.1"; Hs.22.ENST00000216085.2 EnsEMBL CDS 27980869 27981156 . - 1 gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000652007.1"; Hs.22.ENST00000216085.2 EnsEMBL exon 27980398 27980780 . - . gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000879708.1"; Hs.22.ENST00000216085.2 EnsEMBL CDS 27980606 27980780 . - 1 gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000879708.1"; Hs.22.ENST00000216085.2 EnsEMBL stop_codon 27980603 27980605 . - 0 gene_id "ENSG00000100263.2"; transcript_id "ENST00000216085.2"; exon_id "ENSE00000879708.1"; Hs.1.ENST00000289753.1 EnsEMBL exon 19137760 19138940 . + . gene_id "ENSG00000158748.1"; transcript_id "ENST00000289753.1"; exon_id "ENSE00001040779.1"; Hs.1.ENST00000289753.1 EnsEMBL CDS 19138227 19138940 . + 0 gene_id "ENSG00000158748.1"; transcript_id "ENST00000289753.1"; exon_id "ENSE00001040779.1"; Hs.1.ENST00000289753.1 EnsEMBL start_codon 19138227 19138229 . + 0 gene_id "ENSG00000158748.1"; transcript_id "ENST00000289753.1"; exon_id "ENSE00001040779.1"; Hs.1.ENST00000289753.1 EnsEMBL exon 19151040 19151198 . + . gene_id "ENSG00000158748.1"; transcript_id "ENST00000289753.1"; exon_id "ENSE00001040777.1"; Hs.1.ENST00000289753.1 EnsEMBL CDS 19151040 19151198 . + 0 gene_id "ENSG00000158748.1"; transcript_id "ENST00000289753.1"; exon_id "ENSE00001040777.1"; Hs.1.ENST00000289753.1 EnsEMBL exon 19151392 19152035 . + . gene_id "ENSG00000158748.1"; transcript_id "ENST00000289753.1"; exon_id "ENSE00001263964.2"; Hs.1.ENST00000289753.1 EnsEMBL CDS 19151392 19151838 . + 0 gene_id "ENSG00000158748.1"; transcript_id "ENST00000289753.1"; exon_id "ENSE00001263964.2"; Hs.1.ENST00000289753.1 EnsEMBL stop_codon 19151839 19151841 . + 0 gene_id "ENSG00000158748.1"; transcript_id "ENST00000289753.1"; exon_id "ENSE00001263964.2"; Hs.19.ENST00000301452.1 EnsEMBL exon 6273470 6273562 . - . gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001312002.1"; Hs.19.ENST00000301452.1 EnsEMBL CDS 6273470 6273562 . - 0 gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001312002.1"; Hs.19.ENST00000301452.1 EnsEMBL start_codon 6273560 6273562 . - 0 gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001312002.1"; Hs.19.ENST00000301452.1 EnsEMBL exon 6252396 6252510 . - . gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001116785.1"; Hs.19.ENST00000301452.1 EnsEMBL CDS 6252396 6252510 . - 0 gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001116785.1"; Hs.19.ENST00000301452.1 EnsEMBL exon 6252160 6252301 . - . gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001116786.1"; Hs.19.ENST00000301452.1 EnsEMBL CDS 6252160 6252301 . - 2 gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001116786.1"; Hs.19.ENST00000301452.1 EnsEMBL exon 6249708 6249845 . - . gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001160540.1"; Hs.19.ENST00000301452.1 EnsEMBL CDS 6249708 6249845 . - 1 gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001160540.1"; Hs.19.ENST00000301452.1 EnsEMBL exon 6247164 6247301 . - . gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001160535.1"; Hs.19.ENST00000301452.1 EnsEMBL CDS 6247164 6247301 . - 1 gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001160535.1"; Hs.19.ENST00000301452.1 EnsEMBL exon 6246725 6246893 . - . gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001160559.1"; Hs.19.ENST00000301452.1 EnsEMBL CDS 6246728 6246893 . - 1 gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001160559.1"; Hs.19.ENST00000301452.1 EnsEMBL stop_codon 6246725 6246727 . - 0 gene_id "ENSG00000167769.1"; transcript_id "ENST00000301452.1"; exon_id "ENSE00001160559.1"; Hs.16.ENST00000219207.1 EnsEMBL exon 57052938 57053191 . - . gene_id "ENSG00000102934.1"; transcript_id "ENST00000219207.1"; exon_id "ENSE00001165318.1"; Hs.16.ENST00000219207.1 EnsEMBL CDS 57052938 57053072 . - 0 gene_id "ENSG00000102934.1"; transcript_id "ENST00000219207.1"; exon_id "ENSE00001165318.1"; Hs.16.ENST00000219207.1 EnsEMBL start_codon 57053070 57053072 . - 0 gene_id "ENSG00000102934.1"; transcript_id "ENST00000219207.1"; exon_id "ENSE00001165318.1"; Hs.16.ENST00000219207.1 EnsEMBL exon 57030429 57030602 . - . gene_id "ENSG00000102934.1"; transcript_id "ENST00000219207.1"; exon_id "ENSE00000852888.1"; Hs.16.ENST00000219207.1 EnsEMBL CDS 57030429 57030602 . - 0 gene_id "ENSG00000102934.1"; transcript_id "ENST00000219207.1"; exon_id "ENSE00000852888.1"; Hs.16.ENST00000219207.1 EnsEMBL exon 57026994 57027116 . - . gene_id "ENSG00000102934.1"; transcript_id "ENST00000219207.1"; exon_id "ENSE00000685165.1"; Hs.16.ENST00000219207.1 EnsEMBL CDS 57026994 57027116 . - 0 gene_id "ENSG00000102934.1"; transcript_id "ENST00000219207.1"; exon_id "ENSE00000685165.1"; Hs.16.ENST00000219207.1 EnsEMBL exon 57024629 57025561 . - . gene_id "ENSG00000102934.1"; transcript_id "ENST00000219207.1"; exon_id "ENSE00001165312.1"; Hs.16.ENST00000219207.1 EnsEMBL CDS 57025448 57025561 . - 0 gene_id "ENSG00000102934.1"; transcript_id "ENST00000219207.1"; exon_id "ENSE00001165312.1"; Hs.16.ENST00000219207.1 EnsEMBL stop_codon 57025445 57025447 . - 0 gene_id "ENSG00000102934.1"; transcript_id "ENST00000219207.1"; exon_id "ENSE00001165312.1"; Hs.1.ENST00000294816.1 EnsEMBL exon 162020753 162021049 . - . gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001291550.1"; Hs.1.ENST00000294816.1 EnsEMBL CDS 162020753 162020828 . - 0 gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001291550.1"; Hs.1.ENST00000294816.1 EnsEMBL start_codon 162020826 162020828 . - 0 gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001291550.1"; Hs.1.ENST00000294816.1 EnsEMBL exon 162018345 162018531 . - . gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001158610.1"; Hs.1.ENST00000294816.1 EnsEMBL CDS 162018345 162018531 . - 2 gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001158610.1"; Hs.1.ENST00000294816.1 EnsEMBL exon 161914677 161914909 . - . gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001158602.1"; Hs.1.ENST00000294816.1 EnsEMBL CDS 161914677 161914909 . - 1 gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001158602.1"; Hs.1.ENST00000294816.1 EnsEMBL exon 161878910 161879082 . - . gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001068374.1"; Hs.1.ENST00000294816.1 EnsEMBL CDS 161878910 161879082 . - 2 gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001068374.1"; Hs.1.ENST00000294816.1 EnsEMBL exon 161875968 161876045 . - . gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001158587.1"; Hs.1.ENST00000294816.1 EnsEMBL CDS 161875968 161876045 . - 0 gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001158587.1"; Hs.1.ENST00000294816.1 EnsEMBL exon 161873332 161873401 . - . gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001158579.1"; Hs.1.ENST00000294816.1 EnsEMBL CDS 161873332 161873401 . - 0 gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001158579.1"; Hs.1.ENST00000294816.1 EnsEMBL exon 161871133 161871303 . - . gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001158569.1"; Hs.1.ENST00000294816.1 EnsEMBL CDS 161871133 161871303 . - 2 gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001158569.1"; Hs.1.ENST00000294816.1 EnsEMBL exon 161868957 161869309 . - . gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001324656.1"; Hs.1.ENST00000294816.1 EnsEMBL CDS 161869152 161869309 . - 2 gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001324656.1"; Hs.1.ENST00000294816.1 EnsEMBL stop_codon 161869149 161869151 . - 0 gene_id "ENSG00000162761.1"; transcript_id "ENST00000294816.1"; exon_id "ENSE00001324656.1"; Hs.22.ENST00000249079.1 EnsEMBL exon 36592395 36592644 . - . gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00001047894.1"; Hs.22.ENST00000249079.1 EnsEMBL exon 36592093 36592204 . - . gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880244.1"; Hs.22.ENST00000249079.1 EnsEMBL CDS 36592093 36592195 . - 0 gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880244.1"; Hs.22.ENST00000249079.1 EnsEMBL start_codon 36592193 36592195 . - 0 gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880244.1"; Hs.22.ENST00000249079.1 EnsEMBL exon 36590506 36590568 . - . gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880243.1"; Hs.22.ENST00000249079.1 EnsEMBL CDS 36590506 36590568 . - 2 gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880243.1"; Hs.22.ENST00000249079.1 EnsEMBL exon 36586327 36586509 . - . gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880242.1"; Hs.22.ENST00000249079.1 EnsEMBL CDS 36586327 36586509 . - 2 gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880242.1"; Hs.22.ENST00000249079.1 EnsEMBL exon 36584088 36584219 . - . gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880241.1"; Hs.22.ENST00000249079.1 EnsEMBL CDS 36584088 36584219 . - 2 gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880241.1"; Hs.22.ENST00000249079.1 EnsEMBL exon 36583463 36583563 . - . gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880240.1"; Hs.22.ENST00000249079.1 EnsEMBL CDS 36583463 36583563 . - 2 gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880240.1"; Hs.22.ENST00000249079.1 EnsEMBL exon 36582572 36583292 . - . gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880239.1"; Hs.22.ENST00000249079.1 EnsEMBL CDS 36583224 36583292 . - 0 gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880239.1"; Hs.22.ENST00000249079.1 EnsEMBL stop_codon 36583221 36583223 . - 0 gene_id "ENSG00000128346.1"; transcript_id "ENST00000249079.1"; exon_id "ENSE00000880239.1"; Hs.2.ENST00000233735.1 EnsEMBL exon 79305643 79305759 . + . gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00001124716.2"; Hs.2.ENST00000233735.1 EnsEMBL CDS 79305696 79305759 . + 0 gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00001124716.2"; Hs.2.ENST00000233735.1 EnsEMBL start_codon 79305696 79305698 . + 0 gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00001124716.2"; Hs.2.ENST00000233735.1 EnsEMBL exon 79306396 79306514 . + . gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00001124706.1"; Hs.2.ENST00000233735.1 EnsEMBL CDS 79306396 79306514 . + 2 gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00001124706.1"; Hs.2.ENST00000233735.1 EnsEMBL exon 79306822 79306959 . + . gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00001124699.1"; Hs.2.ENST00000233735.1 EnsEMBL CDS 79306822 79306959 . + 0 gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00001124699.1"; Hs.2.ENST00000233735.1 EnsEMBL exon 79307675 79307786 . + . gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00001124693.1"; Hs.2.ENST00000233735.1 EnsEMBL CDS 79307675 79307786 . + 0 gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00001124693.1"; Hs.2.ENST00000233735.1 EnsEMBL exon 79307982 79308243 . + . gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00000846820.2"; Hs.2.ENST00000233735.1 EnsEMBL CDS 79307982 79308046 . + 2 gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00000846820.2"; Hs.2.ENST00000233735.1 EnsEMBL stop_codon 79308047 79308049 . + 0 gene_id "ENSG00000115386.2"; transcript_id "ENST00000233735.1"; exon_id "ENSE00000846820.2"; Hs.5.ENST00000194152.1 EnsEMBL exon 140484730 140488350 . + . gene_id "ENSG00000081818.1"; transcript_id "ENST00000194152.1"; exon_id "ENSE00000527102.1"; Hs.5.ENST00000194152.1 EnsEMBL CDS 140484730 140487114 . + 0 gene_id "ENSG00000081818.1"; transcript_id "ENST00000194152.1"; exon_id "ENSE00000527102.1"; Hs.5.ENST00000194152.1 EnsEMBL start_codon 140484730 140484732 . + 0 gene_id "ENSG00000081818.1"; transcript_id "ENST00000194152.1"; exon_id "ENSE00000527102.1"; Hs.5.ENST00000194152.1 EnsEMBL stop_codon 140487115 140487117 . + 0 gene_id "ENSG00000081818.1"; transcript_id "ENST00000194152.1"; exon_id "ENSE00000527102.1"; genometools-1.5.1/testdata/gt_merge_prob_1.in1000066400000000000000000000001271211610345200213210ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . . genometools-1.5.1/testdata/gt_merge_prob_1.in2000066400000000000000000000001311211610345200213150ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 10000 11000 . + . . genometools-1.5.1/testdata/gt_merge_prob_1.out000066400000000000000000000001711211610345200214400ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . . ctg123 . gene 10000 11000 . + . . genometools-1.5.1/testdata/gt_merge_prob_2.in1000066400000000000000000000001351211610345200213210ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 10000 1497228 ctg123 . gene 10000 11000 . + . . genometools-1.5.1/testdata/gt_merge_prob_2.in2000066400000000000000000000001271211610345200213230ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . . genometools-1.5.1/testdata/gt_merge_prob_2.out000066400000000000000000000001711211610345200214410ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . . ctg123 . gene 10000 11000 . + . . genometools-1.5.1/testdata/gt_mmapandread_test_1.in000066400000000000000000000000021211610345200224170ustar00rootroot000000000000001 genometools-1.5.1/testdata/gt_mmapandread_test_2.in000066400000000000000000000000001211610345200224160ustar00rootroot00000000000000genometools-1.5.1/testdata/gt_mmapandread_test_3.in000066400000000000000000000000011211610345200224200ustar00rootroot00000000000000genometools-1.5.1/testdata/gt_mmapandread_test_4.in000066400000000000000000000000001211610345200224200ustar00rootroot00000000000000genometools-1.5.1/testdata/gt_mutate_test_1.fas000066400000000000000000000237321211610345200216270ustar00rootroot00000000000000> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa genometools-1.5.1/testdata/gt_mutate_test_1.out000066400000000000000000000234421211610345200216630ustar00rootroot00000000000000> [mutated with rate 1] aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaacaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa genometools-1.5.1/testdata/gt_mutate_test_2.fas000066400000000000000000000237321211610345200216300ustar00rootroot00000000000000> tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt tttttttttttttttttttttttttttttttttttttttttttttttttt genometools-1.5.1/testdata/gt_mutate_test_2.out000066400000000000000000000234551211610345200216700ustar00rootroot00000000000000> [mutated with rate 1] ttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttgtttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttcttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttcttcttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttatttttttttctttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt genometools-1.5.1/testdata/gt_mutate_test_both.out000066400000000000000000000471121211610345200224570ustar00rootroot00000000000000> [mutated with rate 2] aaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaagaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaataaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatataaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaataaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaataaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa > [mutated with rate 2] tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttgtttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttgtttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttgttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttcttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttctttttttttttttttttgtttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttcttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttatttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttatttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttctttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttatttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttgtttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcctttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttctttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttcttttttttttttttttatttttttttttttttttatttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttgtttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttcttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttcttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttatttttttttttttttttttttttttttttttttttttttttttccttttttttttttttttttttttttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttattttattttttttttttattttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttattttttttttttttttttttcttttttttttttttttttttttttttttattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttctttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttgttttttttttttttattttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttatttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttcttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttgtttttttttttttttttttttttttttttttttttttttttttttttttatttttttgttttatttttttttttttttttttttttttttttttttttttttttttttttttttttgttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt genometools-1.5.1/testdata/gt_regioncov_test_1.out000066400000000000000000000141671211610345200223630ustar00rootroot00000000000000chr1: 147971134, 147980870 147983498, 148035085 148040252, 148053028 148065573, 148077454 148077486, 148113264 148126189, 148132906 148149851, 148158282 148185083, 148187493 148188273, 148245014 148296059, 148324241 148325854, 148369132 148397614, 148468994 chr10: 55232537, 55643814 chr11: 1710216, 1741798 1806113, 1815327 1816795, 1819484 1830776, 1870073 1897368, 1916512 1925084, 1962328 2106918, 2139147 2141735, 2149683 2246301, 2249421 2273451, 2296006 4745076, 4970235 4976789, 4977736 5024332, 5025267 5036456, 5037433 5109498, 5110448 5128815, 5164188 5177541, 5178506 5203270, 5207201 5210484, 5213176 5225889, 5227698 5230996, 5623595 5641363, 5663200 5667495, 5715297 5732547, 5732587 63973122, 63975702 64079674, 64096923 64114689, 64126396 64130222, 64247236 64250959, 64269504 64270437, 64284345 64288654, 64302834 64313185, 64327289 64327564, 64335342 64347435, 64368617 64375690, 64412344 64418594, 64438548 116124096, 116148914 116151036, 116151802 116153646, 116163976 116165293, 116168337 116196629, 116199232 116205632, 116208998 116211677, 116213876 116219328, 116332990 130745583, 131036335 chr12: 38629559, 38786158 38876813, 39049354 39073464, 39125713 chr13: 29419740, 29422625 29674767, 29779621 112349359, 112386812 112392644, 112589483 112604510, 112802054 112808106, 112822996 112825129, 112832621 chr14: 98705377, 98807614 98933836, 98950024 chr15: 41520749, 41590218 41590448, 41611110 41612952, 41747608 41772376, 41778712 41825882, 41882533 41883982, 41904292 41906453, 41947909 41950254, 42003799 chr16: 4043, 9452 12910, 15123 36407, 47669 48058, 66354 67006, 128859 142686, 156767 162846, 163709 166679, 167521 170452, 171180 178969, 219463 224546, 273004 273153, 277216 277441, 342674 356928, 360569 360774, 377114 386726, 402488 415620, 495628 25805568, 26056510 chr18: 23784928, 24011408 59412569, 59422853 59455473, 59462512 59473411, 59480177 59571149, 59623584 59689906, 59754325 59767515, 59823258 chr19: 59061289, 59071503 59074256, 59102718 59104401, 59139007 59158106, 59185281 59187354, 59207735 59235891, 59259019 59289745, 59297812 59297848, 59326955 59333256, 59355432 59355658, 59368756 59368921, 59385478 59385601, 59389333 59396422, 59444674 59446075, 59452976 59469487, 59476851 59491666, 59501764 59510165, 59516221 59536268, 59542233 59557074, 59573977 59618185, 59639892 59651877, 59666706 59668022, 59676223 59700912, 59713709 59735789, 59748865 59776199, 59790839 59796859, 59805367 59820424, 59842155 59847152, 59873622 59927796, 59939815 59941792, 59956316 59973075, 59987310 60006878, 60017784 60019735, 60023279 chr2: 118288456, 118306185 118389284, 118487939 220108604, 220116966 220125073, 220188514 220189094, 220197215 220204397, 220228999 220229174, 220240822 220240956, 220265940 220288087, 220306678 220317554, 220332207 234308291, 234463956 234466370, 234545212 234608043, 234710166 234741323, 234767778 chr20: 33305669, 33328215 33330128, 33336202 33336948, 33343639 33353783, 33463358 33484241, 33505982 33506399, 33563218 33578213, 33580891 33593184, 33608819 33609921, 33658898 33667228, 33672385 33677367, 33752320 33754946, 33793648 chr21: 32669578, 32687206 32706185, 32809570 32870733, 32907047 32922944, 33022183 33028081, 33066040 33066282, 33187913 33320023, 33323374 33364320, 33366596 33459646, 33464824 33524076, 33591409 33618652, 33654038 33679169, 33775369 33779707, 33785897 33798108, 34210154 39468565, 39477647 39477972, 39615355 39636111, 39643443 39674040, 39691685 39699640, 39739601 39739651, 39739894 chr22: 30131552, 30154992 30159903, 30382972 30396796, 30470680 30474498, 30627555 30654061, 30678144 30763573, 30833570 30869547, 30879863 30910979, 30924018 30939019, 30975882 31075426, 31091617 31108123, 31132796 31134388, 31185025 31195217, 31219370 31233093, 31778912 chr5: 55887725, 55937816 56147158, 56227736 56240844, 56248932 56251186, 56303259 131285414, 131375769 131424121, 131426796 131437382, 131439758 131555430, 131707798 131733343, 131759205 131774227, 131839635 131845200, 131854389 131905035, 132007651 132019854, 132024701 132037577, 132046267 132056267, 132101229 132111036, 132170832 132177178, 132180388 132185732, 132194489 132224772, 132231622 132235913, 132238637 132238970, 132267995 141951927, 142057801 142130133, 142374155 chr6: 41411371, 41426603 41578160, 41595568 41622142, 41678100 41712598, 41729962 41759694, 41811975 41812427, 41829825 41845892, 41882727 73808380, 73965295 73975314, 74076809 74119506, 74120739 74129121, 74130615 74134999, 74218720 74228022, 74275680 74282194, 74288344 108382481, 108386086 108469306, 108593751 108593955, 108616706 108639119, 108689157 108722791, 108829951 132221501, 132257988 132311009, 132314206 132658887, 132691426 chr7: 26905852, 26908833 26913216, 26915545 26919043, 26953067 26953911, 26956703 26958255, 26965457 26966575, 26970795 26975297, 26993120 26994016, 26998082 27008262, 27012965 27055524, 27060691 89428340, 89438794 89441555, 89511643 89519150, 89585028 89614336, 90484556 90538330, 90542763 113649061, 113924151 114156160, 114253207 115444498, 115492788 115522078, 115742546 115758790, 115795181 115906410, 116032391 116045075, 116153266 116187332, 116464108 116510636, 116557294 116597227, 116662128 116699789, 116902666 116944656, 117108144 125672607, 126487299 126580795, 126665929 126814623, 126835803 chr8: 118886142, 119193119 119276307, 119279152 chr9: 128768701, 128870136 128878454, 128913915 128922933, 128932271 128936643, 128990779 129017385, 129020095 chrX: 122525028, 122592441 122719109, 122773364 122819597, 122962041 152647816, 152721523 152721563, 152730990 152733851, 152758105 152758625, 152769493 152796798, 152806278 152807871, 152923425 152930592, 152945354 152945529, 152966481 152969001, 152982480 152982659, 153003602 153006119, 153019602 153019777, 153044643 153044871, 153079547 153097741, 153123841 153128404, 153130730 153147246, 153170912 153177831, 153183639 153236208, 153242706 153250325, 153265693 153269812, 153271300 153275760, 153278704 153279349, 153282706 153298194, 153308270 153323310, 153359508 153363183, 153363895 153377111, 153378779 153409569, 153411237 153424440, 153425152 153443950, 153445557 153467233, 153543562 153554739, 153569668 153570663, 153612986 153615327, 153626641 153627767, 153852282 153853601, 153939916 genometools-1.5.1/testdata/gt_regioncov_test_2.out000066400000000000000000000017231211610345200223560ustar00rootroot00000000000000chr1: 147971134, 148468994 chr10: 55232537, 55643814 chr11: 1710216, 2296006 4745076, 5732587 63973122, 64438548 116124096, 116332990 130745583, 131036335 chr12: 38629559, 39125713 chr13: 29419740, 29422625 29674767, 29779621 112349359, 112832621 chr14: 98705377, 98950024 chr15: 41520749, 42003799 chr16: 4043, 495628 25805568, 26056510 chr18: 23784928, 24011408 59412569, 59823258 chr19: 59061289, 60023279 chr2: 118288456, 118487939 220108604, 220332207 234308291, 234767778 chr20: 33305669, 33793648 chr21: 32669578, 34210154 39468565, 39739894 chr22: 30131552, 31778912 chr5: 55887725, 56303259 131285414, 132267995 141951927, 142374155 chr6: 41411371, 41882727 73808380, 74288344 108382481, 108829951 132221501, 132314206 132658887, 132691426 chr7: 26905852, 27060691 89428340, 90542763 113649061, 113924151 114156160, 114253207 115444498, 117108144 125672607, 126835803 chr8: 118886142, 119279152 chr9: 128768701, 129020095 chrX: 122525028, 122962041 152647816, 153939916 genometools-1.5.1/testdata/gt_select_encode.out000066400000000000000000000002151211610345200216720ustar00rootroot00000000000000parsed genome node DAGs: 1352 sequence regions: 20 (total length: 713365500) genes: 1332 protein-coding genes: 1332 exons: 10938 CDSs: 10072 genometools-1.5.1/testdata/gt_select_test.out000066400000000000000000000000671211610345200214210ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 genometools-1.5.1/testdata/gt_select_test_contain.1000-8999000066400000000000000000000000671211610345200233250ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1000 8999 genometools-1.5.1/testdata/gt_select_test_contain.1000-9000000066400000000000000000000014171211610345200232730ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1000 9000 ctg123 . gene 1000 9000 0.5 + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ### genometools-1.5.1/testdata/gt_select_test_contain.1001-9000000066400000000000000000000000671211610345200232740ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1001 9000 genometools-1.5.1/testdata/gt_seqlensort_test.fas000066400000000000000000000007141211610345200223020ustar00rootroot00000000000000>first aaaaaaaaaaaaaaaaaa >second gggggggagagagagagc >third ttttttatatatatatcg >fourth acgtag >5th caccac >6th caca >7th cacaca >8th cacacacacacacggtgtgtgtgttgttgtttttttttttttttttcagtcatgctagctagctagctagctagtcgatcgtagctagctag >ninth cagttgctagtgcgtgtgcatgcgatgtcgtagctagctagtgtgtagctagctagtttatatattatatatatattatatatattatat >the tenth sequence aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >11th aaaaaaaaaaaaaaaaaa genometools-1.5.1/testdata/gt_seqlensort_test_sorted.fas000066400000000000000000000006171211610345200236640ustar00rootroot00000000000000> caca > acgtag > caccac > cacaca > aaaaaaaaaaaaaaaaaa > gggggggagagagagagc > ttttttatatatatatcg > aaaaaaaaaaaaaaaaaa > cagttgctagtgcgtgtgcatgcgatgtcgtagctagctagtgtgtagctagctagtttatatattatatatatattatatatattatat > aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa > cacacacacacacggtgtgtgtgttgttgtttttttttttttttttcagtcatgctagctagctagctagctagtcgatcgtagctagctag genometools-1.5.1/testdata/gt_seqorder_test.fas000066400000000000000000000001621211610345200217240ustar00rootroot00000000000000>0 aan >1 at >2 ta >3 ag >4 gg >5 ca >6 at >7 tt >8 ac >9 cg >10 ga >11 a >12 aaa >13 aaaa >14 aa >15 aan >16 ana genometools-1.5.1/testdata/gt_seqorder_test_revsort.fas000066400000000000000000000001621211610345200235100ustar00rootroot00000000000000>7 tt >2 ta >4 gg >10 ga >9 cg >5 ca >16 ana >11 a >6 at >1 at >3 ag >8 ac >15 aan >14 aa >0 aan >12 aaa >13 aaaa genometools-1.5.1/testdata/gt_seqorder_test_sort.fas000066400000000000000000000001621211610345200227730ustar00rootroot00000000000000>13 aaaa >12 aaa >0 aan >14 aa >15 aan >8 ac >3 ag >1 at >6 at >11 a >16 ana >5 ca >9 cg >10 ga >4 gg >2 ta >7 tt genometools-1.5.1/testdata/gt_sketch_multiline_without_parent.gff3000066400000000000000000000007271211610345200256230ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . CDS 1201 1500 . + 0 ID=cds00001;Name=edenprotein.1 ctg123 . CDS 3000 3902 . + 0 ID=cds00001;Name=edenprotein.1 ctg123 . CDS 5000 5500 . + 0 ID=cds00001;Name=edenprotein.1 ctg123 . CDS 7000 7600 . + 0 ID=cds00001;Name=edenprotein.1 ctg123 . CDS 1201 1500 . + 0 ID=cds00002;Name=edenprotein.2 ctg123 . CDS 5000 5500 . + 0 ID=cds00002;Name=edenprotein.2 ctg123 . CDS 7000 7600 . + 0 ID=cds00002;Name=edenprotein.2 genometools-1.5.1/testdata/gt_sketch_textwidth.gff3000066400000000000000000000004761211610345200225120ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 2000 . + 0 ID=g00001;Name=thisisalongname ctg123 . gene 2001 3000 . + 0 ID=g00002;Name=anotherlongname ctg123 . gene 3001 4000 . + 0 ID=g00003;Name=stillanotherlonglonglonglonglonglonglongname ctg123 . gene 4001 5000 . + 0 ID=g00004;Name=shortname genometools-1.5.1/testdata/gt_sketch_textwidth_0.recmaps000066400000000000000000000001241211610345200235240ustar00rootroot0000000000000030,90,215,106, gene 215,90,400,106, gene 400,90,585,106, gene 585,132,770,148, gene genometools-1.5.1/testdata/gt_sketch_textwidth_1.recmaps000066400000000000000000000001231211610345200235240ustar00rootroot0000000000000030,90,90,106, gene 150,90,210,106, gene 90,132,150,148, gene 210,132,270,148, gene genometools-1.5.1/testdata/gt_sketch_textwidth_2.recmaps000066400000000000000000000001271211610345200235310ustar00rootroot0000000000000030,102,215,118, gene 400,102,585,118, gene 215,154,400,170, gene 585,154,770,170, gene genometools-1.5.1/testdata/gt_splicesiteinfo_prob_1.gff3000066400000000000000000000001711211610345200233770ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 16 seq . gene 1 16 . + . ID=gene seq . exon 1 4 . + . . seq . exon 13 16 . + . . genometools-1.5.1/testdata/gt_splicesiteinfo_test_1.fas000066400000000000000000000000071211610345200233360ustar00rootroot00000000000000> gtag genometools-1.5.1/testdata/gt_splicesiteinfo_test_1.gff3000066400000000000000000000001031211610345200234070ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 4 seq . intron 1 4 . + . . genometools-1.5.1/testdata/gt_splicesiteinfo_test_1.out000066400000000000000000000003061211610345200233760ustar00rootroot00000000000000splice site distribution (for introns >= 4bp) gt-ag: 100.00% (n=1) donor site distribution (for introns >= 4bp) gt: 100.00% (n=1) acceptor site distribution (for introns >= 4bp) ag: 100.00% (n=1) genometools-1.5.1/testdata/gt_splicesiteinfo_test_2.fas000066400000000000000000000000071211610345200233370ustar00rootroot00000000000000> ctac genometools-1.5.1/testdata/gt_splicesiteinfo_test_2.gff3000066400000000000000000000001031211610345200234100ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 4 seq . intron 1 4 . - . . genometools-1.5.1/testdata/gt_splicesiteinfo_test_2.out000066400000000000000000000003061211610345200233770ustar00rootroot00000000000000splice site distribution (for introns >= 4bp) gt-ag: 100.00% (n=1) donor site distribution (for introns >= 4bp) gt: 100.00% (n=1) acceptor site distribution (for introns >= 4bp) ag: 100.00% (n=1) genometools-1.5.1/testdata/gt_splicesiteinfo_test_3.gff3000066400000000000000000000001031211610345200234110ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 4 seq . intron 1 4 . ? . . genometools-1.5.1/testdata/gt_splicesiteinfo_test_4.fas000066400000000000000000000000171211610345200233420ustar00rootroot00000000000000> gtaggtaggcag genometools-1.5.1/testdata/gt_splicesiteinfo_test_4.gff3000066400000000000000000000001671211610345200234240ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 12 seq . intron 1 4 . + . . seq . intron 5 8 . + . . seq . intron 9 12 . + . . genometools-1.5.1/testdata/gt_splicesiteinfo_test_4.out000066400000000000000000000003551211610345200234050ustar00rootroot00000000000000splice site distribution (for introns >= 4bp) gc-ag: 33.33% (n=1) gt-ag: 66.67% (n=2) donor site distribution (for introns >= 4bp) gc: 33.33% (n=1) gt: 66.67% (n=2) acceptor site distribution (for introns >= 4bp) ag: 100.00% (n=3) genometools-1.5.1/testdata/gt_splicesiteinfo_test_5.fas000066400000000000000000000000231211610345200233400ustar00rootroot00000000000000> nnnngtnnnnagnnnn genometools-1.5.1/testdata/gt_splicesiteinfo_test_5.gff3000066400000000000000000000002151211610345200234170ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 16 seq . gene 1 16 . + . ID=gene seq . exon 1 4 . + . Parent=gene seq . exon 13 16 . + . Parent=gene genometools-1.5.1/testdata/gt_splicesiteinfo_test_5.out000066400000000000000000000003061211610345200234020ustar00rootroot00000000000000splice site distribution (for introns >= 4bp) gt-ag: 100.00% (n=1) donor site distribution (for introns >= 4bp) gt: 100.00% (n=1) acceptor site distribution (for introns >= 4bp) ag: 100.00% (n=1) genometools-1.5.1/testdata/gt_splicesiteinfo_test_6.gff3000066400000000000000000000001031211610345200234140ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 4 seq . intron 1 4 . + . . genometools-1.5.1/testdata/gt_splicesiteinfo_test_6.mapping000066400000000000000000000000341211610345200242250ustar00rootroot00000000000000mapping = { foo = "bar" } genometools-1.5.1/testdata/gt_stat_cdslengthdistri.out000066400000000000000000000003441211610345200233260ustar00rootroot00000000000000parsed genome node DAGs: 5 sequence regions: 1 (total length: 1497228) multi-features: 1 genes: 1 protein-coding genes: 1 mRNAs: 1 protein-coding mRNAs: 1 CDSs: 4 CDS length distribution: 2305: 1 (prob=1.0000,cumulative=1.0000) genometools-1.5.1/testdata/gt_stat_exonnumberdistri_encode.out000066400000000000000000000035541211610345200250600ustar00rootroot00000000000000parsed genome node DAGs: 3011 sequence regions: 20 (total length: 713365500) genes: 2991 protein-coding genes: 1332 exons: 20154 CDSs: 10072 exon number distribution: 1: 70 (prob=0.0234,cumulative=0.0234) 2: 413 (prob=0.1381,cumulative=0.1615) 3: 462 (prob=0.1545,cumulative=0.3159) 4: 403 (prob=0.1347,cumulative=0.4507) 5: 365 (prob=0.1220,cumulative=0.5727) 6: 248 (prob=0.0829,cumulative=0.6556) 7: 188 (prob=0.0629,cumulative=0.7185) 8: 139 (prob=0.0465,cumulative=0.7650) 9: 116 (prob=0.0388,cumulative=0.8037) 10: 109 (prob=0.0364,cumulative=0.8402) 11: 71 (prob=0.0237,cumulative=0.8639) 12: 49 (prob=0.0164,cumulative=0.8803) 13: 65 (prob=0.0217,cumulative=0.9020) 14: 48 (prob=0.0160,cumulative=0.9181) 15: 34 (prob=0.0114,cumulative=0.9295) 16: 32 (prob=0.0107,cumulative=0.9402) 17: 29 (prob=0.0097,cumulative=0.9498) 18: 17 (prob=0.0057,cumulative=0.9555) 19: 9 (prob=0.0030,cumulative=0.9585) 20: 10 (prob=0.0033,cumulative=0.9619) 21: 12 (prob=0.0040,cumulative=0.9659) 22: 12 (prob=0.0040,cumulative=0.9699) 23: 11 (prob=0.0037,cumulative=0.9736) 24: 5 (prob=0.0017,cumulative=0.9753) 25: 5 (prob=0.0017,cumulative=0.9769) 26: 6 (prob=0.0020,cumulative=0.9789) 27: 10 (prob=0.0033,cumulative=0.9823) 28: 3 (prob=0.0010,cumulative=0.9833) 29: 6 (prob=0.0020,cumulative=0.9853) 30: 8 (prob=0.0027,cumulative=0.9880) 31: 3 (prob=0.0010,cumulative=0.9890) 32: 4 (prob=0.0013,cumulative=0.9903) 33: 4 (prob=0.0013,cumulative=0.9916) 34: 2 (prob=0.0007,cumulative=0.9923) 35: 3 (prob=0.0010,cumulative=0.9933) 37: 2 (prob=0.0007,cumulative=0.9940) 39: 1 (prob=0.0003,cumulative=0.9943) 40: 3 (prob=0.0010,cumulative=0.9953) 41: 5 (prob=0.0017,cumulative=0.9970) 42: 3 (prob=0.0010,cumulative=0.9980) 44: 1 (prob=0.0003,cumulative=0.9983) 45: 2 (prob=0.0007,cumulative=0.9990) 46: 1 (prob=0.0003,cumulative=0.9993) 48: 1 (prob=0.0003,cumulative=0.9997) 51: 1 (prob=0.0003,cumulative=1.0000) genometools-1.5.1/testdata/gt_stat_exonnumberdistri_standard.out000066400000000000000000000003071211610345200254140ustar00rootroot00000000000000parsed genome node DAGs: 2 sequence regions: 1 (total length: 1497228) genes: 1 mRNAs: 3 exons: 11 exon number distribution: 3: 1 (prob=0.3333,cumulative=0.3333) 4: 2 (prob=0.6667,cumulative=1.0000) genometools-1.5.1/testdata/gt_stat_source.out000066400000000000000000000001671211610345200214370ustar00rootroot00000000000000parsed genome node DAGs: 2 sequence regions: 1 (total length: 1497228) genes: 1 mRNAs: 3 exons: 11 used source tags: . genometools-1.5.1/testdata/gt_stat_test_1.out000066400000000000000000000001431211610345200213300ustar00rootroot00000000000000parsed genome node DAGs: 2 sequence regions: 1 (total length: 1497228) genes: 1 mRNAs: 3 exons: 11 genometools-1.5.1/testdata/gt_stat_test_2.out000066400000000000000000000002451211610345200213340ustar00rootroot00000000000000parsed genome node DAGs: 2 sequence regions: 1 (total length: 1497228) genes: 1 mRNAs: 3 exons: 11 gene length distribution: 8001: 1 (prob=1.0000,cumulative=1.0000) genometools-1.5.1/testdata/gt_stat_test_3.out000066400000000000000000000005011211610345200213300ustar00rootroot00000000000000parsed genome node DAGs: 2 sequence regions: 1 (total length: 1497228) genes: 1 mRNAs: 3 exons: 11 exon length distribution: 201: 1 (prob=0.0909,cumulative=0.0909) 451: 2 (prob=0.1818,cumulative=0.2727) 501: 3 (prob=0.2727,cumulative=0.5455) 903: 2 (prob=0.1818,cumulative=0.7273) 2001: 3 (prob=0.2727,cumulative=1.0000) genometools-1.5.1/testdata/gt_stat_test_4.out000066400000000000000000000003671211610345200213430ustar00rootroot00000000000000parsed genome node DAGs: 2 sequence regions: 1 (total length: 1497228) genes: 1 mRNAs: 3 exons: 11 intron length distribution: 1097: 2 (prob=0.2500,cumulative=0.2500) 1499: 5 (prob=0.6250,cumulative=0.8750) 3499: 1 (prob=0.1250,cumulative=1.0000) genometools-1.5.1/testdata/gt_stat_test_5.out000066400000000000000000000002421211610345200213340ustar00rootroot00000000000000parsed genome node DAGs: 2 sequence regions: 1 (total length: 1497228) genes: 1 mRNAs: 3 exons: 11 gene score distribution: 50: 1 (prob=1.0000,cumulative=1.0000) genometools-1.5.1/testdata/gt_stat_test_6.out000066400000000000000000000001431211610345200213350ustar00rootroot00000000000000parsed genome node DAGs: 61 sequence regions: 16 (total length: 12069317) LTR_retrotransposons: 45 genometools-1.5.1/testdata/gt_translate.in000066400000000000000000000000131211610345200206660ustar00rootroot00000000000000gattacatag genometools-1.5.1/testdata/gt_translate.out000066400000000000000000000000431211610345200210720ustar00rootroot00000000000000frame1: DYI frame2: IT* frame3: LH genometools-1.5.1/testdata/gt_uniq_test_1.gff3000066400000000000000000000001451211610345200213510ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 . + . . seq . gene 1 1000 . + . . genometools-1.5.1/testdata/gt_uniq_test_1.out000066400000000000000000000001131211610345200213260ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 . + . . genometools-1.5.1/testdata/gt_uniq_test_2.gff3000066400000000000000000000001451211610345200213520ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 . + . . seq . gene 1 1000 . - . . genometools-1.5.1/testdata/gt_uniq_test_2.out000066400000000000000000000001451211610345200213340ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 . + . . seq . gene 1 1000 . - . . genometools-1.5.1/testdata/gt_uniq_test_3.gff3000066400000000000000000000001511211610345200213500ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 1.0 + . . seq . gene 1 1000 0.5 + . . genometools-1.5.1/testdata/gt_uniq_test_3.out000066400000000000000000000001131211610345200213300ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 1 + . . genometools-1.5.1/testdata/gt_uniq_test_4.gff3000066400000000000000000000001511211610345200213510ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 0.5 + . . seq . gene 1 1000 1.0 + . . genometools-1.5.1/testdata/gt_uniq_test_4.out000066400000000000000000000001131211610345200213310ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 1 + . . genometools-1.5.1/testdata/gt_uniq_test_5.gff3000066400000000000000000000002051211610345200213520ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 0.5 + . . seq . gene 1 1000 1.0 + . . seq . gene 1 1000 0.4 + . . genometools-1.5.1/testdata/gt_uniq_test_5.out000066400000000000000000000001131211610345200213320ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 1 + . . genometools-1.5.1/testdata/gt_uniq_test_6.gff3000066400000000000000000000027551211610345200213670ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.500000 + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ctg123 . gene 1000 9000 0.500000 + . ID=gene2 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene2 ctg123 . mRNA 1050 9000 . + . ID=mRNA4;Parent=gene2 ctg123 . exon 1050 1500 . + . Parent=mRNA4 ctg123 . exon 3000 3902 . + . Parent=mRNA4 ctg123 . exon 5000 5500 . + . Parent=mRNA4 ctg123 . exon 7000 9000 . + . Parent=mRNA4 ctg123 . mRNA 1050 9000 . + . ID=mRNA5;Parent=gene2 ctg123 . exon 1050 1500 . + . Parent=mRNA5 ctg123 . exon 5000 5500 . + . Parent=mRNA5 ctg123 . exon 7000 9000 . + . Parent=mRNA5 ctg123 . mRNA 1300 9000 . + . ID=mRNA6;Parent=gene2 ctg123 . exon 1300 1500 . + . Parent=mRNA6 ctg123 . exon 3000 3902 . + . Parent=mRNA6 ctg123 . exon 5000 5500 . + . Parent=mRNA6 ctg123 . exon 7000 9000 . + . Parent=mRNA6 ### genometools-1.5.1/testdata/gt_uniq_test_6.out000066400000000000000000000014171211610345200213430ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.5 + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ### genometools-1.5.1/testdata/gt_view.sh000066400000000000000000000013311211610345200176530ustar00rootroot00000000000000#!/bin/sh -ex gt view -force png_devel_1.png png_devel_1.gff3 gt view -force png_devel_2.png png_devel_2.gff3 gt view -force png_devel_3.png png_devel_3.gff3 gt view -force png_devel_4.png png_devel_4.gff3 gt view -force png_devel_5.png png_devel_5.gff3 gt view -force png_devel_6.png png_devel_6.gff3 gt view -force png_devel_7.png png_devel_7.gff3 gt view -start 190000 -end 199000 -force png_devel_8.png png_devel_8.gff3 gt view -start 190000 -end 199000 -force png_devel_9.png png_devel_9.gff3 gt view -start 190000 -end 199000 -force png_devel_10.png png_devel_10.gff3 gt view -start 190000 -end 199000 -force png_devel_11.png png_devel_11.gff3 gt view -start 5867900 -end 5872900 -force png_devel_12.png png_devel_12.gff3 genometools-1.5.1/testdata/gt_view_prob_1.gff3000066400000000000000000000000201211610345200213220ustar00rootroot00000000000000##gff-version 3 genometools-1.5.1/testdata/gt_view_prob_2.gff3000066400000000000000000000000671211610345200213360ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 genometools-1.5.1/testdata/gtpython/000077500000000000000000000000001211610345200175315ustar00rootroot00000000000000genometools-1.5.1/testdata/gtpython/block_stuff.py000066400000000000000000000041071211610345200224060ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re class TestFailedError(Exception): pass def testfunc(bl): b = Block(bl) print "%s %s %s %d" % (b.get_type(), b.get_strand(), b.get_range(), b.get_size()) if not b.get_top_level_feature(): raise TestFailedError return b.get_type() if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " GFF3_file\n") sys.stderr.write("Test the TrackSelector callback and Block bindings.") sys.exit(1) genome_stream = GFF3InStream((sys.argv)[1]) # instantiate index object feature_index = FeatureIndexMemory() genome_stream = FeatureStream(genome_stream, feature_index) feature = genome_stream.next_tree() while feature: feature = genome_stream.next_tree() seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = Style() diagram = Diagram.from_index(feature_index, seqid, range, style) diagram.set_track_selector_func(testfunc) layout = Layout(diagram, 800, style) height = layout.get_height() genometools-1.5.1/testdata/gtpython/feature_node.py000066400000000000000000000054731211610345200225540ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re class TestFailedError(Exception): pass if __name__ == "__main__": fn = FeatureNode.create_new("test", "type", 100, 500, "+") fn.add_attribute("test", "testval") fn.add_attribute("test2", "testval2") if fn.score_is_defined(): raise TestFailedError fn.set_score(2) if not fn.score_is_defined(): raise TestFailedError if fn.get_score() != 2: raise TestFailedError fn.unset_score() if fn.score_is_defined(): raise TestFailedError if fn.has_type("foo"): raise TestFailedError if not fn.has_type("type"): raise TestFailedError if not fn.get_type() == "type": raise TestFailedError fn.set_type("foo") if not fn.has_type("foo"): raise TestFailedError if not fn.get_type() == "foo": raise TestFailedError if not fn.get_strand() == "+": raise TestFailedError fn2 = FeatureNode.create_new("test", "type2", 200, 300, "+") fn.add_child(fn2) num_attrs = 0 for (tag, val) in fn.each_attribute(): if not val == fn.get_attribute(tag): raise TestFailedError num_attrs += 1 if not num_attrs == 2: raise TestFailedError if fn.get_phase() != 3: #undefined raise TestFailedError fn.set_phase(0) if fn.get_phase() != 0: #zero raise TestFailedError fni = FeatureNodeIteratorDepthFirst(fn) num_features = 0 tfn = fni.next() while tfn: num_features += 1 tfn = fni.next() if num_features != 2: raise TestFailedError fn3 = FeatureNode.create_new("test", "type3", 250, 300, "+") fn.add_child(fn3) fni = FeatureNodeIteratorDepthFirst(fn) num_features = 0 tfn = fni.next() while tfn: num_features += 1 tfn = fni.next() if num_features != 3: raise TestFailedError genometools-1.5.1/testdata/gtpython/feature_stuff.py000066400000000000000000000044031211610345200227460ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re class TestFailedError(Exception): pass if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " GFF3_file\n") sys.stderr.write('Test the FeatureIndex and FeatureStream bindings on GFF3_file.') sys.exit(1) genome_stream = GFF3InStream((sys.argv)[1]) # try to instantiate an interface -> should fail try: feature_index = FeatureIndex() except NotImplementedError: pass else: raise # instantiate index object feature_index = FeatureIndexMemory() genome_stream = FeatureStream(genome_stream, feature_index) feature = genome_stream.next_tree() while feature: feature = genome_stream.next_tree() seqid = feature_index.get_first_seqid() features = feature_index.get_features_for_seqid(seqid) if not features: raise TestFailedError rng = feature_index.get_range_for_seqid(seqid) features_r = feature_index.get_features_for_range(rng.start, rng.end, seqid) if not len(features) == len(features_r): raise TestFailedError gff3_visitor = GFF3Visitor() for feature in features: feature.accept(gff3_visitor) if not isinstance(feature, FeatureNode): raise TestFailedError genometools-1.5.1/testdata/gtpython/feature_stuff_db.py000066400000000000000000000041051211610345200234120ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008-2012 Sascha Steinbiss # Copyright (c) 2008-2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re class TestFailedError(Exception): pass if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " GFF3_db\n") sys.stderr.write('Test the FeatureIndex bindings on GFF3_db.\n') sys.exit(1) # try to instantiate an interface -> should fail try: feature_index = FeatureIndex() except NotImplementedError: pass else: raise rdb = RDBSqlite(sys.argv[1]) adbs = AnnoDBGFFLike() feature_index = adbs.get_feature_index(rdb) seqid = feature_index.get_first_seqid() features = feature_index.get_features_for_seqid(seqid) if not features: raise TestFailedError rng = feature_index.get_range_for_seqid(seqid) features_r = feature_index.get_features_for_range(rng.start, rng.end, seqid) if not len(features) == len(features_r): raise TestFailedError gff3_visitor = GFF3Visitor() for feature in features: feature.accept(gff3_visitor) if not isinstance(feature, FeatureNode): raise TestFailedError genometools-1.5.1/testdata/gtpython/genome_visitor.py000066400000000000000000000026361211610345200231430ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " GFF3_file\n") sys.stderr.write("Parse and output the given GFF3 file.") sys.exit(1) genome_stream = GFF3InStream((sys.argv)[1]) gff3_visitor = GFF3Visitor() feature = genome_stream.next_tree() while feature: feature.accept(gff3_visitor) feature = genome_stream.next_tree() genometools-1.5.1/testdata/gtpython/gff3.py000066400000000000000000000025701211610345200207340ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " GFF3_file\n") sys.stderr.write("Parse and output the given GFF3 file.") sys.exit(1) in_stream = GFF3InStream((sys.argv)[1]) out_stream = GFF3OutStream(in_stream) feature = out_stream.next_tree() while feature: feature = out_stream.next_tree() genometools-1.5.1/testdata/gtpython/graphics_stuff.py000066400000000000000000000073631211610345200231230ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys class TestFailedError(Exception): pass if __name__ == "__main__": if len(sys.argv) != 3: sys.stderr.write("Usage: " + (sys.argv)[0] + " curve_coords PNG_file\n") sys.stderr.write("Tests drawing functions in the Graphics object.\n") sys.exit(1) g = GraphicsCairoSVG(700, 800) g.draw_text(300, 20, "draw_text") g.draw_text_right(300, 40, "draw_text_left") g.draw_text_centered(300, 60, "draw_text_centered") g.draw_colored_text(300, 80, Color(1, 0, 0, 0.7), "draw_colored_text") g.set_margins(20, 30) if g.get_image_height() != 800: raise TestFailedError if g.get_image_width() != 700: raise TestFailedError if g.get_xmargins() != 20: raise TestFailedError if g.get_ymargins() != 30: raise TestFailedError g.draw_horizontal_line(150, 100, Color(0, 0, 0, 0.3), 300, 5.5) g.draw_vertical_line(200, 70, Color(1, 0, 0, 0.3), 100, 3.5) g.draw_box( 150, 120, 300, 30, Color(0, 1, 0, 0.2), ARROW_LEFT, 20, 2, Color(0, 0, 0, 1), False, ) g.draw_box( 150, 170, 300, 20, Color(0, 1, 1, 0.2), ARROW_RIGHT, 20, 1, Color(0, 0, 0, 1), False, ) g.draw_box( 150, 210, 300, 20, Color(1, 0, 0, 0.2), ARROW_BOTH, 20, 1, Color(0, 0, 0, 1), False, ) g.draw_box( 300, 250, 20, 20, Color(1, 0, 0, 0.2), ARROW_BOTH, 20, 1, Color(0, 0, 0, 1), False, ) g.draw_box( 150, 290, 300, 20, Color(1, 0, 0, 0.2), ARROW_NONE, 20, 1, Color(0, 0, 0, 1), False, ) g.draw_dashes(159, 340, 90, 20, ARROW_RIGHT, 20, 1, Color(0, 0, 0, 1)) g.draw_dashes(359, 340, 60, 20, ARROW_LEFT, 20, 1, Color(0, 0, 0, 1)) g.draw_dashes(59, 340, 60, 20, ARROW_NONE, 20, 1, Color(0, 0, 0, 1)) g.draw_dashes(559, 340, 60, 20, ARROW_BOTH, 20, 1, Color(0, 0, 0, 1)) g.draw_caret(159, 390, 90, 20, ARROW_RIGHT, 20, 1, Color(0, 0, 0, 1)) g.draw_caret(359, 390, 60, 20, ARROW_LEFT, 20, 1, Color(0, 0, 0, 1)) g.draw_caret(59, 390, 60, 20, ARROW_NONE, 20, 1, Color(0, 0, 0, 1)) g.draw_caret(559, 390, 60, 20, ARROW_BOTH, 20, 1, Color(0, 0, 0, 1)) from random import random data = [] ndata = 0 f = open((sys.argv)[1]) for line in f: data.append(float(line)) ndata += 1 g.draw_curve_data(20, 430, Color(0, 0, 1, .6), data, ndata, Range(0, 1), 40) g.to_file((sys.argv)[2]) genometools-1.5.1/testdata/gtpython/show_recmaps.py000066400000000000000000000040041211610345200225730ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " GFF3_file\n") sys.stderr.write("Show RecMaps of GFF3 annotation file.") sys.exit(1) in_stream = GFF3InStream((sys.argv)[1]) feature_index = FeatureIndexMemory() feature_stream = FeatureStream(in_stream, feature_index) gn = feature_stream.next_tree() # fill feature index while gn: gn = feature_stream.next_tree() seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = Style() diagram = Diagram.from_index(feature_index, seqid, range, style) layout = Layout(diagram, 700, style) height = layout.get_height() image_info = ImageInfo() canvas = CanvasCairoFile(style, 800, height, image_info) layout.sketch(canvas) canvas.to_file("foo1.png") for (x1, y1, x2, y2, gn) in image_info.each_hotspot(): print "x1=%d, y1=%d, x2=%d, y2=%d, gn.type=%s" % (x1, y1, x2, y2, gn.get_type()) genometools-1.5.1/testdata/gtpython/show_seqids.py000066400000000000000000000030531211610345200224340ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " GFF3_file\n") sys.stderr.write("Show sequence ids contained in GFF3 annotation file.") sys.exit(1) in_stream = GFF3InStream((sys.argv)[1]) feature_index = FeatureIndexMemory() feature_stream = FeatureStream(in_stream, feature_index) gn = feature_stream.next_tree() # fill feature index while gn: gn = feature_stream.next_tree() seqids = feature_index.get_seqids() for seqid in seqids: print seqid genometools-1.5.1/testdata/gtpython/sketch-failures.py000066400000000000000000000064511211610345200232020ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from ctypes import ArgumentError from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re class TestFailedError(Exception): pass if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " GFF3_file\n") sys.stderr.write("Test failures in GFF3 annotation file.") sys.exit(1) feature_index = FeatureIndexMemory() feature_index.add_gff3file((sys.argv)[1]) seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = Style() style.set_num("format", "margins", 40) # check error reporting in the Diagram class try: diagram = Diagram.from_index(feature_index, "nonexist", range, style) except GTError, strerr: if -1 == str(strerr).find("feature index does not contain "): raise TestFailedError else: raise TestFailedError try: diagram = Diagram.from_index(feature_index, seqid, range, 42) except ArgumentError, strerr: if -1 == str(strerr).find("must be a Style"): raise TestFailedError else: raise TestFailedError try: diagram = Diagram.from_index(feature_index, seqid, 42, style) except AttributeError, strerr: if -1 == str(strerr).find("object has no attribute 'start'"): raise TestFailedError else: raise TestFailedError try: diagram = Diagram.from_index(42, seqid, range, style) except ArgumentError, strerr: if -1 == str(strerr).find("must be a FeatureIndex"): raise TestFailedError else: raise TestFailedError diagram = Diagram.from_index(feature_index, seqid, range, style) # check error reporting in the Layout class try: layout = Layout(diagram, 70, style) except GTError, strerr: if -1 == str(strerr).find("layout width must at least be twice"): raise TestFailedError else: raise TestFailedError layout = Layout(diagram, 700, style) height = layout.get_height() # check error reporting in the CanvasCairoFile class try: canvas = CanvasCairoFile(12, 700, height, None) except ArgumentError, strerr: if -1 == str(strerr).find("must be a Style"): raise TestFailedError else: raise TestFailedError canvas = CanvasCairoFile(style, 700, height, None) genometools-1.5.1/testdata/gtpython/sketch.py000066400000000000000000000036271211610345200213740ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re if __name__ == "__main__": if len(sys.argv) != 3: sys.stderr.write("Usage: " + (sys.argv)[0] + " PNG_file GFF3_file\n") sys.stderr.write("Create PNG representation of GFF3 annotation file.") sys.exit(1) pngfile = (sys.argv)[1] in_stream = GFF3InStream((sys.argv)[2]) feature_index = FeatureIndexMemory() feature_stream = FeatureStream(in_stream, feature_index) gn = feature_stream.next_tree() # fill feature index while gn: gn = feature_stream.next_tree() seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = Style() diagram = Diagram.from_index(feature_index, seqid, range, style) layout = Layout(diagram, 700, style) height = layout.get_height() ii = ImageInfo() canvas = CanvasCairoFile(style, 700, height, ii) layout.sketch(canvas) canvas.to_file(pngfile) genometools-1.5.1/testdata/gtpython/sketch_parsed_with_invalid_ordering.py000066400000000000000000000023351211610345200273570ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from gt.annotationsketch import * from gt.core.gtrange import Range import sys if __name__ == "__main__": if len(sys.argv) != 4: sys.stderr.write("Usage: " + (sys.argv)[0] + " Style_file PNG_file GFF3_file\n") sys.stderr.write("Create PNG representation of GFF3 annotation file.") sys.exit(1) pngfile = (sys.argv)[2] # load style file style = Style() style.load_file((sys.argv)[1]) # create feature index feature_index = FeatureIndexMemory() # add GFF3 file to index feature_index.add_gff3file((sys.argv)[3]) # create diagram for first sequence ID in feature index seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) diagram = Diagram.from_index(feature_index, seqid, range, style) # create layout layout = Layout(diagram, 600, style) height = layout.get_height() # set alternative ordering function layout.set_track_ordering_func(lambda s1, s2: "not_a_number") # create canvas canvas = CanvasCairoFile(style, 600, height) # sketch layout on canvas layout.sketch(canvas) # write canvas to file canvas.to_file(pngfile) genometools-1.5.1/testdata/gtpython/sketch_parsed_with_invalid_ordering_2.py000066400000000000000000000023231211610345200275750ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from gt.annotationsketch import * from gt.core.gtrange import Range import sys if __name__ == "__main__": if len(sys.argv) != 4: sys.stderr.write("Usage: " + (sys.argv)[0] + " Style_file PNG_file GFF3_file\n") sys.stderr.write("Create PNG representation of GFF3 annotation file.") sys.exit(1) pngfile = (sys.argv)[2] # load style file style = Style() style.load_file((sys.argv)[1]) # create feature index feature_index = FeatureIndexMemory() # add GFF3 file to index feature_index.add_gff3file((sys.argv)[3]) # create diagram for first sequence ID in feature index seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) diagram = Diagram.from_index(feature_index, seqid, range, style) # create layout layout = Layout(diagram, 600, style) height = layout.get_height() # set alternative ordering function layout.set_track_ordering_func(lambda s1, s2: None) # create canvas canvas = CanvasCairoFile(style, 600, height) # sketch layout on canvas layout.sketch(canvas) # write canvas to file canvas.to_file(pngfile) genometools-1.5.1/testdata/gtpython/sketch_parsed_with_ordering.py000066400000000000000000000023341211610345200256500ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from gt.annotationsketch import * from gt.core.gtrange import Range import sys if __name__ == "__main__": if len(sys.argv) != 4: sys.stderr.write("Usage: " + (sys.argv)[0] + " Style_file PNG_file GFF3_file\n") sys.stderr.write("Create PNG representation of GFF3 annotation file.") sys.exit(1) pngfile = (sys.argv)[2] # load style file style = Style() style.load_file((sys.argv)[1]) # create feature index feature_index = FeatureIndexMemory() # add GFF3 file to index feature_index.add_gff3file((sys.argv)[3]) # create diagram for first sequence ID in feature index seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) diagram = Diagram.from_index(feature_index, seqid, range, style) # create layout layout = Layout(diagram, 600, style) height = layout.get_height() # set alternative ordering function layout.set_track_ordering_func(lambda s1, s2: cmp(s1,s2)*-1) # create canvas canvas = CanvasCairoFile(style, 600, height) # sketch layout on canvas layout.sketch(canvas) # write canvas to file canvas.to_file(pngfile) genometools-1.5.1/testdata/gtpython/sketch_simple.py000066400000000000000000000033501211610345200227360ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re if __name__ == "__main__": if len(sys.argv) != 3: sys.stderr.write("Usage: " + (sys.argv)[0] + " PNG_file GFF3_file\n") sys.stderr.write("Create PNG representation of GFF3 annotation file.") sys.exit(1) pngfile = (sys.argv)[1] gff3file = (sys.argv)[2] feature_index = FeatureIndexMemory() feature_index.add_gff3file(gff3file) seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = Style() diagram = Diagram.from_index(feature_index, seqid, range, style) layout = Layout(diagram, 700, style) height = layout.get_height() canvas = CanvasCairoFile(style, 700, height) layout.sketch(canvas) canvas.to_file(pngfile) genometools-1.5.1/testdata/gtpython/sketch_stream.py000066400000000000000000000040761211610345200227460ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re if __name__ == "__main__": if len(sys.argv) != 3: sys.stderr.write("Usage: " + (sys.argv)[0] + " PNG_file GFF3_file\n") sys.stderr.write("Create PNG representation of GFF3 annotation file (adds introns).") sys.exit(1) pngfile = (sys.argv)[1] in_stream = GFF3InStream((sys.argv)[2]) add_introns_stream = AddIntronsStream(in_stream) feature_index = FeatureIndexMemory() feature_stream = FeatureStream(add_introns_stream, feature_index) gn = feature_stream.next_tree() # fill feature index while gn: gn = feature_stream.next_tree() seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = Style() diagram = Diagram.from_index(feature_index, seqid, range, style) layout = Layout(diagram, 700, style) height = layout.get_height() ii = ImageInfo() canvas = CanvasCairoFile(style, 700, height, ii) layout.sketch(canvas) pngstream = canvas.to_stream() outfile = open(pngfile, "w") outfile.write(pngstream) outfile.close() genometools-1.5.1/testdata/gtpython/style.py000066400000000000000000000122721211610345200212470ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys class TestFailedException(Exception): pass if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " style_file") sys.stderr.write("Load style_file and test style bindings.") sys.exit(1) stylefile = (sys.argv)[1] # create new style object style = Style() # load style file style.load_file(stylefile) # clone style file clone = style.clone() if not clone: raise TestFailedException # get color color = style.get_color("exon", "fill") if not color: raise TestFailedException # set color color = Color(0.3, 0.4, 0.3) style.set_color("exon", "fill", color) color2 = style.get_color("exon", "fill") if color2.red != color.red and color2.green != color.green and \ color2.blue != color.blue: raise TestFailedException # unset color style.unset("exon", "fill") color2 = style.get_color("exon", "fill") if color2: raise TestFailedException # get undefined color color = style.get_color("undefined", "undefined") if color: raise TestFailedException # get string string = style.get_cstr("exon", "style") if string != "box": raise TestFailedException # set string style.set_cstr("exon", "style", "line") string = style.get_cstr("exon", "style") if string != "line": raise TestFailedException # unset string style.unset("exon", "style") string = style.get_cstr("exon", "style") if string: raise TestFailedException # get undefined string string = style.get_cstr("undefined", "undefined") if string: raise TestFailedException # get number num = style.get_num("format", "margins") if num != 30: raise TestFailedException # set number style.set_num("format", "margins", 20) num = style.get_num("format", "margins") if num != 20: raise TestFailedException # unset number style.unset("format", "margins") None num = style.get_num("format", "margins") if num: raise TestFailedException #get undefined number num = style.get_num("undefined", "undefined") if num: raise TestFailedException # get boolean bool = style.get_bool("format", "show_grid") if bool == False: raise TestFailedException # get undefined boolean bool = style.get_bool("undefined", "undefined") if not bool == None: raise TestFailedException # set boolean style.set_bool("format", "show_grid", False) bool = style.get_bool("format", "show_grid") if bool: raise TestFailedException # unset boolean style.unset("format", "show_grid") bool = style.get_bool("format", "show_grid") if not bool == None: raise TestFailedException # serialise style to Lua code style.set_num("format", "margins", 20) style.set_bool("format", "show_grid", True) color = Color(0.3, 0.4, 0.3) style.set_color("exon", "fill", color) luacode = style.to_str() if luacode == None or len(luacode) == 0: raise TestFailedException # load style from Lua code style.load_str(luacode) num = style.get_num("format", "margins") if num != 20: raise TestFailedException bool = style.get_bool("format", "show_grid") if not bool: raise TestFailedException color2 = style.get_color("exon", "fill") if color2.red != color.red and color2.green != color.green and \ color2.blue != color.blue: raise TestFailedException # clone style from existing copy style2 = style.clone() num = style2.get_num("format", "margins") if num != 20: raise TestFailedException bool = style2.get_bool("format", "show_grid") if not bool: raise TestFailedException color2 = style2.get_color("exon", "fill") if color2.red != color.red and color2.green != color.green and \ color2.blue != color.blue: raise TestFailedException style2.set_num("format", "margins", 30) if style2.get_num("format", "margins") != 30: raise TestFailedException if style.get_num("format", "margins") == style2.get_num("format", "margins"): raise TestFailedException genometools-1.5.1/testdata/gtpython/style_serialize.py000066400000000000000000000026461211610345200233220ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys class TestFailedException(Exception): pass if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " style_file") sys.stderr.write("Load style_file and test style bindings.") sys.exit(1) stylefile = (sys.argv)[1] # create new style object style = Style() # load style file style.load_file(stylefile) # serialise style to Lua code style.to_str() genometools-1.5.1/testdata/gtpython/unicode_strings.py000066400000000000000000000044631211610345200233110ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from gt.core import * from gt.extended import * from gt.annotationsketch import * from gt.annotationsketch.custom_track import CustomTrack from gt.core.gtrange import Range import sys class GeneRegion(object): """Represents a gene region""" def __init__(self, start, end): self.start = start self.end = end class BetterGeneRegion(GeneRegion): """Has even more info and inherits from GeneRegion""" def __init__(self, start, end, chromosome, strand): GeneRegion.__init__(self, start, end) self.chromosome = chromosome self.strand = strand if __name__ == "__main__": if len(sys.argv) != 3: sys.stderr.write("Usage: " + (sys.argv)[0] + " style_file PNG_file\n") sys.exit(1) nodes = [] # construct a gene on the forward strand with two exons G = BetterGeneRegion(113558120L, 113578742L, 'chr7', '+') seqid = G.chromosome gene = FeatureNode.create_new(unicode(seqid), "gene", #100, #900, G.start, G.end, "+") gene.add_attribute("Name", u"Testcase™ あがぃいぅ".encode("utf-8")) nodes.append(gene) exon = FeatureNode.create_new(seqid, "exon", 100, 200, "+") gene.add_child(exon) intron = FeatureNode.create_new(seqid, "intron", 201, 799, "+") gene.add_child(intron) exon = FeatureNode.create_new(seqid, "exon", 800, 900, "+") gene.add_child(exon) # construct a single-exon gene on the reverse strand # (within the intron of the forward strand gene) reverse_gene = FeatureNode.create_new(seqid, "gene", 400, 600, "-") reverse_exon = FeatureNode.create_new(seqid, "exon", 400, 600, "-") reverse_gene.add_child(reverse_exon) nodes.append(reverse_gene) pngfile = (sys.argv)[2] style = Style() style.load_file((sys.argv)[1]) diagram = Diagram.from_array(nodes, Range(G.start, G.end), style) layout = Layout(diagram, 600, style) height = layout.get_height() canvas = CanvasCairoFile(style, 600, height) layout.sketch(canvas) canvas.to_file(pngfile) genometools-1.5.1/testdata/gtpython/used_types.py000066400000000000000000000026361211610345200222760ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # from gt.core import * from gt.extended import * from gt.annotationsketch import * import sys import re if __name__ == "__main__": if len(sys.argv) != 2: sys.stderr.write("Usage: " + (sys.argv)[0] + " GFF3_file\n") sys.stderr.write("Parse and output the types used in GFF3_file.") sys.exit(1) in_stream = GFF3InStream((sys.argv)[1]) gn = in_stream.next_tree() # fill feature index while gn: gn = in_stream.next_tree() for type in in_stream.get_used_types(): print type genometools-1.5.1/testdata/gtruby/000077500000000000000000000000001211610345200171715ustar00rootroot00000000000000genometools-1.5.1/testdata/gtruby/block_stuff.rb000066400000000000000000000035501211610345200220220ustar00rootroot00000000000000# # Copyright (c) 2007 Gordon Gremme # Copyright (c) 2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing the Ruby bindings for FeatureIndex and FeatureStream classes require 'gtruby' testcallback = Proc.new { |block, data| r = block.get_range puts "#{block.get_type} #{block.get_strand} (#{r.begin}L, #{r.end}L) " + \ "#{block.get_size}" block.get_type } if ARGV.size != 1 then STDERR.puts "Usage: #{$0} GFF3_file" STDERR.puts "Test the FeatureIndex and FeatureStream bindings on GFF3 file." exit(1) end gff3file = ARGV[0] # set up the feature stream genome_stream = GT::GFF3InStream.new(gff3file) # instantiate index object feature_index = GT::FeatureIndexMemory.new() genome_stream = GT::FeatureStream.new(genome_stream, feature_index) feature = genome_stream.next_tree() while (feature) do feature = genome_stream.next_tree() end seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = GT::Style.new() diagram = GT::Diagram.from_index(feature_index, seqid, range, style) diagram.set_track_selector_func(testcallback) layout = GT::Layout.new(diagram, 700, style) genometools-1.5.1/testdata/gtruby/custom_stuff.rb000066400000000000000000000050321211610345200222370ustar00rootroot00000000000000# # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} GFF3_file" STDERR.puts "Test the custom stream bindings on GFF3 file." exit(1) end module GT class PrinterStream < CustomStream def initialize(instream, types) super() @types = types @instream = instream @visitor = PrinterVisitor.new(@types) end def next node = @instream.next_tree node.accept(@visitor) if node node end end class PrinterVisitor < CustomVisitor def initialize(types) super() @types = types end def visit_feature_node(fn) fn.traverse_dfs do |node| @types.push(node.get_type) @types.uniq! rng = node.get_range puts "#{node.get_source} #{node.get_type} #{rng.begin} #{rng.end}" attribs = [] node.each_attribute do |k,v| attribs.push("#{k}=#{v}") end puts attribs.sort.join(',') end 0 end end class ErrorStream < CustomStream def initialize super end def next raise "foo" end end class IncompleteStream < CustomStream def initialize super end end end gff3file = ARGV[0] types = [] is = GT::GFF3InStream.new(gff3file) ps = GT::PrinterStream.new(is, types) while ps.next_tree do end raise unless types.include?("gene") raise unless types.include?("mRNA") raise unless types.include?("TF_binding_site") raise unless types.include?("exon") raise unless types.include?("CDS") es = GT::ErrorStream.new() begin while es.next_tree do end rescue GT::GTError # exception expected else raise end begin is = GT::IncompleteStream.new rescue GT::GTError # exception expected else raise end genometools-1.5.1/testdata/gtruby/custom_visitor.rb000066400000000000000000000042171211610345200226130ustar00rootroot00000000000000# # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtruby' module GT class TestVisitor < CustomVisitor attr_reader :sn, :en, :rn, :cn, :fn, :mn def initialize super() @sn = nil @en = nil @rn = nil @cn = nil @fn = nil @mn = nil end def visit_feature_node(fn) @fn = fn 0 end def visit_sequence_node(sn) @sn = sn 0 end def visit_comment_node(cn) @cn = cn 0 end def visit_region_node(rn) @rn = rn 0 end def visit_meta_node(mn) @mn = mn 0 end def visit_eof_node(en) @en = en 0 end end end fn = GT::FeatureNode.create("foo", "gene", 100, 10000, "+") cn = GT::CommentNode.create("comment") rn = GT::RegionNode.create("foo", 100, 2000) sn = GT::SequenceNode.create("foo", "AGATATAGA") en = GT::EOFNode.create mn = GT::MetaNode.create("foo", "bar") v = GT::TestVisitor.new raise unless v.sn.nil? sn.accept(v) raise if v.sn.nil? or v.sn != sn raise unless v.cn.nil? cn.accept(v) raise if v.cn.nil? or v.cn != cn raise unless v.fn.nil? fn.accept(v) raise if v.fn.nil? or v.fn != fn raise unless v.en.nil? en.accept(v) raise if v.en.nil? or v.en != en raise unless v.rn.nil? rn.accept(v) raise if v.rn.nil? or v.rn != rn raise unless v.mn.nil? mn.accept(v) raise if v.mn.nil? or v.mn != mn genometools-1.5.1/testdata/gtruby/encseq.rb000066400000000000000000000231111211610345200207720ustar00rootroot00000000000000# # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtruby' require 'tempfile' @dnaseqfile = Tempfile.new('dnaseq') @aaseqfile = Tempfile.new('aaseq') @dseq1 = "agtccagctgtcagctagcgggcccgatgatatttt" @dseq2 = "gtgctgtac" @dseq3 = "gtacagcac" @dseq4 = "aaaatatcatcgggcccgctagctgacagctggact" @dnaseqfile.write(">seq1\n#{@dseq1}\n") @dnaseqfile.write(">seq2\n#{@dseq2}\n") @aaseq1 = "MVHFTAEEKAAVTSLWSKMNVEEAGGEALG" @aaseq2 = "KMNAVE" @aaseqfile.write(">seq1\n#{@aaseq1}\n") @aaseqfile.write(">seq2\n#{@aaseq2}\n") @dnaseqfile.flush @aaseqfile.flush @idxsuffixes = ['esq','des','ssp','sds'] def create_es(indexname) GT::EncseqEncoder.new.encode([@dnaseqfile.path], indexname) end def create_es_protein(indexname) GT::EncseqEncoder.new.encode([@aaseqfile.path], indexname) end def create_mem a= GT::Alphabet.create_dna eb = GT::EncseqBuilder.create(a) eb.enable_description_support eb.enable_multiseq_support eb.add_string(@dseq1, 'seq1') eb.add_string(@dseq2, 'seq2') eb.build end def create_mem_protein a = GT::Alphabet.create_protein eb = GT::EncseqBuilder.create(a) eb.enable_description_support eb.enable_multiseq_support eb.add_string(@aaseq1, 'seq1') eb.add_string(@aaseq2, 'seq2') eb.build end def delete_idx(indexname) @idxsuffixes.each do |suf| File.unlink(indexname+"."+suf) end end val = create_es("foo") @idxsuffixes.each do |suf| raise if !File.exists?("foo.#{suf}") end delete_idx("foo") create_es("foo_mapped") el = GT::EncseqLoader.new es = el.load("foo_mapped") raise if not es delete_idx("foo_mapped") el = GT::EncseqLoader.new begin el.load("foo_fail") raise rescue # pass end def run_test_num_seqs(es) raise unless es.num_of_sequences == 2 if es.alphabet.is_dna? then es.mirror raise unless es.num_of_sequences == 4 es.unmirror end end def run_test_num_files(es) raise unless es.num_of_files == 1 if es.alphabet.is_dna? then es.mirror raise unless es.num_of_files == 1 es.unmirror end end def run_test_num_files_mem(es) raise unless es.num_of_files == 1 if es.alphabet.is_dna? then es.mirror raise unless es.num_of_files == 1 es.unmirror end end def run_test_descriptions(es) begin es.description(2) raise rescue #pass end raise unless es.description(0) == "seq1" raise unless es.description(1) == "seq2" if es.alphabet.is_dna? then es.mirror begin es.description(5) raise rescue #pass end raise unless es.description(3) == "seq1" raise unless es.description(2) == "seq2" es.unmirror end end def run_test_total_length(es) raise unless es.total_length == 46 es.mirror raise unless es.total_length == 93 es.unmirror end def run_test_total_length_protein(es) raise unless es.total_length == 37 end def run_test_get_encoded_char(es, seq1, seq2, seq3=nil, seq4=nil) a = es.alphabet 0.upto(seq1.length-1) do |i| encchar = es.get_encoded_char(i, GT::READMODE_FORWARD) raise unless a.decode(encchar) == seq1[i].chr end (seq2.length-1).downto(0) do |i| encchar = es.get_encoded_char(seq2.length-1-i, GT::READMODE_REVERSE) raise unless a.decode(encchar) == seq2[i].chr end if a.is_dna? then es.mirror 0.upto(seq3.length-1) do |i| encchar = es.get_encoded_char(47+i, GT::READMODE_FORWARD) raise unless a.decode(encchar) == seq3[i].chr end (seq4.length-1).downto(0) do |i| encchar = es.get_encoded_char(seq4.length-1-i, GT::READMODE_REVERSE) raise unless a.decode(encchar) == seq4[i].chr end es.unmirror end end def run_test_seq_startpos(es) raise unless es.seqstartpos(0) == 0 raise unless es.seqstartpos(1) == 37 es.mirror raise unless es.seqstartpos(2) == 47 raise unless es.seqstartpos(3) == 57 es.unmirror end def run_test_seq_startpos_protein(es) raise unless es.seqstartpos(0) == 0 raise unless es.seqstartpos(1) == 31 end def run_test_seq_length(es) raise unless es.seqlength(0) == 36 raise unless es.seqlength(1) == 9 es.mirror raise unless es.seqlength(3) == 36 raise unless es.seqlength(2) == 9 es.unmirror end def run_test_file_length(es) raise "#{es.effective_filelength(0)} != 46" \ unless es.effective_filelength(0) == 46 end def run_test_seq_length_protein(es) raise unless es.seqlength(0) == 30 raise unless es.seqlength(1) == 6 end def run_test_file_length_protein(es) raise "#{es.effective_filelength(0)} != 37" \ unless es.effective_filelength(0) == 37 end def run_test_seq_substr_encoded(es, seq1, seq2, seq3=nil, seq4=nil) start = 3 stop = 13 res = es.extract_encoded(start, stop) a = es.alphabet() start.upto(stop) do |i| raise unless a.decode(res[i-start]) == seq1[i].chr end start = 0 stop = 5 spos = es.seqstartpos(1) res = es.extract_encoded(start+spos, stop+spos) start.upto(stop) do |i| raise unless a.decode(res[i-start]) == seq2[i].chr end if a.is_dna? then es.mirror spos = es.seqstartpos(2) start = 3 stop = 8 res = es.extract_encoded(start+spos, stop+spos) a = es.alphabet() start.upto(stop) do |i| raise unless a.decode(res[i-start]) == seq3[i].chr end start = 0 stop = 5 spos = es.seqstartpos(3) res = es.extract_encoded(start+spos, stop+spos) start.upto(stop) do |i| raise unless a.decode(res[i-start]) == seq4[i].chr end es.unmirror end end def run_test_seq_substr_plain(es, seq1, seq2, seq3=nil, seq4=nil) start = 3 stop = 13 raise unless es.extract_decoded(start, stop) == seq1[start..(stop)] start = 0 stop = 5 spos = es.seqstartpos(1) raise unless es.extract_decoded(spos+start, spos+stop) == seq2[start..(stop)] if es.alphabet.is_dna? then es.mirror spos = es.seqstartpos(2) start = 3 stop = 8 raise unless es.extract_decoded(start+spos, stop+spos) == seq3[start..(stop)] start = 0 stop = 5 spos = es.seqstartpos(3) raise unless es.extract_decoded(start+spos, stop+spos) == seq4[start..(stop)] es.unmirror end end def run_test_seq_substr_sequential(es, seq1, seq2, seq3=nil, seq4=nil) start = 3 stop = 13 er = es.create_reader_with_readmode(GT::READMODE_FORWARD, start) a = es.alphabet() start.upto(stop) do |i| raise unless a.decode(er.next_encoded_char) == seq1[i].chr end start = es.seqstartpos(1) stop = start + 5 er = es.create_reader_with_readmode(GT::READMODE_FORWARD, start) 0.upto(stop-start) do |i| encchar = a.decode(er.next_encoded_char) seqchar = seq2[i].chr raise unless encchar == seqchar end if a.is_dna? then es.mirror start = es.seqstartpos(2) stop = start + 5 er = es.create_reader_with_readmode(GT::READMODE_FORWARD, start) 0.upto(stop-start) do |i| encchar = a.decode(er.next_encoded_char) seqchar = seq3[i].chr raise unless encchar == seqchar end start = es.seqstartpos(3) stop = start + 5 er = es.create_reader_with_readmode(GT::READMODE_FORWARD, start) 0.upto(stop-start) do |i| encchar = a.decode(er.next_encoded_char) seqchar = seq4[i].chr raise unless encchar == seqchar end es.unmirror end end create_es("foo") el = GT::EncseqLoader.new es = el.load("foo") run_test_descriptions(es) run_test_get_encoded_char(es, @dseq1, @dseq2, @dseq3, @dseq4) run_test_num_seqs(es) run_test_num_files(es) run_test_seq_length(es) run_test_seq_startpos(es) run_test_file_length(es) run_test_seq_substr_encoded(es, @dseq1, @dseq2, @dseq3, @dseq4) run_test_seq_substr_plain(es, @dseq1, @dseq2, @dseq3, @dseq4) run_test_seq_substr_sequential(es, @dseq1, @dseq2, @dseq3, @dseq4) run_test_total_length(es) delete_idx("foo") es = create_mem run_test_descriptions(es) run_test_get_encoded_char(es, @dseq1, @dseq2, @dseq3, @dseq4) run_test_num_seqs(es) run_test_num_files_mem(es) run_test_seq_length(es) run_test_seq_substr_encoded(es, @dseq1, @dseq2, @dseq3, @dseq4) run_test_seq_substr_plain(es, @dseq1, @dseq2, @dseq3, @dseq4) run_test_seq_substr_sequential(es, @dseq1, @dseq2, @dseq3, @dseq4) run_test_total_length(es) create_es_protein("foo") el = GT::EncseqLoader.new es = el.load("foo") run_test_descriptions(es) run_test_get_encoded_char(es,@aaseq1,@aaseq2) run_test_num_seqs(es) run_test_num_files(es) run_test_seq_startpos_protein(es) run_test_file_length_protein(es) run_test_seq_length_protein(es) run_test_seq_substr_encoded(es,@aaseq1,@aaseq2) run_test_seq_substr_plain(es,@aaseq1,@aaseq2) run_test_seq_substr_sequential(es,@aaseq1,@aaseq2) run_test_total_length_protein(es) delete_idx("foo") es = create_mem_protein run_test_descriptions(es) run_test_get_encoded_char(es,@aaseq1,@aaseq2) run_test_num_seqs(es) run_test_num_files_mem(es) run_test_seq_length_protein(es) run_test_seq_substr_encoded(es,@aaseq1,@aaseq2) run_test_seq_substr_plain(es,@aaseq1,@aaseq2) run_test_seq_substr_sequential(es,@aaseq1,@aaseq2) run_test_total_length_protein(es) genometools-1.5.1/testdata/gtruby/feature_node.rb000066400000000000000000000054461211610345200221670ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtruby' class TestFailedError < Exception end fn = GT::FeatureNode.create("test", "type", 100, 500, "+") fn.add_attribute("test","testval") fn.add_attribute("test2","testval2") if fn.score_is_defined? then raise TestFailedError end fn.set_score(2) if !fn.score_is_defined? then raise TestFailedError end if fn.get_score != 2 then raise TestFailedError end fn.unset_score() if fn.score_is_defined? then raise TestFailedError end if fn.has_type?("foo") then raise TestFailedError end if !fn.has_type?("type") then raise TestFailedError end if !fn.get_strand == "+" then raise TestFailedError end fn2 = GT::FeatureNode.create("test", "type2", 200,300,"+") fn.add_child(fn2) num_attrs = 0 fn.each_attribute do |tag, val| if val != fn.get_attribute(tag) then raise TestFailedError end num_attrs += 1 end if !num_attrs == 2 then raise TestFailedError end if fn.get_phase != 3 then #undefined raise TestFailedError end fn.set_phase(0) if fn.get_phase != 0 then #zero raise TestFailedError end if fn.get_filename != "generated" then raise TestFailedError end begin fn.add_child(GT::FeatureNode.create("nottest", "foo", 100, 200, "+")) rescue GT::GTError => msg # expect exception else raise TestFailedError end fni = GT::FeatureNodeIteratorDepthFirst.new(fn) num_features = 0 tfn = fni.next while tfn do num_features += 1 tfn = fni.next end if num_features != 2 then raise TestFailedError end fn3 = GT::FeatureNode.create("test", "type3", 250, 300,"+") fn.add_child(fn3) fni = GT::FeatureNodeIteratorDepthFirst.new(fn) num_features = 0 tfn = fni.next while tfn do num_features += 1 tfn = fni.next end if num_features != 3 then raise TestFailedError end types = [] fn.traverse_dfs do |tfn| types.push(tfn.get_type()) end if types != ["type", "type2", "type3"] then raise TestFailedError end types = [] fn.traverse_direct do |tfn| types.push(tfn.get_type()) end if types != ["type2", "type3"] then raise TestFailedError end genometools-1.5.1/testdata/gtruby/feature_stuff.rb000066400000000000000000000037431211610345200223670ustar00rootroot00000000000000# # Copyright (c) 2007 Gordon Gremme # Copyright (c) 2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing the Ruby bindings for FeatureIndex and FeatureStream classes require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} GFF3_file" STDERR.puts "Test the FeatureIndex and FeatureStream bindings on GFF3 file." exit(1) end gff3file = ARGV[0] # set up the feature stream genome_stream = GT::GFF3InStream.new(gff3file) # try to instantiate an interface begin feature_index = GT::FeatureIndex.new() rescue NotImplementedError => e raise unless /GT::FeatureIndex implementation/.match(e) else raise end # instantiate index object feature_index = GT::FeatureIndexMemory.new() genome_stream = GT::FeatureStream.new(genome_stream, feature_index) feature = genome_stream.next_tree() while (feature) do feature = genome_stream.next_tree() end seqid = feature_index.get_first_seqid() features = feature_index.get_features_for_seqid(seqid) raise if not features rng = feature_index.get_range_for_seqid(seqid) features_r = feature_index.get_features_for_range(rng.start, rng.end, seqid) raise unless features.length == features_r.length gff3_visitor = GT::GFF3Visitor.new() features.each do |feature| feature.accept(gff3_visitor) end genometools-1.5.1/testdata/gtruby/feature_stuff_db.rb000066400000000000000000000031001211610345200230170ustar00rootroot00000000000000# # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing the Ruby bindings for the database-backed feature stores require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} GFF3_db" STDERR.puts "Test the FeatureIndex bindings on GFF-like db." exit(1) end gffdb = ARGV[0] rdb = GT::RDBSqlite.new(gffdb) adb = GT::AnnoDBGFFlike.new() feature_index = adb.get_feature_index(rdb) seqid = feature_index.get_first_seqid() features = feature_index.get_features_for_seqid(seqid) raise if not features rng = feature_index.get_range_for_seqid(seqid) features_r = feature_index.get_features_for_range(rng.start, rng.end, seqid) raise unless features.length == features_r.length gff3_visitor = GT::GFF3Visitor.new() features.each do |feature| feature.accept(gff3_visitor) end genometools-1.5.1/testdata/gtruby/genome_visitor.rb000066400000000000000000000023301211610345200225450ustar00rootroot00000000000000# # Copyright (c) 2007 Gordon Gremme # Copyright (c) 2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing the Ruby bindings for the GFF3 GenomeVisitor (similar to gff3 tool) require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} GFF3_file" STDERR.puts "Parse and output the given GFF3_file." exit(1) end gff3file = ARGV[0] gs = GT::GFF3InStream.new(gff3file) gv = GT::GFF3Visitor.new() gn = gs.next_tree() while gn do gn.accept(gv) gn = gs.next_tree() end genometools-1.5.1/testdata/gtruby/gff3.rb000066400000000000000000000023621211610345200203460ustar00rootroot00000000000000# # Copyright (c) 2007 Gordon Gremme # Copyright (c) 2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing the Ruby bindings for the GFF3 output stream (similar to gff3 tool) require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} GFF3_file" STDERR.puts "Parse and output the given GFF3_file." exit(1) end gff3file = ARGV[0] in_stream = GT::GFF3InStream.new(gff3file) out_stream = GT::GFF3OutStream.new(in_stream) gn = out_stream.next_tree() while gn do gn = out_stream.next_tree() end genometools-1.5.1/testdata/gtruby/graphics_stuff.rb000066400000000000000000000055721211610345200225360ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtruby' if ARGV.size != 2 then STDERR.puts "Usage: #{$0} curve_coords PNG_file" STDERR.puts "Tests drawing functions in the Graphics object." exit(1) end g = GT::GraphicsCairoSVG.new(700, 800) black = [0,0,0,1].pack('dddd').to_ptr black2 = [0,0,0,0.7].pack('dddd').to_ptr red = [1,0,0,0.2].pack('dddd').to_ptr red2 = [1,0,0,0.3].pack('dddd').to_ptr grey1 = [0,0,0,0.3].pack('dddd').to_ptr green = [0,1,0,0.2].pack('dddd').to_ptr lastcol = [0,1,1,0.2].pack('dddd').to_ptr blue = [0,0,1,0.6].pack('dddd').to_ptr g.draw_text(300, 20, "draw_text") g.draw_text_right(300, 40, "draw_text_left") g.draw_text_centered(300, 60, "draw_text_centered") g.draw_colored_text(300, 80, red, "draw_colored_text") g.set_margins(20, 30) raise if g.get_image_height() != 800 raise if g.get_image_width() != 700 raise if g.get_xmargins() != 20 raise if g.get_ymargins() != 30 g.draw_horizontal_line(150, 100, grey1, 300, 5.5) g.draw_vertical_line(200, 70, red2, 100, 3.5) g.draw_box(150, 120, 300, 30, green, GT::ARROW_LEFT, 20, 2, \ black, false) g.draw_box(150, 170, 300, 20, lastcol, GT::ARROW_RIGHT, 20, 1, \ black, false) g.draw_box(150, 210, 300, 20, red, GT::ARROW_BOTH, 20, 1, \ black, false) g.draw_box(300, 250, 20, 20, red, GT::ARROW_BOTH, 20, 1, \ black, false) g.draw_box(150, 290, 300, 20, red, GT::ARROW_NONE, 20, 1, \ black, false) g.draw_dashes(159, 340, 90, 20, GT::ARROW_RIGHT, 20, 1, black) g.draw_dashes(359, 340, 60, 20, GT::ARROW_LEFT, 20, 1, black) g.draw_dashes(59, 340, 60, 20, GT::ARROW_NONE, 20, 1, black) g.draw_dashes(559, 340, 60, 20, GT::ARROW_BOTH, 20, 1, black) g.draw_caret(159, 390, 90, 20, GT::ARROW_RIGHT, 20, 1, black) g.draw_caret(359, 390, 60, 20, GT::ARROW_LEFT, 20, 1, black) g.draw_caret(59, 390, 60, 20, GT::ARROW_NONE, 20, 1, black) g.draw_caret(559, 390, 60, 20, GT::ARROW_BOTH, 20, 1, black) data = [] File.open(ARGV[0]) do |file| file.each_line do |l| data.push(l.to_f) end end g.draw_curve_data(20, 430, blue, data, data.length, 0, 1, 40) g.to_file(ARGV[1]) genometools-1.5.1/testdata/gtruby/node_types.rb000066400000000000000000000052061211610345200216720ustar00rootroot00000000000000# # Copyright (c) 2009 Sascha Steinbiss # Copyright (c) 2009 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtruby' class TestFailedError < Exception end # test CommentNodes cn = GT::CommentNode.create("Comment") cn2 = GT::CommentNode.create(333) unless cn.get_comment == "Comment" raise(TestFailedError, "CommentNode.get_comment") end unless cn2.get_comment == "333" raise(TestFailedError, "CommentNode.get_comment") end # test SequenceNodes SEQUENCE = 'AGATATAGA' DESC = 'testdesc' begin sn = GT::SequenceNode.create("foo") rescue ArgumentError # expected else raise(TestFailedError, "no failure on not enough arguments") end sn = GT::SequenceNode.create(DESC, SEQUENCE) unless sn.get_description == 'testdesc' raise(TestFailedError, "SequenceNode.get_description") end unless (seq = sn.get_sequence) == 'AGATATAGA' raise(TestFailedError, "SequenceNode.get_sequence") end unless sn.get_sequence_length == 9 raise(TestFailedError, "SequenceNode.get_sequence_length") end unless sn.get_sequence_length == seq.length raise(TestFailedError, "SequenceNode.get_sequence_length") end # test RegionNodes begin rn = GT::RegionNode.create("foo", 100, 50) rescue ArgumentError # expected else raise(TestFailedError, "no failure on start > stop") end # does not have any exposed methods yet (see _api.h) # test MetaNodes cn = GT::MetaNode.create("directive", "data") cn2 = GT::MetaNode.create(333, 444) unless cn.get_directive == "directive" raise(TestFailedError, "MetaNode.get_directive") end unless cn2.get_directive == "333" raise(TestFailedError, "CommentNode.get_directive") end unless cn.get_data == "data" raise(TestFailedError, "MetaNode.get_data") end unless cn2.get_data == "444" raise(TestFailedError, "CommentNode.get_data") end # test EOFNodes rn = GT::EOFNode.create() if rn.nil? then raise(TestFailedError, "EOFNode.create") end # does not have any exposed methods yet (see _api.h) genometools-1.5.1/testdata/gtruby/range.rb000066400000000000000000000042071211610345200206150ustar00rootroot00000000000000# # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtruby' def assert_raises begin yield raise rescue GT::GTError, ArgumentError => e #pass end end assert_raises do GT::Range.new() end assert_raises do GT::Range.new(1) end assert_raises do GT::Range.new(1, nil) end assert_raises do GT::Range.new(nil, 1) end assert_raises do GT::Range.new(20, 1) end assert_raises do GT::Range.new(-1, 1) end assert_raises do GT::Range.new(1, -1) end assert_raises do GT::Range.new(-1, -1) end assert_raises do GT::Range.new(-1, -2) end raise unless !GT::Range.new(1, 2).nil? raise unless !GT::Range.new(1, 1).nil? rng = GT::Range.new(100, 200) assert_raises do rng.start = 300 end assert_raises do rng.start = -100 end assert_raises do rng.end = 50 end assert_raises do rng.end = -350 end rng.start = 50 raise unless rng.start == 50 rng.start = 150 raise unless rng.start == 150 rng.end = 250 raise unless rng.end == 250 rng.end = 151 raise unless rng.end == 151 rng.end = 150 raise unless rng.end == 150 assert_raises do rng.set(1) end assert_raises do rng.set(1, nil) end assert_raises do rng.set(nil, 1) end assert_raises do rng.set(20, 1) end assert_raises do rng.set(-1, 1) end assert_raises do rng.set(1, -1) end assert_raises do rng.set(-1, -1) end assert_raises do rng.set(-1, -2) end genometools-1.5.1/testdata/gtruby/show_recmaps.rb000066400000000000000000000034641211610345200222170ustar00rootroot00000000000000# # Copyright (c) 2008 Gordon Gremme # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing the Ruby bindings for libgtview require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} PNG_file GFF3_file" STDERR.puts "Show RecMaps of GFF3 annotation file." exit(1) end gff3file = ARGV[0] in_stream = GT::GFF3InStream.new(gff3file) feature_index = GT::FeatureIndexMemory.new() feature_stream = GT::FeatureStream.new(in_stream, feature_index) gn = feature_stream.next_tree() # fill feature index while (gn) do gn = feature_stream.next_tree() end seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = GT::Style.new() diagram = GT::Diagram.from_index(feature_index, seqid, range, style) layout = GT::Layout.new(diagram, 700, style) ii = GT::ImageInfo.new() image_info = GT::ImageInfo.new() canvas = GT::CanvasCairoFile.new(style, 800, layout.get_height, image_info) layout.sketch(canvas) image_info.each_hotspot do |x1, y1, x2, y2, gn| puts "x1=#{x1}, y1=#{y1}, x2=#{x2}, y2=#{y2}, gn.type=#{gn.get_type}" end genometools-1.5.1/testdata/gtruby/show_seqids.rb000066400000000000000000000026111211610345200220460ustar00rootroot00000000000000# # Copyright (c) 2007 Gordon Gremme # Copyright (c) 2007 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing some Ruby bindings for FeatureIndex require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} GFF3_file" STDERR.puts "Show sequence ids contained in GFF3 annotation file." exit(1) end gff3file = ARGV[0] in_stream = GT::GFF3InStream.new(gff3file) feature_index = GT::FeatureIndexMemory.new() feature_stream = GT::FeatureStream.new(in_stream, feature_index) gn = feature_stream.next_tree() # fill feature index while (gn) do gn = feature_stream.next_tree() end seqids = feature_index.get_seqids() seqids.each { |seqid| puts seqid } genometools-1.5.1/testdata/gtruby/sketch-failures.rb000066400000000000000000000042641211610345200226150ustar00rootroot00000000000000# # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} GFF3_file" exit(1) end class TestFailedError < Exception end feature_index = GT::FeatureIndexMemory.new() feature_index.add_gff3file(ARGV[0]) seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = GT::Style.new() style.set_num("format","margins",100) begin diagram = GT::Diagram.from_index(feature_index, "nonexist", range, style) rescue GT::GTError => msg raise if !/feature index does not contain the given sequence id/.match(msg) else raise TestFailedError end begin diagram = GT::Diagram.from_index(nil, seqid, range, style) rescue # exception expected else raise TestFailedError end begin diagram = GT::Diagram.from_index(feature_index, seqid, nil, style) rescue # exception expected else raise TestFailedError end begin diagram = GT::Diagram.from_index(feature_index, seqid, range, "Dd") rescue # exception expected else raise TestFailedError end diagram = GT::Diagram.from_index(feature_index, seqid, range, style) begin layout = GT::Layout.new(diagram, 70, style) rescue GT::GTError => msg raise if !/layout width must at least be twice the x-margin/.match(msg) else raise TestFailedError end layout = GT::Layout.new(diagram, 700, style) canvas = GT::CanvasCairoFile.new(style, 700, layout.get_height, nil) genometools-1.5.1/testdata/gtruby/sketch.rb000066400000000000000000000033641211610345200210050ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing the Ruby bindings for AnnotationSketch (similar to the sketch tool) require 'gtruby' if ARGV.size != 2 then STDERR.puts "Usage: #{$0} PNG_file GFF3_file" STDERR.puts "Create PNG representation of GFF3 annotation file." exit(1) end pngfile = ARGV[0] gff3file = ARGV[1] in_stream = GT::GFF3InStream.new(gff3file) feature_index = GT::FeatureIndexMemory.new() feature_stream = GT::FeatureStream.new(in_stream, feature_index) gn = feature_stream.next_tree() # fill feature index while (gn) do gn = feature_stream.next_tree() end seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = GT::Style.new() diagram = GT::Diagram.from_index(feature_index, seqid, range, style) layout = GT::Layout.new(diagram, 700, style) ii = GT::ImageInfo.new() canvas = GT::CanvasCairoFile.new(style, 700, layout.get_height, ii) layout.sketch(canvas) canvas.to_file(pngfile) genometools-1.5.1/testdata/gtruby/sketch_parsed_with_invalid_ordering.rb000066400000000000000000000020351211610345200267670ustar00rootroot00000000000000require 'gtruby' if ARGV.size != 3 then STDERR.puts "Usage: #{$0} style_file PNG_file GFF3_file" STDERR.puts "Create PNG representation of GFF3 annotation file." exit(1) end (stylefile, pngfile, gff3file) = ARGV # load style file style = GT::Style.new() style.load_file(stylefile) # create feature index feature_index = GT::FeatureIndexMemory.new() # add GFF3 file to index feature_index.add_gff3file(gff3file) # create diagram for first sequence ID in feature index seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) diagram = GT::Diagram.from_index(feature_index, seqid, range, style) # create layout for given width layout = GT::Layout.new(diagram, 800, style) # set a track ordering comparator function layout.set_track_ordering_func(lambda { |s1, s2| return "not_a_number" }) # create canvas with given width and computed height canvas = GT::CanvasCairoFile.new(style, 800, layout.get_height, nil) # sketch layout on canvas layout.sketch(canvas) # write canvas to file canvas.to_file(pngfile) genometools-1.5.1/testdata/gtruby/sketch_parsed_with_invalid_ordering_2.rb000066400000000000000000000020221211610345200272040ustar00rootroot00000000000000require 'gtruby' if ARGV.size != 3 then STDERR.puts "Usage: #{$0} style_file PNG_file GFF3_file" STDERR.puts "Create PNG representation of GFF3 annotation file." exit(1) end (stylefile, pngfile, gff3file) = ARGV # load style file style = GT::Style.new() style.load_file(stylefile) # create feature index feature_index = GT::FeatureIndexMemory.new() # add GFF3 file to index feature_index.add_gff3file(gff3file) # create diagram for first sequence ID in feature index seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) diagram = GT::Diagram.from_index(feature_index, seqid, range, style) # create layout for given width layout = GT::Layout.new(diagram, 800, style) # set a track ordering comparator function layout.set_track_ordering_func(lambda { |s1, s2| return nil }) # create canvas with given width and computed height canvas = GT::CanvasCairoFile.new(style, 800, layout.get_height, nil) # sketch layout on canvas layout.sketch(canvas) # write canvas to file canvas.to_file(pngfile) genometools-1.5.1/testdata/gtruby/sketch_parsed_with_ordering.rb000066400000000000000000000020311211610345200252550ustar00rootroot00000000000000require 'gtruby' if ARGV.size != 3 then STDERR.puts "Usage: #{$0} style_file PNG_file GFF3_file" STDERR.puts "Create PNG representation of GFF3 annotation file." exit(1) end (stylefile, pngfile, gff3file) = ARGV # load style file style = GT::Style.new() style.load_file(stylefile) # create feature index feature_index = GT::FeatureIndexMemory.new() # add GFF3 file to index feature_index.add_gff3file(gff3file) # create diagram for first sequence ID in feature index seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) diagram = GT::Diagram.from_index(feature_index, seqid, range, style) # create layout for given width layout = GT::Layout.new(diagram, 800, style) # set a track ordering comparator function layout.set_track_ordering_func(lambda { |s1, s2| return s2 <=> s1 }) # create canvas with given width and computed height canvas = GT::CanvasCairoFile.new(style, 800, layout.get_height, nil) # sketch layout on canvas layout.sketch(canvas) # write canvas to file canvas.to_file(pngfile) genometools-1.5.1/testdata/gtruby/sketch_stream.rb000066400000000000000000000040151211610345200223520ustar00rootroot00000000000000# # Copyright (c) 2007-2008 Gordon Gremme # Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing the Ruby bindings for AnnotationSketch (similar to the sketch tool) require 'gtruby' if ARGV.size != 2 then STDERR.puts "Usage: #{$0} PNG_file GFF3_file" STDERR.puts "Create PNG representation of GFF3 annotation file (adds introns)." exit(1) end pngfile = ARGV[0] gff3file = ARGV[1] in_stream = GT::GFF3InStream.new(gff3file) # add introns add_introns_stream = GT::AddIntronsStream.new(in_stream) in_stream = add_introns_stream feature_index = GT::FeatureIndexMemory.new() feature_stream = GT::FeatureStream.new(in_stream, feature_index) gn = feature_stream.next_tree() # fill feature index while (gn) do gn = feature_stream.next_tree() if !gn.nil? and gn.get_filename != gff3file then raise TestFailedError end end seqid = feature_index.get_first_seqid() range = feature_index.get_range_for_seqid(seqid) style = GT::Style.new() diagram = GT::Diagram.from_index(feature_index, seqid, range, style) layout = GT::Layout.new(diagram, 700, style) ii = GT::ImageInfo.new() canvas = GT::CanvasCairoFile.new(style, 700, layout.get_height, ii) layout.sketch(canvas) pngstream = canvas.to_stream outfile = File.new(pngfile, "w") outfile.write(pngstream) outfile.close genometools-1.5.1/testdata/gtruby/style.rb000066400000000000000000000100141211610345200206520ustar00rootroot00000000000000# # Copyright (c) 2008 Gordon Gremme # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing the Ruby bindings for the style object require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} style_file" STDERR.puts "Load style_file and test style bindings." exit(1) end stylefile = ARGV[0] # create new style object style = GT::Style.new() # load style file style.load_file(stylefile) # clone style file clone = style.clone raise if not clone # get color color = style.get_color("exon", "fill") raise if not color # set color color = GT::Color.malloc color.red = 0.3 color.green = 0.4 color.blue = 0.3 style.set_color("exon", "fill", color) color2 = style.get_color("exon", "fill") raise if color2.red != color.red \ and color2.green != color.green \ and color2.blue != color.blue # unset color style.unset("exon", "fill") color2 = style.get_color("exon", "fill") raise if not color2.nil? # get undefined color color = style.get_color("undefined", "undefined") raise if not color.nil? # get string str = style.get_cstr("exon", "style") raise if str != "box" # set string style.set_cstr("exon", "style", "line") str = style.get_cstr("exon", "style") raise if str != "line" # unset string style.unset("exon", "style") str = style.get_cstr("exon", "style") raise if not str.nil? # get undefined string str = style.get_cstr("undefined", "undefined") raise if not str.nil? # get number num = style.get_num("format", "margins") raise if num != 30 # set number style.set_num("format", "margins", 20) num = style.get_num("format", "margins") raise if num != 20 # unset number style.unset("format", "margins"); num = style.get_num("format", "margins") raise if not num.nil? #get undefined number num = style.get_num("undefined", "undefined") raise if not num.nil? # get boolean bool = style.get_bool("format", "show_grid") raise if not bool # get undefined boolean bool = style.get_bool("undefined", "undefined") raise if not bool.nil? # set boolean style.set_bool("format", "show_grid", false) bool = style.get_bool("format", "show_grid") raise if bool # unset boolean style.unset("format", "show_grid") bool = style.get_bool("format", "show_grid") raise if not bool.nil? # serialise style to Lua code style.set_num("format", "margins", 20) style.set_bool("format", "show_grid", true) color = GT::Color.malloc color.red = 0.3 color.green = 0.4 color.blue = 0.3 style.set_color("exon", "fill", color) luacode = style.to_str raise if luacode.nil? or luacode.length == 0 # load style from Lua code style.load_str(luacode) num = style.get_num("format", "margins") raise if num != 20 bool = style.get_bool("format", "show_grid") raise if not bool color2 = style.get_color("exon", "fill") raise if color2.red != color.red \ and color2.green != color.green \ and color2.blue != color.blue # clone style from existing copy style2 = style.clone num = style2.get_num("format", "margins") raise if num != 20 bool = style2.get_bool("format", "show_grid") raise if not bool color2 = style2.get_color("exon", "fill") raise if color2.red != color.red \ and color2.green != color.green \ and color2.blue != color.blue style2.set_num("format", "margins", 30) raise if style2.get_num("format", "margins") != 30 raise if style.get_num("format", "margins")\ == style2.get_num("format", "margins") genometools-1.5.1/testdata/gtruby/style_serialize.rb000066400000000000000000000022221211610345200227230ustar00rootroot00000000000000# # Copyright (c) 2010 Sascha Steinbiss # Copyright (c) 2010 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} style_file" STDERR.puts "Load style_file and test style bindings." exit(1) end stylefile = ARGV[0] # create new style object style = GT::Style.new() # load style file style.load_file(stylefile) # serialise to Lua code style.to_str genometools-1.5.1/testdata/gtruby/type_checker.rb000066400000000000000000000030011211610345200221550ustar00rootroot00000000000000# # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} OBO_file" STDERR.puts "Test the type checker Ruby bindings using ." exit(1) end obofile = ARGV[0] begin tc = GT::TypeChecker.new rescue NotImplementedError => msg # expect exception else raise TestFailedError end tc = GT::TypeCheckerBuiltin.new raise unless tc.is_valid?("gene") raise if tc.is_valid?("foo") tc = GT::TypeCheckerOBO.new(obofile) raise unless tc.is_valid?("gene") raise unless tc.is_valid?("processed_transcript") raise if tc.is_valid?("foo") begin tc = GT::TypeCheckerOBO.new("fooo") rescue GT::GTError => msg # expect exception else raise TestFailedError end genometools-1.5.1/testdata/gtruby/used_types.rb000066400000000000000000000024331211610345200217040ustar00rootroot00000000000000# # Copyright (c) 2008 Gordon Gremme # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # testing the Ruby bindings for the GFF3 output stream (similar to gff3 tool) require 'gtruby' if ARGV.size != 1 then STDERR.puts "Usage: #{$0} GFF3_file" STDERR.puts "Parse and output the types used in GFF3_file." exit(1) end gff3file = ARGV[0] in_stream = GT::GFF3InStream.new(gff3file) gn = in_stream.next_tree() while gn do gn = in_stream.next_tree() end used_types = in_stream.get_used_types used_types.each do |type| puts type end genometools-1.5.1/testdata/gtscripts/000077500000000000000000000000001211610345200176775ustar00rootroot00000000000000genometools-1.5.1/testdata/gtscripts/arg.lua000066400000000000000000000017601211610345200211570ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the arg table io.write(string.format("arg[0]=%s\n", arg[0])) for i,v in ipairs(arg) do io.write(string.format("arg[%d]=%s\n", i, v)) end genometools-1.5.1/testdata/gtscripts/bittab.lua000066400000000000000000000040311211610345200216450ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the Bittab class -- testing gt.bittab_new b = gt.bittab_new(10) rval, err = pcall(gt.bittab_new, 0) assert(not rval) assert(string.find(err, "must be > 0")) -- testing bittab:set_bit b:set_bit(1) rval, err = pcall(b.set_bit, b, 10) assert(not rval) assert(string.find(err, "bit number too large")) rval, err = pcall(b.set_bit, a, 1) assert(not rval) assert(string.find(err, "bittab expected")) -- testing bittab:unset_bit b:unset_bit(1); rval, err = pcall(b.unset_bit, b, 10) assert(not rval) assert(string.find(err, "bit number too large")) -- testing bittab:complement src = gt.bittab_new(10) src:set_bit(5) src:set_bit(7) prob = gt.bittab_new(11) b:complement(src) rval, err = pcall(b.complement, b, prob) assert(not rval) assert(string.find(err, "bittabs have different sizes")) -- testing bittab:equal b:equal(src) rval, err = pcall(b.equal, b, prob) assert(not rval) assert(string.find(err, "bittabs have different sizes")) -- testing bittab:and_equal and bittab:bit_is_set a = gt.bittab_new(100) b = gt.bittab_new(100) a:set_bit(0) a:set_bit(50) b:set_bit(50) b:set_bit(99) a:and_equal(b) assert(not a:bit_is_set(0)) assert(a:bit_is_set(50)) assert(not a:bit_is_set(99)) genometools-1.5.1/testdata/gtscripts/cds_stream.lua000066400000000000000000000030051211610345200225240ustar00rootroot00000000000000--[[ Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the CSAStream binding function usage() io.stderr:write(string.format("Usage: %s Fasta_file GFF3_file\n", arg[0])) io.stderr:write("Add CDS features to exon features given in GFF3_file.\n") os.exit(1) end if #arg == 2 then fasta_file = arg[1] gff3file = arg[2] else usage() end in_stream = gt.gff3_in_stream_new_sorted(gff3file) region_mapping = gt.region_mapping_new_seqfile(fasta_file) cds_stream = gt.cds_stream_new(in_stream, region_mapping) out_stream = gt.gff3_out_stream_new(cds_stream) in_stream = nil; cds_stream = nil; collectgarbage() -- being nasty gn = out_stream:next_tree() while (gn) do gn = out_stream:next_tree() end genometools-1.5.1/testdata/gtscripts/csa_stream.lua000066400000000000000000000027071211610345200225310ustar00rootroot00000000000000--[[ Copyright (c) 2008 Gordon Gremme Copyright (c) 2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the CSAStream binding function usage() io.stderr:write(string.format("Usage: %s GFF3_file\n", arg[0])) io.stderr:write("Replace spliced alignments with computed consensus " .. "spliced alignments.\n") os.exit(1) end if #arg == 1 then gff3file = arg[1] else usage() end in_stream = gt.gff3_in_stream_new_sorted(gff3file) csa_stream = gt.csa_stream_new(in_stream, 300) out_stream = gt.gff3_out_stream_new(csa_stream) in_stream = nil; csa_stream = nil; collectgarbage() -- being nasty gn = out_stream:next_tree() while (gn) do gn = out_stream:next_tree() end genometools-1.5.1/testdata/gtscripts/encseq.lua000066400000000000000000000165201211610345200216640ustar00rootroot00000000000000--[[ Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the Encseq class dnaseqfile = arg[1].."/lua_dnaseq.fas" aaseqfile = arg[1].."/lua_aaseq.fas" dseq1 = "agtccagctgtcagctagcgggcccgatgatatttt" dseq2 = "gtgctgtac" aaseq1 = "MVHFTAEEKAAVTSLWSKMNVEEAGGEALG" aaseq2 = "KMNAVE" idxsuffixes = {'esq','des','ssp','sds','al1'} function run_test_num_seqs(es) assert(es:num_of_sequences() == 2) end function run_test_num_files(es) assert(es:num_of_files() == 1) end function run_test_descriptions(es) rval, err = pcall(GenomeTools_encseq.description, es, 2) assert(not rval) assert(string.find(err, "cannot exceed number of sequences")) end function run_test_total_length(es) assert(es:total_length() == 46) end function run_test_total_length_protein(es) assert(es:total_length() == 37) end function run_test_get_encoded_char(es, seq1, seq2) local a = es:alphabet() for i=1,seq1:len() do assert(a:decode(es:get_encoded_char(i-1, 0)) == seq1:sub(i,i)) assert(es:get_decoded_char(i-1, 0) == seq1:sub(i,i)) end for i=seq2:len(),1,-1 do assert(a:decode(es:get_encoded_char(seq2:len()-i, 1)) == seq2:sub(i,i)) assert(es:get_decoded_char(seq2:len()-i, 1) == seq2:sub(i,i)) end rval, err = pcall(GenomeTools_encseq.get_encoded_char, es, 100, 0) assert(not rval) assert(string.find(err, "cannot exceed")) end function run_test_seq_startpos(es) assert(es:seqstartpos(0) == 0) assert(es:seqstartpos(1) == 37) rval, err = pcall(GenomeTools_encseq.seqstartpos, es, 2) assert(not rval) assert(string.find(err, "cannot exceed number of sequences")) end function run_test_seq_startpos_protein(es) assert(es:seqstartpos(0) == 0) assert(es:seqstartpos(1) == 31) rval, err = pcall(GenomeTools_encseq.seqstartpos, es, 2) assert(not rval) assert(string.find(err, "cannot exceed number of sequences")) end function run_test_seq_length(es) assert(es:seqlength(0) == 36) assert(es:seqlength(1) == 9) rval, err = pcall(GenomeTools_encseq.seqlength, es, 2) assert(not rval) assert(string.find(err, "cannot exceed number of sequences")) end function run_test_seq_length_protein(es) assert(es:seqlength(0) == 30) assert(es:seqlength(1) == 6) rval, err = pcall(GenomeTools_encseq.seqlength, es, 2) assert(not rval) assert(string.find(err, "cannot exceed number of sequences")) end function run_test_file_length(es) assert(es:effective_filelength(0) == 46) rval, err = pcall(GenomeTools_encseq.seqlength, es, 2) assert(not rval) assert(string.find(err, "cannot exceed")) end function run_test_file_length_protein(es) assert(es:effective_filelength(0) == 37) rval, err = pcall(GenomeTools_encseq.seqlength, es, 2) assert(not rval) assert(string.find(err, "cannot exceed")) end function run_test_seq_substr_encoded(es, seq1, seq2) start = 3 stop = 13 res = es:extract_encoded(start, stop) a = es:alphabet() for i=start,stop do assert(a:decode(res[i-start+1]) == seq1:sub(i+1,i+1)) end start = es:seqstartpos(1) stop = start + 4 res = es:extract_encoded(start, stop) for i=start,stop do assert(a:decode(res[i-start+1]) == seq2:sub(i-start+1,i-start+1)) end rval, err = pcall(GenomeTools_encseq.extract_encoded, es, 3, 1) assert(not rval) assert(string.find(err, "range endposition")) rval, err = pcall(GenomeTools_encseq.extract_encoded, es, 300, 500) assert(not rval) assert(string.find(err, "cannot exceed")) end function run_test_seq_substr_decoded(es, seq1, seq2) start = 3 stop = 13 res = es:extract_decoded(start, stop) a = es:alphabet() assert(res == seq1:sub(start+1,stop+1)) start = es:seqstartpos(1) stop = start + 4 res = es:extract_decoded(start, stop) assert(res == seq2:sub(1,5)) rval, err = pcall(GenomeTools_encseq.extract_decoded, es, 3, 1) assert(not rval) assert(string.find(err, "range endposition")) rval, err = pcall(GenomeTools_encseq.extract_decoded, es, 300, 500) assert(not rval) assert(string.find(err, "cannot exceed")) end function run_test_seq_substr_sequential(es, seq1, seq2) start = 3 stop = 13 er = es:create_reader_with_readmode(0, start) a = es:alphabet() for i=start,stop do assert(a:decode(er:next_encoded_char()) == seq1:sub(i+1,i+1)) end start = es:seqstartpos(1) stop = start + 4 er = es:create_reader_with_readmode(0, start) for i=start,stop do encchar = a:decode(er:next_encoded_char()) seqchar = seq2:sub(i-start+1, i-start+1) assert(encchar == seqchar) end rval, err = pcall(GenomeTools_encseq.create_reader_with_readmode, es, 0, 300) assert(not rval) assert(string.find(err, "cannot exceed")) end ee = gt.encseq_encoder_new() ee:encode({dnaseqfile}, "dnaseqfile") ee:encode({aaseqfile}, "aaseqfile") el = gt.encseq_loader_new() es = el:load("dnaseqfile") run_test_descriptions(es) run_test_num_seqs(es) run_test_total_length(es) run_test_num_files(es) run_test_get_encoded_char(es, dseq1, dseq2) run_test_seq_length(es) run_test_seq_startpos(es) run_test_file_length(es) run_test_seq_substr_encoded(es, dseq1, dseq2) run_test_seq_substr_decoded(es, dseq1, dseq2) run_test_seq_substr_sequential(es, dseq1, dseq2) a = gt.alphabet_new_dna() eb = gt.encseq_builder_new(a) eb:enable_multiseq_support() eb:add_string(dseq1, "seq1") eb:add_string(dseq2, "seq2") es = eb:build() run_test_descriptions(es) run_test_num_seqs(es) run_test_total_length(es) run_test_num_files(es) run_test_get_encoded_char(es, dseq1, dseq2) run_test_seq_length(es) run_test_seq_startpos(es) run_test_file_length(es) run_test_seq_substr_encoded(es, dseq1, dseq2) run_test_seq_substr_decoded(es, dseq1, dseq2) run_test_seq_substr_sequential(es, dseq1, dseq2) es = el:load("aaseqfile") run_test_descriptions(es) run_test_num_seqs(es) run_test_total_length_protein(es) run_test_num_files(es) run_test_get_encoded_char(es, aaseq1, aaseq2) run_test_seq_length_protein(es) run_test_seq_startpos_protein(es) run_test_file_length_protein(es) run_test_seq_substr_encoded(es, aaseq1, aaseq2) run_test_seq_substr_decoded(es, aaseq1, aaseq2) run_test_seq_substr_sequential(es, aaseq1, aaseq2) a = gt.alphabet_new_protein() eb = gt.encseq_builder_new(a) eb:enable_multiseq_support() eb:add_string(aaseq1, "seq1") eb:add_string(aaseq2, "seq2") es = eb:build() run_test_descriptions(es) run_test_num_seqs(es) run_test_total_length_protein(es) run_test_num_files(es) run_test_get_encoded_char(es, aaseq1, aaseq2) run_test_seq_length_protein(es) run_test_seq_startpos_protein(es) run_test_file_length_protein(es) run_test_seq_substr_encoded(es, aaseq1, aaseq2) run_test_seq_substr_decoded(es, aaseq1, aaseq2) run_test_seq_substr_sequential(es, aaseq1, aaseq2) genometools-1.5.1/testdata/gtscripts/feature_stuff.lua000066400000000000000000000044241211610345200232500ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for FeatureIndex and FeatureStream classes function usage() io.stderr:write(string.format("Usage: %s testdata_dir\n", arg[0])) io.stderr:write("Test the FeatureIndex and FeatureStream bindings.\n") os.exit(1) end if #arg == 1 then testdata = arg[1] else usage() end -- set up the feature stream genome_stream = gt.gff3_in_stream_new_sorted(testdata.."/gff3_file_1_short.txt") feature_index = gt.feature_index_memory_new() genome_stream = gt.feature_stream_new(genome_stream, feature_index) collectgarbage() feature = genome_stream:next_tree() while (feature) do feature = genome_stream:next_tree() end features = feature_index:get_features_for_seqid("ctg123") assert(features) gff3_visitor = gt.gff3_visitor_new() for i,feature in ipairs(features) do feature:accept(gff3_visitor) end range = gt.range_new(1, 100) -- more tests fi = gt.feature_index_memory_new() sr = gt.region_node_new("chr1", 1, 100) gf = gt.feature_node_new("chr1", "gene", 1, 100 , "+") rval, err = pcall(GenomeTools_feature_index.add_feature_node, fi, nil) assert(not rval) assert(string.find(err, "genome_node expected")) rval, err = pcall(GenomeTools_feature_index.add_region_node, fi, nil) assert(not rval) assert(string.find(err, "genome_node expected")) rval, err = pcall(GenomeTools_feature_index.add_region_node, fi, gf) assert(not rval) assert(string.find(err, "not a region node")) fi:add_region_node(sr) fi:add_feature_node(gf) genometools-1.5.1/testdata/gtscripts/filter_metadata_test_all_strings.lua000066400000000000000000000003071211610345200271670ustar00rootroot00000000000000name = "name" author = "author" version = "1.0" email = "email@example.com" short_descr = "short description" description = "description" function filter(gn) return true end genometools-1.5.1/testdata/gtscripts/filter_metadata_test_author_function.lua000066400000000000000000000003651211610345200300610ustar00rootroot00000000000000function name() return "name" end function author() str = "author" return str end version = "1.0" email = "email@example.com" short_descr = "short description" description = "description" function filter(gn) return true end genometools-1.5.1/testdata/gtscripts/filter_metadata_test_description_function.lua000066400000000000000000000005241211610345200310770ustar00rootroot00000000000000function name() return "name" end function author() str = "author" return str end version = function() return "1.0" end function email() return "email" .. "@" .. "example.com" end function short_descr() return "short description" end function description() return "description" end function filter(gn) return true end genometools-1.5.1/testdata/gtscripts/filter_metadata_test_email_function.lua000066400000000000000000000004471211610345200276470ustar00rootroot00000000000000function name() return "name" end function author() str = "author" return str end version = function() return "1.0" end function email() return "email" .. "@" .. "example.com" end short_descr = "short description" description = "description" function filter(gn) return true end genometools-1.5.1/testdata/gtscripts/filter_metadata_test_error_function.lua000066400000000000000000000005351211610345200277070ustar00rootroot00000000000000function name() return "name" end function author() str = "author" barf() return str end version = function() return "1.0" end function email() return "email" .. "@" .. "example.com" end function short_descr() return "short description" end function description() return "description" end function filter(gn) return true end genometools-1.5.1/testdata/gtscripts/filter_metadata_test_name_function.lua000066400000000000000000000003271211610345200274750ustar00rootroot00000000000000function name() return "name" end author = "author" version = "1.0" email = "email@example.com" short_descr = "short description" description = "description" function filter(gn) return true end genometools-1.5.1/testdata/gtscripts/filter_metadata_test_short_description_function.lua000066400000000000000000000005241211610345200323160ustar00rootroot00000000000000function name() return "name" end function author() str = "author" return str end version = function() return "1.0" end function email() return "email" .. "@" .. "example.com" end function short_descr() return "short description" end function description() return "description" end function filter(gn) return true end genometools-1.5.1/testdata/gtscripts/filter_metadata_test_version_function.lua000066400000000000000000000004121211610345200302350ustar00rootroot00000000000000function name() return "name" end function author() str = "author" return str end version = function() return "1.0" end email = "email@example.com" short_descr = "short description" description = "description" function filter(gn) return true end genometools-1.5.1/testdata/gtscripts/filter_test_LTR.lua000066400000000000000000000016761211610345200234610ustar00rootroot00000000000000name = "LTR node type filter" author = "Sascha Kastens" version = "1.0" email = "sascha.kastens@studium.uni-hamburg.de" short_descr = "Select nodes with two long terminal repeats." description = "Selects a node if it contains a node of type " .. "LTR_retrotransposon with two child nodes of type " .. "long_terminal_repeat." function filter(gn) target = "LTR_retrotransposon" subtarget = "long_terminal_repeat" gfi = gt.feature_node_iterator_new(gn) curnode = gfi:next() found_target = false; count = 0 while not(curnode == nil) do if (curnode:get_type() == target) then found_target = true elseif ((found_target == true) and (curnode:get_type() == subtarget)) then count = count + 1 end curnode = gfi:next() end if ((found_target == true) and (count == 2)) then return false elseif found_target == false then return false end return true end genometools-1.5.1/testdata/gtscripts/filter_test_frame_attribute.lua000066400000000000000000000012301211610345200261570ustar00rootroot00000000000000name = "ORF filter w/o frame" author = "Sascha Kastens" version = "1.0" email = "sascha.kastens@studium.uni-hamburg.de" short_descr = "Selects nodes with ORF frame information." description = "Selects a node if it contains a node of type " .. "reading_frame with frame information." function filter(gn) gfi = gt.feature_node_iterator_new(gn) target = "reading_frame" curnode = gfi:next() count = 0 while not(curnode == nil) do if (curnode:get_type() == target) then if (curnode:get_attribute("frame") == nil) then return true end end curnode = gfi:next() end return false end genometools-1.5.1/testdata/gtscripts/filter_test_nodetype.lua000066400000000000000000000007241211610345200246400ustar00rootroot00000000000000name = "Name here" author = "Sascha Kastens" version = "1.0" email = "sascha.kastens@studium.uni-hamburg.de" short_descr = "Short description here." description = "Description here" function filter(gn) target = "exon" gfi = gt.feature_node_iterator_new(gn) curnode = gfi:next() while not(curnode == nil) do if (curnode:get_type() == target) then return false end curnode = gfi:next() end return true end genometools-1.5.1/testdata/gtscripts/filter_test_orf_pos_strand.lua000066400000000000000000000011161211610345200260270ustar00rootroot00000000000000name = "Name here" author = "Sascha Kastens" version = "1.0" email = "sascha.kastens@studium.uni-hamburg.de" short_descr = "Short description here." description = "Description here" function filter(gn) target = "reading_frame" gfi = gt.feature_node_iterator_new(gn) curnode = gfi:next() count = 0 while not(curnode == nil) do if (curnode:get_type() == target) then if (curnode:get_strand() == '+') then count = count + 1 end end curnode = gfi:next() end if (count >= 2) then return false end return true end genometools-1.5.1/testdata/gtscripts/filter_test_orflength.lua000066400000000000000000000011321211610345200247730ustar00rootroot00000000000000name = "Name here" author = "Sascha Kastens" version = "1.0" email = "sascha.kastens@studium.uni-hamburg.de" short_descr = "Short description here." description = "Description here" function filter(gn) target = "reading_frame" gfi = gt.feature_node_iterator_new(gn) curnode = gfi:next() while not(curnode == nil) do if (curnode:get_type() == target) then rng = curnode:get_range() length = rng:get_end() - rng:get_start() + 1 if not((length % 3) == 0) then return true end end curnode = gfi:next() end return false end genometools-1.5.1/testdata/gtscripts/filter_test_syntax_fail.lua000066400000000000000000000007121211610345200253270ustar00rootroot00000000000000name = "Name here" author = "Sascha Kastens" version = "1.0" email = "sascha.kastens@studium.uni-hamburg.de" short_descr = "Short description here." description = "Description here" function filter(gn) target = "exon" gfi = gt.feature_node_iterator_new(gn) curnode = gfi:next() whie not(curnode == nil) do if (curnode:get_type() == target) then return false end curnode = gfi:next() end ret true end genometools-1.5.1/testdata/gtscripts/filter_test_wrong_function_name.lua000066400000000000000000000007331211610345200270520ustar00rootroot00000000000000name = "Name here" author = "Sascha Kastens" version = "1.0" email = "sascha.kastens@studium.uni-hamburg.de" short_descr = "Short description here." description = "Description here" function wrong_function_name(gn) target = "exon" gfi = gt.feature_node_iterator_new(gn) curnode = gfi:next() while not(curnode == nil) do if (curnode:get_type() == target) then return false end curnode = gfi:next() end return true end genometools-1.5.1/testdata/gtscripts/filter_test_wrong_nodetype.lua000066400000000000000000000007141211610345200260530ustar00rootroot00000000000000name = "Name here" author = "Sascha Kastens" version = "1.0" email = "sascha.kastens@studium.uni-hamburg.de" short_descr = "Short description here." description = "Description here" function filter(gn) target = "xon" gfi = gt.feature_node_iterator_new(gn) curnode = gfi:next() while not(curnode == nil) do if (curnode:get_type() == target) then return false end curnode = gfi:next() end return true end genometools-1.5.1/testdata/gtscripts/genome_node.lua000066400000000000000000000071101211610345200226600ustar00rootroot00000000000000--[[ Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the GenomeNode interface function count_children(parent) count = 0 gfi = gt.feature_node_iterator_new(parent) curnode = gfi:next() while not(curnode == nil) do count = count + 1 curnode = gfi:next() end return count end -- testing gt.feature_node_new range = gt.range_new(1, 100) rval, err = pcall(gt.feature_node_new, nil, nil, range:get_start(), range:get_end(), "+") assert(not rval) rval, err = pcall(gt.feature_node_new, "seqid", nil, range:get_start(), range:get_end(), "+") assert(not rval) rval, err = pcall(gt.feature_node_new, "seqid", "gene", "test", "+") assert(not rval) rval, err = pcall(gt.feature_node_new, "seqid", "gene", range:get_start(), range:get_end(), "plus") assert(not rval) assert(string.find(err, "strand string must have length 1")) rval, err = pcall(gt.feature_node_new, "seqid", "gene", range:get_start(), range:get_end(), "p") assert(not rval) assert(string.find(err, "invalid strand")) gn = gt.feature_node_new("seqid", "gene", range:get_start(), range:get_end(), "+") assert(not gn:is_marked()) gn:mark() assert(gn:is_marked()) parent = gt.feature_node_new("seqid", "gene", range:get_start(), range:get_end(), "+") child = gt.feature_node_new("seqid", "exon", range:get_start(), range:get_end(), "+") parent:add_child(child) assert(not parent:is_marked(parent)) assert(not parent:contains_marked(parent)) child:mark() child = nil; collectgarbage() -- being nasty assert(not parent:is_marked(parent)) assert(parent:contains_marked(parent)) -- testing genome_node:get_filename rval, fn = pcall(gn.get_filename, gn) assert(rval) assert(string.find(fn, "^generated$")) -- testing genome_node:remove_leaf -- testing removal of leaves which are direct children parent = gt.feature_node_new("seqid", "gene", range:get_start(), range:get_end(), "+") child = gt.feature_node_new("seqid", "exon", range:get_start(), range:get_end(), "+") parent:add_child(child) child = gt.feature_node_new("seqid", "exon", range:get_start(), range:get_end(), "+") parent:add_child(child) assert(count_children(parent) == 3) parent:remove_leaf(child) assert(count_children(parent) == 2) parent:add_child(child) assert(count_children(parent) == 3) -- testing removal of leaves which are non-direct children newchild = gt.feature_node_new("seqid", "exon", range:get_start(), range:get_end(), "+") child:add_child(newchild) assert(count_children(parent) == 4) parent:remove_leaf(newchild) assert(count_children(parent) == 3) -- testing gt.region_node_new range = gt.range_new(1, 100) rval, err = pcall(gt.region_node_new, nil, range:get_start(), range:get_end()) assert(not rval) rval, err = pcall(gt.region_node_new, "chr1", "test") assert(not rval) gn = gt.region_node_new("chr1", range:get_start(), range:get_end()) genometools-1.5.1/testdata/gtscripts/genome_stream.lua000066400000000000000000000035041211610345200232310ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the GenomeStream interface function usage() io.stderr:write(string.format("Usage: %s testdata_dir\n", arg[0])) io.stderr:write("Test the GenomeStream bindings.\n") os.exit(1) end if arg[1] then testdata = arg[1] else usage() end -- testing gt.gff3_in_stream_new_sorted rval, err = pcall(gt.gff3_in_stream_new_sorted, "undefined") assert(not rval) assert(string.find(err, "does not exist")) -- test correct file gs = gt.gff3_in_stream_new_sorted(testdata.."/gff3_file_1_short.txt") gn = gs:next_tree() while (gn) do -- do something with the node... gn = gs:next_tree() end -- test corrupt file gs = gt.gff3_in_stream_new_sorted(testdata.."/gt_gff3_fail_1.gff3") rval, err = pcall(gs.next_tree, gs) assert(not rval) assert(string.find(err, "already been defined")) -- test unsorted file gs = gt.gff3_in_stream_new_sorted(testdata.."/unsorted_gff3_file.txt") rval, err = pcall(gs.next_tree, gs) assert(not rval) assert(string.find(err, "is not sorted")) genometools-1.5.1/testdata/gtscripts/genome_visitor.lua000066400000000000000000000024361211610345200234400ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the GFF3 GenomeVisitor (similar to the gff3 -- tool) function usage() io.stderr:write(string.format("Usage: %s GFF3_file\n", arg[0])) io.stderr:write("Parse and output the given GFF3_file.\n") os.exit(1) end if #arg == 1 then gff3file = arg[1] else usage() end gs = gt.gff3_in_stream_new_sorted(gff3file) gv = gt.gff3_visitor_new() gn = gs:next_tree() while (gn) do gn:accept(gv) gn = gs:next_tree() end genometools-1.5.1/testdata/gtscripts/gff3.lua000066400000000000000000000025521211610345200212330ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the GFF3 output stream (similar to the gff3 -- tool) function usage() io.stderr:write(string.format("Usage: %s GFF3_file\n", arg[0])) io.stderr:write("Parse and output the given GFF3_file.\n") os.exit(1) end if #arg == 1 then gff3file = arg[1] else usage() end in_stream = gt.gff3_in_stream_new_sorted(gff3file) out_stream = gt.gff3_out_stream_new(in_stream) in_stream = nil; collectgarbage() -- being nasty gn = out_stream:next_tree() while (gn) do gn = out_stream:next_tree() end genometools-1.5.1/testdata/gtscripts/ii_fail.lua000066400000000000000000000032721211610345200220020ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for AnnotationSketch (similar to the sketch tool) function usage() io.stderr:write(string.format("Usage: %s GFF3_file\n", arg[0])) io.stderr:write("Try to create PNG representation of GFF3 annotation file.\n") os.exit(1) end if #arg == 1 then gff3file = arg[1] else usage() end in_stream = gt.gff3_in_stream_new_sorted(gff3file) feature_index = gt.feature_index_memory_new() feature_stream = gt.feature_stream_new(in_stream, feature_index) in_stream = nil; collectgarbage() -- being nasty gn = feature_stream:next_tree() -- fill feature index while (gn) do gn = feature_stream:next_tree() end seqid = feature_index:get_first_seqid() range = feature_index:get_range_for_seqid(seqid) ii = {} diagram = gt.diagram_new(feature_index, seqid, range) canvas = gt.canvas_cairo_file_new_png(800, 200, ii) diagram:sketch(canvas) genometools-1.5.1/testdata/gtscripts/mathsupport.lua000066400000000000000000000017361211610345200227770ustar00rootroot00000000000000--[[ Copyright (c) 2011 Sascha Steinbiss Copyright (c) 2011 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the mathsupport module -- must be called with seed 12345 assert(gt.rand_max(100000) == 90441) genometools-1.5.1/testdata/gtscripts/memleak.lua000066400000000000000000000022031211610345200220120ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] function usage() io.stderr:write(string.format("Usage: %s GFF3_file\n", arg[0])) os.exit(1) end if #arg == 1 then gff3file = arg[1] else usage() end in_stream = gt.gff3_in_stream_new_sorted(gff3file) gff3_visitor = gt.gff3_visitor_new() gn = in_stream:next_tree() gn:accept(gff3_visitor) genometools-1.5.1/testdata/gtscripts/range.lua000066400000000000000000000023651211610345200215040ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the Range class range = gt.range_new(1, 1000) assert(range:get_start() == 1) assert(range:get_end() == 1000) rval, err = pcall(gt.range_new, 1000, 1) assert(not rval) assert(string.find(err, "must be <= endpos")) ranges = {} for i = 1, 100 do range = gt.range_new(i, i+1) table.insert(ranges, range) end ranges = gt.ranges_sort(ranges) assert(gt.ranges_are_sorted(ranges)) genometools-1.5.1/testdata/gtscripts/recmap.lua000066400000000000000000000037331211610345200216570ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for AnnotationSketch (similar to the sketch tool) function usage() io.stderr:write(string.format("Usage: %s PNG_file GFF3_file\n", arg[0])) io.stderr:write("Create PNG representation of GFF3 annotation file.\n") os.exit(1) end if #arg == 1 then gff3file = arg[1] else usage() end in_stream = gt.gff3_in_stream_new_sorted(gff3file) feature_index = gt.feature_index_memory_new() feature_stream = gt.feature_stream_new(in_stream, feature_index) in_stream = nil; collectgarbage() -- being nasty gn = feature_stream:next_tree() -- fill feature index while (gn) do gn = feature_stream:next_tree() end seqid = feature_index:get_first_seqid() range = feature_index:get_range_for_seqid(seqid) ii = gt.imageinfo_new() diagram = gt.diagram_new(feature_index, seqid, range) layout = gt.layout_new(diagram, 800) height = layout:get_height() canvas = gt.canvas_cairo_file_new_png(800, height, ii) layout:sketch(canvas) if #(ii:get_recmaps()) ~= 16 then os.exit(1) end for _,v in pairs(ii:get_recmaps()) do print(string.format("%.0f,%.0f,%.0f,%.0f, %s",v.nw_x, v.nw_y, v.se_x, v.se_y, v.feature_ref:get_type())) end genometools-1.5.1/testdata/gtscripts/require_gtlua.lua000066400000000000000000000016541211610345200232600ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- test if gtdata/modules has been added correctly to package.path require 'gtlua' genometools-1.5.1/testdata/gtscripts/scorematrix2c.lua000066400000000000000000000034141211610345200231710ustar00rootroot00000000000000--[[ Copyright (c) 2007-2009 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the ScoreMatrix class function usage() io.stderr:write(string.format("Usage: %s score_matrix_file\n", arg[0])) io.stderr:write("Parse protein score_matrix_file and show it as C program.\n") os.exit(1) end if #arg == 1 then score_matrix_file = arg[1] else usage() end protein_alpha = gt.alphabet_new_protein() score_matrix = gt.score_matrix_new_read_protein(score_matrix_file) assert(protein_alpha:size() == score_matrix:get_dimension()) print("#include \n") print("int main(int argc, char *argv[])") print("{") print(" int score_matrix[CHAR_MAX][CHAR_MAX] = {{0}};") for idx1 = 0, score_matrix:get_dimension()-1 do for idx2 = 0, score_matrix:get_dimension()-1 do print(string.format(" score_matrix['%s']['%s'] = %d;", protein_alpha:decode(idx1), protein_alpha:decode(idx2), score_matrix:get_score(idx1, idx2))) end end print(" return 0;") print("}") genometools-1.5.1/testdata/gtscripts/scorematrix2stdout.lua000066400000000000000000000040111211610345200242630ustar00rootroot00000000000000--[[ Copyright (c) 2009 Gordon Gremme Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for the ScoreMatrix class function usage() io.stderr:write(string.format("Usage: %s score_matrix_file\n", arg[0])) io.stderr:write("Parse score_matrix_file and show it on stdout.\n") os.exit(1) end if #arg == 1 then score_matrix_file = arg[1] else usage() end blast_alphabet = gt.alphabet_new_empty() blast_alphabet:add_mapping('A') blast_alphabet:add_mapping('R') blast_alphabet:add_mapping('N') blast_alphabet:add_mapping('D') blast_alphabet:add_mapping('C') blast_alphabet:add_mapping('Q') blast_alphabet:add_mapping('E') blast_alphabet:add_mapping('G') blast_alphabet:add_mapping('H') blast_alphabet:add_mapping('I') blast_alphabet:add_mapping('L') blast_alphabet:add_mapping('K') blast_alphabet:add_mapping('M') blast_alphabet:add_mapping('F') blast_alphabet:add_mapping('P') blast_alphabet:add_mapping('S') blast_alphabet:add_mapping('T') blast_alphabet:add_mapping('W') blast_alphabet:add_mapping('Y') blast_alphabet:add_mapping('V') blast_alphabet:add_mapping('B') blast_alphabet:add_mapping('Z') blast_alphabet:add_mapping('X') blast_alphabet:add_wildcard('*') blast_matrix = gt.score_matrix_new_read(score_matrix_file, blast_alphabet) assert(blast_alphabet:size() == blast_matrix:get_dimension()) blast_matrix:show() genometools-1.5.1/testdata/gtscripts/show_seqids.lua000066400000000000000000000027201211610345200227330ustar00rootroot00000000000000--[[ Copyright (c) 2007 Gordon Gremme Copyright (c) 2007 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing some Lua bindings for FeatureIndex function usage() io.stderr:write(string.format("Usage: %s GFF3_file\n", arg[0])) io.stderr:write("Show sequence ids contained in GFF3 annotation file.\n") os.exit(1) end if #arg == 1 then gff3file = arg[1] else usage() end in_stream = gt.gff3_in_stream_new_sorted(gff3file) feature_index = gt.feature_index_memory_new() feature_stream = gt.feature_stream_new(in_stream, feature_index) gn = feature_stream:next_tree() -- fill feature index while (gn) do gn = feature_stream:next_tree() end seqids = feature_index:get_seqids() for _, v in ipairs(seqids) do print(v) end genometools-1.5.1/testdata/gtscripts/sketch.lua000066400000000000000000000040761211610345200216720ustar00rootroot00000000000000--[[ Copyright (c) 2007-2008 Gordon Gremme Copyright (c) 2007-2008 Center for Bioinformatics, University of Hamburg Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ]] -- testing the Lua bindings for AnnotationSketch (similar to the sketch tool) function usage() io.stderr:write(string.format("Usage: %s PNG_file GFF3_file\n", arg[0])) io.stderr:write("Create PNG representation of GFF3 annotation file.\n") os.exit(1) end if #arg == 2 then pngfile = arg[1] gff3file = arg[2] else usage() end in_stream = gt.gff3_in_stream_new_sorted(gff3file) feature_index = gt.feature_index_memory_new() feature_stream = gt.feature_stream_new(in_stream, feature_index) in_stream = nil; collectgarbage() -- being nasty gn = feature_stream:next_tree() -- fill feature index while (gn) do gn = feature_stream:next_tree() end seqid = feature_index:get_first_seqid() range = feature_index:get_range_for_seqid(seqid) ii = gt.imageinfo_new() diagram = gt.diagram_new(feature_index, seqid, range) layout = gt.layout_new(diagram, 800) height = layout:get_height() canvas = gt.canvas_cairo_file_new_png(800, height, ii) -- nil as ImageInfo parameter must be ok canvas2 = gt.canvas_cairo_file_new_png(800, height, nil) -- test sketching with image info layout:sketch(canvas) canvas:to_file(pngfile) if #(ii:get_recmaps()) ~= 16 then os.exit(1) end -- and without layout:sketch(canvas2) canvas2:to_file(pngfile) genometools-1.5.1/testdata/header.gff3000066400000000000000000000000221211610345200176460ustar00rootroot00000000000000##gff-version 3 genometools-1.5.1/testdata/header_3_1_21.gff3000066400000000000000000000000271211610345200206170ustar00rootroot00000000000000##gff-version 3.1.21 genometools-1.5.1/testdata/hop/000077500000000000000000000000001211610345200164435ustar00rootroot00000000000000genometools-1.5.1/testdata/hop/10reads.fastq000066400000000000000000000036141211610345200207460ustar00rootroot00000000000000@126 TCCACCGCCGTATTGCGGCAAGCCGCATTCCGGCTGATCACATGGTGCTGATGGCAGGTTTTCACCGCCGG + 000KNGI8CKN/'5+.B(7L3<('BHI=2,D&*GCIFF()DJ9A.N.-LH223/A491C+K@AI)09ICDN @127 ATTACCGGCGGTGAAAACCTGCCATCAGCACCATGTGATCAGCCGGAATGCGGCTTGCCGCAATACGGCGGGTGGACTCAG + 00@<-(GC=629<6HCD*;L*9>/I5'E94)@14CE=C)@)/.J*7J9F/@J9,*L:C++/52758*AN-.K*'L6*+4E9K4+B3G>2DL<:IJ8/=A97I><,&)G03L3,A:N>MBI8.K6@G&@:3J @131 GATCACATGGTGCTGATGGCAGGTTTCACCGCCGGTAATGAAAAAAAGGCGAACTGGTGGTGCTTGGACGCA + 00H-<.K+1+3,F)D'N;M@:47GH)E80M @133 TATTGCGGCAAGCCGCATTCCGGCTGATCACATGGTGCTGATGGCAGGTTTTTCACCGCCGGTAATGAAAAAAAAGGCGAACTGGTGGTGCTTGGACGCAACGGTTC + 00000I708'.@;.'=*J<*-BJCI2+-:0*5-3I&>&*4BEH4J+=79L4KN69+F9G.(3>:)=61+5LM3( @137 GGCAGCCAGCACCGCAGCAGAGTAGTCGGAACCGTTGCGTCCAAGCACCACCAGTTCGCCTTCATTACCGGCGGTGAAACCTGCCATCA + I?7H+0F&510-4(<8C>);:E'C,4AHKAD*AD>GN3,*;A(9<=8:IM):ADKE@/'HE28+/?LG(D0*6?62(I>FE1H026N(8EE0=GH9?>FMA6LEJE,E:5<875=;4MG1>1=LFC?FF.EN/B'EBJ&+)3EE3*6BC7?M9::26;-HN?F5/D+I9;22D3NEJ'6'>,N,Dsomegenome AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC TTCTGAACTGGTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAA TATAGGCATAGCGCACAGACAGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACC ATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGACGCGTACAGGAAACACAGAAAAAAG CCCGCACCTGACAGTGCGGGCTTTTTTTTTCGACCAAAGGTAACGAGGTAACAACCATGCGAGTGTTGAA GTTCGGCGGTACATCAGTGGCAAATGCAGAACGTTTTCTGCGTGTTGCCGATATTCTGGAAAGCAATGCC AGGCAGGGGCAGGTGGCCACCGTCCTCTCTGCCCCCGCCAAAATCACCAACCACCTGGTGGCGATGATTG AAAAAACCATTAGCGGCCAGGATGCTTTACCCAATATCAGCGATGCCGAACGTATTTTTGCCGAACTTTT GACGGGACTCGCCGCCGCCCAGCCGGGGTTCCCGCTGGCGCAATTGAAAACTTTCGTCGATCAGGAATTT GCCCAAATAAAACATGTCCTGCATGGCATTAGTTTGTTGGGGCAGTGCCCGGATAGCATCAACGCTGCGC TGATTTGCCGTGGCGAGAAAATGTCGATCGCCATTATGGCCGGCGTATTAGAAGCGCGCGGTCACAACGT TACTGTTATCGATCCGGTCGAAAAACTGCTGGCAGTGGGGCATTACCTCGAATCTACCGTCGATATTGCT GAGTCCACCCGCCGTATTGCGGCAAGCCGCATTCCGGCTGATCACATGGTGCTGATGGCAGGTTTCACCG CCGGTAATGAAAAAGGCGAACTGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGC TGCCTGTTTACGCGCCGATTGTTGCGAGATTTGGACGGACGTTGACGGGGTCTATACCTGCGACCCGCGT CAGGTGCCCGATGCGAGGTTGTTGAAGTCGATGTCCTACCAGGAAGCGATGGAGCTTTCCTACTTCGGCG CTAAAGTTCTTCACCCCCGCACCATTACCCCCATCGCCCAGTTCCAGATCCCTTGCCTGATTAAAAATAC CGGAAATCCTCAAGCACCAGGTACGCTCATTGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGC ATTTCCAATCTGAATAACATGGCAATGTTCAGCGTTTCTGGTCCGGGGATGAAAGGGATGGTCGGCATGG CGGCGCGCGTCTTTGCAGCGATGTCACGCGCCCGTATTTCCGTGGTGCTGATTACGCAATCATCTTCCGA ATACAGCATCAGTTTCTGCGTTCCACAAAGCGACTGTGTGCGAGCTGAACGGGCAATGCAGGAAGAGTTC TACCTGGAACTGAAAGAAGGCTTACTGGAGCCGCTGGCAGTGACGGAACGGCTGGCCATTATCTCGGTGG TAGGTGATGGTATGCGCACCTTGCGTGGGATCTCGGCGAAATTCTTTGCCGCACTGGCCCGCGCCAATAT CAACATTGTCGCCATTGCTCAGGGATCTTCTGAACGCTCAATCTCTGTCGTGGTAAATAACGATGATGCG ACCACTGGCGTGCGCGTTACTCATCAGATGCTGTTCAATACCGATCAGGTTATCGAAGTGTTTGTGATTG GCGTCGGTGGCGTTGGCGGTGCGCTGCTGGAGCAACTGAAGCGTCAGCAAAGCTGGCTGAAGAATAAACA TATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTG GAAAACTGGCAGGAAGAACTGGCGCAAGCCAAAGAGCCGTTTAATCTCGGGCGCTTAATTCGCCTCGTGA AAGAATATCATCTGCTGAACCCGGTCATTGTTGACTGCACTTCCAGCCAGGCAGTGGCGGATCAATATGC CGACTTCCTGCGCGAAGGTTTCCACGTTGTCACGCCGAACAAAAAGGCCAACACCTCGTCGATGGATTAC TACCATCAGTTGCGTTATGCGGCGGAAAAATCGCGGCGTAAATTCCTCTATGACACCAACGTTGGGGCTG GATTACCGGTTATTGAGAACCTGCAAAATCTGCTCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCAT TCTTTCTGGTTCGCTTTCTTATATCTTCGGCAAGTTAGACGAAGGCATGAGTTTCTCCGAGGCGACCACG CTGGCGCGGGAAATGGGTTATACCGAACCGGACCCGCGAGATGATCTTTCTGGTATGGATGTGGCGCGTA AACTATTGATTCTCGCTCGTGAAACGGGACGTGAACTGGAGCTGGCGGATATTGAAATTGAACCTGTGCT GCCCGCAGAGTTTAACGCCGAGGGGGGTGATGTTGCCGCTTTTATGGCGAATCTGTCACAACTCGACGAT CTCTTTGCCGCGCGCGTGGCGAAGGCCCGTGATGAAGGAAAAGTTTTGCGCTATGTTGGCAATATTGATG AAGGCGTCTGCCGCGTGAAGATTGCCGAAGTGGATGGTAATGATCCGCTGTTCAAAGTGAAAAATGGCGA AAACGCCCTGGCCTTCTATAGCCACTATTATCAGCCGCTGCCGTTGGTACTGCGCGGATATGGTGCGGGC AATGACGTTACAGCTGCCGGTGTCTTTGCTGATCTGCTACGTACCCTCTCATGGAAGTTAGGAGTCTGAC ATGGTTAAAGTTTATGCCCCGGCTTCCAGTGCCAATATGAGCGTCGGGTTTGATGTGCTCGGGGCGGCGG TGACACCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAA CAACCTCGGACGCTTTGCCGATAAGCTGCCGTCAGAACCACGGGAAAATATCGTTTATCAGTGCTGGGAG CGTTTTTGCCAGGAACTGGGTAAGCAAATTCCAGTGGCGATGACCCTGGAAAAGAATATGCCGATCGGTT CGGGCTTAGGCTCCAGTGCCTGTTCGGTGGTCGCGGCGCTGATGGCGATGAATGAACACTGCGGCAAGCC GCTTAATGACACTCGTTTGCTGGCTTTGATGGGCGAGCTGGAAGGCCGTATCTCCGGCAGCATTCATTAC GACAACGTGGCACCGTGTTTTCTCGGTGGTATGCAGTTGATGATCGAAGAAAACGACATCATCAGCCAGC AAGTGCCAGGGTTTGATGAGTGGCTGTGGGTGCTGGCGTATCCGGGGATTAAAGTCTCGACGGCAGAAGC CAGGGCTATTTTACCGGCGCAGTATCGCCGCCAGGATTGCATTGCGCACGGGCGACATCTGGCAGGCTTC ATTCACGCCTGCTATTCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAGATGTTATCGCTGAACCCT ACCGTGAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCGGTCGCGGAAATCGGCGCGGTAGCGAG CGGTATCTCCGGCTCCGGCCCGACCTTGTTCGCTCTGTGTGACAAGCCGGAAACCGCCCAGCGCGTTGCC GACTGGTTGGGTAAGAACTACCTGCAAAATCAGGAAGGTTTTGTTCATATTTGCCGGCTGGATACGGCGG GCGCACGAGTACTGGAAAACTAAATGAAACTCTACAATCTGAAAGATCACAACGAGCAGGTCAGCTTTGC GCAAGCCGTAACCCAGGGGTTGGGCAAAAATCAGGGGCTGTTTTTTCCGCACGACCTGCCGGAATTCAGC CTGACTGAAATTGATGAGATGCTGAAGCTGGATTTTGTCACCCGCAGTGCGAAGATCCTCTCGGCGTTTA TTGGTGATGAAATCCCACAGGAAATCCTGGAAGAGCGCGTGCGCGCGGCGTTTGCCTTCCCGGCTCCGGT CGCCAATGTTGAAAGCGATGTCGGTTGTCTGGAATTGTTCCACGGGCCAACGCTGGCATTTAAAGATTTC GGCGGTCGCTTTATGGCACAAATGCTGACCCATATTGCGGGTGATAAGCCAGTGACCATTCTGACCGCGA CCTCCGGTGATACCGGAGCGGCAGTGGCTCATGCTTTCTACGGTTTACCGAATGTGAAAGTGGTTATCCT CTATCCACGAGGCAAAATCAGTCCACTGCAAGAAAAACTGTTCTGTACATTGGGCGGCAATATCGAAACT GTTGCCATCGACGGCGATTTCGATGCCTGTCAGGCGCTGGTGAAGCAGGCGTTTGATGATGAAGAACTGA AAGTGGCGCTAGGGTTAAACTCGGCTAACTCGATTAACATCAGCCGTTTGCTGGCGCAGATTTGCTACTA CTTTGAAGCTGTTGCGCAGCTGCCGCAGGAGACGCGCAACCAGCTGGTTGTCTCGGTGCCAAGCGGAAAC TTCGGCGATTTGACGGCGGGTCTGCTGGCGAAGTCACTCGGTCTGCCGGTGAAACGTTTTATTGCTGCGA CCAACGTGAACGATACCGTGCCACGTTTCCTGCACGACGGTCAGTGGTCACCCAAAGCGACTCAGGCGAC GTTATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCGCGTGTGGAAGAGTTGTTCCGCCGCAAA ATCTGGCAACTGAAAGAGCTGGGTTATGCAGCCGTGGATGATGAAACCACGCAACAGACAATGCGTGAGT TAAAAGAACTGGGCTACACTTCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAA TCCAGGCGAATATGGCTTGTTCCTCGGCACCGCGCATCCGGCGAAATTTAAAGAGAGCGTGGAAGCGATT CTCGGTGAAACGTTGGATCTGCCAAAAGAGCTGGCAGAACGTGCTGATTTACCCTTGCTTTCACATAATC TGCCCGCCGATTTTGCTGCGTTGCGTAAATTGATGATGAATCATCAGTAAAATCTATTCATTATCTCAAT CAGGCCGGGTTTGCTTTTATGCAGCCCGGCTTTTTTATGAAGAAATTATGGAGAAAAATGACAGGGAAAA AGGAGAAATTCTCAATAAATGCGGTAACTTAGAGATTAGGATTGCGGAGAATAACAACCGCCGTTCTCAT CGAGTAATCTCCGGATATCGACCCATAACGGGCAATGATAAAAGGAGTAACCTGTGAAAAAGATGCAATC TATCGTACTCGCACTTTCCCTGGTTCTGGTCGCTCCCATGGCAGCACAGGCTGCGGAAATTACGTTAGTC CCGTCAGTAAAATTACAGATAGGCGATCGTGATAATCGTGGCTATTACTGGGATGGAGGTCACTGGCGCG ACCACGGCTGGTGGAAACAACATTATGAATGGCGAGGCAATCGCTGGCACCTACACGGACCGCCGCCACC GCCGCGCCACCATAAGAAAGCTCCTCATGATCATCACGGCGGTCATGGTCCAGGCAAACATCACCGCTAA genometools-1.5.1/testdata/hop/hop_10reads.fastq000066400000000000000000000036041211610345200216130ustar00rootroot00000000000000@126 tccacccgccgtattgcggcaagccgcattccggctgatcacatggtgctgatggcaggtttcaccgccgg + 000KJNGI8CKN/'5+.B(7L3<('BHI=2,D&*GCIFF()DJ9A.N.-LH223/A491C+KAI)09ICDN @127 attaccggcggtgaaacctgccatcagcaccatgtgatcagccggaatgcggcttgccgcaatacggcgggtggactcag + 00@<-(GC=629/I5'E94)@14CE=C)@)/.J*7J9F/@J9,*L:C++/52758*AN-.K*'L6*+4E9K4+B3G>2DL<:IJ8/=A97I><,&)G03L3,A:N>MBI8.K6@G&@:3J @131 gatcacatggtgctgatggcaggtttcaccgccggtaatgaaaaaggcgaactggtggtgcttggacgca + 00H-&*4BEH4J+=79L469+F9G.(3>:)+5LM3( @137 ggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgcctttttcattaccggcggtgaaacctgccatca + I?7H+0F&510-4(<8C>);:E'C,4AHKAD*AD>GN3,*;A(9<=8:IM):ADKE@/'HE2;;;8+/?LG(D0*6?62(I>FE1H026N(8EE0=GH9?<>FMA6LEJE,E:5<875=;4MG1>1=LFC?FF.EN/B'EBJ&+)3EE3*6BC7?M9::26;-5/D+I9;22D3NEJ'6'>,N,D/I5'E94)@14CE=C)@)/.J*7J9F/@J9,*L:C++/52758*AN-.K*'L6*+4E9K4+B3G>2DL<:IJ8/=A97I><,&)G03L3,A:N>MBI8.K6@G&@:3J @131 gatcacatggtgctgatggcaggtttcaccgccggtaatgaaaaaggcgaactggtggtgcttggacgca + 00H-&*4BEH4J+=79L469+F9G.(3>:)+5LM3( @137 ggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgcctttttcattaccggcggtgaaacctgccatca + I?7H+0F&510-4(<8C>);:E'C,4AHKAD*AD>GN3,*;A(9<=8:IM):ADKE@/'HE2;;;8+/?LG(D0*6?62(I>FE1H026N(8EE0=GH9?<>FMA6LEJE,E:5<875=;4MG1>1=LFC?FF.EN/B'EBJ&+)3EE3*6BC7?M9::26;-5/D+I9;22D3NEJ'6'>,N,D,BKN:6784B>;IAB':=;@-/6N:B,=J0+FG30)C6'CL.<+K<: @142 gtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagca + 00L=)H.405GF+=C-:A2<)>/>E>D4BE&+B:AK27>09 @143 acgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccg + 0009F7HI90:/4GN2B&M59,*AM(0&60N&3F?3L=7EF7NMJ?N8N-.?2*0,<)0D2<&)8BJ*?LCL @144 cgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccacca + 000&C*&5GMB4=5F'LHH@)9=3J9G+3L(+FEJEC)>2:D(I/N', @145 cgaactggtggtgcttggacgcaacggttccgactactctgctgcggtgctggctgcctgtttacgcgccgattgttgcgagatttggacggacgttgacggggggt + 0000IDD:);6.2JB:/3LKL3E7-2)'+3&.5J2(:6*;J4(D@C*>;NA;?;(AA7@*>K2J:1IHG&;F(7,.:'F;MK&2E.B=3-*(G-C9B:818I2J=@- @146 tagaccccgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgcctttttt + 00000-E6)/08HCK.;>I;?)*AN.5KCL/IHJB-3(83M;E4,I6ML65'JH/K5.7>8;B0'D @149 cgcaggtatagaccccgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagca + 0000+899@+,1HCGG2-M19*FE85BI:)5=953E4>)02&*'B@B'JB>BL/2+;,+'.5C,8;AHA+)2L?9*C4(;ABAA1@-6(/)61F2)2)DDD:5F,NGHB @151 aacggttccgactactctgctgcggtgctggctgcctgtttacgcgccgattgttgcgagatttggacggacgttgacggggtctatacctgcgacccgcgtcaggtgccg + 000).K7JA0F29G5(;H:,?3N:A9NI&F8)>15L1<@5A7?JJ5.HBA1NB58='3BA(@:HDE&+0>)A*.<,'(77H&GG0/2L8(8<8'NN6F.:2+40*?/-3FN @152 gcggtgctggctgcctgtttacgcgccgattgttgcgagatttggacggacgttgacggggtctatacctgcgacccgcgtcaggtgcccga + 00/C+K;>474J:N,K0ECELMC++HE-*N7M+.DHH-=8AABJK8-C&-+-8)B5@.34DN/:1@8J;,)-.225E:BMN @160 catcgcttcctggtaggacatcgacttcaacaacctcgcatcgggcacctgacgcgggtcgcaggtatagaccccgtcaacgtccgtccaaatctc + 00000(75E,/5><-379KCL7D@3?JJB&)+G1K.HLK48?F1AG/5D:);'E:M6AEBIH>E70?:IN'D@-,GJ/N00FEC;/()=>@AI=D* @162 tggacggacgttgacggggtctatacctgcgacccgcgtcaggtgcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctt + 00000/60K<.C;/E?7N:NG?&FDHD/J6?J25.*0:<4*/@N./JM'=:N:I-)19I,):'79N/>F?GA.898KJ>H:/6'?BIM31,M9HC@BHCC?C.NNG9', @166 ttgacggggtctatacctgcgacccgcgtcaggtgcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctttcctacttcgg + 0H(1;<1>(.83L>99474AE<2MC4./'J6;JL<7J.D?/=,//)I<,.;I(41'@AC&,<27H2:87G<&5NM)43&K372?MM97 @168 gcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctttcctacttcggcgctaaagttct + 0;&6GM3<,86-2CL-2GH&(,KL>-9MFIG887I;F5@LL/FKH+&:17CB+9NF9,8/L9@<**EC,6M355/5KH+E4;KGH-I?@6(70AE;F.,D4F@GJ>-+4BEL&=J**1-:+@.3C&>DE;C&I/>85J)A';,L5:?A/I3<8F*.DJNC9C:-E @172 tctggaactgggcgatgggggtaatggtgcgggggtgaagaactttagcgccgaagtaggaaagctccatcgcttcctggtaggacatcgacttcaacaacctcgca + 0001??5DC7).//M7M5/;;12?N>7K))-5?0M(73HMFF:FI(/*=K:,='G+A7B6'4DILK0-DK@+>HI>A>N/0>GIEJD(3=6761:'>2B/@8/E @177 agcgtacctggtgcttgaggatttccggtatttttaatcaggcaagggatctggaactgggcgatgg + 000=7722(3?,M'..)E':EGCE(N'@K4/&>6&'C)1-/A;&:;-6&CM*74F)GGI/&5<3CE0+>4-5H,D7JF.-F(07>3?D:8=HL? @185 caccaggtacgctcattggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctga + 0005,B6(1MJ*9;+LB<=FIEKFG1E+@5BE-947?C2A8'H6<7G&8N2+14-0&A;7=?E*>FF'M @188 ctcattggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctgaataacatggcaat + JIF22>.NJ0/45N.BB1*A&.M+,)E)2;:<.HA:1>1A52JMM80;I*E8@&AB1I:CJ @189 gaacattgccatgttattcagattggaaatgcccttgaccggtaattcgtcttcatcacggctggcaccaatgagcgtacct + B1>7904BE&HG/K/3K9(9B.=J=G/G;<47-5*-9CFIA?((F5IJ:0CKLF8D?3FC759A(6=2618(7;EG2,/.LN=C)A97(2*K)E((*,G5D?*C-N4??DME&I6KL9M/1@6J?MF9F&D6/0(5FJ4K,;F0=M4A;=?1AN*:+N3+*J=?B1;)6&4:K9(,11IN7G-N1H35>GBBF0*3*'7'D> @192 ccttcatccccggaccagaaacgctgaacattgccatgttattcagattggaaatgcccttgaccggtaattcgtcttcatcacggctggca + 0E=;)>.K6)E;DEJI'(JF2@C1.=A+112CJCL&G?48>08LA(:0EK)JN0:A);@J;5(M&5GF37HDDHMF @195 tggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctgaataacatggcaatgttcagcgtttctggtccggggatgaaagggatggtcggcatggc + 00000)72BLGB>;:(/)&>@(39-N5F5>DL@H<>4C6J3N5KM76GN41/4D7)NM@N+,E)8,H7*I?* @201 atgttcagcgtttctggtccggggatgaaagggatggtcggcatggcggcgcgcgtctttgcagc + 0000:*NEE?65I4H;1+A/2;1*-H:=55FK.=,2&@1NH0N@>IC/6 @205 ggatggtcggcatggcggcgcgcgtctttgcagcgatgtcacgcgcccgtatttccgtggtgctgattacgc + ?-E>9B;BJ7/51BA?:N70>+(:-?42:;N;7:-;@8IA.90.* @207 agatgattgcgtaatcagcaccacggaaatacgggcgcgtgacatcgctgcaaagacgcgcgccgccatgccgaccatccctttcatcccccc + 00=2G+8I>9(MFL8+20KIH6,7<*=69JH76+0MMB8;1+JDI''2:JB9=:F65<370I24K0A+LI @210 gtcggcatggcggcgcgcgtctttgcagcgatgtcacgcgcccgtatttccgtggtgctgattacgcaatcatcttccgaatacagcatcagt + 00K9EH2066:6B;;84DN9K=B9'9K2L?LH-'&FE.,&GMH0'';.(ML21:B<)2,F7F:@3;35->+NHMIC=7HK*I*1,55A3:1CN6,F?;'*=?(-))=-=A179M9C)M@@8B/=GD*J*5H&>9=L>;/0HB1)3GJ=)C:M&5DFAF;;8I2.0/-48*1:+@FK @214 gcgcccgtatttccgtggtgctgattacgcaatcatcttccgaatacagcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaa + 00*6C)6CJ1KCB@537DNHD=:'7I=7-62>0KB@9'HH/,;KNC;LA6@,,DI+9&+1L.934D?&B:*IMMB:73KKE=9L>3275,1-B;)MA8* @216 gtgctgattacgcaatcatcttccgaatacagcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaatgcaggaagagttctacct + 00000@K9(,DHFC0'+8(NC4F50H000D165&F/2M3GE?*A38?<>/:=A89(G0+-9L,'.'AHHAE((IE'9/?,')9E.253@3:EGG3J'--J, @218 agcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaatgcaggaagagttctacctggaa + 9(D-C320J22CKGGM;:48BA@A6?A4BKD-;5(3,J1CI87KA66>/?)&NG44;3A-1@2)*D:(9*2-09F @219 ctccagtaagccttctttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcgctttgtggaacgcagaaactgatgctgtattcggaagatgattg + 00>2B93(B?'7A,?A?@AMBJ;'&&.('?C,2;)2G4&CH82+166BLG>08JJHK30E*?69@-L51>K4,=-6'N(D7.-KI4E;,)+C?.()835);A6G77J7@849 @221 gccgttccgtcactgccagcggctccagtaagccttctttcagttccaggtagaactcttcctgca + 00+(45D(>E;K+F=DH('H/D/';L&AF9F?*:J9AAJ35>G161--4'KIDE5,1C@??2(BD< @223 tggccagccgttccgtcactgccagcggctccagtaagccttctttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcgctttgtggaacgca + 00.IN9DJ'D;214><*69F3808DB(>GB+NEC4G7N19@=;E>A?3J0,@>NA55I+52>129J,GK)J4+G39'36NJJF9?8C?9:4'M0=6+E?5359,=G;K6,)F @224 ataatggccagccgttccgtcactgccagcggctccagtaagccttctttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcg + 0000FB5(>B0..-,6I,NA-J,>@I868,19H+/@F/N&.KCK>7C:B.(A:>2))< @225 gcaggaagagttctacctggaactgaaagaaggcttactggagccgctggcagtgacggaacggctggccattatctcggt + E<,4@0B551<40I&:B>@54=;>+/,GAKAI9I&4139F&=:5)<3EEE3N))N2L6BHD':'*N2;AM<,17@5D)(@2 @227 aggtgcgcataccatcacctaccaccgagataatggccagccgttccgtcactgccagcggctccagta + 2-@L-;1J.12J(<=G/5+FB5>*J6E;*=M&6M=-)17NDMK/*-, @232 tgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaagaatttcgccgagatcccacgcaaggtgcgcataccatcacct + 09CG+5)&7D80)D.M,07F=:==)A1'-*B(NC&B29NFB,?'HB4D,D1N20/9C@,>D:,'*2'A(01I>,?9@ @237 aattctttgccgcactggcccgcgccaatatcaacattgtcgccattgctcagggatcttctgaacgctcaatctctgtc + 0157B=7C<<=MI/,(IB(F&<,N,56BLAM-JD-4I*M)C@E85LFAI+6AM9AAA&31*0N;I-MA'*KB6ELF@I,J @238 cacgacagagattgagcgttcagaagatccctgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaagaatttcgccgaga + 00(0A1L=+=A*+D8L16L&MMGH8K6/12?HH9@,3JH=*BA*8>>.5/,:7B<*G:+E+N?FIA9JD<6?5@?03,*<(*69889;2DEC @239 ttaccacgacagagattgagcgttcagaagatccctgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaag + 0000HD2NG95*B=N-='>60/M(BG=N4D9'4K7D2((E;@/?=0/=2)8J2ACK3B4C:;NN,/AK(3?H05M73&:&9;= @240 caatatcaacattgtcgccattgctcagggatcttctgaacgctcaatctctgtcgtggtaaataac + 00000=6G+NN&HM'>NC2C3D/+1F(FN=7D<345)@<**?;39?K7*'13EG@/7=J0N*H7I=. @242 cagggatcttctgaacgctcaatctctgtcgtggtaaataacgatgatgcgaccactggcgtgcg + 000007:?G*5843,G99L:3&*( @245 gatgagtaacgcgcacgccagtggtcgcatcatcgttatttaccacgacagagattgagcgttcagaagatccct + 000034E0J1)H=4FLJ6,9=6?>:M65EL+-ND-FGJ5515I-9+5AI)D69N:IF<;=5J:8N9:2I5D5J<+ @246 agcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttaccacgacagagattgagcg + 00BK,K4E-L>(L9''64A6@HH>>/)G&J20.JLI5&'J@8;2A&I, @249 atcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttaccacgacagagattgagcgttcagaagatc + 09.'A&1&JAG@/A7I0J'01EB)F-I9I<7(M33,D>G-15'F&&'<>L-(5G?320(.+BC.8'+7L31GGI6G.247I933L9)>>'A. @251 cctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttaccacg + 000,J=KE?;C-CD6AH@23+J@&8?3E1@8=JI./<=,>95.-8?0K/*>CF?L@)@*0E&GAAH&I.5> @252 taacgatgatgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttat + 8@NMID/I)'8JKA26KH@K@2A7&?HH028&=:/6?H897F?2E=;D2+F6AAGM@*G13LKE<( @253 tcagggatcttctgaacgctcaatctctgtcgtggtaaataacgatgatgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttatcg + 000;N3C2/@<'71NE1J<5B<-LID0H*,+N)G)E,4)=3-:?L;-2/(M56:LI1*:N.(AE9H96LJ6A=D1(:&N;0-:A>A0.JE1MM5LL@GG @255 cacttcgataacctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttaccacgacagagattgag + 0000H<+'A4A.DG-<;.A.-HJ/7;5H=?KC8I0,5MH;2.F?=:0C,K4&9,4/)@JFHE8,H.&)G,I6:CN25BKDFM1+7/658=-M>H @256 acgatgatgcgaccactggcgtgcgcgttactctcagatgctgttcaataccgatcaggttatcgaagtgtt + F+B11,?-9I:)@60;,KMKG&F'3@?.=9N)H/,BE-3/JF4?&?9B/8*:36.4746=<9D>?DH.D22J92N;>(J+7H6<9* @258 atgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttatcgaagtgtttgtgattggcgtcggtggcgttggcgg + H-=2FK3C7*H7.9@&H:F4LD=(;+&.&I<3E87J,M+K+;1C2D-(=IIA47I-E46N;G7:E528K,0L1*-I?3/NG77H);&?*@+N=? @259 ctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgt + =.I;NB,<<.JI/FK.,'J7ACL+NK=NH.2FM)5;9;7NBNL:,KB/)3MB6-0L:-5E-F>DJNEJ@,@63&04H?78E;B?G2DEGJMNJN.'8:8;3;F2C+'I17:0C @260 atgctgttcaataccgatcaggttatcgaagtgtttgtgattggcgtcggtggcgttggcggtgcgctgctggagcaactgaagcgtcagcaa + 000'9K5(G4<*/4A0BI3@19/KFD@.J>MMA96/-G6,2*/LCB-941HFK56=5L,29)8AI942(,/L5@+5KJI?/@;53(93B9B1:?J2=FN;B&@>.032/:M+1B52L=,/*DB=2'G7I<.J2;8H:*I>;GNNC@9G-='LKD;F'6E @263 ttcagccagctttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcggtattga + 0000;;0KD2-D-1L0)/M1@A3>,9@DE-4)DB-@*C>6=,?GK)J8J4.)2C47&9M1.N0='1D(>FBM65ID,1=);FB7D.7GDI1>+I1/L @264 tcttcagccagctttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcg + 000,?86K-E'/*60I@=2HGKM:)JDK'>C07HF.?;?)K+:A;))F3=NL)*D.LM1AB,N70-+78E2J&M(.*&D@'A-G)3.AF>1J @265 gtgattggcgtcggtggcgttggcggtgcgctgctggagcaactgaagcgtcagcaaagctggctgaaga + 000('9@7C:L8M/L7H//A-M:(-@FH.G255MD0M+;:1(DLJCH<.C,9+1N<-F=9*NG5:A)I31 @268 ccgcagacacgtaagtcgatatgtttattcttcagccagctttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgcca + 6CEBI5GFJ'61D(8:C7C7F6K>M,6+&9N*36J,*?0;E/G6?3 @271 agcaactgaagcgtcagcaaagctggctgaagaataaacatatcgacttacgtgtctgcggtgttgccaactcgaaggctct + 7;<,(;)=H?(?G4854*5;/N*4KA?'AJ;6BL'@:F*M)8@JH,HH10EJ('&C';.*0E:'()@'(DFHDM)G)F5-8@ @272 aacagagccttcgagttggcaacaccgcagacacgtaagtcgatatgtttattcttcagccagctttgctgacgcttcagttgctccagca + 00C5,7FH=828;ILNJ(6A44DC&9L3<7&N>B)6'2,J2/KFI0N.=D7FA7IAH6'6H/N&(()FF&F-'E5&L7L6E,,*JI/+9&@83C/KJIC*IK)5*2H662+N @276 cgctgctggagcaactgaagcgtcagcaaagctggctgaagaataaacatatcgacttacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaa + 000),<+H(F48.:M?0656FJNH,.2@@A(2ED'IB8.92,:9KH7>5E7'5J?M&)))?:31.M--5;=B+J=F00&7@.9)6I3@<)@>?3G:2AD.63=/F+:87<.7.=F @278 tacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggc + D4.BA)670:MAL;'J'(;0FA)4I80'0M2+IK0?1IJ)47>*1/=CC54=/>3BNC8=0>B;.7;7?>C'I4(6)L4E-2HB(5'N::3KFN,?9/D)DC4=4J,*,>DFL2'+G@@;/K,4*H1(A16?.?0DBDE @282 gtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactg + <+?)=L7@N2FGJE>>+ED1J9B5;KFEIE&//)4*3C.A8H?3C0C:GC)33<*8NKL(@@@46AEJK)J @283 cgccagttcttcctgccagttttccagattaaggccatgtacattggtgagcagagccttcgagttggcaacaccgcagacacgtaagtcgatatgttattc + ;6LC2@7?.DL*;+254=H4I12B.'3(6>5=3A=39N7D/6)5IG5G(F(C2A9@;DC'=:(3,8>LA33J5<95,,H@:.A=A''-I9;C0=;A*+)72. @284 aacatatcgacttacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcg + (4-*2>G*04M8:)C@+E10IEE,0/C6EL08=9,.)NC5,I:)+7'&82'JML;/.4GHCC?G,11I3IDGI/(==1KLM'?1C:5=6DG8=-BHN= @285 gtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcg + 00?>EBFI>5M/C&,@N5*8@J4FKLA404/4;N&'2B3,G>CM8)4*:.F7;@EHL*F/>;A@).AEB:/23)J60L)M7BI @286 tacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcgc + HJ=;;.*.?21LN)496-(((I5/N(BI50>F.A=5L/6.8779K''4*9:L6>:/5H'.6L1@1G+7BD7L:K.N6*04&>F7>E'B)D02=(I7E,6C94B.(.?K8;>/G>,6FK83:C8GH62>J&E0/NF>C3&*+E:EM;&41N?9L2'9,MH-)I382>L3/GLCJ&-,(;72.+H2;?8@8,H*A)@-?@7D5MLD6L/GE @292 aagcgcccgagattaaacggctctttggcttgcgccagttcttcctgccagttttccagattaaggc + 00080M28+8MB;2JHLG,9D6/&7)H'-/GJJF@CL<*3K2)I*??>*4LFAF:(HGF:32KKJ1. @296 cgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcgcaagccaaagagccgtttaatctcgggcgcttaattcgcctcgtgaaaaa + 000>G&?F4,:>GD-)ILN;-7>(97FNC5C.@I;3JE(00101<0K1;K'7F;M9?4DL.K15C/L<=K9F3>A33.,D'27<,26BH5E?'H++3C5,>H/MCE95K=6J @297 agatgatattctttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagttcttcctgccagttttccagatt + 00000N(?)2GEJG++2N=BM&/=LAKKN10H*DNF='CFE+H*'(MG+MEJ00M&',1AEJC3D4;;.B/GJ=J7E53J?JDI1'(7( @302 tgaccgggttcagcagatgatattctttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagtt + 0003F,*/BBJ3&6J@H:=-6F&68(-@F06DCFIG(KMD;N::BI3?I4)4B*:81ID;:/BL-1CNHM0B)@/=C3IJ&*L-=L&G4;'.*9>?ND= @307 gctggaagtgcagtcaacaatgaccgggttcagcagatgatattctttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagtt + 003/+-/0D?>+N3EB,FL?2?/(8ENEH5AMB3;:I..0==/9H'H;BJNH(8@/+6CN6C1DA)IG83H'G+*)H901,1F;:M4&'E=CNC.:@'1:8 @310 cgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggttcagcagatgatattctttcacgagg + 00000LF<9+;FH?*5-1L.9L5(4(N=-8FD(J36A*/1<0I*.=B=)'1D.88/5.+:-KG @311 tcgcgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggttcagcagatgatattctttcacgaggcgaattaagcgcccgaga + :+.L6E@3@B*@8=+LK?G'31K/I7=*NJ<0*0M,J52GAB4'B,75:KDIJ6>'E*9N/7M9+2:E3/E)N@<73'F)0/NJ?D&BEB?>G5IBJ7+,/'K363CA;EJ @312 taatctcgggcgcttaattcgcctcgtgaaagaatatcatctgctgaacccggtcattgttgactgcacttccagccaggcagtggcggatcaatatgccgacttcctgcgcgaa + :+.&G>&6*C/10)3A@.LLA&0HC-J485;.866L+F@A/(H.-(F@N11:39;FAFHHH9BK2FG<==HJ7;GA34ADJM*7C.FK*'&/<*C.EM0=6:A=G&M,;CI:?9J @314 gtgacaacgtggaaaccttcgcgcaggaagtcggcatattgatccgccactgcctggctggaagt + 0@7;:C8=N09FG&690M:*62E;KLKIHKI8D:BC6:L35H<&@NG@@297?(&+4H2(-@A>? @315 cctcgtgaaagaatatcatctgctgaacccggtcattgttgactgcacttccagccaggcagtggcggatcaatatgccgacttcctgcgcgaaggtttccacgttgtcacgc + 00B02H9:9*1+?G,.+(I@5/8AD>:=9?==N'/(,(GHBD2=I&71A9>GE57K3*27+.D:4=6?=G(=>2HM3D=89?*0IANL850*=33>(11II'C-JIJ*01J2:;E348F&MMC1/>('FDA.**>83GIM;-MM03@EH'5=F(=D*2/A(@(BFG9L@+KA@28I@@:G>FL'@8*N;K(> @318 ttgttcggcgtgacaacgtggaaaccttcgcgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggttcagcagatgatattc + 00C23M,&E&&B)-AIJ*6EE.N=03613*6((MCE@2B(@F7KJALE3JKM2H5(.K*I4,H,6(:(&N2L @319 ccaggcagtggcggatcaatatgccgacttcctgcgcgaaggtttccacgttgtcacgccgaacaaaaaggccaacacctcgtcg + 0K5H6J?-95J1H0:BC4<.7>6J1'NA,)MC5B+9+49GJ+MN:G;F7F:K1E;J(?BBB8L5MMC:(8*B0?48EJ' @320 tatgccgacttcctgcgcgaagtttttccacgttgtcacgccgaacaaaaaggccaacacctcgtcgat + 000F922=>G>+'I(&D=>=5'2'09)H@I,BG;9>6/EF/C,:56GM-5(1.)AK@+555'*L&.@A&(F5D,*9FN @327 aaggccaacacctcgtcgatggattactaccatcagttgcgttatgcggcggaaaaatcgcggcgtaaattcctctatgac + 0B+>C)3E7&.K3J=-)3L*:./6H,=>2KL?6A07L(.90?&33(N5:1LN'8L>.MFL'ANDLHHBB&,4)':,3L:8MG9/80<-H39L3BIILDC?HL8>L*;J./G.9M6);?8K28+3GN:&86FKE>D=@CN;NF//)*31J;(/*K @330 tccagccccaacgttggtgtcatagaggaatttacgccgcgatttttccgccgcataacgcaactgatggtagtaatccatcgacgagg + 00(D/=FAA*G/33;G><185L0,AA)F7BM@4G-?-IMGL?7<@A3&3KF&)A6,GC2?*;D5487L'JL.7'M45G0E'475(219> @331 gtcacgccgaacaaaaaggccaacacctcgtcgatggattactaccatcagttgcgttatgcggcggaaaaatcgcggcgtaaattcctctatgacaccaacgttggggctggat + 0/,-+B+)BFI;?L;H/.'54>,))-C2'3;(*)3)/,;-.-K26,K7+30CN,+0M=/@B1E>H?(/((NMJ)H6&,BD59,)=<;M22K4,J99(7I22DM'N)+FJ,EK2C- @332 ataaccggtaatccagccccaacgttggtgtcatagaggaatttacgccgcgatttttccgccgcataacgcaactgatggtagtaatcc + 00))A'4G@091GL3AK(@8L428=7:-?*C1+E-96.6D@;02-??NK/N7+N1???JC)MM&K400A,1J0-*I(C7G?F+/).0K08=4/-AJB4:=4K'(5,G='?8HN92+,(+B)(B1AKI>=9;;CBEEEE.H7+1C8&576=DH/-J)763>8ML1L5+(?*+4EG0?:CJGN:@50):('/(:028IG57M @338 aaccagaaagaatgccggagaacttcatcaattcatcacctgcattgagcagattttgcaggttctcaataaccggtaatcca + NG/BH9-AAFB@,E@'3E908.&:'/NM'KLH12'K?:*/;-7:A:KA=D494:>DC>*18.K;DAB@K'LH66'<.7B8?LN>09&(FB1;@27&AN*'<'7&;:2L898853::7>HCGN&+I4?+92?(@J17K@4G.L):6 @341 aacctgcaaaatctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttagacgaag + 000M8KAM-LKDEB697+)-NJ9.@>/2MG6,D:1LB;<*?JJ&&)2B89)NEJ.DCI(&<,IN)F?0,&.'B,6E8I<;JE,,H@57*=N'7I=4A @343 aaaaaatctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttagacgaaggcatg + 000F8:+G4;'N054J?&G.>':12@6231-75J86N99G @344 tctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttcgacgaaggcatgagtttctc + 0CHA87M&MN?L0.?+'2GL/+++E)LH,4.C68D:7F=7J6?1/F2I.@H&)&-:.,&317G5-MLC/3BMG=HC469.+.6)>.F/H=BF259I.+LF'5/6@8B2:>L4441AN4-()AD(E0>*0C2344A6*6:DL*3N,)&.774L(E,6CE-D(&B(C6NIM29DB/A8M:ME49GK.64HEJ @352 tcatctcgcgggtccggttcggtataacccatttcccgcgccagcgtggtcgcctcggagaaactcatgccttcgtctaacttgccgaagatataagaa + 00I88:5('DG1G@D'/);:1;-A>I.D30BA7<3+;@F137=8J07?2:H@M,E>4)HNAHJGE3?,)L45*N,BFA(-9JC&=<(-DG/M8>>I6'? @353 gacgaaggcatgagtttctccaggcgaccacgctggcgcgggaaatgggttataccgaaccggacccgcgagatgatctttctggtatggatgtg + 000*26+>(/G0843C71'F?2IC6*M1CKGK)L/(;H@>0L1?2;C(7,B.3C0H>47>MK:0@CGL0,:+D3A5,-KL1I>@-;<0,4C@(-L @355 gcgccacatccataccagaaagatcatctcgcgggtccggttcggtataacccatttcccgcgccagcgtggtcgcctcggagaaactc + 0000-)-D*<1J(1A*JD?-6M*9*9H0J.&?-9DK/EKF09N<.:DA.L)6,9C;IDH&-?(-:KB;5(/0&;*9A:JA>C2LD4H1' @362 caggttcaatttcaatatccgccagctccagttcacgtcccgtttcacgagcgagaatcaatagtttacgcgccacatccataccagaaagatcatctcgcgggtccggttcg + 000-?/?2.?(48,@5F5F<;'I=9J7A6?2C,9,JGIN;CA8I3JL---IB'L45I(3B @363 taaactctgcgggcagcacaggttcaatttcaatatccgccagctccagttcacgtcccgtttcacg + 0HNE7HJ7A865'-9.E/N57A4=HHII&IB2;2B:K<&/':.(BKL6F&/3C2FJKF1&;//48J? @366 cgccacgcgcgcggcaaagagatcgtcgagttgtgacagattcgccataagcggcaacatcaccctcggcg + 9;,*HFG+)'-4=&I/(&+,F93K1F69&21CL:>B7L5B4-CGC2K(EHB8G>0+N-N=C+E=:G=L.:G @367 gtgatgttgccgcttttatggcgaatctgtcacaactcgacatctctttgccgcgccgtggcgaaggcccgtgatgaaggaa + 000F:G@43?K*3.E<>-62N:)=<(K37G>B10@C+*G03AG>8)?3CI89A<A8=>68/ @368 gttaacgccgagggtgatgttgccgctttttttatggcgaatctgtcacaactcgacgatctctttgccgcgcgcgtggcgaaggcccgtgatgaaggaaaagttttgcgct + 000G@&?2*MI;G+,H5'F,'(2>791F'@3,:K4&9=G85G/FM=9).(48@BK(857,1G??N7DJ&L>E+<(A5LGC7+);;8+>)7MD6>E2M.0&7H'@4< @369 gtcacaactcgacgatctctttgccgcgcgcgtggcgaaggcccgtgatgaaggaaaagttttgcgctatgttgg + 000F/6LM1;2:*0IK'J()HF3.8.4-9K<4@FA7*25G)C;?7;B3H*:&@B?K<= @371 atcttcatcaatattgccaacatagcgcaaaacttttccttcatcacgggccttcgccacgcgcgcggcaa + 0-DME>MB8>/M=03M<*K)0:M:5L9=7>BH85'*N+G>/HN0(>:720;5B)7>-?=?C)6>CM&,K1J @375 ccgtgatgaaggaaaagttttgcgctatgttggcaatattgatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgt + 0-34)/7<.+14;E8B;)I @376 tgatgaaggaaaagttttgcgctatgttggcaatattgatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgttc + 7+@5EJ:6,G:E5;FFAKDL&4HB'><)E*;BL*CL-H=8D+*BG'C5LH)*/'D+6+E?E&MNI2D><*9;57<2/476J?@+C(4 @378 catttttcactttgaacagcggatcattaccatccacttcggcaatcttcacgcggcagacgccatcttcatcaatattgccaac + 00DCDD7+>8ILFJ)@&J5@.LJ/918(?4G'7G*=.8H(1A-I2-@G;--+)>KF'IC-&M,D83='?HM=B>83L;LGFJM,: @379 gatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgttcaagtgaaatggcgaaaacgccctggccttctatag + KL.)M0-BLBJ:+8HJ<8?G9&GH&6?ID>K1CA=8=/MDC14/==,9<) @383 atccgcgcagtaccaacggcagcggctgataatagtggctatagaaggccagggcgttttcgccatttttcactttgaacagcggatc + I(&D<=H4@I7;I4HJ(&*GC36='8643N?):NM-,3.('=G.<-B.JIF/),-4;+K;72<44>*)D<@)DG98MD=@&GF9??K3I2E5-6/C@G4?<(E(D6&E @386 aacgtcattgcccgcaccatatccgcgcagtaccaacggcagcggctgataatagtggctatagaaggccagggcgt + EE)?9N:F(K+F8:,6@-FLB030A6;LN30*I?.M0;49J&B<,,+K>'>AKKH(:7-;=/8G6)N:.*;*3C,629NKGBAA;(*;:J< @389 atagccactattatcagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctg + 0000-;(G/(AI))FNNN;-M.38=((C>*-G1C,7A:-HC5@.60(.:43A-3@GC'E44''>42&-M=6C:K+C>NHI@:?8 @391 actattatcagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctg + 00JI-0318GFGDGD6@G'MF=?/M3*K@,B?.*F6.2H44D5D04KK7.=6F:AHFE)7L2F6(I+1;CB52@LF)'N3*F? @392 acgtagcagatcagcaaagacaccggcagctgtaacgtcattgcccgcaccatatccgcgcagtaccaacggcagcggc + 26@1;L<.C63JBC?-<4'&J*(;):B1:/MEKAD+J'H&>')0D:65+05D@0+C34;0D6>CG>I?M0H1)EG&L3I @393 cagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctgctacgtaccctct + 0'.*;)E'&>CN*<->,:C>L7GL(:E;@/E7DF1M(-?F11L@)JEA>AJIM*D-*:8/:M)9&LMCKD/@,:6/E26@.( @397 cgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctgctacgtaccctctcatggaagttaggagtctgacatggttaa + 000M)G+7HK0?2DA+G/=B(=9C7@9'6ALMF):&9'9><0AI5M/-K? @405 gcaccatcaacaggtgtcaccgccgccccgagcacatcaaacccgacgctcatattggcactggaagccggggcataaactttaaccatgtcagactcctaac + -+7G(>JI9+JN=C/=.+9.:= @406 caatgcaccatcaacaggtgtcaccgccgccccgagcacatcaaacccgacgctcatattggcactggaagccggggcataaactttaac + 000000N00/6-8:BI703(,II+.GN'E=L+K/2;>8),4+=;BNI.D8438J?K&B/D,L@((5<8J55*E:(A3/D6H6/'KC2I24 @410 gttgatgtgctcggggcggcggtgacacctgttgatggtgcattgctcggagatgtagtcacggttgaggcggc + -M?,<00)N4NB/+<(N):@(N=&J70)8'&BE/)76?8>*4>F<,>FHC:&6G>K/A)5LEF388IMJID2', @411 tgaatgtctctgccgcctcaaccgtgactacatctaaaagcaatgcaccatcaacaggtgtcaccgccgccccgagc + 0D*;E.5??='*?F/61()JJ4A)>ILL8M>5/?4=C?L5'4>:/*&.=5+'I8=MK;*9@/E(,9.=/KDF< @413 aggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatcaacaggtgtca + CE.?+L00>)4897JM'0II.5FE61I76*1NDDF9AA39GDB,G)84K52+E4=D,'G@I2CIM*+,=()K==,:L(<@4GKA8GFNA7?6@L<9D=/ @415 cctgttgatggtgcattgctcggagatgtagtcacggttgaggcggcagagacattcactctcaacaacctcggacgctt + (;G5<107,F078J8H7D'61*C?-L63H9=M8:9N6;JD+;ELK-.)*3D&,&D30627NA<>L'DE/(L;',>:&K*/,;E-& @417 cgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatc + D()C0:AG;.GKM;?K>@,.-@?1<2:=KC*N>8LL?./HN-M;&L34L34B.04)&H*F+F0 @418 tgcattgctcggagatgtagtcacggttgacgcggcagagacattcagtctcaacaacctcggacgctttgccgat + (EADDA@KE'::2J,,,-,J;:J)88EJD;CA6C)JF.+B:D3M*?C*B>:ID:AGD5 @419 tatcggcaaagcgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatcaacaggtgtcaccgccgccccgagcac + 02KE';3@29EB3;G5/NGN4*JG,E/K0L56.BH'4L8K9A4,8LK?&+D-7CMB30L)8))N.17N:IJ&AA*6M>:076ECJG,L9&D&)M1@L??(4:57+C*3,><9/6&(0)M>1NB;IA4D0F5?+B:@,B9/AM:CN)0J=3+E>LC,'E&B)K'N/658:4/II,&05/22@'554+L&).FD9-:<&+/+@;&.=H:C9KBJ4.8@7G.)6 @424 tctgacggcagcttatcggcaaagcgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccg + 16=E=JI&&:;9I:>MKI=;,8?*+G-96A;;17@4G?C:+:/E6/HJKICDI@:H=5N4NB?>H+/J5?M6;>===AI,= @425 acctgttgatggtgcattgctcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaa + 09BCJMF0D609&=GCB0D1F(.;-AGAH);;742KJ(6I-0.AFF>;IBFI2'; @426 tcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaa + 6IE4EJ';/F5.<6A(B.BL8613)3'CBD,:I6=7?/72;3AN&+23B8524+'(J'&9E3K3C1GHBL&'02(/9ECD>/5+(*3=HHF/?)& @432 tcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaaccacgggaaaatatcgtttatcagtg + 00:2'.)(>@:A.E'I:C=?:,J@:2,GC4.=G930>*0N&5<)JM@5K-)0.>B+L9/J)/CKK68C7@I(D'H/A<56/IND7?'DMHGIN@AJ1&<01/?(/8-4& @439 gacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaaccacgggaaaatatcgtttatcagtgctgggagcgtttttgccaggaactgg + 0000:;(A;&)/HD62;)?AD&1)+2=JJA,06KF++1:(J+1BJ-*B5;<83&7/?/+B)NB88<+&LMD.&80B,:FGNF*B0*'IJ':K>+8MI<71BE-0 @441 ttccagggtcatcgccactggaatttgcttacccagttcctggcaaaaacgctcccagcactgataa + 0+=1=>ENA5:&5BJ-C9'AM(71(;1HJK18=8))-EN9+JJL&2;9A54(A2I48N8NC.JFJ)055NCD(+0GA9&.3HJB(@A34 @446 gccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccgatcggcatattcttttccagggtcatc + 000B4BE62..C@8C8CD':1N3K1AK6;A)E(54?FE?(7J7=89-0NK>B;HG?FEE0N>IAKH86NEDC23(7<, @448 tcatcgccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccgatcggcatattctttc + 00A/I<1?NIJC=.BCBL;C@95:=L*7'*9J6)6+=+J=.LMI?B*)?L)7FA.5+*(>E0@+837*G4,4 @449 cagtgttcattcatcgccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccg + :>-752F,6IAD*E+B7KN-KF)(?,@)L&>CD/*1?(CF&.9(D&/=34:D?,8/3L**+1E56. @450 atgccgatcggttcgggcttaggctccagtgcctgttcggtggtcgcggcgctgatggcgatgaatgaacactgcggcaagccgc + @C/CMMN=B:7,D9JJJJ.NDE(=LGI8D10.85ABI4=GF)?J(G8N&.N@H58J@?JMN;7K<*MM64>?M/3643,H?:-+E8?5&>.2H;249B4A2A8G<81?C*J?+N;8>C)2((-,;2F,7'/4+3-1,N/.JK0/7B.2(&J/-H9D*GF'+H,6CH'D1A+D&<(50:0:+,J>.A3.,<;.+3@2JJJL&I*)0'2>*:K3HHL9;9,GB.-A-;AC'+139I/D5

    0HK=1-BA5M)I>'/+-'<2+3@9@N @460 gacactcgtttgctggctttgatgggcgagctggaaggccgtatctccgcagcattcattacgacaacgtggca + F/7D44J/0+88=3E2;K2IN&I,'F22=1:B(@JM9/L)K<:GNI<7F== @461 acggtgccacgttgtcgtaatgaatgctgccggagatacggccttccagctcgcccatcaaagccagcaaacgagtgtcattaagcggcttgccgcagtgttcattcatcgc + 000000;GI(CM-9>':JK5NE5A..=0'I+?>7AJ>I'..H)/<2/M44(@,-<2=+F2/8A?5'M;BI5I'-&E:./7&ELAKGEB*01 @463 gatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcgg + M>:9-EJ-;8-;H@KH+-4JH:71KI8.==6NJLKF.<+5/550.*LH')NNEB+@4GL95L/&:8C=9 @464 gatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgc + 005/6)HH;25-2A*.I*?M&FN&FF=4FB4?(G/8'53+=?DJA*;I*+MB88&KF?L:?6/:E(*24I?) @466 tttgctggctttgatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatc + 00D4BA4;'C2I&9&6+N:<4E5*3;AI+L&-JLE)5N(6&&5>@56+8E0K>E?1<*F1-;4@2/9/<)/:-+M)-0B6-C4M3,/36=I1?3B=>+M;MG8.?@IC/AK7GA3H/882<,IN(0*'BA.0@:,0?8<,I@@@5GB @468 gaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatc + ,I9,N/=HDIAE?E'5J:+-<)6I&*@;0<(64D*N9N2-88.82)-:26H41M9&M3H=+=9C88)K8(A9FA: @469 tcttcgatcatcaactgcataccaccgagaaaacacggtgccacgttgtcgtaatgaatgctgccggagatacggccttccagct + 2;/7/H2LI,@=I0F4?)H'?=+6DIIFM*;-=3.*7+F6-(I&208M/*8E/3E/( @471 ggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatcgaagaaaacgacatcatcagcc + ;7/C*014+A077F,7FN0MH(.L==F5I4=?:>)C(('91K??:-M1 @472 gcacttgctggctgatgatgtcgttttcttcgatcatcaactgcataccaccgagaaaacacggtgccacgttgtcgtaatgaatgctgccggagatacggcct + 00-'D51D321KIMJ9(C(3>E<'/9M(=?8)4G+0;=@F<+DNG;(*;+?3@?<,?MEN?,:J1+L(E8B==6D1FM4;:MA?D3AG((N?M96I'1&K62M @476 ttaatccccggatacgccagcacccacagccactcatcaaaccctggcacttgctggctgatgatgtcgt + *;08G&-M05KH)EMK0H/F5:'&-IAM8:/*3FH1N@6E=<&J,'?CFC'.&*FK@3E+@MD&:1*D7- @477 tatgcagttgatgatcgaagaaaacgacatcatcagccagcaagtgccagggtttgatgagtggctgtgggtgctggcgtatccggggattaaagtctc + 0H;(K51G('3C.4JA.-5)((')?8K0>8>M-13;67N:?M(3E:JHE.'*/C(;F1HK13=+KC5*2 @479 aatagccctggcttctgccgtcgagactttaatccccggatacgccagcacccacagccactcatcaaaacc + 000>4LL@*'&DJ8))CF@5AI/A,=>?AD-/1H<=@>A6CE;7KN67IⅅLJI(19GL,+()2@GB/(; @485 gccagggtttgatgagtggctgtgggtgctggcgtatccggggattaaagtctcgacggcagaagccagggctattttaccggcgcagtatcgccgccaggattgcattg + 000;+IH<<(GEH6C&'.2&-K5?.=GN?,20&(GC546H>>??=<.G-LN70*J?I8:M)9K9JMNECN-64.89&B @487 aagtctcgacggcagaagccagggctattttaccggcgcagtatcgccgccaggattgcattgcgcacgg + 00M=/KA;DLN<'=5>-=;.D7+C+L-E0A07)+GINN61,G9C@)<&F?&)INLEI@)KI)=M57L7I= @494 ccgccaggattgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgag + 00+4NA>EB>)M4ED=//J:7F=5F.++@FE;&;JN6)?0-B2GJ)6G/9IE&LK9CJ<=N&&@LJ95F.*7M @495 gcagaagccagggctattttaccggcgcagtatcgccgccaggattgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagc + 0*5LIK.B26>0L+)2&>4/.A?864:)B1F'E,12)J(+I6BK?M6.A889+G(::=()MAIB5K70//5:)3095D@DH4IIFJ(L'L:'MFH*3IHEL8NC&0E.?@8BN>D;5<+89>N=6=II10C( @498 attgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatg + 0000D'1='0.G8(,N)H/5:,:8;.<1;:KFK5)6JME;0)?FE+(5D<;1L'I01?E+<=N;L,/7L;17I.INEJ8;?,E @499 ttttttaccggcgcagtatcgccgccaggattgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaa + 000000F92/J:2<:H+&BL&/I*?L28K2*EJ9F-GKE:HE))7:M4M@6;1+MC:<2A9G()78AMC5B26H7JC,396&L5,B@MC4,JA,FJ@HH8*H+K8+&*1<02.5 @500 acggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaac + I,4BF,8&)D(:H>5.73(0*6B81<2A?I;;L1F;,:8IK:H@D976@M>7GCI)M,.''ML?*;CJ4-7+*J/NK4&GC(-NAE?5K @501 caggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacc + 0:?;DH,&A);B)51H+L0(H7&@)=NKK?A?CH7IJBA//./IJ7B,9N2A>JI**B>56A?3-E&B>J64*>AM @502 ttccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacgg + 009G>7BD9-?CE??)&C*>KCF6+@L/J8>A;9'I<-5)*6?6H,F.(B0I4M&4//+K5J,/4; @503 aaccgttcacggtagggttcagcgataacatctttcatcagcttcgcggcaagctcaggctgacgggaatagcaggc + 000059*90,N&524C,GG2+8H8I; @508 gccggaagcctggcagtaaccgttcacggtagggttcagcgataacatctttcatcagcttcgcggcaagctc + 00,13@83646HB?6=4M(>8EK6:+2M5E)I+->N=1.87HN7I>91D&,)2;+7G-+AKCKN8.F67A;F- @509 tcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcagg + 0009BF4&4/B(<&L+482LKAK1H40@72I.>M-G31,(53?C'?G82A)LLI/GB+*4CC1L;88B:'L)+@=8CJ1G7>+ @510 tattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggc + )G=CK;N0+GG'.4L*G6M*>7EKDHB+()N:N8H)&G(MDI:-/),,3:.F9175:8=JGJF'?CD&'3MH&0L*C>0D6MN23E5')E9& @512 cgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcg + 0000G'';'B4IF>DMI6;FJHFH9NI>F(N-I.2.G=@?/7I?JAC79+GA;3'),9LEF?&CM;(@(8G6=I'63E;2,HJD,F8CCC44G3;. @513 tcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcg + 0.'7J6,H@C22HGB>M.(?*64@643&81@C,=->N+(7/(3K-@8+FLNG,?E/J---GD6=*.>.&9'/AJN1&6N@(&F@JJBEJC67+F @514 ccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggttcagcgataacatctttcatcagcttcgcggcaagctcaggc + 00).I04?EK;)B)/62:/<0F/.:/:KB1+888+7=/59DCHN'N:E,KA=@/L/;G*//E6?;NINL*,* @515 gaaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcggt + 000&=K.@)>:J>83G'3(/4:4JH8@7,-N5@//K;)//C&>7D@N:7L=.M*M*=D)2K/=@7( @517 ttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggttcagcgataacatct + .;G3C3-ELJ(E4)@1&4&,<,JM5JLAL-91?-(H@LA @519 gcgccgatttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggtccagcgataac + 0000(30DNE&&-A+9C4G>@I026)JAM0=ID,;L@?;I149L6/;?,8:.':GA+'B@(2L);3A.B?+E81K@,2.@;?>C5E5;9*'>K7M6562*AI&9C?G @523 gttactgccaggcttccggcaggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttg + 000I>)+E-,73G@,8:,&J:F32>,M=BK+,J/G7F+FADHF&N;7GCB0*&A49D)A2K*83NMC;M,4@.67?NN/5)(B @524 gagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttca + *KGBF=M78LN86MGA2KG2L3K:,259M9+B.HI8DD+?GC0H@J4;&NN0E2B9C)J(8KCC*&/>:I:)36-6M<@BA:*/@7&-&62,M>E.L38BM @525 aggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttgttcgctctgtgtgacaagc + 0K>*K?65**&=<-A.3NB6>K&FE2.>8J&865,D22I??L/;A@(.LJ&<0C9<7**M,/A4,@I>CH;BFM/94+K':.C:BH< @526 gaacggttactgccaggcttccggcaggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttgttcgctctgtgtgacaagccgg + MN@B@JGKMN'/CGKL:288B*A,1?)?*)'.4I7CB@A014@097<@8?0L3G(J9J?/CJM+*9=N>7HN=<&J?'J3'KH@)=F>(318>D2CM7 @529 ctgggcggtttccggcttgtcacacagagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcgaccgcctgccgcgcctgccggaagcctg + 009H69>L9@@A?2B11AD'9>K-L9466DG0<)BA(6?-0+8HJ=L7=A54IN?L+J/B(/1B0)>J@KEKD(@0J0=K*'+'7J>3/H@=/5(*/&;8GE0149)I23A-D @530 atctccggctccggcccgaccttgttcgctctgtgtgacaagccggaaaccgcccagcgcgttgccgactggttgg + 0.'N3.159A)IM3,ED'.JNJ(47087<4.23M+&@,':.&0G4-F&FKE026G* @531 ccggctccggcccgaccttgttcgctctgtgtgacaagccggaaaccgcccagcgcgttgccgactggttgg + *(=1BNE1;7JJJ-+:GH:)G,K>1>GC1,DA:BD(DE(/A:MMN.:IL/?7AA)//?MI@E>K7NNJD;2: @532 cttacccaaccagtcggcaacgcgctgggcggtttccggcttgtcacacagagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcg + >FM2)*)+H+@;A1265=02HN0;/J?9;42(03;E(0/B/DE@*MD5(C'L&0D9;3,-IA4-C6&L9HE?(DB)83/7KGM7H>C'IN'7N@6@,-<(9:65A @534 tcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctgggcggtttccggcttgtcacacaga + 0&)IH*;-44?:,(:L.CB+131('0J)&*A@BA8*:''CK-F;&>>@)A'B:5+':*L7)0=G*:JMG&A9 @537 acaaccttcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctggcggttttccggcttgtcacacagagcgaacaaggtcgggccggagccggagat + 000L?GN7:3+G:23G=4;C=EL=,B9B+&<+&L/@71=+*JF-9>-&=HH@71*80)7J-275F1-(=,K=<)6,'9'EM@@KF?,;-,AAI0GFKB?;6B::3,L& @543 tccagtactcgtgcgcccgccgtatccagccggcaaatatgaacaaaaccttcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctgggcggtttccggctt + 00000G(?/BM6I?(3L@*/CK-L15<)GJ;18NF-93K322;<7+-)44@J+:N&;:27GE+>9>'43I8D+(&>AK2@LI'N(018*(9B/2B70=59C0572A043B>*G @545 atatttgccggctggatacggcgggcgcacgagtactggaaaactaaatgaaactctacaatctgaaagatcacaac + 0>8*0H9K1@?,?'*LH>BC'85'D7C;&F5E@E(&?(892B&L@*D&G6JCH*;HK7?K4J-5,?2DKE46C/492'B&,D0LA..;70 @568 gccgagaggatcttcgcactgcgggtgacaaaatccagcttcagcatctcatcaatttcagtcaggctgaattccggcaggtcgtgcggaaaaaacagcccctgatttttgc + 00000008B>?&N46C1A8?M*@/05=J@)L+'H'C--LC(96I&5--6-//I6-=9/:)+J:@ @574 attgatgagatgctgaagctggattttgtcacccgcagtgcgaagatcctctcggcgtttattggtgatgaaatcccac + 000244B-G>.J)66J572:'J?@M0CFKH6*KNG0=G@J1>CL?+N<+(MK(:<7=,0HG43B;'8@05>FKF2/('B @579 cgccgcgcgcacgcgctcttccaggatttcctgtgggatttcatcaccaataaacgccgagaggatcttcgcactgcgggtg + 000BF1M1LDJ&<&E(61G/&EKKJ.&'&?6+034A:EK>1*68&==D'>:,-FNI,7/2M-(2=L8,,(A8:;@/4F80:, @580 aggcaaacgccgcgcgcacgcgctcttccaggatttcctgtgggatttcatcaccaataaacgccgagaggatcttcgcactgcgggtgacaaaatcc + 000000F087'8F'L))8(9E7CEM)&GCD'G9LM+?889)'&3?-/M<3F9M,*0N3BH?*.2F?(5H');J0;3:A;41N* @585 ttcaacattggcgaccggagccgggaaggcaaacgccgcgcgcacgcgctcttccaggatttcct + 4B'JJG@F<4)*,.3<3/'H(G)??HN*:NA5;85GC)NL55?EK?<);0?G>2-;MHL5MCD4; @586 accgacatcgctttcaacattggcgaccggagccgggaaggcaaacgccgcgcgcacgcgctcttccaggatttcctgtg + 000/HAK45(2.B/@<(F:0M51IIIJ'=B719F6KN0I'D4J(3K&M&61K+::+.+(+A)N&3DC<4;,+=+4C))=K8=A'3.I @595 cgccgaaatctttaaatgccagcgttggcccgtggaacaattccagacaaccgacatcgctttcaacattggcgaccggagccg + 073)029H2GCNG41/DK5F6G7M+6ENN7BI31+6+@4B<<*K*-IHA;(:9D=E'IJM*7HNA:9AKJJ',+6K76:3?=8, @597 ttcccggctccggtcgccaatgttgaaagcgatgtcggttgtctggaattgttccacgggccaacgctggcatttaaagatttcggcggtcgctttatggcacaaa + 00-4&)3K/=>(5;J970N'42M-,&I--/AJ+NF;=N>B8(L1D6))BK)E0DI'@147JAHE3.2)@3MED80;8CA@2.I9A7.;<1@>>I=FE @599 tcagcatttgtgccataaagcgaccgccgaaatctttaaatgccagcgttggcccgtggaacaattccagacaacc + 000HD:*JIG&@3JGE0'KEBFNI0@.5:6)/(L;?)==IN&A=/>6B9;70:NM2*G003J-/E(:8;-C,<8+L @600 tgttccacgggccaacgctggcatttaaagatttcggcggtcgctttatggcacaaatgctgaccca + 00&?G/KFED9-H69=3'1.5>9+HCF*D.@.37H'EB2C27A&F95&2(LC7G6JN(51BB,:@N?AA'@2H;I @620 aaaaaccgtagaaagcatgagccactgccgctccggtatcaccggaggtcgcggtcagaatggtcactggcttatcacc + 00(G,LB?09*=B2;0I'6I:9J1>C&I=3&+29/-;8+.@C*7=G>*3CH8-0.50*E>9 @621 agtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtta + F585):=+&LK(2&B'&7*&>&+LG<4B(?064L9H9@?NC64-?8AJ/* @622 ggtgataagccagtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaa + 000D6N=+MLCA,8C6*@C<)G6C10A+/><7H*?@-:NFD;79HCC@G7DC=J=*==C=<&5-ADAN:,@8:CHNMK1HM1-+9;9B:9)I8M'>6NF>/>76D*;)EF?70?L.402 @625 aagccagtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaatgtgaaagtggt + 0000J/K97G4=;HD*N@J5:D77C13@&A'8/*:<;.D?1)>IC5)A)>?;7@BB.3GH;D3G9:IL=D8536CE0D/(1 @627 tgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaatgtgaaagtggttatcctctatccacgaggcaaaaaatc + 0008:L07J+//;KAM&7N1(3D(&9+HA5'7L6E/.6G4)?L8//,-5L7N8'7N*KA>7)8EL?C';E7H07./:8863EA>&5CJD&<5;K8&G?,3&D8/(B<'BIF=N?L/H*-/(K0E6AF:M?0@ @635 tacggtttaccgaatgtgaaagtggttatcctctatccacgaggcaaaatcagtccactgcaagaaaaactgttctgtacattgggcggca + 00H/N8K&2.KM?B8K0MF@55F)H914DM,4MME>E*6M)'<3'J,AMHBMB';@,KD*E*@FD(+DCE78*=?D4,*8658<8AM6M51 @639 gcaatcagtccactgcaagaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatt + 7NF3C,);'(8+*8>N<)?'4=MDMN @642 ccactgcaagaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatttcgatgcct + 00;H=)->D-F(IN5J-6N)-+@*25KB8M>3(.,;6(>E+A/)/N9)'*L0ED&*4B0/C8(&)-42DJ+@;ALM @646 aaaaaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatttcgatgcctgtcaggcgctggtgaagc + 0000ILN23K'II,EG586K*>9NJ00GM:@2B(10=74:6,MI/N&>/L)H?,1EG?C5/E,2AH::3==6.:GCE&/MA//)2)(//H6'M;>BC49 @656 gccagcaaacggctgatgttaatcgagttagccgagtttaaccctagcgccactttcagttcttcatcatcaaacgcctgctt + 000A(CL'97D(=>N&9).??2J8F81AD0N3,BG.7M>H3-'&@,9FK&&:@<=BDC:NK:6KM66;33?5MIJ-HE6?=:C3<.&70,H0(H56N@/B4GH @667 tgttgcgcagctgccgcaggagacgcgcaaccagctggttgtctcggtgccaagcggaaacttcggcgatttgacggcgggtctgctggcgaagtca + FK,F8EL@4(F2M91>NE->B/A/I=CD777+'4D'(,4FME;J=''64:;D23>;K*J'H-H-9'.BMAI8/6I-I) @668 gcgcaaccagctggttgtctcggtgccaagcggaaacttcggcgatttgacggcgggtctgctggcgaagtcact + 00.31N9/)B1012LB:K6:K+C@<6LI,?FJ3J+3:(65(9EMC8>35A.-02..M-/G?48:M:8L*0B-F+( @671 tcggtgccaagcggaaacttcggcgatttgacggcgggtctgctggcgaagtcactcggtctgccggtgaaacgttttattgctgcgaccaa + 000<.N:FN*7E<9(C;0JAE>(I2D3=*J9?KMG&MM-?7-&(GH,JF71=,=6IE&;'B-DBCCDADL:K1CLAD>&+IAI&D'2=B@'/ @673 tttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacgttggtcgcagcaataaaacgtttcaccggcagaccgagtgacttcgccagcagacccgcc + 0000D6(+*6-)):=166@/&&'55<+-;&DJ@AC&3FCNF27K671DLEFFFE7I@BG)>:1IL1)8,,9IMGI';I@+N?E@I3G2(4LCK>&98JL:CD' @674 gagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacgttggtcgcagcaataaacg + 00B:C@9CAB=B(&4>F*)GB-JA-='&8<0<4=GE0-(DE:3B@+EDDLIF/;@JJ('ME.F*(84CK)=1A(&-JK @678 tccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtg + 0?-*(?-,.'AF3:1:0I';.D7+(02N-DA/,822/5I)&,B-@72.*B:.C19,L+JH0:=2>'/ @679 cgtccatcgcgttggataacgtcgcctgagtcgctttttggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacg + 00B1>2+08HL)LB<>+83M(NNH9?H)6090A<77=IG0DKNJ.:'J)357D>+4F'H4&.2:?4>'-(6L;=+2LB+57:JB@:-7(FHB @681 ttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggca + 0000:7:<'=H*/:/<&D5D92;E*3*4E?51?0K9E.50>D=M1.G*.-A84E--H@7A2H*/9G+61KH1'F//(E+&K<2KM @682 gttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttttggggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgtt + 0000&0A3+4G:*3+.4M+BI:0I9&:/>>J,1='EAD:24B'C5+,:1)89=ML=C-&H&(GG*=A4*?3;4KL<0=F2'L3F'LI./J,0.H:I48579 @683 ccgtgccacgtttcctgcacgacggtcagtggtcacccaaagcgactcaggcgacgttatccaacgcgatggacgtgagtcagccgaacaactggccg + *EG85/5G;+?0N8N=)1L9E472N.ILF>/@G:H4-<;:*GH5;F96B9)'*3E65-B7HGK3BH)98N'=I2FM/<)G4>EA7+@LI=*.6/30:: @684 cacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcg + 007-8)KG?1:>N2HG?KJ5?>1BK0137;L'H:J7KD1JI/:L'3@G1';AM8NDI-B-;>HC?G86(;9.-C*,M8*4>3?76,&@BEC;C&J?E9&-K1DEMEB @685 cacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtgg + 0D9N2C5EG*1>6JBH1?0B(.N(0;LLJ&=0E5E=.+E'LL:&;2M?GIK(3)+A'>2M8<*,9=6)H.?&NC-E:&B7A/NAAB66A4@:CC368 @686 cacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatc + 0000,BI4C;6C*D..L9+,&+&@:=32IG:>-9JB4GL+NI@G))@*J56E5::=+&'9B8:MM.?AANAAH>83@CA)GE596:M?7M6.-?@71>.AG-KE?.L? @687 gataccgtgccacgtttcctgcacgacggtcagtggtcacccaaagcgactcaggcgacgttatccaacgcgatggacgtgagtcagccgaacaactggccgcgtgtggaa + 0G=IJDI'=DI/MI0)762*8:(/DN9C,&3K*;'9@*37;K8;&(K+B/39<&NI=27(C>,M4M4.E+8-NJ;*;A4J=D>>4N0K3,(,(4>DMK9.D8?;(G.&?3C @688 gcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgag + 0M6.41&KH/A*A/&C/B1,5-?=5G;IC:2''+2@B>F&3)JEFN;00K1&46D4E)C/IDG @689 gttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcg + 003*61(@174CI3JK9+2<>C0;?B&M<6A)9-BB-@4-G,D1((:.E,'B-4K,)6=3?EB(A6.@4'/C)(6I5-HF=C**HA>(/'<+/>4NB&/87'KD@+DC:H1?9;LHA@54LD6-K'I@*K5J+'KGF=*);9=)'GKG>@50J.7F2>-7',8@D?H,3< @693 cccagctctttcagttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcg + 00+:EF,'>KD,H'LG.'&4(5.=B=1C/1GH&(<*6I=BK8-,88<';N:NJ14&JI;*M<33/* @694 ggctgcataacccagctctttcagttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgt + 00000.+J'M94D@FCK=@7;?A?H97'1D/.14-+8K/:5:NNFC,M>IM@=68NMK739@CE@3IFKMH185LI2M:.@H-&'M @696 cattgtctgttgcgtggtttcatcatccacggctgcataacccagctctttcagttgccagattttgcggcgga + 003K*M+LID6'BH87J523-G6DFI4(<&-B>7)58MI45=>K/8;3C(3+@5 @697 tggccgcgtgtggaagagttgttccgccgcaaaatctggcaactgaaagagctgggttatgcagccgtggatgatgaaaccacgcaacagacaatgcgt + 00000-6JGGB+15&(A58/41C7*&6.0L?;8K2K5,,1501'+1-99:8JD,@3/B03A+N3AN/42+H>-:C;L)75'>3JAAI.F@0H::D;)8@+-2:**9<+MCG-;?K.(.+D @705 atctggcaactgaaagagctgggttatgcagccgtggatgatgaaaccacgcaacagacaatgcgtgagttaaaagaactgggctacacttcggagccgcac + 0(50@?=7C&M+,6.2-LH7B>BD1NC?.I*3K4>NL<&A/6(M'(/5>8':I8C28.?=;H*4KH+:78A8?*9D':?0?A,2>J>L7<;D=0+7D.=24@JD8 @710 ggattcaactgatcacgcagcgcacgataagctacggcagcgtgcggctccgaagtgtagcccagttcttttaactcacgcattgtctgttgcgtggtttcat + 000'?@4ECE'9&3>?8?C)3)HJ0H.-.GK/*G(M6=.F5G>E7'1);)'1&E14-;?'D69L*8G4=GH&+8E<=5/:34'B1G@0-+;2-*G=H&;H&.> @711 gcctggattcaactgatcacgcagcgcacgataagctacggcagcgtgcggctccgaagtgtagcccagttcttttaactcacgcattgtctgttgc + 0000I>1K/*E)M*3,4.E7D?29F:D055I.@7LH*D19&-.B;A&5086<&*:+&25I-H&/M9A1:H,<3GK,)*NL.0L6>CB,5/3<)*?G' @712 aactgggctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaat + +MA=307EN--&4?.J1A8NF''+.;DILL.&9E+KH4A+;E1M2L98+>+9,G&KB5D';,4>L7G26I&1 @714 ctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcacc + ::L4G)+K/5@IHFB7D+?+&&'0=J0:G(J;=D-,J1EL.B6NA*87:?J;MIEG:711D>;,6MF>'@)/6EC(42?0'C98?F=H;LA1?/B(?<--L<,EII'H:/H;J(5+2A9,J)F; @716 tcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgtt + &B.?MEMIDDF6/&046?M5'1,9:G14A9H;F*.C/=DACNI'27&>/?29:CH@G>..M<01-HMD7-67/2CM'=(I)CG(1L(C2FFH0G98@1?E&7CE.85.995H721L;>IIB-18,I2)AH6 @719 ctggctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatt + 00,,5*H9G(15@9L/*?E.'?FH37DI)>*@;1-@&)/(7-*L*E*33(@?M4NL@KHM(2&L7'5D6LJ4N<2DE37L9/L>;?3HJBD.DE/3/G'4HF;JH'=-: @724 gcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtgga + 0G;DN&CI)B73D)(E)>DNM6(E.)'I>B;3)B-MKJ<.:*H,*0D@/'/)LE;*38>G&.(=5F:F/KM4A.K+I:LF2L7 @725 cacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtggaagc + 0003&@;+:8/'@:E<2.GJ.+?CFI.M0E.3E?&D>GD::?&:'(85=,J1710CA67*3E=M9J0@D0'.@>GD4'*-;.CAMH8:)J/E+'+L.@J6.:H6HAN @728 ttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtggaagcgattctcggtgaaacgttggatctgccaaaagagctggcagaa + 0000.9FBM*8*8B)58I;=.J?5A16.K@)*-N=I>'@HC96+.AJ)NC?K*/CC60,1G1):N&18.;M''7JHC0/,1*1;2)E0/6D@4'0'+:=2N>B9:+G('1& @730 ggcgaaaattaaagagagcgtggaagcgattctcggtgaaacgttggatctgccaaaagagctggcagaacgtgctgatttaccc + 000&K+@L:AK+G8<&5(:44(J:')L-8>&E(/394EN6-;N/F;;-1<.9,919&4HM(0?<:FA:H-*>3B5I*:J,:?13> @731 gttggatctgccaaaagagctggcagaacgtgctgatttacccttgctttcacataatctgcccgc + 000000'?=CAHA-MIGKA3(*-14IIJ,:LH+9.5;M<4H:K/ME'@@CJC-;CAD6AD6 @743 attgagataatgaatagattttactgatgattcatcatcaatttacgcaacgcagcaaaatcggcggg + 00-0DN?GG'C:<>@H')+>''D89MML;K,,L;4.457>,HJI;7L?M67G>BN/BN:36*KJ+@HB @747 aatctattcattatctcaatcaggccggggttgcttttatgcagcccggcttttttatgaagaaattatggagaaaa + 00000<6:)LAM')E67&=4N'4,93JMF&*55&7E-&?B+>@A,G/02:BG1I8DHALD.'&>+5'460LL(L7&; @755 tatccggagattactcgatgagaacggcggttgttattctccgcaatcctaatctctaagttaccgcatttattgagaatttctc + L2DB85E-9;,41'03=?+=>5)4@2=8D>GI5B7.M3D.'2=&60)4HI1.&LIH3*6N.4/N4'A,1,.CN--)2DMH.;4/. @756 tgcggtaacttagagattaggattgcggagaataacaaccgccgttctcatcgagtaatctccggatatcg + 8=3GA+MK'C./E/*<)I968-J,&CH89I+)&>'/H>@:EH&5*/>D101>8L-I;F.?8K'CN3G&?.4 @759 ctccttttatcattgcccgttatgggtcgatatccggagattactcgatgagaacggcggttgttattc + 05+KB?/I5'E94)@14CE=C)@)/.J*7J9F/@J9,*L:C++/52758*AN-.K*'L6*+4E9K4+B3G>2DL<:IJ8/=A97I><,&)G03L3,A:N>MBI8.K6@G&@:3J @131 gatcacatggtgctgatggcaggtttcaccgccggtaatgaaaaaggcgaactggtggtgcttggacgca + 00H-&*4BEH4J+=79L469+F9G.(3>:)=61+5LM3( @137 ggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgcctttttcattaccggcggtgaaacctgccatca + I?7H+0F&510-4(<8C>);:E'C,4AHKAD*AD>GN3,*;A(9<=8:IM):ADKE@/'HE2;;;8+/?LG(D0*6?62(I>FE1H026N(8EE0=GH9?>FMA6LEJE,E:5<875=;4MG1>1=LFC?FF.EN/B'EBJ&+)3EE3*6BC7?M9::26;-5/D+I9;22D3NEJ'6'>,N,D,BKN:6784B>;IAB':=;@-/6N:B,=J0+FG30)C6'CL.<'+K<: @142 gtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagca + 00L=)H.405GF+=C-:A2<)>/>E>D4BE&+B:AK27>09 @143 acgtccgtccaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccg + 0009F7HI90:/GN2B&M59,*AM(0&60N&3F?3L=7EF7NMJ?N8N-.?2*0,<)0D2<&)8BJ*?LCL @144 cgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccacca + 000&C*&5GMB4=5F'LHH@)9=3J9G+3L(+FEJEC)>2:D(I/N', @145 cgaactggtggtgcttggacgcaacggttccgactactctgctgcggtgctggctgcctgtttacgcgccgattgttgcgagatttggacggacgttgacggggggt + 0000IDD:);6.2JB:/3LKL3E7-2)'+3&.5J2(:6*;J4(D@C*>;NA;?;(AA7@*>K2J:1IHG&;F(7,.:'F;MK&2E.B=3-*(G-C9B:818I2J=@- @146 tagaccccgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgcctttttt + 00000-E6)/08HCK.;>I;?)*AN.5KCL/IHJB-3(83M;E4,I6ML65'JH/K5.7>8;B0'D @149 cgcaggtatagaccccccgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagca + 0000+899@+,1>9HCGG2-M19*FE85BI:)5=953E4>)02&*'B@B'JB>BL/2+;,+'.5C,8;AHA+)2L?9*C4(;ABAA1@-6(/)61F2)2)DDD:5F,NGHB @151 aacggttccgactactctgctgcggtgctggctgcctgtttacgcgccgattgttgcgagatttggacggacgttgacggtctatacctgcgacccgcgtcaggtgccg + 000).K7JA0F29G5(;H:,?3N:A9NI&F8)>15L1<@5A7?JJ5.HBA1NB58='3BA(@:HDE&+0>)A*.<,'(H&GG0/2L8(8<8'NN6F.:2+40*?/-3FN @152 gcggtgctggctgcctgtttacgcgccgattgttgcgagattggacggacgttgacggggtctatacctgcgacccgcgtcaggtgcccga + 00/C+K;>474J:N,K0ECELMC++HE-*N7M+.DHH-=8ABJK8-C&-+-8)B5@.34DN/:1@8J;,)-.225E:BMN @160 catcgcttcctggtaggacatcgacttcaacaacctcgcatcggggggcacctgacgcgggtcgcaggtatagaccccgtcaacgtccgtccaaatctc + 00000(75E,/5><-379KCL7D@3?JJB&)+G1K.HLK48?>9>F1AG/5D:);'E:M6AEBIH>E70?:IN'D@-,GJ/N00FEC;/()=>@AI=D* @162 tggacggacgttgacggggtctatacctgcgacccgcgtcaggtgcccccccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctt + 00000/60K<.C;/E?7N:NG?&FDHD/J6?J25.*0:<4*/@N./JM'=:N:I)19I,):'79N/>F?GA.898KJ>H:/6'?BIM31,M9HC@BHCC?C.NNG9', @166 ttgacggggtctatacctgcgacccgcgtcaggtgcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagcttttcctacttcgg + 0H(1;<1>(.83L>99474AE<2MC4./'J6;JL<7J.D?/=,//)I<,.;I(41'@AC&,<27H2:87G<&5NM)432&K372?MM97 @168 gcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctttcctacttcggcgctaaagttct + 0;&6GM3<,86-2CL-2GH&(,KL>-9MFIG887I;F5@LL/FKH+&:17CB+9NF9,8/L9@<**EC,6M355/5KH+E4;KGH-I?@6(70AE;F.,D4F@GJ>-+4BEL&=J**1-:+@.3C&>DE;C&I/>85J)A';,L5:?A/I3<8F*.DJNC9C:-E @172 tctggaactgggcgatgggtaatggtgcggggggggtgaagaactttagcgccgaagtaggaaagctccatcgcttcctggtaggacatcgacttcaacaacctcgca + 0001??5DC7).//M7M5/12?N>79-/K))-5?0M(73HMFF:FI(/*=K:,='G+A7B6'4DILK0-DK@+>HI>A>N/0>GIEJD(3=6761:'>2B/@8/E @177 agcgtacctggtgcttgaggattccggtatttttaatcaggcaagggatctggaactgggcgatgg + 000=7722(3?,M'..)E':EGC(N'@K4/&>6&'C)1-/9477G'@.?9-;+:DE94,=N?H, @184 tccagatcccttgcctgattaaaaataccggaaatcctcaagcaccaggtacgctcattggtgccagccgtgatgaagacgaattaccggtcaaggggcattcca + 000**925<9L,(MEJ9'B7@H>A;&:;-6&CM*74F)GGI/&5<3CE0+>4-5H,D7JF.-F(07>3??D8=HL? @185 caccaggtacgctcattggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctga + 0005,B6(1MJ*9;+LB<=FIEKFG1E+@5BE-947?C2A8'H6<7G&8N2+14-0&A;7=?E*>FF'M @188 ctcattggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctgaataacatggcaat + JIF22>.NJ0/45N.BB1*A&.M+,)E)2;:<.HA:1>1A52JMM80;I*E8@&AB1I:CJ @189 gaacattgccatgttattcagattggaaatgcccttgaccggtaattcgtcttcatcacggctggcaccaatgagcgtacct + B1>7904BE&HG/K/3K9(9B.=J=G/G;<47-5*-9CFIA?((F5IJ:0CKLF8D?3FC759A(6=2618(7;EG2,/.LN=C)A97(2*K)E((*,G5D?*C-N4??DME&I6KL9M/1@6J?M9F&D6/0(5FJ4K,;F0=M4A;=?1AN*:+N3+*J=?B1;)6&4:K9(,11IN7G-N1H35>GBBF0*3*'7'D> @192 ccttcatccccggaccagaaacgctgaacattgccatgttattcagattggaaatgcccttgaccggtaattcgtcttcatcacggctggca + 0E=;)>.K6)E;DEJI'(JF2@C1.=A+112CJCL&G?48>08LA(:0EK)JN0:A);@J;5(M&5GF37HDDHMF @195 tggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctgaataacatggcaatgttcagcgtttctggtccggggatgaaaggggatggtcggcatggc + 00000)72BLGB>;:(/)&>@(39-N5F5>DL@H<>4C6J3N5KM76GN41/4D7)NM;@N+,E)8,H7*I?* @201 atgttcagcgtttctggtccggggatgaaagggatggtcggcatggcggcgcgcgtcttttgcagc + 0000:*NEE?65I4H;1+A/2;1*-H:=55FK.=,2&@1NH0N@D>IC/6 @205 ggatggtcggcatggcggcgcgcgtctttgcagcgatgtcacgcgccgtatttccgtggtgctgattacgc + ?-E>9B;BJ7/51BA?:N0>+(:-?42:;N;7:-;@8IA.90.* @207 agatgattgcgtaatcagcaccacggaatacgggcgcgtgacatcgctgcaaagacgcgcgccgccatgccgaccatccctttcatcccccc + 00=2G+8I>9(MFL8+20KIH6,7<*=6JH76+0MMB8;1+JDI''2:JB9=:F65<370I24K0A+LI @210 gtcggcatggcggcgcgcgtctttgcagcgatgtcacgcgcccgtatttccgtggtgctgattacgcaatcatcttccgaatacagcatcagt + 00K9EH2066:6B;;84DN9K=B9'9K2L?LH-'&FE.,&GMH0'';.(ML21:B<)2,F7F:@3;35->+NHMIC=7HK*I*1,55A3:1CN6,F?;'*=?(-))=-=A179M9C)M@@8B/=GD*J*5H&>9=L>;/0HB1)3GJ=)C:M&5DFAF;;8I2.0/-48*1:+@FK @214 gcgcccgtattttccgtggtgctgattacgcaatcatcttccgaatacagcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaa + 00*6C)6CJ1KC(B@537DNHD=:'7I=7-62>0KB@9'HH/,;KNC;LA6@,,DI+9&+1L.934D?&B:*IMMB:73KKE=9L>3275,1-B;)MA8* @216 gtgctgattacgcaatcatcttccgaatacagcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaatgcaggaagagttctacct + 00000@K9(,DHFC0'+8(NC4F50H000D165&F/2M3GE?*A38?<>/:=A89(G0+-9L,'.'AHHAE((IE'9/?,')9E.253@3:EGG3J'--J, @218 agcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaatgcaggaagagttctacctggaa + 9(D-C320J22CKGGM;:48BA@A6?A4BKD-;5(3,J1CI87KA66>/?)&NG44;3A-1@2)*D:(9*2-09F @219 ctccagtaagccttcttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcgctttgtggaacgcagaaactgatgctgtattcggaagatgattg + 00>2B93(B?'7A,?A?AMBJ;'&&.('?C,2;)2G4&CH82+166BLG>08JJHK30E*?69@-L51>K4,=-6'N(D7.-KI4E;,)+CA6G77J7@849 @221 gccgttccgtcactgccagcggctccagtaagccttctttcagttccaggtagaactcttcctgca + 00+(45D(>E;K+F=DH('H/D/';L&AF9F?*:J9AAJ35>G161--4'KIDE5,1C@??2(BD< @223 tggccagccgttccgtcactgccagcggctccagtaagccttctttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcgctttgtggaacgca + 00.IN9DJ'D;214><*69F3808DB(>GB+NEC4G7N19@=;E>A?3J0,@>NA55I+52>129J,GK)J4+G39'36NJJF9?8C?9:4'M0=6+E?5359,=G;K6,)F @224 ataatggccagccgttccgtcactgccagcggctccagtaagccttcttttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcg + 0000FB5(>B0..-,6I,NA-J,>@I868,19H+/@F/N&.KCK>7C:B.(A:>2))< @225 gcaggaagagttctacctggaactgaaagaaggcttactggagccgctggcagtgacggaacggctggccattatctcggt + E<,4@0B551<40I&:B>@54=;>+/,GAKAI9I&4139F&=:5)<3EEE3N))N2L6BHD':'*N2;AM<,17@5D)(@2 @227 aggtgcgcataccatcacctaccaccgagataatggccagccgttccgtcactgccagcggctccagta + 2-@L-;1J.12J(<=G/5+FB5>*J6E;*=M&6M=-)17NDMK/*-, @232 tgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaagaatttcgccgagatcccacgcaaggtgcgcataccatcacct + 09CG+5)&7D80)D.M,07F=:==)A1'-*B(NC&B29NFB,?'HB4D,D1N20/9C@,>D:,'*2'A(01I>,?9@ @237 aattctttgccgcactggcccgcgccaatatcaacattgtcgccattgctcaggggatcttctgaacgctcaatctctgtc + 0157B=7C<<=MI/,(IB(F&<,N,56BLAM-JD-4I*M)C@E85LFAI+6AM9AJAA&31*0N;I-MA'*KB6ELF@I,J @238 cacgacagagattgagcgttcagaagatccctgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaagaatttcgccgaga + 00(0A1L=+=A*+D8L16L&MMGH8K6/12?HH9@,3JH=*BA*8>>.5/,:7B<*G:+E+N?FIA9JD<6?5@?03,*<(*69889;2DEC @239 ttaccacgacagagattgagcgttcagaagatcccctgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaag + 0000HD2NG95*B=N-='>60/M(BG=N4D9'H4K7D2((E;@/?=0/=2)8J2ACK3B4C:;NN,/AK(3?H05M73&:&9;= @240 caatatcaacattgtcgccattgctcagggatcttctgaacgctcaatctctgtcgtggtaaaaataac + 00000=6G+NN&HM'>NC2C3D/+1F(FN=7D<345)@<**?;39?K7*'13EG@/7=J0N*HF?7I=. @242 cagggatcttctgaacgctcaatctctgtcgtggtaaaaataacgatgatgcgaccactggcgtgcg + 000007:?G*5843,G99L:3&*( @245 gatgagtaacgcgcacgccagtggtcgcatcatcgttattttttaccacgacagagattgagcgttcagaagatccct + 000034E0J1)H=4FLJ6,9=6?>:M65EL+-ND-FGJ1'(5515I-9+5AI)D69N:IF<;=5J:8N9:2I5D5J<+ @246 agcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttttaccacgacagagattgagcg + 00BK,K4E-L>(L9''64A6@HH>/)G&J20.JLI5&'J@8;2A&I, @249 atcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttattaccacgacagagattgagcgttcagaagatc + 09.'A&1&JAG@/A7I0J'01EB)F-I9I<7(M33,D>G-15'F&&'<>L-(5G?320(.BC.8'+7L31GGI6G.247I933L9)>>'A. @251 cctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttattttttaccacg + 000,J=KE?;C-CD6AH@23+J@&8?3E1@8=JI./<=,>95.-8?0K/*>CF?L@)@*0E&JC5GAAH&I.5> @252 taacgatgatgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttat + 8@NMID/I)'8JKA26KH@K@2A7&?HH028&=:/6?H897F?2E=;D2+F6AAGM@*G13LKE<( @253 tcagggatcttctgaacgctcaatctctgtcgtggtaaaaaataacgatgatgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttatcg + 000;N3C2/@<'71NE1J<5B<-LID0H*,+N)G)E,4)@/4=3-:?L;-2/(M56:LI1*:N.(AE9H96LJ6A=D1(:&N;0-:A>A0.JE1MM5LL@GG @255 cacttcgataacctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttattttaccacgacagagattgag + 0000H<+'A4A.DG-<;.A.-HJ/7;5H=?KC8I0,5MH;2.F?=:0C,K4&9,4/)@JFHE8,H.&)G,I6:1CN25BKDFM1+7/658=-M>H @256 acgatgatgcgaccactggcgtgcgcgttactctcagatgctgttcaataccgatcaggttatcgaagtgtt + F+B11,?-9I:)@60;,KMKG&F'3@?.=9N)H/,BE-3/JF4?&?9B/8*:36.4746=<9D>?DH.D22J92N;>(J+7H6<9* @258 atgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttatcgaagtgtttgtgattggcgtcggtggcgttggcgg + H-=2FK3C7*H7.9@&H:F4LD=(;+&.&I<3E87J,M+K+;1C2D-(=IIA47I-E46N;G7:E528K,0L1*-I?3/NG77H);&?*@+N=? @259 ctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgt + =.I;NB,<<.JI/FK.,'J7ACL+NK=NH.2FM)5;9;7NBNL:,KB/)3MB6-0L:-5E-F>DJNEJ@,@63&04H?78E;B?G2DEGJMNJN.'8:8;3;F2C+'I17:0C @260 atgctgttcaataccgatcaggttatcgaagtgtttgtgattggcgtcggtggcgttggcggtgcgctgctggagcaactgaagcgtcagcaa + 000'9K5(G4<*/4A0BI3@19/KFD@.J>MMA96/-G6,2*/LCB-941HFK56=5L,29)8AI942(,/L5@+5KJI?/@;53(93B9B1:?J2=FN;B&@>.032/:M+1B52L=,/*DB=2'G7I<.J2;8H:*I>;GNNC@9G-=M'LKD;F'6E @263 ttcagccagcttttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcggtattga + 0000;;0KD2'-D-1L0)/M1@A3>,9@DE-4)DB-@*C>6=,?GK)J8J4.)2C47&9M1.N0='1D(>FBM65ID,1=);FB7D.7GDI1>+I1/L @264 tcttcagccagcttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcg + 000,?86K-E'/*6I@=2HGKM:)JDK'>C07HF.?;?)K+:A;))F3=NL)*D.LM1AB,N70-+78E2J&M(.*&D@'A-G)3.AF>1J @265 gtgattggcgtcggtggcgttggcggtgcgctgctggagcaactgaagcgtcagcaaagctggctgaaga + 000('9@7C:L8M/L7H//A-M:(-@FH.G255MD0M+;:1(DLJCH<.C,9+1N<-F=9*NG5:A)I31 @268 ccgcagacacgtaagtcgatatgtttattcttcagccagctttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgcca + 6CEBI5GFJ'61D(8:C7C7F6K>M,6+&9N*36J,*?0;E/G6?3 @271 agcaactgaagcgtcagcaaagctggctgaagaataacatatcgacttacgtgtctgcggtgttgccaactcgaaggctct + 7;<,(;)=H?(?G4854*5;/N*4KA?'AJ;6BL':F*M)8@JH,HH10EJ('&C';.*0E:'()@'(DFHDM)G)F5-8@ @272 aacagagccttcgagttggcaacaccgcagacacgtaagtcgatatgtttattcttcagccagctttgctgacgcttcagttgctccagca + 00C5,7FH=828;ILNJ(6A44DC&9L3<7&N>B)6'2,J2/KFI0N.=D7FA7IAH6'6H/N&(()FAFF&F-'E5&L7L6E,,*JI/+9&@83C/KJIC*IK)5*2H662+N @276 cgctgctggagcaactgaagcgtcagcaaagctggctgaagaataaaaaacatatcgacttacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaa + 000),<+H(F48.:M?0656FJNH,.2@@A(2ED'IB8.92,:9KH7@5B>5E7'5J?M&)))?:31.M--5;=B+J=F00&7@.9)6I3@<)@>?3G:2AD.63=/F+:87<.7.=F @278 tacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggc + D4.BA)670:MAL;'J'(;0FA)4I80'0M2+IK0?1IJ)47>*1/=CC54=/>3BNC8=0>B;.7;7?>C'I4(6)L4E-2HB(5'N::3KFN,?9/D)DC4=4J,*,>DFL2'+G@@;/K,4*H1(A16?.?0DBDE @282 gtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactg + <+?)=L7@N2FGJE>>+ED1J9B5;KFEIE&//)4*3C.A8H?3C0C:GC)33<*8NKL(@@@46AEJK)J @283 cgccagttcttcctgccagttttccagattaaggccatgtacattggtgagcagagccttcgagttggcaacaccgcagacacgtaagtcgatatgttattc + ;6LC2@7?.DL*;+254=H4I12B.'3(6>5=3A=39N7D/6)5IG5G(F(C2A9@;DC'=:(3,8>LA33J5<95,,H@:.A=A''-I9;C0=;A*+)72. @284 aacatatcgacttacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcg + (4-*2>G*04M8:)C@+E10IEE,0/C6EL08=9,.)NC5,I:)+7'&82'JML;/.4GHCC?G,11I3IDGI/(==1KLM'?1C:5=6DG8=-BHN= @285 gtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcg + 00?>EBFI>5M/C&,@N5*8@J4FKLA404/4;N&'2B3,G>CM8)4*:.F7;@EHL*F/>;A@).AEB:/23)J60L)M7BI @286 tacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcgc + HJ=;;.*.?21LN)496-(((I5/N(BI50>F.A=5L/6.8779K''4*9:L6>:/5H'.6L1@1G+7BD7L:K.N6*04&>F7>E'B)D02=(I7E,6C94B.(.?K8;>/G>,6FK83:C8GH62>J&E0/NF>C3&*+E:EM;&41N?9L2'9,MH-)I382>L3/GLCJ&-,(;72.+H2?8@8,H*A)@-?@7D5MLD6L/GE @292 aagcgccccgagattaaacggctctttggcttgcgccagttcttcctgccagttttccagattaaggc + 00080)M28+8MB;2JHLG,9D6/&7)H'-/GJJF@CL<*3K2)I*??>*4LFAF:(HGF:32KKJ1. @296 cgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcgcaagccaaaagagccgtttaatctcgggcgcttaattcgcctcgtgaaaaa + 000>G&?F4,:>GD-)ILN;-7>(97FNC5C.@I;3JE(00101<0K1;K'7F;M9?4DL.K15C/L<=K9.F3>A33.,D'27<,26BH5E?'H++3C5,>H/MCE95K=6J @297 agatgatattcttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagttcttcctgccagttttccagatt + 00000N(?)2GEJ++2N=BM&/=LAKKN10H*DNF='CFE+H*'(MG+MEJ00M&',1AEJC3D4;;.B/GJ=J7E53J?JDI1'(7( @302 tgaccgggttcagcagatgatattctttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagtt + 0003F,*/BBJ3&6J@H:=-6F&68(-@F06DCFIG(KMD;N::BI3?I4)4B*:8H1ID;:/BL-1CNHM0B)@/=C3IJ&*L-=L&G4;'.*9>?ND= @307 gctggaagtgcagtcaacaatgaccggggttcagcagatgatattctttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagtt + 003/+-/0D?>+N3EB,FL?2?/(85ENEH5AMB3;:I..0==/9H'H;BJNH(8@/+6CN6C1DA)IG83H'G+*)H901,1F;:M4&'E=CNC.:@'1:8 @310 cgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggggggttcagcagatgatattctttcacgagg + 00000LF<9+;FH?*5-1L.9L5(4(N=-8FD(.A&&J36A*/1<0I*.=B=)'1D.88/5.+:-KG @311 tcgcgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccggttcagcagatgatattctttcacgaggcgaattaagcgcccgaga + :+.L6E@3@B*@8=+LK?G'31K/I7=*NJ<0*0M,J52GAB4'B,75:KDIJ6>'E*9N/7M9+:E3/E)N@<73'F)0/NJ?D&BEB?>G5IBJ7+,/'K363CA;EJ @312 taatctcgggcgcttaattcgcctcgtgaagaatatcatctgctgaacccggtcattgttgactgcacttccagccaggcagtggcggatcaatatgccgacttcctgcgcgaa + :+.&G>&6*C/10)3A@.LLA&0HC-J45;.866L+F@A/(H.-(F@N11:39;FAFHHH9BK2FG<==HJ7;GA34ADJM*7C.FK*'&/<*C.EM0=6:A=G&M,;CI:?9J @314 gtgacaacgtggaaaccttcgcgcaggaagtcggcatattgatccgccactgcctggctggaagt + 0@7;:C8=N09FG&690M:*62E;KLKIHKI8D:BC6:L35H<&@NG@@297?(&+4H2(-@A>? @315 cctcgtgaaagaatatcatctgctgaacccggtcattgttgactgcacttccagccaggcagtggcggatcaatatgccgacttcctgcgcgaaggtttccacgttgtcacgc + 00B02H9:9*1+?G,.+(I@5/8AD>:=9?==N'/(,(GHBD2=I&71A9>GE57K3*27+.D:4=6?=G(=>2HM3D=89?*0IANL850*=33>(11II'C-JIJ*01J2:;E348F&MMC1/>('FDA.**>83GIM;-MM03@EH'5=F(=D*2/A(@(BFG9L@+KA@28I@@:G>FL'@8*N;K(> @318 ttgttcggcgtgacaacgtggaaaccttcgcgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggttcagcagatgatattc + 00C23M,&E&&B)-AIJ*6EE.N=03613*6((MCE@2B(@F7KJALE3JKM2H5(.K*I4,H,6(:(&N2L @319 ccaggcagtggcggatcaatatgccgacttcctgcgcgaaggtttccacgttgtcacgccgaacaaggccaacacctcgtcg + 0K5H6J?-95J1H0:BC4<.7>6J1'NA,)MC5B+9+49GJ+MN:G;F7F:K1E;J(?8L5MMC:(8*B0?48EJ' @320 tatgccgacttcctgcgcgaagtttttccacgttgtcacgccgaacaaaaaggccaacacctcgtcgat + 000F922=>G>+'I(&D=>=5'2'09)H@I,BG;9>6/EF/C,:56GM-5(1.)AK@+555'*L&.@A&(F5D,*9FN @327 aaggccaacacctcgtcgatggattactaccatcagttgcgttatgcggcggaaaaatcgcggcgtaaattcctctatgac + 0B+>C)3E7&.K3J=-)3L*:./6H,=>2KL?6A07L(.90?&33(N5:1LN'8L>.MFL'ANDLHHBB&,4)':,3L:8MG9/80<-H39L3BIILDC?HL8>L*;J./G.9M);?8K28+3GN:&86FKE>D=@CN;NF//)*31J;(/*K @330 tccagccccaacgttggtgtcatagaggaatttacgccgcgatttttccgccgcataacgcaactgatggtagtaatccatcgacgagg + 00(D/=FAA*G/33;G><185L0,AA)F7BM@4G-?-IMGL?7<@A3&3KF&)A6,GC2?*;D5487L'JL.7'M45G0E'475(219> @331 gtcacgccgaacaaaaaggccaacacctcgtcgatggattactaccatcagttgcgttatgcggcggaaaaatcgcggcgtaaattcctctatgacaccaacgttggggctggat + 0/,-+B+)BFI;?L;H/.'54>,))-C2'3;(*)3)/,;-.-K26,K7+30CN,+0M=/@B1E>H?(/((NMJ)H6&,BD59,)=<;M22K4,J99(7I22DM'N)+FJ,EK2C- @332 ataaccggtaatccagcccccaacgttggtgtcatagaggaatttacgccgcgatttttccgccgcataacgcaactgatggtagtaatcc + 00))A'4G@091GL3A=K(@8L428=7:-?*C1+E-96.6D@;02-??NK/N7+N1???JC)MM&K400A,1J0-*I(C7G?F+/).0K08=4/-AJB4:=4K'(5,G='?8HN92+,(+B)(B1AKI>=9;;CBEEEE.H7+1C8&576=DH/-J)763>8ML1L5+(?*+4EG0?:CJGN:@50):('/(:028IG57M @338 aaccagaaagaatgccggagaacttcatcaattcatcacctgcattgagcagattttgcaggttctcaataaccggtaatcca + NG/BH9-AAFB@,E@'3E908.&:'/NM'KLH12'K?:*/;-7:A:KA=D494:>DC>*18.K;DAB@K'LH66'<.7B8?LN>09&(FB1;@27&AN*'<'7&;:2L898853::7>HCGN&+I4?+92?(@J17K@4G.L):6 @341 aacctgcaaaatctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttagacgaag + 000M8KAM-LKDEB697+)-NJ9.@>/2MG6,D:1LB;<*?JJ&&)2B89)NEJ.DCI(&<,IN)F?0,&.'B,6E8I<;JE,,H@57*=N'7I=4A @343 aaaaaatctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgcttttcttatatcttcggcaagttagacgaaggcatg + 000F8:+G4;'N054J?&G.>':12@6231-75J86N99G @344 tctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttcgacgaaggcatgagttctc + 0CHA87M&MN?L0.?+'2GL/+++E)LH,4.C68D:7F=7J6?1/F2I.@H&)&-:.,&317G5-MLC/3BMG=HC469.+.6)>.F/H=BF259I.+LF'5/6@8B2>L4441AN4-()AD(E0>*0C2344A6*6:DL*3N,)&.774L(E,6CE-D(&B(C6NIM29DB/A8M:ME49GK.64HEJ @352 tcatctcgcgggtccggttcggtataaccccccattcccgcgccagcgtggtcgcctcggagaaactcatgccttcgtctaacttgccgaagatataagaa + 00I88:5('DG1G@D'/);:1;-A>I.J:'D30BA73+;@F137=8J07?2:H@M,E>4)HNAHJGE3?,)L45*N,BFA(-9JC&=<(-DG/M8>>I6'? @353 gacgaaggcatgagtttctccaggcgaccacgctggcgcgggaaatgggttataccgaaccggacccgcgagatgatctttctggtatggatgtg + 000*26+>(/G0843C71'F?2IC6*M1CKGK)L/(;H@>0L1?2;C(7,B.3C0H>47>MK:0@CGL0,:+D3A5,-KL1I>@-;<0,4C@(-L @355 gcgccacatccataccagaaaaagatcatctcgcgggtccggttcggtataacccatttcccgcgccagcgtggtcgcctcggagaaactc + 0000-)-D*<1J(1A*JDLH?-6M*9*9H0J.&?-9DK/EKF09N<.:DA.L)6,9C;IDH&-?(-:KB;5(/0&;*9A:JA>C2LD4H1' @362 caggttcaatttcaatatccgccagctccagttcacgtcccgtttcacgagcgagaatcaatagttttacgcgccacatccataccagaaagatcatctcgcgggtccggttcg + 000-?/?2.?(/48,@5F5F<;'I=9J7A6?2C,9,JGIN;CA8I3JL---IB'L45I(3B @363 taaactctgcgggcagcacaggttcaatttcaatatccgccagctccagttcacgtcccgtttcacg + 0HNE7HJ7A865'-9.E/N57A4=HHII&IB2;2B:K<&/':.(BKL6F&/3C2FJKF1&;//48J? @366 cgccacgcgcgcggcaaagagatcgtcgagttgtgacagattcgccataagcggcaacatcaccctcggcg + 9;,*HFG+)'-4=&I/(&+,F93K1F69&21CL:>B7L5B4-CGC2K(EHB8G>0+N-N=C+E=:G=L.:G @367 gtgatgttgccgcttttatggcgaatctgtcacaactcgacatctctttgccgcgccgtggcgaaggcccgtgatgaaggaa + 000F:G@43?K*3.E<>-62N:)=<(K37G>B10@C+*G03AG>8)?3CI89A<A8=>68/ @368 gttaacgccgagggtgatgttgccgctttttttatggcgaatctgtcacaactcgacgatctctttgccgcgcgcgtggcgaaggcccgtgatgaaggaaaagttttgcgct + 000G@&?2*MI;G+,H5'F,'(2>791F'@3,:K4&9=G85G/FM=9).(48@BK(857,1G??N7DJ&L>E+<(A5LGC7+);;8+>)7MD6>E2M.0&7H'@4< @369 gtcacaactcgacgatctctttgccgcgcgcgtggcgaaggcccgtgatgaaggaaaagttttgcgctatgttgg + 000F/6LM1;2:*0IK'J()HF3.8.4-9K<4@FA7*25G)C;?7;B3H*:&@B?K<= @371 atcttcatcaatattgccaacatagcgcaaaacttttccttcatcacgggccttcgccacgcgcgcggcaa + 0-DME>MB8>/M=03M<*K)0:M:5L9=7>BH85'*N+G>/HN0(>:720;5B)7>-?=?C)6>CM&,K1J @375 ccgtgatgaaggaaaagttttgcgctatgttggcaatattgatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgt + 0-34)/7<.+14;E8B;)I @376 tgatgaaggaaaagttttgcgctatgttggcaatattgatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgttc + 7+@5EJ:6,G:E5;FFAKDL&4HB'><)E*;BL*CL-H=8D+*BG'C5LH)*/'D+6+E?E&MNI2D><*9;57<2/476J?@+C(4 @378 catttttcactttgaacagcggatcattaccatccacttcggcaatcttcacgcggcagacgccatcttcatcaatattgccaac + 00DCDD7+>8ILFJ)@&J5@.LJ/918(?4G'7G*=.8H(1A-I2-@G;--+)>KF'IC-&M,D83='?HM=B>83L;LGFJM,: @379 gatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgttcaagtgaaatggcgaaaacgccctggccttctatag + KL.)M0-BLBJ:+8HJ<8?G9&GH&6?ID>K1CA=8=/MDC14/==,9<) @383 atccgcgcagtaccaacggcagcggctgataatagtggctatagaaggccaggcgttttcgccatttttcactttgaacagcggatc + I(&D<=H4@I7;I4HJ(&*GC36='8643N?):NM-,3.('=G.<-B.JIF/)-4;+K;72<44>*)D<@)DG98MD=&GF9??K3I2E5-6/C@G4?<(E(D6&E @386 aacgtcattgcccgcaccatatccgcgcagtaccaacggcagcggctgataatagtggctatagaaggccagggcgt + EE)?9N:F(K+F8:,6@-FLB030A6;LN30*I?.M0;49J&B<,,+K>'>AKKH(:7-;=/8G6)N:.*;*3C,629NKGBAA;(*;:J< @389 atagccactattatcagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctg + 0000-;(G/(AI))FNNN;-M.38=((C>*-G1C,7A:-HC5@.60(.:43A-3@GC'E44''>42&-M=6C:K+C>NHI@:?8 @391 actattatcagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctg + 00JI-0318GFGDGD6@G'MF=?/M3*K@,B?.*F6.2H44D5D04KK7.=6F:AHFE)7L2F6(I+1;CB52@LF)'N3*F? @392 acgtagcagatcagcaagacaccggcagctgtaacgtcattgcccgcaccatatccgcgcagtaccaacggcagcggc + 26@1;L<.C63JBC?-<'&J*(;):B1:/MEKAD+J'H&>')0D:65+05D@0+C34;0D6>CG>I?M0H1)EG&L3I @393 cagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctgctacgtaccctct + 0'.*;)E'&>CN*<->,:C>L7GL(:E;@/E7DF1M(-?F11L@)JEA>AJIM*D-*:8/:M)9&LMCKD/@,:6/E26@.( @397 cgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctgctacgtaccctctcatggaagttaggagtctgacatggttaa + 000M)G+7HK0?2DA+G/=B(=9C7@9'6ALMF):&9'9><0AI5M/-K? @405 gcaccatcaacaggtgtcaccgccgccgagcacatcaacccgacgctcatattggcactggaagccggggcataaactttaaccatgtcagactcctaac + -+7G(>JI9+JN=C/=.+9.:= @406 caatgcaccatcaacaggtgtcaccgccgccccccgagcacatcaaacccgacgctcatattggcactggaagccggggcataaactttaac + 000000N00/6-8:BI703(,II+.GN'EE6=L+K/2;>8),4+=;BNI.D8438J?K&B/D,L@((5<8J55*E:(A3/D6H6/'KC2I24 @410 gttgatgtgctcggggcggcggtgacacctgttgatggtgcattgctcggagatgtagtcacggttgaggcggc + -M?,<00)N4NB/+<(N):@(N=&J70)8'&BE/)76?8>*4>F<,>FHC:&6G>K/A)5LEF388IMJID2', @411 tgaatgtctctgccgcctcaaccgtgactacatctaaaagcaatgcaccatcaacaggtgtcaccgccgccccgagc + 0D*;E.5??='*?F/61()JJ4A)>ILL8M>5/?4=C?L5'4>:/*&.=5+'I8=MK;*9@/E(,9.=/KDF< @413 aggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatcaacaggtgtca + CE.?+L00>)4897JM'0II.5FE61I76*1NDDF9AA39GDB,G)84K52+E4=D,'G@I2CIM*+,=()K==,:L(<@4GKA8GFNA7?6@L<9D=/ @415 cctgttgatggtgcattgctcggagatgtagtcacggttgaggcggcagagacattcactctcaacaacctcggacgctt + (;G5<107,F078J8H7D'61*C?-L63H9=M8:9N6;JD+;ELK-.)*3D&,&D30627NA<>L'DE/(L;',>:&K*/,;E-& @417 cgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatc + D()C0:AG;.GKM;?K>@,.-@?1<2:=KC*N>8LL?./HN-M;&L34L34B.04)&H*F+F0 @418 tgcattgctcggagatgtagtcacggttgacgcggcagagacattcagtctcaacaacctcggacgctttgccgat + (EADDA@KE'::2J,,,-,J;:J)88EJD;CA6C)JF.+B:D3M*?C*B>:ID:AGD5 @419 tatcggcaaagcgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatcaacaggtgtcaccgccgccccgagcac + 02KE';3@29EB3;G5/NGN4*JG,E/K0L56.BH'4L8K9A4,8LK?&+D-7CMB30L)8))N.17N:IJ&AA*6M>:076ECJG,L9&D&)M1@L??(4:57+C*3,><9/6&(0)M>1NB;IA4D0F5?+B:@,B9/AM:CN)0J=3+E>LC,'E&B)K'N/658:4/II,&05/22@'554+L&).FD9-:<&+/+@;&.=H:C9KBJ4.8@7G.)6 @424 tctgacggcagcttatcggcaaagcgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccg + 16=E=JI&&:;9I:>MKI=;,8?*+G-96A;;17@4G?C:+:/E6/HJKICDI@:H=5N4NB?>H+/J5?M6;>===AI,= @425 acctgttgatggtgcattgctcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaa + 09BCJMF0D609&=GCB0D1F(.;-AGAH);;742KJ(6I-0.AFF>;IBFI2'; @426 tcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaa + 6IE4EJ';/F5.<6A(B.BL8613)3'CBD,:I6=7?/72;3AN&+23B8524+'(J'&9E3K3C1GHBL&'02(/9ECD>/5+(*3=HHF/?)& @432 tcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaaccacgggaaatatcgttatcagtg + 00:2'.)(>@:A.E'I:C=?:,J@:2,GC4.=G930>*0N&5<)JM@5K-)0.>B+L9/J)/CKK68C7@I(D'H/A<56/IND7?'DMHIN@AJ1&<1/?(/8-4& @439 gacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaaccacgggaaaatatcgtttatcagtgctgggagcgtttttgccaggaactgg + 0000:;(A;&)/HD62;)?AD&1)+2=JJA,06KF++1:(J+1BJ-*B5;<83&7/?/+B)NB88<+&LMD.&80B,:FGNF*B0*'IJ':K>+8MI<71BE-0 @441 ttccagggtcatcgccactggaattttgcttacccagttcctggcaaaaacgctcccagcactgataa + 0+=1=>ENA5:&5BJ-C9'AM(7<1(;1HJK18=8))-EN9+JJL&2;9A54(A2I48N8NC.JFJ)055NCD(+0GA9&.3HJB(@A34 @446 gccatcagcgccgcgaccaccgaacaggcactggagcctaagccccgaaccgatcggcatattcttttccagggtcatc + 000B4BE62..C@8C8CD':1N3K1AK6;A)E(54?FE?(7J77=89-0NK>B;HG?FEE0N>IAKH86NEDC23(7<, @448 tcatcgccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccgatcggcatattctttc + 00A/I<1?NIJC=.BCBL;C@95:=L*7'*9J6)6+=+J=.LMI?B*)?L)7FA.5+*(>E0@+837*G4,4 @449 cagtgttcattcatcgccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccg + :>-752F,6IAD*E+B7KN-KF)(?,@)L&>CD/*1?(CF&.9(D&/=34:D?,8/3L**+1E56. @450 atgccgatcggttcgggcttaggctccagtgcctgttcggtggtcgcggcgctgatggcgatgaatgaacactgcggcaagccgc + @C/CMMN=B:7,D9JJJJ.NDE(=LGI8D10.85ABI4=GF)?J(G8N&.N@H58J@?JMN;7K<*MM64>?M/3643,H?:-+E8?5&>.2H;249B4A2A8G<81?C*J?+N;8>C)2((-,;2F,7'/4+3-1,N/.JK0/7B.2(&J/-H9D*GF'+H,6CH'D1A+D&<(50:0:+,J>.A3.,<;.+3@2JIJJL&I*)0'2>*:K3HHL9;9,GB.-A-;AC'+139I/D5

    0HK=1-BA5M)I>'/+-'<2+3@9@N @460 gacactcgtttgctggctttgatgggcgagctggaaggccgtatctccgcagcattcattacgacaacgtggca + F/7D44J/0+88=3E2;K2IN&I,'F22=1:B(@JM9/L)K<:GNI<7F== @461 acggtgccacgttgtcgtaatgaatgctgccggagatacggccttccagctcgcccatcaaagccagcaaacgagtgtcattaagcggcttgccgcagtgttcattcatcgc + 000000;GI(CM-9>':JK5NE5A..=0'I+?>7AJ>I'..H)/<2/M44(@,-<2=+F2/8A?5'M;BI5I'-&E:./7&ELAKGEB*01 @463 gatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgtttctcgg + M>:9-EJ-;8-;H@KH+-4JH:71KI8.==6NJLKF.<+5/550.*LH')NNEB+@4GL9L/&:8C=9 @464 gatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgc + 005/6)HH;25-2A*.I*?M&FN&FF=4FB4?(G/8'53+=?DJA*;I*+MB88&KF?L:?6/:E(*24I?) @466 tttgctggctttgatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatc + 00D4BA4;'C2I&9&6+N:<4E5*3;AI+L&-JLE)5N(6&&5>@56+8E0K>E?1<*F1-;4@2/9/<)/:-+M)-0B6-C4M3,/36=I1?3B=>+M;MG8.?@IC/AK7GA3H/882<,IN(0*'BA.0@:,0?8<,I@@@5GB @468 gaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatc + ,I9,N/=HDIAE?E'5J:+-<)6I&*@;0<(64D*N9N2-88.82)-:26H41M9&M3H=+=9C88)K8(A9FA: @469 tcttcgatcatcaactgcataccaccgagaaaacacggtgccacgttgtcgtaatgaatgctgccggagatacggccttccagct + 2;/7/H2LI,@=I0F4?)H'?=+6DIIFM*;-=3.*7+F6-(I&208M/*8E/3E/( @471 ggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatcgaagaaacgacatcatcagcc + ;7/C*014+A077F,7FN0MH(.L==F5I4?:>)C(('91K??:-M1 @472 gcacttgctggctgatgatgtcgttttttcttcgatcatcaactgcataccaccgagaaaacacggtgccacgttgtcgtaatgaatgctgccggagatacggcct + 00-'D51D321KIMJ9(C(3)0>E<'/9M(=?8)4G+0;=@F<+DNG;(*;+?3@?<,?MEN?,:J1+L(E8B==6D1FM4;:MA?D3AG.C(((N?M96I'1&K62M @476 ttaatccccggatacgccagcacccacagccactcatcaaaccctggcacttgctggctgatgatgtcgt + *;08G&-M05KH)EMK0H/F5:'&-IAM8:/*3FH1N@6E=<&J,'?CFC'.&*FK@3E+@MD&:1*D7- @477 tatgcagttgatgatcgaagaaaacgacatcatcagccagcaagtgccagggtttgatgagtggctgtgggtgctggcgtatccggggattaaagtctc + 0H;(K51G('3C.4JA.-5)((')?8K0>8>M-13;67N:?M(3E:JHE.'*/C(;F1HK13=+KC5*2 @479 aatagcccctggcttctgccgtcgagactttaatccccggatacgccagcacccacagccactcatcaaaacc + 000>4GLL@*'&DJ8))CF@5AI/A,=>?AD-/1H<=@>A6CE;7KN67IⅅLJI(19GL,+()2@GB/(; @485 gccagggtttgatgagtggctgtgggtgctggcgtatccggggattaaagtctcgacggcagaagccaggctattttaccggcgcagtatcgccgccaggattgcattg + 000;+IH<<(GEH6C&'.2&-K5?.=GN?,20&(GC46H>>??=<.G-LN70*J?I8:M)9K9JMNECN-64.89&B @487 aagtctcgacggcagaagccagggctattttttaccggcgcagtatcgccgccaggattgcattgcgcacgg + 00M=/KA;DLN<'=5>-=;.D7+C+L-E0A0,57)+GINN61,G9C@)<&F?&)INLEI@)KI)=M57L7I= @494 ccgccaggattgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgag + 00+4NA>EB>)M4ED=//J:7F=5F.++@FE;&;JN6)?0-B2GJ)6G/9IE&LK9CJ<=N&&@LJ95F.*7M @495 gcagaagccagggctattttaccggcgcagtatcgccgccaggattgcattgcgcacggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagc + 0*5LIK.B26>0L+)2&>4/.A?864:)B1F'E,12)J(+I6BK?M6.A889+G(::=()MAIB5K70//5:)3095D@DH4IIFJ(L'L:'MFH*3IHEL8NC&0E.?@8BN>D;5<+89>N=6=II10C( @498 attgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatg + 0000D'1='0.G8(,N)H/5:,:8;.<1;:KFK5)6JME;0)?FE+(5D<;1L'I01?E+<=N;L,/7L;17I.INEJ8;?,E @499 ttttttaccggcgcagtatcgccgccaggattgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattccccccgtcagcctgagcttgccgcgaagctgatgaa + 000000F92/J:2<:H+&BL&/I*?L28K2*EJ9F-GKE:HE))7:M4M@6;1+MC:<2A9G()78AMC5B26H7JC,396&L2MN5,B@MC4,JA,FJ@HH8*H+K8+&*1<02.5 @500 acggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaac + I,4BF,8&)D(:H>5.73(0*6B81<2A?I;;L1F;,:8IK:H@D976@M>7GCI)M,.''ML?*;CJ4-7+*J/NK4&GC(-NAE?5K @501 caggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacc + 0:?;DH,&A);B)51H+L0(H7&@)=NKK?A?CH7IJBA//./IJ7B,9N2A>JI**B>56A?3-E&B>J64*>AM @502 ttccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacgg + 009G>7BD9-?CE??)&C*>KCF6+@L/J8>A;9'I<-5)*6?6H,F.(B0I4M&4//+K5J,/4; @503 aaccgttcacggtagggggttcagcgataacatctttcatcagcttcgcggcaagctcaggctgacgggaatagcaggc + 000059*90,N&525=4C,GG2+8H8I; @508 gccggaagcctggcagtaaccgttcacggtagggggttcagcgataacatctttcatcagcttcgcggcaagctc + 00,13@83646HB?6=4M(>8EK6:+2M5E)H(I+->N=1.87HN7I>91D&,)2;+7G-+AKCKN8.F67A;F- @509 tcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcagg + 0009BF4&4/B(<&L+482LKAK1H40@72I.>M-G31,(53?C'?G82A)LLI/GB+*4CC1L;88B:'L)+@=8CJ1G7>+ @510 tattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggc + )G=CK;N0+GG'.4L*G6M*>7EKDHB+()N:N8H)&G(MDI:-/),,3:.F9175:8=JGJF'?CD&'3MH&0L*C>0D6MN23E5')E9& @512 cgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcg + 0000G'';'B4IF>DMI6;FJHFH9NI>F(N-I.2.G=@?/7I?JAC7+GA;3'),9LEF?&CM;(@(8G6=I'63E;2,HJD,F8CCC44G3;. @513 tcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcg + 0.'7J6,H@C22HGB>M.(?*64@643&81@C,=->N+(7/(3K-@+FLNG,?E/J---GD6=*.>.&9'/AJN1&6N@(&F@JJBEJC67+F @514 ccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtaggttcagcgataacatctttcatcagcttcgcggcaagctcaggc + 00).I04?EK;)B)/62:/<0F/.:/:K1+888+7=/59DCHN'N:E,KA=@/L/;G*//E6?;NINL*,* @515 gaaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcggt + 000&=K.@)>:J>83G'3(/4:4JH8@7,-N5@//K;)//C&>7D@N:7L=.M*M*=D)2K/=@7( @517 ttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggttcagcgataacatct + .;G3C3-ELJ(E4)@1&4&,<,JM5JLAL-91?-(H@LA @519 gcgccgatttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggtccagcgataac + 0000(30DNE&&-A+9C4G>@I026)JAM0=ID,;L@?;I149L6/;?,8:.':GA+'B@(2L);3A.B?+E81K@,2.@;?>C5E5;9*'>K7M6562*AI&9C?G @523 gttactgccaggcttccggcaggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttg + 000I>)+E-,73G@,8:,&J:F32>,M=BK+,J/G7F+FADHF&N;7GCB0*&A49D)A2K*83NMC;M,4@.67?NN/5)(B @524 gagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttca + *KGBF=M78LN86MGA2KG2L3K:,259M9+B.HI8DD+?GC0H@J4;&NN0E2B9C)J(8KCC*&/>:I:)36-6M<@BA:*/@7&-&62,M>E.L38BM @525 aggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttgttcgctctgtgtgacaagc + 0K>*K?65**&=<-A.3NB6>K&FE2.>8J&865,D22I??L/;A@(.LJ&<0C9<7**M,/A4,@I>CH;BFM/94+K':.C:BH< @526 gaacggttactgccaggcttccggcaggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggccgaccttgttcgctctgtgtgacaagccgg + MN@B@JGKMN'/CGKL:288B*A,1?)?*)'.4I7CB@A014@097<@8?0L3G(J9J?/CJM+*9=N>7HN=<&J?'J3'KH@)=F>(318>D2CM7 @529 ctgggcggtttccggcttgtcacacagagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcgaccgcctgccgcgcctgccggaagcctg + 009H69>L9@@A?2B11AD'9>K-L9466DG0<)BA(6?-0+8HJ=L7=A54IN?L+J/B(/1B0)>J@KEKD(@0J0=K*'+'7J>3/H@=/5(*/&;8GE0149)I23A-D @530 atctccggctccggcccgaccttgttcgctctgtgtgacaagccggaaccgcccagcgcgttgccgactggttgg + 0.'N3.159A)IM3,ED'.JNJ(47087<4.23M+&@,':.&0G4-F&FKE026G* @531 ccggctccggcccgaccttgttcgctctgtgtgacaagccggaaccgcccagcgcgttgccgactggttgg + *(=1BNE1;7JJJ-+:GH:)G,K>1>GC1,DA:BD(DE(/A:MN.:IL/?7AA)//?MI@E>K7NNJD;2: @532 cttacccaaccagtcggcaacgcgctgggcggtttccggcttgtcacacagagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcg + >FM2)*)+H+@;A1265=02HN0;/J?9;42(03;E(0/B/DE@*MD5(C'L&0D9;3,-IA4-C6&L9HE?(DB)83/7KGM7H>C'IN'7N@6@,-<(9:65A @534 tcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctgggcggtttccggcttgtcacacaga + 0&)IH*;-44?:,(:L.CB+131('0J)&*A@BA8*:''CK-F;&>>@)A'B:5+':*L7)0=G*:JMG&A9 @537 acaaccttcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctggcggttttccggcttgtcacacagagcgaacaaggtcgggccggagccggagat + 000L?GN7:3+G:23G=4;C=EL=,B9B+&<+&L/@71=+*JF-9>-&=HH@71*80)7J-275F1-(=,K=<)6,'9'EM@@KF?,;-,AAI0GFKB?;6B::3,L& @543 tccagtactcgtgcgcccgccgtatccagccggcaaatatgaacaaaaaccttcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctggcggtttccggctt + 00000G(?/BM6I?(3L@*/CK-L15<)GJ;18NF-93K322;9>'43I8D+(&>AK2@LI'N(018*(9B/2B70=5C0572A043B>*G @545 atatttgccggctggatacggcgggcgcacgagtactggaaaactaaatgaaactctacaatctgaaagatcacaac + 0>8*0H9K1@?,?'*LH>BC'85'D7C;&F5E@GE(&?(892B&L@*D&G6JCH*;HK7?K4J-5,?2DKE46C/492'B&,D0LA..;70 @568 gccgagaggatcttcgcactgcgggtgacaaaatccagcttcagcatctcatcaatttcagtcaggctgaattccggcaggtcgtgcggaaaaaaaacagcccctgatttttgc + 00000008B>?&N462C1A8?M*@/05=J@)L+'H'C--LC(96I&5--6-//I6-=9/:)+J:@ @574 attgatgagatgctgaagctggattttgtcacccgcagtgcgaagatcctctcggcgttttttattggtgatgaaatcccac + 000244B-G>.J)66J572:'J?@M0CFKH6*KNG0=G@J1>CL?+N<+(MK(:<7=,0H:)4G43B;'8@05>FKF2/('B @579 cgccgcgcgcacgcgctcttccaggattttcctgtgggatttcatcaccaataaacgccgagaggatcttcgcactgcgggtg + 000BF1M1LDJ&<&E(61G/&EKKJ.H&'&?6+034A:EK>1*68&==D'>:,-FNI,7/2M-(2=L8,,(A8:;@/4F80:, @580 aggcaaacgccgcgcgcacgcgctcttccaggatttcctgtggattttttcatcaccaataaacgccgagaggatcttcgcactgcgggtgacaaaatcc + 000000F087'8F'L))8(9E7CEM)&GCD'G9LM+?889)'&3?-/M<3F9M,*0N3BH?*.2F?(5H');J0;3:A;41N* @585 ttcaacattggcgaccggagccgggaaggcaaacgccgcgcgcacgcgctcttccaggatttcct + 4B'JJG@F<4)*,.3<3/'H(G)??HN*:NA5;85GC)NL55?EK?<);0?G>2-;MHL5MCD4; @586 accgacatcgcttttcaacattggcgaccggagccgggaaggcaaacgccgcgcgcacgcgctcttccaggatttcctgtg + 000/HAK45(2K.B/@<(F:0M51IIIJ'=B719F6KN0I'D4J(3K&M&61K+::+.+(+A)N&3DC<4;,+=+4C))=K8=A'3.I @595 cgccgaaatctttaaatgccagcgttggcccgtggaacaattccagacaaccgacatcgctttcaacattggcgaccggagccg + 073)029H2GCNG41/DK5F6G7M+6ENN7BI31+6+@4B<<*K*-IHA;(:9D=E'IJM*7HNA:9AKJJ',+6K76:3?=8, @597 ttcccggctccggtcgccaatgttgaaagcgatgtcggttgtctggaattgttccacggggggccaacgctggcatttaagatttcggcggtcgctttatggcacaaa + 00-4&)3K/=>(5;J970N'42M-,&I--/AJ+NF;=N>B8(L1D6))BK)E0DI'@147JAHE3.2)@3MED80;8CA@2.I9A7.;<1@>>I=FE @599 tcagcatttttgtgccataaagcgaccgccgaaatctttaaatgccagcgttggcccgtggaacaattccagacaacc + 000HD::C*JIG&@3JGE0'KEBFNI0@.5:6)/(L;?)==IN&A=/>6B9;70:NM2*G003J-/E(:8;-C,<8+L @600 tgttccacgggccaacgctggcatttaaagatttcggcggtcgctttatggcacaaatgctgaccca + 00&?G/KFED9-H69=3'1.5>9+HCF*D.@.37H'EB2C27A&F95&2(LC7G6JN(51BB,:@N?AA'@2H;I @620 aaaaaccgtagaaagcatgagccactgccgctccggtatcaccggaggtcgcggtcagaatggtcactggcttatcacc + 00(G,LB?09*=B2;0I'6I:9J1>C&I=3&+29/-;8+.@C*7=G>*3CH8-0.50*E>9 @621 agtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtta + F585):=+&LK(2&B'&7*&>&+LG<4B(?064L9H9@?NC64-?8AJ/* @622 ggtgataagccagtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaa + 000D6N=+MLCA,8C6*@C<)G6C10A+/><7H*?@-:NFD;79HCC@G7DC=J=*==C=<&5-ADAN:,@8:CHNMK1HM1-+9;9B:9)I8M'>6NF>/>76D*;)EF?0?L.402 @625 aagccagtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggttaccgaatgtgaaagtggt + 0000J/K97G4=;HD*N@J5:D77C13@&A'8/*:<;.D?1)>IC5)A)>?;7@BB.3GHD3G9:IL=D8536CE0D/(1 @627 tgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaatgtgaaagtggttatcctctatccacgaggcaaaaaatc + 0008:L07J+//;KAM&7N1(3D(&9+HA5'7L6E/.6G4)?L8//,-5L7N8'7N*KA>7)8EL?C';E7H07./:8863EA>&5CJD&<5;K8&G?,3&D8/(B<'BIF=N?L/H*-/(K0E6AF:M?0@ @635 tacggtttaccgaatgtgaaagtggttatcctctatccacgaggcaaaatcagtccactgcaagaaaaactgttctgtacattggcggca + 00H/N8K&2.KM?B8K0MF@55F)H914DM,4MME>E*6M)'<3'J,AMHBMB';@,KD*E*@FD(+DCE78*=?D4,*86588AM6M51 @639 gcaatcagtccactgcaagaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatt + 7NF3C,);'(8+*8>N<)?'4=MDMN @642 ccactgcaagaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatttcgatgcct + 00;H=)->D-F(IN5J-6N)-+@*25KB8M>3(.,;6(>E+A/)/N9)'*L0ED&*4B0/C8(&)-42DJ+@;ALM @646 aaaaaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatttcgatgcctgtcaggcgctggtgaagc + 0000ILN23K'II,EG586K*>9NJ00GM:@2B(10=74:6,MI/N&>/L)H?,1EG?C5/E,2AH::3==6.:GCE&/MA//)2)(//H6'M;>BC49 @656 gccagcaacggctgatgttaatcgagttagccgagtttaaccctagcgccactttcagttcttcatcatcaaacgcctgctt + 000A(CL'7D(=>N&9).??2J8F81AD0N3,BG.7M>H3-'&@,9FK&&:@<=BDC:NK:6KM66;33?5MIJ-HE6?=:MC3<.&70,H0(H56N@/B4GH @667 tgttgcgcagctgccgcaggagacgcgcaaccagctggttgtctcggtgccaagcggaaacttcggcgattgacggcgggtctgctggcgaagtca + FK,F8EL@4(F2M91>NE->B/A/I=CD777+'4D'(,4FME;J=''64:D23>;K*J'H-H-9'.BMAI8/6I-I) @668 gcgcaaccagctggttgtctcggtgccaagcggaaacttcggcgattgacggcgggtctgctggcgaagtcact + 00.31N9/)B1012LB:K6:K+C@<6LI,?FJ3J+3:(65(9EMC>35A.-02..M-/G?48:M:8L*0B-F+( @671 tcggtgccaagcggaaacttcggcgattgacggcgggtctgctggcgaagtcactcggtctgccggtgaaacgttttattgctgcgaccaa + 000<.N:FN*7E<9(C;0JAE>(I2D=*J9?KMG&MM-?7-&(GH,JF71=,=6IE&;'B-DBCCDADL:K1CLAD>&+IAI&D'2=B@'/ @673 tttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacgttggtcgcagcaataaaacgtttcaccggcagaccgagtgacttcgccagcagacccgcc + 0000D6(+*6-)):=166@/&&'55<+-;&DJ@AC&3FCNF27K671DLEFFFE7I@BG)>:1IL1)8,,9IMGI';I@+N?E@I3G2(4LCK>&98JL:CD' @674 gagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacgttggtcgcagcaataaacg + 00B:C@9CAB=B(&4>F*)GB-JA-='&8<0<4=GE0-(DE:3B@+EDDLIF/;@JJ('ME.F*(84CK)=1A(&-JK @678 tccatcgcgttggataacgtcgcctgagtcgcttggtgaccactgaccgtcgtgcaggaaacgtg + 0?-*(?-,.'AF3:1:0I';.D7+(02N-DA/,8/5I)&,B-@72.*B:.C19,L+JH0:=2>'/ @679 cgtccatcgcgttggataacgtcgcctgagtcgctttttggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacg + 00B1>2+08HL)LB<>+83M(NNH9?H)6090A<77=IG0DKNJ.:'J)357D>+F'H4&.2:?4>'-(6L;=+2LB+57:JB@:-7(FHB @681 ttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttttttgggtgaccactgaccgtcgtgcaggaaacgtggca + 0000:7:<'=H*/:/<&D5D92;E*3*4E?51?0K9E.50>D=M1.GJ3D*.-A84E--H@7A2H*/9G+61KH1'F//(E+&K<2KM @682 gttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttttggggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgtt + 0000&0A3+4G:*3+.4M+BI:0I9&:/>>J,1='EAD:24B'C5+,:1)89=ML=C-&H&(GG*=A4*?3;4KL<0=F2'L3F'LI./J,0.H:I48579 @683 ccgtgccacgtttcctgcacgacggtcagtggtcaccaaagcgactcaggcgacgttatccaacgcgatggacgtgagtcagccgaacaactggccg + *EG85/5G;+?0N8N=)1L9E472N.ILF>/@G:H-<;:*GH5;F96B9)'*3E65-B7HGK3BH)98N'=I2FM/<)G4>EA7+@LI=*.6/30:: @684 cacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcg + 007-8)KG?1:>N2HG?KJ5?>1BK0137;L'H:J7KD1JI/:L'3@G1';AM8NDI-B-;>H?G86(;9.-C*,M8*4>3?76,&@BEC;C&J?E9&-K1DEMEB @685 cacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttttgggtgaccactgaccgtcgtgcaggaaacgtgg + 0D9N2C5EG*1>6JBH1?0B(.N(0;LLJ&=0E5E=.+E'LL:&;2M?GIK(3)+A'>2M8'<*,9=6)H.?&NC-E:&B7A/NAAB66A4@:CC368 @686 cacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatc + 0000,BI4C;6C*D..L9+,&+&@:=32IG:>-9JB4GL+NI@G))@*J56E5::=+&'9B8:MM.?AANAAH>83@CA)GE596:M?7M6.-?@71>.AG-KE?.L? @687 gataccgtgccacgtttcctgcacgacggtcagtggtcaccccaaagcgactcaggcgacgttatccaacgcgatggacgtgagtcagccgaacaactggccgcgtgtggaa + 0G=IJDI'=DI/MI0)762*8:(/DN9C,&3K*;'9@*37;KJ8;&(K+B/39<&NI=27(C>,M4M4.E+8-NJ;*;A4J=D>>4N0K3,(,(4>DMK9.D8?;(G.&?3C @688 gcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgag + 0M6.41&KH/A*A/&C/B1,5-?=5G;IC:2''+2@B>F&3)JEFN;00K1&46D4E)C/IDG @689 gttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcg + 003*61(@174CI3JK9+2<>C0;?B&M<6A)9-BB-@4-G,D1((:.E,'B-4K,)6=3?EB(A6.@4'/C)(6I5-HF=C**HA>(/'<+/>4NB&/87'KD@+DC:H1?9;LHA@54LD6-K'I@*K5J+'KGF=*);9=)'GKG>@50J.7F2>-7',8@D?H,3< @693 cccagctcttcagttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcg + 00+:EF,'>K,H'LG.'&4(5.=B=1C/1GH&(<*6I=BK8-,88<';N:NJ14&JI;*M<33/* @694 ggctgcataacccagctctttcagttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgt + 00000.+J'M94D@FCK=@7;?A?H97'1D/.14-+8K/:5:NNFC,M>IM@=68NMK739@CE@3IFKMH185LI2M:.@H-&'M @696 cattgtctgttgcgtggttcatcatccacggctgcataacccagctctttcagttgccagattttgcggcgga + 003K*M+LID6'BH87J52-G6DFI4(<&-B>7)58MI45=>K/8;3C(3+@5 @697 tggccgcgtgtggaagagttgttccgccgcaaaatctggcaactgaaagagctggggggttatgcagccgtggatgatgaaaccacgcaacagacaatgcgt + 00000-6JGGB+15&(A58/41C7*&6.0L?;8K2K5,,1501'+1-99:8JD,@3FM,/B03A+N3AN/42+H>-:C;L)75'>3JAAI.F@0H::D;)8@+-2:**9<+MCG-;?K.(.+D @705 atctggcaactgaaagagctgggttatgcagccgtggatgatgaaaccacgcaacagacaatgcgtgagttaaaagaactggctacacttcggagccgcac + 0(50@?=7C&M+,6.2-LH7B>BD1NC?.I*3K4>NL<&A/6(M'(/5>8':I8C28.?=;H*4KH+:78A8?*9D':?0?A,2>J>L7<;D=0+7D.=24@JD8 @710 ggattcaactgatcacgcagcgcacgataagctacggcagcgtgcggctccgaagtgtagccccagttcttttaactcacgcattgtctgttgcgtggtttcat + 000'?@4ECE'9&3>?8?C)3)HJ0H.-.GK/*G(M6=.F5G>E7'1);)'1&E14-;?'9D69L*8G4=GH&+8E<=5/:34'B1G@0-+;2-*G=H&;H&.> @711 gcctggattcaactgatcacgcagcgcacgataagctacggcagcgtgcggctccgaagtgtagcccagttcttttaactcacgcattgtctgttgc + 0000I>1K/*E)M*3,4.E7D?29F:D055I.@7LH*D19&-.B;A&5086<&*:+&25I-H&/M9A1:H,<3GK,)*NL.0L6>CB,5/3<)*?G' @712 aactgggctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaat + +MA=307EN--&4?.J1A8NF''+.;DILL.&9E+KH4A+;E1M2L98+>+9,G&KB5D';,4>L7G26I&1 @714 ctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcacc + ::L4G)+K/5@IHFB7D+?+&&'0=J0:G(J;=D-,J1EL.B6NA*87:?J;MIEG:711D>;,6MF>'@)/6EC(42?0'C98?F=H;LA1?/B(?<--L<,EII'H:/H;J(5+2A9,J)F; @716 tcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgtt + &B.?MEMIDDF6/&046?M5'1,9:G14A9H;F*.C/=DACNI'27&>/?29:CH@G>..M<01-HMD7-67/2CM'=(I)CG(1L(C2FFH0G98@1?E&7CE.85.995H721L;>IIB-18,I2)AH6 @719 ctggctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatt + 00,,5*H9G(15@9L/*?E.'?FH37DI)>*@;1-@&)/(7-*L*E*33(@?M4NL@KHM(2&L7'5D6LJ4N<2DE37L9/L>;?3HJBD.DE/3/G'4HF;JH'=-: @724 gcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtgga + 0G;DN&CI)B73D)(E)>DNM6(E.)'I>B;3)B-MKJ<.:*H,*0D@/'/)LE;*38>G&.(=5F:F/KM4A.K+I:LF2L7 @725 cacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtggaagc + 0003&@;+:8/'@:E<2.GJ.+?CFI.M0E.3E?&D>GD::?&:'(85=,J1710CA67*3E=M9J0@D0'.@>GD4'*-;.CAMH8:)J/E+'+L.@J6.:H6HAN @728 ttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtggaagcgattctcggtgaaaacgttggatctgccaaaagagctggcagaa + 0000.9FBM*8*8B)58I;=.J?5A16.K@)*-N=I>'@HC96+.AJ)NC?K*/CC60,1G1):(N&18.;M''7JHC0/,1*1;2)E0/6D@4'0'+:=2N>B9:+G('1& @730 ggcgaaaattaaagagagcgtggaagcgattctcggtgaaacgttggatctgccaaaagagctggcagaacgtgctgatttttaccc + 000&K+@L:AK+G8<&5(:44(J:')L-8>&E(/394EN6-;N/F;;-1<.9,919&4HM(0?<:FA:H-*>3B5I*:J,:.G?13> @731 gttggatctgccaaaagagctggcagaacgtgctgatttacccttgctttttcacataatctgcccgc + 000000'?=CAHA-MIGKA3(*-14IJ,:LH+9.5;M<4H:K/ME'@@CJC-;CAD6AD6 @743 attgagataatgaatagattttactgatgattcatcatcaattacgcaacgcagcaaaatcggcggg + 00-0DN?GG'C:<>@H')+>''D89MML;K,,L;4.457>,HJ;7L?M67G>BN/BN:36*KJ+@HB @747 aatctattcattatctcaatcaggccgggggttgcttttttatgcagcccggcttttttatgaagaaattatggagaaaa + 00000<6:)LAM')E67&=4N'4,93JMFK&*55&7E-&&H?B+>@A,G/02:BG1I8DHALD.'&>+5'460LL(L7&; @755 tatccggagattactcgatgagaacggcggttgttattctccgcaatcctaatctctaagttaccgcattattgagaattctc + L2DB85E-9;,41'03=?+=>5)4@2=8D>GI5B7.M3D.'2=&60)4HI1.&LIH3*6N.4/N4'A,1,CN--)2DMH.4/. @756 tgcggtaacttagagattaggattgcggagaataacaaccgccgttctcatcgagtaatctccggatatcg + 8=3GA+MK'C./E/*<)I968-J,&CH89I+)&>'/H>@:EH&5*/>D101>8L-I;F.?8K'CN3G&?.4 @759 ctcctttatcattgccccgttatgggtcgatatccggagattactcgatgagaacggcggttgttattc + 05+KB?/I5'E94)@14CE=C)@)/.J*7J9F/@J9,*L:C++/52758*AN-.K*'L6*+4E9K4+B3G>2DL<:IJ8/=A97I><,&)G03L3,A:N>MBI8.K6@G&@:3J @131 gatcacatggtgctgatggcaggtttcaccgccggtaatgaaaaaggcgaactggtggtgcttggacgca + 00H-&*4BEH4J+=79L4KN69+F9G.(3>:)+5LM3( @137 ggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgcctttttcattaccggcggtgaaacctgccatca + I?7H+0F&510-4(<8C>);:E'C,4AHKAD*AD>GN3,*;A(9<=8:IM):ADKE@/'HE2;;;8+/?LG(D0*6?62(I>FE1H026N(8EE0=GH9?>FMA6LEJE,E:5<875=;4MG1>1=LFC?FF.EN/B'EBJ&+)3EE3*6BC7?M9::26;-5/D+I9;22D3NEJ'6'>,N,D,BKN:6784B>;IAB':;@-/6N:B,=J0+FG30)C6'CL.<'+K<: @142 gtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagca + 00L=)H.405GF+=C-:A2<)>/>E>D4BE&+B:AK27>09 @143 acgtccgtccaatctcgcaacaatcggcgcgtaaaaaacaggcagccagcaccgcagcagagtagtcggaaccg + 0009F7HI90:/GN2B&M59,*AM(0&60N&37>)F?3L=7EF7NMJ?N8N-.?2*0,<)0D2<&)8BJ*?LCL @144 cgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccacca + 000&C*&5GMB4=5F'LHH@)9=3J9G+3L(+FEJEC)>2:D(I/N', @145 cgaactggtggtgcttggacgcaacggttccgactactctgctgcggtgctggctgcctgttacgcgccgattgttgcgagatttggacggacgttgacggggggt + 0000IDD:);6.2JB:/3LKL3E7-2)'+3&.5J2(:6*;J4(D@C*>;NA;?;(AA7@*K2J:1IHG&;F(7,.:'F;MK&2E.B=3-*(G-C9B:818I2J=@- @146 tagaccccgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgcctttttt + 00000-E6)/08HCK.;>I;?)*AN.5KCL/IHJB-3(83M;E4,I6ML65'JH/K5.7>8;B0'D @149 cgcaggtatagaccccgtcaacgtccgtccaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagca + 0000+899@+,1HCGG2-M19*FE85BI:)5=53E4>)02&*'B@B'JB>BL/2+;,+'.5C,8;AHA+)2L?9*C4(;ABAA1@-6(/)61F2)2)DDD:5F,NGHB @151 aacggttccgactactctgctgcggtgctggctgcctgtttacgcgccgattgttgcgagatttttggacggacgttgacggggtctatacctgcgacccgcgtcaggtgccg + 000).K7JA0F29G5(;H:,?3N:A9NI&F8)>15L1<@5A7?JJ5.HBA1NB58='3BA(@:H>&DE&+0>)A*.<,'(77H&GG0/2L8(8<8'NN6F.:2+40*?/-3FN @152 gcggtgctggctgcctgtttttacgcgccgattgttgcgagattggacggacgttgacggggtctatacctgcgacccgcgtcaggtgcccga + 00/C+K;>474J:N,K0ECE;DLMC++HE-*N7M+.DHH-=8ABJK8-C&-+-8)B@.34DN/:1@8J;,)-.225E:BMN @160 catcgcttcctggtaggacatcgacttcaacaacctcgcatcggggggcacctgacgcggtcgcaggtatagaccccgtcaacgtccgtccaaatctc + 00000(75E,/5><-379KCL7D@3?JJB&)+G1K.HLK48?>9>F1AG/5D:);'E:M6EBIH>E70?:IN'D@-,GJ/N00FEC;/()=>@AI=D* @162 tggacggacgttgacggggtctatacctgcgacccgcgtcaggtgcccccccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctt + 00000/60K<.C;/E?7N:NG?&FDHD/J6?J25.*0:<4*/@N./JM'=:N:I)19I,):'79N/>F?GA.898KJ>H:/6'?BIM31,M9HC@BHCC?C.NNG9', @166 ttgacggggtctatacctgcgacccgcgtcaggtgcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagcttttcctacttcgg + 0H(1;<1>(.83L>99474AE<2MC4./'J6;JL<7J.D?/=,//)I<,.;I(41'@AC&,<27H2:87G<&5NM)432&K372?MM97 @168 gcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctttcctacttcggcgctaagttct + 0;&6GM3<,86-2CL-2GH&(,KL>-9MFIG887I;F5@LL/FKH+&:17CB+9NF9,8/L9@<**E,6M355/5KH+E4;KGH-I?@6(70AE;F.,D4F@GJ>-+4BEL&=J**1-:+@.3C&>DE;C&I/>85J)A';,L5:?A/I3<8F*.DJNC9C:-E @172 tctggaactgggcgatgggtaatggtgcggggggggtgaagaactttagcgccgaagtaggaaagctccatcgcttcctggtaggacatcgacttcaacaacctcgca + 0001??5DC7).//M7M5/12?N>79-/K))-5?0M(73HMFF:FI(/*=K:,='G+A7B6'4DILK0-DK@+>HI>A>N/0>GIEJD(3=6761:'>2B/@8/E @177 agcgtacctggtgcttgaggattccggtatttttaatcaggcaagggggatctggaactgggcgatgg + 000=7722(3?,M'..)E':EGC(N'@K4/&>6&'C)1-/A;&:;-6&CM*74F)GGI/&5<3CE0+>4-5H,D7JF.-F(07>3??D8=HL? @185 caccaggtacgctcattggtgccagccgtgatgaagacgaattaccggtcaaggggcatttccaatctga + 0005,B6(1MJ*9;+LB<=FIEKFG1E+@5BE-947?C2A8'H6<7G&8N2+14-90&A;7=?E*>FF'M @188 ctcattggtgccagccgtgatgaagacgaattaccggtcaagggcattccaatctgaataacatggcaat + JIF22>.NJ0/45N.BB1*A&.M+,)E)2;:<.HA:1>1A52JMM80;I*E8@&AB1I:CJ @189 gaacattgccatgttattcagattggaatgcccttgaccggtaattcgtcttcatcacggctggcaccaatgagcgtacct + B1>7904BE&HG/K/3K9(9B.=J=G/G<47-5*-9CFIA?((F5IJ:0CKLF8D?3FC759F.A(6=2618(7;EG2,/.LN=C)A97(2*K)E((*,G5D?*C-N4??DME&I6KL9M/1@6J?M9FF(&D6/0(5FJ4K,;F0=M4A;=?1AN*:+N3+*J=?B1;)6&4:K9(,11IN7G-N1H35>GBBF0*3*'7'D> @192 ccttcatccccggaccagaaacgctgaacattgccatgttattcagattggaaatgcccttgaccggtaattcgtcttcatcacggctggca + 0E=;)>.K6)E;DEJI'(JF2@C1.=A+112CJCL&G?48>08LA(:0EK)JN0:A);@J;5(M&5GF37HDDHMF @195 tggtgccagccgtgatgaagacgaattaccggtcaagggcattttttccaatctgaataacatggcaatgttcagcgtttctggtccggggatgaaaggggatggtcggcatggc + 00000)72BLGB>;:(/)&>@((?&39-N5F5>DL@H<>4C6J3N5KM76GN41/4D7)NM;@N+,E)8,H7*I?* @201 atgttcagcgtttctggtccggggatgaaagggatggtcggcatggcggcgcgcgtcttttgcagc + 0000:*NEE?65I4H;1+A/2;1*-H:=55FK.=,2&@1NH0N@D>IC/6 @205 ggatggtcggcatggcggcgcgcgtcttgcagcgatgtcacgcgccgtatttccgtggtgctgattacgc + ?-E>9B;BJ7/51BA?:N0>+(:-?42:;N;7:-;@8IA.90.* @207 agatgattgcgtaatcagcaccacggaatacggcgcgtgacatcgctgcaaagacgcgcgccgccatgccgaccatccctttcatcccccc + 00=2G+8I>9(MFL8+20KIH6,7<*=6JH76+MMB8;1+JDI''2:JB9=:F65<370I24K0A+LI @210 gtcggcatggcggcgcgcgtcttgcagcgatgtcacgcgcccgtatttccgtggtgctgattacgcaatcatcttccgaatacagcatcagt + 00K9EH2066:6B;;84DN9KB9'9K2L?LH-'&FE.,&GMH0'';.(ML21:B<)2,F7F:@3;35->+NHMIC=7HK*I*1,55A3:1CN6,F?;'5*=?(-))=-=A179M9C)M@@8B/=GD*J*5H&>9=L>;/0HB1)3GJ=)C:M&5DFAF;;8I2.0/-48*1:+@FK @214 gcgccgtattttccgtggtgctgattacgcaatcatcttccgaatacagcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaa + 00*C)6CJ1KC(B@537DNHD=:'7I=7-62>0KB@9'HH/,;KNC;LA6@,,DI+9&+1L.934D?&B:*IMMB:73KKE=9L>3275,1-B;)MA8* @216 gtgctgattacgcaatcatcttccgaatacagcatcagttttttttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaatgcaggaagagttctacct + 00000@K9(,DHFC0'+8(NC4F50H000D165&F/2M3GE9=6:3?*A38?<>/:=A89(G0+-9L,'.'AHHAE((IE'9/?,')9E.253@3:EGG3J'--J, @218 agcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacggcaatgcaggaagagttctacctggaa + 9(D-C320J22CKGGM;:48BA@A6?A4BKD-;5(3,J1CI87KA6>/?)&NG44;3A-1@2)*D:(9*2-09F @219 ctccagtaagccttcttcagttccaggtagaactcttcctgcattgccgttcagctcgcacacagtcgctttgtggaacgcagaaactgatgctgtattcggaagatgattg + 00>2B93(B?'7A,?A?AMBJ;'&&.('?C,2;)2G4&CH82+166BL>08JJHK30E*?69@-L51>K4,=-6'N(D7.-KI4E;,)+CA6G77J7@849 @221 gccgttccgtcactgccagcggctccagtaagccttctttttcagttccaggtagaactcttcctgca + 00+(45D(>E;K+F=DH('H/D/';L&AF9F?*:J9A(0AJ35>G161--4'KIDE5,1C@??2(BD< @223 tggccagccgttccgtcactgccagcggctccagtaagccttcttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcgctttgtggaacgca + 00.IN9DJ'D;214><*69F3808DB(>GB+NEC4G7N19@=;E>?3J0,@>NA55I+52>129J,GK)J4+G39'36NJJF9?8C?9:4'M0=6+E?5359,=G;K6,)F @224 ataatggccagccgttccgtcactgccagcggctccagtaagccttcttttcagttccaggtagaactcttcctgcattgccccccgttcagctcgcacacagtcg + 0000FB5(>B0..-,6I,NA-J,>@I868,19H+/05C@F/N&.KCK>7C:B.(A:>2))< @225 gcaggaagagttctacctggaactgaaagaaggcttactggagccgctggcagtgacggaacggctggccattatctcggt + E<,4@0B551<40I&:B>@54=;>+/,GAKAI9I&4139F&=:5)<3EEE3N))N2L6BHD':'*N2;AM<,17@5D)(@2 @227 aggtgcgcataccatcacctaccaccgagataatggccagccgttccgtcactgccagcggctccagta + 2-@L-;1J.12J(<=G/5+FB5>*J6E;*=M&6M=-)17NDMK/*-, @232 tgagcaatggcgacaatgttgatattggcgcggccagtgcggcaaagaatttcgccgagatcccacgcaaggtgcgcataccatcacct + 09CG+5)&7D80)D.M,07F=:==)A1'-*B(NC&B29NFB,?'HB4D,D1N20/9C@,>D:,'*2'A(01I>,?9@ @237 aattcttgccgcactggcccgcgccaatatcaacattgtcgccattgctcaggggatcttctgaacgctcaatctctgtc + 0157B7C<<=MI/,(IB(F&<,N,56BLAM-JD-4I*M)C@E85LFAI+6AM9AJAA&31*0N;I-MA'*KB6ELF@I,J @238 cacgacagagattgagcgttcagaagatccctgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaaagaatttcgccgaga + 00(0A1L=+=A*+D8L16L&MMGH8K6/12?HH9@,3JH=*BA*8>>.5/,:7B<*G:+E+N?FIA9JD<6?5@?.03,*<(*69889;2DEC @239 ttaccacgacagagattgagcgttcagaagatcccctgagcaatggcgacaatgttgatattggcgcggggggccagtgcggcaaag + 0000HD2NG95*B=N-='>60/M(BG=N4D9'H4K7D2((E;@/?=0/=2)8J2ACK3B4C:;NN,/D.@AK(3?H05M73&:&9;= @240 caatatcaacattgtcgccattgctcagggatcttctgaacgctcaatctctgtcgtggtaaaaataac + 00000=6G+NN&HM'>NC2C3D/+1F(FN=7D<345)@<**?;39?K7*'13EG@/7=J0N*HF?7I=. @242 caggatcttctgaacgctcaatctctgtcgtggtaaaaataacgatgatgcgaccactggcgtgcg + 00007:?G*5843,G99L:3&*( @245 gatgagtaacgcgcacgccagtggtcgcatcatcgttattttttaccacgacagagattgagcgttcagaagatccct + 000034E0J1)H=4FLJ6,9=6?>:M65EL+-ND-FGJ1'(5515I-9+5AI)D69N:IF<;=5J:8N9:2I5D5J<+ @246 agcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttttaccacgacagagattgagcg + 00BK,K4E-L>(L9''64A6@HH>/)G&J20.JLI5&'J@8;2A&I, @249 atcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttattaccacgacagagattgagcgttcagaagatc + 09.'A&1&JAG@/A7I0J'01EB)F-I9I<7(M33,D>G-15'F&&'<>L-(5G?320(.BC.8'+7L31GGI6G.247I933L9)>>'A. @251 cctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttattttttaccacg + 000,J=KE?;C-CD6AH@23+J@&8?3E1@8=JI./<=,>95.-8?0K/*>CF?L@)@*0E&JC5GAAH&I.5> @252 taacgatgatgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttat + 8@NMID/I)'8JKA26KH@K@2A7&?HH028&=:/6?H897F?2E=;D2+F6AAGM@*G13LKE<( @253 tcagggatcttctgaacgctcaatctctgtcgtggtaaaaaataacgatgatgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttatcg + 000;N3C2/@<'71NE1J<5B<-LID0H*,+N)G)E,4)@/4=3-:?L;-2/(M56:LI1*:N.(AE9H96LJ6A=D1(:&N;0-:A>A0.JE1MM5LL@GG @255 cacttcgataacctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttattttaccacgacagagattgag + 0000H<+'A4A.DG-<;.A.-HJ/7;5H=?KC8I0,5MH;2.F?=:0C,K4&9,4/)@JFHE8,H.&)G,I6:1CN25BKDFM1+7/658=-M>H @256 acgatgatgcgaccactggcgtgcgcgttactctcagatgctgttcaataccgatcaggttatcgaagtgtt + F+B11,?-9I:)@60;,KMKG&F'3@?.=9N)H/,BE-3/JF4?&?9B/8*:36.4746=<9D>?DH.D22J92N;>(J+7H6<9* @258 atgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttatcgaagtgttgtgattggcgtcggtggcgttggcgg + H-=2FK3C7*H7.9@&H:F4LD=(;+&.&I<3E87J,M+K+;1C2D-(=IIA47I-E46N;G7:E28K,0L1*-I?3/NG77H);&?*@+N=? @259 ctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgt + =.I;NB,<<.JI/FK.,'J7ACL+NK=NH.2FM)5;9;7NBNL:,KB/)3MB6-0L:-5E-F>DJNEJ@,@63&04H?78E;B?G2DEGJMNJN.'8:8;3;F2C+'I17:0C @260 atgctgttcaataccgatcaggttatcgaagtgtttttgtgattggcgtcggtggcgttggcggtgcgctgctggagcaactgaagcgtcagcaa + 000'9K5(G4<*/4A0BI3@19/KFD@.J>MMA96/A;-G6,2*/LCB-941HFK56=5L,29)8AI942(,/L5@+5KJI?/@;53(93BB1:?J2=FN;B&@>.032/:M+1B52L=,/*DB=2'G7I<.J2;8H:*I>;GNNC@9G-=M'LKD;F'6E @263 ttcagccagcttttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgccaatcacaaaaaacacttcgataacctgatcggtattga + 0000;;0KD2'-D-1L0)/M1@A3>,9@DE-4)DB-@*C>6=,?GK)J8J4.)2C47&9M1.N0='1D(*FBM65ID,1=);FB7D.7GDI1>+I1/L @264 tcttcagccagcttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgccaatcacaaaaaacacttcgataacctgatcg + 000,?86K-E'/*6I@=2HGKM:)JDK'>C07HF.?;?)K+:A;))F3=NL)*D.LM1AB,N70-+78E?LE2J&M(.*&D@'A-G)3.AF>1J @265 gtgattggcgtcggtggcgttggcggtgcgctgctggagcaactgaagcgtcagcaaaaagctggctgaaga + 000('9@7C:L8M/L7H//A-M:(-@FH.G255MD0M+;:1(DLJCH<.C,9+1N<-F38=9*NG5:A)I31 @268 ccgcagacacgtaagtcgatatgtttattcttcagccagctttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgcca + 6CEBI5GFJ'61D(8:C7C7F6K>M,6+&9N*36J,*?0;E/G6?3 @271 agcaactgaagcgtcagcaagctggctgaagaataacatatcgacttacgtgtctgcggtgttgccaactcgaaggctct + 7;<,(;)=H?(?G4854*;/N*4KA?'AJ;6BL':F*M)8@JH,HH10EJ('&C';.*0E:'()@'(DFHDM)G)F5-8@ @272 aacagagccttcgagttggcaacaccgcagacacgtaagtcgatatgtttattcttcagccagctttttgctgacgcttcagttgctccagca + 00C5,7FH=828;ILNJ(6A44DC&9L3<7&N>B)6'2,J2/KFI0N.D7FA7IAH6'6H/N&(()FAFF&F-'E5&L7L6E,,*JI/+9&@83C/KJIC*IK)5*2H662+N @276 cgctgctggagcaactgaagcgtcagcaagctggctgaagaataaaaaacatatcgacttacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaa + 000),<+H(F48.:M?0656FJNH,.2@A(2ED'IB8.92,:9KH7@5B>5E7'5J?M&)))?:31.M--5;=B+J=F00&7@.9)6I3@<)@>?3G:2AD.63=/F+:87<.7.=F @278 tacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggc + D4.BA)670:MAL;'J'(;0FA)4I80'0M2+IK0?1IJ)47>*1/=CC54=/>3BNC8=0>B;.7;7?>C'I4(6)L4E-2HB(5'N::3KFN,?9/D)DC4=4J,*,>DFL2'+G@@;/K,224*H1(A16?.?0DBDE @282 gtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactg + <+?)=L7@N2FGJE>>+ED1J9B5;KFEIE&//)4*3C.A8H?3C0C:GC)33<*8NKL(@@@46AEJK)J @283 cgccagttcttcctgccagttttccagattaaggccatgtacattggtgagcagagccttcgagttggcaacaccgcagacacgtaagtcgatatgttattc + ;6LC2@7?.DL*;+254=H4I12B.'3(6>5=3A=39N7D/6)5IG5G(F(C2A9@;DC'=:(3,8>LA33J5<95,,H@:.A=A''-I9;C0=;A*+)72. @284 aacatatcgacttacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcg + (4-*2>G*04M8:)C@+E10IEE,0/C6EL08=9,.)NC5,I:)+7'&82'JML;/.4GHCC?G,11I3IDGI/(==1KLM'?1C:5=6DG8=-BHN= @285 gtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcg + 00?>EBFI>5M/C&,@N5*8@J4FKLA404/4;N&'2B3,G>CM8)4*:.F7;@EHL*F/>;A@).AEB:/23)J60L)M7BI @286 tacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcgc + HJ=;;.*.?21LN)496-(((I5/N(BI50>F.A=5L/6.8779K''4*9:L6>:/5H'.6L1@1G+7BD7L:K.N6*04&>F7>E'B)D02=(I7E,6C94B.(.?K8;>/G>,6FK83:C8GH62>J&E0/NF>C3&*+E:EM;&41N?9L2'9,MH-)I382>L3/GLCJ&-,(;72.+H2?8@8,H*A)@-?@7D5MLD6L/GE @292 aagcgccccgagattaaaacggctctttggcttgcgccagttcttcctgccagttttccagattaaggc + 00080)M28+8MB;2=JHLG,9D6/&7)H'-/GJJF@CL<*3K2)I*??>*4LFAF:(HGF:32KKJ1. @296 cgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcgcaagccaaaagagccgtttaatctcgggcgcttaattcgcctcgtgaaaaa + 000>G&?F4,:>GD-)ILN;-7>(97FNC5C.@I;3JE(00101<0K1;K'7F;M9?4DL.K15C/L<=K9.F3>A33.,D'27<,26BH5E?'H++3C5,>H/MCE95K=6J @297 agatgatattcttcacgaggcgaattaagcgccccccgagattaaacggctctttggcttgcgccagttcttcctgccagttttccagatt + 00000N(?)2GEJ++2N=BM&/=LAKKN10H(H;*DNF='CFE+H*'(MG+MEJ00M&',1AEJC3D4;;.B/GJ=J7E53J?JDI1'(7( @302 tgaccgggttcagcagatgatattctttcacgaggcgaattaagcgcccgagattaaaaacggctctttggcttgcgccagtt + 0003F,*/BBJ3&6J@H:=-6F&68(-@F06DCFIG(KMD;N::BI3?I4)4B*:8H1ID;:/BL-1CNHM0B)@/=C3IJ&*L-=L&G4;'.*9>?ND= @307 gctggaagtgcagtcaacaatgaccggggttcagcagatgatattcttttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagtt + 003/+-/0D?>+N3EB,FL?2?/(85ENEH5AMB3;:I..0==/9HE'H;BJNH(8@/+6CN6C1DA)IG83H'G+*)H901,1F;:M4&'E=CNC.:@'1:8 @310 cgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggggggttcagcagatgatattcttttcacgagg + 00000LF<9+;FH?*5-1L.9L5(4(N=-8FD(.A&&J36A*/1<0I*.=B=)'1D.+88/5.+:-KG @311 tcgcgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccggttcagcagatgatattcttcacgaggcgaattaagcgcccgaga + :+.L6E@3@B*@8=+LK?G'31K/I7=*NJ<0*0M,J52GAB4'B,75:KDIJ6>'E*9N/7M9+:E3/E)N@<73'F)0/NJ?&BEB?>G5IBJ7+,/'K363CA;EJ @312 taatctcggcgcttaattcgcctcgtgaagaatatcatctgctgaacccggtcattgttgactgcacttccagccaggcagtggcggatcaatatgccgacttcctgcgcgaa + :+.&G>&*C/10)3A@.LLA&0HC-J45;.866L+F@A/(H.-(F@N11:39;FAFHHH9BK2FG<==HJ7;GA34ADJM*7C.FK*'&/<*C.EM0=6:A=G&M,;CI:?9J @314 gtgacaacgtggaaccttcgcgcaggaagtcggcatattgatccgccactgcctggctggaagt + 0@7;:C8=N09FG&90M:*62E;KLKIHKI8D:BC6:L35H<&@NG@@297?(&+4H2(-@A>? @315 cctcgtgaaaaagaatatcatctgctgaacccggtcattgttgactgcacttccagccaggcagtggcggatcaatatgccgacttcctgcgcgaaggtttccacgttgtcacgc + 00B02H9:9*A@1+?G,.+(I@5/8AD>:=9?==N'/(,(GHBD2=I&71A9>GE57K3*27+.D:4=6?=G(=>2HM3D=89?*0IANL850*=3>(11II'C-JIJ*01J2:;E348F&MMC1/>('FDA.**>83GIM;-MM03@EH'5=F(=D*2/A(@(BFG9L@+KA@28I@@:G>FL'@8*N;K(> @318 ttgttcggcgtgacaacgtggaaaccttcgcgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggttcagcagatgatattc + 00C23M,&E&&B)-AIJ*6EE.N=03613*6((MCE@2B(@F7KJALE3JKM2H5(.K*I4,H,6(:(&N2L @319 ccaggcagtggcggatcaatatgccgacttcctgcgcgaaggttttccacgttgtcacgccgaacaaaaaggccaacacctcgtcg + 0K5H6J?-95J1H0:BC4<.7>6J1'NA,)MC5B+9+49GJ+MN:G;F7F:K1E;J(?BBB8L5MMC:(8*B0?48EJ' @320 tatgccgacttcctgcgcgaagtttttccacgttgtcacgccgaacaaaaaggccaacacctcgtcgat + 000F922=>G>+'I(&D=>=5'2'09)H@I,BG;9>6/EF/C,:56GM-5(1.)AK@+555'*L&.@A&(F5D,*9FN @327 aaggccaacacctcgtcgatggattactaccatcagttgcgttatgcggcggaaaaatcgcggcgtaaattcctctatgac + 0B+>C)3E7&.K3J=-)3L*:./6H,=>2KL?6A07L(.90?&33(N5:1LN'8L>.MFL'ANDLHHBB&,4)':,3L:8MG9/80<-H39L3BIILDC?HL8>L*;J./G.9M);?8K28+3GN:&86FKE>D=@CN;NF//)*31J;(/*K @330 tccagccccaacgttggtgtcatagaggaatttacgccgcgatttttccgccgcataacgcaactgatggtagtaatccatcgacgagg + 00(D/=FAA*G/33;G><185L0,AA)F7BM@4G-?-IMGL?7<@A3&3KF&)A6,GC2?*;D5487L'JL.7'M45G0E'475(219> @331 gtcacgccgaacaaaaaggccaacacctcgtcgatggattactaccatcagttgcgttatgcggcggaaaaatcgcggcgtaaattcctctatgacaccaacgttggggctggat + 0/,-+B+)BFI;?L;H/.'54>,))-C2'3;(*)3)/,;-.-K26,K7+30CN,+0M=/@B1E>H?(/((NMJ)H6&,BD59,)=<;M22K4,J99(7I22DM'N)+FJ,EK2C- @332 ataaccggtaatccagcccccaacgttggtgtcatagaggaatttacgccgcgatttttccgccgcataacgcaactgatggtagtaatcc + 00))A'4G@091GL3A=K(@8L428=7:-?*C1+E-96.6D@;02-??NK/N7+N1???JC)MM&K400A,1J0-*I(C7G?F+/).0K08=4/-AJB4:=4K'(5,G='?8HN92+,(+B)(B1AKI>=9;;CBEEEE.H7+1C8&576=DH/-J)763>8ML1L5+(?*+4EG0?:CJGN:@50):('/(:028IG57M @338 aaccagaaagaatgccggagaacttcatcaattcatcacctgcattgagcagattttgcaggttctcaataaccggtaatcca + NG/BH9-AAFB@,E@'3E908.&:'/NM'KLH12'K?:*/;-7:A:KA=D494:>DC>*18.K;DAB@K'LH66'<.7B8?LN>09&(FB1;@27&AN*'<'7&;:2L898853::7>HCGN&+I4?+92?(@J17K@4G.L):6 @341 aacctgcaaaatctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttagacgaag + 000M8KAM-LKDEB697+)-NJ9.@>/2MG6,D:1LB;<*?JJ&&)2B89)NEJ.DCI(&<,IN)F?0,&.'B,6E8I<;JE,,H@57*=N'7I=4A @343 aaaaaatctgctcaatgcaggtgatgaattgatgaagttctccggcattcttctggttcgcttttcttatatcttcggcaagttagacgaaggcatg + 000F8:+G4;'N054J?&G.>':12@6231-75J86N99G @344 tctgctcaatgcaggtgatgaattgatgaagttctccggcattcttttctggttcgctttcttatatcttcggcaagttcgacgaaggcatgagttctc + 0CHA87M&MN?L0.?+'2GL/+++E)LH,4.C68D:7F=7J6?1/F<)ICLKCE7H&,.7;JKF*.A;A4-'E4&'(;(LL+7@/+6G)H@3D18*+F, @347 gtggtcgcctcggagaactcatgccttcgtctaacttgccgaagatataagaaagcgaaccagaaagaatgccggagaacttcatcaattcatcacctgcattga + 00;:>2I.@H&)&-:.,&317G5-MLC/3BMG=HC469.+.6)>.F/H=BF259I.+LF'5/6@8B2>L4441AN4-()AD(E0>*0C2344A6*6:DL*3N,)&.774L(E,6CE-D(&B(C6NIM29DB/A8M:ME49GK.64HEJ @352 tcatctcgcgggtccggttcggtataaccccccattccgcgccagcgtggtcgcctcggagaaactcatgccttcgtctaacttgccgaagatataagaa + 00I88:5('DG1G@D'/);:1;-A>I.J:'D30BA7+;@F137=8J07?2:H@M,E>4)HNAHJGE3?,)L45*N,BFA(-9JC&=<(-DG/M8>>I6'? @353 gacgaaggcatgagtttctccaggcgaccacgctggcgcggaaatgggttataccgaaccggacccgcgagatgatctttctggtatggatgtg + 000*26+>(/G0843C71'F?2IC6*M1CKGK)L/(;H@0L1?2;C(7,B.3C0H>47>MK:0@CGL0,:+D3A5,-KL1I>@-;<0,4C@(-L @355 gcgccacatccataccagaaaaagatcatctcgcgggtccggttcggtataacccatttcccgcgccagcgtggtcgcctcggagaaaactc + 0000-)-D*<1J(1A*JDLH?-6M*9*9H0J.&?-9DK/EKF09N<.:DA.L)6,9C;IDH&-?(-:KB;5(/0&;*9A:JA>C2:LD4H1' @362 caggttcaatttcaatatccgccagctccagttcacgtcccgtttcacgagcgagaatcaatagttttacgcgccacatccataccagaaagatcatctcgcggggtccggttcg + 000-?/?2.?(/48,@5F5F<;'I=9J7A6?2C,9,JGIN;CA8I3JL-I--IB'L45I(3B @363 taaactctgcgggcagcacaggttcaatttcaatatccgccagctccagttcacgtcccgtttcacg + 0HNE7HJ7A865'-9.E/N57A4=HHII&IB2;2B:K<&/':.(BKL6F&/3C2FJKF1&;//48J? @366 cgccacgcgcgcggcaaagagatcgtcgagttgtgacagattcgccataagcggcaacatcaccctcggcg + 9;,*HFG+)'-4=&I/(&+,F93K1F69&21CL:>B7L5B4-CGC2K(EHB8G>0+N-N=C+E=:G=L.:G @367 gtgatgttgccgcttttatggcgaatctgtcacaactcgacatctctttgccgcgccgtggcgaaggcccgtgatgaaggaa + 000F:G@43?K*3.E<>-62N:)=<(K37G>B10@C+*G03AG>8)?3CI89A<A8=>68/ @368 gttaacgccgagggtgatgttgccgctttttttatggcgaatctgtcacaactcgacgatctctttgccgcgcgcgtggcgaaggcccgtgatgaaggaaaagttttgcgct + 000G@&?2*MI;G+,H5'F,'(2>791F'@3,:K4&9=G85G/FM=9).(48@BK(857,1G??N7DJ&L>E+<(A5LGC7+);;8+>)7MD6>E2M.0&7H'@4< @369 gtcacaactcgacgatctctttttgccgcgcgcgtggcgaaggcccgtgatgaaggaaaagttttgcgctatgttgg + 000F/6LM1;2:*0IK'J()HFFE3.8.4-9K<4@FA7*25G)C;?7;B3H*:&@B?K<= @371 atcttcatcaatattgccaacatagcgcaaaacttttccttcatcacgggccttcgccacgcgcgcggcaa + 0-DME>MB8>/M=03M<*K)0:M:5L9=7>BH85'*N+G>/HN0(>:720;5B)7>-?=?C)6>CM&,K1J @375 ccgtgatgaaggaaaagttttgcgctatgttggcaatattgatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgt + 0-34)/7<.+14;E8B;)I @376 tgatgaaggaaaagttttgcgctatgttggcaatattgatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgttc + 7+@5EJ:6,G:E5;FFAKDL&4HB'><)E*;BL*CL-H=8D+*BG'C5LH)*/'D+6+E?E&MNI2D><*9;57<2/476J?@+C(4 @378 catttttcactttgaacagcggatcattaccatccacttcggcaatcttcacgcggcagacgccatcttcatcaatattgccaac + 00DCDD7+>8ILFJ)@&J5@.LJ/918(?4G'7G*=.8H(1A-I2-@G;--+)>KF'IC-&M,D83='?HM=B>83L;LGFJM,: @379 gatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgttcaagtgaaatggcgaaaacgccctggccttctatag + KL.)M0-BLBJ:+8HJ<8?G9&GH&6?ID>K1CA=8=/MDC14/==,9<) @383 atccgcgcagtaccaacggcagcggctgataatagtggctatagaaggccaggcgttttcgccatttttcactttgaacagcggatc + I(&D<=H4@I7;I4HJ(&*GC36='8643N?):NM-,3.('=G.<-B.JIF/)-4;+K;72<44>*)D<@)DG98MD=&GF9??K3I2E5-6/C@G4?<(E(D6&E @386 aacgtcattgccgcaccatatccgcgcagtaccaacggcagcggctgataatagtggctatagaaggccagggcgt + EE)?9N:F(K+F:,6@-FLB030A6;LN30*I?.M0;49J&B<,,+K>'>AKKH(:7-;=/8G6)N:.*;*3C,629NKGBAA;(*;:J< @389 atagccactattatcagccgctgccgttggtactgcgcggatatggtgcggggcaatgacgttacagctgccggtgtctttgctg + 0000-;(G/(AI))FNNN;-M.38=((C>*-G1C,7A:-HC5@.60(.:43AG-3@GC'E44''>42&-M=6C:K+C>NHI@:?8 @391 actattatcagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttttgctgatctg + 00JI-0318GFGDGD6@G'MF=?/M3*K@,B?.*F6.2H44D5D04KK7.=6F:AHFE)7L2F6(I+1;CB52@?-LF)'N3*F? @392 acgtagcagatcagcaagacaccggcagctgtaacgtcattgccgcaccatatccgcgcagtaccaacggcagcggc + 26@1;L<.C63JBC?-<'&J*(;):B1:/MEKAD+J'H&>')0D65+05D@0+C34;0D6>CG>I?M0H1)EG&L3I @393 cagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtcttgctgatctgctacgtaccctct + 0'.*;)E'&>CN*<->,:C>L7GL(:E;@/E7DF1M(-?F11L@)JEA>AJIM*D-*:8/:M)&LMCKD/@,:6/E26@.( @397 cgttggtactgcgcggatatggtgcgggggcaatgacgttacagctgccggtgtctttgctgatctgctacgtaccctctcatggaagttaggagtctgacatggttaa + 000M)G+7HK0?2DA+G/=B(=9C7@9'6ALMF):&9'9><0AI5M/-K? @405 gcaccatcaacaggtgtcaccgccgccccgagcacatcaaccgacgctcatattggcactggaagccggggcataaactttaaccatgtcagactcctaac + -+7G(>JI9+JN=C/=.+9.:= @406 caatgcaccatcaacaggtgtcaccgccgccccccgagcacatcaaacccgacgctcatattggcactggaagccggggcataaactttaac + 000000N00/6-8:BI703(,II+.GN'EE6=L+K/2;>8),4+=;BNI.D8438J?K&B/D,L@((5<8J55*E:(A3/D6H6/'KC2I24 @410 gttgatgtgctcggggcggcggtgacacctgttgatggtgcattgctcggagatgtagtcacggttgaggcggc + -M?,<00)N4NB/+<(N):@(N=&J70)8'&BE/)76?8>*4>F<,>FHC:&6G>K/A)5LEF388IMJID2', @411 tgaatgtctctgccgcctcaaccgtgactacatctaaaagcaatgcaccatcaacaggtgtcaccgccgccccgagc + 0D*;E.5??='*?F/61()JJ4A)>ILL8M>5/?4=C?L5'4>:/*&.=5+'I8=MK;*9@/E(,9.=/KDF< @413 aggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatcaacaggtgtca + CE.?+L00>)4897JM'0II.5FE61I76*1NDDF9AA39GDB,G)84K52+E4=D,'G@I2CIM*+,=()K==,:L(<@4GKA8GFNA7?6@L<9D=/ @415 cctgttgatggtgcattgctcggagatgtagtcacggttgaggcggcagagacattcactctcaacaacctcggacgctt + (;G5<107,F078J8H7D'61*C?-L63H9=M8:9N6;JD+;ELK-.)*3D&,&D30627NA<>L'DE/(L;',>:&K*/,;E-& @417 cgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatc + D()C0:AG;.GKM;?K>@,.-@?1<2:=KC*N>8LL?./HN-M;&L34L34B.04)&H*F+F0 @418 tgcattgctcggagatgtagtcacggttgacgcggcagagacattcagtctcaacaacctcggacgctttgccgat + (EADDA@KE'::2J,,,-,J;:J)88EJD;CA6C)JF.+B:D3M*?C*B>:ID:AGD5 @419 tatcggcaagcgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatcaacaggtgtcaccgccgccccgagcac + 02KE';3@2EB3;G5/NGN4*JG,E/K0L56.BH'4L8K9A4,8LK?&+D-7CMB30L)8))N.17N:IJ&AA*6M>:076ECJG,L9&D&)M1@L??(4:57+C*3,><9/6&(0)M>1NB;IA4D0F5?+B:@,B9/AM:CN)0J=3+E>LC,'E&B)K'N/658:4/II,&05/22@'554+L&).FD9-:<&+/+@;&.DI/=H:C9KBJ4.8@7G.)6 @424 tctgacggcagcttatcggcaaagcgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccg + 16=E=JI&&:;9I:>MKI=;,8?*+G-96A;;17@4G?C:+:/E6/HJKICDI@:H=5N4NB?>H+/J5?M6;>===AI,= @425 acctgttgatggtgcattgctcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgcttttgccgataagctgccgtcagaa + 09BCJMF0D609&=GCB0D1F(.;-AGAH);;74G2KJ(6I-0.AFF>;IBFI2'; @426 tcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaa + 6IE4EJ';/F5.<6A(B.BL8613)3'CBD,:I6=7?/72;3AN&+23B8524+'(J'&9E3K3C1GHBL&'02(/9ECD>/5H&+(*3=HHF/?)& @432 tcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaaccacggaaaatatcgttatcagtg + 00:2'.)(>@:A.E'I:C=?:,J@:2,GC4.=G930>*0N&5<)JM@5K-)0.>B+L9/J)/CKK68C7@I(D'H/A<56/IND7?'DMGIN@AJ1&<1/?(/8-4& @439 gacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaaccacgggaaaatatcgtttatcagtgctgggagcgtttttgccaggaactgg + 0000:;(A;&)/HD62;)?AD&1)+2=JJA,06KF++1:(J+1BJ-*B5;<83&7/?/+B)NB88<+&LMD.&80B,:FGNF*B0*'IJ':K>+8MI<71BE-0 @441 ttccagggtcatcgccactggaattttgcttacccagttcctggcaaaaacgctcccagcactgataa + 0+=1=>ENA5:&5BJ-C9'AM(7<1(;1HJK18=8))-EN9+JJL&2;9A54(A2I48N8NC.JFJ)055NCD(+0GA9&.3HJB(@A34 @446 gccatcagcgccgcgaccaccgaacaggcactggagcctaagccccgaaccgatcggcatattcttttccagggtcatc + 000B4BE62..C@8C8CD':1N3K1AK6;A)E(54?FE?(7J77=89-0NK>B;HG?FEE0N>IAKH86NEDC23(7<, @448 tcatcgccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccgatcggcatattctttc + 00A/I<1?NIJC=.BCBL;C@95:=L*7'*9J6)6+=+J=.LMI?B*)?L)7FA.5+*(>E0@+837*G4,4 @449 cagtgttcattcatcgccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccg + :>-752F,6IAD*E+B7KN-KF)(?,@)L&>CD/*1?(CF&.9(D&/=34:D?,8/3L**+1E56. @450 atgccgatcggttcggcttaggctccagtgcctgttcggtggtcgcggcgctgatggcgatgaatgaacactgcggcaagccgc + @C/CMMN=B:7,D9JJJ.NDE(=LGI8D10.85ABI4=GF)?J(G8N&.N@H58J@?JMN;7K<*MM64>?M/3643,H?:-+E8?5&>.2H;249B4A2A8G<81?C*J?+N;8>C)2((-,;2F,7'/4+3-1,N/.JK0/7B.2(&J/-H9D*GF'+H,6CH'D1A+D&<(0:0:+,J>.A3.,<;3.+3@2JIJJL&I*)0'2>*:K3HHL9;9,GB.-A-;AC'+139I/D5

    0HK=1-BA5M)I>'/+-'<2+3@9@N @460 gacactcgtttgctggctttgatgggcgagctggaaggccgtatctccgcagcattcattacgacaacgtggca + F/7D44J/0+88=3E2;K2IN&I,'F22=1:B(@JM9/L)K<:GNI<7F== @461 acggtgccacgttgtcgtaatgaatgctgccggagatacggccttccagctcgcccatcaaagccagcaaacgagtgtcattaagcggcttgccgcagtgttcattcatcgc + 000000;GI(CM-9>':JK5NE5A..=0'I+?>7AJ>I'..H)/<2/M44(@,-<2=+F2/8A?5'M;BI5I'-&E:./7&ELAKGEB*01 @463 gatggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcgg + M>:-EJ-;8-;H@KH+-4JH:71KI8.==6NJLKF.<+5/550.*LH')NNEB+@4GL95L/&:8C=9 @464 gatgggggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgc + 005/6)F9HH;25-2A*.I*?M&FN&FF=4FB4?(G/8'53+=?DJA*;I*+MB88&KF?L:?6/:E(*24I?) @466 tttgctggcttttgatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatc + 00D4BA4;'C2I&9&6+N:<4E5*3;AI+L&-JLE)5N(6&&5>@56+8E0K>E?1<*F1-;4@2/9/<)/:-+M)-0B6-C4M3,/36=I1?3B=>+M;MG8.?@IC/AK7GA3H/882<,IN(0*'BA.0@:,0?8<,I@@@5GB @468 gaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatc + ,I9,N/=HDIAE?E'5J:+-<)6I&*@;0<(64D*N9N2-88.82)-:26H41M9&M3H=+=9C88)K8(A9FA: @469 tcttcgatcatcaactgcataccaccgagaaaacacggtgccacgttgtcgtaatgaatgctgccggagatacggccttccagct + 2;/7/H2LI,@=I0F4?)H'?=+6DIIFM*;-=3.*7+F6-(I&208M/*8E/3E/( @471 ggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatcgaagaaacgacatcatcagcc + ;7/C*014+A077F,7FN0MH(.L==F5I4?:>)C(('91K??:-M1 @472 gcacttgctggctgatgatgtcgttttttcttcgatcatcaactgcataccaccgagaaaacacggtgccacgttgtcgtaatgaatgctgccggagatacggcct + 00-'D51D321KIMJ9(C(3)0>E<'/9M(=?8)4G+0;=@F<+DNG;(*;+?3@?<,?MEN?,:J1+L(E8B==6D1FM4;:MA?D3AG.C(((N?M96I'1&K62M @476 ttaatccccggatacgccagcacccacagccactcatcaaccctggcacttgctggctgatgatgtcgt + *;08G&-M05KH)EMK0H/F5:'&-IAM8:/*3FH1N@6E<&J,'?CFC'.&*FK@3E+@MD&:1*D7- @477 tatgcagttgatgatcgaagaaaacgacatcatcagccagcaagtgccagggtttgatgagtggctgtgggtgctggcgtatccggggattaaagtctc + 0H;(K51G('3C.4JA.-5)((')?8K0>8>M-13;67N:?M(3E:JHE.'*/C(;F1HK13=+KC5*2 @479 aatagcccctggcttctgccgtcgagactttaatccccggatacgccagcacccacagccactcatcaaaacc + 000>4GLL@*'&DJ8))CF@5AI/A,=>?AD-/1H<=@>A6CE;7KN67IⅅLJI(19GL,+()2@GB/(; @485 gccagggtttttgatgagtggctgtgggtgctggcgtatccggggattaaagtctcgacggcagaagccaggctattttaccggcgcagtatcgccgccaggattgcattg + 000;+IH<<(/>GEH6C&'.2&-K5?.=GN?,20&(GC46H>>??=<.G-LN70*J?I8:M)9K9JMNECN-64.89&B @487 aagtctcgacggcagaagccaggctattttaccggcgcagtatcgccgccaggattgcattgcgcacgg + 00M=/KA;DLN<'=5>-=;.D+C+L-E0A07)+GINN61,G9C@)<&F?&)INLEI@)KI)=M57L7I= @494 ccgccaggattgcattgcgcacggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgag + 00+4NA>EB>)M4ED=//J:7F5F.++@FE;&;JN6)?0-B2GJ)6G/9IE&LK9CJ<=N&&@LJ95F.*7M @495 gcagaagccaggctattttaccggcgcagtatcgccgccaggattgcattgcgcacggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagc + 0*5LIK.B260L+)2&>4/.A?864:)B1F'E,12)J(+I6BK?M6.A889+G(::=()MAIB5K70//5:)3095D@DH4IIFJ+(L'L:'MFH*3IHEL8NC&0E.?@8BN>D;5<+89>N=6=II10C( @498 attgcattgcgcacggggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatg + 0000D'1='0.G8(,N)'H/5:,:8;.<1;:KFK5)6JME;0)?FE+(5D<;1L'I01?E+<=N;L,/7L;17I.INEJ8;?,E @499 ttttttaccggcgcagtatcgccgccaggattgcattgcgcacggggcgacatctggcaggcttcattcacgcctgctattccccccgtcagcctgagcttgccgcgaagctgatgaa + 000000F92/J:2<:H+&BL&/I*?L28K2*EJ9F-GKE:HE))7:,M4M@6;1+MC:<2A9G()78AMC5B26H7JC,396&L2MN5,B@MC4,JA,FJ@HH8*H+K8+&*1<02.5 @500 acggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaac + I,4BF,8&)D(:H>5.73(0*6B81<2A?I;;L1F;,:8IK:H@D976@M>7GCI)M,.''ML?*;CJ4-7+*J/NK4&GC(-NAE?5K @501 caggcttcattcacgcctgctattccccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacc + 0:?;DH,&A);B)51H+L0(H7&@)=NDKK?A?CH7IJBA//./IJ7B,9N2A>JI**B>56A?3-E&B>J64*>AM @502 ttccgtcagcctgagcttgccgcgaagctgatgaaaaagatgttatcgctgaaccctaccgtgaacgg + 009G>7BD9-?CE??)&C*>KCF6+@L/J8>A;9'IB8<-5)*6?6H,F.(B0I4M&4//+K5J,/4; @503 aaccgttcacggtagggggttcagcgataacatctttcatcagcttcgcggcaagctcaggctgacggggaatagcaggc + 000059*90,N&525=4C,GG2+8H8I; @508 gccggaagcctggcagtaaccgttcacggtagggggttcagcgataacatcttcatcagcttcgcggcaagctc + 00,13@83646HB?6=4M(>8EK6:+2M5E)H(I+->N=1.87HN7I>91D&,2;+7G-+AKCKN8.F67A;F- @509 tcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacccctaccgtgaacggttactgccaggcttccggcagg + 0009BF4&4/B(<&L+482LKAK1H40@72I.>M-G31,(53?C'?G826A)LLI/GB+*4CC1L;88B:'L)+@=8CJ1G7>+ @510 tattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacctaccgtgaacggttactgccaggcttccggcaggc + )G=CK;N0+GG'.4L*G6M*>7EKDHB+()N:N8H)&G(MDI:-/),,3:.F915:8=JGJF'?CD&'3MH&0L*C>0D6MN23E5')E9& @512 cgtcagcctgagcttgccgcgaagctgatgaaaaaaagatgttatcgctgaacctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcg + 0000G'';'B4IF>DMI6;FJHFH9NI>F(N-I>EHH.2.G=@?/7I?JAC7+GA;3'),9LEF?&CM;(@(8G6=I'63E;2,HJD,F8CCC44G3;. @513 tcagcctgagcttgccgcgaagctgatgaagatgttatcgctgaacctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcg + 0.'7J6,H@C22HGB>M.(?*64@643&1@C,=->N+(7/(3K-@+FLNG,?E/J---GD6=*.>.&9'/AJN1&6N@(&F@JJBEJC67+F @514 ccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtaggttcagcgataacatcttcatcagcttcgcggcaagctcaggc + 00).I04?EK;)B)/62:/<0F/.:/:K1+888+7=/59DCHN'NE,KA=@/L/;G*//E6?;NINL*,* @515 gaaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcggt + 000&=K.@)>:J>83G'3(/4:4JH8.@7,-N5@//K;)//C&>7D@N:7L=.M*M*=D)2K/=@7( @517 ttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggttcagcgataacatct + .;G3C3-ELJ(E4)@1&4&,<,JM5JLAL-91?-(H@LA @519 gcgccgatttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtaggggggtccagcgataac + 0000(30DNE&&-A+9C4G>@I026)JAM0=ID,;L@?;I149L6/;?,8:.':GA+'B@(2L);3A.B?+E81K@,2.@;?>C5E5;9*'>KJ*7M6562*AI&9C?G @523 gttactgccaggcttccggcaggcgcggcaggcggtcgcggaaaaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttg + 000I>)+E-,73G@,8:,&J:F32>,M=BK+,J/G7F+FADHF<@1@?(L>&N;7GCB0*&A49D)A2K*83NMC;M,4@.67?NN/5)(B @524 gagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttca + *KGBF=M78LN86MGA2KG2L3K:,259M9+B.HI8DD+?GC0H@J4;&NN0E2B9C)J(8KCC*&/>:I:)36-6M<@BA:*/@7&-&62,M>E.L38BM @525 aggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggccccgaccttgttcgctctgtgtgacaagc + 0K>*K?65**&=<-A.3NB6>K&FE2.>8J&865,D22I??L/;A@(.LJ&<0C9<7**M,4/A4,@I>CH;BFM/94+K':.C:BH< @526 gaacggttactgccaggcttccggcaggcgcggcaggcggtcgcggaatcggcgcggtagcgagcggtatctccggctccggccgaccttgttcgctctgtgtgacaagccgg + MN@B@JGKMN'/CGKL:288B*A,1?)?*)'.4I7CB@A014@097<@8?0L3G(J9J?/CJM+*9=N>7HN=<&J?'J3'KH@)=F>(318>D2CM7 @529 ctgggcggttttccggcttgtcacacagagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcgaccgcctgccgcgcctgccggaagcctg + 009H69>LL9@@A?2B11AD'9>K-L9466DG0<)BA(6?-0+8HJ=L7=A54IN?L+J/B(/1B0)>J@KEKD(@0J0=K*'+'7J>3/H@=/5(*/&;8GE0149)I23A-D @530 atctccggctccggccccgaccttgttcgctctgtgtgacaagccggaaccgcccagcgcgttgccgactggttgg + 0.'N3.159A)IM3,ED<'.JNJ(47087<4.23M+&@,':.&0G4-F&FKE026G* @531 ccggctccggccgaccttgttcgctctgtgtgacaagccggaaccgcccagcgcgttgccgactggttgg + *(=1BNE1;7JJ-+:GH:)G,K>1>GC1,DA:BD(DE(/A:MN.:IL/?7AA)//?MI@E>K7NNJD;2: @532 cttaccaaccagtcggcaacgcgctgggcggtttccggcttgtcacacagagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcg + >FM2)*+H+@;A1265=02HN0;/J?9;42(03;E(0/B/DE@*MD5(C'L&0D9;3,-IA4-C6&L9HE?(DB)83/7KGM7H>C'IN'7N@6@,-<(9:65A @534 tcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctgggcggtttccggcttgtcacacaga + 0&)IH*;-44?:,(:L.CB+131('0J)&*A@BA8*:''CK-F;&>>@)A'B:5+':*L7)0=G*:JMG&A9 @537 acaaccttcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctggcggttttccggcttgtcacacagagcgaacaaggtcgggccggagccggagat + 000L?GN7:3+G:23G=4;C=EL=,B9B+&<+&L/@71=+*JF-9>-&=HH@71*80)7J-275F1-(=,K=<)6,'9'EM@@KF?,;-,AAI0GFKB?;6B::3,L& @543 tccagtactcgtgcgcccgccgtatccagccggcaaatatgaacaaaaccttcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctggcggtttttccggctt + 00000G(?/BM6I?(3L@*/CK-L15<)GJ;18NF-93K322;<7+-)44@J+:N&;:27GE+>9>'43I8D+(&>AK2@LI'N(018*(9B/2B70=5C059K72A043B>*G @545 atatttgccggctggatacggcggcgcacgagtactggaaaactaaatgaaactctacaatctgaaagatcacaac + 0>8*0H9K1@?,?'*LH>BC'8'D7C;&F5E@GE(&?(892B&L@*D&G6JCH*;HK7?K4J-,?2DKE46C/492'B&,D0LA..;70 @568 gccgagaggatcttcgcactgcgggtgacaaaatccagcttcagcatctcatcaatttcagtcaggctgaattccggcaggtcgtgcggaaaaaaaacagcccctgatttttgc + 00000008B>?&N462C1A8?M*@/05=J@)L+'H'C--LC(96I&5--6-//I6-=9/:)+J:@ @574 attgatgagatgctgaagctggattttgtcacccgcagtgcgaagatcctctcggcgttttttattggtgatgaaatcccac + 000244B-G>.J)66J572:'J?@M0CFKH6*KNG0=G@J1>CL?+N<+(MK(:<7=,0H:)4G43B;'8@05>FKF2/('B @579 cgccgcgcgcacgcgctcttccaggattttcctgtggatttcatcaccaataaacgccgagaggatcttcgcactgcgggtg + 000BF1M1LDJ&<&E(61G/&EKKJ.H&'&?6+034AEK>1*68&==D'>:,-FNI,7/2M-(2=L8,,(A8:;@/4F80:, @580 aggcaaacgccgcgcgcacgcgctcttccaggatttcctgtggattttttcatcaccaataaacgccgagaggatcttcgcactgcggggtgacaaaatcc + 000000F087'8F'L))8(9E7CEM)&GCD'G9LM+?889)'&3?-/M<3F9M,*0N3BH?*.2F?(5H+');J0;3:A;41N* @585 ttcaacattggcgaccggagccgggaaggcaacgccgcgcgcacgcgctcttccaggatttcct + 4B'JJG@F<4)*,.3<3/'H(G)??HN*:NA585GC)NL55?EK?<);0?G>2-;MHL5MCD4; @586 accgacatcgcttttcaacattggcgaccggagccgggaaggcaaacgccgcgcgcacgcgctcttccaggattcctgtg + 000/HAK45(2K.B/@<(F:0M51IIIJ'=B719F6KN0I'D4J(3K&M&61K+::+.+(+A)N&3DC<4;,+=+4C))=K8=A'3.I @595 cgccgaaaatctttaaatgccagcgttggcccgtggaacaattccagacaaccgacatcgctttcaacattggcgaccggagccg + 073)0F29H2GCNG41/DK5F6G7M+6ENN7BI31+6+@4B<<*K*-IHA;(:9D=E'IJM*7HNA:9AKJJ',+6K76:3?=8, @597 ttccggctccggtcgccaatgttgaaagcgatgtcggttgtctggaattgttccacggggggccaacgctggcatttaagatttcggcggtcgctttatggcacaaa + 004&)3K/=>(5;J970N'42M-,&I--/AJ+NF;=N>B8(L1D6))BK)E0DI'@147JAHE3.2)@3MED80;8CA@2.I9A7.;<1@>>I=FE @599 tcagcatttttgtgccataaagcgaccgccgaatctttaaatgccagcgttggcccgtggaacaattccagacaacc + 000HD::C*JIG&@3JGE0'KEBFNI0@.5:6)(L;?)==IN&A=/>6B9;70:NM2*G003J-/E(:8;-C,<8+L @600 tgttccacggggccaacgctggcatttaaagatttcggcggtcgctttatggcacaaatgctgaccca + 00&?G/KFED9-H69=3'1.5>9+HCF*D.@.3H'EB2C27A&F95&2(LC7G6JN(51BB,:@N?AA'@2H;I @620 aaaaaccgtagaaagcatgagccactgccgctccggtatcaccggaggtcgcggtcagaatggtcactggcttatcacc + 00(G,LB?09*=B2;0I'6I:9J1>C&I=3&+29/-;8+.@C*7=G>*3CH8-0.50*E>9 @621 agtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtta + F585):=+&LK(2&B'&7*&>&+LG<4B(?064L9H9@?NC64-?8AJ/* @622 ggtgataagccagtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggttttaccgaa + 000D6N=+MLCA,8C6*@C<)G6C10A+/><7H*?@-:NFD;79HCC@G7DC=J=*==C=<&5-ADAN:,@8:CHNMK1HM1-+9;9B:)I8M'>6NF>/>76D*;)EF?0?L.402 @625 aagccagtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgcttctacggttaccgaatgtgaaagtggt + 0000J/K97G4=;HD*N@J5:D77C13@&A'8/*:<;.D?1)>IC5)A)>?7@BB.3GHD3G9:IL=D8536CE0D/(1 @627 tgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaatgtgaaagtggttatcctctatccacgaggcaaaaaatc + 0008:L07J+//;KAM&7N1(3D(&9+HA5'7L6E/.6G4)?L8//,-5L7N8'7N*KA>7)8EL?C';E7H07./:8863EA>&5CJD&<5;K8&G?,3&D8/(B<'BIF=N0.*?L/H*-/(K0E6AF:M?0@ @635 tacggttaccgaatgtgaaagtggttatcctctatccacgaggcaaaatcagtccactgcaagaaaaactgttctgtacattggcggca + 00H/NK&2.KM?B8K0MF@55F)H914DM,4MME>E*6M)'<3'J,AMHBMB';@,KD*E*@FD(+DCE78*=?D4,*86588AM6M51 @639 gcaatcagtccactgcaagaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatt + 7NF3C,);'(8+*8>N<)?'4=MDMN @642 ccactgcaagaaaaactgttctgtacattggggcggcaatatcgaaactgttgccatcgacggcgatttcgatgcct + 00;H=)->D-F(IN5J-6N)-+@*25KB8M>3/(.,;6(>E+A/)/N9)'*L0ED&*4B0/C8(&)-42DJ+@;ALM @646 aaaaaaaaactgttctgtacattgggcggcaatatcgaactgttgccatcgacggcgatttcgatgcctgtcaggcgctggtgaagc + 0000ILN23K'II,EG586K*>9NJ00GM:@2B(10=4:6,MI/N&>/L)H?,1EG?C5/E,2AH::3==6.:GCE&/MA//)2)(//H6'M;>BC49 @656 gccagcaacggctgatgttaatcgagttagccgagttttttaaccctagcgccactttcagttcttcatcatcaaacgcctgctt + 000A(CL'7D(=>N&9).??2J8F81AD0N3,BG.:>07M>H3-'&@,9FK&&:@<=BDC:NK:6KM66;33?5MIJ-HE6?=:MC3<.&70,H0(H56N@/B4GH @667 tgttgcgcagctgccgcaggagacgcgcaaccagctggttgtctcggtgccaagcggaaacttcggcgattgacggcgggtctgctggcgaagtca + FK,F8EL@4(F2M91>NE->B/A/I=CD777+'4D'(,4FME;J=''64:D23>;K*J'H-H-9'.BMAI8/6I-I) @668 gcgcaaccagctggttgtctcggtgccaagcggaaacttcggcgattgacggcggggtctgctggcgaagtcact + 00.31N9/)B1012LB:K6:K+C@<6LI,?FJ3J+3:(65(9EMC>35A.-02..MB-/G?48:M:8L*0B-F+( @671 tcggtgccaagcggaaacttcggcgattgacggcggggggtctgctggcgaagtcactcggtctgccggtgaaacgttttattgctgcgaccaa + 000<.N:FN*7E<9(C;0JAE>(I2D=*J9?KMG&MM93F-?7-&(GH,JF71=,=6IE&;'B-DBCCDADL:K1CLAD>&+IAI&D'2=B@'/ @673 tttgggggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacgttggtcgcagcaataaaacgtttcaccggcagaccgagtgacttcgccagcagacccgcc + 000000D6(+*6-)):=166@/&&'55<+-;&DJ@AC&3FCNF27K671DLEFFFE7I@BG)>:1IL1)8,,9IMGI';I@+N?E@I3G2(4LCK>&98JL:CD' @674 gagtcgcttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacgttggtcgcagcaataaacg + 00B:C@9CA=B(&4>F*)GB-JA-='&8<0<4=GE0-(DE:3B@+EDDLIF/;@JJ('ME.F*(84CK)=1A(&-JK @678 tccatcgcgttggataacgtcgcctgagtcgcttggtgaccactgaccgtcgtgcaggaaaacgtg + 0?-*(?-,.'AF3:1:0I';.D7+(02N-DA/,8/5I)&,B-@72.*B:.C19,L+JH(0:=2>'/ @679 cgtccatcgcgttggataacgtcgcctgagtcgctttttggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacg + 00B1>2+08HL)LB<>+83M(NNH9?H)6090A<77=IG0DKNJ.:'J)357D>+F'H4&.2:?4>'-(6L;=+2LB+57:J@:-7(FHB @681 ttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttttttgggtgaccactgaccgtcgtgcaggaaaacgtggca + 0000:7:<'=H*/:/<&D5D92;E*3*4E?51?0K9E.50>D=M1.GJ3D*.-A84E--H@7A2H*/9G+61KH1'F/G/(E+&K<2KM @682 gttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttttggggtgaccactgaccgtcgtgcaggaaaaacgtggcacggtatcgtt + 0000&0A3+4G:*3+.4M+BI:0I9&:/>>J,1='EAD:24B'C5+,:1)89=ML=C-&H&(GG*=A4*?3;4KL<0=F2''=L3F'LI./J,0.H:I48579 @683 ccgtgccacgttcctgcacgacggtcagtggtcaccaaagcgactcaggcgacgttatccaacgcgatggacgtgagtcagccgaacaactggccg + *EG85/5G;+0N8N=)1L9E472N.ILF>/@G:H-<;:*GH5;F96B9)'*3E65-B7HGK3BH)98N'=I2FM/<)G4>EA7+@LI=*.6/30:: @684 cacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcg + 007-8)KG?1:>N2HG?KJ5?>1BK0137;L'H:J7KD1JI/:L'3@G1';AM8NDI-B-;>HG86(;9.-C*,M8*4>3?76,&@BEC;C&J?E9&-K1DEMEB @685 cacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttttgggtgaccactgaccgtcgtgcaggaacgtgg + 0D9N2C5EG*1>6JBH1?0B(.N(0;LLJ&=0E5E=.+E'LL:&;2M?GIK(3)+A'>2M8'<*,9=6)H.?&NC-E:&B7A/NAAB66A4@CC368 @686 cacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatc + 0000,BI4C;6C*D..L9+,&+&@:=32IG:>-9JB4GL+NI@G))@*J56E5::=+&'9B8:+0MM.?AANAAH>83@CA)GE596:M?7M6.-?@71>.AG-KE?.L? @687 gataccgtgccacgttcctgcacgacggtcagtggtcaccccaaagcgactcaggcgacgttatccaacgcgatggacgtgagtcagccgaacaactggccgcgtgtggaa + 0G=IJDI'=DI/MI)762*8:(/DN9C,&3K*;'9@*37;KJ8;&(K+B/39<&NI=27(C>,M4M4.E+8-NJ;*;A4J=D>>4N0K3,(,(4>DMK9.D8?;(G.&?3C @688 gcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgag + 0M6.41&KH/A*A/&C/B1,5-?=5G;IC:2''+2@B>F&3)JEFN;00K1&46D4E)C/IDG @689 gttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcg + 003*61(@174CI3JK9+2<>C0;?B&M<6A)9-BB-@4-G,D1((:.E,'B-4K,)6=3?EB(A6.@4'/C)(6I5-HF=C**HA>(/'<+/>4NB&/87'KD@+DC:H1?9;LHA@54LD6-K'I@*K5J+'KGF=*);9=)'GKG>@50J.7F2>-7',8@D?EH,3< @693 cccagctcttcagttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcg + 00+:EF,'>K,H'LG.'&4(5.=B=1C/1GH&(<*6I=BK8-,88<';N:NJ14&JI;*M<33/* @694 ggctgcataacccccagctctttcagttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgt + 00000.+J'M?E94D@FCK=@7;?A?H97'1D/.14-+8K/:5:NNFC,M>IM@=68NMK739@CE@3IFKMH185LI2M:.@H-&'M @696 cattgtctgttgcgtggttcatcatccacggctgcataaccccagctctttcagttgccagattttgcggcgga + 003K*M+LID6'BH87J527-G6DFI4(<&-B>7)58MI45=>K/8;3C(3+@5 @697 tggccgcgtgtggaagagttgttccgccgcaaaatctggcaactgaaagagctggggggttatgcagccgtggatgatgaaaccacgcaacagacaatgcgt + 00000-6JGGB+15&(A58/41C7*&6.0L?;8K2K5,,1501'+1-99:8JD,@3FM,/B03A+N3AN/42+H>-:C;L)75'>3JAAI.F@0H::D;)8@+-2:**9<+MCG-;?K.(.+D @705 atctggcaactgaaagagctgggttatgcagccgtggatgatgaaaccacgcaacagacaatgcgtgagttaaaagaactggctacacttcggagccgcac + 0(50@?=7C&M+,6.2-LH7B>BD1NC?.I*3K4>NL<&A/6(M'(/5>8':I8C28.?=;H*4KH+:78A8?*9D':?0?A,2>J>L7<;D=0+7D.=24@JD8 @710 ggattcaactgatcacgcagcgcacgataagctacggcagcgtgcggctccgaagtgtagccccagttcttttaactcacgcattgtctgttgcgtggtttcat + 000'?@4ECE'9&3>?8?C)3)HJ0H.-.GK/*G(M6=.F5G>E7'1);)'1&E14-;?'9D69L*8G4=GH&+8E<=5/:34'B1G@0-+;2-*G=H&;H&.> @711 gcctggattcaactgatcacgcagcgcacgataagctacggcagcgtgcggctccgaagtgtagcccccccagttcttttaactcacgcattgtctgttgc + 0000I>1K/*E)M*3,4.E7D?29F:D055I.@7LH*D19&-.B;A&5086<&*:+&25I-H&//1D,M9A1:H,<3GK,)*NL.0L6>CB,5/3<)*?G' @712 aactggctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaat + +MA=07EN--&4?.J1A8NF''+.;DILL.&9E+KH4A+;E1M2L98+>+9,G&KB5D';,4>L7G26I&1 @714 ctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcacc + ::L4G)+K/5@IHFB7D+?+&&'0=J0:G(J;=D-,J1EL.B6NA*87:?J;MIEG:711D>;,6MF>'@)/6EC(42?0'C98?F=H;LA1?/B(?<--L<,EII'H:/HJ(5+2A9,J)F; @716 tcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgtt + &B.?MEMIDDF6/&046?M5'1,9:G14A9H;F*.C/=DACNI'27&>/?29:CH@G>..M<01-HMD7-67/2CM'=(I)CG(1L(C2FFH0G98@1?E&7CE.85.995H721L;>IIB-18,I2)AH6 @719 ctggctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatt + 00,,5*H9G(15@9L/*?E.'?FH37DI)>*@;1-@&)/(7-*L*E*33(@?M4NL@KHM(2&L7'5D6LJ4N<2DE37L9/L>;?3HJBD.DE/3/G'4HF;JH'=-: @724 gcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaatttaaagagagcgtgga + 0G;DN&CI)B73D)(E)>DNM6(E.)'I>B;3)B-MKJ<.:*H,*0D@/'/)LE;*38>G&.(5F:F/KM4A.K+I:LF2L7 @725 cacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatttaaaagagagcgtggaagc + 0003&@;+:8/'@:E<2.GJ.+?CFI.M0E.3E?&D>GD::?&:'(85=,J1710CA67*3E=M9J0@D0'.@>GD4'*-;.CAMH8:)J/E+;'+L.@J6.:H6HAN @728 ttgttcctcggcaccgcgcatccggcgaaaaatttaaagagagcgtggaagcgattctcggtgaaaacgttggatctgccaaaagagctggcagaa + 0000.9FBM*8*8B)58I;=.J?5A16.K@41)*-N=I>'@HC96+.AJ)NC?K*/CC60,1G1):(N&18.;M''7JHC0/,1*1;2)E0/6D@4'0'+:=2N>B9:+G('1& @730 ggcgaaaattaaagagagcgtggaagcgattctcggtgaaacgttggatctgccaaaagagctggcagaacgtgctgatttttaccc + 000&K+@L:AK+G8<&5(:44(J:')L-8>&E(/394EN6-;N/F;;-1<.9,919&4HM(0?<:FA:H-*>3B5I*:J,:.G?13> @731 gttggatctgccaaaagagctggcagaacgtgctgatttacccttgctttttcacataatctgcccgc + 000000'?=CAHA-MIGKA3(*-14IJ,:LH+9.5;M<4H:K/ME'@@CJC-;CAD6AD6 @743 attgagataatgaatagattttactgatgattcatcatcaattacgcaacgcagcaaaatcggcggg + 00-0DN?GG'C:<>@H')+>''D89MML;K,,L;4.457>,HJ;7L?M67G>BN/BN:36*KJ+@HB @747 aatctattcattatctcaatcaggccgggggttgcttttttatgcagcccggcttttttatgaagaaattatggagaaaa + 00000<6:)LAM')E67&=4N'4,93JMFK&*55&7E-&&H?B+>@A,G/02:BG1I8DHALD.'&>+5'460LL(L7&; @755 tatccggagattactcgatgagaacggcggttgttattctccgcaatcctaatctctaagttaccgcattattgagaattctc + L2DB85E-9;,41'03=?+=>5)4@2=8D>GI5B7.M3D.'2=&60)4HI1.&LIH3*6N.4/N4'A,1,CN--)2DMH.4/. @756 tgcggtaacttagagattaggattgcggagaataacaaccgccgttctcatcgagtaatctccggatatcg + 8=3GA+MK'C./E/*<)I968-J,&CH89I+)&>'/H>@:EH&5*/>D101>8L-I;F.?8K'CN3G&?.4 @759 ctcctttatcattgccccgttatgggtcgatatccggagattactcgatgagaacggcggttgttattc + 05+KB?/I5'E94)@14CE=C)@)/.J*7J9F/@J9,*L:C++/52758*AN-.K*'L6*+4E9K4+B3G>2DL<:IJ8/=A97I><,&)G03L3,A:N>MBI8.K6@G&@:3J @131 gatcacatggtgctgatggcaggtttcaccgccggtaatgaaaaaggcgaactggtggtgcttggacgca + 00H-&*4BEH4J+=79L469+F9G.(3>:)+5LM3( @137 ggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgcctttttcattaccggcggtgaaacctgccatca + I?7H+0F&510-4(<8C>);:E'C,4AHKAD*AD>GN3,*;A(9<=8:IM):ADKE@/'HE2;;;8+/?LG(D0*6?62(I>FE1H026N(8EE0=GH9?<>FMA6LEJE,E:5<875=;4MG1>1=LFC?FF.EN/B'EBJ&+)3EE3*6BC7?M9::26;-5/D+I9;22D3NEJ'6'>,N,D,BKN:6784B>;IAB':=;@-/6N:B,=J0+FG30)C6'CL.<+K<: @142 gtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagca + 00L=)H.405GF+=C-:A2<)>/>E>D4BE&+B:AK27>09 @143 acgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccg + 0009F7HI90:/4GN2B&M59,*AM(0&60N&3F?3L=7EF7NMJ?N8N-.?2*0,<)0D2<&)8BJ*?LCL @144 cgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccacca + 000&C*&5GMB4=5F'LHH@)9=3J9G+3L(+FEJEC)>2:D(I/N', @145 cgaactggtggtgcttggacgcaacggttccgactactctgctgcggtgctggctgcctgtttacgcgccgattgttgcgagatttggacggacgttgacggggggt + 0000IDD:);6.2JB:/3LKL3E7-2)'+3&.5J2(:6*;J4(D@C*>;NA;?;(AA7@*>K2J:1IHG&;F(7,.:'F;MK&2E.B=3-*(G-C9B:818I2J=@- @146 tagaccccgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgcctttttt + 00000-E6)/08HCK.;>I;?)*AN.5KCL/IHJB-3(83M;E4,I6ML65'JH/K5.7>8;B0'D @149 cgcaggtatagaccccgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagca + 0000+899@+,1HCGG2-M19*FE85BI:)5=953E4>)02&*'B@B'JB>BL/2+;,+'.5C,8;AHA+)2L?9*C4(;ABAA1@-6(/)61F2)2)DDD:5F,NGHB @151 aacggttccgactactctgctgcggtgctggctgcctgtttacgcgccgattgttgcgagatttggacggacgttgacggggtctatacctgcgacccgcgtcaggtgccg + 000).K7JA0F29G5(;H:,?3N:A9NI&F8)>15L1<@5A7?JJ5.HBA1NB58='3BA(@:HDE&+0>)A*.<,'(77H&GG0/2L8(8<8'NN6F.:2+40*?/-3FN @152 gcggtgctggctgcctgtttacgcgccgattgttgcgagatttggacggacgttgacggggtctatacctgcgacccgcgtcaggtgcccga + 00/C+K;>474J:N,K0ECELMC++HE-*N7M+.DHH-=8AABJK8-C&-+-8)B5@.34DN/:1@8J;,)-.225E:BMN @160 catcgcttcctggtaggacatcgacttcaacaacctcgcatcgggcacctgacgcgggtcgcaggtatagaccccgtcaacgtccgtccaaatctc + 00000(75E,/5><-379KCL7D@3?JJB&)+G1K.HLK48?F1AG/5D:);'E:M6AEBIH>E70?:IN'D@-,GJ/N00FEC;/()=>@AI=D* @162 tggacggacgttgacggggtctatacctgcgacccgcgtcaggtgcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctt + 00000/60K<.C;/E?7N:NG?&FDHD/J6?J25.*0:<4*/@N./JM'=:N:I-)19I,):'79N/>F?GA.898KJ>H:/6'?BIM31,M9HC@BHCC?C.NNG9', @166 ttgacggggtctatacctgcgacccgcgtcaggtgcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctttcctacttcgg + 0H(1;<1>(.83L>99474AE<2MC4./'J6;JL<7J.D?/=,//)I<,.;I(41'@AC&,<27H2:87G<&5NM)43&K372?MM97 @168 gcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctttcctacttcggcgctaaagttct + 0;&6GM3<,86-2CL-2GH&(,KL>-9MFIG887I;F5@LL/FKH+&:17CB+9NF9,8/L9@<**EC,6M355/5KH+E4;KGH-I?@6(70AE;F.,D4F@GJ>-+4BEL&=J**1-:+@.3C&>DE;C&I/>85J)A';,L5:?A/I3<8F*.DJNC9C:-E @172 tctggaactgggcgatgggtaatggtgcggggggggtgaagaactttagcgccgaagtaggaaagctccatcgcttcctggtaggacatcgacttcaacaacctcgca + 0001??5DC7).//M7M5/12?N>79-/K))-5?0M(73HMFF:FI(/*=K:,='G+A7B6'4DILK0-DK@+>HI>A>N/0>GIEJD(3=6761:'>2B/@8/E @177 agcgtacctggtgcttgaggatttccggtatttttaatcaggcaagggatctggaactgggcgatgg + 000=7722(3?,M'..)E':EGCE(N'@K4/&>6&'C)1-/A;&:;-6&CM*74F)GGI/&5<3CE0+>4-5H,D7JF.-F(07>3?D:8=HL? @185 caccaggtacgctcattggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctga + 0005,B6(1MJ*9;+LB<=FIEKFG1E+@5BE-947?C2A8'H6<7G&8N2+14-0&A;7=?E*>FF'M @188 ctcattggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctgaataacatggcaat + JIF22>.NJ0/45N.BB1*A&.M+,)E)2;:<.HA:1>1A52JMM80;I*E8@&AB1I:CJ @189 gaacattgccatgttattcagattggaaatgcccttgaccggtaattcgtcttcatcacggctggcaccaatgagcgtacct + B1>7904BE&HG/K/3K9(9B.=J=G/G;<47-5*-9CFIA?((F5IJ:0CKLF8D?3FC759A(6=2618(7;EG2,/.LN=C)A97(2*K)E((*,G5D?*C-N4??DME&I6KL9M/1@6J?MF9F&D6/0(5FJ4K,;F0=M4A;=?1AN*:+N3+*J=?B1;)6&4:K9(,11IN7G-N1H35>GBBF0*3*'7'D> @192 ccttcatccccggaccagaaacgctgaacattgccatgttattcagattggaaatgcccttgaccggtaattcgtcttcatcacggctggca + 0E=;)>.K6)E;DEJI'(JF2@C1.=A+112CJCL&G?48>08LA(:0EK)JN0:A);@J;5(M&5GF37HDDHMF @195 tggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctgaataacatggcaatgttcagcgtttctggtccggggatgaaagggatggtcggcatggc + 00000)72BLGB>;:(/)&>@(39-N5F5>DL@H<>4C6J3N5KM76GN41/4D7)NM@N+,E)8,H7*I?* @201 atgttcagcgtttctggtccggggatgaaagggatggtcggcatggcggcgcgcgtctttgcagc + 0000:*NEE?65I4H;1+A/2;1*-H:=55FK.=,2&@1NH0N@>IC/6 @205 ggatggtcggcatggcggcgcgcgtctttgcagcgatgtcacgcgcccgtatttccgtggtgctgattacgc + ?-E>9B;BJ7/51BA?:N70>+(:-?42:;N;7:-;@8IA.90.* @207 agatgattgcgtaatcagcaccacggaaatacgggcgcgtgacatcgctgcaaagacgcgcgccgccatgccgaccatccctttcatcccccc + 00=2G+8I>9(MFL8+20KIH6,7<*=69JH76+0MMB8;1+JDI''2:JB9=:F65<370I24K0A+LI @210 gtcggcatggcggcgcgcgtctttgcagcgatgtcacgcgcccgtatttccgtggtgctgattacgcaatcatcttccgaatacagcatcagt + 00K9EH2066:6B;;84DN9K=B9'9K2L?LH-'&FE.,&GMH0'';.(ML21:B<)2,F7F:@3;35->+NHMIC=7HK*I*1,55A3:1CN6,F?;'*=?(-))=-=A179M9C)M@@8B/=GD*J*5H&>9=L>;/0HB1)3GJ=)C:M&5DFAF;;8I2.0/-48*1:+@FK @214 gcgcccgtatttccgtggtgctgattacgcaatcatcttccgaatacagcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaa + 00*6C)6CJ1KCB@537DNHD=:'7I=7-62>0KB@9'HH/,;KNC;LA6@,,DI+9&+1L.934D?&B:*IMMB:73KKE=9L>3275,1-B;)MA8* @216 gtgctgattacgcaatcatcttccgaatacagcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaatgcaggaagagttctacct + 00000@K9(,DHFC0'+8(NC4F50H000D165&F/2M3GE?*A38?<>/:=A89(G0+-9L,'.'AHHAE((IE'9/?,')9E.253@3:EGG3J'--J, @218 agcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaatgcaggaagagttctacctggaa + 9(D-C320J22CKGGM;:48BA@A6?A4BKD-;5(3,J1CI87KA66>/?)&NG44;3A-1@2)*D:(9*2-09F @219 ctccagtaagccttctttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcgctttgtggaacgcagaaactgatgctgtattcggaagatgattg + 00>2B93(B?'7A,?A?@AMBJ;'&&.('?C,2;)2G4&CH82+166BLG>08JJHK30E*?69@-L51>K4,=-6'N(D7.-KI4E;,)+C?.()835);A6G77J7@849 @221 gccgttccgtcactgccagcggctccagtaagccttctttcagttccaggtagaactcttcctgca + 00+(45D(>E;K+F=DH('H/D/';L&AF9F?*:J9AAJ35>G161--4'KIDE5,1C@??2(BD< @223 tggccagccgttccgtcactgccagcggctccagtaagccttctttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcgctttgtggaacgca + 00.IN9DJ'D;214><*69F3808DB(>GB+NEC4G7N19@=;E>A?3J0,@>NA55I+52>129J,GK)J4+G39'36NJJF9?8C?9:4'M0=6+E?5359,=G;K6,)F @224 ataatggccagccgttccgtcactgccagcggctccagtaagccttctttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcg + 0000FB5(>B0..-,6I,NA-J,>@I868,19H+/@F/N&.KCK>7C:B.(A:>2))< @225 gcaggaagagttctacctggaactgaaagaaggcttactggagccgctggcagtgacggaacggctggccattatctcggt + E<,4@0B551<40I&:B>@54=;>+/,GAKAI9I&4139F&=:5)<3EEE3N))N2L6BHD':'*N2;AM<,17@5D)(@2 @227 aggtgcgcataccatcacctaccaccgagataatggccagccgttccgtcactgccagcggctccagta + 2-@L-;1J.12J(<=G/5+FB5>*J6E;*=M&6M=-)17NDMK/*-, @232 tgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaagaatttcgccgagatcccacgcaaggtgcgcataccatcacct + 09CG+5)&7D80)D.M,07F=:==)A1'-*B(NC&B29NFB,?'HB4D,D1N20/9C@,>D:,'*2'A(01I>,?9@ @237 aattctttgccgcactggcccgcgccaatatcaacattgtcgccattgctcagggatcttctgaacgctcaatctctgtc + 0157B=7C<<=MI/,(IB(F&<,N,56BLAM-JD-4I*M)C@E85LFAI+6AM9AAA&31*0N;I-MA'*KB6ELF@I,J @238 cacgacagagattgagcgttcagaagatccctgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaagaatttcgccgaga + 00(0A1L=+=A*+D8L16L&MMGH8K6/12?HH9@,3JH=*BA*8>>.5/,:7B<*G:+E+N?FIA9JD<6?5@?03,*<(*69889;2DEC @239 ttaccacgacagagattgagcgttcagaagatccctgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaag + 0000HD2NG95*B=N-='>60/M(BG=N4D9'4K7D2((E;@/?=0/=2)8J2ACK3B4C:;NN,/AK(3?H05M73&:&9;= @240 caatatcaacattgtcgccattgctcagggatcttctgaacgctcaatctctgtcgtggtaaataac + 00000=6G+NN&HM'>NC2C3D/+1F(FN=7D<345)@<**?;39?K7*'13EG@/7=J0N*H7I=. @242 cagggatcttctgaacgctcaatctctgtcgtggtaaataacgatgatgcgaccactggcgtgcg + 000007:?G*5843,G99L:3&*( @245 gatgagtaacgcgcacgccagtggtcgcatcatcgttatttaccacgacagagattgagcgttcagaagatccct + 000034E0J1)H=4FLJ6,9=6?>:M65EL+-ND-FGJ5515I-9+5AI)D69N:IF<;=5J:8N9:2I5D5J<+ @246 agcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttaccacgacagagattgagcg + 00BK,K4E-L>(L9''64A6@HH>>/)G&J20.JLI5&'J@8;2A&I, @249 atcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttaccacgacagagattgagcgttcagaagatc + 09.'A&1&JAG@/A7I0J'01EB)F-I9I<7(M33,D>G-15'F&&'<>L-(5G?320(.+BC.8'+7L31GGI6G.247I933L9)>>'A. @251 cctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttaccacg + 000,J=KE?;C-CD6AH@23+J@&8?3E1@8=JI./<=,>95.-8?0K/*>CF?L@)@*0E&GAAH&I.5> @252 taacgatgatgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttat + 8@NMID/I)'8JKA26KH@K@2A7&?HH028&=:/6?H897F?2E=;D2+F6AAGM@*G13LKE<( @253 tcagggatcttctgaacgctcaatctctgtcgtggtaaataacgatgatgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttatcg + 000;N3C2/@<'71NE1J<5B<-LID0H*,+N)G)E,4)=3-:?L;-2/(M56:LI1*:N.(AE9H96LJ6A=D1(:&N;0-:A>A0.JE1MM5LL@GG @255 cacttcgataacctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttaccacgacagagattgag + 0000H<+'A4A.DG-<;.A.-HJ/7;5H=?KC8I0,5MH;2.F?=:0C,K4&9,4/)@JFHE8,H.&)G,I6:CN25BKDFM1+7/658=-M>H @256 acgatgatgcgaccactggcgtgcgcgttactctcagatgctgttcaataccgatcaggttatcgaagtgtt + F+B11,?-9I:)@60;,KMKG&F'3@?.=9N)H/,BE-3/JF4?&?9B/8*:36.4746=<9D>?DH.D22J92N;>(J+7H6<9* @258 atgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttatcgaagtgtttgtgattggcgtcggtggcgttggcgg + H-=2FK3C7*H7.9@&H:F4LD=(;+&.&I<3E87J,M+K+;1C2D-(=IIA47I-E46N;G7:E528K,0L1*-I?3/NG77H);&?*@+N=? @259 ctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgt + =.I;NB,<<.JI/FK.,'J7ACL+NK=NH.2FM)5;9;7NBNL:,KB/)3MB6-0L:-5E-F>DJNEJ@,@63&04H?78E;B?G2DEGJMNJN.'8:8;3;F2C+'I17:0C @260 atgctgttcaataccgatcaggttatcgaagtgtttgtgattggcgtcggtggcgttggcggtgcgctgctggagcaactgaagcgtcagcaa + 000'9K5(G4<*/4A0BI3@19/KFD@.J>MMA96/-G6,2*/LCB-941HFK56=5L,29)8AI942(,/L5@+5KJI?/@;53(93B9B1:?J2=FN;B&@>.032/:M+1B52L=,/*DB=2'G7I<.J2;8H:*I>;GNNC@9G-='LKD;F'6E @263 ttcagccagctttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcggtattga + 0000;;0KD2-D-1L0)/M1@A3>,9@DE-4)DB-@*C>6=,?GK)J8J4.)2C47&9M1.N0='1D(>FBM65ID,1=);FB7D.7GDI1>+I1/L @264 tcttcagccagctttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcg + 000,?86K-E'/*60I@=2HGKM:)JDK'>C07HF.?;?)K+:A;))F3=NL)*D.LM1AB,N70-+78E2J&M(.*&D@'A-G)3.AF>1J @265 gtgattggcgtcggtggcgttggcggtgcgctgctggagcaactgaagcgtcagcaaagctggctgaaga + 000('9@7C:L8M/L7H//A-M:(-@FH.G255MD0M+;:1(DLJCH<.C,9+1N<-F=9*NG5:A)I31 @268 ccgcagacacgtaagtcgatatgtttattcttcagccagctttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgcca + 6CEBI5GFJ'61D(8:C7C7F6K>M,6+&9N*36J,*?0;E/G6?3 @271 agcaactgaagcgtcagcaaagctggctgaagaataaacatatcgacttacgtgtctgcggtgttgccaactcgaaggctct + 7;<,(;)=H?(?G4854*5;/N*4KA?'AJ;6BL'@:F*M)8@JH,HH10EJ('&C';.*0E:'()@'(DFHDM)G)F5-8@ @272 aacagagccttcgagttggcaacaccgcagacacgtaagtcgatatgtttattcttcagccagctttgctgacgcttcagttgctccagca + 00C5,7FH=828;ILNJ(6A44DC&9L3<7&N>B)6'2,J2/KFI0N.=D7FA7IAH6'6H/N&(()FF&F-'E5&L7L6E,,*JI/+9&@83C/KJIC*IK)5*2H662+N @276 cgctgctggagcaactgaagcgtcagcaaagctggctgaagaataaacatatcgacttacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaa + 000),<+H(F48.:M?0656FJNH,.2@@A(2ED'IB8.92,:9KH7>5E7'5J?M&)))?:31.M--5;=B+J=F00&7@.9)6I3@<)@>?3G:2AD.63=/F+:87<.7.=F @278 tacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggc + D4.BA)670:MAL;'J'(;0FA)4I80'0M2+IK0?1IJ)47>*1/=CC54=/>3BNC8=0>B;.7;7?>C'I4(6)L4E-2HB(5'N::3KFN,?9/D)DC4=4J,*,>DFL2'+G@@;/K,4*H1(A16?.?0DBDE @282 gtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactg + <+?)=L7@N2FGJE>>+ED1J9B5;KFEIE&//)4*3C.A8H?3C0C:GC)33<*8NKL(@@@46AEJK)J @283 cgccagttcttcctgccagttttccagattaaggccatgtacattggtgagcagagccttcgagttggcaacaccgcagacacgtaagtcgatatgttattc + ;6LC2@7?.DL*;+254=H4I12B.'3(6>5=3A=39N7D/6)5IG5G(F(C2A9@;DC'=:(3,8>LA33J5<95,,H@:.A=A''-I9;C0=;A*+)72. @284 aacatatcgacttacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcg + (4-*2>G*04M8:)C@+E10IEE,0/C6EL08=9,.)NC5,I:)+7'&82'JML;/.4GHCC?G,11I3IDGI/(==1KLM'?1C:5=6DG8=-BHN= @285 gtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcg + 00?>EBFI>5M/C&,@N5*8@J4FKLA404/4;N&'2B3,G>CM8)4*:.F7;@EHL*F/>;A@).AEB:/23)J60L)M7BI @286 tacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcgc + HJ=;;.*.?21LN)496-(((I5/N(BI50>F.A=5L/6.8779K''4*9:L6>:/5H'.6L1@1G+7BD7L:K.N6*04&>F7>E'B)D02=(I7E,6C94B.(.?K8;>/G>,6FK83:C8GH62>J&E0/NF>C3&*+E:EM;&41N?9L2'9,MH-)I382>L3/GLCJ&-,(;72.+H2;?8@8,H*A)@-?@7D5MLD6L/GE @292 aagcgcccgagattaaacggctctttggcttgcgccagttcttcctgccagttttccagattaaggc + 00080M28+8MB;2JHLG,9D6/&7)H'-/GJJF@CL<*3K2)I*??>*4LFAF:(HGF:32KKJ1. @296 cgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcgcaagccaaagagccgtttaatctcgggcgcttaattcgcctcgtgaaaaa + 000>G&?F4,:>GD-)ILN;-7>(97FNC5C.@I;3JE(00101<0K1;K'7F;M9?4DL.K15C/L<=K9F3>A33.,D'27<,26BH5E?'H++3C5,>H/MCE95K=6J @297 agatgatattctttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagttcttcctgccagttttccagatt + 00000N(?)2GEJG++2N=BM&/=LAKKN10H*DNF='CFE+H*'(MG+MEJ00M&',1AEJC3D4;;.B/GJ=J7E53J?JDI1'(7( @302 tgaccgggttcagcagatgatattctttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagtt + 0003F,*/BBJ3&6J@H:=-6F&68(-@F06DCFIG(KMD;N::BI3?I4)4B*:81ID;:/BL-1CNHM0B)@/=C3IJ&*L-=L&G4;'.*9>?ND= @307 gctggaagtgcagtcaacaatgaccgggttcagcagatgatattctttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagtt + 003/+-/0D?>+N3EB,FL?2?/(8ENEH5AMB3;:I..0==/9H'H;BJNH(8@/+6CN6C1DA)IG83H'G+*)H901,1F;:M4&'E=CNC.:@'1:8 @310 cgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggttcagcagatgatattctttcacgagg + 00000LF<9+;FH?*5-1L.9L5(4(N=-8FD(J36A*/1<0I*.=B=)'1D.88/5.+:-KG @311 tcgcgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggttcagcagatgatattctttcacgaggcgaattaagcgcccgaga + :+.L6E@3@B*@8=+LK?G'31K/I7=*NJ<0*0M,J52GAB4'B,75:KDIJ6>'E*9N/7M9+2:E3/E)N@<73'F)0/NJ?D&BEB?>G5IBJ7+,/'K363CA;EJ @312 taatctcgggcgcttaattcgcctcgtgaaagaatatcatctgctgaacccggtcattgttgactgcacttccagccaggcagtggcggatcaatatgccgacttcctgcgcgaa + :+.&G>&6*C/10)3A@.LLA&0HC-J485;.866L+F@A/(H.-(F@N11:39;FAFHHH9BK2FG<==HJ7;GA34ADJM*7C.FK*'&/<*C.EM0=6:A=G&M,;CI:?9J @314 gtgacaacgtggaaaccttcgcgcaggaagtcggcatattgatccgccactgcctggctggaagt + 0@7;:C8=N09FG&690M:*62E;KLKIHKI8D:BC6:L35H<&@NG@@297?(&+4H2(-@A>? @315 cctcgtgaaagaatatcatctgctgaacccggtcattgttgactgcacttccagccaggcagtggcggatcaatatgccgacttcctgcgcgaaggtttccacgttgtcacgc + 00B02H9:9*1+?G,.+(I@5/8AD>:=9?==N'/(,(GHBD2=I&71A9>GE57K3*27+.D:4=6?=G(=>2HM3D=89?*0IANL850*=33>(11II'C-JIJ*01J2:;E348F&MMC1/>('FDA.**>83GIM;-MM03@EH'5=F(=D*2/A(@(BFG9L@+KA@28I@@:G>FL'@8*N;K(> @318 ttgttcggcgtgacaacgtggaaaccttcgcgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggttcagcagatgatattc + 00C23M,&E&&B)-AIJ*6EE.N=03613*6((MCE@2B(@F7KJALE3JKM2H5(.K*I4,H,6(:(&N2L @319 ccaggcagtggcggatcaatatgccgacttcctgcgcgaaggtttccacgttgtcacgccgaacaaaaaggccaacacctcgtcg + 0K5H6J?-95J1H0:BC4<.7>6J1'NA,)MC5B+9+49GJ+MN:G;F7F:K1E;J(?BBB8L5MMC:(8*B0?48EJ' @320 tatgccgacttcctgcgcgaagtttttccacgttgtcacgccgaacaaaaaggccaacacctcgtcgat + 000F922=>G>+'I(&D=>=5'2'09)H@I,BG;9>6/EF/C,:56GM-5(1.)AK@+555'*L&.@A&(F5D,*9FN @327 aaggccaacacctcgtcgatggattactaccatcagttgcgttatgcggcggaaaaatcgcggcgtaaattcctctatgac + 0B+>C)3E7&.K3J=-)3L*:./6H,=>2KL?6A07L(.90?&33(N5:1LN'8L>.MFL'ANDLHHBB&,4)':,3L:8MG9/80<-H39L3BIILDC?HL8>L*;J./G.9M6);?8K28+3GN:&86FKE>D=@CN;NF//)*31J;(/*K @330 tccagccccaacgttggtgtcatagaggaatttacgccgcgatttttccgccgcataacgcaactgatggtagtaatccatcgacgagg + 00(D/=FAA*G/33;G><185L0,AA)F7BM@4G-?-IMGL?7<@A3&3KF&)A6,GC2?*;D5487L'JL.7'M45G0E'475(219> @331 gtcacgccgaacaaaaaggccaacacctcgtcgatggattactaccatcagttgcgttatgcggcggaaaaatcgcggcgtaaattcctctatgacaccaacgttggggctggat + 0/,-+B+)BFI;?L;H/.'54>,))-C2'3;(*)3)/,;-.-K26,K7+30CN,+0M=/@B1E>H?(/((NMJ)H6&,BD59,)=<;M22K4,J99(7I22DM'N)+FJ,EK2C- @332 ataaccggtaatccagccccaacgttggtgtcatagaggaatttacgccgcgatttttccgccgcataacgcaactgatggtagtaatcc + 00))A'4G@091GL3AK(@8L428=7:-?*C1+E-96.6D@;02-??NK/N7+N1???JC)MM&K400A,1J0-*I(C7G?F+/).0K08=4/-AJB4:=4K'(5,G='?8HN92+,(+B)(B1AKI>=9;;CBEEEE.H7+1C8&576=DH/-J)763>8ML1L5+(?*+4EG0?:CJGN:@50):('/(:028IG57M @338 aaccagaaagaatgccggagaacttcatcaattcatcacctgcattgagcagattttgcaggttctcaataaccggtaatcca + NG/BH9-AAFB@,E@'3E908.&:'/NM'KLH12'K?:*/;-7:A:KA=D494:>DC>*18.K;DAB@K'LH66'<.7B8?LN>09&(FB1;@27&AN*'<'7&;:2L898853::7>HCGN&+I4?+92?(@J17K@4G.L):6 @341 aacctgcaaaatctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttagacgaag + 000M8KAM-LKDEB697+)-NJ9.@>/2MG6,D:1LB;<*?JJ&&)2B89)NEJ.DCI(&<,IN)F?0,&.'B,6E8I<;JE,,H@57*=N'7I=4A @343 aaaaaatctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttagacgaaggcatg + 000F8:+G4;'N054J?&G.>':12@6231-75J86N99G @344 tctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttcgacgaaggcatgagtttctc + 0CHA87M&MN?L0.?+'2GL/+++E)LH,4.C68D:7F=7J6?1/F2I.@H&)&-:.,&317G5-MLC/3BMG=HC469.+.6)>.F/H=BF259I.+LF'5/6@8B2:>L4441AN4-()AD(E0>*0C2344A6*6:DL*3N,)&.774L(E,6CE-D(&B(C6NIM29DB/A8M:ME49GK.64HEJ @352 tcatctcgcgggtccggttcggtataacccatttcccgcgccagcgtggtcgcctcggagaaactcatgccttcgtctaacttgccgaagatataagaa + 00I88:5('DG1G@D'/);:1;-A>I.D30BA7<3+;@F137=8J07?2:H@M,E>4)HNAHJGE3?,)L45*N,BFA(-9JC&=<(-DG/M8>>I6'? @353 gacgaaggcatgagtttctccaggcgaccacgctggcgcgggaaatgggttataccgaaccggacccgcgagatgatctttctggtatggatgtg + 000*26+>(/G0843C71'F?2IC6*M1CKGK)L/(;H@>0L1?2;C(7,B.3C0H>47>MK:0@CGL0,:+D3A5,-KL1I>@-;<0,4C@(-L @355 gcgccacatccataccagaaagatcatctcgcgggtccggttcggtataacccatttcccgcgccagcgtggtcgcctcggagaaactc + 0000-)-D*<1J(1A*JD?-6M*9*9H0J.&?-9DK/EKF09N<.:DA.L)6,9C;IDH&-?(-:KB;5(/0&;*9A:JA>C2LD4H1' @362 caggttcaatttcaatatccgccagctccagttcacgtcccgtttcacgagcgagaatcaatagttttacgcgccacatccataccagaaagatcatctcgcgggtccggttcg + 000-?/?2.?(/48,@5F5F<;'I=9J7A6?2C,9,JGIN;CA8I3JL---IB'L45I(3B @363 taaactctgcgggcagcacaggttcaatttcaatatccgccagctccagttcacgtcccgtttcacg + 0HNE7HJ7A865'-9.E/N57A4=HHII&IB2;2B:K<&/':.(BKL6F&/3C2FJKF1&;//48J? @366 cgccacgcgcgcggcaaagagatcgtcgagttgtgacagattcgccataagcggcaacatcaccctcggcg + 9;,*HFG+)'-4=&I/(&+,F93K1F69&21CL:>B7L5B4-CGC2K(EHB8G>0+N-N=C+E=:G=L.:G @367 gtgatgttgccgcttttatggcgaatctgtcacaactcgacatctctttgccgcgccgtggcgaaggcccgtgatgaaggaa + 000F:G@43?K*3.E<>-62N:)=<(K37G>B10@C+*G03AG>8)?3CI89A<A8=>68/ @368 gttaacgccgagggtgatgttgccgctttttttatggcgaatctgtcacaactcgacgatctctttgccgcgcgcgtggcgaaggcccgtgatgaaggaaaagttttgcgct + 000G@&?2*MI;G+,H5'F,'(2>791F'@3,:K4&9=G85G/FM=9).(48@BK(857,1G??N7DJ&L>E+<(A5LGC7+);;8+>)7MD6>E2M.0&7H'@4< @369 gtcacaactcgacgatctctttgccgcgcgcgtggcgaaggcccgtgatgaaggaaaagttttgcgctatgttgg + 000F/6LM1;2:*0IK'J()HF3.8.4-9K<4@FA7*25G)C;?7;B3H*:&@B?K<= @371 atcttcatcaatattgccaacatagcgcaaaacttttccttcatcacgggccttcgccacgcgcgcggcaa + 0-DME>MB8>/M=03M<*K)0:M:5L9=7>BH85'*N+G>/HN0(>:720;5B)7>-?=?C)6>CM&,K1J @375 ccgtgatgaaggaaaagttttgcgctatgttggcaatattgatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgt + 0-34)/7<.+14;E8B;)I @376 tgatgaaggaaaagttttgcgctatgttggcaatattgatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgttc + 7+@5EJ:6,G:E5;FFAKDL&4HB'><)E*;BL*CL-H=8D+*BG'C5LH)*/'D+6+E?E&MNI2D><*9;57<2/476J?@+C(4 @378 catttttcactttgaacagcggatcattaccatccacttcggcaatcttcacgcggcagacgccatcttcatcaatattgccaac + 00DCDD7+>8ILFJ)@&J5@.LJ/918(?4G'7G*=.8H(1A-I2-@G;--+)>KF'IC-&M,D83='?HM=B>83L;LGFJM,: @379 gatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgttcaagtgaaatggcgaaaacgccctggccttctatag + KL.)M0-BLBJ:+8HJ<8?G9&GH&6?ID>K1CA=8=/MDC14/==,9<) @383 atccgcgcagtaccaacggcagcggctgataatagtggctatagaaggccagggcgttttcgccatttttcactttgaacagcggatc + I(&D<=H4@I7;I4HJ(&*GC36='8643N?):NM-,3.('=G.<-B.JIF/),-4;+K;72<44>*)D<@)DG98MD=@&GF9??K3I2E5-6/C@G4?<(E(D6&E @386 aacgtcattgcccgcaccatatccgcgcagtaccaacggcagcggctgataatagtggctatagaaggccagggcgt + EE)?9N:F(K+F8:,6@-FLB030A6;LN30*I?.M0;49J&B<,,+K>'>AKKH(:7-;=/8G6)N:.*;*3C,629NKGBAA;(*;:J< @389 atagccactattatcagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctg + 0000-;(G/(AI))FNNN;-M.38=((C>*-G1C,7A:-HC5@.60(.:43A-3@GC'E44''>42&-M=6C:K+C>NHI@:?8 @391 actattatcagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctg + 00JI-0318GFGDGD6@G'MF=?/M3*K@,B?.*F6.2H44D5D04KK7.=6F:AHFE)7L2F6(I+1;CB52@LF)'N3*F? @392 acgtagcagatcagcaaagacaccggcagctgtaacgtcattgcccgcaccatatccgcgcagtaccaacggcagcggc + 26@1;L<.C63JBC?-<4'&J*(;):B1:/MEKAD+J'H&>')0D:65+05D@0+C34;0D6>CG>I?M0H1)EG&L3I @393 cagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctgctacgtaccctct + 0'.*;)E'&>CN*<->,:C>L7GL(:E;@/E7DF1M(-?F11L@)JEA>AJIM*D-*:8/:M)9&LMCKD/@,:6/E26@.( @397 cgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctgctacgtaccctctcatggaagttaggagtctgacatggttaa + 000M)G+7HK0?2DA+G/=B(=9C7@9'6ALMF):&9'9><0AI5M/-K? @405 gcaccatcaacaggtgtcaccgccgccccgagcacatcaaacccgacgctcatattggcactggaagccggggcataaactttaaccatgtcagactcctaac + -+7G(>JI9+JN=C/=.+9.:= @406 caatgcaccatcaacaggtgtcaccgccgccccgagcacatcaaacccgacgctcatattggcactggaagccggggcataaactttaac + 000000N00/6-8:BI703(,II+.GN'E=L+K/2;>8),4+=;BNI.D8438J?K&B/D,L@((5<8J55*E:(A3/D6H6/'KC2I24 @410 gttgatgtgctcggggcggcggtgacacctgttgatggtgcattgctcggagatgtagtcacggttgaggcggc + -M?,<00)N4NB/+<(N):@(N=&J70)8'&BE/)76?8>*4>F<,>FHC:&6G>K/A)5LEF388IMJID2', @411 tgaatgtctctgccgcctcaaccgtgactacatctaaaagcaatgcaccatcaacaggtgtcaccgccgccccgagc + 0D*;E.5??='*?F/61()JJ4A)>ILL8M>5/?4=C?L5'4>:/*&.=5+'I8=MK;*9@/E(,9.=/KDF< @413 aggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatcaacaggtgtca + CE.?+L00>)4897JM'0II.5FE61I76*1NDDF9AA39GDB,G)84K52+E4=D,'G@I2CIM*+,=()K==,:L(<@4GKA8GFNA7?6@L<9D=/ @415 cctgttgatggtgcattgctcggagatgtagtcacggttgaggcggcagagacattcactctcaacaacctcggacgctt + (;G5<107,F078J8H7D'61*C?-L63H9=M8:9N6;JD+;ELK-.)*3D&,&D30627NA<>L'DE/(L;',>:&K*/,;E-& @417 cgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatc + D()C0:AG;.GKM;?K>@,.-@?1<2:=KC*N>8LL?./HN-M;&L34L34B.04)&H*F+F0 @418 tgcattgctcggagatgtagtcacggttgacgcggcagagacattcagtctcaacaacctcggacgctttgccgat + (EADDA@KE'::2J,,,-,J;:J)88EJD;CA6C)JF.+B:D3M*?C*B>:ID:AGD5 @419 tatcggcaaagcgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatcaacaggtgtcaccgccgccccgagcac + 02KE';3@29EB3;G5/NGN4*JG,E/K0L56.BH'4L8K9A4,8LK?&+D-7CMB30L)8))N.17N:IJ&AA*6M>:076ECJG,L9&D&)M1@L??(4:57+C*3,><9/6&(0)M>1NB;IA4D0F5?+B:@,B9/AM:CN)0J=3+E>LC,'E&B)K'N/658:4/II,&05/22@'554+L&).FD9-:<&+/+@;&.=H:C9KBJ4.8@7G.)6 @424 tctgacggcagcttatcggcaaagcgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccg + 16=E=JI&&:;9I:>MKI=;,8?*+G-96A;;17@4G?C:+:/E6/HJKICDI@:H=5N4NB?>H+/J5?M6;>===AI,= @425 acctgttgatggtgcattgctcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaa + 09BCJMF0D609&=GCB0D1F(.;-AGAH);;742KJ(6I-0.AFF>;IBFI2'; @426 tcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaa + 6IE4EJ';/F5.<6A(B.BL8613)3'CBD,:I6=7?/72;3AN&+23B8524+'(J'&9E3K3C1GHBL&'02(/9ECD>/5+(*3=HHF/?)& @432 tcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaaccacgggaaaatatcgtttatcagtg + 00:2'.)(>@:A.E'I:C=?:,J@:2,GC4.=G930>*0N&5<)JM@5K-)0.>B+L9/J)/CKK68C7@I(D'H/A<56/IND7?'DMHGIN@AJ1&<01/?(/8-4& @439 gacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaaccacgggaaaatatcgtttatcagtgctgggagcgtttttgccaggaactgg + 0000:;(A;&)/HD62;)?AD&1)+2=JJA,06KF++1:(J+1BJ-*B5;<83&7/?/+B)NB88<+&LMD.&80B,:FGNF*B0*'IJ':K>+8MI<71BE-0 @441 ttccagggtcatcgccactggaattttgcttacccagttcctggcaaaaacgctcccagcactgataa + 0+=1=>ENA5:&5BJ-C9'AM(7<1(;1HJK18=8))-EN9+JJL&2;9A54(A2I48N8NC.JFJ)055NCD(+0GA9&.3HJB(@A34 @446 gccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccgatcggcatattcttttccagggtcatc + 000B4BE62..C@8C8CD':1N3K1AK6;A)E(54?FE?(7J7=89-0NK>B;HG?FEE0N>IAKH86NEDC23(7<, @448 tcatcgccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccgatcggcatattctttc + 00A/I<1?NIJC=.BCBL;C@95:=L*7'*9J6)6+=+J=.LMI?B*)?L)7FA.5+*(>E0@+837*G4,4 @449 cagtgttcattcatcgccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccg + :>-752F,6IAD*E+B7KN-KF)(?,@)L&>CD/*1?(CF&.9(D&/=34:D?,8/3L**+1E56. @450 atgccgatcggttcgggcttaggctccagtgcctgttcggtggtcgcggcgctgatggcgatgaatgaacactgcggcaagccgc + @C/CMMN=B:7,D9JJJJ.NDE(=LGI8D10.85ABI4=GF)?J(G8N&.N@H58J@?JMN;7K<*MM64>?M/3643,H?:-+E8?5&>.2H;249B4A2A8G<81?C*J?+N;8>C)2((-,;2F,7'/4+3-1,N/.JK0/7B.2(&J/-H9D*GF'+H,6CH'D1A+D&<(50:0:+,J>.A3.,<;.+3@2JJJL&I*)0'2>*:K3HHL9;9,GB.-A-;AC'+139I/D5

    0HK=1-BA5M)I>'/+-'<2+3@9@N @460 gacactcgtttgctggctttgatgggcgagctggaaggccgtatctccgcagcattcattacgacaacgtggca + F/7D44J/0+88=3E2;K2IN&I,'F22=1:B(@JM9/L)K<:GNI<7F== @461 acggtgccacgttgtcgtaatgaatgctgccggagatacggccttccagctcgcccatcaaagccagcaaacgagtgtcattaagcggcttgccgcagtgttcattcatcgc + 000000;GI(CM-9>':JK5NE5A..=0'I+?>7AJ>I'..H)/<2/M44(@,-<2=+F2/8A?5'M;BI5I'-&E:./7&ELAKGEB*01 @463 gatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcgg + M>:9-EJ-;8-;H@KH+-4JH:71KI8.==6NJLKF.<+5/550.*LH')NNEB+@4GL95L/&:8C=9 @464 gatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgc + 005/6)HH;25-2A*.I*?M&FN&FF=4FB4?(G/8'53+=?DJA*;I*+MB88&KF?L:?6/:E(*24I?) @466 tttgctggctttgatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatc + 00D4BA4;'C2I&9&6+N:<4E5*3;AI+L&-JLE)5N(6&&5>@56+8E0K>E?1<*F1-;4@2/9/<)/:-+M)-0B6-C4M3,/36=I1?3B=>+M;MG8.?@IC/AK7GA3H/882<,IN(0*'BA.0@:,0?8<,I@@@5GB @468 gaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatc + ,I9,N/=HDIAE?E'5J:+-<)6I&*@;0<(64D*N9N2-88.82)-:26H41M9&M3H=+=9C88)K8(A9FA: @469 tcttcgatcatcaactgcataccaccgagaaaacacggtgccacgttgtcgtaatgaatgctgccggagatacggccttccagct + 2;/7/H2LI,@=I0F4?)H'?=+6DIIFM*;-=3.*7+F6-(I&208M/*8E/3E/( @471 ggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatcgaagaaaacgacatcatcagcc + ;7/C*014+A077F,7FN0MH(.L==F5I4=?:>)C(('91K??:-M1 @472 gcacttgctggctgatgatgtcgttttcttcgatcatcaactgcataccaccgagaaaacacggtgccacgttgtcgtaatgaatgctgccggagatacggcct + 00-'D51D321KIMJ9(C(3>E<'/9M(=?8)4G+0;=@F<+DNG;(*;+?3@?<,?MEN?,:J1+L(E8B==6D1FM4;:MA?D3AG((N?M96I'1&K62M @476 ttaatccccggatacgccagcacccacagccactcatcaaaccctggcacttgctggctgatgatgtcgt + *;08G&-M05KH)EMK0H/F5:'&-IAM8:/*3FH1N@6E=<&J,'?CFC'.&*FK@3E+@MD&:1*D7- @477 tatgcagttgatgatcgaagaaaacgacatcatcagccagcaagtgccagggtttgatgagtggctgtgggtgctggcgtatccggggattaaagtctc + 0H;(K51G('3C.4JA.-5)((')?8K0>8>M-13;67N:?M(3E:JHE.'*/C(;F1HK13=+KC5*2 @479 aatagccctggcttctgccgtcgagactttaatccccggatacgccagcacccacagccactcatcaaaacc + 000>4LL@*'&DJ8))CF@5AI/A,=>?AD-/1H<=@>A6CE;7KN67IⅅLJI(19GL,+()2@GB/(; @485 gccagggtttgatgagtggctgtgggtgctggcgtatccggggattaaagtctcgacggcagaagccagggctattttaccggcgcagtatcgccgccaggattgcattg + 000;+IH<<(GEH6C&'.2&-K5?.=GN?,20&(GC546H>>??=<.G-LN70*J?I8:M)9K9JMNECN-64.89&B @487 aagtctcgacggcagaagccagggctattttaccggcgcagtatcgccgccaggattgcattgcgcacgg + 00M=/KA;DLN<'=5>-=;.D7+C+L-E0A07)+GINN61,G9C@)<&F?&)INLEI@)KI)=M57L7I= @494 ccgccaggattgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgag + 00+4NA>EB>)M4ED=//J:7F=5F.++@FE;&;JN6)?0-B2GJ)6G/9IE&LK9CJ<=N&&@LJ95F.*7M @495 gcagaagccagggctattttaccggcgcagtatcgccgccaggattgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagc + 0*5LIK.B26>0L+)2&>4/.A?864:)B1F'E,12)J(+I6BK?M6.A889+G(::=()MAIB5K70//5:)3095D@DH4IIFJ(L'L:'MFH*3IHEL8NC&0E.?@8BN>D;5<+89>N=6=II10C( @498 attgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatg + 0000D'1='0.G8(,N)H/5:,:8;.<1;:KFK5)6JME;0)?FE+(5D<;1L'I01?E+<=N;L,/7L;17I.INEJ8;?,E @499 ttttttaccggcgcagtatcgccgccaggattgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaa + 000000F92/J:2<:H+&BL&/I*?L28K2*EJ9F-GKE:HE))7:M4M@6;1+MC:<2A9G()78AMC5B26H7JC,396&L5,B@MC4,JA,FJ@HH8*H+K8+&*1<02.5 @500 acggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaac + I,4BF,8&)D(:H>5.73(0*6B81<2A?I;;L1F;,:8IK:H@D976@M>7GCI)M,.''ML?*;CJ4-7+*J/NK4&GC(-NAE?5K @501 caggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacc + 0:?;DH,&A);B)51H+L0(H7&@)=NKK?A?CH7IJBA//./IJ7B,9N2A>JI**B>56A?3-E&B>J64*>AM @502 ttccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacgg + 009G>7BD9-?CE??)&C*>KCF6+@L/J8>A;9'I<-5)*6?6H,F.(B0I4M&4//+K5J,/4; @503 aaccgttcacggtagggttcagcgataacatctttcatcagcttcgcggcaagctcaggctgacgggaatagcaggc + 000059*90,N&524C,GG2+8H8I; @508 gccggaagcctggcagtaaccgttcacggtagggttcagcgataacatctttcatcagcttcgcggcaagctc + 00,13@83646HB?6=4M(>8EK6:+2M5E)I+->N=1.87HN7I>91D&,)2;+7G-+AKCKN8.F67A;F- @509 tcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcagg + 0009BF4&4/B(<&L+482LKAK1H40@72I.>M-G31,(53?C'?G82A)LLI/GB+*4CC1L;88B:'L)+@=8CJ1G7>+ @510 tattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggc + )G=CK;N0+GG'.4L*G6M*>7EKDHB+()N:N8H)&G(MDI:-/),,3:.F9175:8=JGJF'?CD&'3MH&0L*C>0D6MN23E5')E9& @512 cgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcg + 0000G'';'B4IF>DMI6;FJHFH9NI>F(N-I.2.G=@?/7I?JAC79+GA;3'),9LEF?&CM;(@(8G6=I'63E;2,HJD,F8CCC44G3;. @513 tcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcg + 0.'7J6,H@C22HGB>M.(?*64@643&81@C,=->N+(7/(3K-@8+FLNG,?E/J---GD6=*.>.&9'/AJN1&6N@(&F@JJBEJC67+F @514 ccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggttcagcgataacatctttcatcagcttcgcggcaagctcaggc + 00).I04?EK;)B)/62:/<0F/.:/:KB1+888+7=/59DCHN'N:E,KA=@/L/;G*//E6?;NINL*,* @515 gaaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcggt + 000&=K.@)>:J>83G'3(/4:4JH8@7,-N5@//K;)//C&>7D@N:7L=.M*M*=D)2K/=@7( @517 ttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggttcagcgataacatct + .;G3C3-ELJ(E4)@1&4&,<,JM5JLAL-91?-(H@LA @519 gcgccgatttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggtccagcgataac + 0000(30DNE&&-A+9C4G>@I026)JAM0=ID,;L@?;I149L6/;?,8:.':GA+'B@(2L);3A.B?+E81K@,2.@;?>C5E5;9*'>K7M6562*AI&9C?G @523 gttactgccaggcttccggcaggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttg + 000I>)+E-,73G@,8:,&J:F32>,M=BK+,J/G7F+FADHF&N;7GCB0*&A49D)A2K*83NMC;M,4@.67?NN/5)(B @524 gagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttca + *KGBF=M78LN86MGA2KG2L3K:,259M9+B.HI8DD+?GC0H@J4;&NN0E2B9C)J(8KCC*&/>:I:)36-6M<@BA:*/@7&-&62,M>E.L38BM @525 aggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttgttcgctctgtgtgacaagc + 0K>*K?65**&=<-A.3NB6>K&FE2.>8J&865,D22I??L/;A@(.LJ&<0C9<7**M,/A4,@I>CH;BFM/94+K':.C:BH< @526 gaacggttactgccaggcttccggcaggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttgttcgctctgtgtgacaagccgg + MN@B@JGKMN'/CGKL:288B*A,1?)?*)'.4I7CB@A014@097<@8?0L3G(J9J?/CJM+*9=N>7HN=<&J?'J3'KH@)=F>(318>D2CM7 @529 ctgggcggtttccggcttgtcacacagagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcgaccgcctgccgcgcctgccggaagcctg + 009H69>L9@@A?2B11AD'9>K-L9466DG0<)BA(6?-0+8HJ=L7=A54IN?L+J/B(/1B0)>J@KEKD(@0J0=K*'+'7J>3/H@=/5(*/&;8GE0149)I23A-D @530 atctccggctccggcccgaccttgttcgctctgtgtgacaagccggaaaccgcccagcgcgttgccgactggttgg + 0.'N3.159A)IM3,ED'.JNJ(47087<4.23M+&@,':.&0G4-F&FKE026G* @531 ccggctccggcccgaccttgttcgctctgtgtgacaagccggaaaccgcccagcgcgttgccgactggttgg + *(=1BNE1;7JJJ-+:GH:)G,K>1>GC1,DA:BD(DE(/A:MMN.:IL/?7AA)//?MI@E>K7NNJD;2: @532 cttacccaaccagtcggcaacgcgctgggcggtttccggcttgtcacacagagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcg + >FM2)*)+H+@;A1265=02HN0;/J?9;42(03;E(0/B/DE@*MD5(C'L&0D9;3,-IA4-C6&L9HE?(DB)83/7KGM7H>C'IN'7N@6@,-<(9:65A @534 tcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctgggcggtttccggcttgtcacacaga + 0&)IH*;-44?:,(:L.CB+131('0J)&*A@BA8*:''CK-F;&>>@)A'B:5+':*L7)0=G*:JMG&A9 @537 acaaccttcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctggcggttttccggcttgtcacacagagcgaacaaggtcgggccggagccggagat + 000L?GN7:3+G:23G=4;C=EL=,B9B+&<+&L/@71=+*JF-9>-&=HH@71*80)7J-275F1-(=,K=<)6,'9'EM@@KF?,;-,AAI0GFKB?;6B::3,L& @543 tccagtactcgtgcgcccgccgtatccagccggcaaatatgaacaaaaccttcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctgggcggtttccggctt + 00000G(?/BM6I?(3L@*/CK-L15<)GJ;18NF-93K322;<7+-)44@J+:N&;:27GE+>9>'43I8D+(&>AK2@LI'N(018*(9B/2B70=59C0572A043B>*G @545 atatttgccggctggatacggcgggcgcacgagtactggaaaactaaatgaaactctacaatctgaaagatcacaac + 0>8*0H9K1@?,?'*LH>BC'85'D7C;&F5E@E(&?(892B&L@*D&G6JCH*;HK7?K4J-5,?2DKE46C/492'B&,D0LA..;70 @568 gccgagaggatcttcgcactgcgggtgacaaaatccagcttcagcatctcatcaatttcagtcaggctgaattccggcaggtcgtgcggaaaaaaaacagcccctgatttttgc + 00000008B>?&N46C1A8?M*@/05=J@)L+'H'C--LC(96I&5--6-//I6-=9/:)+J:@ @574 attgatgagatgctgaagctggattttgtcacccgcagtgcgaagatcctctcggcgtttattggtgatgaaatcccac + 000244B-G>.J)66J572:'J?@M0CFKH6*KNG0=G@J1>CL?+N<+(MK(:<7=,0HG43B;'8@05>FKF2/('B @579 cgccgcgcgcacgcgctcttccaggatttcctgtgggatttcatcaccaataaacgccgagaggatcttcgcactgcgggtg + 000BF1M1LDJ&<&E(61G/&EKKJ.&'&?6+034A:EK>1*68&==D'>:,-FNI,7/2M-(2=L8,,(A8:;@/4F80:, @580 aggcaaacgccgcgcgcacgcgctcttccaggatttcctgtgggatttcatcaccaataaacgccgagaggatcttcgcactgcgggtgacaaaatcc + 000000F087'8F'L))8(9E7CEM)&GCD'G9LM+?889)'&3?-/M<3F9M,*0N3BH?*.2F?(5H');J0;3:A;41N* @585 ttcaacattggcgaccggagccgggaaggcaaacgccgcgcgcacgcgctcttccaggatttcct + 4B'JJG@F<4)*,.3<3/'H(G)??HN*:NA5;85GC)NL55?EK?<);0?G>2-;MHL5MCD4; @586 accgacatcgctttcaacattggcgaccggagccgggaaggcaaacgccgcgcgcacgcgctcttccaggatttcctgtg + 000/HAK45(2.B/@<(F:0M51IIIJ'=B719F6KN0I'D4J(3K&M&61K+::+.+(+A)N&3DC<4;,+=+4C))=K8=A'3.I @595 cgccgaaatctttaaatgccagcgttggcccgtggaacaattccagacaaccgacatcgctttcaacattggcgaccggagccg + 073)029H2GCNG41/DK5F6G7M+6ENN7BI31+6+@4B<<*K*-IHA;(:9D=E'IJM*7HNA:9AKJJ',+6K76:3?=8, @597 ttcccggctccggtcgccaatgttgaaagcgatgtcggttgtctggaattgttccacgggccaacgctggcatttaaagatttcggcggtcgctttatggcacaaa + 00-4&)3K/=>(5;J970N'42M-,&I--/AJ+NF;=N>B8(L1D6))BK)E0DI'@147JAHE3.2)@3MED80;8CA@2.I9A7.;<1@>>I=FE @599 tcagcatttgtgccataaagcgaccgccgaaatctttaaatgccagcgttggcccgtggaacaattccagacaacc + 000HD:*JIG&@3JGE0'KEBFNI0@.5:6)/(L;?)==IN&A=/>6B9;70:NM2*G003J-/E(:8;-C,<8+L @600 tgttccacgggccaacgctggcatttaaagatttcggcggtcgctttatggcacaaatgctgaccca + 00&?G/KFED9-H69=3'1.5>9+HCF*D.@.37H'EB2C27A&F95&2(LC7G6JN(51BB,:@N?AA'@2H;I @620 aaaaaccgtagaaagcatgagccactgccgctccggtatcaccggaggtcgcggtcagaatggtcactggcttatcacc + 00(G,LB?09*=B2;0I'6I:9J1>C&I=3&+29/-;8+.@C*7=G>*3CH8-0.50*E>9 @621 agtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtta + F585):=+&LK(2&B'&7*&>&+LG<4B(?064L9H9@?NC64-?8AJ/* @622 ggtgataagccagtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaa + 000D6N=+MLCA,8C6*@C<)G6C10A+/><7H*?@-:NFD;79HCC@G7DC=J=*==C=<&5-ADAN:,@8:CHNMK1HM1-+9;9B:9)I8M'>6NF>/>76D*;)EF?70?L.402 @625 aagccagtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaatgtgaaagtggt + 0000J/K97G4=;HD*N@J5:D77C13@&A'8/*:<;.D?1)>IC5)A)>?;7@BB.3GH;D3G9:IL=D8536CE0D/(1 @627 tgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaatgtgaaagtggttatcctctatccacgaggcaaaaaatc + 0008:L07J+//;KAM&7N1(3D(&9+HA5'7L6E/.6G4)?L8//,-5L7N8'7N*KA>7)8EL?C';E7H07./:8863EA>&5CJD&<5;K8&G?,3&D8/(B<'BIF=N?L/H*-/(K0E6AF:M?0@ @635 tacggtttaccgaatgtgaaagtggttatcctctatccacgaggcaaaatcagtccactgcaagaaaaactgttctgtacattgggcggca + 00H/N8K&2.KM?B8K0MF@55F)H914DM,4MME>E*6M)'<3'J,AMHBMB';@,KD*E*@FD(+DCE78*=?D4,*8658<8AM6M51 @639 gcaatcagtccactgcaagaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatt + 7NF3C,);'(8+*8>N<)?'4=MDMN @642 ccactgcaagaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatttcgatgcct + 00;H=)->D-F(IN5J-6N)-+@*25KB8M>3(.,;6(>E+A/)/N9)'*L0ED&*4B0/C8(&)-42DJ+@;ALM @646 aaaaaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatttcgatgcctgtcaggcgctggtgaagc + 0000ILN23K'II,EG586K*>9NJ00GM:@2B(10=74:6,MI/N&>/L)H?,1EG?C5/E,2AH::3==6.:GCE&/MA//)2)(//H6'M;>BC49 @656 gccagcaaacggctgatgttaatcgagttagccgagtttaaccctagcgccactttcagttcttcatcatcaaacgcctgctt + 000A(CL'97D(=>N&9).??2J8F81AD0N3,BG.7M>H3-'&@,9FK&&:@<=BDC:NK:6KM66;33?5MIJ-HE6?=:C3<.&70,H0(H56N@/B4GH @667 tgttgcgcagctgccgcaggagacgcgcaaccagctggttgtctcggtgccaagcggaaacttcggcgattgacggcgggtctgctggcgaagtca + FK,F8EL@4(F2M91>NE->B/A/I=CD777+'4D'(,4FME;J=''64:D23>;K*J'H-H-9'.BMAI8/6I-I) @668 gcgcaaccagctggttgtctcggtgccaagcggaaacttcggcgattgacggcgggtctgctggcgaagtcact + 00.31N9/)B1012LB:K6:K+C@<6LI,?FJ3J+3:(65(9EMC>35A.-02..M-/G?48:M:8L*0B-F+( @671 tcggtgccaagcggaaacttcggcgattgacggcgggtctgctggcgaagtcactcggtctgccggtgaaacgttttattgctgcgaccaa + 000<.N:FN*7E<9(C;0JAE>(I2D=*J9?KMG&MM-?7-&(GH,JF71=,=6IE&;'B-DBCCDADL:K1CLAD>&+IAI&D'2=B@'/ @673 tttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacgttggtcgcagcaataaaacgtttcaccggcagaccgagtgacttcgccagcagacccgcc + 0000D6(+*6-)):=166@/&&'55<+-;&DJ@AC&3FCNF27K671DLEFFFE7I@BG)>:1IL1)8,,9IMGI';I@+N?E@I3G2(4LCK>&98JL:CD' @674 gagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacgttggtcgcagcaataaacg + 00B:C@9CAB=B(&4>F*)GB-JA-='&8<0<4=GE0-(DE:3B@+EDDLIF/;@JJ('ME.F*(84CK)=1A(&-JK @678 tccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtg + 0?-*(?-,.'AF3:1:0I';.D7+(02N-DA/,822/5I)&,B-@72.*B:.C19,L+JH0:=2>'/ @679 cgtccatcgcgttggataacgtcgcctgagtcgctttttggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacg + 00B1>2+08HL)LB<>+83M(NNH9?H)6090A<77=IG0DKNJ.:'J)357D>+4F'H4&.2:?4>'-(6L;=+2LB+57:JB@:-7(FHB @681 ttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggca + 0000:7:<'=H*/:/<&D5D92;E*3*4E?51?0K9E.50>D=M1.G*.-A84E--H@7A2H*/9G+61KH1'F//(E+&K<2KM @682 gttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttttggggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgtt + 0000&0A3+4G:*3+.4M+BI:0I9&:/>>J,1='EAD:24B'C5+,:1)89=ML=C-&H&(GG*=A4*?3;4KL<0=F2'L3F'LI./J,0.H:I48579 @683 ccgtgccacgtttcctgcacgacggtcagtggtcacccaaagcgactcaggcgacgttatccaacgcgatggacgtgagtcagccgaacaactggccg + *EG85/5G;+?0N8N=)1L9E472N.ILF>/@G:H4-<;:*GH5;F96B9)'*3E65-B7HGK3BH)98N'=I2FM/<)G4>EA7+@LI=*.6/30:: @684 cacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcg + 007-8)KG?1:>N2HG?KJ5?>1BK0137;L'H:J7KD1JI/:L'3@G1';AM8NDI-B-;>HC?G86(;9.-C*,M8*4>3?76,&@BEC;C&J?E9&-K1DEMEB @685 cacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtgg + 0D9N2C5EG*1>6JBH1?0B(.N(0;LLJ&=0E5E=.+E'LL:&;2M?GIK(3)+A'>2M8<*,9=6)H.?&NC-E:&B7A/NAAB66A4@:CC368 @686 cacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatc + 0000,BI4C;6C*D..L9+,&+&@:=32IG:>-9JB4GL+NI@G))@*J56E5::=+&'9B8:MM.?AANAAH>83@CA)GE596:M?7M6.-?@71>.AG-KE?.L? @687 gataccgtgccacgtttcctgcacgacggtcagtggtcacccaaagcgactcaggcgacgttatccaacgcgatggacgtgagtcagccgaacaactggccgcgtgtggaa + 0G=IJDI'=DI/MI0)762*8:(/DN9C,&3K*;'9@*37;K8;&(K+B/39<&NI=27(C>,M4M4.E+8-NJ;*;A4J=D>>4N0K3,(,(4>DMK9.D8?;(G.&?3C @688 gcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgag + 0M6.41&KH/A*A/&C/B1,5-?=5G;IC:2''+2@B>F&3)JEFN;00K1&46D4E)C/IDG @689 gttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcg + 003*61(@174CI3JK9+2<>C0;?B&M<6A)9-BB-@4-G,D1((:.E,'B-4K,)6=3?EB(A6.@4'/C)(6I5-HF=C**HA>(/'<+/>4NB&/87'KD@+DC:H1?9;LHA@54LD6-K'I@*K5J+'KGF=*);9=)'GKG>@50J.7F2>-7',8@D?H,3< @693 cccagctctttcagttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcg + 00+:EF,'>KD,H'LG.'&4(5.=B=1C/1GH&(<*6I=BK8-,88<';N:NJ14&JI;*M<33/* @694 ggctgcataacccagctctttcagttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgt + 00000.+J'M94D@FCK=@7;?A?H97'1D/.14-+8K/:5:NNFC,M>IM@=68NMK739@CE@3IFKMH185LI2M:.@H-&'M @696 cattgtctgttgcgtggtttcatcatccacggctgcataacccagctctttcagttgccagattttgcggcgga + 003K*M+LID6'BH87J523-G6DFI4(<&-B>7)58MI45=>K/8;3C(3+@5 @697 tggccgcgtgtggaagagttgttccgccgcaaaatctggcaactgaaagagctgggttatgcagccgtggatgatgaaaccacgcaacagacaatgcgt + 00000-6JGGB+15&(A58/41C7*&6.0L?;8K2K5,,1501'+1-99:8JD,@3/B03A+N3AN/42+H>-:C;L)75'>3JAAI.F@0H::D;)8@+-2:**9<+MCG-;?K.(.+D @705 atctggcaactgaaagagctgggttatgcagccgtggatgatgaaaccacgcaacagacaatgcgtgagttaaaagaactgggctacacttcggagccgcac + 0(50@?=7C&M+,6.2-LH7B>BD1NC?.I*3K4>NL<&A/6(M'(/5>8':I8C28.?=;H*4KH+:78A8?*9D':?0?A,2>J>L7<;D=0+7D.=24@JD8 @710 ggattcaactgatcacgcagcgcacgataagctacggcagcgtgcggctccgaagtgtagcccagttcttttaactcacgcattgtctgttgcgtggtttcat + 000'?@4ECE'9&3>?8?C)3)HJ0H.-.GK/*G(M6=.F5G>E7'1);)'1&E14-;?'D69L*8G4=GH&+8E<=5/:34'B1G@0-+;2-*G=H&;H&.> @711 gcctggattcaactgatcacgcagcgcacgataagctacggcagcgtgcggctccgaagtgtagcccagttcttttaactcacgcattgtctgttgc + 0000I>1K/*E)M*3,4.E7D?29F:D055I.@7LH*D19&-.B;A&5086<&*:+&25I-H&/M9A1:H,<3GK,)*NL.0L6>CB,5/3<)*?G' @712 aactgggctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaat + +MA=307EN--&4?.J1A8NF''+.;DILL.&9E+KH4A+;E1M2L98+>+9,G&KB5D';,4>L7G26I&1 @714 ctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcacc + ::L4G)+K/5@IHFB7D+?+&&'0=J0:G(J;=D-,J1EL.B6NA*87:?J;MIEG:711D>;,6MF>'@)/6EC(42?0'C98?F=H;LA1?/B(?<--L<,EII'H:/H;J(5+2A9,J)F; @716 tcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgtt + &B.?MEMIDDF6/&046?M5'1,9:G14A9H;F*.C/=DACNI'27&>/?29:CH@G>..M<01-HMD7-67/2CM'=(I)CG(1L(C2FFH0G98@1?E&7CE.85.995H721L;>IIB-18,I2)AH6 @719 ctggctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatt + 00,,5*H9G(15@9L/*?E.'?FH37DI)>*@;1-@&)/(7-*L*E*33(@?M4NL@KHM(2&L7'5D6LJ4N<2DE37L9/L>;?3HJBD.DE/3/G'4HF;JH'=-: @724 gcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtgga + 0G;DN&CI)B73D)(E)>DNM6(E.)'I>B;3)B-MKJ<.:*H,*0D@/'/)LE;*38>G&.(=5F:F/KM4A.K+I:LF2L7 @725 cacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtggaagc + 0003&@;+:8/'@:E<2.GJ.+?CFI.M0E.3E?&D>GD::?&:'(85=,J1710CA67*3E=M9J0@D0'.@>GD4'*-;.CAMH8:)J/E+'+L.@J6.:H6HAN @728 ttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtggaagcgattctcggtgaaacgttggatctgccaaaagagctggcagaa + 0000.9FBM*8*8B)58I;=.J?5A16.K@)*-N=I>'@HC96+.AJ)NC?K*/CC60,1G1):N&18.;M''7JHC0/,1*1;2)E0/6D@4'0'+:=2N>B9:+G('1& @730 ggcgaaaattaaagagagcgtggaagcgattctcggtgaaacgttggatctgccaaaagagctggcagaacgtgctgatttaccc + 000&K+@L:AK+G8<&5(:44(J:')L-8>&E(/394EN6-;N/F;;-1<.9,919&4HM(0?<:FA:H-*>3B5I*:J,:?13> @731 gttggatctgccaaaagagctggcagaacgtgctgatttacccttgctttcacataatctgcccgc + 000000'?=CAHA-MIGKA3(*-14IIJ,:LH+9.5;M<4H:K/ME'@@CJC-;CAD6AD6 @743 attgagataatgaatagattttactgatgattcatcatcaattacgcaacgcagcaaaatcggcggg + 00-0DN?GG'C:<>@H')+>''D89MML;K,,L;4.457>,HJ;7L?M67G>BN/BN:36*KJ+@HB @747 aatctattcattatctcaatcaggccgggggttgcttttttatgcagcccggcttttttatgaagaaattatggagaaaa + 00000<6:)LAM')E67&=4N'4,93JMFK&*55&7E-&&H?B+>@A,G/02:BG1I8DHALD.'&>+5'460LL(L7&; @755 tatccggagattactcgatgagaacggcggttgttattctccgcaatcctaatctctaagttaccgcattattgagaattctc + L2DB85E-9;,41'03=?+=>5)4@2=8D>GI5B7.M3D.'2=&60)4HI1.&LIH3*6N.4/N4'A,1,CN--)2DMH.4/. @756 tgcggtaacttagagattaggattgcggagaataacaaccgccgttctcatcgagtaatctccggatatcg + 8=3GA+MK'C./E/*<)I968-J,&CH89I+)&>'/H>@:EH&5*/>D101>8L-I;F.?8K'CN3G&?.4 @759 ctcctttatcattgccccgttatgggtcgatatccggagattactcgatgagaacggcggttgttattc + 05+KB?'@HC96+.AJ)NC?K*/CC60,1G1):N&18.;M''7JHC0/,1*1;2)E0/6D@4'0'+:=2N>B9:+G('1& @730 ggcgaaaattaaagagagcgtggaagcgattctcggtgaaacgttggatctgccaaaagagctggcagaacgtgctgatttaccc + 000&K+@L:AK+G8<&5(:44(J:')L-8>&E(/394EN6-;N/F;;-1<.9,919&4HM(0?<:FA:H-*>3B5I*:J,:?13> @731 gttggatctgccaaaagagctggcagaacgtgctgatttacccttgctttcacataatctgcccgc + 000000'?=CAHA-MIGKA3(*-14IIJ,:LH+9.5;M<4H:K/ME'@@CJC-;CAD6AD6 @743 attgagataatgaatagattttactgatgattcatcatcaatttacgcaacgcagcaaaatcggcggg + 00-0DN?GG'C:<>@H')+>''D89MML;K,,L;4.457>,HJI;7L?M67G>BN/BN:36*KJ+@HB @747 aatctattcattatctcaatcaggccggggttgcttttatgcagcccggcttttttatgaagaaattatggagaaaa + 00000<6:)LAM')E67&=4N'4,93JMF&*55&7E-&?B+>@A,G/02:BG1I8DHALD.'&>+5'460LL(L7&; @755 tatccggagattactcgatgagaacggcggttgttattctccgcaatcctaatctctaagttaccgcatttattgagaatttctc + L2DB85E-9;,41'03=?+=>5)4@2=8D>GI5B7.M3D.'2=&60)4HI1.&LIH3*6N.4/N4'A,1,.CN--)2DMH.;4/. @756 tgcggtaacttagagattaggattgcggagaataacaaccgccgttctcatcgagtaatctccggatatcg + 8=3GA+MK'C./E/*<)I968-J,&CH89I+)&>'/H>@:EH&5*/>D101>8L-I;F.?8K'CN3G&?.4 @759 ctccttttatcattgcccgttatgggtcgatatccggagattactcgatgagaacggcggttgttattc + 05+KB?/I5'E94)@14CE=C)@)/.J*7J9F/@J9,*L:C++/52758*AN-.K*'L6*+4E9K4+B3G>2DL<:IJ8/=A97I><,&)G03L3,A:N>MBI8.K6@G&@:3J @131 gatcacatggtgctgatggcaggtttcaccgccggtaatgaaaaaggcgaactggtggtgcttggacgca + 00H-&*4BEH4J+=79L469+F9G.(3>:)=61+5LM3( @137 ggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgccttcattaccggcggtgaaacctgccatca + I?7H+0F&510-4(<8C>);:E'C,4AHKAD*AD>GN3,*;A(9<=8:IM):ADKE@/'HE28+/?LG(D0*6?62(I>FE1H026N(8EE0=GH9?>FMA6LEJE,E:5<875=;4MG1>1=LFC?FF.EN/B'EBJ&+)3EE3*6BC7?M9::26;-5/D+I9;22D3NEJ'6'>,N,D,BKN:6784B>;IAB':;@-/6N:B,=J0+FG30)C6'CL.<+K<: @142 gtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagca + 00L=)H.405GF+=C-:A2<)>/>E>D4BE&+B:AK27>09 @143 acgtccgtccaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccg + 0009F7HI90:/GN2B&M59,*AM(0&60N&3F?3L=7EF7NMJ?N8N-.?2*0,<)0D2<&)8BJ*?LCL @144 cgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccacca + 000&C*&5GMB4=5F'LHH@)9=3J9G+3L(+FEJEC)>2:D(I/N', @145 cgaactggtggtgcttggacgcaacggttccgactactctgctgcggtgctggctgcctgttacgcgccgattgttgcgagatttggacggacgttgacggggggt + 0000IDD:);6.2JB:/3LKL3E7-2)'+3&.5J2(:6*;J4(D@C*>;NA;?;(AA7@*K2J:1IHG&;F(7,.:'F;MK&2E.B=3-*(G-C9B:818I2J=@- @146 tagaccccgtcaacgtccgtccaaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagcaccaccagttcgcctttttt + 00000-E6)/08HCK.;>I;?)*AN.5KCL/IHJB-3(83M;E4,I6ML65'JH/K5.7>8;B0'D @149 cgcaggtatagaccccgtcaacgtccgtccaatctcgcaacaatcggcgcgtaaacaggcagccagcaccgcagcagagtagtcggaaccgttgcgtccaagca + 0000+899@+,1HCGG2-M19*FE85BI:)5=53E4>)02&*'B@B'JB>BL/2+;,+'.5C,8;AHA+)2L?9*C4(;ABAA1@-6(/)61F2)2)DDD:5F,NGHB @151 aacggttccgactactctgctgcggtgctggctgcctgtttacgcgccgattgttgcgagatttggacggacgttgacggtctatacctgcgacccgcgtcaggtgccg + 000).K7JA0F29G5(;H:,?3N:A9NI&F8)>15L1<@5A7?JJ5.HBA1NB58='3BA(@:HDE&+0>)A*.<,'(H&GG0/2L8(8<8'NN6F.:2+40*?/-3FN @152 gcggtgctggctgcctgtttacgcgccgattgttgcgagattggacggacgttgacggggtctatacctgcgacccgcgtcaggtgcccga + 00/C+K;>474J:N,K0ECELMC++HE-*N7M+.DHH-=8ABJK8-C&-+-8)B@.34DN/:1@8J;,)-.225E:BMN @160 catcgcttcctggtaggacatcgacttcaacaacctcgcatcgggcacctgacgcggtcgcaggtatagaccccgtcaacgtccgtccaaatctc + 00000(75E,/5><-379KCL7D@3?JJB&)+G1K.HLK48?F1AG/5D:);'E:M6EBIH>E70?:IN'D@-,GJ/N00FEC;/()=>@AI=D* @162 tggacggacgttgacggggtctatacctgcgacccgcgtcaggtgcccccccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctt + 00000/60K<.C;/E?7N:NG?&FDHD/J6?J25.*0:<4*/@N./JM'=:N:I)19I,):'79N/>F?GA.898KJ>H:/6'?BIM31,M9HC@BHCC?C.NNG9', @166 ttgacggtctatacctgcgacccgcgtcaggtgcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctttcctacttcgg + 0H(1;C61L'+F>1>(.83L>99474AE<2MC4./'J6;JL<7J.D?/=,//)I<,.;I(41'@AC&,<27H2:87G<&5NM)43&K372?MM97 @168 gcccgatgcgaggttgttgaagtcgatgtcctaccaggaagcgatggagctttcctacttcggcgctaagttct + 0;&6GM3<,86-2CL-2GH&(,KL>-9MFIG887I;F5@LL/FKH+&:17CB+9NF9,8/L9@<**E,6M355/5KH+E4;KGH-I?@6(70AE;F.,D4F@GJ>-+4BEL&=J**1-:+@.3C&>DE;C&I/>85J)A';,L5:?A/I3<8F*.DJNC9C:-E @172 tctggaactgggcgatgggtaatggtgcggggggggtgaagaactttagcgccgaagtaggaaagctccatcgcttcctggtaggacatcgacttcaacaacctcgca + 0001??5DC7).//M7M5/12?N>79-/K))-5?0M(73HMFF:FI(/*=K:,='G+A7B6'4DILK0-DK@+>HI>A>N/0>GIEJD(3=6761:'>2B/@8/E @177 agcgtacctggtgcttgaggattccggtatttttaatcaggcaagggatctggaactgggcgatgg + 000=7722(3?,M'..)E':EGC(N'@K4/&>6&'C)1-/9477G'@.?9-;+:DE94,=N?H, @184 tccagatcccttgcctgattaaaaataccggaaatcctcaagcaccaggtacgctcattggtgccagccgtgatgaagacgaattaccggtcaaggggcattcca + 000**925<9L,(MEJ9'B7@H>A;&:;-6&CM*74F)GGI/&5<3CE0+>4-5H,D7JF.-F(07>3??D8=HL? @185 caccaggtacgctcattggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctga + 0005,B6(1MJ*9;+LB<=FIEKFG1E+@5BE-947?C2A8'H6<7G&8N2+14-0&A;7=?E*>FF'M @188 ctcattggtgccagccgtgatgaagacgaattaccggtcaagggcattccaatctgaataacatggcaat + JIF22>.NJ0/45N.BB1*A&.M+,)E)2;:<.HA:1>1A52JMM80;I*E8@&AB1I:CJ @189 gaacattgccatgttattcagattggaatgcccttgaccggtaattcgtcttcatcacggctggcaccaatgagcgtacct + B1>7904BE&HG/K/3K9(9B.=J=G/G<47-5*-9CFIA?((F5IJ:0CKLF8D?3FC759A(6=2618(7;EG2,/.LN=C)A97(2*K)E((*,G5D?*C-N4??DME&I6KL9M/1@6J?M9F&D6/0(5FJ4K,;F0=M4A;=?1AN*:+N3+*J=?B1;)6&4:K9(,11IN7G-N1H35>GBBF0*3*'7'D> @192 ccttcatccccggaccagaaacgctgaacattgccatgttattcagattggaaatgcccttgaccggtaattcgtcttcatcacggctggca + 0E=;)>.K6)E;DEJI'(JF2@C1.=A+112CJCL&G?48>08LA(:0EK)JN0:A);@J;5(M&5GF37HDDHMF @195 tggtgccagccgtgatgaagacgaattaccggtcaagggcatttccaatctgaataacatggcaatgttcagcgtttctggtccggggatgaaaggggatggtcggcatggc + 00000)72BLGB>;:(/)&>@(39-N5F5>DL@H<>4C6J3N5KM76GN41/4D7)NM;@N+,E)8,H7*I?* @201 atgttcagcgtttctggtccggggatgaaagggatggtcggcatggcggcgcgcgtcttttgcagc + 0000:*NEE?65I4H;1+A/2;1*-H:=55FK.=,2&@1NH0N@D>IC/6 @205 ggatggtcggcatggcggcgcgcgtcttgcagcgatgtcacgcgccgtatttccgtggtgctgattacgc + ?-E>9B;BJ7/51BA?:N0>+(:-?42:;N;7:-;@8IA.90.* @207 agatgattgcgtaatcagcaccacggaatacggcgcgtgacatcgctgcaaagacgcgcgccgccatgccgaccatccctttcatcccccc + 00=2G+8I>9(MFL8+20KIH6,7<*=6JH76+MMB8;1+JDI''2:JB9=:F65<370I24K0A+LI @210 gtcggcatggcggcgcgcgtcttgcagcgatgtcacgcgcccgtatttccgtggtgctgattacgcaatcatcttccgaatacagcatcagt + 00K9EH2066:6B;;84DN9KB9'9K2L?LH-'&FE.,&GMH0'';.(ML21:B<)2,F7F:@3;35->+NHMIC=7HK*I*1,55A3:1CN6,F?;'*=?(-))=-=A179M9C)M@@8B/=GD*J*5H&>9=L>;/0HB1)3GJ=)C:M&5DFAF;;8I2.0/-48*1:+@FK @214 gcgccgtatttccgtggtgctgattacgcaatcatcttccgaatacagcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaa + 00*C)6CJ1KCB@537DNHD=:'7I=7-62>0KB@9'HH/,;KNC;LA6@,,DI+9&+1L.934D?&B:*IMMB:73KKE=9L>3275,1-B;)MA8* @216 gtgctgattacgcaatcatcttccgaatacagcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacgggcaatgcaggaagagttctacct + 00000@K9(,DHFC0'+8(NC4F50H000D165&F/2M3GE?*A38?<>/:=A89(G0+-9L,'.'AHHAE((IE'9/?,')9E.253@3:EGG3J'--J, @218 agcatcagtttctgcgttccacaaagcgactgtgtgcgagctgaacggcaatgcaggaagagttctacctggaa + 9(D-C320J22CKGGM;:48BA@A6?A4BKD-;5(3,J1CI87KA6>/?)&NG44;3A-1@2)*D:(9*2-09F @219 ctccagtaagccttcttcagttccaggtagaactcttcctgcattgccgttcagctcgcacacagtcgctttgtggaacgcagaaactgatgctgtattcggaagatgattg + 00>2B93(B?'7A,?A?AMBJ;'&&.('?C,2;)2G4&CH82+166BL>08JJHK30E*?69@-L51>K4,=-6'N(D7.-KI4E;,)+CA6G77J7@849 @221 gccgttccgtcactgccagcggctccagtaagccttctttcagttccaggtagaactcttcctgca + 00+(45D(>E;K+F=DH('H/D/';L&AF9F?*:J9AAJ35>G161--4'KIDE5,1C@??2(BD< @223 tggccagccgttccgtcactgccagcggctccagtaagccttcttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcgctttgtggaacgca + 00.IN9DJ'D;214><*69F3808DB(>GB+NEC4G7N19@=;E>?3J0,@>NA55I+52>129J,GK)J4+G39'36NJJF9?8C?9:4'M0=6+E?5359,=G;K6,)F @224 ataatggccagccgttccgtcactgccagcggctccagtaagccttcttttcagttccaggtagaactcttcctgcattgcccgttcagctcgcacacagtcg + 0000FB5(>B0..-,6I,NA-J,>@I868,19H+/@F/N&.KCK>7C:B.(A:>2))< @225 gcaggaagagttctacctggaactgaaagaaggcttactggagccgctggcagtgacggaacggctggccattatctcggt + E<,4@0B551<40I&:B>@54=;>+/,GAKAI9I&4139F&=:5)<3EEE3N))N2L6BHD':'*N2;AM<,17@5D)(@2 @227 aggtgcgcataccatcacctaccaccgagataatggccagccgttccgtcactgccagcggctccagta + 2-@L-;1J.12J(<=G/5+FB5>*J6E;*=M&6M=-)17NDMK/*-, @232 tgagcaatggcgacaatgttgatattggcgcggccagtgcggcaaagaatttcgccgagatcccacgcaaggtgcgcataccatcacct + 09CG+5)&7D80)D.M,07F=:==)A1'-*B(NC&B29NFB,?'HB4D,D1N20/9C@,>D:,'*2'A(01I>,?9@ @237 aattcttgccgcactggcccgcgccaatatcaacattgtcgccattgctcagggatcttctgaacgctcaatctctgtc + 0157B7C<<=MI/,(IB(F&<,N,56BLAM-JD-4I*M)C@E85LFAI+6AM9AAA&31*0N;I-MA'*KB6ELF@I,J @238 cacgacagagattgagcgttcagaagatccctgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaagaatttcgccgaga + 00(0A1L=+=A*+D8L16L&MMGH8K6/12?HH9@,3JH=*BA*8>>.5/,:7B<*G:+E+N?FIA9JD<6?5@?03,*<(*69889;2DEC @239 ttaccacgacagagattgagcgttcagaagatcccctgagcaatggcgacaatgttgatattggcgcgggccagtgcggcaaag + 0000HD2NG95*B=N-='>60/M(BG=N4D9'H4K7D2((E;@/?=0/=2)8J2ACK3B4C:;NN,/AK(3?H05M73&:&9;= @240 caatatcaacattgtcgccattgctcagggatcttctgaacgctcaatctctgtcgtggtaaaaataac + 00000=6G+NN&HM'>NC2C3D/+1F(FN=7D<345)@<**?;39?K7*'13EG@/7=J0N*HF?7I=. @242 caggatcttctgaacgctcaatctctgtcgtggtaaaaataacgatgatgcgaccactggcgtgcg + 00007:?G*5843,G99L:3&*( @245 gatgagtaacgcgcacgccagtggtcgcatcatcgttattttttaccacgacagagattgagcgttcagaagatccct + 000034E0J1)H=4FLJ6,9=6?>:M65EL+-ND-FGJ1'(5515I-9+5AI)D69N:IF<;=5J:8N9:2I5D5J<+ @246 agcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttatttttaccacgacagagattgagcg + 00BK,K4E-L>(L9''64A6@HH>/)G&J20.JLI5&'J@8;2A&I, @249 atcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttattaccacgacagagattgagcgttcagaagatc + 09.'A&1&JAG@/A7I0J'01EB)F-I9I<7(M33,D>G-15'F&&'<>L-(5G?320(.BC.8'+7L31GGI6G.247I933L9)>>'A. @251 cctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttattttttaccacg + 000,J=KE?;C-CD6AH@23+J@&8?3E1@8=JI./<=,>95.-8?0K/*>CF?L@)@*0E&JC5GAAH&I.5> @252 taacgatgatgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttat + 8@NMID/I)'8JKA26KH@K@2A7&?HH028&=:/6?H897F?2E=;D2+F6AAGM@*G13LKE<( @253 tcagggatcttctgaacgctcaatctctgtcgtggtaaaaaataacgatgatgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttatcg + 000;N3C2/@<'71NE1J<5B<-LID0H*,+N)G)E,4)@/4=3-:?L;-2/(M56:LI1*:N.(AE9H96LJ6A=D1(:&N;0-:A>A0.JE1MM5LL@GG @255 cacttcgataacctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgttattttaccacgacagagattgag + 0000H<+'A4A.DG-<;.A.-HJ/7;5H=?KC8I0,5MH;2.F?=:0C,K4&9,4/)@JFHE8,H.&)G,I6:1CN25BKDFM1+7/658=-M>H @256 acgatgatgcgaccactggcgtgcgcgttactctcagatgctgttcaataccgatcaggttatcgaagtgtt + F+B11,?-9I:)@60;,KMKG&F'3@?.=9N)H/,BE-3/JF4?&?9B/8*:36.4746=<9D>?DH.D22J92N;>(J+7H6<9* @258 atgcgaccactggcgtgcgcgttactcatcagatgctgttcaataccgatcaggttatcgaagtgttgtgattggcgtcggtggcgttggcgg + H-=2FK3C7*H7.9@&H:F4LD=(;+&.&I<3E87J,M+K+;1C2D-(=IIA47I-E46N;G7:E28K,0L1*-I?3/NG77H);&?*@+N=? @259 ctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcggtattgaacagcatctgatgagtaacgcgcacgccagtggtcgcatcatcgt + =.I;NB,<<.JI/FK.,'J7ACL+NK=NH.2FM)5;9;7NBNL:,KB/)3MB6-0L:-5E-F>DJNEJ@,@63&04H?78E;B?G2DEGJMNJN.'8:8;3;F2C+'I17:0C @260 atgctgttcaataccgatcaggttatcgaagtgtttgtgattggcgtcggtggcgttggcggtgcgctgctggagcaactgaagcgtcagcaa + 000'9K5(G4<*/4A0BI3@19/KFD@.J>MMA96/-G6,2*/LCB-941HFK56=5L,29)8AI942(,/L5@+5KJI?/@;53(93BB1:?J2=FN;B&@>.032/:M+1B52L=,/*DB=2'G7I<.J2;8H:*I>;GNNC@9G-='LKD;F'6E @263 ttcagccagcttttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcggtattga + 0000;;0KD2'-D-1L0)/M1@A3>,9@DE-4)DB-@*C>6=,?GK)J8J4.)2C47&9M1.N0='1D(>FBM65ID,1=);FB7D.7GDI1>+I1/L @264 tcttcagccagcttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgccaatcacaaacacttcgataacctgatcg + 000,?86K-E'/*6I@=2HGKM:)JDK'>C07HF.?;?)K+:A;))F3=NL)*D.LM1AB,N70-+78E2J&M(.*&D@'A-G)3.AF>1J @265 gtgattggcgtcggtggcgttggcggtgcgctgctggagcaactgaagcgtcagcaaagctggctgaaga + 000('9@7C:L8M/L7H//A-M:(-@FH.G255MD0M+;:1(DLJCH<.C,9+1N<-F=9*NG5:A)I31 @268 ccgcagacacgtaagtcgatatgtttattcttcagccagctttgctgacgcttcagttgctccagcagcgcaccgccaacgccaccgacgcca + 6CEBI5GFJ'61D(8:C7C7F6K>M,6+&9N*36J,*?0;E/G6?3 @271 agcaactgaagcgtcagcaagctggctgaagaataacatatcgacttacgtgtctgcggtgttgccaactcgaaggctct + 7;<,(;)=H?(?G4854*;/N*4KA?'AJ;6BL':F*M)8@JH,HH10EJ('&C';.*0E:'()@'(DFHDM)G)F5-8@ @272 aacagagccttcgagttggcaacaccgcagacacgtaagtcgatatgtttattcttcagccagctttgctgacgcttcagttgctccagca + 00C5,7FH=828;ILNJ(6A44DC&9L3<7&N>B)6'2,J2/KFI0N.D7FA7IAH6'6H/N&(()FF&F-'E5&L7L6E,,*JI/+9&@83C/KJIC*IK)5*2H662+N @276 cgctgctggagcaactgaagcgtcagcaagctggctgaagaataaacatatcgacttacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaa + 000),<+H(F48.:M?0656FJNH,.2@A(2ED'IB8.92,:9KH7>5E7'5J?M&)))?:31.M--5;=B+J=F00&7@.9)6I3@<)@>?3G:2AD.63=/F+:87<.7.=F @278 tacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggc + D4.BA)670:MAL;'J'(;0FA)4I80'0M2+IK0?1IJ)47>*1/=CC54=/>3BNC8=0>B;.7;7?>C'I4(6)L4E-2HB(5'N::3KFN,?9/D)DC4=4J,*,>DFL2'+G@@;/K,4*H1(A16?.?0DBDE @282 gtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaactggcaggaagaactg + <+?)=L7@N2FGJE>>+ED1J9B5;KFEIE&//)4*3C.A8H?3C0C:GC)<*8NKL(@@@46AEJK)J @283 cgccagttcttcctgccagttttccagattaaggccatgtacattggtgagcagagccttcgagttggcaacaccgcagacacgtaagtcgatatgttattc + ;6LC2@7?.DL*;+254=H4I12B.'3(6>5=3A=39N7D/6)5IG5G(F(C2A9@;DC'=:(3,8>LA33J5<95,,H@:.A=A''-I9;C0=;A*+)72. @284 aacatatcgacttacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcg + (4-*2>G*04M8:)C@+E10IEE,0/C6EL08=9,.)NC5,I:)+7'&82'JML;/.4GHCC?G,11I3IDGI/(==1KLM'?1C:5=6DG8=-BHN= @285 gtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaaaactggcaggaagaactggcg + 00?>EBFI>5M/C&,@N5*8@J4FKLA404/4;N&'2B3,G>CM8)4*:.F7;@EHL*F/>;A@).AEB:/23)J60L)M7BI @286 tacgtgtctgcggtgttgccaactcgaaggctctgctcaccaatgtacatggccttaatctggaactggcaggaagaactggcgc + HJ=;;.*.?21LN)496-(((I5/N(BI50>F.A=5L/6.8779K''4*9:L6>:/5H'.6L1@1G+7BD7L:K.N6*04&>F7>E'B)D02=(I7E,6C94B.(.?K8;>/G>,6FK83:C8GH62>J&E0/NF>C3&*+E:EM;&41N?9L2'9,MH-)I382>L3/GLCJ&-,(;72.+H2?8@8,H*A)@-?@7D5MLD6L/GE @292 aagcgccccgagattaaacggctctttggcttgcgccagttcttcctgccagttttccagattaaggc + 00080)M28+8MB;2JHLG,9D6/&7)H'-/GJJF@CL<*3K2)I*??>*4LFAF:(HGF:32KKJ1. @296 cgaaggctctgctcaccaatgtacatggccttaatctggaactggcaggaagaactggcgcaagccaaagagccgtttaatctcgggcgcttaattcgcctcgtgaaaaa + 000>G&?F4,:>GD-)ILN;-7>(97FNC5C.@I;3JE(101<0K1;K'7F;M9?4DL.K15C/L<=K9F3>A33.,D'27<,26BH5E?'H++3C5,>H/MCE95K=6J @297 agatgatattcttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagttcttcctgccagttttccagatt + 00000N(?)2GEJ++2N=BM&/=LAKKN10H*DNF='CFE+H*'(MG+MEJ00M&',1AEJC3D4;;.B/GJ=J7E53J?JDI1'(7( @302 tgaccgggttcagcagatgatattctttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagtt + 0003F,*/BBJ3&6J@H:=-6F&68(-@F06DCFIG(KMD;N::BI3?I4)4B*:81ID;:/BL-1CNHM0B)@/=C3IJ&*L-=L&G4;'.*9>?ND= @307 gctggaagtgcagtcaacaatgaccggggttcagcagatgatattctttcacgaggcgaattaagcgcccgagattaaacggctctttggcttgcgccagtt + 003/+-/0D?>+N3EB,FL?2?/(85ENEH5AMB3;:I..0==/9H'H;BJNH(8@/+6CN6C1DA)IG83H'G+*)H901,1F;:M4&'E=CNC.:@'1:8 @310 cgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggggggttcagcagatgatattctttcacgagg + 00000LF<9+;FH?*5-1L.9L5(4(N=-8FD(.A&&J36A*/1<0I*.=B=)'1D.88/5.+:-KG @311 tcgcgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccggttcagcagatgatattcttcacgaggcgaattaagcgcccgaga + :+.L6E@3@B*@8=+LK?G'31K/I7=*NJ<0*0M,J52GAB4'B,75:KDIJ6>'E*9N/7M9+:E3/E)N@<73'F)0/NJ?&BEB?>G5IBJ7+,/'K363CA;EJ @312 taatctcggcgcttaattcgcctcgtgaagaatatcatctgctgaacccggtcattgttgactgcacttccagccaggcagtggcggatcaatatgccgacttcctgcgcgaa + :+.&G>&*C/10)3A@.LLA&0HC-J45;.866L+F@A/(H.-(F@N11:39;FAFHHH9BK2FG<==HJ7;GA34ADJM*7C.FK*'&/<*C.EM0=6:A=G&M,;CI:?9J @314 gtgacaacgtggaaccttcgcgcaggaagtcggcatattgatccgccactgcctggctggaagt + 0@7;:C8=N09FG&90M:*62E;KLKIHKI8D:BC6:L35H<&@NG@@297?(&+4H2(-@A>? @315 cctcgtgaaagaatatcatctgctgaacccggtcattgttgactgcacttccagccaggcagtggcggatcaatatgccgacttcctgcgcgaaggtttccacgttgtcacgc + 00B02H9:9*1+?G,.+(I@5/8AD>:=9?==N'/(,(GHBD2=I&71A9>GE57K3*27+.D:4=6?=G(=>2HM3D=89?*0IANL850*=3>(11II'C-JIJ*01J2:;E348F&MMC1/>('FDA.**>83GIM;-MM03@EH'5=F(=D*2/A(@(BFG9L@+KA@28I@@:G>FL'@8*N;K(> @318 ttgttcggcgtgacaacgtggaaaccttcgcgcaggaagtcggcatattgatccgccactgcctggctggaagtgcagtcaacaatgaccgggttcagcagatgatattc + 00C23M,&E&&B)-AIJ*6EE.N=03613*6((MCE@2B(@F7KJALE3JKM2H5(.K*I4,H,6(:(&N2L @319 ccaggcagtggcggatcaatatgccgacttcctgcgcgaaggtttccacgttgtcacgccgaacaaggccaacacctcgtcg + 0K5H6J?-95J1H0:BC4<.7>6J1'NA,)MC5B+9+49GJ+MN:G;F7F:K1E;J(?8L5MMC:(8*B0?48EJ' @320 tatgccgacttcctgcgcgaagtttttccacgttgtcacgccgaacaaaaaggccaacacctcgtcgat + 000F922=>G>+'I(&D=>=5'2'09)H@I,BG;9>6/EF/C,:56GM-5(1.)AK@+'*L&.@A&(F5D,*9FN @327 aaggccaacacctcgtcgatggattactaccatcagttgcgttatgcggcggaaaaatcgcggcgtaaattcctctatgac + 0B+>C)3E7&.K3J=-)3L*:./6H,=>2KL?6A07L(.90?&33(N5:1LN'8L>.MFL'ANDLHHBB&,4)':,3L:8MG9/80<-H39L3BIILDC?HL8>L*;J./G.9M);?8K28+3GN:&86FKE>D=@CN;NF//)*31J;(/*K @330 tccagccaacgttggtgtcatagaggaatttacgccgcgatttttccgccgcataacgcaactgatggtagtaatccatcgacgagg + 00(D/=F*G/33;G><185L0,AA)F7BM@4G-?-IMGL?7<@A3&3KF&)A6,GC2?*;D5487L'JL.7'M45G0E'475(219> @331 gtcacgccgaacaaaaaggccaacacctcgtcgatggattactaccatcagttgcgttatgcggcggaaaaatcgcggcgtaaattcctctatgacaccaacgttggggctggat + 0/,-+B+)BFI;?L;H/.'54>,))-C2'3;(*)3)/,;-.-K26,K7+30CN,+0M=/@B1E>H?(/((NMJ)H6&,BD59,)=<;M22K4,J99(7I22DM'N)+FJ,EK2C- @332 ataaccggtaatccagccccaacgttggtgtcatagaggaatttacgccgcgattccgccgcataacgcaactgatggtagtaatcc + 00))A'4G@091GL3AK(@8L428=7:-?*C1+E-96.6D@;02-??NK/N7+N1JC)MM&K400A,1J0-*I(C7G?F+/).0K08=4/-AJB4:=4K'(5,G='?8HN92+,(+B)(B1AKI>=9CBEEEE.H7+1C8&576=DH/-J)763>8ML1L5+(?*+4EG0?:CJGN:@50):('/(:028IG57M @338 aaccagaaagaatgccggagaacttcatcaattcatcacctgcattgagcagattttgcaggttctcaataaccggtaatcca + NG/BH9-AAFB@,E@'3E908.&:'/NM'KLH12'K?:*/;-7:A:KA=D494:>DC>*18.K;DAB@K'LH66'<.7B8?LN>09&(FB1;@27&AN*'<'7&;:2L8953::7>HCGN&+I4?+92?(@J17K@4G.L):6 @341 aacctgcaaaatctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttagacgaag + 000M8KAM-LKDEB697+)-NJ9.@>/2MG6,D:1LB;<*?JJ&&)2B89)NEJ.DCI(&<,IN)F?0,&.'B,6E8I<;JE,,H@57*=N'7I=4A @343 aaaaaatctgctcaatgcaggtgatgaattgatgaagttctccggcattcttctggttcgctttcttatatcttcggcaagttagacgaaggcatg + 000F8:+G4;'N054J?&G.>':12@6231-75J86N99G @344 tctgctcaatgcaggtgatgaattgatgaagttctccggcattctttctggttcgctttcttatatcttcggcaagttcgacgaaggcatgagttctc + 0CHA87M&MN?L0.?+'2GL/+++E)LH,4.C68D:7F=7J6?1/F2I.@H&)&-:.,&317G5-MLC/3BMG=HC469.+.6)>.F/H=BF259I.+LF'5/6@8B2>L4441AN4-()AD(E0>*0C2344A6*6:DL*3N,)&.774L(E,6CE-D(&B(C6NIM29DB/A8M:ME49GK.64HEJ @352 tcatctcgcgggtccggttcggtataacccattccgcgccagcgtggtcgcctcggagaaactcatgccttcgtctaacttgccgaagatataagaa + 00I88:5('DG1G@D'/);:1;-A>I.D30BA7+;@F137=8J07?2:H@M,E>4)HNAHJGE3?,)L45*N,BFA(-9JC&=<(-DG/M8>>I6'? @353 gacgaaggcatgagtttctccaggcgaccacgctggcgcggaaatgggttataccgaaccggacccgcgagatgatctttctggtatggatgtg + 000*26+>(/G0843C71'F?2IC6*M1CKGK)L/(;H@0L1?2;C(7,B.3C0H>47>MK:0@CGL0,:+D3A5,-KL1I>@-;<0,4C@(-L @355 gcgccacatccataccagaaaaagatcatctcgcgggtccggttcggtataacccatttcccgcgccagcgtggtcgcctcggagaaactc + 0000-)-D*<1J(1A*JDLH?-6M*9*9H0J.&?-9DK/EKF09N<.:DA.L)6,9C;IDH&-?(-:KB;5(/0&;*9A:JA>C2LD4H1' @362 caggttcaatttcaatatccgccagctccagttcacgtcccgtttcacgagcgagaatcaatagttttacgcgccacatccataccagaaagatcatctcgcgggtccggttcg + 000-?/?2.?(/48,@5F5F<;'I=9J7A6?2C,9,JGIN;CA8I3JL---IB'L45I(3B @363 taaactctgcgggcagcacaggttcaatttcaatatccgccagctccagttcacgtcccgtttcacg + 0HNE7HJ7A865'-9.E/N57A4=HHII&IB2;2B:K<&/':.(BKL6F&/3C2FJKF1&;//48J? @366 cgccacgcgcgcggcaaagagatcgtcgagttgtgacagattcgccataagcggcaacatcaccctcggcg + 9;,*HFG+)'-4=&I/(&+,F93K1F69&21CL:>B7L5B4-CGC2K(EHB8G>0+N-N=C+E=:G=L.:G @367 gtgatgttgccgcttttatggcgaatctgtcacaactcgacatctctttgccgcgccgtggcgaaggcccgtgatgaaggaa + 000F:G@43?K*3.E<>-62N:)=<(K37G>B10@C+*G03AG>8)?3CI89A<A8=>68/ @368 gttaacgccgagggtgatgttgccgctttttttatggcgaatctgtcacaactcgacgatctctttgccgcgcgcgtggcgaaggcccgtgatgaaggaaaagttttgcgct + 000G@&?2*MI;G+,H5'F,'(2>791F'@3,:K4&9=G85G/FM=9).(48@BK(857,1G??N7DJ&L>E+<(A5LGC7+);;8+>)7MD6>E2M.0&7H'@4< @369 gtcacaactcgacgatctctttgccgcgcgcgtggcgaaggcccgtgatgaaggaaaagttttgcgctatgttgg + 000F/6LM1;2:*0IK'J()HF3.8.4-9K<4@FA7*25G)C;?7;B3H*:&@B?K<= @371 atcttcatcaatattgccaacatagcgcaaaacttttccttcatcacgggccttcgccacgcgcgcggcaa + 0-DME>MB8>/M=03M<*K)0:M:5L9=7>BH85'*N+G>/HN0(>:720;5B)7>-?=?C)6>CM&,K1J @375 ccgtgatgaaggaaaagttttgcgctatgttggcaatattgatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgt + 0-34)/7<.+14;E8B;)I @376 tgatgaaggaaaagttgcgctatgttggcaatattgatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgttc + 7+@5EJ:6,G:E5;AKDL&4HB'><)E*;BL*CL-H=8D+*BG'C5LH)*/'D+6+E?E&MNI2D><*9;57<2/476J?@+C(4 @378 catttttcactttgaacagcggatcattaccatccacttcggcaatcttcacgcggcagacgccatcttcatcaatattgccaac + 00DCDD7+>8ILFJ)@&J5@.LJ/918(?4G'7G*=.8H(1A-I2-@G;--+)>KF'IC-&M,D83='?HM=B>83L;LGFJM,: @379 gatgaagatggcgtctgccgcgtgaagattgccgaagtggatggtaatgatccgctgttcaagtgaaatggcgaaaacgccctggccttctatag + KL.)M0-BLBJ:+8HJ<8?G9&GH&6?ID>K1CA=8=/MDC14/==,9<) @383 atccgcgcagtaccaacggcagcggctgataatagtggctatagaaggccaggcgttttcgccatttttcactttgaacagcggatc + I(&D<=H4@I7;I4HJ(&*GC36='8643N?):NM-,3.('=G.<-B.JIF/)-4;+K;72<44>*)D<@)DG98MD=&GF9K3I2E5-6/C@G4?<(E(D6&E @386 aacgtcattgccgcaccatatccgcgcagtaccaacggcagcggctgataatagtggctatagaaggccagggcgt + EE)?9N:F(K+F:,6@-FLB030A6;LN30*I?.M0;49J&B<,,+K>'>AKKH(:7-;=/8G6)N:.*;*3C,629NKGBAA;(*;:J< @389 atagccactattatcagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctg + 0000-;(G/(AI))FNNN;-M.38=((C>*-G1C,7A:-HC5@.60(.:43A-3@GC'E44''>42&-M=6C:K+C>NHI@:?8 @391 actattatcagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctg + 00JI-0318GFGDGD6@G'MF=?/M3*K@,B?.*F6.2H44D5D04KK7.=6F:AHFE)7L2F6(I+1;CB52@LF)'N3*F? @392 acgtagcagatcagcaagacaccggcagctgtaacgtcattgccgcaccatatccgcgcagtaccaacggcagcggc + 26@1;L<.C63JBC?-<'&J*(;):B1:/MEKAD+J'H&>')0D65+05D@0+C34;0D6>CG>I?M0H1)EG&L3I @393 cagccgctgccgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtcttgctgatctgctacgtaccctct + 0'.*;)E'&>CN*<->,:C>L7GL(:E;@/E7DF1M(-?F11L@)JEA>AJIM*D-*:8/:M)&LMCKD/@,:6/E26@.( @397 cgttggtactgcgcggatatggtgcgggcaatgacgttacagctgccggtgtctttgctgatctgctacgtaccctctcatggaagttaggagtctgacatggttaa + 000M)G+7HK0?2DA+G/=B(=9C7@9'6ALMF):&9'9><0AI5M/-K? @405 gcaccatcaacaggtgtcaccgccgccgagcacatcaaccgacgctcatattggcactggaagccggggcataaactttaaccatgtcagactcctaac + -+7G(>JI9+JN=C/=.+9.:= @406 caatgcaccatcaacaggtgtcaccgccgccccccgagcacatcaaacccgacgctcatattggcactggaagccggggcataaactttaac + 000000N00/6-8:BI703(,II+.GN'EE6=L+K/2;>8),4+=;BNI.D8438J?K&B/D,L@((5<8J55*E:(A3/D6H6/'KC2I24 @410 gttgatgtgctcggggcggcggtgacacctgttgatggtgcattgctcggagatgtagtcacggttgaggcggc + -M?,<00)N4NB/+<(N):@(N=&J70)8'&BE/)76?8>*4>F<,>FHC:&6G>K/A)5LEF388IMJID2', @411 tgaatgtctctgccgcctcaaccgtgactacatctaaaagcaatgcaccatcaacaggtgtcaccgccgccccgagc + 0D*;E.5??='*?F/61()JJ4A)>ILL8M>5/?4=C?L5'4>:/*&.=5+'I8=MK;*9@/E(,9.=/KDF< @413 aggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatcaacaggtgtca + CE.?+L00>)4897JM'0II.5FE61I76*1NDDF9AA39GDB,G)84K52+E4=D,'G@I2CIM*+,=()K==,:L(<@4GKA8GFNA7?6@L<9D=/ @415 cctgttgatggtgcattgctcggagatgtagtcacggttgaggcggcagagacattcactctcaacaacctcggacgctt + (;G5<107,F078J8H7D'61*C?-L63H9=M8:9N6;JD+;ELK-.)*3D&,&D30627NA<>L'DE/(L;',>:&K*/,;E-& @417 cgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatc + D()C0:AG;.GKM;?K>@,.-@?1<2:=KC*N>8LL?./HN-M;&L34L34B.04)&H*F+F0 @418 tgcattgctcggagatgtagtcacggttgacgcggcagagacattcagtctcaacaacctcggacgctttgccgat + (EADDA@KE'::2J,,,-,J;:J)88EJD;CA6C)JF.+B:D3M*?C*B>:ID:AGD5 @419 tatcggcaagcgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccgagcaatgcaccatcaacaggtgtcaccgccgccccgagcac + 02KE';3@2EB3;G5/NGN4*JG,E/K0L56.BH'4L8K9A4,8LK?&+D-7CMB30L)8))N.17N:IJ&AA*6M>:076ECJG,L9&D&)M1@L??(4:57+C*3,><9/6&(0)M>1NB;IA4D0F5?+B:@,B9/AM:CN)0J=3+E>LC,'E&B)K'N/658:4/II,&05/22@'554+L&).FD9-:<&+/+@;&.=H:C9KBJ4.8@7G.)6 @424 tctgacggcagcttatcggcaaagcgtccgaggttgttgagactgaatgtctctgccgcctcaaccgtgactacatctccg + 16=E=JI&&:;9I:>MKI=;,8?*+G-96A;;17@4G?C:+:/E6/HJKICDI@:H=5N4NB?>H+/J5?M6;>===AI,= @425 acctgttgatggtgcattgctcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaa + 09BCJMF0D609&=GCB0D1F(.;-AGAH);;742KJ(6I-0.AFF>;IBFI2'; @426 tcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaa + 6IE4EJ';/F5.<6A(B.BL8613)3'CBD,:I6=7?/72;3AN&+23B8524+'(J'&9E3K3C1GHBL&'02(/9ECD>/5+(*3=HHF/?)& @432 tcggagatgtagtcacggttgaggcggcagagacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaaccacggaaaatatcgttatcagtg + 00:2'.)(>@:A.E'I:C=?:,J@:2,GC4.=G930>*0N&5<)JM@5K-)0.>B+L9/J)/CKK68C7@I(D'H/A<56/IND7?'DMGIN@AJ1&<1/?(/8-4& @439 gacattcagtctcaacaacctcggacgctttgccgataagctgccgtcagaaccacgggaaaatatcgtttatcagtgctgggagcgtttttgccaggaactgg + 0000:;(A;&)/HD62;)?AD&1)+2=JJA,06KF++1:(J+1BJ-*B5;<83&7/?/+B)NB88<+&LMD.&80B,:FGNF*B0*'IJ':K>+8MI<71BE-0 @441 ttccagggtcatcgccactggaattttgcttacccagttcctggcaaaaacgctcccagcactgataa + 0+=1=>ENA5:&5BJ-C9'AM(7<1(;1HJK18=8))-EN9+JJL&2;9A54(A2I48N8NC.JFJ)055NCD(+0GA9&.3HJB(@A34 @446 gccatcagcgccgcgaccaccgaacaggcactggagcctaagccccgaaccgatcggcatattcttttccagggtcatc + 000B4BE62..C@8C8CD':1N3K1AK6;A)E(54?FE?(7J77=89-0NK>B;HG?FEE0N>IAKH86NEDC23(7<, @448 tcatcgccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccgatcggcatattctttc + 00A/I<1?NIJC=.BCBL;C@95:=L*7'*9J6)6+=+J=.LMI?B*)?L)7FA.5+*(>E0@+837*G4,4 @449 cagtgttcattcatcgccatcagcgccgcgaccaccgaacaggcactggagcctaagcccgaaccg + :>-752F,6IAD*E+B7KN-KF)(?,@)L&>CD/*1?(CF&.9(D&/=34:D?,8/3L**+1E56. @450 atgccgatcggttcggcttaggctccagtgcctgttcggtggtcgcggcgctgatggcgatgaatgaacactgcggcaagccgc + @C/CMMN=B:7,D9JJJ.NDE(=LGI8D10.85ABI4=GF)?J(G8N&.N@H58J@?JMN;7K<*MM64>?M/3643,H?:-+E8?5&>.2H;249B4A2A8G<81?C*J?+N;8>C)2((-,;2F,7'/4+3-1,N/.JK0/7B.2(&J/-H9D*GF'+H,6CH'D1A+D&<(0:0:+,J>.A3.,<;.+3@2JIJJL&I*)0'2>*:K3HHL9;9,GB.-A-;AC'+139I/D5

    0HK=1-BA5M)I>'/+-'<2+3@9@N @460 gacactcgtttgctggctttgatgggcgagctggaaggccgtatctccgcagcattcattacgacaacgtggca + F/7D44J/0+88=3E2;K2IN&I,'F22=1:B(@JM9/L)K<:GNI<7F== @461 acggtgccacgttgtcgtaatgaatgctgccggagatacggccttccagctcgcccatcaaagccagcaaacgagtgtcattaagcggcttgccgcagtgttcattcatcgc + 000000;GI(CM-9>':JK5NE5A..=0'I+?>7AJ>I'..H)/<2/M44(@,-<2=+F2/8A?5'M;BI5I'-&E:./7&ELAKGEB*01 @463 gatggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcgg + M>:-EJ-;8-;H@KH+-4JH:71KI8.==6NJLKF.<+5/550.*LH')NNEB+@4GL95L/&:8C=9 @464 gatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgc + 005/6)HH;25-2A*.I*?M&FN&FF=4FB4?(G/8'53+=?DJA*;I*+MB&KF?L:?6/:E(*24I?) @466 tttgctggctttgatgggcgagctggaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatc + 00D4BA4;'C2I&9&6+N:<4E5*3;AI+L&-JLE)5N(6&&5>@56+8E0K>E?1<*F1-;4@2/9/<)/:-+M)-0B6-C4M3,/36=I1?3B=>+M;MG8.?@IC/AK7GA3H/882<,IN(0*'BA.0@:,0?8<,I@@@5GB @468 gaaggccgtatctccggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatc + ,I9,N/=HDIAE?E'5J:+-<)6I&*@;0<(64D*N9N2-88.82)-:26H41M9&M3H=+=9C88)K8(A9FA: @469 tcttcgatcatcaactgcataccaccgagaaaacacggtgccacgttgtcgtaatgaatgctgccggagatacggccttccagct + 2;/7/H2LI,@=I0F4?)H'?=+6DIIFM*;-=3.*7+F6-(I&208M/*8E/3E/( @471 ggcagcattcattacgacaacgtggcaccgtgttttctcggtggtatgcagttgatgatcgaagaaacgacatcatcagcc + ;7/C*014+A077F,7FN0MH(.L==F5I4?:>)C(('91K??:-M1 @472 gcacttgctggctgatgatgtcgttttcttcgatcatcaactgcataccaccgagaacacggtgccacgttgtcgtaatgaatgctgccggagatacggcct + 00-'D51D321KIMJ9(C(3>E<'/9M(=?8)4G+0;=@F<+DNG;(*;+?3@?<,?MEN?,:J1+L(E8B==6D1FM4;:MA?D3AG.C(((N?M96I'1&K62M @476 ttaatccccggatacgccagcacccacagccactcatcaaccctggcacttgctggctgatgatgtcgt + *;08G&-M05KH)EMK0H/F5:'&-IAM8:/*3FH1N@6E<&J,'?CFC'.&*FK@3E+@MD&:1*D7- @477 tatgcagttgatgatcgaagaacgacatcatcagccagcaagtgccagggtttgatgagtggctgtgggtgctggcgtatccggggattaaagtctc + 0H;(K51G('3C.4JA.-5)')?8K0>8>M-13;67N:?M(3E:JHE.'*/C(;F1HK13=+KC5*2 @479 aatagcccctggcttctgccgtcgagactttaatccccggatacgccagcacccacagccactcatcaaaacc + 000>4GLL@*'&DJ8))CF@5AI/A,=>?AD-/1H<=@>A6CE;7KN67IⅅLJI(19GL,+()2@GB/(; @485 gccagggtttgatgagtggctgtgggtgctggcgtatccggggattaaagtctcgacggcagaagccaggctattttaccggcgcagtatcgccgccaggattgcattg + 000;+IH<<(GEH6C&'.2&-K5?.=GN?,20&(GC46H>>??=<.G-LN70*J?I8:M)9K9JMNECN-64.89&B @487 aagtctcgacggcagaagccaggctattttaccggcgcagtatcgccgccaggattgcattgcgcacgg + 00M=/KA;DLN<'=5>-=;.D+C+L-E0A07)+GINN61,G9C@)<&F?&)INLEI@)KI)=M57L7I= @494 ccgccaggattgcattgcgcacggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgag + 00+4NA>EB>)M4ED=//J:7F5F.++@FE;&;JN6)?0-B2GJ)6G/9IE&LK9CJ<=N&&@LJ95F.*7M @495 gcagaagccaggctattttaccggcgcagtatcgccgccaggattgcattgcgcacggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagc + 0*5LIK.B260L+)2&>4/.A?864:)B1F'E,12)J(+I6BK?M6.A889+G(::=()MAIB5K70//5:)3095D@DH4IIFJ(L'L:'MFH*3IHEL8NC&0E.?@8BN>D;5<+89>N=6=II10C( @498 attgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatg + 0000D'1='0.G8(,N)H/5:,:8;.<1;:KFK5)6JME;0)?FE+(5D<;1L'I01?E+<=N;L,/7L;17I.INEJ8;?,E @499 ttttttaccggcgcagtatcgccgccaggattgcattgcgcacgggcgacatctggcaggcttcattcacgcctgctattccccccgtcagcctgagcttgccgcgaagctgatgaa + 000000F92/J:2<:H+&BL&/I*?L28K2*EJ9F-GKE:HE))7:M4M@6;1+MC:<2A9G()78AMC5B26H7JC,396&L2MN5,B@MC4,JA,FJ@HH8*H+K8+&*1<02.5 @500 acggcgacatctggcaggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaac + I,4BF,8&)D(:H>5.73(0*6B81<2A?I;;L1F;,:8IK:H@D976@M>7GCI)M,.''ML?*;CJ4-7+*J/NK4&GC(-NAE?5K @501 caggcttcattcacgcctgctattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacc + 0:?;DH,&A);B)51H+L0(H7&@)=NKK?A?CH7IJBA//./IJ7B,9N2A>JI**B>56A?3-E&B>J64*>AM @502 ttccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacgg + 009G>7BD9-?CE??)&C*>KCF6+@L/J8>A;9'I<-5)*6?6H,F.(B0I4M&4//+K5J,/4; @503 aaccgttcacggtagggggttcagcgataacatctttcatcagcttcgcggcaagctcaggctgacgggaatagcaggc + 000059*90,N&525=4C,GG2+8H8I; @508 gccggaagcctggcagtaaccgttcacggtagggttcagcgataacatcttcatcagcttcgcggcaagctc + 00,13@83646HB?6=4M(>8EK6:+2M5E)I+->N=1.87HN7I>91D&,2;+7G-+AKCKN8.F67A;F- @509 tcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcagg + 0009BF4&4/B(<&L+482LKAK1H40@72I.>M-G31,(53?C'?G82A)LLI/GB+*4CC1L;88B:'L)+@=8CJ1G7>+ @510 tattcccgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacctaccgtgaacggttactgccaggcttccggcaggc + )G=CK;N0+GG'.4L*G6M*>7EKDHB+()N:N8H)&G(MDI:-/),,3:.F915:8=JGJF'?CD&'3MH&0L*C>0D6MN23E5')E9& @512 cgtcagcctgagcttgccgcgaagctgatgaaagatgttatcgctgaacctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcg + 0000G'';'B4IF>DMI6;FJHFH9NI>F(N-I.2.G=@?/7I?JAC7+GA;3'),9LEF?&CM;(@(8G6=I'63E;2,HJD,F8CCC44G3;. @513 tcagcctgagcttgccgcgaagctgatgaagatgttatcgctgaacctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcg + 0.'7J6,H@C22HGB>M.(?*64@643&1@C,=->N+(7/(3K-@+FLNG,?E/J---GD6=*.>.&9'/AJN1&6N@(&F@JJBEJC67+F @514 ccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtaggttcagcgataacatcttcatcagcttcgcggcaagctcaggc + 00).I04?EK;)B)/62:/<0F/.:/:K1+888+7=/59DCHN'NE,KA=@/L/;G*//E6?;NINL*,* @515 gaaaagatgttatcgctgaaccctaccgtgaacggttactgccaggcttccggcaggcgcggcaggcggt + 000&=K.@)>:J>83G'3(/4:4JH8@7,-N5@//K;)//C&>7D@N:7L=.M*M*=D)2K/=@7( @517 ttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggttcagcgataacatct + .;G3C3-ELJ(E4)@1&4&,<,JM5JLAL-91?-(H@LA @519 gcgccgatttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttcacggtagggtccagcgataac + 0000(30DNE&&-A+9C4G>@I026)JAM0=ID,;L@?;I149L6/;?,8:.':GA+'B@(2L);3A.B?+E81K@,2.@;?>C5E5;9*'>K7M6562*AI&9C?G @523 gttactgccaggcttccggcaggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttg + 000I>)+E-,73G@,8:,&J:F32>,M=BK+,J/G7F+FADHF&N;7GCB0*&A49D)A2K*83NMC;M,4@.67?NN/5)(B @524 gagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcgaccgcctgccgcgcctgccggaagcctggcagtaaccgttca + *KGBF=M78LN86MGA2KG2L3K:,259M9+B.HI8DD+?GC0H@J4;&NN0E2B9C)J(8KCC*&/>:I:)36-6M<@BA:*/@7&-&62,M>E.L38BM @525 aggcgcggcaggcggtcgcggaaatcggcgcggtagcgagcggtatctccggctccggcccgaccttgttcgctctgtgtgacaagc + 0K>*K?65**&=<-A.3NB6>K&FE2.>8J&865,D22I??L/;A@(.LJ&<0C9<7**M,/A4,@I>CH;BFM/94+K':.C:BH< @526 gaacggttactgccaggcttccggcaggcgcggcaggcggtcgcggaatcggcgcggtagcgagcggtatctccggctccggccgaccttgttcgctctgtgtgacaagccgg + MN@B@JGKMN'/CGKL:288B*A,1?)?*)'.4I7CB@A014@097<@8?0L3G(J9J?/CJM+*9=N>7HN=<&J?'J3'KH@)=F>(318>D2CM7 @529 ctgggcggtttccggcttgtcacacagagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcgaccgcctgccgcgcctgccggaagcctg + 009H69>L9@@A?2B11AD'9>K-L9466DG0<)BA(6?-0+8HJ=L7=A54IN?L+J/B(/1B0)>J@KEKD(@0J0=K*'+'7J>3/H@=/5(*/&;8GE0149)I23A-D @530 atctccggctccggcccgaccttgttcgctctgtgtgacaagccggaaccgcccagcgcgttgccgactggttgg + 0.'N3.159A)IM3,ED'.JNJ(47087<4.23M+&@,':.&0G4-F&FKE026G* @531 ccggctccggccgaccttgttcgctctgtgtgacaagccggaaccgcccagcgcgttgccgactggttgg + *(=1BNE1;7JJ-+:GH:)G,K>1>GC1,DA:BD(DE(/A:MN.:IL/?7AA)//?MI@E>K7NNJD;2: @532 cttaccaaccagtcggcaacgcgctgggcggtttccggcttgtcacacagagcgaacaaggtcgggccggagccggagataccgctcgctaccgcgccgatttccgcg + >FM2)*+H+@;A1265=02HN0;/J?9;42(03;E(0/B/DE@*MD5(C'L&0D9;3,-IA4-C6&L9HE?(DB)83/7KGM7H>C'IN'7N@6@,-<(9:65A @534 tcctgattgcaggtagttcttacccaaccagtcggcaacgcgctgggcggtttccggcttgtcacacaga + 0&)IH*;-?:,(:L.CB+131('0J)&*A@BA8*:''CK-F;&>>@)A'B:5+':*L7)0=G*:JMG&A9 @537 acaaccttcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctggcggttttccggcttgtcacacagagcgaacaaggtcgggccggagccggagat + 000L?GN7:3+G:23G=4;C=EL=,B9B+&<+&L/@71=+*JF-9>-&=HH@71*80)7J-275F1-(=,K=<)6,'9'EM@@KF?,;-,AAI0GFKB?;6B::3,L& @543 tccagtactcgtgcgcccgccgtatccagccggcaaatatgaacaaaaaccttcctgattttgcaggtagttcttacccaaccagtcggcaacgcgctggcggtttccggctt + 00000G(?/BM6I?(3L@*/CK-L15<)GJ;18NF-93K322;9>'43I8D+(&>AK2@LI'N(018*(9B/2B70=5C0572A043B>*G @545 atatttgccggctggatacggcggcgcacgagtactggaaaactaaatgaaactctacaatctgaaagatcacaac + 0>8*0H9K1@?,?'*LH>BC'8'D7C;&F5E@GE(&?(892B&L@*D&G6JCH*;HK7?K4J-,?2DKE46C/492'B&,D0LA..;70 @568 gccgagaggatcttcgcactgcgggtgacaaaatccagcttcagcatctcatcaatttcagtcaggctgaattccggcaggtcgtgcggaaaaaaaacagcccctgatttttgc + 00000008B>?&N462C1A8?M*@/05=J@)L+'H'C--LC(96I&5--6-//I6-=9/:)+J:@ @574 attgatgagatgctgaagctggattttgtcacccgcagtgcgaagatcctctcggcgttttttattggtgatgaaatcccac + 000244B-G>.J)66J572:'J?@M0CFKH6*KNG0=G@J1>CL?+N<+(MK(:<7=,0H:)4G43B;'8@05>FKF2/('B @579 cgccgcgcgcacgcgctcttccaggatttcctgtggatttcatcaccaataaacgccgagaggatcttcgcactgcgggtg + 000BF1M1LDJ&<&E(61G/&EKKJ.&'&?6+034AEK>1*68&==D'>:,-FNI,7/2M-(2=L8,,(A8:;@/4F80:, @580 aggcaaacgccgcgcgcacgcgctcttccaggatttcctgtggattttttcatcaccaataaacgccgagaggatcttcgcactgcgggtgacaaaatcc + 000000F087'8F'L))8(9E7CEM)&GCD'G9LM+?889)'&3?-/M<3F9M,*0N3BH?*.2F?(5H');J0;3:A;41N* @585 ttcaacattggcgaccggagccgggaaggcaacgccgcgcgcacgcgctcttccaggatttcct + 4B'JJG@F<4)*,.3<3/'H(G)??HN*:NA585GC)NL55?EK?<);0?G>2-;MHL5MCD4; @586 accgacatcgctttcaacattggcgaccggagccgggaaggcaaacgccgcgcgcacgcgctcttccaggattcctgtg + 000/HAK45(2.B/@<(F:0M51IIIJ'=B719F6KN0I'D4J(3K&M&61K+::+.+(+A)N&3DC<4;,+=+4C))=K8=A'3.I @595 cgccgaaatctttaaatgccagcgttggcccgtggaacaattccagacaaccgacatcgctttcaacattggcgaccggagccg + 073)029H2GCNG41/DK5F6G7M+6ENN7BI31+6+@4B<<*K*-IHA;(:9D=E'IJM*7HNA:9AKJJ',+6K76:3?=8, @597 ttccggctccggtcgccaatgttgaaagcgatgtcggttgtctggaattgttccacgggccaacgctggcatttaagatttcggcggtcgctttatggcacaaa + 004&)3K/=>(5;J970N'42M-,&I--/AJ+NF;=N>B8(L1D6))BK)E0DI'@147JAHE3.2)@3MED80;8CA@2.I9A7.;<1@>>I=FE @599 tcagcatttgtgccataaagcgaccgccgaatctttaaatgccagcgttggcccgtggaacaattccagacaacc + 000HD:*JIG&@3JGE0'KEBFNI0@.5:6)(L;?)==IN&A=/>6B9;70:NM2*G003J-/E(:8;-C,<8+L @600 tgttccacgggccaacgctggcatttaaagatttcggcggtcgctttatggcacaaatgctgaccca + 00&?G/KFED9-H69=3'1.5>9+HCF*D.@.3H'EB2C27A&F95&2(LC7G6JN(51BB,:@N?AA'@2H;I @620 aaaaaccgtagaaagcatgagccactgccgctccggtatcaccggaggtcgcggtcagaatggtcactggcttatcacc + 00(G,LB?09*=B2;0I'6I:9J1>C&I=3&+29/-;8+.@C*7=G>*3CH8-0.50*E>9 @621 agtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtta + F585):=+&LK(2&B'&7*&>&+LG<4B(?064L9H9@?NC64-?8AJ/* @622 ggtgataagccagtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaa + 000D6N=+MLCA,8C6*@C<)G6C10A+/><7H*?@-:NFD;79HCC@G7DC=J=*==C=<&5-ADAN:,@8:CHNMK1HM1-+9;9B:)I8M'>6NF>/>76D*;)EF?0?L.402 @625 aagccagtgaccattctgaccgcgacctccggtgataccggagcggcagtggctcatgcttctacggttaccgaatgtgaaagtggt + 0000J/K97G4=;HD*N@J5:D77C13@&A'8/*:<;.D?1)>IC5)A)>?7@BB.3GHD3G9:IL=D8536CE0D/(1 @627 tgaccgcgacctccggtgataccggagcggcagtggctcatgctttctacggtttaccgaatgtgaaagtggttatcctctatccacgaggcaaaaaatc + 0008:L07J+//;KAM&7N1(3D(&9+HA5'7L6E/.6G4)?L8//,-5L7N8'7N*KA>7)8EL?C';E7H07./:8863EA>&5CJD&<5;K8&G?,3&D8/(B<'BIF=N?L/H*-/(K0E6AF:M?0@ @635 tacggttaccgaatgtgaaagtggttatcctctatccacgaggcaaaatcagtccactgcaagaaaaactgttctgtacattggcggca + 00H/NK&2.KM?B8K0MF@55F)H914DM,4MME>E*6M)'<3'J,AMHBMB';@,KD*E*@FD(+DCE78*=?D4,*86588AM6M51 @639 gcaatcagtccactgcaagaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatt + 7NF3C,);'(8+*8>N<)?'4=MDMN @642 ccactgcaagaaaaactgttctgtacattgggcggcaatatcgaaactgttgccatcgacggcgatttcgatgcct + 00;H=)->D-F(IN5J-6N)-+@*25KB8M>3(.,;6(>E+A/)/N9)'*L0ED&*4B0/C8(&)-42DJ+@;ALM @646 aaaaaaaaactgttctgtacattgggcggcaatatcgaactgttgccatcgacggcgatttcgatgcctgtcaggcgctggtgaagc + 0000ILN23K'II,EG586K*>9NJ00GM:@2B(10=4:6,MI/N&>/L)H?,1EG?C5/E,2AH::3==6.:GCE&/MA//)2)(//H6'M;>BC49 @656 gccagcaacggctgatgttaatcgagttagccgagtttaaccctagcgccactttcagttcttcatcatcaaacgcctgctt + 000A(CL'7D(=>N&9).??2J8F81AD0N3,BG.7M>H3-'&@,9FK&&:@<=BDC:NK:6KM66;33?5MIJ-HE6?=:MC3<.&70,H0(H56N@/B4GH @667 tgttgcgcagctgccgcaggagacgcgcaaccagctggttgtctcggtgccaagcggaaacttcggcgattgacggcgggtctgctggcgaagtca + FK,F8EL@4(F2M91>NE->B/A/I=CD777+'4D'(,4FME;J=''64:D23>;K*J'H-H-9'.BMAI8/6I-I) @668 gcgcaaccagctggttgtctcggtgccaagcggaaacttcggcgattgacggcgggtctgctggcgaagtcact + 00.31N9/)B1012LB:K6:K+C@<6LI,?FJ3J+3:(65(9EMC>35A.-02..M-/G?48:M:8L*0B-F+( @671 tcggtgccaagcggaaacttcggcgattgacggcgggtctgctggcgaagtcactcggtctgccggtgaaacgttttattgctgcgaccaa + 000<.N:FN*7E<9(C;0JAE>(I2D=*J9?KMG&MM-?7-&(GH,JF71=,=6IE&;'B-DBCCDADL:K1CLAD>&+IAI&D'2=B@'/ @673 tttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacgttggtcgcagcaataaaacgtttcaccggcagaccgagtgacttcgccagcagacccgcc + 0000D6(+*6-)):=166@/&&'55<+-;&DJ@AC&3FCNF27K671DLEFFFE7I@BG)>:1IL1)8,,9IMGI';I@+N?E@I3G2(4LCK>&98JL:CD' @674 gagtcgcttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacgttggtcgcagcaataaacg + 00B:C@9CA=B(&4>F*)GB-JA-='&8<0<4=GE0-(DE:3B@+EDDLIF/;@JJ('ME.F*(84CK)=1A(&-JK @678 tccatcgcgttggataacgtcgcctgagtcgcttggtgaccactgaccgtcgtgcaggaaacgtg + 0?-*(?-,.'AF3:1:0I';.D7+(02N-DA/,8/5I)&,B-@72.*B:.C19,L+JH0:=2>'/ @679 cgtccatcgcgttggataacgtcgcctgagtcgctttttggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgttcacg + 00B1>2+08HL)LB<>+83M(NNH9?H)6090A<77=IG0DKNJ.:'J)357D>+F'H4&.2:?4>'-(6L;=+2LB+57:J@:-7(FHB @681 ttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttttttgggtgaccactgaccgtcgtgcaggaaacgtggca + 0000:7:<'=H*/:/<&D5D92;E*3*4E?51?0K9E.50>D=M1.GJ3D*.-A84E--H@7A2H*/9G+61KH1'F//(E+&K<2KM @682 gttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttttggggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcgtt + 0000&0A3+4G:*3+.4M+BI:0I9&:/>>J,1='EAD:24B'C5+,:1)89=ML=C-&H&(GG*=A4*?3;4KL<0=F2'L3F'LI./J,0.H:I48579 @683 ccgtgccacgttcctgcacgacggtcagtggtcaccaaagcgactcaggcgacgttatccaacgcgatggacgtgagtcagccgaacaactggccg + *EG85/5G;+0N8N=)1L9E472N.ILF>/@G:H-<;:*GH5;F96B9)'*3E65-B7HGK3BH)98N'=I2FM/<)G4>EA7+@LI=*.6/30:: @684 cacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgcttggtgaccactgaccgtcgtgcaggaaacgtggcacggtatcg + 007-8)KG?1:>N2HG?KJ5?>1BK0137;L'H:J7KD1JI/:L'3@G1';AM8NDI-B-;>HG86(;9.-C*,M8*4>3?76,&@BEC;C&J?E9&-K1DEMEB @685 cacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaacgtgg + 0D9N2C5EG*1>6JBH1?0B(.N(0;LLJ&=0E5E=.+E'LL:&;2M?GIK(3)+A'>2M8<*,9=6)H.?&NC-E:&B7A/NAAB66A4@CC368 @686 cacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgagtcgctttgggtgaccactgaccgtcgtgcaggaaacgtggcacggtatc + 0000,BI4C;6C*D..L9+,&+&@:=32IG:>-9JB4GL+NI@G))@*J56E5::=+&'9B8:MM.?AANAAH>83@CA)GE596:M?7M6.-?@71>.AG-KE?.L? @687 gataccgtgccacgttcctgcacgacggtcagtggtcacccaaagcgactcaggcgacgttatccaacgcgatggacgtgagtcagccgaacaactggccgcgtgtggaa + 0G=IJDI'=DI/MI)762*8:(/DN9C,&3K*;'9@*37;K8;&(K+B/39<&NI=27(C>,M4M4.E+8-NJ;*;A4J=D>>4N0K3,(,(4>DMK9.D8?;(G.&?3C @688 gcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcgcctgag + 0M6.41&KH/A*A/&C/B1,5-?=5G;IC:2''+2@B>F&3)JEFN;00K1&46D4E)C/IDG @689 gttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcgttggataacgtcg + 003*61(@174CI3JK9+2<>C0;?B&M<6A)9-BB-@4-G,D1((:.E,'B-4K,)6=3?EB(A6.@4'/C)(6I5-HF=C**HA>(/'<+/>4NB&/87'KD@+DC:H1?9;LHA@54LD6-K'I@*K5J+'KGF=*);9=)'GKG>@50J.7F2>-7',8@D?H,3< @693 cccagctcttcagttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgtccatcgcg + 00+:EF,'>K,H'LG.'&4(5.=B=1C/1GH&(<*6I=BK8-,88<';N:NJ14&JI;*M<33/* @694 ggctgcataacccagctctttcagttgccagattttgcggcggaacaactcttccacacgcggccagttgttcggctgactcacgt + 00000.+J'M94D@FCK=@7;?A?H97'1D/.14-+8K/:5:NNFC,M>IM@=68NMK739@CE@3IFKMH185LI2M:.@H-&'M @696 cattgtctgttgcgtggttcatcatccacggctgcataacccagctctttcagttgccagattttgcggcgga + 003K*M+LID6'BH87J52-G6DFI4(<&-B>7)58MI45=>K/8;3C(3+@5 @697 tggccgcgtgtggaagagttgttccgccgcaaaatctggcaactgaaagagctggggggttatgcagccgtggatgatgaaaccacgcaacagacaatgcgt + 00000-6JGGB+15&(A58/41C7*&6.0L?;8K2K5,,1501'+1-99:8JD,@3FM,/B03A+N3AN/42+H>-:C;L)75'>3JAAI.F@0H::D;)8@+-2:**9<+MCG-;?K.(.+D @705 atctggcaactgaaagagctgggttatgcagccgtggatgatgaaaccacgcaacagacaatgcgtgagttaagaactggctacacttcggagccgcac + 0(50@?=7C&M+,6.2-LH7B>BD1NC?.I*3K4>NL<&A/6(M'(/5>8':I8C28.?=;H*4KH+:78A8?*9D':?0?A,2>J>L7<;D=0+7D.=24@JD8 @710 ggattcaactgatcacgcagcgcacgataagctacggcagcgtgcggctccgaagtgtagccccagttcttttaactcacgcattgtctgttgcgtggtttcat + 000'?@4ECE'9&3>?8?C)3)HJ0H.-.GK/*G(M6=.F5G>E7'1);)'1&E14-;?'9D69L*8G4=GH&+8E<=5/:34'B1G@0-+;2-*G=H&;H&.> @711 gcctggattcaactgatcacgcagcgcacgataagctacggcagcgtgcggctccgaagtgtagcccagttcttttaactcacgcattgtctgttgc + 0000I>1K/*E)M*3,4.E7D?29F:D055I.@7LH*D19&-.B;A&5086<&*:+&25I-H&/M9A1:H,<3GK,)*NL.0L6>CB,5/3<)*?G' @712 aactggctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaat + +MA=07EN--&4?.J1A8NF''+.;DILL.&9E+KH4A+;E1M2L98+>+9,G&KB5D';,4>L7G26I&1 @714 ctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcacc + ::L4G)+K/5@IHFB7D+?+&&'0=J0:G(J;=D-,J1EL.B6NA*87:?J;MIEG:711D>;,6MF>'@)/6EC(42?0'C98?F=H;LA1?/B(?<--L<,EII'H:/HJ(5+2A9,J)F; @716 tcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgtt + &B.?MEMIDDF6/&046?M5'1,9:G14A9H;F*.C/=DACNI'27&>/?29:CH@G>..M<01-HMD7-67/2CM'=(I)CG(1L(C2FFH0G98@1?E&7CE.85.995H721L;>IIB-18,I2)AH6 @719 ctggctacacttcggagccgcacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatt + 00,,5*H9G(15@9L/*?E.'?FH37DI)>*@;1-@&)/(7-*L*E*33(@?M4NL@KHM(2&L7'5D6LJ4N<2DE37L9/L>;?3HJBD.DE/3/G'4HF;JH'=-: @724 gcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaatttaaagagagcgtgga + 0G;DN&CI)B73D)(E)>DNM6(E.)'I>B;3)B-MKJ<.:*H,*0D@/'/)LE;*38>G&.(5F:F/KM4A.K+I:LF2L7 @725 cacgctgccgtagcttatcgtgcgctgcgtgatcagttgaatccaggcgaatatggcttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtggaagc + 0003&@;+:8/'@:E<2.GJ.+?CFI.M0E.3E?&D>GD::?&:'(85=,J1710CA67*3E=M9J0@D0'.@>GD4'*-;.CAMH8:)J/E+'+L.@J6.:H6HAN @728 ttgttcctcggcaccgcgcatccggcgaaatttaaagagagcgtggaagcgattctcggtgaaaacgttggatctgccaaaagagctggcagaa + 0000.9FBM*8*8B)58I;=.J?5A16.K@)*-N=I>'@HC96+.AJ)NC?K*/CC60,1G1):(N&18.;M''7JHC0/,1*1;2)E0/6D@4'0'+:=2N>B9:+G('1& @730 ggcgaaaattaaagagagcgtggaagcgattctcggtgaaacgttggatctgccaaaagagctggcagaacgtgctgatttttaccc + 000&K+@L:AK+G8<&5(:44(J:')L-8>&E(/394EN6-;N/F;;-1<.9,919&4HM(0?<:FA:H-*>3B5I*:J,:.G?13> @731 gttggatctgccaaaagagctggcagaacgtgctgatttacccttgctttttcacataatctgcccgc + 000000'?=CAHA-MIGKA3(*-14IJ,:LH+9.5;M<4H:K/ME'@@CJC-;CAD6AD6 @743 attgagataatgaatagattttactgatgattcatcatcaattacgcaacgcagcaaaatcggcggg + 00-0DN?GG'C:<>@H')+>''D89MML;K,,L;4.457>,HJ;7L?M67G>BN/BN:36*KJ+@HB @747 aatctattcattatctcaatcaggccgggggttgcttttttatgcagcccggcttttttatgaagaaattatggagaaaa + 00000<6:)LAM')E67&=4N'4,93JMFK&*55&7E-&&H?B+>@A,G/02:BG1I8DHALD.'&>+5'460LL(L7&; @755 tatccggagattactcgatgagaacggcggttgttattctccgcaatcctaatctctaagttaccgcattattgagaattctc + L2DB85E-9;,41'03=?+=>5)4@2=8D>GI5B7.M3D.'2=&60)4HI1.&LIH3*6N.4/N4'A,1,CN--)2DMH.4/. @756 tgcggtaacttagagattaggattgcggagaataacaaccgccgttctcatcgagtaatctccggatatcg + 8=3GA+MK'C./E/*<)I968-J,&CH89I+)&>'/H>@:EH&5*/>D101>8L-I;F.?8K'CN3G&?.4 @759 ctcctttatcattgccccgttatgggtcgatatccggagattactcgatgagaacggcggttgttattc + 05+KB?~V\.VI剜~`*@LPZf20UYBCGzy$˚T}}-rψ̌?c?õfg`ll왱,,P#Ya=6aY yX3c6X03xa NS%eWs/}ŗr6uPٳ?ӳf3?hw_/% @+ꎿ-r~,,)`Kna uj\quFaZ,hq|T$fв0KN*^ZuHVaͨPC8?tXXw_}W9zow|շ?~sv>?Gbk+%_p~+p?i$E3P$ YWZÔs$8v.;.3SRƋRKz@zju2[<Nٛ}|X86$a7V*IJF-Tqb9K Y= YOJVDqC6f"q!9[__NB&9[?=>>CV%lY.3JrmQ:\ aɮCKcSmj\c4׍Lk*"{ x+'(\z@=c[*&V*nؒYTR r$ J$䮄Ynbkd,Ei?@=?⺼[oOK׳z?0~j.٢Vc*e2OJ3S mD3]Y TD:- ,p4"0SĒ[+T;gד>^;Ff/Zۍ4W}t|SJuXĖ BL-MF<h|=R eUh19R2RDRJ3ԉEi :E7o9; e=AePGq]-VdCͿw+cv)Z8Ռ<ǡ#qdͰz̐8 Rp;iEiH;솙=I#("m42\b9Xi˔n-þ]ڋ'oNO߾{ d__5}ߩ>i,NH\KmhB)ȃ'(*7 FT8(VB,D:N/f3d/z&Q>j^X]Ze%X `]ݳYp1W]n =?ppa7XKZKjhIoĢnz;P^P/g?B6G4.֋#snC)2#-Mw=dQ@ =%j̉FceT~t :BTIfb +Rh\}/㓷\s؂40IbKKFZGIeRS}kh2NeQJ=Tk+Mӧ`Z:SI<( YHDK:ƈk ,+7qPBN^-yp~{쏃@RtEUbLijr P' WF7 TB]$h#_D rrrFN33b6|b ?z;{ ;bz,P^w|'+8,R2lO6%OE$9DAYdh(Јkq[XT`ɩCrȰJA& JmM =<go9?GAz+_ӑ:OrEU#G͹ޭsaz`/b/̲."T8ia斑Ǝbacd1g>ʹʸtmڄ'f Ԑ7dqv [o{*_55>Mh^xA__S4'o#'\{npG'ܥhw39_ ñ΄lJFF80cm4TS16HH(`T:d5r7BF8V|dna=Y/j=}s[|xpH] ]֢6K9]MŵȖípb$(1@i/~}zkΏ_Dq!wXߟ=>"5gKxZfT "c[JĐEܺAj2DLn+J=_u^9fT-,_MEU5]* sGⱌszz1[i=%"\;={~y[%e~q}4zV#^TN%#}@[/joS64ekF$Z _ǂ;AdÀcǩۓٟ"οzJS_G?bqElEW0Ol$S gQ}oV] BZ`(ƭl8^_Էsg<m%x2Owk̝Y@QAnb^N-sL5wnu=+~b]ªK{a3׳n75OФ~t`tvj9+КlL4Q HG;(L}3T  )j!Gf:gD# IkO ׍_TW{{{n[S.x6&\</ ]8G|90V%Fw.]O)2]T%ɏh 4DŽ%t2$E2S>:\X%-o~u$)~͍\7)}(LYHs.4"}t+7-Sx-nztBHT*jvm:/CF@k|eʑtz*Z~%~l|Xծ0Hn\)'To%')cklZTNV =i mH wJ"kiQTR^d~I0W“ϐ&L ˯aauG-'AJ3eN5#[V;'AW[Mnk˔;`S0x-uvr}ё,i}~/ubJz {~xzR@(H僬&ʸs|^&!EVxToZ/Qb_Y@ jPɋe/|}%n{R{^N.gJؾO?(=k2mpq 2 E.XCBbaGM< TB=s@Q@w37o>dWӋ Oy̾p3ܓ .=PpYVh, =EHD賾E&CcbdHC2* sAWOձISbk1$wzviyl#M'ִ_k2G.7DJTS-`hӪ,]%ɤͮiR><ԥ*n#(ȴl˰nUQbL ;T;v3+[Cٓ=NϿZ>"5[ |-K]iH8w_M_@ju8GbӘZԍ$ /״HP@)3 hlGP4<>~'pgW2Do&%h]w ۄȼCV6D5FTߗ XSx!̔YaRH-UhE3*"3DQ0!k؊j#5=Ǟ}^?;4HNխ o8s]\ Wu^6wݳ;*ޫ:z5m1Qe-t/QtuF#/Smy*"85#L AEVdZ \UExJr~v~z+=x^;;}}*9TV zB'E^xY#WZk]f& c8,t;R,Ly+N#n'ɦn_r,V wFN^v cX"l"g̒eQ FHSi. dBW]cو䮡0 JVa`{Sv|w|Vl|ڕ9y^=Y!'b WeK|7lIJּ. ͨ% :!HmG֪`)pUƽ,Q#{kQi `<dDؖhd񦟫./_;{_ٖ!SiU(ediG:C*'e Xj^40,Jnɐ(J-+[G|;vrǸm`OkggfN@/K,,ˉdSQ-,@md D4Q1RR:ztjWׅǬevX])~ ?<,Xsr ;B殓Djju 1aCT I1B1_#!Z=pP;G2Q T 2-0ڥV:3 W#O;2JXE$U2rP8L*Uk) 9?5=|[θіK+hD΂wÚxxX=ܽ& XѠedytzU٨R5fFJiF.hazRDMzE؋O<w䏶o\l+sl>d`&1,UB 2iUTPm#tأ}3=xx}16ɥ`M.;H&g'B"7JS($)@ 1$3QPӈtƤ`Z^*&`E3k`z}' gIm[T3yP4_Q(]D߷ҁ)ŽܱVѐ sRR(EZXFKap>#G'NOwǟ30ggbNyZ夳~Պ8P{Iἤ5ne Dcn G2+\̵]Wr՞ kIn-O4>rl=(5ԋ]7ygWܓ;TF=0jյ {_`CjW4][RpOdLmKl-f^` h%,S&wu2o@VN݆ƄDAފְ@+Բ Ae, Qe p\Y(R\BSeEМ_^6~&-۴{O'Q[T@e3rF!~#ԦZq#+:1TH0+OQ/NNN]rWWQ&$p=W*;삑ءǴZ iSl:+LQ35a͒ƍ|mt0XKp QiG LVQ~{vvy9_?xv7@?zB<ˡ%}m9jk6VߍV!s G+D׭̑"6 f(Hh $^Z *[=V4Ӳ1JZ(Z՟ +\[{B?(]nZ8&i] Rr9ﳊ<ѳ@7\jIlMܦ0 U!ț+NvI}<[U˳MA|Xi2Y ڮ^] _ȚOM/kWIT8!W&X:^=&L=9a֕m[tB9H놮~晑QnL SmdB(! w$Fe}dz"Pl_497%j\QX_sLT "a c;m: q,ztl˴ҩ{x;-G<\yьI7=)VԌ2Ykıyf$Gwzz>~O|yXkG1=U4r +/)RC`1[mP;5 (u)ap|ݽ7FRtۊ2h7r$d OkXc<{(NP/ u1;Y"\vbt 327t Eמd͋b@ 'XGT%nz`t}ߞx@,{{>-B.[/V-H  if۵lJ](!f-H1Bf86}J >&TXHrT ]UGmvOW~ |ϧOk&i5KTC!q++C,1E!¬r('Fjc;RN8Y&nR1pLuS q^N~~1^VS7)}˧Z˖lnfeHNld<3UNJTbb= w LK(Ki#-En&'^"(;+>r{=K[|Gԛ>)8vZkRP iZ@,UQÅ=FJ"T;92j|bWr#Wy)RL;Ӛ<_T|ܜtiNnD$4 }%=;֠F-}K R1+$Hk7,d(ۛ^l=1Qltset̵G %A5Ыncƽ:J% <ވ DHcOT0q:j?"A(Vf^m2"A!'\>Ol: cirF٭^4< !gױca&DƧZHs쳋o9=ۼ/}gW&K@(\û@z!wKj*kHYUh Rd80B5~ԥ Ȳ6]wmRY=c9O3X( &fTGltqs0˟ڬ{l͉vmOhSrCJfQ}3hZnR"!aa=ǰG)vY i*_sGm $zbw /VtDloV$!*ƃKWϊIJ+~QMSZfHHLNH:U@yqءbZY(9Wr }jnC/K؏bMɤvQ"sTĢ<܋a r4E[IECQsQ*Z\=ȏ7 0D`ґf t!o4}ZKPF#O̘#;X k{m267ZAj' X&G3;uj aNPo=ۯ.gqk [ӓ1}gD#^םU5@5J[ bT PRY?z X7pVā#=2z[w"U?6dS;F秗~[8O,0-[A!RVZ3T~Qa$ESҤ%H;#VXWn0=R4 j 1RBG8W5|.\?bnjAq-eNDl[JaXnЏ I T'8ai>P`维NLU{1nZ!_Fu$Fa]E#u_ԁ/8ɛtq_gH)MqoYdAFA %Ok4)! Ҿh;% rJIh{JFRB7UFI%FWJbfX <~|K橹0?Oy^|v*uZ:sԼGu\*LT%ZàGa*\oJR& Ti N<]͟ce\lhMWQ)z̅qazeu}Q)`!5& #??z*7OGK^4>o5u/N !m6ӑڍbĆ-&*RTǃ$vڪtiJYл@B)P9m#ty*xmo /|w{~v4|}O1V$SUdP&)- ZHnr:Bg$ZƅՖIǞe}Ldp72A~r ڸID#v7#9d=AnEhM Jw`n% % =wyWȆ-P{hED^1&bSs2(k,XAfD}y2gO-S`|>)t7isqxN*KttN{qw CsL]/l,SUʸbQ5!NɲN#IljnWEFM̱M&LIVn9^/$gxkpsd[U/cs`,h,w8P#3b$YiDa( :C!𪎦e1+ӔyXi#T#ղnϟFǏž]o~ )!m˰WB-IAg^ad + F7Q ԈZBiKj̢ct7갔{'!Si{li;"jD[-#%ּB <gz+(4w;NBV,I7owwm:'tq?w'5 ![Q LJ-A&=hvc3>lu칤xG/_-9Fu+L"1E`V9ghCiU;9L:TS6 ԋ;atju"fA3"jRܵ-խx WxlOi7ߜ_mpNJ; b:2 [snf)Jly8- 3 IV72|W bu%۵iԌ5 <|s2f.w 8oι7礼_'=]0@+4GD5#Kfk\S^w^(η\R3X&(A X>#󀌬tF,z^%a#dQE@3l=tu4ew. ~v&vP:FuLi22=mwnDΡ2їfZW7$p&I5bTZijoNyծ'9;ًnfͺi;E[aMs"M0Yo*7UUrϳixAU^fU,3w~vO,EI}z5O`iZi/x1nNܞg>׳wԦO8Z2_'],Dq>$-ڰ@J$XF u)ӅdA^FQF<"fW"=jy[JaK+.9/ݛ]A<<_6̿8bjژ_dK@N֌Np9> J3o! n53XE r+7ǔ2dfIv x &JA_Y DE9A133&cRy_{vXYڌ h wX2B.  5 'J;@ztl՟we?adh21A NXuzT[e͖&O3׈~1y}Yօk\Vw=״F*mFQk5~AςՂ6_F㥱Q>/>(T+bs^\{\Y<?#ƈqutHk'|;0Q+r[OU,Iù0ka;rf[ '̄s+>P '$}aE 4cRJ81:5rt٬Xk`=6D ZqXi$5z}xgǏP (e=QJ$ng8 D\ҫ1nH7J(o&RuE*i1,J3 ,N zf@. JSN' ]i_}O|n_I߅8n(HiUYuK UAHV8p"k02Xp#J]-N1dJS`uu}߿`_=sj z&5 sl56lBGRmJjH 'DREmyE7kqp^ü&"uQL C⒰SI:6,3\?ۣW; +MNUt ~]e]y-UT\ÙT)Qi9][ESQAJL#3dչr =B]Ј1Ѵ3lfph(LE!%^ i++{{Z -M]쇬by|'hW`j:_rVz~\CgnVi; X2#}'J/fH_K*h6@ PpS)D‰YE 2k<5bdIK6mx;G4]nvvtM?}57ECr R.%~ jBUK;ȼMxu.RS.1Q..T#1I2jT=U?C﮶>`_GOc6o=1_LA,E+x N4-MXHg TAc$Iy&q&iNRq 1MpiY_TuJ(;MϮ.oT0%]1Yg֌"Fe[<:#Vci\,NdTq*Ҫ!ig2i} -+r.r;L\;-8]=^\ e";(XgB`Rƃԧ!=[BtpZm˽Pa^Lc8R5:w.ΤZ*X&#)a$(\?<7]0E9ɳ7o6qUvfbZ*D.PT1qP}OeD@%Fvy^ex(lhyl l a׹^^oLȧ݋ O;'fSQ]2GǍ{^]ED /;ݗ{;rE1ӝ^3)t9x)mI/fp;(tz]l3);~f/|liZyn؎e+1k u"rcK+d0fC~8HuԲz53(9n?"63)+ƪvXC-I:YJ4UG4Z8Ts WM&;.j5AFb*O<^Aw_y82oHPVZzaZ\EUbt;kGtvK.xy,y^FjۖU~㕢k+.ld`tT#wz\ywneRoud+ R$ytn?{z9Cޒ)P*C&]v۔V$Qb75d&po,KjJ}$ji(ETb=^P̏njǤS}Yv`Uj4Xv`Ѡid}泥In"&]rˢ.BRy]]'>i5ٌǟwXl'<6'pJB\ÁY !eMJӞĔҸj{E.  Ah,1zkvx8m}r[EQ1 AiQʾO2"K285&- wM%# NCVE]3r &_iwn.uS:U;x'G⑧ۙf]ڡ9U2h%xHE[[иejFP%&MS(^~#ㄢ2ԩp&x8RӤ{bvO;8Pmӊۃk&R˝8.CT @."䨽 Ua,(soBtu ?jCvAK?# }}emQbdr e(\j!s/3=bTR+ $v^-%q3hgl;=Oi_z}?ٝy֖ѐ4 ,$Ijm&pZh5 (!G.[F>0[$˙TY5XzXl̋b$םsa v=@̮g[m< ;X$ICZSm quYIX6KP IgGQz*E nr(&4qs<33U,8`}?V~( VX)RD֊abT/srض9?wƧg[\^i], }MǓR%In&1ZKnU%6vjq-!;)sbs{#kZF[8?:גLkc0.0GsjŃ[4pȓLVpƆHZ5Q]mE> Q i٘137 3½o/5 矯`M9"dVmcI_ږ3'+9kcycu2 f ]jM͹i~uOLNWgfߒE0pmڪ hJ "Rf+fIRs-*UʂZWswwX<:’ϧW^Rƚe6Q̌S?լ呬ǵ_2zj FaNIh}s|W?\~䚴k$W{u n;)S"Iҵ%daa"1l6"d0}=Q u>mM JD\҈]KVh֦Fu`YM>Ԛ@r ]q}y'~ƺٴAzf+XNkhA~1\-1Yٖi ךe!:!q= MQV&ĺK3 60Df*0 DGԵ@$VG_X07'o%09ۊ4my >yCĢb[dNJXJIUEJi}l7:5h{I@RME,9)6ɻw'ݮA>7>lw:SWwo<);sC#=WQ1JF-6AFbjkGYE46%$M}J?P.nKit֩zaS1TӶ-JH)48 sвȖR%`Ah56B "6 Y'rБ-z.H >kuLtִTO Qc4IQ(VN2l&Nvi;f/wqX<sg:nܻZio̅*v/#6Isۻ?<\W'@&W@f[ T,Xx<O^@l\Xt*h lQ.#ߴT25qR!UA!24F{OZ=Bp`#0 3wwҘ7s?ac1ѠcfUV׶r8ԉ4h!v"͡2K-t \aLşf&u﷏Pxk-ہQ G0bil@rU:VSa'jTl %b:`>\3g$u˽WpWٻlW`5f0<Ԭ̟3A7þoʣ|Þh,AHҔQz,LPȊ%)9ud3`I@8|""frxilܝa&h'rʼn* eVH]K"$dQJtmhS78\?sCUA+ 0$8-D*lA{5>9B=gw] @h^ءPJaU`"BL| *f1DX@C֠ oEtwoH_>fLYS4֋zY4Tt9< ?YR ( iټʚ8̴KޡpUAl;L43_I`mk&M,ZGRڌ ]\Gu ?GEFJb_0|+l%se^.6d:j}k,cEEčmeV@yEdoKAT򾯝۽[O7w{Fmxr8:?fbf)\CbvET%&(Փ(U: KCl][˱Peƞ\ =֢̯x]q<\EK#0)_ij|W f'Ϟg`,Qa)gk 1"]']TJ*sqQ~q+]/ERY4[zPDacz&+Bq~%wpgKiEAԬ.?~/Ͽ _}-?o|B/8f8lTc\ִ *hPYBmpl$AԒ4{I% \È4Bڼi|Q;_;޸a)+A5%hdiJ\RH)Nebr^*IFBԎY:u+0*]@8!ۀY{+_M>#ū$]k+]Wv"ZFK(B-##:$@#K*J#egTx^3>=f~i:%noua)LʒpPBA4W/ȥ6)2<,6WEQoWǺs!jA3Dq3%"{Қc5GC;rtw.G:}ږl0Nu^Tj@ 0_o氰,*M(nޒOd,.+2xŅirzXZLQp":pں4Pg)rwvc@!䉬p}>XĝOJA'ZL󔑺)jE.X#NF }Gš3ӿ_8ԣ۫m. u/6<([r.yY+;(G$7PKCBݔ5 F(n+1#^!U ELso/sDz~yJVa}hYAzxChQҎTfELkjcp(n6ZeHb 8vLtDȫw GN4tsOjw*A!8+7Vb}"Ve#Ԉmʃ\cܸa^:[/Ε_Q|r SSohTҺ[բaUZ̍`di%:Ki<3=Ժ(kAO9%C$_ ]H#5mU>!qjoԞT7<㖇{75X25 KЫƱr0G55 Y5V|b/y֮T=L(O,ns7#Q`]e|brX$K՚8 )S\'w(9=U3%Zcelu]K7Q,1*o[L[zjuAN82%*#}j߄;}eBhRє~dc4:2{3ON86 x݅fh!pMQ r\/`{Pt{e޲Ǣ - xf8a12!@y Wi]o|{$ {^,A,IiaĤVA`,2>pleyi%KGbyZ;$P ]XZM\ !u8@/G0pRr yQv-d]`B@LӣwG׳Cox_C#A(d 7h:htM%,pB9daj !/2 08 EL-K5V!@@ ;؃E=ސT37-_2Ȼv rK}8zxOPQfx^,aq0&>(fgr<$aߢY(3ݶ* I[Mh;m:^ˤ) MqU&tzee`E厂+LrJ|+0jPLB񷂯mB-?W@cfRnak~ mXAjC;UkګԪ(*Bv:z۪yS /i{r|Br@M|đ$m<2.6A/Dw k0 JKE"rPrZش$AKNdYcrQ UzH}fۛ}fm QnBfhF;Y; N2]~Kr`Վ^ UG-wZn]L?ySް0GV` ^f% CFbE鑖U]T D͕I+dWl/oD@ZEM^PcA֒&$rVaǘֿ~veg>]~j?9+^ͽ/嶜'="%6yma݄ru"[R,a4B֛Wifiyؖ8rr[9p/_Ùmcw2JyD׫ 4 PKz%Ub4J(Rrk m%-Hi,Lt7|pvӹ_ HoL羝<+ޢ>nYi \%=]+)U EPby8߶Qd}"$=i/cȺ8vkQ[1$Pʘ;`3X7?>M4^ՙ_\tpYX.vJFH^Uu+oמYIZTV (D_OQӎۻ}heůߒ63 S40zfsį,VUų^Ճ E+EƠZ{QS9qڹXFm*23|3cl+qӞ=?=a{amϐ,Кr-eSx3T"ӗ$!bQSRSГlIH q\!ʔ, hm ꪮ[L,%v̌\6(d)p_{^Y\=U56Y2ڷJ)nK%j:/V2% ZiaD[g>wogsRrr-kzbN= b̙i\U eur&+C6n{LUxb jߏUI$|ЗJ cilne}1SJWkdMFO h8XS]l,l3WJ꼵SgIa%ٍS;G[( Ϙ?/^c5O*/7Ц@ng,x|EQm'*BYm$j5 A3(r:Ap/޳"GJbIjAxHFɗ^|A7a.&';qQ&gǘ+̣/$MHLOccka*IƒbN;Z8RLh fms#B[`W>⯿'o=:qې),^Q֛9@4X*,C)4ZdR3+{.RdعU`{8[Ƙ+Rp,ŹH>lǭoQ[Zӊ`)y!25@inǑ3@^?0OQ9$A8 5M!cׅ8&Im$z'%uF^Ԑ{cR*/vC_ԅp~=Cz)a -/ I!,I,% [9`ډ[ 5kesl6u3@*O./ܓbCpHEXs½fU oMJ3@m5}q9XTWnFhr?:isw?mN̿;$A1^I𼆔Nsv-q@mHFnFBpxRO:&8 ZRsr֍[u/#e;!rw}sءT xEwfx'z"`5.fTHmYQCڡ0.p-K/?&q+n^j YT\mİ(dFCQĠqBY%r.gv=WͫbΟR}:zߟD;u|ī%k6@ kZ8Vdr ȄVqEɽ![qWyi3 z21u*5S-UUfeXw姻?Lڇiu, KN:m.]?L?o~i08DjL$ ǤP*m0Bkנ(ӷK-{;Fw+WGv?;Еc G9v0!~g UP%7픃 d1bC,F֕ UԒPWt4@/w@g-9;M#{uwgo`t <7XAɑ(1%$1CU&ĵmBI!p(еA&c9d( 7Fhc]kϿvMN|_\c 5/jYOK؈Ze]:)4%C\)jaȢ[[&%APjw$o<_'1u)\/-eF6$~S41ML:4PkQY& æ2jCL"IL̋[iW@3Ysuyp_7>+:3N4v/>OnY?؉iF)i0<*`ɶ'tdM jqO X5HdģԈ5NGƀןnn18inp-^[j0GMV2LOt0 V.u< u 1$%N< \uؤgQc VY~ 94JOT|Mvw$*Ƚb(L] ih/\|ƶBh`H5Y62!1űbDyhW &6ZY:0d ܴEDmV&eFl9P3q{rbSQN0.eP7K$avw$PéTmj" 4͗a*8gr蹝TP EޖB1B I(˺[~w1}W]x5fŚB WscetpNW< }\ Z.N8TDmȬX_T1 i)'b_hu\J:9 +w򇻻_;?~)CD:5g#4)'` ?aS<]h L(d0p%V`8J4ƽ7o긆b05@9p}; Z/$+pŃ t+CP6<| v*s")N(u- knaYP16MP2B%[_ Cx]eD˖d@KӅf@"Bq.hQASnuF:x}E$u>4Yk׆Gi.0՝٫9q)Ϯ;~:厓S.ZW^PzAzFF;.L7ˆ O"3RC&aZ%:gn= k`*hjF7"ˇQzBCKIZ3"#3#LmU.ZxѰH @h#ܥ:=qBhHeyI-B ,#KT;ݮݳ%\%}%sP|k~ѹM ` ,.zI؎n ڮ 1Aa +^ɒKƶۅcIە55e0EثsQ( ũM/T5SQvIdPuM˱fd\b_?}w>8}*|y}Ϟ՗N.?~(sqp}ッ? ûOAeu,TG=S8f&1(TEV$2oF$%-F+Vj7eCgA; o#>x~{yM?pD}"?N}M퐦}#̻GD'Rf!0E*--}*tǡ -wRhvS_* ¶Cb۷ >GW  /k?pKzipd@ X.Zbp}!p.m]8c^ԘlV%9MxZ-7ܠ0L]m:#Y v栌*TYpJ1BDC?k߀3_0 *Y^[!hWt~x-<d>CfIF Mr"1ifȖ'S&!:j.o/Sf9@^D>$I|[{Eh0`]v*l j"HeK5M"Z/e4l GCSJ64DU"(Ri+yFép;owrsyr++XowtY1B斞+:mGS:UJrIi( ;ĢTjGpEP E5j ??Fwy?|$؉ |FF^Ċsǖ':dtQMiblu~5gy7J1P $7O PFenẑܹJs0Oτ?<G$ׯr3ܮq萲;!2aL ayth'j2U:> j@ĞS5^ha}[yvgNa oU#p߫A(\ x Bc ] [Fv%>GML` ORR:VNC,'l4bI=bLbHHe7(X9ӋٽSf/׾g _o֙[(syI %\nrd yE; S9TPQb2jDIl]VXIvhӰ (,-"T\Jafg.8*{o]ҳNO ;dO<޶?G#x5krl_[`bMR4kH. -,Iέu^%^DGR"wh֨2okk0k,R(bQޖ'f>?=jًYC+w6dUHu*1Nh 9L*75&t 9-K)ߔ:ѳ#WF]r~!3ؖeYzو$GanJ5Z bje4&4!+{% emA7G'\[޴l #\8=Q] R~ujcl;F3 M" 9TUc8ȝ>e&'mK '[w S7f:y7u~z.w eΘD..(z%höS GD؄䖀>c{p5ٛpKX,+y%!$̺3V9̄,˴<C ,ش|dĝd\I5"cJg1-; )[u%ཱིo;^-V ywر먜D*ć"3%-ѓ6֢C)3MIb}]d)Thʨ6*0]ܻZ^Y9B>/L+io^^?>RЏfe;r! 7p\/xsakuH]WBI l}MMVEXXtX81Ԫaf90}Ӽs_=?{x w>_elZYĂ/rHBM%7/=f S0xJq.8ζb2|B.qKw[fA4zQ0C\PV my Mۄ52)iGr9sߙGRݿ;en] l Z׫ 'bM$}o{6=kѠ}4#JIJ5Ej4TTƭł9_: G {=\]v_ ;Bٱ*C1J |1q'1ƪUDdDKB-vڠl4%1ոx= -Urs?`3IoCx}kjX,x/x; oz +옖krØNSa鴍؞,hi$[Z&Z@[r\=C)Ի{bW&VE0^-[rءnuˮ%l6lqy$.i1K{"mjJVr҈Hh;i0mTY?5ZLvs5zG7~+i# "`)l[ I)bJbI ,Wc)^[΂edTѠL1NWtGw2Hngr _8}a G nQ\.W͚zA;ƃAL( OpMUb6Dl-Y ީ<,aJנ5ԩM P%a fXB(G.ZmzKy%MY&n nt؂7q\̀:Q *]Acr+PmUcSvܘܯdq]ډCʴX.PS_S(RK/e`4mo܍ <_s~.,/SW2n7.kt/SN>W H,רƍḏj[#JuUtDR%XjR02zo!9r],"^]ņ 9K]'`*#k ]MYź-މK" =D6+1:L)DG<@6K.8IBM>N:A,3L30G)&,<>I79A=/8JI:G3B+4K9E4+*6>D8G:E;N1+);KK,MM9*L;*DCH6<926=CG(-<@00 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:80 126 0 somegenome 844 37 4M1D54M1I12M * 0 0 TCCACCGCCGTATTGCGGCAAGCCGCATTCCGGCTGATCACATGGTGCTGATGGCAGGTTTTCACCGCCGG 000KNGI8CKN/'5+.B(7L3<('BHI=2,D&*GCIFF()DJ9A.N.-LH223/A491C+K@AI)09ICDN XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:4^C66 133 0 somegenome 855 37 48M2I17M3I37M * 0 0 TATTGCGGCAAGCCGCATTCCGGCTGATCACATGGTGCTGATGGCAGGTTTTTCACCGCCGGTAATGAAAAAAAAGGCGAACTGGTGGTGCTTGGACGCAACGGTTC 00000I708'.@;.'=*J<*-BJCI2+-:0*5-3I&>&*4BEH4J+=79L4KN69+F9G.(3>:)=61+5<.K+1+3,F)D'N;M@:47GH)E80M XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:70 135 0 somegenome 887 37 16M2I17M2D56M * 0 0 TGGTGCTGATGGCAGGTTTTTCACCGCCGGTAATGAAAGGCGAACTGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCT 000'=0L-)+32L-.1(.:-:43&'3N:/G56E-M9F+7);D(8278=M@96A()6DC8C*J9(&H,)KD3?@/'8*1,CND*@59>LM3( XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:33^AA56 137 16 somegenome 893 37 27M3D62M * 0 0 TGATGGCAGGTTTCACCGCCGGTAATGAAGGCGAACTGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCC ?I(26?6*0D(GL?/+82EH'/@EKDA:)MI:8=<9(A;*,3NG>DA*DAKHA4,C'E:;)>C8<(4-015&F0+H7?I XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:3 MD:Z:27^AAA62 139 16 somegenome 904 37 16M4I67M1D23M * 0 0 TTCACCGCCGGTAATGAAAAAAAAAGGCGAACTGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTACGCGCCGATTGTTGCGAGAT /:B<'6'JEN3D22;9I+D/5F?NH-;62::9M?7CB6*3EE3)+&JBE'B/NE.FF?CFL=1>1GM4;=578<5:E,EJEL6AMF>?9HG=0EE8(>77(K4<'D0000 XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:5 MD:Z:83^T23 146 16 somegenome 919 37 108M1D7M * 0 0 AAAAAAGGCGAACTGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTTACGCGCCGATTGTTGCGAGATTTGGACGGACGTTGACGGGTCTA D'0B>,.@=)NMLN;'NI41IB.2LBI975I<;8>7.5K/HJ'56LM6I,4E;M38(3-BJHI/LC>;9@2;?'*HB/'2'14D.'D;.KCH80/)E-00000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:1 XO:i:1 XG:i:1 MD:Z:0G107^G7 140 16 somegenome 926 37 61M1D24M * 0 0 GCGAACTGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTACGCGCCGATTGTTGCGAGATT +7CH>21.N/1&D&)M6'.9<3C2.+N62F23H&?+3M*6B+MCCH:6&5??6'5F00 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:61^T24 141 0 somegenome 926 37 61M1D22M1I7M * 0 0 GCGAACTGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTACGCGCCGATTGTTGCGAGATTTTGGAC 0*1A+,8:1DF&D1NL1B&M3'?,BKN:6784B>;IAB':;@-/6N:B,=J0+FG30)C6'CL.<'+K<: XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:61^T29 145 0 somegenome 927 37 60M1D46M * 0 0 CGAACTGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTACGCGCCGATTGTTGCGAGATTTGGACGGACGTTGACGGGGGGT 0000IDD:);6.2JB:/3LKL3E7-2)'+3&.5J2(:6*;J4(D@C*>;NA;?;(AA7@*K2J:1IHG&;F(7,.:'F;MK&2E.B=3-*(G-C9B:818I2J=@- XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:2 XO:i:1 XG:i:1 MD:Z:60^T43T0C1 144 16 somegenome 932 37 55M1I41M * 0 0 TGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTTTACGCGCCGATTGTTGCGAGATTTGGACGGACGTTGACG ,'N/I(D:2>/,770MJ&D<>)CEJEF+(L3+G9J3=9)@HHL>(M18,J9K/*=63(&?H*(0'M5.K99MH.72KA:B+&EB4D>E>/>)<2A:-C=+FG5>?.B8F&GA=C)E,/4)JH7F5C+@M,9))A,))83D<04.H)=L00 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:79 149 16 somegenome 938 37 72M1D16M2I16M * 0 0 TGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTTACGCGCCGATTGTTGCGAGATTGGACGGACGTTGACGGGGGGTCTATACCTGCG ;I<:DDD)2)2F16)/(6-@1AABA;(4C*9?L2)+AHA;8,C5.'+,;+2/LB>BJ'B@B'*&20)>4E35=5):IB58EF*91M-2GGCH9>1,+@998+0000 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:72^T32 151 0 somegenome 949 37 61M2I17M2D31M * 0 0 AACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTTACGCGCCGATTGTTGCGAGATTTTTGGACGGACGTTGACGGTCTATACCTGCGACCCGCGTCAGGTGCCG 000).K7JA0F29G5(;H:,?3N:A9NI&F8)>15L1<@5A7?JJ5.HBA1NB58='3BA(@:H>&DE&+0>)A*.<,'(H&GG0/2L8(8<8'NN6F.:2+40*?/-3FN XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:1 XO:i:2 XG:i:4 MD:Z:78^GG30C0 143 16 somegenome 951 37 36M3I23M1D12M * 0 0 CGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTTTTTACGCGCCGATTGTTGCGAGATTGGACGGACGT LCL?*JB8)&<2D0)<,0*2?.-N8N?JMN7FE7=L3?F)>73&N06&0(MA*,95M&B2NG/:09IH7F9000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:59^T12 150 16 somegenome 958 37 52M1D16M2D17M * 0 0 GACTACTCTGCTGCGGTGCTGGCTGCCTGTTTACGCGCCGATTGTTGCGAGATTGGACGGACGTTGACGGTCTATACCTGCGACC BHGN,F5>-GIJH/1KK1=,DD;I=H&A+4(@CIHJH0:;6L,GA.''53(=M+50I/46<=ND9&MD1F98/KLE?0=3&H51D XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:52^T16^GG17 152 0 somegenome 970 37 17M2I23M1D51M * 0 0 GCGGTGCTGGCTGCCTGTTTTTACGCGCCGATTGTTGCGAGATTGGACGGACGTTGACGGGGTCTATACCTGCGACCCGCGTCAGGTGCCCGA 00/C+K;>474J:N,K0ECE;DLMC++HE-*N7M+.DHH-=8ABJK8-C&-*0:<4*/@N./JM'=:N:I)19I,):'79N/>F?GA.898KJ>H:/6'?BIM31,M9HC@BHCC?C.NNG9', XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:29^G29^C54 160 16 somegenome 1006 37 38M1D12M3I45M * 0 0 GAGATTTGGACGGACGTTGACGGGGTCTATACCTGCGACCGCGTCAGGTGCCCCCCGATGCGAGGTTGTTGAAGTCGATGTCCTACCAGGAAGCGATG *D=IA@>=)(/;CEF00N/JG,-@D'NI:?07E>HIBE6M:E';):D5/GA1F>9>?84KLH.K1G+)&BJJ?3@D7LCK973-<>5/,E57(00000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:38^C57 162 0 somegenome 1012 37 15M1D29M4I51M * 0 0 TGGACGGACGTTGACGGGTCTATACCTGCGACCCGCGTCAGGTGCCCCCCCGATGCGAGGTTGTTGAAGTCGATGTCCTACCAGGAAGCGATGGAGCTT 00000/60K<.C;/E7N:NG?&FDHD/J6?J25.=C,/I&C;ED>&C3.@+:-1**J=&LEB4+->JG@F4D,.F;EA07(6@?I-HGK;4E+HK5/553M6,>52E**I4=+D65G0LB00 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:114 166 0 somegenome 1022 37 5M2D77M1I13M * 0 0 TTGACGGTCTATACCTGCGACCCGCGTCAGGTGCCCGATGCGAGGTTGTTGAAGTCGATGTCCTACCAGGAAGCGATGGAGCTTTTCCTACTTCGG 0H(1;C61L'+F>1>(.83L>99474AE<2MC4./'J6;JL<7J.D?/=,//)I<,.;I(41'@AC&,<27H2:87G<&5NM)432&K372?MM97 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:5^GG90 168 0 somegenome 1056 37 67M1D7M * 0 0 GCCCGATGCGAGGTTGTTGAAGTCGATGTCCTACCAGGAAGCGATGGAGCTTTCCTACTTCGGCGCTAAGTTCT 0;&6GM3<,86-2CL-2GH&(,KL>-9MFIG887I;F5@LL/FKH+&:17CB+9NF9,8/L9@<**E':1676=3(DJEIG>0/N>A>IH>+@KD-0KLID4'6B7A+G'=,:K=*/(IF:FFMH37(M0?5-))K/-97>I<>N?21/5M7M//.)7CD5??1000 XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:5 MD:Z:86^CC19 177 16 somegenome 1151 37 19M2I24M1D23M * 0 0 CCATCGCCCAGTTCCAGATCCCCCTTGCCTGATTAAAAATACCGGAATCCTCAAGCACCAGGTACGCT 2K.M,B.K+H6CH/6(EDGILH0C2BK&/4K@'N(CGE:'E)..'M,?3(2277=000 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:43^A23 181 0 somegenome 1155 37 28M3D58M * 0 0 CGCCCAGTTCCAGATCCCTTGCCTGATTAATACCGGAAATCCTCAAGCACCAGGTACGCTCATTGGTGCCAGCCGTGATGAAGACG 000.LH5:G/+<26C&DF=5HL4-.36E'AA<@5;&;*-FNHL)0;)@EL(9GFI7I/4064DNA+07&3JL);&5L4(7'J@B&I XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:1 XO:i:1 XG:i:3 MD:Z:28^AAA58 184 0 somegenome 1163 37 20M1D73M1I5M1D5M * 0 0 TCCAGATCCCTTGCCTGATTAAAATACCGGAAATCCTCAAGCACCAGGTACGCTCATTGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGGCATTCCA 000**925<9L,(MEJ9'B7H>A;&:;-6&CM*74F)GGI/&5<3CE0+>4-5H,D7JF.-F(07>3??D8=HL? XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:3 XO:i:1 XG:i:1 MD:Z:20^A78^T5 182 16 somegenome 1164 37 6M1I13M1I77M * 0 0 CCAGATCCCCTTGCCTGATTAAAAAATACCGGAAATCCTCAAGCACCAGGTACGCTCATTGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGC ,H?N=,49E(D:+;-9?.@'G7749>'HN6&H?+'7/:+(89M8&;J/52*D5&4(8:?G62+A&@0:F8D?3FC759F.A(6=2618(7;EG2,/.LN=C)A97(2*K)E((*,G5D?*C-N4??DME&ID'7'*3*0FBBG>53H1N-G7NI11,(9K:4&6);1B?=J*+3N+:*NA1?=;A4M=0F;,K4JF5(0/6D&(FF9M?J6@1/M9LK6>J6L+=)35FJH.5A:@&=JD&000 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:3 XO:i:1 XG:i:1 MD:Z:75^T37 185 0 somegenome 1205 37 52M1I17M * 0 0 CACCAGGTACGCTCATTGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGGCATTTCCAATCTGA 0005,B6(1MJ*9;+LB<=FIEKFG1E+@5BE-947?C2A8'H6<7G&8N2+14-90&A;7=?E*>FF'M XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:69 189 16 somegenome 1209 37 53M1D28M * 0 0 AGGTACGCTCATTGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGCATTCCAATCTGAATAACATGGCAATGTTC A;C1-C@2IG:*-?+@;&41;;LK52IE1B XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:53^T28 188 0 somegenome 1216 37 46M1D24M * 0 0 CTCATTGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGCATTCCAATCTGAATAACATGGCAAT JIF22>.NJ0/45N.BB1*A&.M+,)E)2;:<.HA:1>1A52JMM80;I*E8@&AB1I:CJ XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:46^T24 195 0 somegenome 1221 37 41M3I53M1I17M * 0 0 TGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGCATTTTTTCCAATCTGAATAACATGGCAATGTTCAGCGTTTCTGGTCCGGGGATGAAAGGGGATGGTCGGCATGGC 00000)72BLGB>;:(/)&>@((?&39-N5F5>DL@H<>4C6J3N5KM76GN41/4D7)NM;@N+,E)8,H7*I?* XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:111 192 16 somegenome 1224 37 92M * 0 0 TGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGCATTTCCAATCTGAATAACATGGCAATGTTCAGCGTTTCTGGTCCGGGGATGAAGG FMHDDH73FG5&M(5;J@;)A:>D4'K3M+)LJ(4=D<0NJ)KE0:(AL80>84?G&LCJC211+A=.1C@2FJ('IJED;E)6K.>);=E0 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:90A1 201 0 somegenome 1285 37 20M1D36M1I8M * 0 0 ATGTTCAGCGTTTCTGGTCCGGGATGAAAGGGATGGTCGGCATGGCGGCGCGCGTCTTTTGCAGC 0000:*NEE?65I4H;1+A/;1*-H:=55FK.=,2&@1NH0N@D>IC/6 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:20^G44 207 16 somegenome 1303 37 58M1D5M1D28M * 0 0 GGGGGGATGAAAGGGATGGTCGGCATGGCGGCGCGCGTCTTTGCAGCGATGTCACGCGCCGTATTCCGTGGTGCTGATTACGCAATCATCT IL+A0>3=33)-9+'<;9@M)++/B8DI8+G2=00 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:2 XO:i:2 XG:i:2 MD:Z:0C0C56^C5^T28 205 0 somegenome 1316 37 26M1D18M1D26M * 0 0 GGATGGTCGGCATGGCGGCGCGCGTCTTGCAGCGATGTCACGCGCCGTATTTCCGTGGTGCTGATTACGC ?-E>9B;BJ7/51BA?:N0>+(:-?42:;N;7:-;@8IA.90.* XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:26^T18^C26 210 0 somegenome 1321 37 21M1D71M * 0 0 GTCGGCATGGCGGCGCGCGTCTTGCAGCGATGTCACGCGCCCGTATTTCCGTGGTGCTGATTACGCAATCATCTTCCGAATACAGCATCAGT 00K9EH2066:6B;;84DN9KB9'9K2L?LH-'&FE.,&GMH0'';.(ML21:B<)2,F7F:@3;35->+NHMIC=7HK*I*1,55A3:1CN6,F?;'5*=?(-))=-=A179M9C)M@@8B/=GD*J*5H&>9=L>;/0HB1)3GJ=)C:M&5DFAF;;8I2.0/-48*1:+@FK XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:98 214 0 somegenome 1358 37 3M1D5M1I90M * 0 0 GCGCCGTATTTTCCGTGGTGCTGATTACGCAATCATCTTCCGAATACAGCATCAGTTTCTGCGTTCCACAAAGCGACTGTGTGCGAGCTGAACGGGCAA 00*C)6CJ1KC(B@537DNHD=:'7I=7-62>0KB@9'HH/,;KNC;LA6@,,DI+9&+1L.934D?&B:*IMMB:73KKE=9L>3275,1-B;)MA8* XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:3^C95 216 0 somegenome 1375 37 38M5I63M * 0 0 GTGCTGATTACGCAATCATCTTCCGAATACAGCATCAGTTTTTTTTCTGCGTTCCACAAAGCGACTGTGTGCGAGCTGAACGGGCAATGCAGGAAGAGTTCTACCT 00000@K9(,DHFC0'+8(NC4F50H000D165&F/2M3GE9=6:3?*A38?<>/:=A89(G0+-9L,'.'AHHAE((IE'9/?,')9E.253@3:EGG3J'--J, XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:5 MD:Z:101 219 16 somegenome 1387 37 64M1D31M1D17M * 0 0 CAATCATCTTCCGAATACAGCATCAGTTTCTGCGTTCCACAAAGCGACTGTGTGCGAGCTGAACGGCAATGCAGGAAGAGTTCTACCTGGAACTGAAGAAGGCTTACTGGAG ND+9GGL6FK7L(L+<3+1./15L-@96?*E03KHJJ80>LB661+28HC&4G2);2,C?'(.&&';JBMA?A?,A7'?B(39B2>00 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:64^G31^A17 218 0 somegenome 1405 37 46M1D28M * 0 0 AGCATCAGTTTCTGCGTTCCACAAAGCGACTGTGTGCGAGCTGAACGGCAATGCAGGAAGAGTTCTACCTGGAA 9(D-C320J22CKGGM;:48BA@A6?A4BKD-;5(3,J1CI87KA6>/?)&NG44;3A-1@2)*D:(9*2-09F XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:46^G28 220 16 somegenome 1411 37 40M1D31M1D38M * 0 0 AGTTTCTGCGTTCCACAAAGCGACTGTGTGCGAGCTGAACGGCAATGCAGGAAGAGTTCTACCTGGAACTGAAGAAGGCTTACTGGAGCCGCTGGCAGTGACGGAACGG 948@7J77G6A>'18)BI40'3J*A=)(@5<0(0.&86@6I++'.4H3.D=7/:KL(;,+E<;)538)(.?25+I55AN>@,0J3?>E;=@91N7G4CEN+BG>(BD8083F96*<>412;D'JD9NI.00 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:66^A45 224 16 somegenome 1431 37 20M3I32M1I50M * 0 0 CGACTGTGTGCGAGCTGAACGGGGGGCAATGCAGGAAGAGTTCTACCTGGAACTGAAAAGAAGGCTTACTGGAGCCGCTGGCAGTGACGGAACGGCTGGCCATTAT <))2>:A(.B:C7>KCK.&N/F@C50/+H91,868I@>,J-AN,I6,-..0B>(5>BCM?CFI79@;D0GBJBG@8KDJ(,+EK@5.2,71;2BG4@IL53JA0(A9J:*?F9FA&L;'/D/H'(HD=F+K;E>(D54(+00 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:66 225 0 somegenome 1458 37 81M * 0 0 GCAGGAAGAGTTCTACCTGGAACTGAAAGAAGGCTTACTGGAGCCGCTGGCAGTGACGGAACGGCTGGCCATTATCTCGGT E<,4@0B551<40I&:B>@54=;>+/,GAKAI9I&4139F&=:5)<3EEE3N))N2L6BHD':'*N2;AM<,17@5D)(@2 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:81 227 16 somegenome 1493 37 69M * 0 0 TACTGGAGCCGCTGGCAGTGACGGAACGGCTGGCCATTATCTCGGTGGTAGGTGATGGTATGCGCACCT ,-*/KMDN71)-=M6&>85NC=HNK'.79,/+282.F5BF+5/G=<(J21.J1;-L@-2 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:69 232 16 somegenome 1542 37 56M1D33M * 0 0 AGGTGATGGTATGCGCACCTTGCGTGGGATCTCGGCGAAATTCTTTGCCGCACTGGCCGCGCCAATATCAACATTGTCGCCATTGCTCA @9?,>I10(A'2*',:D>,@C9/02N1D,D4BH'?,BFN92B&CN(B*-'1A)==>*)D;4):(&K<:=F70,M.D)08D7&)5+GC90 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:56^C33 238 16 somegenome 1571 37 14M1I78M * 0 0 TCTCGGCGAAATTCTTTTGCCGCACTGGCCCGCGCCAATATCAACATTGTCGCCATTGCTCAGGGATCTTCTGAACGCTCAATCTCTGTCGTG CED2;98896*(<*,30.?@5?6>8*AB*=HJ3,@9HH?21/6K8HGMM&L61L8D+*A=+=L1A0(00 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:92 237 0 somegenome 1580 37 5M1D46M1I28M * 0 0 AATTCTTGCCGCACTGGCCCGCGCCAATATCAACATTGTCGCCATTGCTCAGGGGATCTTCTGAACGCTCAATCTCTGTC 0157B7C<<=MI/,(IB(F&<,N,56BLAM-JD-4I*M)C@E85LFAI+6AM9AJAA&31*0N;I-MA'*KB6ELF@I,J XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:5^T74 239 16 somegenome 1584 37 14M3I34M1I35M * 0 0 CTTTGCCGCACTGGCCCCCCGCGCCAATATCAACATTGTCGCCATTGCTCAGGGGATCTTCTGAACGCTCAATCTCTGTCGTGGTAA =;9&:&37M50H?3(KA@.D/,NN;:C4B3KCA2J8)2=/0=?/@;E((2D7K4H'9D4N=GB(M/06>'=-N=B*59GN2DH0000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:83 243 0 somegenome 1604 37 28M1D32M2I35M * 0 0 CCAATATCAACATTGTCGCCATTGCTCAGGATCTTCTGAACGCTCAATCTCTGTCGTGGTAAAAATAACGATGATGCGACCACTGGCGTGCGCGTTA 00')H5K4H,8LE12H-'+/2?I,-AN/G99L:3&*( XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:28^G67 240 0 somegenome 1605 37 60M2I7M * 0 0 CAATATCAACATTGTCGCCATTGCTCAGGGATCTTCTGAACGCTCAATCTCTGTCGTGGTAAAAATAAC 00000=6G+NN&HM'>NC2C3D/+1F(FN=7D<345)@<**?;39?K7*'13EG@/7=J0N*HF?7I=. XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:67 247 16 somegenome 1618 37 14M1D32M1I51M * 0 0 GTCGCCATTGCTCAGGATCTTCTGAACGCTCAATCTCTGTCGTGGTAAAATAACGATGATGCGACCACTGGCGTGCGCGTTACTCATCAGATGCTGTT 0:;,AFD-:+J(9A2*)7*6B(/6K6ADK/3E,3;7A=4GI*J8:.,N*E/HB:N&;L+CN1D6.F-F0F':.49J6A6B2,0*//A10LJ000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:14^G83 253 0 somegenome 1629 37 36M3I71M * 0 0 TCAGGGATCTTCTGAACGCTCAATCTCTGTCGTGGTAAAAAATAACGATGATGCGACCACTGGCGTGCGCGTTACTCATCAGATGCTGTTCAATACCGATCAGGTTATCG 000;N3C2/@<'71NE1J<5B<-LID0H*,+N)G)E,4)@/4=3-:?L;-2/(M56:LI1*:N.(AE9H96LJ6A=D1(:&N;0-:A>A0.JE1MM5LL@GG XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:3 MD:Z:107 242 0 somegenome 1630 37 2M1D32M2I30M * 0 0 CAGGATCTTCTGAACGCTCAATCTCTGTCGTGGTAAAAATAACGATGATGCGACCACTGGCGTGCG 00007:?G*5843,?6=9,6JLF4=H)1J0E430000 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:3 MD:Z:75 249 16 somegenome 1634 37 31M1D60M * 0 0 GATCTTCTGAACGCTCAATCTCTGTCGTGGTAATAACGATGATGCGACCACTGGCGTGCGCGTTACTCATCAGATGCTGTTCAATACCGAT .A'>>)9L339I742.G6IGG13L7+'8.CB.(023?G5(-L><'&&F'51-G>D,33M(7>4)2@M'ED<&9'&7)9*IJC/+-6M3N(1@)2?:)9D((4@-(:.6+)2K;0 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:23^A54 246 16 somegenome 1645 37 20M2I48M * 0 0 CGCTCAATCTCTGTCGTGGTAAAAATAACGATGATGCGACCACTGGCGTGCGCGTTACTCATCAGATGCT .G02/*AL-E4K,KB00 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:68 255 16 somegenome 1647 37 18M1I76M * 0 0 CTCAATCTCTGTCGTGGTAAAATAACGATGATGCGACCACTGGCGTGCGCGTTACTCATCAGATGCTGTTCAATACCGATCAGGTTATCGAAGTG H>M-=856/7+1MFDKB52NC1:6I,G)&.H,8EHFJ@)/4,9&4K,C0:=?F.2;HM5,0I8CK?=H5;7/JH-.A.;<-GD.A4A'+DH.D22J92N;>(J+7H6<9* XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:10^A104 251 16 somegenome 1659 37 6M3I65M * 0 0 CGTGGTAAAAAATAACGATGATGCGACCACTGGCGTGCGCGTTACTCATCAGATGCTGTTCAATACCGATCAGG >5.I&HAAG5CJ&E0*@)@L?FC>*/K0?8-.59>,=?F-E5-:L0-6BM3)/BK,:LNBN7;9;5)MF2.HN=KN+LCA7J',.KF/IJ.<<,BN;I.= XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:113 258 0 somegenome 1676 37 65M1D28M * 0 0 ATGCGACCACTGGCGTGCGCGTTACTCATCAGATGCTGTTCAATACCGATCAGGTTATCGAAGTGTTGTGATTGGCGTCGGTGGCGTTGGCGG H-=2FK3C7*H7.9@&H:F4LD=(;+&.&I<3E87J,M+K+;1C2D-(=IIA47I-E46N;G7:E28K,0L1*-I?3/NG77H);&?*@+N=? XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:65^T28 260 0 somegenome 1708 37 33M2I60M * 0 0 ATGCTGTTCAATACCGATCAGGTTATCGAAGTGTTTTTGTGATTGGCGTCGGTGGCGTTGGCGGTGCGCTGCTGGAGCAACTGAAGCGTCAGCAA 000'9K5(G4<*/4A0BI3@19/KFD@.J>MMA96/A;-G6,2*/LCB-941HFK56=5L,29)8AI942(,/L5@+5KJI?/@;53(93BB1:?J2=FN;B&@>.032/:M+1B52L=,/*DB=2'G7I<.J2;8H:*I>;GNNC@9G-=M'LKD;F'6E XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:33^T69 261 0 somegenome 1709 37 32M1D57M2I6M * 0 0 TGCTGTTCAATACCGATCAGGTTATCGAAGTGTTGTGATTGGCGTCGGTGGCGTTGGCGGTGCGCTGCTGGAGCAACTGAAGCGTCAGCAAAAAGCT 000/K4H&(MN,0'+:&=5F0@-:B@AM)(A1IDG7.D7BF;)=1,DI56MBF>L<*(D1'=0N.1M9&74C2).4J8J)KG?,=6>C*@-BD)4-ED@9,>3A@1M/)0L1-D-'2DK0;;0000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:97 264 16 somegenome 1722 37 19M3I58M1D14M * 0 0 CGATCAGGTTATCGAAGTGTTTTTTGTGATTGGCGTCGGTGGCGTTGGCGGTGCGCTGCTGGAGCAACTGAAGCGTCAGCAAGCTGGCTGAAGA J1>FA.3)G-A'@D&*.(M&J2EL?E87+-07N,BA1ML.D*)LN=3F));A:+K)?;?.FH70C>'KDJ):MKGH2=@I6*/'E-K68?,000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:77^A14 265 0 somegenome 1744 37 55M2I15M * 0 0 GTGATTGGCGTCGGTGGCGTTGGCGGTGCGCTGCTGGAGCAACTGAAGCGTCAGCAAAAAGCTGGCTGAAGA 000('9@7C:L8M/L7H//A-M:(-@FH.G255MD0M+;:1(DLJCH<.C,9+1N<-F38=9*NG5:A)I31 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:70 268 16 somegenome 1749 37 93M * 0 0 TGGCGTCGGTGGCGTTGGCGGTGCGCTGCTGGAGCAACTGAAGCGTCAGCAAAGCTGGCTGAAGAATAAACATATCGACTTACGTGTCTGCGG &?50.LB;23&D2KD;29M+.*8.-FLC@M/L-1A1'+LN?'LK)J4=68'-4J(D9L.C+539C@=E6NBGHJ&-:G&AI*;0*;-9+NK6F7C7C:8(D16'JFG>8C40,,94N)5F/L'.64J:DJ4@4&@I05=C('2D+0C XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:60^A24^GT11 276 0 somegenome 1772 37 27M1D16M3I71M * 0 0 CGCTGCTGGAGCAACTGAAGCGTCAGCAAGCTGGCTGAAGAATAAAAAACATATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAA 000),<+H(F48.:M?0656FJNH,.2@A(2ED'IB8.92,:9KH7@5B>5E7'5J?M&)))?:31.M--5;=B+J=F00&7@.9)6I3@<)@>?3G:2AD.63=/F+:87<.7.=F XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:27^A87 272 16 somegenome 1775 37 24M2I67M * 0 0 TGCTGGAGCAACTGAAGCGTCAGCAAAAAGCTGGCTGAAGAATAAACATATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGTT 9'0/E6*@B60/9?3N9D.C;EJ4+76K.E89N&7<3L9&CD44A6(JNLI;828=HF7,5C00 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:1 XO:i:1 XG:i:2 MD:Z:89C1 274 0 somegenome 1775 37 24M1D16M2I60M * 0 0 TGCTGGAGCAACTGAAGCGTCAGCAAGCTGGCTGAAGAATAAAAACATATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTA 0*216ML?J*M(=8N8&>KFI0N.D7FA7IAH6'6H/N&(()FAFF&F-'E5&L7L6E,,*JI/+9&@83C/KJIC*IK)5*2H662+N XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:13^A67 281 16 somegenome 1803 37 13M2I76M2I18M * 0 0 CTGGCTGAAGAATAAAAACATATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAAAAAACTGGCAGGAAGAAC EDBD0?.?61A(1H*422,K/;@@G+'2LFD>,*,J4=4CD)D/9?,NFK3::N'5(BH2-E4L)6(4I'C>?7;7.;B>0>E(@A1&?E(0&<=0)F<*19/5I<20000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:107 283 16 somegenome 1813 23 102M * 0 0 GAATAACATATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAAAACTGGCAGGAAGAACTGGCG .27)+*A;=0C;9I-''A=A.:@H,,59<5J33AL>8,3(:='CD;@9A2C(F(G5GI5)6/D7N93=A3=5>6(3'.B21I4H=452+;*LD.?7@2CL6; XT:A:U NM:i:3 X0:i:1 X1:i:1 XM:i:3 XO:i:0 XG:i:0 MD:Z:0A1T0A98 XA:Z:somegenome,-1812,4M1D98M,1; 284 0 somegenome 1817 37 75M1D22M * 0 0 AACATATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAAACTGGCAGGAAGAACTGGCG (4-*2>G*04M8:)C@+E10IEE,0/C6EL08=9,.)NC5,I:)+7'&82'JML;/.4GHCC?G,11I3IDGI/(=1KLM'?1C:5=6DG8=-BHN= XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:75^A22 288 16 somegenome 1827 37 65M2I34M * 0 0 CTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAAAAAACTGGCAGGAAGAACTGGCGCAAGCCAAAGA AKB/E135&*&.40=*G974@C6EA@J@1I9H/2L<4&;ME:E+*&3C>FN/0E&J>26HG8C:3>22K&&-KB*,9G7&KD01:5L/6.8779K''4*9:L6>:/5H'.6L1@1G+7BD7L:K.N6*04&>F7>E'B)D02=(IE,6C94B.(.?K8;>/G>,6FK8*1/=CC54=/>3BNC8=F.A=EBFI>5M/C&,@N5*8@J4FKLA404/4;N&'2B3,G>CM8)4*:.F7;@EHL*F/;A@).AEB:/23)J60L)M7BI XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:60^A22 291 0 somegenome 1833 37 59M2D27M1D24M * 0 0 TGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAACTGGCAGGAAGAACTGGCGCAAGCCAAGAGCCGTTTAATCTCGGGCGCT 'LA0=M/&=,I75JLH7MDH?1-6>1N?9L2'9,MH-)I382>L3/GLCJ&-,(;72.+H2?8@8,H*A)@-?@7D5MLD6L/GE XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:59^AA27^A24 280 16 somegenome 1835 37 57M1D12M * 0 0 TCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAAACTGGCAGGA 1H*)FD(NF19B(F708AD+GA<.LKAJ*2:1*36N:)/+/:KL).;J78?E5=.1@A/(JG8612&32 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:57^A12 282 0 somegenome 1841 37 51M2D18M * 0 0 GTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAACTGGCAGGAAGAACTG <+?)=L7@N2FGJE>>+ED1J9B5;KFEIE&//)4*3C.A8H?3C0C:GC)<*8NKL(@@@46AEJK)J XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:51^AA18 296 0 somegenome 1853 37 39M2D27M1I44M * 0 0 CGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAACTGGCAGGAAGAACTGGCGCAAGCCAAAAGAGCCGTTTAATCTCGGGCGCTTAATTCGCCTCGTGAAAAA 000>G&?F4,:>GD-)ILN;-7>(97FNC5C.@I;3JE(101<0K1;K'7F;M9?4DL.K15C/L<=K9.F3>A33.,D'27<,26BH5E?'H++3C5,>H/MCE95K=6J XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:1 XO:i:2 XG:i:3 MD:Z:39^AA69G1 292 16 somegenome 1880 37 50M1I9M1I8M * 0 0 GCCTTAATCTGGAAAACTGGCAGGAAGAACTGGCGCAAGCCAAAGAGCCGTTTTAATCTCGGGGCGCTT .1JKK23:FGH(:FAFL4*>??*I)2K3*?D0/-+/300 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:101 306 0 somegenome 1908 37 22M1D29M1I46M * 0 0 ACTGGCGCAAGCCAAAGAGCCGTTAATCTCGGGCGCTTAATTCGCCTCGTGAAAAGAATATCATCTGCTGAACCCGGTCATTGTTGACTGCACTTCCA 00BCKCG(KMD;N::BI3?I4)4B*:8H1ID;:/BL-1CNHM0B)@/=C3IJ&*L-=L&G4;'.*9>?ND= XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:22^T75 312 0 somegenome 1932 37 7M1D20M1D86M * 0 0 TAATCTCGGCGCTTAATTCGCCTCGTGAAGAATATCATCTGCTGAACCCGGTCATTGTTGACTGCACTTCCAGCCAGGCAGTGGCGGATCAATATGCCGACTTCCTGCGCGAA :+.&G>&*C/10)3A@.LLA&0HC-J45;.866L+F@A/(H.-(F@N11:39;FAFHHH9BK2FG<==HJ7;GA34ADJM*7C.FK*'&/<*C.EM0=6:A=G&M,;CI:?9J XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:7^G20^A86 311 16 somegenome 1935 37 25M1D19M1D65M * 0 0 TCTCGGGCGCTTAATTCGCCTCGTGAAGAATATCATCTGCTGAACCGGTCATTGTTGACTGCACTTCCAGCCAGGCAGTGGCGGATCAATATGCCGACTTCCTGCGCGA JE;AC363K'/,+7JBI5G>?BEB&?JN/0)F'37<@N)E/3E:+9M7/N9*E'>6JIDK:57,B'4BAG25J,M0*0(7M1-<3(8;&ID83K''/:7.B?A<8-=N(4(5L9.L1-5*?HF;+9:=9?==N'/(,(GHBD2=I&71A93=*058LNAI0*?98=D3MH2>=(G=?6=4:D.+72*3K75EG>>?*'+-@.L'CM<&D-CCLH5M9*AG+GM)1CF';16D(4'6:21K<6*JIA-)B&&E&,M32C00 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:110 317 16 somegenome 1984 37 85M * 0 0 GTCATTGTTGACTGCACTTCCAGCCAGGCAGTGGCGGATCAATATGCCGACTTCCTGCGCGAAGGTTTCCACGTTGTCACGCCGA >(K;N*8@'LF>G:@@I82@AK+@L9GFB(@(A/2*D=(F=5'HE@30MM-;MIG38>**.ADF'(>/1CMM&F843E;>+M&)8 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:85 314 16 somegenome 1999 37 50M1D14M * 0 0 ACTTCCAGCCAGGCAGTGGCGGATCAATATGCCGACTTCCTGCGCGAAGGTTCCACGTTGTCAC ?>A@-(2H4+&(?792@@GN@&6J1'NA,)MC5B+9+49GJ+MN:G;F7F:K1E;J(?8L5MMC:(8*B0?48EJ' XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:64^AAA18 320 0 somegenome 2026 37 22M1I23M1I23M * 0 0 TATGCCGACTTCCTGCGCGAAGTTTTTCCACGTTGTCACGCCGAACAAAAAAGGCCAACACCTCGTCGAT 000F922=>G>+'I(&D=>=5'2'09)H@I,BG;9>6/EF/C,:5(8,A=8NC*2K*I@L*.MH??,))-C2'3;(*)3)/,;-.-K26,K7+30CN,+0M=/@B1E>H?(/((NMJ)H6&,BD59,)=<;M22K4,J99(7I22DM'N)+FJ,EK2C- XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:12^A102 328 0 somegenome 2062 37 9M2I55M1D39M * 0 0 ACGCCGAACAAAAAAAGGCCAACACCTCGTCGATGGATTACTACCATCAGTTGCGTTATGCGGCGGAAAATCGCGGCGTAAATTCCTCTATGACACCAACGTTGG 0000&6>MFL'AND7CLHHBB&,4)':,3L:8MG9/80<-H39L3BIILDC?HL8>L*;J./G.9M);?8K28+3GN:&86FKE>D=@CN;NF//)*31J;(/*K XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:64^A39 327 0 somegenome 2074 37 81M * 0 0 AAGGCCAACACCTCGTCGATGGATTACTACCATCAGTTGCGTTATGCGGCGGAAAAATCGCGGCGTAAATTCCTCTATGAC 0B+>C)3E7&.K3J=-)3L*:./6H,=>2KL?6A07L(.90?&33(N5:1LN'8L>.912(574'E0G54M'7.LJ'L7845D;*?2CG,6A)&FK3&3A@<7?LGMI-?-G4@MB7F)AA,0L581<>G;33/G*F=/D(00 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:80^GG7 332 16 somegenome 2094 37 32M3D35M1I20M * 0 0 GGATTACTACCATCAGTTGCGTTATGCGGCGGAATCGCGGCGTAAATTCCTCTATGACACCAACGTTGGGGGCTGGATTACCGGTTAT LAF99I<0J1,>F.F/*B8/-*I(C7G?F+/).0K08=4/-AJB4:=4K'(5,G='?8HN92+,(367)J-/HD=675&8C1+7H.EEEEBC9=>IKA1B()B+>/;,E/<,2@LH3 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:1 XO:i:1 XG:i:2 MD:Z:0A67^AA25 339 16 somegenome 2162 37 33M2D61M1D4M1D1M * 0 0 TTGGGGCTGGATTACCGGTTATTGAGAACCTGCAATCTGCTCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCATTCTTTCTGGTTCGCTTTTTCTT 6:)L.G4@K71J@(?29+?4I+&NGCH>7::3598L2:;&7'<'*NA&72@;1BF(&90>NL?8B7.<'66>K=:8;3NKCCN)9:6;(ME?B.-J500 XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:33^AA61^C2A1^A1 338 16 somegenome 2169 37 83M * 0 0 TGGATTACCGGTTATTGAGAACCTGCAAAATCTGCTCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCATTCTTTCTGGTT /27+(M2/I?CD>:494D=AK:A:7-;/*:?K'21HLK'MN/':&.809E3'@E,@BFAA-9HB/GN XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:83 341 0 somegenome 2188 37 7M1I90M * 0 0 AACCTGCAAAAATCTGCTCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCATTCTTTCTGGTTCGCTTTCTTATATCTTCGGCAAGTTAGACGAAG 000M8KAM-LK.DEB697+)-NJ9.@>/2MG6,D:1LB;<*?JJ&&)2B89)NEJ.DCI(&<,IN)F?0,&.'B,6E8I<;JE,,H@57*=N'7I=4A XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:97 343 0 somegenome 2193 37 50M1D11M1I35M * 0 0 AAAAAATCTGCTCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCATTCTTCTGGTTCGCTTTTCTTATATCTTCGGCAAGTTAGACGAAGGCATG 000F8:+G4;'N054J?&G.>':12@6231-75J86N99G XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:2 XO:i:2 XG:i:2 MD:Z:0G0C48^T46 344 0 somegenome 2199 37 44M1I49M1D4M1S * 0 0 TCTGCTCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCATTCTTTTCTGGTTCGCTTTCTTATATCTTCGGCAAGTTCGACGAAGGCATGAGTTCTC 0CHA87M&MN?L0.?+'2GL/+++E)LH,4.C68D:7F=7J6?1/F<)ICLKCE7H&,.7;JKF*.A;A4-'E4&'(;(LL+7@/+6G)H@3D18*+F, XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:4 XO:i:1 XG:i:1 MD:Z:78A14^T4 347 16 somegenome 2204 37 88M1D17M * 0 0 TCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCATTCTTTCTGGTTCGCTTTCTTATATCTTCGGCAAGTTAGACGAAGGCATGAGTTCTCCGAGGCGACCAC (L9G'23+96*6)L19M;*,A,+)M5=L&)29M)6.+.964CH=GMB3/CLM-5G713&,.:-&)&>/HC6+-HDKB:;00 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:88^T17 348 16 somegenome 2243 37 12M1D36M1D25M * 0 0 TTTCTGGTTCGCTTCTTATATCTTCGGCAAGTTAGACGAAGGCATGAGTTCTCCGAGGCGACCACGCTGGCGC 3LL416<5HB;,K+',&7N5++/<432C0*>0E(DA)(-4NA1444L>2B8@6/5'FL+.I952>A&AC5-:+ XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:12^T36^T25 352 16 somegenome 2256 37 64M2D3M3I30M * 0 0 TTCTTATATCTTCGGCAAGTTAGACGAAGGCATGAGTTTCTCCGAGGCGACCACGCTGGCGCGGAATGGGGGGTTATACCGAACCGGACCCGCGAGATGA ?'6I>>8M/GD-(<=&CJ9-(AFB,N*54L),?3EGJHANH)4>E,M@H:2?70J8=731F@;+7AB03D':J.I>A-;1:;)/'D@G1GD'(5:88I00 XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:4 XO:i:1 XG:i:1 MD:Z:64^GA33 350 16 somegenome 2260 37 58M2I7M1I23M * 0 0 TATATCTTCGGCAAGTTAGACGAAGGCATGAGTTTCTCCGAGGCGACCACGCTGGCGCGGGGGGAATGGGGTTATACCGAACCGGACCCGC JEH46.KG94EM:M8A/BD92MIN6C(B&(D-EC6,E(L477.&),N3*LD:6*6A4>+(8BM6I'(/G0843C71'F?2IC6*M1CKGK)L/(;H@0L1?2;C(7,B.3C0H>47>MK:0@CGL0,:+D3A5,-KL1I>@-;<0,4C@(-L XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:21^G18^G55 355 16 somegenome 2289 37 3M1I65M2I21M * 0 0 GAGTTTTCTCCGAGGCGACCACGCTGGCGCGGGAAATGGGTTATACCGAACCGGACCCGCGAGATGATCTTTTTCTGGTATGGATGTGGCGC '1H4DL:2C>AJ:A9*;&0/(5;BK:-(?-&HDI;C9,6)L.AD:.(:)H;D0E<-?26(M'=*ACI7F3:I0A2L.B&,MC*&6HL1')<)2JBBE-62N:)=<(K37G>B10@C+*G03AG>8)?3CI89A<A8=>68/ XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:41^G15^G26 369 0 somegenome 2505 37 19M2I56M * 0 0 GTCACAACTCGACGATCTCTTTTTGCCGCGCGCGTGGCGAAGGCCCGTGATGAAGGAAAAGTTTTGCGCTATGTTGG 000F/6LM1;2:*0IK'J()HFFE3.8.4-9K<4@FA7*25G)C;?7;B3H*:&@B?K<= XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:75 371 16 somegenome 2525 37 71M * 0 0 TTGCCGCGCGCGTGGCGAAGGCCCGTGATGAAGGAAAAGTTTTGCGCTATGTTGGCAATATTGATGAAGAT J1K,&MC>6)C?=?->7)B5;027:>(0NH/>G+N*'58HB>7=9L5:M:0)K*8BM>EMD-0 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:69G0C0 375 0 somegenome 2547 37 17M1I29M3I49M * 0 0 CCGTGATGAAGGAAAAGTTTTTGCGCTATGTTGGCAATATTGATGAAGATGGCGTCTGCCGCGTGAAGATTGCCGAAGTGGATGGTAATGATCCGCTGT 0-34)/7<.+14;E8B;)I XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:95 376 0 somegenome 2550 37 14M2D27M3I51M * 0 0 TGATGAAGGAAAAGTTGCGCTATGTTGGCAATATTGATGAAGATGGCGTCTGCCGCGTGAAGATTGCCGAAGTGGATGGTAATGATCCGCTGTTC 7+@5EJ:6,G:E5;AKDL&4HB'><)E*;BL*CL-H=8D+*BG'C5LH)*/'D+6+E?E&MNI2D><*9;57<2/476B=MH?'=38D,M&-CI'FK>)+--;G@-2I-A1(H8.=*G7'G4?(819/JL.@5J&@)JFLI8>+7DDCD000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:82 383 16 somegenome 2632 37 28M1D5M1D53M * 0 0 GATCCGCTGTTCAAAGTGAAAAATGGCGAAACGCCTGGCCTTCTATAGCCACTATTATCAGCCGCTGCCGTTGGTACTGCGCGGAT *33C0LA0;D62,4K@<-F<)*>44<27K+;4-)/FIJ.B-<.G='(.3,-MN:)?N3468'=63CG*&(JH4I;7I@4H=;C,&56CL('(JI=@5D36K<2.-+4&,=B&?&:-)/A+J<,I@AEI'>K+,,/A1H;00*K-IJF20;2BE/2LI.3440F:K8*;D+6@F:-F,+&K-C300 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:74^G29 386 16 somegenome 2663 37 64M1D12M * 0 0 ACGCCCTGGCCTTCTATAGCCACTATTATCAGCCGCTGCCGTTGGTACTGCGCGGATATGGTGCGGCAATGACGTT ?M0KMD7A+E?3EEFF0GJE.*J+2@4(MBFLJ,-G<94;0M.?I*03NL;6A030BLF-@6,:F+K(F:N9?)EE XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:64^G12 389 0 somegenome 2678 37 49M1I35M * 0 0 ATAGCCACTATTATCAGCCGCTGCCGTTGGTACTGCGCGGATATGGTGCGGGGCAATGACGTTACAGCTGCCGGTGTCTTTGCTG 0000-;(G/(AI))FNNN;-M.38=((C>*-G1C,7A:-HC5@.60(.:43AG-3@GC'E44''>42&-M=6C:K+C>NHI@:?8 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:84 391 0 somegenome 2684 37 71M2I12M * 0 0 ACTATTATCAGCCGCTGCCGTTGGTACTGCGCGGATATGGTGCGGGCAATGACGTTACAGCTGCCGGTGTCTTTTTGCTGATCTG 00JI-0318GFGDGD6@G'MF=?/M3*K@,B?.*F6.2H44D5D04KK7.=6F:AHFE)7L2F6(I+1;CB52@?-LF)'N3*F? XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:83 393 0 somegenome 2692 37 63M1D24M * 0 0 CAGCCGCTGCCGTTGGTACTGCGCGGATATGGTGCGGGCAATGACGTTACAGCTGCCGGTGTCTTGCTGATCTGCTACGTACCCTCT 0'.*;)E'&>CN*<->,:C>L7GL(:E;@/E7DF1M(-?F11L@)JEA>AJIM*D-*:8/:M)&LMCKD/@,:6/E26@.( XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:63^T24 392 16 somegenome 2694 37 33M1D27M1D17M * 0 0 GCCGCTGCCGTTGGTACTGCGCGGATATGGTGCGGCAATGACGTTACAGCTGCCGGTGTCTTGCTGATCTGCTACGT I3L&GE)1H0M?I>GC>6D0;43C+0@D50+56D0)'>&H'J+DAKEM/:1B:);(*J&'<-?CBJ36C.-MNCJK0K9IK6I.:)84=FD79'9&:)FMLA6'9@7C9=(B=/G+AD2?0KH7+>L1ANI,51CJEEN=.A1+M.000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:40^A73 405 16 somegenome 2787 37 61M2D11M2D27M * 0 0 GTTAGGAGTCTGACATGGTTAAAGTTTATGCCCCGGCTTCCAGTGCCAATATGAGCGTCGGTTGATGTGCTCGGCGGCGGTGACACCTGTTGATGGTGC =:.>6D30E@7C1*A-6EC8A3?960AE/38.@+0&GK(AI'A.?7=6=(6*:GG@&<(F8E,18@MGD;N=*'N1AHK<9+.=/C=NJ+9IJ>(G7+- XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:61^GT11^GG27 406 16 somegenome 2804 37 13M3I44M2I33M * 0 0 GTTAAAGTTTATGCCCCCCCGGCTTCCAGTGCCAATATGAGCGTCGGGTTTGATGTGCTCGGGGGGCGGCGGTGACACCTGTTGATGGTGCATTG 42I2CK'/6H6D/3A(:71&E*55J8<5((@L,D/B&K?J8348D.INB;=+4,)8>;2/K+L=6EE'NG.+II,(307IB:8-6/00N000000 XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:5 MD:Z:90 410 0 somegenome 2849 37 12M1D61M * 0 0 GTTGATGTGCTCGGGCGGCGGTGACACCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGC -M?,<00)N4NB+<(N):@(N=&J70)8'&BE/)76?8>*4>F<,>FHC:&6G>K/A)5LEF388IMJID2', XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:1 XO:i:1 XG:i:1 MD:Z:0T11^G61 419 16 somegenome 2855 37 99M1D9M * 0 0 GTGCTCGGGGCGGCGGTGACACCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTGCCGATA F4CL202;AMM6*AA&JI:N71.N))8)L03>:*I7'D<(E/@9*;KM=8I'+5=.&*/:>4'5L?C=4?/5>M8LLI>)A4JJ)(16/F?*'=??5.E;*D0 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:3 XO:i:0 XG:i:0 MD:Z:39C0G0G35 422 0 somegenome 2861 37 112M * 0 0 TCGGCGGCGGTGACACCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTTGCCGATAAGCTGCCGT )?4:5<.(<7&:.GD41C67.FK8449NE4N<4)>00L+?.EC XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:76 414 16 somegenome 2871 37 84M * 0 0 TGACACCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAAGAACCTCGGACGCT /=D9H:I7FBJ50BLF5GK6GAG+?82?C<'G;- XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:70C13 420 16 somegenome 2873 37 81M1D11M * 0 0 ACACCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTGCCGATAAG 2?:G/M&9I6*K..6+MG6.L@HHHN'2M65,A@E<;BLKE<0(&6/9<>,3*C+75:4(??L@1M)&D&9L,G>9,KL9=7D2E43FD+GG XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:81^T11 425 0 somegenome 2875 37 79M1I24M * 0 0 ACCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTTTGCCGATAAGCTGCCGTCAGAA 09BCJMF0D609&=GCB0D1F(.;-AGAH);;74G2KJ(6I-0.AFF>;IBFI2'; XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:103 415 0 somegenome 2876 37 80M * 0 0 CCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCACTCTCAACAACCTCGGACGCTT (;G5<107,F078J8H7D'61*C?-L63H9=M8:9N6;JD+;ELK-.)*3D&,&D30627NA<>L'DE/(L;',>:&K*/,;E-& XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:31^A41 417 16 somegenome 2882 37 71M * 0 0 GATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACG 0F+F*H&)40.B43L43L&;M-NH/.?LL8>N*>2()J0AK?;MKG.;GA:0C)(D XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:71 421 0 somegenome 2882 37 72M1D11M * 0 0 GATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTGCCGATAAG ;1@=>)M>1NB;IA4D0F5?+B:@,B9/AM:CN)0J=3+E>LCM*?C*B>:ID:AGD5 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:30G45 430 0 somegenome 2889 37 65M2I28M1D16M * 0 0 CATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTTTTGCCGATAAGCTGCCGTCAGAACCACGGAAAATATCGTTTAT 00C9=6K//GD1:,2-954'0FJ,CK=C89179,BL)(2L-GBM;C:7;?6G0&MH6CLFNN3>D>/5H&+(*3=HHF/?)& XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:93^G16 423 0 somegenome 2892 37 62M3I20M * 0 0 TGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTTTTTGCCGATAAGCTGCCGTC 0005G1EFG+AM,L,>,'E&B)K'N/658:4/II,&05/22@'554+L&).FD9-:<&+/+@;&.DI/=H:C9KBJ4.8@7G.)6 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:3 MD:Z:82 426 0 somegenome 2895 37 83M * 0 0 TCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTTGCCGATAAGCTGCCGTCAGAA 6IE4EJ';/F5.<6A(B.BL8613)3'CBD,:I6=7?/72;3AN&+23B8524+'(J'&9E3K3C1GHBL&'02(/9EC@:A.E'I:C=?:,J@:2,GC4.=G930>*0N&5<)JM@5K-)0.>B+L9/J)/CKK68C7@I(D'H/A<56/IND7?'DMIN@AJ1&<1/?(/8-4& XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:89^GA8^T9 424 16 somegenome 2896 37 81M * 0 0 CGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTTGCCGATAAGCTGCCGTCAGA =,IA===>;6M?5J/+H>?BN4N5=H:@IDCIKJH/6E/:+:C?G4@71;;A69-G+*?8,;=IKM>:I9;:&&IJ=E=61 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:81 439 0 somegenome 2926 37 59M5I45M * 0 0 GACATTCAGTCTCAACAACCTCGGACGCTTTGCCGATAAGCTGCCGTCAGAACCACGGGAAAAAAAAATATCGTTTATCAGTGCTGGGAGCGTTTTTGCCAGGAACTGG 0000:;(A;&)/HD62;)?AD&1)+2=JJA,06KF++1:(J+1BJ-*B5;<83&7/?/+B)NB>22M<88<+&LMD.&80B,:FGNF*B0*'IJ':K>+8MI<71BE-0 XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:5 MD:Z:104 429 0 somegenome 2930 37 24M1D27M3I16M * 0 0 TTCAGTCTCAACAACCTCGGACGCTTGCCGATAAGCTGCCGTCAGAACCACGGGGGGAAAATATCGTTTA 0000@38,(8LG039-*F=E5(6?(I*'=(6FD'D5&?J<4G'N@1@6D-M?=1=+0 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:67 445 0 somegenome 3040 37 14M1D27M1I30M * 0 0 TCCAGTGGCGATGACCTGGAAAAGAATATGCCGATCGGTTCGGGGCTTAGGCTCCAGTGCCTGTTCGGTGGT 0KE-JDJ@.@&9N(A17*@;H-B8*/ELCN7G)1+G;9<=D6E=@'+>)055NCD(+0GA9&.3HJB(@A34 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:14^C57 446 16 somegenome 3049 37 11M1I22M1I45M * 0 0 GATGACCCTGGAAAAAGAATATGCCGATCGGTTCGGGGCTTAGGCTCCAGTGCCTGTTCGGTGGTCGCGGCGCTGATGGC ,<7(32CDEN68HKA@I>N0EEF?GH;B>KN0-98=77J7(?EF?45(E)A;6KA1K3N1:'DC8C8@C..26EB4B000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:78 448 16 somegenome 3060 37 72M * 0 0 GAAAGAATATGCCGATCGGTTCGGGCTTAGGCTCCAGTGCCTGTTCGGTGGTCGCGGCGCTGATGGCGATGA 4,4G*738+@0E>(*+5.AF7)L?)*B?IML.=J+=+6)6J9*'7*L=:59@C;LBCB.=CJIN?1?M/3643,H?:&L)@,?()FK-NK7B+E*DAI6,F257->: XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:66 451 16 somegenome 3079 37 74M * 0 0 TCGGGGCTTAGGCTCCAGTGCCTGTTCGGTGGTCGCGGCGCTGATGGCGATGAATGAACACTGCGGCAAGCCGC 3<7H+E5:<,++/D?ND;=43?/<>8;N+?J*C?18&5?8E+->1&.HB3@EC:0000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:1T0C71 452 0 somegenome 3083 37 72M * 0 0 GGCTTAGGCTCCAGTGCCTGTTCGGTGGTCGCGGCGCTGATGGCGATGAATGAACACTGCGGCAAGCCGCTT D>C)2((-,;2F,7'/4+3-1,N/.JK0/7B.2(&J/-H9D*GF'+H,6CH'D1A+D&<(0:0:+,J>.A357J/?5L)CHL:3;-G=CJA7>?+I'0=..A5EN5KJ:'>9-MC(IG;000000 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:112 459 16 somegenome 3131 37 35M1D8M1I55M * 0 0 AATGAACACTGCGGCAAGCCGCTTAATGACACTCGTTGCTGGCTTTTGATGGGCGAGCTGGAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTG N@9@3+2<'-+/'>I)M5AB-1=KH0>4CH0*9-/IF<*(+*N956=0CDI;,L<1H-E.*G.JLC,(2(+/*-&0):12/):=-?3J=@K:BN?J000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:35^T63 458 16 somegenome 3138 37 37M2I6M1I48M * 0 0 ACTGCGGCAAGCCGCTTAATGACACTCGTTTGCTGGCTTTTTGATGGGGCGAGCTGGAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGT @2IC4C1D5:)6B;-@*:K5E';==*D14?.KN'E'CDL0I0M2+-2:2NC/,DN5@HALMEBG7B;LM:C)+5E@06J@'4'6CC:G/00000 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:91 456 0 somegenome 3145 37 30M1I6M1I46M * 0 0 CAAGCCGCTTAATGACACTCGTTTGCTGGCTTTTGATGGGGCGAGCTGGAACGCCGTATCTCCGGCAGCATTCATTACGACAAC 0075N??+-GF=/110GD801FE*H=(>3.,<;3.+3@2JIJJL&I*)0'2>*:K3HHL9;9,GB.-A-;AC'+139I/D5

    2IN&I,'F22=1:B(@JM9/L)K<:GNI<7F== XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:48^G26 466 0 somegenome 3166 37 9M1I91M * 0 0 TTTGCTGGCTTTTGATGGGCGAGCTGGAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTTTCTCGGTGGTATGCAGTTGATGATC 00D4BA4;'C2I&9&6+N:<4E5*3;AI+L&-JLE)5N(6&&5>@56+8E0K>E?1<*F1-;4@2/9/<)/:-+M)-0:-EJ-;8-;H@KH+-4JH:71KI8.==6NJLKF.<+5/550.*LH')NNEB+@4GL9L/&:8C=9 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:3^G56^T8 464 0 somegenome 3178 37 3M2I74M * 0 0 GATGGGGGCGAGCTGGAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTTTCTCGGTGGTATGC 005/6)F9HH;25-2A*.I*?M&FN&F208M/*8E/3E/( XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:56^T37 465 0 somegenome 3183 37 55M2D18M * 0 0 GCGAGCTGGAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTCTCGGTGGTATGCAGT &GA4&/DN8MF=4FB4?(G/8'53+=?DJA*;I*+MB&KF?L:?6/:E(*24I?) XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:55^TT18 469 16 somegenome 3186 37 85M * 0 0 AGCTGGAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTTTCTCGGTGGTATGCAGTTGATGATCGAAGA I/?JB@2=&01E2A?0L.EI.=FB9N8H&3+)M';;M?.H<&I(-6F+7*.3=-;*MFIID6+=?'H)?4F0I=@,IL2H/7/;2 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:85 467 0 somegenome 3189 37 49M1I28M * 0 0 TGGAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTTTTCTCGGTGGTATGCAGTTGATGATC 000C19H>B6-C4M3,/36=I1?3B=>+M;MG8.?@IC/AK7GA3H/882<,I/N(0*'BA.0@:,0?8<,I@@@5GB XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:77 468 0 somegenome 3191 37 47M1D27M * 0 0 GAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTTCTCGGTGGTATGCAGTTGATGATC ,I9,N/=HDIAE?E'5J:+-<)6I&*@;0<(64D*N9N2-88.82)-26H41M9&M3H=+=9C88)K8(A9FA: XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:47^T27 472 16 somegenome 3193 37 45M2D30M2I27M * 0 0 AGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTCTCGGTGGTATGCAGTTGATGATCGAAGAAAAAACGACATCATCAGCCAGCAAGTGC IE*BE<@=;0+G>?M6+F9IAC,H<(5H7JI25.@.MN))E5M-H29(815.J&23L,)D5;?'E<4)8?=(M9/'0)3(C(9J>?F<+DNG;(*;+?3@?<,?MEN?,:J1+L(E8B==6D1FM4;:MA?D3AG.C(((N?M96I'1&K62M XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:34^T78 471 0 somegenome 3206 37 32M1D31M1D17M * 0 0 GGCAGCATTCATTACGACAACGTGGCACCGTGTTTCTCGGTGGTATGCAGTTGATGATCGAAGAAACGACATCATCAGCC ;7/C*014+A077F,7FN0MH(.L==F5I4?:>)C(('91K??:-M1 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:32^T31^A17 477 0 somegenome 3250 37 20M2D77M * 0 0 TATGCAGTTGATGATCGAAGAACGACATCATCAGCCAGCAAGTGCCAGGGTTTGATGAGTGGCTGTGGGTGCTGGCGTATCCGGGGATTAAAGTCTC 0H;(K51G('3C.4JA.-5)')?8K0>8>M-13;67N:?M(3E:JHE.'*/C(;F1HK13=+KC5*2 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:20^AA77 476 16 somegenome 3273 37 29M1D40M * 0 0 ACGACATCATCAGCCAGCAAGTGCCAGGGTTGATGAGTGGCTGTGGGTGCTGGCGTATCCGGGGATTAA -7D*1:&DM@+E3@KF*&.'CFC?',J&GEH6C&'.2&-K5?.=GN?,20&(GC46H>>??=<.G-LN70*J?I8:M)9K9JMNECN-64.89&B XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:68^G41 479 16 somegenome 3299 37 35M1D28M1I8M * 0 0 GGTTTTGATGAGTGGCTGTGGGTGCTGGCGTATCCGGGATTAAAGTCTCGACGGCAGAAGCCAGGGGCTATT ;(/BG@2)(+,LG91(IJL;DD&I76NK7;EC6A>=

    =,A/IA5@FC))8JD&'*@LLG4>000 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:1 XO:i:2 XG:i:2 MD:Z:2G32^G36 487 0 somegenome 3342 37 21M1D5M2I43M * 0 0 AAGTCTCGACGGCAGAAGCCAGGCTATTTTTTACCGGCGCAGTATCGCCGCCAGGATTGCATTGCGCACGG 00M=/KA;DLN<'=5>-=;.D+C+L-E0A0,57)+GINN61,G9C@)<&F?&)INLEI@)KI)=M57L7I= XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:21^G48 495 0 somegenome 3353 37 10M1D46M1D51M * 0 0 GCAGAAGCCAGGCTATTTTACCGGCGCAGTATCGCCGCCAGGATTGCATTGCGCACGGCGACATCTGGCAGGCTTCATTCACGCCTGCTATTCCCGTCAGCCTGAGC 0*5LIK.B260L+)2&>4/.A?864:)B1F'E,12)J(+I6BK?M6.A889+G98+<5;D>NB8@?.E0&CN8LEHI3*HFM':L'L(+JFII4HD@D5903):5//07K5BIAM)(=::(>@0@'L?KBK.20(K.?F4,<:.@N4AE/G0 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:80^C29 499 0 somegenome 3367 37 43M1I37M3I34M * 0 0 TTTTTTACCGGCGCAGTATCGCCGCCAGGATTGCATTGCGCACGGGGCGACATCTGGCAGGCTTCATTCACGCCTGCTATTCCCCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAA 000000F92/J:2<:H+&BL&/I*?L28K2*EJ9F-GKE:HE))7:,M4M@6;1+MC:<2A9G()78AMC5B26H7JC,396&L2MN5,B@MC4,JA,FJ@HH8*H+K8+&*1<02.5 XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:1 XO:i:2 XG:i:4 MD:Z:1A112 494 0 somegenome 3388 37 22M1D50M * 0 0 CCGCCAGGATTGCATTGCGCACGGCGACATCTGGCAGGCTTCATTCACGCCTGCTATTCCCGTCAGCCTGAG 00+4NA>EB>)M4ED=//J:7F5F.++@FE;&;JN6)?0-B2GJ)6G/9IE&LK9CJ<=N&&@LJ95F.*7M XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:22^G50 498 0 somegenome 3396 37 14M1I69M * 0 0 ATTGCATTGCGCACGGGGCGACATCTGGCAGGCTTCATTCACGCCTGCTATTCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATG 0000D'1='0.G8(,N)'H/5:,:8;.<1;:KFK5)6JME;0)?FE+(5D<;1L'I01?E+<=N;L,/7L;17I.INEJ8;?,E XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:83 500 0 somegenome 3409 37 89M * 0 0 ACGGCGACATCTGGCAGGCTTCATTCACGCCTGCTATTCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAGATGTTATCGCTGAAC I,4BF,8&)D(:H>5.73(0*6B81<2A?I;;L1F;,:8IK:H@D976@M>7GCI)M,.''ML?*;CJ4-7+*J/NK4&GC(-NAE?5K XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:0C0G87 501 0 somegenome 3423 37 24M1I52M * 0 0 CAGGCTTCATTCACGCCTGCTATTCCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAGATGTTATCGCTGAACC 0:?;DH,&A);B)51H+L0(H7&@)=NDKK?A?CH7IJBA//./IJ7B,9N2A>JI**B>56A?3-E&B>J64*>AM XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:76 503 16 somegenome 3437 37 10M1I50M2I17M * 0 0 GCCTGCTATTCCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAGATGTTATCGCTGAACCCCCTACCGTGAACGGTT ELJ7IL9FIA=7EKDHB+()N:N8H)&G(MDI:-/),,3:.F915:8=JGJF'?CD&'3MH&0L*C>0D6MN23E5')E9& XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:54^C37 502 0 somegenome 3446 37 33M2I33M * 0 0 TTCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAAAGATGTTATCGCTGAACCCTACCGTGAACGG 009G>7BD9-?CE??)&C*>KCF6+@L/J8>A;9'IB8<-5)*6?6H,F.(B0I4M&4//+K5J,/4; XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:1 XO:i:1 XG:i:2 MD:Z:1C64 504 0 somegenome 3449 37 30M2I18M2I17M * 0 0 CGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAAAGATGTTATCGCTGAACCCCCTACCGTGAACGGTT 000000G7A30LH0;:BI,LL='FD<852:-5D,C102E,?M43GNDMI6;FJHFH9NI>F(N-I>EHH.2.G=@?/7I?JAC7+GA;3'),9LEF?&CM;(@(8G6=I'63E;2,HJD,F8CCC44G3;. XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:5 MD:Z:48^C47 509 0 somegenome 3451 37 46M1I37M * 0 0 TCAGCCTGAGCTTGCCGCGAAGCTGATGAAAGATGTTATCGCTGAACCCCTACCGTGAACGGTTACTGCCAGGCTTCCGGCAGG 0009BF4&4/B(<&L+482LKAK1H40@72I.>M-G31,(53?C'?G826A)LLI/GB+*4CC1L;88B:'L)+@=8CJ1G7>+ XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:83 513 0 somegenome 3451 37 28M1D17M1D47M * 0 0 TCAGCCTGAGCTTGCCGCGAAGCTGATGAAGATGTTATCGCTGAACCTACCGTGAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCG 0.'7J6,H@C22HGB>M.(?*64@643&1@C,=->N+(7/(3K-@+FLNG,?E/J---GD6=*.>.&9'/AJN1&6N@(&F@JJBEJC67+F XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:28^A17^C47 514 16 somegenome 3454 37 25M1D17M1D48M * 0 0 GCCTGAGCTTGCCGCGAAGCTGATGAAGATGTTATCGCTGAACCTACCGTGAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCGG *,*LNIN;?6E//*G;/L/@=AK,EN'NHCD95/=7+888+1K:/:./F0&)A,DKB&/@@--'.NLBGG2+8H8I; XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:39^C26 508 16 somegenome 3458 37 21M1D17M2I34M * 0 0 GAGCTTGCCGCGAAGCTGATGAAGATGTTATCGCTGAACCCCCTACCGTGAACGGTTACTGCCAGGCTTCCGGC -F;A76F.8NKCKA+-G7+;2,&D19>I7NH78.1=N>-+I(H)E5M2+:6KE8>(M4=6?BH64638@31,00 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:21^A51 516 16 somegenome 3460 37 37M1I51M * 0 0 GCTTGCCGCGAAGCTGATGAAAGATGTTATCGCTGAACCCCTACCGTGAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCGGTC (7@=/K2)D=*M*M.=L7:N@D7>&C//);K//@5N-,7@.8HJ4:4/(3'G38>>6B4?LK@HCH.<1(85'8D;.8@<30*EHI-'0 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:88 515 0 somegenome 3477 37 70M * 0 0 GAAAAGATGTTATCGCTGAACCCTACCGTGAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCGGT 000&=K.@)>:J29?'@DGH5I+*G*0&B8'IB,K.JM2IGG4C9+A-&&END03(0000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:1 XO:i:1 XG:i:3 MD:Z:10A66 521 0 somegenome 3504 37 48M2I17M * 0 0 GTGAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCGGTCGCGGAAAAATCGGCGCGGTAGCG 00K93->8:.':GA+'B@(2L);3A.B?+E81K@,2.@;?>C5E5;9*'>KJ*7M6562*AI&9C?G XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:65 524 16 somegenome 3505 37 101M * 0 0 TGAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCGGTCGCGGAAATCGGCGCGGTAGCGAGCGGTATCTCCGGCTCCGGCCCGACCTTGTTCGCTC MB83L.E>M,26&-&7@/*:AB@/&*CCK8(J)C9B2E0NN&;4J@H0CG?+DD8IH.B+9M952,:K3L2GK2AGM68NL87M=FBGK* XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:101 526 0 somegenome 3506 37 46M1D36M1D31M * 0 0 GAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCGGTCGCGGAATCGGCGCGGTAGCGAGCGGTATCTCCGGCTCCGGCCGACCTTGTTCGCTCTGTGTGACAAGCCGG MN@B@JGKMN'/CGKL:288B*A,1?)?*)'.4I7CB@)+E-,73G@,8:,&J:F32>,M=BK+,J/G7F+FADHF<@1@?(L>&N;7GCB0*&A49D)A2K*83NMC;M,4@.67?NN/5)(B XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:3 MD:Z:88 529 16 somegenome 3519 37 102M1I11M * 0 0 CAGGCTTCCGGCAGGCGCGGCAGGCGGTCGCGGAAATCGGCGCGGTAGCGAGCGGTATCTCCGGCTCCGGCCCGACCTTGTTCGCTCTGTGTGACAAGCCGGAAAACCGCCCAG D-A32I)9410EG8;&/*(5/=@H/3>J7'+'*K=0J0@(DKEK@J>)0B1/(B/J+L?NI45A=7L=JH8+0-?6(AB)<0GD6649L-K>9'DA11B2?A@@9LL>96H900 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:113 525 0 somegenome 3531 37 58M1I29M * 0 0 AGGCGCGGCAGGCGGTCGCGGAAATCGGCGCGGTAGCGAGCGGTATCTCCGGCTCCGGCCCCGACCTTGTTCGCTCTGTGTGACAAGC 0K>*K?65**&=<-A.3NB6>K&FE2.>8J&865,D22I??L/;A@(.LJ&<0C9<7**M,4/A4,@I>CH;BFM/94+K':.C:BH< XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:87 528 16 somegenome 3542 37 79M1I8M * 0 0 GCGGTCGCGGAAATCGGCGCGGTAGCGAGCGGTATCTCCGGCTCCGGCCCGACCTTGTTCGCTCTGTGTGACAAGCCGGAAAACCGCC 7MC2D>813(>F=)@HK'3J'?J&<=NH7>N=9*+MJC/?>'I?<;,7K4D5&E@;5/G(6IG0 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:87 532 16 somegenome 3547 37 102M1D6M * 0 0 CGCGGAAATCGGCGCGGTAGCGAGCGGTATCTCCGGCTCCGGCCCGACCTTGTTCGCTCTGTGTGACAAGCCGGAAACCGCCCAGCGCGTTGCCGACTGGTTGGTAAG A56:9(<-,@6@N7'NI'C>H7MGK7/38)BD(?EH9L&6>.K XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:102^G6 530 0 somegenome 3575 37 14M1I32M1D29M * 0 0 ATCTCCGGCTCCGGCCCCGACCTTGTTCGCTCTGTGTGACAAGCCGGAACCGCCCAGCGCGTTGCCGACTGGTTGG 0.'N3.159A)IM3,ED<'.JNJ(47087<4.23M+&@,':.&0G4-F&FKE026G* XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:46^A29 537 16 somegenome 3575 37 108M * 0 0 ATCTCCGGCTCCGGCCCGACCTTGTTCGCTCTGTGTGACAAGCCGGAAAACCGCCAGCGCGTTGCCGACTGGTTGGGTAAGAACTACCTGCAAAATCAGGAAGGTTGT &L,3::B6;?BKFG0IAA,-;,?FK@@ME'9',6)<=K,=(-1F572-J7)08*17@HH=&->9-FJ*+=17@/L&+<&+B9B,=LE=C;4=G32:G+3:7NG?L000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:4 XO:i:0 XG:i:0 MD:Z:49C1G0C53T1 531 0 somegenome 3579 37 10M1D31M1D29M * 0 0 CCGGCTCCGGCCGACCTTGTTCGCTCTGTGTGACAAGCCGGAACCGCCCAGCGCGTTGCCGACTGGTTGG *(=1BNE1;7JJ-+:GH:)G,K>1>GC1,DA:BD(DE(/A:MN.:IL/?7AA)//?MI@E>K7NNJD;2: XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:10^C31^A29 534 16 somegenome 3604 37 62M2D8M * 0 0 TCTGTGTGACAAGCCGGAAACCGCCCAGCGCGTTGCCGACTGGTTGGGTAAGAACTACCTGCAATCAGGA 9A&GMJ:*G=0)7L*:'+5:B'A)@>>&;F-KC'':*8AB@A*&)J0'(131+BC.L:(,:?-;*HI)&0 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:62^AA8 543 16 somegenome 3614 37 7M2I6M1D51M1I48M * 0 0 AAGCCGGAAAAACCGCCAGCGCGTTGCCGACTGGTTGGGTAAGAACTACCTGCAAAATCAGGAAGGTTTTTGTTCATATTTGCCGGCTGGATACGGCGGGCGCACGAGTACTGGA G*>B340A27K950C5=07B2/B9(*810(N'IL@2KA>&(+D8I34'>9>+EG72:;&N:+J@44)-+7B<;223K39-FN81;JG)<51L-KC/*@L3(?I6MB/?(G00000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:3 XO:i:2 XG:i:2 MD:Z:13^C99 545 0 somegenome 3687 37 22M1D54M * 0 0 ATATTTGCCGGCTGGATACGGCGGCGCACGAGTACTGGAAAACTAAATGAAACTCTACAATCTGAAAGATCACAAC 0>8*0H9K1@?,?'*LH>BC'8'D7(00000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:76 551 16 somegenome 3702 37 94M2D5M * 0 0 ATACGGCGGGCGCACGAGTACTGGAAAACTAAATGAAACTCTACAATCTGAAAGATCACAACGAGCAGGTCAGCTTTGCGCAAGCCGTAACCCAGGTTG 4I?&LCNDJ18+I=3I<@L&B298>H&3===H<(>AL85MDICI4+D@'C=L-3G*?GF<;)GDL*LCNG7&70=K29G,.4;+NJ&;.C4*N(C-300 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:94^GG5 561 16 somegenome 3804 37 17M2I64M * 0 0 AAAAAAATCAGGGGCTGTTTTTTTTCCGCACGACCTGCCGGAATTCAGCCTGACTGAAATTGATGAGATGCTGAAGCTGGATT I<++4&1IL,(@@BJJ0L2H7:'8KAAA7,H*,(N9G;B80000000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:112 562 0 somegenome 3822 37 36M1D26M * 0 0 TGTTTCCGCACGACCTGCCGGAATTCAGCCTGACTGAATTGATGAGATGCTGAAGCTGGATT 0)IE2E:M+LJ93)-<3>*D&G6JCH*;HK7?K4J-,?2DKE46C/492'B&,D0LA..;70 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:1 XO:i:1 XG:i:1 MD:Z:1T34^A26 572 16 somegenome 3845 37 38M1D7M1I39M * 0 0 TTCAGCCTGACTGAAATTGATGAGATGCTGAAGCTGGATTTGTCACCCCGCAGTGCGAAGATCCTCTCGGCGTTTATTGGTGATG @:J+):/9=-6I//-6--5&I69(CL--C'H'+L)@J=0/@*M?8A1C264>MC(IG/++0NB6-@'G+&+LLNFDC(+.,)A00 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:38^T46 574 0 somegenome 3860 37 23M1D33M3I22M * 0 0 ATTGATGAGATGCTGAAGCTGGATTTGTCACCCGCAGTGCGAAGATCCTCTCGGCGTTTTTTATTGGTGATGAAATCCCAC 000244B-G>.J)66J572:'J?M0CFKH6*KNG0=G@J1>CL?+N<+(MK(:<7=,0H:)4G43B;'8@05>FKF2/('B XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:23^T55 580 16 somegenome 3880 37 11M1I39M3I4M1D43M * 0 0 GGATTTTGTCACCCCGCAGTGCGAAGATCCTCTCGGCGTTTATTGGTGATGAAAAAATCCACAGGAAATCCTGGAAGAGCGCGTGCGCGCGGCGTTTGCCT *N14;A:3;0J;)'+H5(?F2.*?HB3N0*,M9F3=@L3LI;0+G?EH*H'D==&86*1>KEA430+6?&'&H.JKKE&/G16(E&<&JDL1M1FB000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:45^C36 586 16 somegenome 3936 37 6M1D59M1I14M * 0 0 CACAGGAATCCTGGAAGAGCGCGTGCGCGCGGCGTTTGCCTTCCCGGCTCCGGTCGCCAATGTTGAAAAGCGATGTCGGT 2KF,A32DD&=3:MD&H,;/E/=2<6)76C<4D'I0NK6F917B='JIII15M0:F>N(CB<(<@/B.K2(54KAH/000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:6^A73 585 16 somegenome 3939 37 32M1D32M * 0 0 AGGAAATCCTGGAAGAGCGCGTGCGCGCGGCGTTGCCTTCCCGGCTCCGGTCGCCAATGTTGAA ;4DCM5LHM;-2>G?0;)(5;J970N'42M-,&I--/AJ+NF;=N>B8(L1D6))BK)E0DI'@147JAHE3.2)J(3K&M&61K+::+.+(+A)N&3DC<4;,+=+4C))=K8=A'3.I XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:74 595 16 somegenome 3981 37 76M1I8M * 0 0 CGGCTCCGGTCGCCAATGTTGAAAGCGATGTCGGTTGTCTGGAATTGTTCCACGGGCCAACGCTGGCATTTAAAGATTTTCGGCG ,8=?3:67K6+,'JJKA9:ANH7*MJI'E=D9:(;AHI-*K*<>@1<;.7A9I.2@AC8;08DEM3@>5DN'C;E9;447&(HHA)-NKK:(NN=*)B192<=G.-)(4=-H<=60&+GF+;6-F+E.)9;0000 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:94 599 16 somegenome 4013 37 44M1D22M2I9M * 0 0 GGTTGTCTGGAATTGTTCCACGGGCCAACGCTGGCATTTAAAGATTCGGCGGTCGCTTTATGGCACAAAAATGCTGA L+8<,C-;8:(E/-J300G*2MN:07;9B6>/=A&NI==)?;L()6:5.@0INFBEK'0EGJ3@&GIJ*C::DH000 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:44^T31 600 0 somegenome 4026 37 8M1I59M * 0 0 TGTTCCACGGGGCCAACGCTGGCATTTAAAGATTTCGGCGGTCGCTTTATGGCACAAATGCTGACCCA 00&?G/KFED9-H69=3'1.5>9+HCF*D.@.3H'EB2C27A&F95&2(LC7G&>1+/B?AG3EK5:<<9K>)AK.4(N4N00-AE8N=ADAN:,@8:CHNMK1HM1-+9;9B:)I8M'>6NF>/>76D*;)EF?0?L.402 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:2 XO:i:2 XG:i:2 MD:Z:0C0G65^T21^A7 620 16 somegenome 4100 37 79M * 0 0 GGTGATAAGCCAGTGACCATTCTGACCGCGACCTCCGGTGATACCGGAGCGGCAGTGGCTCATGCTTTCTACGGTTTTT 9>E*05.0-8HC3*>G=7*C@.+8;-/92+&3=I&C>1J9:I6'I0;2B=*90?BL>2C&?N@C2<)'=5?CE<,G(00 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:77A0C0 622 0 somegenome 4100 37 74M1I9M * 0 0 GGTGATAAGCCAGTGACCATTCTGACCGCGACCTCCGGTGATACCGGAGCGGCAGTGGCTCATGCTTTCTACGGTTTTACCGAA 000D6N=+MLCA,8C6*@C<)G6C10A+/><7H*?@-:NFD;79HCC@G7DC=J=*==C=<&5-1&D?@421B7D+-:.L(9<--+LHHJ.;JF)N2DA0JA(':+700 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:66 625 0 somegenome 4106 37 59M1D8M1D20M * 0 0 AAGCCAGTGACCATTCTGACCGCGACCTCCGGTGATACCGGAGCGGCAGTGGCTCATGCTTCTACGGTTACCGAATGTGAAAGTGGT 0000J/K97G4=;HD*N@J5:D77C13@&A'8/*:<;.D?1)>IC5)A)>?7@BB.3GHD3G9:IL=D8536CE0D/(1 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:59^T8^T20 621 0 somegenome 4111 37 66M * 0 0 AGTGACCATTCTGACCGCGACCTCCGGTGATACCGGAGCGGCAGTGGCTCATGCTTTCTACGGTTA F585):=+&LK(2&B'&7*&>&+LG<4B(?064L9H9@?NC64-?8AJ/* XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:65T0 627 0 somegenome 4122 23 100M * 0 0 TGACCGCGACCTCCGGTGATACCGGAGCGGCAGTGGCTCATGCTTTCTACGGTTTACCGAATGTGAAAGTGGTTATCCTCTATCCACGAGGCAAAAAATC 0008:L07J+//;KAM&7N1(3D(&9+HA5'7L6E/.6G4)?L8//,-5L7N8'7N*KA>7)8EL?C';E7H07./:8863EA>0*G8):@F4',KF5&A1269-JBH<9=MI50?-'@5=L)/?CB-,99=0E1000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:84^A20 632 16 somegenome 4160 37 54M2I19M2D18M * 0 0 CATGCTTTCTACGGTTTACCGAATGTGAAAGTGGTTATCCTCTATCCACGAGGCAAAAAATCAGTCCACTGCAAGAAACTGTTCTGTACATTG ..2+'2FL6.15;E*6M)'<3'J,AMHBMB';@,KD*E*@FD(+DCE78*=?D4,*86588AM6M51 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:5^T77^G7 639 0 somegenome 4214 37 76M * 0 0 GCAATCAGTCCACTGCAAGAAAAACTGTTCTGTACATTGGGCGGCAATATCGAAACTGTTGCCATCGACGGCGATT 7NF3C,);'(8+*8>N<)?'4=MDMN XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:0A0A74 642 0 somegenome 4223 37 29M1I47M * 0 0 CCACTGCAAGAAAAACTGTTCTGTACATTGGGGCGGCAATATCGAAACTGTTGCCATCGACGGCGATTTCGATGCCT 00;H=)->D-F(IN5J-6N)-+@*25KB8M>3/(.,;6(>E+A/)/N9)'*L0ED&*4B0/C8(&)-42DJ+@;ALM XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:76 647 16 somegenome 4223 37 10M1D54M4I32M * 0 0 CCACTGCAAGAAAACTGTTCTGTACATTGGGCGGCAATATCGAAACTGTTGCCATCGACGGCGATTTTTTTCGATGCCTGTCAGGCGCTGGTGAAGCAGG 94CB>;M'6H/()>8HAH<2)//AM/&ECG:.>?.+GI8'?E?+G4+I<6==3::HA2>JA7I2G.'=;(-&/1J3I7;E++MLD1F7(*3/='<00000 XT:A:U NM:i:5 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:5 MD:Z:10^A86 646 0 somegenome 4229 37 37M1D50M * 0 0 AAAAAAAAACTGTTCTGTACATTGGGCGGCAATATCGAACTGTTGCCATCGACGGCGATTTCGATGCCTGTCAGGCGCTGGTGAAGC 0000ILN23K'II,EG586K*>9NJ00GM:@2B(10=4:6,MI/N&>/L)H?,1EG?C5/E,M70>:.GB,3N0DA18F8J2??.)9&N>=(D7'LC(A000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:74^T8 663 0 somegenome 4341 37 11M1D94M * 0 0 AAGTGGCGCTAGGTTAAACTCGGCTAACTCGATTAACATCAGCCGTTTGCTGGCGCAGATTTGCTACTACTTTGAAGCTGTTGCGCAGCTGCCGCAGGAGACGCG 0;<1B1+?@M,KBA+?5C1(9.JL?JB2M=55N,)).?&@'BB9&)JB<*.;@:1FFCIJ-HE6?=:MC3<.&70,H0(H56N@/B4GH XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:78 667 0 somegenome 4420 37 69M1D27M * 0 0 TGTTGCGCAGCTGCCGCAGGAGACGCGCAACCAGCTGGTTGTCTCGGTGCCAAGCGGAAACTTCGGCGATTGACGGCGGGTCTGCTGGCGAAGTCA FK,F8EL@4(F2M91>NE->B/A/I=CD777+'4D'(,4FME;J=''64:D23>;K*J'H-H-9'.BMAI8/6I-I) XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:69^T27 668 0 somegenome 4444 37 45M1D8M1I21M * 0 0 GCGCAACCAGCTGGTTGTCTCGGTGCCAAGCGGAAACTTCGGCGATTGACGGCGGGGTCTGCTGGCGAAGTCACT 00.31N9/)B1012LB:K6:K+C@<6LI,?FJ3J+3:(65(9EMC>35A.-02..MB-/G?48:M:8L*0B-F+( XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:45^T29 671 0 somegenome 4463 37 26M1D8M3I57M * 0 0 TCGGTGCCAAGCGGAAACTTCGGCGATTGACGGCGGGGGGTCTGCTGGCGAAGTCACTCGGTCTGCCGGTGAAACGTTTTATTGCTGCGACCAA 000<.N:FN*7E<9(C;0JAE>(I2D=*J9?KMG&MM93F-?7-&(GH,JF71=,=6IE&;'B-DBCCDADL:K1CLAD>&+IAI&D'2=B@'/ XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:26^T65 673 16 somegenome 4495 37 106M2I6M * 0 0 GGCGGGTCTGCTGGCGAAGTCACTCGGTCTGCCGGTGAAACGTTTTATTGCTGCGACCAACGTGAACGATACCGTGCCACGTTTCCTGCACGACGGTCAGTGGTCACCCCCAAA 'DC:LJ89&>KCL4(2G3I@E>C-L(FNJ)GB@I7EFFFELD176K72FNCF3&CA@JD&;-+<55'&&/@661=:))-6*+(6D000000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:112 674 16 somegenome 4536 37 68M1D9M * 0 0 CGTTTATTGCTGCGACCAACGTGAACGATACCGTGCCACGTTTCCTGCACGACGGTCAGTGGTCACCCAAGCGACTC KJ-&(A1=)KC48(*F.EM'(JJ@;/FILDDE+@B3:ED(-0EG=4<0<8&'=-AJ-BG)*F>4&(B=AC9@C:B00 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:2 XO:i:1 XG:i:1 MD:Z:0G0T66^A9 679 16 somegenome 4555 37 48M1I38M * 0 0 CGTGAACGATACCGTGCCACGTTTCCTGCACGACGGTCAGTGGTCACCAAAAAGCGACTCAGGCGACGTTATCCAACGCGATGGACG 2MNF*@I39K*776@631-059/IBC'&-J'4?EA:G:=)*:M3KC<0GI=771B00 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:1 XO:i:1 XG:i:1 MD:Z:48C37 682 16 somegenome 4559 37 17M2I28M2I54M * 0 0 AACGATACCGTGCCACGTTTTTCCTGCACGACGGTCAGTGGTCACCCCAAAAGCGACTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAACAAC 97584I:H.0,J/.IL'F3L=''2F=0>/:&9I0:IB+M4.+3*:G4+3A0&0000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:4 MD:Z:99 684 16 somegenome 4561 37 42M2D63M * 0 0 CGATACCGTGCCACGTTTCCTGCACGACGGTCAGTGGTCACCAAGCGACTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCGCGTG BEMED1K-&9E?J&C;CEB@&,67?3>4*8M,*C-.9;(68GH>;-B-IDN8MA;'1G@3'L:/IJ1DK7J:H'L;7310KB1>?5JK?GH2N>:1?GK)8-700 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:42^CA63 686 16 somegenome 4562 37 42M2I66M * 0 0 GATACCGTGCCACGTTTCCTGCACGACGGTCAGTGGTCACCCAAAAAGCGACTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCGCGTGTG ?L.?EK-GA.>17@?-.6M7?M:695EG)AC@38>HAANAA?.MM0+:8B9'&+=::5E65J*@))G@IN+LG4BJ9->:GI23=:@&+&,+9L..D*C6;C4IB,0000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:108 687 0 somegenome 4562 37 14M1D24M1I72M * 0 0 GATACCGTGCCACGTTCCTGCACGACGGTCAGTGGTCACCCCAAAGCGACTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCGCGTGTGGAA 0G=IJDI'=DI/MI)762*8:(/DN9C,&3K*;'9@*37;KJ8;&(K+B/39<&NI=27(C>,M4M4.E+8-NJ;*;A4J=D>>4N0K3,(,(4>DMK9.D8?;(G.&?3C XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:14^T96 683 0 somegenome 4566 37 10M1D24M1D62M * 0 0 CCGTGCCACGTTCCTGCACGACGGTCAGTGGTCACCAAAGCGACTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCG *EG85/5G;+0N8N=)1L9E472N.ILF>/@G:H-<;:*GH5;F96B9)'*3E65-B7HGK3BH)98N'=I2FM/<)G4>EA7+@LI=*.6/30:: XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:10^T24^C62 680 16 somegenome 4568 37 8M1D27M1D48M * 0 0 GTGCCACGTTCCTGCACGACGGTCAGTGGTCACCCAAGCGACTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGA BHF(7-:@J:75+BL2+=;L6(-'>4?:2.&4H'F+>D753)>9**34MLF:/B*57;88MKHI+:IDCL=00 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:8^T27^A48 681 16 somegenome 4569 37 7M1I28M3I50M * 0 0 TGCCACGTTTTCCTGCACGACGGTCAGTGGTCACCCAAAAAAGCGACTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAA MK205.E9K0?15?E4*3*E;29D5D&'A+)3(KIG?M2;&:LL'E+.=E5E0=&JLL;0(N.(B0?1HBJ6>1*GE5C2N9D0 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:5^T91 678 16 somegenome 4572 37 4M1I27M2D34M * 0 0 CACGTTTTCCTGCACGACGGTCAGTGGTCACCAAGCGACTCAGGCGACGTTATCCAACGCGATGGA /'>2=:0(HJ+L,91C.:B*.27@-B,&)I5/8,/AD-N20(+7D.;'I0:1:3FA'.,-?(*-?0 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:31^CA34 692 0 somegenome 4608 37 95M1I7M * 0 0 CGACTCAGGCGACGTAATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCGCGTGTGGAAGAGTTGTTCCGCCGCAAAATCTGGCAACTGAAAAGAGC 0'J;-5?&*K5/A;0,>A>(/'<+/>4NB&/87'KD@+DC:H1?9;LHA@54LD6-K'I@*K5J+'KGF=*);9=)'GKG>@50J.7F2>-7',8@D?EH,3< XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:1 XO:i:1 XG:i:1 MD:Z:15T86 688 16 somegenome 4611 37 74M * 0 0 CTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCGCGTGTGGAAGAGTTGTTCCGC GDI/C)E4D64&1K00;NFEJ)3&F>B@2+''2:CI;G5=?-5,1B/C>'D+N(7-3N<&/A*A/HK&14.6M0 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:74 690 16 somegenome 4611 37 77M1D14M * 0 0 CTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCGCGTGTGGAAGAGTTGTTCCGCCGCAAATCTGGCAACTG /<@10()1?C,3EB.1*M(&.C6+&<-89K22EJ7G9++BE365L442@J-6E22A--F004J3ECNLL00 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:77^A14 689 16 somegenome 4617 37 71M2I13M * 0 0 CGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCGCGTGTGGAAGAGTTGTTCCGCCGCAAAAAATCTGGCAAC 2<@7@)M1BDA7J+HB<.6A(BE?3=6),K4-B',E.:((1D,G-4@-BB-9)A6<2+9KJ3IC47H/1@(16*300 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:84 693 16 somegenome 4630 37 58M1I15M1D10M * 0 0 CGCGATGGACGTGAGTCAGCCGAACAACTGGCCGCGTGTGGAAGAGTTGTTCCGCCGCAAAAATCTGGCAACTGAAGAGCTGGG */33J',FE:+00 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:73^A10 694 16 somegenome 4638 37 73M2I13M * 0 0 ACGTGAGTCAGCCGAACAACTGGCCGCGTGTGGAAGAGTTGTTCCGCCGCAAAATCTGGCAACTGAAAGAGCTGGGGGTTATGCAGCC M'&-H@.:M2IL581HMKFI3@EC@937KMN86=@MI>M,CFNN:5:/K8+-41./D1'79H?A?;7@=KCF@D49E?M'J+.00000 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:86 697 0 somegenome 4658 37 30M1D22M3I46M * 0 0 TGGCCGCGTGTGGAAGAGTTGTTCCGCCGCAAATCTGGCAACTGAAAGAGCTGGGGGGTTATGCAGCCGTGGATGATGAAACCACGCAACAGACAATGCGT 00000-6JGGB+15&(A58/41C7*&6.0L;8K2K5,,1501'+1-99:8JD,@3FM,/B03A+N3AN/42+H>-:C;L)75'>3JAAI.F=54IM85)7>B-&<(4IFD6G-7>?B@<(L'.-G(:+(3B+E<25J78HB'6DIL+M*K300 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:54^A19 700 16 somegenome 4682 37 52M2I35M4D1M * 0 0 CGCCGCAAAATCTGGCAACTGAAAGAGCTGGGTTATGCAGCCGTGGATGATGAAAAACCACGCAACAGACAATGCGTGAGTTAAAAAAAG D+.(.K?;-GCM+>&3MK<<9**:2-+@8);D::H0@>=.CLH'K+-4=NF,324182I@*18;H2DK7?/)<61FH6:=+394000000 XT:A:U NM:i:7 X0:i:1 X1:i:0 XM:i:2 XO:i:1 XG:i:2 MD:Z:84G2^CTGG1 705 0 somegenome 4691 37 71M2D7M1D21M * 0 0 ATCTGGCAACTGAAAGAGCTGGGTTATGCAGCCGTGGATGATGAAACCACGCAACAGACAATGCGTGAGTTAAGAACTGGCTACACTTCGGAGCCGCAC 0(50@?=7C&M+,6.2-LH7B>BD1NC?.I*3K4>NL<&A/6(M'(/5>8':I8C28.?=;H*4KH+:78A8?*9D':?0?A,2>J>L7<;D=0+7D.=24@JD8 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:2 MD:Z:112 710 16 somegenome 4731 37 31M2I9M1I63M * 0 0 ATGAAACCACGCAACAGACAATGCGTGAGTTAAAAAAGAACTGGGGCTACACTTCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCC >.&H;&H=G*-2;+-0@G1B'43:/5=G5F.=6M(G*/KG.-.H0JH)3)C?8?>3&9'ECE4@?'000 XT:A:U NM:i:3 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:3 MD:Z:103 711 16 somegenome 4741 37 30M4I67M * 0 0 GCAACAGACAATGCGTGAGTTAAAAGAACTGGGGGGGCTACACTTCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGC 'G?*)<3/5,BC>6L0.LN*),KG3<,H:1A9M,D1//&H-I52&+:*&<6805&A;B.-&91D*HL7@.I550D:F92?D7E.4,3*M)E*/K1>I0000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:4 MD:Z:97 713 0 somegenome 4749 37 13M1I90M * 0 0 CAATGCGTGAGTTAAAAAGAACTGGGCTACACTTCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAATATGGCTTGTT 002J6)C@&/BG=:JBM79GKAJ72')BGM+9-I1539J1A8NF''+.;DILL.&9E+KH4A+;E1M2L98+>+9,G&KB5D';,4>L7G26I&1 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:103 715 16 somegenome 4759 37 12M1D96M * 0 0 GTTAAAAGAACTGGCTACACTTCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAATATGGCTTGTTCCTCGGCACCGCGCAT ;F)J,9A2+5(JH/:H'IIE,FM6,;>D117:GEIM;J?:78*AN6B.LE1J,-D=;J>6N=F:@;76@;E00 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:12^G96 712 0 somegenome 4767 37 4M1D70M * 0 0 AACTGGCTACACTTCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAAT +MA=07EN--&4?.*@;1-@&)/(7-*L*E*33(@?M4NL@KHM(2&L7'5D6LJ4N<2DE37L9/L>;?3HJBD.DE/3/G'4HF;JH'=-: XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:0T0G107 714 0 somegenome 4774 37 88M * 0 0 CTACACTTCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAATATGGCTTGTTCCTCGGCACC ::L4G)+K/5@IHFB7D+?+&&'0=J0:G(/?29:CH@G>..M<01-HMD7-67/2CM'=(I)CG(1L(C2FFH0G98@1?E&7CE.85.995H721L;>IIB-18,I2)AH6 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:91 717 0 somegenome 4789 37 66M * 0 0 GCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAATATGGCTTGTTCCT L(8@/0-G)=M1M?I?/=;49D)4/L55;CB3,A:GD23//J,(&03IJ*7GD::?&:'(85=,J1710CA67*3E=M9J0@D0'.@>GD4'*-;.CAMH8:)J/E+;'+L.@J6.:H6HAN XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:107 724 0 somegenome 4802 37 72M1D19M * 0 0 GCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAATATGGCTTGTTCCTCGGCACCGCGCATCCGGCGAATTTAAAGAGAGCGTGGA 0G;DN&CI)B73D)(E)>DNM6(E.)'I>B;3)B-MKJ<.:*H,*0D@/'/)LE;*38>G&.(5F:F/KM4A.K+I:LF2L7 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:72^A19 728 0 somegenome 4847 37 27M2I34M1I32M * 0 0 TTGTTCCTCGGCACCGCGCATCCGGCGAAAAATTTAAAGAGAGCGTGGAAGCGATTCTCGGTGAAAACGTTGGATCTGCCAAAAGAGCTGGCAGAA 0000.9FBM*8*8B)58I;=.J?5A16.K@41)*-N=I>'@HC96+.AJ)NC?K*/CC60,1G1):(N&18.;M''7JHC0/&E(/394EN6-;N/F;;-1<.9,99&4HM(0?<:FA:H-*>3B5I*:J,:.G?13> XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:1 XO:i:2 XG:i:3 MD:Z:7T46^A30 729 16 somegenome 4873 37 35M1D15M2I17M * 0 0 GAAAATTAAAGAGAGCGTGGAAGCGATTCTCGGTGAACGTTGGATCTGCCAAAAAAGAGCTGGCAGAAC &1'(G+:9B>N2=:+'0'4@D6/0E)2;1*1,>2L6)F56)BNE=.30/K8K4@-GD9,LHN53<:000 XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:1 XO:i:2 XG:i:3 MD:Z:4T30^A32 731 0 somegenome 4912 37 12M1D34M2I19M * 0 0 GTTGGATCTGCCAAAGAGCTGGCAGAACGTGCTGATTTACCCTTGCTTTTTCACATAATCTGCCCGC 000000'?=CAH-MIGKA3(*-14IJ,:LH+9.5;M<4H:K/ME'@@CJC-;CAD6AD6 XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:0 XO:i:2 XG:i:2 MD:Z:29^T35 743 16 somegenome 4973 37 24M1D43M * 0 0 CCCGCCGATTTTGCTGCGTTGCGTAATTGATGATGAATCATCAGTAAAATCTATTCATTATCTCAAT BH@+JK*63:NB/NB>G76M?L7;JH,>754.4;L,,K;LMM98D''>+)'H@><:C'GG?ND0-00 XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:0 XO:i:1 XG:i:1 MD:Z:24^A43 747 0 somegenome 5021 37 26M1I8M2I43M * 0 0 AATCTATTCATTATCTCAATCAGGCCGGGGGTTGCTTTTTTATGCAGCCCGGCTTTTTTATGAAGAAATTATGGAGAAAA 00000<6:)LAM')E67&=4N'4,93JMFK&*55&7E-&&H?B+>@A,G/02:BG1I8DHALD.'&>+5'460LL(L7&; XT:A:U NM:i:4 X0:i:1 X1:i:0 XM:i:1 XO:i:2 XG:i:3 MD:Z:29T47 755 16 somegenome 5114 37 1S2M1D10M1D70M * 0 0 GAGAATTCTCAATAATGCGGTAACTTAGAGATTAGGATTGCGGAGAATAACAACCGCCGTTCTCATCGAGTAATCTCCGGATA ./4.HMD2)--NC,1,A'4N/4.N6*3HIL&.1IH4)06&=2'.D3M.7B5IG>D8=2@4)5>=+?=30'14,;9-E58BD2L XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:3 XO:i:1 XG:i:1 MD:Z:2^A10^A70 756 0 somegenome 5130 37 71M * 0 0 TGCGGTAACTTAGAGATTAGGATTGCGGAGAATAACAACCGCCGTTCTCATCGAGTAATCTCCGGATATCG 8=3GA+MK'C./E/*<)I968-J,&CH89I+)&>'/H>@:EH&5*/>D101>8L-I;F.?8K'CN3G&?.4 XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:71 759 16 somegenome 5159 37 51M1I10M1D7M * 0 0 GAATAACAACCGCCGTTCTCATCGAGTAATCTCCGGATATCGACCCATAACGGGGCAATGATAAAGGAG K?)EC,&D+I?BM.F&6<'&8/4,G<'=?DK(?8D4E6N-F;L)NDB7L5B4-CGC2K(EHB8G>0+N-N=C+E=:G=L.:G 368 4 * 0 0 * * 0 0 GTTAACGCCGAGGGTGATGTTGCCGCTTTTTTTATGGCGAATCTGTCACAACTCGACGATCTCTTTGCCGCGCGCGTGGCGAAGGCCCGTGATGAAGGAAAAGTTTTGCGCT 000G@&?2*MI;G+,H5'F,'(2>791F'@3,:K4&9=G85G/FM=9).(48@BK(857,1G??N7DJ&L>E+<(A5LGC7+);;8+>)7MD6>E2M.0&7H'@4< 377 4 * 0 0 * * 0 0 GCTATGTTGGCAATATTGATGAAGATGGCGTCTGCCGCGTGAAGATTGCCGAAGTGGATGGTAATGATCCGCTGTTCAAGTGAAT )NJ*+J&NKK@)A7A>J?@+C(4 379 4 * 0 0 * * 0 0 GATGAAGATGGCGTCTGCCGCGTGAAGATTGCCGAAGTGGATGGTAATGATCCGCTGTTCAAGTGAAATGGCGAAAACGCCCTGGCCTTCTATAG KL.)M0-BLBJ:+8HJ<8?G9&GH&6?ID>K1CA=8=/MDC14/==,9<) genometools-1.5.1/testdata/hop/map2.bam000066400000000000000000000051371211610345200177710ustar00rootroot00000000000000BCesreb``p *MMO>~V\.VI剜~`*@LPZf20UYBC ˋ,Wkfnu]3[=i܄␕s](.\L7 6/(DܺH6 .\ jV(hp'TOM&w)>|Ϸ=jPԝFq]hut|RS^at<1Z%zAy2lV%jN꛹VC'LAsZ.+ldJwbP-8ZBuxm& dv`m<-DQt`,ǪW\yE>ޣ r}bыw̿a8><a}ғG:mGMct}HJLYc6,`(:-/:RrT[|-+\ĥ>Nu-tRķ.!`iJ^n3wHibIԋS_~:-5;Z%υj6V =IbFEZ9e5^:RSQfiˋ3ΤWw;1 dVNN(#}f0f\/j=7DNUYȑ+3>_{iQyCмRB&rTx-N, 752,RQ`ʖlJ8L t~gNmN)?&d Pպ /j(~Ve2Pv㞜=ޛ~ޯOlϩz[ΫYz RyP M^آ d7Yp]ؾEAYܔ. v\.Hm%U3\J+nQgǔ8OvNMAQv޹F?aKKaXc)N1&Sf2þ\8B+MLb 9$J<Ӽ@+: ƭwyUm6,=&owT+H;~4]mCɯ+-0Qb þ\5^ ɽu&##@RrK:`ǛХi阴&c>pώ)zK굝[| [i9ޟBY7Ugd0 qjrm`f9 /aNfIۼp]\FrK_LT4lx%MMU s؞lƪTUM0>GPk_PN1hj>9FyE lax=VPèGl`JxFZ'nhutk%;1@ޔ^]W<zٱj9yĨx5<üv0]'* ژ!=pvtzjOf: 55-%A|G`TF2SQ1\nZ KzPU#Ȑؖ=G}fe:}xrH?윝79cox͆ptH>eV0C r_g( 4.*kK;WW ( jN_ptmeN~K-_wODaR{kG&9as$KT͈ :VvXh|P%MR@v^:a&:4Lw{|!9;=gd4cKFӓW ot 97 k4de, -W+pP7 م֥X.n+v3 )sR(>S[@;f$/d{8ޜFr5d%t>_fNf| 5D3;æEz"u74o%.DX,8IUvVm&3t ajےNEN2t~:jgۛ9xX| 7sƤyb:Gre>51fzrUKZUj>` vE/>TM]$aN2>Ca3ǿq9gcBF'ð1KvTjX }ۇE,t VxiKHM" GRK T-[rs9ɷzXСOgh"Gwb.>ƓfT)CA 0MT3 Nich[c0ktlR\Xd^4(HΩNBCgenometools-1.5.1/testdata/hop/other10reads.fastq000066400000000000000000000030741211610345200220100ustar00rootroot00000000000000@728 TTGTTCCTCGGCACCGCGCATCCGGCGAAAAATTTAAAGAGAGCGTGGAAGCGATTCTCGGTGAAAACGTTGGATCTGCCAAAAGAGCTGGCAGAA + 0000.9FBM*8*8B)58I;=.J?5A16.K@41)*-N=I>'@HC96+.AJ)NC?K*/CC60,1G1):(N&18.;M''7JHC0/,1*1;2)E0/6D@4'0'+:=2N>B9:+G('1& @730 GGCGAAAATTAAAGAGAGCGTGGAAGCGATTCTCGGTGAAACGTTGGATCTGCCAAAGAGCTGGCAGAACGTGCTGATTTTTACCC + 000&K+@L:AK+G8<&5(:44(J:')L-8>&E(/394EN6-;N/F;;-1<.9,99&4HM(0?<:FA:H-*>3B5I*:J,:.G?13> @731 GTTGGATCTGCCAAAGAGCTGGCAGAACGTGCTGATTTACCCTTGCTTTTTCACATAATCTGCCCGC + 000000'?=CAH-MIGKA3(*-14IJ,:LH+9.5;M<4H:K/ME'@@CJC-;CAD6AD6 @743 ATTGAGATAATGAATAGATTTTACTGATGATTCATCATCAATTACGCAACGCAGCAAAATCGGCGGG + 00-0DN?GG'C:<>@H')+>''D89MML;K,,L;4.457>,HJ;7L?M67G>BN/BN:36*KJ+@HB @747 AATCTATTCATTATCTCAATCAGGCCGGGGGTTGCTTTTTTATGCAGCCCGGCTTTTTTATGAAGAAATTATGGAGAAAA + 00000<6:)LAM')E67&=4N'4,93JMFK&*55&7E-&&H?B+>@A,G/02:BG1I8DHALD.'&>+5'460LL(L7&; @755 TATCCGGAGATTACTCGATGAGAACGGCGGTTGTTATTCTCCGCAATCCTAATCTCTAAGTTACCGCATTATTGAGAATTCTC + L2DB85E-9;,41'03=?+=>5)4@2=8D>GI5B7.M3D.'2=&60)4HI1.&LIH3*6N.4/N4'A,1,CN--)2DMH.4/. @756 TGCGGTAACTTAGAGATTAGGATTGCGGAGAATAACAACCGCCGTTCTCATCGAGTAATCTCCGGATATCG + 8=3GA+MK'C./E/*<)I968-J,&CH89I+)&>'/H>@:EH&5*/>D101>8L-I;F.?8K'CN3G&?.4 @759 CTCCTTTATCATTGCCCCGTTATGGGTCGATATCCGGAGATTACTCGATGAGAACGGCGGTTGTTATTC + 05+KB?/I5'E94)@14CE=C)@)/.J*7J9F/@J9,*L:C++/52758*AN-.K*'L6*+4E9K4+B3G>2DL<:IJ8/=A97I><,&)G03L3,A:N>MBI8.K6@G&@:3J @131 GATCACATGGTGCTGATGGCAGGTTTCACCGCCGGTAATGAAAAAAAGGCGAACTGGTGGTGCTTGGACGCA + 00H-<.K+1+3,F)D'N;M@:47GH)E80M @133 TATTGCGGCAAGCCGCATTCCGGCTGATCACATGGTGCTGATGGCAGGTTTTTCACCGCCGGTAATGAAAAAAAAGGCGAACTGGTGGTGCTTGGACGCAACGGTTC + 00000I708'.@;.'=*J<*-BJCI2+-:0*5-3I&>&*4BEH4J+=79L4KN69+F9G.(3>:)=61+5LM3( @137 GGCAGCCAGCACCGCAGCAGAGTAGTCGGAACCGTTGCGTCCAAGCACCACCAGTTCGCCTTCATTACCGGCGGTGAAACCTGCCATCA + I?7H+0F&510-4(<8C>);:E'C,4AHKAD*AD>GN3,*;A(9<=8:IM):ADKE@/'HE28+/?LG(D0*6?62(I>FE1H026N(8EE0=GH9?>FMA6LEJE,E:5<875=;4MG1>1=LFC?FF.EN/B'EBJ&+)3EE3*6BC7?M9::26;-HN?F5/D+I9;22D3NEJ'6'>,N,D,BKN:6784B>;IAB':;@-/6N:B,=J0+FG30)C6'CL.<'+K<: @142 GTCCAAATCTCGCAACAATCGGCGCGTAAACAGGCAGCCAGCACCGCAGCAGAGTAGTCGGAACCGTTGCGTCCAAGCA + 00L=)H.405GF+=C-:A2<)>/>E>D4BE&+B:AK27>09 @143 ACGTCCGTCCAATCTCGCAACAATCGGCGCGTAAAAAACAGGCAGCCAGCACCGCAGCAGAGTAGTCGGAACCG + 0009F7HI90:/GN2B&M59,*AM(0&60N&37>)F?3L=7EF7NMJ?N8N-.?2*0,<)0D2<&)8BJ*?LCL @144 CGTCAACGTCCGTCCAAATCTCGCAACAATCGGCGCGTAAAACAGGCAGCCAGCACCGCAGCAGAGTAGTCGGAACCGTTGCGTCCAAGCACCACCA + 000&C*&5GMB4=5F'LHH@)9=3J9G+3L(+FEJEC)>2:D(I/N', @145 CGAACTGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTACGCGCCGATTGTTGCGAGATTTGGACGGACGTTGACGGGGGGT + 0000IDD:);6.2JB:/3LKL3E7-2)'+3&.5J2(:6*;J4(D@C*>;NA;?;(AA7@*K2J:1IHG&;F(7,.:'F;MK&2E.B=3-*(G-C9B:818I2J=@- @146 TAGACCCGTCAACGTCCGTCCAAATCTCGCAACAATCGGCGCGTAAACAGGCAGCCAGCACCGCAGCAGAGTAGTCGGAACCGTTGCGTCCAAGCACCACCAGTTCGCCTTTTTT + 00000-E)/08HCK.;>I;?)*AN.5KCL/IHJB-3(83M;E4,I6ML65'JH/K5.7>8;B0'D @149 CGCAGGTATAGACCCCCCGTCAACGTCCGTCCAATCTCGCAACAATCGGCGCGTAAACAGGCAGCCAGCACCGCAGCAGAGTAGTCGGAACCGTTGCGTCCAAGCA + 0000+899@+,1>9HCGG2-M19*FE85BI:)5=53E4>)02&*'B@B'JB>BL/2+;,+'.5C,8;AHA+)2L?9*C4(;ABAA1@-6(/)61F2)2)DDD:5F,NGHB @151 AACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTTACGCGCCGATTGTTGCGAGATTTTTGGACGGACGTTGACGGTCTATACCTGCGACCCGCGTCAGGTGCCG + 000).K7JA0F29G5(;H:,?3N:A9NI&F8)>15L1<@5A7?JJ5.HBA1NB58='3BA(@:H>&DE&+0>)A*.<,'(H&GG0/2L8(8<8'NN6F.:2+40*?/-3FN @152 GCGGTGCTGGCTGCCTGTTTTTACGCGCCGATTGTTGCGAGATTGGACGGACGTTGACGGGGTCTATACCTGCGACCCGCGTCAGGTGCCCGA + 00/C+K;>474J:N,K0ECE;DLMC++HE-*N7M+.DHH-=8ABJK8-C&-+-8)B@.34DN/:1@8J;,)-.225E:BMN @160 CATCGCTTCCTGGTAGGACATCGACTTCAACAACCTCGCATCGGGGGGCACCTGACGCGGTCGCAGGTATAGACCCCGTCAACGTCCGTCCAAATCTC + 00000(75E,/5><-379KCL7D@3?JJB&)+G1K.HLK48?>9>F1AG/5D:);'E:M6EBIH>E70?:IN'D@-,GJ/N00FEC;/()=>@AI=D* @162 TGGACGGACGTTGACGGGTCTATACCTGCGACCCGCGTCAGGTGCCCCCCCGATGCGAGGTTGTTGAAGTCGATGTCCTACCAGGAAGCGATGGAGCTT + 00000/60K<.C;/E7N:NG?&FDHD/J6?J25.*0:<4*/@N./JM'=:N:I)19I,):'79N/>F?GA.898KJ>H:/6'?BIM31,M9HC@BHCC?C.NNG9', @166 TTGACGGTCTATACCTGCGACCCGCGTCAGGTGCCCGATGCGAGGTTGTTGAAGTCGATGTCCTACCAGGAAGCGATGGAGCTTTTCCTACTTCGG + 0H(1;C61L'+F>1>(.83L>99474AE<2MC4./'J6;JL<7J.D?/=,//)I<,.;I(41'@AC&,<27H2:87G<&5NM)432&K372?MM97 @168 GCCCGATGCGAGGTTGTTGAAGTCGATGTCCTACCAGGAAGCGATGGAGCTTTCCTACTTCGGCGCTAAGTTCT + 0;&6GM3<,86-2CL-2GH&(,KL>-9MFIG887I;F5@LL/FKH+&:17CB+9NF9,8/L9@<**E,6M355/5KH+E4;KGH-I?@6(70AE;F.,D4F@GJ>-+4BEL&=J**1-:+@.3C&>DE;C&I/>85J)A';,L5:?A/I3<8F*.DJNC9C:-E @172 TCTGGAACTGGGCGATGGGTAATGGTGCGGGGGGGGTGAAGAACTTTAGCGCCGAAGTAGGAAAGCTCCATCGCTTCCTGGTAGGACATCGACTTCAACAACCTCGCA + 0001??5DC7).//M7M5/12?N>79-/K))-5?0M(73HMFF:FI(/*=K:,='G+A7B6'4DILK0-DK@+>HI>A>N/0>GIEJD(3=6761:'>2B/@8/E @177 AGCGTACCTGGTGCTTGAGGATTCCGGTATTTTTAATCAGGCAAGGGGGATCTGGAACTGGGCGATGG + 000=7722(3?,M'..)E':EGC(N'@K4/&>6&'C)1-/9477G'@.?9-;+:D(E94,=N?H, @184 TCCAGATCCCTTGCCTGATTAAAATACCGGAAATCCTCAAGCACCAGGTACGCTCATTGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGGCATTCCA + 000**925<9L,(MEJ9'B7H>A;&:;-6&CM*74F)GGI/&5<3CE0+>4-5H,D7JF.-F(07>3??D8=HL? @185 CACCAGGTACGCTCATTGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGGCATTTCCAATCTGA + 0005,B6(1MJ*9;+LB<=FIEKFG1E+@5BE-947?C2A8'H6<7G&8N2+14-90&A;7=?E*>FF'M @188 CTCATTGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGCATTCCAATCTGAATAACATGGCAAT + JIF22>.NJ0/45N.BB1*A&.M+,)E)2;:<.HA:1>1A52JMM80;I*E8@&AB1I:CJ @189 GAACATTGCCATGTTATTCAGATTGGAATGCCCTTGACCGGTAATTCGTCTTCATCACGGCTGGCACCAATGAGCGTACCT + B1>7904BE&HG/K/3K9(9B.=J=G/G<47-5*-9CFIA?((F5IJ:0CKLF8D?3FC759F.A(6=2618(7;EG2,/.LN=C)A97(2*K)E((*,G5D?*C-N4??DME&I6KL9M/1@6J?M9FF(&D6/0(5FJ4K,;F0=M4A;=?1AN*:+N3+*J=?B1;)6&4:K9(,11IN7G-N1H35>GBBF0*3*'7'D> @192 CCTTCATCCCCGGACCAGAAACGCTGAACATTGCCATGTTATTCAGATTGGAAATGCCCTTGACCGGTAATTCGTCTTCATCACGGCTGGCA + 0E=;)>.K6)E;DEJI'(JF2@C1.=A+112CJCL&G?48>08LA(:0EK)JN0:A);@J;5(M&5GF37HDDHMF @195 TGGTGCCAGCCGTGATGAAGACGAATTACCGGTCAAGGGCATTTTTTCCAATCTGAATAACATGGCAATGTTCAGCGTTTCTGGTCCGGGGATGAAAGGGGATGGTCGGCATGGC + 00000)72BLGB>;:(/)&>@((?&39-N5F5>DL@H<>4C6J3N5KM76GN41/4D7)NM;@N+,E)8,H7*I?* @201 ATGTTCAGCGTTTCTGGTCCGGGATGAAAGGGATGGTCGGCATGGCGGCGCGCGTCTTTTGCAGC + 0000:*NEE?65I4H;1+A/;1*-H:=55FK.=,2&@1NH0N@D>IC/6 @205 GGATGGTCGGCATGGCGGCGCGCGTCTTGCAGCGATGTCACGCGCCGTATTTCCGTGGTGCTGATTACGC + ?-E>9B;BJ7/51BA?:N0>+(:-?42:;N;7:-;@8IA.90.* @207 AGATGATTGCGTAATCAGCACCACGGAATACGGCGCGTGACATCGCTGCAAAGACGCGCGCCGCCATGCCGACCATCCCTTTCATCCCCCC + 00=2G+8I>9(MFL8+20KIH6,7<*=6JH76+MMB8;1+JDI''2:JB9=:F65<370I24K0A+LI @210 GTCGGCATGGCGGCGCGCGTCTTGCAGCGATGTCACGCGCCCGTATTTCCGTGGTGCTGATTACGCAATCATCTTCCGAATACAGCATCAGT + 00K9EH2066:6B;;84DN9KB9'9K2L?LH-'&FE.,&GMH0'';.(ML21:B<)2,F7F:@3;35->+NHMIC=7HK*I*1,55A3:1CN6,F?;'5*=?(-))=-=A179M9C)M@@8B/=GD*J*5H&>9=L>;/0HB1)3GJ=)C:M&5DFAF;;8I2.0/-48*1:+@FK @214 GCGCCGTATTTTCCGTGGTGCTGATTACGCAATCATCTTCCGAATACAGCATCAGTTTCTGCGTTCCACAAAGCGACTGTGTGCGAGCTGAACGGGCAA + 00*C)6CJ1KC(B@537DNHD=:'7I=7-62>0KB@9'HH/,;KNC;LA6@,,DI+9&+1L.934D?&B:*IMMB:73KKE=9L>3275,1-B;)MA8* @216 GTGCTGATTACGCAATCATCTTCCGAATACAGCATCAGTTTTTTTTCTGCGTTCCACAAAGCGACTGTGTGCGAGCTGAACGGGCAATGCAGGAAGAGTTCTACCT + 00000@K9(,DHFC0'+8(NC4F50H000D165&F/2M3GE9=6:3?*A38?<>/:=A89(G0+-9L,'.'AHHAE((IE'9/?,')9E.253@3:EGG3J'--J, @218 AGCATCAGTTTCTGCGTTCCACAAAGCGACTGTGTGCGAGCTGAACGGCAATGCAGGAAGAGTTCTACCTGGAA + 9(D-C320J22CKGGM;:48BA@A6?A4BKD-;5(3,J1CI87KA6>/?)&NG44;3A-1@2)*D:(9*2-09F @219 CTCCAGTAAGCCTTCTTCAGTTCCAGGTAGAACTCTTCCTGCATTGCCGTTCAGCTCGCACACAGTCGCTTTGTGGAACGCAGAAACTGATGCTGTATTCGGAAGATGATTG + 00>2B93(B?'7A,?A?AMBJ;'&&.('?C,2;)2G4&CH82+166BL>08JJHK30E*?69@-L51>K4,=-6'N(D7.-KI4E;,)+CA6G77J7@849 @221 GCCGTTCCGTCACTGCCAGCGGCTCCAGTAAGCCTTCTTTTTCAGTTCCAGGTAGAACTCTTCCTGCA + 00+(45D(>E;K+F=DH('H/D/';L&AF9F?*:J9A(0AJ35>G161--4'KIDE5,1C@??2(BD< @223 TGGCCAGCCGTTCCGTCACTGCCAGCGGCTCCAGTAAGCCTTCTTCAGTTCCAGGTAGAACTCTTCCTGCATTGCCCGTTCAGCTCGCACACAGTCGCTTTGTGGAACGCA + 00.IN9DJ'D;214><*69F3808DB(>GB+NEC4G7N19@=;E>?3J0,@>NA55I+52>129J,GK)J4+G39'36NJJF9?8C?9:4'M0=6+E?5359,=G;K6,)F @224 ATAATGGCCAGCCGTTCCGTCACTGCCAGCGGCTCCAGTAAGCCTTCTTTTCAGTTCCAGGTAGAACTCTTCCTGCATTGCCCCCCGTTCAGCTCGCACACAGTCG + 0000FB5(>B0..-,6I,NA-J,>@I868,19H+/05C@F/N&.KCK>7C:B.(A:>2))< @225 GCAGGAAGAGTTCTACCTGGAACTGAAAGAAGGCTTACTGGAGCCGCTGGCAGTGACGGAACGGCTGGCCATTATCTCGGT + E<,4@0B551<40I&:B>@54=;>+/,GAKAI9I&4139F&=:5)<3EEE3N))N2L6BHD':'*N2;AM<,17@5D)(@2 @227 AGGTGCGCATACCATCACCTACCACCGAGATAATGGCCAGCCGTTCCGTCACTGCCAGCGGCTCCAGTA + 2-@L-;1J.12J(<=G/5+FB5>*J6E;*=M&6M=-)17NDMK/*-, @232 TGAGCAATGGCGACAATGTTGATATTGGCGCGGCCAGTGCGGCAAAGAATTTCGCCGAGATCCCACGCAAGGTGCGCATACCATCACCT + 09CG+5)&7D80)D.M,07F=:==)A1'-*B(NC&B29NFB,?'HB4D,D1N20/9C@,>D:,'*2'A(01I>,?9@ @237 AATTCTTGCCGCACTGGCCCGCGCCAATATCAACATTGTCGCCATTGCTCAGGGGATCTTCTGAACGCTCAATCTCTGTC + 0157B7C<<=MI/,(IB(F&<,N,56BLAM-JD-4I*M)C@E85LFAI+6AM9AJAA&31*0N;I-MA'*KB6ELF@I,J @238 CACGACAGAGATTGAGCGTTCAGAAGATCCCTGAGCAATGGCGACAATGTTGATATTGGCGCGGGCCAGTGCGGCAAAAGAATTTCGCCGAGA + 00(0A1L=+=A*+D8L16L&MMGH8K6/12?HH9@,3JH=*BA*8>>.5/,:7B<*G:+E+N?FIA9JD<6?5@?.03,*<(*69889;2DEC @239 TTACCACGACAGAGATTGAGCGTTCAGAAGATCCCCTGAGCAATGGCGACAATGTTGATATTGGCGCGGGGGGCCAGTGCGGCAAAG + 0000HD2NG95*B=N-='>60/M(BG=N4D9'H4K7D2((E;@/?=0/=2)8J2ACK3B4C:;NN,/D.@AK(3?H05M73&:&9;= @240 CAATATCAACATTGTCGCCATTGCTCAGGGATCTTCTGAACGCTCAATCTCTGTCGTGGTAAAAATAAC + 00000=6G+NN&HM'>NC2C3D/+1F(FN=7D<345)@<**?;39?K7*'13EG@/7=J0N*HF?7I=. @242 CAGGATCTTCTGAACGCTCAATCTCTGTCGTGGTAAAAATAACGATGATGCGACCACTGGCGTGCG + 00007:?G*5843,G99L:3&*( @245 GATGAGTAACGCGCACGCCAGTGGTCGCATCATCGTTATTTTTTACCACGACAGAGATTGAGCGTTCAGAAGATCCCT + 000034E0J1)H=4FLJ6,9=6?>:M65EL+-ND-FGJ1'(5515I-9+5AI)D69N:IF<;=5J:8N9:2I5D5J<+ @246 AGCATCTGATGAGTAACGCGCACGCCAGTGGTCGCATCATCGTTATTTTTACCACGACAGAGATTGAGCG + 00BK,K4E-L>(L9''64A6@HH>/)G&J20.JLI5&'J@8;2A&I, @249 ATCGGTATTGAACAGCATCTGATGAGTAACGCGCACGCCAGTGGTCGCATCATCGTTATTACCACGACAGAGATTGAGCGTTCAGAAGATC + 09.'A&1&JAG@/A7I0J'01EB)F-I9I<7(M33,D>G-15'F&&'<>L-(5G?320(.BC.8'+7L31GGI6G.247I933L9)>>'A. @251 CCTGATCGGTATTGAACAGCATCTGATGAGTAACGCGCACGCCAGTGGTCGCATCATCGTTATTTTTTACCACG + 000,J=KE?;C-CD6AH@23+J@&8?3E1@8=JI./<=,>95.-8?0K/*>CF?L@)@*0E&JC5GAAH&I.5> @252 TAACGATGATGCGACCACTGGCGTGCGCGTTACTCATCAGATGCTGTTCAATACCGATCAGGTTAT + 8@NMID/I)'8JKA26KH@K@2A7&?HH028&=:/6?H897F?2E=;D2+F6AAGM@*G13LKE<( @253 TCAGGGATCTTCTGAACGCTCAATCTCTGTCGTGGTAAAAAATAACGATGATGCGACCACTGGCGTGCGCGTTACTCATCAGATGCTGTTCAATACCGATCAGGTTATCG + 000;N3C2/@<'71NE1J<5B<-LID0H*,+N)G)E,4)@/4=3-:?L;-2/(M56:LI1*:N.(AE9H96LJ6A=D1(:&N;0-:A>A0.JE1MM5LL@GG @255 CACTTCGATAACCTGATCGGTATTGAACAGCATCTGATGAGTAACGCGCACGCCAGTGGTCGCATCATCGTTATTTTACCACGACAGAGATTGAG + 0000H<+'A4A.DG-<;.A.-HJ/7;5H=?KC8I0,5MH;2.F?=:0C,K4&9,4/)@JFHE8,H.&)G,I6:1CN25BKDFM1+7/658=-M>H @256 ACGATGATGCGACCACTGGCGTGCGCGTTACTCTCAGATGCTGTTCAATACCGATCAGGTTATCGAAGTGTT + F+B11,?-9I:)@60;,KMKG&F'3@?.=9N)H/,BE-3/JF4?&?9B/8*:36.4746=<9D>?DH.D22J92N;>(J+7H6<9* @258 ATGCGACCACTGGCGTGCGCGTTACTCATCAGATGCTGTTCAATACCGATCAGGTTATCGAAGTGTTGTGATTGGCGTCGGTGGCGTTGGCGG + H-=2FK3C7*H7.9@&H:F4LD=(;+&.&I<3E87J,M+K+;1C2D-(=IIA47I-E46N;G7:E28K,0L1*-I?3/NG77H);&?*@+N=? @259 CTCCAGCAGCGCACCGCCAACGCCACCGACGCCAATCACAAACACTTCGATAACCTGATCGGTATTGAACAGCATCTGATGAGTAACGCGCACGCCAGTGGTCGCATCATCGT + =.I;NB,<<.JI/FK.,'J7ACL+NK=NH.2FM)5;9;7NBNL:,KB/)3MB6-0L:-5E-F>DJNEJ@,@63&04H?78E;B?G2DEGJMNJN.'8:8;3;F2C+'I17:0C @260 ATGCTGTTCAATACCGATCAGGTTATCGAAGTGTTTTTGTGATTGGCGTCGGTGGCGTTGGCGGTGCGCTGCTGGAGCAACTGAAGCGTCAGCAA + 000'9K5(G4<*/4A0BI3@19/KFD@.J>MMA96/A;-G6,2*/LCB-941HFK56=5L,29)8AI942(,/L5@+5KJI?/@;53(93BB1:?J2=FN;B&@>.032/:M+1B52L=,/*DB=2'G7I<.J2;8H:*I>;GNNC@9G-=M'LKD;F'6E @263 TTCAGCCAGCTTTTGCTGACGCTTCAGTTGCTCCAGCAGCGCACCGCCAACGCCACCGACGCCAATCACAAAAAACACTTCGATAACCTGATCGGTATTGA + 0000;;0KD2'-D-1L0)/M1@A3>,9@DE-4)DB-@*C>6=,?GK)J8J4.)2C47&9M1.N0='1D(*FBM65ID,1=);FB7D.7GDI1>+I1/L @264 TCTTCAGCCAGCTTGCTGACGCTTCAGTTGCTCCAGCAGCGCACCGCCAACGCCACCGACGCCAATCACAAAAAACACTTCGATAACCTGATCG + 000,?86K-E'/*6I@=2HGKM:)JDK'>C07HF.?;?)K+:A;))F3=NL)*D.LM1AB,N70-+78E?LE2J&M(.*&D@'A-G)3.AF>1J @265 GTGATTGGCGTCGGTGGCGTTGGCGGTGCGCTGCTGGAGCAACTGAAGCGTCAGCAAAAAGCTGGCTGAAGA + 000('9@7C:L8M/L7H//A-M:(-@FH.G255MD0M+;:1(DLJCH<.C,9+1N<-F38=9*NG5:A)I31 @268 CCGCAGACACGTAAGTCGATATGTTTATTCTTCAGCCAGCTTTGCTGACGCTTCAGTTGCTCCAGCAGCGCACCGCCAACGCCACCGACGCCA + 6CEBI5GFJ'61D(8:C7C7F6K>M,6+&9N*36J,*?0;E/G6?3 @271 AGCAACTGAAGCGTCAGCAAGCTGGCTGAAGAATAACATATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCT + 7;<,(;)=H?(?G4854*;/N*4KA?'AJ;6BL':F*M)8@JH,HH10EJ('&C';.*0E:'()@'(DFHDM)G)F5-8@ @272 AACAGAGCCTTCGAGTTGGCAACACCGCAGACACGTAAGTCGATATGTTTATTCTTCAGCCAGCTTTTTGCTGACGCTTCAGTTGCTCCAGCA + 00C5,7FH=828;ILNJ(6A44DC&9L3<7&N>B)6'2,J2/KFI0N.D7FA7IAH6'6H/N&(()FAFF&F-'E5&L7L6E,,*JI/+9&@83C/KJIC*IK)5*2H662+N @276 CGCTGCTGGAGCAACTGAAGCGTCAGCAAGCTGGCTGAAGAATAAAAAACATATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAA + 000),<+H(F48.:M?0656FJNH,.2@A(2ED'IB8.92,:9KH7@5B>5E7'5J?M&)))?:31.M--5;=B+J=F00&7@.9)6I3@<)@>?3G:2AD.63=/F+:87<.7.=F @278 TACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAAACTGGC + D4.BA)670:MAL;'J'(;0FA)4I80'0M2+IK0?1IJ)47>*1/=CC54=/>3BNC8=0>B;.7;7?>C'I4(6)L4E-2HB(5'N::3KFN,?9/D)DC4=4J,*,>DFL2'+G@@;/K,224*H1(A16?.?0DBDE @282 GTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAACTGGCAGGAAGAACTG + <+?)=L7@N2FGJE>>+ED1J9B5;KFEIE&//)4*3C.A8H?3C0C:GC)<*8NKL(@@@46AEJK)J @283 CGCCAGTTCTTCCTGCCAGTTTTCCAGATTAAGGCCATGTACATTGGTGAGCAGAGCCTTCGAGTTGGCAACACCGCAGACACGTAAGTCGATATGTTATTC + ;6LC2@7?.DL*;+254=H4I12B.'3(6>5=3A=39N7D/6)5IG5G(F(C2A9@;DC'=:(3,8>LA33J5<95,,H@:.A=A''-I9;C0=;A*+)72. @284 AACATATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAAACTGGCAGGAAGAACTGGCG + (4-*2>G*04M8:)C@+E10IEE,0/C6EL08=9,.)NC5,I:)+7'&82'JML;/.4GHCC?G,11I3IDGI/(=1KLM'?1C:5=6DG8=-BHN= @285 GTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAAACTGGCAGGAAGAACTGGCG + 00?>EBFI>5M/C&,@N5*8@J4FKLA404/4;N&'2B3,G>CM8)4*:.F7;@EHL*F/;A@).AEB:/23)J60L)M7BI @286 TACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAACTGGCAGGAAGAACTGGCGC + HJ=;;.*.?21LN)496-(((I5/N(BI50>F.A=5L/6.8779K''4*9:L6>:/5H'.6L1@1G+7BD7L:K.N6*04&>F7>E'B)D02=(IE,6C94B.(.?K8;>/G>,6FK83:C8GH62>J&E0/NF>C3&*+E:EM;&41N?9L2'9,MH-)I382>L3/GLCJ&-,(;72.+H2?8@8,H*A)@-?@7D5MLD6L/GE @292 AAGCGCCCCGAGATTAAAACGGCTCTTTGGCTTGCGCCAGTTCTTCCTGCCAGTTTTCCAGATTAAGGC + 00080)M28+8MB;2=JHLG,9D6/&7)H'-/GJJF@CL<*3K2)I*??>*4LFAF:(HGF:32KKJ1. @296 CGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAACTGGCAGGAAGAACTGGCGCAAGCCAAAAGAGCCGTTTAATCTCGGGCGCTTAATTCGCCTCGTGAAAAA + 000>G&?F4,:>GD-)ILN;-7>(97FNC5C.@I;3JE(101<0K1;K'7F;M9?4DL.K15C/L<=K9.F3>A33.,D'27<,26BH5E?'H++3C5,>H/MCE95K=6J @297 AGATGATATTCTTCACGAGGCGAATTAAGCGCCCCCCGAGATTAAACGGCTCTTTGGCTTGCGCCAGTTCTTCCTGCCAGTTTTCCAGATT + 00000N(?)2GEJ++2N=BM&/=LAKKN10H(H;*DNF='CFE+H*'(MG+MEJ00M&',1AEJC3D4;;.B/GJ=J7E53J?JDI1'(7( @302 TGACCGGGTTCAGCAGATGATATTCTTTCACGAGGCGAATTAAGCGCCCGAGATTAAAAACGGCTCTTTGGCTTGCGCCAGTT + 0003F,*/BBJ3&6J@H:=-6F&68(-@F06DCFIG(KMD;N::BI3?I4)4B*:8H1ID;:/BL-1CNHM0B)@/=C3IJ&*L-=L&G4;'.*9>?ND= @307 GCTGGAAGTGCAGTCAACAATGACCGGGGTTCAGCAGATGATATTCTTTTCACGAGGCGAATTAAGCGCCCGAGATTAAACGGCTCTTTGGCTTGCGCCAGTT + 003/+-/0D?>+N3EB,FL?2?/(85ENEH5AMB3;:I..0==/9HE'H;BJNH(8@/+6CN6C1DA)IG83H'G+*)H901,1F;:M4&'E=CNC.:@'1:8 @310 CGCAGGAAGTCGGCATATTGATCCGCCACTGCCTGGCTGGAAGTGCAGTCAACAATGACCGGGGGGGTTCAGCAGATGATATTCTTTTCACGAGG + 00000LF<9+;FH?*5-1L.9L5(4(N=-8FD(.A&&J36A*/1<0I*.=B=)'1D.+88/5.+:-KG @311 TCGCGCAGGAAGTCGGCATATTGATCCGCCACTGCCTGGCTGGAAGTGCAGTCAACAATGACCGGTTCAGCAGATGATATTCTTCACGAGGCGAATTAAGCGCCCGAGA + :+.L6E@3@B*@8=+LK?G'31K/I7=*NJ<0*0M,J52GAB4'B,75:KDIJ6>'E*9N/7M9+:E3/E)N@<73'F)0/NJ?&BEB?>G5IBJ7+,/'K363CA;EJ @312 TAATCTCGGCGCTTAATTCGCCTCGTGAAGAATATCATCTGCTGAACCCGGTCATTGTTGACTGCACTTCCAGCCAGGCAGTGGCGGATCAATATGCCGACTTCCTGCGCGAA + :+.&G>&*C/10)3A@.LLA&0HC-J45;.866L+F@A/(H.-(F@N11:39;FAFHHH9BK2FG<==HJ7;GA34ADJM*7C.FK*'&/<*C.EM0=6:A=G&M,;CI:?9J @314 GTGACAACGTGGAACCTTCGCGCAGGAAGTCGGCATATTGATCCGCCACTGCCTGGCTGGAAGT + 0@7;:C8=N09FG&90M:*62E;KLKIHKI8D:BC6:L35H<&@NG@@297?(&+4H2(-@A>? @315 CCTCGTGAAAAAGAATATCATCTGCTGAACCCGGTCATTGTTGACTGCACTTCCAGCCAGGCAGTGGCGGATCAATATGCCGACTTCCTGCGCGAAGGTTTCCACGTTGTCACGC + 00B02H9:9*A@1+?G,.+(I@5/8AD>:=9?==N'/(,(GHBD2=I&71A9>GE57K3*27+.D:4=6?=G(=>2HM3D=89?*0IANL850*=3>(11II'C-JIJ*01J2:;E348F&MMC1/>('FDA.**>83GIM;-MM03@EH'5=F(=D*2/A(@(BFG9L@+KA@28I@@:G>FL'@8*N;K(> @318 TTGTTCGGCGTGACAACGTGGAAACCTTCGCGCAGGAAGTCGGCATATTGATCCGCCACTGCCTGGCTGGAAGTGCAGTCAACAATGACCGGGTTCAGCAGATGATATTC + 00C23M,&E&&B)-AIJ*6EE.N=03613*6((MCE@2B(@F7KJALE3JKM2H5(.K*I4,H,6(:(&N2L @319 CCAGGCAGTGGCGGATCAATATGCCGACTTCCTGCGCGAAGGTTTTCCACGTTGTCACGCCGAACAAGGCCAACACCTCGTCG + 0K5H6J?-95J1H0:BC4<.7>6J1'NA,)MC5B+9+49GJ+MN:G;F7F:K1E;J(?8L5MMC:(8*B0?48EJ' @320 TATGCCGACTTCCTGCGCGAAGTTTTTCCACGTTGTCACGCCGAACAAAAAAGGCCAACACCTCGTCGAT + 000F922=>G>+'I(&D=>=5'2'09)H@I,BG;9>6/EF/C,:56GM-5(1.)AK@+'*L&.@A&(F5D,*9FN @327 AAGGCCAACACCTCGTCGATGGATTACTACCATCAGTTGCGTTATGCGGCGGAAAAATCGCGGCGTAAATTCCTCTATGAC + 0B+>C)3E7&.K3J=-)3L*:./6H,=>2KL?6A07L(.90?&33(N5:1LN'8L>.MFL'AND7CLHHBB&,4)':,3L:8MG9/80<-H39L3BIILDC?HL8>L*;J./G.9M);?8K28+3GN:&86FKE>D=@CN;NF//)*31J;(/*K @330 TCCAGCCAACGTTGGTGTCATAGAGGAATTTACGCCGCGATTTTTCCGCCGCATAACGCAACTGATGGTAGTAATCCATCGACGAGG + 00(D/=F*G/33;G><185L0,AA)F7BM@4G-?-IMGL?7<@A3&3KF&)A6,GC2?*;D5487L'JL.7'M45G0E'475(219> @331 GTCACGCCGAACAAAAGGCCAACACCTCGTCGATGGATTACTACCATCAGTTGCGTTATGCGGCGGAAAAATCGCGGCGTAAATTCCTCTATGACACCAACGTTGGGGCTGGAT + 0/,-+B+)BFI;L;H/.'54>,))-C2'3;(*)3)/,;-.-K26,K7+30CN,+0M=/@B1E>H?(/((NMJ)H6&,BD59,)=<;M22K4,J99(7I22DM'N)+FJ,EK2C- @332 ATAACCGGTAATCCAGCCCCCAACGTTGGTGTCATAGAGGAATTTACGCCGCGATTCCGCCGCATAACGCAACTGATGGTAGTAATCC + 00))A'4G@091GL3A=K(@8L428=7:-?*C1+E-96.6D@;02-??NK/N7+N1JC)MM&K400A,1J0-*I(C7G?F+/).0K08=4/-AJB4:=4K'(5,G='?8HN92+,(+B)(B1AKI>=9CBEEEE.H7+1C8&576=DH/-J)763>8ML1L5+(?*+4EG0?:CJGN:@50):('/(:028IG57M @338 AACCAGAAAGAATGCCGGAGAACTTCATCAATTCATCACCTGCATTGAGCAGATTTTGCAGGTTCTCAATAACCGGTAATCCA + NG/BH9-AAFB@,E@'3E908.&:'/NM'KLH12'K?:*/;-7:A:KA=D494:>DC>*18.K;DAB@K'LH66'<.7B8?LN>09&(FB1;@27&AN*'<'7&;:2L8953::7>HCGN&+I4?+92?(@J17K@4G.L):6 @341 AACCTGCAAAAATCTGCTCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCATTCTTTCTGGTTCGCTTTCTTATATCTTCGGCAAGTTAGACGAAG + 000M8KAM-LK.DEB697+)-NJ9.@>/2MG6,D:1LB;<*?JJ&&)2B89)NEJ.DCI(&<,IN)F?0,&.'B,6E8I<;JE,,H@57*=N'7I=4A @343 AAAAAATCTGCTCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCATTCTTCTGGTTCGCTTTTCTTATATCTTCGGCAAGTTAGACGAAGGCATG + 000F8:+G4;'N054J?&G.>':12@6231-75J86N99G @344 TCTGCTCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCATTCTTTTCTGGTTCGCTTTCTTATATCTTCGGCAAGTTCGACGAAGGCATGAGTTCTC + 0CHA87M&MN?L0.?+'2GL/+++E)LH,4.C68D:7F=7J6?1/F<)ICLKCE7H&,.7;JKF*.A;A4-'E4&'(;(LL+7@/+6G)H@3D18*+F, @347 GTGGTCGCCTCGGAGAACTCATGCCTTCGTCTAACTTGCCGAAGATATAAGAAAGCGAACCAGAAAGAATGCCGGAGAACTTCATCAATTCATCACCTGCATTGA + 00;:>2I.@H&)&-:.,&317G5-MLC/3BMG=HC469.+.6)>.F/H=BF259I.+LF'5/6@8B2>L4441AN4-()AD(E0>*0C2344A6*6:DL*3N,)&.774L(E,6CE-D(&B(C6NIM29DB/A8M:ME49GK.64HEJ @352 TCATCTCGCGGGTCCGGTTCGGTATAACCCCCCATTCCGCGCCAGCGTGGTCGCCTCGGAGAAACTCATGCCTTCGTCTAACTTGCCGAAGATATAAGAA + 00I88:5('DG1G@D'/);:1;-A>I.J:'D30BA7+;@F137=8J07?2:H@M,E>4)HNAHJGE3?,)L45*N,BFA(-9JC&=<(-DG/M8>>I6'? @353 GACGAAGGCATGAGTTTCTCCAGGCGACCACGCTGGCGCGGAAATGGGTTATACCGAACCGGACCCGCGAGATGATCTTTCTGGTATGGATGTG + 000*26+>(/G0843C71'F?2IC6*M1CKGK)L/(;H@0L1?2;C(7,B.3C0H>47>MK:0@CGL0,:+D3A5,-KL1I>@-;<0,4C@(-L @355 GCGCCACATCCATACCAGAAAAAGATCATCTCGCGGGTCCGGTTCGGTATAACCCATTTCCCGCGCCAGCGTGGTCGCCTCGGAGAAAACTC + 0000-)-D*<1J(1A*JDLH?-6M*9*9H0J.&?-9DK/EKF09N<.:DA.L)6,9C;IDH&-?(-:KB;5(/0&;*9A:JA>C2:LD4H1' @362 CAGGTTCAATTTCAATATCCGCCAGCTCCAGTTCACGTCCCGTTTCACGAGCGAGAATCAATAGTTTTACGCGCCACATCCATACCAGAAAGATCATCTCGCGGGGTCCGGTTCG + 000-?/?2.?(/48,@5F5F<;'I=9J7A6?2C,9,JGIN;CA8I3JL-I--IB'L45I(3B @363 TAAACTCTGCGGGCAGCACAGGTTCAATTTCAATATCCGCCAGCTCCAGTTCACGTCCCGTTTCACG + 0HNE7HJ7A865'-9.E/N57A4=HHII&IB2;2B:K<&/':.(BKL6F&/3C2FJKF1&;//48J? @366 CGCCACGCGCGCGGCAAAGAGATCGTCGAGTTGTGACAGATTCGCCATAAGCGGCAACATCACCCTCGGCG + 9;,*HFG+)'-4=&I/(&+,F93K1F69&21CL:>B7L5B4-CGC2K(EHB8G>0+N-N=C+E=:G=L.:G @367 GTGATGTTGCCGCTTTTATGGCGAATCTGTCACAACTCGACATCTCTTTGCCGCGCCGTGGCGAAGGCCCGTGATGAAGGAA + 000F:G@43?K*3.E<>-62N:)=<(K37G>B10@C+*G03AG>8)?3CI89A<A8=>68/ @368 GTTAACGCCGAGGGTGATGTTGCCGCTTTTTTTATGGCGAATCTGTCACAACTCGACGATCTCTTTGCCGCGCGCGTGGCGAAGGCCCGTGATGAAGGAAAAGTTTTGCGCT + 000G@&?2*MI;G+,H5'F,'(2>791F'@3,:K4&9=G85G/FM=9).(48@BK(857,1G??N7DJ&L>E+<(A5LGC7+);;8+>)7MD6>E2M.0&7H'@4< @369 GTCACAACTCGACGATCTCTTTTTGCCGCGCGCGTGGCGAAGGCCCGTGATGAAGGAAAAGTTTTGCGCTATGTTGG + 000F/6LM1;2:*0IK'J()HFFE3.8.4-9K<4@FA7*25G)C;?7;B3H*:&@B?K<= @371 ATCTTCATCAATATTGCCAACATAGCGCAAAACTTTTCCTTCATCACGGGCCTTCGCCACGCGCGCGGCAA + 0-DME>MB8>/M=03M<*K)0:M:5L9=7>BH85'*N+G>/HN0(>:720;5B)7>-?=?C)6>CM&,K1J @375 CCGTGATGAAGGAAAAGTTTTTGCGCTATGTTGGCAATATTGATGAAGATGGCGTCTGCCGCGTGAAGATTGCCGAAGTGGATGGTAATGATCCGCTGT + 0-34)/7<.+14;E8B;)I @376 TGATGAAGGAAAAGTTGCGCTATGTTGGCAATATTGATGAAGATGGCGTCTGCCGCGTGAAGATTGCCGAAGTGGATGGTAATGATCCGCTGTTC + 7+@5EJ:6,G:E5;AKDL&4HB'><)E*;BL*CL-H=8D+*BG'C5LH)*/'D+6+E?E&MNI2D><*9;57<2/476J?@+C(4 @378 CATTTTTTCACTTTGAACAGCGGATCATTACCATCCACTTCGGCAATCTTCACGCGGCAGACGCCATCTTCATCAATATTGCCAAC + 000DCDD7+>8ILFJ)@&J5@.LJ/918(?4G'7G*=.8H(1A-I2-@G;--+)>KF'IC-&M,D83='?HM=B>83L;LGFJM,: @379 GATGAAGATGGCGTCTGCCGCGTGAAGATTGCCGAAGTGGATGGTAATGATCCGCTGTTCAAGTGAAATGGCGAAAACGCCCTGGCCTTCTATAG + KL.)M0-BLBJ:+8HJ<8?G9&GH&6?ID>K1CA=8=/MDC14/==,9<) @383 ATCCGCGCAGTACCAACGGCAGCGGCTGATAATAGTGGCTATAGAAGGCCAGGCGTTTCGCCATTTTTCACTTTGAACAGCGGATC + I(&D<=H4@I7;I4HJ(&*GC36='8643N?):NM-,3.('=G.<-B.JIF/)-4;+K72<44>*)D<@)DG98MD=&GF9K3I2E5-6/C@G4?<(E(D6&E @386 AACGTCATTGCCGCACCATATCCGCGCAGTACCAACGGCAGCGGCTGATAATAGTGGCTATAGAAGGCCAGGGCGT + EE)?9N:F(K+F:,6@-FLB030A6;LN30*I?.M0;49J&B<,,+K>'>AKKH(:7-;=/8G6)N:.*;*3C,629NK8'GBAA;(*;:J< @389 ATAGCCACTATTATCAGCCGCTGCCGTTGGTACTGCGCGGATATGGTGCGGGGCAATGACGTTACAGCTGCCGGTGTCTTTGCTG + 0000-;(G/(AI))FNNN;-M.38=((C>*-G1C,7A:-HC5@.60(.:43AG-3@GC'E44''>42&-M=6C:K+C>NHI@:?8 @391 ACTATTATCAGCCGCTGCCGTTGGTACTGCGCGGATATGGTGCGGGCAATGACGTTACAGCTGCCGGTGTCTTTTTGCTGATCTG + 00JI-0318GFGDGD6@G'MF=?/M3*K@,B?.*F6.2H44D5D04KK7.=6F:AHFE)7L2F6(I+1;CB52@?-LF)'N3*F? @392 ACGTAGCAGATCAGCAAGACACCGGCAGCTGTAACGTCATTGCCGCACCATATCCGCGCAGTACCAACGGCAGCGGC + 26@1;L<.C63JBC?-<'&J*(;):B1:/MEKAD+J'H&>')0D65+05D@0+C34;0D6>CG>I?M0H1)EG&L3I @393 CAGCCGCTGCCGTTGGTACTGCGCGGATATGGTGCGGGCAATGACGTTACAGCTGCCGGTGTCTTGCTGATCTGCTACGTACCCTCT + 0'.*;)E'&>CN*<->,:C>L7GL(:E;@/E7DF1M(-?F11L@)JEA>AJIM*D-*:8/:M)&LMCKD/@,:6/E26@.( @397 CGTTGGTACTGCGCGGATATGGTGCGGGGGCAATGACGTTACAGCTGCCGGTGTCTTTGCTGATCTGCTACGTACCCTCTCATGGAAGTTAGGAGTCTGACATGGTTAA + 000M)G+7HK0?2DA+G/=B(=9C7@9'6ALMF):&9'9><0AI5M/-K? @405 GCACCATCAACAGGTGTCACCGCCGCCGAGCACATCAACCGACGCTCATATTGGCACTGGAAGCCGGGGCATAAACTTTAACCATGTCAGACTCCTAAC + -+7G(>JI9+JN=C/=.+9.:= @406 CAATGCACCATCAACAGGTGTCACCGCCGCCCCCCGAGCACATCAAACCCGACGCTCATATTGGCACTGGAAGCCGGGGGGGCATAAACTTTAAC + 000000N00/6-8:BI703(,II+.GN'EE6=L+K/2;>8),4+=;BNI.D8438J?K&B/D,L@((5<8J55*E&17:(A3/D6H6/'KC2I24 @410 GTTGATGTGCTCGGGCGGCGGTGACACCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGC + -M?,<00)N4NB+<(N):@(N=&J70)8'&BE/)76?8>*4>F<,>FHC:&6G>K/A)5LEF388IMJID2', @411 TGAATGTCTCTGCCGCCTCAACCGTGACTACATCTAAAAGCAATGCACCATCAACAGGTGTCACCGCCGCCCCGAGC + 0D*;E.5??='*?F/61()JJ4A)>ILL8M>5/?4=C?L5'4>:/*&.=5+'I8=MK;*9@/E(,9.=/KDF< @413 AGGTTGTTGAGACTGAATGTCTCTGCCGCCTCAACCGTGACTACATCTCCGAGCAATGCACCATCAACAGGTGTCA + CE.?+L00>)4897JM'0II.5FE61I76*1NDDF9AA39GDB,G)84K52+E4=D,'G@I2CIM*+,=()K==,:L(<@4GKA8GFNA7?6@L<9D=/ @415 CCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCACTCTCAACAACCTCGGACGCTT + (;G5<107,F078J8H7D'61*C?-L63H9=M8:9N6;JD+;ELK-.)*3D&,&D30627NA<>L'DE/(L;',>:&K*/,;E-& @417 CGTCCGAGGTTGTTGAGACTGAATGTCTCTGCCGCCTCAACCGTGACTACATCTCCGAGCAATGCACCATC + D()C0:AG;.GKM;?K>@,.-@?1<2:=KC*N>8LL?./HN-M;&L34L34B.04)&H*F+F0 @418 TGCATTGCTCGGAGATGTAGTCACGGTTGACGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTTGCCGAT + (EADDA@KE'::2J,,,-,J;:J)88EJD;CA6C)JF.+B:D3M*?C*B>:ID:AGD5 @419 TATCGGCAAGCGTCCGAGGTTGTTGAGACTGAATGTCTCTGCCGCCTCAACCGTGACTACATCTCCGAGCAATGCACCATCAACAGGTGTCACCGCCGCCCCGAGCAC + 02KE';3@2EB3;G5/NGN4*JG,E/K0L56.BH'4L8K9A4,8LK?&+D-7CMB30L)8))N.17N:IJ&AA*6M>:076ECJG,L9&D&)M1@L??(4:57+C*3,><9/6&(0)M>1NB;IA4D0F5?+B:@,B9/AM:CN)0J=3+E>LC,'E&B)K'N/658:4/II,&05/22@'554+L&).FD9-:<&+/+@;&.DI/=H:C9KBJ4.8@7G.)6 @424 TCTGACGGCAGCTTATCGGCAAAGCGTCCGAGGTTGTTGAGACTGAATGTCTCTGCCGCCTCAACCGTGACTACATCTCCG + 16=E=JI&&:;9I:>MKI=;,8?*+G-96A;;17@4G?C:+:/E6/HJKICDI@:H=5N4NB?>H+/J5?M6;>===AI,= @425 ACCTGTTGATGGTGCATTGCTCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTTTGCCGATAAGCTGCCGTCAGAA + 09BCJMF0D609&=GCB0D1F(.;-AGAH);;74G2KJ(6I-0.AFF>;IBFI2'; @426 TCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTTGCCGATAAGCTGCCGTCAGAA + 6IE4EJ';/F5.<6A(B.BL8613)3'CBD,:I6=7?/72;3AN&+23B8524+'(J'&9E3K3C1GHBL&'02(/9ECD>/5H&+(*3=HHF/?)& @432 TCGGAGATGTAGTCACGGTTGAGGCGGCAGAGACATTCAGTCTCAACAACCTCGGACGCTTTGCCGATAAGCTGCCGTCAGAACCACGGAAATATCGTTATCAGTG + 00:2'.)(>@:A.E'I:C=?:,J@:2,GC4.=G930>*0N&5<)JM@5K-)0.>B+L9/J)/CKK68C7@I(D'H/A<56/IND7?'DMIN@AJ1&<1/?(/8-4& @439 GACATTCAGTCTCAACAACCTCGGACGCTTTGCCGATAAGCTGCCGTCAGAACCACGGGAAAAAAAAATATCGTTTATCAGTGCTGGGAGCGTTTTTGCCAGGAACTGG + 0000:;(A;&)/HD62;)?AD&1)+2=JJA,06KF++1:(J+1BJ-*B5;<83&7/?/+B)NB>22M<88<+&LMD.&80B,:FGNF*B0*'IJ':K>+8MI<71BE-0 @441 TTCCAGGGTCATCGCCACTGGAATTTTGCTTACCCAGTTCCTGGCAAAAACGCTCCCAGCACTGATAA + 0+=1=>ENA5:&5BJ-C9'AM(7<1(;1HJK18=8))-EN9+JJL&2;9A54(A2I48N8NC.JFJ)055NCD(+0GA9&.3HJB(@A34 @446 GCCATCAGCGCCGCGACCACCGAACAGGCACTGGAGCCTAAGCCCCGAACCGATCGGCATATTCTTTTTCCAGGGTCATC + 000B4BE62..C@8C8CD':1N3K1AK6;A)E(54?FE?(7J77=89-0NK>B;HG?FEE0N>I@AKH86NEDC23(7<, @448 TCATCGCCATCAGCGCCGCGACCACCGAACAGGCACTGGAGCCTAAGCCCGAACCGATCGGCATATTCTTTC + 00A/I<1?NIJC=.BCBL;C@95:=L*7'*9J6)6+=+J=.LMI?B*)?L)7FA.5+*(>E0@+837*G4,4 @449 CAGTGTTCATTCATCGCCATCAGCGCCGCGACCACCGAACAGGCACTGGAGCCTAAGCCCGAACCG + :>-752F,6IAD*E+B7KN-KF)(?,@)L&>CD/*1?(CF&.9(D&/=34:D?,8/3L**+1E56. @450 ATGCCGATCGGTTCGGCTTAGGCTCCAGTGCCTGTTCGGTGGTCGCGGCGCTGATGGCGATGAATGAACACTGCGGCAAGCCGC + @C/CMMN=B:7,D9JJJ.NDE(=LGI8D10.85ABI4=GF)?J(G8N&.N@H58J@?JMN;7K<*MM64>?M/3643,H?:-+E8?5&>.2H;249B4A2A8G<81?C*J?+N;8>C)2((-,;2F,7'/4+3-1,N/.JK0/7B.2(&J/-H9D*GF'+H,6CH'D1A+D&<(0:0:+,J>.A3.,<;3.+3@2JIJJL&I*)0'2>*:K3HHL9;9,GB.-A-;AC'+139I/D5

    0HK=1-BA5M)I>'/+-'<2+3@9@N @460 GACACTCGTTTGCTGGCTTTGATGGGCGAGCTGGAAGGCCGTATCTCCGCAGCATTCATTACGACAACGTGGCA + F/7D44J/0+88=3E2;K2IN&I,'F22=1:B(@JM9/L)K<:GNI<7F== @461 ACGGTGCCACGTTGTCGTAATGAATGCTGCCGGAGATACGGCCTTCCAGCTCGCCCATCAAAGCCAGCAAACGAGTGTCATTAAGCGGCTTGCCGCAGTGTTCATTCATCGC + 000000;GI(CM-9>':JK5NE5A..=0'I+?>7AJ>I'..H)/<2/M44(@,-<2=+F2/8A?5'M;BI5I'-&E:./7&ELAKGEB*01 @463 GATGGCGAGCTGGAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTTCTCGG + M>:-EJ-;8-;H@KH+-4JH:71KI8.==6NJLKF.<+5/550.*LH')NNEB+@4GL9L/&:8C=9 @464 GATGGGGGCGAGCTGGAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTTTCTCGGTGGTATGC + 005/6)F9HH;25-2A*.I*?M&FN&FF=4FB4?(G/8'53+=?DJA*;I*+MB&KF?L:?6/:E(*24I?) @466 TTTGCTGGCTTTTGATGGGCGAGCTGGAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTTTCTCGGTGGTATGCAGTTGATGATC + 00D4BA4;'C2I&9&6+N:<4E5*3;AI+L&-JLE)5N(6&&5>@56+8E0K>E?1<*F1-;4@2/9/<)/:-+M)-0B6-C4M3,/36=I1?3B=>+M;MG8.?@IC/AK7GA3H/882<,I/N(0*'BA.0@:,0?8<,I@@@5GB @468 GAAGGCCGTATCTCCGGCAGCATTCATTACGACAACGTGGCACCGTGTTTCTCGGTGGTATGCAGTTGATGATC + ,I9,N/=HDIAE?E'5J:+-<)6I&*@;0<(64D*N9N2-88.82)-26H41M9&M3H=+=9C88)K8(A9FA: @469 TCTTCGATCATCAACTGCATACCACCGAGAAAACACGGTGCCACGTTGTCGTAATGAATGCTGCCGGAGATACGGCCTTCCAGCT + 2;/7/H2LI,@=I0F4?)H'?=+6DIIFM*;-=3.*7+F6-(I&208M/*8E/3E/( @471 GGCAGCATTCATTACGACAACGTGGCACCGTGTTTCTCGGTGGTATGCAGTTGATGATCGAAGAAACGACATCATCAGCC + ;7/C*014+A077F,7FN0MH(.L==F5I4?:>)C(('91K??:-M1 @472 GCACTTGCTGGCTGATGATGTCGTTTTTTCTTCGATCATCAACTGCATACCACCGAGAACACGGTGCCACGTTGTCGTAATGAATGCTGCCGGAGATACGGCCT + 00-'D51D321KIMJ9(C(3)0>E<'/9M(=?8)4G+0;=@F<+DNG;(*;+?3@?<,?MEN?,:J1+L(E8B==6D1FM4;:MA?D3AG.C(((N?M96I'1&K62M @476 TTAATCCCCGGATACGCCAGCACCCACAGCCACTCATCAACCCTGGCACTTGCTGGCTGATGATGTCGT + *;08G&-M05KH)EMK0H/F5:'&-IAM8:/*3FH1N@6E<&J,'?CFC'.&*FK@3E+@MD&:1*D7- @477 TATGCAGTTGATGATCGAAGAACGACATCATCAGCCAGCAAGTGCCAGGGTTTGATGAGTGGCTGTGGGTGCTGGCGTATCCGGGGATTAAAGTCTC + 0H;(K51G('3C.4JA.-5)')?8K0>8>M-13;67N:?M(3E:JHE.'*/C(;F1HK13=+KC5*2 @479 AATAGCCCCTGGCTTCTGCCGTCGAGACTTTAATCCCGGATACGCCAGCACCCACAGCCACTCATCAAAACC + 000>4GLL@*'&DJ8))CF@5AI/A,=>?AD-/1H<=>A6CE;7KN67IⅅLJI(19GL,+()2@GB/(; @485 GCCAGGGTTTTTGATGAGTGGCTGTGGGTGCTGGCGTATCCGGGGATTAAAGTCTCGACGGCAGAAGCCAGGCTATTTTACCGGCGCAGTATCGCCGCCAGGATTGCATTG + 000;+IH<<(/>GEH6C&'.2&-K5?.=GN?,20&(GC46H>>??=<.G-LN70*J?I8:M)9K9JMNECN-64.89&B @487 AAGTCTCGACGGCAGAAGCCAGGCTATTTTTTACCGGCGCAGTATCGCCGCCAGGATTGCATTGCGCACGG + 00M=/KA;DLN<'=5>-=;.D+C+L-E0A0,57)+GINN61,G9C@)<&F?&)INLEI@)KI)=M57L7I= @494 CCGCCAGGATTGCATTGCGCACGGCGACATCTGGCAGGCTTCATTCACGCCTGCTATTCCCGTCAGCCTGAG + 00+4NA>EB>)M4ED=//J:7F5F.++@FE;&;JN6)?0-B2GJ)6G/9IE&LK9CJ<=N&&@LJ95F.*7M @495 GCAGAAGCCAGGCTATTTTACCGGCGCAGTATCGCCGCCAGGATTGCATTGCGCACGGCGACATCTGGCAGGCTTCATTCACGCCTGCTATTCCCGTCAGCCTGAGC + 0*5LIK.B260L+)2&>4/.A?864:)B1F'E,12)J(+I6BK?M6.A889+G(::=()MAIB5K70//5:)3095D@DH4IIFJ+(L'L:'MFH*3IHEL8NC&0E.?@8BN>D;5<+89>N=6=II10C( @498 ATTGCATTGCGCACGGGGCGACATCTGGCAGGCTTCATTCACGCCTGCTATTCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATG + 0000D'1='0.G8(,N)'H/5:,:8;.<1;:KFK5)6JME;0)?FE+(5D<;1L'I01?E+<=N;L,/7L;17I.INEJ8;?,E @499 TTTTTTACCGGCGCAGTATCGCCGCCAGGATTGCATTGCGCACGGGGCGACATCTGGCAGGCTTCATTCACGCCTGCTATTCCCCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAA + 000000F92/J:2<:H+&BL&/I*?L28K2*EJ9F-GKE:HE))7:,M4M@6;1+MC:<2A9G()78AMC5B26H7JC,396&L2MN5,B@MC4,JA,FJ@HH8*H+K8+&*1<02.5 @500 ACGGCGACATCTGGCAGGCTTCATTCACGCCTGCTATTCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAGATGTTATCGCTGAAC + I,4BF,8&)D(:H>5.73(0*6B81<2A?I;;L1F;,:8IK:H@D976@M>7GCI)M,.''ML?*;CJ4-7+*J/NK4&GC(-NAE?5K @501 CAGGCTTCATTCACGCCTGCTATTCCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAGATGTTATCGCTGAACC + 0:?;DH,&A);B)51H+L0(H7&@)=NDKK?A?CH7IJBA//./IJ7B,9N2A>JI**B>56A?3-E&B>J64*>AM @502 TTCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAAAGATGTTATCGCTGAACCCTACCGTGAACGG + 009G>7BD9-?CE??)&C*>KCF6+@L/J8>A;9'IB8<-5)*6?6H,F.(B0I4M&4//+K5J,/4; @503 AACCGTTCACGGTAGGGGGTTCAGCGATAACATCTTTCATCAGCTTCGCGGCAAGCTCAGGCTGACGGGGAATAGCAGGC + 000059*90,N&525=4C,GG2+8H8I; @508 GCCGGAAGCCTGGCAGTAACCGTTCACGGTAGGGGGTTCAGCGATAACATCTTCATCAGCTTCGCGGCAAGCTC + 00,13@83646HB?6=4M(>8EK6:+2M5E)H(I+->N=1.87HN7I>91D&,2;+7G-+AKCKN8.F67A;F- @509 TCAGCCTGAGCTTGCCGCGAAGCTGATGAAAGATGTTATCGCTGAACCCCTACCGTGAACGGTTACTGCCAGGCTTCCGGCAGG + 0009BF4&4/B(<&L+482LKAK1H40@72I.>M-G31,(53?C'?G826A)LLI/GB+*4CC1L;88B:'L)+@=8CJ1G7>+ @510 TATTCCCGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAGATGTTATCGCTGAACCTACCGTGAACGGTTACTGCCAGGCTTCCGGCAGGC + )G=CK;N0+GG'.4L*G6M*>7EKDHB+()N:N8H)&G(MDI:-/),,3:.F915:8=JGJF'?CD&'3MH&0L*C>0D6MN23E5')E9& @512 CGTCAGCCTGAGCTTGCCGCGAAGCTGATGAAAAAAAGATGTTATCGCTGAACCTACCGTGAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCG + 0000G'';'B4IF>DMI6;FJHFH9NI>F(N-I>EHH.2.G=@?/7I?JAC7+GA;3'),9LEF?&CM;(@(8G6=I'63E;2,HJD,F8CCC44G3;. @513 TCAGCCTGAGCTTGCCGCGAAGCTGATGAAGATGTTATCGCTGAACCTACCGTGAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCG + 0.'7J6,H@C22HGB>M.(?*64@643&1@C,=->N+(7/(3K-@+FLNG,?E/J---GD6=*.>.&9'/AJN1&6N@(&F@JJBEJC67+F @514 CCGCCTGCCGCGCCTGCCGGAAGCCTGGCAGTAACCGTTCACGGTAGGTTCAGCGATAACATCTTCATCAGCTTCGCGGCAAGCTCAGGC + 00).I04?EK;)B)/62:/<0F/.:/:K1+888+7=/59DCHN'NE,KA=@/L/;G*//E6?;NINL*,* @515 GAAAAGATGTTATCGCTGAACCCTACCGTGAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCGGT + 000&=K.@)>:J>83G'3(/4:4JH8.@7,-N5@//K;)//C&>7D@N:7L=.M*M*=D)2K/=@7( @517 TTCCGCGACCGCCTGCCGCGCCTGCCGGAAGCCTGGCAGTAACCGTTCACGGTAGGGTTCAGCGATAACATCT + .;G3C3-ELJ(E4)@1&4&,<,JM5JLAL-91?-(H@LA @519 GCGCCGATTTCCGCGACCGCCTGCCGCGCCTGCCGGAAGCCTGGCAGTAACCGTTCACGGTAGGGGGGTCCAGCGATAAC + 0000(30DNE&&-A+9C4G>@I026)JAM0=ID,;L@?;I149L6/;?,8:.':GA+'B@(2L);3A.B?+E81K@,2.@;?>C5E5;9*'>KJ*7M6562*AI&9C?G @523 GTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCGGTCGCGGAAAAAATCGGCGCGGTAGCGAGCGGTATCTCCGGCTCCGGCCCGACCTTG + 000I>)+E-,73G@,8:,&J:F32>,M=BK+,J/G7F+FADHF<@1@?(L>&N;7GCB0*&A49D)A2K*83NMC;M,4@.67?NN/5)(B @524 GAGCGAACAAGGTCGGGCCGGAGCCGGAGATACCGCTCGCTACCGCGCCGATTTCCGCGACCGCCTGCCGCGCCTGCCGGAAGCCTGGCAGTAACCGTTCA + *KGBF=M78LN86MGA2KG2L3K:,259M9+B.HI8DD+?GC0H@J4;&NN0E2B9C)J(8KCC*&/>:I:)36-6M<@BA:*/@7&-&62,M>E.L38BM @525 AGGCGCGGCAGGCGGTCGCGGAAATCGGCGCGGTAGCGAGCGGTATCTCCGGCTCCGGCCCCGACCTTGTTCGCTCTGTGTGACAAGC + 0K>*K?65**&=<-A.3NB6>K&FE2.>8J&865,D22I??L/;A@(.LJ&<0C9<7**M,4/A4,@I>CH;BFM/94+K':.C:BH< @526 GAACGGTTACTGCCAGGCTTCCGGCAGGCGCGGCAGGCGGTCGCGGAATCGGCGCGGTAGCGAGCGGTATCTCCGGCTCCGGCCGACCTTGTTCGCTCTGTGTGACAAGCCGG + MN@B@JGKMN'/CGKL:288B*A,1?)?*)'.4I7CB@A014@097<@8?0L3G(J9J?/CJM+*9=N>7HN=<&J?'J3'KH@)=F>(318>D2CM7 @529 CTGGGCGGTTTTCCGGCTTGTCACACAGAGCGAACAAGGTCGGGCCGGAGCCGGAGATACCGCTCGCTACCGCGCCGATTTCCGCGACCGCCTGCCGCGCCTGCCGGAAGCCTG + 009H69>LL9@@A?2B11AD'9>K-L9466DG0<)BA(6?-0+8HJ=L7=A54IN?L+J/B(/1B0)>J@KEKD(@0J0=K*'+'7J>3/H@=/5(*/&;8GE0149)I23A-D @530 ATCTCCGGCTCCGGCCCCGACCTTGTTCGCTCTGTGTGACAAGCCGGAACCGCCCAGCGCGTTGCCGACTGGTTGG + 0.'N3.159A)IM3,ED<'.JNJ(47087<4.23M+&@,':.&0G4-F&FKE026G* @531 CCGGCTCCGGCCGACCTTGTTCGCTCTGTGTGACAAGCCGGAACCGCCCAGCGCGTTGCCGACTGGTTGG + *(=1BNE1;7JJ-+:GH:)G,K>1>GC1,DA:BD(DE(/A:MN.:IL/?7AA)//?MI@E>K7NNJD;2: @532 CTTACCAACCAGTCGGCAACGCGCTGGGCGGTTTCCGGCTTGTCACACAGAGCGAACAAGGTCGGGCCGGAGCCGGAGATACCGCTCGCTACCGCGCCGATTTCCGCG + >FM2)*+H+@;A1265=02HN0;/J?9;42(03;E(0/B/DE@*MD5(C'L&0D9;3,-IA4-C6&L9HE?(DB)83/7KGM7H>C'IN'7N@6@,-<(9:65A @534 TCCTGATTGCAGGTAGTTCTTACCCAACCAGTCGGCAACGCGCTGGGCGGTTTCCGGCTTGTCACACAGA + 0&)IH*;-?:,(:L.CB+131('0J)&*A@BA8*:''CK-F;&>>@)A'B:5+':*L7)0=G*:JMG&A9 @537 ACAACCTTCCTGATTTTGCAGGTAGTTCTTACCCAACCAGTCGGCAACGCGCTGGCGGTTTTCCGGCTTGTCACACAGAGCGAACAAGGTCGGGCCGGAGCCGGAGAT + 000L?GN7:3+G:23G=4;C=EL=,B9B+&<+&L/@71=+*JF-9>-&=HH@71*80)7J-275F1-(=,K=<)6,'9'EM@@KF?,;-,AAI0GFKB?;6B::3,L& @543 TCCAGTACTCGTGCGCCCGCCGTATCCAGCCGGCAAATATGAACAAAAACCTTCCTGATTTTGCAGGTAGTTCTTACCCAACCAGTCGGCAACGCGCTGGCGGTTTTTCCGGCTT + 00000G(?/BM6I?(3L@*/CK-L15<)GJ;18NF-93K322;9>'43I8D+(&>AK2@LI'N(018*(9B/2B70=5C059K72A043B>*G @545 ATATTTGCCGGCTGGATACGGCGGCGCACGAGTACTGGAAAACTAAATGAAACTCTACAATCTGAAAGATCACAAC + 0>8*0H9K1@?,?'*LH>BC'8'D7C;&F5E@GE(&?(892B&L@*D&G6JCH*;HK7?K4J-,?2DKE46C/492'B&,D0LA..;70 @568 GCCGAGAGGATCTTCGCACTGCGGGTGACAAAATCCAGCTTCAGCATCTCATCAATTTCAGTCAGGCTGAATTCCGGCAGGTCGTGCGGAAAAAAAACAGCCCCTGATTTTTGC + 00000008B>?&N462C1A8?M*@/0=J@)L+'H'C--LC(96I&5--6-//I6-=9/:)+J:@ @574 ATTGATGAGATGCTGAAGCTGGATTTGTCACCCGCAGTGCGAAGATCCTCTCGGCGTTTTTTATTGGTGATGAAATCCCAC + 000244B-G>.J)66J572:'J?M0CFKH6*KNG0=G@J1>CL?+N<+(MK(:<7=,0H:)4G43B;'8@05>FKF2/('B @579 CGCCGCGCGCACGCGCTCTTCCAGGATTTTCCTGTGGATTTCATCACCAATAAACGCCGAGAGGATCTTCGCACTGCGGGTG + 000BF1M1LDJ&<&E(61G/&EKKJ.H&'&?6+034AEK>1*68&==D'>:,-FNI,7/2M-(2=L8,,(A8:;@/4F80:, @580 AGGCAAACGCCGCGCGCACGCGCTCTTCCAGGATTTCCTGTGGATTTTTTCATCACCAATAAACGCCGAGAGGATCTTCGCACTGCGGGGTGACAAAATCC + 000000F087'8F'L))8(9E7CEM)&GCD'G9LM+?889)'&3?-/M<3F9M,*0N3BH?*.2F?(5H+');J0;3:A;41N* @585 TTCAACATTGGCGACCGGAGCCGGGAAGGCAACGCCGCGCGCACGCGCTCTTCCAGGATTTCCT + 4B'JJG@F<4)*,.3<3/'H(G)??HN*:NA585GC)NL55?EK?<);0?G>2-;MHL5MCD4; @586 ACCGACATCGCTTTTCAACATTGGCGACCGGAGCCGGGAAGGCAAACGCCGCGCGCACGCGCTCTTCCAGGATTCCTGTG + 000/HAK45(2K.B/@<(F:0M51IIIJ'=B719F6KN0I'D4J(3K&M&61K+::+.+(+A)N&3DC<4;,+=+4C))=K8=A'3.I @595 CGCCGAAAATCTTTAAATGCCAGCGTTGGCCCGTGGAACAATTCCAGACAACCGACATCGCTTTCAACATTGGCGACCGGAGCCG + 073)0F29H2GCNG41/DK5F6G7M+6ENN7BI31+6+@4B<<*K*-IHA;(:9D=E'IJM*7HNA:9AKJJ',+6K76:3?=8, @597 TTCCGGCTCCGGTCGCCAATGTTGAAAGCGATGTCGGTTGTCTGGAATTGTTCCACGGGGGGCCAACGCTGGCATTTAAGATTTCGGCGGTCGCTTTATGGCACAAA + 004&)3K/=>(5;J970N'42M-,&I--/AJ+NF;=N>B8(L1D6))BK)E0DI'@147JAHE3.2)@3MED80;8CA@2.I9A7.;<1@>>I=FE @599 TCAGCATTTTTGTGCCATAAAGCGACCGCCGAATCTTTAAATGCCAGCGTTGGCCCGTGGAACAATTCCAGACAACC + 000HD::C*JIG&@3JGE0'KEBFNI0@.5:6)(L;?)==IN&A=/>6B9;70:NM2*G003J-/E(:8;-C,<8+L @600 TGTTCCACGGGGCCAACGCTGGCATTTAAAGATTTCGGCGGTCGCTTTATGGCACAAATGCTGACCCA + 00&?G/KFED9-H69=3'1.5>9+HCF*D.@.3H'EB2C27A&F95&2(LC7G6JN(51BB,:@N?AA'@2H;I @620 AAAAACCGTAGAAAGCATGAGCCACTGCCGCTCCGGTATCACCGGAGGTCGCGGTCAGAATGGTCACTGGCTTATCACC + 00(G,LB?09*=B2;0I'6I:9J1>C&I=3&+29/-;8+.@C*7=G>*3CH8-0.50*E>9 @621 AGTGACCATTCTGACCGCGACCTCCGGTGATACCGGAGCGGCAGTGGCTCATGCTTTCTACGGTTA + F585):=+&LK(2&B'&7*&>&+LG<4B(?064L9H9@?NC64-?8AJ/* @622 GGTGATAAGCCAGTGACCATTCTGACCGCGACCTCCGGTGATACCGGAGCGGCAGTGGCTCATGCTTTCTACGGTTTTACCGAA + 000D6N=+MLCA,8C6*@C<)G6C10A+/><7H*?@-:NFD;79HCC@G7DC=J=*==C=<&5-ADAN:,@8:CHNMK1HM1-+9;9B:)I8M'>6NF>/>76D*;)EF?0?L.402 @625 AAGCCAGTGACCATTCTGACCGCGACCTCCGGTGATACCGGAGCGGCAGTGGCTCATGCTTCTACGGTTACCGAATGTGAAAGTGGT + 0000J/K97G4=;HD*N@J5:D77C13@&A'8/*:<;.D?1)>IC5)A)>?7@BB.3GHD3G9:IL=D8536CE0D/(1 @627 TGACCGCGACCTCCGGTGATACCGGAGCGGCAGTGGCTCATGCTTTCTACGGTTTACCGAATGTGAAAGTGGTTATCCTCTATCCACGAGGCAAAAAATC + 0008:L07J+//;KAM&7N1(3D(&9+HA5'7L6E/.6G4)?L8//,-5L7N8'7N*KA>7)8EL?C';E7H07./:8863EA>&5CJD&<5;K8&G?,3&D8/(B<'BIF=N0.*?L/H*-/(K0E6AF:M?0@ @635 TACGGTTACCGAATGTGAAAGTGGTTATCCTCTATCCACGAGGCAAAATCAGTCCACTGCAAGAAAAACTGTTCTGTACATTGGCGGCA + 00H/NK&2.KM?B8K0MF@55F)H914DM,4MME>E*6M)'<3'J,AMHBMB';@,KD*E*@FD(+DCE78*=?D4,*86588AM6M51 @639 GCAATCAGTCCACTGCAAGAAAAACTGTTCTGTACATTGGGCGGCAATATCGAAACTGTTGCCATCGACGGCGATT + 7NF3C,);'(8+*8>N<)?'4=MDMN @642 CCACTGCAAGAAAAACTGTTCTGTACATTGGGGCGGCAATATCGAAACTGTTGCCATCGACGGCGATTTCGATGCCT + 00;H=)->D-F(IN5J-6N)-+@*25KB8M>3/(.,;6(>E+A/)/N9)'*L0ED&*4B0/C8(&)-42DJ+@;ALM @646 AAAAAAAAACTGTTCTGTACATTGGGCGGCAATATCGAACTGTTGCCATCGACGGCGATTTCGATGCCTGTCAGGCGCTGGTGAAGC + 0000ILN23K'II,EG586K*>9NJ00GM:@2B(10=4:6,MI/N&>/L)H?,1EG?C5/E,2AH::3==6.:GCE&/MA//)2)(/H6'M;>BC49 @656 GCCAGCAACGGCTGATGTTAATCGAGTTAGCCGAGTTTTTTAACCCTAGCGCCACTTTCAGTTCTTCATCATCAAACGCCTGCTT + 000A(CL'7D(=>N&9).??2J8F81AD0N3,BG.:>07M>H3-'&@,9FK&&:@<=BDC:NK:6KM66;33?5MIJ-HE6?=:MC3<.&70,H0(H56N@/B4GH @667 TGTTGCGCAGCTGCCGCAGGAGACGCGCAACCAGCTGGTTGTCTCGGTGCCAAGCGGAAACTTCGGCGATTGACGGCGGGTCTGCTGGCGAAGTCA + FK,F8EL@4(F2M91>NE->B/A/I=CD777+'4D'(,4FME;J=''64:D23>;K*J'H-H-9'.BMAI8/6I-I) @668 GCGCAACCAGCTGGTTGTCTCGGTGCCAAGCGGAAACTTCGGCGATTGACGGCGGGGTCTGCTGGCGAAGTCACT + 00.31N9/)B1012LB:K6:K+C@<6LI,?FJ3J+3:(65(9EMC>35A.-02..MB-/G?48:M:8L*0B-F+( @671 TCGGTGCCAAGCGGAAACTTCGGCGATTGACGGCGGGGGGTCTGCTGGCGAAGTCACTCGGTCTGCCGGTGAAACGTTTTATTGCTGCGACCAA + 000<.N:FN*7E<9(C;0JAE>(I2D=*J9?KMG&MM93F-?7-&(GH,JF71=,=6IE&;'B-DBCCDADL:K1CLAD>&+IAI&D'2=B@'/ @673 TTTGGGGGTGACCACTGACCGTCGTGCAGGAAACGTGGCACGGTATCGTTCACGTTGGTCGCAGCAATAAAACGTTTCACCGGCAGACCGAGTGACTTCGCCAGCAGACCCGCC + 000000D6(+*6-)):=166@/&&'55<+-;&DJ@AC&3FCNF27K671DLEFFFE7I@BG)>:1IL1)8,,9IMGI';I@+N?E@I3G2(4LCK>&98JL:CD' @674 GAGTCGCTTGGGTGACCACTGACCGTCGTGCAGGAAACGTGGCACGGTATCGTTCACGTTGGTCGCAGCAATAAACG + 00B:C@9CA=B(&4>F*)GB-JA-='&8<0<4=GE0-(DE:3B@+EDDLIF/;@JJ('ME.F*(84CK)=1A(&-JK @678 TCCATCGCGTTGGATAACGTCGCCTGAGTCGCTTGGTGACCACTGACCGTCGTGCAGGAAAACGTG + 0?-*(?-,.'AF3:1:0I';.D7+(02N-DA/,8/5I)&,B-@72.*B:.C19,L+JH(0:=2>'/ @679 CGTCCATCGCGTTGGATAACGTCGCCTGAGTCGCTTTTTGGTGACCACTGACCGTCGTGCAGGAAACGTGGCACGGTATCGTTCACG + 00B1>2+08HL)LB<>+83M(NNH9?H)6090A<77=IG0DKNJ.:'J)357D>+F'H4&.2:?4>'-(6L;=+2LB+57:J@:-7(FHB @681 TTCGGCTGACTCACGTCCATCGCGTTGGATAACGTCGCCTGAGTCGCTTTTTTGGGTGACCACTGACCGTCGTGCAGGAAAACGTGGCA + 0000:7:<'=H*/:/<&D5D92;E*3*4E?51?0K9E.50>D=M1.GJ3D*.-A84E--H@7A2H*/9G+61KH1'F/G/(E+&K<2KM @682 GTTGTTCGGCTGACTCACGTCCATCGCGTTGGATAACGTCGCCTGAGTCGCTTTTGGGGTGACCACTGACCGTCGTGCAGGAAAAACGTGGCACGGTATCGTT + 0000&0A3+4G:*3+.4M+BI:0I9&:/>>J,1='EAD:24B'C5+,:1)89=ML=C-&H&(GG*=A4*?3;4KL<0=F2''=L3F'LI./J,0.H:I48579 @683 CCGTGCCACGTTCCTGCACGACGGTCAGTGGTCACCAAAGCGACTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCG + *EG85/5G;+0N8N=)1L9E472N.ILF>/@G:H-<;:*GH5;F96B9)'*3E65-B7HGK3BH)98N'=I2FM/<)G4>EA7+@LI=*.6/30:: @684 CACGCGGCCAGTTGTTCGGCTGACTCACGTCCATCGCGTTGGATAACGTCGCCTGAGTCGCTTGGTGACCACTGACCGTCGTGCAGGAAACGTGGCACGGTATCG + 007-8)KG?1:>N2HG?KJ5?>1BK0137;L'H:J7KD1JI/:L'3@G1';AM8NDI-B-;>HG86(;9.-C*,M8*4>3?76,&@BEC;C&J?E9&-K1DEMEB @685 CACGCGGCCAGTTGTTCGGCTGACTCACGTCCATCGCGTTGGATAACGTCGCCTGAGTCGCTTTTGGGTGACCACTGACCGTCGTGCAGGAACGTGG + 0D9N2C5EG*1>6JBH1?0B(.N(0;LLJ&=0E5E=.+E'LL:&;2M?GIK(3)+A'>2M8'<*,9=6)H.?&NC-E:&B7A/NAAB66A4@CC368 @686 CACACGCGGCCAGTTGTTCGGCTGACTCACGTCCATCGCGTTGGATAACGTCGCCTGAGTCGCTTTTTGGGTGACCACTGACCGTCGTGCAGGAAACGTGGCACGGTATC + 0000,BI4C;6C*D..L9+,&+&@:=32IG:>-9JB4GL+NI@G))@*J56E5::=+&'9B8:+0MM.?AANAAH>83@CA)GE596:M?7M6.-?@71>.AG-KE?.L? @687 GATACCGTGCCACGTTCCTGCACGACGGTCAGTGGTCACCCCAAAGCGACTCAGGCGACGTTATCCAACGCGATGGACGTGAGTCAGCCGAACAACTGGCCGCGTGTGGAA + 0G=IJDI'=DI/MI)762*8:(/DN9C,&3K*;'9@*37;KJ8;&(K+B/39<&NI=27(C>,M4M4.E+8-NJ;*;A4J=D>>4N0K3,(,(4>DMK9.D8?;(G.&?3C @688 GCGGAACAACTCTTCCACACGCGGCCAGTTGTTCGGCTGACTCACGTCCATCGCGTTGGATAACGTCGCCTGAG + 0M6.41&KH/A*A/&C/B1,5-?=5G;IC:2''+2@B>F&3)JEFN;00K1&46D4E)C/IDG @689 GTTGCCAGATTTTTTGCGGCGGAACAACTCTTCCACACGCGGCCAGTTGTTCGGCTGACTCACGTCCATCGCGTTGGATAACGTCG + 003*61(@1/H74CI3JK9+2<>C0;?B&M<6A)9-BB-@4-G,D1((:.E,'B-4K,)6=3?EB(A6.@4'/C)(6I5-HF=C**HA>(/'<+/>4NB&/87'KD@+DC:H1?9;LHA@54LD6-K'I@*K5J+'KGF=*);9=)'GKG>@50J.7F2>-7',8@D?EH,3< @693 CCCAGCTCTTCAGTTGCCAGATTTTTGCGGCGGAACAACTCTTCCACACGCGGCCAGTTGTTCGGCTGACTCACGTCCATCGCG + 00+:EF,'>K,H'LG.'&4(5*.=B=1C/1GH&(<*6I=BK8-,88<';N:NJ14&JI;*M<33/* @694 GGCTGCATAACCCCCAGCTCTTTCAGTTGCCAGATTTTGCGGCGGAACAACTCTTCCACACGCGGCCAGTTGTTCGGCTGACTCACGT + 00000.+J'M?E94D@FCK=@7;?A?H97'1D/.14-+8K/:5:NNFC,M>IM@=68NMK739@CE@3IFKMH185LI2M:.@H-&'M @696 CATTGTCTGTTGCGTGGTTCATCATCCACGGCTGCATAACCCCAGCTCTTTCAGTTGCCAGATTTTGCGGCGGA + 003K*M+LID6'BH87J527-G6DFI4(<&-B>7)58MI45=>K/8;3C(3+@5 @697 TGGCCGCGTGTGGAAGAGTTGTTCCGCCGCAAATCTGGCAACTGAAAGAGCTGGGGGGTTATGCAGCCGTGGATGATGAAACCACGCAACAGACAATGCGT + 00000-6JGGB+15&(A58/41C7*&6.0L;8K2K5,,1501'+1-99:8JD,@3FM,/B03A+N3AN/42+H>-:C;L)75'>3JAAI.F@0H::D;)8@+-2:**9<+MCG-;?K.(.+D @705 ATCTGGCAACTGAAAGAGCTGGGTTATGCAGCCGTGGATGATGAAACCACGCAACAGACAATGCGTGAGTTAAGAACTGGCTACACTTCGGAGCCGCAC + 0(50@?=7C&M+,6.2-LH7B>BD1NC?.I*3K4>NL<&A/6(M'(/5>8':I8C28.?=;H*4KH+:78A8?*9D':?0?A,2>J>L7<;D=0+7D.=24@JD8 @710 GGATTCAACTGATCACGCAGCGCACGATAAGCTACGGCAGCGTGCGGCTCCGAAGTGTAGCCCCAGTTCTTTTTTAACTCACGCATTGTCTGTTGCGTGGTTTCAT + 000'?@4ECE'9&3>?8?C)3)HJ0H.-.GK/*G(M6=.F5G>E7'1);)'1&E14-;?'9D69L*8G4J,=GH&+8E<=5/:34'B1G@0-+;2-*G=H&;H&.> @711 GCCTGGATTCAACTGATCACGCAGCGCACGATAAGCTACGGCAGCGTGCGGCTCCGAAGTGTAGCCCCCCCAGTTCTTTTAACTCACGCATTGTCTGTTGC + 0000I>1K/*E)M*3,4.E7D?29F:D055I.@7LH*D19&-.B;A&5086<&*:+&25I-H&//1D,M9A1:H,<3GK,)*NL.0L6>CB,5/3<)*?G' @712 AACTGGCTACACTTCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAAT + +MA=07EN--&4?.J1A8NF''+.;DILL.&9E+KH4A+;E1M2L98+>+9,G&KB5D';,4>L7G26I&1 @714 CTACACTTCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAATATGGCTTGTTCCTCGGCACC + ::L4G)+K/5@IHFB7D+?+&&'0=J0:G(J;=D-,J1EL.B6NA*87:?J;MIEG:711D>;,6MF>'@)/6EC(42?0'C98?F=H;LA1?/B(?<--L<,EII'H:/HJ(5+2A9,J)F; @716 TCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAATATGGCTTGTT + &B.?MEMIDDF6/&046?M5'1,9:G14A9H;F*.C/=DACNI'27&>/?29:CH@G>..M<01-HMD7-67/2CM'=(I)CG(1L(C2FFH0G98@1?E&7CE.85.995H721L;>IIB-18,I2)AH6 @719 CTGGCTACACTTCGGAGCCGCACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAATATGGCTTGTTCCTCGGCACCGCGCATCCGGCGAAATT + 00,,5*H9G(15@9L/*?E.'?FH37DI)>*@;1-@&)/(7-*L*E*33(@?M4NL@KHM(2&L7'5D6LJ4N<2DE37L9/L>;?3HJBD.DE/3/G'4HF;JH'=-: @724 GCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAATATGGCTTGTTCCTCGGCACCGCGCATCCGGCGAATTTAAAGAGAGCGTGGA + 0G;DN&CI)B73D)(E)>DNM6(E.)'I>B;3)B-MKJ<.:*H,*0D@/'/)LE;*38>G&.(5F:F/KM4A.K+I:LF2L7 @725 CACGCTGCCGTAGCTTATCGTGCGCTGCGTGATCAGTTGAATCCAGGCGAATATGGCTTGTTCCTCGGCACCGCGCATCCGGCGAAATTTAAAAGAGAGCGTGGAAGC + 0003&@;+:8/'@:E<2.GJ.+?CFI.M0E.3E?&D>GD::?&:'(85=,J1710CA67*3E=M9J0@D0'.@>GD4'*-;.CAMH8:)J/E+;'+L.@J6.:H6HAN @728 TTGTTCCTCGGCACCGCGCATCCGGCGAAAAATTTAAAGAGAGCGTGGAAGCGATTCTCGGTGAAAACGTTGGATCTGCCAAAAGAGCTGGCAGAA + 0000.9FBM*8*8B)58I;=.J?5A16.K@41)*-N=I>'@HC96+.AJ)NC?K*/CC60,1G1):(N&18.;M''7JHC0/,1*1;2)E0/6D@4'0'+:=2N>B9:+G('1& @730 GGCGAAAATTAAAGAGAGCGTGGAAGCGATTCTCGGTGAAACGTTGGATCTGCCAAAGAGCTGGCAGAACGTGCTGATTTTTACCC + 000&K+@L:AK+G8<&5(:44(J:')L-8>&E(/394EN6-;N/F;;-1<.9,99&4HM(0?<:FA:H-*>3B5I*:J,:.G?13> @731 GTTGGATCTGCCAAAGAGCTGGCAGAACGTGCTGATTTACCCTTGCTTTTTCACATAATCTGCCCGC + 000000'?=CAH-MIGKA3(*-14IJ,:LH+9.5;M<4H:K/ME'@@CJC-;CAD6AD6 @743 ATTGAGATAATGAATAGATTTTACTGATGATTCATCATCAATTACGCAACGCAGCAAAATCGGCGGG + 00-0DN?GG'C:<>@H')+>''D89MML;K,,L;4.457>,HJ;7L?M67G>BN/BN:36*KJ+@HB @747 AATCTATTCATTATCTCAATCAGGCCGGGGGTTGCTTTTTTATGCAGCCCGGCTTTTTTATGAAGAAATTATGGAGAAAA + 00000<6:)LAM')E67&=4N'4,93JMFK&*55&7E-&&H?B+>@A,G/02:BG1I8DHALD.'&>+5'460LL(L7&; @755 TATCCGGAGATTACTCGATGAGAACGGCGGTTGTTATTCTCCGCAATCCTAATCTCTAAGTTACCGCATTATTGAGAATTCTC + L2DB85E-9;,41'03=?+=>5)4@2=8D>GI5B7.M3D.'2=&60)4HI1.&LIH3*6N.4/N4'A,1,CN--)2DMH.4/. @756 TGCGGTAACTTAGAGATTAGGATTGCGGAGAATAACAACCGCCGTTCTCATCGAGTAATCTCCGGATATCG + 8=3GA+MK'C./E/*<)I968-J,&CH89I+)&>'/H>@:EH&5*/>D101>8L-I;F.?8K'CN3G&?.4 @759 CTCCTTTATCATTGCCCCGTTATGGGTCGATATCCGGAGATTACTCGATGAGAACGGCGGTTGTTATTC + 05+KB?$?)_ë\}r~>q6|(IPZ!Z_g 2ËtЫ 9=8ϸN{ArjF 9н-|ARS9*O v:J-Ԗs4'VZF@QlG3-cq;5j&hM*TۤDR?:̈́|Ȣ,IaIP-Ap./A=*gҕ575TA}0mf;7*$hB:sT!Dmwaʃ>[o`e\smallgenome cgatcgatcgatcgatgctagctagctagcttatatatatgagggggcatgctagctagcgcatgcggcggcgcgatcgatcgtagctagctagtcgtagggcc genometools-1.5.1/testdata/identity_score_matrix000066400000000000000000000022001211610345200222020ustar00rootroot00000000000000 A R N D C Q E G H I L K M F P S T W Y V B Z X A 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 R 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 N 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Q 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 E 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 H 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 I 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 L 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 K 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 M 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 F 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 P 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 S 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 T 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 W 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 Y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 V 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 B 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 Z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 genometools-1.5.1/testdata/illegal_is_circular_value.gff3000066400000000000000000000001421211610345200236050ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 . + . ID=gene1;Is_circular=xxx genometools-1.5.1/testdata/illegal_uppercase_attribute.gff3000066400000000000000000000001401211610345200241620ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 . + . ID=gene1;Undefined=xxx genometools-1.5.1/testdata/inconsistent_sequence_ids.gff3000066400000000000000000000001671211610345200236770ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 . + . ID=gene undef . exon 1 1000 . + . Parent=gene genometools-1.5.1/testdata/is_circular_example.gff3000066400000000000000000000003561211610345200224420ustar00rootroot00000000000000##gff-version 3 # organism Enterobacteria phage f1 # Note Bacteriophage f1, complete genome. J02448 GenBank region 1 6407 . + . ID=J02448;Name=J02448;Is_circular=true; J02448 GenBank CDS 6006 7238 . + 0 ID=geneII;Name=II;Note=protein II; genometools-1.5.1/testdata/is_circular_example_with_sequence_region.gff3000066400000000000000000000003741211610345200267300ustar00rootroot00000000000000##gff-version 3 # organism Enterobacteria phage f1 # Note Bacteriophage f1, complete genome. ##sequence-region J02448 1 6407 J02448 GenBank region 1 6407 . + . Name=J02448;Is_circular=true J02448 GenBank CDS 6006 7238 . + 0 Name=II;Note=protein II genometools-1.5.1/testdata/lua_aaseq.fas000066400000000000000000000000621211610345200203010ustar00rootroot00000000000000>seq1 MVHFTAEEKAAVTSLWSKMNVEEAGGEALG >seq2 KMNAVE genometools-1.5.1/testdata/lua_dnaseq.fas000066400000000000000000000000731211610345200204640ustar00rootroot00000000000000>seq1 agtccagctgtcagctagcgggcccgatgatatttt >seq2 gtgctgtac genometools-1.5.1/testdata/marker.fas000066400000000000000000000015561211610345200176400ustar00rootroot00000000000000>gnl|dbSNP|rs1327328|allelePos=201|totalLen=701|taxid=9606|snpclass=1|alleles='C/T'|mol=Genomic|build=127 GTAAAAGATA AAAGTTCCAC TACAATGGAG GAATAATATC CATCGATTTT TTTCACAGAG GATGTCTGTC GTTCTTAAAA CTCAGCTTTT TATTACTTCC AAGTCATGCT AGTATTTATC TTATTCTGTT TACATTTGTA TTGATATGAC CAGTGTAGCT AGGAAAATGT GAACACATGT AAGAATGTAA CTTTAGGCTG Y GAAACTGGAA GCAGAAATTC TGTGATGCAA GAGTCACATT TTTTCAAATG TATTCccatg tgtcattaag tcttaagatg ccatcgattg taagacagac cattattata ggtaatacta agaaaTTTTT AAATGCAGCT TATTAAAAGT GAATCACTTG AAAGACACCT TAAATATAAA AACTATACAC AACAAAGTTA AGGGAATATC ATAAATAATG GAAAATTGTT TTCAAATAAA TGTTAATatt tctaccagaa atgcatcaga ggaccaggtt ctatttgtcc atcccaatag tagaggttgt ctcactttaa ttttggccaa tcttttcagt gtataattgt gtttctttgt agctatattt acatttttct tcttactgat gaattaaagc ataccttcac atgtgtatta gtcattcatg tttcctcttc tgtgggttat acattttctt taacacactt ttattgacat agttgttccc ttactgttTT genometools-1.5.1/testdata/marker.out000066400000000000000000000000271211610345200176660ustar00rootroot00000000000000> TACAATGGAGGAATAATATC genometools-1.5.1/testdata/matchtool_blast.db000066400000000000000000000316711211610345200213530ustar00rootroot00000000000000>gi|321400135|ref|NG_001764.3| Mus musculus olfactory receptor 400, pseudogene 1 (Olfr400-ps1) on chromosome 11 ATCACTTTTAAAACTATTTCTTTATGTGCACTATTTTATTATTACATCAATTAAAGGGATCAAAAGGAAG AGAGAGAATGAGATGAGTTCCTCTTTTAAGAATTATAATTCCATGTTTTCCAGCAGCTATGATTTAAATT TCTTCAATTCACTGAGAGGTCTTGCTATTTTCCTCCATATGTGTATCTTTAAATGAACTCATGCAGCCAA AGCTGAGAGCCAATGAAACCACTGTTACTGAGTTCATACGCCTAGGTTTGATGGAGACACCAGAGATGTG GCCAGTTGTCTTCATACTCTTCCTCTTAGATTATATGACTACAGTTTAGGGTAATTTGAGCATCCTAGCC TACTGTCTTGGTGGAACCCAAACTGCACACCCCCATGTACTTCTTCCTGAGGAATCTGTCACTGATGGAT GTGGGGTGCATCAGTGTCACTATTCCCTCCATGTTGGGTCGGCTCTTAGTCCACAAACCTACAATTCCAA ATGGAGACTGCCTCACACAGCTCTTCTTCTTTCCTCTGCTGGCTGGGGTTGACTGATTTCTGTTGACAGC CATGGCTAATGAGCGCTTCCTGGCCATCTGCCCCTCACTTGTACCCTCCTTCAGCCTAGGCAGACTGGTT CAGACCGTTCACCACTGAGGCTGGGCCACCTGCTGTGCTGCTTCTCAACACTCCCCTTTGATGTTACACT GCCTGCCACCTGCCCTGAGGCCGAACTGGTTCTCCAAGATTTGCCAGAGTTTGTTACAAACTGTGAATTT GGCGAGTTTCTGCTAAAAGGCTGTTCTGAAAATTTCACATCTCTACATCAAGAAACTTGATGTGACTGGG GATGAGCTTCCCTCTTTATAAGCACAGATTTTATTATTAAACACTTGAACCTTGAACAGACTAGCATGTC TTGGTTCCATTATTTCTGTACTCACCTAGATTCCCCCTTCTCTTTCAGCTCCAAGATGCCTCCCAGGCTC GAACCCAGACATGAGAGCTGCAGGCTGGCCCCAACAAGTTTGCACCCAACGTGGGACCTGGGAATGGCAA AAGATGCTGGAAGAAACACTGCTGGTATGGAGCTCCACGGATAGGAAAAAATTAGAAAATTTGTACTGGA ACACGGAGAAGCTGTGGTACAGTCTGAGCTGGAACAGCATGCTAACCCATGTGCTGGATTCGCTCAGGTT CAGCAGTGATATCAGGATCTAGGAACACTACAGGCAGTCGGCCGCAGCTTCCAGAAGCTGCTTTTTAGGC GAAAGGAATAAGGGTTTAAAAGAATGAACAGGTGGATGGCCGCAGTCAGAAACTGCATCAAGCGGGAGGA AAGTTGGGTTTTGAAACTCTCCCAGAGACAGAGAGAAACGGGGATGCCCTGCTTTATTCTCTCTGGGCCC TACAGAAGAAGTTCTCTGCCCTCTTTTTGTTTTTGTCTAAGGTCTTGTCTAATGTCTGGTGCACTGGTCT GTTCATGTGTTCAACTCATGTGTGTTCGTGTCTTCTCATCTGAATGACTGAATGTTCTGTTTCATGTTGG AAAATAAAAGATGGCTAAAACTTTCTCTGCTGGTATAGCAAAGCTGAGAGTGGCTCACACTTTGACTGAG AATCAGGCACAGCAGGAGGGCTCCTGCTAGAAAAACTGTTTCTTAAGAAAGGGAATCTGCAGCCTCATGG ATTTGGGGTGAAAAAGCTGATAGATGGTTTTTTCCTAAGAAAATTCTCTGTATTTGTGATTATTGCGTTT AGCTAATGACAAAGTGCTTTTTATTTTATAATTAGAGCTAGAAAAATTAAAATTCTCTGATTGGTCTAAG TGTAGCCGCTTCGTTTGGTATCAGCTCATAAGTTATTGGTTAGGATTAAATAATTGTAACATCGGTAACA GAAGGTTAGCCTTAAGTTGGCAACTCAGGAGTCTTTTCAAACACATGGCATAAGCGGGCCAAAAAACTGG GCCTCCTAAGATTCTTCTAGCTGAGATAATATTTAATGTGATTCTTATCCTAGAAAGTAAATTTAAAGAA AAGATTTAAAGCAATGTCTCTTTAATGAAGCATTAAAGCTTGCACTGTCATGCATTCATGGGTATAAATT GGCAGCCAAATCTTGCAATGTGGTAGTGAAGATTTAATGTTGATTCTAAAGTGATATATTGCTTTGAAAT TGGGTATTGCTTTCCCAAGGCTGTAGATATTATTCTAACGTTGCATAAGAAACTTAAAAATCATAGTTAA AAATTGCCAGTGTTCCTTTAAGTGCAGCTGGCAGTTTGATTGCAAATTTAAGATTTTATACTCACCCATA TATTGTTAATTAAGATAATTACAAGAGTAATCATCTTATGAGAGCACTAACACAGCTCTCTGTGGCTATA CAGCCATACAAAGCTCAGGGTAGCCTCAGCGAGGTTTGTGTGACTTTCTTTTGTTTTGCAAACAGTATGC CTAAGGAAGTTCTTGAAACTTGCCTCTCCTTGCCTCTCAAGGGAAGTTACTTTAAATCTTTGCTCTAACA CAGGCGCTTTTAAGTTCTGGGGAGTAACTGTTGCTCCAGAAAAGATTCAGAGGCAATATATTTTTAATTC TTATGGTTTTAGTTTACTACAGAAGGCTTTGCAGAAAATAAAGAAAGCATTTATAATTGTTATCAATTAT AATCAATGGTAATTAAATATTAGCTGCCCATTTTAGTTAATGGTTATTAAATGTGCCCACAGCAACTCTT TAGCAGGCTGCATTGTGACTAAGGGTGTGAAATCCTTAGCTGTCATTAAGCTAACCCTAAGCCTAGCTGC TTTATCTTTACTGTAAACATTTATCTGGTTCCTGTAGTCCTTTTGAAGTCATTCCTTTGTTTCCTGTCAG GTAACTTGAATGTACTTTGCCTGCTGTGACTTCCTGCCCCCTTTATTTTCTGTATTCTTTGGCAAGAGAA AACATTATTTGTTTTCTGCTGCTGGCTGCTGCGGGGCGGGGCCTTGAGGCACACAGATTTTCCTGAGCAT GGTGGCTCAGAAGGCTGTCAGAAAGCTGGTGGCTTTGTAGCAAACTCAGGAGAGGGCCATGCTCACCATT GCCCCCATGAGACTCCACCCATCCCCGCCTGGGTAGCCATATTTTTCCACGCTAAGACTCGGGGTGCTCT GCCACTTGGGCTTTCTAGCCTACAACAGATTGGGCCACCTTCAGCCTCTTCCGCCTGAGAAGAAGGCCGA GGGTGGGCAAGGCCGAGGTAGCGCTCACCTCAAAACACAGTTTCAGCATCCTATTAAAACTGCTATGGTG CTAATAAAGAATTGTAAGATAAATTCGTATATTTTAGAAAACTTACAACAAAAATTGTGTTTTAAAAACC GACTAAGTGTCTGTTCCTTGTTCCAAACAGCAATTAATTTGGTAATTACAGATCTATTGCATACCATCAT TTTGAATAAAATTGACAATCATTATCCCAAAGATAAGTTAAAAATTTGTTTTTATGCATGCTTCTGTATC TTCTATAAATTCATGCATGCATGCATTCCACTTACTGTGTTTAAAAACAACCCCTCTATGGGAAATGAGT AAATGTGAATTAGATCACACGTTTATTCTTTTGAGTTTCCTCCTGTTTCAGCACAGATAATTAAGTTGTG TGCTGTAGATGGTGTTTTAAAATGCTGAACAATCAAACCTTAATTTGTATATTAATAGTCAATATTATAT CTCAGAGCTCACAATTGCTTAAGATTGTTCGTCCCTTCTCAAATTTGCAATTGCTTATGTATATACAACT CATAAGTAAAAATGCTAGATTTATGTCTCAGGCAGTCTATAGGTCCTACATATAAGATAGATTGGATATA TAATCTCGTTCTTTATATATTCAAAACAGTTATGGTTTAAGATAATATTTTAGTATTCTTGGAAATTGTG CATGTCAAATTGTAAAAAATTCTTTGCTCTTAGTGTCCTAGGTTACTACTTGTTTCCAAATAATAGTGTT AATTCTTGAGGACTTATACTTAATAAAATGCTGCAAATAAATACTCTTATTTCTGATTTAATAAATAAAT AAATTATACACATGTGACTATTAATAACTTGTCAAGCTTTCTAGTTACAACTGCTCTTTAAGAGAAACAA TTAAAAGTGCAATTAGTCACTGCCCATGTTACATTAAAACTGACTATAACAGTCAAGTATTTAGATGTCA ACAAATTATTAATTCTCAAGAACAAGGTATTGTGGAACTTTAAAACTTTAGCTTCTTAAAAGACAAAGAA GGGGGAAATTATATCCCCGTGCATATTATTTAATGTATTCCCATTCACATTATTTAAATCATACTTTTAT TTTAGAATTTTGAAATTTAGATGTCAAAGAACTTAATAAATGCCTTATATTATCTTAAAAGGATCTACTT ATTGGCATATGGCTTGATCCTGAACAGCTACCTTATTAGGAAAGGAAAAAGCATAGGTTCTCTCCACAGA AGCATGATGGCTAATTCATGTGACAAGCTGACAGGTGAGTTTGCTCAGTGCCCTGACTGTAGTGACAAGG AAGCTGAATTGGGCACATGTTTTCGACCCATCCTTGCTTGCCATTTTTCCAGTTTAGACAAGCAAAGCTG CCTTGCTTCAAGCTTTTTAACTTTATGGTAAAAAGAACATCAGAGACTGTGTAATCTGACTTAGAAAGAT TAGTCATATAATAGAGTTATAATGATTCTTCTCTTTCCTTCAATGTGACCAGTTATTCTAACTCAATCTT AGACTGGTCTAGTACTAATTCCAATATTAGAGATACCTATTAAAGATAGCTAAAAATCTTAATTACCTAG CAAAGTTAATTTGGAGCACAGTCTCCACTTCCAGAGAATCTCTGGCTTTTCTGCTAATCCTCAAAGCCAG ATCCCCACACCGGGAGGCCAGAGCCTGAGTTTGATTGTTGCTAATTTGCAACTGAATAAAGTACCTGGGC TTCCACAAAGAAGCTTTTATACTGTTGTTTTTCACTGCCCCACCTTTGTTTCTCAAGCAGGTCAGCCATT CTTTTCAGCCTGACTACAGGAGATGTAAAGCCTCACCTCCAACAGTGCAGATGGCAGTTATTAATCTTCA TAAAGAAGCATTTTAAGTACATATTGTGGCCTTCATCTGATTTGGGAATAAGGTGTGCTATGAGGGCCGG TTAGTCAATGACGGACAACCAGATTTCGGAGCCATAACAATCTAAGACAGAGGTACATGCCAAAAGGCCA TGGCTGTTGATAACACACCACAGAACCATGTTTGTGTGAAATATAACACAAACTAGCTGCATGTAGCCTC CAAGACAGAATTAGATGGTTCGGGAAAATCTGAGATCCTAAGGCAGGCACGGCCGCCAGCCACCATAACT CCCAGGCAAGACTATAGAGCATAAATAAATTTTATGCCTCAGTCCAGTTTTTTTAATATTATTTAAAGGG GGGAAAATGTACCTCCTTCAGCCTAGGCAGGCTGGTTCAGACCATTCACCACTGAGGCTAGGCCACCTGC TACCCACCTAGATTCCCTCTTCTCTTTCAGCTCCAAGATGCCTCCCAGACTCGAACCCAGCCTCAACACT CATTTACAGCACCCAAATGAACCACACCATCCAGAGGATCTTGGTGGCCTCATCGTGGGTTTGTTCCTTC AGCAGTGTACTTACTCATACTGTGGCCATATCCACACTTCACTTCTGTGGTCTCAATGTGGTCAATAACT TCTACTGTGACCTGCCTCAGCTCTTCCAACTGTCCTGCTCCACTACCCAGCTAAATGAGCTGCTGCTCTT TGCAGTAGGTTTCCTAATGACAGAAACCTCCATGGCACTCATTTTTACCTTTTACATCTATGGGGCAGTT GCAATTCTGCAAATCCGCTCTGCTGAAGGCAGGTAGAAAGCCTTCTCCACATACAGCTCTCACCTCACTG TGGTTGCCATATTCTATGGCACAGGTATCTTTGCCTACATGAGTCTCAGGTCCATCAAACTTTCTGATAA TGATAAAGCTATTGGGATTTTCAACACTGATGATCAACCCCATGCTAAACCCACTCATCTACAGTCTCAG AAACCCTGATGTGCAGGCTGCCCTCTGGAAGGTACTCACAGGGAAACAGCTATCACATTGAGACCTCAAA GCTTCTTCCACCTATTTCTTCTAAAACTAAAGCTGTATATTAAGGTTTCCTGTGGTTCAACACTAGAACA AATTGTTCAACATTGTTTCCAATGAGAAATGTTATGATGGAAAAGAGCTTCCCTCAATTATCATCTGCTG AATGTTTTAATTTTTTGAAAGAGAGGAATTTGTAATCTAAACATTTAAATA >gi|321400152|ref|NM_001025241.3| Mus musculus Ssty2 family member (LOC434960), mRNA GGAGGTGCTAGAATCCATTCAAGGAGCTCAAATCTGTTTAGCATAGTCTTCTTCACCTGCTCAGAAGTTC TCGTAGAGAAGAGTCTTGGTCCAGCATTCACTCCCAACCCATAACCATTGCCCATCAGGAATTCATATAT ATGACAGAGGCAACAGCATTGTGTCTGGTGTAAACGGGCAAGATCTTCAGTCCCAGGCAATGAGCAAGTA TGATATTTGAAGGGAATGGAAGCCACAAGACAGTGTGATCTACCACAACAGGTCTACAGCCAGGTAGAAG ACAATACATCTGAAGAGTCTGAGCATGACATCACTCAAGAAGAAGAGTAGGAGGAAGCCTTCTTCCCAGG CCCTGGGGAATATTGTTGGCTGCAGAATTTCTCATGGGTGGAAGGAAGGTAATGAGCCTGTCACCCATTG GAAGGCCATCATTCTAGGTCAACTGCCAACAAACCCTTCTCTTTATTTGGTGAAGTATGACGGAATTGAC AGTGTCTACGGACAGGAGCTCCACAGCGATGAGAGGATTTTAAATCTTAAGGTCTTGCCTCACAAAGTAG TTTTTCCTCAGGTGAGGGATGTCCACCTCGCAGGCGCACTGGTTGGCAGAGAGGTACAACACAAATTTGA GGGGAAAGATGGCTCTGAGGACAACTGGAGTGGGATGGTGCTAGCCCAGGTGCCATTCTTACAGGACTAT TTTTACATTTCCTACAAGAAGGATCCGGTCCTCTACGTCTATCAGCTCCTGGATGACTACAAGGAAGGTA ACCTCCACATCATTCCAGAGACCCCTCTGGCTGAGGCGAGATCAGGTGATGACAATGACTTCTTAATAGG TTCCTGGGTGCAGTACACCAGAGATGATGGATCCAAAAAGTTCGGAAAGGTTGTTTACAAAGTTCTAGCC AATTCTACTGTGTACTTTATCAAATTTCTCGGTGACCTCCATATCTATGTCTATACTCTGGTGTCAAATA TCACTTAAATTTAAAAAAATCACAAAGTACAGAAATGTAAACTTATAGGATTGAAAAAAAATGTTTGTTT TCCTGTGTTGGGTACCTATGGGTCTTTGACAACCTCAGTATCTTTGTCAATAAAATTTGTTTTGTTCTAA AAA >gi|321400062|ref|NM_001202523.1| Homo sapiens discoidin domain receptor tyrosine kinase 1 (DDR1), transcript variant 6, mRNA AGTGCGGAGGAACTGAGCCCCGGGAGGAGGTGCTCCTGTGCAGCCCCACTGAGTCAGCTCATCTATCGCC TGCCCTCCACCTGGCCAGTCCCTGCGGGCATCTAACTGCTAAGCCTCCGCTCAGCCAACACCCAGTTGGT CAGTCTGGTCACAGTCCAGCAAAAAGAGGGACTGCCACTCTAACCCACCAGTGACACCACTCTTCCCGGC TGGATGGTCAATTAGCTCTGGCATGAGAGAATGTCACTGCCGAGATGCTGCCCCCACCCCCTTAGGCCCG AGGGATCAGGAGCTATGGGACCAGAGGCCCTGTCATCTTTACTGCTGCTGCTCTTGGTGGCAAGTGGAGA TGCTGACATGAAGGGACATTTTGATCCTGCCAAGTGCCGCTATGCCCTGGGCATGCAGGACCGGACCATC CCAGACAGTGACATCTCTGCTTCCAGCTCCTGGTCAGATTCCACTGCCGCCCGCCACAGCAGGTTGGAGA GCAGTGACGGGGATGGGGCCTGGTGCCCCGCAGGGTCGGTGTTTCCCAAGGAGGAGGAGTACTTGCAGGT GGATCTACAACGACTGCACCTGGTGGCTCTGGTGGGCACCCAGGGACGGCATGCCGGGGGCCTGGGCAAG GAGTTCTCCCGGAGCTACCGGCTGCGTTACTCCCGGGATGGTCGCCGCTGGATGGGCTGGAAGGACCGCT GGGGTCAGGAGGTGATCTCAGGCAATGAGGACCCTGAGGGAGTGGTGCTGAAGGACCTTGGGCCCCCCAT GGTTGCCCGACTGGTTCGCTTCTACCCCCGGGCTGACCGGGTCATGAGCGTCTGTCTGCGGGTAGAGCTC TATGGCTGCCTCTGGAGGGATGGACTCCTGTCTTACACCGCCCCTGTGGGGCAGACAATGTATTTATCTG AGGCCGTGTACCTCAACGACTCCACCTATGACGGACATACCGTGGGCGGACTGCAGTATGGGGGTCTGGG CCAGCTGGCAGATGGTGTGGTGGGGCTGGATGACTTTAGGAAGAGTCAGGAGCTGCGGGTCTGGCCAGGC TATGACTATGTGGGATGGAGCAACCACAGCTTCTCCAGTGGCTATGTGGAGATGGAGTTTGAGTTTGACC GGCTGAGGGCCTTCCAGGCTATGCAGGTCCACTGTAACAACATGCACACGCTGGGAGCCCGTCTGCCTGG CGGGGTGGAATGTCGCTTCCGGCGTGGCCCTGCCATGGCCTGGGAGGGGGAGCCCATGCGCCACAACCTA GGGGGCAACCTGGGGGACCCCAGAGCCCGGGCTGTCTCAGTGCCCCTTGGCGGCCGTGTGGCTCGCTTTC TGCAGTGCCGCTTCCTCTTTGCGGGGCCCTGGTTACTCTTCAGCGAAATCTCCTTCATCTCTGATGTGGT GAACAATTCCTCTCCGGCACTGGGAGGCACCTTCCCGCCAGCCCCCTGGTGGCCGCCTGGCCCACCTCCC ACCAACTTCAGCAGCTTGGAGCTGGAGCCCAGAGGCCAGCAGCCCGTGGCCAAGGCCGAGGGGAGCCCGA CCGCCATCCTCATCGGCTGCCTGGTGGCCATCATCCTGCTCCTGCTGCTCATCATTGCCCTCATGCTCTG GCGGCTGCACTGGCGCAGGCTCCTCAGCAAGGCTGAACGGAGGGTGTTGGAAGAGGAGCTGACGGTTCAC CTCTCTGTCCCTGGGGACACTATCCTCATCAACAACCGCCCAGGTCCTAGAGAGCCACCCCCGTACCAGG AGCCCCGGCCTCGTGGGAATCCGCCCCACTCCGCTCCCTGTGTCCCCAATGGCTCTGCCTACAGTGGGGA CTATATGGAGCCTGAGAAGCCAGGCGCCCCGCTTCTGCCCCCACCTCCCCAGAACAGCGTCCCCCATTAT GCCGAGGCTGACATTGTTACCCTGCAGGGCGTCACCGGGGGCAACACCTATGCTGTGCCTGCACTGCCCC CAGGGGCAGTCGGGGATGGGCCCCCCAGAGTGGATTTCCCTCGATCTCGACTCCGCTTCAAGGAGAAGCT TGGCGAGGGCCAGTTTGGGGAGGTGCACCTGTGTGAGGTCGACAGCCCTCAAGATCTGGTTAGTCTTGAT TTCCCCCTTAATGTGCGTAAGGGACACCCTTTGCTGGTAGCTGTCAAGATCTTACGGCCAGATGCCACCA AGAATGCCAGGAATGATTTCCTGAAAGAGGTGAAGATCATGTCGAGGCTCAAGGACCCAAACATCATTCG GCTGCTGGGCGTGTGTGTGCAGGACGACCCCCTCTGCATGATTACTGACTACATGGAGAACGGCGACCTC AACCAGTTCCTCAGTGCCCACCAGCTGGAGGACAAGGCAGCCGAGGGGGCCCCTGGGGACGGGCAGGCTG CGCAGGGGCCCACCATCAGCTACCCAATGCTGCTGCATGTGGCAGCCCAGATCGCCTCCGGCATGCGCTA TCTGGCCACACTCAACTTTGTACATCGGGACCTGGCCACGCGGAACTGCCTAGTTGGGGAAAATTTCACC ATCAAAATCGCAGACTTTGGCATGAGCCGGAACCTCTATGCTGGGGACTATTACCGTGTGCAGGGCCGGG CAGTGCTGCCCATCCGCTGGATGGCCTGGGAGTGCATCCTCATGGGGAAGTTCACGACTGCGAGTGACGT GTGGGCCTTTGGTGTGACCCTGTGGGAGGTGCTGATGCTCTGTAGGGCCCAGCCCTTTGGGCAGCTCACC GACGAGCAGGTCATCGAGAACGCGGGGGAGTTCTTCCGGGACCAGGGCCGGCAGGTGTACCTGTCCCGGC CGCCTGCCTGCCCGCAGGGCCTATATGAGCTGATGCTTCGGTGCTGGAGCCGGGAGTCTGAGCAGCGACC ACCCTTTTCCCAGCTGCATCGGTTCCTGGCAGAGGATGCACTCAACACGGTGTGAATCACACATCCAGCT GCCCCTCCCTCAGGGAGCGATCCAGGGGAAGCCAGTGACACTAAAACAAGAGGACACAATGGCACCTCTG CCCTTCCCCTCCCGACAGCCCATCACCTCTAATAGAGGCAGTGAGACTGCAGGTGGGCTGGGCCCACCCA GGGAGCTGATGCCCCTTCTCCCCTTCCTGGACACACTCTCATGTCCCCTTCCTGTTCTTCCTTCCTAGAA GCCCCTGTCGCCCACCCAGCTGGTCCTGTGGATGGGATCCTCTCCACCCTCCTCTAGCCATCCCTTGGGG AAGGGTGGGGAGAAATATAGGATAGACACTGGACATGGCCCATTGGAGCACCTGGGCCCCACTGGACAAC ACTGATTCCTGGAGAGGTGGCTGCGCCCCCAGCTTCTCTCTCCCTGTCACACACTGGACCCCACTGGCTG AGAATCTGGGGGTGAGGAGGACAAGAAGGAGAGGAAAATGTTTCCTTGTGCCTGCTCCTGTACTTGTCCT CAGCTTGGGCTTCTTCCTCCTCCATCACCTGAAACACTGGACCTGGGGGTAGCCCCGCCCCAGCCCTCAG TCACCCCCACTTCCCACTTGCAGTCTTGTAGCTAGAACTTCTCTAAGCCTATACGTTTCTGTGGAGTAAA TATTGGGATTGGGGGGAAAGAGGGAGCAACGGCCCATAGCCTTGGGGTTGGACATCTCTAGTGTAGCTGC CACATTGATTTTTCTATAATCACTTGGGGTTTGTACATTTTTGGGGGGAGAGACACAGATTTTTACACTA ATATATGGACCTAGCTTGAGGCAATTTTAATCCCCTGCACTAGGCAGGTAATAATAAAGGTTGAGTTTTC CACAAAAAAAAAAAAAAAAAA >gi|321267542|ref|NM_001202506.1| Danio rerio brain specific kinase 146-like (LOC791840), mRNA GCAGCGGAGAGACAGGATGATGATGATTATGATTATGATGATAATGATGAAGATGAGGATAATTATGTGA TATCTGTATGTGATTTATCCACCGGGGGAACAGCGGAGATTCACGGGAGCGGTTTAACGTATTGTGAGGC TGTCTGTGGGCCAGGATGAGCTCGTCTCCGGTGGTTTCCCATGACATTCTGGAGGAGCTGCAGCTCTACA CCGCTCAGAACCTGGAGAAGCTGGAGGTCAATAAATACTATGAGGTGATCCGGGAGCTCGGGAAGGGCAC TTACGGGAAGGTGGACCTCGTCATTCATAAGATCAGAGGTAGCAAAATGGCTCTGAAGTTTCTGAAGAAG AAAAGCACCAAGCTGAAGAGCTTCTTGCGGGAGTACAGCATCTCTCTCTATCTCTCTCCATGTCCCTTCA TCATCAACATGTTCGGCATCGCCTTTGAGACAGACGAGTATTATGTGTTTGCGCAGGAATACGCTCCTTC TGGGGACCTGTTTGACATCATTCCACCACAGGTGGGTCTGCCAGAGCCGGTGGCGAAGCGCTGTGTGCAT CAGGTGGCCATCGCTCTCGAATACCTGCACTCCAAAAAACTGGTGCACCGAGACATCAAACCCGAGAACA TCCTAATCTTCGACAAGGAGTGCCGTAAGGTCAAGCTGTCAGACTTCGGGATGGCGCGGCGCGCCGGTTC ACCGGTCAAGCGTGTTAGCGGCACAATCCCATACACGGCTCCAGAACTCTGCGATACGTCCAAACACGAC GGCTTCTGCGTGGACTACAGCACCGATGTGTGGGCGTTCGGAGTGCTGCTGTTCTGCATGCTAACCGGGA ACTTTCCATGGGAAAAAGCGATGCCGTCTGATACTTTCTACGAGGAGTTTGTGCGCTGGCAGAAGCGGCG GACGGGTGCGGTTCCGTCACAATGGCGTCGATTTACAGACGAATCCCTGCGCATGTTTCGAAAGCTCCTA GCATTGGAGCAGGAACGCAGATGCAGCGTCAAGGAGGTTTTCGCACATTTAGGCCACCGCTGGATGCTTG ATGGAACTAGCGGAAACCATCATCAATCCGTGCTCAACTCTTCATCAGAGGAAGACGAATTGCTTGTGGA TCGTATGAAGCAGCAGACCTTATCTCCGACAGCTAACACGAGCAATGCTATTGAGCCCGGATCGGCTAAC CACTTCACATCTGTGTCCACCAATAGCTCGGTGTCTTCCACTAACAGCTATGAGCGTTCGGCTAGAGACA GTCCTCCGACTAGCAGGATCCTGGTCACGACGCCTATAGAAATCTGCGTCTAAATGCACAGCTGATGAAA TTAACATGCGCACAAGCTGACGCACACTCCTGTGA genometools-1.5.1/testdata/matchtool_blast.match000066400000000000000000041440711211610345200220650ustar00rootroot00000000000000# BLASTN 2.2.24+ # Query: test.2 # Database: /home/stud2009/skastens/Downloads/ncbi-blast-2.2.24+/bin/bla.fas # Fields: query id, subject id, % identity, alignment length, mismatches, gap opens, q. start, q. end, s. start, s. end, evalue, bit score # 27 hits found test.2 test 100.00 210 0 0 1 210 351 560 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 45 53 3481 3473 8.9 17.7 test.2 test 100.00 9 0 0 25 33 4286 4294 8.9 17.7 # BLAST processed 1 queries test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 210 0 0 211 420 1121 1330 2e-111 388 test.2 test 86.96 23 2 1 397 419 154 175 0.053 25.1 test.2 test 93.75 16 1 0 184 199 1429 1414 0.053 25.1 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 81.48 27 3 2 336 361 1571 1596 0.68 21.4 test.2 test 100.00 10 0 0 34 43 393 384 2.5 19.6 test.2 test 100.00 10 0 0 109 118 1027 1036 2.5 19.6 test.2 test 100.00 10 0 0 249 258 1168 1159 2.5 19.6 test.2 test 100.00 10 0 0 305 314 1224 1215 2.5 19.6 test.2 test 100.00 10 0 0 274 283 1801 1792 2.5 19.6 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 100.00 9 0 0 375 383 1014 1006 8.9 17.7 test.2 test 91.67 12 1 0 111 122 1035 1046 8.9 17.7 test.2 test 87.50 16 1 1 231 245 1500 1515 8.9 17.7 test.2 test 100.00 9 0 0 190 198 2102 2110 8.9 17.7 test.2 test 100.00 9 0 0 49 57 3437 3445 8.9 17.7 test.2 test 100.00 9 0 0 152 160 1010 1002 8.9 17.7 test.2 test 85.00 20 3 0 36 55 1450 1431 0.68 21.4 test.2 test 92.86 14 0 1 45 57 1915 1902 2.5 19.6 test.2 test 92.31 13 1 0 385 397 1979 1991 2.5 19.6 test.2 test 100.00 10 0 0 205 214 2010 2001 2.5 19.6 test.2 test 100.00 10 0 0 102 111 2693 2684 2.5 19.6 test.2 test 100.00 10 0 0 66 75 4550 4559 2.5 19.6 test.2 test 84.21 19 2 1 125 143 18 1 8.9 17.7 test.2 test 100.00 9 0 0 150 158 649 657 8.9 17.7 test.2 test 91.67 12 1 0 17 28 825 814 8.9 17.7 genometools-1.5.1/testdata/matchtool_blast.match.bz2000066400000000000000000000062631211610345200225550ustar00rootroot00000000000000BZh91AY&SYpQt_x0J5,?`?aԪͭ@$JQ QQL6HD 4 Ge1h`@0A I?U4$M rT|v2Lm`fs; JKx4ܼoӋ@8$'FلR#Dō.8ީ28&fȧh^ʨL)Y>Hf,%7l;<ѽ\bU%**i!`:ڥsƑ+x21RR!j$6Qk)Mj tFf&%LR҈22e7Q/rD M+i*eI^ &TDKH4!8"E$E6%MEIzZ,(7%K$)-*IwH1(*eUZIVUW4Ey{''TTEMR)*y'QI`JW(iHJrW$ބ't$ؕXlRL%LPG)'*^!%!u)P>w^%$i $%P._NDw/o9JK.9 3 I9P8T47Nu$iRg)&iI>u5*/TӤ7m_}e$njJ'by*{%%RqғǢTH(TvHY <$ ڥ3J'"#RЏR.иDf*+#*-s 8J~U~Ҳ Щ#)EbUbzbB=*d7*!TwUbW /d{f`#9]De Ji[> ܩ6)U<*U{rzCD{hYdzU{mH}#ԪE/{^ )zAU\;Y(yB^W8_P JQ{Y7P%V$\^ȶTSWҫ~;"U+,!|CPd䨝ܩګS0iE9s!0v C|uAT) dQU< i2+/ C}_jpN@£%JbUhd>]HSܩ"8CH_`7Ai@nTȦ]%>|vҚ2 `2"cCH4T*A3* ċ+:CU RTW`(q)&^u!U*C$5dhU*QG*]BA:genometools-1.5.1/testdata/matchtool_blast.match.gz000066400000000000000000000302711211610345200224740ustar00rootroot00000000000000(8MMparser_test_blast.match_WOQ`΋ (;õlw9)*#'N.V1F&y޳ /?7o/OçϟL_}zݻ:|O?ps}yoǟ~~ӿyofx?Nû?_v?7~xO7?᧿M7xsxzyǟsç?4_>|z>O?{u*W7W7?^?Lfzfx{_fn^wWǷWS75OoWL5w7~ۄ2}~jpw;y8M.~/45ӷsi棘OvƦy3Oo~ ӷq|_t=MELJ?|t^Ǜ?~wx;t on/zy8ܵ~^+nOJM}o/wi~ɛ\o阯N/[tjzgoݛm;_L7o_Ouz/χa:+o# N-W/8_awtu ;Cu~[VnymNkOǹN{SwC~]6oClin>Rǻ;yùϿD^oc?d[4?!㹝Om?v~Con=v>iyoo>xbp н͏Nn>L@x?>lY7 8}x:ͯ6M {M?|,ԓLt?oo$^7?pINz/P'˯b| LK%~>_?&|,=w7+iƉ>7_y;y'C`~[N5vOudh2N?ʽؼY1Ky׾i>;z3:pNy oC-e12eNU&/-ޖ {[Wϼ<],XCXhv%k[D;jA-H4\ë3`N%|r޲h[^mAGG?ϚM?[ļ[%?m]M^r ӹ^C1C+3MI$*<)`nYUNK9oϼߏqy>>rEEQQThd9̵Wgs9Q Z'-ō}nYs7isQ14EEQqZ ds0s07>yYItU&/-nDs>_U7isQ14EEQqZ ds0s07>yYItU&/-nDs>_U7isQ14EEQqZ ds0s07>yYItU&/-nDs>_U7isQ14EEQqZ ds0s07>yYItU&/-w#-es0'̉0ׇ>0'VyK_<}k}n劊(*"ps"?skBs97O[yQ>/)4VKǏBg]rb[x o-Ysޒyyox[X&grI̍O^s.s\[Z-amzUł>Uu#6CSQQT7I0s0s㓗Ŝ-A[Z-aF>Uu#6CSQQT7I0s0s㓗Ŝ-A[Z-aF>Uu#6CSQQT7I0s0s㓗Ŝ-A[Z-ar~7 [-0s{œxs}ksx+oi{s>罖V(*" 7,3a.49s#*AKeќsye+*D%a=:s a܈Jt>9oY4-nDs>ϚM(*$ 9bN{-0yyoq#jM(*$ 9bN{-0yyoq#jM(*$ 9bN{-0yyoq#jM(*$ 9bN{-0yyo9Wo}*k~v Ŝx.xx5VMy o-[%?m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y-ǂYs3wk[xK֜g^[-{`Z.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#je9'X|9wi[x oY6-m]Mrc٧"99,\長[rao @4@Z } yҎdyKhB-K\{xu0IO[y˙0/6Gn-x o-yKK\rYnY.ss:k@c(bhe)c^6DE'̭\罖V(*" 7,3a.49s#*AKeќs{-ϭ\QQTEE$n.Ygsՙ\hs0FTyˢ9oq#jeP1P9genometools-1.5.1/testdata/matchtool_blast.out000066400000000000000000017440621211610345200216030ustar00rootroot00000000000000query dbname2 q.startpos d.startpos q.endpos d.endpos bit score evalue ali length test.2 test 1 351 210 560 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 45 3473 53 3481 17.700 8.9 9 test.2 test 25 4286 33 4294 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 211 1121 420 1330 388.000 2e-111 210 test.2 test 397 154 419 175 25.100 0.053 23 test.2 test 184 1414 199 1429 25.100 0.053 16 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 336 1571 361 1596 21.400 0.68 27 test.2 test 34 384 43 393 19.600 2.5 10 test.2 test 109 1027 118 1036 19.600 2.5 10 test.2 test 249 1159 258 1168 19.600 2.5 10 test.2 test 305 1215 314 1224 19.600 2.5 10 test.2 test 274 1792 283 1801 19.600 2.5 10 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 375 1006 383 1014 17.700 8.9 9 test.2 test 111 1035 122 1046 17.700 8.9 12 test.2 test 231 1500 245 1515 17.700 8.9 16 test.2 test 190 2102 198 2110 17.700 8.9 9 test.2 test 49 3437 57 3445 17.700 8.9 9 test.2 test 152 1002 160 1010 17.700 8.9 9 test.2 test 36 1431 55 1450 21.400 0.68 20 test.2 test 45 1902 57 1915 19.600 2.5 14 test.2 test 385 1979 397 1991 19.600 2.5 13 test.2 test 205 2001 214 2010 19.600 2.5 10 test.2 test 102 2684 111 2693 19.600 2.5 10 test.2 test 66 4550 75 4559 19.600 2.5 10 test.2 test 125 1 143 18 17.700 8.9 19 test.2 test 150 649 158 657 17.700 8.9 9 test.2 test 17 814 28 825 17.700 8.9 12 genometools-1.5.1/testdata/matchtool_blast_corrupt.match000066400000000000000000000024531211610345200236340ustar00rootroot00000000000000gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 13 0 0 1218 1230 118 106 0.29 25.7 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 13 0 0 922 934 2847 2835 0.29 25.7 i|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 92.86 14 1 0 1153 1166 34 47 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 82.61 23 4 0 630 652 200 222 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 88.24 17 2 0 648 664 567 551 4.1 21.8 broken file gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 11 0 0 386 396 670 680 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 11 0 0 891 901 2948 2938 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 92.86 14 1 0 783 796 4891 4878 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321267542|ref|NM_001202506.1| 100.00 11 0 0 781 791 151 161 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321267542|ref|NM_001202506.1| 100.00 11 0 0 644 654 336 326 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400062|ref|NM_001202523.1| 100.00 11 0 0 725 735 2311 2301 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400062|ref|NM_001202523.1| 100.00 11 0 0 761 771 2406 2416 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400152|ref|NM_001025241.3| 100.00 11 0 0 643 653 649 639 4.1 21.8 genometools-1.5.1/testdata/matchtool_blast_empty.match000066400000000000000000000000001211610345200232560ustar00rootroot00000000000000genometools-1.5.1/testdata/matchtool_blast_empty.out000066400000000000000000000001221211610345200227760ustar00rootroot00000000000000query dbname2 q.startpos d.startpos q.endpos d.endpos bit score evalue ali length genometools-1.5.1/testdata/matchtool_blast_neg.match000066400000000000000000000024411211610345200227040ustar00rootroot00000000000000gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 13 0 0 1218 1230 118 106 0.29 25.7 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 13 0 0 922 934 2847 2835 0.29 25.7 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 92.86 14 1 0 1153 1166 34 47 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 82.61 23 4 0 630 652 200 222 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 88.24 17 2 0 648 664 567 551 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 11 0 0 386 396 670 680 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 11 0 0 891 901 2948 -2938 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 92.86 14 1 0 783 796 4891 4878 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321267542|ref|NM_001202506.1| 100.00 11 0 0 781 791 151 161 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321267542|ref|NM_001202506.1| 100.00 11 0 0 644 654 336 326 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400062|ref|NM_001202523.1| 100.00 11 0 0 725 735 2311 2301 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400062|ref|NM_001202523.1| 100.00 11 0 0 761 771 2406 2416 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400152|ref|NM_001025241.3| 100.00 11 0 0 643 653 649 639 4.1 21.8 genometools-1.5.1/testdata/matchtool_blast_too_few.match000066400000000000000000000024021211610345200235720ustar00rootroot00000000000000gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 13 0 0 1218 1230 118 106 0.29 25.7 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 13 0 0 922 934 2847 2835 0.29 25.7 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 92.86 14 1 0 1153 1166 34 47 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 82.61 23 4 0 630 652 200 222 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 88.24 17 2 0 648 664 567 551 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 11 0 0 386 396 670 680 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 11 0 0 891 901 2948 2938 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 92.86 14 1 0 783 796 4891 4878 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321267542|ref|NM_001202506.1| 100.00 11 0 0 781 791 151 161 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321267542|ref|NM_001202506.1| 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400062|ref|NM_001202523.1| 100.00 11 0 0 725 735 2311 2301 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400062|ref|NM_001202523.1| 100.00 11 0 0 761 771 2406 2416 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400152|ref|NM_001025241.3| 100.00 11 0 0 643 653 649 639 4.1 21.8 genometools-1.5.1/testdata/matchtool_blast_too_many.match000066400000000000000000000024521211610345200237620ustar00rootroot00000000000000gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 13 0 0 1218 1230 118 106 0.29 25.7 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 13 0 0 922 934 2847 2835 0.29 25.7 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 92.86 14 1 0 1153 1166 34 47 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 82.61 23 4 0 630 652 200 222 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 88.24 17 2 0 648 664 567 551 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 11 0 0 386 396 670 680 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 100.00 11 0 0 891 901 2948 2938 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400135|ref|NG_001764.3| 92.86 14 1 0 783 796 4891 4878 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321267542|ref|NM_001202506.1| 100.00 11 0 0 781 791 151 161 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321267542|ref|NM_001202506.1| 100.00 11 0 0 644 654 336 326 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400062|ref|NM_001202523.1| 100.00 11 0 0 725 735 2311 2301 4.1 21.8 1234 1234 gi|321267505|ref|NM_200010.2| gi|321400062|ref|NM_001202523.1| 100.00 11 0 0 761 771 2406 2416 4.1 21.8 gi|321267505|ref|NM_200010.2| gi|321400152|ref|NM_001025241.3| 100.00 11 0 0 643 653 649 639 4.1 21.8 genometools-1.5.1/testdata/matchtool_blastalln.out000066400000000000000000000030641211610345200224370ustar00rootroot00000000000000query dbname2 q.startpos d.startpos q.endpos d.endpos bit score evalue ali length GT_PARSER_TEST gi|321400062|ref|NM_001202523.1| 281 1191 1330 2240 2081.000 0 1050 GT_PARSER_TEST gi|321400062|ref|NM_001202523.1| 1412 1088 1423 1077 24.300 0.89 12 GT_PARSER_TEST gi|321400062|ref|NM_001202523.1| 315 2611 326 2622 24.300 0.89 12 GT_PARSER_TEST gi|321400062|ref|NM_001202523.1| 945 258 955 268 22.300 3.5 11 GT_PARSER_TEST gi|321400062|ref|NM_001202523.1| 1253 342 1263 332 22.300 3.5 11 GT_PARSER_TEST gi|321400062|ref|NM_001202523.1| 1067 759 1077 769 22.300 3.5 11 GT_PARSER_TEST gi|321400135|ref|NG_001764.3| 1 421 280 700 555.000 1e-160 280 GT_PARSER_TEST gi|321400135|ref|NG_001764.3| 185 5472 244 5531 95.600 3e-22 60 GT_PARSER_TEST gi|321400135|ref|NG_001764.3| 606 3223 621 3238 24.300 0.89 16 GT_PARSER_TEST gi|321400135|ref|NG_001764.3| 1031 1624 1041 1614 22.300 3.5 11 GT_PARSER_TEST gi|321400135|ref|NG_001764.3| 955 2544 965 2534 22.300 3.5 11 GT_PARSER_TEST gi|321400135|ref|NG_001764.3| 612 3213 622 3223 22.300 3.5 11 GT_PARSER_TEST gi|321400135|ref|NG_001764.3| 1189 4279 1199 4269 22.300 3.5 11 GT_PARSER_TEST gi|321400135|ref|NG_001764.3| 136 5257 146 5247 22.300 3.5 11 GT_PARSER_TEST gi|321400135|ref|NG_001764.3| 398 5378 408 5368 22.300 3.5 11 GT_PARSER_TEST gi|321267542|ref|NM_001202506.1| 1331 141 1458 268 254.000 5e-70 128 GT_PARSER_TEST gi|321267542|ref|NM_001202506.1| 1385 206 1396 195 24.300 0.89 12 GT_PARSER_TEST gi|321267542|ref|NM_001202506.1| 939 908 949 898 22.300 3.5 11 GT_PARSER_TEST gi|321400152|ref|NM_001025241.3| 91 327 101 317 22.300 3.5 11 genometools-1.5.1/testdata/matchtool_blastallp.out000066400000000000000000000012101211610345200224300ustar00rootroot00000000000000query dbname2 q.startpos d.startpos q.endpos d.endpos bit score evalue ali length gi|159663|gb|AAA29374.1| gi|160797|gb|AAA29796.1| 18 18 315 317 398.000 5e-115 300 gi|159663|gb|AAA29374.1| gi|160797|gb|AAA29796.1| 21 170 167 318 140.000 2e-37 149 gi|159663|gb|AAA29374.1| gi|157386153|gb|ABV52468.1| 274 397 313 440 17.300 2.3 44 gi|159663|gb|AAA29374.1| gi|157386153|gb|ABV52468.1| 71 509 86 524 16.500 4.6 16 gi|159663|gb|AAA29374.1| gi|157386153|gb|ABV52468.1| 44 8 83 47 16.500 4.8 42 gi|159663|gb|AAA29374.1| gi|157386153|gb|ABV52468.1| 150 70 162 82 16.200 6 13 gi|159663|gb|AAA29374.1| gi|157386153|gb|ABV52468.1| 193 8 232 47 15.400 10 40 genometools-1.5.1/testdata/matchtool_blastn.db000066400000000000000000000316711211610345200215310ustar00rootroot00000000000000>gi|321400135|ref|NG_001764.3| Mus musculus olfactory receptor 400, pseudogene 1 (Olfr400-ps1) on chromosome 11 ATCACTTTTAAAACTATTTCTTTATGTGCACTATTTTATTATTACATCAATTAAAGGGATCAAAAGGAAG AGAGAGAATGAGATGAGTTCCTCTTTTAAGAATTATAATTCCATGTTTTCCAGCAGCTATGATTTAAATT TCTTCAATTCACTGAGAGGTCTTGCTATTTTCCTCCATATGTGTATCTTTAAATGAACTCATGCAGCCAA AGCTGAGAGCCAATGAAACCACTGTTACTGAGTTCATACGCCTAGGTTTGATGGAGACACCAGAGATGTG GCCAGTTGTCTTCATACTCTTCCTCTTAGATTATATGACTACAGTTTAGGGTAATTTGAGCATCCTAGCC TACTGTCTTGGTGGAACCCAAACTGCACACCCCCATGTACTTCTTCCTGAGGAATCTGTCACTGATGGAT GTGGGGTGCATCAGTGTCACTATTCCCTCCATGTTGGGTCGGCTCTTAGTCCACAAACCTACAATTCCAA ATGGAGACTGCCTCACACAGCTCTTCTTCTTTCCTCTGCTGGCTGGGGTTGACTGATTTCTGTTGACAGC CATGGCTAATGAGCGCTTCCTGGCCATCTGCCCCTCACTTGTACCCTCCTTCAGCCTAGGCAGACTGGTT CAGACCGTTCACCACTGAGGCTGGGCCACCTGCTGTGCTGCTTCTCAACACTCCCCTTTGATGTTACACT GCCTGCCACCTGCCCTGAGGCCGAACTGGTTCTCCAAGATTTGCCAGAGTTTGTTACAAACTGTGAATTT GGCGAGTTTCTGCTAAAAGGCTGTTCTGAAAATTTCACATCTCTACATCAAGAAACTTGATGTGACTGGG GATGAGCTTCCCTCTTTATAAGCACAGATTTTATTATTAAACACTTGAACCTTGAACAGACTAGCATGTC TTGGTTCCATTATTTCTGTACTCACCTAGATTCCCCCTTCTCTTTCAGCTCCAAGATGCCTCCCAGGCTC GAACCCAGACATGAGAGCTGCAGGCTGGCCCCAACAAGTTTGCACCCAACGTGGGACCTGGGAATGGCAA AAGATGCTGGAAGAAACACTGCTGGTATGGAGCTCCACGGATAGGAAAAAATTAGAAAATTTGTACTGGA ACACGGAGAAGCTGTGGTACAGTCTGAGCTGGAACAGCATGCTAACCCATGTGCTGGATTCGCTCAGGTT CAGCAGTGATATCAGGATCTAGGAACACTACAGGCAGTCGGCCGCAGCTTCCAGAAGCTGCTTTTTAGGC GAAAGGAATAAGGGTTTAAAAGAATGAACAGGTGGATGGCCGCAGTCAGAAACTGCATCAAGCGGGAGGA AAGTTGGGTTTTGAAACTCTCCCAGAGACAGAGAGAAACGGGGATGCCCTGCTTTATTCTCTCTGGGCCC TACAGAAGAAGTTCTCTGCCCTCTTTTTGTTTTTGTCTAAGGTCTTGTCTAATGTCTGGTGCACTGGTCT GTTCATGTGTTCAACTCATGTGTGTTCGTGTCTTCTCATCTGAATGACTGAATGTTCTGTTTCATGTTGG AAAATAAAAGATGGCTAAAACTTTCTCTGCTGGTATAGCAAAGCTGAGAGTGGCTCACACTTTGACTGAG AATCAGGCACAGCAGGAGGGCTCCTGCTAGAAAAACTGTTTCTTAAGAAAGGGAATCTGCAGCCTCATGG ATTTGGGGTGAAAAAGCTGATAGATGGTTTTTTCCTAAGAAAATTCTCTGTATTTGTGATTATTGCGTTT AGCTAATGACAAAGTGCTTTTTATTTTATAATTAGAGCTAGAAAAATTAAAATTCTCTGATTGGTCTAAG TGTAGCCGCTTCGTTTGGTATCAGCTCATAAGTTATTGGTTAGGATTAAATAATTGTAACATCGGTAACA GAAGGTTAGCCTTAAGTTGGCAACTCAGGAGTCTTTTCAAACACATGGCATAAGCGGGCCAAAAAACTGG GCCTCCTAAGATTCTTCTAGCTGAGATAATATTTAATGTGATTCTTATCCTAGAAAGTAAATTTAAAGAA AAGATTTAAAGCAATGTCTCTTTAATGAAGCATTAAAGCTTGCACTGTCATGCATTCATGGGTATAAATT GGCAGCCAAATCTTGCAATGTGGTAGTGAAGATTTAATGTTGATTCTAAAGTGATATATTGCTTTGAAAT TGGGTATTGCTTTCCCAAGGCTGTAGATATTATTCTAACGTTGCATAAGAAACTTAAAAATCATAGTTAA AAATTGCCAGTGTTCCTTTAAGTGCAGCTGGCAGTTTGATTGCAAATTTAAGATTTTATACTCACCCATA TATTGTTAATTAAGATAATTACAAGAGTAATCATCTTATGAGAGCACTAACACAGCTCTCTGTGGCTATA CAGCCATACAAAGCTCAGGGTAGCCTCAGCGAGGTTTGTGTGACTTTCTTTTGTTTTGCAAACAGTATGC CTAAGGAAGTTCTTGAAACTTGCCTCTCCTTGCCTCTCAAGGGAAGTTACTTTAAATCTTTGCTCTAACA CAGGCGCTTTTAAGTTCTGGGGAGTAACTGTTGCTCCAGAAAAGATTCAGAGGCAATATATTTTTAATTC TTATGGTTTTAGTTTACTACAGAAGGCTTTGCAGAAAATAAAGAAAGCATTTATAATTGTTATCAATTAT AATCAATGGTAATTAAATATTAGCTGCCCATTTTAGTTAATGGTTATTAAATGTGCCCACAGCAACTCTT TAGCAGGCTGCATTGTGACTAAGGGTGTGAAATCCTTAGCTGTCATTAAGCTAACCCTAAGCCTAGCTGC TTTATCTTTACTGTAAACATTTATCTGGTTCCTGTAGTCCTTTTGAAGTCATTCCTTTGTTTCCTGTCAG GTAACTTGAATGTACTTTGCCTGCTGTGACTTCCTGCCCCCTTTATTTTCTGTATTCTTTGGCAAGAGAA AACATTATTTGTTTTCTGCTGCTGGCTGCTGCGGGGCGGGGCCTTGAGGCACACAGATTTTCCTGAGCAT GGTGGCTCAGAAGGCTGTCAGAAAGCTGGTGGCTTTGTAGCAAACTCAGGAGAGGGCCATGCTCACCATT GCCCCCATGAGACTCCACCCATCCCCGCCTGGGTAGCCATATTTTTCCACGCTAAGACTCGGGGTGCTCT GCCACTTGGGCTTTCTAGCCTACAACAGATTGGGCCACCTTCAGCCTCTTCCGCCTGAGAAGAAGGCCGA GGGTGGGCAAGGCCGAGGTAGCGCTCACCTCAAAACACAGTTTCAGCATCCTATTAAAACTGCTATGGTG CTAATAAAGAATTGTAAGATAAATTCGTATATTTTAGAAAACTTACAACAAAAATTGTGTTTTAAAAACC GACTAAGTGTCTGTTCCTTGTTCCAAACAGCAATTAATTTGGTAATTACAGATCTATTGCATACCATCAT TTTGAATAAAATTGACAATCATTATCCCAAAGATAAGTTAAAAATTTGTTTTTATGCATGCTTCTGTATC TTCTATAAATTCATGCATGCATGCATTCCACTTACTGTGTTTAAAAACAACCCCTCTATGGGAAATGAGT AAATGTGAATTAGATCACACGTTTATTCTTTTGAGTTTCCTCCTGTTTCAGCACAGATAATTAAGTTGTG TGCTGTAGATGGTGTTTTAAAATGCTGAACAATCAAACCTTAATTTGTATATTAATAGTCAATATTATAT CTCAGAGCTCACAATTGCTTAAGATTGTTCGTCCCTTCTCAAATTTGCAATTGCTTATGTATATACAACT CATAAGTAAAAATGCTAGATTTATGTCTCAGGCAGTCTATAGGTCCTACATATAAGATAGATTGGATATA TAATCTCGTTCTTTATATATTCAAAACAGTTATGGTTTAAGATAATATTTTAGTATTCTTGGAAATTGTG CATGTCAAATTGTAAAAAATTCTTTGCTCTTAGTGTCCTAGGTTACTACTTGTTTCCAAATAATAGTGTT AATTCTTGAGGACTTATACTTAATAAAATGCTGCAAATAAATACTCTTATTTCTGATTTAATAAATAAAT AAATTATACACATGTGACTATTAATAACTTGTCAAGCTTTCTAGTTACAACTGCTCTTTAAGAGAAACAA TTAAAAGTGCAATTAGTCACTGCCCATGTTACATTAAAACTGACTATAACAGTCAAGTATTTAGATGTCA ACAAATTATTAATTCTCAAGAACAAGGTATTGTGGAACTTTAAAACTTTAGCTTCTTAAAAGACAAAGAA GGGGGAAATTATATCCCCGTGCATATTATTTAATGTATTCCCATTCACATTATTTAAATCATACTTTTAT TTTAGAATTTTGAAATTTAGATGTCAAAGAACTTAATAAATGCCTTATATTATCTTAAAAGGATCTACTT ATTGGCATATGGCTTGATCCTGAACAGCTACCTTATTAGGAAAGGAAAAAGCATAGGTTCTCTCCACAGA AGCATGATGGCTAATTCATGTGACAAGCTGACAGGTGAGTTTGCTCAGTGCCCTGACTGTAGTGACAAGG AAGCTGAATTGGGCACATGTTTTCGACCCATCCTTGCTTGCCATTTTTCCAGTTTAGACAAGCAAAGCTG CCTTGCTTCAAGCTTTTTAACTTTATGGTAAAAAGAACATCAGAGACTGTGTAATCTGACTTAGAAAGAT TAGTCATATAATAGAGTTATAATGATTCTTCTCTTTCCTTCAATGTGACCAGTTATTCTAACTCAATCTT AGACTGGTCTAGTACTAATTCCAATATTAGAGATACCTATTAAAGATAGCTAAAAATCTTAATTACCTAG CAAAGTTAATTTGGAGCACAGTCTCCACTTCCAGAGAATCTCTGGCTTTTCTGCTAATCCTCAAAGCCAG ATCCCCACACCGGGAGGCCAGAGCCTGAGTTTGATTGTTGCTAATTTGCAACTGAATAAAGTACCTGGGC TTCCACAAAGAAGCTTTTATACTGTTGTTTTTCACTGCCCCACCTTTGTTTCTCAAGCAGGTCAGCCATT CTTTTCAGCCTGACTACAGGAGATGTAAAGCCTCACCTCCAACAGTGCAGATGGCAGTTATTAATCTTCA TAAAGAAGCATTTTAAGTACATATTGTGGCCTTCATCTGATTTGGGAATAAGGTGTGCTATGAGGGCCGG TTAGTCAATGACGGACAACCAGATTTCGGAGCCATAACAATCTAAGACAGAGGTACATGCCAAAAGGCCA TGGCTGTTGATAACACACCACAGAACCATGTTTGTGTGAAATATAACACAAACTAGCTGCATGTAGCCTC CAAGACAGAATTAGATGGTTCGGGAAAATCTGAGATCCTAAGGCAGGCACGGCCGCCAGCCACCATAACT CCCAGGCAAGACTATAGAGCATAAATAAATTTTATGCCTCAGTCCAGTTTTTTTAATATTATTTAAAGGG GGGAAAATGTACCTCCTTCAGCCTAGGCAGGCTGGTTCAGACCATTCACCACTGAGGCTAGGCCACCTGC TACCCACCTAGATTCCCTCTTCTCTTTCAGCTCCAAGATGCCTCCCAGACTCGAACCCAGCCTCAACACT CATTTACAGCACCCAAATGAACCACACCATCCAGAGGATCTTGGTGGCCTCATCGTGGGTTTGTTCCTTC AGCAGTGTACTTACTCATACTGTGGCCATATCCACACTTCACTTCTGTGGTCTCAATGTGGTCAATAACT TCTACTGTGACCTGCCTCAGCTCTTCCAACTGTCCTGCTCCACTACCCAGCTAAATGAGCTGCTGCTCTT TGCAGTAGGTTTCCTAATGACAGAAACCTCCATGGCACTCATTTTTACCTTTTACATCTATGGGGCAGTT GCAATTCTGCAAATCCGCTCTGCTGAAGGCAGGTAGAAAGCCTTCTCCACATACAGCTCTCACCTCACTG TGGTTGCCATATTCTATGGCACAGGTATCTTTGCCTACATGAGTCTCAGGTCCATCAAACTTTCTGATAA TGATAAAGCTATTGGGATTTTCAACACTGATGATCAACCCCATGCTAAACCCACTCATCTACAGTCTCAG AAACCCTGATGTGCAGGCTGCCCTCTGGAAGGTACTCACAGGGAAACAGCTATCACATTGAGACCTCAAA GCTTCTTCCACCTATTTCTTCTAAAACTAAAGCTGTATATTAAGGTTTCCTGTGGTTCAACACTAGAACA AATTGTTCAACATTGTTTCCAATGAGAAATGTTATGATGGAAAAGAGCTTCCCTCAATTATCATCTGCTG AATGTTTTAATTTTTTGAAAGAGAGGAATTTGTAATCTAAACATTTAAATA >gi|321400152|ref|NM_001025241.3| Mus musculus Ssty2 family member (LOC434960), mRNA GGAGGTGCTAGAATCCATTCAAGGAGCTCAAATCTGTTTAGCATAGTCTTCTTCACCTGCTCAGAAGTTC TCGTAGAGAAGAGTCTTGGTCCAGCATTCACTCCCAACCCATAACCATTGCCCATCAGGAATTCATATAT ATGACAGAGGCAACAGCATTGTGTCTGGTGTAAACGGGCAAGATCTTCAGTCCCAGGCAATGAGCAAGTA TGATATTTGAAGGGAATGGAAGCCACAAGACAGTGTGATCTACCACAACAGGTCTACAGCCAGGTAGAAG ACAATACATCTGAAGAGTCTGAGCATGACATCACTCAAGAAGAAGAGTAGGAGGAAGCCTTCTTCCCAGG CCCTGGGGAATATTGTTGGCTGCAGAATTTCTCATGGGTGGAAGGAAGGTAATGAGCCTGTCACCCATTG GAAGGCCATCATTCTAGGTCAACTGCCAACAAACCCTTCTCTTTATTTGGTGAAGTATGACGGAATTGAC AGTGTCTACGGACAGGAGCTCCACAGCGATGAGAGGATTTTAAATCTTAAGGTCTTGCCTCACAAAGTAG TTTTTCCTCAGGTGAGGGATGTCCACCTCGCAGGCGCACTGGTTGGCAGAGAGGTACAACACAAATTTGA GGGGAAAGATGGCTCTGAGGACAACTGGAGTGGGATGGTGCTAGCCCAGGTGCCATTCTTACAGGACTAT TTTTACATTTCCTACAAGAAGGATCCGGTCCTCTACGTCTATCAGCTCCTGGATGACTACAAGGAAGGTA ACCTCCACATCATTCCAGAGACCCCTCTGGCTGAGGCGAGATCAGGTGATGACAATGACTTCTTAATAGG TTCCTGGGTGCAGTACACCAGAGATGATGGATCCAAAAAGTTCGGAAAGGTTGTTTACAAAGTTCTAGCC AATTCTACTGTGTACTTTATCAAATTTCTCGGTGACCTCCATATCTATGTCTATACTCTGGTGTCAAATA TCACTTAAATTTAAAAAAATCACAAAGTACAGAAATGTAAACTTATAGGATTGAAAAAAAATGTTTGTTT TCCTGTGTTGGGTACCTATGGGTCTTTGACAACCTCAGTATCTTTGTCAATAAAATTTGTTTTGTTCTAA AAA >gi|321400062|ref|NM_001202523.1| Homo sapiens discoidin domain receptor tyrosine kinase 1 (DDR1), transcript variant 6, mRNA AGTGCGGAGGAACTGAGCCCCGGGAGGAGGTGCTCCTGTGCAGCCCCACTGAGTCAGCTCATCTATCGCC TGCCCTCCACCTGGCCAGTCCCTGCGGGCATCTAACTGCTAAGCCTCCGCTCAGCCAACACCCAGTTGGT CAGTCTGGTCACAGTCCAGCAAAAAGAGGGACTGCCACTCTAACCCACCAGTGACACCACTCTTCCCGGC TGGATGGTCAATTAGCTCTGGCATGAGAGAATGTCACTGCCGAGATGCTGCCCCCACCCCCTTAGGCCCG AGGGATCAGGAGCTATGGGACCAGAGGCCCTGTCATCTTTACTGCTGCTGCTCTTGGTGGCAAGTGGAGA TGCTGACATGAAGGGACATTTTGATCCTGCCAAGTGCCGCTATGCCCTGGGCATGCAGGACCGGACCATC CCAGACAGTGACATCTCTGCTTCCAGCTCCTGGTCAGATTCCACTGCCGCCCGCCACAGCAGGTTGGAGA GCAGTGACGGGGATGGGGCCTGGTGCCCCGCAGGGTCGGTGTTTCCCAAGGAGGAGGAGTACTTGCAGGT GGATCTACAACGACTGCACCTGGTGGCTCTGGTGGGCACCCAGGGACGGCATGCCGGGGGCCTGGGCAAG GAGTTCTCCCGGAGCTACCGGCTGCGTTACTCCCGGGATGGTCGCCGCTGGATGGGCTGGAAGGACCGCT GGGGTCAGGAGGTGATCTCAGGCAATGAGGACCCTGAGGGAGTGGTGCTGAAGGACCTTGGGCCCCCCAT GGTTGCCCGACTGGTTCGCTTCTACCCCCGGGCTGACCGGGTCATGAGCGTCTGTCTGCGGGTAGAGCTC TATGGCTGCCTCTGGAGGGATGGACTCCTGTCTTACACCGCCCCTGTGGGGCAGACAATGTATTTATCTG AGGCCGTGTACCTCAACGACTCCACCTATGACGGACATACCGTGGGCGGACTGCAGTATGGGGGTCTGGG CCAGCTGGCAGATGGTGTGGTGGGGCTGGATGACTTTAGGAAGAGTCAGGAGCTGCGGGTCTGGCCAGGC TATGACTATGTGGGATGGAGCAACCACAGCTTCTCCAGTGGCTATGTGGAGATGGAGTTTGAGTTTGACC GGCTGAGGGCCTTCCAGGCTATGCAGGTCCACTGTAACAACATGCACACGCTGGGAGCCCGTCTGCCTGG CGGGGTGGAATGTCGCTTCCGGCGTGGCCCTGCCATGGCCTGGGAGGGGGAGCCCATGCGCCACAACCTA GGGGGCAACCTGGGGGACCCCAGAGCCCGGGCTGTCTCAGTGCCCCTTGGCGGCCGTGTGGCTCGCTTTC TGCAGTGCCGCTTCCTCTTTGCGGGGCCCTGGTTACTCTTCAGCGAAATCTCCTTCATCTCTGATGTGGT GAACAATTCCTCTCCGGCACTGGGAGGCACCTTCCCGCCAGCCCCCTGGTGGCCGCCTGGCCCACCTCCC ACCAACTTCAGCAGCTTGGAGCTGGAGCCCAGAGGCCAGCAGCCCGTGGCCAAGGCCGAGGGGAGCCCGA CCGCCATCCTCATCGGCTGCCTGGTGGCCATCATCCTGCTCCTGCTGCTCATCATTGCCCTCATGCTCTG GCGGCTGCACTGGCGCAGGCTCCTCAGCAAGGCTGAACGGAGGGTGTTGGAAGAGGAGCTGACGGTTCAC CTCTCTGTCCCTGGGGACACTATCCTCATCAACAACCGCCCAGGTCCTAGAGAGCCACCCCCGTACCAGG AGCCCCGGCCTCGTGGGAATCCGCCCCACTCCGCTCCCTGTGTCCCCAATGGCTCTGCCTACAGTGGGGA CTATATGGAGCCTGAGAAGCCAGGCGCCCCGCTTCTGCCCCCACCTCCCCAGAACAGCGTCCCCCATTAT GCCGAGGCTGACATTGTTACCCTGCAGGGCGTCACCGGGGGCAACACCTATGCTGTGCCTGCACTGCCCC CAGGGGCAGTCGGGGATGGGCCCCCCAGAGTGGATTTCCCTCGATCTCGACTCCGCTTCAAGGAGAAGCT TGGCGAGGGCCAGTTTGGGGAGGTGCACCTGTGTGAGGTCGACAGCCCTCAAGATCTGGTTAGTCTTGAT TTCCCCCTTAATGTGCGTAAGGGACACCCTTTGCTGGTAGCTGTCAAGATCTTACGGCCAGATGCCACCA AGAATGCCAGGAATGATTTCCTGAAAGAGGTGAAGATCATGTCGAGGCTCAAGGACCCAAACATCATTCG GCTGCTGGGCGTGTGTGTGCAGGACGACCCCCTCTGCATGATTACTGACTACATGGAGAACGGCGACCTC AACCAGTTCCTCAGTGCCCACCAGCTGGAGGACAAGGCAGCCGAGGGGGCCCCTGGGGACGGGCAGGCTG CGCAGGGGCCCACCATCAGCTACCCAATGCTGCTGCATGTGGCAGCCCAGATCGCCTCCGGCATGCGCTA TCTGGCCACACTCAACTTTGTACATCGGGACCTGGCCACGCGGAACTGCCTAGTTGGGGAAAATTTCACC ATCAAAATCGCAGACTTTGGCATGAGCCGGAACCTCTATGCTGGGGACTATTACCGTGTGCAGGGCCGGG CAGTGCTGCCCATCCGCTGGATGGCCTGGGAGTGCATCCTCATGGGGAAGTTCACGACTGCGAGTGACGT GTGGGCCTTTGGTGTGACCCTGTGGGAGGTGCTGATGCTCTGTAGGGCCCAGCCCTTTGGGCAGCTCACC GACGAGCAGGTCATCGAGAACGCGGGGGAGTTCTTCCGGGACCAGGGCCGGCAGGTGTACCTGTCCCGGC CGCCTGCCTGCCCGCAGGGCCTATATGAGCTGATGCTTCGGTGCTGGAGCCGGGAGTCTGAGCAGCGACC ACCCTTTTCCCAGCTGCATCGGTTCCTGGCAGAGGATGCACTCAACACGGTGTGAATCACACATCCAGCT GCCCCTCCCTCAGGGAGCGATCCAGGGGAAGCCAGTGACACTAAAACAAGAGGACACAATGGCACCTCTG CCCTTCCCCTCCCGACAGCCCATCACCTCTAATAGAGGCAGTGAGACTGCAGGTGGGCTGGGCCCACCCA GGGAGCTGATGCCCCTTCTCCCCTTCCTGGACACACTCTCATGTCCCCTTCCTGTTCTTCCTTCCTAGAA GCCCCTGTCGCCCACCCAGCTGGTCCTGTGGATGGGATCCTCTCCACCCTCCTCTAGCCATCCCTTGGGG AAGGGTGGGGAGAAATATAGGATAGACACTGGACATGGCCCATTGGAGCACCTGGGCCCCACTGGACAAC ACTGATTCCTGGAGAGGTGGCTGCGCCCCCAGCTTCTCTCTCCCTGTCACACACTGGACCCCACTGGCTG AGAATCTGGGGGTGAGGAGGACAAGAAGGAGAGGAAAATGTTTCCTTGTGCCTGCTCCTGTACTTGTCCT CAGCTTGGGCTTCTTCCTCCTCCATCACCTGAAACACTGGACCTGGGGGTAGCCCCGCCCCAGCCCTCAG TCACCCCCACTTCCCACTTGCAGTCTTGTAGCTAGAACTTCTCTAAGCCTATACGTTTCTGTGGAGTAAA TATTGGGATTGGGGGGAAAGAGGGAGCAACGGCCCATAGCCTTGGGGTTGGACATCTCTAGTGTAGCTGC CACATTGATTTTTCTATAATCACTTGGGGTTTGTACATTTTTGGGGGGAGAGACACAGATTTTTACACTA ATATATGGACCTAGCTTGAGGCAATTTTAATCCCCTGCACTAGGCAGGTAATAATAAAGGTTGAGTTTTC CACAAAAAAAAAAAAAAAAAA >gi|321267542|ref|NM_001202506.1| Danio rerio brain specific kinase 146-like (LOC791840), mRNA GCAGCGGAGAGACAGGATGATGATGATTATGATTATGATGATAATGATGAAGATGAGGATAATTATGTGA TATCTGTATGTGATTTATCCACCGGGGGAACAGCGGAGATTCACGGGAGCGGTTTAACGTATTGTGAGGC TGTCTGTGGGCCAGGATGAGCTCGTCTCCGGTGGTTTCCCATGACATTCTGGAGGAGCTGCAGCTCTACA CCGCTCAGAACCTGGAGAAGCTGGAGGTCAATAAATACTATGAGGTGATCCGGGAGCTCGGGAAGGGCAC TTACGGGAAGGTGGACCTCGTCATTCATAAGATCAGAGGTAGCAAAATGGCTCTGAAGTTTCTGAAGAAG AAAAGCACCAAGCTGAAGAGCTTCTTGCGGGAGTACAGCATCTCTCTCTATCTCTCTCCATGTCCCTTCA TCATCAACATGTTCGGCATCGCCTTTGAGACAGACGAGTATTATGTGTTTGCGCAGGAATACGCTCCTTC TGGGGACCTGTTTGACATCATTCCACCACAGGTGGGTCTGCCAGAGCCGGTGGCGAAGCGCTGTGTGCAT CAGGTGGCCATCGCTCTCGAATACCTGCACTCCAAAAAACTGGTGCACCGAGACATCAAACCCGAGAACA TCCTAATCTTCGACAAGGAGTGCCGTAAGGTCAAGCTGTCAGACTTCGGGATGGCGCGGCGCGCCGGTTC ACCGGTCAAGCGTGTTAGCGGCACAATCCCATACACGGCTCCAGAACTCTGCGATACGTCCAAACACGAC GGCTTCTGCGTGGACTACAGCACCGATGTGTGGGCGTTCGGAGTGCTGCTGTTCTGCATGCTAACCGGGA ACTTTCCATGGGAAAAAGCGATGCCGTCTGATACTTTCTACGAGGAGTTTGTGCGCTGGCAGAAGCGGCG GACGGGTGCGGTTCCGTCACAATGGCGTCGATTTACAGACGAATCCCTGCGCATGTTTCGAAAGCTCCTA GCATTGGAGCAGGAACGCAGATGCAGCGTCAAGGAGGTTTTCGCACATTTAGGCCACCGCTGGATGCTTG ATGGAACTAGCGGAAACCATCATCAATCCGTGCTCAACTCTTCATCAGAGGAAGACGAATTGCTTGTGGA TCGTATGAAGCAGCAGACCTTATCTCCGACAGCTAACACGAGCAATGCTATTGAGCCCGGATCGGCTAAC CACTTCACATCTGTGTCCACCAATAGCTCGGTGTCTTCCACTAACAGCTATGAGCGTTCGGCTAGAGACA GTCCTCCGACTAGCAGGATCCTGGTCACGACGCCTATAGAAATCTGCGTCTAAATGCACAGCTGATGAAA TTAACATGCGCACAAGCTGACGCACACTCCTGTGA genometools-1.5.1/testdata/matchtool_blastn.out000066400000000000000000000005071211610345200217450ustar00rootroot00000000000000query dbname2 q.startpos d.startpos q.endpos d.endpos bit score evalue ali length GT_PARSER_TEST gi|321400062|ref|NM_001202523.1| 281 1191 1341 2250 1941.000 0 1062 GT_PARSER_TEST gi|321400135|ref|NG_001764.3| 1 421 280 700 518.000 2e-149 280 GT_PARSER_TEST gi|321267542|ref|NM_001202506.1| 1331 141 1458 268 237.000 6e-65 128 genometools-1.5.1/testdata/matchtool_blastn.query000066400000000000000000000027361211610345200223110ustar00rootroot00000000000000>GT_PARSER_TEST BLASTN GTGGGGTGCATCAGTGTCACTATTCCCTCCATGTTGGGTCGGCTCTTAGTCCACAAACCTACAATTCCAA ATGGAGACTGCCTCACACAGCTCTTCTTCTTTCCTCTGCTGGCTGGGGTTGACTGATTTCTGTTGACAGC CATGGCTAATGAGCGCTTCCTGGCCATCTGCCCCTCACTTGTACCCTCCTTCAGCCTAGGCAGACTGGTT CAGACCGTTCACCACTGAGGCTGGGCCACCTGCTGTGCTGCTTCTCAACACTCCCCTTTGATGTTACACT CGGGGTGGAATGTCGCTTCCGGCGTGGCCCTGCCATGGCCTGGGAGGGGGAGCCCATGCGCCACAACCTA GGGGGCAACCTGGGGGACCCCAGAGCCCGGGCTGTCTCAGTGCCCCTTGGCGGCCGTGTGGCTCGCTTTC TGCAGTGCCGCTTCCTCTTTGCGGGGCCCTGGTTACTCTTCAGCGAAATCTCCTTCATCTCTGATGTGGT GAACAATTCCTCTCCGGCACTGGGAGGCACCTTCCCGCCAGCCCCCTGGTGGCCGCCTGGCCCACCTCCC ACCAACTTCAGCAGCTTGGAGCTGGAGCCCAGAGGCCAGCAGCCCGTGGCCAAGGCCGAGGGGAGCCCGA CCGCCATCCTCATCGGCTGCCTGGTGGCCATCATCCTGCTCCTGCTGCTCATCATTGCCCTCATGCTCTG GCGGCTGCACTGGCGCAGGCTCCTCAGCAAGGCTGAACGGAGGGTGTTGGAAGAGGAGCTGACGGTTCAC CTCTCTGTCCCTGGGGACACTATCCTCATCAACAACCGCCCAGGTCCTAGAGAGCCACCCCCGTACCAGG AGCCCCGGCCTCGTGGGAATCCGCCCCACTCCGCTCCCTGTGTCCCCAATGGCTCTGCCTACAGTGGGGA CTATATGGAGCCTGAGAAGCCAGGCGCCCCGCTTCTGCCCCCACCTCCCCAGAACAGCGTCCCCCATTAT GCCGAGGCTGACATTGTTACCCTGCAGGGCGTCACCGGGGGCAACACCTATGCTGTGCCTGCACTGCCCC CAGGGGCAGTCGGGGATGGGCCCCCCAGAGTGGATTTCCCTCGATCTCGACTCCGCTTCAAGGAGAAGCT TGGCGAGGGCCAGTTTGGGGAGGTGCACCTGTGTGAGGTCGACAGCCCTCAAGATCTGGTTAGTCTTGAT TTCCCCCTTAATGTGCGTAAGGGACACCCTTTGCTGGTAGCTGTCAAGATCTTACGGCCAGATGCCACCA AGAATGCCAGGAATGATTTCCTGAAAGAGGTGAAGATCATGTCGAGGCTCAAGGACCCAAACATCATTCG TGTCTGTGGGCCAGGATGAGCTCGTCTCCGGTGGTTTCCCATGACATTCTGGAGGAGCTGCAGCTCTACA CCGCTCAGAACCTGGAGAAGCTGGAGGTCAATAAATACTATGAGGTGATCCGGGAGCT genometools-1.5.1/testdata/matchtool_blastp.db000066400000000000000000000035361211610345200215320ustar00rootroot00000000000000>gi|281364575|ref|NP_001162903.1| r2d2, isoform B [Drosophila melanogaster] MDNKSAVSALQEFCARTQINLPTYSFIPGEDGGYVCKVELLEIEALGNGRSKRDAKHLAASNILRKIQLL PGIHGLMKDSTVGDLDEELTNLNRDMVKELRDYCVRREMPLPCIEVVQQSGTPSAPEFVACCSVASIVRY GKSDKKKDARQRAAIEMLALISSNSDNLRPDQMQVASTSKLKVVDMEESMEELEALRRKKFTTYWELKEA GSVDHTGMRLCDRHNYFKNFYPTLKKEAIEAINSDEYESSKDKAMDVMSSLKITPKISEVESSSLVPLLS VELNCAFDVVLMAKETDIYDHIIDYFRTMLI >gi|166317|gb|AAA32629.1| actinidin [Actinidia deliciosa] MGLPKSFVSMSLLFFSTLLILSLAFNAKNLTQRTNDEVKAMYESWLIKYGKSYNSLGEWERRFEIFKETL RFIDEHNADTNRSYKVGLNQFADLTDEEFRSTYLGFTSGSNKTKVSNRYEPRVGQVLPSYVDWRSAGAVV DIKSQGECGGCWAFSAIATVEGINKIVTGVLISLSEQELIDCGRTQNTRGCNGGYITDGFQFIINNGGIN TEENYPYTAQDGECNVELQNEKYVTIDTYENVPYNNEWALQTAVTYQPVSVALDAAGDAFKQYSSGIFTG PCGTAIDHAVTIVGYGTEGGIDYWIVKNSWDTTWGEEGYMRILRNVGGAGTCGIATMPSYPVKYNNQNYP EPYSSLINPPAFSMSKDGPVGVEDGQRYSA >gi|160797|gb|AAA29796.1| hemoglobin [Pseudoterranova decipiens] MHSSIVLATVLFVAIASASKTRELCMKSLEHAKVGTSKEAKQDGIDLYKHMFEHYPAMKKYFKHRENYTP ADVQKDPFFIKQGQNILLACHVLCATYDDRETFDAYVGELMARHERDHVKVPNDVWNHFWEHFIEFLGSK TTLDEPTKHAWQEIGKEFSHEISHHGRHSVRDHCMNSLEYIAIGDKEHQKQNGIDLYKHMFEHYPHMRKA FKGRENFTKEDVQKDAFFVNKDTRFCWPFVCCDSSYDDEPTFDYFVDALMDRHIKDDIHLPQEQWHEFWK LFAEYLNEKSHQHLTEAEKHAWSTIGEDFAHEADKHAKAEKDHHEGEHKEEHH >gi|157386153|gb|ABV52468.1| ATP; phosphoenolpyruvate carboxykinase [Campylobacter jejuni subsp. jejuni 81116] MKKFDNLGLDNIKEIFHNLSYDELNAHEKANNEGLSTDNDTFCVDTGIFTGRSPKDKYFVKQDPSSKYIA WGKINQPITKELFDKLLTKAKQELSGKKIYVQDAFCGASLQSRKAVRFVTEIAWQAHFVKNMFIRPSQEE LENFKADFIVYNACKCINEDYKQDGLNSEVFVIFNVEENIAVIGGTWYGGEMKKGIFSMMNYWLPLENKL SMHCSANVGEKDDVALFFGLSGTGKTTLSTDPKRRLIGDDEHGWDDEGVFNFEGGCYAKTINLDPEHEPE IYGAIKRNALLENVVLRADKSVDYADASKTENTRVSYPIEHIENHEPSLKAGHPKNIIFLSADAFGILPP VSKLSKEQAMYYFLSGYTAKVAGTERGITEPQATFSACFGEPFMPLHPTVYARLLGEKIEKHEVNVYLVN TGWSGGSYGVGKRMSIKATRACINAILDGSIAKCEFENFEVFNLAIPKALEGVESTLLNPINTWLDKNAY TETRDKLAHMFVQNFKRYEDVKEGIEFSKFGPKI genometools-1.5.1/testdata/matchtool_blastp.out000066400000000000000000000010711211610345200217440ustar00rootroot00000000000000query dbname2 q.startpos d.startpos q.endpos d.endpos bit score evalue ali length gi|159663|gb|AAA29374.1| gi|160797|gb|AAA29796.1| 1 1 316 318 416.000 2e-120 318 gi|159663|gb|AAA29374.1| gi|160797|gb|AAA29796.1| 170 21 321 206 182.000 4e-50 186 gi|159663|gb|AAA29374.1| gi|157386153|gb|ABV52468.1| 274 397 313 440 17.300 2.7 44 gi|159663|gb|AAA29374.1| gi|157386153|gb|ABV52468.1| 71 509 86 524 16.200 5.2 16 gi|159663|gb|AAA29374.1| gi|157386153|gb|ABV52468.1| 150 70 162 82 16.200 5.5 13 gi|159663|gb|AAA29374.1| gi|157386153|gb|ABV52468.1| 44 8 83 47 16.200 5.8 42 genometools-1.5.1/testdata/matchtool_blastp.query000066400000000000000000000006151211610345200223050ustar00rootroot00000000000000>gi|159663|gb|AAA29374.1| hemoglobin [Ascaris suum] MRSLLLLSIVFFVVTVSANKTRELCMKSLEHAKVDTSNEARQDGIDLYKHMFENYPPLRKYFKNREEYTA EDVQNDPFFAKQGQKILLACHVLCATYDDRETFNAYTRELLDRHARDHVHMPPEVWTDFWKLFEEYLGKK TTLDEPTKQAWHEIGREFAKEINKHGRHAVRHQCMRSLQHIDIGHSETAKQNGIDLYKHMFENYPSMREA FKDRENYTAEDVQKDPFFVKQGQRILLACHLLCASYDDEETFHMYVHELMERHERLGVQLPDQHWTDFWK LFEEFLEKKSHLCEHTKHAWAVIGKEFAYEATRHGKEHHEHKEEHKEEHKEEHKEEQH genometools-1.5.1/testdata/matchtool_open.match000066400000000000000000035156401211610345200217240ustar00rootroot00000000000000# args=-l 100 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 genometools-1.5.1/testdata/matchtool_open.match.bz2000066400000000000000000000023721211610345200224060ustar00rootroot00000000000000BZh91AY&SY{%]pH "`BQATRBѠ SF4M4h@ SP hh&I6hsX)2)d! TWBܡoC "l"'!5$ QB-$Z$sb䄫[E@6E:$ &*VTKJb `(E,DKhf EXAEC L Fd2̋ ,DV(]+h!X6VJAR!YB )KoRI)JR!4Ԭ %%F?}?~v}Ϯ/_}lxu{彁ij_ϕ?ο~{?CW_Ga㵾u]u~C׏__]_ ׉_O G_LȄLyu _8zE!~st/~+0jR8±Lğ2戄KH☫ GcLsڂ1gP$ q ҅1G&<#~Gsty_ˑZ suXK&d7s" ~Bth̑ cN[0 T!Ap6t!9pу/Gj6&pՅ㴣(%9"R8ј#Ɯ` ~Bt8m̱- ~Bstሣ1_:ԪmHM iGQ&J~sD% qՅ1G&9m3(R8qޘsnN\No>{jZ }c.OȄLP̫kp1H pw,r K G_;+0jR8±LȄ'tEb;R8ј#Ɯ` ~Bth̑ ȯ_p]ArdVmCj\]8 ͜HlG_ ]8sd˜9"/Uc.9E2/]c.q vQZ su8#3D/cHT!p4Ȅ1-sE_ ]8Nsid_9ޯ~]ZS ;dյq օ(2!pWկT]8xE!~stሣkG|VmCj\]8 ؎T!Ap4Ȅ1-sE_ ]8sdë8W.q1GjuYUې1W5dB&|3'ۑ*1H0cΠHK ic=mLK☣ G=rԡVmCj\]8N;2Q˘#.!Uc.92ai ƜA*1H{".|Ew_7V'ԽYumhu8#3ʄLȄ3U+U8ck_:]8臁/_Uې1W5dB&@$#/Uc.92ai ƜA*1H* Gq~/GVj6&pՅc/ ̉v$ q ҅1G&9m3(R8qژcO[$҅8GbkGuUې1Wӎ:b?L2戄KH☫ GcLsڂ1gP$ q ҅1ǞH& qх#׎~9P!5c.u~F(e *1W0cΠHK ycι9q;{^kr'=pt{jZ }c.OȄLP̫kp1H pw,r K G_;+0jR8±LȄ'tEb;R8ј#Ɯ` ~Bth̑ ȯ_p]ArdVmCj\]8 ͜HlG_ ]8sd˜9"/Uc.9E2/]c.q vQZ su8#3D/cHT!p4Ȅ1-sE_ ]8Nsid_9ޯ~]ZS ;dյq օ(2!pWկT]8xE!~stሣkG|VmCj\]8 ؎T!Ap4Ȅ1-sE_ ]8sdë8W.q1GjuYUې1W5dB&|3'ۑ*1H0cΠHK ic=mLK☣ G=rԡVmCj\]8N;2Q˘#.!Uc.92ai ƜA*1H{".|Ew_7V'ԽYumhu8#3ʄLȄ3U+U8ck_:]8臁/_Uې1W5dB&@$#/Uc.92ai ƜA*1H* Gq~/GVj6&pՅc/ ̉v$ q ҅1G&9m3(R8qژcO[$҅8GbkGuUې1Wӎ:b?L2戄KH☫ GcLsڂ1gP$ q ҅1ǞH& qх#׎~9P!5c.u~F(e *1W0cΠHK ycι9q;{^kr'=pt{jZ }c.OȄLP̫kp1H pw,r K G_;+0jR8±LȄ'tEb;R8ј#Ɯ` ~Bth̑ ȯ_p]ArdVmCj\]8 ͜HlG_ ]8sd˜9"/Uc.9E2/]c.q vQZ su8#3D/cHT!p4Ȅ1-sE_ ]8Nsid_9ޯ~]ZS ;dյq օ(2!pWկT]8xE!~stሣkG|VmCj\]8 ؎T!Ap4Ȅ1-sE_ ]8sdë8W.q1GjuYUې1W5dB&|3'ۑ*1H0cΠHK ic=mLK☣ G=rԡVmCj\]8N;2Q˘#.!Uc.92ai ƜA*1H{".|=mgenometools-1.5.1/testdata/matchtool_open.out000066400000000000000000012004551211610345200214300ustar00rootroot00000000000000seqid1 seqid2 startpos1 startpos2 endpos1 endpos2 weight 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 3 101 0 0 632 632 1266 3 149 273 0 632 359 720 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 101 149 273 0 632 359 720 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 511 613 776 878 532 46 47 0 0 1289 1289 2580 26 27 254 0 359 105 212 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 2 100 90 192 509 611 840 2 100 511 613 776 878 532 4 102 0 0 527 527 1056 141 141 1206 1533 1415 1742 420 2 100 90 192 509 611 840 2 100 511 613 776 878 532 genometools-1.5.1/testdata/matchtool_open_corrupt.match000066400000000000000000000013211211610345200234610ustar00rootroot00000000000000# args=-l 100 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 this is a broken file! 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 123 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 genometools-1.5.1/testdata/matchtool_open_empty.match000066400000000000000000000000001211610345200231120ustar00rootroot00000000000000genometools-1.5.1/testdata/matchtool_open_empty.out000066400000000000000000000000711211610345200226350ustar00rootroot00000000000000seqid1 seqid2 startpos1 startpos2 endpos1 endpos2 weight genometools-1.5.1/testdata/matchtool_open_neg.match000066400000000000000000000012721211610345200225410ustar00rootroot00000000000000# args=-l 100 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 -360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 genometools-1.5.1/testdata/matchtool_open_too_few.match000066400000000000000000000012231211610345200234260ustar00rootroot00000000000000# args=-l 100 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 genometools-1.5.1/testdata/matchtool_open_too_many.match000066400000000000000000000012771211610345200236220ustar00rootroot00000000000000# args=-l 100 633 3 0 D 633 101 0 0 0.00e+00 1266 100.00 360 3 273 D 360 149 0 0 2.43e-207 720 100.00 360 101 273 D 360 149 0 0 2.43e-207 720 100.00 1290 46 0 D 1290 47 0 0 0.00e+00 2580 100.00 106 26 254 D 106 27 0 0 2.04e-54 212 100.00 528 4 0 D 528 102 0 0 0.00e+00 1056 100.00 210 141 1206 D 210 141 123 1533 0 4.96e-117 420 100.00 420 2 90 D 420 100 192 0 1.83e-243 840 100.00 266 2 511 D 266 100 613 0 9.55e-151 532 100.00 genometools-1.5.1/testdata/md5_seqid_missing_seqid.gff3000066400000000000000000000003401211610345200232110ustar00rootroot00000000000000##gff-version 3 ##sequence-region md5:063b1024d68e26716b7f38caf958316f:1877523 1 106973 md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 1074 1540 1 + . ID=gene1;Target=md5:14c0ff5e76ef8ac009fdcc923f701356: 1 303 + genometools-1.5.1/testdata/md5_seqid_too_short.gff3000066400000000000000000000003361211610345200224000ustar00rootroot00000000000000##gff-version 3 ##sequence-region md5:063b1024d68e26716b7f38caf958316 1 106973 md5:063b1024d68e26716b7f38caf958316f:1877523 gth gene 1074 1540 1 + . ID=gene1;Target=md5:14c0ff5e76ef8ac009fdcc923f701356:8721428 1 303 + genometools-1.5.1/testdata/md5_seqid_wrong_separator.gff3000066400000000000000000000003471211610345200235760ustar00rootroot00000000000000##gff-version 3 ##sequence-region md5:063b1024d68e26716b7f38caf958316f:1877523 1 106973 md5:063b1024d68e26716b7f38caf958316fx1877523 gth gene 1074 1540 1 + . ID=gene1;Target=md5:14c0ff5e76ef8ac009fdcc923f701356:8721428 1 303 + genometools-1.5.1/testdata/mergefeat.gff3000066400000000000000000000002511211610345200203610ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10000 seq1 . gene 1000 10000 . + . ID=gene seq1 . exon 1000 5000 . + . Parent=gene seq1 . exon 5001 10000 . + . Parent=gene genometools-1.5.1/testdata/mergefeat.out000066400000000000000000000002071211610345200203440ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10000 seq1 . gene 1000 10000 . + . ID=gene1 seq1 . exon 1000 10000 . + . Parent=gene1 ### genometools-1.5.1/testdata/mergefeat_no_merge.gff3000066400000000000000000000004421211610345200222360ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.5 + . ID=gene1 ctg123 . mRNA 1050 7000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 7000 . + . Parent=mRNA1 ctg123 . mRNA 7001 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 7001 9000 . + . Parent=mRNA2 ### genometools-1.5.1/testdata/meta_directives.gff3000066400000000000000000000003601211610345200215720ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 ##feature-ontology URI ##attribute-ontology URI ##source-ontology URI ##species NCBI_Taxonomy_URI ##genome-build source buildName ##genome-build NCBI B36 ##genome-build WormBase ws110 (worm) genometools-1.5.1/testdata/minimal_fasta.gff3000066400000000000000000000011451211610345200212310ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . . ##FASTA >ctg123 cttctgggcgtacccgattctcggagaacttgccgcaccattccgccttg tgttcattgctgcctgcatgttcattgtctacctcggctacgtgtggcta tctttcctcggtgccctcgtgcacggagtcgagaaaccaaagaacaaaaa aagaaattaaaatatttattttgctgtggtttttgatgtgtgttttttat aatgatttttgatgtgaccaattgtacttttcctttaaatgaaatgtaat cttaaatgtatttccgacgaattcgaggcctgaaaagtgtgacgccattc gtatttgatttgggtttactatcgaataatgagaattttcaggcttaggc ttaggcttaggcttaggcttaggcttaggcttaggcttaggcttaggctt aggcttaggcttaggcttaggcttaggcttaggcttaggcttaggcttag aatctagctagctatccgaaattcgaggcctgaaaagtgtgacgccattc genometools-1.5.1/testdata/minimal_fasta_without_directive.gff3000066400000000000000000000011351211610345200250510ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . . >ctg123 cttctgggcgtacccgattctcggagaacttgccgcaccattccgccttg tgttcattgctgcctgcatgttcattgtctacctcggctacgtgtggcta tctttcctcggtgccctcgtgcacggagtcgagaaaccaaagaacaaaaa aagaaattaaaatatttattttgctgtggtttttgatgtgtgttttttat aatgatttttgatgtgaccaattgtacttttcctttaaatgaaatgtaat cttaaatgtatttccgacgaattcgaggcctgaaaagtgtgacgccattc gtatttgatttgggtttactatcgaataatgagaattttcaggcttaggc ttaggcttaggcttaggcttaggcttaggcttaggcttaggcttaggctt aggcttaggcttaggcttaggcttaggcttaggcttaggcttaggcttag aatctagctagctatccgaaattcgaggcctgaaaagtgtgacgccattc genometools-1.5.1/testdata/missing_gff3_header.gff3000066400000000000000000000013751211610345200223200ustar00rootroot00000000000000##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.5 + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ### genometools-1.5.1/testdata/multi_feature_different_sequence_id.gff3000066400000000000000000000002151211610345200256610ustar00rootroot00000000000000##gff-version 3 11 ucb MIR 26423868 26423948 . + . ID=osa-MIR531;rfam=MI0003204 8 ucb MIR 1214013 1214093 . - . ID=osa-MIR531;rfam=MI0003204 genometools-1.5.1/testdata/multi_feature_multi.gff3000066400000000000000000000011021211610345200224750ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1 ctg123 . CDS 1201 1500 . + 0 ID=CDS1;Parent=gene1 ctg123 . CDS 3000 3902 . + 0 ID=CDS1;Parent=gene1 ### ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1.1 ctg123 . CDS 1201 1500 . + 0 ID=CDS1.1;Parent=gene1.1 ctg123 . CDS 3000 3902 . + 0 ID=CDS1.1;Parent=gene1.1 ### ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1.2 ctg123 . CDS 1201 1500 . + 0 ID=CDS1.2;Parent=gene1.2 ctg123 . CDS 3000 3902 . + 0 ID=CDS1.2;Parent=gene1.2 ### genometools-1.5.1/testdata/multi_feature_simple.gff3000066400000000000000000000003061211610345200226410ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1 ctg123 . CDS 1201 1500 . + 0 ID=CDS1;Parent=gene1 ctg123 . CDS 3000 3902 . + 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/multi_feature_simple_reverted.gff3000066400000000000000000000003061211610345200245410ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1 ctg123 . CDS 3000 3902 . + 0 ID=CDS1;Parent=gene1 ctg123 . CDS 1201 1500 . + 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/multi_feature_undefined_parent.gff3000066400000000000000000000002371211610345200246650ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . CDS 1201 1500 . + 0 ID=CDS1;Parent=gene1 ctg123 . CDS 3000 3902 . + 0 ID=CDS1;Parent=gene1 ### genometools-1.5.1/testdata/multi_feature_with_different_parent_1.gff3000066400000000000000000000006671211610345200261540ustar00rootroot00000000000000##gff-version 3 # region I:2000001..3000000 I Coding_transcript gene 2929785 2931362 . + . Alias=Y71F9AM.5;Dbxref=CGC:nxt-1;ID=Gene:WBGene00003836;Name=WBGene00003836 I Coding_transcript exon 2929947 2930089 . + . ID=45166;Parent=Gene:WBGene00003836 I Coding_transcript gene 2928394 2931254 . + . Alias=Y71F9AM.6;ID=Gene:WBGene00022122;Name=WBGene00022122 I Coding_transcript exon 2929947 2930089 . + . ID=45166;Parent=Gene:WBGene00022122 genometools-1.5.1/testdata/multi_feature_with_different_parent_1_tidy.gff3000066400000000000000000000006351211610345200272000ustar00rootroot00000000000000##gff-version 3 # region I:2000001..3000000 ##sequence-region I 2928394 2931362 I Coding_transcript gene 2929785 2931362 . + . ID=gene1;Alias=Y71F9AM.5;Dbxref=CGC:nxt-1;Name=WBGene00003836 I Coding_transcript exon 2929947 2930089 . + . Parent=gene1 ### I Coding_transcript gene 2928394 2931254 . + . ID=gene2;Alias=Y71F9AM.6;Name=WBGene00022122 I Coding_transcript exon 2929947 2930089 . + . Parent=gene2 ### genometools-1.5.1/testdata/multi_feature_with_different_parent_2.gff3000066400000000000000000000003631211610345200261460ustar00rootroot00000000000000##gff-version 3 I . gene 2929785 2931362 . + . ID=Gene1 I . exon 2929947 2930089 . + . ID=1;Parent=Gene1 I . exon 2921000 2931362 . + . ID=1;Parent=Gene1 I . gene 2928394 2931254 . + . ID=Gene2 I . exon 2929947 2930089 . + . ID=1;Parent=Gene2 genometools-1.5.1/testdata/multi_feature_with_different_parent_2_tidy.gff3000066400000000000000000000004461211610345200272010ustar00rootroot00000000000000##gff-version 3 ##sequence-region I 2921000 2931362 I . gene 2929785 2931362 . + . ID=gene1 I . exon 2921000 2931362 . + . ID=exon1;Parent=gene1 I . exon 2929947 2930089 . + . ID=exon1;Parent=gene1 ### I . gene 2928394 2931254 . + . ID=gene2 I . exon 2929947 2930089 . + . Parent=gene2 ### genometools-1.5.1/testdata/multiple_header_lines.gff3000066400000000000000000000014411211610345200227610ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.5 + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ### ##gff-version 3 genometools-1.5.1/testdata/multiple_top_level_parents.gff3000066400000000000000000000006531211610345200240700ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . mRNA 1050 9000 . + . ID=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2 ctg123 . exon 1050 1500 . + . Parent=mRNA1,mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA1,mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA1,mRNA2,mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA1,mRNA2,mRNA3 ### genometools-1.5.1/testdata/nGASP/000077500000000000000000000000001211610345200165655ustar00rootroot00000000000000genometools-1.5.1/testdata/nGASP/III.fas000066400000000000000000036411271211610345200177100ustar00rootroot00000000000000>III:1000001..2000000 agatccggtgttttggggagctgtagtcggtgtttgcgtacttttggagctacagtaccccgggaaagttgaaaatttagctagaggctcaaactaaaacaactttagaccgaaattttgcgctgaatccaaatttcgtagtgaattttaaaaaaatttagttttttagtgcaaaaaattgagttttcaagtaaaataataaaaaaaaataaaactgattctaaactaaattttgaccataaattcaaatttctcgtcatatttcacccttagaaacaggctttcagagcttttctgcaattttgcgtgagacccggtgttttgggggactgtagtcgttgtttgcgtacttttggagctacagtaccccggaaaatttgaaaattgagctagaaacctgtactaaaatcggaatagaccaattttttgtgctgaattcgaatttttagttagtttttcgatttgttttgagttttttttttttttttttctaattttcagcacgaaacaagaaaaagaccgccatggcagagcgtcgtttgaaaaattcggcgcttttactgaaagaattcccggtgccacagatgttcaaggccggtcagcggaatatgagcatctcctcgattcagtcaaacgggcggctgtgggttctaatttttgtttaaactttaaaattttgctgtatttgaatttagcttgccgagagctttcagaaaagtgtaatcatgactaggctccgcccattttgagcgatttcgcaataaattcgggtcccgccacgaaaatttctggggtactgtagttttgggaggaaaaacggataaaatacttttattgcgtcgtttactgaattgtgtacattttaaaagtaaaaattagtaaaaatctccaaaattgaaaaagttacagattttcgaaaaaaatggttttaaaaaaattttgaaatattttaaaaatatttttgaattctgaaatttttgttttaacaatttttgtaaaaaaatccaattttggctcgccgagagctttcagaaaagtataatcatgactaggctccgcccattttgagcgatttcgcaatagtttgggtcccaccacgaaaactgatgggctactgtagtttcggaaaattcacaagtgattcaattgtttcgtaaaaatcaatagtttttcttaattctgcttaaaaattggcctaaaatcttgaaaattaacaaagttatgaattttcgaaaattttcaaaaaccaacaaaaaatttgattttttaaaatttaaaatcaataatctacaataaacttacaattaggcagatgaaaattccaatttttgcaaattttgaagctataacgctgaaaactcgtacagctaaaaactccgcccattttgggtcccaccgcgacaacccaaaagtgggtggagcctagacgtgttaggggtcatttcaaagctctcgatgagctgaatttaatttttctagtaattcagagtaaaaatctcaagctcggaaatatttcaactttttcgagaaaaaaatatttttcaaaaaattttttttttttttgaaaattaacactttttagaaaaccatcattcatgccgagcagctccaagttgagctggagcaatctgaaagtgaaagcttcacgtctttcaaaatccaaatcaatcgatactacacatctcgatgttacccggttacatgcgttgaggtgggctttttgaattttttccagaaatttttcaaaatgtttttgttaaagctaaagtttaataacatgcttaaaatattatatttcagcaaaaaatcgccgcttcaaaaacaagcccatacgagtttcgacacctccagtctcaatgacgacactgatgaacttttatgacagtttttcctatatttaataaatatttttgaattttagctaaaattcaacttaattttcaaattgaactcgccgtgagctttcagaaaagtataatcatgcctaggctccgcccatttttagcgatttcgcaataatttgggtcccaccaagaaaactcttggcttactgtagtttcgaaaggaatttgtttttttttttggtattttcaaggcaaaactgaatattttatctaatttttgagaaaaaaaatgagctcaaaatcttgaaaattagcagagttatcgattttcgaaaaaatcgattttttcaaaaatttgtgaaaaatattttttccaaatttttcttatttttggtaggaacttgcgaatttcaattaaagctcgccgttggcttttgaaaaagtataatcatgcctaggctccgcccattttaagcgatttagcaataattttgggtccctccacgaaaactcttggggtacggtagttttgcagggaatttggtttttaatattttattagcatgaatgaacattttatctaaattttgagaaaagccgaaaatcttgaaatctggcagagttatcgattttcgaaaaatttcgaaaaaaaattttcgaatttttttttagttcaaaaagtcaagaagtcaaaaaatcaaaatttaaatgttcaagatatttttagtatctatagtctaaaactcttcaccttatcaatataaatttccgctttgaaaacggcagtgatactttgacaccccaccccgactaaactcctataaaacttgacgtcttatcagtgattctgatcattttggtttgcaaatatgctccgggagcacattttctctgcttctctattgtttcttatctctgtgtctgttggctcggctgccacgtgtcatggggaggaaaagttggatcccagtgggaaattgtgagtttgaatgggattatagacgattttgatttaaaaatttgacctcagcaccaaaaactcgcccggaacattatattgaaacagtttaaacttaaaaaatataattttcagaattttcaaaaaaaaaaatttcaaaaaaaaattttttttttgggaaaaaattttagcgtcaaaattttaacaaattcgagttcgccacctttgatatagcttacatattaattttcagctcgtttggagccaatgtcgtaagatccggtgtatggggggtactgtagtcggtgtttgcgtatttttgaacctacagtaccccttgaaatttcaaaattgagctagcagcccaaactaaaatgattttgaacccaaattttgcgctgaatacgaatttaaacagtatttttgtgttaattgcttttgaacacgaaaatttttatattttcatacattttcaaagaaattgatagattttccaaatcaaggttagtttctgaaaattttcatgttaaagtttggactcagcaccttaaagttactctagttcataattttcagcctgattggagccaatgtcgtaagattcggtgtatagggggtactgtactcggtgtttggggacttctgaagctacagtacccctcgaaatttcaaaattgagctagaagcctgaactaaaaggattttagacccaaactttccgctgaatccgaattttaatgttgttttccattgattttaaaattttcagctgctacgtggtccatacgggcgccgcatcgttccatgacgctgaaaaagcttgctatgactatggtggctaccacctggcctctgtaccaagtatgattgacaataatttcttgtacagtaagttttagacttaaaaatttggaaagaaaaatgtaaaaatctaggaaaaaaatatttcagacctctctagcaactcgaacgtttgggccaactacttttggatcgggctcaccgatatgacggccgatggctcgtgggaatggattgatggcttggatttggtatttatgaactgggcttcaagttggtgaaattttaggaaaaaaatatttccgaaaaaaaaatccaggctcaactgccggctattgcggagccatgcgtgctgcagatgcccgttggcaagcccaggactgcactaagccttatccgttcttttgctatggaccggctctcggagcaccgacaaatcctccgaatagtgggttttttttttctaaaactctaacattttcagatttttcaagatttttttggtttgtagtttattgtatcatattcagctcgttattagctttaaaataaacaccataatgcctaggtttccaccattttgggcgaatttctaaatttttcgggtcccgccacgaaaactcattgggcactgtattttcaaaaaaaaatggggttattagtttttccagtaaaatctgaaaagttggtagcagtttgtaaaaaaaatcaatttaaaatcgctaaaatttaaaaagttacgaattttcgaaaaatactttttaaaaaattttaacgaaatttttgaaattttcgaaaattcataactttcttaattttagagattttctttaaatttttttagtggtagcaagataacttattgatttttacctaaattttaacatttctagcaaatttttaagaaacaaagtacccccagcagttttcgtggcgggacccaaaaattattgcgaaatcgctcaaaatgggcggagcctagtcataattatacttttttgaaaggtcttgacacaaacaattttaatttgataatttcaaaaagaaattgttaaaactttcactgaaaatctaatatttacaaatatttcgcaatattttttcgaaaatttcaaagtccctaaaagtgggcggagcctagtcatgattatacttttttgaaagctctcggtgagctgaatttagtgaagttaaaatgaaatgtttacattaaaaattttcaagggtctcgccacgaaaactaaaagccaaaaaaatcacaatttttcagcccccaagacaactcagaagcctgtgagaaatcaggaaaatatgataaaattcatggctgatgccgagtctgttggtgatccaaatgtcgacccaaatgctttgagcttttacaataaggttaggctccgcccacttttaatcgattttttttttgaaattgcaggagcgggaatttatccgagcggtgacggattacctgtttgcaaacccgaccagtgatggaaatacctgtctgtattatatgtcaccagctttttatggattcagtgagttttgaaaaatattgaaaaaaaacttcaaaaaaaatttccaaaaaaaaaatttttttttcaaaaaattttttcccaaatttttgtctgaaattttcattttcagcccaatatgagcaacaatttgacacgagcccagcatggagccactaccaatttgacaatctccttgagtccaacgtttgggaccagggaaagactgaccatgactataatattaccgagtgagcttttttcagattttttttggcctaaaaaataaataaaaaagagcttggagagttttaattgagctgcaacagctcccaattccttttttacgagctttcccgatatattttccgagttttagacccaaaaattcgagctctccacctagaaaaacctattacccgcctcgggaagtcgaaccccagacctattactccttaggcaaggctcttaccgcctgtgccactttgcactcctgctcagtcacgcaggctaccggtgtggcgcaggcggtaagcggccagactatagtgaaaaaggtcgggggttcgaccccccgaaactgtatttaggttttcttattattttttagttaaaacttgaaaaatagggtaattaattcgtttcacatcaactttttcgattttatttgaaattaattttcacagatagctatgatatttttgcaacttttaatctataatttagctaaaacatctcaaaaactagaaaaactttaaaactcaaattttagcgcaataaccggtgctcaaaagtttcggtgggtcccatcgatgaacaacatcggctacactacgttggtatttttgacggctcgccgcgatttttccggaattccgtcacttttccagccattcccaaagttcgatgaagtcgtcgtaatatccttgaatggtatgggttactgtagttgagttgcaggtgattacggtagtttcagggtcccaaatgccaggaatcccggctggagtcaaaaatgtcgcggtttcgaatgatttcagcagtacggatattcaaaatgttatcaatgttttaaaatgtcattaatttttaataaatttgactattttaccatagaattcgaaaaatgttgtcctaaattagtttcctcgtcggtttttcaagtttttcacctaaaaatttgagctctccgcctagaaaaacctaaatacagtttcgggggtcgaaccccttacctttttcttcatagtcaaaccgcttaccgcctgcgccaccggtagcttgcttgccgaccgccacgcagcagcgcagcagcctgagtgcaaagtggcgcagtaagcaaagtggcgcaagcgccttgcctatggagcaaaaggtctgggtttcgacttcccgaggcaggtaataggtttttctaggtggagagctcgaatttttaggtctaaaacttggaaaattagttctaaacccaaaaaaacaagatcaaacattcaaagttccagggataaagctttcaatctgagattatctacactttcggctgcatcgaagaaaactcacgcccactggagattagcaaagagaggggagcctcgggatttgtataaaacttgccgaaaactccgtttttcttcattttattcttgttggctcagagtaagaaggtagcgagtcgaggacggggagggaagggacgctgagagcccttctctccttttttcataagttgaacgagagcaattttcgaggagagcattccctacaatggaacccaattggatttccagactcatttgtcctgagtaagtcgtttttgttttggttattaccgaaatctgtccgttttcagggaacttgtcgcaataacaggaaccaattggcaactctattgtggggttacgtggtgcgctgggcttccatcatgctggcgaccgcacccctttttaattcgttaacttccatcttttttaatgaatatgggcaataaaaaggttttattgttaactgaagttgtttttcttttctttgtttttaaaacaaaactcaaaaaatttggttgaaaactagtttaaacaataattttgcgcgtttttttactgaaaaattcgagctctccgcctagaaaaacccaaaaacagttccaaggggccgaacccctgacctttttcaccatagtcgagccgcttaccgcctgtgccaccggtcgctcgcgtgcaggggtagcattggcgcgtgagtgtaacgtggcgcgggcggtaagcgccttgtctatggagtaataggtctggggttcgactccccgaggcaggtaatacgtttttctaggtggagagctcgattttttgggtctaaagcttgggaattttaacgggaaaccttttttccaagaccttcagactacttttcgtttaattcggaggcagaaagcatttattttaggatgaaagtatacaattagtcatttgttaatctgcagtaaccagagagaatatcggattataatattcagaagggatttggatgataatgccagtacgtgataaatagcaacactgcttgttagtttatattcggcacgcacgtcaataggcagattttccgcgcaagattgtgtaatcaaaagccctttatagccccctttttatgagatcatgggtatgagatcggcaaattctgggcgtttggtctttgggaaatgaatttaattaaaaactcttataacctttctggaaattcaatttcgctgctaatccgaatatttagccaatttcctatgcaacttaataacaaaaccactgctagaacttcaatttcccagtgttttttcatgaattgagaattcttttttctttcataaaactgtttagcattttcaaatgtaccagaaaataccaaaaaaagtatgctagcttcaatgttttaaaaaattcagaaaatgcaccaaaagcagttattttcaaaaattcaaaagtacggcaaaatcatatggagcgattattttttctttcataaaactgttcagcatgatcaaatataccagaaaattccaaaaaagtatgctatgttgttcggaaatttattttaaaaattcagaaaatgcaccaaaagaccgaatttgaaccttatatattgttcaacataatttcaacaattgtagcaaaatttgaaattttcaagagcacaattcttacgccacttgttatgatttcaaggaactgattaagaacactgaaaagcaattattggaggttgtgatcaaaagcaagttcttatcattttgtgctcctttttccatacctgcaaacaactcccagtcaacaaaaatggttaacttgaagctctacttctacggagtttttgttctaatctgctttctactccacgtggtcggaatcctatcgaattccatttttatatactatagtaaaataagttggttaagaaaattttgaaaaaaacggcaaattcattacttgcagtgggtgaaaaggatctggtaagagttgggctcacattctggagatctgtgagttttatttttgtaaaattgcacaaagagccctgagtcccttgtcaagctttgaaaccttgccttaacaaatctaatttccagtggtggcgggacgcctctacggttgccgttttcacatgccttttgtcggccatttttcaaaatctagtgatcgtggcgtatttctttgttattcatgagtaagttctctcactttttaagttaaaaaaaaaaaatttcatttcacaggtcacacaccaaaaaccaggaatattcttattctcggaagctcatagttttgctgaaactcattaaatgggtgttgctagctaatactcttttcataattgttaactcaattctactcacactgtcggctacgtcttttagtgttagtttgagaaaggctcccatgcaggcgccgaaacaatgtctgattagagctcattttccgagttttagacacaaaaattcgagctctccacctagaaaaacctattacctgcctcggggagtcgaaacccagaccttttgctccataggcaaggcgcttgcgccactttgcttactgcgccactttgcactcatgctgctgcgctgctgcgtggcggtcggcaagcaagctaccggtggcgcaggcggtaagcggtttgactatgaagaaaaaggtaaggggttcgacccccgaaactgtatttaggtttttctagacggcgagctcgaatttttaagtgaaaaaagttgaaaaatcgatggggaaaccgtggggcaggattgaggaggttggtggcaggccctgtaacagcgcctacctcccatggaaaccctagttttgagtgaaaaataaactttttcagtttggattctcattgtggcttcaagttgcatcactttgcattagccctgtcaatattctgattgccaggcgctttgaggaattggtaacgttgactatgaagcagaagttcacaaagattcacccattgttacttgaaattccaaatgattctgttggcttgaagagcggtgatccaaaaatcagtgatttgtaaataaatttgaactgaatatagcgaatctaacagattttgaatctaattcaaggaactttttcagaattgtatgtttttgtatttcaggcgactatcatatttgagctctgaaaagcaagtattggagaccccgatcttctttttttatcgaaaaattcgaaaaaatttggtcgaaacccagtttttaactaaaaaattccagctctccacttagaaaaacataaatacagttccagggggtcgaacccccgatctttttcaccatagtcaagccgcttaccgcctgcgctaccggtcatctgcgtgctggcagccgcgctgcagcatgattgcacggtggcggtaggctccttgtctatggagtaataggtctggggttcgacttcccgaggcgggtaataggtttttctaggtggagagctcgattttttgggtctaaagcttgggaattttaacgggaaaccttttttccaagaccttcagactactttcggcttgcttctgagtcaggaaacatctattttgggatgaaactagagggttaatcatgccttaaactgcagtaaccagagtgtatatcggaatataatattcagaagggatttgaatgatggggatttataacacatgattcatgttagttttctataagctgaataagattggattttcaacggatttgtacaaaatagtatagagctttaagaattggagcgaaatttgaaaacttcgagagagtttttgttatgattttaaagtactgacactgaaaagcaaatattggcgtttgctcacccaaaacaagttcttatcattttgtgctccttccccatcttcaagtaatacccaactctcagtcaacaaaaatggttgacttgaagctctgcttctacggaatttctcttctaatcggatttttgctccacgtggtcggaaccgtctctaattccattttcatatactacttcaagcctgtatgggtcgaaaagcatctggcaaactttggaatcgatcttggggtacctgtaagttgaaattttccagattatccaaaaattccaatttcagtactggtggggtccctcggccaaggtagctgtctacacatgcctcttatcgtctattggtcaaaatctagttgtcgtggcgtatatctttctgttttatgagtcgcaaaaccaccaatattctcggaagtttatatatttgctgaaattcatcaaatatatgttgctagctagtactctgctcttaattgttggcctaaacttgctcacattgtcggcaaagtgggatgaggagcatgagtttgttcgggtaggtttttgaaatattttaggtcgaagtttatagtttatagtgttatagtgttatagtgttatagtgttataatgttatagtattatagtttatagtattatagtttacagtgttatagtgttaaagtgttaaagtttacagtttatagtttatgtcttccagtatggctactcattatggcttctagttgcatcgatttgcattagccccttcaacattctggttgtcagacgctttgaggaatcggcggagatgaagcagaagctcacaaagatttacccattgacttcagaaattcccaatgattttgttgttttgaagagcggttattcaaaaatgagtgatatttaaataaatgtgaacagaataaagatttcgaccaacgaatctaattcaacaggaggaaccccgagtatttcagaattgttttttttccagtcggctatcactgttgagcactgaaagcaaatattgggggctgttgattttacaggggaagtaagaaaaaaaccttgcttgttttgactcaaattgcaaatctaggtcgaaaatgtcacacacatcgaggagctacgcttccctcatcctccctgcacaggtaaagcgccacaggttagtggcagcttaatggcaggttaaaagccgccagcaggttagtgtcagcttagtatcaggctaaaagtcgctgtcggactaagagcaggttagtgtcagcttagtgattttcgctcaaattttgagaaaagcgcgtcaggtgaacggcgagtaagtgtcaggtgatgggtcagatgagtgaaaatttaagtttcagaaactgagtgaaagttcataaaaacgagttatatgctcatttgtgtaaatttctgaaaaaaaaacttccaaaaatacagttttagggtggtgccatggctcagtaggtaacacacaggtgattcgcggcgcatgcgtggcgcgtctcacacgcttcgctcacgcgtctgagaggaccaagcgaagacgcgcgtcacgcatgcgtcaggcgcgcgtagcgaaagcaagcatgcttcacgcgtgcgttgcgaaagaagcgtgcctcacgcgtgcgttgcgaacctttcaaatatcgcatccgggctggtaaaaaaaattgaaatagcttcaaaaatcattatatattgaaattttattgatgaatagataaaaaatcaaaaaattaatatcctcctttgttcgtctcacgcctcgctccgatccgtctgatgttgccacattcgattgatgaatttcgggaaacctgaaatagaaattgatgaaatatgtattcctttttttttctggttttttaaattgatttgtatttttccaatcatataaaagggtgtcggttttttgatgttttcagaaaatcgaacatcgaaaaattttcgatgttttgatttttgaaaaatggaaattttttgaaaatcgaaaaatcaagcattttaaatttttcgattttccgatatttcgaaaaaatggtctccgagatgacaaactttgaggaggcaagggtctctttgagacaaagtctccaaggtgacaaactttttttcagttttttaagagttatattttggtataaaatctgtttaaaaaatttaaaaaatttcatgataaaaggatactgttaatcaaattttcttcataaattaccttgaataaagatgattaatcctagcaaacaattatgcttgttgatgtaaagaaaaaaaaattaaacagtctggtgaatatttgataatatttgagagacaatttttcattttttttcaaaaaggaaacccgaaaaaatccccctttatgaaaaatgtcaacttttttttcgaaattttttttgaaaacttttcaaattttgattagatcaattatagataagtgtgatttttttcagtttcgatgttcacagcacgatttcatacgaaaacccgaggttcagtagaacccataagttcagaaaatgctttcacttcggacgcttttatctccatgaaaaatttttttctggcaaattgatcaactacaaagttgtttatcttaatctaaagtacaactttgtatcgttttttgatcgttttttaccaaaaagtttgttggtcgagataaagttgtgtaaagttcgacaccttcatgctattattttcttcttctttttctgttcaattcacgaccaaaaattttttttgataaaaacgatcaactacaaagttgtactttagattaagatatatgcgttttttgaacataggagttctactttacctcaggtgtgcgtctgaaatcgtgttctgaacacccaaactgaaaaaaaacaaaccattttttcaaaacatctgatcaaattttggagagttaaaaaaaaatttcgaacatttaaaaaaaaaatttttataaggggggacccattgaatttttttttcaaaaatcgaaaaaaaaaatgtattctcaaatgttcatcatataataaaactgataataaaagagctcatatccgtttctctgctccgttaacaggaattattgtgtgctagaaggattaatcatctttattcaagctgatttatcaagaaaatttgattgatagtatcttaaatcatgaaatttttgaaattgttttatcgatttttaaaaaatcgagaaatcgaaattttcgtttttcatttttaatttttccattttccctgaagaacatcaaaaatcgaaaaatggcacccttggttcatactatatcgaacgcaacgaatttgacaaggaactttgtagcaacaacaaagtaaacatattttacaatatctgatgaatatttgataagttttgaattaattttgctgattttttgagcaaaaaaattccgttgaaaaactttcaaaaaagctttttttggaaatttctcaaatattgatcaaatgttgaagagaagtgcaacatttgatgctactccagatggaacgttcagaacacgagttaagataacaacggatgtatagtagaattggtatgatgtaaaaccagatcagcctatatctccgtgcaaaaaatttctatgacaaaatgaccaatttaaattttgttgtccttattgtgaagaacaactttgtagttaaacgctattcaccaaaaaatagctggccgatataaaactgcttgaagtgtgtaactttatgcttaaattgtctgcctattgtaatgttcatacctcggtcagcaaatttttgttagaaaacgtttaactacagggttgttgttcacaataaggacaacaaatttcaattggtcattttgtcatagaaattttttgcacggagatatagggataggtaacaaggcacggagatatagggataggtaactggttttacaaaacggcagttctattatacatcctttgtctgaaatcgtgttctgaacattcgaactggggtaacaataagttttgcacttttttttaacatctgatcaatatttgagaaatttcctagaaattattttttgaattttgaaaaaaaaatgccaaagggtcccccttacaaaaaatttcaaaaattttttagaaatttttttttgaaacctttttaaattttgatcagatgtgacagaacatataaatttttgctgtttttgttcagtttggatgttctgaacatgattacaccagaggcatagtaccataatccataacttaaaaaactgcattcacttcgaatgcttaaatctccgtggaaaaaatttttatgaccatgtgatcaactacaaagtttttcatcatgatctgaagtacaactttgtagttgattgttttttatcaaaaaaatttttggttgagatataaacagacaaagaaaaaaaacatacaagcatgaagttgctgcacttggcacaactttatctcggccatcaattgttttgataaaaacaatcaactacaaagttgtacttcagatcaggatgaacaactttgtagttgatcactttgtcataaaaaatttttccacggagatttaagcattcggagtgaatgcgttttttgaaaataggatttctacatacttcagattctcatctgaagtcgtgctctgaacatccaaactgaaaaaaaccacaaatgttgcatttttctataaaatcaaatcaaattttgaaaagttaataaaaaaacatttcgaaaaaacatttgaaattttttttaaggatttcataaggaaccctttggattttcttttcgaaaaaatcgaagaaaaatgttctcaaatatttatcagatattgcagaaatatgtttactttgttggttctatacattttcttgattgtcgtccattactttttccaaatcaagtttttcatactttcttttttcgaaaaggcccacatcaaaggacaatggttattttgcaagaacagcctcgaaaattgtttatggttataattatttgaagagaatctgctgatgtttttttttttttaatttaccttgtaatctgatttaggatccgtcccaactcgtagccattcctcgaagacatcatgtttcggtggggatgacttcgccgttcctaaaagtatttcatatagggttttgagcgtatttaaaacataacttacttgaaaaggatgtcggtgttgcggcggagacgtcatttccatgttagtttcgcctcaaactcttgcatcaatttcgtcaacgtccaactcgtatctcgagtgacaatccgaacgaatgcggcaatccgtgaatacttccatcgagtgttccatacaagatcgaatgaattcgaacactgaaaatgagaaaagtaatggaatgaacaaggttgctaacaacttactttgcagcacaactccttgttccaagttatgatccgtcttgaacggatcagcaatacacattggatacttgcaccagcgatctggtttgtactccaatttcttggacaccatctggataaaatttgtggagtagtcaaagtatgtggcatagcaatccaagaatccaagaatccaagaatccaagaatccaacgaacaaatcaacgacagaagcacgactctggcatcgaaacgagagcatcatcttccagtaacacatctccttcatagtatccactgctcccgttttgaatccaatcgacttagcttttccagtccttgctgaaatataaagtttgagtaagaatcaacaaaataaaaaatgcaattacgaggaggtgtaatgttcaaagaaaataaaagtttaaaacaaaaagatatatcgtaatttcgcaacattttgaaatttcagtttaaaggggcactcggtttttctccctacgatatattcaacgggattacacgtaatttcctattaaaatttgaaagattaaaacatgattgaacttttttatcagtgaaaaaacgggaaaatgaacaaaatacagtactttagaactaattcatcggaaaaacagaagtttcgactattttttagatgttacagtcagtaaatcaatggaaaatgcatttacagacgtcgaaatatctgtttcaaaacaaaaatttgaaaaaatctagcaaaatcacttgaaaatatgaagaaaactcaaaatcgattaataccgaaatgtaaattatttaattgtccgagaggattacacgggttgtccgagagaagtacacggccgagaatgaaaatctttccgcgcgagatttaaattagaattttatacaataaatttcaagcgaaaaacttttaggttatctaatcacaaaaactcagcggaaaatttttccaaagatagagaaaagggaaacctccatttcttcagtaacaattataaacggaacattgaactgcatttggaatgaactatcgttgttttcaccaaaattagtttttaggttcactccagataaatatagcgatactattatcacttttcacggcagaaaaacaattaaaaacagtggaaagacaaaataaactgtgaaaagtaaaataaattacctaaaatatttgtatcgattactgttccttctttttcgctaatcgtgtttcacgcatgctccacgtatgcgtggcgaaaagggagacactttcgccatctcgtgcgtaacgcatgcttcacacatgcgtccgaggctagcttttcgctacgcgtccaatacgcgcctcatacgcgcctcaaagcgtcacgcatgaaacgcgaatcacctgtgcagctttcactggggagtgggagggggagggatgagttcaattgtgccaaaaatccgaaattttttttttgcaaaaaagtgcagtcatatgtatgtaaaaaatgaattgaagacatgtgtgcactggttttcaaaaattttttaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatattaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaattgagaattatggaaaaaatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatggaaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatggaaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatggaaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaattttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggagaatatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggagaatatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggagaatatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatgggaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggagaatatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggagaatatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggagaatatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatatatatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggagaatatggaaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatataaatttaaatgtgcactggttttcaaaactttttaaactgagaattatggaaaaaatggaaaagaatatgaaaaatgaaaatgggagggggatgaatgagttcaattctgccaaaattccaaattttttttttgcaaaaatgtgcagtcatatgcctgtaaaaaataaatcggatacagaaatccctctagcgcgcctaaaatttaattttcaggtccaaaaatgtaccaataatcttagaaaaaaattatctattcagggccatatcaattatgccaaaattccaaaacttttttttcctctaatttcggcaatcaaacaagttcttatcagtttttgtgctccttccccatcttcaagtaatactttcaaaattttaaacagctgataacactcccagtcaacaaaaatggttgacttgaagttctgcttctacggactttctcttcttactggttttttgctccatgttgttggagttttctcgccatgcttcttcacctactatttatatagcagatattatgatcagacggatctgctgagctatgggatcgatccggggatacctgtgagttttctagctttaagtaggccctgacagactcccaaatataaaaaatacaattttcagtggggcaactggttcaaatttgcagtcttcacaagctacttgtcagttgtctgtcaaatttttgtgattgcgacgtatgtctacattgtttatgagtgagtttatttgatctacaacgtggaaaaaacatcttccgtttgatctacatagatctacaaaaaatgcggcaaagttctcaactaatttctcatgattaacgggaaaattcccgcatctttcgtagatcaaacagcctgacaccacgtgttctccagatcacacaaccaccagtactctcaaaaacgtgtcaccttgctcaagctcatcaaatggacgctgctagtgagcactcttcttatcattggaagcatacagttgattacactggtagcttcacgggagaagaaccctaccttaaaggtcagattctaagatgggtttttgccgccgaattcgactttttccagtatggctactcattttggcttctagttggagcaatttgcatgagccccttcaatattttgatcgctcgatggtttgatgaagcggcagcattgaagatgaagcaaacgtttgcaaaggttcacccattgagccttgaagttcccaatgattttgttgttttgaagagcggttatttccaaatgagtgatatttaaaggaatttgaacagaataaagcaaattttcgaaaaaaaattggacaatttgaaccttggttttgggccgaatctgaagacaaaatgctcatacgcaggcttttgactcaaatacgtgcagtttcaagttctacttttaccgttttcagcaaaaatgatgcacctcacgcggttaagacaaatattttcagactacgatcggaaatttgaggttctaatcaaaaaattcgaaatttgatcaaatttcggtgtttttcacgagaaatggacattttacactgcaacttttttcgaacgagggacgaggcaaaaaggtttctaggccatggccgagtccccgacaaatttcagcggccatttatcttgctttgttttctgcgtgtttttttttcatttttcaccgattttttccgttttttcttatcaaaacaaataaataaatattttttgcagatgctaaaacaattttcaagtgaaaaaattgtgaattcagttggcaagtagcagtgaacgtgggcaatgtaatatgatggataacggctatacaaaacccaaactttttctgaaacataatatatatgcttttaagatgctgaaagtacctgattttcataacgagacagctaaaaaagtttttagattttcaaaattcaacattttgtgccaaaatctcgacttttttaccaaaaaagttgaattttgaaaatctcaaaactttttcagcggtctcgttatgaaaatcaggtacttttagcatctaaacatcatatgtatcatgtttggggaaaagtttgggttttgtattcccgtaatccatcatattacattgaccactttcaccgctacttgccggctgaattcacaatttttcatctggaaattattttagcattaacaaaaaatatgtatttatcagttttaataagaaaacacgggaaaaatcggtgaaaaacacaagaaaacaaagcaagtagaaaatgtcgtaaaatgcggtgtattgtgtgcaaacaccgatttttcgcattttttctcagccctcgttcgaaaaaagttgcagtgttttagtgggatttcaaacaaaatataacacctgcaaaaaaattggggcatttttgatgccctgaaccttttcagaatcaaatttttaaggctttaaatcaggtatgggctttctgaacacgtttttgagagttttgagtgagaattgtaagtaattcgcgtttcgcagagctaaaacttggagtttgtaaggtttttcacgtaatacagaggttttgagtcgacatatgtgcttctaagctgaatttgtacgattttgaacaaccggagttcagaggtttcaatcattttttcacaatttgaagggagattttacttcttgggcggatttcagatttattgaacaaaatacaacttaacagtgaattacataaaatgtcatgtatacttcaatatattgtacttaatatccgtttgaggccaaaagtctgaaacaagttgctgggagtcgaatagatcttgttctaggtctgacagacgctgctcaaggtttgaattgagttgctccagatgtaaaagacgttgctcaaatttcgactcgcaccgtttttcaagtcttgttaggcgtttctcaacgtttgactcgcgatacattccctttagtcttggtggaagagattcgttagggaattttttggcaatattcctcacgcctgtttgtaaaagatcatcagcaagtatgacggctaaaaagctgaaaagaaaagcaggaaagagaacaaaaaatgcccattcgttgttctcagaattaaggttcgctgtcgcggcccatgtaaacatgcttaacatagagagtattaaaatgaaaaccatcgtccaaacgatatagaacagcacgatgagtatttgtcgagtatacccgcattttttcacgaggattctgaaacaaaaacgagtagaaattgattggtaaagtttttttacccctggaaaatccaccagtaagcacagatcatgatgcagtagcaaaaaatagttaggtagatcaatatgctttggaaaacgaataagaatcccaactgtaaatcgaaagtttatcttcggacacgaaaagtcggctgaggacctcaaattttctaacaagcctaaacctgagtctaagcctaaatgtgagtctgaacctgttcaatactctgtcaatttcggctttgggcctcaaaaatgactaaactttgaaatttctcactttgaatttaaacaatttggcttaagacctcaaaaatcggctcaaatttaactatttgggtcaggacctcaattttgaaggaaattcttgtaattttggttaggaaactattcaacgattaactcagatttgaatatatttgctccaaattcaacatttgagccgaaaacctggaaaatttattcagaattcaaaatttgggcttaaaacctccagttttcaacaaaaatctggaagatattggcttagaaattccaatttttggctcagagcgcggaaattgtgtacttacatccgaaaacgggttcaatcgatgacatctggtagcatttttgtcttcagtcgagtcgaaatatatctcctcatagaaacacggagttgccactgcaaaaatgttgatcccatagccaattgtgatgctaattccaagaaaaactaacgagacatctatcatttttcgactaactcgcactgaaaatgagttaatggagagaaagcatctcggcggaggtgataagaagtcgcgttctcatcatttatttcgaaatagcaatgacggaactgtatattttgattaaaaacagtaaatattggcttattggctaatattggtttattgaacaaactacaacttaacagtgaaaattatacaggaaaattctatgaatacatcaatattttgtattcttcatatccgtttgaggtcaaacgtctaagacacgttgctgagagtctagaacatcttgttctaagtctgacagacgctgctcaaagttcgattgacattgctcaaagtttgagttgttctgctctagatgtgataggcgttgctcgaagtttgagcgtttttcaagccttgatggacgctgagcaatatttgacatttgacttgctgagctgtaccatttctgtattctcggtggaagagtttcatcaggaaatgcttccccgaattgcttcacgccttttattaacattactcctaccatcggatgagctgaaaggattggtaaaggagcaagaaggacaacaatgtaagatgttaattggcatggaagcttcactgccgcggcccatgctagaatgattaaaacataaagtattaaaataacaaacatcatccaaaagacacaatccagcacgatgagtatttgtcgggtatacccgcattttttcacgaggattctgaaacaaaaacgagtagaaattgattggtaaagtttttttacccctggaaaatccacccgtaagcacagattacgatgcagtagcaaaaaataataaggtaaatcaatatgctttcgaaaacgaataagaatcccaactgtaaatcgaaaaatcattttcttagcacagttttcaaatgttcaactccaaatttgaaagtttgtcgattgtggaattgccccctcgcatgagcttaattctaagcctcagcctaagttagagcctaagcctgagcctggtctaagtctaacccgaagcttaaaacttaagcttaagactaagcctaagcatacgcctatgttgaaggctaaaattaagcctaagctaaggtctaggcctacgtctagacataagcccaagcttaagcctaaggatgaaacaaatgttcaatactctcttaatttaggattagggcttcaaaaaatgactaaagtttaaaatttcttattttgaattttaaaaatttggcttgaaacttcgtaaattggctcagatttgcaattgttgccttgggacctcatttttgaaggaaattcttgtaattttggctcagaaccttgaaaaaccactcaaatttaaaaattttgctggagacctcaaaaattggtttcaacctaagaatttgaacttgggcctataatttacttcaaaaatttcagattttggattggaattttgaaagtcagacgtcttgaaccccacttttcaacaacacaaaatttgacagtttccttcaaaactctgaacttagttcaaaccacttctattttgactcaagatttgaaatttcagctcataaactctttttttttcattttaaaaccttgaatttgaaataaaatatccgggttttctttgaatttaagtggaaaatctcaaatcatggctcagaacgcgaaaattgtgtacttacatccgaaaacgggttcaatcgatggcatctggtagcatttttgttttatgttgaaaaaaaaaaaaaaaaaaatgttgagcccaaagccaattgtgatgctaactccgagaaaaactaacgagacatcgatcatttttcgactaactcgcactgaaaatgagttaatggagagaaagcatctcggcggaggtgataagaagttgcgtctcatcatttatttcgaaatagcaatgacggaactgtatagtttcattcaaaacagtaaatattggtgtatgtaatttaatttttggttgtgaatattaaaaatgcagtttaaaacttgaaattttgactcaaaatcaaaattaggattaggctcaggcttaggcttaggcttaggcttaggcttagacttaggcttaggatcaggcttaggcttacgcttacgcttaggcgagggacaactccgcctttcaagggattctcggaaaacgaaaacaattggaatttgtgaaaatcgtacgtctgaaggcattaaaaattcaaaaattccataaaatccttaaaattcccttaaaatgtagaaatattgagtaaaatcatcaaaatcgccaatggaatcttcttaaaattgtttttttttggttttggctcaaatctagaagttttctgccaaattgaatgttaaaactccatttctttcaaaattcacaattttatcaaaataattcagttcttggaaattgaatagacactggtagtgtcaaaattgaatgggttcgcagtatgagtagagttttgccggattgttcgtgccacttgaaccaccaagcgtcgggaaagtgcaatgttgatggagcacacgatgattgtggtgatcaggagcaatgattggtaggagagctgtaaaatgaatggggaattgactggaattgcgttacagagctctcaattttggttcagaacgtaaaatttaagctcggagcatcagattcgctctgaagcatccaattttagtttgaaaagtcgaatttctggttcagaaccgtcgaatttcgccaaattttgcttaaaagcactcaaattcggtccagaagctcgcctgaatacttacataaacagtattgtcattgaaacggctctggaacttgatcgcgatcagcacaaagctcagcgcaatcagcacaacgatcagtaggaagaaccacttgaaatagtagaacaacgagaggatctccttggaatactgccgcttcttgatttttgttctgaatatttggcatttaaaacaggtttgggtgcaaaaaaagcttactcatagacaatgaatccatacatcaaggcgaccatgaactggcagacaactgtggtgtagagggcgaagctcgcgaaatcgtacgaggagcccatctggaaatgattttgagttttggaaactcgaaatttcgcttcaggagccataattgagccccaggatctcagaaagtgaagattttgttgaaatttgttgtatttcttgattttgtttccaaaatgcagctttcaggcccgagcttggaggttttgagaagattttatgggattctaatttttttttctcgataaatcggtaatttggtccaaaactcgaatttttaaggcaattgttgaagttttagtcctttcatcatcaattttggcgcatcatcaaattttggctttgggccttaaaaaatgtaatttcaaaattacaggaatttccttaaaacatgaggtctcaagccaaatttgttaaattcaaagtgataaattttgaattttagtcattttttaagactcgaagccaaaattgatagaggattggactaaaatttcaacaagtgccttatattttggctcagaacctgaaaaaaccaaatttttgagttttttgtcctaaatctcatcaaatctaaattttcaacacttttgttgaatgaaaaactcacactcgagaacggattaaccgcatgacatttgtgctgcttcgaatcggctgttgccttctccaccatgaagcatggcgccacaacgccgacaatattaagaacaaatccaatagaaatgaaaattcccagaatgaggaatttcaaatccgccatttcttgttgggaaatggcaaggaataggaattatttacaggaaaaatgtgtcacactttttgccgccgagttcttatcgatttgtgagtccagtgggacagctgggcgcgtcattactgataagagaggtagtgacataggttcgcgagtactggaaaggtcagaatttgccgaaaatcgactaattagtgacttttcctgttgagaaccggaagagcagtgaggaaattgcagatttgggagagaaaattgaaaatttttgaattttccacaaaaattgatggatctgactccattttttacagttttcggcttcacattgaaatgtttcgccgaaattggtcaaattttagctaaaagccacaaaacagagttcctgatcgcaacattcggccaaaatctcgaatttttgctttataaccaagaatttgtgttcaaaacctagaattccgcaagtttattataatttctcaaatcttagcaattgtattgccatttgtagtgtccaaattgtattgattcgtcgacggcgcggagttttgttgttgagtaacccgtttgattagccgcaccagccgtttggaaagtgtaatattgaaggggcacacaatgcatgtacaaatcgccagtacaaatgtttggtaggacagctgaaaatactgatgattttgaaatttggctgaaacccttcgaaaattggtgtagaccaggggtgtgcggcaaatggaaaaaattgccgagctcggcaaatcggcaattgctggtttttcaaaatttgccgagctcggcaaattcggcaaatctcttttttcaatatttgccgagcacggcaaattcggcaaatttgccgtgcttaacaaactcggaaaaatttgatattttttatgttttttggagcaccaaaactactgaattcttaacacacatctggtttctgaataagttccgcgtagtatgtctgtttaagcatcaaaatagctcaattttatatcattttactaaatttttggctaaaaaatcaatagttttagtcaaaattgtactgtcaaatttttgacgtgtgcggcaaatttcgaaatttgccgagctcggcaaattcggcaaatctacttttttgaaaattgccgagctcggcaaatcggcaattgctggtttttttaaatttgccgaattcggcaaatcggcaaatttgccgagctcggcaagtcggcaattttcggcaaatcggcaaatttgccgcacacccctggtgtagaccctttaaagcgtcgaatattcgtcaaaaaaatttcaagatttgttgaaaatcaccaacttttactcatttttctttgaaaagcattacaaatttcaaaattacggtgaaactcacattaagactgccgtcctggaaacgcttgtcatactggatttcgataagcacaaagctcagcacgttcagcacaattattaacatgaatagccatttgatatagtcgaaccgtgaaagaatctctttggaatacttacttttcttgatttttgttctgaaaatttcagtattttcagataaattgagagcaaaagcttacttattgacaattgacccaatgagccagccgatgatgcattggcagaagattgtggcgtagaggaagaagctggcgagatcgtatgaatagcccagctgaaagtagttaccgattttgaactagaaaattggaatttctggagtttggccgtagaaaagaataaaaatcagttaaaaaggttaaaatcgtcagaattttcgttaaaattggcccgggcaggagtttgacccagaatttcaaagtttctggcctaaaaatacgcctttttctacaaaaactcacagttgagaacggattcacccagtggcatgtctcctttttagttgacctgttcgtctccaccaaaaagcatggcgtcaccacaccgactatgttcaggacaaatcctagtaagacgaagaatccaaagtagatcaatttcagatcgattattccttggatggttgagaaatgacgatctatgtccgaacaaagaggcatttgaagaacagtgggtactgctaattggaccgtctggacagttgttatcactgtgataagaggggtggtgacataggtgcgcgagtactgggaagttcacaatctttcaaaaaaaaaacgactggtttgtcaattttatgacttttagtcgcctcttttgtcgggctgtgaaacaatttgaacctttcttggcccgcgttttggggggtaaaactcaaaatttgaggatttggcccaaaatttcaggctacgatctaaatttaggccatctcagtggcaatttgtaagcttcggacaaaaacacaaaggttttgagccaaacttcggagacttgaagccaaattggcactctgagccaaattttagaaattagggcttaaatccagcttgacagtcaaattttgaagtgctgagtcaatttttcagattccggagcaaacttcgggctttgcaggtatagaagttgcggatctgagccgaaattcgagagttggagccaaattacccaaattttgaggcagtgggtcaattttccaggctttgagacatatttcgggctttgaagctttcgaagttgagatttggagccaaattacccaaattttgaggtagtggatcaatttttcaggttctggagcacacatcgggctttgcaggtatagaagttccgttctgagctgaaaatcgagatttggagccaaatgacctgaaatctggtattctgagtcaaattttcaggttctgaacggagttttaacattttcagctagcatttgagctgcagagcaaaaatttggcggtgtttgggcttctgactgaaaatcatcggttccaagccaaaattcaaggctttgagccaaaaactgcagaaaaatatgaaaatttcggaattcaacgcgccaggggtcttaaaatcacaaaattttgagaatttttgaattacagctcaataaatttatattctaaaactcggaaaaaaacattatgcaataagaacgtaacaacatgtgaaaaataaggaaaaatcataaataaatgcataaaactggtcaaaaaacatgcaaaagcgagagaaaacgggtacccgatatgtaaatgaagaaaagtatgcggagagatgagagaaattgctgaagaaaatgcataaactgggagatatagatctaggaaaatgaaaatttaggcagaggttccccgggaaagtggtcaagccggctcggtgagcaattaaaagtcgaaaattccaaattttcacaatttttcatacgaaaatttgagattttcgacccaaaatcgccgatagagcacacttgccaccacggggagcaataaattaatgatgtttcggcacgacacgtggattattgatcagaaaatggagcagctgatggttcggcatggcgggtatggagcccgagcagaagagtgtcggcgagaaaattgtcgccagattttcgacggtcatcttgttttttgcactgtgatctgccacctggaattggggaaattttttgaaaaattccagaaaatttgtttgaaaattcgaattttttaacttaagaactaattttttaggggaaaactaaatttcaagccaaataaaaaatattggccacagcgggggtcaaacctcggtcttgtgcttggcagccatccgtgttacccactgcgccatcggtgcaagttttaaatttcgcaaaaactgggtttcggggtatttctagggggtttgcactaatttttacacctaaaagctatgaaaaattactagagttgagtttttagaatatttccttgttcttacgaaaaaaaattaagcgaattttgcaaaagtttgagccataaaactttaaaacgctatgagaaccaattccaagcaaaataaaagaaattcgccccggcgggggtcgaaccccggtcgtgtgcttggtagccatctgtgttaccctctgagccacaggtgcatttttgaaaatttgcggaaaatgggtttccgggaattcttagggggtttaaactgatttttacacctaaaagcgatgaaaaattgactagaattaagttatttggggctttattcatttttataagaaaaattcgaaatttggacagaaaataattctaaaactggttttcgacacttttaaatgctttgagaaccaatatcaatcaaaacaaaaaattcgccgcagtgggggtcgaaccccggtcgtgtgcttggcagccatccgtgttacctactgagccaccgatgcattttcgaaatttcgcgaaaatgggttctagggtattttcagggggtttggagtgaatttttaggtcaaaaaccttcgaaaatccacttaaatagtgaaattttgaatttttacctttttcaaatgcgccaacactgctccaagtgtgattatgttcgcatcggacagctccatcatcacttttctgaaattttccagtaatttcagaatgttttccagttttcgagagaaaaaatgaaaatttgggcagaggttccccgggaaagtggtcaaatgggctcggtgagcaattttgggtggaaaaattcaaattttcacagttttttacgcgaaagtttgagatttccaagtcaaaatcgccgatagagcacatttgccacggaatttccaaaaaaattttttaaagctattttttggctcattttcaccgggatttctacaattttgggaaaattttggacccaaaatccccaaatttccagcaccttatctgccgctccctctcatgtgtagatcgttgattcgtctcctggtaggcgacgagaagctgcttatggacgctgaacgggatcagttgctgtggtagtaggcggaagtagagcttcaagagcccgcaaactgtgtgaatatcgcaaacctgaaaaaattggtgaaattttgagaaaaattgaaagttttttggggtaaaaatgaaaatttgggcagaggttccccgggaaagtggccaaatgtgctcggtgagcaatagaggtctgaaaattccaaattttcgtagttttttatgcgaaaatttgaaattttcagcccaaaatcaccgatagagcacatttgccacggaaaagcatacaaagacaattttaaagaagaattcaaaaatttagtgaaatttttgtgaattttctagaaaacaatagacagtttttgaattttcgaattttttagtgtgagaaaactaattttttttcgatattttccagtaaatttcagatttttacacaaaaattgagtttcaagaaaaaatttgagtcataaaactttaaatcgttctgagaatcaatttcaagcaaaataaaagaaattcgccgcggcgagggtcgaaccccggtcttgtgcttggcagccatctgtgttacctactgagccataggtgcatatttgaaatttcacaaaaaacgggttctaggatattgttagggttttcaaagtgaattttgcagtagaaaacttgaaaaattgagctgaatatgtgaaatttcgagtttttcgagtaaaaatgaaaatttgggcagagcttccccgggaaagtggtcaaatgtgctcggtgagcaattccgggtggaaaattccaaattttagcagtttttttatgcgaaaatttaaaattttcaagccaaaatcgccgatagagcacatttgccacggaaatcttattttaggtcaattttcttcaatttttacgatttttggctcattttctttggatttttgcaattttttaggcaaaaactccgggaaaacgctgaaaatcccgcgcaaattaccgtagccaagtccacatattgattagaatcaaactgttgcttgagcttttccatatgatcataggatcccgaaacccgataaatcccctccacatcaagacccctcgattcgacttctccaatgcaaagtggcacgattggcggcaaatctgctccgtgagccatgcacagggtggtaatgtcgacgccgaacatgcgtttcacgtatttcgagtcgggcacacagtcgtgaagcgttttttccgagcattttttgtgagccgcgaagccacagtcctcgcatcgcattccctggaaaatttgatttttttgaaattgtttctcgaaaaaatattaattgcgctaatccttcataaaattcgaaatcagcgcaaaatttagccttaaatagctttaactcagactttctagctcaattttgaaatttcgcggggtactgtagctccaaaagtacgcaaacaccgactacagtaacccgaaacaccggatcttacgtaattgcgagatttttgcctgaaaaacgagttccgggggtaaaatagtgcggggaattcgaaaaaggcattaaaaatccgaagaaattgccagtttttgcgaaaattgtgtttttttcatgaatttttttcaaaaaattccagaatttcgccctaaaatttcacaatttccagttttttcttaattttcgcgtatattttataatattttacctgatgcaccaatccccacaggaaatttcggcaataatcacagtagtgcggagctttgaaggtgtacgacgtgaagttgtgtgctcgagtgacgggacggcgtacaatgtctgaagtggtggcggcggcgttcgtataccgagaatatgggctgaaaaatcgatatttctatggggaaaactggaaaaaccgcaaaaatctaaactgtttaaggtaaaaatgaaaatttgggcagaggttccccgggaaagtggtcaaatgggctcggtgagcaatgtcgggtggaaaatttcaaaatttttcagtttttaatgcaaaaatttgaaattttcagcccgtaatcgccgatagagcacatttgccacggaaaagcgtacaaagacaatttctagggagaattcaaaaattcagagaaagttttcgaattttctagaaaaaaattggaatttttgacgcgtttcgtagctttttagcactgaaaaatctaaattagggcaaaaagactagtttttggatatttttcagtttttaccgtaaacttgtcatattttttcactattttccgatttttacatcaaaatttgaccaaaatcagggaaaactcaatttttcggcaattttacggtaattttgagctctcgaagcttaaaattagcaatattttaattttttcaagtttttaaggtaaaaatcgaaatttgggcagaggttccccgggaaagtggtcaaatgggctcggtgagcaattaaaagcttaaaaatccaaatttttgcagtatttaatgcgaaaatttgaaatttctaagccaaaatcgccgatagagcacatttgccacggagaaaacagaaagtaggtttgaattatttaagtgagctttttattgaaatttttagaattttctaagaaaaaattggcagtttttgaattttcgacgcgttttgtagtttttagcatttaaaaattaacgttagggcaagaaatctagtttttaccatatttttcagtaaatttcagatttttcccactattttccgatttttggagcaaaattcaaccaaaaacccgaaaattttgcatttttgagctattttacgctttaaaagcagaaaattagcgaaaatgtcatgtttccaaagtttttgaggtaaaaatgaaaattcgggcagaggttccccgggaaaatggtcaaatgtgctcggtgagcaattaaaagcttaaaaatccaaatttttgcagtatttaatgcgaaaatttgaaatttcccgcctaaaatcgccgatagagcacatttgccacggaatttatattctaagtcaattttcttcaatttttataatttttggctcattttcttgtgatttttgccatttttcatgattttcggcctatttttcgctaatgttccgccaattcccatacctatcctcataaatcgcctcatccgccattctttttatataatccgccgcgtgaaggtccacaaacattgaaatgagcccatcagccaccaaaaggtccatagtgtcgaaacgcttctccccaacgtagaattgaccgtcgtagtagagctggaaatttaaaaatttggctaaaaattgaaaaaatcccaagtttttgaattaaaaatgaaaatttgggcagcggttcccagggaaagtggtcaaatgtgctcgcggagcaattttaggtgaaaaattccgaattctcgcagttttttatgcaaaaattcgagatttccagcctaaaattgccgatagagcgcatttgccacggcgagttaacaaaaattgggaatttttcactaaattcgaaaatttagcggaaaatttgatatttttcgggtattttcttgatgtttatcgattttttctgctttttaaactctaaaaatgcttactttataattcataacctttgcatcaaaaatcatacacaaagtgcacgcgtctctgctccgattcgactcccgcaccaaatacgagccttctccggcctccagcagcattttttcggcctgaaaatcgaattttcgagcttaaaacacccaaaaatcactaaaaacctcatttctatcgattaatccgtgaaattcggctccaaaatgtcgaggtctctgctgaagaggttttcggcacaaaactgcgttgggtttcggcgctttttcttgtaaaaggtacaaattttgcttccagtatccttttgatgctcctggaaattggaaaatttgagattttagcttttcggatatttttaaagcttccaaaacttgttgagcttgaaaaaaatgacttacccgagctcccaggaggcccgtcgtcttccatacctgcaaaaattcgatttttattgattttttaactgaaaatgcaaaaaaatcgaagaaatttggagaaaaatgagcaaagttgagctaatttcttagaaaataaataaaattctgaagaaaatcgcgaaaagtgccagcgatcgagacacgcgccagcaaaatttccttggcgcatttctcgaccaaattatttttttaattcaaaacttgaaaatattgaattttcactcattttcgctgtttttttctcaatttttcgataaaaattgaataaaaattagttttttagattaaaaatgaaactttcccggttgccaatccacatttccaagagatttcacacgtaagtcagaaaattattcaaaaaaataaaaatctggcgagttttccaggaaagaatatcgattagcgggtcgagaacaatcagtagcagtggattttgatggaaaaagtggaatcgagctgaaagctggtgggaatttgaaaaaaaactagaaaaaaaacgggaaaaattgctaaaaatcttaaaaataaagatttcgagccgatttttgccgcaaaagatgcgcgaaaaaattctccactgtctagaaaaggaattttcatgaaaattttgatttttcaggccacctcgcccgttttgcgtcatccaccgtagttgcttcattcggagacaacgccgtgatggctacagtagtacaacggaaatccaagcaaggagatggtagtggagtaccgctacaagttgaatatcggtgagaaattcggaaaaaaaattgcgaaaaaaccgctaaaaaccgataaaaatggcctaaaaactgaaaattccagaccgtcagcgtcagcaattggccgaattccaacaaatttcctgcgtcgtgagctcagtcaatctgacaatgaaatcctcatctccagagccattgacaggtcgattagaccacttttacccggaaattcctatgaaactcaggtaaaactgggattttcagcgaaattcagaggtttttgttggaaaaatcgaattctacgcgaaattctgccttaagacctttaaaattgggttttctatcgcaatttttggagttttggggtacggtagccccaaaagtacgcaaacaccgactaccgtagcccaaaacaccggatcttacgacattttaagattttgccctgaaaaatgggctgaggggctaaaaaatcacgaggaacccgaaaaacacattgaaaacgtctgaaaaattctgaaaattctgagaaaatcgaatttttcaaaaattttagtgcaaaaaattgaaaaaccaacgggaaaagttaaaaattcgaaatcagcgcaaagtttagctttgaacagcttttagtatgactttttagctcaatttggaatttcgcggggtactgtagccccaaaagtacgcaaacaccgactaccgtaacccaaaacaccaaatcttacgacattggtggaaaaaaaggggtttaggcttaaaaaattacaaaaaactccaattttctagttcgaaattactaaaattgagggaattatgtttttttttccaaaaaaaaaaagtttttaaacataaaaatttaaaattggttaaaaagccgtaaaaaagttccggaaattcctaaaattatcagatttttatgaaaattttagtaatttccatactatttctcaaaaaaattcatttttttttcgtggcaaatgtgctctattggcgattctgggctcgaaatttcaaattttcgcattaaaaactgcgaaattttggaattttttggcttttaattgctcaccgagcacatttgaccactttcccggggaacctctgcccaaatttacatttttaactgaaaaacttcggaaaattcaaatttttgctaattctaagcttttaaagctcaaaattacatttaaatggcttgaaaattcagttttccccgattttggtcaagttttggtgtaaaaatcgaaaaattgcaaaaatctgacaaaaaaaaaacaggtttttgtccaaattttgattttttcagtgctaaaaaactgccggaaacataaaaactgccaattatttctaaaaaattcgaaaaatttcactgaatttttgaattctttctaagtatgcttttccgtggcaaatgtgctctatcggcaattttggctcagaaatttcaaattttcgcattaaaaactgcgaaaatttggattttttgacttaaaaattgctcaccgagcacatttgaccactttcccggggaatctctgcccaaattttaattttttaccttaaaaacttgaaaaaaataaaatattgctaattttaagcttcgagagctcaaaattaccgtaaaattgccgaaaaattgagttttccctgattttggtcaaattttgatgtaaaaatcggaaaatagtgaaaaaatatgacaagtttacggtaaaaactgaaaaatatccaaaaactagtctttttgccctaatttagatttttcagtgctaaaaagctacgaaacgcgtcaaaaattccaattttttctagaaaattcgaaaactttctctgaatttttgaattctccctagaaattgtctttgtacgcttttccgtggcaaatgtgctctatcggcgatttcgggctgaaaatttcaaatttttgcattaaaaactgcgaaaatttggaattttccacccgaaattgctcaccgagctcatttgaccactttcccggggaacctctgcccaaattttcatttttaactcaaaaacctagaaaaaaatctcaaaaatttccagataatctgcaaaccactggcgctcgatgagaacgccgaccaaatcatgctgggcatcaacgccgcctcaacggcccttcaaatctcgtcggcggcctacaacggcccgttggcggccctccgagtggcccgtacggcccgtggcgattttcacgtgaatccaacgcaggaagagctccgagaagcttctctaaacctaattgtagccatgcgaaaacacgaaaaaaccgtaatgatcgagcttgacggccgtgagagctctgcggagcacctggagcatgctcttgacgtggcattccgccacgtggcaaagcttcacgaggctatggagcaactgacggcggagcccaaagatgagcttgcttcggaggatttttctggtctcgaacggcttttggaggagaccgcccgtgaacggatctactatgtgatcaccgatgccggccatgacaaaatttccagggatatggaaattaaggcgatttttgaggagatttgtgcggaaaaaggtgaaaaaattgcgaaattttggcctaaaaagtgtcaaatgtggtctaaaattccctttttccgcgttttcgagctaaaatttacagtttttgacaagaaaatccacttaaaacccactaaaaatgcctagaaaccctttttccgcaaaattgaaatttcgcaccggtggctcagttggtaacagggatggctgccgatcagaagactggggttcgatccccgctgccgcagatttcttttgtttggcttgaaattgatttcccaagcattttaaactttttggcatccctttttcaaaattttctgcctaaatttgaaattttacggataaaaatgacgaaaagtcccaaaaaactcaattcttgttgatttctcatggtttttatgtggaaaaatcacttcaaaacccctaaaaatccctggaaaccctttttccgcgaaattgaaattttgcacccatggctcagttggtaacacggatggctaccgagcacaagaccggggttcgacccccgctgtggtcattttcttttattttgctttaaaccactttagaaacgttttcaaagttgtgaaaattgatttttcgatggtttttaccaaaagtgggaattttttggactaaaatgagggaaagtccaaaaaactgatttttagtcaattttttatagcttttaagtaggaaaatcatttaaagccctttaaaaatacccaaaaagctatttttcgcaaaatttgaaatttgcacccgtggctcagtgggtaacatggatgacttccaagcacaacaccggggttcgacccccgctgtgaccaatattttttgttttgtttcaaatcactttacaataaatttgtagggtctgaatatcaatttttcgatcatttttgccgatttatttctaattttcaaacaaaaaagagtaaagtcccaaaaacctcaattctacttgatttttcatggttttatatgtaaaaatcacttcaaaaccccctgaaatacccctaaaccgatttttcgcgaaattttcaaaatgcaccgatggctcagtgggtaacacagatggctgccaagcacaagaccggggttcgatccccgctgtggcatgtttcttttgttttgcgtggaattgaatgaaaatccattttttcgaagttttacatagaacaattgattttgtaaaaatttccaaaaaaaaaattccaaaatttttttttttttgaaatttaaaaaaaatttccaattttttccagcttttcaaacctgcgaaaaagacgcaatctaccgtacctactcgactctcgtcaaaaaagtgctccgcgacaccacactccgtaccggaatccgatgcgacggccgccgccccgacgagttccgcccgatcacaattcacgtggatatgtacaagaagctgcacggatgttcgatcttccaacgtggacagacacaagtcatgtctacagtaacctttgactcgcccgccgccgcttttcaccccgactcggtggctcaactgctcggaagtcagcggaaaaagtcgtttatgctgcactacgagtttcccggatttgcgattaatgaatttggggttagactttgagttttgaagtgaaaatttaaaaaaaaaactcgaaaattgcgaaaatttggctcaaaaaccgtaaattttggcccaaaatgcgcttttccgtctaaaatttacagttttgactgtaaaaactgcctaaaacccctgaaattacgctataaacccgttttccgaaaaatttaaaatttgcacctgtggctcagtgagtaacacggatgactgccaagcacaagaccggggttcgatcccagcggtggcaaatattttttgttatgcttgaaattgctgtttaagtgattttaggtactggaaactgattcctatggtatttcaaggagaatttttgctgaaaatcatggaatttctggaaaaactcgaattttcacatattctgctcaatttttcaagttttctactgtaaaatttgctttaaaccccgaaaaataccctaaaacccagttttcgcgaaatttgaaacttgcaccggtggctcagttggttacacggatggctgccaagcacaagaccagggttcgatccccgcggtggcaaatattttttgtttgacttgaaatggttttttaaggaaagtaaggtactggaaactgattcccatggtatttctaggagaattttggctgaaaatcaggaaatttctggataaactcgaaatttcacatattcagcttaatttttcacgttttcttatgtaaaattcgctttaaaccccttaaaatttccctagaacacagttttcgcaaatttgaaatttgcaccggtggctcagtgggtagcagagatggctgccaagcacaagaccagggttcgatccccacggtggcaaatattttttgttttgcctgtaattcactctaagatagtttttagaagctttaaagtcattttttaagaaaaaaatttttggaggaaaacattttgccaaaaaaaaaattttttttttcgaagtcaaattttaaaattgaagttttttttttttctttttttataaatcttataaataaaaaaaatcaaattttcagacaacccgatccctcaatcgtcgtgaaatcggccacggagcccttgcggaaaaatcgctgaaaaacctcttccccgccgatttcccatacgccacacggctcgcatgccaggttttagagtcaaatggctcatcatcaatggcttcagtctgtggtggctcattggctcttttcgacgccggagttcccatgaaaaacgccgctgcgggggtggcaattggcctaatttcagatgaagccgagccggagacgaagtaccgggtgctgacggatattttgggtattgaggattacgctggtgatatggattttaaggttggggaggtttttgaaaattttgggaatttaaaaaaatttcttttttttttggaaaaattttttcaaaaaatttttctttgaaaaatcaacattcgacatcggaaacataccaggatcactcgaaaactatcgaaaatctcatatttagacggtatttttatcgattttagtgaaaatagaagaaaatgctacgaatcaacacaccggggttcgatccccactgtggtcgaaatattttttctgacaaaattttttttttgagtttttttttagctttcaaactggttttcgatagtattatggatattttgaacgaaaaattctaaaatttggaaaatttaaaaaaaaattttagaaattttttttttccaaaaaaagttttttttaaatttttttcaaaatccccaaaactccaaactccctaaaagaaattcaaatttccaggttgccggcacccgagacggctttacagccgcccagcttgacgtcaaaaacggcggcctaacccgccgccagctcaccgagagcctccaggccgcccgagccggcatcgaccatgtgctccaaaaaatgagcgtgatgagggatcgtcctcgagagcagtttaagccgactgttccgatcattcaatcgatgaggatagaaccccataaacgggtcacattgttccggaataatgggtacaattgcaagttgatcgaggcggagactggtgttaaggtggctggaattgatgaaaatgctcaaaatagacataatatcaatatttctcaaagttagtaaaaatttggaaaaaaaattttttggaccaaaaaaaaattttttttcgaccaaaaatttttttccgaaattttttttcttcaattttcactaatttttaactaaaaaatctgattcaaacaccctaaaaatgcccagaaacccattttccgcgaattttaaaatttgcaccggcggcgcagtgggtaacgtggatggctgccgagcagaagaccggggttcgacccacgctgtggctaaatatttttgttttacttgaaattgctttgcaaattttttttgtgtttggaaactctgtttttaaatgttttgaaaaaatttcggccgaaatatttcaattttgaaggaaaatttgaatatttccaatttttaagtcattttttccagttttaaactgcaaaaatcactctaaaccccagaaaaatacccagaaactcattttccgcaaattttaaaatttgaacaggtggcgcagtgggtaacagggatggctgccaagcagaagaccggggttcgatccccgccgtggcaaaatttttttattttacttgaaattgctttgcaagtcgtttttcactgctgcagcctagtttttaaattgtttagaaaacattttcgaccgaaaattttcaattttgatgaaaaatcggaattttcttgtttcaagccaatttttccagttttaaactgcaaaaaccactctaaaccctagaaaaatatcctgaaacccattttccgcgatatttaaaatttgcaccggtggctcagtaggtaacagggatggttggcaagcaacagaccggggttcgacccccgctgtggcgaaacattttttttttgcttcgaaatcggtttttcacatatttctggcaaatttaaacttttttaaaacctcaaatttaatttttcaagaattttgaaaaaaagttcaaaaaaaaattgtttccaaatttttttttcgttttctatttttttaaagtttctttttcgcagatctccgctgaagacgaagctcacatctcactgttggctcaggataaggaaaaactgcaaaaagcaatggatatgatgaatgatgtgctcgagagcaactccacattggatttcgcctttggctccatagttcaggctgaaatcgtggaggtagtcaatgtggtagcgagaaaaattttaaaaaaagagcgaaaaattcgaaatctacgtgccttttcaaaaaaactggaaaaccctacagtaacccggcctacagtacccctataactttttcattgtttttatcaaattctccttgtagtcagctttcagaaaagtaccatcatgtccaggttccgagcattttgaaaattttgaattttgggtctcgccacgcggggtactgtagcaccggtttcagctgtgtcgaaactcaaaatcgtcggaacataggcatgatgggggtcattcgaaaggtctcgatgaggcgaagtaaatggtagtaattttaaggtgattgggtgggttactgtagaaaaaaattgtattccaaaaaaaaaaattttttttgaaaaattcaaaattttccaaaatttcagatcatcgaacgcggcgtctacctaacccttcccggctcttctcgccgaattttcatgagcaacaaccacctaagcctgaatccagtaaggcatcccgacgtgctcggcctgaaaatcggcgacaaaatgagcgtacactggttcggacgcgatgagcacactggaaatattcgattgtcacggaaaactctagccggagccaaaacacctgccacgtcacagaaaaaaaagtgaaaaaatttttggagccgaaaaaaaaaattttttttttgaaatttaattttttttttcttgttttaagcatttttgttaagtttttccatattttttatatttttttagatccttcaccactatttttgcgggttttactgttttttttctctcgttatagattttttttttgctcaaaatttcaattttctaggtatttttagactataaactcagttttttattactttattgattttcaaatttccaaattacaaaaattatcgatttttgggtagaaatgggaaaaattggatgaaagacaataatatcacataccgtaaagttttttgagggttttgggggcggggttttgtcattaaagggtgaaaaattgcataatctaggaccagtgactattttgggaaaatttaaaaaatttgggaaaaaaattttttttttttttgaaaaataatttttggaaaatttttttttttgaaaaataatttttggaaaatttttttttttgaaaaattatttatcaagtctgccgtagacaacacgaccgctccaaatgatcggcaccacagtcgcagtagaatctgaaccagaaaaaatcaataaaaatgtagatctggaggacctacctatcgcacttcaggaacattactgtatggccctcgtggcaccgttcgatgcaactttggcatattgcattccggtcggatgagttacaggttatacatctgaaaattttaaaagttaaaaaaatttcaaaaaaaaaaaattttttttgaattttttgttgcaatttttgaatgttagtagtgactttcgcaaattttaacctaaaaattcaccttcaaaccccaatttctaccgtggaaaccatttttcaccgaatttgaaaatttgcacccgtagcctagtggatagtggggatggcttggaatcataagaccggggttcgacccccggcacggcaaatttcttttgttttggtgaaacttgaaatttgaaacagttttcggtttcgaaaacccgttttcaaaaaaaatcgaagtttttaattattgaaatccatttttttttcaaattgccaaaaatgtcaaatttggagcagttttcgcaaattttaacctaaaaattcacccttaaaccattttctaccccggaaaccatttttcacaaaaattcagaatatgcacccttagcctagtggatagtggagatggcgtggaatcacaagaccggggttcaacccccggcacggctaaattttttgttttgttgaaacttgaaattgaaaacagttttcggtttggaacactcgttttcacaaaaaaatcgaagtttttaattaaaaaattttttttttaatttcgaaaaagtttttttttgttgcaatttttcagaaaatttacgcttatagctcagttgctctccagtttcccttatttccacccaaactcacctataaaaattgtgcatcgggtaaaagtccttgccgctgaccgaaaataggcattggccctttttgatggccttttccacgtggtccaagttgtcgtacacctgattttggtcttcggatgcttgagagcagctagccgtcatgattcctaaaaaatttttaaatgtcgcatttttagggttgaaaacagggtgaaaaactagagaagttggcattttttgagaaaaaacaaggttttcggcgatttttcgagttttttaattaaaaatttagcctaaaacatcatttttcactcctgaaaccatttttttttcaattttgaaattttgcacctgtggcgcagtgggtaacatggatggctgccaatcagacgaccagggttcgaccccccgcttggtcgaatatttttgttagagccaaatgttatttttcgcactacttattcaagttaaagctgattttgagtcattttctataggattttgtgaacaaaaaaatttttaaggaattttttgacggtttagagtgatttttgcaaaattttaataaaaaattcactttaaaatcgtattttccacacaggaaaccatttttcaacaatttttagaattaacacccgtggcctagtggatagtggggacggttggtaatcacgcgaccggggttcgacccccgctgggccagaaagtttttatttagtttttttgttagttatgtgtgttcttttaacatcaaatgctaaaaatgaagctacacaaattataggcaaaaattataggaaaacggtttttttttcaaaatttcattaaaaaaaaaaactaagttttcacactaaaatcaatattttaaatttttggaatttatgccaataatttgaaaaattatttattttcaaaaatttcttccaatcaacacaccggggttcgatccccactgtggtcgaaatatttttaccaatatttttttcaaaattttttttttcagtttttcaacttttaattttttttttcttcttacctccaaatctattccgaaacactcgattctccgccaacaccagctcctctttagacgagacctcaatgcccgcagatcgattcccatgaattcgatttccacggagactcggcgccgagtcagagagcaccaggacgcccgcttgagcattatcaaatatttcattgtgctcaatgagcccttttcctccgtcggtaacagaaattccggtgccacgagatccgaaaatcttattcctccggataaccggtgtggccatagtttttatgaaaacattggtcattgagttgtcgaaaattgtattttcctcaaaacatcccatgccggcttcatgtaccagtactccgttgtcattattccagattcggttttttatgacacgtgggttggcgccagtgcggatttggacgcctgttagggtatttccgttgatttcgttggattctaggacaccggagcctccatcgtagaagtagacaccggcctggaatagttaaagttaaaaatctttttttttttttttggttttttgaaaaaattttcagcgattgttcgatttttgaaaggttctatgtaatttttgcaaattttaactaaaaaattcaccttgaaacctcaatttctaccccggaaaccatttttcaacaaaattcaaaatatgcacccgtagcctagtggatagtggagatggcttggaatcacaagacaggggttcgacccccgacaaggcaaaattttttgtttagctgaatttttaatttaatagtagttttaacgttgaaacgacaattttcacaaaaaatcgaagcttttaatttttaagatcaatttttctttaatttgctaaaaatttcaaatttggagtaaattttgcaaattttaactaagaaattcaccctaaaacctcaatttctaccccagaaattatttttcagcgaatttaaaaatttgcacccatggcctagtggtagtgagtcgggctagtaatcaaaacaccgtggttcgacccccggtaccgcgaactttttttgttttgtttaaacttgaatttggggacggttttaggtttgaaaaatccgttttaacaaaaaaatcgaagtttttaatttttaagataattttttcttcaaattgccaaaatttcaaatttagagtaaattttgcaaattttaacttaaaaattcacctcaaaacctataaatctagcccggaaacagcgaaattcaaaatttgctcccgtggcctagtggatagtgagttgggctggtaataacaagaccggggttcgacccccacagcggtgaaaatttttttattttgcgtggggagttgtttggaacagttcagtttggttcgattccccaacgtggttgaaatttttttgttgaaaattttggaaaaaaaatttttttgaattttttttttcgaaaaaaaaaatctaaaaatgactcacctgtttcccagaatgaacatgattattcctaatccatggctcggctccagtatcgacaaaaatgccggccaactcgttcccatacaccttattctcctcgatgagcccttttccataccgatgcacaaaaattccgccgtgtttcccgtcgaaaatctcatttttccgaacaatcggattcgcaccttctgatatccaaatcgcgaggaattcgttgtgatggagccggtttttcagaaattggccggtggcgtcctcgtggatgcatatgccgcctgacatcccgtgatgaatctcgcattcggttactgtggggttggcctgagcacttttgagctctatcgcaaatttttggtttgcgtagatttgacagttttggaaatggcccaggccatcgctgaaataatttttatttattttttttttttgaaaaattttgggtcctgacacaaaaagagttttgaagtattttttttactaatatttttgaaatttggacgttttgacgcacattttgagccaaagatcagtggaaaatcttgagaattgacaaagttacagaggtttgaacttttcgagttttcaaaaaaaatttacttcggctcccgtcacgaaaactctggggtttggcgtatttaatcatttctgctattttctgttgcatttttgatcaattattttcacatattttggatcaaaatgggttcaaaatctttaaaactgagaacgttatggatatttgaaatttgaaaatttttcgaaaatgttttttttttttttttgagattttaattttttttttcatttttcgcgcaaaaacatatatgtgaagcaaatttctgacactaacacaacttttatacaaaatttctgcacattttaaaacaaaaatggctcaaaactctttaaaactggcaaagttatgaaagtttgaaatttaaaaaaaatttcgaaaaaaaaatatttttttggaaaagattcaaaatacagccaatttgaagataatcaaatttggaacatttttccattaaaaaattttttagttttcattccccgcagagaaacagcaattttaaggatgaggaaaagacgcagacgacgagagtactctcgtcgtctcgcaccctctccctcccccctcgttctctgcacttctgcgacgccttaattttaaaggcgcataactcagcggagatgagattaagaaaaaagttttcaactaacaaaatatgtaaaatttcaagctctacaacttctcagttgaaaactttctgctagctcttttagttttcaagatatttcaacttttcaaagactcactccaaaatgaagattcccacatcaccctgatgatggacatgacagttatagaaatatggattcgcctggaattgcacacgtattccggactgcaaattttgcgcaaactcgcagttatcatagtagccgccagcgtggtgtgtgataatgatcccgccgcccgagcctccgatgcaagtgcagtttctcatctgaaaatttgggaatttggagctccgctggaaatagctgaaaagccacggactacactttctaaatgatcatactatcaaaaaatacctggaaattttttgggtaaagtttcaataattttgggagcttagcttttgagaaacatgagttttcatgggaaattttcgattttcaactgaaattttcgatatttatttgaaattttagaagtgtggtggtaatttttagggtgaattttttatttatcttgttgaaatttaggttaaaaaccagcctggtaactttttggaaatttttgaaaaaacattttttttcaatttttttcaattttaagttataaaaattttgtgaaaaacttaccttcggtgcagcgtgatccttgacaactacagtatgactgtcagcattaccagactgaaaattgcagtgctcaatgatgggctccacgtgcagcccggtaactatcatggcgcaattcgtagtgggatccgtgtgggcttccagcaacttttcaggttccagggcttcctcgggctctccaggctctccaggagctccaggagctccgccgggctcccccacaggcacctcttcaccagctctgggagcatccacctccatatcctgagccacgtgagcctcgtgctccgtgtccacctcatacttcacagtcacatagcccatgtaggcgctgctctggaattccagtacagtcgcgtggcgtccggtgagtaccacggacgtggcaatgtcttcggagcccgaggcgccgaggatctgaacgtcggaggtgattcggatggtgtgcgtgacttcatgggtgccttcgtgcaggaagatcagcttttcgtggtgaccaccctcgtcgttttcgtcgaggaatctggaaatttttgggattaagcctgaacctaagccaacgcttaagcctaagcctaagcctaagcctaagcctaagcctaagccaaagccaaagcctaagcctaagcctgagcataagcctaagccgaaggatcagcataagcctaagcctaagcttaaacccacgcctgagtttacgcctaggcctaagaatcagcctaagcctgagcttaagcttaagcctaagcctaagccgaactctaagcttaagcatcggcctaagcccaagcctaagtccaagttcacacctcaaggcctcctcaatatgatcgaaacattgaatatcggcggctcccacaaattgctccaaatttttcatgacatgaacgccgcggctcaactgctcgtaggcctccttccacggattgaactcttcgtctgaaattaactgtttttttttgcagaaaacctacattaaccccccggtctacagtagccctattaatttttaaatatcagcattttgttagtcttgttgttagctttcaaatgacccccatcatgcccgggttccgagcagttttggaaatttgggtctcgccacgcggggtactgtagcatcagtttcagctgtgtcgaaactcaaaatcgttggagcataggcatgatgggtgtcatttgaaagctctcagcgagagaaatcgaatggcaataatttcaaggtgactgggttactgtagcgcgggttacgtagctttttccagttctcacctgtaaacttttgcttcggcgcgggttgaaactgaaaaacggcatgttcggggtgaaaaagcggcaggcgatagccgaaggtctcctggtaaagtacacgccattcttcttcctcctcgccggacatctgcaagcatgtaggctaggcggtggggagagggggcagagacgcagacggtgtaagacacctgtgaaggtcggctgaggggggggggggggtctggaggctattgttgttattgttatggtattagtagaggtcacacataaaattttggggtaaagttgagaaaatttggaaatttccgagaaattgggagttgtcaaaaaaacgtttttaggaaaaagttcaaaaattcaaaaatttcacaactttttcaatttttgagatatttttatcattttttgggaaaaatgattgtgaaattctgaattttcctacaaaataactcaaaatgaccgtaacagagaaatttcagtttgccaagcgttttcgtggcgggaccttgaaaatttagttgctgaaaaaactgaaattttaaaaatttcataactttttccatttttgagatatttctataatttttaatgttaaataacagtagaaacttgaattttaagttacaattattgtaaaatgtcttactctgaaaatcttgaattgctgagagttttcgtggtgggacctaaaaattgtaaaaatattttttggcaaaaatttcagatattcaaagttttctaactttttaataaattaagatatttctacgatttttaatgcaaaatgaccgcaaaaatatgaattttcatggaaaattaattaaaactttttaatcagaagttttcgtgatggcaccttaacttaaaatttcaaaaaaaaaattgaaaattttggaattttcaaaacctcacaactttctcaattttggagctatttgcttcatttttagattaaaataagccccggaaattcaattttcaggttcaaataaacaactttagcaaaattcataaatgacagcacgccacgagtttgcgtggcaggacccagaaaactcgtgccacgtgacggatttatgcaaaaatccttggaaatcggagagagggacaaagagagacagagagagaggaggaaaagatgacggtacggggagatattgtatgcgggaaataggtcacacttcttctatatctctcctcactcttccacttttccgtaacgaggccgccgcccggccagccgcgcgtactagcctagtaccgtcccctccggcccaccctgcgtctcagcattgcgcaatatgttgattcacacctgtttggatggggagagaaagttttaaggatcattttgagctaaaattgacaagaattacggaaaaattgaaaaagttaggatggtttgaaattttcaaaaaaaaaattttgaggacccccacggaaactctcggtggaatgatattttgcgaaattttaaaagattttttaaattaacctgttagtctaagtaactgaactatttataagctaaaaattaacagaatatctcaaaaactgaaaaagttatgaagttttgaacttttttaaaatttgccaaaaaaaaattcaaaatccttccacgaaaacttatgacagccacaaattttgcagctttcttagataacgtacaattttttgaaaaatataaatttttagcttgttttaaattaaaatttggtatataaatctttaaaactaaaaaagttagggggttttgaaattttccgaaaaaaataaatttaactaaaaaaaatttcgaggaccccccacggaaactcttggtagactgatatttttcaaacttttaaggatttttaaactaaactactactccaagctttggagcttattttgtgctaaaatttggcaaagtgccacaaaaactgaaaaagttagaaggatttgaaaaaaaacaaaaaattttccaaaattccaaaaaaaaattttaagggcttacaggaaatctcttggaaaacaggcattttacagttttttttaaagtaaatgtacaatttttgaaaaatatgaatttcaaaattattttgagctaaaatttggcaaaatattttacaaactgaaaaagttagaaggatttgaaattttcaaaaaataattaagttttatgaaaaaaaatttgaggacccccacagaaactctaggtgaactaatattttctgacattttgacaaattttttaaaattatactgctagtccaaaatttggaacttatttagagctaaaaattaacaaaatatctcaaaaattgaaaaagttagaacaatttgaacattttccaaaatttctaaaaaaaactcgtcgtaaaaactctcagcagacagtttttttttggattttgttaagttttgaaaatttgtcttaaaataaaattttagggttttttttaacgtcaaaattcagcaaaatatctcaaaaaccggaaaggttggaaaattttgaaaattttttaaattaagtcaaaattttcaaggactcacacgaaaactcttggaaaacgggagttttacagttttttctaattaacttgcggtttattgaaaaatatgagtttgaaaattattttgagtcaaaatttggcaaaatacctcgaaaactgaaaaagttagaaggttttgaaaatttcaaaaaaaaattaattttactaaaaaaaatttcgaggagccccacggaaactctcggtgatgtgaaatttttcaaaaaattaccggattttttacattgatcggttagtttaagttttggagctaatgttaagccaaaggtaagcaaaatacctcaaaaactgaggaagttagaaggatttgaacattttctaaaatttgccgaaaaaacttagggatctcgtcgcaaaaactctcagcggacagtttttgtttcagattttgtttagttttaaaaacttgtcctaaaataaaattgtagggctttttttaacgtcaaaattcagtgaaatatctcaaaaactgaaaaagttagaaggttttgaaatttaaaaaaaaaaattttatttttgccaaaaaaatttttttgttgtcaagttaaaaaaaaaccaaatatgataccaaaaaatttttattcaaaaaaaacccaaaaaaaatcaataattattaaaatacttcgccaggcactccttatcctgaacattcaaaaagaacatccgatgaacacctccgccagtgtgcattgactgaagaaaaacgtacttctgctcctcgagcacccggaatatgaaatcatggaaaacttgtgctccggctggagcaaatctcgagtgaacttctatattgaattggcagaactgtacgtcattatggattttttccaaaaattcgaattcaccgccctcgatgtcgatccacgcgaaatcgattttctggaaaaaaatttttttttttttttttggaatttttactccgacttcgatgcaccataagcgcaaaaaaattttaaacttttttatgtaaattccattaaaaatttggatttttccctttaaattgaaaattttccgacttttcccgacatcgatgcaccatgacctcgaaaaatcatcggtggcctagtttttcctttttttttggggatttttcgagtaaaaagcataagaacgcacatgtgctcggcgggaaattcaaaaaatctatgattttcgccggaaaaatctggtttttcaggcaattttctggtgaaatctaatgaaaatcgccaaattttccaaaaatcgataaaattccctgtggattatcgatttttcatagaattttgcaaaaatccacgtagattatcgatttttcatagaattttgcaaaaatccacgtagattatcgatttttcatagaattttgcaaaaatccacgtggattattgatttttcatagagtttcggaaaaatccacgtggattattaatttttcatagaattgtgaaaaaatccacgtagattatcgctttttcatagaattttgtaaaaatccacgtggaatatcgattttttaggaattttgcaaaaatccacgtagattattgatttttcatgaaattttgcaaaaatccacgtagattattgatttttcatcgaattttgcaaaaatccacgtagattattgatttttcatggaattttgcaaaaatccacgtagattattgattttttatgaaattttgcaaaaatccacgtagattattgatttttcatggaattttgcaaaaatccacgtagattattgatttttcatcgaattttgcaaaaatccacgtagattattgatttttcttggaattttgcgaaaatctacgcggattatcgatttttctcaaaaatgcttcaaaaaatcgataaagatcgttactgattgtcgatttttaaagaatcttgtgctgaaatcgtgaaaatcggttcgataaacaatcaccgaaaaaaatccaaaaatcatggtacatcgacgaaaatatgagaattcaggcattttttccggaaaatgcttagaaaatcgataaaatccacgtcaattatcgatttttctccaatttttcggcatttttccactatttctcacctgcaacttgagaatatcgtgtaaaaagtacacaaacggaattgtggtgacatcctgatacacatatttccgtgtcttctgactttgattcggtaaaacacggaatttcgtgaatcccggctccttcccaatggcaaatgggaagaatttcccgaaagccgagtacatttgacggtttggctcaattattgggtcggctccgtagaattttgtgttcggaattgttcgattaaggcgttcctcggcggttgtgtcatggccaacgcctagagtgacgagaatgttctcttctttctgaaaatcgggaaatttcagcgaaaatcagtcaattttgtgaaaaatcaatacttttttcattgatttttgcaaaattccatgaaaaactcgataattcacgtggattttttgtaaacttctatgaaaaatcgataatccacctggatttttgcaaaattctatgaaaaatcgataatccacctggatttttgaaaaattctgtaaaaaacgataatccacgttgatttttcacagaattctataaaaaatcgataatccacgtggattttttgcaaaattctatgaaaaatcgataatccaagtggatttttgcaaaattcgataatccacgtgaattttgcacgattctatgaaaaatcgataattcacgcggcagaaactcagggccccgtcacatcgatgcacaatgttttggtggccgagatttgggaaactcggccaccaattttaagcggacatggtgcatcgtgaccgcctgaaaaaaaaaacgttgaaaacctacacatttcggcataactgcccactttgtctcgtgctgattgttgaacgggatcaccttgagatcttcgaaaatcgggagcttatcgcatattgatgctttggagacccactcgagattcatctgaaaattgagaatttcggaaaaaacttaaaatttttgaaaaaaattcaaaaaaatttgaaaaaaatgttgaaaaaaaaatttcaaaaaaaaaaaaaattttccaaaatttttttttcagattttttacattttcagcccaaaaatggcagcccacctccttagcccggcctttccactgattaacaatcggtgtaatacactcggagaactgcttcttcacactttccataagatttgtgacgtcttgctggactccggcggagccgaggtccccgcaagccggcaggaggtttagttcatggtagcgggggtccaggagttggcttgcctgaaagtttagagaattttagtggaaatcggtggttttccgtcagaaaatcgaaaaaatcaataaaaatccacatggattatcgacttttcgtggaattttgaaaaaatcaacatggattatcgatttttcttagaatttctggccaattttcgcaatttttcactaataggtgttaaaaactttgtgtagaatctgagaaaaaagtaaaaaatcggaaaaaaaattacgtggcctaggttttgcattttataggccaccacccaacatttcggccaccaattttttttcggtgtttcctgaattgttcgaaaaacttcataaaaaatcgcaaaattataagttttcgggaaaaatacggtggcctagcttttccgttggtggcctagaatacgaaaaaattcggccaccaattatttttccgcaattttttttcatgattttaggtcacttttaagcagttttgagcacttttcaactcggggactaactttttccatgatggcctagaatttttaaagttcgtccaccgaatttttttttctaatttttacgatttttggtgcttttcactaaatttttcacaaaatcctgacgaaaactgtaaaaattcaattaaaacttgaataaaacaaatcgctggcctagcttttccattggtggcctagaaatagaaaaagttcggccatcgagtttttttcgaattttcacggttctaggcccattttgatgtcacctaaaattagttttgagcggttttcagctcggggactagattttccgttggtggcctagaaaaccaaaagttcggccaccagttttttgggcttttaggttaaatcacgtacctcatcatcctccttaaactgatatccctgaccatccatagtatcccaaacttctgaagaagttgcaaacttccgcctgttggctccgcccacttcttggacgcccacgtacaaatagtagaagccggctccgagagcagtgagcagaaatagagtgggcagatattttttgagtgacgtcatggttacggtagaacggtcaagcttctcgtaacgcatttttcggataattttgagaatctttgtggatcccttttataggtccactgtagacgatccggagcctttttttcaaaaaaaaaaaatttccgaaaattcatcacatttcggaatttcgcagacaacaatcagataacactgcccagtccctcctccgagaggactacattccggttatcggaaattttcatctcgattccatcgaacttggaaaaattttggctaaaattggcttaaaattggcctaaaatcattaaaaaaattggtggccgaacttttttggtttctaggccaccgacttttttgggaattttcagtttttttcaaatttttaaagaaaaattagtaaaaactacctaccaaaaatcatcagaattgacctaaaatcaaaaaaaaaatcgaaaaaaaaattcggtggccgaactttaaaaattctaggccaccatggaaaaagttagaccccgagctgaaaactgctcaaaattatttaaaagtgacataaaatcataaaaattacggaaaaaattggtggccgaacttttaaaattctaggccactgttgaaaaagttcggccaccaattttctttacaaatttaactgaatttttcggttttcgtcaaaatgttgtgaaaaatctagtgcaattcaccaaaaaatcatcaacatcggcctaaaatcgtgaaaatttgaaaaaaaaaaatcggtggccgaactttaaaaattctaggccaccagtggaaaagctaggccagcgatttgttttattcaaattttaattgaattttcacagttttcatcaaagtttttagaaaatttagtgaaaaacaccaaaactcgtgaaaattcgaacggctcaaaattacttacaattggtctaaaatcatatataaaaatggggaaaaaaatggtggccgaacttttaaaattctaggccaccgacttttttttgggaatttttacagttttcatcaaaattttttgaaaaatttggcaaaatttgacctaaaatcgtgaaaattcaaaaaaaaaattaggtggcggaacttttaaaattctaggccaccattgaaaaagttagtccctgagctgagaaccgctcaaaattatttaaaagtgacctgaaatcattttaaaaagtggggaaaaaattggtggccaaaggtttctggtttctaggccaccatgggaaaaactaggccaccgatttttttcttcaggttttaactgaaattttacagttttcgtaacaatttgtgaaagattttggcctaaaactcatgaaaattcgatttttcaaatggtggcctagaaaccaaaaaagttcggccatcaattttttttcgaattttcacgagttttggtgtttttcactaaatttttcaaaaaactttgatgaaaactgtaaaaattcaattaaaatttaaataaaacaaatcgctggcctagctttttcaatggtggcctagaatttttaaagttcggccaccaatttttttttcaacttttcacgattttcaaatttttcgtagattttgatctttatccgggaacatttcgaatttgaacgtttttttttttttgaaaaaaaaatttcggaacacaccgaaatttcggaggcaacaatcagataagggttggaatcgagtggatgtttccttttcaagtttcgatttattttgttcagcttcagatagtttctggcctttttttttaatttttggtggccgagtttccagaactcggccaccaactctcatggtgcatcgacgataagaattccgacattttcagacaattttcatgaaacaaaatcgattttttcctcaaaattctaattttccgctgaaaaattggttcatggtgcaccgtagagcataaattttcaaaagaaaatcgtaaaaatacaacaaaaaaaaatcgctggccgaacttttaaaattctaggccaccattgacaaagttagcccccgagagctgaaaactacttaaaatttcttaaaaaacgacctaaaatcagaaaaattgctataaaaaactggtggccgaactttttttgtttctaggccaccgacctgtttgggaattttgtttttttttgttctttcttgaaaattcccagacatgtactgaaaaatgtcaggaaattgagccaaaatcagaaaaaaaagtcggtagcctagaaatggaaaagttcggccaccgaattttttcttcgaattttggtagttttcattaaaattttgacggaaactgtaaaaattcagttaaaatttgaataaaaaatcggtggcctagaaaccaaaaagttcggccatcaattttttttcgcaatttttacgattttaggtcaattttgatgatttttagtgggtttcgctaaaattttcaaaaaattttgacggaaattataaaaattcccaataaagtcggtggcctagaaaccaaaaaaagttcggccatcaatttctattttgcattttttatgattttagatcgttttttaagaaattttaagtagttttcagctcgggggctaactttgtcaatggtggcctagaaatggaaaaagttcggccacctattttttttcgaatttttacgattttaggtcaattttttttgacatggtgcatcgaaaaacggaccgaaattccagttattcggtgccgaatctggagaaaaaaaacgggaaaattcgattttcgggggtaaaatgctccaaaatttcacaattttcagctaaaaaattcgtcagaaatttatgtaaataattttcgaatgagatggaataaaataggaggaggaggagatggataaataaaggtaatacattggaaaaaattttagacgaaaaaaaaagagaaaataatagggattaaatttaaaatatcgatcgatttttaggcggggaaaattcgaaaaatttgggggtttaaaaattgcaattttcagtggaaaatggggggaaaattagaattgacgattgtggtacttgtcgacgtcatagtaggaggtgacgacggtgcgattcgcgaattttcgtccggtcagagcagcctgagcacgttgacagtcggatgtggaggcgaattcgacgaaaacctgtaaaaaaaattgaatttaaaaaaaaaaaaaaaaaaatggaaatttttgtgaaaatttgcgaatttttgagcccaaaatcgtaaaatttacgtaattttgagctagaaatcgctccgtaaatcgacaaaaatcttgtaaatttacgagcacttgtgtgtcgatttacgggaaggggccgaactttgtcatcagaaaatttccccgtaaatcgatcgacaagtgctcgtaaatctacatgaagctaagaaattcgggaatttgtcgatttacgggggaaattttctgtcaaattttagtcaaaaaaaaaaaaatgaaaatatcgtcccgtaaatcgacattagcctgaaattcatttctgaaccaaaattttgcgaaatgtacgtttttcttggctcaaaattgaaaattgtttaatttttgactccaaaatcgtaaaatttgcgtaatttcgagctaaaaattgtattgaaaaaccaaattcgctccgtaaatcgacacaagttttgtagatttaggagcacttgtgtgtgtgacgatttacgggggaatatcaaaatttggcaaattttcactccccccgtaaatcgacatgaagctaagaaattcaaaaatttgtcgatttacggagcaacaaaatatcatgtttttaaagattttcttgtgtaaactttcaccaaaaattaacatttttgtagatttacgagcgtttgtgtcgatttacgggggcggcattttttcgtagtttttaggtcagaatcgacctttttcacgatttccaggattaaaattcacaatttttcatttttttgactgcaaattggtggtaaaatttaagtaattttcaagtcaaaaattgtgaaaaaaaggagacaattgcgacttttttttttaattttcaccgtaaatcgacacaagttttgtatatttacggggacatcaaaaatttcttattttcaacgattttcgggtcaattttaaccgatttccacgatttttggctcaaaaattgcccaattttttgtacatttctaacaccttggctttgtgtggatttacacgacgcatttttcgcatttttttgaaaacgaattttaggatcaaaaattcacaatttttacgaatttacgacggtcgaaattgcagaattttcaagtttttcaggtcaaaattactcaatttttacgatttcggcgtcgaaatttattattttcaacgtttttagggtcaaaattcaccaattttaatgtttttgggtcaattttaaccgattttcacgatttttttttgtgggtcaaaattgctcaaaattcacaatttttacgaatttaaggtcgaaattgcagaattttcaagtttttcaggtcaaaataacacatttttgacgttttttgggtcaaaattgcccatttttaacgattttgtggtcaatttcgaccgattttcacaatttttaggtcaaaaatcgccaattttttaaaattccctctaccttcccaacacctggaaccggatgatcctcatacggtcttggaatttccaacgagcgaacaattccatattttgagcattcatcgcgtacatcctccagaatctcttcgtactcatcatcagctttcagctcatcctcagtcaccatattcatgagacaaaggatctcagtggctcggccggctccttgggagagatcaattccggcaattgctgacgcagagttcggcagatttgtgttatgacgttgttgattagcacaggcaagttgaacgacgagctgcttgtcgccgagttgcataccgttgagcccggcgatggcctgcaaaaattaggcttaaaacggcttaaatcatcgatcgatttttccagccatttatagcttaaaaatcgaatttttaccatttcaagacactgaattttacaaaattttgcacaaattggttgaaaatcaggttacgtgggggtaaaaagtgacggagaatttgaagtttagcaccaaaaatatggaaatttacaacttttcgcggaaaaatattgaaaatttgggtgcaattttgaacattttggcgatttttcgtagtttttcagcaggaaaatcatggacttttctgtgcaattttaccccactgtgacaccttttttatagtctgtaactcaatttgtgaatttcgctgggttactgtagctccaaaagtacgcaaacactgaattttacgaaattttgcataaattggctcaaaaattttccgaaaatccgaagaaaatcggcttaaaatcgatttttccagcaatttttagcttaaaaatcgaattttttggggatttttaccatttcaagggagttactgtagctccaaaagtacgcaaacactgaattttacgaaatattgcacaaattggttgaaaatcaggttacgtgggtaaaaagtgacggagaattagaagtttagcaccaaaaatatggaaatttacaacttttcgcgaaaaagtggaaaatttggtatttttcagcacttttatgtgcaatttttcagcaattttggcgattttacgtttgttttcactatgaaaatcgacttttctgtgcaattttacccactttaccatctttttctaagtctctagctcaatttttgaatttcaagggttactgtagccccaaaagtacgcaaacacggaattttacgaaatgtcgcggaaattggctgaaaaccgggtttttgcgggggtaaaaagtgatggagaagtcgaattttgtattgaaaaattgtgaaaatctcaagttttcggggaaaaaatgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcagccaatttaaggctgaaaatgcagataaattcagtttttatgccatcaatccgagtagaagcacatgagtcacgggataatcaataaattcctacattttcgaaaatccgaagaaaatcggttcaaaatagaattttccagcaatttttagcttgaatgtcgaatttttcggggatttttactatttgcagggttactgtagctccaaaagtacgcaaacaccgaattttgcgaaatttctgcaataattcgaattctccatcaattttcgcgtaattttaacccatttttcagtcaatttgtgcataatttcgtaaagttccgtgtttacgtacttttggagctacagtaacccagcgaaattcaaaaattgagctacacacacactctaaaaaaggtgttatagccggtaaaaatccgcagaaaatagccaaaatagctcaaattttcaaagttgcacataaagatgctggaaaatgtcaaattttccatttaaaaaaaaaaaaaatggctcaaaaagtgcgaaaattgatggagaattcgaattttagcaccaaaaattttgaaaatcactacttttcgcggaaaaaatggaaaatttggtattttccagcacttttatgcgctatttttgaaaatagctatttaaaagagctatttcggcgattttctgcaatttttcaaacgaaaatcgaattttctgcggatttttaccgctataacaccttttttagagtttctagctcaaaacttgaattttcggggttactgtagcgccaaaaatacgcaaacaccaaattttgcgaaattttgcacaaattggctcagaaatggctcaaaaagtgtgaaaattgatggagaatttgaatttttactgaaaacctgggaaaattacaactttttgcgaaaaagtgagaattagagtgcaattttagcaattttggcgtatttagcgcgggttttagcataaaaatcgtattttctgcgtatttttaccgctataacaccttttttagagtttctagctcaaaacttgaattttcggggttactgtagcgccaaaaatacgcaaacaccaaattttgcgaaattttgcacaaattggctcagaaatggctcaaaaagtgtgaaaattgatggagaatttgaatttttactgaaaacctgggaaaattacaactttttgcgaaaaagtgagaattagagtgcaattttagcaattttggcgtatttagcgcgggttttagcataaaaatcgtattttctgcgtatttttaccgctataacaccttttttagagtttctagctcaaaacttgaattttcggggttactgtaacgcctaaaatacgcaaacaccgaaatttacgaaatttcgcggaaattggcccaaaaatggcccaaaaagtgcgaaaattgatggcaaattcgactttcagcactttttggctgaaaaattacgcaaaaaagctagaaaaatccggttttaacgatattttcttagtttttgagccattttcacgattttttagccaaaaatgcttacagttcacaattttgactagttttaaagatttttgggtcaaaatcgctcaattttcactcaaaaagttgcataattgccataaatttaaaattaaatgggtgaaaatttatatttttgggtcaaaatcgtgcaattttcacgatttttcaagtctttggccgaaattggctcaattttcacaattttagggtcaaaatcgctaaattttcacattttccagctcaaaatgctccaaaaaaaaaaatgatgttacctgatcagtgagagttgggtccaaatattcggcgaacgcgtatcctttgctatttccttgcgaatcaacgttcaacgagaacgccttaagcggtccaaatgagcacaaaagctcttttacctgaaaaaaatgagcacatttttcagagtttttcgatttttagtgggaaataggcacacaattttcggcggggtctcgagaacctgaattttgcaagattatttgggcttccagttgggagatttcagccaattttgcggcctgagatggtgcctaaaagtgcctaaaaatagcctaaaatctggaaattttgtgcctaaaattgctgaaaaatctggaaattttctgtaaaaaatgggcaattttcgtttccacaaaacgacggggaggcagtgtggctggtggacagcaggagtgtgctgaaacacactcaaaattagacaattttttttagaccaaaagcccgcgcgccggcacggcttttttgggggaaaattggaaaaaatttgggcagaggttccccgggaaagtggtcaaatgtgctcggtgagcaattttgaagccaaaaattccaaatttttgcattttttaacgcaaaaatttggaattttcacctcaaaatcaccgatagagcacatttgccacggaagtttaaatttctgtatgaattgtggccgagttttttcaaaactcggccacatagctatttagagtggaaaattccaatattttgggaattttcaacttgaaatcgctattgaagcacacttgaagtttaatgtacagtggccgagttttttcgcggccacgtaagtaaaacttccttaaaacgtacttttggcaaaaatttgggcagaggttccccgggaaagtggtcaaatgtgctcccggtgagcaatttcgggtggaaaattcaaaatttttgcattttccatgcaaaaatttggaattttccaaccgaaaattgccgatagagcatatttgccacggaaaattgatatttggacaattttctgtcattttttttgggcttttgggctcatttaacgcatgtttaagccgtcgttttggcctttttttgggaaatctggaggtttctacggccattttgagccaattttcaagcgtgttcagggtatctataaccgtttagagccaatttagaggcttttcggatacttttaggcttcagggccgtgagaagaaccattttcagcaaatttttatagcttatgggtaacttataggctaattttctaatttttagtatattcgagcaaaattcgaagctttttggttaactttagcccaattttcaggctttttggacatgtagaaccattttaagccaaattttagacttttcgggtatctagttccgttttgagctaaatttcaggctattgggtcaatattagccaaattttgagctttcaaggtacttggacgatttcaagccaattatttgaactttttgtggcaattttaagccaaatttcaagcttttaggatatctagacaggttttaagcctaattttaagcttttcggtcatttttaggccaaatttcaggcgttaggggtgtccaggactgttttgagccaaatttcaaacttttggggtatctagttccatagttccattttaggccaaattttaggcttttggaccaatttaaagccaaattttgagcttttcggatatctagtcccgttttaagccaaatttcaaagcttttgggtcattttaagctagttttcagacttttggagtgttccggccatcgtaagccaaatttcaaagcttttgggccatttttaggccaattttcagacttttagggtatctagaaccgttttaagccaaatttcaggcttttgggggatattagccaaagttccagattttcgggtatctagaaccgttttatgccgaattttgaagcttttgggggatattagccaatttttcaggctttcgggacaattttaagcttttcaggtatctagtaccgttttaagccaaatttcaaagcttttgggccatttttaggccaattttcagcttttcgggtatctagtaccgttttaagccaaatttcaggcttttgggggatattagccaatttttcaggctttcgggacaattttaagcttttcaggtatctagtcctgttttaagccaaattttcagcttttcgggtaactagtaccgttttaagccaaattttaaagcttttgggccatttttaggtcaattttcagacttttagggtatctagaaccgttttaagccaaattttcagcttttcaggtaactagtaccgctttaagccaaattttaagcttttcaggtatctagtcccgttttaagccaaattttaaagcttttcgggtgactagtaccattttaagccaaattttaagctttttgggtcaattatcgccaaatttttcaaatttttagggtatctggttgtcaaaaattcgaaaaaaaccacaaaaaaccgtgccggcagggacgaaaaaatcgcgcgcaaaaaaaacggcaaaaagaggaaaaaaactcaaaaccgcgcgcgcatttttacctgatcctcagtcaaatagttgggcagaccaccgataaagatcttattggccgaatcgacgacaatcgttgaaacaggcatacgagagttcatatcaaacgtattttgagatggttgatagtctcttggacgtcgaactttcaactgttgtcccatgaaattgattccgtcaaatgccattccggccgtcgtttcgtctattgaacggaattctatgaatgcgaaatttttgtctgaaagaaaaattcgaggttattggggtactgtaggggcttaaaacgagtgatttttgcacattttagactaaaaaatcaaattttccgtcaaaaaatggcaaaaatcgccgatgcctacagtaacccccgataaactctaaaatttcaattttccagaaaaaattgtgtttgcgtacttttggcgctacaatagcaaaatttaaaaaattagattttttttgtctaaaatttgcaaaaatcacctattttttcccatacaaatcgcctatttcaagtctacagtaacctgctaaattcaaaaaaaaattcgattttttttttgaatttcgccgcgggttactgtagggctaaaataggcgatttttatgggaaaaaataggtgatttttgcaaattttagacaaaaaaatctaattttttcaaattttgctattgtagtagcgccaaaagtcacgaaaaaacacaattttttttgaaaaattgaaattttagagtttaccggttactgtaggcatcggcgatttttgccaatttttagctcgaaaatttgaaatttttgagtttcgcgggcggctacggtaggcctaaaataagcgttatttgctgcgatttttcgaagaaaaattcgaatttaggagcttgtcggggtactactgtaggcttaaaatagctatttttttggctccaaatttgaatttttcagggcttatcgcgggttactgtagggctaaaataggaggcaatttttgcagtttttagctcaaaatgttgaatttttcattaaaaaatgtatggttttgccatgaaaaagtgcaaatttaggtgttttaggcgattttttagctcaaaatttggattttgcagagcttgccggagtactgtagctaagatataggctacaggctaacataggtgatgtttcagcgaattttagaccgaaaaagcaaattttttgaatttatcgggtaactgtaggctcaaaatagacaatttttgcagtttttagctcaaaatattgaatttttcgtgaaaaaatctgcaaaaatggcctatttaattaaagcctgctaaaatcaaaaaattcgattttttttttgttgaatttcgcgggttgatgtaggcttaaaatagacgaattttgcccccatttttagacgaaaaattcgaatttttagcaacaaattttgaaattttcgattaaaaaactcaagatttggcatgaaaagctgcaatttaacagttttcagggttactgtagcgccaaaaatacgcaaacacggaatctgtcgattttgcgtaattttaacgcagcagtaactcatttttgctctgaatttgaacttttgacattttatcgggttactgtagcgtcaaaagtacgcaaacaccaattttgtggttttttgcgtatttctaatgctacagtaactcatttttccgctgaaatttcgaatttttgacaatatatcgggttactgtagcgtcaaaagtacgcaaacgcgcagactgagccaaattttgcgtatttttgacgctacagtaacccatttttcctggaaattcaatttttcgctctaaaatcgaatttctgaggtttttttcagttgaaaatctaaattttcggtggggggatatagcaatttccggggtcaatttcggcctaaaaaaccagaaaaatcgccaattttctcatttttcgtgtcgattttctcgccgaaaaccgtcgtacccaaatttatttggcacagaagaatcggatttccaggcgcttgagccaatccacagaggtgcatttgttgattgaaaaagtcgagcatagcttcttcattgcatccgaacggaatatttccaacgtagagacgacgtgattgacaagtcactgatgggcctaaaaaatgagaaaaatttgaaaatttgggcagcggttccccgggaaagtggtcaaatgcgatcctgtgagcaatttcgggtggaaaattccaaatttttgcagtttttaatgcaaaaattcggaattctcgacctaaaatcgccgatagagcacatttgccacggaacagcgagagaattcaaaaattcagtgaagtttttcgaattttctagataaaaattgacactttttgatttttcgacagtttttcagcactgaaaaatcaaaatcagggcaaaaatttagttttttttcgtaactttgtcagatttttgcacactattttccgatttttaaatcaaaattcaaccaaaaactggaataattttattttttgacttttttaacggtaattttgagcttttgaagcaaaaaatctggcaaaattgcactttttacagaattttatttggaaaaatcgaaaatttgggcagaggttccccgggaaagtggtcaaatgtgctcctgtgagcaatttcgggtggaaaattccaaaattttgtaatttctaatgcaaaagtttggaattttcacaccaaaatcaccgatagagcacatttgccacggaaaattgaattttaatctgagagtttagcacatttttgcgagaaaaactgaaaaaaaaattttgcagttttctgagtaaaattggttaattttttcaggattttcctgaattttgggctccgagagcatttttggatactaattccacatttttcaatttttctcgaattttcacgtgaaaaacggcaattttcacgaattttcccgagtttttagtaaaaatatccaatttttattgaatttttcagagttttcagtgaaaaaatccaatttttccgaattttcagtaaaaaatccaatttttccgatttttcagtgaaaaattcaaattttcccgaattttcacgtgaaaaacggcaattttcacgaattttcccgagtttttagtaaaaatatccaatttttattgaatttttcagagttttcagtgaaaaaatccaatttttccgaattttcagtaaaaaatccaatttttccgatttttcagtgaaaaattcaaattttcccgaattttcacgtgaaaaacggcaattttcacgaattttcccgagtttttagtaaaaatatccaatttttattgaattttcgatgaaaaattcgaatttttccgaattttcgatgaaaaattcgaatttttccgaattttcagtgaaaaaatcgaattttctcgaattttcagtgaaaactgccaattttctcgaatttttccgaattttcagtgaaaactgccaattttctcgaatttttccgaattttcaggcaaaaactgccaattttctcgaatttttccgaattttcagtgaaaactgccaattttctcgaatttttccgaattttcagtgaaaactgccaattttctcgaatttttccgaattttcagtgaaaactgccaattttctcgaatttttccgaattttcagtgaaaactgccaattttctcgaatttttccgaattttcaggcaaaaaccgccaattttctcgaatttttccgaattgtcaggcgaaaaattccatttttccgtaccaacaacgggcactgcagactgtacagatccacgtggaacctgtccagccgcctgcatattcttgtactccatcggtgtagttgtctcgaatccagtcggcggaacatcccagaatcggtactttttgggctcacgaggcttctggggctccggctcacggcgcgaacgggcttcatcatcacctccacgacgtctcggctcatcacgaccaccaccgcctcgacgacgttcacgggatcgagaacgatcacgatcacctccacctccaccaccacgacgttctccacgatcacgactgaaaatggggggtttttggggttttttgccgggaaaaatcgatttttttgcgattttttaggttaaaaaatgcggattttcagtgactttcagctaaaatcgcaattttccagtgtaaaaatcgattttttttgcaattttttggctagaaaaattgcaatttttggcagtttcgcaggtttttggcgggaaaaatcgattttttcgcgattttttggctagaaaaatgagttttcatgcagaaaaattgcaatttttggcagtttcgcaggtttttggcgggaaaaatcgattttctcgcgattttttggctagaaaaatgagttttcatgcagaaaaattgcaatttttggcagcttcgcaggtttttggcgggaaaaatcgattttttgcgattttttaggttaaaaaatgcggattttcagtgattttcagctaaaatcgcaattttccaggggaaaaatcgatttttgcgcacttttttggctagaaaaatgagttttcatgcagaaaaattgcaatttttgtcagattcgcgcaggtttttggaaggaaaaatcgattttttaagttaaaaatgtaaattttcgcaattttccactggaaattcgatttttcgccaacttttggacagaaaatttgacttttccgtggaaactcagctaaaattgcgattttttgaaggtttttgggcggaaagatggatttttcgcaaatttttggacagaaaaaccattcttattgcgtttttcagtacaatttgagtaaaaaccgccactttttattgtaaaaattcaaaatttttaggtaaaatttgaccaaagaacgcaattttccactggaaaatcgattttttgcggttttttggacagaaaattagacttttcaatggaaattcagctaaaattgggactttttggaggtttttgggcggaaaaatgcgaatttttttggtggaatttaattaaaaaatctatttttggcgagtttttgaacaggaaaatggattttatcgttactttttaggttaaaaaaatgggaattttcgtgggaaatttagctaaaattgcgatttctcgcttccacgactgaaaatttcggggttttcggcaggaaaaatcgatattttacaactttttaggttaaaaaatgggaattttcggtggaatttgaccaaaaaacgcaattttccaactgaaaatcgaatttttgcaaacttttggacagaaaatttgacttttccgtggaaattcagctaaaattgcaattttttggaggtttttggaaggaaaaatcgattttttgcgatttttcaaagtaaaaaatgcgaattttcggtggattttcagctaaaattgcatcttttccgcttttcctgtgaaaaaatcgatttttcatagatttttggcaaagaaaatgaaaattttggtggatttcttcaagcaaaaatcgattttttaaagagttttttggcaggaaaaatgggattttcggtagtgtttttcatggaaaatcatcaaatttcgctctgaaaatccgattttgggtcaattttcttcaaatttagaccattttctagcggaaaactcgattttcgcagagttttcgacgaaaatcctcgaatttttgctctaaaaatgttgattttctgggtttgaagtcatttttaagccgtttttcatgcaaaaagcgattttcagcgtaattctggccaaaaaaaaacaaaatttcctcctaaaaatccgattttgggtcaattttctagcggaaaactcgattttcgccgagttttccacgaaaattctcgaatattccgtcaaaaaatgcaattttttccagcttaagcaccttctcgagcgtcttctcgtatcgcgatctctacttctcgatcgttttctctttttccgatcattatcatcctctccaccaccaccaccagtcgatgatttcagattttcttcattttccagtggtccagtggtcggctgaatcgcttcgagacctccttcacgttgagcaacgtccaaaaattggcgttcaatatcttcaagtttcatgccatcctggtgatcactcatctggaaaattgggaattttctttaaaaaatagagctgaaaatccggagaaaatggatggaaaaatttgaaaatttgggcagaggttccccgggaaagtggtcaaatgtgctcctgtgagcaatttcgggtggaaaattccaaaattttgtaatttctaatgcaaaagtttggaattttcacaccaaaatcaccgatagagcacatttgccacggaaaattgaattttaatctgagagtttagcacatttttgcgagaaaaactgaaaaaaaaattttgcagttttctgagtaaaattggttaattttttcaggattttcctgaattttgggctccgagagcatttttggatactaattccacatttttcaatttttctcgaattttcacgtgaaaaacggcaattttcacgaattttcccgagtttttagtaaaaatatccaatttttattgaatttttcagagttttcagtgaaaaattccaatttttccgaattttctgaaaaaaaaaaccgaaaattcggagaaattcacgaaaaaatgggtttttttaatggaaaaatagctgaaaattcggtggaaatcgcgaaaaaatgagtttctctgaaaaaaaaaatagccgaaaatcaggggaaaaccgcggaaaaatggagacaattgggcgaaaatgaggaaatttggcgattttttggaaaaatcgttgaaaattcggtggaaatcgcgaaaaaatggaggtttttctgaaaaaatagctgaaaaacccgacaaaatggcgaaaatatggaaaaaaatagggtgaaagtgagaaaatttggagtttttctggaaaaaattgctcaaaatcgcgaaaaaatggagaaaattggacgaaaatgaggaaatttggtgattttttaaaaaattgcttaaaattcggtgaaaatgctggaaaaatagctccaaaacgataaattgtgagaaaataaacggtatttgagtgaatttgccgaaaaaataggagtttttctggaaaaaatagctgaaaatcccgagaaaatggcgaaaatatggaataaaaaggttggaaatgaagaaatttggggttttttggcgaaaaattgtttaaaattcgggaaaaaccgcgaaaaaatggagaaaataggttggaaatgaggaaatttggtgatttttttacgaaaaaaaaagaaaattcggtgaaaatgctggaaaaaagagctcctcgctaaaataggcgaaatttgagtgaatttgccggaaaaaactgagatttttctgataaaatagctgaaaattcggtgaaaatcgataaaaaatagcttaaatgatgaaaaatcgctgaaaaatgagattttgctgaaaaataggtagaatctataaaatttcggggaaaatgatggaaataatagaaaaatgggtaaaagcacacacaaaattaggctgaaaatcaataaaattaggtgaaaaatgacaaaaatctcccaaaaaaatcgataaaaaaatagctgaaaatctgcaaaaaatcgatgaagatatgctgaaaatcgctgaaaacgagagaaaaaataacacaaaaatccaataaattacaggaaaaatgttgcaattttatagcaaaaaaacggggcttaaaggcactgaaaatgtgtgaaatttgacaagaattatgtgaaattgggggattttcgggtggttttttgtacaatttagcggggaaaatggacgaattttacatgaaaaatgggggaattttgggggaaaatcgacctaatttaggtaaaaatcgataaattttgcatggaaaacggggatttttcgcggaaaaatcgatgaattttgcacattaaaaacagcaattttggggaaaaattgacaattttaagacaaaattggcatttttacatggaaaagaactttttttttaggtgaaaatcgatgaattgtgcatgaaaaaccagcgattttaggtcaaaattgacattttacatgaaaaaagggcctaatttaggtaaaaatcgataaattttgcgtggaaaatagctattttaagtgaaaatcgatgaattttacacggaaaaacgacaattttgggggaaaattggcgattttaggccaaaatttgcatttttgctcggaaaaatggctaatttaggtgaaaatcgataaatgttacatgaaaattggaaattttgagccgaaattggtaattttacatggaaaacagcgattttgggggaaaattgtcgtttttacatggaaaaaatggcatttttacatgaaaaagtgtggcaattttaagccaaaattggtatttttgtatggaaaatagcttttttagatgaaaatcgataaattttgcacgaaaaacggcgatttttgagaaaaattgacatttttacatgaaaaagtggcaattttaagccaaaatcgacatttcctcatggaaaatagctattttaggtgaaaatcgataaattttgaatgaaaaacggggatttcaggtgaaaattggcaatttcaagtcaaaattgacatttttacagggaaaaatagctattttaggtgaaaatcgataaattttgcatcgaaaacagcgattttgatgggaaattggcgattttaagccaaaatcggcgattttccatgaaaaacggccattatgggggaaaatttgcgattttaagccaaaatcggcgattttacatgaaaaaatggttattttaggtcaaaatttggcaatttacatgaaaaaaaacgggctattttaggtgaaaattgatgaattttgcatcgaaaacagcgattttgctgggaaattggcgattttaggggaaaatttgcatttttacatggaaaaaggcctaatttaggttaaaatcgataaactttgcatgaaaaaccagcgattttaagccaaagttggacatttttatatggaaaaaacggcgattttgagggaaaattggcgattttaaaccgaaattcacgtttttacatggaaaaaacaggattttaggtcaaattttgacaatttacatgaaaaaaacaggattttaggtgaaaattgatgaattttacagtaaaaatatcgattttatgtcaaaatgaacgaattttccgcgagaatttcctagcatccacacattccgccgccaccactggagcccgtcggttgtcccaaccgaaaagacgggcggtcattgtcccataagtcgggcgtttgaatgattttctcgataagctcctcaaatgtgcactgtacaccctccttagtcttcgcagaagcttcaatgaatagtgtgcggtggcgttttgcgaattttaggccttcctcgcgggttaccactcgatttggctgaaaattattttttaggccaaaaatcgaacaaaatcggctttttcgcaccatatcaatcttgttcgcgaccatcatcttgataatattgtcatttgtgcaataagtatcgacttcttgcatccaatgattcaatttctcgaaggagctgcggctagtgacgtcatacacgcaaattacgccctgtgctccacgataatagctcggcgtgagggtacggaacctctcctggccggcggtgtcccaaattgcgagttttacacgatttccgtcgattgccattgaagttacgcggaaatccacgcctaaaaaacaataaatttagggtttttttggcctaaaaatcaaaaaatccaaaaatccctggaatttccacgaacctatcgttgcagcctgctcaggatcgaagacatcgtccacgaatcgtagcattaagctgaaaatttttgaatttaaattgatttttttaaattttttttgggcgagaaaacccctcacctcgacttccctacgccactttcgccgataatcaggattttgagagttgtgagggggcttgaactgtcgtcggacatctggaattcgtaaaaacgaagggaaaatgcaggataattttttttttgttgggaaatttacgtttttaaggataaaagataaaaaactcgatttttcagggtattttccccattttaagttaattttttaacacttttaaatagatttttcaccttaaaacccaaaaatttgccgaaaaatcaataaatttcccttcgaaaatgtcagatgtcgttgcacgagacgctctttcggaaaagagagcgatggagcgcacttgcacttggcacgatgccaagtgcctgtcgtggtgagacccgatggcgcgaaaatggatttgtttgaaatttgtttttttgtttttttaatttttaaacgtttttcgtgttttttatttttattttttttgttttttataatttttccaaatttttatcagttttcagcaatcaaaaaaaatgcaaaaatcaatcgacgacatgatcaacgaagttctcgcggtaaaagtcgaaaaactgccgaaaacccaagatttttcggatctccaagaagtttgcgcctccaaactgcagataattaacaaggaaatggacgaggccgatcggaagctggaggagacgctcgagaagcgaaaattggtggaaaaacgtgagaaatttagtgaattttcacaataattttcccatttcctagaactcgaagacctccaggagcagtataaagtcaaggaattcgcgttttctcttcaaaaagagtttcaggatgagctgaagaaggtcgccgaggaaattttctaacaattttcattatttctgtacatataaagttctgtattccttaaccccgttgtttttcccagttttctgtacttttcatgcattttatacttatttttcagcgtttttcaatgatttttcaggctcaaaatcctcattttcagcccaaaaatgacggatttagacacttcatccgctcaaatacgggcttcgcagagcgatttatcgattgccaactcatcgccacgtctgctggagtccaacgcaactacttctacagcggtaaaatcggatttttagcggcgaaaaaaatcgaaaaaacgcattttttgctggaaaataagcagaaaatcgtgtttttcgccctggaaaccgcctaaaaacacaattttcagtgcatcaacgacgttcaacagccggttcgacgcgatttgagctcggaactcctctgtccactgtgtgatcagcttttcgacagggttagaacatggaaataccgaggatttcaagaaaaattgcgtgaaaaatggcggattttccattaaaaatcgcttaattttacccatttttgacccaaaaatgtgcaattttcgtctttttccagctataaatgtgaaaaatcggggaaaaatgcgaaattttctcataaaaacttgaaattccgaaaattgtcttgtttttgcccatttttccagattttcagccaaaaatcacgattttttggggatttttagctagaaaaccgcattttttccgatttttagcataataatcacagattttctcggatttttacagttttttgccgatttttacgatttttagactaaaaactttggatttttaagattttcagcacaaaaaccccagtttttctcggatttttacagtttttagcttaaaaaccacaatttttcagatttttttcgattttcagctcagaaaccccagtttttctcggatttttacagattttagcttaaaattttggatttttccgatttttagccctaaaaaccccaattttgccggattttttcggtttttagccaaaaaactccagtttttcccatattttaacgatttttagctcgaaacccacaatttttccggacttttacaatttttagcccaaaaaaccccaattttttcggatttttctgattttagctcaaaaataaccgatttttttcggatttttctgattttagctcaaaaataaccgatttttttcgattttcagctcaaaaacctcccatttttccagatttttccaattttttgctcaaaaaacttcaatattttaagatttttttcaattttcagccgaaaaatccaaatttttccggatttttacaattttaacccaaaaatcacaccgatttctgccgatttttacacaatttttagctcaaaaatcaccgatttttcccaggattttcccgatttttaacccaaaaatctcggtttctcaggatttttacaatttttagcccaaaaactacacagttttctcccgtttttttacgtttttcatctcaaaaatcacccattttcccagatttttagctcaagaaaccccagtttttcagcggagttttccgatttttagcccaaaaaccatcaattttcccggatttttccaatttttatgtcaaaaatcccagttttccgccgattttttcgattttcagccgaaaaaccccatttctaccctaatttttacaattttcagccaatttttccaaattttcagcccgtaatggtaacatgtgggcactcgtactgtgagccgtgcatcgaacgacatacacgtgatacgagagcctgtgtaatctgtaaactcgacgttggaccatttgcagcgatgattcccagcattacacttgataatgtacgacggattttgatgcgaaattcggatttttcgacagtttttaccccggaaaaccgtggatttttaccttaaaatcgcatttgtcagccaaaaaactctaattttagtccgaaaaaacgatttttcacggcaaaaactacaaaaatacgcttaaaaacccgattttttcctcaaaattttgaattttgtgactaaaaattgcattttcagccataaaaagcatagttttggcttaaaattcaattttcgaaagtttttagccttaaaggccgagattttgacttaaaaatcacattttcccgtggaaaacttgatatttttcagccaaaaaaaccacaaaaatacatttttcaacttataaattatgcattttcggtcaaaaatccgatttttccttgaaaatcttgccgaaaattcagaaaaatgttgacttttacatctaaaatttcttgattttcgttggtttttacactgaaaaaccggaattttgacctaaaaataaactttttcataggaaaacctaaaaaattatgaatttttgggttaaaattctccattttcagggtaaaaatctgttggaagccctgaaaattttgattttgaagctatttttcgcatttttcgcagaaaaactcaattttaatctcaaaatcccgattttccagctaaaaatcccaaatttttgcattttttcgccgaaaaacttaattttagtcaaaaaaaattgcgattttcttgcaaaaatatcaattttttgcaatttttaccttgaaaacccagttttaatctcaaaatcccgatttttcagttaaaaatccaaaatttttgcaatttttagctcaaaaacccaattttctagctaaaatctcaaatttttgcattttttcgcagaaaaataccaaaacattcaacgaattttcgtttcagatggtccgaaaattgaaaaaccaggagaatatcgagagcagctacgacgatttgttcatttgtgaggaaaaggttgagtttttgcaggaaaatgcgaattttcagggtttttgagtgaaaaaatcatgaaaattaggtgtttttgaccccaaaagtcgggttttttcaccattttcagttgaaaaatcgtggttttccactttttttaaagcttaaaaacccccgattttcccaatttttaccccctaaaaacccggatttttcactattttcagctccaaaaagcgccaacaccaccaatttcggaggaaattccggctcaaaaaatgacgagaagcctgtcacaacggtctaaacgacgcttattcttctcaattgcgggcccaacgatttgctcgaggtagatggctggaaaagagctgaaaaaaggctgaaaatctggaaatttcagctaaaaatatggaaaaatcgctgaatttcagtaaaaatcttcgattttcagccaaaaaagtcaatttttcagttaaaaaaagcgaaaaaaatgcagaaaaattcgatttttcagtcaaaaacctcaatttttgagcttaaaactcaatttttccctgtaaaaatgtgattttccctgaaaaaaacctaatttttcaactataaatgagtaaatctcagagaaaaatgtaaatttcctgatttttccggagaaaaatccactttaaacccaacaaattggagaaaaaataaaaaaaaaatccaattaaaaatcaaatttttgcgaaaaatgctaacatttctaatgaaaactgtaaaaattgcagaaaaattcgatttttcagtcaaaaacctcaatttttgagcttaaaactcaatttttcaaccaaaaaatgcgattttctctgaaaaaaacctaatttttcagcgaaaaaagagtaaatctcatagaaaaatgtgattttcctaatttttcctgctaaaaatctgaaattctgttcaaaaatttgatttttcgggaaaaaaactataaaaattgcggaaaaatccgatttttcggtcaaaaacctgaaaatttgagtttaaaattcaattttcgcccaattaaaacgcgcgttttaaaaaatcgataattggtgtcatggtgcacccgtttcgtagccttttttggttaaaaatatcgattttacccccgaaaaatgctaattttcgacggaaaacgcgatttttaacctcttttatgattattttacacatttttttgtttttttagtgatattttcgagttttttccaggatttcagccaatttttcactctaattttggtatttttcaagtttttcgccagttcctcggattttttcggtcagtttggagcatttttcatcgtttttcatggattttcgccgattttcttggatttgtgacatttctctgcaattcggcagtttttgctcaatttttgctcaaatttcctgtatttccttggcttttcccccagtttccagctcaagttggaacaattttctgccaattttcattgatttgagagacttttttctacaattttgtcgttttcgcaccaatttttgaccaattttccgccaatttcctatatttttccgataattcctccacccttcaggcttttcccgaaattgtgctcaatttggagcaattttccaccacgattttctggattctattgaatttttgacaattttctcgattttccgccgcttttccgacaatctccaccatttctgataaacttttgctctttttacccacattttccggtgaatttctccgattttcagtcattttttcgctattttcactcaatttcgccccttttcttcgaattttcgcattttcctcccgtcttttctgaaaatttccaggaaatggctcgttttccgataatatcctcgatttcctggctttccccgaatttctgctcaatttggagcaattttttgccgattttttcacaacttcctcgaattttctcaatttttcaccgatttccgccgattttcatggattttatgccattttcgcccctttttcctccgtcatttctgaaaatttccagaaaacccccaatgtctcacaagcgatacacaatcgacgaggcgagcgaagtgatgaagtcgtttaaccagcaaaaatacgtggatcttcgcgaaagttcggtagaaagtgaccgaatgttggaggaaatgctggaaaagcagaagcaactcgtctggaaatccgttcgaatcgccagaatctcccgggagaaggatcgggccgaaaagactgagacactgatggaagaggttcgattcttctggagcatcgagatgcagtgtaggcatgcggtggaggattggaagcgtcggaagcgagagaatgatcggaagcgtcggacagacaaagtggtgacagagacattggtgcagaagaagagacgcaggaaggttgaggaggaggtggaggaggatcagatggaggatcggaatgaagatcgtgacgaagagttcgatcatggagagggatgtagtggatattaaattatgttaaattgcgattttgcgattttttcggaggaataaatgattttttcaaagatttttagtttttgagcagaaaaatcggaatttaaagagctcaagaagaagctgagtggtggaaagtcgaaaattccagaaaaactgaaattttcccacaaatttcaaagaagttgccattttttgagcgaaaaacctctgatttcgaggaaatttggagtttttttttgaattttcccatgttttaagcggaaactttggcttattaaattggaaaactctgattttgaccagaaaattgatttttttaatgaattttctgtgaaaaattcaaattttcagtcaaatctagaattgcggccattcccagtattttaagcgccctagccggagctacagtacccacaagaagccggaaaatttgaactttcagatttttcgcttagagaggggtaaatgcgctctattggtgttttttggatgaaaattcaaatttttcacaaagttccatttttggcccaattttggtccaaaaatggaaaatattgtaaaatttcaataatttatcgaaaaaccataaattattttgaataatttttgcacgaaaaaatccgaaattcactgaaaaaatccaaataatataatttaaatccatataagtggcaaatgtgctttcgatcggcgattttgggctgaaaattcgcatttttgcattaaaaactgcaaaaatttggaatttttagctccaaaattgctcaccaagccgtttgaccactttcccggtgaaccgctgcccaatttttgccaaaagtacgttttaaggaagttttacttacgtggccgcgaaaaaactcggccactgtacattaaacttcaagtgtgcttcaatagcgatttcaagttgaatattcccaaaatattggaattttccactctaaatagctatgtggccgagttttggtaaaactcggccacaattcatacagaaatttaaacttccgtggcaaatgtgctctatcggtgattttgaggtgaagattccaaatttttgcgttaaaaaatgcaaaaatttggaatttttggcttcaaaattgctcaccgagcacatttgaccactttcccggggaacctctgcccaaattttcaattttcccatcaaaatctttattttttcagcccaatcaccccacaccgccgtcgcccactgtcgccaagtgctcgtcccgccaaaagttctctgaaaatcccgccggagccgctgaaccactcgctctcacctccaggattccataacagtcaccaccaccgagacgattctctggtgctcgccggcggaaatttccgccgaaatggattcggccgacgttcggaacgcttcaccgccgccaccaccagtgcacaaagttttgctgaaagttcgcagatttccactggaaattcgtcgaaaatcgatgacgagtccgacgggacaaagctgaagcgcaactcgttccttcgtagatcactcaacgcgtttcgctcgaaaagctccggcaaagagcaaaagagcttccgagtttttgctcagatccctgagcaccccacggagcaccatgatgttccagaaggagacgtggagcatttgctcccagagaagccgaccaaatccagcataagatcgctctggaagcggcttttcatgccgaaaaaggtgtcaaaagtgtcgccagcggccgtccagctgctgagccaatcgcccagcaccactgacgaacggagccaccaccacaccacaatctcatttgttcggctcgaaaatgagcacgacgatccggaatatgatgagccgttgcaattgtcaaagttctcggctctcggctattatactggaataggccggaagtttgagcgtgtcgcatcgggctgtgagattacgctcgtcgtttttggacactctggagccggaaaaaccacttttgtaagggaaatttccgaaaaattcggatttttccgccccgaatagctatgtggccgagttttgagaaaattcggccgccgttcgttctaaaatttgcaatttcgtggcaattgtgctctaaatgcgattttgggttgaaaattctaaaaatttggaattttccactccaaatagctatgtggccgagtttttagaaaactcggccaccatccattcaaaaattgaaacttccgtggcaaatgtgctctatcggtgattttgggccgaaaattccaaatttttgcaataaaaactgcgaaaatttggactttttcggcttttaattgctcaccgagcacatttgaccactttcctggggaacctctgcccaaattttgaagaaaccgcttattttgtctacttggccgcgaaaaaattcggccactatgcattgggctctaaatgcgattttgggttgaaaattctaaaaatttggaattttccactccaaatagctatgtggccgagtttttagaaaactcggccaccatccattcaaaaattgaaacttccgtggcaaatgtgctctatcggtgattttgggccgaaaattccaaatttttgcaataaaaactgcgaaaatttggactttttcggcttttaattgctcaccgagcacatttgaccactttcctggggaacctctgcccaaattttgaagaaaccgcttattttgtctacttggccgcgaaaaaattcggccactatgcattgggctctaaatgcgattttgggttgaaaattcgaaaaatttggaattttccactccaaatagctatgtggccgagtttttagaaaactcggccaccatccattcaaaaattgaaacttccgtggcaaatgtgctctatcggtgattttgggccgaaaattccaaatttttgcaataaaaactgcgaaaatttggactttttcggcttttaattgctcaccgagcacatttgaccactttcctggggaacctctgcccaaattttgaagaaaccgcttattttgtctacttggccgcgaaaaaattcggccactatgcattgggctctaaatgcgattttgggttgaaaattctaaaaatttggaattttccactccaaatagctatgtggccgagtttttagaaaactcggccaccatccattcaaaaattgaaacttccgtggcaaatgtgctctatcggtgattttgggccgaaaattccaaatttttgcaataaaaactgcgaaaatttggactttttcggcttttaattgctcaccgagcacatttgaccactttcctggggaacctctgcccaaattttgaagaaaccgcttattttgtctacttggccgcgaaaaaattcggccactatgcattgggctctaaatgcgattttgggttgaaaattctaaaaatttggaattttccactccaaatagctatgtggccgagtttttagaaaactcggccaccatccattcaaaaattgaaacttccgtggcaaatgtgctctatcggtgattttgggccgaaaattccaaatttttgcaataaaaactgcgaaaatttggactttttcggcttttaattgctcaccgagcacatttgaccactttcctggggaacctctgcccaaattttgaagaaaccgcttattttgtctacttggccgcgaaaaaattcggccactatgcattgggctctaaatgcgattttgggttgaaaattctaaaaatttggaattttccactccaaatagctatgtggccgagtttttagaaaactcggccaccatccattcaaaaattgaaacttccgtggcaaatgtgctctatcggtgattttgggccgaaaattccaaatttttgcaataaaaactgcgaaaatttggactttttcggcttttaattgctcaccgagcacatttgaccactttcctggggaacctctgcccaaattttgaagaaaccgcttattttgtctacttggccgcgaaaaaattcggccactatgcattgggctctaaatgcgattttgggttgaaaattcgaaaaatttggaattttccactccaaatagctatgtggccgagtttttagaaaactcggccaccatccattcaaaaattgaaacttccgtggcaaatgtgctctatcggtgattttgggccgaaaattccaaatttttgcaataaaaactgcgaaaatttggactttttcggcttttaattgctcaccgagcacatttgaccactttcctggggaacctctgcccaaattttgaagaaaccgcttattttgtctacttggccgcgaaaaaattcggccactatgcattgggctctaaatgcgattttgggttgaaaattcgaaaaatttggaattttccactccaaatagctatgtggccgagtttttagaaaactcggccaccatccattcaaaaatttgcatttccgtggcaaatgtgctctatcggctttgggatgaacattgcaaatttttacatgaaaatttggaattttccaccccgaattgctcaccgagcacatttggccactttcccggagaacctctgcccaattttttgacaaaaccacttattttacctacgtggccgcgaaaaaactcggccactgttcattagacttcaattgttctctaaaagcgattttgggttgaaaattccaaaaaatttggatttttccacctcaaatagctacgtggccgagtttttcgcaaaactcggccaccattcgtttaaaaatttgaaatttcgtggcaaaagtgctctatcggtgattttgggctgaaaattccaaatttttgcaataaaaactgcgaaaatttggactttttcggcttttaattgctcaccgggagcacatttgaccactttcccggggaacctctgcccaaattttcaaatttttcggccatttttgaaaacctcggccaccactccaactttttacaggttcgcgcgattcgtcaactattcctggagggcaccgaccgtattcgcataattccgatcgccgagcgatatcggctcgctggaatcggaatgatgccgttcccggagggagataaccgtcttccgcacatcgtttcgatggtattgtactgggttactgtagaaatactgggttactgtagaaaagtggaaaaatctagttttctacgaaaaaaaatcactaatttagagtaaaaatacgcataatacgcccaaaaatgtacggagccattaaaggggtgtggcccatttcgaataactggcaaatgtgctctatcggcgattttaggtcgagaattccgaaggaaaatcctgaaaaaattaaccaattttactcagaaaactgcaaaattttcagtttttctcgcaaaacagtgctaaactctcagattaaaattcaattttccgtggcaaatgtgctctatcggtgattttggtgtgaaaattccaaattttcgcattaaaaactgcaaaaatttggaattttccacccgaaattgctcacaggagcacatttgaccactttcccgggaaacctctgcccaaattttgatttttagaaaaaattcgacaaaattttgtaaaatttcaatttcatttcgtattggtcgaaaactgcatttttagggctaaaaatcaccaaaaattcgaaaaagggggatgaaaactggatttttggcttaaaagtagaaaaacacactgaaaattctaattttctgggtaagaaagtgcgccccaccgataattcatgaaaagtgtttgaaatattgcgtaattttattggaaaaattcgaaattcactaaaaatttcggaaaactctcaacatttccgattttctgatcattaaaaaaaaactccgtggcaaatgtgctctatcggtgattttaggttgaaaatttcaaatttttgcattaaaaactgccaaaatttggaatttttcgacttttaattgctcaccgagcacatttgaccactttcccggggaacctctgcccaaattttcattttttcgccaaaaaacttgtaatttaggtgctcaacaacgacgagactgacatggaatacgtgctggacattatcgatccggaatatgatgtttggctcaaaatttcccattgattttcacgggaaaaatcgcattttttgcagaattcgaatcttccgcaggcatatatggacgcctgtgacgctgcctacctactcgtcgacacccggaacccggcttcaatactgtcggctcatcagattcatcgaaatatgaaacatgctcagcacattcatgtatggctggaagctcggattaaaactaaatttttggggcctaaaaatctgaaaaaatcggttgaaaactgaatttttaggcctaaaaatctgaaaatgatcggcttaaaacttaattttaggcctaaaaatctgaaaaaaaaacgacttaaactgatttttaagcctaaaaatctgaaaaaaaaataggcttaaaattgaattttaggcctaaaagcctgaaaaaataggcttaaaattgaattttaggcctaaaaatttgaaaaaaaatcggttgaaaactgaattttaggcctgaaagcctgaaaaaatgatcggcttaaaactgatttttaggcctaaaaatctgaaaacatcggcctaaaactgattttcaggcctacaagcctgaaaaataataattttctggtttttaaagaaaaaagagcgaattttcgaaattttcatcaatttgcagccggaaaaccttaaaaaaccatgaaaacgtggattttagccaattttcaagaaaattatcaatagagcgcactttcatcacaggaattttccaatttttcggtttttgagtgaaaatgactgaatttttgcgaattttgaactgaatttcaaaaatcctataattttagacattttcaccctcaaaacccctaaaaaattagaaaattcgaacatttctgtagtgtaagtgcgccctaatgataatctcctcaaaaattggctaaatccaaggttttcatcgattttttgaggtttttaggctaaaaattgatgaaaaatccaaattttatctagaaaatcctggaaaatacggttttccaccatggaaacttgggttttagccacttttgaacaaattctcattggagcgcactttcatcatagaaattttcaattttgtgaattttctggtttttggagtgaaagtggctgaattttggcgagtttgagcgatttttacctcaaaaatttcaaataatcgccaaaaaaaaacctttaaaaattcaaaaattcgaagtttccggtgatgttcgaatttttgaatttttaaaggttttttttggcgactatttgaaattttagagaaaaaatggctgaaactcgccaaatttcagtcaatttaactccaaaaaccagaaatttcacaaaattgaaaatttctatgatgaaagtgcgccctaatgataatctattcaaaaatcggcaaaaatccacgtttttatcgattttttgagatttttaggccaaaaattgatgaaaaatttgaaaattcacgtattttatcgattttttgaggtttttaggccaaaaattgatgaaaagtttgaatttttcactttcttcgaattttaggtgcaatgtgaaatgcttatgaacgtcccatcggaggcttcaggccaaacacgtgtactttctgcaaatgcactcgaaactacgatgaaaacgataccgattcgtgatgtgtgtgctaatcaactggataaaggagtcgtggaagaggtttcgtcgacggccggccgccgaaaaaatggaaaaaatcgatatttttcagtgaaaaaacgggaaaaattgatgggaaatcaagaaattacaggctttttcattgaaaagatcgatttttgccggaaaatcgataaaataccgattttgccatgaaaaaatcaataaattatcaattttccactctaaaaaatcgataaattttcgctttttctattaagaaattaataaattatcgatttttgacccaaaaaatcgataaatttccaattttccactcaaaaattcgataaaatatcgatttttcactcaaaaatttcccaattttttgcagatgctcctctcaatttgtgaacgtgtaacgaccgcccgtaatcctcaaactcccacgtcatcacccattgccacgtcatcatcaccgtcatagaggattacggtagcactacagtaccccgcagccccgcccacgcaaagaaaatgtgtttaaatattctattctatttctatttttatttatgatatttatcgatttttttcttcctatttatatatttttttaattgatttttcgcgcctcccccacgaattttaagcattttttttgtactacggtagttttagccaccacgaccccatttttcacgttattttttctgtctgtgtgtgtgcgcctttaaaattagagataaaattgattgtattactagatttttttggcgattttttttctaattttcggccaaattttggccaattttcgtgaagttttgcccaattttcggcaactttcgacaaatttttggccatttatcgactaatttcgactagttttcggcccaatttcgaccaaaattccggcagcttttggcaattttggcccaattttcggctatttttcggccaattttcgaccaattttcgactatctttcggcaaccaaaattgaacatttcgactaattttcgaccgaattccggcagcttttgcccgaatttcgacaattttcgaccaattttcgataacttttgactaactatcggccaaatttaaagaaattttgtcaattttcgactaattttcgatctacttttggcaaatttcgacaatttttggtcaactttcggcgattttcgaccctatctttctactaactttcggccaaatttggctactttcgaccacttttcgaccaattttcgactaattttcggcaaattttcgaccaaaattctggcagcttttgccagttttggcccaattttcggccaactttcggcgatttttggctgatattcaaccaattttctactaattttcggcaaattttcgaccaaaattccggcagcttttgccagttttggcccaatttttggccaactttcggcgatttttggctgatattcgaccaattttcgattaattttcgatctacttttggcaaatttcgacgaaatttcgacagtttttggtcaactttcggcgattttcgaccctatctttctactaactttcggccaaatttggctactttcgaccacttttcgactaattttcggcaaattttcgaccaaaattccggcagcttttgccagttttggcccaatttttggccaactttcggcgatttttggctgatattcgaccaattttcgattaattttcgatctacttttggcaaatttcgaagaaatttcgacagtttttggtcaactttcggcgattttcgaccctatctttctactaactttcggccaaatttggctactttcgaccacttttcgactaattttcggcaaattttcgaccaaaattccggcagcttttgccagttttggcccaattttcggccaactttcggcgatttttggctgatattcgaccaattttcgattaattttcgatctacttttggcaaatttcgacgaaatttcgacagtttttggtcaactttcggcgattttcgaccctatctttctactaactttcggccaaatttggctactttcgaccacttttcgaccaattttcgactaattttcggcaaattttcgaccaaaattccggcagcttttgctaattttggtccaattttcaacctacttacggccaatttgcaaccaattttcgaccaaatttcggtccaattttcaaccaactttcggtccaactttcgacaaactttcgactaaaattcgaccaaatttcgtcaaaaccccacgacaaaaacggtttttgcagaaatagagggagaagcatttgaaaaaggtgaaagtgcgtaggccccgtagtcgggcgtcgtattgtcttcagatttcggacaccgattgtccgggaatttgggcccccgcgcgcgcgcgagattatgatcttttttggatttcctcctaaaagacggtttgttgttgaaatttcggaacacatgaagcgccccgcttactttttatagctttcttataactttttgattaatttttgttatttttttcatttttttaaaaaattccttacactttgtcgggctatatctctgttacttttgattttttcaaaaaaatttcaactgataaaatattccttaaatcttgttctataatattgcagttcaacattttttgatatcttaaaaatgggccaagatatgagctgccaaagagacatggtgcttcgatacttttttggagcttacattaggcttatatctcggttatctttgattttatcgaaaaatgttcaactggtaaaatatttgttaaccttttttctatagttttgtagttgaaatttttttgatatcttaaaaaagaacaaagatatgatctgaaaaagctgaaaaactaaaaaaaaaaaatagtcggaattctgaatttttggttgcccagttcctagggccgagtttttctgaaaattaataaaatttgcatttatgaatatcctagttgctgggaaattccaaaaaacgttgaaattctaatttttggttactaaaaattgccgaaattgccgaaaacctgttttaaactgccaaaagttagaccatttctttccaaaaggtaaaaactttcattcttgactatttttaaaaattcaaaacaatataatattgcacattttccgctgatttcaaatatatactttttttttctatacttccattccccgcaaagttacaccgcctagacgtttcctagtcccgttgggtctccctgcgcggtaattctacaaaatatggcagcttgacatgttctcccaatattttttgtcgaaatttggtgacacaatatagaaaaatattttttgtatctgaaaataaactttattttacttgaaacagctaaaaaatttatttaaaaaataaaaattttcgaaaaaaaatttttttttttaataaattttcaaactcacacaatttttaataaattgttcagttgtttcaagtcaagtaaaaattattttcaggtacagaaaacatttttctatattgtgccttaaaattttaacaaaaaatatcgggagaacgtgtcaagctgccaaattttgtagaattaccgcgcaaggagacccaacgggactaggaaacttctaggcggtgtaactttgcggggaattgaagtatagaaaaacaaagtatatatttgaaatctgcgtaaaatgtgtaatttcatatcattttgaattttaagaaatagttaagaatgaaactttttaccttttgggaagaaattaacaccaattttcgctaacttttggaagttttcacagttttcagcaggtttttggcaatttcggcaattttcagcaacaaaaattaaaatttcagcgttttttgtacatattgtaaaatttaaccggtcggcgctgctcttcaacgggcaagacgggaaatttggtacatccaggccacctgcactcctactacttcccagaacacaatttatttgaattattagcagcaaacttggtacatttttgcctttttttgccgacacatcgtcaccccataaaaccctgcaaatctgatgcctaccgctatctacttacttttttttcttaccttttgttgaaaattgccaatattccaatttcttggttgcctaatttcccaaaaaatgccgaaatacattgtccagttgcagataattgccaaaaattccatttcggttgccaaattgcaaaaagaaaaccgaattgtgggcatttcccaaaattttaatttttagttgctgaaaagttgtcgaaaattaccaaaaatcgaaaaaaaaaagaaatgcgtgtattgggttaggcttaggcttctgcgtaattatttgccaataattacaaagtgtggccaattttcaaaaaaatttccaaaactttgagttttggagtgcccaaagttgctgaaaatttccaaaaattgccgaaaaatgccaaaattccaactttcggttgccgaaaattggtcaaaaaaaaattgattttccaaaaaaaggtttcaaagttcaaaagcattacttttttgaaattatgtacattactagtcatcaattctacaaccttcattgcacacgtgtaaagtcataaaacttggaagatgtgaggtcaggataacctctcctccacaccgttttggcagttatctaatccaaactaatgatttatgtttgattccgtgtagggaggaaaacggatagttttggaggtgtgagaacacttttcactttttcgcacattctcttatgtaaactttcaactaataaatttggtgaagccggggtttttcttaacttctccaaaaacttgcaagcctctagccgtattgaaaaaggccaaaatttcaaattttggttgtaaagaaactaaaaattgcagaaaatctaatttttggctgtaaaaattgccgaaatttttggttttattgcccagtttcagtaatttgcctaaattcaaatttttggcttcggagtttctgaaatgttcagaaattccagctttagtccaaaaaagatttcaaaaaagttaagatttcactgttaaaagttatcggacattcagttttgttcaaaaaatcgaaaatcacattttggttctaaaaaactgctcaaattttattttctggttgctcaggctcaggctcaggcttaggcgtagggctaggtttaaggcttaaggcaaagcataggcttagacttagacttaagcttctgattaggtttagccttaggcttaagcttaggctgatgctgaggcttaggctggctcaggcgtaggcttgggcttagacttaggctcaggctcaggcttaggcttaggcttaggctcaggcttaggctcaggcttaggctcaggctcaggcttaagcttaggcttaaggtaaagcataggcttagacttagacttaagcttcggattaggtttacccttaggcttaagcataggctgaggctgaggcttaggcttaggctcaggcttaggcgtaggtttaggttttggattaggcttaggcttaggcttaggctaaggtttagcctaatcccaattgtcgtcgtaaaatattttcgataacctaattgttaatttccgaatactaaaatttcctacatccaattttgtgctgccaaaatctccgaaattggccgaatgtataaccaaatgaattatttttccatttttttcctagctagtagctaaatagctaaaggtaaatattatcgtatatttcagtacgaagtggcaaaaataagctaactctacccttgcctttttatctgaatgctcagatttctggcctaaaaaagcctatttttacgccaaaaatctgcaaaaaattcgcctccaaaaccgtactcgttcatgttcataaagatgattcattcatatatatatttgcttactattccctccccaactactcgattgtcttttcccgccgccccattcgaatagtgcattcttccgcttttatggttcttcttcttcttcgtcttcttcttcgtactcctacctcgttttattcctgcgtcgtagttttcttgaaaattgaaaacggcccaaaatttcaagccaatttcaagccaagctagctagcacctgtgagccattttccatgtcaatatcggcttatcgaaaattgagaaactttgcttttttgggctgaaaaaatgttccaaaatgttccaaaattaccaaatttcgtaatgagacattctgaaaaattcacaaaaaaaaaagttacggccgctcaaagttttgtaaaaaatggtctattttttccaaaactttgagaggccatcactttttttgggacattttcagaatgtctcattacaaaatttggtaattttggaacattttgggccaaaaaacccttttccaacaactttgtgagccatttcccatgtcaaattccaattttttcctgaattttcttcttcaagcctcctcggccggttacgggatgcatcataaatttttggggttgttgtacaatattccaatgatataataatatcgtcatattaatgtttatatatgaattcaacaaacaaatatgattcaatagatgcgacggcggcttctccttcttctccttttttccgtccattttccgacacgttacccaatttttctgaccagtacgcctaggcgttaaaagcaggtggcctgcagctgtgcggtcattctagttgaaaaacattccactacgttttgagggaatttttattaaaacggactcacttgagcagtctacgatgacacatttttcacgaaatttcacttttcaaaaaattgattaggattaggcttaggctcaggttcgggctcaggctcaggcttaggcttaggcttaagcttaggctcagggtttccctgaggcttggcgtcagtggcgagcgttagcgacgctatttaggcttaggattttctggttttttttatttttcagggggttcctgtttaggcttagctctaggcttaggcttaggctttggctgaggcttatgcttaggcggggctgggaccaaaaaaaattttggactaaaaaaaaattgaaattttcgaaaaaccaaaaaaaaaaaatccaaaaaatttttgatgcttttggtcgatttgtaaagttattcaagtaatgttgcaaaatgtattaaaatacattttttgtaccattttgtaccgagttcggctctagcttcttgctcaagtttggcccaaacaatattaacttggatcagaagagttgggcaagactttggcaaaacttggatttgggaaaaatcaaagtttaactcaagttttgcccaactcttgccaaacttgccaaacaaacaaaattctaccccagtttgaagccaaagtttggcaagagttgggccccccaacatctccaacttttgcccaagttaataattttagggccaaacttgggcaagaagctagagtcaaatactgagatttgtaccaatatctataaaatttaaaacaacatttgtctgtgtcgtcatgacagatttttgtttaacaccctctatcatccttagcacatcttatcaaaaacctaccccccccccccccctcaaccaatccagttaatatcccggatatcatcatcctcacccaagtacctccagtctgtttacctgggggggatatcgcgcaacgaccacagatttcgcatttttgatctcccgctggctgctatatcatctttatttgtactcactcccctcttgtgtatctctattgtgtgtgtgaatattgaatatgctaatgagccccactcgagagtcttccacaacaactgtataatatcttttatatcgatagtacaccccctctgttcaaacaaatcttgtcatggggcaactttttatttgatctttctaaactttttcgcggcttaccacctaactagtttctaattgacacatacactagagttttaatgaggtgttaagccatcgaatattgcattggaatgatgattggcagttgctcattttacgttttcaaaaattggtgtgccagttactctacattgcgcttgcttctttaaaaaggcataactccttagaaaattttgttttttaataaattaaaataataaaaatagatacaagtcatagtgtttgaaattttgcacagtctctcagtttgcaacttttggccaaaatttttttccgcgaagtaatgcgcctttaaagctgggcgagcctactcaaaatggtcgagagtgctcgatcttatttaaaggcgcataactcttttgaaaataatatcttttaaaatcttaataaatacatctcatagttcttaaaattctgcacgttttccctgttaacaaattgtgaatacctccttcctccgtggagatatgcgcctttgaagctgggtctactgccttttctcaacagggtcgagtgtgctcgttcgtgtttaaaggcacataactcgtatgaaaagtgcgaattttaaaattcaaacatttatttcttacagctcttgacattctgcacatttttaccgtttacaaatttttgatacctcctttctccgcggagttatgcgcctttaaagctgagctctaccagggggactaattgtttaaaggcgcataactcggcgggtttttatgcgttataaatttttttttgtagtatataaattatagctcttatagctcttaaaattgtgtacacattttcttagttggaatttttttgaccacatttttccaggccgagttgtgtgacctatttttaaaaattttcaaaaaatacctccattgcctaaattttctaaaaaaaatccccaattttcgctcaaaaaatgtactctaatcaaaaactctacactttgcagatgcaaaaaccatgacgagcgacacaattcgacaaactctcgacgagctgctacttgacaagaatggcggcagcagcaacgaggctcgcgccttcttcttatcacaaattatcgatcagctgaaattgattagttctcaggtatattttattgaattgggcgcgttgtgggctttcagaaacgtataatcatgactaggccacgcccatatattgatttttgactccgcccctatttgaaaatattgcgaaattgtgaaaaatctactgtaactttctgaaattaagatttagaaaagtttgagtatttattttgtactcggctagttatgagctttcagaaagtataatcataactaagctccgcccactttggtttaggctccgccccctattgtgaaatacttgcaaaactacagtaatccttaccaaaatgaataatcaaaaaatgtttttaacatttctgaatataccatgcttttagctttcagaaacgtataatcatgactaggccacgcccatatattgatttttgactccgcccctatttaaaaatattgcgaaatagtgaaaaacctactgtaactttctgaaattaagatttaaaaaaattttgaatgtttttttgtactcagctaattatgggttttcagaaacgtataattaggccacgcccactttggcttaggctccgcccctttattaactttttgacaatgagatgaataattttaaccttaagttttctctattttgcctaaaaaatttttttttccaaaaactgactatttgccaacaaaaaccttaatttcggccccgcccactttgtactaaactccgcccatttgtaactccgcccatttgtttcaacgttttttcttaaaaaaaaaaaaaaaaataataataattccagaccgatgcagaacgacaattgcaaaaactacaactaaaggatcccaacgacaatatagtcaaagccacgccccctcctccgcccccgcccccgcctttaatttcaatactccaacaggcgcctccaccgcctcccccaccgcctcctccaaccctaaaagctccaccgccaccgccaattttgggcctgaaaacaccttcaaaaagcctaaaaacgcccacgcctcggcccaaagagtgtcccacctcgtttttgccgaaaaaagagaaaaagacgaaaacacggacggttcagtggtcgaaaatcaacgcgagtgtggttcaggacgacagtgtctggggtaaactggcgaaagccagcaatgtggatatcgattttgatctactcgacaatttttttggaattgagagcttggcggtgtcgggagccgccgaggtggtcaaggtaggaattttgttaattttgttaaatttagatttttagacaaaaacagttttatgaaagttttggaaaaaaattatttgaaaaaaaaatcgatttttgaaattttccaaaaaagtttttttttttggaagttttttatttaacaagatttcattcacaaattaggaactttcttattaagttttttgatataacatccatcatgcctatattccggctattttgagttctgacacagctgaaaccggtgctacagtaccccgcgtggcgagacccaaaacttcaaatttgacggaatgtaggcgtgtagggggtcattttgaagcatttgaaaaattaaatttagatttttaaacaaaacagttttacagaagagctttgggaaaaaactataaaaaaatttcgaaaaaaattttcaacccaaaaaaacatttttttttcctcctgaaaatttcaaattccttaaatttccagaaatctacacgaaaagacgcccacgtagaattattaactgcaaaacgtagtcaaaacgtggcaatcatgctgaaacagttcaaaaatatcgatgagctcatcgatgacgtcagccaaaacaagccggtcgccgaaatagatgctttgcagaatttgtttggaatgctgccgcaaagtgaagaggtaagtgaaaataaatgggaaattcggatttagcgccaaaaatcgattgggaatcgatttttttttcggcgaaaatttggataaaattgaattttcgaaaaattttttgatttttttgagattttttcatgaaaaattcaaatttccccaaaatcttcaaattttcaggaagaagccctacgacgatacaccggtgacatttccctactttctcctccatcgagctttttctaccgtctagtgcagattcaattctatcgcttacggtgagtattcgctgcgagacccgatttttttggatttttaagtgtgaaattcgagttgagcttgctgagcgcttcaatttaggtataatcatgaccaggttccggtaatccggaaatttaggcgacacctcttttcttggcttattgtgaaatattgattataagtcacgcccactttttgcactataaatgggtacagcctaacatttgcaaatatttttgtaaaaaagtatatcaagtctaggctccgcctactttcaaatccaaaccacgccccttattgcgaaataatagaaaagttatgattttttttgtgaaattttttagctaagcagctttgtcttaatttattttgctcagaattgaaaaaaaaaatcaatattagttgactccgcccattttcaaatctaagccacgcccctttcttggtttattgcgaaattattgcaaaatggggaaattttttatgaatttttccattcgaacaagcttgaactaactttatttcaatttttttttgtttagaatttgaaaaaatcaatattatttggctccgcctattttcgaattaaggccacgcccctttcttggcttattgcgaaatgcttggaaaatttggaaaaactctgcaaaaatcaatagtaaaaatttcaattttgctctgttcgagctaattgaattgaaacttttagaaaagtatgctcattattaggctccgcccatttttaaatctaagccacgccccttttttggcttattgcgaaataatagaaaagttatgattttttttgtgaaattttttagctaagcagctttgtcttaatttatttcgctcagaatcgaaaaaaaatcaatattacttggctccgcccatttccaaatctaggccacgcccctttcttggtttattgcgaaattcttgcaaaatgaggaaattttttatgaatttttccatccgaacaagcttgaactaactttatttcaattttttgtttagaatttgaaaaaatcaatattatttggctccgcctattttcgaatttagtccacgcccctttcttggcttattgcaaaatgttttggaaaatttggaaaaactctgcaaaaatcaatagtaaaaatttcaattttgttctgttcgagctaattgaattgaaactttcagaaaagtatgttcattattaggctccgcctactttcaaatccaaaccacgcccctttcttggtttaatgcgaaattatagcaaaattagggaaaactctcgcagatatggcatgaaagatgtggctttgttacaaaaatagttgcaaattttaggctccgcccacttacaaaatgggcgtagcttctaatcaatatttcgcaatagccacgaaaggggcgggcctaaaatcaaagtagccggaacaaggcatgattatacttattttaaagctcttaatgagttaaattcaattttcaaaattaaatttgaaaaaaaaacaatcaataatccacgtttttttcagaatagaaacccaaatcttcctaagcgatttctcgcgtctaatgcgagaactggcgccaaacgtggagatattgatccgaacaagtcaaggttaggtcacacactactctacagtaaccctacagtaaccctgaaacttttcagagattctcacttcgcccaccttgccccgcctactattgatttttgtgaatatgggaaattatttgaatgggaataactcgcaagggaatgctttcggatttacactgaattcattgtggaagctgattgatttgaagggaaataaacaggaattttcattgttacatttgctggttacggtaggtttttcaaaaaaaaatttctggttttcgagtcgctactcagtcaattttcagaatttataaattttcataaaatttctgaaatcagcatttaaacaccttttgaatgagtataaccatcactaggttacaaaaaatgccgatatttcgcaataccatccaataagtgggcggggtcaaaaaaatgggcggagccttacataaagtaatgttttgctcaaaataaaaaattattcgaaaaaaaatttgcaataattttttttgagagcagtaaaacattattttccggttatgaagtgggcagtaaaacatcgtatttcgcaatcccatccaagaagtgggcggagcctaaatcaacatttttggattctagtcatgattatacctaaatgaaaggtctcaacgagcagaaaaaggttttccaacctaaaattttcgaaatagaaaattagagtagcggaaaaaactcgaaaattaaatttttcaaaaaaaaatcgatttttgcaattttttaaaatgttctctggttatgtatacttttctgaaagctctgagcaagcccagtttgatagaaataactttaaaaaattaaaactttttttttttcaattttagtccaaaaaattttatctgaaaattgtcccaaaaattttttttttaaaattaaattttaaattttccagtgcgagccggacctagttgcacatctccaggaagagctctcaacgctgaaagacgcttcacaaatcagtttcgacgagatcaaaatctcgctgaagaccctacgagatgggcggtgcaagttggaaaagcagcttgaaacctgctccggcgccagcttcacccaatttctggagctcataaaaattgactgcaaatttgagctagacgagtttggcgccaactatgacaagctcacggagctacagtaccagcttgccgactatttttgcgagaaccggaacactttccagctcgacgagtgtctgaaaattttcaattttttgatgaatcgacttcaacagactttaaaggaacatgtcactcgggagactagaaaattgaaaaaagaagagaagaaggagacgcagacgacgagagaatgtgaaaaaactatgaaaaaaccagagaaaatcgatcttttcgatgctctgacggcaagtaatggtggtccagaatcgtgagttttcataatttcgaaaagttgagtaaatttttgaattcagcatgatttgagctttaaaataagtataatcatgcctaggttttgcctaccttctgtctaccttcaatttaagctccgcccacttcttggaggtattgcgaaatattagcggaaatagagtaattgcagcaaaaaaaacaaaatttaataaaaaattttacttgcagattttgaactcggttcattaggagcttcagaataagcataaccattcctaggctccgcctactttagttaggctccgcccacttcttggtggtattgcgaaatattagggaaacttgagtaattgcggcaaaatttttacaatacaaactttacttgcaattattgagtttagcttaaaaatatattcaatttaagtataatcatgcctagactccgcctacttttagtttaggctccgcccacttcttggcgatattgcggaatttttgaagtttacctgatacttcaataaaaatttgagagaaatcagctatattttttgattcagctcgtcaaaatatcttttaaatcctggccccgcccactcaaaattaggccacgcccacttttttcagccctcgaaaacgtgccgcaggcattctggacatgcggcaaaagttgggaaatgtgagaattcgaaagctccgtgacgtcacaactttggagaggtaaaatttttgggaattttttgttttgaaattttgaatttttttgaaattttttttttgatttttttgtgtgattttttaacaaattcttatcaattttcaaatttttagcagtttcaccccaccaccaccaccaccactcgaatcaccgaccgacagcacgagcagtaaggaaaatgagtcggtgaagccggcgaaaacctcgacaaattacgaaatgtgcaacgatttggaaagctatattactagtttgaccagaaaagtaattttttttaataaaatttgtttcaaacagttgaaaatttgaaaaaaaattaggacaatttcaagctagtttctggttttcgagtttcgagtcgctacttcgtcaattttccaaattttaaaatttccatacatttttcgaaatcagcgttcaaataccttcaaaattagtataatcatgactaggttacaaataatttgaaataattgggtcccaccacgaaattatttaatttaactagaaaaggggcggagcttaaaatttcaatttttgaccgttaaagaaatgctagtaagggagtagtagcctaaaaatacattttaccaattttttggcgtataatctagatttcttcccgatatttcataataacagccaagaagtgggcgtggcctaaaacaaaaatgggcggagccttacataactaattttctcatcaaaatacaaaaaaaaaataatcgaaaattttttgataataaattttcgaaagcagtaaaaaacataattttccgtttatttcgcaatactctccaagaagtgggcggagccaaaataaaaatttttggattctagtcatgattatacttaaatgaaaggcctcaacgagctgaaaaagattttccaaactaaaaattccgaagtaaaaaattgagcggaaaaaacacggaaattgaaaaaaaaaatttgaaaaaaaattttaatcgattttcaaaattttaaaataattttctaatatttttcaaaatttcagagagctagtcacttgccaaaagcgccacctaaagaagagccaaaactaccagaagtgcttccggagaagtcgaaaatcgcgctgaaaatcgagaaaatccccgaaaaaatcgataaacccccattgccacaagcagcaccaatcataccaaaactgccacaaaaatcgataaaagccccgtctacagtaaccacccgatcgaaagttccaccgccgacagcggctgcggcggtccgtattgtcagtgtgacgaccacaacaactccaaccaaaacggcagagctcaggaaaccgggcgctcggagcccgaagactacagtagctacagtaccaaaggttactgtagttcctgtgagcagagtacctgtggctccgtcaactccgctgagccgacgaatgagtgctccagtagtccggaagccaactatgacggctgagaaaaaacgggaggtaggtgtgctaaaacatttttaaatttttttaacttgaatgttttgaaaatttagtcagaaatttgaaatcagcgtgatctgagctttcaaaaaagtataatcaagcccagactccgcctactttagtttaggctccgcccacttattggtggtattgcgaaatgttagggaaacttgagtaattgcagcgaatttttttctaaagttgcaaaatttgaattcagtttgcaaatagttttcctttgagcataacgatgaccccgcctactttagtttaggctccgcccacttattgggtagtattgcgaaatgttggaagttcacctaatatttcagtgaaaatctcgaatataactcaatttctgatgaattttgaattcaagcattaaaatatgtgaaaacatgcctaggctccgcccattttcaattcaggctccgcccacttcttggtggtattgcgaaataataacggaaataaaaaaataatttttttgttaaaatattaagatcagcgtgaaaaattaccttttttttgattgtgttcatcatgttgtttggctccgcccattggactttaggctccgcccacttcttggatgtattgcgaaatagcaagaaaatcggcaaattttttccaaatttgttgttttttttgaacttccagacggattatttttttatcatttgcaattaaatctaatttatcgattttttacgctccacctcttccaaattaggctccgcccacttttagaaaaaaaagcttctgaaaatcaatttgttgggaaatttttttttttactcaaataaaaatataaaaataagactatcggaaaaattttttaaaccaaaaatttgaattaaaaaaaaaaaaatccaaaaaaaaaaaaaaaaaaatttcaaaaaaaaaattcaaaacattccaaaaatcctccaattttttttccagataaccatgaagccgtcggtatcaacatctgcacgtcctagcctcatcaataccagctcccacccgatggtgaggtccccactgcctaaaatgagtgttctggagaagccgaagccactgcggatcacccgacctacagtaattccccagtcgcctacagtgacgtcatcggctcgtccgagtggtcttcggcaacctgctaaaccgaaatgggtgtaattttcagattttcagatttattttcttcaacaattgtgttagcaagtcttttattttttttcaattgtacaattaataataaactgatatttattcctaaatgttggaaaattcacatttatttctagtttttgaaatttcaagctgatttttaacataagattagagcggaaacattaatttttccaaaaaacattttttacttcccatcagtttttagcaaattttcatgaaaaaattcgttttcaggacgttattacctttcaagtgacccccatcatgcttatgttccgtcaactttgaaaatttgggtctcgccacgcggggtactgtagctccagtttcaactgtgtcgaaactcaaaatcaacggaacataggcatgttgggggtcatgtgaaagctctcattgagctgaataggaatataaacagtttgaagttctaattttttattccaagattaaaatttgagaatttatgcaaaaattcaattagccgggtcgccggtgcaatttctgcgtccatagaaagtcatgtacattccgaaatagtggtgatggtccgaaattacatagtctagatgtccatccgagcacagtgggctctcctgagcatcacattcctaaaaatgaaatttttgaagaaaacgttttttggaaaatttcaaatattttttttggcaaaccaaattaatcacgaaaataatattaaatttgaattcagctcggcaagagcttcaaaatgacccccatcatgcccagattcggacagctttgaaaatttgggtctcgccacgtgggatactgtagcaccggtttcagctgtgtcaaaactgcctcaatttaaaattaacgtaacctgggcatgatgggtgttgtttcaaagctttcggcaagctggtaacaacggtactgaggaaaatttgaaaaaagttttttgaaaaaaaatttggaaaaaaaactgaaatttttcatgaaaaatctaaaaatgtccaaaaatattgtatttttcctaagattaacaccaaattcgcattccgaacattctcagcttcaaaataccccccatcatgctcagtttcagacaactttgaaaatttgggtctcgccacatggggtactgtagcaccgattttagctgtgtcgaagctcaaaatggacgggaacctggcatgatgggtgtcattcaaaaggtcttggcgagctgttttcaaaaaattatttgaaaatttatttttcctgaaaataagccccgcccaccttgtactttgcattctccgccatatcattgtcgtaccaaatttcattgcgatgatgatggaacccagcttgtccgtccaatggaatatgggacacaatgtcccttttgtggattactcggtaagagtacggtaccagctgatcgtgagtatcggcgaatgccttatcacctgtcctgggctcgccgaatgtgatcattttcaggcgagaagacgtggcgaggccattggcaatcacaaaatttgaagccaaagccgccattgaaccacccaacgagtggccgccaatctgtaaaaaagttttgaaaaaaaaaatttttttatatttttttccaaaaataaaaattcaatttttttagaataatttttttcaactgatgtttctgatttttttatctagactatcgcatcagccacttcaagagctccaaaatgcccccctacacgcctatattccgtcaactttgaacatttgggtctcgccacgcgaggtactgtagcgccgatttcagctgtatcggaactcaaaatagccggaatataggcatgatgggtgttattttaaaactgaaaacatggagaactcaaaaaatattgaatttgtaaattaaaaaaaaaagtttaaaaaaaaaaaaatttttttggaaatttttttaaaaaattttttaaaaaaacatttcctaaaccaatttttcaagataaatccaaaaatcaacatcccaaacctacaaaactcacccaaacctcataacccgggtacatatggttcaaagtattgaaatcgtccttcattccagcgttccaaattaaattgaacgcccgtgcgaaataaaatccgacatttccaccaccataccaagctgtctatatttttttgtattttttcatgtgaaaattttagaaaatcgcaaataataccttattattgtagagaacttcctcggattccaccaacaattgcagttttcctttggttcccctgaaaattacaaaaaattttctaaattttgtggttttctatgaaaactgttggcgaattcacatttctgacactcttagctttcaaatgacctcctacaagcctatattccttcaattttgaaaatttgggtctcgccacgcggggtactgtagcaccggtttcagctgtgtcgggactcaaaatagccggaatataggcatgttgggggtcattttgaagttaataagctgttgatttcaaaattaagttgttttgaactttttagctacttacaaaaatttccaaaaatttttctttcatactttttaattattgcctcccaaaaattgtcccatcagtttctagcgaatttacatgaaaaaattcgaatgcagcacgataatacctttcaaatagcccccatcatgcctatattccttcaatttagaaaatttgggtctcgccacgcggggtactgtagcaccggtttcagctgtgtcgggactcaaaatagccggaatataggcttgttgggggtcattttgaagcttgttagctggagatttcaaatttataatagttctgaacttttgttgaaagttgaaaaaatttttttttttaatttaaaaatgtttttaaattaaagttttgatttttttaacttgcagcttttgtcaagctcaatttagaattaattattttattccaaatttacaaagtttagcacctcgaattccgtgaaaacccaccgaaaagccataataatcgccttatcatcgtgtgataccaatgtcagcccggaacacgtgtctagaccgtccgttttgtcgcattttacgttaatgtgttttctaagctgaaaaatttggcatagaaagtttttagaaaattttataaaatttcagaaaaaaaaattttccaaaaaatttccaaaatttttttgtcctaatttttttctatttttttttgaaattttttaaaaattacttcgtagtttgtaaaaacttgattcaaacaattagtcgcatttggcgcctcagtcgacgcaaaaattgttggaaaatatttgcgagtaaaggcgtcggagtaggcggaggtagtggctgaaaaaaaaatttttaataaaaaaataacacttcaaaatttatattttcaaatttagctcaccaagagctttcaaatgacacccttcatgcctgtattccgttcattttgagtttggacacagctgaagtcagtgctacagtaacccgcgtggcgagacccaaattttcaaagtttacggaatataggcatgtaggaggtcatttgaaaggtcttaacatgctgagatcgaatttccttataaaaattgctagaaactgatgggaaattttttgggaaaattttttttttttttattggaaattttttttttgaaatttttgtaaatcggtaaaaagttctaaacaactataaatttgaaatcagcagctgactaacttaacaatgacccccatcatgcctatattccgatcattttgagtttcgacacagctgaaaccggtgctacagtaccccgcgcggcgggacccaatttctccaatattgacggaatataggcgtgtagggggtcatttggaagctaataacgtactgaattatatttttataagcatttatatatcgattgaaaatttgaaaaaaaaaatcaaaaaattaaaaaaaattaaatttttttttccaaaaattcaaaaaatgttgtttgtcgaaattttacctacaagtttacctttcacattcggtgctccgtgtgttccaaaaactgcaaaaactgcaaaaaccactacaaaaagagctcgaaattggctcatttctgggcgaaaatgattccaaaaaatgccaattttcttatcaatacctgggtttttatcactttttctactgatttttgatcaattttatcacattatcagtgattttgagctaactagacagaattctagacaaggaaatgaaaaaaaattgaattcgagaaaaaaaaaattaaaatttggaaaaaattcaaaaaaattaatttttggtccaaaatttcaaagtcttctaacttttttcattttaaagattttcagtattttttagactcaaaatgtgcagaatttttttgttaacattatgaagttactaaaaactcaccaaattttgatctacagtactcccttgtacttttcgttgcgggactccaaaaacgacgattttccaagtttccccatacattttccactgttttttttggcatttttgcatcaaaaacctccaaaaaagtaataaataacctttatcacattgaccatcaccatatcttatcagatatctctgggcagaaagggataggctgcaacatcacgttttttgttcatttctctgtattttctgtgttttcctaactttacatttaatttttataattttcctgaatcaaaatgccgatttgtgaattttctgcaagtaagttacttttttgaccctaaaatttgaaaatttcgagtcaaaaaccgtctgtttggtataaaccaatttatctcaaaaactgacagtttttttcaaaaaatagtcaactaagaaattgtagcccttaaaattctacacattttcataattaaaagttttttgatagctctcctctccgcggagttatgcgtttttaaagtccagagtgctctctagccacgggcgacggggagagacgcagacggcggtggcagtcagtggggagagagcatgccgaatctttaaaggcgcataactccgcgggatgcagagctatcaaaaaacttttaattaacaaaatgtgtagaattttttgctttaaaatttgctagttaaaaatttttcgatagcaccgccagattttgagatacagcagcttcaacttttgtactaattttagcctcaaaatcgcggaaaattgatgtccacgctcatgttttgccaaaaaacatcccggattttcaagaggtaaattactttttttaagtttgtgttttgagaaaaaattagaaaaaactcccaaaaaaaatttgtcaaaaaaaattccaaaaaaaaaaattcagaaattcgggtaccccggcttcgtccggctggaccataaggaagatggtactacgcatatggtgaaggacggaaaactgttcaggttttccctaggaagcttaatttttttttgggaaaaaatatatttccagagtcgtggagcccaactgcttcgatacagagactagaattgcggatatgaatcgggcaaatgtgaatgtacagtgtctgagtacggtacctgtaatgtttagctattgggtaggttttggcggaaatttgaaatttttgaaaaattaaaaaaaaaaatttgaaagttttttcaaaaatttttggattttttaaaatgaagtttcatcaattctagttttaattttctagttctcctcattatgagctttcaaatgacccccatcacgcccctattccgacaactttgaaatattgggtcccgccacgcggggtactgtagcactggcttcagctgtggcgaaaatcaaaacgggcggaaactagctgtgtagggtgttattttaattctgagaatgtgaaaaattcaatttttgcagtaaaaattattcagaattcatgcctttaaaaattaagatttttttttgaaaattaaaaaaaatttcaaaaatttttgaaattttttaaaaatgaagtttcatcaattataacttcaattttcacgttcttctcatttttagcttataaataacacccatcatgccctaattccgtctattttgaattttcgggttccaccacgctggttactgtagcattggcttcagctgtgccgaaactcaaatttcacggaacctaggcaagatgggtgttattttgaagctaagaacatgatgaacttgaattttgccgaaaaaacggcaaaaactcattaattacggagaaatttaattttcgaaaaaattcaatataaaaatttgaacttttaaaatttttctgcctccttcctaaaacccccatcttgccacacacacgcgttttcgatgttcaaaaaatgttcaaaaaatgtccgaaaaaatgtaatacaactttgaacgtttatatctcggctctcacggaaccgatttttgaaattcttttttctctacattcacaaaatatagcgacgtgtgttcatctaaaagggggttgattttggagcatcctgtcggctccacaagcggaaaaccacaccccgcttgtttttgcgcacaccgaagtactggccgaaaaccactttaaattgaaggaaaattcgagtttatgttcaaaacgtttgagactcgaaacttaagttctccttttcaatgcctatccactgtatctaagttcattgtgatatctctattcgttattttaaaaacgataattaaagttttgccaaaatttctgcatctcccaccttttctcacacacacacacacccccccccctttcatatttggtgtgttttcggccacattttcaccattgtttcgatcaaatctccgttagtcttgttttttttccaaatttttttttggaaaaatgttcatcacatcgagaggaagcggaaaatataattttttgtttcaaaaaaggtaaataatagtctcaaaaatagaaaaaatgaacacttctttcaaacaatttacatttttccatcaaattcacaaactttccactatcgttccggtttttatgttaaatttagaattaatagaatgatttaaaatgaaatctcaaatcacagctcgatccgatcatttttcgcagagatagggtatttaatttttgcacatggaaatccagttttcctctgttcctaaacaagttttcaactatccttttgattttatgttttaattttgataattttcactaaagaaaggtagacaatctaaatttggtcggtcttgacaactttcagcacatttgtggaagttttgagcttccaggccttcccagaaggtgatatgtttcaatttttgttatttttagaaataataaccgccgtattattgtactttttacgccaatttcaaaaattatttaatttttctcaaacttctactatgagcaaagttatgacggattgaagttttagtgcattactcctcacaggtcgcctctactcacaagaggctgcatgcgtgcgggtggctggaaaatgttttctttccaaaaaaaaacgtagaaaggcactttagcctaagaagaagttcactttgaacatatacttcaggcattgcaggccggaggcctgctgtgcgattacaactgttttaagcccagattggctggattaagtgccgcaggcactcttactcttagaagacgcagtcaaccttaaatcattataccaaggcagaccggaggcctaatatgcaattactcttagataagtttgatttagaaagcttttattattttcagttttctaaaacaatccccattcccgaagggctgcggggcccacaggcgttcacgattttccaaaaagtagatatgttattcactcgaaccaaccaggtttgagggccgcaggcccgaacactcttggaaactttgggctggctttgatcctattctaagcagatatgttatttactcaaacctaacaaccaggttcgagggccgcaggcccgaacactcttggaaactatgggctggctttgatcctattctaagcagatatgttattcactcaagcctaataaccaggtttgagggccgcaggcccaaatactcttgaaaactgtgggctggctttaatcctattcttagcagagtaggctgtaggcctgcgacgcggttgttatttactcaaacctaacaaccaggttcgagggccgcaggcccgaacactcttggaaactatgggctggctttgatcctattctaagcagatatgttattcactcaagcctaataaccaggttagagggccgcaggcccgaatactcttgaaaactgtgggctggctttaatcctattccaagcagagcaggccgtattcatgagttttccttttcattcaccgttttttgtagttcacagtgatgattgaaaacacgcttattttattgaatacattcaaattattcttgaacaaaatctcagcctaagttattcgtacagtgtcggtcctggagcaatgaatcaaataatttcaaaaataatttcaaagagatcgcgaataacccgttaacaggttcgaggcgaagccgagaacctgcgccagctaccttgctaataacttagagcgaattaaccctatccccattcccgaagggctggcgggcccataggcccgctagtccgtagttttctaaaaatgaattttaactttttacgtgtatttttctgaatttttcattttttaccttcaaaatgacgcccatcatgcttagattccgtcaattctgaaaatttgggtcccgtcactcggggtactgtagcactggcttcagctgtgtcgaaactcaaaatggccggaatatatggcaatctatcccatgctcacatttcccatgcacacatttcccatgctgacactttctcccgtgcatacaaaattcccatgcttacgcccagtagttggagtactcccatgcctacaattaatttttctcctttttttccgttcccatgctgacgttcccatacatacattttctcccgtgcatacaaaatattctgatgcttacatccagtagtcgaagtactcctgtgcctacaactcatttttcccttttttttcgttcccatgctgacattcccatacatacattttctcccgtgcatacaaaattcccatgcttacatccagtagtcgaacgtcttacttgacagctttcagttacaactgatcgctttttttttcaaaatgcattagttctcgattatgaacaatgaatcgaagaaaaatggggatgactgcctatagagtaaaatttttttttgctcaaaaaaaaatttttttttttaatttttttctctctatttcgtaggatataattaattcggtgaattccacaacttcaaatgttcatattgctgtttccgtgcagttatgagtttcgcagtgtcttaggaacattccattttttgttgcattttgtaggaattcggagctatcttataatttctacaaattagaaaatccatttcgcattatttcatgtaacttgaacctattgcttcaaaaatagcacagaacgaatgtttatttatacaaaatggtcccgtcattggtctcgccagcgctcaacaaatcaatgggatgcgcgtggcgagattattgcgcgaaaattcgcgcgcctttaaagtcgtagaagtgggaaaaaatgcacagtagcacattttttaatgaaagaaacagaatcaacattcgttctgtgctatttttgaagcaataggttcaagttacatgaaataatgcgaaatggattttctaatttgtagaaattataagatagctccgaattcctacaaaatgcaacaaaaaatggaatgttcctaagacactgcgaaactcataactgcacggaaacagcaatatgaacatttgaagttgtggaattcaccgaattaattatatcctacaaaatagagagaaaaaaattaaaaaaaaaaaatttttttttgagcaaaaaaaaattttactctataggcagtcatccccatttttcttcgattccttgttcataatcgagaactaatgcattttgaaaaaaaaagcgatcagttgtaactgaaagctgtcaagtaagcctaatacaatgaaaatgagcaaaaaaattgactttgtgctcttctggagcacaaaactgttccatgtcggcatgggaatacatttttgtaagtatgggaacaaatgtatgtatgggaatgtcagcataggaacgaaaaaaaatggaaaaaatgaggtgtatgcataggagtacttcgactactggatgtaagcatgggaattttgtatgcaccggaaaaaatgtatgtatgagaatgtcagcatgggaacggaaaaaagggaaaaaatgagttgtaggcatgggagtactcgaactactgggcgtagcatgggaatattttgtatgcacgggagagtgtcagcatgggaaatgtgtgcatgggaaatgtgagcatgggatagattgccggaatatatgcatgttgggtgttattttgaagctaaaaacaagtagaacttgattttcacaaagaaaataatttttctctaaccctgcatctctctcccgtcccgtccttatcttcatatacggcaaaccattcgacccgccgctgttgccgtttagcgcaggcgggagtggcacgggttggggttctaaaggccgctggttcgtgccccgaccagttaaaaagtcaatgatgttttttcaagacgggaccgactggtgaatgatgcataaatgaaatgctgagacttttttttgcattaaaaaaagtttttttggactaaaattttatcgatttctttttgtataaagtttttttttaggctaaacctgctgacaccgaaattgtggcccgcttcgtcaacgatgatttgttggcagagtgccaaaaattcccagatcggcttgtgccgcttggcaccctgccaatgaatgatgtgcagagagctgtagaagtaagtagtagatttttgataatttattgatttttagagcagaaaaaagttttgaaacatttcgaaaaaaaaatgtttttttgggtaatttttcaaaaatgaagtttcatcaattatatcaggttgtcccataagtttttgtactattttttttttgaaaaaaatttatttctctcaagcgacaagtagtactattcacacaagtattcaccattagaccacttgttgccatttactaggtaacatcatgatgccacgggagaagaaatccggcgaacgcgatgagaagaaagtggagagttcagttttgagatgctcttcgtcgtcgaattgcttgtcgcgcatgtagtcactgagagacaagaacaaatggtagtcggttggtgcaagatctggagaatatggtggatgcggtaaaacagtccaaccaagatcttgcagcttttggaaagtcttcttggcgacatgaggcctagcattatcgtgaagaaaatatagtttttcatattttccgttggtcttttctgcaactcggtccaattgggcacaatagtaatcagcagtgatagttttattagttggcaacaattcccagtgcacgggtccttgaacgccccaccagacacagatcataatcttttttgggtgaagatcaggctttggcgtcggtattcctttctcaccgatcggaagccattgacgttttctggaatggttaacatagagcacccacttctcatctccagtaaccagattgttcagccaatcgaactttcgacgaaaagttagaagttgagtacaaacgttgacccgagtgagcttctgtgatgccgaaagttcatgaggcacccaagttccaagttttgaagtaaaaccaaggcgacccaagtgacgtgcaattgtgctatgacaacactcaagcttctcttccatttcacgaagactaagacgaggctcttcctccaccagcttcactaggtcttcttcatttaactctaccggtcgcccagaacgttctatttcttcgagactgaagtcgccgttcttgaacttttgaaaccaactctttgctgtattataagagagtgctccctcacctatcgcaccgcatatgtttcgttccgcttccattgctgaatgaccaagacgaaattcataaagaagaagcaatctaacgtctcgacgttcaagtttgatgattgtcatcgtggcaaagtagaaatggatgaaatgaatcttttctgaaaggggacgacccgaccttgacacgacctacgatgaaaaaattttaaaactttctagaagttttggaaaaatatttgaaaaaaagtacaaaaacttatgggacaacctgataacttcaatttttagttctcctcatttttagctttgaaacaacacccatcatgcctaggttcgggcgatttagaattttttgggtcccgccactcggggtactgtagcactggcctcagctgtgtcgacactcgaattgcacggaatatgggcatgatgggtgtcatttgaaagctaagaacatggtgaaactaattttcgcaaagaaaactaacgaaaatcaatatttaaaaaaattcaaaaaaaaaagtttgaaaaaaaatccttaaattcttgcaaattttttttaacttttgtaaactgtcgtaaataaatatagattttgatttcagctagtcatgagcttttaattgacccccatcaagcctagattccgtcaattttgaaagtttgggtcccgccacgcggggtactgtagcactggcttcagctgtgtcgacactcgaattgcacggaatatgagcatgatgggtgtcatttgaaagctaagaacatggtgaaactgattttcgcaaggaaaactaacgaaaatcaatatttaaaaaaattcaaaaaaaaaagtttgaacaaaaatccttaaattcttgcaaatttttttaacttttgtaaactgtcgtaaataaatataatttttgattttaactagtcatgagctttcaaatgacccccatcaagcctccattccgtcaattttgaaagtttgggtcctgccacgcggggtactgtagcactggcctcagctgtgtcgacactcgaattgcacggaatatgggcattatgggtgtcatttgaaagctaagaacatggtgaaactgattttcgcaaagaaaactaacgaaaatcaatattttaaaaaaattttaaaagtttgaaaaaaaatccttaaattcttgcaaatttttttttaacttttgtaagctgtagtaaataaatataatttttgattttaactagtcatgagctttcaaatgacccccatcaagcctagattccattaattttgagagtgtgggtcccgctacgcggggtattgtagcaccggcttcagctgtgtcgacactcaaacttttgttaaaaatgttattcccagaacaaattatcataaatattatatttattatacattcgttgactagaaaaaataaaatttcgaaaaaaaactgagaaaattctgagcaaagttcaaaaagtgggcgtggtccaaataaatagtattattgatttttaacacaaaagtgttaccaaaatcccgttgtaaaatcaaaaatcaatattttatcaaaaaattaagagcggaaagtgaaaatcgataattttcgaggaaaatattttttttggaaaaaaaaattttttccaaaaaaattgtttcttgaaaattctcaaaaaacccgttcattaaaaaatcaataaattaatcaataaagaggtcattaatagccccgtagatagtgttgccagtaggcaatattgaagagtacgaacaggaaggggaacatgaaaacggacaccgaatcgattttgtgagcaagtatttcgcggcgttgttttctgaaaaattggatatttattgattattaattgataatacgagaaaatatcgatttttgagaaaaaaatttttcaaaatttttttcaatttcaaaaaaatcgataatattgatttttccaaacttaccgtgataaagaagatgacgtggatgtgggtattgtctctgcttcgtctagcatcaaattgacaacatttgtgggctcacaggagcatctgaaaaaatttgaaattttggaaaaaaaattttgttggttttttttttcaattctcaattaaacccattttcagtacaaaattcgtattcagcacgtttagaacttcaaaatgacccccatcatgcctagattccgtcaatgttcgaaaatttgggtctcgccacgcggggtactgtagcaccagtttcagctgtgtcggagttgaaattggcacctaggcatgttgggtgtcattttgaagctaagagggtaacaaaatcaaattctgtatttgtttctgacaaaaatcgataatttctcaaattctaataaatttcaaaaattgaaacttggaaagaatagtattagatttatttgtcttatttttgatttttcaggattttagaacaaaaattcgaatttagcaagtcgatagctttcaaatgacccccatcatgcctatattccgtcactttttgaaaatttgggtcccgccacgctgggtactgtagcaccagtttcagctgtgtcggaatcgaaaatcggtggaacctagtcatgatgggttttattttgaagctgagtgcacggcaaaatcgaattttgtattaatttttaacgaaaaactataatttctcaatttctaataaatttataaaattgaaactgaaaaaaaaagttttggatttatttttattatttttgatttttcaggattttaaagcaaaaatttgaattcagcatgtccgtagctttcaaatgacctccatcatgtctagattccgtcaattttcgaaaatttgggtctcgccacgcggggtactgtcgcaccagtttcagctgtgtcgaaactcaaagtcgtcgaaaactaggcttgttgggggtcattttgaagctgagagcataacaaaatcgaattctgtattagtttctggcaaaatacagtgctttttaaatttttaataaatttccattttcaaaaattgaaattttaaaaagtattaaaaaaaatttcttttgaattttttaaattttttgaaaatcaaactcacgaagaactgaaactcttcatagcatttgccacattgccattaagcccaaatcccggtggaatatacccataatcattgtcccgcaagctcaaaagagcactctcctcctcatttttcggctgcttctgcctccggtgcaccgatgagttgttggcattctgttgtactggcggtggatgacaaggttttggagccacctgagccgatggttggagacattttgcgcttgttggctcctcttcccgggagaggtagccgacccaggcgagttctagcagggagcagaacacaaatgtcatgcaggacagcatccatacatcgatagcctaaaattgatttgagatttaaaaagagtacataatttggagcagtttatcagttgacaaaatttttatagctttgaatataaaaaagttacaagaggaagagatttttttttagaattttaactttaaactcaaatatctaaaaaactagcagaattaaaaaaaaattgtcaactaacaaattgtagcccttgaaattctaaacattttagtaatttaaagttttttgctagctgatttacccgcgaagttatgcgcgttcaaagtttcccacagactatggtgtgtcggcgcctgcgtctctcctccgagagagcgcgtgcgcaaactttaaaagcgcataactctgcggggagtcgccgtattgaaaatttttgaactgatgaaatattcaaaattttaagggctacaaatttgcagttgaaaattttttgataactcccacgaatttctagataaactcacttttacataagaaaccctcggcagattcctgataatgttaccaaactggaaagtcattgcaagtaagctgttaactcccaacatggtacgtgccggaatagctttggagccaagtgcgaaggaaatccaggctgaaaaaattttttaaaaaatttggaaaaaaaatcgggaaaatttttttttggaaacttttttcaattttttttcgcaatttactgcttaaattgagccctataatattgaattttgctggaaaaatttttattgctcaatttccttacatttaggcttttcgttgtgagaataacactcaaattggcaccattattagcttcgttttgaaatttcttatttgttctaatgagtttgtacgtggaagtacgtgcaaaactttaattagaaaaattgaactatactgagtttttaaaaattcaaaaaaaaggttttaaaatttcaaaaaaaattttttttgaattttttattttttcgtaaattttcttaaatatctatttttattagttttcattacgaaatatgaattttctacgtttttagctttaaaatgacccccatcatgcctaggtttggagcacctttgcttccggcacagctgacgccagtgctccagtaccccgcgtggcgagaccctaattttctaaaattgacggaatctaggcatgatggggatcattcaaaagttcatgaaaagttgaattcaaatattatgctcatttactcaaaattttcaaaactaaaaaaaaattgcaagaatttcatgaaatttttttttccataaaaaaagttttcgaattttctcaaaagttgattttcgttagttttcattgcgaaaattaagtttttaacgttttcagctttcgaatgaccccccatcatgcctaggtttggagcaccttttctcccggcacagctgacgccagtgctacagtaccccgcgtagcgagacccaaattttcaaagtttacggagtataggcatgatggtggtcatttgaaagctcatgaagagcttaaatcaaatattatattcatttatcgacatttttgagattgaaaaaaaattagcaagaatttcaaaatttttgttcaaaaaaaaattttttttttggatttttttgtttttgtttccaaaaaaacttacatatacaaatagttagatacgtaggtaaatacgcctgcaaaatataccatcccgctcgtcttttgaactcgaatgacattgtcagctcgtgccagtacccagcgggatattcctggaattttttccattttttgagtggaagtagatcaaaaacttaactgttatgcattttatcataaaattcacaattagttgaatatttttcaacaaaaatttgctaaaaaatcttaaaaattgacaaagttaggatgttttgaaagttttgaaatttaaaattttttccaaaaaaaaaaaatttttcaaatatttaaaaaaaactcccctgaactcaaattttctgaaattttcagtttttatatcaatttctcacctccgttgttcgtattttgtgtatatccaccagctcatagtccgctaattccattttatccctcattttctggaccccgttcaccgaccagtccatcttcacctcgtctgtattgtagctgaaaattagggaaattttggctggaatagtgtaaatatttgggttcttgaatttacgttaaaagtaaaaaaaaaactttcgaaaaaaaaaaaatttttgaatttttttcaaaaaatttctgaaattttttatctagtttttttttgcagtttttaatttataaatttgcatttttcagtttactagtttcaaaataacccccatcatgcctagaatccattaactttgaaaatttgggtctcgccacgctgggtactgtagcaccaacttcagctgtgtcgataatcaaaatcaagggaatataggcaagacgggtgttatttggaagcccagaacgtgaaaaactcgatttataagataggaactgtagaaaatgaagtctaatttttttttgggaatttagaaaatttaccaaaattttttttttgattttttgaattaaaatcaagaaacttacttaaaactttcaaaagtcagcgaacacgtcacattgtcaaatggaaacttcgtcagatccataatacatggcccttgaagtttcagacggtagtttgtccaaactgaaaaaaccaatttagaaattcagaaaaaaattaaattctttaaaaaaaaaataaattcttttttaatttctcaatattacaagtaataaattcactttttagagttcaccagcttcaaaatgacccccatattgcctatattacgtcaactttgatagtttgggtctcgccacgcggggtactgtagcaccagtttcagctgtgtcgaaaattaggacatcaccggttttgctccatttgtccgatattttgagtttttcttatgaaatcatctccaatttcgtttatttttattctcgacacagctgaaaccggtgctacagtaccccccgtggcgagacccaaaatttcaaaaacgacggaatataggcttgtagggggtcaattgaaaggtcacaacgtgctgaaatcaaatttgttaatgcaatttttttttcggcaagttttggcttaaaatgtatgtaactacagtacccacagagaacttcgtggtgggacccaacattttttaaatttaatttttttgttgtaaacccccgatattttcaatctaaattgtgcgttctccttctccttctttttttttagttttccaatctaaactcatcacgcaaatgttccgcgagcatctttttttactgcgccgcaattttctcgagatagcctttaaatcgtgactttttcacgataaaccaatgaattattccggttgggggaagagattaagtctatagatttggaaaaaaaagaaaaaaaaaagaattttaattgttttagagaggattttcgaaaaaaaaatagaaaataaaatttatccttaaaaaaaaatttttcttttgaactttttcaagtttacagatttttccataattttttgtgtaatatttaaataaataatcacaaaatttttaaaaaatttaaaaatccctaaaagtcctaaatgtacagtaatccaagactttttttttctgacaaggctcaaaattttttttttaatttttgacacattttcaaaaattcataactttttcaattttagagatttttccatatttttttgtgtactatttgggttaataaatataaaatttaaaaaaaaattaccaaaaactctgaacgtcctaaatgtaccgtaacacaaggctttttctcacgagctcaaaattttgaattttttttcaaattttcaaaaattcataactttttaaattttagatatttttccctaattttttgtgtaatactttaataaacaattcataatttttttaaaacataccaaaatctttaaaacattaaatctacagtagctgaagactttttctgacagggatcaaaaaaaaattcaaatattttttttttcaaattttcaaaaattcataactttttcaattttacatattgtttcataattttttgtgtaatagtttgataaataaatataaaactttagaaaaatatcaaaaactctaaaagacaaaaaatttcggaatttttttaaaaattttttttttaactttgaaaactttttttaaatcttcgtgtttcaaatttcaaactattttttaatatttatagtacatttgcaatacattttacgccttgaaaccacgttttcaccaagtttgattcaattttcaattttccagtggccaaatttccaactaaactctttccctcagtgaaaaaagtgttttttcggaaacttttcccggaaaacgtgacaaaaaaatttcaaacaattttgtgtccccaaaaactatcaaatttgcatgtttcccagccgccgtggcccaatagtgaaaataaacaggaactattggggggacccgcgcgcgcgggccccgtaatcgaattgtccggttttggggtcatgtgggacccccgaagctagcggatttttggtttttatagtgatgtcagtttcttagagtacaacacattttactggtctggcgaaaaatttgaaaaaaaactcgaataaaatttttttctcaaaaattgggtaccgtcgggaaaagtcatggggtacggattttttagaatttttctcacatgttcttaacatcatcatttgaacaaggtttaaacacaaattttaattttaaaattaggaagaaatctcaaaaattggcaaagttacaaggttttgaaaataaattttaaaaactcagatattttttttctcaaaaattgggtcccgtcgggataagtcatgggaaacaaagtttttgaaattttttaaacattttgttaaaattattatattgacaaattttgagcacatattttaaaacaaaaatgggcaaaaaatcttgaaaactgacaaagttacgaggtttggaaaatttcagaaaaatttttttaaaatttattttgaaattttggatctcgtcaggaaaagtcatgggaaacggatttcttgaaattttttgtacattttgttaaaattttcatattaatatgtttccaacacacattttaatacaaaaatgagcaaaagatcttgaaaattgaaaaaagttacgaggttttgaaattggaaaaaaatttaaaaaaaaaatttttttgaaaatttgggtcccgtcaggaaaagtcttggggtacggtttttgtgatttttcacaaattgctactttgttaactttgataaggttttttcacacaattcaaggtaaaaatgatgaaattttctcaaaaactgacaaagttacgagattctgaaaatcacttaaattgttttggaaaaaattttttggatctcgccaggaaaaggcttgggaaacggagtttttgaatttttcaaacattttcgttttaatcatcatattaataaggttttaacacacattttaaaataaaaattagcaaaaaatcttaaaaactgacaaagttacgagattctgaaattcactgaaattttttttggaaatttttgagtccgggcaggaaaagtcatgggaaacggagtttttgaattgttaagtttttgcgttttaattatcatattaataaggctctaacacacatttgaaaataaaaatcagcaaaaactcgaacattgacaaagttatgaggttttgaaatttttggtccaaatttttattaataaatttttttttcaacgcagtattttttcgccatttccaatttaatccccacatttttcggaacggcctggtgatttatagtcagaagctattgatccctccaaaaaaaagagcaaaaagagcccccgaaaagtgcagcggcacaaaacttttttcaccccacttttttactgggggtcctctaagacaccactaaaatctttgctttttgcacaccatttttatctattcgccagctcccttgggggctccgtgagccgtcttgctagagtactataaagctcacggagagcaggaattgaaaaaaaatttggagaaaaaaattaattttaattttcgaactcagcaacgcattagctttcaaataacacccatcatgcctacactccgtccaattcaaaagtttgagtacaccgacacagctgaaaccggtgctacagtaccccgcgtggcgagacccaaaatttcgaaaatcatcagaacctaggcatatgggtgttgttttgaaggtctcgacacgataaaatgagtaaaacaaatgttgaaatttaaaattcaagttcattcggaacatttcagatttttccaccctaaaaaattcgaaaaaaaaacattttccaaaaaaaaatttttttttgaatttttaaattttcaaattttcaaaaattcataacttaatcaatttttgtgcaaaatttgaaattattagcttaaattgtgcgcaaaatattattttaaatgaataaatttgaaaatcttatcaaaattctatttaaaacaacggaaccccgtaaattttcgtggcggggattcaaaaattcaaaaaaaaaattttttttaaagaattttcaaaaattcataattttatcaatataagggctattttgttcacttttaacttaaatgtgcataaatatttcagcttcaattttaaaatgcaaaaaattttaaaaacttccataatcaaggtaccacaggacttttcgtgacgggacccaaaaatttcaaaaaataatttttttcaaaaattttcaaatctccaaaaaaatgacttaccagttccattcgcataaatcatcagaaaaatattgggaaacggagatttgtgaatatcggcggttttcgagttgatgaagcacgaattcggcgtccagagcttctccaggagtaccgagttcagggataaattgtacttacaggggttcataaacgcgtagtttagtgctggatcataccaggtttcgtatatgtagatgtcaagctggaaatttgaatttttcgagaaaaatttttttttgaaaaaaaaattttttttcaaaattttcaaaaatattaaaatttttcaattacctgaaaatccgatgtgatatccgaaattgtcgtaatttcttgcacccatacttctacctcaacgtctacctggaacattatcgattttttaaaaataaaaaaaaattgaaatttttttttccgaaatcttccaattttctggattttcagtgagttgtgtgattggagactagaaaatatgaatttaacgcaaaatttttaaaattttggcacccatattgactatgttccgacaattttcaaattttgggccgaaataggccgaattgggcttaatttaggccatatatgagttggaactgataattcctaattttcaaaatttattcaaaggtttctttggcttgataccgatattagctatttttcgaaaattttttgagtttcgggccaaatcgggccgaaatagcctgaacaacggccttttccaagttgaattccaacaaccctttaattctcaagttctgcacatgatttctaaaaaattgaagcttatactgattgtttcccgaaaaatagggattttgggccgaaataggccgaactgggccgatttgagtttaaattcagctcttatgggccttaaccatttttcaagctatttttttttagtttttcaaatttttttccaaacatttgacgcccatattggttaaactttaaaaatttctagtttcggccgaattcgggccatttcaagcctaaaattcaattttctgcaaatatagtcaatatggggctcaaatcaacgggaatttcacgaaaaattcaaatttttaactcccaaagccgaaaaattgttagttttctgcctacctggcctcctggaattttgtgcctattgtagttgctcataattgtccccagtatgaacgagtcgttggcgcaattttttgtggctctttccacctaaaatttgaatttcattaaattggaaaaaattagaaaaatatttcaaaattttttttttcgaaatttcaaaaattatccaaaatcttacctttgccggattaataatcggcttgagcccaccgtgctcatcaacttcccagtcataatttcttgtgagcctccggagacttggagagtttcttcgatatactgattttctgaaaaataattttttttttgtaatttttttttcgaaaaaccggaatttttccctcaaaacttgaactaaaacgactgttcttattttatccatattcagcgtgttgagagctttcgaatgacctccaacatgcctatattccgtccaatttgaaattttgaatagcccgacacagctgaaactggtgctacagtaccccgcgtggtgagacccaaaattttaaaattggccgaacataggcatgatggaggtcatttcgaagcagaattttacggagaatctgaatttttaggtttgaaaatctaaaatttcgatattaagtctgaaattgcaaaatttcagtcaaaaattaaaaaaaattgttttttattaaatttttttcaaatttgatttaaatttctctacaaacctggcgtgacacataagtaacagaacgacaagcgataggaattgcagatattgcattgatgcatccgtgtcgccccgcccctttcttgccacgtggattttgtggagggaaaagctgaaaaagctgaaagtttggccgctcaacagggggtttttgtagggaaaaatgcgaaaattcaaggaaaattgaaaaatggagctaaattgggataaaaattggatttttgaaattttgaagaaaaaacaacttttttaggaaaatttcaaagaaaatttttttgaaaattaaaaaaaaaaaagttttttaaaaatttttttccctctggattttcagtattaaatgctgatactgttaaaatttataaaaaccatgttagacaccctaaaaatccaaaaaaaagttttttggaatttttggaaattttcaaaaaatttttttttttttgtggatttttagtgttaaataaaaatattgatcaaatttaaaaaaaaaccataataaaccctaaaaccctaaaacccgacaaaaaatacaaaaaaaaccaagaaaaaaatttttgggctcaaaagttttagttcaaaaaaaaatcggaaaaaacaatattttttggccaaaatcctaaattcaagcgctaattatccaacaaatttttttttccaaaaaacacagtaaaaaattatttttcaaccaaaatttccaatttaagccctaaaaagtttttttgggctcaaaaattttagtccaaaaaaaatcggaatttttttttgaaccaaaatcctaaatttaagccctaaaatatgtagcaaaaaatatttaggcaacgaaaaaaaaattctgaaaaaaaaatccgaaatttttaattattttttagggccaaacttttgtaatatagtaacgggaagcgatagatagatgggtgaaaaaatggtggtggagggggagaataaggaaaaagcaaaaggaaaagcaaaaaatttcgggctcctcctccccctccccccccctaacatagggctccgcgtccgtttgactccggccaaggggagggggggagacgtcttcgtacgtctcctcctctcaatttaacatcttcttcgtctaactatttcgaaaaagaaaacgaagaagaagaagtcttcttcttctttttcttcgtatttttcttagtagtcgtcgtagtgtgtcctcctccccccctcccgctcgccttgcctcggcttcttccttttccaccaatacttttttcgttaaaacgaagaaaaacgacgcggcggggcggatgagcagctgctctggcagatgagatgggagggatggcctagaaattctgggttttcctcggccacggtgattttcaagggaagatgtcgtcgatgcaccatgaactactattcaaactggtggcctagaaacccgggtttcctcggccacgggttttttgtttttttaccggataatgggagtcgatgcactataacatactattcaggctggtggcctttggaattggtggcctagaatactggttacctcggccatggcaatcaccaagagatagggtcgatgcaccatagccaactatttttcaaattggtggcctagaaaccctgggttttcctcggccacggtgcttatcagaattgagattgggtgagggtgtcgatgcaccatgccctaaaattgaaattggtgacctagaaacccggtgttttctcggccacgacgtttttttttatttaggggatccaatgcaccatgacttacaattcaggttggtggcctagaagctcggtttcctcggccacggcacttttcaaaaaaggtttacactgtgctactgggtcccaccacgaaaaagcttggcgtactgtagtacaatttttttttttcaatttttcaactcattctcaaaaaaccggatacttaaccaacatttcaagctaaaaattttaacaaaaactcaatttctgaaaaaaaattgatttcttgaaaaaaaaaatctgaaaattggaattttcagctggtaaagtcttggtcttggggtagcttttatgtcgccatgttttataatagttttttttctggaaaaccgaaattttcacctatattttaagctaaaattcaccgaaaaaacttggttttgaaagaaattatgaaattttcaaattttcaaaaaaaaaaatttttcgaaaaaattttttttgccaaaattttcaaattttggtaatttcttgggaaaaagtgttccaaaataaaattttaggcaaaattcatttttttttaaacatatttttacattcattttcatattgaaccagtaataaatccagaacttttcaacaaataaaagttccaaaatttttatttaaatttttttgaatttttctacaaaaaaacgtcactttcaattagcaatgcaaacgtgctctattaaacttttcaccaaaaaattcaaaaattcagggggaaaatcctggtgtgaataatttcacagaaagtggaaaaaaaaattccaaaaaaattttcgaaattttttttccctttttcccacggtttctatggcaactttgggaattttatgatgaaaaataaaaaaagaaaataaaaaaatgaaaagattaagaaaaagagcacatgaatcttataatgattggttgtgctcccggctccccggccaaaagggggaggggcgtgagcaggaagttttctaggcggagagcacaaaaaagagcacattttatttgtttgaagtgtaggccaagagccaggagcacctaaacttcaattgaatttgaacggcctttagattgaacttggaagaaattgcgggaaaattgtaaaaaaatgttgttcgggaaaattggggtcccgccacgaaaagtcaaaatgacaagatatttttgcgtattacaaaaaaagaatcaccaaaaaatcttcaaaacaaacaaagttacacaattttgaagtttttggaaagaactttttttttttggaaatttggagtcccgctacgaaaagtcctggggtactgtagtttttgaattttcagtttttatgttttttaaatcaagttaacaggatatttttgcatatttcaaaaaaaaaatcaccaaaaaatcttaaaaaccaacaaagttacaaaattttaaagttttcagatttttggaaaaagaatttttttttttgaaatttggagtcccgccaagaaaagtcctgaggtactgtaattgcaggttttttagttttacttacattttatcaaattaacacggtgtttttgcatatgtgaagcaaaaaatcatctgaaaatcttaaaaactaacaaagttacaaaattttgaaatttttaggttttcggaaaaaaattatgaaaaaaaaatattttcagaattttgatagttcaattactgaaaactgatactttgtaaattttcaatttataagtttttcaaaaaaaaattattttatagaaaagttctgaattaactttgtaatacgatactaaaccaacaataaaaaatttttttgttaaatgtttttttcaaatttttttaaattttaaaactctcaataaggcttaaattttgagcttatgcttggcctaaaataatttttaaaaaacacaaaaattgaaaactacagtaccccaggttttcgtggcgggactccaaacttcaaaaaaaatttttttttccaaatttcaaaaaaaaaattcaaatctttgtaactttcttagttttcaagatttttaggtgattttttgcttgaaatatggaaaaatattttgtcaatttattgaaaaattaaatacaaactgaaaaaatcggaactgtagttccccaggacttttcgtggcgggactaaaatatcgcaaaaaattttttttttcaaatgttcaaaacctcataacttggcaaattttaaagatttttagctaaattttagcttaaaataagcctaaaataatgagctaaaaattaaaattatcaaaaagttttattcgttgaaaatctaccaaaaagtataattcttcgtggcaagacctaaaaaaaatttttttttcaaaaaattccaatttttcaggaagtcaaaagatgcgtctcaatgggtataaaaggatttgaagttggttcccacgtggcagaaaaatcgttggatcatcgtgatttttggccgctttataaggttagtcgacagcaaaaaaaaagtacgaaaatcaaaaattctgcgtcgccgcctccgggaaaaatgcgcggtttgtagggcaagaaggggcggagcctatcatttattcatcgtttgacgcacattttatatacccgccgctgagcttttttacccggggatatagtttggaaaattagaaatttagagggggaaaaatgggaaattgtggaaattgtttttctcaattttgagatttttgaattttaaataaaaaaattgaattcagctcaccgagagcttcaaattaagtaccatcatgcctgggttctgtgaatttttcgaaaattggggtctcacaacgaaaactccaggggtactgtacctacaatataaaattaagttttcacattttttatgattttttatgatgcactgaaatttttctaaattttatgactaaattgagatccaagccgctaaaactgacagagttattgaatttcgaaaaattgcgaataatttttttttcaaaactacagtatttttctttctttctgtgcatatcgtggcgagacccacaaatctatcttgtttgaattcagctcaccgagagcttcaatttgagtaccatcatgcctaggttctatagatttttgaaatttttgggtctcgccacgaaatcaatccggttactgtacctgcagaagctgacctagatttgacatttttacagtgttaaaacacagattctgtatgacttcctacaaaatttgtttggaaatctctaaaactcacaaagttatcgattttcgaaaattttcgaattatttttatctcaaaaaatttcaaagctacagtaattctgtgaattttgtggcgaaacccacaaaactatgttttctgaattcagctcgccgagtcagctcgctaagtaccatcatgcctgggttccgtgaatttttcgaaaatcggggtctcaccacgaaaaaccccggggtactgtacctacagtagccaactggagtataacatttttaagatacagaaatataattttcctacattgtaaaacaaaatttgtttggaaatctctaaaattggcaaagttatcgattttcgaaaattttcgaattaattttttttaaattgaaactacagtggcatagcgaattccgttgcgagacccacaaaaatatgttgtatgaaatcagctcactgagagcttcaatttaagtaccatcatgcctgggttccgtgaatttttcgaaaatcggggtctcgccacgaaaaaccccaggagtactgtacctacagtagccagctggagcataacatttttaagatacagaaatataattttcctacattgtaaaacaaaattcattcaaaaatcttaaaaactgacggagttatagattttcgaaaattttcgaatttctcaaaaattcaaagctacagtaattttgtgaatttcgtggcgagaccctcaaaacttagataaatgaattcagctcatcgagagctttaatttaagtaccaccatgcctaggttacgtcgaattttaattttctgggtctcgccacgcggggtactgtagctctagtttcagctgtgtcgaagctagaaaattcaaaatcgcctgattatagtcatgatgggtgtcatttgaaagctctcggcgagacgaatccagctaaaatattttcaaatcaaaaaaaatcaaaaatctagttttcagatttgcgaggagctctcggtggtgctctttgtgcatccttgggatatgcacatgtgggacgggcggctggacaaatactggatgccatggctcgtcggaatgccatctgaaactgctcaagccatttgctcagtgctcatgggcaacattttggtgctcttccccaagttgaagctctgctttgcacatgggggcggcgcctacccacagattcgtggccgagtttctcacggatggaatgttaggccagacttgtgtgctggaaagtgtaaagttgctccgaataagctcgatgggctactgtggacggatagcttggttcatgacccaaaagctctcgaactgctgataaataccgttggaaaggtgtgcaattttgattttagagagttctagatagaaaattcgaattccccgcgtcgtcagctttcaaatgacgcccatcatgactatgctacgttcattttgaattttcctgtttcgacacagctgaaactggtgctacagtaccccgcgtggcgacacccaaaattcacaaaatttcgaaaacctaggcaagatgggtgtcaaatgaaaggtgttaatgtgctgaattcaaaaattcaaattttttgggtcctgccacgaatttgcagaagctgaggcaagttttcgtggcgagacccaagaaatattgcgaaatctgtcaaacttgacgaaaactagttgatatggggcttattttgaagctcttgacttgctcaattcaaattttaacttgaaatcaagaaatttgtggtctcgaagcgacaattttcgaaaaaaacttgacattcgcgagaaatccgtcaattttcatcattttttctcaatttttcaggagcatatagtgcttggcaccgactacccatttccgcttggcgagcttgaagttggaagagttgtggaagagtataagccattttctgccaaggacagggaggatttgctgtggaaaaacgctgtaaaaatgctggatatcgatgaaaacttgctttttaataaggatttttgatcattttttggtttttattgatttttattgggacatgttgggtttttattggtttttaataaagaatttagactttttgttcgaaaaacgatgttttcacattcaaatacccgccgaaaacgagaaatgcgcaagagtggggttgctggcgcaatactcgattttgctgacgcgtttctcgtctttttgaaaatacattttatttcatcgattttcgccggattttcgccggtttttcttgatttttcttgattttttgccatttttcagtcaaatttcatcgtttttctcgattttcttgccaatttccagcattttcagtgaaaaaatagcggaaaaatggaggaagagctcgcctcttacaaacttcagctccagcaggtcgaggcggctttgctcggcgatccgacgaatgtggagcttctcaagttgaaggaagacctcggggagattatttcgctgcaggtagtgtgaaaaaaagcggagaaaatgcaaaattttcgaaaaaaaatcaataaaaactgatttttttccaattttcaggaagatttggcggaaaccgacaaggcagaatcatcagagagggctgtggtggctccgcaagtgattcacaagtggacggtacggattttcagcgaaaaaaccccgattttcgccaatttttcagctaaaaatcgatttttcaggtcggcgaacgagttatcgccccacatcccgacggaaaaaaggttttcgccagaatcgactcacttacgcccgccggagtggctattaccttcacatgtagggggattttatcgatttttagcccaaaaatcgtgaattttcaccaaaaattcgtattttttcagctaccggcacgaaaaccatcgtagatcccgctgatctccaactcccgcccgaaaatcagcgaaaaaattatgcatttgataacacaaagtcggcggccggaccatcgactcaacacggcaaaaaggttggaaaaaatggaaaaaattccttgttcttctgtaaaaaaccagaaaaaccccgtttttgcaatatttttgagctaaaaatcgcaaaaatcaccaaaaattgacactttttcagcttttatcgactattttctgcaggaatttctagaaattgacgtttttccggataaaacggcttttttcgtgaaattttcatcgattttttggactttccggggtactgtagctccaaaagtacgcaaacaccacaagtcttacggcaaaatgcagaaatcttgatttttcacatttaaagtgatttttctcaaattttcagttggaaatcgagtttctcactcatttttacccctggaaatcggttttttgcacaaaatagattggtggcctaacttttgggatttctaggccaccaatctgaaaatgatggttttaagccattttcatcgattttttttggatttttatgtcaaatatagacgataaaaacgattttaaactgaaaatcgcaaaatttctagtttaaatctctagaaaatcccaaaaatcgatatttccgtgactcatgtgcttctactcggattgatggcataaaaactgtttttatttacattttcagtcttaaattggctgaaaatgtaggtaaataccgtatttctgccaacaatttgacaataaagcacatttgtcactcggagatgcggaagctatgcccaaatttttaattttaccgaaaaactcgtaattttcacagatattcagcccaaatatcgacttttccatcactttttacccccgtagcccgtttttcagccaatttatgcaaattttcgtaaaattcggtgcctaggcggtgtttgcgtactttggcgctaccgtaaccctcgaaattcaaattttgagctataggccctgacaaaggtccatttggggtaaaattaagcggagaatttgaattttagcatgaaaattgctggaaattgctgaaaaattcaaaaaaaaaatcaaattttttcaaatttccaggaatggcaagcagaaaaggagcgccgacgtcaaaaagcgctcaaaaaacagcaaaaacagaaggagctcgactcgataaaggatggcgagaagaaaagttggcaaaaattcaacacaaaagccaacgcgaaaggtctgaagggcctgaagaaggtttcggcgacaggatcaagccaggatggctcggcgagcagcagcggcggcggcggagagaagcgaggaacgatcgtctcgtcgagaagctctcagttcatttttaaagccacccgtggagctatggattcacttttttgagctctcttgtatatccgattttactgtactttttttgtgttcttgatataataaaaactcgattttttcccggaaattgtgaaaaaatgccaaaaaacactttttttcggacatggtggatcgtttcaggtgtcgggggatatggtcgggtactgtaggagtacggtaggattactgtagtttgggaaaagttggcttttttgtcttttgaacggacattggtttagggttagtggggggatatggtcggcgtactgtaggggtactgtagtagtactgtaggagtactgtaggggtactgtagtagtgctgtagaggtactgtagtagtactgtagttagggataacttgactttttgtcatttgaggggatatggtcggggtactgtaggggtactgtaggattactgtagtttgggaaaattgacttttcgtcttttgaagggatattggtttgaggttagtggggggatatggccggggtactgtaggggtactgtaggaatactgtagttttggaaaaaagtgttttcgtctttcgaggggatatggtcggggtactgtagtagtactgtagtggtactgtagtttgggaaaaattgacttttcaagggatattggtttggggttagtggggggataaggtcggggtaatgtaggattactgtagtttttgaaaaaactgactttttgtcatttgagggatattggtttggggttagtcgagggatatggtcggggtactgtagtagtactgtaggggtactgtaggagtactgtaggggtactgtagtagtgctgtagtagtactgtaggggttctgtaggggtactgtagttttggaaaaggtaggataactgtggtttgagaaaaattgactttttcgacttttgaacggatattggttcagggttagtgggggggatatggtcggggtgctgtaggagtactgtaggattactgtagtttaggtgcattgaagaaaggtctcgaaaggttttttttttcaaatttccgaaaattttggaaaattttgaaaaaaaaaacatcaatgtttaaggaaaaataatttttgaattttgaaaactgttaaaatttgagcgtaggtgcaaattttgagcttcaatgcaccatgaccgcgccaaaacccggcggtggcctagtttttgcagttcggccaccgcgggggtggaccaaaggaaaattttttgcgagttaaaaatcagaaaaaaaaatcaatagtagtactgtaggggtacgctaggagtactgtaggaatacggtaagattactttagttttggaaaaattgtcttttcgtcttttgaagggatattggtttggggttagtggagggatatggtcggggtactgtaggggtacggtaggattactgtagttttggaaaaattgtcttttcgtcttttgaagggacattggtttggggttagtggagggatatggtcggggtactgtaggggtacggtaggattactgtagttttggaaaaattaatccttgaattttaacacttttgaaaaaattccaaaaaataaacattttaacgcgctttttagccgtgaaatatttaaattcgcgccaaaaatgcctgttgtgattgacaattttccagtttctttccaggaaaactcggctttctgatcatggtgcatcgatcagactgtctccagcagcgcctgaagaggtgaaaactagccgaaaagtgaagatgggaggctaatttctaatcggtgcgcgccttttactcgtgcgtttttcttattattctattattatttcactagtttttccattcgcccgccgtgtgtacatattagccgccgccggctagctagcggatacgtaataccgttccactttttttcgtttaaaatataatatatttgccaaagtttggaaaaggtttgaaaattcgaatttcgcgccaaaaaaatgtatctcaaaaatttgaagttgccgccgaatttgatagatttttagctaaaaatgaagttttccggcatatttccgttcaaatttttcactggaaattcaaattttgtaatagcacatgtttcaccatttgttgcaccgccacggtggccgagctgcaaaaactaggccaccgccgggatttggcgcggccatggtgcatcaagggtcaaaacttgcacctaatttttaattttaacgaaaacacagaacccctacagtactactacagtaccccgaccatatcccccaactaaccccaaaccaatatcccttcaaaagtcaatttttccaaaactacagtactcctacagaacccctacagtactactacagcactactacagtacccctacagtactcctacagtacccctacagtactactacagtaccccgaccatatcccccgactaaccccaaaccaatattccttcaaaagtcaatttttcccaaactacagcattcctacagtacccctacagtaccccggccaaatccctccactaacctcaaaccaatatcccttcaaaagacgaaaaggcaattttcccaaactatgcatcaagatgccaccatgttcgcaaaactggcattttttttcacaaatttggtgtaattttcagaaaataccgaattttttctgttggaattttttaaaaactaatgtttttcgtcaaaaaaagtgatataccccctttttccacaaacacagcttcaccctccccacatcacatgaaaattcctcgaaaattggcgggtcacaaatcctttcccccaatcatcaattcgtgactcgttatgcagttttttacccacccgtcccggcggctactgatcacatacacactcacggcggatgagaattcctttatcagttctcgattcccccgatgcttttcacttttttcctcctcgcccaggagaaaactgtacggcgcccccgattatccccggcgctgataagaaattgaaagtttgaagattcaatcacttgagcgccggagattgtgtgggaaaatgggtagatcaaaaaaaaaaggtggggtggggcctgttccagtccggattagcttatttccaagcttagacattttcgttttcttcggtagtagtagttgttttttccgactttttacacaattagcatcggtaaaaaaaaattgtcatttttttttcaactctttctctttttctctcaatttttttttagtatcagaataaagttatcaaaaaaaaatgtaaatcggcaaatcgccaaattgccggaattgaaaatttcgggcaaactggcaacttgccggattttaaaatttccggcaaatcgccaaattgccggaattgaaaatttcgggcaaattggcaacttgccggattttaaaatttccggcaaatcgtaaaattgccggaattgaaaatttccggcaaatcggcaaatcgccaaattgccggaattgaaaatttccggcaaattggcaaattgccggaattaaaaattttgggcaaatcggaaaattgccgggcttgaaaattacgggcgaaccgccaaattgctggaattgataatttcaggcaaataggaaaattgctggaattgataatttcaggcaaataggaaaattgctggaattgataatttcgggcaaactggcaacttgccggattttaaaatttccggcaaatcgccaaattgccggaattgaaaatttcgggcaaattggcaacttgccggattttaaaatttccggcaaatcgtaaaattgccggaattgaaaatttccggcaaatcggcaaatcgccaaattgccggaattgaaaatttccggcaaattggcaaattgccggaattaaaaattttgggcaaatcggaaaattgccgggcttgaaaattacgggcgaaccgccaaattgctggaattgataatttcaggcaaataggaaaattgtcggaattgaaaattaccggcaaatcggcaaattgccggaattgaaaataactaaaatttcggaaaatgggcaaactggcaaattgccggaatttaaaatttccgccaaatcgataaaccgacgaactgccagcgcggaattcaaatttcaacacaaaaatggtcaaaaattcaaatttcgcgccaaaatccgatcacaaaaaattgccaaaaagtaccaaaacgtgccaaaaaattgccaaaaaattgccaaaaagtgccaaaaaattgccaaaaagcgccaaaaagtgccaaatttttaggccggtttttttcggaattttttgaaattaaaaaaaaaagctcaaattcaacaacttttttctttgaaaaataggtgttttttaatttaaaattttccaaaatgaccgaaaaattgttgcaaaaatcgtttcgagaccttttttcgatgcaccatgaccaaaaatcttgtcctttctttttttggtgttgcggtaaggcgataagtatcgtttcccccaagcatccatcactggatggaaaggaaagatacccgaaaggggggaagatgtcctaaattagtaacacacattgttttatgtaggtctccctcctccgtctcatttctctttccatgcccgttttcgatttttgtcattggttttttaggataaggtataggttttttgaactgaaatagtttttgaaaattcagaattttcatgtaatttaggtttttgaagatactgtaggattactgtagttttgggagaattcaattttcgagcttttaaagatttccgaaacgttttaaaaattgacttttcgtcttttgaaaggatattggtttggggttagtgggggatatggttggggtactgtagtagtactgtagggttactgtagtttcggaaaaaagtacttttcgtcttttgaagggatattggtttggggttagtgggggggatatggtcggggtactgtagtggtactgtaggggtactgtagggttactgtagtttcggaaaaaagtacttttcgtcttttgaagagatattggtttggggttagtgggaagatatggtcggggtactgttgtggtactgtaggggtactgtagggttactgtagtttcggaaaaaagtacttttcgtcttttgaagggatattggtttggggttagtggggggatatggtcggggtactgtagggatactgtagggttactgtagtttcggaaaaagtacttttcgtcttttgaagggatattggtttggggttagtggggggatatggtcggggtactgtagtagtactgtaggtgtacggtaagagtactgttggagttactgtagaattactgtaattttgggaaagtttaatttttgagcttttaaagatttccggaacgttttctgagttttcgaaagtttcagaaatttggaactattttagaaaatattttaaattcttccagaagatatccaatgtttccagacttttccgaaaaaaaaaatttgatttttttttaatttccagaaattttctaaaacttctcagagttttttgaaaattttctagacctttctcgaactttctaaacttttctaaatgttcctagaattttcaaaaacgtttttcagaagtttcttcagagtcttaaaaaaagtttcagaaagttgacagaaatttctagaattttctataaatttccagaagtttctagaattttctataaatttccagaagtttctagaatttccagatttttccagaaaattccagaaggttctagcattccagaagtttctagatttttccaaaaattttataaaactttccacaattttctagaaattttccaaacctttctcgaactttctaaacctttctaaaattttctagaattttcaaaaacgtttttcagaagtttctagaacatttagaattaaaaaaaaagtttaagaaagttatcagaagtttctagaattttccacaattttctagaaattttccaaacctttctcgaattttctaaattctcctagaattttttaagaacgtttttgtaaaattctagatttttcagaattttttaactagtttcagaaaattgccagaactttctagaatttgcagaattttataaaaactttccagttgcactaatattttccagaactttttcgacactttccaatgttccaaaatgattccagaaactttttataaacttctaaaagttccagaaaatttagaaattccagaacattttccagaattttctagcaatgtccaaaagtttttggaattttccagaaatttctaaaattttccagtacttttcccgttttttcaataattttaaaacatttccaaaactttcagtaaagttttaaaaattgtcttaaattttcaaaaaattccagaatttcaaaaagctcttcagaagttcctagaacgttctagaagttttccaaatttttgaacattttctaaaactttccaaaaatttgcaaaatgttccaaaaccttttcaaaactttttccaatttttccagaagcttctccaaaattatagtaaccttcacaaacaagtacaaacgagaagcccagctaattttttttggaatttttagcactaatatgtgttttttgagttgaaaaacaaaactagtcactttctattaaccttgtacatgtacatatacatgtccactactacacttttacttgtctccgccatatccatttcttcacttttaccgtcgtcaccacccattagccccccgtctcctttttcacttttccgacattttccgtaaaccaattaacactgtgtgcggtggctttagcgcagagggtaatatgttccgacaacggtttcggcgttgaattcttattttttatttttggaaaaatttgaatttttcatataatttaactttaaattttgcagaaaaatgggtcatgttggcctcttcatactattattcgcagtttttggcacttttatagaagctgttggtgagttttttaggtttaaaaaatttcaaaaatttgggtctcgccacgaaacccaattgggttactgtacagagttctattattttagtttttcataaagtttcaaagtttatacaaaaaatctcaaaaatctcaaatttgacaatgttaccaattttcaaaaaaaaaattattgggtcccgccacgaagagatgttgggttactgtagtttacgcactgttgtatcaaaattttattttttaccaaaatttgaaggcttatgcagattttgagctgaaaataatttttaaaatttcgaaaatttgggtcccgccacgaaaacctcttgggttactgtagctttttcatgaattttaaaagtttccaatttttcttaaagtttgacggtttttgcagatttttggcagaatttcatcaaaatatctgaaaattcgaaaaaagtatcattgggtcccaccacgaaaacttcttgggttactgtagttttttcacaagttttcgaataattttttttttgcaaaattggaaggtttatgtatattctaagcctcaaataatcacaaaatctgaaaaatcaatgaagctacgaattttagaaaaaaaaatcccaaaaaaaacatggttcttctcaaatttttcaaaacatttccagaatccaccgcaaagccgcaatgcaaattcacaagcacaaacgggtactatgcacatgttccatcaaacctgccgattggtgacgtcattttccggggtacggtatctccgcccgacgccgaaatgatgatcgctaatgttagatcggacgcgttcaaggaggtgagtattattgatttttttttatttttaaaactttttaactaaaaaaactcaaaaactagcaaaactatcaaaaaattgccaactgtaaaattgtagagctaacaattctgcacattttgttagtttataacttttcgataacactaatctccgcaaagttatcaaggtttaaagttcgcgcgcctccccgcacagtgaaatagtgtgctggaggggggagacgcagacgacgatagtgtctgcgtctccccccaccctgtgctctctcggcgctttaactttaaacgtgtgtaactttgcaatggtaagtgctatcaaaaaattttcaactaacaaaatgtgcagaattttaagctctataaattccttgttggaaaatttttaataactctgctagttatggagatattttagttttttttgtaaaaatacgccgtttttttctgaattttttgaatttcctgcaaattaaatatagaaaaaataaaatttcagaccgactggtctgatcacctagtaatcgatagatccgacccgggctcctcagccacttggctcgtccgactgtctgcgtctctctcgctaccagtctacccgtcaacactaaaagaagcgaacctttttgtgacagtaatatgtaatggatacgcgtatccgttattcaccctccatattgatccaacaaatcgatttgctccacagttctatcatgagccatatgtggtggcagttgagccaaatttgccgatttggagcattattgaaacccctgtcgctgcaattgattgggatccagaagagagttatcgattgatgttttggttggaggtgagctagaaagttaaatttcaaaaaatattaaaaaaatttttttttttgaaaaatttgttttctcacttttttaaaaattttgttatttttttttcaaaaaacgtcgtacaaaattttcaatcatttttccggaatcagctcaatgagccctttaaaataagtataatcatgactgggtttcgcccacgcataatagttttagccatttaggctccgcccctttcttggcaaaactcaaaacctgcagtaatttgttgaaaagcgatgccgaaattttttttactgttttttgtgatcagctaggcgagaactttcagaaaaaatagtcatgtctatgctccgcccaatttttattttagctccgcccactttgctctaaatttgaaactggccgtttgagctttgttttttctggcatttattgatttttgttcattcagagctttcacataattataatcatgactaggttacacccacgcacaactgtgcttggcgtttaagccccgcccctttcttggcaaaaacgccgcccactttttggtaaaaatattttagaatgttatataaacagtataaatttaagtttgactgcaaagaaatttctataaagttaaagggtattaactcgtttttgttttcgaaacatgtcagaaagaggcggagcctaatctcgtggaattttcaaaatgatcggaacctagtcatgactatacttaaatgaaagccctcgccgagctgaattcgaatttaaagttactttttcgaaaaatttcaccaactgaaaattttcaggactcccacaaaggcatcgacctggtggaggaaaccccgaaatcccgagaactgatctccggaagtgctgattggtcggagaatcagcttccacgcaagattcagttaagagtcactgggaactatgagctcccaatgagcttgaggcttatagtttcggtgggtgcaaaaaaattcggaaaaaaaaacttttttttaaaaattgttgaaaatttttttcaggataatgcaaaggaaaattcacggaaatccacaacttttataaatttggtcgaaaaatcgccgaatcttgcattaccaaagactacggtagcccctacaactactacagtaccccgtacgactactacagtaccccccactaccactacagtacccccaaccactactacagtacccccaatcaccacaacatattctgaagacatcattgactcggaagtgacaaaatcgccgcaggagctcattgcagagctcaaaaaagctttgaagtcggaaatttctggaaaaccgaaaattttcaaggaagccgaggagcccgaaatcgattttgtagcttttggaacgaaaaaccgagagatgaacgcaattgacactgaaaattcggaggaaattgaaaaattcgagccaatcggagcgacacggtttgctcagtgctccgtgaggactacagtaccagaaaactcaccgaaaggcacaaaagttgctcatttggagactttgaacaggagaaatgtgagttttcggattcagcacgacgagagctttgatttaagtataatcatgactaggttcggaaaaaatttcgggaattgggacttttgactccgcccacttaatggatgagtgcacggtaacttagctgagagtttgaatttaagctttttaacacaatttctgaattcagcttgacaagagctttgatttaagtataaacatgcctaggttccgccaaagcaaaaagattttaggtagttaggctccgcccatttattggcaagccacggtattttatgcccaagcttgaaatttttcactgttcggcacaatttttgcattcagcatgacgagagctttaaaataagtataacctacatttggcaaaatttttcgggtttggggcttttggctccgcccacttattggataagtgcacggtaacttagctgagagtttaaatttgagctttttgggacaatttttaaatttagcttgacgagagcttcaaaataagtataatcatgaccagtttcggaaaattttttaattttgactccgcccacttattggataagtgcacggtaacttagctgagagtttaaatttgagctttttggcacaatttctgaattcagcttgacaagagctttgatttaagtataaacatgcccagtttcggaaaattttttaattttgactccgcccacttattggataagtacccggtaacttagctgtgagtttgaatttacttttttttagcacaatttctgaattcagcttgacaagagctttaatttaagtatgatcatgactaggtttggaaatttttttggaattttgggtttttggctccgcccacttaatggataagtacccggtaacttagctgagacattcaatttactcttttttagcacaatttctgaattcagcttggcaagagcttcaaaatagtataatcatgactagtttcggaaaaattttaaattttgactccgcccacttattggataagtgcacggtaacttagctgagagtttaaatttgagctttttgccacaatttctgaatttagcttgacaagagctttgatttaagtataatcatggctaggttccgctcactcagaactattttaggtacttatgctccgcccatttattggctagccacagaaatttaggcccaagcttgaaatttttcacaagttggaacgatttttgcattcagctcaacgttagcttcaaaataagtttaatcatggctaggttccgcccactaaaacatattttaggtagctaggctccgcccacttcttggtaaactttcaaaatcttcagtactccatgctgaaaaatcaattcaaaaatcattctcgtttatttttgaacttaaaaaaattttaaatttgacgtgcactatttctgtaaacacagaaaattataactaagccacgcccattttaagccccgtccacttaatggaaactggcttaatttagcggaaagcatgaaaattataaaacttataattttgaggttatttttgagcttggcttgaagtttttttttaaatttcggtataaaaccttctataattaggctccgcccattaatggggcggggctttaaaaaaaagtgaaacctgggcatgattatacttaaattgaagctcttagtaagctgagccagatttttctaaaaaaaagttaaaaaacgttttatcttaaattttcagagcacaaaaatcaaattaatcgatccggacggcacatttggaatcgacgcggaaaccgacgacgtagtgattttggatccaaaattagtggatcgagagcttttcaatactctggaactagtagctgaaattgagaattccgtggatccatcagttcagtgtacacgaatccgaatctacgtggatttggacgatgagaacgataatcggccggttttcgagaatgagcactactttttccatattgatccgagattcccgcctggtgaagagattggaaggttgctggcgcaggatattgatcaggtatctaaaaaattctgaaaaataacgggaaatttacacttaaaacgcagattttttccaatttttaaaaaattcaatacaaaaaacccacagtaacttactcttaaaatttttaagttttttattttgtctcaatattcgaaatcagctcacctttcaaataagtataatcatggctaggttccacccactcagaaaaattttaggttgttaggctccgcccatttattggcaagccacgctaatataggccgaagcttgaagttttgggaaaattgtttgcactcagcttaacgttagcattaaaataaaaataatcatgactactttccgtacactcagaaacattttaggtagttaggctccgcccatttattgacaagccacggtaatttgggccgaaacttgaaatttgaattttttggcaaatttttccattaagcctagtagccttaaaataagtataatcacgactagctcacgcccactcagaaagattttaggtagttaggctccgccccttttgtgggcggagtcaaaataaaaataagcagaacctaggcatgattatatttattttgaagctctccacgcgccgattacaaaaataaaagtaaaaacctaaaatttccaatatttccagggctcaaacggtcaaatcacctaccacctgctcacccaggacgtcccattccaagtgggtacccacgggaagaaagcggtgataatgagcaccggaaaggtggatccagcagttgcctcctataacttaacagtcgaggcacgcgatcacggcgaagatttggtgaaatccgcaaaagttcccgtcgagatatttgtgttaggaggtggcgaggtgggcggagtcaagaaagctgtgggcggagtcaggcaaaaaattcaaaaacctgctgaaaatgatatgctccccaatgatgaaaatcgcgcagaaaccaagaaacaatccagccaagaagtgggcggagccagtagatcagaagataagaaaaccaaagaacccgaggatgaagcagagtcagacactgtaaccgagaaaaaagttgacggagctggtcaagaagtgggcggagttagaccagaagtgggcggagacaaccaagaaatgggcggagctagtaaagaaaatatcgaagaaaccgaagagattgaagaagaaaccgaggaaccaaaatcagaagcaagttcccaggacaaagtgggcggagccaacagcaactttcagaataaatccaccgacaaaagtcttgaaaatcagctaaatatcagtgaatcggagactagtaaagaaatgggcggagccacaatccagaaagtgggcggagtcaaacaagagaatgtgaagacaattctcaaggcgcccgagacaggagaatctgaaaatttggaaaatctcgaagattctgaagacgtggaagtggtgacggtcattgaggaggtcgaggtggaagaggacgatgacgtcatcgaggatcacgtggaaaatgttgaaaatgacgtcagaactactaccgcttcgatgtctagaacggtagatcaccaacgaacaacgacagaagaaccggaagctaataccgtggaagaggagcccccggcaccaacaactacagtattctcattcccccaacccgaatacacgtatgacgcttttggtatggaaatccaggagaatgacgtcatcgggaaagtcgcggcgggaccgagaaccgagttttacgcggttgatagggaggtacgacattgcaaagactagaaatttggagcattttgctagttgaaaattttttgaaaggcgagagagaagagacgcagacacactctcgtcgtctgcgtctctcgcgagagagagagcgtaaaggcgcataactccttgagttttggtgctataaaaaagttgtcaactgaaaaaatgtgtaaaattttaagttctacaattttttaattaacaacttttttatagctatcttagatttcaagatatactccaacttgtaaaaagtgcgtttttttttctgaaatttcctctgtttgaattctgttgcagttatcaaaaagtagtcaactaacaatttgtagaacactacatttaccaaaatttgtaagtttaaagtttttttataactttacttttaagggagttatgcgcctttaaagtttggcagccttcgagagagcgcgcgagagcacgcgcaacattaaaggcgcataactcggcgagtgtaagtgctataataaagttattaactgctaaaatgtgcaaaactttaagctctgcaatttaccaattgacaactttttgatagctattttagatttcaagatatgctcaaatttgtaaaaagtgttttttttttgaaattttctttttttattgaactgttaaatttatcaaaaagtagtcaacaaacaaattctagaacattacatttcccaccagttgtcagttaaaagtttttacgtagcttcaattttaagggagttatgcgcctttaaaattggagaggcgcaccggctggggagcacgcattactttaaaaacgcataactcagcgagtgtaagtgttatcaaaaagttgtaaactgcaaaaatgtgtagaattttaagctttacaatatattagttgacaattttctgataactataaccaaaaaagtgttatgcgcctttaaatgcaccctcagccccaattttaaaggctcataactccttgagttttggtgctatcaaaaatctgccaactaataaaatgtgtaaaattttaagttttacaattttttagttaacagctttttgttaactataaccaaaaaggtgttatgcgcctttaaatggtaccttgttttttcgatggtctcgagacccttgctgttgatgacacataattccttgagttttggtgctatcaaaaaattgtcaactgacaaaatgtaaaaaaatttaagctctacaatttttcaattgacaattttctgctatctactctagaccccaagataaatcaagtttttcctccagatgatcggcctaatcaaaatcaatgaagccggtgagcttctcgccggcaagaagctcaaccgccataaggatggaccattgaaattcggagtttctgcaacaaatggctttgagacggttggtttttttttttttttttttttttttattggtttttttagcgggctggtagccgagtggtaagggggagggggggtggtaaagctcaatgagccgccttgttattggagcgacaggtgagagtgcggagcaattaatgctcttcagaaggggcccccgctattgttttcttttaccgccatcaccacacacacacacacactaattaccaggggcacctttatttaatgattttaccgtcagtctgtaaattggaaattttcagtcaaaaatcttagagttttccaaccccagaagcccccttacgcgcaggtgttcggaaatattcacctgaattgatcccctccgttcatccgtaaacagtatcccctcttattccccaccactaatccctccataattacatgttcttctctcaattcgtttcttcgcgtttaatggttatcctcccacgctattgtattcctttttttaaagaaggcttttaacatatgaaaatatatatatatatatatatatatataaattcaatgaaccggaagtgcacttttcgtataatatacattatttatgaaaacgttactttgttcgttttttagttgcaaaaatgtacgaaaatggagctaatgggctcaaaatttgactgtggtgctcaatgcaccatgtccaaaaactctgcgttaggagttttttatactaaggaaaagatctcaaaagtgctaatgtttctaaaatggaaatattgtggtttttggaatttcgatgcaccatgtctgataattaaactttgacagcttatatctcggtccattttgtttctagccaaattttttcaactaacaaaatatgtagtaactatttttctgtaagatacacttaaaagctcattgatagcattaaaatgacttaagatatgagctttttggaagtgaaaatagtgtgctagtttacaaaactaggctaaactttgacggcttatatcacgactgtctgtaattttatcaaaaaactgtcaactaacaaaatatgtattaactactttcctataagccataactagaaactcaacgattgcattaaaatgagctaatatatgagctttgaaagtgaaaatagtggggtcatcgatgcaccatgtccagaaactatgctaaactttgagggcttatatctcggttgtctgtaattttatcaagaaactgttaactaacaaaatatgtataatctatttttctacatctttgtagttttaaacattttgatagctccaaaattattcgagaaacgagcctttaaaaagtagcacggtttttcaagtcgatgcaccatgtttatctagttagccctcaaaaagaccacaatttctcttaaaagttgtccaagaatgttcagagctcaatatatatatatatatatatatatactttatatgtatgcatatatacaaatttcaaaacttactccagccccccaccgaaaggtattaacgttcaactacaatttctaaagagccaattcaataggaagaaattaaattcccaaagtactaatatcaccttcctgcaaatatgaaagcattttgaagaccctctctcactattgcgtgacccctcctcttaatatgcaaagtcatgtccttggtagatcaccccccccccccccctgggggcccccaatgttattattaccttcttacgtcacatgttccgtctccctcccccctcataattattatatggctagctgtatgacatccggtgggacacccaccgcaatttcccgcaaaaacatagtatcgcacttatttattatcgcattaaaccgattttggtgttatgtatttttaaaaaagtgcgttttttttttattttaaaattttctcgaactctgttacatttatcgaaaagtagtcaactaacaatttgtagaacattacattttccataatttgtgagttaaaaatgtttcatagctgcactttcaggggagttatgcgcctttaaagatgaagaggcgcgtcggctggagagcacgcgctactttaaaggcgtataactctttagtggtaaaggctatcaaaaagctgccaactaagaaaatgtgtgaaattttgtgctctacaattttgtagttaacaactttttagtagatcgtatattgggaaagttacaagagatataagctttacaccttaaaacctctgtaactcaaaaactaaagcagttatcaaaaagttgaaaactaacaaaatgtgcgaaattttatgttctgcaattttttagttgacaactttttagttagttttatggttggggagttacaggtgtcttaagttaaagccatccagtgccccgtatatcctagctcctttaacccgatctatctcaaaaactaagagagctagaaaaatgttgtcaactaacaatattcttcaaatttaacgctctacaagttttcagctatagatctgccaataagtttccctggacttccgaatatcccgaatttcacctcacccacctctcctgtacgcctacccttccctgtcctattagtttccgccatattccctaggcaacaggtgtgcatatgtttttttctccgttttttactgcctgcgtcttcttaagaaaataggcggagctaaacatctgcttcttctcgtttctcacgacggcaggtgcaaagccgacctcctatttttggaggtaattgcttcgctctcttttttgtacctctaaatctcttagtgttttagtaaaaaaaataaaatacaataaagtattcgactattttgaaaaaaagttttttaaaaatgaaaaataaattcgctttacaagtatttataaaacacaagaataaaaaatacaattttaaaaaattttgccgccagcaggggtcgaacctgcgaccttgggcttattagacccacgctctaaccgactgagctatggcggcacgattcagcggcgtttagatggctgtgataagaaattttactgttctcttttgtctcttctcgtttctcacaatttcttgttttttcccagaaactactaatttcttcaaaactttatatcacattttgtagctctcaaaattgtgcacattttgttagttgaacattttttgctagctcttaccctagcagagttatgcgcctttaaaaaaagtactgtctcattggagagacgcagacacgcagaaaccatcgtcgtctgcgtctccatctctctcgccacctttctttaaagacgcataactcggcgtttaggagctattaaaaaattttcaactaacaaaatgtgtgaaattttttgctctacattgtcttcattgatatttctttcccagaactactagtttttgagctattcctctttttccttcaaatctttaacataacacagatatatgccaatacgcctacactaatgccgctaaatgtccatcgtttatgtgtttttattactgttttcaactgccatgtggcaaaatgaggtgagttttttggggattttttttggaaaatttttttttaaataaaaaacattatttttttcttaggcccgtgctcaagtcacagtcctccgagacgccaatcgagatgttatgtcagcgatgccacgtttcgaccgggaaacttatcgattttcgatcaatgagaaccagcaaccagaagttatcggttttgtgagggtaagtagaagagctagaaaaaaattgtcacataacaaattgtagagctgaaaattctacatattttactagttgaaaacttttttctagctcaattctccggggagttatggctctttgaagctgcgcgcgcaattgggcacctagagagcgtgggacagggggagacgcagacaccatcgccgtctgcgtctccccacaccctacactctttctccgcttcaactttaaaggcgcataactccgcggaggtgaacgctatcagaaaattttcaactaccgaaatgtgtagaattttgagctctacaacatacaacaaaaatttccgttctttttccaggctttccactccgcgatctcctcatccgagtcagttcgtctaacctattctctaattgctccggctcacattgacgagctcccattcgaaatccatgagcaatctggagaagttagcacttcccgacctctggacacggagcaaaagaagttttatcggttccaagtgagttttaggtgactttcaaaaaatgcgaatttttatggaaatccgaaaaaaatatactgttcacttgattttatgaaaaattaaaattaaacttaaagattaaaaaaaagtaaacaaaaaatttgccgccagcaggggtcgaacctgcgaccttgggcttattagacccacgctctaaccgactgagctatggcggcacggagcggcgctgtttagatggccgtgataagatatatttgcaaaagttgaactctccaggttcgagcctgcctaacccaaacaatatgctccacaagtgacgtcatcgtagaagtcgtcgatgtcaacgataatcctccaattttcacgaatcgcaagctagaagcaactgtggaaagcgatgtgcctccaggaacaagaattgtgaagcttttcgcaaaagatgcggatgccgggaataatagcagattgtcgtttgccttgatgtcggagaatggtgagtaggagtattttaagcttgtagagcgcaaaattctacacattttcttagttaacaacttttcgatacctctattccccgcggagatatgccccttcaaagttgacggttacatagagagcgtggggggaggggagacgcagggcggcgctggcgtctgcgtctcccctcccccacactctctagccatcagctttgaaggcgcatatctccgcggggaaaagcggcatcgaaaagttttcaactaatgaaatattcagaattttaagctctatattttcccatttcttccagagcccttctccatcgacccaaactctggacaactcaccacctcacaaagcctcacccgaccactttacacaattctggtgtcagtctccgacgccggagtaccccaaagaagcgacaccgcggaggttactgtagtggttaaaggcacaaacccatctccgccagcatttgatcaaaaggagtataaggcggtgattgccgcaccgattcgtgctggacaagtgattggagaagtccgcgctacggatccggatccaggaatggagggattagtcacttataagcttttgaggtgggttttctgggcataactcgaaatcctgcagagctacagagaaattgttgtcaactgacaaattgtagccctgaaaattctaaacaatttgatagttaaaagttttttgaaagcgctattccccgcgaagttatgcgccttcaaagaaacagtaggaaatagcacagagagggggagacgcagacaccatcgtagtctgcgtcttcccctcctccacgctctctcgcctttggaactttaatgaggcgtaacgcggcggggaaaagagctatcaaaaagtttttaactagtaaaatgtgtgaaatgaaaagctctttcagatctgacaacaatgaccaccaaaagttcatgatcaactcgaaaaccggagttatcagtgcaatcagtcccttgtcacttgaagacggaccaatcgagctaggaatcgaggcaactgacaatggcaagaacctgaagagaaaagtgaagaccaacatgaaaatcgatattatcgattcgaaaactctcaagtttctgcctctcccgactaccgtatacatttcgactgaaaaggcagtgggaagtgtgattttacgagtttcggcagtgtcaactgacaatgagaatatcaaattccgagcgctccaggaaaattcgcagtttgtaatggatggtgatttgttgagagtgagttttttcacttttcgacgtgtgaaatttgaaaattatcttgtgaaatctaatagcccttgaaattctgcacatttcctcagttgaaaacttttttctagctcttttcctcgccgagttacgcctcattaaagtttcaaaggcgagagagtgtgggggagagggagacgcagacgacgatggtgtctgcgtctccctcctccctgtgctctttcccactgtttctttgaaggcgcataactccgcggggaatagggctgtgaaaaaaatttcaactaacgaaatgtgtagaatttttagctttacaagctgggtagcatcgccgcctgtgtcttctcttctctcacactctctcattgtccaaactttaaagacgcataactttgcaggaggtagcgctattaaaaaattgctcacttttaaatgtagcgcctgaaattttgcacatttcctctgttgaaaactttttcgtaactcttctccttgcggagttacgcgccattgaagtttcgaaggcgagagaacagcatcgccgcctgcgtctcccctcctctcacgctctctcggtgttcaatctttgaaagcgcataactccgcggggaatagagctatgaaaaaaatttcaactaacgaaatgtgtagaatttcaaggactgcaagaatattttactaattattcaatttttctaaattcaggtcgccaatcacctggtagagggagaatcgattttatcgattcgtgcagaaaccgacacggtccatgtagatcatcagctaaaagttatagtgatgtcggatagggataaatacccggtattcccacaactgacttatgattttgacgtctccacggacgggcacttcccgcgaattgtgcaccagtttaacgccaaactgggtgctgggacacttcgctacacatttttcccgccgagccccgcacctgccggcttctacctcgacgataagactggagagctgttcgtgacgtcacagtacccggaaaccaaacgggaaacggtttttgtggtggtacgggcggtgaatatgcaggcaaacaagttctactcggatgttggggtgagtacacaacgacaatccgttattacacctcttattacacaatcgcaaaaaatttccaggtcgccattaccccagtatccacgacaaatcccactcttcgattccagcagccaaactataattttgaagtctacgagagccttggtgaaggagaagctattggtaccatttctgtggtaagttttagaacattttaaatgtgaaattcgaattccctgccctagaattaccccgagcgaaaatttccagctcatttggagccaatgtcgtaaggtttggtgtttcggggtacggtattcggtgtttgcgtacttttggagctacagtagccctcgaaatctgaaaattgggctagaaatcctaaccaaaacgtgtttaggaccaatttttttgctgaatccaaattgaaacttggtttttgttcgaaaagttgttttagttaaaaaaatatccaaataaaatgtttcctggaaaaaccttcgattttagaaattttaaatgtgaaattcgaattccccgttctaaaattaccccgtgcgaaaatttccagctcatttggagccaatgtcataaggtttggtgtttcggggtacggtagtcggtgtttgcgtacttttggcgctaccgtacccttcgaaattttaaaaatgagctagaacttctaaccaaaacgtgtttaggaccagtttctgcgctgaatgcaaatttgaacttggtttttgttcgaaaagttgttttacttgaaaaaatatccaaataaaatgtttcctggaaaaacctttgattttagaaatttttaagtataaaattcgaattccccgccctaaaattaccccgagcgaaaatttccagcttatttggagccaatgtcgtaaggtctggtgtttcggggtacggtagtcggtgtttgcgtacttttggtgctaccgtacccctcgaaattttaaaattgagctagaaatcttaacaaaaatgtttttagacccaattttttgcgctgagtccgaatttcaatttggtttttgttcaaaacattgttttagtggaaaaaatctccaaataaattttttgtagggaaaacctctgatttgacacatttttaagtagcaaattccaattctccgtccaaaaattacctcaagccaaaattactagctgatttgaagccaatgtcgtaagatatggtgttccggggtacggtagtcggtgtttgcgtacttttggcgctaccgtacccctcgaaatttcaaaattgagctagagacctctactaaaacggctttgagttgaatttttgcgtagaattcaaatttttaactttttatttagccagacttctggtttttcagattttcaccaattttcagccaatctccaaaataatcggtttcaattccacaaaaaaactcccctgagccaaatttggcgtagaatttgaatttcaaattttttagactggttcaacgtccccggcaaagctgtctctgtccccggatacctcattcctaggaattcatcaaaatggaaccctatttttggcccaaaaagttgacgctgaggaaattgaaagtttgagtcaagaattcacagttttggctgaaagttcgggaaaagaaaaccctgagaccgcccgcgcgctaatccacgtagcgattcgtgacgtcaacgagttccagccagagtttgacgaagatgacgtggaattttcgctggaaaggggcgtggccactcccggagcaactatcggaagagttcaggctcacgatcaggatgttagtgagaaaaatcgtttgatctaccgtgtggtgggcggatccggcaggaagctggtgttcattcaggaggatgggacaattattgtgggcgatgagcagattccggcggcggtggacgaattcgatttgattattgaagctgttgatcggaatggaaatcatgtaggttttagggaaaataaaaaaaaattttgaaattttttatgattttttattgattttttttttcaaattttttgaatttttttttggaaattataaatttttaattgttaaagtaagacaaaaaaacatatttgtatagcataaaccggctaaaaatcggaaaaaaattgaaaaaaatcgattttttttgcaatttttttgtttgaatttttaaagttagtattaccaattataaacattttatttaaaaaattttaagccgactttgacggatttaaaaaaaaaattatttttgaaaattctaggcctaagcctaagccgaagcctaggcctaatcccaagcctaagcctaagcctaagcttaagcataagccctagcttgagcctcagcataaggctaagcctaagcttgagcctaagcctaagcctaaacttaagccaaagcctaagccaaactttccgtctaaacctaagcctaagtctaggcctaagcctaagcctaagcctaatctaaagtttccgaaattccaggactccacccacgtcatcgtctacatcgacggagcccccacctcttccaccgaggagcacgagccgttatttcctgccgagccccttgtctggaacgttactgagggcacgacgcagagtttccaactacaaactgcaagtgatgatgtcatctaccgcatagtgggtgggaacgacgacgggctctttgagctcagctcgaggggcgagctgaaaattgtctcagagctcgatagaactcgccagaagtcatataccctgcaagttgaggctaagaaaagtggagtcgcgaaggttgctgaagttaccgttaatatcaatccgacaatttccaacgcccacgcaccaaaattcacgagagatcattactcgggtaccgtacccctggacgcccccataggcttccccatagtcaccatggaggcctttgatgaggatgatgacccagtacagtacacctttaaaggcacaggctgtgccgatcagcttggtattgataattcaggccgtgtggcttataaggtcgctatgaaagatcgcacaacgggaagcttggagtgcacggtggtggttagcgatggggagcactccgcggagacaatgctgacacttttggtgcaggagaatgaggaagtggagtaagtttttttttttgtaaaattcttgtagagctggaaattttacacaatttgttagttgaacaatttttgatagcttcagtttccaaggagttatgcgcctttaaacctttaagcctaaaagttgaagccgaacgccagcaagttagtgagggagtctttaaggcgcataactccgcaaaaactgtagtttccaaaaaattatccactaacaatttttgtagaattttaagctctaccaattgttagttgagcggtttttgatagctccagtttccaaggagttatgcgcctttaaagttggatccgagagccagcaagttagtgaggaagtctttaaaggcgcataactccgcaaaaactgtagttttcaaaaagttattaactaacaatttttatagaattttaagggctacattttgttagttaagcaatttttgatagctccagtttccaaggagttatgcgcctttaaaggtgaaggcaaacgcaagcaagttagtgagggagtctttaaaggcgcatagctcctctgaaatttaagatttgaaaattttgtcaacgggttaaatgtataaaattttaagttctaccaattgttagttggcacaaattttataccttcaatttcaaatgagttatgagcctttaaagttgcgccttcaagctgaaagattccctcaacaagtggagatctggaggagagggggacccttcaaaagcaaatttttaacattttttttacagaaatcttaaagagctccttacggtgatcataatgcactaaaaatcacttttctagcttttctccaagcagagttatgcgcctttaaagttgcatcggcgagtcagcatagggagaggggagacgcagacccctctcctcacgctctctgcaataagacgcataaacggtttgatctacgtagatctaaataaaatgcgggggaagagacgcagatttctcaactgatttcgcaaaaaaatccccgcattttttgtatatcaaaccgtaatgggaccatagatagcaatgatctactaaattttattttttcagaacaccccaaaagcctccaaaccacgcgccaaccttctcaatggccgagtacaccttcaccattccgcaaaactccacggacctcggaactgtgatggcaacggatccagacggagaccttattgatttttcgattgagcccaccgaataccgtaaccttttccacgtggactccagtggacggatctttgtgcgaggacccctggaacaacaacgatacagcttcctggtagtggcagaagatcgaggaagcccaattctatcgtcattcgtgaatgtgaaggttcttgtggaagccacccaggagcagttggacccggaagcatcgagccctcaacacttccaattcagccaggcagtgtactcctggcgagtggagtccgggcttccggtcggatcgatcgtaggatttgttaagccagttggggtgacagatgggatctcgtatagcttcatctcgggagactacctggcgatcgacagtgatggacgggttgctgtggtgaagccgcttacggagaccgtcaatgatgtggtgattgcgatgaagaacggcgagattttggcggagactcggattttcgtcggagtggagccgtctgaagctactactaggatcctagggccagtgacgactacgcaagtaccatccacagaggctcccgccacaagcacccagagctcggaagagtccccttcatcaagaacatcagagcttccgacactacctccagcaacaccccgcatcacctcaagaccttcccaactaactctagcccccaccgaagacatctccatggtctccactgaacaaggccctaccctcgccccgatcgatcttccgactcgggcagtgaccggaagggtgatccctctggactccggcaggttcacctttaccagcccgatctactcagcgttctctctggaaggagacttcaagtctggcatcgagctggagatcaagccgacgctcgccgtccagggatcctctgaacctccgagcttctccatcgaagacacaacactcccattcttcctcacccctgaaggcaagctcataatgttcgaagcggatcgagagcggcatgagagctaccttttcaccatagtcgccaaggctcagggccagatggctcgggctcggttgaacgttacgatcctcgacgtcaacgacaactacccccgcttccaggcccatccggacgctgttggcatctccaggactatgcatctaggcagcccgatttatcagttaaaggctgtggatcttgataaattccctgataaccaggtcacctactccttgaattctccatggatctctatagattcccgggaaggattgctccgagtcaacggagatcttcaggcagcccccgaatcgttggatctaaccgtggaagctcaggactctggcaagccaccgctcaaatcggagactcacctgagaatcctgatcttcaagcagaacatcccaaagttcctggaaaccccgcttgaagtcacgcaaatcccaacaaaaatggctccaggagcacacatcaagaccctgctggcaggaccgactgtctcggagcaggatacaattctctatcggctcgtggacaccgtcaatgggctattcgagattaagcatgcaggggagctggttttggcgagaagaccgctggataatgaggctggaagagagtatcagttgaatgtgacagcggagaacagcaagggaaccgattgggttgtggtgagttgtctcgggctttttttcaagctttcaaggcctggaaaactgtagagcttaaaatcctgcacgttttgttagttgaaaacattttgataggttcactacccgctgagttacacgcctctgaagttgaagcgacaaaagagtgtagggtgtggagagacgcagacagtgatggtgtctgcgactcgcctctcctcacgctctctcggtgttcaaactttgaaggtgcataactcagcggggaatagagctttgcgaaaacttctaactgacaaaatgtgtagaattttaatttttacaactttttagctaggttacacgaaaccggcaaatcgtctgcgtcttccctcctcccacgctctctcgattttcaaactttaacgacgtataactttgcgtaggaaagcgctatcaaaaagttatcaacttacaaaatgtagtgcttaaaattctgcacattttgttagttgaaagcaatttgatatgtgtactccccgccgagttatgcacctttaaagttgaagcgacgaaagagtgtaggtgtggggagacgcagacagcatcgccgcctgcgtctcccctcttctcacgctctctcggtgttcaaactttgaaagctcataactcagcgggaaatagagctgtgaaaaaactttgaactatcaaaatgtgtagaattttaagcgctacatgatttcaacattaaaaaaatttggttttacacgtaattcgaactttaatagcgcgtaactcctcgcggggtcaaggtatcaaaaaattttcaactgaaacattgtagcccctaaaattttacacatttcttcagtttacaactttttgataccttgcctccccgcggagttatgcgcctttgaagttgaggcgaaaaaagagtgtagggtgaggggagacgcagacagcacgcgcacaactttaaaggcgcataactcagcagggaatagagctgtgaaaaaacttccaacttgcaaaatgtagagaattttaagctttacaaggtgggcagctggtagagagtgtgcctgaggcgagacgcagacacccccaccgcctgcgcctcccctcctctacgctctctgaggccccgccaaaacaggatgcaacccaaaacaggatgcaaccaaaacaggatgcaccaaaacaggatgcaggggcggggcctatttcgcaaccaccgcacacttttttcgcaagcctcgcacgttttttcttttgaaaaatgcaacaatatcatgaaaaaaacgtgcgaggcttgcgaaaaaagtgtgcggtggttgcgaaataggccccgcccctgcatcctgttttggtgcatcctgttttggttgcatcctgttttgggttgcatcctgttttgggttgcatcctgttttggtggggcctccgctctctcggcgttcaatctttgaaacctcataactcagcagggaatagagctgtgaaaaaacttccaacttgcaaaatgtagagaattttaagctttacaaggtgggtagctggtagagagtgtgcgtaaggccagacgcagacaccatcgccgcctgcgtctcccctcctctcatgctctctcggtgtcgaaactttgaaggcgcataactcagcggggaggcgagctgtgaaaaaagttccaactaacaaaatgtgtagaatttgaagctttattagtacatcaatcaattaacaatgccgcttcggtctgatccttcccgcgccaaacggcttctcctgatgctcaataacaagctgatggatcgcaaatcgatgcgccttgatcaaattgtaaattggcaaaaaatccttaataagttctctctccaccttcacaatagcatccataatccgggtgaagttgttatagccgagattgacgatttgcagctttttatccgtaaatcctctcggatcacagttgtggaggtagaagaagcgtgagtattcgttttggagacggagcacttttagtgacattaactgtaaaagctttttgtttaaaaaagttttttaggaaatttcgtaccgtgcactctttttggatagattttccgttgaattctagcttcatgatgtcgtcgacaagttttgtgagctccttcacaagcctctgaatatccctgatacttccccggcagaatacgattttcttaggggttttcatctgaaaattatacttcaagttgtagctcttgaaattctacatgttcctttagttttcaactttttgatagctcaactcttcgcggagttatgcgcctttaaagatagggcgacagtcgtttcaactttaaaggcgcataatttctttaggaacagagatatcaaaaaatttacaactgaataattgtagcgcctagaattttacacattttcttagttgtcaacttttcaataactcaacttcccgcggagttatgcgtctttaaaaattaggcgcctcacgctctcgtggtttaaactttagaggcgcgtaactcctcggtggactgaaatatcaaaaatttttaactgaaaaattgtagcccttgaaattctgcatatttctctagttttcaactttttgatagctcaactccccgcggagttatgcgcctttaagattagacacctagagagcgtgggaaagggggagatgcagacaccatcgtcgcttgcgtctcccctcatcccacactctctcgtggtttaaactttaaacgcgcgtaacttttctgggagctgagatatcaaaattttgacaactgaaaaattgtagctcttgaaattctgcatatttctctagttttcaactttttgatagctcaatttcccgcggagttatgcgcctttaaagattactacaccaagagagcgtaggagcaggggagacgcagacaccatcgccgcctgcgtctcccctcttcccacactctctcacgctctctcggtgcggcaactttaatcatccataacttctcggggaaaagtgctatcaaaaaattttcaactgccaaaatgtgtagaatttttagctttacatttttatttgcacaaaaaatagtttctgactcaccatcaaacaagaattgatcataaagctatcatcgtccaaaatcggacgcctcgagcgttttttcaagcaatttcccatagagtcagctaaaaatagagtcaaaaacaaccagagcccctatttttatacaaattgtacagaaaggggggggcggggtactgtaaatttgcatattttttcgcggagacacaataacatgtcaattagcgtgggatttctggtgttttgacaatttataggactattgcagagtctacaatttgaatgaaattggggtgactttctcaaaaaaattgaaaattaaagcttgtagaccggcgccgcagtacgaaaaaacatgggagagacggagactgtgtctgtttggggtgcgcactttaaaggcgcatagcacctttccgaacagagctaggaaaaaattttcaactatcaaaatgtgtaaaatttcaagggctacaaattcactgttgacaatttttaaaaatctttaagtacaacaaagttatggccatttttcagctaccaatcttcgtggaaggccgactatcatcaaccaacaccccatcaacttcctgccaattccaacagaaagtgtacagagcccaggttatggaaaattccggagcccacgacgctgtagtccgagttcaagccggttgccagaagaaattcagatacgcgttccatacgcagagcagtgagttttacaaaattttcagatcaattttcgaattttttcagaggaattcgaaattgactcccagagtggtcaaatctacacaactgagccattggaccgggagactaagagcacatatttcctgacggttaatgttattgagcagaatcgcaagaggcagagtgatgtgcaagttgagcgtgagttaaacaattttttcattttcaggagttagccttaaagagctcaaaatttgacccattccagcagttgaaaatttttaatagcaccaaaactcgaggagttatgcgtctttaaagttggagcagcgagagagcgtggaagagggggagacgcagacggcgatggcgtctgcgtctcccctcgccatacactccctcgcggctcaatctttaaaggcgcataactcctcgagttttaatgctatcaaaaagttgttatctaacgaaatgtgcagaatttcaagctctacaacttaccagttgtttttttttttaattttgcatttaaacaaagttacatgcattttttccagaactctcctccaaactctccccatggcagacgctcgtagtggttacggtacttgatgacaacgacaacgcccccgtattcctgcacatgctcccagactctacgttagccgccgtggtagatcaaaatgcgaatctgatgagccccggtgacccacttgcaagctcgcgaccttgatgttttaccaggcaatctgaaattcgagctggaaggccctgaagctgacagtttcttcttgaactctactaatggtttggtccagctcgcgaagagcctcgagaaaagtgacgtggagcatttcgaactgcaagctacagtaaccgatgggaagcatgctgtgcatgtgcctttgaatatctatgtgctctccgtggacacaaacgtcgtgcagcttaccaagaatacaccacactcggatattgatccaagtgctgttgagaggaagttgactgaggtgagtgagggaaaatctggaaaactaaaagagctagcaaaaaattttcaactacaaaattttagagcttaaaatttagagcatttctgtagtttgcaactttttgatagctctgctcactgcagagttatgcgcctttaaagatttatgacgagagagcgcgaggagagaggatacgcagaggtagtctttaaaggcgcataactcattggggagttgagctatcaaaaagttgaaaactagagaaatatgcagaatttcaagagctacaatttgtcagttgtcaactttttgatagctctgctaactgcagagttatgcgcctttaaagattccctgcgagagagcgtggcgtctgtgtctcccccgctgccacactctgtaggcatctaatttttaaaggcgcataactcagcggggagttaagctatcaaaaagttgacaactagaaaaatatgcagaatttcaagagctacaatttaccagttgtcgaatttttgatagctctgctcactgcagagttatgcgcctttaaaggttcccggcgagaaagcgtgaggagcgaggagacgcaggcgacgagggcgtctgcgtctcccctcgccacatgctctctttctcactctctttacggtgggctttgaaagcgcataactcagcggagaacagagctatcggaaagcttccaactaacgaattgctccaaattttatggcctataaattaaattgactaaaactttaaatttcagatccttggaatggacacccgtatcctcgtcgcccagccatttgtatccgacgacggcaagactgacatgaagaagtcccacgtcttcgtctactccctggacaatctgagccaaaagcctatctccagagatgagctcaaacggctcttgatggctcattccgatgggcttcatcccctgcaaatctcctcagtttcgcttttatcaacaggaaatgcggctggaaatgggcaattcttgctgacagtcgtcctactggttgtgctcatcgctttgttgctcttcatttgtgcattgataatgtgttgtgccaaacggtgagtcgttttggagctgtaactccgaaactgctggtgatagcggaaaattgtcaactaacaaattgtagagcttaaaattctgcacaatttgttagttaaacactttttgataactcaactccccgcggagttatgcgcctttaaagttaaagccacaagagagcgtgagacgaggcgagacacagatgctgtctgcgtctccccccttcccacgctcttttttaaaggcgcataactccgcggggaattgagctatgaaaaagtttccaactaacaaaatgtgtagaatttttcgctctacaatatgactgttggaaatttattgatagcttttcccccagccgagataaatcgaatttttttacagccgggcccgcaacaccgctggagtcatggaaggcgcctacatgattaactctgtcggaagtggcccccggccgtatgacgtggaaaatatttcacggctcaccgcacagaacgtactagccggtagacccttgccggacccccaggagcataggtaaggttttttgatggaaactagttaaaaatttggatttttgaagctgtccgctttaaaataagtcccatcatgcctataattcgtcaattttgatattttgggtcccgcgacgctgggtactgtagctatagttttcttttggtttgagctgtcccaaacttgaaataagtgtagatgaggtggggtgggtgtcaaatcaaaaatcaaatcttccatccattaaactgaaaaaatgaaaatagaaaaaatttagagaaaaaatgaaaaaaaaaaattttgtgaatttttttttccaaaaatctgaaaatttcccaattttcgaatttttacttgaaatcatttacaaaatcggaatcctcacaaaattaccttttgaatgacacccatcatgcttatattccgccgatttagaaaatttgggtcccgccacgcggggtactgtagcaccagtttcagctgtgtcggaactcaaaatcgtcaaaacctagtcatgatgggtgtcaaacgaaagcccttggatagctgggtgcaacaaaaataaatattggaatcaaaaataaatgtggaaaaattttcgaaaaaaacaatagttaaattttttttttccaaaaaatttttttgccaggaagttttttaatttttgattttctatcaaaatcgctagcggattcatattcctgacactctcagctttcaaatgacccccatcatgcctcatttccgacgattttaaaaatttgggtcccgccacgcggggtactgtagcaccagtttcagctgtgtcggaactcaaaattgtcggagcatagtcatgatgggtgtcatttgaaagctctcggcaagctagaaacgttgaaaatagttttgaagcttaaaactgaactctaccaaaattattaataaaatttcaaaattttcagaattgacatgtcatccaacgatacggatattgccttagaacgtgacgatactactagagaattttcaaatagtgtccgagaacggccaactctgttgcaaagtgcacttcagaggcagaatgtgagaattttcagaatttttagaaaaatagaaaaaaaaattcaatttttaaattttaaatttacagatccacccatcaattgccaacgatgaagaattgaagaaattctaaaattttaattttcacttatttattatcgatttgttattgattttttttcacctcctcacgggtatgctatctaccgtatccccgtctttccccaccaccgcaaacctgtaataagtgctcattttttcttgaaaaattaataatgactaatgctatgtatcaatttatgcctagacacgccggtgctatatgtatttattgatttattttaataataaaaatttagtttgaaaaaaaagaatttttttgtaattttcatttttcagaaaattttttttgagtttttcctaccttctcagcaatttatttggatttctgaggtttttagcttcaaaatgacccccatcatgcccatgctccgacgattttgagcatcgacacagctgaaactggtgctacagtaccccgcgtggcgagacccaaactttcaaaaatggcggaacctaggcaatatgggggtcatttgaaagctgagaatgtgcggaatatgaatttattattaattttaagagaaaaatgcagaaaaaaaattgtttttttttttttgatttttgaaatttgaatataattgatttttttttcaaaactaatttttcgcctgtttttccaaattcgttgttttcagcttactgagtgcttcaaaatgacccccaccatgcctatgttttgacgattttgagtatcgacatagctgaaaccgaggctacagtaccccgcgtggtgagacccaaattttcaaaaatggcggaacataggcatgatgggggtcatttgaaagctcccggtgagctgagtacaacaaaaatatatttaaggttcaaaaataaaagttaaaaaaaaaaaatcgaaaaaaaaattttttccaaaaaaaaatattaaaaaatctttttcaaaaaaatgtgttctggaactgttcaaaaccaatattttttgaaaattcacaatttttatgtttcggaaactaaatttgagccctctaactaccatattaactattttagaagagtttcaaaaaaaatttcagtcaaatttctctaatcctcttatcactcactccaattttaaattgatgcgattattattattttaatcacatcggaatgataagaaacccctaattttcaaaaaaaaatttcatttccccccagaaatgcggaaaatattgctgttttttgctattttcggtgagattttttgtcattttcaaattttttgtttttttttggtaaaaaaatgcacaaagagctttaggattttcacttggaagctctcaactctgcatttcaaagactttgacattttgccaatacgggttcaatcaaaatttaaacatcaccagcgccaccgctgattggaccaacccgggaacactgagcttcatcattcggagctattacttgcaggtggaagataatattgatttttcagagtgatttttgagtccccaagcctattagcttttgaatgacccccatcatgcctaggtccggcaattttgaaaatttgggtctcgccacgcggggtactgtagctatagtttcagctgtgttggagctcgaaatcgttggaagctaggcatgatgggagttatttcaaagctctcggtgagctaaaaacattgaaattaaataaaaaatcgtaaaattagttttgaagaaaatttttaattttattaaaatttcaaaaaaaaaaaataattgttttgcattttctctgaaaattgtcaacaagttcatattccttacactctcagcttcaaaatgacccccatcatgcctggtttccggtgattttgaaaatttgggtctcgccacgcggggtactgtagcaccagtttcagctgtgtcggaactcaaaatcatcggaacctaggcatgatgggggtcattttgaagcactcagggagctggaaacaatgaagatgagggaagcctgaaaaaaatattaattgaaaaaaaaattggagaaaaaacatttgaaattttttgaaaaatcgaaaaatctgaaaattccaaaaataaaaagtgttctcttaaaattgttcacaaatttgcatttgtcacagttttagcttcaaaattacccccatcatgcttaggttctggtgttttcgaaattttgggtctcgccacgcgggttactgtagcaccagcttcagctgtgtcgaaactcaaaatcatcggaacctaggcatgatgggggtcattttgaagctctcaacaagcccaattcaattttcagggtatcgatggcctgctctcagtctgcaacgcccgtcagcagtttgaccagtgtctcggagaccagtacgatgcctgcatgtcccgcctgaacttcattaccgacggagaatcgccggccgacgcgaccgcctatgtttctctgttcaaaactatggaattcgattgtgacgggggatttattcgtgagctccgcgggtgctcagagagctcaaagttaaagtaaaaactttcagagtcctctcggaactggggatgtatcgcagcagtccttcagacccatgatcaacagctcaacgattgtcggaagcagtatgacgcggaaattttgaaggtaactagtcaaagccaaaattccaaaagttgaaaattttgcgtgaaaactcttttttccgaatttttcagaagttttcaaagacttacacataaaaattcgaattccccatttaatttcacccccaacggacctttttcagggcttctaactctatttttgaatttctaggggtacggtagccccaaaagtacgcaaacactgaggcttgcgtactcggcaccgaactttacgtcagttagtcgaaattggctgaaaaccgggttacgggggtaaaaagtgatggagaagtcgaatttcgtattgaaaatctgtgaaaatcactggaaattgctgaaaatcacaattttttcgcgaaaattgataattttgagtgaaaacgctgagaaaaaagacaaatagacattttttcgactttttcagaagttttcaaggattcctacactaaaattcaaattccccgtctaaatttaccccttatcagctttttttcggagctcttgctaaaaattcgaatttcgaggggtacggtagctccaaaagtacgaaaattttgaatttttttggaaaaaaagcttttttcagaaattttcaaggcttctcttgctaaaattcggattccccgtctaattttacccccattggaacttcttcagggcctctgagccgattttcgattttcgaggggtacggtagctccaaaagtacgcaaacaccgagtgccttgcgtactcggcaccgaactttacgacaattcgtccaaattggctgaaaaccagggatcggggataaaaagtgatggagaactcgaattttgtattgaaaatctgcgaaaatcactgaaaatggctgaaaatcacaagtttttaggaaaaaatgaaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgttggcaaaaatacggtatttattcacattttcagcccaatttaaggctgaaaatgggaacaaatacagttttatgccatcaatccgagtaggagcacaaaagtcacaggggaaatatcgatttttggagattttagggattgaaactgaaaattcgagaaaaatcacgagaacccctagtttttatcgattttccgctaaaaattccaaattttcagaccccatccagcctgtgccaggcttctgcggactttgagacctgcgtccggtcccagtactctgcaacttgcggcccggaggtctcctggtgggcttgtgaacgtacacgacgtggattattgattgattccgactgcccatcggatagctgcagtttggtggctcaggaagctcctgggtccgcaaaaagcgtgtttcagcgggagcccgaggtggcacacgtgattcggagcattttggagcagaaagactgacaacttgatttttttttcgtttggagaataaatgtgagataaaactgagaattatttggttcattcaacaaaaaacatggaaatcaacaaaaaattctattaccactttaaaactacctaaaatcacataaaaagattggaaattcttgaaaaacgtataaaattatcattcctgacactctcagcttcaaaatgacccccatcatggctaggttccgacgatttcgatattttgggtcccaccacgcgggttactgtagcaccggtttcagctgtgtcggaacttccataactcaaaatcgtcggagcataggcatgatgggggtcatttgaaagctctcggtgagctgaagccgataaaaaaaattttattgtgaaaacaattctgtaacgaaaaaaaattggaaaacaaaataaaaattttttaaaaatttccaaaaaaatctatcaatacccggtggctcttttcttcaaaatttccatcttttcatgctccgtaacctgctggtaacctctaaattgtacactaatatcaccaaaaccgctagtcaaagttcgaacagttttcgacaaattctcagtttcagaaagtggtaaaattgcgcaaattctgcggatttccgtcgattctgtggcatccgagtgctcgaaatgagcccgtcgtcgcagaagctcgttgagaatcggttgagttgggtcgtcgttgcggatctcgatttgtacctccattaccggctcagtgagcaccatttcgccgctggacagcgcttcggacacacatttttgggcgcatgcggatactgaaaatatgggaaaaaatagaaattgaggggaatttggtcgaatttgaaaaaaaatagaaattttttttttcaaaaaaatttaaacttttcatttttaaagaaattttgttacaaaattcatatttctgacagtctcagcttcccaatgacgcccatattgcccaggttccgtcgattttaaaattttgggtctcgccacgcggtagcaccggttttagctgtgtcgaaactcaaaatggtcagaacataggcatgtcgggggtcattcgaaagctctcggtgagctggaaaaatggaactaaggaacatttggtaaaaagcttctttgaaaaaaattggaaagaaaaacttttgaatttttttttcaaaaaaattgaaaaatttcacaaaaaattgaaaaattgaattttccctcagaatcgttaacaaattcacattcctgacagtctcagctttccaatgacccccatcaagccccatttccgtcgtttttgaaaatttcgggtctcgccacgcggggtactgtagcaccaatttcagctgtgtcggaacttccataactcaaaatcgtcggaaactaggcatgatggtggtcattttgaaggtctcggtgagcagaatgcaattaaattgaaagaaaattgtaaaaattaatttttaaaaatttcaaaaaaattgacgaaatgttttttttcgaaagtctaaaaatttcacaaatatcgaatttcttctaaaatcgttaacaagttcatattcctcacagtctcagctttcgaaagacccccatcatgccccatttcggttaattttgaaaatttgggtcccaccacgcgggatactgtagcaccagtttcagctgtgtcgatgttcaaaatcgtcggaacctaggcatgatgggggtcattcgctagctctcggtgagcagaatgcaataaaaatgaaagaaaactataaacaattattttttaaaaaattcaaaaaattttcgaaaaaatccaaaaattttctaaaatattgaattttctctcaaaatcgttaataaattcgcattcctcacattatcagctttcaaatgacccccatcatgccctagttccgtcgattttgaaattttgggtctcgccacgcggggtactgtagcaccagtttcagctgtgtcggaactcaaaatcgtcggaacctaggcatgttgggggtcattttgaagctctcggtcaacagaatgcaataaaattgaaagaaaactataaaaaattattttgaaaaaggttcaaaaaaaaaattttttttttcgaaaaagtcgaaaaatttcaaaaatctcgaattttcgtttaaaatcgttaacaatttcgcattctgcacattctcagctttaaaatgacccccatattgcccaggttccgtcgattttgaaattttgggtctcaccacgcgggttactgtagcaccaatttcagctgtgtcgaaactaaaaatcgtcggaacataggcatgttgggggtcattttgaagctctcggtgagctgggagcaatggtactaagcaaaatttgaaaaagtgtaatctgaagggaagaaagggaaaatttcagattttcctgaaaacctacacagcgccggattaatctttcctccactaacaatacactcggtcagcaccactcgaacagcctgaaaaaaattaattttttgctatttcaggcctaaaagcctaaaatatccagattttcagtcttttcaagccttacatggactggatacgacgctagcggcccattttgcagagcatttgagcatccttcgttgacggctttttgccagtctaaacgcacaggacgggccgtttgtgggagttcaagctcgatctgaaagcccgaatttttcagatttttcagataaaatcgatatttccaacttttttgaatggaatatgggcctgagtcggctccaatctcatagttaactgcacaaattcgggccgcttcttctcactgagcccgtcttccacttttgccgtgtagctgagctcttcggtgagcatttcgcggtaggcgacctgaaaaatattgattttttagcgtaaaaatatcgatttttagcggaaaattcttgatttttagcggaaatttattgtttttttagcggaaaattattgattttcaactggtgctacagtaccccgcgtggcgagacccaaaatttaaaaatcgacagaaatggaccttgacgggggtcattttaaggtgagaatgtgcggaatgcgaatttttcaacgaaattttgctaaaaatgaaacgtttcaaattttttgaaaaaaattcagaagttgttttttccgattttttttttgaaaaaacatttttttttcaaactttcctaacttccattgttcccagctcaccgagagcttacaaatgacccccaacatgcctatgttccgacgattttgagtttcgacacagctgaaactgatgctacagtaccccgcgtggcgggacccaagttttcaaaattagcggaacctaggcaatatgggtctttttgaagctgagaatgtacggaatgcgaatttgttaacgattttaagaaaaaattcaatatttttgattttttttcgaaaaaaaattcagatattttattttctattttttccgaaaaaacatgttttctcaaaatttccttagttccattgttcccagctcaccgagagcttttaaatgacccccaacatgcctatgctccgacgattatgagtaccccgacacagctgaaaccggtgcacagtaacccgcgtggcgggacccaaaatttaaaaatcgacggaatataggcgtgtagggtgtcattttgaagcttagagtgtaaggaatatgaatttgtagacaattttaagaaaaaatgaaaaacattttttttttgaaatttttaaaaaattaaaaattttcttcaaaactattttttcgacttttttccaatttcaatgttcccagctcaccgagagctttaaaatgacccccaacatgcctatgctccgacgattatgagtaccccgacacagctgaaactggagctacagtaacacgcgtggcgagacccaaaatatcgaaatcgagggaatataggcttgtagggggttattttgaagctgagagtgtaaggaatatgaattttataacaaaattttgctaaaaatcaaaaaatttgaatttttaccaattttttggccaaaaatcgaaaatttattgatttttccttatttttggtcaatttctaatggttttttatcgattttcatcgattttttcccatttttcacctgtaatttcccaataaaaacgtccaatttatagtttctcttgagccgatccttaatcgcttccaaatgcagctcgccctgtgtttccacaatagtttggccggtatcccgatcaaatcgaattttcatcgacggatcctcccgcgtgagctcttccaaagccttattaaactgattaagctgacgattcgacggaggctctatacaacaaaagaacaccgcatccggtgactcgattcccgaaaaaactacggaatttccatcttttgggcttaacagtgagctctcggagcccgcaagcttctgacatgctttttcagcggaggcggagcttgcgactaccgtatccccggttactgtagtctgaaggcctgcgacaacggtgatatttccggcggagacttgctcgacgagccggagctcatctgcatacggagtaaagagctttaggggtccctctgacgtcatttgggaggtattgaagatggtcgagttgttgtggagagagcccgtgtagattcgcatgtaggagagttgaccgcgacgtttgtcgtgggttatctggaattttttgggcgggaaatttgaatttttgagagattttaagtgggaaatttgatttttcgggagatttttacctagaaattcaaattcccgggtggttttaagggaaaaattccaattttcagtgattttaacctaaaaattcgaatttttgagtgatttttcatccagaaatcggagtttttaagtggaaaactcgacttcccagttgatttttagcggtaaattgaaaaattccgtgatttttcaccaagaaatttgaattcccgggtgattttagacgggaaatttgaatttttcagtgaattttaggtgggaaattcaaatttttgagggatttttcacccagaaatcggagtttttgtgtgattttgacataaaaattcaacttcccgggtgattttaggcgggaaatttgaatttttgagtgattttaaggagaaattcaaattttagggtcgaaaattcaaatttctaggtgatttttacgtagaacttcgaattcccgggtattttgaagcgggaaatttgaattttgtgtgaattttaggtgggaaattttaaattttgggtaatttttagcgggaaatttgaatttttaggtgaactttcactcagaaattcaaatttttgagtaatttggacttggaaattcaaattcccgggtaactttaagcggagaatttgaatttttgagtgattttaagcgggaaattgccatttttgagtaatttttacctaaaaattcaaattcccgggtgattttaagcgggaaatttgaatttattagtgattttgagtggaaaatttgaatttttcagtgaattttcacccagaaattggaattttttaagcaattttaagtgggaaatttgaatttttagtcggaaattcaaattcccagatgatttttagcggcaaattcaaattttcagtgacttttcaccaagaaatttgaattccctggtgattttgacccagaaattcgaatttttaagtgattttgagtggaaattttgaatttttgagtgatttttagctgtaaattcaaattttcggtgaattttcactcagaaattcaaattcccgggtgattttcaaacgggaaatttgaattttcagtgattttaagcgggaaattcaatttcccgggtgattttaggcgggaaatttgattttttgtgaattttaggcgggacatttgaatttttgagttaatttttacccagaaattgtcaattttgagtgatttttagtgaaaaattcaaattcccgggtgattttaggtgggaaattcaaattcccgggtgattttacgtgggaaattaaaatttccacctatcccagctctaccttaaacaccaatccactcaaatcctctccaaaaacgtctcgaaactcccgattcctcatctccggcgccgggaaaaaatccacaactgcgtcgagcaccggcttcacacaatgcacatttttcaccgccgagccacacgaaatcgtggcgattttcgacgcgcaagtgagctctcggagcacacttttcatctcgatgacgtcaattttctccgaatttccatcaaattcatcgaggaatttgctctgaaaatcggcatgactatcggccagcgtgaagcagagctctgacttgtgctcggcgagcaactcggcttctggcgagtttttcgggggattttgccaatttttggagtttccggggagcatttttgagtgtaaaatgtccagaaatcctcgattaaatccccgattttcgggtagcggcaccacaagcttcacagctcgaacgccaagcttctgctcaacagaatccaccgaattttcgaaatttgccgccaatttgtccattttattaatgaaaaagtgcgcgggaagtttgaattttgagctttgccgccaaacagtcaaagtttgaggttgaacacccgctgatccatcgattactacgacaattccgtcaagaacacgaacacatcgctcaacttcgactgaaatttcgggttttttgggtctcgccacgacaatgcggggtactgtagtagtactgtacctcgaaaatccacgtggcccggtgtatcgattaaattgatccgatggcctttccagtcgagatttacagccgccgattggactgtgattcctggaaatttatggattttttcgattttttcagcggaaaaatcgaaaatttcaaattttttgcctaaaaaattgaaaattttggaattttgaccaattttttatttaaaaaatggccaaaattcaattttttttgattttttggccaaataattggccaaaatcagccaaaaattgaattttgtactattttttagccgaaaattggccaaaactttattttttccctaaaaaattggccaaacaccaaattttttgattttttaggcaaaaaaaggaaaaatttgaattttaccaattttaattttttgccaaaaatttaacctttggccaattttttagtgaaaaattcaaaaaatttgaatcttgcttttaggcaaaaaataaaaaaaatttgaaatttagccaatttttggtcaaaaaattcaatttttttgattttttcactgaaaattgaccaaaattcacaattttcgattttttgcctaaaaaattggccaattttcgattttttgcctaaaaaattaataaattcgaattttgagcaattttttgactaacaaatcgaaaaaaataattttttaatttttttactaaataattcaaattttttgattttttggctcaaaaatcgaaaaaattagcaaaaaaaatttgaattttgagtaattttttagcaaaaaaatcgataaatttgattttttattgattttttagcctaaaaatcgaaaaaaaaaagatttttactaatttttagccaaaaaatcggaaaattcgaattttaataaattttttggccaaaaattggcaaaataccggaaaattcgaaatttggtcaattttttagctaaaaaaattcaaattttttgttttttgacttttaaccaattttttgactaaaagatcgataaatttgattttttataatttttaaatccaaaaaattgatttttgaccaattttttagccaaaaatcgaaaattttgaatttggatctatttttagtcgaaaattggccgaaattcaaattttttgattttttggcagaaaaaattaataaattcgaatttttgaccaattttttaggcaaaaatttgaattttggccaattttttggacaaaaaatcgaaaaatttgagttttggccaattttttaggcaaaaaatcgaaaattttgaaatttggccaattttttagctaaaaaaattcaaattttttgttttttgacttttaaccaattttttgactaaaagatcgataaatttgattttttataatttttaaatccaaaaaattgatttttggccaaaagatcaaaaaatttgacttttggccaattttttaagcaaaaaatcgaaaatcttgaatttatctggaggaaaattcaaatttttttgatttttttcctaaaaattggccaaaatgaaaatttttcgattttttgtccaaaaaattggccaaaattcaaattttttgattggccaattttttaggcaaaaaatcgaaaattttgaaatttttcgattttttaaccaaaaaaatcgaaattttgaaaatcttgaatttattttaataaaaattagccaaaaattgaatttttactaaaatattggagaaaattgaaaattcaaattttgacaatttttttgaccaaaaaatcggaattttttaatcatttccaatttttacctgaaaaatcggtcaaaattcaaatttttcggctaaaaaatcgaaaattttgaattttgattatttttggcgaaaaaatcagaattttattgattttttagcaaaaaattatcgatttttcttcatttttttcctccaattttccctaccccgttccctctcgatatccaaaaaatcggtgaccgtattccctttatccacgtggcctgccacgtggatagccccagccaagtacagtaaccgctcggttactgtagttttgccggcgtcaacgtgcgcaataactccgatatttcggagttttgacggcgccggcggtggcggtggggtactgtagcaccgccggctcagcagcagcagcagacggagcatatatgtgtgtgtaggaattgcgctgaaaaatcgataaattttgaattttttcgaaaatttgaatttttccgtagaaaaatgggaaaaaattggaaattattgaaaatttacaaattttttcatttttttttttggcaaaaactttgtaaaattttttagattttcagagaaaaaatcggattttcaaatttttttgcgaaaaattcgaaaaaatcaatttttttgggggaaatttgaatttttcaatgaaattttcaaaatttttcagtttctggaggtttttgtcaaaaaaaatcaatttttctggaaaaaaatcggtaaattttaaattttaatcggattttttcaaaaatttgattttctcagtagaaaaattcgcgaaaaccggaaatttttggaaatcgagtttttaaaaaaattctccaagttttagcactttttttcaaaaaattcaaaaaatacggcaatttttcgaattttcaggaaaaaaaatccatttttggcggaaaatttgaattttttttcaaaattttcaattttttttcggactcaaaaacatgaaaaatggatgagaacctctttttcgcaaaaaaaaaaaattttaaataattttttccgcaaaaattgagttcattttacatttcagaagggaggaaatatggataaaatccaaaattttcacaaaaaaaggggtaaaaaatgaggaaaagcggcggaaaattgtgatggagaataaattaggaaaaaaatcgcaaaaaattggggaaaaatgctcaaaaatgagcattttttacggcgaaactggggaaaaacgggagaaaatgggaaaaatcggaaatttttagagcaaaaaaaaaatgggcgaaaaatcggaaatttaggcgacttggtgtccagatttgcggagttcctccttcaattgcttcgaaaattcgctttcatgagtctcatcatcccaattatcctcccaaacgttcacatcatcctcttctccttcggcacgctcagcccattcctgcaaaattttttttttagaaaaatcgatttttttttgaatttttcagagaaaattcaattttaaaaaatattttgtttgaggaaattctgaaaatttttatactttttttttggattttcagccatttttttcgtaaaaattgtaattttccgattttttggctaaaaatttggtcaaaattcgaatttgccgaatttttcaccaaataatttgtcaaaatccaaatttttcgattttttgcccaaaattaaaaatttcacattttttggaaaattcgaatttttttttgaataaaatttgaaaacattccagactttatgaaatgtttggtaatttttttgttgatattttgcaatttttcttgacttccattttctcttgacagccatttttccgctaaaaatagataaaaattcaaaattttggacttttttggtcagaaattggattttttagccaaaattcgaattttttgaatttctccgacaaaaaatggataaaatagcggatttttcagtgaaaattcgagtttttaaggaaaaatatcgatttttctgaaatttgcatcaaaattccaaatttcggtactttaatttcgcctaaaaacctattttcccgaatttttacaggaaattatcgattttttggaattttcagacaaaaaattaaaaaaaaatcgctgagtttgtcagagaaaataggattttttttttcgattttttttgaggaaattctgaaaatttttatacttttttttttggattttcagccattttttttggccaaaaaatttgatcaaaattcaactgttccgatttttccgtcaaaaaattggtaaaaatttaaattttctaattttttgactaaaaaaatgggccaaattcaaaatttttggacaaaaaatttgataaaaatcaatttttttacgattttttgccttaaaaattggtaaaaattcaatttttccgattactcggccaaaaattggccaaaattccaattttctaattttttggacaaaaaattggttaaaagtcgattattccgattttttagttaaaaaattggccaaattttgaattttccgatttttcggcaaaaagttcgcaaaaaatcaaaatttctgatttttttttggccgaaaatttgcaaaattttcaaatttaccgattttttttaaatagcgtatttttcagtgaaaaattgatttttttttttggtttttaagggaaatttcgaaatttttcttatttttcccaatttttttttcgatgttttggctaaaaatagccaaaaattccgatttttcggcttaaaatccgtcaattttcacaattttttcgccattttcctctacctgaaccggaaattcctcaaattcttcctcctcgaattccttcttctcaacgacagcagtgactggaacagccgagcttttcacgtcttttttggcggcggtagatgacatttcgactggaaataggctgaaaataggcttaaaaggctgaaaaatcggataaaaaaggtagaaatggcaaaaaaccggttaaaaatagaaaaatgaacaaaaaatacagtttttctgaataatttttgcgttgaaacaaacaatttgaaaataaaaaaaataaaaacaataaaataacaaagaaaaatcctataaaacaccatttttgcagggaaaatcgtgaaaaatccaaatttttaggcaaaaaaaaaatggatttttgaataaaaaactaaaattttacgttaagaattgaaaatttgagtgaaaattcaaatttttgagccaaaaattgaatttctagctgaaaaattggcatttcaatagaaaattcaaaattttaaactaaatttccaggtttctagcttgaaaatcaatttttggagcaaatttgccatttttaaagccgaaaatttacattttaacgtcaaaactcgaaaaatgcgcgtttttgacttgaaaaatgcaaaatttgctccaaaaattgatttttaagctagaaaactggaaatttagttttaaaattcgaattttccattgaaattccaacttttcagctagaaatccaaattttagctcgaaaattcgaaaatttcggctaaaaattcagaatttttaataaaatattcgaaaattgaatttaaagccaaaaataatcgaaatttgaggtcaaaaattgcgaaattttcgggattttcaattttcaaaaggtgaaaaattcagtttcacataaaaatggccagttttaagtcaaaaacgctcattttcagtttaaaaatacacatttttaactgaaaattactaaattttaagtcaaaaaatactcaattttggctcaaaaatgctcatttttaagtcaaaaattgaattttatatcgaaaattggccatttttaggtcaaaaatactcaattttaggccaaaattcttatttttaggacgaaaaagctcaattttgcctcaaaaatgctcatttttagctccaaaattgaattttacatcgaaaattggtcatttttaacccaaaaatgctcatttttagctcaaaaactccaaattttcacgattttcccaacaaaaacagtgtaaaaactactataaatctacaacgaaaaaaaacgacatggtgcatcaaatctcctgctgctccttctccttcttcgcctcctccaacttctcagtagttctcaacggaagagcttttgcctcagcgtgctgcttttcgacttgctccgcgctgagcatctgtgtaccgaccattccctgtttcgcgtcaatccatttcggatagattttaccgtgaagcctccattctccgtcgactacggcaatatgattctcaaaaactacgtattcgacgacatctttctcctcgtcctcggagcctgcagatttggagcatttttgggtggaaaagcttggaaaattcggtgaaaatcaaaattttccgcattttttacccaaaaattcaaaaaattttggatattttcgaattttccgcgttattgagcgaagattccaaaatttttgcatttttgagcagttttgggtggaaaagcttggaaaattcggtgaaaatcggatttttccgcattttttacccgaaaattcttaaattttgactggaaaatgcaaaatgtgctcgaaaaattgctttttttagctagaaatctggaatttccgtctaaaagcatgatttttccacgtcaaatccaaaatttcagctgaaaattgaatttttcactcaaatattcgaaaatttgcatgtttttagccaagaattcaaagtttcgaatcaaaaaatgggaaatgttgagtttcacatcgaaaatatcgatttttgtgctcaaaaacgctaatttccgcactttttccacagaaaatcagaaaatttgggtttttgtttgaatttttgccgtttttccctctaaattagcatttttccacatttttgagccaaaatttcaaatttttggctattttccgatctttcaaggttttccaacacaaaatttgattttctcattgaaaaaacctaattttttgaaaatctcactcaaaatttgaattcgagggttacggtagctttggaaggacgcaaacaccaaatttcacgcaatttacgcaaaaattcgctgaatagcagtcacaggggtgacattttgcgggtaattcaaattttcgcatgaaaattaagctaaaattcggattctccgtccaatttgaccctaattatccatttttccgagcctttaagcctattttcgaatttcgagggttacggtagccccaaaagtacgcaaacaccaaggcttgcgtactcggcaccgaactttacggcatttagcccaaattggctgaaaaccgagtttcgggtgttaaaagtgatgaaaaatttgaatttcgtgttgaaaatctgtgaaaatagaaagttttccgggaaaaatgaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcagcaaatttgaggctgaaaatgcaaaaaatacagtttttaagccaaaaaaccgagtagaagcacacaagtcacggaaaattgcagtttttagcgatttcatgtaaaaattttgtgaaaaatggattttttgaggaataatcgtagaaaaccagggcaaatgggggaaattgtcgattttttggggaaaaatcgcgaaaaacctggaaattgtcgatttttataggaaaaatcgacggaaaaaccaaaaaagtacgggaattatcaatttttcgaattttccgtctgaaattcaatttttacccaataaaagccctccaaatcgatcataaactgcaagcttctgtcgtgtatgcattcgtacagtaatctgtgcaatatcatttccagatttcggcggattatcgaaacatcgaacggcaacgactcgagacggttccaacactgaaatgagctcgaaacgaacggagccattttcaacgtcgggccacattttctgcaaaaaaatcggggttttagggggaattttgggggaaaggtgggaaaatttgagctaaaaatggagaattttgggtaaaaattgggtttttaatgattttttcggcaaaaaattgggatttttcggctaaaaattggagaattttagcgaaatttgctccgaattctgggttttggggtgaaaaactcatttttcggcaatttttcataaaaatcgcacgatttttgccgatttttcgggctttttgaataatttttggaatttttggtgggaaaaatgcccttttccccgtttttttggtgcgaaaatctcattttttcatggatttccggcaattttgccgatttttcgagaaatttcccaccattttcacaaaaaacccggttttccgtcaatttttgcgtgaaaatctcaatttttaaaagcgattccgagtaatttcgggtcattttctcaattttcgtcagttttcgatgattttttttttaatcgatttttcggtaaatttctgcaatttcgcgttaataatccgtttttttcggtaattttcactgatttaaatgaaatatcagtgttttcgcgaattttcttcatttttctccaaaattcccaatctttacgccaaaaattttctcaattttttcgtaattttgctcggattttcatttaattttcagtttctcgcgtaatttcttgatttttttccaaaattcctcaattttgcgtcatttttctcgtattttcaccaaattttcagttttttcgtctattttcttcatttttatccaaatttcttcaattttgcgccattttcctcaaattttcacgaatttcaatccaaaaaccgtaccgcaaacgcgtattcggtaatatatttatacattgccgtcttatccctctgttccaatgctcggtgagcctgtacatagatatcttcggcttttgcgcaaaacgttttaatatcaaatttctcgaatccctgcttcttgcgaattcgattcgttcccatacgccaattgtagaatttgtgttgaattcgctgcttaacctcgtcgaatttgttattaacgtcggtaaatgagccaggattttctggtgggacatagggatcggcgattccgtctgaaaattgaggtttttaggtgaaaaattggaatttttagggaaaatttaaagcttttaagtgaaaatttgagatttttaggtgaaaaaatagccaaaaattgaattttggccaattttttgggcaaaaaatcaaaaattctgaattttggccaattttttaggcaaaaaatcaaaaaaatttggattttggccaattttttagacaaaaatcaaaaaatttgaattttggccaatttttttaggcaaaaagtcaaaaaatttggattttggccaatttttttaggcaaaaaatcaaaaaaatttggattttggccaattttttaggcaaaaaatcaaaaaaatttgaattttggccaattttttgggtaaaaaatcagaaaatttggctttttaccaattttttaactaaaaatcggaaaattctgaattttggccaattttttaggcaaaaagtcaaaaattctgaattttggccaattttttaggcaaaaattcgaaaaattctgaattttggccaattttttagcaaaaatatacgaaaaataggtttttaggcaaaatctgaaacaaaaaatggctgaaaatctagagaaatctgtaattttttcgaaaatgttccctttcaagtgaaaaattgagattttcaggtaaaaattggtaagttgagggaaaatttgaggtttttctgtgaaattttgagaatttcaggtaaaatataggtgtttttaagtgaaaaatcgagcatttagctgaaaaactgctacttttcagtgaaatttaggagattttagctgaaaaacagttactttcatgtgaaaatttggattgttggatgaaaatttgcaattttcagcgataatttgtgatttttagtgaaaatttggcatttttaagtaaaaaccgtcaatttcatgaagaaaacaatatttttctgctgaaaatcgggattttcagtgaaaaatcgcgattttttgtgaaattcggccatttctccactcacaaatcgactgaaacgtgacttgtgcctcattccacacacgtggctgtgcctctttatacggattaattccccgtttcagtagttctgtacgcatttcgccgggcgacatttcggcttctttttcgcgagccgagtcctcgggaagctcgattagaagggttttacggccgcgcatctgcaaaaattttggtttttcgtgaaaaaatcgggggttttccaggtttttcacgtagaaatcgtgattttcctctcattttccgctttttttccaacaaaattcgggttttttcgcgtgaaaacgtcaatttttggcctttttccgccaaaaaaatgcaaattattcacccttctgaacaatttctcgttgacgtgcgtatttctgttggcttttgccttgttggacctcgtaactcccgtaaatcgcttcatatcggtggcttcttggtgatgatgtacgccagctagttgagttgtgatcgcagccgtcggctggacaaaggagcggacgagcgcccgtccaagcatttttttgaactgaaaattgggatttttagcgtggaaattcgttaaaaaacggtttaatcaactaaatttcactagaaaatacgcgaaacccgggaaaacccggtggaaaatcgaattttcgcgaaatttcccggtttttcacgatttctaggctttcacccgaatttcccgggtgaaatcgatgaatttaggcgttaaatatagcgaaaaaccctgaaaaacacgaattttcacccaaaaacccgaaaaaaaccgaaaaattccgcagaaaatcaagaaaaatgatgaaaattccggcgaaaataaaaacaaataaaaaatcatgacgttgcgatggagcgcacttgcaacatgcgcgtagggttcggtgtttgcggaccgcgcggtgtttgcgtacttttatggattttttttttttgataatttttttggcgattttcggggaaatttggcgatttttagggataaattttgctgaaaattcaaaaaattcaattttttatcgctaaaatcaccattttgaccaggaaaaccttggatttttccagaaaatgacggattacatggcacaaatgctcaatgagctcatgggatcgcagagagacgcgaatcccggcgaggtttacccaattttgccccaaatttctaattttttgaatttatagcgcagagaaattcgctacgacgacccaaatgtgtgcaccgacttccttgttggcttctgtacgcacgatatatttaggaatacgaaaaatgacttgggattctgcaaatatgtaggattttttgattttcttggtttttccgcgaaaaaaacccgaaattttatcgattttcagacgacacacgacgaaaatctcaaaaattcgtataaaaactcggataaaaagtggcgaatgggatttgagaagcgattcctggagcggattcgccgaattcatgaagatgttcgccggaagattcagaagcacgaagatcggctcgccgtgactcagggcgagtcgaaaagtgccgaggagacgtttgggcagaaaattctggaaattgagcagcgccgggagcaattgacgaaaaaaatggaggatttgatggatgaagccgcgttggagggagaaaaaggaaatgtggacgcagcgcagaccgctggtacggaggaaatccagaaaaacacctgaaaatttggaaaaaaacgagatttctgttaaaaaattcgggaaaaccctgaaatttagccgaaaatccccatttttcacctaaaagagttcgaaaaaccgatttttaaccccaaaaaatcaactttgtgtcaattttcgccctagaatcatcaacaaaaaaaatcgcaaaaaagctgaaaactctaatttttaagaaaaacccacaaaaatggtcaaaaatctgcatttttaagtggaaatatacacttttcggctgattttcgcccaaaaatccacaaattatgctggaaaactgctgaaaatgcccattttcatctgaaaaactgagaaaaattcaaaattttcaggaaaagcccaaaaattcgcgaaaaaactcattttccacctaaaaaattcaaatttcccgctaaaaaacgaatttcagttgatcgtgcggacaaggcaaaggtggaagtcgaagagctcactcaggaagcggaaaaattgaaatcggagaaggaaagagccataaatatggaggaaaatgtcactgcaggtgctgaaaatcgaaattttcagttaaaaattacaattttcgctggaaaaactgatttttcgacgaattttcaggatttttaggctattttttgcaaattttgagacatttgcagataattttcagtgaaattacctgattttttgaatttttatgaattttaggtgcatttcaacgaaatttagcgatttttaacccgtttttccactgaaattcccatttttagactattttcacaataaaatccctcaaaaatgcgattttcaggctatttatccttgaaaaatgctgaaaattacaattttaaactcattttttctagtaaaatcactcaaaaatacattttaaccccatttttccctttaaaaatgcgattttcagcacattttaccctaaaaatcacataaaaagacgattttcagccaattttccactaaattcaccctaattttcaaaaaattctactttttagccaatttctcgacaaaaatacgattatcaggtcattttaccaataaaatctcaaaaaatttcattaaaaaactgaaaattatagtttaaacccatctttccattaaaatcacaaaaaaaaaactatttttctactaaaatcaccggctaaccgctcgaaaatttcagttttcaacacatttcacacaaaaaatgcaattttaagctcatttttccaataaaatcacataaaaatgcgattttctgcatattttactctaaaaatcccacaaaaatacgattttcaggctactttccccttaaaaatgctgaaaattacaattttaaactcatttttctcgtaaaattactcaaaaatacgatttttaaccatttttcctctaatataacttaaaaatacggattttaacccattttaagctaattttccactaaaactgctcagaattgacattttcggtccatttttaacttaaattaactcaaaattcccatctttaaagctattttcacaccaaaatgactcaaaaatacgatttttaaccatttttccactaatatcactaaaaaatacggattttaacccattttaagctaattttcctctaaaactactcaaaattgacattttaggcccatttgtaacttaaaataactcaaaattcccttctttaaaactattttcacactaaatccactcaaaaatacgcttttaagctcttttttccaataaatgtactaaaatttgtagttttcagctcaatttcccactaaaatcactcgaaaaatacgattttaagcccatttttccactattttcactaaaaaatacggattttaacccattttaagctaatttttctcgtaaaattactcaaaaatacgatttttaactatttttccactaatatcattgaaaaatacggattttaatctattttaagctaattttccactaaaactactcaaaaacacgatttttaaccatttttccactaaaatcactcgaaaaatacgatttttaaccattttaagctaattttctactcaaaattgtcattttaggcctatttttagaacacttttccactaaattcactcgaaaaatacgattttcagcccatttttccactattttcactcaaaaatcttccaggaaaccggcaaatgcaagtgtgtcaaatctgcggctgtttcatgctccaaaacgatgctccacagcgtgtcgacgatcatttaaccggaaaattgcacattgcctaccaacaaatctccgatacaattaaaacaatcgaactggaaatgcagacgagtcagcagaaggctgagatgaagcgaaaacgttcgagaagccgatctacggatcgaggcgcggatcggaaacgatctacggagcagcaccatcacagtcatcggagcagccgggatcatagagatcatcggcaccgggatcatcgtggagagcacagagagcacagagagcacaaagagcaccggagagatgatcggcatcgatcggagagatcagaaagatcagaaagatcggaaagatccgatagagagcgaaaagtacggttttctcctgaaaactgactgaaaattcgtgaaaaattacccggaaaaccggaattttcatccaaaaacacggaatttggctggaaatccgcgaaaaataacctgaaaattcagaattttcggccaaaaatggaatttgactgaaaattcgcgaaaaatgacctaaaaatcagaattttcagccaaaattcatgaaaaccatgaaatttggctgaaaaatcgccaaaaaatgaccgaaaaattagaattttcagccaaaacacagaatttggctgaaaattcgctgaaatttacccaaaaatcagaattatcggtcaaaattccgtaaattcacgggattttggctgaaaatcagaattttcggccaaaattcatgaaaaaagtggaatttggctgaaaatcagcgaaaaatgacataaaaattagaattttgagccaaaaaatggaatttgatttgaaaattcgcgaaaagtaaccggaaattcagaattttcagccaaaattcatgaaaaacatggagcctaactgaaaattcgcgaaaaatgaccgcaaaaccagaattttcagttaaaatttatgaaaaccatggaatttgactgaaaattgcataattttgaagatttacctgcaaaaatcgatattttttgcttttttccctgaaaaatcgataaaataccgattttcaagtggaaatcgataaattttggggatttttttagaaaaagcgataatcttttgatttttcactggaaaatcgataaatttcgaacaagactttgtaaaaatcgaaaatttttggcttttctaactgaaaaatcgataattttctaatttttaactaaaaaatcactgactttctaatttttcctgtaaaaaatcgataaaaaacccaaaatttctcttcgaaaatcgatgtttttcggctttttcactaaaatctcaataattttcaaatttttcgggaaaaaatctcgatttttggctggaaaattaacaattttcacatttttcctgtaaaaaatcaataaatttccacattttataccagaaaatcgataaattcccgaaatttctcttcgaaaatcgataattttcagcgccactagaccgccgccgccgccgtcgtgccgggacccaaaattctccaaatttttgcacaatcttctcttgttagctccccaccaaaagtacgtttccttcagcgattcgcaggtgagtggaccgcccctctaattacagattttcagattttttgggcctgaaaataggccgttttaagcccaattttcgctcggccccgcccccttttcaggtttctgtatccccggaatcttgttcgccgatctatgaaattttgtcagtgtgtgttgatcagttagttgactatcatcgacccaaaattatcgatttttcgggaaaaattattgatttttttcagatttctctatctacaccgagccgcccacacgttttcacctgctaattatcgatttttttaaattgattttttattatttatctctctgtagaatctttttggtctgtgaattggaataaaattgatttttcgaaaataaaaaaaataattttttttaggtttttaaaaagattttcgcgaaaaaatgaggattttgagagaaaaatcgatttttcgacaaaatttttgaaatttcagtggttttcatgtgaaaattttgaatttacgcgaattttttcaatatttcgacgattttcgctggcaaaaacttaaaatttaaggcatttttcgaagtttgaaaaaatttggccccaaaatcgattttttggccaaatttttggatttttagcggtttttttgtggaaaattcgaaaaaatgcttatttttgcgatattccaaggtttgagggcaaaaattggaaatttgaggcattttttgatttttggagaaatttgccgcaaaaatcaatttttcgatgaaatttttgaatttttagcgctttttgtgttaaaaattcgaatttattgcattttttctgatatttcgacgattttcgcgggcgaaaattgaagatttgaagcattttttcgattttttaagaaatttgccgcaaaaatcgatttttcaacgaaattttccggttttttacaagaaaaggggtttaaaacgcagttctcataaaattttacgtcttttttcaacaattttacctgaaaaaacccaaaattcacacggaaaacctctgtttttcggtaaaatcggtacaattcacctaaaaatgcaataatgcaagcgcgctccactgtacaatttcagttttttctgggcgcggaattcgaatttgaatgggtttttcgtcgattttcagccatttcccatcaatttttgccaattttcagtcaaaaaatgacgcccggcatcacttttcaccgcggaaacaagaaattaaagctaggaaaggcggaaatcaacgaggcaatcgagtttcccgaggattttgagttttgctcaatggaacaggagaggaggtgggtttttaaacaaatttcaactgaaaattgttaatttacactattaagtttgaatttgaagtaaactgtaaactgaaaaaaaacgtaatttttcactaaaaacggttttttttccagatttttcaaaaatttcgtcgatgacgtcacgagattcgacgaaaaaatggctcacaccacggcgagcatctacgacacggcaaccaacgaaatcgccacttggatccttaaaaaacccggaaaatcgtcgaaaacgaagggaatttcggttttttcgccgaatgagccgattgggacgttaaaatgtgctctggttcagtgtaattttacggatatttcccggttgattggtgattttcggcagaaattactggaaaaatccacggaaaatctggaagtcagggatcacttggtgacggagaacgacgcgattcacgagattattgatcggattttggagaaggtagccgcgaccgcgaccgcaacgcatgacgaatttcgattttttttttggttttgaacttgctcgacaaccaggaaaaatcgatttttccggaaaaaaacaccaatttccagaccgcaacgcacctgaaattcaaaaaaaaaaagtcgagaaaatcgattttccgtcaaccgcgacgcgaccgcaacgcatccaaatttatttaaaattcaaaatttccggaaaattatcgattttttaacgaaaaacaccaaatttccaaaccgcgacgcgactgctacgcacctaaaattcaggaaaattcaaattttcccaaaaactatcgatttttaaacgaaaaaaaggcaaatttccgaaccgcgacgcgaccgcaacgcatcgaaatttttaaaaaattcaaattttccagaccgcgacgcgaccgcaacgcaccatatttttaaaaaatttcaaatttttcagaacacgtcctcaacaacatgccacgtcatcataattcgtcaattcgaatctctccgtcccaatttctttgcgtctctcgtctctcttctcttctcaaattccacgtgtcgccgtctaattccacgtatcaaactgatgacgtgtgtctcgacgtcaccagcgttttttacgcaaaattgcggacttgagacggcaaatttgatggatttgacgcattttagggtgattttcgactacttttcggccatggcctaacttttgcacagtgtagaaaagttaggccatcgcttgaaaattgaagaataaactcggaaaagttggagaaaatcaaggaaaattcaaatttttcgattttttcgtgtaaaaactgcaaaaattttgaattcccgctgaaaaaatagtggtggcctaactttttatcaactgcaaaagttcggccaccagtgaaaaatcgtccaaatcgatgaaaattattttaaaaatctataaaaatttattttttaaaaaatcttagcaggtggccgaacttttcacgaaatgcaaaagttcggccacctgctaaaaactcgatttcttaccgaatttatcgattttgaagattttttacaggtggccgaacttttgcaggtgatgaaaagttcggccaccgcttgaaaattcaaaaattttcggaaaaaatctcccaaaaaccgccaatttttttccagttcaccaaactcgacgacattttttcaaaaataattgctaccggttgccacgcccacttcttgccgccccgcccaccgccaaaaaatattgaagaagacgatccggcactgctcaacaattttgactgcgctccggccgttttttcaggtaaacaatgtgtggaaaatttgaatttcccgcccaaaaaaaagtggtggccgaggtttttacaggttgcaaaagttcggccaccagggaaaaatcgcctaaaagcattaaaatcgatgaatatcagtaaaaatcaatatttctaactggtggccgaacttttcaccacctgcaaaagttcggccacctgttaaaaatcgtctaaatcgatgaaaattagtacaaaatcgagttttcagcacgtggccgaacttttcatcagttggaaaagttcggccaccagtgagaaaccgcataaaagtattaaaatcgataaaaatcagtgaaaaaccgaattttcagcgggtggccgaacttttcacattctgaaaaaattcggccaccagtgaaaaatcaaagcactaaaatcgactaaaattagtgaaaaatcgcctcaaagcattaaaatcgatgaaaattattgaaaaatcgatattttaacaggtggccgaacttttcccattctgcaaaagttcggccaccaatgaaaaatcgccaaaatcagtaaaaatcgatgtttttaacaggtggccgaacttttcatcagctgaaaaagttcggccacctgtgaaaaatctgcaaaaaaaaaaaagaaaaatcgccgaaaatcattaaaattgatgttttagctaatggccgaagttttgcaagtgatgaaaagttcggccacctgttgaaaatatcgatttttcaccgaatttatcgatttaaacgatttttcacacgtggccgaacttttcacaagttgcaaaagttcggccaccagaaaaaaaaaatcaattttttatcgatttttctcaaattttctacttgcaggacccttcatgaaatacctaaaaaatcgatttttcgcctgcgactactcgatttctgcactctctcgtgccatccaattggctcttcttcagaaatatctcgaggatcccctctggcgagaagatgctcacgacgcagagctccaaaaatacgaccgtgtgctccgtgtgtttctcgaagaatttggtgaaaatccggccgaaatcgacgaaaaattggctgaaaatctgcgatgccacgtggaaattcagtcggatggcggcgatttttggacgaaaattcgccacgaatcgatatttcaagaacgaaaatctgcgatttttgacggaaattccaccaatttgcactcatttttgcgtcgatttttggcaaaaatcactccaattgacccaaaattctgtgaaaaattggaaaatctacgcgaaaatctgatctccgctgagcaaaacccagaaaagtcggaaatttcgccggaaaaatcgataacaacgacacaaaaaatgagcttcctggagatgcagaagcagcgccgatcggctatgacggccaagcagcagaacccactgagaagtgcgaaaagtgcgattttttcgcatgttatggtacgaaaactgaggaaaattggtcaaaaaacaatgaaaatcgatgaaaaaccggcgattttagttggtggccgaacttttgcaaggtggaaaagttcggccatctgtgaaaaatgatggaaaactgagggtttcagtgaaaaaaaacgcgaaaaatcggctgttttcagtcggtggccgaacttttgcaaggtggaaaagttcggccatctgtgaaaaatgatggaaaactgagggtttcagtgaaaaatgggaaaaatttactgttttcagtcggtggccgaactttttcaagaacaaaaagttaggccaccagtggaaagtgatgaaaaattgaaattttcaatgagaaaacgcgaaaaattggctatttttgtagatggccgaacttttgcaaggtggaaaagttcggccatcagtgaaaaatgatggaaaactgagggtttcagtgaaaaaaacgcgaaaaatcggctgttttcagtcggtggccgaacttttgcaaggtggaaaagttcggccatctgtgaaaaagtttctaggtcatggcctaacttttcctcttcctgtaaatgttcggtcatcaaaagacacgtgaaacccagtaattttagagttggtggcctaactttctcaagtttccaaaattcggccaccgatgaaaaatcggtaaaacccagtttatcagatggtggccgaacttttgctagcaagaaaacctaggccactttgtaaagaagcattcgagtggtagccgaacctttcgaaaagttaggccacatgtggaaattctaaacatttgcttttgcagctaggccaccagcgaatccaactggtggccgaacttttcaagtttgcaaaagttcggccatcaatgaaaattcattaaacactgaaattttcaccaattttcaagaaaaaacaagcaatttcccaggtggcctaacttttcaagttcgcaaaagttcggccaccttggaaaatcaacgaaaatcgatgaaaaacagtaattttatccggtggccgaacttttcccaggatgaaaaagttcggccacccttcaaaaataggttttaaaacctttttacagaatctcttcgagaccacccttcaaccgtacccctccacgtggcgtaacgtcatcggcgccaatttctggatcgatgacgtcacgaagacgtcactggacgcgtccgacgagtacgatatcgaaaatgcgatgctcaacgcgaaaaaattcgaaaaaatgccaatttccgtcgcgtggaggtgcctgctgacgcatcgcaacttcaaatccgtaccgatggccgagtgggcggagctttttctcagaaatgtacggtttttgatgtctgcctacgcgcctgcctgcctacctgcctacttacttgcctgcctgcttatttgcccacaaacctagttgcctgcctacctacctacctaatttcctgcctacaagcctgcccacctcttcaatcacctacgtatctacctacctattggcctgcctacctatctacttcctgccctactgcctaccaattcacccgcctacctggctagttacatgcctacctacctatatacctacctgcctttttacctactgacctatttgagtgcctacctgcctatcggccctttatttctgcgtgcttatttccctgcttgtctacagacctacaagcctgcccacctgcctgcccaattgcctatttgcctgcctacctacctacctacttatctgcctcactaaccgcttatctacctacttgcttactagcctaccttcctgatctcctgccctactgcctaccaattcacctgactgcctgcctagttacattatctacctacctgcttcactacccgcctacctgcctgcctacctgcctacctacccaggcagacacacctaaaaaccatctaaaaacctccaaacttgcaggtacaacaaatgagccgaaaatcagcgaaaggcgcgtttttcgccgccgccggccaactcgagcacattgggctcattcgtggagccgtcgacaaaaagtcgacaaatgttcacgttctgtaccatccgatttcgtttattcccgatatttgaactatttttatttttttgcgaagattttcgaatgaattttgtgtattgattatttttgggtttttttttgtgaagctgaaattcgacgtaagagccaaaaattggagcgcgcccgacacgttcgggtttccgcagttatttgaaacacgaaattctggcttccctcataaattgaaatggaagagtaaaaaaagaaaaaaaaaacagactgactcaatgatatggtattcatgttttgtctcaattttgtagaaactcgaccagctccagagaaaactcgctcgctttctgcggaagaggctggagccgtcaaatatcgattcgcaatttgtgacaatatcgggaattttgctcggatctgattatcatgccagaacaaactagggtcatgtgtgtcctatcattgccagaatcaaaaagtagttccacctccgctgacgccaaaacacgaacatcaactggggttttctcttcgactaatctgtctttcgagctatcgaaaacaaaaattgtttgttttcagctgggttttgcttgttcgctctgttgataatatgaaaacaaaataggcgcgcacttcaaatatggtttttttgacgattttgtcctttgtttataactagggcttccatgtgagagcggtgcggcgacggcgcctcacgccagcctcacgccggccggccttcgccgtcgccggtcgccgcgctgtgcatattggcgtgagctccggtgtatgcgtagggaggatttacggctgcataccgtagttttgcaattctattttgcgcaacgtgattcaaaaagtggttattaggaagcggtcgacacattctgggttccgcgccgcactgtacatgcggatacgttgcggcgtttgtggcggcgtgaggctgtttgaggcgcctcatcggccggcgaaggcgccgcagcggcgccgagatggaatccctatttataacataaaataatattttactttgttcgtttgtatttcgaatttcgaaaattttcgaacacgaaaaaccgaaatatttcgaaattttcccaagtttcttcctcactcttattttccggccaatgacgtttgctatcttatcaattcactcttttccagtcccgcccttcattcacacaggttttaattttagttcagcatgattgcaattgtttttgactctttttcaaaattgcaggcgcctacacgccactttcagtactaaatcaagcaaaataatcccctctccctcactcttattttccgtccaggacgtttgctatcttatcaattcactcttttccagtcccgcccctttaagacggcgtataaaaagagtcaaggaagcattacagacataacccagtttcttcaagctactcattccaattgctcccagttcctcatgagtgataacgacgacaacgtgtacgaccccgacgaggtggaggaggtggatgagaaggatcggtacgaccccaacgatttggaggagatggagtatgtgaaggggctggaggagaaggatcggttctactttgacaaagacatgtacaatagtggcgatttagacgatttagaagaataccccgactactccaattagagaagtggagcaacacaaataatttttcttttgcaatcaagctgaactaaaattaaaacctgtgtgaataaaatttgttgtatttcattctaattgtctttgtaaatcggcagactcattaagaaaaatcaaactattttgcaaatacaatcaattctcatcttatcgaactatttcggaattggctggtgatttatgtatattgattattttcaaataggtttgcattttgttttcttccgagtaaaattgcgataaaaaggtgagaaaatagagaaacgtctagaagggtgtggaagtttcggggttcaggttctgcaaaattcagcaaaaaatgtgacaatattgtcatattttttgctcattttctggaattttgaaaaatgagcaaaacatgtggcaatattgcataaaatgtgacaatattgtcacattttttgtcaaaattggcctaaaatccgcaatttaatatttattttttttttcaaaataactattttaaataattgacaaacggtgaaaaatttggaaattttttaaaaattttttaacagttatattcggttatttgggtatattttctgttaatttgaagaaaaaaaatatttttgactctactccaccttcaattccccacattttatatttattagctattttatcaattctgctgttgattatttggaaatgttataggcccgaaaaattaaggagtaactaggcgtttgcgatttaacattacaagtttccaattcaccattttcttatagcacgtctcgtttttgatatatttataggttttcctgaagaaatagccaaaaatatgaataaactctctatttaaataataataatggcctaaaaatatacaaaacggtgtcgagtcgagtcgataatcacaattagacaaagaaattttaataattaactgaaaaaaaaacaaattcgcgagtgtagatgagaaaaatcaataaagctcgatggatatagaacttcacagatgaatgaggattttttttggggtacagagtgatctcagggccgcctatctgtaaaaatatcgatttttgatgaaaaaatggcgaaaaatcgatcacggaaaacaaaatcaataattcttcaaagttatcgacgatttttgctgattttatcgatttcttggtcaaaattttacgaaaaattcaaatttcgcatttaaaacctttaaaaaccagcgagaagtgcacaaaattaagaaaaatcactcaaaaaggcggggtagaaggtgaaaccgacagaaaattggagtggtttgatgggtatttattgagaaaaatatcacaaaaagcattggggaatcttattagtcgtttgaaaaaagaatttgaggatttttagaaaaaaaaaaaaatttttttgaaaatttttgggacaaaaattttttgaaaaaaaaaaattcaaaaaaaaaattctttttttaaccctaaaaatccccacaaatctttatttaatatggatgaaatcgtgccgatgacgtggcggctccttgagcagaagctcccgatgacgtggcttttccagaagtggtcccgggcggtgtggggccgcccttcatgaacggggcgccgattagcatactaaaaacgggaactttttttttagttttgttgagttttttttggattttgtttggaggtgctagagacataggaaaaattgatagaaaactgcataatagtagcgaaaacggcatgcaaaaagttggcatttctttttgaaaatttaatttctgaaattttttttattttgaaatatttctcaaaacaagtttgaaattcgaatttctcacaattctagcttcaaaatgacaccccacatggccatgttaccgtcaagtagcctatcggcacagctgaaaccaaagctacagtacacagcgtggcgggacccaaaaatttcgaagtcgccggaaccaggtcatgatgggggttatttgaaaggtcttgaaaagtagaattcgaatttaatatacacttttgttaaaaactgacttgaaatttttttttctaaaataactttttaaaaaaataaaattttgaaatttttttgtttttcagtttttctcgatacaaaatttaaattcacgtttctcgatattccagctttaaaatgaccccccacatgcccttattcccgtcacctagccaaccgtcacagctgaaaccaaagctacagtacccagcgtggcgggacccaaaaatttcaaagtcgggtcatgatgggggtcgtttaaaaggtcttgaagagtagaattcgaattttttaataaaattaaaacaaaattgaattataagtaagaatttacatggaacagagacaagacaaatgacaattttttcacaatttctttttcaccaaaaaattaatgctttacctctgattaagagcatattgattcaataattgttgctgttgttgctgctgctgttgcatggcagccatatcatagccctgccactgagcagctgcagccgctgccgcaccggcttccatagccttggagttgtcctgaccgccgagttggactccatttgccgtgtagatcagcccatgttgacccaagtatacttctggaaacgtaaggcttaaaaaatttggatttttctgcaaaaaaatttgtagaaacttatttttcttattttatctcaaaatcccttaagttttataaaaaatttcaactacaaaattgttgcgtataaaattttaaacattttggcttttgaaatttttctgatagctcaattcctcgcagagttacggccatttgaagtttggcgcgctctctcagcggggagacgcagagagtgagagtgtctgcgtctcacctctctcgcctgcaaacttaaaaggggcataactctgcggatacgtgagctttctgaataattttcaatcgcaaaatgtgtaaaattttgcggagaatatttttgtagtttaaaacttttctgtatcttttctagattttatgatattttggaattaaaaaatgcaataattttttttgcaaaattcttcagtaacaacacctaaaacttgttaacggacaagaagaaaaaagtacatttcgtttttgaataaaacgacacacttgaaaaagacaaaaactcaaaatatatatagctaactaaaaaaggtttgccgccagcaggggtcgaacctgcgaccttgggcttattagacccacgctctaaccgactgagctatggcggcacgtccaccggcggggattgaggcgtagaggaggtaagagcggcggcggcagtggagaagatagggaaatgaaaaagaaaagaagagagagagagagagtttaaagggaggtggaggatgagaagattacggtaggtttgtgtgtgtatgtacagtactatagagattgatagatgatagctttgggtagaaattacacattttttagctggaaaactgcgaaaaaatcgataatttcagcgaaaaccaagtaaaaatgcgacaaaccttgagcctgtgaagcctgctgctgttgtccgggcatcataagctgttgattgaagagagcggcacgggcggctagctgaaacacaactacccaagggagtctctcgtgctaacatttgggggggcacttttcggggggttttgagggggtaaaaaaggcaaaatttcggtggggttgaaaacgggcaaaaaacagatagaagggggcgggaaggttggaaattacacttcatgccgttggattactttttttggctcagtttatttttattttttaaaaactcatttatcacatttccctttctctttcaaaaaagaaattaactgtgatcttgtaggccttaaaattctaaacattttgttagttggaaattttttgatagctcttctcccagcagagttatgcgcgtttgaagctgagcggcgaaagagtgtgcggcgaggggagacgcagacgacaggtgtgactgcgtctccccccgccgcacactatttctctctgtcgggcgggcgctcaactttaaacgtatatatctccgcggagaagaaagctatcaaaaagttttcaactgatgaaatgctttaaatttttagctctacaactctacaattaaatattttgtttatctttcctattttccaagatattgttaaaaatccaaatccacacctcttgttgaacggctgcaaattgatgttgttggagcagtgcgttagtgaccagttgctgctgtacctggactccctgaaactttttttttcagtcttttttccaattttccatcctggttactgtacctgtccgccacccataagtgctgccgcggcgagttgctgttgagcctgtgcctgttgttgttgtgcggcaattgtagccgctgacgtggcgattgccaatgggttgaacgttggttttgggcggtatgtgattgtggagccttttggtggagcctggaattttaagacttgtagcccttgaaattctacacatttttgtagttgaaaatttttttgtagctctaacggctgtggagttatgcgcctttaaagaaaggcagactagtgagaccggtggagagagagggcgtagacgacgatggtgtctgcgtctcccctggccgcacacactatcgccacacacgtcttgccgcgcagcttcgaacgcgcataactcagctgtggaaagagatatcaaaaaatttccaactaacaaaatgtttagaattttaagggctatacttttctaataaaaacgtttttgtagggccaacggttgtagagttaatccgtttcaaaagtcaattccctataatttctgatcaattttccccatcattccttttctttctaagcaacaatatttgatagaaacattatacaaaaccgtatcatcacgctccgtcgctcttcattatcactagtgcacattaagtatgtctgcgtctctccgacgtcccgcactctctcgcggttttatcgattaaacaaacatttgatcatccccccccccccccccccagcaccatcacccaacaaacctcaagaagaatctgacaaacttgtgtcatacacaggttgattgcgtctgcggtgcctgataaggtcactgcacgttctgtcgagtggggtagcatctctgaagccacttggatcgaggcgcccgttgcctggaaaaaagagaaatttagattttaggacgaaaaaagaaatttaggacattttgccagttaacaacttttttgtagcacaaacggttgtggagttatgtgcctttaaagtttggccgagaggagagcctgcgatgccgattcatctttaaaggcgcataactcatgaaccgctagtgcaacaaaaaagtttttaactattaaattgtactgcttgaattcctacacattttattagttttcaaatttttaaaagctccactcgtcgcggagttatgtgcctttaaagcgaggtcatgcaagggagtgtattgcccaatgtgatagcgcaccatctttaaaggcgcatagcacatgaaccgctagtgctacaaaaaatattttgactagtaaattatacaacttaaatttatacataatttgttagttaacaacttctcgataggtctactcgtcgcggagttatgcgcctttatagcaatgccgggggggaaaatgtgttcctcacttgagctcgccccatctttaaaggcgcataactcatgaaccggtaatgctacaaaaaaggtgttaattgtgaaaatgtgcttcttaaaattctgcattttttataagttagcaacttttctatagctctactcgtcgcagagctatgcgcctttaaagctaggccgagaggagagcctgagataccgctccatctttaaaggcgcataactcatgaaccgctagtgctaaaaaaacaatttttactattaaatgtgtaaaattccaagctctacctacctcccgaatatccttaatcttgctcccacccttcccgatcaaacttccacactgtgtcgccggcacgataaccctcatggtaatcggtggttttggtacagaattcggcagtaacagcatatcctcttcgaatttattgcaaaccatattaaaagcctttccgataacgccaagagtccccgtaatcgtcacaattctctcggggcacgagccatcggagatgttgattttcgcgccggattcttcgcgaatctttttgatttgatctccttttttgccgattatactaccgacttctttgccctgcatgaggagtcgtatggtgagcacaaggcttgtggtgcttggtgaggtttctcgtggtgagcaggaagaactggggtcgcccagtaggtggtccgatgaggttgagctgaaaaatttggaaaaattaactttttttaaaagtttcactaaaatttttcaactgaaaacttgtagccctgaaaattcagaacattttgttaattggaaactttttgatacctcaattcctagcaaagttatgaggcttcaaagttagggtgtcgcccggcagaggaaaagagtgtgcgctggggggagacgcagacgccatcgcctcctgcgtctcccctcgccgcacactcactcactctgaatctttgacgccgtataactcagcggggaatagagctatcaaaaactttccaactaacaaaatgtgtagaatttcaagggctacaatttgaatgcaaaaaatccaaaaaacccctacccatttgcagtattccttgtcgttgtagttgtctgtgctgcgtatgctcccaggtagtcttgactagcattctgttgtggatatgataagtatgttgcagatgcgcccgggtacatggatgggtccatctgcaaaaaaaaaatcgataatataaaatatccagaggctccagaaactataaaactgcgtttgaattgtaataatttaggtaataaagtgggagagaaggcgagagaaagaaacgacgttaatgtggtgtagttgaacggcaaactgctctgcttatcttatcgaaaaatgacatgggacacactgaccgcccatctcacacccccttccagccgtctttttcttaacttgctaaccttaacttttaatcggtgctatctcaacaaccccaagtttaaattgaaaattgtcaactaaaaagttgtagtccttgaaattcaacacattttgttagctaaaaactttttgacatctctaccccccgcggagttatgcgcctttaaagtgtgggcaccgccggcgagagtgtgtggaaggagagagacgcggtttttaaagtcgcataactcaattgtggttaaagttatttaaaaaatgttaactagcaaaatgtttagaatttctagagctacaaattgttagtaaaaatctttttgatatctctatcctccgcggagttatgcgcttttaaagtgtgggcgccgcaggcgagagtgtgcggagggggagggcgcaatttttaaaggcgcataactcatttgcggtaagagttattgacaaaatgttaactaccaaaatgtttaaattttttagagctacaatttgttagtagaaaactttttgatatcttcatcctccgcggagttatgcgcctttaaagtgtggcgccgcaggcgagaaagttcataggggggggggggcgcaatttttaaaggcgcataactcatttgcggtaagagttattagaaaattttcaactacgggaatatttaaaatttccagagctacaatcttttagctaacaatattttaaaattctcaatttgaaccgttgaaaattaagataaaaaactattgttactttccgggaaaaaactcgaaatttttaaggtatttcagatgaaaatctatagaaaaagttcaaactaacagcagaaaagtacaaaatggggaaaatggtgaaaagaatacataaaaccccctcgctctccaaaatagacaatagaatcggtggtgcaggtgatgaataattttctccctacccctcttctcttgtggagcaagagccgggttttcctagtttgaaaaacattttgaaaagtgcacttttgaaccgaaacaattgaaaaatttagtgaaaaattacagtttttcacggatttttcacgaaattttgtgaaaataccaaaacccagtagttttactagaaaactgttacccaaaaaatatagcccttaaaattctgagtattttcctaattgaaaactttttgatatctctcctccccgcggagttatacgcgtttaaagttgtacgctgggagagagtgtgggagggggcgagacgcagaccgcctcgccgcctgcatctccccccttcccacactcactctgcctgccgcacttcaaaggcgcataactcagttgggagaagagataggaaaaaatttttaaataaagaaatgtgtagaattttaagggctacaaattttcagttaaaagattttcgaaaaatcggatggtttttgagaaaaatcgatttttcttcgtttttcaaattttttaaaggacaatttgcccaaatatcacaaattttcaagctgacaacaactcatcatcaaacaaataaaagttcccgtctcttactgccacgtcataccgacacacatggcacactatccccctatcactaaacaaatacaggtggcgagaggtgagtgaagaaaaggaggggccgcccggcctatacataccccctgtgtgtttcccttctttttcttttctctttctgaaatttgatatggtgcaacgatgaaacgaaaggaagaaaagttggagagagagagagagtgtgagagacgcagagagaaggtgagcaggggggcacctgtcttgcgggacctcttaactttaaatttgtatatcttgggaactaagggtgatggaaaaaagttgtcaattgtgaacttgtagagaattaaattttacacactttgtcaattgataattttttgttagctccgcccatttttgagctagacctgttttagaggttgcattccaagaagagcactgacaaactttaaagtggtgtaactttggaaattaaaaagatacaaaaaattggttacccacatcttgtagatcatttaattttgtatattttaataggtaaaaaatttgagctagccccgcccactattaagccacgcccctttgtagttttcaatcttaaatttagacttcttttgggctaattgtgaatttcgcggggaataacttgtttttagttttattttaaattttttaaaaattaattcaggtaaaaataatcaaaattccaaaaaaaaaacaacaatttgaaaattttgagcaaaaaaaatgtccaaaaaaattttttttcgaaaattttttaaatcaaaaatacgacttttctcattttttttgcagaacagctattgattttttacaaaattttacaaaataagctaatgaacgtttgttttccacaagatttctactagaaaccctaaaaatccaaaaattacggctcccaaatttcaaagccgcttagctctaaagtgggcggagctaacaaaaagttgttaattgaaaaaatgtgcaaaaattaatgagctacaaaacattagttaaaacttttttgatatctttattagtttagaagatacattagtttttctgaaagagcaaaaattttttttcaaaaatttcaaaaaaaaaaaattaacaaaaaaatcaataatttctcaaaacctaatacgtactaaattctcctaacaaatacatacttcacagaaaaaagttcaaaagcgccaaagtatgcacaagctgttcaccgagatatcgggtgccagcactgaggaacatctgtcaccaagagagacggagatttagaggcgcaggcgtttaatgggctattaataacgcaattttcaaaaaatattagcgcataaaagttgttagttggtggtgggtttcgttaggaaaatcaaaaaaaaaaatcaataaaaacccggaaaaatttaataatcttttggaaaaactgggttatctcaaaaattaaaaacgttatcaaaaatattttgtgtcgcctgacgcagcgagagagtgtgaggcggggggagacgcagtcaccctcgccgcctgcttctccccctccaccacgctctctcagaagcgtctactttgaaggcgcataactcggcggagagaagagctatggtaattttaaaaaaatacaaaaatgtttagaattccaagggctacaaagtgaaattaacaaaaattctcgaaattgaagttaaaaaaaattctaatcgattttttgcaaaatttttgaatttttcaagtttaaaaatgtaaaaatgacatggaaagctgcagagatggaaacgcagcagatatagaattacatagaatgaaatccaatacttattgagcggcttgagagggtccccaccactaaagaggcgggctccgggagctaaagtggcccaaaaactcgactaattgcaaatgtgttgatttgttggaaataatgtggaatgacgtttttagtggtcccggctaagagaaaagttggttggagccgggtggaagaagaaaactgataattgaattagtggagaattgctgggctcgcggagcccgagcaattgtattagaccattagagatggggctatacattgactgagtagcgacgctgggaggcttttgccaaaaaaatttgggccgtgaaatttagattttcagtcaaaattcaaaaattaccaaaaaattttttttgcaaaatttaaactaatataactttgctcaaaatcacccgttttagtccattttttaacagtttttgttgcaaattttacgagcttatataaaatttaaaatatcttacaaagtaatgatctcggagctgaaaatttgggtttctagtgaaaagtttgaaataaaaaaaaaaaaaaaatttggaccaaagtttgaaatccccgtaactttgctcaatttttaccaatgaagctcatttttcatcagaatttagataattaccacaattataacatatctattaaaaattggcacaaagccaagatctagtacgattctagtcagaaagaggaacatcaaaaagcaaaataggtgagagtggagggagaagcactgaagagcggcgggccgcccgttaaaggcgacacgcacacacacacatagagagaaagcacacgatttagttaaacacggtggggagatattgtacatacacagaatatggtactgtaggtattggagagacgcagacgggcaaagatacacactgtatacagaagaactttttgttgatgggtggtcttcttcaaggagccgcgagctgagaggggggagcttttgggagatgctctgaaggttaggtgactagttttttgagtagaacgtgaaatttgaagtaaaatgtggtaaaaattggaaaaattggtagaaaatttgaaaagttgtgggggtttaaaatttttggtaattttcagcaacagttccagattttgaatgaaatcccataatttttatatttaagttttggttttttttgtaacacattgttaaagttcaaaaatgtaccttttcagaaaattaaaaattagccaaaaaatatattttgagcaaagttgcacaacttcaaaaatttggcaaaaaaccgaaatttttaaatttttggctgacaattcaaatttttagaattacaaacagatttttaaaaataaaatattgttaaagtttgtaaaattacctatctaatccatcaaaaattgtcctaaaatgtgcatttccagaaaagttacataattccgaaaatttggtaaaaatcaaaatttacaaatttttgacagaaaattcaaatttttagcatttttctgatttgtcaaaattcagatgtaataatattgttaagtccgtaaaatatactttgaaatatgataaaatcgtttgaaactgataattttgagcaaagttgcgagactttaaaattttgaccaaaaatctaaattttgcaatttttgtcagaaaattcaaattttaaacaattttccaattttttaaaaacgattttttattatgaccgtcaagtccgcaaatttttctttcaattgtgtgtaaaataatctttaaaggtttattttaagcaaagttgcgagactttgaaaattggctccaaaaattttttaaagcaaaaatttcaaatttttggctgaaaattcaagttttcaggatattcactaaaaatttggcaaaaattgtcaaaaatatcttgtagaaaataaaatgctctattgattttaataaaaattatttaaaacgttcaatgttgagcaaagttacagggttttaaaaatccaaaaaaaaatttttttggggtaaaatttcaaaaccttataacttttttgcataatttttttttcacattacattataaatttttaaataatacgctcaaattagttctaaaatctagattttccagggaccaataaaaaaatctttggaacataattcccataaattgcacagaattggtgtgaaaatgtacaagcttaatagtaagcttaacgaaaaatagcaatatacaagagagacgcagagaaataaaggaacgaaaagaaaataaatctgaagaggctcggtggggtacatttggtccgaaagaagacctcttaaggacccccatcatttggaaagagcattttcaagtagatggaatattacacaaaatgtgctctttctaaaatttagttagttgggacagtttgaaagttctggcgcgaaatttgaaattttcgaaaaaatttggactgaaagcctaaattttcagagttaagcctaaactgttctgaaaaattttaaatgtttaattaaagctaataaatttttctatagattgttacaaaaattaccaaaaaccttgattttgaacaaagttacgttattttgaaattttcaaaaattttgaaaatttgaacatactgtcttaaaatcaaaattttcagggttaagcctaaattttttctgaaaaatgttattattgatttagagttaatacatttttctatatattgaaacaaaatttaaatgaaaatgttaattttgcaaaaagttatgatgttttgaaattctcaaaaagttaaaaaaaaattccaaaaaaattaaaactttttttttaattaaaaaaaaatctacaacctcgaaatttttatcaaaaccgtaatacaataaaatctaaattgtaaatttataaaaaccaaaccaaaaaagcccagccacttgccaccccaacagtacttttaggcgtaaaaaaacaacaaaatctaccacctgtcactggttttttctataaaaatgttaattttcccagagaaaaacgtatttttcaattttaagactaatgaaaatggattttctaatgtaaaaagccaacgaaaaagcccagaaaactgtgtaaccagccagcaatagagaaaaactgcacacacacacatatagactccattttatttgctttccaccttccaaaaagaagcagtgacccccggtgtgctctttatttgtgcaaacagtcgagcgcataaaaaccgcctttgattcaagagaaatagagaaatcaacagaaaaatcgatttttttggtaaaatttgactggagtcaagttttcaccaaaaacaagacgttctacaataaaactgttaactacagaattgtagcccttaaaattctgcacattttgttagttaaaaatttttcgataactcaattcctaagagagttatgcgcctttaaactttagccgccgcaatgcatgcagagagagtgtgttgcggggggagacgcaggcggcgaggcggtctgcgtctcccctccccccacactatttctctcggcgtaactttgaaagcgcataactctgctgggaaagaaaaatggtgaaaactaacaaaatgtgcagaatttcaagggctacaaattgccagttgaacattttttgataaattcctagattctgagatacagcaagaaaatgcgctccattgaaaaacaactgaaaaagtactcagttctaatgacggagccgggaaattgtgtgtgtgtgctcgagcaaaatgagcacacaaaaatatagtcagaaaactagaaaactacgcccgaggcgattttttatatttcaaaatgagtttttgaatttttttttccttttttctgctcagcttctaatttaaactaaaatttgttagaattgaacttggaaatattactaaaaatgtgcaagtagctcaattctcttcaaaacttcgggtgtaactcagcaaaaaatagagctacaaaaaggttatcaacttacaacttgtaggtcttaaaattctgcacattttgatagttggaagtttttcaatagcactaaccgctgcagagttatgcgcgttgaaagccaggccgcgagagtgcgcgcgcagcggggagacgcagacgccatcgccgtctgcgtctcccctccccccacacactctcgttgggggtaaactttaaaggcgcatatctctgctgggagagaagttttggaaaaattaaaaattgcaaaatgtgtagaatttcaagggctacaatttgttagtcgacaatttccggctagaaattctagtttttgagatattccagaattaagcttaaaaatgtctaaaaacagtggtaaatcaaagaaatttttattttttatttttaaaaaggtgaagccaacacaattgttcaaaccgagacaagtacccaacggcccaaagccctagtaatgcatgagactcttccaaaatgatgagtccctctgctgccttgtgttctttaaatctccacgctctctcgtgctctactattcatattttgcggtgtgcgtaccgtgggaatcttgatgaattgaataacgggcgggggcccccatcctccccgtttgatacaatttgaataaatttttgattttcgcacaagaaacaacttaccaaaagtcgaggtggtgcctccactgcgaacatttgtgaagtcacgggagcctgaaaagtataaaagattgtggtttgaaacttaaaataaggaaaaataggaaaatttctcttgaaaaccggcgaacctaccaaaatgttgtcaactgtcaaattgtagcccttgaaattctacacaattcatcatttggaaactttttaataactcaatttctaagggagttatgagctttcaaagtttggaagagtgagagtgtgtgaagcggggagagacgaaggcggcgagagtgtctgcgtctcccctcatcgcgcactattcgccgtctaaactttgaatgcgcataactcggcggggaatagagttattaaaaagttgaaaactgatgaaatgggtgaaacttcaagggctacaatttatcagttaacaattttattataggttcactagtttttaagaaaattttagttttactagaaatgccatgaaattttgacgttaaaagtagaaaatatgattttcggggctattaaaataggtaaaatacgaggaaaaaataactcagccttgcaaggaatcgaaccccggacctactgatccaaaaaccaactcattaaccactagactaccgggaacgtggcgccgcaaaaagtgagggcaatgatgaaagcggtcccacaggtgaaaggagacatgtcttaatttttcaaaatttgggttttcaaattgttgttttatgattttatatgacttcaattaatttagtttaaaaataaaactttagtcccgagaattcataaatagaggagaaaaataggtcaaaacaaaaggaaaactagtgctaaaaatcgaaaaataaagtgttcatcaatcagtggaaataaatatgaagcacggggtggtgaaacggacataaacccccgttttttccaaggaattgtagttgtatattgaatagaaatcgtgagatggaggaggggggtgagccctttttactttccttgtaagcaaatagttctgttagtttgggggagttcggagaaactacgaaagattctaaaattctatttaaaaaaagaaaaaaagaagacgggaatcgaacccgggtccttcagattacaaaacgaggctgttaccggctgcgccacgcgtcgtggcctactggttaacaactctgccttttgcgcaaaaggtcacgggttcgagtccgtgggctggaaattagttttttcagcaataaaacatacgggtcccggggacccggggactctttgtgttaaactttttttttcataaaccgagcggagtgcactagagaagcaaagaggactaagatgagtgatgaagtaggagtcaaaatgctttttgacggattgatgacgccgaggcactggttgttagacggcgaacattcctgcacactcaaccactgggggccgccgccctgtcattcaaaatgatgatctgcactttgaagcgggaaaaattgcggttaaaaagtttaaaatttgaattttcaagaagtatcagtttttcttcgatagaaaaagcgttaaaattaaggtttgaggtgcaaacgcggtctaccgcaaaacttgctgttaggaaagtgcgctccaatgatacatttcttaaaaattgctgtaaatctgcaaaaagttgtattttctctagttttgctaacttcgaacagttgtaagctttaaatcgctaaaaattgcgtaaaaatagagtttttggtgtaaacgcgccctaccgcacaaggtatgtgtgggcaaatgcgccctaatgagaaaacggctgtaattttgctagtttttcgaatttcaaagagtttttagttcaaaactgttaaaaattgcatgaaaattaagtttgaagtgtaaacgtgctctaccgtacatgaaaatttggtgtaagtgtgctctaatgagaaaatgactttatttcggtcagttttgaagattttacagaatttttttcacgagaaatgagaaaattagatgaactaattttgaaaatgcaagtttgctctaccgcacaatagctggctgtgcaagtgcgctccactgagaatttccccaattttgctgtaactcggctctccgcgcagctagaaagagaatttttgggttaaattgaaaagtaaaagtaaaatattggaaaacttcaaaaataaattcgaaaatatgacaaaaaaatatcgcaaaatgtcaaaaatcacccaaattctgagatttttcccataaatgtccaagaaagtgaggaggaggtggtggtagatgggggaaaaggcttaagaacacatatagagctcacggagcaccccctccaacacaaaacgggactcatcaatcatcaataggaaatgggaagagaaaaggggccgcgcccgggtcccctctcacttttttttggagaatccccaaaaaaaacctgcaaaagatgatctattcttgtagcttctttggatttttttaattgaaaattttattttgccgttgaattgtatgtaataaaatgttttttttttgattttaaacaaaacaatttaattttttttcggaaaaatcaatttgttcccattctacgtaagacttcaaaaaacagatttttctattattttccaaaagcttgaattattagctttttattaactgaaaaattaaaaattttggtcaagtttgaagtaagttatgagtttttgaaaaaaaaaacgtcagaataccaaaactgggcggatctacataaatgtgtcggttgaaaaattacagccttaaaaattttacacatttcaccatttttaaaatttctaaaatctctagtttccgcggagttatgtgcctttaaagttagggcaccgcgccgcaggagacgcaggcaccatcgccgcctgcgtctcccctccaccacactcactctccctgcggcgcggtgccctaactttgtagacgcatatctctgctgggagaagagctaggaaaatggggtaaactaagaaaatgtgcaaaatttcaagggctacaatttgctagttgataatttttgtgtagcattgctagttgcagagatatagctctatttaagatttgttccaagaaaactggtaaaaattcactaaaacacaattttaaagtagtttttcatgaaaaacaaaacagaaacatctagaaaccctaaaagtttgtcaaaaaacctaaaaaaagaagaaaaaagaagggcatgtacacgctaagagtgtccaagcgcatcccccttcttcttcttttgtcaccgatttatgaataaatgtgtgaatacaagagcgaggcaacaagagacgcagacacaatatggctattgttacgtctatatttcacaaaggatgagttaggtgccagccggctggccaggaggggctctatggtcccgcacggctgggaagtgcaccggggtgcgatggttgcgggggaggtaggaacttaataatttggtaggaaatttcatgagccatattttatgttaaaagttagctaaaaatctttaaaactgacaaagttacgaggttttgaaattttcgagaaatatcgaatttttttgtttcaggtcccgtcaggaaaacttacgggagtgtgttggcattgaaatattctgacattttatataaatttctcgcagaaaattatatgtgctttattttaaggtaaaaatcagctaaaaatctagagaatgaaccaagttatagtggtttgtaatttttgaaatttcgaaattttttttttcattttgggtccctccaggaaaactaaccggactctgctggtcttaggggtgataaaattttttaataattttctgattgaaaatttaacaggctacatctgaagtcaaaaataagctgaaaatcttaacaactgacaaaattatgaacttttgaaattttcaaaaatttcgaaaaaaattttttttttaggaatttaggtcccacccggaaaacttaccagttagctcgttttagagatcttaaaaaaaaaatttttttgaactgtattttgagtcaaaaattaacgaaaaagctcaacaactgacaaagttatgaagttttgaaatttccaaaaatttccaaaataatataatttttttaaatttttttagaaattgaggtcccgccagaaaaactcaccaaattccgcggattttgggtttttttaaaattaaaaaaaagttttttagaacctttcctggggaggattttgagtcaaaaattaaccaaaaatcttaaaaactgccaaagttacaaagtttttgaaaaatagcgaaaaacatttttttttatttggaacccggcacaacatgactaaaaatcttaaaaattcacattgaaaattttgggtcctaccacgaacacttacggggtactgtagacttgacaaagcaactagatcatacgtttttttttctacagtaatccaaaaaaaatcaaaaatctttattcaaaaaaatctcaaatctaaaaacaacaaactcaaaaaattaatcgaattttatttttaaccttaaattaatttttttttccaattaccccacatacccctagatcaaatggaaaagatagggtcaactggagggtggacgcgctaaaaatgtgctccgcgagctgttttattaccctccaaccgggaaaaaaagaggagaacgacaacgacataaattacttcatttataacaagaaatggacgtagtgggtggtgtggtgtaacctcgtactattaattgggttcgtcacttttgttctgggtggtgggcaagattggctcgtctgtggataggggttaccctaaaaatgtttgttaaatcgtggtagttcaggtagctcaaatattgttctacattttaaaacaaaatttacctgaaaatcttgaaaactgacaaagttacaaagttttgaaaattttcgaagaaatttttttttaattttgggacctttttcgaaaaatttctaaaacattgtagtcttgaatttattgaaaatcctattaaaaaataatataacatttattaaggaaaaaaataatctgaaaatttaaaaaattagcaaagttacagcggtttgaaatttttcaaaaatttcaaaattttcaaaatctcaaaaaattgagaaattcggataaccttcaggattactgtagttttttgacataattggattagtgcattaaaccacatatttgagatatttttcaatacttgaagctaataactatttaaaaaaaaccaagaaattacaaattttagaggtttcaagaaattgaaaaaaatcgaaaaattgtttttgggtctcaccgcgaaaaattattaaattattgtaagtttttaaaaaaaatcaatgttcaaaaacaatttccacttatctcaatcaattttccagactgaaaatgtcaaaaattgacgaaaaagttttcaaaattttttgagaaatttgagtacaaaattcgttcatttgaaccaattttggatctatagcagtcctccttcaagctcaaactattgtcatttttcgattttttaaaccgtcataaaacatttttggaacaatttttcattacgaaattcgttcagttgagcacaatttgggcttatacgttcaaaaccgttctaatcgttacccctactttattggcacaactcgtgactttcatactgtttgttctgaaaaagagcatagagacgggaacatttaaactgataagagcgcaaattttaaattcaagttttcttattcagatttttactcagtttcagacagccttccaaaaatgtccgatgaacatatagaaccaaaattgcttgatatgccagtggagattgctgagcaaatattggaaaagcttccgtttcctgtagcgtaagtttttcttgattttgacagagcgatgatttttttcatatatttttatgtttcaggcgttcgtaaagtgtgtcgaagtttgagaaccgttgttgataaactcgtgtttccagttcataaaatcgattttcatatgtatgataatcatgtttctacgaactttgacaatctcctaaccaaatacactgatgcattgaacaacgtaacaactgtcacttacaggaaacaagacaagcgcattgaaggtggaaatttcgtgaagattgcgttcaaggatttggaattgttattaaatcgcgtgtacagactacattttgcaatcaacgccaaaaataagacggcacacgactttgtcacacctctcatggaagtattaaaagctaaaaaatgtgttcacgcaacggaattaactttctggagtttctcattcaacgacattatttcgattctccagttttttgatgatcaagtactgaaaagaattgagattttgtgtactgaaagaattgatcatatcgaacgaatatttgatttacctcaatggaaaaatgcaagcaactttgaactgcgaggcactgtattcaaccatgaacatattgaacagctgtttcatttcaaagagttccaaatcgcattagatgaattctctattcaagatgcacgcaaattaaaagatgtatgttacaattggattattttgatttatcgcctaatatttttcaggatcttatggaaagaagcacattccaaaaatgcacgatcagtgagtttcccaatggaaatcgaatcgagattgtgagagttttttggcctgaatacaatggaaattaccatcacaacaactttatacattcatttgacagttccagttttcgtattatctgtgaccattatttttatgggaacactttgaaatgggaattcacgattgaaagattgtgaatatatttttcaaacaatcgagtctagtataattgataacctacgatactactcataccacttgcttatgctcatataaaaattattaacctatgtacatgccttctatacgtattcatttttttttgtgtgaacctttattctgtattaatctatgtgttctattacgataaacaaatcgtgtccaaataaatatgtattctaattttactgtgtgtgcgaccgattttacaatttcactgtagaaaaaattcaaaatgcaatattgtttggaaattcattccctatacaaattgtttacactggtagattttttttggggaactgtcatcataaaacataagaaacgccatattgcgtcgtgagaaaaaacatttagataagtctctaagcttttcctactctctttctagttctgaaaactgtacaaataaatatgctgaaaattcaaaaagtctgcaaacaccgtcacacagagcgggagagcagaggggacctatagagacgcaaaaaaacagtgatttttgtttcgttatctaaacctcttgcctcattttgcactattcctaaatatctttatttcgtaattttcttgttgtagagcggtatagcttagattttcagagtttatattcaaactatgtcaactaccaacggaggccaatgtcaagtaaaaacgaagacgatttccctggtcgacatgcctctgaaggtcgctaatctagttttggaaaagctggagctcattgatttgtgagttgttttcatttattttagaaacttcacgtagaccttacagattgagatcccgaaaagtgtgcacgggtttaagaaccgccgttgataaccttgagctttgttttgacaacgtctgtttaactctacggaaggagacactaaggagaccatcagtcatctcgtgcgtccggatcaaagcgaccctgtttgtgcaaggatcgcagacggatattaaggccactttggttccgttgagtagagtttgatgggccgattcggtgtccacgcaaagtggccgtgcgttgttactctccagactttgcagttcacgttgtccaccattcaaaccatttacgtaatgaatagtccaataatccaatgcacgtggtatggcacgtaaattgtcgagctcctcaataatattttacaggcgaagcagagactgacggtgtgagctggcgcccatcatgaatgagctcacggaggagacggaaaccttcttccaagagacgatgtcggagttcccggcgggggataattggacgcatcaggttctccagaacctctccggtgaccacagtaaaaccctcgcaaaagagggcaacatacatgaccatgctggccaaggcgccaaacgacgacctgtcgccttgttttctcctcaaaataccacggacatcaaattggctggacatttttttattgctacaataatagacgttaaagagacctagaaaaaaaagggtaaaattttttgtacttgtacattacataccctcattttaaaagtagttttataagttgggaaaataaaaacatgtggcaattttagtcttaagatatggcatttttgagtctaaagaggaaaaaaatgtatataccacgtttaatttctattttaaaaatctcaggagcggtagagaagtatttgaagaatccgtagatgaagtggtgaaaaaaataagacgtacgtagaggtgaccaaacaaatgaatgtgtaaaaaggggtgtacagtgctctcttttatacagaattcccacgaaaattagagtaggtcaaatcggggtgcgataaagaagataaatgcctctagataacatcaaataggacacatctactattgaggttgaaaaaaatgaagaagtcggtactgagaaccgtaattgataaccatctatcgggaaaacctattgaaacatgtgacgggtggcgataacgctttctgcggtctcagaaaatttgaattctccgcaaaaaattttttcacagaaattagaatttcgcgccaaaattttctgttcagcaaatttgaattttccgcgaaaattttttcaaagtaatttgaatttcgcgccaaaattttcttctcagcaaatttgaatttcgccaaaatgttttcacagaaatttgatcttttcgaaaaatacttattcacttatcacacgcctattgaaaaattgataagagtaggtcttgcaacacatttcgacattttattttctcaattttccaaattcttaggcaaaattgaaaagatgcctgataccaatgtgacaaattctttgctcgatctacctctgaatgccgcaaaccaaatttttgaaaagttggagcccatggatcggtgagtttttaaaaactttttattcttgagtgttcttgacgctgatgtggaaatcaggggtaggcggcaaacggtttttccggcaaaccggaaaattgccggaattgaaacttgttggcaaatcggcaatttgccggatttgaaaatttccggcaaatcggcaattggccggaattgaaaattgttggcaaatcggcaaattcctggaattgaaatttctggcaaaccggcaattggccggaattgaaatttgttggcaaatcggcaatttgccgaaattgaaaatttccggcaaatcggcaattggccggaattgaaatttgttggcaaatcggcaatttgtcggaattgaaaatttccggcaaatcggcaattggccggaattgaaatttgttggcaaatcggcaattggccggaattgaaatttgttggcaaatcggcaatttgccggaattgaaaatttccggcaaatcggcaattggccggaattgaaaattgttggcaaatcggcaaacctgtagtttgccggaattgaaaattgttggcaaatcggcaaattgccggaatagaaaatttccggcaaattgccggaattgaaaattattggcaaattgacaaaccgacaaattgccggaatagaaaatttccggcaaatcggtaaattgccggaattaaaaatttccagcaaatcggcaactggaaagttgccggatttgaaaattgttggcaaatcggcaagttgccgaaattaaaatttcttgcaaatcgacaaattgccggatttgaaaactgttggcaaatcggcaatttgccagaattgaaatttccgacaaatcggcgaattgccgaaattaaaatttcttgcaaatcgacaaattcccggatttgaaatttgttggcaaatcggcagtttgccagaattgaaatttccggcaaatcggcgaattgccggaattgaaaattccggcaaactggcaagttgccggaattgaaatttccggcaaatcggcgaattgccggaattgaaaatttccagcaaatcggcaatcgcaaaattgccgtatttgaaaattgttggcaaatcggcgaattgccggaattaaaatttccggcaaaccggcaattggccgaaatttaaatttctggcaaacaggcaattggccggaattgaaatttgttggcaaatcggcaatttgccagaattgaaatttccggcaaatcggcaaccggaaaattgccgaaattgaaaatttccagcaaatcggcaaccggaaagttgccggatttgaaaattgttggcaaactggcaagttgccaaaattaaaatttcttgcaaatcgacaaattgccggatttgaaaactgttggcaaatcggcaaattcccggaattgaaatttccgaccaattgcagaaatttgtcggcacattgtggttttacacatttgttttggaaatttcagaatttcacttttaatcggcgaaattgcaggcatcttatgaatgttcctaaatctattttgaaaagtaaaaaatttctatgagaatatctaaagagaaaaaaaattcaaaaaggcacatttttctttaaatacttttggcaatttgatatccggcaaacggcaaatcgtcagtttgccgaaaacgaaaatttccggcaatttcaagcaatttgccggaaaagatcgtttgcccacctctggtatgaattacagattgagatcacgtaaagtatgtcgagttttgagggccgctatggataagcttggagttcgattcgacacaatccattttagcatgtggatggaaaaattcgagttgacgttggacggaattgaaatcatttatacagaagcaggtggtggtggttcacgtgtgatttacaatggtcaagaaaagctaattctagaacatgaagcttacacagaaagagctttcaaggatttgaagattgtatggaagcatgtttcaaaattatcaatttttaactgtactgaagatggatgcagctgttccactgtcccttcttttattgattttttgaagtctgaagaaaggatttatgttaaggaaattgcacttgtaaaattctcgttcaatgctgtcatttctatgtttccgcatttcaatgatctggaaagtattgaattgatcagtgtaggccccattaatcaattcaaccgactcactcatttggctcagtggaaaaaagcacaaagcttctgcatttatgattctgtgtttgacagtgaactgattgttcagctctttcatttcaaatgttttactatctcaagaatgaccgatttttcaacaaaaattgccgttaaaattagagatgtaagttatcaagtgttgtcctttaggcatgattttttgaagtctgaagaaaggatttatgttaaggaaattgcacttgtaaaattctcgttcaatgctgtcaatgtgtgcttgaaaaaaaatggtccgttacgaccaaaactgactgaataacggccatttgaagtttatctcatttgtgggttaattcaaagtgccctggttgagttttgcctgaatttttggggcttggaataagcttaaaggtggactaagctcagtggggaaatttcttcaaaacacgccgcctatgggatcacaatgaccgaatatcatgataaaaaaattaaaaaaaaatttctaaattttatatgattttttgaaaattggaaaaatcacagttttcccctaatttctatttgaattaccgccaattgaactcgttcattggagcgcgcttgcattgttttcatttttttttcttattatttcactcattttcttcattttttgggggtttttaatcggaaaatgaaagaattgaacaagaaaaatgcacaatgtttattaaaaagtaattgaaaatgcataaaactctgaagcaattaggggaaaactgtgattttttcaattttcaaaaaatcatataaaatctggaaattttttttgaatttttttatcatgatattcggttattgtggtaccataggcatgttttaaggcaatttctccacagggtatagtccttttaacggttgtccagcgcttccgtgttttgtttgataatacctcgacttttgcagaatctcatgagaagaaatgcatttcaaagttgcaatataacttttgataagtcaacttcgaatccagtggaaattgcaaaagtgttcaattgtaccggcgaaaatgaattcaggacggaatattattcaaacgatatcaatagatatacaattggattgaaatcttgcaattcgaaaattgccgtgttttctgcaaggagatgttaatagataagagccatattttcgagccgttttgattttcgcaataaaatgtttcatctttaaaatttgtgttgctgaatgatagaattcaacatttggagcaattgtatttttgttcaaatgtttagaattttatgctctatgcgattcgtttaaacaaattcaatattcgttcaaaacttaaaaaaaaaaattttgtcagtgcaattttttttggtcagtgcacacgttttttggtcagtgcacacgctttttggtcagtgcccatgtttttaatcgggtaattcatatatggagaattcagaaaacctaggtttaacccatcaaaaactattaaaaagtggcaaaaatgggcaattaattgtaaaaattcacaattttgaaattcctctaaaatggttaattttatacatagttagaggactcaaaatttatctccaaacactgaaaattgccttatttcagtttccagtggttttgtacaatttcaaaaattatgttttctgcctaaaaaaaggacggtcattagatggctgaaaaaatgtgaactgggctcgagttttccaataatttcattgacaatttcaaaaatttgcaaacacctcgtcacacagcgcgggagagcagagactgaaatgcctaggctaccgagacgcagagaaaaagagcgtcagtttttgttttgttatctaaacctcttgcctcgttttgcaatattgccaaataactttatttcgtaattttttttgtagtaggtcttgtatatcttagattttcagagataattttcaaaatatgttagctaccaacagagatgatcaatgtcaagttaaaacgaagaaagtttcgttgctcgaaatgcctctggaggttgctaatcttgttttggaaaaactggagcttattgatttgtgagttgttgtcatattactagaacagaggataggagttttttgccgcttctaaaacttgttaaagacatatttttattgcatcatgagactcaaaattgtctgaaaaaaccaaatttcttaatgaaacttcttgaaaacttctccgaaaaaagttatagcagctcaaaaaatgacctaaaattaattaaaatttgaaatttgcccgacttgttgaaaaaaaaaaacaaaaaagaaggtgtctaattttgttgaaaacgggtaattcatgtatgctgaattcagaaaatctaggtttaacccatgaaaaacttttgaaaagtggcaaaaatgacaatttattgtttttggtcagtgcaaattttttttttttggtcagtgcaaatgttttttggtcagtgcaaattttctttggtcagtgcacacgtttttaatcgggtaatacatatatgaagaaattcgaaaatctatgtttaacccatcaatatgaaaatcatatgaaaaagtagcaaaaatgggcaatttatggcaaaattcacaattttgaaacttctctaaaatggttaattttgtaggtagaagactcaaaattgattttcgaacacttaaaaattgtccttttttaaatttccagtggttttgtacaattttaaatattattttttctgcccaaaaaaaggacagatagctaaaaaaaattgggcaaaaattaaaaaaaatgtttaaacttgttgaaaaaaagtgaagtattttaaagtcggcaaaatattttttttgttacaggttgagagcccgaaaagtgtgcacggctctgagaactgccgttgataaacttggacctcgttttgacgccatttgtttaaccctacggaaggaaacactcaagttgcaatttgacgaaaatatgatcagttacacagttaataatagtacagctgtgtcttaccaaaaccggaaaattctaattaaaggggaaaacttcatgaaaataatgctcaaggatttgaagataatattgaagcacgtagagaaattggaaattgttaatcaggaagacattatctcgaatttcatagaggcgttgaaaactgaagtatatattcaagtaaagcatatttcattttggaagttcccccttaaaactgtaattctactactcccatttttcaatgccccggaacaaattatattgtggagtcctgggcttcttgatcgattcgaagacttaattaatttggagcaatggaaaattgcaaaaagaatgcatatttatgattctgtacttatcagtagacatattgttcatctatttcattatgaggagttcggtatcgtcatcactgattttccaagccaagtcgcagttcaaataagagatgtatgtacataagtaataggtttcttatttggaaaatcggttatttttgcaggatctcatgagaagaagtacatttcaaagatgcaatatattctgttgcgagtcaaaatcagacccaattggaattgcaaaaatattccagccggactatactggtggtagttattttgaattcgaatattcagatgatatcaatagttttgtggttaattgtgaatattatcgcgagggaatcaagttttctgtgaggaaatgttgaaaattaatactctttcatttgtttcttttgtaattgtagagtttttttttaaataaaggttgcagaatttgtaatagtttaaaaaaaactagaaaaccatgaggaaataacttaaaacatcattatggtaccaactgcaatattaaccagtttacaagtgttttcaaaaaatcttaaacagaagagaaattcaaaactatttttggctgataaaacacgtttttctaacactaagcatcccttttttgcacattttttgcacaatttttgcacaatttttgcacatttttgcacaatattcgcacattttttgcacattttttgcacaatttttgcacaatttttgcacatttttgcacaatattcgcacattttttgcacattttttgcacatttttgcacattttttgcacaatttttgcacatttttgcacattttttgcacaatttttgcacatttttgcacaatattcgcacattttttgctcatttttgcacattttttgcacattttttgcacatttcttgcacatttcttgcacatttcttgcacatttcttgcacattttttgcacaatttttgcacatttttgcacaatattcgcacattttttgcacattttttgcacatttttgcacattttttgcacatttttgcacattttttgcacaatttttgcacatttttgcacattttttgcacaatttttgcacatttttgcacattttttgcacaatttttgcacatttttgcacaatattcgcacattttttgctcatttttgcacattttttgcacattttttgcacatttcttgcacatttcttgcacatttcttgcacattttttgcacaatttttgcacatttttgcacaatattcgcacattttttgcacattttttgcacatttttgcacattttttgcacatttttgcacattttttgcacaatttttgcacatttttgcacattttttgcacaatttttgcacaattttagcacatttttagcacattttttgctcatttttgcacattttttgcacattttttgcacatttttgcacaatattcgcacattttttgcacatttcttgcacatttttgcacatttttgcacaatattcgcacattttttgcacattttttgcacatttttgcacattttttgcacaatttttgcacatttttgcacattttttgcacaatttttgcacatttttagcacatttttgcacatttttgcacaatgttcgcacatttttgcacatttttagcacattttttgcacattttttgcacgtttttgcacatttttagcacattttttgcacattttttgcacatttttgcacattttttgcacaatttttgcacatttttgcacattttttgcacaatttttgcacatttttagcacatttttgcacatttttgcacaatgttcgcacatttttgcacatttttagcacattttttgcacattttttgcacgtttttgcacatttttagcacattttttgcacatttttgcacattttttgcacaatttttgcacattttttgcacgtttttgcacatttttagcacattttttgcacatttttgcatatgttttgtttggaaatgtttttaaattggttatgttcatgcagtaaaaaagtgtcttacctgaaaaaatagcacattttttgaactttcagatgaatgtatgaccgtttttgtagctaccatattcatttcaaaaaaaaaacaaaaaaaagttgtatatctaatatgctttatatgaattttcaggcatatgtttgactacatccctgtaaattttgacacctccaactgcaatattaaccaatttataatacaagtgtgtttttatttttgaaaattaggtttgaatgggctaatatccgtactgaaaaaatgttgaaagtttttttaattcagaaaaattcaaaactattttttttattataaaacacgtttttttaaagcatccctatgattgaacttttggcggtaattcaaattgaaattttttcacaaatgtcaaaaaaatcatataaaatttaggaaattaaggaagtatttttgtaatataatagaaaatgtgaaaaatgagctgccaacaaaaacctaaaaattatttatttgttatgttatgtcgatgcaccatgacatatttaaaaaaatctgagtcctgacaaaagatcctgatacggagacttatgatcaaagttctagggggtctaatttttttaaaataaattttttaaagaatttttttgccgatttagatatttttagagcctaaacatcttaatcaaggagctaaagcaaattaaatttattcattcattcctcctaatacaaaaacttgacgaattcaacgtaacagtgaacgcatgtccatattcaaatgattccccatcagtgtagtccggcttgaatactcttgcaagctccggaatgttcatttccatgtcggggaagcgaatatagcagtactggaaggatccgtttttcagaagatcctgaaattggatttttcacattgaaatcgcattttttggcataaaaaactcacatctctgatcccaaccgcattatccaccgaaaacgagtccactactatgtaaaaccacggaatatggaaaaagttcccgagcagggctacattaacggtttggttgtaccaatttagccgtgacactttcttccattggctcagctgaacgagctcttcaagtttttccacacctgtgatccgctctatgtggagacttccttgaacattgaagaatggtagtagaagtagaatttccagggctttgagcccgttaaactcgagatttcggactgtgcacaggttttcgaggttttccaggtttttcagggtagaagccagatattttactagattccttcgtttttcctgatcttcactttcaaaaaccacacaaatatcatctaactcatctttcaaaatcacatccaaattattaaagggtactacttgctccccgtcaatagttaacacgactttattatccggcctcagtgacattaccgcttcctcgcatccaattccatggctatccacagcagttcggaagtttctagacacattccgtagggttaacctaaaaaatgttgtagagctcaaaattctgtacatttttgcaattgaaagtttttcaatagcaccatttcctgcagagttacaccacgtttaagttgacgggcgaaagagtgtggtggaggggagacgcagagagcgcgctgcgtctcccctcccctcacactctctcgctgcaaaatcttccaaaaggcgtaattctgcgtagggtggtgatagagaaaacattccaaaaacaaaagtgcttagaattttatgctctacaagatacgtttatcaaaaactgagtttttcaaaaaaaaaaactttaaaaagtttttgtaagcttcttgacacatttcgcagggttaacctaaaaaatgtttaagtgctcaaaattctgcacatttttgcaattgaaagtttttctttagcaccattccctgcagagttatagcagtttcaagttggcgggcgaaatagtgtggtagaggggagacgcagagagcgcgctgcgtctcccctcccccacactctctcgctgcgaaatcttctaaaaggcgtaactctgcgttgggtggtgatagaaaaaaattcaaaaagcaaaaatatttagaattttatgctctacaagatgtatttataaaaaaacggtgcttttcaaaaaaaaattgattaacctgtgaattggctccagtttttcaataacttcattgataatttcaattggtaatgttgtaagtcttgccatgctgcaaagagttaagaaatgagtttgtaagagaattttcaacaataaagataaatatgcacatattgcgacgtgaaaaaggacattttgataacaaaaccagcattttttctttctctgagtctcaaaactctctagtgctaaaaagtgttcagcaaacattaaaaacttcattcaaaaaaaaaagaatatcgttaaaaaaatctgcaaacaccgtcacactgagcgggagagcagagacctatagagacgcagagaaaaacagaccgtgagtcgtcagtttttgtttcgttgtctaaaccacctctccactatacggggagaatgtttaaaccaaccatttcatttttgaatcattttgcagtatggtggaacttggagcattaccaattgaaattgtcaatgaaattattgaaaaactgaagccagttcacaggttagtcaattttttgtttagaaactcagttttttataaacgcattttgtagatcataaaattctaaacaattttacttttggaattatttctctatcaccacccaccacagagttacgccttttagaagatttcgcagcgagagagtatgggggaggggagacgcagcgcgctctctgcgtctcccctccaccacgctctttcgcccgccaacttaaaagtggtgtaactcagcggggattggagctattggaaaacttttaattgcaaaaatgtgcagaattttaagctctacaacattttcaaggttaaccctgcgaactgtgtcaagcaacttccaaatttttttttattttaacgaaaaactcaaatttttataaatgcatcttgtagagcatgaaattctaaacatttttgctttttgaattttttctctttcaccaccctacgcagagttgcgccctttagcagatttgacagcgagagagtgtggggggaggggagacgcagcgcgggctctctgcgtctaccctccaccacgctctctcgccccgtaaacttgaaactgttataactccgcggggagtggagctactggaaaacttttaaatgcaaaagtgtacagaattttggactctacaacattcagctatgcaaaaagtgtctagaagcttccaatttttttttgattttttaaaaatgaaaaattcagttttttataaatgcatcttgtagagcatgaaattctaaatattattgctttttgaatttttcccctatcaccaccccacgcagagttacgccttttgaaagatttcacagcgagagagtgtgggggagggggagacgcagcgcgctctctgcgtctcccctccaccacgctcttttgcttgccaacttgaaactgctataactccgcggggagtggagctactgaaaaatttccaactacaaaaatgtgcagaatttccagctctacaatttgcctctgtgtaaaacagaaaaaatccatagaattttcagattaaccctgcgggatgtgtctagaaactttcgagcagctgtcgataacgtggggattgattgtgaaaaagtggaaattgtgctgaaacctgataatatcgtcaatttatcagttgacggagatgatgcctccaatcacgatttggatgtaattttgaaggctcgattagcccatttatctgtgtcgtttgatactgaaaacaaagaaaatcgacgtattcactcggaatccttggcttctactttaaaaaacctagaaaactgcacaacacggagcctcctgttaaaggatctcagttgccacgaaattctgctccttctaccatttttcaatgttctgggggagatttcaattgatggcatcacatgtatcgatcagctccgagaagttggacagcggagccaatggagcaaggtcaccagtttgatatctcgcgtttggattaaagatatgaccatactcaagcatttattccatttaaatagattttatgtcaaagctaaatcgattccggttgagagtgcgattaagataagagatgtaagtttaattttttttttcacttaggcttgtaactaggcttgaaattctgtacaatttttcaattaaaatttttttcgatagctccgttctctgcagagataaatatgattacctacagctatgtagtcggaaacttctacacactttttgcatgaataaatgttatagagctcaaaattctgtacatttttgcaatttaaagttttccagtagcaccattccctgcagagttacaccactttaaagttggcgggcgaatgagcgtggtggaggggagacgcagagagcgcgctgcgtctcccctcccccacactctctcgctgcaaaatcttacaaaaggcgtaactctgcgtagggtggtgatagaaaaaaaattccaaaagcaacaatgcataaaattttgtgctctacatgacccttttataaaaatcgaaatattttccaattttaaaaaatgagttttacagaaatgaatgtaattccagattcttctaaacaacgccactttccaaaattgcgttattcgcattgccgagtggaaaactggcataccggaaatagcaaaagtatttcaaccggactacacagacgggaatctaattcgttatagaaattcattcactatttcttttacttctcacagtctttgtatcaggagaaatgaataataaactcagtgttttgggatgctgaacttgctgaaagataatatgtcatggtgcatcgaaaaaatagattgacagacgaaaaaataaattggcagacgaaaaaatagattgacagacgaaaaaatagattgacaaacgaaaaatagattgacagacgaaaaatagattgacagacgaaaaaatagattgacagacgaacaatagatggacattacaaaaaaatagattgacagacgaaaaaatagattgacagacaaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaatagattgacataccaaaaaatagattgacagacgaaaaatagattgacaaacaaaaaatagattgacagacgaaaaatagattgacaaacaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattggcagacgaaaaaatagattgacagacgaaaaaatagattgacaaacgaaaaatagattgacagacgaaaaatagattgacagacgaacaatagatggacattacaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacaaacgaaaaatagattgacagacgaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaatagattgacataccaaaaaatagattgacagacgaaaaatagattgacaaacaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattggcagacgaaaaaatagattgacagacgaaaaaatagattgacaaacgaaaaatagattgacagacgaaaaatagattgacagacgaaaaaatagattgacagacgaacaatagatggacattacaaaaatagattgacagacgaaaaaatagattgacagacaaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaatagatagacggacgaaaattagattgacggacgaaaattagattgacagacgaaaaaatagatctctgctctcccgctctgtttgacggtgtttgcagatttttgaatttgcagcatatttttaccgatatttttgagaacaattaggagagtaaccgatttaaaatttattccaaattttcattaaatgccttttatctttttttttctgcaaaatcactggatagaatacaattaaaatttattaatgtcaacacattatcctaaaaaaatgaaacagttagatccatatctcgatcgtccatgatatttcttgaatttcaaactgcggctcgttttcggtataatcaaatgaatatccgtatctgtggtccggcttaaataatccaaaaatattttttctggctcgaaaaggatatgatatggaacattgctggagttaatgagaagattctgaaaataaatatataaatttgcattaaaccagagacccccaggcccggcaaatttgccaaatttgcgtagcttagcaaatttcaaaatttgccgtacacccctgcttcaaactcacatctcaaatttgaatagcatctttgacactcggcttcaaaatggaaccttttgaaatgatcttatagcatatagtacctccttttctttttcgcttgcttccattgctccatactgtacagctctttcacttgttccgtgcgcttctcaacaccaaatgcgatgtcttcaagtactcccggcttaagatacgatacaactttaattattttatccgggtacagagaaagaagggaggtactttgtgtgtgtatactaccggctttcttcagtctatccatgaaatcttcgaagatatgattcagataacatttgaaaagtttcaatgggtactgtaaaaattcagccatatcatccaacattatttttacatgatctcctcctgggattctcttctgacgaacccatgtcttactataaattttcacatagcaaccaccagttacatcgatgtacttgaaatatgttccatctacacgcagctccaaaacttgcagcttatccatattaactaccagttcttcaagacaaatcccatgatgatcaatagcaatacggaagtttcgagtcacttttcgaactaccaatctgaaaggctacacatactacaaagactaaaaactacaaagactcacctatcaactggcagcagtttttccacgatttcctggataatatccatcggcatgtatctgagagaagacatttttttgtgcaaaatgagaaaaagactgctgaataagtcaggtctgtttgcatcagtttagggaacgaaatgccttatcagtttggcattttgcctattcggcaaacatacgaactttgacattaaatgtatagggtaaaacattcgtgtttaactttgttcacatggtgtcagggtgtcccattacggtttgatctacaaaaaatgcgggaatcttttgcccggaaaaaaatgcgacacagattcccgcgattattgtagatcaaaccacgtgcttgttgtgatgatttattattttgcaaaaatgtgtaattttacgaaatatatataggcggttatgatttttttttgtctgtaaaattaaatttagaccaaacaaaaaactgtgcatatattttagaacaggctcaataaaacaaaaacctcaaaaaatcaaaagatgagggttagtttggtctgtttgccaaagaaagcaaatgtcacactgataagagacggcttgcctctatctcaaaaatgacgttttcatttcttgcctacactagggtttgccgaaattgaaaaatggaaatatttgccggaaaaacggcaaccgaaaatttgtttttcggcaatactgcatgcatcctttttgaagtttttccgcattttaaaaatacccctctaaaaactttcggaaaattgatatccggataacggcaaataggcaatttgccggaatcgaaagtttccggtatataggcaaatcggcaaaaataaaagtttccggcaaatcagcaaattggcggaattgaaatttccggcaaatcggcaaaccggcaaattgccggaattcaaaatttccaccaaattgccggaattgaaaattttcagcaaataggcaatttgcaaaaaatgaaaatttccggcaaatcggcaaattgccatatttgaaaatttccgccaaatcggcaaattgccggaactgatcatttccctcaaattggcaaatcggcaaaccggcaatttccgctacctgcatttaaagttagcatgctattcaactttcacatgcataaagtttagtcaggtttcaggaaactaacttgctctaatagaaacaggtgcaaaactagctttagtcattcttaaatatttgccactcatacaatggatttgactagctctgctgcaaaaattctaatttctggtgtttttctttttatagcaaatatcatactattcctagtttatcgaaaagcttatcgttttaacagtgagcggaacacggcgacatacccaattgtgaacagtttctataaaaaagtggctttaataaatgcattatattttattgaatcaatcttgatagttgttaatctaaatgttactaatgaatggcttaataaaattgcaataatatttaacaatactatgaaaactatcgtgatatacataggacaatcatgtcaagtattaatagctctacttgcaattcgaaagatttttattttctttttcccggacacgaaacaatatttaatggttaccgaatatacactaaagattactaccaattgtattttattggtttttgtgctaggatttttagcattaaaaagcgggttttttggcaaaaacgcgaacattgttagttacaaaattagaaattcttcattcaagaatatttttttagatggcttatgtactgctcatcgttatactccccatttgtgcattatttcaaattctgattcaatttgtctcagctcagcgtaataagtacattttgtgccaatttattctggtggtgattatgaaaattgtaagtttaggcctacacttaggctcaggcttaggctcaggcttaggcttaggcttaggctcaggcttaggcttaggcatatgctgaggcttaggctaagacttatgaagaggctcaagcttaggcttaggcttaaatttaggattaggcctaggagctagttaaaagctaggcttatgcttgggttcaggtttaggcttagtcttagccttatgactatgccctttttcaggaatgtttttggtaactttctttaaaaaattaataccaattactattttagaaatgagtttttttcagtgcaacttcagaaaaatttcaaaaaatttaattgaaaaaatttaatttttgcataaactaagcaggtgaacttcgccaaagtttaccgaaatcgaatctcagtcttctggtccattttaattgcatttttgcagacttgttgtataatgtctcttttccgagttcaggccacaattcatgaggtttatttacatattacatactaaaattccaatttgttttttcaaaatttcaggtttttcaagccgctgagttatcagattgctttctcactcctgtctttattaaaatatcctatttaatgtaccatcggcccagttttaaaacattttgtaaatgtttgaattgctgtaaatgtttcaaaacgactacagttgaaccactgggacatagacaagaaatttttgcgataaatgctaattaatgttgccagtaactgaatgaacctattttaattgaaaatgggtaaataaaatatgctgaattcaaaaaatctaaagttaacccaccaaaaactatcaaaaagagacaaaaatgggcaattgaacatgtttgattttgtcagtgcacatgttttttttggtcagtgcaaattttttttggtcagtgcaaattttttttggtcagtgcagttccacctgtcattgtttcagcaggttgatctgtagaacaacagttttctaaactctacaaatatttattattcatgtgtattaacaaattagactacattctggagatatacacgctccatctacaatgtacaacgatagaaaatttagagccattggtagagtattcgaacttagccgtatcaggatgttccctcggaaattcaatgattggctgaaacaatcttgaaacatctgtttctgtccaacattcaaatacgcagcctttgaagtttggcttcttgagaagaatctggaaaaatgaggagctaggtttaggcttaggcttagggttaggcttaggcttatgcgtaggcttaagcttaggtttaggcttaggatgagacttaggcttaggcttaggctaggctaggcttatgctaaggcttaagtttaggcttgtacttaggcttagcttattctcagatttaggcttaggcttatgcgtaggcttaagctaaggtttatgcttaggcttgagcttaggctcaggtttaggcttaagcttaagattaagcttatgctcaggaaattcttggaatttgccttttcctcacctctttgatcttcctggcatcttgatctgaaatctgtagaacgttaagagtgaaaaattcacgatgaaagaatgcttcaattggcgtctcattcgtgtcaactccgacttgtggttcaaaaagcagacgttttgccttcttccattgctccaacaaagtgagctcatgaaacttatcaagttcttcttcttcataatgcattgcgattctctctagtttgcctgcttcgaagtagggaaacagcttaatgcactgatcaaccgacatccacaaaccaagaatatcggcctgcacaggcttcattgatttgagcctatcaatcaattcctcaaagtgttcggtttgttcaccagtgtcaatgcaaagcatcttcaaaggcattttcaaccatgactgcaaatcattcaacgccattccgatgcagtcatttcctttaattttcctcggccattttatgcaaaattcgtcaaacttcagctctacttttgcttcgcttgtaattttaaaatcaataacttcgaaactgacaagccgtctcagtatacggcacacttttcgaacgaccagactgaaaagtaaaagctatccgttgaaggtggtgtgtgggacaaaccgatgttttggctccagcttgctcagtatctcgttgagcactttttctggcaattcttggagcgccatgtttgaaagctgaaactatgaaaagtaagtctctgcaaaagttttcgcaaaaagcaggtacagtgtgcaaaaggagcaaacaggcaattatcaaactgataaggatcattgtttgtcaatttttttaagatattcattgcagtcgttaatatgatcatcgtttgcttacacaacagtttttcacctatgcaaaaagtgtctagaagcttccaatttttttttgattttttaaaaatgaaaaattcagttttttataaatgcatcttgtagagcatgaaattctaaatattattgctttttgaatttttcccctatcaccaccccacgcagagttacgccttttgaaagatttcacagcgagagagtgtgggggagggggagacgcagcgcgctctctgcgtctcccctccaccacgctcttttgcttgccaacttgaaactgctataactccgcggggagtggagctactgaaaaatttccaactacaaaaatgtgcagaatttccagctctacaatttgcctctgtgtaaaacagaaaaaatccatagaattttcagattaaccctgcgggatgtgtctagaaactttcgagcagctgtcgataacgtggggattgattgtgaaaaagtggaaattgtgctgaaacctgataatatcgtcaatttatcagttgacggagatgatgcctccaatcacgatttggatgtaattttgaaggctcgattagcccatttatctgtgtcgtttgatactgaaaacaaagaaaatcgacgtattcactcggaatccttggcttctactttaaaaaacctagaaaactgcacaacacggagcctcctgttaaaggatctcagttgccacgaaattctgctccttctaccatttttcaatgttctgggggagatttcaattgatggcatcacatgtatcgatcagctccgagaagttggacagcggagccaatggagcaaggtcaccagtttgatatctcgcgtttggattaaagatatgaccatactcaagcatttattccatttaaatagattttatgtcaaagctaaatcgattccggttgagagtgcgattaagataagagatgtaagtttaattttttttttcacttaggcttgtaactaggcttgaaattctgtacaattttgcaattaaaatttttttcgatagctccgttctctgcagagataaatatgattacctacagctatgtagtcggaaacttctacacactttttgcatgaataaatgttatagagctcaaaattctgtacatttttgcaatttaaagttttccagtagcaccattccctgcagagttacaccactttaaagttggcgggcgaatgagcgtggtggaggggagacgcagagagcgcgctgcgtctcccctcccccacactctctcgctgcaaaatcttacaaaaggcgtaactctgcgtagggtggtgatagaaaaaaaattccaaaagcaacaatgcataaaattttgtgctctacatgacccttttataaaaatcgaaatattttccaattttaaaaaatgagttttacagaaatgaatgtaattccagattcttctaaacaacgccactttccaaaattgcgttattcgcattgccgagtggaaaactggcataccggaaatagcaaaagtatttcaaccggactacacagacgggaatctaattcgttatagaaattcattcactatttcttttacttctcacagtctttgtatcaggagaaatgaataataaactcagtgttttgggatgctgaacttgctgaaagataatatgtcatggtgcatcgaaaaaatagattgacagacgaaaaaataaattggcagacgaaaaaatagattgacagacgaaaaaatagattgacaaacgaaaaatagattgacagacaaaaaatagattgacagacgaaaaaatagattgacagacgaacaatagatggacattacaaaaaaatagattgacagacgaaaaaatagattgacagacaaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaatagattgacataccaaaaaatagattgacagacgaaaaatagattgacaaacaaaaaatagattgacagacgaaaaatagattgacaaacaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattggcagacgaaaaaatagattgacagacgaaaaaatagattgacaaacgaaaaatagattgacagacgaaaaatagattgacagacgaacaatagatggacattacaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacaaacgaaaaatagattgacagacaaaaaatagattgacagacgaaaaaatagattgacagacgaacaatagatggacattacaaaaaaatagattgacagacgaaaaaatagattgacagacaaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacaaacgaaaaatagattgacagacgaaaaatagattgacaaacaaaaaatagattgacagacgaaaaatagattgacaaacaaaaaatagattgacagacgaaaaaatagattggcagacgaaaaaatagattgacagacgaaaaaatagattgacaaacgaaaaatagattgacagacgaaaaatagattgacagacgaaaaaatagattgacagacgaacaatagatggacattacaaaaaatagattgacagacgaaaaaatagattgacagacaaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaaatagattgacagacgaaaaatagatagacggacgaaaattagattgacagacgaaaaaatagatctctgctctcccgctctgtttgacggtgtttgcagatttttgaatttgcagcatatttttaccgatatttttgagaacaattaggagagtaaccgatttaaaatttattccaaattttcattaaatgccttttatctttttttttctgcaaaatcactggatagaatacaattaaaatttattaatgtcaacacattatcctaaaaaaatgaaacagttagatccatatctcgatcgtccatgatatttcttgaatttcaaactgcggctcgttttcggtataatcaaatgaatatccgtatctgtggtccggcttaaataatccaaaaatattttttctggctcgaaaaggatatgatatggaacattgctggagttaatgagaagattctgaaaataaatatataaatttgcattaaaccagagacccccaggcccggcaaatttgccaaatttgcgtagcttagcaaatttcaaaatttgccgtacacccctgcttcaaactcacatctcaaatttgaatagcatctttgacactcggcttcaaaatggaaccttttgaaatgatcttatagcatatagtacctccttttctttttcgcttgcttccattgctccatactgtacagctctttcacttgttccgtgcgcttctcaacaccaaatgcgatgtcttcaagtactcccggcttaagatacgatacaactttaattattttatccgggtacagagaaagaagggaggtactttgtgtgtgtatactaccggctttcttcagtctatccatgaaatcttcgaagatatgattcagataacatttgaaaagtttcaatgggtactgtaaaaattcagccatatcatccaacattatttttacatgatctcctcctgggattctcttctgacgaacccatgtcttactataaattttcacatagcaaccaccagttacatcgatgtacttgaaatatgttccatctacacgcagctccaaaacttgcagcttatccatattaactaccagttcttcaagacaaatcccatgatgatcaatagcaatacggaagtttcgagtcacttttcgaactaccaatctgaaaggctacacatactacaaagactaaaaactacaaagactcacctatcaactggcagcagtttttccacgatttcctggataatatccatcggcatgtatctgagagaagacatttttttgtgcaaaatgagaaaaagactgctgaataagtcaggtctgtttgcatcagtttagggaacgaaatgccttatcagtttggcattttgcctattcggcaaacatacgaactttgacattaaatgtatagggtaaaacattcgtgtttaactttgttcacatggtgtcagggtgtcccattacggtttgatctacaaaaaatgcgggaatcttttgcccggaaaaaaatgcgacacagattcccgcgattattgtagatcaaaccacgtgcttgttgtgatgatttattattttgcaaaaatgtgtaattttacgaaatatatataggcggttatgatttttttttgtctgtaaaattaaatttagaccaaacaaaaaactgtgcatatattttagaacaggctcaataaaacaaaaacctcaaaaaatcaaaagatgagggttagtttggtctgtttgccaaagaaagcaaatgtcacactgataagagacggcttgcctctatctcaaaaatgacgttttcatttcttgcctacactagggtttgccgaaattgaaaaatggaaatatttgccggaaaaacggcaaccgaaaatttatttttcggcaatactgcatgcatcctttttgaagtttttccgcattttaaaaatacccctctaaaaactttcggaaaattgatatccggataacggcaaataggcaatttgccggaatcgaaagtttccggtatataggcaaatcggcaaaaataaaagtttccggcaaatcagcaaattggcggaattgaaatttccggcaaatcggcaaaccggcaaattgccggaattcaaaatttccaccaaattgccggaattgaaaattttcagcaaataggcaatttgcaaaaaatgaaaatttccggcaaatcggcaaattgccatatttgaaaatttccgccaaatcggcaaattgccggaactgatcatttccctcaaattggcaaatcggcaaaccggcaatttccgctacctgcatttaaagttagcatgctattcaactttcacatgcataaagtttagtcaggtttcaggaaactaacttgctctaatagaaacaggtgcaaaactagctttagtcattcttaaatatttgccactcatacaatggatttgactagctctgctgcaaaaattctaatttctggtgtttttctttttatagcaaatatcatactattcctagtttatcgaaaagcttatcgttttaacagtgagcggaacacggcgacatacccaattgtgaacagtttctataaaaaagtggctttaataaatgcattatattttattgaatcaatcttgatagttgttaatctaaatgttactaatgaatggcttaataaaattgcaataatatttaacaatactatgaaaactatcgtgatatacataggacaatcatgtcaagtattaatagctctacttgcaattcgaaagatttttattttctttttcccggacacgaaacaatatttaatggttaccgaatatacactaaagattactaccaattgtattttattggtttttgtgctaggatttttagcattaaaaagcgggttttttggcaaaaacgcgaacattgttagttacaaaattagaaattcttcattcaagaatatttttttagatggcttatgtactgctcatcgttatactccccatttgtgcattatttcaaattctgattcaatttgtctcagctcagcgtaataagtacattttgtgccaatttattctggtggtgattatgaaaattgtaagtttaggcctacacttaggctcaggcttaggctcaggcttaggcttaggcttaggctcaggcttaggcttaggcatatgctgaggcttaggctaagacttatgaagaggctcaagcttaggcttaggcttaaatttaggattaggcctaggagctagttaaaagctaggcttatgcttgggttcaggtttaggcttagtcttagccttatgactatgccctttttcaggaatgtttttggtaactttctttaaaaaattaataccaattactattttagaaatgagtttttttcagtgcaacttcagaaaaatttcaaaaaatttaattgaaaaaatttaatttttgcataaactaagcaggtgaacttcgccaaagtttaccgaaatcgaatctcagtcttctggtccattttaattgcatttttgcagacttgttgtataatgtctcttttccgagttcaggccacaattcatgaggtttatttacatattacatactaaaattccaatttgttttttcaaaatttcaggtttttcaagccgctgagttatcagattgctttctcactcctgtctttattaaaatatcctatttaatgtaccatcggcccagttttaaaacattttgtaaatgtttgaattgctgtaaatgtttcaaaacgactacagttgaaccactgggacatagacaagaaatttttgcgataaatgctaattaatgttgccagtaactgaatgaacctattttaattgaaaatgggtaaataaaatatgctgaattcaaaaaatctaaagttaacccaccaaaaactatcaaaaagagacaaaaatgggcaattgaacatgtttgattttgtcagtgcacatgttttttttggtcagtgcaaattttttttggtcagtgcaaattttttttggtcagtgcagttccacctgtcattgtttcagcaggttgatctgtagaacaacagttttctaaactctacaaatatttattattcatgtgtattaacaaattagactacattctggagatatacacgctccatctacaatgtacaacgatagaaaatttagagccattggtagagtattcgaacttagccgtatcaggatgttccctcggaaattcaatgattggctgaaacaatcttgaaacatctgtttccgtccaacattcaaatacgcagcctttgaagtttggcttcttgagaagaatctggaaaaatgaggagctaggtttaggcttaggcttagggttaggcttaggcttatgcgtaggcttaagcttaggtttaggcttaggatgagacttaggcttaggcttaggctaggctaggcttatgctaaggcttaagtttaggcttgtacttaggcttagcttattctcagatttaggcttaggcttatgcgtaggcttaagctaaggtttatgcttaggcttgagcttaggctcaggtttaggcttaagcttaagattaagcttatgctcaggaaattcttggaatttgccttttcctcacctctttgatcttcctggcatcttgatctgaaatctgtagaacgttaagagtgaaaaattcacgatgaaagaatgcttcaattggcgtctcattcgtgtcaactccgacttgtggttcaaaaagcagacgttttgccttcttccattgctccaacaaagtgagctcatgaaacttatcaagttcttcttcttcataatgcattgcgattctctctagtttgcctgcttcgaagtagggaaacagcttaatgcactgatcaaccgacatccacaaaccaagaatatcggcctgcacaggcttcattgatttgagcctatcaatcaattcctcaaagtgttcggtttgttcaccagtgtcaatgcaaagcatcttcaaaggcattttcaaccatgactgcaaatcattcaacgccattccgatgcagtcatttcctttaattttcctcggccattttatgcaaaattcgtcaaacttcagctctacttttgcttcgcttgtaattttaaaatcaataacttcgaaactgacaagccgtctcagtatacggcacacttttcgaacgaccagactgaaaagtaaaagctatccgttgaaggtggtgtgtgggacaaaccgatgttttggctccagcttgctcagtatctcgttgagcactttttctggcaattcttggagcgccatgtttgaaagctgaaactatgaaaagtaagtctctgcaaaagttttcgcaaaaagcaggtacagtgtgcaaaaggagcaaacaggcaattatcaaactgataaggatcattgtttgtcaatttttttaagatattcattgcagtcgttaatatgatcatcgtttgcttacacaacagtttattaggtgagcctgtgtgttagagttccaggtaatttcatgcagcattcattgacgtaacccacggaattgtgctgaaactgcagttttgtgcatgatttcccacccctggtgctcaaaataaaaaaggaaattcgattatgttttggtcttttggatttggagcagagaagtctatttttttagcaggtggctccgccgcgcaaactgtccagtagttgaatttgagagctttgtgcatggacgccaagataaaagttgtttaaaatatgaataatatactttattacacattatataggaaaccaatttttgaagtttcagaggtttaatgttttacaaaaaccgtgaatattacaaaaacgtttattacgttcgttgaatcacaaacttccatttatcgtccacaaaagaataatcttcacaatgtattgcaaaattggaattgtaatttgaataattaattttgaatgcatcgccgtcagaataatccgcttggaatatttgtgcaagttcaacaggtttcaaattagctttcacaataaaaattgtgcattcctggaatgtacttcttgtcagcagatcctgcaattatatatatatatatatatatatataggttatgtatataatgtatttaatgcatataatgtatataatgtatatcaatgttatttccaaggggtatttgaaatttattccagccagttggatgcgccggaggcgcggtcagcgtctggtaatgcatataatgtatataatgcatataatttatataatgtaaataatgtatataatgtatataatgcatataatttatataatgtatataatgtatgtaatgcatataatgtatataatttatataatgcatataatgtatataatgtatatattgtatataatgtatataatgtatataatgtacatacatagttgtgactttgttttataacactttttaattttccgacaccatttaaaggtcattcgtttttaaatagtgtacattcacgatggaaatagttgtaaatgccaagtctcccgagtggttgttttgggtaaataggttgtaaatattaccaattacgcttacgagttctacacatcgtttcctatttttctggatgtaccatgtttctgtgtcggcggcgagaaaaataggaggagaagatgtgcagtcgtaaatttattagtgagaagagcggtattatttacaacctatctacccacccagtgacatttacaatcactttaatatagaatgtgtattgtttaaactaccttaaaaactacctcgaaaactcaataacaactcacatctcgaactttaatcgcactttgtattggaaattcatcagtatagatactaaactcctcaaaatgaaacagatattcaatatgttcacattcaaacgaacaaatccaaaaattgaatttcttcgtgttcttccattgatccagatgagttatctgctcgaattcgtcagctgcaaccgtttcccacaacaagatttcttccaatgtttgactattgaataaaggaaggattaataaaacatcatcgaatgagaacttattcagagtcacagtttccacgtggatattcacatcctccttcagaacgtctacaaaataactgacagtgttatgccgatacttttccctgcttgaaatgtataactgtgatgtatgcctcagaagtatcttcaaatcaatgaaagctgcttttatatagtttacaccttctatggttttctgttgctttttgaaccaaacacatgagccaccattgaattcattacagtagttgattccaattccgtcgaaatctaccgaaacgctgttatcccataatctaattgatattttgttgaagtgagttccgagtttatcaatagcggtgcgtaaacttctacacacctttcggcaggttagtctggaacggactagttttagggtaacaatatatatacaatacatatataggtataatatacaagtacttttatatatatatatatgtacaacttttccaattaaaatataatgttgtatgttttcgtttgcgtttaggatagttaattgttaataataaagactaaaaaaataacttaaaataactcacatttccacaggtcccaatttttccaaaacttgattcgcaattgatataggtaaatccagtaaagtttgctgcttggaagtcattttttcaactatctgaaagtttggaaatttttatgcaatacaaattgtcaatcgactaaaatctatgatataataaaaaagttaagtataaatcgtgaacaattccaatttgtttaaaaaaaaaatcaatcgaacaagaaaattgtccagttatcactggaatgactataaatgttgtgctcactgtcattgctctttttctctaattctccacttactataagcttcttagttttgacgcgttgtgtgaattcaaaatgtttttgctgagaataaaaaccaaaaaaaaaaaaaaaaaaaaaaaaaaccatttgaaaaaacagaaaacatttcattgatactgaccaaagcgatggatatactacaaaaaatactacgaaaacgtttatgatgctcgttgaattacaaactcccattcatcgtcatcgtcaaacgaataatattcataatgtattgcaaaattggatttgtcgttcgaataatccagcttaaactcatcaccaccagcatagtccggttgaaatactcttgcaagttcaacaggcttaaaatttaatttttgaatcagaaatgtgcatttctggaacgtacttctttgcagcagatcctgaaaattttttagctatataactcaaaaaactaaaaaactcatagtcaataacagctcacatctcgaattttaatcacactttgcattggaatatcatgagtattgatacaaaactcctcaaaatgaaaaagatattcgatatattcacaattcagcgaggaatcccgaaagctgaatatcttcgagttcttccattgatccagataagttatcagctcgaatcgaccaatttccaaaattctccgcaacgagatttttttcaatgttttacaattgaataacgggaggattaataagacatcatcaaatgaaaaatgattcagcgtgatagtgtccacgtggatattcacttcctctttcagaacgtttacaagaaagttgacagtgttgtgcctgtacctttctttgcgcaaaatgtataatttcgatacattcttcagaagtatcttcaagtcattgaaagctgcattcctatagtgtacaccttttatggttttcgattgcccattgtatataacatatgattcaccatcaggtgcatcacggtaggtgatttcaattccgtcgaaatctatcaagacgtcgtgattctctaattcaattgagattttgttgaaatgaacgcttttatcaattgcactccgtaaacttcgacacacttttcggcaggctagtctgaaacgggctatatttaattttaaaggtggagtagagtcgaaattttttttgctttaaatgacagaaaatggaccctaataacctaatataactgtaaaaaatttttaaaaaaatttccaaatttgttttgattttttcaattttgagaaaatcaaagaaacggctgacgaaatttgaattaaatgagtgacgtcatttttgatattttcgcgttttctggctaaattcgtcgatttttctcgattttttcttcaatatttgatttgaaacattttttgtcaattatttaaaatagttattttgaaaaaaattaataataaatattaaattgcggattttaggccaattttgacatttctggcgatttccttaaggttttcaagttttttttacggaaaagtggttacataaacaatttttcaattcaaatatagaagaaaaaattgagaaaaatcgacgaatttagccagaaaacgcgaaaatatcaaaaatgacgtcactcatctgcgcggtaattcaaatttcgtcagccgtttctttacttttctcaaaattgaaaaaaacataaaaaatatagaaaattttttaaaatttttttacagttatattcggttattagagtccattttctgtgatttaaagcaaaaaaattttcgaccgtactccacctttaagatttacatgaacgttatatattttcaaatgaacggagagtgtttatatatacatatgttaaattgtgtaacaatatagattttcgaagaactcacatttccacgggttccagtttttccagaacttgatttgcaattgaaataggcaaatcgagcagagttagcggcttagaagtcattcttgtttttccacaactcaagtatttaaagatgagactgtaactgcacacaaaaattgcgggaaaatacatttcgaaatttttaagaggtcacatcgcattggtttttagttaaagctccacttaacttgcgaaatttttagaacttcgaaattttcagaattttataaattaacatgagaaatttatttgaaaaattataaataaattcacagaaatctatgcaaaaggcgccacaaaaattcaagcgatggaacaacttgaggacacgtagaagtaatgaaatcactgcactctctattttctctaattctccacttactatcagttttttaatgtgtacaattcctatcagaccctttttgattgtttacttttctggaagaaactgatttcgatgttagcgtgttttcaatgagaaatgctattagaatttgagatgtgagttgaagaaatcctctcagcttgtcaaatagtagattttcagcacattaccaattcccaacactttcagcaatgctacatcgacttccaaactgcttgacttagttttcagaaaaaggtgaaaaatttacaggtacaacattttccagaaatcattgcggaagtttcatacacagggaaatataaaaatggcaacagaaaataatatacaacaagacatagtcagcatcgtttgatttcaaacttccaagcgtgacttccaaagggacaatctttgaaatttatttcaaatttggatttgccattcgaataatccagtttaaactcatcgccactagtataatccggttgaaatgctcttgcaagttcaacaggcttcaagttttgtattagaattaaaaatgtgcatttctggaacgtacttctttgcaacagatcctgaaaattatttctggggtataaaacatattatcacagttataacttacatctcgaactttaatcgcactttgtattggaaattcaggagcattaatgaaatttagattttcattgacaattggttcatcgtaactgttgctctttacacgaaaagtgctgaaattcaattaatttctatttcagcttgattggtacaatattttccagaaatcgatgctttatacataaggaaatataaaaatgacaatagaaaataatacgaaacacaaatcgttagcattttttgatttcaaacttccaagcgcgcctttctttgggacaatctccaaagtttatttcaaatttggattttccgtttgaataatccagtttaaacgcatcaccaccagtataatccggttggaatgttcttgcaatttcgacaggcttcacactaaatttttcaaccgaaactgtgcattttttaaacgtacatctttgcagcagatcctgaaaattaatttaattataaagcttattatcaaagttataacttacatctcgaactttaatcacactttgcattggaaatttatcagttttaatactaaactcttcaaaatgaaagagatgtacaatgtattcacaattaaacgggaaaagttgaaaactgaattttttcgcgttcttccattgatccaaactagttattttcttgaattggtcaatttcgaaagattcccacaatgaaatctctcgtagcgttttagcatttagtaacggaaggattgttaaaaccttatctaatgggataaaagtcagggctatagtttccacgtggatattcacatcttccttcaggatatctacaagtaagctgacaatgttttctctatctcttgttttgctggaaatgtataacttagatgtatgtttcagaagtatcttcaggtccttgaaagctgcttccatacagtttacaccttctatggttttgttttgcctattgctttgcatatatgatctaccattcattgttacagagtagatgatttcaatttcgtcgaaatatatcgaaacgtagcagttgcacaattcaattgagattttgttgaaatgaacgttttcatcaattgcactccgtaaacttcgacatactttccgggagattagtctgaaacgggatatatttaattttaagggtaatttgacaccactttttgctcaagattttttcagccattgattggtttataaaacaagttagtacattttttaatgaactgaaagtgtttatatttttcgaaaagttgtttaataatatcgattttgacaagaacttacaattccacgggttctagtttttccagaatttcattcgcaatttttatgggcaaatcaagcaaagttagttgtttaacagacatttttgacagtttttctgaaacacaagaaaagatacacagtgaattgaagaatgtttcacaaagaaagttatttgttttagtgctcaaacacgtagtgtcaagttgtcccatcgctccactgcgtacaaaatggcgaaagaatacctttttaatgtttgtgacgtcacagcgaattggcttccaattaagtttttttatattttttcatttaaatttcagtgtttattgactttattcgttttttattgtattgaaaaccaataatgcgaaatgcgcggtgatgtcacaaaaattcaaaaagtattctcccgccagtggagcgaagggacaacctgacaccacgtgagataaagtcattcaatacaacaattcgactagaaacatgcaacattaaaataatataataaaaagtcaatggaacaagaaagttgatcagttatcacgacgaacagaaaaagtcgaaatcactaccctcaccatttttctttaattctccactcactatcagttttttattacataaaatgcataagagcggctgaagctgtttttgttaaaattccaatgctttgcgagtggaaggggtatgacgaatcaaataaaattggctcctggcgatttttaagttatccattacatttttgaatttatggaaaaatattttcgactttataaagtaattctttaattggatttttataaaaagtcggctcaatcgttcaataaataactctgcaaaatgatgttatatactgcaaaagtttcatatgattcttaaaatgacatggttcgatcaaaaataaaaaagaaactgaaatacaaaacatatataattagtcagcattttttgatttcaaacttccaaatgccatcacgaaaggaacaatctccaaaatttatttcaaatttagatttcccgtttgaataatccagtttgaactcatcgccaccagcatagtccggttgaaatactcttgcaagttcaacaggatccaaatttaaatttagaacaaaaaatatgcatttctggaacgtacatctttgcagcagatcctgaaaattttttctgggctatacagcttattatcaaagctattataacttacatctcgaactttaatcacactttgcattgaaatgttataaatattaatagtaaaatcctcaaaatgaaagaaatattcgataggtggacaatcaaatggggaaatccagaaattgaatcttttcgcgtttttccattgatccagatgagttatccgctcaaattggtcaagtgcaaacgtttctcgcaatgtgatttcttcgaatgttcgactttcgaataacgggaggattaataaaacatcatcaacggaaaaattatccagagttaaagtttctacgtggatatgtgcattctccttcaaaacgtctacaagaaagttgacaatgtttcctctatatcttcctctcttcaagatgtataacttagatgtatgcttcagaagtattttcaagtccttgaaagctacttccatatagtttacaccttctatggttttccgtcgcccattgaacagaacatatgatccaccattgaatcgagcagagtgggtgattttaattccgtcaaaatctaacaaaacgctgttactccacaattcaattgagattttgttgaagtgagttccgagtttatcaatggcggtccgtaaatttcgacacacttttcggcaggttagtctaaaacgggctagttttaatttgaaaacgattttctaatgaacagagagtgttgtagatttttgttaagttgttctatactcaaaacttttacaagaactcacatttccactggtcccaatttctccaaaacttgattggcaattgatataggtaagttgagcagcgttagcggcttagaagtcattttggggagaacacctgaaacacaaaaaataaaaggtacattgaaacatgtatcaaataaagagattattagttttacgactcaatttgttcaattcaaaaactcgtctagaagcatgtaaagaacatggaatgtgaaaaaaattatttcaatttattcaaaaaatcagttgaacaagaaaattgataaggccaactggtgagtttcgaaatcacttccttctttccctctctatttttttctagttcttcacttactattagttttttatgacgaaaaatgcatatcagaagaccctgtcagattatttacttttttggaagattttatcttgtttgaaatgaattcaaattgacagcaaccaatatttcttaaagatggtatatgtaactgagaagaataaggtagcaaacacattattaaattctgatttgtttttggaaaatctttccttacacagaatgtgcataaatccgataaaaatgttctcattttcggcatttcgttattcaatatacgctggagttcatcttaaaccgaatttccggaaaaagataaaaaatttacaagtaaaacattttccagaaatcattgcgaatgtttcatacagaggtaaataatattaaaatgacaatagaaaataatacataacaaaattagttagcatcttttgatttcaaacttccaagcgcgcctttcttcgggacaatctccaaagttgatttcaaatttgaattttccgtttgaatactccagtttaaacgcatcaccactagtataatccgattggaatgttcttgcaatttcgacaggcttcacattaaatttttcaaccgaaactgtgcactttttaaacgtacatctttgcagcagatcctgaaaattattttaattgtaaaacttattatcaaagttattactttgtattggaaaatcatcagtattaatagtaaactcctcaaaatgaaagaaaaattcgataggtgaacattcaaaaaaggtattccaagcactgaatttcttcgcgttcttccattggtccaaataagtaatcttctcaagttggtcaatttcaaaaattttcgacaatgagatttttttcaatgtttcacaattgaataacgggaggattaatagaacatcatcgaatgaaaaatcattcagagttatagtttcaacgtggatattcacattctccttcaaaacatctacaagagagctgacagtgttatgcctatacttttgttggcggtaaatgtctaattgcgatacatgcttcagaagtatcttcaagtccgtaaaagctgcttccatgtagtttactacttctatggttttctgttgctcattgatccaaacatatgatccaccaataaattcataaaagtaggtgattttaattccgtcgaaatttaacaaaacggagtctatgaaaaatttaattgagattttgttgaagtgagttccgagtttatcaattgcactccgtaaatttctacatacttttcggcaggttagtctggaacgggttagttgtgatttaatggttttaccgttttatttaactttcaaaattcaattgtactgttgctaattgcattagttaagttgaataaattaatcaatcaagtacatttttaatgatcagaaagtattgtcaactccaattcagttttccagaaaactcacatttccactggtcccaattatatcaatacttggtttgcaattgatataggtaaattgagcagcgttagcggcttagaagtcatttttggaagattacctgaaactcaaaaaatatacactataaattgaaacatgtatcaatctttcaataaaaacacttgttcagaaacatgtaaaaacatgaaatgtaaaaaaaatcgatttaatttgttcaattgaacaagaaaattatacaaaaaacaaactagtgagtttcgaaatcactgccctctctatttttctctaattatacacttactatcagttttttatcacaaaaaatgcataagagctgtttggtaaaatattccttaatatatcttaaattcttcatatttcttaaagatgaaaaatcttaaagatgatgtaattgagaagaataagaaagacaacgcattattaaattctgattttttttggaaaatctctccttacacagaatgtgcataaatccgataaaaatttgctcatttttggcatttcgttattcaatatacgctgggaaccatctttgaccgaattcccggagaaaggtgaaaaatttacaggtacaacattttccagaaatcattgcggaagtttcatacacagggaaatataaaagtgagaacagaaaaataaactttatacgaaacacaattagtcagcatcttttgatttcaaactcccaaaggtgaccctcaaagggacaatctccaaaatttatttcaaattcagaattcccgtttgaatactccagggtgaactcatcgccaccagtataatccggttgaaatactcttgcaagttcaacaggcttcaagttgagttttagaacaaaaattgtgcatatctggaacgtacatctttgcaagagatcctgaaaatcttttctgggctataaaacttattatcacagttataacttacatctctaactttaatcgcactttgtattggaaattcatcagtttcaatagcaaaatcttcaaaatgaaagagatattcgatatattcacaattaaaccaagaatcccaaagtttgaatttcttcgcgttcttccattggtccaaatgagtgatcttctcaagttggccaatttcaaaaacttcccaaaatgaaattacagagttaaagttttcacgtggatatttacattctccttcaggatatctgcaagaaagctgacagtgagcctttcctttactctgccgtaaattgttaaatccaatgcattcttcagaagtatcttcaagtcggtgaaagctgcttccatatagtttacaccttctatggtttttcgttgcccattgtactccatatatgatccactattaaatgcattacggtaggtgatttcaattttgtcgaaataaaacgaaacgctgttactccacaattcaattgagattttgttgaaatgaatgtttttatcaattgcactccgtaaacttcgacacacttttcggcaggttagtctgaaatgggatagttttaatttaaagtcaactaaatgaaaatcgttatcaaaaacaattaaactttttttagtgagcaaaagcttttgtatattttcagtagcgtcagtttacatttgtaaaaaaaaactcaaatttccacgggttccagtttttccagaacttgattcgcaacttctacaggcaaatcgagcagagttctcggcttagaagtcattcttgaatgtttttatgaaacacaaaaacagatacactgtaaattgaaagatgtatcgaatgaaggggttcttagttttacggctcaagtcttgtggtgttatgttgtctcatcgctccactgcacaggaaaacaaaatattttgacttttcgggacgtcacagcgcattttctgggacagcctgacaccacgtgcagaaccatgcaaaattcaaacaatatctgtagaaaagttatcagtggttatacttaaacagtcaacaaactagtgagtttcgaaatcactgccctctctatttttgtctaattctccactcactatcagttttttatgacgaaaaatgcatggcagaccctgtttgattgtttacttttcaggaagagcggctgaagctgtttgataaaatagcaatgctcatttcgtaacatttcataattttgtcgaatgattgcgtctttctttctctaaacctctaactaaagaacgtttttatctttcgtttttaacatctttgattctatggtaattcagtgtccaatagtaatttcattttaaaacaatttgaatcaataataaatattaactttacactacttcgattctcatttctaaactttcagagaaacttccaaacatgcctgctaaacggctaactcttctcgatctgcctataacagttgcgaatgaagttctggagaagcttgaaatcgaggaattgtgagtatttaagactaacttacaaactaagtattatctacatagttaccaaacgagggaatttttttttggtcttctacagggtggcccataattatgcggaccgagttgctctcacaaaaatatgttttttttctcgcctgacaaattttaaatttttgttttatttgttcattgataactgacatatgttcctattagttaactttaaaaaaatgtgattttttaaactacgcaatctaggcagagtcgtcaaactagcatcatctcccacactgacgactctttggcacgcaacgatttttgagtcagtaatgtatacattttggaagcgaaaaatatattttagtaaatgttaaagtatatgaaatcggttccatgaaattccagctcctgttgggtgattgtttgacagtgactaaagtcggttttacaaagagttcaatagctagtgacagtttttggtatatctcagccataaaatgagataagcacataatttttcacacaaggaaagaaaaatattagtaaaatcatatggctatttaccaaaacatttactttttacataactgttgtgccaagtggaacgtcagctttctgatgttcttgatttgtctcccttcaatcaatgaccacaccaatgtcagatgaaaacatttatgaattttattgcaaaacggattctcagaaaaaagtcaatccaaatataattgcgagagtgatgatatttgcaatagaacctagaaatgacaataaaaaggaaaacacctatgagttgattgccaacgtcaaaattttttaggaatgtcagcaggcctgtaaaatttcacaagtggaaaatttgaaagtttgacaacatattttgttccttagaaaatttggaataaaatatgtgttgttataatatttttgaatgttccaatcagattttatgagcacgacttacggtccgcataattatgggccaccctgtatatgccaattgatggtgttagagaagattcctccaaagcatttagctacttcatgagaatcaaaaattaaaattaattcgttccaggatgacctgccgaaaagtttgtcgaagtttacggaccgctgttgatagactcggagctaacttcaccgatcttgaagttatcttgaataaaaataatcaatacgtttcgatatgtctcgacggtattacagtcaaatactctaaatcatctcgtgatggaacagatgtatgatgctccagaactcggcaacggaaaatgaattttataagaggagcaaactatttgaacatatttttcaatgatttgaagattcttttgaagcatgtatctcatctatctattcaaaccgtttggaaagaagtcaaatatagagaatactttgtcagatttctagtagacgtattgaaagaggaagttccaagtcaaacaaccaaacaaactaaagggaatctccacatagaatctataagtctgcatacggtctcaatcgacaatgttttattaatcataccgttattcaatagtcaaacattgagaagtattgaattaggaggaatacataacagaacatctcgcaaatttgagagaatatttcgcctggatcaatggaaaaacgcgaagtacttcactttttgggatacctggtctaaatgtccacctatcgaacatttcttgcattttgaggagtttagatttgaaactcaagattttccaatacaaaatgtgattaaaattcgagatgtaagctataagttatacctttgataatcaattatggttctataaccaaacaaaatttcaggatctgttgcaaagatgtacgttccaggagtgcacaatttcggttctaaaatcaaattttaaacctgtcgaatttgcaagaatatttcaacaggactatgctggtgatgacaaatttaccatagagtattcaaacgggaattccaaatttaaaataaattgcggagaatatcatgaactcatgtgggagtttgaaatcgaaagatgctaactaccgtatttcctctattagtattgcacccaattgtttaactttgacagcttatatctcagttatcgtttgtcctagtcaaatattgtcaattaacaaaatatttattagttctttttctatcaacttgtagtttataatatattgatatcttcaaaactaaccgagatatagcgtttcaaagttaagtagtcgaatgcaatactaatagaggaaatacggtaattgtgtttcgtattattttctactgtcatttttatatttccttgtgtatgaaaattccacaatgatctcctctggaaagtgttgtacctgtaaatactttatatttttttccaaaataaactccttttgattatttacttttctggaagattttatcttgtttgaaatgaattcaaattgacagcaagccatatttcttaaagatgggatatgtaattgagaagaataaggaagacaacggattatggagttctgatttttttgaaagtctccttacacagaatatgcaggaatccgataaaaatgttctcattttcggcatttcgttattcaatatacccggagtccatcttagactgaatttccggaaaacgatgaaaaatttacagttataacaatttccagaaatcattgcggatgtttcatacacagggaaatattaaaatgacattagaaaataatacataacaaaattagtctgcatcttttgatttcaaacttccaaatgccttcacgaaaggaagaatctccaaaatttattccaaatttggaattgtcgtttgaatactccagggtgaactcatcgccaccagcatagtccggttgaaatactcttgcaaattcgacaggcttgaaattttcttttagaacgtaaattgtgccctcctggaatgtacatctttgcagcagatcctgaaaatgtttttggttgtaaaacttattatcaaagttattttaacttacatctcgaattttaatcacattttgtattgggaaaccttcagtcctaaaactaaacacttcaaaatgcaacaaatattcgatatgtggacatttagaccaggtatcccgaaattggaggtactttgcttttttctattgatccaaatgagttatgctctcaaattcgggatctggaaacattcctccaaattcaatacttctcaatgtttgactattgaataatggaaggattaataacatatcgtcaattgataagtcacgatgcagacgtatagtttccatgtggatattcccttcctcttgcaagacgtctacaagagatctgacagtgtgttctctagcttggtcgttcgaagtgactataatcattagactagatgcatgcatcagaagtattttcaagtcattaaaagctatgttcaaatagttttcttctcttaaaaatttattttcccatcgcggaaagtcgcaatatacatatgattcaccaagagatgatttagagtaggtgatttgtgatccgtcaagatctatcacaatgcggtccctccacaacccaactgagagtttgttgaagttagcaccgcgtttattaacagcggtccgtaaactttgacaaacttttcggcaggccattctggaacggaatagttctaatttttctttttcattttctccatttttctaattgaaccagttctgaagcagattaatgctttggaggactcttcaataacaccatcaattgaaaggtggggtaccgaaatttgagactttgcgtttttagacccaaaatggtcaaaaactaccgaatttcgtaatgagacgttctgaaaatttttcaaaaaaaagttatggcctctcaaagttttggaaaaaacggcctattttcagctaaaatctcacattttggcaacttatcggtgtcgcagtgattggaacttaatttttattttattgtcattgattgagacgctttttgggccaatggggacggaaaattgtatcatatttgcgtccccattggccaaaaaaacatctcaatcaatgaaacaacacgtaataaaatgccaaaacatgcattaaaagatgataatcaaataaaaattaagttccaatcactgcgacaccgataagttgccaaaatttgagattttagctgaaattttccaaaactttgagaggccataacttttttttgaaaaattttcagaacgtctcattacgaaattcggtagttttggaccattttgggtctaaaacgcatagtctcaaatttcggtaccccacctttaacattaaaaccttcactcgttaggtacttatgtagatagtatttagtctgtacgttattgttaaatacctacaattcctcaatttcaagcttttccagaacgtgattctcaacttctataggccaatcgagcagagttggctgtttagcaggcatatttcgaagtttatctgaaagtttaaaaatgagaattgaagtattgattcaaattgtttcaaaatgaaataacactgaattactaatacactctgaattaccatagaatcaaaaatgtgaatagcagaagatgagaacgctggtagttcttttatagtagagatgtagagaaagaaagacgcaatcctttgagaaatatgaaatgttacgaaatagacattgtactttttgatgattttttagcgtttcagattattttcttcctttttacttatatctattgaatatatttccacctcaattaaaactcgagtagcttcaggtttaaaaaaaaccaattatttaagaaatattacagacaattgagaactatgccctttaaaaaaatgaatacttcaacttctatgaaaaccacacagtaaaggaaactatttgcaaatagcttttaataatgtaaaaatgattgcgaaaattaataaaactgaattttatttttcctcacttgaaaacgcaaaaaattaccaaaaattgaaaaaataatacaattctctctcactaccattaatttcgtctttctttctttaaaaaaacgttcaaaaatcaataaaaaataaaatgcctatttcgtaacattgcatatttttcgcaaaaggttgcgtctttctttctctaaatctctactataaataaacaaacaacgttttcattctttgcttttcacgtctttgattcagtgtccaatagtaatttcattttgaaaattttgaattaaattataaatattaagcttactctacttccatttttttcagtttcatcacactttaatcatatctttctcatttctaaactttcagataaactcccaaacatgtctgctaaacagccaactctgctcaatttgcctatagaaattgcgaatcaagttttggagaagttgcatcttttggatatgtgagtttttaacactaacgtacaaatagatactatctacagtgccggccataattctatccaattttcgatttttgataaatttacaaatttttcaaactagcacaactttaaaactgggcatgctatcaaaaaaagttcaactgaggaaatattgcccataattacgtctatttgtattcaattgtttaaattgtttaccagtgtcatgacaagaaatacagcggccgacatctcgtgagaccgtttttgacaacttttacagattcgcccgtatctcgaaaactaatttttttcctggaaatttttttgaagtaaaataatcttcatactacttaccatcatttgtgtctagtcacgttgttctgaaaaattcagcaaaaaagttatgagagatcaaacttgaatagtgtacgaccacacctagggaatttctcgcaagtgaagaattgtttcccctgaattttgatatcgtgtttaaatatagcttgattgtgattttacatgtgtaattattaaaaaatgcttgaaaaaaatatattcgaagtaagtaatctgatttttggttgtagagcatgagcagtgccaagtgagagactagtttgcacttccataacttgtttgcggaatttttcaaaccaaagtgactaggcacaaatgatggcaagtagcatgaaaattattttacttcaaaaacatttccagaaaaaaaattagttttcgagatgcggacaaatcagtaaaagttgtcaaaaacgggctcacgagatgtcggccgctgtatttcttgtcatgacactggtaaacaacttaaacaattgaatacaagtagacgtaattatgggcaatactttattagttaaatgtttttcgatagcatgcccagtttttaagttgcgctcgtttgaaaaatttgtaaatttttcaaaaatcacaaattggatagaattatggccggcactgtacatacctaacaaaaatctagcaagagaaggttttcaatatttttcagttgagcaagtaaaaatggaaaaatgaaaatcaaaaattagaaatataataattcgttccaggttgacgtgccgaaaagtttgtcgaagtttacggaccgctgttgataaaatcgaaactcactccacccatctcacagttcaattgcggagtaaccacgtttcgatatgtgtcgacagaattgaaaccaactactattatgacgatgactcatcgaattgtttcaataggaaacaaaaagccgtagaaggtgtagactgcatgaatgcatttttcaacgacttgaagttatttctgaagtatgcattatatttagaagtttggagcaaagatatatatagggaacactttgtcagttctctagtggacatcttgagggaagaagagaataatatccacgtggaaactatagagctgctccaattctacaaatgcgacgctgttttattaatccttccgttattaaatagtcagacattgagaagtattaaattgaggagcacttctctaggtgacggatttgagagaatagcttgtttggatcaatggaaaaaggcgaaaaagttcagttctgatacctggcttgactgttcacatatcgaacatttctttcattttgaggagtttagttttagaactgaacctttcccaatacaaaatgtgattaaagttcgagatgtaagttacaagtaataattttgataataagttctataaccaaaaaaaattcaggatctgctgcaaagatgtatgttccagaactgcacaattgttatttcaaaattaaattggaagcctgtcgaattcgccaggatatttcaaccggactgtgctggtggcgatacatttacccttcattattcaaacgacaattccaatttcgaaatacgttttggagtttttgatagagtacatgggtggttaacaattggacgatgctaactaattttgttattttctattgtcatttttatatttaaatctgtatgaacactccacaatgatctctgaaaagtgttagtacctgtgaatttttctttttttttccaaaatggaatccacggctcgagttcgtaaatctgctcctgggtttcattcattttcaaacaaaaatattaaaaaatacaatagctcagaacaaacaaatgttttcaggttttttgcgtaaaatcaaagtgaaagggatgttttacaatcttttcacattcaattcaaaatactttacaagccactcccattcaagagaaatatcgaatttgtcggtgccatttgaatattcaatcttaaagtccttaccgccggcatagtccggtttgaagactttagcaatttcaatcggatttgcgtttggtcttaaaaaacgtatcacgcaccattgaaatgtacttcttctcaaaagatcctgcaaaaaaagataatgaaatgaaaaataaggttattttacgtctcgaatttgtatcgcggtttgtattgctttaaatttgtccaatgtgtaaatatagaagcttttgaaatgaaagaaatgagcaatctttgcaccgaaaatactatagcgaattgtgcatatttctgcatttttccattgctccaagcaggatattcgttcgaattggtcaattgcaatcgatttcaaatcaatcgctttaagctctttagaatcaaataatggaagaatcgtaagcacttcatccaatgagaacttatcaagttctattctctttacgtgaatacatttttctgatttaaaaaactcaacgaaagttgtaacagtgtcgcgtatattttttgtacagttcataattctagctcgacttgcgtgcttcaatactatcttcaaatccttgaccgcactgtccataaagttttcttcatcagtttcctttttctgttcattgtaattgacatttgaatgaccatttgctgaatcagtatagttgattctaattctgtccaaatacatattgatatcatggtcatccagctggaagtctacatcgttaatacgaatcgttgcaaatgtatcaacggcagttctcaaactgcgacacactctacttcaaaaatacaatacaaaaagtattgaaaatcgttgttgcctaggagttttagtccccggttactcctaattttgtgagtttaaattgttagggttcttcctcgacgaaaagaaggggaatttcaatgcatatttttccggttttcttgtgcaccaaataaaagtttgagcaggaatactacattttgacacaatttcctcattgaccacactcattgtttcaagaaaaaaagataataactcacagatcctcgagctccaacttttccaaaacaagttgagcgacatctagaggcatattgagaaaagttggcgatttcccataattttgatgtgtctttgaaccaatttcgatcattttggagacttcctgaaaaactaaatatttggtcaggcaggtttgaagattggaaaatgggattgggaaaatgagaacgttcaagctaacgaggaaagtattaacaatgggatgaaaacaaattctgggaatatgaaaaaattaaagtgaaaaagtgaaaactataacaaacggtttggatcggctggggctctacattcatttaatggtagaataggaaaaatacaatggacactgaattaccacggaatcaaagatgtgaatagcagaagatgagaacgttggtagttcttttatagtagagatttagagaaagaaagacgcaatcctttgcaaaaagtatgcaatgttacgaaatagacattgtattttctgatgatttttgaacgttggagattattttattactttttacttatatctatcaaatatatttctaccccaattaaaactcgagtagtttcaaatttcaacaaagtgccaattattcaagaaatattacagaaaattgagaactatgccctttaaaaagaagaatacttcaacttctatgaaaaccacacagtgaaggaaactgtttgcaaataacttttaataatgtaaaaatgattgagaaaattaataaaaatgaattttatttttcctcacttgaaaactcaaaaaaattaacaaaaattggacaaaaatatacaattatctctcactatcatttttcaatcaaaataaaagtctctctatcagttagataacgccattgcttattgtttcttgaccatcacaggatgttctatagataattcctcactattagaatagattgataggggatgtgagtgataagaactaattaagaactgataacggaatcaaaaattgtgttctgactcatcttcctcagaaaggaagacactattctattatttttgcaaatgattgtgtctttcattttctaaacctctaactcgctttaaacatctatgatgctgtattaattcagtgtacatcgttcatattctaccaataaatgaatgtagagcccaagccggtccaaaccgtttgtcatagttttcactttttcactcaatttttttaagttcccagaattattattttgttccatttttagtacttttccttgttaacttgagttttcatattttcccaatcccatgttccaatcttccaacatgactaaatatttaggttttcaggaaatttccaaaatggtcgatattggttcaaagacacatcagagaaatgtggtatcgccaacttttctcaatatgcctctggatgtctctcaactagttttggaaaagatgcagcccgatgatctgtgagttattgtctttttgctcaaacttttatttctttttttttaattactgtattttctctgttagttaatctgttagtcttacgtcgatatgatttttgaccacgtaactttgaaaaaattatttatcgacacaaatgttttcaatgttatatcttactaatatagatatttttcactataaaaatgatatttatttattacagactaagagcgagtagagtgtgtcgcaatttgagaactgccgttgatacgtttggaacgattcgtgtcaaatatgtagaattccggctaaataatcatgatatctgtatggatctggacggaattaaaatcaactatactgattcagcaaaagatagttcaaatgtcaattacaatgaagagaaaaatgaaactgatgaagaaaacttcgtggaaagtgcggtcaatgatttgaaaatagtatcgaagcatgcacagtatgttagaattatggactatacgaacaatatacgcgacactgttacaactttcgttgagtttttaaaattagaaaaatgtattcacgtgaagatgatacaactttttggcttcttatttgatgatgtcctagcgattcttccatgttttgatgttaaagagctcaaagcaattgtcattaattaaatcaattgaccaattcgaacgaatatcccgtttggagcaatggagaaatgcagaagtgtttagatgtggttatgctactaatatttccagtacaatgattactcatttctttcatttcaaattcttcgatattgacatggacgaattttcatcacaggccgcgatacaaatgagagatgtaagatattcttgttttttcatttcattatctttctttgcaggatcttttgagaagaagtacattccaaagttgcgagataaaaattaagaaatcagagagaaatccgattgaactagcaaaagtatttaaaccggactatgcccgcggcaatgagtttaacattgaatattcaaatggtaacaacaaattcgatatttcccttaaagatttatcaagaatctattccaaatttattgtgaaaagattgtgaaaaaatctgaaaacagttgaatattctgagctattgtattttttatgttaaattttttgaaaataaataaaacccattttcatctgtgtttattgtcccattttcgtgaacagaaccacttcaaatgaatttgctttcttcttttggtgcgtcttaccatgattttcagaatttatctggtctcataggctttttaatggcgattttttgaaactcaagttgctgtagtcggatcaagatttttgtcctgacaaaactctaactttgaaagttgattgtttaatggaagagtcccattttttccagattgaaatacaacattggtcaataaaatcttggttttcctgtcatcaaaaaactaacaggctaatacaatatgcaaattttttgaaacacgtattgacattgtcgtacgattcctctcaatcagctctgaatatgaaactctattgggcttgcatttaatacttaactttaaatttcctcatgctgattttccggttaggctcattaccaccgatgatgtaagctgactggatattattgataggttttttaaagtaagtctgattcgtggttcaaaatttctccaaatatttaataactatcgttaatgaccttccaccgttgacgttaaaaattaatctgaaaaaagttgaaagaaattttttgaaaatagctctaaacgatgtaaaaaataattgccaaaaataaatacaactgaattgaattcttggtctctgaaaacatcaggaaaattgggtgcctgtttgagcgcgctgattcagaaagttctgtgttactaggagaaaaatgcatttgtcaaaagagtttactgacttttatcataaggagattttcaataaaaatttggccactgaaatcatggtcttccttttatcatacctaccagtccactaaaacaagcaaaattttttgaagcactcatttacattgtcagctgtcatgtgctcaattttcatcaatcatacgatttctcagctcaaaatcaatatatcctattttacaacattttccagaaatcattgtggatgtttcatacacagaaaaatataaaaatgacaaccgaaaataatacgaaacaaaattagttagcatcttttgattcttaactgccacatgttcataaattcgtaaattccataataaatttcaaatttggatttcccggttgaatactccatggtgaattcatcgcaaccagcatagtccggttgaaatattcttgcaagttcagggttaaaatttacgtttataaccgaaattacgcatttccggaacgtacttctttgcagcaaatcctgaacatttgtttggttatagaacttattatcaaagttattgttaaagtttatagttacttacagttaaagagttacttacatctcgaattttaatcacactttgtattggaatatcatgattcttgacaatatcaatacgaaacttctcaaaatggaagaaatattcgataggcaaacattcccacgaggtttcccataacttgaattttttcgcctttttccactgatccaaatgagttattctctcaaagtcatgagctggaaagattcctcttatccaaagttttctcaatgtttgactattgaataacggaaggattaatacaatatcgtcgattgataagtcacgatgcaaagatatcgttttcatgtggatatccacttcctttttcaagacgtcaactagagaattgacagcgtgttctctatcttggtcattcaaataggatataatatatagacaagatgcatgcttcagaagtatcttcaagtcattgaaagccaacttcaaacagttttctccctctaaatatttccattcattattgcaccacacagatgatccactaagaagtgaacaattacggtagataatttcaattcggtcgagttgtatcctaacgctgtcttcatccaagacaactgagagatcggtaaattgagctccgaagttatcaacagcggtccgtaaacttcgacaaacttttcggcaggtccacctggaacaaattatttctaattttttttcattttcatttttccattttccttactgaacctgctctgaagcagttaaatgcataggaggaatcaatgacacaataaatttaacatagtactaagtttgtacgttagtcttaaatactcacaattcattgagttttagcttctcaagaacgtgattcgcaactgctataggcagatcgagcagagttggctgtttagcagacatgtttgaaagtttatctgaaagtttagaaatgaaaatcgaagtagtgtaagattaatatgtgttattgattcaaattgtttcaaaatgaaaatgataatagacactgaattaatacagaatcaaagatgtgaatagcaaaagatgagaacgttgtttgtttttttatatcaggttgtcccataagttttcgtactatttttttttgaaaaaaatttatttctctcaagcgacaagtaatactattcacacaagtattcaccattagtgttcaccacttgttgccatttactaggtaacatcatgatgccacgggagaagaaatccggcgaacgcgatgagaagaaagtggagagttcagttttgagatgctcttcgtcgtcgaattgcttgtcgcgcatgtagtcactgagagacaagaacaaatggtagtcggttggtgcaagatctggagaatatggtggatgcggtaaaacagtccaaccaagatcttgcagcttttggaaagtcttcttggcgacatgaggcctagcattatcgtgaagaaaatatagtttttcatattttccgttggtcttttctgcaactcggtccaattgggcacaatagtaatcagcagtgatagttttattagttggcaacaattcccagtgcacgggtccttgaacaccccaccagacacagatcataatcttttttgggtgaagatcaggctttggcgtcggtattcctttctcaccgatcggaagccattgacgttttctggaatggttaacatagagcacccacttctcatctccagtaaccagattgttcagccaatcgaactttcgacgaaaagttagaagttgagtacaaacgttgacccgagtgagcttctgtgatgccgaaagttcatgaggcacccaagttccaagttttgaagtaaaaccaaggcgacccaagtgacgtgcaattgtgctatgacaacactcaagcttctcttccatttcacgaagactaagacgaggctcttcctccaccagcttcactaggtcttcttcatttaactctaccggtcgcccagaacgttctatttcttcgagactgaagtcgccgttcttgaacttttgaaaccaactctttgctgtattataagagagtgctccctcacccatcgcaccgcatatgtttcgttccgcttccattgctgaatgaccaagacgaaattcataaagaagaagcaatctaacgtctcgacgttcaagtttgatgattgtcatcgtggcaaagtagaaatggatgaaattaatcttttctgaaaggggacgacccgaccttgacacgacctacgatgaaaaaattttaaaactttctagaagttttggaaaaatatttgaaaaaaagtacaaaaacttatgggacaacctgatagtagagatttagagaaagaaagacccaacccattgcaaaaaatacatgcaatgttacgaaattgacaatgttttgtagatttttgaacgttaaaaaatttttattttagttttactataaaatgttataagctgagtcctaagtatatattaagcctgaaaattgtcaaaaagtaaaatttctccaaacttgagctgtacaaaatggctgcacaaaagattgttcattttgttcaattgtcatgaatttttgaagaattggcgtttgagtgaaactcggtttctaaattcaaaaatgaaattatcacaaatactagagcatttattaatttgaattttaatccaaaatttctatatgtttctctcaactctctactttgtttcaaaatagcaaatatctttgagtagtgatttggagaaagaaaaaaaacaaatgaaacgatgaacagaaatttagatatatattgagattagaaaaagttatcacgaaattgaacgatcaatataaaaacaattgataacataaatgtacaatttccttataaatagaccgtttacacataaaactgaaacagtgatcatttctggtgaaataatgagtaaatgtcttttttctgaggaagatgaatcagaatacagtttctgttatcaatagaactgcatgtgatggtcaagaaacaattctctctcactatcatttttcatttaaaataatagtctctctatcagttagataacgccattgcttattgttacttgaccaagaccgtaacaggctgttttatgtattgataataaaatttgtattctgagtcatatttctcagaaagaaagacactatcttattacttttgcagagaattgcgtctttctttccctaaacttctaacttctattaaaaaaaaacatcgtgttcatcttttgcttttcacatattttattatgtggtaattcagtgtctattagtagtttcatttttaagtacaataaaccgtgaatatatattaaccttacgcaacttcgattctcatttctaaactttcagataaacttccaaacatgtctgctaaacggctaactctgcttgatctgcctataacagttgcgaatcacgttctggagaagcttgaaatcgaggaattgtgagtatttaagactaacgtacaagctaactaagtactatctacatatgtatctaacgagttttgaatattcgttggtcttcaatatgccataatgtgaaaatgatggtgttattgatgaattttcctaaaaatttagctgcttcagagcaggttcagtaaattataactaactggggtacttattggtttcattccccaaaaaatttttttattttacaaatttcaattaaccacaaaaaaaacgtgaactttttggaacgaattgtagaaatggatgctttgctccgtacctgtgctcacgttttcaatttgaaaagtggaaaattaaattttagaaaatttaaacattttgggttgaacgaaacccataaaaacctaactggttccaggctgacctgccgaaaagtttgtcgaactttacggaccgctgttgataaacttggagctcacttcaccaacctcagagtttggttgcagagtaaccgagtttcgatagatctcgacagaattaccatcacctactctagttcatctcttggtggaacatatgtgaagtgcgactatcggcgacggaaaaagaaatatataagagatgataactatttgaagatagctttcaatgacttgaaaatatttcaaaagcatgcttcttgtctaatgattcaaaccattttggaaggaaaagatagagaatatgttgtccactctctagtagacgtcttaaaagaggaagagaatatccacatgaaaactatacgtctgcatcatgacttatcaattgacgatatgttattaatccttccattattcaatagtcaaacattgagaagcattgaattaggaggaatgttttcagatcacgagtttaaaagaataactcatttggatcaatggaaaaaggcaaagcacttcaatttttgggattcctggtttaaatttcaaccaatcgaacatttcttgcattttgaggagtttacttttgatactcaagattttccaatacaaaatgtgattaaaattcgagatgtaagttcgaagttataactttgataatgaattatggttttataaccaaacaaattttcaggatctgctgcaaagatgtactttccagaaatgcacaattacgtttctaaaaataaatttcacgcctctcgagtttgcaagaatatttcaaccggattatgctggtggcgatgacttcaccctggagtattcaaacgggaaatccagatttgacatatcttttggagattccgaattttgtgacatgtggatgttcaaaatgaaaagatgctaactaattttgtttcgtattattttctattgtcatttttatatattcatctgtatgaaaactccacaatgatttctggaaaatgttgtgcctgtgaatggtttatattctaacggaaattcaatccaagatgaactttgcggcatcatcggactcgctctccaacttcttttttgaattttgagctgagaaattgtatgagtgatacaaattgtgcatgtttcagtagactgttagttttgatgacgggaaaactaagatttcagtgaccaaaattggatttcagtctgaaaaactgggactttttaatcaaacaatcaagttggagttttgccgggacaaaaatcttgatctgactacaacaacttgattttcagagcacaatttattatgttaattttcagaagaataacttgattctagatttgttcatttttcaatcaaaataatagtctcttaatcagttagataacaccattgcttattgtttctagaccgtcacaggaagttttattgataacagaaactgtattctgactcatcttcctcagaaagtacgacactatcctattatatcaccaaacggtctatttataaggagactgtacgtttaggttatctactgttttcatatttttcgttaaatttcatattaacttttttaattagttatataggtacctcaatcaatatatggtaactaaaaattttgattttcaggtaacaaactttcctctcaaaatgtccggttgcttcctagatataatgcctggtttgaaatggttttctaatttatcaaaacgtcgaagaattttacaacaggagagcccactcaatatgcctctggacattgctaaccatgtttttgaaaagttggagcctatggatctgtgagttgtgatgagatctttgaaaaaagtgtgtagttctaaaaaggtcccgttacgaaaacccaggggttgctgtactttctcatgcctaattgtaagcaataatctgtgaaaagttctgtataaaacacattcaaaattgaaacagttttaacaaactttttaaataaaaaaatgggcttaccacaaaaattcatggggttactgtaatttggtgtttaaatcttggaagttcaaaaatttatgagttttcataagaaatatgaaaatttcaacaacattcttggcggatatattaaaaattatgaaattttgtacttaaaggtggagtaccgaaatttgagactttgttttttttagacccaaaatgatccaaaactaccgaattttgtaatgagacgttctgaaaatttttcaaaaaaaagttatggcggctcaaagttttgaaaaaaggctcttttttagctgaaatctcaaattttggcatttttcagtgtcgcaacgtcttgcaaaaaaacgcaaaactttaacgtctcatcacaaaattcggtagttttggacgattttgggtctaaaaaaagcaaagtctcaaatttcggtactccaccttcggtactatacctcaaaaatttgggtcccgccacgaaaactctacaaatttcagatgggtttgtcgtaacgtgtgtcaaggactgagacacgctgtggatggatttggaattcattttaacacaatcgaatttagtatacaagacagaagcatttgtatttcactggacaacgaaactatacactacaatcaactgccaaatgaaatagacacatctgtgacttacaagaatcaggaaaagattttcgaaggaaaaaactacttagaagtagcgttaaaggactttggaatactattgaattacacatcggaattgaaaatatctgctgatcccaaatgctacaccagaatgcattcgaaacttcttctgaaaacttggaaatggcaaaaatggaatcacgtcaagaaactagacttttcgatagtacaccttgattttatacttgatatacttccacacttcaattctaaagggctggaaagtataacaatgcggagtattcacttagatcatcaatttgaacaaatcacaaaattggatcaatggaaaaacactaaaatcttacatttgaaaaatgaagcgatgaagttgtgtcctccctttaaatacctatttcaattcactgagtttgatgtcaacgcattttatttttcaattcaaaatgctgttcaattcagagatgtaagtgataattctgatgctttcattaacatgaatttcaggatctactaagaagaaaaacattcgaaaagtgcgcagtccgttttactagtttagatgcacgtgattatagcattcaatatgcgattgtattcaagccggactatcattacgaagatgagtacgaatattcaaacgatatgggcaaacttgcattcagctctccttattatggattgttcataaagagatgttgacaaaaattgtagtattcttaaatatgtaattgtctaataattttctttaaatgaacgggcttatgttcggaaaatcttttgttaaaattgctctacactagggctcccatgaggtcgccgcaattgaaacaaatcatagctcattcgattaaccatatcaagatcttcaaaaaaactataaaagtttgaaaagttaggagtcaaatattttttaaaataataccaaaaagttgcagtgtggagataggggagggcatttgatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaatagttggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagcagagagtaaaataattggtgaagcagagagtaaaataattggtgaagcagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagtcagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaatttatttggtgaagccagagagtaatttatttggtgaagccagagagtaatttatttggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaatatttggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaggccagagagtaaaataattagtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagtgtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaggccagagagtaaaataattagtgaagccagagagtaaaataattagtgaagccagagagtaaaataattggtgaagccagagagtaaaataattagtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagcagagagtaaaataattggtgaggccagagagtaaaataattagtgaagccagagagtaaaataattggtgaagccagagagtaaaataattagtgaagccagagagtaaaataattggtgaagccagagagtaaaataattagtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattgagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagtcagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagcaagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaatagttggtgaagcagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaatttatttggtgaagccagagagtaatttatttggtgaagccagagagtaatttatttggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaatatttggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagtcagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaatttatttggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattagtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaagccagagagtaaaataattggtgaggccagagagtaaaataattagtgaagccagagagtaaaataattagtgaagccagagagtaaaataattagtgaagccagagagtaaaataattggtgaagccagagagtaaaataattagtgaagccagagagtaaaataattagtgaagccagagagtaaaataattggtgaagccagagagtctgtgaagttgtgtccgccctttgaatacctctttcacttcactgagtttcatgttaacgcattttattttgcaatacataatgctattcaattcagagatttaagtgatatttgggatgtttccgatgaattgttcataaggagatgttgagatgaatatgtttattattcttcaataaatacatttctgatcaacctcttcaagtggagtacatttgctttttcaatagcccaaaactgccgaattttgtaatgagacgctgtttacccttatgtatttcttcacagcccatacgatgagacaaatccaattttcctccatttttgccaaatattttcctattaaaatacaacatattttgaggagcttaagaatgagcaattgtaccataaacgtcatataaaattaatacttgtttacatcgttcaattttactgtttcttatcacttgtacaattcctcagctctaaattcaacctataaaaactctgttggggtttcattcattattttttaaattttattttcctcttgctggttgaaatgtatttttgctgataatggagcaagagtctaagattgccacattttacgatttgcctaaaagcttcattagcgacgctgtaagcagaattgatattgttgataggtatttaaactaattaacaactaattgtaatgagaatatttcagattggtggttcaaaagttgtccaaatatttgagagctatcgtttttggccttccaccgttgaagttaaaacttaatctggaaatagatgctcgtctaataaagacaatgttcaacaattgtgaagcggagtacgtcaacatctacgatgaatacacaggtgtttgtagagtgcggtcaaccaaaacattcgagggaaactacttacaaacagctctcaatgatataaaaatgatagccaaaaataatgcgacagaattgtatttttcctcacttgaaaaatcgaacaaattgggcgcaagcctgtacgaagactcggaaaatgccggagcagaagagatgaatattagttcggggacaatcgagtttaaggacttttaccacaaggagattgccacaattctatcctatttcaaaaaaggagtgtttgaacaaatcatctttcgcggttgcaagtccgatggaggcatggagcaaatttacaaactcgagccgtggagaatggcaaaaaactttttctcagaatgggacgtcgaattgaatggtagtcttttgcatttttttcattttaccgggtttataattcacattaacaccatcacagacgaaatggcaatggaaattagagatgtgagcgtgtttttttaaaggtggagtagcgccagtagggaaattgctttaaaacacgcttaccacaatgaccaaatattatagttaaaaatttttttaaaaatttctcaattttatatgattttttgaaaattgtaaaaatctcgaattgcatcaaattcctattttttaccgccacgcttgcattattttaacttttatttattaatttttcttattttgattgatttttcatgttttttgagtaattttactggaaatttaatgaaaaattcaagataaatgtaatttttttattaaaaagcgggcgctaaagcctaaatctttgaaatagattatttcaggctcaacgtcgttgagaaacgtactatctctgttttcaattatttttagtaaaaaatgtacatttatcttgaatttttcattaaattttcagtaaaattactcaaaataaacatgaaaaatcaatcaaaaataagaaaaattgataaataaaagtatatgcaagcgcgctccatcgaacatcgaactattggcggtaattcaaataggaatttgatgcaattcgatattttttcaattttcaaaaatcatataaaatttagaaaatttttttaaatttttttactatgatatttggtcattgtggtattataggcatgttttaaagcaatttccccactggcgctactccacctttactcttttgttctagttgaacaattcaatttttctcagattctgttcaaacgcgagattttcgaatggtgtgacattcattgcaattcatccgacttttctccacgtaaacttgctaaagtgtttcaagcagactatattggtggcgacagttttcaagttaactactccaacgacatctccaattttagaattatttcggaactttatgtcattcgacctacaagcgacaaaccacaaactaaagactggtggagagttgtaatcagaaaagaaggaataccatgatcaatttttttgcattttcacttcgtaaaatgtttttaaatatcaatgtatactgttacattatatataaaaaaggattcttcacatattatgatttattgaaaaccgtttttttttaatttcaaacttccatttttcgaccatatccaaatagtttttacaatgcattccaaattttgatttcccatttgaataataaagttcaaaatcatcgccaccaatccgattaaaatgctcttgcaacttcaacaggcttgaaattagagttcataatgaaaatagagcacaaataaagttggttcaaacggagaaaatgtttttattgaattgaattcaactagactaaactctggatatgtttatataaccatactgtacttcaaacgagaatttagaatttccactagaatattcgaatttagacttgatggtgtcatcggatggaagttcagttatagtctgaaatatttccgtcatcacaggtagtgtccaacattttatatcgcagccggtaaaatgttcgttttttagaaggatctgcaagaattttttttcagttgaacattgtacagtgcgcgtcaatgctataggacccccctcatttttccgatattgggaaactgaaaaatttccatgaaaaatttttgtgatatccggattcagcatgccaaaaaacctgtgttcctgtattttcacgagtttatcattaaaactgtagacacacggcaaatatttcaaaaattcagtgcaaaaaatcttggaaatgcactgtgaattgagaatatgaattccgtcaactgtaggtttttccgcaaagttttggagcaagcaacgtttatggtacctgtagtgtaaaatgtgggcttcattttttgagtactttctaaaagatgtatcaagcaggaatatgcttgaatatgtgcttcatgaaataatataagctcaagctcataagttacttgtgagcttctcgttgagcttcaacgtctaaaaatgtgagaaaatagttaaaatgaagattccgatcgttacaaaagtggaaaacagaacaaaattgagctaataaccagatttaaaacagttctcaatcttatttttttgaaaatggtcaaaaagtccgagattttcagtgaaaattttcgaaaatctcaggaggtcctatagcagtgacgcggcctaatttttgaaatattacccgtgtgtctacagttttaatgataaactcgtgaaaatacagaaacacaggttttttgacatgctgaatccggatatcacaaaagtttttcatgaaaaattgtcagtttctcactattgaagaaaatacggggggtcctatagccttgacgcgcactgtataaagcctacttctcacctcttcaatcttcctagcatcttgagctgaaatcgtgagcactgtaattgaaaaccacttgcaatgaaaaaaagattcaattgacaccgagcttgtgtcaaatcccttatatggattcaagtgtagacgtttcgccttcttccactgctccaatacagtgatctcctcaaacttgttgaattcctcttcatcattatttattgcgattctttccagctttcctgcctcgaaaaacggtaagagatgagcacattgggcaaggctcaggtctgtcaggagcaaacattctacatctagtggcttcactgcttggagtctatcagttaaagcatcaaaatttttaaatctatcctcagaaagtgagtttatagacagcaacaatgtctttaacggctttttcaagcacatttccagcacactcagcgccatttcaatacagtctgctcctacaattgttttatctcggcgctgggtatcatcttcaatatccatcaggcaattcccatggatgttatttctgcacttgatgcaaatgtcatctaattccatctcaacacttttttcgcttgtaattttaaagataacatccatgaatccaatgccatggtgatctacggcaagtcgcaggttacgggacacttttcggagagttaggctgaaaaatgagtaaattttgatatgccagccctaattagaagggaacttttttccggaaatattagaaaattttaagggttatattttgtgtttcggaaattttcaaatagctattttcccaacctagatatagatgtttaaagtttgcagggtgagagagtgtgggaggaggggagacgcagtgtgcgcgcgccgcctgcgtctctcctcctcccacactctctcttgctgcaaactttgaacggctgtatctcggttgggaaaagagctatttgaaaattttaaactagtgaaatgtagcaaattttaagagctttctgatttttaaaagaaaataacaataatccaaagaaaaaaccaagatagtcagaggaacaaattcccggattgatttcagtgatcttctagagtcaaattaaaaaatgtgctaaaatgtgctgaaaatgcgctaaaaacttgctaaaatgtgctaaaaaatttctaaaaaatttctaaaaaagtgctaaaaatgttgtactaaaatgtggaaaaaagtgcgctaaaaatgtgcaaaaaagtgcgctaaaaatgtgcttaaaatgtgcttaaaatgtgcttaaatgtgctaaaaatgggctaaaatgtgctaaaaatgtgctaaaatattttttttttaattattaaaaattcaaattgaaacagcaactaattcgaggttaaaactaaccgatttcgtggctccattttctgtaatgtctcatgaattatttcaattggcattccgttgaaagttggctgggaagtcattatattgaaatctgaaacgactatatatacatatatatatattaaatagatataagtaaaaaaaataaaataagaaacaagtgtacacatatttcgtaacattgcatgtgtttggaaaagggtgtttctttctttctctaaacctccaagtagatatcaacgaaataaaccaaaaacaaatattaacctcccgtcgttatacataaaactgataagggctacaattctcactttctcaaatctaaacttccaaaaaaatcctgcttcagatttcaatacagtttccattaggacataaaaggaagaatgaatccgcaagcatcatatcagcgataatagagaagttattaaattttattgcacttgttttatatgaaattgtttgctagaaatttgttcagaaaaaactatttcttggccatctcgtgtactttggcgcttgagaagttgtatcaaagaattaaaaatcacatatacaatgtctagctttttgttaaatcttaagtaatatttacatatgaatatatatattctcaataaaagcctggcgagttccgggtaacaattcattttttgttgtatacagtgccggcttattgttaaaaatataatattttccctaaaaaatcgtggacccccggctcccattttttgagattgttgtgtcagatatcgttgttcacaatgccgcttaaaggtaagctacaacatttaatgagaaattgtccgttactggcccgctacgcaaatttggcaaaaaaaaccaacagaaccaacagttttcatttgttattttgcgcaaaaaaaaattgtaaaaaagtcaggtctttagaccgctactcgcctacaatcagtgtttttaacagactatgcctcgctccggcgaagctcggcattcttctacatttttatggcggttttcctgtttgtcatgatctccacactgaatcgttcacaacaagaaatggattctaagcgatcagatcccgtggagcttccgaaaactgagaaaaaagaattgacaactgattgggacactttggatggagttgggtacagatttgcaaaggtaggggtaatgtagtactgtagttgtactgtagaggtaatgtatgcgtaaagtaggggactgtatgggtactatagaattactgtaggattactgtaagggtactgtagggatactgaagagtaatgtagtactctacaattacttgagggatactgtatggggtactgtaatgaccctgtaaggttactgttggattactgtagtgtacatactgtagtaataatgtaagatttttcaggataaggaaatcgtaatggatccccgatttgaagaactggaaaaactgccaacttgtgacctgacagttgacaagacctctcaaaaaattgacattccaaagctgatggactcatttcaagactgtatcaggcctattgtaaatgaatggaaaaatgatttgaaagcggtttgttaaaattttgtgacaaaaaacctttaaaacccccatcagatgaacacgaaatggcaaaaaactgaaatttgtgacaaagtattcaaggacgtggcgacagttccaatgtcaaatttacatgaagtcaaatgggccattctgccaacttgtgagagtttgtggggatacggtatgggtaagagtactgtaggggctgcagggttgttgtaggattactgtaggattactgtaggagtactgtgaggccattgtaattttttccagaaagaggagaacataatggtaacgctgggtattggtcatgacactatggcggaagaaaaactgaacagagtaagaatttctcacgaatctaaaattgcataatttatgttttcagactctccccaacacgaaattcttcggagccgacccgataattgagccgaaccgccaactttacacagctttcggaaaatacttcccgtttgcaattggcaagaagcctggtttcacgaaattccgagttcttccgaatcaaaatcagagaacaagtttggttaatttttgaattttgggaacaaattttgaaaattcaggaaagtaccagtatcaagatgtcactacaatcccgctcacctattttttgtctgacattttgggcttggaggtattgttttttgtgggggttctgttggggtactgtaggggtactgtagtggtactgtagggatactgtaggggtattgtatgggtactgcagggatacaataagggtactgtaggggtattgcaggggtactgtaatggtactgtaggattaaagaaggggtactgtaggggcacttttgggatactgtaggattactgtagtaatactgatgtatgggcatgacggggcactgtagggatactgtaggggtactgtaggggtactgtaggactactgttggagtgctgtgggggtcttgtagtggtactgtaggggtactgtagtggtactataggaatactgtaggtgtactgtagtattactgtagaactgctgctgtatgggcagaacagggttactgtaggggaactaaaacgatactgtaggggtactgtagaggtactgtatggttactgtagggttactgtagcttccaaacactttagccctgagcataagccattacagcaaatcgatattgcgtggatcgatatcgaaggcggcgagtttgaattcctcgaccaactgcacaaaggtggtccactggacgaaaaaggagtctcgatttgccaattcaacctggaagttcactcgaaattccacccacctggagctcagatctatcacgattttgtgttcaaagtgctcgaggacaggcgctacgtcttcctgaaaccggcacacagcgattctggcgtacatcgcatgttcttttttaatttggaaaacgagaaatgtgttaggaaatttcttcaataaagtagttttagttagtattaacatttatcgattgaaaatttatgatagaaggacattaattccgagcactctatagcaaaagtgttggtctggtttgaataattgaaggtgtattcttttctgccaaaatatcccggctgaaatacagttgcaagttcgatttggttaatgctgttgaaccagataatgcactttttgaatgtacttctaggcaagagattctgaaattttatttttaaaaatataacttaaaataagggcttccatgaggccgcctgggccggcccacgccgcatgtatagtgctgcacggaaccccgaacatgtcggccgcttccaaataagtacctttttgcactaagctgcgcacacaccaagttactcatttcacgccaagctgcggaaccccgaacgtgtcgaccgcttccaaataaccacctttcgcacttcgctgcacaaacacagctgggagcccgatttaaaactaaaattcaaaattaaagctttccgacttacatctctaattcgaattgcactttccactgaaacattgcccattttcacagaaaactcttctaaattaaacagatattccagatgttcacagttgaaccgagcactccaaaattcgaaggttttcgcatttttccattgatccaaattagcaatccgttcgaagcggttagtggtgttagtgtaccacatttcgatgtcttctagaacttttgggttgaaataagggagaatcgataaaatttcgttgaatctaaattgataaaagtagattttggtcgcacaaacgaatttcttggttttcaacgcttttatcaaagatttcatagaatctcgtttatttttcgtgtgatttgtaagattgaatttcgaaactcgacttaaaattatgcccaaatccttgaaagctagttttatgtaatttgttccatcgattcttttttcctgttcattatgagtcacaatcgagctatcattctctgcgggggcgtattctgatccggattttgtcgaatgttttgtaaatgctatcactccatatatccaatgacaccttatcaaaggtaattccaaatttatcgacagcggttctcaaactttggcacacttttcggcaggttagtctgaaaggaaaatgtcgctgacatttgaccgaaaaattggtaactttttggtaaaatttggtgaaatttggtaactttttggtaaaatttgataattttttggtaaaatttggtaacttttgataaaatttggtaacttttcggtgaaaattcggtaactttttgataaaattcggtaactttttggtaaaatttggtaattttttggtaaaatttagtaactttttggtaaaattcggtaactttttggtaaaatttggtaactttttggtaaaatttgataattttttggtaaaatttggtaattttttggtaaaatttggtaattttttgataaaatttagtatttttttggtaaaattcggtaactttttggtaaaatttggtaactttttggtaaaattcggtaactttttgataaaattcggtaacttttttggtaaaatttgttaacctttttggtgtttttcatacttgaatcttttgaaattctcagtaccaatcatggatttcaaatgattcttatatggaaaacacaccacttaactggtttcaccaagtttcaacaaaattgaaattgattttttttttcaaatttttcaaaatttgttttttgaggaaattgactaaaattgtgatgttttttctgtattctgagatctgaggtaatgtgagaagtgcccagctcgtgctagccagcatattttcagctcaagagacttacagatccacgggttgaagtttttccaaaacttgatcggcaatttccagaggcatatcaagcaagttgggcgaaacatgacataaaacacattagttgcacgaaattgtgaaaattttcgaaagagccggtaagaaatcgcgcgaaatgagaagagttttggaaataggaattttgttagaaaacagattctaaaagatatatttaattagaatgcgaagaaagtgattccaacaaatatattcattgcttcaaacaaataaaaatgtgaggttacttcctgcactaaaaaaattccaaaaacttcaatgattttgttcaaaaactctccgaatccacaagtgtgacgaatcgactctaatattaaacttggcggtgttcgtcgtgtactcaaagctatttccaccaccagaatattcgaaaacttttgcgatttcggtttgagttgccaagaatccggcgtttatctcgcattgaaggaaggtgtcgcgttcgagaaggatctgtaatatagctgatttctaacaaattcacaatttcaacagtcaaaaaaatatttctacaacaattcccttaatatctaaagcgaaaaaatgtatgtatacccttcaaaaccggattttttttttgaaattttgtatcaatattacccggatataattacataactcttaactaagactcccggcgcctccgccggcctcacaacgtcacccacgccgcatgtatagtgcaaaccccgaaagtgtcggccgcttcaaataactaccttttcgcactacgctgcgcacacgtcaagttgcggaacccttaacgtgtcggccgcttccaaatgtctacctttttgcgctacgttgcgcacacaccaagctagtcatctcatgccaagctgcggaaccccgaacgtgtcggccgcttccaaatttttttttcattttttcgaaatattcaaaattctttttttttaaacttacatctctaaccttaaccacatcttccatcaaaagccggcctacagaaatgtaaaactcgcggaaattaaaaaattcctcaataggagcatcttcaccatttccgcggaagtacacggtttgtgcttctctccactgcgataagcgacacagatcttcaaatttgtccatatttgtaacattatccaatcgaatttcttctagaaaacctggtttgaagattgagagaagggtgattatctcagtgcttccgaatataccaagatctactcttttcgcggtaatgcctcttttcatagtggctctcagagtttgaacatgctcctcacggtcttccccttccatagttcccatcaaaatcttgaacgttgctattccaccttccaagcatcctgccaaatcgttgaatgcaattttcaaatgattttctccatcgatgcgacgttctctatattcaaggtactttacaaggcagtcaccattgcaattttcgtatgaaactcgctttccatctaatgttagcaatatgctattttcagagtaaagtcctgcgaatatttctgtgaatccgagtccgatgtggacaacagcagttttcaagcttctggacactttttggaggacgagtctgaattttgcaaagtaagtaagttaccgaattttaccaaaaagttaccaaattttaccaaaaatatgccaaattttcccaaaaagttatcaaattttaccaaaaagttaccaaattttagcaaaaagttactaaaaatttatttaaaaaacccaattttgccaaaaatataccaagttttagcaaaaagttaccaaattttaccgaaaagttaccaaattttaacaaaaagttaccaaattttaacaaaaagttaccaaattttaacaaaaagttaccaaattttaacaaaaagttaccaaattttaacaaaaagttaccaaattttaacaaaaagttaccaagttttaccaaaaagttaccaaattttaataaaagttaccaagttttaccaaaaagttgattaagttaatatttgaagctgaatagctcaccgatcaatcggctcagctttctcgataattcgataaataacatcaattggtaagttgttaaaaactggagatacttgagacattatgatcaatatcaagaaactgaccgaaaagcgcaacaaatgatatagttttgtgtttgttatcagcaaactgttcaaatgatgtatgtgtacatacttggaatcgataacgtcacttgcctctttgaaactatggaaaactcaaaatttcacacttttacattgatttttcctcacatttccttgtaattttgatacgatttttaacgattgactccatgattttcagaaaatcgaaaaaaatgtcaggttccccaactttgctagaattgcctataacaatcgctaaccaaattttggaaaaactggagcccatggctatgtgagttgcatttttttctgaggcagggatgggcggcaaacgattttttccggcaagccggcaaattgccggaattgaaatttccggcaaatcggcaaattgccggaattaaaattttttggcaaatcggcaaatcggcacattaccttaattgaaatttttgacaaatcgacaaattgccggaattgaaaatttccggcaaaccggcaaatcggcaaatgaccaaattgttgaattttccggaaaaacggcaacttgccggaattgaaaatttcctgcaaataagcaaaccggcaagttaccgaaattgaaaagatccgacaaatcggcaaaccggcaaatcggaaaatcggtaaatttgcagaattgaaaatttccggcaaattcaatttgccgaattttccggaaaacccgcaattgccggaaaaacggcaacttgctgaaaatgaaaatttcctgcaaatcggcgggccggtaattagttgatttgccgcccacccctgctttcaagtatctctaacctacttttcttctaggctaacctgccgaaaagtatgccgaaccttacgatctaccattgacagacttggaattctatacggtgacatcagattcggcatttgggaaaatagcgtgactatgaattcggacggggttgacttggaatttactgatgcgaatagtgtgactcacgacatactaaacaggagaatcttaggagacaactatttgggaagtgcattcaaggatttgaaggtgctcttggagcacgcaaaaggcttggctatttgtaactactcggaagatgatatatatgcaaccgttttaatagacgtcttgaaagaaaaagaatgcatccacatcaagaaagttgtatttgaatatttttcatttaatgatattgtatcactcctgccttacttcaatgctcaagtgctccaggagattcgaactgaagatagtggccttatagaacaatttgaacgaataattgcgctggatcaatggaaaaatgcaaaaaagtttgtgattttggattcagtaattgatagtaaccatatggaacaactatttcattttgaagagtttctcgttaatctggatgatttttctgtagagcatgcagttcaaataagagatgtaagtgggaattttgcttgaaattgtttgaaaacaccaaaaaaaactttttgaaaatttccttaaaaaaatggttacggcggctcaaaaattggcctaaaattagttgaaatttaaaatggctggaagtttttttgaaatcatcgtctaattttgtgcatgcaagttgatagttttgtattttcaactagatttaggtacatttaaggttgatggaggcccagatttggcataatttggtaacttttttattaaaatttgataactttttggtaaatttcggcaacttttcaataaaattttatatttttttggtaaaatttggtaactttttggtaaaatttgataacttttttggtaaaatttgatgtagggttttaccctttttctcttttatttttccctcaacgcaagctcttttgtcattttgacacgccaaaacctctgatttcctgctcaacaagtttcgcgccttgcgatcttgttgacgcactttcagtgccttgcgcacttggcgacgcgaatccaagatttctcatcacttctcccgcaagaacgggtgcaagccggccgacgccgagaagcttgccgtttttcataggttttaaggtttcaaattgttacaagtttaaggtttttattgtttctgtttaaggtttaggatttagttgaggagttttctccttgttttcaatcatttggtcttggtttgagaattattctcaagttttgcattgtttggtgcgagtttttcaataaatagactcgtggaatatcaaattgtcttctgtttcttttgccttgtcttcttgtttcagattttacagctcgggaagttttatacttctccgactttgataacttttcggcaaaatttagctttttattttggtaaaatttagtaactttttggtaactttttggcaaatttcggtaacttttttgtaaattttgataacttttttgttaaaatttagtaacttttttgtaaattttgataacttttttgttaaaatttagtaactttttagttaaatttgttaactttgtcgtaaaatttagtaactttcttgtaaattttgataactttttcgtaaaatttagtaactttcttgtaaattttgataacttttttgttaaaatttggcatctttttggtaaaatttgttaactttttggtaaaatttggtaacttgttaggtaaaatttgataacttttttggtaaaatttggtaaatttgtgataaaatttgttaactttttggtaaaatttgataacttttttggtaaatttcggcaatttttttggtaaatttcggcaacgttttggtgaaatttgataacttttttggtaaaatttgataacttttttggtaaaatttgataacttttttgggtacttgtgtattatacccccgccattttagaaattaattaaatttccattaatttatcggttcaaattaaacgtgatacccattttccttgttaggcttaggaatggtgttttcctaagcctgaaattccacacgtttttttttataagtaaaaaaattaatttttaaaatggcgggggtataatacacaagtacccttttttggtaaaattttggtaactttttggtaactttttaggtaaaatttaataactttttggtaaaattttggaaacttttaagcaaaattttggtaactttttggtaacttttttggtaaaatttgataacttttttggtaaactttggtaaatttttggtaaaattttggaaactttttcgtaacttttttggtaaaattttattacttttttggtaaattttggtaatttttttgccaaaaataggtgatttccggtgatccatcgaccttaattatacctaaatcaggtagaaaacttgagataataagttttacatctaaaaattgacgatgaattcgaaaaagttagtttccagccactcggtcaaatttcaaatgttcccaatttttaggcaattttttgagttgcaataacttttttttgggacgtttttgagaagttttgtaattaaatttggggtgtacagaattaataaaattcgcctacatctcctttaatttcagaatctcctgagaaaaagcactttcaagaagtgtactgtaaggttccatagcacaaatccaacgagggtggcaaaaatatttcaaccggactataccgatgacgaggagttcaaattcgaatattcaaacgacgagaatacatttttgattcattttagagaactgtctctcaatcattatgagctttttattgaaaagtgtttattaaaataattggcaaaataaaatcttttttttttaaacaaagttaccaataaatatgcaaattttattcaaccagtctttcaatttcaagtgcgcaatcgtagtaaccataaagttgacacttgattgcaaatttaccctgatcgttcgaatattcaatctcatatctactaggactgtccggatcaaatattttaaggatgtcatcggcctcctcttcataaccaccaaagtctatacagcattctcggaatgtgggccttgttaagagatcctgaattcaattatcttaacagaaacctattatctaatttcaacttacatctctgatatctatcacagtatcatctgataagtaacacattgcaatggaaaactcttcaaagtcaaacaaatgtttaatgtgatcatcgtcaaaatgagcatcgctgagatggaaggatcttgcacttttccattgatccatatatattattttttcgaattgactaatattgtcagaaatcgataaatgaattacagccagcatgtccgcattgaaatatgggagtatagagagagcatcattgaatgatgtatcacgcagccagatttccttaacgaatatcgattttttgactttcaagacgtttttgagagcattgataatgtccaatttatcttctatatgtacagaaaagctaaactttgacaaggaattgttcaatagtatctccaaatcgttaaatactattttcaggcaactttctcttttgataatcttttccttctcattataattcagtacagtactaccatctattgcactgtaatatttggtttgaaatttgtccaattccagttcaaccttgtgatttttcgaaaatgtcaacgagattttgtcaaagttgaatccgatattatcaacggctgttctcaggttgcggcaaactttacggcaggtcaatctgaaaggaatgaattttcagactgtttattgcattgaagcaactttattgatagcataaagtatgtcaacctttgctcttatttcaaaattctgccgctctatattattaaaaggggaaagtgccagcgtgtcgttttttgaaattttcaaaaaaatttcgctcgcaaaaactgtacgatggatgttcgcggttttttgtcatacacaagaccctcgcctaattgggttacactatcgacgggtgcccgggagtcggcggttagaccccccaaaaggcgattttaacgaaatggctcctggtttaaattgacgtaaaattcgggttttgatccgacaaacttggtagtagtcacaatagatgcgtatatatttggcctacacgtgggtaccaaattcaccgagatacctcaacccactgataagatatgattacttatatgcaaaaaagacatggtggatgttactattgtagtttgtagtctgtgcttcagagaaaaatgagtttccgtctcttgaagtgatattggttttgggttagtagggggatatggtcggtgtactgtagtagtactgtaggggtactgtaggaatactgtaggattactgtagttttggaaaaactaactttttgtcttttgaaggtatattggggtgggggttagtagggagatattgtttgggtactgttgtagtactgtaggagtactgtaggagtactgtaggattactgtagtttgggaaaaaataacttttcgttttctgaagggatattgctttggggatagtggcgggtactgtagtagatatggtcggggtactgtagtagtactgtagaggtgctgtaggaattctgtaggactacttcgtggtgaaacccatcgtggtgagacccttcgtggtgagacccatcgtggtgagacccttcgtggtgagacccttcgtggtgagactcttcgtgggcagacccatcgtgatgagacccattatttttgacgggaattcaaatttatttaaaaaaatttggcgggaattcaaatttcttcaaaaaattttggcgggaatgcaaatttcttcaaaaaattttggcgggaattcaaattttctgagaaaagaattgggcaggaaattcaaatttctagagaaaagccctatgctgagagttaacgtatctcgttcattcttgaacgaatcgactccagctttcttagatagaccccatacccgaagggctagcaagttcgaggcgaagccgagaacttgctagtctaaacttaaatgtatctaaatctaagaacaaaagcctgagggcttaagcccactgtctcatccttagcatttaagaaaatcttcacgcttctggctttggccttcaaactacatacgtgtttaaagctcacatacatatattaagtacattaaatacattacatacatgcatacacatacatatatatacatatatatacatatacatacttatacatacatattcctatgaaaattagctctcatattttttgagtacaacatctgaatgcctaagatgtcagctaaaaagtttgaaactctagcaaaaataattaaaaataaaattttccaatacactgaataatagcaatgaaatattgtgatattcttttcagaaaaatttatgtagctgtttaatataagtgaatgaaaaagaactcaccgatccataggctccaacttttccaaaacttcactaacaatgtctagagggatattgagcaacgatggcattttttaaaaatgtttgaataaaaagtatttactgacaaaagcgaagtagaaaatcaaaagatgtgtgctagtttcgtcagtttacctgataaggtgtttgacttttctcagagtttctaatctctctaaaagtgacgtttgcctacacttgagttttaaattccactctgcacattttcgtgtgtcatcgagaaaaataggcgacaatatagttcagcttctgccaagatcgtgtctttaatcctgtgctcctgtagtttggtgcgttctatccactaatttaatgtattccaccagtccctcatcaaatgccaagaatagccgaaacttctgactcaattaacccgaaaagtgtcggctgcgagcaaaaagccaccattcgcattatgctatgcaaaaacaaagactttgacttttcgccacagggtagaaaaaagaaaagaaaatcaaataacaagttcaggaaaaaataatcatatgcaaattttattcaaccagtctttcaatctcaaatgcgtaatcgtagtgccctacaagttgacacttgattgcaaatgtaccctgatcattcgaatattcaatctcatcactactataggctggccggtccggatcaaatagtcttaggacttgatcggctttaacttcatcaccttcaaactcaatacaacactctcggaatgtgggccttgttaagagatcctgaattcaaatatcttaatagaaacctatgaactaatttcaacttacatctatgatatcaaccacagtatctgttaataggtacggcaatgaaatggaaaactcttcgaagcggaacaaatgctcaatgtaatcatcgtcaaagttaacatagctaagatggaaggatcttgcgcttttccattgatccagatatgttattctttcaaattgactaatattgtcagaaatcgataagtggatgatatccagcatgtccgcattaaaataaggaagtatagaaagagcatcattgaatgatatatcacgcagccagatttccttaacgaatatcgattttttgactttcaagacgtttttgagagcattgataatgtccaatttatcttctatatgtacagaaaagctaaactttgacaaggaattgttcaatagtatctccaaatcgttaaatactattttcagacaactttctcctttgataatcttttcctgttcattataattcagtacagtactaccatctattgcactgtaatatttggtttgaaatttgtccaattccagttcaaccttgtggtttttcgaaaatgtcaatgagatttcgtcaaagtttattccgatattatcaatggcagctctcaggttgcggcaaactttacggctggccaatctgcaaggaatgagattttagactgtttattgcattggagcatttatcttaaaggtggggtaccgaagtctgggaaatatttttaaattacttcaaattttcccctgatttagaaaaatcgatgtgaaaaaattcaaaaaccaatccctgattacatttgagattaaaatcacaatttgtgcacccatgagctttttcaaatttatgccgaaataaattatcattggagcgttctttttttttttaatttattctttcacgccaatcgaacatttttttagcataaaatttaataaaaatagctaggagaaaattaaaaagctgttggcagtaacttttaaaaattatttaaaaaaagaagtttaactatggcaaaaaatccagacacgggttaagaagtccttggcaagaatgtgagttttatgaattttaaaatttgtatcctttaaaatttgtatgtataaatttggaaaatgtatccaaattttatatgatctttacgatttacggattttagaactcaccgatccatgggctccaacttctccaaaacttcgccaacaatctctagagggatattgagcaacgatggcattttttaaaaatatttgaatgaatagtatttagtgaaaaaaggaaagtagaaaatcaaatagtgtgtgtcaatttcgtcagtttgcccaagaaggcaaatgccaaactgataagatgtttgactttttatcagagtctcttatctctctaaaagtgacgtttgcctacaattgagttttttattccactttgcacacgagaaatttgatgaactttcaactgttgtactgtgagagtactgtagtgttactgtagaagtactgtagggatactgtggtggtgctgaagggtagctgaataaaaaaatttcaaaaaattctaatttacgcagaaatcattttggcttgctgagaaaaaaaaaattgtcgggtattcaaactttctggtaaaaaaacatttaggcaggaaaatttaaattttccgacaaattttttttggtgggaattcaagtatttgaaataaaaatctgacgagagttacaagtttccaaggcattttttggcgggaattttaaattttccaagaatttgttttggcgggaattcaaattttccgaaaaaaaaaattggcgggaatttaatattgagaaaaattgtggtgtggcggcagtgaatgccctttaattattttttggataaatataaaaaatatttagagaataaaaaaattgtagttagatttggtgatatgattgatgtatttttaattacgatcaaaagatccaaaaaatcgtgaaaatacagtttcaatatgatcttatttcagactgaaccatctatacctgggcaatgttcgcgtcgaaacgaggtacaacaaagaaggcgtgttggtcctctccaagaacaagtgagtgatcgttttggctctgcgcggctccaggaatcagtagagcggtacttattttggaagtaccgcgtccgtcttacaagaccaaattggccgctcgtctttattgaagagaactcctccaaccagtccccagttgaactcataaacttgctctgtaagtttttattcttctagtatatgtaatcagttgtggtttttcaggagccccacatcccgccactcccgtgagcacatttaatctttttttaccaaaaaaaacttttaataaataatttttaaatacaaaaaattgttctcacgtgttttttcaatatttcagggcacggtgtggaatttttaacaaaaattcaaaaaaagatgttccaaaatttaatttattctcacgcgagagggttgaattttgaaacttcttctgtgtgcctatgttttgtttcagctctttttcagctttgattcagttttttaaagattttttttggaagtaagcaaattgagtgtcgttcctgcgaatttgtaaaaatagaatctaaaatatctttgctctattttagaaaaacagagatgaaatattgataaaatgacaatctttcgacctaaatatctcgaaatttccttaaattttttttcttaaaattcatcagtgtatgaaatcgacaattgtctacaattctagagtagttagaaatacgtggcaccaatagttttggagcagtgcgtcgacaaagtggagaagatgtctaaaaataagaggtttgttccagataaagtgaactgaatgggttacccttcaagttttctttctcaaacttcatgattatactgaattgacaattgtctacaattcaagtacatttatgtatcatccggacccgatttcgaccatcggaaaaacgttctgtttgtttttgtttttgttaactttgcaaaataagaggttatattaaataggcaattatctacaattcctgtttaaatataagtgtttttcataaacagtcgtgaaggagagcaactgcaaagttaacaaaaacaaaaacaaacagaacgtttttccgatggtcgaaatcgggtccggatgatacataaatgtacttgaattgtagacaattgtcgatttcatacactgatgaattttaagaaaaaaaatttagagagattttcggctaggtcactttatctggaacaaatcacctatttttaagcattttctcgactttgtcgacacactgctccgggagtatgcatgacacgtatttttaaacatgcaagaattgtaggaaattgtcgatttcatattctgataaagtttaaaagaaaaaatttaaaggaatttctagctaggtcgctttaactggaacaaatctcctatttttaggcctaaactcaactttgtcggcgcacagcaccgcaaatatgaatgcctcaatttttagaaaaccgagaaaacttgaaaactgaccgagttatgattgaaaaagtagattcgcgaaaatgggaaagtgtgcaaaatttggcacttattcgtcttgctcggccgactcatagaactttactcaattctgagttgaaaatcgtgttcaacgtatttttttacgtggggtagaaaaaaaatatcaaaaaagatgaagtagaacttgagataaagacgaaaaacgactttttcggaaaaaaattttttttggcaaaatggcattttttggccttttgttttatcacaactttttggcttttgcactaaaaatcagtctctctgagtagtatcttgcacatgagtttgaaacaaaacagagcaaaacccgaattttaattcaattaaaacatggttttttgggggtaaaaagagcaaaaaaattttttttcaaactggggaaagccgccctgagctcagttttgctccaaactaagtgccgttttctgctccaccgtggggcaaaatatttctagtaggatttcaaatattagagcatgaagtcacgcggctctggagttattaatgaaaacgaagtgggacattttttcgcaagccaaaaaaagtgtcaaaaaacgcgaaaaaggggcggagtctgcacactcggcatttattagaggctgcttggcagaatttcaattttttggtacttttttttgtttgagctcactccatattttttcgccctccttcccttgtcagcggtctcccgtcccaattttattgcaccgaacacccttaaaaatgcatcgacgtatttttttccacacatcttctcatgtctccgtctcttctctctcgcctaccctcgacccttccgcagaaatattcattccgttttttggaggcgacttgtgtggtttgccaaaaattttctattgatttttactgattttgctgattttttaactgattatttggattttcatgtaagtttctcagatttttgtttcataaatcagggtactgtaggggtctgtaggggttatgtagggatgctgtaggggtactgggggggggggggggggggtactgtaggggtgctgtacgggtgctgtaggggtactgtagtggttctgtaggggtactgtaggggttctgtaggaattctgtaggggtactctagtggtactgtagtggtactgtagtggtactgtaggggtactgtaggggtactgttgtggtactgtaggggtactgtagggctactgtaggggaacagtagggatattgtaggggtattgtaggggtactgtaagggtactgtagagatcaaaactatctgtagggatactgtaggaggtctgtagtggtactgtaggggtattgtaggggtactgtaagggtactgtagagatcaaaactatctgtagggatactgtaggaggtctgtagtggtactgtagggtagtgtaggggtactgtaggggtctgtaggggttctgtaggggtactgtagactagctaaacataaactttttcagaaattgaagtgacaagcattctaacctcgacgagtcaagcgccaaagtcgttccctcatcaagagaacctaaaacagccccattttacgaaggttggtaatttttttcaaagatgccatcaatgataaaatctgaatcttttttttcagtcctcaacttcaaaagttcgtgctgaaaaggattgaaaaagggacaaaatgaaaaaacggatcatctataatgcagcaatcgtcatcttgaaatttttgtaaattttttaatatttaattttattatcaaatgaaaaaaattgatactttttaatacaaaattatgaattgaaattacatagtactttagaatttaaaaaaaaaccagcttttggttaaattctgaattaaaaaaaataaatcttccgtacaagctaacatactttatttagtattttccggtatttataccaatgctgaacagttttatagtagaaaaaataaaaaagaatgactccatatgattttcaggtacttttgaatttttgaaaatacagcttttggtgcattttctgcattttttaaattatcttccgtacaagctaacatactttatttaatattttctggtatatttgatcatgctaaacagtttcataaaagaaaaaagaatgactccatatgatttttcattacttttgaatttttgaaaataacagcttttggttaaattctacattttttagaataaacttctgtacaatctaggacactttgtttacttgtattttctggttcgaccatgctgaacaattttaaaaaataaaaaagaatgactccatatgatttagaggtactttttaatttttgaaaaatacaacttttggtgcattttctgcatttttttataaaatcttccgtacgagctagaatactttatttggtattttctggtataattgacactaatgaacagttttatgaaataaaaaataatcgctccatatgattttgcattacttttgaatttttgaaaataacagcttttggttaaattcacaatctttcgaatattaatttcgcaagaaaaactacagataatttatttgtgtgcctaattgaagagtggtcatagaaaaaatcaaatgatgaatttcgattttttacgaaactgataaacttataagaaactgaaacctttttagtttcaccccgttcactcttaacaaaaagttatgaaacaatgcccacacttaaccacctaccagttgagactatttatgaaattgtggagaaatttcaggcagtggataggtgagtaaatgtttttttgttacttcagtttggcctagggacctcctgaccaagtctggaaatttttttcattatatttttgaaatttcgacaaaaaaattgattttttttttggttttatgggaccaaaaaacctaaaaatccagtggtgtctaaaaaaaattttcaattttttcaatttttttcaattttttagacaccactagattttcaggtttttttggtcccataaaaccaaaaaaaatcactcaaaaatggccaaatatcattttagaacttttcaaaatttttttatttactgtcaaaaagtggcaattactcagtttttgccactcattattttgtcgaccaaaaaaactttttttttcatacattttttatactgtaaatttgtttaaattatttgtatgaaaacattgtagggattttcttaaaatctcaaattttccaaaattttggcaacttgccaaaactttgaccggaaacaaaatttcaatttaaaaaaatcgaaaatgttagtttttcagtttttctcaaaaaaaaaaccgaaaaaaaacaaaaaattgagatcaaacttcggataacaaaaaaaattgaaatttgtgaataaaaaaaccaaaaaatgttaaatttttgttttattttaaactttttcgaaacaaaatcattaagaccaaaatttgctcaattatatttgtagaatacaaaaaaaattttttttttttggtcccaaatttcggtccaaaaaattttagatttttcataatttccggtcaaagttttggcaaattttgaaattttggaaattttgaaattttgagggaatccctacaatgttttaataacaataatttaaacaaaatcaaaacataaaaaatgtcgaaaaaaatttttttttggtcgacaaaattacgagtagcaaaaactgagtaattgccactttttgacactaaataaaaaagtttgaaaattttttgaaaagttttatcatgatattcggtaattttggcactattggagtagtttttaacaatttccccattggcgctgctctgcctttaagtagtgtttcaaactttattataaaatacaaattttcgtacttttttgtacggctgtgacttaattattcaacactggatttttttggtttttttagtcccaaatttaaaaatttccaaaaaacctcaaaaaactcccatccgaccctagttatacataatttcaggcttgtcctccgaaaagtatcccgacgctttcgcattcaagttgataggcatggaatccgtcccagacacctatacatttgcctgaatcgcttcaatcttctggaattgcacattgatggagcaaaattcaaatatatcaatgtaaatggagattgcgttgtgaaaaagtacgatagagcatggatgcggctgcgaagaattgcaggaggagattatgtagagatggcgttgaatgatatgatcggatgcttgcagcattcattgatacttctcaaaatccatcttaaccatcacttcaacgtttttatggacaaattaagaggccgtgtgcacactcaaaatgtctcaattcgtttccagaatccttgtaatattatcgccgttctacagtgctgtgagcctgagaatatccacttagcaatggaaaagcccacagatttttttacttcgctcacaaccgaaatgcatgaccaattcaaaataatcacttgtacggcccaatggaaatatgcaaaaacatttgagctttggggttctgacgtcgaggcggaccaaattgaacatctttttcatttcgaaaagttttcaattagaatgttggacttatcaattcaaaatgctgccaaaattaaagatgtatgttttaagcttaggcttgggcttaggctcccccctctaggcttaagataagacttagacttaggcttatgcataggtttaggcttatgattaggcttggacttaggcttaggatcaggcttaggcgaaggcttaggcttaagctaggcttcaaaaccacaatcgtgtttttttcagaacctcttgaaaagcagtacattcaaaacgtgtgtcatcagatttttcggctataatacaattggcattgcaaaagttttcaaacccgattactatactggcgactttcaatatgacattcaatattcaaacgagaatcaaaaattcgaaattaattgtagaaaagctcctttcaattgttttgacttgtatatcagaaaatgttaatttgttttcgtttatttaatttatttttgatcacctataattttttcacatctataatttgttaatttaaaacctcgttataaatcttccattttacagagtaccctgttgataatacatatattataaattaaattgcgcccaaaccataaatatttcaaaatggaaaaaaatggaaaaaactaataaagtgggggaaaactatgcacaaaatcgaaatttgaaactttaaatggtttttaaaaattttttgagatagttgcaaacaagaccagccaaattggtggggtatcgaaatctggtaaatatttttaaatgactccaaattttccccttattccgaatatcaatgtgaaaaaattcaaaaaaaattccctgattctttatttgagcttgaaatcgcgattttcatttgtgcacccgtgagatttttcaaacgtcaaacaacagataagaaacacatttttgcatataattggacgggtagcgttgttgcggcggcaaagatggttggaattgataggaaatctaaaaactcggagcatttattttattgaatgaatacttatttttaaatcagtgtctgctgcggatcgccctgaaactggctgattttgctgttcggtctgaaaattccgatttcaagtgattaatttagcatttttacaacgaaattaagttagattgacttaaacacgtgtcaagaattaatatatcggtggaaactagagaaaaaactgtgaaaacccgttaaatcagaaggagaatatattaattaatacagaaaaatatatctttcgtaaatctacacaaaaaagcgcgcactgtttagcggagtgtcgttgcgcagcaatatttcacgtttgaaaaatctcatgggtgcacaaatgaaaatataaaatcaggaaattttttcgaatgttttcatttagatattcggaatcaggggaaaatttgatggaatttataaatatttcccagatttcggtaccccacctttaagaaaatatcattaatgcatgcaattatttctatttcagactagcttgtcgtaaagtatgtcgaaacttgagaaccaccattgataaaatgcagattcaatttgataacatctggctcggcatgtatgataatttcgttgaaatgtcgcttgatggaattgttatcaattactcaaatgcattgaatattggtacagctgtttgtaccagacaaaggagaaagatagtcggcggagaaaggttcatgaacctagtgttcaaggattcgagtacagccctggatcaggtagcggaattgcatatcactaacaacacaagaatggttagcggcattggagcacctttgatagacgtcttgaaagccaagagacgtgttcacgtgaaaaaaatcgttttcgaaaatttccggttccaaagcatttgttccattctgccgttttttgctgcaggggacctggaagagattggagtgtggggtactcgggttggtgatcaatttgatcaaatcactaaattggagcaatggaaaaatgcggaaacatttaatatgttgtttagtaaacttgatggtaaatgcatcaaacagctgttccatttcgatgagttcaatgtctcaattgatgactttccaattgaaagtgctattgaaattcgagatgtaagtcatttcaggaaatatttttaaatgactccaaattttccccttattccgaatatcaatgtaaaaaaatttaaaaaaatttctctgattttatatacgagcttgaaatcgcgattttcatttttgcacccatgagatttttcaaacgcgtcaaatgttgccgcgcaacgacactccgctaaacagtgcgcgctttttgtgtagatttacgaaatatatatttttctgaattaattagtttctttaatcttcagatttaacggtttttcaccgtttttttcaccagttttggtcgatatattttttgtaacaagtgccaatccaacttaatttcgttataaaaacgctaaattaatcacttgaaatcgggttttttagaccgaacagcaaaatcactgagtttcagaactatccgcagcagaaactgatctaaaagtaagtattcacttgataaaaagttgaaatcaaagttaacataccgcttttctcaattaaattcacaaactttcgaaaaatctcacaataactctgttttacagcaataaatgttccgagtttttagatttccgatcaattccaactaatgttcgccgccgcaacaacgctacccgtccaattatatgcaaaaatgtgtttcttgtctgttttttgacgtttgaaaaatctcacgggtgcacaaatgaatattgtgatttcaagctcaaatcggagaaattttttgaattttttcacatggatatttggatcgatatcaggggcaatttttgagcaatttaaaaatatttcccagattgcggtaaccccatctttaaattttatattcaagttgtttccaggatctcatgaaaagaagcacatttcataagtgttcgatctctttccgtagcgataatctaatagaactcggaaaagtatttcagccggactataatggtggtactgattatgagttcgagtattcaaacgatgatgatgacacatttttgattatgtgtgtggacatgcaaccggagagttcatggttctggattatacatgtttacgaatgactagccctcaatacttgataagaaatattgccgcagctgtgttttgaatgcgtcctaaaagacctttttactccttatcgttcattttactgtaaataaaaacttcatttttaaatagagacatgctaatataaatttaaaaattatattcttcttttcatttcaaagctgatttactcggtacacttgcgcgttttggtgacgaactgaaaaaatcatgttgtactggaaaataattatttttcaaagtcttacatcacggaatccatcccattccttctcactgcacttctccgcaatctccttcttaatacaatcattttctccgtaaaacttctcgcaagccggtgtctcattttccttaatagtagcctcaactgcattcggatcccactttgcaaagcacgcagactttgccgcttccaacttcttggcacacggctggaagtctccggtcatgtattcaatcacattgcagatctttttcacgtcttgaaccacgcttttatgctcgtcggcgaatgattttcaggtggcggcggcgaaacaggattgtagagaatcacacgattttttgaattccttgacttcttgggagtcttcaaagtcgagttgattcttctgggctgcgaagttgtcgagctgctgaaatcaatatattttttacttgatgtgagaataccttataccttataccttataccttatacctaacactgaatacttataccaaatacctaataactaataccttataccttatacctaatacctaatacctaatacctaatacctaataccttctacctcatacttaaaacctaataccttataccgaatacctaatatctaatacctcatacctaatacttaatacctaataactaataccttataccttataccttatacctaatacctaataactaatacctaataccttctacctcatacttaaaacctaataccttatacctaatacctaatatctaataccttattccttatatctaatgccgaacaccttatatattaaacctaatgtttaatacctaatacctaatacctaacacctaatacctaatacctaatacctaattcctaatatctaataccttacaccttaaacctcatacctcatgccttatacctaatacctaattgctaataatatctaatacctaataccaatacctaatacctaatacttaatacctaatacctaatacctaatacctaatacctaatacctaatacctaaaaccttattccttatacctaatacctaatacctaatacctaatacctaatacctaatactttattccttatacctaatacctgatacctaatacctaatacctaatacctaatacctaaagcctaatacctaatacctaataccttataccttatacctacaaggcatttatatccacttctacaacttcaaaagagggcgcatttatccgaaatggtctcgtcacgcgcccgaaaatcaatgggtcgaaccatcgcgcgtgaacacgcccctctttaaagttgcagaagtagaaaaaatgcgatgcaatattttatgcctagtatcggataatacctaatacctaatgcctgataccttatacctaatacctacttgagaaccgttttataaaaaacaatgaacttacattaaggcaagtaactgccttgatcgcttccgaatgagtgcagtttcgtagatcaacaactacatcttttccgtgagcagtcgcaaggaataaaacgggaagaagcaagtatccgaacatccttccaccaggaaaaaagtgaagaatgaaaatttacggagccactgggaggggccaactgctgacagacacacttagagaatgcttgccgtgattaaaacatttctgttggtcaaaagttctggtattcgagcaactgttcgaacgtgcatctttagtgtttttattgaaaaaactgttggtctgatgatgaaacgaaaaacattgacggatgtgggttttggtcttgataacgcattaggaatcaattttcagaataacacggtgctgggtatacggtattaggtgttaggcattaggcctaggtattcgatattaggtattaagcatcatttattctgtattaggtattataaatttggtactaggttataggagttaggtaataggtattaggtaataggtattaggtattaggtattaggtattaggtatttggtattaggtattaggtatttggtattaggtattaggcattaggtattaggtattaggtataaagtattaggtattaggtattaggtataaggtgttaggtattaggtattaggttatagtaattaggttattgatgctaggtactaggttttaggttttaggtattaggtattatacgttagtttttccgtatggtttattattttcgctgttttactgtgttctaaaacgtctaaaacttctgaagcctccttgttcagactctaaacgattttctgatctcttcatatctttttcaaagtttctcaattttttcaccacgaaaaagcgtcgcgaatgaaaatttctcaagccattgggagtgccaactgttcacaaacactttaaaagtgtcaccgtgactggaacttttctggggttaaggcaaaggttgtgcgaaacgagcaactgttcaagatgtgcctacttccgcaatttttcccaaaaactattaaactttctaggttacaatgatcaaaaaacattgctttttgtgttaataagttaactggcatcgaaattattttccccagttttcgatattcggtattctaatagtaagaccgaaattttgtggcttcagttggtcctgatttttggggaaaaaaaaggcttcgatgtaacccaacgagtggtctaattccgatatcttcttatttttccaaatgtctctagcattatcccacaatgaaaatcactgacgaatgaaagtttcttgagccactgctcaaaatgtgccaacttccgcgtttttcccgaaaatctatttttattggtctgacgtgaagttaagaacgtaaaaaatttttaggcgaaaatcggagtaacattcaaattattaataaattagaaaaacataaaaaatcatcaaaggaatctcacaatagaaaatagaaaatactgcgtttccagttttgtacacttgattccaaaagtgtcgttatcattcaaataatcaaaattacaaattccaaaagtaaaatcgggtttgaaaactcttgcaagctcaagtcgattgtcgccatggaattcgataaggcaactgttaaatgttattcttttcattagattctgtaaaaaaaccttattattatcagagctgaaatttccggcaaatcggcaaatcgccggaattgaaaatttacggaaaatgggcaaattgtcggaactggaacttccggcaaatcggcaaattaccggaattaaaattttaggcaaatcggaaattcggcaaaaaccaaaatttccggcaaatcggcaatttggcgcaaataaaaatttccggcaaatcggcaaatcgactatctgccggaaggcaaagcggcaaactgccggaattgaaatttccggcaaaccggaaaactgccggaattgaaaccgccggcaaatttccgatttgccggaaaacggcctttgacgaaatttttctgctaattgtattttccgctttttttgttcggaaaacggcaaatcggcaaattggcaaaaatcaaaaattccggcaaatcggcaatttggcaaaaaccaaaaattccggcaaatcggcaaatcgactacctgccggaaatgaaattttccggcaaatcggcacattgccggaactgaacgtttccgacaaaatagcccattgccggaaatgaaattttccggcaaatcggcaatttgacaaaaatgaaaatgtccggcaaatcggcattttgacaaaaatcaaaaattatggcaaatcggcattttgactaaaatcaataattatggcaaatcagatatttgccaaaaattaaaaattccggcaaatcggcaatttgccaaaaattaaaaattccggcaaatcggcaatttgccaaaaattaaaaattccagcaaatcggcaatttacacatttgccgattttgtcgacaaaaaaagtttccgaacggcaccacctgcatcacatattgcgaaaaaatgtgtttttcgccgcggccgacactgttcgggtttcgctgcatacttttcaagaggcgcggctcgcggcgcaaggcaggcacatcaggcattttggcgcctacttgtaattataataaaatgtgttaataacttacatctcgaatcttaatcgcactttccaacgggaaatcctccattttaatagtgaacctctcaaagtgaaaaaagttttcgatcagatgactaccaaaggtaaaatttgaaaatgagacaatcttagcctgcttccactgttccagatgagaaatcatttcaattttaattttcgtggcgtgaatattattaaattccatgtcttctgcgttaaaatacggcagaattgagagcaaatcattgaacgagaagctccaaaaaattacttttttcatttggacaggggcttccaaggtgttggtcagagcttggacattatagtctttattcccagtgacatttcgaagacaaagccttgatgtatgctttgataggagctccagatctttgatggccagtttcatgaagttttcgcagctgatagtaggttcaagtttgttaagggtcactatagaacaaccgtctaggttcgagtagccaacttgatgattatccaaatttaggataatttcttggcttctcagtcgcaattcaatctctttaaaatgaagcccaagttcatcaacagcgtatctcaagtttcggcacacttttcggcacggtagcctggaattaatttttacacaatttctaaacattttaaatgtgcaaaaattgaaagaaaaatttgcaaaaatgagcaaaaatgtgcaaaaaaatgtgcaaaagtgcgcaaaaaaatgcatcaaaatttttttggctttttttttgataatcgaacaattttacagttttttgctcatttttttcacattttttgcacattttttataaaataaaaatttccgtcaaatcggcaaattgcctgaattgataacttttggcaaattgacaaaccggaaatgtgacaaattgccaaattgccgaactttccggaaaatcggcaaactgtggtttttgcccttttttccggaaacttcagagttttaatattaatcggcaaaattgtatgcattctaaaaatgttcctacatctattttgaaaaagtaagcaaattctaggaaaaatctagaaaaaacgggcaaaaaatttggaaaatgcacggtttttccgttttataaaaaatccctcaaaaaagttccggaaaattggtattcggcaagcggcaaagcggcaatttgccgtgattgaaaagttccggcaaattgggaatttgccgtaattaaaatttttagacaaacggaaaaaccggcaatttgatggaattaaaaatttctggcaaatcgacaaaccgtcaatttgccgggattgaacagttccggcaaatcggcaaattggtaaattgccggaattaaaactttcagacaaacggaaaaaccggcaatttgctgggattgaaaagttccggcaaatcggcaaatcggtaaattgccggaattgatcatttccggctaatcggcaaaccggcaatttgccagcaagtcggtaaattgcctgaattgagatttccggcaaatcagcaaactgacaattttccagcaaattggtaaatttccaaaaatggaaatttccggcaaatcggcataccggcaatttgccaggatttaaacttccgacaaatcggcaaattgccgggaatgaaaattttcggcaaatcgacaaaccggcaattttccggcaaatcggtaaattgccggaatttataatttccagcaaaccgggaacccggcaaattggctatttcccgggattaaaaactaccgacaaattggtaaattgccggaattgaaaatattcggcaaatcggcaaattgtcgtgatttagaagttccccaaatcggcaatttgccggagttgaaaatttccggcaaatcggcaattcggtaaaccgtcaagttaccggaattgaaagtttctagcaaatcggcagattggtgaatttccagaattgaaaagttacggcgaatttgcaaaccggcaaacaggcaatttgtcgggattaaaaaattccggcaaaccggcaaaccggcaagttagcggatgataaaagttccgacaaatccacaaacccgaaattggccaaatttactacactcaccgatctatgtgctccagcttctccagaacatggtcaataatttctgaaggcaaatcgacaagcgttgggtaaactggtgtcaaactaaaatatatatttatcactagtaaaattgtatcactacaacttctcaacttacttacccactcataagccgaatacatttcatctcaatccacatgtccaaagcttttcctcttttttctgtcagatcagcctgttggtcggacattttagtacgaaaaaatgaaacttgagtataaaactttttgaattcaagaaacagcaaatatttgtaaacatgaatttttatatcgttttttttttctgaatacctttcctttttctatggaagtttcgattttgactgaacaaatacttatgtatatggtttcaaggttttggtatacctttcaaattttttcaggataaaagtttaacagcaatcgaattatattaagtttaatgtgttaaacaatgtaaataaaagttcgaaataataaacatttttttattaacatctctttatgaacaatcgactacactgacagtaaattgcaaatctgcccaaatcgtttgaatattcaaaatcactctcaccattataatccgacttaaatactcttgaaagttcagatggatcaacagattcatttgtaataccaattttgaccgcgcacttttcgaatgtctttctctttagtaggtcctgaaattgatttgattttttaacaaaatatcactactacaaaaaatactcacatctctgaattgaatagcattttctactgaaaatttgagtatgtgaattttaaacgtttggaagtggaacaggtgttcgaagggtgggcattctagctcataattatcaaaacggaaattcttcgtgtttttccattgatccaatttagtgatttgttcaaatagattatctaatggaaaattgtaaatattgcgacgagatattcggagaaactcacttgtatcatcccataagtaagtattccacagtattatactttccagtccttgagatttgaagtgtggaagaatagaaagtacaaaatcaaggggtactttccaaaattctagtttctcgacgtgattccattttttggctgttaaagtccttagaagatgttttgcagtaaaatacatatcggtcttgtagcatgtgtgaacagaacttatatgtaatttcgatgcgtaacgcaatagtattccaaagtcctttaccgctacttttacgtagttttgttttttgaatatcttttcctgtttcttgtaaaccacagatgtaccttcatcatttaacagttgatcgtaatctatagtgttgttgtccagtgttatacaaatgccactgtcgtgtatactcaatacaattgtgtcaaaatgaattccaaatccatcaacagcgcgtctcagtccttgacacacattacgacaggtccatctggaaattattttcaatatccttaattgggtttatttgaaacggtgaaatgcaaattttcaactgcaaaattccagaactgagctaaaggtgagcattcaaagatgctcgcagcagcacaaatattggcaagtctgtcggtgttggtttcaagttttttaacttttttttgattcataaaaactaaaaaattgccgatttaaaaaatttgctattttgacttggcccaattagccatgtaccgacatattgtcagttttgctgagttgacgttagccaattttaggcaaatgtcaggcgaattagtcgcttgtctatttcggttaattccgctaaaactttttttgtgaatttttatgactttttctatttgaacagtcgttcatcaccgaatttgctaaataacagtaaaaccaaaattctgaataacctaacaaaactaacgttaaaaacttaaccagatgaatattttctgaattagccgattagccgaaaatttgtcgacttgacagattaattttacccgaattatcagttacccaaagaaatcggttatccgacgacacaccgagcatctttaaatgctcaccatcggttcagttctgcaaacttgcagctgaaaattcaattttctccgtttcttttcatgagcttttaaatgaaacacgttcatttcaaaaagctggtgaacctattttagttagttcaaaaagttttttaaaaaaacaagcaaattgagaatttactccacctcaaaactgtgtttagagttacaaaaaaaaacaactaacagatccataggctccaacttttccaaaacttggttagcaacgtccagaggtatactgagcagtgggctctcctgttgtaaatttttttgacgatttgatgaactagaaatccattttggtagtatgtcaatgaagcaaccggacattttgaaaccaaaatttgttatctgaaaatctacattttttatgtggttttaagcctaaaaaaacgaagcctctggtttctattgaaaaattatgtcgaaacacaaatgaaggttactgacagatatgtaattttgaaaccgaattcaatagttatttgatttcgaaacacgcaaactaactgtcaaaactgtaaacaatttattatcagctcatacctaatgcacaaaattaaaaactgctgataaaggcttgtggtgtgttcagcatattttgaacgtacggactcaaaatgtctcaaaccgatagtttttctttgaggagtagcaagtcattattagttagttatgctctgtttctcaatacatatacgttttgtgtattcatttaagaccagcatatacgtcttcattttctgaaatttttagttgactgttagattttttgctcatgacaccctaaataaatttgattttcagatatattcaaattctacttccaaaatgcccggttgcttcatcaatattcttccaaattggttttctagttcatcaaaacgtcgaaggattatacaacaggagagcccactgctcaatatacctctggacgctgctaacaaagttttggaaaagttggagcctatggatctgtgagttttatttttttgtaactctaaacacagttttgaggtggagtaaatgctcaatttgtatcaaattctaatttcaatttcccgccacaagtcctttgttcgatggagcgcgcttgcaatattttcataattttagtggtaattcaaattggaatttgatgctgattaaaaatttaccaattttcaaaaagcatctaaaatttaggattttttttggatttttttttttgaaaatttaggattttttttaaacttttcaacgaatttttgaaaaatttttatttttatttactgtcaaaaaatggcaatttctcagtttttgccactcataattttggaagtcgaccaaaaaaaatgttttatcgacattttttatgtttaaattttgttgaaattatttgtattaaaacattgtaggggtcgaaacatgtgacatttctttaattttcctcaaaagctcatacttttctaaatttttggcaatttgccaaaactttgaccggaaattatgaaaaatctaaaagtttttggagtgttttattatgatatttggttgttttggatcattaaaagtgcatttagacaaaatttgcagttaaaactttaaaattcatcgtttcttaaaataggtttcctaataaaacaagtattttaatttaaatttcagatactgtcgtaatgtgtgtctaggactgaggcacgctgttgatggatttggaattcatgttaacacagttggttttagaatatacgacagaggcattcgtatatcatatgactacaacactacagattacagtcaacaaatcaacgataaaggtttatctatgacttacaagaaactggaaagaacatacaaaaaacaaaattacgtaaaattagcgttaaaggactttggaatactattgcgttacgcatcggaattgaaaatatctgctcctcacaaatgctacaccaataagaatttaaaacttcttctgaaaacttggaaagccaagaaatggaatcatgttaagaaattagaattttcgagagtacaccttgatttcatactttctatatttccacacttcaattcccaagggctggaaagtataacaatgcggaatatttacttagatgatcaatttgaacaaatcactcaattggatcaatggaaaaacacgaaaaatttctgttttgataattatgagctagaatgcccacccttcgaacacctgtttcacttccaaacgtttgaaattcacatactcaacttttcaatagaaaatgctattcaattcagagatgtaagtatttttgtagttgtgatgttttgttcaaaaatcaaatcaatttcaggacctactaaagagaaagacatttgaaagttgcacagtacggtttggtggtacaactgaatttattactggacttattcaaactgaagttgcaagagtattcaagtcggattatgtatattcttccgaggaatatgaatattcgaatgatatgaacaaattcaccattaaatgtcactatggtcaattgttcataaaaagatgttgattaaaaaatgtttattacatagtcctcaataaataaatttctgataaatttctttaaataagaagtaacatgaatgaggaaattgtcttaaaatgtagtattcgtgctcaaaaatctgttaaaattcaacaaagggttcctgtagtttgggaaaatttaaagtttaagcttttgaagaggtattgggttgggagttggttggggataaagtcaaggtactgcggtgatatttaggggtactgtaggattacggtagggttattgtagtttgggatactttacacattaaacttcaaaaactccatgttcttcaggcttctcgtcaactccccagattcttgttgtagggttccaagttcttatctcaataagttctagcccaccatcaggtctcaaacgtgataaattgatttttgccgagttatgtgcataacacgctataatgactgctggtatagacattattttgattattgggcataggtatatagtttctggccataatttgtttataatgttaaactcgttttgagatggatgagtccaggtacacaagtagatataataggcttccataatggcgaaaaatgtaaaaatggaaaccttttgaaggtttgttagttgggtggtttttggaaaagtatacttgataggtgattcagattctaaaagaatatttgcaaagccaattggtagatgtactaatagggagtggatgactgcaaaagctaggatctgaaaaaagacgtatattacatatatttgaataagagttttaaaattcacttacattcatccatcctccaagaaacatgagaatcataacaaccggaaataaaacatttaaacagaccactgcacctgcaataaggatgcgataccagcaaaaattttcgatagattgttgcatttgtttatcgattttttgtaagtcaatccaaaaatatgataatccaagtgaaaatggaataatgaagcaagtggattctaaaaacgtgctctctttgaatattatgatcacattgagttcataagtaaaatagataaagtaaaccagaaatctcaagtaattcgcatgcaaaatgcggccgacagcacccattaatagtaggataggtatgagatgagtgagactatagagattattggacgaaactgaaggagagacgctggtcgatctcaaaattaacctcaagggaagatcccacttatcgatctcaaatgcacctggtagacgattgggatattaaaacgtgtagagcacattattttgagtgaatactttgaaagagagcaagtaaatttcaaaaacttggcccgaaacccgataaattggaagaagttatatgaaaattacaagaaaaattcgataatgaagtattggattgggagttcgtggggggataaagtcaaggtactgcggtggtactgtaaaaaattccatgtgtcaaattaggcgaatttgccgtttgtcaaaattttctgaaactcggcctaagccgagttagccgttcccctgctgcacattagtattctatagttggttaatactctttccttcataaattatgtaaaaaagacatactcgctcaaataaagcctttatttaaatactttacatattaaacttctacaacctcgtgctcttcaggcttttcgtccaattcccaaactccagtcgcagggttccaagttctgatcttaataagttctaatccatcatcaggtctcaaacgtgataaattcattttttccgagttgtgtgcatagcaggccacaatgactgctggtatagacattatattgattatagggcataagtatacactttctggccataatttgttcataatattatactcgttttgagaatgatgtgtccaagtgcacaagtagatatagtatacttccataatggtgaagaataggatgatggaaaccttttgaaggttggttagctttgtggtttttggaaaagtgtacttgattggtgattcagattctaacagaacatttgcaagactgataggtgggcaaagcagtaggagatagatcaatatagaggcaagggtctgaaaaatattagtttaggatagaaagtaaagaataatcttcgaaatcttccaaacttacattcatccatcctccaagaaacatggtaatcatagccaccggaaataaaacattcaaacagaccactgcgcctgcaataaggatccgatgccagcagaagttttcgatagactgttggttttttctcttatcaactagtttacaagataacgcaattgaaacgagaatataaagagatattaacatcaaagggtttttcttcttaatgttcactaggaatatatggagcccatacatgttattgatgagataaaccagagcaaaaatgtacagaaagtagagagttcggccgacagctcccatttttatggaatagaggggtaatgaatgagacaatgaatatgtacgtcttgagacaaactgtgaggagacaacaagtgcaataacatcccaaaagacaccgaagatgtatcgattcagattcaaacgcgctgaacaaaaaaatgtagtagaaaccctgcaattatgtaaacaaatctgtgatcaatttgtgaaagatttaggaatttgaaacaaatttattgtcagcatatagttgatattatgaacgttacaaacacaacaaacaacgttaacccaactgtatttcgtatttttaaaagtttttacgtgaaaagatacgtcaaatatattaattttatatttacattaaaccattataattcaaaccaataaaaatgtattaagccaactattgtaatatgttttttaaatataccgaccgttaaattcgtctaacatccgccaaaatctgcaaacggataattcatctacgactcttatatattttagttttagtcaataaggggcacgtggcgagactattccgcataaatgcccaccgtatatatatatcgatttgtcatattaaacaacatcacaatttattgctatcaattatcaaaaaacttttatattaattttaaagtttcaataccaccgagcaaatttgtttcccaggttaacatctttctatagaaagttcaaaatcacgagacgctagagtttgcaaattaataacaaatgtgccctgatcagttgaatacttgatgttaaacccattgtcgccagtataatccggttgaaatactcttgcaagttgaattggatcaattcgataaattttaataatgcatttgctgaatgttcgtctgttcagcatattctgaaaataagtcaaataaaaaataaatcatttcaattatatagattataagtacttacatctctaatttgagttgcagtttttattgaaaagtcgctcatgtagatttgaaatgaaacaaagtgaaataggtgttcaatgtatttactgtttattgaataacctttaaaattgaaggtttttgcagttttccactggtccaagtaggtaatttgtttgaattgatagtttctgtcatattgccacagtgtaatactttccaggactttagaaacaaagtatggaagtatagaaactaccaaatcaaaggtaaaatactaaattcaattttcttgatgtgagcacatttttgggcttttaaaatgtccataagaaattttacagtatattttatatcttcaatataaatagaaatgtgtaattccgttgagtgcttcagtagtatctcaaaatccttgaatgctacttttatgtaattttttccttttactctcccctctcgtttcttgtaagtcacagatgtaccaccacttgatgctgctttacagtaataaatgtaatcttccagggctatgcaaatgttatcagtgtagatttggagtgagattttaggaaaataaattccaaatccatcaacagcgcgtctcaggctttggcacacattacgacatgtccatctgaaatttttaaagttttcgtggcgggacccaaattttttagaggggaatttttcaaaaattttggaactagtgcggcaaatttgggaaatttgccggtaattttttatattagtttgaagcgccaaaattactgtgtacttacagtttttattttactagaattttcggaaaaaatcaatagtttcggtcaaccttttttgtccaatttgaggtgtatgccacgggtaggcggccaatcggcaaattgccggtttgctgattagccggaaattttcatttttggcaagttgccggtttgccggtttgccgatttgccaaatatttttatttttggcaagttgccagtttgccggtttgccggaagtttttaaaggaattttttgaaatacgaaaacacttaaaatttttaattccggcaatttgccgatttgccggatatttcaatcccggcaatttgcagatttgccgaaaaattattaccctggtgtgcggcaaatttcgaaattttccaagcttggcaaacggaaaattcgacaaatttccgtctaatatttagtctcaaaaactttttttccaaaaaaaattcgactcacaaatccatagggctaagcttttcgaaaacttggttaacaatgtccagaggcatatttagtaaggggctctctagatgtgaagtggttggcggttttgtaaaccattttgttagaatactgacgaagcaattgggcattttgggaagtttaaccgaaaagaaaacaaaatttaaaatgaactggaactagtcaatattatgaaacacgctcttatcagttaaccgtcttcacacgtgcaaattgttaaattttcaagcatgcttttttatgagccatcagtagtgtaatgaaaagcattttgcgacggttgacgtattttttgagaccttgctcacttctccaaaagttagttgttttgatttcagaacttatttcagtacctttttgaaattgtttttcttgttctacatacttgctttcacttgttgtttgcaaattttgtttaaaaaactggttccaaaaaatcatttattaatgtcgtttaaaaatcaaatttctaaaatctcatgctcttcgggcttctcgtcgactccccatattccagttgcagggtcccatgttcttatctcaatgtgttctaatccaccatcaggtctcaaacgagataaatgaactttatccgagttatgtgcataacaagcaactacgactgctggtatagacattatattgattattgggcataggtatatagttcctggcaagaaatgaataatgttataattgtttgaagaagaattagtccaggtgcacaagtagatatagtatacttccataatggtgaagaatatgaagatggaaaccttttgaaggttggttagttttgtggtttttgggaaagtgtacttgataggtgattcagattctagaagaacatttgcgaaacatattaactgtaatattagtagagaatggatgaggatggaagcaagcatctgaaaaatggtagaatgtatatgaatatatatatatagatactatgttttatattaattttttctattatttgtactgcttttgcttattttgcaataactagcgcaatagatttatgtacataaataccgtatctttagcactccgactactcaactttgaaacgttatatctcggttcattttaaagatatcaatattttattaactacagaatgatagaaaaagaactaaaaaatattttgttagataacaatttttgaatagaacaaacgataattgagatataagctgtcaaagttgaacctattctaaacgaaacttacatttatccatcctccgaaaaacatgagaatcatagcaatcggaagtaatatattcaagcagaccactgcacctgcaataaagatccgatgccagtagaagttttcgatcgattgttgcacttttaggcattctttatttataacaacccacagaaaaggcacaatcatggatagttgagtgatgttagaaatgtaccccgcaagttcattgtttctgaacatcaggataatattgaatgcataagcgaccgcgataaagtagaccagaaagaacgagtataaaacgtacagagaacgtccgattgcacccatttttgtggaattgagaaacaatgaatgagacaacgtgctggaagacataacgccagtgaacagcatgcaacgacccaaaagacgtctcaagagaaggccccatgtatcgatccagcctcaaacgcgccttgtggacaattttacaatgtacagtacttttccggaaacatctttagttgtgttttgagttgaaaactttaaaaaccgaaaatatatttgaaatttgagttatttatttggtctggaagttataacagttttgggccaaattatgattttataacataatactttttattgttgtaacctctacagtgtatgtaaaaactattataagaacctaatcgaaaaatcgtttattaatattgttcaggacacattagacttctaaaaactcatgatcttcaggcttctcgtccgattcccagactccagttgcaggattccatgttttgagtccaataaactgtagttcactaccaggttgcgattgaaataattttactgtatccgagttataagcatagcacgctacaacaacgggaggtataaccattatattgattattgggcataagtatatagttcctggtaagaatttgacaatgttatactcgttctgagatggatgagtccaagtgcacaagtagatatagtagacttccataatggtgaagaatgtgaagattgatactttttgaaggttggttagttttgtggtttttggaaaagtgtacttgataggtgattctgactctgaaagaatacttgcaaaaccatatggaaggcattgcagtaggaaataaataaataaggaggcaagggtctgaaaaatttaaaaatgtgtattaacattttcaaaaatccaaaaaaaacttacatttatctatcctccaaaaaacatgagaatcatagcaaccggaaataatacattgaaacagaccatgcacctgcgatacggatccgatgccagtggaagttttcgatagattgttgctggtgctctactatccttgtgagagcctcccccaaagaaaacacaattgaaaaagaaatacaataaaaactgaatattgctagcttatactcttggaacattatgaacaaagtgagtgcataagtgaaattgagaaagtaaatcagagggaacacgtaaagaatgtacagcgttttcccgactgcacccatttttaagggctatagggctaacaaatgggataatatgtattgcgagtctgcaaaaaaatgtagaaagacacaaggtcaatccaaaaagatgtctcgagggatgattcttggtattgattgaaaccaaaacgcatctggaagacaataaactggagtatatacggtctatcgaaaagggcttgtttgaaggacgattaatgttaaccaatctcattttttcgagtttatttgaaaaagtgcgataccatgctctagtgttagcttacgatgtatattattactattatatatattatattatatatatattatgtgtatattatgtatattatatatatatatatatatatatatatatatatatatatatatatatatatatataatgtgtatgccaacgtaactatagtggcggtagctattatatgtatgtacatacctatatgtgccaaattctcaaagacaaaaatgcgattaactgtgaacaatttttatgggcagtgaaatttttcggcaatattgacagatgtgtagtatcacaaaaaaccaataaatacgctttttattatttgaatcgccacaacataatcaattaattggtaaatctgcaaaatatcaaggttagctggcatttttttttcacaaaaccacttacgatggtaaaagcacattgcggcaaagaattcggtttcaatgacagtagaaccctcccgcaaagtccatactccagtttttggattgcaagttgatcacccggaaattgatgtctaaataattactagtaagcaaatttaaagaaaaagagacaaacgcttataaggtgcggcctatcatcaggtttatccaatggaatgtaataagtcaaatgctctccagcttgggcgcaactacgcatgtactggcatccatcagcagagagtgtaggaagtgcataagtggtagaaaagtttgcgatggttggatggtcaagataaaatcctgcagttgcactgttcagttccagtgatgggcatgggcaatttgctgcaagttttaaaagtcaagctttgctaaaaacttttggtcaggtcaagcaaagttatcgcaattccgactacgggctttgctacttggtgccaggctgtcccattacggtttgatctacaaaaaatgcgggaattttttgcccaaatatgtgacgtcagcaatcaaaactctgcgtctctccacccgcattttttgtagatctacgtagatcaaacaagtcacgcggtgtcagaaatgagacactctgacacagtaggaaaaaaaatcagggccttcccagttctcaaataactcacagttcttcaaacaaactccgtacatcctagagagattcacagtattgccatttccatcgtcaactgaccaatagtttgaaatcttgtcacagacaccattagcaggtgatggaccggactaaagcgggtattaatattaatgcttcagatggatatttctgccaagcagcctctaataaatgccgagtgtgcagactccgcccctttttcgcgttttttcgcgttttttttggcttgcgaaaaaaggtaacactacatttacattcccaactcctgaaccgtgtgacttcatgctctaatatttgaaatcctactagaaatattttgccccacggtggagcagaaaacggcactaagttcggagcaaaagtgagctcagggcggctttccccagtttgaaaaaaaattttgttgctcttttacccccaaaaaaccatgttttaattgaattaaaattcgggttttgctccattttgtttgaaacttatgtgcaagatactactcagagagactgattttttgaaaaaaagtttaagttcataagtgcaaaagccaaaaagttgtgataaaacaaaaggccaaaaactgccattttgccaaaaaaaaaatttttttccgaaaaattagtttttcgtctttatctcaagttctacttcatcttttttcatactttttttgtttaccccacgtaaaaaagtacgttgaacacgattttgaagtcagaattaagaaaaaaccaatgcgtcggctgatcaagacgaataagtgtcaaattttgcacactcttccattttcgcgattctacttttttcatcataacttggtcagtttttaagatttctcagttttctaaaaagtaacgtgtaggtctcattaagatgcatcgagacatatataatttctaacaagttcagtgggaaaatttttcaagaaaaaaataattcaaaaatttagtacgggggggagtagtttcctgggtctcctgaacattttttccactaaagttttgcggaatgtatttttgtttcataggttttgattttatctaatggaagctgaagttttgtcgcattagcaatgctctgccaagagatattattttttcaaaattttcagaccaaaacttgtttgtttctataaataaaccagtttacaagatatagccctcaactgtacgtctcctttttgggaattcaataatgagtacaatcctgtaataaaaatttcaaaatttcgttttcccgctgactaatcagtgataaacggttttgaaacatcttttctcaaattttcattattgaagaaagcggaatcgaaagacgactcctttccagaaattttccttccctacatccctttttgaggtgtctcccgcatggccgagtggttagtacgtatgtctgcagaaatttttggtagttggttcaattctaccaactgacaaacttttttgtgagttatcgggattcgaatagaaatcctcgattttatacaaaatatggatacgtctcccccaatataacgcctcctcaaacttcaatcaatcaaaattcagctttaactgattcatcgggtgcgtctgtttttggtcaaaccgaactcgaaaatcaagaagactcccattgacctactgaaattttgacgaaccctctaaaagtcgaaaatgaacaacttagcctctccatcacaatacatcttgacagagcaatcatcaactatctggattggttttctgagcagcgattgaggcttattggcccaaaagtttgaaacttgaggctcatagttataaacgtcagcaggatcaatggctaggacgttgcaagcacatggtgctgaaggtcaaaattgaaagttcaaggaggctctgaattttgggcttacgtggagctaactgattgattttcaaacacgcattggcaaatacagggagaaagagaagtaaggccctcattgatgaggaaattgaaatgattgaaaggggaattagataatatgctaatgtatatatatattcatgtggatgttgttggaatgaatatattaaatcaaatgaactattgaaagcgatcatttatttttatgctgtcaaactacagtaaccctagcataaacatacagtaccttattattatctcccatcacctttaacccaaaactacagtaacaccttacagtacaacacagtaccagagacgatttattagctgcaacacaattaattaattggtaaatctgcaaaatatcaaggttaacaagcagattcttaacaacaccacttacggcggtacatgcacattggagcaaaaaatttggtttcaatgacagtagaaccctcccgcaaagtccatactctagtgttcggattgcatgttgaccccccggaaatagatgcctagtaagccattaaaaaaatacaaacgtttataaggtgcggcttatcatcaggtttatccaatggaatgtaataattcaaatgctctccaccttgaccacaactacgcatgtactggcatccatcagcggatagtgttgtaattgcaggagtgctattaaactttgtgacgggtgtgtcctgtctgagataatatattgcagttgaactgtccagttccaatgaagtgcatgggcaccttgctggaaattttaagccagttggagtaacattccaaggtctgatcaaaatttgggtcacaactcacagttctgcaaacaaactccgtccatcctgagagattaaaagtgttgccacctctaacgtcaactgaccaatactttgagattttgtcacaggtaccattaacagatttaccgaactgtagcgaatatggcccaaactcccagggggcaaaaaattagggggcatcgtgttcttagggggcatttactccaagggggcatcactcatagggggcattaggggtcaatgttcttagggggcattttcaaaagtctcaaagggggcaaagttttaaatgagtatctgttaaggatacgatttttaatgatttgtcaaaaatggaattcggccttaaatactaattaaacactttgaaatgggaaaattatgatgttttatttgtcttgtttactaataatattttgaaaagtgtatttttcggtgggcaacttgttatatttgtatcttcacagtcatccaatatagaccaaaagtttaaactaataatttgctgattactatacagggtgacgacttttcagttgaccactttttcttatatcacacacgaacggagctataagattttggaatgtattatgtctacatccccgctcttgacaattccattaatttttcgtgagagcacatccaaaattgtttaaaaactattttctgtagtatctaaaacttttgaacaactatcttggatgactgtgaagatacaaatataacaagttgcccaccgaaaaaatacacttttcaaaatattattagtaaacaagacaaataaaacatcataattttcccatttcaaagtgtttaattagtatttaaggccgaattccatttttgacaaatcattaaaaatcgtatccttaacagatactcatttaaaactttgccccctttgagactttggagaatgccccctaagaacattgacccctaatgccccctatgagtgatgcccccttggagtaaatgccccctaagaacacgatgccccctaattttttgccccctgggagtttgggccagcgaatattgatattaatggttcagatggatgtttcttacagtatagccactattcttcgcggttattgggtcgagcattataagggagtagccaacgtattcacaggacatagacatcctacagtcctccatttgaatagttgggctcctaattgtcgtcattgtaaaaattttgtataacggattttctgttgaaacgatttcgaatatattcgaaggctgtagagccagaaagtcacaagtggcgcagcgatctgaaaattgaaactatgtaaaggaagagcaatcgagttattccttaccacggaacacacacattggtgcaaatagttcggcatatcgaatagtggtaccgtcggtcaaagcccaaatgccggttttcggatcgcacgttgatttatcggtgatgtactcctgaaaattaagatcaatagtgaaaaaatttacgaacatgtaccatttgcgacaagtaatcgggatcatcgggacgtgaccaatatatgataggttcgctatttccgggacaaaaccgtttgaactggcagccatcagcggagagtgttacatttgcaggaacgaaaacattgtctttcacatagctttggtaaaaactgtcttggccgatgtaatacccagcgttttcattgtacaggtccattgaagcacaccgacatttggctggaacagtgttggtgttttcatattctttgtatgaaaatgttttttgaaaatgaaaatcaatgccagttctatgtagtagaactcaagtcaacttacaatttttcacacaaactccgttcatctgattgattgtcacgaattttccacttccctcgtcaattgaccaagtctgagtactagcatcgcagaatccatcagcagataatgcgccgaactgtaacaagtctgattaactgcattagattctggttattcttacagtatgtgcactttgtcccactactgggtcaaataccagaagtttgtagtctccttcacagtacatcgagatagcacagtcatcaagtttaatgattggggattttatggtgttcagggtcacgtttctgtagtaaggatggcctcttgggatgttttggaagatgtttgaaggctggatggctagagattggcaagcacaacgatctggaaatttgaagcatggggcatacgttggctcgataggttcttgactaatagatcgtttaaagtaaaagtgggaaacacactttcagaacctaaaaaagcagtgtgtggggttccacaaggatctgttctttcaccagtacttttcggcatatttgtcaatgaaatatccgcaaatttgcctgtaggagtatactgtaaacagttcgcagatgatataaaattatacgcagccactccaaagagtcaatctcaaaattctctccaatcagcaattgacgtagttaccgattgggcactcaataataaactccttttaaatccctcaaaaacttttcatttaaccctaggaaaatgcaatacaaattatacctattttttgaatggactccctataaaaaaagaagtatcaacaagggacctaggattcctagtgtctgaaaaactcgattttacggaccactggaaaaagactatcaatctcacaaaataccaactattccaaatcttcaacacttactctagtaaaagcgtaaagcttatgactttactctataaaactttcataaggcctagactagaatatggcacagtaatcactagtccaattaagaaaaacgactcaaaagctatagaatcagtacaaaacgcgtttacgagaaggctttacagtagaatgaagggcagatacatcagaccagatgacaaagattacaaatcggcctcggaaagaaatgaattatttaagctctcaacgttagaaaatagaagattagcaattgataaaaaactcatatcccacatgatgactgggaaaataggtcttgaaacgtctgaatttttcaactttactgaaaatacacgtacacgttcgaaatacaaattctcttggggcaagtgcaaaactagaattaggcgacattttgttattaatcgtaccttaagtacgcaactaaacaatttttgacacgatacaaccgatcataagctctccttaacttctgctcttcaaatatccagtttccctatcctcttcatcttcacccccctttcccaatttttttttcttctattatttgtatttgtcttctgttttttgttgtttttatatttatgtaattggttttcatcacgtctctgagagagcgtaataaataaataaataaataaatgattggggattttatggtgttcagggtcacgtttctgtagtaaggatggcctcttgggatgttttggaagatgtttgaaggctggatggctagagattggcaagcacaacgatctggaaatttgaagcatggggcatagtatggcctagtttggcctattacccgttggcaacacgcaaatgccatacaaatttgtgatagttgttagcacaccatttaggtcgaccgaaactgtctgggtgtagggatcgcagaacccttcggccgcatatgctccaaactggaatttttaaaagttttttggcccaaaatctgtcagttttttacctctttgatagatgtcttgtcgaaaataaatagctcagcctctccatcgcaatacattttgacagagcaatcatcaactacctggattggttttctgagcagcgattgaggcttattggcccaaaagttagagttttcaggttcatagttataaacatcagcagggtcgatagctaagacattacacgcgcagggtgctgaagttcaagattaaagttttacgggggctctgaacattgggcttacgtggagctaactgattgattttcaggcacgcattggtgaatacaggtaataatagaagcaaggctctcattgcctcgggaaatgaagtgtttgaaaagaacaagcaactgaatgtggtgttggaatgaatatataaaatcaaatgggctgtgggttttggaaagcgatcagttattcaccaacagttcatttgatttaatatatgcattccaacaccatccacatgaatatatattagcattttatctgctttcccttttcaaccacttcagttcattgaacaaggacaatgaatctcctacttctttttctccctgtatttatcaatgcctgtttgaaaatcaatcagttagctccacgtaagcccaatgttcagagcctcctttaattttcaatcttgaaattcaacaccctgcgcgtgtaacatcttagctatcgatcctgctgatgtttataactatgagcctaaaagttccaacttttgggccaacaagcctcagtcactactcagaaaaccaatccagatagttgatgattgctctgccaagatgtattgtgaaggagaggctaagttgttcattttcgacaagacatctatcagagaggtagatcagatttcgggggaaaaataaacaaaaattttgttcttcagttcggtgaatattccgccgaagggttctgcgatccgtacacccagacaatttcggtcgacctgaatgctcaactgataactattacaaatttgtatggaatttgcgtcttgtcaacgggtaatttggaacttgaactaagccatactaggccatacgtctatgaattcaatttttcagatcgttgtgcttgccaatcccttgctctccattcatcaaacatatttgaaaacattccaaaaggtcatccctactttagaaatgttacactgaacaatatcaacaacccagttattaaactcgaggactgtgctatctcgatgtactgtgaaggggactacaaacttttggtatttgacccaattgttggacagtgcacactctgtaataataaccgcaatccaacctcaagaatttctataaagcttgttacagtttggttcattatctgctgatggattctgcgaggctagtactcagacttggtcaattgacgatggaagtggaaaactcgtgactatcaatcaaatgaatggagtttgtgtaaagaattgtacgtggtagtttaacttgccatgttcaatcccaaaactttaagccaaatgcccctgtgcttctttggaaataagttctggaaactctgaatattacttgggccaagacagtttctaccaagaatccgtgaaagacaatgctcattacccggtgcgcgaaacactctccgctgatggttgtcagttaacacgaggttgttacgatggagaacctattatatattggtcacgctccgacgatcctgagtttacgctacggatggaacatgtttgttgattttcttgatttttccactttttttgaactttgagggctccatcagcgatgagtcaaagtgcgatccaaaaacaggaacttggacgttgaacgacggtaccactgttcgaaatgccgatctattcgcgtcaacatgtgtaaatcgtggtaagtcttatcatcatcacttatattgacaatgatgtccatagtttgtagtctgtgacgtcacacttttcagagaaaggtctttcagactgtttaagggattatgggctggggtttttgtatggggaatccccattggggttgattcatccaatttggtctcaattttcaggtcagtgctgggcttgtgggtttattttaaatccggaaattgtattcggtaacattccactcactcatcctctattcaaaactttaacactaacaactgttaaaagaccaattgggccactgaaggattgcgctttctcaatgtcctgtgaaagtgactacagccttatggtactcgacctaaaacaggatggggatcaaaaaagctataatgtaaggaatatgcatttgaagaattaatactaatatacgctacagttcggttcatcacctgctattggtgtttgtgacagaattgcaaattattggccagttgacgatggaaatggcaaaactgtgaatattactgtgatggacggagtctgtttgaagaattgtgagttctctaatatactgtgttcgggtaatttgtctgactattttactaaaacttccagcaaaatgcccgtgcccgtcattggaactgagcagttcaactgcaagatattatcttagacaggacacacccgtcctacagtacaataccactccagcaatcacaacactatctgccgagggatgccagtacatgcgtagttgttcggatggtggagagcctttgacttattacatcccatacgatgcatcaaatactgcgccgaactatgagttgccgcgccttatagaagtttgtagcatttattatttgcttactcttaactgtaaactaatcaggggtctatacccgggggatcaacttgcaatccggcaacaggagtatggactctgcgggaaggttctactgtcattgaaactgagttctttgctccaatgtgcttgtaccgtcgtaagtgtttcctgcaataatatgcttgctaacgttgaaattttgcagacttaccaattagaccaattggttaacttttttgttgtgatttgaataataaatcaattcatttttacaagtgaatatctaacaaaatatgctatcttgtacagaagattattttaaaaatgtagacaatgcacctaaaactgtttttttttcaaaaatccaaaagtactgcaaaatcatatggagtcattcttttttattttataaaactgttcagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaatataccagaaaatactaaacaaagtatgatagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaatataccagaaaatactaaacaaagtatgatagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagagtttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcaaatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcaaatggagtcattcttttttattttataaaactgtttagcatgacgaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcaaatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcaaatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcaaatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaaatttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcgaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagagtttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcaaatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcaaatggagtcattcttttttattttataaaactgtttagcagtctcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaatataccagaaaatactaaacaaagtatgatagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaaatttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcgaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgtaaaatttaacaaaaagctgtatttttcaaaaattcaaaagtagggcaaaatcatatggagtcattcttttttattttataaaactgttcagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaaccaaaagctgtatttttcaaaaattcaaaagtactgcaaaatcatatggagcgattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcaaatggagtcattcttttttattttataaaactgtttagcagtctcaaatataccagaaattaccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaatataccagaaaatactaaacaaagtatgatagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtactgcaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaaagcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgctagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaataaaccagaaaatactaaacaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaataaaccagaaaatactaaacaaagtatgatagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcagtgtcaaatataccagaaaatactaaacaaagtatgatagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcatttttattttataaaactgtttagcatgacgaaatataccagaaaataccagaaaaagtatgttagcttgtacggaaatttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaataaaccagaaaatactaaacaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaaccaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgttgaatttaataaaaagctgtatttttcataaattcaaaagtaatgcaaaatcatatggagtcattcatttttattttataaaactgtttagcatgacgaaatataccagaaaataccagaaaaagtatgttagcttgtacggaaatttattttaaaaaatgcagaatttaaccaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaataaaccagaaaatactaaacaaagtatgatagcttgtacggaagtttattttaaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgttgaatttaataaaaagctgtatttttcaaaaattcaaaagtacctgaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaataaaccagaaaatactaaacaaagtatgttagcttgtacggaagttcattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtactgcaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgttgaatttaataaaaagctgtatttttcaaaaattcaaaagtactgcaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaataaaccagagaatactaaacaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtactgcaaaatcatatggagtcattcttttttattttataaaactgtttagcagtgtcaaataaaccagaaaatactaaacaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaataaaaagctgtatttttcaaaaattcaaaagtactgcaaaatcatatggagtcattcttttttattttataaaactgttcagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgtaaaatttaacaaaaagctgtatttttcaaaaattcaaaagtagggcaaaatcatatggagtcattcttttttattttataaaactgttcagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaaccaaaagctgtatttttcaaaaattcaaaagtactgcaaaatcatatggagcgattcttttttattttataaaactgtttagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgtaaaatttaacaaaaagctgtatttttcaaaaattcaaaagtagggcaaaatcatatggagtcattcttttttattttataaaactgttcagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgtaaaatttaacaaaaagctgtatttttcaaaaattcaaaagtagggcaaaatcatatggagtcattcttttttattttataaaactgttcagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgcagaatttaaccaaaagctgtatttttcaaaaattcaaaagtactgcaaaatcatatggagtcattcttttttattttataaaactgttcagcagtgtcaaatataccagaaaataccagaaaaagtatgttagcttgtacggaagtttattttaaaaaatgtaaaatttaacaaaaagctgtatttttcaaaaattcagaagtagggcaaaatcatatggagcgattcttttttatttcataaaattgttcagtatagtcaaaaataaaaatggcttaacttgagctaaaatctccaattttggtcaattttttgtgttgcagcgatcttgcatagtttatcctactcagtttatcttactcatttcgtttattaagatgaatttaagtaaccataattcatcgaaattgagcacattttgacatttcgttattttttgtttccgaaccccattttttccatttactcctgctcagctcgctagctcactcgaaatacacactctgttccgtcacaaatatctaaagcacgggggatccgtctgaccacctgtcgtctcctcccgtctatccgttgctcccttccctcctcattctgtttccaagactgcctacggattggcggtccactacttttttattgattttactttaactagcttaattgagtctattctactatttttcgagatgtagaggtaagtgtgaaaaaatagaccaaaatgaccgactacaactttgaaaaaaaattttctaaattttctaaatttttaatgattttttcaatttttcaaaagtcaaagaaactgccgaattaaattcgaattcccgcgcaaatgggtgttgtcatttttcataattttgcgtttactggcttaatttgtcgatttttcagacatttttccgtgaataaaatttgataaaccgaaagaaattttcggaaaatttcaaaattagcctaaaaatcgacaatttaacagttattaacaagttttttctccggaaaagtgcccaaaaaatttagccagaaaacgcactcacttgcgcgggagttcaaatttattgtgggcgttttttttttgatttttgaaaaattgaaaaaatcattgaaaatttaattttgtttttctattttttgtctattttctgtcatttaaagcaattttttctgactctactccacttttaaaataaatttccagatgctctatgatgctctgctttggagatctagcttaatgctaacctcccaatcaccttaaaaactcaacgattaaaccagacaggtttgtttaaccgatttctttcaaaacaatttgaaataatttttgtttagcaatatttggcggaaaaggccgatagaagaaaccctaatgtcattcgaatgtgccataactgccgtgccgtattgcgtccttctcgagcaacttcagcaacttttttgcaaaatctgccgggttcgaaaaatccacactgccttttcatttcaaagacacccaatcgattttgctgctgcaaaattatataaattctttgttaaataaaattttttttttctcttttttcagctacaggttataactgtatttaaaatttaattcagataaaattagttttcaggcaattttacaagttatattgagtcatcaaaatgaaaaaaatttgataaactattgaaaattatttttaaaactgttttaaaaacttttttttttaattttcaggaatatcgagacccttttcaaccaaatttggggttttttcagtctctttttgagattttcttaatttttttcaattttcagtatgaaattcagtggttcaaagctgttctgaatgctttaagcacagttcatataattaatttgttctaactacgttaaaaaatcaaaaaaaaatcgaaaaaaatccaatttcaatattgctgaaactttgtaaaatcaataaattcatatgttatccatatcaaaaaccagtttaaaatctctgatttttactgagaatttcaaaagattgaagtaaacttcagttgaaaacaatagttttacatatgcaaactgttatatttcaaagaagaaacatataattttgttaaaaaaatatcaaaaacctttccaaaaactttactttcagaaaatatattttaaatacttgtcagttttcaccagagatttttttttggaagtcaaaaatttcagcctaaaatctgtttaaaaaggtacttgtgtattatacccccgccattttaaaaattaaacaaatttccattaaattattcacttaaaggtggagtagcgccagtggggcaactgttaaaaaccacttctttggttccaaaatgaccaaatatcataatgaaacttttcaaaagatttttgaaaattttttatttacagtcaaaaagtgtcaattactcactttgctttttgccactaataattttaaaagtcgaccaaaaaaaattttttttcgagattttttatgttttaatcttgtttaaataatttgtattaaaacattataggggtcgaaacatgcaacatttctttaaatttcctcaaaagctcgtatatttcaaaattgttgcaatttgccaaaactttgaccgaaaattataaataatctataattttttggagcgttttattatgatattcggttgttttggatcattataagtgcatttagacaaaatcctcactggcgctactccacctttaaacacatttataacgccagaaatgtattaaaatacatgtttgtgcaggttttctacactttcaaattttccgacactacttgaataatcccatttcactgatattacaccgtagcccagaatacatggatttcattattccctgacacatatgctcgccagctgctctcttttacgagtttacaatactcattcctctaccttctcttctatagtgctctttttgctcctcattctgcctactagactacttactgaatggtggtcctttttttttatttaatttatacttttttcgaaatattctgtactttttttgcaatgtgcaaaggtaagtgtaagatttttttttgaaaattgtttaacctatcaaatttcctaattttaatttgtataacagcaaatatcattttttacacgctgtagatgagtacccctaggcaaaactggcgtaactttagaacctgattagctacaagaattttaaacatattttctgaaagtattatttatggtaaagtttttgatattttttcaacaaaattaaataatttttcttcgagatataacagtttgtatatttaaaacgactactttcaactgaaaaacgcaaagttaccttaatttttttgtaagttctcagtaacaattgtagattttaatgcgtgtttcctatggaacacctgaaagttaacttattttaacaagtttcattaaaattggaattaaacttttttttttgagaaaattttttttaaagaaaactttttttaaagaaaattgaccaaaaaattgttttcttccgaatttgttcaaatgtgtcgaattaatttatctggcgtgattgtaacaaactatttacaaatattaaacttaaagcatgctagatgattcgaaaaaccaaaaataaaacccatgaaattcagtactataataactcaaaaattcttgaaaaaagtttaaaatttccgaataaaactctacatatatccacctatgtttctaattgcaccaaaaaaaggtgttattttgtgctcttctaaatgaattgcagtgtgtacgtggtgtcacttttagcgttgatttttaaaattgttcaaaaatgactaatttttgtgaaattgatattttatacagtcgcgacagaatgatcgctccgccaattttgcatgcggcaaaggggcgtggtttagttggaggcggagcgtcaacgcaagcctgcggcacactttttctcgttttttcgtgcggtaatttgcagttatttttattcgttttctgttcgaaatgtcacgatttcgctcgattttgtaggggaaaatgtgaagagaaagcgattttttaacgttttgcatcgtattttacagaaagacagacaaacgaagcattttttcgagtaaaaactgtgaaaacttgattatttctcattaaaaaaatagttgaagacttttttatccgaaaaaacgaacaaaatcgagcgaaatcgtgaaatttcgaacagaaaacgaataaaaataactgcaaagtcctactaggcacgtggtgtcaggctgtctcattacagtttgatctacaaaaatgcgggcatatttttccagaaaagttgtgacgtcagcacgctcttaaccatgcgaaatcagatgagatgtctgcgtctcttctcccgcgtttttcgaagatcaaatcgaaataagacattctgactccccgtgactaggccaaatgtcaattaacggaaaattataaaacatttcacgaaaatcgacgttttttttacgtatttatatacattttgcaggttatgttgctctcccgctttcttgatgtattggccccaggatggcaagagggcaacgacacggtgaccatcaacgctgctttggatgagttcggacttatagaggtccgactctcccacaccgggcgcgtggtgtgaggggagctggccattgccccggtgaagtgagtttttctcgtgttgtttcgttttgtaatttgttttttcacagcgctcgggcatcggcccaccccggctccgtaccaacctagctgggcactacttctggcgatatggcatccggctgcggaccccaacctggtatatgtccgcggggacgaggcccatatgttcccatcagaacttatggatattatttaatgcaagtgattttttttgcaaaatgccactttcgtaaggattgaagaggcgattatgttccaattgaaccacgaaaaatttctattgcgctggattcgagaaagttcgctgttataattataaaaattttatttgaatttgttaaaagttgcaattatatttgaataaacattgtaaaatattatttaaataaaatatggtactagtcctaaatcaccccgccacttttccttacattttcttcgataaaaacgtggcctttttccgtatgttaggcttagtaatgttgttttctaatggggttattcaagtagtgtcggaaaattaaaaagtgtagaaaaattacgtcacgactgtattcaagtatataaaaaaatgtatttaaatacatttgtgacgtcacaaatgtattaaaatacattttgctacattacttgaataaccccataagcctaaaaatgaaaatagtattaaaataaacattcacgtgtgagttaattttgaatgaggggtagaaaaggaaaagtggcggggtgatttaggactagtacctaaaatattatttaaacaagagaataaacaccaaatgggtagcggtagagaaagagagttcagaaactgggttctttttttaaagattagcaaagtttttgcggacgcgctcaacgtctgctccacgattcgattctgcaaagagttggtgatgtagcgctcgtgtagtattttacggagctgaaaatatattttgtaaacttttgaatacaaatttttttaaaacttaccgtcttattatttttatttattaacattatttgactgattttcttcattttctatgttttttcctcggaaaatggaagaaataaacaagaaaaatgcaacattttttgttaaaaagtaattgaaaatgagtaaaactgtaaaatatactaatttcaggcttattgccgtcggaactcaaaatatcacaattttgctcattttcaattactttttaacaaaaattttgcatttttcttgtttatttcttccattttccgaggaaaaaacatagagaatgaagaaaataagtgaaataatgttaataaataaaaataataaataaaaataatgcaagcacgctccaccaaacaaatccaattggcggaaattcaaataggaattaggtgaaaactgtgatttttccaattttcaaaaaatcatataaaatctagaaaattgttttgaatttttttatcatgacattcggttattgtgaccccataagcgtgttttaaagcaattttcccattgagcgtagtccacctttaaccaattttaatatgataacatttgtcgaattgaaacaccctgaacggttcttctaaccccgtaaatcatataatttatttttgtatcaaaacagaacgaggcagttaaattgagggtggaaagtaaacaccggagtagtataagctgaaagttcactaccatagcgtctttttgctaccaacctgttatgatcgattatgaccggatgctagcaaaagtgcaaaagtggggcgcgctaatggttattttttgaatgtaataatttgttttttttttcagcggtggtgctctgcgagtactgtcgggccggcattcgacgcttccagcccgtttcagaggccccagatgcccaagccctatgatggcacaagcacagaaccgcaccatatgtctacaacacctcacctaccctaattattttaatgctttttttttaattattttttgaataaaccaaaaaccatacattatttactgatctgttagcgcgcccccacttttgctaccaactggtatggctgaaattccgctacagtacttttgctagcatcctgtcgtaatcgatcataagcaaaaagacgctgtggtagtgaactttcagcttatactacacaccggaattatagggaagatcctttttacatcgcattaaacgctttttcaatcacaaatctcaatcgaagtctcatcaattgattcatcacatcatcagtcagtacaagaaattcattgctcagttgggtcaattgcatcccgtattcttgaattgcaatatcattatttttgttaacttctgtcggtaggtgattgcaaatcgattttatcgtgctattatgaatcagagtgctcatgcggttagtcatgttctgcaattagttagttaatgaaataatatacgatactgtgatacttacaatagagtcctcgaagagatcggggttaatgcgatctgcagtgacggcggtgtcgtcaaacttcttgcgactgtcggtgaaggactcgatctgatttttcacattgtttacacacaccttcagttcgtgaacattcacatctgcaacttctccattccagaggatacactgcaaattagtttaaattgtttaaaggtggagtaccgaaatctgggaaatttagcggtttgagaaatgccttgagtaaggctaagcctaatcctccgtataggcctaagcctgagcctgagacttagcctaatcctaagacttagccaaagcctaatattttacagatttcggtactccaccttcaatctgagtagttcaaagtacttttgtcaaaatttcatgtgcacttacttttgctctgatatcatccaaataatgtccaacagcaatcccttgcctaatacatctatacagagaatagaacaccaatctggcacacttcagctcctcgagcaacatttttgcactactttccatagtttcctcatacagctcgtttagcgcaacttccaataggatttttgtttctttggctaagtttccatactcgcgaacatgtttctgatcggcatcgtgtacaacattatccagatgaatgcacaatgtgttgaatgttatatcgttaagaatagtgccgatttttctgacaaaattctaaaaaatacttatatgtatggaaatccactttaaagtaacaaaaatgaaggaaatcacttttcaacggtaaaattttcccacgctcacgaaaaacgcacaaacccctttgttgggtcatttccacgtgaggagactgtggtgtgtaaaacacgtgtaatatatgtacaaaagccttacagattgagcatggtctccagccttcccatcgacgaacctattgatatgatctagtagctctgctctaccattactcagagacctcacatcaccctcgtgagctccgggattgacacctggatctccaatcatcgggttacactgcaatattttatttcttttttatgtattaaagatggagtagcgccagtggggaaattgctttaaaacatgcctatggtaccacaatgaccaaatatcatagtaaaaaaattaaaaaatttttctaaattttatatgattttttgaaaattgaaaaatctcgaattgcatcaaattcctattttaattaccgccaatagttcgatgttcgttggagcgcgcttgcattattttaacttttatttatcaattttttttatttttgattgatttttcaagtttttttttttgagtaattttactggaaatttaatgaaaaattcaagataaatgtagattgttcactaaaaaaattgaaaacagagatagcacgtttttcaacgacgttgagtctgaaataaactatttcaaagatttaggctctagcgcccgctttttaataaaaaaattacatttatcttgaatttttcattaaatttccagtaaaattaatcaaaaaaaagaaaaattgataaataaaagttaaaataatgcaagcgcgctccaacgaacatcgaactattggaggtaattaaaataggaatttgatgcaattcgaaattttttcaattttcaaaaaatcatataaaatttagaaaagtttttaaaaaattttttactatgatatttggtcattgtggtaccataggcatgttttaacgcaatttccccactgacgctactccacctttaaaaaataaaattctcaccaaaatgcaaattctcaacaagctctgtaccattagttgaactttgcgtttgatttccggaaattcgggaggcaaacctgaagcatccatggaaccctgttcagaaaaagcattagttttaggtaggcagtacaagaaaatagaagatatgatacgctgatagagcaacagttgaaaaattcaagaaacaaatttcaaaaaatatataaaaacaaatttttttagcatgaggagaaatgttttaaaaaaatccacaaattatacggttaagtgtacgtctgctaccaaattctgtaactttaaaatttttagaaacagctgaactaaacatgtgttatctggacgccccataacgtgttagcaacatattgttatcagtcagtaattctttaaagtcggaatacttgaatcagtcaacgaaagagcctctagctcagtcttcacatcatccttcaatgcttcagaaaactcggcggacatcttatttgccgactccagataagaatccatcttttctaaatccttattgtcgattgcatttgcaaagtgatattgcaaagatctcaattcgaatttgttcattagctggtccaatttgattaggaacatctgaaaactaacttgctctttcgcgcttgaatttaaaaaaaagaagctcaccgagcaagctcgaaaagcatctgggtggatattgtcggcgttgagcagagcttcatcaaaaatgtccatttgtttggcaaactgttctcttatgaagataattttggtgacggtggatttcagctgtttggcagtttcgagagaaagggtttgacgccacagagctccctgaaacagtagagtgagctagagaatgttcataaaatagtgttatcactgcaaaatgacagtttacccgataacaaagtttgagaagtctaggcataggcttaggcttaggcttaggctgtaagagatattcccagcaatccctgattatccaaagcaaaaaaggcgacaaaaaattcattaataacggccgaaaaatgtcttaaaattaaaaaagaaaaagaaaaatagtgtgaaaaagtttgacatatctggaaactgtaccttaataccttttcatcattagtcagaatttttactggtcagaggtctttttggctttttcatagcagaataggaaataatggcatttgcataagttttttctttggaaaattaccgaaactgatagacactaatattggtcaataagattataagcataaaaaaccaggataatttactttttcgaaaataaaatttttttgtagtatcatctaaagtttcatgtggaaatatttggttcagttaagtgacaaaggtactagaaaaaattgttaagtaaaaagcacgaccgtctttaaaaaaaaagatattgatattatccatcaagatgcatttaaaaatttaaatgtgaagtaataaattatgtcctaaagttaaaaaaaaaaactatagccccgcctacacccagtaacacctacaccgcccacttcccacaatagataacaagacaaaaatctggaatcatttttgccaactgataagagtgaacttttttctcaggaactcgtttttcactttaatacttagtcagtgttactatataaaggatgcatagcaatgttcagaataaatgacttacgtattgtaggatggtaatcagcgtcatcctcatcgcgttaaccggctctatcattctcttgaatcggctcagaacatatcccggcagggcaccagttgagccagctttcttgtcttctacgatagagtcactgaaaaaaggaatttaaatatgtttagctccatttgaagtagggatatacataccttctaacacgacacattgccacctcttcattttccttttgaagatgtggctcggaaaaatcacttctgctagatagcaagaagaaatattatattaggaactgagaaacacgaaatgaggaaataaggaaaagaggaatttggaatcacagattttgttgattcatcaaaaggaaacaacaaaaactacctgctcggggaattagatcattccgtagtcaatcaattcagtttttatactaattttatttatcaacagcaagacatatgtattagaaagcactatatacatgtcatcgttctaaaatacgaggtcgctatcatttcatcgtcatattggagttgtttcttatgattccttattattttggaacacctttattttctagaaaaaaaaataactttttagaaaagtcggttttttcaatgcatgttttgtaaaattttaaccaggaaataccaaacaaagtaggttagtttttacggttgtttttttttgcacgtgacgtcagatatttctatagcacagggagtccgtttgaccacctgtcgtctcctttcgtcacctatccgttgctcccttccctcctcattctgcctcccagactgcctacggaatggtggtccactacttttttattgatatttttatctagcttaattcagtttattctattacttttttcgagatgctaaagtaagtgtaaaaaaaacaaaatttcaattagaaaacattttaaatttccagattatctctgttaaggccgacaggtttgtttaaccgctttcaaaacaataagataagataatttttgttcagcaatatatggcggaaaaagccagtagaagaaacctcgatatcgccgtgtgccaaatgtgccataattgccgtgccgcaggtttttgaaaaaattctcgtttttaaacaataatattttcagaatctgtcgtttatctccgggacttggcccgcatttgccgaataaccttctccggatttcagagataaagaacagaagaggtaaagttactaacctcagcaacaagaaacttttaccctaggacggaatacagtgaatttctctccgaaaaactgcgttaattttccagttttacaatttttcagacttaccagctgaaaacctgtgcttaaaagtttctatcatgcgggcacacaatctgttatttattttgttgtttttgaataaatattttttgaagctgcatgttttttcatcaaaaaaaaaatcagcattgtgttggcaaattaagttagaaaccttccatatggcaggactcatttcgaaaaggtgtccagaccaatttgagcccattttcagcccaggaagcttgaatgatggctagtacgagcagaggcagtgaaataaaatttttgaacatattttctacataaaataaaatttattgaagagtttttgatatttttcaacaaaattttattcatttgaaactaaactttcaagtaattacgaaaaaccggataaaaactcattttacaaacttaaatttggctttttaaaaatttaacttttttttcgtcagagtttgtctaattttgttgaattaatttattttattgtaacaagttgatcttaaaaacagtgatgaaaaagtgatagataatcaaaaatatggacaacaaaattgggaaattaatgaataattggaaggaaggagcgggggcattcacattttccgacgaaattcaaatacaaaaaggtttgggctcaatttttcaactagcatcttttattttgattgcatgttgaattggcaaatgagaaatgcagatttggaattcacgaagatgaaacaactgctctatttgattactgagaggtgatgtactcagtattatgcattcttttgcatttttccattgatccaactcttcgattcgttcaaatcgattcactgcagtagttttgaacaatgtaatattgtttagcacttgacaaatgaaaatcggaagtatcgataaaataccatcaaatgaaaaaccaacaagatataacattcttacattcacacatttgctttctttcagagtttttcgaaaagttgtaatgaatccttgttgggcatctgcgtcaatagttaaaaacaatgttgatacatgattcattacagtctccaaatcttttattgcaatttctaaataagttttcccttcaaatgtgctttttttctttctaccaacaacaaccgcatcattattttcttcggaatataaaataacttcttctcccaaactcaaaaaaaccattgtttcgataatggcaaccatgaccttgtcaaaatgcataccaaacttgacaactgcggttctcaaacttgaacacactttacgacaagccagtctaaaagaaaagtagtccactaatatttatattaaagccatttaaaagttcaactaaaccagctcaccgatcctttggctccaatttttcaaatacttgattgaggatttcagtaggcatgtcagaaagagttggggatattggagccaatctgaaattatttaccgggtttcctcttgcaggcaagactatttctcaattgagctgtagtgttgaaagactagtaaactctaaggtttatagaaacgcaaaagaatttatataattgctaccatatgttgaaactgacttaccctctcataaaccggcaaaaattaatttcaaaccatttgtcaagcaccaatccccgcgttttggtcaacgcacgttgattgtctcggttggcagtatcagacatgttttggtagttaacttgaaaattcttaaattggaaaggaaaaaatatataagatgagaataaaaaaaggtaaggcagagtaaaattccttaaatcaactccgttaatatgtgagttcctatcagctttggcgttttcacatgactctaaatgctctttcgctaatcttaagttcttatttgtcatttagcgtttggtagtttagtgaacaagtgtttacgctttttgttgatattgtcattttcagatacagtacaaaattgttatatccctcatttttgacggttcgtatacatggtgaacttgacagttttgacaaagctcgaacaaaatctaaccaaaatgttaaaagcgtctaaataagcatatttagaagatatttaaaatgatcttattgttagaggtgtaaaaatgtggaaaatcgaaagataaaaagaaacaaaattcatcagaggaacttgaaccgcagtagaactttcaaaaatttcacgcgggtcattcaacttctacattttctgaggtaatttggaaatggcttttacctctcaaaaaaatagggtcatatagtacagtgcacacaactgctataggacccactgaatctgaggtgtaatttttaaaaaattattaagatttttcgacttttttctcttttattccaaatttcgaaatgtcagattcgaaattttgttacagaggttttttcatatgatgcatcatatgtatattaatatcaattctctaataaacgttgagaaaaatcctacaaaccttgaatttagaggtagtattgcagttttgtgtctcgaaactctaaccgctaatcgaccaaaccgatgttatttcaacatttctttgggtcaactgtcaaatttgtttgaatgatcaaattttcaagtgataagcaattgcagtttgcaccatcgtataacacaactgataaagcacacaatttcccaaaatttcactccactttcctgtctttttttcttcctcccatgggcttcacataatatgtatatataatttatatagtttttcgttttgtttcgtatacattggtttttgtagatattgacaatggccactattttacttttttaaatttacataaacataggaaataataaattggttttacgggctttgggtaatctacagagtgtttaacttttttagttgagtagttttcttatattctaatccaacgttagtttcaactcatttattcaatgctccatgctatgatataacttcacacagctacgtatataacaacactttttccaactaatttttcaccactaacttgttagaaattttaatgtaacgtttgtttcagtatatatatatatatatatatatatatattcaaccaaaatattttgttttagtatcatactagattttttgacagttcagttgcgtcttccgtcccgcgacttgcgactcgcgattcccaactacgcagaccatggttgcttctcctgataactatttgttttattggcactatatggtttggctatgaagaacgacatttgaaatttccccaatttaactgttagcaatatgattaaaaactcatcctccaaaaattgatacgtcacgagtgtttactagtatggaacattctgaatgtattaataatgctctcaaagtgataaaaacagacgttcgaacgttcgaattgaaatagtctttctaaccgtttgaaaagagttaaacaggtgttcgaaactacaaaaacactccgaacaacacaaccagaagacagcctttctacagacagtttaaacatgtgattctacggacttcaaaaattgcagcaagtaagtgagtattctccaaaaaaatttctagaaaaccgagtttatttaaagattaattttcgtggaattgacgataatgggataggatatgtgagaataatttaatgcgtgaggtacgaagttgaaagatttaaacagcaaaattaaagaaaataagcaagttggtgacactggccgtttgcacatgaactaacgtttattatacattcgccaaatacacacggctcgtgacacctaaaagaaggagtatcgtcaatgggggctttagaatttgtgctcagattttaattattgcgaaagaaaaaaaaacgggaaaaatccgttaccgctcatcatttttagtatacttatgtactgagtatgatactgagtactgagtatgaattttaataaccgttcttgaaaatttacccgtcccagttttctaaaactttttaaaaggaaacatggtacaaatttcgaaatttaaaaaattgaaaggtctagaattttttaatttaaatttcgcgcgaaattaaaattcagccagttttgtcgatttcaaacgcctgaatactaacggatttttctagattttcatttgcaataactgaaagcttgagcacctgggctgcgcagcagtgctgtgcggctcttggaaaaagttggctctcggctcgcgccgagggccgagttccactaaaagtttcggctctcggcttgcgccgagagccgagggctgattgctttatatttcggtatcgattttcgcacgctccctccgataatgaataaaaattataattacaactacgactttacaactattaaaataaatagtttcgctgctaacaataaggaattgagtacttttccgatttctgcccccaaaaacattgtatgtcatgtagggggttgtaaagatatactcaaaagggttcccacaggaaaggataaccataatagataccccaataacagatctaatatttgattatatgggtcattgggctgtaaatatgtgtctctttatggggtaggtggcgatgtgttgccagctaacattaacgtgtattaataagaattagactatgtaataagaattagactatgatagttatgagagagaatataagaggaaggtgcgaggattccgaaaccaatcggcgtgagccgaaaaacagaaaaaaaaatttgtcggctctcggctcgcgccgagagccgagctctattttccggttcggctctcggcttacgccgagagccgagtttaaatttttttcggctctcggcttgtgccgagagccgaaaaatacccaaattgtcggctctcggctcgcgccgagagtcgagagccgcacagcactgctgcgcagagattggtaagtcggctggtagagcgaatgtaaactttgtagtgtgccataaactagttattgaaaaaaaaatattcgaaaaaatctacccacacgttcaaaaaatatgtaaaaacaagagacatattttatctaaaccgcacgtaatgtcaggctgtctcattacagcttgatctacaaaaaatgcgggaattttttcccagaaaaattgtgaggtcaacacgctcttaaccatgcaaaatcagatgagatgtctgcgcatttttcaactcccgcatttttcgaagatcaaaccgaaatagggcagtcagaagactctaatactgtgaaaagtttacttttgctctctaccagccgactagccagccgctcatcccttctattgacgatactacatagtcccctaaatctaaacatgctcattcatcatagtattaggctttacgacgtgctccagtttcatatttttcagctcttttccaatgtttattctcaatgcagaaaaatccttgtagagcacttttgtcatattcccaaaacgtaggatcacgtcgttgttttgatcaaaaatcgcattggacaggttattgcaaattaatttaatttcccgttcagtgatgagatgttccattttggacgcgataccctgcaactttcacttaaaaaaaaaaatatatatatacatatatataactaattttagctgataattatacagctgacagaaaataaaaataggaggaactatttttatttgcattctacaatgtctttttgttcccttaatcaatatttttacacaaaaacctacagaacatgaattaaatagttccggcgacaagtaatccacaaaacaattgaaatcgttcaggatcatctcgaaatgctcgacttcaacttgaattgcttgaaaatttgtatccagctccccaactgcaacacgtggagtttccccgtaaaacgagcaacactgtaagtatttgatttgagtttttttttcttgaaaaaaagaacattacatacatggcttgaaattgtatcaagatgatttctgatcacattgaatgagttcagtaatggacgtaacttctcaaagacggtccttgcattttcaattctgagccgagatttatttatctgaagagtgctctcgagtcgtttcttagcctcattttcaaacagcaaattctctttctcataatcattttgcagctctgtgatctgctgcaacaaggtgctcgccagctgaccgtatcgacaaatttcatcctcgtcggctctgatcaagacgttttccaatgtcaggcagatggtccttaatggttgcccttgaagaattacattgagctttgatatgaagctctggaatttaaggaggcggcatactattttacgaaactctaatttatggcttaccaatttcactcggctcacgttactatcatttgcggccatcatccggagcccgtcgatttgctcacgaagcttcactcggaaggcgttcaaattggcaatgtttgtggcacacaattttgaattcggcccgccaattagaggattaagctgttaaatattaattcactgtgaacattttttttaaaaatcaatatcctatctatttttccctttactcaccaacgtgtttatactctgcaagatatttacgattccttccacactttcgataactgcatggaactgtgaagatacatctctacacaacatgagatgaagataatctgtaattgtgaagttttataacgaattttcaaaaaaaaatataacggtttcatccgaaatactcaagatcttagttgtaacctggatttacaaggtgaaggaaataaaaccaaaagtttcggaatatatgagaaaattgattcgagtattgacttttttctctccctttctagtgtctctcgttgcaatcaattttattcggagcaatgaggaaaggcgagaaagatgcttccagatgtcatagggtgtgtcaccgcagggtggtaggtgtcccgacgagtcaggtatactttctaggtaaacctgataagacaagtcgagatgaacacatcttactacgtctgagcttctgaccggttttgtatgtgtgtttttaatcacaggtagttaattcgtggtagccattttggggcacaagtcaaataaaaatttctcaacaacttattaaatattgttttaacttgcactgacattcactgaagttactgaatgctttatttatttaaattttattgagttgtgttattcaattcaccatgtaacgataaatggatttgctggagtcatgtaatacaaatcaccgagattttcggcaaccagcaattgctgaattggccaaaccctaaaaatttcggcaaccggcaatcaggtttgaaagttttttaggttgaaattatattcatgaacgttttggaaaaaaacgtattgttgtatttttcgtttacattaaaacgatagcatttttcaggctttctgcatgcttttttctgagctacaaaatgttttctctgatatcgacagttaccaaaatgttttcaaattttaatcatgcagattttaggttttagtcaagaaaaagtttttaaaaatttgcaattgtattgcacgtaaaatacaaatatatacagtgcctccaacttctataggacccccctgaattttgatggtttgagacttcctgaacatttccatgaaaaactgccaataccattcgattttaaatgccaaaaaacctataccggtataattttatgatgatagctcaaaaactgcgcgcgcgcgggctgaaagtcgaaaaaacggccgtccaacttctataagacccccaagttttaataataataataataatttattttacatacaaatgaagtgatattgggtaaacaggatcgtgatggatttaagaaaaaattacatgacacgggtggagcaataaaaagggttgctatttacaacagaatgaggggagattaagaggtcagtcaaatcatcagtcataatcatcagtcataatcataatcatagttcttgctctcgtttttttgaaattttatcgaaaaaagcattgaaattttgaaaacttatcaaaatatttttttgagatgatttcataaaaattaccaaaacatctcaatcgcttataaaaaactaaaatatttcacgtgaaagtgttgggaagcaacctggaccgtcctgtaccacttttcagtgcttctgagcccagtacttggctcccagtgattcttatctcacgaaacgtttggaacatgttagtgtatatccaaagattgttcctgtgaaatttggtctaatttggaacacgttcagatgttttattgcaaaaataattcaatggcaccggtagatgagacatttttaaccaaaaagtttggcttacaaactatgataaattaaaaaaaacaaaaaataatacgacaatatcttactattaggataaattttccaaagtgagaaccctattttctgtcatcgacttttatatacatatgctcctagaactgttatcagttatggtatccattctgggtgataaactttgatgacgattgtacagccgactgaaatgtatcaccttgtagaagtgttgataagcaactacttctcttcaattttctgcgtttccataactctctatttgaaaaatcaaaaaatgtggtgcgaatactcaagtgacgtattagttttagtcgaaacaaatttaacatgattgtttcattaaaacatcaataacttatctgaaactttgaaatagttccctacaacacagtcaaactagtcttgcatgaagaccttggtggaaaatacggcatatgtatgtaaacaacacgttaaagatctttatttaagaccatattaggtaagttttcagataaaaagtcggtaattgtttacaaaaaaaaacaaaaagatattcttcattatacattaaaatccgaacaaatatcagccatttcctgtaaatcgagatgaaagtttctcagatcatccttgtacagctccactctctcggcatcgttattgctacaagctatttggtaatgaacgcacaaagatcggagattcgagtagttaacaagttctcccattttgagaacttggtcctgtaatttaaataaatgtttactgaatcaataaattgtacataccgataacttttcaaatatatccgcatcaatgtagctagatcttatcataaaactttcaaagtactcagtttcttcctcaaattgttgaatttggcgttctatgctatcggagaacaactcatccgaaataccattttccactgcattgtccacgtccttctcaatttcacgcagtaaacggaccatttttgaaaataacctcatagcttcgtttctgttcttgagctttagaaaagcaatgtagtttttcctcttattctctaatttgtgaattttcaagttgtgttcctgctccaaatgttccctgttaaaattacaaagtatggttttactttaagggtagcaataaatacttcacaattggactggtaagactatttgtaaaatatccaatagtgttgataataatgagctatattcaaaagcaacgcgtaaaaggtgagctgttttaggaataatctaacaatatattcgaattgttcagtaagtgtgcaagatctgttaggcggactttggttagaccagggagtggtgaactatgcatatttgtgaaaaaacgcaagttccaaatctgttttacctggcactggcctgtaagtttgaaggccgtatatgtcaaatagcacgccgtctataaaaacactaacctttcatcctcaaaattttttagcatttcctcttcccttgttttctggaatgctccatttttgtttgaatataacttcctgtttccgggctaaaagttgaaactgtaagtattattatatattctcaaaataaaatataccttaaactcataatattcaggttccatgtagttaaggtttgactgctctggtctagcaaaatcgccttgcctctccataaaaaactgtctgaagggtgaaaagcattatttagacttttgagacttatgggttttacatttcttttccttccgaaaatgttcttctcagcaggttgctttgttgagctgaaaacttaattttacaattttgacttggtcaaaggaacaaaccactgatagacttttcactagaaaactttgatgaaaaattcatttttggcgaggtggttctgtaagttaaatttggaaaaaacgaggcactaaattccaaaaaacggacgtgtgtgagagttactagtacttttatgctcaagaagtttcgttagaaaatttcataactgaaacgttttgtttcgaaaatgaacattgaggaggtcgcaagtaagtttcaaaagttcatgctagttgtctataaaatgtactaaaaataaagacagagcaaccaactgggagtattatgaaaggtctataattatgtagtaatgtattgaatcaatgtcactacatgacgggtgctcactgctttgttttgataatggtaagaaaatgaatcacacttgtatgtgtgttttagactacgaatctgcaaacttattagttgacggaatttctccaagttctacctttccgtggctaccggaggacagtgcgttggcttctggctcgcgttatgcatgatctaccagtgagaacactttgggaactaacaactaatttagaaaggaacgaaacaatcctttcaagttgtaagacattcaaaaatgtcttgagcaaaaatttttcggaaattcatgggaaaatgcgaaaatctggacccaaaaaatatcagcggccgacatctcacgagttttgcaccccgttgcgtttaccgtgacagtgcggcacgccgtcagcaacgtaagacgatgagggcgtagtaactgtcacggtaaacacagcaagccgcgaaactcgtgagatgtcggcggataatatgttgggtcccgatttttgcattttccggggattttccaaaaaagtatacttcaaagaataattgtttaaactgtaccccactagagggactagacctttaagcagtcctagtttattgtcttaaattatagtactcggtactattactaagaatataaaagaaaacgtcacgaccagaagtcatggaaaatttttaaatcccctatttttcacacatgagaattttgaagcaatatatgaacatccgaaaagagtagaaaaatgacgtaggtgcaggaaactttttcaagtgataacaacccttttaaggaaaatgaaatgtgtagataacataattttttttctttttttctcctttttgctccactttatcgtcgtctctctcgtttttgttccgcacagcaacctagggcacgaatttttaaccaatgagaatcctgaagtgtgcagtggggcgcgcttgcattctgaatcaaaagtgaaactttgaaagtgtttttcctgtttttcatcgatatttttgggagaataaggaaatatttatcagaaaaacacattccagtagattttttgaatatatggttgcagtttttagttcagaaaatacaaagaacgcatatttcgtttttttttttgaattttcaaaaaatatctaatggcagggtatttatcggaaataaaacaaacattatgggtctcctattttgtaaaatgcatcttagtactatcaaagtatagtaatttttagatttcacagaaaaatagtgcatatttgttctatttcaatgtacatcctatttatgtttctcaaaatgcttccaattgctgttattttgtgccattgcgctatgaaaattgaatttttaggttgtacagtactgaaaatgataaataaaacagcacactcctcacagcttgtttttgaatttaaatttataatttcggtgattatgtacaacaagtttcccttgatgttttgggaaaatgtgtaaggctccgtcaatcaaaactggtcggagtttcaaagttttgcgcacgattcttgcaccacactttgaattcattgctagcgttgaaaaataccgctttcatggtttgatacataaaaagatgtttttaaaaaaatcgagaattgtaaaaaatttgcactacagaaaatgtgtttctttttttcgaaatcgattttccctcaatttgtttttaaataatgttttatttggtttaatctagatttgaatcgacggtaatttgatttccaagcgcattttgagcaaatttatatttttcagtgcggttctatgaactcggttcccatggttcttcttcgctgcgagaaaaattcctttggtgatattgaacaaagtgaaagagaaaaacgaaaaacaaaaggtttcccctatgtatttcagaaatgttttataccggatgtatgcaaacttaaatagttgccttaattttgaaagtgccgttattggatttctttcgagaattttgcgtgtgacggtgtttgcacaaattattacgtatccatgtgcgagtgagaaaaatcgccatatcttacgcgcactggaagagacaaaactactgtagtgtgtgggtttacgggcgatcttcgaatttaatttcgagctgcaattgttcattttcaggcgcttttcctatttttttttattttttgtgttttattttcttattttttttcaataaataattaaatgtgaatataaaaagtgtttttatgttgttttcttatgaggaaattcccttttcaggtttttcacagaaaaatcaaggattttcgaaggttataggtgagaaaatatgactatcaattgaaaataattgtctttatttcagactatcaagaaaaagaagaacatcaagaaggaacgggtgaaaaaagcttaaaagggaatttcctcatcaacaacataaaaacactttttatatacatttaattatttattgaaaaaaataagaaaataaaacacaaaaaataaaaaaaaaataggaaaagcgcctgaaaatgaacaattgcagctcgaaattaaattcgaagatcgcccgtaaacccacacactacagtagttttgtctcttccagtgcgcgtaagatatggcgatttttctcactcgcacatggatacgtaatacatcaatgggtcgagatgaatacaagtgcacaggtcaaaaaattgaaaaattgggaagattttattaaacgcgccaattaccgtcttcgactttggtcatttaaagtcatttttatttaaaaattttctattaacctatctcggcaaaaacacaagaattacaactatacaaaatttcctttaatttattcggcgtgtttcaatcggaatttcagtgaaattaacattttgaacaactggaacgggtataagaaattagtttattggtgaaaaacacaatcaaactctatgtatactctcctatatttttgcagactataattttgatgatcgattcattataatctgcaccatcctgacagcgactacaaaacaataaaggctgcattgttcggagggaaactctgactctgaaaattaaaaaaaaacctttgagtatacgaatagaaaattactttttttctcattagaaaaatgccaatttgcagctttttcattattttccagttgaaaaagcatgttttcaagaagatttttaaaatttaaacattaagtacgatctcccaggattaaaaaaatgtttcattaaaatttttgaaatttccggaacttggtcatatttgctccagaatgtttatttttaaattccgatgctttgggtttgtattgtctatgtaatcattttaagagctatcagaacactgccatttccagatggtttcactatttccatcgaattatttcacatttcacatttcagcacaaatgaaaacgagatagtatcgaacaaaaagagacacaaatatcaaaaccgatcacaatgatgttaatgcaaaacgtataaaagacaaacaatattatcagtagagaacaactattcgttcaaaaaataatttttcctaatttttcacgtttttgttgagttatttgtcaattgctgaaaattcagagaaatcatctttgttcttgtttggtaaatcgtcatgatcattgagccgttcttcaaaaaaaacccgttatctgtgtcttgagagctccgtttttgtgttgcaggcaagctctaccgcatacattagttgtaagaacgaaaaagaaaacacatattaagtgatttaaaactatctagtgatcatttttattatgcattggaaacagtttgtctagacattgtttgtggagctttctaaaatacgaatagtagtgagtattaccggcccagagagtgtcgatagttgaagagacacagacatcccgggacccaagcggcgagccgatttgtgacgatttaaggagcgttcctattcgttaatgttccgtaaatcgacacaaattgccgtttcccacgccccgccaatttggtgttgttatgtctgcgtctccgctacatctacactctctggaccggtaatagtataagtaacgtaacatgtgcacttattgataacctcaaaatagatcaaattttcttttagtctatgtttaggaagacactctagtttatgtcatatttaagtactaaatacctaactcctgcaacttaatacatagaaatttttattttcttctggattttctcggaggctcatatttttcaaaattatggaaatttgccaatactttgaccggaatttataaaaaaaaagacaattttttggagtgttttattatgatttgcggttgttttaaataattatatatgtatttaaacaaaatccccactggcgctactccaactctaaacattttctcattagctgcaatattttaataatagaaactgcatgactactttctaattgtttcgtaggggagctatgaaaaactattagaagaaaacagtagtgttcagcacaattacagggtacggttagaaaaattcatattacgtgtttatccacagatgagaaaaatcgccatatctgccgcgcaaatgaacccacgggaagagacaaaactactgtagcttttaaaaaatttgtgtagattcacgagctattgcgtcatcgttgaattgaattttgagtcgcgattttcaattttcaggcgtttcacacgtttttatattgaaatttaattatttattgaataaatctttttaaaaaacacaaaataaatagaaaaaattagaaaaaacgcttgaaaattaaaaattgcggctcaaaattaaattcaacgatgacgcaatagctcgtaaatctacacaaattttttaaaaactacagtagttttgtctcttcccgcgggttcatttgcgcggcagatatggcgatttttctcatctgtggataaacacgtaatattaaaatatagcggttcacgtctcatggtgaataccaaaagctacacatagaagttaaaaattgtttgactttcaaagtttaactatttctccccaaattctacaatgtcaaaaagtatagttgagaataatttccaagaaggaaataaaccatttcaaagcaccagccagcttggccaacattttatcagtcatcaaatttcgaaatttggctatttggacggtaatgattgataacagttgttgaaagtttgtcaggtttagataatagaaaaagctcaaaaaatgagaaaaggttttttccggctagtgtcgcaccggagagctctattttctctctttgattgttttatgttttcacgtctggttgtttgccagacctacgacacggtagcacagaaactagatgggttggttcatgatactcagtctggaaacctatattggctactatctcgaaaaccatcacaaaatcaattttgtgatgcatataagaaatgaccggaatgaaattatctatctttatttgtgatgaattttcgattttgtacttcctgaccaagttatacgcgtttgttcggtggagcgcgtttgcacccatctagcagctgaaccaccgtgaccacgtttggacacgctccgttgaactcaaaatagcttcttatgctgtgatcagactttctatattttgattgaagttaagaagtttgcgtaggtttgcgattaaaagattgaaatgacatctgtaattggccgccgacgccggatagtctgatcggctcccgcccactttttgacccgcctcaaagaggatctactgataaggtggcaatcttaactgaaatataactgcaagttgtcattgttttaagtaacacgttattctgaaaaaaacttttgaataagagagctggtactactatgtagataaacatttattaagttttctctctctctctcttttgcgttccgccgactttaatttatgtttcaactttctaactgcagacttagaaaataaacaaaaaattatgtgaaggccccgccccgacgtggcctttttcgcgtttgtcagtcacattttctagtacttccccggaactttttgcagtttattttcatttccttactaccgagcactgcaatttaagacaaaaaaccaacaatggctatgccaagttacgatactttttgaaaaaaaaaattgtagacttacaaatcgatattctgagagttgtttgctcaattattttgtgttgtttctatcgtaattccctgcaaagtttgtagaataagctattagtcatcgattattgtgagacgctaaaatgtgaccaagtgataagtgattcctagtgaaaattacggggtttagagataagaagggtcgtttcgttgtcgttcttgtttggtatatgataactttctgtagcaatttgttcatatgcatatttttttctaaatactaaccgacttcgagataaattcaatttaaagttctgattattgttgaaaaatttttttttcaagtttcaatactttcccgaagattttccggaaaactgttaatgctaatcgatttccaatgtcaaaaaacccctctgtccatagttttaggaaaatatgaaacaatatcgcaattaggtcaaaaagtctaaaatatggtccctgttagggatcaaattttttgttaaaacaactaattttatgagatttttgaaaagaatcataatttagctgataaggggaagtgggcgaggtcgattgcgacgcgaaagcaaatgaggaaatcagttgtgcagtctattttttgcggcgtgccagagaaaaactttctatttaatgttcaaatatttttaaatggtatttgaagaaaaaaatttggcaaaatgattggtccaattgagacgatctcctttaaaggtggagtagagtcaaacatttttttgcttcaaatgacagaaaatggaccctaataaccgaatataactgtaaaaaaaatttaaaaaattttctaaattttttatgatttttttaatttttcaaaaatcaaagaagtacggctgacgaaatttgaattaccgcgcaaatgagtgacgtcatttttgatattttcgcgttttctggctaaattcgtcggtttttctcaattttttcttctatatttgatttgaaacattgtttgtcaattatgtaaccacttttccgttaaaaaaacttgaaaacccttaggaaattgccagaaatgtcaaaatcggtctaaaatccgtaatttaatatttattattaattttttttcaaaataactatttgaaataattgacaaacaatgtttcaaatcaaatatagaagaaaaaatcgagaaaaaccgacgaatttagccagagaacgcgaaaatatcaaaaatgacgtcactcatttgcgcggtaattcaaatttcgtcagccgtttctttgatttttgaaaaattaaaaaaatcataaaaaatttagaaattttttttaaatttttttacagttatattcggttattagggtacattttctgtcattttaagcaaaaaaattttcgactctactccacctttaagaatttgcagattattttttttgcataataacctttgttagttttcgatattttttcttaaaattttcggacaggggtttttagacatttgaaatcaaatggcatcaacagtttcctaagaaaaaacttataggaagtattaaaactggaaaaacgtaggtacttggggatcgcctcccctttatcgattggtggactgggtttgtataatatttctctactttccctaattctaatttgaaagaaagtgcgcctagaacacacgcggttaataaaagtctctatgtcatatttttgctgcttttttttaacattttaaaaagattaaaagcttatagaaacatcacgggtcctcatgctgtgtagaaacgtttctgcacagttttgcgcaatcaatgaaacagtggatggaatcattgacaaattgcagaacatcaacaccttggtaggttgaagaagttattattggaatttgaaattattgaaattttgcagcttaatcccctgatcggcgaaccaaaatcaaaccacggtgcatatgatgatgacattttacagctggacttgctgagagaaaaacttcgtctacaaattgacaagtttcgagagatctcttatgatagaaatgttagctttgctaagttggtaagagttgaatttatttaacattgacaatttctttctgctttccagaacttcatcgcgcaattcaacactatcatacaaggacaacaattgagaaccatttgcctctcattgaagaacacaggggatagagatgaaatttgtgaatatggtcggcttacgaagaacatattacagcagattgcagatctgcaaaggagttttgaacaggaaaatgagcaagtggaaaatgagagcagggaacggaccgagaacagtctatccgttgatcagacccggcaaggaatagagaacgcgagactagtctttgaaaaatttattccactggttcattcattcaatgggattagaaaccatctagataaaatttcaaatcatgtaagtaagtaccatcgttcaaaatgtttctataaaaaaccttttagtgttgtccgttatacggtgaagcaccacgtgtgaccgctggattattggatgaaagtttaagatcattggacgatgaactcaaaaactttgaggcgaaactaaatgatttcaactcatttttggaatacaagtcacggcagctgtttgaatcgtgctcggtaagcgttgattagtacttgataaaatctgatagccaatagcaagagttatgcagacaaaaagtacactaatcaataaaaatataaatgtgtgctgtcatagaaaatatattctcggtattgactggcacaagaacaacgttatagaaaaaagtcatttgttgcacctaaacagggttacaaatttttttgaaaattcgatcttccttataggagcttgctgcaaaaatggacgtcctgattgccgaaggggaaatatacacgatctgcgttcatctgccagaggcaattgcaaatcaacacttcgacgggatcatactttgcgggaagaaagctaagacgttgtacgaggaattctcaaagctgaggataaatattggaaaagagatgaataagctgaagctggaatacatcgtgacgccaaattcacggcttttctaagattttaggaatttttaatgttttaaatgtatacttgttaagtttgaacaacatcactcattttttaccggttgctctaataaatgatcttcacttcttgtttttgctaactaataagtatgatgaataactccgaggaattgaaattattattagaaacttatagttattttaagtattcattttagacaaaactttgcttcggacgttccaacctttaaaatgaatttcaagaattggtgccgactacgaaaattttgaaaaatttgttgtaataaagcttccatgtaatttttgtgaccacccgaaaagtcttccctattattatatacaaaaaaactaatgctatcgtgataacagaacgatgcagcgttatcaatcgtattctcgtgctctgtcttatgaaattgtcttctctagtacaacttacatgttttattgttcaatttacttgaggtcgtcctctttatatagcattccttatacattgattgattgttaaattgatttaatatcctgttttgggtgctcaaatatgttccacataaaatccacataaatccacataaaattctatgcagacctctctcaatacaaacctctattgtttcttcgaaaaataatgtttgaatttgtttgcagaatcatcaacacacagacatgagctacccttattccaaccaccacagtgtatcatcttctagtggtatcccatttcagtcagacgaaacgaactatttttccagcagtcgtgagcccggaaaagaagtgtaagaaaaaagttgaaacctaaaaacttgaaaatatattcaattttaaatacactcagtcaagagcgagtcacggcaacatggtccaaaaccatgcctaattagtaaaccataactaaatagcttaaaaccattgctaaattagcaaaaaaacattgttaattagcaaaaaaggctaattagcaatgattttcagctatttagttatggtttactaattaggcatggttttggaccatgttgccgtgactcgctcttgactgagcaggccgaatatattgaaagtagaaagcagatcttccaatatcccaatgtacagtagacatcaacaaagtgcaataccatctttcatggaaaaaacaataagcatacgggattatcgaccagatgaaaaagaggtgagggaattgatgatttttctaaaaatttataagaattttgcagttaagagtagaggactattacccgaggagagatgtgaaaaagttccaagaggtcagagaaggaaacgatctggatattcttcaaagctttgacgatgagaggtttgtataaatcaaatgcactagtgttcaaatcgactgtaaaaaagttactataatattggttcaaatttgcatgcttcacctacgtgcaatctttttgtcgcagctgacattagaatatgtatcctacaaaaatacaatatcaaatttatattttattttccagcgaatacttggataaggaacacagttcaagaatccgcgatttagaaactaagaagagaaactgcattgctaatttcaagttgaaaaacaaaaaggaagtcgaagagttattcgcgaagctgatcaacattttacgtatcatcgagcgtgaattagatcataatttggaatgtgaagcttcgattcatttctccgacagtatagaacatcaaattgaggaattcaataagcagtccgagtacttagatcgattcatgttacgatctaactatctcgatcaagacttttttgaaaatatttcggtgtgaaattatgcctacctttgattaagtattatgtgataaattacaggaacaaatcataaaaattgaaggtattgtcaacgacacgaacctccgcgcattatgcattcactttcaaagagcctataacaataaggacaccgagagaatggaactttacaagagagatctgaaacccttacgtttggccgtacgaggaatggctcatgcgtctgagaaacttgttaattaggactataattccttgttatacatgaatcatttttaaatgttttaaattgcttgctattgtttttgcatcacactgtgaatatgttgcagtagtttatattttgacctcaacttctgtttgatttaacattttaagacattatttacagggtcttagatgtcgtgtagaaatgtgtcttctcaattttgcgaaattattgaaatccagaatttttggcttctatggaaattatttttaattttttgatttataatattgttgagaagcaccatccgcattgaaaatttgtaaaattatgaaatttggcccaaaacggaagattttacacaaagcattcattacagtcttttaaaaatgtatcaggatcgtcagtttttcgatttatgtgccgtaaaatatgtcattttgtagagaaaagtctgttacacaaaaatccatgtttgaaaatttaaaattgtttttattaaatactaaaaaattgtaaaaataagatattaacgtaaaattgttgaatattttcacattagaaattaaataattagaatttcaaacaaggatttttgtgtaacagacttttctctacaaaatgacatattttacggcacataaatcgaaaaactgacgatcctgatacatttttaaaagactgtaatgaatcctttgtgtaaaatcttccgttttgggccaaatttcataattttacacattttcaatgcggatggtgcttctcaacaatattataaataaaaaaattaaaaataatttccatagaagccaaaaattcccgcgaattctggagttcgtgaggtgccgcgcgagtgcgctctaataattatgaacacttgagaagagcgtgtacaacaggggtgggcggctaatagctgaattagccgaattagtcgaccggctaattcggctaattcggctaatattagccgaattagccgttagccgacctttttaccgattagccgaattagccgttagccgagtttcgatattagcagacattagccaaattagccgaaatattcgttcggctaattcggctaattcggctaacaacaaattattattgtttaattgctttcagtgtgtttttgtttctgttaccaattgaattattgtcacttacttgataacccacaaaattagtgaaaaacttgctgaatcaacaaaaaaaaatctgaaactgataagttagccgaattagccgaatttcagccgaccggctaactcggctaatattagccgaattagccgttagccgacttttttcccaattagccgaattagccgatagccgaaaattttgaaacacggcttcagccgaattagccgttagccgaaaaaaacggttagccgcccacccctggtgtacaactccccacggccactgctggcgtcgatttacggcgcgtcgcgtgtcgcgtcgcggctcgagttttattgtaattgtccgtatgttacagctgaatcccatattcggcgatccccgggtaaatcctggggcccatgatgctgacgtgcaccagctgaactcatttcgggtaaaacttcaacgacaaattgccgagttccggatggccgctaggaatgatggatatagtatgaaattagtatgttacatgttgttttaagaaactcccaacaaatcgcccgattcaattccagaaccttatctcgaaattcaataacattcttcaaggtcagccactcagagccatttgcttaacactacaaaacgtcgtggacagagccgagccggaggagatttctagatatgggcagcttacgaagagcttattgaagcagatcacggagttacaaggggaattggacaaggagcaggaaatgtttgaaaatgaggctaaacaacgtattaaggaaaatctatggattactaaaaccaggctgagtatcgaaatcgcaaggatggtatttgaaaaattgaggcctgtgcagaattcgtttgatgtgatccgaaatcatcttggcaaaatttcgagtgaagtatgctggaagtttttgttgaatcttttgaatataatttttacagtgttgctcattacacggtgaaactccattttttggatttggcttattggattctagttttagttgtattcgtagtgaaatagataatttcgagagaagcctggatgtgttcaactcttttgtggattatacatcacctacactatatgaatcatgttcagtaggtttttttggcttagacttgggcttaggctttggcttaataatatgattaagcttagccttacgcttgagctaaggcttaggcttaggccggacaattccaactttcaagggatttccaatactgatactttgaaattttcgtaaaattgacatttttgtgaacatttctaaaatttttaatttctttcataaaatatcgaaaaaattcctgaaattttcgatttccacagtgaaaactaccgtgtggctcaaatttttgaatatcctgcctgaagattccagaaaattaagttttttttttaattctaattttcgagactatttaaacttcctgtaatttattttctaaaaattcaaatttccagttatctcattttttatacatattttgcagaattttgcatcccaaatggacgtccttgttactcaacaagatattaaattgatatgtgatcatttggccgatgcaatttccaatcaacattacgacgggatcatacagtacggaaagaaggctaaaacattgtacagcgatttttccgcactgaaaacttttataggcagagaaatgaataagctaaagctggagcatgtagtgagccccaatgcgaagcttaatgcggatagctaggaacataaataatatgtgtatgctgatgtgttttctcactgcctaaacatttgccggtacttgttatatttatgataaattttatcctttttacacggatttctggcttccctattgaaatggaagatgtggggtagatttacggcgcgttgcgtgtcgcgtcgtggcttgattttagttgtaaaagtaaatgtatttgtccatgtggagcacacgagattgtcaatggagcgcgaaaaattcaacgaggaaggtcagaactgaggaaaatttgaaaatttagtcgataattgaaataattttattttaaccagtacacatctatacaatggctcaatagctcgacaattatcgattttttttcgcttaaaaatcctgggtcatgtcattttttcagcgccttttgatattcttcctcgtatagcgatttgagcctgttgagttttttgccgacatcgattttttcgaccttctcctcgacttgcttcattccacggacgattgccttggcggcaagacgtacaggcactgattcggataactggaaaatttggatttttaggaatgtttttaaaaaaaattaattgcattggattttagtaaaatttgcggcgaaaaaaattcgaatttttcagattttttttaaaagcggagcacttgaatcagtgagtttacagaattttgaaaaatttcagtaaaaaaatttgaatttatcagaatttattcaaacttttttttttcgaatttttagtatttttctgaaataaaatcgaatttttagatattttgatccaaaatgtttgaattttcagattttttcaaacttttttattcattcgaattttttaaaattttcaaaaagaaatttgaatttttaagattttcaggatttttctgaaataaatttgaattttttaaaatttttatggaaatacagtgcgcgcgcttgctataggaccccccctaaattttggcagtattgaaaaactccaaatttttcgttgaaaactattatgatatttgaaatcagggtgtcgaaaaacctataatcccatgttttcatgtatttatcataaaaattgagagcacccgaccaatatttcaaaaataaggccgcgcgtttgctataggaccccctcagattttcgaaaattttcaccgaaattctcgatttttcgagtttttatgaaaaaataagtttcaaaactatgtttaattacgcttataaagagaaattgtccctatttattacttttcagaaaaattcaaatttcgatttttactgattttttacattttcagatgtttaagcccgagaagaagctcacgtgccacttttgtgcttcaacttctatcacctgatttgaatagtagtttcgcagaacttcgtaaattttgagctgatttggacaacttaaactcattttacagcacaatttatgcgaagcttttgcgctgttttcaactaacaaactcattatgggctcataactgagctctctactgataaatattttcgacagttatcagagcatttacctgacacgttttgctaactgtttcaggcatgcagtcactgagaaaaaaattgctcaaccatctacaggcgacgaatctcgagttctcaatttgcagtacattctcaagcttttttatgttgagtgaattttcgatcacagtagatggttgagcaatttttttctcagtgactgcatgcctgaaacagttagcaaaacgtgtcaggtaaatgctctgataactgtcgaaaatatttatcagtagagagctcagttatgagcccataatgagtttgttagttgaaaacagcgcaaaagcttcgcataaattgtgctgtaaaatgagtttaagttgtccaaatcagctcaaaatttacgaagttctgcgaaactactattcaaatcaggtgatagaagttgaagcacaaaagtggcacgtgagcttcttctcgggcttaaacatctgaaaatgtaaaaaatcagtaaaaatcgaaatttgaatttttctgaaaagtaataaatagggacaatttctctttataagcgtaattaaacatagttttgaaacttattttttcataaaaactcgaaaaatcgagaatttcggtgaaaattttcgaaaatctgagggggtcctatagcaaacgcgcggccttatttttgaaatattggtcgggtgctctcaatttttatgataaatacatgaaaacatgggattataggtttttcgacaccctgatttcaaatatcataatagttttcaacgaaaaatttggagtttttcaatactgccaaaatttagggggggtcctatagcaagcgcgcgcactgtattaaaatttatcagaatttttcataatttttacagaaaaaaatcgaatttttcagccaaaaagtttgaatttttagatttgttcaaatttttcagaaataaattcaaatttttcaaaaagaaatttgatttttttgaaatttttcaatcttttcaaccaaaaaatggagtttttcagaatttttcaaacttttttgaaaaaatttcgaatttttttttcaaatgtttcagaaagaaatttgaattttccgatattttatgaatttttcagggtttttcaaaattttcagccaaaaattaatttttaaaatttttttaaaagaaatttgaattttgccagagtttattcgcatttttcaaaaataatttgaaactttcaaaattttgcagtaagaaattcgaattttccagaatttttcgaacttttttaaaaaaattccattttttctaattttttcaaaataaaatcgaattttacgaaatgtcatgattttttttttgaaattatcgaaatttccagaattttcagaaaaaattcaaattttttagaaatgttcaaattttttcgaaatttatcgcaaaaaaactgaatttttaatttttttcaaagcttttgcctaaaaattcagaaatttccaattcattttcccctaaaaaataacctgctgaatcgttttctcattgttgagaaatgtgcggaagagccggaacggcattctgaaaatattgaattttattggaaatttccaaattttggaacatttccaaaagaatgcagatatttcaacgatttttcgtctttttttttcgtaaataaaaaggattttttacatgataaagcgtacattttaaggaatttacaggaaaaaagaagcacatcacaataaaatttggggatttggggttcaggagggtaaaaataataaattaaatgatattttgagcaaaaaagagcataaaaataggcgaaaatcagtggggaaaaatcagcgaaaaatcaaaaaatttatacatccggcgtatcgagcttcttctcaatataataatccaccagtgtcttcacgttaagccggaaattgtccaaatggcactggatatgatgaatacagacgtcgtcgagcccttcttggcccaaagcaacggcttttaggatttgacggcggtaagggacggccattgtgactacctggaagaaaaattttgggtttttgggagaaaaattagttttaaatgtttgaaaaaaaaaaacgaaaaacgtgcttaattgaacaaattgcgcaatgaaatttcttttattcgaaaaaaatttttttttttgaaattttacaaaattaaaaacaaaatcaatttttgacggttcaaaattgaaatttattcgaaaaatatttttaaaaatccaattttttaattttttgtcaaaaaagttaaggtttaaaaatattttttgaaaatttacaaaaaatcggaaatattaatttttaaggtaaaaattttgatttttttttaatttttaatttttaatttcaatttttggttaaaatggaaatttgtttaaaatttaaaaaattcagactttttttccaactttttgtagaaaatttcgagttttttaagttaatttcaacaattcgaaaaaaaatttttttttgaaagtttcaaatttctagttcatttttttaaatttgtatgaaaaacaaattttttgttgaaaattcaaattgttgaaaatttcgagcttattgttaatgattattcgaaaatatcaaaaattttaaaaatttaaattttataaaaattttgagcattttttgaattttattgaaaaaaaaaactagtttaaacatatttttaattgaaaatatcgacttgtaaaaaaaatttcattcgaaaaatttcgaaaaatcatataatatttctggaaatttttttgttgaaaatttcgtgtttctctgaaattttttgtaaaattcaaaaaaaaatcgatttttttaatgaattttattagaaaatcacccttttttcaactttttaggtaaaatttagaaaaaaaaattggaatttatcatattctaaaatttgaatttaaaaaagttattatttttttattttgttttttcggaaatatattagaaaaatttcgaatattcgaaaaaaaacttttttataattttttttctaagattttagctaactttttcagaattttcaaaaaaagtgaaaaaaaaattttttttgcaaaatttatttttttttcgttcaaaatgttcaaaatgctgctccatactttaaaagcctgtttggctataaatccatgatgtcttttaagtgattttccataggcggtcgccacagctccactcaaatcctcggttttatcacgtggaaggcctgaattgtaggcggtgaccatttcggtgagcagctcgagcatgaattgaagtcctctggaaaattggggaaattcagaaaaaatggcttgaaaattcggattttttaggcttctagtgccaaaaattacagatttttacgtcaaatttgagcttaaaattggaaaaatcagtttttttttaacttctaggttgaattttaggctaaaaaatggaaaatttgattaaaaatgtgaaaaattcagaaaaaatggcctaaaaattcgatttttcaggcttcagacccgaaaaaatcaatttttgacgaattttaccgaaaaattgctgatttttacgtaaaatgtgagcttcagcacattttaaagctctctgatggcttaaaatcggaaaaatcagtatttttacattttactataattttgggcttaaaactgatttttgcgttaaaaatttggagaaaatcgacataaaattcgaaattatcgattatttaggcttctagtggcttagaagacccaaaaattcaaatttctgacgatttttaggcaaaaattgcagatttttatgtcaaatataagcttttcatgctcctagagcttaaaattgaaaatatcgatatttttgactttttactaaaattttgggttaaaaaacctgattgaaaacctgacctgataaaacctgaaacctgaaacatgatttttgcttcaaagattgaaaaaaatcgaggaaaaatttgaaaacttcgatttttcaacaattttacgacaaatttgagctgtgaaagccaaaaaattggaaaaatcgatataaaaatcgaaatcttcaattttataagcttttagtggttcagaagaccgaaaaattcaaatttttgacgaattttacgttaaatgtgagcttcagtacaatttcaagctctcagatcacttaaaattggaaaaatcaggaattatccgatttttgactagaattttaggcttaaaactgatttttacgccaaaaattgaaaaaaaatcgatataaaattggaaaacttcgattttttcgatttttctcgaattttatgtaaaaaaacctgggatttttcaatttttttacaagttttggcacattttagccaattttcactcaatttttcgccattttctgcaccttttcaaccacaacagcccctcggtggcaattccgaactttccgccgtgttcagcaagatccgcgtcaatcaactgctgtagatacttctgtccttcttgatccttctcgaagcgaactcgaactttgtccacatttccttgaatatccttccgaacgaggctgaacgtggcgccgaggaatgctgaaaagttggaaatttgtattgaaaattggatttttttttcgaaaaattcgtgcttttcccataaaaatgctaaaaaatcgggtttttcatgatatttatagaaaatttcggaaaatgttgcgttttttcatgaaaatagtgaaaaatctagccgtgacgcgaccgctccgcgtgcgaaattcaaaattctgctgaaaaatcggtttcatctcgaaaaatgcaaaaaataatcagttttttaaatgaaaaattttaggaaatttggttttttcctcgaaaaatactgaaaatttacggttttcaccgaaaaattctgagaaatttggattttttatcaaaatttttgtatttttccatgaaaaattcagttttttctcgaaaaatgccaaaaaaaattcagtttttctatgaaaaatgccgaatattttggattttttctcggaaaatactgaacaatttacggtttccacgaaaaaatgctgagaaattcggggattttcctgaaaaatgcaagaaattcggtttttctcgaaaaatcgccaaaatattcggattttttcggtttttttcatagaataagctaaaaattcaaggtttttgctcaaaattggcattaaaaatcggttttttccatgaaaaatgggtaaaaatttgggtttttgaagaaaaaacagaaaattcaagcgccgcaaatgcgctccaatgccaaggaaagccgcgacgcgacgcgaccgctccgcacgcgaaattcttcaaatttcgctgaagttttcatgaaaatttcggttttctttttaaaaaatgctgtaaaactcggtttttccatccgaaatttttaaaaacccgggatttctctgaaatattcagttttttcgcggaaatcgatgaaaaattcggttttttctcgaaaaataccgaaaaattcagattttcatgaaaaaaaaactggaaaagattctttttttctcgaataatgcttcaaaatttggtttttccatcaaaaatgctgaaaaattcggctttttctcgaaaaaatccttaaaattcaaagcaatgcaagtgcgctctattgccacggagaaccgcaacgcgaccgctccgcatgcgaaactcaaacttctgctgaaaaattcggttttttcccaataaaaaagctcagaagttcgattttttcatgaaaaatgccgaaaaaattggatttttcattaaaaatgctgaaaaatttacggttttcacgaaaaaaaaatcgtatttttcttgaaaattgccaaaaaattcatatttctcatctaaaatgctgaaaaatttggagtttttcaagaaaaatggcgaaaaattcggattttttcataaaaatctaaaaattcaaagtaatgcaagtgcgctccaatgccaactgaagccgcgacgcgaccgctccgcaccctaatttttaaaatcaatttcagtagttttatgccggaaaaccgcaaaaaaacatcaatttttcaagtatttttcagtcaaaaattcgaaaagccgcgacgcgaccgctccgcatgcgaaattcatgctttgggtgaattttttatgaaaatttcgattttttcatgaaaaatgctttaaaaattcgattttttcggtaaaaaatgctgaaaaattcggatttttcatgaaaaattcaatttttatgaaaatttgtgtgcttccttacacacaaaatcagcaattccttggcaagcgctcaaaaactgagccgtcggaattttcccatcatcggtgagatgtgggaaaaagtgctccggcttcgcgaagtacgtctcgtgtcccggtgaatctgccacgtcatttggctccacagcaaccactggtgatgatgacgtcatcttgaaaattttcgagtttttttggctttttacgggggagtttaggcacaaatttcgcaaaaataggtaagaaatggatgaaattccacttttttacaataaaaagaagaaaaatgaggaaattgcatcatgaaacgtgtatttttacaagaaattgggaaaattatttaaatatttaaatatatttaacacagctctgttcaaaatgataattgggcgagttttaatcgatttttagagtaaaaatcactgaaaaatcgtgtcccacagtgcgtacgattcgtccttatatagaaaaaaattcgaaatgataagaaacgggcggcgcagttgagattgtacaggaaaatgagtcaaaaattgggggaaatgagggaaaattgagttttttcatgaaaaaatactaaaaattcgggttttttcataaaaaattatggaaatttcgcttttttttctacaaaaacgttgaaaaatcggttttttcatgaaaaatgatggaaattcgggtttttttcatgaaaaaattctaaaaattcgggtttttttcatgaaaaattatagaaattcgggtttttttttcatgaaaaatgatggaaattcgggttttttcatgaaaaattatggaaattcgatttttttttaatgaaaaattatcgaaattcgggtttttttaatgaaaaatagtgaaaattctggttttttcatggaaaatactaaaaattcgggtttttttcatggtaaattatggaaattcgggtttttttttcatgaaaaatactaaaaattctgggtttcgtcatgaaaagttactgaaaatgcaggtttttttcatgaaaaattatggaaattcggggttttccatgaaaaaatacggaaattcgggtttttttcatgaaaaatactaaaaattaggggttttttcatgaaaaatactaaaaattcgggtttttttttcatgaaaaattatgaaaattcgattttttttaaatgaaaaattatcgaaattcgggttttttaaatgaaaaatactgaaatttcggggttttttcatgaaaaatactgaaatttcggggttttttcatgaaaaatgatggaaattctggttttttcatggaaaatactaaaaattcgggtttttttcatggtaaattatggaaattcgggtttttttttcatgaaaaatactaaaaattctgggtttcgtcatgaaaagttactgaaaatgcaggtttttttcatgaaaaattatggaaattcggggttttccatgaaaaaatacggaaattcgggtttttttcatgaaaaatactaaaaattaggggttttttcatgaaaaatactaaaaattcgggtttttttttcatgaaaaattatgaaaattcgattttttttaaatgaaaaattatcgaaattcgggtttttttaaatgaaaaatactgaaatttcggggttttttcatgaaaaatactgaaatttcggggttttttcatgaaaaatgatggaaattcagggaaaaaatgggagaaaaaacggaattttcagcacacaattttcaaattaaattaacaatccaagaaattggcggccatcaggagctccaacgcgacatctggtggaatcgggaactctgggatttcggtggctgcgtgggtgtagcggactttgtaggcaaagtattggcacactttttggagcacgtgcgatggaatttcacggaagtagacgacgttgctctcgttctcggcgtacactccggggcctggaaatttgaatttttttattttaatttaaaaaaaaaattgtttaaggcatttttagagcaatttttaattgaaaaatcaaaatttttttgttggaaaattactgaaaaaattgcatttttcattgaaaatcaatgtaaaaatgggatttttcttgaaaattgtggaaaaaatcaatttttcatggaaaattactcaaaaaatggcatttttacagtgaaaaatgctgaaaaatcggggtttttcacggaaaatgctaaacaaaattggcttttttccgtgaaaaatgattgaaaaatggcgtttttgcatggaaaaatgttgaaaaaccgggctttttcttgaaaaattactgaaaaatgctgaatattgggttttttctcgaaaaatgatgaaaattttgcgtttttacatggaaaattactgaaaaaaatggcatttttcttgaaaaattatggaaatttcgcggttctacatgacaaattctgaaaatttggcttttttctgttaaaattgtagaaaaaatcggtgtttctcaggtaaaactatggaaaaatcagtttttcatgacatttcacataaaatttcggaaaattttgcgtttttacatggaaaattactgaaaaaattgcattttcacagtgcaaaatgctaaaaatttggttttttttttcagtgaaaattgtagaaaaaatcgggtttttcatgaaaaaatgctgtaaaaatcggtttttttcgtgaaattttactgaaaatttggctttttttaatgaaaaatactgaaaaaatgggattttttacgaaaaatgctgaaaaaatctgttttttcatggaaaattactgaagaattccaagaaaaaaaaaaggaagtgcgctccaatgcgaaagggagccgcgacgcgaccgcgccgcacgcaaaattcaaaatttttctgaaaattttggattttttttaatgaaaactgcagaaaaattgggtttttttctcgaaaaatgtagaaaaaatcagttttttctgtgaaaaatgcaaaaaacctcagtttttctacgaaaaaatcgatttttcgacgaaaaaagtcgtttttaatgattttttttttgtcattttcagagtttttggagcgattttctacctgaaagcatggctcggatggttccagaggtaagcgcgagctcccgcttaatgataaactcgtgatcatcgctgctgacgagcttcacgtactgcgacgttggtccctcgatcccaccatactgtttcggttgagctgcgtcctgatcgcattgaattgcgttgttttggtccgccattctgaaggaaaaatcgattaaaatgggggaaaattgagggaaaaagcggattttgggccacttttgcgaagattttgtgattttcaagcaaaaatttagctgaaaaagcacaaaatctcacccaaaatgatgaaaaattcgattaaaactggctaaactacaaggaaatcggttaaaaaactgcgaaattggggggaaaatcaattttttgggcgattttcgcgaaggaaatacgattttcaggcagattttcggctgaaaattatgaattttcaataaaaatccgattaaaacagggaaaattgcgaggaaattgattttcagtgaattttaggacgaagtctcacgcggaagggtgaaaaaatgcagattttctgaagaatatggctgaaaatccgggtttttaggtgtcaaattggaaaataatcgattttcagtgaattttatgggaaattctcgcatttttagcgaaaaatgagctccacgagcaggaaattatggagaaagacacgaaaaatgcagatttttggacaaatttgagcaaaaatccgattttagatgacaaatcgaggaaaaatcgattttcagtgaattgagagagaatttcttctattttctgcagaaattcggctccacaagcaggaattgatacagaaagacacgaaaaatgcagatttttggacaaatttgagcaaaaatccgattttagatgacaaatcgaggaaaaatcgattttcagtgaattgagagagaatttcttctattttctgcaaaaaattcggctccacaagcaggaattgatacagaaagacacgaaaaatgcagatttttggacaaatttgagcaaaaatccgattttagatgacaaatcgaggaaaaatcgattttcagtgaattgagagagaatttcttctattttctgcagaaattcggctccacaagcaggaattgatacagaaagacacgaaaaatgcagattttttgaagaattcgattaaaaatcgaattttagatgacaaatcgaggaaaaattgattttcagtgaaatataggggaatttctttcatttttcgcggaaaataagactccaaaagcaggaaattatggagaaaaacacgaaaaatgcagattttctgcaaaattcgaggaaaaatcggattttagatgacaaatcgaggaaaaatcgattttcagtgaattttaggggaatttttcgctttttctgcggaaaataaggctccgcgagcaggaattgatgcacagaaacataaaaatccagattttctgaagaatttgacagaaaatccggtttttaggcagaaaatacgaaaataattgattttcagtgaatttaaggggaatttttcgcattttctgctttaaattagctccacgagcaggaaattatggagaaaaacacgaaaaatgcagattttctgcaaaattcgaggaaaaatcggattttagatgacaaatcgaggaaaaatcgattttcagtgaattttaggggaattttttcgcatttttagcataaataaggctccacgagcaaaaaaacatgcggatctcgcaaaaatctacgcattttgcacgaaaacagctggaaaatcgataaaatcggagccaaatctcgcacgcgacgcacatctggcagcttgccaagccccgcccatctaccgtactcacgagcgtggcgagacccgctgcgtccctctgcccgtagagctgcccgtcggagagacgggcggccgtcgttctgtgcttcgctgcagatttgtttcgcacaaaaatcactggttttcactatttttacgctatttttttggttttttcttaattttcaggcacaaatatcgaatttaagaaggattagctcataaaaatcaagtttacgagcaggctttccctaaatttagttgaaattgggcctggaagttattaattcttcatgatttttctctttttgtttgatcttcaaattttttctatttaatttcaattttttcaggtaaagaactttcatccagccatgtactgccagcgccttgctctcccactcacccgctccctcctcgtaagtggttttctttgatctttaggcagtactccgacaaattcgaagattaaaacaattatttttcaggcctcgagagccccactcgctctccgcatggagaacgccgtcgctgcccgcatgatcagcaccaccgtcgcccgcaaggacatcgactctgctgccaagtacatcggagctggagccgccaccgttggagtcgctggatctggagccggtatcggaaacgtcttcggagccctcgtcatcggatacgcccgtaacccatccctcaagcaacagctcttctcgtacgccatccttggattcgctctctccgaggccatgggactgttctgcttgactatgggtttcatgatcttgttcgctctctaaatgttctgttttatagccgatttttgtttttttttgtgtgtgtggggggagaagtcctctccaacgtctaaattcttcataaaaacaaagaacgtaggctgcggtgtcggatcttcaaactcagtaatctattagttcgaataaaatccttcgactagccaccttgtataactctaagctcatcactatccctcaaatcaagaaaaacgatttacgaatgaaataattttacctttagtttgactttattggtagaacctgagaacgagagaaaaaaaataaaatatataagtgaagctcattggctagagatgaaatgggaaaacaaataataatttatgcggtttcttcagtgcttttcgaaagaggttgcatttcatgcgagctgcggtacgaatctccctcctcgatctcttcaatactctccggcagtggttttcccatagtttcaggcaaaaagagcaacgtcatcactgcggcgagcacagccatacacccgaacggaataatcatgaaaaccttcccaaactgctcagcgatccacatggagatgtacgaagcggcgatcgcgccgacacgagcaatcgtcgagcagaagcccatcgcagtgttacggatgacagtcgggaagagctctggcgaatacgtgtagatcgccgcgtaaactccggtgatggatcctttggtgaatgccatctgagtgattgccatccaaagctggacgttgtctcccataagccagttgacgagaaggcaggcaccggcgatgaagaggcctccggcgaggatcaggcggcgaccgattctggaaaaatcgattgttcaattcgatgaaaatcgataaatctcgaattttttcactaaaaaatcgataatttttaagctataatacgattttcagcccatttttccgttaaaaccacctaaaatttcattaaaaaactggaaatttcaatttcaaacacggagttctggctcgacccctcggtgtattttgtgcaaacaccgtcacgcgcaaatgcatacactttttcaacgcgctgcgtgaaaattcctcttgcgagatcaaatattttttcccgccattttccaaaattttcgagaggggggtcgagccagaaccccgtgttcaaacctatttttccaaaagaaaataattcaaaaatgcaattttcaggtcatttttcactcaaaataacttaaaatccccatttttaggctcattttccgataaaaccacgcaaaattacaattttcagcctttttccaataaaaatcacttaaaattgcaattttgagcctttttccactaaaatcacctaaaatttcattaaaaaagctggaaattacaatttcaaacccattttttccattaaaatcactcaaaaatacgattttccggtcatttttcacttaaaataattcaaatttctcatttttaggctatttttccactaaaaccacctaaaattgcaatttttttgcaatttttaaccatttttaagctttttttccactataactactccaaaaatacgatttttaggcccttttcccaataaaatcactcaaaaatgcgattgttaaccatttttaagctaaaatcgcaattttaggtgattttagtgcgaaaattgggcttaaaatcgtatttttagagtagttttagtggaaaattagcttaaaaatggttaaaaaccctattttaggcccatttttccactaaaatcacttaaaaattgcaaaaatcgctagaaaacccaccgatcaatcaataaatacacaataaaaagcgccggaatctcgacaaaagcggcaaaaatgaaattcacataaatatcaccgccgagcacattcgctttcatcgccattccataatagaccatcgaaatgacaggccacaagaaaaacaccaccaatgttcgttttcggagctctggagttctgaaaagatcggctccggtgagctttttcgtcggggctccgggagctccgccgccgccggtcgtcgaatcatccaattgctcccaccaattctctgggagcactgttccgttgacgcttgccgctttttggagcacttcatcggcttctttgtagcgtttttgggagacgagccaccgagccgactcgggtactagccacctggaaaaaaaaaatcgatttttgagtagaaaatctgctaaaaaattcgcaaaatcgatttttttccgatttttagcagatttttgactcaaaaatcgattttttaggttaaaaatgtgataaaaagccggaaaaaaatcgatttttcgtaattttcactgaaaatttgccaattttgagcaaaaaatgtgctaaaaagctgaaaaaaaatcgatttttcgtaattttcactgaaaatttgccaattttgagcaaaaaatgtgctaaaaagctgaaaaaaaatcgatttttcgtaattttcactgaaaatttgccaatttttaccaaaaaatgtgctaaaaagctgaaaaaaaatcgatttttcgtaattttcactgaaaatttgccaatttttaccaaaaaatgtgctaaaaagctgaaaaaaaatcgatttttcgtaattttcactgaaaatttgccaatttttaccaaaaaatgtgctaaaaagctgaaaaaacactggatttttcgtaattttcagttaaaagttgtcaattttgagcaaaaaatgtgataagaagccggaaagattgacttcttagtcaaaaatctgcaaaaaaacgcctttttttcggattttagcagatttttcaattaaaaatccgaaaaaaataatttttgagtcaaaaatccgaaaaggtcgattttttcgaattttttgcagatttttaactcaaaatatgattttttttcggatttttgggcagatttttaactcaaaaatcaatattttccaggtaaatttcgatttttgagttaaaaatcggctaaaaaaaccgaaaaaatcgatttttaagctaaaaatctgcaaaaaagctgaaaaaaatcgattttttcggatttttgggcagatttttgactcaaaaatcgatttttaagctaaaaatgtgataaaaagccggaaaaaatcgatttttcgtaattttcactgaaaatttgccaattttgagcaaaaaatgtgataagaagccggaaaaattgacttcttagtcaaaaatctgcaaaaaaacgccttttattcggattttagcagattttttcaattaaaaatctgctaaaaatcgatttttgagtcaaaaaatccgaaaaggtagattttttcgaattttttgcagatttttgcctcaaaaatcgatttttaggttaaaaaatccgctaaaaagctgaaaaaaatcgattttttcggatttttgggcagatttttgactcaaaaatcgatttttaagctaaaaatgtgataaaaagccggaaaaaatcgatttttcgtaattttcactgaaaatttgccaattttgagcaaaaaatgtgataagaagccggaaaaattgacttcttagtcaaaaatctgcaaaaaaacgccttttattcggattttagcagattttttcaattaaaaatctgctaaaaatcgatttttgagtcaaaaaatccgaaaaggtagattttttcgaattttttgcagatttttgcctcaaaaatcgatttttaggttaaaaaatccgctaaaaagccgaaaaaaatcgatttttttcggatttttgacacaaaaatcaatttttgagttaaaaatcagctaaaaatccgaaaaaacgtcgatttttcgtagaaatttgaattttccgggctactgtagttctaaaagtacgcaaacacttggcgccacgtatttccagagttacagtaacttttcagtattaaaatcgattttttccggaaaaattagccatttttagcgaaaaattcacttttttttggaaaaaatagctatttttttgcgaaaattcacattaaaaaaaagagtcattttctgcttaaattcgctttttttttcggggaaattagccattttttgcgaaaattcgcatttttctgggttactgtagttctaaaagtacgcaaacacttggcgccacgtatttccagagttacagcaacttttataggatttttgggtttttgagcgcatttttcctgaattttcggtttttcgcacaaaaatcagtacatttttttattaaaaaactacaaaaatggcggaaaattgcgaaaaatcttcagtttttcaggttttcaaggaattttcaatagaaatttgaattttcgggggtactgtagttctaaaagtacgcaaacacttggcactgcgtatttttgcaattacagtaacttttcagtactaaaataggctttttttcggaaaaaatatccattttctgagaaagttcacattttttcggaaaaattagccattttccgcgaaaattcacatttttctggggtactgtagctttaaaagtacgcaaacactttgcgccacgtattttcagagttacagtaatttttatcgatttttttgcaatttcagagggaaaatgcgcttttagaacgcattttttggtaaaatttcgaaaaaatttcagattttcgctcaaaaatcaataaattaccaataggaaaggaatagaagagccggtgaggcgatgacgacgtgcaggatttgataatttgtgaaatagatggcctcgatgccgaggaaaatctggaaaattgggttttttcggaaaaaaagtctgcgtctctccatttcctgtactctctctctctcgctcccccgccgccgccgctccccctctgacatgtctacggctttagcaccccggtttcccagccgcgttcgtggtgtaatggtcagcatggatgccttccaagcattcgacgggggttcgattccccccgaacgcagaaaatttttatttttcttgttttgcaaggttcggcgggaaatttgaattttaagtggttttttttttggattttttgaacttttttagcttttagctgtcatatttgaggaattgcaaacttttagggcggaaaatttgaactttttttggttatttgtggaaaaatttaaaaaattacggaaaaatcctaattttctgaagaaaaaatggcaaaacctggggattttagcggtaaatttgaaaatttttgaggtttcataatatatttaatgaaaaaagtcaaattattcaaggaaatccaagttttttgaaaatatcccaattttgttgagaaaaattggaaaaaactcggtttttttcggcgcgaaatttgaatttttcaagagttttgaaattaggggtacttcggagtttaaaaaaaattaaaatctgaaaaagaaaaatttagaaaaatatttttcaaaaaaaaaaaaaaaatgttttaattttttccaaaaaccttcctatacccaaattttagccagaaattcaaattttcacctgtcccaacgcgaaaaacagtcccgtaatgactgaggccaatttccggtactttggtccaacgagctccataccaatcacgacagcgatcacaaaaattccgggatgagagaatccggttccggcacgggcaagagcatagagccaccagtatggagcaattgcgataagatatgcacacgtgatttggatgacaatcgccaggaagaacacttttttacggccgattcggtcgccgagcatgccgaatgtggtggagccggccatttgaccgacgtagtaggctgcttggatggtggctttgatccacgatcgatcacatgttatttcccactgcaaatttaaaatttttaaaaattttcgaaaaaaaatttttttgaaaatttttttatttcaaaaatttttttcaaatcgttgctaaatttgaatttctcgcattttcagcttcaaaatgacctccatcatgcctaggatccctttatttaggttactgacacagctgaaaccggtgctacagtaccccgcgtggtgggacccaaaactttaaactaggcggaatatgggcatgatgggggtcattttgaagctgcgaatgaggagaatgtgaattttgatattttttagagaaaaaagtgaatctggaaaaaaaaaattttttcaaaattttttttttccaattttcgatttttcctttaaaagtcattaacacaatttatacctaattgaggatcttatatagttttttattaaaattttccaaaaaaactgggttccagcacgaaattggtacggtagacccctccttaccctctgaacagcggtatattcgactttcgaatggtcgaaaatgtgttcgtggcacgtttcgttgtccggcagtgtgcagcggtcgtagtgacactgaaaatttgaatattttacaaaaaaaattaattttttcaatttttggaaaaaaaattttttcaaaaaatccaaaaaaaatttttttttgctcaaaactttcaataatactaattttactatgttgattttgaataaccgctcaaaaatttaaaggcacataccgtaacccctggttttccatattctgaaattggaacattggcgtccgcgtcgttggtgcattttgtaaagttgagcagcgtcgtgtagtagggctctttttcgggtaaatctgatggtaggcggcatctggaacagtttttaaagttttttggaaaaaagttaaaattcaaaaaaaaatgttaaaaaaaaaattttttttttttggaatttcaaaattttttaatttcaatttttaaaaaatttgaactatatattcttcttctacacgttatcagcttcaaaataacccccaacacgcctatatttagcctactgacacagctgaagccggtgctacagtaccccgcgtggtgggacccaaattttcaaaattgacggaatctaggcatgatgggggtcattttaaagctaaaaatgaggagaatgtgaattttgatatattttggcaaaaaaagtgaaattggaaaaaaaaatttttggaaatttgttggaatttttttaaaattttttcaaaacttcgaaaaatatgcttaaaaccgtctttcttgcattcccagcttcaaaaagaccccccatcatgcctagaaatcggcgagcacaattttttctactgacacagctgaacgtggtgctacagtaccccgcgtggtgggacccaaatttttaaaattgacggaacctaggcatgatgggggtcattttaaaggtatttttgggcagaattcgaaaattttaatgaaatcgcaaaaaaaaaaatcagttaaatttttttttaattttgaaaatttttcaaacaaaaaattttttttttggaaaatttcaattttttcacaaatttttttgttaaacttttatactattttcattaagattttcactagatgctgaaattttcagtacctataaggtgtatccacagaggcaaacgtccatgacaaggcgtgcatcgaaacgacgattgttgggaggcaaaccaagaaaaattggattttttggtattttcccatctcacctaaataggtgaacaggaaatcgtcaaacttcatggtggaaacccctggaaaatggaaattttattgattttttgggaaaaatcggaaaaaagttgaaaaatggaaaaaatgagggttttaggtgaaatttattgggagaaaatcatttttttagttaaaaaatgataaaaaatacaagaaaaagccgaaaaatcactgaaaatcatgtgagaaatcaataaaaatttcaaaaaattgtttgcaactacggtagttttcaaaatacgcagtacaccaccactgcgtaccggacaccggatctgacgagcattttggatttttgtgaatttccgggctttttcagcaatttccgggtaattttcgacaatttttgggtaaaaaatgaagaaaaactgtatttttcatgtgaaaaatcaaaaaatttcaggttttttcacataaaaattcagtttttcggcagttttcgagaaaaatccacgcttttcgaaaaaatcgatattttagttatttttagggattttcagcaatttttaagcagtttcctggcaaaatccaaatgaaaaactaattttaaagtggaaaaatgcaaaaaacagcctaaaatcgcaataaaattcgatttttcccaatttttcagaaaaaatcgatgtttttaggctttttctcaattaattcgtaaaaaaattgccgaaaagttcaatatttccgcgaaaattccaaaaaaaattgcaacaaagtcaaaaagtaaagtacaatctatcttttcatctgcattgacgggaaatgtggtgataacgtgattcgaaacaaaaactttgatattaaaatgataaggtgatggaaaattgaaaaattgatcaaaaaactgctttaggttgttttgttttgatctcaaaaaattggaaaatttgacaaaaaaagattaaatttttcgaaaaaaaatttttttttttcagaaatttttttttcaaaattttccaaaaatttcattttaaaactaaaatttccacccttcaaaccccaaatctccagggaaaaattgagaaaatcctaaaaaaaaccacgaaaaaagtgaaaaaagtgcgcgccgagcatcgcacaaccagagtttatcgaatttcgtctctctttttttttttgggaattttttagcgaaaaagttgggaaaaggaagcaaagcagaaaatagacgaggaaaaaaaataatttagggggtttaggaagagaaactgagaaaaaaacggaaaaaatctcgaaaatttggctaatttgagggaaaaacctgaaaaaatacaaattttctaagaaaaatactgaaaaaattggatttttgagcctaaaaatggttaaaagcataatttttcatccgaaaattcaaatttcccgccataaacaccttttgttcggtagagcgcactttcagtacgcctggaagcgggaattcaaatttctcgttcaatttaatgattttctgattttaccagtaattttccacaataaagagcgaaattgtataaattctgcaaaaaaatttgtaaaaaattgcaatttttcacgaaaataatgtgaaaattcgaatttcccgccattttcagctagagttcggtggagcgcagttgcatagtcattttttgattttcaataatttttagtgtatttctagtcagaaaatctcaatttttgattagaaattcgaatttccggctatttgtccggtagagcgcagatgcagcgcggaaattctgtaaaaatcgatatttccaaaatttgactgaattttcttagaaaatcaataatttttgcgttttcaaagtagatttgttcaatttttactcaaatttgcgatttttcagccaagaattcaaatttcccgctataaaaaccttttgttcgttggagcgcacttgcactcgttgattttatcgacttttcctattttaaacctcaaaattttagcctaaaagccccaaaaatttgatattctgtgagaaaaagagacagaatttccgctttttctcacatttccaagagaaaatttttttttttcgtattttttttgcaaaacagaaaaggaaaagcaaacaaaagccaattttgaatggaaaaactttttttttaggggaaaaaaaattcaaaaaccaaatatttacacactgaacttttgaaaaatggataaaattttcaaaaaattgcagaaaaaatgactagaaattggaaaatttcgctttttagtcgaaaattacagaaaaaattcaaattcccgcgctccaggtatactgcaagtgcgctccaccgaacaaaaggtttttatggcgggaaattcgaatttttgggtgaaaaatcgcaaatttaggataaaaattggacaatttcagcttgaaaacgcaaaaattatcgattttttacgataattcagctaaattttcgaaatatcgatttttttcagaatttccgcgctgcatctgcgctctaccggacaaatagccggaaattcgaatttctattcaaaaattgagattttctgactaaaaatgcactggaaaatatttaaaatcagaaaaaatcagcgaaaatcaaaattcaacgactatgcaagtgtgctccaccgaactctggctgaaaatggcgggaaactcaaatttccagtaaaaaacttgatgattttgcaaaatatatagtttttacacattttagcgttgaaaaattatagaaactaaaatttgagtgcaaaaacttccacagttccacagtctgcaactgcgctccaccgaactctggcgggaaattcgaatttcttttgaaataattgcgggaaatccgatttcggcttcggtttttcggctaatccggcactaatccgcagcgggaattcaaattttttgataaaaaattttggattttcttgatttttgagcaaaaaatccaatttaaggataattttttagaaaataaataaatttttccttcaaaaaagtgatgtcagagagaatcgaaagagcgtgtgcatgaacacactcgggcgagagagtacacagagtggaggagacgcagacagtgtaacagacaccactgggctgcctcagcggggggccctatgagatattatctgacttgagttactccagttgggaggtcattcatgtcaagaaaaaagtgacaacaatgggaagatttttttgaatttaaatagttgggtataggaattgagggagagttgggtaattgtgaaaaaaattgaaaaaaaaattttttttttttggaaaagtttttttttcaggattttcaaacgaattattctgcatttttatgcaaaactaaatgttttaatttgaaaaaaaacccaaattttacagaaattcaaagtcacggggtcccaccgcggaaactggacccaaaattttaaaaaatctgagaaaaaccatgagaaaatttttttttgtaaataaattttttcaaacgtatttttgggtcccaccacgaaattggggctacagtaacctgtgattttcgtggcgggacccaaattttcgaatgttaaagtgcagatgcgctccaccgaactaaaggcgtgggcggcgggaaatttgaattttgtgttgaaaaatcgcgtatttaaggggaaaattcgacaagttcagattgaaaacgcaaatattattgatttttcaagaaagttcagccaaattgtcgaattttgaaatattttagccaaaaaaataggaaaacttggatttttgcagaaaaaattaaagattttcagaattcccgcactgcaactgcgctctaccggacaaacagtaggaaattcaaattttcagtcaaaaattgagatttctgacttaaaatacactttttaaatatttctccacctggaaaaatcaaaattcaactatgactatgcaacagtgctccaccgaactctggctgaaagttgcggaaaatctaggacatttttgggtcccaccacgaaattggggctacagtaatttgtgattttcgtggcgggacccatatttcgaaaattgatagattatgggcattacgtgtgtcaaattgaagctggttaggcgaatttagtaatttatcatgagaaattatcgataattttcagaatttaaaactttttaggcacatttaccgaaaaaatttggctttcacagggaaaacctaattttttgggttaaaaatcaatttttcaacgactaatgatggaaaatggtttgaaacaccaaattttttataccaccagcttgaatatgacacaaattattgctgggtactgtaggtcgaaagtcgtttcgggacccaaattatcgaaagtctacgggaaaaacccaaaaatctagttttgtctcgttttcagctggaaagacactaatattgtatgggagaatttggttattgtgacaaaaacaaatttttttattaaaaattttttctagaaaaatttttacttttcagggatttcagaagaattttttgcaatttttattaaaaacttttaaaaaacccaaattttttagaaattcaaagtcacggggtcccaccgcgaaaactggaccaagaatttcaaaaaatctgaggaaaacatgaaaaacataattgttcttgtttttcatggtttaagaaaacctacgacatttttgggtcccaccacgaaattggggttacagtaacctgtgattttcgtggtggggcctgaatgtctaaaattgaattcgaaaatgtattttcttcaaaaaaaaaaaggtttttgccagattttttgctattttgaccgaatatcatgataaaaaaattcaaaaaaattttctagattttacattattttttgaaaattggaaaaatcacagttttcaactaattcctatttgaatttccgccaattgaatttgttcggtggagcgtgcttgcattatttttattaattgtcgttatttgactgattttcttcatttcctatgttttttcctcggaaaatggaagaaataaacaagacaaatgcaaaattgttgttaaaaagtaaatgaaaatgagtaaaattgtgatattttgagttccgacggcaacaagcctgaaattagtatatttgacagttttactcattttcaattactttttaacaaaaattttgcatttgtcttgtttatttcttccattttccgaggaaaaaacacaaaaaatgaagaaaataagtgaactaacgataattagtaaaaataatgcaagtacgctccaccgaacaaattgaattggcggaaattcaaataggaattaggtgacaactgtgatttttccaattttcaaaaaatcatataaaatctagaatttttttttgaatttttttatcatgatattcggtcattgtggtaccatatgcgtgttttaaagcaatttccccactgacgctactccacctttaaatggttggaaaatagcaaaaaatctggcaaaaacctttttttttgaagaaaatacaacattttcgaattcaattttagacattcgggccccgccacgaaaatcacaggttactgtagctccaatttcgtggtgggacccaaaaatgtattttttttaattccttgaaagcttacgttgtagaaaaaatttatttaaaaattttttttttttctcatggtttttctcagattttttaaaattttgggtccagtttccgcggtgggaccccgtgactttgaatttctgtaaaatttgggtttttttcgaattaaaacatttagttttgcataaaaatgcagaaaaattcttctaaaacccctggtgtagtccacctttaactactttggatcgactaatcttagtttttaaaaaagaaattcaaattattcggagaaatctggacgtcaataccaagaactgagctcgccagacggctggcacgaaaaaattgacgaaatatgagcagaaattgaaactggtaagtcaaaatcactatcttctcattataaattatcgataattttcagaatttgaacttttttggcacatttaccgaaaaattttggcttttacagggaaaacctaattttttgggttaaaaatcaaattttcaacgactaataatggaaaatggtttggaaaatcgattttttcatatcaccagcttgaatatgacaccaatgatgactaggtttgggtcccacagcgaaaattgggttacggtaagtcgaaagtcgtttcgggacccaaattatcgaaagtctaagggacccaaaacaaaattttccagaaaaaactatttttcagggatttcagaagaattttttgcaatttttatgaaaaactcaaaaaaaaaccaattttttcagaaattctaattgcggggacccaccgcgaaaactggaccaaaaatttcaaaaaatctgagaaaaactaattgttctttttttcaaacgtaactttccaaggaattattattttaaaaatcctaacccatttttgggtcccaccacgaaattggggctacagtaacctgtgatcttcgtgacaggacccaaattttcgaatgttaaagtgcagatgcgctccaccgaactaaagacgtgggcggcgggaaatttgactttttgggtgaaaaatcacgaaattaaggggaaaattgggcaagttcagcttgaaaacgcaaaaattatcgacttttcaacgaaaaaaaatagcaaaaaactggaaaacttggatttttgcagaaaaattaaagattttcagaattcccgcactgcaactgcgctctaccggacaaacagtaggaaattcaaatttccagtcaaaaattgagatttctgactaaaaatacacttttttaaatatttctccacctggacatttttgggtcccaccacgaaattggggttacagtaatctgtgattttcgtggtgggacccatatttcgaaaattgatagattatgggcattacgtgtgtcaaattgaagctggttaggcgaatttagtaatttatcatgaggtttggaaaatcgattttttcacatcaccagctaaatataacaccaatcatgactaggtttgggtctcacagcgaaaactgggtgtactgtaggtcgaaagtcgtttcgggacccaaattatcgaaagtctacgggaaaaaccccaaaaaaatttctagaaaaaaaactatttttcaggcatttcagaagaattttttgcaattttcatgaaaaactcaaaaaaaaccaatttttttcagaaattcactaattgcggggtcccacgcgaaaattggaccaaaaatttcaaaaaatctgagaaaagtttgagaaaaaataatttttcttgcttttcaaacgtaagcttccaaggaattattgtttaaaaaaccgaacccatttttgggtcccaccacgaaattggggctacagtaacctctgattttcgcggctggacccaaattttcgaaaattgatggaatggtgggatttttaaaatcaaattgaagttgaagcttaaacttggcatcattaatggctatctttggatcccaccgcgaaaattaggagtactgttgtcgtggcgggacccaaaatagtggaaattcaagaaaaaatcgggaaaaaaaaatcgattttttgggccgtttttgccaagaaagtacggttttcgagcacattttcagctgaaatgataaagaattgattagaattcgatgaaaactggctaaactacgagggaatcgatttaaaaacggcgaaactgggagaaaatcgttttttgggccatttttgcgaagattttgtgctttttagcaaatatttagctgaaaaagcatagaatctcacccaaagtgatgaagaaacggtaaaaattcgatgaaaactggctaaactgcgagaaaatcgattaaaatggggaaaaaagcggaataaacgtagaaaatcgagtttttgagcaatttcagccaaagaaatacgattttcgagcacattttcagctgaaaattatgaattttcaataaaaattcgattaaaacagggaaaattgcgtggaaattgattttcagtgaattttaaggcgaaatctcccgcggaaagatgaaaaaatgcagattttctgaggaatttaacataaaatccggtttctttagatgagaaatcgagaaaaaatcgatttttattgaatttagagggaatttctcgcattttctgcagaaaataagctccaggagcaggaattgatgcagaatgacagaaaaatgcagattttttggtgacaaatcgagaaaaaatcgattttcagtgaattttaggggaatttttgcattttctgttccatttttagacagtttttcctccaaatttcgaaaattcccaggttttattagttttttgttccaaaatcgacttccaaggagcacgctgtccgaaaaaaatgcgaattttctggaaatcggcgaaaaatcgattctctgaaaatccacggctggtttgtgagaaaatatagtgcctttaaactgtattttaaatatttttcacaataaaatgtcattttaaaatttttaaaatcagtatttcttgcaaaattgcatcgaaagcgtgaaaattcaaaaaaaatgtcgtcaaataatgggttttgtccgcaaacaccgaggcgctaaattgcacaggctctggagatttcgaattttttgcgattttttgcgtttttttgaaattttttgttgtgtcagtagtgtcagaagggtttttcagtgaaataagtgactatttaacatgaaaataggaattttcgatagaaaacggtttaggccctccgattttcgttgatttttcaattcttcgttgttttttccggcttttaaacgtttcgctttcgatatttcaatagaaaagtgattagtttaactgttttctcaattttcgtcaaaatttccgcaaaaaaattttattcctcttcgattttctagattttcagaatttttgccacgaaaatgcgattttttagtgctttttctcgtttttagtgacaaatcagttttcagagaacacgtacagtgcattttttccacgaatttaaaggaggagggcgaatttacgcgaaaaaatttttattcctcttcgatattctagattttcggaatttttgccacgaaaatgcgattttttagtgctttttctcatttttagtgacaaatcagttttcagagaacacgtacagtgcattttttccacgaatttaaaggaggaggacgaatttacgcggaaaggtctcgccacgcgcttcaaaaaaatcaataaatgacgcgtggcgagaccattccgcgtaaatgccccctttaaagtcgtagaagtggagaaaaatgcgctgtttaccagtttttcagacagtttgaaaatgttttcgtgagaaaattgaattttattctcaaaaattcgatctttctcttaaaaacaatgaaaaactgagaattttgcgatttttcgacatttttttccgctcgaaacgacgataattcattttaaaaagaatattcgggcaggtgaatcagcctaatcgtcaaattccgcacttttccgtcattttgagtgtaaaattgttatttttttcggctttttgctcatttttttcgttcctcggcagcttttccagacttttttcctgtttttatgggtttaaccttgaaaaaagaacatttaataatgtgaaagtgtacagtacgccccacacgctgttctcctgcgttctcttgcctcctcttctctgaaccaatcgctgtgccggaggcggggccccgcgtgcgatagatgcggcgagcagaagagacgcagacgcggtgaaagacatgcgacgcaacaaggcggtgcggtgccgccgccgtacgcatcgatgacacagaattatctgacatttctagtttttttaaatctttttctagcctttttctcttcaaatttagtgttggatttttcattctcggtcgattttcggttttctcgttttgtatttctaaattgaagacgactttgtcttgtttcacctctgaatttgaaggttttgaactttcaatacgggaatcggacttcattggatttgatcagttagagtcaggggcggcaaacaatcttttcaggcaaatcggcagattgccgatttgccgaaaaaacaacaatttgccaaaaattttcgataaattgtggttttgcaatttttttgaaattcgttattttttattttttcgcaatttttcgttttttttgaaagacattcatttttgtttcaatttttcttcgtatgttttttatatggtaatgattttatttttcctctccagcagtgccgtgctgctctcgggccgagagccgactttttcaaagagccgcacagcactgctctccagtactatcgaaacattaactgtgaaaatttatttatcgatccatgaattttgcaaaaatatttgtcgcacagaaagtggggcggagatccgtacttcaggaattcgtggtattcctgcggatcacagcaagccattctttttcgtccttggctatagtggaccagggggtgatgacttctccgtctgcgccacgagtggtgatctcctttcgcagcgagtcagtccatcgcatcggcggccttccaacaggccttttccatccatatgggcgctattccgtcagcagcgtcgtccatctattgtcattccttctggcaatgtgtccagcccatcctaacttcctctttttcacgaaattgagcggatccctgactagagacattgcacgaatgtcatctcgatggagatctcgctcacgttgttcggtgagtgtgatcccaacaagccgtctttccagataggcatgtgtgattcgcactcgttcggataaggctttggtgaatgtccagacttctgaaccataggcgagagcggggagaactgtggagtcaaatagattcgcacggatcttcttgtcggtgttggagtcggtggttttctttattccattgaatgcggcccaggctgcgcgacgtcttcggtggatttccggcatcaaattgttttgagcattgatttggcggcccaggtagatgtattcgtcgacgtcatcgagctgtgtggtgggggaagggctaccgaagtagactttactggggtttgcgaaacggtttcgtaagactttggttttcccagtattctctctctctcaagacctacttcagagcattttagcacaagttcctctaacattttactggcagttttgggatgatttgctacgaggacaatatcatctgcgaacctgaggttggttaggtttctgccattcactcgcattccgggtattgtgtcgtaatcctcagcttctcctttgaattcgatccaggaaagctttcggaaaacgtgtcgaatgcaagctgagaagagattcggagaaatggggtcttcttgtcgaactcctttagtcacagggaccgtgactggcttgtggaatggggtgaaggaggaggtgcagtctttataacactcttttagtaggtcgatatagacctcggtgacgctatcaaaattatattggaaacccaaaaattcgatttattgctctaaactattttttcccacatatttagtatccgttttttgttgataaattccaaaataatgtgaagtttttgtgaaaaatttagaagtctttaatctagaactgttatctttgtgaactacttctcaaaaaaccctgtaaatttttggttttaacatgaaacattatgattttttttctaatgtttgggacaaaataccggtaaacatcaggaattttgcagatttttttctaatttatttcaaaattatctttaatcattcacaaatttgttaggaaaatcgatttctataaaaaattaaattctaattttttagatcgttttaatttttgtctagatgaacgagtcctcgcgagttgccactgggcgtctgttcctattcgcacaagaaattgtagatgtaagtcaaatcctcacgaaaactcatctctttggtgtttttcagcctcagagaccggaatttctgagagatatgattgatcatatggctcaacatggagcgaatgctattatgcttgtgtcctttcaaaattctctcatagtaagttttgttttcttttcaagcctgagcgctctctaaaacgttccctctcacagaatattacaatgttgtccccatttgtcgagccaagaggtggatggttgcagtggattaatatcgaaggcgtcccagacccagcaattattggagaattcagaaggcctagagaaatgggtgcacttcgagctacagaagttctacttgacgtgtgtcgaattgtaagccaaaaatccaataaattatcatctcttggtttttccagatggtgcctgaactcttggcacacatgtctgctcacttggtgacacttggcgccaacttggaaacacatttgccagtgttcgacctggtagttagggtaaatttttctttacgaggcctggctttattatatctaaaccgttcgctttcacagacacttgctgcccttgcaaatgctctgcgcatgccgaatagaagatggagacgagtccagggtcaaggtggggctggcggagggggccctggtgctccaccaggccccccgcgccccccaagatcaccaagccctcttccaggattttcaaggccattttctcgcatttctcaagttttctcgtccgcgagaaaacatgaattttgaaacagccagcgagcacgtgaaaatttgaaaattccttatccaagaggtgaatttttgaaaatccgaattgtcataattcagagctttaagtcaccatgatttttcagacttttagaaattaatttccagacggatgctctgaatgcaacttatctcgtcaagcatttcggcccaaaattcgttactccggtgagtttatggaggaaaggtagcgattttctcaaaaatataagaaaaaacggatggaaatctgaattgtcagaattataatagtcaaatttgcagaaaattgaatttttaacagctcaaattccaagaatataaaaaatggaggaaactctgttttctgaattttctagggaattttagctaaaattttagcgatgaatcgccagaaatcctgagaaaaaggctaaaaatctagtataaataacttgagttttcatttttgccaaaaaaacttgtgtaatttttcagaaaatttccatatttttcagaagctcaacgaactcccatcagatgtgctcattcacatcttcaaattcgtcggcaccaaggagcacaacccaaaaccggcggcttttcagcagaattttccgccctgccactcggagcacactgatgagcacgccgttcgaaatttgatgtcttttagaagagtttgcaagagtattgatgatggtatcaataataatatggttcccggagcaccttatgatcaatgtcccatttaaatcaagattcaggtataaaagttcaaagaaaaatagataaaatgaataaatgtcataaattcgaaaaaagtatgcgaattttcaaattttgcacttgaaaacgaatttacgagatacaataaatgaaaatgtcctaattttacgatttttaacagaaaaaaattgaagaattgaaaaaaaatagttattttagccccaaaagctcgtgatttccttgaaatttgcatataaaacaccaaatttgacggagttaacgaaaaaaatgtgttgttgtaatgaaaaagtgagcaagactttgtaaattttgagtttttcgttcaaaaaatgcaaaactttcttgagcaaacagtttgaatttcagctgaaacatctcaaaaaacgttcaaaatcagcgttaaacgccaaaaatttaggtgaaaagccgatttttcacacgaaaaattcatgaaaaatgtcaaaaattgactgaaaactcaatttccatccaaaaagtgacaaaatcacctcaaaaaaatttgctgaaaaagtgaataaatactgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatacggaagctattcacgaattttgggatttttccaaaaaacttgtgatttttaaactgcaagttcaaatttaggtagtttttattgcaaaattcgaattctccatcacttttcatctctgttaccccctttttcagccaattcagacgaaagttagtgaaattcggtgtttgtggcattaaaattccaatttcaagctgggaaggcgttacagcagcataaattcttaggaaattcgattttaataatgaaaattgctaaaaaatcggaaaaaaactgtaaaattgatttttcggctccaaaatccttcaaaaaaagcccaaatttccattttttttcagacaaaatcgatctatttcgagcgaattttggatttcaactattccgaatcaatcgatattatcaattatatccaggatttcttgtgctcaatcgattctccggccaatgtctacttcaattctgaagttttcgacccaaatgtcgtgcttttcggtgtaaatggccgtcaaaatgataatgttaatggctctcagcagattcaaacaaatcaaataaaacaagcggaacttcgtcagcgccgcttcatcaatgtgtaagcttaagtagaaattctgaacattttcagtcaaaaatctcattttttgcagtgtgaacaatctcgtgacgcctgacgctgataatgtgaagaaaagcgacgtcaaattcatcaaaaaacgccgcagagccatgaattctatcaaaaagcacgtggatattcgcacaaaatcccgttccaaaagtgtcagaaaatcgactcgttggcatttgagaaaagtattcgatttgattggaaaagagcagtgccgttcgaaaaatgcaatgatttatcatttaaaaaaaaatcgttgaaaaaggtaaaaaaaaaacgatttttagatcgaaattactggaaaaatgagccgaaaatgcaattttgtgttgaaaaatcggatttttctactgtaaaattccagattttttgcttattttttcattaaacagcaaaaaacacaaaaaaataattacaaaaattaatgaaaatggttttctactgaaaaacgaagatttctatcgatttttagttcaaagagacaacattttctcaattttttatcgacttttccttaaaaaaatatttttcagtcaaaaactacgatttttcaacttttctgtcgagttttcctttaaaatctggggattttttttggattttcattgtgctcaaaaatcatttatttttcggttttaaaaaacagttttttttgttggaattcctgacattttcattgaaaaatgtgaatttttgattttccatgatattttcataaaaatttatagattaaaaattcgtagtctctgaaaatgaagaaacatggaatttttcggatgtttatcaagtttttactaatttcccctcaaagccacctaatttccagataaccggagtcgccgtggagcgtacactgatcaacgagacgtcaaaactagatgaatgagtacactgattttcctctcggagcacaatgattttctgccttgaagcctcttttttctccttgaaatctttttttttgactgaaaaatccaaaatttggttttaaaaaaattcaaattttgactcaaccccattgttcatttcaagggttgtggatttacaagcgtccgtgttaattcttggcgaatttttctcaaagtcaaaattgaataaatttcacgatttttaggtcaaaaatttctcaaattatgcttttattggttaaaaattcacgattttcgcgaaaaattgcgtctttcaggttttcgtcgaattcgcctccacatccgactgtcaacgtgctcaggctgctctgaccggacgaaaattcgcgaatcgcaccgtcgtcacctcgtactatgatgtcgacaagtaccacaatcgtcaattctaattttcccccattttccactaaaaattgcaattttaaactcaaaatttccgaatttcccgcctaaaaatcgattttaaatttaatcccaattattttctttttttgttcaaaaaaatttctatctattatctatttatcctcctcctcttttattctattattcgaaaactatatataaattgttgatttttttagctgaatattctcaaaatttaggattctttataaaaaaatcgattttccccttttttttagattcggcaccgaaaaactggaatttcgacgtttttcgatgcacaatgtcgaaaaaattgttggtggccgagttttccagaacttgtccaccaacttccataggaatttatcgattttcccagaaaattcttattttccactgaagtttttggttcatggtgcatcgacgcgtaaatgtttaaaagaaaatcgtaaaaattgcgaaaacaatgcggtggccaaacatttaaaattctagggcacaaaccgaaaagttagtccccgagctgaaaactgctcaaaattcctttaaagtgacctaaaatcataaaaattgcgaaaaaattggtggccgaacttttttggtttcaaggccaccgacttttcggaatttctacggctttcgcacaaatgtttggaaaaatttagtgaaacctaacagaaaatcttcaaaattggagtaaaatcgtgaaaattcgaaaaataaattcggtggccgaacttttttgctttctaggccactgactgttttgggaatttttatagtttcagtcaaacaattgttgaaaaatttagtggaaacctacagaaaatctccaaaattggagtaaaatcgtgaaaattcgaaaaataaattcggtggccgaacttttttgctttctaggccactgactgttttgggaatttttatagtttcagtcaaacaattgttgaaaaatttagtggaaacctacagaaaatcttcaaaattggagtaaaatcgtgaaaattcgaaaaataaattcggtggccgaacttttttgctttctaggccactgactgttttgggaatttttatagttacagtcaactttgccataaaaatttttccaatacgcattcaaaggaaatatattttttaacttaccacggtgtggaatttttaacaaaaattcaaaaaaagatgttccaaaatttaatttattctcacgcgagagggttgaattttgaaacttcttctgtgtgcctatgttttgtttcagctctttttcagctttgattcagttttttaaagattttttttggaagtaagcaaattgagtgtcgttcctgcgaatttgtaaaaatagaatctaaaatatctttgctctattttaaaaaaacagagatgaaatattgataaaatgacaatctttcgacctaaatatctcgaaatttccttaaattttttttcttaaacttcacgaatacactaatcaaattgagatctacaattctaatatacttttataccctcttgccgacttcgttttcgagaaaaaccataattttctcaaaaaagcacctaaaaatatggtttcaatttcagcaaaagtgagctggctggaaatcccttcaaatttattctctcaaactttttcattacactaaatcgacaattggctacaattttagtatattcaaaaacacgtggcattcatatttgcggtgctgtgcgccgacaaagttgagtttaggcctaaaaataggagatttgttccagttaaagcgacctagctagaaattcctttaaattttttcttttaaactttatcagaatatgaaatcgacaatttcctacaattcttgcatgtttaaaaatacgtgtcatgcatactcccggagcagtgtgtcgacaaagtcgagaaaatgcttaaaaataggtgatttgttccagataaagtgacctagccgaaaatctctctaaattttttttcttaaaattcatcagtgtatgaaatcgacaattgtctacaattcaagtacatttatgtatcatccggacccgatttcgaccatcggaaaaacgttctgtttgtttttgtttttgttaactttgcagttgctctccttcacgactgtttatgaaaaacacttatatttaaacaggaattgtagataattgcctatttaatataacctcttattttgcaaagttaacaaaaacaaaaacaaacagaacgtttttccgatggtcgaaatcgggtccggatgatacataaatgtacttgaattgtagacaattgtcaattcagtataatcatgaagtttgagaaagaaaacttgaagggtaacccattcagttcactttatctggaacaaacctcttatttttagacatcttctccactttgtcgacgcactgctccaaaactattggtgccacgtatttctaactactctagaattgtagacaattgtcgatttcatacactgatgaattttaagaaaaaaaatttaaggaaatttcgagatatttaggtcgaaagattgtcattttatcaatatttcatctctgtttttctaaaatagagcaaagatattttagattctatttttacaaattcgcaggaacgacactcaatttgcttacttccaaaaaaaatctttaaaaaactggatcaaagctgaaaaagagctgaaacaaaacataggcacacagaagaagtttcaaaattcaaccctctcgcgtgagaataaattaaattttggaacatctttttttgaatttttgtttaaaattccacaccgtgttacgagttctacaatacctcaggtttttgttccaactcgtgttcagaacatctaaactgaaaaaacaatcaaattatgaaaagtttccaaaaaaaaaattcgaaacaattttagtcacatctcttccgatttgaagcgctgtacgtcagaagaaaagaaaccatctcgagaaagcaaccaaaacaagtgaggaccgacgacattgaaaaatatatcatatgaagaaaaaagacgaaaaagctgaaagagatggtctcctcacaattctttcgtggcatggactacgagagctgaggaagcagcagaactgaaatggtcagacttgagccaaaaaggaggagattttggaggtaaaaaaacggagcgcaaaaaacgagatcagttgacaccgaatgctgttgattcaatcgctaaaagaacactacaaaagatcggagtcgacttttcacatcatgccttgagaagaggatgagccaacgatcttcaaatccaaaaacttcattttattgaaaacaaggaaaaaggaagatataggtccgacggtagactcgcacgctatctgatggacaagccggcagctccaggattgcacaatttcaaggactcgacaccgtatctgctaccaacccccgaagaaacaaaataatcaattcatactgtaatatcgttattgttttctaatatctcccaatgttatacttgctcaatctcctactttctcctgtaacctgtaaacttattgcttctaatggatataccaccattctatacacccaaatccaaaccataaacctgtaatattaaaaaatgcgttacgttttaatcaattttttttatttcagttcagtgagaatcagggaaaatcgattctcacgagccgaaggcgagtgagaattaggctttccacgggggcgtgactcacgcccgcccgcctcccctcttcccctcgccttcccgcctcttccccccacacacgcctccgtgaaaagaaacaaaaaaacgtgaactcagaaatttatacattattcattttcaaaattaaacattgcactattaataatccactattgaataaaaataattgccaaaattacaatttaatattataacgtgatggcaaagtgttctaaatgcgcgtccaatttgtttcatttctgcaaacaccgcgacgacaaattgcataccgggtgtcagggcgggcgtgaggggggcgcggggaagaggcgggcgaagggcgccccgtcacgcctcgcccggatggaaagcctagtgagaattatcgatttctgtgaattttttggaaaccttgttgataaataatcgattttccacgtcgagtttaaaaaatttcccaaaaactccgccggttcgtcttgccaggtaacatgcgaattttgacagcacagcggtgacatggtgcatcgaaggcaaaaaatcgatcattcacggaaacttctgttagggtcaggcaacccttctgtacacgtaaacccctgcccaacgaggaaagaggcaaaaggtatttgtttcgatttatttgttgtttaatttgaggaataaacataaaatgcataattataatggttaaaaatagttatttgtatttatttcgtcagttgtatagtttcttaaattatttcaaacgacgactcgaatatatcatccacaattgcaaaatcttcgattggaagtggctttctggaaaaggttaataatggagttatctcaataacttactgagttagcgttgtacctacattgcttcgctttaacagtttcagtcaccgtatttttttctattagtcttgcacccctacggaccaatcgaaaattctaatagtcttgcatcccctctttttaccttcccagcaatattttatgaaaacttcaacaatttcataatttttttggctaaattaaattgtaaagtgtttaactaattaataaaacaatagaaaagtatgtattatgtatgatttaggatgtttcaagtcaagtttttgaagataaatggccaattttacaaagctattggatcttcgaaaattagtcttgcagcctctaatagtcttacaccccgacgggtcgattgaaaattagtcttgcatgcaagactaatagaggaaatatggtatgtatatatttacagtcgcgctaaagcaatcgctccatgaacattgtaattccacagaatgttggtttgcccggaacgcagttttcagtcttctattacattaataattaagaaattaaacagtataaaaaacaaaacactgaaaaaatgccgtcccgaacagggttgtgcggcaaatttgccgagctcggcaaattttgaaatttgccgcaaacatcaaaagtttggcagtacaattttgaccaaaactattgattttttccccagcaattcagtaaaatgacacaaaattgagtaattttaatgcttaagtagacacactacacggaacttattcaaaaaccaggtgtctgttcagaaatcagtagttttggtgcacaaaaaacatcaaaaagtatccaattttttggagtacgtcaagtacggcaaattttgagatttgccgcacagccctggtctcaagcttgcaaaccggatcctgactgcagaattgcagtgttcacggagcgatcgttctggagcgcgactgtacagggtggtccataattatggtgacacgtgacgcgctcattggcggcttgtttttgggaaatttaatggtttaaattctacagttttgtattgaagcaatagaggaattaatttccttttatgcaacataagaaacttctatatttatcaaacaacggaatcggagtagctcagtcaaagtaacgcaccctctcatgctgacgtctttttggtacgcagcatatttttgatcgtgggaattttgaaacggttttattttacagttaatctattattttggaaacagaaaatatatttctataattttcaactgctgcggtatgtgttttattaatttctagcttctgccaaataaattgagaaaaagattagtaggataatatgcaattattttcaaaacaaatgtttttctcgtgagtgccatgacgagttgaacgtcagacatcacaatgttcataattcaacttcatttaaccatccaccacagaggcgcgagattcgcaactacattaattgtactaaaaacgcattctccaattttaaacaactcgaaatgtgtattaagacttatcttatctgcaggagaagctagaaagaacctgtgaaagcaaaatatatgcaactagcgtgccaatgacaattttttcttttcttcagggggtctgccgtatcgcacaggtagatattttcgaagtttaatatcattttttgttctctagaaaattgtgaatgaaacctgtgtggtttaacaatattttgaaagttttatcaaattttaaagtcgcgagaagttgtcaccataattatgaaccaccctgtatattccaatttttcaataatgatggataacagcacatcggaacaaaaaaggaatgtaaaaaaaatgttcagcatatttaattatcgttttagaaattacggaaaaagatatcttcatgataatatcagaggaagtacgctagttaaagttggggtagtgccagttggggaatttccaaaaatcaatcgtatggtgccaaaaaaaaacaaatatcactgttcaaaagcattttgaaatgttctttttaattaagaagaggtaattactgactttcagccactggtttagaaatctaaagcaccgaacccttccaatgtttgactatcaatacttaaaacatatgtaaaccacaaagttcgacgaattttttttgatcgacgaaagatataaccgtatcataataccatttttgagaagtttcagaaaacttttgctcaggtcagggcatggtcagcacccttgcgctactccaccttcaaacattttagatttccaacgagaaaatagcttactgatcattgtcccaatcggcatgtttgaaatagaaatgaaggttaaaagatgtaactgtgatgcacttgaacgcgcatttagtacatacaatttggaatctgtaagattttttaaattctgtgtatctgaatttctttattacccgttatcttttgcttgttccaaaccttctttatcaatgacacacccgtttttcattttgaactgttctacgcaaatcccattagattgtaagaaaaacgttcctagatcgacaaagcggttatcatagtttgacatataattgaaatttgtgaaaattgtttcacaaagctgtttgtggtgatccgaagtggattgaatgatcaaatggagttcgaagaagcatgtttctatctaaaatcagagtttaaggctgaaacaaatagtaagaactattacttgaataatattatgttgaatgtcgaatagatgttcggcgacttttctcgcgcttgaaagaggcagcataggattttctgaaattaaaattagaaaccaatattattcaaataaaacatatctaaattcggatcaattcaagtctataaacccatctttcaactcatacaaaacacaaatagaacaacattaatgctgttccatttttgaacttcgggagatcctcaattttcttaccttctgactgtattccagcttttgcgcgtgccatctttgcaagagagttaatgtcgtaactgtacagcatctgaaagatgacaactattataactcatttccagaatacatttcacatacctctaaataccaaaagttcaaaccattgtagcgtttcaattcttcgaagaacggttcgatctgtatttgatttgatattttcagtgtttgggtcaataaattacctggttgaggcggtcagctagcttggtgagcttttcagctagtatggtgaagcgtgcttgatgggcagattctctgaaaaccaatgtaacttcagaatctgactgacaaaaatttaaataaattttttttaaagtaaaattccaaaaaaaatttatagtatttctttgagatattacagtttgaaaaacagttttcaaacttttttatttagaaatgtaagggtttgccgaattaggtcattttaactcggtcatattcgggtagatttacggcgcgttgcgtgttgcgtcacggcttgattccagttgtaagactaaatgtattgatccatgtgaagccactttttgtccggcaggcgattgtcaatggagcgcaaaaaattcaatgaggttttggcgccaaaaccccgtgaaagcacataacgtttatttcaaaattgtgaaattctcacatcagtgagagattttaatatttctcttaatacagaaaacatgcaaaatatctcattttacaattttttcggttttttttgtttgaaaaatttaccgaaattatttagaatcagaattagctaactatcagaatcgtgctttaaacgtgctagattttctgaaaaactaaaaatagattaaggaaatttcagtattaaatttaaaaaacttgattaagtaaagttttctaaaaactaactttttggtttaattgtaccaaaaaggggttccgtgctagtttttaagattacagtcagatgtaccctttttcagatcgcgaagagtatagtccaaaaactggaaacaaaaagttctgtagaaaacaaaacccggtttttgtgtattataggcgcatatttttagatgaacattttgaagttatgaaaaatgaaaacgtgtgcagtttttttttgtattttaggcttaggaaataaccctttcttagcctaaagagtaataaatcagatcacatttaattaaaattgacaaatgaatgaatatccaattttttttaatacacaagtacccaaaatcctaacgaattttcattttgcattcaaatgccactcacagatccgcattgctcttttctttcctcacatgctcgaaatagaaatgaacgtttaaaaattgtatgttgcagttggtgccgaacgaacatagatcacaatgaaaagtaaaaccttcatcgtttggatttctataaaaattgataatcgaaaattcaaaaaagaatacaacatactttgtgcacttaggaagtaccaatcctgttgatgtaagagcgggcacttctctttcctgcaaaagtgtgtattgttattcatattgaaagactggtgggtaacaggcgtaatcgattttggcaaacgaataaatatactcaaaaacactagtttcaactaaataaacacctaaacagcgtaatggaggtgaaggagagtcgatttgacacgttgcattaaattatgaaaaattggaccgtaatgaccgaacaacgagtgttcaattgataaaaaagaactattgtgttgccagtttgttttacccttggaaccgtattgtttgttttgaaaagaaagctacaaacctgtacacctgcccatcgcagatttttacgtcgtttaacactgaaagaatataaattaaaagccgtttaccatatttcttctattagtatggtctcctactagacttgcaccttgaacaacctccgaaaattagtgctgcactcccgaatagtcttgtgtctacttgttttttttatacatttttcgcctattttgcaacaatttttgaccgaatttctatgcaagtgaagttactgaaccttttattgcaattacaataaaaattttttaatttccaaataaatcagaaaaaagttctaaaattagtattgcactcccgaatagtcttgcaagtgggaagactatcccacgatacgttttcaaaaaattcgatacgccacgacaaaagttatggttgttgacagggtttattgccaccccaaatagatagatttgtgagatagtacaaattgcatctattaaagtgattaacatgttcctattgtatttttaaattgaacgtataaatttgacacttttttgcttgttcttttcttataaatattttgaattttcgcaaataattgtcaaatgtgtgctttgattggtttaaaatctagaaaatacccagttttcaacaattcacgagatggttgcgacgtgaaatcgaagtgaaaatcgaaccaatccaattttacattcatgtaacataatatctttctaacatatctccccatggtgatgacgcagaatcgctgaaaaaaaaacaatatttattatgcactttccaatgtcttttagaagagaacatttcaattttttggttatcctttggttatcacaaaaaataagctgcgaaagacctttaaactagacacaaagtcgatttgaaatttttttcaggcgtttgccgcacatctttcctgttaaccgttttttcctaaactttttgggggactgatttaaaaggttttcttcaaaatgccagtcaaaatatatatttgcctgtaaaaataaattatttcgtgttttctgaatgttttataaaagctctcgaaacctggagaactttggaaagtttggaaaagtcagcacgttttaatttgtagcaactcctggagagtttgctacaaattccaaaattcataaaatacaaacctataaacttttatgcagacttcttttaaagtcaaaaaaaaaagaattttcgccaaaaaagtttagaagtattaaaaaaccagcttttcaaaaatattattcacttcatatacctattaggtttgtttgtttgtttttttgtgatgcatagttgttagttagtaacgtaaatcttaaaaatatcggtcgattcttattctgttagaataactcaaatttaaaatattgggaaacaaaagccctctttgacatcataaaatatggaaaattagtgaaaagtagtcggaaaaattagcattttttcttcagaagggtctatattggactacgtgaaagatatcaatttacaaaagactgtaaaatgttaagcaattaaaaatgaataacttaaatgtagacattttttgatacctttcaccgttcaaaagctacaactccaagaagcacgcaaactcgaacgaccactcgaaagcatatgaatcgaccgatattaataagtttaacattactcactgactactatgccatcacgaaaaaacattaaagaaaacactgagaaaggaaaaaaacttaacgaacaccctaatagttctcaactcaaaaaatgaggtcaactgtagaagacattgacttttaaaaaaaaacttacctcaattgtattcaaaacctcctctgcaatacggggttcggaataagttttccagaaatttccgagaatctgcttgatgtctgcgaggtgaggagttagaaattggatgcttaaacagatttcaaaaactcgtcggcacgtctcattcaaataaactattggacgactggaggactctgcaaaagttttaactgggttgaaagcaaaaagcacaaaagcttgttaagttttgcaaagacaataagtaggttctatcaaccaaccaatgacgtcatcagcaaccggcagctgaatgtcttccccacttgcatcggctatcacttttccaatgcgtcgaaattcgtgcgtgtacagtgtctagaatattgatatttattgtgtaagttttactatttggctcattacctcaaaccataatggtagatacaccccatttgagaaagctttaataacagcaagaaattcattgcgatgtggcgagacctgtaaattgagctgtttcgcctatgttttcctttttcgctgcatataatttttgatgccttctcattcactttgaatttcaccaaatttagcttttccttggtcatattcagtttctgacatacagtaagagaatttgttcacctcaaagttaaagtatgttactaccacgtttctcaaatgatgttgtcggtttctgtgttttattttatagatagtcagttagcatcagtgctgtacggctctcggatctcggcaaaagccgagagccgaatagaatgatgagactcggctcttggcgagagccgagagccaacaccaaatttgaactcggctctcggctctcggctcgcgtcgagagccgagttttttcaagagccgcacagcactggttggcattttatctctactagacttgcatacaagaataatgtttaatagatctggcgctcagcaaccgtgtcggtttacgacgcaagtggcaaattagttttaatagctagaccatgtagcaaatcaatgtaagaataatcttgagataaaattatatttaaagaatttttgtttcaagttttcaaattttttatcaaagtgtgactgattgacaacaagactcttacaattagagggtgcatggtgaaatttttgaaaatagtccatttgttcaataaattgttgacacaaatcattcaactcaggtttttgcaataagttttaaaagtaaaagactagttgataaaatttcaaccaggcacaattacagtaccaaacctatagaattttatagttgtttgtgaagctattggttatgtaaatttttgtttgacggccttgttccgaagagggcaagactaatagaggaagtacggtatttaatagtcgctctaaaaaacatttctcggaccaaaacaacgtggatcagtaaactcgacacttgaattaaatttgaaaattctcataaactttctaaaactaaccgctttaacattatcttccaacgaagcaaaatgaatcgcgatttgcttcgattcttcgacggagagcaccatttcgaaactttctgaaatgtaatttaatgaagtgaagttaaacacgaattaaaaaaaatggatgtcgatgctcaaagacagttgatattggtaataaataaagagaatggagggtgttgtgcaatgcgtgatggcggaggtggagccttctgtgcctgctgacctctacacaaggagggtattacgtcacgaacaaataggctagctgtatttcttttttctttaaagctgtgagaggtatgagattaccatctcatttagactcatccattctaatatctcgaaatagcaaaaaaaaaaacaaaaagtgcgcacacctgctatagaaccaaaaattcgttgcaattttttaggaatttttggctaagaaatgatccaagatctgtttctagagtgctgtgcagttgatatctaatccgacttatataaaatttaaatatatacatcaaaataaaaaagggttaaaaatctagatgttgccgctcaaagacaatcgatatttaacaaatggtaagtggagagcgatcagtagagagaatggagagtgttttgcgatgcacgatggtggatgttgagccatctgtacatgctgacccctacataacgcagaaaggggtattacgtaacggacagataggatcgctgtgtctcttttctctttagagctgtgagagttatgtgatcaccatctgatttgggctcacccctgaatctcacgaaccttttttaataactcgaaatagaaaaaaaccaaacaatgcgcactatacccacaaaatttttagttcagatggcagctttcaaatatgaaaatacaatcaaatttcacgatttctatatatgtattagcatgttgattttaaaatacaaatattaggaagttgccatcttagtaggactcatccctacaatatcacaatatctgtctactgacacgaaataatacaaagaaataatttatttaatgtttgcgaaacgtttttaatttggttaaaacagttaacacagttaacgtgttaacacagttatttctaattgcttcctaaaaaaatcatttaaaggattttttcgccgagaaaagagttattttaacagagatatgtttctagagagctgtgcaattgttatctactttgaatttgaattgattaagaataaaaaagatcgaaaatctagattttgctgctcagagacagtcgatataaaccgaatggtaataaatagacggaataaagtgtgttgtgcaatgatggaggttggtcagaataaccattctgggcgagttgaccctgctcaatgcagtaagagatattacgcaacattcaaaagtttgacctttatcttatgaaatacaattaacaaaagtctggaatgttcaattcagagttaagatcaaaaaaacccgccagatgtctgccgctgtaacgtttttcaaggcaatttttgtgaaataaaacagcaggcaatgtgaacaaaatcatggccaacattttgttagttgactgtttttgagaacaatgtttcaatgtccacaattgcgagatattcgattggaattggttttctgaaaaataggtttaggtttaggcatagcattggaataggcttaggcatagacataggtatatgcataggcttagacttttgcgtaggcttaggcttaggcttggaataatcaacatatattttaaaaatagctgaaagtaaaaaataattttagtttttgattaaagggggagtagagtttgtgggtattttgtttaaatatacccaattccaaaaaaaattttgagatcaaaatttctttaaaaaagagcaaaattttgctaaatctgaaattttgccaactttactttgttgcagccgctaaaaattaatttgtctgaaattatcgccatttaattcatatttcggtaattttgataattttatacgcctctcggtttaaaatgtgtttcagtcaaggagttcactcgcgataaattaccacaatataaattattgggtcattattttagaaaaattgacttccagtggctgcaacaatggaaagtttgcgaaaattcagattttagcaaaatgtttctatttttttttcgaaattttggttatcataaaaatgaaggttgaacttcagaatttcccagaatttcaagtcgaattgagaacatgaaatttgaccgctgaaatcatttgtatagttttttttcagtcgcatcttttcagtacccatcaattttcacttgtgtcgaccctttttgatcagtaatacacccattctccactttgaatctttgcaagcaaattcccctagatttctcgagttgaaaggtttgtctgaatacatattcaatagtttcaaaacgtatttggttctgaacacctaatgttattattttcactttttcaaaataactaactattaccattttattcttcaatattttgactaattgcaatttaggtagctaaagaatgcctgccaaaagaaaatcgatattaaccaaatggcaaagaatacggagaacggagggtgttgcaccatttacagcccgtgcgacggctatcttgcctgctcattacgtcagaccgcgttccgtattgagcagaggtcagccttttgcacacatggtacacagattcatcttcgtgtggaaggctattctaacggacggagaacaccctccactctccctatccattgtcatttggccaatagtgactgtttttctaaccttactccattaaattttacttcagaaagttgcaaacgttcaaatggtgctctccgtcgaagaatcgaagcaaatcgcaattaattttgcgttgctagaagataatgttaaagcggttagtttttcactgtgtctttttgacccaaaaatgcatcacattttgtttacaaaattttcaattttgacggtagtttttttactgtaagatgagaacacaattacagtataatgtagattctactaattaagtgtaactagttttatacaaaaaatttggccaggtccttccacaccgcgacgagatgattgatattttcaaaacatacgaaatcgacgcttattcagtatggtttgaggtatggatactgaacagtaacggttacacattaccaatattctagacacaacacaagctcgaactgcggaacattggaaaaattattgccgacgcaagtggggaagacatttaattgccggttgtcgatgacgtcattggtacgttagatatttttaaaggtggtgtagtcgtattttttattgctttatcattttcataatgaaacttcttgaaaacttctcaaaaagagttatgacggctcaaaaaacggcttaaaattagataaaatttgaaattcgaccaacttgtcaagcggctggaaactgatttttttaaaatcaccgttaaattttgggtgtactcttcaattatcttgcgtttccaactttgtttaggtattttaaagacgatagacggcgtgatttggttaaaaaaaattaaaaatctcgccgtccatcgactttaaaatacctaaataaagttgaaaacgtaagataattgacggagatttcaaaaaaaaaagttagcttccagccgcttgacaagccggtcaaatttcaaatttcaactaatattaggccattttttgagccgtcataactttttttttgaagagttttcaagaagtttcattaagaaattcggtgttttcagttaattttgagtctcataaagcaataaaaaaaattcgactacaccatctttaaaaaccgcatctagaagaatacattgattgtgtcaccttatgattttgcttctgaaaatgtaatttttattctaaaggctatcactgggtataatttgacccccaatgacgccgtgcaagaaatcttaggctcggtataaactgtattttaatagaaaacacaccgatgagtcgagctgaatacacgtgtcatttaacttgatgaaatcactgggagtactgtgggagttattgccacccctaaaattcaaacataagtttttctaacgatttcaacgtttcaaagcaattttgaatagattgtaatttttgttttaattttgaacttcaacgttttccaagtcaaaacatttgcagcaccgtccatctacccaagggcttacttgaatgacacgtgcaaacgactttttgaaatcagcacagctgttgaatttctgactccttacctcaaagacgttaagaagatactcgaagcttccgagtttgataaaaagattgcaaaaaaggttttgaatacaattaaggtatgtcaaataaagatttttttactaataaagattatacggtaagtggagtagcctatggtaaaccctatccgtaaaaatgtcttcgtattttggttttgcattttccccagatgaacttggtttcggttcgagtgttactatttatttttgcttattttgataattagattaaaggtggtgtagtcgaattttttatttctttattagactcaaaattgcctgaaaacaccgaatttcataatgaaacttcttgaaaacgtttcaaaaaaaagttatgacgcctcaaaaacatggcctgaattaggtaaaatttgaaatttgaccgacttgccaagcggctggaaactgatttttttgaaattaccgtcaaattttgagtgtactcgtcaattatcttgcgttttaacttcatttaagaattttaaagtcgatggacggcgagatttggtttaaaaaaattaaaaagtcgccgtccaacgactttaaaatacctaaatgaagttgaaaacgcaagataattgacgagtacactcaaaatttgacggttatttcaaaaaaaatcagtttccagccgcttgacaagtcggtcaaatttcaaattttaactaactttaggccattttttttgaggcgtcaagactttttttgagaagtgttcaagaagtttcgttatgaaattcggtattttcagacaattttgagtctaataaagaaataaaacaaattagactacaccacctttaatgtaaacttgtcaactcaaattttactacactcttttttattgtttttcaagaaatccatactaaattcaaatgtccaaaaatatggcgacctagtggtttactttgctcactcccaactatccatgtgtcctgttaataagtgatttttcagaaattcgacgtggtcggcttgatggaaaacgtcaaaagggtattacgtttcatggatgaaaacgtgtgctggttcgacaaaacgtacaagtcgtggcaaacaattcgaaaagaaaatgaagagttgataaaatctgggtatgtttcaagattgccatcagaagagctaacactttttgtagccaaatcttaaaggattaaaagccaatagttttataatttcatttttaacactacattattgcattattacagaattgaaccaattgcgactgcggaacgatactgtatacaggttagtaaaactacgtttttcagtactgacacgcgggcggaaatgtgcatttgtgtttccttagtttacataaacttactacacacgactgtactacatacactaacttctacagtagtcacaactttaaataagagttctctcgaaaacggctcaatttaaaaaaaagatgtatgtatatgaaaaataattttttgagcgcgtggcgggaccatttcgtataaatgcgccctcttttagagcggtagaagtgtcaaaaaattgcagtgaaacattttgaaggtggggtaccgaaatctgtgaaatattattaaatgactccaaattttcccctgattccgaatatcgatgtgaaaaaattcaaaaaaaattcccttttgctattaaaatcgatatataattttttttgaatttttccacatcgatattcggaatcagggacaacttttgagtcattcaaaaatatttgcccggatttcggaaccccacctttaattttcaaagtcatagatcaaaactgattttcctttttttaaaatgtaattgatactgaaataaaaataatatttttgcaggaaagagaagtgccagaagtctcatttacaggccgtgtacttccaaagtgtattgcgtaagttgaaatgttttgaatttctgagtatccaatattttaagagacccaaagaaatatagttttaccttttattgcaatcaatgttcgtactgcaacaccaacatcgattttttgaatgttcacttctactacgaacatgccaaaagagagcaactgagcaatttggaattgtaagtggtttttgatccaaactgaaccccttttctttttcatttctaaacaaacgttgcattccgtgagactgctccgttcactttacatatagtattaaatgagaaattttttttcaaaaagttccatggacactttcagaacataaaaattgtaaaacaatcattgttcaaaggtcctcttcaaatggtcaatgttttattaaaggtggttaaaaaccacttatatggtcccaaaatgacagaatatcatgataaaacttttcaaaaaaatttggaaaaatttttatttactgtcaaaaagtggcaattactcagtttttgccactcataattttggaagtcgaccaaaaaaacttattttcgacttttttaatgctttaattttgtttaaattatttgtattaaaacattgtaggggtcgaaacatacctacattgctttggattccctcaaaagctcgtattttttaaaattttggtaaattgccaaaaatttgaaaagtatgagattttggggaaatccaaagcaatgtagaatgtttcgacccctacaatgctttaatacaaatcatttaaacaaaataacagtataaaaaaagacagaaatttttttggtcaacttccaaaattatgagtggcaaaaactgagtaattgccactttttgacagtagataaaaaaatttcaaaaattttttgaaaagttttattatgatattcggtcattttggcatcatgtgagtagtttttaacactttccccagtggtactactccacctttaacttgaacttggcgagcaaaccaaggtgtgtagccggaaaaaggtaattttaaattagcttttttgcagaattgaaaaaaatcataaaacaatttacacgacacattttataaattttctgaccgttatatctgatcattccgaattattcgattatctgtcatttaaagctttcaagaaatcactaatcgactctattgcacccttaaacttaattagtttagttaacgttattattagtttatattcacttaaattcatttaaaaatatttcgtcgcattcatcaaatggaaattaggtgcagaaacgcaggaaactcaagaaaagttatttatttcacattgttgtctagtcgctatgatatacaaatgttaattcgtacatgcatcatgttcagtaaaattattggcattatatatatatactaaagttttaaaataaaagaaatcttcagagaatcttcccaacgagaacgtcttgtcgcgctggctaatgatcttacaggcctatgtgacaacttcaaatatgtgagtcttacttttgttaatgttaaagagattatttccattacagaccaaaccgttccacaaagatctggaacactgcgatacttggagtttttggtctctagaagtatgttgaacgtgctcttgttgcttttttcaattgattctctttttcaggggctttacaattacgacatggaatctcttgcaagaatggcgcgcgaaaatgctggaatcgagataggaggtaagaatttgaaaggagatttgataataggatagcggggcacggtggttcacttgctagatgggtgcaaacgcgctccactgaacaaacgtgtataacttggccgggaagtaccaaatcaaaaattcatcaacaataaagataaataatttatttgcggtcatttcttatatgcatcacaaaatcgattttgtgatggttttcgagatagtagccaatataggtttcaagactgagtatcatgaaccaacccatctagtttctgtgactactgtagaaattagtgtatgtacatccgtgtattgtaagttaatgtaaactttaagaaaaacacatttccgcccgcgtgtcagtactgaaaaatgtaactttactaacctgtatacagtaccgttacggagtcgcaactgattcaattctgcaataatgcaataatgtaattttcaaaataaaattaaaaaactataggtttttaggaaacgctacagttcttctgtataattttaaaatgttaggtaggcacacgtggtgtgatctacataaaatgcgggaatttttctcccagaaaaatgtgacgtcagcacacttttagccatgcaaaatcatttgaaaagtctgcttctcttctcccgcatttctcacggattaaaacaaaatggtacactttgacaccaggcatccacagtcaattttagagaattagaatggtgttgtacagaattaagcaatttttgaaaaaattttaaaaaaagacgttgtaaatgcggagaattttctgtagatcatttttcaaatacatcattttggtacttgtgcattatacccccgccattttaaaaattaaacaaatttccattaatttaaattaaacgtgatacccatttttctcattgtgcttaggaatggtgttttcctaagcctaaaagtccacacatttttattttgtaaattaaaaaattattttttaaaatggcgggggtataatacacaagtaccatcattttttctgaaatttagccgttttcgagataactctcatttaaagttgcgactactgtagaaattagtgtatatacgtaacgtttgcctcgccgtgtattctcaattagtgtacagccacgtggtgtcaggatgtcccatcacggtttgatctacaaaaaatgcggattttttttgcgcaaaaatgtgacgtcagcacgttcttaaccgtgcaaaatcagtagagaagtctgcgtcgcagttctcgtagatctacgttgatcaaaccgacatggcacattctgacaccacgtggacaacctcattgatctactttaaaagccctatttcggttcattttgaagctatagtcaccaaacaacaaagtgggccacatttatgggcaaaaactcgctttttgcacacctggaaattttcaaaccgcgagaaaagacttgaaaattctcatttcctagttccataccaattttttatttttcaaaattgtaatgctaatttcctgagaaccttacaaacattattattaatttccaaaaatccagcaatgcctcctccgagtaaaattaaaatcgccgagtgtctctatttgatcaaatacaacattctagaggtaacagtaactataatttcttattcacaactttgcctgattacagataacatattgctccctcgagttccataaactaattcaatcttctgattatcacaaaaaattgtctagaaagattttcgatataatcgatgatatatgttattttaacttttacaccggattatcaatgcgtttcttaaaatcaaatggaatttgcattgagcgattcagagtggagaatgggtgtgccattgatcgagaaggttcggagaaagtggaaatgaatggatggtaagagattgcaaaggaatttaaaataataagaattttattttagcaaccgaatcgtctgtactatgtgccccttctcataccacaatgttaccgacttcaatcttcacttctttttcgagcattacccgtggcagctctatgagtgagtttttttttaaatacccgttatttgaaataacttcaacaccaagatcaatcaattttcaactagaaaagttttaatttcgaaaaatgttgaggagcaatcaatttgttaatgttttttaaagacaactttaaccttaacaatatattcagagaaacctttcaattcgagaaatctaggggagcttgcttggaaagattcaaagtggagaatgggtgtattactgatcaaaaaggcttggaacaagtgacaattgatgggtactgaaaagattcgactgaaaaaaaactataaagtaatttcagcggtcaaatttcatgttctcagtgcgacttgaaattctgggaaattctgaagttcaaccttcatttttatgataaccatagcgaatgggagatcgtcgagttagtttttttttagtcatttgaatattaaagtgacaacaatttttagaaaacgactaaaaaattgattgatattcaaaggggtagtagtgtttgtaggtatttggcccaaacccacagaactttttcgaaaattttggcaatttaccaaaactttgaccggaaattatgaaaaatctaaaaaattttggagtgttttattatgatattcggttgttttcgatcattataagtgcacttagacaaaatacccactggcgctactccacctttaatataaaaaacaatatttttttaactttccgatataggttgattaatccgagcctaaacctaaacctatttttcagaaaaccaattccaatcgaaaatctcgcaattgtggacaatgtagatgagtcgtcgtttgcaattatttaatgagttgttgtgttttttcttttcttttcattttgagcaattacattatatatttctactctttatcaaaaaacttactataattgattttaaacagcattttacccgttattcatgtccctaacactctctcattggcactttcatgatctaattaatcaacttctacagaacatttcgttttttcgcttgtaactttttcgtatatttattatcaatctcatctcaccatgatgtcttttttcatcacaaatataactataataaatcaaatcatatttactgtttccaactctgtgtgctcctactgcgaactataaactgtacagatgtattgttatatcaaattttcaaaaacttttttaaaaatttttccgaaaaatgtgaatttcctccaatttatagttatctacaaaatctcaaaactgattttaagtaagtaatagacgctgaattaagaaaatattttgcttaaaggtgggcaaccttctgtgagttttttttggttagtttcatagttagaggactcaaaattgatcctaaaatactttaaatgccctttttcaatttacagtaattttgtacaatttccaaaaaaaaaaatttttttggccaaaaaaaaggctgaaaaatcaaatttgggcaaaaattaaaaattatctaaatttgttaaaaacgggtaatttatataaaaataatgcaaaaaatctaggttaaacccatcaaaaactattaaaaagtggcaaaaatggccaatttatggccaaaaatcacaattttgaaactcccataaaatggttaattttgtagttactcaaaataggactctaataggactcaattaggactcaaaattgatcctaaaatactttaaatgccctttttcagaatattttagctttgtacatttttcaaaaaaatatttttttgcccaaaaaaaaggctgaaaaatcaaatttgggcaaaaatataaagttgtctaattttgttaaaaacggacaatttgtatagagagaattcagaaaaactaggtttaacccatcaaaaattagtaaaacgtggcaaaaatgggcaaaaaaatggacaatttatggcaaaaattcacaatttgaaactcccataaaatggttaattttgtagttagaggagttaggggggattagatggctgaaaaatcaaaattgggcaaaaataaaaagttgtctaattttgttgaaaacgggcaattcatgtatgctgaattcagaaaatctagatttaacccatcaaaaactattaaaaagtgattgatcctaaaatacttaaaaatttccctttttcaatttctagtagttttgtacaatttccaaaaaattatttttttgccccaaaaaatgtcaaaaaaatgtttttttttcgatttttttgttaaaaaaagtaattttcggaaaaatttatcttctgaaaaagcaatacattaaataatccaaaaatttaaagaaaaaaagagaaaaaaaagaagaataaataaatagaaaatagaaatcaaaaccatttttttagacaataaataccagaaaatttggggggaattatcgatttttcccccacataaaaacttaaaatcaggaaactatttagcgtgaagctgtggtgccgagattcggacttttgttggaagatttcgtgatgctgagtcatctgataacagtgatttgattaatgccgcctggcgatccgtacgttgacgctgaaattttgaaattattgatttttgggttattatcgattttctaaaaaaatcgataatttttcttgcaaaaattattgattttttcgaactttttttttgattttttcgaaaaattgttgattttttagaataattattgattttttaggagatattgtcgattttccgaattttcgattttttaaaattagtgattttattattgattttttcaaataattatcgattttctacaaaaaattattgatttttctgaaaacctatcgatttttcatgaaagtttcgattttttccagaagattattgattttcggataattattatcaactttccgtaaattatcgatttttaaaaaaattattgattttttttgaataattatcgattttttcgaaaaattatcgatttttcaaataattttcgattttttagaaaaattatcgatttttaagaaaaattatcgattttttcaaataattatcgattttttcgaaaaattatcaattttttcaaataattatcgattttttcgaaaaattatcaattttttcatataattatcgattttttgaaaaattatcgattttttcgaaaaattatcgattttttcgaaacattgttgattttcaaaaaaatcaataacttttcatgcaaaattaattgattttttatccatttttttcgaaaaactatcatttttttggataattatagatgatgtcagagtgttcctaattcggtttgatctacgtagatctacaaaaaatgcgggagaatagacgcccagattcataccttttctgggctaaaaattcccgcattttttgtagatcaacccgttatgggacagcccccctggcaccattattgattttttttttggataattatagatgtgttaccaaaaattatcgatttttgggttattatcgatttttccaaaaatcgataattttttatgcaaaattattgattttttttttgaaatatccttaccgtaaagagctcaatcgccgatttcgtagcttttccacgttttccgatacccggagtgattttgacgcgatatttgtacgttgagagtgcctgaaaatggaaaaatcaaaagttttttcggggaaaaaatgaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcaggccaatttatgactgaaaatgtgaataaatacagtttttatgccaaaaatctgagtagaagcacacaagtcacaggggaaatatcgatttttgaggaaattttcaaaatttttgagcctctgagagctaaaattattattattccattaattgtgagtttttagcaggaaaaaaaacacgaaagatgagctaaaactgtatttttttaagattcgtggcctagaaatgaaaaaaaaattaggccaccaatatttttctccagtttttggctcgtttttccccgaatttacactagtttcccgtaaaaagtaccgaatttaagtgaaaatttcaggattttcaagttataatccgttttattgtcataattaaacatagaaatccaaaaaaatcgaagaaaaatggcttgaaaccatcattttcagattggtggcctagaaatcccaaaagttaggccaccaatttattttgtgccgaaaaaaccatttctagtggtaaaaattagtgagaaactcaatttttaactgaaaattcaagaaaaatcactagaaatgtgaaaaaaaatcatttaggagcaaaaaattacgaaaaattggaatatcgcgggtttttacctaaaaatttcgaaattctaagacttttttgccaatttctccagaaaacgaccagaaaattcaaatttttcgccaaaaattcgggtcctaccacgaaagatcgatacacattcgtggcgggacccaaaatggcagcttttgtgccaatttaaactaattttatataaattatatgggccaaaatgacaatttttgccgattttcacaaattttggctcattttctcaaaaattgtgatcaattttcagatttttgctcgaactcctaattttttggtgaactttgtcatttttcacattttttttctaattttcgattattaggactattttatggcccaaaattgcaagcttgccatttttcggacaatttctgccgtttttggtcatttttccccaaattttccaattgttggatcatttagtcacaattttacagtttttggccaatttctgccgtttttggtcaattttttgccaaattttccaatttttggatcatttaagtaccgaatatggcgcaacgacgggaactgcaaagagcagtgtgtcctcgtcaagtggctgagccgtaagtgttgtaagaatcgatagctcctccaaattcgcctccttatcgtcttcctcgggctcttcggcttcttcatccggattttctcgcttttcttgaattttcggcttaaattcctcgattttcactggtttttcggatttttcaggcctctcgacaggccgttcctcaactttctccacaatttttccctgaggcttgagcaactccttatgcagctccaaatcatcatcagtctgatccttatacttcattttcgccagcttctcctttctctgacgccgtttttgcgtttttgcactcggaccgcccagctgctctttgagcttctcctccaaatacaattgggtggttttttccgcgtttttcggcaatttttgagcattttgcgagtttttaacgggattttttggtccaacttcgataagtgtcatttcttcggcctcttcaccacttggccgggcaattttcacttcgatatccggaaattcatcgttttcagccggattttctgggattttcgccgtttttttcggagaatcttccattttttccccgtcttcctccgacttttcttcagctttcgatttctctagtgccacgtgtctttcgatagattcctcatccattcggaacaaaattccgagtcccatgacaagttggctcggtggcataaaattcttctttcctcggatcataaagcttccagaaggtaggtattcgccggtaggtgctgtacgggacacttggtcagggtggacccacctggaaaaatttggaatttttttggaaaaaatttaaaaaaaaaattttttcgaaattttttttctaaaaaattttttttagaaaaaaaattaatttcgaatattttccaaaatatgaaatttttaaccattaattcgaattctgcacgtcaccagctttcaaaaaacacccatattgcccatattccacaaatttttgaaatgttgggtaaaaaaaaaacacgggggttactgtagccccgatttcgtggtgggacccgactttggagaaatgacgtggcactggttgtatgaatgtcttaaatgccttttttcaggcagaaaaatcaattttccttctgaaagttggggaaaaattcgaaaattaaacaattttttaaataatttttcttaaaaatttacccgtttttctcgaaattttgattttttcgaaaactaacatcaaacttcgaattctccacctcgccagctttcaaatgacacccatattacctatcttccgcaaactttcagaaatttgggtcccaccacgaaaatggagctacagtaacccccgattttcgtggtgggacccacagctcaatttttgggcaaaaatcttgtttctccaggtcactagcttcgatttgaccccccatattgcctgtattacggcattttctgcaaatttgggtcccaccacgaaaacgcgggggttactgtagccccaatttcgcggcgagacccaaaatcgtcggaatctagtcatgatgggggtcattttgaagctgatgacgtggagaatgtgaatttgcagttcaaatcgaaataaactcaaaaatgaagaatttctcgtgattttcattcatttttccatcatccaccaaccatgcgctggcggttactgtagcctcccacgcattcgagtaacaaacagccatttgagcggcctctgtcaaggttttcggcgggatttctgcgtcgaatgacttattacgaatgacaactgaagaggcaccacgaacatctgcatgcatatagatatcattgggacggaggtatctggaaaattgaaaaattagtgaaaaatccaaagtttttcgggaaaaaaaaatgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttgccagaaatacggtatttattcacattttcaggccaatttaaggctggaaatgtgaataaatacccgtttttatgccaaaaatctgagaaacgcacaagtcacaggggaaatatcgatttttagaagcatatagagatttaaactgggaattttttgtcagtttttggttgaaaagtgagttttcagacaatttttttttgattttaatgctcaaactacatagaaacctgaaattttgctgtatttctgcaaattttccatgaatttcagctcgaaaaatcggcttttcgtataattttcagtaattttctattattaggactattttatgggtcaaaattgcaatttcgccatttttcagtggaatctttttttcgataaaaattctttttcagcaattttcatgctaaaaattttctccgtttctccgtttaattttaccctttatcaaccttttccagggcttctaactctatttttgaatttctcgggttacggtagcgccaaaagtacgttggcaccgaaccttacgacaattagtccaaattggctgaaaaccgggttacgagggtgaaaagtgatagagaagtcgaatttcgtattaaaaatctgtgaaaatcatcgaaaaatgatgaaaatcacaagtttttcgggaaaaaatgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcaggccaatttaagactgaaaatgtgaataaatacagtttttatgccagaaatctgaatagaagcacacaagtcacaggggaaatatcgatttctgaaaattcgagaaaaatcgatagaaatgtgagattttctcatttttccagaaaagtccaaattttgcttcgattttttgaaaatgtgggtcccctaccacggaaaatcgggttcacattcgctgcgggacccaacatggcagctttttgcaaatttccaactaattttctataaaaaaatgggcaaaaatgataatttttgccgattttctcaaatttcggctcattttctcaaaaaatttcataatttttcggagattttggcaattttcacatttttgttcatatttggccaaattttaccattttcgctggcttttgcatattttgggtcaattttctcaaatttccaattattaggactattttatgggcaaaaattgcaattttgccatttttttttggccatttttcgccaaattatccaacttttggatcatttaattttatttgaaaaaaaatttttttcgactgaaatttcatgattttaactaaaaaaagtagcaatttttcctcattttcacatctaaaaaccccaaattctgcagttttctccatttttccaggctaactttttaaccaaaagctcattctgttgagcatctcggccggcaacgacaataaatccttcggaactgataaaccatcgaaacttctcgaaccacattgattttcgtgattttttcacttcgacgacaattttcacttgttccagagtggatttcgccttttcttgggcatttttaatggctttttccgatgaggcgaccgtttttttcactttttctgctgccgattttttgtcgacaaaatggcgttgagcattttttgatgcgttcagcgagatgtcgattggcacctgaaatttgaaaattgaaaaaaaaaaaatgtttttttgaaatttttttaattttcgaaaaaaaatttacaattcaatttttttttaaagtaattttctctaaaattttcagattcagcataatttttcacaccgaaaaatcaaatttttaggccaaaattcagtagttaagtgtttgcgtacttttggggctacagtaacccgcaaaattccaaatttttgagaaaaaaaccgcggaaaagtggaaaactcgattttttttgacagttttgaacattttacaaaatttttacaaaaaaaattgtaaaaattttgaaaattccaaaaaaaattttttttttgtaatttcgaaatttttttttcaattttcgaaaaaaaaattgtccaattcgctttctaaccgattttccttaaaattttcaaattcagcgtaatttttacaccgagaaatcgaaatttcagcccgaaattcggcaatgaagtgtttgcgtacttttggagctacagtaacccgcaaaaattcaaaattttgagaaaaaaaccgcggaaaagtggaaaatcggtagagtttgagccgctgaattcgaatttttcagctaaaatagcagaaattcacaaatttttgagttttcagcgcgacttttaccttcaaaacctcagcttcatcatcatacggatccgccaggctcatcataaactcattattttcaaatttaaatgaatcaatcgattttgcgacaggatccccatttccagcagctgtttttcgcatttcttcgatcgtttgccatgaaaattgattggcgagggcacttctgatgagtagaagagctttttcgacgagttccgtgttcaaaatgatacgattcgccatttgttcacgttgagattgggttagctgcaaaaaaaatcaataaatttctgcgaaattaacttgaaatttgaaaaaaaaaattttttttcgaaaattgaaaaaaaaattttttttctttaaaatttcaattttttaaataaaaatttacaaaatcgagttctccacgtcaccagctttcaaatgacacccatattacctatattccgtcattttccgaaattttgggtcccaccacgaaaacgcgggggttactgtagccccaatttcgtggtgggacccgaaagcctattattcggcaaaaaccttgcttctcagcgtcattagcttcaattttttttttgaaattttgggtcccaccacgaaagtggagctacagtaacctacaattttcgtggtgggacccaaaattcaatttttaggcaaaaatcttgcttctcagcgtcattagcttcaatttgaccactatattgcgtgtattaagtcaattttacgaagttttgggtcccaccacgaaaattggaggttactgtagtcccaatttcgtggtgagacccaaaattcgagttttggcaaaattatattaaaatttagattctcctcacttttagcttcaatttaagccccatattgctcatattccatgaattttcaaatttcgggtcccaccacgaaagtggagctacagtaacctgcgattttcttggtgggacccaaagttcaatttttcggcaaaaatttcgattcttcgcaacataggcttcaatttgaccactatattgcctatattcagtgattttttgaaaatttggggtcccaccacgaaaattggaggttactgtagccccaatttcgtggtgagacccaaaattcgagtttttggcaaaattataataaaatttagattctcctcacttttagcttcaatttaagccccatattgctcatattccatgaattttcaaattttgggtctcaccacgaaaatggagctacagtaacccgcgattttcgtggtgggacccaaaaatgttaaaatttgacggaatataggcaatatgggggtcattttgaagctggtgacgtgggaaattcaaattttcgagtgaatttttgatgaatcggaaattgaagcgcgatttttcagcgtttttctccaaattttcagcaatttccgccgcacctgcaacgcttcaatccgatccttctgatccttttccacattttccagctttttcaacgcctgtttctccatattaaccgctttttgttcctgtttctgagtttcaattctcgagtagaactcgtcgaccgcttcgcagaacgatgaaagctctttggacaatttagcggtgaattccattgaaattgggttgaaatcctggtagatttggattggagtcgagattggagctggaaaattccgaaaaatccaaagtttttcgggaaaaaaatgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttgccagaaatacggtatttattcacattttcaggccaatttaagactgaaaatgtgaataaatacagtttttatgccaaaaatctgagaaacgcacaagtcacaggggaaatatcgatttttagaagattttagggatttaaactgaaaattttgcgattttcaagttaaaatcctttttattcccattatttggaaaaaatcgctaaaaatggcctgaaaccatcattttcagatttgtggcctagaaatcccaaaagttaggccaccaatctattttgtgcgaaaaaaccaatttctaggggtaaaaatgagtggaaaactcaatttttaactgaaaaatcaagaaaaatcactagaaaactgagattttcggttaaaaaaaaatttaaaagcaaaaaatgccaatttttccgtgaaaaatcgattttttcaccaattttcctactcacaaagcacttctgagtagctaataaatcccaacggtttatgcagaaccgtatcccaaacatcttcggtagccttctgaatttcctcaaatttgtgcaaatttccgtcgaaaatctcggaaatttcgctagaattcttaattttcgtgtcccatttcacttggcatcgtgccaaaatctccttagtcaccggatttccacattttgtgatttgagccaaaattcgtccaaattgctcttcttttccgtctggaatcccggaaatcgctagttttacgtcggaaatttccaatttttcgccagttttcgcagcagaattttcatcgtcggaaaacgtgaatttctcgcgtaccgcccatctgacagaggtatccttgtcggttcgaactctcaaaatattgagaattgtgagctcttggtcagtgagcacaacgtttccacggtcatagagctccacgtagaggcgattttcacgatcttcggtgccgaaggtgagctcgacgagccgatcgaagccaactactcggatggaggttaggctgaaaaaaaaatttgggcatttttgggcatgcaaaagcttgaaaaattggtatttttccgttggaatgaatttcagcaccgaaaatcattgaaaatccggtgaaatttaatgaaattatcaatttttttgcaatttccatattaaaatttggattccccgtctaattttaccctttatcaaccttttccagggcttctaactctatttttgaatttcgaggggtacggtagcgccaaaagtacgcaaacacctgctaggaaccgaactttacgacaattagtctaaattgactgaaaaccgggttacggggggtaaaaagtaatggagaagtcgaattttgtattgaaaatctgtgaaaatcaagttttttgaggaaaaatgaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgttggcagatataccgcatttattcacatttttagccaatttatgactgaaaatgtgattaaatacagtttttatgccaaaaatctgaatagaagcacacaggtcacagggaaaatatcgttttttagaagattttcgagacttaaactgaaaattttgagattttcaagttaaaatcgtttttattgtcattattcgagataacaatcgatgaaaaatggcttgaaaccatcattttcagattggtggcctagaaatccaaaaagttaggacaccaatctattttgtgcaaaaatcaccaatttctaggggcagaaatgagtgaaaaactcaatttccaactgaaaatttgagaaaaatcaatttttcgattttttttttcggtttttttttcggaaatcttcacgaatttctggtgaaatccggttttaacgagattttcttagtttttcgcttaaaatcgtgcaattttcaggctttcaactcaaaaatttggaaattcccgggttacgccccaaaagtccgcaaacaccacggctacagtaccccagacatttttgctctgaaaatcgagttttttgggtaaaaatggtgttgaaaacgaaaattgagctgaaaatagttaaaaattgcaacttttttttttcaatttttaactatttttagctcaattttcattttcaacgccaatttttaatccaaaaaaactcgattttcggagcaaaaaatgtctggggtactgtagccgtggtgtttgcggacttttggggctaccgtaaccagggaattttcaaatttttgagttaaaaccctaaaaattgcgattccaggggtaatttgaggcgctgaattcgaatttttaggagaaaaaatccagagaaactcgaaaaattcccgaacttttcccgaacggttttagtaccgtttctgattgatatgtttccgtaatttcatggaaaaagacgatggagtctgtgattttggccaatcatgaaatgtctgatgaagtcggacacctgattcgaagaggataacggctttttcgtctgttcgggataatttgatgagatatgtcttattgtcgatgtcgtaaacgttgttcacacgcattcctgcaagaaaattttaatttaggcagttgcagtcaaaatttcaaatttttattatcaaattcaaatttgtcacctatttttaccccttaacacttgttttcggggttcttagctcaaaatttgaattttgaggggtacggtagctccaaaagtacgcaaacaccgcacagcctacgacaaaatgcagaaatgctcgaaattcgacgaaaaaaaacgtcaaatatgggttaaaaatggcgggaaatttgaatttttcattaaaaaagccgaaaaatcggtgatttgttacaaaaatcagatttttctgaaaatttcaaattttctgatattttttgtcagaattttgaaatttcattagcgaattcgaatttcccacctatttctaccccttaaaacttgtttttcgaaattcaaatatttttcagaaaaatctcgttttcgtggtaaatttacgaaattattatttttttttaagtcaaaaattgaattttttaaaaaaaaatttcagaaattcaaaaaaaacaaccaattttcgatattttcagtcgaaatttgaatatgttttagaagaaattgaatttttcagccaaactgttggaaattttcaaaaaaaatttttttaaatttaacaaagaagtcaaaatatcgatttttcagccaaaatttgattttttttttctgaaaaatttctaaaaattcgaaacaaaaaaaacaaatttttgaattttttcagtctaaattttaattttttaaaaaaatttaaaaattccctttttaagcctaaaatttggcgggaaattcaaattttttagtaaaaaattcaaaattctagtgaaaaatcaatgtctataggaaaatttacttttttttttctgaaaatctgagaattttgctggaaaaaattagagattttcgaaaaaatacggatttttttgaaatattaaaaataaacgaattttcgatattttcagtcaaaaattgaatatttttttagaagaagtggaatttttccagccaaactttaaaaaaaaaaaaaaagtcaaaatatcgattttttagtaaaaaagttgaattttttctgaaaatttttgaagaaaaaattcgaaattgacctgaaatttaacggaaaattgcaaattttgtgtcaaaaaatcggaaaaccggaaattttcacccaaaaattcgttgaaatttcaaggccttcattccgagatgacaaactttttggtggcaaaggttctttgggggcatagtatccaaggagacaaaggatccagtagacaaactggggtgtatcttggggggcatatctttggtgacaacctttttttcaactagatttttatatgtatttttcaactaatttttgttcacatttttctggaataagatttttaatgcaattttcaatcgattttcggttataattccctcacaattgaatgtatgaacgatggtcttttgggaaaagctgtaaaacgtccaacttcagctccgaaggatcacatgggtaccttctgatgttctgatccttcagataagaaggatcgtaagggtacctcctgatggtctgatccttcagatccaaaggatcatgaggctcttcctgatgttctgatccttcagctccaaaagaacatgaggctctgcctgatgatctgatctttcagagccgaatgatcacatgggtaccttctgatgatctgatccttcggcttcgacggatcatatggatttttgacaaaatttgaaaaaaaaaattttgaaaaaaaactcgaaattttttttgttattcttcattctttaaagaatagttcaaatttatcatgataggaccgaaaactttcaagaaacagtataactatacatgataatcagcttctaccaaataatgataaattctccgcgatgacaaacttttgggtgacaaagtatcttggtggacaaacaaaaattaccgaaaactgatgtaaggaatagtgaaatagagtcctatggactattaaacatgttcagtaggtgtattcaggactgtccgtcaaaataaaaaaaagtttgtcagacgaagttcgaacctgggacctgtaggatgcaaagtgcgctcactaccactacaccagctatgcgaaagtcggcgagcctcatcgaaggctattataaaacttagttcgcacgagtatgatcgacattcaacaaacagtaatatctctcaacaagaatttcttcatggaattgaggtcatttgactatttttatcggtttttcaagttgagcatagggtcttttaattttttgagcatagaaaatcatgaaagctgcctgttccttgtatcctggatcaaaatagacggatctggcctaaaatatttcctgaaaagtgatcatttcatgtccatcgtgtgtttctctgtattttgaaccagaaagttgaacaaaaatgataatattatatcgaaaaatggaacaaataaattttaggcctaatcaaattttttccggatattgtttttttgtcatgattatatgtttttaaattttttataatgtgttttataattaaattcttcattatttccatcgtaatgtccttttcgatgcagaatttgcattaaatttcattgacagtttcgtgcgtcaaatagggtgcttcatacgcaaacgccaaagtacgcaaacaccgaccgtataccgtattcatcgaaacgaattaaattttttgcaacatctatttttcagctcgaactgttaaattttgcttgaaatgaaggaaataatgacgaattttgttataaaacacattataaaaaatttaaaaacatataatcatgacaaaaaaacaatatccggaaaaaatttgattaggcctaaaatttatttgttccatttttcgatataatattatcatttttgttcaactttctggttcaaaatacagagaaacacacgatggacatgaaatgatcacttttcaggaaatattttaggccagatacgtctattttgatccaggatacaaggaacaggcagctttcatgattttctatgctcaaaaaattaaaagaccctatgctcaacttgaaaaaccgataaaaatagtcaaatgacctcaattccatgaagaaattcttgttgagagatattactgtttgttgaatgtcgatcatactcgtgcgaactaagttttataatagccttcgatgaggctcgccgactttcgcatagctggtgtagtggtagtgagcgcactttgcatcctacaggtcccaggttcgaacttcgtctgacaaacttttttttattttgacggacagtcctgaatacacctactgaacatgtttaatagtccataggactctatttcactattccttacatcagttttcggtaatttttgtttgtccaccaagatactttgtcacccaaaagtttgtcatcgcggagaatttatcattatttggtagaagctgattatcatgtatagttatactgtttcttgaaagttttcggtcctatcatgataaatttgaactattctttaaagaatgaagaataacaaaaaaaatttcgagttttttttcaaaattttttttttcaaattttgtcaaaaatccatatgatccgtcgaagccgaaggatcagatcatcagaaggtacccatgtgatcattcggctctgaaagatcagatcatcaggcagagcctcatgttcttttggagctgaaggatcagaacatcaggaagagcctcatgatcctttggatctgaaggatcagaccatcaggaggtacccttacgatccttcttatctgaaggatcagaacatcagaaggtacccatgtgatccttcggagctgaagttggacgttttacagcttttcccaaaagaccatcgttcatacattcaattgtgagggaattataaccgaaaatcgattgaaaattgcattaaaaatcttattccagaaaaatgtgaacaaaaattagttgaaaaatacatataaaaatctagttgaaaaaaaggttgtcaccaaagatatgccccccaagatacaccccagtttgtctactggatcctttgtctccttggatactatgcccccaaagaacctttgccaccaaaaagtttgtcatctcggaatgaaggccaaatttcaatgaaaattcctatttttagggctaaaaactagcggaaaattcgaaattttcagtgaaaatccccctgttttcgagctaaaaatgcacgggaaattcaattttcatcctaaaaaaaagcagcaccttcgagcttcttgagctccgtcgtcgcggcgatcacatcgaccaaagtgaatcgatttttcatatttttccagtttttgtgctgaaaattgggctgaaaatcggaaaaaattgggctaaaaatcggaaaaaattaggctgaaaatcggtaaaaaagtgggtaaaaacctcgaaaaatcgccgaaaaaatcggaaaaaaacgacaaaaagtgcgggaaatttgaatttttcagtgaaaaattggggaaaattcgagaaattgatgacaaaaaatacgcgtaacattgggaaaagtggttggtaccggaggcgagaaaaagcagatttttacaaaaaaaaaaacatgaaaaatgggtattttaggtgaaaaacagtgagaaaacagtgatttttagctagaaaatgggtattttttggtggaaattgagttaaaaactcggaaactttgacatttttcagctgaaaatatatgatttttgaggtgaaaatcgccaaaaaatcggggtttttgggtgaaaaattcaaatttttagctaaaaaattagcaaaaatggggggttttgtgtaaaatttcagtcaaaaattcgaatttgaggtgaaaaaacagtgatttttaacaaaatttacgtggaaaatggggaaaaatggatatttcagaggtgaaagttgagaaaaattgggaaatttcagaaaggtttcgggtcggaaaatgaagagaaaaagaggttttttagacgaaatttgagtgaaaaatgcggaaattttcgaatttttcagctgaacatatgaaaaaattcgagaaaattgagatttttggggtgaaatttcagccgaaaatcgaaatttttcgaagaaaattggcaaaaattcgactgtttggacgaaaaattcgagttttaggtgaaaattaccaaaaaattttaaattttgggtgaaaatattcgaggagaatgggatttttaggcaaaattcaggcaaaaaactgcgaaatttcagatttttcggtatgaaaattggcaaaaatgcgacattttggacaaaaattctaatttttagcgaaaaatttgaatatcaggtgaaaatcgaaattttaattgaaaaagtggcgtttttgtgccaaaaaaaaaaaatgctttttagagtgaaaattacccgaaaattgaattttttttttggatgaaaaatagagattttaagcaaaaattggcatcatttccaatttttcagccaaaaattacgattttccggggaaaatgggcatttttaaagagaaataggggaggattttccggctaaaagttggatttttaagtgaaaatgggtgttttttgagagagaaaaatgaataatttaggcgaaaattggctgaaaaatgccatttttttaatgagaatttcgggaaaaaatggcaaattttcggttttttcagataaaaaagctcaaaatttatgagattttcaggtgaaaggtatgggcatttttgagagagaaaaatgaataacttagaggaaaaagggtaattttaagggggaaaatgagtgaaaaatccgtgttttttcaagtataaaaagtggaattcaacgagaattttgacagaaatgggaatttcttcataaattcctctctttttcggagttctgcagtctcgttgatcatcgatgatatctcgtcggcggcggttatgaatgaatcggcggtggctccggcggttatctggaaaattgacgggtttttcgggtgaaaatcgggtgaaaaatcgataaaattcggtaaaaattggaggtttttcaggtgaaaatcaattttcaaaaaaaaattcaaaaaaatccacctttttgtggaaaaaccaataaaaaagttgcaaaaattatattaaaaactcaaaaaaaaattagcgttaaaaaacgatagaaaaactgaaaaatgttggttttttctcagaaaatctataaaaacctcaaaaaattttggttttttgtccaaaaattggcagaaaattccaaaacttttcgattttcagagtgaaaatcaatgaaaaattcaaaaaaaaatcaactttttcgagtaaaaatcgataaaatatggaaaaattatagattttttgctcggggaaaatagggaaaatccataaattttataacgtttttcaataaaaaatgacattttcccaactttttgagcaaaaatcaaaaataaaaatcgcagttttcatcaaattttgcaaaatttcgcaatgaaaatagcacagaaaatcgcattttttgtgctatttttggagccaaaaatggaaaattggaacccaaaaatgagatttttcactgaaaattcaaatttcccgtatatttttaccctttttaatgaaaattccgccttttaagcgtaaaaattgcataatttcgacttttaatggaaaaatgcccagaatattggaaaaatcgattttttttccaaattttcccgtaaatattcaaatttttagcgtaaaatatcaaaaaacctggaatttttgatatttcacgctaaaaatgtgaatttttacgggaaattttggaaaaaaatcgatttttccaatattctgggcatttttccattaaaagtcgaaattatgcaatttttacgcttaaaaagcggaattttcattaaaaagggtaaaaatatacgggaaatttgaattttcagtgaaaaatctcatttttgggttaaattttccatttttggctccaaaaatcacaaaaaatgcgattttctatgctattttctttgcgaaatcttgatttttattgatttttacttaaaaaaaacgctttttcacaagttttttggtgacttttcctcaaaagacaaggaaatttttcagttttcctatcgatttttgctcaattttctgttttatcgcatttttagctcgatttttatagtaatttccacctaaaaatcgcattttttaaaacctttttcgatatttttttttcgatgttcccccagctattaggctttttttcgaattcattttggacgaaaaaattcatcaaaattcgggttaaaatgtgccctaaaatggggtttttcgacggaaaattgcatattatcggatgaaatttaaaattcaacttcctacagtgcaaaatctggataatttcgacattttcagggtaatttttcgacttttaatggaaaaatccgatttttttcctgaaaatgccaaaattttgcaattcttacactttaactttgttgaatttttcgttaaaaattcgataaaacgtgaacgttttccgatttcctgaaattttcagtttttcagcgccaaaaagtcaaatttttactcagaaaattcaattttctgtcaaaaattcaaaatgtttgatttttttgcaacgaaaaatcgcattttagcgctcgattttcggcccagtaatttccacctaaaaatcgcgttgaaaaaaatcaaaaattttgaatttttgacagaaaattgaattgtctgagtaaaaatttgacgttttggcgttgaaaaactgaaaatttcaggaaatcggacggaaaaatttacgttttatcgaatttttaacgaaaaattcaacaaagttaaagtgtaagaattgcaaaattttggcattttcagaaaaaaatcggatttttccattaaaattcgaaaaattaccctgaaaatgtctaaattatcctgattttgcactgtaaaagttaagaattttaaatttcatccgataatatgcaattttccgtcgaaaaaccccattttaggccacattttaacccggattttgatgaattttttcgtccaaaatgaaggttttctctaaaaaaaaaacttaaatttatgcgggaaattcaaaatttcaatttcaaagcaaaaaaaaatcacagaaaattcgaatttccctatttttttttgcaaaaatcccattttcagctcattttcggcccagtaatttccacctaaaaaccacacatttttctacctttttcaacgctttcatatgataaatcattgcatttttcgatcggcactgctcttttccaatcaaatcgaatacttttctcaaatgccagcgagtcgacttttggacacttttactacgggattttgtacgaatttccacgcgttttttgatagaattcatggctttgcggcgttttttaattgattccacattatatttcttcacattttcagcgtcttctggcgtagtcacaagattgttcacactgaaaatttgaattttttaatctagaaaaacgacttttttttaaagaaaaaaagagcattttttatggaaaatgtgctgaaaatggagcacatacacattgatgaagcggcgttgacgacgttccgcttgtgtcaattgcttccttcgaatctgcttatgacctatgtgatctgagtcttcatcatccaacaaacccctgaaaattgaaaaatttcggtcaaaacccattaaaatcacaatttttccgggaaaaatgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttgccagaaatacggtatttattcacattttcagccagtttaaggctgaaaatgtgaataaatacagtttttatgccagaaatctgagaaacgcacaagtcacaggggaataaatagttcaggagggtggcttttcggtaatttttcgattttttctgttaaaatctaatcaaatatattgaatttcgttatttactgctagatatactgtttaaaaatcgattttatcaataatttttttaaaaattgttgaaaaatccaaatgtacggatttttcggagtttttcaacaaaaaatcgttcgtatttcttaatttttctgaaattttcaatatcaaatttgaattctccgctctttttcactttgagtcgttttttgttctaaatttaacattttttgcggggtactgtagcttcaaaagtacgcaaacactgaaaattgaacatttttcgactttttcagaagttttcaaagatgctcacactaaaattcaagttccccgtttaatttcaccccggatgcccttttttgccgggcttctaagactatttttgaatatcgaggggtacggtagccccgaaagtacgcaaacaccgagtattacgtactcggcatcgaactttacgacaattcgtctaaattggcggaaaaccgggtttcgggggtacaaagtgacgaagaaatcgaatttcgtattgagaaatgcgaaaaatcaacaaaaagtgctgaaaattacacgtttttcgggtgaaaattgaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcaggccaatttaagactgaaaatgtgattaaatacagtttttatgccaaaaatctgagaaacgcacaagtcacaggggaaatatcgatttttagaagaatatagagatttaaactgggaattttttgtcagtttttggttgaaaagtgaggtttcagacaattttttttttgattttaatgctcaaactacatagaaacctggaatttgctgtattttggcaaatttttcatgaatttcagctcgaaaaatcggcttttcgtataattttcagtaattttctattattaggactattttatgggccaaaatagcaatttcgtcatttttcagtggaatctttttttcgataaaaattctttttcagcaattttcatgctaaaaattttctccgtttctccgtttaattttactcttaatcaaccttttccagggcttctaactctatttttgaatttctagggttacggtagcgccaaaagtacgcagacaccgggtgtctgcgtacttggcaccgaaccttacgacaattagtccaaattggctgaaaaccgggttacggggctaaaaagtgatagagaagtcgaatttcgtattgaaaatctgtgaaaatcatcgaaaaatgatgaaaatcacaagtttttcgggaaaaaaaaaatgaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgccaaattgttggcagaaatacggtatttattcacattttcaggccaatttaagactgaaaatgtgaataactacccgtttttatgccaaaaatctgagaaacgcacaagtcacaggggaaatgttcagtaagccaatatttagctattttggttgaaaacttctaatttcaggttagacatatccgaaaattccgcaaaaacgcgaatttgctcgaaaattccgcggaattcgaatgattttcacattttctgacatttctcccggaaaaaaagctcttcaaattttttttcggtaacatttcggttactgtagcttcaaaattatgcacacactgtggtcacacaccgaatttgacgacaaactgcagaatatttagaaaatgaccggaaaattcgaattttgtatcagaatttctcaaaaagcattataaaaaagacatttatagtttgtttttcaagcaaattagcaaaattttccaaatttcttctcatttttcctataatttccacgtgtttagtgatttttaatggaaaaattggaaattttccagcaaaaatccgatttttcagggaaaccccgtcttacaatagacgaagttcgttcatttcagcatcattttgacggccatttacaccgaaaagcacgacatttgggtcgaaaacttcagaattgaagtagacattggccggagaatcgattgagcacaagaaaccctggatataattgataatatcgattgattcggaaaagttgatatccaaaattcgctcgaaatatatcgtttttgtctgaaaatatggaaatttgggcttttttgggtcctttttcaattttgtaaagcaattttaacactaaaattcgaattccacgctcaatttcaccccttagagcccttttccgggcctcttagcctatttctgaatttcgaggggtacggtagcgccaaaagtacgcaaacacctgctaggcaccgaactttacgacaattagtctaaattgactgaaaatcgggttacggggggtaaaaggtgatggagaattcgaatttcgtattgaaaatctgtgaaaatccaaggtttttcagcttgaaaatgaaaatttgggcaaagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttaagccaatttatgactgaaaatgtgaataactacagtttttatgccaaaaatctctgagaaacgcacaagtcacagggatatgaagaaatttttgaagtggaaaaatcaataaatttctagaaatttgattttaagaccaaatttcagtgaaaatcttgattatttcagctattataagcattgtaattgaaaatttcgcgattttccagttaaaatcgtttttattgtcattatttgaataaaaaatccaaaaaaatcgctaaaaaatggcttgaaaccatcatttccagattggtggcctagaaatcccaaaagttaggccaccaatagattttgtgcaataaaattaatttctaggggtaaaaatgagtgaaaaactcaatttttaactgaaaatttgagaaaaaaaaactagaaatgcgagattttcaagtttaaaaaaaaaccattaaaaggccaaaaatgacaatttcaggccaaaattcgctgaaaactacgaaaattcgttaaatatagctaatcgcgattttcccgatttccagaatattctgctgagttttgtgctgtgtaaagtttgaaaaaaataaccgcttaaaattttagaaattttaaaggatttttagtgaaaattccaaattttttggcttaaaaactacaaaaataagccattttttggttaattttccagatattccgcaaaatttcagctttaccgatgtcaaatccagtttcttaatagtttcaaacagctcctcagtcaatacaatatccgaaatgtagagtttgttgagaatttcgaattttctggaaaaaatcgacgggtttttaaacgaattttcagtgatttttcatcatactgaatatgcagatattcgaattcattaaatcttcggattctgttaagacgggtagctgggtattgagctcctgttcctccatatttgaacattgtgacagcacgggtgtctggggaaccctgaaatttggaaaaaattgggttactgtagcttcgaaagtacgcaaacaccgaattttacggaatttcgcacaaaatggctgaaaaatgggcttttaaatgtgaaaacggctggagaactcaaattttttcattgaaaatctgtgaaaattacaagttttcgggggaaaaaaaaaatgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattgacatttttagccaatttatgactgaaaatgtgaataactacagtttttatgccaaaaactctgagttgaagcacacaagtcacaggggaaatatcgatttttgaagaaattttgcgatttttaagtaaaaattgtttttatttttattatttaacataaaactcgaaaaaaaatcgataaaaaatggcttgaaaccataattttcagattggtgacctagaaatcccaaaagttaggccatcaatatattttgtgcaaaaaaccgatttctagtggtaaaaatgagtgagaaactcaattttaaactgaaaattaaaaaaaaaaccactaggaaaattataaatgtgtcaaaattctgatttttttttagaaaactactaaaaattttagaaattcatattatatgcatcaataactccaattttcaaaattttgggtcacaccacgaaaaattggtggtactgtaggttcacattcgcggtgggacccaatatggcaattttaactaattttctaggaattatcagtcaaaatgatagttttcgcatattttagatcaagttttgccgaacttcacaaagttttgctcattttctcaaaaattgtaaccttttttcagatttttgccaaattttcatcgattttcgcaatttttgctcaaatttttaaaaaataaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttggcagaattacggtatttattcacattttcagccaatttatgactgaaaatgtgaataaatacccgtttttatgccatcaatacgagtagaaacgcacaagtcacaggggaaatatcgatttctagtagattttagggattgaaactgaaaatgttgcgatttttaagtaaaaattgtttttattattattatttaacatgaaactccaaaaaaatcgacgaaaaatggcttgaaaccataattttcagattggtggcctagaaatcccaaaagttaggccaccattttattttgagctaaaaaaacatttctagaggtgaaaatgagtgagaaactcaattttaactcaaaatttgagaaaaattactaggaaaatgataaatgtggctaaattctgatttttaatcacaaaattccactttttcgcctttttttcacgaaactaccaaaaatttgggtcctattacgaaaaattggtggtactgtaggttcacattcgcggtggaacctaaaatgacaatttttacagattttgtctcaatttcatacttttttgggtcagattcgccaaatttccatcgattttcgcgatttttttgcttaaatccggcaaaattttgcgatttgcaagttaaaatcggttttcttccaattgtttaaaataaaacttcaaaaaaatcgatgaaaaatggcttgaaaccaccatggtggcctagaaatcccaaaagttagaccaccaatctattttgtgcaaaaacaccaatttctaggggtaaaaatgagtgagaaactcaatttttaactgaaaatttgagaaaaatcactaaaaatgtgaaaaaaaaatcgttttgatgaggaattcaaattttagggcgaaatttgacgaaaactacgaaaatccaattaaaaaagccaatagcttgatttttatagattttataggttatttccagcaatttttactagaaaagtaacgacttttaaggaattttctgaataaaaattgcgaaaaatcgtcgaatttgcatccatttttctccgaattttcttcacacctgaattttgatttcaatcaaacattgatcataatgtgctccagggatcatattattattgataatatcttcaaaactcttgcagactcttctcaacgacatcaaatttcgaacggcgtgctcatcagtgtgctccgggtggcggcggggtgggaaattctgctgaaaagccgctggttttgggttgtgctctttggtgccaacgaatttgaaaatgtgaatgagcacatctgatgggagttcgttgagcttctgaaaaaaaatgaaatttttaaataaaattttttttttcacaattttccaggatttttcagcaattttcaagctaaaattcggattccccgttcaatttcacccctattgcgccttttccacggcttctaactcaatttttgaatttcgaggagtacggtagcgccaaaagtacgcaaacacctgctaggcaccgaactttacgacaattagtctaaattggctgaaaaccgggttacgggggtaaaaagtgatggagaagtcgaatttcgtattgaaaatttgtgaaaatcactagttttccgggaaaaatgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcagcccaatttaagactgaaagtgtgaataaatacagtttttatgccggaaatctgagaaacgcacaagtcacaggggaaatatcgatttttgaagaaattttgcgattttcaagttaaaatcgttttcattaacattatttgaaataaaaccccaaaaaaaatcgatgaaaaatggctagaaaccatgattttcagattagtggcctagaaatcccaaaagttaggccatcaatatattttgtgcaaaaaaagcaatatctaggggtaaaaatgagtgagaatttcaatttttaactgaaaattggtgaaatatcactagaaatattattaaaatcattttgaagcagcaaaaaatgggcaaaattcgaagaaaacttaaaaatctagttttatagctaaaatgaccgaatttttgggcagaaaatcagttgttcaaaacaagtttgaggaaatatctggaaaattggggattttgccaagaaattccataatttttggctggaaattgaaaaaaattgatttttaagattaaaatttaaaattttagggttttaaaaaatatttcatttggtaattattgaattttggataaaattcacgtaaaaccgccatttttgaatctgaatatctgacttttagccctaaatattataattttaaattaaaaaacccgaaaaatgggtattttccgatcattttccatgaatttctataaaaaattttgaaaattctccgagtttaggcttttaaaactgaattttccagtgaatctgaacattttcgcttgaaaaattgaatttttaagctgaaaaacagaaatttccagcggttttttctcattttttgcgagaaaatcgctacctttccactataatcggccacaaaaggctcgaaatcgccgagttgctcggcgagctcatctgcacccaaatcaaaagcttccatctgaaaattaatccctaaaactctgaaaaatcattggagtaagcggtaaattcagcgattttcttgagaaaacgcgtaaaaaagcgaaaaaatccacataatacagaataaaacatggcgatttttattttttataattttatatgcaatttatgtacatttttataggttttccggggtacttttcgaggctaaatcgccgtcggaggtgtccgtagcttcgagaattcgtctaaatcgctgtaaagcttctcttttttgatttccagcagcaaatcctgtcgctcgtcgtcagtttccactccgatttcgcgtagatcgtcatctgacatctccacgagcactctgcctgaaaaaattaggaaattagggttttttttccggaaaaaatcgatttttcggtgaaaaatcgaattttttggtcaatttttctctttttctcacctgtaacattgtgtcgcaagaagaaatgagcgtatttcagcgcaaaacgtggccgtttcctccgaagccactgatcaacgtcgtttgccgaccaaaagtatatcggacggtgcgaaaccacgtggtacacctcttgcacgtttgttgtcatttttttcgccgaaaaattcgagaaaatcggcgaaaaatcggggaaatgggctgaaaatggtggaaaataataataaaataaaaataaaaatgaattgtctctgcgtctcctcgattctcacgctctctcgcgccgggtctcagtggagcgcgcttgctttggttttcgaaatttaagggaacatgcagaaaacgcggaaataaaagagaatttcgcgattttcgtaataaaagctgggaaataattattttaagatttcaaatgttaataaaaactattaaaaaacgaaaattcgatatttggagcttattttgttttttaaaactttgtttggagtacggtagtttctgttctgtgcagcgtgaaccgcgtaagaggcattcaattctacgacaattattttcgaaattgttttatttatttaaatattttccccgaaattcgccgattttcagctaaaaatccagtttttcagccaaaatggagcccgatgataatgaaattcgatgccaaatcatgtggcagctcaagcaggacaagaaatatgatggtttgtagcttgaaattcgaaaaaaaatcctaaatttccctaaaattccagaaatcgccgatcatgtgctcacgtgctgtctggattgtatcacaaatcccagaaaacagtttggaggccgcgaaatgctatttccagacgctccaccgccctggattagtaagggattttgggaaaatccggaaattgtggcattttctcgaattaaaaactcgaaaatttgttgaaaatactgcaaaagccagaaaatagcggctgttttgttaaattttgtagcaaaaactcactagaaatcataatgttttagagtttcagtaaagtcaaccgattttcattagaaactccagaaattgagacttattactacttaaaattcaattttttaagaagaactttgaaattctacgaaaaaaacaacggaaattgctaatttttgccagttttctggaaaatttacataaaattgaacaaaaatgtaatttttccgaatttttttccgtaatagtttgctatttctattattactttgattacaactaaatttttggaaaaaaaacctaaaaattggattttccgagctatttcccctgtgacttgtgcgtttctcagatttttggcataaaaactgtatttattcacattttacgccataaattggctgaaaatgtgaataaataccgtatttctggcaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttcaattttcagtcaaaaacttgtaattttcagcactttttgttgatttttcgcatttctcaatacgaaattcgatttcttcgtcactttgtacccccgaaacccggttttccgccaatttagacgaattgtcgtaaagttcgatgccgagtacgtaatactcggtgtttgcgtactttcggggctaccgtacccctcgatattcaaaaataggcttagaagcccggcaaaaaaaagcatccggggtgaaattaaacggggaacttgaattttagtgtgagcatctttgaaaacttctgaaaaagtcgaaaaatgttcaattttcagtgtttgcgtacttttgaagctacagtaccccgcaaaaaatgttaaatttagaacaaaaaacgactcaaagtgaaaaagagcggagaattcaaatttgatattgaaaatttcagaaaaattaagaaatacgaacgattttttgttgaaaaactccgaaaaatccgtacatttggatttttcaacaatttttaaaaaaattattgataaaatcgatttttaaacagtatatctagcagtaaataacgaaattcaatatatttgattagattttaacagaaaaaatcgaaaaattacagaaaagccaccctcctgaactatttattcccctgtgacttgtgcgtttctcagatttctggcataaaaactgtatttattcacattttacgccataaattggctgaaaatgtgaataaataccgtatttctggcaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttcattttttcccgaaaaacttgcaattttttccaaaaaatgtcgaaaattttccagaaatgccagaatccgagaaatcagatccccaagcgtggcgaaaatatcaaaaacgtcaagttcaccaacaaatgacacccgaagaattcgacgatttcctcatagaatccgactttggagacgaacgaatgtgccacgaaatcgcgaaattcaagcgaatcgaacgagtcgaggcgtggattgtgctccgcgagctccggaagaagcagcgagaacggagacttgaagccgagaaaattgcgcgagaaatcaagaaacgagagactgacgagaagcgggaagccgagaaattgaagaaaatggacgaaaaactgaagattcaggagaaaaagcagcaaaaagacgatgaaaaacaggaatatttggataaaattcacgaattggaggaggttttgggtgttgcggcggagcccaaagaggggccttccctggagcccggagagctcgtcgtggagccccgccggcatcaaaaagtgtataatgtgaagaactcaatgccatgggctccatctccgtatgatgtgctctgttcggagcatcgatccacaattccccatcaacaacagaagagaatgaacgcgatgtactcgaatttaatgtattttggagagtttcagcataccagcaataggcgagagcttaaggtgtgagatttcgatggaaaactgaattttttgacctgaaaacggtgaaaaatcgcaaaaatctgaaaaaaaatcagcgttaaaaacctgaaatttaggctgaaatctgattttttgagccaaaattccggaaatttaggcgattttccgctgaaaaatcgaaaagttggtgagaaactcgtttctgagcgattttcgcctgaaaaatcaaaaaattggtgaaaaactgattttttgaactaaaatttatgaaatttgtcgaattttcagttaaaatatcaaaaatttatgaaatttgacgaattttcagttaaaatatcaaaaatttagtataaaacctaatttttgagaaaaaattccggaaattgaagcgatttccggctgaaaaatcgaaaaatcggtgaaaaactgaatttttgaactgaaattccggaaatttgacgaattttctgttgaaaaatcgaaatttaggtgaaaaactgattttttgaactgaaatttatgaaatttaaagattttttagttaaaaaaaaatcgcaaattcagtgtgaaccgaatttttgaactgaaattcgggaaatttgtcgagttttcagttgaaaaatcgaaaaattggtgaaaacctgaattttgaagccaaaattccggaaatttgactgattttcagctgaaaaatcgaataattggtgaaaaagtaaatttttgagccaaaatttatgaaatttcatagattttcaatggaaaattcgcaaaaaactcgaaaaatcagcgttaaaataagaaaatttagtggaaaaccatgaaatttgctgaaaaatcgggaaaaaagtgacttatagcatgaaaaactatgaaatttggtgaaaaactgaattttcgaggtaaaattcatgaaatttgacggattttcagttgataaatcgaaaatttagtgaaaaactgatttttttaaactaaaatttatgaaatttgagcgattttcggctgaaaattcaaaaagttggtgaaaaacagatttttcgaaatttttgcgattttctggacaaaaattcagtgattttagttataaaaacagattttcaacccattttcatcgaattttgccctaaaaatcacttttctagtgatttttctcaaattttcagttaaaaattgagttcctcacacatttttacccctagaaataggcttcttcggcacaaaatagattggtggcctaacttttgggatttttaggccaccaatctgaaaatgatggtttcaagccatttttcgtcgattttttttttggatttatattcgaaataacgacaataaaaaaggatttttagttgaaaattgcaaaattttcagtttaaattcctaaaatctactagaattcaatatttcccctgtgacttgtgcgtttctcagatttttggcataaaacctgtatttttttgcattttccgcctgaaaatagctgaaattggctaaatatgcgaataaataccgtatttctgccaacaatttgacaatagagcgcatttgtcactcggtaatgcggaagctatgcccaaattttcaattttcccggaaaacttgtaatttttccaaaaatctagtgcaaaatttgaattccccgtcacaatttacccatcggccttcaatttccgagccgtagctcaaaattgcgttaaattcgatgtttgcgtacttttgaggctaccgtaacccggtggaaatttgaaaatccgcgaaaaatgttgatttctctgataaaatcacttaatttttaatttttttaaaattttttactaatttttaaatgcaaaaccatatatgtttttaggatatccgagcagctacagaaacggaatacgataccctagtcgcctcggctctagaacatgcaaaaaatgaagcttgccacccgttggacgttgtagatgaacgaaaaatccaaaaatgtcttgatctattcaaaaatcgtgagccgccgcccggtgaaaatctgcaatttacgttcaaagacccagtttatatagtggaaaatgtcgacgcggccgatggaattcgtggtttaaatcaggcacttgtgccgaaaattgagaaattgttgaggaaaggagtgtggaatgatgtgcttacgctgccggatatttctcagaaatgcccaattttgaatattgaggagtacgaattttttgaaaaaatcggaaaaatcccaaacattttcgcttgaaaatgactgaaaatcgatttttagcgaaaaaaatcaagtttctgacgattttttctacgatttttgcgaaattattgagaaaatcgatttttaagcagtatttctagtagaaagttagcggtatatgtatatgtatatatatattcaactagattttaacggaaaaaattccaaacaatgccttttctgaactaattcccctgtgacttgtgcgtttctcagatttttggcataaaaacgggtatttattcacattttcagtcataaattggttgaaaatgttaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttcaattttcccggaaaacttgggattttcagcaagttccgatgattttcccagaattttaattcaaatttcgagttccccatcactttttacccccgtaacccggttttcagtcaatttagactaattgccgtaaagttcggtgccgagtacgcaagtctcggtgtttgcgtacttttggcgctaccgtacccctcgaaattcaaaaataaggttagaagtctggaaaaaggtttagtagcgtatgaaacaacgaattcgacgtaatttgagaaaaatactgagaattaggcaaacataggcaaattttcagctgaaacattgcaaaaacgtaaaaaatcagcgttaaaactaaaaatttagggtaaaaactaatttttcgaacaatgctgttaaataaattgacagaaatatagcgaaattccaatgttctacgcaatttgagcattaaaaaaattcggaaaaattgaatgaaatctcaattttcaaccaaaaaaggtcaaaaattatggaatttttcggaaaattcggcaaatttcacatatctttaaagaataactttgggaaatcaataatttgctatgcgaaatgcagtttttactaatttctgtacgaaaatttatatttttttcaaaatttctatgaaatttgctccaaaaatcgatatttcccctgtgacttgtgcgtttctcagatttttggcataaaaacgggtatttattcacattttcagtcttaaattggcctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggacatgcggaagctatgcccaaatttacatttttcacgaaaaacttgtgattttcagcaagttccgatgattttcccagaattttaattcaaaattcgacttctccatcactttttacccccgtaacccggttttcagtcaatttagacgaattgtcgtaaggttcgatgcctagcaggtgtttgcgtacttttggcgctaccgtacccctcgaaattcagaaataggcttagatgcccggaaaagggccccaccgggctgaaattgagcggggaattcgaatttttgtgttaaaattgccgaaaaatcctggaaaattctggaaaaaagttattatcaacaaaaaattcaaaatttttagcttttaaaatatttttccctcaattttcatgccaaaattcgaattctccgcaaatttccacccctccggatgctttttcagccaatttgtgcaaaaattcgtaaaattcggtgtttgcgtacattcggagctaccgtacccctcgaatctcaaaaattggcttagaggcccgaaattggggacggagaactcgaattttagcgtgaaaattgttaaaatcacatggaaaagtcgaaaaatttccaatttttcagaaatttttagtgttagcgtactttcgaggctacagtaccccgcgggaattttcaaattttgagtgaaaaaggtgaaaaatagcggagaattcgaattttatactaaaaatttctcaaaaattcaaaaaaacccgccaattttttttcagcagcagcacccctcctccgaaggtaaagctgcttgacgacgccctcgccgcctcctatattgcagaaaatcctacagtaaccctaatggccgacgctacaacaatttgtcacctgctgacaccaaattgggaatcccgggactacgattacactattccgtgtgtagtccgagaggagaatctgcctggagtaggatggcgcaaagttgtcgtactttcgaagccgatgcccagtggaagggtactggtttttgctcggctgaaaattttaagaattttttttaatcgatttcccctgtgacttgtgtgcttctattcagagtttttggcataaaaacgggtatttattcacattttcagtcttaaattggctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggacatgcggaagctatgcccaaattttcattttttttttcccgaaaaactttggcttttcacagattttcaatagaaaattcgagttttccgtcactttttatccccggaaaccggttttcaaccaatttggacgaagtgtcgtaaagttcggtgccgagtacgcagacactcggtgtttgcgtacttttggggctaccgtacccctcggatttcaaaaatagagctagaggtccattcggggtgaaattgaacggagaattcgagttttagtttgaaaatttctttttaaaagtttttttcataaaaaaaatttaatttttccaatttttcagatcaccaaagcctctatccaacgaaaatcgctgaagcgagctctgagatcgcaatttttgctcaaaaaatcgccgaaaatcgcggaaaagccagtagtacccgacgcaatagaagtggagcccacaacaacatcagaagctccagcagaagctcgcggagccaccgattttctcgacgatattctcacagaaatggcgacgaaaaaatcgaaaaaagaggcgaaaaacgaggagaaaattccggaaaatcagcgaaaatccacgtatcaatacggaatttttcgaattggagacgcccggcttctcgttcgttcgaatgctccgtacggtgtaaatgagcccggagagaagaagcatgcattcttgcaccacagctcacagcgggctcaagctcaggctcacatggtcacttttgagccacgtattgaatatcttccaaatggcggagcaatggatcttggagcaccggaatggtgttggaatttcacgaaagcagtgctgaaaatgagcgattcgcacattttatatagaacttcgtatcggcttgatcatattttgcagattgatgcattgactatgaaggttgatgtacaggagccacctccgggcgcttttggattgtaagaattgggattttctggaaaatttgggtgaaaacgagattttcacgaattttcgacccgaaatttgaatttcccgccaattttcacccccgggagcctgtttttcagagctttagctcaattttcatagattcggggttactgtagcgccagaagtatgtgattctcgtcgcggtgtttgcgtacttgacactgaaattgacggtattgcgaccaaattggctgaaaaatgggttttcagggtaatttgagtacgcgcaattcgattttcacactgaaattttgcgtaaaaatgtgttgaacgccggaaatttgggatttttctataaaatcgatgtttttaggcatcggttcaaaaaagtcgagttttctctgaaaattgcaatatttcagttggattttcgaaatccccacacaattttaccccgaaatcaagttttcctaagcttctagcttgaaattcgcatttcccgggttactgtagccccaaacatacgcaaacaccgccaacaccccacgacaaattgcacagttttctgaaattttgtgaaaatatgcaaaatgggggtaaaatgatgctctgaatgcgaaatcagcagtgaaaaatcgtaaagattcttagtttttgagttttcctataaattttaattttttttaaagctgaagtttatttgctgaaaattactgaaaaaaatcgccttcctgaacatatttcggtgactcatgtgtttctattcagatttctgacataaaaactgtatttattcacattttcagtcataaattggttgaaaatgttaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttcatttttacggaaaacttgtgattttctgcactttccagtgattttcacggattttcaatacaaagttcgacttctccatctttttttaccgccgaaacccggtttccagtcaatttagactaagacttactcttaaaattcgaatttttacagtctaaattgctcaaaaatcagtattttcgaacaatttccgattgaaaaacgctggaaagttggaaaattgttcatttttttccatcaaacggtgtttgattattatatattttatgatagctcaaaagtcgaatttttaccccggaaaaattgaaatttcagtcaaattcgccaatataaattgttgtaaaaattttgtaaattcaacaccttttttactgaaaaatgtcaaaaatttcccgaaaattccctttctgaacgatttcccctgtgacttgtgcgtttctcagatttttggcataaaaactgtatttattcacattttcagtcataaattagctgaaaatatgaataaataccgtatttctgccaacaatttgacaatagaacacatttgtcactcggagatgcggaagctatgcccaaattttcattttcaagccgaaaacttgtgattttctgcacttgtctgtgattttcacagattttcaatacgaaattcgacttctccatcactttttacccccgcaacccagttttcagctaatttagactaactgtccggtgccgagtacgcatgacactcggtgtttgcgtacttttggagctacagtaaccctggagcttcagaatttacgaaatcggggtaataagtggcggggaattcgaattttcgttttaaaattcgctaaaaattcgaaaaaattttttgagaaaaaatttgaaaatttgattttaaaaaaattttctgaaattgtttttttccagactctcggcgcgatgtgtgatgctggaaaaactgatcaatcggctggaaacgttgaatttcggtgaatatatgattgtccacgaggccaacaaaccgcttacagtaatcccacagtgtgaaaggggcggagtcacgattgaggcgatgcgaatcaccggaaatgaggttcaaagctcatcggacaccgccgctggagactcgtttttctacggattttcaccggatttaccgtttcaatggcaaattatacagggaagagcaccgcggatgcttttggcaaaagactcaccgttggcgaataatgtacgacgggggaaaagtttggaaaaaacttttttttttagggaaaagcttgaaattttcgaattttcgacacgaaaattgaattccccaccaatttttacccccgggagcccgtttttcagagctttaggccaattttgaagtttcccgggttactgtagcgccaatagtacgtgattcccgcggtgtttgcgtaccaaacgccgaaattgacggaattgcgcctaattggctgaaaatcaagctttcgggtaatttgatgacggggaattcgaatttcttaatggcttgtttgccagaaaactttgaacctcagaaattttgcaaaataccggaaaaatcgatatttttgttctcgaatcggaatttcattgtcaaattcgaattccttgtcgttttttacccttaaatccgttttccccgagtttttaactcaattttgaagtttcccgggttactgtagggccaaaaagtacgtgattcccgcggtgtttgcgtaccaaacaccgaaattgacggaattgcgcctaaattgcatgaaaattgggtttcagggtaatttgagagtggggaattcaaatttcccactgaaattttcgtaagaatgtgttgaacgccggaaatttgaaaaactaccgattttccgcgagaaaaacttgaaaatttcaaaatttttagctaaaaatcggattccccgccaatttttacccccggcgccaatttttcagagcttcagcctaattttgaaatttctcgggttactgtagccccagaaatacgtgattcccgtggtgtttgcgtaccaaacaccgaaattgacggaattacgcctgaattggctgaaaaaaaagttttagtgtaatttgcaggcgggaaattcgaatttcgaactgaaatttcggtaataattttttgaacatcggaaaactgagaaaactttgtaaaaaaatcaattttctagggaaaaacttgaaaatttcaaaattttgactcgaaaattgaattccccaccaatttttacccccgggagcccatttttcagagctttagctcaattttgaagtttcccgggttactgtagcgccaatagtacgtgatactcgtggtgtttgcgtaccaaacaccgaatttgacggaattgcgcctaaattggctgaaaaaaaaagttttagtgtaattttagagcgggaaattcgaatttcacactgaaattttcgtaaaaatgtgttaaacgccgaaaatttgagaataattttgaaaaccccaatttttccgggaaaacttgaaattttcggaattttgaattttgaatcggatttcccgccaatttttacccccggggcccatttttcagagccatagctcaattttcatagattcggggttactgtagccccagaagtacgtgatacccgcggtgtttgcgtacttgacaccgaatttgacggaattgcgcctgaattggctgaaaataggggttttagggtaatttgagtacgcggaattcaaatttcgcgctggtatttcctgaaatctggtgcttggtggtgtttgcgtacttctgaaggtacagtaacccccgcgaaaattggaaaactttcgaattttgtgcggaaaattcgcgaaaaaaatcatttctgtgtagaaaatggctgggaattcgaaaaaaattctaattttgttaataaaaattgaaaaaaaaaattttttttgaaaattttgaaaaaaataatttccaaaaaaaaaaaaaaaaaattttttccaaaacttctcaatttctcatctaatgctttacagctaccaaccaaacaaaacttcaacaaaatccaatggcacaagtcacaagtaaagcggaaatacgagcaatattcagctgaaagagaggacgaaaagcgtaaccgtacgctcgatttggacgatcccaatatttccgccgattttacgaatcctgccatgattcctgtgaaattcgagcgaaaattctatcctccacgtgtccgtggacgtcgtggtggccgtggccgaagtggtggccgaggtggtggccgtggaagagaaagagacggcggcagccgtggaagaggtggccgaggtggccgtggaaattctggaaatgagccgccggtggccgatattgtttaattttatttgttttttttaaagtcctttttgttcttttatttctaatttctaatggccttatttatcctcgaaaaaattgaaaattcggccatttttcgttgaaaaatttcaaatttttgtagtagtttcccgcctaaaaattggcttaaaattgcatttttaatcaatttagctcgaaaaatcaagaatttcactgcaatttaagcttaaattcgaattttttgaaattttagaaaaaacttcttttttttttgaaaaattttcattttcaaaaacttttaaaacatgaatttttcgagctgaaaagtcccgcggaattcaaatttcatagttataatccccgaaaaatttcaatttacaccattttcgtgtgtcatttttctctaaatttatgcccaaatttttcattttgacccgattttcgaagtttttcacgattttcagtgtgaaattcgaattctccgctggtttttagccctgaaactgaaaaaagttctgcccgaattttttttttgaaaaatttcaattttcaaaaaattcccaaaactcgaaaatttccgggctaaaaaagacccgcggaattcagatttcctattcaaaatccccaaaaacccatcatttacccacatttcccccggttttctctaaatttcccaaaatttcgattgtcttgttttggttgtttctggttcccagcttaccgtatctgtaagatttttttgaaaaaatcgattttttttcccgaaaacaaattatccaaaaaaaaaataatgcaaaaaccgtaatacataaaacaaaattcaaaaatttcaaattctccaaaaaaaaaaagtttcaaaaaaacataaaattatgcaaatcgtcgtctcagtgcaaatgaagttttccggttggcggtggcggagctccacgtagcagcggctcagttggcggagcctcacggatacggttgcgactactgtactttcgtgtcaatgtgacgatatttgtgtacgaagtggacgttttgaacttccgaatacaaaccatcgaagtggtgacgatatttccgccggcgatgagcccgagcaacagggaaagagtccaaacctgaaagaaattgagaaaattttgggggaaaaattattttctcagaattttaatgctaaaattcgaattccccgccacaatttacccctaggcttttaatttcagagctctagctcaaaattgcgtgaaattcggtgtttgcgtactttcggagctaccgtacccctcgaatttcaaattttgagctagaatcttgaaaaaaacggcggtaagggtgaaaattgacaggaaattcgatgattttttatatgaaattgcttgaaagttacaagaaaattggtataagactgatttctttcagaaaaattgaaatttcgacgcttaaaactgttttctcagaattttaatgctaaaattcgaattccccgccacaatttaccccaagtcaacaaattttagagctctagcttaaaattgcgtaaaattcggtgtttggggtactgtggtcgcggtgtttgcgtactttcggagctaccgtaccccttgaattttgaaatttgagctagaatcttgaaaaaaacgctgcttagggtgaaatttgacgtagaactcgaattttcgaggcaaatttcgctatctgaaaggcccgaaccagaaaaattgataatttcaaaaaattttacaacttttttctgtaaagtttcaggttacctgccatattccgtcacaagtctccgaatttgtgtagccgaacaatttccacgccagatagagctggtagagctgaaaaatgttaatttaaattttccaaaaattcgattttccattttttcggaaattttacttttcaaaacagaatatttcattgtcgaattcgaatttctcgtcattttttactcccggtgaacttgttttccgggtccttagctcgatttttgaattttcggggttactgtagcgccaaaagtacgtgacacccgcggtgtttgcgtaccaggcaccgaaattcacgaaattgcgtccaaattggctaaaattgggttcccggcgtaatttgacacgaggaattcgaaaatcgcaatgaaaattttctaggaatccacaattttctggaaaaaatgcactttttcacgtagaaaatcgagaaaaaatcgaattttcttcaaaatttctcctcttatagtatactaacatatccaaacgccaaaaatggcaacaaaaatgttaatcctttgaattgccacgacgtgaatccctctacagtaatatccatttgatgtccctgtccgagggaatgtaggcggcggaggcagcctgattgatactgattttgagccaactggacgagcgagatgtagaatgtgaagatgaggaagtagggacgaaattcctggaaaaattgaaatgttgaaaaaaaaaatttttttttgaaattttttttttttttgaaattttattttattttttaacttttaatttttttgttgtggaaattgaattttttgatatttttacaccactacaaactcttttctcgaagcttttagaaaaatttcaggggttactgtacatccaaaagtacgcaaacactaaatttcacgaatttttgagcttaaaaaaatcgggcttttggatgttaaaaatcacttaattttcgattttcacattgaaaagcttgaaaatcacctggaaacttgagaaaaaattgaaaattcacaagtttttcgggtgaaaaatgaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcaggccaatttaagactgaaaatgtgaataaatactcgtttttatgtcagaaatctgaggaaaagcacatgagtcactgtgaaaatgttcagaaagtcgatttttttttggtaattttaagtttttgataggaaatttataggaaaactcaaaaactaagaattattacgatttttcaatgctaaattcgaattcagagcaccattttaccccaattgtgcatattttcttaacatttcagaaaactgtgcattttgtcgtgggatgtcacggtgtttgcgtacttttggggctacagtaccccgggaaattcaaatttcaagctagaaagctgagaaaaactgattttggggtaaaattgtgtgggaatttcgaaaatcgaactgaaaatccgagagattttcagagaaaactcgactttttttcgaaccgatgcctaaaaacatcgatttttaagtaaaaatcccgaaattttacaatttttgtcagaaaaatccgaaattgttggcagaaatacggtatttattcacattttcagtcaatttatggctgaaaatgtgaataaatacatgttttatgccaaaactctgaatagaagcacacaagtcacaggggaaatatcgatttttctgtggaaaattggcgaatttttgtatgtgctagcttaaaaatgtgaaaaaaacattaatcgaagtttttttttttacaattaaaaaaagtgaaaagctttttcgcgaaataattcgaaattttttttcgaaattaaaaaaaaaaaatttcaattattttttcaaaatttaaaattttacctattccagactaatttttcacagcaaattcaaatttcctaaccccaactctccatattcattgcctaacctgaaaacacacaacccatctttccaggttagcaaggtttttcagccattttttgggtgaaatttgcaatttttcgaataaaatctattaaattccttatttgcgttaatattttggtagaaaaattgaaattcaaaaaaaaaaattttgaaaaaaaaaaaaatttttttgagatttttttccgaaaatttttcaaaaaaaaatttttttttcaaaatttaaaattttacccattccagactaattttttacggtaaattcaaattttttactttcacctcgcacaaacccatctttccaggtgagcacaattccagacatcatactgttaggaaggggtttcagccattttttgggtgaaaattgcaatttttggaataaaacttcgaatcaatcgaataactcatttacgttaatattttagtttaaaaaatttaaaattcgagaaaatcaactttttgaaaaaaaattttttttttttgagattaaaaaaaaaaattttttttccaaaattttaaaaaaatttcaaatttgactccttttagactaatttttcacgacaaattcaaatttcctactcccaactttccaatttcaacgcctaacctgataacacaacccatctttccaggtgagcacaattccaggcacagcacacgacaggtagtgatgtgacaaccaccatcctttaattttcgatccattgacacggagtacagattcacgaatcgtcagtgtacagtaataccaaaccatcaagaaacagagaatcgagtcgaacactcggaatggccaaatccaggcgcacagggcgagcaggcagatgagaattgtgatggaccatttgaaaccttcgtattcctgcaaagcaaaaaaatgtggtaaatttgaagaaagaaaatacatataatacactatttgagagagagaattagaatgattttaaaaattttgagaaaaaaaaatttttttttttgaaaattttcgaaaaaaaaaattaaaaaaatttttttttggaatttttttttttgaaaaaactcatatttcagcaatttttctactctctaatttaaatttttccacattccggcaatttttttaaactccaaatccaaaattttcaatttccatcgggttactgtacctccggaagtacgcaaacaccgaaaatcacaaaaaaaaacatggaaaaatgtagtttttgatgatttagaaaccgaaattgtacaggaaaacacataaaacatcgattaaaacgaaaaagtatgaaaaaacagaaaatttagaaaaaaaattgttttttcgaattttcttattttttaactatttttatcgtcgaattcaaatttagtagtaattccaagcatttttcgtttttttctccaatttttaacacaaaattcgaagttttcatatttctcgggttactgtaccttcaaaagtacgcaaacacggaaaataggaaaaaatctaggaaagctgccgtttttaggattttgtgagaaaaaatagtgaaaatacacaaaatattgataaaaacaaaaaaaaaaatgaaaaaataaataaattttcgaaaaaaaaaattttttttttgaaaatttttgaaatttttttttttcaaacatttgaaatctaaccaatttttatcgtcataattttcgaatttcccactcaattctaccgatttccccatattccggcaatttttgactcaaaaattcaaaatttccattttctcgggttactgtaccttcgaaagtacgcaaacacggaaaaacgcggtttttgcggtttttgtaagaaaaattggtgaaaagaagcatgaaaattgataaaaacaaaaaaataatgaaaaaaaaaaaatttcaaagaaaagcatttttttttgaaaaattttcggaaaaaattacaaattttttttgtcaatttttttttcgaaaaatttgaaatttaaccaattttccatgatgaaattcgaattctttactttattttcaagctttcccggttttttcgtaacttctaaatcaaaatccgaagttttaatattttccgggttactgtaccttcgaaagtacgcaaacacggaaaatcgcaaataatctaggaaaatcgcggtttttgtgagaaaaaatagtggaaaatgcataaaatattgtttaaaaaaaaacgaaaataaatgaaaaaataaattttcgaaaaaaaatgttttcttgaaaaaaaaaaaaaaaaaagattttataaattttttttttcgaaaaatttgaaatttaattaattttccatgatgaaattcgaattccttactttattttaagctttatcggttttttcgtaacttttaactcaaaaattcaaaatttccattttccatcgggttactgtacctccggaagtacgcaaacaccgaaaatagcaaaaaatctaggaaaaccgcggtttttgcgagctaaattagtgaaaataacatgaaatattgataaaaacaacaaaaaagtatcaaaaataaaattttcgaaaaaaaattttttttcaaaattttcgaaaaaattttttttttccaaaattttaaattttactaatttttaaccatcaaattcaaatttcccactcaaatctgcacattcttccatttttccgctagtttctaacaaaaaatccaaaaattttcaatttccatcgggttactgtaccttcggaagtacgcaaacaccgcaaaattcaccaaaaatacgaattctacaaaaaacgtgcactttttgacgattttgatgttaaaaatagcgaggaattcgatttttacgatttttttgggttccaaaaattttttttttgatttttaaaaaattctccttaacaaattcgaattccccatcaccgatttgcccgccggaaactcaaatttcagccaattcaagttcaatgtcgtcaaatcaggtgtgcggtccgcaaacaccgcgggcggcgcgctacagtaacccaaaaatgccaaaaattgagctaaaaactctcggaaaatgtgggtctggagtgaaaattaacgaggaattcaagaattctgctagaaaattgtgaaaagtttccgaaaatcggggatattacgataaaatctgcattttgtcgtgagcttcggtgtttgcgtacttttcgggctaccgtacctcaaaatcccaaaaaatttcgctaaaacctccagaaaaatgctagaaggggtaaatttaagcgggaaattcgaattttcgcatgaaaaatcgcttttttgaaagttttccagcttttcagcacctgcttgtacttgaacttttccgccttcgtgagcagcgagacgttgaggttggagcctggaaaaaagagcacaaaatatgagggaaaatgtggaatttatgtatttagaacaaaaaatgagaaaagtttttttgaaaaaaaaaaaaaaaaaaaattttttccaaaattttcgtacccaaaatcaaattcaaataaaatccgttcgtctgtgccggcaattctccttgcatatctcgaatccgcagatttgccactgccaactcctctcggagctttgccacgtggctgagcacgtcggttttcgaggtgtccgcctcgtcgagcttttccgctgattgttgggctctggaaatgcgcggaaatttgcagtataaagcatgtgtaattagttgaaaatgttgagatatgaaagttggaaaaatctttgacaaaaaaaaatttttttttttgaaaatgttttccaaaaaaaataattttttttttaatttttcgtgaattttcactaaaaaattcgaattcctcgctatttttactcctagaatctataatttaaaacatttaactcaaaaatttgaatttttcagaaatcgcggggtactgtacccccaaaagtacgcaaacaccgtaacaccctgaattcttctgctgaactcctgaaattttgaatcctgacgtaaaaaatgatgtggaattcgaatttaatagtaaaattcggttttaaaactgttaatttggtcaaaaattaatttttttaaaagtttttggaaattttgtaaaatttccgaggaccaaacttttttccagaaattttaactattaaatttgaattcctcacgttaatttacgcctgaatcccaattttcagccaatttggaccgaatttcgtgaaattcggtgtctggtacgcaaacaccgcgggctctgcgcgtacttttggcgctacagtaaccccgaaatttaaaaactgggctagaaactggggaaaaaagggtttagaggtaaaatttagtggagaattcgaatttcgcaatgatattttcattacaaacctcaaatctagcgaaaaatcgattttcatgaaattttggttatttaaaacatttttcagaaattttaattatcaaattcgaattcctcacgttaatttacccctggcatacgtttttcagccaatttggacgcaatttcgtgaaattcggtgtctggtacgcaaacaccgagggcaccacgtactattggcgctacagtaaccccggctatatgaaaaacgagctaaagctccgaaagccgggctctcgggggtaaaaaatagcggggaattcaattttcgggttaaaattccgaaaatttcaagtttttccctaaaaaatttggtttttccaaaagttttctcaaactttcggcgtttaacacatttttacgaaaatttcagtgtgaaattcgaatttcccgctctaaaattacactaaaactttttttcgggcaatttaggcgcaattccgtcaaattcggtgtttggtacgcaaacaccacgagtatcacgtactattggcgctacagtaatccgggaaacttcaaaattgagctatggctctgaaaatgggccccgtgggtaaaaattggcgggaaatccgatttttagttcaaaattccgaaaatttaaagttttcccggaaaaaattggggttttcaaaattattctcaaattttcggcgtttaacacatttttacgaaaatttcagtgtgaaattcgaattcccggttctcaaattaccctaaaactcgatttccagccaatttggacgcaatttcgtgaaattcggtgtttggtactcaaacaccgcgggaatcacgtactattggcgctacagtaaccccgaaatttttaaaaaatgagctagaagctagggaaatagggttatagaggtcaaatttggtggggaattcgaaatttgaacttaaattttgaaaaaaatgacgaaaaagcaaaaaattcggcaaaaacctgatttttgataagaaaatcgggtttaaacctcgattttccgcctaaaaatctgcattctgtcgtcagatccggtgtgtctgcgtactttcacagctacagtaccccaaactagggtgatttttaggcgggaaattcgaatttccattcatttttcaacccgaaaaacgacgcactgtctcatcgtttccttgagattttttagcaaataattgtgatgcttcatcgcttttccggcggtttcttgaaatttgctgacttgccgcgatttttgaatatattcatcatggattttctggaaaaaattttttttaaaaatcggttttatcgggtttttgagtgaaaaatcgccaattttcagcacacctcgagcttttgaaagtcatcctgcacgagtttccattcgctatccagcttttccgtcgccatctgcaaaaaaatcgataaaaaaattcggatttttccgaaattttcgctaattttcagcaaaaaaaaatcggattttttggcattttttcagccgaaaatctatttttcgtcaattttcaacccaaaaatttgaaattttctcgccgctaaacaacacgcagtgtggtgtactagcggagtgtcgtagttttttcactgaaaaaatcgatttttggctttgctcactgaaaaatgagcaaaatttgttaaattttgactaaaaaatctttaaaaaatcaaattttcatcaatttggaacccaaaaatttgaaaatttcggtgctaaacaacacgcggtcttgtacaagcggagtgtcgtagtttttaccgaagaattgattttttggctgaaaatcgaaaaaataccaatattagatgaaaaattggggttaaaatcgatttttacaatgaaaaatgtgacatttattaaattttgacttaaaaaaatcgatttttcatcaattttcaacccaaaaatttgaaattttctcgccgctaaacaacacgcagtgtacaagcggagtgtcgtagtttttttttttctgaaaaatcaaaaaatcaataaaatatgcaaatatcgatctattttcgatgggaaaaatggaaaaatcaatagaaaaaaaggtgtaaaattcaattttattggaaaaaataatgacaccgtattccgattgtacatacacacacacaaatactgacaattattattaaagttattagggaaaaaaaaaattatgtaaggaatttgagaatttcagtggaaatactggatgagcaaaagtagagcaccaaggtaattagagcgagaaaaatgactgaaaatatcgatttttcggcgaaaaactacgacactccgagtagaacgctaccgcgtgtagtttagcaccgaaaatttgaaattttgggatgaaaattggcaaaaaatccgtttttcacatcaaaagtgccaaaattagccggaatttcgaattttcacagaaaaatttgacatttttcgcgaaaaaaatcgatttttcggcgaaaaactacgacactccggtgagtacaccacgccgcgtgtagtttagcaccgaaaatttgaacttttgggttgaaaattgccaaaaaatcagtttttcacattaaaaagtgccaaaatttatatgaaatatgaaattttttcaatttttggagtaaaaatcgactttttttcgaaaaattggcaaataacgggtttttcatatcaaaatgtactaaaattagccggaatttcgaattttcacagaaaaatttgacatttttcgtgaaaaaaatcgatttttcagcgaaaaccaacgacactctgggtagaacgacaccgcgtgtagtttagcgccgaaaattcgaatttttgggttaaaaattggcaaaaaatcagcttttcgcatcaaaaagtaccaaaattcgccggaaattcgaatttttcactccggtgagtacaccacaccgcgtgtagtttagcacggaaaatttgaatttctgggttaaaaaatggcaaaaattagcgatttaagctgaaaattcagatttttcacacgataaaatatatttttagtggaaaatactgaagtttagctcgaaaattagctaaaaatgtgatttttttttcaatattttggaaaaaaaaatttttttccgagttctctcctaaaaatcaatattccagtcacttttccggaaaaaagaaggttaaaatgattaaaattagaggagaaaaaaaggtagcagaaagagagagagggggcaagtcacgtaaatatcacacaaacacatgatgaaaaagataagaaaattggtacaattgagtgaagagaaattagagaaaaaacggggttcatgttgttttgagatggaaaaaaatattggttttttgagaaaaaaattccaaaaaaaaaaattttttttttttttggattttctttcaaatttttttccataattttttattatcaaattcgaattcagcgccttcaaattgctcgtcaacttgattttcagccaatttgggcgcaatttcgtcaaattcggtgtcaggtacgcaaacaccgcgggctctgcgtacttttggcgctacagtaacccggaaaattcaaaattgagctaaaaacttgataaaaacgtgtttcaggggtaaaaaacggcgaggaattcgaatttgtgccttaaaaaacccctagatcgcagtttctcgctcaaatttcggaattgtgttgttcgtggcggcgacgctccgcacgtcggttgcaccatgtccagttgatcgatttgagcggacgtcagcagcggaggatgtgttgtagtcgtaggacattggcatttcttcctgcaaaatagagaaagttttattgattttcggcgaaaacaacgacacaccgcgtgtagtttagcggcgagaaaatttgggtttttttgcacaatttttcggataatttcgtttgaaatcaacttttttcgggaaaaatatggagtttttagcttaaaatcacacttttcgccgaattttaacccaaaaattcaaaatacgcgatgctaaacaacacgcggtggtgtacaagcggagtgtcgtagtttttcacaaaaaaaactgattttacgatcgaaaatatccaatttctttttgagattgtagctcaaaaaatgcatttttcgtcaattttcgactcaaaaattcaaatttcctccctgataaacaatatgcggtggtggtgtacaagtggagtgtcgtagtggaatatcgatttttagtgaaaaaatctgatttttaggtgaaaattcgggaaaaaagtaacatttttagctatttttcgagcaaaacttcagaattttccactaaaaatctatttttcgtgtgaaaaatttggattttcagcttaaatcgctaattttcgccaatttttaattcaaaaattcaaattttccgtgctaaacaacacgcgctgtggcgtaaaagcggagtgtcgttgtttttcgcgcggaaaaatcgatttttccaccaagagtttaaggaaaatttcaaatttttagcaaaaagtttgaattttcaatgaattttggccgcttttgaattaaatatctgatataaaagccaatttttcgcaaaaaattgatttttactccaaaaatttacagaaaattcaaatttttcgctaaaaattcgaatttccggctaatttttagcacttaataaaaaatttgactaaaaaactgatttttttgccaatttttaacctagaaattcaaaattttcgctgctaaacaacacgcggtggtgctgtgtactagcggagtgtcgtagtttataatggaaaaaatcagttttttgactggaaaattgaggaaaataccaatttcaatagaataattgaggttaaaatcgatttttacacgaaaaaaggacaaaacttattaaattttgactttaaaaatcgattttccgtcaattttccactaggaaattcaaaatttcacgccgctaaacaacacgcgttggcgtaaaaacggatcgtcgtagtttcttctcccaatgatctacctgtaaaaccccccgcgaactggcaatttcgacttctggcggcagcagcaacctccgggcctctggaatttgtagcggaaatttttcggctcgatgtattgccatcgcgggtccccaagcgtcgtccgggtacagtaccctccaccatttttgggtaattgtacccttagcgatacaaaattgccagattccgacgattggaatgaggattagcggaaaactggcgatgcaccatgctgtcagaattgaccaatacgggaattgataggattcgtattgaattgagttccaatcaagccaaaggaagcaaagaatcgccagatataccataggacaaatgaatttgaataaaatctgaaaggaaaattttttgaaaaaaaaaaaatttttattttttggaattttttttttgaaaatttaaaattcctacaaaaaaccaaaaaaatcgctatccctaccgaattcctcacaaaatttcaccaaaattggatttctagctcgaaatttgaatttcaaggggtacggtagctccgaaagtacgcaaactcggaattttacgaaattttacacaaattggctgaaaaagcagtcacaggggtgaaaatgtgcggggaatttgaattttggcatgaaaattggaggaaaaacattttgaaagctggaaattttgaattgtttgttgataaaatttttttcagaagtttccagcatttttcagcatttttcacactgaaattcggattcttcggttcatttcacccctaaatgaaacctttttccgggcgtctatctcaaatttggaatttcgaggggtacggtagccccaaaagtacgcaaacaccgaggcttgcgtactcggcaccgaattttacgacagttggtccaaattggctgaaaaccgggttgcgggggtaaaaggtgatggagaattcgaatttcgtattgaaaaactgtgaaaatcacaagtttttggaaaaattgaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcagccaatttatgactgaaaatgtgaataaatacagtttttattccagaaatctgagaaacgcacaagtcacaggggaaatatcgatttatagtgtattttagggatttaaactgaaaattttgtgattttcaagctaaaatcgtttttattgctattatttgaaataaaatccccaaaaaaaatcaatgaaaaatggcttgaaaccatcattttcagattggtagcctagaaatcccggccaccaaattattgtgcgcaaaaaaccaatttcggggtaaaaaggggtaaaaatgagtgagaaactcaatttccaactgaaaacccgagaaaatacactagaaatgtgctataaaatcatttagatgcaaaaaatgagacaattttcacattttttgcaaaaaaactgttactgctgagaactcttccaacaaatggaacatttctcagacttttttcgtgaatgaaaaatgaatttttgctcattttcgcttccataccttccaaaaaatataacacggcggccagtagccaacaatccatttagcattatccagcatattatcaactccgtatacccaattaatagccatacactctaaaaatgcaatgacaaccagtggccaagtgagcacaaattgggtgagaagctccatccagaagagcccagatgagagacaaaatggaatagagagcagaatgaagagagcacagacagtggttaatacgtggcgacgatttcgacgaagacgttccggatattcatcacaaatcgatgagacgatcgtttcgacgacaaacatttgggttgcatggacaacgagcagaatcataatgaagaatagtcctgcgtaaagtggagcaactgatacaccggctaacgcttctgctaggaatacgaagaccaaatggaaaccatctcggatatggaatttgtcaagcgagatggcgaattcgtagcaggtgaatccgattgcagagaaggtaagtaggcaaccgactagcgaaacgatcacgtcaacgatgagcacgagccagatgtctctggaaaaaaaattgttttagttttaaaggtgtggtgtagtcgaatttttttttgaaaattgctttattagactcaaaattgtctgaaaacaccgaattttataataaaacttctctcgaaaatctctcaaaaaagttaatgcgagaatttttcgcccaaaaaatgtgacgtcgatttttttgaagggttttattaacttgaaaattctgaaaatttcaatttaaatccctagaaaatcccgaatttcagagaaaagtgagttttttaattatcatcttacaaagacattgatttaaaaaaatcggaaaaaaattttccgatttttctttgctttactactttttttttcattattttgcaaaataatttttttttgaaaagttttttaatcgatttttccgaaaaattttccacacatttttggctaggcttaggcttaggcggggccacgtggtgccaccgcggctggaaacaatttttttttttgaaatcaccgtcaaattttgtttctacaaattaattatattattgcgttttcaacttgatttagatattttaaatttgatggacatttttaaaaaattttttatggccggtcaaaatttcgaaaaaaaagagagctaaattttgctaaaatctgaaatttcgcacatttttctctgtcacagccgtgttggattttagtttttctgaaattatcaccctttttacctcgcataaattcgttgatgagacaaattaagacaacttctaggcatcggcctaggcatccaaaaatgatcaatttttggacatttttcgagaagttttattataaaattcggtgttttcagacaattttgagtctaataaagtaatttttaaaaaatttaacagtataagaaactttttcggaaaaaaaaaacaaaagaactattggttttttgacacatttttcgtagagaaattaaatttgaaaaaaaaaatgtatttgaattttttattttttaaaatttcaattcctcctccagccccccgcacgtggtttgatctacgttgatctataaaaaatgcggcagagttttcaactgatttcgcatcgttaataacgggtaaaaaattattttacaaaataatgaaaaaataataataaagcaaagaaaaatcggaaaatttttttccgatttttctctgaaattcgggggattttctagggatttaaattgaaattttcagaattttcaagttaataaaacccttcaaaaaaatcgataaacatgtggcctagaaatctcaaaagttaggccaccaatctattttgtgcaaaaaggtacaaaaaatgagacaattttcacattttttgcaaaaaaaactgttactgctgagaactcttccaacaaatggaacatttctcagacttttttcgtgaaagtgtgtgttcttcaagttctttttctaatttcaaattcaaatttttcaaaaaattcctcctcctcacttataaatattattatgaaatcgtgaataactggcaattgtaaatagtccaccagaacaacacgaaaccgaatagaacgcctgaacagccgcttcaccccaaacgtgcaaatccattagtatttcccatttcggcgttaaaaaatagaaaactgcggcgagacttccgtctaaagtgagtaggcgggtgaggagtactgtaagtatgatgaatggtactatcacggccacgtagactacctgaaaattggaaattttgaaaaaaaaaaaaattttttttttggaaatttttagctttttttaaaatttaactgaaaaatatccaaaaatcgggaaaaatttttttttttttttttgcaattttaaatcacattttttctagtgatttttctcgaattttcagtttaaaattgagttttcaatcatttttacccctggaaagtgctttttcgcacaaaatagattggtggcctaacttttgggatttctaggccaccaatctgaaaatgatggtttctagccattttttagcgatttttctgggggttttatttcaaataatggtaataaaaacaatttaaacaatttttgttcgattaataattgtttttttttttattttttgttgaaaattttgaactttttaaaaaatttaatgaaaaatttcataaattcgaaaaaaatttttttttttggaagtttcatgcaacttagggaaaatttgaaaaaaaaaacaccatttttttctgtaaaatctcaaaaattggaaaaaaaaatatttagaaaaaaaaaatggaaatttcgaatttttgagcttttttttttgaaattttaccgaaaattaccgaaaatttcgaaaaaattgaagttttttttgaattcccgccaaaatatttctccagaaaaaaaaagttatgcctatttaaaaaaaagaaatgcctatttttttcgaaaatttaatggaaaaattcgaaaaaaattttttttcggttttttaaaaaaatttttattaaacaatgttagaatagaaatttttataaaaatttttaaaaattcaaactttttttgaaattttaacgaaaaatttcagaaattcgggaaaaatgttttttggaatttttttgtcggaaatttcgatttttttttcgaaatttttagaaaatcagagaaaattattcggtttttttctgattttttcccgaatttctgggtcctgccacgaaaaaaccaccatacatacttttccactggatttaacaccttgaaataggcataaaaagactgcaatccagcatgcaagtacacataatccgagataccaatttaatgttccaaaatcgtccactccctttgataacatcaatacgtcgttgctgcaaaaatgggaatttttgacgaaaaaaaaatcaattttccggcaatttccagaaattttcattattaaaatcaaaatcctcgtcgaatttcacgtctagcacactttttccggggtctctagctcgaaatttgaatttcgaggggtacggtagcctcaaaagtacgcaaacaccgaggggcttgcgtacttggcaccgaattttacgacagttagtccaaattgactgaaaaccggattacgggggtaaaaagtgatggggaactcgaatttcgtattgaaaatctctgaaaatcactgaaaattgctgaaaatcgcaagtttttggaaaaattgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacatttttcagctaatttaagactgaaaatgtgaataaatacggtttttatgccatcaatctaagtagaagcacataagtcacaggggaaatatcgatttctatagaattttagggatttaaactgaaaatgttacgcttttcaagttgaaatcatctttattgccattatttgaaataaaaatccaaaaaaaataaatgaaaaatggcttgaaaccatcattttcagattggtggcctagaaattccaaaaattaggtcaccaatctatcttgtgcaaaaacaccaatttctagaggtaaaaatgagtggaaaactcgatttgtaactgaaaattcgagatgttctatttttcggggaaaactggttgaaaatctatttaaatatatagatataaacttgaaatttttgaaaaattcatcagaaaattccactttttcgcctatttttcaaaaaactaccaaaaaaattgtagcaattcatattttatgcaccagtaggttcaatttttttaaactttgggtcctacaacgaaaattcggttcgcattcgcggtgggacccaaaatgacaattttaactaattttctataaataaccgtccaaaaacacaaattttgcagattttctcaaataaaatcgattttccagttgaaatcgtttttattctcattatttgaaataaaacccccaaaaaaatcgctaaaaaatggcttgaaaccatcattttcagactggtggcctagaaatcccaaaagttcggccaccaatcgattttgtgcaaaaaacgcaatttctatgggtaaaaatgagtgaaaaactcaatttttaactgaaaattcgagaaaaatcactagaaatgtgtttttttttggaattttgcaaaaaaaaatttaaaaaatctgatgaaattgatgatatttcaactaaattttcaaattttttcagaaatttgttggattttggttcaaattttcgcggaaaatctaaaaatcaatgaaaaaccggctaaaaaatagggattttcaccaaaatttggattttcagtcagaaatcgatttttctgcaattttcgacctccccagggcagattttcgcgccaatttcaaatttccactggaaaaacgcactgaaaatacttcaagctcggtattgagccaagatcatgaagtgggattactgtagtttcgttggagctcgcgtgctccacaatacaacttccattcactaaaagtgtcccattcatctctttacactggattcgggtgccaagtgtacagtctgaaaaatttgcagttttttgcagttttttgcagttcgacggggggttactgtactttctccggaccacgaatttgcacaatttgaccatggaatcgagaagctgaacgaatttatcaggtagaagagtgtccacgcagagattatattgaagaaaaccgcaaaaaatcccgaaattgtcacttgagcgaagccgattccctggaaaatttgaaatttttcgaatttttccagaaattttcatagattttcacatcaaaattcgaattccccgtctaatttcacccctaatcaacctttttctgcgcttctaaccccatttttgaatttcgaggggtacggtagcaccaaaagtacgcaaacaccgagtgtcttgcgtactcggcatcgaatgttacgacatttagtccagattggctgagaaccgggttcccgaggtcaaaagtgatggagaactcgaatttcgtattaaaaatccgtgaaaatcatcggaaaatgctgaaaatccaattttttccgggaaaaatgaaaatttgggctttgaaaattcccgaaaaaccaaacaatcgctatcgctattgattttccactaatttttttgaattcgccccacaaaattttacccaaatcgaacgttttcttggacttctagctcaaatttttaatttcaatggttacggtagctccgaaagtgcgcaaacaccgaattttacgacaatttgcgtaaattggctgagaaagcggttgccggtgtgaaaattgcgtaggaaattcgaattttggcatgaaaattgttggggaaaaacattttaaaatttggaaattttgagttttttttaaatgaaaactgttttctcaaaatttcccaggattttccggcgaatttcacactgaaattcgaattccccgtctaattttacccctaatcaacctttttgcggacgtctaactcaaattttgaattttgaggggtacggtagccccaagagtacgcaaacaccgaggcttgcgtactactggcatcgaattttacgacagttagtccaaattggctgagaaccgggttcccgaggtaaaaagtgatggagaagtcgaattttgcagtgaaaatctgtgaaattagccggaaaatgctgaaaatccaatgtttttccgggaaaaataaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacgatatttattcaaattttcagcccaatttatgactgaaaatgtgaataaatacagtttttatgccagaaatctgcgtaggagcacaaaagtcactctgaaagagaatgttcatgtaattttgggatataaaatttcctttttatttttttttcaaatctagaagatttaatagtgaggattgctgaggagagtgcaaattttcaaataaatattttttttggcgaaaaaacatttttttttctcttcgaattcaaacttttcacaatttgcagagcttccggataatttccacccaaaaaattcaaatttcccacttaaaacccgccaaaatttctcaccttaaacaacggaaccaccttccaaacactaatcgcagccgacgaggagaactgtccaagtaccatttccataaagaacattggtagtgaggcgaggcataacatacataaatatggtacaaggaatgctgcaccgccatgttggaatactagaaatgggaatttccagaaacttcctgcaaaggaagagaaaattgtaaaaaaattaaaaattttccaaaaaaaaaaatttcttttcaagattttccagaaattttcgcgatttttcactgggaaattcaaatttttcgttaaaatcttacaaaaaaaaattcctaattgaaaaaatttgaatttcgaggggggtacggtagcttcgaaagtacgcaaacaccgaattttgcgaaatttcgcacaatttggctgaaaaaacagtcaccggggtgaaaatttgcggggaatttgaattttcgcatgaaaatgctggaaaaatatattgaaagttggaaattttaattttttgttgataaaaacgtttttttttcgaactttccaggaaatttcaggaattttcacattgaagttcgaattctccggtttattttgccgctattggacttttttcccaaaagccagtttgaaatttgaatttcgaggagtacggtagccccaaaagtacgcaaacacctgctaggcaccgaaccttacgacaattagtccaaattggctgaaaatcgggttacgggggtgaaaattgatggagaagccgaatttcgtaatgaaaaactgtgaaaatcactggaaaaaaaaaaatgaaaaacacgagttttcgggaaaatagaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcagccaatttaaggctgaaaatgtgaataaatacagtttttatgtcatcaatacgagtagaagcacataagtcacgaaaatatcgatttttagaagattttagggatttaaaccgaaatttttgtgattttccagttaaaaatgtttttattttcattatttgaaccaaaaactccaaaaaaaaaatcgataaacatggctaggaaccatcattttcagattggtggcctagaacccccgaaagttaggccatcaatctattttgttcgaaaaaaaaccaatttagggtaaaaatgagtggaaaactcaatttccaactgaaaatttgaaaaaaattactagaaatgtgagattttcgcttttcaaatcatttagacccaataaatgacaatttaaacttttttttccaaaattttggtgttgaaattcgtttttagaagaaaaaactataaaaaatcaatagaaaagttaatttttttggaaaaaataaagcaagtgcgctctattgagaaattactgaaaattcgattttttcactgattttgtctggtttcaacgtgaaaaatgcgttgaaaaattgaaatttcgagttttttttgcagaaaaatcgatattttatccatttttccactgaaaatcccaaaaatatccaatgtttcaccaaaaaaaaatcccccaaaacaagagatgttagaactttagaacacacacactctcttatcaatttataatcttatcaatttctcgcacgtactcatttcgtatggtcagattattatctgctgatatcgtggactttggcccctgttttcgccgaaaaatcgtaaaaattccggatttctggcctaaaaattagggaaaattattggttttttccatgaaaaagcagttaaaaattgctattttcatcaatttgatgcgaaaaaacttcaaaaagcccccagaaaatcaacgtttttacaagaaaaacaacgacactccgctagtacaccaacgcgtgttgtttagcggtttggcgggaattcaaatttctcgctttcttaccaactcccgctgtgaaaccaattactgctagcagataatccgacttgttactccaatttcctgaaaaaattttttttttcacaaaaattttttttgttggtattttagcatttttcaataaaaattttggtttttatggattttttcacacaaattcgtgtttttcacgtctccagcttcaaaatgacccccatcatgccctgtttccgtgcaatttgaaaaattcgggtctcgccacgcggggtactgtagcaccggtttcagctgtgtcgaaactacaaaagctcaaaatcaacgtattctggtcatgttgggggtcattcaaaagctgctgacgtggcgaattcaatgaaaacagtttggtggccgagttttggatttgaaggccaccaaatcgaaaaacgtggatttttgtcgcacctcgtatcctattttcgtctccgacacccgtaatctcttcgaatggatattcgatgtcaccttctcgtgtgtaatcgggcaattttgcgtcgagcttgaaaaatttcagggttttttttgcgaaaaaatcagttttttccctaaaaactcaaaattctcgctgaaatctttaacaaaatggcgggaattggtcgtttcccgccgtagatcaaacggaaatttgaattcccgccgaccgcgtggagcaagtgcgctccagcggactagtggcggggaatttgattttatttattttttcggcaatttttcagcaaattcaatgattttattggttttaggacaaaaattagtggaaattttcatcaaattttgtggtttttttggaatttttcacaaaaaatcgataatcatccaaatttttcgggaaaaacgtcaaaattatccgtttttctcgaattttccgaatttttccacaaacctgcttaataaacggaggatataggctcatatccacgttgtttccgcttgccatgccccgtccattcctctgctccggatcgttgctcgaaaccgacattttcggtgtggaaaaactcggtttttcttggaaaaatcgatttttcgtcggtttaaaacctgaaaattagcaattttcacgattttttgagctatttagcaagagattgcgaagaaaaatacgaattttagagtaaaaacgaaagagaaacgaggcgacgcggcggcccgttgttacacaaatttcggaagcagttggctcgcccgaattgaaaacatacgtgaaaagccggggaaaacgaatgaaaaagtgagaaattgtgggaaaatgtgggaaaaattagtttatttcaggaaaaaattggctataaatcggttttaatgagtttttagctgaaaatcaataattttcgggtcaaattttagatttttggggtcaaaatgctgcaactcacttccagaattcaattttaattataaaaatcgaaaattttaatgaaaaatttacgtttttcacgaaaaaccgctctggaaaataaaaatgttccaggttgccaatgcaaacgcgctccattgagaaatcgcttgttggcgggtgtttgaaatggaaattctgatgaaataaattaaattgggtttggaagcatctttgttggttgaataaagcatttattatgaaagaaataagatttaaacaaaaaaaaaccatttttacagagaaaataccagaaaacaccggaaattgttagtttttttttgaatttttcaggagaataccaacattttaaaactaataccggtgcaaaccgaaaatccactagaaaaactctaaaaatcacgaagactccaaaaatcacagtttttcttgaaatcaagtttttctcgaaaaatctatatttctctggggagtaatttgtgtagtttttggtgtcaaaatgcggctaaaaacattttctgtttgtttttcgcattttcaattgtaaaaaatcccttaaaaatggtgaaaattaggattttccaaagttattaaaaattgactctgcaattgcgctccattgctacgcatgagagagcagagacgcagagtacgaatcatgcaatttcaggttattttttgattttttacaggaaaaaattgttttcacaattttttctcaattttttttcaaattccagttaaaaaatatgaattttcgtcgatttctgcacacaacatatcgaatttccactccaggtacccgaaaaccccattatttactcagttttccgcgcggaaatcgcaattcttttcagaatttcgccaacaattcgaacttcccgcgcaatatgactatcggcagtggtttccaatgcatatgtccgtacaattgaaaaaaatggaagcgaaattgcgatccgtcgacttgataattgaggttttgcatggaaaatggaacttttacgattttttttttggaaaatctgtaaaatcaccggaaaaacgctgaaaaaccgaaaaactggtgtaaaaaactggtgtaagaattttagtgaatttttccgcctataaaagttgaaaaatcgggaaatattgcaaaaatcgacattttttccaggtccacgacgccagaatcccgattaccggccgaaatcagcagttttttcgacatttatacgctattcgaccgcatattctcgtcctgaacaagtgtgacttgatagatatgaagaaatacaagtgagaacccggaaaaattcgaaaaaatccggaaaaaacgcttgaaaaatcaagattttcagaatttctccgaaaaattttggattttttcgacgaaattcggctttttctcaacgaatttagtcaaaaattgcgattttccgacaaaaatccactttaatcacctaaaaatttgaattcccgccgaccgcgcagtgcaagtgcgctccagtggactagtggcgggaaattcgaatttttggctattttagcgcgattttttgcacttttttaacgatttctgggtgaaattcgaccggatttttataaaaaatgaagaaaaatcgattctttttacctttttttcggaaaaaacgctgtaaaatccgaaattttctcaaaaattccccattttcaggcaccaaatcgaggattattactacgagcggggcgttcaaaaagttttattcacagactgcaaaaaacggcttccaaggtgattttggagctgaaaaattcagaaaaatgcataaaaattctgaaaaatgcataaaaattcagaaaaatgcataaaaattctgaaaaatgcataaaaattcagaaaaatgcataaaaattctgaaaaaatctgaaaaaagcataaaaatgcataaaaattcagaaaaatacataaaaattcagaaaaatacataaaaattcagaaaaatacataaaaattcagaaaaatacataaaaattcagaaaaatgcataaaaattcagaaaaatacataaaaattcagaaaaatgcataaaaattcagaaaaatgcataaaaattctgaaaaattctgaaaaatgcataaaaattcagaaaaatgcataaaaattctgaaaaattctgaaaaatgcagaaaattgctggaaaatgccgaaatttccctactaaactgcaaatttcaagagctctgaacgatgtgaagctgtcaatgttagacgctttggagaatacgccacgtttcaatcgaaccgtcaaaacagaatatcaggcaatggtcgtcggaatcccgaatgtcggaaaatcatccctaatcaacgcgattcgaacacatacgctcggaattaagcgtaaagctgtgagaaaatcgcttcaagacccgaaaattcgaatcgcccacgtctccagctttcaaatgacccccaacatgccctggttccgcgcattttgaaaatttttgggtctcgccacgcgggttactgtagcaccggtttcatctgtgtcgaaaacttccaaagttcaaaatcaacggaacctgggcatgttggggctcattttgaagctggtgacgtcagtaattcaatgaggagaagttggtggccgagttttggttttctaggccaccaactttgaaaacatggatttttacttaaaaaatcgtttttttcggtttttttttgcaattattcgaactttaacctaaatttcaaattttgcactgaaaattcgtctaaaaaccccttaaaattgacaaaaatcgtctgaaaattcaaagtcccgccgaccacatgttgcaagtgcgctccagtgcgaaaagtgtcatttttctactgaaaatcttaaattttcactaaaaatcctaatttttcaataaaagtctcaaaattacacaaaaattcctaattttcactaaaaatttcaaattttcactaaacatctcaaaatttcactaaaaatctcaaaatttcactaaaaatctcaaaatttcactaaacatctcaaaatttcactaaaaatctcaaaatttcactaaaaatctcaaaatttcactaaacatctcaaaatttcactaaacatctcaaaatttcactaaaaatctcaaaatttcactaaaaatctcaaaatttcactaaaaatctcaaaatttcactaaaaatctcaaaatttcactaaacatctcaaaatttcactaaacatctcaaaatttcactaaaaatctcaaaatttcactaaaaatctcaaaatttcactaaaaatctcaaaatttcactaaaaatctcaaaatttcactaaaaatctcaaattttcaggtagaagccggcgcgagaccaggagtaacggtccgtgtccaaaatcgggtccgaattctcgacaaaccgcccgtctacattattgatacacccggagtactatcaccaaatcatcgaaatgtcgaagatgctatgaaactggcaatgtgtgatttagtactagaaagtcatgttaatttgtattatttggctgatttcttgctcttttggcttaatcgatcggaggatttttcatatttggagctgctgggaattaatcagaaattcaggaaaaattccgagaaaaatgaggaaaatttaggtgaattttgaggaaaaaaaccctaaagatcgatatttctattgatttttctcgaattttgagttaaaaattgagtttctcactcatttttacacctagaaattgcggttttcgcacaaaatagattggtggcctaccttttgggatttctaggccaccatggtggtttcaaaccatttttatcgatttttatctcaaataatggggcaataaaaaggattttaactgaaaaaccgaaaaattttcagtttacattcctaaaatccccgaaaaaaccgaattttttaattaaaaaaagttgggaaaaatttttaattgattttttttttcaaaaacttgtgatttttcactctatcaattgaattttgatgaaatattcagattttcaaatattttggaatttcaaatttcaaaattttaaatttccacaaaaactcgatatttcccctgtgacttgtgcgtttctcagatttctggcataaaaacgagtatttattcacattttcagtcttaaattgggctgaaaatgtgaataaataccgtatttctggcaacaatttgacaatagagcacatttgtcactcggacatgcggaagctatgacgaattgtcgtaaggttcggacgaattgtcgtaaggttcggtgcctagcaggtgtttgcgtacttttggcgctaccgtacccctcgaaatttaaaaatagggttagaagccccgaaataggtccccgcggtgtgaaattcaacggggaattcgaattttagtgtgaaaactgctgaaaaatcctggaaaattctgcaaaaaaaagttttcattaaaaattcaaaatttccaagtttaaaattatttttcctaaattttcatgccaaaattcgaattccccgcaggtttatagccccctctgaccgctttttcagccaattcgtgcaaaatttcgtaaaattcagtttttgcgtactttcggagctaccgtacccccctcgaaattcaaaatttagctaggaagccaaaaaaatcgagtttcgggtgaaaatcggcagtaaaaactgagttttagtgagaaaaaaaacgaatttttatcaaatttgggcgaatttggacgtaaattttcgattttttccagtgaaaaaactccaaaaacctttgatttttgcagatatttcgccgaaacaggctccaattgatgatattcagcaagttttggccctaacttgcgctgcaaatgactttagaattcaacaaagtattggagaaagatgggattttgatcgagccgccaaatatttcattcaactctacagaaatcgaaaattcaaggattcttgcctcgataatgagcattttttgtatcgaaattaggagatttttcgttgatttttcatgttttttgttgttatttttagaaatatttgataaaaactgcatttttaatgatttttccccattaaaatcggcaaaaaacgggataaaacctcaattgtaagtaaaaaatttgaattcccgggctgctaaacaacacgcgctgtggcgtactagcggagtgtcgtagtttttggcggaaaattggattatcgagtggttttaaggcttttatctcaattttttgatatattttgcattaaaaaaagcttctgaacacagaattttggaattttgtaaaaaatatagtgaaaaaaatttttacaaaaaattttttttttttgaaaaacatttattttcaatgtaaaagtacacaaataattatttatactccttaatttctgcatttttctccaaaaaactcgaaaattcagaaatcaatcgatttttcggcaattcaaatgtgaattccttgaaagcagtgctatagccgatttgtttgaatcctagtttcttcttgaataggctcaggcttggtgtgttgtcatcggtaatttttacgcagaattgctcgattttcagattctgaaaaattgaaaattttcgaaaaaaatattttttttgctcatttttcaaaactgtcaaaaaccatgtcaaaattcttattctcctcattttcagcttcaaaatgacccccaacacgaccatattccgttcaatttgacaaccgacacagctgatatcggtgctacagtaacccgcgtggcgagacccaaaattttcaaattgcgcggaaccaggacatgatgggggtcattttgacgctgaaagtgtggagaactcgaatttcagctcaaaatcgagaaattttgaagaataaaatttttctgaaaaacaaaaaaaaattcaattttttttcgaactaaaatttttttaattttcaaaactgtcaaaaatcatgttaaaattcatattctccacgtcaccagctttaaattgacccctacaagcctatgttccgcgcatttttcccaccgacacagctgatatcggtgctacagtaacccgcgtggcgagacctaaaattttcaaactacgcggaaccagtgcgtgatggggggtcattttgaagctgggagtgaggagaactcgaatttttataaaagaaattagttaggagaaatttgacaaaaaaaattctgaaaaaaaaaattgtttcagaattttttttcaaaatttttttttcaacttttacatccaacaaaaacttttttttagaagaaaaaaagtattttacctcatacgcccacgcaataataaccctcacagcctcctctccaatgccttttcctctgccacgtggctccgctatcataacctctacctcaccagtgatgacgtcatcgctagggttttcagtggacggtgacgtggaaatgaacaaattcacatcgccaagcatgtgatctacctgaaatttcggaaaatttccaaaaaaaaaatcggaaaaaaacacacttttcttttcgaaaatgcaaaaatttttgataaaaacagaatttttagtgatttttcacattgaaatcggcaaaaaagtgtaaaaaaccccaattttaagtcaaaaatttgaattcgcgggtgaccagcgctaaacaacacgcgctgtggcgtactaggagtgtcgtagtttttggcggaaaagtcgattttcgagtggttataatgctattttcccaattttttggtctatttttaattcaaaacggttctgagcccgtgaatttcaaatttttggaggcaaaaacttgaaaaaaacggggttttcctgaaaaatccctacttcttctccactttcattcatttcaagaacgataaacgttagtttatcctcatcatttcgccaagttttctgcatttcatattcctcatccaacgacaattgttcagagccggtgagtcggcgaatctcctcgttttccatccatttgtggtattttgcaacgtggcacggctcgtacggcactaaaatgcacttttttgcgacgattttcacgttggaattgagtttcattgcctggaatatcgaaaaatgcgagaaattcgaggaaaatcatgtaaaaacgccggaaaatgaaaaaaattatataaattcccgtggccgcggcctagaaatcccaactgtttctcactggagcgcgcttgctcgctccacgggcaaatttgttttcagccatttttagtgattttcctctgaaaatccgtggtttttcacgattttttcgcttaaaatattgaaaaatcatgaatttgtatgcgaaaatccattaaaaacctatttttcacctcaaaaacctcgattttcaggtcgaattgagccatgctcggaagaacgtgccaaaagcttcaggcagccgcgccgattgtgagttattagtggaaaattgtcaatttcgactgaaaaagctggaaaagtcgtggaaaatcaatcaaaatcgctgaaatttttttttctgcgaaaaaatcccgatttttgccagattttcaccaatttccgcgaaaaatcactgaaaaaaatttcaaaatttccagcaatcatcgattcgtggaaaagcacgtggcgtcgttgttcaaagctattctgcagacgttttgccgtacaaagggcagccagcaggcacaaagtcgaatcgtgtgaagcttgaagccggaaaaacgtatcattggtgctcatgcgggttgagcatcactcaggtgcttattttcgagcattttctcatggaaatcgtcgaaaaacagctaaaatgccgaaaaaatcgcggaaaattgataaaatttagctattttaggcttaaaatggcgcctatgtgcctttaaagtcgtgatgaaacccaaaattttgttaaacgtgaatgctagtgaaaaaattacaaaaaaagctcatttttgctcaaattttaatcaatattctagaaaaatccaacatttttcgaaaattaccctaattttcccggaaaaagctcagacggtctatttttgttacgaaaaacgctggaaataaagattttttgcgattttctgctcaaaaatttggttattgcagctataattaacgaattttgccctaaaattagaattccggtcatttttcgcgtttaaatatttttaatcacatttctagtgattttgcccaaattttcagttaaaaattaagtttttcactcatttttacccctagaaattggttttttcgctcaaaatagattggcggcctaacttttgggatttctaggccaccaatctgaaaacgaaaaatcttctaaaaatcgataattcccctgtgacttgtgcgtttctcagatttctggcataaatactgtgtttattcacattttcagtcttaaattggctgaaaatgtgaataaataccgtatttctgccaacaatttggcaatagagcacatttgtcactcggacatgcggaagctatgcccaaattttcaatgattttcacacattttcacacattttcagtacaaaattcgagttctccatcacattttccccccctaacccgattttcagtcaatttagactaattgtcgtaaagttcggtgccaagtacgcaaggcactcggtgtttgcgtacttttgggactaccgtacccctcgaaattcaaatttaaatctagagacccagaaaaagggtgctaggcgtgtgaaattcgacgacgattttaacactgaaaaatgccttaaaaaaccggaaaattcctgaaaaatccaaaaattttttgcagccattctgcgacggaacccacaaaacgcccggattaaccaacgttcgccccgtcagttttcaagttgaaaaaactggaatttatccaatgtgtgactgcaaacagactggaactcgaccaatttgcgatggaaaacacgctgatgtacggggaaaatggggaaaatttcgaagattttcacctaaaaatcgaatttctcgcaaaatttgagataaaaactggaaaaatcccattttaatgaaatttggctcaaaattatgcaaattctgcttgttttgaccaaaaaaatccaatttttaaataaattcgtcagaaaatcaattttccgccaaaaaacccatgaaacttcaagaaaattcaattttccacaaaattcgccactaaaatcatgaaatttcaggatttttgacctaaaaatggcaatttttcaaaaaaaaaaatcgtgatttgccacaaaatttcagtcaaaatccaatttttagctcaaaaattatggaatttaacggaagagtccaataaattcatgaaaaactaaatttttggcttaaaaaatcgatttttcactcacatttgctcaaaaatcatgaaatttccacattttcgacctaaaaacggcataaaatgccaatttccagccaaaagccaatttttagctgaaaaaattgtgaattttaccaagaaaatcattaaattcatgaaaaactgagtttttggctcaaaattatcgattttcacttactttgtcccaaaaatcatgaaatttccagatttttcacttaaaaatgtcatttttcagccaaaaagccacttttttgctcaaaaattgtcaatttaacggaaaatatcataaaattcatgaaaaattgatttttcagcttaaaaatgtcgatttcttactaattttatctcaaaaaccacgaaattttcagatttttaacgtaaaaacgtcatttttcaaccaaaatccagaattttagctcaaaaattgcgaatttaacgggaattatcataaaattataaaaaattcaattttcactaattttggctaaaaaatcatgaatttttatgatttttgttttaaaacgccaattttcagccaaaaatccaaatttttagctcaaaaattgcgaatttaacgggaattatcataaaatttataaaaaattcaattttcactaattttggctgaaaaatcatgaatttttatgatttttaccctaaaaacctcaattttcagccaaaaatcccaattttttcaggtatccaaagctccacgtgatctaaacgctacgagaatggttgcattcgacgaatcgccagtttacgcaggagttgctcaaaaattgggatataagccgaaaaatggtggattccagtagtccggagactacgctgagacagcagccgaaatcaaaaaaagtaccagaaaaactgaaagcagtagatttttttttattggaaaaaattttttaggggttttttcccgatttttaatgtgtgaataaagtaatttttaagtgaaaaatcgatttttctggtgcaaagaaatcgataatttcggaaaaaatcgattttattaccggaaagtcgataattttcgattttttcggtgtttgcgtacttttcgaggtacagtaccccccctaattttcaggaaaatcgatttttttttcgactaaaaatcgataatttttggcaattatcgatttttgaacagaaaaaaacacgaaaatttttggaatttccagggttttgcgtacttttcaaggtacagtcccccctagaagttcatattttttaatttcccgggttactgtagctgctggaaaagtacgcaaacactgagaaataatccaaaaattatcgatttttcggttcaaaaatcgataatttcggaaaatatcgattttagaaacgaaaaaacaaaaatttccaatattttcaggttttgaactgcaaaaattcaactttatcgtattttgcgtagtacttttggggctacagtaacccccgggaaatttgaaaattcgaattttcgagttctgaactttaaaaatatgcgaaaaatggaatatttgtattggttttctgaaaaatttcgatttttgtactgaaaaaaccgaaaatttggcaatatttcggtgtttgcgtactttcggagctacagtaccccctagaatatcagaatttcaaaaatattgatttttcgaccgaaaattcaattttttttcaattttcgggttactgtagattgaaaagtacgcaaacaccgagaaattacaaaaattatcgatttttgtaccgaaaaatgaaacgttttggaattttcggtgctcgcgtactgttccagctacagtaaccggaaaattttagaaatttccggaaaagtggttcaaatctgttgaaaatctttttttcggatcaaaaatcgataatttttagatttttcggtgtttgcgtacttttggagctacagtaacccgaaaaattcgaacttttcgcataaaaaatcgataatttgtgaaattatcgatctttgtaccgaaaaatttgaaattttccaatttttcacattttaaactgcaaaaattcaaattaatcgtattttgcgtacttttggggctacagtaacccccgggaaatttgaaaattcgaagttctgaactttaaaaaatgcgaaaaatggaatttttgtattggttttctgaaaaaactacgatttttgtgccgaaaaatcgaaaagtgggcaatttttcggtgtttgcgtacttttcgagctacagtaacccgaagaatttggagtttcctaaaaaaaaccgaatttttcgtatcaaaaaatcgataatttgagaaattttgcaaataattgatttttgaactgaaaaattcgaaaatttctcatttttccagacttttggggggctacagtaacctgaaaattcgaatttttcagaaaatttcgaaaaaaaaaattttttttttggtttttttctgcaaaaatattgattttttcggaaaattttttagttttttcagtttttcatcaatatttcaaccaacaacacacacttaaaaaatcaataataaataaaattttaaaaaattcgaattaataatcatcgtcagcggcggcggaggtggcagcaggacccctcattctcttctcggcgagctctccttcggtgccaaattcgtaatagtgtggagccaattcgtaaagccattcaggctcaataactgtgacgtcacggatcgaatcctgcatcacttcggtgaagattaccctgaaaaaaaaaacttttttttttcatcgaaaaatgattttttaatcaaaaatttgaattttccacgctcccagcttcaatttgacccccaacatgcccatattccgttcaacttgacccaccgacacagctgaaatcggtgctacagtaacccgcgtggcgggacccaaaatatgaaaagtgacggaatcagggcatgatgagggtcattttgaagcagggagtgaggggggaattcaaattcgaaaattgtttctcgtcggaaaaacagaaaaattgcaaaaaaaaattgttttcttcaatttttgattttttttcacaatttcaaagtttatacacaaccatgttaaaattcatattctcctcattttcagctttaaaatgacccccaacatgactatattccgcgcattttgaccaccgacacagctgaaaacggtgctacagtaacccgcgtggcgggacccaacatttgaaaaagtgacgtaatcggggcatgatgagggtcatttcgaagctgagattatggagaacttgaatttcaacttaaaacctagaaatttcgaaaaataaatgtttttttctgaaaaaacaaaaaaaaattcaacattttctttttttttctggaattttttaaatattaattttttgcaaaactgataaaatattcgaaattttgacagccttagcttcaaaatgacccccatcatgaccatgttccgcgcactttgaccactgacacagctgaaaccggtgctacagtaacccgcgtggcgggacccaaaatttgaaaaagtgacgtaatcgggacatgatgagggtcattgtgaagctgagatcatggagaacttgaatttcaacttaaaacctagaaatttcgaaaaatacaattttttttttctgaaaaaactttttaaaaaaattcgaaaaaaaatatttttttcggaatttttcctttaaaatgtttatttctgtgcaaatttgatagcatattcgatttctcctcattttcagcttcaaattgacccccacattgcctatcatccgcccatttttaaaaattcgggtctctccacgaggggtactgtagcaccgatttcagctgtgtcaaaacttccaaaattcaaattgaatggtggaatgtggtcatgttgggggtgtcaaaatgaagctgaaaacgtggaaatatgaattttagcttaaatttaggattttttgaaaaaaaaaaaattccgaaaaaaaacaaatttttttggaaattttttgattttttaatttttcaaaaaaattcaattttttctcaaattttcctgtaataccatttcggatagtctttcttgaacataatcgacgatcctttgtacatattgaaggggaagctctccttgactgtcatatatttccctgtgtagtgatattgggccgcctgggagaagaagccggttacaaggcattgtcggatgttttcagagcaatctgaaatttttaaaaaaattaggaaagagaattgttacagaattcagaaaaaaatcaaagaaataaaaataaaaatttttcaaaaatttttccccaaaaatctttcaatagttcacttggaaaccttaatattcgttttctacagattcccagctttcaaatgacccccatattgcctatgttccgtcactttttgaaaatttgggtctcgccacgcgggttacggtagcaccggtttcagctgtgtcggttttcaaaatcaacggaacatggtcatgatggggcttattttaaagctgaaaacttggagaatctgaattccagctcaaaaataaaaacatttttttttcgaaaatattatttttctcaaaattcccaaaaaaaaatttccatttgttgcaaatccttcatataggtaaaaattcgaattctccacgtgagcagcttcaaattgacccccatattgactataatccgctcattttgaaaatgttgggtctcgccacgcggggtactgtagcaccaatttcagctgtgtcgaatctgccaaacttcaaaattgccggatcctgggcatgatgggggtcattttaaagctagtgacaggaggaattcgaatttcagctcaaaaaatgaaaaattttaggaaaaaaaattaaaaaaaatttttttttttgaaaaacctactaataagcccgcgacttgaaactttctcaatctcaaatctcttcaacagcctgacaagttggctccgcacattatccgccctcataagcccccgataattcacaaaatgatcggagcaccacttcttgctgcggccattttcgacgaatttcgtgaaaacattgagcattgtcatgtgatctccttcttcgaccgcgaatttctttcgaatgacgtcagcttgatgacgttgacgatatggggtaataaagacatcctggatttgcatcattgcaacaattgtcaccatttctgtggagcacccgaattcggcggatttcagtagacatttactgtgcattggtggtaatggaaattctgccatttgtagacccaatggggatgttagttgggatctgaaaaattttgaattttcgaaaaaaaaaatttttttttcgaaatttttcccaaacatttttttttcaatttttcgcgctaattttcttgaattttcattacaaaattcaaattccccgttattttctaccctttgctcatggaattttggtgttttaaccaattttcaaaattccgaggggtactgtagccccaaaaatacgcaaacacggaattttggagatttttgagaactcatgggatccggtgtcaaattttgagagaaattcaaattttgtggtaaaaatccatgagaataacccaatatagatgaaatctgaaaaaatttgaattttcaaaaaaaaacaatttttcgaaattttttttgcaaaatttttgtttaacttttcgctaattttcttgaattttcatcataaaattcaaattccccttcactttttactcctacagtcccaaattttggtgttttaaccaattttcaaaattccgaggggtactgtagccccaaaagtacgcaagcacggaattttgaaaaatttcgggttagagctttgaaaatcagggttaaggggtaaaaaatgacagagaacacgaatatcataacaaaaacgacgaaaaattcgtagtttcttgagtactgtagctaaatgctctccggtttaaaggtacatacgtttcgtcgattgctccaagcgcgtaaagaagctccaaaccgttgatcatcgcccaggacgggggtggctgaaaattgatccaaattttaataatagaagtggtctaaaaactcaatttccctagtggtggcctagaaacccgattcctcgtgtggcctagaatttcaaaactcggccccaccattgaactcagctcactgagagctttcaaatgacccccaacatgccctggttccggtgattctgaaaatttcgggtctcgccacgcgtggtactgtagcaccagtttcagctgtgtcgaaacgatcaaaatctcaaagtcaacggaagatggccttgatgggggtcattttgaaactgataacgtggtgaatcttaattttttttcaaatttgacaaaaatctgattttttataaattttccaaaaaaaaattttttttttgaaaatttgaaaaattctaaaaattgttatttctcaaaatttcacttggaaaacttgatattcgttctctactggttcccagcttcaaaatgacccccatattgcctataatccgctcattttgaaaatgttgggtctcgccacgcggggtactgtagcaccagtttcagctgtgtcgaaacttccaaaaactcaaaatcaacgcaacccgggcatgatgggggtcattttgaagctgatagcgtggcaaagtcgataaaaataatagttttccggaaaaattaatattggaattaaaatttttttttttcaaaattctaaatttctcacaatcaaaatgagttgaattttttaccgataaatagtgaaatctgtgcacattctgcacaccaagagctttcaactgcaaaattgtgctcgccatctggcaccgctgaatttcgggtaccgtaccctcggcgaaccgttcaaactccgattccgggtacaggcgatagcattttccgggtcgaatacgtccggcacgtccggcacgttgttcggcggatgctttggatacagtaacccgcattagggtctccacaccgttggcggcgtgttgggcgcgaagcttcacgtagccagtgtcaatgacgtagcagatgccgggaattgtgatggatgcttcggctatgttggttgcaacgaccactttacgggttccatggggtgttgagtcgaaggctttcatttgctcgcgagctgaaaaattttcaattaaaaaaaaattgttttttttggaatttttttccaaaaattttttattcgaaattttttccgaaaacaattgctattttcaaattccgcttactctcagctttcgaatgacccccatcacgacccaattccgtcacttttcatattttgggtctcgccactcgggttactgtagcaccggcttcagctgtgtcggtggtcaaattgcacggaatatgggcatgttgggggtcaaattgcaactggtaacgtggagaatatgaattttgacttggttttgaatgattttcgaaaatatgaaaaattgaaattaaaaaaaatgttttttttggaggaaaaaattttatttgaaatttttacagaaaacgatagctattttcgaattctccttattcccagctttcaaatgacccccatcacgtcccaactccgtcacttttcaaattttgggtcccgccacgcggagtactgtagcaccggcttcagctgtgtcggtggtcaaaatgcaccgaacatggttatgatgggggtcattttgaagctgagggcgaggcaaaaatgaatttcgacttggttttgcacgatattcgaaaataagaaaaattgaaattttcaaaaaaaatcccgaatttttttccaaaatttttttatttgagattgttccagaaaacaattgctatttccgaattctcccccctccaagcttccaaatgacccccatcacggcccaattccgtcacttttcaaattttgggtcccgccacgcgggttactgtagcttcagttcagctgtgtcggtggccaaattgcacggaatatgggcatgttaggggtcattttgaagctgataacatgagaaatttcaatttattctccattttccggcattttcagccaaaaaaatcaccaggaagcgctccatagcacggaaccacccacagacggtcgcaatttttcaaatttccagccagctcgcggagcttctcacaaacgtcttccacctcgtcttgtcctgtcaagaataccagaatatcgccaggattctcgtgtttgtgaatatttattacagtatccaccgccgattgacagtaatctggcactgacctgaaaaaaaaaaattatttgaaatttacgttcaaaatttgctcaaatttgtaattctgagcttagtagcttcaaaatgacccccaacatgcctaggttccgacgattttgaaaactttgggtctcgccacgcggggtactgtagcaccagtttcagctgtgtcggttgtcaaattgcacggacaccaggcatgttgggggtcattttgaagctgatgacgtagagaatatgatttattgaattaaaaaaatttttttgaaaaattaaaaattatagaaatttttttttattccaaaaattttatttccccgaaattttacatggaaaactggatattcgtgttctctaggtctccagctttaaaatgacccccaacatgcctaggttccgtgcaatgtgaaaatttcgggtctcgccacgcgggatactgtagcaccagtttcagctgtgtcgaaacatcaaaaactcaaaatcgccggaaatagggcatgatgggagtcaaattgaagctgacgacgtggagaatatgaatttctacatagttttcaataaaattttgaattgaaaatttctttttttgaaaaaattaaaaatttttttgcaaattttttttttttttgcaattttttccacatccactaacgtttttgtatgatgtactgcaactggatgtgttcttccctccactgaaataattccagcagtatctttatccgaatttcccgtctcattcatctcgaaaaaatccttaaaaagctcggcgtccagcgtcgccgaggacacaataatcctcagatcattgcgaatttgtatgatttttcgaagtaacccgagcaaaatatccgtgttacatgaccgttcgtgtgcctcgtcaatcatgataatgctggaaattttttttttgaaaaataatttttttttaatcgaaaaattgagagattttttgaaaatttgaagattttcacgtaaaaattcggatttcccatttaatttcacacctaataagcatttttcccggcctcaattccaaattttgaatttcgaggggtacggtagcgccaaaagtacgcaaacaccgaattttacgacattttgcacaaattggctgaaaaagctgttccaggggtggaaatttacggggaatttgaattttggcatgacaatgtatagaaaacaatttgaaatttgaaaatactgaattttttgttaaaaactttttttcagaattttccagaagttttcaaagattttcagactgaaattcgaattgctcgtcaaatttcacccctaaaaacctttttggggcttctaaccctatttttgaatttcgaggggtacggtagcgccaaaagtacgcaaacaccgagtgtcttgcgtactcggcacccaaccttacgacagttagtctaaattggctgaaaaccggattccgagggtaaaaaatgatggagaagtcgaatttcgtattgaaaatctgtaaaaatcacaagtttttcgggaaaaacgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgccaaattgttggcagaaatacggtatttattcacatttttagcccaatttatgactgaaaatgtgaataaatacagtatttatgccaaaaatctgaatagaagcacaaaagtcacaggggaaatatcgattttttggggagcaagggacatttttccgtaatttttcggggaaaatgtgagtttttatcaaatttttctatgttttagcagttttctgcaagaaaatcctgttgaaaaattgtttctaggcggaggattttcggatttcttcaaaattttccgggtaaaaattcaaaaaatcacctatatttcgataatagtggatctgcaaggatctccctcaacaatagcccatcagtcataaatttgactttagtatccttatccgatacatcatcaaatcttacagtatacccaacgtcgtgccccaaaatacagtccttctcctcggcgactcgggtggctaactgcaaaatttttcaatttttcacccaataaatttcaggtatttgaatttcccgccaagccataccgtaaccacggccacccttcgtggctgagtaatgacgatttggcggccgtcggccgcccaaccggcttctagaaggaattggggtacttgagtgctctttccgcatcctgtttcgccgacaatgattattgtacgatatcgttcgcacatgtagagaatgtgaccgcgattctgaatgaaaaattaattttcatttgaaaaaaaattttcgaaaaaaacaattttttttttttttggaaatttttttttgaatttttcgcagatgttcaataattttacactttttatctactttaccactaaaaaatagggttccagctcaaaatttaaatttcgaggggtacggtagccccaaaagtacgcaaacaccgaggcttgcgtacttggcaccgaaccttacgacagtttcttcaaattggctgaaaaccgggctccgggggtaaaaagtgatggagaagtcgaatttcatactgaaaattagcgaaaatcatcggaaaaatgctaaaaatttgaagttttccgaaaaaatgaaaatttgggcatagcttccgcatctccaagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcagcccaatttaagactgcaaatgtgaataaataaagtttttatgccatcaatacgagtagaagcacatgagtcactgaaatttcaatttgggaaaaaatttaacttattaaaaatttagcttcagttaaaactacaaaaaattattgaaaattttttatcttgaattaagaaaaattaaatagtaaagaaaaaaaattaattcaaaaaatcgaaaaagaaatttttattttttggaagaaaatgtttttttttttttgaaaattacagtttgtaggtaggtagagtgtataaatttgagcttttttgatattattattgtaacattttgaaaaaaaaaaacaatttcaaatttaaacaaatcgatatttttttttcgaatttttcaaaaaaatattttccaaaattttttttttttagttttcaggatttttctcaattttttagctcaaactgtgcaaaatttaattttctcacaactgcacaatatctgaattttttcgatttttatagaaacagttttttctcgaaaaatctttttattttttttttaaattgttaaatttttagctggcactatgtgaaaatttttggtctaaaaagaaaactgggacaaatgtttgaaaatttcaaaaaaaatttccgaaaaaaattttttcataaaaaaaaaaactttcaaaatttttttcacaaaaaattcaaatttcgcggcgccaaagaatttcccgtagaacattttcttcaccttaaaaataggtaatctaattctctgctgttgaatattcaatgaagcatatggattattgtgcacttttagttgctcttcaatcggcggagctgctcccgcgttttcggtagatcgttcctcgaaaatcagtggtccggtacgtggagcgtctgcagagtcatccggtcgagcaaaaccacgacgggctccggctccttttctgggctcctgacggtgaccgtgtcccgggtgataggacatttatggctgaaaattcaagttttttcagtgaaaattttagatttttcactgaaaaaagtgagaaaaactatttaattcatggaaaactaaagaaattcggaaaaaaaacgccaaaattgaacaaaaaccctttcattttcaatgatggcctagaaatccaaatccacgtggcctagaattccaaaactcgggcaccaataaattcagctcactgagagctttcaaataacccccaacatgcccaggttccggtgattttgaaatttttgggtctcgccacgcggggtactgtagcaccggtttcagctgtgtcgaaacgcgaaaaaaactcaaaatcgccggaaatagggcatgatggggttcaaattgaagctgagaatagcgggaattcgaatttttcagaattttcaagaaatttatagaaaatttgagtttttctggactttggactaactttttcaaaaaatttcaaaaaagtggttttttttttgaaaaaaatagttttaacaaccaattcgcacaaaatactatttaaaactatttggtaaaactaaatttccgagcaaatttcgaaaaaaaaggtcaaaatctccgatttctgagtaatggcctagaaaccccagttctcgtggcctaaaattccaaaactctgccaccattgaactcagctcactgagagctttcaaatggcccccaacatgcccaggttccggtgattttgaaatttttgggtctcgccacgcggggtactgtagcaccggtttcagctgtgtcgaaacgacgaaaaacctcaaaatcgccggaacccgggcatgatgggggtcaaattggagctgagaatggcgggaaatcgaatttctacatggttttcaataaatttttgaattgaaaaaaaaattgtagaaaaagtaataaaattcgaattttacaaatttttcagctaccatataataaaaggacaagaaattcgcagaggaatgactattattttcaaaagattttacgagattggtataaacaaattttaaaaaaataattctaaaaaaatggggaaaatttcaaagaaaaataatttaaaattccaatttcaaaaatttcaaaaaacgaacgccgaattcgaattctccgagtcatcagctttcaaatgacccccaacatgcccgggtttcgtcgattttgaaaatttcgggtctcgccacgcgggttactgtagcaccgatttcagctgtgtcaaaacggcgaaaattcaaaatcgccggaacccaggcatgtagtgggtcatttgaaagctgatgacgtggagaatacgaatctgacattcatttttggaaaatttcaaaatttcacaatttcaacaataaaaaatgcgagaaaattatcgattttttcactttttctttgccgattgttcctgaatcttcttctgctcgtcggcgatcgcatcataaaagcaattatcgggaaaaacgtgcggatcgaagatatttttcgcgaaattcgtgcctttttcgtcaatttcgaacgcatcgatgaatgttgtgtagctcatcggattattgtactgctgattgccttgaatttgttgatttagatcggttccgagggctttttgacgaaaagcatgctcaaatcgtgttgcaatcgctggattcacttcgatctccggtggtggcgggattttgagctgctgctctctggtgctctcggcggctccttggtgagttggagctgaaaattataatttttgtttgagaaatttcagttagaaattcaattttacactataaaccttgaaaattctccgaaaaattctgaaaattacaagttttccgggaaaaaaaaaatgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcatattttcaaccaattttagctatttttaagcggaaaatatgaataaatacagtttttatgccaccaatctgagttgaagcacacaagccacaggggaaatatcgatttttttgggacttcccagcttaaattgcacaaagattgagcttctagcaatttttatttgagcagcttgaacatagaaaattgaattttcatgattatcgatgaaaaattctcaaagtttctggcgttttctatttttttttttttggaaagtttagcattcaaatgtgtgtttaacttttaaaagtaactaaaattcaacaaaaattgcgttggtgtagtagaaaaagttaggccaccatttttttttcgactaaaaattggctaaacgggttaagattcatgcttttttttaaaatttccactgaattggtataaaagatggacaattcagccttttgctcaatattttcacttttgaacagaaaaattccgaaattccaattggtggcctagattttccagaagttcggaaaaaatcgccaaaaaatgaaaatttgggcatagcttccgcatgtccgagtgacaaatgtgctctattgacaaattgttggcagaaatacggtatttattcacattttcagcaaatttagtgctgaaaatgtgattaaatacagtttttatgccagaaatctgagaaacgcacaagtcacaggggaaatatcgatttttagaagattttattttttttttaactgaaaatttcgcgattttcaagtcaaaaaggtttttattaccattatttgaaataaaactttcaaaaaatcgatgaaaaacggcttgaaaccatcattttcagattggtggcctagaaattccaaaagttaggccaccaatctattttgtgcgaaaaaaccatttctaggggtaaaaatgagtgggaaactcaattctcaactgaaaaactgagaaaaatcactagaaattcgagatttttcgcttttaaaatcatttagagagcttttatagctgaaaaatcgaaattttttgatttcctggaatttttgctaaattttgtacggtggaaattgaaaaaaaaatccaatatttggtgtttttctataagaattctgatttagtcgatttttagctcccaaaacagctagcttggtctagttttgtaattttctaggccaccactagaaaaatcccgtacttttatcgaaattttccgccgaaaacggtgaatccacaactgaatcccgtccaggcgtatctgaaggtgaaatttcatcgatattcattcgtaatatcgcctcatttccctctttaattgctcgatcaatgagctcttgctcttcgtcactttcaacgtcacggctctgtcgtggcggtggagccggttctctgatctctgaaattggcgtggctccggagattttaggcggttcggaggaatcttcatcgtcgtcatctccgtctccggaatatgaaaccaatgaagttgtggaggcggcctggaaaatttgaaattttttggccgagttttagatttctaggccagcttaagcctaagcctaagcttggccctaagcctgagtttaagcctaagcctggggctcagcctaagcctaggcctaagcttgagcctaagcctaagcctaaaatcgctgatttttgacggaaaattcgaatttttaatcggtttttcacattttccaatgccaaattcaatttttttagcggaaattccgagttttcgcgtcaaaatttcgtgatttagccgttttcccgcgattttcacaaatcctacatgtggcattccaataactggagttctgaacgctgctggcgatggagaatgatcatcaagtcgttttggagccggtggctcggcgaaatccttcggcgaatcctcttcgtctgaaaaaagcccattttttgggcgattttcccccaataaaatcgataatttacctccataaacgtcggaagctcgtcgttttctctctttttcgaattcttctttgaatttctgcgctgtgctttggcctggaacaatttagaaatttaatttttatgatatttccggcgaaaaaccttctgatgaccttcttcgcggcgattcatcatcactttctccttcgtaatccactaaattgttcattttttgactgaaaaatgcaataatgagcttgaaatctgggaaaaattgatattttatacaaaaaataaatatttttttaattcgaaacttgtccgagaggagtacacgtcaggtggtccgcaaacaccgtcacgttagaatgcacagaatgcatttaacttgacgacgtttccactttgtttttcatcattttaatcaattttgagctatttttcagctattttatgaggatttctttgatttttttcaaattttaagttaaaaattcgaatttcagaataattccgacccaaatcgatgttcgttgtgccctgctaagcgtctccgtcgcgcttctcacatttctgacgccattcacaatggatttacgtggttattcgcctcaagtaaccggatttttcgcgtgtttctcgagttttaaagctattttttgcagacaatcgtcgctgggacacttattggtggaacacttgccgctgcagtgacctatgcgtttttgacaagcagaaatggtgaagaaggtgcggtttttggcgggaaaatcgatttttttcgtggaaaaaatcaataaaacttgaaattttcagcgtccagcagcagactggtgcccggattagcgaatcagggcaatacatgctatatgaatgcacttttgcaaggattggcgagctgcccgtcatttgtcgggtggttaaagtctctgaagcctcaggatattggaattcagggtaaaaattggaaaaaataccaaaaaatagagcgaaacattggaaaaatcataattttcacacgaaaattcgattgaaaatgaaaaattccggaaaaaatgcaaaaattaacagcttttcttacagaaaactactaaaacccagcaaaattcgatgaaatctcacatttttcccccgaaaaccgctaaaaactgtattttcctcagaaaaatcgatatttcccctgtgacttgtgtgcttctactcagattggtgacatgaaaactatatttattcgcattttcagtcttaaattgggctgaaaatgtgaataaataccgtatttctgccaacaatctgacaatagagcacatttgtcactcggtgatgcggaagctatgcccaaattttcattttttcgaaaaacttgtaattttcagcattttccagtgattttcacagattttcaatacaaaattcgagttctccatcactttttacccccgtaacctggttttcagccaatttggactaaatgtcgtaaagttcggtgccaagtacgtaatgcactcggtgtttgcgtacttttggggctaccgtgcccctcgaaattcaaaaattgggctagaggcccggaaaaaggtttcctagaagtaaaattgcacggggaattcgaattttagtgtgaaaattgcttaaaaatccatgaaaattctgaaaaaaaaacgttttaatctaaaaaattcaaaatttccagctaaaatgggtttccgcagttttcagccaaaatttgtgatttttccaggcttcaccattttgcacattccaaatttttacctaaaaatttcaatttttgtcctaaaaattccaaattttaacctaaaaattccaaattttaacctaaaaattccaaattttaacctaaatttccaaattttaacttaaaattccaaatttttacctaaaaattcccacttttttccaggcggcttcgtagatcacctctccaatttgcttcatttgctcaatgagccaacaggctccaccctcacagctcaatcaatagtcgaaagtttaaaggcgcatggttggagtattactgtaggcgttgaacatgatctctacgaacttttcaatgtatttgtaacaacttgggaggatgaattgaagagttcccggcgtattttaatgaatcaatcgattgaaaattgtcatagtagtagtagtgaagatgatgaagatgtggtggtggaatcgacgagtttaagaggatccccgtcaattatcagaaaattgatgagttttcagaggttcggacgtggaaaattagctaaaaatcgggttttttaacctaaaaattgccgtgtttgacctaaaaatcgcatttttttgcctaaaaattctcttttttggcctaaaaatcaccttttttggcctaaaaaatcacatttttgacctaaaaatcaccttttttggcctaaaaatcacctcttttggcctaaaaaatcacatttttggcctaaaaattaccttttttggcctaaaaaatcacatttttggcctaaaaatcaccttttttgcctcaaaatcaccttttttggcctaaaaattgtctttttggcctaaaaatcacctcttttggcctaaaaaaatcacatttttggcctaaaaatcaccttttttgacttaaaaattgtctttttttgcctaaaaatcaccttttttggcctaaaaatcaccttttttgcctcaaaatcaccttttttggcctaaaaattgtctttttggcctaaaaatcacctcttttggcctaaaaaaatcaccttttttggcctaaaaaatcaccttttttggcttaaaaattgtctttttttgcctaaaaatcaccttttttggcctaaaaatcgcatttttggtctaaaaatcatcttttttttttgcctaaaaattctcttttttggtctaaaaatcaccttttttggcctaaaaattgtcttttttggcctaaaaatcacctcttttggcctaaaaaatcacattttttgacgtaaaaatcaccagaaatttctgattttcacccaaattttcaaattttcagatgcgcctcaatggctcgaattgacgcgagcctccgctcaccgtgtgtcggcctaactgccacagaatacagatgttgcaacacaaattgtggatatagggtacaaattttgtgaattttagtgcgaaatttgcgaaaaaatcgaattttcagattgattttcgaaatccccacacaattttacacccggatcaagtttttccagctttctagctttaaatttgagtttcccgggggtactgtagcgccaaaagtacgcaaacaccgagcatcccacgacaaattgcacagttttcgtatttttcacgttagagccttaaaaattgggtccccggggtgaaaagtgatgaggaaaacgaatttcttaccgaaaacaaaggaaacccacgaatttctaatttttactcagtttttaataattttcaatgccattttcgaactccccgccatttttaaccactgaaactctttctcccagctttctagcttgaaatttgaaatttccggggtactgaggcgccaaaagtacgcaaacaccgagcatcccacgacaaattgcacagttttctgaaattttgagaaaatatgaaaaataggggtaaaatggtgctttgaattcgaatttcgcagtgaaaaatcgcaaaagttcctagtttttgagttttccttgaattttctctgaaaatcccctaaaataaccgagaaatcgatatttcccctgtgacttgtgtgcttattcagatttttgacataaaaactgtatttattcacattttcatccttaaattggcttaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggacatgcggaagctatgcccaaattttcattttcgcccgattttcggcacattttcgatggtttcgggcgatttttagcgctaaaatttggttctccgcttgctttcaccttagttagtttgtttttaacgaaaaacgttttggtggccgaacttttcggatttctaggccaccaattctaaaatgttgatttttggcagtattcatagttttttccggaaaaaacttttaaaatttaaaacaaagtagcacgtttttgagctccaaaattagagcatcaggtgaaatattctccaaagtgagcatttttgctcaaatttccgaaaaaatatctaaaaattttgatttctgcagaatttttctataatttcaaaacttctaacttgattatctctgattttcattgtataagtctgaaattttcggaaaaaattccaaaaaatcgatatttccgtggcttatgtgtttctactcggattggtggcataaaaactatttattcactttttttcataaataggctaaatttggctgaaaatgtgaataaatatcgtatttctgcaaacaatttgacaatagagcacatttgtcactcggtgatgcggaagctatgcccaaaaccaatttggactaattgtcgtcaaattcagtgccgagtccgcagacactcggtgtttgcgtacttttggcgctaccatacccctcgaaattcaaaaatggggttagaagcccgaaaaacggtccatgaggggtgaaattaaatggggaatccgaatttttgcatgaaaattgctaaaaaaaaacctgcaaattcctgaaaaaaagtttttatccaaaatgttttttcaactttcaaaatatttttttctcgtttttattgccaaaattcaattttcccgcaaattttcaccccttgaactgtttttcagccaatttgtgcagtttttagcaaaattccgtgtttgcgtacttttgaggctacagtacccctcgaatatcaaattttgagctagaagcccggaaaacgggctcgccagtggtgaaattgaacggggaatccgaatttcagcatgaaaattgctgaaaaatctcggaaatttttaactttgcagacagtaaaatacgaatccttcacagttctgactctggcaatcccaaattctcaaatgggaacctccacaaacacagaatccctgctccgccgtttcttttgctcggagatcattcgcgacgcgatttgtgacaaatgtcgggcttctgaccggaaacagcagggttttctgaaaaaacacggaattgtgaagctcccgcagaccctaatgattcgaatcgagcgagttggaatgctgccaaatggaagtatgaaattatcggaacacgtgcatttcggcgaatgtctatcgctgcaggacgtttgttttcggaaaaatccaaaaattaatcaggtttgtgctggaaaatgctagaaaattgcggaaaattgcggaaattttgggcaaaaatttgcgaaaaatggcgaaaatttttatttcaaatttttcaagaaaatcagtaagaaattcgaattccagacgcaatcagctttcaaatgacccccaacacgcccaggttccgttgattttgagttttggaagttttcgacacagctgaaatccgtgctacagtaccccgcgtggcgggacccaaaattttcaaaatccacggaatatgggcatgatgggggtcatttgaaagctggtggcgtagggaatttgaatttggcgttggctgttcgaaattctgaaaattgacaattttttggcccgattaattttttttaaagaatttgttcaattttcgatatttccgaaaattaactattaatctgagttctccacggtattagcttccaaatgacccccaacacgcccaggttcagttgattttgaattttggaagtattgacacagctgaaactggtgctacagtaatccgcgtggcgggacccaaaaatttcaaaatcgacggaatacgggcatgatgggggtcatttgaaagctggagatgtggagacctcgaatataatgtgagttggctgaaatttttcaaaaattgggaattttttatcgtttttcgaaaaatgtttcaaaaaacttaaacaaaaaatttttctttttcgatttttctgaaaattaatgcaatatttgaatttttcacattattagcttcaaaataacacccatcatgcccatatcccgttagttttgaagttttcgggtctcgccacgaaaattcttcgggttactgtagttattcgccgcgggacccaaattgcacggaaaccaggcatgttgggggtcatttgaaagctaataacgtggagaactcagattaattgttagttttcggaaatatcgaaaattgaaaaaaaattctttaaaaatattatacattcggcgaaaagtttgtcaattttcagaatttcaaataaccagcattttttctgagatctccaagtcaccagctctctaatgacccccatcatgcctaggttccgccaattttgaaaattttgggtcccaccacgcgggttactgtagcaacgatttcaactgtgtcggttggtcaagttgctcggaacctgggcgtgttgggggtcatttgaaagctgaaaatgaggagaatatgaatttattactgaatttccaaaaaaaaaaattcaaaatagaaataaaaactgtgaaatttgggtgaaaaatgctgcaaatttccgccaaaaattggatatttcccaaaaaattccccaatttttccagaaatcctacgaagaatcatctttgcattggcaattaccagatggaacatcccgtgttgtcggtggagctgaagaaacaagatccagaagatcaccaattcatccatctcaggcggcgatttttggagatttagcatcaaattatgcacttattgagtgagaaaatcggaaaattggcgaaaaatgatggaattctggaatttgctggaaatttcgcgaaaaaaagcacaaaatctgtacttttttcactttttttcgaaaaaaatttcactgaaattgaattttttcggcaaaatttcatccggaaaaatgctaaaaatttgggttttcttcaaattctctcgaaaaaagagtaaaaatcccaattttcaacatatttttcccccaaattcagagaaaaaacccccgattttcagcggtggctcattcgttgccgagcgacgtgaagctcaaaagtacgcatatcaactgagagcagtcagtgagcacagaggaggtccatattctggacattttgtcacttatcgaagagcaagtgctccaaatcatcatacatggtattataccagtgatgcacaggtaataaatctctgcaaaatctgggattttctgctgaaaaatcgatttttttatcttaaaattgcctaaaaatttaattttttgcaaaaattgaaaaattttcatttaaattcgaattctccacgtctccagctttcaaatgacccccaacatggctatattccgtcgaatttgaaaattttgggtctcgccacgcgggttactgtagcaccggtttcagctgtgtcaaaacttccaaaactcaaaatcgacggagcccgggcatgttgggggtcattcaaaagctgagagcgtggagaattcgaatttcagctttaatttaagatattgaaaagtttgaaaaaaaaattatgggaaaattttgagaatcttggataaaaattcggaaaaaatagggaaattcgatttttttcactgatatctattaaaaagacagtaaatcattaaattttgcacaaaaccactgacgagtggtagtttttcctgaaaaattgaaaaattttggggaaaagtctcctaaaaactgctgaattatcaattttccggaaaaatgccggagaaaaccctgaaaagttcaagcaactttttgactttaaattctataatttaaaaaaaagtatcccaaaactttgaattttccctgaataaatttccacaaaaaatcgatatttcccctgtgacttgtgcgtttctcagatttccggcataaaaactgtatttattcacagtttcagtcttaaattggccgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagaacacatttgtcactcggagatgcggaagctatgcccaaattttcaatttttcccgaaaaactttagattttcaagagttttttcggcatttttagctaatttttgactgctgtttctcaattttcagtcaaaaaaccaagaatttcgatttccagtagtcttacctaaaggcattacatattgataacatggtgaaataatttccggtgtgctcaatgagacacacccctgcctaccagaggtgggaggatatttttttcggatattttctaataatgaatttatcaataagtattgatgtagttattctggaagaaatgtatccgaacaaaagagtaactattaagcaacattttaatatgataaaacctagaaaaattctacaagttttctgtataaacgatatgtaagtccattatccgatatccgtaatatccgatatccgatgttgctcgactaataagttttaaggtctcggtaagaaaaacttgtagaatttttctaggttttatcatattaaaatgttgcttaatagttactcttttgttcgaatacatttcttccagaataactacatcaatactaattgataaattcattattagaaaatatccgaaaaaatatccgcccacctctgctgcctaccaggggtgtgcggataatagccgatttagccgaattcgccgatcggttaattcggctaaatcggctaatattagccgaattagccgttagccgactttttggcagttcggctaatacgtagttatccgttagccgattttggccgatgttagccgaattcgccgatcggctatttcggctaattcaactaacatatttttttggaaaacaaaatgtggtgaaattgtatgattttttcctatttgaacagtcgttcatccctgaatttgctcaataacagtgaaaaaattaacccaaaacctgaattaacagaatggacaaaaaaagcttaaccaaatgaatattttccgaattagccgaattagccgaaaattagtcgatttgaatgactgagattagccgaattagccgttagccgttagccgaaaattttgaaattagccgttagccggttctcaaaaaatcggcattagccgatttatccgttagccgaaaaaatcggttatccgcacacccctgctgcctacccttcccaaatgagcacatatttgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgctcatatatgtaattaccaccccctcccccttgtcatcaggttacccaatctcctctctcactacgtatttatatattctcccagctgctcatagagcgcattctatgtggatttgcattacgaccgcagatttcaatcaccaaaatttcgcgccaaaattttatatttcactttaatattcgaaactttaagctttctagcgatcaaatgcttatatatatatatatatatatatatatatatatatatatgtatttatataccagccgtggaccgcacctccggcgcggcccccgacttctgttgctgaaaaccaatgtttctgaaactaccgtaatcatacagtactcctaccgtaccaccattgtaccactactacagtaccccgactatatccctacactaaccccaactcactatccctccagaagctaaaacttcgcagactacaaagactacatagactacaaactatggacaaacggaataagcgctttatatatagtaaattatatatattaggtctccaaataagttccgggtcaaaattgataactttgttcgctgtgtatcaatttttatgaaactttgggaatttatgttatcaaccatgatctttcatttgacaatagtcacaaaattttttgaccaccccaagtgtcctaactcggagccaattttttcaggcatttttctgatctcggttcttttcagttttcaattgagctttgtgtgcggattttgctttgtttagaatacattattagaaaacaacaaaagtttggaaaaaaatccgcccaaaaaatttttttttgtcgaaaattcttgatttttcctacaaaaatgatgtaaccaagtgtaaactatttttacacatataaatcatttgagttaaaaatttgaatctcaagaaatattcaaaaaactaaaaaattatccgaaaaaattgtattttctactatcattttagtgtatcgaactaagttgatatgttttgtatgtcgaaaaatagtttacacttggttacatcatttttgtaggaaaaatctagaattttcgacaaaaattattttgaacattttttgacgaccaaccaaaaaaatttttttttgggcggatttttttccaaacttctgttgttttctaataatctaaacaaagcaaaatccgcacacaaagctcaattgaaaactgaaaagaagcgagatcagaaaaatgcctgaaaaaattggctccgcgttaggacacttggggtggtcaaaaactttcgtgactattgtcaagtgaaagatcatggttgataacgtaaattcccaaagtttcataaaaatcgatacgcagcgaacaaagttatgatttttgacccggaacttatttggagacctaatatatatataccagccgttcgaacgcgctgaagcgcgtgctccgactggcgtactcaaaattgaaatcaaattctaaaatttctaagcctttctctgtagatggaacgttttttttctgttttccggaagttttcgagcaacataaatattatatagctgagtgtttacaactaaaaaaaaacgtttttcaaatcatataaaacttttttccggtcctttccgagagtttttggcgagcgtttctggaaattataacaattttgatctttttttttcaaattattgaaacttcagaatattctaggagtatcaaaacttgaagaagtttttttttttgaactttccgaaaggttctagaaatttgcaggttcctgaaattttccacgaaattgaacacttcagaattttcccgatttctctagaaagttttggaacattccagaattttctcgaatttatttttctcagaaaatttgaatttccagtcaacgaagagcctttgtcacaaaaacgacatattattaaaattcacagaatttcctaaatattcccttcctaaacattttctcgtgacccatgtgcttctactcgtattggtggcataaaaactgtatttattcacagtttcagtcttaaattggccgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttcatttttcccccgaaaacttgtataatttttcaggtaacccgtgtaccgtactcccacgtggcagcctgtcaaagttatatgctattctacgaacgtgtcaaacctcatcgactctacgaaaggatgtaatttctggatttttattgatttttttgagaaaattttttttttggaaatttcgcaatttttttcccaaacaattgatttattttgttgctagattccccttattttttgttgtaaattttaacattttaatgacacaacgtgtagcatttcctttaaagtttattttttgtgcaaaaattcagaaaatttgaaaaaaatattataactcttccccccgtcccgtgccatttttgttaagttttgtgtgtgtgtgtgaaaatgaagatttttcgtgttttttccactttttttagttaatttttaaaggttttcagccgtaaatcaaatattttaatagaaaaaaaaattttttttggaaaattttcaaaaaaattttttttttttttggtttttttcaatttttcaaatttaagcatgacatctcttattttccaaaaattcaaactatttccagcttttccagctctaaaaaatggacgaaaagttgccagaatcagtggacgtagtggtgctgggcaccggactacctgaagccattctggcttcagcttgtgctcgagctggcttatctgtgcttcatttagataggtaataggcgaactaacatttaaaaaaagtttaaaaaaatgaatgaatgaaattgaaaaaaaaaaaatttttgcgaaaaaaaaattattttcggctaaattttttttttaatcataacttttcctcaaaaatacagcaaaattcgaattctccacgtcgccagcttcaatttgatccccaaattgcctatattccgctggttttgaagttttcgggtcccgccacgaaaactcctcgggttactgtagtttttcgcggcgggacccaaaataaacggattctgggcatgatgggggtcattttgaagctgagaacctgatgaattcaaatatcacattaattttcgggaaaaatcagaaagtaaaaattttctgaccaagtttgtggaaaatttttcggaaaacgtcaaaagtttccaattttcgaaaaatgtcagccaactgatatcatattcgagttctccacgtcactagctttaaaataaccccccaccatgtccatattccattgattttgatttttttgggtcccgtcacgggttactgtagcaccgatttcagctgtgtcgattgtcaaaatacaccgaacctaggcgtgttggggctcatttgaaagctaataacgttgagaaatcagattaattgttcgttttcggaaatatcgaaaattaaacaaattttaagaaaaaaaaatatatatttgccaaaacatttttcaattttcagaaatttaaaaaatcagaattctttctgaaatcttcacgttaccagctttcaaatgacccccatcatgcccatattccgcctactttgagaattttgggtcccgccacgcgggttactgtagcaccgatttcagctgtgtcggttgtcaaaatgcacggaacctaggcgtgttgggggtcatttgaaagctgataacgtctggaattcgaatttcatactcgatttcttgaaaaattcgaaataaaaaatatttttgcagaaatgagtactacggcggtgattggtcatcattcacaatgtcgatggttcatgaagtgactgaaaatcaggtttttattgattttcagccagaaaaaccccaaaatttccgaattttcaggtaaaaaagctggattcctcggagatttccaagttatcagagcttttgactgaaaatgagcagctcattgagctcggcaatcgagaaatcgtggaaaacattgaaatgacgtggattccacgtggaaaagacgaggaaaagccgatgaaaacgcaactggaagaggcttcacaaatgcggcgattttccatcgatttagtgccgaaaattctactttccaagggagcaatggtacaaaattgcaaaattacacctaaattggagaacttgatgttttgccctaatagtcatcaaaaaatcaatttttgccaaaaaaaaaattttttttgaaactttttttctgaaaaaaaagaaaaatttttctaaaaattcaatttcctcatttaaaactctgaaattcgaattctctacgccaccagctgtctaatgacacccaacatgcccaggttccgaccgctttgaaaattttgggtctcgccacgcgggttactgtagcatcgatttcagctgtgtcgagactgccaaaattcaaaatcaacggaccacggacatgttgggggtcatttgaaagctgataaagtggagaattcgaattatttgctagttttctgaaatatcgaaaatttaaaaaaattgaaaaatattttccaaaaaattgtcaattttcagaatattcaaaaattaacattttttccgagatcttcacatcaccagcttcaaaatgacccccatcatgccctggttccatgcaatttgatttttttgggtctcgccacgcgggttactgtagcaccggcttcagctgtgtcaaaacttccaaaagtcaaaatcaacggagccggggcatgttgggggtcattcgaaagctgagagcgtcgaaaaattcgaatttccgcattattttcagatattgaaaagtttgacaaaaatttatgggaaaattttgaaaatcttgaaaaaaatttggaaaaaaaaaacgattttcttccaattttttgaattttttcaggttcaaacactctgtgactcccaagtatcccattatgccgagtttaagcttgtcaaccggcagctatgcccaacagagaccccagaagccggaattaccctaaatccggtgccatgtagcaaaggagagatttttcagagcaatgctttgtcgtaagggatttttttaggctgaaaatcgataaaatatcgattttctttgccaaaaaaatcgattcgcaatgataaatctccaaaaattcttccagaatcctggaaaagcgagctcttatgaaattcatcacattctgcacacaatggagcacaaaagacacggaagaaggcagaaaactgctcgccgagcacgccgaccgcccgttttcagagtttttggagcaaatgggcgttggaaagaccctgcagagctttattattaatacgatcggcattttacagcaaagacccactgcgatgacggtgaatatgcggaaattactgttttttagaaaaaaatctgaatttctaaaaaaattgaaaatgaaaaaaaaatccaaaatttttttttttgcacgaaatttacttcaatttttttcaaaatattattgaaaaatttgaattctcgccactctcagcttcaaaatgacccccaacatgcccggggtccgttgattttgagttttggcagtctcgacacagctgaaaccggtgctacagtaccccgcgtggcgagacccgaattttcaaaatcatcggaacccgggcagtatgggggtctttagaaagatgatgatgtggaggattcgagttttgagtcgatttgaaaagaaatttataattgaaaaaaatttgagcaaaaaattattttttttttcgaaaaaatgttgattttgtctattttgctaaaaatttttgaaaaattcaaatctctaacgctttcagctttacaatgacccccatcatgcccattttccgtgcagtttgcgctccgacacagctgaaaccggtgctacagtacccctcgtggcgggacccaaaattttcaaaatcgatggatcatgggcatgatgggtgtcatttggaagctggtgatgtggagaattcgaatttcgagttgattttcatgtcaaatttgaaattgaaaaaaattttgagaaaaacaaattttcaaaaaaaaaaaaaaatttttttcaaaatttaaaatttttccaaattccagggaatgttggcatcatgccagttcatggattctgtcggccatttcggtccatcgccattcctcttcccactctacggatgtggagagctctcacagtgcttttgccggctggcagcagtctttgggagcttatattgtctgggacggcctgtacaggctatcgtgaaaaaagatggaaagttagtgaagagaataagcgaaaaatcaatagtttctgcgaaatttgacctaattttcaagtcaaattcccagcaaaactagttttatacaatattccgtgactcatgtgtttctacccagattgatggcataaaaactgtttttattcacattttcagccttaaattgtgctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttcaatttgtcggaaaaccaattttctcaaaaatttccagaattacggctgtaattgccaatggagatcgtgtaaattgtcgctacatcgtgatgtccccgagatttgtccccgaaactgttccagctagtagtacgctgaaaatcgagagaatcgtctatgcgacggataaatcgattaaagaagccgagaaagaacaggttccggagcattttttggagttttccaccaggaaattcgattttcccgcaaaattccactctagaattcaatttccccgggcttctagctcaatgttacaatttttggggttactgtagcgccaaaagtacgttgacctcggtgcttgcgtacctgagaccgaattttacgaaattgagcttaaattggctgaaaatcatgttccggggtgaattggcaacgggaaattcgaatttcgcattgaaaaccaccttggtcaactggttttcgagaaaaatttaattttactcgagaaaccagtgctcctagttgattttcaatgcaaaattcgaattccccgttgccaatttaccccgtaactgaaatttaagccaatttgggttcaatttcgtaaaattcggtgtcaggtacgcaaacaccacgggggcatcgcgtacttttggcgctacagtaaccccgaaaatttcaaaattgagctagaagcctgggaaaaaataattctagagtgaaattttgcggggatttcgaatttcgtattaaaaatccgaaaaaattttcagctaaccctcctcaatctggcatctctccggcccgacgccgcagtctcacggcttgttgaagtgggctttgaagcctgtacggctccgaaaggacactgtaagcccccacgttttttcctagaaaaataaagattttttttttgcagttctggtgcatgcaacgggtacccaagaaggagaaacaagtgtcaagactattgcagagaagatttttgaaaaaaatggtgattttcgcggaatttttagggggaaattttgaatttccactaccgaaaacctatttttcgcttaaaatttgagaaactttcatggaaaagtcatttccaagtgaattttccctaattttaggtgaaaaattcgaattctccgctataaaaaacctatatatccccacggggaatcgaaccctggaccttttgctccaaaggcgagccgcttagccactgcgccacgcgttgcagctaaccagtgatgcatgttgcaccccgtggcgcagtggctaacaggcttgacttcggagcaaatggtcccggggttcgagtccccgcagtggtgtataggtttttcatagcgaacatttcgaatttttaacttaaaattcgcaaaaattgagttacaacctagtttcctgaaattttcgctcgaaaatgatacaaaatccatttttttgaactattaatatatgttaagcttcaaagttctaaaatagagactccaagagttgaaatctcagcaaggattcagtgaaattttgagaaaaattatttccaagtgaattttccccaattttaagtgaaaaattcgaattctccgctataaaaaacctatacacccccacggagaatcgaaccccggaccttttgctccaaaggcgagccgcttagccactgcgccacgcgttgcatcacgcgccgctggttcggcgcaccggtggcgcagtggctaacaggcttgacttcggagcaaaaggtccggggttcgagtccccgtgggagtatttaggtttttcagggcggagatttcgaatttttcacttaaaattcgcgaaaattggcttggaacccggtttttctttaatatttttgagtttttcgatttttcctagaaaaatcgatattttttctgcatttcagaagtggaaccctactggaagatgagcttcaccgcgaattccatgaaattcgacaccgccggagccgaaaatgtcgtcgtcgcgccgccagttgatgcgaatttacactatgctagtgtggtggaggaggttagggcgaaagaacgatgaaaattggatttttgagctgaaattgaattagaaattcaaattagaaaaaaaaatttcgaaaaaatataaaaattaaaaaaaaaaaatttttttgaaaaatttttcagaaaattttttttttcgaaaatttttttgaattcaatttttatcgatttttctgaattttaaacacctgctatatatccattttttccagtgccgccaactattctgcacaacttggcccgagctcgactttttgccaagagccatgaaaaaagaggaggaagaagaggaagagccggaaactgaagaaattgcagaaaattaattgaaaattcgagttttccatgtaaaattacccccagactcccgttttttttggcgatatttcacttttttgtgcattttttgtaaatatttgaagaatatttaaccatttttcattgattttatcgattttttctgggtttccagcctatttttttacttactttttgaacatttttaatcatttcagcccaaaaccccctcattttaagcaaaaatggacgaagaagtagtgttagaattggcgtcccaacaagccatcaagtttttgctcgccgagccaaaatttgcggaaaaatggcagatggagatagcgaaaggactgagggaggacttaaaggtgagatttctacaaaaaatttaagaaaaaacttcgaaaccccgaggtttttacgaaaaaatccatttctaggcagatttccatagattttaagtaaaaattcgaaatctccgctataaaaaacataaatacctccacggggactcgaacccgggaccttttgctccaaaggcaagccgcttagccactgcgccaccggtttcccagccagcggcgcgtgctgcaccggtggcgcagtggctaagaggtttgcctttggagcaaaaggtcgggggttcgagtccccgtgggggtatttagatttcctatagcggagatttcgaattattcactaaaaattaaggaaaatctacggggaaatgggtttttttggttaatttctcatattttaatagatttttggtaaaaaattcgaaatctccgctataaaaaacctatataccactgcggggactcgaacccccgaccttttgctccgaaggcaaacctcttagccactgcgccaccggtgcagcacgcgccgctggctgggaaaccggtggcgcagtggctaagaggtttgcctttggagcaaaaggtcggggttcgagtccccgtgggggtattttggttttttatagcggagatttcgaatttttcacttaaaattaagaaaaatatgcagggaaactgaatttttcgggaaaatctagcttttcagatttttttttcaattttttaaataatttttttgcagaacccctccacgtcaactacctcctcaaatcccgctgtaacatcaatagagtccacgtgctcagagctgacgagcacaatacaatacgtcatcgacactttcgaggcgcaagtagacccccgaaattgctacatttccccgggaaaagctggaaatcgcgacgccgccgcacttttcgaggcgggactccgcgtggaaaagctcgccgggctggatatgcagagctccgccgcgatgacgaaaaatgaagaaaattgcatgcagtgagggatttatatcgattttgacttgaaaattcgaattccccgcctcagattacccctgtgtaactgcattttgaactcgaaaattcaaaattttcgaatcctgccgggttactgtagctccaaaagtacgcaaacaccgaatagctcggattttgctgaaaattgatggctaggggtattttggcgcgcggaattcgaatttcttatagaaaatctaaaaaaatcccaaaaaaaatggtttttttcagcattggagccgcctgtcgacgtgtcagccaagtgctcaaatcgtttggtaaacggtttcaggggttggttttggagcattttttacatggaaaattttggaaaattttggaaattcgaaaaacaatttttttaggattaaaaaaaatatttcgaaaaaaaaatgtttttttggaatttttttccaaaattttttaatttcaaaattttcaatttattaattttcagccaaccctcactggaaattcaatcgattctcccaatcatccatcgcctctgccgtctattctacacaatttcccacgaaatttgcagattttctacgaattttcggtcgaaagaccggaaattactgaaaacttgcggaaaatcgatagaaatcgcggcgaatgagttcaatttgcggattgtcgccgaaattgaaatggtacgggaaaaaagcggcggcgaaaaatcgataaaaatcaataaaaccaaaaaattagcacaaaaactttaaaaatcaataaaaattcactgcaatatcgaattttattcaaatttatcaaaaaatcaatggaaaattaaaaaaaaaaccggttaaagtatcgattttcacaaattctgttcagaaaatcgataaatattgattttttcggaaatcttcaacaagtcaataattttccatgaaaatcaaaaaaatcgaacaaaaatcgatattttattgattttctgaagtttcctccaaaaatcgataaatttccgaatatcgatttttaagaaattgattttctctaaattttactaaaattcggtgaatttttgttaaaattgcacgaaaatcgaaaaaaaaaattttttttttttttgaaaatgtcaaaaaatatattttatcgattttctcaatttcccccaacaaaaatcaataaatcgccaaaatttcagatcgaaaatcatctgaaattcgatgaaaaacgccgagaaaaacgtccaccaccgcccacgcatcagcaccgcccgtcaaacggccacgtttcttccatgacacgtcatcagcgccaccttgccacgtcgataaatgacgtcatcaacgggcgccaagtgacgtcatcgatgagctcagagctcgtgagacgggcgatgccacgtcatccgcccggcggaattgccacgtcgattgtcagcgagcatcgcggatatctgatggatgataacttgaaaaaagtattggttttcagaaatttttggcaaaaatcgaaaaaaaatcgatcttttcttttctcaaatcgtgccactaatcacggtagtaatctggttcatcacagttaaactttttctcgtcactgaagatgaactgaaaccaaaaactgggcttgaatgtttataccgtaatcctcacttgtcttcagttagttccctgactgattttagcaaactgaatacggttttggcggtttttttttggtaatgaatggagcctttcttaattttcgtcttttattaaactgagacttcaaaagaacatgtcgtacggcttcaacagacactgccaggttcatctcgctcctacttttcgagcaagtcactgttcaattggatgctcgacgaacgatttttcgcttgggtctgacagaaagaaaaggtgtgcgaccagaagacttttttgtgcaataagcggcaggattggaagcatatcgagtgatcatatctctcgaaagtttcaaatcacgaaaaatctgacgattcgagaagccttgagataatttggcacaatttgtcctttttcgtagtcagttgaagttattccacgacccatagctgtaaaagcacaaacgaacatgaaacttaacgtttagcaaaaaaaattgcaaagaaaacgaaaaaagaaaacgaaaaccaagggtggccgtatcattttgtggatttttttaatatggtttttcatgaaaaaatggtttatcttttttctgaacggttcaggtatatttccaatacttatctgaaagtaagttagtacagcgaacattttcacaagaaactatgttttgctatctcaacccagttttgagttataccaaaatttgggggtggccgtatcattatgtggagcactgtagattttttgatttttcaaaaaaaaaatcgatatttcgccaggtggaatatcgattttcttattttttcggaaaaatcgatatttcgccaagtggattatcgatttattgattttttcagaaaaatcgatatttcgccacgtggattatcgattttctgaaaaattataaatcgctagttagtcagaagtttattgattttttccaacaaaaaaaaatatcgattttctcacctttttcgttgaaaatcgataattttttgatgtttttaaatcgatttttccccaaattttgcgtaaaaatcaataattttacaggcacgtcaacgcatcgcccatgttcatccaaaacgacgcatcgggcacgtggcgctggatctgaatatcgacaaaaattcgagtttcgctccgccgccgccgccgccactgcaaaaaatcaataatgacggcgtcgacgacgatgatgatgatgatgacgtcatcatgcgttcagcacggaaaatgacggaattggtgttggctgatatgcgaaaatctatgaatttttaattttttttaaaatttgtcaaattttgcgccaatgttttgttttacgtgtgtcgatttacgggcattttgtatgaagattttttgaaattgtttcgcagtttttcctaaatacctgcattttacagattttcataacaaaaatcgataatttcctacgtttttcgtagatttttatgggagtttcaaaattgtgattttttgccataaattgtccatttttgccacttttcaatagtttttgacgggtgaaacctagattttccgaattcagcatacacgaattgcccgtttttaacaaaattagacaattttttatttttgcccaattttgatttttcagccatctaatgactgtccttttttttgggcaaaaaaataattttttggaaattgtacaaaactagaatattctgaaaaagtgcattttcgaagtatcttaagatcaattttgagtcctctaactataaaactaaccattttatgggagtttcaaaattgtgattttttgccataaattgcccatttttgccacttttcaatagtttttgacgaatgaaacctaggttttctgaattcagcatacatgaattaccctttttaacaaaattagacaattttttatttttgcccaaatgtgattttttttgggcaaaaaaataattttttgaaaatgtacaaaactaaaatattctgaaaaaaggcaatttttaagtattttaggatcaattttgagtcctttaactataaaattgcccattttaacggaatttcaaaattgtgatttttttgccataaattgtccatttttttgcccatttttgccacgtttcactaatttttgatggattaaacctagtttttctgaattcagcatacacgaattgcccgttttcaacaaaattagacaactttttatttttgcccaaatttttttaagccatctgtcctttttattttttgggcaaaaaaataattttttggaaattgtacaaaactactagaaattgaaaaagggcaatttttaagttgtttaggatcaattttgagtcctctaacttcaaaattgcccattttaacggaatttcaaaattgtgaatttttgccataaattgcccatttttgccactttttaatagtttttgatgggttaaatctagattttctgaattcagcatacatgaattgcccgttttcaacaaaattagacaactttttatttttgcccaattttgatttttcagccatctaatgactgtactttttttgggcaaaaaaaatgtttgttttttggaaatcaaacaaaaccactatattctgaaaaggggcaattttttttagtgtttaaggatcaattttgagtcctctaacttcaaaattgcccattttaacggaatttcaaaattgtgaatttttgccataaattgcccatttttgccactttttaatagtttttggtgggttaaatctagattttctgaattcagcatacatgaattgcccgtattcaacaaaattagacaactttttatttttgcccaattttgatttttcagccatctaatgactgtactttttttgggcaaaaaaaatgtttgttttttggaaatcaaacaaaaccactatattctgaaaaggggcaattttttttagtgtttaaggatcaattttgagtcctctaacttcaaaattgcccattttaacggaatttcaaaattgtgaatttttgccataaattgcccatttttgccactttttaatagtttttgatgggttaaatctagattttctgaattcagcatacatgaattgcccgttttcaacaaaattagacaactttttatttttgcccaattttgatttttcagccatctaatgactgtactttttttgggcaaaaaaaatgtttgttttttggaaatcaaacaaaaccactatattctgaaaaggggcaattttttttagtgtttaaggatcaattttgagtcctctaacttcaaaattgcccattttaacggaatttcaaaattgtgaatttttgccataaattgcccatttttgccactttttaatagtttttggtgggttaaatctagattttctgaattcagcatacatgaattgcccgttttcaacaaaattagacaactttttatttttgcccaattttgatttttcagccatctaatgactgtactttttttgggcaaaaaaaatgtttgttttttggaaatcaaacaaaaccactatattctgaaaaggggcaattttttttagtgtttaaggatcaattttgagtcctctaactacaaaatttgcccattttaacggaatttcaaaattgtgaatttttgccactttttaatagtttgtggtccgaaaaaaaaattcaaaaaaattgtttataaatcaaaatatcccgatttttcaatagaaaaatcacacacacacaaaattaggtgagaaagtaacccgtaaaatgcccaaaaaaatcgataatccaaacaaaaacaaccggtactaaaagggggcggagcctagattggtggaggcggggtttgcatcacaggcggtactaacaattcgagaaactagaaatcgatatatgtaagcggaacaaaaaaatcgataatttggtgagaattagagatcgggggaaatggggagaaatgagaaatttattgatttttttctgtagtggatatcagcatggaagtgggtaggttgatgaggagctctgaaaattgcaaaaaatcaataattggtcgtgtgatttatcgatttttgaaaaaaaaatcagaaaaatcgatttttattcatcgattttctacttttttccaggaaaaatcagtgatttattgatttttttgggtttttccaaaacttcaccgaaaatcaataattagcaaacccggatttattgattttccggattcttctaaaaaaaatcgataattcgcgcgaatctatcgattttccgaggttttactgaaaaatcgataaatcgccacggagaatttatcgattttttaaagatttatggaaaaatcaataattgatcacttgtatttatcgattttcgccaaaatacttaagaaagacattaaatcggcaagtttttactgaaaaattgataatttgccacgtttttactgaaaaatcgataatttgccacgttttttattgatttttcaagttttcaatgaaaaaccgataattcgtcacgtttataattgattttccaggtttattcaataaaaatcaataatgttccacataatttatcgattttcacaaaatttaagaaatacattaaatcggcaagtttttactgaaaaatcaataattctccacgtttttttaattgatttttcatgttttacagaaaagtcgatacttttttttcattttgtagaaaaatcaataatttaccacgtttattattgattttccaggtttattttaaaaatcgatgaccttttttttgtgaaaaccgcaaaaatacggaaaatatcgatttttcagtaaaaacttggaaaatcaataataaacgtgacgaattatcgatttttctacgaaattcaataaaaaatcaataaaccatttgccgatttactgttctttcaaatattatgtgaaaatcgataatttacgtggaaaataatcgattttttaaaaattctttaaaatcgataaattctccatggcgaattattgaatttttttgaaaaatccgggaaatcaataaatacggttcgctgattattgatttttggtaaaatttcggaaaaacctaaaaaaaatcgataaagcactcgacgaattatcgattttttcaatcaaaaaatcgataaaaactcacaatagaaacatgtttctgatgatgtgacgtcgtaatattatcgcacattgtaaccgacgagtccgatgactccgcgctggctccgcccctttcttggccgcgcggcgtcgagcgccgccacggaagctgacaacgattctccagacgaccgggcacaatatcctgctcgagccaatcaacaatacggcacggccaccacgaatacagtatactttttcgccgttccatgcacatgtctacctcacagtacgcgtggtacattctgcaaaaagcaaattgttttgttgaaaatattgatttttccgaaatttgagtaaaaaatttgaattcctcttcaaattctacacagaaaaacgtttttccgggaggttctagctcaatttcgaaagtttttgaatttcctcggggtactgtagcttcgaaagtacgcaaacactgaaaatttgtgaaatacgtgactaagggttgaaactctgggagaaaggctgaaaagtgacgggaaaattgaatttgacaaggaaaacagcagaaaatttgaaaaaagtcgattttttgcttggaaaattcgcaattttcgaaattttctgctagaaaacttgattttcgccactttttttctataaaattcgaattccccatcaaatttcactactgaaacactttttgccaacattctagctcaaattaaaaaatttcggggttactgtagccccaaaagtacgtgacgcacgcggtgtttgcgtactagacatcctacggttttttgtctaatcgagttgaaattggagttgccgggtaattttaggacgaagatttcgaatttggtaataaaaattcgatcaatctcgcagtttttgtgataattgaccgataaaattggaattttcaactaaaactcgatttttctcaatttttcttttcaaaattgtaaagtttgataaaaaattcaaattttccgtcgaattctacttcagaaacctttatcttcaagatttcagcccaaaaactaaacattttaaatttccgcagggtactgtacctcgaaaagtacgcaaacagcgaaaatgtgccagcgcgctgaaaaatgttgtctaggggtgaaaaatgacgtagaatccgaatttcataatgaaaactcataaaattccaaacaaaatttttttttcacgaagtttgaaaatttttcaaaaattttttttttttaatattcaaaaacttacctaaaaaccatattgctcaaccaatatgcaataaccacatcaattgtataatgagtccgtgatatcgtcatacatatcatcccaatcaaacatgccacgtggctcacccattgcagtggttttatcgattttgggaggtaataggcgacggccaaagagcaggtgaccatcacaagtgtgtgaccggagaaaagtaggtctccacatagcatttgatctttgctctgtaaaaaatacgagaaattagaaaattttcgtgaaaaaatgaaaaaaaaacccgatttttagttttcaaaccaatttttcaaaattttaacctaaaaatttgaattccccgccgtgaattacccccaggccataatttttattcaaaattggcgtaattccgtaaaatccggtgccgggtacgcaaacaccgcgggcgtcacgtactttcggcgctacagtaactccgaaaattttaaatttgagctagaaggtcggaaaaaagtgtttccggggtaaaatttattgggaaattcaaattttgcaatgaaaatacggaaaacactaaaatttcttgcaaaatttcaagtttttcgattttttcacacttctccccatgaatcatcgaattgatcatgtttttgatacacaatttgaactcgccactctaaaattgctcaagaacttcaatttcggcaaatttgggcgcaattccgtgaaatttggtgttaggtacgcaaacaccacgggaccacgtacttttggcgctacagtaaccccgaaatttttaaatttgagctatggggcccggataaaacgtatctagaggtgaaatttgatgtggaattcaaaattttaagaaacatttttcgaaaattacgttttcatgtagaaatttcagtttgctaaaaattttctctttgaaaaatgatcaaacgtccgaaaaattactttatctgcattaccaaaaaatttcattattaaattcggattctacgtcatttttcacccctaaacaacatttttcagcgcactggcactaatttggtgtttgcgtacttttcgaggtacagtaccccggcggaaatttgaaaatttttagatttcaagctagaagctcgagaaaaagcgttcgttggtgtaaaattgtaagagaaattcaaatttaatattaaaattttcggcttagtggagaatatttcaaaaaaataaattttcacacaaaaattgaaatatttggggttttttgtaggattatcacaaaaactgaaaggctgatgaaatttttaataccaaattcgaattcgtcgtcctaaaattacccggaaactcaaatttcagctcgattagacaaaaaatcgtaagatctggtgtctgggacgcaaagaccgcgggcgtcgcgtacttttggggctacagtaaccccgaaaatttaaaaatgagctagaaggttggaaaaaagtgtttcaggtgtaaaatttgatggggaaatcgaattttcaaatgaaaattgtcgaaaatcaagttttctagcagaacatttcgaggtttcgaattttttcaaaaaattcgtttttttttcaatttttctgccgtttccttgtcaaatttgattttcccgtcactgtttagcctttctcccaaagtttcaacccttcaacccgtatttcacaaattttccggtgtttgcgtactttccaagctacagtacctcgcggaaattcaaaaattttcaaaattgagctagaacctcctggaaaaacgtttttcggggaggaattgaacggagaattcgaattttgcagtgaaaaaatgaaaaattaatacaaaaactgaaaaaaaaattctggacaattttcaaaaaaaaacattttttttgcgaaaattttttttggccgtcagttttggcccaaattttctcaattttttggtaatctagctcattttcaacgtactattttttcaaactcaaattacctgaaacccgatcctaatcgtctgctcaaagagcctcccaaagaaaacaccagcttctgactccacttgatcccggcatctcccctgattatccgtgtaccccgagggtaattgtgtcgctgcaagtgtcacagaccgcattgcatataaggttcccgcacagaaaacgactcgttttaaaattgtgccacggtgctgatggatgacgagcagtgcgccgagcatcacgatgcatagcgctacacaaaagtctcctggaaattggattatttgaaaagccgataaaattctctacaaaatacatttaaaactggaattgtagctcaaaaatgagccaaattagaaggttatgaaaaaaaacaattttttaatatttttttttcacaaaaaaccaatttttaaccaaattttacgaatttccagttgaaataatttttattatctttaggttcaattttttttaacagaaaaattatctatagcttttttagtagaaaatgagcgaagttacaagtttttgaaataattacaaaaaaaaatgacgtcgatatttttttattttatggtttttttttatttttggttatttttgtgaaattacttttcctatattttttattcaacaatattctttaagaaaaaatatttttctacaaaataaataaaatttcaactttgtacgttaaaaatgaacaaaattgttgggttttgaatttttatgaaaaattttttttcaaaaaaaaaattaagcattttcaaaaccgtataactttgttcattttagagctaggtaggtcatttttatgccgaaaaatttgagaatagttataaatttagaaaatttgctaatacacattatcttaattttggaaaactcgaaaaataacaaaaatttcaagaaaagtttttttttcaatatttgaaatttttcaaaaccgtataactttttgtatatttgagctagttagcttatgtttaagctaaaaataggaagttaatttaaaatttgaaacatttgctagcacaccatctcaatgtagaaaaatgcgaaaaaaaaacctaaaaattcaaacaaatccaagaaaaaacgaaacttttcaaattattatagctttcttcattttcaacatagcaaactcatacttaagccaaaatgctccaaaatattgtaatttttaaaaaatgaatgaaaacacacagaattcttaccaaaaattgccaaaactctaaattttctttaaaaattttcaaaaccgactaactttcttcatagtcaagcgacagctctaaattttatttcaaaatgcttcaatttttttttaaattttttaaaaaccaactcacctaaactagaagcccaccgttgctccgaaaccaggctaaacacaatatccggcagcgattctcgtggcacatagtcatgagtatacgccaaaactgcccaattcgacattccggcaataaaaaggaaaaagaataaaaatatacattttgcccattctgaaccatttgatattccatttttcgttccattttgttcatcatctggagaggctccacgagcacttattactgtcttgctcacggagcccatgcttcttcgttgctcttcgtctccgcagtacgagtcgtctgtctgaaattattaaattggaatgttaatagtaaaaataaggttttcgttgaaaaattttagctcaaaaattaactagtttgaaattttgaaaatttttgtttaaaaatttttcgtgaaaattttcaaaactgatttttttcaaattttttgataattaccgatcaaatttttatttttcagcaagaaaaaatatttttctattcaataaagttaaagttgcacagataactttcaaaatagcaatgttatgataatttgaaattttgaacatttttatttaaaatttttttcttgaaaattttcaaaactgatttttttttctaattttttgataattctagaacaaattctaattttttcaataagaaaacatatttttctattaaaaacatgcaaaatcacgctgatagcttctatactagcatagttatgataattttaaaatttaaaatttttcgaaaaaaattatcttcaaaattttcaaaactgatttttaaaaatttgttccggtaattaaacgactgaatttttgttattctgcaagaacaaatatttttctatttaataaatgttaaatcacgttaataacttttaaaatagctaagttataatagtttaaaatttaaaatttttagaaaaaagttttttttttcaatttttttcttttttttaactcaatttttcactttttatcccaaattttcagacaaaacgctcaactaagtttttgaagctcttaaattttcctacaaattggcgcaaaaaatagatcaatcacacaaaaatgagcaaagttatgctccacgaacctcaggtgagtactcaaaattttttggcacaatttcacgaaattccaccgttttcaccatatgcagaggggtccccgatccttcaaatttgagtataaaaagtttttgaaaagcacggagtacggtagatacgtagaagacaagaaaatgaaaaaatgaataaatttcaaaaaaaaaaaaacattgggaagttttaagaggggattcgtttttttgtatctatagtttccgtattttatgtttctacgggggctcttagagcaacaaaaaatcaaaaaaaagagcattaaaatgctcaaatgatcattataaaatcgaaaaactaaaatttcaaaaattcaaaaaaaaaaatttttagggccaaactttttttttcaaaatttagtaatttttctctataaatgttttattcatttcattaaatgcatttttacacaatttttcaaattaaccacgtccctagcgtcaatttgacacccatattgcctaggttccgcattttttgggatttttgggtcccgccacgaaaaccgcccgggttactgtagatttgcagttctaacggaatttttatttttccttgttagattgaaaatttatacccaatatattaaaacttttgactaaaaatctcagaaattgacaaagttacggattttcgaaaaagtaaactttgggtcccgccacgaaaaccgccagggttactgtagttttgtgggttttgggtattattttattttttcttgttggactacagattttcacggattctagtgaaaaagtcggttgaaaagctcaaaagtagataaagttacggaatttcgaaaactttcttccagttttttaaatccgataatccgaaaattttcgaaaatccgtaactttgtcaatttttaagatttttggccaaatttttttatacgtggtgtataaattttcaatctaacgagaaaaaataaaaattccgtcagaactgcaaatctgcagtaacccaggcggttttcgtggcgggacccaaacatttcaaaattgacggaacataggcaagatggggggtcaaatcaaagctaaaacgcagtaaatttgagaaattgtgttaaaatatataaattatcatttaaaaaaaattgagaaaaaaatttgaaaaatttgaaaaaaaaaatttggtccaaaaaaaaatttcttttaatttttcaaaaatttcaaaactttaaatttcttaaaacttccagaatactcaatactttttaaataaaatttttttatttatcaaaaaatcaagtcgaactatttttttcaactttactcccttaaaaattcccaaaaacctccagaaattcgaatactccattaaaaattaaaaatgtctcaaatttttcaaattttcacatcaaaaattcattaaaacaccccgaaatacccgaaattccacaaaaacccgacgagagagtacccagaaatgagagatttagagaaaaagtaggggggcggaaaaagtgaaaagtggtcggtgagaaacggccctaaaaattggccctttcgacccgttagagacactctccggaagaaactgaacgactatatatacgagagagagagagaaagagagagtatagggaaatgagagagtgcagagatagagagagacgcagacactcgaacacaccacgaagggaccacattacacttttacatttaaatatggtgtggggttaagcatttttaatgacgtgtggaaattgattaatttgttaaattttagatttttcaagtttcaaactttaatttgaccctaaatttgattaggctccgcccctttatattaggctccgccccttttattatacagtcataaaattctcttggttttttccgcctttgttatcaaaaaatggtgttagaggtgagaaattacatagaaaaacataagatttaaaatttgacaataacctatgtcaggctccgcccctccattaggctccgcccctttattggctctagtcacggaatttttgtaacaaaaatggtgctagatgtgaaaaattttgtggaaaatgtaaaacaatataaattttaaaatttgccaaaaattcgcaagcttaagtttggccatactttaaattaggctccgcccctttgttggctccagttacgaaatttttgtatttttcggattttttgcagcgaaaatggtgttagaggtgaaaaaattacatagaaaaacataagattatttaaaatttgacaataacctatgtcaggctccgccccttcattaggctccgtccctttattggctctagtcacggattttttgtaacaaaaatggtgatagatgtgaaaaattttgtggaaaatgtaaaacaatataaattttcaaaatttgccaaaaattcataagctttaatttaccaaatgaatgattttaggctccgcccctttattggccataaaattttaaagccataaaattcggaatttttctataaaacagaacgtatgtaagaacagagtagagaaaagtaaaattattgtgtttgatacgttacaaactttaatttaacccataattcatttaggctccgcccctttattggctccaaaaaattggcggttttcgtggcgggacccaaagtttactttttcgaaaatccgtaactttgtcaatttcagagatttttagtcaaaagttttaatatattgggtataaattttcaatctaacaaggaaaattaaaaattccgtcagaactgcaaatctacagtaacccgggtggttttcgtggcgggacccaaaaatcccaaaaaatgcggaacctaggaaagatgggcgtcaaattaaagctggggacgaggtaaatttgaaaaattgtttgaaaatataatgggagccataagaaaaaaaaagttaaaattaaataaaaataaataacattttacaaaaatttttggtccaaaaatttttttttcaaaattttcgaaatttaaaaaaagttttttttccaggaattcgaggtttaaaaaagttttctgaacgaaaatttgcattttggaggtttttaagtttaaaaacaagaaaatttcaaaaaataacaaaaagagcacgtttcggagcatgattttgtgcttaaaaaaccgaaaattcgccaaaacaatctccatggtaattcgacaaagatggatgggaatatgttttattacgtcagtagaatttgaaaaatcaaacaaccttttgcaatggagcgcgtttgcagagacacttttttgaaaataattacttgttttgaaaacaccatatctccaccatgggtagagctattaaaaagttttcaactaacaaaatgttaagaattttaagcactacaaattgttagttgataaaatttttcatcttgtttccccactgagatatacacgtttgaaactaagtgaagggtgctagactctcacccagctttaaaggcgcataactttgctggaaatagagatatcaaaaagttgctaactaacaaaatgtgtaaaattttaagcactacagattgttagtaacaaattttttgaaaactattttctgaactgagatatatgtgtttgaatttttcactggaaattagaaaaaaaaagttgctaactcctcaattttcaaagcttttcccacataagctcaaagtttagaccaaaaattcaaaaatctttctgttttttcggaattgttaaaaagcgcccatgcgctgctcaaaattccgtgcaaaatgctcaaaattctgacgttttttgtttggtaattcagctttcttctttttgtttggtcaagatgggtacccttttttgcagaaatatggaaaaaataattttaaaaatagatgataatttgattaaatttaaattagagcagaggtatcaaataaattattatagttacataattttccaaaaaaaaattaaaattataattattagttctaattccaactttggccacaaattgccaacaagaaaattatagcctttaaattttactattaagtacattttatttcaaatctctacgacaatttttagccaagttatgaaattttgaaatttgaaaaattttgcaaaaaaaaaacttttgaaatttttttttaattgatttttttaaattctaatttcacattggcctgaaaacatgtaaattttattttagaaaatatattttactgtagaatgtgttttattttaagcttctacagcaactttgagccaagttataaaagttggaaatttgcaaaaaaaaaaatttcgaaaaaaaattttcgaaaattttttttttcgaaaaattccaaaaaaacctttttttttcaaaatttgacaccacacataaatatactttttttgaacagttttccacaaaaaacccctcacaaaaaaggagaatggagcacttggaaagggaagagcacacgcaaataaatcaaatgggtcactgagcacacttttcaatgggaatcgtgtatggatgtgtttgatgttcaaatgcatatatgtacgtaaattgtaaatttataaataacattctagttagggggaaaaattgaaaaaattaaaaaaaaaataaaaaatttgaaaaatttttttttttttggaatttattttttatttttatcactaatataataaaataaagaatctgaatttgctattttcatcaataaaaaatgatttaaagcatagatttcccaaaaaaatatctggaaaaaatctagaagaatctagaaaaatcggcttctaggcataatcggctttctggatttttttgtggcttttgagcgctgtgaatagctgaaatgagctaaaaaatgtacattgtagtgttaaattgtattaaaaaatatataacaaacgaaagaaaaatttaaaaaaatcaaaaaaaaaagtttttttttaattaatttttttgtcaaaatttcaaactttcataactttgctcaaaattgagatagaaagctcaaattttgcacattttatagcaacagttatcaccttttggataatatttgtacttttaataaaactcttaaaaaatgtcttcaaaatctaaaacaattccaataaaaaacttttttttttcaaaattttattcaaatttcaaattgttataacttggtttatagttgagtaaaaaatctcaaatttaccggactttatagcaaaattttttttttcataaattaaatgttagcaactttaatcgaatttaggaattctcttctgaaaatccaaacatttttcaaaaaaaaatttttttttgaaaatttcaaaatttcaaactgtcataacttggctcaaaattgagctaaaacattatagtacacatattttaaagaaaaattttttggctttaagttgttagttaacacttttcaacgaaaattcaaaataagcactgaaaatccaaaagtttccgaaaaaatacctgaaaacctagtctttccgcctccacatatgcatagtttaggtcaaaaattttcaaaatatttgaacattttccattaccaaagatcaaattcaaaaacaatcaattgatttccaaaaaaaaaaatcacaaaaaaaaacagattaatctgggctgaacaggaggaagaagaaattgtgtgtgtgtttggagggtgataaaatgataaaatgattgaaaacagtgtaaagttgtgtcatctggtgagacgacctaatgccccgaacattttgataatcgatttgctacaaaaaaacaaaaaatgcgacaaaatgcgacaaaacatcaaaaactagccgcttttttactttttcaccccataaattttttcaatgacgtcaaaaacttttgatataacgaaattcgaattagtcacatttttagctttcatttgacacccagcatgactacgttctgtcaagtttcgagatttctgtggaattttttgggtcccaccccgaaaacctttcgggttactgtagtttctttaattaatattgttttattatttttcccttgtagatcataaatttaagcgatttttaagtttaaaattagcagaaaatcttaaaaacctacaaagttatggattttcgaaaattttcgaattttttttttacagttttaaaattttttttcaaaaaatgtcacaataacgtgttgaaagtaaatttttcagatttttcacgtcatcagcttttatttaacacccaacatgcctaggttccgccaagtttcaaaacttctgtggtttccgggtcccgtcacgaaaaccttccgggttactgtagtttctatttttacctggtagatcacaaaatttcacacattttaccgcaaaaaacagctcaaaatctcgaaaactgacagagttatggattttcgaaacttttcgaaaatctgaaaattttgaaaattagcggaacctagacaatatgggtgtcatatgaaagctggtgccgtggcaaatctgaaaatttaagtttcgaacaatttccatgccctccaaactttatggaacgtactttagaactaatatttaaaatattttcgaaaagtttcgaaaatccgtaactttttcaatttttgagattttctaccgttctctttcacagaatgtgtaaaattttacagtctaaccggcaaaaatactgcattctaaaagtattacaaaacgacaataactcaggaggttttcgtggtgggacccagaaatttcacaaaaaattcgaaaattgatggattataggcgatatgggggtcaaatgaaagctggtggccgggaaaactcgaaaatcaatgtttcagaaaatttccatgtaatttgaaacttttggtcgagaatattccagaaattttccagaaaaaagatgagaaaaagtacgtttcgcccacgaaaagtgtgaaatcataagttttccggcgaatcttgagaaaagagataaaaagtgatgatgatgaaaataacaacacaagaacagatggttaattgatagacgcagccggttagtgagattgatgaatgagtactgactcatggattttcaatcagaaattgctttaaaaaatcaaaaaattcacttaaaactaggtcaaattccgctttacaaagttgaaaattaaatttttgaatttttcacgtcaccagcttttatttgatccccatattgactaggtttcgtcaattttagaaattctctgagagttttgggtcccaccacgaaaacctcatatgttactgtagctttggactaaaacaacaaatttatattttttcctgctagaccatacatttttacaaattttaagataaaaattagcaaaaaagcttgaaaactggcaaagttacggattttcgaaaattttccaggctcccaccacgaaaacctcatgggttactgtagtttcacaccaaaacagtttattaatatttgtccctgctagaccataaaatttcacaaattttatgataaaaaatagcgaaaaagcttaaaaactggcaaagttacggattttcgaaaatttttgaaaattctaaaaatgtaccaaaattttaaatttagcggaaacttagaattaaagctggtaatttcaaaaataacaaaaagaaacgttttcaatatttgctacgtcatctacactatagtgcaagttttagaaaaaatttaatttcgaaaattttcgaaaatctgtaacttttttagttttgaagatttcggagtgatttttagcccaaagcgtgcataatagtttgaactaactttaaaaattacaaactcctcaaaattcgcaaaactacagtacccacgaggatttttgtgacgggacccaaaatcttcctaaaattttcgaaagtatgggaaacctaggcaatattggtctcaaatgaaagctgatgatgtggcaagttcaaattttttagtttcaaaagtttcttatgtcatacaaaaaaaaaatttcggaaaaaaatttttttttcaacttttcgaaagaaaaattttttttcaacttttcgaaaaaaaaattttttttacaaaagttctcaaaaccgatttttgtcttaattctgtaattttttctggaatttaggcatttttttacgcctaaaatatgcctatttactgagaaaaccactagaacttccggattaatttacacaaatgtttttggtgagggtggtatatacttccgattgggcggttttttttagtgatttatgattaataagtgttcagtaatctatttacaataaaaaattgcaaaaaaattgtctttttgcgaatttccgagaaaaaattctcgaacatttttttcttaaaaatgttataactttcctaatttttgacattttttcttaatttttttttcaaattaaagctaaatttctattctacaacacctatatcaccatgtttttggaaattcctcaaaccctgcagaaaacgcgctctaatgcgaatctcatcgaaaaacccactaaaaccactgaaacctcgggaaaaaactcgcattacgtcactattagtcgattaaaagggagtcatagtcatgcaacaacaaccaatatagtacacctggtggctaggcggattaaaaagtgaatgatgaatgtagaaatgacaatggtagctggttggtggaggaggacgagggggggggggggggggggaaccgtttataatttgctttgtaagctttgtaagctaaaaatgcttatgaaaactatagaaaatctggcgaaaattggaaaatcttgaagattattgaaaattattcaaaaatttgaatttcgcgccaaatcttttctgctttctcagaattttttaaatcaagaaatgattgatttcgtatacacccgcgtcggtaaaacttttatggttgcgcgtggcgcagtggctaacacttttgcacttggcccaccaggtcgagggttcgagtccccgggtggtttctttctttttattttttattttcagttttttttaattttttgattaaaaaaaataataactaaacccactgtgatagtatcagccatcagtagaacggtattactggttgccgattcggcgcccggtctctcgtcgaactcttcctccgattcgactcgattcaatcgataagttgatgacgtggcagacttgtcggatgataatgacgtggcgaggctcggcgagtagtgatggtgatgagttttggaagttgttgcgtgagttataggatattctgaaaaaaaaatttttgagattttttcacacatttttttatttcgaggtttttgataaaatcaatacttttatcggttttatcacattctcagcttcaaaatgatccccatcatgccctagttatatcaattttcgcattttccacttccgacacagctgaaactgctgctacagtgggacccaaatttgtaaaataggcattatgggggtcattttaaagctacaaacgcggcgaatttgaataaaatgaagaagagaagcaaaaatttcaaaaaaaagttttctgaaaaaattaaaaattttcgaaaatctctaattcaaattttccggttacgctaatatttttttccgttttataccattttcagctttaaaatgacccccatcatgcctcggttatgtcgtttttcgcgttttcaacttccgacacacagctgaaactactgctacagtaaccaaggtggtgggacccaaatgttcaaagtgagcggaaccagggcatgttgggggtcattttgaagctgaaaacgctacatatctgaataaaataaggacttgaagcaaaaatttcaaaaaaaaattttttttgaaaaaattgtaaattttcaaaaaaaaaatttttttttcgtttttcaaatactaacttacaattagagaaagataaaaatgatattaaaaactccaactaataacttaaatcaaacttttccaccgccaactagtttagctgtatgtgatgctccacacgatacggggcggagccagccggctgagcaaataattttttttatttgagcacaatttttcatgactagctttaactagttgcttagaaagttttagtcatggaaataaaaaattttagaatttaaaaaaaattagagaaaaaaattcgcgaaaaattttttagaaacatttttaactttttaaaagtcaaattttcatttcaaaaattgaattttcccctcgagacctcctatattccatcattttcaggaatttaggtctcaccacatgggttactgtagcagtgatttcagctgtgtggaaatattcaaaatgcaccgaaaatgggcaatataggggtcaaatgaaagctaataacgtggagaactcgaaaatttaaatttcaaaaatttcccggtaaaattaaagaagctagatgagtttttggaaaaaaaaactacagaaaataaaaatgctccgagtaaaaactactctcaacaagtagcgtactaattgaatattcagagcggtgaaggtcaaaaacgagagataatttattcactgctgacgagcagtattcatttcccttttcaaagttagcagtaaaaaccaaacagttagagagcgccatgggtcgaaccactgacctctcgagccaaaagcagacgcgttagccagtcggccatgcgcgcaataacttgtgttggcttaagaggctgtgataagaaaaaaggatcagaggccacaatttgaaaattaggtggcctagaaaattctaaaatagaattttaggccaccgatttttttaatttaaattttctagaattttcacataaatttcatcaaattaagtttaacttaccaatcattttttttcgagaagcaattaatttttaaatatattttttcgttttttcgcagttcgtttcagatgaatctgaaatatatatttattacattttttatgaagatgaataacaaattttttaaaaaatcaataaaaaggttccaaatccccccaaaaaacggatggaaaagattaaaaaaagagattttcggtgtggagggtgcagagaaagcgaagaatactacaggtggcacagcattttttttttgtggaaaattctatgatttccattttccgttgtcttgtgatattttctccaacaaaaaatgtttttaaacgagttgaaactaggaattttcgagtattccagggttctcccccgatttcttccagtcgactaggttctagaggggtaaataaccggaaatcgatgacatttacccctcaaacacttcgagacacatgaaaagtgagtaggaatagcggaaattgcaagacaaaagaagaaaaaagagaaaaaatgagtgtggggttcgaaccagggacctatttttccaaaagcgaggtcggtagccactaagccatggtgttgaacttttgggaggtagcgggagctagtgattaaagaacgggggcagggagctacaagacattttgcttaaaatttcgatggcctagaattccaaaactaggccatacttccgtttttcgtagtttgagggtactttttactaatctttcgatgggctaaggtgggaaaaggagaaaaaagccaaaaattgcatgaaaaagagacccaggcggtgtcacataggtaaccttgcgagagcggaagaaaaaaaataaattaatcggcggttgaggggcaaacacacacacacacacacacacacacacacacgggaaacaatgatgagaagaaaacagtaacaatagagagatgagtggagaaataatataggaacctgtggagaccgcagacattttaccgaacaaagacggttagaacttgttaggccatttttggtggttttgtgacgttcatttggaatttctagaacaaattgatttttagaaggcgaagaaaaaaggaaaaaaatagaaaaaaagtttttttttgaaaattttaattttgtttcccaccaaaaaacggtgcgataagaaaaaaaaaaatacaaagatcacgttattttcaggttttagcgagaaaaaaacaaacctaaaaacattttttttcaagaaattcttcaaatttttggttggtggccgaactttttcgcggggtggcctaggaatcaaaatttcgtttagcccattgaatttgtctcgctgagagcttcaaaatgacccccatcatgcctaggttctgacgaggtttgaaattttgggtcccgccacgcgggttactgtagcagtgtggtcagctgtgtcggatattcaaaatgggaggaaccaggtcgtgttgggggtcattttaaagctctcgacgctgtgaatttgaaaataataatttcaagattaaaagattaaaaattaaattttaaattaagaaaatcgaaatgtttcgaaaatcaataacttgctcaatttttgaacttttcacttaatttttctgtagaatctcttaaaatatctgataaatctgtaaaaaatacaatcacctagtttattgaacaaaattcgttgcgggacccgaaaaaaatccaattttcaatttttaaaattttttttccaaatcttaaaacttgtgacaagttccaaaaagtgatgttatcagtaagtatgataacaaatatgataagagaaatcagagaaaagtggcgtcgggatggatggtggcgaggaaaaacaaataaacacttttatagtcttgacagggcggtcataaaggcctatgactcatagttaagatggccatagtgccaagaaaaaaatcgatgattcattagaagacagaaatattaaaagatttgaagaaaaattgaactcaaaaaaaattttttttttttgcaaattttttgaaaattaaatttttttcaaagcttccaaaaaaatttctaatcttttttaactcaaaatttattaatattttctcaatttggatgatgtcatctacaaatgttcccaacttccactttgttccatcgattttgaacggagttatgtaggattacccagcccctccaaggtagtacaaattcgggggctgggggtgaaaaatcaaattttgaaaatcaaaatgggatttttaagtaaaatgatgtattacaactttgtgaagcgcaaaatttgctacaaaatggttaaaaattcaactttgtaactaaaaatcgaaaaaagttatgcgcctttaaagcaaccccaccgatctgcgcactatatttgtctaaaactgatttttctctacttagatcaagtttcaaatcaaaaaataatactagaagttgtagaactcctaattttctataaaatagtgtaaatcacgttttgataggtggaaattcaagaaagttacgtgagtttcaaggaaatatcagagagaggtcaaattacaaatttcttaaggtggctaaaaccgaatttgcaccaggtaaattaaattttctggacaaactggctataaaaaccagaagaactagttgttagctgaaaaatggccaaaagtattcaattctaggtaaaaattgaaagaagttacaaaggtttctctgagagaggccaaattttaaagtttgccttaaaacttagtttttcactacgaaaaccacaatttttagcgaaaaaaaaacgttgtagttaaaataaagaaaaagtgagtaggaatagcgaaaagtgcaagaaaaaagaagaaaaaacgaaaaatttagtgtgggattcgaaccagggacctatttttccaaaagcaaagcggctacccactaggccatggcggtgaatttttaaaatgtgatcggagctagagattaaagaacgggggcagggagctacaaggcattgtcttgaaaattttgttggcctagaattccaaaactaggccatatttctattttttgtagtttaagggcatttttcactaatctttcgatgggctaaggtgggaaaaggagaaaaaaagcacaaattacaggaaaatgagacctaaaaaacttcaagtcaaacatgagtgattcagaacacgaaaccgtattccaaaaccttatcagctacaaaaacggcaaaaatgacgagctaaaacctttgtgagtaaccttgccatctaaaaacgtaaaaacgaactgttacattgaaaatatgccgcttcaatatttgctcactcgctttgtgtgaactttttgtgttaccgtctcacatcatgcttttaccttttcgtgttcacaagacatgatatttgcacatcaattgagcaggcggccgcctcgtaaacggggaaaaatgagcacacacttttgggctcaaagagcattcatcgtttttgcaactggcattcagaatacaaaagtttcctatatgcttcctgggaataaagttttcacagcagcgtggcgcagtggaagcgtgctgggcccataacccagaggtcggtggatcgaaaccactcgctgctagattcttttttcctcttttaatgaaaaatcggaattttcaaaaatatattccgttgcggggaatcgaaccccggccttatgggtgagagccataaatcctaaccactagaccacaacggagatagaaaactaggtcaccgagggcgtaaaagagacggcgggcacaggcctccactccccccctgcactctctcattgcccaggtcgtttctatgctaattaccactatttcgggccattttctcgccgaacaaagaggaaagtgtccttgaaagtgtcccttgtacagtctaaacctccattttcctcacttttccccttattttcccttaattccgtgtcgaaaaatgaaaattttatatcgattttcagtaattttcgctatttttcttggaatttcagattttttcaaggtttctcatgctgagtaagtgaaaatttacactctttaacctaaaaattcgaatttagaaacgtattttgcacatattatcgcgaggagaacgagataacctgcgggtgagtggaaatttcaaattttcattaatttttgacctttcaaataagaaaattagcttattcacgacaaaatctggttttccagagtttttcaccccaaaaatgtgaaaaagaacgaaaaatgaccctatggcctaactgttgcatttggtggcctagaaacctacaactcggccacaaaacttgtgccaagaaattcagcttattaataccttcaatttaagtataatcatgactatatttgaaaacttttgaaattttcgaattttttcttgggtctttgggacgaaatttattttcatataaacccttttatgattttcaaattcagctcgttgagtgctttcattagacgcccatattgactaagttccgacgatttcgacatattgggtcccaccacgtgggttactgtagcagtagtttcagctgtgtcaatttcgaaaatcctcaaacttaacgtaacctagtcatcattatacttattttgaagctctcggtgagacaattacaatgaaataggtttgatggccgagtgttcaaatttccaggccactaatcgaaatatttcgaaatgttgattttcagcacagtaacctgttcgacacatgttccaccgaatgctgacctggaaaaagatggtcttgacgtgaagttgccgccgggttggtacagaataggtacaatgacgattcggcacgataagggttggctgaatttgtacaggcgccgggcgattgggcatgggtactgggatttttacacgaatattcccgagaggaattgtgcggggtgagtagcttgaaaggagcttcaatttgaatattttcgaaaaaatttgaaattttgaaattttgtaaaaaaaatttctaattttcacgcaaaaaccaaattattcaaaaatttgaattcagttcctcagtagctttcgtatgacacccatcatgcctaggtttcgttcacttttaaattcaaagcttccgacacagctgaaaccagtgctagtaacccatgtggtgagacccgaaaattttcaaaatcatcggaacccgggcaatgtgggggtctaatgaaagctgatagccagctgagtctgaaaatcgcagtgaaaaatgatttcgtggcaagacccaagaattttcaaaaaaattattttttttttttaaattttcaaaaatttcaaaattatcagaacctagtcatgattatacttaaatgaaagctctcaacaagactaatccaaatttctaaaccaaatcactctaaaatataaaaatttccagtcaagacccaaattatcattattccagaactttcgggcttcacgccggcgacaatatatctggctcagtggcggtaaagagcaaggagtgcttcgataagttgatttatcaggtgaggttatcagttttacgattttttgaaaaaaaaattttttttttaatttttgaaaaaaaaaatttttttttaatttttttttccaaacccaaattttcaaaaaaattttcagatcgaaaaaaagtcaacaatcgaaaaaatcgacgtctatcagtgtcgaaaatgcatattccatagctgctggctgggtagtcgtctgttgccgagagcccgtgactattatactaatttgagaagcttgtaatacaatgaactattaaaaaataaatttttattgattttttcaatcattatggcaaattgtgtagttggttgcagaccctgaaaaaattttaaaaaaactttgaaaaaaaaagagaattgttttacctcataaacttttttccgtgtaaatcttgagaaatctttgtaacttttacaatattacaaccgaatttgagattccgacactgaatacaccctgaaaaaatgaaaatttacacgaaaaatgtgtggtggcctagaaatcggaatctgtggtctagaaatttggaaactcggccatcaaacctatttcattgtaattgactcatcaagagcttcaaaataagtataatcttgactaggttacgttaaacttgagaattttcaaaattgacacaactgaaactactgctacagtaacgggacccaaactgtcgaaattggcggagcctagtcattatgggtgtcaaatgaaagctctcgacaagctaaatatgattatcataaaagtttttattttcaaaaaatttcgcgacgagacccaaaaaattcgaaaatttcaaaattttcagaaccctatcatgattatacttattttaaagctcaagtagagctgtactcaaatatctaatttttgtcaccaatacatcaactataacgtcaccgcaaagctttttacaccccgacacagctgaaactaaagctacagtaacccgcgtgctgggacccgaaattgacggaacctagtcaatatgggtgtcaaatgaaagctcttaacgtgctgatttcaaatatgtgggttgaataatataaaatttaccctgtttcgaaaaaaaatcgatcagaatattgattttttgaagttccatccaaaaaatccgaaattttccgagaaaaatcatgtaaatttggacatttttgaaggatcctttgaatttctagaagttgaggttcctaaataataaaaaaaattaaaaaatcgatagttctccgaaaaatcaataacctgtaatttaacttgaacagtgatgattctcaataaattctcgattttatcgattttttccgttcccggctcatttttcgcgtagatttcgaattttccaatcaaatcaacctcaaaaatcaataaatcccttagagacgcccatttcttttccgagtccttttcatattcgaataaatcgatatgacggcgcacgaattgtatggaaatgtcattgaaaccgccgattttttgataaatctcagcgattaaccggcaggaaattgccaatttctcgttattctcgcagtcttccgctagatttatcgatttttccactgcagacaacgcgatttcggtgttgtttctggaaaattagaaaaatccaattttttgagtaattaagctgattttttcacgtttttcttaacaaattcggattcagcacccaattttacccctaggcacgcggtttttacaaaaacttgaaaaattctgcattttgtcgtaaacactgcggtgtttgcgtactttcgaagctaccgtaccccaaaatgtttgatatttgcgctgtaaacttacaaagaaggttttcagggtaaaatttaacgaggaatttgaatttttacatgaaaatctgcaaaaatgaattttaatacaattttcctgacgatgaagtcataaaaattcattttttgacctttcaactttagttttatgaattttaactaacaaattcagattcagcacccaattttacctctagacacacggtttttgcaaaaattttggaaaattctgcaatttgtcgtaagctgttgggtgtttgcgtacttttgaagctacagtaccccaaaatgtttgatatttgcgctgtaaacttacaaaaaaggtttccagggtaaaatttaacgaggaatttgaatttttacataaaaatctgcaaaaatgaattttaatacaattttcctgacgataaagtcataaaaactcattttttgacctttcaactttagttttatgaattttaactaacaaattcagattcagcacccaattttacctctagacacacggtttttgcaaaaattttggaaaattctgcaatttgtcgtaagctgttgggtgtttgcgtacttttgaagctacagtaccccaaaatgtttgatatttgcgctgtaaacttacaaaaaaggtttccagggtaaaatttaacgaggaatttgaatttttacatgaaaatctgcaaaaatgaattttaatacaattttcctgacgatgaagtcataaaaattcattttttgacctttcaactttagttttatgaattttaactaacaaattcagattcagcacccaattttacccctagacacacggtttttgcaaaaattttggaaaattctgcaatttgtcgtaagctgttgggtgtttgcgtacttttgaagctacagtactctaaaacttttaattcgatcaaaaagcttagaaaaactacttgccggggttaaatttaacgaggaattcaaatttctacatgacaaacctctccaactcagctcgagccagcaaaatgagcatttccacttttttctcattattcgaagccagtttgaaaattgtcagtgcacaccgtgagtgttcacaggcttccgggtattttccagccaaaaatttcaaattcgccacattcgcatgtgcatcggccatcattttcgcgtttttcaactgttttccgacttccaactgctgattatagtacttttcagctagtttttcattattttcagccaaaaaatgacccattttctctaaaattccagcttcacgatacatatcatttgtgtcttgagcttctgttaatgcttgctccaaggcaataagcttccctatttttgggcgattttccagtgataaatcctcaaaaattagggatttcgctttggaatccaggttttgatcggttttcaaccaaaattccagcattttcagacatttttcagcttcttctgatattccggtgctttggagccatcggtacttggcactgatatatggaaccttttcagatgggcgggaaagtctaaaaaatttaaattttagtggagtgtgcggtggagcgcgcttgcaatacttattcagtaaaaaaacctttcaaaaggtgatttttcaagatttttatgcataaaatctttgataaattctttttttttcgagtttttcgttgtaaaattcggaaaactcaatttttccgcagaaaatcgatgtttgttcggtggagcgcgtttgcactggcgctatacattaaaattgcgggaaaagcgaacattatcaggttaaatcactcaatttttattattttaaatgtaaaattcagtgaaaatccgaagaaaattcgaaaaaattcgaaaaaattcaaatttgtcgctgaaaatcgatgtttgttcggtagagcgcgcttgcattgaaactggaggaaaaatcgatattttctcgcgaattttgattgaaatttgtgtttttccccgaaaaaacatgaaacttttaacttttactcattttcaaaaagaaaatttcaaaaaaaatttaaaaaaaaaacaatttttttttggaatttttttttcaaaattttgaaaattcccaaagacccccaccgatcacatattccctgagcacgttcaaaaactgcttcaacatcatccataattccttccagctgtgcaattcgagcaatttgcagaagcccattaagcttctccaacggcgtcaaaacccccaaatccacgtatttcttccacaaaacgtgggcggagcctgtgtctttttggtgctcataaatgatggcaagaagccggaatgcgttggctttgtgcacagaaatttcagccggaaattctgagtttttagaattttcctgatttttcgcagttttcagtacgaatttcgcgattttcagcgcagtttccagatttccggcgattatttgtgtttggcacagcagacagtaacagtggagcatctgaaatattgatttttgctagaaaaattaagaaaaatcgataaacccggcggaaattttgaatttcgcgggcttttgtctttggcggcaagaggcatgtgcgctccattgataatcagttgaaatttgcaaatttttaacgtatattgagagttaataattcataattgtcccaaaaattataaaattctgaaaaaaacaccgaaaaatcgataattctcggaaatcgatttctagctgtcggagcaagtgcgctccactgataaaatagtaatttttgccaattttgaatagttttttgaaattaaagtggattttttagaaaaatcaataatttccaaataaaaaatccaaaaaatcgataaaattcaaattttcccaattttcgcgccaaaaagacccaccaaatccaaactttcgacattttctcgaatgatttgattcaaaaattcaattgatgaattcaaatcctccaattccagcatacacttgttaattgtatcgattaactcgaaattttgatttttcgggtttctcgacagcggaattagcgtccgcagagccattttttgatctccttggagatgatgggcttttcctatgagctgacagatttctacgtgaaattctgaggtttcaggtggaattttgaagtttaggaccgtgaaaatctgctccggggcgccggttttcaggtagaggccacaaagtttcaggatttccggcatattctgaaaaaaaatattgattttcgtgaaagttcgttatcaaattcgagttctccgtcattttttacaccgggaaagtttttttttgagcttctcactccaattttgaaaatttcggggtactgtactttcgaaagtacgcaaacaccaaatagctgacgacaaaatgcagaatttctcaaatttttgcaaaaaccatgtgcctaggggtaaaataaggtgctgaatccgaatttgttggttaaaatttataaaactgaagttgaaaagtcaaaaagtgagtttttatgaatttattgtcaggaaaattgtcttaaaatttagtttttcggattttcatgtagaaatttgaattcctcgttaaattttgccccggcagctttttttgtgacttttcagtgcaaatatttaacatttcggggtactgtaccttcgaaagtgcgcaaacaccgcagtgtttacgacaaaatgcagaatttttcaaaattttcccgaaaaaaagctagacaggggtaaaatgaccgcctgaatacgaatttcgtaataaaaattctcgaaaattgaacttttcccacaaaaattttaattttcatgatttttctgaatattatagtaaaactcaccccatttctcgataaaatccttctctgttcaattgccacttgaaaattctcacagagctccgcaatagttgccaggttctctcgaattattgaaattgatggggtgtctgaaagtttaacatttttcagtttgaaaattgcagaaaaatggtgtaaaagtcaatttttattaaatttcagttaaaaattcggcttcagaatcgttaatttacccctaaatcgctttttccgcaaaattttgagaaattctgcattttgtcgtaaggtgttcggtgtttgcgtactttcggagctacagtatcccagaaattttcaaaactgttctagaaacccggaaaaaatttatccaggtgtaaaaactgagaaaaatacaaatttctacactaaaatcggaaaaaaagagttttagcataattttcctgtaataaagtcccaaaatctcattttttgaactttcaacttcagttttaagaattgtcactaatgaattcggattcagcaccccattttacccctaggcatatggtttttgcaaaaatttgagaaattctgcattttgtcgtaaaatgttcggtgtttgcgtactttcggagctacagtaccccataaatgttcaaaattgagctagaaacccgggaaaaaattatctaggtgtaaaaaagacgtagaatccgaatttcttattgaaaaattgaaaaaatttcaaaatcacccattttcatcgcaatttccagttgtttttgggtgaaaaacagcgcgtcctcgtatttttgaatggagcaataggcggatgcaagtgctccaaatgctgattcctggagcttcactgattccagattcaggtccaacgaccattttaagacttgaattgcttctgaaaataaaatcgataagtcatcgatttttgcggaaaacgttaaaaattgatttttttaaaattttgttaatgaaagataatttccctataggggcgataacattagttatcgatttattgattttcggagaaaaatatcgattttctttaaattttgcaggcgaaaacacttttccattgaaaaatcgataatcatcgaatgtgttgcaaacctgccgaccgcggccggcggcgggaaaaatggttagtgccgacggtcgcaaaaatggttagcgccggcggcgaccaaaatagtacgctccgccggcggtaaaaatagttcgcgcccgcagcgggcggccaaaatgattatcgccggcggtggccaaaatggttatcgccgacggcggtaaaattggctagcgcaggcaggcggcgcgattcagtgtacgccgccgccggcgcataagcttgctccaactttctctaaaaatcaataaaatcaccttcaacttctaccgaattattgattttttgcttctccatctctaagagcatagtttgtcccagcgtagacaaaatcgttggcacatgttcatccagttccaaaaccttcagattttcccacggaaacatcggaaagtgatcgaaaatcgataatttcaaacttttcagcaactgaaacccggcaggatccagccgaattccgttacaatacgaatatattgattttttcaaaaatccgagagcccgctgagcctctccctgccggtaataggcttttgcccattgtggacacaatttcactgaaatttcagcatgtttcagagcttccgggggcagttgaattttgagaagaatcgccgacagatttgcgtgtaggattccgtttttcgggtggtctcgcaacgctttttcgtagagttctcgtgcttcttggtaccgcccgtctgagtaggcggagcccgcctcgtgaaccactttctccaagttttcgttcataaaagcgctgaaaaaatgggaattttgaaaatttttgtttgaaaaaaccggttttttcagaaattcataagagttagcataagcctaagcctgggcctaagcctaacccgaagcctaaataaaaaccgacattttcgtggcgagaccaaaaattttcaaatttgctgaaaaatagccaatatgggtgtcaaattgaagcttatgaagtggaaaaattaaaaattttagtttaaaacatttatcgccaagctctccgcccactcgacaatatttaaaagtatgaaaaaaaaactttgaaaaatttttttttttttatttttcggaaaatttcaaaaatagccaatataggtgtcaaattgaagctgatgaggaagtaaattcaaaaaatgtttaatttaaaatgtttaacgtttaattttttaggccagactgcaaaaaaaaaatccccttaaaaaattctattagaaaaacgaaaaatcgatacaaaactgatgagaaaactaaagacgaacacaacattcgaaataggaaaatgaagcaattatataaaagagaattgacatcagcgccttcattcccgaaatcggtgagcgaaagttgatgcgaccttggggggtcttgcgggatttatgggggtttacggcagtctgggagaattaacagcttttatgtgttacaaagtattacgcattatcactaattatcagagttttcagtaaggataaaaaaaaatatttaaaaaaaaatttttttcaaaaaataaataatcgatttgttttcgcaaattcataataactgatattgatttttttcagaaataaacttcaatctttgcagaaatcaataaataatcgatgtttttttattagaaatcgaatttctcagtaataaaaaaaaataaaaaaattaactttcagatttttaatattttttttaaaaatataatttgattttatttgctccagacaaccttttccttgaaaaattcttgaaaaagaaaatgaggggttttgaaaattttttgaaattttttgaaattttgaaaaaaaaaatttcaaaaaaaatttttttcaaataatttttttccaaaaaacttatttttcaaaatttttgaaaatttccggcaaatcgacaatttgccggaattgaaaatttccggcaaatcagcaaattgccggaattgaaaatttccggcaaatcggcaaattgccggaattgaaaatttcctctaaaatcggcaaaccggcgatttgccggaattgaaaatttccggaaaatcggcaaactggcggaattgaaaaattctggcaaatatgcaaatgggcaaattgccggaattgaaaatttcctctaaaatcggcaaaccggcgatttgccggaattgaaaatttccggaaaatcggcaaactggcggaattgaaaaattctggcaaatatgcaaatcggcaaattgccggaattgaaaatttcctctaaaatcggcaaaccggcgatttgccggaattgaaaatttccggcaaatcggcaaactggcggaattgaaaaattctggcaaatatgcaaatcggcaaattgccggaattgaaaatttcctctaaaatcggcaaaccggcgatttgccggaattgaaaatttccggcaaatcgacaatttgccggaattgaaaatttccggaaaatcggcaaactggcggaattgaaaaattctggcaaatatgcaaatgggcaaattgccggaattgaaattttcctctaaaatcggcaaaccggcgatttgccggaattgaaaatttccggcaaatcggcaatttgagcttgtaataggctttggatatagtccagagaggtcaagctttccagaagaaatcaagccgatggcagtgggatagctgaaaatttccaataattggccaccttggaactaggaatgttggcgccaagctgtcccattacggtttgatctacaaaaaatgcgggaatttttcgcccagaaaaatgtgaatctgcgtctcaactcccgcattttttactgcaaactcaaaataatggttaccaaggtgaaatttatcgataaatttgaatttctacatgaaaatcagcaacattaattcttgcgctgagaactcacaaaaaaggttttatgggtgaaatttaacgaggatttcgaactttgacataaaaatcagcaaaaatgaattttaattcagttttcctgaggataaagcataaaaactcattttttgacttttcaacttcagtttcaagacttttaactaacaaattcagattcagcaccccattttacccctaggcacatggtttttacaaaaaagtgagaaattctgcattttgtcgtaaaaactgcggtgtttgcgtacttttgaagctaccgtaccccaaaatgttcaatatttgcactgcaaactcacaaaaaggtttttctagggtgaaatgtcacgaagatttcaaatttttacatgaaaatctgcaaaaatgaattttaatacaattttcctgacgataaagtcataaaaactcattttttgacatttcaactttagttttatgaattttaactaacaaattcagattcagcacctcattttacccataggcatgtgatttttacaaaaaattgagaaattctgcattttgtcgtaagcactgcggtgtttgcgttcttttgaagctaccgtaccccaaaaaaaatgtttttttttgttgaaaattggaaggaaaatcctcagtttgcgttccaattcgaattaccgccaagagttcaagatgttcgatggagcgcgcttgcatcattttagtttatttttggatctttttgacgggaaattcaatttccaaaaaaccgaaaaaaaatcagtaaaataatgcaagcgcgctccatcgaacaaattaaattggcggcaattcaaaatttttcaaaaaattgcagaaaagcgctaaaaatatttaaaaacggttaaaaaatagctcagagcttgaaaaggttcgaccactgccgtgtcttttaagtacgccgtttgttttttccggttctccaagccacattgagcttttctcggttcgccctgtcacatcgaaaacattgtctgtggccagagaacaagaaaaatctgaaaaatcattatttaaaatcgaaaaaaaagaaaaacaataccggcgaaaaatcaaggaaaaaaggaactataacaatcgattttttcaacaaaaaagaggaatttcctaaaatctaaactcaaaaaattgaaattaaaaaattaaataaacagagagagagagagaggggaataattgaatgaagatttgtgagaccgaaagccatatggaagataatttaatggaagactccgagaagatcagactcgcggaagattgagtattccttgtcctcgacgacgacctgaaattggggaaaaattgttgggatttcctgcgaaaatcggtcgaaaaaatatgtttttgcgcaattttcgcggtctgtaagcaaaaaattaattaattttcaggtattttgtcaaaattttggcctaaaactatatttcactggaaaaaactgacattttaccgcctgaaattcagtttttttggcgtaaaaatcatattttaacctagtttttccttaaaaaacgaaggaaatttgggattttttcaaagaaaatgctagatttccggtgaaaatcggcactttttgtggattttcagcgaaaataaactgattttcaggttttttcctaataatttagagcgaaaaacccatgaaattcagttttttggcgtaaaaatcgtactttaattcagtttttctcgaaattcgttcataaaaatgaatttttacagagaaaatgctagatttccggtgaaaatcggcaaattttgtgcaattttcgttgggttttagcgtaaatgtactatattaaaggtatttccccaataatttagagcgaaaagcgcgtgatattcagtttttgggggaaaaatcgtattttaatacaatttttcctgatttttctgaaaaaatcttggatttcggctgaaaaaacacaatttttgtgcaattttcgttgatttcaatgacttttcagtaatataacgctacttttacactgaaatgttaaaaaaaatcccgattttcgtccaaattgtgtgaaatttcaacggaaattcagattttcacattaaaaattcgccaattaatccatattttcgctcgaaattcgtcgcattttgtaccttggtgcctccgtattctgggagaaggacacgatctcctggcttcacagtcaatgcgacgagctctcccttctcgttgcgaagtccggctccggcagagacgacggtggcttcaaggacctgaaatattcgaaaattaggtggaaattgctttaatttgagtgaaaattcggtaatttcggataaaaattggacaaaaacctccgcgagcagtcggagagcgtgttggcagggaaaatcgataattgcatcattacaccagactttacggaattttcggtgaaaattaacatttttcgtataaaattgaaggtttttagctagaaactgtgttttagacgccaagttgcaccattttgacggtgaaattggcatttttgtgctagaaatctgctccaagacgttgaaatttatcagttttcacctgaaaaatcaatttttaggccaaaaattgctcacttttccctgtgacttctccgggagcatgattcctccctttgtcttggtctcggcggcgactctctcgacgagcacacgatcatagagtggcttgaaggtcttgaggacattgctctgcaaaaaaatacgcgtttaattcggagaaaacaccgggaaaatagcttaccgatcggcggacagcggtgaggaacatttttcggctgaaaaattggttttttgagttttaaaatttatttttagcgggaaattacatgaaaacaacgaaaaaacccgaagaaacccgcgaaaattcagaaaatgatcaaaaaaccaaaagaagcttcgagaaaaaaagcagaaaataaatgtgcggcgcgaaaaatctcgtgcggcaaacttgcaaatctaggcgtgtcgggccaatggcagacaccgcgccgcaaattcagccaatcagcgcgctcagctccacctagaaaagtgtgcgcaccttgcaaaactgggcggagcgagtgaaatgatgcaaaagtctattctgatgtaaattagccattttacatcaaaatttgcgtcattttcgttatttttctctcatttttcatattttgaacgaaaaattgaggttttttgcttctattttcatcagaaaccattgaaaaatgcttatttttgggccatttttcgtcgaaattaggggaaaaaactattctacagttttcccagctattttctcatttattcctgtatttttcagtcattacctgcttcccagacgataatgcaaggcttctcgcttcattttcataaaaaacgattgaaaaatgcttatttataggccatttatcgtctaaattaggggaaatatctgttttaccgttttcccagccgatttctcatccattctcgttatttttcactccttttctgcttctcagacgataatgcaaggcttctcgcttcattttcgatgagaaactctgattttgctcgcattttcgcctttccgctgcagattttcacacaattttcgtagtttttcagacacaaaagatgcttcgcctcgccagaaagggacttcagaccgccgtcgtcagatcttacgccaaggacgtcaagttcggagccgaaggacgacaggccatgctcgtcggagtcaacctgctcgccgacgccgtctctgtcactatgggcccaaaagtacggggattttgatgtgaaaattgaggaaaaaatgctgtaaaaaaatctattttaacgtatttttatacacaaaacttccggtttaatgcaaaatttaatttttttttcttcataaatacagcctctaaaactccaaactctttcagggaagaaacgtgatcatcgagcagtcgtggggaagcccaaagatcacaaaggacggagtcaccgtcgcgaaatccatcgacctcaaggacaaataccagaacctgggagccaagctcattcaagatgtcgccaacaaggctaatgaggaggctggagacggaaccacctgcgccacagttctcgccagagccatcgccaaagagggattcgagagcattcgtcaaggcggaaacgctgtcgagatccgtcgtggagtcatgaacgccgtcgaagtcgtcgttgcagagctcaagaagatctccaagaaggttaataccgggaaattgtggatttaaattcaaaagccacagtgatttttggaaaaattgggatttttgacccaattttgaagcgattttcatttgatgttagaggaaaaactagaatttcgctcaaatctgcttgaaaatcgcgaatttgtggctaaaatcagttgccaggaattcaaaatcttcaaaaaaccgtcattttttcccaattcgggccataaagcttatttgttcgacggaaaaaccttcatattccggaaaactgacaaaatttcactgatttgctctgaaaatcttgaaaaaccgtcatttttcccctactcaggacgaaaagcttattgtttgacggaaaaacccgaatattcccgaaaaattacaaattttcactgatttgtctcgaaaaaccttgaaaattcaaaaagttcgccaaaatgtggtgctttttggaacaattggcagctctgatgcaatttttcattcaatgttggcctgaaaagctgaaaatatcgaatttttggccaaaatcaataaaaacccgcaattttccccaattcaggacgaaagcacctaatatcccggaaaatttgcaaaatttcgtgttttttcaaacagttgtgagctctgatccaattttgaagcggtattcattcaatgttggcctgaaaagctgaaaatatcgaatttttggccaaaatccatagaaaccccgcaatttttacccaattcagaacgaaaatcttattttgtttgacggaaaaaccttaaaaatccggaaagctgacaaaatttcactgatttgccctgaaaaaccttgaaaagccactattttttacccaattcaggacgaaaagcttgttgtttgaatgaaaaagccctaatatcccgaaaaaatggccaaaaattcacagatttgtagggaaatcgcgactatttctgactatatttgctcgatatacctgaatttttacttgttttaaaccaaaaatcgcgcctagaaacctaaaaaatcagaaaaaaaactaaatttagcaataatttaactaaaaaaaacttgttcctgcaggtcaccacccccgaagagatcgctcaagtcgccacaatttccgccaatggagacaccgtcgtcggaaatctcatcagtgacgccatgaagaaggtcggaaccactggagtcatcactgttaaggacggaaaaacgctgaacgatgagctcgagcttatcgagggaatgaagttcgacagaggatacatctcgccgtactttatcacctctgcgaaaggagctaaagtcgagtacgagaaggctcttgtcttgttgagcgagaagaagatcagccaagttcaggatattgtgccggctcttgagctcgccaacaagctccgccgtccattggttatcattgccgaggatgttgatggagaggctcttaccactcttgttcttaatagacttaaggtacagacgacaagaagcgaaaaactgcaaattttgtcgaaaaccagcgttgaaactccattttttgacggaaattcgcgttatttcgattattgcccccaaatacggagaaaaatgcgaaatttgctgaaacccgacgttttcttgattagtttacccccaaatacgaaaaaaaagtacaaaattcgaaattttcagccaggaatttggatttctcttgaaattttgaatttttcagccaggaatttggattttccctgaaattttgaatttttcagccaaaaatttggatttttcttgaaaacttcaatttttcagccaagaatttggatttctcctgaaatgttgaattttccacccaaaaattttgattcttcttgaaattcgaactttccagccaaaatttttcgcaatttcgactgaaaaattcgtttaaaagccgaaaattactgtttttcggatcagtttcagcttgattttacaaacttttggaaactacagatttctgccggaaattacttattttggcattaaaaacttttaatatcccgatttttggttcgaaaaaatgtgtttttttgccaatttcgactgaaaaatggctaaaaatgctgcaaaaattttgtattcgtccaaaaaatccccggaaattcacgtttttagcctagaaaacttgaatttttatcagaaaattcaagttcaaagaaccgcgagcattttttgatcagtgatgtttgttagcagcaggaggctactcgcaacaaaatacgagcgaccttgattagagaatgataatatatcttctttttcttatcagttgagagagttttacaaattttacggcaagaaaatagaaaaaaagcagaagaaactagggattcagcaagaaaatcgccaggaaatttcataatttcctggattttctccaaaaacatgaagatttcacctgaaaatcgcgctaaattaaagttaattaatgtgttttacactgaaaaacctttaaaaccgcagaattttcttccaggtcggatttattcagtattctacataattttccatttttatcagtgaaaaagtgcgcattgacttctgagaaagtctatttttgctatttttgctaaaaaatacatattttcactgaaaaacctctaaactccatcattttccacgattttaagtttaaaaaaaaactaatttttcactaaaaaccctgtaaaaccgcagaattttctcttccaggtcggacttcaagtcgtcgcaatcaaggctccaggattcggagataaccgcaagaacacgctcaaggatatgggaattgcgacgggagcaacgatctttggagatgactcgaatctcattaagatcgaggatatcacagccaacgatctcggagaagtcgatgaggtcaccatcaccaaggacgatactcttcttcttcgcgggcgtggagatcaaacagagatcgagaagcgaatcgagcacatcaccgatgaaattgagcaatcgacgagcgattacgagaaggagaagcttaatgagcgtctcgccaagttgagcaagggagtcgctgtgctcaagattggaggaggatctgaagttgaagttggagagaagaaggtgtgcggaatttggctgaaattggagaaaaattgaagaaaaactggctattttccgtgggaaaatgatcaaaatccgttcatttttgagctttttttagcagaaaattggtttaaaaaaacctcaatttctaccagatttttgtcgagaaacctgattttaaaaccttttttgtgccgtttgtgccattggaaactcgttaaaactcagttttttatttttatttgcaacaaaacgcaagattctctttgtgctcctttcgagtaaaatttatggtaaattcccccatttttgtgaaagaaacccactaaatctgcagatttttcttgaaaatttaaatttttatttaaacaatctgactttttcttacaaatttgaatttttttagccaaaaatctgaatttttcagccaaaaatttgaatttttcttgaaaatttgattttttcagccaaaaatttggatttttcttgaaagttagaattttttagtcgatcattttcagcttgattttgccgtgtaaactacagatttctgccggaaaacattaaaatttgcgattttagcaatttccagccgatttttggttcgaaaaaatggctattttgccaatttgaatttttcagacaaaattttgcattttccttaaaaatttgatattttcagccaaaaaattggattttccctgaaaatttgatattttcagccaaaaatatggatgtttcttaaaattcgaactttctagccgaaatttttcgcaattgccacttaaaattttgttgttagaagccgaaaataactgtttttttcgcaatttcaactgaaaaaattgataaaaaaacgcggaaaaaactgttaaattgatttttcccgctgagcatgctcaaaaatagcagaaattttggttttcctgcgcggaaaaatcttgatttccaccagattttatcggttttctgcaattttttgtatgatttttcatcaatttttttttcattacaggaccgtgtcaccgatgctctgtgtgccacgcgtgccgctgtcgaagaaggaatcgttccaggaggaggtgttgctcttctcagatctctgacagcactcaaaaactacaaagcagccaacgaggatcaacagatcggtgtgaatatcgtcaagaaggctctcactcagccaatcgccacaatcgtcaaaaatgccggtcttgagccatcgtcgattattgatgaagtcaccggaaacagcaatacatcatatggttatgatgcgctcaacggaaagttcgttgacatgttcgaggctggaattatcgatccaactaaggtatatacagcgtcaaaaatttgaatttttcgtgaaaatttgaatttttgagacaaaaattttggatttacctccaaaatttgaatttttagccaaaaaatttgaatttttcgtgaaaatttgaatttttgagccaaaaatttggattttcctccaaaattttaatgttttagccaaaaattgcattatttcactgaaaattttcatttttaagccaaaaattaggaattttcttgaaaatttgaagttttcaggcggaaaatttggattttacgtgaaaatttaaatttttcagccaaaaattggagtttttcagcagaaattatttgaaagtagttcaaaaattggtcaaaaaatggaaaaaaattgcttctggccgtcttttttttttttttggaaaaaaaaaccctgaaaattcaacatttcaagaaaaatcgaaaatttttatgcaaaaaaaaatctccccaaaaaccgcaattttccaaatttccaggtggttcgcacagctctccaagatgcttcaggagtcgcctcacttctcgccacaaccgaatgcgtagtcaccgaaattccaaaggaagaagcagttggtggaccagccggtggaatgggtggaatgggtggaatgggcggtatgggaggaatgggattctaagctctcaatctctcattgaaataacgacaccgatggattgattttctctctaaaacactggtttttgctcaattttgtcgtttttcccatcattttttccccaaaaatttccccaaaaaaattatgatcttttgtgctctgagccatttgtttttttcttgttttacggctctttttcccctttttttgatgataacttttcaatggtgtttttttttttaattttttcgcaattttaggacctcaattttttttagtttagtgtttttccccttgtttttagagtataatatatagaatctccttgttttttttttccgtttttttctttgttttcactctcctccccaccccgtttttctctatataatatcacatttataaattatatttgtatagacgagtagtaccccccacctgcacacatttccgctttttgctgtgagggaggtcgccatggttacaggtggcggctctctgcagcagctttttctcacgaacatttggattttttacctggaaaattcgaatttttgagctaaaaactataattttctttgaaaatcggatttttttaagctaaaattttgcatgttttgaaatttcaagttatttagccagaaaattttgatttttattgaaaattcgaatttttcagccaatttttgaatttttctgaaaaatttaaatttttaagcttaaaatttggatttttggtgaaaaatcgattttttcaacaaaaaaattaaattttttttaactattcgaatttttttgccaaaaatttaattttttaagtataaaattcaatttttcttgaaaatttgaatttttagccaaaaaatttggatttttcaagaaaatgccatttttgagccgaaaatttgaactttttaaccctcaaattcaaatttttctttttttttctttttttttaaagattttttcagccaaaaatttgggttatttcttgagatttcgaattttttggccaaaaaatgggtttttcactgaaaattcaaaaatttttaagcgtaaaatttgaaaatttcctgacaattttgaattttaccagaatattcgaatttttgagccgaaaaaattggaattttcctgtaaatttgaaatttttaatttttttaagccaaaattttttagaattttcttaaaagtttgaatttttggccaaaaacttgtaattttccggaaaatttgaattttccagcaaaaaaatgagcggaaccatacgaaatgtctactttataatggaggaaatcgagattttcgacatttttcagcgattttcagtttttctgaaacttgagcactatgagatgctgaaaatgggcgattttttgaaaaatggtgatttttagcttcaatttgtcacctttattggcttgaatctggcaatttcggaaaatttgggtcccgacacgaaaatcaccggttactgtagcctcaatttcgtggcgggacccaaattttgtgaaagttggcgaattaagataaaaattagattctcctcacttttggcttcaatttgacgcccatattgccttaattccgtcaattttgaaaattttgggtcccaccacgaaaatggagctacagtaacccactattttcgtgatgggacccaaaaattacaaatttgtcagaaactaggcatgatgggggtcattttgaagctgaaagtgagaagaagtcgaattttcatttagtttttagaaaaaaaaagttttcaaaaaaaattccaaaaaaagtgttttttttttggaaatttttttccaattttccaaattttcaaaaatatctttaatttcgaattctcctcatttttgatcttcaatctgacctccatattgccttaattccgtcaattttgaaaattttgggtcccaccacgaaattgaagctacagtaaccggtgattttcgtgtcgggacccaaattttgtgaaagttggcggaatataggcaatatggggcttaaattgaagctgaaagtgaggagaattcaaattttcacttgggtcttagaaataagaaagttttcagaaaaaaaaaaatttcgaaacaattttttttcggatattttttttccaattttcgaaattcgtactaaaatttatttatttttgaattctcctcacttttagctttcaaatgacccccatcatgcctatattccgccaaatttcacaaaatttggggtctcgccgcgaaatttaagctacagtaacccactattttcgtggtgggacccaaaacttgtgaaaatcggcggaatataggcaatatgggtgtttttttaaagctaaaaatgaggagaattcgattttctacttagtttttcgaaatgaagaagttttcagaaaaaattgaagtttaccggaattttttttttgcaatttttcaaattcttcaaaaatatccctaatttcgaattctcctcaccttaagcttcaatttgacccccatattgccttcattccggtcaattttgaacatcttgggtcccgccacgaaattgaagctacagtaaccggctattttcgtggcgggacccacattttgtgaaagttggcggaatataggcatgatgttattttaaagctgaaaatgagaaaaattcaatttttcgtttaatttttagaattaatgaagttttcaaaagaaaaaaaaattatgaaacatttttttttcaatttttgaaacttttcaaaaatatctttgattttgaattctcctcactttaagcttcaatttgacgcccatattgccttaattccggtcaattttgaacaatttcgggtcccaccacgaaaactccaactacagtaaccgggtattttcgtggcgggacccaaattttaggaaagttggcggaatgtaggcatgatgggtgtcaaattgaagctaaaaatgaggcgaattcaaatttatacataatttttagaaataatgaaattttcaaaaaaaaaacatgcaaaaaattgaagttttccagatgtttttttccaattttcaaaatttcccaaaaatatcttcaattttgaattttcctcatttttagcttcaatctgacctccatattgccttaattccgtcaattcgtcaaattttgggtcccaccacgaaattgaagctacagtaaccggtgattttcgtgtcgggacccaaattttgtgaaagttgacagaatataggcaatatggggcttaaattgaagctgaaagtgaggagaattcaaatttatacataatttttagaaataatgaaattttcaaaaaaaaaaacatgcaaaaaattgaagttttccagatgtttttttccaattttcaaaatttcccaaaaatattttcaatttcgaattttcctcactttcagcttcaatttaacacctttattggctggaatctggcaatttcggaaaatttgggtcccaccacgaaattgaagctacagtaacccactattttcgtggcgggacccaaattttaggaaagttggcggaatataggcaatatggggcctcaattgaagctggaagtgaatagaattcgaattttcatttagtttttagaaataataaagttttcagaaaaaaataatgcaaaaaattgaagttttcaagatttttttttctaatttccaaaaattttcaaaactatccttaatttcgaattctccccactattagctttaatttgacacacatcacgcctttattccgccaactttcacaaattttgggtcccgccacgaaattgaagctacagtaaccggctattttcgtggcgggacccacattttgtgaaagttggcggaatataggcatgatgggtgtcatttgaatgctgagaataaggagaattcaaatttatgatcagttttcaaaaccaatccctttttgaaaaaaaaattcttgaaaaaaaaatttcaaaaaaattccaaaaaaaaatcaaaaatttttattttctcaaatctctaattttcagaactcccaaatggcctaaaatttccagttttacttgaatccacgtggtttgaaaaacccgaatttgaggtcgaaatccgtacaaatgggcacatttacgccggaattttggacataaatggggcggagcctggcgataagggggcggagcctaatgtaattttttagtaaaaaagtttcttgattttgttaaaaattaagcaaaaatcgaaaaaaaaattctgaaaatttttttttttttaaatgtcaaattttttttctgaattttttcgaaaattaaaaaatcctcctaaaaatcaattattcagtaaaaaatgtcggaatttatatatatatggaagaaattattgatttttttcgggaaaaacctgaaaagcgatattaaaaaacaatttttttaggccaaaattttcaaattcaaaaaaaaaaaaattttttttcaaaaaaaatcaatatttcccaaaattccagcaaaacctctcaatttccggcaccgcaaaagtgtataacatcaacgaccccaccgatcatattaccctaaaatgcacaattctaatcgaagatccggttgccgagagagccgagaaaccggaggtggtggcaccgacgagggatgagcagacgcagacagagagagaaaaattaagaaaagtggtggagaagggtgttcaggtatggttttagtagaatatttgaaaaaatccaaatttttttggaattaaaaaaaaattttggaatttgaaaaaaaaaaaaaatctgaaaattgcaaaaaaaacttaatgactgaataaaactaaaaattctaagcatttttcctttgttaggttttctgatatctctactccccgcggagatacaccgcttcaaagtttgatcgacgagagagggggagacgcaggcggcgagagcgctctagctgtcagcgcctcccctctctcgccgctcaaactttgaagcggcatagctccgcggggagtggagttatcaaaaaacttcaataaggaaaaatggttagaattttaagttttattcatttacaatgttgttttttccaaacagtaaaaaaaaaattaataaatgtttatttttattttttggaaaaaacaacattgtaaatgtataaaactaaaaattctaaacttttttctttattgaagttttctgatatctctactccccgcggagatacaccgcttcaaagtttgagcgacgagagagggagagacgcaggcggcgagagcgctctagctgtctgcgcctccacatttttctcgccgttcaaactttgaagcggcatagctccgcggggagtagagattaaaaaaaatttccaactacaaaaatgttcagaatacaattttctatcggaatatctaattttcaacaaatttattcgaaatttgtatatatcacaacctataaatattataaacttcatttttcatctgtttttctgtaaaccgcccgtttggcacactattccgggcagcattccacgcgtaattcagcgaattttgatccaaatgccagttgggaccgtattctagctaaaaaattgatgaaagtaggcataggtaggcacgtaggcgggaacttaccgtaacctttgcctccggggtacaggtcacccaaaaaatgtgtccgagtaggtcagcggaacaccacggatcgtatggtgggtagatgtacttgtattttgaaccatcagctggaattaggttggtaggtaggtaggtaggtaggtaggtagatagatagataggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtaggtagggtaggtatttctaaccgcaaacatgttaagaacacaattttctaacgaaatatctaattttaaactttattccaaatgtcataggcaggcaactaggttagaacataataggtaggctagcaataggcaagtaggcatgtaggcaggcaataggcacgcaggctggcaatcggcatgtaggcaggcaataggcacgcaggctggcaatcggcatgtaggcaggcaataggcacgtaggcaggaaataggcatgtaggcaggcaataggcatgtaggcaggcagactcacgtccagttccaccagcccatcgatattccgtcccgtcggttttgttaccctcgttatataataaaaatacgtccaccaaagtttgaaatctagtttttgggagtactgttatctcgaaggagtcgttcacctgaaaattgggaaaagttgggtcccgccacgaaaagccagctacagtaacccgctattttcgcggcgggaccccgaatttcaaaatttgtcagaaccttggcatgatgggggtcattttaaagctaaaaatgaggagaatttgaattttcaggcgattttaaatttttgacggtgtttgcgtacttttgaaggtacagaaacctggagaattttcaaatttttgaatttttgaatttttgagccgacaaaaaacctttctagggtagaatttgatggggaatttgaattttttgttaaaaagttcaaaaaaaaaatcggtaaacccccgcaactcaccatcccaaactgccgcttaacccgaaatttcgactgccggctccacaaaaactccaaaaactcgggattccaattctcggaaaacacggccaaatccatatcagtagtatgtggaattactgtacattctcggtaccaccccaaaaaagttccgccatttaggaatgggtaaatcccgaattggagcatctcgtcgcggagcaccgccaaatgctccacggactcttttgatgggattttgggggctgttagctggaatattcagataaaatttaagttttggagaaatctataaaaaaaagtgagcaaaaagccgaaaaattcaaaaaaaaaatttttttgaaaaaatcgaaattttttttttccaacattttttttttcgaaaaaatccaattttcacctgaaatctctgcaaaatcttaaatttccagtaaaccatgctcagcgagtccctctccgacattgacacattccggcagctctgaaacttggcacggcgccaaaattctagaaattgcgggattacggtaggcacgagtaggttgcctatttgaatattcgggaaatttctgaaaaattgtattattttagagcttttccgacaaaaaacagtactgtggaataattttccgtggctgggtgtgaaaatccaggtagtctgtggaggtgtcatttgagtagtagaaaacgtcgaaaatttgatcaaatgcattgaattttggctttaaattgacgtttacaccaatctgaagtgaaaattaaatttttaaaaaattttaaaaataattttttgaaaaatttttttttccaaaaaagaaattttttgaaaaaaaaattccaaaaaacattttaaaaaaaaaatttttttttaacagtttttttaccttaacagacatattaacactaaaatttttacaatttccatcagcaatccactgcaggacatgtacatctatcaataatgcaggaactggaagtttgccaactcccaggagccatttctgacaggaaatcgctggaatctggaaaaaacttgaatttcagtggattttcattcgaaaattggttttattgctcatatttacccctagaaactatattttcacttataaaatgcataattttgggacaatttcaatgaaaaaaacaacgatgctccgaaattccggtggcgcgtgttgtttagccaaactcacaaattccttcaaaaatccatctccggtataatccgtcagtggtctcggcgactttagcggtgggccaaaaattgaaggactttgagataaaaatagtagaaaaccaataagagcacaaataaatattacaagtggtctttttcgtagaaacctgcaaaagagagtactataggggtactgtaggggtactgtagaggtactgtaggggtttattgggggtactgtataattattgtagaggtaggtactgtagggatactgtaggggtgctgtagaggtactgtaggggtaatgtaggggtacggtagggatactgttggggtactgtaggagtacagtagggctactgtaggggtaactgtatgagtactgcaggggtactgtagggggtgctgtaacttcaccgtttaggtactgtaggtctactgtaggggtactgtaggaatacggtaggggtactgtagggatactgtagaggtactgtagaacacggtacattagtaaaattacctccaacaaatagaagcactcatcatttttagaaattgaatggtcaaaacacaagcgataaacaatgaaaaatgaggggcggggatggatagatctgccttttttgcaaattgcgatgctatcttgcacttttgtgcaagatagcaaacctgcaaaagagagtactgtaggggtactgtaggggtactgtagaggtactgtaggggtttcttgggggtactgtataattattgtagaggtaagtactgtagggatactgtaggggtgctgtaggggtactgtaggggtaatgtaagggtactataggggtactgtaggggtactgtagaggtactgtaggggtttcttaggggtactgtatgattattgtaaaggtaggtactgtagggatactgtaggggtgctgtaggggtaatgtaggggtaatgtaggggtaactgtatgagtactgtagggggtactgtaagtttaccgtttaggtactgtaggtctactgtaggggtactgtagggatacggtaagggtactgtagggatactgtagaggtactgtagaacacggtacattagtaaaattacctccaacaaatagaagcactcatcatttttagaaattgaacggtcaaaacacaagcgatgaacaatgaaaagtggggcgcgggcggggatggatagatctgcctttttacaaattgcgatgctatcttgcacttttgtacctaacataatcattcaaaaaatctaatagacacatgggtcccgcaacgaaaactcctctgtttatatgataggtgcattgttggctctcgaaaaattttcctggtcccgccacgaaaacctcttgggattactgtagtttcattttttaaattaaaatcagttaaaaactgataaaattgacaaaggtatagattttcgaaaatatttaaaaatttgaaaaattttttttttttaattttttgaattttttttaaatttgtattttaattatttctgggcgtactactgtgttaagacacaaaacacaacagttccttatcggatttttcagaaaaaaaatctaatctagatgtaaccgttcatctttggcggcggcggcagagaaaatatttgatgaaaagaatattttttttttggaattttccgatattgcttaaaaaacaatgacccggttttgagttttcgagaaatttaaaaaaaattcgaaaaaaaaaaaaaattttcgaataaaattttttccaaatttttttttgaacattttttaaagataaataacattttcaatttttagattttaagttttttaaatgcatgtgattattttttttaaaaaagttgaatgtaaggtactaaattttcaacattttttttgaatttttgaaaaaaaaaaatgttttcgaaaaaacgaatgttttcaaaaattcataattttatcaattttcggtgaattaggctgatttttcacagaaatttgcataattatctgggccacctgcaaataaatttttactgaaacaaacttgaaactacagtagcccaagggggtttcgtggtgggacccggaatttttcaaacctactgaattctaggcgcgttgaaagttaattgcaaggtacaaatataggaatgtatctaataaaaagagcattgatgataactttgtgaatttgtaattgttttcgaatgttctttaaaaaaaaaattttttttggaatttttttttttcgatttttttcgaaaatcaataactttgctagttctgataatttcaggctaaaaattgagccaaaatgtctattttcgtttgaactatcatagaaaaatgtgattgccctgcaaaacttaacttacaactacagtaacccaaagggggtttcgtggcgggacccggaatttgccaaaacaagcaaaattcgaattttttagtgggttttgcacttaaaagtagcagaaaacaaataaatttcatagttaagtaaattcaattaaaaaagcccaaaaatttggaaaaaaaaaattgaaaaaaaattcaaaaaaattttttttttcaaaatttcgaaaattttcagaccgatgacgtcaccacttctaccgtatccacaactaccacagaaccatatctagacattgaacaactccagccaatacttctcacttcaatatcccatcacctaaagcaacaccgcccacacaaatctctttcaccgccgccgcctcaaaaaatttccacagaaatcccggccaaaccagctcaaaaatcgataaaatcgctaaactcgttcaatttaatgccaagaatcggaaaactacaacaattggatgctcaaatcgctgaaaaacagaaatttctggaagcgctgaattcggaaattgagctcaagaaaaaaatggttaaatttttggaaagacgcatggaaataggcgaaaaaattgataaagtcgataaaatcgatgaaaaaccatccgaaaaaggagaaatctcttcagaatccacgtcatcagattctgaatctgagtctgaaagttctacagactcagaaactactacaactactactaccaccaccactgagaattcctcggaaactgtgagaaaaatcgatacgccaccggaagccgaaaataaagaggagaggtaaatctacaaatataatgaaaatcatttttttaaattaaaaattaaaaaaaaaatttttttttgcaaattgtaaaaaaaaagtttataaatgaatagaacacaaaattctaaacatttttcctttttaaagttttttgatatcttcacttcccgcggagatacaccgcttcaaagtttgagcgacgagagagggggagacgcaggcgcctcccgctctctcgccgttcaaactttgaagcggcgtatctccgcggagagtaaagatataaaaaaaattccttctacaaaaatgttcagaatacaattttctatcggaatattaaaaatgtaaaggttttcgagtggaaaaataaaaaaaaaaagttttttaagttttaaaaaaattttctcctcaaaatcctttacatttccgatattccgatggaaaatggattctgaacatttttccttttaaaggtttctgatatctctactctccgcgaagatacaccgcttcaaagtttgagcgacgagagagggggagacgcaggcggcgagagcgctctagctgtctgcgcctccacatctctctcgccgttcaaactctgaagcggcgtatctccgcggagagtaaagatataaaaaaatttccttctacaaaaatgttcagaatacaattttctatcggaataccggaaatataaaagtttttgaatagaacgtttttttgaaaataaagaaaaaaaaaatttttttgaattttttgaaacgaatgtttcagttgaaaaaatggccctaagccaatttttacgttaaagtctattaaaatattaattttccagcataatcgagcacccattctctgcccgtgagcccccagagtctccgacaacggcatacatgaacaatttacggcagaaaatgttggatcaatatcagcaaaaatatacataatcaacattttattagtaataaaaattcattcattttaattttaagaaggcttgtaataaaaaaaaaaaactttgaaaaacgtatgaatagggcttccaggcaggcgcggtttcagggcctcacgcctgcctccagcctgccttactctaaggtggtacattcaccgcggccgacacttttcgggttcccctttacaggaggcgccccaaagccttcgcggcaggcatttgccgcctacatggaagcgttagttatgaatatttaatagttaatattattagttttacatcataaaagaaaattaaaatgaaggtccttaattatttgaacgtaatttttagccaaatgaactgcaaaatagtacaaatccaggaatgacatttatctgaaataggtgaaaatctttaataaaggttaaaaaaggaatactcgtgtataactactcaccatattcacaaatcttcaaaaaaagtgaattctgagccaaaattgaatatcatttgggaaccaagtgtaaatgcatgcaagcatagtcaagaatgcaacaaagacaataagtgctacggttagcatgacgaagatgaagaattcgtagtagttgcatcggggtattggggttgggtatgccatttgaaatttggagaaatgaggattaatcaattatagtttactaaaattttaggaactttcagattcagaacccaccttttttctaactaagttaaaacattagtctcgaaaaaaattaaaaaaaaaacaacttttcttgtattttttctacttaaattttctacttttacatgagatattccgatagaaaattgtattctgaacatttttcccttctgaagttttctgatatctttattccccgcgaagatacaccgcttcaaagtttgagcggtgagagagggggaggcgcagacagctagagcgcactcgccgcctgcgtctctccctctctcgtcgctcaaactttgaagcggtgtatctcggcggggagtagagatatcagaaaacttgaaaaaggaaaaatgtttagaatttttagttttattcagtcatgaagttttttgcaattttccgagaaaaaaaattttcaaaaaaattatttttaactttttggaaaaaacaacattgtaaatgaataaaacttaaaattctaaacatttttccatattgaagtttttcgataacccgactccccgatgagctatggcgctttaaagtccgagcggcgagagagggggaggcgcagacagctagagcgctctcgccgcctgcgtctctccctctctcgtcgctcaaactttgaagcggtgcatctcggcggggagtagagatatcagaaaacttgaaaaaggaaaattgtttagaattttgttttctattcaattataatctatttgcagataaaaaaaattataagaatctgaaattctcaactaaattcattttttttacaaatgttttagttggaaaaaagatggtttcagaatctgaatgttttcaaaactttagctaatatgaagttgaaaatttgattcttttgtaaatacttcgatgcacttggtaaaattaatatataaaaattacgcatttaaaaatgtggccaccttgtggtgtgaaatgggaggactaaataaatctcctaactaatcatgcttttcattgcaacaaaacattagttatcacaagataatgagtataatcaggtgatggtgatcacggaatcagttgaataagtaattgtaaacagaaagtagtgcaaaaggagatatttacgatatctgcaaacaaagttgtgaacaccgaataccgattgcccagcagatattaccgcaatcgtcttttaaaaatttccgtaaaagctagcatactttttttggtattttctggtattcatggcaatgctaaacagttttataaaagaaaaaagaagcacttcgtatgatttttccgtacttttgaatttttgaaaaataaagcttttggtgcattttctgaatttttaaaaataatcttccggacttattctagcatgctttttttggtattttctggtaactatgacattatttaacagttttatgaaagaaaaaagaaggtctccctttgaatatcattactcatcgaatatccatctcaactccaaaaataccttatccatcacatcaccccctttcgaaaagcggcgaaataaaattaataaaattattatcgccgctttctacactttgcgcggtccctagagcctctcgcttgtgataagcgcgtgattcttctaatttttaaatttttatgtagaaagagctgtgaaggtttgaactcatttttaatcctttgttgagcgagaatgagctcttttcatcgattttttttccagttttcgaaataagtttgggttgggttttcattaagaagattttaagttgtaggtattatataggtgtgttgaattatctactcggcaaaacgtcgcaacttcatagcatactcctgcaacttaataaaaacatttacataactttgtaaaaagctgttaagaagttgcgaaaaccaacgggattgtgagcgaaatttagctttacatctgctaagaaattgcaaaagtcgtctgaaaagctgcagaagtttgcttaaaagctaaaatgcctaattgttgttaagaagttgcaagagtatgctatgaagttaggccgttttgccgagtagttagtaaatcatattccctagggaaccgcatacaatggtgattttttgctgattcttcatagttttcgtgattataaccaccaaacaagaaactttagaaagaaatgtccaactaacgtattgtcacctaaaatattctctacataattacacatattgtaacacttcaaaacatttagatcaagagatacagcagccgacaccgcgcaagtcaatttttggtcgtttctcttgaaacatctgtaactcaagaatgcgaagtttccataaaaaagtttttggtaataaaataattcgcaaataatcatttgccgttccgccaattttttgtcgtcaaattcggtaaatcggcaaagtcccggttcgccgatttgccggaaattgtcaattctggtaatttgccggtttgccggaaattttcaattctggtaatttgccggtttgccggaaattttcaattctggtaatttgccggtttgccgatttgttggaaattatcaattccggcgattcttctaatggccgatttggtgaaaatttttaattccgtcaaatcgcggatttgcggaaaattttttaatccgtcaaatgaccaaaaatgttccattctggcattttgccgatttgccggaaattttcaattccgacagttttccgatttgccggaaattttcaattctgtcaaattgccgatttgcggaaaattttttaatccgtcaaatgaccaaaaattttccattctggcattttgccgatttgccggaaattttcgattccggcaattttccgatttgccggaaattttcaattctgtcaaattgccgatttgccggaagttttcaattccagcaatgttccgatttgccgagttgccggaaattatcaattccggcgattcttctaatggccgatttgctggaaatttttaattccgtcaaatgaccaaaaatgtttcattctggcattttgccgatttgccggaaattttcaattccgacagttttccgatttgccggaaattttcaattctgtcaaattgccgatttgccggaaattttcaattcgggcaatttgccgatttgctggaaatttttaattctgtcaaatcgcggatttgcggaaaattttttaatccgtcaaatgaccaaaaatgttccattctggcattttgccgatttgccggaaattttcaattccgacagttttctgatttgccgagttgccggaaattttcatatttggcaaaattcgggtttgccgacattccggaaattttcattttacgcaaatttccgatttgccggaaattttcgattccggcaaatcatactctaatttttgtactagcaacataattttttttcagtaatattgactttcctttgagtaacagtttttgtcgatgcaccaggtcttctctcaatcagatccattttccaggtatcaagaagatgagtcgcttcccaccggatcccaactttccaaacttcccaccaccaccgccaccaaagccgaaaccaatcgtcgtcaacgaccaacctcgcccaccaaccagcaatgaccacgggggttcttgcttgacatttgccatgtgcatcatgattgccatgttcttcgtgctcatcattctcgtcgccatctacctcaaggatcgggtgatcttcggaccatcaccaactgtcactccggatccagtcaagccatccatcggagttcttggatgatgaggagaaatggaatttcagtagataattttccggttttagtcgtaaacttcttttaaaacaatttattattattctcatagtattgtactcaactgatccacttgttaaaggtggagtagcgccagtggggattttgtctaaatgcacttataatgatccaaaacaaccgaatatcataataaaacactccaaaatttttttagatttttcataatttccggtaaaagttttggcaaattgccaaaattttgaaaaatacgagcttttgaggaaatttaaaaaaatgttgcatgtttcgacccctacaatgttttaatacaaataatttaaacaaaattaaaacataaaaaatgtagaaaattttttttttttcggtcgacctccaaaattatgagtggcaaaaactaaaaaaaaactaaacaatttccaaaaattttttgaaaaattttataatgatattcggtcattttggggccattcaagtggtttttttttaaattttcccgctgacgctactccacctgtaaaaaactttaaaatccttcaaaaaataaatgtaatcaaaccatatataaagatctatcaatttcagtgtttcggcagatccaagcatgttcggcaaatcggcaaatctggcaatttgccgatttgccggaaaaacggaattttccggagtttttcggaaaattgtggttttggatcgtgtgtaaatttttaggattacttccagatcctgttatttgttatttccaggcccagctggttcaagagacaatttatgtcaataaaagagtattttcgaatgatcacactaggtgaaaattattttctaagaatcttgtaattactatcacccatgggaccatggacacattgggtccaacttcgggattaaatttctgagtcactatcagaatagagttttgagcataaaccacggattaaaaacaaaaacggcggttgtttcggaagaccagttagggatatatgatctgaaaataatttgtaaaagtctttgagttgaaaaattaaaaaaaaaaacaaaaacatgcaacacttctttagattttccgatatgagagtctgctggaaaaccaatttttaaaaccaaaccaaaaattccaaagttctaaatacgttttcagacgatttccgtagttttgagtcacttttgtctggttattggtttctgagcagccaatggagcttaaaaaagattaaagattgttttaaaattttgaagaattcaaaaacactgacactaaactcattaatctcgacgcccagctgcggaaccccgaacgtgtcggccgcttccaaaaacaaccacctcttcacacttcattgcgcacacaccaaactactagtttcacgtcaaactgcggaaccccgaacgtgtcggctgcttccaaacaaccacctcttcacacttcattgcgcacacaccaaactactagtttcacgtcaaactgcggaaccccgaacgtgtcggccgcttccaaaaacaaccacctcttcacacttcattgcgcacacaccaaactactagtttcacgtcaaactgcggaaccccgaacgtgtcggccgcttccaaaaacaaccacctcttcacacttcattgcgcacacaccaaactactagtttcacgtcaaactgcggaaccccgaacgtgtcggctgcttccaaacaaccacctcttcacacttcattgcgcacacacagcggcgtcggcgtgaggactcactcacaatcaggtggcagctctaggttcatgtccaaaactcagttgttaatcagggtattgatcagaggatccagttgacaaaaattcggcaagttggcaaattgccggtttgccgatttgtcggaaatttttaattctggcaatttgcctgaaatttttaattctggcaaattgccggtatgccgatttgccggaaatttttaattctggcaaattgccggtttgccaatttttggcaaattatcatttccggcaacttgcgggttgccgaaagtttttagagggattttttagaaaacgaaaacatttaaaactgtgccttcttgaaatgtttttcccgttttctttagatattttcatagaatttgcttacttttccaaatatatgttcataggattcataggatacgtacaattttgccgattaaaactgaaattttaaaattaaaaaaaaaatagggcaaaaccactatttgccggaatttttcacttccggcaaatttgccgatttgtcgaaaattttcgttagttgccgtttttccgacaaattcgccgattttcgatttcgccgaatctgccaatttgccgaaaattttcaattcccgcaattaccgatttgccgaagtattaaattccggcacttttctgatttgccggatatttcaatttgaattttgaactattttttgcgaatctcggcaaaaccgccaaatttgccgtgctcatagtaagcaaactcggaaaaaatgtgattttttaaaacagtagcgtaagttgttaagacctgttcgctcaatctgaaccgcccagaaaatccgacgaaaacgctagtttccacaataaatatttattatcagcgctactatcagaattaaaaaatcgctcctggaacttgaatgtcccgtggaattggatagaggataaagagaacaataatgcagaccatgagaattgcgaagagaccaaacaaaatgctatagccgacgacacacttcttcgagtagcggattcttgtgtgagcttccggttctggaatcgggtcgtggaagttttcgactttgatgatgtttggtggtggcatgattctgaaagatgtttggaactattagagagtatactaggtgaaatgataaaagtactaaatagtgaaatgataagaagtagatcaaaacaaaacatccgatttttgagcaatttgccaaaactttgaccggaaattatgaaaaatctaaaattttgtggaatgttttattatgatattcggtttataaaactgttcagcataatcaaatatactagaaaataccaaaaaagtatgctagcttgtacggaagattattttaaaaaatgcagaaaatacaccaaaagctgtatatttcaaaaattcaaaaatacggaaaaatcatatggaatgcttcttttttcttttataatactatttagcattgccataattaccagaaaataccagacaaaatatgctagcttgaccggaacattatttttaaaaaaagtagaatttaaccaaaagcttttttttcaaaaatgtagaagtacggaaaaatcacatggagtgctattttttcttttataaaactgtttagcatagtcatatttatcagaaaataccaaaaaaaaagtatgctagaatgtccggaagattatttaaaaaaatgcagaaaatacaccaaaagctgtatatttcaaaaattcaaaagtacctcaacatcatatggagtgtctcttttttcttttataatactatttagcattgccataattaccagaaaataccaaaaaaaagtatgctagcttgaccggaagattattttgaaaaatgcagaaaatgcaccaaaagctgtttttttttcaaaaattcaaaaatacggaaaaatcatataaagtgcttcttttttcttttataatactgtttagcatagtcttgaataccagaaaataccagacaaaatatgctagcttgaccggatgattattttaaaaaaaagtagaatttaaccaaaagctttttttttaattcaaaaattcaaaattacggaaaaatcatatgaagtacttctttttctgttataaaactgtttagcattgccataattaccagaaaataccaaaaaaaagtatgctagcttgaccggaagattattttgaaaaatgcagaaaatgcaccaaaagcttttttttttaattcaaaaattcaaaattacggaaaaatcatatgaagtacttctttttttttttataaaactgtttagcagtgccaaaattaccaaaaaataccaaaaatagtatgctagcttgaccggaagattattttaaaaaatgcagaaaatgcatcaaaagctgtatttttcaaaaattcaaaagtacggaaaaatcatatggagtgcttcttttttcttttataatactgttcagcatagtcaaatataccagaaaataccaaaaaataatgctatcttgaccggaagattattttaaaaaatgcagaaaatgcatcaaaagctgtatttttcaaaaattcaaaagtacggaaaaatcatatggagtgcttcttttttcttttataatactgttcagcatagtcaaatataccagaaaataccaaaaaataatgctatcttgaccggaagattattttaaaaaatgcagaaaatgcaccaaaagctgtttttttcaaaaattcaaaaattcaaaattacggaaaaatcatatgaagtacttctttttctgttataaaactgttaagcagtgccaaaattaccaaaaaatattaaaaatagtatgctatcttgaccggaagattatttttaaaaatgcagaaaatgcaccaaaagctgtttttttcaaaaattcaaaaattcaaaattacggaaaaatcatatgaagtacttctttttctgttataaaactgttaagcagtgccaaaattaccaaaaaatattaaaaatagtatgctatcttgaccggaagattatttttaaaaatgcagaaaatgcaccaaaagctgtttttttcaaaaattcaaaaattcaaaattacggaaaaatcatatgaagtacttctttttctgttataaaactgttaagcagtgccaaaattaccaaaaaatattaaaaatagtatgctatcttgaccggaagattatttttaaaaatgcagaaaatgcaccaaaagctgtttttttcaaaaattcaaaaattcaaaattacggaaaaatcatatgaagtacttctttttctgttataaaactgtttagcagtgccaaaattaccagaaaataccaaaaaaagtatgctagaatgtccggaagattattttaaaaaatgcagaaaatgcaccaaaagctgtatatttcaaaaattcaaaagtacctcaaaaccatatggagtgtctcttttttcttttataatactgtttaacattgtcagaattaccagaaagtaccagaaaaaagtatgctagaatgtccggaagattattttaaaaaattcagaaaatgcaccaaaagctgtatttttcaaaaattcaaaaattcaaaagtacggcaaaatcatatggaatgcttcttttttcttttttaaaactgctaatcatagtcatatttatcagaaaataccaaaaaaagtatgctatcttgaccggaagattatttttaaaaatgcagaaaatacaccaaaagctgtttttttcaaaaattcaaaagtaccggaaaatgcaaatgtaaattgtttgttagataaattccgttaagagttaaagtcaaccggtacacgtactaaagaagagaagcaaagaaactatgaaattttaaatatatgtagataggtacaaaatttttgcacataagttgctcaaaacattataatagtttggatactattttcatattaaacttgttcacaaatttaaattaaaagcaacaagtacttttacattcattatgctccaaagtgatttagtattttgactttttaaatgacaagttacatatgtattctacaaattagaaaaaaagaagaaaagttgaaaccaccttttgcaagtaatgactcaaattgctcgaaaattataaaaaactgatgcactaattgagaaaacaaaacgtgattcttggagccggagcctccaacataacattccactaatcagtgtatgactcaaattccatctcctgggatattagttattttgaaatcaaatcctttgaaaatcaaaagcacatgccttgatttggagaaattcggggaaaatttgttaagtttttgaaaaataacacaaataagtataatttctgcataacatgagtgagcggcgattcggcaaattggcaatttgccggtttgccgatttgccggaaatttttgagagggctttgtttataagacggaagcacacacacctttttcaaaaaaacaaattttttcccgttttctttagatatttttataaaatttgcttagataggatgcatacaattttgccgattaaaattgaaatttggaattttccaaaaaaaaaaatagtgcaaaaccacaacttgccgacaatttttggcaattgcaatttttccggcactttgccgatttgccattttgccacaaattttcaattccggcaatttgccgatttgccgattcaccggaacttttcaattccggtactttgccgatttgccattttgccacaaattttcaattccggcaatttgccgatttgccgattcaccggaacttttcaattccggcactttgccgatttgccattttgccacaaattttcaattccggcaatttgccggtttgccgatttgccggaaattttcaattccggcaattttccaatttgacgatttgccggtaattttcaattccggaaaaatttgaaaatttaatttattttttattttacggtgcatcaaaactactgaattctcagcacactcgtttgatttttcgtaaatttttttttgccaacttgtggttaaagcggcaagttcggtaaagttgccgaacacctctaaatcacaccgtttccagtccaaattacccaaaattaacgatctttttcgattttctagcatacatttattgagagaacattaacaaaaaaaaacaaagtaattaaccaaattgaaacggcgcaattttggtgtccaccggaagtgggtgcttgtccaggtacatgagcattccaatggcgagagcaactataacgaagaccagcacgacgtatccagcaatgtagagcttcgagcagttaaccggactcctagaggtggagttttgaatcgggccaatgcgtggcatttttggaattttaaattatttatctaatttatatgaatttatctgagtatgaaattaataaagtttaaaattaataaagcaaaccgaaaacaatgagaaatgacaatttcatttctcctaatctatctagtttagctccgcccactttttctagttgtgtgctttcccgcatgataagaattaaaaattaattgtgtatgggatagacacaagagcgtttgatctacacaattataagatcagagagagtgggggaattgttaaaaaccacttctttggtcccaaaatgacctaacatcataataaaacttttcaaaaattgtttgaaatttttttaatttactgtcaaaaagtgacaattactcagttttttccactaataattttggaacaattttcgaagtcgaccaaaaaaaaaacacatttttctcctgcattttttatactttaattttgttttaattatttgtattaaaacattgaagtggccggaataatctcataattttcaaaattttggcaattcgcggaaacattgaccggaaattatgaaaaatctaaaattttttggaatgttttattatgatatccggtcattttggatcattaaagtacatttagacaaggggtgtgcggcaaatttgccaaatttgccgcacacatcaaaaatttgagaatacaattttgatcaaaactattgatttttttccccaaaaatttagtaaaatggcataaaattgagatatttcgatgcttaagcagacaccaatttttaattcagaattcagtagttttggtggtccaaaaaacatttaaaagtatcacatttttcggagtttgttaagcacggcaaagagatttgccgcacacccctgatttagacaaaatccccccagtggtactactttgctttcaaattacgggggccccatagcagttgggaagtatctatagaaatcccagaactgttgcataattttgtcacgaagtatgatcgctagacatccggtggtcaattaaacctattttccacatctaaatttgatattctttccaagtatacacaatctcccaggagactgacacatttggttgtgggctcagtgcctggcactggctgtcattttaagcatcaagtatcagctactcatgtcttgttagaccttctgacttctagaatttatgtgcaaaatcctgattttttttataagttagatgcacagtccgaacattttttcaaaaagaaagtaccgtaatagtatgtcttttttttaaagtgttctgtgctagggccaaactttttccgcatacctgacccaattcgtttaataattaaaaaaaaaaaaaaaaacttttctttcagatcagtattatcaactcgagtaagcagacaatttccaaaaaatttaccaatattcattcagtaagtatcccgattttattgacttccttgttaacataataatatatctatttcgttttcagcactacaacgatggccctccctaagtttgctccgcgagctgtgcaccctattcaagtgaaccaggcttcaactcaggaatcacaagatcacaactctaccaacaattgcagtaacaggatgaaggttctctgctgtatcgctgtcttcataattcttgttatcatcattgttctcatttttgttttcaggaagttggaattgaaataaagaacaaattgaatataagttgggacttaacatttttcttcgagttgtaaaaatgaattgaaaattaaactgtcaatgtggaaagtgcccaaaaaatgtagcccatatttcaatatttactaaagcataataaacagaaaatttcgtgtataacttttagaaaataaaaatgacatttagttttgaaaatttacgaaaaaaaaatcggcaaaccggcaaactgacggttagccgatttgccggaaattttcaattccggcaatttcccgatttgccgattcgccagaagttttaattttcgaaatagatgtaagaacattcatagaatgcgaacaattttgccgatttaaattgaaattctgaaatttccaaaaaatgtgcaaaattataatttgccgaagattttgggcaattgccgtttttccggcaaactcggaaaatggataatttggccgatttttcaattccggaaattcgccgatttgccggaaattttcaattccggcaatttgccgatttaccagaaattttcaatttcggcaatttgacagatttttaaattccggcaatatgtcgatttgccggaaatttttaattccgacaatttgccgatttaccagaaattttttatttcggaaattcgccaattttccagatttttaaattccggcaatatgacgatttgccggaaatttttaattccggcaatttgccaatttgccagattttgaaattccggcaatttgccaatttgccagattttgaaattccggcaatttgccaatttgccagattttgaaattccggcaatttgccaggttgccgaaaattttcaattccggcaatttcccgaattgccgattcgccagaagttttaattttcaaagtagatgtaagaacattcataggatgcgaacaattttgccgatttaaattgaaattctgaaatttccaaaaaatgtgcaaaattataatttgccgaagattttggccaattgccgtttttccggcaaactcggcaaatgggtaatttggccgatttttcaattccggaaattcgccgatttgccggaaattttcaattccggcaatttgccgatttaccagaaattttcaatttcggcaatttgacagatttttaaattccggcaatatgtcgatttgccggaaatttttaattccgacaatttgccgatttgccggaaattttcaattccggcacattttcgatttgttgatttgccagaaacttttaattccgccaattcgctgatttgccgaaaatttttaattccggcaattttccgatttattgatttgccagaaatttcaattgaggcacacccctgatctatatatatatatatatatatatatatatatatataatgtttaacagataccaaaaccttttagcagcgaaaatgattcctgaaccctttatatcataacatccgttttcgagaataaattcgaaaataattttttctttctaggaaaactcacgcaattatcaccacccaagggactttttatcagcaatttgttcgacatatcaatgttattttaattaatttttttttcgttttcttcacactttttttttcgtaacattatgcaatataattttttatcgttaagagcttgttaaagcttgagttatctcaaaaactgcaagagttagcaaaaagttgccaactgacattgtgtttcttataaaattaaaaaaaaaaaattttttttaaacttttttgtatctccactctccgcagagatacaccttgttaaaccgcagacagcgcgcgtactctcgttgtctgcgtcgctccccataactttgaagcgctgtatctttgcaaccgttagagctattaaaaacattgtaagtacaaaaatgatcagcataaaattttctatcgaatgagctaacttttgatccagagttcttcaaattttcccacattatctctcgaattccagaatgccaaccccaaccgaatcatcctcaactcttcgcaagaccctctggtggttcttcatcttctatgtcctgctcaagatcgtcgtcatcgtcttcatcatcggttactactcgaaatatggtgtcgccgacaaaaactcgaccatcatcgtcttcggcctcggtggactccacggaattcatggatgaataaaaaataattccagtttttttttgctttttctattcgaaattgcagagtttgttaataaaaattttttgtggaattcgtttttttttatactttcgagttccggctttaaagttcaggtgctttgtagacgcagacgacgagagcgcgcgagccgtctgcgtctccctctctcatcgctctctcgaagtgtgtaagttttaaacaggggtatctctgcggagaggggagattcaaaaaagttgttcattatcaaaatgtgcaaaactttataagcaatattttgatagttaacaactttttgatagtttttttagtttttgagatatttgagtttttagaaaacttttcaaactttagaattttcgaatttctccagtatcaggagtttactagaaaataaaaagcaagtaaattttgaaagtaacaatttttcaatgtttctaatgtctgcaaacaaataaaaacactatcaaacaattaagtggagacgcagacgacgagagcggccgtctgccgtctgcgtttccctctctcctcgctctttctaattgtgcaagttttaaacaggtgtatctctgcggagaggggagatacaaaaaagttgccaactaacaaaatgcgcaaaattttatgagcaatattttgatagtcaataactttttgatagagtttttagtttttcagatatctaaattttcagaaaacgcaaacttttaaagtttaaaaagttaaaattttaaaaatttccctaaatttcaggcgtttactagaacctcaaaaataagtcaattttgaaagtagcaattgttgaatgtctctaacatctgcaaacagataaaaatattattaaacaattaggaggaggcgcagacgacgagagcacgcgtgccgtctgcgtctcccctctcctcgctctttctaattgtgcaagttttaaacgggtgtatctctgcggagaggggagatacaaaaaagttgccaattaacaaaatgtgcaaaattttatgagcaatgttttgatagtcaacgattttttatagctatcttagtttttgagaaatttgagattttattttaaaaataaaatttaaaaaaaagttaatgcaaaaagcaaattaaaaattttcgaatattcaaaaattagccagcttcgaaatttttgtcaaaagcgggtatgggccgtgtccacacttcccagtgacgtcatcactcccaatcgaaaaaaccatgactccgcccacttggagcttccgagcaaacgccatttttgcaaggatgctctgctggttttcataggacacccaaattccatcgtcacctggaaaatcggtaaatttttgagaaaagcccgaggaaacgtaccatagagatatggagcctgtgcgtgatgattccatactgttgtgtagtacccggattgagcaaagatgcacacctagaaaatttttaaaaattattcaaattttcggctgtaattctgaaatttccactcacatctggcagattagtaatttcaggccgtgctctgattgcagggctgtacggtttatgcagataatgtgttagaagctgaaatgccctggcatacgtcgggattccgaaaaatgaaatattcctcgggaggcccaagtcgtaccaggttttcattgaagcttcctgaaaaaatgtgaatttctggctttacgattgaagctgaaaatttgaagcgaaaattttccgactcatcttggtgagacctttcatttgactccttatatggctaggctctgatttttttaaaattttaatgagttgtgcgcctttaaaccaaagttttcgtggcgggacccaacctagttatttggggtcggggtgtgcggcaaatgccgtttggcaaatttttttcgacaaatttggcaaatcggcaaattgtcggtttgccgatttgccggaaattttcaatttcgaccaattcccgatttttcaattaccggaagttttcaatgtcgacaaattcccgatttgccaatttgccggaagttttcaatgtcgaccaattcccgatttgccgaaaaatttttattccggcaagttgccgatttgccaatttgccggaagtttcactttcgtttttctggcaaattggacaaatcaccaatttgcaggaaatttaaattccggcaatttgcagatttgccggaaattttcattttcgacaatttgcagatttaccggaagttttcctattcggaaaattgctggtttgccgatttgccggaaattttcaatttcggcaaatcgccaatttgccggaaaattcaattccggcaatttgcccatttgttggatatttcaattccggcaatctgccgatttgccgaaaattttaaattccggcaatttgccaatttgccgatttgtcgggaatttcaattccgggaaacccaatatttacaaaattttgatatttctccaaaatttaactgagtagcgactctcataaatccggcaaaaatcgatatttttcgaaatttcaaacattaatcgatagctcaaaagtttactaattttcgaaaaaaaaaacccaccgcattcatctccccgagcactgaaatttctgctctcatcggatgcagcggagcattaaaccccacaaatgggttactgtatctgttgaacacgtggaaatcgtaattcataatttggaccatatcagcgtacctggaattggaaactgaatttttctttgcaaaaaaaaattcaaaaaaaaaactcgaaaaaaaaaatctgtttttctgaaattttatacttttttaaataatttttttaaagttaaaaagaaaatcaaacttacattttcagagcatccacgtcataagcttttctggaaatagttggcggcccggatacagccacagaaagcttgagatcagccggttttaggtgggattttagaatctgaatattggataaatttttgaaaaaataattattcttaaaaaaatttcagatttttaatttattgtcttgcctattgccagctctttggactatgccaatttttaaatatttaggtcccgccgcgaattcttggggttactgtagttagcgttaattatgtgtttctcgtacataatatggcattttcagttttcgagttacaattcagtaaaattcaaaaaactactaatattgtaaaattttgaaaaaaaaaattgggaatttttttaaaaatttcagaaacttggaccttttttaattctcaagattttcaaccaaatttttgtaccaaagtcgtatagaattactttggttttgataaaattaagtaccacataagttttcgtggcgggaccccaaaagttggaaaatagcttttcaaacaattaaaaaaaaaaaaaaaatttcaaaactacagtaccccgaagtttttcgtggcgagacctatttgtttaaaagtaagatattttttaaatgtgtttttattgatttcaaatctaaaaaaatacacaaactattacaacacattattctaatttttacataaaatatatcctaagccggagcctaaacataagcttgtgactaagcctaatcctaagcctcagaaatttacccgtaaaaatgttgcgaaatgagctttatccgacttctgtgcatccctactccacactggaaattcccagtctatatctactccattcagtcggtatttttgtagaacttgggttactgtactcgaaaaattgtgcatgagtgtggtgttggaagtctgaaaaaattaggaggaatttttagaatttttgaaaaaaaaaacagtgttctaagcttaagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgcgcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcatgagcctgagcctgagcctgagcctgagcctgagtctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcatgagcctgagcctgagcctgagcctgagcctgagtctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcctgagcatgagcctgagcatgagcctgagcatgagcctgagcatgagcccttttttttcgagcattttattttttccaatttttcccaaaacccaccaaaaacgaaaaagacggattagaagacgtaattgacacaaaaagttcaattttcccatcaaagagctctgaaaaatgctccaaatcctgctcaaatccctgcaaccgcccatcttcagaaacatgtgccgaattgattaatataatatgggtgcacagatttttcggcacttttgaaatatccggttgattgagaatataataacatgccactggaaccgtgtgtacagggagtattagcaataatagagaaaaaatcaataaaaacatgtttttttcaggagagtttaggaaagggaaaaggggttaaaatgaccactccttatcagttttcttatcacagtgacctttagtagtgaccataaaaatagtcaatattcctgaaatattgattgataaaaaagcaaaaagaatttttatgggtcctaccacgaaaaatcaggttttaaatgaaaggtcttggcaggctaattaaaatttttttttttaaactttatattcagtgtttcacgtggcgtcagagagccttatttcgtcttgatctacgtagatctacaaaaaaaatgcgggaagaaaagacgcagagattttaaccgatttcacatggttaagaagaaaaattcccgcattttttgtagatcaaatcgtaataggacagcctggcaccacgtggagtattttttgtaaaagttaaaaaaaaaggttagcttgattattttaaacttacttatatataaaaaataaattggatgtccatagtttgtagtctatacagtctttgtagtctgtgacgtcattaaaaattgtgggaggggtctgaaatgctttgtggtgagaccctttaaaaacatatatatatatataaacattttggcgggaaattcaagttttctgagaaaaacagcttggcgggaaatttaaatttttttagaatttttttaaaacagaagttcatattttactgtttctttaaaaaaatttaaactttccaccaaaatatatttctcagaaaatttgaactcccgccaaaatttgtttcaaaatttatgaaaaaagacatattagcaggtttattggatttttacatagaaacaacggagaaaattcaaaaaataaacaagtttagcatcctctcttcttgcaagccaacatggttccacaattcgggcaaaaatgcttaacatcctttgaaccggcacagcaaagacagtaaagaattggccagcagaaaacgaaaactccaatgaataaaataatccaccagcaggttccaattgagtgaacagttcgagttgttacagatgtcttcaaaaaatattggaatttgatggaaaagttaaacaattgttgggggaagaatgtttccaaacctacagaaactttgcttttttttgaccagtgggaatttttgggtcccgccacgaaaactcgttgggttctatagatcaacaaattgattaagtagtagaaattgaaatttccaacatttcccacaaaaaaaaaccagcaaaaaatcttaaaaactaaaaagttagaaccttttgaaaattcgaaattttagaaaaaaattttttttcaaaattttcaaagctaaattttagagattaaaatatgataatagatcgccaaaagctcactgaaattcaatttttttttgaatttttatttttgggtcccgccacgaaaactcactgtacatatatctcttaaattgaaaaagttatttaattttttcaatttaagaggtataaagtgaaaaaattaaagtttttggaattttttcaaaattttctaaaaccaaattccaaaaattaaaattgcgataacaggttaaattttcttattttataatttttcaaattgaaatgatctcgagcttataatttaaccccatgctcccacaaatattagttataaattttcgggtccctccgcgaaaactcatgagttactgtagtttgaaactttcattaaaatgcattaaaatttttaggaagagggagtagttgccttcattttaagtaaaaattcagctgaaaatcttggaaactaagaaagttatggaatttcaaaaaattggaaaattaattcaaaaaacttttttttttgaaaaaaccgtttgttttttcaaattaacaatttttgagtttctgactccaaatttataattataatcataaaattatgtagtatttagaaacactattttaaaaatattgtaatctgcaaacctatagtacccgggagttttcgtggcgggacccaaaaattttaaagtagagctcaaggctggattaaaacgcaatctaggacaaaatttagtggagattccgaatttcctagttaaactttatgtaaatcgcaattctacggtgaaatttaattttcgtggtgagacccaacatctcaataaaacaaccaacctgacatctcggacagtactccaaatatggtttatcctgatccacgtgtttcacagaagcactaatgattacagtagcctgagtaggctgctggactacatgagcctgcacaacagtcggctggccgtaagcctgttgttggggataagccgcataaaccggctgcatttccacggcaactggcgcgccgcccactaccgtatacgggggcggagctgaatccatttggggtcccgtagcgactgggtacacttgcgctgtttctgggttacccatttttttgatctgaaaagaaatttataatgtttttttttaaataaaagtcttgaaaaaatggaaaaaaaaagttcacaaaaaaatgaatttctaaaaatttcgaaaatttttttaattttcaatttctaaaagagaagttataaatactgtaaatttaacattttgaataaatcaagttcattttaacttcaaaatgagcccgcacaagcctttgctccgccaattttacataaaattccaaattttatgggtctcgccacgtaactcctagggtactgtaggttttgtagtttatatatatatatatatatattttttaattttatttttaagaactatataacttcataaatataaatttagggttgaattttttaaatgttaaaatttgttaattaaaaaaaattgtttttttttgcagaaaaaaaatttctgcattaattttccaattttttgaaattccatagctttttcagttttcaagatttttagctgaattttaacttaaaataatgtcaattacttcatctttctagaaaaattgtcaaattttgataaaagtttcaaaatacagtagcccatgagttttcgcggagggacccgaaaatttataacttctgtttgtaagcacatggggtcaaatttttagaattaatttaattcaaaatagtttaaaataaaatagtttagctattaatttctgaaatttagtattagaaaaattcgaaaaaaaaattttgaatatttttaaaaaatttttaaatttcgtaactctttcaatttaagagatatttagctggttttgactccaaatgtagaaaaatttgtttctgtacggtaattttatagtaaataaaataggttaacaaactacagtaccccaagaggtttcgtagcgggacccaaaatccgaattttttaaaattgaatttcagtgggtttttggagaattaaaattaaaaagaaaacaaaagtaatatattatctagtatcatattttaatatctaaaatttcgttaaaaaatattttgaaagaaatattttttttaatttttaagattttttgatcatttttttgcaaaatgttaggaattttattttctactatttgatcaagttgtttatgtatgaaactacacgatttttcgtggcgggacccgaaaattcccaatgggctcaaagctcaaaagaaccttgaaaaatcaaaaaaagaaggcaaaaaacggttagaaaatcaaaatttcaaatttcaaaagcgaaaaaattaggtgaaatgccttcaaaaactagataacacgtagaaaaatgaaaaaatgtggaaagcaggcaaacatcgattttcgtttcaacccatacttatcagcttatcatattgtcatcactccccttccaaaaagtgggcaaacagtgattcattaaatgaaaaattgattaaaacattagaaaattgtcatttgacatctttaataaatgaattttcagaaaatttgcggaattttgatataaatcatggaaaatcggagaaaatttcgaaacttttggaatatgagtcattatgtaaagaaatagtacgaatatttgcaggcaaactttttatggggaattttttgaaagctaattttttaaaaagaaatttgaattcccgccaaaaatattcacagaattttgaattcccgccgaaactaaaaaaaaaaaattaacacccgccaaattttttaacagtaattcgaatcaccgccaaaaatattcacagaattttgaattcccgccaaaaatattcacagaattttgaattcccgccaaaatttttaaaaagaaatttgaattcccgccaaaaatattcacagaattttgaattcccgccgaaatttaaaaaaattgaattcccgccaaatctttcctcagaaatttgaattaccgccgaaatttttctcagaatatttatattcccgtcaaaattttttacagaaatttggattaccgccatatttttctctcagaaatttgaattcccgccaaaaaaaatctcataatatttggaattcttcagaattagcgaatttgtgaaatttatctaaaaactttttaaaaagtaggctctgaaaagtctcgaatattgtttgttacatttcgaattaaaaatcttaaaagttttgaccacatttttgagtataaaaacccaaaattgttaaaactgtaccaaattacagattcatgcctaaactatatcttacacacattaatttttaccgggaaaaaaaatatttatttcagacttttccagacagaattttctaaatttttaggaaaccaactatattaaataagcaaaaaaataatttttaacttttctgaaaagtcaataatttcgacgtctggacttcatatcgttgacgcaggtcatgcaggttctcgggcggtttgaatgatcaaatggacatgtggatttgttacaagtgtcctcataacggcacatattatgggaatatatgcatttggctccaggacattgggggaagtttctggaaacttttttttggtgaaaaccgttgttttgagcttctgaaatgtgctcaaaattcagaaaaaattgctcacttgcacttgaccggcgggccatgaggacaggatccaactccacggagagcaccaccaactgagacattttgactggaattacggcttccatggcgatacatccgcttttttactgtctcctggaaaattagattttgaaaaaggttccaacggctcagctggttacaggttttgcttcgaaagaattggtcaagggttcgagtcccaccagtggtaattgttttttttttaaattttttttatttgaaaaattgttctaaaatcccaatttgagccataactcgaaaatcgaaaatctcaggaagcaaaataaactaaattttttggattttgctcaaaaaatacgttttaaaacccaaaaattcttcaaaccttaaaaatatgatccctgaactcgtcccaatcatcatctgacattaattcagagcttttaccaaatggctcctggcaatacgcgcagattacaggctttgggccgtgtcggtgggcggtatgggccgccaggcgctcaattgattcggatttctgaaaaaagttagttttttccccaaaaatcgatattcctagaaaaatcaatattcctccaaaaatcaataatttttccaaaaatcaataattttcaatatatctagaaaaatcaatatttctagaaaaaatctatgttcctccaaaaatcaataatttctaaaaaatcatagttttttccagaaattaatatttctagaaaaattattatttctccataaatcaataatttccaacaaatcgataatttccaaaaatcaataatttccaaaaatcattatttatccaataatcaatatttctagaaaaatcaatattcctccagaaattaatgttttttccgaaaattttccataaatcaatatattccaaaaatcatagtttttttccagaaattaatatttctagaaaaatcattatttcttcataaatcaataatttccaaaaatcaataatttctaaatatcgatactttttccaaaaatcaatacacctaaaatcgatatttttcagaaaatcattcttttttcaaaaattcaatatttctagaaaagtcaatattcttccaaaaatcaatatttttcaaaaaccattaatttccataaaatcgataatttctgaaaatcaatattttaaaaaaataaatatttctagaaaaattaatatttctagaaaaattaatatttctagaaaaattaatatttctagaaaaattaatatttctagaaaaattaatatttctagaaaaattaatatttctagaaaaatctataatttttcaaaaaccattaatttccataaaatcgatatcttcccaaaatcaatattatttttaaaaaatcaatatttctagtccatttaccttgtcacaatgatagcaattaaattgatcttcatgatttttaatctcgtgctccgcgagctcccgaatcgagtcgaaagctttccggcactgacggcagttgaattggggagccttcggtgtccgagaacggtcacggactggggagctggaattttcgacaattttggattaaaacgggagaaaattgggctaaacttgtttgcattttttgaatttttcgaaaaataggaaggacatagatagatcgatgaaaatagtgatacagtagtgataaaaatttttttttgttacaataaattgatatcaacacaacaaatcatatattgagccatagcctggctcataatgctcggagagcaatataacctagattttcggatttagcaaaaaattttaaataaaaaattgttccaatggctcagctggttacagccttgacttcgaaaataggtcaagggttcgagtcccactagtggtaacaacttttttttgtttaatttggcataacatttggtttttttctgaaaaaattgtcctaaaattcaattttgagccatagctgggctcgaaatgctcaaaatttaaaattccaagccaagtaactctataaaaataataaatgagcaatttgccatgtaatccatgtttccaaaaaaacacaacacaatagataaataagatacttcttcccatatatatagatagtttcaaaatattttccaactacaaaaatcaatatactcaatctcctcaaacgtcccacggcttgttgagcggctgcggtttcttgcaattggactgcaaaagcgtcaattttaatttttttttttgattttaaaagtgactaacataccttctagacctttccctgttttgttttgacctgaaatttagaattcaaaaaaaaaagaagattgctagaaaacacccgtacttgatatattttcaagttttatagtgaaaaattcgaattctccgccatgaaaaacctaaatacactgccggggactcgaacccgcgacctttttcacagaggtcaaacctcttacccactgcgccacggcgcccattacgcgcagcagcagcgcctggctcggcgtaccggtggcgcagtcggtaacagggctggttttggtgaaaaggtcaggggttcgagcccccgctggggtattcaggtttttcatagcggagaattcaaatttttcactttaaaattcaagatatcaactctaaaagcacattttcagacaaatcttgcttaccttttcttatagtccttcttagttctgcgattatcctcgctgctgctcattttggcaccttggcagaaataagagaaaaaaggggaattcgtaaagcaacaaagctgacaacaaaaataaaaagaagttggagcttttccttcggggagaggaaggcgaccagttaccacggaaacctcgccgcaccccctaattgataagagtttttctgatttccacctgctggtcgggctctcggcgtgcccagtgaggtgtgaactttttgtgggaaaaaaggaaaaaaaattagggaaggagattttcatgtatttgaaaatcaaaaaacaaaaatcatagtaaaaatttaaaaatcgataatatatatataatatacgaaaataatcaaaaaattcaaaaaaaaatcgataactttacgaaggagtcggcgaagattcctcgaatggttcgacgtcggattttcggcgacaaatgaaatattcgggtacaataatcgataattcgcggcgacgtagagcctgaaaattagatttttttgaagaaaaaattatcgatttttttttggaatttttttttgagaaatattgatttaaaaaaaaaattttagaaataaaaacttacatatcccgccgagcatttcgtgcaattgagccagccaacaaaaaattggaatatttgtgaaattcgggaccatacccgttgaaaaaagcaaaaaaattatttttgaaaaaaatctatttttttcaatttttttataaaaatttaaaaaattgttaaatattgaaaaatcacaataactacaaaaatatcattttaaacatgcattctagcatttggagatgctgaaaatcgtcgtctaacacatttcggcgacattgaggccagcgttttcagaaagttacaggtcgatgacgtcatcggctctgccggtgtggcagttatgtaggccaagctgtgacgggtggaagccgtgcgatgttgtctgccagaaaatgcagaaattttcacctgagtaaggtcctgtttcgtttcgacgcttaagcccgagcttaggcccgagtcatcgccggatatcgagtgctggccgtttattgcctgaaatttattgatttttcaatatgaaaactaagtcagcagtagtctgaaaatttatccatcgactgatttttagatcgtttgaaaatattgatttttgactgatttatgtagaaatttgtaaaaatctaaattttgaaaaatacttcgagtcgctactcagccaattttcgagatttcacaattatttatgagaatatagatttgtcagactgagagcttcaaattaagtataaacacgactaggttccgtgcaaaaacaatttaggctccgtccacttgttgaaaaatattgtgaaacttcagtttttcgagaaaatactgttgttttcatttagatttagtgaaattcagtttagccactttgagagcttttatttaagtataaacacgactaggttccgatcgaaaaacgatttaggctccgcccacttcttggaaaaaattgcgaaatttgggagattatgatttttcaaacaatttttcattacatttcttcaatattatcattaaatttaactttgtcacgcggagaactttaatattaagctccgcccattatttttggctccgcccacttaaacttttttttttttgaaaaatcgattttttttcttcattttcaatcgattttcctcctttttttttgccagattttcactattttttctaattttccttgagcaaacctgtttattggattttctaatagctcccgactcggaatatccgaccttcatgcgatcaatgatgaagcggagcacctcccgccacagaataatggccgaatcgatttcggcaaacgacatttcatttcgcttgtggaacctgtgaaatctgggattttcatgggtaaaatttgtagaaaatcggtgatttatcgattttttggcggtaaaatcgataattaattgatttttttttgcacagattttgaaaaattgataaaactcacttattatgtgatttcattgctttccgaaaatgaaacaacacacattccttgaaaaccgaccaataatgagcgctgaaattaagaatcaaaaaatcaataaattattgattttttaaacccctccccccccggcggcctacctaaaacccagctgttcttcatgttttgcgtggatttttcccaaatttagaaaaaccgcgtcgagttgagcaggatcttccaaatgtgtcattgttgactcgataacctgcaaaaaattgataaaatcaatgaaattaaggtaaaaattgaaaattttattaaatttagttgtttttgagtcgctactcacccattttagtagagtggatattgattttaggatttttgaaatctcccggacaggagctttgatttaagtataaacacgactaggtttcgtaaaaaaaccatttaggctccgcccacttcttggaaatattgcgaaatttgggagattatgatttttcaaacaattttccgtacttttcgaatattttttaaaaatgatactaagtttaatttaccccactgagaactttaatataactatacatttttctttagctatttaggccccgcccactttttgggggcggagccatggaatttcgtgtcatttttttaaaacaagacatgtggggggtcattttaaaggtctcaatgagctgaactcatttttttatgtaaaaaaatgtttaaacccacctgcaaaaaccgcactgcgtgaaaaatgaactcgttgctctttttgtcctctctgaaatttttggggtggttattttgagtatttttctggaaaatcgatacttatagtctttcatcatgaaggagaacatgagttttgcatcgggagcttgttcgaatatcatttggaatatatttacagccacttgttgcatgtctctgaaaaaaaaaatttttggaaattttttgaaaaatctgacattttcgaaaattcataactttttcatgtttcgagattttttgctaatttttgttttattaatctctattagtacctattaactatttaaaattagttttgtaacagtcacccaaaaaactacagtaacccaggagttttcgtggcggggctcaaaaattcataactttttcaatttttgaaatttttgctcatattttgcttttaagtttacaataaatgtttgttatacgcaacatcaaaaaaattaacaaaaattcaaacaaatctacagtaacccaagactttcgtggcgggacccattttttctgaaaatcagcggaaccaagccatatttggggtcaaatgaaagctctcaatgagctgaactcaaattatttaataaaatccactgaagtatttaaaataatcttaaaatttggaaaaaaaactcacttggacacaattccccaggacttgttcagaatttccctgtctatcggtgtcaaatgggataatgactccattttcatggaaaatctgaaatttttcttatgtttttgataaaaaagcgtaaaatacaaaaaaaaaattagaaaaagtcaagaaaaaattttttaaataaaaaaaaaattttcagaatttttttcagaaaaaaaaaagaagccgaacaactcgaaaaagtgctcgaaataatataaattctataatttatgtaaataatattacttggaagccgaaaatgcatagtaattgagctcatgaagagagaaggagaaggacaagagcaaaaaaaaagtttctgaaaattctggagtcccgcagcgaaaacacgtggggtactgtagttttgaggtttaatttttcaaaagtgtacccaattttaaacaaatattttatttaggctccacataaaaaatcagctcgaaatatgtaaagttgaacaagttacggggttttaaactagacactctaaatttttttgaaaattctggagtcttgcctcaaaaactcgtggaggtagctttgtagctttgtggccaaaaaatttgaaagtaaatatttttactaaataatattttattcataatttgaattcataattagctgcatatattcaaaattaaagaagttatgagtttttgaaattaaacttttaaatttaaaaaaaaaaaattgcaaaaattgtttttttccaaactttcaaaattaaaaaaaaaattcctttactggatttcagaaatttaaactatatatatatatatatattttttttttaatgtttcaaattcaaaaaattccaccctgactatgaattcaacaaccaaaagcataataattgggggctccgcgagccgggctcattttcagatattttcaatcatttttttgacagaaaatgaaaaattgcatccacttttttcttggcaagcaacaacaaaacgaaataattttgagaaaaaaataaatggaaggaatttttttttcagccggagctctgagctcgcctgtcaataaataatgaattggagagtaggtggaggttatttactggggggaagaaatttttttttgaagtaggttaggtttctaaacatgaactaatagtagggatggctggaaaaaaaataggacaaaaaaattttttcgaaaaaattttttttttctcagaaatttttttttcagcaatttttttttcatagtacctaaattttcatcataaagttctagtttttcagctatttttccaattttttgccttttccgccaaaagcttaagattactgggttactgtagcttcaaaagtacgcaaacactgcagtacaccagatcttacgacaaaatgcagaaaacacgggtttttcgtgaaataatgatagaatatgtgaaaaatggcttaaaattgaaaactaacacaaaaattcaagaaaatcacatttttcgaaaaaaaatttgaaaaagttttttttttgaattaaaaacaaatttccaaatttttctaaaaacggcctgtaaactgtaattaagtaataataaaattttcaaaaatacttttccactactttcgaacttaaagtaatgaaatttgagtacctattacgtagctccaaaaggacgaagctctgcggaggaggaagcaaaactaaaaaggaaaaagtttccccgaaacaaaaaagttccgtttaaaaaaaaggaacaaaactcatgtgtgaagcgtccgaaagctcaaaaaaaaagaaataaaaaataaaattgatttgatgtgaaaaatgagagaacattgtctgacaaaatggttccccagagggaatttttggagatcatactacaaagatatatgtttagaaatatgtgaattatgaataaagtgatggaaatacacaaaaactcgggaaaatgggaaaaaatgttaaaatagaaaaaattgtgaaaaaaaatttttgaaaaaaaatcaacaaaattttttttttcaatttttttaaattctaaaatttttttcactacttctaccttttcccccataaaaatctggcatttctgcaaatttgcgtaagattcggtgtagttgtggtgtttgcgtacttttggagctacagtaacccggaaactcataaaacatagctagacaagcggaaaatttacaaaacttattatacaattttaatttagaatcatttttcctagaaaacatagaaattcaaaaaaaagtgaaaattgaagttttttctcgatagaaatgttaaaaaatttcaattttcttttcaattttctgcaaaatttgataattattccaaaattttaaaaatatcctataataaacacaattttccagggtttcagctcaaatatagggtataccgggttactgtagcttgaaaagtacgcaaccaccgacagtacaccagatcttacgacaaaatgcagattttgctggaaacttgtgaaaaaagctaaaaaggctatttagaggtaaaataagtccttcttttttttcaagttttaatattaatttcaaaactaaaaaagtgcagtaaatttttaaaaaactagaaatttcgaaaaaaaaaaattttcattaaaaataatggaaaaccgaagcggtaattggcaattttctgtttctctggagcatttcagagctgtcgagacctcactcagcttcatgttgttgttgttcagtttggcagctggggactgaaaggaattagtgattgggtattagttgggaggggtagaaaataaggtttttaattggaaaattatcttgttgagattgctgctgactaattcacaacaagaaaaagtgtggaaaaatataacaatgtctgaaaaaaaaatagaaaacaattttttttttcaaaaaatttgcaaaaaatgtgcaaaaaatgtgcaaaaaatgtgcaaaaaatgtgcaaaaaatgtgcaaaaaatgtgcaaaaaatgtgcaaaaaatgtgcaaaaaatgggcaaaaaatgtgcaaaaaatgggcaaaaaatgtggaaaaaatgttaaaaaaagagcccatttttgaacaatatccaagaagtgggcgtggcctgaaacaagaagggggcggagctaagttgatataagtttagaaactttaattctaaatttttgttagaaacctgtgcccgcgtcaataaagtagaaaaaaaacagtttcaattccaggggcggagctcaaacagtgggcggggtttaaacctagaaaggggcggagcttaagaatacctaatttttccgaaaagaatgcgttaaaacatattcgaacaatctattaaccaatccaattaaaatttcattttgcccttcttactgaaaacaaaacgcccacttagtaggcggggccataaaccaataaaggggcggggcttatttaataacttattcaattcaaaatttttagttttctaaatgatctttggaaattttaaatttttaaataaattttcttgaaattttttttttcttctaaaaatagtttaacccaactatttcgcaatagtaggcaagaagtgggcggagcttaaaattattaatttttataaaaattattatgaaatctatttcaactacagctctaaatgtgtttaataaatgttcaggaatctcataatttggaaaacactaataaaaggaaatttcgcaacaacagccaagaagtgggcggagcctaacttcattttgtacggaatatagtcatgtggggtgtcatgacaaagctctaaacgtgataaattcgaatttttaggttttagggagaaatcttcacaattgaaggatttcccggtacctttctagaattttctaaaaaaatttttttttttgaaaaaattttttaggagtaggaaaagtttaaaatccaaaaaaatttatttcataaaacgcgaaaagtacaataagaaaaaagtgcccagcggaatgttctataaaatgtagagatatgcgtcattaggaattacgggaggacaaagaagcataagaaaggctgtggaaatttgattttcgggagaatgagaaacacgagaaaatggtggttcattgggtgcaaaatacaaaaatgcggaaaaaaaactgagggtttgtgaattttaagaaaaacaaattttttaaatttaaatttttcaaaaaaatctacgaaatttttttttttccaaaaatttttttttctcaaaaaatccaaaatccccaattcaatttttgcccttaacaatctccaaaagcgtctcaagacccaaaatcgatccatcatcccgtccatcatagaaactgtcgccttgaagacccccgaatgtggcgttcgcgaaatccaccactttgatgcgtaccagattatcgattgggagttgtgagtctgcaaaatatttgaaacttaattgaaatatactataaaaacctaaaaaaaaactaaacaaaaaactgaaaaaaaattagtaaatttcagtcaaaaatcgatatttttaattccaataagtgggcggagcctaaaataacaataacaactcatttttgacatcatttttgacgtttccagtagaaaaccgaaaaaaaaattctaaacaaatttaattttaaaaaaaatcaattatttcgcaatactttccaagaagtgggcggggctaaaacgggcggaacctaaccaaacaacctaataaagtataaaatacgtttaaaactaaaatttaagtgttttaatgtttggaatctagaatttgttcaaaaaccttccagaagaaaacaaacattctacaaaattgaccaagaagtgggcggagcctaaaattccagatgtgtcaaactcaaattcaaatctttttagatttgaaattttgatattttttcaacaaaaaatatagaaaaaaacaaattttttgtaaccagctaaccgaaaaaaatcaattatttcgcaatacttgccaagaagtgggcggagcctaaaacccaagacacttacagtttagtcgtggtttttgaaccctaattgtgctggtagaactaacgtgatcagttttagactattacttacaatttttaatttaaaaccttaataattcagatatttcgcaatacttgccaagaagtgggcggggcttaaaacttggaatttttcgaaccatgccatgattatacttaaatgaaagctgtaaatgagctaaattcgaaaattttgattaaaaattaaaaaaaaactaactgggactgggagctgctccaatttcattcagaaatttgaaaaaaaaacaattaaaaaaaaaattttaaatttttttctcaacttatgattaaatttaaaaaaaacattaagtttactcaccactaaaattagattcaatgacaatgagcaaagatgctccgaagagccgcaccccatcggctccacagagcacatctcgaattccgagcaaccttcgctcaacttcctccagaactgcttcaggcacgtcgaaaaattgtttgaccgccagaaatagatcagttttgtccatagatcgtcccatatatttgttaattgaaatttcggattttggagcaaaatttggagctgccgaattcggagcaaaatttggagcaaaattctgggaattttgctccaaaaatggaattttcatgccgcagagccggattcctagcgtcgctgacgtggtagcttgacattttgcggtcatacacgcaattttggatacggtagcctgatcgccgtgttgtcgtgtgccgagcttcaggtcaaggattcgaggggatttcatacggtaggtgaggtccgagaggactatgaaatttctggaaatttttttttggaatttcgagaattaaaaatagaaaattctgacaaaaaacaacaacaaaaaaatttccaaaaaaaattttttttttcgagtcgctactcagccaattcaatagatttttatcttatttttgcattttctcaaccaccacactgagacctttgatttaagtataatcatgactagggttccgtttattcttagttttagccccgcccacttcttgccagttattgcaaaatatctaaattgttagggttttagaatgaaaatttaggttaaatagtcggaaactaaacatttaagcgctgacaaagttagagttgttttctaagtaaacccacgaccacgtttttaagtatcttaagtttatatttaagctccgcccccttcttggccattattgcgaaatacttgaattttgggagattttgcctaattccacaagttaatacgatttattgctaaaattcactcaaataacacctttcatttgagtaaaattaaggtcaaaacccgcctacttgcctttaagctccgcccacttctaggcatatattgcgaaatatctttataattaggcttttaatgaaaatttgtaattaatagtctgaaatttcccattttagttctaccagcacaatgaaactttcattttaagtataataatgattaggttccattttatgtataagctccgcccactccttggcaagtattgcgaaataattgatttttgaagtaggtgaattctattaaattcctaattccacactatttttcacaaaaatcataagctaccataaagttaaattcctgaatcagaaatcagataaatttaaatatttcgaaataatgtacaataagtgggcggagccaaaaagcatattcaccggaaatgggtcatgttgggtgtcaaatgaaagctctcagtgagctgaactcgaaaacacacaattttgaacaaaaatctgaagtttggctgagtagcgactcaaaactcattttttttttggctaatttttctgaatttttttagaatactcactttgaaagttttcgcttattcaaaataggcgatccttcgatactttccggtattaccacattctccaactgatggtgtcggcaattcgagcagctatcgtctagtgtgctcacagagctgccttgaattgtgctacagcacagcggagcaattgatttcaagatttttggcattttctggtagaacaggatttcccgctcctcacaaggtttaagcaagtgtccatttggcagggaagtgaacggggtgtgaccgccgacctgaaaattgacatttttttacaaaaaaattttaataaaatttagaaaaaaaaaagaaagaagagattttgagtcgctactcaggcaatttggaatatttcgcaaaaaaatttttaattttcagattcagcacattgagacctttcatttaagtataatcatgactagggttccggtaaattttaaattttagccccgcccacttcttggtcaagctattgcgaaatattcgatttgtggcggtttttgagtttttgactttattattaaaaatattttggtgcattttaagagcataagagcattgggctctcaaaagaactctgaaaagtgtaaatttaagctccgcccacttcttggttgacatttgcacatatagtctaatttttttttaattgataagaaaatgcacttaagagttttgaagtaaaatttaaattaaaaattaaaaaaaaaacggatttgagtctccgcccctttttgggtctcgccacgaaaagtgtcaatatgggcggagcctaggcttgtggggtgttaagttgaagctggggagccaactatgtttttatacgtataataatatttgaaaatgtgaaaaaaaattttctgaaaaatttttttttttaattaaaaaaaaaaattttttccaaaaatgttttctttcaaaattgtttgatttttctattgcaaataaaattgcaaacctgatgatcaaacggctttagcacatcttgcacatttatagttgctccatccagggaagaagctcgctttatgttgaggaccatattttctgaaaattatcgattttttggggataatggggggggggggaaactgaggaatatgtagaaataagtgttgaaaaatattgaaaattaaataaaatagtgtttttggcttaaaattttttttttaagtttaaaaaaaaattttgaaaaaaattcgaaaataaaaattttttttttcctaatttttttaaaaactttttactaaaatccttaccaattccttacattctatacatttctaggtaaactaccaattcacgcggccaaatatttaccaatgatgtcttatctataagcattactagtacgtacacacacacaaattgggtaccagtcatgtgtttgcttagtcatcaaatggaaaaaaaagtgtgggaattttcaaaaagtaaaaatggagtttggtatttatcgatttttgtggaaaaaatagaaaaaaaattttttttgaaaattttccaaaaaaaaattttttagacttaattttttctcaaaacttcaaaaaattcaaaaaaatttccaatataaaatttgaattctctgttatttttcgcacataaagctaatttttatagagctctgactcaaaacgtcgtaaaattttttgcgtactctcgaagctacagtaacccgaaaatgttgaaaatctgagttaaaggctttaaaaaactaaatttgggtgaaaaattacagaaattctggttttcgaaaaaaagttgaagaaaaatccaaaaattcagtgaaactacattaaaaaatgaaaaaaaactgttttccagaaaaaaaaaattttttttcaaaaatttcaaaaaaaaaatcccaaaaaattgccaactttgatttttttgctattttcagcagataaaactattttccggaaattttaactcactttggctcaaatttccgtgcaacttggtgtttgcgtactttcaaagctacagtaaccctagaatttttcaaattcatgctagaaactcaaaatttggccaatcacgaaaaaaacccctaaaaagttcaaatttcctgctaaaaatcaataaaaattgagttttaaagactttccgcaaccttaaagttaaccgaacaagacaccaaaatgtgagttttgggaattcgaaacgtgcgaaattctacaaataaaaagatggtcgacatgtgtgtgtgtttgtaattcgagagaaaaatcaacaaaccaccaattcaatgtcccaatcaggtgagtgtgaaggacaatgggaatagtacaaaggaagtgtatttttttggacagaaaatttggaaattcggcgatatctcaaaaattttttgatttaaagggaaagtgtcaacttcaaaaatatttctcttgaaattttgaatattttattagttaaaatctttttgatagctcaattggctgcggagatagagggctttaaagtttgagagtagagatgaggagacgcagacagctagcgcgccctccctctctgcgtctcatcccttctttgctctctcacatctggaggcgcttaactttaaacgtgcatatctccgcggggaggagagatacaaaaaaggtgttaactaacaaaatatgcaaaaataggtggtaaatattctgttaattaaaaaaatttgttattttgaaaactaacgaagttgtaaaagttttagtgaaaatttcaattttcttctcaacttgtgtgtttttcgaaatgttttcaataaaaccctcgaaatactagaaaattttaatattataaaataggcaacaaacagacgcagacagccagcgcgactctccttttctgcgtctcctctcccctccgctctctcacatcctgggcacccaaatttaaacctgtatatctcggcggagaaaaaagatacaaaaaagtttttaactatcaaaatatgcaaaaatatctgacaaatactgtgctaattaaaaaattttgatatgtcaaaaaataagcaagttacaagagttttagtgaccaactagctactaagccaactagaaaaaacacctttctgggtcacctaactttaaacgtttatatctctgcggagcaaaaagacacaaaaaagtttttaactaccaaaatatgcaaaaatatctgctgaatattttattaattaagacaatttaaaaatctgaaaaactaacaaagttatgactcgtttagtgttacaaagttatagaaaaaattgtaaatttcaatgaaaaactgttcaaagacggctcttttctaaccctaaaatttgcatgaaaatagagcaaaaaatcgaaaaaatttaaaaccatcaaatttctgttctttgaaacacgcaatctgtccaagtcgtaaacctttgtgtgatcccgtggccccgtaagcgtgggtgccggcttttctctcaaaagatattggaacatgtggtgtctatcggtaaatcatcatctctgatccgaaggcaactgactggaccaaatagcttggaatttgaaaatggaagtgtttttcgaccaaaaaatatggaaattctgcgatatctcaaaaattaatcgatttatagaaaagctgacaactacaaaaatattcctcttgtaattttaaatatttcgttagttaaaatctttttgatagctcaattggctgcggagatagagggctttaaagtttgagagtagagagaaggagacgcagacagccagcgcgcccttcttctctgcgtctcctcccctctttttgctctctcactctcactgtgaaggcgctgaactttaaacgtgtatatctccgcggggaggaaagatacaaaaatggtgttaactaacaaaatatgcagaaatatttgaaaaatattttatttgttgataattttttaaaattttgaaaacctacaaagttatgtgagtaaaaaattaatttcttgaaaatttcttgaaaattcactaactttttaaaaagtgtgttaaagcgaaatcttccaaatactagcgaatttggtatttattcaaaataaaattaaaaatatttaaattttgctaatttttaaggtgagacgcagacagccagcgcgccctccttctctgcgtctcctctcccctctttgctctctcactttctagacctcccaactttaaaccatcatatctcagcggagaaaaaagattcaaaaaagttgttaactatcaaaatatgcaaaaacacttgaaaaatattgtgtaaagtttaaaaattttatatgtcaaaaaataaccaagttacaagagttttagtgacaactaactgccaactagaagaaaaaaaaacgggttttcaataaagagatcaaaaaactaacggatatttgataaggaaaaggtgatgtttggacgctttttatacttgcttatttttcattaaaaattgatcattttgtaggaggaaaacacaattttcaatttggaaggttttgaaagaaaaaatctgaaatatccttgacacgacactttttgacatatttatggggtacttaaataataatcctatcaacatttgaatgtgaatcaagtacttcatgacattaaactaatgtcaggtgaaatcagaaattactgataaaaacaatgagttcaaacagtcatttttattttttgggttttggggaatcggaaactttgcacaacttttttagtttttgacatatgaacaagttataaatgataaaatgttgaacattttgtgtgcaatattttgttagtttacgacttttttgtaggtctcttccaagacgagatataagcgttcaaagtaggcccagagagtgagagagtgcgaggagacgcagacgacgagagcactctcgtcgactgcgtctctgctcagaaaacggtcaatacattttttatacattttttgtacgttttgaataaaagaaaatgcatagaaattcaaaactatcagttttaaagaatgttgcaatcgtaactaatttagaaaaaaacgtttctaatgaaaatatcataacttttttgttttgcaatttattaaaaatttgcaaactaagaaaatattcctcctatatttttacacatttcgttagtttacaacatttttgtatctctcttccccgccgagatacaagcgttcaaagttgcgaccgtcagtgcagtgagagagtgtgggagaaggggagacgcagagaaggagggcgcgctagctgtctgcgtctcctcttctctctactctcaaactttaaagctctctatctccgcagccaattgagctatcaagaagattttaactaataaaatattcaaaatttcaagaggaatattttggtagttgacaactttcttataaatatactaatttttgagttgtcccagaatttccaaattttttgtaaaaaaacactttctttacactattctcattgtcgtttacacataaactttgaagccctctatttctacaaccagatgagctatcaaaaagttttatttttaaaaaaatttgagaaaaactttaaaaaagtgataattttgaaattttataaaactatctgaaagttttcggccaaagaaacatggaaacaaaaaaaatccgttgtcgtcatgtaaacgcacccgaaaatgggcagaaattagttggaaaacaataaaaggggggaaactgatgatcaatgtaaaacggaaacgaagagacgcagaatgggaaagacaggtgagagagtgacggggtaggagagagtggcagagagacagacagacgaaatgttggaggaaaggactggttttgtaatttattagtgtggtgaatggggtgataagagggtgtgaacaagacgcaggtagcgaaagagagagagtgacgagagactaaaaatttactgggaataatacaaagaaagtgtttttcacaaaaaaatttggcaattctgcaatatctcaaaaattatcagatttatagagcagcagccaactgcgaaaagattccccttaaaatttcgatcatttcgttagttgcaaactttttggtagctcaattgactgccgagatagaaggctttaaagtttgagagtagagaggaggagacgcagacagccagcgtgccctccttctctgcgtctcctctctcctttgctctctcgccctatttggccatttaacgtcaagccttcatatctccgcggggaaaaaaagatacaaaaaagttgtcaactaacaaaatatgcagaaatatgtggtaaatattttactagttgaaaaaaatttgaaattttgaaaaataccaaagttatgaggaatttaagaaaaatttctctttttatgtggtaaaagtcacagaggagctgttcgggttgcttaaaaattttgttttaaaaattaaatattttaggtttatgaaaatatgttaaatattcagaaaagatgtgaaaacgttgcaaaaaaaattttttttggagtttttttttgaaaataaaatttttctatcaacttccaggagtgctatcaaattttttatattttagaaaattttcgttggaataacaccagtctctgctgagttatgaaatctaccaaaatttgcacttattttcgaaaaaatcctgtaactaggaaatgggcggagcctaatacaattgtttaactgataaaatgtgtaaaatttcaaggtcttaattttattagttaacaacttttttctaacatttttagtttcagagataaaaaagtttaaaatgttttttaatccaaaaaaaattgttttcaaaaaaaaacaccttttttttcaaaaattttactaaattttttttttcgctaatattattcaaaatgtcttattttacaaataaataaccaaatccaacacattttacaactaaaaaccccgtaaaaatgtgtgaagaatgagtaaacacgcctcaaaacttctgggaaaatgcatcgaagaggtttggggagtggcgagagagtatgggtaggcaagagagtgcagacacacacacacagatacacagacagatgatcatgaaccacgtggaattggataacggatagctgataacaattatcaggtgataagaggggtgctagggcacaaggggcaagtcgctactcaccgaaactcgggttgctggggtggaaaattttacccgaatttagaatttatatattggttgaataaataaaacagttttctccattatgcataaaatatctgcaaaaaaatattgaaaattgaaaaaggtagaagggtttgaaaattggttcaaaattgcgggtactgtactttagagggattttttagatttttatttgaaaaaaaaacatttagtgcaaattttggtagatttcataactcagcagagactggtgttattccaacgaaaatttttttaaatataaaaaatttgatagcacttctggaagttgatagaaaaattttattttcaaaaaaaaactccaaaaaaattttttttgcaacgttttcacatcttttctgaatatttaacatattttcataaacctaaaatttttaatttttaaaacaaaatttttaagcaacccgaacagctcctctgtgacttttaccacttaaaaagggaaatttttcttaaattcctcataactttggtatttttcaaaatttcaaatttttttcaactagaaaaatcagaggcacgtgcatgacgactgtaattggtagcaatattcttgtttaaaccattgactagtggaagaccagatgtaatcaaacagaagaagtggttcaaaatgattaatgataattctgaaagtttttaaaaattaactgaaattctgaataataaaataaactcactcatatttgattgaaacaagcctcgaatctgttatcttctactgaatcctatgtgctgtcgaatggtaaagaatatggagcaattatttgaaatatcgatttattttctgatgacaattcaaatgatgtttcgatatttggcaatttacgtgagattgaccgtatgggatttttgaagatttatattttttgaagctagttttttccgttttggaatggaaattttagaaaatttatcagcttcattgtaaaattgttccacttcacccctcaacaattacagatataaagctacttccaaccgaaaacatctaataaaattcatttttcaaaaaagttcatagttcactcctccttgacctccttgacagactcatcttcaattccattcgtttcagactcacttgatctatccttccgtgtctcatctcgtttaacttttccatcaattttgaaccaagtggtgaaggcttccgtcaggtaattcataatttttgtgatatcgtctggaacggcagttgggtcgtaggcctgaaaatttgagatataggctggggagtagaaagttgtggaagtgttggcagtgtgtcaattggtgcaagcttaagcgacagcgcgtgatgtgtcggatgcaaagttccaaaaagcacaggctggttagaccaaaccagtaatgtgtccgctgcttttttaaccactgatcactgatcaacgccagttgtggggtgacatggcgcgcccgtaatgtgccggccacttttttttttaacttctagttagtagatccaatcaaatgccggctgctcctgcttgccaacctacaaggtgtcggctgctccaagatagaaggaaggcgacagtaactatgggcccgtaaagtgtcggttgcagagactcttgtagtgtccgctgcaagtctctaactcatagtgtggccaaactggttagatgtcggctgctgccctaaagccccgggatgtgagtgtcgacagttaaaactcatggtatgtccgctgcaagtttccaaccctcaaagtaaaccagtttggtgtcggctgcttgtcctatgtgagctctcgctagaacccgcaaagtgttcactgcaagttttcaaaagcaaccccgcaaactgtctgctgctactttgcactggccagcgcccgacaacatccggtctccgccattcaacctcacctcaaacgcatacataaaaatcccatagatcgcaaatccatactcaatcggctgcataaccggaccttcacagtgagatctcagagatttcagaacacttacaaatgtggttttcttgttcaacgcgaacatttgatagccaagatcaatgtctgaaacggattcaacatttgtaggcgcgcctgcctattaaaaacctacaggcaaaaaatcatactcctcgagattccatgcacaataaccggggttttggaacacttcacattcttgatgagcttgagcaaagttttcgagttctcggggacggagcacattgaccaggatttgtagaggtggtgggttacggtgaactctttctcttttctgaatttttcaaaaaaatatttggaaatttaaaacctgactatttaaacttactcgtactgaaccacaagtgtcctttcttccacatcctcatcctcttccatatcacagcaactaatcttaaaacctccgatctttacaatcccatcagcactttccgggaagtacttgcagaacatccgattccagttcgcatcttcctcattcacctgtcccagcatgacaatatgggtgacacgttcctgacgaactgcccaccagaatttgaacactgtggatgctttatcaaggatcttgtgtagaggagattgagtgagaatgagttggaggccatttggacacttgattcggttggcatgaaagaagtcggatgttaagcgggatccgtggacgtttagaggtacacgggttgccatgaccagtggaagttcttctcttaataagaaattggagtaaagaagcttcagagtcgtgtggtgtaagggaccattaattaagacccagtaattaagaccccccggctgcttttaaaaccaagttatgtatctacgtgaccgtgatgtgtcggctgataagacccgtgatatgtactcggcaaatttcacactcccggagtgtgtgccaggaacatgtccgctgctgttcaaacttttcctaatgtcccggctagtgtcagctgctttaaacccatagtatgttctagagaacttcgcacggtagatccaagccagtacaatgtcagctgctgcctgcctactaacaaagacccacgaggtatcggctgcttgcaaaacgtgcccgtattgtgtcggctgctaaaacccgtgatatgtccgctgcaacttccacacttccatagtgtggccaggacaaaccagtaaaatgtcggatgcttgatcaaactcttcctaatgtcccgtgtcagctgctaattgcgtactcccagagtgtgtgccagcaacccatggtatgtccgctgcaaattccacgctcgaagagcgtgtaccagtatggtgtcggccgcttttctaatttctagagaactacgcatggtagatctatgccagtaaaatgtcagctgcttcctgccaaacctacgaggtgtcggctgctagttttaccaatgtgcgtatcgatgcgcccgaaatgtgtcagctgctaaaacccatggtatgtctgctgcaagttatacactcccaaagtgtggacctgaaagatgccgactgcttcatttaaattttcatagaggccccgtgaagtgtcggctgctaatctcccatggtatttctcgttagagccccggaaggtgtcggatgcaagtctacaaaatctaaaccgtaaaatgtcggctgcccagatctgcactaactggcgcacgccttgcaaagaatatttcccattacctctgctccaatgagtgcttcttcacgtaatctgtcattccgacgctcttgatcttctccgaatccttggccaacagtttcgtgacatattccttcaaaacctccgtcgggctcttgctcgtcagcttctcatccttctcaaactttctgaccttattgtagaagcctacgatcatattctttacaaaatcaagtggaatttcttctgaaattttctagttttaattaatagttgagagaaactcacgtttaaaacgctgggcttccacatcttgtggggaatacggaatacctttcatcatcactggatattcgactggcttcttctccttatcctcgtcagggtcgcagagggagagtaggattgcaaaaagaatgaatgcaataagcaggtagatcaatcccagtacaacataggaccaggggtagaatctggaaaacaattaaaattgaaattctgaaatttccaaaaaagtgcaaaaacacaatttgccgaaaattgtcggcagttgcctttttttccggcaaatcgataatttgccggtttgccgaattgccgatttgccggaaaattttataggtttaaacttaggattaggcttatgcttaggcttaggctcggacttgggctcaggcttaggcttatgctctccttagtgagagttaggtttagccttggcgtcagtggcgagcgttagctttaggcttgggtttatagcgtgtttttcatttttcaaaggttaggctcaggcttaggcttaggctcggacttaggctcaggcttaggcttgggcttatctactaacctcacaaagacatcgggcccttcagctcccttatgcttccgtttcctccagatccttgtagtctggccctcctcgcttgttgtctctggtcgcatcgttgtcgtctgttcctgtgaaacgggcaagcttttcaatttttgaaggtcaaatgtgatccctgacacttttgcggctgcttcgaaaagtttatagaattctgatagtttttcggagtaatggaatctcacactgttttcaaatgctccaagatccttgaacatttttggcaactgatcttccaaagctttaagctcttcggttgattttccatagctcttcaccgaagctaacaactcgtcaaaagcatccctctcacccataacattcatcatagatacaattccacgtgtcgctttcccaataaccattaaatgttcagaaatatcaccaaaatccgatagatcatatcgcacaaagactttgaaattttcagtgttgttgataaactcttgaaggttcctcaagttctcttggatttttggtaagtgctctgccagtttttccttgctcagatttgtgctttgaaagtacttaagagcagtgataattggcttgatatacttgaactctttggtttctcttaaagctttcatggcgtcgatgagttttttgaaatccgatagaaaagtatcaaaatttttgaaaaaataaggagccatttcaatcatgtcacctatgatgccgaacttcagagtatctctaagtttgacaatcatggagttaatttcttcaaaatccaatgaattccgcacttgatccaagtcatttttctttaaaagctccaccatccttgccaacttattctcattcatcttaagttcatttgatactttcaagtattcatcgtgaaatttgcataggaaagacaacagctcaacagcatataaattgattgtaatggcgtcgtaataaacagttgtgaaaacatcaagtttattgaagatatgagtttcttgaatattttccgtaagaggagttacaaactttgatgaaagaaccatatttgtcatatttaatttgaatatatcactgactgcattatcactagattcatttaataattgagttctccaatgtaaaacttatttaaaccttttataaaattcaagccctcatctttgactacaggatgaatagattcttccgtcaaatcatcatgaatttttattaaatcaatatatccattgattaatccgacaatatgggttgaatatttgaaattatcatgtgtctgcccaaaaatattattcaaattttccgcaacctccttgaaaagcttcaagtttgcaataagttctacaattgccggctcatttttagacgcattatagaaaggtattgaggcatactcttcagttacttcaactgatttttttagaattgggaaaaatttcaaaccgttttcaatttcaggtctttttggaagaccttcatacatagacaaattgaaggttgacaatttttcgatatccaaagcagtttcatttacatttatccagttatcatgccctgcatgaagaagttccacaaagtctgcgaatccgaacagagtccgaataaacatgcccagttgggtccagtcaacaccagagctttctaaatctttcaattctttacgatatccttccaagctgtgtaatgtagcattcaaccactctgctttctccgcaacagataccagcttcaacaaccgatccgccatagtaaaatcacttgccttttgtattttattgattttttcaatgacattagtcagcgagtccattttgatatccaagatttgagaaggcgcaatatctccaaagttaacaagctccgatataagttgatcagatggaatagttccggaatgcagaccgttttgaagataaattccatttgtaattcgggatattgcaatcatttgttggacatatggatatagtctagctgaaattggttcaggttatttgttatattttctgtattgttgtctatttttgttgcatgcaactaatagaggagatatcggtttgttttgcactgaaaagtcttgcaacaaaaggtttttttttccaactttgctagagcaactaagtgtaccttatcactgcagttataaatattgtgcctcccctgacaacgttgtcactatcagaggtgggcggatattttttcggatattttctaataatgaatttatcaataagttttgatgtagttattctggaagaaatgtatccaaaccaaagagtaactattaagcaacattttaatatgataaaacctagaaaaattctacaagttttccttaccgagaccttaaaacttattagccgagcaacatcggatatcggataatagacttgcatatcgtttatacagaaaacttgtagaatttttctaggttttatcatattaaaatgttgcttaatagttactcttttgttcgaatacatttcttccagaataactacatcaatacttattgataaattcattaatgtttgttcataatagcactatcgtagattcaacgtgacgctactgtaatcctacagttccaaaacttaaatgtcttcattttatgcaccttggaactacttgatcttttgtagccttactgcacaactactgtagtttaaccgagatgcactgagacattatgtgagtttatgagggttttttgtgtttttgagtgagtttatgagagtttagttgtgagtttatgagacattttgagacattatgagacattatgtacacattacttgttaacaacctccaccagtgtcggctgctcggcttacttacaatctttagctcgtggtgataagcggtcatgactctcgttggctcccacaataccaataaatatcagaatatatccaattgatttataaatagctgctgaaaataaatataatcctgcaaacttcgaaaaaaaaaactcacccattgcgaaatagttataaacttgagcaatgaggcatttgcaaatttgatgagcaaaatcgagcacgtaaatttgaaatttttaaatttttaaatgtcacgtttcattcttggcaagcaggggtgggcggcaaacaaatttttccggcaaatcggcatttgccggaattgaaaatattcggcaaaacgataaatcggcaattttccgatttgccggaacttttcggcaaattgtggttttgcactttttttttttttggaagtttcagaatttcaattttaaatggcaaaattgaacgcatcctataaagtttccaacgtctatttttaaacataagcatattctatgaagatatgtagaaaaaacgggaaaaattcaaaaatgcgcagttttaagtgttttccgtcttataaaaaaaccctttaaatgttcccggcaaatcggaaaaccggtaatttgccaatttgccgaacggcaattgccgcccacgcctgctataaagtaacagttcacgaggaaataatagaagctttcgaagttttcaaagatataaaaattataaaaattatataaatcataataattgcaaaacattattaaaactattgaccaggggtgtgcggcaaatctcaaaatttgccgagctcggcaaattcggcaaatttgccgtgcttaacaaactcggaaaaatttgatattttttatgttttttggagcaccaaaactactgaattcttaacacacatctggtttctgaataagttccgcgtagtatgtctgtttaagcatcaaaatagctcaattttgtgtcattttactaattttttggctaaaaaatcaatagttttagtcaaaattgtactgtcaaatttttgacgtgtgcggcaaatttcgaaatttgccgagctcggcaaattcggcaaatctacttttttgaaatttgccgtgctcggcaaacggcaaattcggcaaattcggcaaatttgccgagctcggcaaacggcaaattcgccgagctcggcaaacggcaaattcggcaaattcggcaaatttgccgcacacccctgctattggcattataacaattggtaaactgaattggcaaaaaataagtttgtccgtcgctatacacaattgtcgacccgagtgcacacggttcgtgtttattacagctagctggctaggtgcacacagacacaccgacaatatcgattcatctcacagccatacgcaagaataactcaagaataactaaatgtgctttttttctctgttagatgtatattcacgtcattttcgttttttttttcaaccttaatgcctttcaaactattcaaccaggggtaggggcaataaatgatttttttccggcaaatcggcaaattgccggaatttaaaacttccaaaaaccggcaattcggccaacaggtaaactgtcgatttgccgacaatttttggcaaattgagaaaaaatttgcccgattgaacgatttggaaagttttcagcaaaaattagttttagttcaactctcaaactttttcacaattttttccctttttctgtccctttcggccctgtttatgggatttttaacccaacttcggaatttcccatgtttccagattttttgtccttttttccttcttttttttctgggtttttaggaatttgctgggagtttctctttttctctttattctcacctcacccctgcccgaaacttctcgaaaaagttctgaaaacattggacatttttttaataacttgaaaatagttccgccaatttttgaaaccgttttggaactattaaaatttcgtggaagttctggaatttgtcctgaaaaattctggaaattttaaaaaatactttggcaaagatttcgaattttctgtaaattttctggaatttttcggaatctctcaaaaattgaacaaatttttgaaacttttgaaatttgaattttgtaaaattcaataaagtggtctaacataatccaaggctattgtaaaaacgttttgagaatgatcaatctttatttgcattacaggatactatatgttttagggtacaataggaacatgggttttgcagatcaaagctttttgcacgaacttttaaaaaatcacacgagaagcccaacttacaacgttggaccgaaatcgcaccggcctgcattccaaaaacctcacgacggcttctcggtagggcgtgatgaagtagatttgaacaatagggtcaaaaaggcaggaacctgtgccatttagggtgataaggaattgacggcctgaaataaagaatttgacggcctgaaaatcagcaaacttcccttaccagaaatttgaatcgctagaaacaagaaaaccattggcacatatgtgagcaatggaaggtaaatttgaaagttcaatccccgaatcaacttccgaaacatgtccctagtagtctccgatgtattcggagacatgtgaggcgtcagaagcttcatcgcctgatacttccagtaactaccaattattgggaagtacgacatagcaataagtgtaacaatcgccgacctgtcaaggaagactttttgagcctgactgtaccctccgaaattcagatagggagtataatctagatccgggtgaagggtccgagtttcattgtgaactgccagatggtccggggaagggatgaactttatggcctgtaaaatttctatgccttaaaaaaaaggctatcaatgcttaccaaatacaccaggggaactaggtaatgccagaaaaataggaggttcctccgtttgatcatcttcgggtcgaaggatttaaggcatatggtgcggtagtagagcgtgtggagattgatcaaacccatggttattccacaagtctgtaatttttccaattgattctcgaagtttcttcttattgccagccccttcaattaagaaagattttgaagcacaggccgttttctggcacttagaatgggtactgcaagctggaaagcctgttgtgaagctagcagtgcttttgcggagcacataaaaatctctgccatttggtgggactaatgtgacttcacaagtttattttgagtctaatggaggtcttgaagtttaggcaatcaataaatttttcagaaaaatcgattttttttttgaaatttcagacaaaaaattgataaaattgcgtatttttttggaatttatgggaaatttggaaaaattatagattttcagcatatttttcgattgttttgactaaaaatgcggatttccagagaaaataaaaaaaattttttcgaaaatctgagctttttgagtacaaaaaatagaaaaaaccaaaaaaacatttttttcaaaaaatacggaaaatttttaggaaaccccgattttttttttcaaaaaaaaatttatcgatttgttccactaaaattgtcgatttttttcagttttttgaggaaatttggaaacttttctcattttcctgaatattcagacattttcggtcaaaattccaaatttttcgatttttcggcaaaaaaaattgaccaaaattcaatttttccaattttttggctaataaattggttaaaagccaaaatttccgattgcttctaaaccgcttataaaatgttctaaaaagctgtaaaaattctctaaaaattcttaacaaactcaaataaaatgctaaaaaagctctaagattgccttaaaatgctataaaaatgctttaaaaatgctcaataaatgaccacttaacgctctaaaaatgctctaaaaattctccgaaaatgcttagtaaatgtttaaaaactgctctaaaagtgctctaaaaattttttttttgctcagaaaattttctaaaattcttaataaatactcaataaatgatcaataaatactctaaagacactctaagaatgctctgtaattgctcaaaaatgctatgaaaattctataaatattcttaataaatgctctaaaaaggctcaataaatgttctgacaagctctaaaaaaagctttaaaatgccataaaaatagctcataaaatgctctgaacatgctctaaaaagctataaaaattccctgaaaattcctagtaaatgctaaataaatgtttttaaaattctttgaaatgctcaataaatgatctaaaaatgctctaaaaatgctctaaaaatgctctaaaatgctcaataactgctcagaaaattctctaaaaagctctaaaaaatcttaaaaatgtcataaaaatagctcaataaatgctttaaaatgcttaataaatgctctaaacatgctctaaagacactctaagaatgctttgtaattgctcaaaaatgctttaaaaatgcgaaaaaaattcaatggatgatctaaaaatgctctaaaaatgctcggtggctaccacgtgtcgataggaagctcatggagcatttgccggcagaaattccagcctatcaagctactcacactccaaagactatagcaagtcgcacaaaacgtcggcccaatatatttataaaatccatcacaaagcagacccattgaatgctcattatcgatattcctaaattattcatctcaggtaaaattaaattatcttaaaggtggagtaccgaaatttaagactttgcttttttggacccaaaatggtctaaaactaacaaatttcgtaatgagacgctcaaaaaaaattttcaaaaaaaagttatgacagctcaaagtttttggaaaaaaattgtccatttttagctaaaatctcaaattttggcagctttccggtaactttgagcggccataattttttttttgaaaaatttccagaacgtcttattttgaaatttggtagttttggaccattttaggtctaaggtactccacatttccccaacctggtctgtgtggcaaacgccaaaacaaccgaaatcagagtcgctgtattcgacgcgtaaagaaaaaatctcatagttttcaaaatacttgtggtgaacttgtagattagaatgtacaaggtgatgaataggcataggcaggttagggagaacattggccagtaaaagcggaagaagtattgaaggaaatccatttggaaattgagaaaaatggagatgtctagatattcgaaatatacggaagtgtgtaatttgtgggtgagtgagaataaaaggtgagtaagaaaatgtcaaaaaatgtcgtcggcatttgaaatttttcgttctctatttcagcgtacaaaaagcggtctgaccaatttcttaataaattttatgtttgatgcagcatcgtgtttcaagtgcactttttgcgggtagctgatgtggtaaaaaaaagctctaaaaatgatctaaaaatgctctaaaaatgatctaaaaatgctttaaaatgctcaataaattctcaataaatgctccaaaatgctctaaaaatgcactaaaaatgctcagctctgaagtttctttaaaaatgctattaaatgctctaaaacagctctaaaaaagctctaaaaatgatctaaaaatgctttaaaatgctcaataatttctcaataaattctctaaaatgctctaaaaatgcactaaaaatgctcagctctgaagtttctttaaaaatgctattaaatgctctaaaacagctctaaaaaagctctaaaaatgatctaaaaatgctttaaaatgctcaataaattctcaataaattctctaaaatgctctaaaaatgcactaaaaatgctcagctctgaagtttctttaaaaatgctattaaatgctctaaaacagctctaaaaaagctcaataagtgttaaataaataataaatgcgcaatttacagcttactctaagagattatttgggagctaatgaagcttattttgcataggccgtcctctgaaacgtttcaatatcaaaaatgtcgctagaatgtcggcatttgaaaatgttcgttctctatttcagcgtacaaaaatcgttccgaccaatttcttaataaatgttatgcatagtctgaagcaccatgtttaaagtgcacctttgcgggtagatgattatggccagatgttaggtttttgaaaagtattggcttattcgttgaagaattttgtgctaatcaatgggaatttgtagttcagaggtgttaaactactagaatttttttgtatttatgtgatattttcatgcaaaataaaagattaaaaattgattagttttatttcgaaaaagttagcacaaaggagaaatctacaaagttttgtcacctcatgacttttttctttttggttgttatattcaaaaattcaattaggctaattggaaaaaaatcatgtatgctgaattcaataaaactaggtttaatccatcaaaatctattaaaaagtggcaaaaattggcaatttatggaaaaaatcacaattttaaaactcctttaaaatgggcatttatggccagatgttaggtttttgaaccacaagctccggtcagtagaggcaatgtttctaaatagtaccaattttgcaaaaaaaatttgaattcccgcgcaaaagagactgaaacttttaatttttttttgcgtttgctggctaaatttaattttttgttttttttttatatttaacttaaaaagcactgtttgccaatttttcaaacagtttttttttcaagaattatgcgggaattttgaaattggctttaaaaacatgtatttcaataaattttgcgacatttcgcgtctctacttgaataaccccataaaatcgatttatttataatttttgtggaaaaagtgttataaaattttttaaaactttacaaaaattcacattctttgcattttttttgcacaatatctgacttgaaatgaacttttttggagatgtgcttccggggacttgtatccggccgaaattttttaaaagatattttgtaaaattgacagaaaaaatcatttttaaaaaatgcacaaaaatcacaaacttttaacagttacatatatttggttattacggtacatttttaataagaaattggaaaatagaaattagatccaaagcaaattgtaaggataaggacagaaatcacaattccatgtaaaaactgacagcttggtaaaaaaattttcattcataataacaaattatatttaaaagtggtgtttattgctttcttagacttgaaattgtctgtaaacatcgaatttcattatgaaatttctttaaaactcaaaaaatgaccaaaaatcaactgaaatttgaaatttgaccaacagttatttgaaaaaggttaccaaattttaccaaaaagttaccaaattttaccaaaaaaattcaaaattttacaaaagattaccaaattttaccaaaaaagttaccaaatttcactaaaaaattaccacattttacaaaaaagttaccaaattttaccaaaaaatttcaaaattttacaaaaaattaccaaattttaccaaaaaagttaccaaatttcactaaaaaattaccaaatttcaccaaaaaagttaccaaatttcaacaaatctggtcaccatcgacctcaaatgtacctataatgcgtttaaaatacaagaaaatcagctcgtatccccaaaattagacggagatttcagaaaatttcgtttccgcttgacaagtcggtgtcgtaactgtttttgaaaagttttcaaaaaaatttttcagacaatttcgcggataataaatcaatacaaatgtattaaactgcaattctctcgatctcaatgcaccatctctcactcctgccgtaacaattacaggtgattttaaaattctgatagctgagcttatacacgtcctctccagagtactcgggctggaacacttttgcgaattcaacgggatccgagcagttttcatcgaaattcattgcacaatagttgaaagtatcgcgttttagaagatcctggaagtttatttatttatttattttagaacattatttccacctatgatctactaacttacgtctctacacttgattgcatcctcctttaaaagcttgtcaactttaattttaaacctcttgaaatggaaaaattgattgatcgaagttttcgtagtgtcaaaagcataagattccatgtaaaagtctcgagatttctggaattgctccaactggaacagatcttcaatcccatccccttctgtgggatggtttaggatcactctttccaggaaatttgcagcaaagtattgaagaatttcaactatctcctcgaagtacagacgaaccagcttcaactccttaactcttaagcttcctggcaggtatctaaatagaaatgctccaagtagctgctcctcgtagaaagggtcatcttccaggcataagaagttcatgggatgctttagaaagatgtatagatcattgaatgcaacctcttcaaaatttgagttttggagcaatttcttctgattccggcaggttatccggcaatcttcattcaggcctttgtataggatatcaagtccgtttaagctaattgtcagccgtttggtgctgcagattttgaagcagatgtactcgaaatggatcccgatgttgtcgacagcggcgcggaggcttttggagacttttcgagttgatagtctgaaaactgaattttgtcggggtactgtaagagtactgtggtagtatagtagggaaactgtaggagtactgaaggattaatgcaggggtactgtagtagtattgtaagattgctgtaggggataatgtaggatcactgtaggggtactgtaggggatactgtagaagttactgtagtaaaggattcttgtatttctcaactcacctgtcaaatggcgacagtttgttcagaattttcgtgacgatctccaatggaatagtgttaattgtgagagcttttgatgtcattttccgaataaaaattggtttttttgaattaaatggtgaatagcttatcaagaaatacggaatattgaagaaaaaaaaacgaattatcacatcattttccgttgctttctttctctaaacctctaaagttcactgataagaaaatgtcaagcattgtgaaattttgacacaggtgtacaggtgtatgtttttcaaaacctttgatatttccgtgtagagttcaggcttaggcttaggcttggcgtcagaggcgagcgttagctcgccactgacgctatttaggcttgggtttataacgtttttttcgatttttgaaagggttcccgttggccgatcaaagcgaaattttacacagaggcgtataagccaccgataagcttaagtctgaagtttcaaattgattccatcaaaactcgccgagttatggagcttaaggtgttttcaaaatgcccttcaactattttttaaacttttaaagtttggcgttttgtcagttttcggcctaagcttacgaaaatttaataacaggaggacggcagtgaaataagttttcttgtgaattttcagccgatttcgatttacaggagccgagatattaagcttcaaaatccgacaaaagtggtaaatgaaaacgcgcgtgtaacttgacggtgggtggatagattttgatgcggttttttgctgtctcttcaaaaagcttgccccgcctctgtattctttatttcagaaagattggagctcattgagccgagatattttgagtgaaactcaaaagtcgctatttttcgtcattttgggtggttttaattgaaggaaaattcgaatacttgagataatttcacgatttttcaggggtgtatacaactcgacgagggctttttaacgtgcattttgaaaaaaatttacgactcttttaagctatagaagtgggctctttagtgtgaaaacccccttgctccagaggctttttttcattcttcaccaatttccaaaatttcaaatactatcatattctccttttaacgctgacttcaaatatatactttttatttttcaattccaattgtgagcggagctacggcgctttcaaggttcagcagtgcccgcccgccccctcttgcctcccctttctcttgcctcctccctctccacagagcctacacagtgatgcatgtaggctggctgtaaatatggtctctaattactgttacaggatcagatatgtatattttacgacatatctctgaatagagtttatttcatcagaaagaacacattctctttcctatttgcagggatagtggaagacaaaaacaaaaacaatatggatttaaaatcagggcttcgccccgattttaataaaatatatgaaaccctcttaaaaagttacaagaaggtttttccttgcgcttggagcgcaaaagaaaagaaaaagagctatttagacttagggtgcccaactggaataaaacataggaaatccttatgacacacttaagcctaagggcccgaaaaaaaactaggatgcccaactggaataaaatattggaaatccttatgacacaccggcggtatggcgcggcttaagcctaaatagccacttttatcaaaatacatttgagcgaagcggttgtaaactattcgttctttagcaaaaattaaaaaaaaactttatttaaacttaaaaataaatatcatatgttatcacaccttagaatatcacgccttaatttagtaatcattttagttcataagtgtgagagaaagaaaaatggattaatcatcggaattagatatcatcagagtgattatattcatcaaaggtcccactttacttgagggttaatttggttgatataaaattcctatctcatgtaaagaaaggttcgaattctgtacctatgaatgctgccgatatttgaattcctgtctcatgggaagaaggcctttcttgtgggaagaacggagttataaaaaaatatacgcaggtacagaatttgaacttttcttcccatgagataggaatttgaatattggcattctataactttactttaaaaaaatctccaaaggttgctcgcaaatatgtagagattgctcgcatcccttcaaatattacaaaatttccaagtttcttagaaataatcttcatttagattactgaaaaatatccacagattacttttgagttgcgtgagaagttattgtaaaacgcaaggcgagctgttggtacagaatttgaacttttcttcccatgagataggaatttgaataatggcattctataactttactaagaaaagatatccccaaaggttgctcgcttccctccaaatattacgaaatctccaagtttctcagtaatctatagttttcatttagattactgaaaaatatacacagattacttttgagtctgagaagttattgtaaaacgcaaagcgagctcaaatgtattttgataaaagtggctatttaggcttaagccgcgccataccgccggtgtgtcataaggatttccaatattttattccagttgggcatcctagtatgtttttcgggcctttaggcttaagtgtgtcataaggatttcctatgttttattccagttgggcaccctaagtctaaatagctctttttcttttcttttgcgctccaagcgcaaggaaaaaccttcttgtaactttttaagaggttaggcttaggcttaggcttaggcttaggctttggcttaggctcagacttcgacttaggctcggagaaaaaatagagaaatagtccatggagaaaacaaaatacgaatttttatctgcgaatacacaatttgacacaaatttgcacgcgaaaacagatttattcaagaatgaatcattgggcaacaccaaacttcgtccatgttcggattagccggacacggtgcacggccgccaaattcccatccatctgggcagcatctagagccggagatgctcttcgggaagcatccatacgagtcacatgtgtctgtctgaacaaatctacagtgttgaaggacttttcgtggcgggacctatacaagagtgcgcgacaatcggcaatttcaattgccggttttgaaaattttcagcaatcggcaatttcggtaactgcagaaaaaaattgccgattgccggacatttttgccaattttcatcttatttttcagtattcggtaagtcattttctaaccaaaacagaaaactaccaatacttaaagacttaaatcattttgagcttgaaaagagaacattgttcagtaaaattcatgttaagtcacttaaatctacaaaaagtataaagtttatatactccggcaattctgattttcggcaattggcaattttggcgatttgccgaaattaccgaaattgctgaaaattcgattgccgaacggcaattgcagcgcatccctggacctatatttacctgaccaagtttgaagcaagtgagaaggagaagaagcgataggaaaatgatgaatctcatgttgagaatgatacaattttaatgtaatgcgccatatttatagggcgtagagcagagatggcaacaatggaggtttgcagaaaacatttattttgcaaaaaagaacataccgctattgaattttcgaatagaacatataatataaccagaaagaaaaaagtcatgaggaaacaacaccagcgatctgtcatttttttttgggcaaaaaaaataattttctggaaattgtacaaaactattaaaaattaaaaaaggacatttttttttagttttataggatcaattttgagtcctctaactacaaaactaacaagtttagaggagtttcaaaattgtgaattaatgacataaattgcccatttttgccactttttaatagattttgatggattaaacctagattttctgaattctccatatatgaattacccgtttttaacaaatttagacatttttttttaattttgcccaaatttttatcagtcatctaatgactgtccttttttttggacaagaaaaataattttttgaaatcgtgcaaaactatttaaaattgaaaaaggagattttttaagttttttagggtcaattttgagtcctctaactacaaaattaaccattttggaggagtttcaaaattgtgattttttacaataaattgcccaatttcgccactttttattaatttttgatggattaaacctagattttctgaattcagcatacatgaagtacccgtttttaacaaatttagacaattttttattttgcccattttttttcagtcatctaatgactgtccttttttgttggacaagaaaaataattttttgaaatcgtgcaaaactatttaaaattgaaaaaaagggcaattttttagtgtttgggaatcaattttgagtcctctaactacaaaatttgcccattttagaggagtttcaaaattgtgatttagcctaattgaatttttgaatataacaaccaaaaagaaaaaagtcatgaggtgacaaaactttgtagatttctcctttgtgctaactttttcgaaataaaactaatcaattttttatcttttattttgcatatgaaaatatcacataaatacaaaaaaattctagtagtttaacacctctgaactacaaattcccattgattagcacaaaattcttcaacgaataagccaataccgcatcgaatctcaaatttggcattgtcaccggtaatataatcaagctcatattcattgtcaccatcataatccggttggaagacttttgcaatttcatttgaattgccgccatggaaccatattgtgcaactttggaatgagcttcttttcaagagatcctgaaacttttaaaaattaaacaacaaaaatctctgaatattttgggtttcttattaaaaaaaagaaattttttgagtcaaaatttgagtttttataaaattacggttattttctgtactttccagattagaaaatgtttaaatgaaaaattgcaggaaacaaattttccagacgaaagtgccgatttttagaattaaatctcaaacaaagttgcaaggtctaacctgagcctgagcctaagcctaaactttagcctgagcataagcctaagcctaaccctaagcatacgcctaagcccaagcctaagcctaagcctatgcctaagcctaaacctaagcctaaacctaagcctgagtcttagcctaaacgtaagcctgagcataagcttaagcctaacactaagcctaagcctaagcctaagcctaagcctaagccaaaccctaaacctaagcctgagccttagcctaaatgtaagtctaagcccaaaccttagcctaagcttaaacttaagcctaagactaagcctaagcccacgcctatgactaagccgaagcctaagcctaagcccaaaccttagcctaagcctaatataacttacatttcggatctcaatcgcattttgtgttgaaaagcttctagattcaacttcaaactctttaaagtggaaaaaatcttcaattggcacattttccagctcggaatccacaatgatacaataatgtgcatttttccactgatccagacaagtgagacgttcaaattgatcgactgagccaacatattgcatttttatatattctatcacttgagcattcatataagaaataatcgataaaatatcagtgaataggaaatttttgaggtcaattttcttcacgttgaccctttttttcaattttaaaatttctaaaaaagatttcacgtgggcaggtgtatattctgtgttgaaaatttccaattccaaggcttcatccaatattatctctaaatctttgctatagacatcattttctgtatattcaattcgtgttccatctaaatccagtaaaacacaattagtgcaaaaattaattgaaattttgtcgaaatgaattccaaactcgtcaacagcggttttcaaacttctgcacacttttcgagcagtcaatctggaagtttatttttgaaaataacgagcaaaaagtgttgttagtttacatgaagtttttaggcttaaaaacaaatttgtactcctctcggacaagatggagagcacgtggtgttagagtgatccatttatctacttagatctacaaaactgatttttcatggttaaaaacgtgctgacatcactttttttgagcaaaaaattcccgcgttttttgtagatcaaatcgtgagtttttgtctaacatttttaacattcgtctaacatttttaatttttgtctaaaattttccaacattcgtctaatatttttcaaaaaaagcaaaatatacaagaaattgattaaaatttaacctgcaattgcaaaaaaatataatttaaattttgaaattttgaatttcaaaagcattttccaaaagtgaactcaaatgtgattttctatcgatttttccaatttttataactcaatttcatacaaaactcaccgatccatgggctccattttttccaaaatttggttggcgatttccagcggtagatccagcaaagttggtggtttgggccacatttttcttcaagttttgagactagcaaaccatagcaacgcataaataataaacaccacacttgtgcattttgtcgtcaaatatggtgtttgcgtacctggcaggtctgttgactactctgaagcaaaaaagagatagaaatttattaagtacaaaatgaaacatttaacaatttttcaaaaaaaaattttcaacggaacaactcaaaaatcaaaaattcatagatctacttctactttgaaaatattttttttttaattcctattttgaaatagcattttttttgtaaatacttgccttgaaaatgtgtatagtatcattttaaattatcaaaatatgataactgtaaagactcaaaaatttgcaaaatttgatgtcgaaatacgagagcagttttcctaagcgagttgaaaatgaagaaaaacgcttcaactgataagggtttgctattttttatattgatttgatgatttggttccactgaaattttcaaaactatcaaaatgttggcgactttgctcagtgtacctataacaattgccatcgagattctggaaaagttggacccgatggatcggtgagtttttgctctaaacgacagaatatagtgctaatatttcgaatatagctgtaaaaaaattcatgcaatttttctaaatttttttttctaaatgattttttaaaaattttggtaaaaaattttatttttgaattgccgcgcaaattagtctttttaaaaaataagtttgtagtaaaatttgataacttcttattagaattgagaaaaatttttggtaaaattaggtaatttttttggaaaaattaggtaacttttggtaaaactaggtaacttttcagaaaaatttggggtagttttattaccaaattcgatttttcaaaaattttctttttcacgattttccatttcccatgtgaacttccagattggcctgtcgaaaagtctgccgatgcctgagaacggcttccgataggtttggagcttcttttagaaaagttaagatctcattcctgaaagattacatttgtatatggttagatgaaacaataatcatgtatactcatgagattgctggcgtatcagtgacccataatcaacgaaaaacaactatcaatcaagagcagttcattggaatagtattgaaagacttcgatatagtatctagccgtgttccagaattagaaatcaagcatgacaatgatgatagacaagatatcgacgcttttcttatgtgcatctcgaaacgagaaaaatgtgttaatttgaagagattaatgtttgaacgtctctcaatcaatgatattctctttcttattccattttttaattttcaagtactacaattctggtatagtgacactaaagatcgattcgaaaggatcactcatttgaatcaatggggaaatacaaaaagctttggactctgggattccgctttggatagtaaactaattgaacgactctttcactttgaaacgatcagcgttggtattagacgttttacagtgaaaactgcgatcaaaattcgagatgtaagttttagtatttgccataatgataaaatgataatctatcaaccctatctcggcatttggctcctgcttcttgcccaagttggaccagaagttggctaaacttggatttatgccgtttttgcccaacttttgccaaagtttaactcggttaacacaggcaaagcggaaagtgcccaaaacggtccgttcacggaccgggaacggctcaaatttaagaacagttcacggttcgattcccggtccgtcaacggaccgtaattgaaccgtaaggagactaaaaaatggaaaaattttttcaccctccagcttccccctttttctttcccaatgctccaccgagctccggtcttgctccagaccgtcttccggtgatccttcgttgtagcaattctatctgcctcagccggggttgaacttgtccactgcctgtcgattgattactggcccatcaccttaccgtttggccgttcgcgcacgcgaggaaagtcaatagacttcgcataaatagcgatcagctcgcgctcgcgcatttccttctggttttcacgtcttacaccaactttttcgattgtattttcagtagtttctgattctccatcttgccgttggacttatatgaaagcgaacgataacaattgacagtttcgtgtagttcagaacttatttcgcatatttctcaacatctacctatacgtgctccatctacttgtaatacagaaatggtacttaccatatttcctctattagtcttgcatgcaagactaattttcgattggaccgggttgcaatactaatagaggaaataaggtatatgcgttctacttgaatgataccttaatttcttaaaatacatacggaacagaaacgatatgattccagaatgtattgttagtaaaatattttatgatatttcaagaaatgctcctgtagctcagctgaaaaagaccagcagagagagtgaacgttgcgtatacacagtatctacccaattgcggcatttcatcttttttattgatatgtttataggattacattaatatagcctcttttacacacaatgtcatgcttaatagcctcagttagatcgcatgcgattacgggccgagtacggaccagtttgacggatgatagacaaaatggttgcccagaggaattttttttaatgaaaattgagtttttgaagtacctacactctcctttggctaatttgagcacttttccgtgctagaacctgaaattttcaaaaacaaaaatttggtgcccgggacggttcatttacggtccgtctacgggccggcgacggaccgtctacggaccggaaacggcccaactacggctcaagagccatctcggtcggtaaatgtggtttttgctctaaataatgcatttaacgacgtaaaaatgcttgaattagccaactggtatcataggtattaaaaaattcgttttcttaaaatccattttttcctcttaatggccattttttacattccccgtagtttgcccgtaattggtccgtcccgcttttcatatccgtagttcgcccgttaatgatccgttcccggtccaagatccgtaaacggaccgtacccgctttgcctgtgtaagaagctagagccaaattccaatcacaaatatttaaagaatctcctgaaaagaagtaccttcaagcaatgcatcatcagacatacaagccgtaactatctcaatcttgcaaaagtattcaagccggattatgtcggagacaaacgttttaagtgtgcttattataatggaaatgatgtttttgatatttggaattgtcatcacaagtacagagaatggaatttgattattgtaaaacgatgtatttagtatgtaaatttctatttattttatgtttgtatataaaataattttccgctttgaacttatgattgtggcctatgtgagaaatctgcagggttactgtaattttactatgattttggaaaatttgtgtgtttgaatatttttaaaataaaaatcgcaactcaaacactcgttatatgtaatttctactcctgtataccagaaaattctaaaaaaacatgagtgagcttgtacggaacattattttataatatgcagaaaatgctcctaaagctgttattttcaaaaattcaaaagtatgggaaaatcatatggagcgattcttttttatttcataaaactgaaaaaatcaaataaatgagcttaaatactttgaattactgtaatttttgattgttttgaaagtgtcttatgagcagttagtgataaattgttttcccctttgctgaactttttcggtacgctgagcacattttcatttgagagaacggttcatagagtgaaaaggtaatcaggggacgagtatttaaatcaataaataaaatgctgacaaataaattccgtgaaaatctgaaatattttcacttgaccttttccacatttctttttctttgtttttcactacgtggaattttatttgaactttattcaatcgatattcaattattactgatagtttccacattcaaattgctctcaaattacaattctggttaaaattccaaccatatcgggtttgaataatgagttagtcaattttttaaagatgtagaagaagctctcggcgctgcttcaatttcggctggaaatttcagactatttatttttgacatctagaaaaggctgcataagagttaggctcaattgagccctgttacaaaattttcgacaaaactatcagccgacacctgataagttttaagtcttgccagtaaaaaattattatcaaaaaatgccgattgaaattgagaaataaagattttcaacaaaaattgaaattttcacgtgaagctttttttctctctcacctccgcgtgtcatagtcaaaaaaaaacaatttccaatcattccacgacttttcttgtattcttagcttccaaatcatcaaaagtttcgtttttgaattgctgcagtgaaaatgagtgagttgctaacaaacttttgcgcatttcagagctcggcttcttcccgaacaaggctcaaatgatattggaaaggcttatcaatacttattccaccgtattccacgtgctactaatggtgagttgaaggattgctatcaaaatatcaataaaactaaaaatatataatattttctagatggattcaaatcttctctcactaaaatgcaaatgatatctcgtatcactactggaatatacttacaacatggattatccactggatctattacatcagatgatcttattcctgaactacttcattttggatctatcactccaactcagatatctgcaatcaatactgataagttatctaagattgttgaggggattaatgagctcccaggaaaattagaatcgagtgttattcaacttgaggatcagcttctcatgtttgcttctgttaatgagaaggttaagggtgtggtcccaggaagcattattctaaaagacgatgcatacaagactcaacttgatgcattgaagttagaggattggagaaaagtagattcttttgcaaaaggaattgttatttttctaaacgaaatggaaagtatggaaggagtgaccagtgatgattccgctaatatcgaattaagtgacatggcttctcatttaccaaaattcaaatattggactttggaaaaatataatgtttacgcacaaaatcagcatctccgaaacattcacatttcctatccttccctcaatttagtctacaaagcagtggctgagtttttcccatataaaaacagtctagatggttctctcctatccaaagttcaagaaaacatcaatcatttgagcaaactggctgtagaaatgaagttagaagctccaatgatctcacaacttcataagatgttcttgtcacgaagcttgaaaaatactgataatatcaaattcatttctggattattgaatggaatatcagatattcaaatgattttcaatgacttgaggaatgattgggtgaatgagactgttgcgggacaggcttacaacttggtaaaggctctgaatcaattgaagactttagccagtgacgccaaaacggttgaacagtcgattaggtcggatgagaatcagattcacaaggatgtatcggatgtttatcaaaaagtcaatcatctggcggatattgcggatattgtaaaacctttggtagatactgtcagtagtatttcatttcctaaagctgcaatcagtgctcctgaggttcagaaaattggtccgcttatcacgaacatgaagctgctgtcgtcgaaacttggtgcccttgaaactttggttaagctgtcgaggactctgcaaagggaagagtataagatcaagttagatgagattataaacatcgcgaaagcaactgaaaatacactcgatcgattccaaaaaagtacggcgtttaaggaaattcataagttgattttacctgtaaaaaaaactgctgaattactgaaagcaccaactatcgaagacactgttttagaaattgaaaaggatttcggtgaaatttcaacttttgtcaatggattgcaaggttttttggatggatttgcttttttgaagaatattcaaggaattgactcattgaagcctgttattgaagtcatcagatcttatcgggactcgaatacaaaaagcacagttagtctaagcactttgaaaacccagttgccaatgatcaaaaataaactgaggacactggatgtctacatcaagaaaatcaagaattcgaagcatatggagacagaagcattgtcagctttcaccagcattgccgtggattcacagatggttgggatggctacacgtggaatcactgatatgcagaggatgggcagtcagacagttgatttgaagcctctgaaggattggagtgctaggattgaggtggagatgaagaagcatgagctggatcctgcagatgtcaagaatttgaaatcactggctggattggagacagagttgaataggatcaagaaggaagctggaacatttatacagtctgtggcgcctgtgaattccaacaaattgtcggattattcgggaattttccaaaaggctaaaagtgttaaaggaatcaacatcgacttgccagctatcatcggttccgtggaaaatttgaagactcgtctaccatcaacaagaagaagaagagcacctggagtttctggagtatcaatatcccagttagataatcttctgaagcttctcaaatcccttcaagtctacgattccaccaagttcgtcaaagccttcgatggttctgccaagtctctgcaagttcttgatggtttgttccttgcctacgcaagtactctgactcgattgaagacgccgggagctcaacctctacatgcaaaccctggaaaccctgccaacaaaccaactgctccaggaggaaacaaaggagccgctagtccctctgcaacaaactatcatcattctgcaaaggcagatgctgagatgggttttttggagaagtgagtactttgttaatttatgtttccttttaacttctattttttttcagcaactccccgtggtcatacattggtctgagtcttatcgtgtgttcttttgttgccctattcgtctacattggtctttggttttatcactcacgaaaagtcaaacttgatgtatctcccgatctggtacccctgccgaacgatttaattacaacaactgctctaccagaaatcaaaattgagaaagctccaagtgagttttttttgttgttgatttttgtaagttattatatattatacatgattcaatttcagaggaaccaaaagtcgaatcgttcagtttaacactgctggtcgctataaaatacgttactgatcttcatctgtgacgggataatttttttaatcaagttgagcatagcctgccgaaattttatgaagctcaagacctagatgttcaaaagccaaaggtttctgatcttgttaagagtcactcaatggatcttaggtttgtcgttttttttcttggcactctgatgtgttctcgaaatatccatccaatcattttcagagtttccattccacttatcgagaacacacgcgtcattctaaagaaatatggttcaagattcaaggatggatttcttcacgcgaactatgtgacatgcccaaatggagcacagttaattctcacacaatctccacaatgcgagattttggagccaaagttagccatgaaaggagacaagcatgctgaaatgatgccacgtcgcaactcgacaatcggcaagttttgatggatgatcagacaggagaaggcgcagcagattgtgatgatgtgcgatgtggtcgagagaagtattcagacgggacgtattgtcgagatgtgctccagatatttcccggagaaagtgaactgcgagatcaaggtcgatgggattaatgtggaatgtactgcaaaagttacatcagatggtgtggagcgtcggagtttgcgtgttacgtttgagttagtattttcacttgtcaagttttcatatttgtaattaattttaacttgcaggaacggtgatacgatctttgtaactcacaatttgatctcttcttggacatttgtgaacactcaagagactacggatactatggtttcaatggttcgttacttgaacaaatgtaagggatctccaattgttgtgcatgactttgatggaatctcaagatcagcttcacttgcatgtgagttggaaaactgattaaattccactgatgatggatttcaggtacaattattggttatcaaatggttgctaagactaccggtgagctggtgcttgctgacgctcttcgttgcattcggacacagcgtgcacttgcgattacgtcggccgttgaacttgcgtttgttgatgcatcaattgttagattgctttcggtggtaagtcaatatcaccttcatttctatctagctaaagggtggagtacttaagaatgagcctaagcttaaatctaagcctaaccctaagcctgagcctaagcctaaacctaagcctgagcctaaacctaaacctaagcctgaccctaagcctaaacctaagcctaagcctaagcctaagcctaagcctaaccctaagcctgagcctaagcctaaacctaagcctgagcctaaacctaaacctaagcctgagcctaagcctaaacctaagcctaagcctaagcctaagcctaagcctaaccctaatcctaagcctgaacctaagccaaaacctaagcctaagcctaagcctgagcctaagcctaagactaagcttaagtctgagccaaaacctaagcctaagcttaagcctaagcctaagcctaaccctaagcctgagcctaatcctatgcctgagcttaagcctaagcccaagcataagcctaattctaggcctaagcctaatcctaggcctaagcctaagccaaggtctaagcctaatcctaagcctaagccaaggcctaagcctgagcttaagcctaaccataaacttaagctgaagcatctgagtttaagtgttcgcctagccacacaaatttcaagtattctctgagttttttatcggaaaattttgcagaaattcaaagacgacttcaagcaaggagaagtgtgggacatgtgtgcaaaagctgaagaaacctacaacacgtgtgtgtggaataagaacaatgaaaaagcacacgagctgcagaaaaaagctggaatcaagccaaaaaagaaaaacttccctaaggcgaaagcagttttgaaaatggctcgaatgaagtcagaaaaggcaaaaaagaaagcaaaaaaggcgaaactggcgaaggaaaagcaggaaagaatcgactttgagaaaatgagctgccaggattgatgggtaaaacggtggaggagactgtctccgaaaaggaaatcaaacagccaactgtctccgagaaggagatcaaacaaccaactgtcgaagagaaatcgaagagccgtactcaaagtgtgaccaaaaccgtgccaattgccgtacagaaaagcgctacgaatccagatttgatggaaagtgaaaagctgattactgctgaagaaaagaccttggaccagactcagatcttggaccagtaactcaagaggcagtttaaatattgatcactcgtattgatttttttattgaatagatggactgaatgaatatgtgtttatttgtgtggttttttaaagttttttgaaaaactagaaagttgtcaactgaacaaatagaccctgtgtattcgaggagatatacagtgatggccaaaaagatatccacttttagttttttttatgatttcgctactatttcaaataagtataactccaaagctaaaaatgctattaaaaaaaatttcaactggtacggtaaagcccgtgattaggtctatatgtttttagatgtttcaacaattcactaaaatcatggcaagtaataaagcggccaacatctcgtgagtccatttttgatgatgattactaaaacgactgtaactcaagggccatctttttaatacgattttaatataatttctcaatgtttgcacatagtaactttgtcctgaaacctccatgaaaaaatatatgtgagctgaaactaatgtctcacacgaaaaaaaatgacctttgagtattacctgtttatccagagatgagaaaaatcgccatatctgccgcgcaaatgaacccgtgggaagagacaaaactactgtagtttttaaccaatttgtgtagatttacgagatattgcgtcatacgtttttatactggaaatttatctatttattgaataaatcttaaaagaaaacacaaaaaattagaaaaacgccgaaaaattaaaaaaaaattaaatattgcggctaaatattgtcgatgacgcaatagctcgtaaatctacacaaattggttaaaaactacagtagttttgtctcttcccacgggttcatttgcgcggcagatatggcgatttttcacatctgtggataaacacgtaataacagtgtctttaataatcatcaccaaaaaattgactcatgggatgtcggccgctttattacttagtcatgattttagtgagtaattgaaacatgtaaattcatatagaccttttcacgggctatatttcaccagttgaaaattgtttgataatatttttagattcgaagttatactcctttgaaaaatagtgaaatcatccaaaaactacagtctctgcagctccaccttttatgttgcagaagtttggtgataaggtgcaacattttaccaagttgagcagaaaattgagcatttttcatgaaacactttttcagaccccggtttcagacaggcagaagaacactttttggcaacacgacttttggttgaaaatagaaaaatagagaagaaaataaaaagaaactagcaagacatattcattctattcattctataacttcaaatacacatcaattttgagcatcggattcggagttggcttttttggcttttttcttggcattccgttcttttcgagctttggctgcggcaattgcaagcattgtggctttttgttgggcttgaattttctcacgcgctgctttcagtttgatgtcaccttttgccttttcctcaagggatgtctttcttgcattgaacagagtttgataccactcgttgtaccattgctgatactcttcgaattcgttgcggcacgttgcttttcctacctgaaaattgtgaggtttactataataacattaaagaaaagatacaaaattatcaatatttcaggcaattttcagtactttttttggtgaaaactgactctaaaattgagcctcagcctaagcctacgactaagcacaggcctaagtctaagccaaagcctgtatctaagcctaagccttagccttagacttagccttagtcttagcctaagcctaggcctaaacctacgcctacgactaaggctaagcctatgcctaagccaaagcctaagcctaagccaaagcctaatcctaagtctaagacaaaggttgtatctaagcctaaaccttagccttagtcttaacctaagcctagccctaagcctaagccaaaacctctgtctaaggctaagccttagctttagccttagtttaagtctaagcctaagactgaccaagcctaaaaagcgtcagtggcgagctaacgatcacctctgacgccaagcctaagccaaagcctaagccaaagccaaagcctacgcttaagcataagcctaagcattagtctaagccaaagcctgtatctaagcctaaacataagccttagacttagccttagtcttagcctaagcctaggcctaaacctacgcctacgactaaggctaagcctaggcctaagcctaagcctaagcctaagcctaagcctaaacctaagcctaaacctaactctaagcctaagctttagccttagtcttaacctaagccgagacctaagcctaagccaaaacctctgtctaagtttaagcctaagccaaagccaaagcctatgcctaaaccaaagcctgagccaaagcctaatcctgagccaaagcctacgactaagccaaaagcccagattttccttacctccataagacgcatcattgctccatagattgcaaacgcatactcttcatctttcacaaataagtttgcgcgcattttcatcagagctttcaaagcaactctactggtaactgagtcgtttttggccaccatttgacaagcgagttccatgtctgaaaattgtgaataattcggcgttggaaaagtctagaaatagatgcttacatgcgaaacatgcggatcttgatctcccatcatagcagtgcacaatcactggcgtcttgctcgcgttcaccatatccaacaaggccagcatagtcttcgggctctctgggatgctcgactttccccatccacggtaccagtagtgattgaaagtgaattccttgagatcgctgaaagttgtctgattgtaggaaaacctagacagtgacttactcaaacttgacaaccactacacgaatctcgacttcatcattgaactccttcttgcaatctgtacacttcatggtgacaccctcaaacttcagctcctccccaacattgtctggaacatacaccgagcacgcatcgtattcgtcatcagaagtattactacgtgggagggtacgctcgcaaagctgcacgacatgcttcacaccctcctgcattgccatccacaagaacttctcgattgtcgagttgcgtttggaaatacgtatcaccgcgtagggatcaccgagattcttggcttgtggagcttgcgtgagaatcatgcacagattgctcggaaatgaaacaaagctcgcgtgaatgtaaccatccgaaagacgttttccgtatcctttgagcgcaactcgattgcctggagccaacgcgttctgtgctctgaaatgttaatatatgttttgaaatatatctgaaagattcttgccaaattagcacaaacctgtgatccattgcatggctctccacccatcttgtattaaatgtcaacgcttccaacttgatgctgataagttcacgattcaaaaaatgcttcagaagatcgaacaatgtttcgggcgtagttttcatcacaaatttcttgacgaaattcacaaagcttacaataaagttgtttgaagacgtttcggtgtacacggttggtaaaatgtctgcaaataattgtaagctgagttttagtcttaggcttaggcttaggcttaagcaggtttaagcttaagcttaggcgtaggtttaggcttacgcgtaggcttgaacttagtcttaaacgtagtcttagtcttagtcttaggcttaggcttaggcttaagcaggcttaagcttaagcttaggcttaggctgaggctgaggcttaggcatagtcttagtattagtcttaggcataggcttaggcttaggcttaagcaggcttaagcttaagctttgggttaggcttaggcatagtcttagtcttaggcttaggcttaggcttaggcttaggcttaagtttaagcttagggtcaagtcggcttaggcctagacttaagctagaaatcatgtcgctcattgctgtcaaacaactcacttttctgaaccggttcaagcattggaacgtctttgaattcatcatcgttgatatcatcctcaacctgaatcggcttaactttttctatctcaaccgttttatgttctgaggggttcggattcggagtcgcattgtccacaactactttttcgttttctatttttgcaagtcggttttgctcatcttttagtttccgtttgtcttttgcttttttttccaattcttttttcttcttctgtctttcattacgcacataaaataatcccacaattccaatagcaatgacaaggatcagtggaggcacgatgtaagaccacagagcccagctgaaaaagaagccgttgtgaaaggaaatattaattgaaactaacgtcgcaaagaaccccttctcctcgggtggtcactcggggtattgtgcacttggtgagccggcattgttgttcgaatgttgctggtttgagctgatgggttgtggtggagctggaggcgtcagtttcttgttgagatttgcaaaagacgtatccaaaacttgaagagcctgctttgagtcagcatagtccttggaatggcttgcaaagtctaatccgatccgatcaagagtttcgaggattggtggaagatctgtcaacttgtttgacttggtcaactcaatgaaggtaatcactgaaataaattaaattttaattttaaactaaataaattattaatttacctgattccttgatagcaatgaagtctcctttgacaccctgaactttcgatgctgcttcaaacacttctgcatgatcagctaactttggagaattcgacggcttcacattgctcacagactggttcaaactagctttcattctgtccaaatcagctcccaaagtggccagtctctgaaggttcttctgatcctttgcatccaatgttaccttcgacatctctttctgaacagttgcacacaataatttcagcttagtcaaatcaattttcatgttcaacgctgcgtccatgctggatattccacgtgttgctgatccaagaactgagaattgacttgaagcatccttgagctcattgagcacattcacggcggcacgctttgacttgatatccttcccttcgatgtactcctttaaatcaaccaactgtgttttgatcttcggaatagcttcagcagttgatttgatggaaagtggcatattggtagattctcggaaatgttgaattgcttcaatcactggtttcacgtatttaatctcttcaatagtgttcagtggactaatagctgtgaagatcttattcacgtcatcaataactttagcatctttcaatccatctacaatactttttgcgatatctggagatttcggtgtagccttgagagactcaattgagtttttcacagcatcaacgatagaaaaaactaaagagaaggctgtagactggttaaaggcacccatgttactaagagcgttagcatccgtactttgttttgagatagtttccatttgactcagtaactgtttgtttttctctgatttcacatctttcagcatttcaattactttttcaagagttgaaatcttagaggaaaaagcaatcatattactgacaaggttcttgattttttttgaatcagtgagtttcaagtcagatagaggtggtagcttgattttgtcgatttttccaactagtgggccaacaattgacggaagatttgacagtttcgtggctagtgaatgaatcctcaacgtttcttttatcatttcacttgtctctatccccaaggaattttcaaccaatcgtgaatactgttcaagattactgagaagagtcaacgagtccgaaatagctcctgcttgtcccacaactgcctccttaacccactgtttacccaaatcatcaattatcaaattgatgtcagatatcccataaggcctgaagaggcctgaagtatgttttggcactgaattcccatgtcttagatgcttatcaataaacatatgtttaagatatttaaagctttgaatactttgcgtccaatttttcgcaaagttacccaaatctttagcactctgtgtgaactttgttacagcagtttgttccgtggttgaagttgaagttgcctcgtatttcagtaatgcgctgtggactgagataaggaatggaaattcgtttgcaatgtttttgagagaaacactcttagaaaacctttctaattccgtactatttagagtgtttacaaatttgacgaaacgccccacatcgtgaaataatcggtcagccaccacatcgctttcgggtccttttctcaacaaggtgatgccattaatgaagtactcacagtttgctaacgcattcttaacgttaagtttatcataatactgaatgaatgactcaacttcttgcagcaacttgtgattggccggaacttcgaagctccccttaagccccttaacattttccgaaatggcactatatccttggaactgtttttcaacatctgccatatcttttccagatgagaaagatttcgacaattcattgattttgtcaacgacggtctttaacttagccgtatcaattgcagcaatttgagaagtggtgacagatcccagattgagcagctcggaaacaagttcttcagatggaattgatttcgttgatagtccttgttgaaggtagattccattgatgatacgagttatcatttgcatttgattaatagacgaggagagttcttctgaaaaatcagaacattcgtaagttttatagcactttcagactctagttactaatttctaggtaacgaactacatagaacactttattatacttatccttattgcccccccccccccactttttctaaaatattttctttgattaaaacgtggcctttttctgagcctaaaaataaacattaaaaaataaagttgtatccacgtactccacgtgttcaaacaaaaatcgatacaaattggagggaacaataaagataagtaccaccctcttgctacttactaaacaggcttatattcaacaactgacataattctatacaaatcttctaacggaatattatactaacctgtagttgcacgacgaaacactttgcgtcgataaagatttatagagaagagattatgaaatcatctgtaaaataaattgtttaattggaggattatctgatagacttacctttattctgcacattagtagtcactattgaaaagtggactatgtaccagatgacagatatcaatgagaatatctctgaaaattggaaaccatagaaaatcttttttttatgcgagctctctgagccttcacaatgctggaaagacaccgatagttaacaattcagaactttctgtgaaacgctgaaaagaagaaacaaaaactcactcatcgtttcgaattgcttcgataaatagccaagcagatgaagaacgaatcgatcaaaaactgacttcggtaataaatcgatttttgatgatttgatcttttttatgcaaaagtgatgtggattcagggcttttggtgaatatcatagttcacgttttaatttgaactttatttagaatttaattagttttaaaaaaaaaattttttcaatattttatttaattaatcgtttatcacgtgtcaaattttaagttgccattttcgttcaaaattattctttttttagcttgttatagatatttaattttatttaacgtattttacgctctcaggacgtggaagaaaaattgatcaactggtacatacagtccgtaatataaatactaccacaaaaactcaatacccaccgttcaaaattcgactgaaaccagttttagtttagtttagttgccaatgaaaattcatcccaaattctttaaaaaagcttttttttttttaataatttgaaggctctcagcgtccttaaaataaattttaagaaatttctcaaaaagttccttcaattttctagattttacaagtatttcgcaataatatacagaaccgaatttattgaaacaagagccaccaggatgggagaaaatgtgtgttgtacaaaacccgtatgggacaaatgtggaatgataagggagacaatacaggtgtgttgattatcgatttgtttttcttcgaaaaatcgaaattttatgggattgagaaaaaatcaataatcgtgaataaggcacatccgtttgatgattcgtttgaatgcggcgcgaaaatcttgtgaaaataccgtataaattatcggatttagggccgagtttaggtaacctgcaaaaatattgattttttaagaaacaaaaaaaatatcgattttcacttacccagccacagtgtaacttgctccagcaccggagaaatttgacatccgcaaattgggcggtatatagagaccaggaaaaatggggtccaacacgcaacgaatgtacctggaaatttgggattttagggtactgcaggttactgtagttttttttttgaaatttagttgaaatttgaaataagcaaaaagagagctttcagaaaagtataatcatgatgaggttttttttcaaatattgggaaagcatgaaaaatttgggtcccgccacgaaaactcgtcaggttactgtagatatacattcttgcaagatttattaattttaccaggtagatcaattatttttctatgtactcaattttgaaataagtgaaaatcttgaaaattgataaagatatggattttcgaaaattttcgaaaattaaaaatctcaaagtttttcaattctatataaacattttatgttgttgctggttttaaatttgtttataaaatcgaagttagcacagtgtcaaaagcttcaaaatgacacccatatcggctactttcggccctattgggctgttttggggtcccgccacgaaaactcacgggttactgtagtctttggaacttttggatcaaaaatatttttatcaactggttcagtcaattttataagttataacctaaaaactagaaaaatatctcaaaaactggcacagttatcgattttcgaaaattttcgaaaattgaaagtttcaaaactttgtggtgagctcaaaataataattatttttgatatgcacgcattgtcagctttaaaaaaaaaacacccatattggctacttttggctcaattttgtttaattcttgggtcccgccacgaaaggaactgtagatatcgtggcgggacccaacataggcaatatgggtgccattttgaagctgaaaacgtgataaattcaaatttctaactggttttgagcagaatttgaattggtttttttttcgattctttcaaaacaaaaaaaaaattttttcaataatttcaaaaattgtctaaaaatcgataactctaaaatgttcccgttacctgtaataattgctagcgttctccacgctttccgctctcttttcatctcattcgactctttcgttcgccgcctcctctttacaattcccggcttgctccgcccattttcctcatcgatttttgtttcctgagtcgtgacgtcaccaggcgcatgattggtctgtgtcattgttcgttcttcttcggaagctgatgagcttgattcattgtggcgtggagggttctggaaaaatgcacacatttttttttcaaattaaaaaaacatttttttttcgaaatttcaaaatttattatcaaaaataaacgcaatattcgaattcagcgcatttttagctttcaaacaacccccatattgcccaaactttgaagtcttgggtcccaccacgaaatggttactgtacttttcgcggtgggacccaaaatgggcggagcctaaacatgatgggtgtttttaggaatcttaagatattgccaaattgggaatgtcctttcataaatattataggcaaaatcggccgagttatgacgtcatttaaaaaaaacccaactttcggaattttcgaatttaaaaaagaaaaaaaaatccataactttgtccgttttagagattttcggctatttttttagttaatttttgtatatacatttgaatttttgtagaaaaataattttgactcaataatagtagaaattacagtaaccaaagggttttcgtggcgggacccaatttcgagtacttcaaagggacatgggtccgtcaaataagagatttcagtcttaaaattgcggattttgagtttattttcatgatagctgtcagtaaagtataatcatgaccagattttcgaaaattcaatgtttttgggtcctggcacgaaatccaaaacttaaaggcatggaaactctaaattggcggtacctagccaatatggggctcatttgaaaggtcttgacgcgctgatttcaaaatttttagttttaaaacaagaaatctaaaactggaaattttaaaactggaaaaagaaaaaaaacccaaaccttgatactattcgttttcccaccagttccgccattagcctgaatatcggaaataactacagccggcggtaacggacactttttcgattttttcggcatcatcgccttcttctcgtcgatggcgtcgggcggcggtcggattacggtacgtcggtcgcgttctcgcttaaaccgttttttggcggctctcatgatcttccagtacacgcaaattattgcaattagtgggatgtagaaggcagtcgctgtggagaaaacctggaaaaaattggagatttttcggttttcgaaaattttcaaaaatctgtaactttatcggtttttgagatatttttctgttttattgtttcaaaatgtgcaaaaagtagtgtaaaacccataaaaaataaaattactgcacaaaatatgaaagtacagtaaccccaggatatttcgtggcgagacccactattatttttggaaaatcttcgaagattctttactttttcagtttttaatattttcgcaggttttttttacttaaaacaagtgaaaactagtctataacttggaaaaaatagaagtcttcaaaaacactgtaacccagaaagttttcgtggcgggacccagtttttccgatttttttaaaatttttgctttacatacgcaaaattttgtttattttgattttaaaaaaatccaacaaaacatctcatttcagacagaaaaaaaaattttccaaaaattaaaaaaaaatttgcaaaaaaaaaaattgcaaaaaattaggaaaaattagttttctcgaaaatctataacttttctagttttgaaaattttcattgatttttgactcaaaaactgcaaaaagttgttcaaaactgcatgctacagtaacccagggaattttcgtggtgggaccccaaaaaatggcatgttgcgaaactagacaatatgggggtcagttaccggtttattctttaaaaaaatataattttccaaaaatgaacaagtttcgaaatgaaaaaaaatttcagaaaaatctatcgaacaaattttcataaaaaattttttttttctaaaaagtattattttttataatttttcgaaagcctcccaaacttcacattttgtagttttctgctccgtgagcacatattctccatatttcagagctcgaataatgctccgttccattttgccgattacgtccccagtggggccaattcggcacactaggaccccacgaaatatttgatttataacattttttttcaatttttctagaattttacttttttcacaataagaaaaaatctcaaagttcaaaccagacctgtgcggcattcggaatttttcggcataacggcataacggcatatgccgccaaaaaattttttcggcatatcggcatatgccgatatgccgtccatttttcttttcggcataacggcattttcggcatatgccgtgaattttgaaatcggcatttcggcatatgccgcgctccaaaaaccggcattatgccggcattcggcattcggcattcggcatttcggcattttgaactattgttttccagttacaaaaaaaatcaacaagatttaaatgttttcaatcaaactcccatgtgctttatatcattaccaatatctaaaaaatagtattcgtctgattttggtatgtgacgtagcgctacaggtatgcacaatttttggctttggcaagatattgagtttgaccggcaatttgtgaaaattttttgcgaagtctcattatgaaattcggtggttttggaacagttttagtctctttaaacaaaatacccacaaactctactccccctttaatgtacacgccttgaaacatattggtgcattttcagacaattttcgagccaagccaaaatttttgcagaaattttccaaatgctcgagcaaaaagcttcaagaaatctcaaaaatggaacaatctgcgtagaaaccttactatttgcacaatctttatgtttcatcggatacacgaaaattatgaaaatatggtttttgacaaaaaaaaaccaaagccaaaaatgcaggaaaaaacgacataatgccgtcataatgtcggcattatgccgttatgccggtcattttctttttcggcataacgtcattttcggcatatgccgtgaattttcaaatcggcataacggcatatgccgtgctccaaaaaaccggcattatgccggcatcggcatatgccgaatgccgaatgccgcacaggtctggttcaaacccttcacaaattttttgctaaaacttattttttgctcaaactttggagcctctaatcgccatttttccggaaatcctgtagattttcagactatagttccggtatatagcttaatggaaaaattatttcatttttaaaaaatgtgtaaattactcacctgatagctgatttgttgacttattaggcatacgtgtgacttcaggactctggaaatttgaattttagggatttttttgacatcaattttgaatttaaagtttaaatattctggtatttcaaatcagcacaccgagagctttgcaatgacacccatattgcctaggttccgcagatttcgaagtctagggtcccaccgcgacggggtactgtagttttcgtggtgggacccaaactaaacgaaacctgggcatgatgggcgtcatatgaaaggtcttacggtggtaaattagaatattaaaattttaacgttcaatatttggaatttaagaaaaaaattcaaaatttggaaaaaaaacttttcttacaaaaaatctgaaattttgttgactttttgagggaaattgttgaaaattcaaattcagcattaaaagagctttcaaatgacacccatattgcctagattttgcacatattgggtcccaccacgaaaactacagtaacccggcgtgttttcgtggcgggacccaaagtgctcaaaactaacggaacccggtcaatattgaagtcaaataaaagtttttgaaaagctaaatctaatttttttgttttctgtcaaaaaattttaagcaaaaaattaaaaaaaaaaaattttttttcgaaaattgataactttgtcaattttaacgatattttgataaattttatcttaaaatgagcacaagaaatatttaaacttgcaaaaaataacttagtcgataaaaagtatcaaaaccacagtaatccaggatttttcgtggcgagactccaatgtttttatgtaaattttcgaaaatcaataactttgccaattttaaacatttttgactaatttttcttgtagaaaaaggctgataaatttaataatttggtaaaaaaaatttgtgcctcaaagaatttcaaaactacagtaatcctgagtgtttcccggcgagacccaagattttcattttcactgaatttttgattttcaaaaagcatatataagtaattagattctgatttttagattctgattttttgctcaaaactttgctaaaaaacctgcctacctgtcactaaacccctcatccttccacccagcaaatggagccagtgaaatgagcaatgaggtgaaccaaatcacagctaacatcaacgttattcgcttcggggtcctattctgcacataacaaatgtctgtaattgaccaatatcgatccagagcaattgccaccaaatggagaattgaggcagtgcagacgagcacgtcaactgaaatccagaagtcacagaccacgacgccgaggttccaggttccggttacggtgaaccatgctccgaggggtgttactatcattccgacctgaaaaattggaaatttgaaaaaatttggggttagaaaaaaggataaaaaattttgaaaaaaaaaatttttttcggaaatttttttgtatttttgaaaatttcccgaattttttttttcaaagttaaaatttagagttttgttaaaatataataactctaagttttccatactgaaaatcccgaaaaaatcccaaaaatcgccaattttaagaacttttcaaaatttcaaggcacccaaaaattttaaaactacagcagccatgtacccattatccaaatttttaaaaatttttaacatttttgagttcagcgcaacatgagctataaaatgacccctaacatgactagaatccgactattttgaaaatcaaagcacctatgcgcctttaaattcaaatttctcgtggtgagacccaatttttgttgaaatttgtagaatactgtgcagttttcaaacttttcgagctttcagaaaagtataatcatgacctggttctgtgaatttaaaatttttgggtcccatagcgaaaattggagtttaaaggcgcatagatatggaaattttcaaagtgtgtggaacataggcattatgggagtcattttgaaggtgaaaacgtgaagaattccaattttctattcattttgtgtgataggaaactggaatttaaaaaataaagtttaaaaaattttgaaaaaaaaaatttttttcggaaatttttttgtatttttgaaaatttcccgaattttttttttcaaagttaaaatttagagttttgttaaaatataataactctaagttttccatactgaaaatcccgaaaaaatcccaaaaatcgccaattttaagaacttttcaaaatttcaaggcacccaaaaattttaaaactacagcagccatgtacccattatccaaatttttaaaaatttttaacatttttgagttcagcgcaacatgagctataaaatgacccctaacatgactagaatccgactattttgaaaatcaaagcacctatgcgcctttaaattcaaatttctcgtggtgagacccaatttttgttgaaatttgtagaatactgtgcagttttcaaacttttcgagctttcagaaaagtataatcatgacctggttctgtgaatttaaaatttttgggtcccatagcgaaaattggagtttaaaggcgcatagatatggaaattttcaaagtgtgtggaacataggcattatgggagtcattttgaaggtgaaaacgtgaagaattccaattttctattcattttgtgtgataggaaactggaatttaaaaaataaagtttaaaaaatttctaaaaaaaaattttttttggggggaaaaaagccccccccccccctcaaaaaaaaggtcaagcttccttaaacaaatattgatagtgtccggagcactctatttccagaaaatccgatctaatttcagctcattcaagtggctaatcccagcaccaggaaatgagcacatcttcccactcgacacagattatttttggatttttgaaaattatttttagacgagtgaaagattttcagaaacatcatttcctttgaattgcaacaaaaaaaagttttcgggtccccgagaaaatccatccatcaacaacaaaaatgctcaatttttcccaaaaaaaaaaaaataattttccgattagcaaatgatgccaattttggacaaaaaaaaagtgcggacaaaaattgtgtgttttgaatttttttctgcaaaacaagtccgaccaaacaacaagacggtcaactgtgcgggtcccgccacgaaaactctcggggtactttagattttattgttgcaagtggaacataattttttctttgagatggagaaattgtctaaaaaatggcctaaaaattagcaaaattgaacaacccgaaataccaaagcttcataaaatttgaaaattgagatgctctgcgtctttaaatattcgtggcgggacccaaaaaaaattaaataggccaaactaggggagattataattttttgaaatatctcagcgagataaatctagattttgtgattgaaaattcaaaattcaaaaatcgaaaatttaaagctatgcacttttaaactacagtaacccaggagttttcgtggcgggacccaaagtgtgccgattttcgccatttttggactctgaaggtatcgaaagttttcaatgaaaaatattttttgtaggcaaaaaaatctccgtttttcctttttttttaaatataattatattttcttgaaattcaacttttaaaaattatgtccaattcaaaatttccagaaaaattaaatatttcccatatcccaattaaagaccagaaatgacgtgattttactgctcgtcgagcccccagttttcctgttttgttcccccctctcggagcttccagctacagctctcaatgagcaaaccacacacccacgggcggtccctgagaagctcctagaatccttaaaaaatccatggagccgcagcccaatttttcggaaaattgaatttggatgacttttctcggcttcacacatgatcccttgtgccgagcaacttggagctcttcaatccgattttcaagtgtatgggtgtatgtgtgtgtgagcacttttagagcataaactgatttgattttgggccgaaaaattccgcagatacccccctccttaccaaaatttgatgattttcggacgcaaattcatccgaaaattttgaattttttgtcgggtttgctgcacactatcagcctcaaaatgagcctttaaattcaggatttcgtggcgagacccaattttttgtgcaattctcaaaaatctggcagtttttgtgaaaatttgaattcagctgaattagagctttcagaaaagtataaacatgctctgggtttgagcagtttgagaattcgggtctcgccacgaaaaattctaatttaaggtaggcggaatatatgcttattgggggccattacagtgacgtcataaattcaaatttgttccagaattatgttttaccgacggtttgaaacaatttttgagggaattaaaaactttcaaaaaaaattttgttggaaaaaagtttttcctcggaaaaactcaccaacaagtcagcgacggctagcgaaaatatcagataatattgtggccgtcccctcaaatccctctccataataattgccaatattacaaaaagattgccgatgaagcaggagagaatgagcaccagaaggacggaggcgaggattacggtctgaaattttgaacatttttcggtaaaatttgttgaaactaggatttttgaattcagcaagtttttagcttttaaatgacacccatattgccttggttacgttgaaattggaaattttgggtctcgccgcgaaaactactgtagtctgtagttttcgcttcgagacctgaatgctttccaagatttgctaaatcttgagataatggatgttattttgaagctgaaaacagtatacctgaaccaatggccgctcaatatcgctgaaaatctcggcgtgtgctggaaattgatctacgagatgggtgccgcgcgccaccgccgacaacagcgtcgccggctgggatgacggcgacgccgtgagattgagaagcgtctcgtcgatcatctcatcgcctcatctggacaaaaaaagtgatttttagtgggaaaaattaaaaaataagaagaaaattgaagataatagagaatatcttgaaaattagcacagttacaaaaattctgtttactgaaatatgttcctttaaaaattttgcacattttttcagttgaaagcttttttctagctctcctggttgtcaacttatagtcgtttaaagctgcgtaaccgagagagtgagaagggggagagtcgcagacggcgcgcgcctctcgtcgtctgcgtctctccctctctcacttgccgcactattttgcgtttatctcggcaaccagcagtgctgaactttgagaggaataatttgttaccaaaaaaaaaaaaatatttggtccaattttcagttttcgagaaaatctccaattcttcaccaaaatatcgtattcctcaaatgttttaaactcaattaggcatttatttttagcgggtcccaagaagcaaggattaggggggagaagaactatagaattggaatttaaaggaattgaggaaatccaataagaaacacacgccgtcttgcccccctccggtccggggattcgtgtgtatttaagagtgtgtgtcgtgtgtgtcaaatgtaaataaagacgaagagggggacaatctgaagacgtggaaaagctcatttatttggcggcgaattcggagaacggatggactagaacgtattcagcgtaatgacttaaataatacagtaaatttacaaattttcactgaaaatttcataaaactcgagttatctctaaatctagatgttctattaaaaattgattgactagcaaattattgctctgaaaattctgcacatttttgcatttggaagttttcctctagcacgcctgattgccgagataaacggaaaacagtggagcgagtgagagagggcgagagacgcagacgacgagaggcgcgtgtcgtctgcgtctctccccctccgtactctctcggcggaggcgctgcttaaaacgcctgtaactcgacaaccaggagcgctagaaaaaagttgtaaattgcaaaaatgtgcaaaattttatgagaaatattttcttagttgacaattttttgctaggaattatggtttttgagaaaattgagattttgttctaaaaaattttttcttaggtgatttggttttgaaataactcgaattttacaagacacattacgctttttggaaaatattttcttgaaaatttgatatttcgaaaaacgaacaaactaacaattctagattagaggtcaaaaattgccaagggcacgaagaagcccttcttaaagtgttgttttacattgcaccacggctctccgagcagcaaaactgggcggagtccggggaggagcagaagccgtgtagtagtagtgtagtggattgaagaaaaaggaaacgacgaagaaatgacgattagaattaggagaaatgagatgaaaatgatgaaaatgtggaaaaagggtagaggaaaatgcacaggaaaacgggaaaaagcaaaaaatcctgttagtaagattaagattcgcacgaattttcaacgaaaaaagcgaaacgctcaaaaatcacatgaaaaatctaaaatatctcagaaactgaaagctctaacaaaaaattatcaactacaaaattatttctctaaaaattctgcacatattttcaatttacagcttttctctagcccgcctggttgacgagataaacgcaaaatagtgaggcgagtgagagagagagaggaagagacgcagacgacgagaggcgcgcgccgtctgcgtctctcccctccctactctctcggcggcggcgctgcttaaaacgcctgtaactcgacaaccaggagcgctagaaaaaagttgtaaattgcaaaaatatgcaaaattgtatgaggaatattttgttagttgacaattttatgctaggaattatggtttttgagaaaattaagattttgttcaaaacaaatttttgtgcgaaaagttcaaacaaagatagcaattaacatttattgatttttcgcagttttgcactcaaaagtaccctacacagaaaaaaggtatgagccggaaattgggaccccttgaaacatgtgagctgctccttccgtttgaagcataagcatagaaaacgtagggaggagccggaaagaagaagacgaagacttcacacattaatccaagagttcaagtttactcacagcagaagaagcaggagcagaaacacacgttgtttgacatgcccgcgggctatcgccggggccggaataagggtcccaaagattagacgaaaagggcgaaggaaaaaaatgttgcgatgagaattacatttttgaaattgcgaagggaaatacaaaaaaaaaactaaatttgaaaattttgagaaaaaaaattcgaaactattcgaaaatccgtaactttttcaatttcagagctataattctggttttggtcttgaaatgtgtcaaattacttcaatttatcaggaaaaataaatgcagctcataaagttggaaaactacagtaccccagaagttgtcgtggcgggactcgtcaaaatatgtgaaatatgcaatttggggtttatctcaaatttaaaatagtgaaaaaaaaatctaaaagatgtgaaaaacgcactattttccatagaaagtatgtaattaaaaaatttgaaaaaaaaaaggttttttcgaaaatccgtaacttttccaatttgagagcttattatttggttttagtctcaaaatgtggcagattactttaatttgccaggaaaaataaattcaactcaaaaaattgcgaaaccacttttttttttagaaaaataataatttttaaaaaaaaatttttacaattatttcttttctaattttgttacttttttctaactcacttaactaatcttacttactattaaaaatattgactcctatttatatactcaatacttcctcattagggcaccaatcagacatgaaatttgaatttgaaatctaaaagataaattttgttctatttttattattttgaaaatattattttcaacaaaatcaaatcatataaaaaacaaatcacacctctaggaatcgaaccttggtgatgaggacgatagcctagctcactatccactaggccatccgggcgcgaagttaaaagcgcgtgtggtgctgcacagcgcggcctagtggctagtaggctggtctgtggcacacaacaccctggttcgactccccaccgaataaaatatttttattttttgttagatgatccccaccttagcacattttaagaaacattagcacattttaacttagcacattttaagacattttaagcaaatattttctcatcttaagcttctgtttttcattctcgactcgcgatagatttccggaaactaatagcacgccgccccaacccctgagacatgacactcagtttcagccaaacacccgtaatgcgaatttcagagatgagagtttcgcagaagtcacgggctccgagaaactatagttttggggattttcttaaggtggggaccccctgagggggaaaaggtgtctccgattttgaaattgagaactcgatttcaagaatgaccgagaaaaagaaaatgtgccgtactgggggtcgaactttggagctgtgattcataggtaaactcactaaccagtaggccaaaaattcaagttttcctaattcttttttaaatttttttaaatttcaaatgcgcacaacttccctcaaaaataagcttatgagatcaattttttttaagatttatagagaatattctcagaatctactttacgacaggaaataacaaaaacaagggacaacaaaaatattgtagcgtcagaaggaaagatacaaaaaactcgataaaaaatgcatagaatgaatggcaaaaacatacagattttgagattttttctacagcgggtgagaaagaaaaagaaaaattcaacttgaatacgacaaaaaatactgcaaaaactgcaaaatatccaataaagtgccctcttttttagtagtcgtcagagggggggaaaagtgtaaatacgtcaactactaactaattcatgtgccctaaagtggtgagcaccagcaaaagattaaaagcagcgaaaaaagggtaaattttacgggaaactcaacaagaaaaatttttggaaaaaaaattttggaattgtttttgtaaaatttgagactttctcatatctttatatttttacagacgcagaatgacgttataagatgaaactaaccgagaaaaaataattgaccactgtggggcttgaactttggtgttgtgcttcatagccaaactcactaaccactaggccaaaaattgaaaatttttaaaattttccaaaattcaaagacgcataactttctgagttgttgagctaaattttagatattttgtttttctattatattaattttcagccctataatttagagacaaaagtggaaaacttttttcaaaatttttcactaaaaatcgatatttttggaaatacaaaacataggccactttcaaatcacagagaaaaaataaattgccacgccgggggttgaaccttggtgttgagattcatagccaaactcactaaccactaggccaagaattaaaaattttcaaatttttccaattttcaaaggcgcataactttcttcaaatacgagcattatatatcattttttcgataatattttccaggattttctgaaaaaattcaaaaacttgttacatcagaatgactaacaagttgtgccaaaaaagctcagtgtctgagctgaaaaaccagtgagcacaagaactccgagaagcttaagcttccggtgttgtgtgcaactccacaaaaaaaaataaatgtatatgatttttgaatttgcgaaaaaaaagatgaaattactcgattgagtgacgtgttgtgtggcgaactcctctgaaaaacaaacagatcaggattagcctttttttaatgaaaaattgagaaaaaaaaattgaaagtttgtagaaaagggtagaaaagtgagcaacaagtttgaaatttgaactgaaactaaaaaaaagattttcccgcgaaaaaatatttgaaaatttttttttctgtcaaaaattggcgggaaattgcagaaaaaattttttctgtaaattcaaattcaaaatttcgaatatttttggcgggaaattcaaatttttgaatatttttttgcgggaaattcaaattttcgaatattttttggctggaattttttaatttttaaaaagtattttttggcgggaaattcaaatttttggattttttttgcgggaaattcaaaaattcgaatttttaaatatttttaggcgggaaattcaaatttttggattttttttggcgggaattttaatttttataatttttttttggcgggaattttatatttttttaaatatctttttggcgggaaattcaaattttcaaatattttttggcgggaaattcaaatttttaaatgttttttgcgggaaattcaaattttcaaatattttttggagcgaaattcaaatttccaaattttttttggcgggaagttcaaatttttaaatgtttttttgcgggaaattcaaaatttcaaatattttttggcgcgaaattcaaattttcaaatattttttggcgggaaattcgaattttccaaattttttttggcgggaagttcaaatttttaaatgttttttgcgggaaattcaaattttcaaatattttttggcgcgaaattcaaactttctaacaaaaaaatcgataagctttgaaaaattagtaggatgaggaaaagggcatccaaaaatgaaaaaaaaattaaatgaatgggatgaacttttttccaaaaaaaaaagtttcaaattgagcgggggagggtgctctttcagtaccacatggggtctaccctatccgttttttttcgaaaaaaaatttacggacggaaaaagtttagtttaacctacttttctgctaaaaaaaatgaccggaattcttcagggggacacgaggggcggaagtatttaggcgctcattttctgtgactttttcttcttcctaaccccccttgtacccattttttttgttaaaaaaaaaacatttttcttgaaacatttttttttcggaagtgaatttaagagtggaacagtagcaggaaacgcttgaaattgcacattttatgtgggttttagttccggaaggaggtgctgagggggagaacgtgcagaattacaattccagcaattgctgaaaataggagttcagaaatgggttcaaaatctggaaatttagaaaaaaaattcaaatttttagtgaaaaagtcgaaatctcgaagttggcagtaaaaaaactttgaaatttttttgaatttggcgccaaatttagtcaaattaatttttgaatttttgaatttcccgccaataagtattcgaaaattttaatcttccggcaaaaaaattaaattttgaatttcccgccaaaaacattctggaaatttggaatctcaaacattgaaataaaaaacattgaaatttagattttagcgtctaaaatatttaaaaatttaatttcccgccaaaaaatattcgaaattttgaatttcccttcaaaaatattcaaaattttaaatttcccgcgaaaaaattattgataatttgaaattcccgccaaaaaatcgacgttcaacgggtcggcacaacttatggcctagcggttagtgagctggtctatgaatctcatcaccaaagttcgacctccgagccggctcattttctttttcaaggtctaacgaacccagtaaaagtgaaaattgtaaaaataaccagcttaaaacgaaaaaaatcgcgtttttttcctagttcaaaacctcaaagccccgccataacacattcacacaaaaattgatagaatgtaatgtaaaccaaagccgacgtgggggccctctcgcttttgttgtgaaatattcattgtattcgatgtatactcttttcttttcccctatagagatatataaatatatgaattcacaatatgatgtctctctctctctctctcattcattctacatgatgatcagaagagtttctgtttgaggaaattgatacttagatgggctacacacatgtttcttcaagtttaaggaacttgtctgaataatttttacagataaaaaagtggttaaacaggaaattttgctcaaaaaaatcactactaaaactcaattccagagaaagttatgcgcgttcgaattttgaccattttttgcgcgcgcgtttttatgaccgactggttagtaagtcagcctaccaatcacaacaccaaagttcgagccccggcatggcaatttttttttctttttttcttgggtacttggcagaaacttttacgttgaaaattgtgaacatttgtctcaaaaaatcggttccaaaattttgcgccaatgactttcagaattttttttacaaatgtgatgtttggcctagtggataaggatttaggctaccaatcacaacaccaaagttcgagccccctgttatcaaggtttcttactcaggaaatcggatgtgcaccaaaaatgtaccttttgttcgtaattccgtatatctcccaatttgcagatattttttgacgaaaaaaaaaattttgagccacaccgggatttgaactttggtgttgagattcctagccgaactcactagccactaggccaaacaatcgcgcgcggaaaattgccaaatttagaacgctcataaatttttttaggattaagttttagtattggtttttccggtggaagttgcataaatttcagtgaaccagaacccaaaaaaaagagccaaacaaaaaactgttggtaaaattttgtaagataagatcttgaaaaaagaagaattttcgttttcgtataactcgatcaaaaactcgaaaacaacaaattcagccaactttctatgatataccggaaaaacagaggaagggaggggaaaaacaagatgaattacatcatcaacgtatagaacacaaacacaaacatcaaaacgatgaaaggcgagttctataggaatttgctaaatttcagacggagatatagttggtaaatttgacagaaaaactttggaggctcctggggtcgaacctgttcccttgtgagccgaaagccaactcgttagccactaggtcatcgcgcgtggcctagtggctagcgagttgggtttcggctcacaaggtcacaggttcgacttccagttggtgcattcttttgtttctcagcgaaagaaggttatattttggtgaaatatcgaaaatccaagagtttcaaggtaggtaattatttaataagactcctcaagctttgcgaaaagaaagttgtcaccctgggaatcgaacaatggtgttgagagccgcaccccgactcactacccactaggctatagcacgtggcctagtggttagtgggttgaactttagtgcacaaggtcgcaggttcgaccctcagttagcccatttatctttttcttggtgaacttggtagtaatctatgaaatcaatcggaaagtgaccgcaaaaaaacccacgcagcaaaaaagtcgtcgtcactcttactgaaaccgaaaacaaaaacaaccaaattaaagaaacccgacacatagctgttcgccggaaaaatttcaagtatttcttcttatagctaacaccaaattgaaaccaattacatcagactcaaatcaagttagccagccgccgccgccgtcgccagcacctcaagttttcgaaaataattgaagtgcgggaacaaaaacaacagagacgtgctggaaaatatgagggaattactttttctactatatttctactactatatagataaacagacaagttttttcttccttttttctgttagggaaaatggaaataaaaaatattttaaaatatttttttttgaaatttagttgagcataacttttccgaaatgcaacatattttttgcaaaaaaaaagagatcactgaggatcgaacctgcgaccttgtgcgctaaagttcaacccactaaccactaggccacgcgctatggcctagtggctagtgagtcggggtgcggctctcaacaccgaagttcgagccacagagtggcaagtttatttttgcaaagcttgaggaatctcgtgaaatattttcctaccttgaaactctaggattttcgatatttcaccaaaaaaagctgttagcaataacaagctcggctttaaaaaaagaaaacaccaactgagggtcgaacctgcgaccttgtgcgctaaagttcagcccactaaccactaggccacgcgctacggcctagtggatagtgagtcggggtgcggctctcaacaccaaagttcgagccccagagtggcaagtttatttttgcaaagcctgaggaatcaccaaactgagaaaaatttcataaaatcgaatccttgtttaatgtcgaaattcaactggctttaacttcgttgaaaattgacggatttcgttagttttacatttaatatgtaagaactgttatggactttattatattacacaaaaatttgcaaataagttgcagaacttcaagttgcgcaagcctaagcctaaggtctatcggaagctataacttacgcgaaaattattcaattgttctaatttttttaaacataagttgtaggaatctagactggcttcaactaaaaaaatggaagttccgaaaaaaaattcatttccgaagaggtatgccaaaaataacatatatacatcttgtcgaaacaatttagagcgcggcgggtagcagaaaaatgaaatttttctggataaaaaaaattgaaatgatgatgttgatgatgatgtcctctttctctctctcatgttgcggacactcattcggacatgtctcggagcaagcagaaaagtgacggctcacttcctccatctttcctttcactctctctctctctctgccctcgtttttttttcttttttacgcataggtaattaggtgggttggaaaaaaatgtcgccaaatcccagggagcccctaaaattggaggcggaaattggcgagcaaaaagagaacaaaaatcaaaatgtctagcggggagtcgaaccggggacccttggagtcgaaggcaaaagcgttagccactcggccatcagtgctcggttaggctggaataaggagcctttgatgaaacttgttactagcgtcggctgcaatacctctacttgtttttgcagagggtcaccatggcatagtggataagaggctcatctgctagaattctagttttaacaccaaagttcaaatccttgaagtgcaaatgttctttttctggctttagacattaagaaaacacatctagaacgaactttttaggccaaaatcggatttcttcagatttctacactctcctaggaatttttgatcatttcgagaggatttggtagagagagagagagagagagagaaagagagagagacgcagacaagtagtacacgggtccttcaattagtagaagaagaagaagaagttttggagaaggagaagacgtgtgtatgtgtgtgaaaagaagatatttttagaagaagacaaggtcccccttcacactctagttagactcgttaaaaagattgagattttcttggaaaaaattgcgctcatctcgtcgtcataaaacaaggaaatgagttgcacacgggattaggtacgcatcatttttttggaatttgagatttgcgaaatacatcaattttggactcaatcaatagaaaatttcattttgaaccagtttgcagttggcatttttcttctagcacatctagttgcggagataaaaggcgaaaactcaaaaacagaaagatgcacgtgtggcgcagtgggtttcagcaggtggggaccagcgcgcaagttcgagtccgcatggtggttttttcttttgcatgctcgactttactggaaaaactcattagcaacacctggaacggcggattttcagtaaaacttggaatattgcgcctaataaagtttcgcgcttaaatatcaatgaggcacgtaaattctggaaaatctcatttccaggagccacgtaatttcacagaatctgcacaaaaatatggcggaggggtaggtttatttacttttttctcctcacgggtttgcagatcttttccacttgataaattgcatttttgagccctcgggcggaatgagccggggttctagcgaactattattctaatttttgttcaaaagagagagagagagagagaaacatataccgtagttcaaaaaattttggaaaatttatttgaaaaaaaatgttggcgctattcaagtgctcgactcgattatccgcggacacaataggctgaaaagcaacgtcatgcaaaaaatgaaaaaaaaaaggatctttggtttggtggaaaagatcggaaagtgcttgcaaaactcggaaaaagagatttcaatcaaagcgggctcgaaccccggagctgtgggtgataggcaaaagtgtagccgttacaccatgcgaggattggcagcgaacggctagagggcggatatgaaaccataaattcttaactaagcatctcaaaaaaaattggcaaaaaaaattgtaattaggttttttcgctttcttctttaaaacaaaactagcttagttgagttttttttgcagaacaccatgttcctaatcccccccacaaaacaacaacctattccgggattagcaacaggtaacatggatcagctggattaaactgtggtgaaaagagtgattttttgagctcaacaattgcgaaaaacaagggattaaacctggaaaaagacgtttttaatcctatggaatcgaactttggtgttctgatcggagggcaaaagtgttagccactaggccacggggatcacagaacggcgcgagcccatggcgcaacaggtaagagctcggactaccgggaaactaaccaaagttcgattcctcgaccccgcaaatattttttcgtattttaattagtcggttaacaatggaaaatttggttttttcttatcattttttgggattttgaaggaaaactgaaaattatgatccaatttctcataatcgaaacttttcaagtaaagagagaaagagcaaaactttttctgcagagaaacaaagggggagggcgacaaaaaacacagaaaagatgagcaaaatgggcgaaaaatgaaaaattgcaccgacttacgcacggcttcttggtggttctctatcgcctaaactagggacttgcaaaatttcgaaattacgtgaattctctagatcagattgctgcgaaacattgaaatctactatttgcgtgcggaaatttgaaattagcgatgaaaaatgattagaaggagcaatgagcacaagagaaagatgtttacggttgcatggaattgaactttggtcggtttactggaggtcggagttgttaccggttgcgccaagggtgaaaagcccccattggcctactggatagcagttttggctttcaataagaagaccaaagttcggttcctttcaacggtaattcctttttgcacagtttttaactgcaaaattctgcaaaacgcgcagcggaaaaggaagaaaaaggacgaaaaacgcgaaaaagagtggtaaaagtaggtgctcgttgaggagtttcggcggggaggagagaagtaccgcgtcactttaattcaatttgtcatctgaccccttccccccaacccccttactcgttttcatgccgaaaaacgacttttttgctctcagttgaggacgcttttagatgggacaagaagggctcttctcggagcaaaatgtattaggtcacgtgagatgatggaagtttgagggggaattagggatattgttggtgagcttaggaaattttcattgtaaaattcgaattctccattagtttttacccctggacacaattttttgggtctgtaactcggaaatttgaattttaaaagttcgcggggtgttactgtagcaccaagtacgcaaacaccgaaaacgtggaaaatgactggaagggatgaacaaacggtaaggatttagaatttagtaataaattttttttttttaagttttttcccaaattaatagtaaaaaataagttcttttttcaaacattttacaaaatttttcaaaaaaaattatttacttcagcttgtcaggtgaagtcttgaagtgcaggtgaaatttttttctgaaaaaaattgaagggaagcaggaagaataagagttccgagaacagtcagaacttattgatttttggttttttcaaacaaaaaactgcgaaaaatgtgaaatttcgggtaaaatcactgtcaaattcgaattttccgtcaacttttatgtatattctttgttttcccgccctactagctcaaaatttagattcgtaggggtactgtagcttcaaaagtacgtaaacaccgactacagtacctcaaaacagcagacttcacggagttttgcagaattacgctgaaaattgatttccaggagtgaaaatcggtaagaaaatcaaatttcgtacgaaaagttatatgaaaacatttagaaatgctgaaaattcaaatttaacttttcaaaattttcaaaaaaaaatttttgaacacaattctattaattttcgcaaaatttcattataaaattcgaatttctcgtaatttttcgcatcatgcacaatttttttgagtctctaactcaaaaattcaaaaattcaaatttcgcggggtggctcggtaaattactgaaaaaaaatagggaaaaaaattaacagaaaaacaaatttttcgttgaaaattacaaaaaaacaaaattttgcaaaattgttttctttcatatttgtgaattttcttcaaattgtcctaggtttcataaattttcattaaaaaattcaaaatttccgtcatttttaatgctagacacgcttttttaaaggttttaaactcaaaaatttaaattttgcacttttcacaattttttgggtctgtaacttaaacatttgaattttaaaaactcgcgaggggtactgtatctcaaaaagtacgcaaacaccgatggcgtgcgaaattaatgcaaattgggttcaaggggtaaaaagtaacagaaaattcaaatttcttattaaaaatactaaaaaaatagacgacaaaggcctaaaattcagttttggattttaccaagtagtactgtagctccaaaagtacgcaaacaccgatggggcgggaaagtgttgaaagttggtctccaggagtaaaaatcgacagggaacccgaatttcaattgaaattttcaaaaaaattgctttaaaaccttcaaaattatgaattttaaaatttaaaaaaaagttcaaaaatagttcgccgatcaaaatcgccccacatagtgggagggatggtttaatccccctcaaccggagcacacatcttatttgctcaagcttggcacttgtcaagcgaaatggtatatttagtttgcttaagacggcccagacacacctttttgatgtaggtggacagctcgaaatggggaaaaactgatcagctaaaaacattttgaatatataaaataaaaccttgtttaaaactgaaattcatggaacttgagtaaaaaattcgaattctacatgactttttgcccttaaaaagtatgttttagcaattttcggtgtttgcgtacttttggagctacagtactacatggtgttatccaatactgagttttagcattttcttgactatttttctgatttttaaataaataattcgaatttcctgatactttttgtaccagaaacgtagtttttggcaatttttcacgccatcggtgtttgcgaacatttggagttacagtaccactccgcgaaattttaatttttgaatttttgagttagagattcaaaaaaattgcgtataacgtgaaaaattacaagaagttcgaattggataatgaaattttgcaaaaattagaggaaatctttgaaaaatgttaaaaagtaaaattttaaaaaaagtccaaccttttttttttgaaaaaaaaaacgatttttgaaagtttttgatcaaaattttaaagtcgccgttacttttcacccagaaaaattttttttttgaagctacagtatccgaagaattttgaaaattcgaaatactacccaaaaaagctaattaaaaatagtattccgagtaaaaaatcacgaggaattctttttgttaacgaaaaaaaaagttttttagaaaaacttgaaaaaaagttttttcccaaattaatagtaaaaaataagttattttttcaaacattttacaaaatttttcaaaaaaaattatttacttcagcttgtcaggtgaagtctcgaagtgtaggtgaaattttttttctgaaaaaattgaagggaaggggtactgtagcttcaaaagtacgtaaacaccgactacagttcctcaaaacagcagacttcacggagttttgcagaattacgctgaaaattgatttccaggagtgaaaatcggtgagaaaatcaaatttcgtacgaaaagtgatatgaaaacatttagaaatgctgaaaattcaaatttaacttttcaaaataaaaaaaaaaaaaaaaatttttgaacacaattctaataattttcgcaaaatttcattataaaattcgaatttctcgtaatttttcgcatcatgcacaatttttttgagtctcaaaaactcaaaaactcaaaaattcaaatttcgcggggtggtactgtagctccaaaagtacgcaaacaccgatggcgggcaaaattgctaaaagtaacgttttagatgcaaaaagtcatgtaaaattcgaattttctactccaattctatgcatttcagtttcaaacaggattttttccaaaagtactgtagtacgcaaacaccgactacatacagcaccccaaaacaccaggctttgcagaattgcgctgaaaatcaaatttcaggggtaaaaatcggtgaggaatttgaaaatcgacatgaaaaatctccaaaatttgggattcaaattttaaaaaagctgtatctttctgaataaagaaaaaattcaaaaaaaaaaaatccaaaaaccctaaaaagtgaccggacaggtgatattttataggtttttgattatgacacctattaaatgacaatttttaacacatgataagaaatataaggagaaagtttaagagaaaaaagtgctgaaaatcagaaactaatgtgcattcaagtgtattgagaagaagaagatactcgaaaaaaaaattatttttggatttttcgtatagtttaaaaaatgtacttcagaattcaaactagaaaaaatattcaaaaataaaatttgaaaatttgaaattcccgccaagaaaaatatttgaaaaattgaatttggcgccaaaaaaatattcgaaaaaaatgtgaatttcccgccagaaatagatatgaatcaagtatattttcagcgggaaaatcaaattttaaaatatttttttcggcggaaaaattttaattttcgaatttggatattcgaaatttcaaatttttttgacggaaaattttttgaatattttttggctggaaattcaaatatttgaaaaaaaattcggcgggaaattcaaattaattaatttttttcggcgggaaattcaaattttcaaatgctttttggcgggaacttcgaatttttgaatatttttttggcgggaaattaaatttttgaattttttggcgggaaattcgtaatttcaaatttttttttacggaaaatttaatttttttaatattttttggctggaaattcaaattctcaaaaaaaaaattggcgaaaaattcaaatttttgaatattttttggcgggaaattaaattttttgaacttttttttggcgggaaattcaaatttttcaaaaaaatttgggggtaattcaaattttcgaatagtttttggcggaaaatttaaatgttaaaatttttttcagcggtaaattcaaatgtttggatatttgttcgatagaaaattcaaattttcaaatattttttggcggaaaattcgaattttcaaatatttttttggcgggagattcaaattttttaaatagttttttgcaggaaattcgaaactttaaatgtaatctagttactgtatacatctatttttcaacaaaagaatcatacacaaaggagtcaaaaatctagacacccccgtgtctatatcatcgcgttgccaaagtgtaagcgatcggatttcttagcagaaaaaatgtgtcactttaaaaaaaaaaaatttttgttttgatttttgaagtgcgtaacagtaaaaaatggtttgaaaaatttttagaaaaattttttttttttttcaaaattttttcttaaaaaaatttaattcccaaaaactccaaattagagccaaatgttcagaaaacggaaaattatgtcaatttgtgacctcttataatcccgattcttaattcctaccagacataaactatttttttgggggaggaaatttttttcttcgaaatttcgccacaattttggtaaattgaaaaattttggggaaaaagtgagaacaaaaatttaacaaagaaaaaggtaaaaaaaaagaaatgaaaaaattccaaaaaattccaaaaaattccaaaaaaccaccgaaattcaaaaaattccgatacaatttgccccccacaacttgtccatcaaaaagtgccctccggcatagagtttcggggctccgcgagcaccaactgtcgccgggagaattttctcttaatttcgccaactatttcctcgaaaaatatcacatttctcaccaattttttctcatttttgacatgtatcaaaaggtcacagattcatgtaatttgtaagatgtgatcgtggaaaactttaagaaaaaattaaaaaattcgatttttctggaaaaaaacatttttttttcaaatttcgaagacgcataatttggctcaaagttgcagtggaaaactaatttttaacacattttaaagaaaaaattaggagcttattgaacaagtgaatttatttttctttttttttcagaaaatccaggaaatttcagaaaaatctagtttttcagaataattttaaggcgcgattgcttaaattaagatttccgggaaatcggaaaattgccggaattgaaatttccggcaaatcggcaaaatgtcggaattgaaattttcggcaaatcggcaaatcgaccaaattgccggaattgaaatttccggtaaatcggaaaattgccggaattgaaatttccggcaaatcggcaaattgccggaattgaaattttcggcaaatcggcaaatcgaccaaattgcctaaattgagatttccggcaaatcggcaaattgccggaattgaaatttccggcaaatcggcaaattcccaaaattgaaattttcggcaaatcggcaaaatgtcggaattgaaatttttggcaaatcggcaaatcgaccaaattgcctaaattgagatttccggcaaatcggcaaatcgaccaaattgcctaaattgaaatttcctgcaaattgggaaaatgtcggaatttaaatttttggcatatcggcaaattcccaaaattgaaatttccggcaaatcggcaaattgccggaattgaaatttccggcaaatgggcaaatcgaccaaattgcctaaattgaaatttcctgcaaattggcaaaacgtcggaatttaaattttcggcaaatcggcaattttttttttggaaatttcaattttaattgacaaaattatgcgcctcctatgaatgttcttacatttattttgaaaaattagcaacttcgttgaaaatatctagaaaacgcggaaaatttcttcaaaaaggaacagttttaagtgtttccgtctgcaaaaactttgctttcaattttatgataaaaatttattttccaaaaataatccaaaaaacttccaatttatccctattatttttccttcacaaaaattaatttctgcatttttcacatcgggcgatcccattttcatcacaacttgaacaccttaaaaccaatccaaatggattttcaacagatgacgtggcattttgctggtgccgccggcggctcccgtggcacattcgacacacaatgtatccccgatttccacactctgagcacacagaacttggagcctgattctggaaaatttcaacataaaaatgtttgtaatgtaatgttttaatttggcatatatatgtataactatgactgattttgaacttcaaaaaccaaaaaaaaatgtttgggtctcaccacgaaaggacttggattactgtaacttgggatttaattaacagtttttgggcaacgaattgaacaaaaaaattgggagaaaatctttaaatttagaaaagttatggacctgatatttccccaaaatgttgtccagtaattttacatcattcagctccacaatcgtcttttcattctggaaaaatatcgattttttttcgaatttctcataacttatctcataagttttgcaaactttacccccaaaaaatagccatccacatagatcagtggtagggaatcgaaaatcaaatccttttgaaattccacatttaatttcagcttttcggctaactctgccacgtggaaattgctgatattgagatctcgaatctcgtatttgactcggaaggcttctaggagttgggtctgagaaaattttacaactatttgatttttatttttgtcttttttggttctttctcgaccgtttttttgagatttttttcttcttcctgatttttcgttttttttaaacttcttgaaatatttttttttttttcaagcctgagcctaaacctgggcataagccgaagcctaagcctatgcctaaaccaaagcctaagcctaaccttaagtctaagcctaagcttgaacctaagcctaaaaccctaaatagcgtagagctgacgctcgcaactgacgccaagcctaagcctagacctaagttaaagcattagcctaagcctaagcattcgcctaatcctaagcctaagtctaagtctaagcataagactaaacgtaagcctaagcctaataataagcctaagcttaagtctaagcttgatcccaagcgtaaacctaagcctaagcgtaagccaaaacctaatttaaagcattagctcaagcttaagcctaagcctaaacatataactatctcgaggccggagactaagcctaagcctgagcctaagcctaatcctaagtctaggtctaagccttagcctaggcctaaatctaagcctaagcctaagcctaatcctaaatttttgaatttttctgaactttttatatttttgtaaaattttcgaaaatcgataactttgcttatttttaaatttttcagctatttttttttcagtaaatattgattggacctctagctacagtaatcagggagatttcgtggcgggacccagtttttttccaaaattattgttttttttttccacattggcatgattgtacttttctgaaagctcgcgatgagctttttggtaattcaagtaatttttcaaaaacaattgagaacctagcgaccatcgacttcgcgtgctggtcgaaactttttttcaagaaaaaattgttttaattttttttttctaattttgatttttttttgagaaagaaaaaacgcaccacatttttgcacctatcataggacctccttaacaccccacatgacgtcaaatacactataactccggaatttccagcatttttcgaacgatcgtccagcttgagcagtgcctttttcaccaaattcttcctaccgcggacacttccattccgcttgagcatcacactttttatagtgcaattgttcaggttttttaggatttcactgcaggaatcctggaaaaaaattaaaattttaaaatttttttttaggtctcaccacgaaaagtcccggctactgtaattttcaaggtttttactcaagatttatattttttctaggttacttaatagttttcaataattttttcttaaaaattaactaataatcttgaaaatgagcagagttaaggattttcaaaaaaattggaatataaaaaaaatttcaaaaatttcaaaaccttataactttattcatttttgacattttttcttggtttttatttcaaaattaagccaaaaactttatatttgtgaaaattaaaaaaattattacaaaatcaacaaactacagtactttgtggctcttcgtgacgggaccctgaaaattttcatgcacgtattgattcttcttttttattaatttaactgaataactgaataatttacaaacaattatagcaaaaactagctgaaaatcataaaattgagccgtgttacgtattttaagaaaatattgaaaattttcaaaaaaactaattttcaattttttcaaaatttcatacctttttgaatttgcaaccttttttgttggtttaacatttaaaatatcaacaaaatcttttactttaaagtatttaacaaaaattcctgaaaatttcagtatctacactaccccgagacttttcgtggtgatacccaaaaaaattcaaaaaaattcaaaaaaaaaaaaaattttttggaaattttttttaccccacatttcttaaatattccaaaaaatttctcaccaactgtaacttcatttgatgaagctccttaagcatttccaagcatctttcagtagaaatcgccataattttcggtataaaaatgagcggctcacagacgggcggtgcaggtgacagatgggtgcgccctttatgatatatttacatatttcttgccaatttatgtttgttcaacctccagaagtgtcaaattctgcgaaaacatacagaaaattttttgaaaaataaccgaaaattaaataaaaaaaatttgagaataataaagtaattttgattttttttttaattttgggtcccgcgggaaaaggctcagtgcactataaatttgttttctattagaagttttgtattttttataactaaatgaattttcaggctaaatctacaattaaaaattgctcaaaaatctcataaattagcaaagttatggattttcgaaaaattccaaaaaaaaaagaaattgttatattcagggtccccccacgaaaagctccagggtactgtacattcagttcctataatgatttttcaattttttttttataactgaaaatatcttcaggctaaatatcaaactgaaaattattcaaaaatctcataaattagcaaagttatagattttcgaaaagtgcaaacattttgcaaaattttgaaaaatccgaaaaattcaaaattaaaatttcgggtcccaccacgaaaattccctgaatgcagtagttttaacacagtttttttttaaattaaaaactaggaaaaatttcaatatctaagaaatttatcgattttcaaaaaaaaaaaaattcagaaaaaatttcaaaaaaaagtttcaaaaaaaaaaattcaaaaaattatttcgctcgataattggtcacagtacatccccatatccaatttgcacacaatctgaacaatcctctgccaccatagtagtaattgttaccgtaaccgtatccataaccgtatccatagttcccatagccatagccatacccaccgtacccatagttaccgtagtagctaccgtagtaactcgggctgtaggatgagtaagaatgatggtggtggaaatgactaccgtaacctccgatatggtgactatggtacccaccgtaatggtggccgccgccatagctatggtgactgtgtccgccgccgtatcgtcgcgtggagcggggttttctgaaaatttttaggatatttggtttcagcacgttgagagctttcaaatgacacccatgttgaatagatttcgtcaagtttgacaattttcgtggtgggacccaaaaaatttaattttttagttttttttgaatagaacaagttcaacctaattattcgaaattcagcaaattgaattttataatttaatagctttcgaataacactcaaattgcctggattgcgtgaattctgaaaattcgggtctcgccgcgatttaaaggcgcacaggctggaaaatttcaaaataggcggaatatagtcaatatgggtgttaaatgaaagttctcaacgtgctgaattcaaatttcatactttaaaacctgaataaccttaacttgcgtcaaaaaaattaattttaaaaaaaactcacgtctcattccctgcgtaacttccctctaaaatctctacatcttcagattttccatcaatttccgtaatattatcgattaatgaattttcaatagtttccgatgcatattcggtggaatttctcaaatttcttccgagaatcgccgaaaaaatcggaaaaatccaaaaaatgagcagtaaaatcggaatttttcgcattttttaaaaaaattttctgtaatcagttttgttgttatcactagttaaatacctactatgtctactataatttccgaccgaaaacaggttttttggtgtcttttggtccatttgtttagggaactacacttgttgtcagcaatggctgaatttttttgctgaaaattaggggaagataggtttgtgatgttataaagtttagaaacgtgagtatttgcaaaaaatttgcaaaaaaaatgttcggaaaaaaattaaagttgaaaaaaaaattttgaaaaaaatttcgaaaaaaaatttctgaaaaaacatttttttaaatcgaatttttttaccaggctacaaaacatcaaatttttgtcaaaaatcaaattcagctcatttgcagctttcgaataacccccatcaagcctaggctccgccttgtttgacccaactttcgcaaattttgggtcccgccacgaaatctccagtggtttcgtagtttgagcaattttctgaattgttgtaatttttctgagtatatctattgattttctgcattgaaaatcaaaaaaatagagaaattatccagaacaaaaggcaaaataaattttcaaaaaaaaaaagctaaaaaattttttttccaaactttttgaaaattcaccgtaacttttaaattttcatttcaactataaaaacatttaaattttcgaattctggctgttgtttgctttcatttaacacccatattgactaggctaagccaattttgaaaatttacaaggctatgcgcctttaaattcagattttcgtgacgggacccgcacaaccaattttcttttttgaaaactgggcgctaaagtatagttttttttgcaaaatcttaaatatagagcaaaaatttgcttaattcaatggcttccatttttgggtcccaccacgaaaatttaaaggcgcagaggaatgaaaatattcaaagttatggtaacctagtcaatatgggtgtcaaatgaaagctcttaacgtgctgaatttgaattcgtgcttgaaaatttcaaaatctcaattttaggaccgaaaaatcaaattttaagagaaaaaatgtgaaaaaaaatgtaaagaattgaaaactggataaaaatcttcattgaagatacaaaaaaaactacagtaacctcattatctgattatcaccattgttttccccatgcacgtccataattctcgccgcgttgtcccatgttacgtccccattggccaaagttgaactgtcgcttcacgattcggctggaaaattgattttttatggagaaatgatagaaaaattgattttctcgttaatttttcggggtctagcacaaaatttttggattttttagctcaattttgatttttcgaaaaaaaaatttttgttcaaaaatgcaatatttttctttaaaaacacacttttctggggtaaaaacgaacgcaaagtttgaatttttaattcaaaatcgtctaaaatcgctcagaaaaggtgataactcactgatattgaatttcgccatgctccactgccaaaaccgatgcgaaaatcgtgaaaatgaagattaaagtggaaaattgcatttttgtgtagaattttgcaaaagttttcagaatttatagtttccgagaacaatgatagtggaactgataagggcaactttcactacataggtggtcttattatcaattcttgttcagttagtagtattattctaggggggaaactggtttgaaatgggtttcacagcaaaaaattgttaaaaattaggaaaattggtggttcctgaaagttgagaaaaatttgaaagtagaattttatgttttccccgagaaagcggagcgaatatcgtagcgccagcttaaaggcgcatcgcctttagtgttcgatgggtctcgacgcgatgaaatctttcctcggccgcagcggcgaattgtcatcattctacgtgttggttccccaccctcccgccccacatttctactattccaaattgcgaagcacgtacgctatgtttttcccctccatgagggcgtctgtcatattccgaatatgttgattctgaactgtaagtcgctgttcagcaggtgagtttatattttccgacatgtatgaccagagcgggcagtcggtgtcggtctactacatacgtaggtcgacccttgtgcctgtttttggtggtaccaggaaacattttcatttttaaacggaaaggaaaaaattacggatttggttcaagggaccagtttacaatttcgccttaatgatctttatttgcagacacgtttgttttgagatgaagatcccagtacgggccgttggacgttggacggaatattctccaaccgtaggatctcactggattgagctacggacggttcgtctataattcgaagtttgaacgacttttttttgccacacaggagtccgaattgcccggtagaagtttggtttgtggtagtggtagaaatatcataaccccagtaatttacgagaaaatttcataatatgcattaatttttcataattaactcataaatctaccagtctgaacacgggcacaagtgagtcgattacagtttattctaagaaaatcgagatgattcagaggtcccagcagaccaattgtgaaatgggcatctatttttaaattaatgtaatatgtcattccagattatgtattatattgcttcagcccacagtcaacaaggcagatcacaggaagtgcccattcgttggattgaagagcacccccgaacaagtcgggacgccgagatgacatcgcgactgcaatcatcgcgtctctccggacccatggaagagaagaaaagacgaagttttgggaacattgctcgaaaccgctcggtccgtaaactacgaagcctattcgtcgcagtgctgacggtagcagggaagttgtttacatgaaatattgagaattgttaaattattcactagacacagtaattcggctcatagttttcagtttctccccacgtcagacaccatcgagaagtcaccatgtgccatcgccgagcggactcacgccgtacaatacgaggaacacaccatccgaggaacgatcgggccgtctacgatactactcggatattaattacccgttttgaaaccttcgaggcccgtttatcacattctaatttgggcgccacgcgcccaaatccctattatttatcacatttatcacgtcctataccacactaaatcaccctataccacactaaatcccaaacaataaacccgtaataccataaaacgcgagtttaacattttagagcggagcttgatcggggaaaactaattctcggagagcgaagtgaacctagaattaaatttttttttaaaattttttttaatccctaaatttgtcaatttttgagattttttcctgttaagttcggctttaaatgtaggcaaaattttgattaaagattgatgaaaactctacagtaccccgagaattttcgtggcgggacctgaaaccttcaaatttcagatttagaaatcaagtttttgataattttgagtttcatcccaaaaaaccacttgggttttcgtggagggacccaggtgcctattgtatagatgccactgaaaattcaaaaaaaaattttattgaagaaatcattaagaaaaatgttgatatatctttttttgtatcttcaatgaagatttttatccagttttcaattctttacatttttttcacattttttttcttaaaatttgatttttcggtcctaaaattgagattttgaaattttcaagcacgaattcaaattcagcacgttaagagctttcatttgacacccatattgactaggttaccataactttgaatattttcattcctctgcgcctttaaattttcgtggtgggacccaaaaatggaagccattgaattaagcaaatttttgctctatatttgagattttgcaagaaaaactatactttagcgcccagttttcaaaaaaaaattggttgtgcgggtcccgtcacgaaaatctgaatttaaaggcgcatagccttgtaaattttcaaaattggcttagcctagtcaatatgggtgttaaataaaagcaaacaacagccagaattcgaaaatttagatgtttttatagttgaaataaaaatttaaaagttacggtgaattttcaaaatgtttggaaaaaaatttttagattttttttttgaaaattttttttgccttttgttctggataatttctctatttttttcctctattttaataacgtgtaactgggaaaaaatttaaaaaattaaaaaaaaagtacaatttcagatagggagcttaacgtccccatccaaatccaacaaatcttctgaaacctccgaacatgcgcccaaaccctccaacccccagcgcttgaatgggggggggggggggtgctgaaaatgagaatttttcgaaatttttgaatttttcgaaatttttgagtttttcatgtaacctgttccataatgacacccatttttcacatttttggtcccgtcacgaagactactgccgcactttaatttgtttccccacgttttgaactttcttcaaaattgacagaaaatttcaaaaactgacagaataacaaattttcaaaaatgtttattttttgagctcctgggatactataattattttgaacttgatttttatttttagtttaattaattgaaaatgaatatatctacattttctgctaaaatcagcaaaatatcttcaaaactgacaaagttattgattttttgaactttttttattcaatttttcaaattattaatttttgggtcccgccacaaaaacttcctgcatgctttagaaattaattttttcgaaaaacgtttttctttgttaattaaaaaaatttctattcatttttaggtttagaattagataaaatttttatagtctcaaaaaaccaaaatcaatcaattgttttatcaattccacagtaccccaagacgtggtgggacctagaaaattccacaaaacattttttttttgcaaagaaggtttgtagacctcattttgctttgtgaaacttttttggaaatttttttgaaaaatttccaacagtttttataccaaaaaggtgattttttactcgctgaatttcaaaatttttgcaacattcagaaaatgacgcgataagacgtgatttggaaaaaggatcggtgttgtttggccaatcaatgctgaaaacttcgttgatgccctctgtggggggcagtggagatctgaaacttgagaacataggcataggcttaggctcaggctgaggcttaggctcaggctcaggcttatgcttcggcttaggtttaggcataggcttaggcccatcgttgggcttaggcttaggctcagttgtgaggtttaggttttggcttaggtttaggcttaggttcaggcctagacaatgctgggatagcgagaaaaaacacaaaaggagaaaatcctaaaaatccagaaaaaaaaagaaaacaaaagagctttaattttcaaaaaaaattatttcactttgaagaaaactgtttttaaaaataagataaatattcaaaactcggaaaaaatgtgtttctcaatatctgaactgttttgcaaaaattgttcttcacctgaacaaactacacagtaattttcattttcttatcattgttacacaaattctcaaattttggtcaaacagaaaaaattagaaaaccggttttttgagaggctgatttctgttccaatttttttttgaaacaaaatttaacttacaaagttgttacttaatgatacctacattatgagcctaaagtcacggtgaaagctcaaaaattgaacaggttatggattttcaaaaaaaaaaagttcaaaggttcaggcaccgccacgaaaagtcccggattactgtagttttgataagttcgtgtatataattaatttaacaagcttgtcagttatgacacctacattttgagctaaaaataaccgtgcaagcttaaaaattggaaaagttatgaattttcacaaaaatttcaaaaaattgaaatttcataaatactaatgtatttttcaaaaaatcataactttgccagtttttgagatttttcactgttttttaggttaagatatatcaactgtttttttaataaacatatttatttattttcaatgttcaccaaaaactacttaattgagggcttgtcatagaaggccctttaaatttaaaaatataattatgtctctgccagttttttggattttcagcggttttttttggcttaaaatgagtataaatatcttttctagcacaaaaatattatttgagtttggtgctcatcacaagcttactgtagctcatggcttttcgtggttggacccaaaaatttcaaaagaataggaaacccgggcaatatgggctaaatgaaattattgcctacattttaagctaaacatcagcgtgaaaggttgaaaattgaaaaatttatggtatttcgaaaaaaattaaagcattaaattttccaaaaactgactatttttaagttttctgatctcaaatccacccaactaatttttcaagcaagtgcaaccaaaagaaacaaaaaaaaacaaatgtcgaaaaaaccggttctcaaatttcagatgtctcgtgtccccgcgtttccaacttttattggccaaacaacactgatcttaagccacgtctaatcacgtcatatcaagagtctagccacgccccgaaaattagtgaaaaattaagaaattcagcgagtaaaaaatccggttttttgggtataaaaaccatgtaaatttccaaaaaaattaagaaaattaaaatgaggtctacaagccttcttatcttattattctgcattttagctaccgtatttagtgctccaaaggctccggagcgaggccagttggctcaagctgagcaagtgcagggaccttatgatgtagagcttgatggagctgatgagtaagtgttataaatataaaatattttttttccgaatttctgtttgatattgtaatagaaattaaattgaaattgaagagagcttcaaaatgacacccatattgcccggtttccgttagtttcaggatttttgaaaattctaggtcccaccacgaaaagccctgggatattgtagcttttggtgagcactaggtttatacatttttattggctagaaaaatattttttctatattttaagccaaaaaacctcttaaaatctcaataactagagaagttatgatttttttttattgtttttttttaaatttatatgttcttccatgaaaagtcctgaattactgtagtttatgttgggcatcaaatgaaattaaaaattttgattagaaaaacaatttatctacattttaagccaaaaaaaccgccaaaaatcttgaaaactggcagagttataattatttgaaaaatacattgatttttcaaaaaaaaaaatcaatttttaaaaattttgaaaaatcatagctttttcaatttttgatattttttctttattttttgcgtggaatgtagatcatatatttttctattgcaaaaaattaaattttcaaaaatttgctcctaaactacagtaccctttgacttttcgtggcaagacccaaaaaatttttaattttattttttcggctttattttcgaaaattaataactttttcaatttttgagattttctgttattttttgacttaaattgcaaataaaatttttaatctttatctagcacggcaaaaataaatgaaatttttttggaaaaatttggtctcaaactacagtaccccaggacttttcgtggcgggcattacaaatccaaaagttcatttttaacgaagaatttaaaaacaatctaattctaacattttcagcgcacctcacgatcgatccaaacgatggggaggctggggatggggccgcccgatgtggggaggcggttgggggcgccgcggatggggtggcggctggggacgtcgtggatggggtggttacggtggatacggtggatatggatggggacgttaagcaacccgcatcaatcgataatttactcttaattttgcaattatttatcgcaaaaaaattattataattttgtttctattctaatccaatttgttgtatcaacatgatttttttcgaaacttttcatgaaaaaaaaacttataaataaacttgtctataatttctttttgtgggtttttttcatattgagcttcaaaattagtgcaaaaaatccaaaaactcagagtctttggggctttgggtcccgccaggaaaagtcttcgggtactgtagttagtcaagactatttaatattttctaatgttttttccaatcagctaaaatattgttctatgtttgaaaaaaactggtataaaaatcatggaaattaaaaaagttatgaatttttgaattttcctaaaaaaaaatgctttttggctttttttcaacattttttcaaaaattcataatattcattataaagattttcagctaattttttttcacagttaggtgaaaaattttttcatttagaaaaatttaagaaaatgaagcaatttctcaatggtaactgcaccgaaaaacatttcgcggtgcgacgtcaaaatttcacaaatttccaatttttcgaaagttttcgaatactcaaaaattattttattttcaaggtgtttagcttcgatataaataaacaaaatttaaaatttattccataaaatctcttttcaaataaaaaaaatcagccattccattgaaaattttgaaaattcccagcagcagtaaaatcatagggggcggggtttaaactccagaagttttccgccccaaattgtgcgtaattcggctgataatctggaatcggatagtgctgggcatagcttggctgaaaatttggcgggaaagcttgagaaaaattcgaaaactgatcaaaactctgataattttgagatgtgaggagcactccgatctcttggccgccaccccgcccctttttcgtggtgtgacccaaattttcggatgacatagatagtgtagagtctggtgatgaattggacgaagttgtcgataatggacgtttagttgatgacgtggcatttgacttgatgctctcacgaaatccctgcgcgaatttgttcttttggacctttagctgcttgactagctcgctctgaaagtatgagactattgtaaaattgctgaaatttacataataagcgaaaatcaagtttttatcacgtggcctatcttttgcaaaatttggttttctaggccaccaacttttttttcgagctctcttgaatatttcgctggtattcctttaatgttgcagaataaaaaatttatcatatagaaaaaactggccaaaaaatccaaaaacaagaatggtggcctaaatttttcaaaatttggttttctaggccaccaactttttttcaaattttctggatattttcaatgattttccgttaatattaaaaataaaaatcatgttacagaaaaaattggctaaaaaatttagagacaagaatggtggcctaaattttttaaaatttggttttctaggccaccaacttttttttcgagctctcttgaatatttcgatggtaatcctttaatattgcagaataaaaaaatttatcatatagaaaaaactggcctaaaaatctaaagacaagaatggcggcctaacttttgcaataattggttttctaggccaccaactttttttcaaattttctggaaattttcaatggttttcgttaatattaaaaataaaaatcatgttacagaaaaaattggataaaaaatttagagacaagaatggtggcctaagttttgcaaaatttggttttctaggccaccaactttttttcaaattttctggaaattttcaatggttttcgttaatattaaaaataaaaatcaagttacagaaaaaattggataaaaaatttagagacaagaatggtggcctaagttttgcaaaatttggttttctaggccaccaactttttttcaaattttctggatattttcaatgattttccgttaatattaaaaataaaaatcatgttacagaaaaaattggcctaaaaatctaaagacaagaatggcggcctaacttttgcaataattggttttctaggccaccaacttttttttgcaactttcggttttttttttcattttatctaatctctatctgatgtaaaaagagtcgttttttgaaaatttggaaattttcaggctatcccaataaaacctcacctgataagctgtaacggcaataaatttggtttccgggaactgaaatttgccgatctgattgtgtgcaccgacaggggaaatttcgtaaatgttgagcactggcatgtactgacgcattgactgcacgcgaatctagaaaatttaatttgggaaaaaaattgaaaaaaaaattttaaagaaattttttcaaaagtttttttgtttttaatattttctaaaactgacaaataactatttactaatctatattcttagtttttcctgaatctcgtagtaaaatgatttgaaatttcaatttttcagtggaaaactaagatattcaaattgaaactgaaatatctcaggaaaaaaattatcgattggtctgataatgtaacaaaaacatattcaaatctttatcttaaagataaaaaagctttaactcatgtgctaattttgttcaaaagttatggtgatttataaactgcatgtttctcgagatgcctccccccccccccctcccgttcaataatgtcaattaatccaggcggtcataaaactttacctgtcaaatttttaacctctaaatcctcaccaaatccctctaaaatcaatcaattcctaacctgtagtaacctaataatcctttgttttcctatatcctaatggatacctctcaaaaggtgtgaggaggcaggtgcggtctcttgggaagagttgcgttttatgaccttaaggtgtgtgtgtgtagattttctgagcgtatgggcttgtttgagatgtttttaatgcaaaaattcaaaaatttcacagtttttcacataaaaaacccatgtttctactagtttcaccaatattttgcaggggttgcaaaagtcgaattttatatatctagtagctattggagaggtttttaatgctaaaaatcaaaaattttaacgtttttcacgtttaaaacagcggttttttagactttttttagaaaaaaaataccgctgttgcgagttcacaattgatgagatcttcagagaaattaggttttgaggaatttacactgattttgcacgcttgtcatttttgaaattcatggtttgcagcattttcacacctagaaatagtagttttgcaagtttaagctaatttttgcagattttgaagacttcccattgtcagatcaactacgggcatgatcttctggaaatttttggttttctgcgcttatgggctcaatttagaaatttttgaagcaaaaattagaaaatttcagagttttttacgtctgaaccttatttttctgctatttttaccgatattctgcagggtttggcgtcaactggagccacaacctcacgaaaaattgagttttataattttgagatgtgtttaaatggtttttaatgttaaaaatcgtaaatttcaacgtttttcacgcctaaaacacatttttccagccatttttactccgatttgagcggttttcaagactttttagaaatgtatcccccttccccccgactcccccactgccagccaccacaaaaaggtcagctcgccgagcaacaacaaagaaactgtaattatatagtgctaatggccgcataaaaaagggtgttaatgtaaaatatttgcataccatctgatcacttttctggagggcatcctttgagttggtgagtttcagcttttccagtttcaggcctcgttggaggagttctcggcctggaaatgtgttactttgaggtgataaaatagtgctttagtgtactgagaagtactaaggttgtacaaatttgagaaaaaaaattaaggaaaaaaaattgttgaaaaaaaattttcaaaaaaaaattttttttggaattttttttgggatttttttttgtctagaaaaagtcaacttttcccaaatttttgttcaaaatcacataccacttttcattaggaacacctcattcggttgaaccatttcttcctgaatatccagcgattcccaccgtcccgcggtaaactttagcttttgataggaaattggctccattgtgacaccgattttgtagttcaagtgctcgcagagccctttgaatgcaaattccaatattggaaacaaatttctgcaaaaaaatattgaaaactgacaaagttatggattttcgaaacttttcgaaattctaaaatttcaagattttgggttttaccgcgaaaagacttgggggctactgtagttttacaatttttgtatgattttataggtttacaaaaataaacattttcagatctacaatttaaggcaaaaatgagccgaaaatctttaaaactgacaaagttatggattttttaaacactaaagtccattaatttcccaattttcgacatattaattccaatttttcaaattcggtggcctaactttccgaaaatgtagttttcttggccaccatgcaataggaggtgtcaactgtgaaattttacaatttgcattgttcaatttacgattggtggcctaacttttgccataaattttggttttctaggccaccaaacaaaaaagctcggccatcacagataaaccaatgattttgttgatttagatgaacatttagctgcatatcttctgaaaactactcaaaaaccagggattgaaaattggtggcctaactttttccaaaaatttgggtttctaggccaccaaacgaaaagttcgaccgtcactgaaaattgaatgtttttttttcttttccgttgcaagttttgaaacagaaaaaataaagcagttgaaatatcaggaaatgtgtgaaaaattcaaaaactggcgttggtggcctaacttatgccaaaaatttggggttctaggccattattcaaaactattcaaaacttgtgaagaattgttttaaatatgaattttaatattgaagaactagaccaaattgctcaaaaatgacccatttgaaatcggtggcataacttttggatttctaggccacctgaggcaatttcgggggtcatttgaaagctctcagtggtctgaaaaagaacgtaccttccaattttcgtaataatcatctcattacactgcgaatcgaattcccgccacaatgatttttccataagcgccacgtggcattgcatgctggaaaggtataccaaaaaaaatttgagactgaaaaaaatttagtaataaaaattttacaacaaaatcgcgaaaaaaatgactctagaattgctcagaacattataggcggacccccgcctacattcgcaccttgaaaacgccactgacattctgggaagtaactgaccccccttgaaattatgcgtacctcctaatggaatagttacagtgtgaatggatcaccccagatgacgttgagattttggacattttatttttggcatctgcacaaatattgtacctatatacataaactaggctgtgcctatttttaggtctcaccacgaaaactacagtacccctggggtttcgtggcgggacccaactttgttcaaaattcacgaaaatagggtgtgttgggggtcgatttgaaggtctcgatgagataaatacgaattttaataatgcaaatttaaaaattaaaaattgaaaaaaaaaattgtttttttgaaaatttaaaatactacttttttaataaattttttaggtgattgggtactgtagctttcgtggtgagacccagaaacttcgatatgggccgaattaggccgaaattggtgtcattttgaaagaaatgatgagctgaaactgaataatttagtaaaaattctcaaaattttcaggctctggctgaaaatttcaaaaaaaaaatttttttttcaagaaaaacatttaaaatttcataactttgtcagttttcaagatttttccacgatttttagctcaaaatgtgcccaaattttatgctcatcacatatttgactggaactttcaaaacttcccgtcaaaaaaccgcccacacaccggtaatctgctccgtttgcctgttaaacagcaaatcgtgagcatgaacgtattgatgtggcagtgaagccgacacgatgacgtcaccgagccgagcatgcaacgtggcgcggccccgacttctggagctaaaaactaatttttctgaagctaccgtaatcatacagtactcctaccgtaccactattgtaccactacagtaccccgactatatccctacactaagcccaactcactatccctccagaagccaaaacgtcacagactacaaagactacatagactacaaactatggacaaacggaataagcgctttatatatagtaaacgatatatacaacaaagattagacaaaaagttcgggccccaccaccacgaaaagtcttgggctactgtagttttggagtaattttgtatgattttataaattgttcaaattaaaaaatttcagatctacaatttaagacaaaaatgaaccgaaaatctttaaaactgacaaagttatggactttcgaaacttttcgaaaatttcaaatttcaaatttcccaattttctagattttcatcctttttttttttttgaaaaatgtatgtagatctaaaacttatcaaacctaaaaaatgtaaaattaccgaaaaattggaaaaacaaaaacttttggtggcctaacttttccatacagtcggttttctaggccaccaaacgaaaaagtttgcccctcactgaaaattcaatttttttccttttccgttacaagtttcacaaaaaaaaaccgcttgaaatcggaggaaataaaccaaaaaccggtgatttgaagttggtggcctaactttcgcaaaaatttcgttttctaggccaccagctgaaatctttaaaattgtactcaattttgccattttttatactgtgttatcaaaaatggaacggaaatcaaccaaagacagtgaaaatatagaatattaaaattggtggcctaactttctcaaaaatttaggtctctaggccatcagatgcaaaattttggccatcactagtaaacttgacgttttcgttaagttggttgtaatattactgggaaaaactatcagaaaatatggaaaaattgccttaaaccagcattttaaagttggtggcctaactttcgcaaaaatttgggtttctaggccaccaagtaatatgggagtcatttgaaagctctcagtgagctgaattcaatgggaatgggtcggctttctggaattgaaaaattttctaacaaaaaatcaataaagatcgaaaagaaattgtaatttttaagattttttcggaaaatttgcaaaacctttgctgaaaaccctgctccattgtactcatctcgtcgagacctttcaaatgacccccatcttgactagattccgtcaattttttcacaatttggggtacagtaccccttcgtggcgggacccagaaatttcaaagttggcggaatatagtcgatatgggggtcatttgaaagctctcagtgagctgaatccaatggggatgtcggttgggagaaatttctgaaattaaaaaaattctatcaaaaaaaatcaaaaaaaaaatcgatttattcataaaagtgaaatagtttctttacaagtgagtgtttgctaatcaatactatgcaataaatgaacacaaattttttaatttccattggaattatcgatttttccctcgggaatttacttctcagaagtctcggaggcggtggctgcttccacgtaggccgcctgagcatctcgttttttcgattccatctccatttgagcacgttctgtcgaaaattggaatccggccatttccagaagagttttgtccgggttatcgtcccaatttccgggcagtggaacccgcttgtgcttttcagtctgaaaatttttgaaaattaggggtaaaaattgccaaaaatatggaaaatttggagcaaaattttacgattttcaagttaacatcaattttaaattcttaaaatgatatataaaactgttaaaaaatcactgaaaatggccgaaaaaccacattttcagattggtggcctagaaatcccaaaagttaggccaccaaaattttgtttcgctaaaattaaaccaaataaggcgtgacaacacgattttagcatcttaatattatataaaaatgcaaaaaaaatcaagaaaaatggccgaaaagccacattttcagattggtggcctagaaatcccaaaagttaggccaccaacttttttccacaaaaagtttattctaggggtaaacaagagtgaaaaactcgatttttaactcaaaatttgcgaaaaatcacaaaaatgtcaagtggtggcctaatttttgcacctggtggcctagaaattgcaaaagttaggccaccaataaattttctagatttttttttggtttttccatgattccacgcttaaaaagttgagaaaaacccgttaaattggcgaaatcacaaaaatttcaagtggtggcctagaaattgcaaaagttaggccaccaataaatttttaggggtttcacaagtttttacaaatatttaacaacaaaaaataaggaaatcacaaaaaaaaccgttgaaaccgcaaagatttcatccggtggcctagcttttgcacctggtggcctagaaatttcaaaaactcggccaccggtagctgtttcatttttttggtcgaacaaaaactgaaaagaaaaacggaaaataggctgaaattacaagaatttcaagtagtggcctaacttttatattgtgtggcctagaattcccaaaagttaggccaccaacttttttttctacaaaaacatttattataggggtaaaaaaagtgaaaaagataaaaacccgttaaattggcaaaataacacaaagggtggcctagcttttgcacctggtggcctagaaatcccaaaagttcggccaccaattttttttcggcaaaaaacactttccaggggtaaaaaagagtgaaaaactcgattttccactcaaaatttgtgtgaaaaatcactagaaatccgattttttccatatttttacctgctgcttctgccaatttttgagtttctgctgatcggctagagtgccggctcccgcacagccccaaacttcaatatctagaatctcatcgaaatccttttcgattttcagctcatttttgaaacttaggccataagccgacgagcggagcttcaaattgcaataaatcgagttggctccgtcgattcttcgaatattcggcacaatttcgaagaaactagtgaatgtaccgccaaatcgattgccagagtgcctgaaaattggggttttttcggttaaaatcgcgtccgtggcctagaaattccagaaactcggccaccaataaatttttgaaggtttaaacagtttttgcaagaacgtcacaacaaaagctgaaaaaattacgcaaaacagggtgaagttacgagaatttcaagtcgtggcctaacttttgcacttggtggcctagggattccaaaaactcggccaccaataattttttgaaggtttaaacagtttttgcaaggatttcacaacaaaaactgaaaaaattacgaaaaatagggtgaaattacgagaatttcaagtggtggcctagaaattagaaaaactcggccaccaactcaaaatttcgggtttttattgttttttttttcagcaaaaattattaattttcactgaattgatgtgaaaaacacagctggcctaacttttccaattttctaggccaccaggtgcaaaagttaggccaccactgtaaaaagtcgggttttcggccgatttttctgattttttcggcgattttccagttttgagcgcattatcagccaggaaattcaaaatttttcccaaaaatgcccagattttttccatttttcctcaacctccactcctgatcagcggcgatcaccacaacacggccatctttcattcggaaaatggttactgtaggtccacgatagtcgaaaacgagggtctcgaagcgatttgtgctgattccgtgttgaagtgacgtgtagagtggagtccagtggctttcgcccgacgtttcggtgggttttgccggaaaatagacggcggggagtgatgattgtagataccacatttggagaggtgacagaatgtctgaggagtagtcagggttgatctggaagaaagtttttaggaatttttaaaggatttttgaaaaaaaaattttggtccaaaaaaaaatttttttttttggaattttttattgcaattttttttccagcaaattttcacatttttcacttaaaattttgaattcagctcgtcaagacctttcaaatgacccccgacaagcctatattccgccaactttgaaatttccgggtcccaccacgaaggggggtactgtagttttcgtggcgagacacaaaaattttcaaaattgacggaacccagccaatatggggcttattttaaaggtctcggcgagctaagttcaatggagcaggttttcagcagaaatttgcacaaattttcccgaaaaagatctaaaaattacaattttagtgtcagtaacagccgaaaccacacgattttggacggcttgcgtgaatttttcgcaattttcccgtcgccaccggattatcgattgagtcgcctcatcgcctgtttttccatctgtctgaaaagctaaaattattgaaaatcagtgaaatttcgtgtaaaaaaatcaatttttccccgaaaaagtgtgaaaacccctatcgaatacactttaaacaccaaaaaattggccttaaaaccgaaaaaatcagcccggaaagtcggtggccgagttttgggtttataggccaccaagtggaaaactcggccaccactcggattttcgccgttttttcgcggaaaattgaactttttttagccaaattttcaaattttaactctaatttaccatttcttccaccaaaatcttgataaactgctcatcgccctgaatcgccccggcgcccgccgaatctgagcaaactttgagaaagtggtgcactggttggagaactgcaagaaaaaatggtgaaaatttgaagaaaaaccgagaaaaatggcctagaaacccattccgtggcctagttttccggaattttgggtttctaggccaccaactcaaaaatggtggttttcttgcaaatttttcggaattttgactgaaaatatgtgaatttattggaaaattactgaaaaatgcaaaaaaatggcctagaaacccattccgtggcctagttttcgcgaaatttgggtttctaggccaccaactcaaaaatggtggttttcttgcaaatttttcggaattttgactgaaaatatgtgaatttattggaaaattactgcaaaatgcaaaaaaatggcctagaagcccattccgtggcctaattttcgcgaaattttgggtttctaggccaccaacttaaaaatggagtttttcttgcaaatttttcaaaattttggctgaaaatatgtaaattggctggaaaattgttgaaaaaagcaagaaaatggccttaaaaacccaatccatggcctaggtttccggaattttgggtttctaggccaccaactcaaaaaaggtagttttctcgcaaatttgtcgaaatttcggttaaaattatgtaaaatagctagaaaattgctaaataagagaaaaacatggcctagaaacccgccccatggcctagttttcgcgaaattttggtttctaggccaccaacttaattatggtggttttattttaaattttccggaacattagctgaaaaaatgtaaatttgttggaaaattactgaaaaatgctaaaaaaaatggcctagaaacccactccgtggcctagttttcgcgaaatttgggtttctaggccaccaactcaaaaatggtggttttcttgcaaatttttcggaattttagctaaaaatatgtgaattagccagaaaattgttgaaaaaagcaagaaaatgacctagaaacccactccgtgggctagtttttgagaaatttggatttctaggccaccaactttttttcttggtttttcgatcgattttttgacgaaatcttcggttttttcagcgacttcattcgaaaatcctcacttttcacataaatatcggtggaagttccgtataatggcgtgaatttgtccataaattgctggtgagtcactaaattcgaatttgtgtcgcctgtgaggtatttcatgagacttcccgatagatcttgctggaaaatgctctgaaacttaaactttagagaaataaattgaaaaaatcgataaactttaagtttttccgctgaaatttcattttttccgtcggaaattcgcgtgaaataggcttcaagtgttggatttgaggctttttcgatttccgagccaactttctcggttttcacatcacttttatgcttgctactatcgtttcccatctgaaaatgcggaaattttgagtttttaaacttcaaagcagaaaaagtatattttttcagcgaaaaatacacgaaaatcagtcacttttaacttcctgatgcacattttgcggtggaaaattgcattaaacagcgaaaatcaccgattttcgcgataaaaattggttggaaatgataaaaaatgtggaaataaatttatttttttgaatttttcgttccaactacggtacgcaagtacgcaaacacggtcacgcgaaaatgcggacaagtggattttttcatcattttatttatttttcgagcatttttcttcgattttcgctggtttttaatcaaatttttcaatttttttgctaaaaaagttatttttctacttatttccagcaaaaaccatgattttcccgggagccggtggtccagaactcgacaaaatggcgtcggaaaaggtgaagaaggatattggcacgtttatcacgtttggactcctagttgaagccggtaagcatggaaaaaggcgaaaaaacgaagaaaatgagcggaaattattgaaaaaaatcgcgaaaaattggtttttcccgaaaaaaaagcgaataagttgagaaatcgtttaaaaactcacgatagcatccattttctgaattattttcttcatttttgtcaattttttcaagaaaaaacacgaaaaatcatctattttaacccgaaaaacacgcggaatcgatcaaaaatcagcaaaataacaagaatgacgtcacttttattatttatttattctttcagccgcattcgccgcccactactttggaatcgacggaattctcgtttaaatcgattttttggctagttttttgttagcattatcggaatttttgaataaaaatcaaaaaatcagtggaatttgcattttcaacggggaaaaacggattatttcgcggaatcctcagttcccgccaatatttgcggcgaatttttgcagattttcgtgttcagaagcctgtggagaatgatttattatacgcaggatattgaattttttcagattttcccaggaaaaatcgacaatctccggtggctttcagcggaaattaggctccaacacgttaattttggactctggatgaaaaattgaatgttttttagttttcgggcggtgtttgcgtacttttgaaagtacagtacccctaaatttcgaaaatttttgatttttgagctgtgaacccttgaaaaataagattttaattatgaaattcggaatcagaacgtccattctaccctaccgaaaccaatttttagcccatttggacgcaattccgtagagtctggtgccaggtacgcaaacaccgaggcgttgcgtactttcggggctacagtaacccggaattatttattttttagctagagactcggaaatgattgaactagaggtgaaattcgttgagaaattcaaaattttcattaaaaatttggaaaaatgaaggattcgaggtgaaaattcggttttatcaattttaacccgaagtatttccagcttcccaatttttctcaaaattttcattatcaaattcagtttcagcatatccgaattaccctagcaatcaagtttcagcttatttggacgcaattccgtagaatctggtgccaggtacgcaaacaccgaggcgttgcgtactttcggggctacagtaccctggaaattcccaagagtgagctagaaactccataaaaacaaaattagcagagaaattttacagggaattcgaattttttgttgctaaatctagaaaatcacaatttcagcgacaaaattggaactttaaaatttgaaacaaaatttcacacatttccaaaaattttcaagcatttttagcattaaattcggaatcagcacctctaatttaccctgactatcaatttacagcccatttggacgcaattccgtagagtctggtgccaggtacgtaaacaccgaggtgttgcgtacttttggggctacagtaatctggaaattctcaaaattatgctagaaactcaaaaaaaaatgctgccagaagtgaatttttatgaagaattcgaatttgttactgaaaaatttgaaaaatagaaaattgggtgtaaaaatatgaaatttttttttacccaaaacgtattgattttttttaaatgtttttttcaatattgcaatgaataaattcaaatttccctttgaattttgtctaattttcgaatttttcaaaatttcccgcctatcttagagatcatcggtgtttgcgtactttttaaggtacagtaccccgaattttccgaaaaactcaaatttcagctaggaaatcatgggaaaaaatgccaaagtagagtttttgtaaaaaattcattaaaattaatgataatttttgggaaaaattgaaaatacaaaaatttgtgaaaaaaatttcgaaaaaaaattttttttctattttttttccaaattactgaactatcttcgactattagccttttatttcaaacacgtcaacgtcttctaaaaaaagaaaagaaaaacgagagaaggcgtcaaataatttccttcgtttttgccggccaactcccccggggcgttggtgagatgctaaaaagaatggcgaagtaacttttctggtatttatcttttcgttcttgttattgattatgaatagttgtgtttttctttttagttttgagaaaaaaaattttgaaaaaaatttgaaaatttttaaaatttcaaatttcttgtcaaatttcacttttaccttatttttctgcgattttctagctcaaaatttaaagatatcggaaatgttgggttactgtaccttcaaaagtacgcaaacaccggctgaccttaaaagtgataggaattggctagaaattaagatatagaagtgaaaattggcgtagaattcaaataaatatgcaaaaatttttgaaaattgccagaagttggagaaattttgagttgaaacttgatacttaaaattttagcggtaaaatttagttgttcaaaaaaaaaaacgttgtttttcaaatttttcagcaaaaaattcaaatttcccgtaaaatttcgcttttggcagactttgtattagttaactagcttcattttgactttttcaggttactgtagcgccaaatgtacgcaacacctcggtgtttacgtacctggcaccagactctacggaattgcgtccaaatgggctgtaaattgatagacagggtaaattagaggtgctgattctgaatttaatgctaaaaatgtttgaaaaattctggaaatgtgagaaattttgtttcaaattttaaacttcaaattttgtcgctgaaattatgattttctagatttagcacccaaaaattcgaattccctgtaaaattttacttcgtattgcgtcttcatggaggttttttgcacagttttgaaaatttcaggttactgtagccccgaaagtacgcagcgccgtggtgtttgcgtccctggcatcagactctacggaattttgtccaaataagctgaaaactactgactggggtaaatcggatgggctgtttgagaatttactgaaaaattttgaaaaattttgaaaaaagcgagaaaatattaactttcccgaaattttttggggtactgtacctttaagagtacacaaataccgttagggtaagaatttaaaaagatttcaaattttatgataaaagtttcaatgtttaactgagatttttaggaaaaaaatccaaaaaaaaatttccaaaaaaaaaaagtttttttcgaaaactcttatttttgaaacttttctgtttcattcccatactgttaacaatattgttttattatgttttcctaataaaaattctgaaaaaaagttatctagggggggggggggggcaaaaattatggaaattcaattttcccgccagtttctaattggattttcttcgcccagtttacgcggtaattcaatgatttttacgcaactttttactagaattgctcatttccagatgtttatggctcttaaaaaaagatttgctttattttcagaaaaaaaaattccaaaaaaaaaatttttttcgatatattttcttctaatttttcattttgtttttcgcattttcaattgttacctagaaacggggaaatgtatcccgagagatggctgcctaatgggctccgcagaaccacaaatttgcattcattttcgtattcagctcgctattattttcgatttatattcggaattttttcatattattcctttttttaggaaattagttttaataagaagtcaataaggagccaaaattattaaaaaggtgaaaaacagtaatttttataattttcaagattttatttttaaatccaaatttttcctagttttaagattttttttttaattttgaaagtgcgaaattcagaatctgcatatccgagttaccctagaaatcaagtttcagctcatttagaccgaattgcgcagaatctggtgtcaagtacgcaaacactgagacgctgcgtactttcgaggctacagtaacccggaagtaattaaaatttgcctagagacttggataacattgaaccagaagtgtgggaaatgattgaactagaggtgaaattcgatgagaaattcaaaattttcattaaaaatttggaaaaatgaaggattcgaggtgaaaattcggttttatcaattttaacccgaagtatttccagcttcccaatttttctcaaaattttcattatcaaattcagtttcagcatatccgaattaccctagcaatcaagtttcagcttatttggacgcaatttcgtcaaatctggtgccaggtacgcaaacaccgcggcgctgcgtactttcgaggctacagtaacccggaagtaattaaaatttgcctagagacttggataacattgaaccagaagtgaaattcaataataaattcgaatttttcaatgaaaatttcgaaaaattaagagtctgaggtgaaaatttggttttatcaatatttttgaaaaaaaatttccatcatcacgatttttctcaattttttcattatcagattcggattcagcgtatccgaattaccttagcaatcaagtttcagcttatttggacgcaattgcgctgaatctggtgtcaagtacgcaaacactgaggcgctgcgtactttcgaggctacagtaacccggaaatattcattttttagctagagactcgggaatgattgtactagaagtgaaattcgatgggaaattcgaaattttcattaaaaatttcgaaaaatgaaggattcgaggtgaaaatttgattttatcatgatttgcccaaaatatttccagtttcccgatttttctcaaaattttcattatgaaatgtagaatcagaacatccgaaatgccctataaatcaattttcaactcatttaaacaaaattgcgtagaatctggtgtcgagtacgcaaacaccgaggcgtggggctacagtaaaccgggaattttaaaaataagcgtaggaagccccggtaaaacttgatttatggtaaaaattgacaaggaatttgaatttattactcattttcctcccagaaaatccgaaatctctcaaaaatggaaaaaccagtacctatgagaaatcctaaccatttcgatgtactccaggagcccccaaaaaaaagttgcccctactcatatagaggaaggcgtcgacgccgcactccattcgtctccaatatcttttttcggtgccacgtatcatatttcggatgaagccgctacagcagctccctgctctttacagaagagcaccttactaacaagctctgcgtttcctctttttttttgttcggcgcgaaattttcctgaagctcgaaattcaaatatgtgtaatgtgtataattttctcatctcttttgttttccagtcaaaagtgtccatgactaccaattagatgaagcatcccgttgggaaatttcttatattgccaatagcttttactttactattatagaatttttttttatagttgtttgccaatttttcccctctcacattcttcattattctcaattattgaaaaattattgaaaaatttgtattctacgtgaaattttaagtgtctagctcaattttgaaaatttttccgggttactgtggcgccaaaagtacgcgacgcctcggtgtttgcgtacccggcaccagattctacggaaattgcgtccaaataagctgaaacttgatttatagagtaattaaaatatgctgattccgaattttgcattttcaaaattaaaaaaaaattgtgctcaaaaaatttcaaacattttttttctcaaaatttttttttttccgaaaatccgagcttcaaatctcaaaagttgatcacattttcatagctcaactctaaatttgacgacttacttttaggcttgaactcatcgaaacaggctttacaataagccgaaaaatttacaaaagccgaaaataaaaatttccgtcaaatcggcaaattgccggaattgaaattcaggcaaatcggcaaattgtaaggattgagaatttcaacaaaatttattttttggcaaactcggcaaatctgcaaattgccggaatttgccggaattgccggttttttgggaccaaaaaaaccaaaaaatccaaaaaaaaaaaaagtttgccgtatctagtctcaacttctgtattaaaatacattaaaacatgtattttaacacagttgtgacgtcataaatgtattttaatacattttgcaacattacttgaataaccccaataaaaatcaacttaaggatcagaaattttttttggttttttttggtctttcaaaaatttcaatttttgttttttggtttttggtccaaaatttttttttggtcccagccctgattgtgacctacattcttcccgcttactcccccttcctgtgtaagcggtgacctgtgtaggaggtgattgtaaatgagagccaatgcctagtcactgtaataatcacaaaattttgacaccaaccaatatcaggccgccgacatttcacggcgcaccgctatgtttaactcgcagcaggcggaaacagctcaccaccacgcccacagcgagttaaacgcagcagcgcgcggaacccgtgagacgtcggcggcctgatattggttggggtcaaaatttttgccttttctctgtgaatggacgagaaaaaggcggggcctaaataattttaggttttctgcagtacacgccacgcagttttttttttattttgcgtgtataaaccaaaaaaaaaccagaaaatttttcgttcgccaatttgccgaatttgccggaaattttaaattccggcaatttgcagatttgccgagtttgccaaaaaataaattttgttgaaattctcaatccctacaatttgccgatttgcctgaatttcaattccggcaatttgccgatttgacggaaaggtttattttcggcttttgtaaattttttggcttattgtaaagccttttagaaggcaagtttcgatgagttcaagcctaaaagtaagtcgtcaaatttagacccgtaagatgtcggtcgttataacttttttcagagttgagctatgaaaatgtgatcaacttttgagatttgaagctcggattttcggaaaaaaataaatttttttattttgagtgtaccatgaaagaggggtacctccctctcttcctgtgtaagaggtgattgtaaatgagagccattctagtccccttgtcaatgtaacctattacccctataccaggggtgtgcggcaaatttgccaaatttgccgagcacggcaaatttcaaaaaagtagatttgccgaatttgccgagctcggcaaatttcgaaatttgccgcacacgtcaaaaattttacagtacaattttgactaaaattattgattttttcgccaaaaatttagtaaaatgacacaaaattgagctattttgatgcttaaacatacatactacacggaactaattcagaaaccagatatgtgttaagaatttggtagttttggtgttccaaaaacatcaaaaattatcaaaattttccgagtttgttaagcacggcaaatttgccgaatttaccgagctcggcaaatttgccgaatttgccgtgctcggcaaatattgaaaaaagagatttgccgaatttgccgagctcggcaaattttgagatttgccgcacacccctgccctataccctataccctgagaaagagggactcttcatgatccataggtatgcctgtcattctctatttttaaacgttcctgcagcagtagcacaacagagccagcagttttcctcttcttctccatcttcttctgcttcttcctctcttcccaaaaaaaaaaaaaaaaaaaaagtgagggggctcactgcccccccccccctcccccccccctcttctccttgaagctcatccagacgtcgctgtcctcctcctcctcgtccccggggcgctgtgtgtgtgtgtgtgtgctccgtgagcatgtagcagcttcagcccatttaaaggcgcacactctctgcatctctgcgtgtctcgacactcgttttttctcttcttttctgctgcacacacacacacacacacacacacgctcatgccagagcacttcttgctccggggggctccgcgcggagcccgagaggacctcctcctcctttttcttcttcgctttttagttcttcttgcctcggtctcgccccttgttttgctctccatgtagtatatacatctgggtgtgtgtgtgtgtgtgcacctttggagcattttttgaacttttccagaactttggagcaacattttcagcttgttcagtgcactttttaggctgaaaatcctatttttaggttttcgaaagtttttttggagcatttttcgtgcaatttaggtgcaaaattaaaaaaaagggttttgtagtgaattaaaatttttttgaaactttcgcctttttaaaaaaatgtttctaatatctttaaaaattggaatattttggaaaacaatttgttttcaattggcaatttattaattctgagcttctgagcgtaaatttttttttattttggagcaattctgagatgtcttagtgcatttttcgggcatacataaaaaaaaatttatcttaataataaaaaccttaaatttaggcttcaccgtctggaaattcaattttttcagctgaaaaactttcaaaaaaaaaaaaattaaattttcacatttattttctctggaattttggagcaatttcaaagctgtcttagtgcatttttagtacacaaatattttttcatttttcttaaattttaataatctaagcttaaataaaggcttcaccgtctgaaaatgcaacttttttcagatgaaatattaaaaaaaaaaacctcttttattaattttgtgctccaaactttcccacggtacgcaaatcatgtaatatgtacttttaaacattatttttccaatcaaaaatatccaacagcttttccttacaatttgaaaatttttattaaaatttcaaaaaaatttttttttttttttaatttcgaatttttttaaacttgttgtaacttttttccctgtcggcgccaattaacaaaatacgtagaattttgcgcttattgttttgttagttaacaaatttttgacaactttcttatcagctgagatttaggtgtttcagttcgcaatctgcgtctctccttgctctcctctattttaaaacccccataactttgttcttgtgagagttatcaaaaaattgtcaactaacaaaatatagagcacaaaaatatgcacattttgtatgttgacaattttttgataccttttttagttttcgagatatcttagttttagtttagctgtacctttttctggcaaaaaacttccaaatttcggcaatttttcggcaaatttcccggcaaatttcgccaagtacatcgggctctcagacaagtggtctgtgagtggaagtcgataaaagtagtttacgtgctctccgtccccccgcttcttctccgtctctgcttctatttctccattgactagtcccactactttttacggggcggagggctctcttgcactccagcttcttctctttttgtgctcttttttgcccgtatgtgggtgctcatttatttttctttggttttaaaataaattcggtttattaggctactcgtaaaaatgaagaaaaaacttcaaattcaaacgacattaaaaaaaaatttaataaaaattttttgaattgctcaaaagccccacctatatatatatatagctccgcctacttctcgcacagaccccgcccactttttgactccgcccccttattggcaaaagttcttgaaaaaaataaaaataaaaattcaaattgaaacaatttttttttaatgaagtagtttttttctaaattgatgaaaatttctaaacagtttacaagcaccgcccactttttgactccgcccctttgttggaaaaattcttgtaaaaaaaaataaaaaataaaagcttctctttcaaacgatttttagttggtttttgtatgaaaagtttttttcctaaaatagaaatgtctgaataatttgcaagctccgcccttttcttacccagactccgcccctttattgactaatttttttttgtccatttacctgaagttcaaaaaaaaaatttacagtttcatagagtaataatttttcaaaaatctctttttccaatgtttaatgtgtcattataaacccgcccagttttaagctccgcccatttaggccccgcccatttatgacccaaatatttttttctctattcacccgtggatttccctccaacaagttaccccaaaaataaaaataaaaattcctgcaggcgcccaccgggatctaacatcgtggcctcttccaacaacaaccatcaatcgtctacaccatcattcggcggtaggttggaccgtttttcttgttgtcgacaattatgctgtgtcaggactagaaaatctgaattcagcacgctgagagcttcaaaataagccccatattgcctaggttctaataaatatgaaaaaatttggtctcgccacgaaaacttgtagggtttggtagtcttggtgaatttgggttagtcttatttttcctagttttttttgataattttgacacaatctgagctaaaaattgagaaaaaatcttaaaaaataataaaaatatggattttcgaagattttcgaagattttcgaaaatcgataactttgcgaattttaattttttctacctgaatttagtttcgaaaattttgtaattctttgaaaagctttagaaaaatatatttaacattctacacagtaccccgggacttttcgtggcgggacccaaatttttaaaatagtcggggcctagccaagatgggtgttaaatgaaaggtctcgaagggctaaattcaaatttttaggttacaaagctttaaattgagtttttaattttttttgaaattaaaaaaaaaaaaaatccaaaaaaaaaatccaaaaaaaaatccaaaaaaaaaatttcaaaaatttaaattattaatttcaggttcgtggggtccctacaacaaggcggaccacctagtcaccaactgaatgctgggcggtctgtcgggacccggtccgccgcccccaccaccccccgcatcctcctatggcatggtgccaggcccgtcgacctcgttcaccaaccatctgggtcccacgacgtcatccgcgtctacagtaccaccgacgagtgacgcgttgctcctgcaactccgttcgagacccaattctcgcgtttttcgcgccctttttcaatatctaccgttaagggattcgccgaacgagaatccacagctcgagctgagccttcagccgggagatgtggttctggtgaaaggggaaatggattcggatggattttattgtggggaaacgctggatggacgtcagggactggtaccatcaaattatgtagagaggtgagcattttgaagcttaaaaattgagctttttatacttttttgggcgaaatctcactttttcccgtgaaaaaagatttaaaattcggagtctgagattgaaaatacaaaattcgaattctctgtgttcagagctttcaaatgacccccatattggctatattccgccaactttgaaatttccgggtcccaccacggaggggtactgtagttttcgtggcgggatccgaaaattttcaaaaatgacggaacctagccgatatgggggtcattttaaaggtctcaacgagacgagttcattggagcaggttttatgtgaaaattcgatcatttttgaggaaaaaaaattttttttgttcaaaaaagttttttttttttaatttttgttttaaccatgttttctgtaaataatcagaatgagcataatctcagcttcaaaatagtaatccgccatactttgaaaattcgggtctcaccacgaaaactccaccggctactgtagtttagacggaaagtttgcagttttatatttctaataaatttttgaaaacttttcatataccctgtaaaaaatttgtgctgagtagcataaaaattgacaaagttacggattttcgaaaagattcaaaaaaatcaaaatttttaattttgtaaaatatttaaaaattctgtaacacgaaaaaaagtttgattttttctattttaccattattttcgaatttttcacgctattcgctttaatttgacagccaacattcccaggctccgccaattttgaaaattttcgtggtgggactcaacaattcaaaaaatttcaattttaccaagaacctaggcatgatgggggtcaaatgaaaggtctcaaaaaactaaatttgaattttgtattagtttaacttttttgtcagcatcctcagggttacggtagattttgaactttccattggaaaattttttcggaaaagtttcgaaaatccataacttttctcatttttgagattttaacttgaattaaaatgtataacaattgtgagtatttgaaaaatatggcaaaaataatataattctgaaaaactcgaaaactacagttccctggggcttttcgtggcgggacccaaattttaaaattaaaaggatataggcatgtgttggggtcattttgaagctcccaacgcggtgaatttctaataaaacgaaaaaaatttatattttgaataaggaaaatgaaaataattttaagaataattttcaaaaaaaaaaaaaatttaaaaaacttttttttctaaatttttttatttctccaaaatttagaaaataaaaccaaatcttttcagagttccggattcagtgctcctggcaaatgcacgggctccatcaccatcattcccgcttcgaataccccaacatttctcgacaatcacacacgacttctcctctccggatcactcaacactacccgattctgtaagtttttgaggaatttttaaagaaaatttggctaaaaattctttcaaattcagttttgaaaagcaattttgaaataaaaaaaatttaaaaaattttctggaatttttttttttttgaaatttttttaaattaattttttcaaaaatatataattttcaaatttttcaggtttgcccttacccaccagctgacgtcacaaaagttactgtacaagagatcaagaacaacgaaacgcctaggagtgagttgaaaattttaaaacattctcgaaaaaaaatttttttttttcgaaattttcaaatatcgagccgctactcagccaattttcgagataagctcttgaaaactaataattcaattttttcttgccagtagcttcaatttaacacccatatcggctaggctccgatgaaaagcccagttttcgaaattttttccgggtcgcgccacgaaaactctgggggtactgtaggtgatagatgtctttgactttttgtatttttgcaaagtaaccaaacttaaaacacatgttttaggctaaaaatcagctgaaaatctcagatattgataaagttacagattttcgaaaaattccaaaatttttagaattattgtgttgattttttgaaaaatctacatttcgtaaactttcatggaagatatatttggctaaaattattgaatttggtacagtcgttgtctcttttaggctccgcctacttttgatgggtctcgccgcgaaaagtttcgaaaatccgtaactttttcaattttcaagattctagcacaatttttttttcaaaacgtatgaaaacgtgttgaaaattcgtttaaaattaaacttgagcacggtatttggatctacagtaacccaacgggttttcgtggtgggacccagaaattttcccaatttttaaaacaggcggattatagccaatatggggctcatttcgaagctgaaaatgtagaaaaaacgaatttctgaagtaaattttaaaatttattggaagtaagaaattttagtgaaaaaataaaaaaataaatataaaatttcccagatttataatttatttctttaatatctgcactgaatctataaaatttataaaagaataaagcctcaaaactttttgaataattcattttccgtgggggccccatatccaaaaatgggcaaaaaacggagacgcagagcaccagcactaattccatttggaaagggggctcacaaagtgtgtgtgtgtgtgtgctccgtgagcagtagtaggcagcacacagctaatctgaactgacagatgacccgtggagagaaaaaaggaaaaaaatggggagggggaggaagcttcttttatattgaaaagagccggcggcgagcggagctccttgatatttttgggtgtttgagggactgaaagatgaaaccagaaatttgctaaaaaattatttttacagattttgaaaatgttaaatttcaagaaagttatgggagtttaagtttagctaaaaaaaaaaaaaaatttttttcaatttttcaaaatttttttttcaaagttcatctcaaaacgtgtgtttaatcacgattttgaatatataaaattattttatcaatacaatacaggttagaaaaccagaaaatattgattttgagcaaagttataaagttttgaaataattgaaacaaaatttgaaaaaacaaatttttttcagatttttttaaaacttcaataattaacaacttggaggtttcggagtcaaattttttgaattttgaattagaaaaatcaatatttcttacagtaccatgccctcgagaattaatagtggaaaagaagttatcacgtagcgccctagtttcatggagttcgccggaagagtcctttgtcgccgtttcccaatatcacgtgtgtgtcgatggaaccgttagagcaattgtacccggaagttataaagtgagtttttgggatgaaaatgggtttttgaaaatttggaaaatatggattttgagcaaagttatgggagtttttcggaatttcgatttgaaactttcaaaacattttatttgattttattttttgacagtagcctaaatataataaaaaacattaaataaataattttaatttcaatttgcatttttcagagctcaaaaattccgattttgagccaagttatgagattttgaaaaaaattgaggttcaaatttttttttgaaattaaatttccaaattttttgcagaataaagtagatttttatttttaaaaaatacaataagaatttaccaaatttactgaaaacctgacaaccgaatttaccggttttcaacaaattgtatgttttttaaatttatttcaaaaaaaaaaatttttcgaaagttttttttgctaactatttattattttcaaaatttgagtgaatttttgtgctcagcacgccgagaccttttaaatgacccccaacatgcctaggctgcgctcattttcgaaaatttctgaaatctcgggtcccaccacgaaatttctcaaaatgggcggagcctaagaatcttggtggttattggaaagattttgatttgacgaaaatcatttttatcaattttaaaagtttattacaaattccagataattaaattcgaaaaaaacttaaaatcaatattttccaaattatcgatttttccgggaaaaaaatcaattaaaaaaatcaataatttgattttcagtgtcgcgctttggtagaggatatcccattagaatcatccgttaatttatcggttcgagcagtcaccgaacatggacattcgccggatgcttgttgcacaatagccataggaaatggtaagaaattttgtaaaatccaacatattttatgcgaaaatatggaaaaaacgataaaaatcaatagttccacaaaaaaaatcgataaaaacggtcaaaaatgaacgttttccgagaaattttctgaaaaacaacgacactccgttattccgctagttcgtgttgtttagccaattttcaaatattttttatgatgggaaattcaaaatcttgaatactttttggcgggaagttcaaaattttcaaattttcaaaaaaacaatttggggcggaaaattaaaattttcaaatattttttcgcgggaaattcaaaattaaaaaaaaaaatgttttttggcgcgaaattcaaaaatttccaattttcagaagcccaagtagcaccgcaacaagtccgtgtatggcaagtaaccccagtttctgcgtatgtccgatggtatccatcgaacagcaatgcggagcacgtcgtctcactgaatgctgtaaaagttggcgtttgtcccccaactgtctttcaagtgagttatcgattttttgtgtaaagatttcataaaggaaaaatcaataatttatcgattggcttttacagaatttgaaaattttgattttgagccgagttacgggagtttaggaaaaaataaaaaataaagctttttcgaaattttttttacagacttttaatcgcaaaattcgaattcttctctatttttcaccctttgtcgattttttttcgaggttctagctcaaaattaaaatttcaaggggtactgtagccgcaaaagtacgcaaacacccgagcttacgacaaaatgcacaactttcttatttttgatgattgagctctgaaaattgatattcctgggtaaaaaaagacgggaattttgaaaatcgatgttaaaatttacaaaattaaagtttaagtgctctgggagcattgaaactttaaaatttcaaaaaaaaaaaattttttatcttttttggactcttagcatttattgctcataattttctatcattaatcataaaaaatccaaaaaataatccccaaaaacgaaaaaaatggagacaaaattaatcccccccttcacccattatttccccccgcatatatataaatattctccaatttcgtatgtttttgtacgtcttctttagaattctgagcacgagtataagccacgatgggctcattttgctaatgagcaccctcttttttaggtctgaaatttttttggaaattttttatcaaaaaaataatagttacaaattgaaaaaaatattcaagaaatctggaaaaaaaggtttaaaaatataaattgaaaattacaattgggtcccggcacgaaaaaaaattttttttaaaaggaaaatttgaattttcaaaaaaaaaaattttttttgaaacttttccaaaacttcaaatgttcataactttgctcattttcaagattttttgttaatttttagttattcttcctattattaatttttgaaaattgtatcgaaaaaaaatttccaggttcaactacacggtctacaaccttcgacaatctatcgggtatcagtacgcacaaaacatcctaaagcagtgttggagcagcgtccagttgagagatgtgtcgattttaagacgctgccgaaaagtgagttgaattggcgaagttacagtagttttcgtggtaggacccaaatttttgaaaaaaaaaattttttttttggttaaaattcaaacttgtcaatctttgtcaaatttcaagatttttcgttaaattttgccttgaactgtagaaaaagcgaatttctaattgttaactgtgcttcataaaaaatttatcaaaaactggcaaagttacagtagtttccgtggtaggaccccattaaaaaaaaattttttttttttgggcaaaagttcgcaaatgtgtaactttctcagatttcaagattttttgtcaaatttttactttgaaaatgagaaaattattttacagtgagtagttagattgtttagaatttaataaattaacaaaaaaaattttttggaatttttttttcaaaatttttgtaactcagctagtttgttagattttttgctcatttttatgtccaatatgtaacaaatttcgcttttttttctaattataatttacaacaaaaaatgtcaaaaacagtcgaaaaaaaaaattattacattaatttttggggtagtacaaaaaaaatttttaatgtttttttctggaaatatttctcttccaaaaagtaaaagtccaagcacacacacacatgtacacatgctcattcttttttttttcatctcttgtctcgttgtgtccggcggaatatacaattagggggagaacgacgacggctctttttcgtctccttttcctccgtcttcttacgtacactggcaccccccgtttttattgatttttcgaaggtttttaaggtttaaatatgtgaaaaatagcagtaaataggttaaaataggtttagaagtgttttggaaaaatttgaaattttacaaaaaaatttcgaaaaaatctagaaaaaactttttttggaattttttgtttcaaaaaaaattccaaattttttgaaattctatacattgaaaaataatatatagtatgatcacaaacaattttcaaaccacttattctcatatttcaaaataaataattgctccttccaccccccgaaaaaattcaagagaattcccccacttttagaaaaatctctggaatttcacaattttttttatattatttttttaaaggtttttgtcaactttggggttattataataaactacaactgtttaattttcaaatttgtcttaaatttggtcaaaaccaatttttttcgaaaaaaaagggttcagggctccgcgagctctaaaaacctagtttttgtgaattttaagcaatgaatttgaatttccagtcactttttacctcaaaatcccaagtttcacggcttagccacaagtactaaaaaagttgtgcattttgtcgtaagctcaggtgtttgcgtatttttagggctacagtacccctaaaaactccaattttgacccacaaactttaaaaaaaactacgctaggggtgaaaaataacgagaaaattgaattttaccatgaaaaagttatagaagttttgggaaaagtgaagtttttaacttttcgatttttttttgtcaaaaaaacctccctacattctaatttttggtggtttcggagcccgcagaaactgatccaaattaggagtcaacccgtctttgtgacctttacaccggagcccgtgctctctagaagacggagggcggcggctgctcatgaatatttcatcatttgctccgcgagacctacctcttttgtcttttttgtgctcttaaagaaatgtgtttcgcaataggttttagaaggttttagaaaaaaatagaatttttttggatttttttttggtttcttggtgtcaatgcaccaagtgcaaagcatttgaaaattttccaaaattttttgatttctttttgttgttttttttttcgcaacccgagccttaagactaaattttaataaattttgattcaaattttcgaattccccgtaattttttgctctagaaaaaaattttttaccttttgggcatgaaaattcaaaaagttgtgcattatgtcgtaagatctggtgcttgcgtatttttaaggctaccgtacccttggaaatcccaggaaaaaacgttttaagtatgaaatttgacggaaaattctaattttataagaaaagttgttgaaaaatgacggaaaaccgagaaatattgacttgaaatttggaaattgaaaatttaaatttcctgtgatcaaaaaaaaaaatttttttcgaatttttacatttaaaaattcaaatttcctgtgtaatttcagactaaaacctatttttctcctgttcactacctcaaaacttaaatttcgctgtacggtagccccaaaaatacgcaaacacctgatctgacgacaaaatgcacaactttctcaattttgaagccaaagctttgaaaaaaaaagtttaagggccaaaaagtgacggaaaattcaaaaatttacatgaaaaatagtgaaaatcaacgtgcagaccatttttcccaaattttcacagccctttttccaaaattttgcaccgaaaaagcactaaagcacaaaaagatgcagttttctggaggcaattccaatttcaaacggcctttggaattttatctttacgactttgttgttacaacgtcttcaagtttcttgtttctttgaaaaacaggggttcaagaaatggaaatgagaaatggaagaacgatgagttataatccaatataatcatgtttaatattgatttttgtaaattttcatgctaatttttgattttcccgctactttttacttcgggcggctagttttcagagttgcgagctcaaaattgaaaaagttgtgccatttgtcgtaagctgtaatgtttgcttaaattttacaaggttttagcgaatttctagaatttttcatctcaaaatttaaattctgcgtcatttttcactcctaaaaacattttttctctgtttctagctcaacatttgaattttttggggtactgtagctccaaaaatacgcaaacaccagatcttacgacaaaatgcacaactttctcagtttttatgcctggactctgaaaatttatgggctagtgtgaaaaattatgaaaaattagaaaatgaacacgaaaacttttgaaatttaaaaataaattttttttgaaaaaaaactttcaaaaaaaaaattcgtaaattgaaatgttttgttttttcaacattcgcgcatcattcgaattcttaatttcacaactaaattcgtcattttttccttttttcagtcggtttgccggaccccccttcaaacgttcaagtggaaggcggagcccagccaggcacacttctagtctcctggataccggttaccaaccagccaaagccaccctctagagccgcagtcgcatcgtatttggtctacgcggacgggaaaaatattgctcaagtgccacaagcaacaggtaaactttttagaatttttgaaaaaaaaattttttttttgaattttttttttaactatcaaatttggtagtttaaaacctaaaatttcaaattcagctcattggtagctttgatttaacacccatcatgcctaggctccgcccactttcgggtcccgccgcgaaaactagaaaactacagtaacctcgtggcgggacccaaaaaataaaacttggtccgattcgtgtcatgatgggtgttatttgaaagctcttggtgagctgaaaaagaatattgtaaaaattttggaaaaatactgaacttttacttgagatttttttgagaaaaacaattgacgaaaaaatcaaagttttaaattttgtaacttagccccctctaatggctattcaaaaattctcaactgacgaaatgtttaaaattttattttctacaacgttttaattgacaattttttaatatctaacaattgtgcaaagttacatcggttagagttttccgttgccataaaacaatttttcaaattcaaactgctataactccgcccatttaatggctagcaaaaaattttcaacaaacaaaatatttgaaattttattttctacaaattgtatgttgacaacttttttgtatacctctccgttctcgagataacccctcaaaaacattatagcggaccacgttgtgctgcggctcgcggatctctctgacgatccgccggtcttcatcacagttcgcacgaaaacgaaagaaggtgccgtttcgtcggattccaacgtgacacgtgtgccacgtaatcagaacgccgcgcctccgcctccgccgccgccgcccacgcaaatcggaaatcaatcgatcattccagtggtggacccgagtcgattgccactcgtcgatatgacgtcatcatacccatcatatcaacaacaacaaacgctcactaattgtaagtttttgcggaaatctgactgaaaattcgaattccccactaaaaactaccctaggacaacaaaaaaatttcggaaaaactacgacactccgttattacgccagcgcgtgttgtttagcggttgcgggaaattcaaattttcaagtttttcatcgctgaataattgatttttgatcagaaatctttgccgaaaacgtgaaaactgagaatttttccgcgtgggaaactctaattggattttctcacattactttttcccgaaaaacttggatatttacttttccaagcatcatatgacccatttttatataaaatataactttttctcaacaaaaatgccaaaaaaatgccaaaaaactgttaaaaatttgaatttctgattttcccgccaaacgctaaacaacactcaattatgttctagcggagtgtcgttgtttttcgcgccaaacgcctaaaattcaaatttccagcaatgtacatgccaatcgtcacctctaccggtgcagcggtcccacttaccaatggacatcaccacgtggcaactagtgctccaagctccgcccctttcacagctccggctcgaatgatcggagcaactggattgatgagctatcaaccgacaagttatgcggcaaatttgcaaaattctatgcaacaatcggcgccgaacagcgggcacagtggatatgcaacttttgatcggtgggtttttggggtgtaacttagaagtgggcgtagctagataaaaattttcaactgatatcatgttgagcaaataattttcaacattttgtcagttgacaaaatttttatagccattaaatggactgagctagataggtttaaaaattgcagcttcaaaaatttattttttgaaaaaatggtcaaacttcaaactcctgtagctccgccaacttcatggctactaaaaaattttaaacttagaaactgtagatcaagtatttttacacatattgccagtagacaaaattctcatagccattaaatggactgagctagataggtttgaaacttgcagcttcaaaaatttattttttgaaaaaatggtcaaacttcaaactcctgtagctccgcctacttcatggctactaaaaaattttaaacttagaaactgtagatcaagtatttttacacattttgccacgagttgacaaatttttcatagccattaaatggactgcgctagataggtttaaaaggggtaaaattgctgcctaaaaaaatgttgcaaaatagttaaaaacttaaaacttttgtagcttcgcccatttattggctatcaaaaaaaattttaactaaaaaattaggtactgtttcatttcaaccccgcccacttctacgatttcgcaacattttttttttgtcaaaaattttcattttttcaaagaatttttttttcttcaaaaaaaaaagtgtactttttccataaataaaagatgttcggtagggtgtgtgtgtgtgtgtgcgggttgccggaaaagaagataaacgtatctctgaccgtctgccggtctctctcactatctcgcccatttttggttggctcacggagcactgacaatctgcccttggcaatcttcccttttttcgacctcggtttttcctttctttttttgttggaaattttcttatttttaggttttaggttttttggggagtatttaatgttaaagttaggaaaaaattaaagaaattttgaatttaaaacgttaatttttttttgaattaaaaattttcttttttggtttttaaaaattttcaaaaaaaaatgtcggagctagagctaaatttttagttcaaaaaaaatgttaagcaaatatttttatacattttgtcagttgacatcttttggacagccattaaatgggcggggctacaaaagttttaagatccgcctattctggaaaaacaaaaaaaccattcaagtttcaaacttatataactccgctcatttaatggttagcaaaaaattgttaattagcaaaatattttacagattattttacacattttgttagttgaaaattttttaatagccattaaatgggcggagttacatgtcaaaaactttgaaaatttctgaaaatttcaatagtgtcattttccaggtcggcatcgctcggagcccaaccccaagccacttcaatattgctcggcggtggcgcagctccacggccgtcttctgtcggacaaaacgtaagagatttttaacaaaaaatcgataattccaaacccgcccctttttttttagcaatctgcgtggaaagcgcagcagccggcgcaaatgtcgcagtactacacgtttcatccgagttttttgcacactgagccatccggagcaaatgagccaagaccgtcggtgctggaaatggaaaataggtatggggaaggattttggggctgaaaatttgcgggggtttgagacaaaaaaaattttaggacaaattttttttttttttaaaccaaattaaaaaatctcaaaagctaaaaaaaaaaattgtgaactttttctgaaaattgctagtttttgggatttttgagttttaaaattttcgaaaaaaaattttttttttcaatttttttgttttttttttaattccaatttagtcagtttttgttttcaaaaatcgtataagtgttgttacatcgcccaaatgatgctagaatttagtatttggaaaaaaaagaaaaaagtggacaattagccaaatcaccttcacacctcataacatattctcaacccttccgccaactaattgagctcatccgcttgctcattcaccgggatttgctcagctttttacacgtctacagaatatctaatacactttttttcacgaagaatcacacctttaatttttttttttgaaaaaaaaattttgaaaatttttttaaaattattttttctctcgaaaacttgatttttcaaaattttagctcattttctcaacattttctatataaaaatcgaattcgtcgtagtttttcactgctagaacccagcttttagcaaaatccggctcaattggtgtttgcgtacttttggagctaccgtaacccccgcgaaactgtgaaaattcaaatttttgagttagaaaatggacttaagggtagaattttacaaggagttcaaattgtttagtcaaaattgttaaaatcaacggttttgggtaatttatcggaatgttgtaaaaataatttttgagtttgaccacagaaaaagtttttcgaagtttatttcagactatttctctttttttttagtctaaaataatttcagctacctaatgcgtcaccgacaagcagcagaccactgggcaagtgctccagacgctcgagcccgaatcgaagcctactcccgcgggctcgcccgagccggctccgcagacgaccggatggtgcccatgtcaactcgacaacaacctcagctccaacggttaatagcagccggctctcgggctccgttggctcgggtaaaatctgaaactggcgggtttgggacacgatcggagccagatttgcggccgcccacgctggattcagatgagtgtcggtggtttgtcgcgttgtttgactatacggcagcaatgtcaccgaatccgaatgcggaattcgaggagttacagttccggaaacatcaacttattaaggtattgattttttgaaaaaaaaatttttttgaatttttttgaaatttttttcttaaaatttttagaaatttgtttactaaatttcaacaaaattagttacttagctacaaactacaaaaaaaataaatgtaaaacaaaatagaacactaagccccgccccctttttgggataagtggcgaatttttagatttttttttaaaggtttttggaaaataaattttcgttcttagaatattttgtttaaaacatttttcgaaaaaaaagtaattaaaaaaatatctcgttttgtaaatttggaaaaagaataaaataagctccgcccattttcattcacattttacgagtttaggctccacccgcttttcaaaaaaaatcgataattcaaattttaaaaaatttaaatttttttaattttttctaaattttctcaaatttctgttcatcgaaattttttaaaaaatttacaccaaaaataagctccgcctttttttaattgaaaaaaactcaatttaagtcacgcccaccattttggaaaaattttaagaaaaaattttgttcgaattttttttttcgattttttccaaatttttgcccattcacgagtttttatcgcaaaaattgtaactattacaagctgtaaaattgaaaattccaacaaaaaaaatcaataaattaattaaacattgaaaaatttccaggtgtacggtggccaagacattgacggattctatcacggagccatcgggcagagagttggattagttccatcaaatatggtaattgagatagcttctgatgatattggcaaacgacggaccaccacaaacccggctccaccaccgccgacggctccggagccggcgctgcggcggcaacggtgggggagcctgaagtcgaggagttacgattatgctggagagggaagagcacctagggaacggtgagttggaagaaaataatatgaaaattcgaattcctcgttgaaaactaccctgaaaagtgaaaataacggaaaaacaacgacactccgatattcgcgggaaattcaaagtttcgattaatttttggggcgaaattccaaaattcaaattttccttaaaagttttggcgggaaactaaaattcaaaatttttcagacctcaccacccgaactacgtctccctggaccgtcgtgacgatcgggaccgcgaccgcgagggccggtaccggcgcgcggggagctcctacgagtaccggcggctgccggagcgggagaaggagtacgaggggacctataggagacggcaactggagacaagggatccacgagatcctagggatcctcgagacgacggctacgaggacgaagggtaccgggacaagtaccgggaccgctacgaccgccggcaccccatggatcgggagcgggagccccgctacccaccatatgaacctccataccgtggagaaaaatacgagaaataccgcgaacggccgaggatggaagatatggagttcccgagcaatggaccccatggctcagcccaacagcaaccccatagccttcagaacggaccccgtaacacctacggtatggatcagatgacacagcaaatgtcccatatgtcgactcaaggatccatggctcaaggctccatgggccagggctccatgagccaaggccccataggtatccccagctcaagtggcatcggcggaatgggcggtgccggcaatcaggaaatgtatatgaatggtggtatgggtaccatgggtacctcaatgacctctcaagctgctgctgcttcgggagcccagaaaatggcgcgaatggttgcaaagtttgactacgattccaggcagctgagcccgaatgtcgatgcggagcaggtaattttttgattttttgaaaaatcgattttctattgtaaggtcggtaatatgtcggaaaatcgatattttatcggaaaatcaatattttatcggaaaatcgatactttattggaaaatctatatttttctggaaaatctatattttatcggaaagtcggtaatttgccggaagatctatatttagttggaaaatcgataatcctttagaaaatcaataaattatcgtaaaatcgataattcatcgaaaaatcgataatttataggaaaattgataaattgtcgaaagatcgataatttatcggaaaatctttattttgctggaaaatcgatattttatcggaaaatcgataatttgtccgaaaatcgatagttttccggaaaatcgaaaatttgccggaaaatcgatgaatcgccggaaagtcggtaatatgtcggataatagatattttgtcggaaaatctgtaaattaccggaaaatcgataaattaccggaaaatcgataatttgcctgaaaatcgataattgccgaaaaatcgatattttaatagaaaatcgatattttatcggaaaatcgatattttcccgaaaacccgattttccaataactttttctgaaaaatcaatatttcgaagttaaaaaattcttagaacagatatttttttttcaaatttcaagtctcccaatttccaggtcgagctatcattccgtcaaggtgacatcataattgtgcttggcgatatggacgaagacggcttctacatgggagagctgaacggcctgcgcggcctagtcccgtccaacttcctccagccgcagcccctcaacaatctacttccgtcgcaaccgaccgagccaatgcggaaaggtgtcgcgttctcggatacacagcaaatgatgagaaagtgagcgttgaaaaaaataattgaaaaaatcgataattgttcgaaacatcgaatttcagaccaatccgtcaatcatcacaaaccagcgccggaccatcacaaggctccagcggaggccttgcaggcgcggtggcgagcgccgccgccgccagcggaggcataaaaccggtggcgaagaagagctcggcaggaagcgccggcgccggtgcaaaacctctgacgaagaagaccagcgacgttggaaaggttagggaactttgtggtttaaaaaatcgataatttaaattttcagtcgtctgctccaaacgctcgaaaaactagtacagctgtcaagaaggcggataccggtgcaaaggtgagaaaaatcgataatccgtgggtaaatcgataaatcgccggaaaatcgataaatcgccggaaaatcgatattttgtcagaaaatcaataaatttgctgaaactccatactaatatgatttttttttgcagaaaaaaggataacccgacatctggacatccggaaatatggaaatcccctcaattttcacaaaatttcacttaaaaaacacacaactttttcccttatttattatatttaacaattttcaaattagataatttttataatttaatttattgattttttatttaaaatttcaaaaatccttatttaaaaatcccgctgaaaaaaataaaatataggcgaatttctcttgatctcactctcttttccaccgaacaaaagctcataatttgtgcatttttattgatttttgatttttccccccattttccctaacaaaatttgtgatactatgcctaatttatgcgcttttttgcgcaattttcccattttgagaaaaatcgatatttattgattttttaatttattaatttataaagatttttaatatgattttactgttttatagactgtttagattttcattttgtcggaaaatcaatgttttattagaaatcgatatttacttaatcggaaagtcgataaaatgtcggaaaatcgataatttatcggaaaatcgataatttatcgggaaatcgataattcgcggaaaatcgatatcttatcggaaaatcgatattttatcggaaaatcattattttgcctgaaaatcgataatttatcagaaaatcgataatttatcggaaaatcattattttgcctgaaaatcgataatttatcggaaaatcgataatttatcggaaaatcgatatcttatcggaaaatcgatattttatcggaaaatcgataatttatcggaaaatcgatatcttatcggaaaatcgatattttatcggaaaatcgataattcgcggaaaatcgatatcttatcggaaaatcgatattttatcggaaaatcgataattcgcggaaaatcgatatcttatcggaaaatcgatattttatcggaaaatcattattttgcctgaaaatcgataatttatcggaaaatcgatatcttatcggaaaatcgataatttctcggaaaatcgataacttatcgggaaatcgataaaattttatttgaagaagcaaagcatttaaagttttggcggaaaatttataattttgaaaaaaattaaaattgcaaagtattcgaaaatctcatcattcggcggcaaaactgggcattattgatttacagcaggctgaaattttgaattttttataattaaaaatgctcttaaaatgctcattctcacctagatttcaaagttccattagcatagactctgagcagaaactcggcatcatcgtaagcatcaaaggtacatgggacaatgacatattgcccaggtggtacacggaatcttacagtaacctctctagtattcacgaatactgtagttcgggcgatcgggcggttttgcgagaagaactgggcggttagagggctccgggcggtgccttcggcgccaagtgagtagatcgatacaccaattggcaggacatctttgccctttgaacggagctctcttctgtacttttgtagaactgcaacgattacggtaacattcccgtcggcttcaatagaggattgtggtgctgtgaagaaagtggagaattgagggttcttggggtaggtagatgggttgttgttgcagcctccagctgtgccttttctggaaagtttttgttgtagaaagatagaaaatttcatttcaaacattttgctagttggaagttttttgatatctccaacggccgccgagttacaccgttttgaagtttgagcggcaagagtggagagacgcagccggcgagagtactctcgccgcctgcgtcttcgctctctcaccgctcaaacttcaaagcggtgtatctccgcggtgaatagagattttgagacgctttcaattgcaaaaatgtagagaatttaattttctattcagccaatgtgttttcaaaactactttttagcatttcagctttaaacatttgctcgaacagttgttaaacattttgagcttggaaacaaaatcgtttttgcagtttgaagtttgtaaacatctctactttcctctgagatatatagattttgttctgcggggtgctctgcgtctccgctctctcgccgcatcaaacttcgaagcgctctatctctgccgcggcacgtgatgtcagagtgtcccatgtcggtttgatctacatagatctaccaaaaatgcgggagttgaggcgcagagttctcaactgatttcgcatggttattaataaattaagaacgtgtgctgacgtcacattttttgggcgaaaaattcccgcactttttgtagatcaaaccgtaataggacagcctcctggcaccacgtgcggtggttagagacagaatttaattttctataatctcccccccccgacttacttagaactccattccccgtcctccatgatctcatgccactgatgttcctcctcgactgtctcagttgctctgttgacgccagtcatttcagcgatttcatcgaaaatctccgcagtcagattacaaacttccatttgtgtaaagttggagaagaaatcctcaaaagacatccagaattcaccgtctcttgcgaattgcacatcgatttgttttttagttgcctcgtcgattttgctccattcagatgaaccatcgctccatgcgccgttccattcctggaagttttttttttaattttttgatggtttttccagatagttcgaaaaattctgcgtatttttctatttggaagttttttgatatctatattctccacggagatacaccgctttaaagtaaaatagagtgagagagacgcagacagctagagtactctcgccgcctgcgtctcctctctctcgcccctcaaatttcaaaacgcgctatctctgcggtggttagagttatcaaaaaacttccaactgcaaaaatgtttagaatttaattttctacaatcgaatgggttgggccaccttctcattcccccaaggattgcgtagtctcaagagggtagtgtcttcaccgtagtatgtgatactatgaatggcagttatactgtaagcatgtccacatactaagccattgcggagttgagcttctttgatgttggcgtcggcctgaaaaaaaatttggatttgggttgttgggggaaaaattgaaaacagaagttttgagacataaaaaaaaagtgtgttgtttttttttttgaaaaatcttaaaatttcaaaagctcataatgataattttttgtacattttttgtacattttttgcacattttttgtacattttttgcatattttttgcaaattttttgaacattttttgcacattttttgcacattttttgcacattttttgcacattttttgcaaattttttgcacattttttgcacatttttttaagattttttgcacattttttgcacattttttgcacattttttgcacattttttgcacattttttgcaaattttttgaacattttttgcacattttttaaagattttttgcacattttttgcacatcttttgcacattttttgcacattttttgcacattttttgcaaattttttgaacattttttgcacattttttgcaaattttttgcaaattttttaaagattttttgcacattttttgcacattttttaaagattttttgcacattttttgcacattttttgcacattttttgcaaattttttgcacattttttattgaaaatgtgtcaaaatacttaatctttctggtttggagcatataaaaaagaaatttaaaaatttctaaacagtgcaattttctgaaaagaaaacttaacttaaactcaaaaaaataaatagcacgatgtaattaatcaaaaataaagcattttaaaccaaaaatccgaaatttttgaaattttttcatttttgattttttgaaaacaagtaatgtgcatatttagtaatatatttatttgaattgaatattttttcgcagcattttgcattaaaaattggccgaaaatttttaaaactcgcaaagttatgtcgttttgaacattttttaaatttccaaaaacttcaaaaaaaaattttgtttttttttcaaaactcaattttctaacaagattattaaaaataaatatttgtgaaaattttgagccaaaaatgatcccaaaaaaatgcaaacgagcaaagttatggtagtttgaaaattttcaaaaaaaaaaaaattttaatctttttccaaaaattaaactttttttaatttcaagaaaaaatcgatttttattcttttttttctgaaatttccaaaactttgcttcttttttcaaataattgacttacatcaatagagcacccaaaaagacttcccatctccatgcccttcaccaacgcggccaaaacagctgccttttcactttttctcaaatcaaaatactcggtgaggcctccagtgaaatcttccaatgcttcagcagtagttccaccatccaaattctcatatcctccgtgaagtttagcataggctttttccacgagagcactccaaaattcagtattgtcagccgaatggaggtagtatagttggttattaactgttggtaaacggtcatcaaccaccacgtcaacccattttccatagtgccaaaattgaaaatggaagattcctgaactattgatttttttttttttaaattttggaaaataaaaattttttgaaaaatttcaaattaccataactttgctcatttgcatcgtttctagaacattttttattcaaaatttatacaaatatttctttttgattattttgtgctatctattttgtgcgttttaattttttcagaaaatttagttttgaaaaataaataaaaaaaaattgaaaatttggaaatttttaaaattttaaaatggtataactttgcgagttttcaagattttcaaccattttttatgcgaatttgtgtgaaaatatttaagtcaaataagtgtattctgcacattcaagctttaaaaaaatcaataatttaaataatttttttggaaaatttggaatatttcaaaaatttcaaactaccacagttttgctcatttgcaacgtttctagataatttttaatttttaaagcgtagaatttatttataataagtttgcgctagctatcttgtaagttaaagtgtttcttttcagaaaactgaattttgaaaaaaaattttttttggaaaattcaaaaatgttaaaaatggcataacttcgcgagtttggaagattttcagataattttcaatgcaaaatgtataaaaatatatatttcaaataagtataaaattgtgaaaacatttattttttggaaaaatttggaaacttcaaaaaatcataacttgctcaattttggaaaaatgatctaattttgttgtaaaatgtgttaaatgtttttgttcttttataaaaagtagaaaatttgactttgaaacaattttaagaattctaacaaaaaaattttcaaattgttttttttttaatttttcagaaattaaaaaacactttaaaaattaagtaatttgaaataaaacaaatattcaaaatttaaaataaacttaaaatctttaaaaaaatcccaagttatgttggttatgtcattttgaacatttttgaaatttccgaaaattttgcaatttttatttcaaattattgttttttttttgagagcaaataatttgaatgtgcacaattcaataatatatttattttaattaaatatttgtacacattttgcattaaaaattagctgaaaatcttcaaaactcacaaagttatgacagtttgaacatttcgtaaattttcaaaaatttccaaaaatttccaaaaaaaaatggttctaatatatatcgaaactttgtcatttttcaagatttttagcattttttcggttttaaaatgtgaaaaaaatttatatcaaattttaagcaaattttaagcaatattatatcttagccactaaattaaaatgagaaatatgtcaaaataggccaaaaatctcaatttacctgcataattctccgtaaaactttgatttggcggcacaattcgataaaacaacgcatcatacaacgtgatatttgccagagccgccaaaaaccagcaatcacccaatgctccctgcttcacatcaaatctcgattctccttgcgtaatcagctgtggattggcaataatctcaccggggcgtttccaaattattctgtcacgtggtggggtacggtagtaaagggatgcggcggttgctggaaactctggatcctcaaatagtgtcttattccggagacatttctcacgttctgtctcgaaatctaggccgaaatcggagacggaatcggcgtaggttggctcgtcaactgaaaattctggaaattggaattcagcgtgacgagagctttcaaataacacccatcatgacgaggttacgaaaattttgaggcaatttgggaaatgtttgggtcccaccacgaaaacttattcggttactgtaactttacaggttactgtacaatattattttttacgtgttaataaaaacaatattattttttacgtgttaattcgaaaattgatgtaattttgaaattttgaaatttagaacttttcgtaatattgcaagttttttgggaaatttcgaaaattttgaaaaatttgaattcagcgtgttgagagctttcaaataacacccatcatgactatgctacgacttttttttaaatttttgattttttttgggtcccaccacgaaaacccccggggttactgtagctttcaagatcattgtacgatcatatttttcttgagttgcacaatatttttccaacattttaaagcaaaaatccgcgaaaaatctctaaaaattggcaaagttatcgattttcgaaaagtttcgaaaatcgatgaaattttgaaattttgaacttttcgtaatattgcaagttttttgagaaatttcgaaatttttgaaaaatttgaattcggcgtgttgagagctttcaaataacacccatcatgactatgctacgacttttttgaaatgttgaattttttgggtcccaccacgaaaacccccggggttactgtagctttgaagagaagatcattgtacgatcatatttttcacgtgttaatcaataatttcgctgaattttaagtcaaaaggtagctgaaaatcttcaaaattagcagagattatcgattttcgaaaagtttcgaaaaatacgaaaatcgcaaaattcaaaaccaccaaagttctgagtttttcagaaattgtttaaactttaaaaaaatttgaattcagctcaccgaaagctttcaaataacacccatcatgactatgctacgacttttttttaaaatttttgatttttttgggtcccaccacgaaaacccccggggttaccgtaatttcaaaattctttgaacgtttctatttttcacaaattaatcactatttttccagcattttaagccaaaaatcagtttacaaacccaaaaataagctgaattaccgattttcgaaaaatttcgaaaaacttttttttcgaaaattttaatctttttaaaggacttagtcaatttttagtcaatttttgagctagaatgcagatatttggcttaaaatttcgcaaataatcagtatttcctcaccttttggtttttgcggagtcactgctggggcagggatcactggagccaccggagccaccggagctttgggcgtcgccggcactgccggctttggcgctccaaagtcgagctcttccacaacgattggcttaaacttgtgcactttccgtttcttcccacattttcctttcatcaagttgtccagatagacttttccggtatttcccaaattattatggagtcctccaaaattgaaaaagtcgttgccacgcagggcgcccataattctgccattttccggattgatccgtccaaaatgatggacaaagtctttgacatgctgatctacgactttttccatgtttcctgacaacatgaagtttgtcagggcctggccgctttttggacgtcttcgacgcaaatgccgcattatggttttcaggtcggtgccgccgaatccgtcgaaaagacctgaaattttaaatttttgagctcaaattcgagttctccgtggttttttacccctggaacacttttttgggggttttaggtcattttccagtaattttagaaaatggagggttactgtagcctcgaaagtacgcaaacacctgatattttacgacgaaatgcacattttgtcttgttttaatgctaaagctctgaaaattgtgccccgatgtgaaaaatgatggagagttcgaatttcttgtgtattatttcaaaaaattgcattaaaattacgaatttttagttttcttactctcgaataagttcttgtttagatttttgaatttttgagatcaaattcgagttctccgtggttttttttaccccggggagttgtttttggggtcttatggtcatttttaagatatttgagaaactcgatgcttactgtaacttcgaaagtacgcaaacaccaagtattttacgacaaaattcacactttgcctagttttaatgctaaagctctgaaaattgtgtccacgaggtgaaaaataatggggagtccgaattttacaacgaaaatttacaaaaaatctgagaaagaaattaaatcgtacctttcatccggcaacccaacccatgattggacccttttcccttcggagccttgctcactgccaccggagcctcttgtttgtcgtcatcatcatcatttaggtactcctggtagttgagctcaaaatctgaaaaaattaaaattaaactcccaaaaataagatttcaaaaattttttcccgaaatttttcgaaaatcaataactttgtcagtttttaatgtttttagctaattttttgactaaaaattcaaaaatttattgcaaattagggaaaaatatatttaatcaagtcccgccttgaaaacctgagttacagaagttttcgtggcgggaccccaaatgcttcgaaatttcaaaactaaagcaacccgggcatgattatacttttctgaaaggtctcaacgagctgagcacagttttcagcttcaaatttctaattactgttccctccagtaccttcatctacagtaatcctcggtgcctcctcttcctcctcctccaccctaacaaccactggactcccgttaatagtcttaacgagccggtgggtgctccgatgctccacaaacgtctcgtgaacccgaacttcactcccaccatactcatcggtaccgtaggatattgtctttttgtagtctacctttcgcattagggattcggaggttttggcgagttgggaggagatgaacggaagaattttgaggcttaattgagaaattttaacagattcagattaatgcaaaaaattttgagcacagaaattatagagaaaaaagtattgagtattttcttagttaaaatcgttttgttcaaacaaaagccggcagagatatgggtgctcaggagtaggaacggttatgtttcaaaacttgatgtgtagctaatatcttctttcgttttagcgatatcaaaaaatgttaaacttcaaaattatagaaaaatatatgttaaatattttgtcagttgatagttttttaataaaaccaaatctaactgagatatgggcgctcaaaggtaagaacggtcgatgcaccatgctgcttagtttttcaaccaaaacttggctcatttttgagatatcaaaaaaatttcaaatacaaagttgtagaaaaaaaacttatacatgttttgtcagtttactaatttttggtaaaaccaaagataacagagttatgagagcttaaagctaggaaaaattcgttgtttttttttttttaattttatgttgcaaactaatgtgtaagagcaaaataataaaacaaagaaaaccataaataaaacaaagaaaacctaataaaacaaagaaaaccataaaatattatcacttcaaaacatgtacggagccagccccgttcaacaaaacagccggggcgccagggagcacagcgcctgctcatctaacaacacactatttctcaagtaactcatttaggacgtcttcttctcatggcaaagcactctacggaattgaaaagggaattggatgaaacgggaagttggtgagttggttacgatgcaccatgtctagcatagttcatattagggttaatttcgaagatatcgaaaaattttcaactaccaatctataggaaaatagataataaatattttgttagttagcaactttttgataataccaaaaatggccgagatataatccctcaaagttgagcaattcgatgcaccatgtttagaactaatacagcgtagttcatttcaaagatatcgaaaagttttaaactacaaatctatagaaaaatagatgatgaatattttgttagttgacaatgttttgataaaaacaaaagataaccgagatatgagcccccaaagttttgatggcaccatgtccaatataatctccaagttacgggttcatgtgatatgttctaggcattaaaatatttagattacggaaaatgagccacggcgtgtaaattggtacatctggcctagcgaaaagtgaaaagtgaaaatcctaggccatggccgcggcaaagcgcgcgaaatttgaatttaaatttttaatgtcattgaaaatcgatgaataatacattataatgaatcaaaactacaaaaatatacaaaaaattgttttttaaacgaataaatcacatataaaaacgattattttcctaaataaaggtggaaattcgatttattaggcaattattaggaaaatgcgtcaaaacttgcacatttttgaatttttttcaaaaactagatccacaaattttctaaaatttcaccagtttactcagtagactgttataatcaaattttgagcaaaaaattcatacccaccgtcacaagttcatattgaatttttctatttttgctccgaaaaccactaaaattcgacaaaattggcgcaattttgaacttttttcaaaaactagatccacaaagtttttgaaacttcaccaattgactaaatgaaggtttttgaacaatttaagtacaaaaaatgtatacccaccgtcacaagtttacacttaaaagcgctgttccgtaatgcagcttcaaactgctttgtttcgttcaatgcgcagttcatatttttgtagttgaatttcatataattttagtgtttcttttattatttttttcatgaaactaatgcattttttgcttaaattcaacgatattattatgtgccacgaaaccgggaagtattaattgctaaaatttatgtggactacggtagtcaagtccgcaaacaccacgcgcattttcataattgcgtacatttgtttttcaagcttttttctaggccagaggtaccaatttacacgccgtggagccagaaatgttgttacttaccatcaaccggacttcgataaatttcctgatcgacgagttttgcatggttggccattggtctgaaaaatgttgaaaatttgtgaaaaagtaggaaaattggaggaaaacaacacaaaaatcatggcagagaacagaaaaggtagtgagagaggggagagagagaagagacgcagggattatagtgttgatgtttgggttagattgatgttagattagagtaggtgtgttgagattttaatcttttaggtgcagtttttggtagatttttgagatattttagggttatggttgggaaaatttggactttttttttgaaattttttttttttttttactatgttaaatatgtaactaatggtattttaaacctaaaaatctaaattttaagccaaaaaagaaaaaaaaagtactgaaaattctagaaaaagtgagttttttttttcagggaattttacaaaaatctgccaaaaaaattggtcgatttttttttcttgaatttttaaaaaatgtgtatctattaatattttacacttaaaaattaacattaacatatgaataatactgagaattcaaaaataatcatctgaaatttcgatttttcagttgaactttttcaatttcctatacaaattggaatatctcaaaggtcaagattacaaattttttgaaattttactcaaaacttatatagacatttatcttttcgataaattacttaaatattatacttcaattggctaaaaagttatggcagttttcaaaagacctattcattttttgcaaaaccacaattttattttttttttaaatttcaaatttatttgctattaaaaactcaagagagctcttaaaacaacaaagaagaaagaaaaaaaaatacattctgtccaatatatagacatggccaagaaaatagtgatagacgcagagaaacagacagaagacaacaaatgtgtttgtggtggggaaaaaaggagaggagaactggtcagatgtgatgaaaaatgggaaaaactgagaaaaagataggaaaaaaggagggtacaaagactatgagtcatgaagcatgacatcaaaaagaggatatattttgaaatttaaaggcgcatagcataattaagggagatgtggggggggggggggggggggtattgcgaaagctaacgctgagtcaccaggactgaaatttttgcacattttgagattagaatctaaaagagcacagattgaaacttttttggtgcaattttgaaaaataaaaataaaattcgctagttttcgagaaattttaattttcttagaggttttctgatttagcactaaattttttgaatttattttttattttttcaacaagtctagaagcctggtagaattgatgtaataaattgattgagcaagttttaagaaattctgagaaattttttttttggaaattttttatttttattttttttaaagaatttttgtttttcagtggtttcatgcgaatatcaggttttattaataaaaattttcaattcctcgtccctttttacccctgaaacttttttttcagcgctctctgatcaaaactagccgaactgtgcaatttgtcgtgagcccttcggtgtttgcgtacttctgaggctaccgtaccccgcgaatttcaaattcagagatacgaaaccgggaaaaaaaatttttgacgtaaatttgtgtgaggaactcgaaattaaaaatcaaaattttctcaaactccattttcaagttgaaaaaaaaatgcaaaaactgtgcaatttgtcgtgagctcttcggtgtttgtgtacttctgaggctaccgtacctcgcgaatttcaaattcaaaattagaggttcggtaaaacgatatgtaggggtaaatttgcgtgaggagttcgaattttcaagtcaaatttttgtaaaacaccgattttaagctgaaaaaaatctttcgtaagaggaaaagctgaatttcactattttaatgcaatttttaagcattaacaacacaaaatttgagttccttgtcacttttcactacaggaactcattttttcagagccctatcacaaaaatgcaaaaactgtgcaatttgtcgtgagctcttcggtgtttgtgtacttctgaggctaccgtacctcgcgaatttcaaattcaaaattagaggttcggtaaaacgatatgtaggggtaaatttgcgtgaggagttcgaattttcaagtcaaatttttgtaaaacaccgattttaagctgaaaaaaatctttcgtaagaggaaaagctgaatttcactattttaatgcagtttttaagcattaacaacacaaaatttgagttccttgtcacttttcactacaggcgctcattttttcagagccctatcacaaaaaatgcaaaaactgtgcaatttgtcgtgagctcttcggtgtttgtgtacttctgaggctaccgtatttcgcgaatttcaaattcaaaattagaggtttggtaaaacgatatgtaatggtaaatttgcgtgaggagttcgaattttcaagtcaaatttttgtaaaacaccgattttaagctgaaaaaaatctttcgtaagaggaaaagctgaatttctctattttaatgctattttcaagcgttataaatacaaattttgaatttttcgtcactttttacccttggaatctgaaattttagatttctcccatcaaaactcgcaaagctgtgcaatttgtcgtcaatcattcggtgtttgcgtacttttggggttaccgtatcccgcgaatttcatattcacagttagaggtccggtaaaaaactatataagggtaaaattttgtggggaactcgaattttgaggttaaatttgcggaaaacttcaattttctgcagaaaactcaataattgtttattaaaactcaaaaaaatcaatattagtgtattttttcatccaccgatccttccaaccttcaactgcccgatcttctgtacctcttccgtatcaataggtctcgaacggtgatgatgacggtgcccatgatgtcccctcggtcccccatgatgttgtctgcgtctcacgcaatcacaccgatccttgtgtaaaattttcccctcttcacatttcaggtcacattcacatttgcaagtctccgcgttccacgtggcgttgcctgaaaatttgaaatttcagatgtcgaaaaacagaaattgacaacacaaaatgctctcacctacacaattattgcgttcctctttgttcgcgcactcacaggtgcatgatctaccaaccacgaagcccggtgcacattgtggagtctgtagtttgtagtttgtaggtatgtggcatttaaaaaaaacttacattagaaccgcaatcaaagcacgaacacgaggtatgctcctccattgtgatttcctttgtcatattgaacatgaatctcccgtttccgatgtaaagtagctcggcgacctggaaagttttcattttcataaaatttgatgccaattttcaaattcctcgtcattttttaccccgggaactttattcttagagctttgtcatcaaaaacacgggaaatctgcattttgtcgtaggcgctccggtgtttgcgtacttttggagctaccgtacttcgagattttagaaatttgagttagaaactcgaaaaaaagtttcaagggaaaaattttgtgagaaatttgatttttgatataaaatttgtcggaaattcaaatttcaagctgcaaaagtacgtcgaagttggacatcttgaaattcacagattcattgtaattttccagaatttttgatgcaaaatttgaatttcttgtcattttttaccctaaaaacctatatttcaatgctaacgctttaaaaatacaagaattgtgtgctttgtcgtaagcgattcggtgtttgcgtatttttggagctaccgtactccgcgagttcagaactttgaattagaaaaccgaagaaaattgtttcacgggtgaaattagctggaaaattcagatttttcaatcaaatttttcaaaaattcaagtttcagacagaaatttttggttaaagtgtgagaacttgaaatccacaatttcaatgcacttttcaaaagttttagccataaaattcgaatttcccgtcattatttgccttcgaaacttaattttcagcgtttagccataaaaaatagagaaattgtgcattttgtcgtaagcctcgtggtgtttgcgtacttttggcgctacagtatcccttgaaattttaaattttgagttagacgtccagaaaataacgaattataggtagaattagacggggagttcgaatttttaagtttttaagtaaaaactcaaaaactctgaacaagaacaatttgttgcaaaacttctaaaaaatcaataaacttacgtgtttcttcaccaaattaattgttccgggatgacaggtctccacagagttacagcagcttcctacgcactgtttcacctgaaattttgagatttttttttgattaaaatccaaaaattcaaatttcccggatacctcatagcattttgggtacattaacacctgtggatcgtcggacagttgtggaatcggaacacagactgattggagattacaagtatcatttccctgtttaatatccttcatactttgtaaatgaaacagtgtgtagccgtccatttcgtcatcgctaatattttgaatggaaactatgcgttgcgccgacattgagccactttttagggagagggcggctggaaaattgaaatttttaggttttttatacctaaagcagattgggctcgttgcgagctttcagaaaaatataatcatgcccaggtttcttcaagtattaaattttaccacaaattccctggtctcgccacgaaaactactgtgctatgagcttccgtagcaggacctacgcaaaattatttttaactaaattctcataaattttccagtaatttgtgttaaaaatcagtctgaaaacttgaaagctcgcagagttatcgattttcgaaacttttcgaaattttttttgtagcattttctagtttttttttttgaggaacttttgtaaaaattgaattctccttgttgtgagcttttagaaaagaataatcatgccggggtttctttaattgtaaaaattcctcaaatttcctggtcccgccacgaaaactactgtaccatgagttttcgtggcgagaaattttccacctccaccaaaacatttttttacgtatttttcataaaatttctagtaattcttgtcaaaagttagtttaacaacttgaaaattggcagaaatatgaattttcgaaaactttcgaaaacaatttttttcgaattatttgaatttatttttttaacttttaagaattcacctccatgcttatcggtcttttcaacgtgtcgatttgtcatttcgggactgtaaatcacgtgtaaatcccgcagtagactattcaaactcttggcgtgcttcagcattttgtggaattcctgaaattgtatttttcactgttttgtttcaaaatttctaattttttaagccaaaaattagtcaaaaacgtcaaaaattgagcgagttagggattttcgaaaaaaaaaatttccaaacttttcaacacaaaaacttttttttcgcgaatttatcgatttttccgttgaatttattttattttttataaactttttcaacttacatgtggaatatccgaatctgtaccccgggagcagatcactgcacagaaaaggcaaaaaatcaataaaatcatgggattttgcatggtttcgagagagattttaattgatagagatgtttagtagagagtgcttgcttcaggctcttgtcagctggtttaattgatttggagagacaactgggctccggtgagctgatatcttgtgatccatgagtcatgggaatgggaagcttctcgcaaagaattggtaattttttaaaattggttttaaattggaaactaattggtaaaagtacatgttttcataaaattgaattttgaattgccgcccgccaaaatgtttttaaaaaatttaaaatttgaatttcgcgatttttctcgccaccgtgggtctcaccacgatgcgtttcaccatgaaggtgtcgtagcgacatttttcaaaatttccagagggttctagaatatttcagaataatgttttcaaaaaatttaaatttcgaattcccgctaaatttaaatcccgccaaaatgttttcgaaaatattattcatttttctaaaactgaagtaatcatacagtacctctacagtactactacagtaccccgaccatatctccacgttgacgtcatagacgtcgcgtttgtcaaacaacccactacctcttcgaaactacaataattcatttcatatcgcctcaaaaaaaagtccgatgaaactaaaccccgtgcggcgctcttgcaaaatcgcgcgccgcaggctgcaaagagggcagggctcccgcgttttgaaacgtatttaattcatttttcgccaattttcgccatttttttgcggtttttcgttcaaaaatcggcgtttcaagatagaatattgaataattctcttaatttatgccctgaactgtaaaaatcgactaaaatctatagtttttcgatttttcagccaaaaaatgacggaaaacggggagtcggaggacgcgggcagtgtacggaagataaaggtgaggaataaatggaatttacatataaaacaatctgaaaaatcgctttaaaatctgaaaaatgatcgaattcaacgattttcaatgttttttcggtgtaaaacattcaaaaatcccgtttttgacgtgaaaatcttcaattttcccgctaaaaacctcaaaaaataccaaattttcagtctctccccggcatcggacttcccgccggcacagattacccgaatttggcagaaattccagaaacaccatgtaaagaggttttttggcggaaagaagtcgccgattggttcgaaattgcgaataatggctatagttttcatagaaatcgcgatttgaacgcggttttcgccaaagatttgtccggttactggtatcggctgaataatcagacaaagtgcttcgaattcttatttgagggatttaaagacactactggtgtgtgtttttctgatgggaaaacgtgaaaaaatgaagaaaattgagttaaaacttgaattttttggtcttttcgctctaaattgtttgaaaatgcgaattttgagcaaatttcgactggaaaattcgaaaattgtgcataaaatcgtatttttgagcaatttaaagcctattaactgatttttagataatttttctggaaattctggaaattatctaaaaatcgaattttttacattttctcagtgactaatgtgattctactcgtattgattgcagtaaaaaatgtatttattcacattttcagcttaaaatttgcctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttgcaatttttcccgaaaacttgtgattttcacggattttcagttgaaaattcgacttctccatcactttttaccccactaaaccggttttcagacaatttggaccaactgtcgtaaagttcggtgccaagaacgcaaacctcggtgtttgcgtacttttggggctaccgtaccccgggaaattcaaaaataggcttagaggctctgaaaatcgcacaaaaacactaaattttcgggtttttagcagagtttttatcggaaaactgaattttcttgaaatttggttattttccacccaaaaacgttattttcattgaaaattcgaaatttctcagcaaaaatctgcattttttgaacatcctgagaattgtaagaattttccaactttcaaagcaaaaattatgcaaaaatcgccgaaaaccgtggcaaaatttgtatttttgagcaattttcggctgaaaaacgctggaaagttggaaaaattggataatcaatgaaaatttcaacaaaaatggggatttttaagaaatttgaatcctattaactgatttttagttgatttttctggaaattatctaaaaatcgaattttttaaacattttctcagtgactcatgtgcctctactcagattgatggcataaaaactgtatttattcacattttcagccttaaattgggctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaatttttcatttttcccggaaacttgtgattttcatgaaaatctccggttttcagttcgattttcgaaatccccacacaattttaccccaaaatcgtgttttcccagctttcttgctcgaaatttgaattcccgggggtactgtagccccaaaagtacgcaaacacggagcatcccacgataaaatgcacagttttcttatttttgccgttagagtccgaaaaattgggtccccggggtgaaaagtgatggggaatttgaatttcttatcaaaaacttgagaaacttgtaggattaagtgattaaaatggattttacaaattttcaacttttttgctagtttttaataattttcaatgcgattttcgaactccccgccatttttcacctctgaaactctttttcccagcttcctagcttgaaatttgcatttccgggggtactgtagcgccaaaagtacgcaaacaccgagcatcccacgacaaaatgcacagttttctgaaattttgtgagaatatgcaaaataggggtaaattggtgctctgaattcgaatttagcagtgaaaaatcgtaaaaatttcaagttttcgatttttccaatgaaaaattataaatttttcaaattttcattccaaaaatatttttttttgttcagattacactcgtatatccctcccaccacagtctccaacattcgtcggcttcaatactttacagcaggcggtttttccgatgaattgtgacggaaaaccgattcttcccaaagatgataagggaaaaactgtcagttttgtcgaaaaattgaaaagtttcaccctaaaaatctcaaaatttccccccgaaaaggtccaaattcaacctaaaatctcaaattttcacggaaaatttcccaatttccctctaaaaaccacattttttcactgaaaacccagaaaatttcccctaaaaataggaatttttcactaaaaactcgcaattttctcagaaaaaagcaaattttaacctgaaaatattaaaatttacccccctaaaagtcgaatttttcactgaaaaagtgtaaatttttccctaaaaatctagggtttcagctgaaaaatttgtgtaaaaaaatttaattttaccgaaaaattgaccttaaaatctgaaattccaatttttttaatctaaaaaacccaaattttcactgaaaaaattgaaatttccccctgaaaattacagttttcaagtttaaaattaaataaaaaagcctaaaattcccaatttttgagttaaaaattttgaaatttataaatttatctaaaaaatttaaattttcattaaaaaataccaaatttttaccacctgaaaaagctgaaaacttccctcaaaatggtccaaattcaacctaaaatctcaaatttctcacctacaaaactcaaaaatttaccacaaattctcaaatttccccctaaaaccacaatttttctgtaaaaaaaaaagaaattttcaccatcaaaaaaattttgaaattaacctaaaaaactcgcattttttcattgaaaatgtcgatttttcacctaaaaactccaaattttccgcctaaaaagctcaattttccaccaaaaataccgaatttttcccattaaaatgtagatttttcaccgaaaaagctaaaaacttccccctcacggtctcctcgggtggaaattgcgatagggcgcgcttgctgcaccttcattgcgtccatcgatatttcaccattgataagtgatttccctcgttttttattagtttttcgccgatttttctatttcaaaattagtaacaattataaagtagactgaaacaaaagtggagaaacaaaaattatcggaaaccgttcggtggaaatgcataacgaactgtttgaaaatatcaactgaattttcggattttttgaaattaatattttatttaagtttttctcataacctgcaataataacgtttatagagcaaacttttgtcgtcattttaagatataattcgtctatatacctgttgaaagaactcagatcgaactctttttgtgaaatccagttataatttttcgttaaaaagaggagctaaaagttattaatctgaattaaacgagtcgagacagtgaatctagttaatatttggtattttattgaagcaatacacgtataaaacattttataatgggtttttcggctccaattttgttggcacatactattgtacgtttgggctcaaataagccatacaaagtgctgaactatgaagaataatgtttcaacattacattacttacaaaaaatcaggttgaaagcaatatttacagtctttcttggctctattcaacataacttagtattaccatcttattctgtgcctcaacttaatcgttacaagtttgaattcttgaggagactgtatttaaaacctattacggcctttcaaaactcaaatttataaaaacggtatcttcttaagctttcgtttttagtttccaatactttcctttcagtaaggcttgaaatttttggaagcttcactgcaagtttcccacttcacgattttccaatttcaacttgttaaaactggcaagatcacagaaaaagccacacttccatgataaaaccacagaaaattaaagaaattgggctgaatgtctcacatttggtgattctggcacatgatcatttctcaaaacttcaattcaaagataaaattgtttgtggccaaaccttcatttcttatttgactttcaggctatatatttaataatatttcttaattgtcttcaaattttttgagatttccccactttatgtagtgaaaacaaagataaacttcttattttctcaatttttcaattaatttaaccttttgcagcaaggtattctctttttaactgagaaaactatttcaaaaactcatttcatcttctttcctttgttttctcaagaaaaattcataaagaaatgcattttttccgcaaaaataattcaatattcagaagtgcgccagcacgcgaaaggcgcatcggtgaaacgcgcaagcaatctccctcccccttcgtttccacccgaggagaccgtgcccctaaaaatcgcaaattttcaccaaaaaatctcaaattttcatggaaaataccaaactttccacctaaaaagctcaatttttcaccaaaaaaattttgaaattaacctaaaaatttcaaatttccctctaaaaatcgcattttttcattgaaaatgtcgatttttcacctaaaaactccaaattttccgcctaaaaagctcaattttctaccaaaaataccgaatttttcccttaaaaatgtcgatttttcaccgaaaaatctcaaatttccccctaaaaatcgcctattttaaccaaaaaaaaactcgcattttcctaaatttcactgaaaaaccaaaatttttctgtaaaaaactcaaattttcaccggaaaaaatctcaaaaatcatctaaattctcaattttttcctaaaatgcttaatttacaccgaaaatttaaaatttcctttgaaaagtaccatttttctgtaaaaaactcaaattttcaccggaaaaaatctcaaaaatcgtcattttttttcccaaaatttccccataaacatctgaaaaatcgcaatttttcaccaaaaatcaagattctatgctgaaaaacacaaatttctatttaaaaatcacgattttcaagttaattgacctcaaaatctcaaattttccttctaaaaagtcgcgaaattcactttaaaatattaaaatttacctaaaatccaatttttaagtaatttttcattgaaaaaactcaattttcactgaaaattcccaaattttcacctaaaaaatcaccattttcttctttcagattttcccattctacgacggttatccattatttccagttgacgattcaggtgcaatttgtgtaccacttggagacgacgaaaaacccgtttttccacgaattccagaagaatttggagcttatgtgccgtgtgacataaatggtacttgaaaattgcgatttttcgcccattttttcccactaaaaactcgttttttaagccattttctcgattttttgaaagagccgcgacgtgcatcccccgacgtttttgatggtttttcggcggtttttgttttgaaaatttatcgatttttcacgggaaaaatgtgaattttttaggtcgagttgtactgccgctcaatgagctcggagagcctatatatccacgtgatgagcttggaaatgtacttatgccttttattattttggatgatggaacacgaagacgagcggttttttgtgcggaagatggtacggatattcgcgtcggaatttattggagaaaattggagaaatttgagattttttagcgaaaatctgcgaaatttccgattaaaactgtgaaatttgaagaaaattggccgaatttcacctaaaaacccgctaatttgccagaaaattggtgaaaattggcaaatttgaattttttttgttgaatttcccgccataaaatattcaaaaatccaaatttttgaatttcccgccataaaatattcaaaaatccaaatttttgaatttcccgccaaaaaacattcgaaaatttgaattttttgaatttcccgccaaaaaatatttaaaaatttgaattttttaaatttcccgcctattttaacgcaatatccaatgtttgcgtacttttcaagctacagtaccctccggatttttttggcgggaaattcaaaaaattcaaattctcgaatatttttttggcgcgaaattcaaaaaattttaatttttgaatattttttggcgcaaaattcaaaaaattttaatttttgaatttttttggcgcgaaatttaaaaaattcaaattttcgaatattttttggcgcgaaattcaaaaattcaaattttcaaatatttttggcgggaaattcaaaaaattcaaattttcgaatattatttggcgcgaaattcaaaaattcaaattttcaaatatttttggcgggaaattcaaaaaattcaaattttcgaatattttttggcgcgaaattcaaaaattcaaattttcaaatatttttggcgggaaattcaaaaaattcaaattttcgaatatttttggcgggaaattcaaaaattcaaattttcaaatatttttggcgggaaattcaaaaattcaaattttcgaatatttttggaattttcaggtaccccaattctaccatttcacaatggagaacacgctcttgaagttcacgaaggagaagtattatttcaatacgaatatcaacaaaaaatgatgcatttggcccaattttcggacaaaaaaacggcccaaaagccccaggaattgatggatgaacaattttatcagcaacattatcaatcttatcaacaatcgacaatttccaccgcaaattctacagaaattccgtcgaaaatcggccaaaattctgcgaaaaacccggcaaaatcgacgaatttactgctaaaacagctaacttttatgaaaaagaagcaagaagctccgtcgccgagctcaagtccactttctgcagcaattccggctgaacggcctgctaaaccgaataaggagaaggaacggggcgatcggttcttgccagagccttcaaggcgttttaataggtagaaaaatcgagaaaattgaattttccgcattaaattgctcaaaaattcccatttctgagcaattttcgactaaaaacgctggaagattggaaaattgtgcattttttcaacaaaagcccgtttttaccgttttaaattgctcaaaaatcgactttttcgagcagcactaacattttcgtgcatattatcgtaaaatatagtgtttgcgtacttttggcgctacagtaccccgggaaattcgacgttttagtgaaattttaaatttctctgaaaaattggtgcattttaagggattttacgcaattttccgaactttaaacctaaaatttccgatttttgtgcaaaatatcgtaaaatatagtgttttggtggtgtttgcgtactttcgaggctacagtacccccggttgttcaaattttcgttgagtttggggaaaatttagaaaataatagatttaatgtctaaaatttcaaactttttgaattcccagccagctaaatttttcccaaaaaaattggaaaaattttagggattttacgaaaatttgcaagttattgcctaaaactggccgaaatttactttttttcggaataattgtagaaattttgtgaattttgtgaagtcaacaccgttttttcctaaaaaaatgccaaaaatttcccgaaaatcccctctctgagcatttcccctgtgacttgtgcgtttctcagattttggcataaaaactgcatttattcacattttcagtcttaaattaggctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttcatttttaagccaaaaatttggattttcacaaattttcagtagaaaattcgaattctccatcgatttctaccctagaacatccttcaataggcttctagctcgaattttgttttctggggtacggtagccccaaaagtacgcaaacaccgagggcctcacgacaaaatgcacaactttcttaattcttgcggctaagctctgaaaaacaggttttcgatgtaaaaaatggcgagaaactcgatttttcacaagaaaaacgctgaaaatgttgaaattttcagatttaatcaccgtaatcgatctcctccatcactttcctctcgaacatcacgtcatcggtccccggaacgccggcgggatagatcacgatccagaagtctgacatattcaccaattgatcgaaaatcccgaacaaatagtgataaatatgataagaaacgggcgaaaaagagcaacagacgggatagatcaaggttcggtgatgaaaaatttgaattttttgaatataccgccaaaaaatattcaaaaatttgaattttttgaattttccgccaaaaaatgatcaaaaatttgaatttttgaatttcccgccaaaaaatgatcaaaaatttgaatttttgaatttcccgccaaaaaatgatcaaaaatttgaatttttgaattttccgccaaaaaatatccaaaatttaaattttccgccgaaaaaaaaaccgatattttttcagttcttcatcatccggttcaacttctccaattcgacgcgaaaaacgcgaaaaatccaggaaataaatgcatttttatttatttttatatttttattcaaatttaatttattattttattcgaaaaatcgatattttttctgaaaaaatcgatatttttctgaaaaatcgataattttctgaaaaaaaaaatcgatattttttctgaaaaatcgataattttctaaaaaaaatcgaaatttttctgaaaaatcgataattttctgaaaaaatcgataattttccaaaaaaaaaatcgatattttttttgaaaaatcgatatttttccaaaaaaatcgatatttttctgaaaaaatcgataattttctgaaaaaaattgataattttctgaaaaaaatcgatattttctgaaaaaatcgataatttttctgaaaaaatcgataattttctctaaaaatcgatatttttctgaaaaaatcgataatttctgtggttttcaatcaatacttgtttcaattgtgcttcttttttttgtaattcaaaattaaatttttttttctccgaatttttccaattttttcagtttttttttgttgttgattctccctgactttgcaatatttttttttgttttacaaaattattgattttttcagaatttttttaagaaattttttttcagccgtacaatgccacgtggcattgtgctcaccaacagtaaacccgtcgagggaatggtttaccaaatggcattggtttttgatcaaaattatgaggtaaaaaaccagaaaattcgcaaaatttcggtgtttgcgtacttttggagctacagtacccccgaaattcgaagaaatttgagtgaaaatttgaatttctttgaaaaattggagcattttgaggagttttgcgcaattttccggcctgtaaaccgaaaattgccgatttttgtgcaaattgtcgtgaaatctagtgtttttgtagtgtttgcgtacttttggggctacagtacccccgaaatttgtaatttgagtgaaaaatcgatttttttttttaattttttgagcattttcctgatttttcagaggttttccgacctttaaaccgaaaatttccgatttttgtgcaaattgtcgtgaaatccagtgttttggtggtttttgcgtacttctgggcctgagattttcagtaaaaactcgactttttttttcgaaaattgaaaattttgcataattttataattttttttcaggaaaactcgaaaactagacatttttacgatttttcagtgctaaattcgaattcagagcaccaatttacccccattttgcatattttcacaaaatttcggaaaactgcattttgtcgtgggatgctcgatgtttgcgtacttttggcgctaccgtaccccgggaaattcgaaatttcgattttcccgattttttagatattttacgcaatttcccgacctttaaaccgaaaatttccgatttttgtgcaaattgtcgtaaaatctaaaaaaaaatttcgaaaatttgcaagttttaacctaaaactgctggaatttactgtttttttcgaaattattgtaaaaatttgggaattatcctctgaaaaatggctcaaaaccgaatttttgagatttcaagctaatttttccgaaaaacttttgttttccgaggtttttaactggaattttggaaatttttggaaaaaaatacgatttttcatcaaaatttcacgattttcgaatttttcgcgttttcctaggcttctagctcaaatttggatttcccggggtactgtagcgccaaaagtacgcaaacaccgagcatcccacgacaaaatgcacagttttttgaaaatttgcgaaaatatgcaaaataggggtaaattggtgctctgaattcgaatttagcagtgaaaaatcgtaaaaattccgagttttcgagtttttctataaaatttgtaaaattatatgcacaaattttcaatttttgaaaaaaaaaaggttttcagttcgattttcgaattccccagccaattttacccctaaatcgtgttttcccagctttctatcgcgaaatttcaattttccgggttactgtagccccaaaagtacgcaaacaccgaggatcccacgacaaattacacagtttcttaaaatcgagcgaaactgtgcaaaataggagtaaaaaagtgctctgaatgcgaatttcgcagtgaaaatgcacaaaaatgagtagttttcaggcttctggcctaattctggcccgaaaaaaacgaaaattttcacgcttttcagaccgtaaagcagtttaaaatgattccagtggttacacaacgcacaaaaacgaaacaagtctcaaatgtgtacaggtaatcggaaaaaaaaccggaaaaaatcgataattaagcggaaaatgacattttcagtggaaatatgcgcctcgaaaaatcaatgcaaatcgacgagactcttgtattcggtcaaacaattgactgggaaccaactgatgatgaaggaatgtctgttgaggtgaaaatggaagaaattctggatttttcagtgaaaatttggagaaaaacgagtgaaaacccgcgtttttgcggtgaaaattcgaaaaaaaaaccgagtttttcgattttttcactgaaattttggaaaaaatctaagaaaaatgactaaaactcatcaatttctatgaaattctggatttttcagtgaaaatcccgtttttgcggtgaaaatatcagaaaaaaacagttttttttgaattttttgaatttcccgccaaaaaaatattcaaaaatttgaattttccgctaaaaaatatttaaaaatttgaattttttgaattttccgccaaaaaatattcaaaattttgaattttttgaatttcccgccaaaaaatatttaacaatttgaattttttgaatttcccgccaaaaaatatttaaaaatttgaattttttgaattttccgccaaataatattcaaaaattcgcttttttcactgaaattttgaaaaaagtcttttaaaaattcgtgaaaaattaaatttttcattgaaaaacctgaaaaactaccaaatttttccactttttcgtcgaaaaatgactagacactgaataatttttacattttccactgaaaatttgaaaaaaaatccacgaaattccgaattttgatgcaaaaatccgttaaaaaactgcaaatttttgcaaatttcatgcagaaaattcgaaaaaatccccaattttcatcctaaaattccattttttttgcagattgtgagaaaatacaaacgaatccgcccggcctatgaatctcgaattttcgacggagaaacacagcttctactgcctggaattatgtccagaaatcgagaagttctttggatgtgtgatatttggccacaactcgaaattagtacgggtttttcactgaaaacccgccgcgaaaaatggctcaaattcatggatttttcaaaaaatcccactgaaaattcaatttccccccaaaaaacctcgaaaattcgaattctccacgtctccagctttcaaatgacccctgacatattccatgcaattgcccatattccatgcaatttgccccaccgacacagctgaaatcggtgctacagtaacccgcgtggcgggacccgaaattttcaaattgcgcggaatatgggcatgttgggggtcatttgaaagctggagacttggagaaatcgaatttcagcattatttctcgaaatattgaaacgtttgacacaaaattttgggaaaataggaaaaaaaccagtttttaatacaaatctgcagaaaagttcgctgtttttgcgaattttagcatatttaaacctgaaatttaaagtttttgaacaaaatgaccgaaaattgaactttttgaagatattccgcttaaaaacgtcatttttctcaaggttttcattcaaaattgctaaaaatccaagaatttttcccttttttgaatgaaaatcgaggttcccatcaaaaaatcgatatttcccctgtgacttgtgcgtttctcagattttggcataaaaactgtatttattcacattttcagtcttaaattgagctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttaattttttcacgaaaaagttgattttttgtgattttttgcgattttcaatccaaaattcgaattctccataacttttcacccacgaaacccgattttcagcaaatttagactaaatgtcgtaaagttcggtgccaagtacgcagaaactcggtgtttgcgtacttttggcgctaccgtaaccctcgaaattcaaattttgagttagaagccgtggaaaaggtgtaatagacgttaaattcgacgaggaattcgattttaataatgaaaattgttgaaaattcctagaaaattgagaaaaattgattttttttttccagaaaacgatctgaaacacgttgtacacccaaatgtggctgtaaatgcgtgggtaacactacatattcgagatgatcaatcgataaaatatgaactttattcatttgattcaacagctgattcacttcaacatcaagtacggaatgcctcttggaataaggaagttgagggtaatttcccgcatttttgggaccccgtggacgaaaatcgcgtgaaaaatccggatttcgtagccccaatggctgattttttgagtggaatgcgtggatatgtgatgtctgatcgaattgttctggcagaagatccacgtcatcgagatgtatgctttcatcgaattgtgctccgagagagcgatggatttccggagccgggtaccgggaaaattctggaaaattctggaaaattctggaaaaaaatgcattttttttgcaggctcattcatcagatttgacgctgagaaaattgattttttgaatatctacgcgatgaagggaattgttaatttgaatgatcagcgagctctgccaaggacggctaatggaaatgtaattgatcaattttttctcgaaaactaggaatttttacgatttttcactgctaaattcgaattcagagcaccaatttacccctatttcggatatttttgcaaaatttcagaaaactgtgcattttgtcgtgggatgctctcggtgtttgcgtattttcggggctacagtaccccgaaaattaaaattttgagctagcagcacgggaaaccaggaattcggggtaaaaagtgacggagaatccgaatttgatagtgaaaatttctgaaaatcaataaaaatcctgaaaatttgaatttcccgccatttttcaccccgggaacctattttctagagttttaccttaaaatttagagtaactgtgcattttgtcgtaagaaatttggtgtttgcgtattttcgggcctacagtaccccgaaaaatttaaattttagctcagaaccccggaaaaaaagtattcagtggtaaaaagtgacggagaatccgaatttaacaatgaaaatcttcaaaaatcaataaaaatcccggaaaaatctagtgtcttggcggtttttgcgtacttttagcggtacagtacccccggaaattcgaaatttgagtgaaaattcgattttcttcggcatttttgagcattattcagaatattttaagaagttttacgcaattttcccaactttaaaccataaatttccgatttttgttcaaattgtcgtcaaatctagtgttttctacggtgtttacgtacttttggcactacagtaccacgaaattagaaaattctgaaaaaatgtctttgaaaattcaaatttagcaaaaatatgaaaattttaatgcaaaatattcaaaaaatttgaattttttgaatttcccgccaaaaaatggtcgaaaatttgaatttttgaatttcccgccaaaaaatattcaaaaatttgaattttttgaatttcccgccaaaaaaatattcaaaaatttgaattttttgaatttcccgccaaaaaatattaaaaaaactgaattttttgaatttcccgccaaaaaaatattcaaaaatttgaatttttgaatttcccgccaaaaaatggtcgaaaatttgaattttttgaaattaaaaaatttcacaattttcagattttttttggcgggaaattcaaaaaattcaaatttttgaatattttttggcgggaaattcaaaaaattcaaatttttcataaacttcagttcaattttcggtgtttgcgtactattggagctacagtaaccctgttgtgtttttttgcagattaaaacaacaattcgtcttcacaacgattcgccaggattctattattcagaagctcttcaatgcttcatggatgatccgaataatgtattagagcactggttgctctcaaaatattcaaatagtactctacaagtcggaatctctgctggagaaccatcagccatcggaactccgagatttgtgatcgctgagattactgatgctaaagctcggaagcttcaggctctcaccgaagccggagatatcaaattcgtcgcggagccggcgattgttatcaattttcgcggtgttttatatgttccgagactgccgaaaagcgtttttaggtgaaaatttgcgaaaatttgaaattcccgcgcggtttttaaccccagattccctttttttttaattttctaaaaaatgaacctaaaaattcaaattttgagtgaaaaatgctccgcgaccaatcagcggtgttggccacgcccctttatagcgttttagacgaaaaaaatccgagttttcgatggcctaattttttgaattgctaggccaccaccaaaaaaaataaattgctcaaaaatgcagattttgagcgaattactgcgaaaattttggaaaattggaaaattgtgcattttagtgcaatttagcctgaaaaattctgaaaaatcgtattttaactaatttttagatcatttttctgaaaatttgtctgaaaatccctctcctaaagtcagaaaacgtgagaaaaattggtggccgagaactttttgcagatttctaggccacccattgactaattttttacaaacggcgattttttttttagttttcactgaaaaaatatcgaattaaaattaataacccagaaaataacatttattttttcgtggtggcctaacttttagatttttctaggccacgaatcgaaaatagaggtaattattccgttttcgacaaaatttattaaatttttagagctgaaatcgtctttcttctcaaatttttattcaaaattgccaaaaatccaagaatttttagctttttgagttaaaattaatttctcagtgactcatgtgcctctactcttattgattgcagtaaaaactgtatttattcacattttcaaccttaaattgagctgaaaatgtgaataaataccgcatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgaccaaattttcagttttcccggaaaacttgggatttttcacagattttcaatatgaaattcgaattctacatcccttttcacccccggaacccggttttcagctaatttagactaattgtcgtaaagttcggtgccaagtacgcaagacactcggtgtttgcgtacttttggcgctaccgtacgcctcgaaattcaaaaatagagttagaagctcggaaaaagtgtaataggcgtgaaatttgacgaggaattcgattttaatactgaaaaacgctgaaaattcccggaacattcaaaattttcatgaaaaagtatttttttccaaaaaaaaaaaagtgatttttggccgttttttaagccaaatttcctgcagactccgctcgtcagatatgccaatacctccaggaacacggatcttcatcacagcacactatgaaaatcgttggattatcgataaaatcgacgttgatcgccgagatacgtctgttgaagcgctcgtttgtcacgatgcaaagagtggaaaggaaatggtaattattgcgtacttctgagactacagtaacccgccgccccgagattttcgccctaaaactgcatttacttgtcattttcgcctctaaataatgtttaaagcgaaattttcacttttctagtgttgttttcttgaattttcagttgaaaattgagtttttcactcatttgtacccctagaaattggtttttttgcaaaaataaattggtggcctaacttttgggatttctaggccaccaatctgaaaatgctgattttaggctatttttgtcgacttttttaggggttttatttcaaataatatttaaaaaaaaaacgatttaactcgaaaatcgcaaaatattcagattaaattccgaagatcttctaaaaatcgatttcccctgtgacttgtgtgcttctattcagatttttggcagaaacactgtatttattcacattttcagccttaaattggctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggacatgcggaagctatgcccaaattttcaatttttcccggaaaacttgtgatttacgccgtttttcaatacgaaattcgacgtttctatcactttttacccccgtaacccggtttttagccaatttagacaaactgtcgtgaagttcggtgccgagcactcaagacactcggtgtttgcgtacttttggcgctaccgtacccctcaaaattcaaattttgagctagaaaccccggaaaaagtgtaataggcgtgaaattcgacgaggaattcgattttaataatgaaaatcgctgaaaattcccccggaacatccaaaatttccacaaaatgttcagttttaatcaatttttcgccggttttcgatgtttttttgacgatttttagtgttaaaatcgaattctccactatttgtcacctttttttttcgtcacagatctggttccactgtacgtctgctcggggctccgaccaacttccatatctcctgaaaactcaacaattcggattagttcaaacgccgaaatcattccaagtccgccgtaatccgtcacttttcgtgtgggacaacgtttgggtcactcttaatgattgtcacgttggggagggctcaaaaccgcccacgcgattcaaaatttgtgcatttggaaaagttaccaactttacgacggtacgaattttgagaaaatgctcgaaaatcgatattttcgtgacttgtaactctgaaattcgaattctccacgtctccagctttcaaatgacccccatcatgcccgtgttccggcaagtttgaaaattctgggtcccgccacgctgggtactgtagcaccggtttcagctgtgtcggtgggtcaagttgcacggaatatgggcatgttgggggtcatttgaaagctggagacgtggagaatttttgagataataggaaaaaaccagaaaaatcactaaaaactggtagtttttagagcgaaaacgtgttgaaaattggtggccgagttttttgcagttttctaggctatggagaatttcaaggcaattttttaagttttcactgataaaaaatcgaattttacccaaaaaataacatttattttttcggtggcctaacttttttagatttttgtaggccaccaatgaaattaggtttaattaggccgttttcaacggaaattggtttttttgcacaaaataaattggtggcctaacttttgggatttctaggccacctatctgaaaatgatggtttcaagccatttttcatcgtttttttttcgggggtttaatgtcaaagaatgacaataaaaacgattttaacttgaaaatcgcaaaatatttagttaaatcccgaaaatcttctaaaaatcgatatttcccctgtgacttgtgtgcttctattcagatttttggcataaaactgtgtttattcacattttcagtcataaattgggctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagtacatttgtcactcggagatgcggaagctatgcccaaattttcaattttcccggaaacttgtgattttttacagattttcaatacgaaattcgaattcttcatcacttttcacccccgggaacccggttttcagccaatttagacaaactgtcgtaaagttcggtgccgagtacgcaaggcactcggtgtttgcgtacttttggcgctaccgtacccctcgaaatttaaatttcaagctagaaaccccggaaaccgtgtgatagacgtgaaattcgacgaggaattcgattttaataatgaaaatcgctggaaaattgccggggaacttccaaaattgtcacgaatttttcgtgattttttaaccgatttttagtgttaaaatcgccattttcgacggtttttaaaaattttttttttgaaattttgcttttttttttcagcgaatctctccaatcgagttgcagccacgatctccagattttccagttctcacaagtttcatagaagatcataattttattgaggaaaatacacttaataatgtcggcgtaccaccggtttacggggaaacggccgttgcagagtatcaaggtgtggaatttctcgagaaaattctgtttgatctacaaaaaacgcgggaatttttcgcccgaagaaaaatgtgacgtcagcacgttcttaaccaatcagttgagagaagtctgccgcattttttgtagatcgacgtagatcaaaccgaaatatggggggacactctgacaccgccgcgcatgttgatctaccaggaattgcgggaattacgacgcagacttctcaactgattggttaagaacgtgctgacgtcacatttttctgggcgaaaaaacattcccgcattttttgtagatcaaaccgtaatgggactgcccctggcaccgccacgtgctgtcaggttgtgtgtcaatacagtttgatctacaaaaaatgcgggcaaaattttttttgccaggaaaaatgtgacgtcacctcgtttttaccgcatttttttgtagatcgtcgacgtagaaattgcgggaatttagacgcataaagacgtcatattattttggacggcgaaaaaatgcgcgcattttttgtagatcaaataaatttcgagaaaattcggtttgatctacaaaacaagcgggaattttcgccgccgcccaaaataatgtgacgtcagcatgctcttccaccaatcagttgagaagtccgtgtctaaattcccgcaattcctggtagatcaacatacgcggtggtgtcaactacggtttgatctactgagatctacaaaaaaatgcggcagagttctcaactgatgatttctcatggatgaaaacacgtgctggcgtcacatttttcagcgcaaaaaaaaattgcgcgcattttttgtagatcaaaccgtaatgggactgcctggcaccacaccacgtgctgtcaggttgtgtgtcaatacagtttgatctacaaaaaatgcgggcaaaattttcgcgccaaaataaagtgacgtcacactgcaactttttcctgacgagggacgaggaaaagtggtttctaggccatggccgaggggccgacaagttttagcggccattaatcttgctttgttttccgcctgttttcttttgtttttcatcgatttttttcgttttttcttattaaaactgataaacaaatattttttgcagatgctaaaccaatttccgagtaaaaaaattatgtattcagtgggcaagcagcggtgacagtgggcattgtaatatgatggattacgggaatacaaaacctaaactttttctgaaacatgatacatatgatgcttagatgctgaaattacctgattttcataacgagaccgctgaaaaagttttgaggttttcaaaattcaacttttttggtgaaaaagtcgagattttcgcacaaaaagttgaattttgaaaatctcaaaactttttcagcggtctcgttatgaaaatcaggtaatttcagcatctaagcatcatatgtatcatgtttcagaaaaagtttaggttttgtattcccgtaatccatcatattgcattgaccactttcaccgctgcttgcccactgaatacataatttttttactcggaaattggtttagcatctgcaaaaaatatttgtttatcagttttaataagaaaaaacgaaaaaaatcgatgaaaaacaaaagaaaacaggcggaaaacaaagcaagattaatggccgctaaaacttgtcggcccctcggccatggcctagaaaccacttttcctcgtccctcgtgaggaaaaagttgcattgcgtcagcacgtttttaccgcattttttgtagatctcagtagatcaaaccgaaatatgggacggatttccatcaaaaattcaattttttccagaagctctgcgagccccccgtgcacacgcgaatataatccgaatgattaatgatttggaggatagcctcaattgggcaagaaatccgtcgaaaactattaaattggaaatcgatgagcacttggatcgatgtgatacgtgtactaatcgagatttgaacccgaactgctattttccggaatacttatcacatgcgctccgtcagaagccggaaattgttgaaatcttctcgcctgggatgctctcaatcatcacttgccgcagatttggcggcggcggcggtgtttaaaaaagaattttttttttttgacgggaacaactgatttttttgtgttatttcgtgttttttataccccattttttttacaagaaaaagctcaaaaattgagccagaatgaagtttttaaggaatgcaaacaatcaattttttttcaaaaatttttggatgtcttccaattttttttttttttgggatttttttggatttttggtgaaaattacagtttttttaaattgaaaattggggtttcaaagtttagtggccgaacttgttgggattctaggccaccaatcgggaatttcgagatttttttccagaaatctccaatttttagcaatcttttacactagatcagtgaaaaattagaaaaaaaaacaaaaaaacgagtttaggccaatttttagccgaaaaaatacggtggcctaactttttgcaatttctaggccacacctatctctttattttaaaagggaaatcttatcacttttctagtgatttttctcgaatttccggctgaaaattgagtttctcactcatttttacccctagaaattggtttttttgtaaattggtggcctaactttttgcaatttctaggccaccaatctgaaaatgatggtttcaagccatttttcattgatttttttttgggggggtttaatgtcaaataatgacaataaaaacgattttaacttgaaaatcgcaaaatattcagataaaattccgaaaatcttctaaaaatcgatatttcccctgtgacttgtgtgcttctattcagattttgacataaaaactgtgtttattcacattttcagtcataaattgggctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttcaattttcccccaaaaacttgtggttttttttctgatttttcagtagttttcatagatttttagtgctaaaatcggattctccgctattttttacccccaattagtggtaactttctctcgttcccagctgaaaaaagttggtggccgaactttttggatttctaggccaccaagcagattttgagccattttcaatgggtttttttctggaatttttcagttcaatatttgaaatttctgagaaaatgttcccaaaaagtaggaattttcctcggatttcaaacatttctcaaaaaaaaatttttttttcgccgaattatttttttttaatttttaattttcgcggggtttttctcagcattttagcccaaaaaaattcgaattttcctcctaataaatctccaaaaattggtagtttcacgtcatttacactctcccagtgatgtaccaagttatgatgagaacttgtaacattggaaaaatcaatcaataatgtaatcaaaaacccgccggaacagaagattgggtggcgatacctcgaaaaaatcgataaattcagtgggaaaattgctgaaattccgctaaaaatttgataaaaatgcagggaaaaaaaaaagttttgatctacaaaataaataaaaaattatttttaatttttgaaacccgaccggcgccggaaaactaaaaatcgatttcccctgtgacttgtgtgcttctattcagagtttttggcataaaaactgtatttattcacattttcagccttaaattggctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagtacatttgtcactcggacatgcggaagctatgcccaaattttcattttttcggaaaacttgtgatttttttttgatttttcagtagttttcatagatttttagtgataaaatcggattctccgctattttttaccccaattagtggtaactctgaaattttttaaaggtttaaaatatttttcgctaatttttagaaaaaaaaccgttttttccccaatttttacgtgaaatcgccccgatttttgatgcttaataaacatttcactcattttttcaaaaaattccacacgattttcgacaattttgaagggtaaaagtaggtttttgatgattttctaaaaaaaacttcaaaaatagattatttcagcattttttgccggaaaaactaaaaaattggggattttttcacgattttttatcgttgaaaattgagttttaagtgttttatacgaaaactcactggtttctttagaaagttaaaatttttccaaaaaaaaattttagggctgaaaaactgtttggccctaaaaaaattttcaaaaaaaaaaaaaaaaattttttttttttaatttttaaatttttcggtcttttattacttttctttcttattttcaataatatttcctctgctcgtccaattctaagctccgccccttcctacagtaccccctcttccaggctccgcccatttacgcgaggacgacgctcgagagatgattgccacaccgacgggataccggcggaatgtttatatgcagagacaggtctcattttttcattttccgggctcttttttttttacggagaaattcgatttttacaaacaaaaaaaatttttcgaatttctcaaaaaaaaaaaaaattttcaaaatttccattttttttaaaattctttaaaaattcagatgtctcaacaagtagtcgtcgcccatcatccccagcccctccaaaactactgccagcagctgcagaaccagttggttcaggcacaggtacagtaccccacacccaaggctaccccctacagtaaccctttatcactgcagaatcaggccaactcggcgaacatgacgcttagagaggtgctgaacaagccttcgatccttcagcaaccatcgcagcaacagcagcagtacccggttcaggtaggcaaaaaaaaacaacaacaaaaaaaactccaaaaattctcagagccctctgaaacttagcacaatggatagagctcggtaagctgagcatatttgcattttgaacctaagctctatctcttctctggacgaagttacagaagtttcaagaaatctaggtcaaagtacagtactccaggctccccagaaacctggctcatcggttagagctcggtgtgctgagcatatttgcttcttgaacctaagctctatctcttctatggacgaagttacagaagtttcaagaaatctaggtcaaagtacagtaccccagggctactgtactttgacccagattttttaaaactaactctcataactttgtttagaaaaaagatagcgctatgagccaagaggcaaatatagtcagctcgccgagctctatcgaatgacaccattttcagaacgattctgaaaaatgtacagtaccccagtgctactgtagttaagtttgcctgaccactttgaaattagtaccattcgatagagctcagttcgccgagcgtttttgcttcttggcccaattctctatctcttttctgggcaaagttacagaagttttaagaaaactgggtcaaggtacagtaccccagggctactgtactttgacccagattccttaaaacccccataactttgctcagagaagagatagagctttggtttaagaagcaaatatgctcagctcgccgagctctatccaatggcactaattttgaacgttatgtaactacagtagccctggggtactgtagatatcgatttttcagcaacaaaaaaaaaaccaacaaaaatctcgaattttcagcagcaaaaccgtcagcgacaagtgattcgccagattatccccactgtaccacaagttcaacgacaaatgccacagcagcgcccaccgcaacaggtaatttttgggtcccgccacgaatttaaaggcgcagtgggctccgaaatttcaaaatgcttggaacatagtcatgttggggcgcaaattgaagctgaaagagaggagaattcgaatttttaagtgaaaatgtgaacaaaaaaaaataaaaattaaaaattgtcgcgatgagacccaaaaaaaatttttttttcaaaaaattcaaaaaaaatttttttttttttttgaaaataattttcttctctaatagcaatttttcagactcaaaatggtgctccgatgctccgactccctgtgcatcaaattcagcaggctcaccacctccaacaacagcagcggcaacagatgcaacagccgatgccgagccggcgacggtctgcggctcaccaagttcgccagagaattcaggctcagaatgtgagaattttcttttaattttgagggatgaagctcgccgagagagctttcagaaaaattaaattttttgtaaaaaattcaaaaaaaaaatgttttttccaaattttttctgaaaattttatttccagactgtccggctccaacaacaggagcaattggctcagcagcatcaccagcaccagcagcagcatgctcaatcggagctccaacaagttcagcaagtgctcatcgagcaacagcagcttaaccaggttcggaacttgaaaattttcagatttttagagtttttagctgtaaaagtcggtgtttagctcgctgagagctttaaaatgagccccatatcgactaagtttggagaacattcaggattttgggtctcaccacgaaaattccttggattactgtagctaaatgaaatttcctgaaagttccactaagaaattcgaatttcccgtcatttttcacacccggatcctgttttctagagctttaccacaaatattaaagaaattgtgcattttttcgtaagatcctccgtgtttgcgtattttcggggctacagtaccccgaaaattgaaattttgagctagcagcacgggaaaccaggatttcggagtgaaaagtgacggagaatccgaatttgatagtgaaaatttctgaaaatcaataaaaatcctgaaaaattgaatttcttcaaaatatcaatgatttttctcgtaatttttcgaaaatttcattgtcaaatttgaatttcccgccatttttcaccccgggaacctattttctagagttttaccttaaaatttaaagtaactgtgcattttgtcgtaagaaatttggtgcttgcgtattttcgggcctacagtaccccgaaaaatttaaattttagctcagaaccccggaaaaaaagtattcagtggtaacaagtgacggagaatccgaatttaacaatgaaaatcttcaaaaatcaataaaaatcccggaaaaaatcaatttcttaaaaatattgatttttctgtgatttttttgaaaatattgctgtcaaatttgaatttcccgtcattttttaccccgggattctattttctagggctttaactcggaatgtaaagaaactgtgcattttgtcgtaagaaattcggtgtttgcgtatttttggtgctaccgtaccccaaagaattcaaaattttagctagaaacccagaaaaccacgatttagaggtaaaaagttacggagaatccgaatttagcagtaaaaatctccaaaaatcaataatttccccgaaaatttacaatttttttccagaattcccgcaaacgcaagcaatctccacaagctcactggagcgacgttgataatgtggagaatctggagaatcaggcgaccgccgcacaacaaattccggcaaaaaaaccgcgctggaattcggtggagcaagagcccgagcccgaggctccgctggaagccgtcgagcagcagcaacagaagcagccgacaactgacgggcagcacctgccggatattgtcaaaaatattggaggattcgagattcgtgtcattcgaagtcacgacccgtcgcgcagaatctacacttattgatttttcccgccgccgaaaaatcgaaaaaatcgataatttattaatttctcttgaaaaatctcccaaaaatcaataattttacgacatttttcatcgattttccccctgcgattgtaatatttcccaattttttacattgtattaaaaaatgccaaaaaaacaatattttattgattttttttttcaacgatttttcaaagtttttcccgaaaaaaaaaacgaatgtattaataattgtacaaaaatgtttccattcccccccccccccctgagccatttttatcaacgttttacccaatttttccacaattttccactttttcctgaaaattatcgatttttgtgtcatttttgtgatctctcgcgatttctatacaatacatatctcgaccccacgactttttttgtaataaattattattaattcgcaaaaatttgaatttccttgggtctcaccacgattatggagaattttaagttgcaaattcgaattctccgtaactttttacctctaaatcgtggttttctgggtttctagctaaaattttgagttctttggggtacggtagcaccaaaaatacgcaaacaccgaatttcttacgacaaaatgcacagtttctttacattccgagttaaagccctagaaaatgggaccccgagctaaaaaatgacgggaaattcaaatttgacagcaatattttcaaaaaaatcacagaaaaatcaatatttttaagaaattgattttttccgggatttttattgatttttgaagattttcattgttaaattcggattctccgtcactttttaccactgaatactttttttccggggttctgagctaaaatttaaatttttcggggtactgtaggcccgaaaatacgcaagcaccaaatttcttacgacaaaatgcacagttactctaaattttaaggtaaaactctagaaaataggttccccgggtgaaaaatggcgggaaattcaaatttgacaatgaaattttcgaaaaattacgagaaaaatcgatatttcgaagaaattcaattttttcgggggcccgatttttggagcctgaacattgaaatttggaaagttgtgcattaccccgagaaaatcaaattttgagctagaagatcgggaaaaatggtttaagaggtaaaaaatgcaggaaaattcgaatttcttggaaattttacttgaaatttgataattgtgggcgaaatagaacgttttgaagctttttgtgtagttttttttcggttttcattcaaaactgtaaattttcgatcaataatatgaattctacgtctcttttcactccggaaacccaatttccaaagctcagctaccaaatcctgagaagctgtgcattttgtcgtaggagctgcggcggtgtttgcgtacttttggcgctaccgtactcagagaaaatcaaaagttgagctagagactcggcaaaaaatgtgaatagtgggaaattatgcgaggatttcgtttttgaagttggttttccaaaaaaaaaattgatttttcggaaaaaaattttccaaaaaaaaaattttttttttacaaaatattgttttccccgccggggtaaccagaaatgaaagccgtagagggagaaaaatgaagaaagtgaccttgaaagtccctttctgccatacaaaaaacgctcccctaaccagctgcccccacacacacaacttattccgaggcacacgagagagtacacacaatcaaagagacgcagaaatgcggcaatttcgagtgttgggggcgatgaagacggcggagaccattcatttttgccatctgatcacttttccgattttttctaaatttttttttttgacaaaagttttatacaactcggtaaataatttttgtacgtaggcttactttgaggtcttataactttggactcaaatgaactgtcaaattttaaagtaaattgcctgaaagataaagttttaacgcaaattttggtaaaatttcaccaaaattcatttggtagtttttgagaaatttaggttttaattgagaaaataaaaatgttgaaaatttttttttttaatttttaaattttttttttttgcattttccaaaagtttaaatcaaaaatttgatattttctgaaagaaaaataaaaatatatttaacgctaattctgacaaaatgtcaagcaatttgcacaattattctttgagatactacagttttaccgaagaaatttcatttttcagtaaatttttcaaaaatttaaaatttaaatgggttttctgaaactttagggcaataacacattttttacaataaaatttttttaaaaaaacaatgaaaagtacatatttgtcaagttagaaaatttgaattttcaccaaaatttttttttaaacttttttgaaatttttttttaatccttgaaaaaaatttaaaaagttcaaaaaaatgtcttttcatcagaaaatttaatttttattacaatttggttatgtatatacttttattaatataaatttattgatatcctcaacagatatatgctttcaaaggttgaactggacatggtgcatcgatcaaaaacttggacagcttatatctcagttgtcattgtttttatcaaaaaatcgataactaataaaatgttcattatgaacttctctataactttgtagttgagcacttttccatatctccaaaattaacagagatactagccgtcaaagttagagttagacatgttgcatcgacctttcctaactttgacagcccataactcggttaatattgagccaaaggttgtaaactgacaaaatgttcatcatgtttttctctataactttgttgtttaacatttctccctacctttaatattaaccgagatataagcttttaaaatttaatagtacatttttcagaatgtccgactccccgcagagctgcaaaaagccgcgaactcggaaagaaactattcaaaagcgagaaacacgaagtaagcatgaaaaacgacgaagggaagagatgaatgaagtgatttgtgaaatgtcgacacttttgcccgaagatattcgggctcataagctgcgaagagtggatcagaagcctcgtcagctggacaaatgctttatcattgggagtactgttgatattattcggaatagtgattatagtgagtctacagattcaaattagtaataatattctaatttggaatttttttttaattttgaaaaaatttggaaaaaaatttgaaaaaaaatttcgaaaattttttcttttttttttgcaaatttttttcctaaattttcgattttcaaagcttttttctttgttttttactctaaaactcggtaaaacaactctatttcctcccgagaaaaatataaattcaacctattacagtaaccctgatccgtttcgtggcgggacccaaaatttcaaattaccttcaaaccaaggcatgttgggtgtcattttaaagcaatcattgagctaaactcaaatttgaaagccattaagctgaaaatctcgaaattttcggaattttcagtcaatttcaatttcctccattttccagaaccaccgctgctctccgacccgctcgtccaggatattttcagcctgaccaactgttttatggtttttctgaacaattttattgtcgtggatattaagggagaccatcaggcagtttttgatattgaaaaagtttgttttattgattttttttcgatttaaaaaaaaattcaaaaagccattaaatgggcagagttacaggcctctgaaaataattgttaggcttaggtgtaggcttaggcgtaggcttaggcttaggcttcaaacatttttttgggattaggcttaggctcaggcttaggcttaggcttaggcttaagcgtaggcttaggcttaggtttaggattaggcctaggcttaggcttgggcttaggcataggcttattagaaaaaatgggaaaaaaaattctcaaaacattttttttggaatttaattttgtaaaattttccaaattttgtcccagacgggcgtgacaatcaaatgcacacttttttagttgacaactttttgctaacccttaaatggtagcaacctttaagcttcagtaactccgcccatttattggctatcaaaaaattttcaaccgacaaaagcttcaccatgaaaaaaaatctgcaaattttttcagttgacaatttttttctagcttttctagatttgaagatatttgagtttatttttttgaaaaaaaaaaatcccaaaattttttttgtgggatttcatctttttataatttttaattttccaaattttttcccatacaggcgtccccaattaaatgttccttgtaaacaaaatgtcgtcatattttcggggaaatattatcaaggtcactttttcccaaaaaaaattcgattttttcggactgtgtgtcagctgacttgtttcaaggtgaactggtggtggaccgggggtggggggggggggatttggtgaatcattgggattttttcggttggaaaatgttttataacattttagatagtataaaaatttagaaagttttcgaaaaaagtttcaaaaaaaatttttttttttggactttttctgaaaaatttttttttttttgttaaactaaatttttttaaagttagaaattctagaaataagttgtaaactaacaatttttgtcaaaatttttgcaaaagatttgaatttttcgctagttgataactttttagtaaccattaaatgggcgtagctgctgccttccgtaactccgcccatttcatggttatcaaaaagttttcaactaacaaaatgttcattttgaaattctacacacttttttagttaacaactttttaatagctgttttagtttttgagatatttaaaaaagaaaaaaaaattttttaatgaaattttttttttcagaaacgtatgattggaaaagatatccgatgttttctggactacgattcaacgtccaaactgtcatttctcacttccaaagaaatgctcaatgagctccaactcaaaagcttcatggcgaagtcaatgacgtgcagaataaaggaatcggcggaggtttgggattaaaatgtttttttcaattcgaacaattcgaaaaatttagctttaaaactaatttatttgaatttggcgtgtaaatagcttttgaatgacacccatcatgcctaggttcccgcaattttgggggaattttccgggtcccgccacgaaaactggcagggttactgtagttttgaatgaaactaactttttcaatttttttcaaaaaagtgtgatcactgagctaactttgaagaaaaaaattaagaaaaaatagtgaaaactaagaaagttacagattttcgaaaatttgtgaaaaaaaatttttttaaacaaaattttttaccaaaaaaaacttattttgtcaatttttttttagctgagaatcacaattttactctcagcaacccagaaaacctgcaaaacctggtaaaaccagtaaaaacaaccaaactacagtaacccagaaagttttcgcggcgggacccgaaattttaatcattcacggaatataggcatgatgggccttattttgaagctctggacgtgcttaatttgaaaatgtacgagttttggctcaaaatcgtgattttaaccaaaaaaattagttgttaaaaaattgaaaaaatttttttttccaaaatttcaaaaattcctagaaatttttaaaaatcaaaatttttccagaaacccacggaaacagttttagtctgtgtgcctgatgagcttccagctctcccggttactgtacccaaggctccgcccattttagcttcgccccttcagaagacaccgcccccgccgtcgagtttggaggtgaaaagcccgattttggcggcacttttgaggcgaaaagaggataattgtgtgaaagtggtaagttattaataagaattaatagtttggcgggaaatttcaaactttttgagaaaaaaaaaattgaaattttttttttcggaacttttttttctaaaaaattatttaacactatttgttgaattccagagctccccaagctccttcctctcgccgggctcctccacctcgtctacagtacccaatgtgaaacctacagtaacccgccgacctacagtacccacaaaacggaagagactacgatcgatgaatgttatagtggaaagttatccgttggatgatgagaagtcggatggaaattcacaaaaatcggcgaaaattgggaaaaagaggttttttctaacaaaaaaaaacgttaaaacctacagtaatctactccaaaatccatgcgagacccttaaaactgaaaatttcaaatttagctcaacaagacctttcaaatgacccccatcatgcccgggttcaaattttcacaaatttattcaaaagttgggtcccgtcacgtggggtactgtagcactggtttcagctgtgtcagtgacataatttcggagtttttccgaagctctaagcgtgcgaaagttaaaaatgttaataaaattcttaacatgtaagattttattgattttttcaaaaaaaaaaaattttctaatttttctgaaaaaacttgcaaaactatgtaaattttcagccaaactagcactattccaactccgagaagcactttgagcccaactacagtaatccatccgtccacgtcactaattcaaccgattccgacacttggaatgaacccatttgacatgttatcacctggttatcaagatgtatgtgaaaattatcgatttttaatggtaaaatcaataaatcatcgctaaaaactagtttttatcaatagagcgcacttgcaacacggttttaattcaaattatcgacttttcaactacagctactatcaattttccagatttggctccgactacaaagtgagcgacttctgctggaaaaacgaatttcagcgaaagaaggggagctgaaaaacctgatgcaattcgttcaaaaccccccgtttttgaatttcccccaatatatgctcccgcaagggccacttggtgctcaaaatcaatagttatgggtttaaatgaataaaataaatatttatttacaaaatttgattattatcgacgggaatttgtttaaaatactgcaaaatatactgggaaatttccggaaaaatcatttcgaagttaattatcatttgaaaaaccgccgaaaactgtgaatgcgcaaggagaggttgctggcgcatttctcttgttgcttgcgcactctgcgatgaaattaatttattttattttttcatcattttcgttgggttttcatcatttttcagcgatttttttgcaatttttttcaaaattcccatcaaatctatagtttttctcacaggaaatggactcggccgaccctcaactcaatcgattcctccagcaactgcaggcggagacgcagcgtcaaaaattcaccgaacaagtgcacacgctcaccggtcgctgctgggatgtgtgcttcgccgactaccgtccgccaagcaagatggacggcaagactcagacctgtattcaggtaaaaatttgggaaaatttggcaattttctgcaattttatgggaaaattgaagaaaaaatttaaaaaatccaatttttttccgtttcagaactgcgtaaaccgcatgatcgacgccagcaacttcatggtcgagcacttgtccaagatgaacggaggacacgtctaaaaatcgatgaaaatccccttttaaccttcaatttttctttgttaactgttataacacatactgtttaggctcttttccataaattttcccttaaattcgacgttttaagcgctggatcatataaaatagtgaagaaatctatgtaaatatctggaaaaacccggaaaaaaactcagaaaattgcagattttcagtgaaaaagcatgagtaaactgaaaggaagccgcctggaggcagaaatcgatcgagttagagccgatgcgaactggaagcggctctcggagcttctcccatctgtaaaatccaagaattctggcctagaagactgttatgagatgttccaggcggaaattgtactcgaaacgtatttggatcaccttggaggtcaattttcacgctaaaaattggaatttcttcagaaaaaaccaggaaaaatcgagaaacttgtaaaaaccgcaaaaaaccagttttttagctgaaaaaggccaaaatttggtgttttctaatgattttcagcccgaaagtttgatattttcgctgaaaaatccaaaaaaaaacgtgaaaatttggcgttttgatggatttttcactcaaaaattcgattttcggcactaaaatcactgaaaaattgattttttaaaaatttttttcggctacagaaccaaaataaatcagatttttgcgaaaaaatatgcaaaaattaaggtttttattttttttattttttggagaaaaatcgataatcttaacacgtaaaatgcgattttacgctcaaaaaacgtaaaaattcggatttttcgtagtttttaagcggaaaattcagtttttgaactgaagatttgattttgagctcaaaaactcgaaattttggatttttttttcagaaaaaatgtgatttttagctcaaaaattcaatttttcactgcaaaaaacgtaaaaattcggatttttcgtggaaaaaatgcggtttttagctcaaaaattggaattttacgctcaaaaaacgtaaaatttcgtgtttttcgtagtttttaagcggaaaattcaatttttgaactaaaaaatgcgaattttagctgaaaaattcaatttttcactgtaaaaaacgtgaaattttacatttttcacggaaaaatgtgatttttagctcgaaaattcaatttctagctcaaaacaacgtaaaaattccaatttttcatagttttgaagcggaaaattcaatttttggactaaaaatgagatttttagctcaaaaaacaaaaaaaaatccattttagactctaaactcaaccattttacaaaaaaaatggattttttctgaaaacaactggatttttgcactaaaaatcacattttccacccgaaaaacgcaattttcagcctaaaaatcccgaattttcaccaaaaaacccccaaaaatcgatatttatttcagaaataattcgtccatcacatgatcacatggataaactctcatcagctgaacaactactacatgaagctttaaaaggccattcagacaattatactgttaaaattgaagcaaatattcttttggcaaagtgtttgtacgcttgtcttgaatttcgcaaggtaaaatgcgaaaaaaaaacgcgaaaaaatgaccgaaaaatcgtgaaaatcgggttattttgaccattttaacatgaaaaatccaaaaaattcgataaaaattggtgtttagatgatttttatacggaaaaattcgatttttcgtgtgaaattatgaaaaatctcaacaattttctcagaaaatgtgagaaaaacggtgaaaaatgggttttttcgtcgctgtaaaaattagctcaaaaaccccggaaaattggagaaaaatccaattttcgagtcattttccgaattttgcacagttgtgaaaaattcgatttttctttgaaaatttacagattttactagaaaattcaaatttctcggggaaaaagtcacatttttagtgattttttttcaaattttgagctaaaaattgaatttttcactcattttcacccctagaaagtttttttttttgacgtaaaaaattgatggcctaactttagggatttctaggccaccgatcagaaaatgtggcttttcagccatttttctttagttttttttttttgcatttttagctcaaattaaaacggtaaatcgattttgacttgcaaatttcaaaattttgctccaaatttaattacgatggttttaagccgtttttcatcgattttttttttggatttttatcacaaataaatacaataaaaaggattttaatttaaaaatcgccaaattttcagtttaaatccctaaaatctactaaaaatcgatatttcccctgtgacttgtgcgtttctcagatttccggcataaaaactgcatttacattttcagtcttaaattgagctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggacatgcggaagctatgcccaaattttcaatttttcccggaagtttgtgaatttttgcggtttttcagttgaaaattcaaattctccatcactttttacccccctaaactcggttttcacccaatttgggccaattgtcgtgaagttcggtgccgagtacgcaagacactcggtgtttgcgtactattggcgctaccgtacccctcaaaattcaaattttgagctagaaatcccggaaaagtgtaataggcgttaaattcgacgaggaattcgattttaataatgaaaatcgcatgaaaattcccggaacatccaaaaattttacgaacaagtctaattttcatggattttgccgatattggctgtgatctataagcaataattgacaaaatctaatagaatatacaaagtttcacaatttttcactaaaaaagtagaaattatctgaaaatcggcttcctaacattaattttagtggctcttgtgcttctactcgtattgttggcagaaatacggtatttattcacattttcagccttaaaatggctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaaatttcattttttcccgaaaaacttgtaattttattgaaaaaatatatagggaaatccaaaaaatgtgctttttattcgaattgtacccaattttatgcacctgccagccgtttttttgcattttgttgtcaaatttggcgtgtccacagtgtttgcgtaccttcggagtaacccaaaattgcgaaaaaagtcaatttttcttaaagtttgtgaaaaattgaatatgattcgaattccacgtaattttcaaacaaatctgcagaaaagttcgctgtttttgcgaattttagcatatttaaacctgaaatttaaaatttttgaacaaaatgaccgaaaattgaactttttgaagatattccgcttaaaaacgtcatttttctcaaggttttcattcaaaattgctaaaaatccaagaatttttcccttttttgaatgaaaatcgaggttcccatcaaaaatcgatatctcccctgtgacttgtgtgtttcttgtcagatttttggcataaaactgtacttattcacattttcagtcataaattggctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggacatgcggaagctatgcccaaattttcatttttttttcccgaaaaacttgtaatttttcccatttcaggcccttcaatgcatctcaaacagtgaaatggagaacggaaaaaccccgtttcggactctccggacccttcgtctggtagctgagggctatgctatcaaaggtagggggtctcgccacgaaattaaaggcgcattgggcggaaaatttaaaaatcgaaggaatctagccaatatgggtgtcaaatgaaagctctcggcgtggagaagctgaataaaatgccgaaaaattttgaaaaaatcgggaaaaaaatgagaaaaatggaaaaattgggattttccaggcctttgcattgaatcaatggaagaagttccgacaactcggccacactcgaacagtacaacatccacgtcatcgtcggcttcatctaaagatcaacgggctctttatgtctttgaaaaatctgcagaattggcgattttctacataaatgagctggaaaaatcgataaactcgtcaagccaagcggcgaagcctgttggaacggtcacaccgaattctcaggctgctggagttcgacagcaagagaaaattggtacaaattggagatttttggagcccattttgaaaaaaattagaaaaagccaaaaaaaaaattttttttcttcagttttttcgcaaattcgacattatttttgagttcagttcactgagagcttcaatttacgtataatcatgccataattaccttgaatttgaaaaaagtttgggtcccgcagcgaaatctccagggttactgtagttttcgtggtgggacccaaatttcttcaaattggagcaaaatatggcatgattatactcaaattgaaggtgtcaatgagctgaaaacgaattttacaatttttaaggaaaaactccaaaattgaaaaaaaaaatttttttggaattttcaaaaaaataatttttttgttgaaattttaaagttttgcctaaaaaaatgtaaatttagttttcagctcaatgagagcttcaatttgagtataatcatgctatactttgctccaatttgaagaaagttgggtcccgcagcgaaatctcccgggttactgtagttttcgtggtgggaaatttttttcaaattggagcaaaatatgccatgattatacttaaattgaaggtctcattgagctcaattcaaaaatttatcacattttgaaccaatttccaaaaaaaaattttccgaaaatttttttcgaaattttagagttttgccttaaaaaatgtaaaattagttttcagctcattgacaccttcaatttgagtataatcatgccatattttgctcgaatttgaagaaatttggatcccaccacgaaaactacagtaaccccgaagatttcaaatttcttcaaattggagcaaagtatggcatgattatacttaaattgaaggactgagcgagctgaactcaaaaatattcgaattttaggcttgaaaattttgaaaaaaaaaattttttcacaaattttgagattttttttccgaatttgttaggatttttaggattttcatttaaaacttaaacaggttttacaaactttagaacttttttccgggaattttttaaaattagactcaaaaatttgaataaaaaaccaaaaaaaaccatatttaactctgaaaaatgtgtttttaatatcgatttttactcaaaaaatgtgtttttttttcaatttttacctaaaaatcttccaatttctcaggtgagctgctggaacgaatcatggaacgtgtcgcaatcatccgagcaaaagatacggcggcaaagaaggtctcatcaggcacagaaggcatcgaatggtaccgaaaaattatcacatgccttggtgataaattcactggcgaacggctcaaacagaagctctccagacaattcgcagagttgctcattcgagcaactgtaccaattgaggaaaagtcgatgagcgaggcgatgcacacgaaagccatgaatatgaagtgagaaaaacgacgccgaaaaacgccggaaatttgacgcgaaaatgagccaaaactcgagaaaaatggagcaatttgtgcattttttgtggaaaaatcgccgaaaaattaggcaattttcatcaatttgcacggaaaagtgtcaagaaataaaaaaaaagaaaatttggcccgaaattagccaaaaagtgtgaaaattgagaaatttttcatgattttgcactgaaaaatgtccgaaaattaggtaattccgaattttcttcgatttttccctgaaaaatcacagatttaagtcaaaaattcaaatttcgcgccgctccactgacaaaagtgcacaattttgcggaaaaccacgattttttggagtttttcagtgtgaaattcgaattctccatagcttttaaccttaaaatcacctattttttgggttccatctcgaaatttgaatttcccgggggggggggggggggactgtagcctcggaagtacgcaaacaccgagcgccgcccgacgacaaaatgcacaaattgcttaattctcgtggtttagcccaaaaaatgggttttcggtgtaaaaaacgacgggaaactcgaatttcgcacttaaaatccaagaaaattgatacgtgggctcgaaatctgaaattttcaacaaaaaagctgattttcgataaatttcattataaaattcgaaatccccatcattttttacctcggaatcacatttttctgacttccagctcaaaatttgaatttccctggggtacggtagcctcaaaagtacgcaaacactgatctgcttacgacaaaatgcacaatttcttcaatttttgtggtttagcactgaaaatagggttccgagggtaaaaatttgcgaaaaattcgaatttcacaataaaaagcctgtgaaagttattatttcaggcaaaaaatttgaaattttgggtttcaggcactttttcaaaatttttaacaatcaaatttgaaatccccatcattttttaccctggaatgccatttctctggcttctagctcaaaattttaaatttccgggggtactatagcctcaaaagtacgcaaacaccgccaacaccccacgacaaattgcacagttttctggaattttgcgaaattacgcaaaataggggtaaaatggtgttctgaatgcgaatttagcagtgaaaaatcgtaaaaattcccagttttcgagttttttctggcaattttcctcaaaatgactcgattttctcgatttttggcgctttttgagccgatttttcacaattttcgcgtttttcagactctatcacggctcgaacaagacattctacactccgaaatcgaaaatcgaggagattattcttcttttactgattaatgaagttctatcaacgcgggaagtgatattatcaagaacagatgatttatcgtcatcgcggacgttatcactgcaaaacgcgaaatcttcgttcaatttgctcactttggtacggaattttggccgaaaaacggctcaaatttcgtgaaaaatggctgaaaatggaccaaaactgagagaaaaaaccttcgaaaacggtcgaaaactgtgaaatttccagccgaattgcaggaaaagccacacaaaaattatagatttttcaacaaaaacttaattggtggcctaactttttgaattgttaggccacaagtttttgatacagtgaaaaattcgaattttccgccactcggatgctgcaagcagcgcgctccgctgaaaattgctcaaattgtcaattctaagccggattttcgaatttcccgccgaaacctagtgcgctccaatgagaaaatgctgattttctgcttttttttcaaaagttttgccaaaaacgagccaaaaatcgaattatttgaccgaaatttccggtcaaaaatcactttttttcacgcgaaaaaaatggggatttttaagaaatttgaatcctattaactgatttttagttgatttttctggaaattatctaaaaatcgaattttttaaacattttctcagtgactcatgtgcctctactcagattgatggcataaaaactgtatttattcacattttcagtcataaattggctgaaaatgtgaataaatacagtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaattttcaattttcccggaaacttgtgattttcatgaaaatccccggttttcagttcgatttccgaaatccccagacaattttaccccaaaatcgtgttttcccagctttctagctcgaaatttgaatttcccggggtactgtagcgccaaaagtacgcaaacaccgaggatccgacgacgacaaaatgcacagttttctgaaatttcgcgaaaatatgcaaagttggggtaaattgatgctctgaatgcggattttgcagtgaaaaagtgtaaaaattcctagtttttgagtttttgagttttcctataaaattctattcacaaattttcaattttcgaaacaaaatcgagtttttactaaaaacatcagattttcagttcgattttcgaaatccccactcaattttacccatacttcacgttttcctgagcttttagctcaattttcaagtttccgggggtactgtagcgccaaaagtacgcaaacaccgccaacaccccacgaaaaaatgcacaattttctgaaattttgcaaaaatatgcaaattaggggtaaaatggtgctctgaattcgaatttagcacggaaaaatcacgaaaatgaatttgtgagccgaaatgtttattttgaactcataaaatgaatgcacaaattcggctagaaatccatgaaaattaggggaatttttgaattacccgccaattttctagagaattgcctgaaaattcagcgaaaaaattgactcatattaaatattttctctgttttctctcactctctgtctctccaccgaatgttcaattattcacgttttacatattcaaacaattgtgtatatgtgtttctgtgtagtagtttctttttgcaaaacgaagtggtcactctctcttctctgaattactccaattttcactgtgtttcatgaaaaaattcgtgaaaaatcggaattttcggcgaaaattgcgaagaaccgagtatttttgtggcttttgcacgcaaaatttggttaaaaatgagccaaaactcatgcaaaataagaaaatttgagaatttttcattgaaaaccgaataaaaattcggacgaaatctgtttttttccgatttttttttcaaaaaagtcgagttttctctgaaaatcgcacgatttcagttcgattttcgaaatcttcacacaattttacccctaaatcaagattttccagcttcgtagcttgaaatttgaatttcctggggggtactgtagcgccaaaagtacgcaaacaccgccaacaccccacgacaaaatgcacagctttctggaattttgggaaaatgtgcaaaataggggagcgaatattttttcagtgattttcgtaatgaaaattgctgaataatcctagaaaattggaaaaaaaaagaaaaaaagcttctgctcagatttttggcaatttttcgaataaaaaacttctgaaaatatattcaaacttctacgtttgagcagctcaagaaattactaaaaaaaatctgtaaaaaagtcttagaatttcgaaatttctaaaaaaaagaaaatttgcctctaaattattttaaaaaaaaaatcccacatttccagtgatttttctcaaatttttcgttaaaaattgagtttctcactcatttttacccccgggaaattggttttttgcacaaagtagattggtggcctaacttttgagatttctaggccaccaatctgaatacgatggttttaagccgtttttcatcgattttttttggatttttatcacaaataaatacaataaaaaggattttaacttgaaaatcgccaaattttcagtttaaatccctaaaatctactaaaaatcgatatttcccctgtgacttgtgcgtttctcagattttggcataaaaactgtatttattcacattttccagtcttaaattgagctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggacatgcggaagctatgcccaaattttcaattctttcccgaaaaactttggattttttcgatttttttagtcaattgttttcaggtgctctccacaatcaatcaatatcaattgctggcgcaaatctacgagcgagctatgaaatttgcgaataacgactcgtttttgtggtaaattcgagattttcgagagtttttcggctgaaaatctggcaacatttccaggcaacaattcgctctttctgcaatctgctgtggccggttttcccgggcgattcgggtcttcgaacagtccattctcgcctccacaatcgcctcagaatctctgacgtcatcagcgtcgtcgacgtcatcgatttcctcgcaaaattcgacgtcaaaagctcaaaatttgcatcaaaatcgtcggccgaaatcgccggattcggcaatgttttcatcgctaaaacttaccaataacccgtcctgcgcactttcagtcatttccgaatatatgatgatctcacaggtgttaatcgagcgattcggcaattatgagccaggttagagcccctgaaagtggttttttcgaactctccgtgctctcagctttcaaatgagccccatatcgagtagcgttgattttgaaaaaatcgcgggtctcgccgcgaaaacttggaagctacagtaatcctcgtggtgagacctgaaaattttcaaaatcaactgaaactagccaatatggggctcatttgaaagctctcagtgagctgagtacaaaaatcttattttcaactgaaaatttctccccatgcgcctttaagctacagtaaccccggggggattttcgtggcgggacctaaaaatttccaaaattatcgaaaactagtatttatgagacttatttgaaagctatcagtgtgctgagtttaaaaatagcatttttaatggaaaatacgttaccctgcgcctttaaactacagtaacaccgggggatttcgtggcgagacccaaaaatttccgaaaatcaacgaaaactagtcgatatggggcgtattttgaagctctgagtgagctgagctcaaaaatattaatcacaccttgaaattcctccccatgcgcctttaaactacagtaaccccggagggatttcgtggcgggaccccaaattttttggtttattgaaatctgcccaatttggggctcattttgaagctctcagtgtgctcagttcaaaaatattaataacattgcgaattttcttcccatgcgcctttaaactacagcaacacagggggatttcgtggtgggacccgaaattcctcaaaatcaaccgaacctgagcaatatgggctcatttgaaagctctcagtgtgctgagctcaaaaatattctattcgagtcaaatactaacccgtgcgtctttaaactacagtaactccccgggggatttcgtggcgagacccaaaaaattccaaaatcaacgaaaactagccgatatggggggcttatttgaaagctctcagcagcccaaatctgaaaaaccgaatacaaaatttccagcaatcgaatacgcgtcaaaggccgtggatttgtgctccaaagagggacaattgtcgtttttgaaggcccgatgccaattgttgcatgcaattgcttatgggtaagaataggctgaaaatgagcgattttttcgagtttttcatgaaaaaataggctaaaaatatgcattttcggccaaaaaaccggcaaaaatcgcgtttttttttcagattccgagcctccgaagagccatcatgggacctgaagaaggctcaactcgcgaaaacggtccaattaattgaagaatgtgtatcgattgatgctcacgactatctttcactatattatgcagcatattttcatgcaatttcccgtgatctcgaatccgcgaaagatcggtgctcgcggagcctggctcttaatggagatcagcctgcggccattatgctcttggcgttgatttttacggcttacggagaccttaaaggagctctggatcttgttatcaactcgctcgccgagtttgagcataactatgggctcatggtgctcaggcttcatattgagacgaaattcggcagaattgaaggtaaaaacctggaaaaggcgcgcgaaattcggcatttttacgattttttactgcaaaattcgaattcagagcaccattttacccctattttgcatatttccgcgaaatttctgaaaactgtgcattttgtcgtgggatgtcacggtgtttgcgtacttttggcgctaccgtaccccccggaaattcaaatttttgggtttttcatcagatttgcggcacgaaaaattgcgcgaaaaattgcacagttttctgaaattttgcgaaaatatgcaaaataggggtaaaatggtgctctgaatgcgaatttagcagtgtaaaatcgtagaaatcccaagttttcgagtttttcttgagttttccatgaaactccccccccccaaaaattacctagaaattgatatttcccctgtgactcttatgcttcaactcttattgattgcagtaaaaacaggtatttattcacattttcagccttaaattggctgaaaatgggaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaagctatgcccaaatttacattttttcacgaaaaacttgtgattttcacagattttcagttgaaaattcgatttctccatcactttttaccctcctaaaccggttttcagacaatttggaccaactgtcgtaaagttcggtgccaagtacgcaaacctcggtgtttgcgtacttttggggctaccgtaccccgggaaattcaaaaataggcttagaggctctgaaaatcgcacaaaaacactaaatttttgggtttttagcagagtttttatctgaaaactgcattttcttgaaatttggttattttccacccaaaaacattattttcattgaaaattcgaaatttctcagcaaaaatctgcattttttgaacatcctgagatttgtaagaattttccaactttcaaagcaaaaattatgcaaaaatcgccgaaaaccgtggcaaaatttgtatttttgagcaattttcggctgaaaaacgctggaaagttggaaaaattggataatcaatgaaaatttcaacaaaaatggggatttttaagaaatttgaatcctatcaactgatttttagttgatttttctggaaattatctatctaaaaatcgaattttttaaacattttctcagtgactcatgtgcctctactcagattgatggcataaaaactgtatttattcacattttcagtcttaaattgagctgaaaatgtgaataaatacagtatttcttctgccaacaatttcacaatagagcacttttgtcactcggacatgcggaagctatgcccaaattttcaattttcccccgaaaacttgtgaattttccaaaaaaaaaaaatcattttttactacttttgagccaaattttcccaataaatatttcagaatccctagacacttgctctcatcttcttgatttctggaagaaacagccccccgttcagcaacaactcgcctattcaggaggaattcttgacgaagaacgatctcagcgaaccattaacggagcggcggagcaacttttcggcggcggcggagcaacgccgagccaaaagactggaactccatcattgggcagagagctctcgacaccgttagctacaactccactgattccgatgaactttccgttgtcctcagcattaccggttataagtgcaattccgtctaacgcgtcgactatggatctttctggaggtgcgcgggaatttgatcttcccgccgaaaaaaaatattcaaaaatttgaattttttgaatttcccgccaaaaaaatttcaaaaatttgaatttttagaatttcccgccgaaaaaaaatattcaaaaatttgaattttttgaatttcccgccaaaaaatattcaaaaatttgaattttttgaatttcccgccaaaaaatattcaaaaattttaatttttgaatttcccgccaaaaaatattcaaaaatttgaatttttgaatttcccgccaaaaaatattcaaaaatttgaattttttgaatttcccgccaaaaaatattcaaaaatttgaatttttgaatttcccgccaaaaaatattcaaaaatttgaattttttgaatttcccgccaaaaaatattttaaaaatttgaattttccgccaaaaaaaaaggtcaaaaatattcaaaaaatttgaattttctaaatttcccgccaaaaattccattgatttttcagcagccgaatcaatagttggcggtggtgcgtcagaagtgggcggagccgcgtccacgaattcggattcgctgaattcgggaatcggtgacgcgtggtcgaaatttcgaacacaagccgatgtttggatgtgtctagcagaattatatataaatgaaggaagacatgcagatttgacaaaagttattgaacaggcgattacaatgtttccaagttcaccgcaggcactttatttgaaggtagctgccggaaaattggcggatttttgatgcaaaaactctcgaaaaccccgcgaaaaatgatctacaatgacaaaaatctcgattttttggtcaaaaaatggatgaaaatcggctaaaaatcaaggaatttacaaaaaaatgactgaaaatcgtggattttttcggaaaaaactcgaaaactgctcaaaaatgggcgaaaaaatcgattttccgcctaaaaaatccgcatttttaagtgggaatttcaaatttgcctcgcggccagcacatgcgctctattgataaattgcacagaaattctgaaaatttttcggatttactgtcagagattggcaagttatcgacacatttttttcctcttctaaactgcggtaaaagttttcactgtgaaaattccagattttcagttcgattttcgaaatcccccccaattttcacccctaaatcaagatttcccagctttctagcttgaaatttgaatttcccgggggtactgtagacccaaaagtacgcgaacatcgagggctacacgacaaaatgcacagttttttgaaatttcgagaaaatatgcaaaataggggtaaaatggtgctctgaattcggattttgcagtgaaaaatcgtagaaattcctatttttcgagttttcctataaaaagttataaatttttcaaattttcagcctaagatttcacattaaatccataaaatcccttagaaattgatatttcagtggctcatgtgcttctcctcgtacaaagtagattggtggcctaacttttgagatttctaggccaccaatctgaatacgatggttttaagccgtttttcatcgattttttttttggatttttatcacaaataaatacaataaaaaggattttaatttaaaaatcgccaaattttcagtttaaatccctaaaatctactaaaaatcgatatttcccctgtgacttgtgcgtttctcagattttggcataaaaactgtatttattcacattttcagtcttaaattgagctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggacatacggaagctatgcccaaattttcattttttccccaaaaactttggatttttaacgaaaattgagattttttacctgaaaaaactggaaaaatcgacgattttcattgaaaaattccaaattatttttgcagggtcgcctgctagtttcccgatgtcaaaagctcgccgacgagacgctagtctccagaattcgaggagaagcaaaatcggcatatcttgcagcgctagcacttgcacccggccattttcagtcaatgtcagcgttggcgaagctctacgaagaggaaggaaatcagaaaatggctgagcacatgctgaggtctgaatggggttactgtaggcctaaaggcacatacgagaagctggaaaatattggaaaaatcaatttttttaatgggaaaatcgataattttagaaaaataatctggaaaatgccataattttctgaaaaaaaatcgataattttctgaaaaaatcgatttttttttgttgaaaaatcaatatttttaaaatcgataattttagagaaaaaaaaatcgataatttcccaaaatatcgataatttttttgaaaaaatcgataatcttccggaaaatcaataaattcccggaaaatcgataattttagaaaaaaaatcaataatttcgaagaaaaaataacgattttttttgttgaaaaatcgataatgttctagaaaatcagggaaaatcgatatttttctgaaaaatccgataattttttgaaaaaaatcaataattttctgagaaaatcgataattttctgaaaaaattcgataatttaaaaatcgataattttctgaagtaatcgataatttaaaaaaaatcgataattttctaaagtaatcaataattttctgaaaaaaaaacgaatttttttgaaaaaatcgataattttcgagcttctcatgcgcgcctttaaactacagtaatccaatttttttgcagagaaatggtacgtgtggaccctctaaactgtgaatggtggcaacaattgggatgttctctaatgaaacgtggcgattcggaccgtgcaactgaatgtctcaccgctgccgctcaattggacagatctacgccgcttttgccgttttccgtcgttccgatggtgtttcctgctaatttccgataaattttgatatttttcgactgaaaatttgaaaaaaaattgaaaattttggcctaaattgaggatttttttttgaaaattctgtttttcgctcatttttttttcaaaatgagaaattttttctcgtaacctcaattttcgaatttcttacgttttcagcttcaatttgacacccatattggctatattccaccattttgaaattttcagggtctcgccacgaaatcccgccgggttactgtagcttaaaggcgcaggagaggcgcaattcgattttaagtgtcattttcgagctcagcggctcatcagctttcatttgagccccatatcgactatattccgactattttgaaaatttgagggtcccgccacgaaatcccgccgggttactgtagttttcgcgacgagacccaattttttttcaaaatcatcgtaacctagtcaatatgggggtcatttgaaagctctcgacgagctaaattcaaatttttaactttcgactcgccaatgcgcctttaaactacagtaacccgggggctttcgtggcgggacccgagaattttcaaaatcatcgaaacctagccaatatggggcttatttgaaagcttatactgagctgaactcgaaaatgagcaaattttcacattttgagcgaaaattgtttgaaaaaataagtttttttggtcaatttttctcgatttttcagataattcttcccgatctcttttctccctttttattgatttttagatgtaattccattattttttctcattgtgaatagaaaatttgtatattatctatttatttattgatttttattttacaaaaacgattttctgtgaattttatattcgaaaaatggtgaaaaaatggattatttattgattttttttttggatttttttaggttttgtatattttatgactgtaaaaaattgcaggattaaaaatttatttttatcgattttttgaatttttttggaaaaatttattttctaaaaaaaatggtttttttcttaaaaattttttttttctaaatttgtcaattttggcctaaaatcaatattatcgatttttgcagctttcatttgacgcccgtcatgcccagattgggccccgccgcgaaaactacagtaccccggggagatttcgtggtgggacccgaaaatgtctaaatttaacagattttagccgatatgggggtcaaatgaaagctgggagagtgaaaaagctgaaaattagatttgttttgaacaaaaaaaaatttccaaattttcgaaaaaaaatttttttttttccgaatttttaatttttatcaaaaactcataaatatatactatatcgcgaaacccgccgattttcagcgcccaaaatggatcaagaagcctgtctcggcccatcggacgatttcgaagcggatgacgtggatatgacgtcaccggcaatgtcagctgcacaatatctccgacaaatgcaagcagagcgtcgtgggactaaaaatgtcgtgagaattgctcaaaaatcgccagattccacgtcaccagaggccaagaagcagaagcagtggcttgaaagtgtcggatatcaggaagtaaagaaaattgaggttaatagtgcgaaaaaactgaaaaacaaacttaaaattgattcctaaaaatttggggaaatttttataattttgcaaaaaaaaatttttttttaatttggaaattttttttgagaaaaaaatttgaatttttctattttcaagttcagcacactgagagcttcaaaatgacacccatattgaccctattccacctattttgaaaatatttgggtcccgccacgaaaactacagtacccttttgtggcgggacccagaaattctcaaaataggtggaatggggcttaaattagtgcaaaaattaaactgtactgaaaaatcgaaaattttcattaaaaatcaatattttcccggaaaatcaataattttctttaaaaatcgataattttctgaaaaaaatcgatatttttctggaaaatcgataattttctgaaaaaatcgatgattttctcaaaaatcgataattttcttgaaaaatcgataattttctgaaaaaaacaataattttctgaaaaaatcgataattttcggaaaaatcgataattttctaaaaaaatcgataattttcggaaaaatcgataattttcggaaaaatcgataattttcggaaaaatcgataattttctgaaattttcagacaccatcaccattaatcccatcggaagagtggcgacaggagaaatgtcggaaattcgaagaaactcgtgcaaaaatggcgctgaaaatcgaaaaattctcgccgatgaggattgacagactgaattcggtaaaaatttggatttttcgccgaaaaaaaattcgtgaaaatcccaaaaaatatgatttttcagccagaagaagaggaatggcacgaaattctgctcgaaaaatgtctgccggaatttcaggatattgctggaaactttttgaatcacactggaacgccgccggccttgcggatggtcttttcgattccaaagagacatgtacgcgaaaactgacggaaaattcgaattcagttcgccgagagctttcaaatgacccccatattgactaggttacgatgactttgaaaaaaattgggtcccgccgcgaaaactacagtaatccagcgggttttcgtggcgagacccaaaaactttcaaaattgtagtaacctagtgaatatggagcttatttgaaagctagtaagctgctgagctcgaaaattacactgaaaatcggtttgcgtctctcctgcgcctttaaactacagtaacccggcggcttatcatggcgagacccaaaaactttcaaaattgtcggaatctagtcaatatggggcttaaatgaaagctaatgacacgctgaactcgaaaattccacttaaaatcggtttgcatctctcctgtacctttaaactacagtaacccggcgggttttcgtggcgagaaccaaaattcttcaaatttgctgaaagataagcaatatgaagcttatttgaaagctagtaagctctgctgagctcaaaaattacactgaaaatcggggttgcgcctttaaactacagtaacccccgacccgacgagttcgtcgttgcgagacccaattttcttacagctgagccaactcatcgagtatctcgtcgattggagcattgaagaaggcctaaatcgtccgattcgcgaatggatttattcacttttagcggttattgatctaccattggttcaggatgttgtctccgcgttgagaagattggtcaaagagtgcaggtttatcgatttttctgagaattatcgatttttccggggaaaatattgatttttttttccaaaaaaaaaagtataattttttcagaaaattatcgatttaccgcaaaatttattgattttttttttttgcgaaaaaatgttattgatttttctataaattaatcgatttccttgcaaaattctcaatttttacaatttctttcaaaaaaaatcaatattttttataggttttttaccgaaaacttattatatcagctaccagaaattatcgatttttcacccaaaattccttccagaagcctccgctccgagctatcgattgatcgaaaatcagaagccaacgagttctcactgttcatcacaattatcacgattttcttcgggcaaaaagatttggcggatatttaaattatttgttctttttttgtttctcgaattttccacacattcttcacatgatcctcctccttctccgcgttgtttttttgtgttttgcgatttgttgaaaataaatcaacttttttcggaaatactgtatcatgaatatattgaatcgatagaaaatcaaattctgaaaatttctgcatttggaagttttttgatatctctaatcaccgctgagacagcgcgtctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctctttctctctctctctctctctctctctctctcataacaacaccaggtctcaatatttattcctcaaataagatcaatttgtatttttattcatttattttctttagtcatcctctcggataccgttgattccacagtcgaagcatccagttcaatatcgtcgtaatccgagcccacaccgaacacctcattcgccgacggatcgtaccacacagaatttctagtttacctattttcgagactatcgattttttaaaataaaaatcaatagtttacatttttcgggtttttaaatgttttcggaaaatcgaatagtcgattcacgttttccagtttccaagaagccgaaagtgacggaaaatcataattttgttgaactaggcctgagcctaaacgtagacctaaacctaagccttagcctaagcctaagcctcagcaaaagcctaaggcttagcctaaacctaagccttagccgaaacataagcctatgcctaagcataagtctaagcctaagcctaagtctatctctaaacctatgcctacgaacaagcctaggccgaagcctaagcctaagtctaggcctaagcgcaggcctatgcctaagcctaaccgtaaccctaagtgtatgcctgagcctaaccctaagtctaagtccaggcctaaacttaagcatgagcctaagaataagcctaagcccaagcccaaacctgagcctaagcccaagcttaaacctaagcctaagcctaagcgtaagcctatgcctaagcctaagcaaaagcataagccaaagcttacggctgagcctaaccttaagcctaaatggtatgcaaaaagaaaaaagtggattcaacataccggtgggatcgatggctccctggggataaagattgggaatctgactttaaaatgtttcaaatcagtctctcgtcggtgaatctcctgaaaatttccagcagatgatttttgcaatttttgaaaaaaggaatagtcggtaaacttcttatagctagatttccaattttccaaaaagcagaatattcaagttatcgattttacaaaaaaaatgtatcatggaaaattggaaaatatcaaatatcaaagaatcaattatttatattaagtatagaagttttcgactcacatcattttttctcttcattgcatcaacagtatcccatacttcctgagtcgctacttccctcccacgtcgcaccaatttctttcttctttttgccttatctctctcttcctctttgctctctctgctctttgctctttgttctttgctcttcgttacccttttcttccttttatgtcgcttctcaggatttccggctgaaattatgtttttgagtaaattttttgaattctgatttttaataagctgtaaaaaatttttttaaaaatctttatttattaagtaccagcaatatcattcgggacctccaacggtttgcaatcaacgacgggtgtttgattggattgttccaatggcttctcaattttactcgcagtatttccagtctcgggcttatccggcattctagcagtcttctcaacacttttcacaaccttctttttgtcagcatccttatcaattttcttaatgtcctttttcttcttcttatcacctcccttcgatactgaaacaaaataaattggtaatttactttaaaaatcaactattgtattttttattttctcagaaatcgataatcgataatttactttttcaaatttttagaaaatcgatgaaggtgaattatcgattttttagatttcagttttctacaattttcgaaaaaaataccgatttttttttgaaaaatcaagctgagaatccaataaattttttatcgattatcgatttctttttcaaaattagaaaagtaccacgacatacctttcgatcctgaactaccgtccttccaattctttccgaactttttgtagacaaagtatccaccgattccaccaccaaccacgacaacgacaccgattgcacaaccagcaataatactgaaaatcaaaataaaaatttttgtagagcctgcctacccgcctgcctttatgcctgaaaagcctacaagctttaaagcgacacctcattgcctaaatctgcccgtgcctgccggaaatcgatacctacacgcctgataaaagcgcctacaagcctgaaatagccgccagcctgtctgaaaacaccgcctgtgtgcctaattatagcttcatatttggttacctacgtacctacgtacctacctacatacctacctacctacctatctgacagggatattttccagagctgcctatatcccttattattgcctacctacctggctctatgcctgaactatgcatgtctaacaggtacctcatagcacccatttgcgtgcctgcctacttacctagccgtctgcatgcctaaaatatgcctaaaagggacgcctattgcatgcctgcctgaaaattgccttcccgcctgacttaccctattggagcaccaccttcctcctccttctttgctcctccgccagctccagcttttccaggttcattcttagctccagcttttccaggtccattcttagctccgcttttcccaccactatttccagcttttccaccttcagccaatttcttgccgtaagccacgaaaaatgcgtccagctcctttaatgtaccctttccagccgcggccacatccttggaaaatctcgaaaattccaaacccatctcatccaaatccttgagataaatgagcaagctactgaactttgcagttggcagaagacgatcaagcttggtcaccgaagcaattgtggacagaagatcagcactgataccctccacactttgagcctgatcgaaaaaattcgaatatccagcgagtgtaaccgaagtgattggcttcaccttccccttgaatgtgtccagagatgatatcatcgtctcaacctctgcagtagtccgactcagatctgcaattctcttctgatcctccacatcaagcttggagctaaagataactgtgttcaccaaattgtcgataatacgcagcgaatgaggatttaatcttttatgttccactatagccatttgcatgttagagacactacgagaagccgtcccaatgacgctggataattttccaatctcactaagagttgaaaaagcatctgactccacactctgagtccccttcatccccgcaatcaccactttcagacttttcagcttcttttgaacatctggcaaacgcttgatgacatcagacaactcactttttgagtagacacggaaatctcggatagcggagattgctggcttgaacagctcgattccctggatattcttaagtccactggtaaatttgaaaatcgctggcaagctctgtttgaaagtattaaaactattgaactttgtagaaatcttttctgcagaactagctatctcgacgtttccaagaattttcaaatcaccttccaacggagaaataatttcagagacagcttcaaagtccttagagtcttgaaaagctttcagtgatgccgtaatttcatctggcctgttcagaataacaatcgcaagcatccttccaagcatttccacaactttagccgttcccaatttagctgacatcgtgacgactcttccaagagcactcaattgagaagacatcttttgcatactgccaaagagatcatccaggttcgaatcagtaactggcacggttttgtcaagctctgccgatagttgcatgccttaaaaacgccaactaatggttgaatcattgtggccattccgatcgctttctcaaattttgttccaatgtgaactatttcgttatatccatcagaggaagccgatccaatcgccacactgactttcttaaactcttctgtaacgtttctcaatggcttgatcgctttcaacagagcatctgcttgtcgagataccactttcttcacccaatcatccttcaagtcagcaaaaacactatccacataggaaaaatgccatttggaaatccggatgtatatttcagagctcttgatccactaacatgatgttgtgcaacaaacatttgattcaaagcattcaacgtagatgtattgacactcgtccccacgctttgaatttttgaaacatattcatcaagcttgggtactagtgaaggatcaacagttccatgactagtcgaatgaacaagaacgattttctcgattttctggaaagctacaagttcggggagaacactatcgagggtcttgagcgaagcatcggttgtgtacttttctacatctttgaaatttaatttttgcattgctctaatggatgctttcaaaatgtcaaatgctttttcaatagtatcctggtctttatgcttcttcagaagagtcattgcattcaaataaccattgaactcgtcgatgggtgtcttcaatgctccccaaagctccgcctttgtccctttcagctctttaaccttcttcagatactccgtgctatccggaaccactggagatgcatcaatccctttagtcagttcccacacctcagagagcatcaaaagtcgattctcaaccttcttcaccgcatcatccgcttgcaacgaatcaatcaaaccattgaatccgtcagccaagcttttcacatcattcaccgatagtccgataatctggctaggagtagtatctccaagattgagcatatccgagatgaactcatccgcagggatctttccagacgagaatccttgttgaaggtagatcccattggtgactcgagcaatcatttgcatttgttggacagaagtggcaagttcagctgaaaaggtaacaactttaaatagctatcagatttcgctttacttaccatctgtagcacgtttgacacgaagcttgcgggacgggaagaatggaggtttgttgtgaattggagcattttggttgttggctgaaatttcatagatttttagagttactgtttttacatccactattttactggaatagcaaaatattttgaccataacaaaatcgataaccgatttcttaaaaatcattgatgaacaatttttcaaaaaaattctccattcttaagctctatataattttctagtcggcctatttcagagttgtttggagccaaattccgttaatttctctcaacttgcttaccatcacgtttcacacgaatcttatgctgatagaatggagatgtgtcggtagttggagcactttggacggtacctaaaattcaatgttaacattctgagtaatacacgaatacaaaacttgacaacacttttcgctcattttttcttgagttcgacctctgccatagggtcttgagcagaggtgagcggcgattttcaaacccaattacattttgtaaattgaaaaaatttcacttgaagagagaaaattgttcattaaaatacatgtttaggttcctaaatctacaaaaaagtatcgaatttatatttccggcaatcggcaattttggcaatttaccggttatcaacaatttcggcaatcggcaatatcggcaattgccggttttgtgaatttccggtaatcggcaattccggcaattgccggtttccaccatttccggcaatttcagcaaatgttgaaattgccgaaaaatcgattgccgcgcacctctggtcttaagccaagaccgtagagtttaaagctcaaggcaaagagcaattcgtgttgtcaatttccatttttttcatttaacttaccctggtggctagaaatgttcaattttccgaggttttcagtggaaatttcacctgaaaattgtatttctgtacttctgtaagtcggtttgtcacctacctcgttggtagtttgcaattactccactaacaattgttatgagtagtatcgcatttaacaactctgcaaaaatcaatattttctgaatactaaatgtcaaaaataaataaaaaatcgatttcgcaaatcgataaagtttggaattatcgattttttatagaaaaaccttttcatcattttttgacaaaaacaataaacctctgaaaagttttcatgatcgattttttaaagtttttctcaaaaatcgatagtttcccgaaaagtcaatagatgtaaaaaaaaactcactcattttgcatgatgacaatcgaagttgaatcattgccaaggacgaaaatcgattgaatactgattgaatttcaatcgattactgattgaaaaaatcggtaagagaagggaggggtggggttcacgttttacaatatattttttttaatttttttttttgaaaatcaatagttcaaaatttattgatttttctccaaaatggaaattacaactttgtttggaatttacaactttgtttgaaaattttcaacttacgtttgacctttcttaagtttccaaaaaattcatttctcgaatgttccgcgttggaaatttattcaaaatgagtgagttgtcagcaaaattgtggaaaaaatcgatattcagaaatcttttagaaatattaatctttatgatatggatgattggctcgacaaatgggcagaataatggatgtgagtgacatcggaaaaactattgtatcgcaaatatggaaagagctagaaaaaagttgtctactaacaaattgtgggaaattaaatttgctacaatatattagttgacaactttttgatagcgctaataattacagagatacaggcgtttgaagatttggcttagagagtttcttggctttcagctcatgtatctccgaaaccagaagagctatgaaaaatttgccaactaagaatttgtagaaaatttaattttcaacaagttgttagttaacaactttttgatagctcttctcattttagagatacataagtttgaagaccacaagcttctgtaaggttctcaaagttcccgcaaatgccgactcaaaattcgtcaaatttacagtcaatctctccacaaacctccagcaactccgcctgatctcccgcattgccaatggaatctctctccatcaacgggtctttacaatgactacggaccaactgatctctgatctcataggcgttgatcccttgaaattggctgaaatcgataaggatcaggtgaaggtggtagcggagaatttgaataagctcgatcaaattccaagagacgaagcaaatgaagaccgactctgggatcttggttggatggcggaggaggccaagttctctcccgaaacctcactggatctttcaaaaaaagatctgtacctgaaagctgtcaattctataatcaatatgaaggatcagtggagaaaagtaaagacgttcgcagaaaccctagacctgtcactggatctctacccctgcttcgatatctcccggagcacggtgcttagagacattaacgcgactttcccccacctgcaaagcgtagataatatccagcatctgtacccaacggggccttctgattggtcaaaagtaaagtcaaagctggagcagttagagtacactagaaacctcagcagggtgctaccggcccttcaagtgtcttccgcaagacccccacgacctcttgaacacaaagacctgaagagcagatggataaaaaatgtcgtcaaaggacaggctcacaggcttgagaaggccttggcttctctggaaaaagtgtcctggcaggtttctagtctgttggggcttccggcaatccagaaccttccccggttcaattccaatgcccaaatcctattagggctaaactccttaaccccgctgatctccaacattggcaaaatccaagttgacttaactttcaccaagcatgaaggccttcatagacatttcatagacgttttgctcgacatggagaagctcgcagatatgatagacgcgctacaaaaagccatggagttctgggattccaagaggttttttgggaatcaggatcagatcacttcacacccacctgacctaaaaattctcactacggaatctatcgactcagttgcagaacgtattataaagtactttccctctttcgaacagtttacaggggaaatgcccaagtttctgaaaatcgtggcttcactgaagaaaatcaatggaatagaaatggtctcgcctgccttaaaagctttcaagttccttagaatcagagatgctttggatattgatctcatccggattcaggatgccatgaagaatctggagcaagagatactggcggttcgagggataactgatgagttctcaggacttccggacatctcgaaacactctaagatcctcgatgaaactgtagattggcttggttatcttctagagactaacctgactgaattgggagcttcctcggagcttcagcaaaagatctcagacttcaggaaacaaggtggaatcacctcaacacgacttgtagactatgttccgatatttgcacaagcaaatttgccgaacttgccgaattcgccgtgctcggcaaatattggaaaaagagatttgcggaatttgccgaactcggcaaattttgagatttgccgcacacccctggtccacacttcttgctaaaactcatgtatctctgaaacaaaaagagatatcaaaaagttgttaactattaaattgtagaaaattaaatttacacttgacaactttttgatagctctgtaaggtatagagatacaggggcttgaacatggcgaggcttgtaggaggtctccgtgcctaaaactgttttacctcaaaaacggtaaaactggaaaaacccttgccaactatttaaatgtagcaaatttaatttttaagaaccagacccatgggatgaggaagtggacgatttagcgagtttgaggctcacaatcagtaaagatcaaatgcattttggtacggagcatttattggatatggaactagtgtcagtcgagaaaagtacgaaaagtcaaggtaagttaggaggtcactgaaaactgctataactcagaaactgaaggagctagaaaaaagttgccaactagcaaaatgtttgaaatttaattttcaacaatttattactttacaacttttttgtagcgttcaccgtaaaaaagctatgaggctccaaacatttttaactttttaaaaaaattttttacatataccccaaatttcatatatccaaccagcagcgaaatctacaaaaaatacaaaatatacaccaaaatcttctgggaaaagtcaaaaattaaagaaatcaaaggttgaagccaataaaatcgataaaatggcaggcgagttagaggataactactcaaaaactaaagcagctagaaacaattttcaacttttgtaattttactccaaattacagatattgatattaaatctccaaaactccagaaaaatgctgaaaatcaagaagaaaaattgaaaaaagcaaaggaaatattggcaaaacatcaggttttaaccaaaatggcgttgcggcggaccaataaaaaatctagtgagtcggggactagaaactgttttaactcaaaaatgaaaggagctagaaaaaagttttcaactgaaaagaaatattgtacaaaatttaattttctagaatttgttagttgaaaacttttttgtagcttctgcttgaaaaaagttaaagccgcccaatttccagaaaagcttcacaagtcgactgatcaatagacgctcctagatgtgctcaataacttgctctttttcgttttttttttcgtaaattttacatgtttaattttcaataaattcgcctttttattgtaaaagccaaaagttttgctttgagcccatgtaacttggctccggtgaaagttagaaaaaagttgtcaactaaaaacttgtttcaaatttaattttctacaatttgttagtaaaccacgtttttaaaatgttaccctgttccaagttacagcgatttttcgctggagagaaggccagataaatagaagaaaagttgtcaacgaacaaaagttagaaaattcaattttaaacagtttgcttgttgacaaataaaatattggctttgggaaaggtaaatttatctgcctcccgctgagcttcaaattttcaagtggcaaaactagaaaaaattgtgaccttaacaaattgttcaattggcaatttctctttgaaaaaccaattaattttcagaatcgaatttgtcgtaaaacagttttttttactaaaatttcaatgtgctcatttttttgtttgttgtatttctttaataaaatgacaatttaaaaaacatctagacacaatcattcattcttaatcaaaccttataggcatatgactcagaaccgtttttcttgagctccttcttttcgtagcaatttttcgatttttccttgctctccttttcttttttcttgttcttctcgacgttctgaaaaattgaaattgtttgaatttttggtttggaacaactagttagttgataactttttaatataactgacatgagtgcggctcaaacgaaaaggtttcacacttcaagcttttgtagttctaaaactaaaagagctactgaaaacttggggggaaattaaatttactacaatttatcagttgacaactttttgctagcaatcacagttttaaagatacatgtgtttgaagttttgagtttccctatacttttccctatactttaagcctctgtatctccaagactagaaaagctaccaaaaaacttttaaatagcaaaatgtttatcgtaaaattgtctacaattcagcaggtagcaacttttcgatagctctcttggtttcgaagatacaggaaaaaacacttgaaaactttaccctcttgtcctccttcttctcacaagcttcagcctctccactctctgtcttgaccaccttgcaattcttttcaacagactttttgttttccactttcactaattcagagctcggcgttttcttatagacacgatttccggctcgaggtctgacctgaaatttttcttaaatttcagttttttcggatttttttcgaagaaaaatagagaatttttactgtgtaatttgaattgtttgttgatttctacaccagaccgcttggacaacttgccgaataatcgatatttttacggaaaatcgataatttctcggaaaatcgataattcctcagaaaaacgaaaattgctcggaaaatcgataattcctcaaaaaatcgataatttctcagaaaatcgaaaattgctcggaaaatcgataactcgtcggaaatcgataattcgtcggaaaatcgataattcgtcgaaaaatcgatattttaacggaaagtcgataattcgtcggaaaatcgattattcgtcggaaaatcgataattcttcgaaaaatcgataattcgtcggaaaatcgataatttctcggaaaatcgataatttctcagaaaatcgaaaattgctcggaaaatcgataatttctcagaaaatcgaaaattcgtcggaaaatcgatattttaacggaaagtcgataattcgtcggaaaatcgattattcgtcggaaaatcgataattcttcgaaaaatcgataattcgtcggaaaatcgataatttctcggaaaatcgataatttctcagaaaatcgaaaattgctcggaaaatcgataatttctcagaaaatcgataattcgtcggaaaatcgataattcgtcaataaaaatcgataataggtcggaaaatcgataatttctcggaaaatcgataatttctcagaaaatcgaaaattgctcggaaaatcgataatttctcagaaaatcgataattcgtcggaaaatcgataattcgtcaataaaaatcgataataggtcggaaaatcgataatttctcggaaaatcgataatttctcagaaaatcgaaaattgctcggaaaatcgataatttctcagaaaatcgataattcgtcagaaaatcgataattcgtcaataaaaatcgagaataggtcggaaaatcgataattcttcaaaaaatcaacaattcgtccaaaaatctataatttacgataaagtgaccaagcgctgcaattttgaaaaaaaaagttacattatagtgaaattcgagttctccgctcggatttttttaaatttattgatttttctgataatcgatattcgatgaaaaataaatctttaaaactaacaccaattcgtctcctgtgattttccacaattcgtatctgctcggccgggggaattgtcgaaacttcgtcagtatccgtcgagggaggtgtgtgctcttcgagaaaaatttcctttttcttccttggaggtgctgctcgcggagccacttttagagttttctggggagctggaggctttgcaggtgtcgctggaggtggttttcggacctttttcaggttacacgttgaaagggctaatgttgcagccgcgaatccagtaattataaagtaacctgaaaaattgagggggttttaatatgaaatttggattatttgctctttttacccctaaaaaattatcgatttttattactgtctatgcaaaatttgaaatttccgaaacattttggaaaaattatcgatttttgaaaaaatcgaaaaaagaatcgataatttttggtttaaatagattttattgatttttgagattaatattgtaaaattcttaatcgccgcaatttttcaaattcgtcgaaaaatctataagccatcaaaaatcgaaaaagaactcaccaatcatcggagatttgttaacttttcaatttctaatcgaacgattcgttttaaaactgcgaaataattggaaaaatcaatcaatagtaggctcaatgacctttctgataattttttgtcatcaaaattttattttgaaaaggaagttgagaaaaaaagaaaacaaattccacgcaaaaatcgataattcctatcaatcgataaattacaaatatttaatcatttctcaatttatcgattaattttttgtcacgaaaagtaaaatcatgtcagatagcaagaagaagtcagagtgagtattgattttttgaataaacgatgctccgatgttccgcttcgtggtttcaaaattattctcggaagttttcatgtcgattttcgaactcgccgctattttttacgtcgggcgcacaattttcatagctctaactcaaaattgcgtaagatccggtgttctcgggtacggtagtcggtgtttgcgtacttttggcgctaccgtaccccttaaatttccaaattgcgatagaaacttcagaaaaattgtatctagagtgaaaattaacgcagaattcgaatttgacattgaattttcttgaaaatcgaattttttcaaaaatttcggaaaaacattgcattttttttcgaaaatgaattttaattttttccagagaaaagaatcgtcagtgtgacgactccaatgtcaacgacactattttaattgcatttagcaattattcggaggtatacgagtggcggacgtctgccgggaacaatgaaaaactgccagaatcctcaacttcgtcggattccgattcggattctgacaagaaaaatgtggagaacgtggtaaaattgaaaaaggaaatgccattgagaaaagccagagatcctgctaatcggacaccgctgaaaggtacgaaattctggaaaattttggaatttctggacaaatttttaattctcgtagtttttcattgtcaaattcgagttctctgcaaaatgttacccttggtacttttttcctgagctcctagctccaaatttaaatttccaggggtacggtagcgccaatagtacgcaaacaccgaggaacctacgacaaaatgcacaattttcttaaatttgatggtagagctctgaaaaacggagtttcggggtaaaaaatgacggggatttcgaatttcgcattgaaaattcaaaaaatttaacaattgcgctcgaaattcaagtttttcagaacaaacatttgttcattcggaaatttcaactgaaaactttaattctttatagaatttcacttcacaacttttttttccggctttcagctcaaaatttgaaattccaggtgtacggtagcgcaaaaagtacgcaagcaccgactacagtacctcaaagcacactatttgacgcaatattgcagaaaacttcaaaaaactggctcttgagggtagaaattgacgtagaactcgaatttcatcattaaaacatgtaaaaaaaattttaagcagtgaaaattttccagacgccaaaaatatctgtctttccttcggaggatgcggatttcttggaagttatcagttcggagcggcaaaaatgattttcgatcacgggaagaagcttatgaagcgtgttgagaggtattctgggtgctcttcgggaagtctggtggcggctatgttcattttcaacccggaaaagttagtttttttggtttctttcagaaaaacggttagtttttgctgcttttcagtacaaaattcatgttcagaagggtcgattacccctattcagtctgtttttgctaaattttagaaatctgtgcattttgtcgtaagctctttggtgtttgcgtacttttgaggctacagtacccatcaaaacccaaaattaacgctagaaacccggagaaaacagatttaggccagaaaaaaacggagatttcaaattttgctatgaattttttgaaaattattaggaaaaccttgaaataactgtgaaaattgcaaagttgaatttttttcgaaactcgcagatttttaacagttttgagtgttaaattggaactcaccgttaaattttaccctgggtctccgaattccaaagctttcgcgtcaaaaatagagtatctgtgcattttgtcgtgtgctccgcggtgtttgcgtacttttggggcaacagtacccccagaaaatttgagataatagttagaaactcagaaaaatgtgattctagggtaaaaaatgatggggatttcaaattttatgatgaaaaattttcaacaagtacatgaaacccgaaattttcattttccatctaaaaatttcaaatttttgccgcaaatgttaactttcacgtttttttttgtatgaaatttgaattctacgctaattttcactcccggaaccctgttttcagagctacaccacaaaatttacaggaattgtgcattttgtcgtacaatctgcggtgtttgcgtattctcgaggctacagtaccccaaaaacttaaaatttgagctgaaagtcccgatataaacccgctggggtaaaattagacaacgaaatggaaaattacaataaaaaatgttcaaaacctgatagaaattctatacatttcactaaaagttgcgaaatcttcaaaaccagtcaatttttaccaatttttagtacaaaatttgaaatcctcgtcatttttcacccctggaacccaattttcagggctgaaaccttgaaacgaaagaaaatgtgcatttcgtcgtaagacgttcggtgtttgcatacttttgaggctacagtactctgagaatttccaaatttgagctaaaagctcagaaagaaatgtgccaggggtaaaaattaacggagaattcgaatttcgcaataaaaaatgttcaaaacctgatagaaattctatacatttcactaaaagttgcaaaatccccaaaaccagtcaatttttaccaattttcagtacaaaatttgaaatccctgtaacttttatcccgggaacccaatttccaaagctgatacctcgaaaatagagaaaatgtgcattttgcagtatgacgttcggtgtttgcgtacttttgaggctacagtactccgggaatttcacgcgaaattccacaaaaccagtcaacttttactaattttgtggtacaaaatttgaattcctcgtcattttcacccccggaacccgattttcaaagctaatacctcgaaaatagtgaaaatgtgcattttgtcgtaagacgttcggtgtttgcatactttttaggctacagtactctgagaatttccaaatttgagctaaaaactcagaaaaaagtgtcccaggggtgaaaaataacggagaactcgaatttcgcaatgaaaatctacaaaaatcaaaataaaaaatttccagaatatccgaggcggtcgaggaaatctataaaatggccgatgaggtgaacgacaaaacgctcggcgcaatgtctccgggattcgttatcagtgatcgtttgcggaaagtcgtcgaaaaattcctacctgatgacgtggcaaaggcaaacgatctgctttttgtgtcggtcaccaagttgaaggtgctgattttatcgattttttcacggaaaaattccgaaaattcccacttttagacatggaaaaacgagctgatctcgaatttcgagtcgaaaatcgatttgatcgattgtctgatggcgagctgctatcatccaatgtactcgtcgggtttgaacggaaaagcgccgattcttcggggagaggtaacgttttttttttaatttcgaaggagtaaaaactatgtgaaaattcgaattcagctcgttaagagctttcagaagagcctgatattgacttttgtgttttttgggccccgacacgaaaaccccgggttactgtagtttaaaggcacatgggcgagtcgaaattttgaaatttgaatttctcacactctgagctctcatttgacccccatattgactagattccatcgattttgaaagttaattgggtctcgccgtgaaaactacagtaaccccggtcgggttttcgttgcgagaccctggaaactttgaaatgggaaaactaacgaaaaattcgaattcagctctacgagagctttcaaatgacctccatattgactaggtttcgataattttgaaaaacaattgggtcccaccgcgaaaactacggtaaccccggcgggttttcgtggcgagacccgaaaacgttcaaaactgttggaacctagctattaggggtttatttgaacaccagtaaaccgctgagctcgaaaattacacttaaaatcggtttatgcccctcctgcgattttaaactaaagtaaccctgcgagttttcgtggcgagacccaaaaaaattggaaattagtaaaaactcattttattgtctagaatagacaaaatacaagttttcaaacaaaaagttagcaaaaaagctcaaaattgaacaaagttgtcgattttcgaaatttcttcatctaattttgggtcctgccacgaaaaccccgggttactgtaggcttgcaacctggcaaacggcttaaactatttttcttggtaagaatagataaaaccctatttttgaagacaaaaaaccctgagaaatcttgaaaatgagcaaagttatcgattttcgaaacttttcgaatttttttgaaattttttagaatttatcgatttttcagggtttttcctggacaagtttatactttttgaaaagctctcgacaagctgaactcaaattttaggcttaacactccctaaacccctaacatttccaggcatacatcgacggtggctactcgaacatgattccagagttccttgacatgcgtacggtcacagtgtctgcatttgccggtgatgcggacatttgtcccgtcgagaaatctgcattgttcaatgattttatgttcgcattctttaatcagaatatgaaggtgattttttaaggcaaatttgaaaattttggatattttcattattaaattcgaattcctcgtctaatttcaccctagcagccttttattctgggcctctagctcaaatttgaaaaatcccagagtacggtagcctcaaaagtacgcaaacaccgaggctctcacgacaaaatgcagaatttctgtaaattcagtggcggagttctgaaaatagggttctgggggtgaaaaatgacgaggaattcgaattttgtactaaaaattagtaaaatttgactgtttttgtggaattttaaggtttcgaattttagtgaaatttgaaaaaatttcgatcaggtttttactgttttcattattaaattcggattccccgtctatttttagcctatagccttgttttctaggctttgagctcaaatttaaaaattctattattttatttatttatttttggtccctgagccctgaaaatttatttttggtccctgagccctgaaaatagggttccgggggtgaaattgtacgtaaaattcgaatttcacacaaaaaaaacctgtgaaaattaacatttgtggcaaaaatgtcaaatcttcgaacgaaaaatgaaaacttcgggtttccggtactttttaataaattttcaatcatcaaatttgaagtctccatcattttttaccctggaatcacatttttctgggcttctaactgccttttcaaattttctggggtactgtagccacaaaagtacgcaaacacagagaactccacgcaaaaatgcacagatttctcatttttgcgtcctaagctctgaaaacaagctgcagggggtgaaaaacgatgaggaattcgaatttcgcgctgaaatttcttgaaaaaaagcgaaaaatcgccaaaaattgaataatttgtttgtcgtttcagctcactctgtccaacatgaaacgcgtcacaaatgcactttttccgccgacacgtgccattcttcaggagtatttcaatgcgggagcccgtgatgcggagaaactgttgaaggattccggattctacgaataaattgaacttttctgaggagaaaactagagatttttgtggaaaatctaaaattttgtgttaatttttgaattctccgttattttttactccgaaagtccatttttcagagctttaccacgaaaattgagaaagttgtgcatttttgcgtggagttctcggtgtttgcgtacttttgacgctacagtacccggagaaactcaaattttgagctagaaagcggggaaaaagagtttctgagctgaaattttacggagaattcgcattttcagctaaaattcccttaataacaaaaaattttattctgaaaaacttgaatttcgggcgcaattattaattttccaaaattttcagtgtgaaattcgagttccccgtcattttttaccccaaaactccatttttcagagctttaccacgtaaattaaggaatctgtgcattttgtcgtgggagcctcggtgtttgcgtacttttggcgctaccgtaccccgggaaattcaaaattcgagctagaagcgtggggaaaagagattctaggctagaatttcacggagaactcgattttgagcttgaaattcccgtattaacaaagttttaatctgaaaaacttgaatttcgggcgcaattattaattttccaaaattttcagtgtgaaattcgagttccccgtaattttttaccccaaaactcaatttgtcagagcctagccacaaaaattgaggaagttgtgcatctttgcgtggagttctcggtgtttgcgtacttttgacgctacagtacccggagaaactcaaattttgagctagaagcctggggaaaagagattctaggctagaatttcacggagaactcgattttgagctcgaaacttgccgaaaactagccggaaaatcgattttcagcaacaaaaaaaaaacctcaaatttgaataaaaattcaaatttattggaatttttccaagcaggaaagcagcagtaatagcgagaaacagacgaacaaaaaaaaacagaaaagtaacaagaaaatcgataaatctatgggaaaacgggggcggtgataacaagtaaaacagggtgtgaaatttccgggcggtgtgtccgaatttataacagcggtggctagaaaacaatgaaaaaatcgagggtttttgggtgaaaattctctataaaaatgtctaaaataacaggctgaaaaccggctgaaattgtgtgaaaaatgagaattttgcgatttttcagccgaaaaaatcgaaaaatttcagtttttcgagtgaaaactgacgattttaagctttttcaggctgaaaaactggttgaaaatggaattttcagcgagaaagtgggaaattcgagatttttcagctgaatttttgagtgtttagtgaatttttcatcgaaaaatgtgtggaattcacggaaaacacgttcaaatttcagctttttcagccggaaaaatcggattttcaggttaaaaacattgcaaaaattcaaattttcagcttttcccgccaaaaatgggctgaaaattctcatttttcaacaattttcagcggtttttttttaactttttcaggtggtggaagcggtgtgataacaaaaagaaaatagattattttgggggtcctacgatgaatttttaagtcaaaaattgaatctttaattcaaaaatcgaatttttcagttaaaaattgcaattctcatgtaaaaatcgaattttcagttaaaattcaaatttttaagtcaaaaatcgaatttttgggtcaaaaattcgaattttttatagtgaaaactcgattttttcagtcaaaaattgaaattttgggtctaaaatcgatttttcagttaaaattcgattttttgagtaaaaaatcgaatttttaagtcaaaaatagattttttcggttaaaattcaattttttgatcaaaaatcgattttttcatgtaaaaatcgatttttcagttaaaattcgattttttgaaattttttggtcaaaaattgaaattctcatgtaaaaggcgaatttttcagtcaaaaatcaaatttttcagttcaaattcaaatttttaagtcaaaaattcgattttttcaggggttctgtacattttctgataatttctataattcaaatccgtaattaaattctcgtattggccgaattccttccacaatattcgcgtattctgtcagcatcgatagatcttctgaaaattggggaaatttgttgattttcagccaatttttatgatttttttgtgataaaaatcgatatttatactttaaaattgactaaaaatcgattttcaagtgaaaaatttgaattttctatggggaaatttcatttttaggccattttttgttctaaaaatcgatttccggaataaaaattggctgaaaattcgaattttttgaaaaaaacttgaagattttatgggaaaattcgcaaattttaggcatttttaggcaaaaatccagtctttccagctttttctggtgaaaattgctcgaaaagtcgatttttaagctcaaaaatgaaatttcccgcattttttgctcagaaattcaaatttttcgctaaaaatcaagtttttagactaaaaaatcgaatttttcaggtttttgaactgataaaacctgatttttaagctcaaaaaaaatttttttaggtcgaaaatcagaaaattattctatttcaggtgcttttagagctgaaaatatggaattttcagctcaaaaattcgatttttattcaatttttcgtttttttagggtcaaaaatgcaatttttctcgcttttttcgcctaaaaacctaccaaaatcagccaaaagcgtcatttgtgacagtgtctgatagtacattttacacgcttcactgtaacttattacaggagactgtggtggtggtggagcaattggctccaaaaccattggttcaaccggttcaattgattttttaacgggatttcgtcctttttccgccgaattttgtggtttttgggcacattttatcggttttacgacgattctggcgtgtttttggggttttcgaaggtgttggacggttttttgaaccatttcctcgatttttatgggaattggcggtggttttgatgtcggaagtgagatttttggctctgctgcggtgggtggaagtcgtgatggaagtgttggagggctgaaaaatccttttttttcaattttttgtgaaaattttgcagttttagagtgaaaaatcatcattttttgcgctttttaagctcaaaattcggatttagaagcgttttttaggcatttttcgcgaaattctgcatttttccgtaagatccgcggtgtttgcgtacttctggagctaccgtaacccgaaaagttcaaatttcgagctagaagcccggcgaaaagaggttttagggtaaaaaaccatgaaaaaatcgaagttcataatgaaaattttcaaaaatcgggttaaaaaaaatttgggcaagtttttgactgaaaattgaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcagccaatttaaggcagaaaatgtgaataagtacccgtttttatgccaacaatacgagtagaaacacacaagtcacaggggaaatatatcgatttctagtagattttacggatttaaattgaaaattttgcaattttcaagtaaaaatccaaaaaaatcgctacaaaatggctagaaacgatcattttcagattggtgacctagaaatgtcaaaagttagaccatcaatctattttgtgcaaaaaaagcaatttctatgggtaaaaatgagtgaaaaactcaatttttaactgaaaattcgagaaaaatcgatagaaatggcaagttttccgggaaaaattgcaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctattgtcaaattgtttgcagcaatacggtaattattcacattttcaggcaaatttaaggctgaaaatgtgaataaatacccgtttttatgccatcaatacgagtagaaacacacaagtcactgagaaaaagttaaaaaaaattaaatttttgaaatatctgcggggattgaggcattttttactgattttaagctcaaaattcagattcaaaataattttttacccctatccagccatttttcgtaagatctgtagtgtttgcgtacttctgaggctgccgtaacccgaaaagttcaaatttcgagttagaagcttaggaaaacgagttttaatggaaaaaaactatggaaaactcgaatttcgcactgaaaagtttcaaaagtcggttaaaattgaaaaattcggatggaaatttgaatttcctggagaaaagcccggcttttatcggtttttgctgaaaaatttgaatttccgtacatttttttttttaaatcctcaaattttgaaaaaatgtcattttttaattttttctgcgagaattgagacattcttgcgctttttaagctcaaaattcggatttagaagcttttttacaccaatttagacatttttcgcgaaattctgcattttgtcgtgagatccgcggtgtttgcgtacttctggggctaccgtaacccggaaaattcaaattccaagctagaagcccggcaaaaagaggttttagggtaaaaaaccacggaaaattcgaatttcgcactgcaaagtttcaaaaatcggttcaaaatgaaaatttggacattaaatctcgaaaattagtgaaaaatcacaagttttccggaaaaatgaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctcttttgtcaaattgttggcagaaatacggtattttttgcattttcaatcttaaattggctaatttaaggttgaaaatgcaaaaaatacagtttttcaactatcaataagagtagaacacagaagtcactgagaaactgttaggaaattacatttttagaaaaattttggaaaaacaattgaactttttagtaagaaaaacctaaaatttgagcaaatttctgcatttttagggcagtttttgcagaaaattatgaattttcagccatttttccgcgttttcggtgctccgtacccttcccgggacgccaaaatgaatccctcattatgatatgctttaattcgaattttcaatctttctgcatatgaatttgtcggtgttgtcgacggtttaatgtccaaaacctttgctatagcgttacaatctgaaaatttccagtttttcagcgatttttctcgttgaaaatttacttttacgagtttccatcgacactgctgcttgtttttgctgaaattttcaattttcaatttttttagggctaaaaaatttaaaaaaaaaatttttaataaaaaaatttaccgaaacattctccttttccccatttttcatcattttctcccgctgcgccggcgtcagaccattccaaagctgctcaatctgaaatttttcaatttttaaatcaaaaattcccaaaaaaaatgctcactttcagctccaactccagtggaggcagatttgcaaaggtttttcgcataacttggcgaaaaattgccatttcatcactgaaatttcacaattaacatgagatttctattttttaaataaccttgaagtactgggagccggcggtgaaaccgatccagaatcatttcgggtcactgaacttcgtattcgcatggtttttacggtttccggacgcattttacctgaatatagtgattttttgattcaaaaatcgatgaatttagcgaaaaaattgaaaaatttgataaaaatccggtaaaattgggcgaaaaacaaaaattaaatgaaaaataaaaattttttgttgtcacaacgacactccgaaataacggtgttaactaggcgcgcgccttgtttagaccgttatttcggagtgtcgttgtgacaatttaaaatttaataatttttgtttttctgtttttctgtttttttatggtttttcatggaaaaacatggaaaatttgtgatttttttcaaattttttgattaaaaatcaatatttcagaaaatgaagccaaaaaagctgcaacaagggtcagattcggcgcataccgtgagtttttaccaatttacagccagttttcactcaaataccttgcagagtgacaccgaatccactaaaacgtgtgaaaaaaccgcgaaaaagctgccaaaaacgcagaaaaagttgcaaaaatcgaagaaaacggcgaaaaagcggagggatgaggaattccgcatatttttcccgccaccacgagtaaatccgccgattaagacgccttttcggcttcataacacgaattgtgagcacagagactggatttctggttggtttttcgagtttttaccgaaaaaatcctcgaatttttgcctcaaaattaacgaaatttccacttccagacaacctctgccttccgaaatacgcttcatatcaaactggatggcgaatttcgcataaatcgatgaaatcgctggttttaatggataaaagacgggcggaatggctcaaaatgcacaatttgtacagaaaatccgaaattcgcaaggctatttggacgattgaacgaaaaggagccaaaaaactggatgaaatgcctggaaattggagaatttcgcgagaaaaaagaaattctctggatttacaagaatttcccatcaaaatcgagcaatttccagtgaaaaaacgcgaaaaaaccgcaaaaaattggcgaaaaatcgctgttttagtgtgtttcaagcggaaaacgacgacgaaaaatcgatatctccgccgtccaaaaacgaaaaaccaacgaaaaatcgaatttcgccgcccgaaaacctcgaaaaaccgaaaattgcggctgaaaattcgcccgagagttcgatttatcgatcgaaaattgattcgaagacgggaatgcctcgtggatccgcagaatctgatctcgtggattcggagacaggaaaaagcggaaaatttgaggattttccaggaaaaacgtacgattttaggaggaaaatgcgcgaaaaattggctcggaaattcaaatttttaactgatttttaaactttttcagtaccaaattcgaatttttcgtgattttttacctttcaaactcgtcttcccaggcttctagctcgaaatttgaaatttccgggttacggtagccccagaagtacgcaaacaccgcagaacttacgacaaaatgcagaagtttgcgaaaactgcctagataggggtaaaaaacacttttgaacttgaattttgagcttaaaattcagaaaattcacaagaaaatgcctcaattcccccccgcagaaaattccaaagttgacttttttcaagtttcttgactttaatgccatttttcgagctcaaaatcgagttctccgtgaaattttagcttaggaactctttctcccaggcttctagctcgaaatttgaatttccgggggtactgtagcctcggaagacgcaaacaccgaggggcttacgacaaaatgcacaatttccgtaaatttcatggcggagctctgaaaatagtgctccgggagtaaaaatttgcgtaaaattcgaatttcgtactaaaaaacctgtgaaagttaacatttgcggcgcaaatttgaaattttgggtttcaggcactttttcaaaatttttaatcatcaaatttgaaattcccatcattttttaccctggaacgtcatttttatgggcttctagctcaaaatttgaatttccgggggtactgtagcctcagaagtacgcaaacaccgagcaacacgacgcaaaaatgcacagattcctcatttttggcttctgagctgtgaaaaatgggttttcggtgtaaaaaatcacggagaattcgaatttttcagaaaaacgactccaggagcaacaagaagacgccgaatgggagcaaattgaagctcaaagagccaattctgatgacgtcatcgaggataaatcgctgaaaatggaagttttggacattgttaagcataaaaatcgaaattggatagttgtggagaaaaaaggatgtgaaattcagggaatggagtatttattagtattggtaagtgggaaaaaatctaaattttgacaattttcagccgaaaaaatcgatttttcagtgaaattgtgctgaaaatgttgaaaaaaatggtcgaaaattcgatttttgacgttttttagccaaaaaacttgccaattttaacgatttttggcaattttcagccgaaaaaatcgatttttttattgcaggaatccgaattcaatgagcaacaaaccgtccgttatgaccgccaaaatgtggatcacaaatttcgaaaaatgcgtgatgaaaagaaggaaattgtggaatttgtgtcgagtttaccgttttataagcccaaaccggtgcgcggttttgtgtgtggaaatttggaggatttttcacctaaaaattcggaattttcacaatttttaccccaaaaaatctcaaaatattcactttttaacctttagaaattgaaaaaaattttaccatttttcacctgaaaatctcaaaattttgagatttttggttccaaaaaccaaaaaaagtcacatttttctacctgaaaattgccaaatttcactatttccccccccccccccccccccccccccccccccagaaaaatccgaatttccttgatttttcacctaaaaatttggacttttcaagatttttcactgaaaaaatgcaaaattttacgtttttttgttgaaaaaaccaaaaaagtcacatttttctacctgaaaatatgaaaatattgcatttttcgctgtgaaaattggaaaatttcaagatttttcacctgaaaaatcagaattttcacaatttttcactgaaaaaacgcgaaattttgcgatttttttgttgaaaaaaccaaaaaagtcacatttttctacctaaaaatttgaaaatattgcatttttctctgtgaaaatagccaaatttcacgatttttcacctaaaaatttggacttttcacaatttttcactgaaaaatcttaaaattcgcgatttttcactggaaactcgctaaatttcaagattttccacctgataattgcaaaattttcacattttcccccagaaaaatcagaattttcatgattttttactggaaaatgcgaaattttacgattttttttgttgaaaaaaccaaaaaagtcacatttttctacctgaaaattgccaaattttcacattttctagtagaaaatctacaaattttgcaatttttaacctaaaaattcgaaaaaatcccactttttcgtcctaaaaattaccaaatttcccaattttcacctaaaaactcacgaaattttcagccaaaaatcaattatccaacgaatgccggggaatatgaagagcaagagattgagcttgaacgtcgacggcttgaagaggaagaaagagatcaaaatgataagaaattggagattgaagaccgaaatcactttaaaaaatggcaaaaacgccggaatttggtgcggaaaattgcaaatttttggcaaaaaaaaaccactttttctcgtaaaaatggtcatttttccagttaaaaatctgaaattttcggatttttcggtggaaaaattcaatttttctcggtttttacaataaaaaatccaaatttttcgaattttttcagttaaaaatttgaaattttcagattttttcctgaaaaaattcaatttttctcggtttttacaataaaaaatccaaaattttcgaatttttcgctggaaaaattgaaattttcaggtttttggccggaaaaatccaaaatttctctgttttttccagttaaaaatttcaaaatttcagatttttggccggaaaaattcaaatttccacattttttcggttaaaaacctaaaattttcaaatttttcgttgaaaaaatccaaaatttcagattttccactggaaaatttcagtttttctctgttttttttttcagttaaaaatcgaaaattttcgaattttttcgctggaaaaattgaaattttcaggtttttggccggaaaaatccaaaatttctctgttttttccaggtaaaaatttaaaattttcagatttttggccggaaaaattcaaatttccacattttttcggttaaaatcctaaaattttcaaatttttcgttgaaaaaagccaaaatttcagattttccactgaaaaagacaaattttaatctgtttttccagttaaaaatcgaaaattctcacatttttcgccgaaaaattcaaattttctcggttttttccgttgaaactctaaaatttcctcaaatttttctttttaaaaattcaatttttccagataaaaatctaccgaaactcgattcgccgtgaaatttggcggcgccggagaggaagaaattccactgaaaattccgattcggagagctcatcagaagcctcggagccgcccgatgacgtcatcacaaaggaagagccgacggatttttcagaggagaatttagtgaaaaaagaggaaatttgcgatgattttgagcacaaaattgaggaggatgtgaaacctgatgtatataaactaaatattaataaaatggtacggaaaattcgatttttcgagtgaaaatttgggaaaaacgccgatttttgacacaaaaatcgggaaagttggcgaaaaattaatgaaaatcgggtatttttgacctataaacatggaaatttcactgtggaaaacccctaaaaatggcttaaaattaagaatttttatcgaaaaatcgaaattttgtcagaaaaatgccaaaaaaatgtaaatttcggcgaaaaaaacccgaaatggagtgaaaatttcaataaaaaattcaatttttcgcctaaaaaacttggaatttacacgaaaaattagtggtttttgggtaaaatttgctgaaaaattcgaatttttgatcggaaaattggcaaaaatcgccaattttttagcgtaaaatccagaaaatgacggaaagttggaaatttcaatcaaaaaattcacaaaaatcgggtatttttcacccataaacatttaaatttcactgcaaaaaccccaaaaaatgacttaaaattgggaatttctattgaaaaatcccaaattttgtcagaaaaatgccagaaaaccattttaacgtaaaatttactgaaattttgaatttttttcagatctcaccaccgtcgccaccaccgaaaaaaggcattctactgaaaaaagatacgaaaaaacgcggcgaaaaacgcgtcaaaactgtacaatttaaactaacaaaacgccaaaaactggcaaaactctggaaaccgccaacttggcaaattcggcagattttacgggccgcagctgatgccaaagggtataaggtactgaaaaatcggcaaaatttgaccctaaaatgtggaattttggcaagaaatcgatgattttttaagcgaaaatttttaagcaaaatttcgaaattttcagtgcgaaattcgaattcttcgtgcttttttaccctaaaccccgctatttttcgggcttctagcttgaaatttgaattttccgggttacggtagcctcaaaagtacgcaaacaccgagcaacccgacgcaaaaatgcacaatctctgtaaatttcatggcggagctctaaaaataggttatcaagggtagaaatccgcgaaaaattcgaatttcatactaagaaatctgtgtaagttgacatttgagacgaaaatttgaaattttgggtttcaggcactttttcaaaaatcttaatcatgaaatttgaaatcctcatcattttttaccttggaatgtcttttttcgagcttccaactaacatttcaaatttcccggggtactgtagctccaaaagtacgcaaacaccgagcaacccgacgcaaaaatgcacaatttcctagattctcgtggctgagctcaaaaaaatggcgtttcgaagtgaaaaatgacggggaactcgaattttgcacttaaaattcaaggaaattgatactcgcgttccgaaattcgaaatttacagtttaaaaagctgatttttgataaatttcatcataaaatctgaattctgcgtactttttcactcatttgcacttttttctggcttccggctcaaaatttgaatattccggggtactgtagcctcaaaagtacgcaaacacagagcaacttacgacaaaatgcagaatttctcaaaatttggctaaaacagtcgggataggggtaaaaagggtccctgagcccgaattttgggcttaaaatgcaaaaatttgtgattttacacaaaattttcaatgttttccactaaaaatcgaatttcgagcgcacgtatcttttttcttgaattttaagctcaaaattcgagtttcccgtcattttttaccctgacactcggtttttcagagcttagccacaaaaattggggaaattgtgcatttttgcgtcgggttgctctgtgtttgcgtacttttggggctacagtaccccgggaaaactcaaattttgagctagaagtcagaaaaatggcattctagggtaaaaaatgatggggatttcaaatttgatgattaaaatttatgaaaaagtgcctgaaactcaaaattttcatttttattttgaaaatttcaaatttttgccgcaaatgttaattttcacagatttttttagtataaaattcgaattttacgggaatttttaccatcggaattctattttcagagcttcaccatgaaatttacagaaattgtgcatttttgtgcgtgggctgctgggtgtttgcgtacttttgaggctacagtaccccgggaaaactcaaattttgagctagaaagctaggaaaatggcattccagagtaaaaaatgatggggatttcaaatttgatgaaaaaaaatttatgaaaaagcgcctgaaactcaaaattttcagaaaaacttgttgaattttgtctttttttttccagattcgctcgggccgatcacgctacaatgagaaaatccgccgtctgaatcatttcaacggacaaaaactgggcttcaagtcggctccaactcgaattgacacttttgagaaaggaatcgacgttcgcgagcagccaattccatttgttgaggaatttgtgctcgatgatcatgctctgctcacttttgcaagctttgatgacttgaaagtgagcgatttttgtgtgatttttccatgaaaaattggaaaaaatcggcgaaaattgcgtatttccgacaccacagtaacccaagacttgcaaaatttgaaatttccattaaaaatcgtgtgaaaaatcgtacaaaatacacaatttttcggtcaaatttgaaaaataacacaaaaattcgaatttttccatagaataatcgaaaaaaattgcgcatttccaaaactacagtaaccctccagaagctcaaaagttgagcggaagcttcaaaattcttagaaaaatgtgaaattcaccccgaaaattatcgatttttagtgcaaagcaaccgcaaaattgcgtattttccaaactacagtaacccgagcctcgtgaaattttgaattttgtaagttcttgggttactgtagtttggaaagtacgcaatttttacggtttttttgcactaaaaatcgataattttcgatgaatttcacatttttcttagaaatttgaagctccaactcaatattgggcttttcagggttactgtagtttgaaaaatacgcattttttcgataaaattgtggaaaaattgcgggttttgcaacaaaaacaggcagaaattcgaatttttgattgaaaagttgagaaacacgggcgttttctacaaaaagtcgaaaaattgcgtattttccaaactacagtaacccgagcctctcgaaaattttgaattttgtgaggtttcgggttactgtagcttggaaagtacgcaatttttcggtgaaaaactgtcggaaacgcaattttttcccgatttttcatttgaaaaattcgaatttccactggaaaactgaatctgaaaaatgcgatgttctacagaaaacccgcgaaaatctgaaaaaaagtcattttttcacacggaaactcgatgatttttgatggaaaaaaggcgaaatttgatagaatttcaaatatagcaaattttcgggttactgtaccttggaaagtacgcaatttttcggtggttttgaactgaaatttttcaaaaaatccagctttttctgcaggcctacgaagaagcctactcgctccgccaacaagatgtaatcgatgaattttggcgccaccaatgcctgaaaaatatcgaaagtttcgagaaagatgacgtcgaacgtgctgaaatgcgccatgaaattgaaaaactcgagacggaaatgcgatgtcaaaaaatgaatgaaaatgccgaaattgatcaggaaaatattgaatctttcgagactgctggacgacaaattgagaatattattaagaataccggcgattgtggtacggaaattgcggtttttgcgtgaaaaatcgatttttttcggcgaattttaagacaatttgcaaaaatccccagaaaaattgctcagaaactgaattttaactcaagaaaccgctaaaatgctgaaaattccagtttcgacccccaaccattgctcaaaaactgaattttccagttttttgctagttttcacctgaaaatactgcaaatttccatttcaacctcaaaaaatggctaaaatttggatttttcggattttcagccatttttattgctgaaaatcgatttttcgtctaaatttttagttttttagactaacaatgcttaaagttgccaaattctggaattttgaccaattttggcgaaattttgttcaaaaattgccaacttttcgctgaaagcaaataagaatcacatttagcaaagtagtaccatggaaaagtggccagaaatttggaatttccccccaaaaatcgatatttcggtgacttttgtgcctctactcgtattgattgcagtgaaaactgtatttattcacattttagtcttaaattggctgaaaatatgaataaatacagtatttctgccaacaatttgacaaaagagcacatttgtcactcggagatgcggaagctatgcccaaattttcattttttttttttcataaaacttgtgatttttcactaatttttcaagatttcatgtccaaattttcatttgaactaattttcgaattttccgcgcggaaaattaaaaatttgacggtttttctaagatttcaagctcaaaatcgagctctccgtgaaattctagctcagaacgtcttttctcaggcttctagctcgaaattttggttttccgggttactgtagtcccagaagtacgcaaacactgccgatcttacgaaaaagtgcagaattttgtggaaacttcctagataggggtgaaaaaagcttttgtatttgaattttgagcttaaaattcaaaaaaaagtggtttttttttctgaaaaaaaaaactgattttccagcattcgaaacactcgaagagtacttctcgataagtgcggatttcgagaagaatgaagagctccgagccgaagaagagcaactggaaattgagatggagcactgggaacgggagttggaagagatgattgacgtgattaaacgcgaattttccattgaaaatgtacgtagaaaactggaaaaaaatctgaaaatttgatgaaaattcaagattttcgttgaaaatcgtgaaaaaaaaacataaaaaaattgccctctctcgtttcagctaatgatgagaatgctgaaaaaccgtcacctgctcacaatgcggcttgtcgtctcaggaaccaaccaatcatccattgaccgcgagaatctgctccggaaaaccaaaaaactacttgaagagctcaaaaacctgagaatcgccgctcaaaatcgcctaaaaatcgattttgatcgcaatgagcgaatgctctatcgacttcgaaatgcgaaacaaaaagcggcgaaaagagcccggaaattggtgaaaaactggaagaaaagtgcacaaaacaaaagcggcgtgctgaaaatcaacggaaatcatgtgattaaccacgacgtcgtcgtgaaaaagtggaaagttgagctgaaaattgaaggaaatggcgaaagtccgagaaaagttgtgagaaaggcgaaggaaacgtctggttattgggattttcgatggaatttcacgaaatttgcatggaaatctgatgttttgaagagaaaacagagatttgggttagtaattcggttaaaaagcggaaaagctcgaaaaattaccaatttttcaataaaatgtgtggtcttcggtgtttttaggccgttaaagtgtaatttctgagagttttttgagtcatgaccgaaaaatcgatggtttcggtaagttctgtctacaaggcctttaaatttaggctgaatgcctattttttagcctaaaaaacagtttttccaatagtttttatcgaattttaatgattgtctcaaaaaggaacaattcacataaactttggccaaatctctactaaatcgccagaaaaatggtttaaaaactgaacttttttctgattttcatcctgaaaatcgattttcgctcttattttttacactgaacaatcataaaagttgtgaatttctagaattttgatctatttggcgggatttgttcaaaattgagaaattttctctaaaatctcacaaacatcaaatttagaaacgaatcagtggaacatatgcccccaaattttaaattctctatgaaaaattgataattcgtgacttaaaatggtattttttgcattttcagtcttaaattggctgaaaatgtgactaaataccgtatttctgctaaaaatttgacaatagagcacatttaccactcggagatgcccgagttattttatgctcaaattttcattttgcatcaatttttgtaagatttcattaaaaactgcatgattcatcgtttaggaagcactcagctcgtcgagctatcgcttttggcgtcaaaatcgaagaaatccactcggaaactgagttcgagaaacttctaagcgaatacgtcgagtacgaagagtcggacattcagaatcaagtatcgattgatcgaaaaatcgatataatcacgaaaatcaagacgatcacactgaatgatgtacgggcgaaggcgatcgaaatgcagaaacaaattgtggagaaggcggtggatttgatggtttttaatagtttttatttttggccgtgtaaaaactgattggtttcagataaaatcgcgattggacgaggcagcgagagaacatcaagaatggttgcagagtgatgagtgcaaggtaaggcgctgtttaaggtggaatggttgaatcaagtccgatctggcaagttaagcaacattcgaagggggttttcagttggaaatttggattttttgcgagatttcccagtgggaatgagtaatgagtccgatctggcaagttaagcaacatccgattgggttctcaatcgaaaatttgaatttttcgtgattttcctactggaaattagtaataagtccgatctggcaagttgagcaacgtttttcggggatttcttaattgaaaattcgagattttcgtcatttttgtacgggaattcagcgataagtccgatcttgcaagttaagcaagatccgattgggttttcagtcaaaaatttggatttttcgcgactttttcattggaaattagtaatatgtgcgatctggcaagttaagcaacgtttttcggggatttcttaattgaaaattcgagattttcgtcatttttgtacggaaatttatcgataagtctgatctggcaagttaagcaaggtccgatttggttttcagtcaaaaatttggattttttcgcgactttcccattgaagatgagtaataagtccgatctggcaagttaagcaagatccgattgggttttcagtcaaaaatttggatttcccgcgacttttttattggaaattagtaatatgtgcgatctggcaagttgaccaacatccgattgggttttcagtcaaaaatttggatttcccgcgacttttttattggaaattagtaatatgtgcgatctggcaagttgaccaacatccgattgggttttcagtcaaaaatttggatttttcgcaagtttcatgtgaaatagtaagaagtccgatctgtcaagttaagcaacgtttgttgaaatccgataattacatccgatctatcatgtttttggaatttaccgctaaaaaacagcttcctcgaaaaatttgcatctaaaatcacgtagcaaactaaaagagcatttaatcccgatttgagtcctaacatcacttcttcaaccggatccaaaggattttctagaatcctacgtgatttttttcggattcttcttggtcgagaaattcaaaaaaggcaagtggtgttcaggaagctttagcaagtttttcgagcttttcgactcatttttcgacaaaattcggcgttttctgacgttattgcaacccacgaatccgatttccgagttatttcctattcttcttgatattcagaatcagtttcccttaacgtcagtctcccacgcctcggctacctgttatccgcttataatcccaatatttccgctccgcggagctttctgcttctgataacatcatacttcttttgctcctatacacttttccgcagccgcgagattatcttggcacgatgcccgggcaagatcacattctactggaaatgattaaggagtttcagaaatatataagtttaatccttaaattctcgagagagagaaaaaacatccggattatcctgacattatctgaaaatagaaatgggaccgtcagagataagccagccaacggggatttacaagagatgttgcagattctgaaagaatattttttggcgtttttctaggggttttttttgacttagaacgtagatcgcgggcgaaaattgggaaaatggaattttcagaattttcaactagaaaattggcaaaaacggtttttaattatgtgatcagctatgtagcagcctgagaaatcagatttacctgattttttaaggtcgacatcggctgagatctacgagaaatctcccacaatttcgcctgaaaattcatatcgcgagctctaaaacttcatttcctccaaaatgtgctccgacttgctctaaagtcttccacaggcttcaagagcacgttttctgtgtgaatcagtgtgaaattcactcgaactgatctggaaattggtatttttcgcgagaaaattctatgcgaggctcaatattctgaaatttgcattaaaaaatatgctttttcaagaaattgaaccacatagctctcgagcttcattttttaagagccctgctccttccgtctcagcttaaaatgcttctgaaaaatgattctgaagattcatagcagggatgagttttgctcttctgcgagcaacaccagcaaacacattactgaaactctttgcatcgccccttcctcctgccttatccgtatgctccgttgatgcgctgaccgaggataattccctttttttttgcgcctcactgctctttttttttcatcatcatcatcatcgtcgtcgtcgtgctcctcatcttgccttctgtcccccaccccgtcaacaagacggaaaagaagaagaagaaaaagtttcaaagtacacgagaagaagaaacacacacagaagaatgtgtacgtcgctgcttctgctgctgaaataaaaaataaaatattgccccatagctgaaaagggtctaattatatattgaaagaagtgaagatttatccgtttttcttattttcccggcggctccacattcctctctgctctgaaactgatattctgctatatagaaacgacgtcatggatttcaacgctcaagcctatgtgagttttctatgtgagagttctacgtgataaactttaagtaatcctctggatcttcccgagcttagagcatcatgagcacggatttatgcaaggagttagcgatttttgatctgaaaatgcgaatttgcacagaagaagttagagttggcatgcttcctgagcctgtagtgctcttttcgagttttgtcatcccaaaagtatcctaactgacttgaaagtccgcaaattcgcgtttaacgaataaattcccgtctcggaagcttccaacctaaagttttgacgattgtgagcgattttttaactttgaagcttcgtctcctggtaatctggaaattagttcactttgtaagcgtttttgcagttatccgtttagaaattctctccaaggaccgaacatgcatttaacatcctgtaaaacagcgaggtttcctatttcggtgttatttagtacttaaagtcattcttccgaccgtgaaatttcggtccaagaccgaactttcacgattttggaaaaataataactgttcttccagctcaaatctttaaagttttgtagtttctgaagaagagtgacccttgaagtgtctcagaagcttatccttcaagaattctggaaatttcggcagattctacaagtctaatcattgatctacgcttttcaccgctaaagttgactttcataggcggtggagctataaaatttcacctccagaagccgaaagtcgttgcgaactcctgtaaatcaggtgttttaaagtatggaccagggatgtgctgcaaacgaattttttccggcaagccggaattggaaatttttcagttaattggcaatttgccgaaaatgaatatttccggtaaatcgaaaaaccggcaatttgtctaaaataagtttgccgaacggcccacccctggcaggaattccgatattgtgacttctatcttttatttggagctcgccagtggcctgcacattgttctactttaaaaaaaagcttcaaattgaatttaataggtttccgaactacgtcaattgacttttgcgcaataaaaagttgtgcttctgcattcgaaaatagaaatcgaaatttatagaaatttccgccctctctccagaggccgaaaatcactacgttgtcctcctcctcctgccgctgtttcctgtctcgcccctctgctctttccctcactcaccacaaacacgctcgtttctagttttctgctcacccccttctggttcaataatgcaaagttcacaagaacacaaacatttgccccgggctgatgtctctggccgtctggtctcttgcctggtggtgcgcaaatatatatatatatttgcccggccgtctctttttagtctcctcgccttcttcttcttcttcttcttcttcctcctcgttttctttgagacgacggccagagatacggagagcgtgcagagagcagcagaaaaagatagacgggcggcacaacagtggtctcttgtgggagagacgctgttgctgactgtggatgtggtgcactcgcgcacccaccacttataccggcgtgctctctagccgtctctctggaataattggctcacttggccgattcgtcgtgctctctaattctcgcgcatcttttttttctcgttttgcgcgcaaagcgaaaacgtctatgggaagaagaaggagaagatgaagacaaaattggaatgagatagagagagagagagaatgagaatgagaaattcgattttctccgcctcctgtcaaattgaatttataaagaagcggatgggttcgacgagatgaggttttttttagtagagtatgctccaaattgaagtcatttcagctttgggcttccaaattgctgaaaacctgcaaaatcctgaaataggcttaaaattcaacgaggtgtggcagaatctgaagtgtgtcagtaataaattgctgaataaaagttttttcagcaaaacattttgattattatgaggaatacccactaaaattggagttttcatgtgaaaaaacttcaaatttcagtgaaaaaggatcacaaaaattgaagtaaaataagtttgacgaaatcatcagacctctctcgtgaaaaacttgaaattccggatgttaaggtcctttttagtgaaacttacgatgaaatgtgagccatcgagctcataatgctacgttcaacaagaaataatgcgaaaatctgaattattttgagaaaaacttgaaatttcagggtttttccactagaaattggttgcccgagaagtcataagtccaactttcaccagaaaacttggaattacagacttcaagtggttatattgaacgaataatatttaaagttcactcaaaagtccaagtttaacgagaaatcggcttaaaagcttggaattatagacttcaatcggttatattgagcgaatactataaaaagttcaatttttgcgctctaacttgaagttccattatttgagaactagaaacagctgaaattagagtaacctgcttaaaactgcagcaatgtaagaataggcagaatttctataaaaaactcgactttcctcttgacttattggtctttgaagtgttcttgaacttttcttccataatgcccgtcgaatcaaattgaatagagaaaatcgcattaagactaattctcgcgctttccgatcttttttctcgctaatgagtcagaagttattcactaatccgtatatgttttcgtaaaatctttccgggattaattgattatcactccggatatagaatgtgctctacgagagacgcccgcgtgattcgcttctaatccttcaatttgaaaaaggaaacgatttcaaagatgtatgagattacatatgaattggagctgggatatatgaatgatcaggattttccccgtgattttctgagaagattaagcttcaaataccaagaaattgattagctgaacagaattttcttgctgaaaactctaatgtaggggatttttgagtacggagtcgtaggggcctgtcaactgaactttgaagaaaatctgaaaatcagaaagtggcggatttgagaaaatttggagtaattcagtcagaccaaatattccttgaaaattctcaagaaatcgtgaaaaattattatttttcaccaacattgatttggcaactcagaagcctgaagcctaggctgctgaagctttggaatcgagtaaaagcttgcgcttagaagcctgacgcttcaaggagtctagaactggctagaggtaagccaagccagaagcctgaaaactacgacgaaaagtctgggcctggaaactggaagctcgtacaacatcaaaaattgcaccaaaaattccacgaattccgagtaaatttccaagtctccaaaacttgcggtcccccgtttttttttttggaaattgcggggccttgtcaattttcgagtttcctcttctctgactcgcggagcaccttcgtcaataattcatggttttcttcttcttcttcttctttttcgtctcttctcgcgtttttgcatgaagctcccccaccccccgtacctaattagatgctgatgttgttgtgtgcgccatcagcacctgccagcagctctttccctccgccgtcatcgtcacatcttcttcttcttcttcttctttttcgtttcgtttcgcttcaccccgcctatacccgggggtcctgtgccgagaaaggcgcgcgagcgcgcggtcggtcaatcttttgtcgttgtctctggcggcctccgagtctcttcgccgattcgtcgtgttctctaatgtacaacctcactcatttgtcttctgatggatttgatgatgcattgtgtaacattcgcacacaaaatgtctgagcgccgccgctcacttgtgcgcgcgcgcgcgcgagcgatcggacagccggctgctgcaggacaccacggcgagagggatgaagagcgtgtcagagatgcagacacaccccgccgagaatcggaagtttgaagaaacaaggacgtagatcatgaaccttaaaatcaggggtcattacctagatctggaaatgttgtggataaactgaaactgaaacccagttgctccgcgaggagctcgttccgatcttcaggatcccccccgccatccctgattccactttttttaatcgacgtcaatctcgactactttcactcgccgtcgcgcatccattctgacacaacaagtggtgtctccggcttgaagcagcgaatcgtacacatcgtctggactttcactcgacgcgaacaggatggatgtggttcgcggaaaacttgaactttcgaggaaaggggaaagcctagaagtccggattctgaagaggtccgggtgatcggtgaggatcagcttgaagatcgatccgagaagttgcagagctgaaattctggatcatcccaaaagatcccaaaagatcacagaatccgtctgcaacactctgaaagcccaggcacactggccacacatcagcgaatgatgtcagctattgtaaactccgccaagaattcacatgaagggttatggtcctctcaacgtttatcctaagctgtgaaggatcagaaaaatcggagttctctgcaaatgttggaggatcagaaaaggatctcagagggcgctgaggatcagctggccagatcatcctgaaatcagctaaggcggttcaagatcaagtcaagggtccgactaacggatcatgggcttcaatgggcttaactacatcacaaaaaccgtcaaggatctgaaaatcagccgtgtcaaacttcatggccagcctgagcaattcacaatacagaacttccgcctctgagccgtgttgaagatcagcttaagctcaaatccatcagaattcatccgagttgttacaagatgaagcctatcaacgcttcatgatcatcctaaactggatcagaatcatgggaacgcttaattcatcagataggataacgttaaagatcagaaagtcagctgagctcgtgatagctcgtcctaagctcaagtggaagcttgtcagtgtaagctcgcccaatgaaaaaagctgaacaaagatcagaagattcttcttcgacccccgatttcgaaattactagccgaatttcatcactatcagtatattaatataaatagtcgactagaaatcaagaagtactttgattctgtttgcgactaacacacatacataacaacaacatgtgaccgaccaactccgacatattatcatcttttttatcgccaggccaccacctctctgcttctctgctccctctctctctctctctcgttttgaatagtttgatggttgttgtcggtgcattccgctctctcctgcttcttcttcttcttctattttctcccctcaacactggcgtttccaagtctccgtcgtgttctctgtgtgtgtgtgtgtgtgtgccaccgggcttcacacacacacacacacacgcctgaccgtcgtgttctctgtttcggaagcctccgccaaggttgtggccttcgcgcattttgtgtcgtgttctctgcgtctcagtctctctctctctctgctggcactttgtatcgaaccaagtgacactgacacagacgaatgagaatttctctttttttctcatctttttctgcatctgagggtggtggtcaggagattgatggggaactcagtgcttccaggctttcaggcctgtggcccaaggcttttgggctttgagctccaaccggcttcgagtagcctagtttccttgccaacagcgtggttttcaggccagtgagcttctaggctactgagccttggccgagcagacatcgaagcctcaggcctctaagccgttatgcttccgagcttaacacgccttgggagctggagcttaaactggcttcaagctttagaattccagactcctaggcttcaagccgagatccgtggctttcaggcttctggttggcttggcttaccagaggctttcaggtcagtgagcttctgcctaagtccccggaacctcaggccgccaagcacaagcttttacttgagcttcagaagcctagattcctaggcttcaggctgcttctgctcccagcgtaccagctaagcctccacgcttctgggctccgtctaggcttctgggctccgtctaaaaagcttattttctagcccaaattcaacctatatggctgctgagctttggctcatgaattcagctgcagcttattggctcagttttgcttctgcaattttcgccggtcttactgctaaaaattaatgagctcgatgacgtcatggctaaactgcacacgcttgctcttctgagaaagagcaccagcggaagaggtgtgtgtgtgaattatgcaatagaatacgcacgacatgtgtattctttgtgctccgagagcctgtgggattttaggattttagcagaaaaattaggttttatagtccggtttttcgagcttttttctagcaatttttccagacagtgaaattcggatttccaaccactttttgttcaaattttcaaaatttagccaaaaattgaaaattttcgaagtcaaattttgcaacaaaatcgatttctaagatcaaattcgagtttgttcgcattctctccgccgccgccgccgccgctaccaccaacatcaccgtcctcttctctagcacactctctctctctcatcgtgctctctgcgtctctcgaaccgtctgcatctctaaccagctctcctgatctctcgtcgcctcctctcctcgtctttcgcccatttttccttttcctttctcacccggttgtcgtcgtcgtcgtcattttgctgctgcctggcgctgtgtcgattctctcgttttttttttttttttttttcgtttttttctccttctcccgagatagtgtagtctttggacgggtttccgctggaaattgagttttttaggtaccgatttttgatgattgacccgcattatcagtccttttcactgtgaaattcgaggaaatcacgtttttctcgtctattttcgaattccccgtcatttttcaccccgggagctcaattttctgactgttagcttcaaatttaagaaaattgtgcatttttgcgtaagagatccccggtgtttgcgtatttttggagctacagtaccccaaaaatgtcaaaagtcgagctagaagcctaaaaaaaccggcggccgggtgtgaaatttgatggagaattcgattttaaaactattttcgaggaaaatttaacttgaaagctcgaaatccggggttaagattaatttttaaaacatttcatgaaaaaattcgaatttcccatctaatttcacgtctaaacgctatttttcaacgttttatctgaaatttcaaattttccggggaattcgaaaatttgagctaaattttaagaaaaattgatttgacgtcgcttttgaaggttttaactcgattttgaacaaaaatcataactaaaatcgaatttctcatcacttttcacccataactggctttttcctggcattctaactcaaattttgaatttcccggggtactgtagccccaaaagtacgcaaacaccgagcggcttacgacaaaatgcagaatttctcaaaaccctgcgaaaaccatccagataggggtaaaaaaggtcgctgaacccgaatttgagacttttttgtcaaaattttcaagtttaagctgagaaaaattcgattttcgtcaaattttcgagtaaattgtcgattgttttttcgcaattttccgcaatttttctctctttcagcgtgaaaatcagctccgtcaacgtcagcaaaacttttttgatctgacgtcatcgtcgccggccacgtcatcatttgtgacgacacaagtagttgttccacgtcttacacatctcgaggaacggctcatcgagttgggtgtcgagcacgaagttgtgcagcatacgcagagattacagtcggaatttgagaattatcatcatctccagcagcaacataatcatcagaatttccaacaacaacaacagggaaatcacgattttgtgaccccgaaagtgagttttttcgattttttactatgaaattcagattccccgccaaatttcacccttggagcactttttctggacttttagctcaatttttgaaattttcgggttacggtagcctcgaaaatacgcaaacaccgggggggcctcacgacaaattgcacagctttcgcaaatttgaagctggtgctctgaaaattgcgtttcccggggtagaaaacgacgggggattcgaatttttcatcaaaaactattcaaatcgagtttttttaaatggaaattcacattttttgagtttttagaatttttcaacttgaaaatataatttttgtaaaaaataatgctcaaattcgagttccccgccaaattttaccccggaatcctgtttactcgggcttctagctcgaattttcataattccggggtactgtagctccggaagtacgcaaacaccacaggtctcacgacaaaatgcaccgttttcgtatttttggtgttagcggtctgaaaatcaggctcttagagtgaaaaatgacgagaatatcgaaaatcgacttgaaaattcgttttgcacaaatttttggagttaaaaaagcgaaaaaatcggaattttccgtcaaaatttgaacattttaatttgattttcgtattttgcgtcatttttcacccccggacccctatttccagaccgctaacaccaaaaatatgcaaactgtgcattttgtcgttagccactcggtgtttgcgtatttttggcgctaccgtaacccggaaaatttaaattttgagttaaagacgttgaaaatagcgtatagaggtgaaatttcatgggaaatttgaatttttacatgaaatttttgaaaattaatttcaaacccggattttttaagctttcaagttaatttttccgtgaaaatagtttcgaaatcgaattccccatcaaatttcacacctaaacccattttctcaggcttctagctcgatttttgaaaattttggggtactgtagctccaaaaatacgcaaacaccgcgatctcttacgcaaaaaggcacagttttctcaaatttaaagctagcggtctgaaaattgagctcccggggtgaaaaatgacggagaatttgaaaatgataatgaaaatttgaaaaaatcacttttttcaggccccacaggacaaacaaaaacggaaatatacaaagcgaaaagctcttctcaacacagcagtggcttcttcgtcggatcaaaacggcatgaaaagtcccggtagttcggcgatggaaaatgctgccgctgcggcccaggctgctcaggcccaggcgcaggcaacaatacctacacctacagtaaacctaccagatgttgtggcaattgccgctgcggcggcaaccgcccaaccgtcggccgccgccgccaaacgcccggccagtgaaacaccgccaaatgggctgccaaaagtcccaagacacgatgagcaacagcaacaacaaaataatgcacattctattgtgatgggcgctcgagagggatttttgtgcgttttttgagcaattttaatcgaaaaatttgaattcctcgtttaattttacccccgggagctgttttttagctcaaaaaagcttaaattgagaacaattggattttctacccaaaaatgcggggacaatgcaatttttaatgccaaaattgaattccccgcgtaattttacccctagcagaagtttttctgtggttctagcttgatttttgaatttcccggggtacgatagccccaaaagtacgcaaacaccaagaggggctcacgacaaaatgcacagttttccaaatttgcatattagcggcctaaaaaatgggtccctggcctagaaattgacgaggaatttgaatttcttatcaaaaacttataaaacccgttggattaagttgaattttgcaaatttcctacttttctcttagtttttactttttttcaatgtgattttcgaattccccgccaattttcaccccggaatatttttttctaggttcctagctcaaaatttgaattttccggggtacggtagacccaaaagtacccaaaaaccaaggggggctcacgacaaaatgcacagttaccttgatttggaggctagagacctgaaaattgtgttcccggggtgaaaagtgacggggaatttgaaaaatgacttgaaattcagattcgtaaagttttaacgactgaaaaaaaaagtcggatttccatctgaaatttcaaattttagagtcaattttcgagttcctcgtcatttttcactccggcaacctttttttagtggcactgacatcaaaaatacggaaaatctgcattttgtcgtaagctcctcggtgtttgcgtatttttggcactaccgtaccccgggaaatttgaattttgagttggagcgtcgcggaaaaagcttttaaaggcagaattcgatgggatattcgattttttacatgaaactttttgaaaactaatcctaccccgaatttcgagctttcaagttgaatttcccgtgaaaatagtttcaaaattgaattccccgtcaaatttcacaccggatccttggtttttaggcttctaggtcaaattaaaaaaattttggggtactgtagctccaaaaatacgcaaacaccggcgatctcttacgcaaaaatgcacagttttcccaaatgttgagctagcagtctgaaaattgagctcccggtgtgaaaaatgacggggaatttgaaaatcgaagtgaaatttcacgaaaattacaaatttttgattttttcagagcaatgaacccatctctggcgggccacgtcttcccagcgagctcagcgtcaacttcgggagctccgggagcccactcagcaaccaccagcggaggagccggcctaatcgggatctcagcagcaactcaggctcaacttcaagctcaacaggctgctcaggccgccgccgcagcagcagcagcagcagctgctcaggcgacccaatctctgtacattaatacatcagttgctccgggagcacaagcagcttctgctcaaggtggcggcggtggtcaagtggtggctgctcaacaatcaaatcaggcggcaacagcagaagctattcgcctacttcaaggccttccaccattccttactgctggaagtggctcggctggaattccgtacttttcggccctttcccagcagctcaatcagttgggagcagcggctccgggagctcctggaacactgaatgggcttcaatttccggcaaatgcggcgcttgggccacaacttgccggagcagcattgctcgccgctgtgccaggtgctcagcaacagattaaggtagtttttttaaaagcgaaaattgaagttttctggaatttccagcagtaattttcccgatttttcagtatcaaattcgaattccccgcgtaattttacccctagcaggagtttttctgggattctagcttgatttttgaatttcccgaggtacggtagccccaaaagtacgcaaacaccgtgggctttacacggacaaaatgcacagattccctatttttgatgctagcggcctgaaacatgggtttccaggcttgaaaatgacgaggaatccgaaaatcgacttgaaaattgaagtatctcaaaatttgtagctgaaaaatctaaattttcaaaaaactacaatttttattgaaattttcaaattttcagtgcaatttttgaattcctcgcctatttttacacataaatcacccttttctatccgcccagctcataatttaaatttcgcggggtactgtagccccaaaagtacgcaaacaccgcagagccttacgacaaaatgcacagattccctatttttgatgctagcggcctgaaaaatgggtccctggggtggaaaacaacggggaattcgaatttgttactgaaaattctgaaaaaacacgaaaaaataatttttaaaactgaaaaattttaaaaatttccaaaaaaacgaccaattcttctcgcagagacccggtcgctggagtggaatgcatgtaaaaattgcgaccgacattcagaactacaagcaatcacaggagaagaagcttccgacggatattcaatccacgtcatcatcatcggctgcgcctgcttcggctccggctccgcgagccggtgccggtgccggtgccacatcatcatcggccgcatcatcgtccacctcaacaccatcatcatcttcccatcacaaaaaatcatcaccaccgcatcatcaaaaatcggcggctccatcggctccgccgcgtgacgtcactagtgctcatgctccgcctccgccggcatcgtcggctccgattgttggagctccgaggcaaggagccactccgcaggctgctcccgccactacgcctgcaacaacgtcgcaacatcaacaatcgatgtgagggttttttttttggttttttttctggttttcctggttttctatcgatttttccaagtttttcagaaaaaatcggattctccacaaaattttagcctggaaatcgttttttccgatggtctaactcgaaatttgaaattcccggggtactgtagcctcaaaagtacgcaaccacgaagcgccttacgacaaaatgcacagattctctattttgagccctagagagctgaaaattggggtcctgcggtagaaaatgacgaggaaatcgaaaattgacttgaaattttgattgggatagtttgagtttgagagttggctaaaatagtttaaaaaatcaaatttccgactcaaaattccgaaaatttcgtatcaattttcgaatttcccgcaactttccaccccggggaacctatttttcagagctctgacgttaaaaatacacaaactgtgcattttgtcgtgaggctctcggtgtttgcgtacttttcgagctaccgtacccctcgaaatttaaattttgttagttggagcgccgggaaaaacgtttttcggggtgaaattgggtgaagaatttgaattttttatgggaaattttgaaaattacgagaaaattttcttttgagaagttttgaaaaaattaaaaattttcaaaaaaaaaaaaatttttttttgaaagtttgaatatttccgcttttttttttatttttttttattattttttttatttcttagttttcctcccctatgaaaatccccaaaaaaaaatttttggtttttttttcattcaaaaaaaaaaaccaatgtctcgttaattttgcagtcaattctcccaatttccgccaccacagttatcgggcggtgcagcgtatgctggaaacccgcagctcatggcggctgcaataaatgaagcaacgcgacgtgttgcgtgagttttgtgcatattgtgtgtgtgtgtgtagtgtgtgggtgtatggctcagaaactgtgggtgtatggctcagaaactgattttttttttttgatttttagtcattttttacctaagaaaacgctgaaatttgcaacaaaaaaaaccccccggaaaattggcttaaaaacgcaattcccacccactttgaccctaaaaaaatggcttaaaatttgaatttttcggattttcagccttttggggctaacaatgttaaaagttgtgaattttggctgaatttgtgtcaaaattcacttttttttttactgaaaattcgaattttccccctaaaaatcgatatttcccctgtgacttgtgcgtttctcagatttttggcataaaaactgtatttattcacattttcagccttaaattggctgaaaatgtgaataaataccgtatttctgccaacaatttgacaatagagcacatttgtcactcggagatgcggaacctatgcccaaattttcatttttacggaaaacttgtgattttcacagattttcagtcgaaaatgattttagtgtgatttttgttgcgaaatctcgatttttcaatgtcattttcgaactctccacacaatttcaccccaaaatcaagttttcccggctttctagctttaaatttgaattcccgggggtactgtagccccaaaagtacgcaaacacggagcatcccacgacaaaatgcacagttttctgaaattttgcaaaaatgtgcaaattaggggtaaaatggtgctctgaattcgaatttcgcactgaaaaatcgtgaaaatgcctagtttttgagttttcctataaaaaatttgaaagttttcaaaatttgaaatttttcagtgcaacaccgaaacccccagtagtccgtccaccgtctgcagccactcaacaacagccagtatcagtcacatctcaagcttctcaacaacagcaacaatttcaacaaattcagcagcaacgggcggccgcaattgcagcggccgccgctgccacgtcacaacaggctccaccggctcaggcttctcaggccacgtcggcggctcagcaaattgcgacgagcatgggactgcagccggctcaagtgactgatttagtgaatcaacatgcacaacaatatcttttactgcaacaacaacaacaacaacagcaaagagaacagcagcaacagcagcagttgcaggtgcttaatttgactgaaaaagtggaaactttggtccaaaaactcgcaattttgacctaaaaactggaaatttcagcccaaaactgggaattttagcttaaaaactggaaattttagcccaaaaactggaaattttaccccaaaaattggaaattttgacccaaaaactagaaattttagtccaaaaactggaaattttgacctaaaaactgggaattttgacccaaaaattggaaattttagcctaaaaactggaaattttaacccaaaaattggaaattttaacccaaaaactagaatttttagcccaaaaactggaaattttaacccaaaaattggaaattttaacccaaaaactagaatttttagcccaaaaactggaaattttaacccaaaaactagaatttttagcccaaaaactggaaattttaccccaaaaattggaaattttgacccaaaaactagaaattttagtccaaaaactggaaattttgacctaaaaactgggaattttgacccaaaaattggaaattttagcctaaaaactggaaattttaacccaaaaattggaaattttaacccaaaaactagaatttttagcccaaaaactggaaattttaacccaaaaattggaaattttaacccaaaaactagaatttttagcccaaaaactggaaattttaacccaaaaactagaatttttagcccaaaaactggaaattttaacccaaaaactggaaattttagcccaaaaattggaaattttgacccaaaaattggaaattttaacccaaaaattggaaattttgacctaaaaactagaaattttagctcaaaaattggaaattttaacccaaaaactggaaattttaacccaaaaattggaaattttgacctaaaaactagaaattttagctcaaaaattggaaattttaacccaaaaactggaaattttaacccaaaaattggaaattttaacccaaaaactggaaattttagcccaaaaattggaaattttgacccaaaaattggaaattttgacctaaaaactagaaattttagctcaaaaattggaaattttaacccaaaaattggaaattttaacccaaaaattggaaattttaacccaaaaactagaatttttagcccaaaaactggaaattttaacccaaaaactagaatttttagcccaaaaactggaaattttaccccaaaaacttgaaattttagtccaaaaactggaaattttgacccaaaaattggaaattttagcctaaaaactggaaattttgacccaaaaattggaaattttagcctaaaaactggaaattttaacccaaaaattggaaattttaacccaaaaagtggaaattttagcccaaaaattggaaattttaacccaaaaattggaaattttaacccaaaaattggaaattttgacctaaaaactagaaattttagctcaaaaattggaaattttaacccaaaaactagaatttttagcccaaaaactggaaattttagcccaaaaattggaaattttgacccaaaaactggaaattttagcccaaaaactagaatttttagcccaaaaactggaaattttatcccaaaaattggaaatttcaacccaaaaactgggaattttggcccgaaaaccataaaattttgagtaatttgtgctcacaaacggctcaaattgtttgaaatttcactgaaaaatttattgaaaaaatttatatttaaaaattttattcccccaaaattcgaacttttaacctgaaaagtgaatttttctgctcaaaatttcaatttttcacccaaaaaatctacatttttgcaggctcaacaagttcaacagcagctgattgctcatttgctcggtggaggtcatcaggctcaacaggcggctccggcggtttcagttgctcagcaacagcagcagcaggttgccgccgccgctgctgctcaacaacaacataatgcacaattacagaatattatgatacttacggcggttagtaggcaaaatcgaggtttttcactgaaaaattcggattccctgtcaaatttcacccctggagcacttttttctgggcttctagctctaaatttgaatttcccggggtacggtagccccaaaagtacgcaaacacagaacatcccacgacaaattgcacagtttttgtatttttgatgttagcggcctgaaaactgacggggaatttaaatttctcacttaaaatttgttaaaaccgatggtgtgggatgaaatttgcaatttccaacttttttctcactttctaactattttcaatacgatttttgaattccccgccgaatttcacccccgaagcactttttctgggcttctagctcaaaatttgaatttcccggggtacggtagcctcaaaagtacacaaacaccgaggagcttacgacaaaatgcacagttttcgtatttttgacgttagagttctaaaaaatagctccctaggtagaaattgacgggaaattcgaatttcttacttaaaatttgttaaaaccgatgatgtgggatgatatttgcaatttccaacttttttctcactttctaactattttcaatacgatttttgaattcctcgccgaatttcacccccggagcactttttttctgggcttctagctcaaaatttgaatttcccggggtacggtagccccaaaagtacgcaaacaccgaggagcttacgacaaaatgcacagttttccaactttgcatgttagcggcctaaaaaattggttcctggtctagaaattgacgaggaatttgaatttcttatcaaaaacttatgaaacccgttggattaagttgaattttgcaaatttcctacttttctctcagttttcactatttttcaatgtgattttcgaattccccgccaattttcaccccggaatacttttttctaggttcctagctcaaaatttgaatttccgggggtacggtagccacaaaagtacgcaaacaccgaggagcttacgacaaaatgcacagttttcgtatttttgacgttagagttctaaaaaatagctccctgggtagaaattgacgggaaattcgaatttcttattaaaaatttcgaaatttcagaattaaattgcattttttttccagctccaacaacaaatggaacgcggagcagctgccggtgccgccgcaagccttccctatcagctacaactggcccaagcccaagcccaagcccaagcccaacaggccccgccaacgtcacaaccatcacaagccgccactccacagcaacagcaacaactagacctgataagacaaatggaggcagtggctcaggtacagcaggcacatgctcaggcacaggcgcaggcacaggcacaggcacaacaaatgcagcaacaacagattcaacaaatgcttatggcaggccaaggcggaccgaatggccaagatcttattcgtctgcttcaggcggctcagcaacagtcacaggctcaacagcagcagcagcagcaacaggccgtggtggcggcggctcaacagcaacaacagcagcaacaacatgtacgggagtcgatttgagcaattttcagtgtcaaattcggattcgccgccaatttttacccctgaaactcttttccccggcttgctagcttgaattttgaatttcccggggtactgtagcctcaaaaatacgcaaacactgagcatcccacgacaaattgcacagttttggtatttttgacgatggagccgtgaaaattgcgtcccaggggtgaaaagtgatggggaattcgaatttcttgtcaaaaacttgagaaactcgttggattaaattattaaatggaattttagaaatttctagcttttctctcagtttttaccaattttcaatgcgatttttgaactccccgtcaattttcacaccgggcgcacttttttttggacttgtaactcgattttcgaaatagttggggtactgtagcctcaaaaatacgcaaacaccgagggccttacgacaaaatgcacagttttcgtatttttgacgttagagttctaaaaattgggtcccgggtgtaaaaagtggtgtggaattcgaaaatcgagttgaaaattttgagatttgcgcaaaattcaacttttctctgaaaagtagaatttccggtggtgaaactttccaattttcaagttaatttttgaattctttgccatttttcaccccggaaccccattttccagctcgctagcactaaaaatacgcaaactgtgcattttgtcggaaaatgaggtgtttgcgtacttttggcgctacagtaccccgggaatttcaaattttgagctagagcgtcgggaaaaaagctgtacggagtgaaaaatgacgagaaattcgaatttgataatgaaaaatcttgaaattcgttttttttttgaaattataaaattttgaaaaaaaatttttttacaaattttctttttttgcagaaccaacaactcgcagccgcccaagcagccgccgcagctgcagcagccggccgtccaactcaaaatcaatacgaagcactgctccagcaacaacgactgctcgccgctcaacaacaagccgccgccggcgccagtgctcagcaacaggccgccgcagcagccgcccaggctcaagctcaacaattccagcagcaactgctcggtctacagccaaatttgctcctggcccaagtccagcaggctcaacaggcccaggctcaggctcaggcccaggcccagcaaaagccgccgcaaatgccgaatggacgatgattcgattttatcgattttttttttgatttttttcttgtgttcccggttcgctgacctcttagtttttcaccatttttctctctgaaaatctcatttttccgcccaaagatcctcttgatttatcgatttatcgattttttttttgccccaatttctcatcgacacgccccatttttcttgtttttttttcaatcacaaacatttcctgattaattatgatgaagaatttatcgattttatacatatattttgttaagaagttgcaacgccgcggagcttgagatatgtgatgaggtagagaagaccggcaagaaggagcgaggactgaaagaaatattgattttctgggtggtttttagagtttttagttacaaaatttgaaatcagcgtaattttttacctcttaaaactattttttctgagattctagctaaaaatttgaatttcgaggggtacggtagcttcgaaaatacgcaaacactgaggttcttacgacaaaatgcagaatttcgtaaaatctagcaaaaactatgtaaataggggttaaaaatggctctgaaatcgaatttcttgttaaaaattaataaaaaccactagttttgctagaaaattgaaattttcaacaaatttttaggtcaaatgcaaaaaatatcgattttctagtaatttttcgaacttttgattgcaaagttcaaaatctacgacttttttcacccctgaacactattttactgagtttctagctcaaaatttgaaattcccggggtactgtagcgccaaaagtacgcaaacacctcatctcacgacaaaatgcacagtttttgtaattttgaggcaagcagcctgtaaaaagggtctcctgtgtgaaaaatgacagggaatttgaatttcttgttaaaaatcgaaaaatcgataatggttttgctagaaaattagatttttcaacaaaatcgcaggcgaaatgaaacaatattgagtttctagtagtttctcgatttttcaggtacgaaattttaaatctacgacattttttacccctaaaagtttttcgcttaaaatttgaaattcgcggggtacgatagcttcgaaagtacgcaaacaccgaggctcttacgacaaaatgcagaattttgtaaaatcttgataaaaacaagctcctaggggtaaaaaacagttttacagccaaattttatcttaaaaatcgacgaaaacaaatggttttgctagaaaattagatttttaaaatttttcgaaaaaatttttttttgttaaattaaattaataaaagttattgattttcaggattttaagcaccaaaaaaatctaaccgctgctaaaacacatctccttatccacgcgtcttgtccgatggtaaccgggggcagccggtcatggtacttgattttatggggtccatcacgcatattacagatgtcccagattagaattccagaaaatgccaagcttagaaccataagaacaaaattgcacaacattgcctgaaaaaatttgataatttttttttttgggaaaaaaatttcgaaaaaacaattttttttttacaaattttttttcttgaaaaaatattgattttccacattcttatacctaaacttgaatttttcttgtttttggcacggctgatgccttttttacactcgaaattcagcaaaattccgatcgcgggttacggtagctctgaaagtacgcaaacaccgcaacgtttacgacaaaatgcacagtttgttgaaattttgcaaaaactgactgattaggggtgtaaatgcgttttgagttcaaattttgtaataaaaatgctaacaaaaaccaatttttaccgtgaaaaaatcgattttttcaaaaaatttttttgaaaaactatcgcttttttcaatttttcatcacaaaattcgaaatttacgctaatttttacccctgtaactcttttccctggacatctagctcaaattttgagggcccaggggtacggtagcgccaaaagtacgcaaacaccgcagcgcttacgacaaaatgcacagtttttcaaaatttgagcgaaaaagggtgaaaatagagctcctgaatccgatttttaaaatgaaaatcattgaaattaattaacaatattttttttttgaaaaatcaaaaaaaaattttttttgaaaaatcaaaaaaattttttttttttttaatctcaaatttcttaccgcaaaattgaaggacataaaatgcagctctgtgagctcaaaaaatcgcaataaaatcgtgaaaaatgagtagaaaagtgccaaaaacgagaatgtgaggatggcgttgtacatgtacctgaaaaatcaataatttagggttgaaaattgataattttaggcttaccattgatgacggccatcgagaaacaccataatcacaatgaaatggcaaatctggaaaaaaaagtcattttttagacagtaaaattcagaaaaaactagttttttcctattttctgtctaaaaaacattttaaaacttgattttcctgaattttcatgtaaaaatttggatttatcacactcatttacccctatccaagtatttttcacaaaattttagaaaactgtgcattttgtcgtgacaaattcggtgtttgcgtactttcggagctaccgtaccccggaaacttgaaaattggactggagcctgtggaaaacaaattttatgactgaaatatagcggataattcaaatttacaagttttaacttccgaaaaaaatccaaaaatatgatgaaaattgctgttttcgaaaaaaaaaattttgctttaaaagtcgaattttcttgtttacctctcagtttttatagattttcaatgcaaaattcgaactcagaagccatttttatcccaatccaaacggttttcgcagttttccagaaatttctgcattttctcgtgagaaattcggtgtttgcgtacttttggagctaccgtaccccgggaaattcaaatttcgagctagaaactcagaaaagtagtttttagggctaaacatcagtggagaaatcgaatttgatacttagaaattgaggaaaattacaaaaattgggtaaaaattgacattttaaaaatttttgcttaaaaagtcgcattttctagtttaacttccagtttttatggctttttaatgcaaaatttgaactcagaagccatttctgcccctatatggacggttttcgctgtttttcagataattctgcattttgtcgtgagaaattcggtgttttcgtacttttggagctaccgtatcccagaatcgtcaaaaactggactagacacgtagaaaaacatgtgttagaagtgaaaaatgcggagaatttgaatttttacgttaaaaaactaggaaattcaacgaaaattgagtaaaactatgatttcaacaaaaaaaaaatctgaaaaatatcaaaatttttcacgtttcgcaattttttgttatcaatattgtgttcaagacttatttttacccgtattaagtatattttcgcaagttttcgaataattccgcaatttgtcgtgagaaattccgtgtttgcgtactttcggagctacagtacgccggaatttttaaagattgagctaaaagccagaaaaaatatgtcctaggagtaaaataagtagagaatttgaatttgatattgaaaatttgaaaaaaaatatcgatttttttcgaattttctcgaaaaatcaatttttttttcaaatttttttttctaaaacgaaaattttcaagttttgtatgcttattttatgcatttttacataaaaatcaaattccgcgtcatttttcactggttaattccaaattttagccctgccaggtttgcgtacttttggagctacagtagccagtggatttccgaattttcagctaaaattggtgaaaaaggctatatggggctagatgagtagaaatatgaaagaaattaaaaaatttcagaagaaaatgctatttttcgaaaagaaattttttggaaaaaattgaaaaaaaaaatttcgaataaaaaatttttttttcgaaaatttcaaaatttttttctcaattttaatccaaaaatgttttgttttatgtgcaaatactaccatttcaagctcaaaactcactgcctgagccaacttaatcatgggaagccacgtggcacaccagcccaccggcttcgtcattttactcggattttttcggtgaaaaaccggggaaaatggtgaaaatagcagaaaataagtagaaatagagacgaaaagttgtgttgttattcgatttcttttctgattgttggcgtggggaaatgacagccgtgtgtggtggtcctactcctgcgggggctcttcacgttgtgatgtgtgtgtgtgtgtggtgcgagagtgtgggctaattcggagagacgcaggccggcgagtagaggtgatttagtagggatcattgaaaactacacaaaatttggtgctgggaacacttttgaacaaaaaaatttgaaaaaatattttggaaaattaaaaaaaaaatttttttttttttggaatttttttttgaaaaaatactttctaaattttttatcgcttataattttgttttctgttaatttcactcctttaagctgttttccccactcatctagcttgaaaattaaaacaaattgaatttttttgggttactgcagcttcgggagtacgcaaacaccaaatgccgtaaaaattgattttttatatttttatattttctagaattagctaaaaatctgagaaaatcgaagaaaggtttattttgaaaaaaaaaatttttttaaattaaatttcgagaaaatttcaaaaaatcaatgaaacattgatttttcctaaaattccatttcaaaaatctgaatctacgcttatttttacccctgtaactcttttccctggacatctagctcaaattttgagggcccagtggtacggtagcgccaaaagtacgcaaagaccgaatttctcacgacaaaatgcagaattatctgaaaaacagcgaaaaccgtccatataggggcagaaatggcttctgagttcaaattttgcattaaaaatccataaaaactaggagttaaactagaaaattcgacctttcaagcaaaaactttgagaaactcgaattctttgataattttcacccctaaaaactacttttctaaacttctagctcaaaaatttaaattcgcggggtacggtagctccagaagtacgcaaacaccgagtgcctctcgacgaaatgcagaaatatctgaaaaattgcgaaaatcgtctatataggggtaaatatagcttctgagttcaaattttgcattaaaaatccataaaaactggaagttaaactagaaaatgcgactttttaagcaaaagtttttaaaatgtcaatttttgtaattttcctcaatttctaagtatcaaattcgatttctccactgatgtttagccctaaaaactacttttctgagtttctagctcgaaatttgaatttcccggggtacggtagctccaaaagtacgcaaacaccgagcacctcacgacaaaatgcagaaatgtctgaaaaatcccacaaattgactttccggggggtaataataggctctgagttcaaattttgcattgaaaatgcgtgaaaacgttgataagaatcaagatttttgagaataatttgtggaaatctacgggaaaaaaaaaacaaattttcagtgaaaaattcatattttttagctagaaaaatgcgtgtcaaaattgtacagaagtaattgttagggtttcttctttttgaaaaacgattccagcgatttcggcttcttcggtttttgagcattgtccgtgtgagctccggctcttttccgtgagccaccagtcttcgatttcagcgctcgagcttcttccaacgctattcgatgttggtaatgctgaaaaattacaagttttttataggaaaactcgaaaatcaggcattttcactagtttttcactgctatattcgaattcagagcaccattttacccctaatttgcatattttcacaaaatttcagaaaactgtgcaatttgtcgtcggatgctcggtgtttgcgtacttttggcgctacagtaccccgggaaattcaaatttcaagctagaaagccaggaaaacgggtttcagaagtgaaaaatggcggagaattcgaatttgatagttagaaattgagaaaaattccgaaaatatggtaaaaattgtagtttctaaaattattgctcaaaaagttggtttttaagcattttcatcacgaaaatcgaactcagaagccatttttactcctattttacatattttcgcaaaatttcagaaaactgtgcattttgtcgtaaggcctccggtgtttgcgtacttttgggactacagtaccccgggaaattcgaatttcgagctagaaagccaggagaacctgattttggggtaaaattgtgtggggattgcgaaaatcgaactgaaaattcgatattttcattgaaaactctattttttaattaaaaatcccaagttttcagagtaaaattcattttttgacaaatttttggcgaaatttgagtttaaaacattttttaacagtaaaatctcaaaaaatcgattttttttgctcaaaattcacataaaaatggcccgattttcgcatttttccgtctaaaattcggattttttccggatttttccgagttttcaggcacctttttaatgtcaggcggtaggtgcctccaggccatttttgaaaatttctttccatcgacaaaaatccaattatcatcagtttttggctgtacaacgtcatcatccgaatctgagcctaaaacaatgaaatctccgtctgttccagtggattttggtgttggattcggctttttcagctgaaaaaaattcgattttttcactaaaaactcggatttttgatcattttccggtactttttccggcggttcaacaaaaatcacatcttctcgaccatcattttcatcgtaaatcgccgcttttcgacgcgattttcgcgtttttttctcgtaaagccattcgtgaatcgatcgattttgtgcaggaattccgggttgaaaacgtgtcgctgatagtgaaatgttgagaattggcggtgtccagggaccggagtctgacaatgaaaattttgaaaaaatctagaaaacctctcaattttataaattttcattaggaaattcggattccggagtacttattacccctatcgcgatgcttttctcaagttttttgaaaattgtgcattttttcgtaagctccgcggtgtttgcgtacttttggagctaccgtaccctgcgaatttaaaatttggagctagaaacccagaagaatagtttttagggttgaaaatcagtggagaattcgaatttgatacttagaaattgaggaaatttaagaaatttggaaaaaaaaatgggttttcaaaattttttctaaaaaattggcattttcttgttaaacttcaagtttttataaatttttcgagcaaaatttgaattcacagcctattattaccccttgatagacaattttcgcgatttttcagacaattctgcattttgccgtgagaaatttggtgtttgcgtacttttggcgctacagtaccccggaaaactcaaattccgagttttagacttagaaactaacgggaaattcgattttttcactgaaaagcttcaaaacagactgaaaattgaaaaaaattagtgaaaaatctgaagttttccgaaaaaatgaaaatttgggcatagcttacgcatctccgagtgacaaatgtgctctattgtcaaattgttggcagaaatacggtatttattcacattttcagccaatttagggttgaaaatgtgaataaatacagtgtttctgccaacaatttgataatagagcacatttgtcacagaaatatcgacttttggtgatttttggaattttcctggggaaaattcaaatttttgtcagctttcagtgaaaagccacgggaaatcgtatttttagggcaaatactcaattattgtatcagatttgcggttttatgcgttgtttttcagtcgaaatcgtttaaatttcaaatatttaatccaaaaatctaaaaaccggcattttccaacaggtggcctagaaatcctaaaaactaggccacaaatttttttttactgaaaaaactgttaaaaaagtgtttttgccgctttttttctaatttttgcgtacttttttcaaatttccagctataaaaattaatttttttttattattaccctcatttttagtggcatttgtcttatttaatcccttcatagctgcccaaatctgctcaaaaagtgtatccgggtgataactggtgattttcagcgttttttgtggtttcccgtcctctgtgagcagtgagtacaccagattctcggcagttcgcttattttccgcttgatccgttgccaaacgctttgcgagctctttcgtgagcccgtcgagccattttttcagctccaacaccgatcgaatcgataattttccggggaagttcttggagacagcgatggaagaggattccttgcgtggccgaactggttcatcgcagtgtccctcggccacggacctcaggtattcgtgttgattcggaaatgtttcaatgagctgtgaaatgtccacttcgagcagttcacccattaactggaaaaaaaaaattttctagattttttcagtgtttgcgtactttcagagctaccgtaacccgcagaatttgtaaaaatttgagttttcactgaaaatatcgaattttcagttcgatttttgaaatccccacctcattttaccctaaaatcaagtttttccagcttgctagttcaacatttgaatttcgaggggtacggtagccccaaaagtacgcaaacaccgagtcttgcgtatttggcaccgaattttacgacagttagtctaaatttgctgaaaaccgggttacgggggtaaaaagtgacggggaactcgaattttcgactgaaaatctgtgaaaatcacaagtttttcgggaaaaattgaaaatttgggcatagcttccgcatctccgagtgacaaatgtgctctgttgtcaaattgttggcagaaatacggtatttattcacattttaagccaatttaaggctgaaaatgtgaataaatgcagtttttatgccaaaatctgagaaacgcacaagtcacaggggaaatattgatttttagtagatacagtaaaatcgctaggaatcatttttattcatttttctcaaaaaagaaagctttttttggtttttctagcagaaatttttgattttctcaattttcctgcattttttcacgaccatgttgactttttaccgtcaaaaatcgaatttttcacacattttcagctgagaaaatctcaaaatttcttttttttttgccagaaaaaattgatttttttttgagtatttccaaatttctaggttcaatgaaaaatatttaaaaattgtataaaaacgcctaaaattgcagatttcagacatttcagataatttttcgatgaaaattctgaaaataacttggaattttgaatattttcgcttccgtacagtgatattaagcatttcttgaatgcgatttcccatttttccgccaaatcctcgaacatctccgattggcgtaagccggagaatttctcgaacatagaaccacggaattaacgtttgttggcgtggtttatgccgggcgcacaccaatttcgccatcattttgttgtttccgacgcctgaaaatggaaaattgcgatttttgggcgaatttttccccccaaaaaatgaatttttctggattttccggcaaaatccatacccgccgagcaaaaaaactgggtttcctcgtgaatttgttgccgaatttgctctacagtgaccgcggcaatcagtaaaagcaggttttccgtgcaatttctcgcattttcaatatattccagcagcacatcttctcgtaggtgctcattttctttcacatcttctccggtagcgaggtgtgtggttgggaggtaggtaatagcagcctgaaatgcgaaaattaggcaatttttagcgaaaaaatcatggattttgcttgaaaattcattaacaaacggcaaaaaacctgtggacctagtgccgcccggcgcgagcggtcgcgtcgcggttggcacgttttttagaggtaatttgaaattcttgaattttattaattgaatttagcggaaaatcaggtttttcgcgttttttttcttgaaaaaactgctaattctgcaaaaagatgctgaaataggggggatttttctcatttttcaacttttcaagctagatttacctgcaaaaactcctccaatccctcgttttctctcaattcttgcaatttttgattagtatacgcggataaatcaagaaaagcctcatcgacagacgctttttcgattataatttgcgagtcgtaattgttcagcacccggaagacttctgcgctagcgtcgctgaaaaaatagcaatttttgggactttttcaatataagaattccaaccgatatttctgaatatcagctttatctacatattctccaatcggaacgtgacatattgatatttgagggcattttaacttcgcttcggccaccgtcatccctcgtttcactccgaacgggcgggcttcatagcttacagccaaaattctggaaatttcgggctttttttggagaatttcagattaaaattcagcttacccaccctcgataccctgcctggagtgctgcacgacgatcaccggctgtccccaaagcgatggattgtcccgttgttcgacttgtgcgtagaaacagtccatatcgatgaggctgatcactcttttcatgttttatgtgtctgaaaatattcaaaaactatgaaaagttgaaaaaaaaaagaaaaaaagccggaaattgcgaaaaaacgaatttttaaaacaaaaaaaaaccaaaatcaatgtttgaaaccccgcctaaagtgcactgcaatcgcgctccactaagacgatttggctgcttggctgagtattcaacgttaatgcataggcggtggaaaggcgtaggccaacgaagtttttcacatacttttctcgaatttccgtgatttttaggtgattttctccattttttgtggttttaagcattttccagtagttttgatgcgaaatacctacaaatattcatcgaaatgtgtctgttttgcttcgcgttctcataatttttgtaaaaatgaattcccgaattttcaggtaaaaacaagcagacatggttcgcatgaacgtcctcgccgatgcgctcaacgccatcaacaacgccgagaagcgcggaaagcgtcaggttctcatccgtccagcctccaaggtaaattcgcgtcgttcttcgagaattctcaatgcatttttgttaatagatgatgatgctggcagcctcggtcgcaaaaaatgaccaaggctctccgtgaatttagaatttagtgaaagaaactcggttttatttccaaacataactttcggttctaattaaacggagacacccttggttagattctctcaatctggagatcttcctgggatatgaatgttgaaggtaaccagcttaacatctactttccgtatttctagttttccacctgtcccttcccatcgcaacaataattttccaggtcatcgtccgcttcttgaccgtcatgatgaagcacggatacatcggagagttcgagatcgtcgacgaccaccgcgccggaaagatcgtcgtcaacctcaccggacgtctcaacaaggcctccgtcatctccccacgtctcaacatccgtctaaacgatttggagaagtacaccaacaccctcctcccatcccgtcagttcggatatctcatccttaccacctccgccggaatcatggatcacgaggaggccagaagaaagcatttgggaggaaagattctcggattcttcttctaaatccaaaccctaattttttgtttgttattattacaaataaattgttgttacaactacaaccgagtcgtgtgttcagttcggcatccaacttttcagggtttctaaatatcttttaaaacctttgggtttcgttttcggggaccacgaatttttcagaatgctccgctcagcagtttcagctctctatagagcatcgagaagcttctccgagacagttcccagactttcagccactccactggggaagcaagagccccagttgtccctgtcatacacctgcaaagtgtgcaactcccgggaggtttgagccaagaaagctagaaaactggatttgaaattcctaataatttcaagggcccaaaaacatttgccaagtcatcatacgagaagggagttgtcattgtcacgtgctccggctgtcacaaccatcacatcatcgctgacaatatcggatggttcgaggactttaaagtgagcatttttgctcttgaaaacggagcatcgttgacgcgtgttgtttagcgtaaatccaattttttccagggaaaaaacatcgaggatcatctgaaaacgcgaggagaagccgtgaaacgtcgtgacacgataaagaacgagaatggaatttttgaaattcaaaaatgaataaataaatcgatattttttaaatgtcttttgcgatgagaaacatggagagagagagtgaaaaacctgaaaaatattaaaattcgacaaaaaatagagaatgactgaaaattgcaaaaatatttagagctctttcttgacttcttcgggcttttcggccgccgccttcttcgggtgacgtggcagcacacggagcaggaccatgtggaggatgggccaaacgatgaaatagatgatgaagccgatgaaatacagacttttgacgggctggaaattggcaatttcagcgggttttaaggtttaacacagcatttttgtgcagattttagcaaatttttgcgggaaaagctctctggagagctcgttgtttttcacgaattttgagcaaatttccattgatgggagcgagctcaaagagcaaatttttggggttttcagtatagcaaaaaattcgaaaatcgccataatatactggattttaaaaattgaaaaaatgattcaaaatctgtagtttttggcttttaagcggcgaaaaacggataatttttgagtttttctgagaaaaattactgaaaatccgatcgattttccagacctaaatctgacaatttcatattttttttcgtttttgccagcaaaaatggctcaaatcccgaaattttggcttttttcgggctaactcggcctttacacggcgaaaaattgataattttctagtttttctgagaaaaatgactgaaaggagctttttcgcgccgaaaatggtgcaattttggtgaaaatcgccgaaaattatgaaaataaatttttggtccaaaaatctggaaaaactgtgttttctaagctttcagcagttaaaaaaattttcattttctgcgagcaaaagccaatttttgtcgattggacccaaaaaatagaattttcaaagcgaaaaagctacaaaaccctcaaaaaattgcaattttctggaatttgagccatttttgccgacaaaaacttgaaaaaaaattattattttggattaaatttttcaattttccgggttttaagccatttttaactgctgaaagcttagaaaacacagtttttccagatttttggggtcaaaaatacattattttcataattttcggcgattttttcaccaaaattgcatcattttcggcgaaaaaatctcctttcagtcatttttctccgaaaaactagaaaattatcaatttttcgccgggatttgagccatttttgctggcaaaaacgtagaaattgtcagatttaggtctggaaaatcggattttcagtaatttttctcggaaaaactcaaaaattattcgtttttcgccgcttaaaagccaaaaactacagattttgagctactttcgtcgtttcaaacttttttcattaaaagtgccaaatttccgccgaaaatcttgaaaaacccaatttttttttggttttttccgcaaaaaaaactgcaaaaactcgaaaaattatccgtttttcgccgcttaaaggcttttccctcaccccaatccaatatttagtcttaattagtccaaacataaggaaagcgaatcccatcgagtaggaaattgtgagttttccaaaaatccagataaacggcctggaaataggcttagaaatggcctcagaccatccgggagtcctcttaatcagagcataaagctgattttgagcctgaacacatccgagttcaacgccgaaaagaaggaaataaccaagatgatatccatgccaaattgccaaatatgatagagttatcacgtgtgatgccaatttattgttaacccaacggagacgacgatgaatatggctgaaaattggggaaaattgggaaaatttgaggaaaaattctgattttttcgattacaatcgtacattttagtggcaaaaatgttaaaaatcgcaaaattttgactgaaaatgtggaaaatttgaagaaaaatggacaaattccggggggtttccgctaaaaatgtggaaaattaggtaaaaaacgctgaaaattgcaaaattttgcctgaaaatgtaggaaatttgaagaaaaatgggcgaaaattccattttttcactaaaaatgtgggaaattagggaaaattgggtggaaaatcctttttttttttaactgaaaatatgggaaatttgaacaaaaatgaacaaaattcctggtttttccgacaaaaattggcaattttagtggaaaattcgatgaaaaataattttaaaatcaatttttccgcttaaaattgcaaaattttgactgaaaatcgtgttaaaaccaattttcactgcaaaattgggcacaaaacacagaaaacgcgagtttatacaatttttctccaaatttttgggaaaaatccagatatttcaggtgaaaaagtacaagaaattcaactttttttcggctgaactttataaattttccattaaaaatcgcaaaaatcatcgctgttaaggtgtttgcgtacttgtacaactacagtaacctaaattcccgggttactgtagctgaaaaagtacgcaagcacacaaaaaataggtggaaaattcgaattttcagcgttttttttgtcgaaaaatcgattttttccgattttttccctactttttggcaaaagtattggttccgcagttgaacgactcgacgaccgagttatagtcgtgtccggtctcccatttgatgatgtgaaggtcacgaactccgtcccatctgcaaaaaatcgatatttttagtgaaaaattgaacttttcgggcaaaaccctagtttttatgtattttaaccaagaaattcggattcagaagtacttattacccctattttgcatattttcggaaattttcagaaaactgtgcaatttgtcgtgggatgctcggtgtttgcgtacttttgtggctacagtaccccgggaaattcaaaattcgagctagaaagctgggaaaactcgattttggggtaaaattgggtggggatttcgaaaatggtattgaaaattgttaaaaactaagaaaaaagtaggaaatttgtgaaattcaacttaatccaacgggtttccaaagtttttggaggtagaaaatcgatttctccatcacttttcacccccgagacccagtttttaggagcctaacgtcgaaaatacgaaaactgtgcattttgtcgtgaggccctcggtgtttgcgtactttcggggctacagtaacccgggaaattcaaatttcgagctagaaagccaggaaaacgggtttcagaagtgataaatggcggagaattcgaagaatttgatagttagaaattgacaaattttgagctagaaaaccaggaaaaacttgattttggcgtaaaattgggtggggatttcgaaaattgaacagaaaatccgggattttcagaaaaaaatgttcaaaaatcgataatggagaattttgccaaggtgtttgcgtacttttaaaggtacagtaaccccgaaaaagtgaaaaatcaatttttccggaaattatcgaatttcgcagaaaaattttttttccgcaaatttattgattttttcaggaaattatcgattttttgcgaaaattatcgattttttttttagaattatcgattttttattaaaattattgtttttttcagtaaatttatcgatttttcggtaaattatcgattttttcagaaaattatcgattttttttttgaaaattatcgatttttccagaaattatcgattttttcggaaattcattgatttttcgggaaattattgatttttcgggaaattattgattttttcgggaaattatcgattttttttttgggaagttatcgattttttcgggaaatttattgatttttccggtatttttttcttagtcaaaatgaagattttcatctattttatagaaattttttgctcaaaacttcaaaatctcctgaaaatgctcattttttgtctaaaattagtggattttcaccatttttcacgctaaaaccagtattttaaccatttttcaatattctacctatcatttccctctgcatcctttccattatgtcccagcccactcaaaatcgatgctccttcagtgataagccacattgcacaatatttgtacattgtaagcctaaaccacagggtaacccatgaccaccgccagaaaaaggataaattgttgtaggcatcagaattaaaatattgatcaggaatccagaattgtccccattgatggagtaccatataggtacaaccggcaagaaaacggccaattgacggaaggaatctgcaaaaaaatcggattttttgtggggggaaaactcgaaaactagacatttttacgatttttcattgctaaattcgaattcagagcaccattttagccctattttgcatattttcgcaagttttcagaaaactgtgcattttgtcgtgggatgctcggtgtttgcgtactttcggggctacagtaacccgggaaattcaaatttcgagatagaaagctggggaaaagagtttcaggggtgaaaaatggcggggagttcgaaaatcgcattgaaaaattattaaaaactagggaaaaagttagaaatttgtaaaattcattttaatcatttaatccaacgagtttctcaagtttttgataagaaattcgatttccctatcactttttacccctggaactcaattttcaagactctatcgtcaaaaatgcaaaaactgtgcattttgtcgtgagatcctcggtgtttgcgtacttttggggctacagtaccccgcgaaattcaaatttcgagttaggaagctgggaaaacacgattgtaggctaaaattgtgtcaggatttcaaaaaacttggtgaaaatttgaaattttcagtggaaatgcgattttttttcaaaattttcgattttcgtctcaaaatgtcaaattcgagcttatttagcacgaaaaattcgtaagaatacgaaaatcccagtaaaaatctacaaaaatcgggatttttggagaaaatcggcgttttctcgggaaatttaagctaaaaatgaaaattccccagttttttataaattttagccaaaaaattcggattcaggagtacttattacccctatcccgatagttttctcaactttttagaaaactgtgcattttgtcgtaagctccgcagtgtttgcgtacttctggggctacagtaacccggaaaactcgaattttgagtttgccatctagaaactaacggaaaattcgaaattttcggtgaaaagcttcaaaattgacaatttaggtatgaaaattcgaaaaaattgagttttagcacaattttcagtgaaaaattggctaaaattccaagttgaaggctagaaaagtcaccaattttgaaaattttgacgacaaaattctgaagagcataattttccgattggtggcctagaaaccgcaaaaattaggccatcagcgatttttttcgcttttggatcaaaattaggccaattttctcgaattttcagtcaaaatgtggctaaaaatgctgaaaattccagattttttagcttttccctccaaacttacgcagatttcggtggttgaccatcagaatccaaccagtctccattaacaaatgaacggaattttgaaagtgtgaattgtggtccgacgagggttccctgaaagaaaatccagcgtttttcatcgaaaaattccttgtttttacctggaaaaagagcccaaaagcggcaatttccaataggcccggcttgtcactgattgctgtaagcttttgatcgggcttcaagtgctccggcttttgtgctccgtcgtagacatccattacgagaccgataaatctgggagaaaataaaaaaatttacttttttttttgtaatttttaggcttttttttagcgagtttccgcccgcaaatttccaggaaattttagggtcaaactcgaaaactagacattttcacgattttttattgcgaaattcgaattcagagcaccattttacccctattttgcatattttcgcaaaatttcagaaaactgtgcaatttgtcgtgggatgctcggtgtttgcgtacttttggcgctacagtgccccgggaaattcaaatttaaagctagaaagccaggaaaacgggtttcagaagtgataaatggcggagaattcgaatttgatagttagaaattgagaaaaattccgaaaatatggtaaaaattgtagtttctaaaattattgctcaaaaagttggtttttaagcattttcatcacgaaaatcgaactcagaagccatttttacccctattttgcatattttcgcaaaatttcagaaaattgtgcaatttgtcgtgggatgctcggtgtttgcgtacttttggcgctacagtacccccggaaatgcaaatttcaagctagaaagctgggaaaacgagtttcagaggtgaaaaatggcggggaattcaaaaatcgcgttgaaaattgttaaaaactaagaaaaaagtaggaaattcgtaaaattcaactcaatccaacaggtttcctaagtttttgccaagaaattcgatttccccatcacttttcacccctgtaacccaatttttaagacttttacgtcaaaaatacgaaaattgtgcaatttgtcgtgggatgctcggtgttgcgtacttttggcgctacagtaccccaggaaattcaaattttgagctagaaagccgggaaaacttgacttaggggtaaaattgtgtggagatttcgaaaatcgaactgaaatcgtgcgattttactcgactttttcgaaaacattcgaaaaaatggattttctcgattcaaaattttaaactcgagctcattttgcccaaaaaatccaggagaaaccgaaaatcttactaaaaacctacaaaaaaatcggctttttcttcggaaatttaagctaaaaatgacttttgagccgaaattaaaaattttcacatttttcgtggtaaacctagttttttatgatttttaaccaaaaaattcggattcaggaatacttattacccctatcccgatagttttctcaagttttcagaaaactgtgcattttgtcgtaagcttcgcggtgtttgcgtactttcggagctacagtaacccggaaaactcgaattttgagtttgcgatctagaaactaacggagaattcgaatttctcagtgaaaaactttaaaaatagactgataattcgaaaaaacgcgaaaaatctcctaagtttttgggggaaaaatgaaaaaatcagccaatttaaggctgaaaatgtgaataaatacccgtttttatgcgaacaaaacgagtagaagtagcacatgcgtcacaggggaaatatcgatttttagagaaaaaagtgaaattttgagctcaaatttgaaaatttagaatcaaaatctgatattatcactttaaaaaacttaaatttgagaaaccgcaaaagttaggccatcagtgatttttttactgaaaactggaggaaaatgttacaaatttcggtttcggactggttttcagctgaaaaaatggcaaaactcgtgggaaatccaaattttcatataaaattgatggataaagctgggattttcctgatttttggcacaaattcggtatttattcaaattttccgcctagaatactagaaatgccctaaaaataccgtttttgagcagaaaaattcgaaattttttatttttcaactgaaaaatcgtgccaatttcagtcaatttttcgggaatttctctcgatttttttccacaaaattcacacagtattctccacacacacacacacctcaacgtcataatacagaaaggtgttgtccatgtaatatcatatgtatcagtctcatgaaaccaataaccaatcaataaatgtcccaaaaagacaatatgtgccgcataaatcgaggcatcggttccggccatgaaatttgtgatgaaaaatgctccaaaaatgctcaaaatcggatgaataaccgatgagccacaattgaacatccataagcttaggccgacgattacaaagaataaatgttgatgttgggccggtttattgtagaaaaatgtacggtgaactactgccagagggtatcctgcaagaaaaagcgattaaaatcggattttttgagggaaaactagcagaaaaatcggatttcttcagttaaaactagcttaaaattgaattttttgagtgaaaattggataaaaatgtggtgttgtaaggtaaaagtaactaaaaaccgatttttgagtgaaaattggactttttaaacggaaaattaatttttttgagtgggaattagcttaaaaattggaattttgagtgaaaattattagaaaaattaatttttgagtgaaaaatagcttaaaaatcgatttttaacagaaatattgatttgtttgagtgaaaattagcttaaaatttgattttgagtgaaaaatagcttaaaaatcgatttttaacagaaatattgatttttttgagtgaaaattagcttaaaatttgattttcagtgaaaaatagctttaaaagttaattttaaagtgaaagttaggctaaaactagactttttgaacacaaatgagtttaaaaattggagttttgagtgaaaataggcttacaattggatttttaatggaaattttgattttttaggtgaaaattgggtaaaaatgttgtgttttaaggcaaaagtagcaaacatcgattttttgagagaaaattagcttggaaattggtattttgagtgaaaattagcttaaaaatcgatttttatactgaaaattagtcaaacttggaatttcgtagtgaaaattagctatgaaaatggatttttaagtgaaaattcggtcaaaatgtggtgttttaagggaaaagtagctaaaaaccgattttttaagggaaaatcagcttagaattggagttctgagagaaaaatagcttcaacatgcttttttgagtgaaaatgagcctaaaattggattttttaacaggaaattaatttaaaattggttttttgagtgaaaattagcttcaaatcggtttttttaaccgaaatattgatttttttgagtgaaaattggatttataagaagaaattagtaaagaaattgattttttttgagtggaaaatagctgaaaattggtttttagattgaaaattaggtttaaaattggaattttgagtgaaaattagctaaaaattaattttttaattgaaaattggataaaaatgtggtgttgtaggtaaaagtaactaaaaaccgatttttgagtgaaaatttgactttttaaacggaaaattaatttttttgagtgggaattaacctaaaaaattggaattttgagtgaaaattagcttaaaaattaatttttgagtgaaaattagcttaaaaatcgattgatttttaacagaaatattgatttttgatttttttttttgagtgaaaatcagcagaaaatccaatttttgaatgaaaattagctaaaaattggtttttaatagaaatattgattttatattgaagattagccacaaattgagtttttaggtgaaaaatagcttaaaattggatttttcacaaaaatactgatatttatactcaaaactagctagaaattggatttttaagtcaaaataagctgaaaatcgactttttgaacgaaaataattgattttttcactgaaaacccgattttcaacaacaattttcgccaacaaaacatgcaaaaatccggttttcataggatttttcccccgagaaatctcaatttttcatccattttcggtgaaaatccgtaccggcaagcacagagataagtaaccgaagagcatcttcactggcgctggtcacttccgatagtgctccgactacgcccattgtttgaggcttaaactcgggagttttcctgaaaaaatggggatttttgacgagaaaaatcgattttttcgagagataatgacgagaatataggggttttagatgaaaaaatgctggaaaactaggaaaatctgcggagaatcgatgaaaacacggcgaaatatcatcttgcgcgtcaggttaggtgttttcgcgggaatcattgattttcaggtggttttgagtcaaaatttacaatttttaaatcaaaaattcattttaaatcctaaaatctaccctaaaaatgcctaaaaatcgaaaaaattgagaaatctgcagattaaaactcaaaaaatgagtgccccgtcagtttgcgcgtcaaatatggtgcgctcggtgtttgcggacaaatgcggacttaggcggttttttgtcgaaaaaattctgaaaatcaagacatgtgatgcaattttgggatttttcaggtgaaaattgaggaaaagcataaaattctgcacaaaatgagtccaaaacgaaaaaattttggtcggaaaatgactgaaaattcaaattttgcagaactttgtgtttaaatatgtaataaaaaacgttggaaaaatcgaaatttcaacgtttttcattcaaattaattttaaagcgagaataaaaaggatctaaaaatccaaatctatgtgtgtgtactttcaccgtctcccccgccggtaaactgtactgttcgaacccgaaagatagcggccgtcgccgccgccggcgggggaaaaagatatggcctgacattcatttgagaactttgacctattttttgccggttcgcgcctgactagttgccagtattggtttagtgatatattttttcattgcgaaaaaaaagtggcctagttttttttttcaagctgaatttctcggtcacggctgctttgaaaaaaagaaacaaatgataagggaaatgtagcctttattgtacttttttgcagaaagagatatctcaataaatcattagggcaggaattttggaatttttcggccgcaaaaattttctttatttcgaaataattataaaattatatatcaggcataggcttaggcttaggctcaggcttagagccttcaaaaattttctttcaaaactgtttaaaaaaagttttatataaattttagattaaaaaagtttgaatatcctgttgaaataagccagttttttgcatttgtcaaaaaaaaaatgccgcacaaccctgaagttaggtaggccttctataggtgtcaggcgcggtttctgggacgcttgcctccaacctgtgaaacgcctaggcgtaggaaaggcggttctttcaaagagtggccgacacttttcgggttccgcgcctggctcgccttacggcgtcactcaagccgcaagtatccgaaagtattatgcggcacggaaccccgaaagtgtcgaccgcttccagataaccaacctttcgcacaacgctgtacacacacaaagctactcatttcaccacaagctgcggaaccccgaaagcgtaggccgcttccaaacaactacctttcgcatttcatttcacacacagcggcgccggcgttcgcgcctcactcagaaataatgaaaaatcagttaggcgagcaaaaggtaaaaaaaggtcacaaatcatctttattctatcatctatgctatcaatcatcatttcgatgatgatattctataaaaatcaatacataatacagaaacacacacaagtaattaaacgcgttgcacaacattatcctcctccttgtcagacttctcatctttgagcgagtgtaaggaagatgcgagtgtcatgaagcttctttccttcgtaggcaccacaatttcaggcagtttatctcctccagtctttttctgcaagccatctaggattgtttcatgcacgcgtggcgagtagaccgagaagaaaattgcaatgcttttgcacatttccgtttgttccttcgagaattggtctttgaattgctgcaaaaattgacattccgtttcttaggctaaatttctcaaatttgaacttacaattgcaagcaatctgacaatcactgcatcgatatacgaaagttcaccaggtgtagaaatcgcaagtgcacgatgctcacgaatgtaatcaatcacatcagtaagtacaaatgctccagaggtctccgcaatcttttgatagccaataatcgaagctgaaaatcaatatggttaggcttaaggttcggcaaaggcttaggctttatcttaggcgtaggcttcggcttggcgtcagtggcgatcgtcagctcgctactgacgctatttaggcttaggattttccggttttttatttttgagggggttcctgtttgccgattcaggcttaggcgtaggcttaggcttaggcttaggcttaggcataggcttaggcttaggcttaggcttaggcttaggcataggcttaggcttaggcttaggcgtaagctttggcttaggtttagaccaacacttaggcctggtcttagacgtaggctttggcttaggcttaggtttaggcgtaggctttggcttaggtttagaccaacacttaggcctggtcttagacgtaggctctggcttaggcttaggtttaggcgtaggctttgacttaggcttagtcttaggcttaggaataggtttaggcttaggcttaggctttggctttggtttagaccaacacataggccaagtcttaggcctagtcttagttttacgcttagacaaagacgcaggcttaggcgtaggcctaggcttaagcttaggcttaggctcaggcataggcttaggcttaggcttaggcgtaggctttggcttaggtttagaccaacacttaggcctggtcttagatgtaggctttggcttaggcttgggtttaggaataggtttaggcttaggcttaggctttggctttggtttagaccaacacataggccaagtcttaggcctagtcttagtcttacgcttagacttagacgcaggcttaggcatttgttaaggcataggctttgacttaggcctaggcgtaggcttataggtttttaagctgcttcccgatttacctggaattgtggcagatctcgaaattccgtcatggtcgtgaatgacaatcggggcacctttgcatttattcaagtattgaatcaatgaaataatggaaatcgttgtcttctgagtattcagataggtccaggacgacatcaaattatgagttactgtcaattgcacaccgtcgctgaaaatgatctaccaaggtgtttgcgtacttttaaaatgaatgaaaaatcgacaatttttttttgagaaattcttcaaaaaatcaatttatcgatttttttcgggaaattatcgatttttttcgtgaaattatcgatttttttcgagaaatttattgattttttccggatgttatcgacttttcccggaaattatcgacttttccggaaattatcgatttttccggaaattttagatttttccggaaattaacaaatatttccagaaattattggtttttttctcgggaaatttattgattttttccggaaattattgatttttccggaaattagcgattttttccggaaattatcgatttttttcgggaaattatcgatttttttcgtgaaattatcgatttttttcgagaaatttattgattttttccggaaattattgatttttccggaaattatcgactttttcggtaaattatcgatttatccggaaattatcgatttttccggaaagtaacaaatatttccagaaattattggtttttttctcgggaaatttattgattttttccggagattatcgacttttcccggaaattatcgactttttcggtaaattatcgatttttccggaaattatcgatttttccggaaagtaacaaatatttccagaaattattggtttttttctcgggaaatttattgattttttccggaaattattgatttttccggaaattagcgattttttccggaaattatcgatttttccggaaattattgtttttttttcgggaaatcgattttttcaaactctctgaaattctcaacttacccaaaagtgatgcacaaagtgcggcgttcaattccatcaactttaaccatattggtacacttgacagtaatccctttaaacgtgagctccgtatccactttcatcgggtaatatttggagcaattctcaaagaacagacccgtctcgcggtttctctccaaaaagtcacacgtcatcacaacctgctccaccttctcctgtcggatcatccaccaaaacttctcgattgttgagttgcgccgcggagtcatttccgtgtacttctctttttccttggctggctttggctccaaaatctcgcactgtggagattgcatcaggatgaatcgcattccatcggggcatgtcacgtagttcgcgtggaggaagttgtcgttgaactgttttttatatcccttgagaatgactcgagttttctcgatgagtggatttgcaactctgaaaaaaaatcttagctaaaaaacgacatatcacaaaaaccacacgaatttccacaaatttgttagccgtaaaagatagcccttaaaatttcctatattttgttagttgtaatctttttgatatctcttctcctcgcggagatacgggcgtttaaagttttcagagttttcaacgcgaaagagtgtgggaggaggggagacgcagtttgcgcgcgcgccgtctgcgtctctccccctcccacactctttcgcgctgaaaactctgaaaactttgaacgcccgtatctcagcggtgagaagcggtgtcaaaaaattttcaactgacgaaatatagagaattttaagggctatatttctgtctggcaattcacctcagatccatctcgtgcttcttcacaagatccgaaacctctggcgactgcatattagcgactttgttctcatacgacgttttgaaaaatttcataaaatcgaaagtgctttcgtttcgcctgaaatcggagtatctacgatcccgatcacaaatgtattttacagcatccggcaatattgcaattatagtctttgttggtgcgggatctaaaactaaatctaaaattgaaaggctatctggctatctgttgcagttgtctgacttagagatttaccagatttaacttgcttcttgctccaccatcttagaccaaagaatatgcccagaccagcaatagccagaaggatgataacaccaatagcaatgtatggccacagggagattctgaaaatttgaaaaaaaattagacaatatttgagaaaagactactaaaactcacgattccggggcattttgacttgagggtttggcggctccttgtcgtggcgctgctcctcctggagaaggtgctggaggctttggaggtggaggcttagccaggattttcccatattcagtgaatgaatccaccagtgcttgcagagacttggcagaagcatcgaaagcagcggagtatatggtaggatcatagatttggaggggtcgaagaagtgctaggagcttgtcgagttgggctccggttaatccagttgctgctctttttcttcttgatggtagacgactcttcaaagtttccacggaactgatgatggcagacaagtttgttttaagaccgttgacacttttagcagcttgaaagattccagaatagtccgacaacttggtggaattgactggcttcacagaattaataaaggttccaacttctcccttgatcctcttccactcattctccaatccagccagtgcttccaacttcttgacatctgcaggattcatcttcttcatcaccttaattgcagcactcagatccttcagaggtttccaatcaactttctggctagccatctcctccatactcgtaattccacgtgtcaccatcccgataacctgtgaatccttagcaatgttggtaaaaactgacaaagcttcagtttctttgtccttcgagctcttgattccattgatgtaggcagtgagatttcctagcttctccttgatagacggcaaactagatataagaattggcagcccaactttgtttggagtcttccctctatagtctttgatgaagttaatcactggctcgatttttttgattttattcaaaaattccaaatcctttttgaattttttgaacttctcaacgaatgctttaagatgtttaaaattgtttacgacggttgtcacatccttcaatatagttcctttgctcagagtcgtcattgagcctttctctttgaagatcagcttataggtttcattgattttttgaacactttcaagaaacttagcatccgttacgttgactatctgcgacatattgtccaatgtatgttggttcatagaatcatgtaaagctttcgaaagtccaactaatttgtctgccgccagaagctttaatgacaactcctccgtgcttttagtaaatttatccaaattgtcgaaagttggaacgttaccagaagggacgggtaacttgatatcagtcactgctccgacgaatggtttgacggtatcagcaaaatccacaaacttcataatttttggatgaatttctgacaattctttaagaattgtagcctcgcctgattgaactgactgatcaatgcccgctgccttggtcaccaatattttcacttggttcagagcctttcccaagttggaagcttgtccagcaactgtttgattcacccaagcagttcccaaatcagtgaagaccattgaaatatctgaaattccctttgggaatcccgcgaggtatttggaatcaatgataggaagttgacgagcttcgaagaaatgatgaagagtttcgataacatgttgattggttttcaaatcttctgctaaagaactcaaactatcaatattcttatgaacagtttctagattagctttttcaactttttcgttcttaaactctttgagaaaaccacgagccttggtcatcatcggagaatcattatacttgtctctgagaagtttgaaattggataacgacttgaatggcgttggatcaaatcttttgcacagggcgattgctgatataacccgttgaagattgtctagatctgatgttgtattgaaatcgttcatttctgacaggaaataattcaaatcttttttgaaacctgtctccagcttggcccatggaacgttcctccccttcaaatccttcagctctttcatatacgggtcgtccttaggaacgatagcagatggatcaatatttgacagctcctcctgttttgatacaaactcgatcagctgtttctcaacttgaccaactttcccatctaatttgagcccattaatcccctcaacaatcttagataacttatcagtattgattgcagatatctgagtgggagtgatagttccaaaatgaagtaattcaggaataagatcatccgatttgatagatccattggataatccatgttgtagatatattccatttgtaactcgagatatcatttgcatttgaataagtgaggatttgaactcttctgaaatatattcagtttcattgatattatgagagtaaaactcactattagtagctcgtggattgcggcgagagaagtattcgttatcctttccaatatcatctgctccaagatccggaagaagttgagcaccgtgtacattattccaaagtatcaacgatactattggaattaaatctgcaaatatgaacaattaagatttcaaattaaccgagtttttgtcttaagaaccacatgtccgcaaacaaaaatcagaattttaattaaaactctcccatatgaaactctcccaataactgaaaagcgctaacaagttaattaagaactcactcattttcactaaagaaattccttttaaatttagcaagcttctgatgattttgaactttcaaaagtgaggaaaagtcgtggaatgattcaaaaattgatcagaaattggttgtttatgtggctacgtggagttgattgaatgagttcacgtgaatttttaatacttgagattctacttttattttgaaatccacgtaaaattatttgtaaattgaaattttctgaatttttactgcgatatattccgtataacatacaaaacagctaggattcatccaaaaaaaaaatcttagaacagaaagtttccggccgaaaatgtatagcttatcatttgcatttgaataagtgaggatttgaactcttctgaaatatattcagtttcattgatattatgagaactcagagtaaaactcactatcggtagctcgtggaatgcgatggaacaagtattcgttattctttccaatatcatctgtgccaagatcaggaagtagctgagctccatgtacagtattccaaagtatcaacgatacaattggaattatttctgaaaagcaataataggcttttaccaaaaacttgaattttcgaactgaaatgcgcaaacgtttgtttgcaaaactcactcattttgactgcagcaattcaaaaacgaaacttttgatgattttgaagctaagaatacaagaaaagtcgtggaatgattggaaattgcttttttttgactatgacacgcgtcaaagtcactatgaaagaggaaaaaaggcctcacgtgaatattcggaattttattgaaaaattttatttctcaatttcaaccgacatttttttgatacaaatttctcactgacaagaaacttttcagatgtcggctaaaagttttgtcggaaattttgtaacagaactcaattaagcctaactcttatacagcttttctagatgtcaaaaataaatagtcggaaatttgaagtttggagcagaattttcagcgctaccatggagagcttctagatagttgacttactcatttttgaaccagttgtaccgatatttcgaatccgctgttaacttgaatactttgaacgaaattaatctaaaaaaatgcgggaatttttgtcccaaaaaatgtgacgtcaccccaatcagttgagaagcatgtgtcacctctcccgcatttttcgaagatctacgtagatcaaaccaacatgggacactctgacatcacatgcatttttgggagttcaacagtagtttcaaacgcgtaaagataatttctacatctagatttcaaaattaaaaaaaaaattcaaaaaacaagccagatgccacgaaaaacgtaaaacgttaaaacaaaatccaagtatttctttcatttcattcaaaactctatgagaactattcattcaccaatgtggcttcttctgcccataagccggttccagagctggtccatcaaccttagccattccacgttgttcaagccgatcctttggctttgtctcagctggcgttggctttggctcaggtgcaattggcgttggctttggctcaggtgcaacttcaaatccataatctttgagttgtttgatcttcttgtatgttctcttctctccagtttttgcctgttgtttttgcggccaagaaaaccatttttgagcttccgggcaacttgtgtagaatctcatgagctcttgttgtgccagaatacactgttctcttgtcagttctcccttattctgttgagcatcgacaaactgaaatgtaaatgttaagcaactcaagctcagagcaatttttctcaccaatccaagcaatttcacaattccagcatcaacaaaagcgagttccagagccgaagtgatcgccatagcacgttgcgagcgaatgtaggataccacagcttcaagttttacagagccaagagattggataactagctggtagccaattatcatcgctgaaataagattactaatcactttgtctacagaatcactaatccaaaggggcctaagtctaagcctaagcctaagcctaagcctatgcctaggcttaagcccagccaacaattagtgaacttacatgcaaaggccgcagatctagagattccatcaatgcaatgaaccataacaggcgtcgtagagttcttgatcttttgaatcaacgaggtgaacaatagagtgtcaggttgaacattcaacggattccatccaacaagacgggaatgagtaacagtgtgtggttcgtggccactgaaatgtttgctatttagatatggaattctttataagaataactcactcaaacttgacttccagctcccgtgtttcgaaatccttttccgcaatcttgctcttgcactcgacagtcaggttcttgaacttcatggattctccaacagactccggatagtagcgcgcacaactgttcgtttttcccggacacttctcatcgaaatcgcacatcattacgagctgggtgctcttctcttgcttcgcagtccaccaatacgattcaattgtcgattcacatgattctccgttagcttcttgtggagcctgagacaaaatgagctgaagaccgtgcgaacatgtgacacggttcgcgtggatatagtcatcattgaacaacgttccatagtccttcaaaacaacacgtgtgtccattacaagtggaatgggcaatctataattatttcaagattaggctcaacttattcacttggcctcttacctctgcttcatctgctcgcttttcaaggcttcacgccctggcacttcgtacttctcgttcatcgcatcaaacttaactccgtagaactttttaatcagctcttcgctaaggaacgggatacatgtttccttatgcatatcttgaagggcttcataacgacaatcaacgtatttctccgcagaggacatgtcaagctcaaggatcagttttgggacgtctgaaatgttcattttgtggtaattaggcattttatgggggcgcgaccgtactcctacagtactcctacagtaatcctacagtagtcctatagttattctaccgtatttaccgtattcttacagtatctctacggtatccctacagtactccaacaattattctacataactcttttactacaatactactagtaactccacagtactcctacaggattcctagttactaatacagtatccttacagtatccctacagtatccctacagtatccctacaggatcccgacagttttcctacagtactccaacaattgttctaaatcattcttttactacagtacctctagtacccctacagtactcctacagttttcctatagtatccctacagtatcctttcagtgtttctacagtatccttacagtatacctacagtacacctacagtttcactacagtactcttacctttgatactctcatcttgtgtcttctcaagttcgcgctctggcttgttgtccatcttcgacacatccttcttcttcacaggcttcttaacctcttccatcggaagttctcgtatggcaaagcatttccgtgcggcgggatccttttgatgcaggtaaaaccacgaggaagcgggaatgaggatcacacaaatgaacacgatgcatccaaacacgatcagtacaattgtcgagttgctgaaataattctggaagttcaaaaatctgatggtttacaagctcacctttcaaaaacaccctgagatccaccagaagccgacgaacttccacctccactcttctgagctgccgccgccgccttctgcttggtcaaagtgttgttgtacttggcaaaagagacaccaagatcttgcaacgactgagttgaaccatcaaacgatttgtgaaacttggtgaagtccagactgatactactaagcgactgaagtgagagaagatatccatctagttgtgtactggatctcgttgctctgctagatcttattggcaccaagttgttaagcttctccattgaactgatgatggctggaagtttcaagttgattcctttgactttcttcgcatccaggaagaaagtggaatagtcgggaaggctagttgaagttactggtttgacactcttcttgtaccctacaatctctcctgaagccgtcttcaattgtccttcaattccagccaaagccttcagattagcgacattttcatcattcaactgatccttgaccttctccacctcagacttcacaagatcaccaatatctgccagatccttgaaatcaaccaacttctgcatgtttgagattccacgtgtagccgttccaatcactcgggaatgcaatccgatcttctcaaagtccttcaacgcgtccgtctcggcatgcttcgttttcttgacgctgttgatgtacgaagtcagagaggatagctgtgttttgatcattggcagattattcagcacagttgtcaatccaaattgatcatttgacaaacgcagctgtcggattgtagttataactggaataatcaacgatgactcttcgatctgacggattgaattgagagcagtgaagaagtctgccatatcctgggcaaacttttcaactttgtctaaacttgagatgatatttgcagctgtttcatggatcggattatctttcaacagttccaacgtatccttaaccggcaagagcaatgtgtaaatctctttgacatctgtcgaggacttgaacattttcaaagtgttttccaattggtttttaccgtcctgattcactatttcaattatattgcccaactttttcgcgttctctggtaatttcagctgctccgagaaattcatcaacttctccaatgctttcaattgagccggtagttgagccattaatggtatcgctttatcgactttgtccttatcactggttggaagcttgacagacggagttcccaaaatttcatgaattttagacggcaacgtagctattttatcagcaagaccagaatattttggaatctttgaacggatcttcgagacctcttccaacatcacagcttcagaaacaaatgattgatgaactttccgtgtgctagcctcgaacgtcttcagctgattgagagcattagctagatttccagaatgatcacgaactgcatccttgatccatttgtcctccaagtccttgaacaaatgaagaatatcggaatgaccattcaagaatccagaaacgtgtttgagagcgaccgaagatactcgaagatggcgggacttcagtaattcgtacaaagtgccaatgctaggagaatcttctgtgagagatttgatggatttttcgaagctattcagcatatcaatgatcttgtcgccattcgaagcttttgatggaagttcactcaaagcaatggaagaagtgtaaactttttggagagaagagtacaccacctcggagttttttacagtttccttttgcgaatagttattgtacttaacaagagacaacgtttgcgtatacgtcacagaagctttcaatttaataagatggagtctcatttcatcgttcatgcttagtctagaagagagttctaagaagttgctcaattcatcaatgagagtattgatgctaccccaatcaacggccaatcctttcaaagtgttcaactcatccttgtaggcatcatctttcggtacagtgaagttatctgcgacgctttccatgttttcaaaactgaaccatagaccaaaagccgatcctcaatagccttaacctccgacgtctccttcagtatccccgtgattccattgattccatcaacaatccccttcaacttatcttcagacatcgttgcaatttgatcaggagtaatggatccaaaattgagtagctcgggtatcagttcctctgatttgatagttccattggatagtccatattgtaaatggattccattgattatacgggagagcatttgcatacgattgagtgttgtagcaaattcggctaaaataatagatgggattattatgagtaagctttgttcaaggctgttaggctacttctaggctttgccactcttgcgcatcatctaccaaagcttgaagctcaaatctaagacgctcaagataatataggccaagatcagatttatttttgtacaattgcagtttttgcaaaattttaggctagaaaactggggtttctgctcctttttctagctagaatctagtacaaaactagttgaaacagctaggaaattcaaatatctaggcatcaaatagtgcaacgtggagctgtagtcgcgctgtggtcgcgttgcggtcgcattgcggtcgcgttgcggtcgcgttgcggtcgcgttgcagtcgcgttgcggtcgcattgcggtcgcgttgcggtcaaattgtggtcgcgttgcagtcgccttgcggtcgcgttgcgatcacactgcggtcgcgttgcggccagcttgtcaaaaactacattttcgcaaaagaatttcataatatgaatgcaaaaattattgttattggaattttcttgatatctctccacagagcgcagacctcagaggtgctcagagggcaagagagtacggagacgcaggcggcgagagtgtctagcgttctgcgtctcctattaacttgaagtgccatatctcagcagcggcaagacatttcaaaacgattttgctccatttcaaaaaattccaactcacaatcagtggagcgccgatagtggccgtccgtagcattccgaaaatgtccattagttgggaggagtccagaactcagagcgagcaaaatttcgttcaaaaatatgaaccaaaacgagaggaacattttctgaaactgcgaaattcaatagaccgaacgcaaaaaaaacaactcacagttttgaaccttctacgctttgatttttgaaaatagtcaattttcaatcggaaaattctcgaactgattcgaaaactaatcgatttttgagttttttattcgcagccacgtggcatcagataagaaatctggaccacgtagaaatttagtaatattttgcttttttttaattaaaaaaaaaaaaaaaaaaaaaaaaaaagtaaaaaaactaaaaaattctgaaaaaaaaaaattaaaaaagtaaaaaaactaaaaaattctgaaaacgtaagtttcaaaaaacaaagttgtttacaaattgacctttcaacgtggagatattagatttttcataagatattgattagtttttcaatcagttctcggttctctcgtttaaatttgttggaagtttacagtgcacagatttacaatgcttcaaggtaacaaacacttaattttcaggcattacagaacttattattaaagcagcagttacaaaatagcactgtttcatattcaataaatttttatgattctcccaatgtgttttaaaatttggtttggttttgttctattttgagacatttcatcaaaagggtcttgggattcaattcgacttctcaattagcagttggttgtacgaaaatgagtgagtttttcttttttcttgcggcaaataatcatagcaattttgcagagtcgttatcgatattaacaatcatttggctaaacatttgccattgtgctggttcaacacctcttgtgaatccttctggacttcaaggtgagtaattcacggtcaatggatctttagataaaatttgttcatttcagagccccatcatgactttaactatagaggaatcggacttaacttggcccgtcgtaccactaaaggtttgcaaaaacttttcagctttatgtgtgatagcgcctagaaattagaatgcgggtactttcttattttgcaaacatatcagatttcagggcccgagaagcttgcttttttgagtagacaactcttacgtttagacccatagcatctctaggcttcgaactatgtaggacatggtcaagtgtcttgagcagtctccgctaggtctgccacctttcattatagccaacatgccaatgacttttactggcttactagtgagcttactgacaagcccgccaatttattcagtcaatgctccaacaccaacacagttaaaaacttccagatgaactctccaccttcatcggccaattccgttccatggctcgtcttctgacaggaatctctcttcaacaaggacttgccgccggttcgattcctccggatgagctcatctccgagttcctcaacattggaacacttaccactacacaagtcgctagaattgatcctgttaagttgacggaaatggttcaaaaagtcaatacgttgtcggagcctgtctcgaatgacaatcttaaaactatcgaaaaccactatttggcgatgagttcgattgcggacaaagttaagggatttaaaggagcatatgtggttcctgatggcgatccgtacacaaacttacttgacaagtttgtgagccaatacgtcacattggatatcgaatctcttgcggaaaatcttaaagatttcatatcttcaattgagatgcttaaaacagacatcacaaaaacaacgactaaaacaatgttctacaaaatacaatcggcaataacaacaatcagtgatattaaggttgcaatgtttgatcaattttctggagattccgctctcaatgtaatcaaaacatcgttgcccttcctatcctcggtttattcggcgtattcggaacatgagaaaattggcaagaaaaccatctccgacagcaacttggcagagttctccaaaagtatgagcagctccagtaatgcatcggaagagctgaacaagcatgcaaccgatctgaaatatttgaaccaaatgtttgtgtatcatcatcagaagcatggtaacaaggtgcccaagtacattccgggattgatcgatggccacactgatattactgtgatcttcgctgaaaactcatggttgaatgatgcagttgatggtcaattgaagaatattgttggctcattgactcttcttgttgaattggagagctatgttcgtcctgtgagatcttgggatctttgggagtagcgacagaccaagccgccaaggaaataatgagaattggatcacttgcaacaaaactgtcacagctttctgccatcattagtcctctagccggaaaggttcaagatataaagattggttcactacctgctgagtcggacaaaaatttgacattgttcaaagcactgattacggatatggagacactgacttcgaagtttgttgcgctgaatgagatggtgaaaactatcaacgacttgaagaaaaaggacaattcggatgctctccaaagaatgtctacaattgttgatggcgtgaacaatacaaattatgatggaaagttacaagagtacaaggcctccaaagattttcccgtgatcaacaatcttctactcaatgtgaacagctccatatcatttctcaatagtcaaccaaccatgaagaaaaccgctgaatcaattgcagatgcattgaagaatccggatgtactagctattgccaatcagatctttgaagtgatcaactcgttgaatacaattccagagatcaagccagtgatttcagcaatcaaagcattccctgaagctacatcggttccacttgtaattacctcagttgccaaaatcttaccggacatcaaaaaggatatgaaaaacttgcaaacatttgtcagtaagaagaacagtaataaaaccaaggagagtagtgtggacatcttgaaagaactgaagaacgccacagtgcaattgtcggtgattggttctgtggcacgtggaattttcagaatggaacaagcgttgggcctgacgaatgatgtgagcaatatgaaatcttttgaagcagttgtgaaggatgagatgtcaaaggttaagcttgacggaacggataaaaaaaatatgaaagtgttgattgggctgggagatgagttggaaaagctgttgagtgacttgaatttgtttgtaaaaagtgtgaagccatccaactcgacaaacctggcggattttgctggaatttttgaagccgctgcaaaagtgaaaggtgttccacataattttatggcaatcaaggcttcaggtgattattactttagatttcatcattttataatttaataaaacaattttcagtgttaaagctgatggaagctgcaaactccaactcccttgccggtttgctgccgattctaaataacttggagagtattggattgaacttttcctcaagttcattctccaaatcgaaacaatcacttaaagtgctagacacctcgtttgccagtctcaacaatacaattaacaatagtcggcttgcatcaaaaaccaatgcacaagaagagcctggggctttggcaaagtaagttcaatgagtagatcaaaaaattaaagcgccggcaatttcagacataccatctacatcgttgccatcggaattccacttctcatcatcattgctgtgtgtgtcggtgtgtggacttggtggcgcagaaggagtcagagaaggagagcagccgaggcttttgctcataggaatgacccgactccagagtccagaagaagccagtcgaaaaatcaactgagaccgggtctgctgttcttgctcctccggaaaagtgaacttttttttttgtatttctgtgtataaaaatttgggttttgaggtcagcatattgatattactaactatctgtgaaaacagtattttcctgaatttatagtacttcaactaaagagatcgttaaattctggacaactttgctattagaaactttttgataactctaaccgctgcggagctataaggggcctgaagtctgcgggcgagagggtatacacgcagacggcgggagtgctctcgctgtctgcgtctcttctcaacttgaagaccttgtatctatgcgctggttagaggtattaaaaatttctaactgcaaaaatattcagatccaaataattttcagaatgaaatgaaaagaaacatatattttatttatggttttccgtatcaagtaataaccctagaagcccaactgccactcgtacttcctcgtggcatcgatttacactcaagaaactcgcgaatcgagtttcgatagggagttataaaataaatctgaaccattggatcaagaaggcaaggcaacgcgcctagaaccgtgcccaagtactgtttgttggggaattcttgtcctgaaatataataattccttataagttttatcatcaaatgagccatgagtcgctctgtcccattgcggtttgatctacaaacaatgcgggaatttttctctcttctccttttttatttctcgaagatcaaaccaaaatgtggcactttgacgccatgagccacctaccagtatactttttgaatagtaccatcaagaactgcggcacataactgatcataggaaggagaatttgaaaattcagacccttcatcaaagtctgtatcatcgcacgtgcagcaggtgacgtctgcggtgacatatgaaccttcaacattttcatcgcctgatgcttccagtaatttccaattattggtgaataaaacgttgcaattgccatcatcaaagctcttcccaaataaattgattggaaggcgtcaaatcccccaaagtctaagtaaggggtgtagtcgtattccgggtggaggtgtaaggtttcgttgtgtatctcctcatggcttgaaggggtgaatatcaataggatctggagaatttttttttggaaaacccagttttcgcgccaagtttaccaaattttaagtcaaaaattcaaaatctctgcgccacgtgcactctgtgcccttgccacgttgcgtgcgcgcatggcgcagtaggtaagagggatgccttgcgctctgaaataagagaaattagccaagttcgaggccctgatagtgaatttaggttttcgacaccggggatcttgaatttttcacttaaaaattcgtaaaatcaagccataagttcaatttttcagccgaaacatttccaataatgtcactctgatttttcgcccacaatgtgacgtttgaaattaaggccctggaaaagcgaaaaaagtacatgtgaacctaggggaaatatataatgcaccgaatacaacaacgtccaccatctagctttttttggatccaagtacttgagacagatggtacggtagtacatggtatgcaggttaatcacacaagctgtcattccgaaagtctgaaaagaaagtagttttagctcgaaatttagtataactttcagctctttaaaacattttttttttccggaactacagtaaccctacagtactcctacagtatcttatactatctcttaccagcttcccaaccaaaacttaagattcaattgtactgaacctacagtacccctgccatatcagctctcaactaggtaaaaaactaaccgtccacaactggtggcagatcaggcaaacgttcggcccaatgtacttgcaaaacccatcacacagcaacgcctgagaatgctcattatccaatgttctgaagaaatatgttatatttttctatgacgtcacattttttcggggaaaaaattctcgcattttttgtagatcaaaccgtaatgggccagcctgcttacatccaaaactataacccaccttgcctgcatcgcaaacgcagatggaattgagattgtcattgcagcattggcagggtagagtaaaaatctcattggctttaaaattggtgtggtaaagttgtagataagaatgaacatagccaggaacagactcgaacacaacaagaaataaattggccagtaatagtggaagaagtagtagctgggatccatgttactgaaaactggaaaaaattggaaaatgaaattcagaaaagttcttcgcgacattcagatgtagagttatatgccaaagaaatctaaagttcgtcaactattttatagcgagatcaatctagaccgaaatacgtacgagcaccgcaatgaggaaatgacagcttgatatatgacagttggtcgccattttccaaacttaaatgtttcggctaaaaaattgaactgacgacttgactttacgaatttttaagtgaaaaatcaaattctgcggtgtcgaaaaactaaatttcccaacctgggtctcgaacttggctagtttcttctacttcaaagcgccaggcatcccttttacctactgcgccatacagtggcactagcgcagagcgcgcgtggcgcagtgggtaagagggatgcctaacgctctgaaatcagaaaaattagccaagttcgaggccctgatcaggaatgtaggtttgtgatagtggagattttgaatttttttacttaaaatttggctaaattgacacgaaaactggattttcaaaaaaaaaactggttcataaatcacaaaaatgattttccttgtttattttctgtctgtcaaaaatatcacgttcatattaccaagtgccagtactactaattgtcacttgtaaagtttttggcggagaaaatggcgcagacataattagacgcttagcttgatgactatgtaccgttattattattgtaggcgaatttcgcggtaggacccaatcaggaaacatacattccgaaaattgataaagtgttttacaaagtttcccgaatgactaataagtcagtcaaatcaaaagagacagacaaaaacaacactctaatttggtcagagtgacccaattttcgattgataagaactttggccaactgggaggtcagtttttgagtgaaaaactgaacttaaaaagtaaaaaagaaaagaaaaattcatttataaaaatataaattcaaatttctaaaaaaaaattttaatttggaaaaaaatttcgagagaaatttttaaaaaaattttccaaaaaaatctacaaatattaacaatcagagtaaaattacaaaatattcaccacaaaataattattttccccatccccatctgcgtcttccccatccaccgtaacctccatagccaccgtatccaccgtatccaccgccccaacgacgtcgaccccagccaccgtagccaccgtaaccaccaccgtaaccaccgtatcctccatagtatccaccgtagccaccgtatccatagccaccatatccaccgtatccaccataataaccatatcgcttttcacgttttttcctgaagaaaattagttgaaaatttgaagtcccgcctaaaaatatttgactttttgaatttcccgccgaaaaacattcgaattttattttaaatttcccgcaaaaaattattcgaaatttaaatttctcgctaaaaaatatttgaaaatttgaatttcctgccaaaaattttgaatttcccgctaaaaaattttcgagatttattttgagtttcccgccgaaaaaaaatctgaaaattcgaattttcgagtttcccgccaaaaaaacagtagaaaatttgaatttcccgctaaaaaatatttgaaaatttgaattacctgccaaaaattttgaattgcattttgaatttcccgctaaaaaatattcagaaatttcaaattttccgccaaaaatattggtacgtttgaatttcccgctaaaaatttttcgaaatttattttgagtttcccgccgaaaaaaaatcttaaaatttgactttttgaatttcccgccaaaaaagtatttgaaaatatgaatttcccgccaaattttgttttttgaaaatttcaattttccgccaaatttttttttctgaaaatttgaatttcccgctaaaaaatattccaaaattggattttcccgcttaaaaaatatttgaaaatttttgaaaaatttccagaaaaaaaatattttttaattctaattttccaccaataaaaaaaaaatattcggaaatttgagcaaaatttgaaaatttgaattggcgggaaacctaaattaaaaaataattttttggcggaaaattcaaatttcacaccaactcacccattattcttccatattccagcatttgcatgtccaaaattcggatctacagcaacggaatcgtcttttttctccgtgtgtggtccgacagcttcacaaattacaaaaatcgccagaaaaacggcggaaattatgaaaatcgaccgcattttccgatttttgatagctaaaaattcaaattcccgccaatttatacccccgaggaattgggcatttggggaacttgatctatgactttttactattagtttgacaaattccacgtatttttagacagggaagtcttagaaagggcaacgtatttggggaatacctaatggattttttttatattttgtattttcataaagatacatttcaaccagatattttgggccccgccacgaatatgttttttttcccgctcaaaatttattgttcaaaaaaaaaaaatttttcaaaaatttcaaaaattcataacttggctcatttgcaagatttttgcctagtttttgactcaaaatttaggtgataatttgcactatttggtaaatatatgtggattacggtaaccggagattttcgtggtaagagccagagcctaactggctgaaatttgaaaaatttgaaaaaaattcaaaccacaataaaaattgttgcagttctctgcaaaatatgccggaaactgtgcaaaacacaataaaccatggaagcctccacgaggaaataaaaaacgagagtgcatagaaatatgagaggtggcagagaaaacatagatactataaaagcctccgggctcctctcaaccacattcattcgcctttttggtaaccttcggcatggtcgcctctattttttgctggtattttttaaaatattttttttggaatttttccagctggatggtaagttactctaaaatttctggtaccaaaaattatcaaaaatttcgaattttaggccaataatgctggaaaagagacctaaaacttccccgtggagatcctataaaatatgggtaattactttttttttttttcaaaaactgggaatttgcaaaaaatgtgcaaaaaatgtgcaaaaatgtgcaaaaaatgtgcaaaaattgtgcaaaaatgtgcaaaaaatgtgcaaaaaatgtgcaaaaatgtgcaaaaaatgtgcaaaaaatgtgcaaaaatgtgcaaaaaatgtgcaaaaaatgtgcaaaaatgtgcaaaaaatgtgcaaaaattgtgcaaaaatgtgcaaaaaatgtgcaaaaaatgggcaaaaaatgtgcaaaaaatgtgcaaaaaatgtgcaaaaatgtgcaaaaaatgtgcaaaaaaaaaacaagaaatttctaaactttgacagtcaatatctcggctgtattgtatttttataaaaaatgttcaaatgattaaattcttgaaaacatattttgctatagttttgtagttaaaatgttttgaaacctttcgaatgaaacaagatatatgcggacatggtgcctcggaacttcgttttacattaaaaacccaaattaaatatttgaaaaatgaaataataaattttttttcagaagtgacatcgaaaacaacgctccagtactcttcgactgagagaaaaagcttgaaaaatggtggtaagtagttgcatagagcattaaaatttagaaatttattttcagtacgacagtgattttgtacgacaacttcaaatatttgattttctcaaactataaaattcaatttcagaaaaaaacttacaacaagacgccaggagcatcgcagttgaatgatcttcgaaaacccggtgaaacacattttttggttagtaatgctcacttttcaaaataatgcaacttctaaaaaaaaaattcaggagcctggaatcactgccgcagataatttttttcattttttttttaaattttcatttttttttgaataaaccctttgttctgtaatctaaatttttttgaaattatttttttcgaaacttttcgaaacccccgctaattttgtatccgcaagtgaggaatttccaaaaaaacacttttttttaaattttttggaaaattcttaccccagtcagttcagaatcttaggcagacagacatgatgcatcgacaagaaattgctagttttaaagatttttgactgttttttcaactaaaaaaaagagaaaacagtggtggttgtgtggcggtagatccaaattttgaacatgcaaatcctgaaatgtggagaaataatgggtgagttggtgggaaatttgaattttccgccaaaaaactatggtaagttttgaaatttcacaaaaaaatattaatttattctctggaaattttgaatgttgggaaatttccgccttttttctatttgtttttggcggaaaactcgagttttcaaatattttttggcgggaaattcaaatttccaactatttttttggtgggaaatttaaatttttaaatatttttttggtgggaaatttaaatttttaaatatttttttggcgggaaattcaaatttcaaaatttccagcaaaaaacgagagaagcgataaggctactatcgaagttactacagaagaagatactactatcgtagatattataactactacagtaattattattattataacaattactattactaccacggttaatttttgttattttaattttaattttttaaaataaagttgctcaatgttgtcaaaaattttattttcaaaaaaaaatgttttaatttttttttgaaaaatccataactacgccagttttcaagatttttacttgattatgcacttaaaatgtagataaatattacaataaccaaaaaaaaattcagtttaatttctgctcatcaaactacagtaggcaaaggctttcgcggcggatcctgaagttttcaaaatcgtcgtagtccaatcatgcttggcgttgttggataggtctcggtgtgctggaaatgaattttaaaataaaaaccaacaaatttcaaatttgcaattttaaattaaatttttcagatggaaaactagattttgaagttggggcggggggtcaaaaagtcaaaacaacgaaaagtagtggagacgcaggtagttagacacaacttgttacacttttattgtgttagtttgaatcaaaaaatcactaaatttcaagttttctgaaataattatttcttattttttgaaaaaaaatctgaaaattttgattttttcaggccaaaattttgagcaatgaagcttcaaattttctactcaattttattgatttttgtggaatttttggtggatccgagttcaaggtgagcgttcaaacttatttattgatttttttcaaaattcaaaaaataaaaaaattaatttttttttcgaattttcaaaaaaaaattaaaattttttctccaaaaaaatttcgttctcactcaatttttctcaactttttcgaattaacagtcaaaaaaaccaaattttcagcttattttcctctacaaatcgaaaatttgaccctaatcgcccgacaatgtcaaatcagggccatcggatggggtggccagtacagcagagaaaagccaatgaggaagtggtgaatagccagagaaacaccgagtttttgataattcattgagaaaaatcaataatttttgagatattaataaaggttttcacaattccaagttaaaaatcgaagtttgaccactattttcgagtttcttcttgattttctccatttttaagaaaaaaattcgcaatttacatagtggaaaacctaaattcaaccttggggcctcgaacttacctcatttttttcttttcgatccatggccaaggctgttaccggctgcgccacgcgcgcgctggccccgcactctagttttctctgcccgcgtggcgcagtgggtaacagagatgccttcggatctgaaatgagaaaaaggggggcaagttcgagcccccaagtgggtttttaggttttctaatatggggattccgatttttcagtttaaaaataacgaaaaccaagttgaaaactacttttctcacagttttccttttttttccggtttttttggatattcaagcacgtaatgttcccattcaggtgaactacgtcttaaatctaataatcaacttcctgacgtccgagttccgggtacttatgctgctattaatgcacacgcggaaaggggttcaaattgccggaaccaccggattatccttgtgtttttttttcgtttgttattgaatacattttttgcttattttttatctaaaaataaaattcttaaaaatcttgaaataaaaaaaaaatccaaaaaatttttgacatttttttttcaaaattttcaaaaaaaaaaaaaaaccagcccattttaaatatatattttaagtactcaaaattattcgaaactgatctactaacttaaaacttccaaaaaaaatcaactccgaaagtatcaaaaatcgcgaaaatttttgctcgcggagcccgtggagcaataaaactcaaaaaacattcaaaatcatcgcggcaatgtttttattaatctataactcttccatttctcccccgttcttctcaatttcgcccattttttccccgtttttatgttccagtgagtgagcttccatgatgttcccatgggacctcccttgattctatagatttctctttatctttttgcatctttttctcctatttttcacatttttcaggcattttttcaaaatgaacgttgaaaggtttttagtttaaattgaaaaaattaaaaaaaaaattttgaatttttttggaatttttgggtctcagcaagaaaattttttgattactgtagttattggaaattaattttttaagtcaaaaattggtacttttcacttgccctcttcaccagaaaagctctagaaaaagctcggcttcagtttttttcccaaaaatcttttttttcttccaaatttcgtataaattcataacccgtcacttttgactttcctcattcgtttcacaaaacgtcaattcattttagtgtagacggggccggcgggtgtccccaaaaaaaggtaatgcatttttgattttctttgggggccctgagataacacacttttttattattagagaaaaaaacacttttttattaatttattttttcttgaaaatctagttttcatgttgatttcaccaaattttaagtcaaaaatttgaaatcaccactatcgaaaacctaaatccctattcaggacctcgaacttggctacattttttcagttcagagcgccaggcatccctcttaccgactgcgccatgcgcgctctgcgccagtgccaagttgcgggcgcgcgctgccgacatggcgcagtgggtaagagggatgcctggcgctctgaaataagagaaatgcgccaagttcgaacctctgatagtggatttaggctttcgaccccggggaattcgaatttttcacttaaaaattcgtaaattctaggcggaagtttaaattttcggtcgaaatgtttcaattcgtcatcattaatgtcattctgattttccgtctgtctggatgtttgatgatgacacagtttttatggctctttaagatttatgggccgtttatctctttcttttggcaattttctcaagttgccatcgaaaaatgtttatttggggtttatgttggctttttaaagtttttcctaaaaattttgaaatccttatcattttcggacccactaagacaattttcaagcaatttctgatccattcggtgtttgcgtacttttgacactacagtacccgcccgcgaaaatttaaaatgttcgaattttcgagttggagatccagaaaaataggctttaagctatttttttgtggtgaatccatattttttaatttaaaatttcaaaaatgtttctgaaattttattttcagatccttttcgtttttgaccggcgcccttgtcttccatagattgaatcatcgccccgtgcttaatttttttattcgatcatgaaaatttttaattcaaaacgtgctgacacatacacacaaacagaaacagaaattaatgctcacggagcacgcgaagagaggggccggatggctgagcaatttgtgcaatttccgtcttttgagccctcgcacaatggtcagataaggatgaccagggagaatgagcggaggaatagaaaatggggaagaaatctatttggaaaaaaatttcaattggaatttgggaaactttgttttcgaaaaaaaattttggaaaaaaaaaattttttttgagtccatatttttgccccggttactgtacttaatagaacgaaatttaataaaaattatttttcaaacattattcaaatatttatctacatcttaaacaaaaaactagctaaaaatctccaaaattgaaaatgttatggattttcgaaaattgtcaaattttccaacaaaaattttttttctcaaaatttgatttttagtgccaattttttaggaccctataatttttgtctcgaaaagccaattctccaaaaaatctcacatcacccctagaatgttgttcgtcatcctgcaaaccctacaatttccttttgttttctggtgaaaattataggcttctgggtagataatttggtaatttacttggtaaggaaattacttataaatgacgttttttaaataattttgatatcattatttcctataaaagtgcaaatttttgaatatttgaatttttttgaattcgcgaaaaatattgaaaatggacaaagttacggattttcaaaatttttcgaaaatcgttactaatttcagttttttgtttctactgtaaatttctcaattttgttcccagctcaaaaattttaacattttcaaatttagcactttaagggctttcaaatgacccccatcataactagactccgcccattttgaaatccgcgcatcccatgcgcctttaaacaatgtatcttcgtggtgagaccctaaaactttacaatgaacggaatataggcatgatcatacgtttttaaaagctctcaatgagataaattcaacaatttacattgcaaagtgattggtggcctaactagtgatttctaggccaccgaacagggggggggggggggctttctagtctttctagaaagctagaggaaaactcgattttggggtttgagggggttgtgaaactgaaaaaatagataattggaagtaaaaacttcaaaaatttagaaaaaatcacaaaaattggattcgaaattttttttcaaaattatttaaaaaaaaatttaattcgaaaattttctgaaaaaaaattttttttctcaaattttttctaattgatttcttgcacattatcgatgatttttcaccgttttaagctttttttgaagctccaaactcgtcatttttggtgtctccagtgctgtgaagcttcacttggctctcatccaatttgttccaattttccgtccactttttctctctgcgcttcactttttttggcatatatatatattttttttgtaccccaatgtctatttgttatgtcatttgtcatcgcttgtaggctccgcccctttctctctctctctgactcactttttgtttaaccgaatgtatgttttttgtttgaagacgtcagtcttctggaagagaataagagattttttcgtctatatatattctattcaaaagtgtctctggcttcttttctgaaaatttattggctttaggagaaaaaagatttttgaaaaaattttttttttttggattttttaaaaaaattttctctattctctcaaaaactgaactttgccggttatttatgatgctcttcagactatttttatcctttttggttctctatggctccgtacacatgtaatattttgaaaatttatgaaatttttgggtctcggcacgaaaacttccaggttactgtagtttgttttgataaagttgattttctaaccatttttagatgagaaacatattcttaccagattataagtctaagagcatccaaaaatttcaaaaattgataaagttacagatttttgggaaattcccacatttttcaataggcttggggtaccgccacgaaaactaccggtctactgtagttttcattaaggaaaatatcaagtgacggttttacctaacgagaccaatatttttactaaattttaagccaaaaaccaacaaaaaatctcaataattggaaaagttacggattttttaaaaattccaaaaaaaaaatttcgtaatcttgccacgaaaactacccggttactgtagttttcattgagccaaatagtacgtaattgttttttctaacaagacaatagttttcagtaaattttacgccaaaaccttgcaaaaaatctcaaaaattgacgaagttacgaatttttgaaaattaaaaataaaaaatttcgaaatttttttttacaaatttttttgaagatttttgatcattttatgtttttttttgcaaaatcctgaattcaagtactataattgcagttctacggtagatttgctcaatttcagtttttgagccaaaaaatttccgggatctgtcttttaaatttacttgctcctttgacaggcttttggggcctcaaaaaccagacattttcactttagtagaatatttaaatccacaaatcatgtgaaaattccaaaaaaattattccagtaaatacttaaacaccgtctatctttccgccagttgagtttttcccagaatttttcttttgagaattgcacagaatggttaatgaaccctcttttatgaagaaaatgaactgaaatagaaaacgtctgaaaatatgggaaattctataaaattttatctaaaacagtttttattttttttttcataaaaatttaaaatttcaacgaattttcaaaaaaaaaattgaaaaaattttagattttttttttgtaaattttctcgatttttcaaagtgtcaacaatatgaaaagtgattcctataaatgctcattgagcacaaaaaaaggtgttccgctcactcaagaaaattgagaacaactcgggacaccggagaccgtgagggagggggtcctcgagcaaaatgagaaggcttagggtacgttgttgttgggtggaaatgttgaaaaagaatcagaaatcatgtatttttgaaatctagcaggttttttgagcaagttttctagatttttattcaaattttgcgtcaaaatacgtgtaaaattctcaattttctgagaaaaataaaaccaacccagcgatccataattagaacagcaccacaagagatttcgtggcgggacccttcatttttgaaaatcatatttttttgaataattttcgaaaattcgtaactttgtccatttttaatatttgtgtttagtttctatgttaaaatacgcgatggtttatcaattttcttagagaaataacatttatcgggtgagtagaaaagcctacagtaccccaagagttttcgtggcggaaccctgaaattggattttttcaaaaaccatagcatgatgggtgttatttgaaagctcacagtgagctgaatttggttatttaaaatcccacagtttagtcaaaattcaggaaaaatagaatcaaaattaaatttttgtattaaaaaatttcgaatttttcgaaaatccgtaactttgtcgattttcaagattttcttataacttttgttctaaagtatgacttagtttctcaatcttttgaaaaaaataaaatttatcaagtgagtacaaaaattacagtaccccaagagttttcgctgcggaacaaaaaaccttcattattgaattccttttttttttttaaattttcgataattcgtaactttttccatttttaagattttctaatgctttttatgctaaaatacacctcaatttttcaattttttaaaacctacagtaccccaagagttttcgcggcgagacccaaaaacttgattttttcaaaaaaccatgtcatgatgggtgttatttgaaagctctcagtaagatcaatttttattttatgaaatgcataaattttgtcgaaatacagaaaaaaatgtgataaaaacaaacattttgaattaaaaaattttcgaatttttcgaaaatccgtaactttgtcaattttctagatttttattcaaattttgcgtcataatacgtgcaagtttttcaatcctctaaaaaaaataaaatcatctcaaggaaccttgaaactacagtaccccaaacgttttcgtggcgggaccctacatttttgttaatctttttaaatccaattttcaaaaattcgtaactttgttctttttcaagattttctcatacttttttttgttaaaatacacctcaatttctcaattttctaagaaaaaaaagaaaaataaaaatttatctgatgagttcaaaaactacagtacccaagagttttcgcgatgagacccagaaatttgattttttcaaaaaaaaaaaccatgtcatggtgggcgttatttgaaagctctcagtgagctgatttcagattttccacttttacaagatctgaaaaaaaatcaaaaaaatttcccagccaagtatctagtctggtgtcagataacaagtagacctcccccctcctccccccccgcatcttaaagtaaataagtgaacgtcgtcagcttcttcttatgtgctcactgagcatgttttcatttgcttcttcttctccagcaacagctcctaaccccttttcaaataatccgtggactaccccaagtgtctagtaaaaacattttcagcagccgccgaggaggcctatgtaatttgttttgagcagcacagagcgtggggggcgtgtcctggaaaatgtgtagaaaatgaaatttgagacgaaaaccttgaaaattgagctgtgttcggaacgatggggctcctcttgtggaaagttttgaaattttttttgtggcctctagggtcccgccacgaaaactcttgtggtactgtagtttttatagttacctgagttaatttattttgtgcgaaaaattgaaaacttttacgtaatttgacgtaaaagtcttgaaaattgacaaagttatggatttttgaacaatttcgaaattttttaaatccaaaatttttagatttcaaaagatacaaatttagctcactgtgagcttgcaaataacacccatcatgatatggtttttgaataattttttgaaaaattttaatttttgggtctcgccacgaaaactaggggttactgtaggttcaatagtcgttggtttttttttttaatttttcgtagaaatttgttaaaaattcaaattttttcacagagtttggcttaaaattcagaggaaaattgcaaaaattgacaaagttacgggttttcgaaaacttaaatttgggtcgcgtcacgaaaactcgtggggtacagtactagtcttgattctttgggaaggttttattttttttagaaaattgagtagttttcacatattctaacggaaaaattgaataaaaatctagaaaattgaaaaagtcacagattatcgaaagttttcgaaaaaaaattaaaaaatttcaaaatttacttaatacttacagtttcagtctgaaataacctaaaattcaaaatcagatcaataatatctttccttgaaaagccatgcgcctttaaattctgattttcgtggcgagaccctgaaaatttcaagtccacggaacctggtcatgattatacttattttgaagctcttgataaggcaaattcaatgataataatttgaagagtgctggtggcctaaccagctaagtctaggccatcagggggaatttctaatttttaaatttttcaaaataaatttttacaaaaaaattttttttttcattaatttcttttaaattcaaaaacacggatatagtattatattctttttcttttgacacgttctgtgaatgctaaaccaattatttttgagtcccttttctctcgccccagcagggccaatttaccccccccccccccccacccacttccaaccctcaatgtaaatgtttccatttttgcgcgcgcacagacacaaacaactggctcaaaataatgagcatttgctcccgtttttcataaattttcaagaaacctatgggatcctttttttaggccggcctgcgcgcggaacatttgcaattcaatttggttttcgtaacaaaaattgttttccgcccccttctcactttcgttttactgtttgaacggatttaaataaatagctgaagccgtttagggtcttctcgttccggaaatttggttttttggagaaatgttgaaaaaaaaattcaaaaaaaaaaaaaaaaaaaaaaaaaatttttaaactttttttgctccgaccttaatattttcaaatttttactgagcacttatttgtaaaataacaattatatataagtttccacgaattttgttgtattttgagtaaaaattcaacgaaaaaacttgaaaattagcaaagttaagttttcaaaaaaaaaatcccaaaaaaattttttttgaaactttttttgctccgttcctaaaatttcaaattttcaaaatgcatttttatataaatttctacaaattatgttgtaatttgagttaaaattcagcgaaaaaacttgaaaattagcaaagttatagattttcgaaaaaggtttaaaaaaatttttggatatttttcaaaaaaattaaaaagcttttttttgcaccaaaaaaaaaaagtctaaaaaaaaagagtctctaattcctccatcatcaaaaaaattcgaaaaaaaatcctaaattgtcccgtaaatccacacaaagcctatcaggagtcttgtattcttctgtaatatgacctcttcctatttgcacttctcataaataattccaaaaaaaaaaacttaataaacttccctttttccaatttctgatctttgagttattcagctcctcctctccttttttcctctttttttctacgagcatttttcagcgctcccccaaagctccgccccatttcaagaagctctccgtgccccgttttgagttgacgttttggattaaaatgacttctaatcgatggcttctattttttttattgtgagtttttttaatcgcttttttgtctaaaacttcccgcttcgtacttaaaacggtgaggaaaaattcaagaacaaagtgcaaaagactaaccccttaaaatttccccaatggggatcgaaccctggtgctgtgattcacaggcgaacctgttagccactaggctatactgcgtggcgcagtgattaacgcgtttgcctgcggctccgaaggtcatgggttcgaccccacgtgagggtaatttgttttttcttcgtttatttttgcaggaaaacatattttcataggtttcaaaaaccatacaacccataaatatcctaaaaataaacagcccgcggcaattttgcagacttcgaataacactggcgaaccgcgatgtgtttcgtctgcttcaggataaaccgatgcctagaaatggaaatccgaaggctccgctgcaagtgcactttggtttttatgtggagagcttgggaaatttcagagctacggagatggtaagatgatacagaaaacgaaaaaaaacggagtgagctgagagatttttttgaaaaatttgcgcaagcttcgcttcaaaactacttaaatgtttgaaatcttaggaagatttcatccccccctgacacagctgaaactagtgctacagtaactcaggtggtgggaccataaattctgaaaatgaaggaaatataggcaatatgggtttcatttgaaagctcttggcgtgttaaactcaaaatattaaatagcttttcaaaaatattggaattgattttttccggaaatttttgaaattttcgatttttcaaaaattttcgaaaatcaacatttttgagattttccgcttattttttggcccaaattgtagataaatgtctgttctagtcagcaacatacattgtagctcaaacactttcaataaaaattcccctgacacagctgaaacaactgttacagtaacccaggtggtgggaccatacattctgaaaatgaaggaaatataggcaatatgggtgttatttgaaaactaattatgtgctgaaattgaaaatttaaataactgttcagaattatggaaattgaatttttttggaattttggaaaatttcgattttttaaaaaatttttgaaaatcaataagtctgtcagattttgagattttaacaaaattttcgctgttagatattattgactgaaacattttctattagaaaaaaaaatttaaatttttcgcgaaaagttgaaattcaaaaaaaaaattttttcgaaatttgtttaaatttttttgtcaaaaattcaaattcaactatatgtatttgtagtttaacactgtaataactttcaattttcagacctatgacatggacatgtacctctacatgagttggcaggacgattccatgcgtcacaacgaaaccgagcacgttctcgtcaacgataaggatattttggacaaaatctggcttccagacttatattttgcaaatgcgagaaccgcgtattttcataaagtaactgtgcacaacttcaatatgtttatcagtccgcaaggcacaatttcatatggtacccgggttacgctgaatttggcctgtaatttggacttgaaggactatccgctggattatcagacttgttatattaaagtcatcagttgtgagttgcaaattttaagattaaatgactggatttttttttgttgaaaattttgaaaattttttttaattcgaaaaaaaatttttattttttaaatttttttttcgaatttttactttttttttaattaaaaaaaattttataaccaaaaacttcatatttaaaaattctgaagttcaattgaatttttccaaaattttctcaaaatttgagaaaattctttgaacaccaccatcaccacccaccaaaacatcatgcgccagccgaaaaaaaaaaattaaattcactttaaattgaatttatatgtgtggtggcatcatatgtctaatatttgatggtgaaaagtgcactttctggctaaaaaaatggctcggggaactgaaatgtgaaaattttcgagtttttttcgaaatttttcgaaaatcgataattctgccaacttc genometools-1.5.1/testdata/nGASP/protein_10.fas000066400000000000000000000204431211610345200212430ustar00rootroot00000000000000>BP:CBP00004 GSHQIAKNFVNSSTPDLRPTFVVNFDTSTVICQHSSDPTDLHIHNMSSLCDGKQDCFVNPAMHDEVFPYCEHKCESTCSGKGACLYDGSKPQCYCDSGFSGAACELQDKNECLEHPCHMMAQCQNTLGSYECRCLPGYQGNGHECSDIDECADNIATRCPEHSQCINLPGTYYCNCTQGFSPKGNQGSGLDKCADINECETGAHNCETNEICENTIGSFKCVTKCSPGYSLIDGKCEDVNECDSEKLHKCDVRAECINTVGGYECECEEGFDGDGKNCQRGNPMSLSIAKSSCRKNSAICDRHASCNIFLDICDCKTGYTGDGITCHDVNECDAKETPCSEGGRCLNLDGGYVCCKDGQDDAACIKDQRAFCSGGCCDNAICSNATCACIDGFRGDPHKKCVDINECVENDSVCGGVGDRCVNLFGGYKCCQHGSQEVECTDQAFSSDSSTVSSHGADFTTTGEQVIEGSGSIQTSSGGSITVTRGLIPKEVELTTSGRLACTSYCPPNSECVGGFCECVKGYGGNALVGCEDVDECITETCNVEANEWCVNLIGGFVCCNPTNATHDDCIVLSLGSNVPFSDFLTVPGLEITKEKGLHVIGPNEEDTVVATRSNHSVTSDQLITEVVQQSKNFSSGQIILTRKSVTGGEAVTQTTDGDGEFGLEISAKDFGITLPATLEPRVEGSGKSPVAGVWTEEEDGGEDDDLMEASGSHGSWSTTINGTGFTGSPRSEGTIRVRITTLGEDGETETATKPGITVPGKDGKLAIEKEGHESVSSGSSATSSSGSTGSGASGSTATGKSGSSATSSSGSSSSGSTESGSSGSSATSSSGSTSSGESGSTATEESGKSEPSGATGTESSGKSESGASGESGPAGSSTTSSSGSTESGASGSNATSSSGSSATGESGSSSSGSTESGASGSNATGGSGATGNESSESAGTTASPESVTASRESVEGSGTTPSESTSSLPEGSGEWIETGSKGHFERGNKVSVSHGNGKPEGSGPKESGKPEVPGSQGSGAKESGAGKPGSGSRGPEITTDGEESESTSSGSGKPKNPKITTDGEGSKSTPIGDGKHPEDVEGSGILTTSSGGKNSTLEHGTKLVEVKPEGSDKNPGVGLEISAGKVTSAPEDKEKSNEVGLEIVWESTTPEPTTPDTDNVGLEISGRDLITKRPHQIEGSGTGDEEITATTRDVSKSTKKPRLEIDGGDNGETSGVDGKASTPSPTSPGAPESTTPSAPTTAPEDVTPETGSGEPGIPDGSGESSTAAPEGVSPTSSAPAPEVPTTPEGSEESTKTPEEATTATSPEEETTTQEPLILTAAPSKAPESSTKPSEAPEASSESTAAPPTAQPATVIPPQNREEKPEPTKETFALPTTTEKPVNETIENTKCMSSDECGLDALCERRTGVCRCEPGFEGAPPKKACVDVDECATGDHKCHDSARCQNFIGGYACFCPTGFRKTDDGSCEDIDECKEHNSTCCGANAHCVNKPGTYSCECENGFLGDGYHCVPSTKKPCDKEQSTKSHCAESNMSCEVDTTDGSVECKECMSGYKKSGTTCEDINECDEQSPCSPSASCVNLNGTFSCSCKPGFRGDGFMCTDINECDEKHPCHPHAECTNLEGSFKCECHSGFEGDGIKKCTNPLERSCEDVEKFCGRVDHVSCLSVRIYNGSLSSVCECEPGFRFEKESNSCVDIDECEENRNNCDPASAVCVNTEGSFKCECAEGYEGEGGVCTDIDECDRGMAGCDSMAMCINRMGSCGCKCMAGYTGDGAHCTKIEEPKEASKTACTEEWSRLCELEKKQCAVDEEEVPQCGACLPGHHPINGTCQSLQISGLCAQKNDCNKHAECIDILPDSHFCSCPDGFIGDGMMCDDVDECNNAGMCDDENSKCENTIGSFNCVCLEGFKKSDDDKCVLKTPNREKIEINEENSSSTPSESQKPESTTQGTVTTSVLSSEPTSEAPTSSTSPVTSSEKASESTTSSESPVTPSETSVTTTSLCSTVTCHSLATCEPSTGVCICRDGFIGDGTSSCSKKSTADCISLPSLCAENAKCDNSARSCECDAGYIGDGYVCSPHPQDCVLRDNLCSPEAICQNRRCQCLPGFTGDGVKCVSIHERASNCSQCDANAHCVGGTTCKCNPGYFGNGLCCVPDPLDCVHFTGICHPNAVCNPDTRQCQCSSGFSGNGVSCFPQKSCRTDKSVCAKNAICLPTGSCICRHGFKGDPFYKCTSLVAKEPSNAQDLSDVSSCVTPCDASSQLCISGECICKPGFRQNPGSKTCADIDECAEKTHRCNRIATCRNTFGSHVCSCPEGHVGDGVTCVPHVNQGKLSVYCEADGMTLVLGNETSDFEGKIFVKGQAENPYCSKSFSALLNSHKPYVFKVAFQHCDVQLLDNHTMASTVVVQKHAMFLTNKADSYDLRCQYPIGSRAVQSHVNVSELATTSTLTDKNSTLAPICRLSVSNDQHSSISSAMVGDTLKLALEVTPSENFGILPRNCFAVNIESGERYTLTDEQGCAIDESLFPQWSVTNSAK >BP:CBP00012 MAPKDDPDNRGFDDQRRPSQRSTVLAIPALAVNDPKADPKIASDLPANYVDDDDDAPKLYTPSLFEKILNYLLCRGDIANQQLEAQPVSIPGLFRYGKRFDYLLLFIGTICAIISGVSQPIMALVSGRVTNALLVYPPTSKQFRNKANENVYIFLGIGIFISITNWIQYMCFQHCCSRVMAQMRHRFVYSVLRQNAGWFDKNHSGTITTKLNDSMERIREGIGDKLGVLLRGFAMLIAAIVVAYIYEWRLASMMLGVAPVCCICMSLLARQMTSTTIKELIGVGKAGSIAEESLMGVRTVQAFNGQEEMVGRYQTELEKGRRFAVWKGFWSGFFGGLFFLCLFSFLGTGMLYGAYLLKVGIIGSPGDVFIVVMSMLLGAYFLGLISPHMMVLLNARVSAATIYQTIDRVPKIDPYSKAGKRLPNVVGRVKFENVHFRYPSRKEAKILNGLNLTVEPGTSVALVGHSGCGKSTSVGLLTRLYEPEAGNVTIDGTDVRELNIDWLRNVVGIVQQEPILFNDTIHNNLLIGNPGATREKMIEVCKMANAHDFIEKMPKGYDTLIGDGGVQLSGGQKQRVAIARTLIRDPKILLLDEATSALDAQSESVVQSALNNAAKGRTTIMIAHRLSTIREADKIVFFEKGVIVEAGNHEELVHLGGRYFDLVKAQQFKADPEATEEFEEEEIDLDDNSRSSRRSSMTSARSGSEAFQRGNSLNDSFSGSRRSARADAENDAFAAHEAEVMAQDGQITAGYLDIFKNAKGNYIYMFLGTVFALIRGLELPALALIFGWVFEGFTFVPYGGRMMHRMAMAVIAFASVGVGVWISQVASSVLFAIVSENLSLRFRVQSFRNLLYQDASYFDNPAHAPGKLITRLASDAPNIKAVVDARMLQVIYALAAIIANIVIAFIYCWQVAILGTSLILLLAFVMIGLAYKISLMNIEQIKNDEAGRTAIEIIENVKTIQLLTRCELFFDHYQTSSKQQKRSELKKGMIEAINYSITQSFMYFMMCFTYAVGIRVIYDGDKSSDVTFKGIISMMLGAVAVMNSAQYFPEFVKAKTAAGLLFNIIYRKPRTGDLMEGDRPEIRGNILFENVKFSYPQRPLQPIMKGLQWTALRGQTVALVGPSGSGKSTNIGMLERFYDVTGGVLRIDGQDIRNLSLYHLRTQMALVGQEPRLFAGSIRENVCLGLKDVPLEKINKALELANANRFLANLPAGIDTDVGEKGGQLSGGQKQRIAIARALVRDPKILLLDEATSALDSESERAVQEALDRAREGRTCITIAHRLSSIQNSDLIVYIDKGKVQEAGNHAQLMQKKGRYYKLIKKQDLAV >BP:CBP00016 MSVEWKSALRLQIEALAKRNDLHRKSSEEEIKKRIVDMDRRIVKLRELVSTSANDAAIFYLECVCHADETERLLNRESSVEKEKKWRKMKRKPSSQIGPTESRTVSSLPSVSPPDVIQTINVSTLEAQDQMPQRPHWWDQFQIYRRTDLLRFSKQNDRRELWRTQKDFFLTCLGFMVGVGHTMRFPAKVYQHGGGVFFIPFFSLVFFGLPLVFLHLSLGQYTGQAANTAFSKLMPIGSGVGWALVVIAIPVAVYYNIIVAWAIHYFFQSAKGLLLGDELPWETCRDEWQLDNRCCNLHNLHSCFNSSNSITAPEAFFHSEVLSLSTFGDFALGPLQSHLVLSLAAAWLLVFFGVFKGLGSIAQTMNVTATVPYLLLSILLLRGISLPGANKGLSFFFTVDSTKLWKWQIWKSAAEQVFYELGIDAGPLISMAAFSRYRNNVYRDSVLLVIMDALTSILSGMVIFSFVGFIASESNSNVNDVLKHDPLYLSFTVYPGVTSFMYWGGLWATMFFGMLVMAALDAEFAWLEMIASAFMNHFSTKNKAVENRLLAFLCLVGFFFGLPLCAQGGIFVFHAIENLNANWNSFSLALLSVAIVCYVYGIDNYLTDISGMLRVPRIPISKAIRFRDKIVSILGPGGIYIKFSLCFICPVILTVLLVASVLGYQRISFAGRPIPIDYEIVAWVVMIGPLLVVPLVAFLQVRQIRNEGKLLKSLFDTSEWRENPDDLLEPKDAYMKQDSKYESPPNRRRTPTIFTHRENTYMYIDSRGPTVRSRVFPMGAPLDPYGWKLGRLRDHQQHIEEVESNYSEEGSTTNNSFMASTVKHNDDVELTLFGSPPAIMGDEDKNMVTKFSESMPVNYKCRNEQAAPVQSRREPRLGRMARKTRRKRSSPSASDPPVPTSPLPPPPRLYHCKSEPPMMRSEEEHGTPKIITPDGSCSISDSSDDSSDDNIRRATVIRRKTSDDDAFTQISTAESISITPLDFPRQRSLSSVAIYDQEQKNGRSKVLSQLKRPTPIVMPPK >BP:CBP00018 KMSNSTSPNAAATVGNIAYCYVLPCICVIGIVGNITNLVVLASRRLRAVSYMYLRALAVADLLCMLFVLVFVSTEYMAKNGSTINQYKIYQIYQCHLMLTLINWALGAGVYVVVALSLERYISIVFPMHFRTWNSPQRATRAIIIAFLIPAIFYIPYAVTRYKGKQRWDPIQNVTIYSMDDHPIYTTFYWQIYKWTREALLRFLPIIILTVLNLQIMFAFRKRQKMFQQLTKRKEQGTQKDDTLMYMLGGTVLMSLVCNIPAAINLLLIDETLKKRLDYQIFRAVANLLEITNHASQFYVFCACSTDYRTTFLQKFPCFKTDYANRDRLRSFVRRTQSVIQKQGSVEHTTNSKVWIMFKSKFQRDSLSHHSRKFSRHMPIEQDTVDIQLASGEQSTSGETCEADTLIKYGGSIQLCNDENNTTFL >BP:CBP00022 CVICGQSTSLYNYGTISCSACSSFFRRTVLAKVPIQQCPHQDACYTPENRATHSECKYCRFHKCVDVGMINTQKYTNLTKLINQLSVLDKKRSYTCANMMLPPDFRLSSIFDYEHIKLIKKTPEVRFISHDWGCVHQLASMEFIKTFQFVKFLSLQDLQVFMKTAHFNHVIFASAMRSFGIRQGYLSFPDGSDVFPECIKRITCYNPEFLNRIRCKLMGRIIELNINPEEYLLLSAIILCNPAAVNLSVKGRTLISSYQKVYGSLLFQYCCQVNKKNGPLRFSELLTIFHAISQTHHDIGQFFLLFQMYQPNAQPIQLYQEVIDYM >BP:CBP00024 FQSVHHHLNEEELKQVFGVSNKHEVPEYSLIETTRHPLKNGGLKMKFVAWNDTYHLNLRKNSRIVSPHIISVIRHGDDAVTTYDGLRDYNQCHYQGEVKSHGNMKAAISDCGALMGSLVMEDHFLVLQTLPKRVHHLQKERHLVYKRSAGLLTDTENKIREEITRLQEEQESFCDTSEQLDDPAMTIPAHLHFNYTIPTSAQLDSPFIFPNMDPITLEIGLFLDSKLFEHFEREYIQDAEQHLLEFSLALINNVHVLYQQDTLTPNLDIVIVRYEMWKTQPSSLSTGVHKNGQAQSLLDAFCRYQAHMNPGTDLTDMNHWDHGVLLTGYDIYHTTTSVAGVAPVARMCDPLFACSLVEGLHLGRSFVLAHEMGHNMGMVHDGVQNQCNKGCCLMSAVNGAGKTTWSDCSVREFNAFLLQLDESGRGNCLRDASPGLISTNHLSDTRLPGQRFTADQQCSYFWGRDYRVEIPNGKAMDDICRILWCGNSGSTISTAHPALEGSWCGHNKWCHKGHCTSWNFDLPPVPIDGQWSEWGGAEKGCPIQQCAVSGSITIQAQHRDCVNPAPNNGGRTCEGANIRGIVCGATSSNCLGFTREEFGNKICSSIKFDPHKPDQQLTGEGFEHSTQPCRVWCHLIGSELIRNKGQFPDGTPCGFDAYCVGGQCLALSCDNKALVEQQEDCPRLEGRSIHQWEDWSSWSECSVSCGPGGRQVRERKCSSGRKCQGVSEESRACEGVLRDCEEFGEWKDWGPCSEKCALGIQKRFRPCLTDQCASEHLQEKRPCDNEGCWTNWDEWSSCSQTCGGGRRYRLRKCLDFKCEGDDLEKESCNTQKCISQTWGDWLPCSVSCGIGFQIRERLCDGELCATANKQARTCNQQQCPSTFSLAVWSEWGEWTTCSATCGEGLQSRERSCRRGSCQESDAAQTRRCVNGPCDHTFLPWSEWTPCETCSSFDSRKRIAKCDGTTDNCQDKIDEETCDNACLREQHSFGPISPKRPKLITSNELRKAFGRPLLPIESITSSKWSEWGPCSVTCGSGRRVRTRDCQEENCPEQNIQHEECSLNSCLDLFIWSDWSSCSKSCGHDATQTRQKLCLFNNAECSSYAESRRCKNLPTCTSISSGNTISENSFDAPQWSEWSSWSACSCFSLTSTRRRFCQVADPTVQGFCAGSILEQIPCAPGNCSPSAGGWSSWSEWSSCSKDCGDTGHQIRNRMCSEPIPSNRGAYCSGYSFDQRPCVMDNVCGEEKVNGGWTDWTSWSECTDYCRNGHRSRTRFCANPKPSQGGAQCSGSDFELNPCFDPARCHLRDGGWSIWSDWSPCSASCGFGVQTRDRTCSSPEPRGGQLCTGLAHQTSLCDLPACDHESDGEWSAWNEWSGCMGNCGFGTRTRVRACVSPPASHGGQPCFGRSSEITECRQSESTCSSFITSSLLADGYFIETDQQQ >BP:CBP00025 MLAFESPIAESSYSRQKAKDLAKKFTPGELCTVCGDVASGIHYSVAACNGCKTFFRRVVLENRTYSCKNNGDCIIDKSMRCSCRHCRYKKCIIAGMDRAELSMERRRKRKKLNGIEGLEERYETTNPLINLLLHKEKLYQKLLHSSAMTIHTSLREALDMSQIAFNDTNNKYDDRMDPKYPTNFSYWRAKILTVLVEWAKSFEASFSHLQPEDQKRLFIHTAFSNLVLAEAFHTPEKYNDRIVFPDGLCGFRNVAQTVSSDGVSTKTYGLTPTVVAVINDVLVPIRRMRLTKVEYVLLQAIIFFDPDCLSLTKHGSQLIAAKRRRLLHALQDWLQQQNKHEAAGRFAEILLRICNVQKVAAFKRETLCTIETFELMQPHPFTMEISKSYPDFSYF >BP:CBP00027 MVDLKQQLQWIDYLGVVAVWLCFFGTVLVISVTCILWCCVGKEDDPTVFAKYGFGPQPRVPSQRSKLEVEKDF >BP:CBP00029 MTRLLNGIKVVELAGLAPVPHCGMMLADFGADVTVIDKKHPVVEQRMNRGKTMKEFDLRKPEDVKKVRELCKTSDVLLDPYRPGTLEKMGLDPLSLWNDNKGLIICRISGYGQTGRMKDEAGHDINYVAMSGMMPTFAGTEASRPWPPVNMLADFAGGGLSAAFGIVSAIHARHHNGGKGCVLDCSMTEGTAYLASFVQHYYDQTHLFTDKYAAFTGECPIYRTYKTKDGKFMAVGPLEPKFHQNMFEVLGIDGDDLFSDPDRITKELEATFLQKTRDEWSKIFEGKDCCVTPVLDIHEVGTYGQHVDRQNFSKSDKFGGTWIAKPSPRVQTIEELTAAATR >BP:CBP00030 MAIVAAGVSKVLTTFQKTFKGLLPLIILVIYTLLGAWIFWMIEGENEREMLIEQQKERDDLIRRTVYKINQLQIKRQRRLMTAEEEYNRTAKVLTTFQETLGILPADMDKDIHWTFLGSIFYCMTVYTTIGYGNIVPGTGWGRFATIVYAFLGIPLTVLSLYCLGSLFAKGCKILWKFFLRSTRVVSKDLSEKISEAADNIEEGTTAVAPASKEENDDDDLLSFPISGLLLITVIWVIFCAVLFTFLEEWDFGTSLYFTLISFTTIGFGDILPSDYDFMPIVGVLLLIGLSLVSTVMTLIQQQIEALASGMKDNIDQEYARALNEAREDGEVDEHVDPEEDPETNKKSLNAVVSRMPLSKRALYYFLPASQKKQLEQQSEKKMGRKSIKVQTDSELLETLIREEILKAELNNEMHKFNGPRSSQQPRLIHSEIREKEVPIEVVRVEQYNHGGHDDYLEHDI genometools-1.5.1/testdata/nGASP/protein_100.fas000066400000000000000000001462271211610345200213340ustar00rootroot00000000000000>BP:CBP00004 GSHQIAKNFVNSSTPDLRPTFVVNFDTSTVICQHSSDPTDLHIHNMSSLCDGKQDCFVNPAMHDEVFPYCEHKCESTCSGKGACLYDGSKPQCYCDSGFSGAACELQDKNECLEHPCHMMAQCQNTLGSYECRCLPGYQGNGHECSDIDECADNIATRCPEHSQCINLPGTYYCNCTQGFSPKGNQGSGLDKCADINECETGAHNCETNEICENTIGSFKCVTKCSPGYSLIDGKCEDVNECDSEKLHKCDVRAECINTVGGYECECEEGFDGDGKNCQRGNPMSLSIAKSSCRKNSAICDRHASCNIFLDICDCKTGYTGDGITCHDVNECDAKETPCSEGGRCLNLDGGYVCCKDGQDDAACIKDQRAFCSGGCCDNAICSNATCACIDGFRGDPHKKCVDINECVENDSVCGGVGDRCVNLFGGYKCCQHGSQEVECTDQAFSSDSSTVSSHGADFTTTGEQVIEGSGSIQTSSGGSITVTRGLIPKEVELTTSGRLACTSYCPPNSECVGGFCECVKGYGGNALVGCEDVDECITETCNVEANEWCVNLIGGFVCCNPTNATHDDCIVLSLGSNVPFSDFLTVPGLEITKEKGLHVIGPNEEDTVVATRSNHSVTSDQLITEVVQQSKNFSSGQIILTRKSVTGGEAVTQTTDGDGEFGLEISAKDFGITLPATLEPRVEGSGKSPVAGVWTEEEDGGEDDDLMEASGSHGSWSTTINGTGFTGSPRSEGTIRVRITTLGEDGETETATKPGITVPGKDGKLAIEKEGHESVSSGSSATSSSGSTGSGASGSTATGKSGSSATSSSGSSSSGSTESGSSGSSATSSSGSTSSGESGSTATEESGKSEPSGATGTESSGKSESGASGESGPAGSSTTSSSGSTESGASGSNATSSSGSSATGESGSSSSGSTESGASGSNATGGSGATGNESSESAGTTASPESVTASRESVEGSGTTPSESTSSLPEGSGEWIETGSKGHFERGNKVSVSHGNGKPEGSGPKESGKPEVPGSQGSGAKESGAGKPGSGSRGPEITTDGEESESTSSGSGKPKNPKITTDGEGSKSTPIGDGKHPEDVEGSGILTTSSGGKNSTLEHGTKLVEVKPEGSDKNPGVGLEISAGKVTSAPEDKEKSNEVGLEIVWESTTPEPTTPDTDNVGLEISGRDLITKRPHQIEGSGTGDEEITATTRDVSKSTKKPRLEIDGGDNGETSGVDGKASTPSPTSPGAPESTTPSAPTTAPEDVTPETGSGEPGIPDGSGESSTAAPEGVSPTSSAPAPEVPTTPEGSEESTKTPEEATTATSPEEETTTQEPLILTAAPSKAPESSTKPSEAPEASSESTAAPPTAQPATVIPPQNREEKPEPTKETFALPTTTEKPVNETIENTKCMSSDECGLDALCERRTGVCRCEPGFEGAPPKKACVDVDECATGDHKCHDSARCQNFIGGYACFCPTGFRKTDDGSCEDIDECKEHNSTCCGANAHCVNKPGTYSCECENGFLGDGYHCVPSTKKPCDKEQSTKSHCAESNMSCEVDTTDGSVECKECMSGYKKSGTTCEDINECDEQSPCSPSASCVNLNGTFSCSCKPGFRGDGFMCTDINECDEKHPCHPHAECTNLEGSFKCECHSGFEGDGIKKCTNPLERSCEDVEKFCGRVDHVSCLSVRIYNGSLSSVCECEPGFRFEKESNSCVDIDECEENRNNCDPASAVCVNTEGSFKCECAEGYEGEGGVCTDIDECDRGMAGCDSMAMCINRMGSCGCKCMAGYTGDGAHCTKIEEPKEASKTACTEEWSRLCELEKKQCAVDEEEVPQCGACLPGHHPINGTCQSLQISGLCAQKNDCNKHAECIDILPDSHFCSCPDGFIGDGMMCDDVDECNNAGMCDDENSKCENTIGSFNCVCLEGFKKSDDDKCVLKTPNREKIEINEENSSSTPSESQKPESTTQGTVTTSVLSSEPTSEAPTSSTSPVTSSEKASESTTSSESPVTPSETSVTTTSLCSTVTCHSLATCEPSTGVCICRDGFIGDGTSSCSKKSTADCISLPSLCAENAKCDNSARSCECDAGYIGDGYVCSPHPQDCVLRDNLCSPEAICQNRRCQCLPGFTGDGVKCVSIHERASNCSQCDANAHCVGGTTCKCNPGYFGNGLCCVPDPLDCVHFTGICHPNAVCNPDTRQCQCSSGFSGNGVSCFPQKSCRTDKSVCAKNAICLPTGSCICRHGFKGDPFYKCTSLVAKEPSNAQDLSDVSSCVTPCDASSQLCISGECICKPGFRQNPGSKTCADIDECAEKTHRCNRIATCRNTFGSHVCSCPEGHVGDGVTCVPHVNQGKLSVYCEADGMTLVLGNETSDFEGKIFVKGQAENPYCSKSFSALLNSHKPYVFKVAFQHCDVQLLDNHTMASTVVVQKHAMFLTNKADSYDLRCQYPIGSRAVQSHVNVSELATTSTLTDKNSTLAPICRLSVSNDQHSSISSAMVGDTLKLALEVTPSENFGILPRNCFAVNIESGERYTLTDEQGCAIDESLFPQWSVTNSAK >BP:CBP00012 MAPKDDPDNRGFDDQRRPSQRSTVLAIPALAVNDPKADPKIASDLPANYVDDDDDAPKLYTPSLFEKILNYLLCRGDIANQQLEAQPVSIPGLFRYGKRFDYLLLFIGTICAIISGVSQPIMALVSGRVTNALLVYPPTSKQFRNKANENVYIFLGIGIFISITNWIQYMCFQHCCSRVMAQMRHRFVYSVLRQNAGWFDKNHSGTITTKLNDSMERIREGIGDKLGVLLRGFAMLIAAIVVAYIYEWRLASMMLGVAPVCCICMSLLARQMTSTTIKELIGVGKAGSIAEESLMGVRTVQAFNGQEEMVGRYQTELEKGRRFAVWKGFWSGFFGGLFFLCLFSFLGTGMLYGAYLLKVGIIGSPGDVFIVVMSMLLGAYFLGLISPHMMVLLNARVSAATIYQTIDRVPKIDPYSKAGKRLPNVVGRVKFENVHFRYPSRKEAKILNGLNLTVEPGTSVALVGHSGCGKSTSVGLLTRLYEPEAGNVTIDGTDVRELNIDWLRNVVGIVQQEPILFNDTIHNNLLIGNPGATREKMIEVCKMANAHDFIEKMPKGYDTLIGDGGVQLSGGQKQRVAIARTLIRDPKILLLDEATSALDAQSESVVQSALNNAAKGRTTIMIAHRLSTIREADKIVFFEKGVIVEAGNHEELVHLGGRYFDLVKAQQFKADPEATEEFEEEEIDLDDNSRSSRRSSMTSARSGSEAFQRGNSLNDSFSGSRRSARADAENDAFAAHEAEVMAQDGQITAGYLDIFKNAKGNYIYMFLGTVFALIRGLELPALALIFGWVFEGFTFVPYGGRMMHRMAMAVIAFASVGVGVWISQVASSVLFAIVSENLSLRFRVQSFRNLLYQDASYFDNPAHAPGKLITRLASDAPNIKAVVDARMLQVIYALAAIIANIVIAFIYCWQVAILGTSLILLLAFVMIGLAYKISLMNIEQIKNDEAGRTAIEIIENVKTIQLLTRCELFFDHYQTSSKQQKRSELKKGMIEAINYSITQSFMYFMMCFTYAVGIRVIYDGDKSSDVTFKGIISMMLGAVAVMNSAQYFPEFVKAKTAAGLLFNIIYRKPRTGDLMEGDRPEIRGNILFENVKFSYPQRPLQPIMKGLQWTALRGQTVALVGPSGSGKSTNIGMLERFYDVTGGVLRIDGQDIRNLSLYHLRTQMALVGQEPRLFAGSIRENVCLGLKDVPLEKINKALELANANRFLANLPAGIDTDVGEKGGQLSGGQKQRIAIARALVRDPKILLLDEATSALDSESERAVQEALDRAREGRTCITIAHRLSSIQNSDLIVYIDKGKVQEAGNHAQLMQKKGRYYKLIKKQDLAV >BP:CBP00016 MSVEWKSALRLQIEALAKRNDLHRKSSEEEIKKRIVDMDRRIVKLRELVSTSANDAAIFYLECVCHADETERLLNRESSVEKEKKWRKMKRKPSSQIGPTESRTVSSLPSVSPPDVIQTINVSTLEAQDQMPQRPHWWDQFQIYRRTDLLRFSKQNDRRELWRTQKDFFLTCLGFMVGVGHTMRFPAKVYQHGGGVFFIPFFSLVFFGLPLVFLHLSLGQYTGQAANTAFSKLMPIGSGVGWALVVIAIPVAVYYNIIVAWAIHYFFQSAKGLLLGDELPWETCRDEWQLDNRCCNLHNLHSCFNSSNSITAPEAFFHSEVLSLSTFGDFALGPLQSHLVLSLAAAWLLVFFGVFKGLGSIAQTMNVTATVPYLLLSILLLRGISLPGANKGLSFFFTVDSTKLWKWQIWKSAAEQVFYELGIDAGPLISMAAFSRYRNNVYRDSVLLVIMDALTSILSGMVIFSFVGFIASESNSNVNDVLKHDPLYLSFTVYPGVTSFMYWGGLWATMFFGMLVMAALDAEFAWLEMIASAFMNHFSTKNKAVENRLLAFLCLVGFFFGLPLCAQGGIFVFHAIENLNANWNSFSLALLSVAIVCYVYGIDNYLTDISGMLRVPRIPISKAIRFRDKIVSILGPGGIYIKFSLCFICPVILTVLLVASVLGYQRISFAGRPIPIDYEIVAWVVMIGPLLVVPLVAFLQVRQIRNEGKLLKSLFDTSEWRENPDDLLEPKDAYMKQDSKYESPPNRRRTPTIFTHRENTYMYIDSRGPTVRSRVFPMGAPLDPYGWKLGRLRDHQQHIEEVESNYSEEGSTTNNSFMASTVKHNDDVELTLFGSPPAIMGDEDKNMVTKFSESMPVNYKCRNEQAAPVQSRREPRLGRMARKTRRKRSSPSASDPPVPTSPLPPPPRLYHCKSEPPMMRSEEEHGTPKIITPDGSCSISDSSDDSSDDNIRRATVIRRKTSDDDAFTQISTAESISITPLDFPRQRSLSSVAIYDQEQKNGRSKVLSQLKRPTPIVMPPK >BP:CBP00018 KMSNSTSPNAAATVGNIAYCYVLPCICVIGIVGNITNLVVLASRRLRAVSYMYLRALAVADLLCMLFVLVFVSTEYMAKNGSTINQYKIYQIYQCHLMLTLINWALGAGVYVVVALSLERYISIVFPMHFRTWNSPQRATRAIIIAFLIPAIFYIPYAVTRYKGKQRWDPIQNVTIYSMDDHPIYTTFYWQIYKWTREALLRFLPIIILTVLNLQIMFAFRKRQKMFQQLTKRKEQGTQKDDTLMYMLGGTVLMSLVCNIPAAINLLLIDETLKKRLDYQIFRAVANLLEITNHASQFYVFCACSTDYRTTFLQKFPCFKTDYANRDRLRSFVRRTQSVIQKQGSVEHTTNSKVWIMFKSKFQRDSLSHHSRKFSRHMPIEQDTVDIQLASGEQSTSGETCEADTLIKYGGSIQLCNDENNTTFL >BP:CBP00022 CVICGQSTSLYNYGTISCSACSSFFRRTVLAKVPIQQCPHQDACYTPENRATHSECKYCRFHKCVDVGMINTQKYTNLTKLINQLSVLDKKRSYTCANMMLPPDFRLSSIFDYEHIKLIKKTPEVRFISHDWGCVHQLASMEFIKTFQFVKFLSLQDLQVFMKTAHFNHVIFASAMRSFGIRQGYLSFPDGSDVFPECIKRITCYNPEFLNRIRCKLMGRIIELNINPEEYLLLSAIILCNPAAVNLSVKGRTLISSYQKVYGSLLFQYCCQVNKKNGPLRFSELLTIFHAISQTHHDIGQFFLLFQMYQPNAQPIQLYQEVIDYM >BP:CBP00024 FQSVHHHLNEEELKQVFGVSNKHEVPEYSLIETTRHPLKNGGLKMKFVAWNDTYHLNLRKNSRIVSPHIISVIRHGDDAVTTYDGLRDYNQCHYQGEVKSHGNMKAAISDCGALMGSLVMEDHFLVLQTLPKRVHHLQKERHLVYKRSAGLLTDTENKIREEITRLQEEQESFCDTSEQLDDPAMTIPAHLHFNYTIPTSAQLDSPFIFPNMDPITLEIGLFLDSKLFEHFEREYIQDAEQHLLEFSLALINNVHVLYQQDTLTPNLDIVIVRYEMWKTQPSSLSTGVHKNGQAQSLLDAFCRYQAHMNPGTDLTDMNHWDHGVLLTGYDIYHTTTSVAGVAPVARMCDPLFACSLVEGLHLGRSFVLAHEMGHNMGMVHDGVQNQCNKGCCLMSAVNGAGKTTWSDCSVREFNAFLLQLDESGRGNCLRDASPGLISTNHLSDTRLPGQRFTADQQCSYFWGRDYRVEIPNGKAMDDICRILWCGNSGSTISTAHPALEGSWCGHNKWCHKGHCTSWNFDLPPVPIDGQWSEWGGAEKGCPIQQCAVSGSITIQAQHRDCVNPAPNNGGRTCEGANIRGIVCGATSSNCLGFTREEFGNKICSSIKFDPHKPDQQLTGEGFEHSTQPCRVWCHLIGSELIRNKGQFPDGTPCGFDAYCVGGQCLALSCDNKALVEQQEDCPRLEGRSIHQWEDWSSWSECSVSCGPGGRQVRERKCSSGRKCQGVSEESRACEGVLRDCEEFGEWKDWGPCSEKCALGIQKRFRPCLTDQCASEHLQEKRPCDNEGCWTNWDEWSSCSQTCGGGRRYRLRKCLDFKCEGDDLEKESCNTQKCISQTWGDWLPCSVSCGIGFQIRERLCDGELCATANKQARTCNQQQCPSTFSLAVWSEWGEWTTCSATCGEGLQSRERSCRRGSCQESDAAQTRRCVNGPCDHTFLPWSEWTPCETCSSFDSRKRIAKCDGTTDNCQDKIDEETCDNACLREQHSFGPISPKRPKLITSNELRKAFGRPLLPIESITSSKWSEWGPCSVTCGSGRRVRTRDCQEENCPEQNIQHEECSLNSCLDLFIWSDWSSCSKSCGHDATQTRQKLCLFNNAECSSYAESRRCKNLPTCTSISSGNTISENSFDAPQWSEWSSWSACSCFSLTSTRRRFCQVADPTVQGFCAGSILEQIPCAPGNCSPSAGGWSSWSEWSSCSKDCGDTGHQIRNRMCSEPIPSNRGAYCSGYSFDQRPCVMDNVCGEEKVNGGWTDWTSWSECTDYCRNGHRSRTRFCANPKPSQGGAQCSGSDFELNPCFDPARCHLRDGGWSIWSDWSPCSASCGFGVQTRDRTCSSPEPRGGQLCTGLAHQTSLCDLPACDHESDGEWSAWNEWSGCMGNCGFGTRTRVRACVSPPASHGGQPCFGRSSEITECRQSESTCSSFITSSLLADGYFIETDQQQ >BP:CBP00025 MLAFESPIAESSYSRQKAKDLAKKFTPGELCTVCGDVASGIHYSVAACNGCKTFFRRVVLENRTYSCKNNGDCIIDKSMRCSCRHCRYKKCIIAGMDRAELSMERRRKRKKLNGIEGLEERYETTNPLINLLLHKEKLYQKLLHSSAMTIHTSLREALDMSQIAFNDTNNKYDDRMDPKYPTNFSYWRAKILTVLVEWAKSFEASFSHLQPEDQKRLFIHTAFSNLVLAEAFHTPEKYNDRIVFPDGLCGFRNVAQTVSSDGVSTKTYGLTPTVVAVINDVLVPIRRMRLTKVEYVLLQAIIFFDPDCLSLTKHGSQLIAAKRRRLLHALQDWLQQQNKHEAAGRFAEILLRICNVQKVAAFKRETLCTIETFELMQPHPFTMEISKSYPDFSYF >BP:CBP00027 MVDLKQQLQWIDYLGVVAVWLCFFGTVLVISVTCILWCCVGKEDDPTVFAKYGFGPQPRVPSQRSKLEVEKDF >BP:CBP00029 MTRLLNGIKVVELAGLAPVPHCGMMLADFGADVTVIDKKHPVVEQRMNRGKTMKEFDLRKPEDVKKVRELCKTSDVLLDPYRPGTLEKMGLDPLSLWNDNKGLIICRISGYGQTGRMKDEAGHDINYVAMSGMMPTFAGTEASRPWPPVNMLADFAGGGLSAAFGIVSAIHARHHNGGKGCVLDCSMTEGTAYLASFVQHYYDQTHLFTDKYAAFTGECPIYRTYKTKDGKFMAVGPLEPKFHQNMFEVLGIDGDDLFSDPDRITKELEATFLQKTRDEWSKIFEGKDCCVTPVLDIHEVGTYGQHVDRQNFSKSDKFGGTWIAKPSPRVQTIEELTAAATR >BP:CBP00030 MAIVAAGVSKVLTTFQKTFKGLLPLIILVIYTLLGAWIFWMIEGENEREMLIEQQKERDDLIRRTVYKINQLQIKRQRRLMTAEEEYNRTAKVLTTFQETLGILPADMDKDIHWTFLGSIFYCMTVYTTIGYGNIVPGTGWGRFATIVYAFLGIPLTVLSLYCLGSLFAKGCKILWKFFLRSTRVVSKDLSEKISEAADNIEEGTTAVAPASKEENDDDDLLSFPISGLLLITVIWVIFCAVLFTFLEEWDFGTSLYFTLISFTTIGFGDILPSDYDFMPIVGVLLLIGLSLVSTVMTLIQQQIEALASGMKDNIDQEYARALNEAREDGEVDEHVDPEEDPETNKKSLNAVVSRMPLSKRALYYFLPASQKKQLEQQSEKKMGRKSIKVQTDSELLETLIREEILKAELNNEMHKFNGPRSSQQPRLIHSEIREKEVPIEVVRVEQYNHGGHDDYLEHDI >BP:CBP00032 MLKVCMNVTDQCDCLAIECPIAYSNSVEEKEACYMEHCFISKRALDDVTLYKVTALYLVIFIIGVFGNTATCLVMRKHPMMKTHTSMYLINLAVSDLVTLCVGLPFEMMMNWHQYPWPFPDVICNLKALIAETTSSVSILTILVFAIERYVAVCHPLYLVKNQFFKRNMKSIIGLSWIVSILCATPFGIYHRADYLMRSWPGTDDKIPVISSKMCMVAVMFEPKLEPTFKVLFHFSAIAFFVVPLLTILVLYARIACKVSNNRTIQAGELDITEELQLKINAILCAIVSAFFICYLPFQFQRLLFFYLDNEVILVWINQYVYFISGFLFYLATIINPIAYNVASSRFRRAFKDILFYYCFGRKSNGYPRSSFSKYSL >BP:CBP00039 FREMADSPKFALVTFAVYAVILYNVNSFFWKFVFIGYVVFRLLRTDFGRRAMATIPRDFAGLKLLISVKSTINALFKKDRPIHEIFLDQVRQHPNKIAVVEIESGRKLTYKELNELSNQYANLYVNEGYKIGDVVALFMENSIDFFAIWLGLSKIGVVSAFINSNLKLEPLAHSINVSKCKSCITNNSLLPMYKAALEKGLISKDIHVFLAGTEVDGRHRSLQQDLQLFSTEEPAPVDGLNFRSVLCYIYTSGTTGNPKPAVIKHFRYYWIAMGAGKAFGMTKPDVVYITMPMYHSAAGIMGVGSLIAFGTTCVIRKKFSASNFWKDCVKYNVTATQYIGEICRYLLAAKPCPEEKEHKVRLMWGNGLRGQIWKEFVGRFGIKKIGELYGSTEGNSNIVNLDNHVGSCGFMPIYPHIGAFYPVRLIKVDRATGELERDKNGLCVPCVPGETGEMVGVIKEKDALLKFEGYVSEGDTAKKIYRDVFKHGDKVFASGDILHWDELGYLYFVDRCGDTFRWKGENVSTTEVEGILQPVMDVEDATVYGVTIGKMEGRAGMAGVVVKDGIDIDKFLADITSRLTENLASYAIPVFIRLCKEVDRTGTFKLKKTDLQKQGYDLAACKGDKIYYWVGSEKSYKPLTEKMQQDIDAGIYDRF >BP:CBP00040 MLHPIVLLLVASSAVYAARPRRALDGLDGSGFGFDKRALNSLDGAGFGFEKRALNSLDGQGFGFEKRALDGLDGMGFGFDKRALNSLDGAGFGFEKRALDGLDGAGFGFDKRALNSLDGQGFGFEKRALNSLDGAGFGFEKRALDGLDGAGFGFDKRALNSLDGAGFGFEKRALDGLDGAGFGFDKRALNSLDGQGFGFDKRSSFKHQSSKLRSVFRNLRGFNKQH >BP:CBP00046 MSSLRCHVVVSALLFISIVPISQQVLNEHNQKLEWIVGKWRSEFSGKIFWPTVPTMTFGEELVINEAPIAKSANVQFLNFSARAWSHSTKDHFHDEWGFLTVDPVGNATLMTTGNNGFTTYETGTVSPNKLVLTLKDIGRISFSRDLPVEDLRRTFIRHDDRYMEQVIEMRTATHPKVGYLEHTRVVYTKLK >BP:CBP00048 EGRGNKRTFFDITINGEPAGRIVFALYNHSCPSTAENFRALCTGELGQLYGHNASYQGSIFHRCIKGFMIQGGDLTHKNGQGGFSIYGRTFDDENLSLPHNKPFLLSMANRGPDTNGSQFFITTEKVPHLDGKHVVFGEVVKGFDVVKRIEKVETEEEDMPVQRVTIAHCGEMVRKSDVMASDKKKKQDEQEPVGCKMDDEPKTVNWLMRRSRSRTPEDSKKSKKDRERGGNRGDRRRHDRQRDRYGRERRSRSRSGSRDRHRDRERNRVPDERRSGKRPVSIPISKADCEVNKYERELGDCQEILVITNKDGIKVRGRGKLTFMGSRDRSTTPPHWKREESKKLTLEEHQKRQEEMEERKRLRAEREKEDVERKEREEKEAMERAAQRELERQEEEEARKRSRSNSPQSPRVKQELMSQRQESKAESNSSRSSSSSSGSSSSSDSDS >BP:CBP00060 MEQIVESLQYFGFLGSLVLNSFLLFLLHTRAHRNFGKYRILMIVFCLFAIVYSLVEVLTLPVMFVKGRSLCVCSNGPLRLYRPIGVPLTSIYCGSFGMCISLLTLHFFYRYVAVCKPDKMRYFNGKHIFLTFSPSLFIFVTWSMTTYWPMAPDEMREIHYHDVLMKTFQTNSFEASFVAMISIFLQDPQTSTWLPSQLLSCAYMSFLMSVCFSVIVFCGYQALKQMRSHASHMSSKTKELNKQLFMTLGIQTLLPVFTMYIPVGCLMILPMFGIELGAAANNAAAFLGLYPALDPLVAILLIKDFRNFVFCKSVTSTYASAVSNTAPPSKILQ >BP:CBP00061 MDADKLIEYIQYGGFVSSQLINALLLYLLCFQASNNFGRYRILMIVFSIFAMIYSLIEVVTFPVMMCKGRSLCVCSNGPFTLYRSIGVPLLSIYCGSFGMCISLLALHFFYRYIAICKPEKLYYFEGKQIISTLSPCFIIFVIWSLLVYFFMDVTEEKERIYHDVLFRSYNVDSHKVSFISMLYKSPATETSPEHWNFDQLVPFFGCCFIMDSCFFAIIYYGSKAFLQMKSCGTEMSKKTKELNRQLFLTLGIQTLLPLITMYVPVGCFIILPIFGVELGVEANKTGAFLGIYPALDPLIAILLIKDFRNYVFCQKRTLAKVSTTSGIASKITSTFQA >BP:CBP00071 MGDEGYRGWIKLEIPCFEPERHMNNIIRCHTTKLEPALNSYNMRIHTKGQVQAVEEQDCEPFYESNYEIVSSHFSHHLIIAIQNYLKSLSMDRLMPFQLGNLVLHSSDFWSSELTCHLADIPLSAFFFGNIQGGTFINHWEVSFWEDTHRRNRLRQKNMQPTASDRQGLNQIRVEFEFDKVDFMTVHFKHKEGDFEVISKDFRKTRETVTMYYQITVRRTSIRRVIVDPVVNDTNGGDRIRIHFELNCPVLIRRAYKTEKQEAEAKHQVPHYRRFLVINRGRSANMYPTPKAITDSPVFTIEFDTSVSLEEVYRLISRLRIRTGVSIEFATIPSVDCLIWRENPYHRWTFHGSSHLSPTHFSAPIYRDFITTAFPRKHEVCGSREVDTNRERKFAITYLLECLISRGAVVKDQILLDDTIWHRFLEVILHYYTKDDKLCEAGLEDLVHMIDGRKRIGSLIKCFDRICQTRQKNSLVNGLTTEEMREGYQRVRKIIFTPTRVIYVAPETLMGNRVLRRYDHDGTRVLRITFRDDDNQKMRTNKTSTLLEKTVNTYLMNGITVAGRNFGYLGSSNSQMRDNGAYFMEKYSSSQCREYEKMCRMAPPITFNPKIQAARKNLGRFETIDNIPKMMARLGQCFTQSRLSGVNLDRCTYVTMYDLTGGKNIKGDEYTFSDGVGMMSMNFAQMVSQVMDFGKGVPSCFQFRFRGMKGVIAVEPFLDDLRQWSIENDIQEVSEDTAWGLNCVFRPSQIKFISKRHPRDQVEIVKYSSPVPVSLNKPFINILDQVSEMQSLECHRRVTNRIEELLDRQMLSFAQQMIDETFCRNRLKELPRRIDIDYLRTTWGFTLSSEPFFRSLIKASIKFSITKQLRKEQIPIPADLGRSMLGVVDETGRLQYGQIFVQYTRNLALKLPPKSASRSVLTGTVLLTKNPCIVAGDVRIFEAVDIPELHHMCDVVVFPQHGPRPHPDEMAGSDLDGDEYSIIWDQQLLLDRNEDPFDFTSEKQKSSFKEEEIDDLMREFYVKYLKLDSVGTISNSHLHNSDQYGLNARVCMDLAKKNCQAVDFTKSGQPPEELERKWRKDEVTGEMIPPERAERVPDYHMGNDHTPMYVSPRLCGKLFREFKAIDDVLKISEERDEQVEITIDETIMVDGYKEYMHSAREDLARYNAQLRSMMENYGIKTEGEVFSGCIVDMRNRISDKDQDDMSFYNTNQMIETKVTNLYKKYREHFFEEFEGAWEANTEGTSRGESDTNILQRHCRAPTQNMMKKAVAWYRACYEEARVTRENKKLSFAWLMYDVLAMVKQTKSLTSDDIRMGGSNPLYTMLDAHRSQYLLDNRSVFEDYIRFAPSKNQGEQVARALEIIRMYVETNPGLEEVMFVINEWARASKLFENQPIRNYHLSLLFILFATRQFSSVDGNAAAFFPKIDERGWREEKANGEFKQGLEFMEMKKSQMIVKFLEFLASRKFRKLPNVSFRTLRFSSIFMRGEWQIFHVAALKTYYNLLFNLRFEELPVSTDPTMTVRSIIRENEPFVVELPADADRTLVHRKLIEHTGVEEIYMRNMEKSVRGVDEQQKANTRYLVSTRGTLESMYKLRQLVAVKVPIKTYVTGQEISTQMARLCYEKIVKGHIS >BP:CBP00076 MSKHNAVGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFTDSERLIGDAAKNQVAMNPHNTVFDAKRLIGRKFDDPAVQSDMKHWPFKVISAEGAKPKVQVEYKGETKIFTPEEISSMVLLKMKETAEAFLGSTVKDAVITVPAYFNDSQRQATKDAGAISGLNVLRIINEPTAAAIAYGLDKKGAGERNVLIFDLGGGTFDVSILTIEDGIFEVKSTAGDTHLGGEDFDNRMVNHFVAEFKRKHKKDLASNPRALRRLRTACERAKRTLSSSSQASIEIDSLFEGIDFYTNITRARFEELCADLFRSTMDPVEKSLRDAKMDKSQVHDIVLVGGSTRIPKVQKLLSDLFSGKELNKSINPDEAVAYGAAVQAAILSGDKSEAVQDLLLLDVAPLSLGIETAGGVMTALIKRNTTIPTKTAQTFTTYSDNQPGVLIQVYEGERAMTKDNNLLGKFELSGIPPAPRGVPQIEVTFDIDANGILNVSATDKSTGKQNKITITNDKGRLSKDDIERMVNEAEKYKADDEAQKERIGAKNGLESYAFNLKQTIEDEKLKDKISPEDKKKVEDKCDEILKWLDSNQTAEKEEFEHQQKDLEQLANPIISKLYQSAGGAPPGAAPGAAGGAGGPTIEEVD >BP:CBP00078 MLRAVVRLSKTGAKAQRRFLNLQEFQSKEILEKHGCSVQKFVVAANRKEAEEKWMSFGNHEYVVKAQILAGGRGKGKFIDGTKGIGGVYITKEKKEALDAIDEMIGKRLVTKQTTEDGVRVDKVMIAEGVDIKRETYLAVLMDRESNGPVVVASPDGGMDIEAVAEKTPDRIFKTPIDIQMGMTEAQSLKIAKELQFEGKLLGAAATEIKRLYDLFIAVDATQVEINPLVETADGRVFCVDAKMNFDDSASYRQKDIFAYETFEEHDPREVDAHQFNLNYIGMDGNIACLVNGAGLAMATMDLIKLHGGEPANFLDVGGAVTEDAVFNAVRIITSDPRVKCVLINIFGGIVNCATIANGVVNAVNKIGLKVPMVVRLEGTNVDAAKQIMKKSGLKILTANNLDEAAAKAVESLPK >BP:CBP00081 MLTDGVVDYTKEGSILTAEQRQFYEKNGYLLIRNCVPQYELNRFRQRFQDICEKKVKAPDNMTVMKDISIAKSEFKDGEKAITKIQDFADDPVLFEYCKYPGVVDVVKDLIGNPKSTVMAMHTMLINKPPDNGKLTSRHPMHQDLQYFPFRPADFICCAWTAMEKINRANGCLVVVPGTHKGVLLPHEYPKWEGGVNKAYHGIQDYDPSNPRIHVEMEAGDTVFFHPILIHGSGANRTEGFRKAISCHYANDDICRYVNVEGTTQENLAEEIIEIAKKRLTKYGLDPNTVTLDFADIWRVRAREVNGTRSNL >BP:CBP00086 MTATMDVDNLMSRLLNVGMSGGRLTTSVNEQELMTCCDITKSVFASQASLLEVEPPIIVCGDIHGQYSDLLRIFDKNGFPPDVNFLFLGDYVDRGRQNIETICLMFSFKIKYPENFFMLRGNHEPAINRVYGFYEECNRRYKSTRLWSTFQDTFNWMPLCGLIGSRILCMHGGLSPHLQSLDQLRQLPRPQDPPNPSIGIDLLWADPDQWVKGWQANTRGVSYVFGQDVVNDLCAKLELDLVARAHQVVQDGYEFFASKRMVTIFSAPHYCGQFDNSAATMKVDENMVCTFVMYKPTPKALRRG >BP:CBP00091 MDASTEAGVYKKELYSRLMASINATMCHEQPDGILYCPNHTGGPVWVRNVYPPIQELQPKVLIVVVVFVLCFIVGVCGNSSIITIIRGVVEDRRKRMKRHGDNAILYIGALCVCDFVMSLSLPPAILDSVIGFWIFGTTMCKVHHVFGSVGRIASTFLITAMSFDRYVAVCYPHQHRLRSRTFVVSTIVCLSAIAFVLLLPMLTYASAKEMVLHELKAHESANITRVRVFKCSDMMPGPIFYWFTSTTFILGYVVPLILIVYFNLKLINKLYAHKRVLPRSAIPVRRVVVYTVLIAAVYFVCWTPYWFSVLYAIIMSLLGKPTTNSEWVLFAIYCVHLLPYFGSSSNWILYGLLNTQLQMKNDIGDDGQSIMTTNGVPDLPRRSTSRGICDGASTSRSLPAASNPQWQVDPMLTRGNSDTSMVFYQDTEQTHL >BP:CBP00094 FRIGHLEYENSNETKILEICMKTAGTRKQHTLISLPSCHNFNGLENAANLNYQYAVDLLIGAACDEETQTVSRLALRWHKLYLSSAPLSTKEKEGTTIALKPHSLAGTAEVILAVCKSMKWKEIGLIYSDETKYTAHAIYDMLAEKEEEDIKINVFLQTDGTMNTYTILHSARVLISFLSTSDLSRFVKTLKDKAFRPLEFSIIHVDCYKSETTEFYTHLDQKASEETNPISAARLRKLHRHVALLRNSHDDKGNMEEFATKHGMIVIFFVFPFPTLCFQPSHTLYKALILCDGLQLLSDYKPLSDNLTIVQQQPTLWEHVTNTEIHGYSGPMFIGSDGVRLPYYEMFMWRDGKTQHVASVRPRESEFCEKEKMSNESKNCYEITRTIPFGQLLDDLPPYSSDCGYDNNLCSDFHVFMIAAIVFSILLIPMAIAFYLQRKEHLIQQMPWRVPLDTINFDDSRNGRLLSVSRRVSTVSTARASYSSIFSANVSEHAHVNKQKVSIKRYVQRRPITFTRQEMEMLNQLKYMSHTNINPFTGICFNQGSELIVMWQFTARYSLEDLIFGKEQKFGRNFQSTFIKHIMHGINFIHNSSIKVHGTLYLSNCVVDSYWVVKLTDFGIKNILKERMHHKELAPNSSFDIDAIHYKYLQLAPEHLSSLLEKHEEPMGTVEGDIYQLAMVIYQILFYMKPFAERQEDIKAVKKLFFLELATLLSNQSTAPLHPKVPEGNSFTMRLLSIIQQCWLYKPAARPTLIKITDAVNREFGQDVKGTLIDQMIEMIDEYSANLEHIVAERTRELEQDMATTENLLYQLLPKSIADSIRSGKSVVPEQHSSVSLLVVDVCQFTKFCEAFIPVHILETLQELYSSFDYIVQKNKAFKVENVGDAYLICSGIPEMTACRHLREVSKISLKLQEFMKTFTVRHRPSHILQIKMGITSGAVAAGILGSIAPRIITGICKNLAYKILNNIQPGTIQLSELTANTMMEKFPSFIIEERGMIDVKGKGTCLTFWLTGEKDQMRRQSSRSSCISHSQIKFEIEEANKTNNQFL >BP:CBP00095 QLSVPQYKEFLEVQSNLTKNLFTDYDPTISPVYTWIDVDQPIGYDSQAPKRWNYTVFLYYLKLVEVQEPEEKVSVVMELMEYWYDARLSWNTSLYQNTTSFYARQDNVWSPTLTVFGVNDIMDFRDQDNRMVAIDNFGFLWDYISVRISANCQMDVSRFPFDTQTCQIRFCLPIFYRVQVEILNEIYEGIMDENIFKTMGNSEWKLINLTNRVEVLKYNDNMGNMDLAIFEITIRRNPLYYIYMIVFPSFVINFVSIVGVFLNGADKMSRLNVGLTNIMTMTFILGVMADKIPRTGNIPLLGIYIIINLVIITQLEIFLGPPLEYTSAIILELMTCANFLVMVGFWFDDGS >BP:CBP00102 MTSFVDNQSLTNYLIIDYDTDNEEDDDDDYDVFPTANEFISNVPKKNRKRARKCVKKGFICCFKTIKYTFLCCRCVIVWRCLWLFVILLIGLFLFTCFYYDDARKIFQFVYIVIETSIHFLKPTKPCRSINRPSSVLHFLQNYSFHPQAFFIYKKGCVRSVKGVLYRLQMKLLLISTVVLIASVSAIGNLYSGGGKQCTECPPGYDYYSRQHDRGWCMKFFPGNVTFFEAEKVCRCQGGATLSGIENTKELKKLSRKINEYFDENGIKSGGIWVGAYRRKDCRVPKSEKKAECTKEFQYQWTDRSTFGRDMWISHWTEGAPHNNVVGNHSEFCVQLQVTDPTKTALNEHFDNRICVHRDGSSAFETEGFICGRPPKCKGGYNGGYSGGDGVIVIGAARPTQKP >BP:CBP00103 MDLFSIVKSVSFWFVSTVDCLDSQWQYSEYISSTDMVQSFSERFLPGNWVYMLFAIPLWYGTWWAVLCYIYFYYTDITDAYMKETIEYHYGIPIKDSSYIIVYFQPTGADGKPHPDPKIFFAIGCMWYMIISSMFSVFYFGIRCYWQIRKTINQSAAVSATTKNLQTQLFHALVVQTFIPLVLMYIPIGILFFFPMVIWELPFTTEFVGYTIALYPAIDPLPNMIIIKCYRHAIQGFFMKIFGRGKRGETQHSLNTDAQSGS >BP:CBP00104 LQHIYQSLCTMISLILNSVLIYLILYKSPKKLGDYKWLMIYTAVFEQIYTVVDLLTEPTAYSYGYSFVVFRRYNATWTDSNKSQVLIVTWCGLFGSSMAVFGVHFVYRFASVHPKNITKTLYNLNIEDISYISAVFYVDDPNNGSIHLSWGSWIALVQFSTMVGSSMFCVSFLGYLCYSELSSQLSMTSSQSQVANSLKKQLYFALVGQTVIPITFMYLPVCVFVFGPVFMVEIGVISTYLTHAVTLYPVLNPLPNMFIIKSYRNTI >BP:CBP00116 MTSWADIQKLASDLQRVQLTQSSKKLSEVNCIEVLQKLIASQQIDVVYTRDGHTYVTKKHLETEIKNECVAAGGRAPLTDIAVALNIDFDHIERTARLIVSSDDEFTLSNAELFATEYVHSLRNELRSLLDEQGHQTTAALCKHNLSPELLQSLLIEKLSSTDFEGVVDGDTIYTSSFLDARQLVLRAVLVALTKVTPISTIQKRVGLTPKRFWIAFENLQALGEVPGTLIGSRTSPACSYRPKMYDYLVKTCVTNQYRQNEFLQMSTLKTLGLDSKTALEEVLGASEVKKLVNLNSIYMSKELMEQCVQTVQDDIQNSGIAEIRMSLQTLNLPLDTADEDLIGEKIASTEKDTNFSDGFVYNNSILTEALKSINTQIEAKAHQEVEKIDVEKKKQCGSKAPAKVQEDTDDWGDNKKGGKGGKKGGKGGKNGGGGGKGATSSVPTGSGTVQVNSEELEEWLRESQTVPEEILTVVVETLHQDATSALRKQVQEIQALQLVVNAANSKKSLSAIGDKCRQLYDSFNTFEAGTTSFADPLGTDLRQYLLKTVGVDLACAILSYAIGIDNVHQLKEKQRDETIESLPEMVREPIRALFASLKSTDEDAVEKFHDAVYDCSVPSATSLSLRKIDKKGRAEVGVKVSADLCDQLASQSDPATTLLLSVLYLFSQAGRPTTASGKFVAQLIAQMKDFCPTNTFELLQSCQKGVVTCIKNQDDDVAKEILSEDIEKLKSAVL >BP:CBP00121 MDTAFSPNEVKIMEKAFDSYRRNTCIRFEKREGQTDYLNIVKGYGCYSQVGRTGGKQEISLGRGCFFHEIIVHELMHSVGFWHEHSRADRDDHIKILWDNILPGMKSQFDKISAVLQDLQGENYDYKSIMHYDSTAFSRNGRNTIETVEDGFTQVIGTNQDLSELDIINKLYSCKAKKKEKMRVTTEEPRRLIPQVGEKKPVDSGEKCVDHFADCPHFAQYCTRASFFFVMKSYCPFTCKHCPGDRKIKKSG >BP:CBP00122 MESATNSSSEESIFHEQTRKLFRLCDAQNIGLIGKADLDVLVDLIPPDDLQKISRFIGEQKVNEPAFCRILKAIVSQALQQEMAKIEAQIPAFDKNQYLQESSLEDEMRAIEQNRSYLDDPLTKILKKELEEIQRYENSQIQNEHAINNTMIKKPLYRPIQPEPTIPKVSSLAEELNAIDKKVPQRKEEEELTQPDRIFKVVFVGDSAVGKTCFLHRFCHNRFKPLFNATIGVDFTVKTMKIAPNRAIAMQLWDTAGQERFRSITKQYFRKADGVVLMFDVTSEQSFLNVRNWIDSVRAGVDEATVMCLVGNKVDLFGSDIARSGVYRAAEKLALEFKIPFYETSAYTGYGIENCMRQMAESLQRREDNHLEEALKLDINSNYKKRSWCCI >BP:CBP00124 MGITTLPPSQLRPELEWLFPKEVTTTSSAVLQRNSAAEIPLNFLAEHSLALIAALFLIVLTVALLAVLVQYHCQKGSSSGSAGAISPKSFSTSPSQWTTCSTVSSTYSTQSLLQLIGSGLRQSLQGLLLPSEAVVLETIVGKGYFGNVYRGRMRDPAGRLIPVAVKTLKGERARDIAHIEKFLREGVVMKHLDHPHVLSLLGISISPAGNPWVVLPFMEGGDLKTYIADPNRALCVLELLDFAHQVAQGMSYLAAQHFVHRDLAARNCMISAERIVKVADFGLAVDLLDKESYIDESETGPARLPLKWLAPESLRDRRVFSSATDVWSFGVLMWELLTRAASPYGEVSNAKVRHYLETGMRLPQPTHCPDIIYDLMQCCWRATPEDRPDFVFLSHRLRALLQENSPDPFTRRFRPNAEQFLLPVLPGRLFTNYFAAQMHA >BP:CBP00131 RIPIGKLLSRRIHHQTNGLIIPSKNVLPRQQKRQILFKMGNETPARVVGYYVVFPVIPEETVENNCFMCNIAKSEDWPKLATAEPREMYEGTVRMLMDYGATVMEHMEHLATLPAEDRKFENVVDPLLTEEYDVNFAFQTLVLKMLTDWPDCNRKLFDADLHHIKIMCARDQMEKLTNKDFQDAIKQLYESKENGLSEWQSRLLEWYLLEIKASGLDKHDDKTRKVLGSWSKFIDEYRSKYITGVMSTNDQQTFVVNDKKIIKDAPPHILQKLAVDEQSWESGPWRGRMTPHTIYPFMQYCGDRQLRATAWEKWTSKAGFDHDFYNNSINIEELRHNNEGLAKTLGYASVAEHRLANKMAASPDTVRGFINALTRRIRPVVIDRMESWSAWASRCELITGELQAYDMPYVCRKEAEHHYDVNPLDLMNHFPFWPTFQNIVGVVGHIFNLEFKDITDKGYEKAHADARIYSVGDKFSGQHYGRLYIDPYDRQNKRGGWNVMLARPESKERGLDKIVYFIGSAVAPTANGPSLLHHQQLQQLLFHVRRGSRNPTVGDSKLNSNFSYFQFGRSVQLLLSQSPYRDIAIPWSPFYASDWDAADMFPTFLQMFVTKPNLLATISSPHIITNQPLTEEHANSVALTISRASLWETYRTLFWSDFDLSIYEMEDRKQKFWLDMYKQMYEEYFPFKRNKNDYQPCSFTPIFALQPHMSMYYRKLWAEMLALDIHETFDEEDNEVQTGERLKTTVLNRGSGDVAKELFKRFQGRNPSVGAICDHYAPPLTLQEGMK >BP:CBP00137 MSETSGRSNSKLSDSSSVSEQQTADLSIFSGSFDGGVFSSNIPMFNFAGQGSQSALYSPHPFVKSNDPCRLTALTQSTPKEPMNLTPADFGLADFSVGSESFADFSANNSSFVGNFQSNVRSTRLLPAWAVDASGNIRDDLTLADVVLNGSLIDFAMDRTGVKFLERHFPAENDDEMHRILFDKLTEHSAVFTSLCRSAAGNFIIQKFVEHASLEEQYRLVETMSENGLIELCLDKFACRVVQLSIQKFDESNAMKLVEKISNLDFLPLCTDQCAIHVLQKVVKILPVSAWSFFVKFLCRDDNLMTVCQDKYGCRLVQQTIDKLSDNPKSPCFNTRLQLLHGLMTSVARNCFRLSSNEFANYVVQYVIKSSGVMEMYRDTIIEKCLLRNILSMSQDKYASHVIEGAFLFAPPHLLSEMMEEIFDGYVKDQETNRDALDILLFHQYGNYVIQQMISICISALLGKEERKMLPTEMRLYAKWFDRIKNRVNRHSSRLERFSSGKKIIESLQKLSVPMTMTNEPMPLWAVPTPLMDITAQFLNRQNFQKQHSVFDD >BP:CBP00139 ICRMLIPQSSQSMLVASTIISTFAFLATITILPIFFMKVQRINSQMLTDLRNCHQDSSDIWKQLSHKSVREKRSYGGQNSIPSGKCCSCQQGKPGAMGPKGSDGAPGSPGIIGLNGRNGRNGKYVASEAHNEPACQKCPVAPPGPPGHPGRKGLRGQSGNAGTAGKNGIPGRMGPPGPPGVRGPPGELGMQGPQGDPGKVLNGAPQGQPGRPGKVGPRGKGGHTGRDGRPGLEGIAGARGVQGERGSRGARGPPGPPGPSGTDGRKGSCSHCQSDDKPHRGAPQEEPNPEGEYSEQQPVESIEPVPQRRPAPVPTTTTTEAAPVYTDPVTQEPVRHRAYPAAAPPSSYNTGNSEVVPKTINYPDTINQPNYKHDGDVSGAAGTSDDSEDVNVIPAGQYSSRQYASKTNKIGKAIHFGYSNDQLSAFKPMGGGADEEEEIEGYGQPRAFQTNKGYNVQIMGSSPTNNNPTYQAAPVGTAWKQPENHKNRHYTPQYLPPPAY >BP:CBP00144 VICLLYFSLSAVAIAQQPQFTCPNNANPLVANSGTNLFCTSAGSNTDCPTGSICTTAANAAGILICCSQSTNVNPVCPNSAISQPSNIGYVECQFNNPTNCISGYQCVQSANLANTFICCSTSASVGSCPSDFTPAVGTNGGTISCNPSASTCPSGSSCMQSTLNTAFICCRSANSQRICANNQNALITNGALELCTTPGTQCSSTGYTCQLSVLLATYVCCGQGSTGSSIGCADGRPVYQQRVGETYTCDITSSLNSCPSGYDCALSDDSFVNVCCLTGSTPIPENLSCPTGWNPFRNEVDNAVRTCTAVLDTSCPIGFSCAPSNQVSQFLCCRLASSLVCINGKTLLVNGAPKLCTPTTYSQCPYNYSCQQSVNPTVTVCCSNT >BP:CBP00162 MASYILNALTLRHDHDAAERTLHHFWDTVCFNISLRMLDDWIIDTDNKDLLDTGLFEEHITSQPLLAASLFSLIACSIGLIVFAIIFLICRFRGQCGSQKYQEYPSNATNYAIYLMLFFISWLIVTSASAYFVLAGIGFWSEKLDARKPFTNASLRLSRSTIGDLYASYDYHGDFENVSEAPRKSLKRIHIHRKPLLHTFRKRIEIPIRPLAEVTFTGTSDKFITKNRPILDLNSNQNDGSEEDKIDEFESFKRLQNLPEPSLPTEEEIKNQVQEHSGIPGIAEIFGNSEDPEDVADNSEEAETSENQSLVVTGGTMTIEEEDSEDVESEESTTTTTTITMTTTTTVPITTVPTTTASTTKSTTTVAPTMETTKTTTTTTKTTTTASPSTISAIFPEVTWTQIEETNSDDVLDQLLTHAETHPDVPADNSLSYNPNLTYFSLHSRFLVFVCRLTFCFVALALLFVILPTFFLVVAGTGCYIYSDHPMNRSSVSNKIGQVVSINASILLFMSPCMLIFSSFTLFYTHCHELLCATIQLQNQQARGIIDTNHQSLIENYSINTNQCARSLAPVQSLLLSSLLLCISLLPCVFAMFKLVKYYFRMSSEFYWNAADNFAGRQFSKQQDFPRYQSTVIYPDDDMTAGYAVYGQI >BP:CBP00169 LKFENAPFPSITICNLNPYKKSAIQSNPNTKAMMEAYSRRIGSGDKSEGIAAALSASGALHAKVRRAKRKAKGKPRLRDRRYHQAFAQCLCDIEPLTGDRKGSCFAAFKGKIEIDTNSTAGFMNLHTSRCLCQLDTISKTLWPCFPYSSWKEKLCSECVDNTGHCPMRFYKGNELYENIKEQVDLCLCHKEYNHCVSTRDDGVIIEIDPNDELGNLDIGKKVASQLSLREEKLAETTTTEAPAVTQALGFEELTDDIAITSQAQENLMFAVGEMPQSAKEGMSYELDELILKCSFNQKDCQMERDFILHYDNTFGNCYTFNHNRTAEVASHRAGANYGLRVLLYANVSEYLPTTDAVGFRITVHDKHIVPFPDAFGYSAPTGFMSSFGVRMKQFIRLEPPYGHCRHGGEDSPTYAYDGFHYSVEACHRSCAQKVIVDTCGCADPMYPIAEMFGNDTKPCQAVNMEQRECLRNTTLYLGELYSKGKESVIPDCYCHQPCQETNYEVTYSSARWPSGSAKVMECLPGDFMCLEKYRKNAAMVQIFYEELNYETMKETPAYTLTSVLADLGGLTGLWIGASVVSMLEIVSLICMAANGYYKDKTEERKSSLSAQSHHSIPVQRASRGSLNTLHKSSTTQSVKLSVIDIRSLHSNHSSKSKQSIFIEDLPPAIQEQSDDEETSESSRTNGSCRYLAPGEDLPCLCKYHSDGTIKVMKALCPVHGYMVRRNYDYSVSNSEEEDVEDEVHLEPEPFYTAPYEHRKK >BP:CBP00170 MDTEHRVILNVGGIRHETYSHVLKKIPATRLSRLTPNTANYDPVLNEYFFDRHPGVFSMIMNYYRTGKLHYPTNVCGPLFEEELEFWGLDANQVEPCCWMTYTQHRDTQETLAVIESLDLDGDPPSQEEIAKKFGWEDDFHSGSLSQWQRLKPRVWSLFDEPYSSKYARAISCISVAFILVSTCSFILKTDPSFQIPDIDVFYSLRVVDENGFKNYHKTIGTDKPVTSPHPNFFYVDLICNIWFTFELFIRSIFCPSFHKFVRSPLTIIDVVSTGAFFFESLLHAILIQTGSLVTLDFLSMICVLRLFKLTQHFSGLKILIQTFKASAQELSLLVFFVVLAIVIFAALVYYAERSQLNKDNQFTSIPLGLWWSLVTISTVGFGDMVPKTYLGMLVGSLCALMGVLTIALPVPVIVSNFSNLYSHSQARGKLPKKRRRVLVSLVNIIFVIISIVCFCLKTHPNYRIPDIDISTHMGNLSIGNGPSKIQLNTIYVGKMATRAHPAFFYVELFCNIWFSAEFLVRMVFCPNLGRFLKTPVNIIDFIATVSFYIDWALDRALSGSNRDSVEFFSIIRILRLFKLTQHSTGLKILIQTFKASAQELFLLVFFVLLGIVIFAALVYYAERVERNENNQFSSIPVPQTSLGRVVGSVCALMGVLTIALPVPVIVSNFAMFYSHAQARSKLPKKRRRVLQANEAKVGRGTAAVMINAFTPRGPVGGGGSNPSDGNPLSAFSKTPLLVCTPDGTDKPRRLSQNKNGGNVPPVTQNNNCKANKLI >BP:CBP00175 MSLRFLFAFYVFYDVRASVDEYRLLQYLKENYDSFERPVENSSAPLDVQVRFLLNQILDIDEKNQVMSILAYMDYHWNDYKLKWDPKMFGGIRDVRFSGDDDASFKLWRPDVLLFNSVSESFDSTYSSRFIVSSNGDVQQNPPGIFRFICQIDVTYYPFDRQTCFLKLGSWTYNGQYINLDFLLREIIGLHGKPIIVEPERSSTNSASYFVNESIDLQVYLQNGEWDLEGTPGKRVVQKFGTDEYHELYFYIHIRRRTLAYGINLIIPSLVISMMTILGFTLPPDACEKITLETTVLLSVIFFLQMVSNTSPPQSQSVPILAAFFSCCLMLVACSCVFTVLTLSLHHRKPETHEMSPTMRKIFIDWLPYILCMCKPDHPKTPKPKVLGKSIAPIHRLSTIPMLNLPRVSQTQFPDRSVFVYHEVPAIIKNTSRICSELLIIEKDIEKMVNKIEEDSKEEMLRSEWRFAAMAVDRLCLYVFSAFITVITCGLIVPHIIANL >BP:CBP00176 MSNWDYIDEVDIIPKLPPNFDELRESKKWQERKEALEALLKVLTDSERLSTKVSYAELIGNVQTVLAKDANINCQALAAKCIAKFATGLRTKFSAFATPLLPVIFDKMKEKKPTLREPLVECAMEVGRTMPSLEAGQEDILAALAKPNPQIKQQTALFVAKQLDLVVPAKQPKGFIKAAVPVFGKLTGDADQDVREASLQALGAVQRIIGDKNVKSLLGDLSSDEGKMKKIGEYADKSAASYAEEQAKNAPPPSSSASAPSAAAASGSSGNVTSAAVTTAEPAAEADPWDFLDAFDVLSKMPEGFDTNIESKKWQERKEALEGLQQLLTANPKLDPKANYGALVERLQKVLEKDANINVAALAANCITGIANGLRTKFQAFAISVAPIVFEKFKEKKPTLRDPLVACIDAVVATSNLEALGEIVLTALGKPNPSIKTQTDLFLQRTFMKLNSQTMPKKTLKTLVPLLIKHSGDSDAEVRDASYAAMGAMMRAIGEKPSLQLLADIVTDNLKMGKIKEYHQKALAEAGPAEIAAMVQSMHKADAPPAAAAPPKKAAPPPKRQESEEEQVEEEEEPLKLPAEEKKKAAPTKENAENEPPVAPKTELLLNDNGEKAQRIKEEKQLKLVKWNFQTPTDEHIAQLQTLLGNQAKVSLMSQLFHKDFKQHLAALDTLIRLADTAPRSLLANSDLLLKWCTLRFFETNPAALIKVLELCRVLVELTRDTETPMSQEELTAFVPYLLLKTGEAKENMRTAVRDIINVLSDIVGPLKMTPMLLDALKSKNARQRSECLLVIESYISSSGISPLKSLTVEKIVAPFVGDKDVNVRNAAINVLVACFKFEGDQMWKAAGRMADKDKSLVEERIKRSGVKAGSGVATSPPNGGPKIVVPQQQQSVVRRPASRSRTREPEPEDDYQDQRAIANSTFTKGNSSSRYALRDDVFATAINRLADSTYVVTPPQPPSAWANNTFQMKRTNSSSSISSIDTSDQIQRSINNISSSLADVAQDAMYQVTYVLNQPEQRHLVDRKADMVFRASAAQLDMIIDEFKAGKDVTGTMDACSQMLFILMGGVEAEHGLEPLNASPETVKAIISSVLRCITQIGSTDAGYTMARSLNRLAMRLVYRVELSNLLCGLILAMIESIQLNSGITDLVSKLSSKWCDELEKRRAQLRASDIVDVFNQFYICTLTEQKMDITHIHIQVVDNYLERVILQQGDVVLDAARRLSSPHIHLTRMINKILQMMKEQNIDPIMPGTLDARAPDEEEAVVVRTGVQVCVNNILRDLKNVSTYNEQLNKLVQSSDKCRNEYSELVKNHALGEAVEELVSEQTIHGAPNFNKPDVVNAMTMTWKALDLLGPTRAETPTTPPQNLSRMDTTIVGTPLSRAEGAGTITRARGNIMRPKQRPTMSREQHEELRNRLQQAK >BP:CBP00179 KSKKLEQKPDWDTLDGIGFEFEENKPIVMDPRFYDMLKLPQCDLTKDKVPSKINIKEAMNQFQQCVRPIVERWRGDIKSMNTKFSETRLCEAAFKDMDVIPMTNLHETKWAILPHCVRENPVEQTCIFTFIERGEYHDWGIGLHCDMLVFAGTLGYSSSYKHHQVKLRTKICTNAPEHKFFGADPIIEPNRQLYTAFGKYFPFAIGKKPGFTKFRVLPNQNQKTRKYEFQDVTTIPFTYFLWDILGLKQIDIAWIDIEGGEFEFLDQFYRGGPMDEKGIVICQFNLEVHSKFNPPGAQVFHDFVFRILDDKRYIFTKVLNTDVGIHRMFFVNVEDEKCVRKFLQ >BP:CBP00188 MSFAQSFYADQKKVEQQPRQQENASPLTTAAIPAHTPIAEDPLTPAQIREAIRIYRSVLSTNSAPASPVRAPAAPPIAERPEVHSNYYGGGPTDIPQSYLLNYATSSPQQPASAPATQAPEPLFTEQQLIAQLQALQVQQQQVAEPVCEVPVVQQQQQPKAAPNKAPVLQKMYDDEESGYCFNRKGRDEDGPEEIPEAHVATPTSAPAANYSIPAPQQQVNYSPAPVANNYSKVVCGPSEYIGMANDNKFIYDAQKALPVSYAQNNSYTLVNPTAQAPIAQPRFEETDDQGVTTTEDVTQVPASPAVTSRFRGMIRNAQTPVQAPPAPIVVERVAEPVNTTPSHNYNNYGAFMPVNQMSMESEYQLPVLNDLASCIEHY >BP:CBP00192 SKFWKIKQLFIFILVALAANFNYGFSTTYINTSVDQFKNFLNTSLSHRHVVMTETKYDIIWNLFLNCWFVGYFVGVWFSPIFIGFLIGNSTAFLASILQCLAILWYCPELLIVSRFITSICMAVTYQSCILFLQLVTRTSGKHKPTFFECSPTHLRGSFSFLSEVSYSSMTMVGSFLGQDYILGSHLFWLCFFVVPFCLFFTLALFLLPETPKFLLISKDSEEQATESVKYYHGVDSDAKQVLEEIRKEAECENDPLEDSTTFRKMKELFTEPHLRMALILSVSALTNTVGLWALLLSSTFFLENANVESEVAEWSTTAMSLAYVSGTVTGGIIIEKVGRRTLLLLFTFLNNLALLAFVFFAKIRILIDPMKYGCLGALIIYGYTYGTGVGPISWFISSELVPQKHRSIAQSVAYAINTLMVVISTFTVLPLYSVIGSYAFVILYSIPSFISMLILFRYLPETKRREIHDIVNELKNK >BP:CBP00210 MANIPSFIDRLLSVNDTANPSLTHCIKEAEIDDVIQMCTQIILEQATMVEVQAPIAVCGDIHGQYVDLLRIFNRCNFPPDQNYLFLGDYVDRGRQQLEVICLLMAYKIRYRNTFFILRGNHECASINRTYGFYDECKRRYSLSLYNAFQDLFNGLPLCAMISGRIFCMHGGLSPQLESWKQLAAIKRPFDPPNKSIAMDLLWADPENNMNGWAKNSRGVSYIFGADVVKDFTDKMNIDLIARGHQVVQDGYEFFAGKRLVTIFSAPKYCGEFDNNAGVMIVDERLIISFDILKPAIREVTIRARGTSKNASTRSMLVSSRGPKSKMG >BP:CBP00211 LEHPVFLKDILHTITYFAIPIHIFGTYCILFKTPKTMGSVKWIMLNFHVWCMCLDYGLTVLTVPIVIFPALGGYPFGILTEWGVSAEFQTYLIVTLIPVVSAAVITIFENRYFLVFGHNSKWRRFRVLLSIFNYLYAATWCLPSFMIIPEQNMARKVALEMLGPNVSDYIRHFPIFMMSLEITYLTLPCLLIVLTFATEVILFVAIIKKGMTELAKTARFSKNTLKMQKNFLKAVYIQVSMYMTSIQLPLAYFFVSIFFKIYNQSANNFCFVVFSLNGLSSTILMLWVHTPYRDFCYKLLRIEKWRKKIGQANSQDNVVSVAPTA >BP:CBP00214 SKEKVPEEDLNLPYFHGALMNQDADQLLVNDGDFMVTMKLQIDINKLVVYLAVRLKKGIRRYEIKRLPGSAKLGSRSKETIDKLINSLKTDVLEIKGEKIVLKRAIAKGKFQLMHKDVIFKKKIGAGAYGTVYRGRLVKTNEVIAVKKLDPESADEDGLAEMMKEARVMQLYDHPNIVKFHGFILDDLPYLLVLEFCNGGSVEDRLRDKGSRLTVPTRVHYTYMAACGMDYLHKKGCIHRDIASRNCLIHRGIVKMADFGMCRATTVYKMDMSKPCNVRWLAPEVWDNGETRFNTDVYAFGIMMWEFFEIPYATPYAEMKAGQVKRKTRTGYRLPPPAAMPKEVGDIMKECCQPAADKRPNAEKLKEMLEEVYKKQNPTETTHNSS >BP:CBP00223 SRAAEMAGGNSEEGKGMLLRNGDDKVRHPSPQRGTPDSSSTQGHQFIDQIVTINVSGMRFQTFESTLARYPHSLLGDPTKRQHYFVPDTNEYFFDRHRTTFESILYIYQSGGRVKRPEIVPIDIFLREMRFYEMGDELLEEFWIAEGYEKPKEVMMPTNKTQRKIWELMEYPDSSLSARIIAFISIFVIALSIISFCWETVPSDNDDKVINMTTGELIDELDEKHYSPFFWIELMCILWFTIELILRFISCPCKVTFVTSILNIIDFVAIAPFFVNFFLADTNKSNSSMSFAVLRVLRLVRVFRVFKLSRHSVGLQILGKTFRSSVQEFCLLIFFMAIALVLFASGMYFAEQGEPNSKFTSIPASFWFVLVTMTTVGYGDLVPLSPFGKVVGSMCALIGVLTLALPVPIIVANFKHFYRQENRLASMKSTTKGDHEDDDVA >BP:CBP00226 MHPRGKFLAGHLSAFYIAPATTAALISRNHNDWAHLQLLRRTPSSDAGTMNQVHFGRTSARRRNAMILENNSGDGDDEDRPKEEIFRKIESYQFSRFQTSVINSAKLWASRNRSLKLINNFLPGFLANLRLALFHLVLIFATVAYIIAGAYLFTKIEHQAELDRYQSYHSIYKNFVQNLIYDSSGNRSVSEVENMIDAFTSINFRAFKDGLKPTDFLVPQETSRWSMISAIFFTTTVLTSIGYGNLIPISTGGKIFCVGYAIIPLTLVTIADLAKFVADMLIMDPTEDPKTGRQLLVLVFLLGYMTISACVYTILEPMWSFLDSFYFCLVSLLTVGFGDLYPSGTVEYMLCSIVFIFIGLILTTLAVDVSGSVGIAKMHSIGRGFDAMKMLNVLR >BP:CBP00231 NAMLIYLILKRTPLLMKSYSVYLMNFAFFDFATCIISFFSCQKVIFSGWSLIYIFHGPCKHVSSWFCYFCHCFECHTLAHSQWILLGSFMYRYDVLKGSTPTVQKMWRNSGAFYSMSLCFLVVYLFDISDSEELLRIMTDLHPEYHYDDGTGNISMFAPITFISIMYMTTPCVPIYCAILYFRHHTLKILNNPSINLSPAAKISHQKLVRALTVQAGIPIFWLVASGIYSLAQFGFISGPIPENITFRLMDCIPMVSPIVTIAFIQPYRDGLLHLFHKGSSIFIPNTIGSSVVDVS >BP:CBP00234 MGMSTNKCGARWTSWLTKNMLLLMTMAGIVMGVIIGGVLRNLEPSQEIVKYVGFPGELFMNMLKAMVLPLIAASIVSGLSQLDGKTSGRLGSRAVMYYVITTTHAVILGIIVVSIIHPGDPTIKQKMGIEEGATANESAAQKFLDLFRNAFPENIMRATFSQYQTHYVNVTNSNGIQKTELKTGYVDGMNVLGIIVFCIVMGLVISKIGEEAKPLANLFHALDVVITRMVMIIMWLGPIGIPSLIAQKMLEVSDLWQTARVLGLFVFTVILGLGIQAFITLPLIYVIGTRHNPYKFLSGLGQAIMTALGTSSSAASLPVTFRCLNKLGIDPRVTKFVLPVGAMVNMDGTALYEATASIFIAQMNGLDLSAGQIITVSITATLASIGAASIPSAGLVTMLIVLTALGLPANDISLILAVDWVLDRLRTSVNVIGDALGCGFVHHICADHLNADVAEAEKAHAFVEAHGVNFDELEKEIEQENNNHKTIQHV >BP:CBP00238 MLKPLFGKADKTPADVVKNLRDALLVIDRQSATQNERKVEKAIEETAKMLALAKTFIYGSDANEPNNEQVTQLAQEVYNANILPMLIKHLHKFEFECKKDVASVFNNLLRRQIGTRSPTVEYLAARPEILITLLLGYEQPDIALTCGSMLREAVRHEHLARIVLYSEYFQRFFVFVQSDVFDIATDAFSTFKDLMTKHKNMCAEYLDNNYDRFFTAYAALTNSENYVTRRQSLKLLGELLLDRHNFSTMNKYITSPENLKTVMELLRDKRRNIQYEAFHVFKIFVANPNKPRPITDILNRNRDKLVEFLTAFHNDRTNDEQFNDEKAYLIKQIQELRV >BP:CBP00251 MTSEYGCNVCNEEYSVQDPLKCPRVLTGCGHTICHSCAMIIAGRNISIFCPFDRTSTNLPGGDLNNLKKNFALLELLEKIADTGGISEIGEGVQKHDRYAKDRLLNVKCDEDSEHVAVFYCTVCDSNLCDRCSEFTHSTNVLSKHRRVPLTEKPVPKVCCRLHSSYVVEFVCKEVSCDNESPLMCLMCRDYGRHKGHCHVLIEKEVDDLREKLREHLGELTRQSEIVERSLNSINSTIHELTPETDDGSLEETKQEASIRNHFYRLHSTLDQDEIHALETLDRYARNRLESLQAQKDRLEAVSTKIGSTCITLQKALVLEKDNILDRKDDLLALAESTNAEPTEVPDRSQLRTRIAFSFSNDRKLHIGDFIEARVVLLGLDGSGKTSIVRRLKKVRIDAVMAPHPTSGFNIETIHYKNYRLNVWDVGGLPKLRNLWKHYYSNAQAIFYVIDGHAVERFNEAIKELNKVMSDPLLISCPVIVAINRKGGASSLNGHMDVLMSQLEALPFQHELHFCDAAQGSGIDQILDQITVCLSRLNGTCPV >BP:CBP00252 MTSFLKLVVVGMILVGVAHGASVATADAKGTNCTLTDGFQALSCIMRLSDFAEKIDELDMDDKNEVKEFKKSCDSLEKCFSMLTCGKQQDAETKQAVSSIRNYCDAVVYMAADFGECSEKLEKNKSECFENWDPFPDAIDEEKDEKKKEELKKNACKNYFGKDQCLKKLITETCSEKEWQGFRDHFISISSVLLTCDFKDV >BP:CBP00254 SILNWTIFYAINKLQSFNLAFGYLSANQALADALHSTTFLLYFCPMVLLDQPLMKEFSHYCGFILLFCYELSVKIHLAISINRFCAVWAPYKYKHIFSDRNTKIYIFGIWVFTGSVAVLFYEKFCHFFYDDQIHFLTFTNNSFCGYIGWYGDFLKNAAIVAAVVSIDIFTILKVRQMSKKVVSNISNQSQNNLSHREVRFLKQTVTQGAVFMLELLTYFFVPLYFENKWIVFFGTSFAWVAVHAVDGMVVVLLNSEVRSFLIGQRSKSHGPSTNRATA >BP:CBP00262 CVASSQYLGDPEVYKLVFHILTCIEIPIHIYGAWCIIFKTSALMRSVKYLLLWSHFLSAQLDLLFSFISIPYMLLLSFSGYALGIFDQPRWEVYICLIVTAFVVTSILGIYENRFFVLYGYRENPSWCRIRKPFIAFNYFLAVIFIAPMYFLDPDQEIGFQNLATVLPCSPESAIGDRRIYVAFTDSLLPYIGLSLEALLLACEIVVFLVITISKLKSRDGQNCSQLSVKTKKLQKNFIKALFAKSSIPITFLLTPVLYVLVTMQLTYRNQNLSNVCVMLASSHGLFSTIVMVLVHQPYREATWNNLYFCFRCKR >BP:CBP00263 PDSESWLDSPETVLIFSHIMALLVTPLHLFGAYCILKKTPSTMHSVKLTLLNFHFWNVLVDLMLNVFAIPFPLFPSASGFLLGLFSYWGIRQTVQLWILITSLCFICVSTTMIFENRFRLLNHKNKHWKKFQPFWVVGNILFVFIFLIPTMLQVPDQDQARQMVFSKLPCTPEHSIDDRRIFVGAIDLNFTFFSLTIEAILLFIEIATFFFIVFFKLVHRNKRKMSLMSNRTHGLQTKFVIALCLQTISPCLLISIPVEYLALATYLNYYNTSLNRFSMILFGLHGVCSTLTMIFVHQPYREATVDNFYWLMMCRQNSKKISV >BP:CBP00264 MATPSPSTSNDSSDFEKICTICGRPAFVRYYGAVACGPCKMFFRRMVIEKLTYKCKKIKICYITEPKPLKCKSCRFKRCVEVGMKLPPTNCTVLELKNREDDELVRLFGFLKIRDDQRMETYMNFYTTQNPSLEDILDGVKPVKMDVERSMITPVEWSFTAILSVINHFRSFDFEQLESRDKKLIFQFNTFKSNILCGAVRACKEHREKMVTPSGHDIFPDILVTKFNASAELLNRICCQVVARLMELKVTDEEFVLLNIIFFCNSADAHSDKAKSILAARQRFYVSALFKYCQLTYQNNAPSRLNELLSVYHIVQKNASEMQYIGIMIHGFIPNFPIRKLVSDTYML >BP:CBP00268 RNYIFPLCIGSLVLGTYLYSFIFKEARYTVILDGKEVNFTGVEDFIQPYVNIVSDFFVASNYKMMSCGIRKSMSQLTVNTMCLLHDEERFLQENHSLNETWVTIRSCQNNQAFRKPSEDLLNNPETIRFAFIRDPIERFVSLYLDKCVKEQNCWACKNDMRCVVKEIYEALKNLQNHRDWKPIPTYMDWHAAPLSWNCNFDKDLSKWTLLMMGADAEERKSSILQLGNIMKRRGVSENVVQMVQEQSLAGETAHSTHKSTRRLEAERQVREDPVVRDYLHKIYFFDYLVFPFNRERLDAKYQTDFWKVPE >BP:CBP00282 AAAETNQTGSVGWSVCGGAVPLAIERLRQFGFVENFDFEYIVEYTECDLGSVVRAGMKFIKEDKVDVIIGPPCAQALRTMSILASNSRKPVLGYGFVSDSDLSDVIRFPYLTTVLPNSQMLGFAVAKVLQQYHWSRVAMLYYQSDIQYCSSVMTDVESTLSDPEADFDVNIVIKAEIYLNDNQTTDIVLQSVKSRARIILWCSQTAFEKRDYLLKMSGHDMISDEYVHIMLSMRNIAFGVQSSLGKSVFSQSGLTPIWESFSEGTDGFESIAKQAAQRMLVLDVNSEVTDKAYLHYMQNNIIRAVREAPMNCSTMACMSANNTVMGAYARHLFDVVYLYGVALTHTNSTDPEVYSNVDVIVPQFITSFQGMTGEVKISTNLTRMSIFQLYGLNEHYDQVAYINFTFLNEKMNVSLFYKDEGPTVWHFYSNHRPLDIPICGFLGKSCPVSFFQQYQLLIIVALVVIILMLITLIIGCCFIMSSRRAEQLRINSEWQIPFLSLMEPENRKNAHHTSKRSLQSAQTGESKTTAVSDFCENYTIMIYEKDMVLTMKYQYMNLTKSDMEKFVKLRKLEHENLNKFIGLSIDGSQFISVTKLCSRGSLQDILSRGNFSMDYFFMFCIIKDVAEGLNYLHKSFLRLHGNLRSATCLVNDSWQVKLAEFGIENLVENEIPPKKRLLWVAPEVLRGSLTVSQMDPSADVYSFAIVASEILTKKEAWDFLDRKEDSEEIVYMVKKGGVFPIRPELITDIPDVNPDLTERLKAGQTVEPEGFDSVTVFFSDVVKFTQLSQKCSPFQVVNLLNDLYSNFDTIIEEHGVYKVESIGDGYLCSLQYSRQVAERLKAGQTVEPEGFDSVTVFFSDVVKFTQLSQKCSPFQVVNLLNDLYSNFDTIIEEHGVYKVESIGDGYLCVSGLPTRNGYAHIKQIVDMSLQFMEYCRKFKIPHLPREQVELRIGVNSG >BP:CBP00283 MECNDTRLFDTSNNVTYFIIEQFYRFRYLYSNVHPYLSFVLCILGLAANLIHICVLTRPRMRHSSVHTVLVCIAFSDMGTMSSYLLYISRFEFLPEKEGYPYIWALFLKCHAMVSIALHAITLYLVVLMAFIRLSAMKLTTSRWLDHTRALTSAIFIALFVFIMCVPTLLAHQIDETTRGVTLTGMYYRYSVGFSTLMLQNGCFLMKGNLWLTGIFLKALPCLLLLTFTIALIHRLRENNEKRKILIKEERAKKRGDFTTYMLLLMVTVFLFTELPQGIMAIMNALFTTQFHQMVYLNLADVLDLLSLINCYVAFLVYSFTSSRYRQTLFSLLPLTRISYSGISTRQGTLRSHPNQPAAPKTLVQRANSVEVASVRSPLVDKSAATTRPNSAQPTEF >BP:CBP00296 LHALETEKNVFSQFYAKKWPRQLRKPKNREISNFKHSEGAEFAAKSYFWDNNWDFDLPELPKPEQMIMPLPTSTPDVYDDFAFYRVLMEKEDKYILVACHANVHGFHRGDLRFLEINSRSRLNRLEGQSVIGSLFLGDIVAVTELARNSEAISPVRDVDVSLVTPDTSCYWIVSKMILYPRNVDKKSPVLFSIVNRMAAIKGENEPMNLNVDNWDMMHADSIYTGLTFRPETLEYHFSKDYQKKKINELVVSARTIRSYPGIYGTIFKFKEGDHREEFKKEMHLNTYTDESKELKRLAELEHEKNVFSQYYQKKSGNRRENHRGRKKPSSCKHHEAIEFAAKSNLWDNNWDKDLPMLPRSQEIIMPLPASAPAQTEVCGLYRVLMEKNDKYILIACHVNVHGYHRGDLRFLEVNSRSRLKGLSEQSVIGSLFLGDIVAVTELARNSNAQSSVRDVKVSSVTQETRCYWIVSNMILYPRILKPDVTFSFLKNRMAVVKGEDEPMRVNCDDWKTVAPDLIYTGMAFSPIKLDDNFSDDFQRKSKNLLISNVLKISSYPNAFGIIYSYEECSEQNEEFKIGTKAYSDTLEIHKYKRERIVETCSLMGFSAANTIFNGRFDCRAFHMYDVSKEGPTVRFRIENPRNRPTLGLWNNGNKILIGGPTGDTNGTIETVMCNSSHMGWLKIAARLTRECPKDFRFNGDLFVSQREPKDHYYLYDGYFQDMAPESNGRKIIETLYGGKPLELRTGDVGGEYFFPSTPEPIRLNVFQKEYVQMLLDGNPLVIGSSPFGCGKSMTIITAALEIYKRNAERNLVGKTHQLLITQSNFASVNLIEIARKTCNSGDEKLRNMKFMRFITDKNWNEQPDHGRTKFDMPFLMNKVFKQWAIGELDGNELMTHHTKSMIAHIIRNGTVTVDELCSAARRVFDKYGDCKIPFSGHLTEAFFILYEPDLIMTTADSSKSVCTLLDKKYETNKNECTTVQIDEASQLPEYTLLGLLKTYNKANFGLIGDIHQLPPFCMEELEGRLKEFGIGNTMERAIQNKLFPISNLRYVYRCHPQTTALLSELFYDGKLISGVTESQRNEFMIKRKDFWPNPSYPVMIINHMGTCQRMGTSAQNHSEKDLVSYMVQNLLDQRKYTLKPQDIGVISFYAAQTSLLTEQLRRSGVKCGTVDAFQGSEKEVIILCCTNEHATEFMQCKFRLNVALSRAKQATVIVGNLGYLRKAKYWNAIVKRVEAYGNL >BP:CBP00300 MIFHGEKLEHHDTPVHDFLMDRFERHEKNDPNCLAFTTAENEQDSISYKNLKKKIIQISEWFLENGYKKGDVVLLAAHNNWRCFAFCMGAWRAGLVVSAASSQFTAYEMNYQIEDSHSQLILADAQTLPVVLEASKNLKFVKNVVSIAPNSPKPVIEFEVLTSRLIRNLKMPKIDPMNDLVLLPYSSGTTGKPKGVMITHLNVSMMMVSCIQFHDAIAKSYGLPPDFIFPHELHFLPLYHVMGLFRALLTSYRGSNQILFTKFDMELMLKSVEKYSIAILAAVPAIIVRMVNFPLLKNYDLSSLGTISVGSAPLPDGALQKLKKLIPDLRIVQGYGMTEFSFATHMQSPDCADGSVGRPVPGTSMKVKKEDGTLCGPHEVGELWIKGPQMMKGYWKKEAATQELKDEDGFMRTGDIVYFNENGDTFICDRIKELIKVNAKQVAPAELESVILEHDDVADVCVFGVDDKDSGERPVACVVSKQGKRDLETMKAIMRHINQKLARYKHIKEIEFVGEILRTGTGKILRRTMKKAFLDAKKSRL >BP:CBP00304 TLYYVITHKFDLWPDAYECSGNYTVPTARWPKFGIYLWTSGSIFLTLYILCFIAICKIKSSAPVYQLMFFIAIFDIIAIIVGSLILGYLTFHGIFFCQCPLFFFIIGSLAMFTWLFNCVSCIILAIERCSEVNPKFFLSFLFGKKVFRVVKTLVFIYGINGLMFSKPVIFSPEYTSFIYDPMIGKDIILQGVVMCFFHSAAACIYEYMAYFTPTLYVIVAGEVVYQLACSCLSVVYLTLNRTIRNTVVKMVIPKSIRAKYGWHIGVEEHLAVEQAAESNGIALVNASGMPVKFDNFFVN >BP:CBP00305 MTMNLIPRPIIGSYFMISGIALIIIYLPCFVVMIKSKCRAPSYQLMMLLAIFDLTSLMVNSVTTGILGIMGASFCHYPLFVFTAGSIGLGSWMGGCVVCILLAVDRCVEINSNFPLAIIFHKQVFRLVMLVICIYWVYASFFTNPLLFTAQYSSWFFDPFIGKEGDLYHNIPHTINNLLVSASSTPLYIYLCYHLIFKFGYSTSMWLYRSKQQIIIQAVILCFFHATAACIYVYMQFFPTPSWLIIIGQLAWQYSNGCVCLAYWTLNRTIRNAAIRMMLSKRIRKRFKLHMGIDEQIAAERDGEVASVSNVMNLMSGTAKVAPFLCE >BP:CBP00306 ALQMSLYHVFTNSFTLWDEAYDCPQNLTNLKFERPVLGSFFLFFGVMFIVINSVCTGIFDILGISFCHSPLIIFCLGAIAGGSWMAGCLACVMLAIERCVEINPQFPLEFLFRKSVFPFVRILMGMYTLYAYLFVKGLTFSSQFSCWFFDPLIGKDPLLYHSYPHTINNFAVGIATTALYIYISYRLICKFGYTTSMWLYKTKRQILFQAITLCIFHTAAAFIYEYMQFIEVTPVIIIASQFIWQWSNGAVCLAYLIFNRTIRNLVVKIMVPKSVRKRFGWYIGADEHIALEEAGGPTLSAGLGTVNAIGGVIKFDNFM >BP:CBP00307 MSDLQMSMAYMLTHSFTLYPEIYKCPGNTSAMRTKRPILGTYFLASGLIFILLYTPCFIVMVRSKCRVPAFQVMLILAVFDLLSLSVNSVITGLLDIMGFSFSHFPVFIFCAGAIGKGSWMGGCVACILLAVDRCVEVNAKFRLGFLFKKKVFRVVMGLMVLYWVYSCGFTKPLLFKAEYSSWFFDPKIGKEPYLYHSIDHTINNLVVSLATTSLYIYLCYHLIYKIGYSTSMWLYRSKQQIIIQAVILCSFHAIAAYIYVYMQFFYSPPWLIIIGQLAWQWSNGCFCVAYLTLNQAIRNAVVRMLVPKKLRERFDLHIGIDEHLTSVKQITQINTVSI >BP:CBP00308 IDMSLFRLLSDFFDLPAEYQCPDCLQNDYFVRLRLGIYFLLSGILLILLYIPCFIVMLKSKSRNPSFRVMIILAVFDIINLAVNSVSTGIFSILGASFCQYPRLIFIVGAIGNGTWMAGCAMCILLAMDRCVEIHSKFFLAFLFHKKAFRVVLGVVGMYWMYSVWFTKPLLFSARYSSWFFDPKINRDPNIYRNVPHTINNLVVSASTTGLYIYMCIFLLYKKGKSTNSMWMSRNKNQVILQAIIICSFHALAAYIYVYMQLFYSPPLLIILGQLTWQWSNGCFCVVYLTINKSIRSSVKKMLL >BP:CBP00309 FQMSTFYLFTNDFALWDEAYGCPKNLTTIRFERPVLGGFFAFSGVLFIILYILCLIAMLKRDLIRHPAYKIMVCLAMFDIPSLFIACIFTGYFGYFGIYFCDYPRLIFVLGSFAFGLWMGCTFSCSALALCRISGVNHNLEIGYIFKSHCIYYLIVIIFALPSYGIFFTEPLIFRTEYMSWFFDPGTGLFDSSNYHNISQVINNAAESVITTILYAYLVFYIIRNLTNVILSAHDVRVQRQVILQATIICFFHSLASSVYVYMQFFYSPAWLVIFAQISWHICTG >BP:CBP00311 LSSPEFLKITFHVITIIAIPIHTFGFYCIIRKTPKHMDSVKMLLFNLHCWCVLLDIAITVFGIPYIFLPALAGYQLGFVDAPALVFYLVVTFLTGVSTSIFVIYENRYHILFGRNCSWRFFRKYCIVLSYCLVPLYFVAPIFSVPEQETARKIVWESLSCAPEIPEGHFDFFVISLNIRLMAITIAIAEGVPFFQILIFFSLNFYNLILARQPSGLSRKTTQMQNRLVLALFVQSSVTLVLFVVPVNSIILSVYTGYQNQILNNFIFLAFASHGIASTVIMVVVHNPYRRFLRSLSLQSSRKFTIMVINSEIRF >BP:CBP00312 IKMIQCPTDDTYLASPEFLSFALHTLTCISLPLHVLGFYCILEKTPKTMGSVKLLLLNIHTCGFFLDILITILGVPYGIFPAMAGYGLGFVDLPGLCLYLIVMTINAISVGIFLIFENRFFILFAENSWWRHFRKPVFVASYAVSVIYFLPAQFLIPEQEGARKFVWEMLPELPQEIYDAPVFVLAIDFHYVVIPVFIMSNLLIAESGCFIILIYGNMNERTKKLSLSRHTIKMQRKFLRALNIQTAIPLLYLMLPMGYLVTSRIFNLYFQSANNLCFIIIGLHGLFSTIIMLYIHAPYREVCKKVFHCK >BP:CBP00315 MDNLLRRDYLDGVDSLAEFLQYNFTVPCNGVKGKNQIDCSFSDLCSGQCNDNQVIPLFNLIYRNASSRLHPNFRLTYPTMHLYNDEYYVGEHFAGVKIDPKTNVISRVKVVVLYFRTDRQTPQISSVINEWERSLFDYVAHFNHPTLNMTLNSDAMIAREVRTNGLSCVPYFGASVIAVVLFIFATNQREHFVMSHNIVMAILGIAGPLMAVGTTFGFLFLFGFPFNSITLVMPFLIIGVGCDDVFIIIHAMRKTDKRESLENQIAETMEEAGPSITVTSATNILSFAIGIATPTPAISLFCLYTCIAVAVDFVYQLTFFVAVLVFEEKRLEAMRLSKKQEKVEEALGAPKQVLSIQNSIRSTAGAHPLPANPDGIVSRYCRFLKDWRTRVALLLILSGYWTASYYGCKTMEIKMDTTNLIMKDSPLNNIAWIYERFLWSEGQLVLVFVNNPPDLANEHNQHEVLELVRRFETLPYSMGRNSTSIWLRSFLYQSSLYHNTKGFNGLLQEWLDDSEGGGARWNDMLRLKKAENGTILGVDKFMFATACAMGDDANWATREKLQKQWRGVAHEYAHFNVTVFQSYSFYIDQLDSIGGTTMSTVIWAAITMDLACLLMIPGINSILTSTIAMMSINVGVFGLLSVWNVNLDPITMCTTLMSIGFSVDFTAHISYHYYRNPTSWTTDERLADALKSIGWPMIQAATSTVLCIVPLMFNSSYMVWVFVKTILLVTVLGILHGIIFLPALLLTSGDLSRLFGGSSDSKIQPEKKEKLGEISQASSFSSTNSETVLVKKDDSTELKTIPQERGS >BP:CBP00316 MYINWVHHYVPKISFVLSLIANPLFIYLVITCKKTLFGSYRYLLSFFATFNLLASFSDLATPVCVFNYRYVFVTFVADGPFSWKSKYGEQLLYYRCGIVSGTYGILNVHFVFRYLTLKRNAFVNKHFMPYGLILAIMYVAAHIAIWAAVTGLCLHSAQEMRDYIREPFKALHNESFDDITFVAGLFSETTAEIAERSWTGIVLLTVIASYSIVLYIVLGYKIVTGINTKSSTMSKQTAQMQKQLFKALTIQTIIPICVSFMPCSLSFYGAALRIDFVNWVYWGAAVAVSFFPFLDPVAVTLFLPTLRKRL >BP:CBP00325 MWRLAVFLSLAAFFVHDVLGKGDPELKMTTPQIIERWGYPAMIYSVTTDDGYILEMHRIPFGKTNVTWPNGKRPVIFLQHGLLCASSDWVLNLPDQSAGFIFADAGFDVWMGNMRGNTYSMKHKNLKPSHSAFWDWSWDEMATYDLNAMINHVLEVTGQESVYYMGHSQGTLTMFSHLSKDDGSFAKKIKKFFALAPIGSVKHIKGFLAFFANYFSLEFDGWFDIFGAGEFLPNNWAMKLAAKDICGGLQIESDLCDNVLFLIAGPESDQWNQTRVPVYATHDPAGTSTQNIVHWMQMVHHGGVPAYDWGTKENKKKYGQANPPEYDFTAIKGTQIYLYWSDADWLGDKVDITDYLLTHLDPAVIAQNNHLPDYNHLDFTWGLRAPQDIYHPAVELCTNDYLGK >BP:CBP00327 MGALSQLRLLLWKNWLQQLRSPWFALFELVVPLILIGASFGLLIGFSDQFETTYDERRYAAWPVSGSAYDLIMPTNPNDSIKSAIVEPYFLFNSQLTCQFLNTYSTGANSYRMDIILAYAPMSAATTDKIMSIIQSRYSLTDLLSPVAPFIHNLYNITTIPTLNTNMSLKGFNTEGDMVSWMQGQFQSECDNPLLAGIVFDDSITKDLFNDNKRDFTYKIRLSNTHRRSRNAFGDDSYPWDTSVSFAIQYVSGPINPDDNDGGSPGYWQEGFMTVQRAVDVAITELITGSGPPISPLLDSYQVSRFPFPGYSTKIIEVGAYFMPVIVIFSFMTSVIYIVRAVVVEKEDRLKEYMRVMGLSQFINWIAHFLINYAKLTFAVIILTILLHFVALKSDMTLMFVFLMVYAFDVVYFAFLISSFMNSATSATLISVVFWMLLYFWYAFFSSIDQTNPYALGVRLINCLNPDIALNYGLQLLAAYETQAAGLKWNEMFNPPSPDNNLTFGHALAALVIDGIILVILTWYIEAVVPGGDGVPQKPWFFILPSYWFPYSGSKTVNSSDQYEHVEYASHVKLEQEPTDLTPTINVVNLTKTYGTSFFKKLFDCKFGKAGEKRAVSKLNLKMYPGQCTVLLGHNGAGKSTTFSMLTGVASPSSGSAYINNYDIRSSLPKIRRETGLCPQYNTLFGFMTVMEHLEFFAKLKERKWDPEEAREILARLRIDFKADFMAGALSGGQKRKLSLAIALIGGSEVVMLDEPTSGMDPGARHETWTLIQREKERRTILLTTHFMEEADLLGDRIAIMAHGQLECCGSPMYLKQQYGDGYHLTVVYSSTETPDVPKTTEIIREYILEANVFSYIGQEATYLLNAKHRPIFPKLFRELENHQRQCGITSFGVSITTMEEVFLKVGHLAEERYNYEHGIEDESSELIEKDDPMLQNLKAPVRLTGFALQMQHAKAMFFKRGIFFFRKWTQFLPQLAFPVAYLMLMVFTSQVIPSVKEQDPQTISLAPFSTKDKPGHVVSDSGNYVTMNGASTKLSNMVQNTVAALGVNQTVVDISSSVESFIMNQTNALGSRNFGLKYALGFVPSSIGIPGLPIPDLKTIRTYFNNFGLFTPALAITFTDSMLLSQAKNKQYTFTAINHPLPPSTQDTLKNTNRSDGAAFLIAYGLIVAFAVCVAGYSQFLITERKKKSKHMQLLSGIRPWMFWFTAFIWDAVWFVIRIICFDAIFYMFDITAYTHDFGIILILTLSFLLYGWTAIPFTYWFQFFFESAPKGFMMVTMYHILTGMIGSIAVPIIQQTSSMDAGYLWSIIFAWFFPTYNISQIATVTFQNENVRMACQKLDCNVPMFKSVVACCGTASQKLYVDNVLFVGNRKGILVYVIFLAVQGFIYWIMVFMRENDQFGKIFNLIKCWKKKDDHIWDITEGDKEEQRDVEDSDVIAEKSVVQRLANSNETALVSNNLVKWYGNFNAVKGVNFHVNSKDCFGLLGVNGAGKTSTFQMLTGENSISSGDAFVNGWSVKNNWREAGANVGYCPQYDAIIKEMSGEETLYMFARIRGIPEKEIPVKVQAVIHAIGIGMYAKRQIKTYSGGNKRRLSLGIAIVGLPDVLLLDEPTSGVDPKARRIIWNILNRLRDLGTALVLTSHSMDECEALCTELAIMVYGKFRCYGSCQHIKSRYGSGYTLLIRLKNRGDAEKTKSTIQQTFRGSKLKEEHILQHNYDIPREGDSWSRLFEKLETLSTSLNWDDYSLSQTTLEQVFIEFSRDAGQLDVDPYGDVPSLTGSGNKQNGYANRAMSVESITEMGTYF >BP:CBP00329 IPGSIISRGEQPTPSPSDSSQSTLIPNFPWMENIPKIEFTTSKPKKPNAIREGLIEQVRSGKIPRELAPFVNLTKIDEMKKDHNETLDFIIRDEDVADVPDDDVEHRKVNTISHDGNKTIVTISDEARDDLYKHWMDQSLAGLMGAVVTNVINKRKMTKNEKKEHYVCIHESKNVTAHAKCVVTVLDQLKKRNEKLKMYSTLTTRLNSHRKNNRMDNEAFKTTLGHYEKYVKSGAEEFRVKRASGFSIFDELESKRQAAIRGNVQTRKSYTIRENKSLSPLALIARKLTELVRAGKNKKEQPKRWQQVIQDIKEESTRIKSKKRNKDRMKRKFSKFVSTMKEAGINPRKALNTMGMEDLFEDDPILSEKEMELKDRKEMMERMSPDDKILHEPIKLIREAIKIGMTMAGKNASEIGDKKIAFLSPQFMSILPDEVANDTVSLLSPSILALHGEGSTMDRQLSLTKALKLMEDTGQEEWMNFVLEASGVTETVDKMRELEKKEENDEMRKDFIDKDGKPIFFTKENATEIYGEYEAMKLDIIQGVYKNMSQEQMDAMNATGYSILDDRQMEMIYGAGSPYNDSEVLDKFRGIPKESMPSKIEENIRMIAKEELKFELSRK >BP:CBP00332 SSSFTRIPKRDRTSPEKGEPSSKRSAPFTTPSSTTKIGRDSFAVMDTMEVQMNMFQLDITKMPPVIQRLHVDTLIITSKGKEINLNLGTVSTGGDVNSHNRRLAQHEIMRKFFEKKRSLFSSSSYHSLAYDTAACLYIPEGQYRGGEYEEVCLSQQDFAPEEWDIVSKISRRKDDSFIVRIKPAGAVYTQGDELFEPSNRYELTRIVEIVTSQKLNTTDFYQFGNATFPLRAHPNSEPDASSEIRSGFAKVARLTEGREGKHEMLMTVDTKLSPFYKPTSVIRCVLTKIQESRGGGGGGGGYGGRNDSRDSRGSFGGRSDSRDPRGYGGGYDRRSDSRDSRGGRDSYDSRRGGGDSEDFSSHEIDEIARACMESDKFLYSLESALKGLFAEAIHLKGSACTIRITGIKQCTANNTKFTKKDDKGEREISVSDYFYEEYNIKLKYPNLPLIVSKKMKYECFFPMEVLRIIPGQRIKVNKMSATVQSAMTGRNATMPRQHVDLVQRILQDSLKLERNKYMDAFGIELKSTRPVQLKAKILPPAEIRFKNLTYMPEIKRPGFKNPGKFVEPAHIYRVAVVSFDNAIDMRQAEDFCDRLFDYCRDQGIKCDRESKDWSIRELSSSDNVGIKEAMENWMKKKVDIFVGIARDKKPDVHDIMKYYEESVGMQTIQLCKQTVDKMMNPQGGRQTIDNVMRKFNLKCGGTNFYVDIPSNIRGRSICSNTETLHKKLLEKVQFIGFEISHGAARTLYDRSRNQMDGEPSIVGVSYSLKQSTQLGGFSYMQTQREYKIQKLDDAFPKCVKAYAEDAKTLPTRIVIYRVGAGEGDFKRIKEEIQEIRGTFEKIEKGYNPALVFIVAQKGSHTRIFPSRIDGNKAFEQNVPSGTCIDNVVTSFGYDEFILSSQTPLIGTVRPCKYTIIANDPAWSKNELIHLTYFRAFGHQVSYQPPSVPDVLYAAENLAKRGKNNYRVHQRYVSMQAIERRIISENADFVNENMQEQLASAIIDEMSDAMNGMTIPKRNFWA >BP:CBP00334 MTDIEKQTEIREKKGRNVMRELKIQKLCLNICVGESGDRLTRAAKVLEQLTGQTPVFSKARYTVRTFGIRRNEKIAVHCTVRGPKAEEILEKGLKVKEYELYKENFSDTGNFGFGVQEHIDLGIKYDPGIGIYGMDFYVVLNRNGVRVSKRRRAPGRIGPSHRVDKEETIKWFQQKYDGIILPPKPKTKKNVYRRR >BP:CBP00335 MFFVLIVFTFLTWLVVRQYQKVSRLPPGPVSLPLIGNLPQIVYYLYTTGGVVSTLDFFRKRYGNIFTLWVGPIPHVSIADYETSHEVFVKNANKYADKFHSPIFREMRKDIGILTANGDHWQEMRRFALFTFRNMGVGKDLMETRIMEELNASFSENMGLISANGESWAEMRRFALLAFRTMGVGRDLMEERILAELDARCAEIDAEAVNGKTIVHTSEFFDLTVGSVINSVLIGKRFDSHNKDEFLKLKGLLDSADELFTMFELTVPVWLLKKCFPERYARIVEVQEEIINFVSREANERYEKVKSGEYTINADDPQDFVEAYLAKIEEEKEKGTTNFYTMQCLKHVIG >BP:CBP00336 MDGTFFQKDLAPFVKYSLNKKRRWETKGDLNSLKNLQSSYRDMNVVVSDRVWLDMDPYWCFISHINYYHNYFLQFPIRHTYQLDTDNNYRCLSSDSVYGQPLKSLLPENRSPKKSDTLQSATFDMPKVAYHILTPPENYEKLRNEDFCPGSSDRFLKHRSIKHWRRCKKMTEALLAIRYEDFDYLNDPIYFIDNEWDIDFGTPSKL >BP:CBP00337 DSLLSSPEFVSRTFHFLTFITVPVNMLGAYCILFKTPKSMSSVKLVILNLHLCSMTLDIVFSVLIQPVVFFPAVAAYSNGVLKVFGKCAGIELYFAGTMFAGTVVTDHCTPSRKKPACTPEKPGLLFQKSITVVSMSIVSVMENRFYLLFVINTLWRKIRPFVLFFNYFVACTFLIPLLLQAPNQIIAFEIIQKKFPDIPFSSYSDSLFIFSVDSSYVFLSVFLTGALTVSQINLYCFLIILNMRKLSSNGKMSQRTYHLQRRFLIAIGIQIFTPLIVLFVPATYLDFCFIFEYYNQAVNNICMILISFHGWVSAIVMMFIHEPYRKFCL >BP:CBP00341 MHRSLQILCILAVFTSLAYSQGSRDENQSAKRNDFSRDIMSFGKRSADAADMYDRRIMAFGKRQPNFDRDIMSFGKRSAPSDFYRDIMSFGKRSASMYDRDIMSFGKRSAAMEYDRPIMAFGKRAEDYERQIMSFGRRK >BP:CBP00342 MDQFFTKLVALLLILLQIGAILATPIPEAAPEDVETRRELEKRGGARAFYGFYNAGNSKRDQVALPYYLYEKRGGGRAFNHNANLFRYEKRGGGRAFAGSWSPYLERLCDYERSGYPIYFSDNSYY >BP:CBP00343 VSKPIADAVLRYGKDHPVFRNKLLIPIGRGLVRFTSRMRMKRLGLGEPITHAPVSEAAALEQASDFVQQLVLFSYSVGVFASYYFYTKLTTPESLKIEEYNDFKEQQERAIKELRLQIESLEQRLAAQQKRNFFSQLGFSKDEAPNGPSESSKEASGASESSKPSKPSESLKERFQRISSLPIDAAASLILDDEEYLIVRRDTSVGIELSVNFAARGERLRYRIPSSKLRESLAQLALKEAACHVIGS >BP:CBP00344 MWELVSAELFSASNLFLLGFMISALAVSSVFTLSHITPWVRRTRDEYLTPEIVYRSSPEKEFSKLLESERDAPKRYTPSRCYLSVVIPAMNESERIEIMLEDCCDYLEKRSKKDLEFSYEIIVVDDGSTDDTADVVVGISQRRQNIRVLKLKANRGKGGAVKMGVLHSSGKLILFADADGATKFEDFEVLEKEMLRAAGGEPFDESFPAVVVGSRAHLEAASVAERSFFRTVLMHGFHALVWLFAVRTVRDTQCGFKLFSRSIAARIFPVLHVERWAFDAELIFLCEKWTVPVSEVSVRWKEIEGSKITPIWSWLQMGRDLVLIWFRYNIGIWTDSQP >BP:CBP00345 TAISSSPEAPQTMSEVQKVVDDDEDDEWGDFGEAVVAAAPIQNTNPPPTVPPLQMASNDEDDDDWGAFDQARPSTDRSDGPSQLAHQQSLEDWGAFEETQKTSTTNDDNEDDEWQAEFSSASTASTVIPAENLKTLEEMLEDDAFWDDGYCEAMELEEISENDSSSSSPLDIPALFDTEELKELTNEFEDLEKAKYSKLWLSLRVIEEAISQEQKTSTSPAVDSPSVPAVDFDWDTSGLTNPMNRASKQLHEMSQKCRRFVCRATTDCINLLKCNLLLASFNPYNTKTMQIRSVVNALTHRFPNLWKPFSRNFGYKEAYQCSAIIDVDFLGSNGVATAYTSTLQQDLEQFGLTNGSTKSNSNGSSILENLMSRANDSSSTTGRYRTPEVLSLDARQLLERLPDLQYLQSEVLMFPVGTNLPH >BP:CBP00346 YFLLFLAFFIFKINGGSNECYSCSGVCHNEPCNCQMGSCESGQCFIEKKPTEIPGSMKITKGCLRRTSRIHHGCEYDHFSDHILCVCQGHYCNDKVVMNTTRQKYTRTVTCRECSEKQPDCGSTCEGHWCHEDMSTGASGCGYGPPALPFYYRGPELFYYRSKVCITLSRGAGKPRRHCVCSTKMCNTVYNYQFNQYNIKDREKEGSTRARSLTLSATDYTLPLQTCYNCETNTQDATSMSHTTNCRSNRCLGHYCTYAAQRHTSKSSMGRSNMVHAVSELQGCMNVSDKSHIQLGCSRKWISDEYEEIHCACKGSLCNSDSLTATA >BP:CBP00347 MDGVYRLFCGCCGLAGGDPEPPYSQLRHDSVTPIRDPPLQYLNQQQQHQQYPPYALQEQGFVNPVHEFSNFDPRPSFRTRDEADGPNYQHSDSGTPRSGLEDEVEDENREREQLDNIVESTQHSIIAVGQTDVDGVIMMDTQYREKAYKQKVQKMATASSTTQLYEPVHEFQFEPTQTPIQVPLRYDEMSATIDKSPIERMPFACPDFQQMRLARTMGVKNAQFLVEHPDPRHAGKSPAMSSSAKHKITAVLDQVHEGVVGIEVEPRDLIVSMDF >BP:CBP00349 FTWFDGWEYPAYVSHSISLVLIPLNIFGGYCILFQIPKKMEASKWVMINVHFWSSFLDLLVSFLLTPYIFFPAMCGITNGLLSWLHVPIIVQVFLAQWKCILGVGVSLVIIFESRHNVDRFVITRKSSRILFYALNCVYGIFFMTPTYFSLPDQEKAKLELLKIVPCPTPVYFEPNVFVLMDHQGRWFIQLQCTTFFCVLIAQGAFSVSRTVYFLTAYNSKMSEMIQVAIPVFIVILPILYCGCAIEWYWYYQSFSNTAIICVSFHGMSSTIAIF >BP:CBP00354 SSKLQSLQGLRGISILLVLIFHFFPKNFVNGFVGVDMFFVLSGYLMTRILSKEFTVLSVVDFYKKRFSRIVPLYYFTIFFTLLGVLSLVLKSERTEFILDVKWCLALISNYQPIFEHHSYWDQVSTIRFLTHLWSLATELQYYLIVPIVHLVASNLPFVNRITGYLIAIIILFFFQLLTPFELSYCFLAARVWQFLLGSVAFEMSQRNDLVLDFHTEKKNEKTDFNVFDGIPHIFLVVLLTVLMLPWIFQEHSARLVMSLSAAMLCYSCEKLEQSFLTLQPLVFIGDISYVTYLIHWPVINFVRYIQQKDNSSIDVYEALIAVTIIFVLSLLAHYKLERKLLELEFSVNFTITVFVIGICVALIPCLIRMECLAMKTLSKDLQEKAKFNLIEENVLKPVFELECDYNETTIDLPIDKFGIEYCAHVSNGTGKIMIVGNSLSIRAFPTIYKLVDGQYEEIRLFAKHGGAPLLDIFPYYNYVVMDMAQEMKPDLIWIIQGMNEILFGSDNNGNFSSPVMDRNVPRVLGEFEKLAKMVYLDLPYYITKDMPSKLIARSLIYRKSLERLSVSLEDAEKQVEEQTDRLMNVNCSNCYYNDVQKALINDQDKLYLYEKETYKALTYDGSHLALTGYKYIEPLYQRRINQFYEM >BP:CBP00365 MCGIWAIIGEQVTPQQQDAFMKIVGRGPDLTVLDEVQPNVHLGFHRLAIVMPGDTPSAQPIVGGGLSVVCNGEIYNHQSLKIDCPYTLKNGGSDCAAIITSFIKHNEDLKETCASLDGVFAFIMADSKNVYIGRDPIGVRPLFYGYNLNGSLLIGSEVKCIEELCERVEYFPPGCCATISLAAPSRPIQPQQYYSVPSIADRFLSIECTQTLVRDILVKSVEKRLMGNRNFGFMLSGGLDSSLIASIATRFLKQKPVAFSVGFEDSPDLEAARKVADYLKIPHEVLVITPQQCVDIIPEVVFALETFDPLIIRCGIAHYLLCQHISKSSDVKVLLSGEGADELFGSYAYMQRAPNALHLHKEILRRMQHLHQYDVLRCDRSTSCHGLEIRVPFLDKRFIDLVSRLPPTYKLMPMKLEKHLLRSAFEGWLPDEVLWRSKEGFAEALGKTDLGDILASHCDKLISKELYEQRAERFPDRTPETTEEYWYRQIFEETFVYDKMGHLVHTKVYRTAAWHRPDEKENIINSPDSENILDVKSDDLLRLRRRSTGSLGVA >BP:CBP00366 MVVLTKKSVKISYDDVAKSPDQLLRSMSSVHPISDGIPSQQRPLTYRWFPSWRFMTSIMLCFCFGCVHLMNSNMGMAIVCMVNSSVTYDNETYPENAAPLLDWSSDEQGYIFSAFNAGLLVMLFTGGMADKFNAKYMILVSVAIASLANLTLPFMAPISVYWAIFSRFLVGFADALLQPAMNSLITRWFPTSERSYALGLATGGRQIGTLIIIPAAGALCSQTEIFGGWPSIFYLSGFIGIIFIFSYIFLGADKPSKQTCITDNELKFITISNQSEDVGKKRTERKVPWKNILTSGAVWASVISLVCHEFPLMTLIMFLPSYLHDVHHYHSTENGILSALPTVSLWFAKIGSSYLNTWLQKNTSWKKDTICKVLNSIGSIGLGVFLLAATFLDKSHAWMAVLFLCLSMASAGLHTPGCQLALVSVAPAYSGAVTGFTFFFVAVSGIIHPIITKMIVKDRTAAEWNLVFYISTVIAIFPIVIFNVWGSTEVQWWAKSKASMQQDPNNKKMSKSSKAPSTPSIDSIDMA >BP:CBP00368 LLIFVILVSTTFSDFETDLQRIKEEYTCYPNCTFNYTEINSETAKLFPSSCYSICGLITINENTDVSFATLEKLFHRMYTLKGGLRIENTTLRSFSFLQLHGFLSFFCFPFGTRIVNNTELVDAEALENIVHVSNTSHECKMEILDNSKLDASRLCESQFHNSVQNIEVLDNGKDCGCSSGKITPRNLPDFKNCIVLFDGLVLTNMSYNSNLKSLSKIANIRGNVEIAYTNFKDLSFLKSLSKIRGNTFENLETVILDIHDNPKMKRLGLDSVSVSEPTQYVDTLEQDWVPTMNLENLHPDFCITYQEAVSLSYVRFKNLEAKFCETEWKTDMKSCKFKSLRELESDCIIIYGNVLISSGDEEYVEKLEDTVYIFGSLTIQNSELENIRFLKML >BP:CBP00383 MWPDTLYWIFIGIIDILAIILNAILIYFALYRTPKMVRVYTTLIINLAFTDCCSAFLNFFVQQRMIPSGFTIGYISNGWCKLIGYRFCFLSHNLMAHFIVHSNYSLVLSFAYRYYILRKPEPRRKTLLIVLFFTYLPSFLQLVLYQFAESDPSEIVRLLQPYHPTYNFTGLTVSGVADIRSVYALYKILQMTVMTVPIFSTILFLRNKIINRLLYRGINISINTKSLHSQLLMALTYQALLPTLYSINVLMYVLEQFGVYSTAFFENFLMSGLVLIPFFSPFTSFFFFTPYKRILLGMVLKKIDKRPAATSETGPGSFPI >BP:CBP00387 GEDEANRKKFPCEICGKQFNAHYNLTRHMPVHTGERPFVCKVCGKAFRQASTLCRHKIIHTDSKPHKCKTCGKCFNRSSTLNTHVRIHQGFKPFVCEVCGKGFHQNGNYKNHRLTHEETKKYSCTICKRAFHQSYNLAFHMFTHEEHKPFTCHVCSKGFCRNFDLKKHLRKMH >BP:CBP00391 MTINYHKEIMTSHPWTFFLLLFKWKGSIWKAVYMETIIFLIFYGIISVIYKTALGESSQRTFEAVVRYFDKRLSYIPLEFVLGFFVTTVVNRWTKLYQTIGFIDNVGLMANCYIRGATEKARIYRRNIMRYCELVQVLVFRDMSMRTRRRFPTMETIVAAGFMNKHELELYNSYDTKYNSKLGTKYWIPANWALCMTNKARKDGYIESDYFKAQMEAEIRTWRTNIEWVCNYDWVPLPLMYPQLVCLAVNLYFLVSIVARQLVVEKHKIVDEVDVYFPVMTFLQFIFYMGWLKVIDVMLNPFGEDDDDFETNALIDRNITMGLMIADNPMTTPDLRKDPFYDEVDVPLLYSEESSHVPNHHYHGSASEVRLEHRGSGPVTMMPHSQSAANLKRIMSFKSSEDDEEKTNPFSMSHDDARMRNWREVSLDSSFLSDLNENKEWKLPTSQQKF >BP:CBP00394 MDSDDGFDYLFKIVLVGDMGVGKTCVVQRFRSGNFVDRQGTTIGVDFTMKTLNVDGKRVKLQIWDTGGQERFRTITQSYYRSANGIVLCYDITCKQSFGSLQRWIDDVSKFAAPNVAKLLIGTKCDLEDQRAIETEEAELLQRANGMFEMLETSAKNDINVDNAFLELATILKRQYDQGVVEQGASGTFQLGSGGTTSINSPWQRCCQY >BP:CBP00396 RSRTKFRRDSRSRRQTPTSEMRSFVLLILLTSHLSAGSIDWSSLETPPQFTHGKNAETVFFKVEKSGMSDESAKNIPGNLLEQTIHCQAIGNPRPTYRWKKDGKTFLPSMFPEKVVQKPGEGSLVFSRLDETDAGLYQCEAENSNGTAVDRPVRVQETWIRHFKAAEPEVVVVEVGDPYQRNCSPPASNPNARVYWILMGKEPGHFETISSSHISSNEQGTLFFHYVNETDLKSDRYYTCTAENIELKDYKFGNQFSLQITNYKRRSSAPYWPNGPPPNTNTSEGENVSFDCTTYGKPTPKVTFYKNGVELGSQKDDRYMIEGTRLTIYDVKKGTYGKGDNAVYQCKSENKHGWLWTNFYLNLLAFKPQLLIDPGKEEVEAVIGKKVTLECKFFASPNAAVKWEAPMISGSKGNQIPADPHGVGRLVFSEVSASEEGEYECIGTNKYGQASGVITLKVRKPTTVKPFDRAEDVRMAGEEMRLPCDATSDSQLEVKHEWLVDGIPLPEERVNSGHYRIADDHSLIVANPTQDDSAKYKCVVSTKLDKVEKEIKIQFKDVPVAVHSAYVSNCDKNSLTAFIKFDHIESIHTIAPVKEFWVQYQMDSETEGSQWRTHPSPSAAHPNDQVTDQLRTTSGSATVSLQPFGKYVFRVLARNSVGDSATTTVKGICETPAKQPDKNPGEVAAKGTSPENLIVQWKPMAREEWNGAKFHYVVKYRPVDEDQRDGDWKEVAVEDPFADRVTINLDDDKDVKPFQPYEVQVQAVNSEGRTNVVPETVEGRTGEGVPSSIPSGLRVLEKSGTTVTLAWNGVDPATANGNFTGYKITYWVDEADQDVEEPEDDEEEKRKFRWKRSIRAKRQSGVRKTIVFGPSATQGTITDLKPATLNHAYIQVTNGAHEGPSSDTIDFQTDEGVPSPVRSLRAYPMNSKESDEKGVVVLVWKKPRQTNGKLARYEVEYCKTQNGKQVEKTCPRQQIDADAKEIRITGLENETPYRFILRAHTSAGEGDPNSSDATTLPETTAAGVDPGVPSLVENAIGDKYFNVSFRPAKYDDETRAPVGNTYEVQYKPQNGDEWETVKPSDDGLTVHVDGLSPGTKYDVRVAALQVDSDGGETTKTFSGISKITTTGTSPGERNLYFIILILLILLLLLIIICICCVVCRHRGQNYPVSQREREQGREPILGKPDYKTDDDEKRSLTGSKAESETDSMAQYGDTDPGVFTEDGSFIGQYVPQKSLMPAERPEKGSTSTFV >BP:CBP00406 MGSSESVPIPGGGTEGYHVLRVQENSPGAVAGLEPFFDFIVSIGNIRLDKDNDTMKEVLKQHIDRPLEITVYNSKSQSVRQTSIIPSQNWGGQGLLGVSIRFCSFDGASQHVWHIISVQPNSPASLAGLIADTDYILGAESVLHQADDLIALVQANEGKPLKLYVYNVDTDVVREVSLTPNSAWGGEGCLGCDIGYGYLHRIPVSVDRSKNLPQVPQQARVPVGNPLVDKIVTKPPAATNFPDPSQFSSSVPLPPAPAPATLIQNLPPPPQPVFLPQPPTSYAQSPVDQQPPHTELNNHGHSHSDGGGHGHSHESGNHGHSHDNGHGHSQEHSPSPAAAPVPVSAPTPVTSYPQQYVEQAKPATDYYQQQQPPQQQTYQPPVNPLTSYQAYQSPASSPYYPPSASTAPNASGYQAPYYAPQSFPPQQNTYDYKAPEIPSAVPPMFSANAAPSPPTSYVNPIPPPAPLNFPMPSLSSIGITQLAAPPAPPTSTGFTSFQPPPFPQYGAYPSPPPQ >BP:CBP00414 SSSSTSSTLPISHVRRHEDVPTPSAPPSKRSNIQPQESYEPKTWLQQQMEQEQQRKLAEEKKKQSTSTTGDDEEDMLQDVLSQPRGPHKRRFNFVMVSNITFAIPEGYDVDSIEYLGGGSFGNVIKTSAVCRDGHRRWVTIKKMREPFFDPHHARRIFREIKLLQLMRHDNIICALDIYTPDEENDFRDVYVVTEFAGRSLYRILKQQRDYGRRVLTEEHVKFIIYQIIRALKYIHSANIIHRDLKPGNLALTDDSDLMILDFGLARSLEKKDTSLTQYVQTRWYRSPEVIYWKIDSYTNLADMWSVGCIAAELLTGDPLFPGDDVNAQYQRITQLCGSPDEELLAKIENDNSSAMKAVIQSYKVYKRRNFREVFAAYSPSADFIDLIEKLLVLDPEKRITVEEAIQHPYLAEFSLPADEPRADHIFDLDDTQARTRFQWRDAVWTEIMNYQRIMQSPIIPGETDR genometools-1.5.1/testdata/nGASP/protein_100_with_stop.fas000066400000000000000000001463731211610345200234360ustar00rootroot00000000000000>BP:CBP00004 GSHQIAKNFVNSSTPDLRPTFVVNFDTSTVICQHSSDPTDLHIHNMSSLCDGKQDCFVNPAMHDEVFPYCEHKCESTCSGKGACLYDGSKPQCYCDSGFSGAACELQDKNECLEHPCHMMAQCQNTLGSYECRCLPGYQGNGHECSDIDECADNIATRCPEHSQCINLPGTYYCNCTQGFSPKGNQGSGLDKCADINECETGAHNCETNEICENTIGSFKCVTKCSPGYSLIDGKCEDVNECDSEKLHKCDVRAECINTVGGYECECEEGFDGDGKNCQRGNPMSLSIAKSSCRKNSAICDRHASCNIFLDICDCKTGYTGDGITCHDVNECDAKETPCSEGGRCLNLDGGYVCCKDGQDDAACIKDQRAFCSGGCCDNAICSNATCACIDGFRGDPHKKCVDINECVENDSVCGGVGDRCVNLFGGYKCCQHGSQEVECTDQAFSSDSSTVSSHGADFTTTGEQVIEGSGSIQTSSGGSITVTRGLIPKEVELTTSGRLACTSYCPPNSECVGGFCECVKGYGGNALVGCEDVDECITETCNVEANEWCVNLIGGFVCCNPTNATHDDCIVLSLGSNVPFSDFLTVPGLEITKEKGLHVIGPNEEDTVVATRSNHSVTSDQLITEVVQQSKNFSSGQIILTRKSVTGGEAVTQTTDGDGEFGLEISAKDFGITLPATLEPRVEGSGKSPVAGVWTEEEDGGEDDDLMEASGSHGSWSTTINGTGFTGSPRSEGTIRVRITTLGEDGETETATKPGITVPGKDGKLAIEKEGHESVSSGSSATSSSGSTGSGASGSTATGKSGSSATSSSGSSSSGSTESGSSGSSATSSSGSTSSGESGSTATEESGKSEPSGATGTESSGKSESGASGESGPAGSSTTSSSGSTESGASGSNATSSSGSSATGESGSSSSGSTESGASGSNATGGSGATGNESSESAGTTASPESVTASRESVEGSGTTPSESTSSLPEGSGEWIETGSKGHFERGNKVSVSHGNGKPEGSGPKESGKPEVPGSQGSGAKESGAGKPGSGSRGPEITTDGEESESTSSGSGKPKNPKITTDGEGSKSTPIGDGKHPEDVEGSGILTTSSGGKNSTLEHGTKLVEVKPEGSDKNPGVGLEISAGKVTSAPEDKEKSNEVGLEIVWESTTPEPTTPDTDNVGLEISGRDLITKRPHQIEGSGTGDEEITATTRDVSKSTKKPRLEIDGGDNGETSGVDGKASTPSPTSPGAPESTTPSAPTTAPEDVTPETGSGEPGIPDGSGESSTAAPEGVSPTSSAPAPEVPTTPEGSEESTKTPEEATTATSPEEETTTQEPLILTAAPSKAPESSTKPSEAPEASSESTAAPPTAQPATVIPPQNREEKPEPTKETFALPTTTEKPVNETIENTKCMSSDECGLDALCERRTGVCRCEPGFEGAPPKKACVDVDECATGDHKCHDSARCQNFIGGYACFCPTGFRKTDDGSCEDIDECKEHNSTCCGANAHCVNKPGTYSCECENGFLGDGYHCVPSTKKPCDKEQSTKSHCAESNMSCEVDTTDGSVECKECMSGYKKSGTTCEDINECDEQSPCSPSASCVNLNGTFSCSCKPGFRGDGFMCTDINECDEKHPCHPHAECTNLEGSFKCECHSGFEGDGIKKCTNPLERSCEDVEKFCGRVDHVSCLSVRIYNGSLSSVCECEPGFRFEKESNSCVDIDECEENRNNCDPASAVCVNTEGSFKCECAEGYEGEGGVCTDIDECDRGMAGCDSMAMCINRMGSCGCKCMAGYTGDGAHCTKIEEPKEASKTACTEEWSRLCELEKKQCAVDEEEVPQCGACLPGHHPINGTCQSLQISGLCAQKNDCNKHAECIDILPDSHFCSCPDGFIGDGMMCDDVDECNNAGMCDDENSKCENTIGSFNCVCLEGFKKSDDDKCVLKTPNREKIEINEENSSSTPSESQKPESTTQGTVTTSVLSSEPTSEAPTSSTSPVTSSEKASESTTSSESPVTPSETSVTTTSLCSTVTCHSLATCEPSTGVCICRDGFIGDGTSSCSKKSTADCISLPSLCAENAKCDNSARSCECDAGYIGDGYVCSPHPQDCVLRDNLCSPEAICQNRRCQCLPGFTGDGVKCVSIHERASNCSQCDANAHCVGGTTCKCNPGYFGNGLCCVPDPLDCVHFTGICHPNAVCNPDTRQCQCSSGFSGNGVSCFPQKSCRTDKSVCAKNAICLPTGSCICRHGFKGDPFYKCTSLVAKEPSNAQDLSDVSSCVTPCDASSQLCISGECICKPGFRQNPGSKTCADIDECAEKTHRCNRIATCRNTFGSHVCSCPEGHVGDGVTCVPHVNQGKLSVYCEADGMTLVLGNETSDFEGKIFVKGQAENPYCSKSFSALLNSHKPYVFKVAFQHCDVQLLDNHTMASTVVVQKHAMFLTNKADSYDLRCQYPIGSRAVQSHVNVSELATTSTLTDKNSTLAPICRLSVSNDQHSSISSAMVGDTLKLALEVTPSENFGILPRNCFAVNIESGERYTLTDEQGCAIDESLFPQWSVTNSAK* >BP:CBP00012 MAPKDDPDNRGFDDQRRPSQRSTVLAIPALAVNDPKADPKIASDLPANYVDDDDDAPKLYTPSLFEKILNYLLCRGDIANQQLEAQPVSIPGLFRYGKRFDYLLLFIGTICAIISGVSQPIMALVSGRVTNALLVYPPTSKQFRNKANENVYIFLGIGIFISITNWIQYMCFQHCCSRVMAQMRHRFVYSVLRQNAGWFDKNHSGTITTKLNDSMERIREGIGDKLGVLLRGFAMLIAAIVVAYIYEWRLASMMLGVAPVCCICMSLLARQMTSTTIKELIGVGKAGSIAEESLMGVRTVQAFNGQEEMVGRYQTELEKGRRFAVWKGFWSGFFGGLFFLCLFSFLGTGMLYGAYLLKVGIIGSPGDVFIVVMSMLLGAYFLGLISPHMMVLLNARVSAATIYQTIDRVPKIDPYSKAGKRLPNVVGRVKFENVHFRYPSRKEAKILNGLNLTVEPGTSVALVGHSGCGKSTSVGLLTRLYEPEAGNVTIDGTDVRELNIDWLRNVVGIVQQEPILFNDTIHNNLLIGNPGATREKMIEVCKMANAHDFIEKMPKGYDTLIGDGGVQLSGGQKQRVAIARTLIRDPKILLLDEATSALDAQSESVVQSALNNAAKGRTTIMIAHRLSTIREADKIVFFEKGVIVEAGNHEELVHLGGRYFDLVKAQQFKADPEATEEFEEEEIDLDDNSRSSRRSSMTSARSGSEAFQRGNSLNDSFSGSRRSARADAENDAFAAHEAEVMAQDGQITAGYLDIFKNAKGNYIYMFLGTVFALIRGLELPALALIFGWVFEGFTFVPYGGRMMHRMAMAVIAFASVGVGVWISQVASSVLFAIVSENLSLRFRVQSFRNLLYQDASYFDNPAHAPGKLITRLASDAPNIKAVVDARMLQVIYALAAIIANIVIAFIYCWQVAILGTSLILLLAFVMIGLAYKISLMNIEQIKNDEAGRTAIEIIENVKTIQLLTRCELFFDHYQTSSKQQKRSELKKGMIEAINYSITQSFMYFMMCFTYAVGIRVIYDGDKSSDVTFKGIISMMLGAVAVMNSAQYFPEFVKAKTAAGLLFNIIYRKPRTGDLMEGDRPEIRGNILFENVKFSYPQRPLQPIMKGLQWTALRGQTVALVGPSGSGKSTNIGMLERFYDVTGGVLRIDGQDIRNLSLYHLRTQMALVGQEPRLFAGSIRENVCLGLKDVPLEKINKALELANANRFLANLPAGIDTDVGEKGGQLSGGQKQRIAIARALVRDPKILLLDEATSALDSESERAVQEALDRAREGRTCITIAHRLSSIQNSDLIVYIDKGKVQEAGNHAQLMQKKGRYYKLIKKQDLAV* >BP:CBP00016 MSVEWKSALRLQIEALAKRNDLHRKSSEEEIKKRIVDMDRRIVKLRELVSTSANDAAIFYLECVCHADETERLLNRESSVEKEKKWRKMKRKPSSQIGPTESRTVSSLPSVSPPDVIQTINVSTLEAQDQMPQRPHWWDQFQIYRRTDLLRFSKQNDRRELWRTQKDFFLTCLGFMVGVGHTMRFPAKVYQHGGGVFFIPFFSLVFFGLPLVFLHLSLGQYTGQAANTAFSKLMPIGSGVGWALVVIAIPVAVYYNIIVAWAIHYFFQSAKGLLLGDELPWETCRDEWQLDNRCCNLHNLHSCFNSSNSITAPEAFFHSEVLSLSTFGDFALGPLQSHLVLSLAAAWLLVFFGVFKGLGSIAQTMNVTATVPYLLLSILLLRGISLPGANKGLSFFFTVDSTKLWKWQIWKSAAEQVFYELGIDAGPLISMAAFSRYRNNVYRDSVLLVIMDALTSILSGMVIFSFVGFIASESNSNVNDVLKHDPLYLSFTVYPGVTSFMYWGGLWATMFFGMLVMAALDAEFAWLEMIASAFMNHFSTKNKAVENRLLAFLCLVGFFFGLPLCAQGGIFVFHAIENLNANWNSFSLALLSVAIVCYVYGIDNYLTDISGMLRVPRIPISKAIRFRDKIVSILGPGGIYIKFSLCFICPVILTVLLVASVLGYQRISFAGRPIPIDYEIVAWVVMIGPLLVVPLVAFLQVRQIRNEGKLLKSLFDTSEWRENPDDLLEPKDAYMKQDSKYESPPNRRRTPTIFTHRENTYMYIDSRGPTVRSRVFPMGAPLDPYGWKLGRLRDHQQHIEEVESNYSEEGSTTNNSFMASTVKHNDDVELTLFGSPPAIMGDEDKNMVTKFSESMPVNYKCRNEQAAPVQSRREPRLGRMARKTRRKRSSPSASDPPVPTSPLPPPPRLYHCKSEPPMMRSEEEHGTPKIITPDGSCSISDSSDDSSDDNIRRATVIRRKTSDDDAFTQISTAESISITPLDFPRQRSLSSVAIYDQEQKNGRSKVLSQLKRPTPIVMPPK* >BP:CBP00018 KMSNSTSPNAAATVGNIAYCYVLPCICVIGIVGNITNLVVLASRRLRAVSYMYLRALAVADLLCMLFVLVFVSTEYMAKNGSTINQYKIYQIYQCHLMLTLINWALGAGVYVVVALSLERYISIVFPMHFRTWNSPQRATRAIIIAFLIPAIFYIPYAVTRYKGKQRWDPIQNVTIYSMDDHPIYTTFYWQIYKWTREALLRFLPIIILTVLNLQIMFAFRKRQKMFQQLTKRKEQGTQKDDTLMYMLGGTVLMSLVCNIPAAINLLLIDETLKKRLDYQIFRAVANLLEITNHASQFYVFCACSTDYRTTFLQKFPCFKTDYANRDRLRSFVRRTQSVIQKQGSVEHTTNSKVWIMFKSKFQRDSLSHHSRKFSRHMPIEQDTVDIQLASGEQSTSGETCEADTLIKYGGSIQLCNDENNTTFL* >BP:CBP00022 CVICGQSTSLYNYGTISCSACSSFFRRTVLAKVPIQQCPHQDACYTPENRATHSECKYCRFHKCVDVGMINTQKYTNLTKLINQLSVLDKKRSYTCANMMLPPDFRLSSIFDYEHIKLIKKTPEVRFISHDWGCVHQLASMEFIKTFQFVKFLSLQDLQVFMKTAHFNHVIFASAMRSFGIRQGYLSFPDGSDVFPECIKRITCYNPEFLNRIRCKLMGRIIELNINPEEYLLLSAIILCNPAAVNLSVKGRTLISSYQKVYGSLLFQYCCQVNKKNGPLRFSELLTIFHAISQTHHDIGQFFLLFQMYQPNAQPIQLYQEVIDYM* >BP:CBP00024 FQSVHHHLNEEELKQVFGVSNKHEVPEYSLIETTRHPLKNGGLKMKFVAWNDTYHLNLRKNSRIVSPHIISVIRHGDDAVTTYDGLRDYNQCHYQGEVKSHGNMKAAISDCGALMGSLVMEDHFLVLQTLPKRVHHLQKERHLVYKRSAGLLTDTENKIREEITRLQEEQESFCDTSEQLDDPAMTIPAHLHFNYTIPTSAQLDSPFIFPNMDPITLEIGLFLDSKLFEHFEREYIQDAEQHLLEFSLALINNVHVLYQQDTLTPNLDIVIVRYEMWKTQPSSLSTGVHKNGQAQSLLDAFCRYQAHMNPGTDLTDMNHWDHGVLLTGYDIYHTTTSVAGVAPVARMCDPLFACSLVEGLHLGRSFVLAHEMGHNMGMVHDGVQNQCNKGCCLMSAVNGAGKTTWSDCSVREFNAFLLQLDESGRGNCLRDASPGLISTNHLSDTRLPGQRFTADQQCSYFWGRDYRVEIPNGKAMDDICRILWCGNSGSTISTAHPALEGSWCGHNKWCHKGHCTSWNFDLPPVPIDGQWSEWGGAEKGCPIQQCAVSGSITIQAQHRDCVNPAPNNGGRTCEGANIRGIVCGATSSNCLGFTREEFGNKICSSIKFDPHKPDQQLTGEGFEHSTQPCRVWCHLIGSELIRNKGQFPDGTPCGFDAYCVGGQCLALSCDNKALVEQQEDCPRLEGRSIHQWEDWSSWSECSVSCGPGGRQVRERKCSSGRKCQGVSEESRACEGVLRDCEEFGEWKDWGPCSEKCALGIQKRFRPCLTDQCASEHLQEKRPCDNEGCWTNWDEWSSCSQTCGGGRRYRLRKCLDFKCEGDDLEKESCNTQKCISQTWGDWLPCSVSCGIGFQIRERLCDGELCATANKQARTCNQQQCPSTFSLAVWSEWGEWTTCSATCGEGLQSRERSCRRGSCQESDAAQTRRCVNGPCDHTFLPWSEWTPCETCSSFDSRKRIAKCDGTTDNCQDKIDEETCDNACLREQHSFGPISPKRPKLITSNELRKAFGRPLLPIESITSSKWSEWGPCSVTCGSGRRVRTRDCQEENCPEQNIQHEECSLNSCLDLFIWSDWSSCSKSCGHDATQTRQKLCLFNNAECSSYAESRRCKNLPTCTSISSGNTISENSFDAPQWSEWSSWSACSCFSLTSTRRRFCQVADPTVQGFCAGSILEQIPCAPGNCSPSAGGWSSWSEWSSCSKDCGDTGHQIRNRMCSEPIPSNRGAYCSGYSFDQRPCVMDNVCGEEKVNGGWTDWTSWSECTDYCRNGHRSRTRFCANPKPSQGGAQCSGSDFELNPCFDPARCHLRDGGWSIWSDWSPCSASCGFGVQTRDRTCSSPEPRGGQLCTGLAHQTSLCDLPACDHESDGEWSAWNEWSGCMGNCGFGTRTRVRACVSPPASHGGQPCFGRSSEITECRQSESTCSSFITSSLLADGYFIETDQQQ* >BP:CBP00025 MLAFESPIAESSYSRQKAKDLAKKFTPGELCTVCGDVASGIHYSVAACNGCKTFFRRVVLENRTYSCKNNGDCIIDKSMRCSCRHCRYKKCIIAGMDRAELSMERRRKRKKLNGIEGLEERYETTNPLINLLLHKEKLYQKLLHSSAMTIHTSLREALDMSQIAFNDTNNKYDDRMDPKYPTNFSYWRAKILTVLVEWAKSFEASFSHLQPEDQKRLFIHTAFSNLVLAEAFHTPEKYNDRIVFPDGLCGFRNVAQTVSSDGVSTKTYGLTPTVVAVINDVLVPIRRMRLTKVEYVLLQAIIFFDPDCLSLTKHGSQLIAAKRRRLLHALQDWLQQQNKHEAAGRFAEILLRICNVQKVAAFKRETLCTIETFELMQPHPFTMEISKSYPDFSYF* >BP:CBP00027 MVDLKQQLQWIDYLGVVAVWLCFFGTVLVISVTCILWCCVGKEDDPTVFAKYGFGPQPRVPSQRSKLEVEKDF* >BP:CBP00029 MTRLLNGIKVVELAGLAPVPHCGMMLADFGADVTVIDKKHPVVEQRMNRGKTMKEFDLRKPEDVKKVRELCKTSDVLLDPYRPGTLEKMGLDPLSLWNDNKGLIICRISGYGQTGRMKDEAGHDINYVAMSGMMPTFAGTEASRPWPPVNMLADFAGGGLSAAFGIVSAIHARHHNGGKGCVLDCSMTEGTAYLASFVQHYYDQTHLFTDKYAAFTGECPIYRTYKTKDGKFMAVGPLEPKFHQNMFEVLGIDGDDLFSDPDRITKELEATFLQKTRDEWSKIFEGKDCCVTPVLDIHEVGTYGQHVDRQNFSKSDKFGGTWIAKPSPRVQTIEELTAAATR* >BP:CBP00030 MAIVAAGVSKVLTTFQKTFKGLLPLIILVIYTLLGAWIFWMIEGENEREMLIEQQKERDDLIRRTVYKINQLQIKRQRRLMTAEEEYNRTAKVLTTFQETLGILPADMDKDIHWTFLGSIFYCMTVYTTIGYGNIVPGTGWGRFATIVYAFLGIPLTVLSLYCLGSLFAKGCKILWKFFLRSTRVVSKDLSEKISEAADNIEEGTTAVAPASKEENDDDDLLSFPISGLLLITVIWVIFCAVLFTFLEEWDFGTSLYFTLISFTTIGFGDILPSDYDFMPIVGVLLLIGLSLVSTVMTLIQQQIEALASGMKDNIDQEYARALNEAREDGEVDEHVDPEEDPETNKKSLNAVVSRMPLSKRALYYFLPASQKKQLEQQSEKKMGRKSIKVQTDSELLETLIREEILKAELNNEMHKFNGPRSSQQPRLIHSEIREKEVPIEVVRVEQYNHGGHDDYLEHDI* >BP:CBP00032 MLKVCMNVTDQCDCLAIECPIAYSNSVEEKEACYMEHCFISKRALDDVTLYKVTALYLVIFIIGVFGNTATCLVMRKHPMMKTHTSMYLINLAVSDLVTLCVGLPFEMMMNWHQYPWPFPDVICNLKALIAETTSSVSILTILVFAIERYVAVCHPLYLVKNQFFKRNMKSIIGLSWIVSILCATPFGIYHRADYLMRSWPGTDDKIPVISSKMCMVAVMFEPKLEPTFKVLFHFSAIAFFVVPLLTILVLYARIACKVSNNRTIQAGELDITEELQLKINAILCAIVSAFFICYLPFQFQRLLFFYLDNEVILVWINQYVYFISGFLFYLATIINPIAYNVASSRFRRAFKDILFYYCFGRKSNGYPRSSFSKYSL* >BP:CBP00039 FREMADSPKFALVTFAVYAVILYNVNSFFWKFVFIGYVVFRLLRTDFGRRAMATIPRDFAGLKLLISVKSTINALFKKDRPIHEIFLDQVRQHPNKIAVVEIESGRKLTYKELNELSNQYANLYVNEGYKIGDVVALFMENSIDFFAIWLGLSKIGVVSAFINSNLKLEPLAHSINVSKCKSCITNNSLLPMYKAALEKGLISKDIHVFLAGTEVDGRHRSLQQDLQLFSTEEPAPVDGLNFRSVLCYIYTSGTTGNPKPAVIKHFRYYWIAMGAGKAFGMTKPDVVYITMPMYHSAAGIMGVGSLIAFGTTCVIRKKFSASNFWKDCVKYNVTATQYIGEICRYLLAAKPCPEEKEHKVRLMWGNGLRGQIWKEFVGRFGIKKIGELYGSTEGNSNIVNLDNHVGSCGFMPIYPHIGAFYPVRLIKVDRATGELERDKNGLCVPCVPGETGEMVGVIKEKDALLKFEGYVSEGDTAKKIYRDVFKHGDKVFASGDILHWDELGYLYFVDRCGDTFRWKGENVSTTEVEGILQPVMDVEDATVYGVTIGKMEGRAGMAGVVVKDGIDIDKFLADITSRLTENLASYAIPVFIRLCKEVDRTGTFKLKKTDLQKQGYDLAACKGDKIYYWVGSEKSYKPLTEKMQQDIDAGIYDRF* >BP:CBP00040 MLHPIVLLLVASSAVYAARPRRALDGLDGSGFGFDKRALNSLDGAGFGFEKRALNSLDGQGFGFEKRALDGLDGMGFGFDKRALNSLDGAGFGFEKRALDGLDGAGFGFDKRALNSLDGQGFGFEKRALNSLDGAGFGFEKRALDGLDGAGFGFDKRALNSLDGAGFGFEKRALDGLDGAGFGFDKRALNSLDGQGFGFDKRSSFKHQSSKLRSVFRNLRGFNKQH* >BP:CBP00046 MSSLRCHVVVSALLFISIVPISQQVLNEHNQKLEWIVGKWRSEFSGKIFWPTVPTMTFGEELVINEAPIAKSANVQFLNFSARAWSHSTKDHFHDEWGFLTVDPVGNATLMTTGNNGFTTYETGTVSPNKLVLTLKDIGRISFSRDLPVEDLRRTFIRHDDRYMEQVIEMRTATHPKVGYLEHTRVVYTKLK* >BP:CBP00048 EGRGNKRTFFDITINGEPAGRIVFALYNHSCPSTAENFRALCTGELGQLYGHNASYQGSIFHRCIKGFMIQGGDLTHKNGQGGFSIYGRTFDDENLSLPHNKPFLLSMANRGPDTNGSQFFITTEKVPHLDGKHVVFGEVVKGFDVVKRIEKVETEEEDMPVQRVTIAHCGEMVRKSDVMASDKKKKQDEQEPVGCKMDDEPKTVNWLMRRSRSRTPEDSKKSKKDRERGGNRGDRRRHDRQRDRYGRERRSRSRSGSRDRHRDRERNRVPDERRSGKRPVSIPISKADCEVNKYERELGDCQEILVITNKDGIKVRGRGKLTFMGSRDRSTTPPHWKREESKKLTLEEHQKRQEEMEERKRLRAEREKEDVERKEREEKEAMERAAQRELERQEEEEARKRSRSNSPQSPRVKQELMSQRQESKAESNSSRSSSSSSGSSSSSDSDS* >BP:CBP00060 MEQIVESLQYFGFLGSLVLNSFLLFLLHTRAHRNFGKYRILMIVFCLFAIVYSLVEVLTLPVMFVKGRSLCVCSNGPLRLYRPIGVPLTSIYCGSFGMCISLLTLHFFYRYVAVCKPDKMRYFNGKHIFLTFSPSLFIFVTWSMTTYWPMAPDEMREIHYHDVLMKTFQTNSFEASFVAMISIFLQDPQTSTWLPSQLLSCAYMSFLMSVCFSVIVFCGYQALKQMRSHASHMSSKTKELNKQLFMTLGIQTLLPVFTMYIPVGCLMILPMFGIELGAAANNAAAFLGLYPALDPLVAILLIKDFRNFVFCKSVTSTYASAVSNTAPPSKILQ* >BP:CBP00061 MDADKLIEYIQYGGFVSSQLINALLLYLLCFQASNNFGRYRILMIVFSIFAMIYSLIEVVTFPVMMCKGRSLCVCSNGPFTLYRSIGVPLLSIYCGSFGMCISLLALHFFYRYIAICKPEKLYYFEGKQIISTLSPCFIIFVIWSLLVYFFMDVTEEKERIYHDVLFRSYNVDSHKVSFISMLYKSPATETSPEHWNFDQLVPFFGCCFIMDSCFFAIIYYGSKAFLQMKSCGTEMSKKTKELNRQLFLTLGIQTLLPLITMYVPVGCFIILPIFGVELGVEANKTGAFLGIYPALDPLIAILLIKDFRNYVFCQKRTLAKVSTTSGIASKITSTFQA* >BP:CBP00071 MGDEGYRGWIKLEIPCFEPERHMNNIIRCHTTKLEPALNSYNMRIHTKGQVQAVEEQDCEPFYESNYEIVSSHFSHHLIIAIQNYLKSLSMDRLMPFQLGNLVLHSSDFWSSELTCHLADIPLSAFFFGNIQGGTFINHWEVSFWEDTHRRNRLRQKNMQPTASDRQGLNQIRVEFEFDKVDFMTVHFKHKEGDFEVISKDFRKTRETVTMYYQITVRRTSIRRVIVDPVVNDTNGGDRIRIHFELNCPVLIRRAYKTEKQEAEAKHQVPHYRRFLVINRGRSANMYPTPKAITDSPVFTIEFDTSVSLEEVYRLISRLRIRTGVSIEFATIPSVDCLIWRENPYHRWTFHGSSHLSPTHFSAPIYRDFITTAFPRKHEVCGSREVDTNRERKFAITYLLECLISRGAVVKDQILLDDTIWHRFLEVILHYYTKDDKLCEAGLEDLVHMIDGRKRIGSLIKCFDRICQTRQKNSLVNGLTTEEMREGYQRVRKIIFTPTRVIYVAPETLMGNRVLRRYDHDGTRVLRITFRDDDNQKMRTNKTSTLLEKTVNTYLMNGITVAGRNFGYLGSSNSQMRDNGAYFMEKYSSSQCREYEKMCRMAPPITFNPKIQAARKNLGRFETIDNIPKMMARLGQCFTQSRLSGVNLDRCTYVTMYDLTGGKNIKGDEYTFSDGVGMMSMNFAQMVSQVMDFGKGVPSCFQFRFRGMKGVIAVEPFLDDLRQWSIENDIQEVSEDTAWGLNCVFRPSQIKFISKRHPRDQVEIVKYSSPVPVSLNKPFINILDQVSEMQSLECHRRVTNRIEELLDRQMLSFAQQMIDETFCRNRLKELPRRIDIDYLRTTWGFTLSSEPFFRSLIKASIKFSITKQLRKEQIPIPADLGRSMLGVVDETGRLQYGQIFVQYTRNLALKLPPKSASRSVLTGTVLLTKNPCIVAGDVRIFEAVDIPELHHMCDVVVFPQHGPRPHPDEMAGSDLDGDEYSIIWDQQLLLDRNEDPFDFTSEKQKSSFKEEEIDDLMREFYVKYLKLDSVGTISNSHLHNSDQYGLNARVCMDLAKKNCQAVDFTKSGQPPEELERKWRKDEVTGEMIPPERAERVPDYHMGNDHTPMYVSPRLCGKLFREFKAIDDVLKISEERDEQVEITIDETIMVDGYKEYMHSAREDLARYNAQLRSMMENYGIKTEGEVFSGCIVDMRNRISDKDQDDMSFYNTNQMIETKVTNLYKKYREHFFEEFEGAWEANTEGTSRGESDTNILQRHCRAPTQNMMKKAVAWYRACYEEARVTRENKKLSFAWLMYDVLAMVKQTKSLTSDDIRMGGSNPLYTMLDAHRSQYLLDNRSVFEDYIRFAPSKNQGEQVARALEIIRMYVETNPGLEEVMFVINEWARASKLFENQPIRNYHLSLLFILFATRQFSSVDGNAAAFFPKIDERGWREEKANGEFKQGLEFMEMKKSQMIVKFLEFLASRKFRKLPNVSFRTLRFSSIFMRGEWQIFHVAALKTYYNLLFNLRFEELPVSTDPTMTVRSIIRENEPFVVELPADADRTLVHRKLIEHTGVEEIYMRNMEKSVRGVDEQQKANTRYLVSTRGTLESMYKLRQLVAVKVPIKTYVTGQEISTQMARLCYEKIVKGHIS* >BP:CBP00076 MSKHNAVGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFTDSERLIGDAAKNQVAMNPHNTVFDAKRLIGRKFDDPAVQSDMKHWPFKVISAEGAKPKVQVEYKGETKIFTPEEISSMVLLKMKETAEAFLGSTVKDAVITVPAYFNDSQRQATKDAGAISGLNVLRIINEPTAAAIAYGLDKKGAGERNVLIFDLGGGTFDVSILTIEDGIFEVKSTAGDTHLGGEDFDNRMVNHFVAEFKRKHKKDLASNPRALRRLRTACERAKRTLSSSSQASIEIDSLFEGIDFYTNITRARFEELCADLFRSTMDPVEKSLRDAKMDKSQVHDIVLVGGSTRIPKVQKLLSDLFSGKELNKSINPDEAVAYGAAVQAAILSGDKSEAVQDLLLLDVAPLSLGIETAGGVMTALIKRNTTIPTKTAQTFTTYSDNQPGVLIQVYEGERAMTKDNNLLGKFELSGIPPAPRGVPQIEVTFDIDANGILNVSATDKSTGKQNKITITNDKGRLSKDDIERMVNEAEKYKADDEAQKERIGAKNGLESYAFNLKQTIEDEKLKDKISPEDKKKVEDKCDEILKWLDSNQTAEKEEFEHQQKDLEQLANPIISKLYQSAGGAPPGAAPGAAGGAGGPTIEEVD* >BP:CBP00078 MLRAVVRLSKTGAKAQRRFLNLQEFQSKEILEKHGCSVQKFVVAANRKEAEEKWMSFGNHEYVVKAQILAGGRGKGKFIDGTKGIGGVYITKEKKEALDAIDEMIGKRLVTKQTTEDGVRVDKVMIAEGVDIKRETYLAVLMDRESNGPVVVASPDGGMDIEAVAEKTPDRIFKTPIDIQMGMTEAQSLKIAKELQFEGKLLGAAATEIKRLYDLFIAVDATQVEINPLVETADGRVFCVDAKMNFDDSASYRQKDIFAYETFEEHDPREVDAHQFNLNYIGMDGNIACLVNGAGLAMATMDLIKLHGGEPANFLDVGGAVTEDAVFNAVRIITSDPRVKCVLINIFGGIVNCATIANGVVNAVNKIGLKVPMVVRLEGTNVDAAKQIMKKSGLKILTANNLDEAAAKAVESLPK* >BP:CBP00081 MLTDGVVDYTKEGSILTAEQRQFYEKNGYLLIRNCVPQYELNRFRQRFQDICEKKVKAPDNMTVMKDISIAKSEFKDGEKAITKIQDFADDPVLFEYCKYPGVVDVVKDLIGNPKSTVMAMHTMLINKPPDNGKLTSRHPMHQDLQYFPFRPADFICCAWTAMEKINRANGCLVVVPGTHKGVLLPHEYPKWEGGVNKAYHGIQDYDPSNPRIHVEMEAGDTVFFHPILIHGSGANRTEGFRKAISCHYANDDICRYVNVEGTTQENLAEEIIEIAKKRLTKYGLDPNTVTLDFADIWRVRAREVNGTRSNL* >BP:CBP00086 MTATMDVDNLMSRLLNVGMSGGRLTTSVNEQELMTCCDITKSVFASQASLLEVEPPIIVCGDIHGQYSDLLRIFDKNGFPPDVNFLFLGDYVDRGRQNIETICLMFSFKIKYPENFFMLRGNHEPAINRVYGFYEECNRRYKSTRLWSTFQDTFNWMPLCGLIGSRILCMHGGLSPHLQSLDQLRQLPRPQDPPNPSIGIDLLWADPDQWVKGWQANTRGVSYVFGQDVVNDLCAKLELDLVARAHQVVQDGYEFFASKRMVTIFSAPHYCGQFDNSAATMKVDENMVCTFVMYKPTPKALRRG* >BP:CBP00091 MDASTEAGVYKKELYSRLMASINATMCHEQPDGILYCPNHTGGPVWVRNVYPPIQELQPKVLIVVVVFVLCFIVGVCGNSSIITIIRGVVEDRRKRMKRHGDNAILYIGALCVCDFVMSLSLPPAILDSVIGFWIFGTTMCKVHHVFGSVGRIASTFLITAMSFDRYVAVCYPHQHRLRSRTFVVSTIVCLSAIAFVLLLPMLTYASAKEMVLHELKAHESANITRVRVFKCSDMMPGPIFYWFTSTTFILGYVVPLILIVYFNLKLINKLYAHKRVLPRSAIPVRRVVVYTVLIAAVYFVCWTPYWFSVLYAIIMSLLGKPTTNSEWVLFAIYCVHLLPYFGSSSNWILYGLLNTQLQMKNDIGDDGQSIMTTNGVPDLPRRSTSRGICDGASTSRSLPAASNPQWQVDPMLTRGNSDTSMVFYQDTEQTHL* >BP:CBP00094 FRIGHLEYENSNETKILEICMKTAGTRKQHTLISLPSCHNFNGLENAANLNYQYAVDLLIGAACDEETQTVSRLALRWHKLYLSSAPLSTKEKEGTTIALKPHSLAGTAEVILAVCKSMKWKEIGLIYSDETKYTAHAIYDMLAEKEEEDIKINVFLQTDGTMNTYTILHSARVLISFLSTSDLSRFVKTLKDKAFRPLEFSIIHVDCYKSETTEFYTHLDQKASEETNPISAARLRKLHRHVALLRNSHDDKGNMEEFATKHGMIVIFFVFPFPTLCFQPSHTLYKALILCDGLQLLSDYKPLSDNLTIVQQQPTLWEHVTNTEIHGYSGPMFIGSDGVRLPYYEMFMWRDGKTQHVASVRPRESEFCEKEKMSNESKNCYEITRTIPFGQLLDDLPPYSSDCGYDNNLCSDFHVFMIAAIVFSILLIPMAIAFYLQRKEHLIQQMPWRVPLDTINFDDSRNGRLLSVSRRVSTVSTARASYSSIFSANVSEHAHVNKQKVSIKRYVQRRPITFTRQEMEMLNQLKYMSHTNINPFTGICFNQGSELIVMWQFTARYSLEDLIFGKEQKFGRNFQSTFIKHIMHGINFIHNSSIKVHGTLYLSNCVVDSYWVVKLTDFGIKNILKERMHHKELAPNSSFDIDAIHYKYLQLAPEHLSSLLEKHEEPMGTVEGDIYQLAMVIYQILFYMKPFAERQEDIKAVKKLFFLELATLLSNQSTAPLHPKVPEGNSFTMRLLSIIQQCWLYKPAARPTLIKITDAVNREFGQDVKGTLIDQMIEMIDEYSANLEHIVAERTRELEQDMATTENLLYQLLPKSIADSIRSGKSVVPEQHSSVSLLVVDVCQFTKFCEAFIPVHILETLQELYSSFDYIVQKNKAFKVENVGDAYLICSGIPEMTACRHLREVSKISLKLQEFMKTFTVRHRPSHILQIKMGITSGAVAAGILGSIAPRIITGICKNLAYKILNNIQPGTIQLSELTANTMMEKFPSFIIEERGMIDVKGKGTCLTFWLTGEKDQMRRQSSRSSCISHSQIKFEIEEANKTNNQFL* >BP:CBP00095 QLSVPQYKEFLEVQSNLTKNLFTDYDPTISPVYTWIDVDQPIGYDSQAPKRWNYTVFLYYLKLVEVQEPEEKVSVVMELMEYWYDARLSWNTSLYQNTTSFYARQDNVWSPTLTVFGVNDIMDFRDQDNRMVAIDNFGFLWDYISVRISANCQMDVSRFPFDTQTCQIRFCLPIFYRVQVEILNEIYEGIMDENIFKTMGNSEWKLINLTNRVEVLKYNDNMGNMDLAIFEITIRRNPLYYIYMIVFPSFVINFVSIVGVFLNGADKMSRLNVGLTNIMTMTFILGVMADKIPRTGNIPLLGIYIIINLVIITQLEIFLGPPLEYTSAIILELMTCANFLVMVGFWFDDGS* >BP:CBP00102 MTSFVDNQSLTNYLIIDYDTDNEEDDDDDYDVFPTANEFISNVPKKNRKRARKCVKKGFICCFKTIKYTFLCCRCVIVWRCLWLFVILLIGLFLFTCFYYDDARKIFQFVYIVIETSIHFLKPTKPCRSINRPSSVLHFLQNYSFHPQAFFIYKKGCVRSVKGVLYRLQMKLLLISTVVLIASVSAIGNLYSGGGKQCTECPPGYDYYSRQHDRGWCMKFFPGNVTFFEAEKVCRCQGGATLSGIENTKELKKLSRKINEYFDENGIKSGGIWVGAYRRKDCRVPKSEKKAECTKEFQYQWTDRSTFGRDMWISHWTEGAPHNNVVGNHSEFCVQLQVTDPTKTALNEHFDNRICVHRDGSSAFETEGFICGRPPKCKGGYNGGYSGGDGVIVIGAARPTQKP* >BP:CBP00103 MDLFSIVKSVSFWFVSTVDCLDSQWQYSEYISSTDMVQSFSERFLPGNWVYMLFAIPLWYGTWWAVLCYIYFYYTDITDAYMKETIEYHYGIPIKDSSYIIVYFQPTGADGKPHPDPKIFFAIGCMWYMIISSMFSVFYFGIRCYWQIRKTINQSAAVSATTKNLQTQLFHALVVQTFIPLVLMYIPIGILFFFPMVIWELPFTTEFVGYTIALYPAIDPLPNMIIIKCYRHAIQGFFMKIFGRGKRGETQHSLNTDAQSGS* >BP:CBP00104 LQHIYQSLCTMISLILNSVLIYLILYKSPKKLGDYKWLMIYTAVFEQIYTVVDLLTEPTAYSYGYSFVVFRRYNATWTDSNKSQVLIVTWCGLFGSSMAVFGVHFVYRFASVHPKNITKTLYNLNIEDISYISAVFYVDDPNNGSIHLSWGSWIALVQFSTMVGSSMFCVSFLGYLCYSELSSQLSMTSSQSQVANSLKKQLYFALVGQTVIPITFMYLPVCVFVFGPVFMVEIGVISTYLTHAVTLYPVLNPLPNMFIIKSYRNTI* >BP:CBP00116 MTSWADIQKLASDLQRVQLTQSSKKLSEVNCIEVLQKLIASQQIDVVYTRDGHTYVTKKHLETEIKNECVAAGGRAPLTDIAVALNIDFDHIERTARLIVSSDDEFTLSNAELFATEYVHSLRNELRSLLDEQGHQTTAALCKHNLSPELLQSLLIEKLSSTDFEGVVDGDTIYTSSFLDARQLVLRAVLVALTKVTPISTIQKRVGLTPKRFWIAFENLQALGEVPGTLIGSRTSPACSYRPKMYDYLVKTCVTNQYRQNEFLQMSTLKTLGLDSKTALEEVLGASEVKKLVNLNSIYMSKELMEQCVQTVQDDIQNSGIAEIRMSLQTLNLPLDTADEDLIGEKIASTEKDTNFSDGFVYNNSILTEALKSINTQIEAKAHQEVEKIDVEKKKQCGSKAPAKVQEDTDDWGDNKKGGKGGKKGGKGGKNGGGGGKGATSSVPTGSGTVQVNSEELEEWLRESQTVPEEILTVVVETLHQDATSALRKQVQEIQALQLVVNAANSKKSLSAIGDKCRQLYDSFNTFEAGTTSFADPLGTDLRQYLLKTVGVDLACAILSYAIGIDNVHQLKEKQRDETIESLPEMVREPIRALFASLKSTDEDAVEKFHDAVYDCSVPSATSLSLRKIDKKGRAEVGVKVSADLCDQLASQSDPATTLLLSVLYLFSQAGRPTTASGKFVAQLIAQMKDFCPTNTFELLQSCQKGVVTCIKNQDDDVAKEILSEDIEKLKSAVL* >BP:CBP00121 MDTAFSPNEVKIMEKAFDSYRRNTCIRFEKREGQTDYLNIVKGYGCYSQVGRTGGKQEISLGRGCFFHEIIVHELMHSVGFWHEHSRADRDDHIKILWDNILPGMKSQFDKISAVLQDLQGENYDYKSIMHYDSTAFSRNGRNTIETVEDGFTQVIGTNQDLSELDIINKLYSCKAKKKEKMRVTTEEPRRLIPQVGEKKPVDSGEKCVDHFADCPHFAQYCTRASFFFVMKSYCPFTCKHCPGDRKIKKSG* >BP:CBP00122 MESATNSSSEESIFHEQTRKLFRLCDAQNIGLIGKADLDVLVDLIPPDDLQKISRFIGEQKVNEPAFCRILKAIVSQALQQEMAKIEAQIPAFDKNQYLQESSLEDEMRAIEQNRSYLDDPLTKILKKELEEIQRYENSQIQNEHAINNTMIKKPLYRPIQPEPTIPKVSSLAEELNAIDKKVPQRKEEEELTQPDRIFKVVFVGDSAVGKTCFLHRFCHNRFKPLFNATIGVDFTVKTMKIAPNRAIAMQLWDTAGQERFRSITKQYFRKADGVVLMFDVTSEQSFLNVRNWIDSVRAGVDEATVMCLVGNKVDLFGSDIARSGVYRAAEKLALEFKIPFYETSAYTGYGIENCMRQMAESLQRREDNHLEEALKLDINSNYKKRSWCCI* >BP:CBP00124 MGITTLPPSQLRPELEWLFPKEVTTTSSAVLQRNSAAEIPLNFLAEHSLALIAALFLIVLTVALLAVLVQYHCQKGSSSGSAGAISPKSFSTSPSQWTTCSTVSSTYSTQSLLQLIGSGLRQSLQGLLLPSEAVVLETIVGKGYFGNVYRGRMRDPAGRLIPVAVKTLKGERARDIAHIEKFLREGVVMKHLDHPHVLSLLGISISPAGNPWVVLPFMEGGDLKTYIADPNRALCVLELLDFAHQVAQGMSYLAAQHFVHRDLAARNCMISAERIVKVADFGLAVDLLDKESYIDESETGPARLPLKWLAPESLRDRRVFSSATDVWSFGVLMWELLTRAASPYGEVSNAKVRHYLETGMRLPQPTHCPDIIYDLMQCCWRATPEDRPDFVFLSHRLRALLQENSPDPFTRRFRPNAEQFLLPVLPGRLFTNYFAAQMHA* >BP:CBP00131 RIPIGKLLSRRIHHQTNGLIIPSKNVLPRQQKRQILFKMGNETPARVVGYYVVFPVIPEETVENNCFMCNIAKSEDWPKLATAEPREMYEGTVRMLMDYGATVMEHMEHLATLPAEDRKFENVVDPLLTEEYDVNFAFQTLVLKMLTDWPDCNRKLFDADLHHIKIMCARDQMEKLTNKDFQDAIKQLYESKENGLSEWQSRLLEWYLLEIKASGLDKHDDKTRKVLGSWSKFIDEYRSKYITGVMSTNDQQTFVVNDKKIIKDAPPHILQKLAVDEQSWESGPWRGRMTPHTIYPFMQYCGDRQLRATAWEKWTSKAGFDHDFYNNSINIEELRHNNEGLAKTLGYASVAEHRLANKMAASPDTVRGFINALTRRIRPVVIDRMESWSAWASRCELITGELQAYDMPYVCRKEAEHHYDVNPLDLMNHFPFWPTFQNIVGVVGHIFNLEFKDITDKGYEKAHADARIYSVGDKFSGQHYGRLYIDPYDRQNKRGGWNVMLARPESKERGLDKIVYFIGSAVAPTANGPSLLHHQQLQQLLFHVRRGSRNPTVGDSKLNSNFSYFQFGRSVQLLLSQSPYRDIAIPWSPFYASDWDAADMFPTFLQMFVTKPNLLATISSPHIITNQPLTEEHANSVALTISRASLWETYRTLFWSDFDLSIYEMEDRKQKFWLDMYKQMYEEYFPFKRNKNDYQPCSFTPIFALQPHMSMYYRKLWAEMLALDIHETFDEEDNEVQTGERLKTTVLNRGSGDVAKELFKRFQGRNPSVGAICDHYAPPLTLQEGMK* >BP:CBP00137 MSETSGRSNSKLSDSSSVSEQQTADLSIFSGSFDGGVFSSNIPMFNFAGQGSQSALYSPHPFVKSNDPCRLTALTQSTPKEPMNLTPADFGLADFSVGSESFADFSANNSSFVGNFQSNVRSTRLLPAWAVDASGNIRDDLTLADVVLNGSLIDFAMDRTGVKFLERHFPAENDDEMHRILFDKLTEHSAVFTSLCRSAAGNFIIQKFVEHASLEEQYRLVETMSENGLIELCLDKFACRVVQLSIQKFDESNAMKLVEKISNLDFLPLCTDQCAIHVLQKVVKILPVSAWSFFVKFLCRDDNLMTVCQDKYGCRLVQQTIDKLSDNPKSPCFNTRLQLLHGLMTSVARNCFRLSSNEFANYVVQYVIKSSGVMEMYRDTIIEKCLLRNILSMSQDKYASHVIEGAFLFAPPHLLSEMMEEIFDGYVKDQETNRDALDILLFHQYGNYVIQQMISICISALLGKEERKMLPTEMRLYAKWFDRIKNRVNRHSSRLERFSSGKKIIESLQKLSVPMTMTNEPMPLWAVPTPLMDITAQFLNRQNFQKQHSVFDD* >BP:CBP00139 ICRMLIPQSSQSMLVASTIISTFAFLATITILPIFFMKVQRINSQMLTDLRNCHQDSSDIWKQLSHKSVREKRSYGGQNSIPSGKCCSCQQGKPGAMGPKGSDGAPGSPGIIGLNGRNGRNGKYVASEAHNEPACQKCPVAPPGPPGHPGRKGLRGQSGNAGTAGKNGIPGRMGPPGPPGVRGPPGELGMQGPQGDPGKVLNGAPQGQPGRPGKVGPRGKGGHTGRDGRPGLEGIAGARGVQGERGSRGARGPPGPPGPSGTDGRKGSCSHCQSDDKPHRGAPQEEPNPEGEYSEQQPVESIEPVPQRRPAPVPTTTTTEAAPVYTDPVTQEPVRHRAYPAAAPPSSYNTGNSEVVPKTINYPDTINQPNYKHDGDVSGAAGTSDDSEDVNVIPAGQYSSRQYASKTNKIGKAIHFGYSNDQLSAFKPMGGGADEEEEIEGYGQPRAFQTNKGYNVQIMGSSPTNNNPTYQAAPVGTAWKQPENHKNRHYTPQYLPPPAY* >BP:CBP00144 VICLLYFSLSAVAIAQQPQFTCPNNANPLVANSGTNLFCTSAGSNTDCPTGSICTTAANAAGILICCSQSTNVNPVCPNSAISQPSNIGYVECQFNNPTNCISGYQCVQSANLANTFICCSTSASVGSCPSDFTPAVGTNGGTISCNPSASTCPSGSSCMQSTLNTAFICCRSANSQRICANNQNALITNGALELCTTPGTQCSSTGYTCQLSVLLATYVCCGQGSTGSSIGCADGRPVYQQRVGETYTCDITSSLNSCPSGYDCALSDDSFVNVCCLTGSTPIPENLSCPTGWNPFRNEVDNAVRTCTAVLDTSCPIGFSCAPSNQVSQFLCCRLASSLVCINGKTLLVNGAPKLCTPTTYSQCPYNYSCQQSVNPTVTVCCSNT* >BP:CBP00162 MASYILNALTLRHDHDAAERTLHHFWDTVCFNISLRMLDDWIIDTDNKDLLDTGLFEEHITSQPLLAASLFSLIACSIGLIVFAIIFLICRFRGQCGSQKYQEYPSNATNYAIYLMLFFISWLIVTSASAYFVLAGIGFWSEKLDARKPFTNASLRLSRSTIGDLYASYDYHGDFENVSEAPRKSLKRIHIHRKPLLHTFRKRIEIPIRPLAEVTFTGTSDKFITKNRPILDLNSNQNDGSEEDKIDEFESFKRLQNLPEPSLPTEEEIKNQVQEHSGIPGIAEIFGNSEDPEDVADNSEEAETSENQSLVVTGGTMTIEEEDSEDVESEESTTTTTTITMTTTTTVPITTVPTTTASTTKSTTTVAPTMETTKTTTTTTKTTTTASPSTISAIFPEVTWTQIEETNSDDVLDQLLTHAETHPDVPADNSLSYNPNLTYFSLHSRFLVFVCRLTFCFVALALLFVILPTFFLVVAGTGCYIYSDHPMNRSSVSNKIGQVVSINASILLFMSPCMLIFSSFTLFYTHCHELLCATIQLQNQQARGIIDTNHQSLIENYSINTNQCARSLAPVQSLLLSSLLLCISLLPCVFAMFKLVKYYFRMSSEFYWNAADNFAGRQFSKQQDFPRYQSTVIYPDDDMTAGYAVYGQI* >BP:CBP00169 LKFENAPFPSITICNLNPYKKSAIQSNPNTKAMMEAYSRRIGSGDKSEGIAAALSASGALHAKVRRAKRKAKGKPRLRDRRYHQAFAQCLCDIEPLTGDRKGSCFAAFKGKIEIDTNSTAGFMNLHTSRCLCQLDTISKTLWPCFPYSSWKEKLCSECVDNTGHCPMRFYKGNELYENIKEQVDLCLCHKEYNHCVSTRDDGVIIEIDPNDELGNLDIGKKVASQLSLREEKLAETTTTEAPAVTQALGFEELTDDIAITSQAQENLMFAVGEMPQSAKEGMSYELDELILKCSFNQKDCQMERDFILHYDNTFGNCYTFNHNRTAEVASHRAGANYGLRVLLYANVSEYLPTTDAVGFRITVHDKHIVPFPDAFGYSAPTGFMSSFGVRMKQFIRLEPPYGHCRHGGEDSPTYAYDGFHYSVEACHRSCAQKVIVDTCGCADPMYPIAEMFGNDTKPCQAVNMEQRECLRNTTLYLGELYSKGKESVIPDCYCHQPCQETNYEVTYSSARWPSGSAKVMECLPGDFMCLEKYRKNAAMVQIFYEELNYETMKETPAYTLTSVLADLGGLTGLWIGASVVSMLEIVSLICMAANGYYKDKTEERKSSLSAQSHHSIPVQRASRGSLNTLHKSSTTQSVKLSVIDIRSLHSNHSSKSKQSIFIEDLPPAIQEQSDDEETSESSRTNGSCRYLAPGEDLPCLCKYHSDGTIKVMKALCPVHGYMVRRNYDYSVSNSEEEDVEDEVHLEPEPFYTAPYEHRKK* >BP:CBP00170 MDTEHRVILNVGGIRHETYSHVLKKIPATRLSRLTPNTANYDPVLNEYFFDRHPGVFSMIMNYYRTGKLHYPTNVCGPLFEEELEFWGLDANQVEPCCWMTYTQHRDTQETLAVIESLDLDGDPPSQEEIAKKFGWEDDFHSGSLSQWQRLKPRVWSLFDEPYSSKYARAISCISVAFILVSTCSFILKTDPSFQIPDIDVFYSLRVVDENGFKNYHKTIGTDKPVTSPHPNFFYVDLICNIWFTFELFIRSIFCPSFHKFVRSPLTIIDVVSTGAFFFESLLHAILIQTGSLVTLDFLSMICVLRLFKLTQHFSGLKILIQTFKASAQELSLLVFFVVLAIVIFAALVYYAERSQLNKDNQFTSIPLGLWWSLVTISTVGFGDMVPKTYLGMLVGSLCALMGVLTIALPVPVIVSNFSNLYSHSQARGKLPKKRRRVLVSLVNIIFVIISIVCFCLKTHPNYRIPDIDISTHMGNLSIGNGPSKIQLNTIYVGKMATRAHPAFFYVELFCNIWFSAEFLVRMVFCPNLGRFLKTPVNIIDFIATVSFYIDWALDRALSGSNRDSVEFFSIIRILRLFKLTQHSTGLKILIQTFKASAQELFLLVFFVLLGIVIFAALVYYAERVERNENNQFSSIPVPQTSLGRVVGSVCALMGVLTIALPVPVIVSNFAMFYSHAQARSKLPKKRRRVLQANEAKVGRGTAAVMINAFTPRGPVGGGGSNPSDGNPLSAFSKTPLLVCTPDGTDKPRRLSQNKNGGNVPPVTQNNNCKANKLI* >BP:CBP00175 MSLRFLFAFYVFYDVRASVDEYRLLQYLKENYDSFERPVENSSAPLDVQVRFLLNQILDIDEKNQVMSILAYMDYHWNDYKLKWDPKMFGGIRDVRFSGDDDASFKLWRPDVLLFNSVSESFDSTYSSRFIVSSNGDVQQNPPGIFRFICQIDVTYYPFDRQTCFLKLGSWTYNGQYINLDFLLREIIGLHGKPIIVEPERSSTNSASYFVNESIDLQVYLQNGEWDLEGTPGKRVVQKFGTDEYHELYFYIHIRRRTLAYGINLIIPSLVISMMTILGFTLPPDACEKITLETTVLLSVIFFLQMVSNTSPPQSQSVPILAAFFSCCLMLVACSCVFTVLTLSLHHRKPETHEMSPTMRKIFIDWLPYILCMCKPDHPKTPKPKVLGKSIAPIHRLSTIPMLNLPRVSQTQFPDRSVFVYHEVPAIIKNTSRICSELLIIEKDIEKMVNKIEEDSKEEMLRSEWRFAAMAVDRLCLYVFSAFITVITCGLIVPHIIANL* >BP:CBP00176 MSNWDYIDEVDIIPKLPPNFDELRESKKWQERKEALEALLKVLTDSERLSTKVSYAELIGNVQTVLAKDANINCQALAAKCIAKFATGLRTKFSAFATPLLPVIFDKMKEKKPTLREPLVECAMEVGRTMPSLEAGQEDILAALAKPNPQIKQQTALFVAKQLDLVVPAKQPKGFIKAAVPVFGKLTGDADQDVREASLQALGAVQRIIGDKNVKSLLGDLSSDEGKMKKIGEYADKSAASYAEEQAKNAPPPSSSASAPSAAAASGSSGNVTSAAVTTAEPAAEADPWDFLDAFDVLSKMPEGFDTNIESKKWQERKEALEGLQQLLTANPKLDPKANYGALVERLQKVLEKDANINVAALAANCITGIANGLRTKFQAFAISVAPIVFEKFKEKKPTLRDPLVACIDAVVATSNLEALGEIVLTALGKPNPSIKTQTDLFLQRTFMKLNSQTMPKKTLKTLVPLLIKHSGDSDAEVRDASYAAMGAMMRAIGEKPSLQLLADIVTDNLKMGKIKEYHQKALAEAGPAEIAAMVQSMHKADAPPAAAAPPKKAAPPPKRQESEEEQVEEEEEPLKLPAEEKKKAAPTKENAENEPPVAPKTELLLNDNGEKAQRIKEEKQLKLVKWNFQTPTDEHIAQLQTLLGNQAKVSLMSQLFHKDFKQHLAALDTLIRLADTAPRSLLANSDLLLKWCTLRFFETNPAALIKVLELCRVLVELTRDTETPMSQEELTAFVPYLLLKTGEAKENMRTAVRDIINVLSDIVGPLKMTPMLLDALKSKNARQRSECLLVIESYISSSGISPLKSLTVEKIVAPFVGDKDVNVRNAAINVLVACFKFEGDQMWKAAGRMADKDKSLVEERIKRSGVKAGSGVATSPPNGGPKIVVPQQQQSVVRRPASRSRTREPEPEDDYQDQRAIANSTFTKGNSSSRYALRDDVFATAINRLADSTYVVTPPQPPSAWANNTFQMKRTNSSSSISSIDTSDQIQRSINNISSSLADVAQDAMYQVTYVLNQPEQRHLVDRKADMVFRASAAQLDMIIDEFKAGKDVTGTMDACSQMLFILMGGVEAEHGLEPLNASPETVKAIISSVLRCITQIGSTDAGYTMARSLNRLAMRLVYRVELSNLLCGLILAMIESIQLNSGITDLVSKLSSKWCDELEKRRAQLRASDIVDVFNQFYICTLTEQKMDITHIHIQVVDNYLERVILQQGDVVLDAARRLSSPHIHLTRMINKILQMMKEQNIDPIMPGTLDARAPDEEEAVVVRTGVQVCVNNILRDLKNVSTYNEQLNKLVQSSDKCRNEYSELVKNHALGEAVEELVSEQTIHGAPNFNKPDVVNAMTMTWKALDLLGPTRAETPTTPPQNLSRMDTTIVGTPLSRAEGAGTITRARGNIMRPKQRPTMSREQHEELRNRLQQAK* >BP:CBP00179 KSKKLEQKPDWDTLDGIGFEFEENKPIVMDPRFYDMLKLPQCDLTKDKVPSKINIKEAMNQFQQCVRPIVERWRGDIKSMNTKFSETRLCEAAFKDMDVIPMTNLHETKWAILPHCVRENPVEQTCIFTFIERGEYHDWGIGLHCDMLVFAGTLGYSSSYKHHQVKLRTKICTNAPEHKFFGADPIIEPNRQLYTAFGKYFPFAIGKKPGFTKFRVLPNQNQKTRKYEFQDVTTIPFTYFLWDILGLKQIDIAWIDIEGGEFEFLDQFYRGGPMDEKGIVICQFNLEVHSKFNPPGAQVFHDFVFRILDDKRYIFTKVLNTDVGIHRMFFVNVEDEKCVRKFLQ* >BP:CBP00188 MSFAQSFYADQKKVEQQPRQQENASPLTTAAIPAHTPIAEDPLTPAQIREAIRIYRSVLSTNSAPASPVRAPAAPPIAERPEVHSNYYGGGPTDIPQSYLLNYATSSPQQPASAPATQAPEPLFTEQQLIAQLQALQVQQQQVAEPVCEVPVVQQQQQPKAAPNKAPVLQKMYDDEESGYCFNRKGRDEDGPEEIPEAHVATPTSAPAANYSIPAPQQQVNYSPAPVANNYSKVVCGPSEYIGMANDNKFIYDAQKALPVSYAQNNSYTLVNPTAQAPIAQPRFEETDDQGVTTTEDVTQVPASPAVTSRFRGMIRNAQTPVQAPPAPIVVERVAEPVNTTPSHNYNNYGAFMPVNQMSMESEYQLPVLNDLASCIEHY* >BP:CBP00192 SKFWKIKQLFIFILVALAANFNYGFSTTYINTSVDQFKNFLNTSLSHRHVVMTETKYDIIWNLFLNCWFVGYFVGVWFSPIFIGFLIGNSTAFLASILQCLAILWYCPELLIVSRFITSICMAVTYQSCILFLQLVTRTSGKHKPTFFECSPTHLRGSFSFLSEVSYSSMTMVGSFLGQDYILGSHLFWLCFFVVPFCLFFTLALFLLPETPKFLLISKDSEEQATESVKYYHGVDSDAKQVLEEIRKEAECENDPLEDSTTFRKMKELFTEPHLRMALILSVSALTNTVGLWALLLSSTFFLENANVESEVAEWSTTAMSLAYVSGTVTGGIIIEKVGRRTLLLLFTFLNNLALLAFVFFAKIRILIDPMKYGCLGALIIYGYTYGTGVGPISWFISSELVPQKHRSIAQSVAYAINTLMVVISTFTVLPLYSVIGSYAFVILYSIPSFISMLILFRYLPETKRREIHDIVNELKNK* >BP:CBP00210 MANIPSFIDRLLSVNDTANPSLTHCIKEAEIDDVIQMCTQIILEQATMVEVQAPIAVCGDIHGQYVDLLRIFNRCNFPPDQNYLFLGDYVDRGRQQLEVICLLMAYKIRYRNTFFILRGNHECASINRTYGFYDECKRRYSLSLYNAFQDLFNGLPLCAMISGRIFCMHGGLSPQLESWKQLAAIKRPFDPPNKSIAMDLLWADPENNMNGWAKNSRGVSYIFGADVVKDFTDKMNIDLIARGHQVVQDGYEFFAGKRLVTIFSAPKYCGEFDNNAGVMIVDERLIISFDILKPAIREVTIRARGTSKNASTRSMLVSSRGPKSKMG* >BP:CBP00211 LEHPVFLKDILHTITYFAIPIHIFGTYCILFKTPKTMGSVKWIMLNFHVWCMCLDYGLTVLTVPIVIFPALGGYPFGILTEWGVSAEFQTYLIVTLIPVVSAAVITIFENRYFLVFGHNSKWRRFRVLLSIFNYLYAATWCLPSFMIIPEQNMARKVALEMLGPNVSDYIRHFPIFMMSLEITYLTLPCLLIVLTFATEVILFVAIIKKGMTELAKTARFSKNTLKMQKNFLKAVYIQVSMYMTSIQLPLAYFFVSIFFKIYNQSANNFCFVVFSLNGLSSTILMLWVHTPYRDFCYKLLRIEKWRKKIGQANSQDNVVSVAPTA* >BP:CBP00214 SKEKVPEEDLNLPYFHGALMNQDADQLLVNDGDFMVTMKLQIDINKLVVYLAVRLKKGIRRYEIKRLPGSAKLGSRSKETIDKLINSLKTDVLEIKGEKIVLKRAIAKGKFQLMHKDVIFKKKIGAGAYGTVYRGRLVKTNEVIAVKKLDPESADEDGLAEMMKEARVMQLYDHPNIVKFHGFILDDLPYLLVLEFCNGGSVEDRLRDKGSRLTVPTRVHYTYMAACGMDYLHKKGCIHRDIASRNCLIHRGIVKMADFGMCRATTVYKMDMSKPCNVRWLAPEVWDNGETRFNTDVYAFGIMMWEFFEIPYATPYAEMKAGQVKRKTRTGYRLPPPAAMPKEVGDIMKECCQPAADKRPNAEKLKEMLEEVYKKQNPTETTHNSS* >BP:CBP00223 SRAAEMAGGNSEEGKGMLLRNGDDKVRHPSPQRGTPDSSSTQGHQFIDQIVTINVSGMRFQTFESTLARYPHSLLGDPTKRQHYFVPDTNEYFFDRHRTTFESILYIYQSGGRVKRPEIVPIDIFLREMRFYEMGDELLEEFWIAEGYEKPKEVMMPTNKTQRKIWELMEYPDSSLSARIIAFISIFVIALSIISFCWETVPSDNDDKVINMTTGELIDELDEKHYSPFFWIELMCILWFTIELILRFISCPCKVTFVTSILNIIDFVAIAPFFVNFFLADTNKSNSSMSFAVLRVLRLVRVFRVFKLSRHSVGLQILGKTFRSSVQEFCLLIFFMAIALVLFASGMYFAEQGEPNSKFTSIPASFWFVLVTMTTVGYGDLVPLSPFGKVVGSMCALIGVLTLALPVPIIVANFKHFYRQENRLASMKSTTKGDHEDDDVA* >BP:CBP00226 MHPRGKFLAGHLSAFYIAPATTAALISRNHNDWAHLQLLRRTPSSDAGTMNQVHFGRTSARRRNAMILENNSGDGDDEDRPKEEIFRKIESYQFSRFQTSVINSAKLWASRNRSLKLINNFLPGFLANLRLALFHLVLIFATVAYIIAGAYLFTKIEHQAELDRYQSYHSIYKNFVQNLIYDSSGNRSVSEVENMIDAFTSINFRAFKDGLKPTDFLVPQETSRWSMISAIFFTTTVLTSIGYGNLIPISTGGKIFCVGYAIIPLTLVTIADLAKFVADMLIMDPTEDPKTGRQLLVLVFLLGYMTISACVYTILEPMWSFLDSFYFCLVSLLTVGFGDLYPSGTVEYMLCSIVFIFIGLILTTLAVDVSGSVGIAKMHSIGRGFDAMKMLNVLR* >BP:CBP00231 NAMLIYLILKRTPLLMKSYSVYLMNFAFFDFATCIISFFSCQKVIFSGWSLIYIFHGPCKHVSSWFCYFCHCFECHTLAHSQWILLGSFMYRYDVLKGSTPTVQKMWRNSGAFYSMSLCFLVVYLFDISDSEELLRIMTDLHPEYHYDDGTGNISMFAPITFISIMYMTTPCVPIYCAILYFRHHTLKILNNPSINLSPAAKISHQKLVRALTVQAGIPIFWLVASGIYSLAQFGFISGPIPENITFRLMDCIPMVSPIVTIAFIQPYRDGLLHLFHKGSSIFIPNTIGSSVVDVS* >BP:CBP00234 MGMSTNKCGARWTSWLTKNMLLLMTMAGIVMGVIIGGVLRNLEPSQEIVKYVGFPGELFMNMLKAMVLPLIAASIVSGLSQLDGKTSGRLGSRAVMYYVITTTHAVILGIIVVSIIHPGDPTIKQKMGIEEGATANESAAQKFLDLFRNAFPENIMRATFSQYQTHYVNVTNSNGIQKTELKTGYVDGMNVLGIIVFCIVMGLVISKIGEEAKPLANLFHALDVVITRMVMIIMWLGPIGIPSLIAQKMLEVSDLWQTARVLGLFVFTVILGLGIQAFITLPLIYVIGTRHNPYKFLSGLGQAIMTALGTSSSAASLPVTFRCLNKLGIDPRVTKFVLPVGAMVNMDGTALYEATASIFIAQMNGLDLSAGQIITVSITATLASIGAASIPSAGLVTMLIVLTALGLPANDISLILAVDWVLDRLRTSVNVIGDALGCGFVHHICADHLNADVAEAEKAHAFVEAHGVNFDELEKEIEQENNNHKTIQHV* >BP:CBP00238 MLKPLFGKADKTPADVVKNLRDALLVIDRQSATQNERKVEKAIEETAKMLALAKTFIYGSDANEPNNEQVTQLAQEVYNANILPMLIKHLHKFEFECKKDVASVFNNLLRRQIGTRSPTVEYLAARPEILITLLLGYEQPDIALTCGSMLREAVRHEHLARIVLYSEYFQRFFVFVQSDVFDIATDAFSTFKDLMTKHKNMCAEYLDNNYDRFFTAYAALTNSENYVTRRQSLKLLGELLLDRHNFSTMNKYITSPENLKTVMELLRDKRRNIQYEAFHVFKIFVANPNKPRPITDILNRNRDKLVEFLTAFHNDRTNDEQFNDEKAYLIKQIQELRV* >BP:CBP00251 MTSEYGCNVCNEEYSVQDPLKCPRVLTGCGHTICHSCAMIIAGRNISIFCPFDRTSTNLPGGDLNNLKKNFALLELLEKIADTGGISEIGEGVQKHDRYAKDRLLNVKCDEDSEHVAVFYCTVCDSNLCDRCSEFTHSTNVLSKHRRVPLTEKPVPKVCCRLHSSYVVEFVCKEVSCDNESPLMCLMCRDYGRHKGHCHVLIEKEVDDLREKLREHLGELTRQSEIVERSLNSINSTIHELTPETDDGSLEETKQEASIRNHFYRLHSTLDQDEIHALETLDRYARNRLESLQAQKDRLEAVSTKIGSTCITLQKALVLEKDNILDRKDDLLALAESTNAEPTEVPDRSQLRTRIAFSFSNDRKLHIGDFIEARVVLLGLDGSGKTSIVRRLKKVRIDAVMAPHPTSGFNIETIHYKNYRLNVWDVGGLPKLRNLWKHYYSNAQAIFYVIDGHAVERFNEAIKELNKVMSDPLLISCPVIVAINRKGGASSLNGHMDVLMSQLEALPFQHELHFCDAAQGSGIDQILDQITVCLSRLNGTCPV* >BP:CBP00252 MTSFLKLVVVGMILVGVAHGASVATADAKGTNCTLTDGFQALSCIMRLSDFAEKIDELDMDDKNEVKEFKKSCDSLEKCFSMLTCGKQQDAETKQAVSSIRNYCDAVVYMAADFGECSEKLEKNKSECFENWDPFPDAIDEEKDEKKKEELKKNACKNYFGKDQCLKKLITETCSEKEWQGFRDHFISISSVLLTCDFKDV* >BP:CBP00254 SILNWTIFYAINKLQSFNLAFGYLSANQALADALHSTTFLLYFCPMVLLDQPLMKEFSHYCGFILLFCYELSVKIHLAISINRFCAVWAPYKYKHIFSDRNTKIYIFGIWVFTGSVAVLFYEKFCHFFYDDQIHFLTFTNNSFCGYIGWYGDFLKNAAIVAAVVSIDIFTILKVRQMSKKVVSNISNQSQNNLSHREVRFLKQTVTQGAVFMLELLTYFFVPLYFENKWIVFFGTSFAWVAVHAVDGMVVVLLNSEVRSFLIGQRSKSHGPSTNRATA* >BP:CBP00262 CVASSQYLGDPEVYKLVFHILTCIEIPIHIYGAWCIIFKTSALMRSVKYLLLWSHFLSAQLDLLFSFISIPYMLLLSFSGYALGIFDQPRWEVYICLIVTAFVVTSILGIYENRFFVLYGYRENPSWCRIRKPFIAFNYFLAVIFIAPMYFLDPDQEIGFQNLATVLPCSPESAIGDRRIYVAFTDSLLPYIGLSLEALLLACEIVVFLVITISKLKSRDGQNCSQLSVKTKKLQKNFIKALFAKSSIPITFLLTPVLYVLVTMQLTYRNQNLSNVCVMLASSHGLFSTIVMVLVHQPYREATWNNLYFCFRCKR* >BP:CBP00263 PDSESWLDSPETVLIFSHIMALLVTPLHLFGAYCILKKTPSTMHSVKLTLLNFHFWNVLVDLMLNVFAIPFPLFPSASGFLLGLFSYWGIRQTVQLWILITSLCFICVSTTMIFENRFRLLNHKNKHWKKFQPFWVVGNILFVFIFLIPTMLQVPDQDQARQMVFSKLPCTPEHSIDDRRIFVGAIDLNFTFFSLTIEAILLFIEIATFFFIVFFKLVHRNKRKMSLMSNRTHGLQTKFVIALCLQTISPCLLISIPVEYLALATYLNYYNTSLNRFSMILFGLHGVCSTLTMIFVHQPYREATVDNFYWLMMCRQNSKKISV* >BP:CBP00264 MATPSPSTSNDSSDFEKICTICGRPAFVRYYGAVACGPCKMFFRRMVIEKLTYKCKKIKICYITEPKPLKCKSCRFKRCVEVGMKLPPTNCTVLELKNREDDELVRLFGFLKIRDDQRMETYMNFYTTQNPSLEDILDGVKPVKMDVERSMITPVEWSFTAILSVINHFRSFDFEQLESRDKKLIFQFNTFKSNILCGAVRACKEHREKMVTPSGHDIFPDILVTKFNASAELLNRICCQVVARLMELKVTDEEFVLLNIIFFCNSADAHSDKAKSILAARQRFYVSALFKYCQLTYQNNAPSRLNELLSVYHIVQKNASEMQYIGIMIHGFIPNFPIRKLVSDTYML* >BP:CBP00268 RNYIFPLCIGSLVLGTYLYSFIFKEARYTVILDGKEVNFTGVEDFIQPYVNIVSDFFVASNYKMMSCGIRKSMSQLTVNTMCLLHDEERFLQENHSLNETWVTIRSCQNNQAFRKPSEDLLNNPETIRFAFIRDPIERFVSLYLDKCVKEQNCWACKNDMRCVVKEIYEALKNLQNHRDWKPIPTYMDWHAAPLSWNCNFDKDLSKWTLLMMGADAEERKSSILQLGNIMKRRGVSENVVQMVQEQSLAGETAHSTHKSTRRLEAERQVREDPVVRDYLHKIYFFDYLVFPFNRERLDAKYQTDFWKVPE* >BP:CBP00282 AAAETNQTGSVGWSVCGGAVPLAIERLRQFGFVENFDFEYIVEYTECDLGSVVRAGMKFIKEDKVDVIIGPPCAQALRTMSILASNSRKPVLGYGFVSDSDLSDVIRFPYLTTVLPNSQMLGFAVAKVLQQYHWSRVAMLYYQSDIQYCSSVMTDVESTLSDPEADFDVNIVIKAEIYLNDNQTTDIVLQSVKSRARIILWCSQTAFEKRDYLLKMSGHDMISDEYVHIMLSMRNIAFGVQSSLGKSVFSQSGLTPIWESFSEGTDGFESIAKQAAQRMLVLDVNSEVTDKAYLHYMQNNIIRAVREAPMNCSTMACMSANNTVMGAYARHLFDVVYLYGVALTHTNSTDPEVYSNVDVIVPQFITSFQGMTGEVKISTNLTRMSIFQLYGLNEHYDQVAYINFTFLNEKMNVSLFYKDEGPTVWHFYSNHRPLDIPICGFLGKSCPVSFFQQYQLLIIVALVVIILMLITLIIGCCFIMSSRRAEQLRINSEWQIPFLSLMEPENRKNAHHTSKRSLQSAQTGESKTTAVSDFCENYTIMIYEKDMVLTMKYQYMNLTKSDMEKFVKLRKLEHENLNKFIGLSIDGSQFISVTKLCSRGSLQDILSRGNFSMDYFFMFCIIKDVAEGLNYLHKSFLRLHGNLRSATCLVNDSWQVKLAEFGIENLVENEIPPKKRLLWVAPEVLRGSLTVSQMDPSADVYSFAIVASEILTKKEAWDFLDRKEDSEEIVYMVKKGGVFPIRPELITDIPDVNPDLTERLKAGQTVEPEGFDSVTVFFSDVVKFTQLSQKCSPFQVVNLLNDLYSNFDTIIEEHGVYKVESIGDGYLCSLQYSRQVAERLKAGQTVEPEGFDSVTVFFSDVVKFTQLSQKCSPFQVVNLLNDLYSNFDTIIEEHGVYKVESIGDGYLCVSGLPTRNGYAHIKQIVDMSLQFMEYCRKFKIPHLPREQVELRIGVNSG* >BP:CBP00283 MECNDTRLFDTSNNVTYFIIEQFYRFRYLYSNVHPYLSFVLCILGLAANLIHICVLTRPRMRHSSVHTVLVCIAFSDMGTMSSYLLYISRFEFLPEKEGYPYIWALFLKCHAMVSIALHAITLYLVVLMAFIRLSAMKLTTSRWLDHTRALTSAIFIALFVFIMCVPTLLAHQIDETTRGVTLTGMYYRYSVGFSTLMLQNGCFLMKGNLWLTGIFLKALPCLLLLTFTIALIHRLRENNEKRKILIKEERAKKRGDFTTYMLLLMVTVFLFTELPQGIMAIMNALFTTQFHQMVYLNLADVLDLLSLINCYVAFLVYSFTSSRYRQTLFSLLPLTRISYSGISTRQGTLRSHPNQPAAPKTLVQRANSVEVASVRSPLVDKSAATTRPNSAQPTEF* >BP:CBP00296 LHALETEKNVFSQFYAKKWPRQLRKPKNREISNFKHSEGAEFAAKSYFWDNNWDFDLPELPKPEQMIMPLPTSTPDVYDDFAFYRVLMEKEDKYILVACHANVHGFHRGDLRFLEINSRSRLNRLEGQSVIGSLFLGDIVAVTELARNSEAISPVRDVDVSLVTPDTSCYWIVSKMILYPRNVDKKSPVLFSIVNRMAAIKGENEPMNLNVDNWDMMHADSIYTGLTFRPETLEYHFSKDYQKKKINELVVSARTIRSYPGIYGTIFKFKEGDHREEFKKEMHLNTYTDESKELKRLAELEHEKNVFSQYYQKKSGNRRENHRGRKKPSSCKHHEAIEFAAKSNLWDNNWDKDLPMLPRSQEIIMPLPASAPAQTEVCGLYRVLMEKNDKYILIACHVNVHGYHRGDLRFLEVNSRSRLKGLSEQSVIGSLFLGDIVAVTELARNSNAQSSVRDVKVSSVTQETRCYWIVSNMILYPRILKPDVTFSFLKNRMAVVKGEDEPMRVNCDDWKTVAPDLIYTGMAFSPIKLDDNFSDDFQRKSKNLLISNVLKISSYPNAFGIIYSYEECSEQNEEFKIGTKAYSDTLEIHKYKRERIVETCSLMGFSAANTIFNGRFDCRAFHMYDVSKEGPTVRFRIENPRNRPTLGLWNNGNKILIGGPTGDTNGTIETVMCNSSHMGWLKIAARLTRECPKDFRFNGDLFVSQREPKDHYYLYDGYFQDMAPESNGRKIIETLYGGKPLELRTGDVGGEYFFPSTPEPIRLNVFQKEYVQMLLDGNPLVIGSSPFGCGKSMTIITAALEIYKRNAERNLVGKTHQLLITQSNFASVNLIEIARKTCNSGDEKLRNMKFMRFITDKNWNEQPDHGRTKFDMPFLMNKVFKQWAIGELDGNELMTHHTKSMIAHIIRNGTVTVDELCSAARRVFDKYGDCKIPFSGHLTEAFFILYEPDLIMTTADSSKSVCTLLDKKYETNKNECTTVQIDEASQLPEYTLLGLLKTYNKANFGLIGDIHQLPPFCMEELEGRLKEFGIGNTMERAIQNKLFPISNLRYVYRCHPQTTALLSELFYDGKLISGVTESQRNEFMIKRKDFWPNPSYPVMIINHMGTCQRMGTSAQNHSEKDLVSYMVQNLLDQRKYTLKPQDIGVISFYAAQTSLLTEQLRRSGVKCGTVDAFQGSEKEVIILCCTNEHATEFMQCKFRLNVALSRAKQATVIVGNLGYLRKAKYWNAIVKRVEAYGNL* >BP:CBP00300 MIFHGEKLEHHDTPVHDFLMDRFERHEKNDPNCLAFTTAENEQDSISYKNLKKKIIQISEWFLENGYKKGDVVLLAAHNNWRCFAFCMGAWRAGLVVSAASSQFTAYEMNYQIEDSHSQLILADAQTLPVVLEASKNLKFVKNVVSIAPNSPKPVIEFEVLTSRLIRNLKMPKIDPMNDLVLLPYSSGTTGKPKGVMITHLNVSMMMVSCIQFHDAIAKSYGLPPDFIFPHELHFLPLYHVMGLFRALLTSYRGSNQILFTKFDMELMLKSVEKYSIAILAAVPAIIVRMVNFPLLKNYDLSSLGTISVGSAPLPDGALQKLKKLIPDLRIVQGYGMTEFSFATHMQSPDCADGSVGRPVPGTSMKVKKEDGTLCGPHEVGELWIKGPQMMKGYWKKEAATQELKDEDGFMRTGDIVYFNENGDTFICDRIKELIKVNAKQVAPAELESVILEHDDVADVCVFGVDDKDSGERPVACVVSKQGKRDLETMKAIMRHINQKLARYKHIKEIEFVGEILRTGTGKILRRTMKKAFLDAKKSRL* >BP:CBP00304 TLYYVITHKFDLWPDAYECSGNYTVPTARWPKFGIYLWTSGSIFLTLYILCFIAICKIKSSAPVYQLMFFIAIFDIIAIIVGSLILGYLTFHGIFFCQCPLFFFIIGSLAMFTWLFNCVSCIILAIERCSEVNPKFFLSFLFGKKVFRVVKTLVFIYGINGLMFSKPVIFSPEYTSFIYDPMIGKDIILQGVVMCFFHSAAACIYEYMAYFTPTLYVIVAGEVVYQLACSCLSVVYLTLNRTIRNTVVKMVIPKSIRAKYGWHIGVEEHLAVEQAAESNGIALVNASGMPVKFDNFFVN* >BP:CBP00305 MTMNLIPRPIIGSYFMISGIALIIIYLPCFVVMIKSKCRAPSYQLMMLLAIFDLTSLMVNSVTTGILGIMGASFCHYPLFVFTAGSIGLGSWMGGCVVCILLAVDRCVEINSNFPLAIIFHKQVFRLVMLVICIYWVYASFFTNPLLFTAQYSSWFFDPFIGKEGDLYHNIPHTINNLLVSASSTPLYIYLCYHLIFKFGYSTSMWLYRSKQQIIIQAVILCFFHATAACIYVYMQFFPTPSWLIIIGQLAWQYSNGCVCLAYWTLNRTIRNAAIRMMLSKRIRKRFKLHMGIDEQIAAERDGEVASVSNVMNLMSGTAKVAPFLCE* >BP:CBP00306 ALQMSLYHVFTNSFTLWDEAYDCPQNLTNLKFERPVLGSFFLFFGVMFIVINSVCTGIFDILGISFCHSPLIIFCLGAIAGGSWMAGCLACVMLAIERCVEINPQFPLEFLFRKSVFPFVRILMGMYTLYAYLFVKGLTFSSQFSCWFFDPLIGKDPLLYHSYPHTINNFAVGIATTALYIYISYRLICKFGYTTSMWLYKTKRQILFQAITLCIFHTAAAFIYEYMQFIEVTPVIIIASQFIWQWSNGAVCLAYLIFNRTIRNLVVKIMVPKSVRKRFGWYIGADEHIALEEAGGPTLSAGLGTVNAIGGVIKFDNFM* >BP:CBP00307 MSDLQMSMAYMLTHSFTLYPEIYKCPGNTSAMRTKRPILGTYFLASGLIFILLYTPCFIVMVRSKCRVPAFQVMLILAVFDLLSLSVNSVITGLLDIMGFSFSHFPVFIFCAGAIGKGSWMGGCVACILLAVDRCVEVNAKFRLGFLFKKKVFRVVMGLMVLYWVYSCGFTKPLLFKAEYSSWFFDPKIGKEPYLYHSIDHTINNLVVSLATTSLYIYLCYHLIYKIGYSTSMWLYRSKQQIIIQAVILCSFHAIAAYIYVYMQFFYSPPWLIIIGQLAWQWSNGCFCVAYLTLNQAIRNAVVRMLVPKKLRERFDLHIGIDEHLTSVKQITQINTVSI* >BP:CBP00308 IDMSLFRLLSDFFDLPAEYQCPDCLQNDYFVRLRLGIYFLLSGILLILLYIPCFIVMLKSKSRNPSFRVMIILAVFDIINLAVNSVSTGIFSILGASFCQYPRLIFIVGAIGNGTWMAGCAMCILLAMDRCVEIHSKFFLAFLFHKKAFRVVLGVVGMYWMYSVWFTKPLLFSARYSSWFFDPKINRDPNIYRNVPHTINNLVVSASTTGLYIYMCIFLLYKKGKSTNSMWMSRNKNQVILQAIIICSFHALAAYIYVYMQLFYSPPLLIILGQLTWQWSNGCFCVVYLTINKSIRSSVKKMLL* >BP:CBP00309 FQMSTFYLFTNDFALWDEAYGCPKNLTTIRFERPVLGGFFAFSGVLFIILYILCLIAMLKRDLIRHPAYKIMVCLAMFDIPSLFIACIFTGYFGYFGIYFCDYPRLIFVLGSFAFGLWMGCTFSCSALALCRISGVNHNLEIGYIFKSHCIYYLIVIIFALPSYGIFFTEPLIFRTEYMSWFFDPGTGLFDSSNYHNISQVINNAAESVITTILYAYLVFYIIRNLTNVILSAHDVRVQRQVILQATIICFFHSLASSVYVYMQFFYSPAWLVIFAQISWHICTG* >BP:CBP00311 LSSPEFLKITFHVITIIAIPIHTFGFYCIIRKTPKHMDSVKMLLFNLHCWCVLLDIAITVFGIPYIFLPALAGYQLGFVDAPALVFYLVVTFLTGVSTSIFVIYENRYHILFGRNCSWRFFRKYCIVLSYCLVPLYFVAPIFSVPEQETARKIVWESLSCAPEIPEGHFDFFVISLNIRLMAITIAIAEGVPFFQILIFFSLNFYNLILARQPSGLSRKTTQMQNRLVLALFVQSSVTLVLFVVPVNSIILSVYTGYQNQILNNFIFLAFASHGIASTVIMVVVHNPYRRFLRSLSLQSSRKFTIMVINSEIRF* >BP:CBP00312 IKMIQCPTDDTYLASPEFLSFALHTLTCISLPLHVLGFYCILEKTPKTMGSVKLLLLNIHTCGFFLDILITILGVPYGIFPAMAGYGLGFVDLPGLCLYLIVMTINAISVGIFLIFENRFFILFAENSWWRHFRKPVFVASYAVSVIYFLPAQFLIPEQEGARKFVWEMLPELPQEIYDAPVFVLAIDFHYVVIPVFIMSNLLIAESGCFIILIYGNMNERTKKLSLSRHTIKMQRKFLRALNIQTAIPLLYLMLPMGYLVTSRIFNLYFQSANNLCFIIIGLHGLFSTIIMLYIHAPYREVCKKVFHCK* >BP:CBP00315 MDNLLRRDYLDGVDSLAEFLQYNFTVPCNGVKGKNQIDCSFSDLCSGQCNDNQVIPLFNLIYRNASSRLHPNFRLTYPTMHLYNDEYYVGEHFAGVKIDPKTNVISRVKVVVLYFRTDRQTPQISSVINEWERSLFDYVAHFNHPTLNMTLNSDAMIAREVRTNGLSCVPYFGASVIAVVLFIFATNQREHFVMSHNIVMAILGIAGPLMAVGTTFGFLFLFGFPFNSITLVMPFLIIGVGCDDVFIIIHAMRKTDKRESLENQIAETMEEAGPSITVTSATNILSFAIGIATPTPAISLFCLYTCIAVAVDFVYQLTFFVAVLVFEEKRLEAMRLSKKQEKVEEALGAPKQVLSIQNSIRSTAGAHPLPANPDGIVSRYCRFLKDWRTRVALLLILSGYWTASYYGCKTMEIKMDTTNLIMKDSPLNNIAWIYERFLWSEGQLVLVFVNNPPDLANEHNQHEVLELVRRFETLPYSMGRNSTSIWLRSFLYQSSLYHNTKGFNGLLQEWLDDSEGGGARWNDMLRLKKAENGTILGVDKFMFATACAMGDDANWATREKLQKQWRGVAHEYAHFNVTVFQSYSFYIDQLDSIGGTTMSTVIWAAITMDLACLLMIPGINSILTSTIAMMSINVGVFGLLSVWNVNLDPITMCTTLMSIGFSVDFTAHISYHYYRNPTSWTTDERLADALKSIGWPMIQAATSTVLCIVPLMFNSSYMVWVFVKTILLVTVLGILHGIIFLPALLLTSGDLSRLFGGSSDSKIQPEKKEKLGEISQASSFSSTNSETVLVKKDDSTELKTIPQERGS* >BP:CBP00316 MYINWVHHYVPKISFVLSLIANPLFIYLVITCKKTLFGSYRYLLSFFATFNLLASFSDLATPVCVFNYRYVFVTFVADGPFSWKSKYGEQLLYYRCGIVSGTYGILNVHFVFRYLTLKRNAFVNKHFMPYGLILAIMYVAAHIAIWAAVTGLCLHSAQEMRDYIREPFKALHNESFDDITFVAGLFSETTAEIAERSWTGIVLLTVIASYSIVLYIVLGYKIVTGINTKSSTMSKQTAQMQKQLFKALTIQTIIPICVSFMPCSLSFYGAALRIDFVNWVYWGAAVAVSFFPFLDPVAVTLFLPTLRKRL* >BP:CBP00325 MWRLAVFLSLAAFFVHDVLGKGDPELKMTTPQIIERWGYPAMIYSVTTDDGYILEMHRIPFGKTNVTWPNGKRPVIFLQHGLLCASSDWVLNLPDQSAGFIFADAGFDVWMGNMRGNTYSMKHKNLKPSHSAFWDWSWDEMATYDLNAMINHVLEVTGQESVYYMGHSQGTLTMFSHLSKDDGSFAKKIKKFFALAPIGSVKHIKGFLAFFANYFSLEFDGWFDIFGAGEFLPNNWAMKLAAKDICGGLQIESDLCDNVLFLIAGPESDQWNQTRVPVYATHDPAGTSTQNIVHWMQMVHHGGVPAYDWGTKENKKKYGQANPPEYDFTAIKGTQIYLYWSDADWLGDKVDITDYLLTHLDPAVIAQNNHLPDYNHLDFTWGLRAPQDIYHPAVELCTNDYLGK* >BP:CBP00327 MGALSQLRLLLWKNWLQQLRSPWFALFELVVPLILIGASFGLLIGFSDQFETTYDERRYAAWPVSGSAYDLIMPTNPNDSIKSAIVEPYFLFNSQLTCQFLNTYSTGANSYRMDIILAYAPMSAATTDKIMSIIQSRYSLTDLLSPVAPFIHNLYNITTIPTLNTNMSLKGFNTEGDMVSWMQGQFQSECDNPLLAGIVFDDSITKDLFNDNKRDFTYKIRLSNTHRRSRNAFGDDSYPWDTSVSFAIQYVSGPINPDDNDGGSPGYWQEGFMTVQRAVDVAITELITGSGPPISPLLDSYQVSRFPFPGYSTKIIEVGAYFMPVIVIFSFMTSVIYIVRAVVVEKEDRLKEYMRVMGLSQFINWIAHFLINYAKLTFAVIILTILLHFVALKSDMTLMFVFLMVYAFDVVYFAFLISSFMNSATSATLISVVFWMLLYFWYAFFSSIDQTNPYALGVRLINCLNPDIALNYGLQLLAAYETQAAGLKWNEMFNPPSPDNNLTFGHALAALVIDGIILVILTWYIEAVVPGGDGVPQKPWFFILPSYWFPYSGSKTVNSSDQYEHVEYASHVKLEQEPTDLTPTINVVNLTKTYGTSFFKKLFDCKFGKAGEKRAVSKLNLKMYPGQCTVLLGHNGAGKSTTFSMLTGVASPSSGSAYINNYDIRSSLPKIRRETGLCPQYNTLFGFMTVMEHLEFFAKLKERKWDPEEAREILARLRIDFKADFMAGALSGGQKRKLSLAIALIGGSEVVMLDEPTSGMDPGARHETWTLIQREKERRTILLTTHFMEEADLLGDRIAIMAHGQLECCGSPMYLKQQYGDGYHLTVVYSSTETPDVPKTTEIIREYILEANVFSYIGQEATYLLNAKHRPIFPKLFRELENHQRQCGITSFGVSITTMEEVFLKVGHLAEERYNYEHGIEDESSELIEKDDPMLQNLKAPVRLTGFALQMQHAKAMFFKRGIFFFRKWTQFLPQLAFPVAYLMLMVFTSQVIPSVKEQDPQTISLAPFSTKDKPGHVVSDSGNYVTMNGASTKLSNMVQNTVAALGVNQTVVDISSSVESFIMNQTNALGSRNFGLKYALGFVPSSIGIPGLPIPDLKTIRTYFNNFGLFTPALAITFTDSMLLSQAKNKQYTFTAINHPLPPSTQDTLKNTNRSDGAAFLIAYGLIVAFAVCVAGYSQFLITERKKKSKHMQLLSGIRPWMFWFTAFIWDAVWFVIRIICFDAIFYMFDITAYTHDFGIILILTLSFLLYGWTAIPFTYWFQFFFESAPKGFMMVTMYHILTGMIGSIAVPIIQQTSSMDAGYLWSIIFAWFFPTYNISQIATVTFQNENVRMACQKLDCNVPMFKSVVACCGTASQKLYVDNVLFVGNRKGILVYVIFLAVQGFIYWIMVFMRENDQFGKIFNLIKCWKKKDDHIWDITEGDKEEQRDVEDSDVIAEKSVVQRLANSNETALVSNNLVKWYGNFNAVKGVNFHVNSKDCFGLLGVNGAGKTSTFQMLTGENSISSGDAFVNGWSVKNNWREAGANVGYCPQYDAIIKEMSGEETLYMFARIRGIPEKEIPVKVQAVIHAIGIGMYAKRQIKTYSGGNKRRLSLGIAIVGLPDVLLLDEPTSGVDPKARRIIWNILNRLRDLGTALVLTSHSMDECEALCTELAIMVYGKFRCYGSCQHIKSRYGSGYTLLIRLKNRGDAEKTKSTIQQTFRGSKLKEEHILQHNYDIPREGDSWSRLFEKLETLSTSLNWDDYSLSQTTLEQVFIEFSRDAGQLDVDPYGDVPSLTGSGNKQNGYANRAMSVESITEMGTYF* >BP:CBP00329 IPGSIISRGEQPTPSPSDSSQSTLIPNFPWMENIPKIEFTTSKPKKPNAIREGLIEQVRSGKIPRELAPFVNLTKIDEMKKDHNETLDFIIRDEDVADVPDDDVEHRKVNTISHDGNKTIVTISDEARDDLYKHWMDQSLAGLMGAVVTNVINKRKMTKNEKKEHYVCIHESKNVTAHAKCVVTVLDQLKKRNEKLKMYSTLTTRLNSHRKNNRMDNEAFKTTLGHYEKYVKSGAEEFRVKRASGFSIFDELESKRQAAIRGNVQTRKSYTIRENKSLSPLALIARKLTELVRAGKNKKEQPKRWQQVIQDIKEESTRIKSKKRNKDRMKRKFSKFVSTMKEAGINPRKALNTMGMEDLFEDDPILSEKEMELKDRKEMMERMSPDDKILHEPIKLIREAIKIGMTMAGKNASEIGDKKIAFLSPQFMSILPDEVANDTVSLLSPSILALHGEGSTMDRQLSLTKALKLMEDTGQEEWMNFVLEASGVTETVDKMRELEKKEENDEMRKDFIDKDGKPIFFTKENATEIYGEYEAMKLDIIQGVYKNMSQEQMDAMNATGYSILDDRQMEMIYGAGSPYNDSEVLDKFRGIPKESMPSKIEENIRMIAKEELKFELSRK* >BP:CBP00332 SSSFTRIPKRDRTSPEKGEPSSKRSAPFTTPSSTTKIGRDSFAVMDTMEVQMNMFQLDITKMPPVIQRLHVDTLIITSKGKEINLNLGTVSTGGDVNSHNRRLAQHEIMRKFFEKKRSLFSSSSYHSLAYDTAACLYIPEGQYRGGEYEEVCLSQQDFAPEEWDIVSKISRRKDDSFIVRIKPAGAVYTQGDELFEPSNRYELTRIVEIVTSQKLNTTDFYQFGNATFPLRAHPNSEPDASSEIRSGFAKVARLTEGREGKHEMLMTVDTKLSPFYKPTSVIRCVLTKIQESRGGGGGGGGYGGRNDSRDSRGSFGGRSDSRDPRGYGGGYDRRSDSRDSRGGRDSYDSRRGGGDSEDFSSHEIDEIARACMESDKFLYSLESALKGLFAEAIHLKGSACTIRITGIKQCTANNTKFTKKDDKGEREISVSDYFYEEYNIKLKYPNLPLIVSKKMKYECFFPMEVLRIIPGQRIKVNKMSATVQSAMTGRNATMPRQHVDLVQRILQDSLKLERNKYMDAFGIELKSTRPVQLKAKILPPAEIRFKNLTYMPEIKRPGFKNPGKFVEPAHIYRVAVVSFDNAIDMRQAEDFCDRLFDYCRDQGIKCDRESKDWSIRELSSSDNVGIKEAMENWMKKKVDIFVGIARDKKPDVHDIMKYYEESVGMQTIQLCKQTVDKMMNPQGGRQTIDNVMRKFNLKCGGTNFYVDIPSNIRGRSICSNTETLHKKLLEKVQFIGFEISHGAARTLYDRSRNQMDGEPSIVGVSYSLKQSTQLGGFSYMQTQREYKIQKLDDAFPKCVKAYAEDAKTLPTRIVIYRVGAGEGDFKRIKEEIQEIRGTFEKIEKGYNPALVFIVAQKGSHTRIFPSRIDGNKAFEQNVPSGTCIDNVVTSFGYDEFILSSQTPLIGTVRPCKYTIIANDPAWSKNELIHLTYFRAFGHQVSYQPPSVPDVLYAAENLAKRGKNNYRVHQRYVSMQAIERRIISENADFVNENMQEQLASAIIDEMSDAMNGMTIPKRNFWA* >BP:CBP00334 MTDIEKQTEIREKKGRNVMRELKIQKLCLNICVGESGDRLTRAAKVLEQLTGQTPVFSKARYTVRTFGIRRNEKIAVHCTVRGPKAEEILEKGLKVKEYELYKENFSDTGNFGFGVQEHIDLGIKYDPGIGIYGMDFYVVLNRNGVRVSKRRRAPGRIGPSHRVDKEETIKWFQQKYDGIILPPKPKTKKNVYRRR* >BP:CBP00335 MFFVLIVFTFLTWLVVRQYQKVSRLPPGPVSLPLIGNLPQIVYYLYTTGGVVSTLDFFRKRYGNIFTLWVGPIPHVSIADYETSHEVFVKNANKYADKFHSPIFREMRKDIGILTANGDHWQEMRRFALFTFRNMGVGKDLMETRIMEELNASFSENMGLISANGESWAEMRRFALLAFRTMGVGRDLMEERILAELDARCAEIDAEAVNGKTIVHTSEFFDLTVGSVINSVLIGKRFDSHNKDEFLKLKGLLDSADELFTMFELTVPVWLLKKCFPERYARIVEVQEEIINFVSREANERYEKVKSGEYTINADDPQDFVEAYLAKIEEEKEKGTTNFYTMQCLKHVIG* >BP:CBP00336 MDGTFFQKDLAPFVKYSLNKKRRWETKGDLNSLKNLQSSYRDMNVVVSDRVWLDMDPYWCFISHINYYHNYFLQFPIRHTYQLDTDNNYRCLSSDSVYGQPLKSLLPENRSPKKSDTLQSATFDMPKVAYHILTPPENYEKLRNEDFCPGSSDRFLKHRSIKHWRRCKKMTEALLAIRYEDFDYLNDPIYFIDNEWDIDFGTPSKL* >BP:CBP00337 DSLLSSPEFVSRTFHFLTFITVPVNMLGAYCILFKTPKSMSSVKLVILNLHLCSMTLDIVFSVLIQPVVFFPAVAAYSNGVLKVFGKCAGIELYFAGTMFAGTVVTDHCTPSRKKPACTPEKPGLLFQKSITVVSMSIVSVMENRFYLLFVINTLWRKIRPFVLFFNYFVACTFLIPLLLQAPNQIIAFEIIQKKFPDIPFSSYSDSLFIFSVDSSYVFLSVFLTGALTVSQINLYCFLIILNMRKLSSNGKMSQRTYHLQRRFLIAIGIQIFTPLIVLFVPATYLDFCFIFEYYNQAVNNICMILISFHGWVSAIVMMFIHEPYRKFCL* >BP:CBP00341 MHRSLQILCILAVFTSLAYSQGSRDENQSAKRNDFSRDIMSFGKRSADAADMYDRRIMAFGKRQPNFDRDIMSFGKRSAPSDFYRDIMSFGKRSASMYDRDIMSFGKRSAAMEYDRPIMAFGKRAEDYERQIMSFGRRK* >BP:CBP00342 MDQFFTKLVALLLILLQIGAILATPIPEAAPEDVETRRELEKRGGARAFYGFYNAGNSKRDQVALPYYLYEKRGGGRAFNHNANLFRYEKRGGGRAFAGSWSPYLERLCDYERSGYPIYFSDNSYY* >BP:CBP00343 VSKPIADAVLRYGKDHPVFRNKLLIPIGRGLVRFTSRMRMKRLGLGEPITHAPVSEAAALEQASDFVQQLVLFSYSVGVFASYYFYTKLTTPESLKIEEYNDFKEQQERAIKELRLQIESLEQRLAAQQKRNFFSQLGFSKDEAPNGPSESSKEASGASESSKPSKPSESLKERFQRISSLPIDAAASLILDDEEYLIVRRDTSVGIELSVNFAARGERLRYRIPSSKLRESLAQLALKEAACHVIGS* >BP:CBP00344 MWELVSAELFSASNLFLLGFMISALAVSSVFTLSHITPWVRRTRDEYLTPEIVYRSSPEKEFSKLLESERDAPKRYTPSRCYLSVVIPAMNESERIEIMLEDCCDYLEKRSKKDLEFSYEIIVVDDGSTDDTADVVVGISQRRQNIRVLKLKANRGKGGAVKMGVLHSSGKLILFADADGATKFEDFEVLEKEMLRAAGGEPFDESFPAVVVGSRAHLEAASVAERSFFRTVLMHGFHALVWLFAVRTVRDTQCGFKLFSRSIAARIFPVLHVERWAFDAELIFLCEKWTVPVSEVSVRWKEIEGSKITPIWSWLQMGRDLVLIWFRYNIGIWTDSQP* >BP:CBP00345 TAISSSPEAPQTMSEVQKVVDDDEDDEWGDFGEAVVAAAPIQNTNPPPTVPPLQMASNDEDDDDWGAFDQARPSTDRSDGPSQLAHQQSLEDWGAFEETQKTSTTNDDNEDDEWQAEFSSASTASTVIPAENLKTLEEMLEDDAFWDDGYCEAMELEEISENDSSSSSPLDIPALFDTEELKELTNEFEDLEKAKYSKLWLSLRVIEEAISQEQKTSTSPAVDSPSVPAVDFDWDTSGLTNPMNRASKQLHEMSQKCRRFVCRATTDCINLLKCNLLLASFNPYNTKTMQIRSVVNALTHRFPNLWKPFSRNFGYKEAYQCSAIIDVDFLGSNGVATAYTSTLQQDLEQFGLTNGSTKSNSNGSSILENLMSRANDSSSTTGRYRTPEVLSLDARQLLERLPDLQYLQSEVLMFPVGTNLPH* >BP:CBP00346 YFLLFLAFFIFKINGGSNECYSCSGVCHNEPCNCQMGSCESGQCFIEKKPTEIPGSMKITKGCLRRTSRIHHGCEYDHFSDHILCVCQGHYCNDKVVMNTTRQKYTRTVTCRECSEKQPDCGSTCEGHWCHEDMSTGASGCGYGPPALPFYYRGPELFYYRSKVCITLSRGAGKPRRHCVCSTKMCNTVYNYQFNQYNIKDREKEGSTRARSLTLSATDYTLPLQTCYNCETNTQDATSMSHTTNCRSNRCLGHYCTYAAQRHTSKSSMGRSNMVHAVSELQGCMNVSDKSHIQLGCSRKWISDEYEEIHCACKGSLCNSDSLTATA* >BP:CBP00347 MDGVYRLFCGCCGLAGGDPEPPYSQLRHDSVTPIRDPPLQYLNQQQQHQQYPPYALQEQGFVNPVHEFSNFDPRPSFRTRDEADGPNYQHSDSGTPRSGLEDEVEDENREREQLDNIVESTQHSIIAVGQTDVDGVIMMDTQYREKAYKQKVQKMATASSTTQLYEPVHEFQFEPTQTPIQVPLRYDEMSATIDKSPIERMPFACPDFQQMRLARTMGVKNAQFLVEHPDPRHAGKSPAMSSSAKHKITAVLDQVHEGVVGIEVEPRDLIVSMDF* >BP:CBP00349 FTWFDGWEYPAYVSHSISLVLIPLNIFGGYCILFQIPKKMEASKWVMINVHFWSSFLDLLVSFLLTPYIFFPAMCGITNGLLSWLHVPIIVQVFLAQWKCILGVGVSLVIIFESRHNVDRFVITRKSSRILFYALNCVYGIFFMTPTYFSLPDQEKAKLELLKIVPCPTPVYFEPNVFVLMDHQGRWFIQLQCTTFFCVLIAQGAFSVSRTVYFLTAYNSKMSEMIQVAIPVFIVILPILYCGCAIEWYWYYQSFSNTAIICVSFHGMSSTIAIF* >BP:CBP00354 SSKLQSLQGLRGISILLVLIFHFFPKNFVNGFVGVDMFFVLSGYLMTRILSKEFTVLSVVDFYKKRFSRIVPLYYFTIFFTLLGVLSLVLKSERTEFILDVKWCLALISNYQPIFEHHSYWDQVSTIRFLTHLWSLATELQYYLIVPIVHLVASNLPFVNRITGYLIAIIILFFFQLLTPFELSYCFLAARVWQFLLGSVAFEMSQRNDLVLDFHTEKKNEKTDFNVFDGIPHIFLVVLLTVLMLPWIFQEHSARLVMSLSAAMLCYSCEKLEQSFLTLQPLVFIGDISYVTYLIHWPVINFVRYIQQKDNSSIDVYEALIAVTIIFVLSLLAHYKLERKLLELEFSVNFTITVFVIGICVALIPCLIRMECLAMKTLSKDLQEKAKFNLIEENVLKPVFELECDYNETTIDLPIDKFGIEYCAHVSNGTGKIMIVGNSLSIRAFPTIYKLVDGQYEEIRLFAKHGGAPLLDIFPYYNYVVMDMAQEMKPDLIWIIQGMNEILFGSDNNGNFSSPVMDRNVPRVLGEFEKLAKMVYLDLPYYITKDMPSKLIARSLIYRKSLERLSVSLEDAEKQVEEQTDRLMNVNCSNCYYNDVQKALINDQDKLYLYEKETYKALTYDGSHLALTGYKYIEPLYQRRINQFYEM* >BP:CBP00365 MCGIWAIIGEQVTPQQQDAFMKIVGRGPDLTVLDEVQPNVHLGFHRLAIVMPGDTPSAQPIVGGGLSVVCNGEIYNHQSLKIDCPYTLKNGGSDCAAIITSFIKHNEDLKETCASLDGVFAFIMADSKNVYIGRDPIGVRPLFYGYNLNGSLLIGSEVKCIEELCERVEYFPPGCCATISLAAPSRPIQPQQYYSVPSIADRFLSIECTQTLVRDILVKSVEKRLMGNRNFGFMLSGGLDSSLIASIATRFLKQKPVAFSVGFEDSPDLEAARKVADYLKIPHEVLVITPQQCVDIIPEVVFALETFDPLIIRCGIAHYLLCQHISKSSDVKVLLSGEGADELFGSYAYMQRAPNALHLHKEILRRMQHLHQYDVLRCDRSTSCHGLEIRVPFLDKRFIDLVSRLPPTYKLMPMKLEKHLLRSAFEGWLPDEVLWRSKEGFAEALGKTDLGDILASHCDKLISKELYEQRAERFPDRTPETTEEYWYRQIFEETFVYDKMGHLVHTKVYRTAAWHRPDEKENIINSPDSENILDVKSDDLLRLRRRSTGSLGVA* >BP:CBP00366 MVVLTKKSVKISYDDVAKSPDQLLRSMSSVHPISDGIPSQQRPLTYRWFPSWRFMTSIMLCFCFGCVHLMNSNMGMAIVCMVNSSVTYDNETYPENAAPLLDWSSDEQGYIFSAFNAGLLVMLFTGGMADKFNAKYMILVSVAIASLANLTLPFMAPISVYWAIFSRFLVGFADALLQPAMNSLITRWFPTSERSYALGLATGGRQIGTLIIIPAAGALCSQTEIFGGWPSIFYLSGFIGIIFIFSYIFLGADKPSKQTCITDNELKFITISNQSEDVGKKRTERKVPWKNILTSGAVWASVISLVCHEFPLMTLIMFLPSYLHDVHHYHSTENGILSALPTVSLWFAKIGSSYLNTWLQKNTSWKKDTICKVLNSIGSIGLGVFLLAATFLDKSHAWMAVLFLCLSMASAGLHTPGCQLALVSVAPAYSGAVTGFTFFFVAVSGIIHPIITKMIVKDRTAAEWNLVFYISTVIAIFPIVIFNVWGSTEVQWWAKSKASMQQDPNNKKMSKSSKAPSTPSIDSIDMA* >BP:CBP00368 LLIFVILVSTTFSDFETDLQRIKEEYTCYPNCTFNYTEINSETAKLFPSSCYSICGLITINENTDVSFATLEKLFHRMYTLKGGLRIENTTLRSFSFLQLHGFLSFFCFPFGTRIVNNTELVDAEALENIVHVSNTSHECKMEILDNSKLDASRLCESQFHNSVQNIEVLDNGKDCGCSSGKITPRNLPDFKNCIVLFDGLVLTNMSYNSNLKSLSKIANIRGNVEIAYTNFKDLSFLKSLSKIRGNTFENLETVILDIHDNPKMKRLGLDSVSVSEPTQYVDTLEQDWVPTMNLENLHPDFCITYQEAVSLSYVRFKNLEAKFCETEWKTDMKSCKFKSLRELESDCIIIYGNVLISSGDEEYVEKLEDTVYIFGSLTIQNSELENIRFLKML* >BP:CBP00383 MWPDTLYWIFIGIIDILAIILNAILIYFALYRTPKMVRVYTTLIINLAFTDCCSAFLNFFVQQRMIPSGFTIGYISNGWCKLIGYRFCFLSHNLMAHFIVHSNYSLVLSFAYRYYILRKPEPRRKTLLIVLFFTYLPSFLQLVLYQFAESDPSEIVRLLQPYHPTYNFTGLTVSGVADIRSVYALYKILQMTVMTVPIFSTILFLRNKIINRLLYRGINISINTKSLHSQLLMALTYQALLPTLYSINVLMYVLEQFGVYSTAFFENFLMSGLVLIPFFSPFTSFFFFTPYKRILLGMVLKKIDKRPAATSETGPGSFPI* >BP:CBP00387 GEDEANRKKFPCEICGKQFNAHYNLTRHMPVHTGERPFVCKVCGKAFRQASTLCRHKIIHTDSKPHKCKTCGKCFNRSSTLNTHVRIHQGFKPFVCEVCGKGFHQNGNYKNHRLTHEETKKYSCTICKRAFHQSYNLAFHMFTHEEHKPFTCHVCSKGFCRNFDLKKHLRKMH* >BP:CBP00391 MTINYHKEIMTSHPWTFFLLLFKWKGSIWKAVYMETIIFLIFYGIISVIYKTALGESSQRTFEAVVRYFDKRLSYIPLEFVLGFFVTTVVNRWTKLYQTIGFIDNVGLMANCYIRGATEKARIYRRNIMRYCELVQVLVFRDMSMRTRRRFPTMETIVAAGFMNKHELELYNSYDTKYNSKLGTKYWIPANWALCMTNKARKDGYIESDYFKAQMEAEIRTWRTNIEWVCNYDWVPLPLMYPQLVCLAVNLYFLVSIVARQLVVEKHKIVDEVDVYFPVMTFLQFIFYMGWLKVIDVMLNPFGEDDDDFETNALIDRNITMGLMIADNPMTTPDLRKDPFYDEVDVPLLYSEESSHVPNHHYHGSASEVRLEHRGSGPVTMMPHSQSAANLKRIMSFKSSEDDEEKTNPFSMSHDDARMRNWREVSLDSSFLSDLNENKEWKLPTSQQKF* >BP:CBP00394 MDSDDGFDYLFKIVLVGDMGVGKTCVVQRFRSGNFVDRQGTTIGVDFTMKTLNVDGKRVKLQIWDTGGQERFRTITQSYYRSANGIVLCYDITCKQSFGSLQRWIDDVSKFAAPNVAKLLIGTKCDLEDQRAIETEEAELLQRANGMFEMLETSAKNDINVDNAFLELATILKRQYDQGVVEQGASGTFQLGSGGTTSINSPWQRCCQY* >BP:CBP00396 RSRTKFRRDSRSRRQTPTSEMRSFVLLILLTSHLSAGSIDWSSLETPPQFTHGKNAETVFFKVEKSGMSDESAKNIPGNLLEQTIHCQAIGNPRPTYRWKKDGKTFLPSMFPEKVVQKPGEGSLVFSRLDETDAGLYQCEAENSNGTAVDRPVRVQETWIRHFKAAEPEVVVVEVGDPYQRNCSPPASNPNARVYWILMGKEPGHFETISSSHISSNEQGTLFFHYVNETDLKSDRYYTCTAENIELKDYKFGNQFSLQITNYKRRSSAPYWPNGPPPNTNTSEGENVSFDCTTYGKPTPKVTFYKNGVELGSQKDDRYMIEGTRLTIYDVKKGTYGKGDNAVYQCKSENKHGWLWTNFYLNLLAFKPQLLIDPGKEEVEAVIGKKVTLECKFFASPNAAVKWEAPMISGSKGNQIPADPHGVGRLVFSEVSASEEGEYECIGTNKYGQASGVITLKVRKPTTVKPFDRAEDVRMAGEEMRLPCDATSDSQLEVKHEWLVDGIPLPEERVNSGHYRIADDHSLIVANPTQDDSAKYKCVVSTKLDKVEKEIKIQFKDVPVAVHSAYVSNCDKNSLTAFIKFDHIESIHTIAPVKEFWVQYQMDSETEGSQWRTHPSPSAAHPNDQVTDQLRTTSGSATVSLQPFGKYVFRVLARNSVGDSATTTVKGICETPAKQPDKNPGEVAAKGTSPENLIVQWKPMAREEWNGAKFHYVVKYRPVDEDQRDGDWKEVAVEDPFADRVTINLDDDKDVKPFQPYEVQVQAVNSEGRTNVVPETVEGRTGEGVPSSIPSGLRVLEKSGTTVTLAWNGVDPATANGNFTGYKITYWVDEADQDVEEPEDDEEEKRKFRWKRSIRAKRQSGVRKTIVFGPSATQGTITDLKPATLNHAYIQVTNGAHEGPSSDTIDFQTDEGVPSPVRSLRAYPMNSKESDEKGVVVLVWKKPRQTNGKLARYEVEYCKTQNGKQVEKTCPRQQIDADAKEIRITGLENETPYRFILRAHTSAGEGDPNSSDATTLPETTAAGVDPGVPSLVENAIGDKYFNVSFRPAKYDDETRAPVGNTYEVQYKPQNGDEWETVKPSDDGLTVHVDGLSPGTKYDVRVAALQVDSDGGETTKTFSGISKITTTGTSPGERNLYFIILILLILLLLLIIICICCVVCRHRGQNYPVSQREREQGREPILGKPDYKTDDDEKRSLTGSKAESETDSMAQYGDTDPGVFTEDGSFIGQYVPQKSLMPAERPEKGSTSTFV* >BP:CBP00406 MGSSESVPIPGGGTEGYHVLRVQENSPGAVAGLEPFFDFIVSIGNIRLDKDNDTMKEVLKQHIDRPLEITVYNSKSQSVRQTSIIPSQNWGGQGLLGVSIRFCSFDGASQHVWHIISVQPNSPASLAGLIADTDYILGAESVLHQADDLIALVQANEGKPLKLYVYNVDTDVVREVSLTPNSAWGGEGCLGCDIGYGYLHRIPVSVDRSKNLPQVPQQARVPVGNPLVDKIVTKPPAATNFPDPSQFSSSVPLPPAPAPATLIQNLPPPPQPVFLPQPPTSYAQSPVDQQPPHTELNNHGHSHSDGGGHGHSHESGNHGHSHDNGHGHSQEHSPSPAAAPVPVSAPTPVTSYPQQYVEQAKPATDYYQQQQPPQQQTYQPPVNPLTSYQAYQSPASSPYYPPSASTAPNASGYQAPYYAPQSFPPQQNTYDYKAPEIPSAVPPMFSANAAPSPPTSYVNPIPPPAPLNFPMPSLSSIGITQLAAPPAPPTSTGFTSFQPPPFPQYGAYPSPPPQ* >BP:CBP00414 SSSSTSSTLPISHVRRHEDVPTPSAPPSKRSNIQPQESYEPKTWLQQQMEQEQQRKLAEEKKKQSTSTTGDDEEDMLQDVLSQPRGPHKRRFNFVMVSNITFAIPEGYDVDSIEYLGGGSFGNVIKTSAVCRDGHRRWVTIKKMREPFFDPHHARRIFREIKLLQLMRHDNIICALDIYTPDEENDFRDVYVVTEFAGRSLYRILKQQRDYGRRVLTEEHVKFIIYQIIRALKYIHSANIIHRDLKPGNLALTDDSDLMILDFGLARSLEKKDTSLTQYVQTRWYRSPEVIYWKIDSYTNLADMWSVGCIAAELLTGDPLFPGDDVNAQYQRITQLCGSPDEELLAKIENDNSSAMKAVIQSYKVYKRRNFREVFAAYSPSADFIDLIEKLLVLDPEKRITVEEAIQHPYLAEFSLPADEPRADHIFDLDDTQARTRFQWRDAVWTEIMNYQRIMQSPIIPGETDR* genometools-1.5.1/testdata/nGASP/protein_long.fas000066400000000000000000000370211211610345200217620ustar00rootroot00000000000000>BP:CBP00004 GSHQIAKNFVNSSTPDLRPTFVVNFDTSTVICQHSSDPTDLHIHNMSSLCDGKQDCFVNPAMHDEVFPYCEHKCESTCSGKGACLYDGSKPQCYCDSGFSGAACELQDKNECLEHPCHMMAQCQNTLGSYECRCLPGYQGNGHECSDIDECADNIATRCPEHSQCINLPGTYYCNCTQGFSPKGNQGSGLDKCADINECETGAHNCETNEICENTIGSFKCVTKCSPGYSLIDGKCEDVNECDSEKLHKCDVRAECINTVGGYECECEEGFDGDGKNCQRGNPMSLSIAKSSCRKNSAICDRHASCNIFLDICDCKTGYTGDGITCHDVNECDAKETPCSEGGRCLNLDGGYVCCKDGQDDAACIKDQRAFCSGGCCDNAICSNATCACIDGFRGDPHKKCVDINECVENDSVCGGVGDRCVNLFGGYKCCQHGSQEVECTDQAFSSDSSTVSSHGADFTTTGEQVIEGSGSIQTSSGGSITVTRGLIPKEVELTTSGRLACTSYCPPNSECVGGFCECVKGYGGNALVGCEDVDECITETCNVEANEWCVNLIGGFVCCNPTNATHDDCIVLSLGSNVPFSDFLTVPGLEITKEKGLHVIGPNEEDTVVATRSNHSVTSDQLITEVVQQSKNFSSGQIILTRKSVTGGEAVTQTTDGDGEFGLEISAKDFGITLPATLEPRVEGSGKSPVAGVWTEEEDGGEDDDLMEASGSHGSWSTTINGTGFTGSPRSEGTIRVRITTLGEDGETETATKPGITVPGKDGKLAIEKEGHESVSSGSSATSSSGSTGSGASGSTATGKSGSSATSSSGSSSSGSTESGSSGSSATSSSGSTSSGESGSTATEESGKSEPSGATGTESSGKSESGASGESGPAGSSTTSSSGSTESGASGSNATSSSGSSATGESGSSSSGSTESGASGSNATGGSGATGNESSESAGTTASPESVTASRESVEGSGTTPSESTSSLPEGSGEWIETGSKGHFERGNKVSVSHGNGKPEGSGPKESGKPEVPGSQGSGAKESGAGKPGSGSRGPEITTDGEESESTSSGSGKPKNPKITTDGEGSKSTPIGDGKHPEDVEGSGILTTSSGGKNSTLEHGTKLVEVKPEGSDKNPGVGLEISAGKVTSAPEDKEKSNEVGLEIVWESTTPEPTTPDTDNVGLEISGRDLITKRPHQIEGSGTGDEEITATTRDVSKSTKKPRLEIDGGDNGETSGVDGKASTPSPTSPGAPESTTPSAPTTAPEDVTPETGSGEPGIPDGSGESSTAAPEGVSPTSSAPAPEVPTTPEGSEESTKTPEEATTATSPEEETTTQEPLILTAAPSKAPESSTKPSEAPEASSESTAAPPTAQPATVIPPQNREEKPEPTKETFALPTTTEKPVNETIENTKCMSSDECGLDALCERRTGVCRCEPGFEGAPPKKACVDVDECATGDHKCHDSARCQNFIGGYACFCPTGFRKTDDGSCEDIDECKEHNSTCCGANAHCVNKPGTYSCECENGFLGDGYHCVPSTKKPCDKEQSTKSHCAESNMSCEVDTTDGSVECKECMSGYKKSGTTCEDINECDEQSPCSPSASCVNLNGTFSCSCKPGFRGDGFMCTDINECDEKHPCHPHAECTNLEGSFKCECHSGFEGDGIKKCTNPLERSCEDVEKFCGRVDHVSCLSVRIYNGSLSSVCECEPGFRFEKESNSCVDIDECEENRNNCDPASAVCVNTEGSFKCECAEGYEGEGGVCTDIDECDRGMAGCDSMAMCINRMGSCGCKCMAGYTGDGAHCTKIEEPKEASKTACTEEWSRLCELEKKQCAVDEEEVPQCGACLPGHHPINGTCQSLQISGLCAQKNDCNKHAECIDILPDSHFCSCPDGFIGDGMMCDDVDECNNAGMCDDENSKCENTIGSFNCVCLEGFKKSDDDKCVLKTPNREKIEINEENSSSTPSESQKPESTTQGTVTTSVLSSEPTSEAPTSSTSPVTSSEKASESTTSSESPVTPSETSVTTTSLCSTVTCHSLATCEPSTGVCICRDGFIGDGTSSCSKKSTADCISLPSLCAENAKCDNSARSCECDAGYIGDGYVCSPHPQDCVLRDNLCSPEAICQNRRCQCLPGFTGDGVKCVSIHERASNCSQCDANAHCVGGTTCKCNPGYFGNGLCCVPDPLDCVHFTGICHPNAVCNPDTRQCQCSSGFSGNGVSCFPQKSCRTDKSVCAKNAICLPTGSCICRHGFKGDPFYKCTSLVAKEPSNAQDLSDVSSCVTPCDASSQLCISGECICKPGFRQNPGSKTCADIDECAEKTHRCNRIATCRNTFGSHVCSCPEGHVGDGVTCVPHVNQGKLSVYCEADGMTLVLGNETSDFEGKIFVKGQAENPYCSKSFSALLNSHKPYVFKVAFQHCDVQLLDNHTMASTVVVQKHAMFLTNKADSYDLRCQYPIGSRAVQSHVNVSELATTSTLTDKNSTLAPICRLSVSNDQHSSISSAMVGDTLKLALEVTPSENFGILPRNCFAVNIESGERYTLTDEQGCAIDESLFPQWSVTNSAK >BP:CBP00012 MAPKDDPDNRGFDDQRRPSQRSTVLAIPALAVNDPKADPKIASDLPANYVDDDDDAPKLYTPSLFEKILNYLLCRGDIANQQLEAQPVSIPGLFRYGKRFDYLLLFIGTICAIISGVSQPIMALVSGRVTNALLVYPPTSKQFRNKANENVYIFLGIGIFISITNWIQYMCFQHCCSRVMAQMRHRFVYSVLRQNAGWFDKNHSGTITTKLNDSMERIREGIGDKLGVLLRGFAMLIAAIVVAYIYEWRLASMMLGVAPVCCICMSLLARQMTSTTIKELIGVGKAGSIAEESLMGVRTVQAFNGQEEMVGRYQTELEKGRRFAVWKGFWSGFFGGLFFLCLFSFLGTGMLYGAYLLKVGIIGSPGDVFIVVMSMLLGAYFLGLISPHMMVLLNARVSAATIYQTIDRVPKIDPYSKAGKRLPNVVGRVKFENVHFRYPSRKEAKILNGLNLTVEPGTSVALVGHSGCGKSTSVGLLTRLYEPEAGNVTIDGTDVRELNIDWLRNVVGIVQQEPILFNDTIHNNLLIGNPGATREKMIEVCKMANAHDFIEKMPKGYDTLIGDGGVQLSGGQKQRVAIARTLIRDPKILLLDEATSALDAQSESVVQSALNNAAKGRTTIMIAHRLSTIREADKIVFFEKGVIVEAGNHEELVHLGGRYFDLVKAQQFKADPEATEEFEEEEIDLDDNSRSSRRSSMTSARSGSEAFQRGNSLNDSFSGSRRSARADAENDAFAAHEAEVMAQDGQITAGYLDIFKNAKGNYIYMFLGTVFALIRGLELPALALIFGWVFEGFTFVPYGGRMMHRMAMAVIAFASVGVGVWISQVASSVLFAIVSENLSLRFRVQSFRNLLYQDASYFDNPAHAPGKLITRLASDAPNIKAVVDARMLQVIYALAAIIANIVIAFIYCWQVAILGTSLILLLAFVMIGLAYKISLMNIEQIKNDEAGRTAIEIIENVKTIQLLTRCELFFDHYQTSSKQQKRSELKKGMIEAINYSITQSFMYFMMCFTYAVGIRVIYDGDKSSDVTFKGIISMMLGAVAVMNSAQYFPEFVKAKTAAGLLFNIIYRKPRTGDLMEGDRPEIRGNILFENVKFSYPQRPLQPIMKGLQWTALRGQTVALVGPSGSGKSTNIGMLERFYDVTGGVLRIDGQDIRNLSLYHLRTQMALVGQEPRLFAGSIRENVCLGLKDVPLEKINKALELANANRFLANLPAGIDTDVGEKGGQLSGGQKQRIAIARALVRDPKILLLDEATSALDSESERAVQEALDRAREGRTCITIAHRLSSIQNSDLIVYIDKGKVQEAGNHAQLMQKKGRYYKLIKKQDLAV >BP:CBP00016 MSVEWKSALRLQIEALAKRNDLHRKSSEEEIKKRIVDMDRRIVKLRELVSTSANDAAIFYLECVCHADETERLLNRESSVEKEKKWRKMKRKPSSQIGPTESRTVSSLPSVSPPDVIQTINVSTLEAQDQMPQRPHWWDQFQIYRRTDLLRFSKQNDRRELWRTQKDFFLTCLGFMVGVGHTMRFPAKVYQHGGGVFFIPFFSLVFFGLPLVFLHLSLGQYTGQAANTAFSKLMPIGSGVGWALVVIAIPVAVYYNIIVAWAIHYFFQSAKGLLLGDELPWETCRDEWQLDNRCCNLHNLHSCFNSSNSITAPEAFFHSEVLSLSTFGDFALGPLQSHLVLSLAAAWLLVFFGVFKGLGSIAQTMNVTATVPYLLLSILLLRGISLPGANKGLSFFFTVDSTKLWKWQIWKSAAEQVFYELGIDAGPLISMAAFSRYRNNVYRDSVLLVIMDALTSILSGMVIFSFVGFIASESNSNVNDVLKHDPLYLSFTVYPGVTSFMYWGGLWATMFFGMLVMAALDAEFAWLEMIASAFMNHFSTKNKAVENRLLAFLCLVGFFFGLPLCAQGGIFVFHAIENLNANWNSFSLALLSVAIVCYVYGIDNYLTDISGMLRVPRIPISKAIRFRDKIVSILGPGGIYIKFSLCFICPVILTVLLVASVLGYQRISFAGRPIPIDYEIVAWVVMIGPLLVVPLVAFLQVRQIRNEGKLLKSLFDTSEWRENPDDLLEPKDAYMKQDSKYESPPNRRRTPTIFTHRENTYMYIDSRGPTVRSRVFPMGAPLDPYGWKLGRLRDHQQHIEEVESNYSEEGSTTNNSFMASTVKHNDDVELTLFGSPPAIMGDEDKNMVTKFSESMPVNYKCRNEQAAPVQSRREPRLGRMARKTRRKRSSPSASDPPVPTSPLPPPPRLYHCKSEPPMMRSEEEHGTPKIITPDGSCSISDSSDDSSDDNIRRATVIRRKTSDDDAFTQISTAESISITPLDFPRQRSLSSVAIYDQEQKNGRSKVLSQLKRPTPIVMPPK >BP:CBP00024 FQSVHHHLNEEELKQVFGVSNKHEVPEYSLIETTRHPLKNGGLKMKFVAWNDTYHLNLRKNSRIVSPHIISVIRHGDDAVTTYDGLRDYNQCHYQGEVKSHGNMKAAISDCGALMGSLVMEDHFLVLQTLPKRVHHLQKERHLVYKRSAGLLTDTENKIREEITRLQEEQESFCDTSEQLDDPAMTIPAHLHFNYTIPTSAQLDSPFIFPNMDPITLEIGLFLDSKLFEHFEREYIQDAEQHLLEFSLALINNVHVLYQQDTLTPNLDIVIVRYEMWKTQPSSLSTGVHKNGQAQSLLDAFCRYQAHMNPGTDLTDMNHWDHGVLLTGYDIYHTTTSVAGVAPVARMCDPLFACSLVEGLHLGRSFVLAHEMGHNMGMVHDGVQNQCNKGCCLMSAVNGAGKTTWSDCSVREFNAFLLQLDESGRGNCLRDASPGLISTNHLSDTRLPGQRFTADQQCSYFWGRDYRVEIPNGKAMDDICRILWCGNSGSTISTAHPALEGSWCGHNKWCHKGHCTSWNFDLPPVPIDGQWSEWGGAEKGCPIQQCAVSGSITIQAQHRDCVNPAPNNGGRTCEGANIRGIVCGATSSNCLGFTREEFGNKICSSIKFDPHKPDQQLTGEGFEHSTQPCRVWCHLIGSELIRNKGQFPDGTPCGFDAYCVGGQCLALSCDNKALVEQQEDCPRLEGRSIHQWEDWSSWSECSVSCGPGGRQVRERKCSSGRKCQGVSEESRACEGVLRDCEEFGEWKDWGPCSEKCALGIQKRFRPCLTDQCASEHLQEKRPCDNEGCWTNWDEWSSCSQTCGGGRRYRLRKCLDFKCEGDDLEKESCNTQKCISQTWGDWLPCSVSCGIGFQIRERLCDGELCATANKQARTCNQQQCPSTFSLAVWSEWGEWTTCSATCGEGLQSRERSCRRGSCQESDAAQTRRCVNGPCDHTFLPWSEWTPCETCSSFDSRKRIAKCDGTTDNCQDKIDEETCDNACLREQHSFGPISPKRPKLITSNELRKAFGRPLLPIESITSSKWSEWGPCSVTCGSGRRVRTRDCQEENCPEQNIQHEECSLNSCLDLFIWSDWSSCSKSCGHDATQTRQKLCLFNNAECSSYAESRRCKNLPTCTSISSGNTISENSFDAPQWSEWSSWSACSCFSLTSTRRRFCQVADPTVQGFCAGSILEQIPCAPGNCSPSAGGWSSWSEWSSCSKDCGDTGHQIRNRMCSEPIPSNRGAYCSGYSFDQRPCVMDNVCGEEKVNGGWTDWTSWSECTDYCRNGHRSRTRFCANPKPSQGGAQCSGSDFELNPCFDPARCHLRDGGWSIWSDWSPCSASCGFGVQTRDRTCSSPEPRGGQLCTGLAHQTSLCDLPACDHESDGEWSAWNEWSGCMGNCGFGTRTRVRACVSPPASHGGQPCFGRSSEITECRQSESTCSSFITSSLLADGYFIETDQQQ >BP:CBP00071 MGDEGYRGWIKLEIPCFEPERHMNNIIRCHTTKLEPALNSYNMRIHTKGQVQAVEEQDCEPFYESNYEIVSSHFSHHLIIAIQNYLKSLSMDRLMPFQLGNLVLHSSDFWSSELTCHLADIPLSAFFFGNIQGGTFINHWEVSFWEDTHRRNRLRQKNMQPTASDRQGLNQIRVEFEFDKVDFMTVHFKHKEGDFEVISKDFRKTRETVTMYYQITVRRTSIRRVIVDPVVNDTNGGDRIRIHFELNCPVLIRRAYKTEKQEAEAKHQVPHYRRFLVINRGRSANMYPTPKAITDSPVFTIEFDTSVSLEEVYRLISRLRIRTGVSIEFATIPSVDCLIWRENPYHRWTFHGSSHLSPTHFSAPIYRDFITTAFPRKHEVCGSREVDTNRERKFAITYLLECLISRGAVVKDQILLDDTIWHRFLEVILHYYTKDDKLCEAGLEDLVHMIDGRKRIGSLIKCFDRICQTRQKNSLVNGLTTEEMREGYQRVRKIIFTPTRVIYVAPETLMGNRVLRRYDHDGTRVLRITFRDDDNQKMRTNKTSTLLEKTVNTYLMNGITVAGRNFGYLGSSNSQMRDNGAYFMEKYSSSQCREYEKMCRMAPPITFNPKIQAARKNLGRFETIDNIPKMMARLGQCFTQSRLSGVNLDRCTYVTMYDLTGGKNIKGDEYTFSDGVGMMSMNFAQMVSQVMDFGKGVPSCFQFRFRGMKGVIAVEPFLDDLRQWSIENDIQEVSEDTAWGLNCVFRPSQIKFISKRHPRDQVEIVKYSSPVPVSLNKPFINILDQVSEMQSLECHRRVTNRIEELLDRQMLSFAQQMIDETFCRNRLKELPRRIDIDYLRTTWGFTLSSEPFFRSLIKASIKFSITKQLRKEQIPIPADLGRSMLGVVDETGRLQYGQIFVQYTRNLALKLPPKSASRSVLTGTVLLTKNPCIVAGDVRIFEAVDIPELHHMCDVVVFPQHGPRPHPDEMAGSDLDGDEYSIIWDQQLLLDRNEDPFDFTSEKQKSSFKEEEIDDLMREFYVKYLKLDSVGTISNSHLHNSDQYGLNARVCMDLAKKNCQAVDFTKSGQPPEELERKWRKDEVTGEMIPPERAERVPDYHMGNDHTPMYVSPRLCGKLFREFKAIDDVLKISEERDEQVEITIDETIMVDGYKEYMHSAREDLARYNAQLRSMMENYGIKTEGEVFSGCIVDMRNRISDKDQDDMSFYNTNQMIETKVTNLYKKYREHFFEEFEGAWEANTEGTSRGESDTNILQRHCRAPTQNMMKKAVAWYRACYEEARVTRENKKLSFAWLMYDVLAMVKQTKSLTSDDIRMGGSNPLYTMLDAHRSQYLLDNRSVFEDYIRFAPSKNQGEQVARALEIIRMYVETNPGLEEVMFVINEWARASKLFENQPIRNYHLSLLFILFATRQFSSVDGNAAAFFPKIDERGWREEKANGEFKQGLEFMEMKKSQMIVKFLEFLASRKFRKLPNVSFRTLRFSSIFMRGEWQIFHVAALKTYYNLLFNLRFEELPVSTDPTMTVRSIIRENEPFVVELPADADRTLVHRKLIEHTGVEEIYMRNMEKSVRGVDEQQKANTRYLVSTRGTLESMYKLRQLVAVKVPIKTYVTGQEISTQMARLCYEKIVKGHIS >BP:CBP00094 FRIGHLEYENSNETKILEICMKTAGTRKQHTLISLPSCHNFNGLENAANLNYQYAVDLLIGAACDEETQTVSRLALRWHKLYLSSAPLSTKEKEGTTIALKPHSLAGTAEVILAVCKSMKWKEIGLIYSDETKYTAHAIYDMLAEKEEEDIKINVFLQTDGTMNTYTILHSARVLISFLSTSDLSRFVKTLKDKAFRPLEFSIIHVDCYKSETTEFYTHLDQKASEETNPISAARLRKLHRHVALLRNSHDDKGNMEEFATKHGMIVIFFVFPFPTLCFQPSHTLYKALILCDGLQLLSDYKPLSDNLTIVQQQPTLWEHVTNTEIHGYSGPMFIGSDGVRLPYYEMFMWRDGKTQHVASVRPRESEFCEKEKMSNESKNCYEITRTIPFGQLLDDLPPYSSDCGYDNNLCSDFHVFMIAAIVFSILLIPMAIAFYLQRKEHLIQQMPWRVPLDTINFDDSRNGRLLSVSRRVSTVSTARASYSSIFSANVSEHAHVNKQKVSIKRYVQRRPITFTRQEMEMLNQLKYMSHTNINPFTGICFNQGSELIVMWQFTARYSLEDLIFGKEQKFGRNFQSTFIKHIMHGINFIHNSSIKVHGTLYLSNCVVDSYWVVKLTDFGIKNILKERMHHKELAPNSSFDIDAIHYKYLQLAPEHLSSLLEKHEEPMGTVEGDIYQLAMVIYQILFYMKPFAERQEDIKAVKKLFFLELATLLSNQSTAPLHPKVPEGNSFTMRLLSIIQQCWLYKPAARPTLIKITDAVNREFGQDVKGTLIDQMIEMIDEYSANLEHIVAERTRELEQDMATTENLLYQLLPKSIADSIRSGKSVVPEQHSSVSLLVVDVCQFTKFCEAFIPVHILETLQELYSSFDYIVQKNKAFKVENVGDAYLICSGIPEMTACRHLREVSKISLKLQEFMKTFTVRHRPSHILQIKMGITSGAVAAGILGSIAPRIITGICKNLAYKILNNIQPGTIQLSELTANTMMEKFPSFIIEERGMIDVKGKGTCLTFWLTGEKDQMRRQSSRSSCISHSQIKFEIEEANKTNNQFL >BP:CBP00176 MSNWDYIDEVDIIPKLPPNFDELRESKKWQERKEALEALLKVLTDSERLSTKVSYAELIGNVQTVLAKDANINCQALAAKCIAKFATGLRTKFSAFATPLLPVIFDKMKEKKPTLREPLVECAMEVGRTMPSLEAGQEDILAALAKPNPQIKQQTALFVAKQLDLVVPAKQPKGFIKAAVPVFGKLTGDADQDVREASLQALGAVQRIIGDKNVKSLLGDLSSDEGKMKKIGEYADKSAASYAEEQAKNAPPPSSSASAPSAAAASGSSGNVTSAAVTTAEPAAEADPWDFLDAFDVLSKMPEGFDTNIESKKWQERKEALEGLQQLLTANPKLDPKANYGALVERLQKVLEKDANINVAALAANCITGIANGLRTKFQAFAISVAPIVFEKFKEKKPTLRDPLVACIDAVVATSNLEALGEIVLTALGKPNPSIKTQTDLFLQRTFMKLNSQTMPKKTLKTLVPLLIKHSGDSDAEVRDASYAAMGAMMRAIGEKPSLQLLADIVTDNLKMGKIKEYHQKALAEAGPAEIAAMVQSMHKADAPPAAAAPPKKAAPPPKRQESEEEQVEEEEEPLKLPAEEKKKAAPTKENAENEPPVAPKTELLLNDNGEKAQRIKEEKQLKLVKWNFQTPTDEHIAQLQTLLGNQAKVSLMSQLFHKDFKQHLAALDTLIRLADTAPRSLLANSDLLLKWCTLRFFETNPAALIKVLELCRVLVELTRDTETPMSQEELTAFVPYLLLKTGEAKENMRTAVRDIINVLSDIVGPLKMTPMLLDALKSKNARQRSECLLVIESYISSSGISPLKSLTVEKIVAPFVGDKDVNVRNAAINVLVACFKFEGDQMWKAAGRMADKDKSLVEERIKRSGVKAGSGVATSPPNGGPKIVVPQQQQSVVRRPASRSRTREPEPEDDYQDQRAIANSTFTKGNSSSRYALRDDVFATAINRLADSTYVVTPPQPPSAWANNTFQMKRTNSSSSISSIDTSDQIQRSINNISSSLADVAQDAMYQVTYVLNQPEQRHLVDRKADMVFRASAAQLDMIIDEFKAGKDVTGTMDACSQMLFILMGGVEAEHGLEPLNASPETVKAIISSVLRCITQIGSTDAGYTMARSLNRLAMRLVYRVELSNLLCGLILAMIESIQLNSGITDLVSKLSSKWCDELEKRRAQLRASDIVDVFNQFYICTLTEQKMDITHIHIQVVDNYLERVILQQGDVVLDAARRLSSPHIHLTRMINKILQMMKEQNIDPIMPGTLDARAPDEEEAVVVRTGVQVCVNNILRDLKNVSTYNEQLNKLVQSSDKCRNEYSELVKNHALGEAVEELVSEQTIHGAPNFNKPDVVNAMTMTWKALDLLGPTRAETPTTPPQNLSRMDTTIVGTPLSRAEGAGTITRARGNIMRPKQRPTMSREQHEELRNRLQQAK >BP:CBP00296 LHALETEKNVFSQFYAKKWPRQLRKPKNREISNFKHSEGAEFAAKSYFWDNNWDFDLPELPKPEQMIMPLPTSTPDVYDDFAFYRVLMEKEDKYILVACHANVHGFHRGDLRFLEINSRSRLNRLEGQSVIGSLFLGDIVAVTELARNSEAISPVRDVDVSLVTPDTSCYWIVSKMILYPRNVDKKSPVLFSIVNRMAAIKGENEPMNLNVDNWDMMHADSIYTGLTFRPETLEYHFSKDYQKKKINELVVSARTIRSYPGIYGTIFKFKEGDHREEFKKEMHLNTYTDESKELKRLAELEHEKNVFSQYYQKKSGNRRENHRGRKKPSSCKHHEAIEFAAKSNLWDNNWDKDLPMLPRSQEIIMPLPASAPAQTEVCGLYRVLMEKNDKYILIACHVNVHGYHRGDLRFLEVNSRSRLKGLSEQSVIGSLFLGDIVAVTELARNSNAQSSVRDVKVSSVTQETRCYWIVSNMILYPRILKPDVTFSFLKNRMAVVKGEDEPMRVNCDDWKTVAPDLIYTGMAFSPIKLDDNFSDDFQRKSKNLLISNVLKISSYPNAFGIIYSYEECSEQNEEFKIGTKAYSDTLEIHKYKRERIVETCSLMGFSAANTIFNGRFDCRAFHMYDVSKEGPTVRFRIENPRNRPTLGLWNNGNKILIGGPTGDTNGTIETVMCNSSHMGWLKIAARLTRECPKDFRFNGDLFVSQREPKDHYYLYDGYFQDMAPESNGRKIIETLYGGKPLELRTGDVGGEYFFPSTPEPIRLNVFQKEYVQMLLDGNPLVIGSSPFGCGKSMTIITAALEIYKRNAERNLVGKTHQLLITQSNFASVNLIEIARKTCNSGDEKLRNMKFMRFITDKNWNEQPDHGRTKFDMPFLMNKVFKQWAIGELDGNELMTHHTKSMIAHIIRNGTVTVDELCSAARRVFDKYGDCKIPFSGHLTEAFFILYEPDLIMTTADSSKSVCTLLDKKYETNKNECTTVQIDEASQLPEYTLLGLLKTYNKANFGLIGDIHQLPPFCMEELEGRLKEFGIGNTMERAIQNKLFPISNLRYVYRCHPQTTALLSELFYDGKLISGVTESQRNEFMIKRKDFWPNPSYPVMIINHMGTCQRMGTSAQNHSEKDLVSYMVQNLLDQRKYTLKPQDIGVISFYAAQTSLLTEQLRRSGVKCGTVDAFQGSEKEVIILCCTNEHATEFMQCKFRLNVALSRAKQATVIVGNLGYLRKAKYWNAIVKRVEAYGNL >BP:CBP00327 MGALSQLRLLLWKNWLQQLRSPWFALFELVVPLILIGASFGLLIGFSDQFETTYDERRYAAWPVSGSAYDLIMPTNPNDSIKSAIVEPYFLFNSQLTCQFLNTYSTGANSYRMDIILAYAPMSAATTDKIMSIIQSRYSLTDLLSPVAPFIHNLYNITTIPTLNTNMSLKGFNTEGDMVSWMQGQFQSECDNPLLAGIVFDDSITKDLFNDNKRDFTYKIRLSNTHRRSRNAFGDDSYPWDTSVSFAIQYVSGPINPDDNDGGSPGYWQEGFMTVQRAVDVAITELITGSGPPISPLLDSYQVSRFPFPGYSTKIIEVGAYFMPVIVIFSFMTSVIYIVRAVVVEKEDRLKEYMRVMGLSQFINWIAHFLINYAKLTFAVIILTILLHFVALKSDMTLMFVFLMVYAFDVVYFAFLISSFMNSATSATLISVVFWMLLYFWYAFFSSIDQTNPYALGVRLINCLNPDIALNYGLQLLAAYETQAAGLKWNEMFNPPSPDNNLTFGHALAALVIDGIILVILTWYIEAVVPGGDGVPQKPWFFILPSYWFPYSGSKTVNSSDQYEHVEYASHVKLEQEPTDLTPTINVVNLTKTYGTSFFKKLFDCKFGKAGEKRAVSKLNLKMYPGQCTVLLGHNGAGKSTTFSMLTGVASPSSGSAYINNYDIRSSLPKIRRETGLCPQYNTLFGFMTVMEHLEFFAKLKERKWDPEEAREILARLRIDFKADFMAGALSGGQKRKLSLAIALIGGSEVVMLDEPTSGMDPGARHETWTLIQREKERRTILLTTHFMEEADLLGDRIAIMAHGQLECCGSPMYLKQQYGDGYHLTVVYSSTETPDVPKTTEIIREYILEANVFSYIGQEATYLLNAKHRPIFPKLFRELENHQRQCGITSFGVSITTMEEVFLKVGHLAEERYNYEHGIEDESSELIEKDDPMLQNLKAPVRLTGFALQMQHAKAMFFKRGIFFFRKWTQFLPQLAFPVAYLMLMVFTSQVIPSVKEQDPQTISLAPFSTKDKPGHVVSDSGNYVTMNGASTKLSNMVQNTVAALGVNQTVVDISSSVESFIMNQTNALGSRNFGLKYALGFVPSSIGIPGLPIPDLKTIRTYFNNFGLFTPALAITFTDSMLLSQAKNKQYTFTAINHPLPPSTQDTLKNTNRSDGAAFLIAYGLIVAFAVCVAGYSQFLITERKKKSKHMQLLSGIRPWMFWFTAFIWDAVWFVIRIICFDAIFYMFDITAYTHDFGIILILTLSFLLYGWTAIPFTYWFQFFFESAPKGFMMVTMYHILTGMIGSIAVPIIQQTSSMDAGYLWSIIFAWFFPTYNISQIATVTFQNENVRMACQKLDCNVPMFKSVVACCGTASQKLYVDNVLFVGNRKGILVYVIFLAVQGFIYWIMVFMRENDQFGKIFNLIKCWKKKDDHIWDITEGDKEEQRDVEDSDVIAEKSVVQRLANSNETALVSNNLVKWYGNFNAVKGVNFHVNSKDCFGLLGVNGAGKTSTFQMLTGENSISSGDAFVNGWSVKNNWREAGANVGYCPQYDAIIKEMSGEETLYMFARIRGIPEKEIPVKVQAVIHAIGIGMYAKRQIKTYSGGNKRRLSLGIAIVGLPDVLLLDEPTSGVDPKARRIIWNILNRLRDLGTALVLTSHSMDECEALCTELAIMVYGKFRCYGSCQHIKSRYGSGYTLLIRLKNRGDAEKTKSTIQQTFRGSKLKEEHILQHNYDIPREGDSWSRLFEKLETLSTSLNWDDYSLSQTTLEQVFIEFSRDAGQLDVDPYGDVPSLTGSGNKQNGYANRAMSVESITEMGTYF >BP:CBP00332 SSSFTRIPKRDRTSPEKGEPSSKRSAPFTTPSSTTKIGRDSFAVMDTMEVQMNMFQLDITKMPPVIQRLHVDTLIITSKGKEINLNLGTVSTGGDVNSHNRRLAQHEIMRKFFEKKRSLFSSSSYHSLAYDTAACLYIPEGQYRGGEYEEVCLSQQDFAPEEWDIVSKISRRKDDSFIVRIKPAGAVYTQGDELFEPSNRYELTRIVEIVTSQKLNTTDFYQFGNATFPLRAHPNSEPDASSEIRSGFAKVARLTEGREGKHEMLMTVDTKLSPFYKPTSVIRCVLTKIQESRGGGGGGGGYGGRNDSRDSRGSFGGRSDSRDPRGYGGGYDRRSDSRDSRGGRDSYDSRRGGGDSEDFSSHEIDEIARACMESDKFLYSLESALKGLFAEAIHLKGSACTIRITGIKQCTANNTKFTKKDDKGEREISVSDYFYEEYNIKLKYPNLPLIVSKKMKYECFFPMEVLRIIPGQRIKVNKMSATVQSAMTGRNATMPRQHVDLVQRILQDSLKLERNKYMDAFGIELKSTRPVQLKAKILPPAEIRFKNLTYMPEIKRPGFKNPGKFVEPAHIYRVAVVSFDNAIDMRQAEDFCDRLFDYCRDQGIKCDRESKDWSIRELSSSDNVGIKEAMENWMKKKVDIFVGIARDKKPDVHDIMKYYEESVGMQTIQLCKQTVDKMMNPQGGRQTIDNVMRKFNLKCGGTNFYVDIPSNIRGRSICSNTETLHKKLLEKVQFIGFEISHGAARTLYDRSRNQMDGEPSIVGVSYSLKQSTQLGGFSYMQTQREYKIQKLDDAFPKCVKAYAEDAKTLPTRIVIYRVGAGEGDFKRIKEEIQEIRGTFEKIEKGYNPALVFIVAQKGSHTRIFPSRIDGNKAFEQNVPSGTCIDNVVTSFGYDEFILSSQTPLIGTVRPCKYTIIANDPAWSKNELIHLTYFRAFGHQVSYQPPSVPDVLYAAENLAKRGKNNYRVHQRYVSMQAIERRIISENADFVNENMQEQLASAIIDEMSDAMNGMTIPKRNFWA >BP:CBP00396 RSRTKFRRDSRSRRQTPTSEMRSFVLLILLTSHLSAGSIDWSSLETPPQFTHGKNAETVFFKVEKSGMSDESAKNIPGNLLEQTIHCQAIGNPRPTYRWKKDGKTFLPSMFPEKVVQKPGEGSLVFSRLDETDAGLYQCEAENSNGTAVDRPVRVQETWIRHFKAAEPEVVVVEVGDPYQRNCSPPASNPNARVYWILMGKEPGHFETISSSHISSNEQGTLFFHYVNETDLKSDRYYTCTAENIELKDYKFGNQFSLQITNYKRRSSAPYWPNGPPPNTNTSEGENVSFDCTTYGKPTPKVTFYKNGVELGSQKDDRYMIEGTRLTIYDVKKGTYGKGDNAVYQCKSENKHGWLWTNFYLNLLAFKPQLLIDPGKEEVEAVIGKKVTLECKFFASPNAAVKWEAPMISGSKGNQIPADPHGVGRLVFSEVSASEEGEYECIGTNKYGQASGVITLKVRKPTTVKPFDRAEDVRMAGEEMRLPCDATSDSQLEVKHEWLVDGIPLPEERVNSGHYRIADDHSLIVANPTQDDSAKYKCVVSTKLDKVEKEIKIQFKDVPVAVHSAYVSNCDKNSLTAFIKFDHIESIHTIAPVKEFWVQYQMDSETEGSQWRTHPSPSAAHPNDQVTDQLRTTSGSATVSLQPFGKYVFRVLARNSVGDSATTTVKGICETPAKQPDKNPGEVAAKGTSPENLIVQWKPMAREEWNGAKFHYVVKYRPVDEDQRDGDWKEVAVEDPFADRVTINLDDDKDVKPFQPYEVQVQAVNSEGRTNVVPETVEGRTGEGVPSSIPSGLRVLEKSGTTVTLAWNGVDPATANGNFTGYKITYWVDEADQDVEEPEDDEEEKRKFRWKRSIRAKRQSGVRKTIVFGPSATQGTITDLKPATLNHAYIQVTNGAHEGPSSDTIDFQTDEGVPSPVRSLRAYPMNSKESDEKGVVVLVWKKPRQTNGKLARYEVEYCKTQNGKQVEKTCPRQQIDADAKEIRITGLENETPYRFILRAHTSAGEGDPNSSDATTLPETTAAGVDPGVPSLVENAIGDKYFNVSFRPAKYDDETRAPVGNTYEVQYKPQNGDEWETVKPSDDGLTVHVDGLSPGTKYDVRVAALQVDSDGGETTKTFSGISKITTTGTSPGERNLYFIILILLILLLLLIIICICCVVCRHRGQNYPVSQREREQGREPILGKPDYKTDDDEKRSLTGSKAESETDSMAQYGDTDPGVFTEDGSFIGQYVPQKSLMPAERPEKGSTSTFV genometools-1.5.1/testdata/nGASP/protein_short.fas000066400000000000000000000566261211610345200221760ustar00rootroot00000000000000>BP:CBP00018 KMSNSTSPNAAATVGNIAYCYVLPCICVIGIVGNITNLVVLASRRLRAVSYMYLRALAVADLLCMLFVLVFVSTEYMAKNGSTINQYKIYQIYQCHLMLTLINWALGAGVYVVVALSLERYISIVFPMHFRTWNSPQRATRAIIIAFLIPAIFYIPYAVTRYKGKQRWDPIQNVTIYSMDDHPIYTTFYWQIYKWTREALLRFLPIIILTVLNLQIMFAFRKRQKMFQQLTKRKEQGTQKDDTLMYMLGGTVLMSLVCNIPAAINLLLIDETLKKRLDYQIFRAVANLLEITNHASQFYVFCACSTDYRTTFLQKFPCFKTDYANRDRLRSFVRRTQSVIQKQGSVEHTTNSKVWIMFKSKFQRDSLSHHSRKFSRHMPIEQDTVDIQLASGEQSTSGETCEADTLIKYGGSIQLCNDENNTTFL >BP:CBP00022 CVICGQSTSLYNYGTISCSACSSFFRRTVLAKVPIQQCPHQDACYTPENRATHSECKYCRFHKCVDVGMINTQKYTNLTKLINQLSVLDKKRSYTCANMMLPPDFRLSSIFDYEHIKLIKKTPEVRFISHDWGCVHQLASMEFIKTFQFVKFLSLQDLQVFMKTAHFNHVIFASAMRSFGIRQGYLSFPDGSDVFPECIKRITCYNPEFLNRIRCKLMGRIIELNINPEEYLLLSAIILCNPAAVNLSVKGRTLISSYQKVYGSLLFQYCCQVNKKNGPLRFSELLTIFHAISQTHHDIGQFFLLFQMYQPNAQPIQLYQEVIDYM >BP:CBP00025 MLAFESPIAESSYSRQKAKDLAKKFTPGELCTVCGDVASGIHYSVAACNGCKTFFRRVVLENRTYSCKNNGDCIIDKSMRCSCRHCRYKKCIIAGMDRAELSMERRRKRKKLNGIEGLEERYETTNPLINLLLHKEKLYQKLLHSSAMTIHTSLREALDMSQIAFNDTNNKYDDRMDPKYPTNFSYWRAKILTVLVEWAKSFEASFSHLQPEDQKRLFIHTAFSNLVLAEAFHTPEKYNDRIVFPDGLCGFRNVAQTVSSDGVSTKTYGLTPTVVAVINDVLVPIRRMRLTKVEYVLLQAIIFFDPDCLSLTKHGSQLIAAKRRRLLHALQDWLQQQNKHEAAGRFAEILLRICNVQKVAAFKRETLCTIETFELMQPHPFTMEISKSYPDFSYF >BP:CBP00027 MVDLKQQLQWIDYLGVVAVWLCFFGTVLVISVTCILWCCVGKEDDPTVFAKYGFGPQPRVPSQRSKLEVEKDF >BP:CBP00029 MTRLLNGIKVVELAGLAPVPHCGMMLADFGADVTVIDKKHPVVEQRMNRGKTMKEFDLRKPEDVKKVRELCKTSDVLLDPYRPGTLEKMGLDPLSLWNDNKGLIICRISGYGQTGRMKDEAGHDINYVAMSGMMPTFAGTEASRPWPPVNMLADFAGGGLSAAFGIVSAIHARHHNGGKGCVLDCSMTEGTAYLASFVQHYYDQTHLFTDKYAAFTGECPIYRTYKTKDGKFMAVGPLEPKFHQNMFEVLGIDGDDLFSDPDRITKELEATFLQKTRDEWSKIFEGKDCCVTPVLDIHEVGTYGQHVDRQNFSKSDKFGGTWIAKPSPRVQTIEELTAAATR >BP:CBP00030 MAIVAAGVSKVLTTFQKTFKGLLPLIILVIYTLLGAWIFWMIEGENEREMLIEQQKERDDLIRRTVYKINQLQIKRQRRLMTAEEEYNRTAKVLTTFQETLGILPADMDKDIHWTFLGSIFYCMTVYTTIGYGNIVPGTGWGRFATIVYAFLGIPLTVLSLYCLGSLFAKGCKILWKFFLRSTRVVSKDLSEKISEAADNIEEGTTAVAPASKEENDDDDLLSFPISGLLLITVIWVIFCAVLFTFLEEWDFGTSLYFTLISFTTIGFGDILPSDYDFMPIVGVLLLIGLSLVSTVMTLIQQQIEALASGMKDNIDQEYARALNEAREDGEVDEHVDPEEDPETNKKSLNAVVSRMPLSKRALYYFLPASQKKQLEQQSEKKMGRKSIKVQTDSELLETLIREEILKAELNNEMHKFNGPRSSQQPRLIHSEIREKEVPIEVVRVEQYNHGGHDDYLEHDI >BP:CBP00032 MLKVCMNVTDQCDCLAIECPIAYSNSVEEKEACYMEHCFISKRALDDVTLYKVTALYLVIFIIGVFGNTATCLVMRKHPMMKTHTSMYLINLAVSDLVTLCVGLPFEMMMNWHQYPWPFPDVICNLKALIAETTSSVSILTILVFAIERYVAVCHPLYLVKNQFFKRNMKSIIGLSWIVSILCATPFGIYHRADYLMRSWPGTDDKIPVISSKMCMVAVMFEPKLEPTFKVLFHFSAIAFFVVPLLTILVLYARIACKVSNNRTIQAGELDITEELQLKINAILCAIVSAFFICYLPFQFQRLLFFYLDNEVILVWINQYVYFISGFLFYLATIINPIAYNVASSRFRRAFKDILFYYCFGRKSNGYPRSSFSKYSL >BP:CBP00040 MLHPIVLLLVASSAVYAARPRRALDGLDGSGFGFDKRALNSLDGAGFGFEKRALNSLDGQGFGFEKRALDGLDGMGFGFDKRALNSLDGAGFGFEKRALDGLDGAGFGFDKRALNSLDGQGFGFEKRALNSLDGAGFGFEKRALDGLDGAGFGFDKRALNSLDGAGFGFEKRALDGLDGAGFGFDKRALNSLDGQGFGFDKRSSFKHQSSKLRSVFRNLRGFNKQH >BP:CBP00046 MSSLRCHVVVSALLFISIVPISQQVLNEHNQKLEWIVGKWRSEFSGKIFWPTVPTMTFGEELVINEAPIAKSANVQFLNFSARAWSHSTKDHFHDEWGFLTVDPVGNATLMTTGNNGFTTYETGTVSPNKLVLTLKDIGRISFSRDLPVEDLRRTFIRHDDRYMEQVIEMRTATHPKVGYLEHTRVVYTKLK >BP:CBP00048 EGRGNKRTFFDITINGEPAGRIVFALYNHSCPSTAENFRALCTGELGQLYGHNASYQGSIFHRCIKGFMIQGGDLTHKNGQGGFSIYGRTFDDENLSLPHNKPFLLSMANRGPDTNGSQFFITTEKVPHLDGKHVVFGEVVKGFDVVKRIEKVETEEEDMPVQRVTIAHCGEMVRKSDVMASDKKKKQDEQEPVGCKMDDEPKTVNWLMRRSRSRTPEDSKKSKKDRERGGNRGDRRRHDRQRDRYGRERRSRSRSGSRDRHRDRERNRVPDERRSGKRPVSIPISKADCEVNKYERELGDCQEILVITNKDGIKVRGRGKLTFMGSRDRSTTPPHWKREESKKLTLEEHQKRQEEMEERKRLRAEREKEDVERKEREEKEAMERAAQRELERQEEEEARKRSRSNSPQSPRVKQELMSQRQESKAESNSSRSSSSSSGSSSSSDSDS >BP:CBP00060 MEQIVESLQYFGFLGSLVLNSFLLFLLHTRAHRNFGKYRILMIVFCLFAIVYSLVEVLTLPVMFVKGRSLCVCSNGPLRLYRPIGVPLTSIYCGSFGMCISLLTLHFFYRYVAVCKPDKMRYFNGKHIFLTFSPSLFIFVTWSMTTYWPMAPDEMREIHYHDVLMKTFQTNSFEASFVAMISIFLQDPQTSTWLPSQLLSCAYMSFLMSVCFSVIVFCGYQALKQMRSHASHMSSKTKELNKQLFMTLGIQTLLPVFTMYIPVGCLMILPMFGIELGAAANNAAAFLGLYPALDPLVAILLIKDFRNFVFCKSVTSTYASAVSNTAPPSKILQ >BP:CBP00061 MDADKLIEYIQYGGFVSSQLINALLLYLLCFQASNNFGRYRILMIVFSIFAMIYSLIEVVTFPVMMCKGRSLCVCSNGPFTLYRSIGVPLLSIYCGSFGMCISLLALHFFYRYIAICKPEKLYYFEGKQIISTLSPCFIIFVIWSLLVYFFMDVTEEKERIYHDVLFRSYNVDSHKVSFISMLYKSPATETSPEHWNFDQLVPFFGCCFIMDSCFFAIIYYGSKAFLQMKSCGTEMSKKTKELNRQLFLTLGIQTLLPLITMYVPVGCFIILPIFGVELGVEANKTGAFLGIYPALDPLIAILLIKDFRNYVFCQKRTLAKVSTTSGIASKITSTFQA >BP:CBP00078 MLRAVVRLSKTGAKAQRRFLNLQEFQSKEILEKHGCSVQKFVVAANRKEAEEKWMSFGNHEYVVKAQILAGGRGKGKFIDGTKGIGGVYITKEKKEALDAIDEMIGKRLVTKQTTEDGVRVDKVMIAEGVDIKRETYLAVLMDRESNGPVVVASPDGGMDIEAVAEKTPDRIFKTPIDIQMGMTEAQSLKIAKELQFEGKLLGAAATEIKRLYDLFIAVDATQVEINPLVETADGRVFCVDAKMNFDDSASYRQKDIFAYETFEEHDPREVDAHQFNLNYIGMDGNIACLVNGAGLAMATMDLIKLHGGEPANFLDVGGAVTEDAVFNAVRIITSDPRVKCVLINIFGGIVNCATIANGVVNAVNKIGLKVPMVVRLEGTNVDAAKQIMKKSGLKILTANNLDEAAAKAVESLPK >BP:CBP00081 MLTDGVVDYTKEGSILTAEQRQFYEKNGYLLIRNCVPQYELNRFRQRFQDICEKKVKAPDNMTVMKDISIAKSEFKDGEKAITKIQDFADDPVLFEYCKYPGVVDVVKDLIGNPKSTVMAMHTMLINKPPDNGKLTSRHPMHQDLQYFPFRPADFICCAWTAMEKINRANGCLVVVPGTHKGVLLPHEYPKWEGGVNKAYHGIQDYDPSNPRIHVEMEAGDTVFFHPILIHGSGANRTEGFRKAISCHYANDDICRYVNVEGTTQENLAEEIIEIAKKRLTKYGLDPNTVTLDFADIWRVRAREVNGTRSNL >BP:CBP00086 MTATMDVDNLMSRLLNVGMSGGRLTTSVNEQELMTCCDITKSVFASQASLLEVEPPIIVCGDIHGQYSDLLRIFDKNGFPPDVNFLFLGDYVDRGRQNIETICLMFSFKIKYPENFFMLRGNHEPAINRVYGFYEECNRRYKSTRLWSTFQDTFNWMPLCGLIGSRILCMHGGLSPHLQSLDQLRQLPRPQDPPNPSIGIDLLWADPDQWVKGWQANTRGVSYVFGQDVVNDLCAKLELDLVARAHQVVQDGYEFFASKRMVTIFSAPHYCGQFDNSAATMKVDENMVCTFVMYKPTPKALRRG >BP:CBP00091 MDASTEAGVYKKELYSRLMASINATMCHEQPDGILYCPNHTGGPVWVRNVYPPIQELQPKVLIVVVVFVLCFIVGVCGNSSIITIIRGVVEDRRKRMKRHGDNAILYIGALCVCDFVMSLSLPPAILDSVIGFWIFGTTMCKVHHVFGSVGRIASTFLITAMSFDRYVAVCYPHQHRLRSRTFVVSTIVCLSAIAFVLLLPMLTYASAKEMVLHELKAHESANITRVRVFKCSDMMPGPIFYWFTSTTFILGYVVPLILIVYFNLKLINKLYAHKRVLPRSAIPVRRVVVYTVLIAAVYFVCWTPYWFSVLYAIIMSLLGKPTTNSEWVLFAIYCVHLLPYFGSSSNWILYGLLNTQLQMKNDIGDDGQSIMTTNGVPDLPRRSTSRGICDGASTSRSLPAASNPQWQVDPMLTRGNSDTSMVFYQDTEQTHL >BP:CBP00095 QLSVPQYKEFLEVQSNLTKNLFTDYDPTISPVYTWIDVDQPIGYDSQAPKRWNYTVFLYYLKLVEVQEPEEKVSVVMELMEYWYDARLSWNTSLYQNTTSFYARQDNVWSPTLTVFGVNDIMDFRDQDNRMVAIDNFGFLWDYISVRISANCQMDVSRFPFDTQTCQIRFCLPIFYRVQVEILNEIYEGIMDENIFKTMGNSEWKLINLTNRVEVLKYNDNMGNMDLAIFEITIRRNPLYYIYMIVFPSFVINFVSIVGVFLNGADKMSRLNVGLTNIMTMTFILGVMADKIPRTGNIPLLGIYIIINLVIITQLEIFLGPPLEYTSAIILELMTCANFLVMVGFWFDDGS >BP:CBP00102 MTSFVDNQSLTNYLIIDYDTDNEEDDDDDYDVFPTANEFISNVPKKNRKRARKCVKKGFICCFKTIKYTFLCCRCVIVWRCLWLFVILLIGLFLFTCFYYDDARKIFQFVYIVIETSIHFLKPTKPCRSINRPSSVLHFLQNYSFHPQAFFIYKKGCVRSVKGVLYRLQMKLLLISTVVLIASVSAIGNLYSGGGKQCTECPPGYDYYSRQHDRGWCMKFFPGNVTFFEAEKVCRCQGGATLSGIENTKELKKLSRKINEYFDENGIKSGGIWVGAYRRKDCRVPKSEKKAECTKEFQYQWTDRSTFGRDMWISHWTEGAPHNNVVGNHSEFCVQLQVTDPTKTALNEHFDNRICVHRDGSSAFETEGFICGRPPKCKGGYNGGYSGGDGVIVIGAARPTQKP >BP:CBP00103 MDLFSIVKSVSFWFVSTVDCLDSQWQYSEYISSTDMVQSFSERFLPGNWVYMLFAIPLWYGTWWAVLCYIYFYYTDITDAYMKETIEYHYGIPIKDSSYIIVYFQPTGADGKPHPDPKIFFAIGCMWYMIISSMFSVFYFGIRCYWQIRKTINQSAAVSATTKNLQTQLFHALVVQTFIPLVLMYIPIGILFFFPMVIWELPFTTEFVGYTIALYPAIDPLPNMIIIKCYRHAIQGFFMKIFGRGKRGETQHSLNTDAQSGS >BP:CBP00104 LQHIYQSLCTMISLILNSVLIYLILYKSPKKLGDYKWLMIYTAVFEQIYTVVDLLTEPTAYSYGYSFVVFRRYNATWTDSNKSQVLIVTWCGLFGSSMAVFGVHFVYRFASVHPKNITKTLYNLNIEDISYISAVFYVDDPNNGSIHLSWGSWIALVQFSTMVGSSMFCVSFLGYLCYSELSSQLSMTSSQSQVANSLKKQLYFALVGQTVIPITFMYLPVCVFVFGPVFMVEIGVISTYLTHAVTLYPVLNPLPNMFIIKSYRNTI >BP:CBP00121 MDTAFSPNEVKIMEKAFDSYRRNTCIRFEKREGQTDYLNIVKGYGCYSQVGRTGGKQEISLGRGCFFHEIIVHELMHSVGFWHEHSRADRDDHIKILWDNILPGMKSQFDKISAVLQDLQGENYDYKSIMHYDSTAFSRNGRNTIETVEDGFTQVIGTNQDLSELDIINKLYSCKAKKKEKMRVTTEEPRRLIPQVGEKKPVDSGEKCVDHFADCPHFAQYCTRASFFFVMKSYCPFTCKHCPGDRKIKKSG >BP:CBP00122 MESATNSSSEESIFHEQTRKLFRLCDAQNIGLIGKADLDVLVDLIPPDDLQKISRFIGEQKVNEPAFCRILKAIVSQALQQEMAKIEAQIPAFDKNQYLQESSLEDEMRAIEQNRSYLDDPLTKILKKELEEIQRYENSQIQNEHAINNTMIKKPLYRPIQPEPTIPKVSSLAEELNAIDKKVPQRKEEEELTQPDRIFKVVFVGDSAVGKTCFLHRFCHNRFKPLFNATIGVDFTVKTMKIAPNRAIAMQLWDTAGQERFRSITKQYFRKADGVVLMFDVTSEQSFLNVRNWIDSVRAGVDEATVMCLVGNKVDLFGSDIARSGVYRAAEKLALEFKIPFYETSAYTGYGIENCMRQMAESLQRREDNHLEEALKLDINSNYKKRSWCCI >BP:CBP00124 MGITTLPPSQLRPELEWLFPKEVTTTSSAVLQRNSAAEIPLNFLAEHSLALIAALFLIVLTVALLAVLVQYHCQKGSSSGSAGAISPKSFSTSPSQWTTCSTVSSTYSTQSLLQLIGSGLRQSLQGLLLPSEAVVLETIVGKGYFGNVYRGRMRDPAGRLIPVAVKTLKGERARDIAHIEKFLREGVVMKHLDHPHVLSLLGISISPAGNPWVVLPFMEGGDLKTYIADPNRALCVLELLDFAHQVAQGMSYLAAQHFVHRDLAARNCMISAERIVKVADFGLAVDLLDKESYIDESETGPARLPLKWLAPESLRDRRVFSSATDVWSFGVLMWELLTRAASPYGEVSNAKVRHYLETGMRLPQPTHCPDIIYDLMQCCWRATPEDRPDFVFLSHRLRALLQENSPDPFTRRFRPNAEQFLLPVLPGRLFTNYFAAQMHA >BP:CBP00144 VICLLYFSLSAVAIAQQPQFTCPNNANPLVANSGTNLFCTSAGSNTDCPTGSICTTAANAAGILICCSQSTNVNPVCPNSAISQPSNIGYVECQFNNPTNCISGYQCVQSANLANTFICCSTSASVGSCPSDFTPAVGTNGGTISCNPSASTCPSGSSCMQSTLNTAFICCRSANSQRICANNQNALITNGALELCTTPGTQCSSTGYTCQLSVLLATYVCCGQGSTGSSIGCADGRPVYQQRVGETYTCDITSSLNSCPSGYDCALSDDSFVNVCCLTGSTPIPENLSCPTGWNPFRNEVDNAVRTCTAVLDTSCPIGFSCAPSNQVSQFLCCRLASSLVCINGKTLLVNGAPKLCTPTTYSQCPYNYSCQQSVNPTVTVCCSNT >BP:CBP00179 KSKKLEQKPDWDTLDGIGFEFEENKPIVMDPRFYDMLKLPQCDLTKDKVPSKINIKEAMNQFQQCVRPIVERWRGDIKSMNTKFSETRLCEAAFKDMDVIPMTNLHETKWAILPHCVRENPVEQTCIFTFIERGEYHDWGIGLHCDMLVFAGTLGYSSSYKHHQVKLRTKICTNAPEHKFFGADPIIEPNRQLYTAFGKYFPFAIGKKPGFTKFRVLPNQNQKTRKYEFQDVTTIPFTYFLWDILGLKQIDIAWIDIEGGEFEFLDQFYRGGPMDEKGIVICQFNLEVHSKFNPPGAQVFHDFVFRILDDKRYIFTKVLNTDVGIHRMFFVNVEDEKCVRKFLQ >BP:CBP00188 MSFAQSFYADQKKVEQQPRQQENASPLTTAAIPAHTPIAEDPLTPAQIREAIRIYRSVLSTNSAPASPVRAPAAPPIAERPEVHSNYYGGGPTDIPQSYLLNYATSSPQQPASAPATQAPEPLFTEQQLIAQLQALQVQQQQVAEPVCEVPVVQQQQQPKAAPNKAPVLQKMYDDEESGYCFNRKGRDEDGPEEIPEAHVATPTSAPAANYSIPAPQQQVNYSPAPVANNYSKVVCGPSEYIGMANDNKFIYDAQKALPVSYAQNNSYTLVNPTAQAPIAQPRFEETDDQGVTTTEDVTQVPASPAVTSRFRGMIRNAQTPVQAPPAPIVVERVAEPVNTTPSHNYNNYGAFMPVNQMSMESEYQLPVLNDLASCIEHY >BP:CBP00192 SKFWKIKQLFIFILVALAANFNYGFSTTYINTSVDQFKNFLNTSLSHRHVVMTETKYDIIWNLFLNCWFVGYFVGVWFSPIFIGFLIGNSTAFLASILQCLAILWYCPELLIVSRFITSICMAVTYQSCILFLQLVTRTSGKHKPTFFECSPTHLRGSFSFLSEVSYSSMTMVGSFLGQDYILGSHLFWLCFFVVPFCLFFTLALFLLPETPKFLLISKDSEEQATESVKYYHGVDSDAKQVLEEIRKEAECENDPLEDSTTFRKMKELFTEPHLRMALILSVSALTNTVGLWALLLSSTFFLENANVESEVAEWSTTAMSLAYVSGTVTGGIIIEKVGRRTLLLLFTFLNNLALLAFVFFAKIRILIDPMKYGCLGALIIYGYTYGTGVGPISWFISSELVPQKHRSIAQSVAYAINTLMVVISTFTVLPLYSVIGSYAFVILYSIPSFISMLILFRYLPETKRREIHDIVNELKNK >BP:CBP00210 MANIPSFIDRLLSVNDTANPSLTHCIKEAEIDDVIQMCTQIILEQATMVEVQAPIAVCGDIHGQYVDLLRIFNRCNFPPDQNYLFLGDYVDRGRQQLEVICLLMAYKIRYRNTFFILRGNHECASINRTYGFYDECKRRYSLSLYNAFQDLFNGLPLCAMISGRIFCMHGGLSPQLESWKQLAAIKRPFDPPNKSIAMDLLWADPENNMNGWAKNSRGVSYIFGADVVKDFTDKMNIDLIARGHQVVQDGYEFFAGKRLVTIFSAPKYCGEFDNNAGVMIVDERLIISFDILKPAIREVTIRARGTSKNASTRSMLVSSRGPKSKMG >BP:CBP00211 LEHPVFLKDILHTITYFAIPIHIFGTYCILFKTPKTMGSVKWIMLNFHVWCMCLDYGLTVLTVPIVIFPALGGYPFGILTEWGVSAEFQTYLIVTLIPVVSAAVITIFENRYFLVFGHNSKWRRFRVLLSIFNYLYAATWCLPSFMIIPEQNMARKVALEMLGPNVSDYIRHFPIFMMSLEITYLTLPCLLIVLTFATEVILFVAIIKKGMTELAKTARFSKNTLKMQKNFLKAVYIQVSMYMTSIQLPLAYFFVSIFFKIYNQSANNFCFVVFSLNGLSSTILMLWVHTPYRDFCYKLLRIEKWRKKIGQANSQDNVVSVAPTA >BP:CBP00214 SKEKVPEEDLNLPYFHGALMNQDADQLLVNDGDFMVTMKLQIDINKLVVYLAVRLKKGIRRYEIKRLPGSAKLGSRSKETIDKLINSLKTDVLEIKGEKIVLKRAIAKGKFQLMHKDVIFKKKIGAGAYGTVYRGRLVKTNEVIAVKKLDPESADEDGLAEMMKEARVMQLYDHPNIVKFHGFILDDLPYLLVLEFCNGGSVEDRLRDKGSRLTVPTRVHYTYMAACGMDYLHKKGCIHRDIASRNCLIHRGIVKMADFGMCRATTVYKMDMSKPCNVRWLAPEVWDNGETRFNTDVYAFGIMMWEFFEIPYATPYAEMKAGQVKRKTRTGYRLPPPAAMPKEVGDIMKECCQPAADKRPNAEKLKEMLEEVYKKQNPTETTHNSS >BP:CBP00223 SRAAEMAGGNSEEGKGMLLRNGDDKVRHPSPQRGTPDSSSTQGHQFIDQIVTINVSGMRFQTFESTLARYPHSLLGDPTKRQHYFVPDTNEYFFDRHRTTFESILYIYQSGGRVKRPEIVPIDIFLREMRFYEMGDELLEEFWIAEGYEKPKEVMMPTNKTQRKIWELMEYPDSSLSARIIAFISIFVIALSIISFCWETVPSDNDDKVINMTTGELIDELDEKHYSPFFWIELMCILWFTIELILRFISCPCKVTFVTSILNIIDFVAIAPFFVNFFLADTNKSNSSMSFAVLRVLRLVRVFRVFKLSRHSVGLQILGKTFRSSVQEFCLLIFFMAIALVLFASGMYFAEQGEPNSKFTSIPASFWFVLVTMTTVGYGDLVPLSPFGKVVGSMCALIGVLTLALPVPIIVANFKHFYRQENRLASMKSTTKGDHEDDDVA >BP:CBP00226 MHPRGKFLAGHLSAFYIAPATTAALISRNHNDWAHLQLLRRTPSSDAGTMNQVHFGRTSARRRNAMILENNSGDGDDEDRPKEEIFRKIESYQFSRFQTSVINSAKLWASRNRSLKLINNFLPGFLANLRLALFHLVLIFATVAYIIAGAYLFTKIEHQAELDRYQSYHSIYKNFVQNLIYDSSGNRSVSEVENMIDAFTSINFRAFKDGLKPTDFLVPQETSRWSMISAIFFTTTVLTSIGYGNLIPISTGGKIFCVGYAIIPLTLVTIADLAKFVADMLIMDPTEDPKTGRQLLVLVFLLGYMTISACVYTILEPMWSFLDSFYFCLVSLLTVGFGDLYPSGTVEYMLCSIVFIFIGLILTTLAVDVSGSVGIAKMHSIGRGFDAMKMLNVLR >BP:CBP00231 NAMLIYLILKRTPLLMKSYSVYLMNFAFFDFATCIISFFSCQKVIFSGWSLIYIFHGPCKHVSSWFCYFCHCFECHTLAHSQWILLGSFMYRYDVLKGSTPTVQKMWRNSGAFYSMSLCFLVVYLFDISDSEELLRIMTDLHPEYHYDDGTGNISMFAPITFISIMYMTTPCVPIYCAILYFRHHTLKILNNPSINLSPAAKISHQKLVRALTVQAGIPIFWLVASGIYSLAQFGFISGPIPENITFRLMDCIPMVSPIVTIAFIQPYRDGLLHLFHKGSSIFIPNTIGSSVVDVS >BP:CBP00234 MGMSTNKCGARWTSWLTKNMLLLMTMAGIVMGVIIGGVLRNLEPSQEIVKYVGFPGELFMNMLKAMVLPLIAASIVSGLSQLDGKTSGRLGSRAVMYYVITTTHAVILGIIVVSIIHPGDPTIKQKMGIEEGATANESAAQKFLDLFRNAFPENIMRATFSQYQTHYVNVTNSNGIQKTELKTGYVDGMNVLGIIVFCIVMGLVISKIGEEAKPLANLFHALDVVITRMVMIIMWLGPIGIPSLIAQKMLEVSDLWQTARVLGLFVFTVILGLGIQAFITLPLIYVIGTRHNPYKFLSGLGQAIMTALGTSSSAASLPVTFRCLNKLGIDPRVTKFVLPVGAMVNMDGTALYEATASIFIAQMNGLDLSAGQIITVSITATLASIGAASIPSAGLVTMLIVLTALGLPANDISLILAVDWVLDRLRTSVNVIGDALGCGFVHHICADHLNADVAEAEKAHAFVEAHGVNFDELEKEIEQENNNHKTIQHV >BP:CBP00238 MLKPLFGKADKTPADVVKNLRDALLVIDRQSATQNERKVEKAIEETAKMLALAKTFIYGSDANEPNNEQVTQLAQEVYNANILPMLIKHLHKFEFECKKDVASVFNNLLRRQIGTRSPTVEYLAARPEILITLLLGYEQPDIALTCGSMLREAVRHEHLARIVLYSEYFQRFFVFVQSDVFDIATDAFSTFKDLMTKHKNMCAEYLDNNYDRFFTAYAALTNSENYVTRRQSLKLLGELLLDRHNFSTMNKYITSPENLKTVMELLRDKRRNIQYEAFHVFKIFVANPNKPRPITDILNRNRDKLVEFLTAFHNDRTNDEQFNDEKAYLIKQIQELRV >BP:CBP00252 MTSFLKLVVVGMILVGVAHGASVATADAKGTNCTLTDGFQALSCIMRLSDFAEKIDELDMDDKNEVKEFKKSCDSLEKCFSMLTCGKQQDAETKQAVSSIRNYCDAVVYMAADFGECSEKLEKNKSECFENWDPFPDAIDEEKDEKKKEELKKNACKNYFGKDQCLKKLITETCSEKEWQGFRDHFISISSVLLTCDFKDV >BP:CBP00254 SILNWTIFYAINKLQSFNLAFGYLSANQALADALHSTTFLLYFCPMVLLDQPLMKEFSHYCGFILLFCYELSVKIHLAISINRFCAVWAPYKYKHIFSDRNTKIYIFGIWVFTGSVAVLFYEKFCHFFYDDQIHFLTFTNNSFCGYIGWYGDFLKNAAIVAAVVSIDIFTILKVRQMSKKVVSNISNQSQNNLSHREVRFLKQTVTQGAVFMLELLTYFFVPLYFENKWIVFFGTSFAWVAVHAVDGMVVVLLNSEVRSFLIGQRSKSHGPSTNRATA >BP:CBP00262 CVASSQYLGDPEVYKLVFHILTCIEIPIHIYGAWCIIFKTSALMRSVKYLLLWSHFLSAQLDLLFSFISIPYMLLLSFSGYALGIFDQPRWEVYICLIVTAFVVTSILGIYENRFFVLYGYRENPSWCRIRKPFIAFNYFLAVIFIAPMYFLDPDQEIGFQNLATVLPCSPESAIGDRRIYVAFTDSLLPYIGLSLEALLLACEIVVFLVITISKLKSRDGQNCSQLSVKTKKLQKNFIKALFAKSSIPITFLLTPVLYVLVTMQLTYRNQNLSNVCVMLASSHGLFSTIVMVLVHQPYREATWNNLYFCFRCKR >BP:CBP00263 PDSESWLDSPETVLIFSHIMALLVTPLHLFGAYCILKKTPSTMHSVKLTLLNFHFWNVLVDLMLNVFAIPFPLFPSASGFLLGLFSYWGIRQTVQLWILITSLCFICVSTTMIFENRFRLLNHKNKHWKKFQPFWVVGNILFVFIFLIPTMLQVPDQDQARQMVFSKLPCTPEHSIDDRRIFVGAIDLNFTFFSLTIEAILLFIEIATFFFIVFFKLVHRNKRKMSLMSNRTHGLQTKFVIALCLQTISPCLLISIPVEYLALATYLNYYNTSLNRFSMILFGLHGVCSTLTMIFVHQPYREATVDNFYWLMMCRQNSKKISV >BP:CBP00264 MATPSPSTSNDSSDFEKICTICGRPAFVRYYGAVACGPCKMFFRRMVIEKLTYKCKKIKICYITEPKPLKCKSCRFKRCVEVGMKLPPTNCTVLELKNREDDELVRLFGFLKIRDDQRMETYMNFYTTQNPSLEDILDGVKPVKMDVERSMITPVEWSFTAILSVINHFRSFDFEQLESRDKKLIFQFNTFKSNILCGAVRACKEHREKMVTPSGHDIFPDILVTKFNASAELLNRICCQVVARLMELKVTDEEFVLLNIIFFCNSADAHSDKAKSILAARQRFYVSALFKYCQLTYQNNAPSRLNELLSVYHIVQKNASEMQYIGIMIHGFIPNFPIRKLVSDTYML >BP:CBP00268 RNYIFPLCIGSLVLGTYLYSFIFKEARYTVILDGKEVNFTGVEDFIQPYVNIVSDFFVASNYKMMSCGIRKSMSQLTVNTMCLLHDEERFLQENHSLNETWVTIRSCQNNQAFRKPSEDLLNNPETIRFAFIRDPIERFVSLYLDKCVKEQNCWACKNDMRCVVKEIYEALKNLQNHRDWKPIPTYMDWHAAPLSWNCNFDKDLSKWTLLMMGADAEERKSSILQLGNIMKRRGVSENVVQMVQEQSLAGETAHSTHKSTRRLEAERQVREDPVVRDYLHKIYFFDYLVFPFNRERLDAKYQTDFWKVPE >BP:CBP00283 MECNDTRLFDTSNNVTYFIIEQFYRFRYLYSNVHPYLSFVLCILGLAANLIHICVLTRPRMRHSSVHTVLVCIAFSDMGTMSSYLLYISRFEFLPEKEGYPYIWALFLKCHAMVSIALHAITLYLVVLMAFIRLSAMKLTTSRWLDHTRALTSAIFIALFVFIMCVPTLLAHQIDETTRGVTLTGMYYRYSVGFSTLMLQNGCFLMKGNLWLTGIFLKALPCLLLLTFTIALIHRLRENNEKRKILIKEERAKKRGDFTTYMLLLMVTVFLFTELPQGIMAIMNALFTTQFHQMVYLNLADVLDLLSLINCYVAFLVYSFTSSRYRQTLFSLLPLTRISYSGISTRQGTLRSHPNQPAAPKTLVQRANSVEVASVRSPLVDKSAATTRPNSAQPTEF >BP:CBP00304 TLYYVITHKFDLWPDAYECSGNYTVPTARWPKFGIYLWTSGSIFLTLYILCFIAICKIKSSAPVYQLMFFIAIFDIIAIIVGSLILGYLTFHGIFFCQCPLFFFIIGSLAMFTWLFNCVSCIILAIERCSEVNPKFFLSFLFGKKVFRVVKTLVFIYGINGLMFSKPVIFSPEYTSFIYDPMIGKDIILQGVVMCFFHSAAACIYEYMAYFTPTLYVIVAGEVVYQLACSCLSVVYLTLNRTIRNTVVKMVIPKSIRAKYGWHIGVEEHLAVEQAAESNGIALVNASGMPVKFDNFFVN >BP:CBP00305 MTMNLIPRPIIGSYFMISGIALIIIYLPCFVVMIKSKCRAPSYQLMMLLAIFDLTSLMVNSVTTGILGIMGASFCHYPLFVFTAGSIGLGSWMGGCVVCILLAVDRCVEINSNFPLAIIFHKQVFRLVMLVICIYWVYASFFTNPLLFTAQYSSWFFDPFIGKEGDLYHNIPHTINNLLVSASSTPLYIYLCYHLIFKFGYSTSMWLYRSKQQIIIQAVILCFFHATAACIYVYMQFFPTPSWLIIIGQLAWQYSNGCVCLAYWTLNRTIRNAAIRMMLSKRIRKRFKLHMGIDEQIAAERDGEVASVSNVMNLMSGTAKVAPFLCE >BP:CBP00306 ALQMSLYHVFTNSFTLWDEAYDCPQNLTNLKFERPVLGSFFLFFGVMFIVINSVCTGIFDILGISFCHSPLIIFCLGAIAGGSWMAGCLACVMLAIERCVEINPQFPLEFLFRKSVFPFVRILMGMYTLYAYLFVKGLTFSSQFSCWFFDPLIGKDPLLYHSYPHTINNFAVGIATTALYIYISYRLICKFGYTTSMWLYKTKRQILFQAITLCIFHTAAAFIYEYMQFIEVTPVIIIASQFIWQWSNGAVCLAYLIFNRTIRNLVVKIMVPKSVRKRFGWYIGADEHIALEEAGGPTLSAGLGTVNAIGGVIKFDNFM >BP:CBP00307 MSDLQMSMAYMLTHSFTLYPEIYKCPGNTSAMRTKRPILGTYFLASGLIFILLYTPCFIVMVRSKCRVPAFQVMLILAVFDLLSLSVNSVITGLLDIMGFSFSHFPVFIFCAGAIGKGSWMGGCVACILLAVDRCVEVNAKFRLGFLFKKKVFRVVMGLMVLYWVYSCGFTKPLLFKAEYSSWFFDPKIGKEPYLYHSIDHTINNLVVSLATTSLYIYLCYHLIYKIGYSTSMWLYRSKQQIIIQAVILCSFHAIAAYIYVYMQFFYSPPWLIIIGQLAWQWSNGCFCVAYLTLNQAIRNAVVRMLVPKKLRERFDLHIGIDEHLTSVKQITQINTVSI >BP:CBP00308 IDMSLFRLLSDFFDLPAEYQCPDCLQNDYFVRLRLGIYFLLSGILLILLYIPCFIVMLKSKSRNPSFRVMIILAVFDIINLAVNSVSTGIFSILGASFCQYPRLIFIVGAIGNGTWMAGCAMCILLAMDRCVEIHSKFFLAFLFHKKAFRVVLGVVGMYWMYSVWFTKPLLFSARYSSWFFDPKINRDPNIYRNVPHTINNLVVSASTTGLYIYMCIFLLYKKGKSTNSMWMSRNKNQVILQAIIICSFHALAAYIYVYMQLFYSPPLLIILGQLTWQWSNGCFCVVYLTINKSIRSSVKKMLL >BP:CBP00309 FQMSTFYLFTNDFALWDEAYGCPKNLTTIRFERPVLGGFFAFSGVLFIILYILCLIAMLKRDLIRHPAYKIMVCLAMFDIPSLFIACIFTGYFGYFGIYFCDYPRLIFVLGSFAFGLWMGCTFSCSALALCRISGVNHNLEIGYIFKSHCIYYLIVIIFALPSYGIFFTEPLIFRTEYMSWFFDPGTGLFDSSNYHNISQVINNAAESVITTILYAYLVFYIIRNLTNVILSAHDVRVQRQVILQATIICFFHSLASSVYVYMQFFYSPAWLVIFAQISWHICTG >BP:CBP00311 LSSPEFLKITFHVITIIAIPIHTFGFYCIIRKTPKHMDSVKMLLFNLHCWCVLLDIAITVFGIPYIFLPALAGYQLGFVDAPALVFYLVVTFLTGVSTSIFVIYENRYHILFGRNCSWRFFRKYCIVLSYCLVPLYFVAPIFSVPEQETARKIVWESLSCAPEIPEGHFDFFVISLNIRLMAITIAIAEGVPFFQILIFFSLNFYNLILARQPSGLSRKTTQMQNRLVLALFVQSSVTLVLFVVPVNSIILSVYTGYQNQILNNFIFLAFASHGIASTVIMVVVHNPYRRFLRSLSLQSSRKFTIMVINSEIRF >BP:CBP00312 IKMIQCPTDDTYLASPEFLSFALHTLTCISLPLHVLGFYCILEKTPKTMGSVKLLLLNIHTCGFFLDILITILGVPYGIFPAMAGYGLGFVDLPGLCLYLIVMTINAISVGIFLIFENRFFILFAENSWWRHFRKPVFVASYAVSVIYFLPAQFLIPEQEGARKFVWEMLPELPQEIYDAPVFVLAIDFHYVVIPVFIMSNLLIAESGCFIILIYGNMNERTKKLSLSRHTIKMQRKFLRALNIQTAIPLLYLMLPMGYLVTSRIFNLYFQSANNLCFIIIGLHGLFSTIIMLYIHAPYREVCKKVFHCK >BP:CBP00316 MYINWVHHYVPKISFVLSLIANPLFIYLVITCKKTLFGSYRYLLSFFATFNLLASFSDLATPVCVFNYRYVFVTFVADGPFSWKSKYGEQLLYYRCGIVSGTYGILNVHFVFRYLTLKRNAFVNKHFMPYGLILAIMYVAAHIAIWAAVTGLCLHSAQEMRDYIREPFKALHNESFDDITFVAGLFSETTAEIAERSWTGIVLLTVIASYSIVLYIVLGYKIVTGINTKSSTMSKQTAQMQKQLFKALTIQTIIPICVSFMPCSLSFYGAALRIDFVNWVYWGAAVAVSFFPFLDPVAVTLFLPTLRKRL >BP:CBP00325 MWRLAVFLSLAAFFVHDVLGKGDPELKMTTPQIIERWGYPAMIYSVTTDDGYILEMHRIPFGKTNVTWPNGKRPVIFLQHGLLCASSDWVLNLPDQSAGFIFADAGFDVWMGNMRGNTYSMKHKNLKPSHSAFWDWSWDEMATYDLNAMINHVLEVTGQESVYYMGHSQGTLTMFSHLSKDDGSFAKKIKKFFALAPIGSVKHIKGFLAFFANYFSLEFDGWFDIFGAGEFLPNNWAMKLAAKDICGGLQIESDLCDNVLFLIAGPESDQWNQTRVPVYATHDPAGTSTQNIVHWMQMVHHGGVPAYDWGTKENKKKYGQANPPEYDFTAIKGTQIYLYWSDADWLGDKVDITDYLLTHLDPAVIAQNNHLPDYNHLDFTWGLRAPQDIYHPAVELCTNDYLGK >BP:CBP00334 MTDIEKQTEIREKKGRNVMRELKIQKLCLNICVGESGDRLTRAAKVLEQLTGQTPVFSKARYTVRTFGIRRNEKIAVHCTVRGPKAEEILEKGLKVKEYELYKENFSDTGNFGFGVQEHIDLGIKYDPGIGIYGMDFYVVLNRNGVRVSKRRRAPGRIGPSHRVDKEETIKWFQQKYDGIILPPKPKTKKNVYRRR >BP:CBP00335 MFFVLIVFTFLTWLVVRQYQKVSRLPPGPVSLPLIGNLPQIVYYLYTTGGVVSTLDFFRKRYGNIFTLWVGPIPHVSIADYETSHEVFVKNANKYADKFHSPIFREMRKDIGILTANGDHWQEMRRFALFTFRNMGVGKDLMETRIMEELNASFSENMGLISANGESWAEMRRFALLAFRTMGVGRDLMEERILAELDARCAEIDAEAVNGKTIVHTSEFFDLTVGSVINSVLIGKRFDSHNKDEFLKLKGLLDSADELFTMFELTVPVWLLKKCFPERYARIVEVQEEIINFVSREANERYEKVKSGEYTINADDPQDFVEAYLAKIEEEKEKGTTNFYTMQCLKHVIG >BP:CBP00336 MDGTFFQKDLAPFVKYSLNKKRRWETKGDLNSLKNLQSSYRDMNVVVSDRVWLDMDPYWCFISHINYYHNYFLQFPIRHTYQLDTDNNYRCLSSDSVYGQPLKSLLPENRSPKKSDTLQSATFDMPKVAYHILTPPENYEKLRNEDFCPGSSDRFLKHRSIKHWRRCKKMTEALLAIRYEDFDYLNDPIYFIDNEWDIDFGTPSKL >BP:CBP00337 DSLLSSPEFVSRTFHFLTFITVPVNMLGAYCILFKTPKSMSSVKLVILNLHLCSMTLDIVFSVLIQPVVFFPAVAAYSNGVLKVFGKCAGIELYFAGTMFAGTVVTDHCTPSRKKPACTPEKPGLLFQKSITVVSMSIVSVMENRFYLLFVINTLWRKIRPFVLFFNYFVACTFLIPLLLQAPNQIIAFEIIQKKFPDIPFSSYSDSLFIFSVDSSYVFLSVFLTGALTVSQINLYCFLIILNMRKLSSNGKMSQRTYHLQRRFLIAIGIQIFTPLIVLFVPATYLDFCFIFEYYNQAVNNICMILISFHGWVSAIVMMFIHEPYRKFCL >BP:CBP00341 MHRSLQILCILAVFTSLAYSQGSRDENQSAKRNDFSRDIMSFGKRSADAADMYDRRIMAFGKRQPNFDRDIMSFGKRSAPSDFYRDIMSFGKRSASMYDRDIMSFGKRSAAMEYDRPIMAFGKRAEDYERQIMSFGRRK >BP:CBP00342 MDQFFTKLVALLLILLQIGAILATPIPEAAPEDVETRRELEKRGGARAFYGFYNAGNSKRDQVALPYYLYEKRGGGRAFNHNANLFRYEKRGGGRAFAGSWSPYLERLCDYERSGYPIYFSDNSYY >BP:CBP00343 VSKPIADAVLRYGKDHPVFRNKLLIPIGRGLVRFTSRMRMKRLGLGEPITHAPVSEAAALEQASDFVQQLVLFSYSVGVFASYYFYTKLTTPESLKIEEYNDFKEQQERAIKELRLQIESLEQRLAAQQKRNFFSQLGFSKDEAPNGPSESSKEASGASESSKPSKPSESLKERFQRISSLPIDAAASLILDDEEYLIVRRDTSVGIELSVNFAARGERLRYRIPSSKLRESLAQLALKEAACHVIGS >BP:CBP00344 MWELVSAELFSASNLFLLGFMISALAVSSVFTLSHITPWVRRTRDEYLTPEIVYRSSPEKEFSKLLESERDAPKRYTPSRCYLSVVIPAMNESERIEIMLEDCCDYLEKRSKKDLEFSYEIIVVDDGSTDDTADVVVGISQRRQNIRVLKLKANRGKGGAVKMGVLHSSGKLILFADADGATKFEDFEVLEKEMLRAAGGEPFDESFPAVVVGSRAHLEAASVAERSFFRTVLMHGFHALVWLFAVRTVRDTQCGFKLFSRSIAARIFPVLHVERWAFDAELIFLCEKWTVPVSEVSVRWKEIEGSKITPIWSWLQMGRDLVLIWFRYNIGIWTDSQP >BP:CBP00345 TAISSSPEAPQTMSEVQKVVDDDEDDEWGDFGEAVVAAAPIQNTNPPPTVPPLQMASNDEDDDDWGAFDQARPSTDRSDGPSQLAHQQSLEDWGAFEETQKTSTTNDDNEDDEWQAEFSSASTASTVIPAENLKTLEEMLEDDAFWDDGYCEAMELEEISENDSSSSSPLDIPALFDTEELKELTNEFEDLEKAKYSKLWLSLRVIEEAISQEQKTSTSPAVDSPSVPAVDFDWDTSGLTNPMNRASKQLHEMSQKCRRFVCRATTDCINLLKCNLLLASFNPYNTKTMQIRSVVNALTHRFPNLWKPFSRNFGYKEAYQCSAIIDVDFLGSNGVATAYTSTLQQDLEQFGLTNGSTKSNSNGSSILENLMSRANDSSSTTGRYRTPEVLSLDARQLLERLPDLQYLQSEVLMFPVGTNLPH >BP:CBP00346 YFLLFLAFFIFKINGGSNECYSCSGVCHNEPCNCQMGSCESGQCFIEKKPTEIPGSMKITKGCLRRTSRIHHGCEYDHFSDHILCVCQGHYCNDKVVMNTTRQKYTRTVTCRECSEKQPDCGSTCEGHWCHEDMSTGASGCGYGPPALPFYYRGPELFYYRSKVCITLSRGAGKPRRHCVCSTKMCNTVYNYQFNQYNIKDREKEGSTRARSLTLSATDYTLPLQTCYNCETNTQDATSMSHTTNCRSNRCLGHYCTYAAQRHTSKSSMGRSNMVHAVSELQGCMNVSDKSHIQLGCSRKWISDEYEEIHCACKGSLCNSDSLTATA >BP:CBP00347 MDGVYRLFCGCCGLAGGDPEPPYSQLRHDSVTPIRDPPLQYLNQQQQHQQYPPYALQEQGFVNPVHEFSNFDPRPSFRTRDEADGPNYQHSDSGTPRSGLEDEVEDENREREQLDNIVESTQHSIIAVGQTDVDGVIMMDTQYREKAYKQKVQKMATASSTTQLYEPVHEFQFEPTQTPIQVPLRYDEMSATIDKSPIERMPFACPDFQQMRLARTMGVKNAQFLVEHPDPRHAGKSPAMSSSAKHKITAVLDQVHEGVVGIEVEPRDLIVSMDF >BP:CBP00349 FTWFDGWEYPAYVSHSISLVLIPLNIFGGYCILFQIPKKMEASKWVMINVHFWSSFLDLLVSFLLTPYIFFPAMCGITNGLLSWLHVPIIVQVFLAQWKCILGVGVSLVIIFESRHNVDRFVITRKSSRILFYALNCVYGIFFMTPTYFSLPDQEKAKLELLKIVPCPTPVYFEPNVFVLMDHQGRWFIQLQCTTFFCVLIAQGAFSVSRTVYFLTAYNSKMSEMIQVAIPVFIVILPILYCGCAIEWYWYYQSFSNTAIICVSFHGMSSTIAIF >BP:CBP00368 LLIFVILVSTTFSDFETDLQRIKEEYTCYPNCTFNYTEINSETAKLFPSSCYSICGLITINENTDVSFATLEKLFHRMYTLKGGLRIENTTLRSFSFLQLHGFLSFFCFPFGTRIVNNTELVDAEALENIVHVSNTSHECKMEILDNSKLDASRLCESQFHNSVQNIEVLDNGKDCGCSSGKITPRNLPDFKNCIVLFDGLVLTNMSYNSNLKSLSKIANIRGNVEIAYTNFKDLSFLKSLSKIRGNTFENLETVILDIHDNPKMKRLGLDSVSVSEPTQYVDTLEQDWVPTMNLENLHPDFCITYQEAVSLSYVRFKNLEAKFCETEWKTDMKSCKFKSLRELESDCIIIYGNVLISSGDEEYVEKLEDTVYIFGSLTIQNSELENIRFLKML >BP:CBP00383 MWPDTLYWIFIGIIDILAIILNAILIYFALYRTPKMVRVYTTLIINLAFTDCCSAFLNFFVQQRMIPSGFTIGYISNGWCKLIGYRFCFLSHNLMAHFIVHSNYSLVLSFAYRYYILRKPEPRRKTLLIVLFFTYLPSFLQLVLYQFAESDPSEIVRLLQPYHPTYNFTGLTVSGVADIRSVYALYKILQMTVMTVPIFSTILFLRNKIINRLLYRGINISINTKSLHSQLLMALTYQALLPTLYSINVLMYVLEQFGVYSTAFFENFLMSGLVLIPFFSPFTSFFFFTPYKRILLGMVLKKIDKRPAATSETGPGSFPI >BP:CBP00387 GEDEANRKKFPCEICGKQFNAHYNLTRHMPVHTGERPFVCKVCGKAFRQASTLCRHKIIHTDSKPHKCKTCGKCFNRSSTLNTHVRIHQGFKPFVCEVCGKGFHQNGNYKNHRLTHEETKKYSCTICKRAFHQSYNLAFHMFTHEEHKPFTCHVCSKGFCRNFDLKKHLRKMH >BP:CBP00391 MTINYHKEIMTSHPWTFFLLLFKWKGSIWKAVYMETIIFLIFYGIISVIYKTALGESSQRTFEAVVRYFDKRLSYIPLEFVLGFFVTTVVNRWTKLYQTIGFIDNVGLMANCYIRGATEKARIYRRNIMRYCELVQVLVFRDMSMRTRRRFPTMETIVAAGFMNKHELELYNSYDTKYNSKLGTKYWIPANWALCMTNKARKDGYIESDYFKAQMEAEIRTWRTNIEWVCNYDWVPLPLMYPQLVCLAVNLYFLVSIVARQLVVEKHKIVDEVDVYFPVMTFLQFIFYMGWLKVIDVMLNPFGEDDDDFETNALIDRNITMGLMIADNPMTTPDLRKDPFYDEVDVPLLYSEESSHVPNHHYHGSASEVRLEHRGSGPVTMMPHSQSAANLKRIMSFKSSEDDEEKTNPFSMSHDDARMRNWREVSLDSSFLSDLNENKEWKLPTSQQKF >BP:CBP00394 MDSDDGFDYLFKIVLVGDMGVGKTCVVQRFRSGNFVDRQGTTIGVDFTMKTLNVDGKRVKLQIWDTGGQERFRTITQSYYRSANGIVLCYDITCKQSFGSLQRWIDDVSKFAAPNVAKLLIGTKCDLEDQRAIETEEAELLQRANGMFEMLETSAKNDINVDNAFLELATILKRQYDQGVVEQGASGTFQLGSGGTTSINSPWQRCCQY >BP:CBP00414 SSSSTSSTLPISHVRRHEDVPTPSAPPSKRSNIQPQESYEPKTWLQQQMEQEQQRKLAEEKKKQSTSTTGDDEEDMLQDVLSQPRGPHKRRFNFVMVSNITFAIPEGYDVDSIEYLGGGSFGNVIKTSAVCRDGHRRWVTIKKMREPFFDPHHARRIFREIKLLQLMRHDNIICALDIYTPDEENDFRDVYVVTEFAGRSLYRILKQQRDYGRRVLTEEHVKFIIYQIIRALKYIHSANIIHRDLKPGNLALTDDSDLMILDFGLARSLEKKDTSLTQYVQTRWYRSPEVIYWKIDSYTNLADMWSVGCIAAELLTGDPLFPGDDVNAQYQRITQLCGSPDEELLAKIENDNSSAMKAVIQSYKVYKRRNFREVFAAYSPSADFIDLIEKLLVLDPEKRITVEEAIQHPYLAEFSLPADEPRADHIFDLDDTQARTRFQWRDAVWTEIMNYQRIMQSPIIPGETDR genometools-1.5.1/testdata/nGASP/resIII.gff3000066400000000000000000004447771211610345200205070ustar00rootroot00000000000000##gff-version 3 ##sequence-region III 1000001 2000000 III gt csa gene 1001124 1001929 . + . ID=gene1 III gt csa mRNA 1001124 1001415 . + . ID=mRNA1;Parent=gene1;Target=CESAC87R 1 276 +,CEESA72R 1 286 + III gt csa exon 1001124 1001415 0.961 + . Parent=mRNA1 III gt csa mRNA 1001583 1001929 . + . ID=mRNA2;Parent=gene1;Target=yk1113e09.3 16 235 -,yk1113e09.5 16 273 + III gt csa exon 1001583 1001711 1 + . Parent=mRNA2 III gt csa exon 1001801 1001929 0.961 + . Parent=mRNA2 ### III gt csa gene 1002693 1006177 . + . ID=gene2 III gt csa mRNA 1002693 1006177 . + . ID=mRNA3;Parent=gene2;Target=yk1191d02.5 1 502 +,yk741d1.5 1 337 +,yk119f11.5 1 360 +,yk263f3.5 1 360 +,yk1191d02.3 1 625 -,yk263f3.3 1 300 -,yk741d1.3 1 300 -,yk735g1.3 1 197 - III gt csa exon 1002693 1002823 0.985 + . Parent=mRNA3 III gt csa exon 1003572 1003690 1 + . Parent=mRNA3 III gt csa exon 1003754 1003876 1 + . Parent=mRNA3 III gt csa exon 1003923 1004051 1 + . Parent=mRNA3 III gt csa exon 1004874 1004992 1 + . Parent=mRNA3 III gt csa exon 1005039 1005141 1 + . Parent=mRNA3 III gt csa exon 1005251 1005368 1 + . Parent=mRNA3 III gt csa exon 1005890 1006050 1 + . Parent=mRNA3 III gt csa exon 1006097 1006177 0.975 + . Parent=mRNA3 ### III gt csa gene 1010540 1011351 . + . ID=gene3 III gt csa mRNA 1010540 1011351 . + . ID=mRNA4;Parent=gene3;Target=yk708f5.5 1 316 +,WP 1 199 +,yk708f5.3 1 212 - III gt csa exon 1010540 1010705 0.994 + . Parent=mRNA4 III gt csa exon 1010749 1010997 1 + . Parent=mRNA4 III gt csa exon 1011163 1011351 1 + . Parent=mRNA4 ### III gt csa gene 1020968 1021291 . + . ID=gene4 III gt csa mRNA 1020968 1021291 . + . ID=mRNA5;Parent=gene4;Target=WP 1 87 + III gt csa exon 1020968 1021129 1 + . Parent=mRNA5 III gt csa exon 1021193 1021291 1 + . Parent=mRNA5 ### III gt csa gene 1023281 1023580 . + . ID=gene5 III gt csa mRNA 1023281 1023580 . + . ID=mRNA6;Parent=gene5;Target=yk720d6.3 1 300 + III gt csa exon 1023281 1023580 0.997 + . Parent=mRNA6 ### III gt csa gene 1023729 1024566 . - . ID=gene6 III gt csa mRNA 1023729 1024566 . - . ID=mRNA7;Parent=gene6;Target=yk720d6.5 1 335 + III gt csa exon 1023729 1023771 1 - . Parent=mRNA7 III gt csa exon 1023816 1023910 0.953 - . Parent=mRNA7 III gt csa exon 1024370 1024566 0.964 - . Parent=mRNA7 ### III gt csa gene 1026929 1028347 . - . ID=gene7 III gt csa mRNA 1026929 1028347 . - . ID=mRNA8;Parent=gene7;Target=WP 1 192 +,yk1105f03.3 41 639 -,yk1105f03.5 41 543 + III gt csa exon 1026929 1027102 1 - . Parent=mRNA8 III gt csa exon 1027314 1027467 1 - . Parent=mRNA8 III gt csa exon 1027515 1027609 1 - . Parent=mRNA8 III gt csa exon 1028167 1028347 1 - . Parent=mRNA8 ### III gt csa gene 1028790 1037200 . - . ID=gene8 III gt csa mRNA 1028790 1031062 . - . ID=mRNA9;Parent=gene8;Target=WP 1 227 + III gt csa exon 1028790 1028969 1 - . Parent=mRNA9 III gt csa exon 1029692 1029845 1 - . Parent=mRNA9 III gt csa exon 1029891 1029985 1 - . Parent=mRNA9 III gt csa exon 1030811 1031062 0.933 - . Parent=mRNA9 III gt csa mRNA 1031337 1037200 . - . ID=mRNA10;Parent=gene8;Target=yk1677a04.3 1 666 -,yk1707c12.3 1 704 -,RP 1 422 +,yk1677a04.5 1 607 +,yk1707c12.5 23 589 +,yk623f3.5 1 360 + III gt csa exon 1031337 1031862 0.994 - . Parent=mRNA10 III gt csa exon 1032740 1032809 1 - . Parent=mRNA10 III gt csa exon 1033111 1033262 1 - . Parent=mRNA10 III gt csa exon 1034167 1034457 1 - . Parent=mRNA10 III gt csa exon 1034874 1035024 0.898 - . Parent=mRNA10 III gt csa exon 1036294 1036442 1 - . Parent=mRNA10 III gt csa exon 1036772 1036888 1 - . Parent=mRNA10 III gt csa exon 1036937 1037082 1 - . Parent=mRNA10 III gt csa exon 1037168 1037200 1 - . Parent=mRNA10 III gt csa mRNA 1031337 1037200 . - . ID=mRNA11;Parent=gene8;Target=yk1677a04.3 1 666 -,yk1707c12.3 1 704 -,BP 1 433 +,yk1707c12.5 23 589 +,yk623f3.5 1 360 + III gt csa exon 1031337 1031862 0.994 - . Parent=mRNA11 III gt csa exon 1032740 1032809 1 - . Parent=mRNA11 III gt csa exon 1033111 1033262 0.924 - . Parent=mRNA11 III gt csa exon 1034167 1034457 0.894 - . Parent=mRNA11 III gt csa exon 1034642 1034679 0.215 - . Parent=mRNA11 III gt csa exon 1034874 1035024 0.985 - . Parent=mRNA11 III gt csa exon 1036294 1036442 1 - . Parent=mRNA11 III gt csa exon 1036772 1036888 1 - . Parent=mRNA11 III gt csa exon 1036937 1037082 1 - . Parent=mRNA11 III gt csa exon 1037168 1037200 1 - . Parent=mRNA11 ### III gt csa gene 1031495 1031674 . + . ID=gene9 III gt csa mRNA 1031495 1031674 . + . ID=mRNA12;Parent=gene9;Target=yk623f3.3 1 180 + III gt csa exon 1031495 1031674 1 + . Parent=mRNA12 ### III gt csa gene 1040341 1043441 . + . ID=gene10 III gt csa mRNA 1040341 1041938 . + . ID=mRNA13;Parent=gene10;Target=yk645b4.5 36 382 + III gt csa exon 1040341 1040503 0.939 + . Parent=mRNA13 III gt csa exon 1041759 1041938 1 + . Parent=mRNA13 III gt csa mRNA 1042042 1043441 . + . ID=mRNA14;Parent=gene10;Target=yk64a11.5 1 360 + III gt csa exon 1042042 1042093 1 + . Parent=mRNA14 III gt csa exon 1043134 1043441 0.984 + . Parent=mRNA14 ### III gt csa gene 1046267 1046555 . + . ID=gene11 III gt csa mRNA 1046267 1046555 . + . ID=mRNA15;Parent=gene11;Target=yk1391c06.3 1 287 + III gt csa exon 1046267 1046555 0.955 + . Parent=mRNA15 ### III gt csa gene 1046557 1059998 . - . ID=gene12 III gt csa mRNA 1046557 1059998 . - . ID=mRNA16;Parent=gene12;Target=WP 1 1158 + III gt csa exon 1046557 1046617 1 - . Parent=mRNA16 III gt csa exon 1046663 1046761 1 - . Parent=mRNA16 III gt csa exon 1047490 1047637 1 - . Parent=mRNA16 III gt csa exon 1048507 1048990 1 - . Parent=mRNA16 III gt csa exon 1049960 1050356 1 - . Parent=mRNA16 III gt csa exon 1051280 1051470 1 - . Parent=mRNA16 III gt csa exon 1051832 1052354 1 - . Parent=mRNA16 III gt csa exon 1052641 1052770 1 - . Parent=mRNA16 III gt csa exon 1053104 1053230 1 - . Parent=mRNA16 III gt csa exon 1053750 1053789 1 - . Parent=mRNA16 III gt csa exon 1054974 1055025 1 - . Parent=mRNA16 III gt csa exon 1055100 1055216 1 - . Parent=mRNA16 III gt csa exon 1056330 1056534 1 - . Parent=mRNA16 III gt csa exon 1057718 1058011 1 - . Parent=mRNA16 III gt csa exon 1058066 1058194 1 - . Parent=mRNA16 III gt csa exon 1058517 1058636 1 - . Parent=mRNA16 III gt csa exon 1058794 1058967 1 - . Parent=mRNA16 III gt csa exon 1059816 1059998 1 - . Parent=mRNA16 III gt csa mRNA 1052040 1052771 . - . ID=mRNA17;Parent=gene12;Target=CK580775 1 445 +,CK575409 1 430 +,CK575411 1 416 +,CK583013 1 411 +,CK575408 1 354 +,CK575413 1 347 +,CK583019 1 334 + III gt csa exon 1052040 1052354 0.997 - . Parent=mRNA17 III gt csa exon 1052641 1052771 1 - . Parent=mRNA17 III gt csa mRNA 1052047 1053234 . - . ID=mRNA18;Parent=gene12;Target=yk1391c06.5 1 569 + III gt csa exon 1052047 1052354 1 - . Parent=mRNA18 III gt csa exon 1052641 1052770 0.992 - . Parent=mRNA18 III gt csa exon 1053104 1053234 1 - . Parent=mRNA18 III gt csa mRNA 1056259 1059192 . - . ID=mRNA19;Parent=gene12;Target=BP 75 367 + III gt csa exon 1056259 1056534 0.894 - . Parent=mRNA19 III gt csa exon 1057718 1058011 0.954 - . Parent=mRNA19 III gt csa exon 1058517 1058636 0.856 - . Parent=mRNA19 III gt csa exon 1058794 1058967 0.818 - . Parent=mRNA19 III gt csa exon 1059181 1059192 0.273 - . Parent=mRNA19 III gt csa mRNA 1056259 1059224 . - . ID=mRNA20;Parent=gene12;Target=RP 72 369 + III gt csa exon 1056259 1056534 0.853 - . Parent=mRNA20 III gt csa exon 1057718 1058011 0.969 - . Parent=mRNA20 III gt csa exon 1058517 1058636 0.927 - . Parent=mRNA20 III gt csa exon 1058794 1058967 0.833 - . Parent=mRNA20 III gt csa exon 1059198 1059224 0.22 - . Parent=mRNA20 ### III gt csa gene 1062769 1063139 . + . ID=gene13 III gt csa mRNA 1062769 1063139 . + . ID=mRNA21;Parent=gene13;Target=yk681f11.5 1 370 +,CEESV83F 1 359 +,yk117f1.3 1 332 +,yk1170b11.3 1 181 +,yk1376a02.3 1 215 +,yk1704g11.3 1 255 +,yk117c1.3 1 323 +,yk617a4.3 1 300 +,yk621h1.3 1 299 +,yk659c10.3 1 297 +,yk602e8.3 1 297 +,yk652b11.3 1 297 +,yk675h9.3 1 296 +,yk337c2.3 1 295 +,yk658b12.3 1 294 +,yk393b4.3 1 180 +,yk394b5.3 1 295 +,yk363h2.3 1 292 +,yk525g8.3 1 291 +,yk656g8.3 1 291 +,yk255h9.3 1 289 +,yk572f4.3 1 288 +,yk592b8.3 1 286 + III gt csa exon 1062769 1063139 0.978 + . Parent=mRNA21 ### III gt csa gene 1062771 1076543 . - . ID=gene14 III gt csa mRNA 1062771 1076543 . - . ID=mRNA22;Parent=gene14;Target=U79157 1 1736 +,yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,WP 1 497 +,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk117f1.5 1 360 +,CK579359 1 613 +,yk1101a09.5 23 632 +,yk1034a11.5 23 628 +,yk363h2.5 1 360 +,yk1172f12.5 23 612 +,yk1053h12.5 22 598 +,yk1339g04.5 24 597 +,yk1169g11.5 23 596 +,yk1170b11.5 23 594 +,yk1120d08.5 23 590 +,yk1286b11.5 23 589 +,yk1120g02.5 23 587 +,yk1058c11.5 23 586 +,yk1254h08.5 23 584 +,yk1722g08.5 23 543 +,yk804f05.5 23 542 +,yk1096a09.5 23 539 +,yk1516e02.5 23 528 +,yk1652g01.5 23 510 +,yk1401h02.5 23 497 +,yk1061h02.5 23 497 +,yk1369c04.5 23 488 +,yk505f9.5 1 368 +,yk1141g04.5 23 448 +,yk820f07.5 23 446 +,yk1741a10.5 24 446 +,yk1026h07.5 1 370 +,yk656g8.5 1 360 +,yk216b5.5 1 360 +,yk568d7.5 1 360 +,yk659c10.5 1 379 +,yk592b8.5 1 360 +,yk658b12.5 1 360 +,yk269b4.5 1 376 +,yk525g8.5 1 377 +,yk482b6.5 1 360 +,yk569b4.5 1 360 +,yk675h9.5 1 360 +,yk456c8.5 1 377 +,yk393b4.5 1 373 +,yk626a1.5 1 360 +,yk602e8.5 1 360 +,yk617a4.5 1 360 +,yk332b1.5 1 378 +,yk337c2.5 1 374 +,yk61b9.5 1 360 +,yk434f11.5 1 360 +,yk117c1.5 1 360 +,yk621h1.5 1 218 +,yk1376a02.5 23 252 +,yk106d3.5 1 181 +,yk768a10.5 23 200 + III gt csa exon 1062771 1063137 0.858 - . Parent=mRNA22 III gt csa exon 1064630 1064950 1 - . Parent=mRNA22 III gt csa exon 1067821 1067940 1 - . Parent=mRNA22 III gt csa exon 1070411 1070643 1 - . Parent=mRNA22 III gt csa exon 1072375 1072533 1 - . Parent=mRNA22 III gt csa exon 1074168 1074463 1 - . Parent=mRNA22 III gt csa exon 1076314 1076543 1 - . Parent=mRNA22 III gt csa mRNA 1062781 1068054 . - . ID=mRNA23;Parent=gene14;Target=yk1101a09.3 26 698 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1061h02.3 1 616 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1276g05.3 1 729 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,yk1034a11.3 1 259 - III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA23 III gt csa exon 1064630 1064950 1 - . Parent=mRNA23 III gt csa exon 1067821 1067837 1 - . Parent=mRNA23 III gt csa exon 1067912 1067940 1 - . Parent=mRNA23 III gt csa exon 1068024 1068054 1 - . Parent=mRNA23 III gt csa mRNA 1062781 1074608 . - . ID=mRNA24;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,BP 66 487 +,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk117f1.5 1 360 +,yk363h2.5 1 360 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA24 III gt csa exon 1064630 1064950 1 - . Parent=mRNA24 III gt csa exon 1067821 1067940 1 - . Parent=mRNA24 III gt csa exon 1070411 1070643 0.976 - . Parent=mRNA24 III gt csa exon 1072375 1072533 1 - . Parent=mRNA24 III gt csa exon 1074168 1074463 0.645 - . Parent=mRNA24 III gt csa exon 1074601 1074608 0 - . Parent=mRNA24 III gt csa mRNA 1062781 1074628 . - . ID=mRNA25;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,RP 81 497 +,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk117f1.5 1 360 +,yk363h2.5 1 360 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA25 III gt csa exon 1064630 1064950 1 - . Parent=mRNA25 III gt csa exon 1067821 1067940 0.983 - . Parent=mRNA25 III gt csa exon 1070411 1070643 0.968 - . Parent=mRNA25 III gt csa exon 1072375 1072533 1 - . Parent=mRNA25 III gt csa exon 1074168 1074463 0.683 - . Parent=mRNA25 III gt csa exon 1074624 1074628 0 - . Parent=mRNA25 III gt csa mRNA 1062781 1076543 . - . ID=mRNA26;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk1213f07.5 23 619 +,yk1199c10.5 16 513 +,yk621h1.5 1 218 +,yk1376a02.5 23 252 +,yk106d3.5 1 181 +,yk768a10.5 23 200 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA26 III gt csa exon 1064630 1064950 1 - . Parent=mRNA26 III gt csa exon 1067821 1067940 0.983 - . Parent=mRNA26 III gt csa exon 1070411 1070643 1 - . Parent=mRNA26 III gt csa exon 1072375 1072533 1 - . Parent=mRNA26 III gt csa exon 1074168 1074350 1 - . Parent=mRNA26 III gt csa exon 1074426 1074463 1 - . Parent=mRNA26 III gt csa exon 1076314 1076543 1 - . Parent=mRNA26 III gt csa mRNA 1062781 1076543 . - . ID=mRNA27;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk899h02.5 21 464 +,yk621h1.5 1 218 +,yk1376a02.5 23 252 +,yk106d3.5 1 181 +,yk768a10.5 23 200 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA27 III gt csa exon 1064630 1064950 1 - . Parent=mRNA27 III gt csa exon 1067821 1067940 0.983 - . Parent=mRNA27 III gt csa exon 1070411 1070643 1 - . Parent=mRNA27 III gt csa exon 1072375 1072533 1 - . Parent=mRNA27 III gt csa exon 1074168 1074350 0.973 - . Parent=mRNA27 III gt csa exon 1074432 1074463 1 - . Parent=mRNA27 III gt csa exon 1076314 1076543 1 - . Parent=mRNA27 III gt csa mRNA 1062781 1076543 . - . ID=mRNA28;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk778d02.5 21 613 +,yk117f1.5 1 360 +,yk363h2.5 1 360 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA28 III gt csa exon 1064630 1064950 1 - . Parent=mRNA28 III gt csa exon 1067821 1067940 0.983 - . Parent=mRNA28 III gt csa exon 1070411 1070643 1 - . Parent=mRNA28 III gt csa exon 1072375 1072533 1 - . Parent=mRNA28 III gt csa exon 1074168 1074463 0.993 - . Parent=mRNA28 III gt csa exon 1076380 1076543 1 - . Parent=mRNA28 III gt csa mRNA 1062781 1076543 . - . ID=mRNA29;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk1351e07.5 23 549 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA29 III gt csa exon 1064630 1064950 1 - . Parent=mRNA29 III gt csa exon 1067821 1067940 0.983 - . Parent=mRNA29 III gt csa exon 1070411 1070643 1 - . Parent=mRNA29 III gt csa exon 1072375 1072533 1 - . Parent=mRNA29 III gt csa exon 1074168 1074374 0.995 - . Parent=mRNA29 III gt csa exon 1076372 1076543 0.994 - . Parent=mRNA29 III gt csa mRNA 1062794 1064950 . - . ID=mRNA30;Parent=gene14;Target=yk1172f12.3 68 589 - III gt csa exon 1062794 1063137 1 - . Parent=mRNA30 III gt csa exon 1064630 1064798 0.932 - . Parent=mRNA30 III gt csa exon 1064945 1064950 0.833 - . Parent=mRNA30 III gt csa mRNA 1067962 1068321 . - . ID=mRNA31;Parent=gene14;Target=yk394b5.5 1 360 + III gt csa exon 1067962 1068321 1 - . Parent=mRNA31 III gt csa mRNA 1072370 1076543 . - . ID=mRNA32;Parent=gene14;Target=yk572f4.5 1 360 +,yk117f1.5 1 360 +,CK579359 1 613 +,yk1101a09.5 23 632 +,yk1034a11.5 23 628 +,yk363h2.5 1 360 +,yk1172f12.5 23 612 +,yk1053h12.5 22 598 +,yk1339g04.5 24 597 +,yk1169g11.5 23 596 +,yk1170b11.5 23 594 +,yk1120d08.5 23 590 +,yk1286b11.5 23 589 +,yk1120g02.5 23 587 +,yk1058c11.5 23 586 +,yk1254h08.5 23 584 +,yk1722g08.5 23 543 +,yk804f05.5 23 542 +,yk1096a09.5 23 539 +,yk1516e02.5 23 528 +,yk1652g01.5 23 510 +,yk1401h02.5 23 497 +,yk1061h02.5 23 497 +,yk1369c04.5 23 488 +,yk505f9.5 1 368 +,yk1141g04.5 23 448 +,yk820f07.5 23 446 +,yk1741a10.5 24 446 +,yk1026h07.5 1 370 +,yk656g8.5 1 360 +,yk216b5.5 1 360 +,yk568d7.5 1 360 +,yk659c10.5 1 379 +,yk592b8.5 1 360 +,yk658b12.5 1 360 +,yk269b4.5 1 376 +,yk525g8.5 1 377 +,yk482b6.5 1 360 +,yk569b4.5 1 360 +,yk675h9.5 1 360 +,yk456c8.5 1 377 +,yk393b4.5 1 373 +,yk626a1.5 1 360 +,yk602e8.5 1 360 +,yk617a4.5 1 360 +,yk332b1.5 1 378 +,yk337c2.5 1 374 +,yk61b9.5 1 360 +,yk434f11.5 1 360 +,yk117c1.5 1 360 +,yk621h1.5 1 218 +,yk1376a02.5 23 252 +,yk106d3.5 1 181 +,yk768a10.5 23 200 + III gt csa exon 1072370 1072533 0.976 - . Parent=mRNA32 III gt csa exon 1074168 1074463 1 - . Parent=mRNA32 III gt csa exon 1076314 1076543 1 - . Parent=mRNA32 ### III gt csa gene 1078138 1080469 . - . ID=gene15 III gt csa mRNA 1078138 1079228 . - . ID=mRNA33;Parent=gene15;Target=yk1340e12.3 1 864 -,yk616a3.5 1 360 + III gt csa exon 1078138 1078930 0.996 - . Parent=mRNA33 III gt csa exon 1079155 1079228 0.932 - . Parent=mRNA33 III gt csa mRNA 1079466 1080469 . - . ID=mRNA34;Parent=gene15;Target=yk1243e09.3 1 706 -,BP 1 203 +,RP 1 203 +,yk1243e09.5 24 582 +,yk1340e12.5 23 491 +,yk493c1.5 1 375 +,yk291g7.5 1 240 +,U23938 1 107 + III gt csa exon 1079466 1079894 1 - . Parent=mRNA34 III gt csa exon 1079946 1080199 1 - . Parent=mRNA34 III gt csa exon 1080275 1080330 1 - . Parent=mRNA34 III gt csa exon 1080393 1080469 1 - . Parent=mRNA34 III gt csa mRNA 1079821 1080352 . - . ID=mRNA35;Parent=gene15;Target=yk1013b10.5 1 457 + III gt csa exon 1079821 1080199 0.995 - . Parent=mRNA35 III gt csa exon 1080275 1080352 0.885 - . Parent=mRNA35 ### III gt csa gene 1078143 1079828 . + . ID=gene16 III gt csa mRNA 1078143 1078790 . + . ID=mRNA36;Parent=gene16;Target=yk1013b10.3 1 651 +,yk616a3.3 1 300 + III gt csa exon 1078143 1078790 0.979 + . Parent=mRNA36 III gt csa mRNA 1079525 1079828 . + . ID=mRNA37;Parent=gene16;Target=yk291g7.3 1 300 +,yk493c1.3 1 300 + III gt csa exon 1079525 1079828 0.992 + . Parent=mRNA37 ### III gt csa gene 1080895 1095067 . + . ID=gene17 III gt csa mRNA 1080895 1081298 . + . ID=mRNA38;Parent=gene17;Target=yk628f9.3 1 285 -,CESAC24R 12 322 +,yk628f9.5 1 320 + III gt csa exon 1080895 1081097 0.97 + . Parent=mRNA38 III gt csa exon 1081143 1081298 0.936 + . Parent=mRNA38 III gt csa mRNA 1081386 1095067 . + . ID=mRNA39;Parent=gene17;Target=L26987 1 2172 +,yk96h7.5 1 360 +,yk628a12.5 1 378 +,yk375g6.5 1 240 + III gt csa exon 1081386 1081507 0.984 + . Parent=mRNA39 III gt csa exon 1081621 1081704 1 + . Parent=mRNA39 III gt csa exon 1082982 1083119 1 + . Parent=mRNA39 III gt csa exon 1084050 1084121 1 + . Parent=mRNA39 III gt csa exon 1084325 1084449 1 + . Parent=mRNA39 III gt csa exon 1087773 1088553 0.996 + . Parent=mRNA39 III gt csa exon 1091545 1091685 0.986 + . Parent=mRNA39 III gt csa exon 1092617 1092679 0.984 + . Parent=mRNA39 III gt csa exon 1092734 1092865 1 + . Parent=mRNA39 III gt csa exon 1094216 1094362 0.973 + . Parent=mRNA39 III gt csa exon 1094697 1095067 0.997 + . Parent=mRNA39 III gt csa mRNA 1081392 1094789 . + . ID=mRNA40;Parent=gene17;Target=yk325e4.5 1 374 +,WP 1 583 + III gt csa exon 1081392 1081507 1 + . Parent=mRNA40 III gt csa exon 1081621 1081704 1 + . Parent=mRNA40 III gt csa exon 1084050 1084121 1 + . Parent=mRNA40 III gt csa exon 1084325 1084449 1 + . Parent=mRNA40 III gt csa exon 1087773 1088553 1 + . Parent=mRNA40 III gt csa exon 1091545 1091685 1 + . Parent=mRNA40 III gt csa exon 1092617 1092679 1 + . Parent=mRNA40 III gt csa exon 1092734 1092865 1 + . Parent=mRNA40 III gt csa exon 1094216 1094362 1 + . Parent=mRNA40 III gt csa exon 1094697 1094789 1 + . Parent=mRNA40 III gt csa mRNA 1086135 1086598 . + . ID=mRNA41;Parent=gene17;Target=yk64a7.5 1 360 +,yk774d01.5 23 484 +,yk168e1.5 1 360 + III gt csa exon 1086135 1086598 0.998 + . Parent=mRNA41 ### III gt csa gene 1086142 1095035 . - . ID=gene18 III gt csa mRNA 1086142 1086645 . - . ID=mRNA42;Parent=gene18;Target=yk774d01.3 1 496 +,yk168e1.3 1 300 +,yk64a7.3 1 340 + III gt csa exon 1086142 1086645 0.968 - . Parent=mRNA42 III gt csa mRNA 1092456 1092592 . - . ID=mRNA43;Parent=gene18;Target=yk623f3.3 45 180 + III gt csa exon 1092456 1092592 0.883 - . Parent=mRNA43 III gt csa mRNA 1094701 1095035 . - . ID=mRNA44;Parent=gene18;Target=yk628a12.3 1 300 +,yk325e4.3 1 300 +,yk96h7.3 1 317 + III gt csa exon 1094701 1095035 0.97 - . Parent=mRNA44 ### III gt csa gene 1103215 1104223 . + . ID=gene19 III gt csa mRNA 1103215 1104223 . + . ID=mRNA45;Parent=gene19;Target=yk509d9.5 1 240 + III gt csa exon 1103215 1103340 0.917 + . Parent=mRNA45 III gt csa exon 1104113 1104223 0.973 + . Parent=mRNA45 ### III gt csa gene 1105166 1108112 . + . ID=gene20 III gt csa mRNA 1105166 1108112 . + . ID=mRNA46;Parent=gene20;Target=yk1464f04.5 1 530 + III gt csa exon 1105166 1105213 1 + . Parent=mRNA46 III gt csa exon 1105382 1105479 1 + . Parent=mRNA46 III gt csa exon 1106989 1107077 1 + . Parent=mRNA46 III gt csa exon 1107132 1107310 1 + . Parent=mRNA46 III gt csa exon 1107997 1108112 1 + . Parent=mRNA46 ### III gt csa gene 1108452 1111917 . + . ID=gene21 III gt csa mRNA 1108452 1110379 . + . ID=mRNA47;Parent=gene21;Target=yk387g5.5 1 374 +,yk73h4.5 1 360 + III gt csa exon 1108452 1108493 0.976 + . Parent=mRNA47 III gt csa exon 1109102 1109194 1 + . Parent=mRNA47 III gt csa exon 1109306 1109456 1 + . Parent=mRNA47 III gt csa exon 1110211 1110379 0.95 + . Parent=mRNA47 III gt csa mRNA 1110444 1111917 . + . ID=mRNA48;Parent=gene21;Target=yk654h1.5 1 379 +,yk1464f04.3 1 511 -,yk654h1.3 1 300 -,yk73h4.3 1 339 - III gt csa exon 1110444 1110660 1 + . Parent=mRNA48 III gt csa exon 1111612 1111917 0.997 + . Parent=mRNA48 ### III gt csa gene 1113142 1113501 . + . ID=gene22 III gt csa mRNA 1113142 1113501 . + . ID=mRNA49;Parent=gene22;Target=yk540h4.5 1 360 + III gt csa exon 1113142 1113501 0.962 + . Parent=mRNA49 ### III gt csa gene 1116479 1145189 . + . ID=gene23 III gt csa mRNA 1116479 1142875 . + . ID=mRNA50;Parent=gene23;Target=yk476e8.5 1 375 +,yk413d2.5 1 378 +,yk115h9.5 1 360 +,AB071420 1 1206 +,CEESU89F 1 378 +,yk476e8.3 1 300 -,yk115h9.3 1 316 - III gt csa exon 1116479 1116537 1 + . Parent=mRNA50 III gt csa exon 1116980 1117047 1 + . Parent=mRNA50 III gt csa exon 1117143 1117225 1 + . Parent=mRNA50 III gt csa exon 1117275 1117383 1 + . Parent=mRNA50 III gt csa exon 1122635 1122766 1 + . Parent=mRNA50 III gt csa exon 1139058 1139117 1 + . Parent=mRNA50 III gt csa exon 1139983 1140084 1 + . Parent=mRNA50 III gt csa exon 1140353 1140439 1 + . Parent=mRNA50 III gt csa exon 1141806 1142171 1 + . Parent=mRNA50 III gt csa exon 1142665 1142875 0.981 + . Parent=mRNA50 III gt csa mRNA 1116738 1142838 . + . ID=mRNA51;Parent=gene23;Target=BP 1 356 +,CEESU89F 1 378 + III gt csa exon 1116738 1116762 0.381 + . Parent=mRNA51 III gt csa exon 1116980 1117047 0.868 + . Parent=mRNA51 III gt csa exon 1117143 1117225 1 + . Parent=mRNA51 III gt csa exon 1117275 1117383 1 + . Parent=mRNA51 III gt csa exon 1122635 1122766 0.914 + . Parent=mRNA51 III gt csa exon 1139983 1140084 0.767 + . Parent=mRNA51 III gt csa exon 1141806 1142171 0.882 + . Parent=mRNA51 III gt csa exon 1142656 1142838 0.85 + . Parent=mRNA51 III gt csa mRNA 1125293 1125473 . + . ID=mRNA52;Parent=gene23;Target=yk553h3.3 1 180 + III gt csa exon 1125293 1125473 0.95 + . Parent=mRNA52 III gt csa mRNA 1133548 1142889 . + . ID=mRNA53;Parent=gene23;Target=yk1661g06.3 1 722 -,yk476e8.3 1 300 -,yk115h9.3 1 316 - III gt csa exon 1133548 1133558 0.727 + . Parent=mRNA53 III gt csa exon 1135590 1135608 0.737 + . Parent=mRNA53 III gt csa exon 1139983 1140084 1 + . Parent=mRNA53 III gt csa exon 1141806 1142171 1 + . Parent=mRNA53 III gt csa exon 1142665 1142889 0.991 + . Parent=mRNA53 III gt csa mRNA 1143062 1145189 . + . ID=mRNA54;Parent=gene23;Target=yk343a3.5 1 372 +,yk187d1.5 1 120 +,yk123d7.5 1 360 +,yk438f8.5 1 383 +,yk1158b07.3 1 574 -,yk550b4.5 1 360 +,yk543h10.5 11 360 + III gt csa exon 1143062 1143459 1 + . Parent=mRNA54 III gt csa exon 1143525 1143621 1 + . Parent=mRNA54 III gt csa exon 1143690 1143814 1 + . Parent=mRNA54 III gt csa exon 1144839 1145189 0.997 + . Parent=mRNA54 III gt csa mRNA 1143154 1145132 . + . ID=mRNA55;Parent=gene23;Target=yk60d1.5 1 360 +,yk142e6.5 1 373 +,yk657a9.5 2 379 +,yk103e11.5 1 330 +,yk604a1.5 1 360 +,yk470d12.5 1 360 +,yk647g1.5 1 360 +,RP 1 235 +,yk187d1.5 1 120 +,yk312d12.5 1 360 +,yk561h2.5 1 360 +,yk473b11.5 1 360 +,yk328f10.5 1 360 +,yk123d7.5 1 360 +,yk438f8.5 1 383 + III gt csa exon 1143154 1143303 0.993 + . Parent=mRNA55 III gt csa exon 1143382 1143459 1 + . Parent=mRNA55 III gt csa exon 1143525 1143621 1 + . Parent=mRNA55 III gt csa exon 1143690 1143814 1 + . Parent=mRNA55 III gt csa exon 1144839 1145034 0.95 + . Parent=mRNA55 III gt csa exon 1145050 1145132 0.868 + . Parent=mRNA55 III gt csa mRNA 1143154 1145189 . + . ID=mRNA56;Parent=gene23;Target=yk60d1.5 1 360 +,yk142e6.5 1 373 +,yk657a9.5 2 379 +,yk103e11.5 1 330 +,yk604a1.5 1 360 +,yk470d12.5 1 360 +,yk647g1.5 1 360 +,BP 1 234 +,yk187d1.5 1 120 +,yk312d12.5 1 360 +,yk561h2.5 1 360 +,yk473b11.5 1 360 +,yk328f10.5 1 360 +,yk123d7.5 1 360 +,yk438f8.5 1 383 +,yk1158b07.3 1 574 -,yk550b4.5 1 360 +,yk543h10.5 11 360 + III gt csa exon 1143154 1143303 0.993 + . Parent=mRNA56 III gt csa exon 1143382 1143459 1 + . Parent=mRNA56 III gt csa exon 1143525 1143621 1 + . Parent=mRNA56 III gt csa exon 1143690 1143814 1 + . Parent=mRNA56 III gt csa exon 1144839 1145189 0.997 + . Parent=mRNA56 ### III gt csa gene 1125231 1145193 . - . ID=gene24 III gt csa mRNA 1125231 1135544 . - . ID=mRNA57;Parent=gene24;Target=yk1034b01.3 1 771 -,yk1181b08.3 1 560 -,yk863a05.3 1 746 -,BP 1 507 +,RP 1 507 +,WP 1 509 +,yk553h3.5 1 360 + III gt csa exon 1125231 1125670 0.981 - . Parent=mRNA57 III gt csa exon 1125798 1125884 1 - . Parent=mRNA57 III gt csa exon 1126918 1127243 1 - . Parent=mRNA57 III gt csa exon 1127709 1127839 1 - . Parent=mRNA57 III gt csa exon 1128867 1128978 1 - . Parent=mRNA57 III gt csa exon 1129237 1129354 1 - . Parent=mRNA57 III gt csa exon 1129814 1129916 1 - . Parent=mRNA57 III gt csa exon 1134086 1134290 1 - . Parent=mRNA57 III gt csa exon 1134380 1134448 1 - . Parent=mRNA57 III gt csa exon 1135196 1135288 1 - . Parent=mRNA57 III gt csa exon 1135380 1135544 0.687 - . Parent=mRNA57 III gt csa mRNA 1129245 1136013 . - . ID=mRNA58;Parent=gene24;Target=yk553h3.5 1 360 +,yk1034b01.5 24 613 +,yk863a05.5 17 604 + III gt csa exon 1129245 1129354 0.991 - . Parent=mRNA58 III gt csa exon 1129814 1129916 1 - . Parent=mRNA58 III gt csa exon 1134086 1134290 1 - . Parent=mRNA58 III gt csa exon 1134380 1134448 1 - . Parent=mRNA58 III gt csa exon 1135196 1135288 1 - . Parent=mRNA58 III gt csa exon 1135380 1135488 1 - . Parent=mRNA58 III gt csa exon 1135900 1136013 1 - . Parent=mRNA58 III gt csa mRNA 1144830 1145193 . - . ID=mRNA59;Parent=gene24;Target=yk470d12.3 1 300 +,yk604a1.3 1 300 +,yk473b11.3 1 300 +,yk312d12.3 1 300 +,yk343a3.3 1 300 +,yk530f6.3 1 300 +,yk438f8.3 1 285 +,yk561h2.3 1 292 +,yk543h10.3 1 300 +,yk647g1.3 1 300 +,yk142e6.3 1 300 +,yk60d1.3 1 343 +,yk103e11.3 1 334 +,yk123d7.3 1 180 + III gt csa exon 1144830 1145193 0.971 - . Parent=mRNA59 ### III gt csa gene 1172435 1172612 . + . ID=gene25 III gt csa mRNA 1172435 1172612 . + . ID=mRNA60;Parent=gene25;Target=yk511h7.5 1 180 + III gt csa exon 1172435 1172612 0.933 + . Parent=mRNA60 ### III gt csa gene 1180689 1181054 . + . ID=gene26 III gt csa mRNA 1180689 1181054 . + . ID=mRNA61;Parent=gene26;Target=yk511h7.3 1 300 - III gt csa exon 1180689 1180787 0.929 + . Parent=mRNA61 III gt csa exon 1180855 1181054 0.942 + . Parent=mRNA61 ### III gt csa gene 1182067 1184916 . + . ID=gene27 III gt csa mRNA 1182067 1184916 . + . ID=mRNA62;Parent=gene27;Target=yk94h5.5 1 248 +,yk101e7.5 1 360 +,yk409f1.5 1 377 +,yk362f12.5 1 380 +,yk308d11.5 1 360 +,yk191a10.5 1 360 +,yk409a1.5 1 360 +,yk263d8.5 1 360 +,yk440h2.5 1 360 +,yk440h2.3 1 300 -,yk545f3.5 1 360 -,yk191a10.3 1 300 -,yk362f12.3 1 300 -,yk190e9.3 1 300 -,yk409f1.3 1 300 -,yk308d11.3 1 300 -,yk409a1.3 1 300 - III gt csa exon 1182067 1182083 1 + . Parent=mRNA62 III gt csa exon 1182151 1182302 1 + . Parent=mRNA62 III gt csa exon 1183141 1183324 1 + . Parent=mRNA62 III gt csa exon 1183376 1183473 0.974 + . Parent=mRNA62 III gt csa exon 1184629 1184916 0.993 + . Parent=mRNA62 ### III gt csa gene 1184691 1184913 . - . ID=gene28 III gt csa mRNA 1184691 1184913 . - . ID=mRNA63;Parent=gene28;Target=yk388g7.3 1 176 +,yk94h5.3 1 180 + III gt csa exon 1184691 1184913 0.944 - . Parent=mRNA63 ### III gt csa gene 1185272 1189478 . - . ID=gene29 III gt csa mRNA 1185272 1189478 . - . ID=mRNA64;Parent=gene29;Target=yk1481a08.3 1 678 -,yk1392d03.3 1 601 - III gt csa exon 1185272 1185683 0.998 - . Parent=mRNA64 III gt csa exon 1187296 1187356 0.984 - . Parent=mRNA64 III gt csa exon 1187434 1187550 0.991 - . Parent=mRNA64 III gt csa exon 1187601 1187741 0.992 - . Parent=mRNA64 III gt csa exon 1189002 1189478 1 - . Parent=mRNA64 ### III gt csa gene 1191338 1193802 . - . ID=gene30 III gt csa mRNA 1191338 1193802 . - . ID=mRNA65;Parent=gene30;Target=yk1392d03.5 23 588 +,yk1481a08.5 23 461 + III gt csa exon 1191338 1191568 0.996 - . Parent=mRNA65 III gt csa exon 1191631 1191720 1 - . Parent=mRNA65 III gt csa exon 1193558 1193802 1 - . Parent=mRNA65 ### III gt csa gene 1194399 1196282 . - . ID=gene31 III gt csa mRNA 1194399 1196282 . - . ID=mRNA66;Parent=gene31;Target=CB103439 99 622 +,CB103483 90 610 +,CB103504 61 572 +,yk1752b03.3 242 747 -,CB103472 81 584 +,yk1160g10.3 24 520 -,yk1160g10.5 24 516 +,CB103430 73 559 +,CK583320 1 435 +,yk368b4.5 1 374 +,CB103451 106 494 +,yk115f10.5 12 360 + III gt csa exon 1194399 1194795 1 - . Parent=mRNA66 III gt csa exon 1196156 1196282 1 - . Parent=mRNA66 ### III gt csa gene 1194424 1194755 . + . ID=gene32 III gt csa mRNA 1194424 1194755 . + . ID=mRNA67;Parent=gene32;Target=yk115f10.3 1 332 + III gt csa exon 1194424 1194755 0.997 + . Parent=mRNA67 ### III gt csa gene 1200240 1201998 . - . ID=gene33 III gt csa mRNA 1200240 1201998 . - . ID=mRNA68;Parent=gene33;Target=yk1488e08.5 23 608 + III gt csa exon 1200240 1200461 0.995 - . Parent=mRNA68 III gt csa exon 1201465 1201639 1 - . Parent=mRNA68 III gt csa exon 1201810 1201998 0.995 - . Parent=mRNA68 ### III gt csa gene 1202535 1207288 . + . ID=gene34 III gt csa mRNA 1202535 1207255 . + . ID=mRNA69;Parent=gene34;Target=yk531a4.5 1 376 +,yk1387f11.5 23 512 +,WP 1 337 +,yk172c10.5 1 377 +,yk342c4.5 1 373 +,yk550b8.5 1 360 +,yk409b7.5 1 376 +,yk342c4.3 1 300 -,yk409b7.3 1 300 -,yk172c10.3 1 300 - III gt csa exon 1202535 1202609 0.987 + . Parent=mRNA69 III gt csa exon 1202655 1202765 1 + . Parent=mRNA69 III gt csa exon 1202829 1203135 1 + . Parent=mRNA69 III gt csa exon 1203589 1203699 1 + . Parent=mRNA69 III gt csa exon 1205327 1205739 1 + . Parent=mRNA69 III gt csa exon 1206843 1206957 1 + . Parent=mRNA69 III gt csa exon 1207184 1207255 0.972 + . Parent=mRNA69 III gt csa mRNA 1202535 1207260 . + . ID=mRNA70;Parent=gene34;Target=yk531a4.5 1 376 +,yk1387f11.5 23 512 +,WP 1 337 +,yk172c10.5 1 377 +,yk342c4.5 1 373 +,yk550b8.5 1 360 +,yk550b8.3 1 300 - III gt csa exon 1202535 1202609 0.987 + . Parent=mRNA70 III gt csa exon 1202655 1202765 1 + . Parent=mRNA70 III gt csa exon 1202829 1203135 1 + . Parent=mRNA70 III gt csa exon 1203589 1203699 1 + . Parent=mRNA70 III gt csa exon 1205327 1205739 1 + . Parent=mRNA70 III gt csa exon 1206843 1206932 0.878 + . Parent=mRNA70 III gt csa exon 1207184 1207260 0.961 + . Parent=mRNA70 III gt csa mRNA 1202535 1207288 . + . ID=mRNA71;Parent=gene34;Target=yk531a4.5 1 376 +,yk1387f11.5 23 512 +,WP 1 337 +,yk172c10.5 1 377 +,yk342c4.5 1 373 +,yk550b8.5 1 360 +,yk409b7.5 1 376 +,yk1387f11.3 1 649 - III gt csa exon 1202535 1202609 0.987 + . Parent=mRNA71 III gt csa exon 1202655 1202765 1 + . Parent=mRNA71 III gt csa exon 1202829 1203135 1 + . Parent=mRNA71 III gt csa exon 1203589 1203699 1 + . Parent=mRNA71 III gt csa exon 1205327 1205739 1 + . Parent=mRNA71 III gt csa exon 1206843 1207288 1 + . Parent=mRNA71 III gt csa mRNA 1203589 1207248 . + . ID=mRNA72;Parent=gene34;Target=yk531a4.3 10 300 - III gt csa exon 1203589 1203699 1 + . Parent=mRNA72 III gt csa exon 1206843 1206957 0.983 + . Parent=mRNA72 III gt csa exon 1207184 1207248 0.969 + . Parent=mRNA72 ### III gt csa gene 1208120 1209321 . + . ID=gene35 III gt csa mRNA 1208120 1209321 . + . ID=mRNA73;Parent=gene35;Target=yk681h11.5 1 360 +,yk1103g05.5 41 657 +,cm13d11.5 1 287 +,yk660b11.5 1 378 +,yk669g11.5 1 360 +,yk210b6.5 1 376 +,yk608g3.5 1 360 +,yk506a7.5 1 360 + III gt csa exon 1208120 1208251 1 + . Parent=mRNA73 III gt csa exon 1208372 1208714 0.997 + . Parent=mRNA73 III gt csa exon 1209177 1209321 1 + . Parent=mRNA73 ### III gt csa gene 1211225 1213642 . + . ID=gene36 III gt csa mRNA 1211225 1213642 . + . ID=mRNA74;Parent=gene36;Target=yk93h2.5 1 265 +,yk1535b11.3 1 614 -,CEEST24F 1 422 -,yk669g11.3 1 300 -,yk506a7.3 1 300 -,yk210b6.3 1 300 -,yk660b11.3 1 300 -,yk681h11.3 1 300 -,yk1624b11.3 1 340 -,yk93h2.3 1 331 -,CEESE53F 1 342 - III gt csa exon 1211225 1211488 0.964 + . Parent=mRNA74 III gt csa exon 1212576 1212824 0.992 + . Parent=mRNA74 III gt csa exon 1213437 1213642 0.981 + . Parent=mRNA74 ### III gt csa gene 1214935 1215287 . + . ID=gene37 III gt csa mRNA 1214935 1215287 . + . ID=mRNA75;Parent=gene37;Target=yk726c5.5 1 340 +,yk843g10.5 1 341 +,yk726h9.5 1 330 +,yk1454b03.5 1 335 +,yk1693g03.5 1 335 +,yk1613b06.5 1 335 +,yk1376c06.5 1 345 +,yk1619d03.5 1 345 +,yk1657e01.5 1 343 +,yk151f9.5 1 240 +,yk70e6.5 1 317 +,yk309g3.5 1 308 +,yk367e7.5 1 311 +,yk275e11.5 1 298 +,yk383a12.5 1 290 +,yk1313b02.5 1 156 + III gt csa exon 1214935 1215287 0.977 + . Parent=mRNA75 ### III gt csa gene 1214942 1215266 . - . ID=gene38 III gt csa mRNA 1214942 1215266 . - . ID=mRNA76;Parent=gene38;Target=yk726c5.3 1 267 +,yk726h9.3 1 270 +,yk734c7.3 1 275 +,yk1613b06.3 1 309 +,yk1641g01.3 1 312 +,yk1693g03.3 1 323 +,yk275e11.3 1 278 +,yk367e7.3 1 249 +,yk383a12.3 1 248 +,yk151f9.3 1 240 +,yk70e6.3 1 299 +,yk309g3.3 1 245 + III gt csa exon 1214942 1215266 0.957 - . Parent=mRNA76 ### III gt csa gene 1216021 1216795 . + . ID=gene39 III gt csa mRNA 1216021 1216795 . + . ID=mRNA77;Parent=gene39;Target=yk808h01.3 1 641 +,yk831f01.3 1 241 +,yk1315b01.3 1 501 +,yk754f09.3 1 350 +,yk781a01.3 1 267 +,yk1358a10.3 1 302 +,yk413h8.5 1 120 + III gt csa exon 1216021 1216795 0.881 + . Parent=mRNA77 ### III gt csa gene 1216578 1216806 . - . ID=gene40 III gt csa mRNA 1216578 1216806 . - . ID=mRNA78;Parent=gene40;Target=yk264h7.5 12 240 + III gt csa exon 1216578 1216806 0.983 - . Parent=mRNA78 ### III gt csa gene 1220307 1222062 . - . ID=gene41 III gt csa mRNA 1220307 1222062 . - . ID=mRNA79;Parent=gene41;Target=yk1221d02.5 22 628 +,yk754f09.5 23 562 +,yk1358a10.5 23 547 +,yk808h01.5 26 550 +,yk781a01.5 23 546 +,yk236b4.5 1 360 +,yk629h11.5 1 356 +,yk831f01.5 23 175 + III gt csa exon 1220307 1220373 1 - . Parent=mRNA79 III gt csa exon 1221160 1221571 1 - . Parent=mRNA79 III gt csa exon 1221935 1222062 1 - . Parent=mRNA79 ### III gt csa gene 1225449 1225807 . + . ID=gene42 III gt csa mRNA 1225449 1225807 . + . ID=mRNA80;Parent=gene42;Target=yk549c5.5 1 360 + III gt csa exon 1225449 1225807 0.976 + . Parent=mRNA80 ### III gt csa gene 1225754 1226053 . - . ID=gene43 III gt csa mRNA 1225754 1226053 . - . ID=mRNA81;Parent=gene43;Target=yk549c5.3 1 300 + III gt csa exon 1225754 1226053 1 - . Parent=mRNA81 ### III gt csa gene 1236005 1237038 . + . ID=gene44 III gt csa mRNA 1236005 1237038 . + . ID=mRNA82;Parent=gene44;Target=WP 1 254 + III gt csa exon 1236005 1236093 1 + . Parent=mRNA82 III gt csa exon 1236319 1236772 1 + . Parent=mRNA82 III gt csa exon 1236820 1237038 1 + . Parent=mRNA82 ### III gt csa gene 1239313 1242728 . + . ID=gene45 III gt csa mRNA 1239313 1242728 . + . ID=mRNA83;Parent=gene45;Target=WP 1 307 + III gt csa exon 1239313 1239401 1 + . Parent=mRNA83 III gt csa exon 1241115 1241739 1 + . Parent=mRNA83 III gt csa exon 1242522 1242728 1 + . Parent=mRNA83 ### III gt csa gene 1243521 1245273 . + . ID=gene46 III gt csa mRNA 1243521 1245273 . + . ID=mRNA84;Parent=gene46;Target=WP 1 306 + III gt csa exon 1243521 1243636 1 + . Parent=mRNA84 III gt csa exon 1244420 1245014 1 + . Parent=mRNA84 III gt csa exon 1245067 1245273 1 + . Parent=mRNA84 ### III gt csa gene 1247626 1249143 . - . ID=gene47 III gt csa mRNA 1247626 1249143 . - . ID=mRNA85;Parent=gene47;Target=WP 1 270 + III gt csa exon 1247626 1247808 1 - . Parent=mRNA85 III gt csa exon 1247862 1248417 1 - . Parent=mRNA85 III gt csa exon 1249073 1249143 1 - . Parent=mRNA85 ### III gt csa gene 1249509 1251814 . + . ID=gene48 III gt csa mRNA 1249509 1251814 . + . ID=mRNA86;Parent=gene48;Target=WP 1 265 +,yk252g1.5 1 376 + III gt csa exon 1249509 1249579 1 + . Parent=mRNA86 III gt csa exon 1250603 1251143 1 + . Parent=mRNA86 III gt csa exon 1251632 1251814 1 + . Parent=mRNA86 ### III gt csa gene 1253374 1254391 . - . ID=gene49 III gt csa mRNA 1253374 1254391 . - . ID=mRNA87;Parent=gene49;Target=WP 1 252 + III gt csa exon 1253374 1253548 1 - . Parent=mRNA87 III gt csa exon 1253764 1254273 1 - . Parent=mRNA87 III gt csa exon 1254321 1254391 1 - . Parent=mRNA87 ### III gt csa gene 1255541 1256919 . + . ID=gene50 III gt csa mRNA 1255541 1256919 . + . ID=mRNA88;Parent=gene50;Target=WP 1 282 + III gt csa exon 1255541 1256020 1 + . Parent=mRNA88 III gt csa exon 1256067 1256195 1 + . Parent=mRNA88 III gt csa exon 1256630 1256677 1 + . Parent=mRNA88 III gt csa exon 1256731 1256919 1 + . Parent=mRNA88 ### III gt csa gene 1257203 1258404 . - . ID=gene51 III gt csa mRNA 1257203 1258404 . - . ID=mRNA89;Parent=gene51;Target=yk1419f09.3 1 775 -,WP 1 278 + III gt csa exon 1257203 1257419 0.995 - . Parent=mRNA89 III gt csa exon 1257724 1258291 1 - . Parent=mRNA89 III gt csa exon 1258337 1258404 1 - . Parent=mRNA89 ### III gt csa gene 1259414 1260174 . + . ID=gene52 III gt csa mRNA 1259414 1260174 . + . ID=mRNA90;Parent=gene52;Target=WP 1 91 + III gt csa exon 1259414 1259503 1 + . Parent=mRNA90 III gt csa exon 1259992 1260174 1 + . Parent=mRNA90 ### III gt csa gene 1261815 1262832 . - . ID=gene53 III gt csa mRNA 1261815 1262832 . - . ID=mRNA91;Parent=gene53;Target=WP 1 252 + III gt csa exon 1261815 1261989 1 - . Parent=mRNA91 III gt csa exon 1262205 1262714 1 - . Parent=mRNA91 III gt csa exon 1262762 1262832 1 - . Parent=mRNA91 ### III gt csa gene 1265663 1266845 . - . ID=gene54 III gt csa mRNA 1265663 1266845 . - . ID=mRNA92;Parent=gene54;Target=WP 1 278 + III gt csa exon 1265663 1265860 1 - . Parent=mRNA92 III gt csa exon 1266165 1266732 1 - . Parent=mRNA92 III gt csa exon 1266778 1266845 1 - . Parent=mRNA92 ### III gt csa gene 1267393 1269234 . - . ID=gene55 III gt csa mRNA 1267393 1269234 . - . ID=mRNA93;Parent=gene55;Target=WP 1 306 + III gt csa exon 1267393 1267608 1 - . Parent=mRNA93 III gt csa exon 1268344 1268962 1 - . Parent=mRNA93 III gt csa exon 1269152 1269234 1 - . Parent=mRNA93 ### III gt csa gene 1269569 1271418 . - . ID=gene56 III gt csa mRNA 1269569 1271418 . - . ID=mRNA94;Parent=gene56;Target=yk1217b07.3 1 777 -,WP 1 307 +,yk1217b07.5 23 624 + III gt csa exon 1269569 1269841 0.96 - . Parent=mRNA94 III gt csa exon 1269904 1270519 1 - . Parent=mRNA94 III gt csa exon 1271293 1271418 1 - . Parent=mRNA94 ### III gt csa gene 1272534 1273666 . - . ID=gene57 III gt csa mRNA 1272534 1273666 . - . ID=mRNA95;Parent=gene57;Target=WP 1 305 + III gt csa exon 1272534 1272749 1 - . Parent=mRNA95 III gt csa exon 1272798 1273413 1 - . Parent=mRNA95 III gt csa exon 1273584 1273666 1 - . Parent=mRNA95 ### III gt csa gene 1274504 1275578 . - . ID=gene58 III gt csa mRNA 1274504 1275578 . - . ID=mRNA96;Parent=gene58;Target=WP 1 306 + III gt csa exon 1274504 1274719 1 - . Parent=mRNA96 III gt csa exon 1274773 1275391 1 - . Parent=mRNA96 III gt csa exon 1275496 1275578 1 - . Parent=mRNA96 ### III gt csa gene 1282418 1282768 . - . ID=gene59 III gt csa mRNA 1282418 1282768 . - . ID=mRNA97;Parent=gene59;Target=yk720c2.3 1 300 - III gt csa exon 1282418 1282633 0.991 - . Parent=mRNA97 III gt csa exon 1282685 1282768 1 - . Parent=mRNA97 ### III gt csa gene 1283269 1288513 . - . ID=gene60 III gt csa mRNA 1283269 1284322 . - . ID=mRNA98;Parent=gene60;Target=yk720c2.5 105 341 +,yk729a8.5 114 340 + III gt csa exon 1283269 1283321 0.981 - . Parent=mRNA98 III gt csa exon 1284052 1284148 1 - . Parent=mRNA98 III gt csa exon 1284236 1284322 1 - . Parent=mRNA98 III gt csa mRNA 1287289 1288513 . - . ID=mRNA99;Parent=gene60;Target=WP 1 312 + III gt csa exon 1287289 1287501 1 - . Parent=mRNA99 III gt csa exon 1287544 1288153 1 - . Parent=mRNA99 III gt csa exon 1288401 1288513 1 - . Parent=mRNA99 ### III gt csa gene 1284398 1287041 . + . ID=gene61 III gt csa mRNA 1284398 1284757 . + . ID=mRNA100;Parent=gene61;Target=yk53f10.5 1 360 + III gt csa exon 1284398 1284757 0.989 + . Parent=mRNA100 III gt csa mRNA 1285006 1287041 . + . ID=mRNA101;Parent=gene61;Target=WP 1 303 + III gt csa exon 1285006 1285088 1 + . Parent=mRNA101 III gt csa exon 1286162 1286777 1 + . Parent=mRNA101 III gt csa exon 1286832 1287041 1 + . Parent=mRNA101 ### III gt csa gene 1292041 1293205 . - . ID=gene62 III gt csa mRNA 1292041 1293205 . - . ID=mRNA102;Parent=gene62;Target=WP 1 311 + III gt csa exon 1292041 1292250 1 - . Parent=mRNA102 III gt csa exon 1292333 1292972 1 - . Parent=mRNA102 III gt csa exon 1293123 1293205 1 - . Parent=mRNA102 ### III gt csa gene 1295674 1297059 . + . ID=gene63 III gt csa mRNA 1295674 1297059 . + . ID=mRNA103;Parent=gene63;Target=WP 1 311 +,yk720c2.3 1 237 - III gt csa exon 1295674 1295756 1 + . Parent=mRNA103 III gt csa exon 1296149 1296785 1 + . Parent=mRNA103 III gt csa exon 1296847 1297059 1 + . Parent=mRNA103 ### III gt csa gene 1298564 1299474 . + . ID=gene64 III gt csa mRNA 1298564 1299474 . + . ID=mRNA104;Parent=gene64;Target=WP 1 292 + III gt csa exon 1298564 1299238 0.952 + . Parent=mRNA104 III gt csa exon 1299280 1299474 1 + . Parent=mRNA104 ### III gt csa gene 1303704 1305451 . + . ID=gene65 III gt csa mRNA 1303704 1305451 . + . ID=mRNA105;Parent=gene65;Target=WP 1 322 + III gt csa exon 1303704 1303792 1 + . Parent=mRNA105 III gt csa exon 1303837 1304464 1 + . Parent=mRNA105 III gt csa exon 1305203 1305451 1 + . Parent=mRNA105 ### III gt csa gene 1305794 1308239 . - . ID=gene66 III gt csa mRNA 1305794 1308239 . - . ID=mRNA106;Parent=gene66;Target=WP 1 301 + III gt csa exon 1305794 1305988 1 - . Parent=mRNA106 III gt csa exon 1306824 1307478 1 - . Parent=mRNA106 III gt csa exon 1308187 1308239 1 - . Parent=mRNA106 ### III gt csa gene 1309177 1311200 . + . ID=gene67 III gt csa mRNA 1309177 1311200 . + . ID=mRNA107;Parent=gene67;Target=WP 1 337 + III gt csa exon 1309177 1309335 1 + . Parent=mRNA107 III gt csa exon 1309577 1309744 1 + . Parent=mRNA107 III gt csa exon 1309838 1309936 1 + . Parent=mRNA107 III gt csa exon 1310015 1310083 1 + . Parent=mRNA107 III gt csa exon 1310130 1310283 1 + . Parent=mRNA107 III gt csa exon 1310329 1310399 1 + . Parent=mRNA107 III gt csa exon 1310910 1311200 1 + . Parent=mRNA107 ### III gt csa gene 1311218 1312383 . - . ID=gene68 III gt csa mRNA 1311218 1312383 . - . ID=mRNA108;Parent=gene68;Target=WP 1 241 + III gt csa exon 1311218 1311421 1 - . Parent=mRNA108 III gt csa exon 1311716 1312111 1 - . Parent=mRNA108 III gt csa exon 1312266 1312383 0.463 - . Parent=mRNA108 ### III gt csa gene 1313348 1315208 . - . ID=gene69 III gt csa mRNA 1313348 1315208 . - . ID=mRNA109;Parent=gene69;Target=yk1237h07.3 1 660 -,WP 1 302 +,yk1237h07.5 1 139 + III gt csa exon 1313348 1313559 0.995 - . Parent=mRNA109 III gt csa exon 1314031 1314655 1 - . Parent=mRNA109 III gt csa exon 1315090 1315208 0.992 - . Parent=mRNA109 ### III gt csa gene 1315254 1316655 . + . ID=gene70 III gt csa mRNA 1315254 1316655 . + . ID=mRNA110;Parent=gene70;Target=WP 1 274 + III gt csa exon 1315254 1315357 1 + . Parent=mRNA110 III gt csa exon 1315402 1315494 1 + . Parent=mRNA110 III gt csa exon 1316031 1316655 1 + . Parent=mRNA110 ### III gt csa gene 1319006 1321651 . - . ID=gene71 III gt csa mRNA 1319006 1321651 . - . ID=mRNA111;Parent=gene71;Target=WP 1 302 + III gt csa exon 1319006 1319215 1 - . Parent=mRNA111 III gt csa exon 1319264 1319888 1 - . Parent=mRNA111 III gt csa exon 1321581 1321651 1 - . Parent=mRNA111 ### III gt csa gene 1322136 1323621 . - . ID=gene72 III gt csa mRNA 1322136 1323621 . - . ID=mRNA112;Parent=gene72;Target=yk546f3.5 1 377 -,WP 1 304 + III gt csa exon 1322136 1322353 0.995 - . Parent=mRNA112 III gt csa exon 1322402 1323026 1 - . Parent=mRNA112 III gt csa exon 1323551 1323621 1 - . Parent=mRNA112 ### III gt csa gene 1328634 1333667 . + . ID=gene73 III gt csa mRNA 1328634 1333667 . + . ID=mRNA113;Parent=gene73;Target=WP 1 500 + III gt csa exon 1328634 1328704 1 + . Parent=mRNA113 III gt csa exon 1329933 1330529 1 + . Parent=mRNA113 III gt csa exon 1331997 1332615 1 + . Parent=mRNA113 III gt csa exon 1333455 1333667 1 + . Parent=mRNA113 ### III gt csa gene 1333841 1334165 . - . ID=gene74 III gt csa mRNA 1333841 1334165 . - . ID=mRNA114;Parent=gene74;Target=WP 1 92 + III gt csa exon 1333841 1333873 0.825 - . Parent=mRNA114 III gt csa exon 1333923 1334165 0.915 - . Parent=mRNA114 ### III gt csa gene 1336697 1342484 . - . ID=gene75 III gt csa mRNA 1336697 1340323 . - . ID=mRNA115;Parent=gene75;Target=yk872h02.3 1 703 -,WP 1 327 + III gt csa exon 1336697 1337005 0.997 - . Parent=mRNA115 III gt csa exon 1338016 1338619 1 - . Parent=mRNA115 III gt csa exon 1340092 1340175 1 - . Parent=mRNA115 III gt csa exon 1340235 1340323 1 - . Parent=mRNA115 III gt csa mRNA 1340606 1342484 . - . ID=mRNA116;Parent=gene75;Target=WP 1 329 + III gt csa exon 1340606 1340800 1 - . Parent=mRNA116 III gt csa exon 1340854 1341023 1 - . Parent=mRNA116 III gt csa exon 1341072 1341547 1 - . Parent=mRNA116 III gt csa exon 1342339 1342484 1 - . Parent=mRNA116 ### III gt csa gene 1342986 1344682 . + . ID=gene76 III gt csa mRNA 1342986 1344682 . + . ID=mRNA117;Parent=gene76;Target=WP 1 325 + III gt csa exon 1342986 1343131 1 + . Parent=mRNA117 III gt csa exon 1343802 1344423 1 + . Parent=mRNA117 III gt csa exon 1344476 1344682 1 + . Parent=mRNA117 ### III gt csa gene 1344968 1345784 . - . ID=gene77 III gt csa mRNA 1344968 1345784 . - . ID=mRNA118;Parent=gene77;Target=WP 1 254 + III gt csa exon 1344968 1345417 1 - . Parent=mRNA118 III gt csa exon 1345473 1345784 1 - . Parent=mRNA118 ### III gt csa gene 1346305 1347118 . - . ID=gene78 III gt csa mRNA 1346305 1347118 . - . ID=mRNA119;Parent=gene78;Target=WP 1 251 + III gt csa exon 1346305 1346754 1 - . Parent=mRNA119 III gt csa exon 1346816 1347118 1 - . Parent=mRNA119 ### III gt csa gene 1347777 1349390 . - . ID=gene79 III gt csa mRNA 1347777 1349390 . - . ID=mRNA120;Parent=gene79;Target=WP 1 268 + III gt csa exon 1347777 1347980 1 - . Parent=mRNA120 III gt csa exon 1348040 1348143 1 - . Parent=mRNA120 III gt csa exon 1348299 1348657 1 - . Parent=mRNA120 III gt csa exon 1349254 1349390 1 - . Parent=mRNA120 ### III gt csa gene 1349742 1350826 . - . ID=gene80 III gt csa mRNA 1349742 1350826 . - . ID=mRNA121;Parent=gene80;Target=WP 1 253 + III gt csa exon 1349742 1350188 1 - . Parent=mRNA121 III gt csa exon 1350515 1350826 1 - . Parent=mRNA121 ### III gt csa gene 1351206 1353035 . - . ID=gene81 III gt csa mRNA 1351206 1353035 . - . ID=mRNA122;Parent=gene81;Target=WP 18 236 + III gt csa exon 1351206 1351652 1 - . Parent=mRNA122 III gt csa exon 1352826 1353035 1 - . Parent=mRNA122 ### III gt csa gene 1354987 1355410 . - . ID=gene82 III gt csa mRNA 1354987 1355410 . - . ID=mRNA123;Parent=gene82;Target=WP 1 125 + III gt csa exon 1354987 1355171 1 - . Parent=mRNA123 III gt csa exon 1355221 1355410 1 - . Parent=mRNA123 ### III gt csa gene 1357070 1359759 . - . ID=gene83 III gt csa mRNA 1357070 1359125 . - . ID=mRNA124;Parent=gene83;Target=WP 1 391 + III gt csa exon 1357070 1357311 1 - . Parent=mRNA124 III gt csa exon 1357360 1357471 1 - . Parent=mRNA124 III gt csa exon 1357509 1357735 0.969 - . Parent=mRNA124 III gt csa exon 1357835 1357952 1 - . Parent=mRNA124 III gt csa exon 1357998 1358245 1 - . Parent=mRNA124 III gt csa exon 1358287 1358398 1 - . Parent=mRNA124 III gt csa exon 1359006 1359125 1 - . Parent=mRNA124 III gt csa mRNA 1359244 1359759 . - . ID=mRNA125;Parent=gene83;Target=WP 1 140 + III gt csa exon 1359244 1359488 1 - . Parent=mRNA125 III gt csa exon 1359538 1359655 1 - . Parent=mRNA125 III gt csa exon 1359703 1359759 1 - . Parent=mRNA125 ### III gt csa gene 1360497 1362666 . + . ID=gene84 III gt csa mRNA 1360497 1362666 . + . ID=mRNA126;Parent=gene84;Target=WP 1 537 + III gt csa exon 1360497 1360553 1 + . Parent=mRNA126 III gt csa exon 1360601 1360718 1 + . Parent=mRNA126 III gt csa exon 1360779 1360948 1 + . Parent=mRNA126 III gt csa exon 1361034 1361151 1 + . Parent=mRNA126 III gt csa exon 1361197 1361420 1 + . Parent=mRNA126 III gt csa exon 1361465 1361576 1 + . Parent=mRNA126 III gt csa exon 1361749 1361960 1 + . Parent=mRNA126 III gt csa exon 1362006 1362123 1 + . Parent=mRNA126 III gt csa exon 1362185 1362666 1 + . Parent=mRNA126 ### III gt csa gene 1374142 1374515 . + . ID=gene85 III gt csa mRNA 1374142 1374515 . + . ID=mRNA127;Parent=gene85;Target=yk604h8.5 1 374 + III gt csa exon 1374142 1374515 1 + . Parent=mRNA127 ### III gt csa gene 1374575 1374874 . - . ID=gene86 III gt csa mRNA 1374575 1374874 . - . ID=mRNA128;Parent=gene86;Target=yk604h8.3 1 300 + III gt csa exon 1374575 1374874 0.993 - . Parent=mRNA128 ### III gt csa gene 1376935 1377993 . - . ID=gene87 III gt csa mRNA 1376935 1377993 . - . ID=mRNA129;Parent=gene87;Target=WP 1 215 + III gt csa exon 1376935 1377144 1 - . Parent=mRNA129 III gt csa exon 1377379 1377681 1 - . Parent=mRNA129 III gt csa exon 1377862 1377993 1 - . Parent=mRNA129 ### III gt csa gene 1379130 1383572 . - . ID=gene88 III gt csa mRNA 1379130 1383572 . - . ID=mRNA130;Parent=gene88;Target=WP 1 439 + III gt csa exon 1379130 1379360 1 - . Parent=mRNA130 III gt csa exon 1379412 1379579 1 - . Parent=mRNA130 III gt csa exon 1380424 1380553 1 - . Parent=mRNA130 III gt csa exon 1380609 1380685 0.902 - . Parent=mRNA130 III gt csa exon 1382653 1382989 1 - . Parent=mRNA130 III gt csa exon 1383057 1383140 1 - . Parent=mRNA130 III gt csa exon 1383283 1383572 1 - . Parent=mRNA130 ### III gt csa gene 1387471 1388069 . + . ID=gene89 III gt csa mRNA 1387471 1388069 . + . ID=mRNA131;Parent=gene89;Target=yk539a12.5 1 360 + III gt csa exon 1387471 1387545 0.967 + . Parent=mRNA131 III gt csa exon 1387786 1388069 1 + . Parent=mRNA131 ### III gt csa gene 1387828 1388127 . - . ID=gene90 III gt csa mRNA 1387828 1388127 . - . ID=mRNA132;Parent=gene90;Target=yk539a12.3 1 300 + III gt csa exon 1387828 1388127 0.987 - . Parent=mRNA132 ### III gt csa gene 1390536 1391840 . - . ID=gene91 III gt csa mRNA 1390536 1391840 . - . ID=mRNA133;Parent=gene91;Target=WP 1 252 +,CK579587 1 622 +,CB102366 100 678 +,CB102201 91 657 +,CK579588 1 556 +,CK583482 1 503 +,CB102373 95 478 +,CK583393 1 222 + III gt csa exon 1390536 1390718 1 - . Parent=mRNA133 III gt csa exon 1390764 1391067 1 - . Parent=mRNA133 III gt csa exon 1391411 1391499 1 - . Parent=mRNA133 III gt csa exon 1391551 1391638 1 - . Parent=mRNA133 III gt csa exon 1391688 1391736 1 - . Parent=mRNA133 III gt csa exon 1391782 1391840 1 - . Parent=mRNA133 ### III gt csa gene 1399366 1401295 . + . ID=gene92 III gt csa mRNA 1399366 1401295 . + . ID=mRNA134;Parent=gene92;Target=WP 1 357 + III gt csa exon 1399366 1399462 1 + . Parent=mRNA134 III gt csa exon 1399964 1400070 1 + . Parent=mRNA134 III gt csa exon 1400121 1400270 1 + . Parent=mRNA134 III gt csa exon 1400319 1400648 1 + . Parent=mRNA134 III gt csa exon 1400696 1400854 1 + . Parent=mRNA134 III gt csa exon 1401068 1401295 1 + . Parent=mRNA134 ### III gt csa gene 1401956 1403309 . + . ID=gene93 III gt csa mRNA 1401956 1403309 . + . ID=mRNA135;Parent=gene93;Target=WP 1 258 + III gt csa exon 1401956 1402065 1 + . Parent=mRNA135 III gt csa exon 1402385 1402463 1 + . Parent=mRNA135 III gt csa exon 1402510 1402610 1 + . Parent=mRNA135 III gt csa exon 1402777 1403077 1 + . Parent=mRNA135 III gt csa exon 1403127 1403309 1 + . Parent=mRNA135 ### III gt csa gene 1404782 1406220 . + . ID=gene94 III gt csa mRNA 1404782 1406220 . + . ID=mRNA136;Parent=gene94;Target=yk1098g06.5 11 546 +,WP 1 257 +,yk1098g06.3 1 708 - III gt csa exon 1404782 1404928 0.993 + . Parent=mRNA136 III gt csa exon 1404984 1405322 1 + . Parent=mRNA136 III gt csa exon 1405369 1405527 1 + . Parent=mRNA136 III gt csa exon 1405927 1406220 0.997 + . Parent=mRNA136 ### III gt csa gene 1409301 1414108 . - . ID=gene95 III gt csa mRNA 1409301 1412855 . - . ID=mRNA137;Parent=gene95;Target=yk802c04.3 1 671 -,yk1740f01.3 1 653 -,yk1067h09.3 1 728 -,yk482a5.3 1 300 -,WP 1 305 + III gt csa exon 1409301 1409698 0.997 - . Parent=mRNA137 III gt csa exon 1410797 1410956 1 - . Parent=mRNA137 III gt csa exon 1412055 1412310 1 - . Parent=mRNA137 III gt csa exon 1412537 1412855 1 - . Parent=mRNA137 III gt csa mRNA 1409301 1414108 . - . ID=mRNA138;Parent=gene95;Target=yk802c04.3 1 671 -,yk1740f01.3 1 653 -,yk1403f06.3 1 732 -,yk482a5.3 1 300 -,RP 1 229 +,BP 1 231 +,yk1403f06.5 23 637 +,yk1740f01.5 23 593 +,yk802c04.5 23 538 +,yk71h4.5 1 360 +,yk336a10.5 1 377 +,yk647g12.5 1 380 +,yk625f5.5 1 383 +,yk498e8.5 1 360 +,yk236b3.5 1 360 +,yk624b7.5 1 360 +,yk614c9.5 1 360 +,yk376c11.5 1 373 +,yk596b12.5 1 377 +,yk482a5.5 1 342 +,yk424h6.5 1 348 +,yk91b11.5 1 348 +,yk743g6.5 23 194 + III gt csa exon 1409301 1409698 0.997 - . Parent=mRNA138 III gt csa exon 1410797 1410956 1 - . Parent=mRNA138 III gt csa exon 1412055 1412238 1 - . Parent=mRNA138 III gt csa exon 1413935 1414108 0.986 - . Parent=mRNA138 III gt csa mRNA 1412867 1413610 . - . ID=mRNA139;Parent=gene95;Target=yk1067h09.5 1 744 + III gt csa exon 1412867 1413610 0.995 - . Parent=mRNA139 ### III gt csa gene 1409354 1409706 . + . ID=gene96 III gt csa mRNA 1409354 1409706 . + . ID=mRNA140;Parent=gene96;Target=yk91b11.3 1 335 +,yk71h4.3 1 335 +,yk596b12.3 1 300 +,yk236b3.3 16 300 +,yk743g6.3 1 300 +,yk647g12.3 1 300 +,yk614c9.3 1 300 +,yk376c11.3 1 300 +,yk424h6.3 1 283 +,yk336a10.3 1 283 +,yk498e8.3 1 282 + III gt csa exon 1409354 1409706 0.983 + . Parent=mRNA140 ### III gt csa gene 1415536 1417177 . - . ID=gene97 III gt csa mRNA 1415536 1417177 . - . ID=mRNA141;Parent=gene97;Target=CK583137 1 508 +,BP 1 124 + III gt csa exon 1415536 1415865 1 - . Parent=mRNA141 III gt csa exon 1417000 1417177 1 - . Parent=mRNA141 ### III gt csa gene 1418971 1420424 . + . ID=gene98 III gt csa mRNA 1418971 1420424 . + . ID=mRNA142;Parent=gene98;Target=yk427c9.5 1 375 +,yk1446h08.3 23 168 -,CEESI82R 12 304 +,yk1423c01.3 23 334 -,yk827b03.5 22 336 +,yk1457b06.5 23 366 +,yk573e8.5 11 360 +,yk289b9.5 11 373 +,yk1446h08.5 23 392 +,yk497f5.5 1 377 +,yk1299h01.3 192 594 -,yk1637f01.5 22 432 +,yk1156a09.5 23 434 +,yk1498f01.5 23 435 +,yk1370f10.5 23 435 +,yk1692c10.5 22 434 +,yk1050c09.3 23 436 -,yk1099h06.5 23 435 +,yk1438b02.5 23 436 +,yk1490c07.5 23 435 +,yk1667g11.5 23 436 +,yk1500g09.5 23 436 +,yk1743g04.5 23 436 +,yk1662h02.5 23 437 +,yk1699g12.5 23 438 +,yk809d12.5 23 437 +,yk891h02.5 23 438 +,yk1324a12.5 23 439 +,yk1581b07.5 23 439 +,yk1597e02.5 22 438 +,yk1005d11.5 23 439 +,yk1015e03.3 23 440 -,yk1258f10.5 24 442 +,yk1134e12.5 23 441 +,yk1329c12.5 24 442 +,yk1348g09.5 23 442 +,yk1281b11.5 23 442 +,yk1347e08.5 23 443 +,yk819c03.5 23 443 +,yk1370f08.5 23 447 +,yk1505b08.3 37 462 -,yk1307b12.3 182 609 -,yk1076e08.5 23 454 +,yk1299h06.3 291 730 -,yk1304f10.3 27 468 -,yk1304f10.5 27 484 +,yk763c11.5 23 480 +,yk776c05.5 23 484 +,yk1167g12.5 22 484 +,yk1340a03.5 22 484 +,yk1261h11.3 195 659 -,yk1033d09.5 18 482 +,yk1041d01.5 23 487 +,yk1307e07.3 224 690 -,yk776b07.5 18 504 +,yk1717f07.5 22 512 +,yk1099h06.3 23 517 -,yk1122e01.3 23 519 -,yk1151e05.3 24 518 -,yk1033d09.3 18 513 -,yk1200b10.3 22 517 -,yk1445a08.3 218 714 -,yk1499d03.3 226 722 -,yk1508b06.3 222 718 -,yk1523g04.3 78 575 -,yk1701c04.3 85 583 -,yk1276a07.3 229 729 -,yk1566c03.3 23 522 -,yk1534b01.3 227 726 -,yk1559d06.3 140 640 -,yk1597e02.3 22 523 -,yk1420g05.3 23 524 -,yk1476g05.3 224 725 -,yk1502f07.3 203 704 -,yk1526c08.3 102 605 -,yk1564e02.3 186 690 -,yk1581b07.3 23 525 -,yk1411e02.3 22 524 -,yk1460g06.3 191 693 -,yk1490c07.3 23 524 -,yk1459c06.3 212 714 -,yk1468c03.3 123 625 -,yk1662h02.3 23 525 -,yk1706f01.3 23 525 -,yk1730a09.3 23 525 -,yk1751g08.3 222 724 -,yk1450f03.3 220 723 -,yk1498f01.3 23 526 -,yk1347e08.3 23 526 -,yk1281f04.3 23 528 -,yk1026f10.3 25 529 -,yk1326f10.3 145 649 -,yk776b07.3 18 522 -,yk819c03.3 23 527 -,yk1363d08.3 23 528 -,yk1141a10.3 23 531 -,yk891h02.3 23 531 -,yk1079e02.3 23 530 -,yk1142c02.3 192 699 -,yk827b03.3 22 529 -,yk1041d01.3 23 532 -,yk1022f05.3 188 696 -,yk1161d09.3 23 531 -,yk1175b05.3 23 531 -,yk1229f01.3 223 731 -,yk776c05.3 23 531 -,yk1258a02.3 23 533 -,yk1258f10.3 24 533 -,yk1213d11.3 257 767 -,yk1021b10.3 23 532 -,yk1212f06.3 183 692 -,yk1338c06.3 23 532 -,yk1041a09.3 233 742 -,yk1076e08.3 23 532 -,yk1134e12.3 23 532 -,yk1156a09.3 23 532 -,yk1167g12.3 22 531 -,yk1217d06.3 183 692 -,yk1238d11.3 23 532 -,yk1239g07.3 223 732 -,yk1261c01.3 218 727 -,yk1266c12.3 23 532 -,yk1266e05.3 23 532 -,yk1281b07.3 23 532 -,yk1289h06.3 101 610 -,yk1309b05.3 224 733 -,yk1382h02.5 23 532 +,yk1329c12.3 24 537 -,yk1063g09.3 154 665 -,yk1089d01.3 23 533 -,yk1667g11.3 23 534 -,yk1500g09.3 23 534 -,yk1653c08.3 23 534 -,yk1370f08.3 23 535 -,yk1370f10.3 23 535 -,yk1629g01.3 23 535 -,yk1743g04.3 23 536 -,yk1239f04.3 23 538 -,yk1717f07.3 22 538 -,yk1274f02.3 23 540 -,yk1223a01.3 150 668 -,yk812e07.5 23 541 +,yk812e07.3 23 540 -,yk1340a03.3 22 541 -,yk1021b10.5 23 543 +,yk1514e03.3 184 709 -,yk1338c06.5 23 553 +,yk1238d11.5 23 553 +,yk1026f10.5 25 554 +,yk1363d08.5 23 552 +,yk1274f02.5 23 552 +,yk1420g05.5 23 552 +,yk1566c03.5 23 552 +,yk1629g01.5 23 552 +,yk1706f01.5 23 552 +,yk1730a09.5 23 552 +,yk1122e01.5 23 552 +,yk1141a10.5 23 552 +,yk1151e05.5 24 553 +,yk1161d09.5 23 552 +,yk1175b05.5 23 552 +,yk1281f04.5 23 552 +,yk1079e02.5 23 551 +,yk1310e07.5 23 555 +,yk1089d01.5 23 572 +,yk1527c07.5 23 589 +,yk1344e01.3 19 587 -,yk761f11.5 17 614 +,yk809d12.3 23 628 -,yk1310e07.3 23 628 -,yk470d10.5 1 376 +,yk1015e03.5 1 388 +,yk110a8.5 1 360 +,yk114f3.5 1 360 +,yk78a9.5 1 383 +,yk60a2.5 1 330 +,yk677a10.5 1 373 +,yk634d3.5 1 374 +,yk389a2.5 1 376 +,yk591g5.5 1 375 +,yk247h2.5 1 244 +,yk92d5.5 1 322 +,yk62e4.5 1 330 +,yk82d9.5 1 352 +,yk484e3.5 1 367 +,yk342c11.5 1 371 +,yk210g1.5 1 371 +,yk199b1.5 1 372 +,yk609a6.5 1 372 +,yk602g4.5 1 374 +,yk472b4.5 1 376 +,yk532b2.5 1 376 +,yk628h8.5 1 384 +,yk470d10.3 1 300 -,yk67e2.5 1 360 +,yk495b4.5 1 360 +,yk515d3.5 1 367 +,yk586d10.5 1 377 +,yk631d3.5 1 383 +,yk77e2.5 1 385 +,yk573e6.5 1 360 +,yk561d9.5 1 376 +,yk487f9.5 1 360 +,yk491d2.5 1 360 +,yk418d7.5 1 373 +,yk391d4.5 1 377 +,yk281f9.5 1 376 +,yk612a2.5 1 360 +,yk667h3.5 1 378 +,yk103f11.5 1 330 +,yk82d4.5 1 330 +,yk502f2.5 1 370 +,yk399b1.5 1 377 +,yk1388g06.3 1 499 -,yk1388g06.5 1 513 +,yk255e5.5 1 360 +,yk1230h08.5 1 172 +,yk1281b07.5 1 174 +,CK576705 1 199 +,BP 1 117 +,RP 1 117 +,yk393a4.5 1 360 +,CK575334 1 379 +,CK579527 1 498 +,yk1411e02.5 1 103 +,yk568f5.5 1 374 +,yk612e4.5 1 360 +,yk1239f04.5 1 492 +,yk1050c09.5 1 505 +,yk591h11.5 1 360 +,yk635a9.5 1 360 +,yk639e2.5 1 360 +,yk654d2.5 1 382 +,yk648e7.5 1 360 +,yk486b11.5 1 360 +,yk650f12.5 1 360 +,yk1012b08.3 1 317 -,yk1123h12.3 1 463 -,yk579f1.5 1 360 +,yk752f11.5 1 326 +,CEESE35F 1 285 +,CEESP60F 1 283 +,yk1032a02.5 53 422 +,yk633a4.5 1 382 +,yk1299c02.5 1 380 +,yk361d12.5 1 375 +,yk594f10.5 1 356 +,yk847c05.5 1 353 +,CEESB14F 1 300 +,CEESY61FB 1 319 +,yk1382d08.3 1 222 +,yk621b1.3 1 300 +,yk739c4.3 1 300 +,yk597g10.3 1 300 +,yk421a11.3 1 292 +,yk447b3.3 1 300 +,yk599b8.3 1 300 +,yk639a10.3 1 300 +,yk555f9.3 1 300 +,yk615c7.3 1 240 +,yk525g4.3 1 240 +,yk556a10.5 1 365 +,yk1475h10.3 1 136 + III gt csa exon 1418971 1418973 0.667 + . Parent=mRNA142 III gt csa exon 1419186 1419251 1 + . Parent=mRNA142 III gt csa exon 1419321 1420424 0.99 + . Parent=mRNA142 III gt csa mRNA 1419094 1420424 . + . ID=mRNA143;Parent=gene98;Target=yk1587h06.3 135 661 -,yk1212c10.5 1 546 +,yk64h2.5 1 341 +,yk371c5.5 1 370 +,yk596e1.5 1 374 +,yk654c2.5 1 376 +,yk474d11.5 1 377 +,yk1005d11.3 1 502 -,yk1221a01.3 1 512 -,yk1446h08.3 23 168 -,CEESI82R 12 304 +,yk1423c01.3 23 334 -,yk827b03.5 22 336 +,yk1457b06.5 23 366 +,yk573e8.5 11 360 +,yk289b9.5 11 373 +,yk1446h08.5 23 392 +,yk497f5.5 1 377 +,yk1299h01.3 192 594 -,yk1637f01.5 22 432 +,yk1156a09.5 23 434 +,yk1498f01.5 23 435 +,yk1370f10.5 23 435 +,yk1692c10.5 22 434 +,yk1050c09.3 23 436 -,yk1099h06.5 23 435 +,yk1438b02.5 23 436 +,yk1490c07.5 23 435 +,yk1667g11.5 23 436 +,yk1500g09.5 23 436 +,yk1743g04.5 23 436 +,yk1662h02.5 23 437 +,yk1699g12.5 23 438 +,yk809d12.5 23 437 +,yk891h02.5 23 438 +,yk1324a12.5 23 439 +,yk1581b07.5 23 439 +,yk1597e02.5 22 438 +,yk1005d11.5 23 439 +,yk1015e03.3 23 440 -,yk1258f10.5 24 442 +,yk1134e12.5 23 441 +,yk1329c12.5 24 442 +,yk1348g09.5 23 442 +,yk1281b11.5 23 442 +,yk1347e08.5 23 443 +,yk819c03.5 23 443 +,yk1370f08.5 23 447 +,yk1505b08.3 37 462 -,yk1307b12.3 182 609 -,yk1076e08.5 23 454 +,yk1299h06.3 291 730 -,yk1304f10.3 27 468 -,yk1304f10.5 27 484 +,yk763c11.5 23 480 +,yk776c05.5 23 484 +,yk1167g12.5 22 484 +,yk1340a03.5 22 484 +,yk1261h11.3 195 659 -,yk1033d09.5 18 482 +,yk1041d01.5 23 487 +,yk1307e07.3 224 690 -,yk776b07.5 18 504 +,yk1717f07.5 22 512 +,yk1099h06.3 23 517 -,yk1122e01.3 23 519 -,yk1151e05.3 24 518 -,yk1033d09.3 18 513 -,yk1200b10.3 22 517 -,yk1445a08.3 218 714 -,yk1499d03.3 226 722 -,yk1508b06.3 222 718 -,yk1523g04.3 78 575 -,yk1701c04.3 85 583 -,yk1276a07.3 229 729 -,yk1566c03.3 23 522 -,yk1534b01.3 227 726 -,yk1559d06.3 140 640 -,yk1597e02.3 22 523 -,yk1420g05.3 23 524 -,yk1476g05.3 224 725 -,yk1502f07.3 203 704 -,yk1526c08.3 102 605 -,yk1564e02.3 186 690 -,yk1581b07.3 23 525 -,yk1411e02.3 22 524 -,yk1460g06.3 191 693 -,yk1490c07.3 23 524 -,yk1459c06.3 212 714 -,yk1468c03.3 123 625 -,yk1662h02.3 23 525 -,yk1706f01.3 23 525 -,yk1730a09.3 23 525 -,yk1751g08.3 222 724 -,yk1450f03.3 220 723 -,yk1498f01.3 23 526 -,yk1347e08.3 23 526 -,yk1281f04.3 23 528 -,yk1026f10.3 25 529 -,yk1326f10.3 145 649 -,yk776b07.3 18 522 -,yk819c03.3 23 527 -,yk1363d08.3 23 528 -,yk1141a10.3 23 531 -,yk891h02.3 23 531 -,yk1079e02.3 23 530 -,yk1142c02.3 192 699 -,yk827b03.3 22 529 -,yk1041d01.3 23 532 -,yk1022f05.3 188 696 -,yk1161d09.3 23 531 -,yk1175b05.3 23 531 -,yk1229f01.3 223 731 -,yk776c05.3 23 531 -,yk1258a02.3 23 533 -,yk1258f10.3 24 533 -,yk1213d11.3 257 767 -,yk1021b10.3 23 532 -,yk1212f06.3 183 692 -,yk1338c06.3 23 532 -,yk1041a09.3 233 742 -,yk1076e08.3 23 532 -,yk1134e12.3 23 532 -,yk1156a09.3 23 532 -,yk1167g12.3 22 531 -,yk1217d06.3 183 692 -,yk1238d11.3 23 532 -,yk1239g07.3 223 732 -,yk1261c01.3 218 727 -,yk1266c12.3 23 532 -,yk1266e05.3 23 532 -,yk1281b07.3 23 532 -,yk1289h06.3 101 610 -,yk1309b05.3 224 733 -,yk1382h02.5 23 532 +,yk1329c12.3 24 537 -,yk1063g09.3 154 665 -,yk1089d01.3 23 533 -,yk1667g11.3 23 534 -,yk1500g09.3 23 534 -,yk1653c08.3 23 534 -,yk1370f08.3 23 535 -,yk1370f10.3 23 535 -,yk1629g01.3 23 535 -,yk1743g04.3 23 536 -,yk1239f04.3 23 538 -,yk1717f07.3 22 538 -,yk1274f02.3 23 540 -,yk1223a01.3 150 668 -,yk812e07.5 23 541 +,yk812e07.3 23 540 -,yk1340a03.3 22 541 -,yk1021b10.5 23 543 +,yk1514e03.3 184 709 -,yk1338c06.5 23 553 +,yk1238d11.5 23 553 +,yk1026f10.5 25 554 +,yk1363d08.5 23 552 +,yk1274f02.5 23 552 +,yk1420g05.5 23 552 +,yk1566c03.5 23 552 +,yk1629g01.5 23 552 +,yk1706f01.5 23 552 +,yk1730a09.5 23 552 +,yk1122e01.5 23 552 +,yk1141a10.5 23 552 +,yk1151e05.5 24 553 +,yk1161d09.5 23 552 +,yk1175b05.5 23 552 +,yk1281f04.5 23 552 +,yk1079e02.5 23 551 +,yk1310e07.5 23 555 +,yk1089d01.5 23 572 +,yk1527c07.5 23 589 +,yk1344e01.3 19 587 -,yk761f11.5 17 614 +,yk809d12.3 23 628 -,yk1310e07.3 23 628 -,yk470d10.5 1 376 +,yk1015e03.5 1 388 +,yk110a8.5 1 360 +,yk114f3.5 1 360 +,yk78a9.5 1 383 +,yk60a2.5 1 330 +,yk677a10.5 1 373 +,yk634d3.5 1 374 +,yk389a2.5 1 376 +,yk591g5.5 1 375 +,yk247h2.5 1 244 +,yk92d5.5 1 322 +,yk62e4.5 1 330 +,yk82d9.5 1 352 +,yk484e3.5 1 367 +,yk342c11.5 1 371 +,yk210g1.5 1 371 +,yk199b1.5 1 372 +,yk609a6.5 1 372 +,yk602g4.5 1 374 +,yk472b4.5 1 376 +,yk532b2.5 1 376 +,yk628h8.5 1 384 +,yk470d10.3 1 300 -,yk67e2.5 1 360 +,yk495b4.5 1 360 +,yk515d3.5 1 367 +,yk586d10.5 1 377 +,yk631d3.5 1 383 +,yk77e2.5 1 385 +,yk573e6.5 1 360 +,yk561d9.5 1 376 +,yk487f9.5 1 360 +,yk491d2.5 1 360 +,yk418d7.5 1 373 +,yk391d4.5 1 377 +,yk281f9.5 1 376 +,yk612a2.5 1 360 +,yk667h3.5 1 378 +,yk103f11.5 1 330 +,yk82d4.5 1 330 +,yk502f2.5 1 370 +,yk399b1.5 1 377 +,yk1388g06.3 1 499 -,yk1388g06.5 1 513 +,yk255e5.5 1 360 +,yk1230h08.5 1 172 +,yk1281b07.5 1 174 +,CK576705 1 199 +,BP 1 117 +,RP 1 117 +,yk393a4.5 1 360 +,CK575334 1 379 +,CK579527 1 498 +,yk1411e02.5 1 103 +,yk568f5.5 1 374 +,yk612e4.5 1 360 +,yk1239f04.5 1 492 +,yk1050c09.5 1 505 +,yk591h11.5 1 360 +,yk635a9.5 1 360 +,yk639e2.5 1 360 +,yk654d2.5 1 382 +,yk648e7.5 1 360 +,yk486b11.5 1 360 +,yk650f12.5 1 360 +,yk1012b08.3 1 317 -,yk1123h12.3 1 463 -,yk579f1.5 1 360 +,yk752f11.5 1 326 +,CEESE35F 1 285 +,CEESP60F 1 283 +,yk1032a02.5 53 422 +,yk633a4.5 1 382 +,yk1299c02.5 1 380 +,yk361d12.5 1 375 +,yk594f10.5 1 356 +,yk847c05.5 1 353 +,CEESB14F 1 300 +,CEESY61FB 1 319 +,yk1382d08.3 1 222 +,yk621b1.3 1 300 +,yk739c4.3 1 300 +,yk597g10.3 1 300 +,yk421a11.3 1 292 +,yk447b3.3 1 300 +,yk599b8.3 1 300 +,yk639a10.3 1 300 +,yk555f9.3 1 300 +,yk615c7.3 1 240 +,yk525g4.3 1 240 +,yk556a10.5 1 365 +,yk1475h10.3 1 136 + III gt csa exon 1419094 1419103 1 + . Parent=mRNA143 III gt csa exon 1419166 1419251 0.919 + . Parent=mRNA143 III gt csa exon 1419321 1420424 0.99 + . Parent=mRNA143 III gt csa mRNA 1419138 1420087 . + . ID=mRNA144;Parent=gene98;Target=yk844c03.3 152 710 -,yk1072g09.3 120 674 -,yk1344a02.3 179 720 -,yk1398d04.3 114 643 -,yk1119f04.3 190 729 -,yk1396f08.3 94 712 -,yk865b04.3 146 680 -,yk1339f10.3 103 734 -,yk1212c10.5 1 546 +,yk64h2.5 1 341 +,yk371c5.5 1 370 +,yk596e1.5 1 374 +,yk654c2.5 1 376 +,yk474d11.5 1 377 +,yk1005d11.3 1 502 -,yk1221a01.3 1 512 -,yk1446h08.3 23 168 -,CEESI82R 12 304 +,yk1423c01.3 23 334 -,yk827b03.5 22 336 +,yk1457b06.5 23 366 +,yk573e8.5 11 360 +,yk289b9.5 11 373 +,yk1446h08.5 23 392 +,yk497f5.5 1 377 +,yk1299h01.3 192 594 -,yk1637f01.5 22 432 +,yk1156a09.5 23 434 +,yk1498f01.5 23 435 +,yk1370f10.5 23 435 +,yk1692c10.5 22 434 +,yk1050c09.3 23 436 -,yk1099h06.5 23 435 +,yk1438b02.5 23 436 +,yk1490c07.5 23 435 +,yk1667g11.5 23 436 +,yk1500g09.5 23 436 +,yk1743g04.5 23 436 +,yk1662h02.5 23 437 +,yk1699g12.5 23 438 +,yk809d12.5 23 437 +,yk891h02.5 23 438 +,yk1324a12.5 23 439 +,yk1581b07.5 23 439 +,yk1597e02.5 22 438 +,yk1005d11.5 23 439 +,yk1015e03.3 23 440 -,yk1258f10.5 24 442 +,yk1134e12.5 23 441 +,yk1329c12.5 24 442 +,yk1348g09.5 23 442 +,yk1281b11.5 23 442 +,yk1347e08.5 23 443 +,yk819c03.5 23 443 +,yk1370f08.5 23 447 +,yk1505b08.3 37 462 -,yk1307b12.3 182 609 -,yk1076e08.5 23 454 +,yk1299h06.3 291 730 -,yk1304f10.3 27 468 -,yk1304f10.5 27 484 +,yk763c11.5 23 480 +,yk776c05.5 23 484 +,yk1167g12.5 22 484 +,yk1340a03.5 22 484 +,yk1261h11.3 195 659 -,yk1033d09.5 18 482 +,yk1041d01.5 23 487 +,yk1307e07.3 224 690 -,yk776b07.5 18 504 +,yk1717f07.5 22 512 +,yk1099h06.3 23 517 -,yk1122e01.3 23 519 -,yk1151e05.3 24 518 -,yk1033d09.3 18 513 -,yk1200b10.3 22 517 -,yk1445a08.3 218 714 -,yk1499d03.3 226 722 -,yk1508b06.3 222 718 -,yk1523g04.3 78 575 -,yk1701c04.3 85 583 -,yk1276a07.3 229 729 -,yk1566c03.3 23 522 -,yk1534b01.3 227 726 -,yk1559d06.3 140 640 -,yk1597e02.3 22 523 -,yk1420g05.3 23 524 -,yk1476g05.3 224 725 -,yk1502f07.3 203 704 -,yk1526c08.3 102 605 -,yk1564e02.3 186 690 -,yk1581b07.3 23 525 -,yk1411e02.3 22 524 -,yk1460g06.3 191 693 -,yk1490c07.3 23 524 -,yk1459c06.3 212 714 -,yk1468c03.3 123 625 -,yk1662h02.3 23 525 -,yk1706f01.3 23 525 -,yk1730a09.3 23 525 -,yk1751g08.3 222 724 -,yk1450f03.3 220 723 -,yk1498f01.3 23 526 -,yk1347e08.3 23 526 -,yk1281f04.3 23 528 -,yk1026f10.3 25 529 -,yk1326f10.3 145 649 -,yk776b07.3 18 522 -,yk819c03.3 23 527 -,yk1363d08.3 23 528 -,yk1141a10.3 23 531 -,yk891h02.3 23 531 -,yk1079e02.3 23 530 -,yk1142c02.3 192 699 -,yk827b03.3 22 529 -,yk1041d01.3 23 532 -,yk1022f05.3 188 696 -,yk1161d09.3 23 531 -,yk1175b05.3 23 531 -,yk1229f01.3 223 731 -,yk776c05.3 23 531 -,yk1258a02.3 23 533 -,yk1258f10.3 24 533 -,yk1213d11.3 257 767 -,yk1021b10.3 23 532 -,yk1212f06.3 183 692 -,yk1338c06.3 23 532 -,yk1041a09.3 233 742 -,yk1076e08.3 23 532 -,yk1134e12.3 23 532 -,yk1156a09.3 23 532 -,yk1167g12.3 22 531 -,yk1217d06.3 183 692 -,yk1238d11.3 23 532 -,yk1239g07.3 223 732 -,yk1261c01.3 218 727 -,yk1266c12.3 23 532 -,yk1266e05.3 23 532 -,yk1281b07.3 23 532 -,yk1289h06.3 101 610 -,yk1309b05.3 224 733 -,yk1382h02.5 23 532 +,yk1329c12.3 24 537 -,yk1063g09.3 154 665 -,yk1089d01.3 23 533 -,yk1667g11.3 23 534 -,yk1500g09.3 23 534 -,yk1653c08.3 23 534 -,yk1370f08.3 23 535 -,yk1370f10.3 23 535 -,yk1629g01.3 23 535 -,yk1743g04.3 23 536 -,yk1239f04.3 23 538 -,yk1717f07.3 22 538 -,yk1274f02.3 23 540 -,yk1223a01.3 150 668 -,yk812e07.5 23 541 +,yk812e07.3 23 540 -,yk1340a03.3 22 541 -,yk1021b10.5 23 543 +,yk1514e03.3 184 709 -,yk1338c06.5 23 553 +,yk1238d11.5 23 553 +,yk1026f10.5 25 554 +,yk1363d08.5 23 552 +,yk1274f02.5 23 552 +,yk1420g05.5 23 552 +,yk1566c03.5 23 552 +,yk1629g01.5 23 552 +,yk1706f01.5 23 552 +,yk1730a09.5 23 552 +,yk1122e01.5 23 552 +,yk1141a10.5 23 552 +,yk1151e05.5 24 553 +,yk1161d09.5 23 552 +,yk1175b05.5 23 552 +,yk1281f04.5 23 552 +,yk1079e02.5 23 551 +,yk1310e07.5 23 555 +,yk1089d01.5 23 572 +,yk1527c07.5 23 589 +,yk1344e01.3 19 587 -,yk761f11.5 17 614 +,yk809d12.3 23 628 -,yk1310e07.3 23 628 -,yk757f11.5 17 635 +,yk470d10.5 1 376 +,yk1015e03.5 1 388 +,yk110a8.5 1 360 +,yk114f3.5 1 360 +,yk78a9.5 1 383 +,yk60a2.5 1 330 +,yk677a10.5 1 373 +,yk634d3.5 1 374 +,yk389a2.5 1 376 +,yk591g5.5 1 375 +,yk247h2.5 1 244 +,yk92d5.5 1 322 +,yk62e4.5 1 330 +,yk82d9.5 1 352 +,yk484e3.5 1 367 +,yk342c11.5 1 371 +,yk210g1.5 1 371 +,yk199b1.5 1 372 +,yk609a6.5 1 372 +,yk602g4.5 1 374 +,yk472b4.5 1 376 +,yk532b2.5 1 376 +,yk628h8.5 1 384 +,yk470d10.3 1 300 -,yk67e2.5 1 360 +,yk495b4.5 1 360 +,yk515d3.5 1 367 +,yk586d10.5 1 377 +,yk631d3.5 1 383 +,yk77e2.5 1 385 +,yk573e6.5 1 360 +,yk561d9.5 1 376 +,yk487f9.5 1 360 +,yk491d2.5 1 360 +,yk418d7.5 1 373 +,yk391d4.5 1 377 +,yk281f9.5 1 376 +,yk612a2.5 1 360 +,yk667h3.5 1 378 +,yk103f11.5 1 330 +,yk82d4.5 1 330 +,yk502f2.5 1 370 +,yk399b1.5 1 377 +,yk1388g06.3 1 499 -,yk1388g06.5 1 513 +,yk255e5.5 1 360 +,yk1230h08.5 1 172 +,yk1281b07.5 1 174 +,CK576705 1 199 +,BP 1 117 +,RP 1 117 +,yk393a4.5 1 360 +,CK575334 1 379 +,CK579527 1 498 +,yk1411e02.5 1 103 +,yk568f5.5 1 374 +,yk612e4.5 1 360 +,yk1239f04.5 1 492 +,yk1050c09.5 1 505 +,yk591h11.5 1 360 +,yk635a9.5 1 360 +,yk639e2.5 1 360 +,yk654d2.5 1 382 +,yk648e7.5 1 360 +,yk486b11.5 1 360 +,yk650f12.5 1 360 +,yk1012b08.3 1 317 -,yk1123h12.3 1 463 -,yk579f1.5 1 360 +,yk752f11.5 1 326 +,CEESE35F 1 285 +,CEESP60F 1 283 +,yk1032a02.5 53 422 +,yk633a4.5 1 382 +,yk1299c02.5 1 380 +,yk361d12.5 1 375 +,yk594f10.5 1 356 +,yk847c05.5 1 353 + III gt csa exon 1419138 1419251 0.842 + . Parent=mRNA144 III gt csa exon 1419321 1419863 0.995 + . Parent=mRNA144 III gt csa exon 1420079 1420087 0.667 + . Parent=mRNA144 III gt csa mRNA 1419138 1420087 . + . ID=mRNA145;Parent=gene98;Target=yk844c03.3 152 710 -,yk1072g09.3 120 674 -,yk1344a02.3 179 720 -,yk1398d04.3 114 643 -,yk1119f04.3 190 729 -,yk865b04.3 146 680 -,yk1212c10.5 1 546 +,yk64h2.5 1 341 +,yk371c5.5 1 370 +,yk596e1.5 1 374 +,yk654c2.5 1 376 +,yk474d11.5 1 377 +,yk1005d11.3 1 502 -,yk1221a01.3 1 512 -,yk1446h08.3 23 168 -,CEESI82R 12 304 +,yk1423c01.3 23 334 -,yk827b03.5 22 336 +,yk1457b06.5 23 366 +,yk573e8.5 11 360 +,yk289b9.5 11 373 +,yk1446h08.5 23 392 +,yk497f5.5 1 377 +,yk1299h01.3 192 594 -,yk1637f01.5 22 432 +,yk1156a09.5 23 434 +,yk1498f01.5 23 435 +,yk1370f10.5 23 435 +,yk1692c10.5 22 434 +,yk1050c09.3 23 436 -,yk1099h06.5 23 435 +,yk1438b02.5 23 436 +,yk1490c07.5 23 435 +,yk1667g11.5 23 436 +,yk1500g09.5 23 436 +,yk1743g04.5 23 436 +,yk1662h02.5 23 437 +,yk1699g12.5 23 438 +,yk809d12.5 23 437 +,yk891h02.5 23 438 +,yk1324a12.5 23 439 +,yk1581b07.5 23 439 +,yk1597e02.5 22 438 +,yk1005d11.5 23 439 +,yk1015e03.3 23 440 -,yk1258f10.5 24 442 +,yk1134e12.5 23 441 +,yk1329c12.5 24 442 +,yk1348g09.5 23 442 +,yk1281b11.5 23 442 +,yk1347e08.5 23 443 +,yk819c03.5 23 443 +,yk1370f08.5 23 447 +,yk1505b08.3 37 462 -,yk1307b12.3 182 609 -,yk1076e08.5 23 454 +,yk1299h06.3 291 730 -,yk1304f10.3 27 468 -,yk1304f10.5 27 484 +,yk763c11.5 23 480 +,yk776c05.5 23 484 +,yk1167g12.5 22 484 +,yk1340a03.5 22 484 +,yk1261h11.3 195 659 -,yk1033d09.5 18 482 +,yk1041d01.5 23 487 +,yk1307e07.3 224 690 -,yk776b07.5 18 504 +,yk1717f07.5 22 512 +,yk1099h06.3 23 517 -,yk1122e01.3 23 519 -,yk1151e05.3 24 518 -,yk1033d09.3 18 513 -,yk1200b10.3 22 517 -,yk1445a08.3 218 714 -,yk1499d03.3 226 722 -,yk1508b06.3 222 718 -,yk1523g04.3 78 575 -,yk1701c04.3 85 583 -,yk1276a07.3 229 729 -,yk1566c03.3 23 522 -,yk1534b01.3 227 726 -,yk1559d06.3 140 640 -,yk1597e02.3 22 523 -,yk1420g05.3 23 524 -,yk1476g05.3 224 725 -,yk1502f07.3 203 704 -,yk1526c08.3 102 605 -,yk1564e02.3 186 690 -,yk1581b07.3 23 525 -,yk1411e02.3 22 524 -,yk1460g06.3 191 693 -,yk1490c07.3 23 524 -,yk1459c06.3 212 714 -,yk1468c03.3 123 625 -,yk1662h02.3 23 525 -,yk1706f01.3 23 525 -,yk1730a09.3 23 525 -,yk1751g08.3 222 724 -,yk1450f03.3 220 723 -,yk1498f01.3 23 526 -,yk1347e08.3 23 526 -,yk1281f04.3 23 528 -,yk1026f10.3 25 529 -,yk1326f10.3 145 649 -,yk776b07.3 18 522 -,yk819c03.3 23 527 -,yk1363d08.3 23 528 -,yk1141a10.3 23 531 -,yk891h02.3 23 531 -,yk1079e02.3 23 530 -,yk1142c02.3 192 699 -,yk827b03.3 22 529 -,yk1041d01.3 23 532 -,yk1022f05.3 188 696 -,yk1161d09.3 23 531 -,yk1175b05.3 23 531 -,yk1229f01.3 223 731 -,yk776c05.3 23 531 -,yk1258a02.3 23 533 -,yk1258f10.3 24 533 -,yk1213d11.3 257 767 -,yk1021b10.3 23 532 -,yk1212f06.3 183 692 -,yk1338c06.3 23 532 -,yk1041a09.3 233 742 -,yk1076e08.3 23 532 -,yk1134e12.3 23 532 -,yk1156a09.3 23 532 -,yk1167g12.3 22 531 -,yk1217d06.3 183 692 -,yk1238d11.3 23 532 -,yk1239g07.3 223 732 -,yk1261c01.3 218 727 -,yk1266c12.3 23 532 -,yk1266e05.3 23 532 -,yk1281b07.3 23 532 -,yk1289h06.3 101 610 -,yk1309b05.3 224 733 -,yk1382h02.5 23 532 +,yk1329c12.3 24 537 -,yk1063g09.3 154 665 -,yk1089d01.3 23 533 -,yk1667g11.3 23 534 -,yk1500g09.3 23 534 -,yk1653c08.3 23 534 -,yk1370f08.3 23 535 -,yk1370f10.3 23 535 -,yk1629g01.3 23 535 -,yk1743g04.3 23 536 -,yk1239f04.3 23 538 -,yk1717f07.3 22 538 -,yk1274f02.3 23 540 -,yk1223a01.3 150 668 -,yk812e07.5 23 541 +,yk812e07.3 23 540 -,yk1340a03.3 22 541 -,yk1021b10.5 23 543 +,yk1514e03.3 184 709 -,yk1338c06.5 23 553 +,yk1238d11.5 23 553 +,yk1026f10.5 25 554 +,yk1363d08.5 23 552 +,yk1274f02.5 23 552 +,yk1420g05.5 23 552 +,yk1566c03.5 23 552 +,yk1629g01.5 23 552 +,yk1706f01.5 23 552 +,yk1730a09.5 23 552 +,yk1122e01.5 23 552 +,yk1141a10.5 23 552 +,yk1151e05.5 24 553 +,yk1161d09.5 23 552 +,yk1175b05.5 23 552 +,yk1281f04.5 23 552 +,yk1079e02.5 23 551 +,yk1258a02.5 23 558 +,yk470d10.5 1 376 +,yk1015e03.5 1 388 +,yk110a8.5 1 360 +,yk114f3.5 1 360 +,yk78a9.5 1 383 +,yk60a2.5 1 330 +,yk677a10.5 1 373 +,yk634d3.5 1 374 +,yk389a2.5 1 376 +,yk591g5.5 1 375 +,yk247h2.5 1 244 +,yk92d5.5 1 322 +,yk62e4.5 1 330 +,yk82d9.5 1 352 +,yk484e3.5 1 367 +,yk342c11.5 1 371 +,yk210g1.5 1 371 +,yk199b1.5 1 372 +,yk609a6.5 1 372 +,yk602g4.5 1 374 +,yk472b4.5 1 376 +,yk532b2.5 1 376 +,yk628h8.5 1 384 +,yk470d10.3 1 300 -,yk67e2.5 1 360 +,yk495b4.5 1 360 +,yk515d3.5 1 367 +,yk586d10.5 1 377 +,yk631d3.5 1 383 +,yk77e2.5 1 385 +,yk573e6.5 1 360 +,yk561d9.5 1 376 +,yk487f9.5 1 360 +,yk491d2.5 1 360 +,yk418d7.5 1 373 +,yk391d4.5 1 377 +,yk281f9.5 1 376 +,yk612a2.5 1 360 +,yk667h3.5 1 378 +,yk103f11.5 1 330 +,yk82d4.5 1 330 +,yk502f2.5 1 370 +,yk399b1.5 1 377 +,yk1388g06.3 1 499 -,yk1388g06.5 1 513 +,yk255e5.5 1 360 +,yk1230h08.5 1 172 +,yk1281b07.5 1 174 +,CK576705 1 199 +,BP 1 117 +,RP 1 117 +,yk393a4.5 1 360 +,CK575334 1 379 +,CK579527 1 498 +,yk1411e02.5 1 103 +,yk568f5.5 1 374 +,yk612e4.5 1 360 +,yk1239f04.5 1 492 +,yk1050c09.5 1 505 +,yk591h11.5 1 360 +,yk635a9.5 1 360 +,yk639e2.5 1 360 +,yk654d2.5 1 382 +,yk648e7.5 1 360 +,yk486b11.5 1 360 +,yk650f12.5 1 360 +,yk1012b08.3 1 317 -,yk1123h12.3 1 463 -,yk579f1.5 1 360 +,yk752f11.5 1 326 +,CEESE35F 1 285 +,CEESP60F 1 283 +,yk1032a02.5 53 422 +,yk633a4.5 1 382 +,yk1195a11.5 1 417 +,yk1299c02.5 1 380 +,yk1133g01.5 1 368 +,yk594f10.5 1 356 +,yk847c05.5 1 353 + III gt csa exon 1419138 1419251 0.842 + . Parent=mRNA145 III gt csa exon 1419321 1419783 1 + . Parent=mRNA145 III gt csa exon 1420079 1420087 0.778 + . Parent=mRNA145 III gt csa mRNA 1419138 1420424 . + . ID=mRNA146;Parent=gene98;Target=yk844c03.3 152 710 -,yk1072g09.3 120 674 -,yk1344a02.3 179 720 -,yk1398d04.3 114 643 -,yk1119f04.3 190 729 -,yk1396f08.3 94 712 -,yk865b04.3 146 680 -,yk1339f10.3 103 734 -,yk1212c10.5 1 546 +,yk64h2.5 1 341 +,yk371c5.5 1 370 +,yk596e1.5 1 374 +,yk654c2.5 1 376 +,yk474d11.5 1 377 +,yk1005d11.3 1 502 -,yk1221a01.3 1 512 -,yk1446h08.3 23 168 -,CEESI82R 12 304 +,yk1423c01.3 23 334 -,yk827b03.5 22 336 +,yk1457b06.5 23 366 +,yk573e8.5 11 360 +,yk289b9.5 11 373 +,yk1446h08.5 23 392 +,yk497f5.5 1 377 +,yk1299h01.3 192 594 -,yk1637f01.5 22 432 +,yk1156a09.5 23 434 +,yk1498f01.5 23 435 +,yk1370f10.5 23 435 +,yk1692c10.5 22 434 +,yk1050c09.3 23 436 -,yk1099h06.5 23 435 +,yk1438b02.5 23 436 +,yk1490c07.5 23 435 +,yk1667g11.5 23 436 +,yk1500g09.5 23 436 +,yk1743g04.5 23 436 +,yk1662h02.5 23 437 +,yk1699g12.5 23 438 +,yk809d12.5 23 437 +,yk891h02.5 23 438 +,yk1324a12.5 23 439 +,yk1581b07.5 23 439 +,yk1597e02.5 22 438 +,yk1005d11.5 23 439 +,yk1015e03.3 23 440 -,yk1258f10.5 24 442 +,yk1134e12.5 23 441 +,yk1329c12.5 24 442 +,yk1348g09.5 23 442 +,yk1281b11.5 23 442 +,yk1347e08.5 23 443 +,yk819c03.5 23 443 +,yk1370f08.5 23 447 +,yk1505b08.3 37 462 -,yk1307b12.3 182 609 -,yk1076e08.5 23 454 +,yk1299h06.3 291 730 -,yk1304f10.3 27 468 -,yk1304f10.5 27 484 +,yk763c11.5 23 480 +,yk776c05.5 23 484 +,yk1167g12.5 22 484 +,yk1340a03.5 22 484 +,yk1261h11.3 195 659 -,yk1033d09.5 18 482 +,yk1041d01.5 23 487 +,yk1307e07.3 224 690 -,yk776b07.5 18 504 +,yk1717f07.5 22 512 +,yk1099h06.3 23 517 -,yk1122e01.3 23 519 -,yk1151e05.3 24 518 -,yk1033d09.3 18 513 -,yk1200b10.3 22 517 -,yk1445a08.3 218 714 -,yk1499d03.3 226 722 -,yk1508b06.3 222 718 -,yk1523g04.3 78 575 -,yk1701c04.3 85 583 -,yk1276a07.3 229 729 -,yk1566c03.3 23 522 -,yk1534b01.3 227 726 -,yk1559d06.3 140 640 -,yk1597e02.3 22 523 -,yk1420g05.3 23 524 -,yk1476g05.3 224 725 -,yk1502f07.3 203 704 -,yk1526c08.3 102 605 -,yk1564e02.3 186 690 -,yk1581b07.3 23 525 -,yk1411e02.3 22 524 -,yk1460g06.3 191 693 -,yk1490c07.3 23 524 -,yk1459c06.3 212 714 -,yk1468c03.3 123 625 -,yk1662h02.3 23 525 -,yk1706f01.3 23 525 -,yk1730a09.3 23 525 -,yk1751g08.3 222 724 -,yk1450f03.3 220 723 -,yk1498f01.3 23 526 -,yk1347e08.3 23 526 -,yk1281f04.3 23 528 -,yk1026f10.3 25 529 -,yk1326f10.3 145 649 -,yk776b07.3 18 522 -,yk819c03.3 23 527 -,yk1363d08.3 23 528 -,yk1141a10.3 23 531 -,yk891h02.3 23 531 -,yk1079e02.3 23 530 -,yk1142c02.3 192 699 -,yk827b03.3 22 529 -,yk1041d01.3 23 532 -,yk1022f05.3 188 696 -,yk1161d09.3 23 531 -,yk1175b05.3 23 531 -,yk1229f01.3 223 731 -,yk776c05.3 23 531 -,yk1258a02.3 23 533 -,yk1258f10.3 24 533 -,yk1213d11.3 257 767 -,yk1021b10.3 23 532 -,yk1212f06.3 183 692 -,yk1338c06.3 23 532 -,yk1041a09.3 233 742 -,yk1076e08.3 23 532 -,yk1134e12.3 23 532 -,yk1156a09.3 23 532 -,yk1167g12.3 22 531 -,yk1217d06.3 183 692 -,yk1238d11.3 23 532 -,yk1239g07.3 223 732 -,yk1261c01.3 218 727 -,yk1266c12.3 23 532 -,yk1266e05.3 23 532 -,yk1281b07.3 23 532 -,yk1289h06.3 101 610 -,yk1309b05.3 224 733 -,yk1382h02.5 23 532 +,yk1329c12.3 24 537 -,yk1063g09.3 154 665 -,yk1089d01.3 23 533 -,yk1667g11.3 23 534 -,yk1500g09.3 23 534 -,yk1653c08.3 23 534 -,yk1370f08.3 23 535 -,yk1370f10.3 23 535 -,yk1629g01.3 23 535 -,yk1743g04.3 23 536 -,yk1239f04.3 23 538 -,yk1717f07.3 22 538 -,yk1274f02.3 23 540 -,yk1223a01.3 150 668 -,yk812e07.5 23 541 +,yk812e07.3 23 540 -,yk1340a03.3 22 541 -,yk1021b10.5 23 543 +,yk1514e03.3 184 709 -,yk1338c06.5 23 553 +,yk1238d11.5 23 553 +,yk1026f10.5 25 554 +,yk1363d08.5 23 552 +,yk1274f02.5 23 552 +,yk1420g05.5 23 552 +,yk1566c03.5 23 552 +,yk1629g01.5 23 552 +,yk1706f01.5 23 552 +,yk1730a09.5 23 552 +,yk1122e01.5 23 552 +,yk1141a10.5 23 552 +,yk1151e05.5 24 553 +,yk1161d09.5 23 552 +,yk1175b05.5 23 552 +,yk1281f04.5 23 552 +,yk1079e02.5 23 551 +,yk1310e07.5 23 555 +,yk1089d01.5 23 572 +,yk1527c07.5 23 589 +,yk1344e01.3 19 587 -,yk761f11.5 17 614 +,yk809d12.3 23 628 -,yk1310e07.3 23 628 -,yk470d10.5 1 376 +,yk1015e03.5 1 388 +,yk110a8.5 1 360 +,yk114f3.5 1 360 +,yk78a9.5 1 383 +,yk60a2.5 1 330 +,yk677a10.5 1 373 +,yk634d3.5 1 374 +,yk389a2.5 1 376 +,yk591g5.5 1 375 +,yk247h2.5 1 244 +,yk92d5.5 1 322 +,yk62e4.5 1 330 +,yk82d9.5 1 352 +,yk484e3.5 1 367 +,yk342c11.5 1 371 +,yk210g1.5 1 371 +,yk199b1.5 1 372 +,yk609a6.5 1 372 +,yk602g4.5 1 374 +,yk472b4.5 1 376 +,yk532b2.5 1 376 +,yk628h8.5 1 384 +,yk470d10.3 1 300 -,yk67e2.5 1 360 +,yk495b4.5 1 360 +,yk515d3.5 1 367 +,yk586d10.5 1 377 +,yk631d3.5 1 383 +,yk77e2.5 1 385 +,yk573e6.5 1 360 +,yk561d9.5 1 376 +,yk487f9.5 1 360 +,yk491d2.5 1 360 +,yk418d7.5 1 373 +,yk391d4.5 1 377 +,yk281f9.5 1 376 +,yk612a2.5 1 360 +,yk667h3.5 1 378 +,yk103f11.5 1 330 +,yk82d4.5 1 330 +,yk502f2.5 1 370 +,yk399b1.5 1 377 +,yk1388g06.3 1 499 -,yk1388g06.5 1 513 +,yk255e5.5 1 360 +,yk1230h08.5 1 172 +,yk1281b07.5 1 174 +,CK576705 1 199 +,BP 1 117 +,RP 1 117 +,yk393a4.5 1 360 +,CK575334 1 379 +,CK579527 1 498 +,yk1411e02.5 1 103 +,yk568f5.5 1 374 +,yk612e4.5 1 360 +,yk1239f04.5 1 492 +,yk1050c09.5 1 505 +,yk591h11.5 1 360 +,yk635a9.5 1 360 +,yk639e2.5 1 360 +,yk654d2.5 1 382 +,yk648e7.5 1 360 +,yk486b11.5 1 360 +,yk650f12.5 1 360 +,yk1012b08.3 1 317 -,yk1123h12.3 1 463 -,yk579f1.5 1 360 +,yk752f11.5 1 326 +,CEESE35F 1 285 +,CEESP60F 1 283 +,yk1032a02.5 53 422 +,yk633a4.5 1 382 +,yk1299c02.5 1 380 +,yk361d12.5 1 375 +,yk594f10.5 1 356 +,yk847c05.5 1 353 +,CEESB14F 1 300 +,CEESY61FB 1 319 +,yk1382d08.3 1 222 +,yk621b1.3 1 300 +,yk739c4.3 1 300 +,yk597g10.3 1 300 +,yk421a11.3 1 292 +,yk447b3.3 1 300 +,yk599b8.3 1 300 +,yk639a10.3 1 300 +,yk555f9.3 1 300 +,yk615c7.3 1 240 +,yk525g4.3 1 240 +,yk556a10.5 1 365 +,yk1475h10.3 1 136 + III gt csa exon 1419138 1419251 0.842 + . Parent=mRNA146 III gt csa exon 1419321 1420424 0.99 + . Parent=mRNA146 ### III gt csa gene 1419326 1427216 . - . ID=gene99 III gt csa mRNA 1419326 1419839 . - . ID=mRNA147;Parent=gene99;Target=yk1230h08.3 1 312 +,yk1527c07.3 1 508 +,yk1032a02.3 1 376 +,yk602g4.3 1 300 +,yk1195a11.3 1 378 +,yk639e2.3 1 300 +,yk763c11.3 1 356 +,CEESU49F 1 379 +,yk667h3.3 1 300 +,yk1526d06.3 1 360 +,CEESM53F 1 381 +,yk596e1.3 1 300 +,yk654e2.3 1 180 +,yk586d10.3 1 240 +,yk281f9.3 1 300 +,yk255e5.3 1 300 +,yk654e1.3 1 180 +,yk591h11.3 1 240 +,yk634d3.3 1 300 +,yk654c2.3 1 300 +,yk487f9.3 1 300 +,yk515d3.3 1 300 +,yk654d2.3 1 300 +,yk672d12.3 1 300 +,yk631d3.3 1 300 +,yk612a2.3 1 300 +,yk654g12.3 1 180 +,yk281a2.3 1 300 +,yk609a6.3 1 300 +,yk612e4.3 1 300 +,yk371c5.3 1 300 +,yk648e7.3 1 300 +,yk1133g01.3 1 342 +,yk579f1.3 1 300 +,yk289b9.3 1 300 +,yk110a8.3 1 342 +,CEESH76F 1 352 +,yk114f3.3 1 326 +,yk67e2.3 1 332 +,yk64h2.3 1 337 +,yk1382h02.3 1 106 +,CEESV10F 1 307 +,yk92d5.3 1 292 +,CEESN05F 1 295 +,yk677a10.3 1 300 +,yk847c05.3 1 253 +,yk833b04.3 1 252 +,yk78a9.3 1 300 +,CEESX12F 1 238 +,yk62e4.3 1 180 +,yk92c4.3 1 152 +,yk1692c10.3 1 127 +,yk1637f01.3 1 136 + III gt csa exon 1419326 1419839 0.96 - . Parent=mRNA147 III gt csa mRNA 1419858 1427216 . - . ID=mRNA148;Parent=gene99;Target=yk1572a07.3 1 708 -,yk1483e05.3 1 710 -,yk845a11.3 1 671 -,yk1091h10.3 1 703 -,yk777g07.3 1 702 -,yk843d03.3 1 655 -,yk1037c05.3 1 702 -,yk1339b07.3 1 706 -,yk1156e02.3 1 713 -,yk1221d11.3 1 718 -,yk1271e02.3 1 702 -,yk1175h04.3 1 701 -,yk1068f01.3 1 777 -,yk1534a04.3 1 671 -,yk1397e11.3 1 735 -,yk1467c02.3 1 668 -,yk1447g10.3 1 689 -,yk1588c10.3 1 694 -,yk1616c04.3 1 745 -,yk1449e07.3 1 743 -,yk1422c01.3 1 711 -,yk1433e11.3 1 713 -,yk1359d11.3 1 739 -,yk1741b07.3 1 645 -,yk1382d05.3 1 724 -,yk1491e06.3 1 722 -,yk1111g04.3 1 667 -,yk1677f12.3 1 683 -,RP 1 549 +,BP 1 546 +,yk421a11.5 1 360 +,yk384h6.5 1 375 +,yk639a10.5 1 360 +,yk1021a01.5 20 655 +,yk1483e05.5 17 650 +,yk1359d11.5 23 655 +,yk1382d05.5 23 654 +,yk1433e11.5 22 650 +,yk1422c01.5 23 628 +,yk1397e11.5 22 625 +,yk1091h10.5 23 616 +,yk1221d11.5 23 614 +,yk845a11.5 23 613 +,yk1339b07.5 23 612 +,yk1068f01.5 23 611 +,yk1677f12.5 24 611 +,yk1382d08.5 23 610 +,yk1680g05.5 23 610 +,yk1439g04.5 23 609 +,yk1741b07.5 22 608 +,yk1037c05.5 23 606 +,yk1491e06.5 23 606 +,yk1588c10.5 23 604 +,yk1175h04.5 23 603 +,yk777g07.5 20 534 +,yk843d03.5 23 534 +,yk1111g04.5 23 512 +,yk1467c02.5 22 500 +,yk1449c10.5 23 463 +,yk1572a07.5 23 461 +,yk1447g10.5 23 460 +,yk1449e07.5 23 460 +,yk525g4.5 1 375 +,cm20f7.5 11 407 +,yk275h6.5 1 351 +,yk597g10.5 1 354 +,yk447b3.5 1 355 +,yk599b8.5 1 359 +,yk615c7.5 1 370 +,yk1534a04.5 27 403 +,yk739c4.5 23 340 + III gt csa exon 1419858 1420431 0.998 - . Parent=mRNA148 III gt csa exon 1421391 1421771 0.897 - . Parent=mRNA148 III gt csa exon 1424258 1424349 0.948 - . Parent=mRNA148 III gt csa exon 1425095 1425427 0.96 - . Parent=mRNA148 III gt csa exon 1425902 1425994 1 - . Parent=mRNA148 III gt csa exon 1426159 1426285 1 - . Parent=mRNA148 III gt csa exon 1427060 1427216 1 - . Parent=mRNA148 III gt csa mRNA 1420034 1420559 . - . ID=mRNA149;Parent=gene99;Target=yk421a11.5 1 360 +,yk555f9.5 1 360 + III gt csa exon 1420034 1420559 0.993 - . Parent=mRNA149 III gt csa mRNA 1421684 1424322 . - . ID=mRNA150;Parent=gene99;Target=yk621b1.5 1 240 + III gt csa exon 1421684 1421858 0.943 - . Parent=mRNA150 III gt csa exon 1424258 1424322 1 - . Parent=mRNA150 ### III gt csa gene 1439086 1443180 . + . ID=gene100 III gt csa mRNA 1439086 1443180 . + . ID=mRNA151;Parent=gene100;Target=WP 1 531 + III gt csa exon 1439086 1439148 1 + . Parent=mRNA151 III gt csa exon 1439194 1439289 1 + . Parent=mRNA151 III gt csa exon 1439346 1439507 1 + . Parent=mRNA151 III gt csa exon 1439552 1439628 1 + . Parent=mRNA151 III gt csa exon 1439705 1439927 1 + . Parent=mRNA151 III gt csa exon 1440041 1440100 1 + . Parent=mRNA151 III gt csa exon 1440409 1440543 1 + . Parent=mRNA151 III gt csa exon 1440839 1440928 1 + . Parent=mRNA151 III gt csa exon 1441573 1441826 1 + . Parent=mRNA151 III gt csa exon 1441882 1442030 1 + . Parent=mRNA151 III gt csa exon 1442396 1442547 1 + . Parent=mRNA151 III gt csa exon 1443049 1443180 1 + . Parent=mRNA151 ### III gt csa gene 1443038 1443263 . - . ID=gene101 III gt csa mRNA 1443038 1443263 . - . ID=mRNA152;Parent=gene101;Target=yk525g8.3 80 300 +,yk656g8.3 80 300 +,yk658b12.3 83 300 +,yk337c2.3 84 300 +,yk675h9.3 85 300 +,yk602e8.3 86 300 +,yk652b11.3 86 300 +,yk659c10.3 86 300 +,yk621h1.3 88 300 +,yk572f4.3 77 288 +,yk592b8.3 75 286 +,yk617a4.3 81 300 + III gt csa exon 1443038 1443263 0.866 - . Parent=mRNA152 ### III gt csa gene 1447545 1455750 . - . ID=gene102 III gt csa mRNA 1447545 1455750 . - . ID=mRNA153;Parent=gene102;Target=yk674c5.3 1 300 -,yk513e12.3 1 300 -,WP 1 482 +,yk674c5.5 1 360 + III gt csa exon 1447545 1447665 1 - . Parent=mRNA153 III gt csa exon 1449965 1450063 1 - . Parent=mRNA153 III gt csa exon 1450108 1450340 1 - . Parent=mRNA153 III gt csa exon 1450555 1450692 1 - . Parent=mRNA153 III gt csa exon 1450743 1450802 1 - . Parent=mRNA153 III gt csa exon 1450847 1450919 1 - . Parent=mRNA153 III gt csa exon 1451910 1452038 1 - . Parent=mRNA153 III gt csa exon 1452084 1452139 1 - . Parent=mRNA153 III gt csa exon 1452429 1452468 1 - . Parent=mRNA153 III gt csa exon 1453036 1453163 1 - . Parent=mRNA153 III gt csa exon 1454216 1454391 1 - . Parent=mRNA153 III gt csa exon 1454479 1454572 1 - . Parent=mRNA153 III gt csa exon 1454621 1454698 1 - . Parent=mRNA153 III gt csa exon 1455676 1455750 1 - . Parent=mRNA153 III gt csa mRNA 1448290 1449007 . - . ID=mRNA154;Parent=gene102;Target=yk1044a02.5 1 718 + III gt csa exon 1448290 1449007 0.997 - . Parent=mRNA154 III gt csa mRNA 1452028 1452748 . - . ID=mRNA155;Parent=gene102;Target=yk513e12.5 1 386 + III gt csa exon 1452028 1452038 1 - . Parent=mRNA155 III gt csa exon 1452084 1452139 0.982 - . Parent=mRNA155 III gt csa exon 1452429 1452748 1 - . Parent=mRNA155 ### III gt csa gene 1449026 1449551 . + . ID=gene103 III gt csa mRNA 1449026 1449551 . + . ID=mRNA156;Parent=gene103;Target=yk1044a02.3 208 712 + III gt csa exon 1449026 1449522 0.991 + . Parent=mRNA156 III gt csa exon 1449545 1449551 0.571 + . Parent=mRNA156 ### III gt csa gene 1458223 1466441 . + . ID=gene104 III gt csa mRNA 1458223 1466441 . + . ID=mRNA157;Parent=gene104;Target=WP 1 503 + III gt csa exon 1458223 1458465 1 + . Parent=mRNA157 III gt csa exon 1458508 1458597 1 + . Parent=mRNA157 III gt csa exon 1458884 1458935 1 + . Parent=mRNA157 III gt csa exon 1459883 1460049 1 + . Parent=mRNA157 III gt csa exon 1461819 1461874 1 + . Parent=mRNA157 III gt csa exon 1461919 1462047 1 + . Parent=mRNA157 III gt csa exon 1463286 1463358 1 + . Parent=mRNA157 III gt csa exon 1463515 1463584 1 + . Parent=mRNA157 III gt csa exon 1465126 1465193 1 + . Parent=mRNA157 III gt csa exon 1465240 1465469 1 + . Parent=mRNA157 III gt csa exon 1465516 1465614 1 + . Parent=mRNA157 III gt csa exon 1465770 1465832 1 + . Parent=mRNA157 III gt csa exon 1465923 1466021 1 + . Parent=mRNA157 III gt csa exon 1466372 1466441 1 + . Parent=mRNA157 ### III gt csa gene 1466377 1466722 . - . ID=gene105 III gt csa mRNA 1466377 1466722 . - . ID=mRNA158;Parent=gene105;Target=CEESB41F 1 346 + III gt csa exon 1466377 1466722 0.965 - . Parent=mRNA158 ### III gt csa gene 1467863 1483497 . - . ID=gene106 III gt csa mRNA 1467863 1483497 . - . ID=mRNA159;Parent=gene106;Target=yk1170a01.3 1 765 -,yk1128d05.3 1 726 -,yk405c3.3 1 300 -,yk500f5.3 1 300 -,yk288a6.3 1 300 -,WP 1 922 +,yk135h2.5 1 373 +,yk288a6.5 1 360 +,yk1170a01.5 22 593 +,yk1128d05.5 23 588 + III gt csa exon 1467863 1468170 0.981 - . Parent=mRNA159 III gt csa exon 1469171 1469260 1 - . Parent=mRNA159 III gt csa exon 1470517 1471342 1 - . Parent=mRNA159 III gt csa exon 1472209 1472382 1 - . Parent=mRNA159 III gt csa exon 1473915 1474201 1 - . Parent=mRNA159 III gt csa exon 1474848 1475099 1 - . Parent=mRNA159 III gt csa exon 1476256 1476485 1 - . Parent=mRNA159 III gt csa exon 1477039 1477574 1 - . Parent=mRNA159 III gt csa exon 1478937 1479126 1 - . Parent=mRNA159 III gt csa exon 1483404 1483497 1 - . Parent=mRNA159 III gt csa mRNA 1474973 1476685 . - . ID=mRNA160;Parent=gene106;Target=yk500f5.5 1 360 + III gt csa exon 1474973 1475099 1 - . Parent=mRNA160 III gt csa exon 1476256 1476485 0.989 - . Parent=mRNA160 III gt csa exon 1476684 1476685 1 - . Parent=mRNA160 ### III gt csa gene 1467866 1468169 . + . ID=gene107 III gt csa mRNA 1467866 1468169 . + . ID=mRNA161;Parent=gene107;Target=CEESH11F 1 304 + III gt csa exon 1467866 1468169 0.984 + . Parent=mRNA161 ### III gt csa gene 1484961 1495320 . - . ID=gene108 III gt csa mRNA 1484961 1495320 . - . ID=mRNA162;Parent=gene108;Target=WP 1 418 + III gt csa exon 1484961 1485116 1 - . Parent=mRNA162 III gt csa exon 1487387 1487633 1 - . Parent=mRNA162 III gt csa exon 1487730 1487831 1 - . Parent=mRNA162 III gt csa exon 1490092 1490294 1 - . Parent=mRNA162 III gt csa exon 1491404 1491494 1 - . Parent=mRNA162 III gt csa exon 1491548 1491666 1 - . Parent=mRNA162 III gt csa exon 1493719 1493970 1 - . Parent=mRNA162 III gt csa exon 1495237 1495320 1 - . Parent=mRNA162 ### III gt csa gene 1509455 1510895 . + . ID=gene109 III gt csa mRNA 1509455 1510895 . + . ID=mRNA163;Parent=gene109;Target=yk1187f01.3 1 381 + III gt csa exon 1509455 1509613 0.855 + . Parent=mRNA163 III gt csa exon 1510265 1510335 0.817 + . Parent=mRNA163 III gt csa exon 1510742 1510895 0.916 + . Parent=mRNA163 ### III gt csa gene 1509574 1517983 . - . ID=gene110 III gt csa mRNA 1509574 1512913 . - . ID=mRNA164;Parent=gene110;Target=yk275e6.5 1 360 +,yk1146d12.3 1 312 - III gt csa exon 1509574 1509618 0.978 - . Parent=mRNA164 III gt csa exon 1510270 1510341 0.986 - . Parent=mRNA164 III gt csa exon 1510751 1510948 0.987 - . Parent=mRNA164 III gt csa exon 1512871 1512913 0.872 - . Parent=mRNA164 III gt csa mRNA 1512956 1517983 . - . ID=mRNA165;Parent=gene110;Target=yk1146d12.5 35 612 +,yk774d03.5 23 597 +,yk479a10.5 1 378 +,yk237e8.5 1 360 +,yk714f9.5 23 365 + III gt csa exon 1512956 1513125 1 - . Parent=mRNA165 III gt csa exon 1515550 1515605 1 - . Parent=mRNA165 III gt csa exon 1515725 1515894 1 - . Parent=mRNA165 III gt csa exon 1517731 1517849 1 - . Parent=mRNA165 III gt csa exon 1517921 1517983 1 - . Parent=mRNA165 ### III gt csa gene 1520214 1532758 . - . ID=gene111 III gt csa mRNA 1520214 1532758 . - . ID=mRNA166;Parent=gene111;Target=AY661556 1 2145 + III gt csa exon 1520214 1520363 1 - . Parent=mRNA166 III gt csa exon 1521573 1521926 1 - . Parent=mRNA166 III gt csa exon 1523142 1523685 1 - . Parent=mRNA166 III gt csa exon 1525164 1525402 1 - . Parent=mRNA166 III gt csa exon 1526403 1526535 1 - . Parent=mRNA166 III gt csa exon 1528084 1528234 1 - . Parent=mRNA166 III gt csa exon 1528291 1528435 1 - . Parent=mRNA166 III gt csa exon 1529809 1529984 1 - . Parent=mRNA166 III gt csa exon 1531762 1531821 1 - . Parent=mRNA166 III gt csa exon 1532182 1532275 1 - . Parent=mRNA166 III gt csa exon 1532660 1532758 1 - . Parent=mRNA166 III gt csa mRNA 1521343 1529982 . - . ID=mRNA167;Parent=gene111;Target=BP 1 525 + III gt csa exon 1521343 1521363 0.189 - . Parent=mRNA167 III gt csa exon 1521573 1521926 0.879 - . Parent=mRNA167 III gt csa exon 1523142 1523685 0.95 - . Parent=mRNA167 III gt csa exon 1525164 1525402 0.893 - . Parent=mRNA167 III gt csa exon 1526403 1526535 0.988 - . Parent=mRNA167 III gt csa exon 1528323 1528435 1 - . Parent=mRNA167 III gt csa exon 1529809 1529982 0.921 - . Parent=mRNA167 III gt csa mRNA 1521569 1531828 . - . ID=mRNA168;Parent=gene111;Target=RP 1 544 + III gt csa exon 1521569 1521926 0.88 - . Parent=mRNA168 III gt csa exon 1523142 1523685 0.947 - . Parent=mRNA168 III gt csa exon 1525164 1525402 0.895 - . Parent=mRNA168 III gt csa exon 1526403 1526535 0.969 - . Parent=mRNA168 III gt csa exon 1528323 1528435 1 - . Parent=mRNA168 III gt csa exon 1529809 1529984 0.923 - . Parent=mRNA168 III gt csa exon 1531762 1531828 0.969 - . Parent=mRNA168 ### III gt csa gene 1537499 1538168 . - . ID=gene112 III gt csa mRNA 1537499 1538168 . - . ID=mRNA169;Parent=gene112;Target=yk1272b06.3 1 670 + III gt csa exon 1537499 1538168 0.997 - . Parent=mRNA169 ### III gt csa gene 1540487 1543445 . + . ID=gene113 III gt csa mRNA 1540487 1543445 . + . ID=mRNA170;Parent=gene113;Target=yk427d4.5 1 361 +,yk630d2.5 1 376 +,RP 1 157 +,yk308b12.5 1 360 +,yk1375b08.3 1 496 -,yk1375b08.5 1 531 +,yk308b12.3 1 300 -,yk427d4.3 1 300 - III gt csa exon 1540487 1540540 0.954 + . Parent=mRNA170 III gt csa exon 1540708 1540869 1 + . Parent=mRNA170 III gt csa exon 1541916 1542059 1 + . Parent=mRNA170 III gt csa exon 1543175 1543445 0.985 + . Parent=mRNA170 ### III gt csa gene 1544928 1554435 . - . ID=gene114 III gt csa mRNA 1544928 1554435 . - . ID=mRNA171;Parent=gene114;Target=CESAC53F 1 323 -,yk236c12.3 1 300 -,yk670g3.3 1 300 -,RP 1 723 +,BP 1 717 +,yk166a9.5 1 380 +,yk670g3.5 1 360 +,yk341h12.5 1 364 + III gt csa exon 1544928 1545199 0.982 - . Parent=mRNA171 III gt csa exon 1546519 1546675 0.932 - . Parent=mRNA171 III gt csa exon 1547363 1547757 0.918 - . Parent=mRNA171 III gt csa exon 1548432 1548499 0.924 - . Parent=mRNA171 III gt csa exon 1549231 1549616 0.9 - . Parent=mRNA171 III gt csa exon 1550539 1550735 0.873 - . Parent=mRNA171 III gt csa exon 1551380 1551622 0.988 - . Parent=mRNA171 III gt csa exon 1552597 1552760 1 - . Parent=mRNA171 III gt csa exon 1552826 1552996 0.95 - . Parent=mRNA171 III gt csa exon 1554189 1554435 0.945 - . Parent=mRNA171 ### III gt csa gene 1555385 1560461 . + . ID=gene115 III gt csa mRNA 1555385 1556102 . + . ID=mRNA172;Parent=gene115;Target=yk1111d10.3 1 616 +,yk475g1.3 1 300 +,yk415h12.3 1 300 +,yk491d7.3 1 300 +,yk589g10.3 1 300 +,yk607b8.3 1 300 +,yk157b1.3 1 300 + III gt csa exon 1555385 1556102 0.978 + . Parent=mRNA172 III gt csa mRNA 1558790 1560461 . + . ID=mRNA173;Parent=gene115;Target=yk1371c11.5 23 357 +,yk1030d09.5 23 357 +,yk1508a02.5 23 521 +,yk1540b10.5 23 524 +,yk1532h03.5 23 561 +,yk1371c12.5 23 602 +,yk1364c12.5 23 604 +,yk1395h09.5 22 605 +,yk1377c09.5 23 614 +,yk498e1.5 1 360 + III gt csa exon 1558790 1558898 1 + . Parent=mRNA173 III gt csa exon 1558949 1559033 1 + . Parent=mRNA173 III gt csa exon 1559100 1559240 1 + . Parent=mRNA173 III gt csa exon 1560205 1560461 1 + . Parent=mRNA173 ### III gt csa gene 1555397 1558519 . - . ID=gene116 III gt csa mRNA 1555397 1558519 . - . ID=mRNA174;Parent=gene116;Target=yk1111d10.5 1 607 +,yk607b8.5 1 377 +,yk1518a06.3 1 610 -,yk475g1.5 1 360 +,yk415h12.5 1 360 +,yk1518a06.5 23 582 +,CK580339 1 480 +,yk491d7.5 1 360 +,yk236h2.5 1 360 +,yk157b1.5 16 384 +,yk589g10.5 1 360 + III gt csa exon 1555397 1556159 1 - . Parent=mRNA174 III gt csa exon 1557562 1557862 1 - . Parent=mRNA174 III gt csa exon 1558159 1558268 1 - . Parent=mRNA174 III gt csa exon 1558323 1558397 1 - . Parent=mRNA174 III gt csa exon 1558446 1558519 1 - . Parent=mRNA174 ### III gt csa gene 1563434 1577849 . + . ID=gene117 III gt csa mRNA 1563434 1570107 . + . ID=mRNA175;Parent=gene117;Target=yk1532h03.3 1 751 -,yk1364c12.3 1 710 -,yk1377c09.3 1 708 -,yk1030d09.3 1 689 -,yk1508a02.3 1 658 -,yk1540b10.3 1 642 -,yk1371c11.3 1 611 -,yk1371c12.3 1 550 -,yk1395h09.3 1 549 - III gt csa exon 1563434 1563617 0.97 + . Parent=mRNA175 III gt csa exon 1564968 1565122 0.994 + . Parent=mRNA175 III gt csa exon 1565383 1565545 0.994 + . Parent=mRNA175 III gt csa exon 1569746 1570107 0.983 + . Parent=mRNA175 III gt csa mRNA 1570296 1573761 . + . ID=mRNA176;Parent=gene117;Target=yk267a5.5 1 376 +,yk832e07.5 23 479 +,yk1755e04.5 22 536 +,yk1344g03.5 24 566 +,yk1736b09.5 24 568 +,yk1654g06.5 25 578 +,yk1672c02.5 24 581 +,yk1648c12.5 24 586 +,yk1743a02.5 23 609 +,yk1365e09.5 23 634 +,yk1618f02.5 15 652 +,yk1612a04.5 1 398 +,yk548h9.5 1 372 + III gt csa exon 1570296 1570429 1 + . Parent=mRNA176 III gt csa exon 1571414 1571483 1 + . Parent=mRNA176 III gt csa exon 1571534 1571764 1 + . Parent=mRNA176 III gt csa exon 1572543 1572694 1 + . Parent=mRNA176 III gt csa exon 1572790 1572997 1 + . Parent=mRNA176 III gt csa exon 1573737 1573761 1 + . Parent=mRNA176 III gt csa mRNA 1573827 1576628 . + . ID=mRNA177;Parent=gene117;Target=yk1618f02.3 1 742 -,yk1755e04.3 1 743 -,yk1344g03.3 1 711 -,yk1736b09.3 1 649 -,yk1365e09.3 1 704 -,yk1654g06.3 1 694 -,yk1672c02.3 21 686 -,yk1612a04.3 1 663 -,yk1743a02.3 1 617 -,yk1648c12.3 1 629 -,yk832e07.3 1 524 -,yk1235d02.3 1 465 -,yk605e4.3 1 300 - III gt csa exon 1573827 1573915 0.989 + . Parent=mRNA177 III gt csa exon 1574217 1574376 1 + . Parent=mRNA177 III gt csa exon 1574938 1575034 1 + . Parent=mRNA177 III gt csa exon 1575084 1575161 1 + . Parent=mRNA177 III gt csa exon 1576071 1576198 1 + . Parent=mRNA177 III gt csa exon 1576416 1576628 0.995 + . Parent=mRNA177 III gt csa mRNA 1573884 1576610 . + . ID=mRNA178;Parent=gene117;Target=yk1154b02.3 1 687 -,yk446d1.5 1 234 +,yk1235d02.3 1 465 -,yk605e4.3 1 300 - III gt csa exon 1573884 1573915 1 + . Parent=mRNA178 III gt csa exon 1574217 1574257 1 + . Parent=mRNA178 III gt csa exon 1574822 1575034 0.995 + . Parent=mRNA178 III gt csa exon 1575084 1575161 1 + . Parent=mRNA178 III gt csa exon 1576071 1576198 1 + . Parent=mRNA178 III gt csa exon 1576416 1576610 1 + . Parent=mRNA178 III gt csa mRNA 1576754 1577849 . + . ID=mRNA179;Parent=gene117;Target=yk423d1.5 1 360 + III gt csa exon 1576754 1576868 0.974 + . Parent=mRNA179 III gt csa exon 1577605 1577849 1 + . Parent=mRNA179 ### III gt csa gene 1569814 1570053 . - . ID=gene118 III gt csa mRNA 1569814 1570053 . - . ID=mRNA180;Parent=gene118;Target=yk252b6.3 1 240 + III gt csa exon 1569814 1570053 0.938 - . Parent=mRNA180 ### III gt csa gene 1579272 1580784 . + . ID=gene119 III gt csa mRNA 1579272 1580784 . + . ID=mRNA181;Parent=gene119;Target=yk672c6.3 1 300 -,yk423d1.3 1 300 - III gt csa exon 1579272 1579319 1 + . Parent=mRNA181 III gt csa exon 1580527 1580784 1 + . Parent=mRNA181 ### III gt csa gene 1583146 1584881 . - . ID=gene120 III gt csa mRNA 1583146 1584881 . - . ID=mRNA182;Parent=gene120;Target=yk1513e11.5 1 611 +,yk1513e11.3 1 577 -,yk378b9.5 1 376 +,yk102a5.5 1 360 + III gt csa exon 1583146 1583491 1 - . Parent=mRNA182 III gt csa exon 1584617 1584881 0.992 - . Parent=mRNA182 ### III gt csa gene 1583159 1583488 . + . ID=gene121 III gt csa mRNA 1583159 1583488 . + . ID=mRNA183;Parent=gene121;Target=yk102a5.3 1 315 +,yk378b9.3 1 279 + III gt csa exon 1583159 1583488 0.957 + . Parent=mRNA183 ### III gt csa gene 1605742 1606803 . + . ID=gene122 III gt csa mRNA 1605742 1606803 . + . ID=mRNA184;Parent=gene122;Target=BP 1 152 + III gt csa exon 1605742 1605953 0.982 + . Parent=mRNA184 III gt csa exon 1606445 1606556 0.751 + . Parent=mRNA184 III gt csa exon 1606672 1606803 1 + . Parent=mRNA184 III gt csa mRNA 1605745 1606803 . + . ID=mRNA185;Parent=gene122;Target=RP 1 142 + III gt csa exon 1605745 1605953 0.983 + . Parent=mRNA185 III gt csa exon 1606472 1606556 0.972 + . Parent=mRNA185 III gt csa exon 1606672 1606803 1 + . Parent=mRNA185 ### III gt csa gene 1606834 1610636 . - . ID=gene123 III gt csa mRNA 1606834 1609423 . - . ID=mRNA186;Parent=gene123;Target=yk1416d09.3 1 705 -,yk1362f07.3 1 706 -,yk1547d11.3 1 703 -,yk517d4.3 1 300 -,yk539b10.3 1 300 -,yk579b9.3 1 172 - III gt csa exon 1606834 1606880 0.979 - . Parent=mRNA186 III gt csa exon 1606929 1607019 1 - . Parent=mRNA186 III gt csa exon 1607623 1607756 1 - . Parent=mRNA186 III gt csa exon 1607809 1608154 1 - . Parent=mRNA186 III gt csa exon 1609334 1609423 1 - . Parent=mRNA186 III gt csa mRNA 1609706 1610636 . - . ID=mRNA187;Parent=gene123;Target=yk539b10.5 1 360 + III gt csa exon 1609706 1609870 0.994 - . Parent=mRNA187 III gt csa exon 1610442 1610636 1 - . Parent=mRNA187 ### III gt csa gene 1611351 1614022 . - . ID=gene124 III gt csa mRNA 1611351 1614022 . - . ID=mRNA188;Parent=gene124;Target=yk1547d11.5 1 438 +,yk1416d09.5 23 573 +,yk1362f07.5 23 549 +,yk517d4.5 1 360 + III gt csa exon 1611351 1611537 1 - . Parent=mRNA188 III gt csa exon 1612158 1612264 1 - . Parent=mRNA188 III gt csa exon 1612870 1613031 1 - . Parent=mRNA188 III gt csa exon 1613520 1614022 1 - . Parent=mRNA188 ### III gt csa gene 1617126 1618924 . - . ID=gene125 III gt csa mRNA 1617126 1618924 . - . ID=mRNA189;Parent=gene125;Target=CK589550 1 323 +,BP 1 109 +,RP 1 109 +,yk81b11.5 1 330 +,yk175h6.5 1 222 + III gt csa exon 1617126 1617142 0.647 - . Parent=mRNA189 III gt csa exon 1617362 1617429 0.956 - . Parent=mRNA189 III gt csa exon 1618260 1618379 1 - . Parent=mRNA189 III gt csa exon 1618719 1618832 0.991 - . Parent=mRNA189 III gt csa exon 1618885 1618924 0.975 - . Parent=mRNA189 III gt csa mRNA 1617142 1618924 . - . ID=mRNA190;Parent=gene125;Target=yk1213c04.5 23 578 +,yk762h06.5 23 577 +,yk62a4.3 1 298 -,yk1597b03.3 164 675 -,yk1378f10.3 23 532 -,yk1213c04.3 23 531 -,yk341e7.3 1 300 -,yk762h06.3 1 322 -,yk333g8.3 1 300 -,yk289b11.3 1 300 -,yk1491d07.5 9 502 +,yk603g6.3 1 300 -,yk140f8.3 1 300 -,yk383e5.3 1 300 -,yk642a2.3 1 300 -,yk607b2.3 1 300 -,yk1410e10.5 9 492 +,yk1410e10.3 9 482 -,yk1491d07.3 9 481 -,yk342g4.3 1 300 -,yk383e5.5 1 386 +,yk140f8.5 1 381 +,yk599a12.5 1 360 +,yk494f1.5 1 360 +,yk342g4.5 1 377 +,yk333g8.5 1 360 +,yk452a10.5 1 360 +,yk642a2.5 1 376 +,yk603g6.5 1 360 +,yk607b2.5 1 376 +,yk341e7.5 1 372 +,yk289b11.5 13 375 +,BP 1 109 +,RP 1 109 +,yk81b11.5 1 330 +,yk175h6.5 1 222 + III gt csa exon 1617142 1617429 1 - . Parent=mRNA190 III gt csa exon 1618260 1618379 1 - . Parent=mRNA190 III gt csa exon 1618719 1618832 1 - . Parent=mRNA190 III gt csa exon 1618885 1618924 0.975 - . Parent=mRNA190 III gt csa mRNA 1617181 1618918 . - . ID=mRNA191;Parent=gene125;Target=yk1405h09.3 1 391 -,yk1405h09.5 23 302 + III gt csa exon 1617181 1617429 0.972 - . Parent=mRNA191 III gt csa exon 1618260 1618267 1 - . Parent=mRNA191 III gt csa exon 1618731 1618832 1 - . Parent=mRNA191 III gt csa exon 1618885 1618918 1 - . Parent=mRNA191 ### III gt csa gene 1617159 1617431 . + . ID=gene126 III gt csa mRNA 1617159 1617431 . + . ID=mRNA192;Parent=gene126;Target=yk81b11.3 1 120 +,yk599a12.3 1 229 + III gt csa exon 1617159 1617431 0.987 + . Parent=mRNA192 ### III gt csa gene 1619718 1625773 . + . ID=gene127 III gt csa mRNA 1619718 1623324 . + . ID=mRNA193;Parent=gene127;Target=yk515d7.5 1 369 +,yk1371g11.5 1 457 +,yk1502h06.5 23 475 +,yk1315f04.5 23 476 +,yk769d02.5 23 487 +,yk1620h12.5 23 600 +,yk566g5.5 1 360 +,yk434a10.5 1 374 +,yk416a11.5 1 240 +,yk413g4.5 1 360 +,yk458a7.5 1 360 +,yk498g8.5 1 360 +,yk344h2.5 1 360 +,yk416f6.5 1 360 +,yk432a10.5 1 360 +,yk638c1.5 1 360 +,yk631h7.5 1 360 +,yk538g9.5 1 360 +,yk499e12.5 1 360 +,yk678h2.5 1 360 +,yk534c9.5 1 360 +,yk591c9.5 1 360 +,yk629b10.5 1 360 +,yk460e6.5 1 360 +,yk668e7.5 1 240 +,yk586g3.5 1 360 +,yk394h5.5 1 360 +,yk542c5.5 1 360 + III gt csa exon 1619718 1619894 0.972 + . Parent=mRNA193 III gt csa exon 1620044 1620352 1 + . Parent=mRNA193 III gt csa exon 1623213 1623324 1 + . Parent=mRNA193 III gt csa mRNA 1619718 1625773 . + . ID=mRNA194;Parent=gene127;Target=yk515d7.5 1 369 +,L36035 1 1781 +,yk1614a02.5 1 633 +,yk1371g11.5 1 457 +,yk761g06.5 1 588 +,yk1502h06.5 23 475 +,yk1315f04.5 23 476 +,yk769d02.5 23 487 +,yk1545g12.5 23 531 +,yk1421h01.5 23 532 +,yk1399b07.5 23 533 +,yk1651f03.5 23 569 +,yk1664c02.5 22 568 +,yk1696f05.5 23 570 +,yk1528f03.5 23 570 +,yk1741c08.5 23 571 +,yk1444d01.5 23 571 +,yk1500h01.5 23 571 +,yk1645f10.5 23 572 +,yk1695g01.5 23 572 +,yk1592g09.5 23 572 +,yk1526g10.5 22 573 +,yk1522d12.5 21 573 +,yk1387h03.5 22 574 +,yk1526h01.5 23 575 +,yk1493d05.5 23 577 +,yk1363e02.5 23 577 +,yk1657c03.5 23 578 +,yk816g12.5 23 581 +,yk566g5.5 1 360 +,yk434a10.5 1 374 +,yk416a11.5 1 240 +,yk413g4.5 1 360 +,yk458a7.5 1 360 +,yk498g8.5 1 360 +,RP 1 568 +,BP 1 568 +,yk344h2.5 1 360 +,yk416f6.5 1 360 +,yk432a10.5 1 360 +,yk638c1.5 1 360 +,yk631h7.5 1 360 +,yk538g9.5 1 360 +,yk499e12.5 1 360 +,yk678h2.5 1 360 +,yk534c9.5 1 360 +,yk591c9.5 1 360 +,yk629b10.5 1 360 +,yk460e6.5 1 360 +,yk668e7.5 1 240 +,yk586g3.5 1 360 +,yk394h5.5 1 360 +,yk755a01.5 1 538 +,yk542c5.5 1 360 +,yk1004c09.5 1 603 +,AJ270981 1 670 +,yk455e6.5 1 360 +,yk405a9.5 1 360 +,yk343g7.5 1 360 +,CB104502 83 407 +,yk257b9.5 1 375 +,yk545c7.5 1 360 +,yk7b1.5 1 359 +,cm9c7.5 1 402 +,CEMSF82F 1 211 -,yk1315f04.3 1 607 -,yk1645f10.3 1 675 -,yk1528f03.3 1 674 -,yk1500h01.3 1 644 -,yk20e11.5 1 300 +,yk272b10.5 1 360 +,yk221g12.5 1 240 + III gt csa exon 1619718 1619894 0.972 + . Parent=mRNA194 III gt csa exon 1620044 1620352 1 + . Parent=mRNA194 III gt csa exon 1621416 1621808 0.997 + . Parent=mRNA194 III gt csa exon 1623048 1623425 1 + . Parent=mRNA194 III gt csa exon 1624423 1624740 1 + . Parent=mRNA194 III gt csa exon 1625234 1625773 0.959 + . Parent=mRNA194 III gt csa mRNA 1619718 1625773 . + . ID=mRNA195;Parent=gene127;Target=yk515d7.5 1 369 +,yk1614a02.5 1 633 +,yk1371g11.5 1 457 +,yk761g06.5 1 588 +,yk1502h06.5 23 475 +,yk1315f04.5 23 476 +,yk769d02.5 23 487 +,yk1545g12.5 23 531 +,yk1421h01.5 23 532 +,yk1399b07.5 23 533 +,yk1651f03.5 23 569 +,yk1664c02.5 22 568 +,yk1696f05.5 23 570 +,yk1528f03.5 23 570 +,yk1741c08.5 23 571 +,yk1444d01.5 23 571 +,yk1500h01.5 23 571 +,yk1645f10.5 23 572 +,yk1695g01.5 23 572 +,yk1592g09.5 23 572 +,yk1526g10.5 22 573 +,yk1522d12.5 21 573 +,yk1387h03.5 22 574 +,yk1526h01.5 23 575 +,yk1493d05.5 23 577 +,yk1363e02.5 23 577 +,yk1657c03.5 23 578 +,yk816g12.5 23 581 +,yk566g5.5 1 360 +,yk434a10.5 1 374 +,yk416a11.5 1 240 +,yk413g4.5 1 360 +,yk458a7.5 1 360 +,yk498g8.5 1 360 +,yk344h2.5 1 360 +,yk416f6.5 1 360 +,yk432a10.5 1 360 +,yk638c1.5 1 360 +,yk631h7.5 1 360 +,yk538g9.5 1 360 +,yk499e12.5 1 360 +,yk678h2.5 1 360 +,yk534c9.5 1 360 +,yk591c9.5 1 360 +,yk629b10.5 1 360 +,yk460e6.5 1 360 +,yk668e7.5 1 240 +,yk586g3.5 1 360 +,yk394h5.5 1 360 +,yk755a01.5 1 538 +,yk542c5.5 1 360 +,yk777d06.5 1 646 +,cm9c7.5 1 402 +,CEMSF82F 1 211 -,yk1315f04.3 1 607 -,yk1645f10.3 1 675 -,yk1528f03.3 1 674 -,yk1500h01.3 1 644 -,yk20e11.5 1 300 +,yk272b10.5 1 360 +,yk221g12.5 1 240 + III gt csa exon 1619718 1619894 0.972 + . Parent=mRNA195 III gt csa exon 1620044 1620352 1 + . Parent=mRNA195 III gt csa exon 1621416 1621679 1 + . Parent=mRNA195 III gt csa exon 1623279 1623425 1 + . Parent=mRNA195 III gt csa exon 1624423 1624740 0.958 + . Parent=mRNA195 III gt csa exon 1625234 1625773 0.959 + . Parent=mRNA195 ### III gt csa gene 1623119 1625784 . - . ID=gene128 III gt csa mRNA 1623119 1623227 . - . ID=mRNA196;Parent=gene128;Target=yk125c12.5 1 111 + III gt csa exon 1623119 1623227 0.872 - . Parent=mRNA196 III gt csa mRNA 1625267 1625784 . - . ID=mRNA197;Parent=gene128;Target=yk755a01.3 1 509 +,yk1371g11.3 1 500 +,yk1741c08.3 1 502 +,yk1620h12.3 1 499 +,yk1522d12.3 1 505 +,yk1592g09.3 1 484 +,yk1502h06.3 1 491 +,yk1651f03.3 1 490 +,yk1545g12.3 1 481 +,yk1526h01.3 1 487 +,yk1664c02.3 1 489 +,yk1614a02.3 1 489 +,yk1657c03.3 1 488 +,yk1696f05.3 1 489 +,yk1493d05.3 1 490 +,yk777d06.3 1 470 +,yk769d02.3 1 474 +,yk816g12.3 1 487 +,yk1004c09.3 1 455 +,yk1399b07.3 1 434 +,yk1363e02.3 1 430 +,yk1695g01.3 1 430 +,yk1387h03.3 1 430 + III gt csa exon 1625267 1625784 0.904 - . Parent=mRNA197 ### III gt csa gene 1626655 1629966 . + . ID=gene129 III gt csa mRNA 1626655 1629966 . + . ID=mRNA198;Parent=gene129;Target=yk473d1.5 1 360 + III gt csa exon 1626655 1626760 0.976 + . Parent=mRNA198 III gt csa exon 1629399 1629553 0.994 + . Parent=mRNA198 III gt csa exon 1629869 1629966 0.99 + . Parent=mRNA198 ### III gt csa gene 1630786 1634440 . - . ID=gene130 III gt csa mRNA 1630786 1634440 . - . ID=mRNA199;Parent=gene130;Target=yk1400h01.3 1 669 -,yk1673f09.3 1 729 -,WP 1 505 +,yk1400h01.5 1 601 + III gt csa exon 1630786 1630944 1 - . Parent=mRNA199 III gt csa exon 1630996 1631105 1 - . Parent=mRNA199 III gt csa exon 1631542 1631671 1 - . Parent=mRNA199 III gt csa exon 1632010 1632261 1 - . Parent=mRNA199 III gt csa exon 1632410 1632578 1 - . Parent=mRNA199 III gt csa exon 1632625 1632755 1 - . Parent=mRNA199 III gt csa exon 1632894 1633031 1 - . Parent=mRNA199 III gt csa exon 1633206 1633356 1 - . Parent=mRNA199 III gt csa exon 1633716 1633864 1 - . Parent=mRNA199 III gt csa exon 1634294 1634440 1 - . Parent=mRNA199 ### III gt csa gene 1636110 1637235 . + . ID=gene131 III gt csa mRNA 1636110 1637235 . + . ID=mRNA200;Parent=gene131;Target=yk473d1.3 1 300 - III gt csa exon 1636110 1636349 0.95 + . Parent=mRNA200 III gt csa exon 1637174 1637235 0.984 + . Parent=mRNA200 ### III gt csa gene 1638270 1638592 . - . ID=gene132 III gt csa mRNA 1638270 1638592 . - . ID=mRNA201;Parent=gene132;Target=yk384f7.5 1 324 + III gt csa exon 1638270 1638592 0.98 - . Parent=mRNA201 ### III gt csa gene 1641900 1642133 . + . ID=gene133 III gt csa mRNA 1641900 1642133 . + . ID=mRNA202;Parent=gene133;Target=yk296c8.3 1 221 + III gt csa exon 1641900 1641940 0.878 + . Parent=mRNA202 III gt csa exon 1641952 1642133 0.846 + . Parent=mRNA202 ### III gt csa gene 1658190 1659850 . - . ID=gene134 III gt csa mRNA 1658190 1659850 . - . ID=mRNA203;Parent=gene134;Target=yk1658h08.5 1 538 +,yk1178b07.5 23 565 +,yk869h10.3 179 673 -,yk1658h08.3 1 488 -,yk1178b07.3 23 514 -,yk1004a04.3 102 584 -,yk1016a02.3 128 579 - III gt csa exon 1658190 1658447 0.965 - . Parent=mRNA203 III gt csa exon 1659566 1659850 1 - . Parent=mRNA203 ### III gt csa gene 1667817 1668608 . - . ID=gene135 III gt csa mRNA 1667817 1668608 . - . ID=mRNA204;Parent=gene135;Target=WP 1 89 +,BP 1 75 + III gt csa exon 1667817 1667916 1 - . Parent=mRNA204 III gt csa exon 1667967 1668062 1 - . Parent=mRNA204 III gt csa exon 1668538 1668608 1 - . Parent=mRNA204 ### III gt csa gene 1672506 1672805 . + . ID=gene136 III gt csa mRNA 1672506 1672805 . + . ID=mRNA205;Parent=gene136;Target=yk204f5.3 1 300 + III gt csa exon 1672506 1672805 0.97 + . Parent=mRNA205 ### III gt csa gene 1672790 1676716 . - . ID=gene137 III gt csa mRNA 1672790 1676716 . - . ID=mRNA206;Parent=gene137;Target=RP 1 300 +,yk204f5.5 1 360 + III gt csa exon 1672790 1672941 0.778 - . Parent=mRNA206 III gt csa exon 1673902 1674102 0.662 - . Parent=mRNA206 III gt csa exon 1674163 1674368 0.916 - . Parent=mRNA206 III gt csa exon 1675422 1675681 0.939 - . Parent=mRNA206 III gt csa exon 1676386 1676474 1 - . Parent=mRNA206 III gt csa exon 1676687 1676716 0.8 - . Parent=mRNA206 ### III gt csa gene 1683619 1688088 . - . ID=gene138 III gt csa mRNA 1683619 1688088 . - . ID=mRNA207;Parent=gene138;Target=WP 1 768 + III gt csa exon 1683619 1683804 1 - . Parent=mRNA207 III gt csa exon 1684468 1684619 1 - . Parent=mRNA207 III gt csa exon 1684685 1684830 1 - . Parent=mRNA207 III gt csa exon 1684885 1685265 1 - . Parent=mRNA207 III gt csa exon 1686234 1686438 1 - . Parent=mRNA207 III gt csa exon 1686481 1686665 1 - . Parent=mRNA207 III gt csa exon 1687040 1688088 1 - . Parent=mRNA207 ### III gt csa gene 1692070 1695095 . - . ID=gene139 III gt csa mRNA 1692070 1695095 . - . ID=mRNA208;Parent=gene139;Target=yk1146g09.3 1 616 -,WP 1 320 + III gt csa exon 1692070 1692299 0.983 - . Parent=mRNA208 III gt csa exon 1692347 1692704 1 - . Parent=mRNA208 III gt csa exon 1692749 1692889 1 - . Parent=mRNA208 III gt csa exon 1694480 1694576 1 - . Parent=mRNA208 III gt csa exon 1694902 1695095 1 - . Parent=mRNA208 ### III gt csa gene 1697210 1697895 . + . ID=gene140 III gt csa mRNA 1697210 1697895 . + . ID=mRNA209;Parent=gene140;Target=yk1108h12.3 1 685 + III gt csa exon 1697210 1697895 0.997 + . Parent=mRNA209 ### III gt csa gene 1697728 1698972 . - . ID=gene141 III gt csa mRNA 1697728 1698972 . - . ID=mRNA210;Parent=gene141;Target=WP 1 305 +,yk1146g09.5 1 585 + III gt csa exon 1697728 1697934 1 - . Parent=mRNA210 III gt csa exon 1697997 1698621 1 - . Parent=mRNA210 III gt csa exon 1698827 1698972 1 - . Parent=mRNA210 ### III gt csa gene 1701749 1702396 . - . ID=gene142 III gt csa mRNA 1701749 1702396 . - . ID=mRNA211;Parent=gene142;Target=yk280d6.5 1 211 + III gt csa exon 1701749 1701916 1 - . Parent=mRNA211 III gt csa exon 1702354 1702396 1 - . Parent=mRNA211 ### III gt csa gene 1703536 1705475 . - . ID=gene143 III gt csa mRNA 1703536 1705475 . - . ID=mRNA212;Parent=gene143;Target=WP 1 286 + III gt csa exon 1703536 1703760 1 - . Parent=mRNA212 III gt csa exon 1704360 1704909 1 - . Parent=mRNA212 III gt csa exon 1705393 1705475 1 - . Parent=mRNA212 ### III gt csa gene 1706545 1714620 . + . ID=gene144 III gt csa mRNA 1706545 1713333 . + . ID=mRNA213;Parent=gene144;Target=WP 1 1141 + III gt csa exon 1706545 1707024 1 + . Parent=mRNA213 III gt csa exon 1708672 1708784 1 + . Parent=mRNA213 III gt csa exon 1710053 1710138 1 + . Parent=mRNA213 III gt csa exon 1710199 1711458 1 + . Parent=mRNA213 III gt csa exon 1711552 1712548 1 + . Parent=mRNA213 III gt csa exon 1712599 1712789 1 + . Parent=mRNA213 III gt csa exon 1712852 1712921 1 + . Parent=mRNA213 III gt csa exon 1713108 1713333 1 + . Parent=mRNA213 III gt csa mRNA 1713421 1714620 . + . ID=mRNA214;Parent=gene144;Target=WP 1 351 + III gt csa exon 1713421 1713545 1 + . Parent=mRNA214 III gt csa exon 1713600 1713772 1 + . Parent=mRNA214 III gt csa exon 1713817 1713953 1 + . Parent=mRNA214 III gt csa exon 1714003 1714620 1 + . Parent=mRNA214 ### III gt csa gene 1716518 1721899 . - . ID=gene145 III gt csa mRNA 1716518 1721899 . - . ID=mRNA215;Parent=gene145;Target=WP 1 1138 + III gt csa exon 1716518 1716778 1 - . Parent=mRNA215 III gt csa exon 1717664 1717815 1 - . Parent=mRNA215 III gt csa exon 1717868 1718037 1 - . Parent=mRNA215 III gt csa exon 1718081 1718509 1 - . Parent=mRNA215 III gt csa exon 1718571 1718778 1 - . Parent=mRNA215 III gt csa exon 1719192 1719264 0.909 - . Parent=mRNA215 III gt csa exon 1719730 1719854 1 - . Parent=mRNA215 III gt csa exon 1719904 1721899 1 - . Parent=mRNA215 ### III gt csa gene 1723183 1733090 . - . ID=gene146 III gt csa mRNA 1723183 1724814 . - . ID=mRNA216;Parent=gene146;Target=CEESX92F 1 375 -,yk405f8.3 1 300 -,yk405f8.5 1 375 + III gt csa exon 1723183 1723463 0.996 - . Parent=mRNA216 III gt csa exon 1723517 1723621 1 - . Parent=mRNA216 III gt csa exon 1724588 1724814 0.969 - . Parent=mRNA216 III gt csa mRNA 1723183 1733090 . - . ID=mRNA217;Parent=gene146;Target=CEESX92F 1 375 -,U15167 13 1528 +,yk793h08.3 1 731 -,yk1219f04.3 1 767 -,yk1236d10.3 1 706 -,yk405f8.3 1 300 -,BP 1 447 +,WP 1 446 +,yk793h08.5 23 628 +,yk1236d10.5 28 615 + III gt csa exon 1723183 1723463 0.996 - . Parent=mRNA217 III gt csa exon 1723517 1723621 1 - . Parent=mRNA217 III gt csa exon 1724588 1724810 1 - . Parent=mRNA217 III gt csa exon 1725626 1725883 1 - . Parent=mRNA217 III gt csa exon 1728036 1728084 1 - . Parent=mRNA217 III gt csa exon 1729126 1729418 1 - . Parent=mRNA217 III gt csa exon 1732543 1732692 1 - . Parent=mRNA217 III gt csa exon 1732928 1733090 1 - . Parent=mRNA217 III gt csa mRNA 1723354 1733090 . - . ID=mRNA218;Parent=gene146;Target=RP 1 309 +,yk793h08.5 23 628 +,yk1236d10.5 28 615 + III gt csa exon 1723354 1723463 1 - . Parent=mRNA218 III gt csa exon 1724588 1724810 0.796 - . Parent=mRNA218 III gt csa exon 1725626 1725883 0.905 - . Parent=mRNA218 III gt csa exon 1728036 1728084 1 - . Parent=mRNA218 III gt csa exon 1729126 1729418 1 - . Parent=mRNA218 III gt csa exon 1732543 1732692 1 - . Parent=mRNA218 III gt csa exon 1732928 1733090 1 - . Parent=mRNA218 ### III gt csa gene 1752185 1754928 . - . ID=gene147 III gt csa mRNA 1752185 1752773 . - . ID=mRNA219;Parent=gene147;Target=yk662d4.3 1 300 - III gt csa exon 1752185 1752363 1 - . Parent=mRNA219 III gt csa exon 1752588 1752653 1 - . Parent=mRNA219 III gt csa exon 1752719 1752773 1 - . Parent=mRNA219 III gt csa mRNA 1752791 1754928 . - . ID=mRNA220;Parent=gene147;Target=yk662d4.5 1 379 + III gt csa exon 1752791 1752886 0.865 - . Parent=mRNA220 III gt csa exon 1753877 1754092 0.995 - . Parent=mRNA220 III gt csa exon 1754866 1754928 1 - . Parent=mRNA220 ### III gt csa gene 1763529 1764816 . + . ID=gene148 III gt csa mRNA 1763529 1764816 . + . ID=mRNA221;Parent=gene148;Target=yk58h5.5 1 239 +,yk411g7.5 1 360 +,yk261e7.5 1 180 + III gt csa exon 1763529 1763655 0.984 + . Parent=mRNA221 III gt csa exon 1764575 1764816 0.996 + . Parent=mRNA221 ### III gt csa gene 1763606 1764825 . - . ID=gene149 III gt csa mRNA 1763606 1764825 . - . ID=mRNA222;Parent=gene149;Target=yk261e7.3 1 300 +,yk411g7.3 1 300 + III gt csa exon 1763606 1763648 1 - . Parent=mRNA222 III gt csa exon 1764567 1764825 0.95 - . Parent=mRNA222 ### III gt csa gene 1771090 1771264 . - . ID=gene150 III gt csa mRNA 1771090 1771264 . - . ID=mRNA223;Parent=gene150;Target=yk581g6.5 186 360 + III gt csa exon 1771090 1771264 0.954 - . Parent=mRNA223 ### III gt csa gene 1772556 1774226 . - . ID=gene151 III gt csa mRNA 1772556 1774226 . - . ID=mRNA224;Parent=gene151;Target=yk1484e10.3 1 505 -,yk655d4.3 1 300 -,yk541b2.3 1 300 -,yk550e12.3 1 300 - III gt csa exon 1772556 1772820 0.943 - . Parent=mRNA224 III gt csa exon 1773987 1774226 0.946 - . Parent=mRNA224 ### III gt csa gene 1775021 1777597 . - . ID=gene152 III gt csa mRNA 1775021 1777406 . - . ID=mRNA225;Parent=gene152;Target=yk543e1.5 1 360 +,yk541b2.5 7 360 + III gt csa exon 1775021 1775112 1 - . Parent=mRNA225 III gt csa exon 1775494 1775616 0.992 - . Parent=mRNA225 III gt csa exon 1775887 1775990 1 - . Parent=mRNA225 III gt csa exon 1777076 1777202 1 - . Parent=mRNA225 III gt csa exon 1777260 1777406 0.966 - . Parent=mRNA225 III gt csa mRNA 1775021 1777597 . - . ID=mRNA226;Parent=gene152;Target=yk543e1.5 1 360 +,yk1484e10.5 1 544 +,yk550e12.5 1 380 +,yk618c5.5 1 360 +,yk276b6.5 1 360 +,yk549f11.5 1 359 +,yk655d4.5 1 359 +,yk444c12.5 1 360 +,yk411g1.5 14 360 + III gt csa exon 1775021 1775112 1 - . Parent=mRNA226 III gt csa exon 1775494 1775616 0.992 - . Parent=mRNA226 III gt csa exon 1775887 1775990 1 - . Parent=mRNA226 III gt csa exon 1777076 1777214 1 - . Parent=mRNA226 III gt csa exon 1777260 1777406 0.993 - . Parent=mRNA226 III gt csa exon 1777492 1777597 1 - . Parent=mRNA226 ### III gt csa gene 1777799 1778203 . + . ID=gene153 III gt csa mRNA 1777799 1778203 . + . ID=mRNA227;Parent=gene153;Target=RP 1 41 +,BP 1 41 + III gt csa exon 1777799 1777904 1 + . Parent=mRNA227 III gt csa exon 1778187 1778203 1 + . Parent=mRNA227 ### III gt csa gene 1785208 1785635 . - . ID=gene154 III gt csa mRNA 1785208 1785635 . - . ID=mRNA228;Parent=gene154;Target=yk1303c12.3 24 419 + III gt csa exon 1785208 1785302 0.989 - . Parent=mRNA228 III gt csa exon 1785317 1785531 0.919 - . Parent=mRNA228 III gt csa exon 1785550 1785635 0.988 - . Parent=mRNA228 ### III gt csa gene 1807719 1818322 . - . ID=gene155 III gt csa mRNA 1807719 1809245 . - . ID=mRNA229;Parent=gene155;Target=yk750h11.5 1 183 +,yk1048a06.3 1 538 -,yk872f09.3 1 534 -,yk1102f12.3 1 536 -,yk1354g01.3 1 700 -,yk1490a04.3 1 496 -,yk530e1.3 1 300 -,yk264d2.3 1 300 -,yk501h12.3 1 300 -,yk407d6.3 1 300 - III gt csa exon 1807719 1807889 0.959 - . Parent=mRNA229 III gt csa exon 1807944 1808358 1 - . Parent=mRNA229 III gt csa exon 1809107 1809245 0.953 - . Parent=mRNA229 III gt csa mRNA 1807719 1815816 . - . ID=mRNA230;Parent=gene155;Target=yk750h11.5 1 183 +,yk871f07.3 1 702 -,yk1048a06.3 1 538 -,yk872f09.3 1 534 -,yk1102f12.3 1 536 -,yk1314a11.3 1 729 -,yk1091a04.3 1 689 -,yk1012a09.3 1 682 -,yk1297g02.3 1 682 -,yk1166d10.3 1 717 -,yk1036a09.3 1 696 -,yk1490a04.3 1 496 -,yk530e1.3 1 300 -,yk264d2.3 1 300 -,yk501h12.3 1 300 -,yk407d6.3 1 300 -,yk1755a05.3 1 696 -,WP 1 717 +,yk1048a06.5 1 607 +,yk264d2.5 1 240 +,yk501h12.5 1 375 +,yk407d6.5 1 360 +,yk1091a04.5 1 262 +,yk1755a05.5 1 598 +,yk1036a09.5 11 576 +,yk872f09.5 14 372 +,yk530e1.5 44 360 + III gt csa exon 1807719 1807889 0.959 - . Parent=mRNA230 III gt csa exon 1807944 1808363 1 - . Parent=mRNA230 III gt csa exon 1809107 1809381 1 - . Parent=mRNA230 III gt csa exon 1809679 1809822 1 - . Parent=mRNA230 III gt csa exon 1811041 1811363 1 - . Parent=mRNA230 III gt csa exon 1812744 1813091 1 - . Parent=mRNA230 III gt csa exon 1814386 1814835 1 - . Parent=mRNA230 III gt csa exon 1815432 1815557 1 - . Parent=mRNA230 III gt csa exon 1815760 1815816 0.269 - . Parent=mRNA230 III gt csa mRNA 1809707 1818322 . - . ID=mRNA231;Parent=gene155;Target=yk1048a06.5 1 607 +,yk264d2.5 1 240 +,yk501h12.5 1 375 +,yk407d6.5 1 360 +,yk1091a04.5 1 262 +,yk1755a05.5 1 598 +,yk1036a09.5 11 576 +,yk1166d10.5 1 559 +,yk1102f12.5 23 595 +,yk1314a11.5 1 585 +,yk1012a09.5 22 578 +,yk1297g02.5 23 533 +,yk1490a04.5 23 510 +,yk872f09.5 14 372 +,yk530e1.5 44 360 + III gt csa exon 1809707 1809822 0.983 - . Parent=mRNA231 III gt csa exon 1811041 1811363 1 - . Parent=mRNA231 III gt csa exon 1812744 1813091 1 - . Parent=mRNA231 III gt csa exon 1814386 1814835 0.998 - . Parent=mRNA231 III gt csa exon 1815432 1815557 1 - . Parent=mRNA231 III gt csa exon 1818254 1818322 0.906 - . Parent=mRNA231 ### III gt csa gene 1807745 1807902 . + . ID=gene156 III gt csa mRNA 1807745 1807902 . + . ID=mRNA232;Parent=gene156;Target=yk750h11.3 1 157 + III gt csa exon 1807745 1807902 0.968 + . Parent=mRNA232 ### III gt csa gene 1821203 1824103 . - . ID=gene157 III gt csa mRNA 1821203 1822732 . - . ID=mRNA233;Parent=gene157;Target=yk305g9.3 1 300 -,yk383c1.3 1 300 -,yk412f9.3 1 300 -,yk665f3.3 1 300 -,yk383c1.5 1 360 + III gt csa exon 1821203 1821412 1 - . Parent=mRNA233 III gt csa exon 1821473 1821557 1 - . Parent=mRNA233 III gt csa exon 1821604 1821711 1 - . Parent=mRNA233 III gt csa exon 1822654 1822732 1 - . Parent=mRNA233 III gt csa mRNA 1822859 1824103 . - . ID=mRNA234;Parent=gene157;Target=yk665f3.5 1 377 +,yk305g9.5 1 376 + III gt csa exon 1822859 1823006 1 - . Parent=mRNA234 III gt csa exon 1823643 1823760 1 - . Parent=mRNA234 III gt csa exon 1823964 1824103 1 - . Parent=mRNA234 ### III gt csa gene 1824908 1831849 . + . ID=gene158 III gt csa mRNA 1824908 1831849 . + . ID=mRNA235;Parent=gene158;Target=yk1471g06.5 23 598 + III gt csa exon 1824908 1824965 1 + . Parent=mRNA235 III gt csa exon 1825145 1825214 1 + . Parent=mRNA235 III gt csa exon 1827228 1827355 1 + . Parent=mRNA235 III gt csa exon 1830455 1830596 1 + . Parent=mRNA235 III gt csa exon 1830776 1830907 1 + . Parent=mRNA235 III gt csa exon 1831804 1831849 1 + . Parent=mRNA235 III gt csa mRNA 1824936 1827299 . + . ID=mRNA236;Parent=gene158;Target=yk428b11.5 1 360 + III gt csa exon 1824936 1824965 0.85 + . Parent=mRNA236 III gt csa exon 1825145 1825400 0.963 + . Parent=mRNA236 III gt csa exon 1827228 1827299 0.986 + . Parent=mRNA236 ### III gt csa gene 1833860 1834336 . - . ID=gene159 III gt csa mRNA 1833860 1834336 . - . ID=mRNA237;Parent=gene159;Target=yk1471g06.3 1 477 +,yk428b11.3 1 180 + III gt csa exon 1833860 1834336 0.918 - . Parent=mRNA237 ### III gt csa gene 1834502 1842946 . + . ID=gene160 III gt csa mRNA 1834502 1842946 . + . ID=mRNA238;Parent=gene160;Target=yk1579g04.5 24 347 +,yk392a4.5 7 371 +,yk1171d07.5 23 574 +,yk1521f03.5 23 574 +,yk1520e11.5 23 587 +,yk1537h08.5 23 589 +,yk614f12.5 1 360 +,yk273b4.5 1 360 +,yk1094h04.5 1 598 +,yk93h5.5 1 292 +,yk1521e10.5 1 446 +,yk460h8.5 1 360 +,yk240e10.5 1 374 +,yk163b1.5 2 360 +,yk14g9.5 1 360 + III gt csa exon 1834502 1834595 1 + . Parent=mRNA238 III gt csa exon 1836122 1836195 1 + . Parent=mRNA238 III gt csa exon 1836253 1836355 1 + . Parent=mRNA238 III gt csa exon 1837108 1837249 1 + . Parent=mRNA238 III gt csa exon 1838335 1838703 1 + . Parent=mRNA238 III gt csa exon 1838765 1838877 1 + . Parent=mRNA238 III gt csa exon 1840158 1840486 0.988 + . Parent=mRNA238 III gt csa exon 1841743 1841899 0.987 + . Parent=mRNA238 III gt csa exon 1842859 1842946 0.966 + . Parent=mRNA238 ### III gt csa gene 1844378 1846728 . + . ID=gene161 III gt csa mRNA 1844378 1846728 . + . ID=mRNA239;Parent=gene161;Target=yk1520e11.3 1 527 -,yk1521e10.3 1 432 -,yk1171d07.3 1 410 - III gt csa exon 1844378 1844512 0.904 + . Parent=mRNA239 III gt csa exon 1846336 1846728 0.919 + . Parent=mRNA239 ### III gt csa gene 1846366 1846740 . - . ID=gene162 III gt csa mRNA 1846366 1846740 . - . ID=mRNA240;Parent=gene162;Target=yk1094h04.3 1 361 +,yk14g9.3 1 373 +,yk1537h08.3 1 247 +,yk1521f03.3 1 204 +,yk1579g04.3 1 199 +,yk93h5.3 1 120 + III gt csa exon 1846366 1846740 0.965 - . Parent=mRNA240 ### III gt csa gene 1849052 1852447 . + . ID=gene163 III gt csa mRNA 1849052 1850827 . + . ID=mRNA241;Parent=gene163;Target=yk532h6.5 1 381 +,yk332d10.5 1 360 +,yk506e3.5 1 383 +,yk174g9.5 1 360 +,yk521e8.5 1 360 + III gt csa exon 1849052 1849121 0.964 + . Parent=mRNA241 III gt csa exon 1849263 1849349 1 + . Parent=mRNA241 III gt csa exon 1849404 1849502 1 + . Parent=mRNA241 III gt csa exon 1850353 1850445 1 + . Parent=mRNA241 III gt csa exon 1850707 1850827 1 + . Parent=mRNA241 III gt csa mRNA 1849294 1850837 . + . ID=mRNA242;Parent=gene163;Target=yk487d2.5 1 381 + III gt csa exon 1849294 1849350 0.939 + . Parent=mRNA242 III gt csa exon 1849404 1849502 1 + . Parent=mRNA242 III gt csa exon 1850353 1850445 1 + . Parent=mRNA242 III gt csa exon 1850707 1850837 0.992 + . Parent=mRNA242 III gt csa mRNA 1851033 1852447 . + . ID=mRNA243;Parent=gene163;Target=yk66f12.5 1 360 + III gt csa exon 1851033 1851113 1 + . Parent=mRNA243 III gt csa exon 1852169 1852447 0.993 + . Parent=mRNA243 ### III gt csa gene 1852263 1852877 . - . ID=gene164 III gt csa mRNA 1852263 1852562 . - . ID=mRNA244;Parent=gene164;Target=yk334d11.3 1 300 + III gt csa exon 1852263 1852562 0.997 - . Parent=mRNA244 III gt csa mRNA 1852697 1852877 . - . ID=mRNA245;Parent=gene164;Target=yk66f12.3 1 180 + III gt csa exon 1852697 1852877 0.925 - . Parent=mRNA245 ### III gt csa gene 1859880 1864478 . + . ID=gene165 III gt csa mRNA 1859880 1860325 . + . ID=mRNA246;Parent=gene165;Target=yk521e3.3 1 281 -,AF150086 1 252 +,RP 1 84 +,BP 1 84 +,yk521e3.5 1 337 + III gt csa exon 1859880 1860055 0.983 + . Parent=mRNA246 III gt csa exon 1860146 1860325 0.961 + . Parent=mRNA246 III gt csa mRNA 1860418 1864478 . + . ID=mRNA247;Parent=gene165;Target=yk1220d04.5 23 647 +,yk772h10.5 21 646 + III gt csa exon 1860418 1860607 1 + . Parent=mRNA247 III gt csa exon 1861659 1861816 1 + . Parent=mRNA247 III gt csa exon 1864021 1864120 1 + . Parent=mRNA247 III gt csa exon 1864301 1864478 1 + . Parent=mRNA247 ### III gt csa gene 1872178 1874286 . + . ID=gene166 III gt csa mRNA 1872178 1874286 . + . ID=mRNA248;Parent=gene166;Target=yk1220d04.3 1 668 - III gt csa exon 1872178 1872266 1 + . Parent=mRNA248 III gt csa exon 1873707 1874286 0.988 + . Parent=mRNA248 ### III gt csa gene 1874643 1877104 . + . ID=gene167 III gt csa mRNA 1874643 1877104 . + . ID=mRNA249;Parent=gene167;Target=yk772h10.3 1 592 - III gt csa exon 1874643 1874750 1 + . Parent=mRNA249 III gt csa exon 1875972 1876159 0.995 + . Parent=mRNA249 III gt csa exon 1876806 1877104 0.983 + . Parent=mRNA249 ### III gt csa gene 1878354 1880837 . + . ID=gene168 III gt csa mRNA 1878354 1880828 . + . ID=mRNA250;Parent=gene168;Target=yk1169f09.5 20 395 +,yk1473c02.3 1 783 -,yk1169f09.3 1 705 - III gt csa exon 1878354 1878595 0.996 + . Parent=mRNA250 III gt csa exon 1879233 1879361 1 + . Parent=mRNA250 III gt csa exon 1879426 1879560 1 + . Parent=mRNA250 III gt csa exon 1880174 1880328 1 + . Parent=mRNA250 III gt csa exon 1880625 1880828 1 + . Parent=mRNA250 III gt csa mRNA 1878558 1878800 . + . ID=mRNA251;Parent=gene168;Target=yk1251d11.5 1 243 + III gt csa exon 1878558 1878800 0.988 + . Parent=mRNA251 III gt csa mRNA 1879975 1880837 . + . ID=mRNA252;Parent=gene168;Target=yk1512g12.3 1 565 - III gt csa exon 1879975 1880328 1 + . Parent=mRNA252 III gt csa exon 1880625 1880837 0.991 + . Parent=mRNA252 ### III gt csa gene 1880375 1880798 . - . ID=gene169 III gt csa mRNA 1880375 1880798 . - . ID=mRNA253;Parent=gene169;Target=yk1251d11.3 1 424 + III gt csa exon 1880375 1880798 0.979 - . Parent=mRNA253 ### III gt csa gene 1883596 1886207 . - . ID=gene170 III gt csa mRNA 1883596 1886207 . - . ID=mRNA254;Parent=gene170;Target=WP 1 773 + III gt csa exon 1883596 1884789 1 - . Parent=mRNA254 III gt csa exon 1884882 1885107 1 - . Parent=mRNA254 III gt csa exon 1885194 1885938 1 - . Parent=mRNA254 III gt csa exon 1885987 1886117 1 - . Parent=mRNA254 III gt csa exon 1886185 1886207 1 - . Parent=mRNA254 ### III gt csa gene 1891444 1893894 . - . ID=gene171 III gt csa mRNA 1891444 1893894 . - . ID=mRNA255;Parent=gene171;Target=yk233a7.3 1 300 -,yk233a7.5 1 345 + III gt csa exon 1891444 1891508 1 - . Parent=mRNA255 III gt csa exon 1891927 1892079 0.993 - . Parent=mRNA255 III gt csa exon 1893273 1893544 0.969 - . Parent=mRNA255 III gt csa exon 1893825 1893894 0.929 - . Parent=mRNA255 ### III gt csa gene 1906128 1906538 . + . ID=gene172 III gt csa mRNA 1906128 1906538 . + . ID=mRNA256;Parent=gene172;Target=yk1723c04.5 1 340 + III gt csa exon 1906128 1906256 0.953 + . Parent=mRNA256 III gt csa exon 1906330 1906538 0.967 + . Parent=mRNA256 ### III gt csa gene 1907887 1910519 . + . ID=gene173 III gt csa mRNA 1907887 1910519 . + . ID=mRNA257;Parent=gene173;Target=yk1723c04.3 1 651 - III gt csa exon 1907887 1907987 0.901 + . Parent=mRNA257 III gt csa exon 1908176 1908310 1 + . Parent=mRNA257 III gt csa exon 1909274 1909432 1 + . Parent=mRNA257 III gt csa exon 1910268 1910519 1 + . Parent=mRNA257 ### III gt csa gene 1927666 1929298 . + . ID=gene174 III gt csa mRNA 1927666 1929298 . + . ID=mRNA258;Parent=gene174;Target=yk1053g10.5 17 224 +,yk1716g06.5 1 386 + III gt csa exon 1927666 1927938 1 + . Parent=mRNA258 III gt csa exon 1929095 1929298 0.995 + . Parent=mRNA258 ### III gt csa gene 1930845 1931242 . + . ID=gene175 III gt csa mRNA 1930845 1931242 . + . ID=mRNA259;Parent=gene175;Target=yk1564h09.5 1 398 + III gt csa exon 1930845 1931242 0.985 + . Parent=mRNA259 ### III gt csa gene 1932215 1939546 . + . ID=gene176 III gt csa mRNA 1932215 1939375 . + . ID=mRNA260;Parent=gene176;Target=yk1222g11.5 1 557 +,yk652e1.5 1 383 +,yk205e6.5 1 373 +,yk677h7.5 1 354 +,yk638h1.5 1 360 +,yk205h4.5 1 360 +,yk252c12.3 1 300 + III gt csa exon 1932215 1932363 1 + . Parent=mRNA260 III gt csa exon 1934173 1934512 1 + . Parent=mRNA260 III gt csa exon 1936356 1936529 1 + . Parent=mRNA260 III gt csa exon 1937670 1938089 1 + . Parent=mRNA260 III gt csa exon 1939008 1939375 0.983 + . Parent=mRNA260 III gt csa mRNA 1934173 1939534 . + . ID=mRNA261;Parent=gene176;Target=yk1716g06.3 35 413 - III gt csa exon 1934173 1934226 0.87 + . Parent=mRNA261 III gt csa exon 1939167 1939225 0.814 + . Parent=mRNA261 III gt csa exon 1939269 1939534 0.94 + . Parent=mRNA261 III gt csa mRNA 1938000 1939546 . + . ID=mRNA262;Parent=gene176;Target=yk1596d03.3 1 585 -,yk252c12.3 1 300 + III gt csa exon 1938000 1938047 0.833 + . Parent=mRNA262 III gt csa exon 1939008 1939546 0.954 + . Parent=mRNA262 III gt csa mRNA 1938966 1939375 . + . ID=mRNA263;Parent=gene176;Target=yk440d6.5 1 360 +,yk252c12.3 1 300 + III gt csa exon 1938966 1939375 0.983 + . Parent=mRNA263 ### III gt csa gene 1939092 1943594 . - . ID=gene177 III gt csa mRNA 1939092 1939557 . - . ID=mRNA264;Parent=gene177;Target=yk864f11.3 1 360 +,CEESA81F 1 359 +,yk1618b12.3 1 264 +,yk1222g11.3 1 206 + III gt csa exon 1939092 1939557 0.969 - . Parent=mRNA264 III gt csa mRNA 1939558 1943594 . - . ID=mRNA265;Parent=gene177;Target=yk95d7.3 1 326 -,yk410b4.3 1 300 -,yk410b4.5 1 360 +,yk95d7.5 1 309 +,yk56h1.5 1 292 + III gt csa exon 1939558 1939643 1 - . Parent=mRNA265 III gt csa exon 1940648 1940818 1 - . Parent=mRNA265 III gt csa exon 1941527 1941644 1 - . Parent=mRNA265 III gt csa exon 1941693 1941742 1 - . Parent=mRNA265 III gt csa exon 1943454 1943594 1 - . Parent=mRNA265 ### III gt csa gene 1945109 1961934 . - . ID=gene178 III gt csa mRNA 1945109 1950246 . - . ID=mRNA266;Parent=gene178;Target=AB244413 1 1755 +,yk604a10.3 1 300 -,yk411e9.3 1 300 -,cm12f1.5 1 418 +,yk411e9.5 1 360 +,yk604a10.5 1 360 + III gt csa exon 1945109 1945261 1 - . Parent=mRNA266 III gt csa exon 1946058 1946234 1 - . Parent=mRNA266 III gt csa exon 1946292 1946488 1 - . Parent=mRNA266 III gt csa exon 1947633 1948044 1 - . Parent=mRNA266 III gt csa exon 1948959 1949134 1 - . Parent=mRNA266 III gt csa exon 1949218 1949422 1 - . Parent=mRNA266 III gt csa exon 1949713 1949872 1 - . Parent=mRNA266 III gt csa exon 1949921 1950067 1 - . Parent=mRNA266 III gt csa exon 1950119 1950246 1 - . Parent=mRNA266 III gt csa mRNA 1951049 1951408 . - . ID=mRNA267;Parent=gene178;Target=yk492f11.3 1 300 +,yk453a11.3 1 300 +,yk199f2.3 1 300 +,yk558h2.3 1 300 +,yk281d11.3 1 300 +,yk278c2.3 1 300 +,yk229f4.3 1 300 +,yk483c3.3 1 300 +,yk615h4.3 1 300 +,yk647d12.3 1 300 +,yk448f2.3 1 283 +,yk551b11.3 1 284 +,yk448c12.3 1 289 +,yk457d7.3 1 293 +,yk446a5.3 1 300 +,yk664b3.3 1 300 +,yk602c4.3 1 285 +,yk253d3.3 1 287 +,yk516c9.3 1 288 +,yk645g1.3 1 288 +,yk646a8.3 1 288 +,yk140h11.3 1 289 +,yk116e3.3 1 338 +,yk60a11.3 1 336 +,yk497d11.3 1 269 +,yk330h9.3 1 270 +,yk800a07.3 1 300 +,yk494c8.3 1 240 +,yk373f11.3 1 240 +,yk222d9.3 1 227 + III gt csa exon 1951049 1951408 0.991 - . Parent=mRNA267 III gt csa mRNA 1952007 1961934 . - . ID=mRNA268;Parent=gene178;Target=yk1042c08.3 1 509 -,yk1611f05.3 1 724 -,yk1039c09.3 1 700 -,yk1339d07.3 1 770 -,yk1391f02.3 1 685 -,yk1444h05.3 1 727 -,yk1720g01.3 1 727 -,yk1372c05.3 1 768 -,yk1372c06.3 1 792 -,yk837g07.3 1 699 -,yk1474e07.3 1 717 -,yk63f12.3 1 325 -,yk1618b03.3 1 688 -,yk1672e09.3 1 756 -,yk1483a12.3 1 757 -,yk1556a02.3 1 756 -,yk1592b08.3 1 737 -,yk1755g08.3 1 759 -,yk376f5.3 1 300 -,yk312g4.3 1 300 -,yk474e3.3 1 300 -,yk603e10.3 1 300 -,yk470a7.3 1 300 -,yk453c10.3 1 300 -,yk645b1.3 1 300 -,yk577a10.3 1 300 -,yk163e8.3 1 300 -,yk142b8.3 1 300 -,yk187h9.3 1 300 -,yk740a4.3 1 300 -,yk520b2.5 1 358 +,yk577a10.5 1 360 +,yk1703a04.5 1 564 +,yk163e8.5 1 360 +,yk474e3.5 1 360 +,yk1672e09.5 15 652 +,yk1556a02.5 17 620 +,yk470a7.5 1 360 +,yk1339d07.5 23 658 +,yk1042c08.5 23 622 +,yk1660c12.5 23 621 +,yk1474e07.5 24 621 +,yk1618b03.5 23 619 +,yk1720g01.5 22 616 +,yk1611f05.5 23 616 +,yk1755g08.5 23 611 +,yk1444h05.5 23 606 +,yk1039c09.5 23 597 +,yk1592b08.5 23 595 +,yk1654a06.5 23 578 +,yk773f01.5 23 532 +,yk1483a12.5 23 518 +,yk645b1.5 1 383 +,yk603e10.5 1 382 +,yk228a2.5 1 360 +,yk312g4.5 1 372 +,yk837g07.5 1 376 +,yk376f5.5 1 360 +,yk453c10.5 1 360 +,yk142b8.5 1 372 +,yk63f12.5 1 320 +,yk740a4.5 23 340 +,yk187h9.5 1 240 +,yk1391f02.5 23 218 + III gt csa exon 1952007 1952267 0.99 - . Parent=mRNA268 III gt csa exon 1953525 1953831 1 - . Parent=mRNA268 III gt csa exon 1954624 1954728 1 - . Parent=mRNA268 III gt csa exon 1956031 1956288 0.971 - . Parent=mRNA268 III gt csa exon 1957574 1957668 1 - . Parent=mRNA268 III gt csa exon 1957716 1957848 1 - . Parent=mRNA268 III gt csa exon 1959816 1960116 1 - . Parent=mRNA268 III gt csa exon 1961827 1961934 1 - . Parent=mRNA268 III gt csa mRNA 1952007 1961934 . - . ID=mRNA269;Parent=gene178;Target=yk1042c08.3 1 509 -,yk63f12.3 1 325 -,yk376f5.3 1 300 -,yk312g4.3 1 300 -,yk474e3.3 1 300 -,yk603e10.3 1 300 -,yk470a7.3 1 300 -,yk453c10.3 1 300 -,yk645b1.3 1 300 -,yk577a10.3 1 300 -,yk163e8.3 1 300 -,yk142b8.3 1 300 -,yk187h9.3 1 300 -,yk740a4.3 1 300 -,BP 1 492 +,yk520b2.5 1 358 +,yk577a10.5 1 360 +,yk163e8.5 1 360 +,yk474e3.5 1 360 +,yk1672e09.5 15 652 +,yk1556a02.5 17 620 +,yk470a7.5 1 360 +,yk1339d07.5 23 658 +,yk1042c08.5 23 622 +,yk1660c12.5 23 621 +,yk1474e07.5 24 621 +,yk1618b03.5 23 619 +,yk1720g01.5 22 616 +,yk1611f05.5 23 616 +,yk1755g08.5 23 611 +,yk1444h05.5 23 606 +,yk1039c09.5 23 597 +,yk1592b08.5 23 595 +,yk1654a06.5 23 578 +,yk773f01.5 23 532 +,yk1483a12.5 23 518 +,yk645b1.5 1 383 +,yk603e10.5 1 382 +,yk228a2.5 1 360 +,yk312g4.5 1 372 +,yk837g07.5 1 376 +,yk376f5.5 1 360 +,yk453c10.5 1 360 +,yk142b8.5 1 372 +,yk63f12.5 1 320 +,yk740a4.5 23 340 +,yk187h9.5 1 240 +,yk1391f02.5 23 218 + III gt csa exon 1952007 1952267 0.99 - . Parent=mRNA269 III gt csa exon 1953525 1953878 0.832 - . Parent=mRNA269 III gt csa exon 1954624 1954728 0.987 - . Parent=mRNA269 III gt csa exon 1956031 1956288 0.913 - . Parent=mRNA269 III gt csa exon 1957574 1957668 1 - . Parent=mRNA269 III gt csa exon 1957716 1957848 1 - . Parent=mRNA269 III gt csa exon 1959816 1960116 1 - . Parent=mRNA269 III gt csa exon 1961827 1961934 1 - . Parent=mRNA269 III gt csa mRNA 1952017 1961934 . - . ID=mRNA270;Parent=gene178;Target=yk1660c12.3 1 703 -,yk63f12.3 1 325 -,yk376f5.3 1 300 -,yk312g4.3 1 300 -,yk474e3.3 1 300 -,yk603e10.3 1 300 -,yk470a7.3 1 300 -,yk453c10.3 1 300 -,yk645b1.3 1 300 -,yk577a10.3 1 300 -,yk163e8.3 1 300 -,yk142b8.3 1 300 -,yk187h9.3 1 300 -,yk740a4.3 1 300 -,yk520b2.5 1 358 +,yk163e8.5 1 360 +,yk474e3.5 1 360 +,yk1672e09.5 15 652 +,yk1556a02.5 17 620 +,yk470a7.5 1 360 +,yk1339d07.5 23 658 +,yk1042c08.5 23 622 +,yk1660c12.5 23 621 +,yk1474e07.5 24 621 +,yk1618b03.5 23 619 +,yk1720g01.5 22 616 +,yk1611f05.5 23 616 +,yk1755g08.5 23 611 +,yk1444h05.5 23 606 +,yk1039c09.5 23 597 +,yk1592b08.5 23 595 +,yk1654a06.5 23 578 +,yk773f01.5 23 532 +,yk1483a12.5 23 518 +,yk645b1.5 1 383 +,yk603e10.5 1 382 +,yk228a2.5 1 360 +,yk312g4.5 1 372 +,yk837g07.5 1 376 +,yk376f5.5 1 360 +,yk453c10.5 1 360 +,yk142b8.5 1 372 +,yk63f12.5 1 320 +,yk740a4.5 23 340 +,yk187h9.5 1 240 +,yk1391f02.5 23 218 + III gt csa exon 1952017 1952267 0.996 - . Parent=mRNA270 III gt csa exon 1953525 1953758 1 - . Parent=mRNA270 III gt csa exon 1954640 1954728 1 - . Parent=mRNA270 III gt csa exon 1956031 1956288 0.971 - . Parent=mRNA270 III gt csa exon 1957574 1957668 1 - . Parent=mRNA270 III gt csa exon 1957716 1957848 1 - . Parent=mRNA270 III gt csa exon 1959816 1960116 1 - . Parent=mRNA270 III gt csa exon 1961827 1961934 1 - . Parent=mRNA270 III gt csa mRNA 1953222 1956293 . - . ID=mRNA271;Parent=gene178;Target=RP 1 244 +,yk1703a04.5 1 564 + III gt csa exon 1953222 1953278 0.12 - . Parent=mRNA271 III gt csa exon 1953525 1953831 0.944 - . Parent=mRNA271 III gt csa exon 1954624 1954728 1 - . Parent=mRNA271 III gt csa exon 1956031 1956293 0.883 - . Parent=mRNA271 III gt csa mRNA 1959320 1959824 . - . ID=mRNA272;Parent=gene178;Target=yk1245c12.5 1 503 + III gt csa exon 1959320 1959824 0.994 - . Parent=mRNA272 ### III gt csa gene 1950524 1952513 . + . ID=gene179 III gt csa mRNA 1950524 1951426 . + . ID=mRNA273;Parent=gene179;Target=yk1454g11.3 198 646 -,yk1066a07.3 236 686 -,yk1507e02.3 254 710 -,yk1678d01.3 237 693 -,yk1370c12.3 200 660 -,yk1370d03.3 236 711 -,yk1479a03.3 200 674 -,yk1537d05.3 202 677 -,yk1327d02.3 262 742 -,yk457d7.5 1 376 +,yk602c4.5 1 372 +,yk664b3.5 1 376 +,yk647d12.5 1 383 +,yk229f4.5 1 374 +,yk1020a05.3 1 468 -,yk1020a05.5 1 481 +,yk1016a08.3 23 271 -,yk116e3.5 1 360 +,yk1064e06.3 23 443 -,yk1151e09.3 23 447 -,yk1580b09.3 23 449 -,yk1587h09.3 35 461 -,yk1594g06.3 23 449 -,yk1362f01.3 23 459 -,yk1393f05.3 23 459 -,yk1521b10.5 23 466 +,yk1521b10.3 23 467 -,yk892h07.5 23 471 +,yk1176h06.3 24 475 -,yk1155e04.3 23 473 -,yk1291e10.3 23 473 -,yk892h07.3 23 473 -,yk1159h09.3 23 473 -,yk1130b02.3 23 485 -,yk1125f08.3 23 485 -,yk1693h02.5 23 487 +,yk1025d03.5 23 490 +,yk1064e06.5 23 495 +,yk1155e04.5 23 496 +,yk1291e10.5 23 496 +,yk1176h06.5 23 496 +,yk1362f01.5 23 496 +,yk1580b09.5 23 496 +,yk1130b02.5 23 498 +,yk1151e09.5 23 498 +,yk1016a08.5 23 498 +,yk1159h09.5 23 498 +,yk1587h09.5 23 498 +,yk1594g06.5 23 498 +,yk1125f08.5 23 499 +,yk1393f05.5 23 499 +,yk199f2.5 1 377 +,yk497d11.5 1 380 +,yk645g1.5 1 375 +,yk483c3.5 1 378 +,yk253d3.5 1 379 +,yk615h4.5 1 376 +,yk281d11.5 1 360 +,yk330h9.5 1 360 +,yk446a5.5 1 377 +,yk498f9.5 1 360 +,yk453a11.5 1 360 +,yk326h8.5 1 360 +,yk140h11.5 1 360 +,yk627c5.5 1 360 +,FLYBASE 1 131 +,BP 1 131 +,RP 1 131 +,yk448c12.5 1 360 +,yk373f11.5 1 360 +,yk60a11.5 1 360 +,SW 1 130 +,yk476f7.5 1 360 +,yk516c9.5 1 360 +,yk448f2.5 1 360 +,yk558h2.5 1 360 +,yk494c8.5 1 360 +,yk492f11.5 1 360 +,yk551b11.5 1 360 +,yk646a8.5 1 360 +,yk278c2.5 1 374 +,yk471g11.5 1 360 -,yk222d9.5 1 302 +,yk814a07.5 1 104 + III gt csa exon 1950524 1950539 0.938 + . Parent=mRNA273 III gt csa exon 1950634 1950760 0.969 + . Parent=mRNA273 III gt csa exon 1951062 1951426 0.975 + . Parent=mRNA273 III gt csa mRNA 1950628 1951426 . + . ID=mRNA274;Parent=gene179;Target=yk778a10.5 1 197 +,yk779g10.3 1 447 -,yk1617c03.3 1 461 -,yk1369h11.3 1 472 -,yk1369h11.5 1 479 +,yk1617c03.5 1 493 +,yk890g04.3 1 447 -,yk1010f03.3 1 462 -,yk890g04.5 1 477 +,yk1010f03.5 1 494 +,yk779g10.5 1 495 +,yk1160b11.5 84 440 +,yk1660d01.3 144 579 -,yk1450d10.3 220 663 -,yk1470f08.3 228 671 -,yk1691a10.3 178 621 -,yk1711g11.3 170 613 -,yk1319b02.3 270 730 -,yk1160b11.3 84 545 -,yk457d7.5 1 376 +,yk602c4.5 1 372 +,yk664b3.5 1 376 +,yk647d12.5 1 383 +,yk229f4.5 1 374 +,yk1020a05.3 1 468 -,yk1020a05.5 1 481 +,yk1016a08.3 23 271 -,yk116e3.5 1 360 +,yk1064e06.3 23 443 -,yk1151e09.3 23 447 -,yk1580b09.3 23 449 -,yk1587h09.3 35 461 -,yk1594g06.3 23 449 -,yk1362f01.3 23 459 -,yk1393f05.3 23 459 -,yk1521b10.5 23 466 +,yk1521b10.3 23 467 -,yk892h07.5 23 471 +,yk1176h06.3 24 475 -,yk1155e04.3 23 473 -,yk1291e10.3 23 473 -,yk892h07.3 23 473 -,yk1159h09.3 23 473 -,yk1130b02.3 23 485 -,yk1125f08.3 23 485 -,yk1693h02.5 23 487 +,yk1025d03.5 23 490 +,yk1064e06.5 23 495 +,yk1155e04.5 23 496 +,yk1291e10.5 23 496 +,yk1176h06.5 23 496 +,yk1362f01.5 23 496 +,yk1580b09.5 23 496 +,yk1130b02.5 23 498 +,yk1151e09.5 23 498 +,yk1016a08.5 23 498 +,yk1159h09.5 23 498 +,yk1587h09.5 23 498 +,yk1594g06.5 23 498 +,yk1125f08.5 23 499 +,yk1393f05.5 23 499 +,yk199f2.5 1 377 +,yk497d11.5 1 380 +,yk645g1.5 1 375 +,yk483c3.5 1 378 +,yk253d3.5 1 379 +,yk615h4.5 1 376 +,yk281d11.5 1 360 +,yk330h9.5 1 360 +,yk446a5.5 1 377 +,yk498f9.5 1 360 +,yk453a11.5 1 360 +,yk326h8.5 1 360 +,yk140h11.5 1 360 +,yk627c5.5 1 360 +,FLYBASE 1 131 +,BP 1 131 +,RP 1 131 +,yk448c12.5 1 360 +,yk373f11.5 1 360 +,yk60a11.5 1 360 +,SW 1 130 +,yk476f7.5 1 360 +,yk516c9.5 1 360 +,yk448f2.5 1 360 +,yk558h2.5 1 360 +,yk494c8.5 1 360 +,yk492f11.5 1 360 +,yk551b11.5 1 360 +,yk646a8.5 1 360 +,yk278c2.5 1 374 +,yk471g11.5 1 360 -,yk222d9.5 1 302 +,yk814a07.5 1 104 + III gt csa exon 1950628 1950760 0.947 + . Parent=mRNA274 III gt csa exon 1951062 1951426 0.975 + . Parent=mRNA274 III gt csa mRNA 1950628 1951721 . + . ID=mRNA275;Parent=gene179;Target=yk778a10.5 1 197 +,yk779g10.3 1 447 -,yk1617c03.3 1 461 -,yk1369h11.3 1 472 -,yk1369h11.5 1 479 +,yk890g04.3 1 447 -,yk1010f03.3 1 462 -,yk890g04.5 1 477 +,yk1160b11.5 84 440 +,yk1660d01.3 144 579 -,yk1450d10.3 220 663 -,yk1470f08.3 228 671 -,yk1691a10.3 178 621 -,yk1711g11.3 170 613 -,yk1319b02.3 270 730 -,yk1160b11.3 84 545 -,yk457d7.5 1 376 +,yk602c4.5 1 372 +,yk664b3.5 1 376 +,yk647d12.5 1 383 +,yk229f4.5 1 374 +,yk1016a08.3 23 271 -,yk116e3.5 1 360 +,yk1064e06.3 23 443 -,yk1151e09.3 23 447 -,yk1580b09.3 23 449 -,yk1587h09.3 35 461 -,yk1594g06.3 23 449 -,yk1362f01.3 23 459 -,yk1393f05.3 23 459 -,yk1521b10.5 23 466 +,yk1521b10.3 23 467 -,yk892h07.5 23 471 +,yk1176h06.3 24 475 -,yk1155e04.3 23 473 -,yk1291e10.3 23 473 -,yk892h07.3 23 473 -,yk1159h09.3 23 473 -,yk199f2.5 1 377 +,yk497d11.5 1 380 +,yk645g1.5 1 375 +,yk483c3.5 1 378 +,yk253d3.5 1 379 +,yk615h4.5 1 376 +,yk281d11.5 1 360 +,yk330h9.5 1 360 +,yk446a5.5 1 377 +,yk498f9.5 1 360 +,yk453a11.5 1 360 +,yk326h8.5 1 360 +,yk140h11.5 1 360 +,yk627c5.5 1 360 +,FLYBASE 1 131 +,BP 1 131 +,RP 1 131 +,yk448c12.5 1 360 +,yk373f11.5 1 360 +,yk60a11.5 1 360 +,SW 1 130 +,yk476f7.5 1 360 +,yk516c9.5 1 360 +,yk448f2.5 1 360 +,yk558h2.5 1 360 +,yk494c8.5 1 360 +,yk492f11.5 1 360 +,yk551b11.5 1 360 +,yk646a8.5 1 360 +,yk278c2.5 1 374 +,yk471g11.5 1 360 -,CK580762 1 219 + III gt csa exon 1950628 1950760 0.947 + . Parent=mRNA275 III gt csa exon 1951062 1951411 0.995 + . Parent=mRNA275 III gt csa exon 1951713 1951721 0.556 + . Parent=mRNA275 III gt csa mRNA 1951519 1952513 . + . ID=mRNA276;Parent=gene179;Target=yk372d12.5 1 375 +,yk372d12.3 1 300 -,yk1703a04.3 1 500 + III gt csa exon 1951519 1951659 0.982 + . Parent=mRNA276 III gt csa exon 1951713 1951829 1 + . Parent=mRNA276 III gt csa exon 1951902 1952513 0.991 + . Parent=mRNA276 ### III gt csa gene 1963554 1970446 . - . ID=gene180 III gt csa mRNA 1963554 1970446 . - . ID=mRNA277;Parent=gene180;Target=yk23e3.3 1 390 -,WP 1 1309 +,yk23e3.5 1 360 + III gt csa exon 1963554 1963898 0.975 - . Parent=mRNA277 III gt csa exon 1963953 1964107 1 - . Parent=mRNA277 III gt csa exon 1964993 1965165 1 - . Parent=mRNA277 III gt csa exon 1966002 1966439 1 - . Parent=mRNA277 III gt csa exon 1966813 1967020 0.987 - . Parent=mRNA277 III gt csa exon 1967077 1967198 0.91 - . Parent=mRNA277 III gt csa exon 1967254 1969663 1 - . Parent=mRNA277 III gt csa exon 1970232 1970363 1 - . Parent=mRNA277 III gt csa exon 1970410 1970446 1 - . Parent=mRNA277 ### III gt csa gene 1971220 1975502 . - . ID=gene181 III gt csa mRNA 1971220 1975502 . - . ID=mRNA278;Parent=gene181;Target=WP 1 1166 + III gt csa exon 1971220 1971570 1 - . Parent=mRNA278 III gt csa exon 1971619 1971773 1 - . Parent=mRNA278 III gt csa exon 1971899 1972068 1 - . Parent=mRNA278 III gt csa exon 1972118 1972501 1 - . Parent=mRNA278 III gt csa exon 1972550 1972766 1 - . Parent=mRNA278 III gt csa exon 1973235 1973470 1 - . Parent=mRNA278 III gt csa exon 1973518 1975502 1 - . Parent=mRNA278 ### III gt csa gene 1977303 1980450 . + . ID=gene182 III gt csa mRNA 1977303 1980450 . + . ID=mRNA279;Parent=gene182;Target=WP 1 874 + III gt csa exon 1977303 1977441 1 + . Parent=mRNA279 III gt csa exon 1977492 1977554 1 + . Parent=mRNA279 III gt csa exon 1977881 1978741 1 + . Parent=mRNA279 III gt csa exon 1978792 1979883 1 + . Parent=mRNA279 III gt csa exon 1979937 1980162 1 + . Parent=mRNA279 III gt csa exon 1980210 1980450 1 + . Parent=mRNA279 ### III gt csa gene 1980811 1982635 . - . ID=gene183 III gt csa mRNA 1980811 1982635 . - . ID=mRNA280;Parent=gene183;Target=WP 1 324 + III gt csa exon 1980811 1980995 1 - . Parent=mRNA280 III gt csa exon 1981163 1981517 1 - . Parent=mRNA280 III gt csa exon 1981877 1982017 1 - . Parent=mRNA280 III gt csa exon 1982226 1982322 1 - . Parent=mRNA280 III gt csa exon 1982442 1982635 1 - . Parent=mRNA280 ### genometools-1.5.1/testdata/nGASP/resIIIcds.gff3000066400000000000000000006200541211610345200211610ustar00rootroot00000000000000##gff-version 3 ##sequence-region III 1000001 2000000 III gt csa gene 1001124 1001929 . + . ID=gene1 III gt csa mRNA 1001124 1001415 . + . ID=mRNA1;Parent=gene1;Target=CESAC87R 1 276 +,CEESA72R 1 286 + III gt csa exon 1001124 1001415 0.961 + . Parent=mRNA1 III gt csa mRNA 1001583 1001929 . + . ID=mRNA2;Parent=gene1;Target=yk1113e09.3 16 235 -,yk1113e09.5 16 273 + III gt csa exon 1001583 1001711 1 + . Parent=mRNA2 III gt cds CDS 1001596 1001711 . + 0 ID=CDS1;Parent=mRNA2 III gt cds CDS 1001801 1001882 . + 1 ID=CDS1;Parent=mRNA2 III gt csa exon 1001801 1001929 0.961 + . Parent=mRNA2 ### III gt csa gene 1002693 1006177 . + . ID=gene2 III gt csa mRNA 1002693 1006177 . + . ID=mRNA3;Parent=gene2;Target=yk1191d02.5 1 502 +,yk741d1.5 1 337 +,yk119f11.5 1 360 +,yk263f3.5 1 360 +,yk1191d02.3 1 625 -,yk263f3.3 1 300 -,yk741d1.3 1 300 -,yk735g1.3 1 197 - III gt csa exon 1002693 1002823 0.985 + . Parent=mRNA3 III gt cds CDS 1002714 1002823 . + 0 ID=CDS2;Parent=mRNA3 III gt csa exon 1003572 1003690 1 + . Parent=mRNA3 III gt cds CDS 1003572 1003690 . + 1 ID=CDS2;Parent=mRNA3 III gt csa exon 1003754 1003876 1 + . Parent=mRNA3 III gt cds CDS 1003754 1003876 . + 2 ID=CDS2;Parent=mRNA3 III gt csa exon 1003923 1004051 1 + . Parent=mRNA3 III gt cds CDS 1003923 1004051 . + 2 ID=CDS2;Parent=mRNA3 III gt csa exon 1004874 1004992 1 + . Parent=mRNA3 III gt cds CDS 1004874 1004992 . + 2 ID=CDS2;Parent=mRNA3 III gt csa exon 1005039 1005141 1 + . Parent=mRNA3 III gt cds CDS 1005039 1005141 . + 0 ID=CDS2;Parent=mRNA3 III gt csa exon 1005251 1005368 1 + . Parent=mRNA3 III gt cds CDS 1005251 1005368 . + 2 ID=CDS2;Parent=mRNA3 III gt csa exon 1005890 1006050 1 + . Parent=mRNA3 III gt cds CDS 1005890 1006050 . + 1 ID=CDS2;Parent=mRNA3 III gt cds CDS 1006097 1006176 . + 2 ID=CDS2;Parent=mRNA3 III gt csa exon 1006097 1006177 0.975 + . Parent=mRNA3 ### III gt csa gene 1010540 1011351 . + . ID=gene3 III gt csa mRNA 1010540 1011351 . + . ID=mRNA4;Parent=gene3;Target=yk708f5.5 1 316 +,WP 1 199 +,yk708f5.3 1 212 - III gt csa exon 1010540 1010705 0.994 + . Parent=mRNA4 III gt cds CDS 1010547 1010705 . + 0 ID=CDS3;Parent=mRNA4 III gt csa exon 1010749 1010997 1 + . Parent=mRNA4 III gt cds CDS 1010749 1010997 . + 0 ID=CDS3;Parent=mRNA4 III gt csa exon 1011163 1011351 1 + . Parent=mRNA4 III gt cds CDS 1011163 1011351 . + 0 ID=CDS3;Parent=mRNA4 ### III gt csa gene 1020968 1021291 . + . ID=gene4 III gt csa mRNA 1020968 1021291 . + . ID=mRNA5;Parent=gene4;Target=WP 1 87 + III gt csa exon 1020968 1021129 1 + . Parent=mRNA5 III gt cds CDS 1020968 1021129 . + 0 ID=CDS4;Parent=mRNA5 III gt csa exon 1021193 1021291 1 + . Parent=mRNA5 III gt cds CDS 1021193 1021291 . + 0 ID=CDS4;Parent=mRNA5 ### III gt csa gene 1023281 1023580 . + . ID=gene5 III gt csa mRNA 1023281 1023580 . + . ID=mRNA6;Parent=gene5;Target=yk720d6.3 1 300 + III gt csa exon 1023281 1023580 0.997 + . Parent=mRNA6 ### III gt csa gene 1023729 1024566 . - . ID=gene6 III gt csa mRNA 1023729 1024566 . - . ID=mRNA7;Parent=gene6;Target=yk720d6.5 1 335 + III gt csa exon 1023729 1023771 1 - . Parent=mRNA7 III gt cds CDS 1023729 1023771 . - 1 ID=CDS5;Parent=mRNA7 III gt csa exon 1023816 1023910 0.953 - . Parent=mRNA7 III gt cds CDS 1023816 1023910 . - 0 ID=CDS5;Parent=mRNA7 III gt cds CDS 1024370 1024531 . - 0 ID=CDS5;Parent=mRNA7 III gt csa exon 1024370 1024566 0.964 - . Parent=mRNA7 ### III gt csa gene 1026929 1028347 . - . ID=gene7 III gt csa mRNA 1026929 1028347 . - . ID=mRNA8;Parent=gene7;Target=WP 1 192 +,yk1105f03.3 41 639 -,yk1105f03.5 41 543 + III gt csa exon 1026929 1027102 1 - . Parent=mRNA8 III gt cds CDS 1026929 1027102 . - 0 ID=CDS6;Parent=mRNA8 III gt csa exon 1027314 1027467 1 - . Parent=mRNA8 III gt cds CDS 1027314 1027467 . - 1 ID=CDS6;Parent=mRNA8 III gt csa exon 1027515 1027609 1 - . Parent=mRNA8 III gt cds CDS 1027515 1027609 . - 0 ID=CDS6;Parent=mRNA8 III gt cds CDS 1028167 1028319 . - 0 ID=CDS6;Parent=mRNA8 III gt csa exon 1028167 1028347 1 - . Parent=mRNA8 ### III gt csa gene 1028790 1037200 . - . ID=gene8 III gt csa mRNA 1028790 1031062 . - . ID=mRNA9;Parent=gene8;Target=WP 1 227 + III gt csa exon 1028790 1028969 1 - . Parent=mRNA9 III gt cds CDS 1028790 1028969 . - 0 ID=CDS7;Parent=mRNA9 III gt csa exon 1029692 1029845 1 - . Parent=mRNA9 III gt cds CDS 1029692 1029845 . - 1 ID=CDS7;Parent=mRNA9 III gt csa exon 1029891 1029985 1 - . Parent=mRNA9 III gt cds CDS 1029891 1029985 . - 0 ID=CDS7;Parent=mRNA9 III gt cds CDS 1030811 1031014 . - 0 ID=CDS7;Parent=mRNA9 III gt csa exon 1030811 1031062 0.933 - . Parent=mRNA9 III gt csa mRNA 1031337 1037200 . - . ID=mRNA10;Parent=gene8;Target=yk1677a04.3 1 666 -,yk1707c12.3 1 704 -,RP 1 422 +,yk1677a04.5 1 607 +,yk1707c12.5 23 589 +,yk623f3.5 1 360 + III gt csa exon 1031337 1031862 0.994 - . Parent=mRNA10 III gt cds CDS 1031704 1031862 . - 0 ID=CDS8;Parent=mRNA10 III gt csa exon 1032740 1032809 1 - . Parent=mRNA10 III gt cds CDS 1032740 1032809 . - 1 ID=CDS8;Parent=mRNA10 III gt csa exon 1033111 1033262 1 - . Parent=mRNA10 III gt cds CDS 1033111 1033262 . - 0 ID=CDS8;Parent=mRNA10 III gt csa exon 1034167 1034457 1 - . Parent=mRNA10 III gt cds CDS 1034167 1034457 . - 0 ID=CDS8;Parent=mRNA10 III gt csa exon 1034874 1035024 0.898 - . Parent=mRNA10 III gt cds CDS 1034874 1035024 . - 1 ID=CDS8;Parent=mRNA10 III gt csa exon 1036294 1036442 1 - . Parent=mRNA10 III gt cds CDS 1036294 1036442 . - 0 ID=CDS8;Parent=mRNA10 III gt csa exon 1036772 1036888 1 - . Parent=mRNA10 III gt cds CDS 1036772 1036888 . - 0 ID=CDS8;Parent=mRNA10 III gt csa exon 1036937 1037082 1 - . Parent=mRNA10 III gt cds CDS 1036937 1037082 . - 2 ID=CDS8;Parent=mRNA10 III gt cds CDS 1037168 1037198 . - 0 ID=CDS8;Parent=mRNA10 III gt csa exon 1037168 1037200 1 - . Parent=mRNA10 III gt csa mRNA 1031337 1037200 . - . ID=mRNA11;Parent=gene8;Target=yk1677a04.3 1 666 -,yk1707c12.3 1 704 -,BP 1 433 +,yk1707c12.5 23 589 +,yk623f3.5 1 360 + III gt csa exon 1031337 1031862 0.994 - . Parent=mRNA11 III gt csa exon 1032740 1032809 1 - . Parent=mRNA11 III gt csa exon 1033111 1033262 0.924 - . Parent=mRNA11 III gt csa exon 1034167 1034457 0.894 - . Parent=mRNA11 III gt cds CDS 1034367 1034457 . - 1 ID=CDS9;Parent=mRNA11 III gt csa exon 1034642 1034679 0.215 - . Parent=mRNA11 III gt cds CDS 1034642 1034679 . - 0 ID=CDS9;Parent=mRNA11 III gt csa exon 1034874 1035024 0.985 - . Parent=mRNA11 III gt cds CDS 1034874 1035024 . - 1 ID=CDS9;Parent=mRNA11 III gt csa exon 1036294 1036442 1 - . Parent=mRNA11 III gt cds CDS 1036294 1036442 . - 0 ID=CDS9;Parent=mRNA11 III gt csa exon 1036772 1036888 1 - . Parent=mRNA11 III gt cds CDS 1036772 1036888 . - 0 ID=CDS9;Parent=mRNA11 III gt csa exon 1036937 1037082 1 - . Parent=mRNA11 III gt cds CDS 1036937 1037082 . - 2 ID=CDS9;Parent=mRNA11 III gt cds CDS 1037168 1037198 . - 0 ID=CDS9;Parent=mRNA11 III gt csa exon 1037168 1037200 1 - . Parent=mRNA11 ### III gt csa gene 1031495 1031674 . + . ID=gene9 III gt csa mRNA 1031495 1031674 . + . ID=mRNA12;Parent=gene9;Target=yk623f3.3 1 180 + III gt csa exon 1031495 1031674 1 + . Parent=mRNA12 ### III gt csa gene 1040341 1043441 . + . ID=gene10 III gt csa mRNA 1040341 1041938 . + . ID=mRNA13;Parent=gene10;Target=yk645b4.5 36 382 + III gt csa exon 1040341 1040503 0.939 + . Parent=mRNA13 III gt cds CDS 1040432 1040503 . + 0 ID=CDS10;Parent=mRNA13 III gt csa exon 1041759 1041938 1 + . Parent=mRNA13 III gt cds CDS 1041759 1041938 . + 0 ID=CDS10;Parent=mRNA13 III gt csa mRNA 1042042 1043441 . + . ID=mRNA14;Parent=gene10;Target=yk64a11.5 1 360 + III gt csa exon 1042042 1042093 1 + . Parent=mRNA14 III gt cds CDS 1042049 1042093 . + 0 ID=CDS11;Parent=mRNA14 III gt cds CDS 1043134 1043439 . + 0 ID=CDS11;Parent=mRNA14 III gt csa exon 1043134 1043441 0.984 + . Parent=mRNA14 ### III gt csa gene 1046267 1046555 . + . ID=gene11 III gt csa mRNA 1046267 1046555 . + . ID=mRNA15;Parent=gene11;Target=yk1391c06.3 1 287 + III gt csa exon 1046267 1046555 0.955 + . Parent=mRNA15 ### III gt csa gene 1046557 1059998 . - . ID=gene12 III gt csa mRNA 1046557 1059998 . - . ID=mRNA16;Parent=gene12;Target=WP 1 1158 + III gt csa exon 1046557 1046617 1 - . Parent=mRNA16 III gt cds CDS 1046557 1046617 . - 1 ID=CDS12;Parent=mRNA16 III gt csa exon 1046663 1046761 1 - . Parent=mRNA16 III gt cds CDS 1046663 1046761 . - 1 ID=CDS12;Parent=mRNA16 III gt csa exon 1047490 1047637 1 - . Parent=mRNA16 III gt cds CDS 1047490 1047637 . - 2 ID=CDS12;Parent=mRNA16 III gt csa exon 1048507 1048990 1 - . Parent=mRNA16 III gt cds CDS 1048507 1048990 . - 0 ID=CDS12;Parent=mRNA16 III gt csa exon 1049960 1050356 1 - . Parent=mRNA16 III gt cds CDS 1049960 1050356 . - 1 ID=CDS12;Parent=mRNA16 III gt csa exon 1051280 1051470 1 - . Parent=mRNA16 III gt cds CDS 1051280 1051470 . - 0 ID=CDS12;Parent=mRNA16 III gt csa exon 1051832 1052354 1 - . Parent=mRNA16 III gt cds CDS 1051832 1052354 . - 1 ID=CDS12;Parent=mRNA16 III gt csa exon 1052641 1052770 1 - . Parent=mRNA16 III gt cds CDS 1052641 1052770 . - 2 ID=CDS12;Parent=mRNA16 III gt csa exon 1053104 1053230 1 - . Parent=mRNA16 III gt cds CDS 1053104 1053230 . - 0 ID=CDS12;Parent=mRNA16 III gt csa exon 1053750 1053789 1 - . Parent=mRNA16 III gt cds CDS 1053750 1053789 . - 1 ID=CDS12;Parent=mRNA16 III gt csa exon 1054974 1055025 1 - . Parent=mRNA16 III gt cds CDS 1054974 1055025 . - 2 ID=CDS12;Parent=mRNA16 III gt csa exon 1055100 1055216 1 - . Parent=mRNA16 III gt cds CDS 1055100 1055216 . - 2 ID=CDS12;Parent=mRNA16 III gt csa exon 1056330 1056534 1 - . Parent=mRNA16 III gt cds CDS 1056330 1056534 . - 0 ID=CDS12;Parent=mRNA16 III gt csa exon 1057718 1058011 1 - . Parent=mRNA16 III gt cds CDS 1057718 1058011 . - 0 ID=CDS12;Parent=mRNA16 III gt csa exon 1058066 1058194 1 - . Parent=mRNA16 III gt cds CDS 1058066 1058194 . - 0 ID=CDS12;Parent=mRNA16 III gt csa exon 1058517 1058636 1 - . Parent=mRNA16 III gt cds CDS 1058517 1058636 . - 0 ID=CDS12;Parent=mRNA16 III gt csa exon 1058794 1058967 1 - . Parent=mRNA16 III gt cds CDS 1058794 1058967 . - 0 ID=CDS12;Parent=mRNA16 III gt csa exon 1059816 1059998 1 - . Parent=mRNA16 III gt cds CDS 1059816 1059998 . - 0 ID=CDS12;Parent=mRNA16 III gt csa mRNA 1052040 1052771 . - . ID=mRNA17;Parent=gene12;Target=CK580775 1 445 +,CK575409 1 430 +,CK575411 1 416 +,CK583013 1 411 +,CK575408 1 354 +,CK575413 1 347 +,CK583019 1 334 + III gt csa exon 1052040 1052354 0.997 - . Parent=mRNA17 III gt cds CDS 1052042 1052354 . - 1 ID=CDS13;Parent=mRNA17 III gt cds CDS 1052641 1052711 . - 0 ID=CDS13;Parent=mRNA17 III gt csa exon 1052641 1052771 1 - . Parent=mRNA17 III gt csa mRNA 1052047 1053234 . - . ID=mRNA18;Parent=gene12;Target=yk1391c06.5 1 569 + III gt csa exon 1052047 1052354 1 - . Parent=mRNA18 III gt cds CDS 1052048 1052354 . - 1 ID=CDS14;Parent=mRNA18 III gt csa exon 1052641 1052770 0.992 - . Parent=mRNA18 III gt cds CDS 1052641 1052770 . - 2 ID=CDS14;Parent=mRNA18 III gt cds CDS 1053104 1053230 . - 0 ID=CDS14;Parent=mRNA18 III gt csa exon 1053104 1053234 1 - . Parent=mRNA18 III gt csa mRNA 1056259 1059192 . - . ID=mRNA19;Parent=gene12;Target=BP 75 367 + III gt csa exon 1056259 1056534 0.894 - . Parent=mRNA19 III gt cds CDS 1056259 1056534 . - 0 ID=CDS15;Parent=mRNA19 III gt csa exon 1057718 1058011 0.954 - . Parent=mRNA19 III gt cds CDS 1057718 1058011 . - 0 ID=CDS15;Parent=mRNA19 III gt csa exon 1058517 1058636 0.856 - . Parent=mRNA19 III gt cds CDS 1058517 1058636 . - 0 ID=CDS15;Parent=mRNA19 III gt cds CDS 1058794 1058868 . - 0 ID=CDS15;Parent=mRNA19 III gt csa exon 1058794 1058967 0.818 - . Parent=mRNA19 III gt csa exon 1059181 1059192 0.273 - . Parent=mRNA19 III gt csa mRNA 1056259 1059224 . - . ID=mRNA20;Parent=gene12;Target=RP 72 369 + III gt csa exon 1056259 1056534 0.853 - . Parent=mRNA20 III gt cds CDS 1056259 1056534 . - 0 ID=CDS16;Parent=mRNA20 III gt csa exon 1057718 1058011 0.969 - . Parent=mRNA20 III gt cds CDS 1057718 1058011 . - 0 ID=CDS16;Parent=mRNA20 III gt csa exon 1058517 1058636 0.927 - . Parent=mRNA20 III gt cds CDS 1058517 1058636 . - 0 ID=CDS16;Parent=mRNA20 III gt csa exon 1058794 1058967 0.833 - . Parent=mRNA20 III gt cds CDS 1058794 1058967 . - 0 ID=CDS16;Parent=mRNA20 III gt cds CDS 1059198 1059215 . - 0 ID=CDS16;Parent=mRNA20 III gt csa exon 1059198 1059224 0.22 - . Parent=mRNA20 ### III gt csa gene 1062769 1063139 . + . ID=gene13 III gt csa mRNA 1062769 1063139 . + . ID=mRNA21;Parent=gene13;Target=yk681f11.5 1 370 +,CEESV83F 1 359 +,yk117f1.3 1 332 +,yk1170b11.3 1 181 +,yk1376a02.3 1 215 +,yk1704g11.3 1 255 +,yk117c1.3 1 323 +,yk617a4.3 1 300 +,yk621h1.3 1 299 +,yk659c10.3 1 297 +,yk602e8.3 1 297 +,yk652b11.3 1 297 +,yk675h9.3 1 296 +,yk337c2.3 1 295 +,yk658b12.3 1 294 +,yk393b4.3 1 180 +,yk394b5.3 1 295 +,yk363h2.3 1 292 +,yk525g8.3 1 291 +,yk656g8.3 1 291 +,yk255h9.3 1 289 +,yk572f4.3 1 288 +,yk592b8.3 1 286 + III gt csa exon 1062769 1063139 0.978 + . Parent=mRNA21 ### III gt csa gene 1062771 1076543 . - . ID=gene14 III gt csa mRNA 1062771 1076543 . - . ID=mRNA22;Parent=gene14;Target=U79157 1 1736 +,yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,WP 1 497 +,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk117f1.5 1 360 +,CK579359 1 613 +,yk1101a09.5 23 632 +,yk1034a11.5 23 628 +,yk363h2.5 1 360 +,yk1172f12.5 23 612 +,yk1053h12.5 22 598 +,yk1339g04.5 24 597 +,yk1169g11.5 23 596 +,yk1170b11.5 23 594 +,yk1120d08.5 23 590 +,yk1286b11.5 23 589 +,yk1120g02.5 23 587 +,yk1058c11.5 23 586 +,yk1254h08.5 23 584 +,yk1722g08.5 23 543 +,yk804f05.5 23 542 +,yk1096a09.5 23 539 +,yk1516e02.5 23 528 +,yk1652g01.5 23 510 +,yk1401h02.5 23 497 +,yk1061h02.5 23 497 +,yk1369c04.5 23 488 +,yk505f9.5 1 368 +,yk1141g04.5 23 448 +,yk820f07.5 23 446 +,yk1741a10.5 24 446 +,yk1026h07.5 1 370 +,yk656g8.5 1 360 +,yk216b5.5 1 360 +,yk568d7.5 1 360 +,yk659c10.5 1 379 +,yk592b8.5 1 360 +,yk658b12.5 1 360 +,yk269b4.5 1 376 +,yk525g8.5 1 377 +,yk482b6.5 1 360 +,yk569b4.5 1 360 +,yk675h9.5 1 360 +,yk456c8.5 1 377 +,yk393b4.5 1 373 +,yk626a1.5 1 360 +,yk602e8.5 1 360 +,yk617a4.5 1 360 +,yk332b1.5 1 378 +,yk337c2.5 1 374 +,yk61b9.5 1 360 +,yk434f11.5 1 360 +,yk117c1.5 1 360 +,yk621h1.5 1 218 +,yk1376a02.5 23 252 +,yk106d3.5 1 181 +,yk768a10.5 23 200 + III gt csa exon 1062771 1063137 0.858 - . Parent=mRNA22 III gt cds CDS 1063006 1063137 . - 0 ID=CDS17;Parent=mRNA22 III gt csa exon 1064630 1064950 1 - . Parent=mRNA22 III gt cds CDS 1064630 1064950 . - 0 ID=CDS17;Parent=mRNA22 III gt csa exon 1067821 1067940 1 - . Parent=mRNA22 III gt cds CDS 1067821 1067940 . - 0 ID=CDS17;Parent=mRNA22 III gt csa exon 1070411 1070643 1 - . Parent=mRNA22 III gt cds CDS 1070411 1070643 . - 2 ID=CDS17;Parent=mRNA22 III gt csa exon 1072375 1072533 1 - . Parent=mRNA22 III gt cds CDS 1072375 1072533 . - 2 ID=CDS17;Parent=mRNA22 III gt csa exon 1074168 1074463 1 - . Parent=mRNA22 III gt cds CDS 1074168 1074463 . - 1 ID=CDS17;Parent=mRNA22 III gt csa exon 1076314 1076543 1 - . Parent=mRNA22 III gt cds CDS 1076314 1076543 . - 0 ID=CDS17;Parent=mRNA22 III gt csa mRNA 1062781 1068054 . - . ID=mRNA23;Parent=gene14;Target=yk1101a09.3 26 698 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1061h02.3 1 616 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1276g05.3 1 729 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,yk1034a11.3 1 259 - III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA23 III gt cds CDS 1063006 1063137 . - 0 ID=CDS18;Parent=mRNA23 III gt cds CDS 1064630 1064929 . - 0 ID=CDS18;Parent=mRNA23 III gt csa exon 1064630 1064950 1 - . Parent=mRNA23 III gt csa exon 1067821 1067837 1 - . Parent=mRNA23 III gt csa exon 1067912 1067940 1 - . Parent=mRNA23 III gt csa exon 1068024 1068054 1 - . Parent=mRNA23 III gt csa mRNA 1062781 1074608 . - . ID=mRNA24;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,BP 66 487 +,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk117f1.5 1 360 +,yk363h2.5 1 360 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA24 III gt cds CDS 1063006 1063137 . - 0 ID=CDS19;Parent=mRNA24 III gt csa exon 1064630 1064950 1 - . Parent=mRNA24 III gt cds CDS 1064630 1064950 . - 0 ID=CDS19;Parent=mRNA24 III gt csa exon 1067821 1067940 1 - . Parent=mRNA24 III gt cds CDS 1067821 1067940 . - 0 ID=CDS19;Parent=mRNA24 III gt csa exon 1070411 1070643 0.976 - . Parent=mRNA24 III gt cds CDS 1070411 1070643 . - 2 ID=CDS19;Parent=mRNA24 III gt csa exon 1072375 1072533 1 - . Parent=mRNA24 III gt cds CDS 1072375 1072533 . - 2 ID=CDS19;Parent=mRNA24 III gt cds CDS 1074168 1074240 . - 0 ID=CDS19;Parent=mRNA24 III gt csa exon 1074168 1074463 0.645 - . Parent=mRNA24 III gt csa exon 1074601 1074608 0 - . Parent=mRNA24 III gt csa mRNA 1062781 1074628 . - . ID=mRNA25;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,RP 81 497 +,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk117f1.5 1 360 +,yk363h2.5 1 360 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA25 III gt cds CDS 1063006 1063137 . - 0 ID=CDS20;Parent=mRNA25 III gt csa exon 1064630 1064950 1 - . Parent=mRNA25 III gt cds CDS 1064630 1064950 . - 0 ID=CDS20;Parent=mRNA25 III gt csa exon 1067821 1067940 0.983 - . Parent=mRNA25 III gt cds CDS 1067821 1067940 . - 0 ID=CDS20;Parent=mRNA25 III gt csa exon 1070411 1070643 0.968 - . Parent=mRNA25 III gt cds CDS 1070411 1070643 . - 2 ID=CDS20;Parent=mRNA25 III gt csa exon 1072375 1072533 1 - . Parent=mRNA25 III gt cds CDS 1072375 1072533 . - 2 ID=CDS20;Parent=mRNA25 III gt cds CDS 1074168 1074240 . - 0 ID=CDS20;Parent=mRNA25 III gt csa exon 1074168 1074463 0.683 - . Parent=mRNA25 III gt csa exon 1074624 1074628 0 - . Parent=mRNA25 III gt csa mRNA 1062781 1076543 . - . ID=mRNA26;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk1213f07.5 23 619 +,yk1199c10.5 16 513 +,yk621h1.5 1 218 +,yk1376a02.5 23 252 +,yk106d3.5 1 181 +,yk768a10.5 23 200 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA26 III gt cds CDS 1063006 1063137 . - 0 ID=CDS21;Parent=mRNA26 III gt csa exon 1064630 1064950 1 - . Parent=mRNA26 III gt cds CDS 1064630 1064950 . - 0 ID=CDS21;Parent=mRNA26 III gt csa exon 1067821 1067940 0.983 - . Parent=mRNA26 III gt cds CDS 1067821 1067940 . - 0 ID=CDS21;Parent=mRNA26 III gt csa exon 1070411 1070643 1 - . Parent=mRNA26 III gt cds CDS 1070411 1070643 . - 2 ID=CDS21;Parent=mRNA26 III gt csa exon 1072375 1072533 1 - . Parent=mRNA26 III gt cds CDS 1072375 1072533 . - 2 ID=CDS21;Parent=mRNA26 III gt csa exon 1074168 1074350 1 - . Parent=mRNA26 III gt cds CDS 1074168 1074350 . - 2 ID=CDS21;Parent=mRNA26 III gt csa exon 1074426 1074463 1 - . Parent=mRNA26 III gt cds CDS 1074426 1074463 . - 1 ID=CDS21;Parent=mRNA26 III gt csa exon 1076314 1076543 1 - . Parent=mRNA26 III gt cds CDS 1076314 1076543 . - 0 ID=CDS21;Parent=mRNA26 III gt csa mRNA 1062781 1076543 . - . ID=mRNA27;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk899h02.5 21 464 +,yk621h1.5 1 218 +,yk1376a02.5 23 252 +,yk106d3.5 1 181 +,yk768a10.5 23 200 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA27 III gt cds CDS 1063006 1063137 . - 0 ID=CDS22;Parent=mRNA27 III gt csa exon 1064630 1064950 1 - . Parent=mRNA27 III gt cds CDS 1064630 1064950 . - 0 ID=CDS22;Parent=mRNA27 III gt csa exon 1067821 1067940 0.983 - . Parent=mRNA27 III gt cds CDS 1067821 1067940 . - 0 ID=CDS22;Parent=mRNA27 III gt csa exon 1070411 1070643 1 - . Parent=mRNA27 III gt cds CDS 1070411 1070643 . - 2 ID=CDS22;Parent=mRNA27 III gt csa exon 1072375 1072533 1 - . Parent=mRNA27 III gt cds CDS 1072375 1072533 . - 2 ID=CDS22;Parent=mRNA27 III gt csa exon 1074168 1074350 0.973 - . Parent=mRNA27 III gt cds CDS 1074168 1074350 . - 2 ID=CDS22;Parent=mRNA27 III gt csa exon 1074432 1074463 1 - . Parent=mRNA27 III gt cds CDS 1074432 1074463 . - 1 ID=CDS22;Parent=mRNA27 III gt csa exon 1076314 1076543 1 - . Parent=mRNA27 III gt cds CDS 1076314 1076543 . - 0 ID=CDS22;Parent=mRNA27 III gt csa mRNA 1062781 1076543 . - . ID=mRNA28;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk778d02.5 21 613 +,yk117f1.5 1 360 +,yk363h2.5 1 360 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA28 III gt cds CDS 1063006 1063137 . - 0 ID=CDS23;Parent=mRNA28 III gt csa exon 1064630 1064950 1 - . Parent=mRNA28 III gt cds CDS 1064630 1064950 . - 0 ID=CDS23;Parent=mRNA28 III gt csa exon 1067821 1067940 0.983 - . Parent=mRNA28 III gt cds CDS 1067821 1067940 . - 0 ID=CDS23;Parent=mRNA28 III gt csa exon 1070411 1070643 1 - . Parent=mRNA28 III gt cds CDS 1070411 1070643 . - 2 ID=CDS23;Parent=mRNA28 III gt csa exon 1072375 1072533 1 - . Parent=mRNA28 III gt cds CDS 1072375 1072533 . - 2 ID=CDS23;Parent=mRNA28 III gt csa exon 1074168 1074463 0.993 - . Parent=mRNA28 III gt cds CDS 1074168 1074463 . - 1 ID=CDS23;Parent=mRNA28 III gt csa exon 1076380 1076543 1 - . Parent=mRNA28 III gt cds CDS 1076380 1076543 . - 0 ID=CDS23;Parent=mRNA28 III gt csa mRNA 1062781 1076543 . - . ID=mRNA29;Parent=gene14;Target=yk1101a09.3 26 698 -,yk1169g11.3 1 752 -,yk1339g04.3 1 746 -,yk804f05.3 1 665 -,yk899h02.3 1 614 -,yk1120g02.3 24 690 -,yk1213f07.3 9 673 -,yk1120d08.3 1 686 -,yk1061h02.3 1 616 -,yk1053h12.3 1 685 -,yk1058c11.3 1 734 -,yk1401h02.3 28 684 -,yk1369c04.3 1 639 -,yk1652g01.3 23 678 -,yk1741a10.3 10 665 -,yk1722g08.3 1 733 -,yk1516e02.3 1 732 -,yk1141g04.3 1 677 -,yk1286b11.3 1 677 -,yk1199c10.3 1 546 -,yk820f07.3 1 586 -,yk778d02.3 1 652 -,yk1096a09.3 11 661 -,yk1254h08.3 1 704 -,yk1351e07.3 1 623 -,yk1093g01.3 1 570 -,yk1034a11.3 1 259 -,yk65a10.5 1 360 +,yk255h9.5 5 379 +,yk652b11.5 1 360 +,yk1351e07.5 23 549 + III gt csa exon 1062781 1063137 0.983 - . Parent=mRNA29 III gt cds CDS 1063006 1063137 . - 0 ID=CDS24;Parent=mRNA29 III gt csa exon 1064630 1064950 1 - . Parent=mRNA29 III gt cds CDS 1064630 1064950 . - 0 ID=CDS24;Parent=mRNA29 III gt csa exon 1067821 1067940 0.983 - . Parent=mRNA29 III gt cds CDS 1067821 1067940 . - 0 ID=CDS24;Parent=mRNA29 III gt csa exon 1070411 1070643 1 - . Parent=mRNA29 III gt cds CDS 1070411 1070643 . - 2 ID=CDS24;Parent=mRNA29 III gt csa exon 1072375 1072533 1 - . Parent=mRNA29 III gt cds CDS 1072375 1072533 . - 2 ID=CDS24;Parent=mRNA29 III gt csa exon 1074168 1074374 0.995 - . Parent=mRNA29 III gt cds CDS 1074168 1074374 . - 2 ID=CDS24;Parent=mRNA29 III gt csa exon 1076372 1076543 0.994 - . Parent=mRNA29 III gt cds CDS 1076372 1076543 . - 0 ID=CDS24;Parent=mRNA29 III gt csa mRNA 1062794 1064950 . - . ID=mRNA30;Parent=gene14;Target=yk1172f12.3 68 589 - III gt csa exon 1062794 1063137 1 - . Parent=mRNA30 III gt cds CDS 1063006 1063137 . - 0 ID=CDS25;Parent=mRNA30 III gt cds CDS 1064630 1064782 . - 0 ID=CDS25;Parent=mRNA30 III gt csa exon 1064630 1064798 0.932 - . Parent=mRNA30 III gt csa exon 1064945 1064950 0.833 - . Parent=mRNA30 III gt csa mRNA 1067962 1068321 . - . ID=mRNA31;Parent=gene14;Target=yk394b5.5 1 360 + III gt csa exon 1067962 1068321 1 - . Parent=mRNA31 III gt csa mRNA 1072370 1076543 . - . ID=mRNA32;Parent=gene14;Target=yk572f4.5 1 360 +,yk117f1.5 1 360 +,CK579359 1 613 +,yk1101a09.5 23 632 +,yk1034a11.5 23 628 +,yk363h2.5 1 360 +,yk1172f12.5 23 612 +,yk1053h12.5 22 598 +,yk1339g04.5 24 597 +,yk1169g11.5 23 596 +,yk1170b11.5 23 594 +,yk1120d08.5 23 590 +,yk1286b11.5 23 589 +,yk1120g02.5 23 587 +,yk1058c11.5 23 586 +,yk1254h08.5 23 584 +,yk1722g08.5 23 543 +,yk804f05.5 23 542 +,yk1096a09.5 23 539 +,yk1516e02.5 23 528 +,yk1652g01.5 23 510 +,yk1401h02.5 23 497 +,yk1061h02.5 23 497 +,yk1369c04.5 23 488 +,yk505f9.5 1 368 +,yk1141g04.5 23 448 +,yk820f07.5 23 446 +,yk1741a10.5 24 446 +,yk1026h07.5 1 370 +,yk656g8.5 1 360 +,yk216b5.5 1 360 +,yk568d7.5 1 360 +,yk659c10.5 1 379 +,yk592b8.5 1 360 +,yk658b12.5 1 360 +,yk269b4.5 1 376 +,yk525g8.5 1 377 +,yk482b6.5 1 360 +,yk569b4.5 1 360 +,yk675h9.5 1 360 +,yk456c8.5 1 377 +,yk393b4.5 1 373 +,yk626a1.5 1 360 +,yk602e8.5 1 360 +,yk617a4.5 1 360 +,yk332b1.5 1 378 +,yk337c2.5 1 374 +,yk61b9.5 1 360 +,yk434f11.5 1 360 +,yk117c1.5 1 360 +,yk621h1.5 1 218 +,yk1376a02.5 23 252 +,yk106d3.5 1 181 +,yk768a10.5 23 200 + III gt csa exon 1072370 1072533 0.976 - . Parent=mRNA32 III gt cds CDS 1072370 1072533 . - 2 ID=CDS26;Parent=mRNA32 III gt csa exon 1074168 1074463 1 - . Parent=mRNA32 III gt cds CDS 1074168 1074463 . - 1 ID=CDS26;Parent=mRNA32 III gt csa exon 1076314 1076543 1 - . Parent=mRNA32 III gt cds CDS 1076314 1076543 . - 0 ID=CDS26;Parent=mRNA32 ### III gt csa gene 1078138 1080469 . - . ID=gene15 III gt csa mRNA 1078138 1079228 . - . ID=mRNA33;Parent=gene15;Target=yk1340e12.3 1 864 -,yk616a3.5 1 360 + III gt csa exon 1078138 1078930 0.996 - . Parent=mRNA33 III gt csa exon 1079155 1079228 0.932 - . Parent=mRNA33 III gt csa mRNA 1079466 1080469 . - . ID=mRNA34;Parent=gene15;Target=yk1243e09.3 1 706 -,BP 1 203 +,RP 1 203 +,yk1243e09.5 24 582 +,yk1340e12.5 23 491 +,yk493c1.5 1 375 +,yk291g7.5 1 240 +,U23938 1 107 + III gt csa exon 1079466 1079894 1 - . Parent=mRNA34 III gt cds CDS 1079670 1079894 . - 0 ID=CDS27;Parent=mRNA34 III gt csa exon 1079946 1080199 1 - . Parent=mRNA34 III gt cds CDS 1079946 1080199 . - 2 ID=CDS27;Parent=mRNA34 III gt csa exon 1080275 1080330 1 - . Parent=mRNA34 III gt cds CDS 1080275 1080330 . - 1 ID=CDS27;Parent=mRNA34 III gt csa exon 1080393 1080469 1 - . Parent=mRNA34 III gt cds CDS 1080393 1080469 . - 0 ID=CDS27;Parent=mRNA34 III gt csa mRNA 1079821 1080352 . - . ID=mRNA35;Parent=gene15;Target=yk1013b10.5 1 457 + III gt csa exon 1079821 1080199 0.995 - . Parent=mRNA35 III gt cds CDS 1079823 1080199 . - 2 ID=CDS28;Parent=mRNA35 III gt cds CDS 1080275 1080326 . - 0 ID=CDS28;Parent=mRNA35 III gt csa exon 1080275 1080352 0.885 - . Parent=mRNA35 ### III gt csa gene 1078143 1079828 . + . ID=gene16 III gt csa mRNA 1078143 1078790 . + . ID=mRNA36;Parent=gene16;Target=yk1013b10.3 1 651 +,yk616a3.3 1 300 + III gt csa exon 1078143 1078790 0.979 + . Parent=mRNA36 III gt csa mRNA 1079525 1079828 . + . ID=mRNA37;Parent=gene16;Target=yk291g7.3 1 300 +,yk493c1.3 1 300 + III gt csa exon 1079525 1079828 0.992 + . Parent=mRNA37 ### III gt csa gene 1080895 1095067 . + . ID=gene17 III gt csa mRNA 1080895 1081298 . + . ID=mRNA38;Parent=gene17;Target=yk628f9.3 1 285 -,CESAC24R 12 322 +,yk628f9.5 1 320 + III gt csa exon 1080895 1081097 0.97 + . Parent=mRNA38 III gt cds CDS 1080908 1081097 . + 0 ID=CDS29;Parent=mRNA38 III gt cds CDS 1081143 1081246 . + 2 ID=CDS29;Parent=mRNA38 III gt csa exon 1081143 1081298 0.936 + . Parent=mRNA38 III gt csa mRNA 1081386 1095067 . + . ID=mRNA39;Parent=gene17;Target=L26987 1 2172 +,yk96h7.5 1 360 +,yk628a12.5 1 378 +,yk375g6.5 1 240 + III gt csa exon 1081386 1081507 0.984 + . Parent=mRNA39 III gt cds CDS 1081397 1081507 . + 0 ID=CDS30;Parent=mRNA39 III gt csa exon 1081621 1081704 1 + . Parent=mRNA39 III gt cds CDS 1081621 1081704 . + 0 ID=CDS30;Parent=mRNA39 III gt csa exon 1082982 1083119 1 + . Parent=mRNA39 III gt cds CDS 1082982 1083119 . + 0 ID=CDS30;Parent=mRNA39 III gt csa exon 1084050 1084121 1 + . Parent=mRNA39 III gt cds CDS 1084050 1084121 . + 0 ID=CDS30;Parent=mRNA39 III gt csa exon 1084325 1084449 1 + . Parent=mRNA39 III gt cds CDS 1084325 1084449 . + 0 ID=CDS30;Parent=mRNA39 III gt csa exon 1087773 1088553 0.996 + . Parent=mRNA39 III gt cds CDS 1087773 1088553 . + 1 ID=CDS30;Parent=mRNA39 III gt csa exon 1091545 1091685 0.986 + . Parent=mRNA39 III gt cds CDS 1091545 1091685 . + 0 ID=CDS30;Parent=mRNA39 III gt csa exon 1092617 1092679 0.984 + . Parent=mRNA39 III gt cds CDS 1092617 1092679 . + 0 ID=CDS30;Parent=mRNA39 III gt csa exon 1092734 1092865 1 + . Parent=mRNA39 III gt cds CDS 1092734 1092865 . + 0 ID=CDS30;Parent=mRNA39 III gt csa exon 1094216 1094362 0.973 + . Parent=mRNA39 III gt cds CDS 1094216 1094362 . + 0 ID=CDS30;Parent=mRNA39 III gt cds CDS 1094697 1094789 . + 0 ID=CDS30;Parent=mRNA39 III gt csa exon 1094697 1095067 0.997 + . Parent=mRNA39 III gt csa mRNA 1081392 1094789 . + . ID=mRNA40;Parent=gene17;Target=yk325e4.5 1 374 +,WP 1 583 + III gt csa exon 1081392 1081507 1 + . Parent=mRNA40 III gt cds CDS 1081397 1081507 . + 0 ID=CDS31;Parent=mRNA40 III gt csa exon 1081621 1081704 1 + . Parent=mRNA40 III gt cds CDS 1081621 1081704 . + 0 ID=CDS31;Parent=mRNA40 III gt csa exon 1084050 1084121 1 + . Parent=mRNA40 III gt cds CDS 1084050 1084121 . + 0 ID=CDS31;Parent=mRNA40 III gt csa exon 1084325 1084449 1 + . Parent=mRNA40 III gt cds CDS 1084325 1084449 . + 0 ID=CDS31;Parent=mRNA40 III gt csa exon 1087773 1088553 1 + . Parent=mRNA40 III gt cds CDS 1087773 1088553 . + 1 ID=CDS31;Parent=mRNA40 III gt csa exon 1091545 1091685 1 + . Parent=mRNA40 III gt cds CDS 1091545 1091685 . + 0 ID=CDS31;Parent=mRNA40 III gt csa exon 1092617 1092679 1 + . Parent=mRNA40 III gt cds CDS 1092617 1092679 . + 0 ID=CDS31;Parent=mRNA40 III gt csa exon 1092734 1092865 1 + . Parent=mRNA40 III gt cds CDS 1092734 1092865 . + 0 ID=CDS31;Parent=mRNA40 III gt csa exon 1094216 1094362 1 + . Parent=mRNA40 III gt cds CDS 1094216 1094362 . + 0 ID=CDS31;Parent=mRNA40 III gt csa exon 1094697 1094789 1 + . Parent=mRNA40 III gt cds CDS 1094697 1094789 . + 0 ID=CDS31;Parent=mRNA40 III gt csa mRNA 1086135 1086598 . + . ID=mRNA41;Parent=gene17;Target=yk64a7.5 1 360 +,yk774d01.5 23 484 +,yk168e1.5 1 360 + III gt csa exon 1086135 1086598 0.998 + . Parent=mRNA41 III gt cds CDS 1086147 1086596 . + 0 ID=CDS32;Parent=mRNA41 ### III gt csa gene 1086142 1095035 . - . ID=gene18 III gt csa mRNA 1086142 1086645 . - . ID=mRNA42;Parent=gene18;Target=yk774d01.3 1 496 +,yk168e1.3 1 300 +,yk64a7.3 1 340 + III gt csa exon 1086142 1086645 0.968 - . Parent=mRNA42 III gt cds CDS 1086144 1086575 . - 0 ID=CDS33;Parent=mRNA42 III gt csa mRNA 1092456 1092592 . - . ID=mRNA43;Parent=gene18;Target=yk623f3.3 45 180 + III gt csa exon 1092456 1092592 0.883 - . Parent=mRNA43 III gt csa mRNA 1094701 1095035 . - . ID=mRNA44;Parent=gene18;Target=yk628a12.3 1 300 +,yk325e4.3 1 300 +,yk96h7.3 1 317 + III gt csa exon 1094701 1095035 0.97 - . Parent=mRNA44 ### III gt csa gene 1103215 1104223 . + . ID=gene19 III gt csa mRNA 1103215 1104223 . + . ID=mRNA45;Parent=gene19;Target=yk509d9.5 1 240 + III gt csa exon 1103215 1103340 0.917 + . Parent=mRNA45 III gt csa exon 1104113 1104223 0.973 + . Parent=mRNA45 ### III gt csa gene 1105166 1108112 . + . ID=gene20 III gt csa mRNA 1105166 1108112 . + . ID=mRNA46;Parent=gene20;Target=yk1464f04.5 1 530 + III gt csa exon 1105166 1105213 1 + . Parent=mRNA46 III gt cds CDS 1105193 1105213 . + 0 ID=CDS34;Parent=mRNA46 III gt csa exon 1105382 1105479 1 + . Parent=mRNA46 III gt cds CDS 1105382 1105479 . + 0 ID=CDS34;Parent=mRNA46 III gt csa exon 1106989 1107077 1 + . Parent=mRNA46 III gt cds CDS 1106989 1107077 . + 1 ID=CDS34;Parent=mRNA46 III gt csa exon 1107132 1107310 1 + . Parent=mRNA46 III gt cds CDS 1107132 1107310 . + 2 ID=CDS34;Parent=mRNA46 III gt cds CDS 1107997 1108110 . + 0 ID=CDS34;Parent=mRNA46 III gt csa exon 1107997 1108112 1 + . Parent=mRNA46 ### III gt csa gene 1108452 1111917 . + . ID=gene21 III gt csa mRNA 1108452 1110379 . + . ID=mRNA47;Parent=gene21;Target=yk387g5.5 1 374 +,yk73h4.5 1 360 + III gt csa exon 1108452 1108493 0.976 + . Parent=mRNA47 III gt csa exon 1109102 1109194 1 + . Parent=mRNA47 III gt cds CDS 1109133 1109194 . + 0 ID=CDS35;Parent=mRNA47 III gt csa exon 1109306 1109456 1 + . Parent=mRNA47 III gt cds CDS 1109306 1109456 . + 1 ID=CDS35;Parent=mRNA47 III gt cds CDS 1110211 1110378 . + 0 ID=CDS35;Parent=mRNA47 III gt csa exon 1110211 1110379 0.95 + . Parent=mRNA47 III gt csa mRNA 1110444 1111917 . + . ID=mRNA48;Parent=gene21;Target=yk654h1.5 1 379 +,yk1464f04.3 1 511 -,yk654h1.3 1 300 -,yk73h4.3 1 339 - III gt csa exon 1110444 1110660 1 + . Parent=mRNA48 III gt cds CDS 1110607 1110660 . + 0 ID=CDS36;Parent=mRNA48 III gt cds CDS 1111612 1111830 . + 0 ID=CDS36;Parent=mRNA48 III gt csa exon 1111612 1111917 0.997 + . Parent=mRNA48 ### III gt csa gene 1113142 1113501 . + . ID=gene22 III gt csa mRNA 1113142 1113501 . + . ID=mRNA49;Parent=gene22;Target=yk540h4.5 1 360 + III gt cds CDS 1113142 1113336 . + 0 ID=CDS37;Parent=mRNA49 III gt csa exon 1113142 1113501 0.962 + . Parent=mRNA49 ### III gt csa gene 1116479 1145189 . + . ID=gene23 III gt csa mRNA 1116479 1142875 . + . ID=mRNA50;Parent=gene23;Target=yk476e8.5 1 375 +,yk413d2.5 1 378 +,yk115h9.5 1 360 +,AB071420 1 1206 +,CEESU89F 1 378 +,yk476e8.3 1 300 -,yk115h9.3 1 316 - III gt csa exon 1116479 1116537 1 + . Parent=mRNA50 III gt cds CDS 1116513 1116537 . + 0 ID=CDS38;Parent=mRNA50 III gt csa exon 1116980 1117047 1 + . Parent=mRNA50 III gt cds CDS 1116980 1117047 . + 2 ID=CDS38;Parent=mRNA50 III gt csa exon 1117143 1117225 1 + . Parent=mRNA50 III gt cds CDS 1117143 1117225 . + 0 ID=CDS38;Parent=mRNA50 III gt csa exon 1117275 1117383 1 + . Parent=mRNA50 III gt cds CDS 1117275 1117383 . + 1 ID=CDS38;Parent=mRNA50 III gt csa exon 1122635 1122766 1 + . Parent=mRNA50 III gt cds CDS 1122635 1122766 . + 0 ID=CDS38;Parent=mRNA50 III gt csa exon 1139058 1139117 1 + . Parent=mRNA50 III gt cds CDS 1139058 1139117 . + 0 ID=CDS38;Parent=mRNA50 III gt csa exon 1139983 1140084 1 + . Parent=mRNA50 III gt cds CDS 1139983 1140084 . + 0 ID=CDS38;Parent=mRNA50 III gt csa exon 1140353 1140439 1 + . Parent=mRNA50 III gt cds CDS 1140353 1140439 . + 0 ID=CDS38;Parent=mRNA50 III gt csa exon 1141806 1142171 1 + . Parent=mRNA50 III gt cds CDS 1141806 1142171 . + 0 ID=CDS38;Parent=mRNA50 III gt cds CDS 1142665 1142838 . + 0 ID=CDS38;Parent=mRNA50 III gt csa exon 1142665 1142875 0.981 + . Parent=mRNA50 III gt csa mRNA 1116738 1142838 . + . ID=mRNA51;Parent=gene23;Target=BP 1 356 +,CEESU89F 1 378 + III gt csa exon 1116738 1116762 0.381 + . Parent=mRNA51 III gt csa exon 1116980 1117047 0.868 + . Parent=mRNA51 III gt csa exon 1117143 1117225 1 + . Parent=mRNA51 III gt cds CDS 1117200 1117225 . + 0 ID=CDS39;Parent=mRNA51 III gt csa exon 1117275 1117383 1 + . Parent=mRNA51 III gt cds CDS 1117275 1117383 . + 1 ID=CDS39;Parent=mRNA51 III gt csa exon 1122635 1122766 0.914 + . Parent=mRNA51 III gt cds CDS 1122635 1122766 . + 0 ID=CDS39;Parent=mRNA51 III gt csa exon 1139983 1140084 0.767 + . Parent=mRNA51 III gt cds CDS 1139983 1140084 . + 0 ID=CDS39;Parent=mRNA51 III gt csa exon 1141806 1142171 0.882 + . Parent=mRNA51 III gt cds CDS 1141806 1142171 . + 0 ID=CDS39;Parent=mRNA51 III gt csa exon 1142656 1142838 0.85 + . Parent=mRNA51 III gt cds CDS 1142656 1142838 . + 0 ID=CDS39;Parent=mRNA51 III gt csa mRNA 1125293 1125473 . + . ID=mRNA52;Parent=gene23;Target=yk553h3.3 1 180 + III gt csa exon 1125293 1125473 0.95 + . Parent=mRNA52 III gt csa mRNA 1133548 1142889 . + . ID=mRNA53;Parent=gene23;Target=yk1661g06.3 1 722 -,yk476e8.3 1 300 -,yk115h9.3 1 316 - III gt csa exon 1133548 1133558 0.727 + . Parent=mRNA53 III gt csa exon 1135590 1135608 0.737 + . Parent=mRNA53 III gt csa exon 1139983 1140084 1 + . Parent=mRNA53 III gt cds CDS 1140004 1140084 . + 0 ID=CDS40;Parent=mRNA53 III gt csa exon 1141806 1142171 1 + . Parent=mRNA53 III gt cds CDS 1141806 1142171 . + 0 ID=CDS40;Parent=mRNA53 III gt cds CDS 1142665 1142838 . + 0 ID=CDS40;Parent=mRNA53 III gt csa exon 1142665 1142889 0.991 + . Parent=mRNA53 III gt csa mRNA 1143062 1145189 . + . ID=mRNA54;Parent=gene23;Target=yk343a3.5 1 372 +,yk187d1.5 1 120 +,yk123d7.5 1 360 +,yk438f8.5 1 383 +,yk1158b07.3 1 574 -,yk550b4.5 1 360 +,yk543h10.5 11 360 + III gt csa exon 1143062 1143459 1 + . Parent=mRNA54 III gt csa exon 1143525 1143621 1 + . Parent=mRNA54 III gt csa exon 1143690 1143814 1 + . Parent=mRNA54 III gt csa exon 1144839 1145189 0.997 + . Parent=mRNA54 III gt cds CDS 1144841 1145098 . + 0 ID=CDS41;Parent=mRNA54 III gt csa mRNA 1143154 1145132 . + . ID=mRNA55;Parent=gene23;Target=yk60d1.5 1 360 +,yk142e6.5 1 373 +,yk657a9.5 2 379 +,yk103e11.5 1 330 +,yk604a1.5 1 360 +,yk470d12.5 1 360 +,yk647g1.5 1 360 +,RP 1 235 +,yk187d1.5 1 120 +,yk312d12.5 1 360 +,yk561h2.5 1 360 +,yk473b11.5 1 360 +,yk328f10.5 1 360 +,yk123d7.5 1 360 +,yk438f8.5 1 383 + III gt csa exon 1143154 1143303 0.993 + . Parent=mRNA55 III gt cds CDS 1143178 1143303 . + 0 ID=CDS42;Parent=mRNA55 III gt csa exon 1143382 1143459 1 + . Parent=mRNA55 III gt cds CDS 1143382 1143459 . + 0 ID=CDS42;Parent=mRNA55 III gt csa exon 1143525 1143621 1 + . Parent=mRNA55 III gt cds CDS 1143525 1143621 . + 0 ID=CDS42;Parent=mRNA55 III gt csa exon 1143690 1143814 1 + . Parent=mRNA55 III gt cds CDS 1143690 1143814 . + 2 ID=CDS42;Parent=mRNA55 III gt csa exon 1144839 1145034 0.95 + . Parent=mRNA55 III gt cds CDS 1144839 1145034 . + 0 ID=CDS42;Parent=mRNA55 III gt csa exon 1145050 1145132 0.868 + . Parent=mRNA55 III gt cds CDS 1145050 1145132 . + 2 ID=CDS42;Parent=mRNA55 III gt csa mRNA 1143154 1145189 . + . ID=mRNA56;Parent=gene23;Target=yk60d1.5 1 360 +,yk142e6.5 1 373 +,yk657a9.5 2 379 +,yk103e11.5 1 330 +,yk604a1.5 1 360 +,yk470d12.5 1 360 +,yk647g1.5 1 360 +,BP 1 234 +,yk187d1.5 1 120 +,yk312d12.5 1 360 +,yk561h2.5 1 360 +,yk473b11.5 1 360 +,yk328f10.5 1 360 +,yk123d7.5 1 360 +,yk438f8.5 1 383 +,yk1158b07.3 1 574 -,yk550b4.5 1 360 +,yk543h10.5 11 360 + III gt csa exon 1143154 1143303 0.993 + . Parent=mRNA56 III gt cds CDS 1143178 1143303 . + 0 ID=CDS43;Parent=mRNA56 III gt csa exon 1143382 1143459 1 + . Parent=mRNA56 III gt cds CDS 1143382 1143459 . + 0 ID=CDS43;Parent=mRNA56 III gt csa exon 1143525 1143621 1 + . Parent=mRNA56 III gt cds CDS 1143525 1143621 . + 0 ID=CDS43;Parent=mRNA56 III gt csa exon 1143690 1143814 1 + . Parent=mRNA56 III gt cds CDS 1143690 1143814 . + 2 ID=CDS43;Parent=mRNA56 III gt cds CDS 1144839 1145132 . + 0 ID=CDS43;Parent=mRNA56 III gt csa exon 1144839 1145189 0.997 + . Parent=mRNA56 ### III gt csa gene 1125231 1145193 . - . ID=gene24 III gt csa mRNA 1125231 1135544 . - . ID=mRNA57;Parent=gene24;Target=yk1034b01.3 1 771 -,yk1181b08.3 1 560 -,yk863a05.3 1 746 -,BP 1 507 +,RP 1 507 +,WP 1 509 +,yk553h3.5 1 360 + III gt csa exon 1125231 1125670 0.981 - . Parent=mRNA57 III gt cds CDS 1125553 1125670 . - 1 ID=CDS44;Parent=mRNA57 III gt csa exon 1125798 1125884 1 - . Parent=mRNA57 III gt cds CDS 1125798 1125884 . - 1 ID=CDS44;Parent=mRNA57 III gt csa exon 1126918 1127243 1 - . Parent=mRNA57 III gt cds CDS 1126918 1127243 . - 0 ID=CDS44;Parent=mRNA57 III gt csa exon 1127709 1127839 1 - . Parent=mRNA57 III gt cds CDS 1127709 1127839 . - 2 ID=CDS44;Parent=mRNA57 III gt csa exon 1128867 1128978 1 - . Parent=mRNA57 III gt cds CDS 1128867 1128978 . - 0 ID=CDS44;Parent=mRNA57 III gt csa exon 1129237 1129354 1 - . Parent=mRNA57 III gt cds CDS 1129237 1129354 . - 1 ID=CDS44;Parent=mRNA57 III gt csa exon 1129814 1129916 1 - . Parent=mRNA57 III gt cds CDS 1129814 1129916 . - 2 ID=CDS44;Parent=mRNA57 III gt csa exon 1134086 1134290 1 - . Parent=mRNA57 III gt cds CDS 1134086 1134290 . - 0 ID=CDS44;Parent=mRNA57 III gt csa exon 1134380 1134448 1 - . Parent=mRNA57 III gt cds CDS 1134380 1134448 . - 0 ID=CDS44;Parent=mRNA57 III gt cds CDS 1135196 1135234 . - 0 ID=CDS44;Parent=mRNA57 III gt csa exon 1135196 1135288 1 - . Parent=mRNA57 III gt csa exon 1135380 1135544 0.687 - . Parent=mRNA57 III gt csa mRNA 1129245 1136013 . - . ID=mRNA58;Parent=gene24;Target=yk553h3.5 1 360 +,yk1034b01.5 24 613 +,yk863a05.5 17 604 + III gt csa exon 1129245 1129354 0.991 - . Parent=mRNA58 III gt cds CDS 1129246 1129354 . - 1 ID=CDS45;Parent=mRNA58 III gt csa exon 1129814 1129916 1 - . Parent=mRNA58 III gt cds CDS 1129814 1129916 . - 2 ID=CDS45;Parent=mRNA58 III gt csa exon 1134086 1134290 1 - . Parent=mRNA58 III gt cds CDS 1134086 1134290 . - 0 ID=CDS45;Parent=mRNA58 III gt csa exon 1134380 1134448 1 - . Parent=mRNA58 III gt cds CDS 1134380 1134448 . - 0 ID=CDS45;Parent=mRNA58 III gt csa exon 1135196 1135288 1 - . Parent=mRNA58 III gt cds CDS 1135196 1135288 . - 0 ID=CDS45;Parent=mRNA58 III gt csa exon 1135380 1135488 1 - . Parent=mRNA58 III gt cds CDS 1135380 1135488 . - 1 ID=CDS45;Parent=mRNA58 III gt cds CDS 1135900 1135955 . - 0 ID=CDS45;Parent=mRNA58 III gt csa exon 1135900 1136013 1 - . Parent=mRNA58 III gt csa mRNA 1144830 1145193 . - . ID=mRNA59;Parent=gene24;Target=yk470d12.3 1 300 +,yk604a1.3 1 300 +,yk473b11.3 1 300 +,yk312d12.3 1 300 +,yk343a3.3 1 300 +,yk530f6.3 1 300 +,yk438f8.3 1 285 +,yk561h2.3 1 292 +,yk543h10.3 1 300 +,yk647g1.3 1 300 +,yk142e6.3 1 300 +,yk60d1.3 1 343 +,yk103e11.3 1 334 +,yk123d7.3 1 180 + III gt csa exon 1144830 1145193 0.971 - . Parent=mRNA59 ### III gt csa gene 1172435 1172612 . + . ID=gene25 III gt csa mRNA 1172435 1172612 . + . ID=mRNA60;Parent=gene25;Target=yk511h7.5 1 180 + III gt csa exon 1172435 1172612 0.933 + . Parent=mRNA60 ### III gt csa gene 1180689 1181054 . + . ID=gene26 III gt csa mRNA 1180689 1181054 . + . ID=mRNA61;Parent=gene26;Target=yk511h7.3 1 300 - III gt csa exon 1180689 1180787 0.929 + . Parent=mRNA61 III gt csa exon 1180855 1181054 0.942 + . Parent=mRNA61 ### III gt csa gene 1182067 1184916 . + . ID=gene27 III gt csa mRNA 1182067 1184916 . + . ID=mRNA62;Parent=gene27;Target=yk94h5.5 1 248 +,yk101e7.5 1 360 +,yk409f1.5 1 377 +,yk362f12.5 1 380 +,yk308d11.5 1 360 +,yk191a10.5 1 360 +,yk409a1.5 1 360 +,yk263d8.5 1 360 +,yk440h2.5 1 360 +,yk440h2.3 1 300 -,yk545f3.5 1 360 -,yk191a10.3 1 300 -,yk362f12.3 1 300 -,yk190e9.3 1 300 -,yk409f1.3 1 300 -,yk308d11.3 1 300 -,yk409a1.3 1 300 - III gt csa exon 1182067 1182083 1 + . Parent=mRNA62 III gt csa exon 1182151 1182302 1 + . Parent=mRNA62 III gt csa exon 1183141 1183324 1 + . Parent=mRNA62 III gt cds CDS 1183219 1183324 . + 0 ID=CDS46;Parent=mRNA62 III gt csa exon 1183376 1183473 0.974 + . Parent=mRNA62 III gt cds CDS 1183376 1183473 . + 2 ID=CDS46;Parent=mRNA62 III gt cds CDS 1184629 1184883 . + 0 ID=CDS46;Parent=mRNA62 III gt csa exon 1184629 1184916 0.993 + . Parent=mRNA62 ### III gt csa gene 1184691 1184913 . - . ID=gene28 III gt csa mRNA 1184691 1184913 . - . ID=mRNA63;Parent=gene28;Target=yk388g7.3 1 176 +,yk94h5.3 1 180 + III gt csa exon 1184691 1184913 0.944 - . Parent=mRNA63 ### III gt csa gene 1185272 1189478 . - . ID=gene29 III gt csa mRNA 1185272 1189478 . - . ID=mRNA64;Parent=gene29;Target=yk1481a08.3 1 678 -,yk1392d03.3 1 601 - III gt csa exon 1185272 1185683 0.998 - . Parent=mRNA64 III gt cds CDS 1185331 1185683 . - 2 ID=CDS47;Parent=mRNA64 III gt csa exon 1187296 1187356 0.984 - . Parent=mRNA64 III gt cds CDS 1187296 1187356 . - 0 ID=CDS47;Parent=mRNA64 III gt csa exon 1187434 1187550 0.991 - . Parent=mRNA64 III gt cds CDS 1187434 1187550 . - 0 ID=CDS47;Parent=mRNA64 III gt csa exon 1187601 1187741 0.992 - . Parent=mRNA64 III gt cds CDS 1187601 1187741 . - 0 ID=CDS47;Parent=mRNA64 III gt cds CDS 1189002 1189469 . - 0 ID=CDS47;Parent=mRNA64 III gt csa exon 1189002 1189478 1 - . Parent=mRNA64 ### III gt csa gene 1191338 1193802 . - . ID=gene30 III gt csa mRNA 1191338 1193802 . - . ID=mRNA65;Parent=gene30;Target=yk1392d03.5 23 588 +,yk1481a08.5 23 461 + III gt csa exon 1191338 1191568 0.996 - . Parent=mRNA65 III gt cds CDS 1191339 1191568 . - 2 ID=CDS48;Parent=mRNA65 III gt csa exon 1191631 1191720 1 - . Parent=mRNA65 III gt cds CDS 1191631 1191720 . - 2 ID=CDS48;Parent=mRNA65 III gt cds CDS 1193558 1193780 . - 0 ID=CDS48;Parent=mRNA65 III gt csa exon 1193558 1193802 1 - . Parent=mRNA65 ### III gt csa gene 1194399 1196282 . - . ID=gene31 III gt csa mRNA 1194399 1196282 . - . ID=mRNA66;Parent=gene31;Target=CB103439 99 622 +,CB103483 90 610 +,CB103504 61 572 +,yk1752b03.3 242 747 -,CB103472 81 584 +,yk1160g10.3 24 520 -,yk1160g10.5 24 516 +,CB103430 73 559 +,CK583320 1 435 +,yk368b4.5 1 374 +,CB103451 106 494 +,yk115f10.5 12 360 + III gt csa exon 1194399 1194795 1 - . Parent=mRNA66 III gt cds CDS 1194658 1194795 . - 0 ID=CDS49;Parent=mRNA66 III gt cds CDS 1196156 1196266 . - 0 ID=CDS49;Parent=mRNA66 III gt csa exon 1196156 1196282 1 - . Parent=mRNA66 ### III gt csa gene 1194424 1194755 . + . ID=gene32 III gt csa mRNA 1194424 1194755 . + . ID=mRNA67;Parent=gene32;Target=yk115f10.3 1 332 + III gt csa exon 1194424 1194755 0.997 + . Parent=mRNA67 III gt cds CDS 1194550 1194753 . + 0 ID=CDS50;Parent=mRNA67 ### III gt csa gene 1200240 1201998 . - . ID=gene33 III gt csa mRNA 1200240 1201998 . - . ID=mRNA68;Parent=gene33;Target=yk1488e08.5 23 608 + III gt csa exon 1200240 1200461 0.995 - . Parent=mRNA68 III gt cds CDS 1200241 1200461 . - 2 ID=CDS51;Parent=mRNA68 III gt csa exon 1201465 1201639 1 - . Parent=mRNA68 III gt cds CDS 1201465 1201639 . - 0 ID=CDS51;Parent=mRNA68 III gt cds CDS 1201810 1201989 . - 0 ID=CDS51;Parent=mRNA68 III gt csa exon 1201810 1201998 0.995 - . Parent=mRNA68 ### III gt csa gene 1202535 1207288 . + . ID=gene34 III gt csa mRNA 1202535 1207255 . + . ID=mRNA69;Parent=gene34;Target=yk531a4.5 1 376 +,yk1387f11.5 23 512 +,WP 1 337 +,yk172c10.5 1 377 +,yk342c4.5 1 373 +,yk550b8.5 1 360 +,yk409b7.5 1 376 +,yk342c4.3 1 300 -,yk409b7.3 1 300 -,yk172c10.3 1 300 - III gt csa exon 1202535 1202609 0.987 + . Parent=mRNA69 III gt cds CDS 1202541 1202609 . + 0 ID=CDS52;Parent=mRNA69 III gt csa exon 1202655 1202765 1 + . Parent=mRNA69 III gt cds CDS 1202655 1202765 . + 0 ID=CDS52;Parent=mRNA69 III gt csa exon 1202829 1203135 1 + . Parent=mRNA69 III gt cds CDS 1202829 1203135 . + 0 ID=CDS52;Parent=mRNA69 III gt csa exon 1203589 1203699 1 + . Parent=mRNA69 III gt cds CDS 1203589 1203699 . + 2 ID=CDS52;Parent=mRNA69 III gt csa exon 1205327 1205739 1 + . Parent=mRNA69 III gt cds CDS 1205327 1205739 . + 2 ID=CDS52;Parent=mRNA69 III gt cds CDS 1206843 1206851 . + 0 ID=CDS52;Parent=mRNA69 III gt csa exon 1206843 1206957 1 + . Parent=mRNA69 III gt csa exon 1207184 1207255 0.972 + . Parent=mRNA69 III gt csa mRNA 1202535 1207260 . + . ID=mRNA70;Parent=gene34;Target=yk531a4.5 1 376 +,yk1387f11.5 23 512 +,WP 1 337 +,yk172c10.5 1 377 +,yk342c4.5 1 373 +,yk550b8.5 1 360 +,yk550b8.3 1 300 - III gt csa exon 1202535 1202609 0.987 + . Parent=mRNA70 III gt cds CDS 1202541 1202609 . + 0 ID=CDS53;Parent=mRNA70 III gt csa exon 1202655 1202765 1 + . Parent=mRNA70 III gt cds CDS 1202655 1202765 . + 0 ID=CDS53;Parent=mRNA70 III gt csa exon 1202829 1203135 1 + . Parent=mRNA70 III gt cds CDS 1202829 1203135 . + 0 ID=CDS53;Parent=mRNA70 III gt csa exon 1203589 1203699 1 + . Parent=mRNA70 III gt cds CDS 1203589 1203699 . + 2 ID=CDS53;Parent=mRNA70 III gt csa exon 1205327 1205739 1 + . Parent=mRNA70 III gt cds CDS 1205327 1205739 . + 2 ID=CDS53;Parent=mRNA70 III gt cds CDS 1206843 1206851 . + 0 ID=CDS53;Parent=mRNA70 III gt csa exon 1206843 1206932 0.878 + . Parent=mRNA70 III gt csa exon 1207184 1207260 0.961 + . Parent=mRNA70 III gt csa mRNA 1202535 1207288 . + . ID=mRNA71;Parent=gene34;Target=yk531a4.5 1 376 +,yk1387f11.5 23 512 +,WP 1 337 +,yk172c10.5 1 377 +,yk342c4.5 1 373 +,yk550b8.5 1 360 +,yk409b7.5 1 376 +,yk1387f11.3 1 649 - III gt csa exon 1202535 1202609 0.987 + . Parent=mRNA71 III gt cds CDS 1202541 1202609 . + 0 ID=CDS54;Parent=mRNA71 III gt csa exon 1202655 1202765 1 + . Parent=mRNA71 III gt cds CDS 1202655 1202765 . + 0 ID=CDS54;Parent=mRNA71 III gt csa exon 1202829 1203135 1 + . Parent=mRNA71 III gt cds CDS 1202829 1203135 . + 0 ID=CDS54;Parent=mRNA71 III gt csa exon 1203589 1203699 1 + . Parent=mRNA71 III gt cds CDS 1203589 1203699 . + 2 ID=CDS54;Parent=mRNA71 III gt csa exon 1205327 1205739 1 + . Parent=mRNA71 III gt cds CDS 1205327 1205739 . + 2 ID=CDS54;Parent=mRNA71 III gt cds CDS 1206843 1206851 . + 0 ID=CDS54;Parent=mRNA71 III gt csa exon 1206843 1207288 1 + . Parent=mRNA71 III gt csa mRNA 1203589 1207248 . + . ID=mRNA72;Parent=gene34;Target=yk531a4.3 10 300 - III gt csa exon 1203589 1203699 1 + . Parent=mRNA72 III gt csa exon 1206843 1206957 0.983 + . Parent=mRNA72 III gt csa exon 1207184 1207248 0.969 + . Parent=mRNA72 ### III gt csa gene 1208120 1209321 . + . ID=gene35 III gt csa mRNA 1208120 1209321 . + . ID=mRNA73;Parent=gene35;Target=yk681h11.5 1 360 +,yk1103g05.5 41 657 +,cm13d11.5 1 287 +,yk660b11.5 1 378 +,yk669g11.5 1 360 +,yk210b6.5 1 376 +,yk608g3.5 1 360 +,yk506a7.5 1 360 + III gt csa exon 1208120 1208251 1 + . Parent=mRNA73 III gt cds CDS 1208130 1208251 . + 0 ID=CDS55;Parent=mRNA73 III gt csa exon 1208372 1208714 0.997 + . Parent=mRNA73 III gt cds CDS 1208372 1208714 . + 1 ID=CDS55;Parent=mRNA73 III gt cds CDS 1209177 1209320 . + 0 ID=CDS55;Parent=mRNA73 III gt csa exon 1209177 1209321 1 + . Parent=mRNA73 ### III gt csa gene 1211225 1213642 . + . ID=gene36 III gt csa mRNA 1211225 1213642 . + . ID=mRNA74;Parent=gene36;Target=yk93h2.5 1 265 +,yk1535b11.3 1 614 -,CEEST24F 1 422 -,yk669g11.3 1 300 -,yk506a7.3 1 300 -,yk210b6.3 1 300 -,yk660b11.3 1 300 -,yk681h11.3 1 300 -,yk1624b11.3 1 340 -,yk93h2.3 1 331 -,CEESE53F 1 342 - III gt csa exon 1211225 1211488 0.964 + . Parent=mRNA74 III gt cds CDS 1211387 1211488 . + 0 ID=CDS56;Parent=mRNA74 III gt csa exon 1212576 1212824 0.992 + . Parent=mRNA74 III gt cds CDS 1212576 1212824 . + 0 ID=CDS56;Parent=mRNA74 III gt cds CDS 1213437 1213589 . + 0 ID=CDS56;Parent=mRNA74 III gt csa exon 1213437 1213642 0.981 + . Parent=mRNA74 ### III gt csa gene 1214935 1215287 . + . ID=gene37 III gt csa mRNA 1214935 1215287 . + . ID=mRNA75;Parent=gene37;Target=yk726c5.5 1 340 +,yk843g10.5 1 341 +,yk726h9.5 1 330 +,yk1454b03.5 1 335 +,yk1693g03.5 1 335 +,yk1613b06.5 1 335 +,yk1376c06.5 1 345 +,yk1619d03.5 1 345 +,yk1657e01.5 1 343 +,yk151f9.5 1 240 +,yk70e6.5 1 317 +,yk309g3.5 1 308 +,yk367e7.5 1 311 +,yk275e11.5 1 298 +,yk383a12.5 1 290 +,yk1313b02.5 1 156 + III gt csa exon 1214935 1215287 0.977 + . Parent=mRNA75 III gt cds CDS 1214990 1215190 . + 0 ID=CDS57;Parent=mRNA75 ### III gt csa gene 1214942 1215266 . - . ID=gene38 III gt csa mRNA 1214942 1215266 . - . ID=mRNA76;Parent=gene38;Target=yk726c5.3 1 267 +,yk726h9.3 1 270 +,yk734c7.3 1 275 +,yk1613b06.3 1 309 +,yk1641g01.3 1 312 +,yk1693g03.3 1 323 +,yk275e11.3 1 278 +,yk367e7.3 1 249 +,yk383a12.3 1 248 +,yk151f9.3 1 240 +,yk70e6.3 1 299 +,yk309g3.3 1 245 + III gt csa exon 1214942 1215266 0.957 - . Parent=mRNA76 ### III gt csa gene 1216021 1216795 . + . ID=gene39 III gt csa mRNA 1216021 1216795 . + . ID=mRNA77;Parent=gene39;Target=yk808h01.3 1 641 +,yk831f01.3 1 241 +,yk1315b01.3 1 501 +,yk754f09.3 1 350 +,yk781a01.3 1 267 +,yk1358a10.3 1 302 +,yk413h8.5 1 120 + III gt csa exon 1216021 1216795 0.881 + . Parent=mRNA77 ### III gt csa gene 1216578 1216806 . - . ID=gene40 III gt csa mRNA 1216578 1216806 . - . ID=mRNA78;Parent=gene40;Target=yk264h7.5 12 240 + III gt csa exon 1216578 1216806 0.983 - . Parent=mRNA78 ### III gt csa gene 1220307 1222062 . - . ID=gene41 III gt csa mRNA 1220307 1222062 . - . ID=mRNA79;Parent=gene41;Target=yk1221d02.5 22 628 +,yk754f09.5 23 562 +,yk1358a10.5 23 547 +,yk808h01.5 26 550 +,yk781a01.5 23 546 +,yk236b4.5 1 360 +,yk629h11.5 1 356 +,yk831f01.5 23 175 + III gt csa exon 1220307 1220373 1 - . Parent=mRNA79 III gt cds CDS 1220308 1220373 . - 0 ID=CDS58;Parent=mRNA79 III gt csa exon 1221160 1221571 1 - . Parent=mRNA79 III gt cds CDS 1221160 1221571 . - 1 ID=CDS58;Parent=mRNA79 III gt csa exon 1221935 1222062 1 - . Parent=mRNA79 III gt cds CDS 1221935 1222062 . - 0 ID=CDS58;Parent=mRNA79 ### III gt csa gene 1225449 1225807 . + . ID=gene42 III gt csa mRNA 1225449 1225807 . + . ID=mRNA80;Parent=gene42;Target=yk549c5.5 1 360 + III gt csa exon 1225449 1225807 0.976 + . Parent=mRNA80 ### III gt csa gene 1225754 1226053 . - . ID=gene43 III gt csa mRNA 1225754 1226053 . - . ID=mRNA81;Parent=gene43;Target=yk549c5.3 1 300 + III gt csa exon 1225754 1226053 1 - . Parent=mRNA81 ### III gt csa gene 1236005 1237038 . + . ID=gene44 III gt csa mRNA 1236005 1237038 . + . ID=mRNA82;Parent=gene44;Target=WP 1 254 + III gt csa exon 1236005 1236093 1 + . Parent=mRNA82 III gt cds CDS 1236005 1236093 . + 0 ID=CDS59;Parent=mRNA82 III gt csa exon 1236319 1236772 1 + . Parent=mRNA82 III gt cds CDS 1236319 1236772 . + 1 ID=CDS59;Parent=mRNA82 III gt csa exon 1236820 1237038 1 + . Parent=mRNA82 III gt cds CDS 1236820 1237038 . + 0 ID=CDS59;Parent=mRNA82 ### III gt csa gene 1239313 1242728 . + . ID=gene45 III gt csa mRNA 1239313 1242728 . + . ID=mRNA83;Parent=gene45;Target=WP 1 307 + III gt csa exon 1239313 1239401 1 + . Parent=mRNA83 III gt cds CDS 1239313 1239401 . + 0 ID=CDS60;Parent=mRNA83 III gt csa exon 1241115 1241739 1 + . Parent=mRNA83 III gt cds CDS 1241115 1241739 . + 1 ID=CDS60;Parent=mRNA83 III gt csa exon 1242522 1242728 1 + . Parent=mRNA83 III gt cds CDS 1242522 1242728 . + 0 ID=CDS60;Parent=mRNA83 ### III gt csa gene 1243521 1245273 . + . ID=gene46 III gt csa mRNA 1243521 1245273 . + . ID=mRNA84;Parent=gene46;Target=WP 1 306 + III gt csa exon 1243521 1243636 1 + . Parent=mRNA84 III gt cds CDS 1243521 1243636 . + 0 ID=CDS61;Parent=mRNA84 III gt csa exon 1244420 1245014 1 + . Parent=mRNA84 III gt cds CDS 1244420 1245014 . + 1 ID=CDS61;Parent=mRNA84 III gt csa exon 1245067 1245273 1 + . Parent=mRNA84 III gt cds CDS 1245067 1245273 . + 0 ID=CDS61;Parent=mRNA84 ### III gt csa gene 1247626 1249143 . - . ID=gene47 III gt csa mRNA 1247626 1249143 . - . ID=mRNA85;Parent=gene47;Target=WP 1 270 + III gt csa exon 1247626 1247808 1 - . Parent=mRNA85 III gt cds CDS 1247626 1247808 . - 0 ID=CDS62;Parent=mRNA85 III gt csa exon 1247862 1248417 1 - . Parent=mRNA85 III gt cds CDS 1247862 1248417 . - 1 ID=CDS62;Parent=mRNA85 III gt csa exon 1249073 1249143 1 - . Parent=mRNA85 III gt cds CDS 1249073 1249143 . - 0 ID=CDS62;Parent=mRNA85 ### III gt csa gene 1249509 1251814 . + . ID=gene48 III gt csa mRNA 1249509 1251814 . + . ID=mRNA86;Parent=gene48;Target=WP 1 265 +,yk252g1.5 1 376 + III gt csa exon 1249509 1249579 1 + . Parent=mRNA86 III gt cds CDS 1249509 1249579 . + 0 ID=CDS63;Parent=mRNA86 III gt csa exon 1250603 1251143 1 + . Parent=mRNA86 III gt cds CDS 1250603 1251143 . + 1 ID=CDS63;Parent=mRNA86 III gt csa exon 1251632 1251814 1 + . Parent=mRNA86 III gt cds CDS 1251632 1251814 . + 0 ID=CDS63;Parent=mRNA86 ### III gt csa gene 1253374 1254391 . - . ID=gene49 III gt csa mRNA 1253374 1254391 . - . ID=mRNA87;Parent=gene49;Target=WP 1 252 + III gt csa exon 1253374 1253548 1 - . Parent=mRNA87 III gt cds CDS 1253374 1253548 . - 1 ID=CDS64;Parent=mRNA87 III gt csa exon 1253764 1254273 1 - . Parent=mRNA87 III gt cds CDS 1253764 1254273 . - 1 ID=CDS64;Parent=mRNA87 III gt csa exon 1254321 1254391 1 - . Parent=mRNA87 III gt cds CDS 1254321 1254391 . - 0 ID=CDS64;Parent=mRNA87 ### III gt csa gene 1255541 1256919 . + . ID=gene50 III gt csa mRNA 1255541 1256919 . + . ID=mRNA88;Parent=gene50;Target=WP 1 282 + III gt csa exon 1255541 1256020 1 + . Parent=mRNA88 III gt cds CDS 1255541 1256020 . + 0 ID=CDS65;Parent=mRNA88 III gt csa exon 1256067 1256195 1 + . Parent=mRNA88 III gt cds CDS 1256067 1256195 . + 0 ID=CDS65;Parent=mRNA88 III gt csa exon 1256630 1256677 1 + . Parent=mRNA88 III gt cds CDS 1256630 1256677 . + 0 ID=CDS65;Parent=mRNA88 III gt csa exon 1256731 1256919 1 + . Parent=mRNA88 III gt cds CDS 1256731 1256919 . + 0 ID=CDS65;Parent=mRNA88 ### III gt csa gene 1257203 1258404 . - . ID=gene51 III gt csa mRNA 1257203 1258404 . - . ID=mRNA89;Parent=gene51;Target=yk1419f09.3 1 775 -,WP 1 278 + III gt csa exon 1257203 1257419 0.995 - . Parent=mRNA89 III gt cds CDS 1257222 1257419 . - 0 ID=CDS66;Parent=mRNA89 III gt csa exon 1257724 1258291 1 - . Parent=mRNA89 III gt cds CDS 1257724 1258291 . - 1 ID=CDS66;Parent=mRNA89 III gt csa exon 1258337 1258404 1 - . Parent=mRNA89 III gt cds CDS 1258337 1258404 . - 0 ID=CDS66;Parent=mRNA89 ### III gt csa gene 1259414 1260174 . + . ID=gene52 III gt csa mRNA 1259414 1260174 . + . ID=mRNA90;Parent=gene52;Target=WP 1 91 + III gt csa exon 1259414 1259503 1 + . Parent=mRNA90 III gt cds CDS 1259414 1259503 . + 0 ID=CDS67;Parent=mRNA90 III gt csa exon 1259992 1260174 1 + . Parent=mRNA90 III gt cds CDS 1259992 1260174 . + 0 ID=CDS67;Parent=mRNA90 ### III gt csa gene 1261815 1262832 . - . ID=gene53 III gt csa mRNA 1261815 1262832 . - . ID=mRNA91;Parent=gene53;Target=WP 1 252 + III gt csa exon 1261815 1261989 1 - . Parent=mRNA91 III gt cds CDS 1261815 1261989 . - 1 ID=CDS68;Parent=mRNA91 III gt csa exon 1262205 1262714 1 - . Parent=mRNA91 III gt cds CDS 1262205 1262714 . - 1 ID=CDS68;Parent=mRNA91 III gt csa exon 1262762 1262832 1 - . Parent=mRNA91 III gt cds CDS 1262762 1262832 . - 0 ID=CDS68;Parent=mRNA91 ### III gt csa gene 1265663 1266845 . - . ID=gene54 III gt csa mRNA 1265663 1266845 . - . ID=mRNA92;Parent=gene54;Target=WP 1 278 + III gt csa exon 1265663 1265860 1 - . Parent=mRNA92 III gt cds CDS 1265663 1265860 . - 0 ID=CDS69;Parent=mRNA92 III gt csa exon 1266165 1266732 1 - . Parent=mRNA92 III gt cds CDS 1266165 1266732 . - 1 ID=CDS69;Parent=mRNA92 III gt csa exon 1266778 1266845 1 - . Parent=mRNA92 III gt cds CDS 1266778 1266845 . - 0 ID=CDS69;Parent=mRNA92 ### III gt csa gene 1267393 1269234 . - . ID=gene55 III gt csa mRNA 1267393 1269234 . - . ID=mRNA93;Parent=gene55;Target=WP 1 306 + III gt csa exon 1267393 1267608 1 - . Parent=mRNA93 III gt cds CDS 1267393 1267608 . - 0 ID=CDS70;Parent=mRNA93 III gt csa exon 1268344 1268962 1 - . Parent=mRNA93 III gt cds CDS 1268344 1268962 . - 1 ID=CDS70;Parent=mRNA93 III gt csa exon 1269152 1269234 1 - . Parent=mRNA93 III gt cds CDS 1269152 1269234 . - 0 ID=CDS70;Parent=mRNA93 ### III gt csa gene 1269569 1271418 . - . ID=gene56 III gt csa mRNA 1269569 1271418 . - . ID=mRNA94;Parent=gene56;Target=yk1217b07.3 1 777 -,WP 1 307 +,yk1217b07.5 23 624 + III gt csa exon 1269569 1269841 0.96 - . Parent=mRNA94 III gt cds CDS 1269620 1269841 . - 0 ID=CDS71;Parent=mRNA94 III gt csa exon 1269904 1270519 1 - . Parent=mRNA94 III gt cds CDS 1269904 1270519 . - 1 ID=CDS71;Parent=mRNA94 III gt cds CDS 1271293 1271375 . - 0 ID=CDS71;Parent=mRNA94 III gt csa exon 1271293 1271418 1 - . Parent=mRNA94 ### III gt csa gene 1272534 1273666 . - . ID=gene57 III gt csa mRNA 1272534 1273666 . - . ID=mRNA95;Parent=gene57;Target=WP 1 305 + III gt csa exon 1272534 1272749 1 - . Parent=mRNA95 III gt cds CDS 1272534 1272749 . - 0 ID=CDS72;Parent=mRNA95 III gt csa exon 1272798 1273413 1 - . Parent=mRNA95 III gt cds CDS 1272798 1273413 . - 1 ID=CDS72;Parent=mRNA95 III gt csa exon 1273584 1273666 1 - . Parent=mRNA95 III gt cds CDS 1273584 1273666 . - 0 ID=CDS72;Parent=mRNA95 ### III gt csa gene 1274504 1275578 . - . ID=gene58 III gt csa mRNA 1274504 1275578 . - . ID=mRNA96;Parent=gene58;Target=WP 1 306 + III gt csa exon 1274504 1274719 1 - . Parent=mRNA96 III gt cds CDS 1274504 1274719 . - 0 ID=CDS73;Parent=mRNA96 III gt csa exon 1274773 1275391 1 - . Parent=mRNA96 III gt cds CDS 1274773 1275391 . - 1 ID=CDS73;Parent=mRNA96 III gt csa exon 1275496 1275578 1 - . Parent=mRNA96 III gt cds CDS 1275496 1275578 . - 0 ID=CDS73;Parent=mRNA96 ### III gt csa gene 1282418 1282768 . - . ID=gene59 III gt csa mRNA 1282418 1282768 . - . ID=mRNA97;Parent=gene59;Target=yk720c2.3 1 300 - III gt csa exon 1282418 1282633 0.991 - . Parent=mRNA97 III gt csa exon 1282685 1282768 1 - . Parent=mRNA97 ### III gt csa gene 1283269 1288513 . - . ID=gene60 III gt csa mRNA 1283269 1284322 . - . ID=mRNA98;Parent=gene60;Target=yk720c2.5 105 341 +,yk729a8.5 114 340 + III gt csa exon 1283269 1283321 0.981 - . Parent=mRNA98 III gt csa exon 1284052 1284148 1 - . Parent=mRNA98 III gt csa exon 1284236 1284322 1 - . Parent=mRNA98 III gt csa mRNA 1287289 1288513 . - . ID=mRNA99;Parent=gene60;Target=WP 1 312 + III gt csa exon 1287289 1287501 1 - . Parent=mRNA99 III gt cds CDS 1287289 1287501 . - 0 ID=CDS74;Parent=mRNA99 III gt csa exon 1287544 1288153 1 - . Parent=mRNA99 III gt cds CDS 1287544 1288153 . - 1 ID=CDS74;Parent=mRNA99 III gt csa exon 1288401 1288513 1 - . Parent=mRNA99 III gt cds CDS 1288401 1288513 . - 0 ID=CDS74;Parent=mRNA99 ### III gt csa gene 1284398 1287041 . + . ID=gene61 III gt csa mRNA 1284398 1284757 . + . ID=mRNA100;Parent=gene61;Target=yk53f10.5 1 360 + III gt csa exon 1284398 1284757 0.989 + . Parent=mRNA100 III gt csa mRNA 1285006 1287041 . + . ID=mRNA101;Parent=gene61;Target=WP 1 303 + III gt csa exon 1285006 1285088 1 + . Parent=mRNA101 III gt cds CDS 1285006 1285088 . + 0 ID=CDS75;Parent=mRNA101 III gt csa exon 1286162 1286777 1 + . Parent=mRNA101 III gt cds CDS 1286162 1286777 . + 1 ID=CDS75;Parent=mRNA101 III gt csa exon 1286832 1287041 1 + . Parent=mRNA101 III gt cds CDS 1286832 1287041 . + 0 ID=CDS75;Parent=mRNA101 ### III gt csa gene 1292041 1293205 . - . ID=gene62 III gt csa mRNA 1292041 1293205 . - . ID=mRNA102;Parent=gene62;Target=WP 1 311 + III gt csa exon 1292041 1292250 1 - . Parent=mRNA102 III gt cds CDS 1292041 1292250 . - 0 ID=CDS76;Parent=mRNA102 III gt csa exon 1292333 1292972 1 - . Parent=mRNA102 III gt cds CDS 1292333 1292972 . - 1 ID=CDS76;Parent=mRNA102 III gt csa exon 1293123 1293205 1 - . Parent=mRNA102 III gt cds CDS 1293123 1293205 . - 0 ID=CDS76;Parent=mRNA102 ### III gt csa gene 1295674 1297059 . + . ID=gene63 III gt csa mRNA 1295674 1297059 . + . ID=mRNA103;Parent=gene63;Target=WP 1 311 +,yk720c2.3 1 237 - III gt csa exon 1295674 1295756 1 + . Parent=mRNA103 III gt cds CDS 1295674 1295756 . + 0 ID=CDS77;Parent=mRNA103 III gt csa exon 1296149 1296785 1 + . Parent=mRNA103 III gt cds CDS 1296149 1296785 . + 1 ID=CDS77;Parent=mRNA103 III gt csa exon 1296847 1297059 1 + . Parent=mRNA103 III gt cds CDS 1296847 1297059 . + 0 ID=CDS77;Parent=mRNA103 ### III gt csa gene 1298564 1299474 . + . ID=gene64 III gt csa mRNA 1298564 1299474 . + . ID=mRNA104;Parent=gene64;Target=WP 1 292 + III gt csa exon 1298564 1299238 0.952 + . Parent=mRNA104 III gt cds CDS 1298906 1299238 . + 0 ID=CDS78;Parent=mRNA104 III gt csa exon 1299280 1299474 1 + . Parent=mRNA104 III gt cds CDS 1299280 1299474 . + 0 ID=CDS78;Parent=mRNA104 ### III gt csa gene 1303704 1305451 . + . ID=gene65 III gt csa mRNA 1303704 1305451 . + . ID=mRNA105;Parent=gene65;Target=WP 1 322 + III gt csa exon 1303704 1303792 1 + . Parent=mRNA105 III gt cds CDS 1303704 1303792 . + 0 ID=CDS79;Parent=mRNA105 III gt csa exon 1303837 1304464 1 + . Parent=mRNA105 III gt cds CDS 1303837 1304464 . + 1 ID=CDS79;Parent=mRNA105 III gt csa exon 1305203 1305451 1 + . Parent=mRNA105 III gt cds CDS 1305203 1305451 . + 0 ID=CDS79;Parent=mRNA105 ### III gt csa gene 1305794 1308239 . - . ID=gene66 III gt csa mRNA 1305794 1308239 . - . ID=mRNA106;Parent=gene66;Target=WP 1 301 + III gt csa exon 1305794 1305988 1 - . Parent=mRNA106 III gt cds CDS 1305794 1305988 . - 0 ID=CDS80;Parent=mRNA106 III gt csa exon 1306824 1307478 1 - . Parent=mRNA106 III gt cds CDS 1306824 1307478 . - 1 ID=CDS80;Parent=mRNA106 III gt csa exon 1308187 1308239 1 - . Parent=mRNA106 III gt cds CDS 1308187 1308239 . - 0 ID=CDS80;Parent=mRNA106 ### III gt csa gene 1309177 1311200 . + . ID=gene67 III gt csa mRNA 1309177 1311200 . + . ID=mRNA107;Parent=gene67;Target=WP 1 337 + III gt csa exon 1309177 1309335 1 + . Parent=mRNA107 III gt cds CDS 1309177 1309335 . + 0 ID=CDS81;Parent=mRNA107 III gt csa exon 1309577 1309744 1 + . Parent=mRNA107 III gt cds CDS 1309577 1309744 . + 0 ID=CDS81;Parent=mRNA107 III gt csa exon 1309838 1309936 1 + . Parent=mRNA107 III gt cds CDS 1309838 1309936 . + 0 ID=CDS81;Parent=mRNA107 III gt csa exon 1310015 1310083 1 + . Parent=mRNA107 III gt cds CDS 1310015 1310083 . + 0 ID=CDS81;Parent=mRNA107 III gt csa exon 1310130 1310283 1 + . Parent=mRNA107 III gt cds CDS 1310130 1310283 . + 0 ID=CDS81;Parent=mRNA107 III gt csa exon 1310329 1310399 1 + . Parent=mRNA107 III gt cds CDS 1310329 1310399 . + 2 ID=CDS81;Parent=mRNA107 III gt csa exon 1310910 1311200 1 + . Parent=mRNA107 III gt cds CDS 1310910 1311200 . + 0 ID=CDS81;Parent=mRNA107 ### III gt csa gene 1311218 1312383 . - . ID=gene68 III gt csa mRNA 1311218 1312383 . - . ID=mRNA108;Parent=gene68;Target=WP 1 241 + III gt csa exon 1311218 1311421 1 - . Parent=mRNA108 III gt cds CDS 1311218 1311421 . - 0 ID=CDS82;Parent=mRNA108 III gt cds CDS 1311716 1312039 . - 0 ID=CDS82;Parent=mRNA108 III gt csa exon 1311716 1312111 1 - . Parent=mRNA108 III gt csa exon 1312266 1312383 0.463 - . Parent=mRNA108 ### III gt csa gene 1313348 1315208 . - . ID=gene69 III gt csa mRNA 1313348 1315208 . - . ID=mRNA109;Parent=gene69;Target=yk1237h07.3 1 660 -,WP 1 302 +,yk1237h07.5 1 139 + III gt csa exon 1313348 1313559 0.995 - . Parent=mRNA109 III gt cds CDS 1313362 1313559 . - 0 ID=CDS83;Parent=mRNA109 III gt csa exon 1314031 1314655 1 - . Parent=mRNA109 III gt cds CDS 1314031 1314655 . - 1 ID=CDS83;Parent=mRNA109 III gt cds CDS 1315090 1315172 . - 0 ID=CDS83;Parent=mRNA109 III gt csa exon 1315090 1315208 0.992 - . Parent=mRNA109 ### III gt csa gene 1315254 1316655 . + . ID=gene70 III gt csa mRNA 1315254 1316655 . + . ID=mRNA110;Parent=gene70;Target=WP 1 274 + III gt csa exon 1315254 1315357 1 + . Parent=mRNA110 III gt cds CDS 1315254 1315357 . + 0 ID=CDS84;Parent=mRNA110 III gt csa exon 1315402 1315494 1 + . Parent=mRNA110 III gt cds CDS 1315402 1315494 . + 1 ID=CDS84;Parent=mRNA110 III gt csa exon 1316031 1316655 1 + . Parent=mRNA110 III gt cds CDS 1316031 1316655 . + 1 ID=CDS84;Parent=mRNA110 ### III gt csa gene 1319006 1321651 . - . ID=gene71 III gt csa mRNA 1319006 1321651 . - . ID=mRNA111;Parent=gene71;Target=WP 1 302 + III gt csa exon 1319006 1319215 1 - . Parent=mRNA111 III gt cds CDS 1319006 1319215 . - 0 ID=CDS85;Parent=mRNA111 III gt csa exon 1319264 1319888 1 - . Parent=mRNA111 III gt cds CDS 1319264 1319888 . - 1 ID=CDS85;Parent=mRNA111 III gt csa exon 1321581 1321651 1 - . Parent=mRNA111 III gt cds CDS 1321581 1321651 . - 0 ID=CDS85;Parent=mRNA111 ### III gt csa gene 1322136 1323621 . - . ID=gene72 III gt csa mRNA 1322136 1323621 . - . ID=mRNA112;Parent=gene72;Target=yk546f3.5 1 377 -,WP 1 304 + III gt csa exon 1322136 1322353 0.995 - . Parent=mRNA112 III gt cds CDS 1322138 1322353 . - 0 ID=CDS86;Parent=mRNA112 III gt csa exon 1322402 1323026 1 - . Parent=mRNA112 III gt cds CDS 1322402 1323026 . - 1 ID=CDS86;Parent=mRNA112 III gt csa exon 1323551 1323621 1 - . Parent=mRNA112 III gt cds CDS 1323551 1323621 . - 0 ID=CDS86;Parent=mRNA112 ### III gt csa gene 1328634 1333667 . + . ID=gene73 III gt csa mRNA 1328634 1333667 . + . ID=mRNA113;Parent=gene73;Target=WP 1 500 + III gt csa exon 1328634 1328704 1 + . Parent=mRNA113 III gt cds CDS 1328634 1328704 . + 0 ID=CDS87;Parent=mRNA113 III gt csa exon 1329933 1330529 1 + . Parent=mRNA113 III gt cds CDS 1329933 1330529 . + 1 ID=CDS87;Parent=mRNA113 III gt csa exon 1331997 1332615 1 + . Parent=mRNA113 III gt cds CDS 1331997 1332615 . + 1 ID=CDS87;Parent=mRNA113 III gt csa exon 1333455 1333667 1 + . Parent=mRNA113 III gt cds CDS 1333455 1333667 . + 0 ID=CDS87;Parent=mRNA113 ### III gt csa gene 1333841 1334165 . - . ID=gene74 III gt csa mRNA 1333841 1334165 . - . ID=mRNA114;Parent=gene74;Target=WP 1 92 + III gt csa exon 1333841 1333873 0.825 - . Parent=mRNA114 III gt cds CDS 1333841 1333873 . - 0 ID=CDS88;Parent=mRNA114 III gt cds CDS 1333923 1334126 . - 0 ID=CDS88;Parent=mRNA114 III gt csa exon 1333923 1334165 0.915 - . Parent=mRNA114 ### III gt csa gene 1336697 1342484 . - . ID=gene75 III gt csa mRNA 1336697 1340323 . - . ID=mRNA115;Parent=gene75;Target=yk872h02.3 1 703 -,WP 1 327 + III gt csa exon 1336697 1337005 0.997 - . Parent=mRNA115 III gt cds CDS 1336802 1337005 . - 0 ID=CDS89;Parent=mRNA115 III gt csa exon 1338016 1338619 1 - . Parent=mRNA115 III gt cds CDS 1338016 1338619 . - 1 ID=CDS89;Parent=mRNA115 III gt csa exon 1340092 1340175 1 - . Parent=mRNA115 III gt cds CDS 1340092 1340175 . - 1 ID=CDS89;Parent=mRNA115 III gt csa exon 1340235 1340323 1 - . Parent=mRNA115 III gt cds CDS 1340235 1340323 . - 0 ID=CDS89;Parent=mRNA115 III gt csa mRNA 1340606 1342484 . - . ID=mRNA116;Parent=gene75;Target=WP 1 329 + III gt csa exon 1340606 1340800 1 - . Parent=mRNA116 III gt cds CDS 1340606 1340800 . - 0 ID=CDS90;Parent=mRNA116 III gt csa exon 1340854 1341023 1 - . Parent=mRNA116 III gt cds CDS 1340854 1341023 . - 2 ID=CDS90;Parent=mRNA116 III gt csa exon 1341072 1341547 1 - . Parent=mRNA116 III gt cds CDS 1341072 1341547 . - 1 ID=CDS90;Parent=mRNA116 III gt csa exon 1342339 1342484 1 - . Parent=mRNA116 III gt cds CDS 1342339 1342484 . - 0 ID=CDS90;Parent=mRNA116 ### III gt csa gene 1342986 1344682 . + . ID=gene76 III gt csa mRNA 1342986 1344682 . + . ID=mRNA117;Parent=gene76;Target=WP 1 325 + III gt csa exon 1342986 1343131 1 + . Parent=mRNA117 III gt cds CDS 1342986 1343131 . + 0 ID=CDS91;Parent=mRNA117 III gt csa exon 1343802 1344423 1 + . Parent=mRNA117 III gt cds CDS 1343802 1344423 . + 1 ID=CDS91;Parent=mRNA117 III gt csa exon 1344476 1344682 1 + . Parent=mRNA117 III gt cds CDS 1344476 1344682 . + 0 ID=CDS91;Parent=mRNA117 ### III gt csa gene 1344968 1345784 . - . ID=gene77 III gt csa mRNA 1344968 1345784 . - . ID=mRNA118;Parent=gene77;Target=WP 1 254 + III gt csa exon 1344968 1345417 1 - . Parent=mRNA118 III gt cds CDS 1344968 1345417 . - 0 ID=CDS92;Parent=mRNA118 III gt csa exon 1345473 1345784 1 - . Parent=mRNA118 III gt cds CDS 1345473 1345784 . - 0 ID=CDS92;Parent=mRNA118 ### III gt csa gene 1346305 1347118 . - . ID=gene78 III gt csa mRNA 1346305 1347118 . - . ID=mRNA119;Parent=gene78;Target=WP 1 251 + III gt csa exon 1346305 1346754 1 - . Parent=mRNA119 III gt cds CDS 1346305 1346754 . - 0 ID=CDS93;Parent=mRNA119 III gt csa exon 1346816 1347118 1 - . Parent=mRNA119 III gt cds CDS 1346816 1347118 . - 0 ID=CDS93;Parent=mRNA119 ### III gt csa gene 1347777 1349390 . - . ID=gene79 III gt csa mRNA 1347777 1349390 . - . ID=mRNA120;Parent=gene79;Target=WP 1 268 + III gt csa exon 1347777 1347980 1 - . Parent=mRNA120 III gt cds CDS 1347777 1347980 . - 0 ID=CDS94;Parent=mRNA120 III gt csa exon 1348040 1348143 1 - . Parent=mRNA120 III gt cds CDS 1348040 1348143 . - 2 ID=CDS94;Parent=mRNA120 III gt csa exon 1348299 1348657 1 - . Parent=mRNA120 III gt cds CDS 1348299 1348657 . - 1 ID=CDS94;Parent=mRNA120 III gt csa exon 1349254 1349390 1 - . Parent=mRNA120 III gt cds CDS 1349254 1349390 . - 0 ID=CDS94;Parent=mRNA120 ### III gt csa gene 1349742 1350826 . - . ID=gene80 III gt csa mRNA 1349742 1350826 . - . ID=mRNA121;Parent=gene80;Target=WP 1 253 + III gt csa exon 1349742 1350188 1 - . Parent=mRNA121 III gt cds CDS 1349742 1350188 . - 0 ID=CDS95;Parent=mRNA121 III gt csa exon 1350515 1350826 1 - . Parent=mRNA121 III gt cds CDS 1350515 1350826 . - 0 ID=CDS95;Parent=mRNA121 ### III gt csa gene 1351206 1353035 . - . ID=gene81 III gt csa mRNA 1351206 1353035 . - . ID=mRNA122;Parent=gene81;Target=WP 18 236 + III gt csa exon 1351206 1351652 1 - . Parent=mRNA122 III gt cds CDS 1351206 1351652 . - 0 ID=CDS96;Parent=mRNA122 III gt cds CDS 1352826 1352909 . - 0 ID=CDS96;Parent=mRNA122 III gt csa exon 1352826 1353035 1 - . Parent=mRNA122 ### III gt csa gene 1354987 1355410 . - . ID=gene82 III gt csa mRNA 1354987 1355410 . - . ID=mRNA123;Parent=gene82;Target=WP 1 125 + III gt csa exon 1354987 1355171 1 - . Parent=mRNA123 III gt cds CDS 1354987 1355171 . - 2 ID=CDS97;Parent=mRNA123 III gt csa exon 1355221 1355410 1 - . Parent=mRNA123 III gt cds CDS 1355221 1355410 . - 0 ID=CDS97;Parent=mRNA123 ### III gt csa gene 1357070 1359759 . - . ID=gene83 III gt csa mRNA 1357070 1359125 . - . ID=mRNA124;Parent=gene83;Target=WP 1 391 + III gt csa exon 1357070 1357311 1 - . Parent=mRNA124 III gt cds CDS 1357070 1357311 . - 2 ID=CDS98;Parent=mRNA124 III gt csa exon 1357360 1357471 1 - . Parent=mRNA124 III gt cds CDS 1357360 1357471 . - 0 ID=CDS98;Parent=mRNA124 III gt csa exon 1357509 1357735 0.969 - . Parent=mRNA124 III gt cds CDS 1357509 1357735 . - 2 ID=CDS98;Parent=mRNA124 III gt csa exon 1357835 1357952 1 - . Parent=mRNA124 III gt cds CDS 1357835 1357952 . - 0 ID=CDS98;Parent=mRNA124 III gt csa exon 1357998 1358245 1 - . Parent=mRNA124 III gt cds CDS 1357998 1358245 . - 2 ID=CDS98;Parent=mRNA124 III gt csa exon 1358287 1358398 1 - . Parent=mRNA124 III gt cds CDS 1358287 1358398 . - 0 ID=CDS98;Parent=mRNA124 III gt csa exon 1359006 1359125 1 - . Parent=mRNA124 III gt cds CDS 1359006 1359125 . - 0 ID=CDS98;Parent=mRNA124 III gt csa mRNA 1359244 1359759 . - . ID=mRNA125;Parent=gene83;Target=WP 1 140 + III gt csa exon 1359244 1359488 1 - . Parent=mRNA125 III gt cds CDS 1359244 1359488 . - 2 ID=CDS99;Parent=mRNA125 III gt csa exon 1359538 1359655 1 - . Parent=mRNA125 III gt cds CDS 1359538 1359655 . - 0 ID=CDS99;Parent=mRNA125 III gt csa exon 1359703 1359759 1 - . Parent=mRNA125 III gt cds CDS 1359703 1359759 . - 0 ID=CDS99;Parent=mRNA125 ### III gt csa gene 1360497 1362666 . + . ID=gene84 III gt csa mRNA 1360497 1362666 . + . ID=mRNA126;Parent=gene84;Target=WP 1 537 + III gt csa exon 1360497 1360553 1 + . Parent=mRNA126 III gt cds CDS 1360497 1360553 . + 0 ID=CDS100;Parent=mRNA126 III gt csa exon 1360601 1360718 1 + . Parent=mRNA126 III gt cds CDS 1360601 1360718 . + 0 ID=CDS100;Parent=mRNA126 III gt csa exon 1360779 1360948 1 + . Parent=mRNA126 III gt cds CDS 1360779 1360948 . + 2 ID=CDS100;Parent=mRNA126 III gt csa exon 1361034 1361151 1 + . Parent=mRNA126 III gt cds CDS 1361034 1361151 . + 0 ID=CDS100;Parent=mRNA126 III gt csa exon 1361197 1361420 1 + . Parent=mRNA126 III gt cds CDS 1361197 1361420 . + 2 ID=CDS100;Parent=mRNA126 III gt csa exon 1361465 1361576 1 + . Parent=mRNA126 III gt cds CDS 1361465 1361576 . + 0 ID=CDS100;Parent=mRNA126 III gt csa exon 1361749 1361960 1 + . Parent=mRNA126 III gt cds CDS 1361749 1361960 . + 2 ID=CDS100;Parent=mRNA126 III gt csa exon 1362006 1362123 1 + . Parent=mRNA126 III gt cds CDS 1362006 1362123 . + 0 ID=CDS100;Parent=mRNA126 III gt csa exon 1362185 1362666 1 + . Parent=mRNA126 III gt cds CDS 1362185 1362666 . + 2 ID=CDS100;Parent=mRNA126 ### III gt csa gene 1374142 1374515 . + . ID=gene85 III gt csa mRNA 1374142 1374515 . + . ID=mRNA127;Parent=gene85;Target=yk604h8.5 1 374 + III gt csa exon 1374142 1374515 1 + . Parent=mRNA127 ### III gt csa gene 1374575 1374874 . - . ID=gene86 III gt csa mRNA 1374575 1374874 . - . ID=mRNA128;Parent=gene86;Target=yk604h8.3 1 300 + III gt csa exon 1374575 1374874 0.993 - . Parent=mRNA128 ### III gt csa gene 1376935 1377993 . - . ID=gene87 III gt csa mRNA 1376935 1377993 . - . ID=mRNA129;Parent=gene87;Target=WP 1 215 + III gt csa exon 1376935 1377144 1 - . Parent=mRNA129 III gt cds CDS 1376935 1377144 . - 0 ID=CDS101;Parent=mRNA129 III gt csa exon 1377379 1377681 1 - . Parent=mRNA129 III gt cds CDS 1377379 1377681 . - 0 ID=CDS101;Parent=mRNA129 III gt csa exon 1377862 1377993 1 - . Parent=mRNA129 III gt cds CDS 1377862 1377993 . - 0 ID=CDS101;Parent=mRNA129 ### III gt csa gene 1379130 1383572 . - . ID=gene88 III gt csa mRNA 1379130 1383572 . - . ID=mRNA130;Parent=gene88;Target=WP 1 439 + III gt csa exon 1379130 1379360 1 - . Parent=mRNA130 III gt cds CDS 1379130 1379360 . - 0 ID=CDS102;Parent=mRNA130 III gt csa exon 1379412 1379579 1 - . Parent=mRNA130 III gt cds CDS 1379412 1379579 . - 0 ID=CDS102;Parent=mRNA130 III gt csa exon 1380424 1380553 1 - . Parent=mRNA130 III gt cds CDS 1380424 1380553 . - 1 ID=CDS102;Parent=mRNA130 III gt csa exon 1380609 1380685 0.902 - . Parent=mRNA130 III gt cds CDS 1380609 1380685 . - 0 ID=CDS102;Parent=mRNA130 III gt csa exon 1382653 1382989 1 - . Parent=mRNA130 III gt cds CDS 1382653 1382989 . - 1 ID=CDS102;Parent=mRNA130 III gt csa exon 1383057 1383140 1 - . Parent=mRNA130 III gt cds CDS 1383057 1383140 . - 1 ID=CDS102;Parent=mRNA130 III gt csa exon 1383283 1383572 1 - . Parent=mRNA130 III gt cds CDS 1383283 1383572 . - 0 ID=CDS102;Parent=mRNA130 ### III gt csa gene 1387471 1388069 . + . ID=gene89 III gt csa mRNA 1387471 1388069 . + . ID=mRNA131;Parent=gene89;Target=yk539a12.5 1 360 + III gt csa exon 1387471 1387545 0.967 + . Parent=mRNA131 III gt csa exon 1387786 1388069 1 + . Parent=mRNA131 ### III gt csa gene 1387828 1388127 . - . ID=gene90 III gt csa mRNA 1387828 1388127 . - . ID=mRNA132;Parent=gene90;Target=yk539a12.3 1 300 + III gt cds CDS 1387828 1388031 . - 0 ID=CDS103;Parent=mRNA132 III gt csa exon 1387828 1388127 0.987 - . Parent=mRNA132 ### III gt csa gene 1390536 1391840 . - . ID=gene91 III gt csa mRNA 1390536 1391840 . - . ID=mRNA133;Parent=gene91;Target=WP 1 252 +,CK579587 1 622 +,CB102366 100 678 +,CB102201 91 657 +,CK579588 1 556 +,CK583482 1 503 +,CB102373 95 478 +,CK583393 1 222 + III gt csa exon 1390536 1390718 1 - . Parent=mRNA133 III gt cds CDS 1390536 1390718 . - 0 ID=CDS104;Parent=mRNA133 III gt csa exon 1390764 1391067 1 - . Parent=mRNA133 III gt cds CDS 1390764 1391067 . - 1 ID=CDS104;Parent=mRNA133 III gt csa exon 1391411 1391499 1 - . Parent=mRNA133 III gt cds CDS 1391411 1391499 . - 0 ID=CDS104;Parent=mRNA133 III gt csa exon 1391551 1391638 1 - . Parent=mRNA133 III gt cds CDS 1391551 1391638 . - 1 ID=CDS104;Parent=mRNA133 III gt csa exon 1391688 1391736 1 - . Parent=mRNA133 III gt cds CDS 1391688 1391736 . - 2 ID=CDS104;Parent=mRNA133 III gt cds CDS 1391782 1391824 . - 0 ID=CDS104;Parent=mRNA133 III gt csa exon 1391782 1391840 1 - . Parent=mRNA133 ### III gt csa gene 1399366 1401295 . + . ID=gene92 III gt csa mRNA 1399366 1401295 . + . ID=mRNA134;Parent=gene92;Target=WP 1 357 + III gt csa exon 1399366 1399462 1 + . Parent=mRNA134 III gt cds CDS 1399366 1399462 . + 0 ID=CDS105;Parent=mRNA134 III gt csa exon 1399964 1400070 1 + . Parent=mRNA134 III gt cds CDS 1399964 1400070 . + 2 ID=CDS105;Parent=mRNA134 III gt csa exon 1400121 1400270 1 + . Parent=mRNA134 III gt cds CDS 1400121 1400270 . + 0 ID=CDS105;Parent=mRNA134 III gt csa exon 1400319 1400648 1 + . Parent=mRNA134 III gt cds CDS 1400319 1400648 . + 0 ID=CDS105;Parent=mRNA134 III gt csa exon 1400696 1400854 1 + . Parent=mRNA134 III gt cds CDS 1400696 1400854 . + 0 ID=CDS105;Parent=mRNA134 III gt csa exon 1401068 1401295 1 + . Parent=mRNA134 III gt cds CDS 1401068 1401295 . + 0 ID=CDS105;Parent=mRNA134 ### III gt csa gene 1401956 1403309 . + . ID=gene93 III gt csa mRNA 1401956 1403309 . + . ID=mRNA135;Parent=gene93;Target=WP 1 258 + III gt csa exon 1401956 1402065 1 + . Parent=mRNA135 III gt cds CDS 1401956 1402065 . + 0 ID=CDS106;Parent=mRNA135 III gt csa exon 1402385 1402463 1 + . Parent=mRNA135 III gt cds CDS 1402385 1402463 . + 1 ID=CDS106;Parent=mRNA135 III gt csa exon 1402510 1402610 1 + . Parent=mRNA135 III gt cds CDS 1402510 1402610 . + 0 ID=CDS106;Parent=mRNA135 III gt csa exon 1402777 1403077 1 + . Parent=mRNA135 III gt cds CDS 1402777 1403077 . + 1 ID=CDS106;Parent=mRNA135 III gt csa exon 1403127 1403309 1 + . Parent=mRNA135 III gt cds CDS 1403127 1403309 . + 0 ID=CDS106;Parent=mRNA135 ### III gt csa gene 1404782 1406220 . + . ID=gene94 III gt csa mRNA 1404782 1406220 . + . ID=mRNA136;Parent=gene94;Target=yk1098g06.5 11 546 +,WP 1 257 +,yk1098g06.3 1 708 - III gt csa exon 1404782 1404928 0.993 + . Parent=mRNA136 III gt cds CDS 1404893 1404928 . + 0 ID=CDS107;Parent=mRNA136 III gt csa exon 1404984 1405322 1 + . Parent=mRNA136 III gt cds CDS 1404984 1405322 . + 0 ID=CDS107;Parent=mRNA136 III gt csa exon 1405369 1405527 1 + . Parent=mRNA136 III gt cds CDS 1405369 1405527 . + 0 ID=CDS107;Parent=mRNA136 III gt cds CDS 1405927 1406163 . + 0 ID=CDS107;Parent=mRNA136 III gt csa exon 1405927 1406220 0.997 + . Parent=mRNA136 ### III gt csa gene 1409301 1414108 . - . ID=gene95 III gt csa mRNA 1409301 1412855 . - . ID=mRNA137;Parent=gene95;Target=yk802c04.3 1 671 -,yk1740f01.3 1 653 -,yk1067h09.3 1 728 -,yk482a5.3 1 300 -,WP 1 305 + III gt csa exon 1409301 1409698 0.997 - . Parent=mRNA137 III gt cds CDS 1409519 1409698 . - 0 ID=CDS108;Parent=mRNA137 III gt csa exon 1410797 1410956 1 - . Parent=mRNA137 III gt cds CDS 1410797 1410956 . - 1 ID=CDS108;Parent=mRNA137 III gt csa exon 1412055 1412310 1 - . Parent=mRNA137 III gt cds CDS 1412055 1412310 . - 2 ID=CDS108;Parent=mRNA137 III gt csa exon 1412537 1412855 1 - . Parent=mRNA137 III gt cds CDS 1412537 1412855 . - 0 ID=CDS108;Parent=mRNA137 III gt csa mRNA 1409301 1414108 . - . ID=mRNA138;Parent=gene95;Target=yk802c04.3 1 671 -,yk1740f01.3 1 653 -,yk1403f06.3 1 732 -,yk482a5.3 1 300 -,RP 1 229 +,BP 1 231 +,yk1403f06.5 23 637 +,yk1740f01.5 23 593 +,yk802c04.5 23 538 +,yk71h4.5 1 360 +,yk336a10.5 1 377 +,yk647g12.5 1 380 +,yk625f5.5 1 383 +,yk498e8.5 1 360 +,yk236b3.5 1 360 +,yk624b7.5 1 360 +,yk614c9.5 1 360 +,yk376c11.5 1 373 +,yk596b12.5 1 377 +,yk482a5.5 1 342 +,yk424h6.5 1 348 +,yk91b11.5 1 348 +,yk743g6.5 23 194 + III gt csa exon 1409301 1409698 0.997 - . Parent=mRNA138 III gt cds CDS 1409519 1409698 . - 0 ID=CDS109;Parent=mRNA138 III gt csa exon 1410797 1410956 1 - . Parent=mRNA138 III gt cds CDS 1410797 1410956 . - 1 ID=CDS109;Parent=mRNA138 III gt csa exon 1412055 1412238 1 - . Parent=mRNA138 III gt cds CDS 1412055 1412238 . - 2 ID=CDS109;Parent=mRNA138 III gt cds CDS 1413935 1414106 . - 0 ID=CDS109;Parent=mRNA138 III gt csa exon 1413935 1414108 0.986 - . Parent=mRNA138 III gt csa mRNA 1412867 1413610 . - . ID=mRNA139;Parent=gene95;Target=yk1067h09.5 1 744 + III gt csa exon 1412867 1413610 0.995 - . Parent=mRNA139 ### III gt csa gene 1409354 1409706 . + . ID=gene96 III gt csa mRNA 1409354 1409706 . + . ID=mRNA140;Parent=gene96;Target=yk91b11.3 1 335 +,yk71h4.3 1 335 +,yk596b12.3 1 300 +,yk236b3.3 16 300 +,yk743g6.3 1 300 +,yk647g12.3 1 300 +,yk614c9.3 1 300 +,yk376c11.3 1 300 +,yk424h6.3 1 283 +,yk336a10.3 1 283 +,yk498e8.3 1 282 + III gt csa exon 1409354 1409706 0.983 + . Parent=mRNA140 ### III gt csa gene 1415536 1417177 . - . ID=gene97 III gt csa mRNA 1415536 1417177 . - . ID=mRNA141;Parent=gene97;Target=CK583137 1 508 +,BP 1 124 + III gt csa exon 1415536 1415865 1 - . Parent=mRNA141 III gt cds CDS 1415669 1415865 . - 2 ID=CDS110;Parent=mRNA141 III gt csa exon 1417000 1417177 1 - . Parent=mRNA141 III gt cds CDS 1417000 1417177 . - 0 ID=CDS110;Parent=mRNA141 ### III gt csa gene 1418971 1420424 . + . ID=gene98 III gt csa mRNA 1418971 1420424 . + . ID=mRNA142;Parent=gene98;Target=yk427c9.5 1 375 +,yk1446h08.3 23 168 -,CEESI82R 12 304 +,yk1423c01.3 23 334 -,yk827b03.5 22 336 +,yk1457b06.5 23 366 +,yk573e8.5 11 360 +,yk289b9.5 11 373 +,yk1446h08.5 23 392 +,yk497f5.5 1 377 +,yk1299h01.3 192 594 -,yk1637f01.5 22 432 +,yk1156a09.5 23 434 +,yk1498f01.5 23 435 +,yk1370f10.5 23 435 +,yk1692c10.5 22 434 +,yk1050c09.3 23 436 -,yk1099h06.5 23 435 +,yk1438b02.5 23 436 +,yk1490c07.5 23 435 +,yk1667g11.5 23 436 +,yk1500g09.5 23 436 +,yk1743g04.5 23 436 +,yk1662h02.5 23 437 +,yk1699g12.5 23 438 +,yk809d12.5 23 437 +,yk891h02.5 23 438 +,yk1324a12.5 23 439 +,yk1581b07.5 23 439 +,yk1597e02.5 22 438 +,yk1005d11.5 23 439 +,yk1015e03.3 23 440 -,yk1258f10.5 24 442 +,yk1134e12.5 23 441 +,yk1329c12.5 24 442 +,yk1348g09.5 23 442 +,yk1281b11.5 23 442 +,yk1347e08.5 23 443 +,yk819c03.5 23 443 +,yk1370f08.5 23 447 +,yk1505b08.3 37 462 -,yk1307b12.3 182 609 -,yk1076e08.5 23 454 +,yk1299h06.3 291 730 -,yk1304f10.3 27 468 -,yk1304f10.5 27 484 +,yk763c11.5 23 480 +,yk776c05.5 23 484 +,yk1167g12.5 22 484 +,yk1340a03.5 22 484 +,yk1261h11.3 195 659 -,yk1033d09.5 18 482 +,yk1041d01.5 23 487 +,yk1307e07.3 224 690 -,yk776b07.5 18 504 +,yk1717f07.5 22 512 +,yk1099h06.3 23 517 -,yk1122e01.3 23 519 -,yk1151e05.3 24 518 -,yk1033d09.3 18 513 -,yk1200b10.3 22 517 -,yk1445a08.3 218 714 -,yk1499d03.3 226 722 -,yk1508b06.3 222 718 -,yk1523g04.3 78 575 -,yk1701c04.3 85 583 -,yk1276a07.3 229 729 -,yk1566c03.3 23 522 -,yk1534b01.3 227 726 -,yk1559d06.3 140 640 -,yk1597e02.3 22 523 -,yk1420g05.3 23 524 -,yk1476g05.3 224 725 -,yk1502f07.3 203 704 -,yk1526c08.3 102 605 -,yk1564e02.3 186 690 -,yk1581b07.3 23 525 -,yk1411e02.3 22 524 -,yk1460g06.3 191 693 -,yk1490c07.3 23 524 -,yk1459c06.3 212 714 -,yk1468c03.3 123 625 -,yk1662h02.3 23 525 -,yk1706f01.3 23 525 -,yk1730a09.3 23 525 -,yk1751g08.3 222 724 -,yk1450f03.3 220 723 -,yk1498f01.3 23 526 -,yk1347e08.3 23 526 -,yk1281f04.3 23 528 -,yk1026f10.3 25 529 -,yk1326f10.3 145 649 -,yk776b07.3 18 522 -,yk819c03.3 23 527 -,yk1363d08.3 23 528 -,yk1141a10.3 23 531 -,yk891h02.3 23 531 -,yk1079e02.3 23 530 -,yk1142c02.3 192 699 -,yk827b03.3 22 529 -,yk1041d01.3 23 532 -,yk1022f05.3 188 696 -,yk1161d09.3 23 531 -,yk1175b05.3 23 531 -,yk1229f01.3 223 731 -,yk776c05.3 23 531 -,yk1258a02.3 23 533 -,yk1258f10.3 24 533 -,yk1213d11.3 257 767 -,yk1021b10.3 23 532 -,yk1212f06.3 183 692 -,yk1338c06.3 23 532 -,yk1041a09.3 233 742 -,yk1076e08.3 23 532 -,yk1134e12.3 23 532 -,yk1156a09.3 23 532 -,yk1167g12.3 22 531 -,yk1217d06.3 183 692 -,yk1238d11.3 23 532 -,yk1239g07.3 223 732 -,yk1261c01.3 218 727 -,yk1266c12.3 23 532 -,yk1266e05.3 23 532 -,yk1281b07.3 23 532 -,yk1289h06.3 101 610 -,yk1309b05.3 224 733 -,yk1382h02.5 23 532 +,yk1329c12.3 24 537 -,yk1063g09.3 154 665 -,yk1089d01.3 23 533 -,yk1667g11.3 23 534 -,yk1500g09.3 23 534 -,yk1653c08.3 23 534 -,yk1370f08.3 23 535 -,yk1370f10.3 23 535 -,yk1629g01.3 23 535 -,yk1743g04.3 23 536 -,yk1239f04.3 23 538 -,yk1717f07.3 22 538 -,yk1274f02.3 23 540 -,yk1223a01.3 150 668 -,yk812e07.5 23 541 +,yk812e07.3 23 540 -,yk1340a03.3 22 541 -,yk1021b10.5 23 543 +,yk1514e03.3 184 709 -,yk1338c06.5 23 553 +,yk1238d11.5 23 553 +,yk1026f10.5 25 554 +,yk1363d08.5 23 552 +,yk1274f02.5 23 552 +,yk1420g05.5 23 552 +,yk1566c03.5 23 552 +,yk1629g01.5 23 552 +,yk1706f01.5 23 552 +,yk1730a09.5 23 552 +,yk1122e01.5 23 552 +,yk1141a10.5 23 552 +,yk1151e05.5 24 553 +,yk1161d09.5 23 552 +,yk1175b05.5 23 552 +,yk1281f04.5 23 552 +,yk1079e02.5 23 551 +,yk1310e07.5 23 555 +,yk1089d01.5 23 572 +,yk1527c07.5 23 589 +,yk1344e01.3 19 587 -,yk761f11.5 17 614 +,yk809d12.3 23 628 -,yk1310e07.3 23 628 -,yk470d10.5 1 376 +,yk1015e03.5 1 388 +,yk110a8.5 1 360 +,yk114f3.5 1 360 +,yk78a9.5 1 383 +,yk60a2.5 1 330 +,yk677a10.5 1 373 +,yk634d3.5 1 374 +,yk389a2.5 1 376 +,yk591g5.5 1 375 +,yk247h2.5 1 244 +,yk92d5.5 1 322 +,yk62e4.5 1 330 +,yk82d9.5 1 352 +,yk484e3.5 1 367 +,yk342c11.5 1 371 +,yk210g1.5 1 371 +,yk199b1.5 1 372 +,yk609a6.5 1 372 +,yk602g4.5 1 374 +,yk472b4.5 1 376 +,yk532b2.5 1 376 +,yk628h8.5 1 384 +,yk470d10.3 1 300 -,yk67e2.5 1 360 +,yk495b4.5 1 360 +,yk515d3.5 1 367 +,yk586d10.5 1 377 +,yk631d3.5 1 383 +,yk77e2.5 1 385 +,yk573e6.5 1 360 +,yk561d9.5 1 376 +,yk487f9.5 1 360 +,yk491d2.5 1 360 +,yk418d7.5 1 373 +,yk391d4.5 1 377 +,yk281f9.5 1 376 +,yk612a2.5 1 360 +,yk667h3.5 1 378 +,yk103f11.5 1 330 +,yk82d4.5 1 330 +,yk502f2.5 1 370 +,yk399b1.5 1 377 +,yk1388g06.3 1 499 -,yk1388g06.5 1 513 +,yk255e5.5 1 360 +,yk1230h08.5 1 172 +,yk1281b07.5 1 174 +,CK576705 1 199 +,BP 1 117 +,RP 1 117 +,yk393a4.5 1 360 +,CK575334 1 379 +,CK579527 1 498 +,yk1411e02.5 1 103 +,yk568f5.5 1 374 +,yk612e4.5 1 360 +,yk1239f04.5 1 492 +,yk1050c09.5 1 505 +,yk591h11.5 1 360 +,yk635a9.5 1 360 +,yk639e2.5 1 360 +,yk654d2.5 1 382 +,yk648e7.5 1 360 +,yk486b11.5 1 360 +,yk650f12.5 1 360 +,yk1012b08.3 1 317 -,yk1123h12.3 1 463 -,yk579f1.5 1 360 +,yk752f11.5 1 326 +,CEESE35F 1 285 +,CEESP60F 1 283 +,yk1032a02.5 53 422 +,yk633a4.5 1 382 +,yk1299c02.5 1 380 +,yk361d12.5 1 375 +,yk594f10.5 1 356 +,yk847c05.5 1 353 +,CEESB14F 1 300 +,CEESY61FB 1 319 +,yk1382d08.3 1 222 +,yk621b1.3 1 300 +,yk739c4.3 1 300 +,yk597g10.3 1 300 +,yk421a11.3 1 292 +,yk447b3.3 1 300 +,yk599b8.3 1 300 +,yk639a10.3 1 300 +,yk555f9.3 1 300 +,yk615c7.3 1 240 +,yk525g4.3 1 240 +,yk556a10.5 1 365 +,yk1475h10.3 1 136 + III gt csa exon 1418971 1418973 0.667 + . Parent=mRNA142 III gt csa exon 1419186 1419251 1 + . Parent=mRNA142 III gt csa exon 1419321 1420424 0.99 + . Parent=mRNA142 III gt cds CDS 1420005 1420424 . + 0 ID=CDS111;Parent=mRNA142 III gt csa mRNA 1419094 1420424 . + . ID=mRNA143;Parent=gene98;Target=yk1587h06.3 135 661 -,yk1212c10.5 1 546 +,yk64h2.5 1 341 +,yk371c5.5 1 370 +,yk596e1.5 1 374 +,yk654c2.5 1 376 +,yk474d11.5 1 377 +,yk1005d11.3 1 502 -,yk1221a01.3 1 512 -,yk1446h08.3 23 168 -,CEESI82R 12 304 +,yk1423c01.3 23 334 -,yk827b03.5 22 336 +,yk1457b06.5 23 366 +,yk573e8.5 11 360 +,yk289b9.5 11 373 +,yk1446h08.5 23 392 +,yk497f5.5 1 377 +,yk1299h01.3 192 594 -,yk1637f01.5 22 432 +,yk1156a09.5 23 434 +,yk1498f01.5 23 435 +,yk1370f10.5 23 435 +,yk1692c10.5 22 434 +,yk1050c09.3 23 436 -,yk1099h06.5 23 435 +,yk1438b02.5 23 436 +,yk1490c07.5 23 435 +,yk1667g11.5 23 436 +,yk1500g09.5 23 436 +,yk1743g04.5 23 436 +,yk1662h02.5 23 437 +,yk1699g12.5 23 438 +,yk809d12.5 23 437 +,yk891h02.5 23 438 +,yk1324a12.5 23 439 +,yk1581b07.5 23 439 +,yk1597e02.5 22 438 +,yk1005d11.5 23 439 +,yk1015e03.3 23 440 -,yk1258f10.5 24 442 +,yk1134e12.5 23 441 +,yk1329c12.5 24 442 +,yk1348g09.5 23 442 +,yk1281b11.5 23 442 +,yk1347e08.5 23 443 +,yk819c03.5 23 443 +,yk1370f08.5 23 447 +,yk1505b08.3 37 462 -,yk1307b12.3 182 609 -,yk1076e08.5 23 454 +,yk1299h06.3 291 730 -,yk1304f10.3 27 468 -,yk1304f10.5 27 484 +,yk763c11.5 23 480 +,yk776c05.5 23 484 +,yk1167g12.5 22 484 +,yk1340a03.5 22 484 +,yk1261h11.3 195 659 -,yk1033d09.5 18 482 +,yk1041d01.5 23 487 +,yk1307e07.3 224 690 -,yk776b07.5 18 504 +,yk1717f07.5 22 512 +,yk1099h06.3 23 517 -,yk1122e01.3 23 519 -,yk1151e05.3 24 518 -,yk1033d09.3 18 513 -,yk1200b10.3 22 517 -,yk1445a08.3 218 714 -,yk1499d03.3 226 722 -,yk1508b06.3 222 718 -,yk1523g04.3 78 575 -,yk1701c04.3 85 583 -,yk1276a07.3 229 729 -,yk1566c03.3 23 522 -,yk1534b01.3 227 726 -,yk1559d06.3 140 640 -,yk1597e02.3 22 523 -,yk1420g05.3 23 524 -,yk1476g05.3 224 725 -,yk1502f07.3 203 704 -,yk1526c08.3 102 605 -,yk1564e02.3 186 690 -,yk1581b07.3 23 525 -,yk1411e02.3 22 524 -,yk1460g06.3 191 693 -,yk1490c07.3 23 524 -,yk1459c06.3 212 714 -,yk1468c03.3 123 625 -,yk1662h02.3 23 525 -,yk1706f01.3 23 525 -,yk1730a09.3 23 525 -,yk1751g08.3 222 724 -,yk1450f03.3 220 723 -,yk1498f01.3 23 526 -,yk1347e08.3 23 526 -,yk1281f04.3 23 528 -,yk1026f10.3 25 529 -,yk1326f10.3 145 649 -,yk776b07.3 18 522 -,yk819c03.3 23 527 -,yk1363d08.3 23 528 -,yk1141a10.3 23 531 -,yk891h02.3 23 531 -,yk1079e02.3 23 530 -,yk1142c02.3 192 699 -,yk827b03.3 22 529 -,yk1041d01.3 23 532 -,yk1022f05.3 188 696 -,yk1161d09.3 23 531 -,yk1175b05.3 23 531 -,yk1229f01.3 223 731 -,yk776c05.3 23 531 -,yk1258a02.3 23 533 -,yk1258f10.3 24 533 -,yk1213d11.3 257 767 -,yk1021b10.3 23 532 -,yk1212f06.3 183 692 -,yk1338c06.3 23 532 -,yk1041a09.3 233 742 -,yk1076e08.3 23 532 -,yk1134e12.3 23 532 -,yk1156a09.3 23 532 -,yk1167g12.3 22 531 -,yk1217d06.3 183 692 -,yk1238d11.3 23 532 -,yk1239g07.3 223 732 -,yk1261c01.3 218 727 -,yk1266c12.3 23 532 -,yk1266e05.3 23 532 -,yk1281b07.3 23 532 -,yk1289h06.3 101 610 -,yk1309b05.3 224 733 -,yk1382h02.5 23 532 +,yk1329c12.3 24 537 -,yk1063g09.3 154 665 -,yk1089d01.3 23 533 -,yk1667g11.3 23 534 -,yk1500g09.3 23 534 -,yk1653c08.3 23 534 -,yk1370f08.3 23 535 -,yk1370f10.3 23 535 -,yk1629g01.3 23 535 -,yk1743g04.3 23 536 -,yk1239f04.3 23 538 -,yk1717f07.3 22 538 -,yk1274f02.3 23 540 -,yk1223a01.3 150 668 -,yk812e07.5 23 541 +,yk812e07.3 23 540 -,yk1340a03.3 22 541 -,yk1021b10.5 23 543 +,yk1514e03.3 184 709 -,yk1338c06.5 23 553 +,yk1238d11.5 23 553 +,yk1026f10.5 25 554 +,yk1363d08.5 23 552 +,yk1274f02.5 23 552 +,yk1420g05.5 23 552 +,yk1566c03.5 23 552 +,yk1629g01.5 23 552 +,yk1706f01.5 23 552 +,yk1730a09.5 23 552 +,yk1122e01.5 23 552 +,yk1141a10.5 23 552 +,yk1151e05.5 24 553 +,yk1161d09.5 23 552 +,yk1175b05.5 23 552 +,yk1281f04.5 23 552 +,yk1079e02.5 23 551 +,yk1310e07.5 23 555 +,yk1089d01.5 23 572 +,yk1527c07.5 23 589 +,yk1344e01.3 19 587 -,yk761f11.5 17 614 +,yk809d12.3 23 628 -,yk1310e07.3 23 628 -,yk470d10.5 1 376 +,yk1015e03.5 1 388 +,yk110a8.5 1 360 +,yk114f3.5 1 360 +,yk78a9.5 1 383 +,yk60a2.5 1 330 +,yk677a10.5 1 373 +,yk634d3.5 1 374 +,yk389a2.5 1 376 +,yk591g5.5 1 375 +,yk247h2.5 1 244 +,yk92d5.5 1 322 +,yk62e4.5 1 330 +,yk82d9.5 1 352 +,yk484e3.5 1 367 +,yk342c11.5 1 371 +,yk210g1.5 1 371 +,yk199b1.5 1 372 +,yk609a6.5 1 372 +,yk602g4.5 1 374 +,yk472b4.5 1 376 +,yk532b2.5 1 376 +,yk628h8.5 1 384 +,yk470d10.3 1 300 -,yk67e2.5 1 360 +,yk495b4.5 1 360 +,yk515d3.5 1 367 +,yk586d10.5 1 377 +,yk631d3.5 1 383 +,yk77e2.5 1 385 +,yk573e6.5 1 360 +,yk561d9.5 1 376 +,yk487f9.5 1 360 +,yk491d2.5 1 360 +,yk418d7.5 1 373 +,yk391d4.5 1 377 +,yk281f9.5 1 376 +,yk612a2.5 1 360 +,yk667h3.5 1 378 +,yk103f11.5 1 330 +,yk82d4.5 1 330 +,yk502f2.5 1 370 +,yk399b1.5 1 377 +,yk1388g06.3 1 499 -,yk1388g06.5 1 513 +,yk255e5.5 1 360 +,yk1230h08.5 1 172 +,yk1281b07.5 1 174 +,CK576705 1 199 +,BP 1 117 +,RP 1 117 +,yk393a4.5 1 360 +,CK575334 1 379 +,CK579527 1 498 +,yk1411e02.5 1 103 +,yk568f5.5 1 374 +,yk612e4.5 1 360 +,yk1239f04.5 1 492 +,yk1050c09.5 1 505 +,yk591h11.5 1 360 +,yk635a9.5 1 360 +,yk639e2.5 1 360 +,yk654d2.5 1 382 +,yk648e7.5 1 360 +,yk486b11.5 1 360 +,yk650f12.5 1 360 +,yk1012b08.3 1 317 -,yk1123h12.3 1 463 -,yk579f1.5 1 360 +,yk752f11.5 1 326 +,CEESE35F 1 285 +,CEESP60F 1 283 +,yk1032a02.5 53 422 +,yk633a4.5 1 382 +,yk1299c02.5 1 380 +,yk361d12.5 1 375 +,yk594f10.5 1 356 +,yk847c05.5 1 353 +,CEESB14F 1 300 +,CEESY61FB 1 319 +,yk1382d08.3 1 222 +,yk621b1.3 1 300 +,yk739c4.3 1 300 +,yk597g10.3 1 300 +,yk421a11.3 1 292 +,yk447b3.3 1 300 +,yk599b8.3 1 300 +,yk639a10.3 1 300 +,yk555f9.3 1 300 +,yk615c7.3 1 240 +,yk525g4.3 1 240 +,yk556a10.5 1 365 +,yk1475h10.3 1 136 + III gt csa exon 1419094 1419103 1 + . Parent=mRNA143 III gt csa exon 1419166 1419251 0.919 + . Parent=mRNA143 III gt csa exon 1419321 1420424 0.99 + . Parent=mRNA143 III gt cds CDS 1420005 1420424 . + 0 ID=CDS112;Parent=mRNA143 III gt csa mRNA 1419138 1420087 . + . ID=mRNA144;Parent=gene98;Target=yk844c03.3 152 710 -,yk1072g09.3 120 674 -,yk1344a02.3 179 720 -,yk1398d04.3 114 643 -,yk1119f04.3 190 729 -,yk1396f08.3 94 712 -,yk865b04.3 146 680 -,yk1339f10.3 103 734 -,yk1212c10.5 1 546 +,yk64h2.5 1 341 +,yk371c5.5 1 370 +,yk596e1.5 1 374 +,yk654c2.5 1 376 +,yk474d11.5 1 377 +,yk1005d11.3 1 502 -,yk1221a01.3 1 512 -,yk1446h08.3 23 168 -,CEESI82R 12 304 +,yk1423c01.3 23 334 -,yk827b03.5 22 336 +,yk1457b06.5 23 366 +,yk573e8.5 11 360 +,yk289b9.5 11 373 +,yk1446h08.5 23 392 +,yk497f5.5 1 377 +,yk1299h01.3 192 594 -,yk1637f01.5 22 432 +,yk1156a09.5 23 434 +,yk1498f01.5 23 435 +,yk1370f10.5 23 435 +,yk1692c10.5 22 434 +,yk1050c09.3 23 436 -,yk1099h06.5 23 435 +,yk1438b02.5 23 436 +,yk1490c07.5 23 435 +,yk1667g11.5 23 436 +,yk1500g09.5 23 436 +,yk1743g04.5 23 436 +,yk1662h02.5 23 437 +,yk1699g12.5 23 438 +,yk809d12.5 23 437 +,yk891h02.5 23 438 +,yk1324a12.5 23 439 +,yk1581b07.5 23 439 +,yk1597e02.5 22 438 +,yk1005d11.5 23 439 +,yk1015e03.3 23 440 -,yk1258f10.5 24 442 +,yk1134e12.5 23 441 +,yk1329c12.5 24 442 +,yk1348g09.5 23 442 +,yk1281b11.5 23 442 +,yk1347e08.5 23 443 +,yk819c03.5 23 443 +,yk1370f08.5 23 447 +,yk1505b08.3 37 462 -,yk1307b12.3 182 609 -,yk1076e08.5 23 454 +,yk1299h06.3 291 730 -,yk1304f10.3 27 468 -,yk1304f10.5 27 484 +,yk763c11.5 23 480 +,yk776c05.5 23 484 +,yk1167g12.5 22 484 +,yk1340a03.5 22 484 +,yk1261h11.3 195 659 -,yk1033d09.5 18 482 +,yk1041d01.5 23 487 +,yk1307e07.3 224 690 -,yk776b07.5 18 504 +,yk1717f07.5 22 512 +,yk1099h06.3 23 517 -,yk1122e01.3 23 519 -,yk1151e05.3 24 518 -,yk1033d09.3 18 513 -,yk1200b10.3 22 517 -,yk1445a08.3 218 714 -,yk1499d03.3 226 722 -,yk1508b06.3 222 718 -,yk1523g04.3 78 575 -,yk1701c04.3 85 583 -,yk1276a07.3 229 729 -,yk1566c03.3 23 522 -,yk1534b01.3 227 726 -,yk1559d06.3 140 640 -,yk1597e02.3 22 523 -,yk1420g05.3 23 524 -,yk1476g05.3 224 725 -,yk1502f07.3 203 704 -,yk1526c08.3 102 605 -,yk1564e02.3 186 690 -,yk1581b07.3 23 525 -,yk1411e02.3 22 524 -,yk1460g06.3 191 693 -,yk1490c07.3 23 524 -,yk1459c06.3 212 714 -,yk1468c03.3 123 625 -,yk1662h02.3 23 525 -,yk1706f01.3 23 525 -,yk1730a09.3 23 525 -,yk1751g08.3 222 724 -,yk1450f03.3 220 723 -,yk1498f01.3 23 526 -,yk1347e08.3 23 526 -,yk1281f04.3 23 528 -,yk1026f10.3 25 529 -,yk1326f10.3 145 649 -,yk776b07.3 18 522 -,yk819c03.3 23 527 -,yk1363d08.3 23 528 -,yk1141a10.3 23 531 -,yk891h02.3 23 531 -,yk1079e02.3 23 530 -,yk1142c02.3 192 699 -,yk827b03.3 22 529 -,yk1041d01.3 23 532 -,yk1022f05.3 188 696 -,yk1161d09.3 23 531 -,yk1175b05.3 23 531 -,yk1229f01.3 223 731 -,yk776c05.3 23 531 -,yk1258a02.3 23 533 -,yk1258f10.3 24 533 -,yk1213d11.3 257 767 -,yk1021b10.3 23 532 -,yk1212f06.3 183 692 -,yk1338c06.3 23 532 -,yk1041a09.3 233 742 -,yk1076e08.3 23 532 -,yk1134e12.3 23 532 -,yk1156a09.3 23 532 -,yk1167g12.3 22 531 -,yk1217d06.3 183 692 -,yk1238d11.3 23 532 -,yk1239g07.3 223 732 -,yk1261c01.3 218 727 -,yk1266c12.3 23 532 -,yk1266e05.3 23 532 -,yk1281b07.3 23 532 -,yk1289h06.3 101 610 -,yk1309b05.3 224 733 -,yk1382h02.5 23 532 +,yk1329c12.3 24 537 -,yk1063g09.3 154 665 -,yk1089d01.3 23 533 -,yk1667g11.3 23 534 -,yk1500g09.3 23 534 -,yk1653c08.3 23 534 -,yk1370f08.3 23 535 -,yk1370f10.3 23 535 -,yk1629g01.3 23 535 -,yk1743g04.3 23 536 -,yk1239f04.3 23 538 -,yk1717f07.3 22 538 -,yk1274f02.3 23 540 -,yk1223a01.3 150 668 -,yk812e07.5 23 541 +,yk812e07.3 23 540 -,yk1340a03.3 22 541 -,yk1021b10.5 23 543 +,yk1514e03.3 184 709 -,yk1338c06.5 23 553 +,yk1238d11.5 23 553 +,yk1026f10.5 25 554 +,yk1363d08.5 23 552 +,yk1274f02.5 23 552 +,yk1420g05.5 23 552 +,yk1566c03.5 23 552 +,yk1629g01.5 23 552 +,yk1706f01.5 23 552 +,yk1730a09.5 23 552 +,yk1122e01.5 23 552 +,yk1141a10.5 23 552 +,yk1151e05.5 24 553 +,yk1161d09.5 23 552 +,yk1175b05.5 23 552 +,yk1281f04.5 23 552 +,yk1079e02.5 23 551 +,yk1310e07.5 23 555 +,yk1089d01.5 23 572 +,yk1527c07.5 23 589 +,yk1344e01.3 19 587 -,yk761f11.5 17 614 +,yk809d12.3 23 628 -,yk1310e07.3 23 628 -,yk757f11.5 17 635 +,yk470d10.5 1 376 +,yk1015e03.5 1 388 +,yk110a8.5 1 360 +,yk114f3.5 1 360 +,yk78a9.5 1 383 +,yk60a2.5 1 330 +,yk677a10.5 1 373 +,yk634d3.5 1 374 +,yk389a2.5 1 376 +,yk591g5.5 1 375 +,yk247h2.5 1 244 +,yk92d5.5 1 322 +,yk62e4.5 1 330 +,yk82d9.5 1 352 +,yk484e3.5 1 367 +,yk342c11.5 1 371 +,yk210g1.5 1 371 +,yk199b1.5 1 372 +,yk609a6.5 1 372 +,yk602g4.5 1 374 +,yk472b4.5 1 376 +,yk532b2.5 1 376 +,yk628h8.5 1 384 +,yk470d10.3 1 300 -,yk67e2.5 1 360 +,yk495b4.5 1 360 +,yk515d3.5 1 367 +,yk586d10.5 1 377 +,yk631d3.5 1 383 +,yk77e2.5 1 385 +,yk573e6.5 1 360 +,yk561d9.5 1 376 +,yk487f9.5 1 360 +,yk491d2.5 1 360 +,yk418d7.5 1 373 +,yk391d4.5 1 377 +,yk281f9.5 1 376 +,yk612a2.5 1 360 +,yk667h3.5 1 378 +,yk103f11.5 1 330 +,yk82d4.5 1 330 +,yk502f2.5 1 370 +,yk399b1.5 1 377 +,yk1388g06.3 1 499 -,yk1388g06.5 1 513 +,yk255e5.5 1 360 +,yk1230h08.5 1 172 +,yk1281b07.5 1 174 +,CK576705 1 199 +,BP 1 117 +,RP 1 117 +,yk393a4.5 1 360 +,CK575334 1 379 +,CK579527 1 498 +,yk1411e02.5 1 103 +,yk568f5.5 1 374 +,yk612e4.5 1 360 +,yk1239f04.5 1 492 +,yk1050c09.5 1 505 +,yk591h11.5 1 360 +,yk635a9.5 1 360 +,yk639e2.5 1 360 +,yk654d2.5 1 382 +,yk648e7.5 1 360 +,yk486b11.5 1 360 +,yk650f12.5 1 360 +,yk1012b08.3 1 317 -,yk1123h12.3 1 463 -,yk579f1.5 1 360 +,yk752f11.5 1 326 +,CEESE35F 1 285 +,CEESP60F 1 283 +,yk1032a02.5 53 422 +,yk633a4.5 1 382 +,yk1299c02.5 1 380 +,yk361d12.5 1 375 +,yk594f10.5 1 356 +,yk847c05.5 1 353 + III gt csa exon 1419138 1419251 0.842 + . Parent=mRNA144 III gt cds CDS 1419207 1419251 . + 0 ID=CDS113;Parent=mRNA144 III gt cds CDS 1419321 1419626 . + 0 ID=CDS113;Parent=mRNA144 III gt csa exon 1419321 1419863 0.995 + . Parent=mRNA144 III gt csa exon 1420079 1420087 0.667 + . Parent=mRNA144 III gt csa mRNA 1419138 1420087 . + . ID=mRNA145;Parent=gene98;Target=yk844c03.3 152 710 -,yk1072g09.3 120 674 -,yk1344a02.3 179 720 -,yk1398d04.3 114 643 -,yk1119f04.3 190 729 -,yk865b04.3 146 680 -,yk1212c10.5 1 546 +,yk64h2.5 1 341 +,yk371c5.5 1 370 +,yk596e1.5 1 374 +,yk654c2.5 1 376 +,yk474d11.5 1 377 +,yk1005d11.3 1 502 -,yk1221a01.3 1 512 -,yk1446h08.3 23 168 -,CEESI82R 12 304 +,yk1423c01.3 23 334 -,yk827b03.5 22 336 +,yk1457b06.5 23 366 +,yk573e8.5 11 360 +,yk289b9.5 11 373 +,yk1446h08.5 23 392 +,yk497f5.5 1 377 +,yk1299h01.3 192 594 -,yk1637f01.5 22 432 +,yk1156a09.5 23 434 +,yk1498f01.5 23 435 +,yk1370f10.5 23 435 +,yk1692c10.5 22 434 +,yk1050c09.3 23 436 -,yk1099h06.5 23 435 +,yk1438b02.5 23 436 +,yk1490c07.5 23 435 +,yk1667g11.5 23 436 +,yk1500g09.5 23 436 +,yk1743g04.5 23 436 +,yk1662h02.5 23 437 +,yk1699g12.5 23 438 +,yk809d12.5 23 437 +,yk891h02.5 23 438 +,yk1324a12.5 23 439 +,yk1581b07.5 23 439 +,yk1597e02.5 22 438 +,yk1005d11.5 23 439 +,yk1015e03.3 23 440 -,yk1258f10.5 24 442 +,yk1134e12.5 23 441 +,yk1329c12.5 24 442 +,yk1348g09.5 23 442 +,yk1281b11.5 23 442 +,yk1347e08.5 23 443 +,yk819c03.5 23 443 +,yk1370f08.5 23 447 +,yk1505b08.3 37 462 -,yk1307b12.3 182 609 -,yk1076e08.5 23 454 +,yk1299h06.3 291 730 -,yk1304f10.3 27 468 -,yk1304f10.5 27 484 +,yk763c11.5 23 480 +,yk776c05.5 23 484 +,yk1167g12.5 22 484 +,yk1340a03.5 22 484 +,yk1261h11.3 195 659 -,yk1033d09.5 18 482 +,yk1041d01.5 23 487 +,yk1307e07.3 224 690 -,yk776b07.5 18 504 +,yk1717f07.5 22 512 +,yk1099h06.3 23 517 -,yk1122e01.3 23 519 -,yk1151e05.3 24 518 -,yk1033d09.3 18 513 -,yk1200b10.3 22 517 -,yk1445a08.3 218 714 -,yk1499d03.3 226 722 -,yk1508b06.3 222 718 -,yk1523g04.3 78 575 -,yk1701c04.3 85 583 -,yk1276a07.3 229 729 -,yk1566c03.3 23 522 -,yk1534b01.3 227 726 -,yk1559d06.3 140 640 -,yk1597e02.3 22 523 -,yk1420g05.3 23 524 -,yk1476g05.3 224 725 -,yk1502f07.3 203 704 -,yk1526c08.3 102 605 -,yk1564e02.3 186 690 -,yk1581b07.3 23 525 -,yk1411e02.3 22 524 -,yk1460g06.3 191 693 -,yk1490c07.3 23 524 -,yk1459c06.3 212 714 -,yk1468c03.3 123 625 -,yk1662h02.3 23 525 -,yk1706f01.3 23 525 -,yk1730a09.3 23 525 -,yk1751g08.3 222 724 -,yk1450f03.3 220 723 -,yk1498f01.3 23 526 -,yk1347e08.3 23 526 -,yk1281f04.3 23 528 -,yk1026f10.3 25 529 -,yk1326f10.3 145 649 -,yk776b07.3 18 522 -,yk819c03.3 23 527 -,yk1363d08.3 23 528 -,yk1141a10.3 23 531 -,yk891h02.3 23 531 -,yk1079e02.3 23 530 -,yk1142c02.3 192 699 -,yk827b03.3 22 529 -,yk1041d01.3 23 532 -,yk1022f05.3 188 696 -,yk1161d09.3 23 531 -,yk1175b05.3 23 531 -,yk1229f01.3 223 731 -,yk776c05.3 23 531 -,yk1258a02.3 23 533 -,yk1258f10.3 24 533 -,yk1213d11.3 257 767 -,yk1021b10.3 23 532 -,yk1212f06.3 183 692 -,yk1338c06.3 23 532 -,yk1041a09.3 233 742 -,yk1076e08.3 23 532 -,yk1134e12.3 23 532 -,yk1156a09.3 23 532 -,yk1167g12.3 22 531 -,yk1217d06.3 183 692 -,yk1238d11.3 23 532 -,yk1239g07.3 223 732 -,yk1261c01.3 218 727 -,yk1266c12.3 23 532 -,yk1266e05.3 23 532 -,yk1281b07.3 23 532 -,yk1289h06.3 101 610 -,yk1309b05.3 224 733 -,yk1382h02.5 23 532 +,yk1329c12.3 24 537 -,yk1063g09.3 154 665 -,yk1089d01.3 23 533 -,yk1667g11.3 23 534 -,yk1500g09.3 23 534 -,yk1653c08.3 23 534 -,yk1370f08.3 23 535 -,yk1370f10.3 23 535 -,yk1629g01.3 23 535 -,yk1743g04.3 23 536 -,yk1239f04.3 23 538 -,yk1717f07.3 22 538 -,yk1274f02.3 23 540 -,yk1223a01.3 150 668 -,yk812e07.5 23 541 +,yk812e07.3 23 540 -,yk1340a03.3 22 541 -,yk1021b10.5 23 543 +,yk1514e03.3 184 709 -,yk1338c06.5 23 553 +,yk1238d11.5 23 553 +,yk1026f10.5 25 554 +,yk1363d08.5 23 552 +,yk1274f02.5 23 552 +,yk1420g05.5 23 552 +,yk1566c03.5 23 552 +,yk1629g01.5 23 552 +,yk1706f01.5 23 552 +,yk1730a09.5 23 552 +,yk1122e01.5 23 552 +,yk1141a10.5 23 552 +,yk1151e05.5 24 553 +,yk1161d09.5 23 552 +,yk1175b05.5 23 552 +,yk1281f04.5 23 552 +,yk1079e02.5 23 551 +,yk1258a02.5 23 558 +,yk470d10.5 1 376 +,yk1015e03.5 1 388 +,yk110a8.5 1 360 +,yk114f3.5 1 360 +,yk78a9.5 1 383 +,yk60a2.5 1 330 +,yk677a10.5 1 373 +,yk634d3.5 1 374 +,yk389a2.5 1 376 +,yk591g5.5 1 375 +,yk247h2.5 1 244 +,yk92d5.5 1 322 +,yk62e4.5 1 330 +,yk82d9.5 1 352 +,yk484e3.5 1 367 +,yk342c11.5 1 371 +,yk210g1.5 1 371 +,yk199b1.5 1 372 +,yk609a6.5 1 372 +,yk602g4.5 1 374 +,yk472b4.5 1 376 +,yk532b2.5 1 376 +,yk628h8.5 1 384 +,yk470d10.3 1 300 -,yk67e2.5 1 360 +,yk495b4.5 1 360 +,yk515d3.5 1 367 +,yk586d10.5 1 377 +,yk631d3.5 1 383 +,yk77e2.5 1 385 +,yk573e6.5 1 360 +,yk561d9.5 1 376 +,yk487f9.5 1 360 +,yk491d2.5 1 360 +,yk418d7.5 1 373 +,yk391d4.5 1 377 +,yk281f9.5 1 376 +,yk612a2.5 1 360 +,yk667h3.5 1 378 +,yk103f11.5 1 330 +,yk82d4.5 1 330 +,yk502f2.5 1 370 +,yk399b1.5 1 377 +,yk1388g06.3 1 499 -,yk1388g06.5 1 513 +,yk255e5.5 1 360 +,yk1230h08.5 1 172 +,yk1281b07.5 1 174 +,CK576705 1 199 +,BP 1 117 +,RP 1 117 +,yk393a4.5 1 360 +,CK575334 1 379 +,CK579527 1 498 +,yk1411e02.5 1 103 +,yk568f5.5 1 374 +,yk612e4.5 1 360 +,yk1239f04.5 1 492 +,yk1050c09.5 1 505 +,yk591h11.5 1 360 +,yk635a9.5 1 360 +,yk639e2.5 1 360 +,yk654d2.5 1 382 +,yk648e7.5 1 360 +,yk486b11.5 1 360 +,yk650f12.5 1 360 +,yk1012b08.3 1 317 -,yk1123h12.3 1 463 -,yk579f1.5 1 360 +,yk752f11.5 1 326 +,CEESE35F 1 285 +,CEESP60F 1 283 +,yk1032a02.5 53 422 +,yk633a4.5 1 382 +,yk1195a11.5 1 417 +,yk1299c02.5 1 380 +,yk1133g01.5 1 368 +,yk594f10.5 1 356 +,yk847c05.5 1 353 + III gt csa exon 1419138 1419251 0.842 + . Parent=mRNA145 III gt cds CDS 1419207 1419251 . + 0 ID=CDS114;Parent=mRNA145 III gt cds CDS 1419321 1419626 . + 0 ID=CDS114;Parent=mRNA145 III gt csa exon 1419321 1419783 1 + . Parent=mRNA145 III gt csa exon 1420079 1420087 0.778 + . Parent=mRNA145 III gt csa mRNA 1419138 1420424 . + . ID=mRNA146;Parent=gene98;Target=yk844c03.3 152 710 -,yk1072g09.3 120 674 -,yk1344a02.3 179 720 -,yk1398d04.3 114 643 -,yk1119f04.3 190 729 -,yk1396f08.3 94 712 -,yk865b04.3 146 680 -,yk1339f10.3 103 734 -,yk1212c10.5 1 546 +,yk64h2.5 1 341 +,yk371c5.5 1 370 +,yk596e1.5 1 374 +,yk654c2.5 1 376 +,yk474d11.5 1 377 +,yk1005d11.3 1 502 -,yk1221a01.3 1 512 -,yk1446h08.3 23 168 -,CEESI82R 12 304 +,yk1423c01.3 23 334 -,yk827b03.5 22 336 +,yk1457b06.5 23 366 +,yk573e8.5 11 360 +,yk289b9.5 11 373 +,yk1446h08.5 23 392 +,yk497f5.5 1 377 +,yk1299h01.3 192 594 -,yk1637f01.5 22 432 +,yk1156a09.5 23 434 +,yk1498f01.5 23 435 +,yk1370f10.5 23 435 +,yk1692c10.5 22 434 +,yk1050c09.3 23 436 -,yk1099h06.5 23 435 +,yk1438b02.5 23 436 +,yk1490c07.5 23 435 +,yk1667g11.5 23 436 +,yk1500g09.5 23 436 +,yk1743g04.5 23 436 +,yk1662h02.5 23 437 +,yk1699g12.5 23 438 +,yk809d12.5 23 437 +,yk891h02.5 23 438 +,yk1324a12.5 23 439 +,yk1581b07.5 23 439 +,yk1597e02.5 22 438 +,yk1005d11.5 23 439 +,yk1015e03.3 23 440 -,yk1258f10.5 24 442 +,yk1134e12.5 23 441 +,yk1329c12.5 24 442 +,yk1348g09.5 23 442 +,yk1281b11.5 23 442 +,yk1347e08.5 23 443 +,yk819c03.5 23 443 +,yk1370f08.5 23 447 +,yk1505b08.3 37 462 -,yk1307b12.3 182 609 -,yk1076e08.5 23 454 +,yk1299h06.3 291 730 -,yk1304f10.3 27 468 -,yk1304f10.5 27 484 +,yk763c11.5 23 480 +,yk776c05.5 23 484 +,yk1167g12.5 22 484 +,yk1340a03.5 22 484 +,yk1261h11.3 195 659 -,yk1033d09.5 18 482 +,yk1041d01.5 23 487 +,yk1307e07.3 224 690 -,yk776b07.5 18 504 +,yk1717f07.5 22 512 +,yk1099h06.3 23 517 -,yk1122e01.3 23 519 -,yk1151e05.3 24 518 -,yk1033d09.3 18 513 -,yk1200b10.3 22 517 -,yk1445a08.3 218 714 -,yk1499d03.3 226 722 -,yk1508b06.3 222 718 -,yk1523g04.3 78 575 -,yk1701c04.3 85 583 -,yk1276a07.3 229 729 -,yk1566c03.3 23 522 -,yk1534b01.3 227 726 -,yk1559d06.3 140 640 -,yk1597e02.3 22 523 -,yk1420g05.3 23 524 -,yk1476g05.3 224 725 -,yk1502f07.3 203 704 -,yk1526c08.3 102 605 -,yk1564e02.3 186 690 -,yk1581b07.3 23 525 -,yk1411e02.3 22 524 -,yk1460g06.3 191 693 -,yk1490c07.3 23 524 -,yk1459c06.3 212 714 -,yk1468c03.3 123 625 -,yk1662h02.3 23 525 -,yk1706f01.3 23 525 -,yk1730a09.3 23 525 -,yk1751g08.3 222 724 -,yk1450f03.3 220 723 -,yk1498f01.3 23 526 -,yk1347e08.3 23 526 -,yk1281f04.3 23 528 -,yk1026f10.3 25 529 -,yk1326f10.3 145 649 -,yk776b07.3 18 522 -,yk819c03.3 23 527 -,yk1363d08.3 23 528 -,yk1141a10.3 23 531 -,yk891h02.3 23 531 -,yk1079e02.3 23 530 -,yk1142c02.3 192 699 -,yk827b03.3 22 529 -,yk1041d01.3 23 532 -,yk1022f05.3 188 696 -,yk1161d09.3 23 531 -,yk1175b05.3 23 531 -,yk1229f01.3 223 731 -,yk776c05.3 23 531 -,yk1258a02.3 23 533 -,yk1258f10.3 24 533 -,yk1213d11.3 257 767 -,yk1021b10.3 23 532 -,yk1212f06.3 183 692 -,yk1338c06.3 23 532 -,yk1041a09.3 233 742 -,yk1076e08.3 23 532 -,yk1134e12.3 23 532 -,yk1156a09.3 23 532 -,yk1167g12.3 22 531 -,yk1217d06.3 183 692 -,yk1238d11.3 23 532 -,yk1239g07.3 223 732 -,yk1261c01.3 218 727 -,yk1266c12.3 23 532 -,yk1266e05.3 23 532 -,yk1281b07.3 23 532 -,yk1289h06.3 101 610 -,yk1309b05.3 224 733 -,yk1382h02.5 23 532 +,yk1329c12.3 24 537 -,yk1063g09.3 154 665 -,yk1089d01.3 23 533 -,yk1667g11.3 23 534 -,yk1500g09.3 23 534 -,yk1653c08.3 23 534 -,yk1370f08.3 23 535 -,yk1370f10.3 23 535 -,yk1629g01.3 23 535 -,yk1743g04.3 23 536 -,yk1239f04.3 23 538 -,yk1717f07.3 22 538 -,yk1274f02.3 23 540 -,yk1223a01.3 150 668 -,yk812e07.5 23 541 +,yk812e07.3 23 540 -,yk1340a03.3 22 541 -,yk1021b10.5 23 543 +,yk1514e03.3 184 709 -,yk1338c06.5 23 553 +,yk1238d11.5 23 553 +,yk1026f10.5 25 554 +,yk1363d08.5 23 552 +,yk1274f02.5 23 552 +,yk1420g05.5 23 552 +,yk1566c03.5 23 552 +,yk1629g01.5 23 552 +,yk1706f01.5 23 552 +,yk1730a09.5 23 552 +,yk1122e01.5 23 552 +,yk1141a10.5 23 552 +,yk1151e05.5 24 553 +,yk1161d09.5 23 552 +,yk1175b05.5 23 552 +,yk1281f04.5 23 552 +,yk1079e02.5 23 551 +,yk1310e07.5 23 555 +,yk1089d01.5 23 572 +,yk1527c07.5 23 589 +,yk1344e01.3 19 587 -,yk761f11.5 17 614 +,yk809d12.3 23 628 -,yk1310e07.3 23 628 -,yk470d10.5 1 376 +,yk1015e03.5 1 388 +,yk110a8.5 1 360 +,yk114f3.5 1 360 +,yk78a9.5 1 383 +,yk60a2.5 1 330 +,yk677a10.5 1 373 +,yk634d3.5 1 374 +,yk389a2.5 1 376 +,yk591g5.5 1 375 +,yk247h2.5 1 244 +,yk92d5.5 1 322 +,yk62e4.5 1 330 +,yk82d9.5 1 352 +,yk484e3.5 1 367 +,yk342c11.5 1 371 +,yk210g1.5 1 371 +,yk199b1.5 1 372 +,yk609a6.5 1 372 +,yk602g4.5 1 374 +,yk472b4.5 1 376 +,yk532b2.5 1 376 +,yk628h8.5 1 384 +,yk470d10.3 1 300 -,yk67e2.5 1 360 +,yk495b4.5 1 360 +,yk515d3.5 1 367 +,yk586d10.5 1 377 +,yk631d3.5 1 383 +,yk77e2.5 1 385 +,yk573e6.5 1 360 +,yk561d9.5 1 376 +,yk487f9.5 1 360 +,yk491d2.5 1 360 +,yk418d7.5 1 373 +,yk391d4.5 1 377 +,yk281f9.5 1 376 +,yk612a2.5 1 360 +,yk667h3.5 1 378 +,yk103f11.5 1 330 +,yk82d4.5 1 330 +,yk502f2.5 1 370 +,yk399b1.5 1 377 +,yk1388g06.3 1 499 -,yk1388g06.5 1 513 +,yk255e5.5 1 360 +,yk1230h08.5 1 172 +,yk1281b07.5 1 174 +,CK576705 1 199 +,BP 1 117 +,RP 1 117 +,yk393a4.5 1 360 +,CK575334 1 379 +,CK579527 1 498 +,yk1411e02.5 1 103 +,yk568f5.5 1 374 +,yk612e4.5 1 360 +,yk1239f04.5 1 492 +,yk1050c09.5 1 505 +,yk591h11.5 1 360 +,yk635a9.5 1 360 +,yk639e2.5 1 360 +,yk654d2.5 1 382 +,yk648e7.5 1 360 +,yk486b11.5 1 360 +,yk650f12.5 1 360 +,yk1012b08.3 1 317 -,yk1123h12.3 1 463 -,yk579f1.5 1 360 +,yk752f11.5 1 326 +,CEESE35F 1 285 +,CEESP60F 1 283 +,yk1032a02.5 53 422 +,yk633a4.5 1 382 +,yk1299c02.5 1 380 +,yk361d12.5 1 375 +,yk594f10.5 1 356 +,yk847c05.5 1 353 +,CEESB14F 1 300 +,CEESY61FB 1 319 +,yk1382d08.3 1 222 +,yk621b1.3 1 300 +,yk739c4.3 1 300 +,yk597g10.3 1 300 +,yk421a11.3 1 292 +,yk447b3.3 1 300 +,yk599b8.3 1 300 +,yk639a10.3 1 300 +,yk555f9.3 1 300 +,yk615c7.3 1 240 +,yk525g4.3 1 240 +,yk556a10.5 1 365 +,yk1475h10.3 1 136 + III gt csa exon 1419138 1419251 0.842 + . Parent=mRNA146 III gt csa exon 1419321 1420424 0.99 + . Parent=mRNA146 III gt cds CDS 1420005 1420424 . + 0 ID=CDS115;Parent=mRNA146 ### III gt csa gene 1419326 1427216 . - . ID=gene99 III gt csa mRNA 1419326 1419839 . - . ID=mRNA147;Parent=gene99;Target=yk1230h08.3 1 312 +,yk1527c07.3 1 508 +,yk1032a02.3 1 376 +,yk602g4.3 1 300 +,yk1195a11.3 1 378 +,yk639e2.3 1 300 +,yk763c11.3 1 356 +,CEESU49F 1 379 +,yk667h3.3 1 300 +,yk1526d06.3 1 360 +,CEESM53F 1 381 +,yk596e1.3 1 300 +,yk654e2.3 1 180 +,yk586d10.3 1 240 +,yk281f9.3 1 300 +,yk255e5.3 1 300 +,yk654e1.3 1 180 +,yk591h11.3 1 240 +,yk634d3.3 1 300 +,yk654c2.3 1 300 +,yk487f9.3 1 300 +,yk515d3.3 1 300 +,yk654d2.3 1 300 +,yk672d12.3 1 300 +,yk631d3.3 1 300 +,yk612a2.3 1 300 +,yk654g12.3 1 180 +,yk281a2.3 1 300 +,yk609a6.3 1 300 +,yk612e4.3 1 300 +,yk371c5.3 1 300 +,yk648e7.3 1 300 +,yk1133g01.3 1 342 +,yk579f1.3 1 300 +,yk289b9.3 1 300 +,yk110a8.3 1 342 +,CEESH76F 1 352 +,yk114f3.3 1 326 +,yk67e2.3 1 332 +,yk64h2.3 1 337 +,yk1382h02.3 1 106 +,CEESV10F 1 307 +,yk92d5.3 1 292 +,CEESN05F 1 295 +,yk677a10.3 1 300 +,yk847c05.3 1 253 +,yk833b04.3 1 252 +,yk78a9.3 1 300 +,CEESX12F 1 238 +,yk62e4.3 1 180 +,yk92c4.3 1 152 +,yk1692c10.3 1 127 +,yk1637f01.3 1 136 + III gt cds CDS 1419326 1419607 . - 0 ID=CDS116;Parent=mRNA147 III gt csa exon 1419326 1419839 0.96 - . Parent=mRNA147 III gt csa mRNA 1419858 1427216 . - . ID=mRNA148;Parent=gene99;Target=yk1572a07.3 1 708 -,yk1483e05.3 1 710 -,yk845a11.3 1 671 -,yk1091h10.3 1 703 -,yk777g07.3 1 702 -,yk843d03.3 1 655 -,yk1037c05.3 1 702 -,yk1339b07.3 1 706 -,yk1156e02.3 1 713 -,yk1221d11.3 1 718 -,yk1271e02.3 1 702 -,yk1175h04.3 1 701 -,yk1068f01.3 1 777 -,yk1534a04.3 1 671 -,yk1397e11.3 1 735 -,yk1467c02.3 1 668 -,yk1447g10.3 1 689 -,yk1588c10.3 1 694 -,yk1616c04.3 1 745 -,yk1449e07.3 1 743 -,yk1422c01.3 1 711 -,yk1433e11.3 1 713 -,yk1359d11.3 1 739 -,yk1741b07.3 1 645 -,yk1382d05.3 1 724 -,yk1491e06.3 1 722 -,yk1111g04.3 1 667 -,yk1677f12.3 1 683 -,RP 1 549 +,BP 1 546 +,yk421a11.5 1 360 +,yk384h6.5 1 375 +,yk639a10.5 1 360 +,yk1021a01.5 20 655 +,yk1483e05.5 17 650 +,yk1359d11.5 23 655 +,yk1382d05.5 23 654 +,yk1433e11.5 22 650 +,yk1422c01.5 23 628 +,yk1397e11.5 22 625 +,yk1091h10.5 23 616 +,yk1221d11.5 23 614 +,yk845a11.5 23 613 +,yk1339b07.5 23 612 +,yk1068f01.5 23 611 +,yk1677f12.5 24 611 +,yk1382d08.5 23 610 +,yk1680g05.5 23 610 +,yk1439g04.5 23 609 +,yk1741b07.5 22 608 +,yk1037c05.5 23 606 +,yk1491e06.5 23 606 +,yk1588c10.5 23 604 +,yk1175h04.5 23 603 +,yk777g07.5 20 534 +,yk843d03.5 23 534 +,yk1111g04.5 23 512 +,yk1467c02.5 22 500 +,yk1449c10.5 23 463 +,yk1572a07.5 23 461 +,yk1447g10.5 23 460 +,yk1449e07.5 23 460 +,yk525g4.5 1 375 +,cm20f7.5 11 407 +,yk275h6.5 1 351 +,yk597g10.5 1 354 +,yk447b3.5 1 355 +,yk599b8.5 1 359 +,yk615c7.5 1 370 +,yk1534a04.5 27 403 +,yk739c4.5 23 340 + III gt csa exon 1419858 1420431 0.998 - . Parent=mRNA148 III gt cds CDS 1419963 1420431 . - 1 ID=CDS117;Parent=mRNA148 III gt csa exon 1421391 1421771 0.897 - . Parent=mRNA148 III gt cds CDS 1421391 1421771 . - 1 ID=CDS117;Parent=mRNA148 III gt csa exon 1424258 1424349 0.948 - . Parent=mRNA148 III gt cds CDS 1424258 1424349 . - 0 ID=CDS117;Parent=mRNA148 III gt csa exon 1425095 1425427 0.96 - . Parent=mRNA148 III gt cds CDS 1425095 1425427 . - 0 ID=CDS117;Parent=mRNA148 III gt csa exon 1425902 1425994 1 - . Parent=mRNA148 III gt cds CDS 1425902 1425994 . - 0 ID=CDS117;Parent=mRNA148 III gt csa exon 1426159 1426285 1 - . Parent=mRNA148 III gt cds CDS 1426159 1426285 . - 1 ID=CDS117;Parent=mRNA148 III gt cds CDS 1427060 1427205 . - 0 ID=CDS117;Parent=mRNA148 III gt csa exon 1427060 1427216 1 - . Parent=mRNA148 III gt csa mRNA 1420034 1420559 . - . ID=mRNA149;Parent=gene99;Target=yk421a11.5 1 360 +,yk555f9.5 1 360 + III gt csa exon 1420034 1420559 0.993 - . Parent=mRNA149 III gt cds CDS 1420035 1420361 . - 0 ID=CDS118;Parent=mRNA149 III gt csa mRNA 1421684 1424322 . - . ID=mRNA150;Parent=gene99;Target=yk621b1.5 1 240 + III gt csa exon 1421684 1421858 0.943 - . Parent=mRNA150 III gt csa exon 1424258 1424322 1 - . Parent=mRNA150 ### III gt csa gene 1439086 1443180 . + . ID=gene100 III gt csa mRNA 1439086 1443180 . + . ID=mRNA151;Parent=gene100;Target=WP 1 531 + III gt csa exon 1439086 1439148 1 + . Parent=mRNA151 III gt cds CDS 1439086 1439148 . + 0 ID=CDS119;Parent=mRNA151 III gt csa exon 1439194 1439289 1 + . Parent=mRNA151 III gt cds CDS 1439194 1439289 . + 0 ID=CDS119;Parent=mRNA151 III gt csa exon 1439346 1439507 1 + . Parent=mRNA151 III gt cds CDS 1439346 1439507 . + 0 ID=CDS119;Parent=mRNA151 III gt csa exon 1439552 1439628 1 + . Parent=mRNA151 III gt cds CDS 1439552 1439628 . + 0 ID=CDS119;Parent=mRNA151 III gt csa exon 1439705 1439927 1 + . Parent=mRNA151 III gt cds CDS 1439705 1439927 . + 1 ID=CDS119;Parent=mRNA151 III gt csa exon 1440041 1440100 1 + . Parent=mRNA151 III gt cds CDS 1440041 1440100 . + 0 ID=CDS119;Parent=mRNA151 III gt csa exon 1440409 1440543 1 + . Parent=mRNA151 III gt cds CDS 1440409 1440543 . + 0 ID=CDS119;Parent=mRNA151 III gt csa exon 1440839 1440928 1 + . Parent=mRNA151 III gt cds CDS 1440839 1440928 . + 0 ID=CDS119;Parent=mRNA151 III gt csa exon 1441573 1441826 1 + . Parent=mRNA151 III gt cds CDS 1441573 1441826 . + 0 ID=CDS119;Parent=mRNA151 III gt csa exon 1441882 1442030 1 + . Parent=mRNA151 III gt cds CDS 1441882 1442030 . + 1 ID=CDS119;Parent=mRNA151 III gt csa exon 1442396 1442547 1 + . Parent=mRNA151 III gt cds CDS 1442396 1442547 . + 2 ID=CDS119;Parent=mRNA151 III gt csa exon 1443049 1443180 1 + . Parent=mRNA151 III gt cds CDS 1443049 1443180 . + 0 ID=CDS119;Parent=mRNA151 ### III gt csa gene 1443038 1443263 . - . ID=gene101 III gt csa mRNA 1443038 1443263 . - . ID=mRNA152;Parent=gene101;Target=yk525g8.3 80 300 +,yk656g8.3 80 300 +,yk658b12.3 83 300 +,yk337c2.3 84 300 +,yk675h9.3 85 300 +,yk602e8.3 86 300 +,yk652b11.3 86 300 +,yk659c10.3 86 300 +,yk621h1.3 88 300 +,yk572f4.3 77 288 +,yk592b8.3 75 286 +,yk617a4.3 81 300 + III gt csa exon 1443038 1443263 0.866 - . Parent=mRNA152 ### III gt csa gene 1447545 1455750 . - . ID=gene102 III gt csa mRNA 1447545 1455750 . - . ID=mRNA153;Parent=gene102;Target=yk674c5.3 1 300 -,yk513e12.3 1 300 -,WP 1 482 +,yk674c5.5 1 360 + III gt csa exon 1447545 1447665 1 - . Parent=mRNA153 III gt cds CDS 1447596 1447665 . - 1 ID=CDS120;Parent=mRNA153 III gt csa exon 1449965 1450063 1 - . Parent=mRNA153 III gt cds CDS 1449965 1450063 . - 1 ID=CDS120;Parent=mRNA153 III gt csa exon 1450108 1450340 1 - . Parent=mRNA153 III gt cds CDS 1450108 1450340 . - 0 ID=CDS120;Parent=mRNA153 III gt csa exon 1450555 1450692 1 - . Parent=mRNA153 III gt cds CDS 1450555 1450692 . - 0 ID=CDS120;Parent=mRNA153 III gt csa exon 1450743 1450802 1 - . Parent=mRNA153 III gt cds CDS 1450743 1450802 . - 0 ID=CDS120;Parent=mRNA153 III gt csa exon 1450847 1450919 1 - . Parent=mRNA153 III gt cds CDS 1450847 1450919 . - 1 ID=CDS120;Parent=mRNA153 III gt csa exon 1451910 1452038 1 - . Parent=mRNA153 III gt cds CDS 1451910 1452038 . - 1 ID=CDS120;Parent=mRNA153 III gt csa exon 1452084 1452139 1 - . Parent=mRNA153 III gt cds CDS 1452084 1452139 . - 0 ID=CDS120;Parent=mRNA153 III gt csa exon 1452429 1452468 1 - . Parent=mRNA153 III gt cds CDS 1452429 1452468 . - 1 ID=CDS120;Parent=mRNA153 III gt csa exon 1453036 1453163 1 - . Parent=mRNA153 III gt cds CDS 1453036 1453163 . - 0 ID=CDS120;Parent=mRNA153 III gt csa exon 1454216 1454391 1 - . Parent=mRNA153 III gt cds CDS 1454216 1454391 . - 2 ID=CDS120;Parent=mRNA153 III gt csa exon 1454479 1454572 1 - . Parent=mRNA153 III gt cds CDS 1454479 1454572 . - 0 ID=CDS120;Parent=mRNA153 III gt csa exon 1454621 1454698 1 - . Parent=mRNA153 III gt cds CDS 1454621 1454698 . - 0 ID=CDS120;Parent=mRNA153 III gt cds CDS 1455676 1455747 . - 0 ID=CDS120;Parent=mRNA153 III gt csa exon 1455676 1455750 1 - . Parent=mRNA153 III gt csa mRNA 1448290 1449007 . - . ID=mRNA154;Parent=gene102;Target=yk1044a02.5 1 718 + III gt csa exon 1448290 1449007 0.997 - . Parent=mRNA154 III gt csa mRNA 1452028 1452748 . - . ID=mRNA155;Parent=gene102;Target=yk513e12.5 1 386 + III gt csa exon 1452028 1452038 1 - . Parent=mRNA155 III gt csa exon 1452084 1452139 0.982 - . Parent=mRNA155 III gt csa exon 1452429 1452748 1 - . Parent=mRNA155 ### III gt csa gene 1449026 1449551 . + . ID=gene103 III gt csa mRNA 1449026 1449551 . + . ID=mRNA156;Parent=gene103;Target=yk1044a02.3 208 712 + III gt csa exon 1449026 1449522 0.991 + . Parent=mRNA156 III gt csa exon 1449545 1449551 0.571 + . Parent=mRNA156 ### III gt csa gene 1458223 1466441 . + . ID=gene104 III gt csa mRNA 1458223 1466441 . + . ID=mRNA157;Parent=gene104;Target=WP 1 503 + III gt csa exon 1458223 1458465 1 + . Parent=mRNA157 III gt cds CDS 1458223 1458465 . + 0 ID=CDS121;Parent=mRNA157 III gt csa exon 1458508 1458597 1 + . Parent=mRNA157 III gt cds CDS 1458508 1458597 . + 0 ID=CDS121;Parent=mRNA157 III gt csa exon 1458884 1458935 1 + . Parent=mRNA157 III gt cds CDS 1458884 1458935 . + 0 ID=CDS121;Parent=mRNA157 III gt csa exon 1459883 1460049 1 + . Parent=mRNA157 III gt cds CDS 1459883 1460049 . + 2 ID=CDS121;Parent=mRNA157 III gt csa exon 1461819 1461874 1 + . Parent=mRNA157 III gt cds CDS 1461819 1461874 . + 0 ID=CDS121;Parent=mRNA157 III gt csa exon 1461919 1462047 1 + . Parent=mRNA157 III gt cds CDS 1461919 1462047 . + 1 ID=CDS121;Parent=mRNA157 III gt csa exon 1463286 1463358 1 + . Parent=mRNA157 III gt cds CDS 1463286 1463358 . + 1 ID=CDS121;Parent=mRNA157 III gt csa exon 1463515 1463584 1 + . Parent=mRNA157 III gt cds CDS 1463515 1463584 . + 0 ID=CDS121;Parent=mRNA157 III gt csa exon 1465126 1465193 1 + . Parent=mRNA157 III gt cds CDS 1465126 1465193 . + 2 ID=CDS121;Parent=mRNA157 III gt csa exon 1465240 1465469 1 + . Parent=mRNA157 III gt cds CDS 1465240 1465469 . + 0 ID=CDS121;Parent=mRNA157 III gt csa exon 1465516 1465614 1 + . Parent=mRNA157 III gt cds CDS 1465516 1465614 . + 1 ID=CDS121;Parent=mRNA157 III gt csa exon 1465770 1465832 1 + . Parent=mRNA157 III gt cds CDS 1465770 1465832 . + 1 ID=CDS121;Parent=mRNA157 III gt csa exon 1465923 1466021 1 + . Parent=mRNA157 III gt cds CDS 1465923 1466021 . + 1 ID=CDS121;Parent=mRNA157 III gt csa exon 1466372 1466441 1 + . Parent=mRNA157 III gt cds CDS 1466372 1466441 . + 1 ID=CDS121;Parent=mRNA157 ### III gt csa gene 1466377 1466722 . - . ID=gene105 III gt csa mRNA 1466377 1466722 . - . ID=mRNA158;Parent=gene105;Target=CEESB41F 1 346 + III gt csa exon 1466377 1466722 0.965 - . Parent=mRNA158 ### III gt csa gene 1467863 1483497 . - . ID=gene106 III gt csa mRNA 1467863 1483497 . - . ID=mRNA159;Parent=gene106;Target=yk1170a01.3 1 765 -,yk1128d05.3 1 726 -,yk405c3.3 1 300 -,yk500f5.3 1 300 -,yk288a6.3 1 300 -,WP 1 922 +,yk135h2.5 1 373 +,yk288a6.5 1 360 +,yk1170a01.5 22 593 +,yk1128d05.5 23 588 + III gt csa exon 1467863 1468170 0.981 - . Parent=mRNA159 III gt cds CDS 1468054 1468170 . - 0 ID=CDS122;Parent=mRNA159 III gt csa exon 1469171 1469260 1 - . Parent=mRNA159 III gt cds CDS 1469171 1469260 . - 0 ID=CDS122;Parent=mRNA159 III gt csa exon 1470517 1471342 1 - . Parent=mRNA159 III gt cds CDS 1470517 1471342 . - 1 ID=CDS122;Parent=mRNA159 III gt csa exon 1472209 1472382 1 - . Parent=mRNA159 III gt cds CDS 1472209 1472382 . - 1 ID=CDS122;Parent=mRNA159 III gt csa exon 1473915 1474201 1 - . Parent=mRNA159 III gt cds CDS 1473915 1474201 . - 0 ID=CDS122;Parent=mRNA159 III gt csa exon 1474848 1475099 1 - . Parent=mRNA159 III gt cds CDS 1474848 1475099 . - 0 ID=CDS122;Parent=mRNA159 III gt csa exon 1476256 1476485 1 - . Parent=mRNA159 III gt cds CDS 1476256 1476485 . - 2 ID=CDS122;Parent=mRNA159 III gt csa exon 1477039 1477574 1 - . Parent=mRNA159 III gt cds CDS 1477039 1477574 . - 1 ID=CDS122;Parent=mRNA159 III gt csa exon 1478937 1479126 1 - . Parent=mRNA159 III gt cds CDS 1478937 1479126 . - 2 ID=CDS122;Parent=mRNA159 III gt cds CDS 1483404 1483467 . - 0 ID=CDS122;Parent=mRNA159 III gt csa exon 1483404 1483497 1 - . Parent=mRNA159 III gt csa mRNA 1474973 1476685 . - . ID=mRNA160;Parent=gene106;Target=yk500f5.5 1 360 + III gt csa exon 1474973 1475099 1 - . Parent=mRNA160 III gt cds CDS 1474974 1475099 . - 0 ID=CDS123;Parent=mRNA160 III gt cds CDS 1476256 1476435 . - 0 ID=CDS123;Parent=mRNA160 III gt csa exon 1476256 1476485 0.989 - . Parent=mRNA160 III gt csa exon 1476684 1476685 1 - . Parent=mRNA160 ### III gt csa gene 1467866 1468169 . + . ID=gene107 III gt csa mRNA 1467866 1468169 . + . ID=mRNA161;Parent=gene107;Target=CEESH11F 1 304 + III gt csa exon 1467866 1468169 0.984 + . Parent=mRNA161 ### III gt csa gene 1484961 1495320 . - . ID=gene108 III gt csa mRNA 1484961 1495320 . - . ID=mRNA162;Parent=gene108;Target=WP 1 418 + III gt csa exon 1484961 1485116 1 - . Parent=mRNA162 III gt cds CDS 1484961 1485116 . - 0 ID=CDS124;Parent=mRNA162 III gt csa exon 1487387 1487633 1 - . Parent=mRNA162 III gt cds CDS 1487387 1487633 . - 1 ID=CDS124;Parent=mRNA162 III gt csa exon 1487730 1487831 1 - . Parent=mRNA162 III gt cds CDS 1487730 1487831 . - 1 ID=CDS124;Parent=mRNA162 III gt csa exon 1490092 1490294 1 - . Parent=mRNA162 III gt cds CDS 1490092 1490294 . - 0 ID=CDS124;Parent=mRNA162 III gt csa exon 1491404 1491494 1 - . Parent=mRNA162 III gt cds CDS 1491404 1491494 . - 1 ID=CDS124;Parent=mRNA162 III gt csa exon 1491548 1491666 1 - . Parent=mRNA162 III gt cds CDS 1491548 1491666 . - 0 ID=CDS124;Parent=mRNA162 III gt csa exon 1493719 1493970 1 - . Parent=mRNA162 III gt cds CDS 1493719 1493970 . - 0 ID=CDS124;Parent=mRNA162 III gt csa exon 1495237 1495320 1 - . Parent=mRNA162 III gt cds CDS 1495237 1495320 . - 0 ID=CDS124;Parent=mRNA162 ### III gt csa gene 1509455 1510895 . + . ID=gene109 III gt csa mRNA 1509455 1510895 . + . ID=mRNA163;Parent=gene109;Target=yk1187f01.3 1 381 + III gt csa exon 1509455 1509613 0.855 + . Parent=mRNA163 III gt csa exon 1510265 1510335 0.817 + . Parent=mRNA163 III gt csa exon 1510742 1510895 0.916 + . Parent=mRNA163 ### III gt csa gene 1509574 1517983 . - . ID=gene110 III gt csa mRNA 1509574 1512913 . - . ID=mRNA164;Parent=gene110;Target=yk275e6.5 1 360 +,yk1146d12.3 1 312 - III gt csa exon 1509574 1509618 0.978 - . Parent=mRNA164 III gt cds CDS 1509574 1509618 . - 0 ID=CDS125;Parent=mRNA164 III gt csa exon 1510270 1510341 0.986 - . Parent=mRNA164 III gt cds CDS 1510270 1510341 . - 0 ID=CDS125;Parent=mRNA164 III gt cds CDS 1510751 1510831 . - 0 ID=CDS125;Parent=mRNA164 III gt csa exon 1510751 1510948 0.987 - . Parent=mRNA164 III gt csa exon 1512871 1512913 0.872 - . Parent=mRNA164 III gt csa mRNA 1512956 1517983 . - . ID=mRNA165;Parent=gene110;Target=yk1146d12.5 35 612 +,yk774d03.5 23 597 +,yk479a10.5 1 378 +,yk237e8.5 1 360 +,yk714f9.5 23 365 + III gt csa exon 1512956 1513125 1 - . Parent=mRNA165 III gt cds CDS 1512958 1513125 . - 0 ID=CDS126;Parent=mRNA165 III gt csa exon 1515550 1515605 1 - . Parent=mRNA165 III gt cds CDS 1515550 1515605 . - 2 ID=CDS126;Parent=mRNA165 III gt csa exon 1515725 1515894 1 - . Parent=mRNA165 III gt cds CDS 1515725 1515894 . - 1 ID=CDS126;Parent=mRNA165 III gt csa exon 1517731 1517849 1 - . Parent=mRNA165 III gt cds CDS 1517731 1517849 . - 0 ID=CDS126;Parent=mRNA165 III gt csa exon 1517921 1517983 1 - . Parent=mRNA165 III gt cds CDS 1517921 1517983 . - 0 ID=CDS126;Parent=mRNA165 ### III gt csa gene 1520214 1532758 . - . ID=gene111 III gt csa mRNA 1520214 1532758 . - . ID=mRNA166;Parent=gene111;Target=AY661556 1 2145 + III gt csa exon 1520214 1520363 1 - . Parent=mRNA166 III gt cds CDS 1520214 1520363 . - 0 ID=CDS127;Parent=mRNA166 III gt csa exon 1521573 1521926 1 - . Parent=mRNA166 III gt cds CDS 1521573 1521926 . - 0 ID=CDS127;Parent=mRNA166 III gt csa exon 1523142 1523685 1 - . Parent=mRNA166 III gt cds CDS 1523142 1523685 . - 1 ID=CDS127;Parent=mRNA166 III gt csa exon 1525164 1525402 1 - . Parent=mRNA166 III gt cds CDS 1525164 1525402 . - 0 ID=CDS127;Parent=mRNA166 III gt csa exon 1526403 1526535 1 - . Parent=mRNA166 III gt cds CDS 1526403 1526535 . - 1 ID=CDS127;Parent=mRNA166 III gt csa exon 1528084 1528234 1 - . Parent=mRNA166 III gt cds CDS 1528084 1528234 . - 2 ID=CDS127;Parent=mRNA166 III gt csa exon 1528291 1528435 1 - . Parent=mRNA166 III gt cds CDS 1528291 1528435 . - 0 ID=CDS127;Parent=mRNA166 III gt csa exon 1529809 1529984 1 - . Parent=mRNA166 III gt cds CDS 1529809 1529984 . - 2 ID=CDS127;Parent=mRNA166 III gt csa exon 1531762 1531821 1 - . Parent=mRNA166 III gt cds CDS 1531762 1531821 . - 2 ID=CDS127;Parent=mRNA166 III gt csa exon 1532182 1532275 1 - . Parent=mRNA166 III gt cds CDS 1532182 1532275 . - 0 ID=CDS127;Parent=mRNA166 III gt csa exon 1532660 1532758 1 - . Parent=mRNA166 III gt cds CDS 1532660 1532758 . - 0 ID=CDS127;Parent=mRNA166 III gt csa mRNA 1521343 1529982 . - . ID=mRNA167;Parent=gene111;Target=BP 1 525 + III gt csa exon 1521343 1521363 0.189 - . Parent=mRNA167 III gt cds CDS 1521352 1521363 . - 0 ID=CDS128;Parent=mRNA167 III gt csa exon 1521573 1521926 0.879 - . Parent=mRNA167 III gt cds CDS 1521573 1521926 . - 0 ID=CDS128;Parent=mRNA167 III gt csa exon 1523142 1523685 0.95 - . Parent=mRNA167 III gt cds CDS 1523142 1523685 . - 1 ID=CDS128;Parent=mRNA167 III gt csa exon 1525164 1525402 0.893 - . Parent=mRNA167 III gt cds CDS 1525164 1525402 . - 0 ID=CDS128;Parent=mRNA167 III gt csa exon 1526403 1526535 0.988 - . Parent=mRNA167 III gt cds CDS 1526403 1526535 . - 1 ID=CDS128;Parent=mRNA167 III gt csa exon 1528323 1528435 1 - . Parent=mRNA167 III gt cds CDS 1528323 1528435 . - 0 ID=CDS128;Parent=mRNA167 III gt cds CDS 1529809 1529913 . - 0 ID=CDS128;Parent=mRNA167 III gt csa exon 1529809 1529982 0.921 - . Parent=mRNA167 III gt csa mRNA 1521569 1531828 . - . ID=mRNA168;Parent=gene111;Target=RP 1 544 + III gt csa exon 1521569 1521926 0.88 - . Parent=mRNA168 III gt cds CDS 1521570 1521926 . - 0 ID=CDS129;Parent=mRNA168 III gt csa exon 1523142 1523685 0.947 - . Parent=mRNA168 III gt cds CDS 1523142 1523685 . - 1 ID=CDS129;Parent=mRNA168 III gt csa exon 1525164 1525402 0.895 - . Parent=mRNA168 III gt cds CDS 1525164 1525402 . - 0 ID=CDS129;Parent=mRNA168 III gt csa exon 1526403 1526535 0.969 - . Parent=mRNA168 III gt cds CDS 1526403 1526535 . - 1 ID=CDS129;Parent=mRNA168 III gt csa exon 1528323 1528435 1 - . Parent=mRNA168 III gt cds CDS 1528323 1528435 . - 0 ID=CDS129;Parent=mRNA168 III gt cds CDS 1529809 1529913 . - 0 ID=CDS129;Parent=mRNA168 III gt csa exon 1529809 1529984 0.923 - . Parent=mRNA168 III gt csa exon 1531762 1531828 0.969 - . Parent=mRNA168 ### III gt csa gene 1537499 1538168 . - . ID=gene112 III gt csa mRNA 1537499 1538168 . - . ID=mRNA169;Parent=gene112;Target=yk1272b06.3 1 670 + III gt csa exon 1537499 1538168 0.997 - . Parent=mRNA169 ### III gt csa gene 1540487 1543445 . + . ID=gene113 III gt csa mRNA 1540487 1543445 . + . ID=mRNA170;Parent=gene113;Target=yk427d4.5 1 361 +,yk630d2.5 1 376 +,RP 1 157 +,yk308b12.5 1 360 +,yk1375b08.3 1 496 -,yk1375b08.5 1 531 +,yk308b12.3 1 300 -,yk427d4.3 1 300 - III gt csa exon 1540487 1540540 0.954 + . Parent=mRNA170 III gt cds CDS 1540496 1540540 . + 0 ID=CDS130;Parent=mRNA170 III gt csa exon 1540708 1540869 1 + . Parent=mRNA170 III gt cds CDS 1540708 1540869 . + 0 ID=CDS130;Parent=mRNA170 III gt csa exon 1541916 1542059 1 + . Parent=mRNA170 III gt cds CDS 1541916 1542059 . + 0 ID=CDS130;Parent=mRNA170 III gt cds CDS 1543175 1543294 . + 0 ID=CDS130;Parent=mRNA170 III gt csa exon 1543175 1543445 0.985 + . Parent=mRNA170 ### III gt csa gene 1544928 1554435 . - . ID=gene114 III gt csa mRNA 1544928 1554435 . - . ID=mRNA171;Parent=gene114;Target=CESAC53F 1 323 -,yk236c12.3 1 300 -,yk670g3.3 1 300 -,RP 1 723 +,BP 1 717 +,yk166a9.5 1 380 +,yk670g3.5 1 360 +,yk341h12.5 1 364 + III gt csa exon 1544928 1545199 0.982 - . Parent=mRNA171 III gt cds CDS 1545025 1545199 . - 1 ID=CDS131;Parent=mRNA171 III gt csa exon 1546519 1546675 0.932 - . Parent=mRNA171 III gt cds CDS 1546519 1546675 . - 2 ID=CDS131;Parent=mRNA171 III gt csa exon 1547363 1547757 0.918 - . Parent=mRNA171 III gt cds CDS 1547363 1547757 . - 1 ID=CDS131;Parent=mRNA171 III gt csa exon 1548432 1548499 0.924 - . Parent=mRNA171 III gt cds CDS 1548432 1548499 . - 0 ID=CDS131;Parent=mRNA171 III gt csa exon 1549231 1549616 0.9 - . Parent=mRNA171 III gt cds CDS 1549231 1549616 . - 2 ID=CDS131;Parent=mRNA171 III gt csa exon 1550539 1550735 0.873 - . Parent=mRNA171 III gt cds CDS 1550539 1550735 . - 1 ID=CDS131;Parent=mRNA171 III gt csa exon 1551380 1551622 0.988 - . Parent=mRNA171 III gt cds CDS 1551380 1551622 . - 1 ID=CDS131;Parent=mRNA171 III gt csa exon 1552597 1552760 1 - . Parent=mRNA171 III gt cds CDS 1552597 1552760 . - 0 ID=CDS131;Parent=mRNA171 III gt csa exon 1552826 1552996 0.95 - . Parent=mRNA171 III gt cds CDS 1552826 1552996 . - 0 ID=CDS131;Parent=mRNA171 III gt cds CDS 1554189 1554431 . - 0 ID=CDS131;Parent=mRNA171 III gt csa exon 1554189 1554435 0.945 - . Parent=mRNA171 ### III gt csa gene 1555385 1560461 . + . ID=gene115 III gt csa mRNA 1555385 1556102 . + . ID=mRNA172;Parent=gene115;Target=yk1111d10.3 1 616 +,yk475g1.3 1 300 +,yk415h12.3 1 300 +,yk491d7.3 1 300 +,yk589g10.3 1 300 +,yk607b8.3 1 300 +,yk157b1.3 1 300 + III gt csa exon 1555385 1556102 0.978 + . Parent=mRNA172 III gt csa mRNA 1558790 1560461 . + . ID=mRNA173;Parent=gene115;Target=yk1371c11.5 23 357 +,yk1030d09.5 23 357 +,yk1508a02.5 23 521 +,yk1540b10.5 23 524 +,yk1532h03.5 23 561 +,yk1371c12.5 23 602 +,yk1364c12.5 23 604 +,yk1395h09.5 22 605 +,yk1377c09.5 23 614 +,yk498e1.5 1 360 + III gt csa exon 1558790 1558898 1 + . Parent=mRNA173 III gt cds CDS 1558872 1558898 . + 0 ID=CDS132;Parent=mRNA173 III gt csa exon 1558949 1559033 1 + . Parent=mRNA173 III gt cds CDS 1558949 1559033 . + 0 ID=CDS132;Parent=mRNA173 III gt csa exon 1559100 1559240 1 + . Parent=mRNA173 III gt cds CDS 1559100 1559240 . + 2 ID=CDS132;Parent=mRNA173 III gt csa exon 1560205 1560461 1 + . Parent=mRNA173 III gt cds CDS 1560205 1560461 . + 2 ID=CDS132;Parent=mRNA173 ### III gt csa gene 1555397 1558519 . - . ID=gene116 III gt csa mRNA 1555397 1558519 . - . ID=mRNA174;Parent=gene116;Target=yk1111d10.5 1 607 +,yk607b8.5 1 377 +,yk1518a06.3 1 610 -,yk475g1.5 1 360 +,yk415h12.5 1 360 +,yk1518a06.5 23 582 +,CK580339 1 480 +,yk491d7.5 1 360 +,yk236h2.5 1 360 +,yk157b1.5 16 384 +,yk589g10.5 1 360 + III gt csa exon 1555397 1556159 1 - . Parent=mRNA174 III gt cds CDS 1555819 1556159 . - 2 ID=CDS133;Parent=mRNA174 III gt csa exon 1557562 1557862 1 - . Parent=mRNA174 III gt cds CDS 1557562 1557862 . - 0 ID=CDS133;Parent=mRNA174 III gt csa exon 1558159 1558268 1 - . Parent=mRNA174 III gt cds CDS 1558159 1558268 . - 2 ID=CDS133;Parent=mRNA174 III gt csa exon 1558323 1558397 1 - . Parent=mRNA174 III gt cds CDS 1558323 1558397 . - 2 ID=CDS133;Parent=mRNA174 III gt cds CDS 1558446 1558512 . - 0 ID=CDS133;Parent=mRNA174 III gt csa exon 1558446 1558519 1 - . Parent=mRNA174 ### III gt csa gene 1563434 1577849 . + . ID=gene117 III gt csa mRNA 1563434 1570107 . + . ID=mRNA175;Parent=gene117;Target=yk1532h03.3 1 751 -,yk1364c12.3 1 710 -,yk1377c09.3 1 708 -,yk1030d09.3 1 689 -,yk1508a02.3 1 658 -,yk1540b10.3 1 642 -,yk1371c11.3 1 611 -,yk1371c12.3 1 550 -,yk1395h09.3 1 549 - III gt csa exon 1563434 1563617 0.97 + . Parent=mRNA175 III gt cds CDS 1563492 1563617 . + 0 ID=CDS134;Parent=mRNA175 III gt csa exon 1564968 1565122 0.994 + . Parent=mRNA175 III gt cds CDS 1564968 1565122 . + 0 ID=CDS134;Parent=mRNA175 III gt csa exon 1565383 1565545 0.994 + . Parent=mRNA175 III gt cds CDS 1565383 1565545 . + 1 ID=CDS134;Parent=mRNA175 III gt cds CDS 1569746 1569841 . + 0 ID=CDS134;Parent=mRNA175 III gt csa exon 1569746 1570107 0.983 + . Parent=mRNA175 III gt csa mRNA 1570296 1573761 . + . ID=mRNA176;Parent=gene117;Target=yk267a5.5 1 376 +,yk832e07.5 23 479 +,yk1755e04.5 22 536 +,yk1344g03.5 24 566 +,yk1736b09.5 24 568 +,yk1654g06.5 25 578 +,yk1672c02.5 24 581 +,yk1648c12.5 24 586 +,yk1743a02.5 23 609 +,yk1365e09.5 23 634 +,yk1618f02.5 15 652 +,yk1612a04.5 1 398 +,yk548h9.5 1 372 + III gt csa exon 1570296 1570429 1 + . Parent=mRNA176 III gt cds CDS 1570314 1570429 . + 0 ID=CDS135;Parent=mRNA176 III gt csa exon 1571414 1571483 1 + . Parent=mRNA176 III gt cds CDS 1571414 1571483 . + 1 ID=CDS135;Parent=mRNA176 III gt csa exon 1571534 1571764 1 + . Parent=mRNA176 III gt cds CDS 1571534 1571764 . + 0 ID=CDS135;Parent=mRNA176 III gt csa exon 1572543 1572694 1 + . Parent=mRNA176 III gt cds CDS 1572543 1572694 . + 0 ID=CDS135;Parent=mRNA176 III gt csa exon 1572790 1572997 1 + . Parent=mRNA176 III gt cds CDS 1572790 1572997 . + 1 ID=CDS135;Parent=mRNA176 III gt cds CDS 1573737 1573760 . + 0 ID=CDS135;Parent=mRNA176 III gt csa exon 1573737 1573761 1 + . Parent=mRNA176 III gt csa mRNA 1573827 1576628 . + . ID=mRNA177;Parent=gene117;Target=yk1618f02.3 1 742 -,yk1755e04.3 1 743 -,yk1344g03.3 1 711 -,yk1736b09.3 1 649 -,yk1365e09.3 1 704 -,yk1654g06.3 1 694 -,yk1672c02.3 21 686 -,yk1612a04.3 1 663 -,yk1743a02.3 1 617 -,yk1648c12.3 1 629 -,yk832e07.3 1 524 -,yk1235d02.3 1 465 -,yk605e4.3 1 300 - III gt csa exon 1573827 1573915 0.989 + . Parent=mRNA177 III gt csa exon 1574217 1574376 1 + . Parent=mRNA177 III gt cds CDS 1574269 1574376 . + 0 ID=CDS136;Parent=mRNA177 III gt csa exon 1574938 1575034 1 + . Parent=mRNA177 III gt cds CDS 1574938 1575034 . + 0 ID=CDS136;Parent=mRNA177 III gt csa exon 1575084 1575161 1 + . Parent=mRNA177 III gt cds CDS 1575084 1575161 . + 2 ID=CDS136;Parent=mRNA177 III gt csa exon 1576071 1576198 1 + . Parent=mRNA177 III gt cds CDS 1576071 1576198 . + 2 ID=CDS136;Parent=mRNA177 III gt cds CDS 1576416 1576529 . + 0 ID=CDS136;Parent=mRNA177 III gt csa exon 1576416 1576628 0.995 + . Parent=mRNA177 III gt csa mRNA 1573884 1576610 . + . ID=mRNA178;Parent=gene117;Target=yk1154b02.3 1 687 -,yk446d1.5 1 234 +,yk1235d02.3 1 465 -,yk605e4.3 1 300 - III gt csa exon 1573884 1573915 1 + . Parent=mRNA178 III gt csa exon 1574217 1574257 1 + . Parent=mRNA178 III gt csa exon 1574822 1575034 0.995 + . Parent=mRNA178 III gt csa exon 1575084 1575161 1 + . Parent=mRNA178 III gt csa exon 1576071 1576198 1 + . Parent=mRNA178 III gt cds CDS 1576091 1576198 . + 0 ID=CDS137;Parent=mRNA178 III gt cds CDS 1576416 1576529 . + 0 ID=CDS137;Parent=mRNA178 III gt csa exon 1576416 1576610 1 + . Parent=mRNA178 III gt csa mRNA 1576754 1577849 . + . ID=mRNA179;Parent=gene117;Target=yk423d1.5 1 360 + III gt csa exon 1576754 1576868 0.974 + . Parent=mRNA179 III gt cds CDS 1576826 1576868 . + 0 ID=CDS138;Parent=mRNA179 III gt csa exon 1577605 1577849 1 + . Parent=mRNA179 III gt cds CDS 1577605 1577849 . + 2 ID=CDS138;Parent=mRNA179 ### III gt csa gene 1569814 1570053 . - . ID=gene118 III gt csa mRNA 1569814 1570053 . - . ID=mRNA180;Parent=gene118;Target=yk252b6.3 1 240 + III gt csa exon 1569814 1570053 0.938 - . Parent=mRNA180 ### III gt csa gene 1579272 1580784 . + . ID=gene119 III gt csa mRNA 1579272 1580784 . + . ID=mRNA181;Parent=gene119;Target=yk672c6.3 1 300 -,yk423d1.3 1 300 - III gt csa exon 1579272 1579319 1 + . Parent=mRNA181 III gt cds CDS 1579299 1579319 . + 0 ID=CDS139;Parent=mRNA181 III gt cds CDS 1580527 1580757 . + 0 ID=CDS139;Parent=mRNA181 III gt csa exon 1580527 1580784 1 + . Parent=mRNA181 ### III gt csa gene 1583146 1584881 . - . ID=gene120 III gt csa mRNA 1583146 1584881 . - . ID=mRNA182;Parent=gene120;Target=yk1513e11.5 1 611 +,yk1513e11.3 1 577 -,yk378b9.5 1 376 +,yk102a5.5 1 360 + III gt csa exon 1583146 1583491 1 - . Parent=mRNA182 III gt cds CDS 1583459 1583491 . - 0 ID=CDS140;Parent=mRNA182 III gt cds CDS 1584617 1584877 . - 0 ID=CDS140;Parent=mRNA182 III gt csa exon 1584617 1584881 0.992 - . Parent=mRNA182 ### III gt csa gene 1583159 1583488 . + . ID=gene121 III gt csa mRNA 1583159 1583488 . + . ID=mRNA183;Parent=gene121;Target=yk102a5.3 1 315 +,yk378b9.3 1 279 + III gt csa exon 1583159 1583488 0.957 + . Parent=mRNA183 ### III gt csa gene 1605742 1606803 . + . ID=gene122 III gt csa mRNA 1605742 1606803 . + . ID=mRNA184;Parent=gene122;Target=BP 1 152 + III gt csa exon 1605742 1605953 0.982 + . Parent=mRNA184 III gt cds CDS 1605847 1605953 . + 0 ID=CDS141;Parent=mRNA184 III gt csa exon 1606445 1606556 0.751 + . Parent=mRNA184 III gt cds CDS 1606445 1606556 . + 1 ID=CDS141;Parent=mRNA184 III gt csa exon 1606672 1606803 1 + . Parent=mRNA184 III gt cds CDS 1606672 1606803 . + 0 ID=CDS141;Parent=mRNA184 III gt csa mRNA 1605745 1606803 . + . ID=mRNA185;Parent=gene122;Target=RP 1 142 + III gt csa exon 1605745 1605953 0.983 + . Parent=mRNA185 III gt cds CDS 1605847 1605953 . + 0 ID=CDS142;Parent=mRNA185 III gt csa exon 1606472 1606556 0.972 + . Parent=mRNA185 III gt cds CDS 1606472 1606556 . + 1 ID=CDS142;Parent=mRNA185 III gt csa exon 1606672 1606803 1 + . Parent=mRNA185 III gt cds CDS 1606672 1606803 . + 0 ID=CDS142;Parent=mRNA185 ### III gt csa gene 1606834 1610636 . - . ID=gene123 III gt csa mRNA 1606834 1609423 . - . ID=mRNA186;Parent=gene123;Target=yk1416d09.3 1 705 -,yk1362f07.3 1 706 -,yk1547d11.3 1 703 -,yk517d4.3 1 300 -,yk539b10.3 1 300 -,yk579b9.3 1 172 - III gt csa exon 1606834 1606880 0.979 - . Parent=mRNA186 III gt csa exon 1606929 1607019 1 - . Parent=mRNA186 III gt cds CDS 1606983 1607019 . - 1 ID=CDS143;Parent=mRNA186 III gt csa exon 1607623 1607756 1 - . Parent=mRNA186 III gt cds CDS 1607623 1607756 . - 0 ID=CDS143;Parent=mRNA186 III gt csa exon 1607809 1608154 1 - . Parent=mRNA186 III gt cds CDS 1607809 1608154 . - 1 ID=CDS143;Parent=mRNA186 III gt cds CDS 1609334 1609368 . - 0 ID=CDS143;Parent=mRNA186 III gt csa exon 1609334 1609423 1 - . Parent=mRNA186 III gt csa mRNA 1609706 1610636 . - . ID=mRNA187;Parent=gene123;Target=yk539b10.5 1 360 + III gt csa exon 1609706 1609870 0.994 - . Parent=mRNA187 III gt cds CDS 1609708 1609870 . - 1 ID=CDS144;Parent=mRNA187 III gt cds CDS 1610442 1610491 . - 0 ID=CDS144;Parent=mRNA187 III gt csa exon 1610442 1610636 1 - . Parent=mRNA187 ### III gt csa gene 1611351 1614022 . - . ID=gene124 III gt csa mRNA 1611351 1614022 . - . ID=mRNA188;Parent=gene124;Target=yk1547d11.5 1 438 +,yk1416d09.5 23 573 +,yk1362f07.5 23 549 +,yk517d4.5 1 360 + III gt csa exon 1611351 1611537 1 - . Parent=mRNA188 III gt cds CDS 1611352 1611537 . - 0 ID=CDS145;Parent=mRNA188 III gt csa exon 1612158 1612264 1 - . Parent=mRNA188 III gt cds CDS 1612158 1612264 . - 2 ID=CDS145;Parent=mRNA188 III gt csa exon 1612870 1613031 1 - . Parent=mRNA188 III gt cds CDS 1612870 1613031 . - 2 ID=CDS145;Parent=mRNA188 III gt cds CDS 1613520 1614015 . - 0 ID=CDS145;Parent=mRNA188 III gt csa exon 1613520 1614022 1 - . Parent=mRNA188 ### III gt csa gene 1617126 1618924 . - . ID=gene125 III gt csa mRNA 1617126 1618924 . - . ID=mRNA189;Parent=gene125;Target=CK589550 1 323 +,BP 1 109 +,RP 1 109 +,yk81b11.5 1 330 +,yk175h6.5 1 222 + III gt csa exon 1617126 1617142 0.647 - . Parent=mRNA189 III gt csa exon 1617362 1617429 0.956 - . Parent=mRNA189 III gt cds CDS 1617364 1617429 . - 0 ID=CDS146;Parent=mRNA189 III gt csa exon 1618260 1618379 1 - . Parent=mRNA189 III gt cds CDS 1618260 1618379 . - 0 ID=CDS146;Parent=mRNA189 III gt csa exon 1618719 1618832 0.991 - . Parent=mRNA189 III gt cds CDS 1618719 1618832 . - 0 ID=CDS146;Parent=mRNA189 III gt cds CDS 1618885 1618911 . - 0 ID=CDS146;Parent=mRNA189 III gt csa exon 1618885 1618924 0.975 - . Parent=mRNA189 III gt csa mRNA 1617142 1618924 . - . ID=mRNA190;Parent=gene125;Target=yk1213c04.5 23 578 +,yk762h06.5 23 577 +,yk62a4.3 1 298 -,yk1597b03.3 164 675 -,yk1378f10.3 23 532 -,yk1213c04.3 23 531 -,yk341e7.3 1 300 -,yk762h06.3 1 322 -,yk333g8.3 1 300 -,yk289b11.3 1 300 -,yk1491d07.5 9 502 +,yk603g6.3 1 300 -,yk140f8.3 1 300 -,yk383e5.3 1 300 -,yk642a2.3 1 300 -,yk607b2.3 1 300 -,yk1410e10.5 9 492 +,yk1410e10.3 9 482 -,yk1491d07.3 9 481 -,yk342g4.3 1 300 -,yk383e5.5 1 386 +,yk140f8.5 1 381 +,yk599a12.5 1 360 +,yk494f1.5 1 360 +,yk342g4.5 1 377 +,yk333g8.5 1 360 +,yk452a10.5 1 360 +,yk642a2.5 1 376 +,yk603g6.5 1 360 +,yk607b2.5 1 376 +,yk341e7.5 1 372 +,yk289b11.5 13 375 +,BP 1 109 +,RP 1 109 +,yk81b11.5 1 330 +,yk175h6.5 1 222 + III gt csa exon 1617142 1617429 1 - . Parent=mRNA190 III gt cds CDS 1617364 1617429 . - 0 ID=CDS147;Parent=mRNA190 III gt csa exon 1618260 1618379 1 - . Parent=mRNA190 III gt cds CDS 1618260 1618379 . - 0 ID=CDS147;Parent=mRNA190 III gt csa exon 1618719 1618832 1 - . Parent=mRNA190 III gt cds CDS 1618719 1618832 . - 0 ID=CDS147;Parent=mRNA190 III gt cds CDS 1618885 1618911 . - 0 ID=CDS147;Parent=mRNA190 III gt csa exon 1618885 1618924 0.975 - . Parent=mRNA190 III gt csa mRNA 1617181 1618918 . - . ID=mRNA191;Parent=gene125;Target=yk1405h09.3 1 391 -,yk1405h09.5 23 302 + III gt csa exon 1617181 1617429 0.972 - . Parent=mRNA191 III gt cds CDS 1617279 1617429 . - 1 ID=CDS148;Parent=mRNA191 III gt csa exon 1618260 1618267 1 - . Parent=mRNA191 III gt cds CDS 1618260 1618267 . - 0 ID=CDS148;Parent=mRNA191 III gt csa exon 1618731 1618832 1 - . Parent=mRNA191 III gt cds CDS 1618731 1618832 . - 0 ID=CDS148;Parent=mRNA191 III gt cds CDS 1618885 1618911 . - 0 ID=CDS148;Parent=mRNA191 III gt csa exon 1618885 1618918 1 - . Parent=mRNA191 ### III gt csa gene 1617159 1617431 . + . ID=gene126 III gt csa mRNA 1617159 1617431 . + . ID=mRNA192;Parent=gene126;Target=yk81b11.3 1 120 +,yk599a12.3 1 229 + III gt csa exon 1617159 1617431 0.987 + . Parent=mRNA192 ### III gt csa gene 1619718 1625773 . + . ID=gene127 III gt csa mRNA 1619718 1623324 . + . ID=mRNA193;Parent=gene127;Target=yk515d7.5 1 369 +,yk1371g11.5 1 457 +,yk1502h06.5 23 475 +,yk1315f04.5 23 476 +,yk769d02.5 23 487 +,yk1620h12.5 23 600 +,yk566g5.5 1 360 +,yk434a10.5 1 374 +,yk416a11.5 1 240 +,yk413g4.5 1 360 +,yk458a7.5 1 360 +,yk498g8.5 1 360 +,yk344h2.5 1 360 +,yk416f6.5 1 360 +,yk432a10.5 1 360 +,yk638c1.5 1 360 +,yk631h7.5 1 360 +,yk538g9.5 1 360 +,yk499e12.5 1 360 +,yk678h2.5 1 360 +,yk534c9.5 1 360 +,yk591c9.5 1 360 +,yk629b10.5 1 360 +,yk460e6.5 1 360 +,yk668e7.5 1 240 +,yk586g3.5 1 360 +,yk394h5.5 1 360 +,yk542c5.5 1 360 + III gt csa exon 1619718 1619894 0.972 + . Parent=mRNA193 III gt cds CDS 1619748 1619894 . + 0 ID=CDS149;Parent=mRNA193 III gt csa exon 1620044 1620352 1 + . Parent=mRNA193 III gt cds CDS 1620044 1620352 . + 0 ID=CDS149;Parent=mRNA193 III gt cds CDS 1623213 1623323 . + 0 ID=CDS149;Parent=mRNA193 III gt csa exon 1623213 1623324 1 + . Parent=mRNA193 III gt csa mRNA 1619718 1625773 . + . ID=mRNA194;Parent=gene127;Target=yk515d7.5 1 369 +,L36035 1 1781 +,yk1614a02.5 1 633 +,yk1371g11.5 1 457 +,yk761g06.5 1 588 +,yk1502h06.5 23 475 +,yk1315f04.5 23 476 +,yk769d02.5 23 487 +,yk1545g12.5 23 531 +,yk1421h01.5 23 532 +,yk1399b07.5 23 533 +,yk1651f03.5 23 569 +,yk1664c02.5 22 568 +,yk1696f05.5 23 570 +,yk1528f03.5 23 570 +,yk1741c08.5 23 571 +,yk1444d01.5 23 571 +,yk1500h01.5 23 571 +,yk1645f10.5 23 572 +,yk1695g01.5 23 572 +,yk1592g09.5 23 572 +,yk1526g10.5 22 573 +,yk1522d12.5 21 573 +,yk1387h03.5 22 574 +,yk1526h01.5 23 575 +,yk1493d05.5 23 577 +,yk1363e02.5 23 577 +,yk1657c03.5 23 578 +,yk816g12.5 23 581 +,yk566g5.5 1 360 +,yk434a10.5 1 374 +,yk416a11.5 1 240 +,yk413g4.5 1 360 +,yk458a7.5 1 360 +,yk498g8.5 1 360 +,RP 1 568 +,BP 1 568 +,yk344h2.5 1 360 +,yk416f6.5 1 360 +,yk432a10.5 1 360 +,yk638c1.5 1 360 +,yk631h7.5 1 360 +,yk538g9.5 1 360 +,yk499e12.5 1 360 +,yk678h2.5 1 360 +,yk534c9.5 1 360 +,yk591c9.5 1 360 +,yk629b10.5 1 360 +,yk460e6.5 1 360 +,yk668e7.5 1 240 +,yk586g3.5 1 360 +,yk394h5.5 1 360 +,yk755a01.5 1 538 +,yk542c5.5 1 360 +,yk1004c09.5 1 603 +,AJ270981 1 670 +,yk455e6.5 1 360 +,yk405a9.5 1 360 +,yk343g7.5 1 360 +,CB104502 83 407 +,yk257b9.5 1 375 +,yk545c7.5 1 360 +,yk7b1.5 1 359 +,cm9c7.5 1 402 +,CEMSF82F 1 211 -,yk1315f04.3 1 607 -,yk1645f10.3 1 675 -,yk1528f03.3 1 674 -,yk1500h01.3 1 644 -,yk20e11.5 1 300 +,yk272b10.5 1 360 +,yk221g12.5 1 240 + III gt csa exon 1619718 1619894 0.972 + . Parent=mRNA194 III gt cds CDS 1619748 1619894 . + 0 ID=CDS150;Parent=mRNA194 III gt csa exon 1620044 1620352 1 + . Parent=mRNA194 III gt cds CDS 1620044 1620352 . + 0 ID=CDS150;Parent=mRNA194 III gt csa exon 1621416 1621808 0.997 + . Parent=mRNA194 III gt cds CDS 1621416 1621808 . + 0 ID=CDS150;Parent=mRNA194 III gt csa exon 1623048 1623425 1 + . Parent=mRNA194 III gt cds CDS 1623048 1623425 . + 0 ID=CDS150;Parent=mRNA194 III gt csa exon 1624423 1624740 1 + . Parent=mRNA194 III gt cds CDS 1624423 1624740 . + 0 ID=CDS150;Parent=mRNA194 III gt cds CDS 1625234 1625395 . + 0 ID=CDS150;Parent=mRNA194 III gt csa exon 1625234 1625773 0.959 + . Parent=mRNA194 III gt csa mRNA 1619718 1625773 . + . ID=mRNA195;Parent=gene127;Target=yk515d7.5 1 369 +,yk1614a02.5 1 633 +,yk1371g11.5 1 457 +,yk761g06.5 1 588 +,yk1502h06.5 23 475 +,yk1315f04.5 23 476 +,yk769d02.5 23 487 +,yk1545g12.5 23 531 +,yk1421h01.5 23 532 +,yk1399b07.5 23 533 +,yk1651f03.5 23 569 +,yk1664c02.5 22 568 +,yk1696f05.5 23 570 +,yk1528f03.5 23 570 +,yk1741c08.5 23 571 +,yk1444d01.5 23 571 +,yk1500h01.5 23 571 +,yk1645f10.5 23 572 +,yk1695g01.5 23 572 +,yk1592g09.5 23 572 +,yk1526g10.5 22 573 +,yk1522d12.5 21 573 +,yk1387h03.5 22 574 +,yk1526h01.5 23 575 +,yk1493d05.5 23 577 +,yk1363e02.5 23 577 +,yk1657c03.5 23 578 +,yk816g12.5 23 581 +,yk566g5.5 1 360 +,yk434a10.5 1 374 +,yk416a11.5 1 240 +,yk413g4.5 1 360 +,yk458a7.5 1 360 +,yk498g8.5 1 360 +,yk344h2.5 1 360 +,yk416f6.5 1 360 +,yk432a10.5 1 360 +,yk638c1.5 1 360 +,yk631h7.5 1 360 +,yk538g9.5 1 360 +,yk499e12.5 1 360 +,yk678h2.5 1 360 +,yk534c9.5 1 360 +,yk591c9.5 1 360 +,yk629b10.5 1 360 +,yk460e6.5 1 360 +,yk668e7.5 1 240 +,yk586g3.5 1 360 +,yk394h5.5 1 360 +,yk755a01.5 1 538 +,yk542c5.5 1 360 +,yk777d06.5 1 646 +,cm9c7.5 1 402 +,CEMSF82F 1 211 -,yk1315f04.3 1 607 -,yk1645f10.3 1 675 -,yk1528f03.3 1 674 -,yk1500h01.3 1 644 -,yk20e11.5 1 300 +,yk272b10.5 1 360 +,yk221g12.5 1 240 + III gt csa exon 1619718 1619894 0.972 + . Parent=mRNA195 III gt cds CDS 1619748 1619894 . + 0 ID=CDS151;Parent=mRNA195 III gt csa exon 1620044 1620352 1 + . Parent=mRNA195 III gt cds CDS 1620044 1620352 . + 0 ID=CDS151;Parent=mRNA195 III gt csa exon 1621416 1621679 1 + . Parent=mRNA195 III gt cds CDS 1621416 1621679 . + 0 ID=CDS151;Parent=mRNA195 III gt csa exon 1623279 1623425 1 + . Parent=mRNA195 III gt cds CDS 1623279 1623425 . + 0 ID=CDS151;Parent=mRNA195 III gt csa exon 1624423 1624740 0.958 + . Parent=mRNA195 III gt cds CDS 1624423 1624740 . + 0 ID=CDS151;Parent=mRNA195 III gt cds CDS 1625234 1625395 . + 0 ID=CDS151;Parent=mRNA195 III gt csa exon 1625234 1625773 0.959 + . Parent=mRNA195 ### III gt csa gene 1623119 1625784 . - . ID=gene128 III gt csa mRNA 1623119 1623227 . - . ID=mRNA196;Parent=gene128;Target=yk125c12.5 1 111 + III gt csa exon 1623119 1623227 0.872 - . Parent=mRNA196 III gt csa mRNA 1625267 1625784 . - . ID=mRNA197;Parent=gene128;Target=yk755a01.3 1 509 +,yk1371g11.3 1 500 +,yk1741c08.3 1 502 +,yk1620h12.3 1 499 +,yk1522d12.3 1 505 +,yk1592g09.3 1 484 +,yk1502h06.3 1 491 +,yk1651f03.3 1 490 +,yk1545g12.3 1 481 +,yk1526h01.3 1 487 +,yk1664c02.3 1 489 +,yk1614a02.3 1 489 +,yk1657c03.3 1 488 +,yk1696f05.3 1 489 +,yk1493d05.3 1 490 +,yk777d06.3 1 470 +,yk769d02.3 1 474 +,yk816g12.3 1 487 +,yk1004c09.3 1 455 +,yk1399b07.3 1 434 +,yk1363e02.3 1 430 +,yk1695g01.3 1 430 +,yk1387h03.3 1 430 + III gt csa exon 1625267 1625784 0.904 - . Parent=mRNA197 ### III gt csa gene 1626655 1629966 . + . ID=gene129 III gt csa mRNA 1626655 1629966 . + . ID=mRNA198;Parent=gene129;Target=yk473d1.5 1 360 + III gt csa exon 1626655 1626760 0.976 + . Parent=mRNA198 III gt cds CDS 1626661 1626760 . + 0 ID=CDS152;Parent=mRNA198 III gt csa exon 1629399 1629553 0.994 + . Parent=mRNA198 III gt cds CDS 1629399 1629553 . + 2 ID=CDS152;Parent=mRNA198 III gt cds CDS 1629869 1629964 . + 0 ID=CDS152;Parent=mRNA198 III gt csa exon 1629869 1629966 0.99 + . Parent=mRNA198 ### III gt csa gene 1630786 1634440 . - . ID=gene130 III gt csa mRNA 1630786 1634440 . - . ID=mRNA199;Parent=gene130;Target=yk1400h01.3 1 669 -,yk1673f09.3 1 729 -,WP 1 505 +,yk1400h01.5 1 601 + III gt csa exon 1630786 1630944 1 - . Parent=mRNA199 III gt cds CDS 1630807 1630944 . - 0 ID=CDS153;Parent=mRNA199 III gt csa exon 1630996 1631105 1 - . Parent=mRNA199 III gt cds CDS 1630996 1631105 . - 2 ID=CDS153;Parent=mRNA199 III gt csa exon 1631542 1631671 1 - . Parent=mRNA199 III gt cds CDS 1631542 1631671 . - 0 ID=CDS153;Parent=mRNA199 III gt csa exon 1632010 1632261 1 - . Parent=mRNA199 III gt cds CDS 1632010 1632261 . - 0 ID=CDS153;Parent=mRNA199 III gt csa exon 1632410 1632578 1 - . Parent=mRNA199 III gt cds CDS 1632410 1632578 . - 1 ID=CDS153;Parent=mRNA199 III gt csa exon 1632625 1632755 1 - . Parent=mRNA199 III gt cds CDS 1632625 1632755 . - 0 ID=CDS153;Parent=mRNA199 III gt csa exon 1632894 1633031 1 - . Parent=mRNA199 III gt cds CDS 1632894 1633031 . - 0 ID=CDS153;Parent=mRNA199 III gt csa exon 1633206 1633356 1 - . Parent=mRNA199 III gt cds CDS 1633206 1633356 . - 1 ID=CDS153;Parent=mRNA199 III gt csa exon 1633716 1633864 1 - . Parent=mRNA199 III gt cds CDS 1633716 1633864 . - 0 ID=CDS153;Parent=mRNA199 III gt csa exon 1634294 1634440 1 - . Parent=mRNA199 III gt cds CDS 1634294 1634440 . - 0 ID=CDS153;Parent=mRNA199 ### III gt csa gene 1636110 1637235 . + . ID=gene131 III gt csa mRNA 1636110 1637235 . + . ID=mRNA200;Parent=gene131;Target=yk473d1.3 1 300 - III gt csa exon 1636110 1636349 0.95 + . Parent=mRNA200 III gt cds CDS 1636126 1636349 . + 0 ID=CDS154;Parent=mRNA200 III gt cds CDS 1637174 1637234 . + 1 ID=CDS154;Parent=mRNA200 III gt csa exon 1637174 1637235 0.984 + . Parent=mRNA200 ### III gt csa gene 1638270 1638592 . - . ID=gene132 III gt csa mRNA 1638270 1638592 . - . ID=mRNA201;Parent=gene132;Target=yk384f7.5 1 324 + III gt csa exon 1638270 1638592 0.98 - . Parent=mRNA201 ### III gt csa gene 1641900 1642133 . + . ID=gene133 III gt csa mRNA 1641900 1642133 . + . ID=mRNA202;Parent=gene133;Target=yk296c8.3 1 221 + III gt csa exon 1641900 1641940 0.878 + . Parent=mRNA202 III gt csa exon 1641952 1642133 0.846 + . Parent=mRNA202 ### III gt csa gene 1658190 1659850 . - . ID=gene134 III gt csa mRNA 1658190 1659850 . - . ID=mRNA203;Parent=gene134;Target=yk1658h08.5 1 538 +,yk1178b07.5 23 565 +,yk869h10.3 179 673 -,yk1658h08.3 1 488 -,yk1178b07.3 23 514 -,yk1004a04.3 102 584 -,yk1016a02.3 128 579 - III gt csa exon 1658190 1658447 0.965 - . Parent=mRNA203 III gt cds CDS 1658265 1658447 . - 0 ID=CDS155;Parent=mRNA203 III gt cds CDS 1659566 1659841 . - 0 ID=CDS155;Parent=mRNA203 III gt csa exon 1659566 1659850 1 - . Parent=mRNA203 ### III gt csa gene 1667817 1668608 . - . ID=gene135 III gt csa mRNA 1667817 1668608 . - . ID=mRNA204;Parent=gene135;Target=WP 1 89 +,BP 1 75 + III gt csa exon 1667817 1667916 1 - . Parent=mRNA204 III gt cds CDS 1667817 1667916 . - 1 ID=CDS156;Parent=mRNA204 III gt csa exon 1667967 1668062 1 - . Parent=mRNA204 III gt cds CDS 1667967 1668062 . - 1 ID=CDS156;Parent=mRNA204 III gt csa exon 1668538 1668608 1 - . Parent=mRNA204 III gt cds CDS 1668538 1668608 . - 0 ID=CDS156;Parent=mRNA204 ### III gt csa gene 1672506 1672805 . + . ID=gene136 III gt csa mRNA 1672506 1672805 . + . ID=mRNA205;Parent=gene136;Target=yk204f5.3 1 300 + III gt csa exon 1672506 1672805 0.97 + . Parent=mRNA205 ### III gt csa gene 1672790 1676716 . - . ID=gene137 III gt csa mRNA 1672790 1676716 . - . ID=mRNA206;Parent=gene137;Target=RP 1 300 +,yk204f5.5 1 360 + III gt csa exon 1672790 1672941 0.778 - . Parent=mRNA206 III gt cds CDS 1672790 1672941 . - 2 ID=CDS157;Parent=mRNA206 III gt csa exon 1673902 1674102 0.662 - . Parent=mRNA206 III gt cds CDS 1673902 1674102 . - 2 ID=CDS157;Parent=mRNA206 III gt csa exon 1674163 1674368 0.916 - . Parent=mRNA206 III gt cds CDS 1674163 1674368 . - 1 ID=CDS157;Parent=mRNA206 III gt csa exon 1675422 1675681 0.939 - . Parent=mRNA206 III gt cds CDS 1675422 1675681 . - 0 ID=CDS157;Parent=mRNA206 III gt cds CDS 1676386 1676469 . - 0 ID=CDS157;Parent=mRNA206 III gt csa exon 1676386 1676474 1 - . Parent=mRNA206 III gt csa exon 1676687 1676716 0.8 - . Parent=mRNA206 ### III gt csa gene 1683619 1688088 . - . ID=gene138 III gt csa mRNA 1683619 1688088 . - . ID=mRNA207;Parent=gene138;Target=WP 1 768 + III gt csa exon 1683619 1683804 1 - . Parent=mRNA207 III gt cds CDS 1683619 1683804 . - 0 ID=CDS158;Parent=mRNA207 III gt csa exon 1684468 1684619 1 - . Parent=mRNA207 III gt cds CDS 1684468 1684619 . - 2 ID=CDS158;Parent=mRNA207 III gt csa exon 1684685 1684830 1 - . Parent=mRNA207 III gt cds CDS 1684685 1684830 . - 1 ID=CDS158;Parent=mRNA207 III gt csa exon 1684885 1685265 1 - . Parent=mRNA207 III gt cds CDS 1684885 1685265 . - 1 ID=CDS158;Parent=mRNA207 III gt csa exon 1686234 1686438 1 - . Parent=mRNA207 III gt cds CDS 1686234 1686438 . - 2 ID=CDS158;Parent=mRNA207 III gt csa exon 1686481 1686665 1 - . Parent=mRNA207 III gt cds CDS 1686481 1686665 . - 1 ID=CDS158;Parent=mRNA207 III gt csa exon 1687040 1688088 1 - . Parent=mRNA207 III gt cds CDS 1687040 1688088 . - 0 ID=CDS158;Parent=mRNA207 ### III gt csa gene 1692070 1695095 . - . ID=gene139 III gt csa mRNA 1692070 1695095 . - . ID=mRNA208;Parent=gene139;Target=yk1146g09.3 1 616 -,WP 1 320 + III gt csa exon 1692070 1692299 0.983 - . Parent=mRNA208 III gt cds CDS 1692130 1692299 . - 2 ID=CDS159;Parent=mRNA208 III gt csa exon 1692347 1692704 1 - . Parent=mRNA208 III gt cds CDS 1692347 1692704 . - 0 ID=CDS159;Parent=mRNA208 III gt csa exon 1692749 1692889 1 - . Parent=mRNA208 III gt cds CDS 1692749 1692889 . - 0 ID=CDS159;Parent=mRNA208 III gt csa exon 1694480 1694576 1 - . Parent=mRNA208 III gt cds CDS 1694480 1694576 . - 1 ID=CDS159;Parent=mRNA208 III gt csa exon 1694902 1695095 1 - . Parent=mRNA208 III gt cds CDS 1694902 1695095 . - 0 ID=CDS159;Parent=mRNA208 ### III gt csa gene 1697210 1697895 . + . ID=gene140 III gt csa mRNA 1697210 1697895 . + . ID=mRNA209;Parent=gene140;Target=yk1108h12.3 1 685 + III gt csa exon 1697210 1697895 0.997 + . Parent=mRNA209 ### III gt csa gene 1697728 1698972 . - . ID=gene141 III gt csa mRNA 1697728 1698972 . - . ID=mRNA210;Parent=gene141;Target=WP 1 305 +,yk1146g09.5 1 585 + III gt csa exon 1697728 1697934 1 - . Parent=mRNA210 III gt cds CDS 1697728 1697934 . - 0 ID=CDS160;Parent=mRNA210 III gt csa exon 1697997 1698621 1 - . Parent=mRNA210 III gt cds CDS 1697997 1698621 . - 1 ID=CDS160;Parent=mRNA210 III gt cds CDS 1698827 1698909 . - 0 ID=CDS160;Parent=mRNA210 III gt csa exon 1698827 1698972 1 - . Parent=mRNA210 ### III gt csa gene 1701749 1702396 . - . ID=gene142 III gt csa mRNA 1701749 1702396 . - . ID=mRNA211;Parent=gene142;Target=yk280d6.5 1 211 + III gt csa exon 1701749 1701916 1 - . Parent=mRNA211 III gt csa exon 1702354 1702396 1 - . Parent=mRNA211 ### III gt csa gene 1703536 1705475 . - . ID=gene143 III gt csa mRNA 1703536 1705475 . - . ID=mRNA212;Parent=gene143;Target=WP 1 286 + III gt csa exon 1703536 1703760 1 - . Parent=mRNA212 III gt cds CDS 1703536 1703760 . - 0 ID=CDS161;Parent=mRNA212 III gt csa exon 1704360 1704909 1 - . Parent=mRNA212 III gt cds CDS 1704360 1704909 . - 1 ID=CDS161;Parent=mRNA212 III gt csa exon 1705393 1705475 1 - . Parent=mRNA212 III gt cds CDS 1705393 1705475 . - 0 ID=CDS161;Parent=mRNA212 ### III gt csa gene 1706545 1714620 . + . ID=gene144 III gt csa mRNA 1706545 1713333 . + . ID=mRNA213;Parent=gene144;Target=WP 1 1141 + III gt csa exon 1706545 1707024 1 + . Parent=mRNA213 III gt cds CDS 1706545 1707024 . + 0 ID=CDS162;Parent=mRNA213 III gt csa exon 1708672 1708784 1 + . Parent=mRNA213 III gt cds CDS 1708672 1708784 . + 0 ID=CDS162;Parent=mRNA213 III gt csa exon 1710053 1710138 1 + . Parent=mRNA213 III gt cds CDS 1710053 1710138 . + 1 ID=CDS162;Parent=mRNA213 III gt csa exon 1710199 1711458 1 + . Parent=mRNA213 III gt cds CDS 1710199 1711458 . + 2 ID=CDS162;Parent=mRNA213 III gt csa exon 1711552 1712548 1 + . Parent=mRNA213 III gt cds CDS 1711552 1712548 . + 2 ID=CDS162;Parent=mRNA213 III gt csa exon 1712599 1712789 1 + . Parent=mRNA213 III gt cds CDS 1712599 1712789 . + 1 ID=CDS162;Parent=mRNA213 III gt csa exon 1712852 1712921 1 + . Parent=mRNA213 III gt cds CDS 1712852 1712921 . + 2 ID=CDS162;Parent=mRNA213 III gt csa exon 1713108 1713333 1 + . Parent=mRNA213 III gt cds CDS 1713108 1713333 . + 1 ID=CDS162;Parent=mRNA213 III gt csa mRNA 1713421 1714620 . + . ID=mRNA214;Parent=gene144;Target=WP 1 351 + III gt csa exon 1713421 1713545 1 + . Parent=mRNA214 III gt cds CDS 1713421 1713545 . + 0 ID=CDS163;Parent=mRNA214 III gt csa exon 1713600 1713772 1 + . Parent=mRNA214 III gt cds CDS 1713600 1713772 . + 1 ID=CDS163;Parent=mRNA214 III gt csa exon 1713817 1713953 1 + . Parent=mRNA214 III gt cds CDS 1713817 1713953 . + 2 ID=CDS163;Parent=mRNA214 III gt csa exon 1714003 1714620 1 + . Parent=mRNA214 III gt cds CDS 1714003 1714620 . + 0 ID=CDS163;Parent=mRNA214 ### III gt csa gene 1716518 1721899 . - . ID=gene145 III gt csa mRNA 1716518 1721899 . - . ID=mRNA215;Parent=gene145;Target=WP 1 1138 + III gt csa exon 1716518 1716778 1 - . Parent=mRNA215 III gt cds CDS 1716518 1716778 . - 0 ID=CDS164;Parent=mRNA215 III gt csa exon 1717664 1717815 1 - . Parent=mRNA215 III gt cds CDS 1717664 1717815 . - 2 ID=CDS164;Parent=mRNA215 III gt csa exon 1717868 1718037 1 - . Parent=mRNA215 III gt cds CDS 1717868 1718037 . - 1 ID=CDS164;Parent=mRNA215 III gt csa exon 1718081 1718509 1 - . Parent=mRNA215 III gt cds CDS 1718081 1718509 . - 1 ID=CDS164;Parent=mRNA215 III gt csa exon 1718571 1718778 1 - . Parent=mRNA215 III gt cds CDS 1718571 1718778 . - 2 ID=CDS164;Parent=mRNA215 III gt csa exon 1719192 1719264 0.909 - . Parent=mRNA215 III gt cds CDS 1719192 1719264 . - 0 ID=CDS164;Parent=mRNA215 III gt csa exon 1719730 1719854 1 - . Parent=mRNA215 III gt cds CDS 1719730 1719854 . - 2 ID=CDS164;Parent=mRNA215 III gt csa exon 1719904 1721899 1 - . Parent=mRNA215 III gt cds CDS 1719904 1721899 . - 0 ID=CDS164;Parent=mRNA215 ### III gt csa gene 1723183 1733090 . - . ID=gene146 III gt csa mRNA 1723183 1724814 . - . ID=mRNA216;Parent=gene146;Target=CEESX92F 1 375 -,yk405f8.3 1 300 -,yk405f8.5 1 375 + III gt csa exon 1723183 1723463 0.996 - . Parent=mRNA216 III gt cds CDS 1723354 1723463 . - 2 ID=CDS165;Parent=mRNA216 III gt csa exon 1723517 1723621 1 - . Parent=mRNA216 III gt cds CDS 1723517 1723621 . - 2 ID=CDS165;Parent=mRNA216 III gt cds CDS 1724588 1724756 . - 0 ID=CDS165;Parent=mRNA216 III gt csa exon 1724588 1724814 0.969 - . Parent=mRNA216 III gt csa mRNA 1723183 1733090 . - . ID=mRNA217;Parent=gene146;Target=CEESX92F 1 375 -,U15167 13 1528 +,yk793h08.3 1 731 -,yk1219f04.3 1 767 -,yk1236d10.3 1 706 -,yk405f8.3 1 300 -,BP 1 447 +,WP 1 446 +,yk793h08.5 23 628 +,yk1236d10.5 28 615 + III gt csa exon 1723183 1723463 0.996 - . Parent=mRNA217 III gt cds CDS 1723354 1723463 . - 2 ID=CDS166;Parent=mRNA217 III gt csa exon 1723517 1723621 1 - . Parent=mRNA217 III gt cds CDS 1723517 1723621 . - 2 ID=CDS166;Parent=mRNA217 III gt csa exon 1724588 1724810 1 - . Parent=mRNA217 III gt cds CDS 1724588 1724810 . - 0 ID=CDS166;Parent=mRNA217 III gt csa exon 1725626 1725883 1 - . Parent=mRNA217 III gt cds CDS 1725626 1725883 . - 0 ID=CDS166;Parent=mRNA217 III gt csa exon 1728036 1728084 1 - . Parent=mRNA217 III gt cds CDS 1728036 1728084 . - 1 ID=CDS166;Parent=mRNA217 III gt csa exon 1729126 1729418 1 - . Parent=mRNA217 III gt cds CDS 1729126 1729418 . - 0 ID=CDS166;Parent=mRNA217 III gt csa exon 1732543 1732692 1 - . Parent=mRNA217 III gt cds CDS 1732543 1732692 . - 0 ID=CDS166;Parent=mRNA217 III gt cds CDS 1732928 1733077 . - 0 ID=CDS166;Parent=mRNA217 III gt csa exon 1732928 1733090 1 - . Parent=mRNA217 III gt csa mRNA 1723354 1733090 . - . ID=mRNA218;Parent=gene146;Target=RP 1 309 +,yk793h08.5 23 628 +,yk1236d10.5 28 615 + III gt csa exon 1723354 1723463 1 - . Parent=mRNA218 III gt cds CDS 1723354 1723463 . - 2 ID=CDS167;Parent=mRNA218 III gt csa exon 1724588 1724810 0.796 - . Parent=mRNA218 III gt cds CDS 1724588 1724810 . - 0 ID=CDS167;Parent=mRNA218 III gt csa exon 1725626 1725883 0.905 - . Parent=mRNA218 III gt cds CDS 1725626 1725883 . - 0 ID=CDS167;Parent=mRNA218 III gt csa exon 1728036 1728084 1 - . Parent=mRNA218 III gt cds CDS 1728036 1728084 . - 1 ID=CDS167;Parent=mRNA218 III gt csa exon 1729126 1729418 1 - . Parent=mRNA218 III gt cds CDS 1729126 1729418 . - 0 ID=CDS167;Parent=mRNA218 III gt csa exon 1732543 1732692 1 - . Parent=mRNA218 III gt cds CDS 1732543 1732692 . - 0 ID=CDS167;Parent=mRNA218 III gt cds CDS 1732928 1733077 . - 0 ID=CDS167;Parent=mRNA218 III gt csa exon 1732928 1733090 1 - . Parent=mRNA218 ### III gt csa gene 1752185 1754928 . - . ID=gene147 III gt csa mRNA 1752185 1752773 . - . ID=mRNA219;Parent=gene147;Target=yk662d4.3 1 300 - III gt csa exon 1752185 1752363 1 - . Parent=mRNA219 III gt csa exon 1752588 1752653 1 - . Parent=mRNA219 III gt csa exon 1752719 1752773 1 - . Parent=mRNA219 III gt csa mRNA 1752791 1754928 . - . ID=mRNA220;Parent=gene147;Target=yk662d4.5 1 379 + III gt csa exon 1752791 1752886 0.865 - . Parent=mRNA220 III gt cds CDS 1752791 1752886 . - 0 ID=CDS168;Parent=mRNA220 III gt csa exon 1753877 1754092 0.995 - . Parent=mRNA220 III gt cds CDS 1753877 1754092 . - 0 ID=CDS168;Parent=mRNA220 III gt cds CDS 1754866 1754901 . - 0 ID=CDS168;Parent=mRNA220 III gt csa exon 1754866 1754928 1 - . Parent=mRNA220 ### III gt csa gene 1763529 1764816 . + . ID=gene148 III gt csa mRNA 1763529 1764816 . + . ID=mRNA221;Parent=gene148;Target=yk58h5.5 1 239 +,yk411g7.5 1 360 +,yk261e7.5 1 180 + III gt csa exon 1763529 1763655 0.984 + . Parent=mRNA221 III gt cds CDS 1763643 1763655 . + 0 ID=CDS169;Parent=mRNA221 III gt cds CDS 1764575 1764795 . + 2 ID=CDS169;Parent=mRNA221 III gt csa exon 1764575 1764816 0.996 + . Parent=mRNA221 ### III gt csa gene 1763606 1764825 . - . ID=gene149 III gt csa mRNA 1763606 1764825 . - . ID=mRNA222;Parent=gene149;Target=yk261e7.3 1 300 +,yk411g7.3 1 300 + III gt csa exon 1763606 1763648 1 - . Parent=mRNA222 III gt csa exon 1764567 1764825 0.95 - . Parent=mRNA222 ### III gt csa gene 1771090 1771264 . - . ID=gene150 III gt csa mRNA 1771090 1771264 . - . ID=mRNA223;Parent=gene150;Target=yk581g6.5 186 360 + III gt csa exon 1771090 1771264 0.954 - . Parent=mRNA223 ### III gt csa gene 1772556 1774226 . - . ID=gene151 III gt csa mRNA 1772556 1774226 . - . ID=mRNA224;Parent=gene151;Target=yk1484e10.3 1 505 -,yk655d4.3 1 300 -,yk541b2.3 1 300 -,yk550e12.3 1 300 - III gt csa exon 1772556 1772820 0.943 - . Parent=mRNA224 III gt csa exon 1773987 1774226 0.946 - . Parent=mRNA224 ### III gt csa gene 1775021 1777597 . - . ID=gene152 III gt csa mRNA 1775021 1777406 . - . ID=mRNA225;Parent=gene152;Target=yk543e1.5 1 360 +,yk541b2.5 7 360 + III gt csa exon 1775021 1775112 1 - . Parent=mRNA225 III gt cds CDS 1775023 1775112 . - 0 ID=CDS170;Parent=mRNA225 III gt csa exon 1775494 1775616 0.992 - . Parent=mRNA225 III gt cds CDS 1775494 1775616 . - 0 ID=CDS170;Parent=mRNA225 III gt csa exon 1775887 1775990 1 - . Parent=mRNA225 III gt cds CDS 1775887 1775990 . - 2 ID=CDS170;Parent=mRNA225 III gt csa exon 1777076 1777202 1 - . Parent=mRNA225 III gt cds CDS 1777076 1777202 . - 0 ID=CDS170;Parent=mRNA225 III gt csa exon 1777260 1777406 0.966 - . Parent=mRNA225 III gt cds CDS 1777260 1777406 . - 0 ID=CDS170;Parent=mRNA225 III gt csa mRNA 1775021 1777597 . - . ID=mRNA226;Parent=gene152;Target=yk543e1.5 1 360 +,yk1484e10.5 1 544 +,yk550e12.5 1 380 +,yk618c5.5 1 360 +,yk276b6.5 1 360 +,yk549f11.5 1 359 +,yk655d4.5 1 359 +,yk444c12.5 1 360 +,yk411g1.5 14 360 + III gt csa exon 1775021 1775112 1 - . Parent=mRNA226 III gt cds CDS 1775023 1775112 . - 0 ID=CDS171;Parent=mRNA226 III gt csa exon 1775494 1775616 0.992 - . Parent=mRNA226 III gt cds CDS 1775494 1775616 . - 0 ID=CDS171;Parent=mRNA226 III gt csa exon 1775887 1775990 1 - . Parent=mRNA226 III gt cds CDS 1775887 1775990 . - 2 ID=CDS171;Parent=mRNA226 III gt csa exon 1777076 1777214 1 - . Parent=mRNA226 III gt cds CDS 1777076 1777214 . - 0 ID=CDS171;Parent=mRNA226 III gt csa exon 1777260 1777406 0.993 - . Parent=mRNA226 III gt cds CDS 1777260 1777406 . - 0 ID=CDS171;Parent=mRNA226 III gt cds CDS 1777492 1777512 . - 0 ID=CDS171;Parent=mRNA226 III gt csa exon 1777492 1777597 1 - . Parent=mRNA226 ### III gt csa gene 1777799 1778203 . + . ID=gene153 III gt csa mRNA 1777799 1778203 . + . ID=mRNA227;Parent=gene153;Target=RP 1 41 +,BP 1 41 + III gt csa exon 1777799 1777904 1 + . Parent=mRNA227 III gt csa exon 1778187 1778203 1 + . Parent=mRNA227 ### III gt csa gene 1785208 1785635 . - . ID=gene154 III gt csa mRNA 1785208 1785635 . - . ID=mRNA228;Parent=gene154;Target=yk1303c12.3 24 419 + III gt csa exon 1785208 1785302 0.989 - . Parent=mRNA228 III gt csa exon 1785317 1785531 0.919 - . Parent=mRNA228 III gt csa exon 1785550 1785635 0.988 - . Parent=mRNA228 ### III gt csa gene 1807719 1818322 . - . ID=gene155 III gt csa mRNA 1807719 1809245 . - . ID=mRNA229;Parent=gene155;Target=yk750h11.5 1 183 +,yk1048a06.3 1 538 -,yk872f09.3 1 534 -,yk1102f12.3 1 536 -,yk1354g01.3 1 700 -,yk1490a04.3 1 496 -,yk530e1.3 1 300 -,yk264d2.3 1 300 -,yk501h12.3 1 300 -,yk407d6.3 1 300 - III gt csa exon 1807719 1807889 0.959 - . Parent=mRNA229 III gt cds CDS 1807880 1807889 . - 1 ID=CDS172;Parent=mRNA229 III gt csa exon 1807944 1808358 1 - . Parent=mRNA229 III gt cds CDS 1807944 1808358 . - 2 ID=CDS172;Parent=mRNA229 III gt cds CDS 1809107 1809140 . - 0 ID=CDS172;Parent=mRNA229 III gt csa exon 1809107 1809245 0.953 - . Parent=mRNA229 III gt csa mRNA 1807719 1815816 . - . ID=mRNA230;Parent=gene155;Target=yk750h11.5 1 183 +,yk871f07.3 1 702 -,yk1048a06.3 1 538 -,yk872f09.3 1 534 -,yk1102f12.3 1 536 -,yk1314a11.3 1 729 -,yk1091a04.3 1 689 -,yk1012a09.3 1 682 -,yk1297g02.3 1 682 -,yk1166d10.3 1 717 -,yk1036a09.3 1 696 -,yk1490a04.3 1 496 -,yk530e1.3 1 300 -,yk264d2.3 1 300 -,yk501h12.3 1 300 -,yk407d6.3 1 300 -,yk1755a05.3 1 696 -,WP 1 717 +,yk1048a06.5 1 607 +,yk264d2.5 1 240 +,yk501h12.5 1 375 +,yk407d6.5 1 360 +,yk1091a04.5 1 262 +,yk1755a05.5 1 598 +,yk1036a09.5 11 576 +,yk872f09.5 14 372 +,yk530e1.5 44 360 + III gt csa exon 1807719 1807889 0.959 - . Parent=mRNA230 III gt cds CDS 1807880 1807889 . - 1 ID=CDS173;Parent=mRNA230 III gt csa exon 1807944 1808363 1 - . Parent=mRNA230 III gt cds CDS 1807944 1808363 . - 1 ID=CDS173;Parent=mRNA230 III gt csa exon 1809107 1809381 1 - . Parent=mRNA230 III gt cds CDS 1809107 1809381 . - 0 ID=CDS173;Parent=mRNA230 III gt csa exon 1809679 1809822 1 - . Parent=mRNA230 III gt cds CDS 1809679 1809822 . - 0 ID=CDS173;Parent=mRNA230 III gt csa exon 1811041 1811363 1 - . Parent=mRNA230 III gt cds CDS 1811041 1811363 . - 2 ID=CDS173;Parent=mRNA230 III gt csa exon 1812744 1813091 1 - . Parent=mRNA230 III gt cds CDS 1812744 1813091 . - 2 ID=CDS173;Parent=mRNA230 III gt csa exon 1814386 1814835 1 - . Parent=mRNA230 III gt cds CDS 1814386 1814835 . - 2 ID=CDS173;Parent=mRNA230 III gt cds CDS 1815432 1815438 . - 0 ID=CDS173;Parent=mRNA230 III gt csa exon 1815432 1815557 1 - . Parent=mRNA230 III gt csa exon 1815760 1815816 0.269 - . Parent=mRNA230 III gt csa mRNA 1809707 1818322 . - . ID=mRNA231;Parent=gene155;Target=yk1048a06.5 1 607 +,yk264d2.5 1 240 +,yk501h12.5 1 375 +,yk407d6.5 1 360 +,yk1091a04.5 1 262 +,yk1755a05.5 1 598 +,yk1036a09.5 11 576 +,yk1166d10.5 1 559 +,yk1102f12.5 23 595 +,yk1314a11.5 1 585 +,yk1012a09.5 22 578 +,yk1297g02.5 23 533 +,yk1490a04.5 23 510 +,yk872f09.5 14 372 +,yk530e1.5 44 360 + III gt csa exon 1809707 1809822 0.983 - . Parent=mRNA231 III gt cds CDS 1809709 1809822 . - 0 ID=CDS174;Parent=mRNA231 III gt csa exon 1811041 1811363 1 - . Parent=mRNA231 III gt cds CDS 1811041 1811363 . - 2 ID=CDS174;Parent=mRNA231 III gt csa exon 1812744 1813091 1 - . Parent=mRNA231 III gt cds CDS 1812744 1813091 . - 2 ID=CDS174;Parent=mRNA231 III gt csa exon 1814386 1814835 0.998 - . Parent=mRNA231 III gt cds CDS 1814386 1814835 . - 2 ID=CDS174;Parent=mRNA231 III gt csa exon 1815432 1815557 1 - . Parent=mRNA231 III gt cds CDS 1815432 1815557 . - 2 ID=CDS174;Parent=mRNA231 III gt cds CDS 1818254 1818308 . - 0 ID=CDS174;Parent=mRNA231 III gt csa exon 1818254 1818322 0.906 - . Parent=mRNA231 ### III gt csa gene 1807745 1807902 . + . ID=gene156 III gt csa mRNA 1807745 1807902 . + . ID=mRNA232;Parent=gene156;Target=yk750h11.3 1 157 + III gt csa exon 1807745 1807902 0.968 + . Parent=mRNA232 ### III gt csa gene 1821203 1824103 . - . ID=gene157 III gt csa mRNA 1821203 1822732 . - . ID=mRNA233;Parent=gene157;Target=yk305g9.3 1 300 -,yk383c1.3 1 300 -,yk412f9.3 1 300 -,yk665f3.3 1 300 -,yk383c1.5 1 360 + III gt csa exon 1821203 1821412 1 - . Parent=mRNA233 III gt cds CDS 1821204 1821412 . - 2 ID=CDS175;Parent=mRNA233 III gt csa exon 1821473 1821557 1 - . Parent=mRNA233 III gt cds CDS 1821473 1821557 . - 0 ID=CDS175;Parent=mRNA233 III gt cds CDS 1821604 1821675 . - 0 ID=CDS175;Parent=mRNA233 III gt csa exon 1821604 1821711 1 - . Parent=mRNA233 III gt csa exon 1822654 1822732 1 - . Parent=mRNA233 III gt csa mRNA 1822859 1824103 . - . ID=mRNA234;Parent=gene157;Target=yk665f3.5 1 377 +,yk305g9.5 1 376 + III gt csa exon 1822859 1823006 1 - . Parent=mRNA234 III gt cds CDS 1822861 1823006 . - 2 ID=CDS176;Parent=mRNA234 III gt csa exon 1823643 1823760 1 - . Parent=mRNA234 III gt cds CDS 1823643 1823760 . - 0 ID=CDS176;Parent=mRNA234 III gt cds CDS 1823964 1824047 . - 0 ID=CDS176;Parent=mRNA234 III gt csa exon 1823964 1824103 1 - . Parent=mRNA234 ### III gt csa gene 1824908 1831849 . + . ID=gene158 III gt csa mRNA 1824908 1831849 . + . ID=mRNA235;Parent=gene158;Target=yk1471g06.5 23 598 + III gt csa exon 1824908 1824965 1 + . Parent=mRNA235 III gt cds CDS 1824915 1824965 . + 0 ID=CDS177;Parent=mRNA235 III gt csa exon 1825145 1825214 1 + . Parent=mRNA235 III gt cds CDS 1825145 1825214 . + 0 ID=CDS177;Parent=mRNA235 III gt csa exon 1827228 1827355 1 + . Parent=mRNA235 III gt cds CDS 1827228 1827355 . + 2 ID=CDS177;Parent=mRNA235 III gt csa exon 1830455 1830596 1 + . Parent=mRNA235 III gt cds CDS 1830455 1830596 . + 0 ID=CDS177;Parent=mRNA235 III gt csa exon 1830776 1830907 1 + . Parent=mRNA235 III gt cds CDS 1830776 1830907 . + 2 ID=CDS177;Parent=mRNA235 III gt cds CDS 1831804 1831847 . + 2 ID=CDS177;Parent=mRNA235 III gt csa exon 1831804 1831849 1 + . Parent=mRNA235 III gt csa mRNA 1824936 1827299 . + . ID=mRNA236;Parent=gene158;Target=yk428b11.5 1 360 + III gt csa exon 1824936 1824965 0.85 + . Parent=mRNA236 III gt csa exon 1825145 1825400 0.963 + . Parent=mRNA236 III gt csa exon 1827228 1827299 0.986 + . Parent=mRNA236 ### III gt csa gene 1833860 1834336 . - . ID=gene159 III gt csa mRNA 1833860 1834336 . - . ID=mRNA237;Parent=gene159;Target=yk1471g06.3 1 477 +,yk428b11.3 1 180 + III gt csa exon 1833860 1834336 0.918 - . Parent=mRNA237 ### III gt csa gene 1834502 1842946 . + . ID=gene160 III gt csa mRNA 1834502 1842946 . + . ID=mRNA238;Parent=gene160;Target=yk1579g04.5 24 347 +,yk392a4.5 7 371 +,yk1171d07.5 23 574 +,yk1521f03.5 23 574 +,yk1520e11.5 23 587 +,yk1537h08.5 23 589 +,yk614f12.5 1 360 +,yk273b4.5 1 360 +,yk1094h04.5 1 598 +,yk93h5.5 1 292 +,yk1521e10.5 1 446 +,yk460h8.5 1 360 +,yk240e10.5 1 374 +,yk163b1.5 2 360 +,yk14g9.5 1 360 + III gt csa exon 1834502 1834595 1 + . Parent=mRNA238 III gt cds CDS 1834509 1834595 . + 0 ID=CDS178;Parent=mRNA238 III gt csa exon 1836122 1836195 1 + . Parent=mRNA238 III gt cds CDS 1836122 1836195 . + 0 ID=CDS178;Parent=mRNA238 III gt csa exon 1836253 1836355 1 + . Parent=mRNA238 III gt cds CDS 1836253 1836355 . + 1 ID=CDS178;Parent=mRNA238 III gt csa exon 1837108 1837249 1 + . Parent=mRNA238 III gt cds CDS 1837108 1837249 . + 0 ID=CDS178;Parent=mRNA238 III gt csa exon 1838335 1838703 1 + . Parent=mRNA238 III gt cds CDS 1838335 1838703 . + 2 ID=CDS178;Parent=mRNA238 III gt csa exon 1838765 1838877 1 + . Parent=mRNA238 III gt cds CDS 1838765 1838877 . + 2 ID=CDS178;Parent=mRNA238 III gt csa exon 1840158 1840486 0.988 + . Parent=mRNA238 III gt cds CDS 1840158 1840486 . + 0 ID=CDS178;Parent=mRNA238 III gt csa exon 1841743 1841899 0.987 + . Parent=mRNA238 III gt cds CDS 1841743 1841899 . + 1 ID=CDS178;Parent=mRNA238 III gt cds CDS 1842859 1842945 . + 0 ID=CDS178;Parent=mRNA238 III gt csa exon 1842859 1842946 0.966 + . Parent=mRNA238 ### III gt csa gene 1844378 1846728 . + . ID=gene161 III gt csa mRNA 1844378 1846728 . + . ID=mRNA239;Parent=gene161;Target=yk1520e11.3 1 527 -,yk1521e10.3 1 432 -,yk1171d07.3 1 410 - III gt csa exon 1844378 1844512 0.904 + . Parent=mRNA239 III gt csa exon 1846336 1846728 0.919 + . Parent=mRNA239 III gt cds CDS 1846377 1846622 . + 0 ID=CDS179;Parent=mRNA239 ### III gt csa gene 1846366 1846740 . - . ID=gene162 III gt csa mRNA 1846366 1846740 . - . ID=mRNA240;Parent=gene162;Target=yk1094h04.3 1 361 +,yk14g9.3 1 373 +,yk1537h08.3 1 247 +,yk1521f03.3 1 204 +,yk1579g04.3 1 199 +,yk93h5.3 1 120 + III gt csa exon 1846366 1846740 0.965 - . Parent=mRNA240 ### III gt csa gene 1849052 1852447 . + . ID=gene163 III gt csa mRNA 1849052 1850827 . + . ID=mRNA241;Parent=gene163;Target=yk532h6.5 1 381 +,yk332d10.5 1 360 +,yk506e3.5 1 383 +,yk174g9.5 1 360 +,yk521e8.5 1 360 + III gt csa exon 1849052 1849121 0.964 + . Parent=mRNA241 III gt cds CDS 1849071 1849121 . + 0 ID=CDS180;Parent=mRNA241 III gt csa exon 1849263 1849349 1 + . Parent=mRNA241 III gt cds CDS 1849263 1849349 . + 0 ID=CDS180;Parent=mRNA241 III gt csa exon 1849404 1849502 1 + . Parent=mRNA241 III gt cds CDS 1849404 1849502 . + 0 ID=CDS180;Parent=mRNA241 III gt csa exon 1850353 1850445 1 + . Parent=mRNA241 III gt cds CDS 1850353 1850445 . + 0 ID=CDS180;Parent=mRNA241 III gt cds CDS 1850707 1850826 . + 0 ID=CDS180;Parent=mRNA241 III gt csa exon 1850707 1850827 1 + . Parent=mRNA241 III gt csa mRNA 1849294 1850837 . + . ID=mRNA242;Parent=gene163;Target=yk487d2.5 1 381 + III gt csa exon 1849294 1849350 0.939 + . Parent=mRNA242 III gt csa exon 1849404 1849502 1 + . Parent=mRNA242 III gt cds CDS 1849425 1849502 . + 0 ID=CDS181;Parent=mRNA242 III gt csa exon 1850353 1850445 1 + . Parent=mRNA242 III gt cds CDS 1850353 1850445 . + 0 ID=CDS181;Parent=mRNA242 III gt cds CDS 1850707 1850835 . + 0 ID=CDS181;Parent=mRNA242 III gt csa exon 1850707 1850837 0.992 + . Parent=mRNA242 III gt csa mRNA 1851033 1852447 . + . ID=mRNA243;Parent=gene163;Target=yk66f12.5 1 360 + III gt csa exon 1851033 1851113 1 + . Parent=mRNA243 III gt cds CDS 1851052 1851113 . + 0 ID=CDS182;Parent=mRNA243 III gt cds CDS 1852169 1852445 . + 1 ID=CDS182;Parent=mRNA243 III gt csa exon 1852169 1852447 0.993 + . Parent=mRNA243 ### III gt csa gene 1852263 1852877 . - . ID=gene164 III gt csa mRNA 1852263 1852562 . - . ID=mRNA244;Parent=gene164;Target=yk334d11.3 1 300 + III gt csa exon 1852263 1852562 0.997 - . Parent=mRNA244 III gt csa mRNA 1852697 1852877 . - . ID=mRNA245;Parent=gene164;Target=yk66f12.3 1 180 + III gt csa exon 1852697 1852877 0.925 - . Parent=mRNA245 ### III gt csa gene 1859880 1864478 . + . ID=gene165 III gt csa mRNA 1859880 1860325 . + . ID=mRNA246;Parent=gene165;Target=yk521e3.3 1 281 -,AF150086 1 252 +,RP 1 84 +,BP 1 84 +,yk521e3.5 1 337 + III gt csa exon 1859880 1860055 0.983 + . Parent=mRNA246 III gt cds CDS 1859882 1860055 . + 0 ID=CDS183;Parent=mRNA246 III gt cds CDS 1860146 1860223 . + 0 ID=CDS183;Parent=mRNA246 III gt csa exon 1860146 1860325 0.961 + . Parent=mRNA246 III gt csa mRNA 1860418 1864478 . + . ID=mRNA247;Parent=gene165;Target=yk1220d04.5 23 647 +,yk772h10.5 21 646 + III gt csa exon 1860418 1860607 1 + . Parent=mRNA247 III gt cds CDS 1860427 1860607 . + 0 ID=CDS184;Parent=mRNA247 III gt csa exon 1861659 1861816 1 + . Parent=mRNA247 III gt cds CDS 1861659 1861816 . + 2 ID=CDS184;Parent=mRNA247 III gt csa exon 1864021 1864120 1 + . Parent=mRNA247 III gt cds CDS 1864021 1864120 . + 0 ID=CDS184;Parent=mRNA247 III gt cds CDS 1864301 1864476 . + 2 ID=CDS184;Parent=mRNA247 III gt csa exon 1864301 1864478 1 + . Parent=mRNA247 ### III gt csa gene 1872178 1874286 . + . ID=gene166 III gt csa mRNA 1872178 1874286 . + . ID=mRNA248;Parent=gene166;Target=yk1220d04.3 1 668 - III gt csa exon 1872178 1872266 1 + . Parent=mRNA248 III gt cds CDS 1872221 1872266 . + 0 ID=CDS185;Parent=mRNA248 III gt cds CDS 1873707 1874068 . + 2 ID=CDS185;Parent=mRNA248 III gt csa exon 1873707 1874286 0.988 + . Parent=mRNA248 ### III gt csa gene 1874643 1877104 . + . ID=gene167 III gt csa mRNA 1874643 1877104 . + . ID=mRNA249;Parent=gene167;Target=yk772h10.3 1 592 - III gt csa exon 1874643 1874750 1 + . Parent=mRNA249 III gt cds CDS 1874715 1874750 . + 0 ID=CDS186;Parent=mRNA249 III gt csa exon 1875972 1876159 0.995 + . Parent=mRNA249 III gt cds CDS 1875972 1876159 . + 0 ID=CDS186;Parent=mRNA249 III gt cds CDS 1876806 1876989 . + 1 ID=CDS186;Parent=mRNA249 III gt csa exon 1876806 1877104 0.983 + . Parent=mRNA249 ### III gt csa gene 1878354 1880837 . + . ID=gene168 III gt csa mRNA 1878354 1880828 . + . ID=mRNA250;Parent=gene168;Target=yk1169f09.5 20 395 +,yk1473c02.3 1 783 -,yk1169f09.3 1 705 - III gt csa exon 1878354 1878595 0.996 + . Parent=mRNA250 III gt cds CDS 1878362 1878595 . + 0 ID=CDS187;Parent=mRNA250 III gt csa exon 1879233 1879361 1 + . Parent=mRNA250 III gt cds CDS 1879233 1879361 . + 0 ID=CDS187;Parent=mRNA250 III gt csa exon 1879426 1879560 1 + . Parent=mRNA250 III gt cds CDS 1879426 1879560 . + 0 ID=CDS187;Parent=mRNA250 III gt csa exon 1880174 1880328 1 + . Parent=mRNA250 III gt cds CDS 1880174 1880328 . + 0 ID=CDS187;Parent=mRNA250 III gt cds CDS 1880625 1880736 . + 1 ID=CDS187;Parent=mRNA250 III gt csa exon 1880625 1880828 1 + . Parent=mRNA250 III gt csa mRNA 1878558 1878800 . + . ID=mRNA251;Parent=gene168;Target=yk1251d11.5 1 243 + III gt csa exon 1878558 1878800 0.988 + . Parent=mRNA251 III gt csa mRNA 1879975 1880837 . + . ID=mRNA252;Parent=gene168;Target=yk1512g12.3 1 565 - III gt csa exon 1879975 1880328 1 + . Parent=mRNA252 III gt csa exon 1880625 1880837 0.991 + . Parent=mRNA252 ### III gt csa gene 1880375 1880798 . - . ID=gene169 III gt csa mRNA 1880375 1880798 . - . ID=mRNA253;Parent=gene169;Target=yk1251d11.3 1 424 + III gt csa exon 1880375 1880798 0.979 - . Parent=mRNA253 ### III gt csa gene 1883596 1886207 . - . ID=gene170 III gt csa mRNA 1883596 1886207 . - . ID=mRNA254;Parent=gene170;Target=WP 1 773 + III gt csa exon 1883596 1884789 1 - . Parent=mRNA254 III gt cds CDS 1883596 1884789 . - 0 ID=CDS188;Parent=mRNA254 III gt csa exon 1884882 1885107 1 - . Parent=mRNA254 III gt cds CDS 1884882 1885107 . - 1 ID=CDS188;Parent=mRNA254 III gt csa exon 1885194 1885938 1 - . Parent=mRNA254 III gt cds CDS 1885194 1885938 . - 2 ID=CDS188;Parent=mRNA254 III gt csa exon 1885987 1886117 1 - . Parent=mRNA254 III gt cds CDS 1885987 1886117 . - 1 ID=CDS188;Parent=mRNA254 III gt csa exon 1886185 1886207 1 - . Parent=mRNA254 III gt cds CDS 1886185 1886207 . - 0 ID=CDS188;Parent=mRNA254 ### III gt csa gene 1891444 1893894 . - . ID=gene171 III gt csa mRNA 1891444 1893894 . - . ID=mRNA255;Parent=gene171;Target=yk233a7.3 1 300 -,yk233a7.5 1 345 + III gt csa exon 1891444 1891508 1 - . Parent=mRNA255 III gt cds CDS 1891446 1891508 . - 0 ID=CDS189;Parent=mRNA255 III gt csa exon 1891927 1892079 0.993 - . Parent=mRNA255 III gt cds CDS 1891927 1892079 . - 0 ID=CDS189;Parent=mRNA255 III gt csa exon 1893273 1893544 0.969 - . Parent=mRNA255 III gt cds CDS 1893273 1893544 . - 2 ID=CDS189;Parent=mRNA255 III gt cds CDS 1893825 1893831 . - 0 ID=CDS189;Parent=mRNA255 III gt csa exon 1893825 1893894 0.929 - . Parent=mRNA255 ### III gt csa gene 1906128 1906538 . + . ID=gene172 III gt csa mRNA 1906128 1906538 . + . ID=mRNA256;Parent=gene172;Target=yk1723c04.5 1 340 + III gt csa exon 1906128 1906256 0.953 + . Parent=mRNA256 III gt csa exon 1906330 1906538 0.967 + . Parent=mRNA256 ### III gt csa gene 1907887 1910519 . + . ID=gene173 III gt csa mRNA 1907887 1910519 . + . ID=mRNA257;Parent=gene173;Target=yk1723c04.3 1 651 - III gt csa exon 1907887 1907987 0.901 + . Parent=mRNA257 III gt cds CDS 1907889 1907987 . + 0 ID=CDS190;Parent=mRNA257 III gt csa exon 1908176 1908310 1 + . Parent=mRNA257 III gt cds CDS 1908176 1908310 . + 0 ID=CDS190;Parent=mRNA257 III gt csa exon 1909274 1909432 1 + . Parent=mRNA257 III gt cds CDS 1909274 1909432 . + 0 ID=CDS190;Parent=mRNA257 III gt csa exon 1910268 1910519 1 + . Parent=mRNA257 III gt cds CDS 1910268 1910519 . + 0 ID=CDS190;Parent=mRNA257 ### III gt csa gene 1927666 1929298 . + . ID=gene174 III gt csa mRNA 1927666 1929298 . + . ID=mRNA258;Parent=gene174;Target=yk1053g10.5 17 224 +,yk1716g06.5 1 386 + III gt csa exon 1927666 1927938 1 + . Parent=mRNA258 III gt csa exon 1929095 1929298 0.995 + . Parent=mRNA258 ### III gt csa gene 1930845 1931242 . + . ID=gene175 III gt csa mRNA 1930845 1931242 . + . ID=mRNA259;Parent=gene175;Target=yk1564h09.5 1 398 + III gt csa exon 1930845 1931242 0.985 + . Parent=mRNA259 ### III gt csa gene 1932215 1939546 . + . ID=gene176 III gt csa mRNA 1932215 1939375 . + . ID=mRNA260;Parent=gene176;Target=yk1222g11.5 1 557 +,yk652e1.5 1 383 +,yk205e6.5 1 373 +,yk677h7.5 1 354 +,yk638h1.5 1 360 +,yk205h4.5 1 360 +,yk252c12.3 1 300 + III gt csa exon 1932215 1932363 1 + . Parent=mRNA260 III gt csa exon 1934173 1934512 1 + . Parent=mRNA260 III gt cds CDS 1934393 1934512 . + 0 ID=CDS191;Parent=mRNA260 III gt csa exon 1936356 1936529 1 + . Parent=mRNA260 III gt cds CDS 1936356 1936529 . + 0 ID=CDS191;Parent=mRNA260 III gt csa exon 1937670 1938089 1 + . Parent=mRNA260 III gt cds CDS 1937670 1938089 . + 0 ID=CDS191;Parent=mRNA260 III gt cds CDS 1939008 1939319 . + 0 ID=CDS191;Parent=mRNA260 III gt csa exon 1939008 1939375 0.983 + . Parent=mRNA260 III gt csa mRNA 1934173 1939534 . + . ID=mRNA261;Parent=gene176;Target=yk1716g06.3 35 413 - III gt csa exon 1934173 1934226 0.87 + . Parent=mRNA261 III gt csa exon 1939167 1939225 0.814 + . Parent=mRNA261 III gt csa exon 1939269 1939534 0.94 + . Parent=mRNA261 III gt csa mRNA 1938000 1939546 . + . ID=mRNA262;Parent=gene176;Target=yk1596d03.3 1 585 -,yk252c12.3 1 300 + III gt csa exon 1938000 1938047 0.833 + . Parent=mRNA262 III gt csa exon 1939008 1939546 0.954 + . Parent=mRNA262 III gt csa mRNA 1938966 1939375 . + . ID=mRNA263;Parent=gene176;Target=yk440d6.5 1 360 +,yk252c12.3 1 300 + III gt csa exon 1938966 1939375 0.983 + . Parent=mRNA263 ### III gt csa gene 1939092 1943594 . - . ID=gene177 III gt csa mRNA 1939092 1939557 . - . ID=mRNA264;Parent=gene177;Target=yk864f11.3 1 360 +,CEESA81F 1 359 +,yk1618b12.3 1 264 +,yk1222g11.3 1 206 + III gt csa exon 1939092 1939557 0.969 - . Parent=mRNA264 III gt csa mRNA 1939558 1943594 . - . ID=mRNA265;Parent=gene177;Target=yk95d7.3 1 326 -,yk410b4.3 1 300 -,yk410b4.5 1 360 +,yk95d7.5 1 309 +,yk56h1.5 1 292 + III gt csa exon 1939558 1939643 1 - . Parent=mRNA265 III gt cds CDS 1939572 1939643 . - 0 ID=CDS192;Parent=mRNA265 III gt csa exon 1940648 1940818 1 - . Parent=mRNA265 III gt cds CDS 1940648 1940818 . - 0 ID=CDS192;Parent=mRNA265 III gt csa exon 1941527 1941644 1 - . Parent=mRNA265 III gt cds CDS 1941527 1941644 . - 1 ID=CDS192;Parent=mRNA265 III gt csa exon 1941693 1941742 1 - . Parent=mRNA265 III gt cds CDS 1941693 1941742 . - 0 ID=CDS192;Parent=mRNA265 III gt cds CDS 1943454 1943513 . - 0 ID=CDS192;Parent=mRNA265 III gt csa exon 1943454 1943594 1 - . Parent=mRNA265 ### III gt csa gene 1945109 1961934 . - . ID=gene178 III gt csa mRNA 1945109 1950246 . - . ID=mRNA266;Parent=gene178;Target=AB244413 1 1755 +,yk604a10.3 1 300 -,yk411e9.3 1 300 -,cm12f1.5 1 418 +,yk411e9.5 1 360 +,yk604a10.5 1 360 + III gt csa exon 1945109 1945261 1 - . Parent=mRNA266 III gt cds CDS 1945109 1945261 . - 0 ID=CDS193;Parent=mRNA266 III gt csa exon 1946058 1946234 1 - . Parent=mRNA266 III gt cds CDS 1946058 1946234 . - 0 ID=CDS193;Parent=mRNA266 III gt csa exon 1946292 1946488 1 - . Parent=mRNA266 III gt cds CDS 1946292 1946488 . - 2 ID=CDS193;Parent=mRNA266 III gt csa exon 1947633 1948044 1 - . Parent=mRNA266 III gt cds CDS 1947633 1948044 . - 0 ID=CDS193;Parent=mRNA266 III gt csa exon 1948959 1949134 1 - . Parent=mRNA266 III gt cds CDS 1948959 1949134 . - 2 ID=CDS193;Parent=mRNA266 III gt csa exon 1949218 1949422 1 - . Parent=mRNA266 III gt cds CDS 1949218 1949422 . - 0 ID=CDS193;Parent=mRNA266 III gt csa exon 1949713 1949872 1 - . Parent=mRNA266 III gt cds CDS 1949713 1949872 . - 1 ID=CDS193;Parent=mRNA266 III gt csa exon 1949921 1950067 1 - . Parent=mRNA266 III gt cds CDS 1949921 1950067 . - 1 ID=CDS193;Parent=mRNA266 III gt csa exon 1950119 1950246 1 - . Parent=mRNA266 III gt cds CDS 1950119 1950246 . - 0 ID=CDS193;Parent=mRNA266 III gt csa mRNA 1951049 1951408 . - . ID=mRNA267;Parent=gene178;Target=yk492f11.3 1 300 +,yk453a11.3 1 300 +,yk199f2.3 1 300 +,yk558h2.3 1 300 +,yk281d11.3 1 300 +,yk278c2.3 1 300 +,yk229f4.3 1 300 +,yk483c3.3 1 300 +,yk615h4.3 1 300 +,yk647d12.3 1 300 +,yk448f2.3 1 283 +,yk551b11.3 1 284 +,yk448c12.3 1 289 +,yk457d7.3 1 293 +,yk446a5.3 1 300 +,yk664b3.3 1 300 +,yk602c4.3 1 285 +,yk253d3.3 1 287 +,yk516c9.3 1 288 +,yk645g1.3 1 288 +,yk646a8.3 1 288 +,yk140h11.3 1 289 +,yk116e3.3 1 338 +,yk60a11.3 1 336 +,yk497d11.3 1 269 +,yk330h9.3 1 270 +,yk800a07.3 1 300 +,yk494c8.3 1 240 +,yk373f11.3 1 240 +,yk222d9.3 1 227 + III gt csa exon 1951049 1951408 0.991 - . Parent=mRNA267 III gt csa mRNA 1952007 1961934 . - . ID=mRNA268;Parent=gene178;Target=yk1042c08.3 1 509 -,yk1611f05.3 1 724 -,yk1039c09.3 1 700 -,yk1339d07.3 1 770 -,yk1391f02.3 1 685 -,yk1444h05.3 1 727 -,yk1720g01.3 1 727 -,yk1372c05.3 1 768 -,yk1372c06.3 1 792 -,yk837g07.3 1 699 -,yk1474e07.3 1 717 -,yk63f12.3 1 325 -,yk1618b03.3 1 688 -,yk1672e09.3 1 756 -,yk1483a12.3 1 757 -,yk1556a02.3 1 756 -,yk1592b08.3 1 737 -,yk1755g08.3 1 759 -,yk376f5.3 1 300 -,yk312g4.3 1 300 -,yk474e3.3 1 300 -,yk603e10.3 1 300 -,yk470a7.3 1 300 -,yk453c10.3 1 300 -,yk645b1.3 1 300 -,yk577a10.3 1 300 -,yk163e8.3 1 300 -,yk142b8.3 1 300 -,yk187h9.3 1 300 -,yk740a4.3 1 300 -,yk520b2.5 1 358 +,yk577a10.5 1 360 +,yk1703a04.5 1 564 +,yk163e8.5 1 360 +,yk474e3.5 1 360 +,yk1672e09.5 15 652 +,yk1556a02.5 17 620 +,yk470a7.5 1 360 +,yk1339d07.5 23 658 +,yk1042c08.5 23 622 +,yk1660c12.5 23 621 +,yk1474e07.5 24 621 +,yk1618b03.5 23 619 +,yk1720g01.5 22 616 +,yk1611f05.5 23 616 +,yk1755g08.5 23 611 +,yk1444h05.5 23 606 +,yk1039c09.5 23 597 +,yk1592b08.5 23 595 +,yk1654a06.5 23 578 +,yk773f01.5 23 532 +,yk1483a12.5 23 518 +,yk645b1.5 1 383 +,yk603e10.5 1 382 +,yk228a2.5 1 360 +,yk312g4.5 1 372 +,yk837g07.5 1 376 +,yk376f5.5 1 360 +,yk453c10.5 1 360 +,yk142b8.5 1 372 +,yk63f12.5 1 320 +,yk740a4.5 23 340 +,yk187h9.5 1 240 +,yk1391f02.5 23 218 + III gt csa exon 1952007 1952267 0.99 - . Parent=mRNA268 III gt cds CDS 1952124 1952267 . - 0 ID=CDS194;Parent=mRNA268 III gt csa exon 1953525 1953831 1 - . Parent=mRNA268 III gt cds CDS 1953525 1953831 . - 1 ID=CDS194;Parent=mRNA268 III gt csa exon 1954624 1954728 1 - . Parent=mRNA268 III gt cds CDS 1954624 1954728 . - 1 ID=CDS194;Parent=mRNA268 III gt csa exon 1956031 1956288 0.971 - . Parent=mRNA268 III gt cds CDS 1956031 1956288 . - 1 ID=CDS194;Parent=mRNA268 III gt csa exon 1957574 1957668 1 - . Parent=mRNA268 III gt cds CDS 1957574 1957668 . - 0 ID=CDS194;Parent=mRNA268 III gt csa exon 1957716 1957848 1 - . Parent=mRNA268 III gt cds CDS 1957716 1957848 . - 1 ID=CDS194;Parent=mRNA268 III gt csa exon 1959816 1960116 1 - . Parent=mRNA268 III gt cds CDS 1959816 1960116 . - 2 ID=CDS194;Parent=mRNA268 III gt cds CDS 1961827 1961905 . - 0 ID=CDS194;Parent=mRNA268 III gt csa exon 1961827 1961934 1 - . Parent=mRNA268 III gt csa mRNA 1952007 1961934 . - . ID=mRNA269;Parent=gene178;Target=yk1042c08.3 1 509 -,yk63f12.3 1 325 -,yk376f5.3 1 300 -,yk312g4.3 1 300 -,yk474e3.3 1 300 -,yk603e10.3 1 300 -,yk470a7.3 1 300 -,yk453c10.3 1 300 -,yk645b1.3 1 300 -,yk577a10.3 1 300 -,yk163e8.3 1 300 -,yk142b8.3 1 300 -,yk187h9.3 1 300 -,yk740a4.3 1 300 -,BP 1 492 +,yk520b2.5 1 358 +,yk577a10.5 1 360 +,yk163e8.5 1 360 +,yk474e3.5 1 360 +,yk1672e09.5 15 652 +,yk1556a02.5 17 620 +,yk470a7.5 1 360 +,yk1339d07.5 23 658 +,yk1042c08.5 23 622 +,yk1660c12.5 23 621 +,yk1474e07.5 24 621 +,yk1618b03.5 23 619 +,yk1720g01.5 22 616 +,yk1611f05.5 23 616 +,yk1755g08.5 23 611 +,yk1444h05.5 23 606 +,yk1039c09.5 23 597 +,yk1592b08.5 23 595 +,yk1654a06.5 23 578 +,yk773f01.5 23 532 +,yk1483a12.5 23 518 +,yk645b1.5 1 383 +,yk603e10.5 1 382 +,yk228a2.5 1 360 +,yk312g4.5 1 372 +,yk837g07.5 1 376 +,yk376f5.5 1 360 +,yk453c10.5 1 360 +,yk142b8.5 1 372 +,yk63f12.5 1 320 +,yk740a4.5 23 340 +,yk187h9.5 1 240 +,yk1391f02.5 23 218 + III gt csa exon 1952007 1952267 0.99 - . Parent=mRNA269 III gt csa exon 1953525 1953878 0.832 - . Parent=mRNA269 III gt cds CDS 1953779 1953878 . - 1 ID=CDS195;Parent=mRNA269 III gt csa exon 1954624 1954728 0.987 - . Parent=mRNA269 III gt cds CDS 1954624 1954728 . - 1 ID=CDS195;Parent=mRNA269 III gt csa exon 1956031 1956288 0.913 - . Parent=mRNA269 III gt cds CDS 1956031 1956288 . - 1 ID=CDS195;Parent=mRNA269 III gt csa exon 1957574 1957668 1 - . Parent=mRNA269 III gt cds CDS 1957574 1957668 . - 0 ID=CDS195;Parent=mRNA269 III gt csa exon 1957716 1957848 1 - . Parent=mRNA269 III gt cds CDS 1957716 1957848 . - 1 ID=CDS195;Parent=mRNA269 III gt csa exon 1959816 1960116 1 - . Parent=mRNA269 III gt cds CDS 1959816 1960116 . - 2 ID=CDS195;Parent=mRNA269 III gt cds CDS 1961827 1961905 . - 0 ID=CDS195;Parent=mRNA269 III gt csa exon 1961827 1961934 1 - . Parent=mRNA269 III gt csa mRNA 1952017 1961934 . - . ID=mRNA270;Parent=gene178;Target=yk1660c12.3 1 703 -,yk63f12.3 1 325 -,yk376f5.3 1 300 -,yk312g4.3 1 300 -,yk474e3.3 1 300 -,yk603e10.3 1 300 -,yk470a7.3 1 300 -,yk453c10.3 1 300 -,yk645b1.3 1 300 -,yk577a10.3 1 300 -,yk163e8.3 1 300 -,yk142b8.3 1 300 -,yk187h9.3 1 300 -,yk740a4.3 1 300 -,yk520b2.5 1 358 +,yk163e8.5 1 360 +,yk474e3.5 1 360 +,yk1672e09.5 15 652 +,yk1556a02.5 17 620 +,yk470a7.5 1 360 +,yk1339d07.5 23 658 +,yk1042c08.5 23 622 +,yk1660c12.5 23 621 +,yk1474e07.5 24 621 +,yk1618b03.5 23 619 +,yk1720g01.5 22 616 +,yk1611f05.5 23 616 +,yk1755g08.5 23 611 +,yk1444h05.5 23 606 +,yk1039c09.5 23 597 +,yk1592b08.5 23 595 +,yk1654a06.5 23 578 +,yk773f01.5 23 532 +,yk1483a12.5 23 518 +,yk645b1.5 1 383 +,yk603e10.5 1 382 +,yk228a2.5 1 360 +,yk312g4.5 1 372 +,yk837g07.5 1 376 +,yk376f5.5 1 360 +,yk453c10.5 1 360 +,yk142b8.5 1 372 +,yk63f12.5 1 320 +,yk740a4.5 23 340 +,yk187h9.5 1 240 +,yk1391f02.5 23 218 + III gt csa exon 1952017 1952267 0.996 - . Parent=mRNA270 III gt csa exon 1953525 1953758 1 - . Parent=mRNA270 III gt cds CDS 1953712 1953758 . - 2 ID=CDS196;Parent=mRNA270 III gt csa exon 1954640 1954728 1 - . Parent=mRNA270 III gt cds CDS 1954640 1954728 . - 1 ID=CDS196;Parent=mRNA270 III gt csa exon 1956031 1956288 0.971 - . Parent=mRNA270 III gt cds CDS 1956031 1956288 . - 1 ID=CDS196;Parent=mRNA270 III gt csa exon 1957574 1957668 1 - . Parent=mRNA270 III gt cds CDS 1957574 1957668 . - 0 ID=CDS196;Parent=mRNA270 III gt csa exon 1957716 1957848 1 - . Parent=mRNA270 III gt cds CDS 1957716 1957848 . - 1 ID=CDS196;Parent=mRNA270 III gt csa exon 1959816 1960116 1 - . Parent=mRNA270 III gt cds CDS 1959816 1960116 . - 2 ID=CDS196;Parent=mRNA270 III gt cds CDS 1961827 1961905 . - 0 ID=CDS196;Parent=mRNA270 III gt csa exon 1961827 1961934 1 - . Parent=mRNA270 III gt csa mRNA 1953222 1956293 . - . ID=mRNA271;Parent=gene178;Target=RP 1 244 +,yk1703a04.5 1 564 + III gt csa exon 1953222 1953278 0.12 - . Parent=mRNA271 III gt cds CDS 1953273 1953278 . - 0 ID=CDS197;Parent=mRNA271 III gt csa exon 1953525 1953831 0.944 - . Parent=mRNA271 III gt cds CDS 1953525 1953831 . - 1 ID=CDS197;Parent=mRNA271 III gt csa exon 1954624 1954728 1 - . Parent=mRNA271 III gt cds CDS 1954624 1954728 . - 1 ID=CDS197;Parent=mRNA271 III gt cds CDS 1956031 1956245 . - 0 ID=CDS197;Parent=mRNA271 III gt csa exon 1956031 1956293 0.883 - . Parent=mRNA271 III gt csa mRNA 1959320 1959824 . - . ID=mRNA272;Parent=gene178;Target=yk1245c12.5 1 503 + III gt csa exon 1959320 1959824 0.994 - . Parent=mRNA272 ### III gt csa gene 1950524 1952513 . + . ID=gene179 III gt csa mRNA 1950524 1951426 . + . ID=mRNA273;Parent=gene179;Target=yk1454g11.3 198 646 -,yk1066a07.3 236 686 -,yk1507e02.3 254 710 -,yk1678d01.3 237 693 -,yk1370c12.3 200 660 -,yk1370d03.3 236 711 -,yk1479a03.3 200 674 -,yk1537d05.3 202 677 -,yk1327d02.3 262 742 -,yk457d7.5 1 376 +,yk602c4.5 1 372 +,yk664b3.5 1 376 +,yk647d12.5 1 383 +,yk229f4.5 1 374 +,yk1020a05.3 1 468 -,yk1020a05.5 1 481 +,yk1016a08.3 23 271 -,yk116e3.5 1 360 +,yk1064e06.3 23 443 -,yk1151e09.3 23 447 -,yk1580b09.3 23 449 -,yk1587h09.3 35 461 -,yk1594g06.3 23 449 -,yk1362f01.3 23 459 -,yk1393f05.3 23 459 -,yk1521b10.5 23 466 +,yk1521b10.3 23 467 -,yk892h07.5 23 471 +,yk1176h06.3 24 475 -,yk1155e04.3 23 473 -,yk1291e10.3 23 473 -,yk892h07.3 23 473 -,yk1159h09.3 23 473 -,yk1130b02.3 23 485 -,yk1125f08.3 23 485 -,yk1693h02.5 23 487 +,yk1025d03.5 23 490 +,yk1064e06.5 23 495 +,yk1155e04.5 23 496 +,yk1291e10.5 23 496 +,yk1176h06.5 23 496 +,yk1362f01.5 23 496 +,yk1580b09.5 23 496 +,yk1130b02.5 23 498 +,yk1151e09.5 23 498 +,yk1016a08.5 23 498 +,yk1159h09.5 23 498 +,yk1587h09.5 23 498 +,yk1594g06.5 23 498 +,yk1125f08.5 23 499 +,yk1393f05.5 23 499 +,yk199f2.5 1 377 +,yk497d11.5 1 380 +,yk645g1.5 1 375 +,yk483c3.5 1 378 +,yk253d3.5 1 379 +,yk615h4.5 1 376 +,yk281d11.5 1 360 +,yk330h9.5 1 360 +,yk446a5.5 1 377 +,yk498f9.5 1 360 +,yk453a11.5 1 360 +,yk326h8.5 1 360 +,yk140h11.5 1 360 +,yk627c5.5 1 360 +,FLYBASE 1 131 +,BP 1 131 +,RP 1 131 +,yk448c12.5 1 360 +,yk373f11.5 1 360 +,yk60a11.5 1 360 +,SW 1 130 +,yk476f7.5 1 360 +,yk516c9.5 1 360 +,yk448f2.5 1 360 +,yk558h2.5 1 360 +,yk494c8.5 1 360 +,yk492f11.5 1 360 +,yk551b11.5 1 360 +,yk646a8.5 1 360 +,yk278c2.5 1 374 +,yk471g11.5 1 360 -,yk222d9.5 1 302 +,yk814a07.5 1 104 + III gt csa exon 1950524 1950539 0.938 + . Parent=mRNA273 III gt csa exon 1950634 1950760 0.969 + . Parent=mRNA273 III gt cds CDS 1950665 1950760 . + 0 ID=CDS198;Parent=mRNA273 III gt cds CDS 1951062 1951358 . + 0 ID=CDS198;Parent=mRNA273 III gt csa exon 1951062 1951426 0.975 + . Parent=mRNA273 III gt csa mRNA 1950628 1951426 . + . ID=mRNA274;Parent=gene179;Target=yk778a10.5 1 197 +,yk779g10.3 1 447 -,yk1617c03.3 1 461 -,yk1369h11.3 1 472 -,yk1369h11.5 1 479 +,yk1617c03.5 1 493 +,yk890g04.3 1 447 -,yk1010f03.3 1 462 -,yk890g04.5 1 477 +,yk1010f03.5 1 494 +,yk779g10.5 1 495 +,yk1160b11.5 84 440 +,yk1660d01.3 144 579 -,yk1450d10.3 220 663 -,yk1470f08.3 228 671 -,yk1691a10.3 178 621 -,yk1711g11.3 170 613 -,yk1319b02.3 270 730 -,yk1160b11.3 84 545 -,yk457d7.5 1 376 +,yk602c4.5 1 372 +,yk664b3.5 1 376 +,yk647d12.5 1 383 +,yk229f4.5 1 374 +,yk1020a05.3 1 468 -,yk1020a05.5 1 481 +,yk1016a08.3 23 271 -,yk116e3.5 1 360 +,yk1064e06.3 23 443 -,yk1151e09.3 23 447 -,yk1580b09.3 23 449 -,yk1587h09.3 35 461 -,yk1594g06.3 23 449 -,yk1362f01.3 23 459 -,yk1393f05.3 23 459 -,yk1521b10.5 23 466 +,yk1521b10.3 23 467 -,yk892h07.5 23 471 +,yk1176h06.3 24 475 -,yk1155e04.3 23 473 -,yk1291e10.3 23 473 -,yk892h07.3 23 473 -,yk1159h09.3 23 473 -,yk1130b02.3 23 485 -,yk1125f08.3 23 485 -,yk1693h02.5 23 487 +,yk1025d03.5 23 490 +,yk1064e06.5 23 495 +,yk1155e04.5 23 496 +,yk1291e10.5 23 496 +,yk1176h06.5 23 496 +,yk1362f01.5 23 496 +,yk1580b09.5 23 496 +,yk1130b02.5 23 498 +,yk1151e09.5 23 498 +,yk1016a08.5 23 498 +,yk1159h09.5 23 498 +,yk1587h09.5 23 498 +,yk1594g06.5 23 498 +,yk1125f08.5 23 499 +,yk1393f05.5 23 499 +,yk199f2.5 1 377 +,yk497d11.5 1 380 +,yk645g1.5 1 375 +,yk483c3.5 1 378 +,yk253d3.5 1 379 +,yk615h4.5 1 376 +,yk281d11.5 1 360 +,yk330h9.5 1 360 +,yk446a5.5 1 377 +,yk498f9.5 1 360 +,yk453a11.5 1 360 +,yk326h8.5 1 360 +,yk140h11.5 1 360 +,yk627c5.5 1 360 +,FLYBASE 1 131 +,BP 1 131 +,RP 1 131 +,yk448c12.5 1 360 +,yk373f11.5 1 360 +,yk60a11.5 1 360 +,SW 1 130 +,yk476f7.5 1 360 +,yk516c9.5 1 360 +,yk448f2.5 1 360 +,yk558h2.5 1 360 +,yk494c8.5 1 360 +,yk492f11.5 1 360 +,yk551b11.5 1 360 +,yk646a8.5 1 360 +,yk278c2.5 1 374 +,yk471g11.5 1 360 -,yk222d9.5 1 302 +,yk814a07.5 1 104 + III gt csa exon 1950628 1950760 0.947 + . Parent=mRNA274 III gt cds CDS 1950665 1950760 . + 0 ID=CDS199;Parent=mRNA274 III gt cds CDS 1951062 1951358 . + 0 ID=CDS199;Parent=mRNA274 III gt csa exon 1951062 1951426 0.975 + . Parent=mRNA274 III gt csa mRNA 1950628 1951721 . + . ID=mRNA275;Parent=gene179;Target=yk778a10.5 1 197 +,yk779g10.3 1 447 -,yk1617c03.3 1 461 -,yk1369h11.3 1 472 -,yk1369h11.5 1 479 +,yk890g04.3 1 447 -,yk1010f03.3 1 462 -,yk890g04.5 1 477 +,yk1160b11.5 84 440 +,yk1660d01.3 144 579 -,yk1450d10.3 220 663 -,yk1470f08.3 228 671 -,yk1691a10.3 178 621 -,yk1711g11.3 170 613 -,yk1319b02.3 270 730 -,yk1160b11.3 84 545 -,yk457d7.5 1 376 +,yk602c4.5 1 372 +,yk664b3.5 1 376 +,yk647d12.5 1 383 +,yk229f4.5 1 374 +,yk1016a08.3 23 271 -,yk116e3.5 1 360 +,yk1064e06.3 23 443 -,yk1151e09.3 23 447 -,yk1580b09.3 23 449 -,yk1587h09.3 35 461 -,yk1594g06.3 23 449 -,yk1362f01.3 23 459 -,yk1393f05.3 23 459 -,yk1521b10.5 23 466 +,yk1521b10.3 23 467 -,yk892h07.5 23 471 +,yk1176h06.3 24 475 -,yk1155e04.3 23 473 -,yk1291e10.3 23 473 -,yk892h07.3 23 473 -,yk1159h09.3 23 473 -,yk199f2.5 1 377 +,yk497d11.5 1 380 +,yk645g1.5 1 375 +,yk483c3.5 1 378 +,yk253d3.5 1 379 +,yk615h4.5 1 376 +,yk281d11.5 1 360 +,yk330h9.5 1 360 +,yk446a5.5 1 377 +,yk498f9.5 1 360 +,yk453a11.5 1 360 +,yk326h8.5 1 360 +,yk140h11.5 1 360 +,yk627c5.5 1 360 +,FLYBASE 1 131 +,BP 1 131 +,RP 1 131 +,yk448c12.5 1 360 +,yk373f11.5 1 360 +,yk60a11.5 1 360 +,SW 1 130 +,yk476f7.5 1 360 +,yk516c9.5 1 360 +,yk448f2.5 1 360 +,yk558h2.5 1 360 +,yk494c8.5 1 360 +,yk492f11.5 1 360 +,yk551b11.5 1 360 +,yk646a8.5 1 360 +,yk278c2.5 1 374 +,yk471g11.5 1 360 -,CK580762 1 219 + III gt csa exon 1950628 1950760 0.947 + . Parent=mRNA275 III gt cds CDS 1950665 1950760 . + 0 ID=CDS200;Parent=mRNA275 III gt cds CDS 1951062 1951358 . + 0 ID=CDS200;Parent=mRNA275 III gt csa exon 1951062 1951411 0.995 + . Parent=mRNA275 III gt csa exon 1951713 1951721 0.556 + . Parent=mRNA275 III gt csa mRNA 1951519 1952513 . + . ID=mRNA276;Parent=gene179;Target=yk372d12.5 1 375 +,yk372d12.3 1 300 -,yk1703a04.3 1 500 + III gt csa exon 1951519 1951659 0.982 + . Parent=mRNA276 III gt csa exon 1951713 1951829 1 + . Parent=mRNA276 III gt csa exon 1951902 1952513 0.991 + . Parent=mRNA276 ### III gt csa gene 1963554 1970446 . - . ID=gene180 III gt csa mRNA 1963554 1970446 . - . ID=mRNA277;Parent=gene180;Target=yk23e3.3 1 390 -,WP 1 1309 +,yk23e3.5 1 360 + III gt csa exon 1963554 1963898 0.975 - . Parent=mRNA277 III gt cds CDS 1963647 1963898 . - 0 ID=CDS201;Parent=mRNA277 III gt csa exon 1963953 1964107 1 - . Parent=mRNA277 III gt cds CDS 1963953 1964107 . - 2 ID=CDS201;Parent=mRNA277 III gt csa exon 1964993 1965165 1 - . Parent=mRNA277 III gt cds CDS 1964993 1965165 . - 1 ID=CDS201;Parent=mRNA277 III gt csa exon 1966002 1966439 1 - . Parent=mRNA277 III gt cds CDS 1966002 1966439 . - 1 ID=CDS201;Parent=mRNA277 III gt csa exon 1966813 1967020 0.987 - . Parent=mRNA277 III gt cds CDS 1966813 1967020 . - 2 ID=CDS201;Parent=mRNA277 III gt csa exon 1967077 1967198 0.91 - . Parent=mRNA277 III gt cds CDS 1967077 1967198 . - 1 ID=CDS201;Parent=mRNA277 III gt csa exon 1967254 1969663 1 - . Parent=mRNA277 III gt cds CDS 1967254 1969663 . - 2 ID=CDS201;Parent=mRNA277 III gt csa exon 1970232 1970363 1 - . Parent=mRNA277 III gt cds CDS 1970232 1970363 . - 2 ID=CDS201;Parent=mRNA277 III gt csa exon 1970410 1970446 1 - . Parent=mRNA277 III gt cds CDS 1970410 1970446 . - 0 ID=CDS201;Parent=mRNA277 ### III gt csa gene 1971220 1975502 . - . ID=gene181 III gt csa mRNA 1971220 1975502 . - . ID=mRNA278;Parent=gene181;Target=WP 1 1166 + III gt csa exon 1971220 1971570 1 - . Parent=mRNA278 III gt cds CDS 1971220 1971570 . - 0 ID=CDS202;Parent=mRNA278 III gt csa exon 1971619 1971773 1 - . Parent=mRNA278 III gt cds CDS 1971619 1971773 . - 2 ID=CDS202;Parent=mRNA278 III gt csa exon 1971899 1972068 1 - . Parent=mRNA278 III gt cds CDS 1971899 1972068 . - 1 ID=CDS202;Parent=mRNA278 III gt csa exon 1972118 1972501 1 - . Parent=mRNA278 III gt cds CDS 1972118 1972501 . - 1 ID=CDS202;Parent=mRNA278 III gt csa exon 1972550 1972766 1 - . Parent=mRNA278 III gt cds CDS 1972550 1972766 . - 2 ID=CDS202;Parent=mRNA278 III gt csa exon 1973235 1973470 1 - . Parent=mRNA278 III gt cds CDS 1973235 1973470 . - 1 ID=CDS202;Parent=mRNA278 III gt csa exon 1973518 1975502 1 - . Parent=mRNA278 III gt cds CDS 1973518 1975502 . - 0 ID=CDS202;Parent=mRNA278 ### III gt csa gene 1977303 1980450 . + . ID=gene182 III gt csa mRNA 1977303 1980450 . + . ID=mRNA279;Parent=gene182;Target=WP 1 874 + III gt csa exon 1977303 1977441 1 + . Parent=mRNA279 III gt cds CDS 1977303 1977441 . + 0 ID=CDS203;Parent=mRNA279 III gt csa exon 1977492 1977554 1 + . Parent=mRNA279 III gt cds CDS 1977492 1977554 . + 2 ID=CDS203;Parent=mRNA279 III gt csa exon 1977881 1978741 1 + . Parent=mRNA279 III gt cds CDS 1977881 1978741 . + 2 ID=CDS203;Parent=mRNA279 III gt csa exon 1978792 1979883 1 + . Parent=mRNA279 III gt cds CDS 1978792 1979883 . + 2 ID=CDS203;Parent=mRNA279 III gt csa exon 1979937 1980162 1 + . Parent=mRNA279 III gt cds CDS 1979937 1980162 . + 2 ID=CDS203;Parent=mRNA279 III gt csa exon 1980210 1980450 1 + . Parent=mRNA279 III gt cds CDS 1980210 1980450 . + 1 ID=CDS203;Parent=mRNA279 ### III gt csa gene 1980811 1982635 . - . ID=gene183 III gt csa mRNA 1980811 1982635 . - . ID=mRNA280;Parent=gene183;Target=WP 1 324 + III gt csa exon 1980811 1980995 1 - . Parent=mRNA280 III gt cds CDS 1980811 1980995 . - 2 ID=CDS204;Parent=mRNA280 III gt csa exon 1981163 1981517 1 - . Parent=mRNA280 III gt cds CDS 1981163 1981517 . - 0 ID=CDS204;Parent=mRNA280 III gt csa exon 1981877 1982017 1 - . Parent=mRNA280 III gt cds CDS 1981877 1982017 . - 0 ID=CDS204;Parent=mRNA280 III gt csa exon 1982226 1982322 1 - . Parent=mRNA280 III gt cds CDS 1982226 1982322 . - 1 ID=CDS204;Parent=mRNA280 III gt csa exon 1982442 1982635 1 - . Parent=mRNA280 III gt cds CDS 1982442 1982635 . - 0 ID=CDS204;Parent=mRNA280 ### genometools-1.5.1/testdata/nGASP/test.fas000066400000000000000000000370211211610345200202420ustar00rootroot00000000000000>BP:CBP00004 GSHQIAKNFVNSSTPDLRPTFVVNFDTSTVICQHSSDPTDLHIHNMSSLCDGKQDCFVNPAMHDEVFPYCEHKCESTCSGKGACLYDGSKPQCYCDSGFSGAACELQDKNECLEHPCHMMAQCQNTLGSYECRCLPGYQGNGHECSDIDECADNIATRCPEHSQCINLPGTYYCNCTQGFSPKGNQGSGLDKCADINECETGAHNCETNEICENTIGSFKCVTKCSPGYSLIDGKCEDVNECDSEKLHKCDVRAECINTVGGYECECEEGFDGDGKNCQRGNPMSLSIAKSSCRKNSAICDRHASCNIFLDICDCKTGYTGDGITCHDVNECDAKETPCSEGGRCLNLDGGYVCCKDGQDDAACIKDQRAFCSGGCCDNAICSNATCACIDGFRGDPHKKCVDINECVENDSVCGGVGDRCVNLFGGYKCCQHGSQEVECTDQAFSSDSSTVSSHGADFTTTGEQVIEGSGSIQTSSGGSITVTRGLIPKEVELTTSGRLACTSYCPPNSECVGGFCECVKGYGGNALVGCEDVDECITETCNVEANEWCVNLIGGFVCCNPTNATHDDCIVLSLGSNVPFSDFLTVPGLEITKEKGLHVIGPNEEDTVVATRSNHSVTSDQLITEVVQQSKNFSSGQIILTRKSVTGGEAVTQTTDGDGEFGLEISAKDFGITLPATLEPRVEGSGKSPVAGVWTEEEDGGEDDDLMEASGSHGSWSTTINGTGFTGSPRSEGTIRVRITTLGEDGETETATKPGITVPGKDGKLAIEKEGHESVSSGSSATSSSGSTGSGASGSTATGKSGSSATSSSGSSSSGSTESGSSGSSATSSSGSTSSGESGSTATEESGKSEPSGATGTESSGKSESGASGESGPAGSSTTSSSGSTESGASGSNATSSSGSSATGESGSSSSGSTESGASGSNATGGSGATGNESSESAGTTASPESVTASRESVEGSGTTPSESTSSLPEGSGEWIETGSKGHFERGNKVSVSHGNGKPEGSGPKESGKPEVPGSQGSGAKESGAGKPGSGSRGPEITTDGEESESTSSGSGKPKNPKITTDGEGSKSTPIGDGKHPEDVEGSGILTTSSGGKNSTLEHGTKLVEVKPEGSDKNPGVGLEISAGKVTSAPEDKEKSNEVGLEIVWESTTPEPTTPDTDNVGLEISGRDLITKRPHQIEGSGTGDEEITATTRDVSKSTKKPRLEIDGGDNGETSGVDGKASTPSPTSPGAPESTTPSAPTTAPEDVTPETGSGEPGIPDGSGESSTAAPEGVSPTSSAPAPEVPTTPEGSEESTKTPEEATTATSPEEETTTQEPLILTAAPSKAPESSTKPSEAPEASSESTAAPPTAQPATVIPPQNREEKPEPTKETFALPTTTEKPVNETIENTKCMSSDECGLDALCERRTGVCRCEPGFEGAPPKKACVDVDECATGDHKCHDSARCQNFIGGYACFCPTGFRKTDDGSCEDIDECKEHNSTCCGANAHCVNKPGTYSCECENGFLGDGYHCVPSTKKPCDKEQSTKSHCAESNMSCEVDTTDGSVECKECMSGYKKSGTTCEDINECDEQSPCSPSASCVNLNGTFSCSCKPGFRGDGFMCTDINECDEKHPCHPHAECTNLEGSFKCECHSGFEGDGIKKCTNPLERSCEDVEKFCGRVDHVSCLSVRIYNGSLSSVCECEPGFRFEKESNSCVDIDECEENRNNCDPASAVCVNTEGSFKCECAEGYEGEGGVCTDIDECDRGMAGCDSMAMCINRMGSCGCKCMAGYTGDGAHCTKIEEPKEASKTACTEEWSRLCELEKKQCAVDEEEVPQCGACLPGHHPINGTCQSLQISGLCAQKNDCNKHAECIDILPDSHFCSCPDGFIGDGMMCDDVDECNNAGMCDDENSKCENTIGSFNCVCLEGFKKSDDDKCVLKTPNREKIEINEENSSSTPSESQKPESTTQGTVTTSVLSSEPTSEAPTSSTSPVTSSEKASESTTSSESPVTPSETSVTTTSLCSTVTCHSLATCEPSTGVCICRDGFIGDGTSSCSKKSTADCISLPSLCAENAKCDNSARSCECDAGYIGDGYVCSPHPQDCVLRDNLCSPEAICQNRRCQCLPGFTGDGVKCVSIHERASNCSQCDANAHCVGGTTCKCNPGYFGNGLCCVPDPLDCVHFTGICHPNAVCNPDTRQCQCSSGFSGNGVSCFPQKSCRTDKSVCAKNAICLPTGSCICRHGFKGDPFYKCTSLVAKEPSNAQDLSDVSSCVTPCDASSQLCISGECICKPGFRQNPGSKTCADIDECAEKTHRCNRIATCRNTFGSHVCSCPEGHVGDGVTCVPHVNQGKLSVYCEADGMTLVLGNETSDFEGKIFVKGQAENPYCSKSFSALLNSHKPYVFKVAFQHCDVQLLDNHTMASTVVVQKHAMFLTNKADSYDLRCQYPIGSRAVQSHVNVSELATTSTLTDKNSTLAPICRLSVSNDQHSSISSAMVGDTLKLALEVTPSENFGILPRNCFAVNIESGERYTLTDEQGCAIDESLFPQWSVTNSAK >BP:CBP00012 MAPKDDPDNRGFDDQRRPSQRSTVLAIPALAVNDPKADPKIASDLPANYVDDDDDAPKLYTPSLFEKILNYLLCRGDIANQQLEAQPVSIPGLFRYGKRFDYLLLFIGTICAIISGVSQPIMALVSGRVTNALLVYPPTSKQFRNKANENVYIFLGIGIFISITNWIQYMCFQHCCSRVMAQMRHRFVYSVLRQNAGWFDKNHSGTITTKLNDSMERIREGIGDKLGVLLRGFAMLIAAIVVAYIYEWRLASMMLGVAPVCCICMSLLARQMTSTTIKELIGVGKAGSIAEESLMGVRTVQAFNGQEEMVGRYQTELEKGRRFAVWKGFWSGFFGGLFFLCLFSFLGTGMLYGAYLLKVGIIGSPGDVFIVVMSMLLGAYFLGLISPHMMVLLNARVSAATIYQTIDRVPKIDPYSKAGKRLPNVVGRVKFENVHFRYPSRKEAKILNGLNLTVEPGTSVALVGHSGCGKSTSVGLLTRLYEPEAGNVTIDGTDVRELNIDWLRNVVGIVQQEPILFNDTIHNNLLIGNPGATREKMIEVCKMANAHDFIEKMPKGYDTLIGDGGVQLSGGQKQRVAIARTLIRDPKILLLDEATSALDAQSESVVQSALNNAAKGRTTIMIAHRLSTIREADKIVFFEKGVIVEAGNHEELVHLGGRYFDLVKAQQFKADPEATEEFEEEEIDLDDNSRSSRRSSMTSARSGSEAFQRGNSLNDSFSGSRRSARADAENDAFAAHEAEVMAQDGQITAGYLDIFKNAKGNYIYMFLGTVFALIRGLELPALALIFGWVFEGFTFVPYGGRMMHRMAMAVIAFASVGVGVWISQVASSVLFAIVSENLSLRFRVQSFRNLLYQDASYFDNPAHAPGKLITRLASDAPNIKAVVDARMLQVIYALAAIIANIVIAFIYCWQVAILGTSLILLLAFVMIGLAYKISLMNIEQIKNDEAGRTAIEIIENVKTIQLLTRCELFFDHYQTSSKQQKRSELKKGMIEAINYSITQSFMYFMMCFTYAVGIRVIYDGDKSSDVTFKGIISMMLGAVAVMNSAQYFPEFVKAKTAAGLLFNIIYRKPRTGDLMEGDRPEIRGNILFENVKFSYPQRPLQPIMKGLQWTALRGQTVALVGPSGSGKSTNIGMLERFYDVTGGVLRIDGQDIRNLSLYHLRTQMALVGQEPRLFAGSIRENVCLGLKDVPLEKINKALELANANRFLANLPAGIDTDVGEKGGQLSGGQKQRIAIARALVRDPKILLLDEATSALDSESERAVQEALDRAREGRTCITIAHRLSSIQNSDLIVYIDKGKVQEAGNHAQLMQKKGRYYKLIKKQDLAV >BP:CBP00016 MSVEWKSALRLQIEALAKRNDLHRKSSEEEIKKRIVDMDRRIVKLRELVSTSANDAAIFYLECVCHADETERLLNRESSVEKEKKWRKMKRKPSSQIGPTESRTVSSLPSVSPPDVIQTINVSTLEAQDQMPQRPHWWDQFQIYRRTDLLRFSKQNDRRELWRTQKDFFLTCLGFMVGVGHTMRFPAKVYQHGGGVFFIPFFSLVFFGLPLVFLHLSLGQYTGQAANTAFSKLMPIGSGVGWALVVIAIPVAVYYNIIVAWAIHYFFQSAKGLLLGDELPWETCRDEWQLDNRCCNLHNLHSCFNSSNSITAPEAFFHSEVLSLSTFGDFALGPLQSHLVLSLAAAWLLVFFGVFKGLGSIAQTMNVTATVPYLLLSILLLRGISLPGANKGLSFFFTVDSTKLWKWQIWKSAAEQVFYELGIDAGPLISMAAFSRYRNNVYRDSVLLVIMDALTSILSGMVIFSFVGFIASESNSNVNDVLKHDPLYLSFTVYPGVTSFMYWGGLWATMFFGMLVMAALDAEFAWLEMIASAFMNHFSTKNKAVENRLLAFLCLVGFFFGLPLCAQGGIFVFHAIENLNANWNSFSLALLSVAIVCYVYGIDNYLTDISGMLRVPRIPISKAIRFRDKIVSILGPGGIYIKFSLCFICPVILTVLLVASVLGYQRISFAGRPIPIDYEIVAWVVMIGPLLVVPLVAFLQVRQIRNEGKLLKSLFDTSEWRENPDDLLEPKDAYMKQDSKYESPPNRRRTPTIFTHRENTYMYIDSRGPTVRSRVFPMGAPLDPYGWKLGRLRDHQQHIEEVESNYSEEGSTTNNSFMASTVKHNDDVELTLFGSPPAIMGDEDKNMVTKFSESMPVNYKCRNEQAAPVQSRREPRLGRMARKTRRKRSSPSASDPPVPTSPLPPPPRLYHCKSEPPMMRSEEEHGTPKIITPDGSCSISDSSDDSSDDNIRRATVIRRKTSDDDAFTQISTAESISITPLDFPRQRSLSSVAIYDQEQKNGRSKVLSQLKRPTPIVMPPK >BP:CBP00024 FQSVHHHLNEEELKQVFGVSNKHEVPEYSLIETTRHPLKNGGLKMKFVAWNDTYHLNLRKNSRIVSPHIISVIRHGDDAVTTYDGLRDYNQCHYQGEVKSHGNMKAAISDCGALMGSLVMEDHFLVLQTLPKRVHHLQKERHLVYKRSAGLLTDTENKIREEITRLQEEQESFCDTSEQLDDPAMTIPAHLHFNYTIPTSAQLDSPFIFPNMDPITLEIGLFLDSKLFEHFEREYIQDAEQHLLEFSLALINNVHVLYQQDTLTPNLDIVIVRYEMWKTQPSSLSTGVHKNGQAQSLLDAFCRYQAHMNPGTDLTDMNHWDHGVLLTGYDIYHTTTSVAGVAPVARMCDPLFACSLVEGLHLGRSFVLAHEMGHNMGMVHDGVQNQCNKGCCLMSAVNGAGKTTWSDCSVREFNAFLLQLDESGRGNCLRDASPGLISTNHLSDTRLPGQRFTADQQCSYFWGRDYRVEIPNGKAMDDICRILWCGNSGSTISTAHPALEGSWCGHNKWCHKGHCTSWNFDLPPVPIDGQWSEWGGAEKGCPIQQCAVSGSITIQAQHRDCVNPAPNNGGRTCEGANIRGIVCGATSSNCLGFTREEFGNKICSSIKFDPHKPDQQLTGEGFEHSTQPCRVWCHLIGSELIRNKGQFPDGTPCGFDAYCVGGQCLALSCDNKALVEQQEDCPRLEGRSIHQWEDWSSWSECSVSCGPGGRQVRERKCSSGRKCQGVSEESRACEGVLRDCEEFGEWKDWGPCSEKCALGIQKRFRPCLTDQCASEHLQEKRPCDNEGCWTNWDEWSSCSQTCGGGRRYRLRKCLDFKCEGDDLEKESCNTQKCISQTWGDWLPCSVSCGIGFQIRERLCDGELCATANKQARTCNQQQCPSTFSLAVWSEWGEWTTCSATCGEGLQSRERSCRRGSCQESDAAQTRRCVNGPCDHTFLPWSEWTPCETCSSFDSRKRIAKCDGTTDNCQDKIDEETCDNACLREQHSFGPISPKRPKLITSNELRKAFGRPLLPIESITSSKWSEWGPCSVTCGSGRRVRTRDCQEENCPEQNIQHEECSLNSCLDLFIWSDWSSCSKSCGHDATQTRQKLCLFNNAECSSYAESRRCKNLPTCTSISSGNTISENSFDAPQWSEWSSWSACSCFSLTSTRRRFCQVADPTVQGFCAGSILEQIPCAPGNCSPSAGGWSSWSEWSSCSKDCGDTGHQIRNRMCSEPIPSNRGAYCSGYSFDQRPCVMDNVCGEEKVNGGWTDWTSWSECTDYCRNGHRSRTRFCANPKPSQGGAQCSGSDFELNPCFDPARCHLRDGGWSIWSDWSPCSASCGFGVQTRDRTCSSPEPRGGQLCTGLAHQTSLCDLPACDHESDGEWSAWNEWSGCMGNCGFGTRTRVRACVSPPASHGGQPCFGRSSEITECRQSESTCSSFITSSLLADGYFIETDQQQ >BP:CBP00071 MGDEGYRGWIKLEIPCFEPERHMNNIIRCHTTKLEPALNSYNMRIHTKGQVQAVEEQDCEPFYESNYEIVSSHFSHHLIIAIQNYLKSLSMDRLMPFQLGNLVLHSSDFWSSELTCHLADIPLSAFFFGNIQGGTFINHWEVSFWEDTHRRNRLRQKNMQPTASDRQGLNQIRVEFEFDKVDFMTVHFKHKEGDFEVISKDFRKTRETVTMYYQITVRRTSIRRVIVDPVVNDTNGGDRIRIHFELNCPVLIRRAYKTEKQEAEAKHQVPHYRRFLVINRGRSANMYPTPKAITDSPVFTIEFDTSVSLEEVYRLISRLRIRTGVSIEFATIPSVDCLIWRENPYHRWTFHGSSHLSPTHFSAPIYRDFITTAFPRKHEVCGSREVDTNRERKFAITYLLECLISRGAVVKDQILLDDTIWHRFLEVILHYYTKDDKLCEAGLEDLVHMIDGRKRIGSLIKCFDRICQTRQKNSLVNGLTTEEMREGYQRVRKIIFTPTRVIYVAPETLMGNRVLRRYDHDGTRVLRITFRDDDNQKMRTNKTSTLLEKTVNTYLMNGITVAGRNFGYLGSSNSQMRDNGAYFMEKYSSSQCREYEKMCRMAPPITFNPKIQAARKNLGRFETIDNIPKMMARLGQCFTQSRLSGVNLDRCTYVTMYDLTGGKNIKGDEYTFSDGVGMMSMNFAQMVSQVMDFGKGVPSCFQFRFRGMKGVIAVEPFLDDLRQWSIENDIQEVSEDTAWGLNCVFRPSQIKFISKRHPRDQVEIVKYSSPVPVSLNKPFINILDQVSEMQSLECHRRVTNRIEELLDRQMLSFAQQMIDETFCRNRLKELPRRIDIDYLRTTWGFTLSSEPFFRSLIKASIKFSITKQLRKEQIPIPADLGRSMLGVVDETGRLQYGQIFVQYTRNLALKLPPKSASRSVLTGTVLLTKNPCIVAGDVRIFEAVDIPELHHMCDVVVFPQHGPRPHPDEMAGSDLDGDEYSIIWDQQLLLDRNEDPFDFTSEKQKSSFKEEEIDDLMREFYVKYLKLDSVGTISNSHLHNSDQYGLNARVCMDLAKKNCQAVDFTKSGQPPEELERKWRKDEVTGEMIPPERAERVPDYHMGNDHTPMYVSPRLCGKLFREFKAIDDVLKISEERDEQVEITIDETIMVDGYKEYMHSAREDLARYNAQLRSMMENYGIKTEGEVFSGCIVDMRNRISDKDQDDMSFYNTNQMIETKVTNLYKKYREHFFEEFEGAWEANTEGTSRGESDTNILQRHCRAPTQNMMKKAVAWYRACYEEARVTRENKKLSFAWLMYDVLAMVKQTKSLTSDDIRMGGSNPLYTMLDAHRSQYLLDNRSVFEDYIRFAPSKNQGEQVARALEIIRMYVETNPGLEEVMFVINEWARASKLFENQPIRNYHLSLLFILFATRQFSSVDGNAAAFFPKIDERGWREEKANGEFKQGLEFMEMKKSQMIVKFLEFLASRKFRKLPNVSFRTLRFSSIFMRGEWQIFHVAALKTYYNLLFNLRFEELPVSTDPTMTVRSIIRENEPFVVELPADADRTLVHRKLIEHTGVEEIYMRNMEKSVRGVDEQQKANTRYLVSTRGTLESMYKLRQLVAVKVPIKTYVTGQEISTQMARLCYEKIVKGHIS >BP:CBP00094 FRIGHLEYENSNETKILEICMKTAGTRKQHTLISLPSCHNFNGLENAANLNYQYAVDLLIGAACDEETQTVSRLALRWHKLYLSSAPLSTKEKEGTTIALKPHSLAGTAEVILAVCKSMKWKEIGLIYSDETKYTAHAIYDMLAEKEEEDIKINVFLQTDGTMNTYTILHSARVLISFLSTSDLSRFVKTLKDKAFRPLEFSIIHVDCYKSETTEFYTHLDQKASEETNPISAARLRKLHRHVALLRNSHDDKGNMEEFATKHGMIVIFFVFPFPTLCFQPSHTLYKALILCDGLQLLSDYKPLSDNLTIVQQQPTLWEHVTNTEIHGYSGPMFIGSDGVRLPYYEMFMWRDGKTQHVASVRPRESEFCEKEKMSNESKNCYEITRTIPFGQLLDDLPPYSSDCGYDNNLCSDFHVFMIAAIVFSILLIPMAIAFYLQRKEHLIQQMPWRVPLDTINFDDSRNGRLLSVSRRVSTVSTARASYSSIFSANVSEHAHVNKQKVSIKRYVQRRPITFTRQEMEMLNQLKYMSHTNINPFTGICFNQGSELIVMWQFTARYSLEDLIFGKEQKFGRNFQSTFIKHIMHGINFIHNSSIKVHGTLYLSNCVVDSYWVVKLTDFGIKNILKERMHHKELAPNSSFDIDAIHYKYLQLAPEHLSSLLEKHEEPMGTVEGDIYQLAMVIYQILFYMKPFAERQEDIKAVKKLFFLELATLLSNQSTAPLHPKVPEGNSFTMRLLSIIQQCWLYKPAARPTLIKITDAVNREFGQDVKGTLIDQMIEMIDEYSANLEHIVAERTRELEQDMATTENLLYQLLPKSIADSIRSGKSVVPEQHSSVSLLVVDVCQFTKFCEAFIPVHILETLQELYSSFDYIVQKNKAFKVENVGDAYLICSGIPEMTACRHLREVSKISLKLQEFMKTFTVRHRPSHILQIKMGITSGAVAAGILGSIAPRIITGICKNLAYKILNNIQPGTIQLSELTANTMMEKFPSFIIEERGMIDVKGKGTCLTFWLTGEKDQMRRQSSRSSCISHSQIKFEIEEANKTNNQFL >BP:CBP00176 MSNWDYIDEVDIIPKLPPNFDELRESKKWQERKEALEALLKVLTDSERLSTKVSYAELIGNVQTVLAKDANINCQALAAKCIAKFATGLRTKFSAFATPLLPVIFDKMKEKKPTLREPLVECAMEVGRTMPSLEAGQEDILAALAKPNPQIKQQTALFVAKQLDLVVPAKQPKGFIKAAVPVFGKLTGDADQDVREASLQALGAVQRIIGDKNVKSLLGDLSSDEGKMKKIGEYADKSAASYAEEQAKNAPPPSSSASAPSAAAASGSSGNVTSAAVTTAEPAAEADPWDFLDAFDVLSKMPEGFDTNIESKKWQERKEALEGLQQLLTANPKLDPKANYGALVERLQKVLEKDANINVAALAANCITGIANGLRTKFQAFAISVAPIVFEKFKEKKPTLRDPLVACIDAVVATSNLEALGEIVLTALGKPNPSIKTQTDLFLQRTFMKLNSQTMPKKTLKTLVPLLIKHSGDSDAEVRDASYAAMGAMMRAIGEKPSLQLLADIVTDNLKMGKIKEYHQKALAEAGPAEIAAMVQSMHKADAPPAAAAPPKKAAPPPKRQESEEEQVEEEEEPLKLPAEEKKKAAPTKENAENEPPVAPKTELLLNDNGEKAQRIKEEKQLKLVKWNFQTPTDEHIAQLQTLLGNQAKVSLMSQLFHKDFKQHLAALDTLIRLADTAPRSLLANSDLLLKWCTLRFFETNPAALIKVLELCRVLVELTRDTETPMSQEELTAFVPYLLLKTGEAKENMRTAVRDIINVLSDIVGPLKMTPMLLDALKSKNARQRSECLLVIESYISSSGISPLKSLTVEKIVAPFVGDKDVNVRNAAINVLVACFKFEGDQMWKAAGRMADKDKSLVEERIKRSGVKAGSGVATSPPNGGPKIVVPQQQQSVVRRPASRSRTREPEPEDDYQDQRAIANSTFTKGNSSSRYALRDDVFATAINRLADSTYVVTPPQPPSAWANNTFQMKRTNSSSSISSIDTSDQIQRSINNISSSLADVAQDAMYQVTYVLNQPEQRHLVDRKADMVFRASAAQLDMIIDEFKAGKDVTGTMDACSQMLFILMGGVEAEHGLEPLNASPETVKAIISSVLRCITQIGSTDAGYTMARSLNRLAMRLVYRVELSNLLCGLILAMIESIQLNSGITDLVSKLSSKWCDELEKRRAQLRASDIVDVFNQFYICTLTEQKMDITHIHIQVVDNYLERVILQQGDVVLDAARRLSSPHIHLTRMINKILQMMKEQNIDPIMPGTLDARAPDEEEAVVVRTGVQVCVNNILRDLKNVSTYNEQLNKLVQSSDKCRNEYSELVKNHALGEAVEELVSEQTIHGAPNFNKPDVVNAMTMTWKALDLLGPTRAETPTTPPQNLSRMDTTIVGTPLSRAEGAGTITRARGNIMRPKQRPTMSREQHEELRNRLQQAK >BP:CBP00296 LHALETEKNVFSQFYAKKWPRQLRKPKNREISNFKHSEGAEFAAKSYFWDNNWDFDLPELPKPEQMIMPLPTSTPDVYDDFAFYRVLMEKEDKYILVACHANVHGFHRGDLRFLEINSRSRLNRLEGQSVIGSLFLGDIVAVTELARNSEAISPVRDVDVSLVTPDTSCYWIVSKMILYPRNVDKKSPVLFSIVNRMAAIKGENEPMNLNVDNWDMMHADSIYTGLTFRPETLEYHFSKDYQKKKINELVVSARTIRSYPGIYGTIFKFKEGDHREEFKKEMHLNTYTDESKELKRLAELEHEKNVFSQYYQKKSGNRRENHRGRKKPSSCKHHEAIEFAAKSNLWDNNWDKDLPMLPRSQEIIMPLPASAPAQTEVCGLYRVLMEKNDKYILIACHVNVHGYHRGDLRFLEVNSRSRLKGLSEQSVIGSLFLGDIVAVTELARNSNAQSSVRDVKVSSVTQETRCYWIVSNMILYPRILKPDVTFSFLKNRMAVVKGEDEPMRVNCDDWKTVAPDLIYTGMAFSPIKLDDNFSDDFQRKSKNLLISNVLKISSYPNAFGIIYSYEECSEQNEEFKIGTKAYSDTLEIHKYKRERIVETCSLMGFSAANTIFNGRFDCRAFHMYDVSKEGPTVRFRIENPRNRPTLGLWNNGNKILIGGPTGDTNGTIETVMCNSSHMGWLKIAARLTRECPKDFRFNGDLFVSQREPKDHYYLYDGYFQDMAPESNGRKIIETLYGGKPLELRTGDVGGEYFFPSTPEPIRLNVFQKEYVQMLLDGNPLVIGSSPFGCGKSMTIITAALEIYKRNAERNLVGKTHQLLITQSNFASVNLIEIARKTCNSGDEKLRNMKFMRFITDKNWNEQPDHGRTKFDMPFLMNKVFKQWAIGELDGNELMTHHTKSMIAHIIRNGTVTVDELCSAARRVFDKYGDCKIPFSGHLTEAFFILYEPDLIMTTADSSKSVCTLLDKKYETNKNECTTVQIDEASQLPEYTLLGLLKTYNKANFGLIGDIHQLPPFCMEELEGRLKEFGIGNTMERAIQNKLFPISNLRYVYRCHPQTTALLSELFYDGKLISGVTESQRNEFMIKRKDFWPNPSYPVMIINHMGTCQRMGTSAQNHSEKDLVSYMVQNLLDQRKYTLKPQDIGVISFYAAQTSLLTEQLRRSGVKCGTVDAFQGSEKEVIILCCTNEHATEFMQCKFRLNVALSRAKQATVIVGNLGYLRKAKYWNAIVKRVEAYGNL >BP:CBP00327 MGALSQLRLLLWKNWLQQLRSPWFALFELVVPLILIGASFGLLIGFSDQFETTYDERRYAAWPVSGSAYDLIMPTNPNDSIKSAIVEPYFLFNSQLTCQFLNTYSTGANSYRMDIILAYAPMSAATTDKIMSIIQSRYSLTDLLSPVAPFIHNLYNITTIPTLNTNMSLKGFNTEGDMVSWMQGQFQSECDNPLLAGIVFDDSITKDLFNDNKRDFTYKIRLSNTHRRSRNAFGDDSYPWDTSVSFAIQYVSGPINPDDNDGGSPGYWQEGFMTVQRAVDVAITELITGSGPPISPLLDSYQVSRFPFPGYSTKIIEVGAYFMPVIVIFSFMTSVIYIVRAVVVEKEDRLKEYMRVMGLSQFINWIAHFLINYAKLTFAVIILTILLHFVALKSDMTLMFVFLMVYAFDVVYFAFLISSFMNSATSATLISVVFWMLLYFWYAFFSSIDQTNPYALGVRLINCLNPDIALNYGLQLLAAYETQAAGLKWNEMFNPPSPDNNLTFGHALAALVIDGIILVILTWYIEAVVPGGDGVPQKPWFFILPSYWFPYSGSKTVNSSDQYEHVEYASHVKLEQEPTDLTPTINVVNLTKTYGTSFFKKLFDCKFGKAGEKRAVSKLNLKMYPGQCTVLLGHNGAGKSTTFSMLTGVASPSSGSAYINNYDIRSSLPKIRRETGLCPQYNTLFGFMTVMEHLEFFAKLKERKWDPEEAREILARLRIDFKADFMAGALSGGQKRKLSLAIALIGGSEVVMLDEPTSGMDPGARHETWTLIQREKERRTILLTTHFMEEADLLGDRIAIMAHGQLECCGSPMYLKQQYGDGYHLTVVYSSTETPDVPKTTEIIREYILEANVFSYIGQEATYLLNAKHRPIFPKLFRELENHQRQCGITSFGVSITTMEEVFLKVGHLAEERYNYEHGIEDESSELIEKDDPMLQNLKAPVRLTGFALQMQHAKAMFFKRGIFFFRKWTQFLPQLAFPVAYLMLMVFTSQVIPSVKEQDPQTISLAPFSTKDKPGHVVSDSGNYVTMNGASTKLSNMVQNTVAALGVNQTVVDISSSVESFIMNQTNALGSRNFGLKYALGFVPSSIGIPGLPIPDLKTIRTYFNNFGLFTPALAITFTDSMLLSQAKNKQYTFTAINHPLPPSTQDTLKNTNRSDGAAFLIAYGLIVAFAVCVAGYSQFLITERKKKSKHMQLLSGIRPWMFWFTAFIWDAVWFVIRIICFDAIFYMFDITAYTHDFGIILILTLSFLLYGWTAIPFTYWFQFFFESAPKGFMMVTMYHILTGMIGSIAVPIIQQTSSMDAGYLWSIIFAWFFPTYNISQIATVTFQNENVRMACQKLDCNVPMFKSVVACCGTASQKLYVDNVLFVGNRKGILVYVIFLAVQGFIYWIMVFMRENDQFGKIFNLIKCWKKKDDHIWDITEGDKEEQRDVEDSDVIAEKSVVQRLANSNETALVSNNLVKWYGNFNAVKGVNFHVNSKDCFGLLGVNGAGKTSTFQMLTGENSISSGDAFVNGWSVKNNWREAGANVGYCPQYDAIIKEMSGEETLYMFARIRGIPEKEIPVKVQAVIHAIGIGMYAKRQIKTYSGGNKRRLSLGIAIVGLPDVLLLDEPTSGVDPKARRIIWNILNRLRDLGTALVLTSHSMDECEALCTELAIMVYGKFRCYGSCQHIKSRYGSGYTLLIRLKNRGDAEKTKSTIQQTFRGSKLKEEHILQHNYDIPREGDSWSRLFEKLETLSTSLNWDDYSLSQTTLEQVFIEFSRDAGQLDVDPYGDVPSLTGSGNKQNGYANRAMSVESITEMGTYF >BP:CBP00332 SSSFTRIPKRDRTSPEKGEPSSKRSAPFTTPSSTTKIGRDSFAVMDTMEVQMNMFQLDITKMPPVIQRLHVDTLIITSKGKEINLNLGTVSTGGDVNSHNRRLAQHEIMRKFFEKKRSLFSSSSYHSLAYDTAACLYIPEGQYRGGEYEEVCLSQQDFAPEEWDIVSKISRRKDDSFIVRIKPAGAVYTQGDELFEPSNRYELTRIVEIVTSQKLNTTDFYQFGNATFPLRAHPNSEPDASSEIRSGFAKVARLTEGREGKHEMLMTVDTKLSPFYKPTSVIRCVLTKIQESRGGGGGGGGYGGRNDSRDSRGSFGGRSDSRDPRGYGGGYDRRSDSRDSRGGRDSYDSRRGGGDSEDFSSHEIDEIARACMESDKFLYSLESALKGLFAEAIHLKGSACTIRITGIKQCTANNTKFTKKDDKGEREISVSDYFYEEYNIKLKYPNLPLIVSKKMKYECFFPMEVLRIIPGQRIKVNKMSATVQSAMTGRNATMPRQHVDLVQRILQDSLKLERNKYMDAFGIELKSTRPVQLKAKILPPAEIRFKNLTYMPEIKRPGFKNPGKFVEPAHIYRVAVVSFDNAIDMRQAEDFCDRLFDYCRDQGIKCDRESKDWSIRELSSSDNVGIKEAMENWMKKKVDIFVGIARDKKPDVHDIMKYYEESVGMQTIQLCKQTVDKMMNPQGGRQTIDNVMRKFNLKCGGTNFYVDIPSNIRGRSICSNTETLHKKLLEKVQFIGFEISHGAARTLYDRSRNQMDGEPSIVGVSYSLKQSTQLGGFSYMQTQREYKIQKLDDAFPKCVKAYAEDAKTLPTRIVIYRVGAGEGDFKRIKEEIQEIRGTFEKIEKGYNPALVFIVAQKGSHTRIFPSRIDGNKAFEQNVPSGTCIDNVVTSFGYDEFILSSQTPLIGTVRPCKYTIIANDPAWSKNELIHLTYFRAFGHQVSYQPPSVPDVLYAAENLAKRGKNNYRVHQRYVSMQAIERRIISENADFVNENMQEQLASAIIDEMSDAMNGMTIPKRNFWA >BP:CBP00396 RSRTKFRRDSRSRRQTPTSEMRSFVLLILLTSHLSAGSIDWSSLETPPQFTHGKNAETVFFKVEKSGMSDESAKNIPGNLLEQTIHCQAIGNPRPTYRWKKDGKTFLPSMFPEKVVQKPGEGSLVFSRLDETDAGLYQCEAENSNGTAVDRPVRVQETWIRHFKAAEPEVVVVEVGDPYQRNCSPPASNPNARVYWILMGKEPGHFETISSSHISSNEQGTLFFHYVNETDLKSDRYYTCTAENIELKDYKFGNQFSLQITNYKRRSSAPYWPNGPPPNTNTSEGENVSFDCTTYGKPTPKVTFYKNGVELGSQKDDRYMIEGTRLTIYDVKKGTYGKGDNAVYQCKSENKHGWLWTNFYLNLLAFKPQLLIDPGKEEVEAVIGKKVTLECKFFASPNAAVKWEAPMISGSKGNQIPADPHGVGRLVFSEVSASEEGEYECIGTNKYGQASGVITLKVRKPTTVKPFDRAEDVRMAGEEMRLPCDATSDSQLEVKHEWLVDGIPLPEERVNSGHYRIADDHSLIVANPTQDDSAKYKCVVSTKLDKVEKEIKIQFKDVPVAVHSAYVSNCDKNSLTAFIKFDHIESIHTIAPVKEFWVQYQMDSETEGSQWRTHPSPSAAHPNDQVTDQLRTTSGSATVSLQPFGKYVFRVLARNSVGDSATTTVKGICETPAKQPDKNPGEVAAKGTSPENLIVQWKPMAREEWNGAKFHYVVKYRPVDEDQRDGDWKEVAVEDPFADRVTINLDDDKDVKPFQPYEVQVQAVNSEGRTNVVPETVEGRTGEGVPSSIPSGLRVLEKSGTTVTLAWNGVDPATANGNFTGYKITYWVDEADQDVEEPEDDEEEKRKFRWKRSIRAKRQSGVRKTIVFGPSATQGTITDLKPATLNHAYIQVTNGAHEGPSSDTIDFQTDEGVPSPVRSLRAYPMNSKESDEKGVVVLVWKKPRQTNGKLARYEVEYCKTQNGKQVEKTCPRQQIDADAKEIRITGLENETPYRFILRAHTSAGEGDPNSSDATTLPETTAAGVDPGVPSLVENAIGDKYFNVSFRPAKYDDETRAPVGNTYEVQYKPQNGDEWETVKPSDDGLTVHVDGLSPGTKYDVRVAALQVDSDGGETTKTFSGISKITTTGTSPGERNLYFIILILLILLLLLIIICICCVVCRHRGQNYPVSQREREQGREPILGKPDYKTDDDEKRSLTGSKAESETDSMAQYGDTDPGVFTEDGSFIGQYVPQKSLMPAERPEKGSTSTFV genometools-1.5.1/testdata/not_sorted.gff3000066400000000000000000000026371211610345200206140ustar00rootroot00000000000000##gff-version 3 #date 2012-06-06 #source-version exonerate:est2genome 2.2.0 contig_43704 exonerate:est2genome mRNA 332 6404 10204 - . ID=gi1051257 contig_43704 exonerate:est2genome exon 332 790 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 900 988 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 2295 2373 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 2460 2557 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 2889 2993 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 3084 3170 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 3268 3462 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 3922 4028 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 4574 4769 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 4884 4985 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 5147 5218 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 5299 5355 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 5437 5538 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 5674 5711 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 5822 5933 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 6022 6078 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 6169 6224 . - . Parent=gi1051257 contig_43704 exonerate:est2genome exon 6328 6404 . - . Parent=gi1051257 genometools-1.5.1/testdata/nowildcardatend.fna000066400000000000000000000000311211610345200214770ustar00rootroot00000000000000>seq1 AAA >seq2 AANNAAAA genometools-1.5.1/testdata/nowildcardatend_rev.fna000066400000000000000000000000631211610345200223600ustar00rootroot00000000000000>seq1 AAA >seq2 AANNAAAA >seq2 TTTTNNTT >seq1 TTT genometools-1.5.1/testdata/obo_files/000077500000000000000000000000001211610345200176165ustar00rootroot00000000000000genometools-1.5.1/testdata/obo_files/blank_comment_line.obo000066400000000000000000000000271211610345200241360ustar00rootroot00000000000000 ! this is a comment genometools-1.5.1/testdata/obo_files/blank_line.obo000066400000000000000000000000031211610345200224060ustar00rootroot00000000000000 genometools-1.5.1/testdata/obo_files/comment_in_stanza.obo000066400000000000000000000000711211610345200240250ustar00rootroot00000000000000format-version: 1.2 [stanza] id: id !comment name: name genometools-1.5.1/testdata/obo_files/comment_line.obo000066400000000000000000000000231211610345200227630ustar00rootroot00000000000000!this is a comment genometools-1.5.1/testdata/obo_files/corrupt_header.obo000066400000000000000000000000241211610345200233210ustar00rootroot00000000000000format-VERSION: 1.2 genometools-1.5.1/testdata/obo_files/corrupt_instance_stanza.obo000066400000000000000000000000721211610345200252600ustar00rootroot00000000000000format-version: 1.2 [Instance] id: 1 name: instance_name genometools-1.5.1/testdata/obo_files/corrupt_term_stanza.obo000066400000000000000000000000421211610345200244200ustar00rootroot00000000000000format-version: 1.2 [Term] id: 1 genometools-1.5.1/testdata/obo_files/corrupt_typedef_stanza.obo000066400000000000000000000000451211610345200251140ustar00rootroot00000000000000format-version: 1.2 [Typedef] id: 1 genometools-1.5.1/testdata/obo_files/minimal_header.obo000066400000000000000000000000241211610345200232510ustar00rootroot00000000000000format-version: 1.2 genometools-1.5.1/testdata/obo_files/minimal_stanza.obo000066400000000000000000000000361211610345200233240ustar00rootroot00000000000000format-version: 1.2 [stanza] genometools-1.5.1/testdata/obo_files/missing_value.obo000066400000000000000000000000201211610345200231540ustar00rootroot00000000000000format-version: genometools-1.5.1/testdata/obo_files/tag_only.obo000066400000000000000000000000171211610345200221310ustar00rootroot00000000000000format-version genometools-1.5.1/testdata/obo_files/windows_newline.obo000066400000000000000000000003361211610345200235340ustar00rootroot00000000000000format-version: 1.0 date: 03:10:2007 16:20 auto-generated-by: OBO-Edit 1.002 remark: version: 1.62 [Term] id: IEV:0000000 name: Event [Term] id: IEV:0000001 name: Pathway is_a: IEV:0000071 ! Molecular event genometools-1.5.1/testdata/order_sketch_out.txt000066400000000000000000000000521211610345200217560ustar00rootroot00000000000000string: foooo string: foooo string: foooo genometools-1.5.1/testdata/orphaned_parent.gff3000066400000000000000000000005101211610345200215710ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001;Name=EDEN ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001,exon00001;Name=EDEN.1 ctg123 . mRNA 1050 9000 . + . ID=mRNA00002;Parent=gene00001;Name=EDEN.2 ctg123 . exon 1050 1500 . + . ID=exon00002;Parent=mRNA00001,mRNA00002 genometools-1.5.1/testdata/png_devel_1.gff3000066400000000000000000000000651211610345200206100ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 10000 genometools-1.5.1/testdata/png_devel_10.gff3000066400000000000000000000014051211610345200206670ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 197812 198446 . + . ID=gene20 NC_003070 gth mRNA 197812 198446 . + . ID=mRNA20;Parent=gene20 NC_003070 gth exon 197812 197904 0.946237 + . Parent=mRNA20 NC_003070 gth exon 197974 198183 0.985714 + . Parent=mRNA20 NC_003070 gth exon 198267 198446 0.872222 + . Parent=mRNA20 ### NC_003070 gth gene 197884 198811 . - . ID=gene21 NC_003070 gth mRNA 197884 198811 . - . ID=mRNA21;Parent=gene21 NC_003070 gth exon 197884 198005 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198078 198185 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198283 198414 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198523 198579 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198724 198811 1.000000 - . Parent=mRNA21 ### genometools-1.5.1/testdata/png_devel_11.gff3000066400000000000000000000020551211610345200206720ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 191610 192404 . - . ID=gene19 NC_003070 gth mRNA 191610 192404 . - . ID=mRNA19;Parent=gene19 NC_003070 gth exon 191610 191650 1.000000 - . Parent=mRNA19 NC_003070 gth exon 191730 191816 1.000000 - . Parent=mRNA19 NC_003070 gth exon 191944 192404 1.000000 - . Parent=mRNA19 ### NC_003070 gth gene 197812 198446 . + . ID=gene20 NC_003070 gth mRNA 197812 198446 . + . ID=mRNA20;Parent=gene20 NC_003070 gth exon 197812 197904 0.946237 + . Parent=mRNA20 NC_003070 gth exon 197974 198183 0.985714 + . Parent=mRNA20 NC_003070 gth exon 198267 198446 0.872222 + . Parent=mRNA20 ### NC_003070 gth gene 197884 198811 . - . ID=gene21 NC_003070 gth mRNA 197884 198811 . - . ID=mRNA21;Parent=gene21 NC_003070 gth exon 197884 198005 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198078 198185 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198283 198414 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198523 198579 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198724 198811 1.000000 - . Parent=mRNA21 ### genometools-1.5.1/testdata/png_devel_12.gff3000066400000000000000000000003451211610345200206730ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 5867996 5869531 . - . ID=gene486 ### NC_003070 gth gene 5868674 5869264 . + . ID=gene487 ### NC_003070 gth gene 5869883 5872798 . + . ID=gene488 ### genometools-1.5.1/testdata/png_devel_2.gff3000066400000000000000000000001401211610345200206030ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 10000 ctg123 . gene 1000 9000 . + . ID=gene00001 genometools-1.5.1/testdata/png_devel_3.gff3000066400000000000000000000002341211610345200206100ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 10000 ctg123 . gene 1000 9000 . + . ID=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 genometools-1.5.1/testdata/png_devel_4.gff3000066400000000000000000000005301211610345200206100ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 10000 ctg123 . gene 1000 9000 . + . ID=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 ctg123 . exon 1050 1500 . + . Parent=mRNA00001 ctg123 . exon 3000 3902 . + . Parent=mRNA00001 ctg123 . exon 5000 5500 . + . Parent=mRNA00001 ctg123 . exon 7000 9000 . + . Parent=mRNA00001 genometools-1.5.1/testdata/png_devel_5.gff3000066400000000000000000000003301211610345200206070ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 10000 ctg123 . gene 1000 9000 . + . ID=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00002;Parent=gene00001 genometools-1.5.1/testdata/png_devel_6.gff3000066400000000000000000000006621211610345200206200ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 10000 ctg123 . gene 1000 9000 . + . ID=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00002;Parent=gene00001 ctg123 . exon 1050 1500 . + . Parent=mRNA00001,mRNA00002 ctg123 . exon 3000 3902 . + . Parent=mRNA00001 ctg123 . exon 5000 5500 . + . Parent=mRNA00001,mRNA00002 ctg123 . exon 7000 9000 . + . Parent=mRNA00001,mRNA00002 genometools-1.5.1/testdata/png_devel_7.gff3000066400000000000000000000011651211610345200206200ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 10000 ctg123 . gene 1000 9000 . + . ID=gene00001 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00002;Parent=gene00001 ctg123 . mRNA 1300 9000 . + . ID=mRNA00003;Parent=gene00001 ctg123 . exon 1300 1500 . + . Parent=mRNA00003 ctg123 . exon 1050 1500 . + . Parent=mRNA00001,mRNA00002 ctg123 . exon 3000 3902 . + . Parent=mRNA00001,mRNA00003 ctg123 . exon 5000 5500 . + . Parent=mRNA00001,mRNA00002,mRNA00003 ctg123 . exon 7000 9000 . + . Parent=mRNA00001,mRNA00002,mRNA00003 genometools-1.5.1/testdata/png_devel_8.gff3000066400000000000000000000005451211610345200206220ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 191610 192404 . - . ID=gene19 NC_003070 gth mRNA 191610 192404 . - . ID=mRNA19;Parent=gene19 NC_003070 gth exon 191610 191650 1.000000 - . Parent=mRNA19 NC_003070 gth exon 191730 191816 1.000000 - . Parent=mRNA19 NC_003070 gth exon 191944 192404 1.000000 - . Parent=mRNA19 ### genometools-1.5.1/testdata/png_devel_9.gff3000066400000000000000000000012151211610345200206160ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 191610 192404 . - . ID=gene19 NC_003070 gth mRNA 191610 192404 . - . ID=mRNA19;Parent=gene19 NC_003070 gth exon 191610 191650 1.000000 - . Parent=mRNA19 NC_003070 gth exon 191730 191816 1.000000 - . Parent=mRNA19 NC_003070 gth exon 191944 192404 1.000000 - . Parent=mRNA19 ### NC_003070 gth gene 197812 198446 . + . ID=gene20 NC_003070 gth mRNA 197812 198446 . + . ID=mRNA20;Parent=gene20 NC_003070 gth exon 197812 197904 0.946237 + . Parent=mRNA20 NC_003070 gth exon 197974 198183 0.985714 + . Parent=mRNA20 NC_003070 gth exon 198267 198446 0.872222 + . Parent=mRNA20 ### genometools-1.5.1/testdata/png_prob_1.gff3000066400000000000000000000014051211610345200204520ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 197812 198446 . + . ID=gene20 NC_003070 gth mRNA 197812 198446 . + . ID=mRNA20;Parent=gene20 NC_003070 gth exon 197812 197904 0.946237 + . Parent=mRNA20 NC_003070 gth exon 197974 198183 0.985714 + . Parent=mRNA20 NC_003070 gth exon 198267 198446 0.872222 + . Parent=mRNA20 ### NC_003070 gth gene 197884 198811 . - . ID=gene21 NC_003070 gth mRNA 197884 198811 . - . ID=mRNA21;Parent=gene21 NC_003070 gth exon 197884 198005 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198078 198185 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198283 198414 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198523 198579 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198724 198811 1.000000 - . Parent=mRNA21 ### genometools-1.5.1/testdata/png_prob_2.gff3000066400000000000000000000020551211610345200204550ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 191610 192404 . - . ID=gene19 NC_003070 gth mRNA 191610 192404 . - . ID=mRNA19;Parent=gene19 NC_003070 gth exon 191610 191650 1.000000 - . Parent=mRNA19 NC_003070 gth exon 191730 191816 1.000000 - . Parent=mRNA19 NC_003070 gth exon 191944 192404 1.000000 - . Parent=mRNA19 ### NC_003070 gth gene 197812 198446 . + . ID=gene20 NC_003070 gth mRNA 197812 198446 . + . ID=mRNA20;Parent=gene20 NC_003070 gth exon 197812 197904 0.946237 + . Parent=mRNA20 NC_003070 gth exon 197974 198183 0.985714 + . Parent=mRNA20 NC_003070 gth exon 198267 198446 0.872222 + . Parent=mRNA20 ### NC_003070 gth gene 197884 198811 . - . ID=gene21 NC_003070 gth mRNA 197884 198811 . - . ID=mRNA21;Parent=gene21 NC_003070 gth exon 197884 198005 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198078 198185 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198283 198414 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198523 198579 1.000000 - . Parent=mRNA21 NC_003070 gth exon 198724 198811 1.000000 - . Parent=mRNA21 ### genometools-1.5.1/testdata/png_prob_3.gff3000066400000000000000000000036211211610345200204560ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 5842386 5842719 . + . ID=gene485 NC_003070 gth mRNA 5842386 5842719 . + . ID=mRNA517;Parent=gene485 NC_003070 gth exon 5842386 5842719 0.934132 + . Parent=mRNA517 ### NC_003070 gth gene 5867996 5869531 . - . ID=gene486 NC_003070 gth mRNA 5867996 5869531 . - . ID=mRNA518;Parent=gene486 NC_003070 gth exon 5867996 5868302 1.000000 - . Parent=mRNA518 NC_003070 gth exon 5868511 5868590 1.000000 - . Parent=mRNA518 NC_003070 gth exon 5869124 5869531 1.000000 - . Parent=mRNA518 ### NC_003070 gth gene 5868674 5869264 . + . ID=gene487 NC_003070 gth mRNA 5868674 5869264 . + . ID=mRNA519;Parent=gene487 NC_003070 gth exon 5868674 5868712 1.000000 + . Parent=mRNA519 NC_003070 gth exon 5868838 5869033 0.989796 + . Parent=mRNA519 NC_003070 gth exon 5869114 5869264 0.993377 + . Parent=mRNA519 ### NC_003070 gth gene 5869883 5872798 . + . ID=gene488 NC_003070 gth mRNA 5869883 5872798 . + . ID=mRNA520;Parent=gene488 NC_003070 gth exon 5869883 5870106 0.812500 + . Parent=mRNA520 NC_003070 gth exon 5872420 5872515 0.781250 + . Parent=mRNA520 NC_003070 gth exon 5872601 5872798 0.742424 + . Parent=mRNA520 NC_003070 gth mRNA 5869902 5870107 . + . ID=mRNA521;Parent=gene488 NC_003070 gth exon 5869902 5870107 0.766990 + . Parent=mRNA521 ### NC_003070 gth gene 5870624 5871356 . - . ID=gene489 NC_003070 gth mRNA 5870624 5871356 . - . ID=mRNA522;Parent=gene489 NC_003070 gth exon 5870624 5870822 1.000000 - . Parent=mRNA522 NC_003070 gth exon 5870939 5871023 0.976471 - . Parent=mRNA522 NC_003070 gth exon 5871121 5871356 0.775424 - . Parent=mRNA522 ### NC_003070 gth gene 5878498 5879941 . + . ID=gene490 NC_003070 gth mRNA 5878498 5879941 . + . ID=mRNA523;Parent=gene490 NC_003070 gth exon 5878498 5878703 1.000000 + . Parent=mRNA523 NC_003070 gth exon 5879390 5879510 1.000000 + . Parent=mRNA523 NC_003070 gth exon 5879589 5879941 0.980170 + . Parent=mRNA523 ### genometools-1.5.1/testdata/png_prob_4.gff3000066400000000000000000000010651211610345200204570ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 10472279 10475534 0.861423 + . ID=gene1 NC_003070 gth exon 10472279 10472330 0.788462 + . Parent=gene1 NC_003070 gth exon 10473721 10473759 0.666667 + . Parent=gene1 NC_003070 gth exon 10475053 10475534 0.869295 + . Parent=gene1 ### NC_003070 gth gene 10472500 10472941 1.000000 + . ID=gene2 NC_003070 gth exon 10472500 10472941 1.000000 + . Parent=gene2 ### NC_003070 gth gene 10474921 10475416 1.000000 + . ID=gene3 NC_003070 gth exon 10474921 10475416 1.000000 + . Parent=gene3 ### genometools-1.5.1/testdata/png_prob_5.gff3000066400000000000000000000005651211610345200204640ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 5867996 5869531 . - . ID=gene486 NC_003070 gth mRNA 5867996 5869531 . - . ID=mRNA518;Parent=gene486 NC_003070 gth exon 5867996 5868302 1.000000 - . Parent=mRNA518 NC_003070 gth exon 5868511 5868590 1.000000 - . Parent=mRNA518 NC_003070 gth exon 5869124 5869531 1.000000 - . Parent=mRNA518 ### genometools-1.5.1/testdata/png_test_1.gff3000066400000000000000000000011651211610345200204720ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 10000 ctg123 . gene 1000 9000 . + . ID=gene00001 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00002;Parent=gene00001 ctg123 . mRNA 1300 9000 . + . ID=mRNA00003;Parent=gene00001 ctg123 . exon 1300 1500 . + . Parent=mRNA00003 ctg123 . exon 1050 1500 . + . Parent=mRNA00001,mRNA00002 ctg123 . exon 3000 3902 . + . Parent=mRNA00001,mRNA00003 ctg123 . exon 5000 5500 . + . Parent=mRNA00001,mRNA00002,mRNA00003 ctg123 . exon 7000 9000 . + . Parent=mRNA00001,mRNA00002,mRNA00003 genometools-1.5.1/testdata/png_test_3.gff3000066400000000000000000000007501211610345200204730ustar00rootroot00000000000000##gff-version 3 ##sequence-region NC_003070 1 4294967295 NC_003070 gth gene 5414975 5415790 0.998350 + . ID=gene1 NC_003070 gth exon 5414975 5415294 0.996875 + . Parent=gene1 NC_003070 gth exon 5415423 5415589 1.000000 + . Parent=gene1 NC_003070 gth exon 5415672 5415790 1.000000 + . Parent=gene1 ### NC_003070 gth gene 5415008 5415564 0.995338 + . ID=gene2 NC_003070 gth exon 5415008 5415294 0.996516 + . Parent=gene2 NC_003070 gth exon 5415423 5415564 0.992958 + . Parent=gene2 ### genometools-1.5.1/testdata/prj-files/000077500000000000000000000000001211610345200175505ustar00rootroot00000000000000genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-bwt-dbat100K1.prj000066400000000000000000000005161211610345200253460ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-bwt-lcp-dbat100K1.prj000066400000000000000000000005161211610345200261220ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-dbAtinsert.fnaRandom.fna.prj000066400000000000000000000005571211610345200300000ustar00rootroot00000000000000dbfile=../testdata/Atinsert.fna 14751 11817 dbfile=../testdata/Random.fna 10148 10003 totallength=21821 specialcharacters=6269 specialranges=4313 realspecialranges=4313 lengthofspecialprefix=0 lengthofspecialsuffix=3 numofsequences=22 numofdbsequences=22 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-dbRandom-Small.fna.prj000066400000000000000000000004651211610345200265670ustar00rootroot00000000000000dbfile=../testdata/Random-Small.fna 16 13 totallength=13 specialcharacters=8 specialranges=4 realspecialranges=4 lengthofspecialprefix=0 lengthofspecialsuffix=2 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-dbRandom.fna.prj000066400000000000000000000005011211610345200255100ustar00rootroot00000000000000dbfile=../testdata/Random.fna 10148 10003 totallength=10003 specialcharacters=3318 specialranges=2196 realspecialranges=2196 lengthofspecialprefix=2 lengthofspecialsuffix=3 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-dbTTT-small.fna.prj000066400000000000000000000004601211610345200260550ustar00rootroot00000000000000dbfile=../testdata/TTT-small.fna 10 7 totallength=7 specialcharacters=2 specialranges=2 realspecialranges=2 lengthofspecialprefix=1 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 f9d95595bbd573ed54bc90dea0a612ae12a2840f.paxheader00006660000000000000000000000227121161034520020643xustar00rootroot00000000000000151 path=genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-dbat100K1at1MBWildcards.fnachntxx.fnahs5hcmvcg.fnahud98d050dee4360c438ccfc588f801c66.prj f9d95595bbd573ed54bc90dea0a612ae12a2840f.data000066400000000000000000000025721211610345200175060ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 dbfile=../testdata/at1MB 999815 772376 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/Wildcards.fna 68 52 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/chntxx.fna 158508 155939 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/hs5hcmvcg.fna 233129 229354 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/humdystrop.fna 39422 38770 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/humghcsa.fna 67600 66495 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/humhbb.fna 74522 73308 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/humhdabcd.fna 59844 58864 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/humhprtb.fna 57682 56737 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/mipacga.fna 101972 100314 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/mpocpcg.fna 123022 121024 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/mpomtcg.fna 189682 186609 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/vaccg.fna 194892 191737 dbfile=/Users/stefan/gttestdata/DNA-mix/Grumbach.fna/ychrIII.fna 320531 315339 totallength=2441929 specialcharacters=20027 specialranges=18989 realspecialranges=18989 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1966 numofdbsequences=1966 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-lcp-dbat100K1.prj000066400000000000000000000005161211610345200253300ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-suf-bwt-dbat100K1.prj000066400000000000000000000005161211610345200261410ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-suf-bwt-lcp-dbat100K1.prj000066400000000000000000000005161211610345200267150ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-suf-dbat100K1.prj000066400000000000000000000005161211610345200253470ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-suf-lcp-dbat100K1.prj000066400000000000000000000005161211610345200261230ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-tis-bwt-dbat100K1.prj000066400000000000000000000005161211610345200261430ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-tis-bwt-lcp-dbat100K1.prj000066400000000000000000000005161211610345200267170ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-tis-dbat100K1.prj000066400000000000000000000005161211610345200253510ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-tis-lcp-dbat100K1.prj000066400000000000000000000005161211610345200261250ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-tis-suf-bwt-dbat100K1.prj000066400000000000000000000005161211610345200267360ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-tis-suf-bwt-lcp-dbat100K1.prj000066400000000000000000000005161211610345200275120ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-tis-suf-dbat100K1.prj000066400000000000000000000005161211610345200261440ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/prj-files/tis-lcp-suf-bwt-tis-suf-lcp-dbat100K1.prj000066400000000000000000000005161211610345200267200ustar00rootroot00000000000000dbfile=/Users/stefan/gttestdata/Iowa/at100K1 76198 74997 totallength=74997 specialcharacters=1083 specialranges=962 realspecialranges=962 lengthofspecialprefix=0 lengthofspecialsuffix=0 numofsequences=1 numofdbsequences=1 numofquerysequences=0 prefixlength=0 largelcpvalues=0 maxbranchdepth=0 integersize=32 littleendian=1 readmode=0 genometools-1.5.1/testdata/problematic.fas000066400000000000000000000005451211610345200206550ustar00rootroot00000000000000>gb|U00096|U00096 Escherichia coli K-12 MG1655 complete genome AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC TTCTGAACTGGTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAA TATAGGCATAGCGCACAGACAGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACC ATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGACGCGTACAGGAAACACAGAAAAAAG > NTTTTNC genometools-1.5.1/testdata/pseudo_feature_minimal.gff3000066400000000000000000000004561211610345200231510ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . cDNA_match 1050 1500 5.8e-42 + . ID=cDNA_match1;Target=cdna0123 12 462 ctg123 . cDNA_match 5000 5500 8.1e-43 + . ID=cDNA_match1;Target=cdna0123 463 963 ctg123 . cDNA_match 7000 9000 1.4e-40 + . ID=cDNA_match1;Target=cdna0123 964 2964 ### genometools-1.5.1/testdata/rcr_testreads.fq000066400000000000000000000005001211610345200210440ustar00rootroot00000000000000@read:1 AGAAACCCC + ((((((((( @read:2 AACCCCCGG + &7097&%&& @read:3 this is info-text CCCCGGGG + <=<9<(<) @read:4 CCGGGTT + &7097&% @read:5 GGGGTTTT + <=<=<=<= @read:6 GGTTAACC + (())9999 @read:7 TTAACCGG + <<<<<<<< @read:8 this is other text AACCGGTT + 9999(()) @read:9 CCGGTTAA + 99==99== @read:10 GGTTAACC + ;<=9;<=9 genometools-1.5.1/testdata/rcr_testreads_on_seq.bam000066400000000000000000000010371211610345200225470ustar00rootroot00000000000000BCcsreta``p *N-424BD9=]9Tn V  9aqjBCO@Ňvlm!D8b֖z&6M8xjأ”BKC&r7oEi0S:?TSMDZo( +1ǖ5E Fo^zgC7CˇA6Xfʭ$VGtaZJgcRWsAl[ q9UUfPI_A-gЇwįsxAc7}Nyt Rܓbt,۔_Exu x-fM:[TK+1w6̷]׳^w7 ¶MS6yWmO4~of BCgenometools-1.5.1/testdata/rcr_testreads_on_seq.bam.bai000066400000000000000000000002601211610345200232760ustar00rootroot00000000000000BAIIddJdddIdJddgenometools-1.5.1/testdata/rcr_testreads_on_seq.sam000066400000000000000000000023061211610345200225700ustar00rootroot00000000000000@SQ SN:seq1 LN:16 @SQ SN:seq2 LN:16 @PG ID:bwa PN:bwa VN:0.6.1-r104 read:5 16 seq1 1 0 8M * 0 0 AAAACCCC =<=<=<=< XT:A:R NM:i:0 X0:i:2 X1:i:2 XM:i:0 XO:i:0 XG:i:0 MD:Z:8 XA:Z:seq1,+9,8M,0;seq1,+9,7M1S,1;seq1,-2,1S7M,1; read:3 0 seq1 5 0 8M * 0 0 CCCCGGGG <=<9<(<) XT:A:R NM:i:0 X0:i:2 X1:i:2 XM:i:0 XO:i:0 XG:i:0 MD:Z:8 XA:Z:seq1,+5,7M1S,1;seq1,-6,1S7M,1; read:2 16 seq1 6 0 9M * 0 0 CCGGGGGTT &&%&7907& XT:A:R NM:i:1 X0:i:6 X1:i:4 XM:i:1 XO:i:0 XG:i:0 MD:Z:2C6 read:1 16 seq1 9 0 7M1I1M * 0 0 GGGGTTTCT ((((((((( XT:A:R NM:i:1 X0:i:2 X1:i:1 XM:i:0 XO:i:1 XG:i:1 MD:Z:8 XA:Z:seq1,+1,1M1I7M,1; read:8 0 seq2 1 0 8M * 0 0 AACCGGTT 9999(()) XT:A:R NM:i:0 X0:i:4 X1:i:4 XM:i:0 XO:i:0 XG:i:0 MD:Z:8 read:4 0 seq2 3 0 2M1I4M * 0 0 CCGGGTT &7097&% XT:A:R NM:i:1 X0:i:10 X1:i:16 XM:i:0 XO:i:1 XG:i:1 MD:Z:6 read:10 0 seq2 5 0 8M * 0 0 GGTTAACC ;<=9;<=9 XT:A:R NM:i:0 X0:i:3 X1:i:3 XM:i:0 XO:i:0 XG:i:0 MD:Z:8 read:7 20 seq2 11 0 8M * 0 0 CCGGTTAA <<<<<<<< XT:A:R NM:i:0 X0:i:4 X1:i:8 XM:i:0 XO:i:0 XG:i:0 MD:Z:8 read:6 20 seq2 13 0 8M * 0 0 GGTTAACC 9999))(( XT:A:R NM:i:2 X0:i:3 X1:i:3 XM:i:0 XO:i:0 XG:i:0 MD:Z:6A0A0 read:9 20 seq2 15 0 8M * 0 0 TTAACCGG ==99==99 XT:A:R NM:i:4 X0:i:4 X1:i:5 XM:i:0 XO:i:0 XG:i:0 MD:Z:4A0A0A0A0 genometools-1.5.1/testdata/rcr_testseq.fa000066400000000000000000000000561211610345200205240ustar00rootroot00000000000000>seq1 AAAACCCCGGGGTTTT >seq2 AACCGGTTAACCGGTT genometools-1.5.1/testdata/rcr_testseq.fa.fai000066400000000000000000000000411211610345200212540ustar00rootroot00000000000000seq1 16 6 16 17 seq2 16 29 16 17 genometools-1.5.1/testdata/readjoiner/000077500000000000000000000000001211610345200177775ustar00rootroot00000000000000genometools-1.5.1/testdata/readjoiner/2x3nt_1.fas000066400000000000000000000000161211610345200216650ustar00rootroot00000000000000>0 acc >1 ccg genometools-1.5.1/testdata/readjoiner/2x3nt_2.fas000066400000000000000000000000161211610345200216660ustar00rootroot00000000000000>2 tgt >3 cga genometools-1.5.1/testdata/readjoiner/2x3nt_3.fas000066400000000000000000000000161211610345200216670ustar00rootroot00000000000000>2 tta >3 cca genometools-1.5.1/testdata/readjoiner/30x_800nt.fas000066400000000000000000000571141211610345200220450ustar00rootroot00000000000000>0 GAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGAAGAGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCGATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGATATCGAATTCCGACCCTTAGTCAGATCTGACACACAGTCCGAATTCCTGCAGCCCGGGGGATCCACTAGTTCTAGAGCGGCCGCCACCGCGGTGGAGCTCCAATTCGCCCTATAGTGAGTCGTATTACGCGCGCTCACTGGCCGTCGTTTTACAACGTCGTGACTGGGAAAACCCTGGCG >1 TCAGACCCCGTAGAAAAGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAAAAAACCACCGCTACCAGCGGTGGTTTGTTTGCCGGATCAAGAGCTACCAACTCTTTTTCCGAAGGTAACTGGCTTCAGCAGAGCGCAGATACCAAATACTGTCCTTCTAGTGTAGCCGTAGTTAGGCCACCACTTCAAGAACTCTGTAGCACCGCCTACATACCTCGCTCTGCTAATCCTGTTACCAGTGGCTGCTGCCAGTGGCGATAAGTCGTGTCTTACCGGGTTGGACTCAAGACGATAGTTACCGGATAAGGCGCAGCGGTCGGGCTGAACGGGGGGTTCGTGCACACAGCCCAGCTTGGAGCGAACGACCTACACCGAACTGAGATACCTACAGCGTGAGCTATGAGAAAGCGCCACGCTTCCCGAAGGGAGAAAGGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGA >2 TAGTGGGCCATCGCCCTGATAGACGGTTTTTCGCCCTTTGACGTTGGAGTCCACGTTCTTTAATAGTGGACTCTTGTTCCAAACTGGAACAACACTCAACCCTATCTCGGTCTATTCTTTTGATTTATAAGGGATTTTGCCGATTTCGGCCTATTGGTTAAAAAATGAGCTGATTTAACAAAAATTTAACGCGAATTTTAACAAAATATTAACGCTTACAATTTCCATTCGCCATTCAGGCTGCGCAACTGTTGGGAAGGGCGATCGGTGCGGGCCTCTTCGCTATTACGCCAGCTGGCGAAAGGGGGATGTGCTGCAAGGCGATTAAGTTGGGTAACGCCAGGGTTTTCCCAGTCACGACGTTGTAAAACGACGGCCAGTGAGCGCGCGTAATACGACTCACTATAGGGCGAATTGGAGCTCCACCGCGGTGGCGGCCGCTCTAGAACTAGTGGATCCCCCGGGCTGCAGGAATTCGGACTGTGTGTCAGATCTGACTAAGGGTCGGAATTCGATATCAAGCTTATCGATACCGTCGACCTCGAGGGGGGGCCCGGTACCCAGCTTTTGTTCCCTTTAGTGAGGGTTAATTGCGCGCTTGGCGTAATCATGGTCATAGCTGTTTCCTGTGTGAAATTGTTATCCGCTCACAATTCCACACAACATACGAGCCGGAAGCATAAAGTGTAAAGCCTGGGGTGCCTAATGAGTGAGCTAACTCACATTAATTGCGTTGCGCTCACTGCCCGCTTTCCAGTCGGGAAACCTGTCGTGCCAGCTGCATTAATGAATCGGCCAAC >3 TTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCATTGGTAACTGTCAGACCAAGTTTACTCATATATACTTTAGATTGATTTAAAACTTCATTTTTAATTTAAAAGGATCTAGGTGAAGATCCTTTTTGATAATCTCATGACCAAAATCCCTTAACGTGAGTTTTCGTTCCACTGAGCGTCAGACCCCGTAGAAAAGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAAAAAACCACCGCTACCAGCGGTGGTT >4 TCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCA >5 TGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACAGGCATCGTGGTGTCACGCTCGTCGTTTGGTA >6 GAGCAAAAGGCCAGCAAAAGGCCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGCTCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCCTGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCTGTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAA >7 TGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGATATCGAATTCCGACCCTTAGTCAGATCTGACACACAGTCCGAATTCCTGCAGCCCGGGGGATCCACTAGTTCTAGAGCGGCCGCCACCGCGGTGGAGCTCCAATTCGCCCTATAGTGAGTCGTATTACGCGCGCTCACTGGCCGTCGTTTTACAACGTCGTGACTGGGAAAACCCTGGCGTTACCCAACTTAATCGCCTTGCAGCACATCCCCCTTTCGCCAGCTGGCGTAATAGCGAAGAGGCCCGCACCGATCGCCCTTCCCAACAGTTGCGCAGCCTGAATGGCGAATGGAAATTGTAAGCGTTAATATTTTGTTAAAATTCGCGTTAAATTTTTGTTAAATCAGCTCATTTTTTAACCAATAGGCCGAAATCGGCAAAATCCCTTATAAATCAAAAGAATAGACCGAGATAGGGTTGAGTGTTGTTCCAGTTTGGAACAAGAGTCCACTATTAAAGAACGTGGACTCCAACGTCAAAGGGCGAAAAACCGTCTATCAGGGCGATGGCCCACTACGTGAACCATCACCCTAATCAAGTTTTTTGGGGTCGAGGTGCCG >8 GGATCTAGGTGAAGATCCTTTTTGATAATCTCATGACCAAAATCCCTTAACGTGAGTTTTCGTTCCACTGAGCGTCAGACCCCGTAGAAAAGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAAAAAACCACCGCTACCAGCGGTGGTTTGTTTGCCGGATCAAGAGCTACCAACTCTTTTTCCGAAGGTAACTGGCTTCAGCAGAGCGCAGATACCAAATACTGTCCTTCTAGTGTAGCCGTAGTTAGGCCACCACTTCAAGAACTCTGTAGCACCGCCTACATACCTCGCTCTGCTAATCCTGTTACCAGTGGCTGCTGCCAGTGGCGATAAGTCGTGTCTTACCGGGTTGGACTCAAGACGATAGTTACCGGATAAGGCGCAGCGGTCGGGCTGAACGGGGGGTTCGTGCACACAGCCCAGCTTGGAGCGAACGACCTACACCGAACTGAGATACCTACAGCGTGAGCTATGAGAAAGCGCCACGCTTCCCGAAGGGAGAAAGGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACC >9 GAGGAAGCGGAAGAGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCGATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGATATCGAATTCCGACCCTTAGTCAGATCTGACACACAGTCCGAATTCCTGCAGCCCGGGGGATCCACTAGTTCTAGAGCGGCCGCCACCGCGGTGGAGCTCCAATTCGCCCTATAGTGAGTCGTATTACGCGCGCTCACTGGCCGTCGTTTTACAACGTCGTGACTGGGAAAACCCTGGCGTTACCCAACTTAATCGCCTTGCAGCACATCCCCCTTTCGCCAGCTGGCGTAATAGCGAAGAGGCCCGCACCGATCGCCCTTCCCAACAGTTGCGCAGCCTGAATGGCGAATGGAAATTGTAAGCGTTAATATTTTGTTAAAATTCGCGTTAAATTTTTGTTAAATCAGCTCATTTTTTAACCAATAGGCCGAAATCGGCAAAATCCCTTATAAATCAAAAGAATAGACCGAGATAGGGTTGAGTGTTGTTCCAGTTTGGAACAAGAGTCCACTATTAAAGAACGTGGACTC >10 GAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGAAGAGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCGATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGATATCGAATTCCGACCCTTAGTCAGATCTGACACACAGTCCGAATTCCTGCAGCCCGGGGGATCCACTAGTTCTAGAGCGGCCGCCACCGCGGTGGAGCTCCAATTCGCCCTATAGTGAGTCGTATTACGCGCGCTCACTGGCCGTCGTTTTACAACGTCGTGACTGGGAAAACCCTGGCGTTACCCAA >11 AGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAAAAAACCACCGCTACCAGCGGTGGTTTGTTTGCCGGATCAAGAGCTACCAACTCTTTTTCCGAAGGTAACTGGCTTCAGCAGAGCGCAGATACCAAATACTGTCCTTCTAGTGTAGCCGTAGTTAGGCCACCACTTCAAGAACTCTGTAGCACCGCCTACATACCTCGCTCTGCTAATCCTGTTACCAGTGGCTGCTGCCAGTGGCGATAAGTCGTGTCTTACCGGGTTGGACTCAAGACGATAGTTACCGGATAAGGCGCAGCGGTCGGGCTGAACGGGGGGTTCGTGCACACAGCCCAGCTTGGAGCGAACGACCTACACCGAACTGAGATACCTACAGCGTGAGCTATGAGAAAGCGCCACGCTTCCCGAAGGGAGAAAGGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGAAGAGCGCCCAATACGC >12 GGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACAGGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGCGAGTTACATGATCCCCCATGTTGTGCAAAAAAGCGGTTAGCTCCTTCGGTCCTCCGATCGTTGTCAGAAGTAAGTTGGCCGCAGTGTTATCACTCATGGTTATGGCAGCACTGCATAATTCTCTTACTGTCATGCCATCCGTAAGATGCTTTTCTGTGACTGGTGAGTACTCAACCAAGTCATTCTGAGAATAGTGTATGCGGCGACCGAGTTGCTCTTGCCCGGCGTCAATACGGGATAATACCGCGCCACATAGCAGAACTTTAAAAGTGCTCATCATTGGAAAACGTTCTTCGGGGCGAAAACTCTCAAGGATCTTACCGCTGTTGAGATCCAGTTCGATGTAACCCACTCGTGCACCCAACTGATCTTCAGCATCTTTTACTTTCACCAGCGTTTCTGGGTGAGCAAAAACAGGAAGGCAAAATGCCGCAAAAAAGGGAATAAGGGCGACACGGAAATGTTGAATACTCATACTCTTCCTTTTTCAATATTATTGAAGCATTTATCAGGGTTA >13 GGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGAAGAGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCGATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGATATCGAATTCCGACCCTTAGTCAGATCTGACACACAGTCCGAATTCCTGCAGCCCGGGGGATCCACTAGTTCTAGAGCGGCCGCCACCGCGGTGGAGCTCCAATTCGCCCTATAGTGAGTCGTATTACGCGCGCTCACTG >14 GGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACAGGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGC >15 CGCCCTTATTCCCTTTTTTGCGGCATTTTGCCTTCCTGTTTTTGCTCACCCAGAAACGCTGGTGAAAGTAAAAGATGCTGAAGATCAGTTGGGTGCACGAGTGGGTTACATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGA >16 ATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCATTGGTAACTGTCAGACCAAGTTTACTCATATATACTTTAGATTGATTTAAAACTTCATTTTTAATTTAAAAGGATCTAGGTGAAGATCCTTTTTGATAATCTCATGACCAAAATCCCTTAACGTGAGTTTTCGTTCCACTGAGCGTCAGACCCCGTAGAAAAGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAA >17 ATTAATTGCGTTGCGCTCACTGCCCGCTTTCCAGTCGGGAAACCTGTCGTGCCAGCTGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTGCGTATTGGGCGCTCTTCCGCTTCCTCGCTCACTGACTCGCTGCGCTCGGTCGTTCGGCTGCGGCGAGCGGTATCAGCTCACTCAAAGGCGGTAATACGGTTATCCACAGAATCAGGGGATAACGCAGGAAAGAACATGTGAGCAAAAGGCCAGCAAAAGGCCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGCTCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCCTGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCTGTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGAT >18 TTTGCGGCATTTTGCCTTCCTGTTTTTGCTCACCCAGAAACGCTGGTGAAAGTAAAAGATGCTGAAGATCAGTTGGGTGCACGAGTGGGTTACATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGC >19 TGCTCACCCAGAAACGCTGGTGAAAGTAAAAGATGCTGAAGATCAGTTGGGTGCACGAGTGGGTTACATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCATTGGTAACTGT >20 ACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACAGGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGCGAGTTACATGATCCCCCATGTTGTGCAAAAAAGCGGTTAGCTCCTTCGGTCCTCCGATCGTTGTCAGAAGTAAGTTGGCCGCAGTGTTATCACTCATGGTTATGGCAGCACTGCATAATTCTCTTACTGTCATGCCATCCGTAAGATGCTTTTCTGTGACTGGTGAGTACTCAACCAAGTCATTCTGAGAATAGTGTATGCGGCGACCGAGTTGCTCTTGCCCGGCGTCAATACGGGATAATACCGCGCCACATAGCAGAACTTTAAAAGTGCTCATCATTGGAAAACGTTCTTCGGGGCGAAAACTCTCAAGGATCTTACCGCTGTTGAGATCCAGTTCGATGTAACCCACTCGTGCACCCAACTGATCTTCAGCATCTTTTACTTTCACCAGCGTTTCTGGGTGAGCAAAAACAGGAAGGCAAAATGCCGCAAAAAAGGGAATAAGGGCGACACGGAAATGTTGAATACTCATACTCTTCCTTTTTCAATATTATTGAAGCATTTATC >21 ACGTTCTTTAATAGTGGACTCTTGTTCCAAACTGGAACAACACTCAACCCTATCTCGGTCTATTCTTTTGATTTATAAGGGATTTTGCCGATTTCGGCCTATTGGTTAAAAAATGAGCTGATTTAACAAAAATTTAACGCGAATTTTAACAAAATATTAACGCTTACAATTTCCATTCGCCATTCAGGCTGCGCAACTGTTGGGAAGGGCGATCGGTGCGGGCCTCTTCGCTATTACGCCAGCTGGCGAAAGGGGGATGTGCTGCAAGGCGATTAAGTTGGGTAACGCCAGGGTTTTCCCAGTCACGACGTTGTAAAACGACGGCCAGTGAGCGCGCGTAATACGACTCACTATAGGGCGAATTGGAGCTCCACCGCGGTGGCGGCCGCTCTAGAACTAGTGGATCCCCCGGGCTGCAGGAATTCGGACTGTGTGTCAGATCTGACTAAGGGTCGGAATTCGATATCAAGCTTATCGATACCGTCGACCTCGAGGGGGGGCCCGGTACCCAGCTTTTGTTCCCTTTAGTGAGGGTTAATTGCGCGCTTGGCGTAATCATGGTCATAGCTGTTTCCTGTGTGAAATTGTTATCCGCTCACAATTCCACACAACATACGAGCCGGAAGCATAAAGTGTAAAGCCTGGGGTGCCTAATGAGTGAGCTAACTCACATTAATTGCGTTGCGCTCACTGCCCGCTTTCCAGTCGGGAAACCTGTCGTGCCAGCTGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTGCGTATTGGGCGCTCTTCCGCTTCCTCGCTCAC >22 TTCCTGTTTTTGCTCACCCAGAAACGCTGGTGAAAGTAAAAGATGCTGAAGATCAGTTGGGTGCACGAGTGGGTTACATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCAT >23 ACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCCTGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCTGTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTG >24 TTTAAAAGGATCTAGGTGAAGATCCTTTTTGATAATCTCATGACCAAAATCCCTTAACGTGAGTTTTCGTTCCACTGAGCGTCAGACCCCGTAGAAAAGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAAAAAACCACCGCTACCAGCGGTGGTTTGTTTGCCGGATCAAGAGCTACCAACTCTTTTTCCGAAGGTAACTGGCTTCAGCAGAGCGCAGATACCAAATACTGTCCTTCTAGTGTAGCCGTAGTTAGGCCACCACTTCAAGAACTCTGTAGCACCGCCTACATACCTCGCTCTGCTAATCCTGTTACCAGTGGCTGCTGCCAGTGGCGATAAGTCGTGTCTTACCGGGTTGGACTCAAGACGATAGTTACCGGATAAGGCGCAGCGGTCGGGCTGAACGGGGGGTTCGTGCACACAGCCCAGCTTGGAGCGAACGACCTACACCGAACTGAGATACCTACAGCGTGAGCTATGAGAAAGCGCCACGCTTCCCGAAGGGAGAAAGGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCG >25 TGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTT >26 CATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCATTGGTAACTGTCAGACCAAGTTTACTCATATATACTTTAGATTGATTTAAAACTTCATTTTTAATTTAAAAGGATCT >27 GCTCACTGCCCGCTTTCCAGTCGGGAAACCTGTCGTGCCAGCTGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTGCGTATTGGGCGCTCTTCCGCTTCCTCGCTCACTGACTCGCTGCGCTCGGTCGTTCGGCTGCGGCGAGCGGTATCAGCTCACTCAAAGGCGGTAATACGGTTATCCACAGAATCAGGGGATAACGCAGGAAAGAACATGTGAGCAAAAGGCCAGCAAAAGGCCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGCTCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCCTGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCTGTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACC >28 AGTTACCGGATAAGGCGCAGCGGTCGGGCTGAACGGGGGGTTCGTGCACACAGCCCAGCTTGGAGCGAACGACCTACACCGAACTGAGATACCTACAGCGTGAGCTATGAGAAAGCGCCACGCTTCCCGAAGGGAGAAAGGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGAAGAGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCGATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGAT >29 TCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCA genometools-1.5.1/testdata/readjoiner/30x_long_varlen.fas000066400000000000000000000553341211610345200235040ustar00rootroot00000000000000>0 AGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGAAGAGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCGATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGATATCGAATTCCGACCCTTAGTCAGATCTGACACACAGTCCGAATTCCTGCAGCCCGGGGGATCCACTAGTTCTAGAGCGGCCGCCACCGCGGTGGAGCTCCAATTCGCCCTATAGTGAGTCGTATTACGCGCGCTCACTGGCCGTCGTTTTACAACGTCGTGACTGGGAAAACCCTGGCG >1 TCAGACCCCGTAGAAAGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAAAAAACCACCGCTACCAGCGGTGGTTTGTTTGCCGGATCAAGAGCTACCAACTCTTTTTCCGAAGGTAACTGGCTTCAGCAGAGCGCAGATACCAAATACTGTCCTTCTAGTGTAGCCGTAGTTAGGCCACCACTTCAAGAACTCTGTAGCACCGCCTACATACCTCGCTCTGCTAATCCTGTTACCAGTGGCTGCTGCCAGTGGCGATAAGTCGTGTCTTACCGGGTTGGACTCAAGACGATAGTTACCGGATAAGGCGCAGCGGTCGGGCTGAACGGGGGGTTCGTGCACACAGCCCAGCTTGGAGCGAACGACCTACACCGAACTGAGATACCTACAGCGTGAGCTATGAGAAAGCGCCACGCTTCCCGAAGGGAGAAAGGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGA >2 TAGTGGGCCATCGCATAGACGGTTTTTCGCCCTTTGACGTTGGAGTCCACGTTCTTTAATAGTGGACTCTTGTTCCAAACTGGAACAACACTCAACCCTATCTCGGTCTATTCTTTTGATTTATAAGGGATTTTGCCGATTTCGGCCTATTGGTTAAAAAATGAGCTGATTTAACAAAAATTTAACGCGAATTTTAACAAAATATTAACGCTTACAATTTCCATTCGCCATTCAGGCTGCGCAACTGTTGGGAAGGGCGATCGGTGCGGGCCTCTTCGCTATTACGCCAGCTGGCGAAAGGGGGATGTGCTGCAAGGCGATTAAGTTGGGTAACGCCAGGGTTTTCCCAGTCACGACGTTGTAAAACGACGGCCAGTGAGCGCGCGTAATACGACTCACTATAGGGCGAATTGGAGCTCCACCGCGGTGGCGGCCGCTCTAGAACTAGTGGATCCCCCGGGCTGCAGGAATTCGGACTGTGTGTCAGATCTGACTAAGGGTCGGAATTCGATATCAAGCTTATCGATACCGTCGACCTCGAGGGGGGGCCCGGTACCCAGCTTTTGTTCCCTTTAGTGAGGGTTAATTGCGCGCTTGGCGTAATCATGGTCATAGCTGTTTCCTGTGTGAAATTGTTATCCGCTCACAATTCCACACAACATACGAGCCGGAAGCATAAAGTGTAAAGCCTGGGGTGCCTAATGAGTGAGCTAACTCACATTAATTGCGTTGCGCTCACTGCCCGCTTTCCAGTCGGGAAACCTGTCGTGCCAGCTGCATTAATGAATCGGCCAAC >3 TTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCATTGGTAACTGTCAGACCAAGTTTACTCATATATACTTTAGATTGATTTAAAACTTCATTTTTAATTTAAAAGGATCTAGGTGAAGATCCTTTTTGATAATCTCATGACCAAAATCCCTTAACGTGAGTTTTCGTTCCACTGAGCGTCAGACCCCGTAGAAAAGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAAAAAACCACCGCTACCAGCGGTGGTTAAA >4 TCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGGCCA >5 TGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACAGGCATCGTGGTGTCACGCTCGTCGTTGGTA >6 GAGCAAAAGGCCAGCAAAAGGCCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGCTCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCCTGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCTGTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAA >7 TGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGATATCGAATTCCGACCCTTAGTCAGATCTGACACACAGTCCGAATTCCTGCAGCCCGGGGGATCCACTAGTTCTAGAGCGGCCGCCACCGCGGTGGAGCTCCAATTCGCCCTATAGTGAGTCGTATTACGCGCGCTCACTGGCCGTCGTTTTACAACGTCGTGACTGGGAAAACCCTGGCGTTACCCAACTTAATCGCCTTGCAGCACATCCCCCTTTCGCCAGCTGGCGTAATAGCGAAGAGGCCCGCACCGATCGCCCTTCCCAACAGTTGCGCAGCCTGAATGGCGAATGGAAATTGTAAGCGTTAATATTTTGTTAAAATTCGCGTTAAATTTTTGTTAAATCAGCTCATTTTTTAACCAATAGGCCGAAATCGGCAAAATCCCTTATAAATCAAAAGAATAGACCGAGATAGGGTTGAGTGTTGTTCCAGTTTGGAACAAGAGTCCACTATTAAAGAACGTGGACTCCAACGTCAAAGGGCGAAAAACCGTCTATCAGGGCGATGGCCCACTACGTGAACCATCACCCTAATCAAGTTTTTTGGGGTCGAGTGCCG >8 GGATCTAGGTGAAGATCCTTTTTGATAATCTCATGACCAAAATCCCTTAACGTGAGTTTTCGTTCCACTGAGCGTCAGACCCCGTAGAAAAGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAAAAAACCACCGCTACCAGCGGTGGTTTGTTTGCCGGATCAAGAGCTACCAACTCTTTTTCCGAAGGTAACTGGCTTCAGCAGAGCGCAGATACCAAATACTGTCCTTCTAGTGTAGCCGTAGTTAGGCCACCACTTCAAGAACTCTGTAGCACCGCCTACATACCTCGCTCTGCTAATCCTGTTACCAGTGGCTGCTGCCAGTGGCGATAAGTCGTGTCTTACCGGGTTGGACTCAAGACGATAGTTACCGGATAAGGCGCAGCGGTCGGGCTGAACGGGGGGTTCGTGCACACAGCCCAGCTTGGAGCGAACGACCTACACCGAACTGAGATACCTACAGCGTGAGCTATGAGAAAGCGCCACGCTTCCCGAAGGGAGAAAGGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTAACACC >9 GAGGAAGCGGAAGAGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCGATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGATATCGAATTCCGACCCTTAGTCAGATCTGACACACAGTCCGAATTCCTGCAGCCCGGGGGATCCACTAGTTCTAGAGCGGCCGCCACCGCGGTGGAGCTCCAATTCGCCCTATAGTGAGTCGTATTACGCGCGCTCACTGGCCGTCGTTTTACAACGTCGTGACTGGGAAAACCCTGGCGTTACCCAACTTAATCGCCTTGCAGCACATCCCCCTTTCGCCAGCTGGCGTAATAGCGAAGAGGCCCGCACCGATCGCCCTTCCCAACAGTTGCGCAGCCTGAATGGCGAATGGAAATTGTAAGCGTTAATATTTTGTTAAAATTCGCGTTAAATTTTTGTTAAATCAGCTCATTTTTTAACCAATAGGCCGAAATCGGCAAAATCCCTTATAAATCAAAAGAATAGACCGAGATAGGGTTGAGTGTTGTTCCAGTTTGGAACAAGAGTCCACTATTAAAGAACGCTC >10 GAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGAAGAGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCGATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGATATCGAATTCCGACCCTTAGTCAGATCTGACACACAGTCCGAATTCCTGCAGCCCGGGGGATCCACTAGTTCTAGAGCGGCCGCCACCGCGGTGGAGCTCCAATTCGCCCTATAGTGAGTCGTATTACGCGCGCTCACTGGCCGTCGTTTTACAACGTCGTGACTGGGAAAACCCTGGCGTTACCCAA >11 AGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAAAAAACCACCGCTACCAGCGGTGGTTTGTTTGCCGGATCAAGAGCTACCAACTCTTTTTCCGAAGGTAACTGGCTTCAGCAGAGCGCAGATACCAAATACTGTCCTTCTAGTGTAGCCGTAGTTAGGCCACCACTTCAAGAACTCTGTAGCACCGCCTACATACCTCGCTCTGCTAATCCTGTTACCAGTGGCTGCTGCCAGTGGCGATAAGTCGTGTCTTACCGGGTTGGACTCAAGACGATAGTTACCGGATAAGGCGCAGCGGTCGGGCTGAACGGGGGGTTCGTGCACACAGCCCAGCTTGGAGCGAACGACCTACACCGAACTGAGATACCTACAGCGTGAGCTATGAGAAAGCGCCACGCTTCCCGAAGGGAGAAAGGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGAAGAGCGCCCAACGC >12 GGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACAGGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGCGAGTTACATGATCCCCCATGTTGTGCAAAAAAGCGGTTAGCTCCTTCGGTCCTCCGATCGTTGTCAGAAGTAAGTTGGCCGCAGTGTTATCACTCATGGTTATGGCAGCACTGCATAATTCTCTTACTGTCATGCCATCCGTAAGATGCTTTTCTGTGACTGGTGAGTACTCAACCAAGTCATTCTGAGAATAGTGTATGCGGCGACCGAGTTGCTCTTGCCCGGCGTCAATACGGGATAATACCGCGCCACATAGCAGAACTTTAAAAGTGCTCATCATTGGAAAACGTTCTTCGGGGCGAAAACTCTCAAGGATCTTACCGCTGTTGAGATCCAGTTCGATGTAACCCACTCGTGCACCCAACTGATCTTCAGCATCTTTTACTTTCACCAGCGTTTCTGGGTGAGCAAAAACAGGAAGGCAAAATGCCGCAAAAAAGGGAATAAGGGCGACACGGAAATGTTGAATACTCATACTCTTCCTTTTTCAATATTATTGAAGCATTTATCAAGGGTTA >13 GGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGAAGAGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCGATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGATATCGAATTCCGACCCTTAGTCAGATCTGACACACAGTCCGAATTCCTGCAGCCCGGGGGATCCACTAGTTCTAGAGCGGCCGCCACCGCGGTGGAGCTCCAATTCGCCCTATAGTGAGTCGTATTACGCGCGCTCACTG >14 CAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACAGGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGC >15 CGCCCTTATTCCCTTTTTTGCGGCATTTTGCCTTCCTGTTTTTGCTCACCCAGAAACGCTGGTGAAAGTAAAAGATGCTGAAGATCAGTTGGGTGCACGAGTGGGTTACATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAAAGACAGA >16 ATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAGGACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCATTGGTAACTGTCAGACCAAGTTTACTCATATATACTTTAGATTGATTTAAAACTTCATTTTTAATTTAAAAGGATCTAGGTGAAGATCCTTTTTGATAATCTCATGACCAAAATCCCTTAACGTGAGTTTTCGTTCCACTGAGCGTCAGACCCCGTAGAAAAGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAA >17 ATTAATTGCGTTGCGCTCACTGCCCGCTTTCCAGTCGGGAAACCTGTCGTGCCAGCTGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTGCGTATTGGGCGCTCTTCCGCTTCCTCGCTCACTGACTCGCTGCGCTCGGTCGTTCGGCTGCGGCGAGCGGTATCAGCTCACAAGGCGGTAATACGGTTATCCACAGAATCAGGGGATAACGCAGGAAAGAACATGTGAGCAAAAGGCCAGCAAAAGGCCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGCTCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCCTGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCTGTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGAT >18 TTTGCGGCATTTTGCCTTCCTGTTTTTGCTCACCCAGAAACGCTGGTGAAAGTAAAAGATGCTGAAGATCAGTTGGGTGCACGAGTGGGTTACATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATACAGTAAGAGAATTGATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGC >19 TGCTCACCCAGAAACGCTGGTGAAAGTAAAAGATGCTGAAGATCAGTTGGGTGCACGAGTGGGTTACATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCATTGGTAACTGT >20 ACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACAGGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGCGAGTTACATGATCCCCCATGTTGTGCAAAAAAGCGGTTAGCTCCTTCGGTCCTCCGATCGTTGTCAGAAGTAAGTTGGCCGCAGTGTTATCACTCATGGTTATGGCAGCACTGCATAATTCTCTTACTGTCATGCCATCCGTAAGATGCTTTTCTGTGACTGGTGAGTACTCAACCAAGTCATTCTGAGAATAGTGTATGCGGCGACCGAGTTGCTCTTGCCCGGCGTCAATACGGGATAATACCGCGCCACATAGCAGAACTTTAAAAGTGCTCATCATTGGAAAACGTTCTTCGGGGCGAAAACTCTCAAGGATCTTACCGCTGTTGAGATCCAGTTCGATGTAACCCACTCGTGCACCCAACTGATCTTCAGCATCTTTTACTTTCACCAGCGTTTCTGGGTGAGCAAAAACAGGAAGGCAAAATGCCGCAAAAAAGGGAATAAGGGCGACACGGAAATGTTGAATACTCATACTCTTCCTTTTTCAATATTATTGAAGCATTTATC >21 ACGTTCTTTAATAGTGGACTCTTGTTCCAAACTGGAACAACACTCAACCCTATCTCGGTCTATTCTTTTGATTTATAAGGGATTTTGCCGATTTCGGCCTATTGGTTAAAAAATGAGCTGATTTAACAAAAATTTAACGCGAATTTTAACAAAATATTAACGCTTACAATTTCCATTCGCCATTCAGGCTGCGCAACTGTTGGGAAGGGCGATCGGTGCGGGCCTCTTCGCTATTACGCCAGCTGGCGAAAGGGGGATGTGCTGCAAGGCGATTAAGTTGGGTAACGCCAGGGTTTTCCCAGTCACGACGTTGTAAAACGACCAGTGAGCGCGCGTAATACGACTCACTATAGGGCGAATTGGAGCTCCACCGCGGTGGCGGCCGCTCTAGAACTAGTGGATCCCCCGGGCTGCAGGAATTCGGACTGTGTGTCAGATCTGACTAAGGGTCGGAATTCGATATCAAGCTTATCGATACCGTCGACCTCGAGGGGGGGCCCGGTACCCAGCTTTTGTTCCCTTTAGTGAGGGTTAATTGCGCGCTTGGCGTAATCATGGTCATAGCTGTTTCCTGTGTGAAATTGTTATCCGCTCACAATTCCACACAACATACGAGCCGGAAGCATAAAGTGTAAAGCCTGGGGTGCCTAATGAGTGAGCTAACTCACATTAATTGCGTTGCGCTCACTGCCCGCTTTCCAGTCGGGAAACCTGTCGTGCCAGCTGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTGCGTATTGGGCGCTCTTCCGCTTCCTCGCTCAC >22 TTCCTGTTTTTGCTCACCCAGAAACGCTGGTGAAAGTAAAAGATGCTGAAGATCAGTTGGGTGCACGAGTGGGTTACATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCAT >23 ACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCCTGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCTGTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTG >24 TTTAAAAGGATCTAGGTGAAGATCCTTTTTGATAATCTCATGACCAAAATCCCTTAACGTGAGTTTTCGTTCCACTGAGCGTCAGACCCCGTAGAAAAGATCAAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCTTGCAAACAAAAAAACCACCGCTACCAGCGGTGGTTTGTTTGCCGGATCAAGAGCTACCAACTCTTTTTCCGAAGGTAACTGGCTTCAGCAGAGCGCAGATACCAAATACTGTCCTTCTAGTGTAGCCGTAGTTAGGCCACCACTTCAAGAACTCTGTAGCACCGCCTACATACCAAAATCGCTCTGCTAATCCTGTTACCAGTGGCTGCTGCCAGTGGCGATAAGTCGTGTCTTACCGGGTTGGACTCAAGACGATAGTTACCGGATAAGGCGCAGCGGTCGGGCTGAACGGGGGGTTCGTGCACACAGCCCAGCTTGGAGCGAACGACCTACACCGAACTGAGATACCTACAGCGTGAGCTATGAGAAAGCGCCACGCTTCCCGAAGGGAGAAAGGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCG >25 TGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAACTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTT >26 CATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACACAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGGTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACAAAGGGGAAAAAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCATTGGTAACTGTCAGACCAAGTTTACTCATATATACTTTAGATTGATTTAAAACTTCATTTTTAATTTAAAAGGATCT >27 GCTCACTGCCCGCTTTCCAGTCG >28 AGTTACCGGATAAGGCGCAGCGAACGGGGGGTTCGTGCACACAGCCCAGCTTGGAGCGAACGACCTACACCGAACTGAGATACCTACAGCGTGAGCTATGAGAAAGCGCCACGCTTCCCGAAGGGAGAAAGGCGGACAGGTATCCGGTAAGCGGCAGGGTCGGAACAGGAGAGCGCACGAGGGAGCTTCCAGGGGGAAACGCCTGGTATCTTTATAGTCCTGTCGGGTTTCGCCACCTCTGACTTGAGCGTCGATTTTTGTGATGCTCGTCAGGGGGGCGGAGCCTATGGAAAAACGCCAGCAACGCGGCCTTTTTACGGTTCCTGGCCTTTTGCTGGCCTTTTGCTCACATGTTCTTTCCTGCGTTATCCCCTGATTCTGTGGATAACCGTATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCGGAAGAGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCGATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGAGCGCAACGCAATTAATGTGAGTTAGCTCACTCATTAGGCACCCCAGGCTTTACACTTTATGCTTCCGGCTCGTATGTTGTGTGGAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACCATGATTACGCCAAGCGCGCAATTAACCCTCACTAAAGGGAACAAAAGCTGGGTACCGGGCCCCCCCTCGAGGTCGACGGTATCGATAAGCTTGAT >29 TCAGCCCGACCGCTGCGCCTTATATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTAAATCCCCAAAGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCAAAAAAAAAAAAAAAAAAAAAAAA genometools-1.5.1/testdata/readjoiner/70x_100nt.fas000066400000000000000000000162541211610345200220420ustar00rootroot00000000000000>0 cttgttcctgacctgggatcccgcaggatggaatttaggccccaccctgtggccctggaggaggtagtgccatgccctccttgggcatgaagctgacttt >1 gggatggcagaggccatgtttgccactgtcctaaagcctaaagcagcctgtggaatgtgggtggggtgaactggctgagtggctgtatcatagggcctgt >2 ggtcaggagactgagaccatcctagctaagacagtgaaaacccgtctctactaaaaatacaaaaaattagccaggcatggtggcaggtgcctgtagtccc >3 ttttgctgctcacaggctggtgggaagagaccattactgttccccgcaggagcccagtagcaaagtgccaggaccctggacctgtgtggggccctgggac >4 gtgatcagtggcccatcgcctgccctcgtggtgggtgcagttcacaggtgctgccccaggcctggcacagtggccttttcagcctgtcccaggatagggg >5 tggtgccacctgggacctgctgggctgtagccacaataggctgagcaaaaggtgagtgcctcccacaaggacgaccaaggggatgtggacaccacagagt >6 gagggcaggcctgcctttgaggctgtgaggcagggctgcggcaggcagtggccagtggagggaacggggtgggtgccgaggggctacatggccatctccc >7 ctttctttctttctttctttctttttgttttctttcatctttccttcttcttttttgatggagtctcactctgttgcctgggctggagtgcagtaagtgg >8 aatttggctaagcaattgtacttctagattatttatttatttatttatttatttatttatttattattgggacagagtctcactctgtcccccagactgg >9 ccaaatggtgctgggattacaggtttgagccaccgcacctggccagtttataatgttcataatggcttttggagcaggaaccagtgggtgctgcttcttg >10 atgaaggtggcattgagggctgaagtctccctcaccatgaagggatgatgtatagtgggtggggcctcaggaggaagagggccaccaaccctacctggcc >11 cagataccaaacacccagaaattccatcttgtcatttatttccacaagaaaaaacaagagacctgtattaaaatatccacttctattgaaaataatcaca >12 gaaaggtcagctccatgggtctcagctggctgggcccatttgggagttctatctttggggaaggatgctttcctaggctctgttgcacgctggccctagg >13 aagcttctccaagcaggcttggaaagaaatttccgcatatcacttacgtcactcttgccactagaaggacaatttttacggtggagtggaagaaaatgaa >14 aaggatgccatttttaatctgggctcgtacaaagtcaatcattctttggtgcctggcaatggtggccactgcagacactttaatcttgggctaggaattg >15 gagactccatctcagaataaataagtaaataaattaattaatttttaaaatcccactacacaggaaaccattctttcatcctggacctctaggtctctgc >16 ttgagaagggatgattgtattttgcaatgtgagaaggacatgagatttgaagggccagggatggaatgaaatagtttggatgttgtaccctttaagtcgc >17 aaagggctccagatgagctcaggccatggcctcagagggtgcaaactataagccttggtggcttccatgtggtgttaagcctgcaggtgagcaaagtgca >18 caagctctccaggctgagggaacaggagcaggggttatgttgggtgaaagtggaagtgagggacctcccaggaggtgtagaatattccactagggacacc >19 caagtagaatatattatgcttgaatgaaattatgagttgagagtaggaaatctatggttaaccaaacaaattaaataatgtttatgaggaaattatactg >20 gctgggatgagctgctgcaaagatttctgaaatgccttcaagacctttttttaattgtcttggctatcagcacctagctttttttcagttatgcaaatgt >21 aaaacctgaaatcactagaaaggaatgtctagtgacttgtgggggccaaggcccttgttatggggatgaaggctcttaggtggtagccctccaagagaat >22 ctatactcagatccaggagcaaagaaatgacttaaagctggaatttatgtttaaacaggaagcagaccagaaaaatttggaaaatttgcagtctggccat >23 aagggtcctcagggaggttttacacatggcagaaggtgaagcaaaagaaggtatgtcacatggccagagcaggagcaagcagggagaggtgccacacact >24 gtgaatttttcttaatatgctctggcaggatcagaaaactaattatttacactagagtcacttaacctttcctcttggtcatttgcatgtaaattatttt >25 tcaggaggtcctgacagcatgtgcccaaggtggtcaggatacagcttgcttctatatattttagggagaaaatacatcagcctgtaaacaaaaaattaaa >26 gcccctggtgtttctccctcaccagggagcagcaccttttgccagtgactcatctggcaggtatctcaagtcagcccttgcctggcctggcaccttgctg >27 agagacaggattcatgccaagcctgcctacccagcacatctctcctcatggacatgagagaaaaccctccagcttggccctcacatctgtgaaacccaca >28 ttgtcatatacagatgctcacattgttttgtttatatgaaaatgtttgtaactactacgcgcatttttgctacttaagccttttggtcttgctgccatag >29 tgagacggagtctcactgttgcccaggctggagtgcagtggcatgatttcagctcactgtcgtctctgcctccctgactcaagtgattctcctgcctcag >30 ttatatacatatatatctgtctaatatatatacacatatacatatatatgtatatgtgtatatatacatatacatatataatatatgtatatgtgtatat >31 gaacatagggttagcccagaaagtccatcattccctcacttccagagctcctctctacagccagcctctgctggctccctggggagggtggactcctggg >32 gagagcacaatgagaaagggaaagagggacatctggacataagggccaactggagggcagggaaggtaattttccttacattttaaactcagaccacata >33 acagtgcccagttcccccaggaggacctggctcaccccaagcccacaggaagcacagggaagtttctgcatgccacagaaaccaggctctccccaagagg >34 agagacaaacatctgaaattaaaatgttttatttgagatacaagtattacaatttgacacatacatgcagaatgggtgtctttagtatgtccgaaacata >35 gccaaggtatgtttctctcctgggattactggtcagttttatttttttcctcggatagatgttttaagccataaatcttgacatagacctgatgtagacc >36 accagaccccaactccaacactgggaattacaattcaacatgcgacttaaagggtacaacatccaaactatttcattccatccctggcccttcaaatctc >37 aaggttaagtgactctagtgtaaataattagttttctgatcctgccagagcatattaagaaaaattcactttggcagaattatatggatttgaagaagta >38 gaggactttgggttcaacctaagcactttatatcctttattttcaattgggtaggagataaaataattcagcagcaataaaagtcacacttcttaaagtt >39 cctgcagcttttctgagtgtctttcctctttccccatctctcagccacttttgtgccagctctaagcacataagtgctttcttgggagaaacagactgct >40 cgagaatatgttaagataccacaaaaacaaaaaatatacatagttaagagctttcatgagtaagcaaattttatacatataaaaataatttacatgcaaa >41 ttcgaatttgccaaggtatgtttctctcctgggattactggtcagttttatttttttcctcggatagatgttttaagccataaatcttgacatagacctg >42 tcatcataaattgtaggatagatctgatccagttggcttttcagattgaaccctaggccttactccctctcaccacttaaacaattggctattaaatcag >43 ggctggtacagaggggctgagttgcagcagaagacccagcccctgagctgcagcacagagtggaggtagtggggagctgtcacctgggtatgccaccctt >44 ggaatacacagtgtcagaaggaggacctgtgtccagcccctgtgttccccactcctgggcagatgcgtacccagtgcagcgagaatgtctgcgaggggga >45 ttttacatttacccctttccatcaagatctttctcttaaagcatcaaccatgtttatagttgtacaacgactacaagttaggcttaatcatcccttagtg >46 gggaaatattcactcctgttttcttctctccccaatctcagcctttcggtgactgtttgggcaaagcctcccttgtggtaaaagatgcctcacttctggg >47 ggagggaggctgaggtgggaggattgcttgagcctaggcgttggagactacaacgatctaggattacaccactgcactccagtctcagcaacagtaagac >48 tacttttaaaaatcaagaaaatagattggtcaagagaattctgcttgttttgattttgttatcactcgattagattaactgtgttagtataaatgtcagt >49 gaggtcctctttgagggctccagccgggcataggcttctccctgggcatccagcctttctcatacatcctctgaaatttaggcagagaatgacaagcctc >50 tacctatgacctggaagcccccactttgcaccctgagatcaaaccagtgcaaatcttatatgtattgatttgtcaatgaaaacagtcaaagccagtcagg >51 tgtcaatagacttttgaagtttatgatcaatcttatttgaggattgtaggaccaacaccaaatcagagtgcagtaaacttaatttctcttctggccaact >52 acagggtggggcctaaattccatcctgcgggatcccaggtcaggaacaaggcccagggatgctgcttctgggtctgaaccccaggtatgggtcaagaggg >53 gagactaaagttttattatgcagatgaagcctccaggtagcagggttcagagagaatagatcggaaagaaacctaagatctgaaaatctgtgttgatgtt >54 gggagcagctgggagtgtggccagctgggaggtaggaggactcttggggaagtgacagtcacctgcatgaactcagggctagagagctgtggctctggga >55 tattctagggtaattattaaaacattaagaaatactctttaatcatatatgtttaaacttgtagaaaatcaataacatacaagtaaagaagatcaagaag >56 acttttaaacaaatagatcttgcaagaattcactcaccatcacaaggacagcaccagggagatgatgctagaccattcctgagaaatccatccccatgat >57 aacaaacaaacaaactgtcaaaatctgtacagtatgtgaagagatttgttctgaaccaaatatgaatgaccatggtccatgacacagccctcagaagacc >58 tgagtttaaaagcttcctttggagatgcccctggccccctccacctgtcaagaagaggccatcctatctgcctgtcaagaagaggccatcctgggcagca >59 gtcacaatgcagacattcctttctattgacaactctttcaaccaattgtcaatcagaaaaattttaaatctacttataacctggaaacccctgctttgag >60 gtagtagttacaaacattttcatataaacaaaacaatgtgagcatctgtatatgacaataactcatgcaaaaaatattttttaactgagacagaaatcat >61 tattaaataagaatgaccaggagagccatgggtaagctccctcctcagtcatcaggaccgcaacagagagttttcccctgtgtggacagggttctgaatt >62 gctcttaagactgtgtaaccctaggccatggtcactcatattggcttagaataaagctatctaaatactttggcagaatttggttttttcatcaccacaa >63 ggcatgtgccaccaccctcggctaattgtgtatttttagtagagacggggtttcaccatgttggtcaggctggtctcgaactcctgacctcaagtgatcc >64 atattattaaaagataacggaatacctaactaaaaaaaatgcgaggaggcattgatgggcccatgtttactgagcacatcctgactccagaattagaaat >65 ctcgggaggctgaggtagggcaattgcctgaacccacgaggcggaggttgcagtgagctgagatcatgtcactggactccagtctgggggacagagtgag >66 aaccatctgaatgggctttcttctaggccagggcactctaaaattgaagaacctgaacattcctttctattgataatactttcagccagttgagcccatt >67 agacaggatttttggcaagagaataaaaggtcagagttgaggcctcagtccccactattggccaaagatcattttatggaatgtatgtgaaggccaacaa >68 agacacaagtaattccaggaaaactggaatttaagttcaatatgttacactaagtacatttgaaagtgcatgcatttttattttaatttaaaaaataaat >69 atcccatgtcccccagccggaccccatgtccgggagatggccatgtagcccctcggcacccaccccgttccctccactggccactgcctgccgcagccct genometools-1.5.1/testdata/readjoiner/70x_100nt.fastq000066400000000000000000000343261211610345200224070ustar00rootroot00000000000000@0 cttgttcctgacctgggatcccgcaggatggaatttaggccccaccctgtggccctggaggaggtagtgccatgccctccttgggcatgaagctgacttt + 9=B.C==/9;;EI7I-+E,-=0+E@H8F46A/4<5EI2E/395206E>3=>3: @1 gggatggcagaggccatgtttgccactgtcctaaagcctaaagcagcctgtggaatgtgggtggggtgaactggctgagtggctgtatcatagggcctgt + +E0AHCG5/./D:81.B2=A/3414CB?88H>/>@+:9.>A@C76D2; @3 ttttgctgctcacaggctggtgggaagagaccattactgttccccgcaggagcccagtagcaaagtgccaggaccctggacctgtgtggggccctgggac + .-6F3:@@;=6?6@7I,>->6E6IIBFED7=:=4I9-003H2/+G/HF-3+A/-I,;H>BE<@+67BF1+9E8A3D+?AH31EF@D+3BG;H+3?440;,FH, @5 tggtgccacctgggacctgctgggctgtagccacaataggctgagcaaaaggtgagtgcctcccacaaggacgaccaaggggatgtggacaccacagagt + 5+EC>IH=>4+H3;;E3;9>8/D.,5<,B4FE:F>D74HEE,?5=+:?2?2I:>111;5DH?798HI762?;-G.1.968H?1H3D99>24=++3.-:-: @6 gagggcaggcctgcctttgaggctgtgaggcagggctgcggcaggcagtggccagtggagggaacggggtgggtgccgaggggctacatggccatctccc + 860-8H<+4/<1,I.,GH>E?88/A:7+E;1>,72B/>6@>I2@5@=G;C1B4,;=2IHG0>D64@IIII73/,.D0A.3>>-1I@BB;4F3HID3-H->IE98>.H2E:6I<99946,:21F:EB.= @8 aatttggctaagcaattgtacttctagattatttatttatttatttatttatttatttatttattattgggacagagtctcactctgtcccccagactgg + 5/18/,A8D4@C/-1<<3.353.DGF>C221I,9A+-:815>EI1;BIB@32E:5F@2G559D,,=?53.1 @9 ccaaatggtgctgggattacaggtttgagccaccgcacctggccagtttataatgttcataatggcttttggagcaggaaccagtgggtgctgcttcttg + A.E@E-/@H7,IA34F<-9C/+I;4@C569I@F-.,B72E59106:D9CGI-@/@86?A7B4:8D.FB1DCEA3<75,GH>>HI,;+4+@0/I093,BA8 @10 atgaaggtggcattgagggctgaagtctccctcaccatgaagggatgatgtatagtgggtggggcctcaggaggaagagggccaccaaccctacctggcc + =2?46E:-?G5I5C>+:>64.6B787B10@<37:64+305A=9950>439A @11 cagataccaaacacccagaaattccatcttgtcatttatttccacaagaaaaaacaagagacctgtattaaaatatccacttctattgaaaataatcaca + BC+55I;I55-;5?;E=@63103006/@A6?H9?:1:F85,.1/:EA1C34:0E04G162=5@3@-F;CII60-HD4H;D+FEB,.2H:=EID:84A177 @12 gaaaggtcagctccatgggtctcagctggctgggcccatttgggagttctatctttggggaaggatgctttcctaggctctgttgcacgctggccctagg + 8E39H;45@I-C0EC@7;=@0@8H5AAH620;2H1F,38.C=<11-@43D2G-BH2;0:IH-=71:BFA=E4H--I==D87FE4>E+018=7+.;G;F6?=9.D<9=<1/92.7CIC;+C15-B@6EE06HDH@4E7,247/5/IA6CA3::C+?=91EAG24ID74?<9A2602/B378FC7//;-?8G9B3,?.2943B5G3?G/ @16 ttgagaagggatgattgtattttgcaatgtgagaaggacatgagatttgaagggccagggatggaatgaaatagtttggatgttgtaccctttaagtcgc + 7?+ED-IH7:9<86;I3;+EF6.96E1;+++?;4B3C=7=<2-A-:83?>G/-BG;.CB.;7?.3DD/9;C-3D:7@/-G?C26GE>83B0525?,+777 @17 aaagggctccagatgagctcaggccatggcctcagagggtgcaaactataagccttggtggcttccatgtggtgttaagcctgcaggtgagcaaagtgca + 33;;BGDC@:G72+F4IA

    A6;C0.:C9F,I30A=F3;@C:58BF1-322C28H>A<9E04.IF673/3//-HI9@341=H5@D-/<-<3I;14II6:-D=D??D8I<:@.I,42.+->,=6>+0B+4;/I7-10>4-/1=8>A;83<>F0?30;<;--6BH2+8DE5E.D.G;?07,G:@??C/<02?2H:<4A>B/9; @20 gctgggatgagctgctgcaaagatttctgaaatgccttcaagacctttttttaattgtcttggctatcagcacctagctttttttcagttatgcaaatgt + C:F.F+@3;4.F50@=C1E:.9G97@>,H-25FD2C0,4E+=A.G,>H6,2GC?DB5H,+46I/81/B8/,>@>C=4H;D0G>;8@@6F2?>I9,307DI @21 aaaacctgaaatcactagaaaggaatgtctagtgacttgtgggggccaaggcccttgttatggggatgaaggctcttaggtggtagccctccaagagaat + 4@2+AB.-GF05+>4>.,DH5I65<5AB5D+1A+78739BE5;,@-62;/A-=164>E7C5B4@.>=,6G,G32C4;.2HE=?->;?<3=5>006?@39G75IA5GE9GIEA0:.7@/C7+@5D><1?E@G4/-I00D88E341? @23 aagggtcctcagggaggttttacacatggcagaaggtgaagcaaaagaaggtatgtcacatggccagagcaggagcaagcagggagaggtgccacacact + 2F2-//<248+GHF74?=89AGCH092E4@<=IIDFF:?B+?AC@7H2BH1>E@@@+D1+.@..A>EI<<=6;9AH6II+9+6 @24 gtgaatttttcttaatatgctctggcaggatcagaaaactaattatttacactagagtcacttaacctttcctcttggtcatttgcatgtaaattatttt + 1HA,=;=9G2@G1/=C,4;1B8180BB35+2C/?1FA/B:FBB5@H39F8/A@>2.H>614:>31HHE5>,CH9-EAF469/C?1-I?7;EECFA,128H @25 tcaggaggtcctgacagcatgtgcccaaggtggtcaggatacagcttgcttctatatattttagggagaaaatacatcagcctgtaaacaaaaaattaaa + 2C>CB96-3-69E,A,=8/4@41B.:3<./73IG6/33-4F<85G@-EF6,4B-;B-=?EF?94A.79=3DD946?3+E5A0BFD6F>-/:-;A,-67D>>@6H2?1I;/7/:6DH;8@:/?ICD196B@75BF?@1FF1:/HC9B;E6,07-E9>-,23=?3G37<7@@4;3D64CE--BC:> @27 agagacaggattcatgccaagcctgcctacccagcacatctctcctcatggacatgagagaaaaccctccagcttggccctcacatctgtgaaacccaca + ;B..;B.<<<-5HE6=9@,625BBA:=1?6-FCE?3@.-G=,8:+9H.,44G>F=5798/;>@4;?9056@4E//9+I,,.IA746D7+D41F/I.DIGE @28 ttgtcatatacagatgctcacattgttttgtttatatgaaaatgtttgtaactactacgcgcatttttgctacttaagccttttggtcttgctgccatag + -B--7B90C057::1>:67+/0G0F6965<48+95D@59HD/3I6?H7+HA>>H01BIG@F6>>/56,9F/EH-?-/ECC;/AEB7,I/:I83?48>4@= @29 tgagacggagtctcactgttgcccaggctggagtgcagtggcatgatttcagctcactgtcgtctctgcctccctgactcaagtgattctcctgcctcag + F6F6;34A=?@H9-@8:8+H0+H7G-:3:++2F7IDF8->>--3I911F2=0E:G0@;102I=B1>HC3,DD>4=D,33/5AEB<39DG4D3-:I48>F+ @30 ttatatacatatatatctgtctaatatatatacacatatacatatatatgtatatgtgtatatatacatatacatatataatatatgtatatgtgtatat + /;9+2FB01=@;4=4;EE67/I5C=:==D=.1/D/I++76FC8B0A@F4F9B9@7FD4813EB6E6E:43EE/,;,6 @31 gaacatagggttagcccagaaagtccatcattccctcacttccagagctcctctctacagccagcctctgctggctccctggggagggtggactcctggg + B:BB5DG;?0>;.:,D3?:4293G5=+2619CC3;?+1G,7=.+C+:H/GH<-,ED5:E:H=A;311G4D4D9I=9FI63@-B,;@+6A400=6+2G85. @32 gagagcacaatgagaaagggaaagagggacatctggacataagggccaactggagggcagggaaggtaattttccttacattttaaactcagaccacata + A9=0/5=,EG@7@5-6;+8=+05/B9F8?+=@>6?E=4FC=E-.=C+;I24BBAD1@@@H>.1.844,GAI= @33 acagtgcccagttcccccaggaggacctggctcaccccaagcccacaggaagcacagggaagtttctgcatgccacagaaaccaggctctccccaagagg + 9=HE=+4CF/>?D840DF>A8AC95D0C;2D-E1+?A/DC-F,B2HCIF>F:8978.IE=324IGA8B0.2I-+?HIG;@=0@F-63=I@,F??I-;3BF;A41C48.8+C=?I-ACFE;I>8I;= @35 gccaaggtatgtttctctcctgggattactggtcagttttatttttttcctcggatagatgttttaagccataaatcttgacatagacctgatgtagacc + 5820,B4HF82;+/E5>5EB+0G6EH38I,F@=04<57+1.:-G?F<;8//1F@0FA9882H5FD1D?<.I+>+F,D>.1,1.:+9<;C7@2>730@4F+ @36 accagaccccaactccaacactgggaattacaattcaacatgcgacttaaagggtacaacatccaaactatttcattccatccctggcccttcaaatctc + =38=;>,..ID>BBEI;+D6.772448DF,0FC0:-6EA4A8D.E76-<-6E5IGE956?E>:/=13B/@;1;8?881=I?D.B39A+F=.,C0EI2CF= @37 aaggttaagtgactctagtgtaaataattagttttctgatcctgccagagcatattaagaaaaattcactttggcagaattatatggatttgaagaagta + 80H7A6<4+1B49.-9A,153C89BA5G0ED9>6195?I72F?>1I3BB=0,I1<?DC2G+5;:H:,HD,AB:C@E8;>HI>3+2-GH:B16D0,EF95+H:C:E87712FEG9FD?3,31+BI+8B5/31>7@?+94C2I0E:IDI5;<=,E;1=.D+D0C=4BH=749HI6I;.>09.3EE;;H38-<,9+/B<<00+-30+3C+/A36/4C/F2>:2B-1C<847016 @40 cgagaatatgttaagataccacaaaaacaaaaaatatacatagttaagagctttcatgagtaagcaaattttatacatataaaaataatttacatgcaaa + >9H4@16C>HAFIF+=DAG?5765?/?5+219?2@136>E=B7@B00G,5:00,-H1. @41 ttcgaatttgccaaggtatgtttctctcctgggattactggtcagttttatttttttcctcggatagatgttttaagccataaatcttgacatagacctg + 4H2G:C@3.;G0+=85CDH7307H=76A+G>4I?H;1D+-I217:47,1A,;G>87;B/C<6F6@465354B=H8:337DC>0CD5C+->01-I751 @42 tcatcataaattgtaggatagatctgatccagttggcttttcagattgaaccctaggccttactccctctcaccacttaaacaattggctattaaatcag + C5B6>3GD105C:56->;BC+5I7+C5=36AB2?:D:7;B-;EDA/F36437.>3=;:;9AA7B3A<+8:699I1++,D;732770D856<3DE..G<+7+G,4A=/:?1@H-BB4>1/64>.,?B:I75-H?=C.0C,-I @44 ggaatacacagtgtcagaaggaggacctgtgtccagcccctgtgttccccactcctgggcagatgcgtacccagtgcagcgagaatgtctgcgaggggga + ;7=;3.7G=4EF6=H4HD=F+G5-7800.+C2.@?,3.I92II5F1=0+GDG;HD>=8I8?6>?4F>.4:8?<273.G37;22D=7/9+F815.<6:2E833D8?B?+4H0H?96A.673+=>;-+3==F=E?@+D-010=HD/G;:=;E @46 gggaaatattcactcctgttttcttctctccccaatctcagcctttcggtgactgtttgggcaaagcctcccttgtggtaaaagatgcctcacttctggg + 29C3D85=G5,1;I=;5H:B4;37:4.1AA=91515B:5?>I?G08EIC=,017,-/0@A3D;E5I4;F4>//E>4.BC:;B@-10./17-284C?GDDE @47 ggagggaggctgaggtgggaggattgcttgagcctaggcgttggagactacaacgatctaggattacaccactgcactccagtctcagcaacagtaagac + >>5GF6A>HF+4A<.8E>=0476EC=D@1HI;6+6<.;E3B,?.4:>E3,4.8C.<73?G-?<>F72H31.82CCBGD-//.-6<.7II1 @48 tacttttaaaaatcaagaaaatagattggtcaagagaattctgcttgttttgattttgttatcactcgattagattaactgtgttagtataaatgtcagt + 7C/2F<0C5>6A>=G4I<=D88;,B>63,<<>9A5I.A2E:D@4=9E6>-+I+H1C05=D<+5<,@D+FA61.4A329<3>F5DD6=/?-F2EGAC @49 gaggtcctctttgagggctccagccgggcataggcttctccctgggcatccagcctttctcatacatcctctgaaatttaggcagagaatgacaagcctc + +9IIC,;63EAFG:3097:.=/CCDCB?6B185601-1F96.>;<0F:31=:71I1.5591D+;@>-3-38?< @50 tacctatgacctggaagcccccactttgcaccctgagatcaaaccagtgcaaatcttatatgtattgatttgtcaatgaaaacagtcaaagccagtcagg + 8>6;;G:85.==>AF7@4/6.IB>8<45IC6<:6,F<88E?6C1?4=B3D1+B7I+?E:=A+=>3,B9D9D/95@53?1 @53 gagactaaagttttattatgcagatgaagcctccaggtagcagggttcagagagaatagatcggaaagaaacctaagatctgaaaatctgtgttgatgtt + BH7A>HAI2:?67B96+5E>3?9,FCDE3E5./.39,.9D,/<3I:DI6?-C;@-618F-C/C<9B1+42+?:I3F/=3:42D>=EF:A3H3@05C:9/9 @54 gggagcagctgggagtgtggccagctgggaggtaggaggactcttggggaagtgacagtcacctgcatgaactcagggctagagagctgtggctctggga + 51HF=.BF>5+3;G>F73<:H=A5H;E7. @55 tattctagggtaattattaaaacattaagaaatactctttaatcatatatgtttaaacttgtagaaaatcaataacatacaagtaaagaagatcaagaag + <=C<;1+/>;:8>I7I9@4?@H/;7?15.GI===FIA:E;1?F>4@28HFHH.=BH5E;B?2HIEI>H==81?,D,9, @56 acttttaaacaaatagatcttgcaagaattcactcaccatcacaaggacagcaccagggagatgatgctagaccattcctgagaaatccatccccatgat + .<7/C7.:+E:0.875@9:+F@45:-?1:7I-46F9GC-2/5=2I1,<-0>9;/23B--A->I/6?;94DG660>4<,=I,=3>9AC:6,EIF60-;>,8:?5:?544>A88:.B++.86/C9H84CG34258C,-?6G0CD8?D88H>1FE/G4D?=92,I8@:.5?7@57;;AF3-4H@691+2, @59 gtcacaatgcagacattcctttctattgacaactctttcaaccaattgtcaatcagaaaaattttaaatctacttataacctggaaacccctgctttgag + >B77?>--E=DA0=D2;898DG0482=@,=IG><@GC6,+HFI-7FBB>6/I+>?@,64/B2;BBC1221@A4 @61 tattaaataagaatgaccaggagagccatgggtaagctccctcctcagtcatcaggaccgcaacagagagttttcccctgtgtggacagggttctgaatt + 00D582C2F611>,0I84D-I<9>0CD.<5?259?C;3I2A?;.328:2?AB7/IC3,,B8?B895G;;@=C9=1D@93//A-3+H@99B:6:,6+=7I3 @62 gctcttaagactgtgtaaccctaggccatggtcactcatattggcttagaataaagctatctaaatactttggcagaatttggttttttcatcaccacaa + E.E0F1@>8+<<.:8CF3IG.8G:5B4+GH5HH;ECEC;I95C?-17-6B-/1C,;956I258I2449;8,DI.FED31-/3B.6=?634ED-G9:A41D=C06F6,590./=.1AD6+57 @65 ctcgggaggctgaggtagggcaattgcctgaacccacgaggcggaggttgcagtgagctgagatcatgtcactggactccagtctgggggacagagtgag + ,@3:D56+38,77C1C;.;38-:,3I,E4:9H0BB/HH9A;6BEI9>=0F3D?C@I=81./3=G17<=3/?57B4>6B6A=/1=<63?C1I32B=<=->/GI;GGA/0>,C>8<2E6F5.,12A:2IF<:3-B,?:3.HIDI/:A@@D644GH0=:1?F9@I5F;@<+D=AA< @67 agacaggatttttggcaagagaataaaaggtcagagttgaggcctcagtccccactattggccaaagatcattttatggaatgtatgtgaaggccaacaa + 94G+51-0G6;4451B5A3GCIG+I+5F807+B @68 agacacaagtaattccaggaaaactggaatttaagttcaatatgttacactaagtacatttgaaagtgcatgcatttttattttaatttaaaaaataaat + 1.IDH.A@-;-3G<,B.F8G0033<7.E>83C4,CCF8846-/I1B=5FFBB;=5DCB7:-CC=2+8B5H50H124F9E.6.:64E36;I.1G;<>=93= @69 atcccatgtcccccagccggaccccatgtccgggagatggccatgtagcccctcggcacccaccccgttccctccactggccactgcctgccgcagccct + 1B+;<+4D3<.+DHD@<+@4I5=17+?@95+F498GD6@F6=;GC//E+G8.<85G7.-+0-I.9,D:0read_0 ataaattatctactatatttttattatttgtgtatctacccatgttttttacatacatac ttacatttctgttgtacaaacaagtataacattaatcaatatctctattctcttctaaga caaaaaaattagtaataacgtccgtccaaactttctacact >read_1 aggagaatcgcttgaacccaggaggtggaggttgcagtgagccgagatggcaccactgca ctccagcctgggcaacagaacgagactctgtctcaaaaaaaaaaaaaaaaatgagacaca gacaagatcccacagctatcacgtttacagcaggtctgttc >read_2 ttctttttgaatagaacaaggaaaaagaactcttcaaaaagagtggaaaagatagctaat cctctgtggttttatgtgctaaaacagtcctgagatacacaagttaaacttggcatactt tggatctgggccaaaaattgtttttattggctgtagaaaat >read_3 actctgctccaacctgccctttcgaccttacttcctgctccggtgcaggaacctggctcc aggtcagcagatctatatacttcctcatgcctacatcttggcctagccagtgtggttgct ttggctttcccacctagtaaaggacaaacatatgcttatgc >read_4 atgaaaagcttttttttttttcaccatggaagggcattgaatgttgttaaatactttttc ttcaccaatggagatgactgtttatttccattattctgttaatgtggtatattacattga ttgctttttgtatgttgaacaatcttttcatactaataata >read_5 aacctttccagttggggagagattgcccctccctggaccagccaattcttagatacagca aagtgctcggcctagagtatgcctctgatagacaaattaaccaattcagagccagacccc ttctatctggcccttgtatcccaggaggcaatattctctgc >read_6 ggccttcgtgcctatacaggtccttgggagggagggaggactccttaacctctgtagtgc aggggtcagcaaactgttttctctaaagggcaaataaagacagcaaattttacagacttt cccataaggtcccaaatgcagctactccagtctgtggtgag >read_7 taagttgataacatgttaaacaaaatggatttacattttggcagtttacatggaaccaag aataacgtttttgaaacaggctttacacccatttaaatggctgaagctattcttttaaac tagaatgtatcttcagattctggaaaaaaggatgccttaga >read_8 tcctgtatactaactggctatactggaggtcagtgtgcattaaaccaaactgctgtatgg ttctccttctcctatgttcatcatctattttgctggatatgtaagtggatgcagcctgat ttctcaggagtgtctgagcattttcctctcacacagttaac >read_9 acttttcctgtaaaataatttcaaacgcaatcggaaatctgcacttctaaatttcaaaaa gaaaaattttagagttcagaaatctgctaagtacatatgggcacaaacaaagtatgtgtg tggatggcaggagtgctttctagaagaggctggaggggagg >read_10 tgtctgcaaacagggacaatttgacttcctcttttcctaattgaataccctttatttcct tctcctgcctaattgccctggccagaatttccaacactatgttgaataggagtggtgaga gagggcgtctctgtcttgtgccagttttcaaagggaatgct >read_11 attctagaacatacagttctagtgacaggaagcagaataatggtttcctaggaatgtaaa tagggttagaaaaagagttataagagaggaattatgaaaacgcatgaggaaattttgtgg gctgatgaattggaataatgaacatatccatccatcacccc >read_12 ataatatttaaactttatcctgtaacaagtattcttacattccctcttagcttaccttgc ctatcttctcacaaatacttacatttgtgttagcattcaagaaattggtccttaaccaca cattccattttcatagcagaaggattaaggaaaagccagaa >read_13 tttttcttttctaaatgcttctcctaaggcagcccactgttgtgcttgtcgtgtcacttg ggtgcctctagacatctgtacgcttctccagctgcatgggagacacacttcaccttgtgg ctcctcctttcaaaggttgcctgtgctgcatggaagaacag >read_14 agctttgagaagaaaaaaaaaaaccctatacttagtgaatgcctgtaagtatcaaagagt tgttctattgaaaggaattaacaattttttttttttttgagacagagtttcgctcttgtt gcccaggctggagtgcaatggcgcaatctcagctcactgca >read_15 ccagagcaggcggggaactccgggacgctctgctgctgctgttgtggtggtggtgttgtg ttgtgtagtgttgtgttgttgtgttattgtttttctgttgtgcagttgtgttgttgtgat tttgtgtggtggtgtggttctgtgattgtgttttgttctgt >read_16 tgtgttctcttatggaaagagaagactgtcagatttaagggcccaagcaaacaagaaaca gggcatgttaattgaaagaattattgtaattgaagtttgagtgcaaaattacacccttca taattttacacttaagtgcatttctgtccatgcttggaaag >read_17 cataaatgatttgtttttatcctgcctgccccaatcccttttccaagagactaaaagagt atctagtgcaaagtagatactcaaatattttttaataaacagtgatcccagccgcccagt gcatgttgccaaatgccaaccccataaatgatcaaacacat >read_18 gtaaataatttttagcataagtatgactcatgtaatatttgagacgtacttattctagaa aaattatttgtttatctgaaattcagttttatcctggtatcctgtattttatctgacaac cctcttccatacacaaccctaaattctcagtgttaaaaaat >read_19 cacctgaggtcaggctttcaagaccagcctggccaacagggtgaaaccctgtctctacta aaaatacaaaaattaccttgacgtggcatcctgtctgtaatcccagctacttgggaggct gaagcagaatcgcttgaacctgggaggcagaggttgcagtg >read_20 atcactgtgcagctcctctccagctattatctattaagcctctctcttactcactgaata tttcatacgtgaagtaatggaatgctgagctgtgggctgtgtactatccttttggtttcc atttaaatttacagcttgccagtatgaaaagagtcccgggg >read_21 attttattaccatgtcatcaaaaatgtctttacttaggaacctaagaggttttcttttaa tactaatacagcaactgaaaagagtaaaaccttgacatgcatctgttaaagtcccatcta tagtcatcattatcatcattgttacctttattatttaagta >read_22 aaatatatactttttttccccacgcatccatttaacatttagcaatttagaacatatctt gggacataaaaaatattaaagtattgacataatacagaatgtatcttgttatcatatgga attaaactagaaacaaaaacagaaagataatacaaaaaaac >read_23 aatatgtgtcatatactcatttagggctttataaaccttgagagatagtttgactatatt acactattccatcctcagtatatctttgagtggtaggcaaatattatcctagtaaacgag atgtatttaacgcaaatttattcccccaaagacaatataat >read_24 aaagaatgtgacatttggccgggtgtggtggctcacatctgtaattccagcactttggga ggccgaggcaggcggatcatctaaggtcaggagttcaagaccagcctgaccaacatggtg aaaccctgtctctactaaaaatacaaaaattagctgggcgt >read_25 tgcccaggctggagtgcagcggtgcaatcttggctcactgcaacctctacctcacaggtt caagcaattctcgtgcctcagcctcccgagtagctgggactacagggcgtgcgccaccac ccccagctaattttgtttgtatttttagtagagacagggtt >read_26 aggaaatcccccaaattactgaggtttgatggtgttagtgatgaattcattcaaacttct aagaaataagtaattctcacatcacaaattatttctggctcggtgcagtggctcatgcct gtaatcccagcactttgggaggccgaggcgggtggatcact >read_27 tgcgtgtccaacagtaatcccatacgattataatggctatactcaatagcctaggtgtat agtaggctataccatctgggcttgtataagtacactctatgatgttcacacaacaccaaa atcacctaacaatgcatttctcagagcgtatcctcgttgtt >read_28 ctttgtatctcattcagccttgaagtcaaagcaatgggatcctacataaatgaaatttgt tgatctagtgcaagctaatacagaaatcaatttcaatttcctttggatgtactattagtg tttatctgatggtggatttgtgttgttttaagtgatagcta >read_29 atgggctctgaaaatcccttcaataatgtcctttcaattatttaaacaactttcactatg actcagcaacatggaacaagtacccacaaaaagatcatgagcctaagaagcaaatactct atgagggtcttgattaaagcttataaataataatagacata >read_30 aagtaccatgctgttttggttactatagccttgtagtatactttgaagtcaggtagtgtg atgcctccagctttgttcttttggcttaggattgacttggcgatgcgggctcttttttgg ttccatatgaactttaaagtagttttttccaattctgtgaa >read_31 aatctgcaattgcctttccctgttgttatcattagccactctttcaacctcaattcccca gaaatcagagcttgagattatggcctagttctgattgttgatggagcatatgatttccag aggtagaaataagagatgagaagtgatgcaagcatgggggg >read_32 ataaaccaattccccctcattaaatctttccctagtaagattgcatttcttctcacagtc ctcttcttctgctgctgctttctctctcttctccttttactttatttttgtccctcttgt cctttctctgctccctttcactatttccgttttaacctccc >read_33 ctagctcacctgattcccaccctcatgccgacatgccaagaacctgaccttttgatcttt actcgtctgataaagaatggtatctccagtttgggttgaaaactacatttctcttactgt gagtgtggtttaacatcttttcagatatacttgtatatttc >read_34 cacatctttgagtagttcctttgcaaacatggactattcagtactcagctgaagaatcaa ggggagccctttgcagtcttcttcctggtactctgccccgtaaattctgaccaaactctc aactctgcctcttcaactctgagagaatgccaggctctatt >read_35 gggtacatgagatgttgtgatacaggcctgcaatgagtaataatcacatcatggaaaacg gggtatccatcccttcaagtatttattctttgtattacaaacaatccaattatacttttt aagttatttttaaatgtacaattaaattattattggctata >read_36 ggagatatttcctatgaaagcaaaaatgaaacctctactgcaagattccccttttcctga agccccgtcttcttcctgggtgtctggctcactcactctctgccctgcacagccgatccc tgtcccgatttgccctctgaaacctgcccatcactcccggc >read_37 gccctgtctctgcccttgctttttaaagggatgtttagtacacagtccttctgattgggt aacctaactggagttgttagttaagtcatgagaaaagaaaatgaggtcaagattcttaaa gaccatttacttgctgatccagaagatcagagttaaagggg >read_38 tcattcctgttgctcaggctggagtgcaatgacatggtctcagctcactgcaactctccc tcctgggttcaagtgattctcctgcctcagcctcctcagtagctgggattacaggcatcc accaccacacccggctaatttttgtatttttagtagagaca >read_39 aggctgatcagtggcttgtccatctcttctggcattttggtggctgcaagagaagtcagg aacctggtcagtggagggctcctggactgccccttctgccacctccctcctcttatacat cgtaactacacggcagtcagacattcacccagcaggtgttc >read_40 ggttatttttttctaaaaaatgatgccctaagactaccagggtgagaatcatcaatatca gaatcagatgcttgttaaaaatgaagattctcagacctgctaaatagtacttccggcatt gagctgcagaagccctatttttcacagccccaaccagaatg >read_41 ggtggatcacttgaggtcaggagctcgagagcagcctggccaacatggtgaaaccttatc tctactaaaaatacaaaagttagtgggcgcctgtagtcccagctacttgggagggtgacg cacgaaaatcacttgaacctggaaggcgaagtttgcagtga >read_42 gaaaagaaaagaaaaaggaaagaaagaaaaaggaaaaaaaaaagaaattgtataaaaata tctgtttcaatgaaaggaagaagagatacaaataagaccacaaaaaaaccattaacccca agattatatatgtataactcaacccctccaccaaagtattc >read_43 tcccatgtgtccaacacagaactcacaagactcttggctggatgtcctcttttcaggaaa gaaggttcatttttagagataattacacactgtgtaagcatagaagtctcccttttattc tgaatggtttcctgaaaacgctgtaactactgcatttagtt >read_44 taacagaacagaacagcagtgggcgtctgtgctacagatgatattcttagggtatttgct gccatccactctcctttctaaatttggtgttacagattcaacttctgtttttaaaaggga agttgcagatagatcattcacactattattttctccttaaa >read_45 ttattttcaagagaaaactgaagctaaataaaatcattctttagggctagcacacgttgt ctcgaaatagactgaattcatttgttatctatataacatttttatatgcttcacattact cactttatgccattaggaaagcactgaatctttaaagagaa >read_46 taccattattgacagagtaaaaagtcaaccaacagaatgagagaaaatacatggaaatca tttatttgataaaggtttaatattcaaattataaagaattactataactaaaaagcaaaa agataaaccacccaattaaaaataggcaaagggtttgaata >read_47 ttagaagtgcatgactgagacttctgttttttacttctggtaatattagactagacaatc aaagtctgctctttaaattaggataactgggaaacctgaactatgtatctatgtgcttga gggaatcatagagctaagaacataatgaatatttatgagaa >read_48 ttttttcccttaccttttaatatagtaaaatcctaagttgaaacatcttttggctcattt attatttcagccacgcttaatcaaaatatcttattattttagcaaacatctgtattttac ttggtaacatttaacttaggattcttatataaatattcata >read_49 tgttctttttttttaatagaagatgaacctgaaacttaataaataacactaaacatctga taaaagaatatcattgatgtttaatgagctgttctaaagtagccaaatagggaaggaacc tcctaagaagaggagctctctttaatcatttccagtattat >read_50 tagtcctggctaattttttttttttttttttttagtagagagggggtgtggctcacacct gtaacaccagcattttgggaggctgaggcaggcagatcacttgagtacaggaggtccaga tcagcctgggcagcacggtgaaatcctctctctactaaaaa >read_51 ttaagaatttcctgataaatgtcaatttgagaacattaaatatttttatagaaaaacata tgaaactaatttacttaaattgaaaaacaaggaaaaatagaatataactagttagaaaaa agtcactgttttaaatatgatttattataggactttgatag >read_52 gggcattcagttcccactcgatctgttggtggtcacgcctctcaacatctgtcttcaata gcagcagaaagtaatcaccataagatcactatgctttctcagtcggctgtatcaaatatc tataattgctctttagttagataaaagttaccgagaacaaa >read_53 cactccagccagggcaacaagagcgaaactccgtctcaaaaaaaaaaaaaaaagaaaaga aaagaaaaagaaagaaagcaagcatttttgaagccactcactgacttcactgataggatg cacagaataagtcagaaaggcaaagctcccgagtctgcttc >read_54 tgtagaccacttggaaatttcatacattgctggtgagaatgccaaatggtatagccacct agaaatcagtttgatagcttcctacaaagttaaatacacttactatatgacccatacatt ttactcctacatatttcaaatgaaattaaaattcatgtttg >read_55 aatcccattactggatatataccccccaaaatatacatttttctatgataaagatacatg catgtgtatgttcattgcagcactattcacaacagcaaagacgtggaatcagcctaaatg cccatgaatgacagactggataaagaaaatgtggtacatat >read_56 ctagtgggaggtgtttgggtcacgaatggcttcgtgccatccttgcggtaatggatgagc tcttgctctattagttcacaggagagagctggttgttaaaaagaacctgacacctcctct ctctctgtctctctctctgtctcttggtccctcttaccatg >read_57 gctataaagacacatgcacatgtatgtttattgtggcactattcccaatagcaaaacctt ggaaccaacccaaatggattaagaaaatgtggcacatatacaccatggaatattatgcaa ccataaatatgaatgagttcatgtcctttgcagggacaggg >read_58 ttccttcttcccttcctgctcaccagccggccgccggcagcggctccaggaaggagcacc aacccgcgctgggggcggaggttcaggcggcaggaatggagaggctgatcctcctctagc cccggcgcattcacttaggtgcgggagccctgaggttcagc >read_59 aggtcatgaggtcttgggattaatggctgcaaaatagccccaagggacttgtttgttttt ctaccacgtgaggaaggaggaagacacagggagaactgtgaggtctaaaacctggaaggg agccctcacccgaacccgatcgtcctggcactctgatctca >read_60 ggatttgtgtggtggttcacagctaagactgcctggattcaaatcccaaatctgccaagg caattatggggactgagcccccaacctgtgggatctgacactgtctccagataaatagcg tcagaattgagttggaggacacctagctggtgtccactgcg >read_61 tagtcctaatgatctttcccacctagttttttacatgtacttggattccccatcttcgca gccaccatttcccaatattcttctgacctgtccattccccaagactctatcctcccagaa gaaaggttacattgtagaatgattgctgaggtttatacttg >read_62 tggaagagctctcttgggattattttataagagtactagtcccatgcacctcccaatcac cttgaggaggtcccacctcttagtaccatcacctcgaaggtcaggatcccaacataagaa ttttaagggggcacaaacgttcagaccataacaccaggttc >read_63 acaggacagaaaaggttctagtactgattattacatgtggtttaggacatttaaaaatgt atgctgacatgctgacagcaaaagtatactcactgtgtacaagaaaacaaaaatctttcc acatcagcagcagagtgagttttgtaaagccttctgcatca >read_64 gccacaccagctttctttcaattcctccaatgttctcccatgctccctccatctgcagaa catcattgtttacttcaaggttcaagtaatatcaatgaaaatacaggcaaggcttctgtt ctgaatggtgcttacttctagtggagcaggagaagacatac >read_65 aaattcagggagtaaccacttctgcccgttttcttgccccacattttcacttctgattat attttcctcataggtaggagttagttatccatatttgttccttttttttttttttttttt ttgctaagaaaggtttttcttttctttcctttttttttttt >read_66 aaaagagactgacagagagagagaggaagagagagatacacacattgtactcaaagacag agagacggtacaggatcacatgaataagtctttagagtatgcatattatactctaggcca tatggcataacctgagattaaaatggtcctttcaaactaac >read_67 agataaaactaaaaaattcttgcagcaaaatttcaaaagtgcattatcatagcatcataa atatatgattgatacatatatgattggttggataattggataatagtacaatttcttata atgttcaaaactatacattattttaaactagaaaaggacat >read_68 agctcaagcaattcccccagccttgacctcccaaaatgctgggattacaggcatgagcca ccgcacccagcccacagctttgttttttgcagtaatcacctccctctcacatggggaaat atgccacaaaatatacctgaaggaggatatttaattctcca >read_69 tctgcgatgcagtcagactgcgttgatgccagtgttctcttggttcctgcaagactttct tgaggtttcttgtttccgcaagctctgaactgggctctggctttgcctcagaagcacaga gctggagcatctgtgggagaaagtggaaatggagcaataat genometools-1.5.1/testdata/readjoiner/70x_161nt_phred64.fastq000066400000000000000000000556201211610345200237520ustar00rootroot00000000000000@read_0 ataaattatctactatatttttattatttgtgtatctacccatgttttttacatacatacttacatttctgttgtacaaacaagtataacattaatcaatatctctattctcttctaagacaaaaaaattagtaataacgtccgtccaaactttctacact + VMN]]D\DVJDIeZUM]lXickYaXieIJLlf_MOGEbglJN\IEbXk\T[]jIcdI_PiHPlbedTUU[XRNGfI\ZFJSQ`_diDZU_Sd]LO[_RWiagkL]QKih[XPRNlh_KMdhJV[\\DcceSa^HQV\hiagNi]P^eHbRUcVSGL`]^XK @read_1 aggagaatcgcttgaacccaggaggtggaggttgcagtgagccgagatggcaccactgcactccagcctgggcaacagaacgagactctgtctcaaaaaaaaaaaaaaaaatgagacacagacaagatcccacagctatcacgtttacagcaggtctgttc + PWg]JFfIVFOa^LLhN]LHJSkjWOTPPORQ\WZNgaLTSQbORXNfEhZ`JGX`^SEih[j_MkXWjY]KjbeGU`JjNbDDkiXOEM]E^E]^L[YgDQlK`[OWH`[WLZHLNWF\EdYZLi_gHYRSkaNiTJKkVdFVeOabPcahcbJWjDbLR @read_2 ttctttttgaatagaacaaggaaaaagaactcttcaaaaagagtggaaaagatagctaatcctctgtggttttatgtgctaaaacagtcctgagatacacaagttaaacttggcatactttggatctgggccaaaaattgtttttattggctgtagaaaat + SVMHNMVKadIKPMDOkXYbM^[fjUcJHKLWMGWf\EW^JUWUEYUbDGH^N`f_LWKVPkTJGkIIJEaWQkMO\Kg]`ic^Q\EV[a``IcOTEKXHejT[SkbMSWJHIPL]FjW[cfikLEJcKaWNM^ElYcjOiN]E`TZFEGaYUkPeJeGUW @read_3 actctgctccaacctgccctttcgaccttacttcctgctccggtgcaggaacctggctccaggtcagcagatctatatacttcctcatgcctacatcttggcctagccagtgtggttgctttggctttcccacctagtaaaggacaaacatatgcttatgc + bZlgcWV\\[aUOPSShH]EaIJeRGJQ[UX\_VJXXhWbUbgTfQ`i^HfLbJhLQje`ki`KFeblW\]iT]TERJTVbiEMaFNTQjgNEdLGOQSaMSZONK_O[\\eOgXJJ_hEKEkl]VDFb`fHVQ^`a[eRMGigkHfOiJO`TlHXeeiSI @read_4 atgaaaagcttttttttttttcaccatggaagggcattgaatgttgttaaatactttttcttcaccaatggagatgactgtttatttccattattctgttaatgtggtatattacattgattgctttttgtatgttgaacaatcttttcatactaataata + cEINLMjeNPTQPHPM[KOSfW]hX_NggSRZ_JfeFPFIeO^PVLKG\iaPUGeMYYQ]JNEQLM\bjb[_QZVc[DfdXlXl\RJQ\lRW`dQYPGaQbWMWMUlKX`FZegWl[eUjP`kcJeJ`GXRRGMgUSeO]kGOe\UUhfgNUSRWDTWDVV @read_5 aacctttccagttggggagagattgcccctccctggaccagccaattcttagatacagcaaagtgctcggcctagagtatgcctctgatagacaaattaaccaattcagagccagaccccttctatctggcccttgtatcccaggaggcaatattctctgc + DcDGjfaY_KLlRkalJlfbQXiD[cdX]TaIggkUQlZPHLdGQFQRhWfUZRSdLFjPkFReFc`KLES_ebO`MaUgTIFM]jI`KkQ__dDMON]dTYeZ\HZbWUS`HUiWjP`MJINKlM\JG]]F\kRdhZiQ^ETT`kii\ZNWLXWTIdIMX @read_6 ggccttcgtgcctatacaggtccttgggagggagggaggactccttaacctctgtagtgcaggggtcagcaaactgttttctctaaagggcaaataaagacagcaaattttacagactttcccataaggtcccaaatgcagctactccagtctgtggtgag + k^^KQZjPGlWPOk^RVaj[kWfXSVkF^bVPD_calN[]ajWDX]fUgX__kG\gVKHNJUlMi]YRYhKIR\UY[_[XZUWhUWfKJLjhgeHW[QVf[JkI_JYVYUfjceO^bSSW^_MR[YNc]RKl^W_O]_ahQhLQGgYHIj[bMkOePjfTT @read_7 taagttgataacatgttaaacaaaatggatttacattttggcagtttacatggaaccaagaataacgtttttgaaacaggctttacacccatttaaatggctgaagctattcttttaaactagaatgtatcttcagattctggaaaaaaggatgccttaga + cfjIZhldUQLcXM^P[YbbIbUlLSYfPWNPahDXaVMGGGDFWZjjEe_JVJhMhFGcN]HliLGOL_`_c\aPZ\e]PJYlOWJeH[clOJ`IK^RLEjGMU\Dde`RlR^hHERbNQbOD`SffV`MgfMELSFMjQjUGLSS\lHGDF\VVcc[MY @read_8 tcctgtatactaactggctatactggaggtcagtgtgcattaaaccaaactgctgtatggttctccttctcctatgttcatcatctattttgctggatatgtaagtggatgcagcctgatttctcaggagtgtctgagcattttcctctcacacagttaac + WZWNSXdGESYOJKMKK_geML]HHY`\cVYRJXNUDhXDjhXkDOdiY^aUaDXEbJjXRlQPYjl_MWgDa\KOagiQeUEMbjHjb^HGMIWalkYEJhRYjQhi\U`GbD]G[XWNMFXG_FZeXHcD^IVTkgU_T_GIdFc\TH]O[kGhZIaaZ @read_9 acttttcctgtaaaataatttcaaacgcaatcggaaatctgcacttctaaatttcaaaaagaaaaattttagagttcagaaatctgctaagtacatatgggcacaaacaaagtatgtgtgtggatggcaggagtgctttctagaagaggctggaggggagg + HPV_leGYfRIZFNkeLglGc^KQl]ZI]Y[iULU^cXHXJ`VhWP]NE_NlMN`J]aS[NffMPk_Zb^_`cYEaVYdjdHUK[TZKjTLhHe\V^MTdVa^JQkaPkga_TeTYZebQFGdFT[`kagLbcKINPEJieYJG\PIN_RGWEjMlH]Vej @read_10 tgtctgcaaacagggacaatttgacttcctcttttcctaattgaataccctttatttccttctcctgcctaattgccctggccagaatttccaacactatgttgaataggagtggtgagagagggcgtctctgtcttgtgccagttttcaaagggaatgct + gk\Sh[diQbGe_GhkIXW`fij\`ecEDNG`kHRcXcaG\EiXP]^H`EZge`UOKddLhY]TRikSFbWjTIUfQLaQ]jQSRkkTSeMVLlNdIFkTcN`bb^DO`KDX^LR^]UJG[_M[\eh`\VSWVFTh]FGcKDEGW^G]HhSREUTQFSHfg @read_11 attctagaacatacagttctagtgacaggaagcagaataatggtttcctaggaatgtaaatagggttagaaaaagagttataagagaggaattatgaaaacgcatgaggaaattttgtgggctgatgaattggaataatgaacatatccatccatcacccc + ghZNK`P^DGXPPlk^HIhH^[S\IUei_iJNRlRSSHLLMDgikhjc[dZOOM`bRhVUTaa^JjfRIMXJc`]KiQ[biTccdaGbJjKaljIWgSF\V\JI^ckcEiSTIQdhFQckfaUW`QYgKf`[gWSdKiW^ZikJV`XeZNPOD`h]J^bUY @read_12 ataatatttaaactttatcctgtaacaagtattcttacattccctcttagcttaccttgcctatcttctcacaaatacttacatttgtgttagcattcaagaaattggtccttaaccacacattccattttcatagcagaaggattaaggaaaagccagaa + VaUhbL\WgiHXGeMlbQga[RIZkSTILjOUX]^S\ISWIIDH]L`SDW]XDGcDb_MLlQVihGNQLJMiDf`^EkVU_c[W\VOJDc_eOSNhXPZPdeXgbNfcHQH^c_bkFlZHkc]ebf]TGUDhld[fOdPbM`gbb]KNFSe[jIcZS\i]_ @read_13 tttttcttttctaaatgcttctcctaaggcagcccactgttgtgcttgtcgtgtcacttgggtgcctctagacatctgtacgcttctccagctgcatgggagacacacttcaccttgtggctcctcctttcaaaggttgcctgtgctgcatggaagaacag + FOcjV_RTMe]OSOES`DXGh_TO^cKiGPMJaYRSbPkdiXfiWFabP`E`ZLNdVbjS_aDIHH_IFLjjR_VYgF`lfFDlJF^eYIEY_\d^KZebHKbaHZb^^I^RRHGYJOGi`ZG`Yd\_`V^^FbhFaUTacPUgFgPKZMdLhhh\Pg`jN @read_14 agctttgagaagaaaaaaaaaaaccctatacttagtgaatgcctgtaagtatcaaagagttgttctattgaaaggaattaacaattttttttttttttgagacagagtttcgctcttgttgcccaggctggagtgcaatggcgcaatctcagctcactgca + S\aQYlDhLcO_KJUjjPeJlfaNQMOd^IIdVebQI[]\VbYSdS]FGHVFKOUehHg^RFcc[SSgcWKFc]UdLGflViVeX\USbVXaFgDPO\cIOUblM]idSIZELeIWZFh]^d^KRQDee[_gaZRShijZ_FlNgkibSO\OWjRQJGFZU @read_15 ccagagcaggcggggaactccgggacgctctgctgctgctgttgtggtggtggtgttgtgttgtgtagtgttgtgttgttgtgttattgtttttctgttgtgcagttgtgttgttgtgattttgtgtggtggtgtggttctgtgattgtgttttgttctgt + fJhacXgXFd^g_FE[\SF^iKbDYKilGXS\R\TkhNMUNXPfb\ZlkFOdli[IGYPXlJlHOh[Qbh`MOVkc\TOgXE^cP_\feaNb^cWedHbLXT\fIUMaSRRMHXfb^`ejZ\QLEb[^]EN\iSbRW[dOR\fKVIPlaKY`bFISEP_TQ @read_16 tgtgttctcttatggaaagagaagactgtcagatttaagggcccaagcaaacaagaaacagggcatgttaattgaaagaattattgtaattgaagtttgagtgcaaaattacacccttcataattttacacttaagtgcatttctgtccatgcttggaaag + L[c\MSeJ`jeSMPQkVhc`Fd]UYKOIbQ[i\MTRM_EJ[SO]SPkDY\gcffXFJRUMkYGRd^LRJFI^TkPOHkK^lEMOjfFY[[`hQJOgPEgZDRUgURJ_hiLJfEXRQJGc`iZKcaiXMO\^hUaj\TTc[YNQTeK]EalZYPHhWE]kP @read_17 cataaatgatttgtttttatcctgcctgccccaatcccttttccaagagactaaaagagtatctagtgcaaagtagatactcaaatattttttaataaacagtgatcccagccgcccagtgcatgttgccaaatgccaaccccataaatgatcaaacacat + fWkD[lZ]ldOHiaOQcIiaFIMRcQF`g\aTHIDicEklIScWbPPlP`NVQMKRbSLH]JcTKg]_leEfNkTObJg_SiD[jIScdaO[N^kk[RLeOaZbGb^KDHRfGhg\Ef^RRKEglkSJRebIfUYf]W[dO_YTXLDPiVWPZic_GTFYH @read_18 gtaaataatttttagcataagtatgactcatgtaatatttgagacgtacttattctagaaaaattatttgtttatctgaaattcagttttatcctggtatcctgtattttatctgacaaccctcttccatacacaaccctaaattctcagtgttaaaaaat + `l]TFTWaE]EbKgDRi]agKXFEHgWbbXUZa_KTdebXWLjgIYFRFcVjh^[[PXDVDVbV`VPPS]QDD[XQlkVWhFOLlaTXHdUfEVHf_]TdSGbK^eg[^GRdEgdIVYMQdUWJJEGFGTX^h[QSeRD[j^OdPOUIgIcHSN__FG\^b @read_19 cacctgaggtcaggctttcaagaccagcctggccaacagggtgaaaccctgtctctactaaaaatacaaaaattaccttgacgtggcatcctgtctgtaatcccagctacttgggaggctgaagcagaatcgcttgaacctgggaggcagaggttgcagtg + QKWTJYhZT\LgJEWdX^FJa[ckLJNbb`XQiLebhPRPjGfOYU[lOjhWMQVF^KXLe_NE\jc^VkOjUb[fdMiIdUREN_bYfeFF[Ufc[]REghbM_iFFLMRcYFfW\R_KM_SW\H[iKkZbcPfOFONP^UiXU_S\iMkDDdY[NWe\Y @read_20 atcactgtgcagctcctctccagctattatctattaagcctctctcttactcactgaatatttcatacgtgaagtaatggaatgctgagctgtgggctgtgtactatccttttggtttccatttaaatttacagcttgccagtatgaaaagagtcccgggg + VegdMNEJIl\XbdV`WN]JM^aa_PdiHVYQRLThS[SOVIlLIeL_HYQhKf^iaJ\EDXdUEf^li]gFUUVEHNkfKQI\ajL_PfFPbkGgMF^HhIkMNDeSM\R`YWZTjacbPf\RWYZl`fGbjJQTLaNfJNEDIYVj[ELb[h^IcK_Kl @read_21 attttattaccatgtcatcaaaaatgtctttacttaggaacctaagaggttttcttttaatactaatacagcaactgaaaagagtaaaaccttgacatgcatctgttaaagtcccatctatagtcatcattatcatcattgttacctttattatttaagta + jVe[bH[`b\ea\MIGegKhLkIdYXiOKRgkEQLWd\gZ^_\JEOVM`^jEFh[`gigaVTOgdjNkhLZ^hH]QRQWHliX]el`aahRcFZFZWYWDFEgFZaLDZIO\ThSdK[PO\WaTDWJX]OUhD]jRTcEkUW^TelQUMUgXFUTQVKjia @read_22 aaatatatactttttttccccacgcatccatttaacatttagcaatttagaacatatcttgggacataaaaaatattaaagtattgacataatacagaatgtatcttgttatcatatggaattaaactagaaacaaaaacagaaagataatacaaaaaaac + ^Llc[diD`hYIGceYTZde]c]_XODJdd`MDlM_GW^eSDee[Hk]Tbk`MMLcEfFYTRXUEaRIifQOgTRK_PZ]UNdhlhPidIHlWdaY[GHELDOQHXd`KY]QNNOFYElEjLHiaOE`LQV_KebLcDKDJO`NbYbXljeZTPO]fhQhM @read_23 aatatgtgtcatatactcatttagggctttataaaccttgagagatagtttgactatattacactattccatcctcagtatatctttgagtggtaggcaaatattatcctagtaaacgagatgtatttaacgcaaatttattcccccaaagacaatataat + OL_k_fbGk`YK^IgeGifYZXPNKKhGHP_iSOEjjbeHS`Zd`U\aa`DfQbFWeX^iQacVd^f^WNdEiTdgJahd\SWGiKQaHjScMXVEiRFZWMa[\e`jbH]HSEEJab[HFPHbZTjikTj]`RQSOMiJ\DUjD_jGdZbfHE\U`XhgR @read_24 aaagaatgtgacatttggccgggtgtggtggctcacatctgtaattccagcactttgggaggccgaggcaggcggatcatctaaggtcaggagttcaagaccagcctgaccaacatggtgaaaccctgtctctactaaaaatacaaaaattagctgggcgt + iHGFUlfa_YJ]XDKhgPJfbGOX]VIaKhN]XQNRjcUVNZ_jUSFSaXkFZZMleWbHiEDk^PjhblfUYXYgQFcZEHV`lcHQFY_k\OW\a`eINOk\kFbK]hSdEVWWidbGhOdHPN_k_HRYfeVVW`IbWV^QHDL_bGaY^JUg`UjSN @read_25 tgcccaggctggagtgcagcggtgcaatcttggctcactgcaacctctacctcacaggttcaagcaattctcgtgcctcagcctcccgagtagctgggactacagggcgtgcgccaccacccccagctaattttgtttgtatttttagtagagacagggtt + HaRS_VZhDhjY`]Qh\chb`kDeiUj_fdPPHOLX`fkVMSQRlelcgZG`^DlIQQZ^\MbKSLDJPFTgHgdR[aI\jQceiJ`KfcebYGaiW[EcPIiRbjDOgEhgJWLPaONU\LhjafbKJbZZhlX[KUYNQY]_kYYRS`lTHe`VaKUha @read_26 aggaaatcccccaaattactgaggtttgatggtgttagtgatgaattcattcaaacttctaagaaataagtaattctcacatcacaaattatttctggctcggtgcagtggctcatgcctgtaatcccagcactttgggaggccgaggcgggtggatcact + YRVDkdbhNlSJHXZedXgYccPDchN]Wc]FgXI_XVFX^[TfJbYLV_jGeRIXIcdZKJbYai\_eS_JeMTFXQ_cUGIk\N\[KMkeRJPGPHOFWkcHDKL^IWjS\MfkU\UGhH]PKUjXMaQkIiUNTlVjQLdMSEOWPRDRhFlEQZZTf @read_27 tgcgtgtccaacagtaatcccatacgattataatggctatactcaatagcctaggtgtatagtaggctataccatctgggcttgtataagtacactctatgatgttcacacaacaccaaaatcacctaacaatgcatttctcagagcgtatcctcgttgtt + ]RiK[\jXbf]UjaabgPX_VXMcjXHEGN\LlPaFZe\US]]NiFE[]\GiV[iT\PXkW]FYhfD[llDlhYDdSQGdK[h_aLac`OlWhcMHRGehPW`i]akfeZlVlNTVk]eNGEfFJ\Ok\diSlXkDd[gjRd_WYdZ^QJGPOZUgJkWFj @read_28 ctttgtatctcattcagccttgaagtcaaagcaatgggatcctacataaatgaaatttgttgatctagtgcaagctaatacagaaatcaatttcaatttcctttggatgtactattagtgtttatctgatggtggatttgtgttgttttaagtgatagcta + SighiehXWQjKkd]]UcHYHbPFiIdJk_liGXOF`aXUgfcfiFEiVFgQ_aHaN^GFbMTddT[_YX_kIUQQ[`k`F_WIEDGJNDPdb`WjQMURJUGb\VLcYShZWRV_^XPUaJQWMKPDigDfSbfOL^ILSFLhQif``QjT]Mhhd]lRT @read_29 atgggctctgaaaatcccttcaataatgtcctttcaattatttaaacaactttcactatgactcagcaacatggaacaagtacccacaaaaagatcatgagcctaagaagcaaatactctatgagggtcttgattaaagcttataaataataatagacata + ILh_g_EYQVIEgFJ^]XL^g\ZYh`ODblSab[Wd^\TGDfIDTjeSUPkF_Veh`k[OU\fXla_]`EEgfTkRRRDKGQ_LNg`YSQOcGh^a]MVEYQMLakEcXJkYbLceDiRRKfJlNE\gKEJFlUWlgU`f[U^iJU^P\de]leXEP`\fd @read_30 aagtaccatgctgttttggttactatagccttgtagtatactttgaagtcaggtagtgtgatgcctccagctttgttcttttggcttaggattgacttggcgatgcgggctcttttttggttccatatgaactttaaagtagttttttccaattctgtgaa + d`lLcdfXWIiU]TNEgWYTd[SUNI\d]RFh_eDER\W\QS^aicihePOagSlS^]UGecWUEXUYjRNN[MGdVlOl_MlEHHfcUWX^bbKjIcFIQjTfTiQdQfPcTkdcXh]QXF_F_aWdEUe]^fN`dfHOj\gFdOMDE\klXJLadgF[[ @read_31 aatctgcaattgcctttccctgttgttatcattagccactctttcaacctcaattccccagaaatcagagcttgagattatggcctagttctgattgttgatggagcatatgatttccagaggtagaaataagagatgagaagtgatgcaagcatgggggg + DWekaGjhZIaSQaIMEZG[OcHVJd_SPd]KakNaFdKf[[Hb`P_fUHeVeIfE^\XKaeGU_IcRRZPIO[Eb]]cNJbZgZTjM^FHJV]VRK\b]_]]GWF^_ZiVaDZZk_GlTZIebiVeS^X]ga[gVdNNi]QYlKS[QFbYSZQiHgcfKL @read_32 ataaaccaattccccctcattaaatctttccctagtaagattgcatttcttctcacagtcctcttcttctgctgctgctttctctctcttctccttttactttatttttgtccctcttgtcctttctctgctccctttcactatttccgttttaacctccc + GX^X]`hOVNij][EXaOjkhhcljcZM\aMebjbH\fT\jUfk]`c[EbTf^]aO^\MJR`SNGVNIa`I\TfX`M`kHGQFRG`J]fccVcDSb[fL^dI]TPQFgIb\a\SeYXc\kINHgZUkPLdZZcGIacifWfWkhKec_HDidjUEG\Ul[M @read_33 ctagctcacctgattcccaccctcatgccgacatgccaagaacctgaccttttgatctttactcgtctgataaagaatggtatctccagtttgggttgaaaactacatttctcttactgtgagtgtggtttaacatcttttcagatatacttgtatatttc + `OHlJTDc[e_SDIE`Df[lPOEN_[XWeGE]lD_VWhH^YckSkIYRgiIj^ULZXDdNghgQUTQJ\dKJXWaGEN^faXiPM^fjVLD]eOOLLZ_`MRb\ZINZcbQhfOMOTQYjKT`kDjXUYbaMHZkYVVGJeN\H\QLGXRfdVDMGegSZQ @read_34 cacatctttgagtagttcctttgcaaacatggactattcagtactcagctgaagaatcaaggggagccctttgcagtcttcttcctggtactctgccccgtaaattctgaccaaactctcaactctgcctcttcaactctgagagaatgccaggctctatt + c^QVFVlGQLRTZHKD^WGZbK\_eGNVIa[gU`PPUV`O]PSbKT\F[HacGHYgRYVPLE[QXMYgPgVi`QUPDHa]XkH`[SkkTNMYIIc^ZXaQYTWNEcaU]PSFlcS^`Mh]\GGgVT^\eRKUTdQSaGaPWcXR]jRZXEeSM_cFi[TRY @read_35 gggtacatgagatgttgtgatacaggcctgcaatgagtaataatcacatcatggaaaacggggtatccatcccttcaagtatttattctttgtattacaaacaatccaattatactttttaagttatttttaaatgtacaattaaattattattggctata + L[IX[kEcYd_hJkDWkiieJd`IfYf]f]VZY[cIjSLf]NYbdh]YSEPjOiOfY[kEFSf[FhSVa\TGkV[X`FbcVO]LSSckgH^ljQf_`NN_HGiUPN`LKIZRUii_VYYOQOkMG[^NgZMF`EjXLaRbUGYRXHJVcVUfVhPZF[YH^ @read_36 ggagatatttcctatgaaagcaaaaatgaaacctctactgcaagattccccttttcctgaagccccgtcttcttcctgggtgtctggctcactcactctctgccctgcacagccgatccctgtcccgatttgccctctgaaacctgcccatcactcccggc + ^ZRI`OERhNkVMW]jcSMMWebjUj]\HKQOgJWQUDEfTW]FhSWEH_XiSXb[^X[\WUUjRENZhcTSV[UPjMKjZgZlgljIEeUUd[HJINVFJdKS^VE\^gYIXjGWe``ecEL^fec]k_ObK^FhlL_`OG_bWOkhOhkQajdeFjSOe @read_37 gccctgtctctgcccttgctttttaaagggatgtttagtacacagtccttctgattgggtaacctaactggagttgttagttaagtcatgagaaaagaaaatgaggtcaagattcttaaagaccatttacttgctgatccagaagatcagagttaaagggg + S^Pb_k^GI``FEdGRGYH_]jXDhKcMRbWM[HaQOWVQP^R]ihMNXYZ`JNV^hPSdKdKEfFDWSGk^ZRi`gRgaJVPkEQMQKKF__\YdKV`Y_IfNJVlRiFYEDEdXRkGTlVcRgeOWhOhNMQUV`^[\DLhlD]JNIILFlShjFdjZi @read_38 tcattcctgttgctcaggctggagtgcaatgacatggtctcagctcactgcaactctccctcctgggttcaagtgattctcctgcctcagcctcctcagtagctgggattacaggcatccaccaccacacccggctaatttttgtatttttagtagagaca + PJZaL^_fMEO_\`bkFGIRJPVjWKTNlMDQODDUHIYVF[\HOaLQQWWf]E^JKekbfIRaM\K^UhjPfbR\cVEDNFSkFVGXl]OOZTlTgN_FHh`SI[KMeifFShRY\M\hg^fVN`Pe]YSggiNSgWPVFTjfEjHecbDjEO\^XSjSX @read_39 aggctgatcagtggcttgtccatctcttctggcattttggtggctgcaagagaagtcaggaacctggtcagtggagggctcctggactgccccttctgccacctccctcctcttatacatcgtaactacacggcagtcagacattcacccagcaggtgttc + SX_XcR]gcFjGfLUcEDPldaFecITOUWe\jWfQkYGYeQjWlg]ISakEQQc_TEhHFLNlVOa[SOcecTKalgObePH\beMFd\SI]eRUEJ[F`iGTXPcT]QNGLQ`agINTD_M]IRRJRVh[iXHaYLiSTbaY`MFHY[fbdaaDl]hSM @read_40 ggttatttttttctaaaaaatgatgccctaagactaccagggtgagaatcatcaatatcagaatcagatgcttgttaaaaatgaagattctcagacctgctaaatagtacttccggcattgagctgcagaagccctatttttcacagccccaaccagaatg + PZhYXPHHfMRWN`\MgXHS[He[K\DKeXehX_dUbNQU\USeKEPlKYHY`bg`PdKWbe[jGe\idFHWh[N\gYhhG[_VOcOdbW^P[ZWaFUK_X`W_KQILXZUjSIRPLdGE_]Y_IiceZeVSSVhk_OIdTSdW]kkUXZc^bj^`_`UEY @read_41 ggtggatcacttgaggtcaggagctcgagagcagcctggccaacatggtgaaaccttatctctactaaaaatacaaaagttagtgggcgcctgtagtcccagctacttgggagggtgacgcacgaaaatcacttgaacctggaaggcgaagtttgcagtga + cG_D^EkdjdKTJQPbHXfXYRHIS_YRD[QjGJ^DTjdhPKYHUOZ\SJkk\VTcUgLZDiaWfigk^e^c_VPWciQSVRlXaK\djjlagg]UN\bdTL\J`QgJTgbVOOccMSFfY[VH[MI`fk[HgbQEfa^dkZ^bhVkVldgL_gbD]]VMN @read_42 gaaaagaaaagaaaaaggaaagaaagaaaaaggaaaaaaaaaagaaattgtataaaaatatctgtttcaatgaaaggaagaagagatacaaataagaccacaaaaaaaccattaaccccaagattatatatgtataactcaacccctccaccaaagtattc + ZTVThOYT_]eiIlPKWSLbFGVJTMbZ]jRdOLKhPaKW[fQ]O^[kPSj\\USbLX_DS`PlWDjO^VH`[JRUgZ`MS`RV_]ILGH\eSJ^bUUUhRRQGcN[VVgWjiUQIeddTQTOTPWPQENcOTTGbc\adWiS_k^kSOKSDSK^jS]bGk @read_43 tcccatgtgtccaacacagaactcacaagactcttggctggatgtcctcttttcaggaaagaaggttcatttttagagataattacacactgtgtaagcatagaagtctcccttttattctgaatggtttcctgaaaacgctgtaactactgcatttagtt + fjIWldQZkE_Xe^WQOhNIgNlGedFLWUlkHRjZPRWiWlkWe]cegTJiTj^KPGfiMXciLQlccPXWSQkLElUS[UFFMWYeg\LH[hRbEW\il`kOUkIYGjPhZRSGiDXFdjP`\`YOdeiFiX]ldgg[UZcdhD[`V^FD_ig`PLhUe @read_44 taacagaacagaacagcagtgggcgtctgtgctacagatgatattcttagggtatttgctgccatccactctcctttctaaatttggtgttacagattcaacttctgtttttaaaagggaagttgcagatagatcattcacactattattttctccttaaa + IPkXU[kLQFkejgjidJaYIkiYQZL]iQHNYKOJaFQfclUdQk`Y[YZdPGdbGeWVEIi^_RDUgDTMfJjc^QODK_HdKOQVRFLVL[dJPEaOHjLjRITRkJ[YTRRfePHRN]hYW]lGf^lMa`XRl]dThPNTdVLJLiXZFOU`jOL\b @read_45 ttattttcaagagaaaactgaagctaaataaaatcattctttagggctagcacacgttgtctcgaaatagactgaattcatttgttatctatataacatttttatatgcttcacattactcactttatgccattaggaaagcactgaatctttaaagagaa + H^d_jYY__iTiL[MPhdMbGIZGIfkWYNkcPYkDOdjcjEQ`X[kM\PjHNOLOhED^lj]KJF`eEbNQPDjaLaX_\gTIWchIjlbZckUHRjbag[DdPS[hWl[jhDQWkidJgaHE`MXgfMYHP\DDcQZGJl]dbiJl]cP_VcSQWU`Yj @read_46 taccattattgacagagtaaaaagtcaaccaacagaatgagagaaaatacatggaaatcatttatttgataaaggtttaatattcaaattataaagaattactataactaaaaagcaaaaagataaaccacccaattaaaaataggcaaagggtttgaata + _JTUdFgGiGgb]HMGTFYRhGIZXDKH^Kdl^_\IkaR`b`heEcjEg`JVDG[IWldhfPh]KNSZ^UDhcjGLfGOlNIlQ^MYRX_eWKJSDDcX_lg^J`XG[eE`JSgGH_lNObkk[El`^YDLgLccQVXlEQTcQ\IPj`LJ_aWk_UQ[T] @read_47 ttagaagtgcatgactgagacttctgttttttacttctggtaatattagactagacaatcaaagtctgctctttaaattaggataactgggaaacctgaactatgtatctatgtgcttgagggaatcatagagctaagaacataatgaatatttatgagaa + iHWT`DFZD]dRhY`MfILlKUVKSaVDDjkifIFVO`FeZh`IJdLSdYVEdKUiVcJMLg^iTMZMbPYUjgl`hIghbZkMDi]N_HGeNbJL]UJfKTJONIDOWLXOfRUjPYFg`^VE[UERE\Kb^JbaghXgQGN]OGOLdkI`IJSeVU_NE @read_48 ttttttcccttaccttttaatatagtaaaatcctaagttgaaacatcttttggctcatttattatttcagccacgcttaatcaaaatatcttattattttagcaaacatctgtattttacttggtaacatttaacttaggattcttatataaatattcata + fMWI\IW[iGFgjUDPJPEfcTKeYhik^ai^UkLWhNRKeGjJGfkHVgWkQ^ShTYdd]Lg\EjOIUMVhPFhbHhfVfU`Mdk`S[]TRi\HPMgGabRSVNhEDVdVUJWL\^eGIfNHgMeIXVIZEV`RYeEjIEP\QMd[d`chT_PRk\E^Lj @read_49 tgttctttttttttaatagaagatgaacctgaaacttaataaataacactaaacatctgataaaagaatatcattgatgtttaatgagctgttctaaagtagccaaatagggaaggaacctcctaagaagaggagctctctttaatcatttccagtattat + RQihKSNDJGaUi`TNZEbIVJjML`_W^LJlXTdfgTUY\UlHPQOikXPRPNUT_[P_UEHJOJ]JWMk[J^G[\h]H\USjgHVbUWUjFRHbd`XHl\UgRWfQKfdkNY_eKRYgkaeIVXWJQ]aQeJLkjMdcdb[WNkRL]eiV`gSTFclQb @read_50 tagtcctggctaattttttttttttttttttttagtagagagggggtgtggctcacacctgtaacaccagcattttgggaggctgaggcaggcagatcacttgagtacaggaggtccagatcagcctgggcagcacggtgaaatcctctctctactaaaaa + RNDkc_OW[dEXO_SFQHjWfgHkZ\IGP[NQV^QjTLX]UjcWZV`iTSM^PeFIaQDOXjYPcThFVkNQHLHQSHf_M]UVJPOLL][RYbS\SfH[JWF_dcWgkRPbFGZO[H^ZKg`bcYHGiSUXMRlZ[_MOEdNJdZaci]ROYhDGNIIda @read_51 ttaagaatttcctgataaatgtcaatttgagaacattaaatatttttatagaaaaacatatgaaactaatttacttaaattgaaaaacaaggaaaaatagaatataactagttagaaaaaagtcactgttttaaatatgatttattataggactttgatag + SEb`FgXdPhUWfKiNfRKJGheOFfJ`SKikDfZOWclaVGHhlh\X[GMXDTHdYcXLZYF\VKdT\\NGfe^FOJVPkWQPXbb`GESObhKDiYWNXDUiQO\OXQRkkTQa_NFWUVPUQFkGDPgHWM^`WJZWYZFI`TKVgbGXih`gHIabd @read_52 gggcattcagttcccactcgatctgttggtggtcacgcctctcaacatctgtcttcaatagcagcagaaagtaatcaccataagatcactatgctttctcagtcggctgtatcaaatatctataattgctctttagttagataaaagttaccgagaacaaa + ]EeJkMh[NgfK]NH`dMLYMULWNgZOQEh\dhZGF[FadQ\kNh^RiYFRl]S^^dVEQh[WekHFEHLTKcVPHKMlIif^DJQcLLFGRiU[FfkN]GZT_eiaFFTKlSfaOXleShbGNfNQUYafdTPX_dX`FfUegLOMYUf]Z[STikJVc @read_53 cactccagccagggcaacaagagcgaaactccgtctcaaaaaaaaaaaaaaaagaaaagaaaagaaaaagaaagaaagcaagcatttttgaagccactcactgacttcactgataggatgcacagaataagtcagaaaggcaaagctcccgagtctgcttc + \KQl^DjYej]QjPZZEN]\MQLhWY\XEcQVFkkSLh_cOMgIW[WQRaGFNUE_XJYlObIK_HH\XGK[LIPNbc^RcHIKN_\R`]SSM^EkSkPDRVXUTaeXkXUM^hUSMPPRSDgUbV`]PRZjP[cJd^FSHKgbXj`PJkP\HMiFMeaQ] @read_54 tgtagaccacttggaaatttcatacattgctggtgagaatgccaaatggtatagccacctagaaatcagtttgatagcttcctacaaagttaaatacacttactatatgacccatacattttactcctacatatttcaaatgaaattaaaattcatgtttg + WHijPWe`iRSdPG`HFVVTZZ\U\e`HEYFH_LQcaM\jTjLg]]l_NZ^LEjKdMYOhbYl^SQb`RKVaFKOLJjTRbgPLgPZJh^NNhFPf_VbHkRGRJj_GiXkKgeVQl^RelQVSElIfYRYbF[T[OIMN\eK]gljhl]djjTjMVkLic @read_55 aatcccattactggatatataccccccaaaatatacatttttctatgataaagatacatgcatgtgtatgttcattgcagcactattcacaacagcaaagacgtggaatcagcctaaatgcccatgaatgacagactggataaagaaaatgtggtacatat + PLkKZSIKOeQ]k`E[Gke^VSFKWEJ[QIHfNIcUl\ah[VJjGdHFlhXGUM`VWTDiNTfQcbPdch]`YgagIjKcWOYW[RdkcY`GVYbkfldS\P]GikPbMlZ_FVIUfdjka]SZcXdNPhUESebWHeeE]KRfaaiJ]hHShIMhgDNhe @read_56 ctagtgggaggtgtttgggtcacgaatggcttcgtgccatccttgcggtaatggatgagctcttgctctattagttcacaggagagagctggttgttaaaaagaacctgacacctcctctctctctgtctctctctctgtctcttggtccctcttaccatg + FXKG^EPINeSEHhciPTFeaaTilUK\W[M_e\eVQ\cb\]FRNGjgOePILXaf]F\SlY]LSgDV\FGRORYaOSWZaUIZDQIijJYOfLZQ[HSHhiII`KdSWETK^TiDiXK`]HlWXdT]EPKY^k_U_lHjIHHEJ`JHHklLHV_ciEc_U @read_57 gctataaagacacatgcacatgtatgtttattgtggcactattcccaatagcaaaaccttggaaccaacccaaatggattaagaaaatgtggcacatatacaccatggaatattatgcaaccataaatatgaatgagttcatgtcctttgcagggacaggg + ]DJZSeXGj`Pe\ijNM\aD`M[UeDX^ZgkPibVk[Qi^Tl\iDNQ]_lTDHI`kcLlUZcdcWIZJaNfFPVXLW]hJWkZHRP^dk`aL_PbSSfKRUPE_DdZaTX]OLhFQLgcHiHTYkXellNhJH]WKfhTa^XZgb\a``PbD^PjNJQQYH @read_58 ttccttcttcccttcctgctcaccagccggccgccggcagcggctccaggaaggagcaccaacccgcgctgggggcggaggttcaggcggcaggaatggagaggctgatcctcctctagccccggcgcattcacttaggtgcgggagccctgaggttcagc + hO^FkJXF_\KdfUQRMDQeaJRJJEYLRDbcOiEJ_WcfcjOQcXDEWbU[I]QPIcYkQiRMXKJMNQNZX^UiaGhU\QKITQUKNIi]KS[cjk_iQE^QQejfL_Q`cl^SXQK\bf^EbMWOg[`kRVVMRPe]LhecJF_fK^_GJPiDL`\]d @read_59 aggtcatgaggtcttgggattaatggctgcaaaatagccccaagggacttgtttgtttttctaccacgtgaggaaggaggaagacacagggagaactgtgaggtctaaaacctggaagggagccctcacccgaacccgatcgtcctggcactctgatctca + j^ZOa[dEHlPPMZbbKkGiZPfTcQNYRl]LYcaDgHdOL^N^k^b_FabHR_ZZffaidKg^e`SiNflNZIcK[\YKe]NYIcPVOKZPgbOiMl\aX_fHcYGOlLiITMJckVgjIPkiLlLXkSi^h[hbNZUd_Ri\bJ`EQ_hGdKe_X\LWG @read_60 ggatttgtgtggtggttcacagctaagactgcctggattcaaatcccaaatctgccaaggcaattatggggactgagcccccaacctgtgggatctgacactgtctccagataaatagcgtcagaattgagttggaggacacctagctggtgtccactgcg + `clZQQhDjiYRX[I\kUh_X[iJcF_WXTkVMFchXiKGaV[kDUJPPOclb[IXgSc[dQ[D]QidagUOi[fi^ERfJFUD_c\XgLSb]kgeIYiiD]cTPeU`e_gcVadDY\g`\]aNX^khYYbSD`Mdh_dhUeS\Fk_aNJeWXJbQdX`QO @read_61 tagtcctaatgatctttcccacctagttttttacatgtacttggattccccatcttcgcagccaccatttcccaatattcttctgacctgtccattccccaagactctatcctcccagaagaaaggttacattgtagaatgattgctgaggtttatacttg + XMKXeYEXGLWKFLE\QkWclM]PTNXGlc^^FfVdbh[fYX`O]hXaHF]I\SJ]DTbk__WgKJ[jdcUlKgPENUcTbFUdL]RX[fEVSD[l]QYii`d^h_PXe]NiKeKFNRMUIYJS^PQUVX\jDYkglSjR^d_\UaFY\`ORYheT\Vba[ @read_62 tggaagagctctcttgggattattttataagagtactagtcccatgcacctcccaatcaccttgaggaggtcccacctcttagtaccatcacctcgaaggtcaggatcccaacataagaattttaagggggcacaaacgttcagaccataacaccaggttc + SdOaU[VGWO]^[dVIcMTLYdc`[FkdgUc[Gl]SfEIge]LG]lcVMSDbKHbDjRDH]PdG\YR^ckNTFkPhIZjIbgSHKcHbT]NIIi]XXNMDMT]_YV_cRbdDjLGK[N_\ljWakeKMjJLaeRGjZQdN\[Q`[HFief`_fYZNJL_TS @read_63 acaggacagaaaaggttctagtactgattattacatgtggtttaggacatttaaaaatgtatgctgacatgctgacagcaaaagtatactcactgtgtacaagaaaacaaaaatctttccacatcagcagcagagtgagttttgtaaagccttctgcatca + N[dZQfINaQGKIUXLZDfLRWlQ[GHJeTDdLE[]k^Wjkbc\O^ObKg\TgiPaMRkDfkN\Ucdb^Ufbe`POUI^SZWLU\hQUSKbRae_GMjiLNfc_]bbKf^ilReT_QORi\GlfVjZYfUEIMFdliGcF_baZORJVPcfQdeQiELGLX @read_64 gccacaccagctttctttcaattcctccaatgttctcccatgctccctccatctgcagaacatcattgtttacttcaaggttcaagtaatatcaatgaaaatacaggcaaggcttctgttctgaatggtgcttacttctagtggagcaggagaagacatac + ^GdUPieNKQQc_R\IFbgjIGS[ROEDcD^\`SNdbl]hJfPTaSTXEFKiDRFf\Uh]IdGi]`O[^KdGDhRTF_SUhdKJYMcIfSQFGiY_[idVhIbJ]cUc`YS_gk_Q\VJhQXKdbdeSIPXWWbRehWRli_f]agK^d]KeEM\lWhXJH @read_65 aaattcagggagtaaccacttctgcccgttttcttgccccacattttcacttctgattatattttcctcataggtaggagttagttatccatatttgttcctttttttttttttttttttttgctaagaaaggtttttcttttctttcctttttttttttt + Eaa^YiEiMHkN`^TkYKiah[cXcLHEDiYhXZcFRFcWiE]HK[Mjg\ISLUJfeIiEIdEihIDTTNg\``IWJ`IKkNdOW\G[YJh[IX\Dl_LaI^Hgh_Kjefk^UXjY]WcTdRXSPS`cWebE[K_E\UJeJLVRgQMaLlH`ZjFcldKLS @read_66 aaaagagactgacagagagagagaggaagagagagatacacacattgtactcaaagacagagagacggtacaggatcacatgaataagtctttagagtatgcatattatactctaggccatatggcataacctgagattaaaatggtcctttcaaactaac + V\JEG`]j]VlQcWN`LEeKaDRIXaIUhJD_EV[J]YUNJ\WW_McGIRJhhFS^K[Pg\K`jMlc`h]gOdO\Ya^eYETjR\lRMbMiXaPg[WOUKdGQggXSlPUIc\^eSXHdTLDSP[IGUfFRWX[W^ikbDeSkH[gDPMdNML`ZULihNb @read_67 agataaaactaaaaaattcttgcagcaaaatttcaaaagtgcattatcatagcatcataaatatatgattgatacatatatgattggttggataattggataatagtacaatttcttataatgttcaaaactatacattattttaaactagaaaaggacat + SfFRJgPGWDDVdhebDeQOZ]fXe__LhVRFV`]FUSEEa[ihGgQbS_gUFEPLOMMeSERXX_diN`OiZHQkMLMiDiZJO`LO[K^^XhfJjDJ[YhMZ\WdkLceRcTHElI]SGOGhGdZS\_]lHgULVKTXeY]ikUWNcYSUNHXHQIZIb @read_68 agctcaagcaattcccccagccttgacctcccaaaatgctgggattacaggcatgagccaccgcacccagcccacagctttgttttttgcagtaatcacctccctctcacatggggaaatatgccacaaaatatacctgaaggaggatatttaattctcca + KNkQlHDhFe^PibjMhWa\^UMZD^OTLGXKaQePMhgNeHVbMhkhNFYVhZMVTFkZZVNW[`kXLkGSYj[iS`[[NYPQ[bHl[YN[Gad\PNJhFJJ[UQ[fGc^`KMhDLSYYcPPNMKiD]VDUTkcNYZZhH]TdbPe`dN[_PJcFlXcXR @read_69 tctgcgatgcagtcagactgcgttgatgccagtgttctcttggttcctgcaagactttcttgaggtttcttgtttccgcaagctctgaactgggctctggctttgcctcagaagcacagagctggagcatctgtgggagaaagtggaaatggagcaataat + lHcgOGdHEkUSjUVWVLPccOSdegaL]R_LMiYLlGHPVJgdcUihbUchjcIDiXKGP]eX[^iZQhQglO]GHKkUMSUOJc\DhdGYIcl[Y[]jNOdSILJFhkgeeQbKlUSD\YPVebX`cfbLhMKZ\T]U\IkVPOGebe\\MX[lkOUj^ genometools-1.5.1/testdata/readjoiner/contained_eqlen.cnt000066400000000000000000000000171211610345200236330ustar00rootroot00000000000000[n: 6] 1 2 3 4 genometools-1.5.1/testdata/readjoiner/contained_eqlen.fas000066400000000000000000000007751211610345200236330ustar00rootroot00000000000000>0 read gctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt >1 copy gctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt >2 another_copy gctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt >3 yet_another_copy gctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt >4 revcompl aatcgctcgatgccatgatcgaatgactctcctctcctcgccgcatcgatcgaaaaaaaaaactgactagc >5 different gctagtcagtttttattttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt genometools-1.5.1/testdata/readjoiner/contained_eqlen_ss.cnt000066400000000000000000000000151211610345200243360ustar00rootroot00000000000000[n: 6] 1 2 3 genometools-1.5.1/testdata/readjoiner/contained_varlen.cnt000066400000000000000000000000401211610345200240120ustar00rootroot00000000000000[n: 13] 1 2 3 4 5 6 7 8 9 10 11 genometools-1.5.1/testdata/readjoiner/contained_varlen.fas000066400000000000000000000021461211610345200240100ustar00rootroot00000000000000>0 read gctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt >1 copy gctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt >2 another_copy gctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt >3 yet_another_copy gctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt >4 prefix gctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgat >5 suffix ctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt >6 internal ctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgat >7 copy_of_internal ctagtcagttttttttttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgat >8 revcompl aatcgctcgatgccatgatcgaatgactctcctctcctcgccgcatcgatcgaaaaaaaaaactgactagc >9 revcompl_of_prefix atcgctcgatgccatgatcgaatgactctcctctcctcgccgcatcgatcgaaaaaaaaaactgactagc >10 revcompl_of_suffix aatcgctcgatgccatgatcgaatgactctcctctcctcgccgcatcgatcgaaaaaaaaaactgactag >11 revcompl_of_internal atcgctcgatgccatgatcgaatgactctcctctcctcgccgcatcgatcgaaaaaaaaaactgactag >12 different gctagtcagtttttattttcgatcgatgcggcgaggagaggagagtcattcgatcatggcatcgagcgatt genometools-1.5.1/testdata/readjoiner/contained_varlen_ss.cnt000066400000000000000000000000361211610345200245240ustar00rootroot00000000000000[n: 13] 1 2 3 4 5 6 7 9 10 11 genometools-1.5.1/testdata/readjoiner/errors_1.corrected.fas000066400000000000000000000004061211610345200241770ustar00rootroot00000000000000>0 cgatcgatcgtagctagctggcggcggcgtagct >1 (encseq pos 62 should be g, is a) gatcgatcgtagctagctggcggcggcgtagctt >2 atcgatcgtagctagctggcggcggcgtagcttg >3 tcgatcgtagctagctggcggcggcgtagcttgc >4 cgtagctagctggcggcggcgtagcttgccgtgc >5 cgattggcgggatcggcgtcgtatacggctagca genometools-1.5.1/testdata/readjoiner/errors_1.fas000066400000000000000000000004061211610345200222260ustar00rootroot00000000000000>0 cgatcgatcgtagctagctggcggcggcgtagct >1 (encseq pos 62 should be g, is a) gatcgatcgtagctagctggcggcggcatagctt >2 atcgatcgtagctagctggcggcggcgtagcttg >3 tcgatcgtagctagctggcggcggcgtagcttgc >4 cgtagctagctggcggcggcgtagcttgccgtgc >5 cgattggcgggatcggcgtcgtatacggctagca genometools-1.5.1/testdata/readjoiner/large_count.fas000066400000000000000000000063141211610345200230000ustar00rootroot00000000000000> aaaaagggg > ggggaaaaa > ggggaaaat > ggggaaaac > ggggaaaag > ggggaaata > ggggaaatt > ggggaaatc > ggggaaatg > ggggaaaca > ggggaaact > ggggaaacc > ggggaaacg > ggggaaaga > ggggaaagt > ggggaaagc > ggggaaagg > ggggaataa > ggggaatat > ggggaatac > ggggaatag > ggggaatta > ggggaattt > ggggaattc > ggggaattg > ggggaatca > ggggaatct > ggggaatcc > ggggaatcg > ggggaatga > ggggaatgt > ggggaatgc > ggggaatgg > ggggaacaa > ggggaacat > ggggaacac > ggggaacag > ggggaacta > ggggaactt > ggggaactc > ggggaactg > ggggaacca > ggggaacct > ggggaaccc > ggggaaccg > ggggaacga > ggggaacgt > ggggaacgc > ggggaacgg > ggggaagaa > ggggaagat > ggggaagac > ggggaagag > ggggaagta > ggggaagtt > ggggaagtc > ggggaagtg > ggggaagca > ggggaagct > ggggaagcc > ggggaagcg > ggggaagga > ggggaaggt > ggggaaggc > ggggaaggg > ggggataaa > ggggataat > ggggataac > ggggataag > ggggatata > ggggatatt > ggggatatc > ggggatatg > ggggataca > ggggatact > ggggatacc > ggggatacg > ggggataga > ggggatagt > ggggatagc > ggggatagg > ggggattaa > ggggattat > ggggattac > ggggattag > ggggattta > ggggatttt > ggggatttc > ggggatttg > ggggattca > ggggattct > ggggattcc > ggggattcg > ggggattga > ggggattgt > ggggattgc > ggggattgg > ggggatcaa > ggggatcat > ggggatcac > ggggatcag > ggggatcta > ggggatctt > ggggatctc > ggggatctg > ggggatcca > ggggatcct > ggggatccc > ggggatccg > ggggatcga > ggggatcgt > ggggatcgc > ggggatcgg > ggggatgaa > ggggatgat > ggggatgac > ggggatgag > ggggatgta > ggggatgtt > ggggatgtc > ggggatgtg > ggggatgca > ggggatgct > ggggatgcc > ggggatgcg > ggggatgga > ggggatggt > ggggatggc > ggggatggg > ggggacaaa > ggggacaat > ggggacaac > ggggacaag > ggggacata > ggggacatt > ggggacatc > ggggacatg > ggggacaca > ggggacact > ggggacacc > ggggacacg > ggggacaga > ggggacagt > ggggacagc > ggggacagg > ggggactaa > ggggactat > ggggactac > ggggactag > ggggactta > ggggacttt > ggggacttc > ggggacttg > ggggactca > ggggactct > ggggactcc > ggggactcg > ggggactga > ggggactgt > ggggactgc > ggggactgg > ggggaccaa > ggggaccat > ggggaccac > ggggaccag > ggggaccta > ggggacctt > ggggacctc > ggggacctg > ggggaccca > ggggaccct > ggggacccc > ggggacccg > ggggaccga > ggggaccgt > ggggaccgc > ggggaccgg > ggggacgaa > ggggacgat > ggggacgac > ggggacgag > ggggacgta > ggggacgtt > ggggacgtc > ggggacgtg > ggggacgca > ggggacgct > ggggacgcc > ggggacgcg > ggggacgga > ggggacggt > ggggacggc > ggggacggg > ggggagaaa > ggggagaat > ggggagaac > ggggagaag > ggggagata > ggggagatt > ggggagatc > ggggagatg > ggggagaca > ggggagact > ggggagacc > ggggagacg > ggggagaga > ggggagagt > ggggagagc > ggggagagg > ggggagtaa > ggggagtat > ggggagtac > ggggagtag > ggggagtta > ggggagttt > ggggagttc > ggggagttg > ggggagtca > ggggagtct > ggggagtcc > ggggagtcg > ggggagtga > ggggagtgt > ggggagtgc > ggggagtgg > ggggagcaa > ggggagcat > ggggagcac > ggggagcag > ggggagcta > ggggagctt > ggggagctc > ggggagctg > ggggagcca > ggggagcct > ggggagccc > ggggagccg > ggggagcga > ggggagcgt > ggggagcgc > ggggagcgg > ggggaggaa > ggggaggat > ggggaggac > ggggaggag > ggggaggta > ggggaggtt > ggggaggtc > ggggaggtg > ggggaggca > ggggaggct > ggggaggcc > ggggaggcg > ggggaggga > ggggagggt > ggggagggc > ggggagggg > ggggtaaaa > ggggtaaat > ggggtaaac > ggggtaaag > ggggtaata > ggggtaatt > ggggtaatc > ggggtaatg > ggggtaaca > ggggtaact > ggggtaacc > ggggtaacg > ggggtaaga > ggggtaagt > ggggtaagc > ggggtaagg genometools-1.5.1/testdata/readjoiner/large_wset.fas000066400000000000000000000064241211610345200226340ustar00rootroot00000000000000> aaaaagggg > aaaagggga > aaaaggggt > aaaggggaa > aaaggggac > aaaggggat > aaaggggag > ggggaaaaa > ggggaaaat > ggggaaaac > ggggaaaag > ggggaaata > ggggaaatt > ggggaaatc > ggggaaatg > ggggaaaca > ggggaaact > ggggaaacc > ggggaaacg > ggggaaaga > ggggaaagt > ggggaaagc > ggggaaagg > ggggaataa > ggggaatat > ggggaatac > ggggaatag > ggggaatta > ggggaattt > ggggaattc > ggggaattg > ggggaatca > ggggaatct > ggggaatcc > ggggaatcg > ggggaatga > ggggaatgt > ggggaatgc > ggggaatgg > ggggaacaa > ggggaacat > ggggaacac > ggggaacag > ggggaacta > ggggaactt > ggggaactc > ggggaactg > ggggaacca > ggggaacct > ggggaaccc > ggggaaccg > ggggaacga > ggggaacgt > ggggaacgc > ggggaacgg > ggggaagaa > ggggaagat > ggggaagac > ggggaagag > ggggaagta > ggggaagtt > ggggaagtc > ggggaagtg > ggggaagca > ggggaagct > ggggaagcc > ggggaagcg > ggggaagga > ggggaaggt > ggggaaggc > ggggaaggg > ggggataaa > ggggataat > ggggataac > ggggataag > ggggatata > ggggatatt > ggggatatc > ggggatatg > ggggataca > ggggatact > ggggatacc > ggggatacg > ggggataga > ggggatagt > ggggatagc > ggggatagg > ggggattaa > ggggattat > ggggattac > ggggattag > ggggattta > ggggatttt > ggggatttc > ggggatttg > ggggattca > ggggattct > ggggattcc > ggggattcg > ggggattga > ggggattgt > ggggattgc > ggggattgg > ggggatcaa > ggggatcat > ggggatcac > ggggatcag > ggggatcta > ggggatctt > ggggatctc > ggggatctg > ggggatcca > ggggatcct > ggggatccc > ggggatccg > ggggatcga > ggggatcgt > ggggatcgc > ggggatcgg > ggggatgaa > ggggatgat > ggggatgac > ggggatgag > ggggatgta > ggggatgtt > ggggatgtc > ggggatgtg > ggggatgca > ggggatgct > ggggatgcc > ggggatgcg > ggggatgga > ggggatggt > ggggatggc > ggggatggg > ggggacaaa > ggggacaat > ggggacaac > ggggacaag > ggggacata > ggggacatt > ggggacatc > ggggacatg > ggggacaca > ggggacact > ggggacacc > ggggacacg > ggggacaga > ggggacagt > ggggacagc > ggggacagg > ggggactaa > ggggactat > ggggactac > ggggactag > ggggactta > ggggacttt > ggggacttc > ggggacttg > ggggactca > ggggactct > ggggactcc > ggggactcg > ggggactga > ggggactgt > ggggactgc > ggggactgg > ggggaccaa > ggggaccat > ggggaccac > ggggaccag > ggggaccta > ggggacctt > ggggacctc > ggggacctg > ggggaccca > ggggaccct > ggggacccc > ggggacccg > ggggaccga > ggggaccgt > ggggaccgc > ggggaccgg > ggggacgaa > ggggacgat > ggggacgac > ggggacgag > ggggacgta > ggggacgtt > ggggacgtc > ggggacgtg > ggggacgca > ggggacgct > ggggacgcc > ggggacgcg > ggggacgga > ggggacggt > ggggacggc > ggggacggg > ggggagaaa > ggggagaat > ggggagaac > ggggagaag > ggggagata > ggggagatt > ggggagatc > ggggagatg > ggggagaca > ggggagact > ggggagacc > ggggagacg > ggggagaga > ggggagagt > ggggagagc > ggggagagg > ggggagtaa > ggggagtat > ggggagtac > ggggagtag > ggggagtta > ggggagttt > ggggagttc > ggggagttg > ggggagtca > ggggagtct > ggggagtcc > ggggagtcg > ggggagtga > ggggagtgt > ggggagtgc > ggggagtgg > ggggagcaa > ggggagcat > ggggagcac > ggggagcag > ggggagcta > ggggagctt > ggggagctc > ggggagctg > ggggagcca > ggggagcct > ggggagccc > ggggagccg > ggggagcga > ggggagcgt > ggggagcgc > ggggagcgg > ggggaggaa > ggggaggat > ggggaggac > ggggaggag > ggggaggta > ggggaggtt > ggggaggtc > ggggaggtg > ggggaggca > ggggaggct > ggggaggcc > ggggaggcg > ggggaggga > ggggagggt > ggggagggc > ggggagggg > ggggtaaaa > ggggtaaat > ggggtaaac > ggggtaaag > ggggtaata > ggggtaatt > ggggtaatc > ggggtaatg > ggggtaaca > ggggtaact > ggggtaacc > ggggtaacg > ggggtaaga > ggggtaagt > ggggtaagc > ggggtaagg genometools-1.5.1/testdata/readjoiner/minlen_test.fas000066400000000000000000000001301211610345200230050ustar00rootroot00000000000000>0 gaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag genometools-1.5.1/testdata/readjoiner/paired_reads_1.fas000066400000000000000000000000321211610345200233270ustar00rootroot00000000000000> aaaaaaaaaa > tttttttttt genometools-1.5.1/testdata/readjoiner/paired_reads_1.fastq000066400000000000000000000000641211610345200237010ustar00rootroot00000000000000@ aaaaaaaaaa + 8<9+32C78D @ tttttttttt + C4+96I8D53 genometools-1.5.1/testdata/readjoiner/paired_reads_1L1.fastq000066400000000000000000000000641211610345200240760ustar00rootroot00000000000000@ aaaaaaaaaa + 8<8+3"C7%% @ tttttttttt + C4+96I8D$3 genometools-1.5.1/testdata/readjoiner/paired_reads_1L2.fastq000066400000000000000000000000641211610345200240770ustar00rootroot00000000000000@ aaaaaaaaaa + 8<#+3"C7%% @ tttttttttt + C4%%6I%%53 genometools-1.5.1/testdata/readjoiner/paired_reads_1L2_ph64.fastq000066400000000000000000000000641211610345200247400ustar00rootroot00000000000000@ aaaaaaaaaa + @EFADDDDDD @ tttttttttt + DDDDDDDDDD genometools-1.5.1/testdata/readjoiner/paired_reads_1L4.fastq000066400000000000000000000000641211610345200241010ustar00rootroot00000000000000@ aaaaaaaaaa + #"#+3"C7%% @ tttttttttt + C4+96I%D53 genometools-1.5.1/testdata/readjoiner/paired_reads_1N.fas000066400000000000000000000000321211610345200234450ustar00rootroot00000000000000> aaaNaaaaaa > tttttttttt genometools-1.5.1/testdata/readjoiner/paired_reads_1N.fastq000066400000000000000000000000641211610345200240170ustar00rootroot00000000000000@ aaaNaaaaaa + =@5!?:.@G< @ tttttttttt + GH,F/7E3H8>;,=?1= genometools-1.5.1/testdata/readjoiner/paired_reads_1N_2.p.fas000066400000000000000000000000321211610345200241240ustar00rootroot00000000000000> tttttttttt > gggggggggg genometools-1.5.1/testdata/readjoiner/paired_reads_1N_2.p.fastq000066400000000000000000000000641211610345200244760ustar00rootroot00000000000000@ tttttttttt + GH,F/7E3;,=?1= genometools-1.5.1/testdata/readjoiner/paired_reads_1Nb.fas000066400000000000000000000000321211610345200236070ustar00rootroot00000000000000> aaaaaaaaaa > ttttttNttt genometools-1.5.1/testdata/readjoiner/paired_reads_1Nb.fastq000066400000000000000000000000641211610345200241610ustar00rootroot00000000000000@ aaaaaaaaaa + 35EA.>E;@7 @ ttttttNttt + aaaaaaaaaa > cccccccccc > ttttttNttt > gggggggggg genometools-1.5.1/testdata/readjoiner/paired_reads_1Nb_2.fastq000066400000000000000000000001501211610345200243760ustar00rootroot00000000000000@ aaaaaaaaaa + 35EA.>E;@7 @ cccccccccc + >H8>;,=?1= genometools-1.5.1/testdata/readjoiner/paired_reads_1Nb_2.p.fas000066400000000000000000000000321211610345200242660ustar00rootroot00000000000000> aaaaaaaaaa > cccccccccc genometools-1.5.1/testdata/readjoiner/paired_reads_1Nv.fas000066400000000000000000000000311211610345200236320ustar00rootroot00000000000000> aaaNaaaaaa > ttttttttt genometools-1.5.1/testdata/readjoiner/paired_reads_1Nv.fastq000066400000000000000000000000621211610345200242030ustar00rootroot00000000000000@ aaaNaaaaaa + 3,A!+,H/C- @ ttttttttt + E2B-1II.I genometools-1.5.1/testdata/readjoiner/paired_reads_1Nv_2.p.fas000066400000000000000000000000311211610345200243110ustar00rootroot00000000000000> ttttttttt > gggggggggg genometools-1.5.1/testdata/readjoiner/paired_reads_1_2.fas000066400000000000000000000000641211610345200235550ustar00rootroot00000000000000> aaaaaaaaaa > cccccccccc > tttttttttt > gggggggggg genometools-1.5.1/testdata/readjoiner/paired_reads_1_2.fastq000066400000000000000000000001501211610345200241160ustar00rootroot00000000000000@ aaaaaaaaaa + 8<9+32C78D @ cccccccccc + >H8>;,=?1= genometools-1.5.1/testdata/readjoiner/paired_reads_1_2N.p.fas000066400000000000000000000000321211610345200241240ustar00rootroot00000000000000> tttttttttt > gggggggggg genometools-1.5.1/testdata/readjoiner/paired_reads_1_2Nb.p.fas000066400000000000000000000000321211610345200242660ustar00rootroot00000000000000> aaaaaaaaaa > cccccccccc genometools-1.5.1/testdata/readjoiner/paired_reads_1v.fas000066400000000000000000000000341211610345200235170ustar00rootroot00000000000000> aaaaaaaaa > ttttttttttttt genometools-1.5.1/testdata/readjoiner/paired_reads_1v.fastq000066400000000000000000000000701211610345200240640ustar00rootroot00000000000000@ aaaaaaaaa + ?8,AA14G= @ ttttttttttttt + 9A006E5>2:5?< genometools-1.5.1/testdata/readjoiner/paired_reads_1v_2.fas000066400000000000000000000000661211610345200237450ustar00rootroot00000000000000> aaaaaaaaa > cccccccccc > ttttttttttttt > gggggggggg genometools-1.5.1/testdata/readjoiner/paired_reads_1v_2Nb.fastq000066400000000000000000000001541211610345200245700ustar00rootroot00000000000000@ aaaaaaaaa + ?8,AA14G= @ cccccccccc + >7BA.6/@18 @ ttttttttttttt + 9A006E5>2:5?< @ gggggggggN + 0;.:>H0-0! genometools-1.5.1/testdata/readjoiner/paired_reads_1v_2Nb.p.fas000066400000000000000000000000311211610345200244530ustar00rootroot00000000000000> aaaaaaaaa > cccccccccc genometools-1.5.1/testdata/readjoiner/paired_reads_2.fas000066400000000000000000000000321211610345200233300ustar00rootroot00000000000000> cccccccccc > gggggggggg genometools-1.5.1/testdata/readjoiner/paired_reads_2.fastq000066400000000000000000000000641211610345200237020ustar00rootroot00000000000000@ cccccccccc + >H8>;,=?1= genometools-1.5.1/testdata/readjoiner/paired_reads_2N.fas000066400000000000000000000000321211610345200234460ustar00rootroot00000000000000> cNcccccccc > gggggggggg genometools-1.5.1/testdata/readjoiner/paired_reads_2N.fastq000066400000000000000000000000641211610345200240200ustar00rootroot00000000000000@ cNcccccccc + ,!8;;> cccccccccc > gggggggggN genometools-1.5.1/testdata/readjoiner/paired_reads_2Nb.fastq000066400000000000000000000000641211610345200241620ustar00rootroot00000000000000@ cccccccccc + >7BA.6/@18 @ gggggggggN + 0;.:>H0-0! genometools-1.5.1/testdata/readjoiner/paired_reads_2_ph64.fastq000066400000000000000000000000641211610345200245430ustar00rootroot00000000000000@ cccccccccc + HHHHHHHHHH @ gggggggggg + JJJJJJJJJJ genometools-1.5.1/testdata/readjoiner/paired_reads_U.fas000066400000000000000000000000361211610345200233770ustar00rootroot00000000000000>0c cacacacaca >1c gtgtgtgtgt genometools-1.5.1/testdata/readjoiner/paired_reads_U.fastq000066400000000000000000000000701211610345200237420ustar00rootroot00000000000000@0c cacacacaca + FAI88G/-H3 @1c gtgtgtgtgt + +19-.@>-=< genometools-1.5.1/testdata/readjoiner/pw-apx.spm000066400000000000000000000001601211610345200217310ustar00rootroot000000000000001 + 0 + 4 4 0 0 + 2 + 3 3 0 1 + 3 + 4 4 0 4 - 1 + 3 3 0 2 + 2 - 6 6 0 2 - 2 + 4 4 0 2 + 3 - 3 3 0 4 - 2 + 5 5 0 genometools-1.5.1/testdata/readjoiner/pw-ex.spm000066400000000000000000000001321211610345200215540ustar00rootroot000000000000001 + 0 + 4 0 + 2 + 3 1 + 3 + 4 4 - 1 + 3 2 + 2 - 6 2 - 2 + 4 2 + 3 - 3 4 - 2 + 5 4 - 4 + 6 genometools-1.5.1/testdata/readjoiner/pw.fas000066400000000000000000000001201211610345200211110ustar00rootroot00000000000000>0 caacgaatctgc >1 cacacccacaac >2 tgcacgtggcca >3 caacgcagctgg >4 gtgcactagtga genometools-1.5.1/testdata/readjoiner/self_spm.fas000066400000000000000000000001061211610345200222770ustar00rootroot00000000000000>0 self-SPM 8 nt gatgcgatcttacgatgcgat >1 dummy tatcggtggcatgtgctagct genometools-1.5.1/testdata/readjoiner/test_1.fas000066400000000000000000000006401211610345200216710ustar00rootroot00000000000000>0 aaagaaagaaagaaagaaagaaagaaagaaagaaagaaaagaaagaaaggaagaaagtaagtaagtttccctggtaagggctcatgccttggcactgagg >1 tttctttctttctttctttctttctttctttctttctttctttctttctttttgttttctttcatctttccttcttcttttttgatggagtctcactctg >2 attaactctcttttttctttttctttttctttttctttttctttttctttttctttctttctttctttctttctttctttctttctttctttctttcttt >3 gagactccatcaaaaaagaagaaggaaagatgaaagaaaacaaaaagaaagaaagaaagaaagaaagaaagaaagaaagaaagaaagaaagaaagaaaga genometools-1.5.1/testdata/readjoiner/test_2.fas000066400000000000000000000003441211610345200216730ustar00rootroot00000000000000>read_13178 atatacatatatatgtatatgtgtatatatacatatacatatataatatatgtatatgtg tatatatacatatatatacacacatatatattagaggttg >read_39273 cacatatacatatatatgtatatgtgtatatatacatatacatatataatatatgtatat gtgtatatatacatatatatacacacatatatattagagg genometools-1.5.1/testdata/readjoiner/test_3.fas000066400000000000000000000005261211610345200216760ustar00rootroot00000000000000>read_13178 atatacatatatatgtatatgtgtatatatacatatacatatataatatatgtatatgtg tatatatacatatatatacacacatatatattagaggttg >read_39273 cacatatacatatatatgtatatgtgtatatatacatatacatatataatatatgtatat gtgtatatatacatatatatacacacatatatattagagg >read_51792 tacatatatatgtatatgtgtatatatacatatacatatataatatatgtatatgtgtat atatacatatatatacacacatatatattagaggttgtac genometools-1.5.1/testdata/readjoiner/tiny.fas000066400000000000000000000000501211610345200214500ustar00rootroot00000000000000>0 acagcatgcggcagtg >1 cagtgatcgatgctag genometools-1.5.1/testdata/readjoiner/tiny_mirrored.fas000066400000000000000000000001341211610345200233560ustar00rootroot00000000000000>0 acagcatgcggcagtg >1 cagtgatcgatgctag >2 (1rc) ctagcatcgatcactg >3 (0rc) cactgccgcatgctgt genometools-1.5.1/testdata/readjoiner/tiny_mirrored.spm000066400000000000000000000000241211610345200234020ustar00rootroot000000000000000 + 1 + 5 1 + 1 - 4 genometools-1.5.1/testdata/readjoiner/tiny_singlestrand.spm000066400000000000000000000000121211610345200242510ustar00rootroot000000000000000 + 1 + 5 genometools-1.5.1/testdata/readjoiner/trans_and_submax_ovl.fas000066400000000000000000000005071211610345200247040ustar00rootroot00000000000000>read_0 tgataagtcccaggacttcagaagagctgtgagaccttggccaagtcacttcctccgtgggcctaagtgcctcctctcgggacttcagaagagctgtgag >read_1 ccaggacttcagaagagctgtgagaccttggccaagtcacttcctccgtgggcctaagtgcctcctctcgggacttcagaagagctgtgagggtatgggg >read_2 gacttcagaagagctgtgagaccttggccaagtcacttcctccgtgggcctaagtgcctcctctcgggacttcagaagagctgtgagggtatggggacgg genometools-1.5.1/testdata/readjoiner/transred_1.fas000066400000000000000000000001711211610345200225330ustar00rootroot00000000000000>0 catcgatcgatcttcga >1 cttcgagcattgctgatta >2 cattgctgattaatcgtgattctt >3 gctgattaatcgtgattcttgctag >4 ttgctagcgatgcggt genometools-1.5.1/testdata/readjoiner/transred_1_targetseq.fas000066400000000000000000000000711211610345200246110ustar00rootroot00000000000000catcgatcgatcttcgagcattgctgattaatcgtgattcttgctagcgatgcggt genometools-1.5.1/testdata/readjoiner/transred_2.fas000066400000000000000000000001711211610345200225340ustar00rootroot00000000000000>0 catcgatcgatcttcga >1 taatcagcaatgctcgaag >2 cattgctgattaatcgtgattctt >3 gctgattaatcgtgattcttgctag >4 ttgctagcgatgcggt genometools-1.5.1/testdata/readjoiner/transred_3.dot000066400000000000000000000017121211610345200225540ustar00rootroot00000000000000graph StringGraph { 0 -- 2 [arrowtail=inv,arrowhead=normal]; 0 -- 16 [arrowtail=inv,arrowhead=normal]; 0 -- 17 [arrowtail=inv,arrowhead=normal]; 2 -- 16 [arrowtail=inv,arrowhead=normal]; 2 -- 17 [arrowtail=inv,arrowhead=normal]; 4 -- 14 [arrowtail=inv,arrowhead=normal]; 4 -- 18 [arrowtail=inv,arrowhead=normal]; 7 -- 9 [arrowtail=inv,arrowhead=normal]; 7 -- 3 [arrowtail=inv,arrowhead=normal]; 9 -- 3 [arrowtail=inv,arrowhead=normal]; 13 -- 9 [arrowtail=inv,arrowhead=normal]; 13 -- 3 [arrowtail=inv,arrowhead=normal]; 13 -- 7 [arrowtail=inv,arrowhead=normal]; 14 -- 18 [arrowtail=inv,arrowhead=normal]; 14 -- 13 [arrowtail=inv,arrowhead=normal]; 16 -- 17 [arrowtail=inv,arrowhead=normal]; 16 -- 4 [arrowtail=inv,arrowhead=normal]; 17 -- 14 [arrowtail=inv,arrowhead=normal]; 17 -- 18 [arrowtail=inv,arrowhead=normal]; 17 -- 4 [arrowtail=inv,arrowhead=normal]; 18 -- 13 [arrowtail=inv,arrowhead=normal]; 18 -- 7 [arrowtail=inv,arrowhead=normal]; } genometools-1.5.1/testdata/readjoiner/transred_3.fas000066400000000000000000000012221211610345200225330ustar00rootroot00000000000000>0 cgatcgatgtgcatggcatggcgctatgct >1 gcgctatgctagctgtagtcgtagctagggcgt >2 catggcatggcgctatgctag >3 gcgacgatcggctatggtacgta >4 tagtcgtagctagggcgtactgtcgatttt >5 atttttagcgggcttaggcta >6 aggctagcgggcccttattcgatgct >7 ttcgatgctagcattgcgacgatcggc >8 gacgatcggctatggtacgta >9 ctagcattgcgacgatcggctat >10 gctatgctagctgtagtcgtagctag >11 tagctagggcgtactgtcg >12 gcgggcttaggctagcgg >13 ttaggctagcgggcccttattcgatgctagcattgcgacgatcgg >14 gtactgtcgatttttagcgggcttaggctagcggg >15 gcgctatgctagctgtagtcgtagctagggcgtactgtcgatt >16 catggcgctatgctagctgtagtcgtagctaggg >17 ggcgctatgctagctgtagtcgtagctagggcgtactgtcgattt >18 tactgtcgatttttagcgggcttaggctagcgggcccttattcgatgctagca genometools-1.5.1/testdata/readjoiner/transred_3.l10.ss.spm000066400000000000000000000004661211610345200236110ustar00rootroot000000000000005 + 5 + 26 13 + 5 + 11 11 + 5 + 10 4 + 4 + 21 0 + 1 + 19 1 + 15 + 16 6 + 8 + 20 2 + 7 + 21 7 + 7 + 21 8 + 2 + 15 14 + 14 + 43 15 + 14 + 30 11 + 11 + 18 4 + 11 + 14 9 + 9 + 26 1 + 9 + 10 15 + 16 + 31 3 + 13 + 14 13 + 17 + 34 10 + 10 + 19 16 + 3 + 29 14 + 3 + 28 9 + 3 + 13 17 + 12 + 32 11 + 12 + 12 12 + 6 + 26 genometools-1.5.1/testdata/readjoiner/transred_3.r.dot000066400000000000000000000007041211610345200230140ustar00rootroot00000000000000graph StringGraph { 0 -- 2 [arrowtail=inv,arrowhead=normal]; 2 -- 16 [arrowtail=inv,arrowhead=normal]; 4 -- 14 [arrowtail=inv,arrowhead=normal]; 7 -- 9 [arrowtail=inv,arrowhead=normal]; 9 -- 3 [arrowtail=inv,arrowhead=normal]; 13 -- 7 [arrowtail=inv,arrowhead=normal]; 14 -- 18 [arrowtail=inv,arrowhead=normal]; 16 -- 17 [arrowtail=inv,arrowhead=normal]; 17 -- 4 [arrowtail=inv,arrowhead=normal]; 18 -- 13 [arrowtail=inv,arrowhead=normal]; } genometools-1.5.1/testdata/readjoiner/transred_3_targetseq.fas000066400000000000000000000002611211610345200246140ustar00rootroot00000000000000>contig_0 length=130 depth=11 0E-->...-->3E cgatcgatgtgcatggcatggcgctatgctagctgtagtcgtagctagggcgtactgtcg atttttagcgggcttaggctagcgggcccttattcgatgctagcattgcgacgatcggct atggtacgta genometools-1.5.1/testdata/readjoiner/varlen_1.fas000066400000000000000000000004151211610345200222010ustar00rootroot00000000000000>0 catggcatgctagctatgcatgctagctagctagtcgatcgatcgatgctagctagctagctagctaggcggctagctcgtag >1 gctagctagctagctagctaggcggctagctcgtagcgatcgtagcatgtcgatcgtagctagtcgatgctagtcgatgctgt >2 gcatgtcgatcgtagctagtcgatgctagtcgatgctgtccccatcgtaccgtagtgctagtcgatcgtagct >3 cacgatcatgcatg genometools-1.5.1/testdata/readjoiner/varlen_2.fas000066400000000000000000000004401211610345200222000ustar00rootroot00000000000000>0 catggcatgctagctatgcatgctagctagctagtcgatcgatcgatgctagctagctagctagctaggcggctagctcgtag >1 gctagctagctagctagctaggcggctagctcgtagcgatcgtagcatgtcgatcgtagctagtcgatgctagtcgatgctgt >2 gcatgtcgatcgtagctagtcgatgctagtcgatgctgtccccatcgtaccgtagtgctagtcgatcgtagct >3 cacgatcatgcatgcgatgctagctagtcgtgg genometools-1.5.1/testdata/readjoiner/wildcard1.fas000066400000000000000000000000431211610345200223410ustar00rootroot00000000000000>0 cagtcgttNgtgag >1 aagcgcagtcgtt genometools-1.5.1/testdata/readjoiner/wildcard1.fastq000066400000000000000000000001041211610345200227040ustar00rootroot00000000000000@0 cagtcgttNgtgag + GII)?F(1 aagcgcagtcgtt >0 cagtcgttNgtgag genometools-1.5.1/testdata/readjoiner/wildcard2.fastq000066400000000000000000000001041211610345200227050ustar00rootroot00000000000000@1 aagcgcagtcgtt + DE3A9#6;"803H @0 cagtcgttNgtgag + 23/HB)@.!::+)F genometools-1.5.1/testdata/readjoiner/wildcards.fas000066400000000000000000000014161211610345200224500ustar00rootroot00000000000000>read gctagctagctagtcgatcgatcgtagctggctacaccgatcgatcccagcagctagtcgatcgatacggctagctgagg >no_wildcards accgatcgatcccagcagctagtcgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgttta >first_char_wildcard nccgatcgatcccagcagctagtcgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgttta >last_char_wildcard accgatcgatcccagcagctagtcgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgtttn >internal_wildcard acngatcgatcccagcagctagtcgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgttta >two_wildcards acngatcgatcccagcagctagtngatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgttta >consecutive_wildcards acnnnncgatcccagcagctagtcgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgttta >only_wildcards nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn genometools-1.5.1/testdata/readjoiner/wildcards.fastq000066400000000000000000000026461211610345200230230ustar00rootroot00000000000000@read gctagctagctagtcgatcgatcgtagctggctacaccgatcgatcccagcagctagtcgatcgatacggctagctgagg + 250=G=BC?;=;*<;>'%G(BA+4.6)-(%I*83<->*B05?/A-3F7024;C<7*:/="IID*'867@*>+0+)6C<<6 @no_wildcards accgatcgatcccagcagctagtcgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgttta + E'::2I/>G+I"@.%D">>@;I42GHF'">34D?2A8#C757(.6H?250&IF00;A&H @first_char_wildcard Nccgatcgatcccagcagctagtcgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgttta + !>F$7.8BFH'.$(#=-58=<.3-:3$E@/>E<*?FA@95;@C48?6D.-$5EGI?C(,/:I64)&8(E#21?5#I$E*7 @last_char_wildcard accgatcgatcccagcagctagtcgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgtttN + /=6D;4A&E2&?FB:&H*;-EC64I&>+2-D9:&+E-2H)93*?9:&+1,6I$097-:$H(%5&@9@GAD-0)>22731! @internal_wildcard acNgatcgatcccagcagctagtcgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgttta + 1>!>2'8>0GA&D.4E??9-.D<-F49/$5%)@-?G$'=3#.549*8&6<@:4>+/I>9="0(""(HE:1+1@(8H66@5 @two_wildcards acNgatcgatcccagcagctagtNgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgttta + EB!7>;4313A07&"E5=#D@$95G32=C=-4@4;62(F-9G233>-8#;-101 @consecutive_wildcards acNNNNcgatcccagcagctagtcgatcgatacggctagctgaggcagtcagcggcgcggcatgcatgcgcgagcgttta + F0!!!!6?,15CH=%/<$&F3(?<2#$D$(IH/2+$:F94>/3;8-,&I"A+.3F55=3%9%DC"2.-0;A/&>706&7& @only_wildcards NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! genometools-1.5.1/testdata/readjoiner/with_rc.fas000066400000000000000000000000721211610345200221300ustar00rootroot00000000000000>dummy cgagtctagtcatgctagcgttt >1 acctagctagctgatattcgaat genometools-1.5.1/testdata/regionmapping_1.lua000066400000000000000000000000421211610345200214330ustar00rootroot00000000000000mapping = "wrong type of mapping" genometools-1.5.1/testdata/regionmapping_2.lua000066400000000000000000000000541211610345200214370ustar00rootroot00000000000000mapping = { bar = "wrong type of mapping" } genometools-1.5.1/testdata/regionmapping_3.lua000066400000000000000000000000441211610345200214370ustar00rootroot00000000000000mapping = { foo = { bar = "baz" } } genometools-1.5.1/testdata/regionmapping_4.lua000066400000000000000000000001141211610345200214360ustar00rootroot00000000000000mapping = { foo = os.getenv("GT_TESTDATA") .. "gt_extractfeat_succ_1.fas" } genometools-1.5.1/testdata/regionmapping_5.lua000066400000000000000000000000441211610345200214410ustar00rootroot00000000000000function mapping() return nil end genometools-1.5.1/testdata/regionmapping_6.lua000066400000000000000000000001361211610345200214440ustar00rootroot00000000000000function mapping(string) return os.getenv("GT_TESTDATA") .. "gt_extractfeat_succ_1.fas" end genometools-1.5.1/testdata/repfind-20-extend.txt000066400000000000000000005076151211610345200215670ustar00rootroot00000000000000263 1646 2 F 263 1862 3 486 10 96.20 174 497 268 F 173 1549 163 295 10 94.22 174 1544 186 F 173 1549 163 287 12 93.06 86 1549 163 F 87 1551 171 125 9 89.53 192 1 378 F 187 2 0 343 9 95.19 276 1 294 F 271 16 0 515 8 97.05 334 5 0 F 334 39 34 632 9 97.31 213 7 0 F 213 39 34 406 5 97.65 610 3 0 F 607 39 72 1145 18 97.03 168 719 268 F 168 1199 159 320 4 97.62 221 59 231 F 224 651 48 309 34 84.62 403 1764 7 F 417 1896 0 660 40 90.07 433 1745 0 F 427 1764 1 748 28 93.44 427 1764 1 F 432 1767 0 775 21 95.08 404 1764 10 F 403 1882 0 755 13 96.77 296 960 29 F 303 970 135 543 14 95.27 123 470 352 F 126 991 113 233 4 96.75 53 186 88 F 52 186 121 65 10 80.77 80 35 204 F 80 73 144 152 2 97.50 80 72 215 F 80 73 144 152 2 97.50 22 1932 125 F 22 1932 230 44 0 100.00 274 1039 0 F 274 1435 147 524 6 97.81 384 738 115 F 391 1384 0 671 26 93.23 377 739 2 F 383 1384 8 592 42 88.86 391 470 80 F 395 1013 0 690 24 93.86 119 991 114 F 117 1013 277 224 3 97.44 382 1121 56 F 384 1512 11 674 23 93.98 103 24 164 F 103 43 1 206 0 100.00 399 1882 0 F 414 1896 3 669 36 90.98 405 1745 6 F 413 1896 0 662 39 90.37 405 1767 6 F 413 1896 0 674 36 91.11 449 1745 9 F 440 1882 0 773 27 93.86 446 1767 9 F 440 1882 0 806 20 95.45 191 1734 134 F 194 1814 141 269 29 84.82 163 1578 0 F 163 1682 12 290 9 94.48 423 449 0 F 421 868 143 788 14 96.67 383 318 13 F 387 905 59 678 23 93.99 495 79 129 F 498 1495 70 917 19 96.16 323 915 121 F 325 1070 53 600 12 96.28 278 1288 43 F 275 1374 150 477 19 93.09 378 242 0 F 379 294 0 729 7 98.15 602 5 96 F 601 16 214 1099 26 95.67 228 1132 161 F 230 1140 69 434 6 97.37 455 3 155 F 453 6 156 844 16 96.47 610 3 0 F 607 39 72 1145 18 97.03 411 1696 0 F 412 1781 23 691 33 91.97 432 798 1 F 428 1120 16 716 36 91.59 453 474 87 F 444 1120 0 765 33 92.57 376 543 104 F 376 1120 68 696 14 96.28 444 658 158 F 444 1120 0 752 34 92.34 416 713 24 F 420 1120 24 744 23 94.47 444 1120 0 F 439 1297 36 735 37 91.57 445 912 38 F 439 1120 0 760 31 92.94 395 1120 24 F 396 1327 40 659 33 91.65 353 985 0 F 353 1426 64 654 13 96.32 391 470 80 F 395 1013 0 690 24 93.86 348 1064 63 F 351 1669 2 603 24 93.10 376 634 4 F 377 976 13 689 16 95.74 268 248 0 F 269 292 0 477 15 94.40 404 549 32 F 412 661 104 712 26 93.56 384 738 115 F 391 1384 0 671 26 93.23 267 227 189 F 267 968 0 342 48 82.02 270 313 34 F 265 1782 2 451 21 92.08 223 313 78 F 220 1827 5 383 15 93.18 455 3 155 F 453 6 156 844 16 96.47 610 3 0 F 607 39 72 1145 18 97.03 641 6 156 F 647 39 227 1216 18 97.19 238 2 130 F 238 3 58 408 17 92.86 238 3 58 F 238 16 214 404 18 92.44 141 2 227 F 141 6 156 254 7 95.04 141 6 156 F 141 16 311 250 8 94.33 290 902 26 F 289 988 50 483 24 91.70 289 988 50 F 290 1151 59 491 22 92.39 288 451 41 F 285 988 54 485 22 92.28 337 736 68 F 339 988 0 540 34 89.91 288 846 223 F 290 988 49 490 22 92.36 286 380 10 F 289 988 50 479 24 91.61 290 988 49 F 292 1230 114 478 26 91.03 451 658 126 F 462 826 19 829 21 95.34 237 994 160 F 242 1190 41 423 14 94.09 151 473 90 F 156 1190 41 243 16 89.40 151 766 127 F 156 1190 41 247 15 90.07 319 131 0 F 319 158 0 630 2 99.37 309 1681 0 F 308 1808 0 541 19 93.83 350 867 233 F 355 1602 0 633 18 94.86 326 676 49 F 324 1165 1 538 28 91.36 194 216 0 F 194 277 0 380 2 98.97 391 1787 9 F 389 1810 2 680 25 93.57 299 1871 0 F 296 1892 0 515 20 93.24 278 1288 43 F 275 1374 150 477 19 93.09 404 549 32 F 412 661 104 712 26 93.56 268 248 0 F 269 292 0 477 15 94.40 270 313 34 F 265 1782 2 451 21 92.08 223 313 78 F 220 1827 5 383 15 93.18 174 1564 0 F 174 1847 123 312 9 94.83 309 1649 13 F 309 1931 0 546 18 94.17 309 1708 8 F 305 1931 0 490 30 90.16 20 249 209 F 20 817 234 40 0 100.00 369 724 42 F 407 1826 28 520 62 83.20 369 1475 72 F 376 1594 0 577 42 88.62 224 1196 0 F 222 1456 43 354 23 89.64 359 11 153 F 356 29 155 639 19 94.66 93 1668 56 F 93 1668 101 154 8 91.40 35 1668 56 F 35 1668 146 62 2 94.29 228 473 13 F 226 994 85 382 18 92.04 446 1620 20 F 439 1937 0 721 41 90.66 456 1796 26 F 446 1937 0 718 46 89.69 93 1668 56 F 93 1668 101 154 8 91.40 389 848 138 F 404 1658 0 637 39 89.97 367 881 0 F 364 1248 100 699 8 97.80 300 1910 0 F 299 1926 25 543 14 95.32 188 579 3 F 192 1456 73 300 20 89.36 208 1138 64 F 200 1215 247 280 32 84.00 324 641 0 F 325 1365 50 581 17 94.75 325 630 91 F 324 641 0 569 20 93.83 324 380 79 F 324 641 0 600 12 96.30 324 641 0 F 324 846 294 596 13 95.99 324 641 0 F 324 902 99 604 11 96.60 324 641 0 F 324 1151 132 604 11 96.60 324 641 0 F 327 1230 186 599 13 95.99 322 451 112 F 322 641 0 600 11 96.58 322 641 0 F 322 736 188 600 11 96.58 324 641 0 F 324 1100 119 584 16 95.06 289 481 15 F 282 641 42 503 17 93.97 320 641 0 F 320 1360 95 556 21 93.44 306 483 74 F 304 641 0 558 13 95.72 213 474 180 F 212 641 0 361 16 92.45 212 543 121 F 212 641 0 360 16 92.45 212 641 0 F 210 658 245 354 17 91.90 212 641 0 F 211 713 82 343 20 90.52 212 641 0 F 210 1297 118 346 19 90.95 212 641 0 F 213 912 128 365 15 92.92 212 641 0 F 212 1327 102 344 20 90.57 212 641 0 F 213 761 4 357 17 91.98 212 641 0 F 212 826 147 360 16 92.45 212 641 0 F 213 798 73 353 18 91.51 326 605 57 F 324 641 0 574 19 94.14 324 641 0 F 326 1143 83 582 17 94.75 349 483 31 F 345 902 58 670 6 98.26 349 483 31 F 345 1151 91 670 6 98.26 375 451 41 F 380 483 0 695 15 96.00 349 483 31 F 345 736 147 670 6 98.26 261 483 31 F 258 1049 91 455 16 93.80 256 483 31 F 253 543 80 437 18 92.89 215 483 72 F 215 761 2 390 10 95.35 256 483 31 F 253 826 106 449 15 94.07 349 483 31 F 345 846 253 662 8 97.68 234 483 53 F 231 1327 83 393 18 92.21 344 380 39 F 349 483 31 661 8 97.67 292 483 0 F 285 988 54 469 27 90.53 234 483 53 F 229 1297 99 399 16 93.01 218 483 74 F 221 506 0 355 21 90.37 221 506 0 F 218 630 91 331 27 87.61 217 380 79 F 221 506 0 354 21 90.32 221 506 0 F 217 902 99 358 20 90.78 221 506 0 F 217 1151 132 358 20 90.78 221 506 0 F 220 1230 186 357 21 90.45 217 451 112 F 221 506 0 358 20 90.78 221 506 0 F 217 736 188 358 20 90.78 221 506 0 F 217 1100 119 346 23 89.40 221 506 0 F 219 1143 83 344 24 89.04 342 506 0 F 337 1049 133 635 11 96.74 162 506 0 F 158 1189 14 256 16 89.87 221 506 0 F 219 605 57 336 26 88.13 308 506 0 F 303 988 123 547 16 94.72 221 506 0 F 217 641 0 330 27 87.56 284 474 180 F 289 506 0 441 33 88.38 289 506 0 F 283 543 121 436 34 87.99 273 506 16 F 268 1297 131 413 32 88.06 289 506 0 F 284 912 128 437 34 88.03 279 506 0 F 275 761 4 434 30 89.09 279 506 0 F 274 826 147 433 30 89.05 289 506 0 F 284 798 73 425 37 86.97 289 506 0 F 281 658 245 430 35 87.54 253 506 36 F 251 713 113 392 28 88.84 288 506 0 F 281 1120 87 413 39 86.12 221 506 0 F 217 846 294 350 22 89.86 221 506 0 F 218 1365 50 351 22 89.91 159 35 0 F 159 54 46 298 5 96.86 159 42 0 F 159 54 46 298 5 96.86 350 867 233 F 355 1602 0 633 18 94.86 228 18 192 F 228 40 156 368 22 90.35 251 18 169 F 250 747 47 377 31 87.60 409 1097 23 F 417 1806 1 686 35 91.44 284 386 212 F 293 1201 56 501 19 93.31 203 579 15 F 205 1076 32 312 24 88.18 211 579 7 F 210 1120 87 333 22 89.52 268 579 4 F 276 1196 30 444 25 90.67 220 474 173 F 218 579 0 326 28 87.16 219 543 114 F 218 579 0 329 27 87.61 218 579 0 F 217 658 238 319 29 86.64 211 579 7 F 211 713 82 326 24 88.63 211 579 7 F 210 1297 118 317 26 87.62 218 579 0 F 220 912 121 330 27 87.61 218 579 0 F 219 1327 95 317 30 86.24 211 579 7 F 213 761 4 324 25 88.15 218 579 0 F 219 826 140 329 27 87.61 218 579 0 F 220 798 66 318 30 86.24 313 483 67 F 310 579 0 539 21 93.23 347 579 1 F 350 1365 43 605 23 93.37 348 579 0 F 350 630 84 598 25 92.82 331 380 72 F 330 579 0 581 20 93.94 330 579 0 F 331 846 287 577 21 93.64 330 579 0 F 331 902 92 585 19 94.24 330 579 0 F 331 1151 125 585 19 94.24 330 579 0 F 334 1230 179 588 19 94.24 329 451 105 F 328 579 0 581 19 94.21 328 579 0 F 329 736 181 581 19 94.21 330 579 0 F 331 1100 112 581 20 93.94 348 579 0 F 352 1143 75 608 23 93.39 258 579 37 F 257 642 0 427 22 91.44 208 579 0 F 206 849 54 282 33 83.98 214 506 7 F 211 579 12 297 32 84.83 223 579 0 F 223 1049 126 334 28 87.44 219 579 4 F 221 1328 70 308 33 84.93 192 579 26 F 202 935 48 246 37 80.73 188 579 3 F 192 1456 73 300 20 89.36 304 481 0 F 296 579 34 520 20 93.24 164 579 0 F 166 1189 6 242 22 86.59 248 1868 37 F 248 1948 21 400 24 90.32 343 568 69 F 345 1793 63 652 9 97.38 375 37 0 F 383 1823 0 670 22 94.13 370 483 10 F 363 605 0 637 24 93.39 383 605 0 F 384 902 39 695 18 95.30 383 605 0 F 383 1151 73 702 16 95.82 383 605 0 F 385 1230 128 688 20 94.78 383 451 51 F 381 605 0 692 18 95.28 381 605 0 F 380 736 130 697 16 95.79 383 605 0 F 386 1100 57 649 29 92.43 383 605 0 F 387 1143 22 650 30 92.17 276 605 0 F 275 1049 74 443 27 90.18 107 605 109 F 107 1189 65 202 3 97.20 306 483 74 F 304 641 0 558 13 95.72 324 641 0 F 324 902 99 604 11 96.60 324 641 0 F 324 1151 132 604 11 96.60 324 641 0 F 327 1230 186 599 13 95.99 322 451 112 F 322 641 0 600 11 96.58 322 641 0 F 322 736 188 600 11 96.58 324 641 0 F 324 1100 119 584 16 95.06 324 641 0 F 326 1143 83 582 17 94.75 217 641 0 F 216 1049 133 365 17 92.13 157 641 0 F 158 1189 14 271 11 92.99 326 605 57 F 324 641 0 574 19 94.14 213 474 180 F 212 641 0 361 16 92.45 212 543 121 F 212 641 0 360 16 92.45 212 641 0 F 210 1297 118 346 19 90.95 212 641 0 F 213 912 128 365 15 92.92 212 641 0 F 213 761 4 357 17 91.98 212 641 0 F 212 826 147 360 16 92.45 212 641 0 F 213 798 73 353 18 91.51 272 474 121 F 271 605 0 443 25 90.77 270 543 63 F 271 605 0 421 30 88.89 162 605 109 F 162 1297 166 284 10 93.83 271 605 0 F 270 912 71 437 26 90.37 216 605 55 F 215 761 2 363 17 92.09 271 605 0 F 270 826 89 437 26 90.37 271 605 0 F 270 798 16 401 35 87.04 212 641 0 F 210 658 245 354 17 91.90 271 605 0 F 267 658 188 438 25 90.64 212 641 0 F 211 713 82 343 20 90.52 271 605 0 F 263 713 30 386 37 85.93 212 641 0 F 210 1120 87 338 21 90.00 267 605 4 F 263 1120 34 386 36 86.31 324 641 0 F 324 846 294 596 13 95.99 383 605 0 F 382 846 236 693 18 95.29 324 641 0 F 325 1365 50 581 17 94.75 370 605 13 F 373 1365 2 639 26 92.97 164 641 38 F 165 849 95 261 17 89.63 167 605 94 F 165 849 95 268 16 90.30 185 641 0 F 188 1456 77 293 20 89.19 240 605 4 F 243 1456 22 339 36 85.00 39 99 0 F 39 461 4 74 1 97.44 39 99 0 F 39 1850 264 74 1 97.44 39 99 0 F 38 950 65 65 3 92.11 35 540 250 F 35 540 274 50 5 85.71 47 375 297 F 47 375 343 86 2 95.74 245 885 68 F 247 1021 3 440 13 94.69 250 1021 0 F 250 1051 242 468 8 96.80 299 1548 0 F 300 1554 49 591 2 99.33 287 1170 0 F 283 1347 84 466 26 90.81 389 848 138 F 404 1658 0 637 39 89.97 309 1681 0 F 308 1808 0 541 19 93.83 115 1649 38 F 115 1871 4 154 19 83.48 339 1649 38 F 335 1892 4 478 49 85.37 115 1708 33 F 115 1871 4 154 19 83.48 230 1708 33 F 230 1892 4 332 32 86.09 115 1736 18 F 115 1871 4 146 21 81.74 204 1736 18 F 205 1892 4 269 35 82.84 310 654 103 F 306 807 164 580 9 97.06 461 654 0 F 461 1212 120 758 41 91.11 257 902 54 F 252 1297 76 429 20 92.06 305 1151 39 F 295 1297 33 456 36 87.80 246 451 78 F 241 1297 87 415 18 92.53 304 736 96 F 295 1297 33 459 35 88.14 402 1049 15 F 383 1297 16 553 58 84.86 480 543 0 F 468 1297 7 824 31 93.38 341 761 0 F 338 1297 114 651 7 97.93 414 826 67 F 407 1297 43 733 22 94.59 284 846 222 F 277 1297 51 445 29 89.53 282 380 9 F 277 1297 51 455 26 90.61 304 988 70 F 299 1297 69 467 34 88.63 252 1297 76 F 261 1365 2 413 25 90.08 259 1297 69 F 265 1360 42 400 31 88.03 83 779 294 F 84 783 289 119 12 85.54 83 849 0 F 90 1892 297 93 19 77.11 93 849 0 F 94 912 68 131 14 84.95 352 422 168 F 367 1126 0 611 27 92.33 386 376 0 F 401 1694 81 607 45 88.34 330 1277 1 F 326 1694 81 580 19 94.17 254 1402 3 F 257 1694 225 359 38 85.04 53 1230 71 F 56 1871 243 69 10 81.13 409 1097 23 F 417 1806 1 686 35 91.44 424 454 70 F 432 1837 0 772 21 95.05 352 422 168 F 367 1126 0 611 27 92.33 184 175 74 F 183 1821 0 303 16 91.26 360 544 0 F 358 1343 70 658 15 95.81 367 530 53 F 365 1343 63 688 11 96.99 360 1664 0 F 362 1892 3 622 25 93.06 228 1132 161 F 230 1140 69 434 6 97.37 348 1064 63 F 351 1669 2 603 24 93.10 420 61 134 F 424 65 137 752 22 94.76 381 61 134 F 380 64 137 701 15 96.05 503 2 130 F 522 5 96 845 45 91.05 602 5 96 F 601 16 214 1099 26 95.67 296 3 0 F 296 5 38 572 5 98.31 141 5 193 F 141 6 156 254 7 95.04 334 5 0 F 334 39 34 632 9 97.31 293 22 368 F 282 29 0 471 26 90.78 178 474 215 F 177 642 3 279 18 89.83 181 543 152 F 180 642 0 281 19 89.44 180 642 0 F 180 658 275 276 20 88.89 177 642 3 F 178 713 115 275 19 89.27 180 642 0 F 180 1297 148 276 20 88.89 180 642 0 F 181 912 160 281 19 89.44 180 642 0 F 181 1327 133 273 21 88.33 180 642 0 F 181 761 36 281 19 89.44 180 642 0 F 181 826 178 281 19 89.44 180 642 0 F 182 798 104 278 20 88.89 259 483 106 F 257 642 0 460 14 94.55 254 642 0 F 256 1365 81 462 12 95.28 258 630 123 F 257 642 0 455 15 94.16 258 380 110 F 257 642 0 463 13 94.94 257 642 0 F 258 846 325 455 15 94.16 257 642 0 F 258 902 130 463 13 94.94 257 642 0 F 258 1151 163 463 13 94.94 257 642 0 F 258 1230 220 463 13 94.94 258 451 143 F 257 642 0 463 13 94.94 257 642 0 F 258 736 219 463 13 94.94 257 642 0 F 258 1100 150 459 14 94.55 257 642 0 F 258 1143 116 455 15 94.16 228 642 6 F 231 1196 75 395 16 92.98 187 506 34 F 185 642 0 276 24 87.03 185 642 0 F 185 1049 164 290 20 89.19 185 642 0 F 185 1328 106 282 22 88.11 161 642 0 F 171 935 60 228 26 83.85 177 642 3 F 178 1076 59 255 24 86.44 180 642 0 F 180 1120 117 272 21 88.33 153 642 0 F 155 1456 110 240 17 88.89 258 481 11 F 251 642 6 429 20 92.03 125 642 0 F 126 1189 46 203 12 90.40 195 610 53 F 196 642 61 359 8 95.90 256 641 33 F 257 642 0 441 18 92.97 206 642 51 F 206 1289 3 376 9 95.63 257 642 0 F 258 1360 126 451 16 93.77 239 605 109 F 239 642 18 430 12 94.98 309 244 0 F 309 272 0 590 7 97.73 274 1039 0 F 274 1435 147 524 6 97.81 349 935 48 F 340 1076 44 569 30 91.18 322 849 95 F 323 1076 61 577 17 94.72 329 761 12 F 330 1076 31 599 15 95.44 326 826 155 F 328 1076 31 590 16 95.09 330 1939 0 F 330 1940 10 568 23 93.03 238 2 130 F 238 39 130 412 16 93.28 238 16 214 F 238 39 130 408 17 92.86 503 2 130 F 522 5 96 845 45 91.05 602 5 96 F 601 16 214 1099 26 95.67 238 2 130 F 238 3 58 408 17 92.86 238 3 58 F 238 16 214 404 18 92.44 39 1206 299 F 37 1304 281 56 5 86.49 168 65 149 F 168 65 191 324 3 98.21 168 64 191 F 168 65 149 324 3 98.21 168 61 188 F 168 65 149 324 3 98.21 168 64 149 F 168 65 191 324 3 98.21 168 64 149 F 168 64 191 324 3 98.21 168 61 188 F 168 64 149 324 3 98.21 164 61 150 F 165 65 194 309 5 96.95 164 61 150 F 165 64 194 309 5 96.95 164 61 150 F 165 61 191 309 5 96.95 126 65 149 F 126 65 233 240 3 97.62 126 64 233 F 126 65 149 240 3 97.62 126 61 230 F 126 65 149 240 3 97.62 126 64 149 F 126 65 233 240 3 97.62 126 64 149 F 126 64 233 240 3 97.62 126 61 230 F 126 64 149 240 3 97.62 122 61 150 F 123 65 236 225 5 95.90 122 61 150 F 123 64 236 225 5 95.90 122 61 150 F 123 61 233 225 5 95.90 46 65 149 F 48 65 317 82 3 93.48 46 64 149 F 48 65 317 82 3 93.48 42 61 150 F 45 65 320 67 5 88.10 88 65 149 F 90 65 275 158 5 94.32 88 64 149 F 90 65 275 158 5 94.32 84 61 150 F 87 65 278 143 7 91.67 48 64 317 F 46 65 149 82 3 93.48 46 64 149 F 48 64 317 82 3 93.48 42 61 150 F 45 64 320 67 5 88.10 90 64 275 F 88 65 149 158 5 94.32 88 64 149 F 90 64 275 158 5 94.32 84 61 150 F 87 64 278 143 7 91.67 42 61 314 F 42 65 149 80 1 97.62 42 61 314 F 42 64 149 80 1 97.62 38 61 150 F 39 61 317 65 3 92.11 84 61 272 F 84 65 149 156 3 96.43 84 61 272 F 84 64 149 156 3 96.43 80 61 150 F 81 61 275 141 5 93.75 351 474 189 F 360 935 37 607 26 92.59 350 543 130 F 360 935 37 606 26 92.57 360 935 37 F 348 1297 127 600 27 92.24 346 912 137 F 355 935 37 597 26 92.49 324 935 48 F 314 1327 122 534 26 91.72 336 761 5 F 346 935 28 562 30 91.07 333 826 148 F 344 935 28 561 29 91.29 350 798 83 F 359 935 38 589 30 91.43 321 1941 0 F 323 1942 31 524 30 90.65 415 1663 0 F 414 1893 27 657 43 89.61 339 1802 3 F 340 1877 0 667 3 99.12 391 1787 9 F 389 1810 2 680 25 93.57 389 848 138 F 404 1658 0 637 39 89.97 321 1941 0 F 323 1942 31 524 30 90.65 363 477 0 F 360 1052 64 659 16 95.56 400 542 30 F 413 1056 0 713 25 93.75 348 406 94 F 355 1056 58 615 22 93.68 295 376 132 F 295 1402 3 534 14 95.25 184 1277 151 F 184 1402 3 312 14 92.39 254 1402 3 F 257 1694 225 359 38 85.04 253 461 0 F 259 1850 260 472 10 96.05 365 422 1 F 375 1794 64 576 41 88.77 39 99 0 F 38 1041 55 65 3 92.11 153 461 0 F 151 1041 51 184 30 80.13 151 1041 51 F 153 1850 260 180 31 79.47 365 950 12 F 366 1041 0 639 23 93.70 253 461 0 F 259 1850 260 472 10 96.05 299 808 0 F 305 968 26 308 74 75.25 403 1627 8 F 408 1747 0 735 19 95.29 112 1282 208 F 112 1349 201 160 16 85.71 112 306 77 F 112 1282 208 152 18 83.93 434 426 27 F 429 795 0 675 47 89.04 250 579 80 F 252 1198 76 434 17 93.20 316 630 100 F 326 1198 2 538 26 91.77 315 380 88 F 326 1198 2 545 24 92.38 315 605 68 F 323 1198 5 522 29 90.79 315 846 303 F 326 1198 2 541 25 92.06 315 902 108 F 326 1198 2 549 23 92.70 315 1151 141 F 326 1198 2 549 23 92.70 326 1198 2 F 317 1230 196 551 23 92.74 313 451 121 F 324 1198 2 545 23 92.65 313 736 197 F 324 1198 2 545 23 92.65 316 1143 93 F 326 1198 2 538 26 91.77 315 1100 128 F 326 1198 2 537 26 91.75 242 1198 84 F 239 1289 3 413 17 92.89 294 481 10 F 293 1198 35 499 22 92.49 297 483 83 F 306 1198 2 515 22 92.59 54 1196 311 F 54 1198 274 92 4 92.59 168 610 115 F 171 1198 157 307 8 95.24 282 641 42 F 288 1198 40 490 20 92.91 641 6 156 F 647 39 227 1216 18 97.19 610 3 0 F 607 39 72 1145 18 97.03 200 3 299 F 199 5 337 343 14 92.96 200 3 299 F 199 16 455 335 16 91.96 153 2 371 F 156 3 299 253 14 90.85 309 5 337 F 310 6 300 503 29 90.61 310 6 300 F 309 16 455 495 31 89.97 197 2 371 F 202 6 300 295 26 86.80 334 5 0 F 334 39 34 632 9 97.31 238 16 214 F 238 39 130 408 17 92.86 238 2 130 F 238 39 130 412 16 93.28 365 950 12 F 366 1041 0 639 23 93.70 169 1125 193 F 172 1507 250 313 7 95.86 416 1620 0 F 415 1796 6 743 22 94.70 169 1125 193 F 172 1507 250 313 7 95.86 311 1403 0 F 311 1403 0 582 6 98.07 32 1403 187 F 31 1403 191 55 2 93.55 223 1649 20 F 222 1736 0 409 9 95.95 223 1708 15 F 222 1736 0 401 11 95.05 380 78 86 F 375 80 149 635 30 92.00 277 1649 5 F 278 1708 0 511 11 96.03 145 736 139 F 145 1837 0 246 11 92.41 145 846 245 F 145 1837 0 242 12 91.72 142 658 197 F 144 1837 0 242 11 92.25 293 22 368 F 282 29 0 471 26 90.78 200 204 13 F 200 273 0 400 0 100.00 221 59 231 F 224 651 48 309 34 84.62 263 1646 2 F 263 1862 3 486 10 96.20 248 1868 37 F 248 1948 21 400 24 90.32 78 476 76 F 77 850 181 115 10 87.01 297 483 83 F 306 1198 2 515 22 92.59 326 1198 2 F 316 1365 59 542 25 92.09 316 630 100 F 326 1198 2 538 26 91.77 315 380 88 F 326 1198 2 545 24 92.38 315 846 303 F 326 1198 2 541 25 92.06 315 902 108 F 326 1198 2 549 23 92.70 315 1151 141 F 326 1198 2 549 23 92.70 326 1198 2 F 317 1230 196 551 23 92.74 313 451 121 F 324 1198 2 545 23 92.65 313 736 197 F 324 1198 2 545 23 92.65 315 1100 128 F 326 1198 2 537 26 91.75 294 481 10 F 293 1198 35 499 22 92.49 322 1198 2 F 311 1360 104 513 30 90.35 282 641 42 F 288 1198 40 490 20 92.91 256 483 31 F 250 658 205 442 16 93.60 299 658 156 F 308 902 3 507 25 91.64 334 658 121 F 344 1151 0 558 30 91.02 275 451 49 F 269 658 186 484 15 94.42 375 658 80 F 382 736 18 613 36 90.40 395 658 131 F 405 1049 12 636 41 89.62 477 543 3 F 476 658 126 869 21 95.59 338 658 241 F 341 761 0 659 5 98.52 451 658 126 F 462 826 19 829 21 95.34 402 658 53 F 421 846 85 647 44 89.05 364 658 213 F 365 1327 71 677 13 96.43 290 380 1 F 289 658 166 495 21 92.73 318 658 177 F 324 988 50 534 27 91.51 426 658 176 F 424 1297 51 774 19 95.52 309 244 0 F 309 272 0 590 7 97.73 391 825 86 F 390 1874 2 705 19 95.13 392 432 23 F 392 1874 0 716 17 95.66 336 652 71 F 336 1874 56 600 18 94.64 376 492 0 F 377 1874 14 697 14 96.28 372 862 0 F 385 1874 2 613 36 90.32 377 1469 77 F 372 1874 0 661 22 94.09 333 742 0 F 334 1874 34 567 25 92.49 237 994 160 F 242 1190 41 423 14 94.09 151 473 90 F 156 1190 41 243 16 89.40 151 766 127 F 156 1190 41 247 15 90.07 379 379 0 F 398 1785 85 581 48 87.34 255 1382 47 F 266 1933 214 393 32 87.45 248 1868 37 F 248 1948 21 400 24 90.32 347 474 46 F 344 1151 0 603 22 93.60 369 1475 72 F 376 1594 0 577 42 88.62 95 1260 272 F 98 1615 135 165 7 92.63 389 848 138 F 404 1658 0 637 39 89.97 223 247 130 F 226 880 2 361 22 90.13 291 1294 30 F 299 1786 23 498 23 92.10 327 825 146 F 320 862 53 587 15 95.31 373 492 0 F 361 862 12 638 24 93.35 337 862 22 F 349 1469 105 590 24 92.88 372 862 0 F 385 1874 2 613 36 90.32 375 37 0 F 383 1823 0 670 22 94.13 284 386 212 F 293 1201 56 501 19 93.31 307 624 179 F 327 1619 0 470 41 86.64 391 1787 9 F 389 1810 2 680 25 93.57 341 319 2 F 336 626 202 581 24 92.86 309 1548 7 F 314 1552 0 559 16 94.82 297 1552 0 F 293 1554 56 526 16 94.54 299 1548 0 F 300 1554 49 591 2 99.33 280 871 111 F 279 1401 50 475 21 92.47 282 647 2 F 279 1388 62 493 17 93.91 351 474 189 F 360 935 37 607 26 92.59 350 543 130 F 360 935 37 606 26 92.57 348 658 254 F 360 935 37 596 28 91.95 327 713 113 F 335 935 62 574 22 93.27 323 474 217 F 322 849 95 605 10 96.89 323 543 157 F 322 849 95 605 10 96.89 322 658 280 F 322 849 95 600 11 96.58 323 713 117 F 322 849 95 605 10 96.89 352 474 188 F 353 1076 31 633 18 94.89 351 543 129 F 353 1076 31 636 17 95.16 349 658 253 F 353 1076 31 626 19 94.56 350 713 90 F 353 1076 31 631 18 94.86 360 935 37 F 348 1297 127 600 27 92.24 322 849 95 F 322 1297 153 596 12 96.27 344 1076 40 F 342 1297 133 622 16 95.32 346 912 137 F 355 935 37 597 26 92.49 317 849 95 F 318 912 165 595 10 96.85 347 912 136 F 348 1076 31 631 16 95.39 350 798 83 F 359 935 38 589 30 91.43 324 798 109 F 322 849 95 594 13 95.96 349 798 84 F 349 1076 35 618 20 94.27 341 761 0 F 341 798 69 654 7 97.95 341 474 176 F 341 761 0 666 4 98.83 340 543 117 F 341 761 0 665 4 98.82 338 658 241 F 341 761 0 659 5 98.52 338 713 79 F 340 761 1 650 7 97.93 321 761 20 F 320 1297 132 629 3 99.06 341 761 0 F 341 912 124 666 4 98.83 408 798 0 F 407 826 74 735 20 95.09 480 474 35 F 479 826 2 899 15 96.87 455 543 0 F 466 826 15 829 23 94.95 451 658 126 F 462 826 19 829 21 95.34 405 713 10 F 413 826 68 690 32 92.10 414 826 67 F 407 1297 43 733 22 94.59 467 826 14 F 463 912 0 854 19 95.90 340 935 57 F 330 1120 114 566 26 92.12 322 849 95 F 322 1120 122 588 14 95.65 352 1076 32 F 348 1120 96 624 19 94.54 339 761 0 F 336 1120 83 631 11 96.73 426 826 55 F 419 1120 0 709 34 91.89 324 935 48 F 314 1327 122 534 26 91.72 297 849 95 F 298 1327 138 547 12 95.96 328 1076 31 F 326 1327 110 578 19 94.17 338 761 1 F 337 1327 99 643 8 97.63 367 826 114 F 365 1327 71 676 14 96.16 317 1381 25 F 332 1661 121 421 56 82.33 396 584 79 F 407 1661 35 627 43 89.14 348 1064 63 F 351 1669 2 603 24 93.10 449 1745 9 F 440 1882 0 773 27 93.86 458 1745 0 F 455 1767 0 801 28 93.85 433 1745 0 F 427 1764 1 748 28 93.44 384 738 115 F 391 1384 0 671 26 93.23 377 739 2 F 383 1384 8 592 42 88.86 289 1514 0 F 293 1627 121 494 22 92.39 313 560 59 F 311 1069 28 572 13 95.82 540 4 16 F 523 47 0 935 32 93.88 323 915 121 F 325 1070 53 600 12 96.28 399 815 46 F 415 1699 47 678 33 91.73 328 539 94 F 328 1080 0 584 18 94.51 21 859 210 F 21 1524 237 42 0 100.00 215 1214 205 F 213 1214 207 412 4 98.12 42 1214 205 F 41 1214 209 67 4 90.24 40 1214 205 F 39 1214 211 63 4 89.74 28 1214 205 F 28 1214 213 56 0 100.00 36 1214 205 F 37 1214 215 53 5 86.11 35 1214 205 F 36 1214 217 51 5 85.71 23 859 208 F 23 1214 207 46 0 100.00 37 859 208 F 37 1214 209 50 6 83.78 23 859 208 F 23 1214 211 46 0 100.00 23 859 208 F 23 1214 213 46 0 100.00 23 859 208 F 23 1214 215 46 0 100.00 23 859 208 F 23 1214 217 46 0 100.00 22 859 208 F 22 1214 219 44 0 100.00 35 1214 205 F 34 1214 219 49 5 85.29 21 859 208 F 21 1524 237 42 0 100.00 40 1214 205 F 38 1524 237 58 5 86.84 38 1214 207 F 38 1524 237 60 4 89.47 36 1214 209 F 38 1524 237 58 4 88.89 37 1214 211 F 39 1524 237 52 6 83.78 28 1214 213 F 29 1524 237 45 3 89.29 21 1214 215 F 21 1524 237 42 0 100.00 21 1214 217 F 21 1524 237 42 0 100.00 34 1214 219 F 32 1524 237 54 3 90.62 43 859 208 F 41 859 210 76 2 95.12 21 859 210 F 21 1214 205 42 0 100.00 20 859 208 F 20 1214 221 40 0 100.00 33 1214 205 F 32 1214 221 45 5 84.38 32 1214 221 F 32 1524 237 52 3 90.62 323 1231 2 F 322 1318 24 617 7 97.83 121 354 197 F 121 1077 212 234 2 98.35 159 35 0 F 159 54 46 298 5 96.86 159 42 0 F 159 54 46 298 5 96.86 132 54 44 F 132 146 259 248 4 96.97 409 1097 23 F 417 1806 1 686 35 91.44 200 545 122 F 202 1453 254 358 11 94.50 270 313 34 F 265 1782 2 451 21 92.08 223 313 78 F 220 1827 5 383 15 93.18 192 1 378 F 187 2 0 343 9 95.19 276 1 294 F 271 16 0 515 8 97.05 390 884 31 F 392 890 43 726 14 96.41 339 1820 0 F 340 1909 0 599 20 94.10 324 782 52 F 327 1270 4 579 18 94.44 25 561 420 F 24 840 278 45 1 95.83 128 561 402 F 125 561 405 213 3 97.60 34 561 410 F 34 840 270 48 5 85.29 29 561 412 F 30 840 275 51 2 93.10 38 561 400 F 39 561 406 53 6 84.21 26 840 278 F 26 1231 160 44 2 92.31 26 840 278 F 26 1318 181 44 2 92.31 36 561 411 F 36 1231 158 52 5 86.11 36 561 411 F 36 1318 179 52 5 86.11 274 1415 148 F 273 1724 0 483 16 94.14 456 1796 26 F 446 1937 0 718 46 89.69 416 1620 0 F 415 1796 6 743 22 94.70 379 1784 7 F 381 1799 0 656 26 93.14 330 1939 0 F 330 1940 10 568 23 93.03 291 358 77 F 292 1678 0 523 15 94.85 268 248 0 F 269 292 0 477 15 94.40 367 881 0 F 364 1248 100 699 8 97.80 300 1910 0 F 299 1926 25 543 14 95.32 386 376 0 F 401 1694 81 607 45 88.34 330 1277 1 F 326 1694 81 580 19 94.17 267 1851 45 F 267 1879 0 466 17 93.63 331 18 0 F 337 46 194 536 33 90.03 179 382 45 F 177 918 49 260 24 86.44 355 35 184 F 351 72 196 678 7 98.01 45 42 184 F 45 72 196 50 10 77.78 51 72 196 F 48 73 109 47 13 72.92 345 584 135 F 339 1381 0 544 35 89.68 317 1381 25 F 332 1661 121 421 56 82.33 641 6 156 F 647 39 227 1216 18 97.19 149 413 221 F 148 1250 267 265 8 94.59 332 1536 0 F 332 1630 0 652 3 99.10 391 470 80 F 395 1013 0 690 24 93.86 267 227 189 F 267 968 0 342 48 82.02 78 859 0 F 81 1265 168 119 10 87.18 329 1592 0 F 322 1595 8 583 17 94.72 380 78 86 F 375 80 149 635 30 92.00 352 474 188 F 353 1076 31 633 18 94.89 351 543 129 F 353 1076 31 636 17 95.16 344 1076 40 F 342 1297 133 622 16 95.32 347 912 136 F 348 1076 31 631 16 95.39 329 761 12 F 330 1076 31 599 15 95.44 326 826 155 F 328 1076 31 590 16 95.09 349 798 84 F 349 1076 35 618 20 94.27 352 1828 6 F 353 1947 0 625 20 94.32 111 474 166 F 110 1722 43 185 9 91.82 110 902 85 F 110 1722 43 184 9 91.82 110 1151 118 F 110 1722 43 184 9 91.82 110 451 98 F 110 1722 43 184 9 91.82 110 736 174 F 110 1722 43 184 9 91.82 111 1049 118 F 110 1722 43 181 10 90.91 110 846 280 F 110 1722 43 180 10 90.91 110 380 65 F 110 1722 43 184 9 91.82 110 988 109 F 110 1722 43 180 10 90.91 111 912 114 F 110 1722 43 185 9 91.82 265 454 62 F 264 1722 0 473 14 94.70 256 1722 8 F 256 1837 0 464 12 95.31 111 483 60 F 110 1722 43 181 10 90.91 108 658 231 F 109 1722 43 181 9 91.67 163 1578 0 F 163 1682 12 290 9 94.48 203 1851 33 F 203 1950 58 330 19 90.64 319 131 0 F 319 158 0 630 2 99.37 375 37 0 F 383 1823 0 670 22 94.13 307 877 174 F 311 1627 103 566 13 95.77 416 1620 0 F 415 1796 6 743 22 94.70 391 470 80 F 395 1013 0 690 24 93.86 349 1554 0 F 347 1555 52 632 16 95.39 319 1548 0 F 318 1555 101 605 8 97.48 77 126 94 F 77 1238 156 98 14 81.82 95 530 145 F 95 1238 162 118 18 81.05 95 1238 162 F 95 1343 153 118 18 81.05 222 1206 107 F 222 1238 83 276 42 81.08 306 877 193 F 305 1514 2 547 16 94.75 291 1268 211 F 290 1514 0 517 16 94.48 274 1415 148 F 273 1724 0 483 16 94.14 267 1851 45 F 267 1879 0 466 17 93.63 339 1802 3 F 340 1877 0 667 3 99.12 343 568 69 F 345 1793 63 652 9 97.38 236 1153 0 F 228 1161 110 348 29 87.28 151 42 147 F 146 49 398 261 9 93.84 43 36 332 F 41 49 453 68 4 90.24 40 31 243 F 38 49 453 66 3 92.11 268 62 300 F 271 555 0 407 33 87.69 362 662 80 F 367 1193 8 569 40 88.95 91 658 186 F 92 849 1 147 9 90.11 94 658 138 F 101 1892 244 147 12 87.23 441 658 156 F 447 912 36 844 11 97.51 415 1663 0 F 414 1893 27 657 43 89.61 359 492 0 F 362 1469 92 661 15 95.82 377 1469 77 F 372 1874 0 661 22 94.09 321 738 178 F 321 739 58 602 10 96.88 377 739 2 F 383 1384 8 592 42 88.86 95 7 276 F 96 33 1 183 2 97.89 100 7 259 F 99 264 519 155 11 88.89 60 7 269 F 62 300 280 90 8 86.67 108 237 217 F 108 468 0 164 13 87.96 339 1649 38 F 335 1892 4 478 49 85.37 284 1892 4 F 284 1931 25 372 49 82.75 230 1649 38 F 230 1664 1 308 38 83.48 230 1664 1 F 230 1931 25 272 47 79.57 52 1649 278 F 55 1871 244 75 8 84.62 170 1230 7 F 178 1649 213 180 41 75.88 250 1021 0 F 250 1051 242 468 8 96.80 308 506 0 F 303 988 123 547 16 94.72 377 988 49 F 376 1049 60 693 15 96.01 377 988 49 F 377 1328 1 622 33 91.25 376 634 4 F 377 976 13 689 16 95.74 100 33 0 F 101 73 0 189 3 97.00 95 7 276 F 97 73 1 172 5 94.74 348 579 0 F 352 1143 75 608 23 93.39 74 1143 353 F 74 1196 309 132 4 94.59 425 630 9 F 426 1143 1 683 41 90.35 347 579 1 F 350 1365 43 605 23 93.37 74 1196 309 F 74 1365 319 120 7 90.54 370 630 64 F 372 1365 21 658 21 94.32 392 1143 35 F 391 1365 2 691 23 94.12 242 610 53 F 243 1143 178 449 9 96.28 242 610 53 F 243 1365 144 449 9 96.28 326 1198 2 F 316 1365 59 542 25 92.09 250 579 80 F 252 1198 76 434 17 93.20 316 630 100 F 326 1198 2 538 26 91.77 315 380 88 F 326 1198 2 545 24 92.38 315 605 68 F 323 1198 5 522 29 90.79 315 846 303 F 326 1198 2 541 25 92.06 315 902 108 F 326 1198 2 549 23 92.70 315 1151 141 F 326 1198 2 549 23 92.70 326 1198 2 F 317 1230 196 551 23 92.74 313 451 121 F 324 1198 2 545 23 92.65 313 736 197 F 324 1198 2 545 23 92.65 316 1143 93 F 326 1198 2 538 26 91.77 315 1100 128 F 326 1198 2 537 26 91.75 242 1198 84 F 239 1289 3 413 17 92.89 294 481 10 F 293 1198 35 499 22 92.49 297 483 83 F 306 1198 2 515 22 92.59 168 610 115 F 171 1198 157 307 8 95.24 227 642 30 F 231 1198 62 390 17 92.51 322 1198 2 F 311 1360 104 513 30 90.35 263 1196 43 F 267 1198 2 422 27 89.73 282 641 42 F 288 1198 40 490 20 92.91 411 1696 0 F 412 1781 23 691 33 91.97 284 386 212 F 293 1201 56 501 19 93.31 291 358 77 F 292 1678 0 523 15 94.85 230 35 0 F 229 42 0 423 9 96.07 130 35 0 F 130 146 261 260 0 100.00 130 42 0 F 130 146 261 260 0 100.00 159 35 0 F 159 54 46 298 5 96.86 159 42 0 F 159 54 46 298 5 96.86 341 319 2 F 336 626 202 581 24 92.86 411 1696 0 F 412 1781 23 691 33 91.97 424 454 70 F 432 1837 0 772 21 95.05 366 197 112 F 359 385 0 641 21 94.15 335 197 126 F 336 665 0 567 26 92.24 231 779 30 F 227 783 30 322 34 85.02 641 6 156 F 647 39 227 1216 18 97.19 341 319 2 F 336 626 202 581 24 92.86 282 591 0 F 283 1758 7 461 26 90.78 324 428 0 F 320 1441 29 564 20 93.75 317 428 7 F 312 1513 64 573 14 95.51 376 492 0 F 378 825 98 726 7 98.14 418 432 4 F 419 825 65 773 16 96.17 295 538 0 F 288 667 102 499 21 92.71 409 1097 23 F 417 1806 1 686 35 91.44 295 538 0 F 288 667 102 499 21 92.71 365 422 1 F 375 1794 64 576 41 88.77 435 474 105 F 433 798 0 792 19 95.61 429 543 51 F 430 798 3 771 22 94.87 428 658 174 F 433 798 0 773 22 94.86 423 713 17 F 432 798 1 719 34 91.96 411 798 22 F 406 1297 69 729 22 94.58 428 798 0 F 428 912 55 776 20 95.33 368 798 40 F 365 1327 71 661 18 95.07 324 798 109 F 322 849 95 594 13 95.96 341 761 0 F 341 798 69 654 7 97.95 408 798 0 F 407 826 74 735 20 95.09 349 798 84 F 349 1076 35 618 20 94.27 432 798 1 F 428 1120 16 716 36 91.59 350 798 83 F 359 935 38 589 30 91.43 200 545 122 F 202 1453 254 358 11 94.50 396 584 79 F 407 1661 35 627 43 89.14 321 1941 0 F 323 1942 31 524 30 90.65 104 112 28 F 104 120 53 192 4 96.15 238 2 130 F 238 39 130 412 16 93.28 238 16 214 F 238 39 130 408 17 92.86 61 1 509 F 57 39 130 82 9 84.21 503 2 130 F 522 5 96 845 45 91.05 602 5 96 F 601 16 214 1099 26 95.67 61 1 509 F 57 5 96 82 9 84.21 117 2 130 F 117 7 96 182 13 88.89 117 7 96 F 117 16 214 182 13 88.89 61 1 509 F 57 7 96 82 9 84.21 238 2 130 F 238 3 58 408 17 92.86 238 3 58 F 238 16 214 404 18 92.44 61 1 509 F 57 3 58 78 10 82.46 43 2 130 F 44 4 518 71 4 90.70 44 4 518 F 43 16 214 71 4 90.70 45 1 509 F 44 4 518 69 5 88.64 194 253 2 F 194 276 2 308 20 89.69 344 691 71 F 347 814 135 643 12 96.51 211 899 96 F 212 1798 206 255 42 80.09 365 422 1 F 375 1794 64 576 41 88.77 361 1226 87 F 356 1296 91 649 17 95.22 328 720 0 F 330 1398 19 534 31 90.55 360 369 21 F 360 1409 0 640 20 94.44 304 481 0 F 296 630 120 536 16 94.59 296 380 107 F 304 481 0 544 14 95.27 304 481 0 F 296 846 322 540 15 94.93 304 481 0 F 296 902 127 548 13 95.61 304 481 0 F 296 1151 160 548 13 95.61 304 481 0 F 296 1230 217 548 13 95.61 294 451 140 F 302 481 0 544 13 95.58 302 481 0 F 294 736 216 544 13 95.58 304 481 0 F 296 1100 147 540 15 94.93 304 481 0 F 297 1365 78 533 17 94.28 300 481 0 F 292 1360 123 512 20 93.15 284 481 0 F 277 483 103 509 13 95.31 185 474 208 F 192 481 0 301 19 89.73 192 481 0 F 184 543 149 300 19 89.67 192 481 0 F 183 658 272 295 20 89.07 192 481 0 F 183 713 110 291 21 88.52 192 481 0 F 183 1297 145 291 21 88.52 192 481 0 F 184 912 157 300 19 89.67 192 481 0 F 184 1327 130 292 21 88.59 192 481 0 F 184 761 33 300 19 89.67 192 481 0 F 184 826 175 300 19 89.67 192 481 0 F 185 798 101 293 21 88.65 304 481 0 F 298 605 85 538 16 94.63 304 481 0 F 296 1143 113 536 16 94.59 258 481 11 F 251 642 6 429 20 92.03 173 481 9 F 165 849 95 258 20 87.88 246 481 0 F 243 1196 63 417 18 92.59 375 37 0 F 383 1823 0 670 22 94.13 280 322 70 F 285 793 68 421 35 87.50 309 877 174 F 310 1268 193 599 5 98.38 307 877 174 F 311 1627 103 566 13 95.77 302 877 174 F 310 1747 95 532 20 93.38 223 247 130 F 226 880 2 361 22 90.13 327 33 99 F 327 38 665 614 10 96.94 160 1299 0 F 158 1776 112 242 19 87.97 397 356 33 F 390 496 1 699 22 94.36 376 558 0 F 368 1254 134 668 19 94.84 147 249 222 F 144 968 0 211 20 86.11 350 412 163 F 348 1525 88 646 13 96.26 339 761 0 F 338 826 143 673 1 99.70 340 543 117 F 341 761 0 665 4 98.82 215 761 2 F 214 902 97 393 9 95.79 215 761 2 F 214 1151 130 393 9 95.79 214 451 110 F 215 761 2 393 9 95.79 214 736 186 F 215 761 2 393 9 95.79 277 761 2 F 276 1049 131 473 20 92.75 215 761 2 F 214 846 292 385 11 94.86 214 380 77 F 215 761 2 389 10 95.33 255 761 2 F 253 988 121 428 20 92.09 215 761 2 F 215 1365 48 382 12 94.42 215 761 2 F 214 1360 93 369 15 92.99 341 474 176 F 341 761 0 666 4 98.83 316 442 114 F 317 1510 66 581 13 95.89 540 4 16 F 523 47 0 935 32 93.88 224 1782 39 F 224 1827 0 404 11 95.09 276 4 388 F 272 39 0 428 30 88.97 242 4 422 F 238 5 0 384 24 89.92 215 4 422 F 213 7 0 360 17 92.02 200 3 0 F 204 4 460 312 23 88.50 446 1620 20 F 439 1937 0 721 41 90.66 456 1796 26 F 446 1937 0 718 46 89.69 330 1939 0 F 330 1940 10 568 23 93.03 102 859 84 F 102 1265 231 200 1 99.02 184 175 74 F 183 1821 0 303 16 91.26 268 497 0 F 264 1550 75 444 22 91.67 186 1544 0 F 186 1550 153 352 5 97.31 171 1550 168 F 171 1551 0 318 6 96.49 336 1546 28 F 338 1550 1 630 11 96.73 336 1547 12 F 338 1550 1 622 13 96.13 72 1199 59 F 71 1650 0 115 7 90.14 71 719 170 F 71 1650 0 118 6 91.55 130 1260 138 F 129 1615 1 235 6 95.35 361 1226 87 F 356 1296 91 649 17 95.22 185 1198 2 F 178 1456 87 259 26 85.39 263 1196 43 F 267 1198 2 422 27 89.73 204 474 189 F 212 1198 2 312 26 87.25 203 543 130 F 212 1198 2 315 25 87.68 201 658 254 F 212 1198 2 305 27 86.57 202 713 91 F 212 1198 2 302 28 86.14 212 1198 2 F 201 1297 127 301 28 86.07 204 912 137 F 212 1198 2 316 25 87.75 199 1198 15 F 193 1327 121 296 24 87.56 207 761 10 F 214 1198 0 313 27 86.96 206 826 153 F 214 1198 0 316 26 87.38 202 798 84 F 209 1198 5 307 26 87.13 297 483 83 F 306 1198 2 515 22 92.59 326 1198 2 F 316 1365 59 542 25 92.09 316 630 100 F 326 1198 2 538 26 91.77 315 380 88 F 326 1198 2 545 24 92.38 315 846 303 F 326 1198 2 541 25 92.06 315 902 108 F 326 1198 2 549 23 92.70 315 1151 141 F 326 1198 2 549 23 92.70 326 1198 2 F 317 1230 196 551 23 92.74 313 451 121 F 324 1198 2 545 23 92.65 313 736 197 F 324 1198 2 545 23 92.65 315 1100 128 F 326 1198 2 537 26 91.75 316 1143 93 F 326 1198 2 538 26 91.77 227 642 30 F 231 1198 62 390 17 92.51 211 506 10 F 217 1198 2 300 32 84.83 207 1049 142 F 217 1198 2 316 27 86.96 217 1198 2 F 209 1328 82 294 33 84.21 202 935 48 F 198 1198 16 252 37 81.31 137 1076 100 F 138 1198 76 211 16 88.32 201 1120 96 F 212 1198 2 301 28 86.07 294 481 10 F 293 1198 35 499 22 92.49 145 1189 23 F 152 1198 2 229 17 88.28 59 610 53 F 60 1198 94 99 5 91.53 282 641 42 F 288 1198 40 490 20 92.91 242 1198 84 F 239 1289 3 413 17 92.89 322 1198 2 F 311 1360 104 513 30 90.35 315 605 68 F 323 1198 5 522 29 90.79 438 905 0 F 451 1693 83 677 53 87.90 246 483 14 F 243 1456 22 361 32 86.83 247 902 37 F 249 1456 16 368 32 87.04 247 1151 70 F 250 1456 15 365 33 86.64 249 1230 125 F 250 1456 15 375 31 87.55 249 451 48 F 250 1456 15 367 33 86.75 246 736 127 F 250 1456 15 360 34 86.18 260 1100 44 F 259 1456 6 379 35 86.49 251 1143 19 F 249 1456 16 380 30 87.95 245 1049 71 F 248 1456 15 357 34 86.12 266 474 100 F 265 1456 0 359 42 84.15 238 543 68 F 241 1456 24 367 28 88.24 257 912 57 F 260 1456 5 365 38 85.21 186 761 4 F 188 1456 77 326 12 93.55 263 826 69 F 265 1456 0 356 43 83.65 241 798 18 F 243 1456 22 340 36 85.06 235 658 193 F 241 1456 24 348 32 86.38 239 713 27 F 249 1456 16 380 27 88.70 259 1120 11 F 265 1456 0 388 34 86.87 257 846 222 F 260 1456 5 357 40 84.44 234 1365 2 F 233 1456 32 343 31 86.70 206 849 38 F 211 1456 54 289 32 84.47 176 454 40 F 178 1456 0 166 46 73.86 244 1327 43 F 249 1456 16 333 40 83.61 181 1328 77 F 181 1456 82 298 16 91.16 56 454 160 F 59 1196 77 99 4 92.86 293 483 49 F 297 1196 9 514 19 93.52 299 902 66 F 305 1196 1 516 22 92.64 299 1151 99 F 305 1196 1 516 22 92.64 306 1196 0 F 303 1230 152 525 21 93.07 301 451 77 F 306 1196 0 519 22 92.69 299 736 155 F 305 1196 1 516 22 92.64 301 1100 84 F 306 1196 0 511 24 92.03 304 1143 47 F 306 1196 0 510 25 91.78 240 1049 109 F 246 1196 11 374 28 88.33 215 474 178 F 220 1196 32 359 19 91.16 214 543 119 F 220 1196 32 362 18 91.59 215 912 126 F 220 1196 32 363 18 91.63 215 761 2 F 220 1196 32 359 19 91.16 214 826 145 F 220 1196 32 358 19 91.12 215 798 71 F 220 1196 32 351 21 90.23 188 658 267 F 194 1196 58 326 14 92.55 211 713 82 F 218 1196 34 349 20 90.52 210 1120 87 F 218 1196 34 348 20 90.48 299 846 261 F 305 1196 1 508 24 91.97 274 1196 32 F 269 1365 48 491 13 95.17 157 849 91 F 158 1196 70 263 13 91.72 220 1196 32 F 214 1327 100 350 21 90.19 248 1196 9 F 241 1328 50 353 34 85.89 318 574 96 F 320 1369 78 602 9 97.17 517 64 0 F 517 65 0 1034 0 100.00 434 426 27 F 429 795 0 675 47 89.04 393 451 41 F 391 902 30 744 10 97.44 393 451 41 F 391 1151 63 760 6 98.47 393 451 41 F 389 736 121 762 5 98.71 393 451 41 F 389 846 227 754 7 98.20 387 380 14 F 393 451 41 744 9 97.67 283 451 41 F 279 826 80 494 17 93.91 418 229 0 F 419 270 0 825 3 99.28 452 736 58 F 454 1151 0 866 10 97.79 454 846 164 F 456 1151 0 842 17 96.26 334 658 121 F 344 1151 0 558 30 91.02 146 1151 82 F 145 1837 0 243 12 91.72 299 40 156 F 299 747 69 578 5 98.33 257 1640 92 F 254 1840 0 455 14 94.49 349 483 31 F 345 902 58 670 6 98.26 349 483 31 F 345 1151 91 670 6 98.26 375 451 41 F 380 483 0 695 15 96.00 349 483 31 F 345 736 147 670 6 98.26 349 483 31 F 345 846 253 662 8 97.68 344 380 39 F 349 483 31 661 8 97.67 292 483 0 F 285 988 54 469 27 90.53 349 483 31 F 348 1230 145 657 10 97.13 505 474 35 F 492 658 110 909 22 95.53 480 474 35 F 479 826 2 899 15 96.87 63 541 246 F 63 1006 332 126 0 100.00 255 455 0 F 254 1260 213 481 7 97.24 97 455 58 F 98 1615 135 155 10 89.69 350 372 1 F 348 1348 62 654 11 96.84 376 634 4 F 377 976 13 689 16 95.74 434 426 27 F 429 795 0 675 47 89.04 393 536 87 F 398 567 0 691 25 93.64 396 567 2 F 387 1082 39 679 26 93.28 151 1 149 F 151 4 159 254 12 92.05 151 1 149 F 151 47 143 250 13 91.39 415 223 2 F 414 271 2 793 9 97.83 265 1705 0 F 264 1709 0 481 12 95.45 404 549 32 F 412 661 104 712 26 93.56 163 1578 0 F 163 1682 12 290 9 94.48 453 460 27 F 452 1351 0 793 28 93.81 374 1351 67 F 376 1936 2 678 18 95.19 188 160 117 F 189 160 297 365 3 98.40 272 474 121 F 271 605 0 443 25 90.77 270 543 63 F 271 605 0 421 30 88.89 271 605 0 F 267 658 188 438 25 90.64 271 605 0 F 263 713 30 386 37 85.93 162 605 109 F 162 1297 166 284 10 93.83 271 605 0 F 270 912 71 437 26 90.37 246 605 25 F 243 1327 71 381 27 88.89 216 605 55 F 215 761 2 363 17 92.09 271 605 0 F 270 826 89 437 26 90.37 271 605 0 F 270 798 16 401 35 87.04 370 483 10 F 363 605 0 637 24 93.39 370 605 13 F 373 1365 2 639 26 92.97 274 605 109 F 274 630 142 532 4 98.54 381 380 22 F 383 605 0 688 19 95.01 383 605 0 F 382 846 236 693 18 95.29 383 605 0 F 384 902 39 695 18 95.30 383 605 0 F 383 1151 73 702 16 95.82 383 605 0 F 385 1230 128 688 20 94.78 383 451 51 F 381 605 0 692 18 95.28 381 605 0 F 380 736 130 697 16 95.79 383 605 0 F 386 1100 57 649 29 92.43 383 605 0 F 387 1143 22 650 30 92.17 239 605 109 F 239 642 18 430 12 94.98 167 605 94 F 165 849 95 268 16 90.30 290 605 35 F 295 1196 11 485 25 91.38 221 506 0 F 219 605 57 336 26 88.13 276 605 0 F 275 1049 74 443 27 90.18 274 605 2 F 274 1328 17 392 39 85.77 276 605 0 F 276 988 63 428 31 88.77 204 605 67 F 212 935 38 288 32 84.31 203 605 68 F 202 1076 35 301 26 87.13 267 605 4 F 263 1120 34 386 36 86.31 330 579 0 F 333 605 50 559 26 92.12 240 605 4 F 243 1456 22 339 36 85.00 85 454 220 F 85 605 159 158 3 96.47 140 1205 108 F 141 1942 214 225 14 90.00 360 369 21 F 360 1409 0 640 20 94.44 399 815 46 F 415 1699 47 678 33 91.73 24 859 207 F 24 1214 204 48 0 100.00 157 322 70 F 158 793 68 247 16 89.81 271 679 62 F 273 759 0 488 14 94.83 295 376 132 F 295 1402 3 534 14 95.25 356 989 50 F 347 1350 1 591 28 91.93 43 561 402 F 44 1231 143 51 9 79.07 43 561 402 F 44 1318 164 51 9 79.07 43 561 402 F 44 1231 143 51 9 79.07 43 561 402 F 44 1318 164 51 9 79.07 474 1788 0 F 474 1850 9 836 28 94.09 271 679 62 F 273 759 0 488 14 94.83 359 695 121 F 363 938 64 686 9 97.49 98 1869 183 F 98 1943 2 144 13 86.73 297 1024 75 F 298 1744 100 343 63 78.79 102 1289 3 F 100 1456 165 174 7 93.00 183 1196 123 F 183 1289 3 330 9 95.08 129 474 264 F 129 1289 3 206 13 89.92 129 543 204 F 129 1289 3 206 13 89.92 128 658 327 F 129 1289 3 201 14 89.06 129 713 164 F 129 1289 3 202 14 89.15 129 1289 3 F 129 1297 199 206 13 89.92 129 912 212 F 129 1289 3 206 13 89.92 129 1289 3 F 129 1327 185 206 13 89.92 129 761 88 F 129 1289 3 206 13 89.92 129 826 230 F 129 1289 3 206 13 89.92 222 483 158 F 221 1289 3 415 7 96.83 239 1289 3 F 239 1365 134 438 10 95.82 239 630 175 F 239 1289 3 446 8 96.65 239 380 162 F 239 1289 3 446 8 96.65 239 846 377 F 239 1289 3 442 9 96.23 239 902 182 F 239 1289 3 446 8 96.65 239 1151 215 F 239 1289 3 446 8 96.65 239 1230 272 F 239 1289 3 446 8 96.65 239 451 195 F 239 1289 3 446 8 96.65 239 736 271 F 239 1289 3 446 8 96.65 239 1100 202 F 239 1289 3 442 9 96.23 239 1143 168 F 239 1289 3 438 10 95.82 133 506 88 F 134 1289 3 207 15 88.72 133 1049 216 F 134 1289 3 207 15 88.72 128 1120 169 F 129 1289 3 205 13 89.84 243 481 59 F 241 1289 1 436 12 95.02 74 1189 98 F 75 1289 3 129 5 93.24 239 641 83 F 239 1289 3 422 14 94.14 239 605 142 F 239 1289 3 438 10 95.82 85 454 220 F 85 1289 20 150 5 94.12 133 988 206 F 134 1289 3 203 16 87.97 85 1289 20 F 85 1722 157 142 7 91.76 237 579 91 F 238 1289 4 439 9 96.20 206 642 51 F 206 1289 3 376 9 95.63 172 610 53 F 173 1196 133 317 7 95.93 168 474 225 F 171 610 0 227 28 83.33 168 543 165 F 171 610 0 227 28 83.33 118 610 53 F 118 658 337 188 12 89.83 120 610 51 F 121 713 172 193 12 90.00 171 610 0 F 167 1297 161 222 29 82.63 171 610 0 F 168 912 173 227 28 83.33 171 610 0 F 168 1327 146 227 28 83.33 171 610 0 F 168 761 49 227 28 83.33 171 610 0 F 168 826 191 227 28 83.33 171 610 0 F 169 798 117 224 29 82.84 212 483 168 F 210 610 53 394 7 96.67 242 610 53 F 243 1365 144 449 9 96.28 242 610 53 F 243 630 185 461 6 97.52 231 380 172 F 230 610 53 437 6 97.39 230 610 53 F 231 846 387 433 7 96.96 230 610 53 F 231 902 192 437 6 97.39 230 610 53 F 231 1151 225 437 6 97.39 230 610 53 F 231 1230 282 437 6 97.39 229 451 205 F 228 610 53 433 6 97.37 228 610 53 F 229 736 281 433 6 97.37 230 610 53 F 231 1100 212 429 8 96.52 226 610 53 F 227 1360 188 413 10 95.58 231 605 152 F 230 610 53 429 8 96.52 242 610 53 F 243 1143 178 449 9 96.28 195 610 53 F 196 642 61 359 8 95.90 161 610 0 F 157 849 103 198 30 80.89 123 506 98 F 123 610 53 190 14 88.62 123 610 53 F 123 1049 226 190 14 88.62 123 610 53 F 123 1328 168 190 14 88.62 123 610 53 F 123 988 216 186 15 87.80 119 610 52 F 120 935 130 171 17 85.71 171 610 0 F 167 1076 70 210 32 80.84 171 610 0 F 167 1120 130 222 29 82.63 244 579 98 F 244 610 51 456 8 96.72 231 610 50 F 232 1289 10 415 12 94.81 91 610 53 F 90 1456 175 157 6 93.33 393 536 87 F 388 1082 38 717 16 95.88 434 426 27 F 429 795 0 675 47 89.04 328 593 0 F 323 607 58 603 12 96.28 152 506 168 F 153 1189 178 269 8 94.74 152 1049 296 F 153 1189 178 269 8 94.74 139 988 286 F 140 1189 178 239 9 93.53 343 568 69 F 345 1793 63 652 9 97.38 323 915 121 F 325 1070 53 600 12 96.28 320 409 143 F 318 456 0 630 2 99.37 399 815 46 F 415 1699 47 678 33 91.73 282 647 2 F 279 1388 62 493 17 93.91 383 318 13 F 387 905 59 678 23 93.99 343 1302 67 F 343 1433 4 606 20 94.17 367 530 53 F 365 1343 63 688 11 96.99 360 544 0 F 358 1343 70 658 15 95.81 377 432 37 F 376 492 0 733 5 98.67 376 492 0 F 377 1874 14 697 14 96.28 58 950 2 F 58 1850 210 108 2 96.55 58 950 2 F 58 1788 201 108 2 96.55 159 807 2 F 167 1212 57 198 32 79.87 313 560 59 F 311 1069 28 572 13 95.82 355 35 184 F 351 72 196 678 7 98.01 296 960 29 F 303 970 135 543 14 95.27 200 545 122 F 202 1453 254 358 11 94.50 260 664 16 F 270 1183 3 430 25 90.38 317 428 7 F 312 1513 64 573 14 95.51 356 1441 10 F 356 1513 37 648 16 95.51 47 102 224 F 47 102 257 62 8 82.98 422 819 43 F 431 975 41 761 23 94.55 369 1475 72 F 376 1594 0 577 42 88.62 196 459 64 F 192 587 5 256 33 82.81 341 306 0 F 341 1349 124 618 16 95.31 461 654 0 F 461 1212 120 758 41 91.11 310 654 103 F 306 807 164 580 9 97.06 378 473 13 F 377 766 51 719 9 97.61 345 584 135 F 339 1381 0 544 35 89.68 130 1734 1 F 131 1814 8 189 18 86.15 361 1226 87 F 356 1296 91 649 17 95.22 453 460 27 F 452 1351 0 793 28 93.81 231 460 238 F 231 1859 0 450 3 98.70 231 1351 210 F 231 1859 0 450 3 98.70 374 1351 67 F 376 1936 2 678 18 95.19 231 1859 0 F 231 1936 147 442 5 97.84 378 473 13 F 377 766 51 719 9 97.61 248 1868 37 F 248 1948 21 400 24 90.32 128 1777 94 F 128 1948 90 188 17 86.72 191 735 195 F 194 1479 14 293 23 87.96 306 807 164 F 306 1212 227 592 5 98.37 332 977 26 F 332 1605 73 556 27 91.87 339 440 2 F 335 765 95 606 17 94.93 85 33 0 F 84 264 534 161 2 97.62 30 42 218 F 31 264 528 53 2 93.33 25 33 0 F 25 42 223 50 0 100.00 27 36 348 F 28 264 528 47 2 92.59 22 33 0 F 22 36 353 44 0 100.00 411 1696 0 F 412 1781 23 691 33 91.97 378 473 13 F 377 766 51 719 9 97.61 420 902 3 F 422 1230 91 766 19 95.48 438 1151 18 F 443 1230 70 809 18 95.89 393 451 41 F 392 1230 119 745 10 97.45 485 736 25 F 500 1230 11 869 29 94.02 349 483 31 F 348 1230 145 657 10 97.13 349 483 31 F 350 1143 39 619 20 94.27 378 902 45 F 383 1143 26 677 21 94.44 409 1143 0 F 409 1151 47 706 28 93.15 387 451 47 F 389 1143 18 688 22 94.32 406 736 104 F 407 1143 0 697 29 92.86 349 1049 0 F 356 1230 50 569 34 90.26 300 1049 49 F 302 1143 0 454 37 87.67 475 543 0 F 482 912 1 877 20 95.79 341 761 0 F 341 912 124 666 4 98.83 467 826 14 F 463 912 0 854 19 95.90 320 543 13 F 331 1230 70 515 34 89.38 215 761 2 F 217 1230 184 384 12 94.42 328 826 31 F 331 1230 70 555 26 92.07 289 543 44 F 293 1143 4 454 32 88.93 215 761 2 F 216 1143 81 379 13 93.95 295 826 64 F 297 1143 0 452 35 88.14 256 483 31 F 253 912 88 441 17 93.28 298 902 13 F 297 912 44 511 21 92.93 341 912 0 F 343 1151 1 580 26 92.38 283 451 41 F 279 912 62 486 19 93.19 341 736 59 F 341 912 0 582 25 92.67 411 912 1 F 414 1049 3 653 43 89.54 317 658 138 F 329 1230 72 530 29 90.85 286 658 169 F 293 1143 4 435 36 87.41 441 658 156 F 447 912 36 844 11 97.51 290 1120 7 F 296 1230 105 442 36 87.59 183 1120 114 F 184 1143 113 327 10 94.54 445 912 38 F 439 1120 0 760 31 92.94 493 846 125 F 503 1230 10 832 41 91.68 396 846 222 F 400 1143 9 692 26 93.43 341 846 165 F 341 912 0 566 29 91.50 327 1230 74 F 314 1327 0 469 43 86.31 250 1143 47 F 244 1327 70 382 28 88.52 367 912 96 F 365 1327 71 680 13 96.44 403 380 0 F 409 1230 104 760 13 96.77 401 380 2 F 407 1143 2 692 29 92.77 291 380 0 F 294 912 47 501 21 92.78 290 988 49 F 292 1230 114 478 26 91.03 295 988 44 F 297 1143 5 428 41 86.10 323 912 58 F 324 988 50 531 29 91.02 286 1230 115 F 276 1297 52 446 29 89.49 293 1143 4 F 282 1297 46 403 42 85.11 426 912 57 F 419 1297 51 773 18 95.70 171 483 61 F 172 1189 0 311 8 95.32 170 902 86 F 172 1189 0 314 7 95.88 170 1151 119 F 172 1189 0 314 7 95.88 170 451 99 F 172 1189 0 314 7 95.88 170 736 175 F 172 1189 0 314 7 95.88 171 1049 119 F 172 1189 0 311 8 95.32 169 543 109 F 172 1189 0 301 10 94.08 160 761 2 F 161 1189 11 285 9 94.38 170 826 134 F 172 1189 0 302 10 94.12 168 658 232 F 172 1189 0 296 11 93.45 129 1120 114 F 129 1189 43 242 4 96.90 170 846 281 F 172 1189 0 306 9 94.71 172 1189 0 F 170 1327 89 278 16 90.59 170 380 66 F 172 1189 0 310 8 95.29 170 988 110 F 172 1189 0 302 10 94.12 172 1189 0 F 167 1297 106 291 12 92.81 362 662 80 F 367 1193 8 569 40 88.95 316 442 114 F 317 1510 66 581 13 95.89 415 452 0 F 413 882 3 724 26 93.70 409 1097 23 F 417 1806 1 686 35 91.44 222 600 54 F 218 1251 0 332 27 87.61 376 634 4 F 377 976 13 689 16 95.74 360 530 60 F 360 544 0 672 12 96.67 339 1802 3 F 340 1877 0 667 3 99.12 405 336 36 F 419 1703 0 704 30 92.59 302 317 66 F 297 1128 0 515 21 92.93 108 848 34 F 97 1268 3 117 22 77.32 415 1663 0 F 414 1893 27 657 43 89.61 308 335 0 F 309 1059 206 613 1 99.68 392 671 7 F 402 1334 0 666 32 91.84 348 1064 63 F 351 1669 2 603 24 93.10 171 1550 168 F 171 1551 0 318 6 96.49 258 1544 15 F 258 1551 0 496 5 98.06 171 1546 193 F 171 1551 0 338 1 99.42 171 1547 177 F 171 1551 0 334 2 98.83 268 62 300 F 271 555 0 407 33 87.69 610 3 0 F 607 39 72 1145 18 97.03 455 3 155 F 453 6 156 844 16 96.47 196 454 20 F 193 912 32 321 17 91.19 145 912 80 F 145 1837 0 242 12 91.72 211 454 5 F 213 474 64 360 16 92.42 147 474 130 F 145 1837 0 236 14 90.34 208 454 7 F 201 658 138 325 21 89.55 142 658 197 F 144 1837 0 242 11 92.25 211 454 5 F 212 826 31 335 22 89.57 145 826 98 F 145 1837 0 238 13 91.03 313 483 67 F 310 579 0 539 21 93.23 347 579 1 F 350 1365 43 605 23 93.37 348 579 0 F 350 630 84 598 25 92.82 331 380 72 F 330 579 0 581 20 93.94 330 579 0 F 331 902 92 585 19 94.24 330 579 0 F 331 1151 125 585 19 94.24 330 579 0 F 334 1230 179 588 19 94.24 329 451 105 F 328 579 0 581 19 94.21 328 579 0 F 329 736 181 581 19 94.21 330 579 0 F 331 1100 112 581 20 93.94 348 579 0 F 352 1143 75 608 23 93.39 214 506 7 F 211 579 12 297 32 84.83 223 579 0 F 223 1049 126 334 28 87.44 304 481 0 F 296 579 34 520 20 93.24 164 579 0 F 166 1189 6 242 22 86.59 330 579 0 F 333 605 50 559 26 92.12 223 579 0 F 223 988 116 322 31 86.10 258 579 37 F 257 642 0 427 22 91.44 250 579 80 F 252 1198 76 434 17 93.20 353 985 0 F 353 1426 64 654 13 96.32 323 474 217 F 322 849 95 605 10 96.89 323 543 157 F 322 849 95 605 10 96.89 322 658 280 F 322 849 95 600 11 96.58 323 713 117 F 322 849 95 605 10 96.89 322 849 95 F 322 1297 153 596 12 96.27 317 849 95 F 318 912 165 595 10 96.85 297 849 95 F 298 1327 138 547 12 95.96 300 761 41 F 299 849 95 563 9 96.99 298 826 183 F 297 849 95 559 9 96.97 324 798 109 F 322 849 95 594 13 95.96 166 483 111 F 165 849 95 283 12 92.73 165 849 95 F 166 1365 87 283 12 92.73 166 630 128 F 165 849 95 271 15 90.91 166 380 115 F 165 849 95 279 13 92.12 166 846 330 F 165 849 95 275 14 91.52 165 849 95 F 166 902 135 283 12 92.73 165 849 95 F 166 1151 168 283 12 92.73 165 849 95 F 166 1230 225 283 12 92.73 166 451 148 F 165 849 95 283 12 92.73 166 736 224 F 165 849 95 283 12 92.73 222 849 38 F 227 1100 94 349 25 88.74 165 849 95 F 166 1143 121 283 12 92.73 154 642 6 F 154 849 97 248 15 90.26 157 849 91 F 158 1196 70 263 13 91.72 157 506 40 F 156 849 95 261 13 91.67 156 849 95 F 156 1049 169 272 10 93.59 156 849 95 F 156 1328 111 268 11 92.95 322 849 95 F 331 935 66 537 29 90.99 322 849 95 F 323 1076 61 577 17 94.72 322 849 95 F 322 1120 122 588 14 95.65 206 849 38 F 211 1456 54 289 32 84.47 173 481 9 F 165 849 95 258 20 87.88 121 849 95 F 121 1189 51 202 10 91.74 161 610 0 F 157 849 103 198 30 80.89 164 641 38 F 165 849 95 261 17 89.63 169 849 91 F 174 1198 30 251 23 86.39 118 849 142 F 119 1289 3 173 16 86.44 165 849 95 F 166 1360 131 271 15 90.91 49 650 3 F 50 1268 56 71 7 85.71 295 538 0 F 288 667 102 499 21 92.71 228 1624 108 F 228 1624 138 344 28 87.72 136 120 196 F 136 1624 138 232 10 92.65 106 120 226 F 106 1624 108 192 5 95.28 106 120 196 F 106 120 226 192 5 95.28 323 447 43 F 320 746 51 543 25 92.19 350 412 163 F 348 1525 88 646 13 96.26 160 1299 0 F 158 1776 112 242 19 87.97 130 1260 138 F 129 1615 1 235 6 95.35 326 676 49 F 324 1165 1 538 28 91.36 450 474 90 F 438 713 2 752 34 92.24 448 543 32 F 440 713 0 772 29 93.41 342 713 98 F 343 1297 132 665 5 98.54 435 713 0 F 446 912 37 749 33 92.41 414 713 1 F 420 1327 16 686 37 91.06 338 713 79 F 340 761 1 650 7 97.93 405 713 10 F 413 826 68 690 32 92.10 453 474 87 F 444 1120 0 765 33 92.57 376 543 104 F 376 1120 68 696 14 96.28 444 1120 0 F 439 1297 36 735 37 91.57 445 912 38 F 439 1120 0 760 31 92.94 395 1120 24 F 396 1327 40 659 33 91.65 339 761 0 F 336 1120 83 631 11 96.73 426 826 55 F 419 1120 0 709 34 91.89 416 713 24 F 420 1120 24 744 23 94.47 423 713 17 F 432 798 1 719 34 91.96 432 798 1 F 428 1120 16 716 36 91.59 327 713 113 F 335 935 62 574 22 93.27 340 935 57 F 330 1120 114 566 26 92.12 329 1055 0 F 328 1542 146 605 13 96.04 350 412 163 F 348 1525 88 646 13 96.26 360 369 21 F 360 1409 0 640 20 94.44 244 579 98 F 244 610 51 456 8 96.72 242 610 53 F 243 630 185 461 6 97.52 231 380 172 F 230 610 53 437 6 97.39 230 610 53 F 231 846 387 433 7 96.96 230 610 53 F 231 902 192 437 6 97.39 230 610 53 F 231 1151 225 437 6 97.39 230 610 53 F 231 1230 282 437 6 97.39 229 451 205 F 228 610 53 433 6 97.37 228 610 53 F 229 736 281 433 6 97.37 230 610 53 F 231 1100 212 429 8 96.52 231 610 50 F 232 1289 10 415 12 94.81 231 481 73 F 230 610 53 429 8 96.52 242 610 53 F 243 1365 144 449 9 96.28 226 610 53 F 227 1360 188 413 10 95.58 230 610 53 F 231 641 93 413 12 94.78 168 610 115 F 171 1198 157 307 8 95.24 212 483 168 F 210 610 53 394 7 96.67 184 175 74 F 183 1821 0 303 16 91.26 397 356 33 F 390 496 1 699 22 94.36 329 1592 0 F 322 1595 8 583 17 94.72 397 356 33 F 390 496 1 699 22 94.36 211 454 5 F 213 474 64 360 16 92.42 151 912 17 F 163 1892 244 214 25 83.44 223 1649 20 F 222 1736 0 409 9 95.95 222 1736 0 F 223 1931 7 377 17 92.34 140 1205 108 F 141 1942 214 225 14 90.00 259 461 0 F 259 1788 251 386 33 87.26 474 1788 0 F 474 1850 9 836 28 94.09 39 99 0 F 39 1788 255 70 2 94.87 104 1041 51 F 104 1788 251 152 14 86.54 246 481 0 F 243 1196 63 417 18 92.59 233 974 48 F 232 1310 195 425 10 95.69 404 549 32 F 412 661 104 712 26 93.56 256 310 69 F 255 1363 75 483 7 97.25 361 497 81 F 358 1544 2 699 5 98.60 268 497 0 F 264 1546 100 468 16 93.94 337 497 105 F 336 1549 0 593 17 94.94 344 691 71 F 347 814 135 643 12 96.51 222 849 38 F 227 1100 94 349 25 88.74 182 454 34 F 182 902 13 296 17 90.66 271 679 62 F 273 759 0 488 14 94.83 191 406 80 F 193 1653 152 292 23 87.96 128 406 80 F 132 1947 221 168 23 82.03 188 406 98 F 198 1828 243 290 24 87.23 418 406 24 F 415 542 15 733 25 93.98 320 409 143 F 318 456 0 630 2 99.37 203 579 15 F 205 1076 32 312 24 88.18 344 691 71 F 347 814 135 643 12 96.51 390 546 59 F 385 890 2 699 19 95.06 390 884 31 F 392 890 43 726 14 96.41 370 355 111 F 371 499 1 709 8 97.84 425 404 215 F 423 819 78 748 25 94.09 422 819 43 F 431 975 41 761 23 94.55 335 197 126 F 336 665 0 567 26 92.24 237 994 160 F 242 1190 41 423 14 94.09 440 654 1 F 432 866 142 668 51 88.19 310 826 49 F 311 902 0 541 20 93.55 346 826 13 F 344 1151 0 602 22 93.60 304 736 96 F 304 826 55 552 14 95.39 359 826 0 F 356 846 150 583 33 90.73 323 915 121 F 325 1070 53 600 12 96.28 251 1624 108 F 248 1624 168 327 43 82.66 136 120 196 F 136 1624 168 220 13 90.44 392 432 23 F 392 1874 0 716 17 95.66 176 1209 42 F 172 1349 164 200 37 78.49 302 317 66 F 297 1128 0 515 21 92.93 244 120 88 F 244 1624 0 472 4 98.36 69 112 63 F 69 1624 0 122 4 94.20 259 542 0 F 269 1653 76 412 29 88.80 196 542 0 F 209 1947 144 281 31 84.18 74 542 30 F 80 1056 0 110 11 85.14 242 1056 0 F 238 1653 107 336 36 84.87 179 1056 0 F 177 1947 176 208 37 79.10 228 1624 108 F 228 1624 138 344 28 87.72 106 120 226 F 106 1624 108 192 5 95.28 136 120 196 F 136 1624 138 232 10 92.65 106 120 196 F 106 120 226 192 5 95.28 251 1624 108 F 248 1624 168 327 43 82.66 75 120 256 F 75 1624 108 130 5 93.33 136 120 196 F 136 1624 168 220 13 90.44 75 120 196 F 75 120 256 130 5 93.33 344 691 71 F 347 814 135 643 12 96.51 290 1147 13 F 293 1331 123 503 20 93.10 341 306 0 F 341 1349 124 618 16 95.31 297 1552 0 F 293 1554 56 526 16 94.54 309 1548 7 F 314 1552 0 559 16 94.82 466 819 53 F 474 1500 28 844 24 94.85 256 310 69 F 255 1363 75 483 7 97.25 505 474 35 F 492 658 110 909 22 95.53 477 543 3 F 476 658 126 869 21 95.59 441 658 161 F 438 713 2 743 34 92.24 426 658 176 F 424 1297 51 774 19 95.52 441 658 156 F 447 912 36 844 11 97.51 364 658 213 F 365 1327 71 677 13 96.43 338 658 241 F 341 761 0 659 5 98.52 451 658 126 F 462 826 19 829 21 95.34 444 658 158 F 444 1120 0 752 34 92.34 428 658 174 F 433 798 0 773 22 94.86 348 658 254 F 360 935 37 596 28 91.95 332 977 26 F 332 1605 73 556 27 91.87 304 1068 0 F 303 1517 96 543 16 94.72 324 782 52 F 327 1270 4 579 18 94.44 185 641 0 F 188 1456 77 293 20 89.19 266 641 0 F 272 1196 34 454 21 92.11 213 474 180 F 212 641 0 361 16 92.45 212 543 121 F 212 641 0 360 16 92.45 212 641 0 F 210 658 245 354 17 91.90 212 641 0 F 211 713 82 343 20 90.52 212 641 0 F 210 1297 118 346 19 90.95 212 641 0 F 213 912 128 365 15 92.92 212 641 0 F 212 1327 102 344 20 90.57 212 641 0 F 213 761 4 357 17 91.98 212 641 0 F 212 826 147 360 16 92.45 306 483 74 F 304 641 0 558 13 95.72 324 641 0 F 325 1365 50 581 17 94.75 325 630 91 F 324 641 0 569 20 93.83 324 380 79 F 324 641 0 600 12 96.30 324 641 0 F 324 902 99 604 11 96.60 324 641 0 F 324 1151 132 604 11 96.60 324 641 0 F 327 1230 186 599 13 95.99 322 451 112 F 322 641 0 600 11 96.58 322 641 0 F 322 736 188 600 11 96.58 324 641 0 F 324 1100 119 584 16 95.06 324 641 0 F 326 1143 83 582 17 94.75 221 506 0 F 217 641 0 330 27 87.56 217 641 0 F 216 1049 133 365 17 92.13 212 641 0 F 210 1120 87 338 21 90.00 289 481 15 F 282 641 42 503 17 93.97 157 641 0 F 158 1189 14 271 11 92.99 326 605 57 F 324 641 0 574 19 94.14 84 454 221 F 84 641 101 152 4 95.24 217 641 0 F 216 988 123 353 20 90.74 323 579 7 F 324 641 0 535 28 91.33 256 641 33 F 257 642 0 441 18 92.97 212 641 0 F 213 798 73 353 18 91.51 282 641 42 F 288 1198 40 490 20 92.91 341 306 0 F 341 1349 124 618 16 95.31 67 406 29 F 68 1653 96 123 3 95.52 94 406 2 F 95 1828 144 153 9 90.43 306 807 164 F 306 1212 227 592 5 98.37 409 1097 23 F 417 1806 1 686 35 91.44 360 530 60 F 360 544 0 672 12 96.67 360 544 0 F 358 1343 70 658 15 95.81 367 530 53 F 365 1343 63 688 11 96.99 156 474 64 F 165 1892 242 225 24 84.62 488 474 47 F 483 912 0 919 13 97.31 97 474 65 F 98 1664 240 139 14 85.57 159 454 0 F 170 1892 236 237 23 85.53 196 454 20 F 193 912 32 321 17 91.19 123 454 0 F 128 1664 233 167 21 82.93 480 474 35 F 479 826 2 899 15 96.87 211 454 5 F 212 826 31 335 22 89.57 161 1230 67 F 168 1892 239 209 30 81.37 324 912 17 F 329 1230 72 537 29 91.05 98 1230 71 F 98 1664 240 120 19 80.61 328 826 31 F 331 1230 70 555 26 92.07 290 1147 13 F 293 1331 123 503 20 93.10 379 379 0 F 398 1785 85 581 48 87.34 328 593 0 F 323 607 58 603 12 96.28 268 248 0 F 269 292 0 477 15 94.40 323 447 43 F 320 746 51 543 25 92.19 75 264 513 F 77 300 265 132 5 93.33 55 33 0 F 56 300 286 99 3 94.55 344 691 71 F 347 814 135 643 12 96.51 367 881 0 F 364 1248 100 699 8 97.80 311 833 111 F 315 1146 29 526 25 91.96 324 428 0 F 320 1441 29 564 20 93.75 317 428 7 F 312 1513 64 573 14 95.51 418 406 24 F 415 542 15 733 25 93.98 191 406 80 F 193 1653 152 292 23 87.96 332 1536 0 F 332 1630 0 652 3 99.10 129 626 211 F 134 1023 48 143 30 76.74 130 65 149 F 132 65 233 242 5 96.15 130 64 149 F 132 65 233 242 5 96.15 126 61 150 F 129 65 236 227 7 94.44 132 64 233 F 130 65 149 242 5 96.15 130 64 149 F 132 64 233 242 5 96.15 126 61 150 F 129 64 236 227 7 94.44 126 61 230 F 126 65 149 240 3 97.62 126 61 230 F 126 64 149 240 3 97.62 122 61 150 F 123 61 233 225 5 95.90 168 65 149 F 168 65 191 324 3 98.21 168 64 149 F 168 65 191 324 3 98.21 164 61 150 F 165 65 194 309 5 96.95 168 64 191 F 168 65 149 324 3 98.21 168 64 149 F 168 64 191 324 3 98.21 164 61 150 F 165 64 194 309 5 96.95 168 61 188 F 168 65 149 324 3 98.21 168 61 188 F 168 64 149 324 3 98.21 164 61 150 F 165 61 191 309 5 96.95 84 65 149 F 84 65 275 156 3 96.43 84 64 275 F 84 65 149 156 3 96.43 84 61 272 F 84 65 149 156 3 96.43 84 64 149 F 84 65 275 156 3 96.43 84 64 149 F 84 64 275 156 3 96.43 84 61 272 F 84 64 149 156 3 96.43 80 61 150 F 81 65 278 141 5 93.75 80 61 150 F 81 64 278 141 5 93.75 80 61 150 F 81 61 275 141 5 93.75 172 65 149 F 174 65 191 326 5 97.09 172 64 149 F 174 65 191 326 5 97.09 168 61 150 F 171 65 194 311 7 95.83 174 64 191 F 172 65 149 326 5 97.09 172 64 149 F 174 64 191 326 5 97.09 168 61 150 F 171 64 194 311 7 95.83 168 61 188 F 168 65 149 324 3 98.21 168 61 188 F 168 64 149 324 3 98.21 164 61 150 F 165 61 191 309 5 96.95 418 406 24 F 415 542 15 733 25 93.98 191 406 80 F 193 1653 152 292 23 87.96 188 406 98 F 198 1828 243 290 24 87.23 376 492 0 F 377 1874 14 697 14 96.28 392 432 23 F 392 1874 0 716 17 95.66 362 1912 0 F 358 1913 0 624 24 93.30 132 54 44 F 132 146 259 248 4 96.97 376 634 4 F 377 976 13 689 16 95.74 284 580 73 F 284 762 131 560 2 99.30 341 306 0 F 341 1349 124 618 16 95.31 309 1681 0 F 308 1808 0 541 19 93.83 327 33 99 F 327 38 665 614 10 96.94 420 902 3 F 422 1230 91 766 19 95.48 438 1151 18 F 443 1230 70 809 18 95.89 393 451 41 F 392 1230 119 745 10 97.45 485 736 25 F 500 1230 11 869 29 94.02 493 846 125 F 503 1230 10 832 41 91.68 403 380 0 F 409 1230 104 760 13 96.77 328 826 31 F 331 1230 70 555 26 92.07 403 1764 7 F 417 1896 0 660 40 90.07 189 103 0 F 189 107 0 366 3 98.41 397 902 26 F 399 1100 44 704 23 94.21 399 1100 44 F 397 1151 59 716 20 94.96 440 1100 3 F 442 1230 71 762 30 93.18 393 451 41 F 393 1100 48 710 19 95.17 435 736 75 F 437 1100 4 752 30 93.10 380 483 0 F 375 1100 48 671 21 94.40 399 1100 44 F 399 1143 10 690 27 93.23 329 1049 20 F 332 1100 4 505 39 88.15 328 474 65 F 328 1100 3 508 37 88.72 282 543 51 F 287 1100 44 457 28 90.07 283 912 58 F 287 1100 44 454 29 89.75 215 761 2 F 214 1100 117 381 12 94.39 283 826 76 F 287 1100 44 462 27 90.46 253 798 33 F 255 1100 76 400 27 89.33 278 658 177 F 286 1100 45 456 27 90.29 243 713 50 F 247 1100 84 390 25 89.71 251 1100 80 F 248 1120 49 379 28 88.71 395 846 223 F 399 1100 44 714 20 94.94 349 1100 94 F 351 1365 24 648 13 96.28 166 483 111 F 165 849 95 283 12 92.73 165 849 95 F 166 902 135 283 12 92.73 165 849 95 F 166 1151 168 283 12 92.73 165 849 95 F 166 1230 225 283 12 92.73 166 451 148 F 165 849 95 283 12 92.73 166 736 224 F 165 849 95 283 12 92.73 165 849 95 F 166 1143 121 283 12 92.73 156 849 95 F 156 1049 169 272 10 93.59 323 474 217 F 322 849 95 605 10 96.89 323 543 157 F 322 849 95 605 10 96.89 317 849 95 F 318 912 165 595 10 96.85 300 761 41 F 299 849 95 563 9 96.99 298 826 183 F 297 849 95 559 9 96.97 324 798 109 F 322 849 95 594 13 95.96 322 658 280 F 322 849 95 600 11 96.58 323 713 117 F 322 849 95 605 10 96.89 322 849 95 F 322 1120 122 588 14 95.65 166 846 330 F 165 849 95 275 14 91.52 165 849 95 F 166 1365 87 283 12 92.73 237 1100 94 F 234 1327 80 387 21 91.03 297 849 95 F 298 1327 138 547 12 95.96 293 1100 43 F 290 1328 1 419 41 85.86 156 849 95 F 156 1328 111 268 11 92.95 393 380 10 F 399 1100 44 712 20 94.91 166 380 115 F 165 849 95 279 13 92.12 413 1100 26 F 414 1360 1 663 41 90.07 165 849 95 F 166 1360 131 271 15 90.91 349 483 31 F 346 1360 53 631 16 95.38 404 902 15 F 407 1360 8 711 25 93.81 412 1151 40 F 414 1360 1 714 28 93.20 414 1230 95 F 414 1360 1 704 31 92.51 384 451 48 F 383 1360 32 679 22 94.26 411 736 97 F 414 1360 1 721 26 93.67 405 1143 0 F 405 1360 10 638 43 89.38 307 1049 42 F 311 1360 1 490 32 89.58 305 474 88 F 306 1360 1 487 31 89.84 299 543 34 F 306 1360 1 453 38 87.29 302 912 39 F 306 1360 1 480 32 89.40 215 761 2 F 214 1360 93 369 15 92.99 303 826 56 F 307 1360 0 482 32 89.44 268 798 18 F 268 1360 39 420 29 89.18 296 658 159 F 306 1360 1 462 35 88.18 269 713 24 F 278 1360 29 371 44 83.64 290 1120 7 F 297 1360 10 399 47 83.79 410 846 204 F 414 1360 1 700 31 92.44 334 1360 47 F 337 1365 0 599 18 94.61 243 1327 71 F 246 1360 61 377 28 88.48 291 1328 0 F 293 1360 19 416 42 85.57 399 380 0 F 406 1360 9 705 25 93.73 68 1613 4 F 68 1826 1 124 3 95.59 509 78 256 F 508 1488 40 945 18 96.46 423 902 0 F 422 1151 34 809 9 97.87 414 736 96 F 416 902 5 790 10 97.58 419 846 199 F 422 902 1 777 16 96.18 299 658 156 F 308 902 3 507 25 91.64 349 1049 0 F 349 1151 0 590 27 92.26 347 736 58 F 349 1049 0 596 25 92.80 348 846 163 F 349 1049 0 569 32 90.80 395 658 131 F 405 1049 12 636 41 89.62 316 902 0 F 313 1049 36 533 24 92.33 424 454 70 F 432 1837 0 772 21 95.05 213 454 3 F 212 1151 16 345 20 90.57 212 454 4 F 211 736 73 343 20 90.52 212 454 4 F 210 846 180 322 25 88.10 208 454 7 F 201 658 138 325 21 89.55 146 902 49 F 145 1837 0 239 13 91.03 146 1049 83 F 145 1837 0 235 14 90.34 212 454 4 F 211 1049 18 339 21 90.05 310 826 49 F 311 902 0 541 20 93.55 278 1653 0 F 285 1947 68 491 18 93.53 352 1828 6 F 353 1947 0 625 20 94.32 94 406 2 F 95 1947 138 149 10 89.36 330 1277 1 F 326 1694 81 580 19 94.17 265 376 51 F 270 1277 65 507 7 97.36 330 588 0 F 330 775 103 580 20 93.94 329 1653 0 F 334 1828 74 587 19 94.22 278 1653 0 F 285 1947 68 491 18 93.53 446 1767 9 F 440 1882 0 806 20 95.45 449 1745 9 F 440 1882 0 773 27 93.86 458 1745 0 F 455 1767 0 801 28 93.85 433 1745 0 F 427 1764 1 748 28 93.44 404 1764 10 F 403 1882 0 755 13 96.77 427 1764 1 F 432 1767 0 775 21 95.08 405 1745 6 F 413 1896 0 662 39 90.37 399 1882 0 F 414 1896 3 669 36 90.98 405 1767 6 F 413 1896 0 674 36 91.11 403 1764 7 F 417 1896 0 660 40 90.07 377 1469 77 F 372 1874 0 661 22 94.09 153 885 66 F 152 1051 243 265 10 93.42 250 1021 0 F 250 1051 242 468 8 96.80 151 885 68 F 150 1021 3 257 11 92.67 304 543 29 F 311 902 0 499 29 90.46 333 543 0 F 342 1151 2 555 30 90.99 275 451 49 F 272 543 61 471 19 93.01 333 543 0 F 340 736 60 557 29 91.29 404 543 0 F 414 1049 3 630 47 88.37 333 543 0 F 340 846 166 541 33 90.09 290 380 1 F 292 543 41 494 22 92.41 322 543 51 F 324 988 50 514 33 89.75 369 902 54 F 373 1365 2 690 13 96.48 371 1151 85 F 375 1365 0 694 13 96.50 372 451 62 F 373 1365 0 685 15 95.97 369 736 141 F 373 1365 0 690 13 96.48 262 1049 87 F 266 1365 2 452 19 92.75 371 846 247 F 375 1365 0 686 15 95.96 368 380 35 F 373 1365 2 677 16 95.65 264 988 75 F 268 1365 0 436 24 90.91 257 543 76 F 261 1365 2 446 18 93.00 261 474 132 F 263 1365 0 448 19 92.72 492 474 48 F 480 543 0 880 23 95.21 259 912 82 F 263 1365 0 438 21 91.89 115 454 101 F 116 1365 31 179 13 88.70 116 1365 31 F 115 1837 30 171 15 86.96 475 543 0 F 482 912 1 877 20 95.79 115 454 101 F 113 543 104 192 9 92.04 113 543 104 F 115 1837 30 188 10 91.15 116 1365 31 F 115 1722 38 163 17 85.22 113 543 104 F 115 1722 38 180 12 89.38 349 483 31 F 349 1365 6 634 16 95.42 256 483 31 F 253 543 80 437 18 92.89 343 1302 67 F 343 1433 4 606 20 94.17 259 542 0 F 269 1653 76 412 29 88.80 418 406 24 F 415 542 15 733 25 93.98 196 542 0 F 209 1947 144 281 31 84.18 602 5 96 F 601 16 214 1099 26 95.67 350 412 163 F 348 1525 88 646 13 96.26 380 78 86 F 375 80 149 635 30 92.00 405 336 36 F 419 1703 0 704 30 92.59 108 237 217 F 108 468 0 164 13 87.96 306 877 193 F 305 1514 2 547 16 94.75 291 1268 211 F 290 1514 0 517 16 94.48 307 877 174 F 311 1627 103 566 13 95.77 404 1268 97 F 411 1627 3 723 23 94.31 284 1514 0 F 292 1747 113 452 31 89.08 403 1627 8 F 408 1747 0 735 19 95.29 52 362 208 F 51 362 251 79 6 88.24 354 1301 9 F 352 1500 137 650 14 96.02 351 819 155 F 354 1301 9 653 13 96.30 297 1301 54 F 299 1362 147 548 12 95.96 310 975 162 F 313 1301 9 575 12 96.13 345 404 295 F 349 1301 9 614 20 94.20 295 376 132 F 295 1402 3 534 14 95.25 184 1277 151 F 184 1402 3 312 14 92.39 475 404 165 F 476 1500 8 779 43 90.95 425 404 215 F 423 819 78 748 25 94.09 296 404 337 F 299 1362 147 543 13 95.61 345 404 295 F 349 1301 9 614 20 94.20 389 404 215 F 392 975 80 717 16 95.89 391 318 13 F 406 1693 142 537 65 83.38 438 905 0 F 451 1693 83 677 53 87.90 453 460 27 F 452 1351 0 793 28 93.81 405 336 36 F 419 1703 0 704 30 92.59 139 545 1 F 138 1453 139 241 9 93.48 310 654 103 F 306 807 164 580 9 97.06 461 654 0 F 461 1212 120 758 41 91.11 366 197 112 F 359 385 0 641 21 94.15 335 197 126 F 336 665 0 567 26 92.24 263 1646 2 F 263 1862 3 486 10 96.20 339 1820 0 F 340 1909 0 599 20 94.10 341 319 2 F 336 626 202 581 24 92.86 250 1021 0 F 250 1051 242 468 8 96.80 309 1649 13 F 309 1931 0 546 18 94.17 309 1708 8 F 305 1931 0 490 30 90.16 222 1736 0 F 223 1931 7 377 17 92.34 369 536 109 F 368 965 0 685 13 96.47 222 600 54 F 218 1251 0 332 27 87.61 309 1681 0 F 308 1808 0 541 19 93.83 458 1745 0 F 455 1767 0 801 28 93.85 433 1745 0 F 427 1764 1 748 28 93.44 427 1764 1 F 432 1767 0 775 21 95.08 403 1764 7 F 417 1896 0 660 40 90.07 405 1745 6 F 413 1896 0 662 39 90.37 405 1767 6 F 413 1896 0 674 36 91.11 415 223 2 F 414 271 2 793 9 97.83 361 497 81 F 358 1544 2 699 5 98.60 258 1544 15 F 258 1551 0 496 5 98.06 224 1782 39 F 224 1827 0 404 11 95.09 231 779 30 F 227 783 30 322 34 85.02 255 455 0 F 254 1260 213 481 7 97.24 376 460 93 F 376 1936 2 728 6 98.40 488 474 47 F 483 912 0 919 13 97.31 441 658 156 F 447 912 36 844 11 97.51 467 826 14 F 463 912 0 854 19 95.90 233 974 48 F 232 1310 195 425 10 95.69 104 454 113 F 103 579 0 115 23 77.67 188 579 3 F 192 1456 73 300 20 89.36 313 483 67 F 310 579 0 539 21 93.23 330 579 0 F 331 902 92 585 19 94.24 330 579 0 F 331 1151 125 585 19 94.24 330 579 0 F 334 1230 179 588 19 94.24 329 451 105 F 328 579 0 581 19 94.21 328 579 0 F 329 736 181 581 19 94.21 330 579 0 F 331 1100 112 581 20 93.94 348 579 0 F 352 1143 75 608 23 93.39 223 579 0 F 223 1049 126 334 28 87.44 220 474 173 F 218 579 0 326 28 87.16 219 543 114 F 218 579 0 329 27 87.61 218 579 0 F 220 912 121 330 27 87.61 211 579 7 F 213 761 4 324 25 88.15 218 579 0 F 219 826 140 329 27 87.61 218 579 0 F 220 798 66 318 30 86.24 218 579 0 F 217 658 238 319 29 86.64 211 579 7 F 211 713 82 326 24 88.63 211 579 7 F 210 1120 87 333 22 89.52 330 579 0 F 331 846 287 577 21 93.64 347 579 1 F 350 1365 43 605 23 93.37 208 579 0 F 206 849 54 282 33 83.98 218 579 0 F 219 1327 95 317 30 86.24 324 782 52 F 327 1270 4 579 18 94.44 366 197 112 F 359 385 0 641 21 94.15 360 369 21 F 360 1409 0 640 20 94.44 356 989 50 F 347 1350 1 591 28 91.93 378 242 0 F 379 294 0 729 7 98.15 300 1910 0 F 299 1926 25 543 14 95.32 132 1 0 F 132 4 7 196 17 87.12 123 1 9 F 123 47 0 190 14 88.62 287 1170 0 F 283 1347 84 466 26 90.81 31 125 26 F 30 632 168 49 3 90.00 409 1097 23 F 417 1806 1 686 35 91.44 268 497 0 F 264 1550 75 444 22 91.67 186 1544 0 F 186 1550 153 352 5 97.31 171 1550 168 F 171 1551 0 318 6 96.49 336 1546 28 F 338 1550 1 630 11 96.73 159 1549 0 F 159 1550 177 290 7 95.60 336 1547 12 F 338 1550 1 622 13 96.13 455 3 155 F 453 6 156 844 16 96.47 610 3 0 F 607 39 72 1145 18 97.03 112 3 510 F 110 5 546 158 16 85.45 112 3 510 F 110 16 664 154 17 84.55 309 1681 0 F 308 1808 0 541 19 93.83 458 1745 0 F 455 1767 0 801 28 93.85 449 1745 9 F 440 1882 0 773 27 93.86 446 1767 9 F 440 1882 0 806 20 95.45 433 1745 0 F 427 1764 1 748 28 93.44 427 1764 1 F 432 1767 0 775 21 95.08 404 1764 10 F 403 1882 0 755 13 96.77 405 1745 6 F 413 1896 0 662 39 90.37 405 1767 6 F 413 1896 0 674 36 91.11 399 1882 0 F 414 1896 3 669 36 90.98 361 497 81 F 358 1544 2 699 5 98.60 110 1544 250 F 110 1549 226 208 3 97.27 376 460 93 F 376 1936 2 728 6 98.40 374 1351 67 F 376 1936 2 678 18 95.19 231 1859 0 F 231 1936 147 442 5 97.84 321 738 178 F 321 739 58 602 10 96.88 377 739 2 F 383 1384 8 592 42 88.86 328 385 14 F 335 665 1 567 24 92.68 335 197 126 F 336 665 0 567 26 92.24 299 40 156 F 299 747 69 578 5 98.33 332 1536 0 F 332 1630 0 652 3 99.10 174 1564 0 F 174 1847 123 312 9 94.83 282 591 0 F 283 1758 7 461 26 90.78 382 1121 56 F 384 1512 11 674 23 93.98 389 848 138 F 404 1658 0 637 39 89.97 355 35 184 F 351 72 196 678 7 98.01 339 652 71 F 339 825 141 638 10 97.05 338 432 80 F 339 652 71 645 8 97.63 333 492 43 F 335 652 71 636 8 97.60 318 652 71 F 315 1469 139 593 10 96.83 336 652 71 F 336 1874 56 600 18 94.64 378 473 13 F 377 766 51 719 9 97.61 228 473 13 F 226 994 85 382 18 92.04 466 819 53 F 474 1500 28 844 24 94.85 260 497 95 F 258 1551 0 494 6 97.67 211 936 0 F 215 937 160 370 14 93.36 260 497 95 F 258 1551 0 494 6 97.67 258 1544 15 F 258 1551 0 496 5 98.06 379 379 0 F 398 1785 85 581 48 87.34 302 317 66 F 297 1128 0 515 21 92.93 334 5 0 F 334 39 34 632 9 97.31 213 7 0 F 213 39 34 406 5 97.65 276 4 388 F 272 39 0 428 30 88.97 425 489 0 F 429 1339 12 790 16 96.24 327 33 99 F 327 38 665 614 10 96.94 168 719 268 F 168 1199 159 320 4 97.62 376 460 93 F 376 1936 2 728 6 98.40 362 662 80 F 367 1193 8 569 40 88.95 376 492 0 F 378 825 98 726 7 98.14 422 825 37 F 429 1469 25 719 33 92.18 391 825 86 F 390 1874 2 705 19 95.13 348 1325 136 F 350 1621 0 666 8 97.70 360 369 21 F 360 1409 0 640 20 94.44 393 474 0 F 382 736 18 639 34 91.10 452 736 58 F 454 1151 0 866 10 97.79 189 103 0 F 189 107 0 366 3 98.41 409 1097 23 F 417 1806 1 686 35 91.44 309 1649 13 F 309 1931 0 546 18 94.17 309 1708 8 F 305 1931 0 490 30 90.16 222 1736 0 F 223 1931 7 377 17 92.34 409 1097 23 F 417 1806 1 686 35 91.44 310 654 103 F 306 807 164 580 9 97.06 268 497 0 F 264 1550 75 444 22 91.67 186 1544 0 F 186 1550 153 352 5 97.31 171 1550 168 F 171 1551 0 318 6 96.49 336 1546 28 F 338 1550 1 630 11 96.73 336 1547 12 F 338 1550 1 622 13 96.13 159 1549 0 F 159 1550 177 290 7 95.60 217 1869 0 F 216 1943 47 245 47 78.24 151 42 147 F 146 49 398 261 9 93.84 268 497 0 F 264 1547 84 460 18 93.18 186 1544 0 F 186 1547 162 364 2 98.92 171 1547 177 F 171 1551 0 334 2 98.83 349 1546 15 F 348 1547 0 673 6 98.28 160 1547 186 F 160 1549 0 300 5 96.88 336 1547 12 F 338 1550 1 622 13 96.13 90 1608 30 F 89 1802 15 131 12 86.52 90 1608 30 F 89 1877 12 131 12 86.52 75 264 513 F 77 300 265 132 5 93.33 23 1372 333 F 23 1372 341 46 0 100.00 23 597 198 F 23 1372 341 46 0 100.00 23 597 206 F 23 1372 333 46 0 100.00 23 597 198 F 23 597 206 46 0 100.00 291 1294 30 F 299 1786 23 498 23 92.10 224 1782 39 F 224 1827 0 404 11 95.09 381 309 0 F 374 804 82 691 16 95.72 265 1705 0 F 264 1709 0 481 12 95.45 258 895 170 F 263 1405 10 449 18 93.02 474 1788 0 F 474 1850 9 836 28 94.09 321 738 178 F 321 739 58 602 10 96.88 223 1649 20 F 222 1736 0 409 9 95.95 223 1708 15 F 222 1736 0 401 11 95.05 222 1736 0 F 223 1931 7 377 17 92.34 192 354 0 F 173 1077 34 217 37 78.61 331 18 0 F 337 46 194 536 33 90.03 384 738 115 F 391 1384 0 671 26 93.23 299 1871 0 F 296 1892 0 515 20 93.24 319 131 0 F 319 158 0 630 2 99.37 186 1544 0 F 186 1546 178 372 0 100.00 186 1544 0 F 186 1550 153 352 5 97.31 186 1544 0 F 186 1547 162 364 2 98.92 423 449 0 F 421 868 143 788 14 96.67 411 1696 0 F 412 1781 23 691 33 91.97 293 483 49 F 297 1196 9 514 19 93.52 281 630 77 F 287 1196 19 488 20 92.88 299 380 46 F 306 1196 0 513 23 92.31 299 902 66 F 305 1196 1 516 22 92.64 299 1151 99 F 305 1196 1 516 22 92.64 306 1196 0 F 303 1230 152 525 21 93.07 301 451 77 F 306 1196 0 519 22 92.69 299 736 155 F 305 1196 1 516 22 92.64 301 1100 84 F 306 1196 0 511 24 92.03 304 1143 47 F 306 1196 0 510 25 91.78 240 1049 109 F 246 1196 11 374 28 88.33 172 1189 0 F 176 1196 20 272 19 88.95 290 605 35 F 295 1196 11 485 25 91.38 238 988 101 F 246 1196 11 368 29 87.82 248 1196 9 F 241 1328 50 353 34 85.89 266 641 0 F 272 1196 34 454 21 92.11 215 474 178 F 220 1196 32 359 19 91.16 214 543 119 F 220 1196 32 362 18 91.59 220 1196 32 F 212 1297 116 352 20 90.57 215 912 126 F 220 1196 32 363 18 91.63 215 761 2 F 220 1196 32 359 19 91.16 214 826 145 F 220 1196 32 358 19 91.12 215 798 71 F 220 1196 32 351 21 90.23 188 658 267 F 194 1196 58 326 14 92.55 348 1325 136 F 350 1621 0 666 8 97.70 231 460 238 F 231 1859 0 450 3 98.70 231 1351 210 F 231 1859 0 450 3 98.70 249 541 0 F 252 1006 81 429 18 92.77 274 1415 148 F 273 1724 0 483 16 94.14 379 1784 7 F 381 1799 0 656 26 93.14 292 483 0 F 285 1328 6 437 35 87.72 290 630 19 F 291 1328 0 405 44 84.83 286 380 10 F 289 1328 2 447 32 88.81 290 902 26 F 289 1328 2 451 32 88.93 290 1151 59 F 289 1328 2 455 31 89.27 293 1230 113 F 291 1328 0 464 30 89.69 282 451 47 F 280 1328 11 442 30 89.29 290 736 115 F 291 1328 0 457 31 89.31 293 1100 43 F 290 1328 1 419 41 85.86 222 1143 80 F 221 1328 70 355 22 90.05 389 1049 59 F 390 1328 0 679 25 93.57 172 1189 0 F 171 1328 61 283 15 91.23 274 605 2 F 274 1328 17 392 39 85.77 377 988 49 F 377 1328 1 622 33 91.25 215 641 2 F 216 1328 75 339 23 89.30 358 474 106 F 359 1328 0 529 47 86.87 353 543 51 F 357 1328 2 510 50 85.84 263 1297 136 F 266 1328 93 413 29 88.97 354 912 58 F 357 1328 2 527 46 87.01 277 761 2 F 278 1328 71 443 28 89.89 345 826 76 F 347 1328 2 528 41 88.12 356 798 1 F 359 1328 0 499 54 84.83 349 658 177 F 357 1328 2 514 48 86.25 347 713 17 F 359 1328 0 462 61 82.42 352 1120 16 F 358 1328 0 462 62 82.39 289 846 222 F 291 1328 0 448 33 88.58 318 506 2 F 315 1328 75 561 18 94.29 223 1328 68 F 223 1365 45 362 21 90.58 393 451 41 F 389 736 121 762 5 98.71 393 451 41 F 389 846 227 754 7 98.20 161 1230 67 F 168 1892 239 209 30 81.37 202 935 48 F 198 1196 54 280 30 84.85 351 474 189 F 360 935 37 607 26 92.59 350 543 130 F 360 935 37 606 26 92.57 348 658 254 F 360 935 37 596 28 91.95 327 713 113 F 335 935 62 574 22 93.27 360 935 37 F 348 1297 127 600 27 92.24 346 912 137 F 355 935 37 597 26 92.49 324 935 48 F 314 1327 122 534 26 91.72 336 761 5 F 346 935 28 562 30 91.07 333 826 148 F 344 935 28 561 29 91.29 350 798 83 F 359 935 38 589 30 91.43 204 483 83 F 213 935 37 301 29 85.78 213 935 37 F 204 1365 59 297 30 85.29 192 630 112 F 202 935 48 278 29 84.90 203 380 88 F 213 935 37 300 29 85.71 203 846 303 F 213 935 37 296 30 85.22 203 902 108 F 213 935 37 304 28 86.21 213 935 37 F 203 1151 141 304 28 86.21 213 935 37 F 205 1230 196 302 29 85.85 203 451 121 F 213 935 37 304 28 86.21 203 736 197 F 213 935 37 304 28 86.21 213 935 37 F 203 1100 128 296 30 85.22 213 935 37 F 204 1143 93 297 30 85.29 171 506 58 F 174 935 88 261 21 87.72 225 935 37 F 215 1049 142 320 30 86.05 214 935 48 F 205 1328 94 291 32 84.39 349 935 48 F 340 1076 44 569 30 91.18 340 935 57 F 330 1120 114 566 26 92.12 186 935 37 F 178 1456 87 260 26 85.39 192 481 0 F 193 935 57 257 32 83.33 158 935 37 F 149 1189 23 227 20 86.58 119 610 52 F 120 935 130 171 17 85.71 202 641 10 F 213 935 37 275 35 82.67 121 935 129 F 120 1289 12 185 14 88.33 213 935 37 F 203 1360 104 280 34 83.25 204 605 67 F 212 935 38 288 32 84.31 85 454 220 F 86 935 137 147 6 92.94 174 935 88 F 170 988 177 260 21 87.65 86 935 137 F 85 1722 157 139 8 90.59 86 935 137 F 85 1837 149 139 8 90.59 379 1784 7 F 381 1799 0 656 26 93.14 359 11 153 F 356 29 155 639 19 94.66 344 691 71 F 347 814 135 643 12 96.51 265 1705 0 F 264 1709 0 481 12 95.45 65 733 238 F 65 1678 28 110 5 92.31 211 227 96 F 216 249 126 267 40 81.04 352 1828 6 F 353 1947 0 625 20 94.32 274 1415 148 F 273 1724 0 483 16 94.14 328 539 94 F 328 1080 0 584 18 94.51 110 1851 126 F 110 1950 151 196 6 94.55 108 1879 81 F 108 1950 151 196 5 95.37 307 624 179 F 327 1619 0 470 41 86.64 375 658 80 F 382 736 18 613 36 90.40 402 658 53 F 421 846 85 647 44 89.05 110 451 41 F 116 1892 291 150 19 82.73 355 35 184 F 351 72 196 678 7 98.01 329 1055 0 F 328 1542 146 605 13 96.04 432 701 5 F 422 715 7 690 41 90.28 271 679 62 F 273 759 0 488 14 94.83 30 1480 293 F 30 1480 328 44 4 86.67 365 950 12 F 366 1041 0 639 23 93.70 228 18 192 F 228 40 156 368 22 90.35 251 18 169 F 250 747 47 377 31 87.60 397 221 0 F 397 266 0 786 2 99.50 323 915 121 F 325 1070 53 600 12 96.28 168 719 268 F 168 1199 159 320 4 97.62 168 65 149 F 168 65 191 324 3 98.21 168 64 191 F 168 65 149 324 3 98.21 168 61 188 F 168 65 149 324 3 98.21 168 64 149 F 168 65 191 324 3 98.21 168 64 149 F 168 64 191 324 3 98.21 168 61 188 F 168 64 149 324 3 98.21 359 11 153 F 356 29 155 639 19 94.66 44 42 179 F 44 73 104 80 2 95.45 57 35 179 F 53 73 104 58 13 75.47 43 49 430 F 44 73 104 71 4 90.70 420 61 134 F 424 65 137 752 22 94.76 381 61 134 F 380 64 137 701 15 96.05 228 18 192 F 228 40 156 368 22 90.35 251 18 169 F 250 747 47 377 31 87.60 296 3 0 F 296 5 38 572 5 98.31 141 5 193 F 141 6 156 254 7 95.04 238 2 130 F 238 3 58 408 17 92.86 141 2 227 F 141 6 156 254 7 95.04 249 726 157 F 252 1393 2 457 11 95.58 185 886 89 F 185 1483 100 262 27 85.41 365 950 12 F 366 1041 0 639 23 93.70 311 474 82 F 311 902 0 538 21 93.25 347 474 46 F 344 1151 0 603 22 93.60 283 451 41 F 281 474 112 492 18 93.59 393 474 0 F 382 736 18 639 34 91.10 419 474 45 F 417 1049 0 684 38 90.89 393 474 0 F 392 846 114 625 40 89.80 291 380 0 F 296 474 97 507 20 93.13 376 474 57 F 374 988 0 586 41 89.04 298 902 13 F 297 912 44 511 21 92.93 182 454 34 F 182 902 13 296 17 90.66 146 902 49 F 145 1837 0 239 13 91.03 341 912 0 F 343 1151 1 580 26 92.38 213 454 3 F 212 1151 16 345 20 90.57 146 1151 82 F 145 1837 0 243 12 91.72 283 451 41 F 279 912 62 486 19 93.19 167 451 41 F 164 454 52 259 18 89.02 148 451 60 F 145 1837 0 237 14 90.34 341 736 59 F 341 912 0 582 25 92.67 212 454 4 F 211 736 73 343 20 90.52 145 736 139 F 145 1837 0 246 11 92.41 411 912 1 F 414 1049 3 653 43 89.54 115 454 101 F 114 1049 115 193 9 92.11 114 1049 115 F 115 1837 30 189 10 91.23 341 846 165 F 341 912 0 566 29 91.50 212 454 4 F 210 846 180 322 25 88.10 145 846 245 F 145 1837 0 242 12 91.72 291 380 0 F 294 912 47 501 21 92.78 175 380 0 F 179 454 37 278 19 89.14 144 380 31 F 145 1837 0 233 14 90.28 323 912 58 F 324 988 50 531 29 91.02 212 454 4 F 214 988 5 294 33 84.43 146 988 73 F 145 1837 0 235 14 90.34 254 474 139 F 256 483 31 450 15 94.09 256 483 31 F 253 912 88 441 17 93.28 137 454 79 F 140 483 31 217 15 89.05 140 483 31 F 137 1837 8 213 16 88.32 256 483 31 F 250 658 205 442 16 93.60 299 658 156 F 308 902 3 507 25 91.64 334 658 121 F 344 1151 0 558 30 91.02 275 451 49 F 269 658 186 484 15 94.42 375 658 80 F 382 736 18 613 36 90.40 395 658 131 F 405 1049 12 636 41 89.62 402 658 53 F 421 846 85 647 44 89.05 290 380 1 F 289 658 166 495 21 92.73 318 658 177 F 324 988 50 534 27 91.51 35 310 332 F 35 1363 337 70 0 100.00 343 1302 67 F 343 1433 4 606 20 94.17 331 18 0 F 337 46 194 536 33 90.03 438 905 0 F 451 1693 83 677 53 87.90 194 253 2 F 194 276 2 308 20 89.69 255 597 0 F 253 1372 137 440 17 93.28 149 413 221 F 148 1250 267 265 8 94.59 189 103 0 F 189 107 0 366 3 98.41 351 474 189 F 360 935 37 607 26 92.59 350 543 130 F 360 935 37 606 26 92.57 348 658 254 F 360 935 37 596 28 91.95 327 713 113 F 335 935 62 574 22 93.27 360 935 37 F 348 1297 127 600 27 92.24 346 912 137 F 355 935 37 597 26 92.49 324 935 48 F 314 1327 122 534 26 91.72 322 849 95 F 331 935 66 537 29 90.99 336 761 5 F 346 935 28 562 30 91.07 333 826 148 F 344 935 28 561 29 91.29 349 935 48 F 340 1076 44 569 30 91.18 340 935 57 F 330 1120 114 566 26 92.12 346 826 13 F 344 1151 0 602 22 93.60 423 902 0 F 422 1151 34 809 9 97.87 360 1664 0 F 362 1892 3 622 25 93.06 94 912 17 F 97 1664 241 135 14 85.11 277 1649 5 F 278 1708 0 511 11 96.03 50 1069 68 F 50 1083 145 84 4 92.00 274 1039 0 F 274 1435 147 524 6 97.81 360 1664 0 F 362 1892 3 622 25 93.06 354 1301 9 F 352 1500 137 650 14 96.02 351 819 155 F 354 1301 9 653 13 96.30 310 975 162 F 313 1301 9 575 12 96.13 345 404 295 F 349 1301 9 614 20 94.20 305 1066 1 F 311 1600 69 444 43 85.90 323 915 121 F 325 1070 53 600 12 96.28 602 5 96 F 601 16 214 1099 26 95.67 503 2 130 F 522 5 96 845 45 91.05 216 522 234 F 216 1134 194 424 2 99.07 131 1777 92 F 131 1868 104 210 13 90.08 359 11 153 F 356 29 155 639 19 94.66 330 1939 0 F 330 1940 10 568 23 93.03 291 1294 30 F 299 1786 23 498 23 92.10 83 454 220 F 83 988 223 162 1 98.80 85 454 220 F 84 1456 181 157 3 96.43 85 454 220 F 85 1196 139 162 2 97.65 85 454 220 F 85 474 281 162 2 97.65 85 454 220 F 85 543 221 162 2 97.65 85 454 220 F 85 658 343 162 2 97.65 85 454 220 F 85 713 181 162 2 97.65 85 454 220 F 85 1297 216 162 2 97.65 85 454 220 F 85 912 229 162 2 97.65 85 454 220 F 85 1327 202 162 2 97.65 85 454 220 F 85 761 105 162 2 97.65 85 454 220 F 85 826 247 162 2 97.65 85 454 220 F 85 483 175 162 2 97.65 85 454 220 F 85 1365 151 162 2 97.65 85 454 220 F 85 630 192 162 2 97.65 85 380 179 F 85 454 220 162 2 97.65 85 454 220 F 85 902 199 162 2 97.65 85 454 220 F 85 1151 232 162 2 97.65 85 454 220 F 85 1230 289 162 2 97.65 85 451 212 F 85 454 220 162 2 97.65 85 454 220 F 85 736 288 162 2 97.65 85 454 220 F 85 1100 219 162 2 97.65 85 454 220 F 85 1143 185 162 2 97.65 83 454 220 F 83 506 105 158 2 97.59 83 454 220 F 83 1049 233 158 2 97.59 85 454 220 F 84 1120 186 157 3 96.43 85 454 220 F 85 481 80 158 3 96.47 57 454 220 F 57 1189 115 110 1 98.25 85 454 220 F 85 605 159 158 3 96.47 85 454 220 F 84 579 107 153 4 95.24 85 454 220 F 85 642 68 158 3 96.47 85 454 220 F 86 798 173 159 3 96.47 85 454 220 F 86 1198 101 143 7 91.76 369 724 42 F 407 1826 28 520 62 83.20 474 1788 0 F 474 1850 9 836 28 94.09 249 541 0 F 252 1006 81 429 18 92.77 306 877 193 F 305 1514 2 547 16 94.75 291 1268 211 F 290 1514 0 517 16 94.48 284 1514 0 F 292 1747 113 452 31 89.08 300 1910 0 F 299 1926 25 543 14 95.32 295 376 132 F 295 1402 3 534 14 95.25 184 1277 151 F 184 1402 3 312 14 92.39 337 674 12 F 339 1281 47 600 19 94.36 72 126 102 F 72 530 148 140 1 98.61 72 126 102 F 72 1343 156 140 1 98.61 68 126 102 F 68 1431 261 92 11 83.82 76 126 97 F 76 1304 165 108 11 85.53 367 530 53 F 365 1343 63 688 11 96.99 360 544 0 F 358 1343 70 658 15 95.81 363 477 0 F 360 1052 64 659 16 95.56 290 1147 13 F 293 1331 123 503 20 93.10 194 253 2 F 194 276 2 308 20 89.69 404 549 32 F 412 661 104 712 26 93.56 297 1024 75 F 298 1744 100 343 63 78.79 189 413 38 F 189 1250 74 286 23 87.83 324 428 0 F 320 1441 29 564 20 93.75 198 78 563 F 199 80 592 305 23 88.38 199 80 592 F 198 1488 346 305 23 88.38 404 1764 10 F 403 1882 0 755 13 96.77 427 1764 1 F 432 1767 0 775 21 95.08 433 1745 0 F 427 1764 1 748 28 93.44 399 1882 0 F 414 1896 3 669 36 90.98 405 1767 6 F 413 1896 0 674 36 91.11 405 1745 6 F 413 1896 0 662 39 90.37 403 1764 7 F 417 1896 0 660 40 90.07 256 310 69 F 255 1363 75 483 7 97.25 84 310 149 F 84 1363 114 152 4 95.24 84 1363 114 F 84 1363 154 140 7 91.67 384 738 115 F 391 1384 0 671 26 93.23 80 470 274 F 80 991 38 136 6 92.50 195 991 38 F 196 1013 198 343 11 94.36 380 78 86 F 375 80 149 635 30 92.00 268 62 300 F 271 555 0 407 33 87.69 222 600 54 F 218 1251 0 332 27 87.61 399 815 46 F 415 1699 47 678 33 91.73 213 5 0 F 213 7 0 426 0 100.00 300 761 41 F 299 849 95 563 9 96.99 298 826 183 F 297 849 95 559 9 96.97 323 474 217 F 322 849 95 605 10 96.89 323 543 157 F 322 849 95 605 10 96.89 322 658 280 F 322 849 95 600 11 96.58 323 713 117 F 322 849 95 605 10 96.89 322 849 95 F 322 1297 153 596 12 96.27 317 849 95 F 318 912 165 595 10 96.85 297 849 95 F 298 1327 138 547 12 95.96 322 849 95 F 323 1076 61 577 17 94.72 324 798 109 F 322 849 95 594 13 95.96 322 849 95 F 322 1120 122 588 14 95.65 322 849 95 F 331 935 66 537 29 90.99 311 755 0 F 312 1412 113 535 22 92.93 255 597 0 F 253 1372 137 440 17 93.28 86 17 1 F 86 55 0 172 0 100.00 363 477 0 F 360 1052 64 659 16 95.56 391 470 80 F 395 1013 0 690 24 93.86 369 536 109 F 368 965 0 685 13 96.47 368 965 0 F 366 1082 58 662 18 95.08 360 530 60 F 360 544 0 672 12 96.67 309 5 337 F 309 39 371 510 27 91.26 309 16 455 F 309 39 371 498 30 90.29 197 2 371 F 202 39 371 299 25 87.31 59 35 147 F 59 49 398 118 0 100.00 151 42 147 F 146 49 398 261 9 93.84 336 1544 24 F 336 1549 0 588 18 94.64 160 1546 202 F 160 1549 0 308 3 98.12 159 1549 0 F 159 1550 177 290 7 95.60 249 1549 0 F 249 1551 9 422 16 93.57 160 1547 186 F 160 1549 0 300 5 96.88 236 1153 0 F 228 1161 110 348 29 87.28 379 1784 7 F 381 1799 0 656 26 93.14 316 902 0 F 313 1049 36 533 24 92.33 349 1049 0 F 349 1151 0 590 27 92.26 288 451 41 F 284 1049 65 496 19 93.31 347 736 58 F 349 1049 0 596 25 92.80 348 846 163 F 349 1049 0 569 32 90.80 296 380 0 F 298 1049 51 514 20 93.24 377 988 49 F 376 1049 60 693 15 96.01 261 483 31 F 258 1049 91 455 16 93.80 318 506 2 F 315 1328 75 561 18 94.29 389 1049 59 F 390 1328 0 679 25 93.57 248 1196 9 F 241 1328 50 353 34 85.89 358 474 106 F 359 1328 0 529 47 86.87 353 543 51 F 357 1328 2 510 50 85.84 349 658 177 F 357 1328 2 514 48 86.25 347 713 17 F 359 1328 0 462 61 82.42 263 1297 136 F 266 1328 93 413 29 88.97 354 912 58 F 357 1328 2 527 46 87.01 314 1327 71 F 318 1328 41 460 43 86.31 277 761 2 F 278 1328 71 443 28 89.89 345 826 76 F 347 1328 2 528 41 88.12 292 483 0 F 285 1328 6 437 35 87.72 223 1328 68 F 223 1365 45 362 21 90.58 290 630 19 F 291 1328 0 405 44 84.83 286 380 10 F 289 1328 2 447 32 88.81 289 846 222 F 291 1328 0 448 33 88.58 290 902 26 F 289 1328 2 451 32 88.93 290 1151 59 F 289 1328 2 455 31 89.27 293 1230 113 F 291 1328 0 464 30 89.69 282 451 47 F 280 1328 11 442 30 89.29 290 736 115 F 291 1328 0 457 31 89.31 293 1100 43 F 290 1328 1 419 41 85.86 222 1143 80 F 221 1328 70 355 22 90.05 352 1076 32 F 348 1120 96 624 19 94.54 206 1076 31 F 210 1196 42 316 25 87.86 352 474 188 F 353 1076 31 633 18 94.89 351 543 129 F 353 1076 31 636 17 95.16 349 658 253 F 353 1076 31 626 19 94.56 350 713 90 F 353 1076 31 631 18 94.86 344 1076 40 F 342 1297 133 622 16 95.32 347 912 136 F 348 1076 31 631 16 95.39 328 1076 31 F 326 1327 110 578 19 94.17 329 761 12 F 330 1076 31 599 15 95.44 326 826 155 F 328 1076 31 590 16 95.09 205 483 82 F 206 1076 31 319 23 88.78 206 1076 31 F 205 1365 58 315 24 88.29 205 630 99 F 206 1076 31 315 24 88.29 204 380 87 F 206 1076 31 318 23 88.73 204 846 302 F 206 1076 31 314 24 88.24 204 902 107 F 206 1076 31 322 22 89.22 206 1076 31 F 204 1151 140 322 22 89.22 206 1076 31 F 206 1230 195 328 21 89.81 204 451 120 F 206 1076 31 322 22 89.22 204 736 196 F 206 1076 31 322 22 89.22 206 1076 31 F 204 1100 127 314 24 88.24 206 1076 31 F 205 1143 92 327 21 89.76 231 506 48 F 229 1076 70 352 27 88.21 266 1049 141 F 268 1076 31 402 33 87.59 352 1120 16 F 358 1328 0 462 62 82.39 268 1076 31 F 268 1328 81 396 35 86.94 181 1328 77 F 181 1456 82 298 16 91.16 179 1076 31 F 179 1456 86 286 18 89.94 197 481 0 F 188 1328 103 289 24 87.23 192 481 0 F 184 1076 53 272 26 85.87 172 1189 0 F 171 1328 61 283 15 91.23 151 1076 32 F 149 1189 23 236 16 89.26 91 610 53 F 90 1456 175 157 6 93.33 172 610 53 F 173 1196 133 317 7 95.93 168 474 225 F 171 610 0 227 28 83.33 168 543 165 F 171 610 0 227 28 83.33 118 610 53 F 118 658 337 188 12 89.83 120 610 51 F 121 713 172 193 12 90.00 171 610 0 F 167 1297 161 222 29 82.63 171 610 0 F 168 912 173 227 28 83.33 171 610 0 F 168 1327 146 227 28 83.33 171 610 0 F 168 761 49 227 28 83.33 171 610 0 F 168 826 191 227 28 83.33 212 483 168 F 210 610 53 394 7 96.67 242 610 53 F 243 1365 144 449 9 96.28 242 610 53 F 243 630 185 461 6 97.52 231 380 172 F 230 610 53 437 6 97.39 230 610 53 F 231 846 387 433 7 96.96 230 610 53 F 231 902 192 437 6 97.39 230 610 53 F 231 1151 225 437 6 97.39 230 610 53 F 231 1230 282 437 6 97.39 229 451 205 F 228 610 53 433 6 97.37 228 610 53 F 229 736 281 433 6 97.37 230 610 53 F 231 1100 212 429 8 96.52 242 610 53 F 243 1143 178 449 9 96.28 123 506 98 F 123 610 53 190 14 88.62 123 610 53 F 123 1049 226 190 14 88.62 171 610 0 F 167 1120 130 222 29 82.63 231 481 73 F 230 610 53 429 8 96.52 61 610 53 F 62 1189 108 111 3 95.08 123 610 53 F 123 1328 168 190 14 88.62 171 610 0 F 167 1076 70 210 32 80.84 215 641 2 F 216 1328 75 339 23 89.30 203 641 9 F 206 1076 31 301 27 86.70 230 610 53 F 231 641 93 413 12 94.78 134 1289 3 F 133 1328 158 203 16 87.97 128 1076 109 F 129 1289 3 205 13 89.84 231 610 50 F 232 1289 10 415 12 94.81 248 1360 32 F 249 1456 16 337 40 83.87 305 1196 1 F 300 1360 61 485 30 90.00 305 474 88 F 306 1360 1 487 31 89.84 299 543 34 F 306 1360 1 453 38 87.29 296 658 159 F 306 1360 1 462 35 88.18 269 713 24 F 278 1360 29 371 44 83.64 259 1297 69 F 265 1360 42 400 31 88.03 302 912 39 F 306 1360 1 480 32 89.40 243 1327 71 F 246 1360 61 377 28 88.48 215 761 2 F 214 1360 93 369 15 92.99 303 826 56 F 307 1360 0 482 32 89.44 349 483 31 F 346 1360 53 631 16 95.38 334 1360 47 F 337 1365 0 599 18 94.61 374 630 38 F 375 1360 40 621 32 91.44 399 380 0 F 406 1360 9 705 25 93.73 410 846 204 F 414 1360 1 700 31 92.44 404 902 15 F 407 1360 8 711 25 93.81 412 1151 40 F 414 1360 1 714 28 93.20 414 1230 95 F 414 1360 1 704 31 92.51 384 451 48 F 383 1360 32 679 22 94.26 411 736 97 F 414 1360 1 721 26 93.67 413 1100 26 F 414 1360 1 663 41 90.07 405 1143 0 F 405 1360 10 638 43 89.38 221 506 0 F 217 1360 95 334 26 88.02 307 1049 42 F 311 1360 1 490 32 89.58 290 1120 7 F 297 1360 10 399 47 83.79 300 481 0 F 292 1360 123 512 20 93.15 172 1189 0 F 171 1360 81 283 15 91.23 320 641 0 F 320 1360 95 556 21 93.44 237 1289 3 F 237 1360 178 434 10 95.78 291 1328 0 F 293 1360 19 416 42 85.57 206 1076 31 F 204 1360 103 302 27 86.76 226 610 53 F 227 1360 188 413 10 95.58 274 605 2 F 274 1328 17 392 39 85.77 203 605 68 F 202 1076 35 301 26 87.13 231 605 152 F 230 610 53 429 8 96.52 379 605 0 F 381 1360 34 632 32 91.56 83 454 220 F 83 1328 175 154 3 96.39 377 988 49 F 377 1328 1 622 33 91.25 83 1328 175 F 83 1722 157 146 5 93.98 85 454 220 F 84 1076 126 153 4 95.24 243 988 131 F 246 1076 31 357 33 86.42 84 1076 126 F 85 1722 157 145 6 92.86 85 454 220 F 84 610 60 145 6 92.86 123 610 53 F 123 988 216 186 15 87.80 84 610 60 F 85 1722 157 137 8 90.48 85 454 220 F 85 1360 195 154 4 95.29 276 988 63 F 278 1360 34 450 26 90.58 85 1360 195 F 85 1722 157 146 6 92.94 219 579 4 F 221 1328 70 308 33 84.93 203 579 15 F 205 1076 32 312 24 88.18 244 579 98 F 244 610 51 456 8 96.72 326 579 0 F 327 1360 88 549 26 92.02 324 428 0 F 320 1441 29 564 20 93.75 317 428 7 F 312 1513 64 573 14 95.51 224 1196 0 F 222 1456 43 354 23 89.64 418 406 24 F 415 542 15 733 25 93.98 348 406 94 F 355 1056 58 615 22 93.68 367 530 53 F 365 1343 63 688 11 96.99 360 544 0 F 358 1343 70 658 15 95.81 296 960 29 F 303 970 135 543 14 95.27 391 1787 9 F 389 1810 2 680 25 93.57 254 474 139 F 256 483 31 450 15 94.09 261 474 132 F 263 1365 0 448 19 92.72 307 474 86 F 303 630 1 446 41 86.47 291 380 0 F 296 474 97 507 20 93.13 311 474 82 F 311 902 0 538 21 93.25 347 474 46 F 344 1151 0 603 22 93.60 392 474 1 F 399 1230 2 615 44 88.78 283 451 41 F 281 474 112 492 18 93.59 393 474 0 F 382 736 18 639 34 91.10 328 474 65 F 328 1100 3 508 37 88.72 256 483 31 F 253 543 80 437 18 92.89 257 543 76 F 261 1365 2 446 18 93.00 301 543 32 F 303 630 1 444 40 86.71 290 380 1 F 292 543 41 494 22 92.41 304 543 29 F 311 902 0 499 29 90.46 333 543 0 F 342 1151 2 555 30 90.99 320 543 13 F 331 1230 70 515 34 89.38 275 451 49 F 272 543 61 471 19 93.01 333 543 0 F 340 736 60 557 29 91.29 282 543 51 F 287 1100 44 457 28 90.07 189 483 98 F 188 658 267 345 8 95.74 256 658 199 F 263 1365 0 439 20 92.19 303 630 1 F 298 658 157 433 42 85.91 290 380 1 F 289 658 166 495 21 92.73 299 658 156 F 308 902 3 507 25 91.64 334 658 121 F 344 1151 0 558 30 91.02 317 658 138 F 329 1230 72 530 29 90.85 275 451 49 F 269 658 186 484 15 94.42 375 658 80 F 382 736 18 613 36 90.40 278 658 177 F 286 1100 45 456 27 90.29 256 483 31 F 249 713 44 389 29 88.35 230 713 63 F 232 1365 31 374 22 90.43 227 630 77 F 224 713 69 359 23 89.73 289 380 2 F 283 713 10 416 39 86.22 256 713 37 F 261 902 50 401 29 88.67 291 713 2 F 302 1151 42 429 41 85.91 284 713 9 F 295 1230 106 423 39 86.27 276 451 48 F 266 713 27 410 33 87.59 269 713 24 F 276 736 124 409 34 87.36 243 713 50 F 247 1100 84 390 25 89.71 234 483 53 F 229 1297 99 399 16 93.01 252 1297 76 F 261 1365 2 413 25 90.08 193 630 111 F 192 1297 136 333 13 93.23 282 380 9 F 277 1297 51 455 26 90.61 257 902 54 F 252 1297 76 429 20 92.06 305 1151 39 F 295 1297 33 456 36 87.80 286 1230 115 F 276 1297 52 446 29 89.49 246 451 78 F 241 1297 87 415 18 92.53 304 736 96 F 295 1297 33 459 35 88.14 237 1100 94 F 232 1297 96 397 18 92.24 256 483 31 F 253 912 88 441 17 93.28 259 912 82 F 263 1365 0 438 21 91.89 303 630 1 F 304 912 37 451 39 87.13 291 380 0 F 294 912 47 501 21 92.78 298 902 13 F 297 912 44 511 21 92.93 341 912 0 F 343 1151 1 580 26 92.38 324 912 17 F 329 1230 72 537 29 91.05 283 451 41 F 279 912 62 486 19 93.19 341 736 59 F 341 912 0 582 25 92.67 283 912 58 F 287 1100 44 454 29 89.75 234 483 53 F 231 1327 83 393 18 92.21 230 1327 84 F 232 1365 31 374 22 90.43 240 630 64 F 237 1327 77 373 26 89.03 285 380 6 F 284 1327 30 429 35 87.68 245 902 66 F 243 1327 71 408 20 91.77 245 1151 99 F 243 1327 71 408 20 91.77 327 1230 74 F 314 1327 0 469 43 86.31 247 451 77 F 244 1327 70 407 21 91.39 245 736 155 F 243 1327 71 408 20 91.77 237 1100 94 F 234 1327 80 387 21 91.03 215 483 72 F 215 761 2 390 10 95.35 215 761 2 F 215 1365 48 382 12 94.42 215 630 89 F 215 761 2 362 17 92.09 214 380 77 F 215 761 2 389 10 95.33 215 761 2 F 214 902 97 393 9 95.79 215 761 2 F 214 1151 130 393 9 95.79 215 761 2 F 217 1230 184 384 12 94.42 214 451 110 F 215 761 2 393 9 95.79 214 736 186 F 215 761 2 393 9 95.79 215 761 2 F 214 1100 117 381 12 94.39 256 483 31 F 253 826 106 449 15 94.07 257 826 102 F 261 1365 2 438 20 92.22 304 630 0 F 306 826 53 442 42 86.18 291 380 0 F 293 826 66 520 16 94.50 310 826 49 F 311 902 0 541 20 93.55 346 826 13 F 344 1151 0 602 22 93.60 328 826 31 F 331 1230 70 555 26 92.07 283 451 41 F 279 826 80 494 17 93.91 304 736 96 F 304 826 55 552 14 95.39 283 826 76 F 287 1100 44 462 27 90.46 298 474 95 F 297 1143 0 459 34 88.55 289 543 44 F 293 1143 4 454 32 88.93 286 658 169 F 293 1143 4 435 36 87.41 183 713 110 F 184 1143 113 327 10 94.54 293 1143 4 F 282 1297 46 403 42 85.11 296 912 45 F 297 1143 0 453 35 88.18 250 1143 47 F 244 1327 70 382 28 88.52 215 761 2 F 216 1143 81 379 13 93.95 295 826 64 F 297 1143 0 452 35 88.14 293 483 49 F 297 1196 9 514 19 93.52 274 1196 32 F 269 1365 48 491 13 95.17 281 630 77 F 287 1196 19 488 20 92.88 299 380 46 F 306 1196 0 513 23 92.31 299 902 66 F 305 1196 1 516 22 92.64 299 1151 99 F 305 1196 1 516 22 92.64 306 1196 0 F 303 1230 152 525 21 93.07 301 451 77 F 306 1196 0 519 22 92.69 299 736 155 F 305 1196 1 516 22 92.64 301 1100 84 F 306 1196 0 511 24 92.03 304 1143 47 F 306 1196 0 510 25 91.78 215 474 178 F 220 1196 32 359 19 91.16 214 543 119 F 220 1196 32 362 18 91.59 188 658 267 F 194 1196 58 326 14 92.55 211 713 82 F 218 1196 34 349 20 90.52 220 1196 32 F 212 1297 116 352 20 90.57 215 912 126 F 220 1196 32 363 18 91.63 220 1196 32 F 214 1327 100 350 21 90.19 215 761 2 F 220 1196 32 359 19 91.16 214 826 145 F 220 1196 32 358 19 91.12 221 506 0 F 223 1196 34 324 30 86.43 240 1049 109 F 246 1196 11 374 28 88.33 284 474 180 F 289 506 0 441 33 88.38 419 474 45 F 417 1049 0 684 38 90.89 289 506 0 F 283 543 121 436 34 87.99 404 543 0 F 414 1049 3 630 47 88.37 289 506 0 F 281 658 245 430 35 87.54 395 658 131 F 405 1049 12 636 41 89.62 253 506 36 F 251 713 113 392 28 88.84 362 713 2 F 373 1049 44 503 58 83.98 273 506 16 F 268 1297 131 413 32 88.06 402 1049 15 F 383 1297 16 553 58 84.86 289 506 0 F 284 912 128 437 34 88.03 411 912 1 F 414 1049 3 653 43 89.54 267 506 22 F 264 1327 121 407 31 88.26 318 1049 99 F 314 1327 71 488 36 88.54 279 506 0 F 275 761 4 434 30 89.09 277 761 2 F 276 1049 131 473 20 92.75 279 506 0 F 274 826 147 433 30 89.05 409 826 12 F 407 1049 0 664 38 90.66 210 1120 87 F 218 1196 34 348 20 90.48 238 483 49 F 233 1120 64 387 21 90.99 229 1120 68 F 232 1365 31 377 21 90.83 227 630 77 F 224 1120 73 359 23 89.73 291 380 0 F 288 1120 9 427 38 86.81 258 902 53 F 255 1120 42 409 26 89.80 297 1120 0 F 305 1151 39 446 39 86.87 290 1120 7 F 296 1230 105 442 36 87.59 277 451 47 F 271 1120 26 416 33 87.82 304 736 96 F 297 1120 0 445 39 86.87 251 1100 80 F 248 1120 49 379 28 88.71 183 1120 114 F 184 1143 113 327 10 94.54 288 506 0 F 281 1120 87 413 39 86.12 375 1049 41 F 368 1120 0 523 55 85.05 246 483 14 F 243 1456 22 361 32 86.83 234 1365 2 F 233 1456 32 343 31 86.70 239 630 38 F 242 1456 23 345 34 85.77 209 380 55 F 211 1456 54 344 19 90.91 247 902 37 F 249 1456 16 368 32 87.04 247 1151 70 F 250 1456 15 365 33 86.64 249 1230 125 F 250 1456 15 375 31 87.55 249 451 48 F 250 1456 15 367 33 86.75 246 736 127 F 250 1456 15 360 34 86.18 260 1100 44 F 259 1456 6 379 35 86.49 251 1143 19 F 249 1456 16 380 30 87.95 188 506 0 F 186 1456 77 294 20 89.25 245 1049 71 F 248 1456 15 357 34 86.12 266 474 100 F 265 1456 0 359 42 84.15 238 543 68 F 241 1456 24 367 28 88.24 235 658 193 F 241 1456 24 348 32 86.38 239 713 27 F 249 1456 16 380 27 88.70 169 1297 132 F 171 1456 94 300 10 94.08 257 912 57 F 260 1456 5 365 38 85.21 244 1327 43 F 249 1456 16 333 40 83.61 186 761 4 F 188 1456 77 326 12 93.55 263 826 69 F 265 1456 0 356 43 83.65 259 1120 11 F 265 1456 0 388 34 86.87 165 481 0 F 158 1456 107 259 16 89.87 246 481 0 F 243 1196 63 417 18 92.59 185 474 208 F 192 481 0 301 19 89.73 192 481 0 F 184 543 149 300 19 89.67 192 481 0 F 183 658 272 295 20 89.07 192 481 0 F 183 713 110 291 21 88.52 192 481 0 F 183 1297 145 291 21 88.52 192 481 0 F 184 912 157 300 19 89.67 192 481 0 F 184 1327 130 292 21 88.59 192 481 0 F 184 761 33 300 19 89.67 192 481 0 F 184 826 175 300 19 89.67 192 481 0 F 183 1120 114 291 21 88.52 172 1189 0 F 173 1456 65 265 20 88.37 172 1189 0 F 176 1196 20 272 19 88.95 171 474 167 F 172 1189 0 303 10 94.15 169 543 109 F 172 1189 0 301 10 94.08 168 658 232 F 172 1189 0 296 11 93.45 128 713 110 F 129 1189 43 237 5 96.09 172 1189 0 F 167 1297 106 291 12 92.81 171 912 115 F 172 1189 0 311 8 95.32 172 1189 0 F 170 1327 89 278 16 90.59 160 761 2 F 161 1189 11 285 9 94.38 170 826 134 F 172 1189 0 302 10 94.12 129 1120 114 F 129 1189 43 242 4 96.90 240 605 4 F 243 1456 22 339 36 85.00 290 605 35 F 295 1196 11 485 25 91.38 272 474 121 F 271 605 0 443 25 90.77 270 543 63 F 271 605 0 421 30 88.89 271 605 0 F 267 658 188 438 25 90.64 271 605 0 F 263 713 30 386 37 85.93 162 605 109 F 162 1297 166 284 10 93.83 271 605 0 F 270 912 71 437 26 90.37 246 605 25 F 243 1327 71 381 27 88.89 216 605 55 F 215 761 2 363 17 92.09 271 605 0 F 270 826 89 437 26 90.37 267 605 4 F 263 1120 34 386 36 86.31 239 988 67 F 241 1456 22 344 34 85.77 238 988 101 F 246 1196 11 368 29 87.82 376 474 57 F 374 988 0 586 41 89.04 322 543 51 F 324 988 50 514 33 89.75 318 658 177 F 324 988 50 534 27 91.51 304 713 29 F 312 988 62 436 45 85.20 304 988 70 F 299 1297 69 467 34 88.63 323 912 58 F 324 988 50 531 29 91.02 283 988 91 F 283 1327 71 446 30 89.40 255 761 2 F 253 988 121 428 20 92.09 323 826 76 F 324 988 50 531 29 91.02 346 988 28 F 337 1120 0 467 54 83.98 188 579 3 F 192 1456 73 300 20 89.36 268 579 4 F 276 1196 30 444 25 90.67 220 474 173 F 218 579 0 326 28 87.16 219 543 114 F 218 579 0 329 27 87.61 218 579 0 F 217 658 238 319 29 86.64 211 579 7 F 211 713 82 326 24 88.63 211 579 7 F 210 1297 118 317 26 87.62 218 579 0 F 220 912 121 330 27 87.61 218 579 0 F 219 1327 95 317 30 86.24 211 579 7 F 213 761 4 324 25 88.15 218 579 0 F 219 826 140 329 27 87.61 211 579 7 F 210 1120 87 333 22 89.52 153 642 0 F 155 1456 110 240 17 88.89 228 642 6 F 231 1196 75 395 16 92.98 178 474 215 F 177 642 3 279 18 89.83 181 543 152 F 180 642 0 281 19 89.44 180 642 0 F 180 658 275 276 20 88.89 177 642 3 F 178 713 115 275 19 89.27 180 642 0 F 180 1297 148 276 20 88.89 180 642 0 F 181 912 160 281 19 89.44 180 642 0 F 181 1327 133 273 21 88.33 180 642 0 F 181 761 36 281 19 89.44 180 642 0 F 181 826 178 281 19 89.44 180 642 0 F 180 1120 117 272 21 88.33 241 798 18 F 243 1456 22 340 36 85.06 215 798 71 F 220 1196 32 351 21 90.23 255 483 32 F 253 798 33 428 20 92.09 259 798 27 F 263 1365 0 422 25 90.35 284 630 20 F 283 798 3 399 42 85.16 283 380 8 F 286 798 0 453 29 89.75 286 798 0 F 287 902 24 461 28 90.21 286 798 0 F 287 1151 57 469 26 90.91 285 798 1 F 288 1230 113 453 30 89.47 254 451 70 F 253 798 33 435 18 92.89 286 736 114 F 286 798 0 472 25 91.26 253 798 33 F 255 1100 76 400 27 89.33 232 798 54 F 232 1143 65 376 22 90.52 289 506 0 F 284 798 73 425 37 86.97 357 798 0 F 359 1049 58 544 43 87.96 192 481 0 F 185 798 101 293 21 88.65 171 798 60 F 172 1189 0 291 13 92.40 271 605 0 F 270 798 16 401 35 87.04 292 798 33 F 289 988 84 473 27 90.66 218 579 0 F 220 798 66 318 30 86.24 180 642 0 F 182 798 104 278 20 88.89 185 1198 2 F 178 1456 87 259 26 85.39 263 1196 43 F 267 1198 2 422 27 89.73 204 474 189 F 212 1198 2 312 26 87.25 203 543 130 F 212 1198 2 315 25 87.68 201 658 254 F 212 1198 2 305 27 86.57 202 713 91 F 212 1198 2 302 28 86.14 212 1198 2 F 201 1297 127 301 28 86.07 204 912 137 F 212 1198 2 316 25 87.75 199 1198 15 F 193 1327 121 296 24 87.56 207 761 10 F 214 1198 0 313 27 86.96 206 826 153 F 214 1198 0 316 26 87.38 201 1120 96 F 212 1198 2 301 28 86.07 202 798 84 F 209 1198 5 307 26 87.13 186 935 37 F 178 1456 87 260 26 85.39 202 935 48 F 198 1196 54 280 30 84.85 202 935 48 F 198 1198 16 252 37 81.31 204 483 83 F 213 935 37 301 29 85.78 213 935 37 F 204 1365 59 297 30 85.29 192 630 112 F 202 935 48 278 29 84.90 203 380 88 F 213 935 37 300 29 85.71 203 902 108 F 213 935 37 304 28 86.21 213 935 37 F 203 1151 141 304 28 86.21 213 935 37 F 205 1230 196 302 29 85.85 203 451 121 F 213 935 37 304 28 86.21 203 736 197 F 213 935 37 304 28 86.21 213 935 37 F 203 1100 128 296 30 85.22 213 935 37 F 204 1143 93 297 30 85.29 171 506 58 F 174 935 88 261 21 87.72 225 935 37 F 215 1049 142 320 30 86.05 192 481 0 F 193 935 57 257 32 83.33 158 935 37 F 149 1189 23 227 20 86.58 204 605 67 F 212 935 38 288 32 84.31 174 935 88 F 170 988 177 260 21 87.65 192 579 26 F 202 935 48 246 37 80.73 161 642 0 F 171 935 60 228 26 83.85 399 815 46 F 415 1699 47 678 33 91.73 74 78 25 F 74 80 74 112 9 87.84 52 376 311 F 53 1694 343 65 10 80.77 46 1402 188 F 45 1694 351 63 7 84.44 44 376 258 F 46 376 317 62 7 84.09 44 376 258 F 46 1402 188 62 7 84.09 46 376 317 F 44 1277 277 62 7 84.09 44 1277 277 F 46 1402 188 62 7 84.09 46 376 317 F 44 1402 129 62 7 84.09 44 1402 129 F 46 1402 188 62 7 84.09 296 960 29 F 303 970 135 543 14 95.27 335 546 114 F 332 884 41 639 7 97.89 390 546 59 F 385 890 2 699 19 95.06 282 591 0 F 283 1758 7 461 26 90.78 354 1301 9 F 352 1500 137 650 14 96.02 351 819 155 F 354 1301 9 653 13 96.30 244 707 1 F 255 1623 143 359 35 85.66 253 461 0 F 259 1850 260 472 10 96.05 137 950 50 F 135 1850 252 168 26 80.74 127 461 0 F 126 950 61 169 21 83.33 309 1649 13 F 309 1931 0 546 18 94.17 309 1708 8 F 305 1931 0 490 30 90.16 152 719 114 F 156 1199 0 268 10 93.42 291 358 77 F 292 1678 0 523 15 94.85 446 1767 9 F 440 1882 0 806 20 95.45 427 1764 1 F 432 1767 0 775 21 95.08 461 654 0 F 461 1212 120 758 41 91.11 479 866 95 F 488 1212 73 759 52 89.14 306 807 164 F 306 1212 227 592 5 98.37 352 422 168 F 367 1126 0 611 27 92.33 276 1 294 F 271 16 0 515 8 97.05 71 719 170 F 71 1650 0 118 6 91.55 348 1325 136 F 350 1621 0 666 8 97.70 349 1554 0 F 347 1555 52 632 16 95.39 319 1548 0 F 318 1555 101 605 8 97.48 311 833 111 F 315 1146 29 526 25 91.96 249 541 0 F 252 1006 81 429 18 92.77 540 4 16 F 523 47 0 935 32 93.88 108 1879 81 F 108 1950 151 196 5 95.37 376 558 0 F 368 1254 134 668 19 94.84 176 1209 42 F 172 1349 164 200 37 78.49 171 306 41 F 176 1209 42 199 37 78.36 318 506 2 F 315 1328 75 561 18 94.29 389 1049 59 F 390 1328 0 679 25 93.57 318 574 96 F 320 1369 78 602 9 97.17 297 1552 0 F 293 1554 56 526 16 94.54 309 1548 7 F 314 1552 0 559 16 94.82 314 1552 0 F 308 1555 108 534 22 92.86 309 1548 7 F 314 1552 0 559 16 94.82 314 1552 0 F 308 1555 108 534 22 92.86 297 1552 0 F 293 1554 56 526 16 94.54 71 1543 267 F 71 1543 350 126 4 94.37 390 1449 38 F 392 1451 4 670 28 92.82 370 630 64 F 372 1365 21 658 21 94.32 368 380 35 F 373 1365 2 677 16 95.65 369 902 54 F 373 1365 2 690 13 96.48 371 1151 85 F 375 1365 0 694 13 96.50 372 1230 141 F 373 1365 2 677 17 95.43 372 451 62 F 373 1365 0 685 15 95.97 369 736 141 F 373 1365 0 690 13 96.48 349 1100 94 F 351 1365 24 648 13 96.28 349 483 31 F 349 1365 6 634 16 95.42 392 1143 35 F 391 1365 2 691 23 94.12 342 506 0 F 337 1049 133 635 11 96.74 218 483 74 F 221 506 0 355 21 90.37 221 506 0 F 218 630 91 331 27 87.61 217 380 79 F 221 506 0 354 21 90.32 221 506 0 F 217 902 99 358 20 90.78 221 506 0 F 217 1151 132 358 20 90.78 221 506 0 F 220 1230 186 357 21 90.45 217 451 112 F 221 506 0 358 20 90.78 221 506 0 F 217 736 188 358 20 90.78 221 506 0 F 217 1100 119 346 23 89.40 221 506 0 F 219 1143 83 344 24 89.04 262 1049 87 F 266 1365 2 452 19 92.75 221 506 0 F 218 1365 50 351 22 89.91 284 481 0 F 277 483 103 509 13 95.31 304 481 0 F 296 630 120 536 16 94.59 296 380 107 F 304 481 0 544 14 95.27 304 481 0 F 296 902 127 548 13 95.61 304 481 0 F 296 1151 160 548 13 95.61 304 481 0 F 296 1230 217 548 13 95.61 294 451 140 F 302 481 0 544 13 95.58 302 481 0 F 294 736 216 544 13 95.58 304 481 0 F 296 1100 147 540 15 94.93 304 481 0 F 296 1143 113 536 16 94.59 197 481 0 F 188 1049 161 301 21 88.83 304 481 0 F 297 1365 78 533 17 94.28 197 481 0 F 190 506 31 291 24 87.37 172 1189 0 F 172 1365 36 296 12 93.02 162 506 0 F 158 1189 14 256 16 89.87 137 481 0 F 129 1189 43 214 13 89.92 370 605 13 F 373 1365 2 639 26 92.97 221 506 0 F 219 605 57 336 26 88.13 304 481 0 F 298 605 85 538 16 94.63 264 988 75 F 268 1365 0 436 24 90.91 308 506 0 F 303 988 123 547 16 94.72 197 481 0 F 188 988 151 289 24 87.23 259 483 106 F 257 642 0 460 14 94.55 258 630 123 F 257 642 0 455 15 94.16 258 380 110 F 257 642 0 463 13 94.94 257 642 0 F 258 902 130 463 13 94.94 257 642 0 F 258 1151 163 463 13 94.94 257 642 0 F 258 1230 220 463 13 94.94 258 451 143 F 257 642 0 463 13 94.94 257 642 0 F 258 736 219 463 13 94.94 257 642 0 F 258 1100 150 459 14 94.55 257 642 0 F 258 1143 116 455 15 94.16 185 642 0 F 185 1049 164 290 20 89.19 125 642 0 F 126 1189 46 203 12 90.40 239 605 109 F 239 642 18 430 12 94.98 185 642 0 F 185 988 154 282 22 88.11 254 642 0 F 256 1365 81 462 12 95.28 187 506 34 F 185 642 0 276 24 87.03 258 481 11 F 251 642 6 429 20 92.03 297 483 83 F 306 1198 2 515 22 92.59 316 630 100 F 326 1198 2 538 26 91.77 315 380 88 F 326 1198 2 545 24 92.38 315 902 108 F 326 1198 2 549 23 92.70 315 1151 141 F 326 1198 2 549 23 92.70 326 1198 2 F 317 1230 196 551 23 92.74 313 451 121 F 324 1198 2 545 23 92.65 313 736 197 F 324 1198 2 545 23 92.65 315 1100 128 F 326 1198 2 537 26 91.75 316 1143 93 F 326 1198 2 538 26 91.77 207 1049 142 F 217 1198 2 316 27 86.96 145 1189 23 F 152 1198 2 229 17 88.28 315 605 68 F 323 1198 5 522 29 90.79 207 988 132 F 217 1198 2 304 30 85.51 326 1198 2 F 316 1365 59 542 25 92.09 211 506 10 F 217 1198 2 300 32 84.83 294 481 10 F 293 1198 35 499 22 92.49 227 642 30 F 231 1198 62 390 17 92.51 139 545 1 F 138 1453 139 241 9 93.48 362 662 80 F 367 1193 8 569 40 88.95 347 579 1 F 350 1365 43 605 23 93.37 370 630 64 F 372 1365 21 658 21 94.32 368 380 35 F 373 1365 2 677 16 95.65 370 605 13 F 373 1365 2 639 26 92.97 371 846 247 F 375 1365 0 686 15 95.96 369 902 54 F 373 1365 2 690 13 96.48 371 1151 85 F 375 1365 0 694 13 96.50 372 1230 141 F 373 1365 2 677 17 95.43 372 451 62 F 373 1365 0 685 15 95.97 369 736 141 F 373 1365 0 690 13 96.48 392 1143 35 F 391 1365 2 691 23 94.12 326 1198 2 F 316 1365 59 542 25 92.09 349 1100 94 F 351 1365 24 648 13 96.28 329 1653 0 F 334 1828 74 587 19 94.22 278 1653 0 F 285 1947 68 491 18 93.53 244 707 1 F 255 1623 143 359 35 85.66 168 719 268 F 168 1199 159 320 4 97.62 400 542 30 F 413 1056 0 713 25 93.75 242 1056 0 F 238 1653 107 336 36 84.87 348 406 94 F 355 1056 58 615 22 93.68 411 1696 0 F 412 1781 23 691 33 91.97 328 539 94 F 328 1080 0 584 18 94.51 274 542 0 F 291 1828 150 413 38 86.13 329 1653 0 F 334 1828 74 587 19 94.22 188 406 98 F 198 1828 243 290 24 87.23 382 1121 56 F 384 1512 11 674 23 93.98 381 309 0 F 374 804 82 691 16 95.72 397 221 0 F 397 266 0 786 2 99.50 296 3 0 F 296 5 38 572 5 98.31 175 3 0 F 175 7 38 346 1 99.43 200 3 0 F 204 4 460 312 23 88.50 610 3 0 F 607 39 72 1145 18 97.03 68 16 84 F 68 39 0 136 0 100.00 68 1 378 F 68 39 0 136 0 100.00 196 39 0 F 171 47 372 211 39 77.19 276 4 388 F 272 39 0 428 30 88.97 350 372 1 F 348 1348 62 654 11 96.84 261 474 132 F 263 1365 0 448 19 92.72 306 877 193 F 305 1514 2 547 16 94.75 291 1268 211 F 290 1514 0 517 16 94.48 289 1514 0 F 293 1627 121 494 22 92.39 284 1514 0 F 292 1747 113 452 31 89.08 396 584 79 F 407 1661 35 627 43 89.14 382 1121 56 F 384 1512 11 674 23 93.98 215 361 85 F 220 362 16 315 30 86.05 249 541 0 F 252 1006 81 429 18 92.77 58 950 2 F 58 1850 210 108 2 96.55 58 950 2 F 58 1788 201 108 2 96.55 331 18 0 F 337 46 194 536 33 90.03 329 1055 0 F 328 1542 146 605 13 96.04 419 975 53 F 419 1500 29 762 19 95.47 422 819 43 F 431 975 41 761 23 94.55 20 215 210 F 20 1373 404 40 0 100.00 20 215 207 F 20 1373 404 40 0 100.00 376 474 57 F 374 988 0 586 41 89.04 505 474 35 F 492 658 110 909 22 95.53 200 545 122 F 202 1453 254 358 11 94.50 309 877 174 F 310 1268 193 599 5 98.38 348 1064 63 F 351 1669 2 603 24 93.10 250 1021 0 F 250 1051 242 468 8 96.80 247 885 66 F 249 1051 243 456 10 95.95 245 885 68 F 247 1021 3 440 13 94.69 354 965 14 F 360 1034 0 646 17 95.20 373 567 23 F 368 965 0 621 30 91.85 369 536 109 F 368 965 0 685 13 96.47 368 965 0 F 366 1082 58 662 18 95.08 208 1138 64 F 200 1215 247 280 32 84.00 378 242 0 F 379 294 0 729 7 98.15 130 779 247 F 133 783 240 179 19 85.38 349 935 48 F 340 1076 44 569 30 91.18 340 935 57 F 330 1120 114 566 26 92.12 492 474 48 F 480 543 0 880 23 95.21 488 474 47 F 483 912 0 919 13 97.31 341 474 176 F 341 761 0 666 4 98.83 480 474 35 F 479 826 2 899 15 96.87 435 474 105 F 433 798 0 792 19 95.61 254 474 139 F 256 483 31 450 15 94.09 311 474 82 F 311 902 0 538 21 93.25 347 474 46 F 344 1151 0 603 22 93.60 392 474 1 F 399 1230 2 615 44 88.78 283 451 41 F 281 474 112 492 18 93.59 393 474 0 F 382 736 18 639 34 91.10 298 474 95 F 297 1143 0 459 34 88.55 419 474 45 F 417 1049 0 684 38 90.89 505 474 35 F 492 658 110 909 22 95.53 450 474 90 F 438 713 2 752 34 92.24 453 474 87 F 444 1120 0 765 33 92.57 393 474 0 F 392 846 114 625 40 89.80 368 474 147 F 365 1327 71 681 13 96.44 358 474 106 F 359 1328 0 529 47 86.87 291 380 0 F 296 474 97 507 20 93.13 215 361 85 F 220 362 16 315 30 86.05 176 1205 108 F 175 1941 183 283 17 90.29 334 1360 47 F 337 1365 0 599 18 94.61 374 630 38 F 375 1360 40 621 32 91.44 399 380 0 F 406 1360 9 705 25 93.73 410 846 204 F 414 1360 1 700 31 92.44 404 902 15 F 407 1360 8 711 25 93.81 412 1151 40 F 414 1360 1 714 28 93.20 414 1230 95 F 414 1360 1 704 31 92.51 384 451 48 F 383 1360 32 679 22 94.26 411 736 97 F 414 1360 1 721 26 93.67 413 1100 26 F 414 1360 1 663 41 90.07 349 483 31 F 346 1360 53 631 16 95.38 305 474 88 F 306 1360 1 487 31 89.84 299 543 34 F 306 1360 1 453 38 87.29 296 658 159 F 306 1360 1 462 35 88.18 269 713 24 F 278 1360 29 371 44 83.64 259 1297 69 F 265 1360 42 400 31 88.03 302 912 39 F 306 1360 1 480 32 89.40 243 1327 71 F 246 1360 61 377 28 88.48 215 761 2 F 214 1360 93 369 15 92.99 303 826 56 F 307 1360 0 482 32 89.44 268 798 18 F 268 1360 39 420 29 89.18 379 605 0 F 381 1360 34 632 32 91.56 405 1143 0 F 405 1360 10 638 43 89.38 257 642 0 F 258 1360 126 451 16 93.77 165 849 95 F 166 1360 131 271 15 90.91 305 1196 1 F 300 1360 61 485 30 90.00 221 506 0 F 217 1360 95 334 26 88.02 307 1049 42 F 311 1360 1 490 32 89.58 291 1328 0 F 293 1360 19 416 42 85.57 276 988 63 F 278 1360 34 450 26 90.58 213 935 37 F 203 1360 104 280 34 83.25 237 579 91 F 238 1289 4 439 9 96.20 128 1076 109 F 129 1289 3 205 13 89.84 128 1120 169 F 129 1289 3 205 13 89.84 183 1196 123 F 183 1289 3 330 9 95.08 129 474 264 F 129 1289 3 206 13 89.92 129 543 204 F 129 1289 3 206 13 89.92 128 658 327 F 129 1289 3 201 14 89.06 129 713 164 F 129 1289 3 202 14 89.15 129 1289 3 F 129 1297 199 206 13 89.92 129 912 212 F 129 1289 3 206 13 89.92 129 1289 3 F 129 1327 185 206 13 89.92 129 761 88 F 129 1289 3 206 13 89.92 129 826 230 F 129 1289 3 206 13 89.92 130 798 156 F 129 1289 3 203 14 89.15 222 483 158 F 221 1289 3 415 7 96.83 239 1289 3 F 239 1365 134 438 10 95.82 239 630 175 F 239 1289 3 446 8 96.65 239 380 162 F 239 1289 3 446 8 96.65 239 846 377 F 239 1289 3 442 9 96.23 239 902 182 F 239 1289 3 446 8 96.65 239 1151 215 F 239 1289 3 446 8 96.65 239 1230 272 F 239 1289 3 446 8 96.65 239 451 195 F 239 1289 3 446 8 96.65 239 736 271 F 239 1289 3 446 8 96.65 239 1100 202 F 239 1289 3 442 9 96.23 239 605 142 F 239 1289 3 438 10 95.82 239 1143 168 F 239 1289 3 438 10 95.82 206 642 51 F 206 1289 3 376 9 95.63 118 849 142 F 119 1289 3 173 16 86.44 133 506 88 F 134 1289 3 207 15 88.72 133 1049 216 F 134 1289 3 207 15 88.72 134 1289 3 F 133 1328 158 203 16 87.97 133 988 206 F 134 1289 3 203 16 87.97 121 935 129 F 120 1289 12 185 14 88.33 206 1076 31 F 204 1360 103 302 27 86.76 290 1120 7 F 297 1360 10 399 47 83.79 326 579 0 F 327 1360 88 549 26 92.02 237 1289 3 F 237 1360 178 434 10 95.78 248 1360 32 F 249 1456 16 337 40 83.87 102 1289 3 F 100 1456 165 174 7 93.00 337 674 12 F 339 1281 47 600 19 94.36 382 1121 56 F 384 1512 11 674 23 93.98 445 34 170 F 432 1317 10 749 32 92.59 332 977 26 F 332 1605 73 556 27 91.87 318 574 96 F 320 1369 78 602 9 97.17 309 244 0 F 309 272 0 590 7 97.73 343 1302 67 F 343 1433 4 606 20 94.17 356 989 50 F 347 1350 1 591 28 91.93 149 413 221 F 148 1250 267 265 8 94.59 339 440 2 F 335 765 95 606 17 94.93 339 1820 0 F 340 1909 0 599 20 94.10 299 1871 0 F 296 1892 0 515 20 93.24 293 1664 0 F 296 1871 3 469 30 89.76 328 720 0 F 330 1398 19 534 31 90.55 344 691 71 F 347 814 135 643 12 96.51 309 244 0 F 309 272 0 590 7 97.73 389 848 138 F 404 1658 0 637 39 89.97 179 40 323 F 179 66 137 334 6 96.65 132 66 137 F 132 747 236 240 6 95.45 340 935 57 F 330 1120 114 566 26 92.12 453 474 87 F 444 1120 0 765 33 92.57 376 543 104 F 376 1120 68 696 14 96.28 444 658 158 F 444 1120 0 752 34 92.34 416 713 24 F 420 1120 24 744 23 94.47 322 849 95 F 322 1120 122 588 14 95.65 352 1076 32 F 348 1120 96 624 19 94.54 444 1120 0 F 439 1297 36 735 37 91.57 274 1196 32 F 269 1365 48 491 13 95.17 268 579 4 F 276 1196 30 444 25 90.67 281 630 77 F 287 1196 19 488 20 92.88 299 380 46 F 306 1196 0 513 23 92.31 299 846 261 F 305 1196 1 508 24 91.97 299 902 66 F 305 1196 1 516 22 92.64 299 1151 99 F 305 1196 1 516 22 92.64 306 1196 0 F 303 1230 152 525 21 93.07 301 451 77 F 306 1196 0 519 22 92.69 299 736 155 F 305 1196 1 516 22 92.64 301 1100 84 F 306 1196 0 511 24 92.03 183 1196 123 F 183 1289 3 330 9 95.08 246 481 0 F 243 1196 63 417 18 92.59 172 610 53 F 173 1196 133 317 7 95.93 305 1196 1 F 300 1360 61 485 30 90.00 266 641 0 F 272 1196 34 454 21 92.11 263 1196 43 F 267 1198 2 422 27 89.73 293 483 49 F 297 1196 9 514 19 93.52 200 3 299 F 199 16 455 335 16 91.96 200 3 299 F 199 5 337 343 14 92.96 309 16 455 F 309 39 371 498 30 90.29 309 5 337 F 309 39 371 510 27 91.26 310 6 300 F 309 16 455 495 31 89.97 309 5 337 F 310 6 300 503 29 90.61 153 2 371 F 156 3 299 253 14 90.85 197 2 371 F 202 39 371 299 25 87.31 197 2 371 F 202 6 300 295 26 86.80 231 779 30 F 227 783 30 322 34 85.02 157 322 70 F 158 793 68 247 16 89.81 265 376 51 F 270 1277 65 507 7 97.36 386 376 0 F 401 1694 81 607 45 88.34 100 33 0 F 101 73 0 189 3 97.00 95 7 276 F 97 73 1 172 5 94.74 368 474 147 F 365 1327 71 681 13 96.44 439 543 16 F 436 1327 0 751 31 92.89 363 1297 87 F 365 1327 71 672 14 96.14 367 912 96 F 365 1327 71 680 13 96.44 338 761 1 F 337 1327 99 643 8 97.63 367 826 114 F 365 1327 71 676 14 96.16 368 798 40 F 365 1327 71 661 18 95.07 306 807 164 F 304 866 242 546 16 94.74 479 866 95 F 488 1212 73 759 52 89.14 440 654 1 F 432 866 142 668 51 88.19 349 1100 94 F 351 1365 24 648 13 96.28 359 695 121 F 363 938 64 686 9 97.49 349 1554 0 F 347 1555 52 632 16 95.39 314 1552 0 F 308 1555 108 534 22 92.86 319 1548 0 F 318 1555 101 605 8 97.48 256 310 69 F 255 1363 75 483 7 97.25 84 310 109 F 84 1363 154 148 5 94.05 455 543 0 F 466 826 15 829 23 94.95 310 826 49 F 311 902 0 541 20 93.55 346 826 13 F 344 1151 0 602 22 93.60 283 451 41 F 279 826 80 494 17 93.91 304 736 96 F 304 826 55 552 14 95.39 409 826 12 F 407 1049 0 664 38 90.66 359 826 0 F 356 846 150 583 33 90.73 291 380 0 F 293 826 66 520 16 94.50 323 826 76 F 324 988 50 531 29 91.02 257 826 102 F 261 1365 2 438 20 92.22 303 826 56 F 307 1360 0 482 32 89.44 404 902 15 F 407 1360 8 711 25 93.81 412 1151 40 F 414 1360 1 714 28 93.20 384 451 48 F 383 1360 32 679 22 94.26 411 736 97 F 414 1360 1 721 26 93.67 307 1049 42 F 311 1360 1 490 32 89.58 299 543 34 F 306 1360 1 453 38 87.29 410 846 204 F 414 1360 1 700 31 92.44 399 380 0 F 406 1360 9 705 25 93.73 276 988 63 F 278 1360 34 450 26 90.58 334 1360 47 F 337 1365 0 599 18 94.61 480 474 35 F 479 826 2 899 15 96.87 305 474 88 F 306 1360 1 487 31 89.84 467 826 14 F 463 912 0 854 19 95.90 211 454 5 F 212 826 31 335 22 89.57 145 826 98 F 145 1837 0 238 13 91.03 302 912 39 F 306 1360 1 480 32 89.40 188 454 28 F 191 1360 0 263 29 84.57 145 1360 46 F 144 1837 1 225 16 88.89 110 826 133 F 110 1722 43 184 9 91.82 154 1360 37 F 152 1722 1 222 21 86.18 338 713 79 F 340 761 1 650 7 97.93 110 497 332 F 110 1549 226 212 2 98.18 110 1544 250 F 110 1549 226 208 3 97.27 376 460 93 F 376 1936 2 728 6 98.40 445 34 170 F 432 1317 10 749 32 92.59 349 1546 15 F 348 1547 0 673 6 98.28 211 936 0 F 215 937 160 370 14 93.36 379 1784 7 F 381 1799 0 656 26 93.14 258 895 170 F 263 1405 10 449 18 93.02 610 3 0 F 607 39 72 1145 18 97.03 641 6 156 F 647 39 227 1216 18 97.19 328 720 0 F 330 1398 19 534 31 90.55 237 994 160 F 242 1190 41 423 14 94.09 380 78 86 F 375 80 149 635 30 92.00 332 977 26 F 332 1605 73 556 27 91.87 367 881 0 F 364 1248 100 699 8 97.80 337 674 12 F 339 1281 47 600 19 94.36 148 538 147 F 148 667 242 292 1 99.32 309 16 455 F 309 39 371 498 30 90.29 309 5 337 F 309 39 371 510 27 91.26 310 6 300 F 309 16 455 495 31 89.97 309 5 337 F 310 6 300 503 29 90.61 200 3 299 F 199 16 455 335 16 91.96 200 3 299 F 199 5 337 343 14 92.96 243 782 133 F 240 1279 0 391 23 90.42 243 1270 88 F 240 1279 0 395 22 90.83 354 1301 9 F 352 1500 137 650 14 96.02 351 819 155 F 354 1301 9 653 13 96.30 310 975 162 F 313 1301 9 575 12 96.13 300 1910 0 F 299 1926 25 543 14 95.32 337 497 105 F 336 1549 0 593 17 94.94 336 1544 24 F 336 1549 0 588 18 94.64 249 1549 0 F 249 1551 9 422 16 93.57 160 1546 202 F 160 1549 0 308 3 98.12 160 1547 186 F 160 1549 0 300 5 96.88 159 1549 0 F 159 1550 177 290 7 95.60 216 522 234 F 216 1134 194 424 2 99.07 157 735 388 F 157 1479 204 266 12 92.36 333 742 0 F 336 825 119 585 21 93.69 335 432 58 F 333 742 0 588 20 93.99 308 652 77 F 306 742 27 542 18 94.12 334 492 21 F 333 742 0 587 20 93.99 333 742 0 F 336 1469 114 573 24 92.79 333 742 0 F 334 1874 34 567 25 92.49 290 1147 13 F 293 1331 123 503 20 93.10 330 1939 0 F 330 1940 10 568 23 93.03 135 530 106 F 135 1431 219 166 26 80.74 135 1343 114 F 135 1431 219 162 27 80.00 137 544 45 F 135 1431 219 164 27 80.00 32 463 158 F 32 1304 145 60 1 96.88 223 247 130 F 226 880 2 361 22 90.13 171 483 61 F 172 1189 0 311 8 95.32 170 902 86 F 172 1189 0 314 7 95.88 170 1151 119 F 172 1189 0 314 7 95.88 172 1189 0 F 173 1230 173 313 8 95.35 170 451 99 F 172 1189 0 314 7 95.88 170 736 175 F 172 1189 0 314 7 95.88 170 1100 106 F 172 1189 0 302 10 94.12 173 1143 69 F 172 1189 0 301 11 93.60 171 1049 119 F 172 1189 0 311 8 95.32 453 474 87 F 442 1297 33 779 29 93.44 480 543 0 F 468 1297 7 824 31 93.38 426 912 57 F 419 1297 51 773 18 95.70 321 761 20 F 320 1297 132 629 3 99.06 414 826 67 F 407 1297 43 733 22 94.59 411 798 22 F 406 1297 69 729 22 94.58 234 483 53 F 229 1297 99 399 16 93.01 257 902 54 F 252 1297 76 429 20 92.06 305 1151 39 F 295 1297 33 456 36 87.80 286 1230 115 F 276 1297 52 446 29 89.49 246 451 78 F 241 1297 87 415 18 92.53 304 736 96 F 295 1297 33 459 35 88.14 237 1100 94 F 232 1297 96 397 18 92.24 293 1143 4 F 282 1297 46 403 42 85.11 402 1049 15 F 383 1297 16 553 58 84.86 171 474 167 F 172 1189 0 303 10 94.15 169 543 109 F 172 1189 0 301 10 94.08 171 912 115 F 172 1189 0 311 8 95.32 160 761 2 F 161 1189 11 285 9 94.38 170 826 134 F 172 1189 0 302 10 94.12 171 798 60 F 172 1189 0 291 13 92.40 172 1189 0 F 167 1297 106 291 12 92.81 168 658 232 F 172 1189 0 296 11 93.45 426 658 176 F 424 1297 51 774 19 95.52 128 713 110 F 129 1189 43 237 5 96.09 342 713 98 F 343 1297 132 665 5 98.54 129 1120 114 F 129 1189 43 242 4 96.90 444 1120 0 F 439 1297 36 735 37 91.57 170 846 281 F 172 1189 0 306 9 94.71 284 846 222 F 277 1297 51 445 29 89.53 172 1189 0 F 172 1365 36 296 12 93.02 252 1297 76 F 261 1365 2 413 25 90.08 121 849 95 F 121 1189 51 202 10 91.74 322 849 95 F 322 1297 153 596 12 96.27 172 1189 0 F 173 1456 65 265 20 88.37 169 1297 132 F 171 1456 94 300 10 94.08 260 664 16 F 270 1183 3 430 25 90.38 338 601 17 F 340 609 84 606 18 94.67 80 35 204 F 80 73 144 152 2 97.50 80 72 215 F 80 73 144 152 2 97.50 32 5 228 F 32 7 228 64 0 100.00 32 2 262 F 32 7 228 64 0 100.00 32 7 228 F 32 16 346 64 0 100.00 32 3 190 F 32 7 228 64 0 100.00 32 6 191 F 32 7 228 64 0 100.00 32 7 228 F 32 39 262 64 0 100.00 354 965 14 F 360 1034 0 646 17 95.20 393 536 87 F 388 1082 38 717 16 95.88 309 1649 13 F 309 1931 0 546 18 94.17 309 1708 8 F 305 1931 0 490 30 90.16 228 1132 161 F 230 1140 69 434 6 97.37 377 505 0 F 380 633 21 717 10 97.35 216 522 234 F 216 1134 194 424 2 99.07 329 1592 0 F 322 1595 8 583 17 94.72 445 34 170 F 432 1317 10 749 32 92.59 328 539 94 F 328 1080 0 584 18 94.51 85 33 0 F 84 264 534 161 2 97.62 100 7 259 F 99 264 519 155 11 88.89 328 539 94 F 328 1080 0 584 18 94.51 424 454 70 F 432 1837 0 772 21 95.05 83 988 223 F 83 1837 149 154 3 96.39 256 1722 8 F 256 1837 0 464 12 95.31 84 1456 181 F 85 1837 149 149 5 94.05 85 1196 139 F 85 1837 149 154 4 95.29 85 474 281 F 85 1837 149 154 4 95.29 85 543 221 F 85 1837 149 154 4 95.29 85 658 343 F 85 1837 149 154 4 95.29 85 713 181 F 85 1837 149 154 4 95.29 85 1297 216 F 85 1837 149 154 4 95.29 85 912 229 F 85 1837 149 154 4 95.29 85 1327 202 F 85 1837 149 154 4 95.29 85 761 105 F 85 1837 149 154 4 95.29 85 826 247 F 85 1837 149 154 4 95.29 85 483 175 F 85 1837 149 154 4 95.29 85 1365 151 F 85 1837 149 154 4 95.29 85 630 192 F 85 1837 149 154 4 95.29 85 380 179 F 85 1837 149 154 4 95.29 85 846 394 F 85 1837 149 150 5 94.12 85 902 199 F 85 1837 149 154 4 95.29 85 1151 232 F 85 1837 149 154 4 95.29 85 1230 289 F 85 1837 149 154 4 95.29 85 451 212 F 85 1837 149 154 4 95.29 85 736 288 F 85 1837 149 154 4 95.29 85 1100 219 F 85 1837 149 154 4 95.29 85 1143 185 F 85 1837 149 154 4 95.29 83 506 105 F 83 1837 149 150 4 95.18 83 1049 233 F 83 1837 149 150 4 95.18 83 1328 175 F 83 1837 149 146 5 93.98 84 1076 126 F 85 1837 149 145 6 92.86 84 1120 186 F 85 1837 149 149 5 94.05 85 481 80 F 85 1837 149 150 5 94.12 57 1189 115 F 57 1837 149 102 3 94.74 84 610 60 F 85 1837 149 137 8 90.48 84 641 101 F 84 1837 150 144 6 92.86 85 1289 20 F 85 1837 149 142 7 91.76 85 1360 195 F 85 1837 149 146 6 92.94 85 605 159 F 85 1837 149 150 5 94.12 84 579 107 F 85 1837 149 145 6 92.86 304 1068 0 F 303 1517 96 543 16 94.72 185 1198 2 F 178 1456 87 259 26 85.39 263 1196 43 F 267 1198 2 422 27 89.73 204 474 189 F 212 1198 2 312 26 87.25 203 543 130 F 212 1198 2 315 25 87.68 201 658 254 F 212 1198 2 305 27 86.57 202 713 91 F 212 1198 2 302 28 86.14 212 1198 2 F 201 1297 127 301 28 86.07 204 912 137 F 212 1198 2 316 25 87.75 199 1198 15 F 193 1327 121 296 24 87.56 207 761 10 F 214 1198 0 313 27 86.96 206 826 153 F 214 1198 0 316 26 87.38 202 798 84 F 209 1198 5 307 26 87.13 297 483 83 F 306 1198 2 515 22 92.59 326 1198 2 F 316 1365 59 542 25 92.09 316 630 100 F 326 1198 2 538 26 91.77 315 380 88 F 326 1198 2 545 24 92.38 315 846 303 F 326 1198 2 541 25 92.06 315 902 108 F 326 1198 2 549 23 92.70 315 1151 141 F 326 1198 2 549 23 92.70 326 1198 2 F 317 1230 196 551 23 92.74 313 451 121 F 324 1198 2 545 23 92.65 313 736 197 F 324 1198 2 545 23 92.65 315 1100 128 F 326 1198 2 537 26 91.75 322 1198 2 F 311 1360 104 513 30 90.35 315 605 68 F 323 1198 5 522 29 90.79 316 1143 93 F 326 1198 2 538 26 91.77 227 642 30 F 231 1198 62 390 17 92.51 169 849 91 F 174 1198 30 251 23 86.39 211 506 10 F 217 1198 2 300 32 84.83 207 1049 142 F 217 1198 2 316 27 86.96 217 1198 2 F 209 1328 82 294 33 84.21 207 988 132 F 217 1198 2 304 30 85.51 202 935 48 F 198 1198 16 252 37 81.31 137 1076 100 F 138 1198 76 211 16 88.32 201 1120 96 F 212 1198 2 301 28 86.07 250 579 80 F 252 1198 76 434 17 93.20 242 1198 84 F 239 1289 3 413 17 92.89 313 483 67 F 310 579 0 539 21 93.23 364 483 16 F 358 630 38 630 23 93.58 344 380 39 F 349 483 31 661 8 97.67 370 483 10 F 363 605 0 637 24 93.39 349 483 31 F 345 846 253 662 8 97.68 349 483 31 F 345 902 58 670 6 98.26 349 483 31 F 345 1151 91 670 6 98.26 349 483 31 F 348 1230 145 657 10 97.13 375 451 41 F 380 483 0 695 15 96.00 349 483 31 F 345 736 147 670 6 98.26 349 483 31 F 350 1143 39 619 20 94.27 380 483 0 F 375 1100 48 671 21 94.40 222 483 158 F 221 1289 3 415 7 96.83 284 481 0 F 277 483 103 509 13 95.31 212 483 168 F 210 610 53 394 7 96.67 349 483 31 F 349 1365 6 634 16 95.42 259 483 106 F 257 642 0 460 14 94.55 349 483 31 F 346 1360 53 631 16 95.38 293 483 49 F 297 1196 9 514 19 93.52 306 483 74 F 304 641 0 558 13 95.72 258 871 99 F 264 1710 140 426 24 90.70 300 1401 1 F 301 1710 106 465 34 88.67 420 61 134 F 424 65 137 752 22 94.76 381 61 134 F 380 64 137 701 15 96.05 164 61 150 F 165 65 194 309 5 96.95 164 61 150 F 165 64 194 309 5 96.95 164 61 150 F 165 61 191 309 5 96.95 223 313 78 F 220 1827 5 383 15 93.18 224 1782 39 F 224 1827 0 404 11 95.09 324 428 0 F 320 1441 29 564 20 93.75 317 428 7 F 312 1513 64 573 14 95.51 308 335 0 F 309 1059 206 613 1 99.68 258 895 170 F 263 1405 10 449 18 93.02 321 1941 0 F 323 1942 31 524 30 90.65 223 1649 20 F 222 1736 0 409 9 95.95 223 1708 15 F 222 1736 0 401 11 95.05 238 483 49 F 233 1120 64 387 21 90.99 258 902 53 F 255 1120 42 409 26 89.80 297 1120 0 F 305 1151 39 446 39 86.87 277 451 47 F 271 1120 26 416 33 87.82 304 736 96 F 297 1120 0 445 39 86.87 375 1049 41 F 368 1120 0 523 55 85.05 376 543 104 F 376 1120 68 696 14 96.28 339 761 0 F 336 1120 83 631 11 96.73 426 826 55 F 419 1120 0 709 34 91.89 444 658 158 F 444 1120 0 752 34 92.34 303 846 203 F 297 1120 0 440 40 86.53 395 1120 24 F 396 1327 40 659 33 91.65 291 380 0 F 288 1120 9 427 38 86.81 346 988 28 F 337 1120 0 467 54 83.98 444 1120 0 F 439 1297 36 735 37 91.57 336 1546 28 F 338 1550 1 630 11 96.73 336 1547 12 F 338 1550 1 622 13 96.13 336 1546 28 F 338 1550 1 630 11 96.73 336 1547 12 F 338 1550 1 622 13 96.13 360 369 21 F 360 1409 0 640 20 94.44 318 574 96 F 320 1369 78 602 9 97.17 291 358 77 F 292 1678 0 523 15 94.85 128 358 41 F 129 733 174 165 23 82.03 243 782 133 F 240 1279 0 391 23 90.42 243 1270 88 F 240 1279 0 395 22 90.83 392 474 1 F 399 1230 2 615 44 88.78 214 454 2 F 218 1230 67 320 28 86.92 77 1868 158 F 77 1897 157 122 8 89.61 284 386 212 F 293 1201 56 501 19 93.31 280 871 111 F 279 1401 50 475 21 92.47 300 1401 1 F 301 1710 106 465 34 88.67 329 1653 0 F 334 1828 74 587 19 94.22 352 1828 6 F 353 1947 0 625 20 94.32 274 542 0 F 291 1828 150 413 38 86.13 393 1268 103 F 405 1747 0 686 28 92.88 179 382 45 F 177 918 49 260 24 86.44 155 826 31 F 165 1892 242 216 26 83.23 467 826 14 F 463 912 0 854 19 95.90 98 826 32 F 98 1664 240 132 16 83.67 416 1620 0 F 415 1796 6 743 22 94.70 354 965 14 F 360 1034 0 646 17 95.20 373 567 23 F 368 965 0 621 30 91.85 369 536 109 F 368 965 0 685 13 96.47 368 965 0 F 366 1082 58 662 18 95.08 313 560 59 F 311 1069 28 572 13 95.82 384 355 97 F 380 589 0 712 13 96.58 371 499 1 F 368 589 12 679 15 95.92 201 238 0 F 202 274 0 399 1 99.50 390 884 31 F 392 890 43 726 14 96.41 335 546 114 F 332 884 41 639 7 97.89 352 1828 6 F 353 1947 0 625 20 94.32 404 549 32 F 412 661 104 712 26 93.56 453 460 27 F 452 1351 0 793 28 93.81 374 1351 67 F 376 1936 2 678 18 95.19 235 8 263 F 249 70 266 324 40 82.98 380 78 86 F 375 80 149 635 30 92.00 305 1066 1 F 311 1600 69 444 43 85.90 402 1210 84 F 400 1516 32 730 18 95.50 313 560 59 F 311 1069 28 572 13 95.82 87 871 362 F 87 1401 288 150 6 93.10 313 560 59 F 311 1069 28 572 13 95.82 304 1068 0 F 303 1517 96 543 16 94.72 336 1546 28 F 338 1550 1 630 11 96.73 336 1547 12 F 338 1550 1 622 13 96.13 392 671 7 F 402 1334 0 666 32 91.84 252 766 26 F 252 994 59 408 24 90.48 296 960 29 F 303 970 135 543 14 95.27 299 1871 0 F 296 1892 0 515 20 93.24 293 1664 0 F 296 1871 3 469 30 89.76 360 1664 0 F 362 1892 3 622 25 93.06 185 522 41 F 186 1134 0 275 24 87.03 382 1121 56 F 384 1512 11 674 23 93.98 397 221 0 F 397 266 0 786 2 99.50 418 406 24 F 415 542 15 733 25 93.98 348 406 94 F 355 1056 58 615 22 93.68 81 355 400 F 78 1257 57 103 14 82.05 81 499 291 F 78 1257 57 103 14 82.05 81 589 299 F 78 1257 57 103 14 82.05 350 412 163 F 348 1525 88 646 13 96.26 343 568 69 F 345 1793 63 652 9 97.38 323 579 7 F 324 641 0 535 28 91.33 325 630 91 F 324 641 0 569 20 93.83 324 380 79 F 324 641 0 600 12 96.30 326 605 57 F 324 641 0 574 19 94.14 324 641 0 F 324 846 294 596 13 95.99 324 641 0 F 324 902 99 604 11 96.60 324 641 0 F 324 1151 132 604 11 96.60 324 641 0 F 327 1230 186 599 13 95.99 322 451 112 F 322 641 0 600 11 96.58 322 641 0 F 322 736 188 600 11 96.58 324 641 0 F 326 1143 83 582 17 94.75 324 641 0 F 324 1100 119 584 16 95.06 239 641 83 F 239 1289 3 422 14 94.14 289 481 15 F 282 641 42 503 17 93.97 306 483 74 F 304 641 0 558 13 95.72 230 610 53 F 231 641 93 413 12 94.78 324 641 0 F 325 1365 50 581 17 94.75 256 641 33 F 257 642 0 441 18 92.97 320 641 0 F 320 1360 95 556 21 93.44 339 652 71 F 339 825 141 638 10 97.05 338 432 80 F 339 652 71 645 8 97.63 333 492 43 F 335 652 71 636 8 97.60 318 652 71 F 315 1469 139 593 10 96.83 244 579 98 F 244 610 51 456 8 96.72 242 610 53 F 243 630 185 461 6 97.52 231 380 172 F 230 610 53 437 6 97.39 231 605 152 F 230 610 53 429 8 96.52 230 610 53 F 231 846 387 433 7 96.96 230 610 53 F 231 902 192 437 6 97.39 230 610 53 F 231 1151 225 437 6 97.39 230 610 53 F 231 1230 282 437 6 97.39 229 451 205 F 228 610 53 433 6 97.37 228 610 53 F 229 736 281 433 6 97.37 291 358 77 F 292 1678 0 523 15 94.85 360 1664 0 F 362 1892 3 622 25 93.06 349 1554 0 F 347 1555 52 632 16 95.39 319 1548 0 F 318 1555 101 605 8 97.48 353 985 0 F 353 1426 64 654 13 96.32 364 567 38 F 366 1034 0 634 24 93.41 356 536 124 F 362 1034 0 650 17 95.22 362 1034 0 F 355 1082 71 641 19 94.65 373 567 23 F 368 965 0 621 30 91.85 369 536 109 F 368 965 0 685 13 96.47 368 965 0 F 366 1082 58 662 18 95.08 348 579 0 F 352 1143 75 608 23 93.39 425 630 9 F 426 1143 1 683 41 90.35 401 380 2 F 407 1143 2 692 29 92.77 383 605 0 F 387 1143 22 650 30 92.17 396 846 222 F 400 1143 9 692 26 93.43 378 902 45 F 383 1143 26 677 21 94.44 409 1143 0 F 409 1151 47 706 28 93.15 407 1143 2 F 407 1230 106 718 24 94.10 387 451 47 F 389 1143 18 688 22 94.32 406 736 104 F 407 1143 0 697 29 92.86 399 1100 44 F 399 1143 10 690 27 93.23 239 1143 168 F 239 1289 3 438 10 95.82 304 481 0 F 296 1143 113 536 16 94.59 242 610 53 F 243 1143 178 449 9 96.28 392 1143 35 F 391 1365 2 691 23 94.12 257 642 0 F 258 1143 116 455 15 94.16 405 1143 0 F 405 1360 10 638 43 89.38 304 1143 47 F 306 1196 0 510 25 91.78 324 641 0 F 326 1143 83 582 17 94.75 237 994 160 F 242 1190 41 423 14 94.09 364 567 38 F 366 1034 0 634 24 93.41 356 536 124 F 362 1034 0 650 17 95.22 362 1034 0 F 355 1082 71 641 19 94.65 255 1382 47 F 266 1933 214 393 32 87.45 291 678 95 F 292 1204 14 531 13 95.53 25 31 11 F 25 125 27 46 1 96.00 21 31 11 F 21 632 169 42 0 100.00 260 497 95 F 258 1551 0 494 6 97.67 258 1544 15 F 258 1551 0 496 5 98.06 171 1546 193 F 171 1551 0 338 1 99.42 268 497 0 F 264 1547 84 460 18 93.18 186 1544 0 F 186 1547 162 364 2 98.92 349 1546 15 F 348 1547 0 673 6 98.28 171 1547 177 F 171 1551 0 334 2 98.83 249 1549 0 F 249 1551 9 422 16 93.57 160 1547 186 F 160 1549 0 300 5 96.88 185 522 41 F 186 1134 0 275 24 87.03 409 480 46 F 398 926 0 723 21 94.72 328 539 94 F 328 1080 0 584 18 94.51 211 936 0 F 215 937 160 370 14 93.36 274 1039 0 F 274 1435 147 524 6 97.81 287 1170 0 F 283 1347 84 466 26 90.81 309 1681 0 F 308 1808 0 541 19 93.83 350 412 163 F 348 1525 88 646 13 96.26 330 579 0 F 333 605 50 559 26 92.12 274 605 109 F 274 630 142 532 4 98.54 381 380 22 F 383 605 0 688 19 95.01 383 605 0 F 382 846 236 693 18 95.29 383 605 0 F 384 902 39 695 18 95.30 383 605 0 F 383 1151 73 702 16 95.82 383 605 0 F 385 1230 128 688 20 94.78 383 451 51 F 381 605 0 692 18 95.28 381 605 0 F 380 736 130 697 16 95.79 383 605 0 F 386 1100 57 649 29 92.43 239 605 142 F 239 1289 3 438 10 95.82 304 481 0 F 298 605 85 538 16 94.63 231 605 152 F 230 610 53 429 8 96.52 370 605 13 F 373 1365 2 639 26 92.97 239 605 109 F 239 642 18 430 12 94.98 379 605 0 F 381 1360 34 632 32 91.56 290 605 35 F 295 1196 11 485 25 91.38 326 605 57 F 324 641 0 574 19 94.14 315 605 68 F 323 1198 5 522 29 90.79 370 483 10 F 363 605 0 637 24 93.39 336 1546 28 F 338 1550 1 630 11 96.73 336 1547 12 F 338 1550 1 622 13 96.13 354 965 14 F 360 1034 0 646 17 95.20 474 1788 0 F 474 1850 9 836 28 94.09 328 720 0 F 330 1398 19 534 31 90.55 319 1548 0 F 318 1555 101 605 8 97.48 314 1552 0 F 308 1555 108 534 22 92.86 349 1554 0 F 347 1555 52 632 16 95.39 356 989 50 F 347 1350 1 591 28 91.93 323 1231 2 F 322 1318 24 617 7 97.83 96 579 274 F 96 1196 309 180 3 96.88 74 630 360 F 74 1196 309 136 3 95.95 68 610 227 F 68 1196 309 120 4 94.12 71 1543 267 F 71 1543 350 126 4 94.37 66 1132 92 F 66 1140 0 116 4 93.94 391 825 86 F 390 1874 2 705 19 95.13 392 432 23 F 392 1874 0 716 17 95.66 336 652 71 F 336 1874 56 600 18 94.64 376 492 0 F 377 1874 14 697 14 96.28 377 1469 77 F 372 1874 0 661 22 94.09 364 567 38 F 366 1034 0 634 24 93.41 356 536 124 F 362 1034 0 650 17 95.22 362 1034 0 F 355 1082 71 641 19 94.65 373 567 23 F 368 965 0 621 30 91.85 369 536 109 F 368 965 0 685 13 96.47 368 965 0 F 366 1082 58 662 18 95.08 96 579 274 F 96 1196 309 180 3 96.88 74 630 360 F 74 1196 309 136 3 95.95 56 380 347 F 56 1196 309 100 3 94.64 56 605 327 F 56 1196 309 100 3 94.64 56 846 562 F 56 1196 309 100 3 94.64 56 902 367 F 56 1196 309 100 3 94.64 56 1151 400 F 56 1196 309 100 3 94.64 56 1196 309 F 56 1230 457 100 3 94.64 54 451 380 F 54 1196 309 96 3 94.44 54 736 456 F 54 1196 309 96 3 94.44 74 1143 353 F 74 1196 309 132 4 94.59 56 1100 387 F 56 1196 309 92 5 91.07 54 1196 309 F 54 1289 188 88 5 90.74 56 481 248 F 56 1196 309 100 3 94.64 36 483 344 F 36 1196 309 68 1 97.22 68 610 227 F 68 1196 309 120 4 94.12 56 641 268 F 56 1196 309 92 5 91.07 128 846 78 F 139 1649 164 203 16 87.50 127 846 97 F 135 1931 174 170 23 81.89 291 678 95 F 292 1204 14 531 13 95.53 403 380 0 F 407 902 16 774 9 97.77 403 380 0 F 407 1151 49 778 8 98.01 401 380 0 F 404 736 106 777 7 98.25 400 380 3 F 403 846 215 763 10 97.50 291 380 0 F 293 826 66 520 16 94.50 286 380 10 F 289 1328 2 447 32 88.81 290 902 26 F 289 1328 2 451 32 88.93 290 1151 59 F 289 1328 2 455 31 89.27 290 736 115 F 291 1328 0 457 31 89.31 289 846 222 F 291 1328 0 448 33 88.58 345 826 76 F 347 1328 2 528 41 88.12 194 216 0 F 194 277 0 380 2 98.97 339 440 2 F 335 765 95 606 17 94.93 87 871 362 F 87 1401 288 150 6 93.10 89 871 346 F 88 871 349 77 5 94.32 377 505 0 F 380 633 21 717 10 97.35 44 1133 186 F 44 1133 224 88 0 100.00 323 579 7 F 324 641 0 535 28 91.33 325 630 91 F 324 641 0 569 20 93.83 230 610 53 F 231 641 93 413 12 94.78 324 380 79 F 324 641 0 600 12 96.30 326 605 57 F 324 641 0 574 19 94.14 324 641 0 F 324 846 294 596 13 95.99 324 641 0 F 324 902 99 604 11 96.60 324 641 0 F 324 1151 132 604 11 96.60 324 641 0 F 327 1230 186 599 13 95.99 322 451 112 F 322 641 0 600 11 96.58 322 641 0 F 322 736 188 600 11 96.58 130 1260 138 F 129 1615 1 235 6 95.35 137 454 79 F 140 483 31 217 15 89.05 182 454 34 F 182 902 13 296 17 90.66 213 454 3 F 212 1151 16 345 20 90.57 214 454 2 F 218 1230 67 320 28 86.92 167 451 41 F 164 454 52 259 18 89.02 212 454 4 F 211 736 73 343 20 90.52 115 454 101 F 114 1100 101 181 12 89.47 181 454 35 F 181 1143 0 238 31 82.87 115 454 101 F 114 1049 115 193 9 92.11 211 454 5 F 213 474 64 360 16 92.42 115 454 101 F 113 543 104 192 9 92.04 196 454 20 F 193 912 32 321 17 91.19 100 454 116 F 101 761 0 169 8 92.00 211 454 5 F 212 826 31 335 22 89.57 171 454 45 F 169 798 0 252 22 86.98 208 454 7 F 201 658 138 325 21 89.55 185 454 32 F 173 713 4 206 38 78.03 187 454 29 F 181 1120 1 236 33 81.77 212 454 4 F 210 846 180 322 25 88.10 115 454 101 F 116 1365 31 179 13 88.70 56 454 160 F 56 849 99 92 5 91.07 129 454 87 F 127 1327 71 176 20 84.25 170 454 46 F 171 1328 0 229 28 83.53 175 380 0 F 179 454 37 278 19 89.14 188 454 28 F 191 1360 0 263 29 84.57 255 1382 47 F 266 1933 214 393 32 87.45 328 720 0 F 330 1398 19 534 31 90.55 308 506 0 F 303 988 123 547 16 94.72 377 988 49 F 376 1049 60 693 15 96.01 377 988 49 F 377 1328 1 622 33 91.25 238 988 101 F 246 1196 11 368 29 87.82 376 474 57 F 374 988 0 586 41 89.04 322 543 51 F 324 988 50 514 33 89.75 318 658 177 F 324 988 50 534 27 91.51 304 713 29 F 312 988 62 436 45 85.20 304 988 70 F 299 1297 69 467 34 88.63 323 912 58 F 324 988 50 531 29 91.02 283 988 91 F 283 1327 71 446 30 89.40 255 761 2 F 253 988 121 428 20 92.09 323 826 76 F 324 988 50 531 29 91.02 292 798 33 F 289 988 84 473 27 90.66 292 483 0 F 285 988 54 469 27 90.53 264 988 75 F 268 1365 0 436 24 90.91 289 630 20 F 290 988 49 411 42 85.47 286 380 10 F 289 988 50 479 24 91.61 288 846 223 F 290 988 49 490 22 92.36 290 902 26 F 289 988 50 483 24 91.70 289 988 50 F 290 1151 59 491 22 92.39 290 988 49 F 292 1230 114 478 26 91.03 288 451 41 F 285 988 54 485 22 92.28 337 736 68 F 339 988 0 540 34 89.91 332 988 7 F 333 1100 3 489 44 86.75 295 988 44 F 297 1143 5 428 41 86.10 185 642 0 F 185 988 154 282 22 88.11 156 849 95 F 156 988 159 260 13 91.67 174 935 88 F 170 988 177 260 21 87.65 243 988 131 F 246 1076 31 357 33 86.42 346 988 28 F 337 1120 0 467 54 83.98 223 579 0 F 223 988 116 322 31 86.10 239 988 67 F 241 1456 22 344 34 85.77 85 454 220 F 84 1456 181 157 3 96.43 85 454 220 F 85 1196 139 162 2 97.65 85 454 220 F 85 474 281 162 2 97.65 85 454 220 F 85 543 221 162 2 97.65 85 454 220 F 85 658 343 162 2 97.65 85 454 220 F 85 713 181 162 2 97.65 85 454 220 F 85 1297 216 162 2 97.65 85 454 220 F 85 912 229 162 2 97.65 85 454 220 F 85 1327 202 162 2 97.65 85 454 220 F 85 761 105 162 2 97.65 85 454 220 F 85 826 247 162 2 97.65 85 454 220 F 86 798 173 159 3 96.47 85 454 220 F 85 483 175 162 2 97.65 85 454 220 F 85 1365 151 162 2 97.65 85 454 220 F 85 630 192 162 2 97.65 85 380 179 F 85 454 220 162 2 97.65 85 454 220 F 85 846 394 158 3 96.47 85 454 220 F 85 902 199 162 2 97.65 85 454 220 F 85 1151 232 162 2 97.65 85 454 220 F 85 1230 289 162 2 97.65 85 451 212 F 85 454 220 162 2 97.65 85 454 220 F 85 736 288 162 2 97.65 85 454 220 F 85 1100 219 162 2 97.65 85 454 220 F 85 1143 185 162 2 97.65 85 454 220 F 85 642 68 158 3 96.47 85 454 220 F 85 849 159 146 6 92.94 83 454 220 F 83 506 105 158 2 97.59 83 454 220 F 83 1049 233 158 2 97.59 83 454 220 F 83 1328 175 154 3 96.39 85 454 220 F 86 935 137 147 6 92.94 85 454 220 F 84 1076 126 153 4 95.24 85 454 220 F 84 1120 186 157 3 96.43 85 454 220 F 84 579 107 153 4 95.24 284 580 73 F 284 762 131 560 2 99.30 189 413 38 F 189 1250 74 286 23 87.83 339 1802 3 F 340 1877 0 667 3 99.12 200 3 299 F 199 5 337 343 14 92.96 309 5 337 F 309 39 371 510 27 91.26 309 5 337 F 310 6 300 503 29 90.61 200 3 299 F 199 16 455 335 16 91.96 153 2 371 F 156 3 299 253 14 90.85 309 16 455 F 309 39 371 498 30 90.29 197 2 371 F 202 39 371 299 25 87.31 310 6 300 F 309 16 455 495 31 89.97 197 2 371 F 202 6 300 295 26 86.80 362 662 80 F 367 1193 8 569 40 88.95 189 413 38 F 189 1250 74 286 23 87.83 165 1035 43 F 169 1768 256 226 27 83.64 208 1138 64 F 200 1215 247 280 32 84.00 174 1564 0 F 174 1847 123 312 9 94.83 368 965 0 F 366 1082 58 662 18 95.08 245 902 66 F 243 1327 71 408 20 91.77 245 1151 99 F 243 1327 71 408 20 91.77 247 451 77 F 244 1327 70 407 21 91.39 245 736 155 F 243 1327 71 408 20 91.77 318 1049 99 F 314 1327 71 488 36 88.54 439 543 16 F 436 1327 0 751 31 92.89 338 761 1 F 337 1327 99 643 8 97.63 367 826 114 F 365 1327 71 676 14 96.16 245 846 261 F 243 1327 71 404 21 91.36 285 380 6 F 284 1327 30 429 35 87.68 283 988 91 F 283 1327 71 446 30 89.40 363 1297 87 F 365 1327 71 672 14 96.14 152 506 168 F 153 1189 178 273 8 94.74 152 1049 296 F 153 1189 178 273 8 94.74 153 1189 178 F 152 1328 238 269 9 94.08 139 988 286 F 140 1189 178 243 9 93.53 351 474 189 F 360 935 37 607 26 92.59 350 543 130 F 360 935 37 606 26 92.57 348 658 254 F 360 935 37 596 28 91.95 327 713 113 F 335 935 62 574 22 93.27 360 935 37 F 348 1297 127 600 27 92.24 346 912 137 F 355 935 37 597 26 92.49 324 935 48 F 314 1327 122 534 26 91.72 336 761 5 F 346 935 28 562 30 91.07 333 826 148 F 344 935 28 561 29 91.29 349 935 48 F 340 1076 44 569 30 91.18 350 798 83 F 359 935 38 589 30 91.43 340 935 57 F 330 1120 114 566 26 92.12 435 474 105 F 433 798 0 792 19 95.61 286 798 0 F 287 902 24 461 28 90.21 286 798 0 F 287 1151 57 469 26 90.91 254 451 70 F 253 798 33 435 18 92.89 286 736 114 F 286 798 0 472 25 91.26 357 798 0 F 359 1049 58 544 43 87.96 429 543 51 F 430 798 3 771 22 94.87 408 798 0 F 407 826 74 735 20 95.09 285 798 1 F 284 846 222 461 27 90.49 283 380 8 F 286 798 0 453 29 89.75 292 798 33 F 289 988 84 473 27 90.66 259 798 27 F 263 1365 0 422 25 90.35 268 798 18 F 268 1360 39 420 29 89.18 428 798 0 F 428 912 55 776 20 95.33 171 454 45 F 169 798 0 252 22 86.98 142 798 27 F 143 1837 2 221 16 88.73 110 798 59 F 110 1722 43 176 11 90.00 424 892 0 F 420 1300 64 748 24 94.29 381 309 0 F 374 804 82 691 16 95.72 369 724 42 F 407 1826 28 520 62 83.20 68 643 127 F 69 770 105 101 9 86.76 337 497 105 F 336 1549 0 593 17 94.94 336 1544 24 F 336 1549 0 588 18 94.64 249 1549 0 F 249 1551 9 422 16 93.57 160 1546 202 F 160 1549 0 308 3 98.12 160 1547 186 F 160 1549 0 300 5 96.88 309 1649 13 F 309 1931 0 546 18 94.17 309 1708 8 F 305 1931 0 490 30 90.16 248 1868 37 F 248 1948 21 400 24 90.32 299 1871 0 F 296 1892 0 515 20 93.24 293 1664 0 F 296 1871 3 469 30 89.76 369 1475 72 F 376 1594 0 577 42 88.62 329 1592 0 F 322 1595 8 583 17 94.72 115 809 79 F 115 1427 155 154 19 83.48 415 452 0 F 413 882 3 724 26 93.70 330 588 0 F 330 775 103 580 20 93.94 375 37 0 F 383 1823 0 670 22 94.13 144 16 8 F 141 47 297 185 25 82.27 144 1 302 F 141 47 297 185 25 82.27 143 4 313 F 144 16 8 203 21 85.31 144 1 302 F 143 4 313 203 21 85.31 255 597 0 F 253 1372 137 440 17 93.28 258 871 99 F 264 1710 140 426 24 90.70 343 1302 67 F 343 1433 4 606 20 94.17 309 5 337 F 310 6 300 503 29 90.61 309 5 337 F 309 39 371 510 27 91.26 310 6 300 F 309 16 455 495 31 89.97 309 16 455 F 309 39 371 498 30 90.29 112 3 510 F 110 5 546 158 16 85.45 112 3 510 F 110 16 664 154 17 84.55 404 1268 97 F 411 1627 3 723 23 94.31 403 1627 8 F 408 1747 0 735 19 95.29 270 313 34 F 265 1782 2 451 21 92.08 223 313 78 F 220 1827 5 383 15 93.18 224 1782 39 F 224 1827 0 404 11 95.09 22 215 205 F 22 215 208 44 0 100.00 449 1745 9 F 440 1882 0 773 27 93.86 433 1745 0 F 427 1764 1 748 28 93.44 211 936 0 F 215 937 160 370 14 93.36 366 197 112 F 359 385 0 641 21 94.15 265 454 62 F 264 1722 0 473 14 94.70 256 1722 8 F 256 1837 0 464 12 95.31 247 885 66 F 249 1051 243 456 10 95.95 245 885 68 F 247 1021 3 440 13 94.69 110 497 332 F 110 1549 226 212 2 98.18 110 1544 250 F 110 1549 226 208 3 97.27 23 1549 226 F 23 1551 235 46 0 100.00 51 36 324 F 52 42 193 87 4 92.16 40 31 243 F 40 42 202 80 0 100.00 40 31 243 F 40 36 332 80 0 100.00 20 7 258 F 20 31 243 40 0 100.00 20 7 258 F 20 42 202 40 0 100.00 335 546 114 F 332 884 41 639 7 97.89 446 1620 20 F 439 1937 0 721 41 90.66 349 1546 15 F 348 1547 0 673 6 98.28 80 35 204 F 80 73 144 152 2 97.50 80 72 215 F 80 73 144 152 2 97.50 155 13 260 F 152 35 147 223 21 86.18 114 13 301 F 111 72 199 157 17 84.68 82 13 317 F 80 73 144 122 10 87.50 324 912 17 F 329 1230 72 537 29 91.05 510 736 0 F 522 846 94 872 40 92.16 256 483 31 F 249 713 44 389 29 88.35 256 713 37 F 261 902 50 401 29 88.67 291 713 2 F 302 1151 42 429 41 85.91 284 713 9 F 295 1230 106 423 39 86.27 276 451 48 F 266 713 27 410 33 87.59 269 713 24 F 276 736 124 409 34 87.36 183 713 110 F 184 1143 113 327 10 94.54 362 713 2 F 373 1049 44 503 58 83.98 448 543 32 F 440 713 0 772 29 93.41 435 713 0 F 446 912 37 749 33 92.41 338 713 79 F 340 761 1 650 7 97.93 405 713 10 F 413 826 68 690 32 92.10 423 713 17 F 432 798 1 719 34 91.96 441 658 161 F 438 713 2 743 34 92.24 416 713 24 F 420 1120 24 744 23 94.47 282 713 11 F 291 846 215 409 41 85.46 414 713 1 F 420 1327 16 686 37 91.06 347 713 17 F 359 1328 0 462 61 82.42 289 380 2 F 283 713 10 416 39 86.22 407 630 9 F 408 902 15 695 30 92.63 415 630 1 F 418 1151 38 705 32 92.29 407 630 9 F 407 1230 106 694 30 92.63 348 451 86 F 349 630 65 649 12 96.55 412 630 2 F 414 736 96 698 32 92.23 390 630 26 F 393 1100 50 659 30 92.31 364 483 16 F 358 630 38 630 23 93.58 425 630 9 F 426 1143 1 683 41 90.35 308 630 1 F 309 1049 40 445 43 86.04 171 630 78 F 172 1189 0 283 15 91.23 274 605 109 F 274 630 142 532 4 98.54 325 630 91 F 324 641 0 569 20 93.83 307 474 86 F 303 630 1 446 41 86.47 301 543 32 F 303 630 1 444 40 86.71 193 630 111 F 192 1297 136 333 13 93.23 303 630 1 F 304 912 37 451 39 87.13 215 630 89 F 215 761 2 362 17 92.09 304 630 0 F 306 826 53 442 42 86.18 284 630 20 F 283 798 3 399 42 85.16 303 630 1 F 298 658 157 433 42 85.91 227 630 77 F 224 713 69 359 23 89.73 227 630 77 F 224 1120 73 359 23 89.73 415 630 1 F 416 846 202 695 34 91.81 370 630 64 F 372 1365 21 658 21 94.32 166 630 128 F 165 849 95 271 15 90.91 633 2 0 F 652 16 84 1165 30 95.26 192 1 378 F 187 2 0 343 9 95.19 68 2 0 F 68 39 0 132 1 98.53 68 2 0 F 66 47 372 94 10 84.85 68 2 0 F 68 4 388 104 8 88.24 267 1851 45 F 267 1879 0 466 17 93.63 43 1225 317 F 44 1225 347 75 3 93.02 231 1859 0 F 231 1936 147 442 5 97.84 231 460 238 F 231 1859 0 450 3 98.70 231 1351 210 F 231 1859 0 450 3 98.70 352 422 168 F 367 1126 0 611 27 92.33 242 4 422 F 238 5 0 384 24 89.92 215 4 422 F 213 7 0 360 17 92.02 256 310 69 F 255 1363 75 483 7 97.25 432 701 5 F 422 715 7 690 41 90.28 359 11 153 F 356 29 155 639 19 94.66 322 849 95 F 331 935 66 537 29 90.99 336 761 5 F 346 935 28 562 30 91.07 333 826 148 F 344 935 28 561 29 91.29 350 867 233 F 355 1602 0 633 18 94.86 365 950 12 F 366 1041 0 639 23 93.70 390 1449 38 F 392 1451 4 670 28 92.82 445 1362 1 F 425 1500 52 686 46 89.18 393 819 101 F 413 1362 33 674 33 91.60 396 975 76 F 417 1362 0 645 42 89.39 296 404 337 F 299 1362 147 543 13 95.61 297 1301 54 F 299 1362 147 548 12 95.96 415 223 2 F 414 271 2 793 9 97.83 376 558 0 F 368 1254 134 668 19 94.84 278 1288 43 F 275 1374 150 477 19 93.09 312 1125 50 F 312 1507 110 460 37 88.14 344 322 70 F 346 793 68 514 42 87.79 157 735 388 F 157 1479 204 266 12 92.36 200 3 299 F 199 5 337 343 14 92.96 200 3 299 F 199 16 455 335 16 91.96 309 5 337 F 309 39 371 510 27 91.26 309 16 455 F 309 39 371 498 30 90.29 309 5 337 F 310 6 300 503 29 90.61 310 6 300 F 309 16 455 495 31 89.97 290 1147 13 F 293 1331 123 503 20 93.10 404 1764 10 F 403 1882 0 755 13 96.77 255 1382 47 F 266 1933 214 393 32 87.45 327 825 146 F 320 862 53 587 15 95.31 386 432 25 F 373 862 0 647 28 92.49 332 652 71 F 323 862 50 575 20 93.81 373 492 0 F 361 862 12 638 24 93.35 337 862 22 F 349 1469 105 590 24 92.88 307 742 26 F 302 862 53 517 23 92.38 372 862 0 F 385 1874 2 613 36 90.32 258 695 127 F 257 1324 95 331 46 82.10 237 938 95 F 232 1324 120 301 42 81.90 317 1381 25 F 332 1661 121 421 56 82.33 396 584 79 F 407 1661 35 627 43 89.14 352 474 188 F 353 1076 31 633 18 94.89 351 543 129 F 353 1076 31 636 17 95.16 349 658 253 F 353 1076 31 626 19 94.56 350 713 90 F 353 1076 31 631 18 94.86 344 1076 40 F 342 1297 133 622 16 95.32 347 912 136 F 348 1076 31 631 16 95.39 328 1076 31 F 326 1327 110 578 19 94.17 329 761 12 F 330 1076 31 599 15 95.44 326 826 155 F 328 1076 31 590 16 95.09 349 798 84 F 349 1076 35 618 20 94.27 453 474 87 F 444 1120 0 765 33 92.57 376 543 104 F 376 1120 68 696 14 96.28 444 658 158 F 444 1120 0 752 34 92.34 416 713 24 F 420 1120 24 744 23 94.47 444 1120 0 F 439 1297 36 735 37 91.57 445 912 38 F 439 1120 0 760 31 92.94 395 1120 24 F 396 1327 40 659 33 91.65 339 761 0 F 336 1120 83 631 11 96.73 426 826 55 F 419 1120 0 709 34 91.89 432 798 1 F 428 1120 16 716 36 91.59 351 474 189 F 360 935 37 607 26 92.59 350 543 130 F 360 935 37 606 26 92.57 348 658 254 F 360 935 37 596 28 91.95 327 713 113 F 335 935 62 574 22 93.27 360 935 37 F 348 1297 127 600 27 92.24 346 912 137 F 355 935 37 597 26 92.49 324 935 48 F 314 1327 122 534 26 91.72 336 761 5 F 346 935 28 562 30 91.07 333 826 148 F 344 935 28 561 29 91.29 350 798 83 F 359 935 38 589 30 91.43 348 579 0 F 350 630 84 598 25 92.82 331 380 72 F 330 579 0 581 20 93.94 330 579 0 F 331 846 287 577 21 93.64 330 579 0 F 331 902 92 585 19 94.24 330 579 0 F 331 1151 125 585 19 94.24 330 579 0 F 334 1230 179 588 19 94.24 329 451 105 F 328 579 0 581 19 94.21 328 579 0 F 329 736 181 581 19 94.21 330 579 0 F 331 1100 112 581 20 93.94 239 630 175 F 239 1289 3 446 8 96.65 239 380 162 F 239 1289 3 446 8 96.65 239 846 377 F 239 1289 3 442 9 96.23 239 902 182 F 239 1289 3 446 8 96.65 239 1151 215 F 239 1289 3 446 8 96.65 239 1230 272 F 239 1289 3 446 8 96.65 239 451 195 F 239 1289 3 446 8 96.65 239 736 271 F 239 1289 3 446 8 96.65 239 1100 202 F 239 1289 3 442 9 96.23 304 481 0 F 296 579 34 520 20 93.24 243 481 59 F 241 1289 1 436 12 95.02 347 579 1 F 350 1365 43 605 23 93.37 239 1289 3 F 239 1365 134 438 10 95.82 326 579 0 F 327 1360 88 549 26 92.02 237 1289 3 F 237 1360 178 434 10 95.78 323 579 7 F 324 641 0 535 28 91.33 239 641 83 F 239 1289 3 422 14 94.14 250 579 80 F 252 1198 76 434 17 93.20 242 1198 84 F 239 1289 3 413 17 92.89 313 483 67 F 310 579 0 539 21 93.23 222 483 158 F 221 1289 3 415 7 96.83 321 1941 0 F 323 1942 31 524 30 90.65 475 404 165 F 476 1500 8 779 43 90.95 425 404 215 F 423 819 78 748 25 94.09 389 404 215 F 392 975 80 717 16 95.89 415 630 1 F 416 846 202 695 34 91.81 400 380 3 F 403 846 215 763 10 97.50 419 846 199 F 422 902 1 777 16 96.18 454 846 164 F 456 1151 0 842 17 96.26 493 846 125 F 503 1230 10 832 41 91.68 393 451 41 F 389 846 227 754 7 98.20 510 736 0 F 522 846 94 872 40 92.16 395 846 223 F 399 1100 44 714 20 94.94 371 846 247 F 375 1365 0 686 15 95.96 349 483 31 F 345 846 253 662 8 97.68 393 474 0 F 392 846 114 625 40 89.80 333 543 0 F 340 846 166 541 33 90.09 402 658 53 F 421 846 85 647 44 89.05 282 713 11 F 291 846 215 409 41 85.46 284 846 222 F 277 1297 51 445 29 89.53 341 846 165 F 341 912 0 566 29 91.50 245 846 261 F 243 1327 71 404 21 91.36 215 761 2 F 214 846 292 385 11 94.86 359 826 0 F 356 846 150 583 33 90.73 396 846 222 F 400 1143 9 692 26 93.43 299 846 261 F 305 1196 1 508 24 91.97 221 506 0 F 217 846 294 350 22 89.86 348 846 163 F 349 1049 0 569 32 90.80 303 846 203 F 297 1120 0 440 40 86.53 257 846 222 F 260 1456 5 357 40 84.44 304 481 0 F 296 846 322 540 15 94.93 170 846 281 F 172 1189 0 306 9 94.71 324 641 0 F 324 846 294 596 13 95.99 383 605 0 F 382 846 236 693 18 95.29 265 454 62 F 264 1722 0 473 14 94.70 83 988 223 F 83 1722 157 154 3 96.39 84 1456 181 F 85 1722 157 149 5 94.05 85 1196 139 F 85 1722 157 154 4 95.29 85 474 281 F 85 1722 157 154 4 95.29 85 543 221 F 85 1722 157 154 4 95.29 85 658 343 F 85 1722 157 154 4 95.29 85 713 181 F 85 1722 157 154 4 95.29 85 1297 216 F 85 1722 157 154 4 95.29 85 912 229 F 85 1722 157 154 4 95.29 85 1327 202 F 85 1722 157 154 4 95.29 85 761 105 F 85 1722 157 154 4 95.29 85 826 247 F 85 1722 157 154 4 95.29 85 483 175 F 85 1722 157 154 4 95.29 85 1365 151 F 85 1722 157 154 4 95.29 85 630 192 F 85 1722 157 154 4 95.29 85 380 179 F 85 1722 157 154 4 95.29 85 902 199 F 85 1722 157 154 4 95.29 85 1151 232 F 85 1722 157 154 4 95.29 85 1230 289 F 85 1722 157 154 4 95.29 85 451 212 F 85 1722 157 154 4 95.29 85 736 288 F 85 1722 157 154 4 95.29 85 1100 219 F 85 1722 157 154 4 95.29 85 1143 185 F 85 1722 157 154 4 95.29 83 506 105 F 83 1722 157 150 4 95.18 83 1049 233 F 83 1722 157 150 4 95.18 84 1120 186 F 85 1722 157 149 5 94.05 85 481 80 F 85 1722 157 150 5 94.12 57 1189 115 F 57 1722 157 102 3 94.74 82 641 103 F 82 1722 160 144 5 93.90 85 605 159 F 85 1722 157 150 5 94.12 85 454 220 F 85 846 394 158 3 96.47 288 846 223 F 290 988 49 490 22 92.36 85 846 394 F 85 1722 157 154 4 95.29 330 579 0 F 331 846 287 577 21 93.64 84 579 107 F 85 1722 157 145 6 92.86 257 642 0 F 258 846 325 455 15 94.16 85 642 68 F 85 1722 157 150 5 94.12 285 798 1 F 284 846 222 461 27 90.49 86 798 173 F 85 1722 157 151 5 94.12 157 626 157 F 166 1513 18 187 34 78.34 305 1066 1 F 311 1600 69 444 43 85.90 407 1143 2 F 407 1230 106 718 24 94.10 296 912 45 F 297 1143 0 453 35 88.18 172 1189 0 F 173 1230 173 313 8 95.35 171 912 115 F 172 1189 0 311 8 95.32 173 1143 69 F 172 1189 0 301 11 93.60 257 1640 92 F 254 1840 0 455 14 94.49 282 647 2 F 279 1388 62 493 17 93.91 189 413 38 F 189 1250 74 286 23 87.83 384 738 115 F 391 1384 0 671 26 93.23 377 739 2 F 383 1384 8 592 42 88.86 389 848 138 F 404 1658 0 637 39 89.97 343 1302 67 F 343 1433 4 606 20 94.17 435 474 105 F 433 798 0 792 19 95.61 429 543 51 F 430 798 3 771 22 94.87 428 658 174 F 433 798 0 773 22 94.86 423 713 17 F 432 798 1 719 34 91.96 411 798 22 F 406 1297 69 729 22 94.58 428 798 0 F 428 912 55 776 20 95.33 368 798 40 F 365 1327 71 661 18 95.07 341 761 0 F 341 798 69 654 7 97.95 408 798 0 F 407 826 74 735 20 95.09 255 483 32 F 253 798 33 428 20 92.09 259 798 27 F 263 1365 0 422 25 90.35 284 630 20 F 283 798 3 399 42 85.16 283 380 8 F 286 798 0 453 29 89.75 285 798 1 F 284 846 222 461 27 90.49 286 798 0 F 287 902 24 461 28 90.21 286 798 0 F 287 1151 57 469 26 90.91 285 798 1 F 288 1230 113 453 30 89.47 254 451 70 F 253 798 33 435 18 92.89 286 736 114 F 286 798 0 472 25 91.26 253 798 33 F 255 1100 76 400 27 89.33 232 798 54 F 232 1143 65 376 22 90.52 215 798 71 F 220 1196 32 351 21 90.23 289 506 0 F 284 798 73 425 37 86.97 357 798 0 F 359 1049 58 544 43 87.96 356 798 1 F 359 1328 0 499 54 84.83 349 798 84 F 349 1076 35 618 20 94.27 432 798 1 F 428 1120 16 716 36 91.59 241 798 18 F 243 1456 22 340 36 85.06 192 481 0 F 185 798 101 293 21 88.65 171 798 60 F 172 1189 0 291 13 92.40 171 610 0 F 169 798 117 224 29 82.84 212 641 0 F 213 798 73 353 18 91.51 130 798 156 F 129 1289 3 203 14 89.15 268 798 18 F 268 1360 39 420 29 89.18 271 605 0 F 270 798 16 401 35 87.04 85 454 220 F 86 798 173 159 3 96.47 292 798 33 F 289 988 84 473 27 90.66 86 798 173 F 85 1722 157 151 5 94.12 86 798 173 F 85 1837 149 151 5 94.12 362 1912 0 F 358 1913 0 624 24 93.30 446 1620 20 F 439 1937 0 721 41 90.66 456 1796 26 F 446 1937 0 718 46 89.69 349 483 31 F 349 1365 6 634 16 95.42 369 902 54 F 373 1365 2 690 13 96.48 371 1151 85 F 375 1365 0 694 13 96.50 372 1230 141 F 373 1365 2 677 17 95.43 372 451 62 F 373 1365 0 685 15 95.97 369 736 141 F 373 1365 0 690 13 96.48 392 1143 35 F 391 1365 2 691 23 94.12 262 1049 87 F 266 1365 2 452 19 92.75 261 474 132 F 263 1365 0 448 19 92.72 257 543 76 F 261 1365 2 446 18 93.00 259 912 82 F 263 1365 0 438 21 91.89 215 761 2 F 215 1365 48 382 12 94.42 257 826 102 F 261 1365 2 438 20 92.22 259 798 27 F 263 1365 0 422 25 90.35 256 658 199 F 263 1365 0 439 20 92.19 230 713 63 F 232 1365 31 374 22 90.43 229 1120 68 F 232 1365 31 377 21 90.83 371 846 247 F 375 1365 0 686 15 95.96 230 1327 84 F 232 1365 31 374 22 90.43 223 1328 68 F 223 1365 45 362 21 90.58 368 380 35 F 373 1365 2 677 16 95.65 393 1268 103 F 405 1747 0 686 28 92.88 404 1268 97 F 411 1627 3 723 23 94.31 356 1441 10 F 356 1513 37 648 16 95.51 633 2 0 F 652 16 84 1165 30 95.26 602 5 96 F 601 16 214 1099 26 95.67 238 3 58 F 238 16 214 404 18 92.44 141 6 156 F 141 16 311 250 8 94.33 96 59 356 F 97 651 175 145 12 87.50 416 1620 0 F 415 1796 6 743 22 94.70 438 905 0 F 451 1693 83 677 53 87.90 27 31 3 F 26 632 165 49 1 96.15 420 61 134 F 424 65 137 752 22 94.76 381 61 134 F 380 64 137 701 15 96.05 254 642 0 F 256 1365 81 462 12 95.28 258 579 37 F 257 642 0 427 22 91.44 258 630 123 F 257 642 0 455 15 94.16 258 380 110 F 257 642 0 463 13 94.94 257 642 0 F 258 846 325 455 15 94.16 257 642 0 F 258 902 130 463 13 94.94 257 642 0 F 258 1151 163 463 13 94.94 257 642 0 F 258 1230 220 463 13 94.94 258 451 143 F 257 642 0 463 13 94.94 257 642 0 F 258 736 219 463 13 94.94 257 642 0 F 258 1100 150 459 14 94.55 206 642 51 F 206 1289 3 376 9 95.63 258 481 11 F 251 642 6 429 20 92.03 195 610 53 F 196 642 61 359 8 95.90 257 642 0 F 258 1360 126 451 16 93.77 228 642 6 F 231 1196 75 395 16 92.98 256 641 33 F 257 642 0 441 18 92.97 227 642 30 F 231 1198 62 390 17 92.51 259 483 106 F 257 642 0 460 14 94.55 238 2 130 F 238 39 130 412 16 93.28 238 16 214 F 238 39 130 408 17 92.86 503 2 130 F 522 5 96 845 45 91.05 602 5 96 F 601 16 214 1099 26 95.67 238 2 130 F 238 3 58 408 17 92.86 238 3 58 F 238 16 214 404 18 92.44 117 2 130 F 117 7 96 182 13 88.89 117 7 96 F 117 16 214 182 13 88.89 329 1653 0 F 334 1828 74 587 19 94.22 278 1653 0 F 285 1947 68 491 18 93.53 350 372 1 F 348 1348 62 654 11 96.84 424 454 70 F 432 1837 0 772 21 95.05 265 454 62 F 264 1722 0 473 14 94.70 256 1722 8 F 256 1837 0 464 12 95.31 403 380 0 F 406 630 10 693 29 92.80 403 380 0 F 407 902 16 774 9 97.77 403 380 0 F 407 1151 49 778 8 98.01 403 380 0 F 409 1230 104 760 13 96.77 387 380 14 F 393 451 41 744 9 97.67 401 380 0 F 404 736 106 777 7 98.25 393 380 10 F 399 1100 44 712 20 94.91 344 380 39 F 349 483 31 661 8 97.67 401 380 2 F 407 1143 2 692 29 92.77 296 380 0 F 298 1049 51 514 20 93.24 170 380 66 F 172 1189 0 310 8 95.29 381 380 22 F 383 605 0 688 19 95.01 292 483 0 F 285 988 54 469 27 90.53 289 630 20 F 290 988 49 411 42 85.47 290 902 26 F 289 988 50 483 24 91.70 289 988 50 F 290 1151 59 491 22 92.39 290 988 49 F 292 1230 114 478 26 91.03 288 451 41 F 285 988 54 485 22 92.28 337 736 68 F 339 988 0 540 34 89.91 332 988 7 F 333 1100 3 489 44 86.75 295 988 44 F 297 1143 5 428 41 86.10 377 988 49 F 376 1049 60 693 15 96.01 170 988 110 F 172 1189 0 302 10 94.12 276 605 0 F 276 988 63 428 31 88.77 286 380 10 F 289 988 50 479 24 91.61 217 641 0 F 216 988 123 353 20 90.74 324 380 79 F 324 641 0 600 12 96.30 376 474 57 F 374 988 0 586 41 89.04 322 543 51 F 324 988 50 514 33 89.75 304 988 70 F 299 1297 69 467 34 88.63 323 912 58 F 324 988 50 531 29 91.02 255 761 2 F 253 988 121 428 20 92.09 323 826 76 F 324 988 50 531 29 91.02 292 798 33 F 289 988 84 473 27 90.66 291 380 0 F 296 474 97 507 20 93.13 290 380 1 F 292 543 41 494 22 92.41 282 380 9 F 277 1297 51 455 26 90.61 291 380 0 F 294 912 47 501 21 92.78 214 380 77 F 215 761 2 389 10 95.33 291 380 0 F 293 826 66 520 16 94.50 283 380 8 F 286 798 0 453 29 89.75 318 658 177 F 324 988 50 534 27 91.51 290 380 1 F 289 658 166 495 21 92.73 304 713 29 F 312 988 62 436 45 85.20 289 380 2 F 283 713 10 416 39 86.22 346 988 28 F 337 1120 0 467 54 83.98 291 380 0 F 288 1120 9 427 38 86.81 288 846 223 F 290 988 49 490 22 92.36 400 380 3 F 403 846 215 763 10 97.50 264 988 75 F 268 1365 0 436 24 90.91 368 380 35 F 373 1365 2 677 16 95.65 156 849 95 F 156 988 159 260 13 91.67 166 380 115 F 165 849 95 279 13 92.12 195 530 95 F 197 1304 115 296 24 87.69 282 591 0 F 283 1758 7 461 26 90.78 270 313 34 F 265 1782 2 451 21 92.08 257 1640 92 F 254 1840 0 455 14 94.49 440 654 1 F 432 866 142 668 51 88.19 306 807 164 F 304 866 242 546 16 94.74 64 390 291 F 68 390 344 88 11 82.81 84 310 109 F 84 310 149 160 2 97.62 84 310 149 F 84 1363 114 152 4 95.24 84 310 109 F 84 1363 154 148 5 94.05 84 1363 114 F 84 1363 154 140 7 91.67 302 877 174 F 310 1747 95 532 20 93.38 393 1268 103 F 405 1747 0 686 28 92.88 307 877 174 F 311 1627 103 566 13 95.77 404 1268 97 F 411 1627 3 723 23 94.31 403 1627 8 F 408 1747 0 735 19 95.29 343 568 69 F 345 1793 63 652 9 97.38 258 871 99 F 264 1710 140 426 24 90.70 125 515 132 F 126 1905 154 191 15 88.00 352 422 168 F 367 1126 0 611 27 92.33 324 428 0 F 320 1441 29 564 20 93.75 317 428 7 F 312 1513 64 573 14 95.51 415 223 2 F 414 271 2 793 9 97.83 191 735 195 F 194 1479 14 293 23 87.96 415 223 2 F 414 271 2 793 9 97.83 68 659 210 F 70 1509 181 98 10 85.29 379 1784 7 F 381 1799 0 656 26 93.14 195 530 95 F 197 1304 115 296 24 87.69 196 1304 116 F 193 1343 105 277 28 85.49 115 1304 124 F 113 1431 217 148 20 82.30 196 544 35 F 196 1304 116 296 24 87.76 362 1912 0 F 358 1913 0 624 24 93.30 152 719 114 F 156 1199 0 268 10 93.42 299 1548 0 F 300 1554 49 591 2 99.33 349 1554 0 F 347 1555 52 632 16 95.39 326 579 0 F 327 1360 88 549 26 92.02 374 630 38 F 375 1360 40 621 32 91.44 399 380 0 F 406 1360 9 705 25 93.73 379 605 0 F 381 1360 34 632 32 91.56 410 846 204 F 414 1360 1 700 31 92.44 404 902 15 F 407 1360 8 711 25 93.81 412 1151 40 F 414 1360 1 714 28 93.20 414 1230 95 F 414 1360 1 704 31 92.51 384 451 48 F 383 1360 32 679 22 94.26 411 736 97 F 414 1360 1 721 26 93.67 405 1143 0 F 405 1360 10 638 43 89.38 322 1198 2 F 311 1360 104 513 30 90.35 413 1100 26 F 414 1360 1 663 41 90.07 237 1289 3 F 237 1360 178 434 10 95.78 21 7 257 F 21 36 331 42 0 100.00 610 3 0 F 607 39 72 1145 18 97.03 296 3 0 F 296 5 38 572 5 98.31 175 3 0 F 175 7 38 346 1 99.43 318 658 177 F 324 988 50 534 27 91.51 290 902 26 F 289 988 50 483 24 91.70 289 988 50 F 290 1151 59 491 22 92.39 337 736 68 F 339 988 0 540 34 89.91 288 846 223 F 290 988 49 490 22 92.36 377 988 49 F 376 1049 60 693 15 96.01 485 736 25 F 500 1230 11 869 29 94.02 429 543 51 F 430 798 3 771 22 94.87 428 798 0 F 428 912 55 776 20 95.33 341 761 0 F 341 798 69 654 7 97.95 408 798 0 F 407 826 74 735 20 95.09 255 483 32 F 253 798 33 428 20 92.09 286 798 0 F 287 902 24 461 28 90.21 286 798 0 F 287 1151 57 469 26 90.91 285 798 1 F 288 1230 113 453 30 89.47 254 451 70 F 253 798 33 435 18 92.89 286 736 114 F 286 798 0 472 25 91.26 232 798 54 F 232 1143 65 376 22 90.52 357 798 0 F 359 1049 58 544 43 87.96 428 658 174 F 433 798 0 773 22 94.86 432 798 1 F 428 1120 16 716 36 91.59 285 798 1 F 284 846 222 461 27 90.49 368 798 40 F 365 1327 71 661 18 95.07 292 483 0 F 285 1328 6 437 35 87.72 290 902 26 F 289 1328 2 451 32 88.93 290 1151 59 F 289 1328 2 455 31 89.27 293 1230 113 F 291 1328 0 464 30 89.69 282 451 47 F 280 1328 11 442 30 89.29 290 736 115 F 291 1328 0 457 31 89.31 222 1143 80 F 221 1328 70 355 22 90.05 389 1049 59 F 390 1328 0 679 25 93.57 353 543 51 F 357 1328 2 510 50 85.84 354 912 58 F 357 1328 2 527 46 87.01 277 761 2 F 278 1328 71 443 28 89.89 345 826 76 F 347 1328 2 528 41 88.12 349 658 177 F 357 1328 2 514 48 86.25 352 1120 16 F 358 1328 0 462 62 82.39 289 846 222 F 291 1328 0 448 33 88.58 314 1327 71 F 318 1328 41 460 43 86.31 356 798 1 F 359 1328 0 499 54 84.83 283 380 8 F 286 798 0 453 29 89.75 286 380 10 F 289 1328 2 447 32 88.81 292 798 33 F 289 988 84 473 27 90.66 377 988 49 F 377 1328 1 622 33 91.25 386 376 0 F 401 1694 81 607 45 88.34 316 442 114 F 317 1510 66 581 13 95.89 424 454 70 F 432 1837 0 772 21 95.05 265 454 62 F 264 1722 0 473 14 94.70 256 1722 8 F 256 1837 0 464 12 95.31 389 404 215 F 392 975 80 717 16 95.89 445 34 170 F 432 1317 10 749 32 92.59 313 560 59 F 311 1069 28 572 13 95.82 453 474 87 F 444 1120 0 765 33 92.57 376 543 104 F 376 1120 68 696 14 96.28 444 658 158 F 444 1120 0 752 34 92.34 416 713 24 F 420 1120 24 744 23 94.47 444 1120 0 F 439 1297 36 735 37 91.57 445 912 38 F 439 1120 0 760 31 92.94 395 1120 24 F 396 1327 40 659 33 91.65 322 849 95 F 322 1120 122 588 14 95.65 339 761 0 F 336 1120 83 631 11 96.73 426 826 55 F 419 1120 0 709 34 91.89 352 1076 32 F 348 1120 96 624 19 94.54 307 624 179 F 327 1619 0 470 41 86.64 425 489 0 F 429 1339 12 790 16 96.24 327 825 146 F 320 862 53 587 15 95.31 386 432 25 F 373 862 0 647 28 92.49 373 492 0 F 361 862 12 638 24 93.35 337 862 22 F 349 1469 105 590 24 92.88 332 652 71 F 323 862 50 575 20 93.81 247 885 66 F 249 1051 243 456 10 95.95 245 885 68 F 247 1021 3 440 13 94.69 415 223 2 F 414 271 2 793 9 97.83 72 126 102 F 73 544 88 141 1 98.61 360 530 60 F 360 544 0 672 12 96.67 360 544 0 F 358 1343 70 658 15 95.81 475 404 165 F 476 1500 8 779 43 90.95 425 404 215 F 423 819 78 748 25 94.09 296 404 337 F 299 1362 147 543 13 95.61 345 404 295 F 349 1301 9 614 20 94.20 389 404 215 F 392 975 80 717 16 95.89 152 506 168 F 153 1189 178 269 8 94.74 152 1049 296 F 153 1189 178 269 8 94.74 153 1189 178 F 152 1328 238 265 9 94.08 386 376 0 F 401 1694 81 607 45 88.34 330 1277 1 F 326 1694 81 580 19 94.17 254 1402 3 F 257 1694 225 359 38 85.04 418 432 4 F 419 825 65 773 16 96.17 377 432 37 F 376 492 0 733 5 98.67 397 432 0 F 403 1469 51 700 24 93.95 392 432 23 F 392 1874 0 716 17 95.66 293 22 368 F 282 29 0 471 26 90.78 404 549 32 F 412 661 104 712 26 93.56 78 859 0 F 81 1265 168 119 10 87.18 352 422 168 F 367 1126 0 611 27 92.33 236 1153 0 F 228 1161 110 348 29 87.28 123 470 352 F 126 991 113 233 4 96.75 119 991 114 F 117 1013 277 224 3 97.44 540 4 16 F 523 47 0 935 32 93.88 311 755 0 F 312 1412 113 535 22 92.93 123 470 352 F 126 991 113 233 4 96.75 119 991 114 F 117 1013 277 224 3 97.44 360 530 60 F 360 544 0 672 12 96.67 360 544 0 F 358 1343 70 658 15 95.81 287 1170 0 F 283 1347 84 466 26 90.81 genometools-1.5.1/testdata/repfind-20-query-extend.txt000066400000000000000000000051571211610345200227240ustar00rootroot0000000000000031 125 26 F 30 0 5965 45 4 86.67 23 632 166 F 24 0 5962 43 1 95.65 20 31 11 F 20 0 5966 40 0 100.00 23 859 207 F 23 0 17268 46 0 100.00 23 1214 204 F 23 0 17268 46 0 100.00 23 859 208 F 24 0 17266 43 1 95.65 34 1524 237 F 34 0 17269 44 6 82.35 47 1214 182 F 49 0 17242 52 11 76.60 30 1214 201 F 31 0 17260 49 3 90.00 25 1214 208 F 26 0 17265 47 1 96.00 25 1214 210 F 26 0 17265 47 1 96.00 25 1214 212 F 26 0 17265 47 1 96.00 25 1214 214 F 26 0 17265 47 1 96.00 32 1214 216 F 32 0 17265 52 3 90.62 42 1214 206 F 41 0 17256 51 8 80.49 33 1524 237 F 35 0 17271 48 5 84.85 20 859 208 F 20 0 17271 40 0 100.00 20 1214 205 F 20 0 17271 40 0 100.00 29 561 415 F 28 0 71278 49 2 92.86 29 561 415 F 29 0 71281 54 1 96.55 21 1231 159 F 21 0 71282 42 0 100.00 21 1318 180 F 21 0 71282 42 0 100.00 35 840 275 F 33 0 71280 52 4 87.88 33 561 411 F 33 0 71279 54 3 90.91 24 1231 156 F 23 0 71283 43 1 95.65 24 1318 177 F 23 0 71283 43 1 95.65 47 840 261 F 44 0 71270 59 8 81.82 37 561 404 F 34 0 71277 51 5 85.29 243 1265 90 F 243 0 72510 478 2 99.18 78 859 0 F 81 0 72588 119 10 87.18 78 859 0 F 81 0 72588 119 10 87.18 135 859 84 F 135 0 72651 254 4 97.04 40 859 211 F 39 0 72767 63 4 89.74 23 859 208 F 24 0 77812 43 1 95.65 36 1524 237 F 38 0 77815 54 5 86.11 23 859 208 F 23 0 77815 46 0 100.00 38 1214 205 F 38 0 77815 76 0 100.00 36 1214 205 F 37 0 77812 69 1 97.22 36 1214 205 F 35 0 77812 67 1 97.14 34 1214 207 F 33 0 77812 63 1 96.97 46 1214 209 F 44 0 77812 62 7 84.09 49 1214 206 F 48 0 77808 61 9 81.25 44 1214 208 F 43 0 77808 55 8 81.40 43 1214 210 F 42 0 77808 53 8 80.95 48 1214 205 F 46 0 77802 50 11 76.09 36 1524 237 F 36 0 77817 56 4 88.89 43 859 208 F 43 0 77817 50 8 81.40 34 1214 205 F 34 0 77817 68 0 100.00 36 1524 237 F 34 0 77819 54 4 88.24 43 859 208 F 41 0 77819 56 7 82.93 35 1214 205 F 35 0 77819 66 1 97.14 31 1524 237 F 30 0 77821 49 3 90.00 23 859 208 F 23 0 77821 46 0 100.00 33 1214 205 F 33 0 77821 62 1 96.97 32 1524 237 F 31 0 77823 47 4 87.10 23 859 208 F 23 0 77823 46 0 100.00 31 1214 205 F 31 0 77823 58 1 96.77 30 1524 237 F 29 0 77825 43 4 86.21 23 859 208 F 23 0 77825 46 0 100.00 35 1214 205 F 36 0 77825 55 4 88.57 28 1524 237 F 27 0 77827 43 3 88.89 23 859 208 F 23 0 77827 46 0 100.00 33 1214 205 F 34 0 77827 51 4 87.88 23 1524 237 F 24 0 77829 43 1 95.65 30 859 208 F 30 0 77829 48 3 90.00 31 1214 205 F 32 0 77829 47 4 87.10 23 1524 237 F 22 0 77831 41 1 95.45 23 859 208 F 23 0 77831 42 1 95.65 29 1214 205 F 30 0 77831 43 4 86.21 110 1361 1 F 103 0 105325 137 19 81.55 222 1361 148 F 222 0 105629 432 3 98.65 222 1361 148 F 222 0 105629 432 3 98.65 222 1361 148 F 222 0 105629 432 3 98.65 222 1361 148 F 222 0 105629 432 3 98.65 genometools-1.5.1/testdata/repfind-8-Atinsert.txt000066400000000000000000000414301211610345200220030ustar00rootroot00000000000000 16 0 258 F 16 0 259 15 0 258 F 15 0 260 14 0 258 F 14 0 261 13 0 258 F 13 0 262 12 0 258 F 12 0 263 11 0 258 F 11 0 264 10 0 258 F 10 0 265 9 0 258 F 9 0 266 8 0 258 F 8 0 267 8 0 259 F 8 20 162 8 0 260 F 8 20 162 8 0 261 F 8 20 162 8 0 262 F 8 20 162 8 0 263 F 8 20 162 8 0 264 F 8 20 162 8 0 265 F 8 20 162 8 0 266 F 8 20 162 8 0 267 F 8 20 162 9 2 679 F 9 16 802 8 3 142 F 8 10 759 8 5 180 F 8 10 759 8 3 142 F 8 5 180 8 7 180 F 8 10 759 8 3 142 F 8 7 180 8 5 180 F 8 7 180 8 16 804 F 8 19 550 8 2 443 F 8 19 429 8 3 371 F 8 19 429 8 5 409 F 8 19 429 8 6 372 F 8 19 429 8 16 527 F 8 19 429 10 1 353 F 10 6 776 10 6 776 F 10 16 59 8 4 365 F 8 5 784 8 1 393 F 8 5 784 8 2 15 F 8 5 784 8 4 403 F 8 5 784 8 5 784 F 8 16 99 8 1 393 F 8 4 365 8 2 15 F 8 4 365 8 4 365 F 8 4 403 8 4 365 F 8 16 99 8 4 324 F 8 8 527 8 3 604 F 8 5 468 8 3 604 F 8 16 586 8 1 423 F 8 4 433 8 2 45 F 8 4 433 8 1 423 F 8 5 11 8 2 45 F 8 5 11 8 4 433 F 8 5 11 8 1 423 F 8 7 11 8 2 45 F 8 7 11 8 4 433 F 8 7 11 8 5 11 F 8 7 11 8 4 433 F 8 16 129 8 5 11 F 8 16 129 8 7 11 F 8 16 129 14 5 521 F 14 16 639 12 3 484 F 12 5 521 12 3 484 F 12 16 639 11 5 521 F 11 10 762 11 10 762 F 11 16 639 11 3 484 F 11 10 762 8 6 484 F 8 10 762 8 5 521 F 8 6 484 8 6 484 F 8 16 639 8 3 484 F 8 6 484 8 1 229 F 8 4 239 8 3 638 F 8 6 630 9 4 124 F 9 5 785 8 4 366 F 8 14 194 8 1 394 F 8 18 412 8 2 16 F 8 18 412 8 4 404 F 8 18 412 8 16 100 F 8 18 412 8 1 297 F 8 16 798 8 16 3 F 8 16 798 8 5 780 F 8 8 256 8 0 90 F 8 1 194 9 6 487 F 9 18 469 8 4 248 F 8 9 38 10 8 531 F 10 16 785 8 8 47 F 8 20 110 8 8 318 F 8 19 403 8 1 776 F 8 16 806 9 1 732 F 9 19 552 8 3 424 F 8 17 225 8 6 425 F 8 17 225 18 1 351 F 18 16 57 13 5 466 F 13 16 584 8 1 421 F 8 5 466 8 2 43 F 8 5 466 8 5 466 F 8 16 127 8 1 421 F 8 16 584 8 2 43 F 8 16 584 8 16 127 F 8 16 584 8 4 119 F 8 6 625 8 2 550 F 8 19 510 21 2 231 F 21 5 197 21 5 197 F 21 16 315 20 2 231 F 20 3 159 20 3 159 F 20 16 315 16 2 231 F 16 7 197 16 7 197 F 16 16 315 8 13 96 F 8 14 191 8 11 205 F 8 15 355 8 10 94 F 8 19 450 8 18 413 F 8 19 484 8 3 618 F 8 5 649 8 5 649 F 8 6 613 8 6 734 F 8 19 596 9 0 256 F 9 16 799 8 2 677 F 8 16 799 8 0 256 F 8 2 677 10 5 781 F 10 6 773 17 2 298 F 17 5 264 17 2 298 F 17 16 382 17 5 264 F 17 16 382 17 3 226 F 17 6 227 16 2 298 F 16 3 226 16 2 298 F 16 6 227 16 3 226 F 16 5 264 16 5 264 F 16 6 227 16 3 226 F 16 16 382 16 6 227 F 16 16 382 8 8 43 F 8 17 182 10 1 459 F 10 2 80 10 1 459 F 10 16 164 10 2 80 F 10 16 164 8 2 552 F 8 17 427 16 1 507 F 16 2 128 16 1 507 F 16 16 212 16 2 128 F 16 16 212 17 1 319 F 17 16 25 10 1 319 F 10 4 329 10 4 329 F 10 16 25 8 3 490 F 8 4 329 8 1 319 F 8 3 490 8 3 490 F 8 16 25 9 4 82 F 9 17 97 14 1 388 F 14 2 10 14 1 388 F 14 4 398 14 2 10 F 14 4 398 14 1 388 F 14 16 94 14 2 10 F 14 16 94 14 4 398 F 14 16 94 9 3 120 F 9 5 158 9 3 120 F 9 7 158 9 5 158 F 9 7 158 8 3 120 F 8 6 120 8 5 158 F 8 6 120 8 6 120 F 8 7 158 9 2 192 F 9 16 276 8 8 48 F 8 10 227 8 8 557 F 8 19 592 8 3 548 F 8 19 496 8 5 584 F 8 19 496 8 6 548 F 8 19 496 8 16 702 F 8 19 496 12 3 35 F 12 5 73 12 3 35 F 12 7 73 12 5 73 F 12 7 73 8 5 543 F 8 16 661 9 2 353 F 9 3 281 9 2 353 F 9 5 319 9 3 281 F 9 5 319 9 2 353 F 9 6 282 9 3 281 F 9 6 282 9 5 319 F 9 6 282 9 2 353 F 9 16 437 9 3 281 F 9 16 437 9 5 319 F 9 16 437 9 6 282 F 9 16 437 8 0 148 F 8 5 769 8 3 723 F 8 17 254 24 3 48 F 24 4 508 24 3 48 F 24 5 86 24 4 508 F 24 5 86 24 3 48 F 24 7 86 24 4 508 F 24 7 86 24 5 86 F 24 7 86 8 2 319 F 8 3 247 8 2 319 F 8 5 285 8 3 247 F 8 5 285 8 2 319 F 8 6 248 8 3 247 F 8 6 248 8 5 285 F 8 6 248 8 3 19 F 8 4 479 8 3 19 F 8 5 57 8 4 479 F 8 5 57 8 3 19 F 8 7 57 8 4 479 F 8 7 57 8 5 57 F 8 7 57 8 0 95 F 8 20 222 8 2 250 F 8 3 425 8 2 250 F 8 6 426 8 3 425 F 8 16 334 8 6 426 F 8 16 334 8 6 585 F 8 8 268 8 1 352 F 8 1 392 8 1 352 F 8 2 14 8 1 352 F 8 4 402 8 1 352 F 8 16 98 8 1 392 F 8 16 58 8 2 14 F 8 16 58 8 4 402 F 8 16 58 8 16 58 F 8 16 98 14 1 509 F 14 3 58 14 2 130 F 14 3 58 14 1 509 F 14 4 518 14 2 130 F 14 4 518 14 1 509 F 14 5 96 14 2 130 F 14 5 96 14 1 509 F 14 7 96 14 2 130 F 14 7 96 14 3 58 F 14 16 214 14 4 518 F 14 16 214 14 5 96 F 14 16 214 14 7 96 F 14 16 214 8 5 670 F 8 6 629 8 4 123 F 8 14 193 8 8 46 F 8 8 497 20 3 319 F 20 6 320 20 2 391 F 20 5 357 20 2 391 F 20 16 475 20 5 357 F 20 16 475 18 2 391 F 18 3 319 18 3 319 F 18 5 357 18 3 319 F 18 16 475 18 2 391 F 18 6 320 18 5 357 F 18 6 320 18 6 320 F 18 16 475 8 2 577 F 8 6 518 8 6 518 F 8 16 673 8 2 577 F 8 16 673 8 4 251 F 8 8 74 10 2 232 F 10 6 161 10 6 161 F 10 16 316 10 5 198 F 10 6 161 10 3 160 F 10 6 161 10 6 161 F 10 7 198 9 3 324 F 9 7 352 9 6 325 F 9 7 352 9 2 396 F 9 7 352 9 5 362 F 9 7 352 9 7 352 F 9 16 480 8 15 356 F 8 18 94 11 3 546 F 11 5 582 11 3 546 F 11 6 546 11 5 582 F 11 6 546 11 3 546 F 11 16 700 11 5 582 F 11 16 700 11 6 546 F 11 16 700 8 8 364 F 8 17 92 8 1 738 F 8 17 610 8 11 594 F 8 17 610 8 0 182 F 8 17 613 9 2 490 F 9 5 456 9 2 490 F 9 16 574 12 2 439 F 12 5 405 12 2 439 F 12 16 523 12 5 405 F 12 16 523 14 1 417 F 14 2 39 14 1 417 F 14 16 123 14 2 39 F 14 16 123 11 2 211 F 11 16 295 25 3 416 F 25 6 417 20 1 45 F 20 4 52 9 3 52 F 9 4 368 9 4 368 F 9 4 512 9 4 368 F 9 5 90 9 4 368 F 9 7 90 8 1 358 F 8 4 368 8 4 368 F 8 16 64 8 18 389 F 8 20 159 11 5 636 F 11 16 754 9 3 601 F 9 5 636 9 3 601 F 9 16 754 8 4 564 F 8 17 575 10 6 614 F 10 15 376 8 3 103 F 8 6 614 8 3 103 F 8 15 376 8 5 141 F 8 6 614 8 5 141 F 8 15 376 8 3 103 F 8 5 141 8 6 614 F 8 7 141 8 7 141 F 8 15 376 8 3 103 F 8 7 141 8 5 141 F 8 7 141 8 4 47 F 8 14 450 9 3 728 F 9 6 735 9 0 257 F 9 20 161 8 16 800 F 8 20 161 8 2 491 F 8 13 179 8 5 457 F 8 13 179 8 13 179 F 8 16 575 10 1 296 F 10 16 2 8 1 296 F 8 8 255 8 8 255 F 8 16 2 11 2 440 F 11 3 368 11 3 368 F 11 5 406 11 2 440 F 11 6 369 11 5 406 F 11 6 369 11 3 368 F 11 16 524 11 6 369 F 11 16 524 10 9 35 F 10 17 183 11 5 454 F 11 16 572 8 6 489 F 8 18 466 8 6 489 F 8 20 194 8 3 433 F 8 5 471 8 5 471 F 8 6 434 8 3 433 F 8 16 589 8 6 434 F 8 16 589 8 3 550 F 8 19 513 8 2 240 F 8 4 630 8 4 630 F 8 16 324 8 4 630 F 8 5 206 8 3 168 F 8 4 630 10 2 212 F 10 6 622 10 6 622 F 10 16 296 8 14 286 F 8 19 452 8 4 35 F 8 14 292 22 3 157 F 22 5 195 18 5 195 F 18 7 195 18 3 157 F 18 7 195 13 3 613 F 13 6 608 8 1 73 F 8 4 80 8 1 403 F 8 2 25 8 1 403 F 8 16 109 8 2 25 F 8 16 109 9 0 243 F 9 8 327 8 1 836 F 8 8 94 8 2 489 F 8 13 211 17 5 612 F 17 16 730 9 1 357 F 9 3 51 9 3 51 F 9 16 63 9 1 357 F 9 4 511 9 4 511 F 9 16 63 9 1 357 F 9 5 89 9 5 89 F 9 16 63 9 1 357 F 9 7 89 9 7 89 F 9 16 63 8 1 46 F 8 3 121 8 3 121 F 8 4 53 8 1 46 F 8 5 159 8 4 53 F 8 5 159 8 1 46 F 8 7 159 8 4 53 F 8 7 159 9 5 637 F 9 6 601 9 6 601 F 9 16 755 8 3 602 F 8 6 601 12 3 367 F 12 6 368 8 1 263 F 8 4 273 29 2 229 F 29 16 313 9 18 465 F 9 20 193 8 0 138 F 8 14 285 8 0 150 F 8 7 269 8 1 27 F 8 2 234 8 1 27 F 8 16 318 8 1 27 F 8 5 200 8 1 27 F 8 3 162 8 1 27 F 8 7 200 8 1 27 F 8 6 163 8 1 829 F 8 11 549 10 1 736 F 10 11 592 10 1 56 F 10 4 49 9 4 49 F 9 4 63 8 1 557 F 8 3 725 8 3 725 F 8 17 576 8 1 557 F 8 17 576 8 2 282 F 8 17 246 8 3 210 F 8 17 246 8 5 248 F 8 17 246 8 6 211 F 8 17 246 8 7 248 F 8 17 246 8 16 366 F 8 17 246 8 6 615 F 8 19 652 8 15 377 F 8 19 652 8 1 779 F 8 2 354 8 1 779 F 8 3 282 8 1 779 F 8 5 320 8 1 779 F 8 6 283 8 1 779 F 8 16 438 8 3 662 F 8 6 660 8 3 662 F 8 16 809 8 6 660 F 8 16 809 8 6 731 F 8 20 84 8 2 260 F 8 4 335 8 3 188 F 8 4 335 8 4 335 F 8 5 226 8 4 335 F 8 6 189 8 4 335 F 8 16 344 8 4 335 F 8 19 463 9 1 325 F 9 4 651 9 4 651 F 9 16 31 8 1 325 F 8 1 660 8 1 660 F 8 16 31 8 0 171 F 8 4 48 12 2 281 F 12 3 209 12 2 281 F 12 5 247 12 3 209 F 12 5 247 12 2 281 F 12 6 210 12 3 209 F 12 6 210 12 5 247 F 12 6 210 12 2 281 F 12 7 247 12 3 209 F 12 7 247 12 5 247 F 12 7 247 12 6 210 F 12 7 247 12 2 281 F 12 16 365 12 3 209 F 12 16 365 12 5 247 F 12 16 365 12 6 210 F 12 16 365 12 7 247 F 12 16 365 9 1 42 F 9 3 49 9 1 42 F 9 4 509 9 1 42 F 9 5 87 9 1 42 F 9 7 87 8 14 547 F 8 19 629 8 16 808 F 8 19 518 9 2 259 F 9 3 187 9 2 259 F 9 5 225 9 3 187 F 9 5 225 9 2 259 F 9 6 188 9 3 187 F 9 6 188 9 5 225 F 9 6 188 9 2 259 F 9 16 343 9 3 187 F 9 16 343 9 5 225 F 9 16 343 9 6 188 F 9 16 343 9 2 259 F 9 19 462 9 3 187 F 9 19 462 9 5 225 F 9 19 462 9 6 188 F 9 19 462 9 16 343 F 9 19 462 9 1 734 F 9 17 615 10 1 658 F 10 4 649 8 0 169 F 8 3 732 8 5 763 F 8 10 146 8 1 657 F 8 3 731 9 3 729 F 9 6 737 9 6 736 F 9 19 568 8 3 729 F 8 19 568 8 6 736 F 8 6 737 8 6 737 F 8 19 568 8 3 729 F 8 12 83 8 6 736 F 8 12 83 8 6 737 F 8 12 83 8 12 83 F 8 19 568 8 3 729 F 8 19 569 8 6 736 F 8 19 569 8 19 568 F 8 19 569 8 12 83 F 8 19 569 genometools-1.5.1/testdata/retain_1.gff3000066400000000000000000000001141211610345200201220ustar00rootroot00000000000000##gff-version 3 1 ucb gene 2 2 . - . ID=geneA 1 ucb gene 2 2 . + . ID=geneB genometools-1.5.1/testdata/retain_2.gff3000066400000000000000000000000561211610345200201300ustar00rootroot00000000000000##gff-version 3 1 ucb gene 4 4 . - . ID=geneA genometools-1.5.1/testdata/retain_both.gff3000066400000000000000000000002561211610345200207250ustar00rootroot00000000000000##gff-version 3 ##sequence-region 1 2 2 1 ucb gene 2 2 . - . ID=geneA ### 1 ucb gene 2 2 . + . ID=geneB ### ##sequence-region 1 4 4 1 ucb gene 4 4 . - . ID=geneA.1 ### genometools-1.5.1/testdata/retainids.gff3000066400000000000000000000011711211610345200204060ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 10000 ctg123 . gene 1000 9000 . . . ID=gene00001 ctg123 . TF_binding_site 1000 1012 . . . Parent=gene00001 ctg123 . mRNA 1050 9000 . . . ID=mRNA00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . . . ID=mRNA00002;Parent=gene00001 ctg123 . exon 1050 1500 . . . Parent=mRNA00001,mRNA00002 ctg123 . mRNA 1300 9000 . . . ID=mRNA00003;Parent=gene00001 ctg123 . exon 1300 1500 . . . Parent=mRNA00003 ctg123 . exon 3000 3902 . . . Parent=mRNA00001,mRNA00003 ctg123 . exon 5000 5500 . . . Parent=mRNA00001,mRNA00002,mRNA00003 ctg123 . exon 7000 9000 . . . Parent=mRNA00001,mRNA00002,mRNA00003 ### genometools-1.5.1/testdata/reverse_feature_order.gff3000066400000000000000000000002131211610345200230010ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . mRNA 1050 9000 . + . Parent=gene1 ctg123 . gene 1000 9000 0.5 + . ID=gene1 genometools-1.5.1/testdata/reverse_feature_order.out000066400000000000000000000002171211610345200227670ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.5 + . ID=gene1 ctg123 . mRNA 1050 9000 . + . Parent=gene1 ### genometools-1.5.1/testdata/reverse_feature_order_multiple_parents.gff3000066400000000000000000000002721211610345200264550ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . exon 1050 1500 . + . Parent=mRNA1,mRNA2 ctg123 . mRNA 1050 9000 . + . ID=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2 ### genometools-1.5.1/testdata/reverse_feature_order_multiple_parents.out000066400000000000000000000002721211610345200264370ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . mRNA 1050 9000 . + . ID=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2 ctg123 . exon 1050 1500 . + . Parent=mRNA1,mRNA2 ### genometools-1.5.1/testdata/reverse_standard_gene_as_tree.gff3000066400000000000000000000014171211610345200244620ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . gene 1000 9000 0.5 + . ID=gene1 ### genometools-1.5.1/testdata/sain.fna000066400000000000000000000001051211610345200172710ustar00rootroot00000000000000>Sequence from almost purely induced suffix sorting ccaattaattaaggaa genometools-1.5.1/testdata/script_example.out000066400000000000000000000004631211610345200214300ustar00rootroot00000000000000fold the following RNA sequence with Nussinov Algorithm: gggaaatcc length of RNA sequence = 9 using the following parameters: l_min = 1 alpha(G,C) = alpha(C,G) = -1 alpha(A,U) = alpha(U,A) = -1 alpha(G,U) = alpha(U,G) = -1 all other alpha values have been set to infinity score: -3 result: (2,9)(3,8)(5,7) genometools-1.5.1/testdata/script_filter_output.txt000066400000000000000000000001421211610345200227040ustar00rootroot00000000000000filter name: name version: 1.0 author: author email: email@example.com description: description genometools-1.5.1/testdata/self_referential.gff3000066400000000000000000000001551211610345200217360ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.5 + . ID=gene1;Parent=gene1 genometools-1.5.1/testdata/sequence_region_1.gff3000066400000000000000000000015221211610345200220170ustar00rootroot00000000000000##gff-version 3 ##sequence-region I 2064302 12995457 I Coding_transcript gene 2064302 2064690 . + . ID=gene1;Alias=Y37E3.3;Name=WBGene00021347 I Coding_transcript exon 2064302 2064400 . + . Parent=gene1 I Coding_transcript mRNA 2064302 2064690 . + . ID=mRNA1;Parent=gene1;Alias=WBGene00021347;prediction_status=Confirmed;Note=Y37E3.3;Dbxref=CDS:Y37E3.3,WormPep:WP:CE26662;Name=Y37E3.3 I Coding_transcript five_prime_UTR 2064302 2064306 . + . Parent=mRNA1;Name=Y37E3.3 I Coding_transcript CDS 2064307 2064400 . + 0 Parent=mRNA1;Name=Y37E3.3 I Coding_transcript CDS 2064452 2064561 . + 2 Parent=mRNA1;Name=Y37E3.3 I Coding_transcript three_prime_UTR 2064562 2064690 . + . Parent=mRNA1;Name=Y37E3.3 I Coding_transcript intron 2064401 2064451 . + . Parent=gene1;confirmed_est=yk498f7.3 I Coding_transcript exon 2064452 2064690 . + . Parent=gene1 ### genometools-1.5.1/testdata/sequence_region_2.gff3000066400000000000000000000026331211610345200220240ustar00rootroot00000000000000##gff-version 3 ##sequence-region I 2006120 12983734 I Coding_transcript gene 2006120 2010481 . - . ID=gene1;Alias=Y20F4.3;Name=WBGene00021238 I Coding_transcript exon 2006120 2006306 . - . Parent=gene1 I Coding_transcript mRNA 2006120 2010481 . - . ID=mRNA1;Parent=gene1;Alias=WBGene00021238;prediction_status=Predicted;Note=Y20F4.3;Dbxref=CDS:Y20F4.3,WormPep:WP:CE40152;Name=Y20F4.3 I Coding_transcript CDS 2006120 2006306 . - 1 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript CDS 2007324 2007568 . - 0 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript CDS 2008590 2008772 . - 0 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript CDS 2009865 2009961 . - 1 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript CDS 2010006 2010259 . - 0 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript CDS 2010407 2010481 . - 0 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript intron 2006307 2007323 . - . Parent=gene1 I Coding_transcript exon 2007324 2007568 . - . Parent=gene1 I Coding_transcript intron 2007569 2008589 . - . Parent=gene1 I Coding_transcript exon 2008590 2008772 . - . Parent=gene1 I Coding_transcript intron 2008773 2009864 . - . Parent=gene1 I Coding_transcript exon 2009865 2009961 . - . Parent=gene1 I Coding_transcript intron 2009962 2010005 . - . Parent=gene1 I Coding_transcript exon 2010006 2010259 . - . Parent=gene1 I Coding_transcript intron 2010260 2010406 . - . Parent=gene1 I Coding_transcript exon 2010407 2010481 . - . Parent=gene1 ### genometools-1.5.1/testdata/sequence_region_joined.gff3000066400000000000000000000042641211610345200231350ustar00rootroot00000000000000##gff-version 3 ##sequence-region I 2006120 12995457 I Coding_transcript gene 2006120 2010481 . - . ID=gene1;Alias=Y20F4.3;Name=WBGene00021238 I Coding_transcript exon 2006120 2006306 . - . Parent=gene1 I Coding_transcript mRNA 2006120 2010481 . - . ID=mRNA1;Parent=gene1;Alias=WBGene00021238;prediction_status=Predicted;Note=Y20F4.3;Dbxref=CDS:Y20F4.3,WormPep:WP:CE40152;Name=Y20F4.3 I Coding_transcript CDS 2006120 2006306 . - 1 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript CDS 2007324 2007568 . - 0 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript CDS 2008590 2008772 . - 0 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript CDS 2009865 2009961 . - 1 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript CDS 2010006 2010259 . - 0 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript CDS 2010407 2010481 . - 0 Parent=mRNA1;Name=Y20F4.3 I Coding_transcript intron 2006307 2007323 . - . Parent=gene1 I Coding_transcript exon 2007324 2007568 . - . Parent=gene1 I Coding_transcript intron 2007569 2008589 . - . Parent=gene1 I Coding_transcript exon 2008590 2008772 . - . Parent=gene1 I Coding_transcript intron 2008773 2009864 . - . Parent=gene1 I Coding_transcript exon 2009865 2009961 . - . Parent=gene1 I Coding_transcript intron 2009962 2010005 . - . Parent=gene1 I Coding_transcript exon 2010006 2010259 . - . Parent=gene1 I Coding_transcript intron 2010260 2010406 . - . Parent=gene1 I Coding_transcript exon 2010407 2010481 . - . Parent=gene1 ### I Coding_transcript gene 2064302 2064690 . + . ID=gene2;Alias=Y37E3.3;Name=WBGene00021347 I Coding_transcript exon 2064302 2064400 . + . Parent=gene2 I Coding_transcript mRNA 2064302 2064690 . + . ID=mRNA2;Parent=gene2;Alias=WBGene00021347;prediction_status=Confirmed;Note=Y37E3.3;Dbxref=CDS:Y37E3.3,WormPep:WP:CE26662;Name=Y37E3.3 I Coding_transcript five_prime_UTR 2064302 2064306 . + . Parent=mRNA2;Name=Y37E3.3 I Coding_transcript CDS 2064307 2064400 . + 0 Parent=mRNA2;Name=Y37E3.3 I Coding_transcript CDS 2064452 2064561 . + 2 Parent=mRNA2;Name=Y37E3.3 I Coding_transcript three_prime_UTR 2064562 2064690 . + . Parent=mRNA2;Name=Y37E3.3 I Coding_transcript intron 2064401 2064451 . + . Parent=gene2;confirmed_est=yk498f7.3 I Coding_transcript exon 2064452 2064690 . + . Parent=gene2 ### genometools-1.5.1/testdata/sequence_region_negative_end.gff3000066400000000000000000000000701211610345200243040ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 -1497228 genometools-1.5.1/testdata/sequence_region_negative_start.gff3000066400000000000000000000000701211610345200246730ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 -1 1497228 genometools-1.5.1/testdata/simple_orphan.gff3000066400000000000000000000001621211610345200212630ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . CDS 3000 3902 . + 0 ID=cds000001;Parent=mRNA00001 genometools-1.5.1/testdata/solid_color_reads.fastq000066400000000000000000000020541211610345200224040ustar00rootroot00000000000000@SRR014961.1 VAB_JOAN_20080715_1_1000g_5_1_6_35/2 G3300300010002003003002033 + !%$$(&)$#$$$%###$#$###$$%% @SRR014961.2 VAB_JOAN_20080715_1_1000g_5_1_6_47/2 G3220012230032000000121320 + !&*&%'''%%.&%%%#$&$%$&&*&# @SRR014961.3 VAB_JOAN_20080715_1_1000g_5_1_6_62/2 G3112033201002121110023230 + !'&&&++&,*'1($,)&'#-&('(+2 @SRR014961.4 VAB_JOAN_20080715_1_1000g_5_1_6_165/2 G2020222102113212302010001 + !#+)**'*#0/&,%'+*%('0',8%4 @SRR014961.5 VAB_JOAN_20080715_1_1000g_5_1_6_203/2 G0313322300333000003003032 + !,'1,*)+/..%$$$+$#&#%#$#%' @SRR014961.6 VAB_JOAN_20080715_1_1000g_5_1_6_211/2 G0010020120123331103223031 + !)+(+1'.(*300$(&--$&-))-$' @SRR014961.7 VAB_JOAN_20080715_1_1000g_5_1_6_220/2 G1000000302222312200222120 + !,,.+'(+.5(&.''#''5#%+.2$# @SRR014961.8 VAB_JOAN_20080715_1_1000g_5_1_6_278/2 G2202120322301133030100300 + !$)/%&'(0*(%-.$%$4*&$%0%*' @SRR014961.9 VAB_JOAN_20080715_1_1000g_5_1_6_284/2 G1131131002203211000110101 + !+*(%.&.$$.$%%%()%##)###$) @SRR014961.10 VAB_JOAN_20080715_1_1000g_5_1_6_310/2 G2303330213030210202021213 + !2$.'$&)'***&%2*+*''(+*()& genometools-1.5.1/testdata/splice_site_prob.gff3000066400000000000000000000013121211610345200217460ustar00rootroot00000000000000##gff-version 3 ##sequence-region region.fas|1 1 2000701 region.fas|1 gth gene 609666 620119 . - . ID=gene1 region.fas|1 gth mRNA 609666 620119 . - . ID=mRNA1;Parent=gene1 region.fas|1 gth exon 609666 613203 0.98 - . Parent=mRNA1 region.fas|1 region.fas|1 three_prime_cis_splice_site 613205 613205 0.543 - . Parent=mRNA1 region.fas|1 region.fas|1 five_prime_cis_splice_site 613276 613277 0.504 - . Parent=mRNA1 region.fas|1 gth exon 613278 613446 0.967 - . Parent=mRNA1 region.fas|1 region.fas|1 three_prime_cis_splice_site 613447 613448 0 - . Parent=mRNA1 region.fas|1 region.fas|1 five_prime_cis_splice_site 620084 620085 0.472 - . Parent=mRNA1 region.fas|1 gth exon 620086 620119 0.971 - . Parent=mRNA1 ### genometools-1.5.1/testdata/splice_site_prob.out000066400000000000000000000000751211610345200217350ustar00rootroot00000000000000##gff-version 3 ##sequence-region region.fas|1 1 2000701 genometools-1.5.1/testdata/standard_fasta_example.gff3000066400000000000000000000030531211610345200231160ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001;Name=EDEN ctg123 . TF_binding_site 1000 1012 . + . ID=tfbs00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001;Name=EDEN.1 ctg123 . five_prime_UTR 1050 1200 . + . Parent=mRNA00001 ctg123 . CDS 1201 1500 . + 0 Parent=mRNA00001 ctg123 . CDS 3000 3902 . + 0 Parent=mRNA00001 ctg123 . CDS 5000 5500 . + 0 Parent=mRNA00001 ctg123 . CDS 7000 7600 . + 0 Parent=mRNA00001 ctg123 . five_prime_UTR 7601 9000 . + . Parent=mRNA00001 ctg123 . cDNA_match 1050 1500 5.8e-42 + . Target=cdna0123 12 462 ctg123 . cDNA_match 5000 5500 8.1e-43 + . Target=cdna0123 463 963 ctg123 . cDNA_match 7000 9000 1.4e-40 + . Target=cdna0123 964 2964 ##FASTA >ctg123 cttctgggcgtacccgattctcggagaacttgccgcaccattccgccttg tgttcattgctgcctgcatgttcattgtctacctcggctacgtgtggcta tctttcctcggtgccctcgtgcacggagtcgagaaaccaaagaacaaaaa aagaaattaaaatatttattttgctgtggtttttgatgtgtgttttttat aatgatttttgatgtgaccaattgtacttttcctttaaatgaaatgtaat cttaaatgtatttccgacgaattcgaggcctgaaaagtgtgacgccattc gtatttgatttgggtttactatcgaataatgagaattttcaggcttaggc ttaggcttaggcttaggcttaggcttaggcttaggcttaggcttaggctt aggcttaggcttaggcttaggcttaggcttaggcttaggcttaggcttag aatctagctagctatccgaaattcgaggcctgaaaagtgtgacgccattc >cnda0123 ttcaagtgctcagtcaatgtgattcacagtatgtcaccaaatattttggc agctttctcaagggatcaaaattatggatcattatggaatacctcggtgg aggctcagcgctcgatttaactaaaagtggaaagctggacgaaagtcata tcgctgtgattcttcgcgaaattttgaaaggtctcgagtatctgcatagt gaaagaaaaatccacagagatattaaaggagccaacgttttgttggaccg tcaaacagcggctgtaaaaatttgtgattatggttaaagg genometools-1.5.1/testdata/standard_fasta_example_with_id.gff3000066400000000000000000000031261211610345200246260ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001;Name=EDEN ctg123 . TF_binding_site 1000 1012 . + . ID=tfbs00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001;Name=EDEN.1 ctg123 . five_prime_UTR 1050 1200 . + . Parent=mRNA00001 ctg123 . CDS 1201 1500 . + 0 Parent=mRNA00001 ctg123 . CDS 3000 3902 . + 0 Parent=mRNA00001 ctg123 . CDS 5000 5500 . + 0 Parent=mRNA00001 ctg123 . CDS 7000 7600 . + 0 Parent=mRNA00001 ctg123 . three_prime_UTR 7601 9000 . + . Parent=mRNA00001 ctg123 . cDNA_match 1050 1500 5.8e-42 + . ID=match00001;Target=cdna0123 12 462 ctg123 . cDNA_match 5000 5500 8.1e-43 + . ID=match00001;Target=cdna0123 463 963 ctg123 . cDNA_match 7000 9000 1.4e-40 + . ID=match00001;Target=cdna0123 964 2964 ##FASTA >ctg123 cttctgggcgtacccgattctcggagaacttgccgcaccattccgccttg tgttcattgctgcctgcatgttcattgtctacctcggctacgtgtggcta tctttcctcggtgccctcgtgcacggagtcgagaaaccaaagaacaaaaa aagaaattaaaatatttattttgctgtggtttttgatgtgtgttttttat aatgatttttgatgtgaccaattgtacttttcctttaaatgaaatgtaat cttaaatgtatttccgacgaattcgaggcctgaaaagtgtgacgccattc gtatttgatttgggtttactatcgaataatgagaattttcaggcttaggc ttaggcttaggcttaggcttaggcttaggcttaggcttaggcttaggctt aggcttaggcttaggcttaggcttaggcttaggcttaggcttaggcttag aatctagctagctatccgaaattcgaggcctgaaaagtgtgacgccattc >cnda0123 ttcaagtgctcagtcaatgtgattcacagtatgtcaccaaatattttggc agctttctcaagggatcaaaattatggatcattatggaatacctcggtgg aggctcagcgctcgatttaactaaaagtggaaagctggacgaaagtcata tcgctgtgattcttcgcgaaattttgaaaggtctcgagtatctgcatagt gaaagaaaaatccacagagatattaaaggagccaacgttttgttggaccg tcaaacagcggctgtaaaaatttgtgattatggttaaagg genometools-1.5.1/testdata/standard_fasta_example_with_id.out000066400000000000000000000030541211610345200246100ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1;Name=EDEN ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1;Name=EDEN.1 ctg123 . five_prime_UTR 1050 1200 . + . Parent=mRNA1 ctg123 . CDS 1201 1500 . + 0 Parent=mRNA1 ctg123 . CDS 3000 3902 . + 0 Parent=mRNA1 ctg123 . CDS 5000 5500 . + 0 Parent=mRNA1 ctg123 . CDS 7000 7600 . + 0 Parent=mRNA1 ctg123 . three_prime_UTR 7601 9000 . + . Parent=mRNA1 ### ctg123 . cDNA_match 1050 1500 5.8e-42 + . ID=cDNA_match1;Target=cdna0123 12 462 ctg123 . cDNA_match 5000 5500 8.1e-43 + . ID=cDNA_match1;Target=cdna0123 463 963 ctg123 . cDNA_match 7000 9000 1.4e-40 + . ID=cDNA_match1;Target=cdna0123 964 2964 ### ##FASTA >ctg123 cttctgggcgtacccgattctcggagaacttgccgcaccattccgccttg tgttcattgctgcctgcatgttcattgtctacctcggctacgtgtggcta tctttcctcggtgccctcgtgcacggagtcgagaaaccaaagaacaaaaa aagaaattaaaatatttattttgctgtggtttttgatgtgtgttttttat aatgatttttgatgtgaccaattgtacttttcctttaaatgaaatgtaat cttaaatgtatttccgacgaattcgaggcctgaaaagtgtgacgccattc gtatttgatttgggtttactatcgaataatgagaattttcaggcttaggc ttaggcttaggcttaggcttaggcttaggcttaggcttaggcttaggctt aggcttaggcttaggcttaggcttaggcttaggcttaggcttaggcttag aatctagctagctatccgaaattcgaggcctgaaaagtgtgacgccattc >cnda0123 ttcaagtgctcagtcaatgtgattcacagtatgtcaccaaatattttggc agctttctcaagggatcaaaattatggatcattatggaatacctcggtgg aggctcagcgctcgatttaactaaaagtggaaagctggacgaaagtcata tcgctgtgattcttcgcgaaattttgaaaggtctcgagtatctgcatagt gaaagaaaaatccacagagatattaaaggagccaacgttttgttggaccg tcaaacagcggctgtaaaaatttgtgattatggttaaagg genometools-1.5.1/testdata/standard_gene_as_dag.gff3000066400000000000000000000033301211610345200225170ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene00001;Name=EDEN ctg123 . TF_binding_site 1000 1012 . + . ID=tfbs00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001;Name=EDEN.1 ctg123 . mRNA 1050 9000 . + . ID=mRNA00002;Parent=gene00001;Name=EDEN.2 ctg123 . mRNA 1300 9000 . + . ID=mRNA00003;Parent=gene00001;Name=EDEN.3 ctg123 . exon 1300 1500 . + . ID=exon00001;Parent=mRNA00003 ctg123 . exon 1050 1500 . + . ID=exon00002;Parent=mRNA00001,mRNA00002 ctg123 . exon 3000 3902 . + . ID=exon00003;Parent=mRNA00001,mRNA00003 ctg123 . exon 5000 5500 . + . ID=exon00004;Parent=mRNA00001,mRNA00002,mRNA00003 ctg123 . exon 7000 9000 . + . ID=exon00005;Parent=mRNA00001,mRNA00002,mRNA00003 ctg123 . CDS 1201 1500 . + 0 ID=cds00001;Parent=mRNA00001;Name=edenprotein.1 ctg123 . CDS 3000 3902 . + 0 ID=cds00001;Parent=mRNA00001;Name=edenprotein.1 ctg123 . CDS 5000 5500 . + 0 ID=cds00001;Parent=mRNA00001;Name=edenprotein.1 ctg123 . CDS 7000 7600 . + 0 ID=cds00001;Parent=mRNA00001;Name=edenprotein.1 ctg123 . CDS 1201 1500 . + 0 ID=cds00002;Parent=mRNA00002;Name=edenprotein.2 ctg123 . CDS 5000 5500 . + 0 ID=cds00002;Parent=mRNA00002;Name=edenprotein.2 ctg123 . CDS 7000 7600 . + 0 ID=cds00002;Parent=mRNA00002;Name=edenprotein.2 ctg123 . CDS 3301 3902 . + 0 ID=cds00003;Parent=mRNA00003;Name=edenprotein.3 ctg123 . CDS 5000 5500 . + 1 ID=cds00003;Parent=mRNA00003;Name=edenprotein.3 ctg123 . CDS 7000 7600 . + 1 ID=cds00003;Parent=mRNA00003;Name=edenprotein.3 ctg123 . CDS 3391 3902 . + 0 ID=cds00004;Parent=mRNA00003;Name=edenprotein.4 ctg123 . CDS 5000 5500 . + 1 ID=cds00004;Parent=mRNA00003;Name=edenprotein.4 ctg123 . CDS 7000 7600 . + 1 ID=cds00004;Parent=mRNA00003;Name=edenprotein.4 genometools-1.5.1/testdata/standard_gene_as_dag_sorted.gff3000066400000000000000000000027361211610345200241100ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 . + . ID=gene1;Name=EDEN ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1;Name=EDEN.1 ctg123 . CDS 1201 1500 . + 0 ID=CDS1;Parent=mRNA1;Name=edenprotein.1 ctg123 . CDS 3000 3902 . + 0 ID=CDS1;Parent=mRNA1;Name=edenprotein.1 ctg123 . CDS 5000 5500 . + 0 ID=CDS1;Parent=mRNA1;Name=edenprotein.1 ctg123 . CDS 7000 7600 . + 0 ID=CDS1;Parent=mRNA1;Name=edenprotein.1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1;Name=EDEN.2 ctg123 . exon 1050 1500 . + . Parent=mRNA1,mRNA2 ctg123 . CDS 1201 1500 . + 0 ID=CDS2;Parent=mRNA2;Name=edenprotein.2 ctg123 . CDS 5000 5500 . + 0 ID=CDS2;Parent=mRNA2;Name=edenprotein.2 ctg123 . CDS 7000 7600 . + 0 ID=CDS2;Parent=mRNA2;Name=edenprotein.2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1;Name=EDEN.3 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA1,mRNA3 ctg123 . CDS 3301 3902 . + 0 ID=CDS3;Parent=mRNA3;Name=edenprotein.3 ctg123 . CDS 3391 3902 . + 0 ID=CDS4;Parent=mRNA3;Name=edenprotein.4 ctg123 . exon 5000 5500 . + . Parent=mRNA1,mRNA2,mRNA3 ctg123 . CDS 5000 5500 . + 1 ID=CDS3;Parent=mRNA3;Name=edenprotein.3 ctg123 . CDS 5000 5500 . + 1 ID=CDS4;Parent=mRNA3;Name=edenprotein.4 ctg123 . CDS 7000 7600 . + 1 ID=CDS3;Parent=mRNA3;Name=edenprotein.3 ctg123 . CDS 7000 7600 . + 1 ID=CDS4;Parent=mRNA3;Name=edenprotein.4 ctg123 . exon 7000 9000 . + . Parent=mRNA1,mRNA2,mRNA3 ### genometools-1.5.1/testdata/standard_gene_as_tree.blocks000066400000000000000000000003131211610345200233510ustar00rootroot00000000000000TF_binding_site + (1000L, 9000L) 1 exon + (1050L, 9000L) 3 exon + (1050L, 9000L) 4 exon + (1300L, 9000L) 4 gene + (1000L, 9000L) 1 mRNA + (1050L, 9000L) 1 mRNA + (1050L, 9000L) 1 mRNA + (1300L, 9000L) 1 genometools-1.5.1/testdata/standard_gene_as_tree.gff3000066400000000000000000000014171211610345200227270ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.5 + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ### genometools-1.5.1/testdata/standard_gene_as_tree.header000066400000000000000000000000671211610345200233320ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 genometools-1.5.1/testdata/standard_gene_as_tree.hotspots000066400000000000000000000013161211610345200237630ustar00rootroot00000000000000x1=30, y1=90, x2=31, y2=106, gn.type=TF_binding_site x1=57, y1=243, x2=76, y2=259, gn.type=exon x1=34, y1=161, x2=76, y2=177, gn.type=exon x1=34, y1=202, x2=76, y2=218, gn.type=exon x1=399, y1=161, x2=446, y2=177, gn.type=exon x1=399, y1=202, x2=446, y2=218, gn.type=exon x1=399, y1=243, x2=446, y2=259, gn.type=exon x1=214, y1=161, x2=298, y2=177, gn.type=exon x1=214, y1=243, x2=298, y2=259, gn.type=exon x1=584, y1=161, x2=770, y2=177, gn.type=exon x1=584, y1=202, x2=770, y2=218, gn.type=exon x1=584, y1=243, x2=770, y2=259, gn.type=exon x1=57, y1=467, x2=770, y2=483, gn.type=mRNA x1=34, y1=385, x2=770, y2=401, gn.type=mRNA x1=34, y1=426, x2=770, y2=442, gn.type=mRNA x1=30, y1=314, x2=770, y2=330, gn.type=gene genometools-1.5.1/testdata/standard_gene_as_tree.recmaps000066400000000000000000000005361211610345200235350ustar00rootroot0000000000000030,90,31,106, TF_binding_site 30,162,770,178, gene 35,232,770,248, mRNA 35,232,76,248, exon 215,232,298,248, exon 400,232,446,248, exon 585,232,770,248, exon 35,274,770,290, mRNA 35,274,76,290, exon 400,274,446,290, exon 585,274,770,290, exon 58,314,770,330, mRNA 58,314,76,330, exon 215,314,298,330, exon 400,314,446,330, exon 585,314,770,330, exon genometools-1.5.1/testdata/standard_gene_as_tree.types000066400000000000000000000000371211610345200232430ustar00rootroot00000000000000TF_binding_site exon gene mRNA genometools-1.5.1/testdata/standard_gene_simple.gff3000066400000000000000000000013501211610345200225720ustar00rootroot00000000000000##gff-version 3 ctg123 . gene 1000 9000 . + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ### genometools-1.5.1/testdata/standard_gene_with_introns_as_tree.gff3000066400000000000000000000021741211610345200255370ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.500000 + . ID=gene1 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene1 ctg123 . mRNA 1050 9000 . + . ID=mRNA1;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA1 ctg123 . intron 1501 2999 . + . Parent=mRNA1 ctg123 . exon 3000 3902 . + . Parent=mRNA1 ctg123 . intron 3903 4999 . + . Parent=mRNA1 ctg123 . exon 5000 5500 . + . Parent=mRNA1 ctg123 . intron 5501 6999 . + . Parent=mRNA1 ctg123 . exon 7000 9000 . + . Parent=mRNA1 ctg123 . mRNA 1050 9000 . + . ID=mRNA2;Parent=gene1 ctg123 . exon 1050 1500 . + . Parent=mRNA2 ctg123 . intron 1501 4999 . + . Parent=mRNA2 ctg123 . exon 5000 5500 . + . Parent=mRNA2 ctg123 . intron 5501 6999 . + . Parent=mRNA2 ctg123 . exon 7000 9000 . + . Parent=mRNA2 ctg123 . mRNA 1300 9000 . + . ID=mRNA3;Parent=gene1 ctg123 . exon 1300 1500 . + . Parent=mRNA3 ctg123 . intron 1501 2999 . + . Parent=mRNA3 ctg123 . exon 3000 3902 . + . Parent=mRNA3 ctg123 . intron 3903 4999 . + . Parent=mRNA3 ctg123 . exon 5000 5500 . + . Parent=mRNA3 ctg123 . intron 5501 6999 . + . Parent=mRNA3 ctg123 . exon 7000 9000 . + . Parent=mRNA3 ### genometools-1.5.1/testdata/sw100K1.fsa000066400000000000000000000133101211610345200174140ustar00rootroot00000000000000>sp|100K_RAT|100 KD PROTEIN (EC MMSARGDFLNYALSLMRSHNDEHSDVLPVLDVCSLKHVAYVFQALIYWIKAMNQQTTLDTPQLE RKRTRELLELGIDNEDSEHENDDDTSQSATLNDKDDESLPAETGQNHPFFRRSDSMTFLGCIPP NPFEVPLAEAIPLADQPHLLQPNARKEDLFGRPSQGLYSSSAGSGKCLVEVTMDRNCLEVLPTK MSYAANLKNVMNMQNRQKKAGEDQSMLAEEADSSKPGPSAHDVAAQLKSSLLAEIGLTESEGPP LTSFRPQCSFMGMVISHDMLLGRWRLSLELFGRVFMEDVGAEPGSILTELGGFEVKESKFRREM EKLRNQQSRDLSLEVDRDRDLLIQQTMRQLNNHFGRRCATTPMAVHRVKVTFKDEPGEGSGVAR SFYTAIAQAFLSNEKLPNLDCIQNANKGTHTSLMQRLRNRGERDREREREREMRRSSGLRAGSR RDRDRDFRRQLSIDTRPFRPASEGNPSDDPDPLPAHRQALGERLYPRVQAMQPAFASKITGMLL ELSPAQLLLLLASEDSLRARVEEAMELIVAHGRENGADSILDLGLLDSSEKVQENRKRHGSSRS VVDMDLDDTDDGDDNAPLFYQPGKRGFYTPRPGKNTEARLNCFRNIGRILGLCLLQNELCPITL NRHVIKVLLGRKVNWHDFAFFDPVMYESLRQLILASQSSDADAVFSAMDLAFAVDLCKEEGGGQ VELIPNGVNIPVTPQNVYEYVRKYAEHRMLVVAEQPLHAMRKGLLDVLPKNSLEDLTAEDFRLL VNGCGEVNVQMLISFTSFNDESGENAEKLLQFKRWFWSIVERMSMTERQDLVYFWTSSPSLPAS EEGFQPMPSITIRPPDDQHLPTANTCISRLYVPLYSSKQILKQKLLLAIKTKNFGFV >sp|104K_THEPA|104 KD MICRONEME-RHOPTRY ANTIGE MKFLILLFNILCLFPVLAADNHGVGPQGASGVDPITFDINSNQTGPAFLTAVEMAGVKYLQVQH GSNVNIHRLVEGNVVIWENASTPLYTGAIVTNNDGPYMAYVEVLGDPNLQFFIKSGDAWVTLSE HEYLAKLQEIRQAVHIESVFSLNMAFQLENNKYEVETHAKNGANMVTFIPRNGHICKMVYHKNV RIYKATGNDTVTSVVGFFRGLRLLLINVFSIDDNGMMSNRYFQHVDDKYVPISQKNYETGIVKL KDYKHAYHPVDLDIKDIDYTMFHLADATYHEPCFKIIPNTGFCITKLFDGDQVLYESFNPLIHC INEVHIYDRNNGSIICLHLNYSPPSYKAYLVLKDTGWEATTHPLLEEKIEELQDQRACELDVNF ISDKDLYVAALTNADLNYTMVTPRPHRDVIRVSDGSEVLWYYEGLDNFLVCAWIYVSDGVASLV HLRIKDRIPANNDIYVLKGDLYWTRITKIQFTQEIKRLVKKSKKKLAPITEEDSDKHDEPPEGP GASGLPPKAPGDKEGSEGHKGPSKGSDSSKEGKKPGSGKKPGPAREHKPSKIPTLSKKPSGPKD PKHPRDPKEPRKSKSPRTASPTRRPSPKLPQLSKLPKSTSPRSPPPPTRPSSPERPEGTKIIKT SKPPSPKPPFDPSFKEKFYDDYSKAASRSKETKTTVVLDESFESILKETLPETPGTPFTTPRPV PPKRPRTPESPFEPPKDPDSPSTSPSEFFTPPESKRTRFHETPADTPLPDVTAELFKEPDVTAE TKSPDEAMKRPRSPSEYEDTSPGDYPSLPMKRHRLERLRLTTTEMETDPGRMAKDASGKPVKLK RSKSFDDLTTVELAPEPKASRIVVDDEGTEADDEETHPPEERQKTEVRRRRPPKKPSKSPRPSK PKKPKKPDSAYIPSILAILVVSLIVGIL >sp|108_LYCES|PROTEIN 108 PRECURSO MASVKSSSSSSSSSFISLLLLILLVIVLQSQVIECQPQQSCTASLTGLNVCAPFLVPGSPTAST ECCNAVQSINHDCMCNTMRIAAQIPAQCNLPPLSCSAN >sp|10KD_VIGUN|10 KD PROTEIN PRECURSOR (CLONE PSAS10 MEKKSIAGLCFLFLVLFVAQEVVVQSEAKTCENLVDTYRGPCFTTGSCDDHCKNKEHLLSGRCR DDVRCWCTRNC >sp|110K_PLAKN|110 KD ANTIGEN (PK110) (FRAGMENT FNSNMLRGSVCEEDVSLMTSIDNMIEEIDFYEKEIYKGSHSGGVIKGMDYDLEDDENDEDEMTE QMVEEVADHITQDMIDEVAHHVLDNITHDMAHMEEIVHGLSGDVTQIKEIVQKVNVAVEKVKHI VETEETQKTVEPEQIEETQNTVEPEQTEETQKTVEPEQTEETQNTVEPEQIEETQKTVEPEQTE EAQKTVEPEQTEETQKTVEPEQTEETQKTVEPEQTEETQKTVEPEQTEETQKTVEPEQTEETQK TVEPEQTEETQKTVEPEQTEETQNTVEPEPTQETQNTVEP >sp|11S3_HELAN|11S GLOBULIN SEED STORAGE PROTEIN G3 PR MASKATLLLAFTLLFATCIARHQQRQQQQNQCQLQNIEALEPIEVIQAEAGVTEIWDAYDQQFQ CAWSILFDTGFNLVAFSCLPTSTPLFWPSSREGVILPGCRRTYEYSQEQQFSGEGGRRGGGEGT FRTVIRKLENLKEGDVVAIPTGTAHWLHNDGNTELVVVFLDTQNHENQLDENQRRFFLAGNPQA QAQSQQQQQRQPRQQSPQRQRQRQRQGQGQNAGNIFNGFTPELIAQSFNVDQETAQKLQGQNDQ RGHIVNVGQDLQIVRPPQDRRSPRQQQEQATSPRQQQEQQQGRRGGWSNGVEETICSMKFKVNI DNPSQADFVNPQAGSIANLNSFKFPILEHLRLSVERGELRPNAIQSPHWTINAHNLLYVTEGAL RVQIVDNQGNSVFDNELREGQVVVIPQNFAVIKRANEQGSRWVSFKTNDNAMIANLAGRVSASA ASPLTLWANRYQLSREEAQQLKFSQRETVLFAPSFSRGQGIRASR >sp|11SB_CUCMA|11S GLOBULIN BETA SUBUNIT PRECURSO MARSSLFTFLCLAVFINGCLSQIEQQSPWEFQGSEVWQQHRYQSPRACRLENLRAQDPVRRAEA EAIFTEVWDQDNDEFQCAGVNMIRHTIRPKGLLLPGFSNAPKLIFVAQGFGIRGIAIPGCAETY QTDLRRSQSAGSAFKDQHQKIRPFREGDLLVVPAGVSHWMYNRGQSDLVLIVFADTRNVANQID PYLRKFYLAGRPEQVERGVEEWERSSRKGSSGEKSGNIFSGFADEFLEEAFQIDGGLVRKLKGE DDERDRIVQVDEDFEVLLPEKDEEERSRGRYIESESESENGLEETICTLRLKQNIGRSVRADVF NPRGGRISTANYHTLPILRQVRLSAERGVLYSNAMVAPHYTVNSHSVMYATRGNARVQVVDNFG QSVFDGEVREGQVLMIPQNFVVIKRASDRGFEWIAFKTNDNAITNLLAGRVSQMRMLPLGVLSN MYRISREEAQRLKYGQQEMRVLSPGRSQGRRE >sp|120K_RICRI|120 KD SURFACE-EXPOSED PROTEI MVIQSANATGQVNFRHIVDVGADGTTAFKTAASKVTITQDSNFGNTDFGNLAAQIKVPNAITLT GNFTGDASNPGNTAGVITFDANGTLESASADANVAVTNNITAIEASGAGVVQLSGTHAAELRLG NAGSIFKLADGTVINGKVNQTALVGGALAAGTITLDGSATITGDIGNAGGAAALQRITLANDAK KTLTLGGANIIGAGGGTIDLQANGGTIKLTSTQNNIVVDFDLAIATDQTGVVDASSLTNAQTLT INGKIGTIGANNKTLGQFNIGSSKTVLSNGNVAINELVIGNDGAVQFAHDTYLITRTTNAAGQG KIIFNPVVNNGTTLAAGTNLGSATNPLAEINFGSKGVNVDTVLNVGEGVNLYATNITTTDANVG SFVFNAGGTNIVSGTVGGQQGNKFNTVALENGTTVKFLGNATFNGNTTIAANSTLQIGGNYTAD CVASADGTGIVEFVNTGPITVTLNKQAAPVNALKQITVSGPGNVVINEIGNAGNHHGAVTDTIA FENSSLGAVVFLPRGIPFNDAGNTMPLTIKSTVGNKTAKGFDVPSVVVLGVDSVIADGQVIGDQ NNIVGLGLGSDNGIIVNATTLYAGISTLNNNQGTVTLSGGVPNTPGTVYGLGTGIGASKFKQVT FTTDYNNLGNIIATNATINDGVTVTTGGIAGIGFDGKITLGSVNGNGNVRFADGILSNSTSMIG TTKANNGTVTYLGNAFVGNIGDSDTPVASVRFTGSDSGAGLQGNIYSQVIDFGTYNLGIVNSNI ILGGGTTAINGKIDLVTNTLTFASGTSTWGNNTSIETTLTLANGNIGHIVILEGAQVNTTTTGT TTIKVQDNANANFSGTQTYTLIQGGARFNGTLGSPNFAVTGSNRFVNYSLIRAANQDYVITRTN NAENVVTNDIANSPFGGAPGVDQNVTTFVNATNTAAYNNLLLAKNSANSANFVGAIVTDTSAAI TNVQLDLAKDIQAQLGNRLGALRYLGTPETAEMAGPEAGAISAAVAAGDEAIDNVAYGIWAKPF YTDAHQSKKGGLAGYKAKTTGVVIGLDTLANDNLMIGAAIGITKTDIKHQDYKKGDKTDVNGFS FSLYGAQQLVKNFFAQGSAIFSLNQVKNKSQRYFFDANGNMSKQIAAGHYDNMTFGGNLTVGYD YNAMQGVLVTPMAGLSYLKSSDENYKETGTTVANKQVNSKFSDRTDLIVGAKVAGSTMNRTDLA VYPEVHAFVVHKVTGRLSKTQSVLDGQVTPCINQPDRTTKTSYNLGLSASIRSDAKMEYGIGYD AQISSKYTAHQGTLKVRVNF >sp|128U_DROME|GTP-BINDING PROTEIN 128U MITILEKISAIESEMARTQKNKATSAHLGLLKANVAKLRRELISPKGGGGGTGEAGFEVAKTGD ARVGFVGFPSVGKSTLLSNLAGVYSEVAAYEFTTLTTVPGCIKYKGAKIQLLDLPGIIEGAKDG KGRGRQVIAVARTCNLIFMVLDCLKPLGHKKLLEHELEGFGIRLNKKPPNIYYKRKDKGGINLN SMVPQSELDTDLVKTILSEYKIHNADITLRYDATSDDLIDVIEGNRIYIPCIYLLNKIDQISIE ELDVIYKIPHCVPISAHHHWNFDDLLELMWEYLRLQRIYTKPKGQLPDYNSPVVLHNERTSIED FCNKLHRSIAKEFKYALVWGSSVKHQPQKVGIEHVLNDEDVVQIVKKV >sp|12AH_CLOS4|12-ALPHA-HYDROXYSTEROID DEHYDROGENASE ( MIFDGKVAIITGGGKAKSIGYGIAVAYAK >sp|12KD_FRAAN|AUXIN-REPRESSED 1 MVLLDKLWDDIVAGPQPERGLGMLRKVPQPLNLKDEGESSKITMPTTPTTPVTPTTPISARKDN VWRSVFHPGSNLSSKTMGNQVFDSPQPNSPTVYDWMYSGETRSKHHR >sp|12KD_MYCLE|12 KD PROTEI MNDIIALKFHISLNATTWIGRIGMVILPLLVYFITYRWCIGLQRSDRAVLEHGIETGIIKRLPH GAYIELHQPLGPVDDHGHPIPLEYQGTAVPKRMNKLGSAGSPSSGSFLFADPVSEDAALREATH VAEQRALTALREHQDSIASSPNGERGKH genometools-1.5.1/testdata/sw100K1.magicmatch000066400000000000000000000016121211610345200207420ustar00rootroot000000000000002f5423769db8f8ac34b12ebe0ce79ba4 sp|100K_RAT|100 KD PROTEIN (EC 828ea1caefdf0882c2fc7dfe0639d422 sp|104K_THEPA|104 KD MICRONEME-RHOPTRY ANTIGE 45c6e4aaae0c760b5133f6b8f57fb324 sp|108_LYCES|PROTEIN 108 PRECURSO 119dbffe7be45367410b8749c11d46cb sp|10KD_VIGUN|10 KD PROTEIN PRECURSOR (CLONE PSAS10 5f6bbcf62cb8fa766d6b747b290d845d sp|110K_PLAKN|110 KD ANTIGEN (PK110) (FRAGMENT 219a6cb625d16d7f5905c87cc84adb0d sp|11S3_HELAN|11S GLOBULIN SEED STORAGE PROTEIN G3 PR e959b769c2d6bab3b627627a62f7ef64 sp|11SB_CUCMA|11S GLOBULIN BETA SUBUNIT PRECURSO 882f42d03c8a1fb46ca7df722a747711 sp|120K_RICRI|120 KD SURFACE-EXPOSED PROTEI 4e854ba5f1c7cb8d92f6d8da40d4c0d8 sp|128U_DROME|GTP-BINDING PROTEIN 128U d26d8fd55622ce5c5a04bf0815bb4767 sp|12AH_CLOS4|12-ALPHA-HYDROXYSTEROID DEHYDROGENASE ( ee73cd9bf7cdd70231c1e16f4d3470ee sp|12KD_FRAAN|AUXIN-REPRESSED 1 d1641d3d5749375e92bedd28a1daf6c7 sp|12KD_MYCLE|12 KD PROTEI genometools-1.5.1/testdata/sw100K2.fsa000066400000000000000000000132171211610345200174230ustar00rootroot00000000000000>sp|ALR_LACPL|ALANINE RACEMASE (EC MVVIGEHRHTQVTVDLQAIKTNISNEMAQKDELTELWAVVKANGYGHGIIQVAQAAKEAGATGF CVAILDEALALRAAGFAEPILVLGITEPEYAPLVAEKDISLAVGTQDWLTTAAAILAANQVTTP LHVHLALDTGMGRIGFQTPEELATAVTTLRQPQSPFDFEGIFTHFATADQADDTYFTHQLNNWK HLIAVVDELPRYVHVSNSATSLWHQACNGNMVRFGVALYGLNPSGRELSAPYPLQPALSLTARL TFVKRLARGKSVSYGATYTAAQDEWIGTVPIGYADGYERRLQGFHVLVDGEFCEIVGRVCMDQL MVRLPHEVPVGAKVTLVGTDGARTISLQDIADYCGTIHYEIACGLAPRVPRVYID >sp|ALR_MOUSE|AUGMENTER OF LIVER REGENERATIO MRTQQKRDIKFREDCPQDREELGRHTWAFLHTLAAYYPDRPTPEQQQDMAQFIHIFSKFYPCEE CAEDIRKRIGRNQPDTSTRVSFSQWLCRLHNEVNRKLGKPDFDCSRVDERWRDGWKDGSCD >sp|ALR_MYCLE|ALANINE RACEMASE (EC MAVTPISLRPGVLAEAVVDLGAIDYNVRVLREHAGMAQLMVVLKADAYGHGATQVALAALAAGA AELGVATVDEALALRADGISAPVLAWLHPPGIDFGPALLADVQIAVSSVRQLDELLDAVRRTGR TATVTVKADTGLNRNGVVTDQYPAMLTALQRAVVEDAVRLRGLMSHLVYADQPDNPSNDVQGKR FAALLAQAHEQGLRFEVAHLSNSSATMSRPDLAYDLVRPGIAVYGLSPVPSRGDMGLIPAMTVK CAVAMVKSIRAGEGVSYGHDWIAQHDTNLALLPVGYADGVFRSLGGRLDVLINGKRRPGVGRIC MDQFVVDLGPGPIDVAEGDEAILFGPGARGEPTAQDWADLLGTIHYEVVTSLRGRITRTYREAQ TVDR >sp|ALR_MYCSM|ALANINE RACEMASE (EC MQTTEPMTPPAPLASAQTVIDLGAIDHNVRVLRELAGSADVMAVVKADAYGHGALPVARTALAA GAAALGVATIPEALALREGGITAPVLAWLHPPGTDFAPAIAADVEVAVSSRRQLEQVTAAAAEV GRTATVTVKVDTGLSRNGVGAADYPEVLDVLRRAQADGAIRVRGLMSHLVHGDDPENPFNGLQG QRLADMRVYAREHGVDYEVAHLCNSPAAMTRPDLAFEMVRPGISLYGLSPIPERGDMGLRPAMT LKCPVALVRSVHAGDGVSYGHRWVADRDTTLGLLPIGYADGVYRALSGRIDVLIKGRRRRAVGR ICMDQFVVDLGPDADDVAVGDDAILFGPGANGEPTAQDWAELLDTIHYEVVTSPRGRVTRTYLP AGQQD >sp|ALR_MYCTU|ALANINE RACEMASE (EC MKRFWENVGKPNDTTDGRGTTSLAMTPISQTPGLLAEAMVDLGAIEHNVRVLREHAGHAQLMAV VKADGYGHGATRVAQTALGAGAAELGVATVDEALALRADGITAPVLAWLHPPGIDFGPALLADV QVAVSSLRQLDELLHAVRRTGRTATVTVKVDTGLNRNGVGPAQFPAMLTALRQAMAEDAVRLRG LMSHMVYADKPDDSINDVQAQRFTAFLAQAREQGVRFEVAHLSNSSATMARPDLTFDLVRPGIA VYGLSPVPALGDMGLVPAMTVKCAVALVKSIRAGEGVSYGHTWIAPRDTNLALLPIGYADGVFR SLGGRLEVLINGRRCPGVGRICMDQFMVDLGPGPLDVAEGDEAILFGPGIRGEPTAQDWADLVG TIHYEVVTSPRGRITRTYREAENR >sp|ALR_PSEFL|ALANINE RACEMASE (EC MXPARALIDLQALRHNYQLAAEVIG >sp|ALR_RAT|AUGMENTER OF LIVER REGENERATIO MRTQQKRDIKFREDCPQDREELGRNTWAFLHTLAAYYPDMPTPEQQQDMAQFIHIFSKFYPCEE CAEDIRKRIDRSQPDTSTRVSFSQWLCRLHNEVNRKLGKPDFDCSRVDERWRDGWKDGSCD >sp|ALR_STRPN|ALANINE RACEMASE (EC AGACMGYGATYQADSEQVIATVPIGYADGWTRDMQNFSVLVDGQACPIVGRVSMDQITIRLPKL YPLGTKVTLIGSNGDKEITATQVATYRVTINYEEVCLLSDRIPREYY >sp|ALR_SYNY3|ALANINE RACEMASE (EC MVLSRDVKSSPEQASRVSSTLSGYRLAELIRQRAWVEIDQAALVHNVRQFRQYVGPKTNLMAVV KADAYGHGAVRVAQTALQAGADWLAIATLGEGIELREAGITAPILLLGGINSPEEIEAIAHWRL QPTLCSPEQAQLFNDILLKLGKVLPVHLKLDTGMTRLGTPWPQAANFVGLVQSLPQLRLASLYS HLATADDPNTATMLQQQERFAKAIASLRQARLPIPKLHLANSAATLHGQAWHYDMVRVGLGLYG LYPAPHLGDCLDLKPVLTVRAKITQIRTIPPGTGVSYGHQFVSEETMPMAVVGIGYADGVPRNL SNQLEVLLRGQPVRQIGAITMDQMMVDLRGIDDPQVGEVVTLIGQDGDRQITADHWASTLGTIS WEILCGFKHRLPRILI >sp|ALS1_CANAL|AGGLUTININ-LIKE PROTEIN 1 PRECURSO MLQQFTLLFLYLSIASAKTITGVFDSFNSLTWSNAANYAFKGPGYPTWNAVLGWSLDGTSANPG DTFTLNMPCVFKYTTSQTSVDLTADGVKYATCQFYSGEEFTTFSTLTCTVNDALKSSIKAFGTV TLPIAFNVGGTGSSTDLEDSKCFTAGTNTVTFNDGDKDISIDVEFEKSTVDPSAYLYASRVMPS LNKVTTLFVAPQCENGYTSGTMGFSSSNGDVAIDCSNIHIGITKGLNDWNYPVSSESFSYTKTC TSNGIQIKYQNVPAGYRPFIDAYISATDVNQYTLAYTNDYTCAGSRSQSKPFTLRWTGYKNSDA GSNGIVIVATTRTVTDSTTAVTTLPFNPSVDKTKTIEILQPIPTTTITTSYVGVTTSYSTKTAP IGETATVIVDVPYHTTTTVTSEWTGTITTTTTRTNPTDSIDTVVVQVPSPNPTVSTTEYWSQSF ATTTTVTAPPGGTDTVIIREPPNHTVTTTEYWSQSFATTTTVTAPPGGTDSVIIREPPNPTVTT TEYWSQSFATTTTVTAPPGGTDSVIIREPPNPTVTTTEYWSQSYATTTTVTAPPGGTDSVIIRE PPNHTVTTTEYWSQSYATTTTVTAPPGGTDTVIIREPPNHTVTTTEYWSQSFATTTTVTGPPSG TDTVIIREPPNPTVTTTEYWSQSYATTTTITAPPGETDTVLIREPPNHTVTTTEYWSQSYATTT TVTAPPGETDTVLIREPPNHTVTTTEYWSQSYATTTTVTAPPGGTDTVIIREPPNPTVTTTEYW SQSFATTTTVTAPPGGTDTVIIYESMSSSKISTSSNDITSIIPSFSRPHYVNSTTSDLSTFESS SMNTPTSISSDGMLLSSTTLVTESETTTESICSDGKECSRLSSSSGIVTNPDSNESSIVTSTVP TASTMSDSLSSTDGISATSSDNVSKSGVSVTTETSVTTIQTTPNPLSSSVTSLTQLSSIPSVSE SESKVTFTSNGDNQSGTHDSQSTSTEIEIVTTSSTKVLPPVVSSNTDLTSEPTNTREQPTTLST TSNSITEDITTSQPTGDNGDNTSSTNPVPTVATSTLASASEEDNKSGSHESASTSLKPSMGENS GLTTSTEIEATTTSPTEAPSPAVSSGTDVTTEPTDTREQPTTLSTTSKTNSESVATTQATNENG GKSPSTDLTSSLTTGTSASTSANSELVTSGSVTGGAVASASNDQSHSTSVTNSNSIVSNTPQTT LSQQVTSSSPSTNTFIASTYDGSGSIIQHSTWLYGLITLLSLFI >sp|ALS2_CANAL|AGGLUTININ-LIKE PROTEIN 2 PRECURSOR (FR MLLQFLLLSLCVSVATAKVITGVFNSFDSLTWTRAGNYAYKGPNRPTWNAVLGWSLDGTSANPG DTFTLNMPCVFKFITDQTSVDLTAEGVKYATCQFYSGEEFTTFSSLKCTVSNTLTSSIKALGTV TLPISFNVGGTGSSVDLESSQCFKAGTNTVTFNDGDKKISIDVDFEKTNEDASGYFIASRLIPS INKVSITYVAPQCANGYTSGAMGFIVLTGDTTIDCSNVHVGITKGLNDWNFPVSSDSLSYNKTC SSTGISITYENVPAGYRPFFDVYTSVSGQNRQLRYTNDYACVGSSLQSKPFNLRLRGYNNSEAN SNGFVIVATTRTVTDSTTAVTTLPFNPSVDKTKTIEILQPIPTTTITTSYVGVTTSYSTKTAPI GETATVIVDVPYHTTTTVTSEWTGTITTTTTRTNPTDSIDTVVVQVPSPNPTVTTTEYWSQSYA TTTTVTAPPGGTDSVIIREP >sp|ALS3_CANAL|AGGLUTININ-LIKE PROTEIN 3 PRECURSO MLQQYTLLLIYLSVATAKTITGVFNSFNSLTWSNAATYNYKGPGTPTWNAVLGWSLDGTSASPG DTFTLNMPCVFKFTTSQTSVDLTAHGVKYATCQFQAGEEFMTFSTLTCTVSNTLTPSIKALGTV TLPLAFNVGGTGSSVDLEDSKCFTAGTNTVTFNDGGKKISINVDFERSNVDPKGYLTDSRVIPS LNKVSTLFVAPQCANGYTSGTMGFANTYGDVQIDCSNIHVGITKGLNDWNYPVSSESFSYTKTC SSNGIFITYKNVPAGYRPFVDAYISATDVNSYTLSYANEYTCAGGYWQRAPFTLRWTGYRNSDA GSNGIVIVATTRTVTDSTTAVTTLPFDPNRDKTKTIEILKPIPTTTITTSYVGVTTSYSTKTAP IGETATVIVDIPYHTTTTVTSKWTGTITSTTTHTNPTDSIDTVIVQVPSPNPTVTTTEYWSQSF ATTTTITGPPGNTDTVLIREPPNHTVTTTEYWSESYTTTSTFTAPPGGTDSVIIKEPPNPTVTT TEYWSESYTTTSTFTAPPGGTDSVIIKEPPNHTVTTTEYWSQSYTTTTTVTAPPGGTDTVLVRE PPNHTVTTTEYWSQSYTTTTTVIAPPGGTDSVIIREPPNPTVTTTEYWSQSYATTTTITAPPGE TDTVLIREPPNHTVTTTEYWSQSYATTTTITAPPGETDTVLIREPPNHTVTTTEYWSQSFATTT TVTAPPGGTDTVIIREPPNHTVTTTEYWSQSYATTTTITAPPGETDTVLIREPPNHTVTTTEYW SQSYATTTTIIAPPGETDTVLIREPPNPTVTTTEYWSQSYTTATTVTAPPGGTDTVIIYDTMSS SEISSFSRPHYTNHTTLWSTTWVIETKTITETSCEGDKGCSWVSVSTRIVTIPNNIETPMVTNT VDSTTTESTSQSPSGIFSESGVSVETESSTVTTAQTNPSVPTTESEVVFTTKGNNENGPYESPS TNVKSSMDENSEFTTSTAASTSTDIENETIATTGSVEASSPIISSSADETTTVTTTAESTSVIE QPTNNNGGGKAPSATSSPSTTTTANNDSVITGTTSTNQSQSQSQYNSDTQQTTLSQQMTSSLVS LHMLTTFDGSGSVIQHSTWLCGLITLLSLFI genometools-1.5.1/testdata/sw100K2.magicmatch000066400000000000000000000015571211610345200207530ustar00rootroot00000000000000ab29483fe97ad9a018c2048587550b62 sp|ALR_LACPL|ALANINE RACEMASE (EC 7b4e85c042820e17bff3a081bcf128db sp|ALR_MOUSE|AUGMENTER OF LIVER REGENERATIO cde4ef824416aad11121e34d00cb03f6 sp|ALR_MYCLE|ALANINE RACEMASE (EC 71aec2904e1cf3417ce407ab480ff13c sp|ALR_MYCSM|ALANINE RACEMASE (EC 350c5a7adef926d6797d14ebe93c1f37 sp|ALR_MYCTU|ALANINE RACEMASE (EC eebe67006e5756cc6f3bb03a4dbe3ad9 sp|ALR_PSEFL|ALANINE RACEMASE (EC 16f4f8ea56c84c3c43eb6ab83762844e sp|ALR_RAT|AUGMENTER OF LIVER REGENERATIO 8cd8a8b64a87e1e7e1b16b390b87e127 sp|ALR_STRPN|ALANINE RACEMASE (EC 667123c3b2557916df4f1c7c1ee5025d sp|ALR_SYNY3|ALANINE RACEMASE (EC a8fc29f1d17c132bc3606d2ffad9c7fc sp|ALS1_CANAL|AGGLUTININ-LIKE PROTEIN 1 PRECURSO 8faafd8d3867e9bcad779aa8d318b4a2 sp|ALS2_CANAL|AGGLUTININ-LIKE PROTEIN 2 PRECURSOR (FR 1e52c0abdb56f11036d6501235730288 sp|ALS3_CANAL|AGGLUTININ-LIKE PROTEIN 3 PRECURSO genometools-1.5.1/testdata/tRNA.dos.fas000066400000000000000000000030671211610345200177460ustar00rootroot00000000000000>Homo_sapiens_chr6.trna95-AlaAGC (58249908-58249836) Ala (AGC) 73 bp Sc: 42.26 GGGGAATTAGCTCAAGCGGTAGAGCGCTCCCTTAGCATGCGAGAGGTAGCGGGATCGACG CCCCCATTCTCTA >Homo_sapiens_chr6.trna25-AlaAGC (26859897-26859969) Ala (AGC) 73 bp Sc: 46.89 GGGGGATTAGCTCAAGCGGTAGGGTGCCTGCTTAGCATGCAAGAGGTAGCAGGATCGACG CCTGCATTCTCCA >Homo_sapiens_chr1.trna87-AlaAGC (148284076-148284006) Ala (AGC) 71 bp Sc: 48.21 GGGGGTGTAGATCAGTGGTAGGGCGCACGCTTAGCATGCATGAGGCCCTGGGTCAATCCC CAGCACCTCCA >Homo_sapiens_chr6.trna94-AlaAGC (58250620-58250548) Ala (AGC) 73 bp Sc: 54.62 GGGGGATTAGCTCAAGCGGTAGAGCGCCTGCTTAGCATGCAAGAGGTAGCAGGATCGATG CCTGCATTCTCCA >Homo_sapiens_chr6.trna160-AlaAGC (26881822-26881750) Ala (AGC) 73 bp Sc: 54.69 GGGGAATTGGCTCAAGCGGTAGAGCGCTTGCTTAGCATGCAAGAGGTAGCAGGATCGACG CCTGCACTCTCCA >Homo_sapiens_chr6.trna23-AlaAGC (26836235-26836307) Ala (AGC) 73 bp Sc: 54.69 GGGGAATTGGCTCAAGCGGTAGAGCGCTTGCTTAGCATGCAAGAGGTAGCAGGATCGACG CCTGCACTCTCCA >Homo_sapiens_chr6.trna90-AlaAGC (58295475-58295403) Ala (AGC) 73 bp Sc: 54.84 GGGGAATTAGCGCAAGTGGTAGAGTGCTTGCTTAGCATGCAAGAGGTAGTGGGATCGATG CCCACATTCTCCA >Homo_sapiens_chr6.trna89-AlaAGC (58304654-58304582) Ala (AGC) 73 bp Sc: 57.89 GGGGAATTAGCCCAAGTGGTAGAGCGCTTGCTTAGCATGCAAGAGGTAGTGGGATCGATG CCCACATTCTCCA >Homo_sapiens_chr14.trna9-AlaAGC (88515195-88515267) Ala (AGC) 73 bp Sc: 59.85 GGGGAATTAGCTCAAGTGGTAGAGCGCTCGCTTAGCATGCGAGAGGTAGTGGGATCGATG CCCGCATTCTCCA >Homo_sapiens_chr6.trna18-AlaAGC (26781569-26781641) Ala (AGC) 73 bp Sc: 60.72 GGGGAATTAGCTCAAGTGGTAGAGCGCTTGCTTAGCATGCAAGAGGTAGTGGGATCAATG CCCACATTCTCCA genometools-1.5.1/testdata/target_attribute_swapped_range.gff3000066400000000000000000000007271211610345200247020ustar00rootroot00000000000000##gff-version 3 ##sequence-region 2L 1 23011544 2L blastp_Dmel_proteomic match 11344 11483 . - . ID=proteomic_PAp00018945_HIT_Dmel_proteomic;Name=proteomic_PAp00018945_HIT;program=blastp;programversion=1.0;sourcename=Dmel_proteomic;Target=proteomic_PAp00018945_hsp_0 2 74 - 2L blastp_Dmel_proteomic match_part 11344 11344 0.97 - . Name=proteomic_PAp00018945_hsp_0;Parent=proteomic_PAp00018945_HIT_Dmel_proteomic;target_type=match;Target=proteomic_PAp00018945_hsp_0 2 1 - genometools-1.5.1/testdata/target_attribute_without_strand.gff3000066400000000000000000000001411211610345200251270ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr 1 10000 chr . gene 1000 9000 0.5 + . Target=est 1 1000 genometools-1.5.1/testdata/terminator_separation.gff3000066400000000000000000000002171211610345200230350ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 1000 9000 0.5 + . ID=gene1 ### ctg123 . mRNA 1050 9000 . + . Parent=gene1 genometools-1.5.1/testdata/test1.fasta000066400000000000000000000006371211610345200177430ustar00rootroot00000000000000>HWI-EAS306_9_FC305MP_6_1_773_1590 AAATAGGAAAGCACAGTTGAATGTGCTTTATTT >HWI-EAS306_9_FC305MP_6_1_1240_1912 ACGTAACTTCTGGGGCTATTCTTACAGTAGTGA >HWI-EAS306_9_FC305MP_6_1_1331_1843 ACGCAACTATCTTCATTATGTCAAGAAATACCA >HWI-EAS306_9_FC305MP_6_1_336_1194 AATTGATGTTCACATATCTTGATTAGATGGTTG >HWI-EAS306_9_FC305MP_6_1_1651_244 AAATTTCTCAATATACAAGGGATCCATGGTCCA >HWI-EAS306_9_FC305MP_6_1_160_327 ACAACACATCCTGGCTCCTTCCGATGCATTCTC genometools-1.5.1/testdata/test1.fastq000066400000000000000000000011671211610345200177620ustar00rootroot00000000000000@HWI-EAS306_9_FC305MP_6_1_773_1590 AAATAGGAAAGCACAGTTGAATGTGCTTTATTT + IIIIIIIIIGIIIIII1.I+I:):H(II2II52 @HWI-EAS306_9_FC305MP_6_1_1240_1912 ACGTAACTTCTGGGGCTATTCTTACAGTAGTGA + III;IFIIIIIIIDIIIIIIDDIFB2:5>?E;6 @HWI-EAS306_9_FC305MP_6_1_1331_1843 ACGCAACTATCTTCATTATGTCAAGAAATACCA + IIIIIII3IIII5III6III+GIIIIFIC;ICC @HWI-EAS306_9_FC305MP_6_1_336_1194 AATTGATGTTCACATATCTTGATTAGATGGTTG + IIIIIIIIIIII%IIII/II4II%4$&I%)II$ @HWI-EAS306_9_FC305MP_6_1_1651_244 AAATTTCTCAATATACAAGGGATCCATGGTCCA + IIIIIIIIIIIIIIII=IIIIBIIIFII8@II, @HWI-EAS306_9_FC305MP_6_1_160_327 ACAACACATCCTGGCTCCTTCCGATGCATTCTC + IIIIIIIIIIIIIIIII=IICI)II.I>'I>IH genometools-1.5.1/testdata/test10_multiline.fastq000066400000000000000000000004231211610345200221160ustar00rootroot00000000000000@HWI-EAS306_9_FC305MP_6_1_773_1590 AAATAGGAAAGCACAGTTGAATGTGCTTTATTT CGTACGTACGGCGCGCGGCCCCGTTATACGG + IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIGIIIIII1.I+I:):H(II2II52 @HWI-EAS306_9_FC305MP_6_1_1240_1912 ACGTAACTTCTGGGGCTATTCTTACAGTAGTGA + III;IFIIIIIIIDIIIIIIDDIFB2:5>?E;6 genometools-1.5.1/testdata/test2_wrong_begin.fastq000066400000000000000000000011661211610345200223420ustar00rootroot00000000000000HWI-EAS306_9_FC305MP_6_1_773_1590 AAATAGGAAAGCACAGTTGAATGTGCTTTATTT + IIIIIIIIIGIIIIII1.I+I:):H(II2II52 @HWI-EAS306_9_FC305MP_6_1_1240_1912 ACGTAACTTCTGGGGCTATTCTTACAGTAGTGA + III;IFIIIIIIIDIIIIIIDDIFB2:5>?E;6 @HWI-EAS306_9_FC305MP_6_1_1331_1843 ACGCAACTATCTTCATTATGTCAAGAAATACCA + IIIIIII3IIII5III6III+GIIIIFIC;ICC @HWI-EAS306_9_FC305MP_6_1_336_1194 AATTGATGTTCACATATCTTGATTAGATGGTTG + IIIIIIIIIIII%IIII/II4II%4$&I%)II$ @HWI-EAS306_9_FC305MP_6_1_1651_244 AAATTTCTCAATATACAAGGGATCCATGGTCCA + IIIIIIIIIIIIIIII=IIIIBIIIFII8@II, @HWI-EAS306_9_FC305MP_6_1_160_327 ACAACACATCCTGGCTCCTTCCGATGCATTCTC + IIIIIIIIIIIIIIIII=IICI)II.I>'I>IH genometools-1.5.1/testdata/test3_different_seqnames.fastq000066400000000000000000000012241211610345200237000ustar00rootroot00000000000000@HWI-EAS306_9_FC305MP_6_1_773_1590 AAATAGGAAAGCACAGTTGAATGTGCTTTATTT + IIIIIIIIIGIIIIII1.I+I:):H(II2II52 @HWI-EAS306_9_FC305MP_6_1_1240_1912 ACGTAACTTCTGGGGCTATTCTTACAGTAGTGA + III;IFIIIIIIIDIIIIIIDDIFB2:5>?E;6 @HWI-EAS306_9_FC305MP_6_1_1331_1843 ACGCAACTATCTTCATTATGTCAAGAAATACCA +HWI-EAS306_9_FC305MP_6_1_1331 IIIIIII3IIII5III6III+GIIIIFIC;ICC @HWI-EAS306_9_FC305MP_6_1_336_1194 AATTGATGTTCACATATCTTGATTAGATGGTTG + IIIIIIIIIIII%IIII/II4II%4$&I%)II$ @HWI-EAS306_9_FC305MP_6_1_1651_244 AAATTTCTCAATATACAAGGGATCCATGGTCCA + IIIIIIIIIIIIIIII=IIIIBIIIFII8@II, @HWI-EAS306_9_FC305MP_6_1_160_327 ACAACACATCCTGGCTCCTTCCGATGCATTCTC + IIIIIIIIIIIIIIIII=IICI)II.I>'I>IH genometools-1.5.1/testdata/test4_different_seqlengths.fastq000066400000000000000000000001441211610345200242420ustar00rootroot00000000000000@HWI-EAS306_9_FC305MP_6_1_773_1590 AAATAGGAAAGCACAGTTGAATGTGCTTTATTT + IIIIIIIIIGIIIIII1.I+I:):H(II genometools-1.5.1/testdata/test5_tricky.fastq000066400000000000000000000007121211610345200213460ustar00rootroot00000000000000@071113_EAS56_0053:1:1:998:236 TTTCTTGCCCCCATAGACTGAGACCTTCCCTAAATA +071113_EAS56_0053:1:1:998:236 IIIIIIIIIIIIIIIIIIIIIIIIIIIIICII+III @071113_EAS56_0053:1:1:182:712 ACCCAGCTAATTTTTGTATTTTTGTTAGAGACAGTG + @IIIIIIIIIIIIIIICDIIIII<%<6&-*).(*%+ @071113_EAS56_0053:1:1:153:10 TGTTCTGAAGGAAGGTGTGCGTGCGTGTGTGTGTGT + IIIIIIIIIIIICIIGIIIII>IAIIIE65I=II:6 @071113_EAS56_0053:1:3:990:501 TGGGAGGTTTTATGTGGA AAGCAGCAATGTACAAGA + IIIIIII.IIIIII1@44 @-7.%<&+/$/%4(++(% genometools-1.5.1/testdata/test6_premature_end.fastq000066400000000000000000000010671211610345200227000ustar00rootroot00000000000000@HWI-EAS306_9_FC305MP_6_1_773_1590 AAATAGGAAAGCACAGTTGAATGTGCTTTATTT + IIIIIIIIIGIIIIII1.I+I:):H(II2II52 @HWI-EAS306_9_FC305MP_6_1_1240_1912 ACGTAACTTCTGGGGCTATTCTTACAGTAGTGA + III;IFIIIIIIIDIIIIIIDDIFB2:5>?E;6 @HWI-EAS306_9_FC305MP_6_1_1331_1843 ACGCAACTATCTTCATTATGTCAAGAAATACCA + IIIIIII3IIII5III6III+GIIIIFIC;ICC @HWI-EAS306_9_FC305MP_6_1_336_1194 AATTGATGTTCACATATCTTGATTAGATGGTTG + IIIIIIIIIIII%IIII/II4II%4$&I%)II$ @HWI-EAS306_9_FC305MP_6_1_1651_244 AAATTTCTCAATATACAAGGGATCCATGGTCCA + IIIIIIIIIIIIIIII=IIIIBIIIFII8@II, @HWI-EAS306_9_FC305MP_6_1_160_327 ACAAC genometools-1.5.1/testdata/test7_empty_seq.fastq000066400000000000000000000000471211610345200220520ustar00rootroot00000000000000@HWI-EAS306_9_FC305MP_6_1_773_1590 + genometools-1.5.1/testdata/test9_uneven_length.fastq000066400000000000000000000011561211610345200227110ustar00rootroot00000000000000@HWI-EAS306_9_FC305MP_6_1_773_1590 AAATAGGAAAGCACAGTTGAATGTGCTTTATTT + IIIIIIIIIGIIIIII1.I+I:):H(II2II52 @HWI-EAS306_9_FC305MP_6_1_1240_1912 ACGTAACTTCTGGGGCTATTCTTACAGTAGTGA + III;IFIIIIIIIDIIIIIIDDIF @HWI-EAS306_9_FC305MP_6_1_1331_1843 ACGCAACTATCTTCATTATGTCAAGAAATACCA + IIIIIII3IIII5III6III+GIIIIFIC;ICC @HWI-EAS306_9_FC305MP_6_1_336_1194 AATTGATGTTCACATATCTTGATTAGATGGTTG + IIIIIIIIIIII%IIII/II4II%4$&I%)II$ @HWI-EAS306_9_FC305MP_6_1_1651_244 AAATTTCTCAATATACAAGGGATCCATGGTCCA + IIIIIIIIIIIIIIII=IIIIBIIIFII8@II, @HWI-EAS306_9_FC305MP_6_1_160_327 ACAACACATCCTGGCTCCTTCCGATGCATTCTC + IIIIIIIIIIIIIIIII=IICI)II.I>'I>IH genometools-1.5.1/testdata/test_1_multiset.txt000066400000000000000000000000041211610345200215350ustar00rootroot00000000000000aabcgenometools-1.5.1/testdata/test_1_result.txt000066400000000000000000000000021211610345200212030ustar00rootroot000000000000006 genometools-1.5.1/testdata/test_1_text.txt000066400000000000000000000000121211610345200206520ustar00rootroot00000000000000abahgcabahgenometools-1.5.1/testdata/test_2_multiset.txt000066400000000000000000000000021211610345200215340ustar00rootroot00000000000000aagenometools-1.5.1/testdata/test_2_result.txt000066400000000000000000000000021211610345200212040ustar00rootroot000000000000003 genometools-1.5.1/testdata/test_2_text.txt000066400000000000000000000000041211610345200206540ustar00rootroot00000000000000abaagenometools-1.5.1/testdata/test_3_multiset.txt000066400000000000000000000000031211610345200215360ustar00rootroot00000000000000aabgenometools-1.5.1/testdata/test_3_result.txt000066400000000000000000000000041211610345200212070ustar00rootroot000000000000001 7 genometools-1.5.1/testdata/test_3_text.txt000066400000000000000000000000121211610345200206540ustar00rootroot00000000000000abahgcabahgenometools-1.5.1/testdata/trackname1.out000066400000000000000000000016611211610345200204400ustar00rootroot00000000000000eden.gff3|gene: gene 1000-9000 eden.gff3|mRNA: mRNA 1050-9000 eden.gff3|mRNA: exon 1050-1500 eden.gff3|mRNA: exon 3000-3902 eden.gff3|mRNA: exon 5000-5500 eden.gff3|mRNA: exon 7000-9000 eden.gff3|mRNA: mRNA 1050-9000 eden.gff3|mRNA: exon 1050-1500 eden.gff3|mRNA: exon 5000-5500 eden.gff3|mRNA: exon 7000-9000 eden.gff3|mRNA: mRNA 1300-9000 eden.gff3|mRNA: exon 1300-1500 eden.gff3|mRNA: exon 3000-3902 eden.gff3|mRNA: exon 5000-5500 eden.gff3|mRNA: exon 7000-9000 eden2.gff3|gene: gene 1000-9000 eden2.gff3|mRNA: mRNA 1050-9000 eden2.gff3|mRNA: exon 1050-1500 eden2.gff3|mRNA: exon 3000-3902 eden2.gff3|mRNA: exon 5000-5500 eden2.gff3|mRNA: exon 7000-9000 eden2.gff3|mRNA: mRNA 1050-9000 eden2.gff3|mRNA: exon 1050-1500 eden2.gff3|mRNA: exon 5000-5500 eden2.gff3|mRNA: exon 7000-9000 eden2.gff3|mRNA: mRNA 1300-9000 eden2.gff3|mRNA: exon 1300-1500 eden2.gff3|mRNA: exon 3000-3902 eden2.gff3|mRNA: exon 5000-5500 eden2.gff3|mRNA: exon 7000-9000 genometools-1.5.1/testdata/trackname1.style000066400000000000000000000125201211610345200207650ustar00rootroot00000000000000--[[ This is the GenomeTools annotation viewer config file. All options must be set inside the 'style' table. All items in this table must be tables, called 'sections'. Typically there is one section per feature type. Color definitions ----------------- Colors are given as RGB triplets {red=,green=,blue=(,alpha=)} where is a decimal value between 0 and 1. The alpha value is optional, as a default 0.5 will be used. Global format settings ---------------------- Global settings, such as margins, spacers, etc. are found at the end of this file, in the "format" section. ]]-- function printvals(gn, bar) rng = gn:get_range() type = gn:get_type() print(string.format("%s: %s %d-%d", bar, type, rng:get_start(), rng:get_end())) return {red=1.0, green=1.0, blue=0.0} end style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = printvals, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- mRNA = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = printvals, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- exon = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = printvals, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, }, -------------------------------------- CDS = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.9, green=0.9, blue=0.2}, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = 0, }, -------------------------------------- TF_binding_site = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0, alpha = 1.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.8, green=0.6, blue=0.6}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = 0, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels unit = "bp", -- basepair unit, e.g. "bp" ruler_left_text = "5'", -- text left of the ruler axis ruler_right_text = "3'", -- text right of the ruler axis stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/testdata/trembl-difflenkey.faa000066400000000000000000000012201211610345200217240ustar00rootroot00000000000000>tr|A4GW6|A4GIW6_9CREN Putative ammonia monooxygenase subunit A (Fragment) OS=uncultured crenarchaeote GN =amoA PE=4 SV=1 RCTHYLFIVVVAVNSTLLTINAGDYIFYTDWAWTSFVVFSISQTLMLTVGACYYLTFTGV PGTATYYALIMTVYTWIAKGAWFALGYPYDFIVTPVWLPSAMLLDLAYWATKKNKHSLIL FGGVLVGMSLPLFNMVNLITVADPLETAFKYPRPTLPPYMTPIEPQVGKFYNSPVALGAG AGAVLACTFAALGCKLTTWT >tr|A4GIW7|A4GIW7_9CREN Putative ammonia monooxygenase subunit A (Fragment) OS=uncultured crenarchaeote GN =amoA PE=4 SV=1 CTHYLFIVVVAVNSTLLTINSGDYIFYTDWAWTSFVVFSIANTLMTIVGAVYYLTFTGVP GTATYYGLIMQVYTWVAKVAWFALGYPVDFIVHPMWIPSCMLLDLAYWATKKNKHSLIFF GGVLVGMSMPLFNMVQLMLIADPLETAFKYPRPTLPPYMTPIEPQVGKFYNSPVALGAGA GSVLACTFAALGCKLNTWTYRWM genometools-1.5.1/testdata/trembl-emptykey.faa000066400000000000000000000012131211610345200214550ustar00rootroot00000000000000>tr||A4GIW6_9CREN Putative ammonia monooxygenase subunit A (Fragment) OS=uncultured crenarchaeote GN =amoA PE=4 SV=1 RCTHYLFIVVVAVNSTLLTINAGDYIFYTDWAWTSFVVFSISQTLMLTVGACYYLTFTGV PGTATYYALIMTVYTWIAKGAWFALGYPYDFIVTPVWLPSAMLLDLAYWATKKNKHSLIL FGGVLVGMSLPLFNMVNLITVADPLETAFKYPRPTLPPYMTPIEPQVGKFYNSPVALGAG AGAVLACTFAALGCKLTTWT >tr|A4GIW7|A4GIW7_9CREN Putative ammonia monooxygenase subunit A (Fragment) OS=uncultured crenarchaeote GN =amoA PE=4 SV=1 CTHYLFIVVVAVNSTLLTINSGDYIFYTDWAWTSFVVFSIANTLMTIVGAVYYLTFTGVP GTATYYGLIMQVYTWVAKVAWFALGYPVDFIVHPMWIPSCMLLDLAYWATKKNKHSLIFF GGVLVGMSMPLFNMVQLMLIADPLETAFKYPRPTLPPYMTPIEPQVGKFYNSPVALGAGA GSVLACTFAALGCKLNTWTYRWM genometools-1.5.1/testdata/trembl-eqlen.faa000066400000000000000000000012161211610345200207150ustar00rootroot00000000000000>tr|A4GIW6|A4GIW6_9CREN Putative ammonia monooxygenase subunit A (Fragment) OS=uncultured crenarchaeote GN =amoA PE=4 SV=1 RCTHYLFIVVVAVNSTLLTINAGDYIFYTDWAWTSFVVFSISQTLMLTVGACYYLTFTGV PGTATYYALIMTVYTWIAKGAWFALGYPYDFIVTPVWLPSAMLLDLAYWATKKNKHSLIL FGGVLVGMSLPLFNMVNLITVADPLETAFKYPRPTLPPYMTPIEPQVGKFYNSPVALGAG AGAVLACTFAALGCKLTTWT >tr|A4GIW7|A4GIW7_9CREN Putative ammonia monooxygenase subunit A (Fragment) OS=uncultured crenarchaeote GN =amoA PE=4 SV=1 CTHYLFIVVVAVNSTLLTINSGDYIFYTDWAWTSFVVFSIANTLMTIVGAVYYLTFTGVP GTATYYGLIMQVYTWVAKVAWFALGYPVDFIVHPMWIPSCMLLDLAYWATKKNKHSLIFF GGVLVGMSMPLFNMVQLMLIADPLETAFKYPRPTLPPYMTPIEPQVGKFYNSPVALGAGA GSVLACTFAALGCKLNTWTY genometools-1.5.1/testdata/trembl-keys.txt000066400000000000000000000000161211610345200206510ustar00rootroot00000000000000A4GIW6 A4GIW7 genometools-1.5.1/testdata/trembl-wrongkey.txt000066400000000000000000000000331211610345200215420ustar00rootroot00000000000000A0AQI4 A0QI5 A0AQI7 A0AQI8 genometools-1.5.1/testdata/trembl.faa000066400000000000000000000012211211610345200176070ustar00rootroot00000000000000>tr|A4GIW6|A4GIW6_9CREN Putative ammonia monooxygenase subunit A (Fragment) OS=uncultured crenarchaeote GN =amoA PE=4 SV=1 RCTHYLFIVVVAVNSTLLTINAGDYIFYTDWAWTSFVVFSISQTLMLTVGACYYLTFTGV PGTATYYALIMTVYTWIAKGAWFALGYPYDFIVTPVWLPSAMLLDLAYWATKKNKHSLIL FGGVLVGMSLPLFNMVNLITVADPLETAFKYPRPTLPPYMTPIEPQVGKFYNSPVALGAG AGAVLACTFAALGCKLTTWT >tr|A4GIW7|A4GIW7_9CREN Putative ammonia monooxygenase subunit A (Fragment) OS=uncultured crenarchaeote GN =amoA PE=4 SV=1 CTHYLFIVVVAVNSTLLTINSGDYIFYTDWAWTSFVVFSIANTLMTIVGAVYYLTFTGVP GTATYYGLIMQVYTWVAKVAWFALGYPVDFIVHPMWIPSCMLLDLAYWATKKNKHSLIFF GGVLVGMSMPLFNMVQLMLIADPLETAFKYPRPTLPPYMTPIEPQVGKFYNSPVALGAGA GSVLACTFAALGCKLNTWTYRWM genometools-1.5.1/testdata/trkeys-result.txt000066400000000000000000000012461211610345200212560ustar00rootroot00000000000000>A0AQI4 1 10 tr|A0AQI4|A0AQI4_9ARCH Putative ammonia monooxygenase (Fragment) OS=uncultured archaeon GN=amoA PE=4 SV=1 VWLRRCTHYL >A0AQI5 60 62 tr|A0AQI5|A0AQI5_9ARCH Putative ammonia monooxygenase (Fragment) OS=uncultured archaeon GN=amoA PE=4 SV=1 TFT >A0AQI7 1 20 tr|A0AQI7|A0AQI7_9ARCH Putative ammonia monooxygenase (Fragment) OS=uncultured archaeon GN=amoA PE=4 SV=1 VWLRRCTHYLFIVVVAVNST >A0AQI8 2 22 tr|A0AQI8|A0AQI8_9ARCH Putative ammonia monooxygenase (Fragment) OS=uncultured archaeon GN=amoA PE=4 SV=1 WLRRCTHYLFIVVVAVNSTLL >A0FGX9 3 28 tr|A0FGX9|A0FGX9_9ARCH Methyl coenzyme M reductase (Fragment) OS=uncultured archaeon GN=mcrA PE=4 SV=1 TDDILDDNVYYDVDYINDKYNGAATI genometools-1.5.1/testdata/trkeys.txt000066400000000000000000000000751211610345200177410ustar00rootroot00000000000000A0AQI4 1 10 A0AQI5 60 62 A0AQI7 1 20 A0AQI8 2 22 A0FGX9 3 28 genometools-1.5.1/testdata/trna_glutamine.embl000066400000000000000000000004371211610345200215330ustar00rootroot00000000000000ID tRNA-glutamine XX DE gi|24371439|ref|NR_000037.1| Homo sapiens tRNA glutamine 1 (TRQ1) on DE chromosome 17 XX SQ GGTTCCATGG TGTAATGGTT AGCACTCTGG ACTCTGAATC CAGCGATCCG AGTTCAAATC 60 TCGGTGGAAC CT 72 // genometools-1.5.1/testdata/trna_glutamine.fna000066400000000000000000000002361211610345200213550ustar00rootroot00000000000000>gi|24371439|ref|NR_000037.1| Homo sapiens tRNA glutamine 1 (TRQ1) on chromosome 17 GGTTCCATGGTGTAATGGTTAGCACTCTGGACTCTGAATCCAGCGATCCGAGTTCAAATCTCGGTGGAAC CT genometools-1.5.1/testdata/trna_glutamine.gbk000066400000000000000000000040101211610345200213460ustar00rootroot00000000000000LOCUS NR_000037 72 bp tRNA linear PRI 17-DEC-2003 DEFINITION Homo sapiens tRNA glutamine 1 (TRQ1) on chromosome 17. ACCESSION NR_000037 VERSION NR_000037.1 GI:24371439 KEYWORDS . SOURCE Homo sapiens (human) ORGANISM Homo sapiens Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi; Mammalia; Eutheria; Primates; Catarrhini; Hominidae; Homo. REFERENCE 1 (bases 1 to 72) AUTHORS Morrison,N., Goddard,J.P., Ledbetter,D.H., Boyd,E., Bourn,D. and Connor,J.M. TITLE Chromosomal assignment of a large tRNA gene cluster (tRNA(Leu), tRNA(Gln), tRNA(Lys), tRNA(Arg), tRNA(Gly)) to 17p13.1 JOURNAL Hum. Genet. 87 (2), 226-230 (1991) PUBMED 2066114 REFERENCE 2 (bases 1 to 72) AUTHORS Roy,K.L., Cooke,H. and Buckland,R. TITLE Nucleotide sequence of a segment of human DNA containing the three tRNA genes JOURNAL Nucleic Acids Res. 10 (22), 7313-7322 (1982) PUBMED 6296772 COMMENT PROVISIONAL REFSEQ: This record has not yet been subject to final NCBI review. The reference sequence was derived from K01797.1. FEATURES Location/Qualifiers source 1..72 /organism="Homo sapiens" /mol_type="tRNA" /db_xref="taxon:9606" /chromosome="17" /map="17p13.1" gene 1..72 /gene="TRQ1" /db_xref="GeneID:7228" /db_xref="LocusID:7228" /db_xref="MIM:189919" tRNA 1..72 /gene="TRQ1" /product="tRNA-Gln" /note="codon recognized: CAG; G00-120-457" /db_xref="GeneID:7228" /db_xref="LocusID:7228" /db_xref="MIM:189919" ORIGIN 1 ggttccatgg tgtaatggtt agcactctgg actctgaatc cagcgatccg agttcaaatc 61 tcggtggaac ct // genometools-1.5.1/testdata/trna_glutamine.out000066400000000000000000000011551211610345200214210ustar00rootroot00000000000000fold the following RNA sequence with Nussinov Algorithm: ggttccatggtgtaatggttagcactctggactctgaatccagcgatccgagttcaaatctcggtggaacct length of RNA sequence = 72 using the following parameters: l_min = 3 alpha(G,C) = alpha(C,G) = -3 alpha(A,U) = alpha(U,A) = -2 alpha(G,U) = alpha(U,G) = -1 all other alpha values have been set to infinity score: -69 result: (1,71)(2,70)(3,69)(4,68)(5,67)(6,66)(7,47)(8,46)(9,44)(10,25)(11,24)(12,23)(13,21)(14,20)(15,19)(27,43)(28,42)(29,41)(30,40)(31,39)(32,36)(10,25)(11,24)(12,23)(13,21)(14,20)(15,19)(27,43)(28,42)(29,41)(30,40)(31,39)(32,36)(48,64)(49,63)(50,62)(51,61)(52,60)(54,58) genometools-1.5.1/testdata/two_fasta_seqs.gff3000066400000000000000000000002521211610345200214450ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq1 1 10 ##sequence-region seq2 1 10 seq1 . gene 1 10 . + . . seq2 . gene 1 10 . + . . ##FASTA >seq1 cttctgggcg >seq2 tgttcattgc genometools-1.5.1/testdata/two_fasta_seqs_without_sequence_regions.gff3000066400000000000000000000001561211610345200266510ustar00rootroot00000000000000##gff-version 3 seq1 . gene 1 10 . + . . seq2 . gene 1 10 . + . . ##FASTA >seq1 cttctgggcg >seq2 tgttcattgc genometools-1.5.1/testdata/undefined_parent.gff3000066400000000000000000000002231211610345200217330ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . mRNA 1050 9000 . + . ID=mRNA1 ctg123 . exon 1050 1500 . + . Parent=mRNA1,mRNA2 ### genometools-1.5.1/testdata/unknown_meta_directive.gff3000066400000000000000000000000521211610345200231640ustar00rootroot00000000000000##gff-version 3 ##unknown-directive XXX genometools-1.5.1/testdata/unsorted_gff3_file.txt000066400000000000000000000001711211610345200221640ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 1497228 ctg123 . gene 10000 11000 . + . . ctg123 . gene 1000 9000 . + . . genometools-1.5.1/testdata/uppercase_attributes.gff3000066400000000000000000000003331211610345200226600ustar00rootroot00000000000000##gff-version 3 ##sequence-region seq 1 1000 seq . gene 1 1000 . + . ID=gene1;Name=gene_name;Alias=gene_alias;Target=cDNA 1 426 +;Gap=xxx;Derives_from=xxx;Note=note;Dbxref=xxx;Ontology_term=xxx;Is_circular=true ### genometools-1.5.1/testdata/wildcardatend.fna000066400000000000000000000000311211610345200211420ustar00rootroot00000000000000>seq1 AAA >seq2 AANNAANN genometools-1.5.1/testdata/wildcardatend_rev.fna000066400000000000000000000000631211610345200220230ustar00rootroot00000000000000>seq1 AAA >seq2 AANNAANN >seq2 NNTTNNTT >seq1 TTT genometools-1.5.1/testsuite/000077500000000000000000000000001211610345200160755ustar00rootroot00000000000000genometools-1.5.1/testsuite/gcov_include.rb000066400000000000000000000033321211610345200210640ustar00rootroot00000000000000full_coverage_files = [ "src/core/basename.c", "src/core/bittab.c", "src/core/bsearch.c", "src/core/countingsort.c", "src/core/disc_distri.c", "src/core/dynalloc.c", "src/core/fasta.c", "src/core/queue.c", "src/extended/add_introns_stream.c", "src/extended/consensus_sa.c", "src/extended/gff3_escaping.c", "src/extended/gff3_in_stream.c", "src/extended/gff3_out_stream.c", "src/extended/gff3_output.c", "src/extended/gff3_visitor.c", "src/extended/node_stream.c", "src/extended/node_visitor.c", "src/extended/shredder.c", "src/extended/stat_stream.c", "src/extended/stat_visitor.c", "src/extended/uniq_stream.c", "src/tools/gt_bed_to_gff3.c", "src/tools/gt_chseqids.c", "src/tools/gt_fingerprint.c", "src/tools/gt_gff3.c", "src/tools/gt_shredder.c", "src/tools/gt_splicesiteinfo.c", "src/tools/gt_uniq.c" ] full_coverage_files.each do |file| base = File.basename(file) Name "full coverage for #{file}" Keywords "gcov" Test do run "cd #{$cur} && gcov -o obj/#{file} #{file} && cd -" run "mv #{$cur}/#{base}.gcov ." grep(base+".gcov", "^ #####", true) end end genometools-1.5.1/testsuite/gt_bed_to_gff3_include.rb000066400000000000000000000014231211610345200227600ustar00rootroot00000000000000def process_bed_files(dir) for infile in Dir.entries(dir).grep(/\.bed$/) do infile = File.join(dir, infile) Name "gt bed_to_gff3 #{File.basename(infile).chomp}" Keywords "gt_bed_to_gff3" Test do run_test("#{$bin}gt bed_to_gff3 #{infile}", :maxtime => 320) outfile = infile.gsub(/\.bed$/, ".gff3") run "diff #{last_stdout} #{outfile}" end end end process_bed_files("#{$testdata}bed_files") if $gttestdata then process_bed_files("#{$gttestdata}bed") end Name "gt bed_to_gff3 (type options)" Keywords "gt_bed_to_gff3" Test do run_test "#{$bin}gt bed_to_gff3 -featuretype gene -thicktype CDS " + "-blocktype exon #{$testdata}bed_files/ct_example3.bed" run "diff #{last_stdout} #{$testdata}bed_files/ct_example3.gff3_as_gene" end genometools-1.5.1/testsuite/gt_cds_include.rb000066400000000000000000000102341211610345200213700ustar00rootroot000000000000001.upto(14) do |i| Name "gt cds test #{i}" Keywords "gt_cds" Test do run_test "#{$bin}gt cds -minorflen 1 -startcodon yes " + "-seqfile #{$testdata}gt_cds_test_#{i}.fas " + "#{$testdata}gt_cds_test_#{i}.in" run "diff #{last_stdout} #{$testdata}gt_cds_test_#{i}.out" end end Name "gt cds error message" Keywords "gt_cds" Test do run "#{$bin}gt gff3 -offset 1000 #{$testdata}gt_cds_test_1.in | " + "#{$bin}gt cds -seqfile #{$testdata}gt_cds_test_1.fas -", :retval => 1 grep last_stderr, "Has the sequence-region to sequence mapping been defined correctly" end 1.upto(14) do |i| Name "gt cds test #{i} (-usedesc)" Keywords "gt_cds usedesc" Test do run_test "#{$bin}gt cds -minorflen 1 -startcodon yes -usedesc " + "-seqfile #{$testdata}gt_cds_test_#{i}.fas " + "#{$testdata}gt_cds_test_#{i}.in" run "diff #{last_stdout} #{$testdata}gt_cds_test_#{i}.out" end end Name "gt cds test (description range)" Keywords "gt_cds usedesc" Test do run_test "#{$bin}gt cds -minorflen 1 -usedesc -seqfile " + "#{$testdata}gt_cds_test_descrange.fas " + "#{$testdata}gt_cds_test_descrange.in" run "diff #{last_stdout} #{$testdata}gt_cds_test_descrange.out" end Name "gt cds test (multi description)" Keywords "gt_cds usedesc" Test do run_test "#{$bin}gt cds -minorflen 1 -usedesc -seqfile " + "#{$testdata}gt_cds_descrange_multi.fas " + "#{$testdata}gt_cds_descrange_multi.in" run "diff #{last_stdout} #{$testdata}gt_cds_descrange_multi.out" end Name "gt cds test (multi description fail 1)" Keywords "gt_cds usedesc" Test do run_test("#{$bin}gt cds -usedesc -seqfile " + "#{$testdata}gt_cds_descrange_multi_fail_1.fas " + "#{$testdata}gt_cds_test_descrange.in", :retval => 1) grep last_stderr, "does contain multiple sequences with ID" end Name "gt cds test (multi description fail 2)" Keywords "gt_cds usedesc" Test do run_test("#{$bin}gt cds -usedesc -seqfile " + "#{$testdata}gt_cds_descrange_multi_fail_2.fas " + "#{$testdata}gt_cds_test_descrange.in", :retval => 1) grep last_stderr, "does contain multiple sequences with ID" end Name "gt cds test (wrong ID)" Keywords "gt_cds usedesc" Test do run_test("#{$bin}gt cds -usedesc -seqfile " + "#{$testdata}gt_cds_descrange_wrong_id.fas " + "#{$testdata}gt_cds_test_descrange.in", :retval => 1) grep last_stderr, "does not contain a sequence with ID" end Name "gt cds test (wrong range)" Keywords "gt_cds usedesc" Test do run_test("#{$bin}gt cds -usedesc -seqfile " + "#{$testdata}gt_cds_descrange_wrong_range.fas " + "#{$testdata}gt_cds_test_descrange.in", :retval => 1) grep last_stderr, "cannot find sequence ID" end Name "gt cds test (-startcodon no -finalstopcodon no)" Keywords "gt_cds" Test do run_test "#{$bin}gt cds -startcodon no -finalstopcodon no -seqfile " + "#{$testdata}U89959_genomic.fas " + "#{$testdata}gt_cds_nostartcodon_nofinalstopcodon.in" run "diff #{last_stdout} " + "#{$testdata}gt_cds_nostartcodon_nofinalstopcodon.out" end Name "gt cds test (nGASP)" Keywords "gt_cds nGASP" Test do run_test "#{$bin}gt cds -startcodon yes -finalstopcodon no -minorflen 64 " + "-seqfile #{$testdata}nGASP/III.fas -usedesc " + "#{$testdata}nGASP/resIII.gff3" run "diff #{last_stdout} #{$testdata}nGASP/resIIIcds.gff3" end Name "gt cds test (U89959)" Keywords "gt_cds" Test do run_test "#{$bin}gt cds -seqfile #{$testdata}U89959_genomic.fas " + "#{$testdata}U89959_csas.gff3" run "diff #{last_stdout} #{$testdata}U89959_cds.gff3" end Name "gt cds test (not sorted)" Keywords "gt_cds" Test do run_test "#{$bin}gt cds -seqfile #{$testdata}U89959_genomic.fas " + "#{$testdata}not_sorted.gff3", :retval => 1 grep last_stderr, "is not sorted" end if $gttestdata then Name "gt cds bug" Keywords "gt_cds" Test do run_test "#{$bin}gt cds -startcodon yes -minorflen 1 " + "-seqfile #{$gttestdata}cds/marker_region.fas " + "#{$gttestdata}cds/marker_bug.gff3" run "diff #{last_stdout} #{$gttestdata}cds/marker_bug.out" end end genometools-1.5.1/testsuite/gt_chain2dim_include.rb000066400000000000000000000042011211610345200224520ustar00rootroot00000000000000def runchain2dimfailure(args,matchfile='matchfile') Name "gt chain2dim failure" Keywords "gt_chain2dim" Test do run_test "#{$bin}gt chain2dim -m #{matchfile} " + args,:retval => 1 end end def runchain2dim(args,matchfile) Name "gt chain2dim #{args}" Keywords "gt_chain2dim" Test do run_test "#{$bin}gt chain2dim -m #{matchfile} " + args argstring = args.gsub(/[ ]/,"") run "cmp -s #{last_stdout} #{$testdata}chaindata/chain#{argstring}" end end def runchain2dimall(params,matchfile) params.each do |args| runchain2dim(args,matchfile) end end Name "gt chain2dim small all" Keywords "gt_chain2dim all" Test do run_test "#{$bin}gt chain2dim -global all -m #{$testdata}chaindata/matches-nd.txt" run "cmp -s #{last_stdout} #{$testdata}chaindata/matches-nd.chains" end Name "gt chain2dim ecoli all" Keywords "gt_chain2dim all" Test do [283,298,304,753].each do |lines| run "head -n #{lines} #{$testdata}ecolicmp250.of | sed -e 's/[0-9]*$/1/'" run_test "#{$bin}gt chain2dim -global all -m #{last_stdout}" end end runchain2dimfailure("-maxgap 0") runchain2dimfailure("-maxgap -1") runchain2dimfailure("-wf 0.0") runchain2dimfailure("-wf -1.0") runchain2dimfailure("-wf 1.0") runchain2dimfailure("-global xv") runchain2dimfailure("-global ov h") runchain2dimfailure("-local 2p h") runchain2dimfailure("-local -global") runchain2dimfailure("-global","#{$testdata}ecolicmp-neg.of") runchain2dimfailure("-global","#{$testdata}ecolicmp-se.of") # runchain2dimall("#{$testdata}ecolicmp.of") params = ["-global", "-silent -global", "-local -wf 1.8", "-local -wf 0.5", "-local -maxgap 20", "-local 2b", "-local 55p -silent", "-global gc", "-global ov", "-global gc -wf 1.5", "-global ov -wf 1.8", "-global -maxgap 10", "-global gc -wf 1.5 -maxgap 10", "-global ov -wf 1.8 -maxgap 10", "-local", "-local 2p", "-local 20", "-local 2p -wf 1.8", "-local 2b -wf 1.8", "-local 20 -wf 1.8", "-local -wf 1.8 -maxgap 20", "-local 2p -wf 1.8 -maxgap 10", "-local 2b -wf 1.8 -maxgap 10", "-local 20 -wf 1.8 -maxgap 10"] runchain2dimall(params,"#{$testdata}ecolicmp250.of") genometools-1.5.1/testsuite/gt_chseqids_include.rb000066400000000000000000000047211211610345200224260ustar00rootroot00000000000000Name "gt chseqids -help" Keywords "gt_chseqids" Test do run_test "#{$bin}gt chseqids -help" grep last_stdout, "Report bugs to" end Name "gt chseqids -noop" Keywords "gt_chseqids" Test do run_test("#{$bin}gt chseqids -noop", :retval => 1) grep last_stderr, "unknown option" end Name "gt chseqids empty mapping file" Keywords "gt_chseqids" Test do run_test("#{$bin}gt chseqids #{$testdata}empty_file", :retval => 1) grep last_stderr, "not defined" end Name "gt chseqids empty gff3 file" Keywords "gt_chseqids" Test do run_test "#{$bin}gt chseqids #{$testdata}gt_chseqids_test_1.chseqids #{$testdata}empty_file", :retval => 1 grep last_stderr, "GFF3 file .* is empty" end Name "gt chseqids corrupt.gff3" Keywords "gt_chseqids" Test do run_test("#{$bin}gt chseqids #{$testdata}gt_chseqids_test_1.chseqids #{$testdata}corrupt.gff3", :retval => 1) end Name "gt chseqids test 1" Keywords "gt_chseqids" Test do run_test "#{$bin}gt chseqids -v -o test.out " + "#{$testdata}gt_chseqids_test_1.chseqids " + "#{$testdata}gt_chseqids_test_1.gff3" run "diff test.out #{$testdata}gt_chseqids_test_1.out" end Name "gt chseqids test 2" Keywords "gt_chseqids" Test do run_test "#{$bin}gt chseqids #{$testdata}gt_chseqids_test_2.chseqids #{$testdata}gt_chseqids_test_2.gff3" run "diff #{last_stdout} #{$testdata}gt_chseqids_test_2.out" end Name "gt chseqids test 3" Keywords "gt_chseqids" Test do run_test("#{$bin}gt chseqids #{$testdata}gt_chseqids_test_3.chseqids #{$testdata}gt_chseqids_test_3.gff3", :retval => 1) end Name "gt chseqids test 4" Keywords "gt_chseqids" Test do run_test "#{$bin}gt chseqids #{$testdata}gt_chseqids_test_4.chseqids #{$testdata}gt_chseqids_test_4.gff3" run "diff #{last_stdout} #{$testdata}gt_chseqids_test_4.out" end Name "gt chseqids test 5" Keywords "gt_chseqids" Test do run_test "#{$bin}gt chseqids #{$testdata}gt_chseqids_test_5.chseqids #{$testdata}gt_chseqids_test_5.gff3" run "diff #{last_stdout} #{$testdata}gt_chseqids_test_5.out" end Name "gt chseqids test 5 (-sort)" Keywords "gt_chseqids" Test do run_test "#{$bin}gt chseqids -sort #{$testdata}gt_chseqids_test_5.chseqids #{$testdata}gt_chseqids_test_5.gff3" run "diff #{last_stdout} #{$testdata}gt_chseqids_test_5.sorted_out" end Name "gt chseqids test 6" Keywords "gt_chseqids" Test do run_test "#{$bin}gt chseqids #{$testdata}gt_chseqids_test_6.chseqids #{$testdata}gt_chseqids_test_6.gff3" run "diff #{last_stdout} #{$testdata}gt_chseqids_test_6.out" end genometools-1.5.1/testsuite/gt_cmpprjfiles_include.rb000066400000000000000000000063351211610345200231440ustar00rootroot00000000000000require 'set' require 'digest/md5' testdatafiles = Set.new testdatafiles.add('at1MB') testdatafiles.add('at100K1') testdatafiles.add('Random-Small.fna') testdatafiles.add('Random.fna') testdatafiles.add('Atinsert.fna') testdatafiles.add('TTT-small.fna') def expandfilename(testdatafiles,filename) if testdatafiles.member?(filename) return "#{$testdata}#{filename}" else return "#{$gttestdata}DNA-mix/Grumbach.fna/#{filename}" end end def fromoptions2indexname(options) return options.gsub(/[ ]+/,"").gsub(/^-/,"") end def fileargs(testdatafiles,options) dbarg=['-db'] doappend = false options.split(/ /).each do |opt| if opt == '-db' doappend = true elsif doappend dbarg.push(expandfilename(testdatafiles,opt)) end end return dbarg.join(" ") end def grepprjfile(filename) begin f = File.new(filename) rescue => error STDERR.puts "#{$0}: cannot open \"#{filename}\": #{error}" exit 1 end return f.readlines.grep(/prefixlength|readmode|realspecialranges/) end outoptions="-tis -lcp -suf -bwt" callargs = ["#{outoptions} -db Random-Small.fna", "#{outoptions} -db Random.fna", "#{outoptions} -db Atinsert.fna Random.fna", "#{outoptions} -db TTT-small.fna", "#{outoptions} -lcp -db at100K1", "#{outoptions} -bwt -db at100K1", "#{outoptions} -bwt -lcp -db at100K1", "#{outoptions} -suf -db at100K1", "#{outoptions} -suf -lcp -db at100K1", "#{outoptions} -suf -bwt -db at100K1", "#{outoptions} -suf -bwt -lcp -db at100K1", "#{outoptions} -tis -db at100K1", "#{outoptions} -tis -lcp -db at100K1", "#{outoptions} -tis -bwt -db at100K1", "#{outoptions} -tis -bwt -lcp -db at100K1", "#{outoptions} -tis -suf -db at100K1", "#{outoptions} -tis -suf -lcp -db at100K1", "#{outoptions} -tis -suf -bwt -db at100K1", "#{outoptions} -tis -suf -bwt -lcp -db at100K1"] if $gttestdata then callargs.push("#{outoptions} -db at100K1 at1MB Wildcards.fna chntxx.fna " + "hs5hcmvcg.fna humdystrop.fna humghcsa.fna " + "humhbb.fna humhdabcd.fna humhprtb.fna " + "mipacga.fna mpocpcg.fna mpomtcg.fna " + "vaccg.fna ychrIII.fna") end Name "gt checking project files" Keywords "gt_checkprjfiles" Test do callargs.each do |args| indexfileprefix=fromoptions2indexname(args) # long filenames can cause problems on encrypted file systems # this will produce a prefix of exactly 100 chars (resulting in 104 byte # filenames) if indexfileprefix.length >= 100 indexfileprefix = indexfileprefix[0..67] + Digest::MD5.hexdigest(indexfileprefix)[0..31] end indexname="#{indexfileprefix}" run_test "#{$bin}gt suffixerator -indexname #{indexname} " + "-pl -des #{fileargs(testdatafiles,args)}" thislist=grepprjfile("#{indexname}.prj") reflist=grepprjfile("#{$testdata}prj-files/#{indexname}.prj") if thislist != reflist STDERR.puts "files #{indexname}.prj and " + "#{$testdata}prj-files/#{indexname}.prj differ" exit 1 end end end genometools-1.5.1/testsuite/gt_consensus_sa_include.rb000066400000000000000000000005701211610345200233240ustar00rootroot00000000000000i = 1 for infile in Dir.entries(File.join($testdata, "consensus_sa")).grep(/\.in$/) do infile = File.join($testdata, "consensus_sa", infile) Name "consensus_sa test #{i}" Keywords "gt_dev gt_consensus_sa" Test do run_test "#{$bin}gt dev consensus_sa #{infile}" outfile = infile.gsub(/\.in$/, ".out") run "diff #{last_stdout} #{outfile}" end i += 1 end genometools-1.5.1/testsuite/gt_csa_include.rb000066400000000000000000000017451211610345200213740ustar00rootroot00000000000000Name "gt csa test" Keywords "gt_csa" Test do run_test("#{$bin}gt csa #{$testdata}gt_csa_test_1.in", :retval => 1) grep last_stderr, "is not sorted" end 1.upto(6) do |i| Name "gt csa prob #{i}" Keywords "gt_csa" Test do run_test "#{$bin}gt csa #{$testdata}gt_csa_prob_#{i}.in" run "diff #{last_stdout} #{$testdata}gt_csa_prob_#{i}.out" end end 1.upto(4) do |i| Name "gt -debug csa prob #{i}" Keywords "gt_csa" Test do run_test "#{$bin}gt -debug csa #{$testdata}gt_csa_prob_#{i}.in" run "tail -n +2 #{last_stderr} | diff - #{$testdata}gt_csa_prob_#{i}.debug" end end Name "gt csa arabidopsis" Keywords "gt_csa" Test do run_test "#{$bin}gt csa #{$testdata}U89959_sas.gff3" run "diff #{last_stdout} #{$testdata}U89959_csas.gff3" end Name "gt csa example" Keywords "gt_csa" Test do run_test "#{$bin}gt csa #{$testdata}csa_example_spliced_alignments.gff3" run "diff #{last_stdout} " + "#{$testdata}csa_example_consensus_spliced_alignments.gff3" end genometools-1.5.1/testsuite/gt_csr_include.rb000066400000000000000000000107401211610345200214100ustar00rootroot00000000000000require 'fileutils' require 'tempfile' hcr_testfiles = [ "csr_testcase.fastq", "description_test.fastq", "description_test2.fastq" ] Name "gt hcr reads" Keywords "gt_csr hcr_nodesc" Test do hcr_testfiles.each do |file| run_test "#$bin/gt compreads compress -files #$testdata/#{file} -name test" run_test "#$bin/gt compreads decompress -file test" `grep -v @ #$testdata/#{file} > original` `grep -v @ test.fastq > test_out` run_test "diff test_out original" end end Name "gt hcr reads allfiles" Keywords "gt_csr hcr_nodesc" Test do files = hcr_testfiles.collect{|file| "#$testdata/" + file} run_test "#$bin/gt compreads compress -files #{files.join(' ')} -name test" run_test "#$bin/gt compreads decompress -file test" `grep -h -v @ #{files.join(' ')} > original` `grep -v @ test.fastq > test_out` run_test "diff test_out original" end Name "gt hcr reads and description" Keywords "gt_csr hcr_desc" Test do hcr_testfiles.each do |file| run_test "#$bin/gt compreads compress -descs" + " -files #$testdata/#{file} -name test" run_test "#$bin/gt compreads decompress -file test" `grep -v @ #$testdata/#{file} > original` `grep -v @ test.fastq > test_out` run_test "diff test_out original" run_test "#$bin/gt compreads decompress -descs -file test" run_test "diff test.fastq #$testdata/#{file}" end end Name "gt hcr reads and description allfiles" Keywords "gt_csr hcr_desc" Test do files = hcr_testfiles.collect{|file| "#$testdata/" + file} run_test "#$bin/gt compreads compress -descs" + " -files #{files.join(' ')} -name test" run_test "#$bin/gt compreads decompress -descs -file test" `cat #{files.join(' ')} > original` run_test "diff test.fastq original" end Name "gt hcr decompress benchmark" Keywords "gt_csr hcr benchmark" Test do hcr_testfiles.each do |file| run_test "#$bin/gt compreads compress -descs" + " -files #$testdata/#{file} -name test_#{file}" run_test "#$bin/gt compreads decompress -descs -benchmark 10000" + " -file test_#{file}", :maxtime => 300 end end rcr_testfiles = { "rcr_testreads_on_seq.bam" => "rcr_testseq.fa", "example_1.sorted.bam" => "example_1.fa" } Name "gt rcr reads noqual" Keywords "gt_csr rcr" Test do rcr_testfiles.keys do |file| run_test "#$bin/gt encseq encode -dna" + " -indexname ./#{rcr_testfiles[file]}" + " #$testdata/#{rcr_testfiles[file]}" run_test "#$bin/gt compreads refcompress" + " -ref ./#{rcr_testfiles[file]}" + " -bam #$testdata/#{file}" + " -name #{file}" run_test "#$bin/gt compreads refdecompress" + " -ref ./#{rcr_testfiles[file]}" + " -rcr ./#{file}" end end Name "gt rcr reads qual" Keywords "gt_csr rcr" Test do rcr_testfiles.keys do |file| run_test "#$bin/gt encseq encode -dna" + " -indexname ./#{rcr_testfiles[file]}" + " #$testdata/#{rcr_testfiles[file]}" run_test "#$bin/gt compreads refcompress" + " -ref ./#{rcr_testfiles[file]}" + " -bam #$testdata/#{file}" + " -mquals -quals" + " -name #{file}" run_test "#$bin/gt compreads refdecompress" + " -ref ./#{rcr_testfiles[file]}" + " -rcr ./#{file}" end end Name "gt rcr reads variant qual" Keywords "gt_csr rcr" Test do rcr_testfiles.keys do |file| run_test "#$bin/gt encseq encode -dna" + " -indexname ./#{rcr_testfiles[file]}" + " #$testdata/#{rcr_testfiles[file]}" run_test "#$bin/gt compreads refcompress" + " -ref ./#{rcr_testfiles[file]}" + " -bam #$testdata/#{file}" + " -mquals -vquals" + " -name #{file}" run_test "#$bin/gt compreads refdecompress" + " -ref ./#{rcr_testfiles[file]}" + " -rcr ./#{file}" end end Name "gt rcr reads variant qual, descriptions" Keywords "gt_csr rcr" Test do rcr_testfiles.keys do |file| run_test "#$bin/gt encseq encode -dna" + " -indexname ./#{rcr_testfiles[file]}" + " #$testdata/#{rcr_testfiles[file]}" run_test "#$bin/gt compreads refcompress" + " -ref ./#{rcr_testfiles[file]}" + " -bam #$testdata/#{file}" + " -mquals -vquals -descs" + " -name #{file}" run_test "#$bin/gt compreads refdecompress" + " -ref ./#{rcr_testfiles[file]}" + " -rcr ./#{file}" " -qnames" end end genometools-1.5.1/testsuite/gt_encseq2spm_include.rb000066400000000000000000000041761211610345200227070ustar00rootroot00000000000000def run_encseq2spm(readset) run_test "#{$bin}/gt suffixerator -db #{readset} -indexname sfx" [32,35].each do |len| opts="-l #{len} -ii sfx -spm count -checksuftab" run_test "#{$bin}/gt encseq2spm #{opts}" [1,2,5].each do |parts| [1,2,3].each do |rparts| run_test "#{$bin}/gt encseq2spm -parts #{parts} " + "-radixparts #{rparts} #{opts}" run_test "env GT_MEM_BOOKKEEPING=off GT_ENV_OPTIONS= " + "#{$bin}/gt -j #{rparts} encseq2spm -parts #{parts} #{opts}" end end end end if $gttestdata Name "gt encseq2spm: developer options" Keywords "gt_encseq2spm" Test do readset="#{$gttestdata}/readjoiner/70000x_100nt_reads" run_test "#{$bin}/gt suffixerator -db #{readset} -indexname sfx" run_test "#{$bin}/gt encseq2spm -ii sfx -l 45 -singlescan 0 " run_test "#{$bin}/gt encseq2spm -ii sfx -l 45 -onlyaccum" run_test "#{$bin}/gt encseq2spm -ii sfx -l 45 -onlyallfirstcodes" run_test "#{$bin}/gt encseq2spm -ii sfx -l 45 -radixlarge" run_test "env GT_MEM_BOOKKEEPING=on " + "#{$bin}/gt encseq2spm -ii sfx -l 45 -memlimit 3MB" run_test "env GT_MEM_BOOKKEEPING=on " + "#{$bin}/gt encseq2spm -ii sfx -l 45 -memlimit 2MB",:retval => 1 if not Kernel.system("#{$bin}gt -64bit") run_test "#{$bin}/gt suffixerator -db #{readset} " + \ "#{$testdata}/U89959_genomic.fas -indexname sfx-big" run_test "#{$bin}/gt encseq2spm -ii sfx-big -l 45",:retval => 1 end end # compare results with precalculated known results [700, 7000].each do |nofreads| readset="#{$gttestdata}/readjoiner/#{nofreads}x_100nt_reads" if File.exists?(readset) Name "gt encseq2spm: #{nofreads}x100" Keywords "gt_encseq2spm" Test do run_encseq2spm(readset) end end [161, 200, 300, 400, 600, 1000].each do |len| reads = "#{$gttestdata}/readjoiner/#{nofreads}x_#{len}nt_reads" if File.exists?(reads) Name "gt encseq2spm: #{nofreads}x#{len}" Keywords "gt_encseq2spm" Test do run_encseq2spm(reads) end end end end end genometools-1.5.1/testsuite/gt_encseq_include.rb000066400000000000000000000325421211610345200221030ustar00rootroot00000000000000Name "gt encseq encode|decode simple" Keywords "gt_encseq_encode encseq gt_encseq_decode" Test do run "#{$bin}gt encseq encode #{$testdata}foobar.fas" run "#{$bin}gt encseq decode foobar.fas" run "diff #{last_stdout} #{$testdata}foobar.fas" end Name "gt encseq encode|decode w/ empty seq" Keywords "gt_encseq_encode encseq gt_encseq_decode empty" Test do run_test "#{$bin}gt encseq encode -indexname foo " + \ "#{$testdata}empty_seq.fas", \ :retval => 1 grep(last_stderr, /sequence must not be empty/) end Name "gt encseq encode|decode eqlen w/ empty seq" Keywords "gt_encseq_encode encseq gt_encseq_decode empty" Test do run "#{$bin}gt encseq encode -indexname foo " + \ "#{$testdata}gt_encseq_eqlen_last_empty.fas" run "#{$bin}gt encseq decode foo" run "head -n -1 #{last_stdout} | diff - #{$testdata}gt_encseq_eqlen_last_empty.fas" end Name "gt encseq encode multiple files without indexname" Keywords "encseq gt_encseq_encode" Test do run "#{$bin}gt encseq encode #{$testdata}foobar.fas" run_test "#{$bin}gt encseq encode #{$testdata}foobar.fas " + \ "#{$testdata}foobar.fas", :retval => 1 grep(last_stderr, /if more than one input file is given/) end Name "gt encseq decode lossless without ois" Keywords "encseq gt_encseq_decode lossless" Test do run "#{$bin}gt encseq encode #{$testdata}foobar.fas" run_test "#{$bin}gt encseq decode -lossless foobar.fas", \ :retval => 1 grep(last_stderr, /cannot open file.*ois/) end STDREADMODES = ["fwd", "rev"] DNAREADMODES = STDREADMODES + ["cpl", "rcl"] DNATESTSEQS = ["#{$testdata}foobar.fas", "#{$testdata}gt_bioseq_succ_3.fas", "#{$testdata}at100K1"] AATESTSEQS = ["#{$testdata}trembl-eqlen.faa"] NUMSAMPLES = 5 def es_revcomp(seq) es_comp(seq).reverse end def es_comp(seq) seq.tr("aAcCgGtTnNrRyYmMkKwWsSbBdDhHvV","tTgGcCaAnNyYrRkKmMwWsSvVhHdDbB") end def mapwildcards(seq) seq.downcase.tr("rRyYmMkKwWsSbBdDhHvV", "nNnNnNnNnNnNnNnNnNnN") end def getseq(filename, mirrored = false, rm = "fwd") sequences = [] rcseqs = [] File.open(filename) do |file| seqs = file.read.split(">") seqs.shift seqs.each do |seq| seqarr = seq.split(/\n/) header = seqarr.shift.chomp seq = seqarr.collect{|v| v.chomp}.join('') sequences.push(seq) rcseqs.push(es_revcomp(seq)) end end ret = sequences.join("|") if mirrored then ret += "|" + rcseqs.reverse.join("|") end case rm when "fwd" then #pass when "rev" then ret = ret.reverse when "cpl" then ret = es_comp(ret) when "rcl" then ret = es_revcomp(ret) else raise "unknown readmode" end ret end def run_encseq_comparison(filename, mirrored, lossless, readmode, singlechars, numsamples = NUMSAMPLES) seq = getseq(filename, mirrored, readmode) ranges = [] numsamples.times do len = rand((seq.length)/2) start = rand(seq.length-1-len); stop = start + len ranges.push([start, stop]) end ranges.each do |rng| line = "#{$bin}gt encseq decode -output concat " + \ "-range #{rng[0]} #{rng[1]} " + \ "#{"-lossless" if lossless} " + \ "-dir #{readmode} #{"-mirrored" if mirrored} " + \ "#{"-singlechars" if singlechars} #{filename.split('/').last}" if mirrored and AATESTSEQS.include?(filename) # -mirroring should fail on proteins run_test(line, :retval => 1) else run_test line File.open("seqout", "w+") do |f| outseq = seq[rng[0]..rng[1]] if DNATESTSEQS.include?(filename) and !lossless then outseq = mapwildcards(outseq) end f.write(outseq) f.write("\n") end run "diff seqout #{last_stdout}" end end end def testformirrored(s, readmode) Name "gt encseq decode #{s.split('/').last} #{readmode}" Keywords "encseq gt_encseq_decode mirroring lossless" Test do [false, true].each do |lossless| run "rm -f #{s}.*" run "#{$bin}gt encseq encode " + \ "#{"-lossless" if lossless} " + \ "#{s}" [false, true].each do |mirrored| [false, true].each do |singlechars| run_encseq_comparison(s, mirrored, lossless, readmode, singlechars) seq = getseq(s, mirrored, readmode) line = "#{$bin}gt encseq decode -output concat -dir #{readmode} " + \ "#{"-mirrored" if mirrored} " + \ "#{"-lossless" if lossless} " + \ "#{"-singlechars" if singlechars} ./#{s.split('/').last}" if mirrored and AATESTSEQS.include?(s) # -mirroring should fail on proteins run_test(line, :retval => 1) else run_test line File.open("seqout", "w+") do |f| if DNATESTSEQS.include?(s) and !lossless then seq = mapwildcards(seq) end f.write(seq) f.write("\n") end run "diff seqout #{last_stdout}" end end end end end end DNATESTSEQS.each do |s| DNAREADMODES.each do |readmode| testformirrored(s, readmode) end end AATESTSEQS.each do |s| STDREADMODES.each do |readmode| testformirrored(s, readmode) end end fastafiles = ["Atinsert.fna", "Duplicate.fna", "Random-Small.fna", "Random.fna", "Copysorttest.fna", "Random159.fna", "Random160.fna", "RandomN.fna", "TTT-small.fna", "trna_glutamine.fna", "Small.fna", "Verysmall.fna", "Arabidopsis-C99826.fna"] genbankfiles = fastafiles.collect{ |f| f.gsub(".fna",".gbk") } emblfiles = fastafiles.collect{ |f| f.gsub(".fna",".embl") } [genbankfiles, emblfiles].each do |formatfiles| formatfiles.each do |formatfile| Name "gt sequence formats (#{formatfile})" Keywords "gt_encseq formats" Test do fasta = formatfile.gsub(/\.[a-z]+$/, ".fna") if File.exists?("#{$testdata}#{fasta}") then run "cp #{$testdata}#{formatfile} infile" run_test "#{$bin}gt encseq encode -v -indexname sfx infile" run_test "#{$bin}gt encseq decode -output concat sfx > sfx.seq" run_test "#{$bin}gt encseq info sfx > sfx.info" run_test "#{$bin}gt encseq check sfx" run "cp #{$testdata}#{fasta} infile" run_test "#{$bin}gt encseq encode -v -indexname sfx infile" run_test "#{$bin}gt encseq decode -output concat sfx > sfx2.seq" run_test "#{$bin}gt encseq info sfx > sfx2.info" run "diff sfx.seq sfx2.seq" run "diff sfx.info sfx2.info" end end end end Name "gt encseq mirrored trailing wildcard" Keywords "encseq gt_encseq_encode wildcards mirror" Test do run "cp #{$testdata}wildcardatend.fna infile" run_test "#{$bin}gt encseq encode infile" run_test "#{$bin}gt encseq info -mirrored infile | grep range > mirr.info" run "cp #{$testdata}wildcardatend_rev.fna infile" run_test "#{$bin}gt encseq encode infile" run_test "#{$bin}gt encseq info infile | grep range > rev.info" run "diff mirr.info rev.info" end Name "gt encseq mirrored no trailing wildcard" Keywords "encseq gt_encseq_encode wildcards mirror" Test do run "cp #{$testdata}nowildcardatend.fna infile" run_test "#{$bin}gt encseq encode infile" run_test "#{$bin}gt encseq info -mirrored infile | grep range > mirr.info" run "cp #{$testdata}nowildcardatend_rev.fna infile" run_test "#{$bin}gt encseq encode infile" run_test "#{$bin}gt encseq info infile | grep range > rev.info" run "diff mirr.info rev.info" end Name "gt encseq decode single sequence" Keywords "encseq gt_encseq_decode single" Test do run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna" run_test "#{$bin}gt encseq decode -seq 3 foo" run "diff #{last_stdout} #{$testdata}Atinsert_single_3.fna" end Name "gt encseq decode single sequence (reverse)" Keywords "encseq gt_encseq_decode single" Test do run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna" run_test "#{$bin}gt encseq decode -dir rev -seq 17 foo" run "diff #{last_stdout} #{$testdata}Atinsert_single_3_rev.fna" end Name "gt encseq decode single sequence (invalid seqnumber)" Keywords "encseq gt_encseq_decode single" Test do run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna" run_test "#{$bin}gt encseq decode -seq 36 foo", :retval => 1 grep last_stderr, /exceeds/ end Name "gt encseq decode single sequence (with -output concat)" Keywords "encseq gt_encseq_decode single" Test do run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna" run_test "#{$bin}gt encseq decode -output concat -seq 36 foo", :retval => 1 grep last_stderr, /can only be used with the/ end Name "gt encseq decode sequence range" Keywords "encseq gt_encseq_decode seqrange" Test do run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna" run_test "#{$bin}gt encseq decode -seqrange 3 7 foo" run "diff #{last_stdout} #{$testdata}Atinsert_seqrange_3-7.fna" end Name "gt encseq decode sequence range (reverse)" Keywords "encseq gt_encseq_decode seqrange" Test do run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna" run_test "#{$bin}gt encseq decode -dir rev -seqrange 13 17 foo" run "diff #{last_stdout} #{$testdata}Atinsert_seqrange_13-17_rev.fna" end Name "gt encseq decode sequence range (invalid range start)" Keywords "encseq gt_encseq_decode seqrange" Test do run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna" run_test "#{$bin}gt encseq decode -seqrange 37 49 foo", :retval => 1 grep last_stderr, /exceeding/ end Name "gt encseq decode sequence range (invalid range end)" Keywords "encseq gt_encseq_decode seqrange" Test do run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna" run_test "#{$bin}gt encseq decode -seqrange 3 49 foo", :retval => 1 grep last_stderr, /exceeding/ end Name "gt encseq decode sequence range (with -output concat)" Keywords "encseq gt_encseq_decode seqrange" Test do run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna" run_test "#{$bin}gt encseq decode -output concat -seqrange 3 49 foo", \ :retval => 1 grep last_stderr, /can only be used with the/ end Name "gt encseq Lua bindings" Keywords "encseq gt_scripts " Test do run_test "#{$bin}gt #{$testdata}gtscripts/encseq.lua #{$testdata}" end Name "gt encseq 64bit/32bit header (success)" Keywords "encseq encseq_file_format" Test do is64 = Kernel.system("#{$bin}gt -64bit") if is64 then bit = "64" else bit = "32" end run_test "#{$bin}gt encseq info -noindexname #{$testdata}foo.#{bit}" run "diff #{last_stdout} #{$testdata}foo.#{bit}.info_map" run_test "#{$bin}gt encseq info -noindexname -nomap #{$testdata}foo.#{bit}" run "diff #{last_stdout} #{$testdata}foo.#{bit}.info_nomap" end Name "gt encseq 64bit/32bit header (failure)" Keywords "encseq encseq_file_format" Test do is64 = Kernel.system("#{$bin}gt -64bit") if !is64 then bit = "64" else bit = "32" end run_test "#{$bin}gt encseq info -noindexname #{$testdata}foo.#{bit}", \ :retval => 1 grep last_stderr, /please use correct index for this platform/ run_test "#{$bin}gt encseq info -noindexname -nomap #{$testdata}foo.#{bit}", \ :retval => 1 grep last_stderr, /please use correct index for this platform/ end Name "gt encseq incompatible file format version" Keywords "encseq encseq_file_format" Test do is64 = Kernel.system("#{$bin}gt -64bit") if is64 then bit = "64" else bit = "32" end run_test "#{$bin}gt encseq info -noindexname #{$testdata}foo.#{bit}.ver0", \ :retval => 1 grep last_stderr, /is format version 0/ run_test "#{$bin}gt encseq info -noindexname -nomap #{$testdata}foo.#{bit}.ver0", \ :retval => 1 grep last_stderr, /is format version 0/ end ["yes", "no"].each do |yn| Name "gt encseq MD5 from file <-> from seq lossless #{yn}" Keywords "gt_encseq encseq md5" Test do fastafiles.each do |fn| run "#{$bin}gt encseq encode -lossless #{yn} -indexname idx #{$testdata}/#{fn}" run_test "#{$bin}gt encseq md5 -force -o out1 idx" run_test "#{$bin}gt encseq md5 -force -fromindex no -o out2 idx" run "diff out1 out2" end end end Name "gt encseq MD5 index w/o MD5 support" Keywords "encseq gt_encseq md5" Test do run "#{$bin}gt encseq encode -md5 no -indexname foo #{$testdata}Atinsert.fna" run_test "#{$bin}gt encseq md5 foo", :retval => 1 grep last_stderr, /does not have MD5 support/ end Name "gt encseq colorspace FASTQ failure" Keywords "encseq gt_encseq colorspace" Test do run_test "#{$bin}gt encseq encode -indexname foo #{$testdata}solid_color_reads.fastq", :retval => 1 grep last_stderr, /illegal character \'3\'/ end Name "gt encseq custom alphabet storage" Keywords "encseq gt_encseq alphabet custom_alphabet" Test do Dir.glob("#{$cur}/gtdata/trans/TransDNA*") do |file| run_test "#{$bin}gt encseq encode -smap #{file} -indexname foo #{$testdata}at100K1" run "#{$bin}gt encseq info -show_alphabet foo" alphainesq = File.open(last_stdout).read.match(/alphabet definition:\n([-1-9_a-zA-Z\n]+)\n\n/) if alphainesq.nil? then raise "saved alphabet definition is empty for file #{file}" elsif alphainesq[1]+"\n" != File.read(file) then raise "saved alphabet definition is not properly preserved for file #{file}" end end end genometools-1.5.1/testsuite/gt_env_options_include.rb000066400000000000000000000006041211610345200231620ustar00rootroot00000000000000Name "$GT_ENV_OPTIONS parsing (-help)" Keywords "gt_env_options" Test do run("env GT_ENV_OPTIONS=-help #{$bin}gt", :retval => 1) grep last_stdout, /spacepeak/ end Name "$GT_ENV_OPTIONS parsing (-spacepeak)" Keywords "gt_env_options" Test do run "env GT_ENV_OPTIONS=-spacepeak #{$bin}gt gff3 #{$testdata}standard_gene_as_tree.gff3" grep last_stdout, /space peak in megabytes/ end genometools-1.5.1/testsuite/gt_eval_include.rb000066400000000000000000000077751211610345200215660ustar00rootroot00000000000000Name "gt eval test 1" Keywords "gt_eval" Test do run_test "#{$bin}gt eval #{$testdata}gt_eval_test_1.in #{$testdata}gt_eval_test_1.in" run "diff #{last_stdout} #{$testdata}gt_eval_test_1.out" end 2.upto(8) do |i| Name "gt eval test #{i}" Keywords "gt_eval" Test do run_test "#{$bin}gt eval #{$testdata}gt_eval_test_#{i}.reality #{$testdata}gt_eval_test_#{i}.prediction" run "diff #{last_stdout} #{$testdata}gt_eval_test_#{i}.nuc" end Name "gt eval test #{i} -nuc no" Keywords "gt_eval" Test do run_test "#{$bin}gt eval -nuc no #{$testdata}gt_eval_test_#{i}.reality #{$testdata}gt_eval_test_#{i}.prediction" run "diff #{last_stdout} #{$testdata}gt_eval_test_#{i}.out" end end 9.upto(10) do |i| Name "gt eval test #{i}" Keywords "gt_eval" Test do run_test "#{$bin}gt eval #{$testdata}gt_eval_test_#{i}.in #{$testdata}gt_eval_test_#{i}.in" run "diff #{last_stdout} #{$testdata}gt_eval_test_#{i}.out" end end Name "gt eval prob 1" Keywords "gt_eval" Test do run_test "#{$bin}gt eval -nuc no #{$testdata}gt_eval_prob_1.reality #{$testdata}gt_eval_prob_1.prediction" run "diff #{last_stdout} #{$testdata}gt_eval_prob_1.out" end Name "gt eval prob 1 (swapped)" Keywords "gt_eval" Test do run_test "#{$bin}gt eval -nuc no #{$testdata}gt_eval_prob_1.prediction #{$testdata}gt_eval_prob_1.reality" run "diff #{last_stdout} #{$testdata}gt_eval_prob_1.out_swapped" end Name "gt eval -ltr test 1" Keywords "gt_eval" Test do run_test "#{$bin}gt eval -ltr #{$testdata}gt_eval_ltr_test_1.in #{$testdata}gt_eval_ltr_test_1.in" run "diff #{last_stdout} #{$testdata}gt_eval_ltr_test_1.out" end 2.upto(9) do |i| Name "gt eval -ltr test #{i}" Keywords "gt_eval" Test do run_test "#{$bin}gt eval -ltr #{$testdata}gt_eval_ltr_test_#{i}.reality #{$testdata}gt_eval_ltr_test_#{i}.prediction" run "diff #{last_stdout} #{$testdata}gt_eval_ltr_test_#{i}.out" end end Name "gt eval -ltr prob 1 (failure)" Keywords "gt_eval" Test do run_test("#{$bin}gt eval -ltrdelta 30 -ltr #{$testdata}gt_eval_ltr_prob_1.reality #{$testdata}gt_eval_ltr_prob_1.prediction", :retval => 1) grep(last_stderr, "is not sorted") end Name "gt eval -ltr prob 1 (success)" Keywords "gt_eval" Test do run_test "#{$bin}gt gff3 -sort #{$testdata}gt_eval_ltr_prob_1.prediction | #{$memcheck} #{$bin}gt eval -ltrdelta 30 -ltr #{$testdata}gt_eval_ltr_prob_1.reality -" run "diff #{last_stdout} #{$testdata}gt_eval_ltr_prob_1.out" end if $gttestdata then Name "gt eval test (gth rate 0)" Keywords "gt_eval" Test do run_test("#{$bin}gt eval -nuc no #{$testdata}encode_known_genes_Mar07.gff3 #{$gttestdata}eval/complete_result_all_rate_0_minscr_0.95.gff3", :maxtime => 120) run "diff #{last_stdout} #{$gttestdata}eval/gth_analysis_rate_0_minscr_0.95.txt" end Name "gt eval test (gth rate 1)" Keywords "gt_eval" Test do run_test("#{$bin}gt eval -nuc no #{$testdata}encode_known_genes_Mar07.gff3 #{$gttestdata}eval/complete_result_all_rate_1_minscr_0.95.gff3", :maxtime => 120) run "diff #{last_stdout} #{$gttestdata}eval/gth_analysis_rate_1_minscr_0.95.txt" end Name "gt eval test (gth rate 3)" Keywords "gt_eval" Test do run_test("#{$bin}gt eval -nuc no #{$testdata}encode_known_genes_Mar07.gff3 #{$gttestdata}eval/complete_result_all_rate_3_minscr_0.90.gff3", :maxtime => 240) run "diff #{last_stdout} #{$gttestdata}eval/gth_analysis_rate_3_minscr_0.90.txt" end Name "gt eval test (gth rate 5)" Keywords "gt_eval" Test do run_test("#{$bin}gt eval -nuc no #{$testdata}encode_known_genes_Mar07.gff3 #{$gttestdata}eval/complete_result_all_rate_5_minscr_0.90.gff3", :maxtime => 120) run "diff #{last_stdout} #{$gttestdata}eval/gth_analysis_rate_5_minscr_0.90.txt" end Name "gt eval test (gth rate 10)" Keywords "gt_eval" Test do run_test("#{$bin}gt eval -nuc no #{$testdata}encode_known_genes_Mar07.gff3 #{$gttestdata}eval/complete_result_all_rate_10_minscr_0.85.gff3", :maxtime => 120) run "diff #{last_stdout} #{$gttestdata}eval/gth_analysis_rate_10_minscr_0.85.txt" end end genometools-1.5.1/testsuite/gt_extractfeat_include.rb000066400000000000000000000164111211610345200231340ustar00rootroot00000000000000Name "gt extractfeat -seqfile test 1" Keywords "gt_extractfeat" Test do run_test "#{$bin}gt extractfeat -type gene -seqfile #{$testdata}gt_extractfeat_succ_1.fas #{$testdata}gt_extractfeat_succ_1.gff3" run "diff #{last_stdout} #{$testdata}gt_extractfeat_succ_1.out" end Name "gt extractfeat -seqfile test 1 (compressed)" Keywords "gt_extractfeat" Test do run_test "#{$bin}gt extractfeat -type gene -seqfile #{$testdata}gt_extractfeat_succ_1.fas.gz #{$testdata}gt_extractfeat_succ_1.gff3" run "diff #{last_stdout} #{$testdata}gt_extractfeat_succ_1.out" end Name "gt extractfeat -seqfile test 1 (with -o)" Keywords "gt_extractfeat" Test do run_test "#{$bin}gt extractfeat -o test.fas -type gene -seqfile #{$testdata}gt_extractfeat_succ_1.fas.gz #{$testdata}gt_extractfeat_succ_1.gff3" run "diff test.fas #{$testdata}gt_extractfeat_succ_1.out" end Name "gt extractfeat -seqfile test 2" Keywords "gt_extractfeat" Test do run_test "#{$bin}gt extractfeat -type gene -seqfile #{$testdata}gt_extractfeat_succ_2.fas #{$testdata}gt_extractfeat_succ_2.gff3" run "diff #{last_stdout} #{$testdata}gt_extractfeat_succ_2.out1" end Name "gt extractfeat -seqfile test 3" Keywords "gt_extractfeat" Test do run_test "#{$bin}gt extractfeat -type exon -seqfile #{$testdata}gt_extractfeat_succ_2.fas #{$testdata}gt_extractfeat_succ_2.gff3" run "diff #{last_stdout} #{$testdata}gt_extractfeat_succ_2.out2" end Name "gt extractfeat -seqfile test 4" Keywords "gt_extractfeat" Test do run_test "#{$bin}gt extractfeat -type exon -join -seqfile #{$testdata}gt_extractfeat_succ_2.fas #{$testdata}gt_extractfeat_succ_2.gff3" run "diff #{last_stdout} #{$testdata}gt_extractfeat_succ_2.out3" end Name "gt extractfeat -seqfile test 5" Keywords "gt_extractfeat" Test do run_test "#{$bin}gt extractfeat -type exon -join -seqfile #{$testdata}gt_extractfeat_succ_3.fas #{$testdata}gt_extractfeat_succ_3.gff3" run "diff #{last_stdout} #{$testdata}gt_extractfeat_succ_3.out" end Name "gt extractfeat -regionmapping fail 1 (no mapping file)" Keywords "gt_extractfeat" Test do run_test("#{$bin}gt extractfeat -type exon -regionmapping #{$testdata}nonexistent_file #{$testdata}gt_extractfeat_succ_1.gff3", :retval => 1 ) grep(last_stderr, "cannot run file"); end Name "gt extractfeat -regionmapping fail 2 (empty file)" Keywords "gt_extractfeat" Test do run_test("#{$bin}gt extractfeat -type exon -regionmapping #{$testdata}empty_file #{$testdata}gt_extractfeat_succ_1.gff3", :retval => 1 ) grep(last_stderr, "'mapping' is not defined "); end Name "gt extractfeat -regionmapping fail 3 (wrong type)" Keywords "gt_extractfeat" Test do run_test("#{$bin}gt extractfeat -type exon -regionmapping #{$testdata}regionmapping_1.lua #{$testdata}gt_extractfeat_succ_1.gff3", :retval => 1 ) grep(last_stderr, "'mapping' must be either a table or a function "); end Name "gt extractfeat -regionmapping fail 3 (nil mapping)" Keywords "gt_extractfeat" Test do run_test("#{$bin}gt extractfeat -type exon -regionmapping #{$testdata}regionmapping_2.lua #{$testdata}gt_extractfeat_succ_2.gff3", :retval => 1 ) grep(last_stderr, "is nil"); end Name "gt extractfeat -regionmapping fail 4 (non string mapping)" Keywords "gt_extractfeat" Test do run_test("#{$bin}gt extractfeat -type exon -regionmapping #{$testdata}regionmapping_3.lua #{$testdata}gt_extractfeat_succ_2.gff3", :retval => 1 ) grep(last_stderr, "is not a string"); end Name "gt extractfeat -regionmapping fail 5 (function returns nil)" Keywords "gt_extractfeat" Test do run_test("#{$bin}gt extractfeat -type exon -regionmapping #{$testdata}regionmapping_5.lua #{$testdata}gt_extractfeat_succ_2.gff3", :retval => 1 ) grep(last_stderr, "function 'mapping' must return a string"); end Name "gt extractfeat -regionmapping test 1 (mapping table)" Keywords "gt_extractfeat" Test do run "env GT_TESTDATA=#{$testdata} #{$memcheck} #{$bin}gt extractfeat -type gene -regionmapping #{$testdata}regionmapping_4.lua #{$testdata}gt_extractfeat_succ_1.gff3" run "diff #{last_stdout} #{$testdata}gt_extractfeat_succ_1.out" end Name "gt extractfeat -regionmapping test 1 (mapping function)" Keywords "gt_extractfeat" Test do run "env GT_TESTDATA=#{$testdata} #{$memcheck} #{$bin}gt extractfeat -type gene -regionmapping #{$testdata}regionmapping_6.lua #{$testdata}gt_extractfeat_succ_1.gff3" end Name "gt extractfeat error message" Keywords "gt_extractfeat" Test do run "#{$bin}gt gff3 -offset 1000 #{$testdata}gt_extractfeat_succ_1.gff3 | " + "#{$bin}gt extractfeat -type gene -seqfile " + "#{$testdata}gt_extractfeat_succ_1.fas -", :retval => 1 grep last_stderr, "Has the sequence-region to sequence mapping been defined correctly" end Name "gt extractfeat -translate" Keywords "gt_extractfeat" Test do run "#{$bin}gt extractfeat -seqfile #{$testdata}U89959_genomic.fas " + "-type CDS -join -translate #{$testdata}U89959_cds.gff3" run "diff #{last_stdout} #{$testdata}U89959_cds.fas" end Name "gt extractfeat -help" Keywords "gt_extractfeat" Test do run_test "#{$bin}gt extractfeat -help" grep(last_stdout, "Lua"); end Name "gt extractfeat -seqid" Keywords "gt_extractfeat" Test do run "#{$bin}gt extractfeat -seqfile #{$testdata}U89959_genomic.fas " + "-type CDS -join -seqid " + "#{$testdata}gt_extractfeat_seqid_target.gff3" run "diff #{last_stdout} #{$testdata}gt_extractfeat_seqid.fas" end Name "gt extractfeat -target" Keywords "gt_extractfeat" Test do run "#{$bin}gt extractfeat -seqfile #{$testdata}U89959_genomic.fas " + "-type mRNA -join -target " + "#{$testdata}gt_extractfeat_seqid_target.gff3" run "diff #{last_stdout} #{$testdata}gt_extractfeat_target.fas" end Name "gt extractfeat -seqid -target" Keywords "gt_extractfeat" Test do run "#{$bin}gt extractfeat -seqfile #{$testdata}U89959_genomic.fas " + "-type CDS -join -seqid -target " + "#{$testdata}gt_extractfeat_seqid_target.gff3" run "diff #{last_stdout} #{$testdata}gt_extractfeat_seqid_target.fas" end Name "gt extractfeat compare query method combinations" Keywords "gt_extractfeat query_methods" Test do run "#{$bin}gt encseq encode -lossless -indexname ./idx " + "#{$testdata}gt_extractfeat_mappings.fas" ["", ".md5"].each do |md5| ["-usedesc","-matchdesc"].each do |method| run "#{$bin}gt extractfeat #{method} " + "-seqfile #{$testdata}gt_extractfeat_mappings.fas " + "-type gene #{$testdata}gt_extractfeat_mappings#{md5}.gff3 " run "diff #{last_stdout} #{$testdata}gt_extractfeat_mappings_ref#{md5}.fas" run "#{$bin}gt extractfeat #{method} -seqfiles " + "#{$testdata}gt_extractfeat_mappings_sep1.fas " + "#{$testdata}gt_extractfeat_mappings_sep2.fas " + "-type gene #{$testdata}gt_extractfeat_mappings#{md5}.gff3 " run "diff #{last_stdout} #{$testdata}gt_extractfeat_mappings_ref#{md5}.fas" run "#{$bin}gt extractfeat #{method} -encseq idx " + "-type gene #{$testdata}gt_extractfeat_mappings#{md5}.gff3 " run "diff #{last_stdout} #{$testdata}gt_extractfeat_mappings_ref#{md5}.fas" end run "env GT_TESTDATA=#{$testdata} #{$memcheck} #{$bin}gt extractfeat " + "-regionmapping #{$testdata}gt_extractfeat_mappings_seprm.lua " + "-type gene #{$testdata}gt_extractfeat_mappings#{md5}.gff3 " run "diff #{last_stdout} #{$testdata}gt_extractfeat_mappings_ref#{md5}.fas" end end genometools-1.5.1/testsuite/gt_extractseq_include.rb000066400000000000000000000157301211610345200230100ustar00rootroot00000000000000Name "gt extractseq -help" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -help" grep last_stdout, "Report bugs to" end Name "gt extractseq -noop" Keywords "gt_extractseq" Test do run_test("#{$bin}gt extractseq -noop", :retval => 1) grep last_stderr, "unknown option" end Name "gt extractseq test stdin" Keywords "gt_extractseq" Test do run "cat #{$testdata}foo.fas | #{$memcheck} #{$bin}gt extractseq -match foo" run "diff #{last_stdout} #{$testdata}foo.fas" end Name "gt extractseq test foo" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -match foo #{$testdata}foo.fas" run "diff #{last_stdout} #{$testdata}foo.fas" end Name "gt extractseq test foo width 4" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -match foo -width 4 #{$testdata}foo.fas" run "diff #{last_stdout} #{$testdata}foo_width4.fas" end Name "gt extractseq test bar" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -match bar -width 4 #{$testdata}bar.fas" run "diff #{last_stdout} #{$testdata}bar.fas" end Name "gt extractseq test baz" Keywords "gt_extractseq" Test do run "cat #{$testdata}foo.fas | #{$memcheck} #{$bin}gt extractseq -match baz - #{$testdata}bar.fas" grep(last_stdout, ".", true) end Name "gt extractseq test foo|bar" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -match 'foo|bar' #{$testdata}foo.fas #{$testdata}bar.fas" run "diff #{last_stdout} #{$testdata}foobar.fas" end Name "gt extractseq test '(foo'" Keywords "gt_extractseq" Test do run_test("#{$bin}gt extractseq -match '(foo' #{$testdata}foo.fas", :retval => 1) end Name "gt extractseq test corrupt" Keywords "gt_extractseq" Test do run_test("#{$bin}gt extractseq -match foo #{$testdata}corrupt.fas", :retval => 1) grep last_stderr, "cannot guess" end Name "gt extractseq test corrupt (stdin)" Keywords "gt_extractseq" Test do run("cat #{$testdata}corrupt.fas | #{$memcheck} #{$bin}gt extractseq -match foo", :retval => 1) end Name "gt extractseq -frompos" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -frompos 5 -topos 12 #{$testdata}foobar.fas" run "diff #{last_stdout} #{$testdata}frompos.fas" end Name "gt extractseq -frompos (stdin)" Keywords "gt_extractseq" Test do run "cat #{$testdata}foobar.fas | #{$memcheck} #{$bin}gt extractseq " + "-frompos 5 -topos 12" run "diff #{last_stdout} #{$testdata}frompos.fas" end Name "gt extractseq -frompos (fail 1)" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -frompos 5 -topos 17 #{$testdata}foobar.fas", :retval => 1 grep last_stderr, "larger than" end Name "gt extractseq -frompos (fail 2)" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -frompos 18 -topos 17 #{$testdata}foobar.fas", :retval => 1 grep last_stderr, "must be <= argument" end Name "gt extractseq marker.fas" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -frompos 21 -topos 40 #{$testdata}marker.fas" run "diff #{last_stdout} #{$testdata}marker.out" end Name "gt extractseq -keys from fastafile U89959" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -keys #{$testdata}U89959_ginums.txt " + "#{$testdata}U89959_ests.fas" run "grep -v '^#' #{last_stdout}" run "diff #{last_stdout} #{$testdata}U89959_ginums.out" end Name "gt extractseq -keys from fastafile at1MB" Keywords "gt_extractseq" Test do run "sed -e '/^[^\\>]/d' -e 's/^>gi\|\\([^\|]*\\).*/\\1/' #{$testdata}at1MB" run_test "#{$bin}gt extractseq -keys #{last_stdout} -width 70 " + "#{$testdata}at1MB" run "grep -v '^#' #{last_stdout}" run "cmp #{last_stdout} #{$testdata}at1MB" end Name "gt extractseq -keys from fastafile TrEMBL" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -keys #{$testdata}trembl-keys.txt -width 60 " + "#{$testdata}trembl.faa" run "grep -v '^#' #{last_stdout}" run "cmp #{last_stdout} #{$testdata}trembl.faa" end Name "gt extractseq -keys from fastafile (corrupt)" Keywords "gt_extractseq" Test do run_test("#{$bin}gt extractseq -keys #{$testdata}U89959_ginums.corrupt " + "#{$testdata}U89959_ests.fas", :retval => 1) end Name "gt extractseq -keys from fastafile (fail)" Keywords "gt_extractseq" Test do run_test("#{$bin}gt extractseq -keys #{$testdata}U89959_ginums.txt", :retval => 1) grep last_stderr, /requires at least one file argument/ end Name "gt suffixerator -kys with key of length 0" Keywords "gt_extractseq" Test do run_test("#{$bin}gt suffixerator -protein -ssp -tis -des -sds -kys " + "-db #{$testdata}trembl-emptykey.faa",:retval => 1) end Name "gt suffixerator -kys with keys of different length" Keywords "gt_extractseq" Test do run_test("#{$bin}gt suffixerator -protein -ssp -tis -des -sds -kys " + "-db #{$testdata}trembl-difflenkey.faa",:retval => 1) end if $gttestdata then Name "gt extractseq -keys from large fastafile" Keywords "gt_extractseq" Test do run_test "#{$bin}gt extractseq -o gi-extract.fna.gz -gzip " + "-keys #{$gttestdata}gi-queries/gi-queries.txt " + "#{$testdata}at1MB" end Name "gt extractseq -keys from fastaindex" Keywords "gt_extractseq" Test do run_test("#{$bin}gt suffixerator -protein -ssp -tis -des -sds -kys " + "-db #{$gttestdata}trembl/trembl-section.fsa.gz") run("gunzip -c #{$gttestdata}trembl/trembl-section.fsa.gz") run("mv #{last_stdout} trembl-section.fsa") run("#{$scriptsdir}/tr2deskeys.rb #{$gttestdata}trembl/trembl-section.fsa.gz") run("mv #{last_stdout} trembl-section.keylist") run("#{$scriptsdir}/randlines.rb trembl-section.keylist 1000") run("mv #{last_stdout} trembl-section.random-keylist") run_test("#{$bin}gt extractseq -keys trembl-section.keylist -width 60 " + "trembl-section.fsa.gz") run("cmp -s #{last_stdout} trembl-section.fsa") run_test("#{$bin}gt extractseq -keys #{$testdata}trkeys.txt -width 60 " + "trembl-section.fsa.gz") run("cmp -s #{last_stdout} #{$testdata}trkeys-result.txt") run_test("#{$bin}gt extractseq -keys #{last_stdout} " + "trembl-section.fsa.gz",:retval => 1) run_test("#{$bin}gt extractseq -keys #{$testdata}trembl-wrongkey.txt " + "trembl-section.fsa.gz",:retval => 1) run_test("#{$bin}gt extractseq -keys trembl-section.random-keylist -width 60 " + "trembl-section.fsa.gz") run_test("#{$bin}gt suffixerator -protein -ssp -tis -des -sds -kys sort " + "-db #{last_stdout}") run("mv #{last_stdout} trembl-section-sorted.fna") run_test("#{$bin}gt suffixerator -protein -ssp -tis -des -sds -kys " + "-db trembl-section-sorted.fna") run("#{$scriptsdir}/tr2deskeys.rb trembl-section-sorted.fna") run("mv #{last_stdout} trembl-section-sorted.keylist") run_test("#{$bin}gt extractseq -keys trembl-section-sorted.keylist " + "-width 60 trembl-section-sorted.fna") run("cmp -s #{last_stdout} trembl-section-sorted.fna") end end genometools-1.5.1/testsuite/gt_featureindex_include.rb000066400000000000000000000044461211610345200233120ustar00rootroot00000000000000Name "gt featureindex (empty file)" Keywords "gt_featureindex" Test do run "#{$bin}gt mkfeatureindex -filename tmp.db #{$testdata}/gt_view_prob_1.gff3" run "#{$bin}gt featureindex -filename tmp.db", :retval => 1 grep(last_stderr, /no sequence regions in index/) end Name "gt featureindex (empty region)" Keywords "gt_featureindex" Test do run "#{$bin}gt mkfeatureindex -filename tmp.db #{$testdata}/gt_view_prob_2.gff3" run "#{$bin}gt featureindex -filename tmp.db" run "diff #{last_stdout} #{$testdata}/gt_view_prob_2.gff3" end Name "gt featureindex (parse error in GFF3)" Keywords "gt_featureindex" Test do run "#{$bin}gt mkfeatureindex -filename tmp.db #{$testdata}/gt_gff3_fail_1.gff3", :retval => 1 grep(last_stderr, /has already been defined/) run "#{$bin}gt featureindex -filename tmp.db", :retval => 1 grep(last_stderr, /no sequence regions in index/) end Name "gt featureindex (invalid sequence ID)" Keywords "gt_featureindex" Test do run "#{$bin}gt mkfeatureindex -filename tmp.db #{$testdata}/standard_gene_simple.gff3" run "#{$bin}gt featureindex -seqid foo -filename tmp.db", :retval => 1 grep(last_stderr, /not exist/) end Name "gt featureindex (corrupt file)" Keywords "gt_featureindex" Test do File.open("corrupt.db", "w") do |file| file.write("sdfnhsnl") end run "#{$bin}gt featureindex -filename corrupt.db", :retval => 1 end FEATUREINDEX_TEST_FILES = ["#{$testdata}/eden.gff3", "#{$testdata}/standard_gene_simple.gff3", "#{$testdata}/standard_gene_as_tree.gff3", "#{$testdata}/standard_gene_with_introns_as_tree.gff3", "#{$testdata}/encode_known_genes_Mar07.gff3" ] FEATUREINDEX_TEST_FILES.each do |file| Name "gt featureindex db vs. parser (#{File.basename(file)})" Keywords "gt_featureindex" Test do run "#{$bin}gt seqids #{file}" seqids = File.open(last_stdout).readlines run "#{$bin}gt mkfeatureindex -filename tmp.db #{file}", :maxtime => 1200 seqids.each do |seqid| seqid.chomp! run "#{$bin}gt featureindex -seqid #{seqid} -retain no -filename tmp.db > out.gff3" run "#{$bin}gt gff3 -retainids no #{file} | #{$bin}gt select -seqid #{seqid}" run "diff out.gff3 #{last_stdout}" end end end genometools-1.5.1/testsuite/gt_fingerprint_include.rb000066400000000000000000000045511211610345200231530ustar00rootroot00000000000000Name "fingerprint" Keywords "gt_fingerprint" Test do run_test "#{$bin}gt fingerprint #{$testdata}U89959_ests.fas | sort | uniq" run "diff #{last_stdout} #{$testdata}U89959_ests.checklist_uniq" end Name "fingerprint (nonexistent file)" Keywords "gt_fingerprint" Test do run_test("#{$bin}gt fingerprint #{$testdata}nonexistent_file", :retval=> 1) end Name "fingerprint -check (success)" Keywords "gt_fingerprint" Test do run_test "#{$bin}gt fingerprint -check #{$testdata}U89959_ests.checklist " + "#{$testdata}U89959_ests.fas" end Name "fingerprint -check (stdin)" Keywords "gt_fingerprint" Test do run "cat #{$testdata}U89959_ests.checklist | #{$memcheck} #{$bin}gt " + "fingerprint -check - #{$testdata}U89959_ests.fas" end Name "fingerprint -check (failure)" Keywords "gt_fingerprint" Test do run_test("#{$bin}gt fingerprint -check " + "#{$testdata}U89959_ests.checklist_uniq " + "#{$testdata}U89959_ests.fas", :retval => 1) grep last_stderr, /fingerprint comparison failed/ end Name "fingerprint -check (failure)" Keywords "gt_fingerprint" Test do run_test("#{$bin}gt sequniq #{$testdata}U89959_ests.fas | #{$memcheck}" + "#{$bin}gt fingerprint -check #{$testdata}U89959_ests.checklist -", :retval => 1) grep last_stderr, /fingerprint comparison failed/ end Name "fingerprint -collisions" Keywords "gt_fingerprint" Test do run_test "#{$bin}gt fingerprint -collisions #{$testdata}U89959_ests.fas" end Name "fingerprint -duplicates (found)" Keywords "gt_fingerprint" Test do run_test("#{$bin}gt fingerprint -duplicates #{$testdata}U89959_ests.fas", :retval => 1) grep last_stderr, /duplicates found/ end Name "fingerprint -duplicates (none found)" Keywords "gt_fingerprint" Test do run_test "#{$bin}gt fingerprint -duplicates #{$testdata}U89959_genomic.fas" end Name "fingerprint -extract (found)" Keywords "gt_fingerprint" Test do run_test "#{$bin}gt fingerprint -extract 6d3b4b9db4531cda588528f2c69c0a57 " + "#{$testdata}U89959_ests.fas" run "diff #{last_stdout} #{$testdata}gt_fingerprint_extract.out" end Name "fingerprint -extract (not found)" Keywords "gt_fingerprint" Test do run_test "#{$bin}gt fingerprint -extract 7d3b4b9db4531cda588528f2c69c0a57 " + "#{$testdata}U89959_ests.fas", :retval => 1 grep last_stderr, /could not find sequence with fingerprint/ end genometools-1.5.1/testsuite/gt_genomediff_include.rb000066400000000000000000000225411211610345200227260ustar00rootroot00000000000000require 'fileutils' require 'tempfile' require '../scripts/genomediff.rb' Name "gt genomediff pck failure" Keywords "gt_genomediff pck failure" Test do run_test "#{$bin}gt suffixerator -suf -lcp -indexname esa " + "-db #{$testdata}Atinsert.fna" run_test "#{$bin}gt genomediff -indextype pck esa",:retval=>1 end Name "gt genomediff esa failure" Keywords "gt_genomediff esa failure" Test do run_test "#{$bin}gt packedindex mkindex -indexname pck " + "-db #{$testdata}Atinsert.fna" run_test "#{$bin}gt genomediff -indextype esa pck",:retval=>1 end def reverse_and_concat(file) tf = Tempfile.new("gt_rev") tmpfile = tf.path tf.close dirname = File.dirname(file) `#{$bin}gt \ convertseq -o #{tmpfile} \ -force -r #{file}` basename = File.basename(file, ".*") newfile = basename + "_plus_rev.fas" FileUtils.cp(file, newfile) file = newfile File.open(file, 'a') {|fp| File.open(tmpfile, 'r') {|tf| while line = tf.gets fp.puts line end } } failtest unless File.exist?(newfile) return newfile end kr_testable_files = [] smallfilecodes = [] bigfilecodes = [] allfiles = ["Duplicate.fna", "Random159.fna", "Random160.fna", "TTT-small.fna", "trna_glutamine.fna"] bigfiles = ["U89959_genomic.fas", "Random.fna", "Atinsert.fna"] # do not run the big tests with valgrind if $gttestdata and not $arguments["memcheck"] bigfiles.push "at1MB" end fp = File.open("#{$testdata}genomediff/testsuite", 'r') smallfilecodes = fp.readlines fp.close smallfilecodes.collect! do |filecode| "#{$testdata}genomediff/#{filecode}".chomp end # do not run the big tests with valgrind if $gttestdata and not $arguments["memcheck"] fp = File.open("#{$gttestdata}genomediff/codelist", 'r') bigfilecodes = fp.readlines fp.close bigfilecodes.collect! do |filecode| "#{$gttestdata}genomediff/#{filecode}".chomp end end allfilecodes = smallfilecodes + bigfilecodes allfilecodes.each do |code| if code.match /[^_]_0+1_/ kr_testable_files << code.chomp end end def test_pck(files, param, idxparam) run_test("#{$bin}gt " + "packedindex mkindex " + "-db #{files} " + "-dna " + "-dir rev " + "-ssp " + "-dc 64 " + "-bsize 8 " + "-sprank " + "-pl " + "#{idxparam} " + "-indexname pck") run_test( "#{$bin}gt genomediff #{param} -indextype pck pck", :maxtime => 720) end def test_esa(files, param, idxparam) run_test "#{$bin}gt suffixerator -db #{files} -indexname esa " + "-dna -suf -tis -lcp -ssp #{idxparam}" run_test "#{$bin}gt genomediff #{param} -indextype esa esa" end def test_esq(files, param) run_test "#$bin/gt genomediff #{param} #{files}" end def compare_2d_result(matrix1, matrix2) 0.upto(matrix1.length - 1) do |i_idx| 1.upto(matrix2.length) do |j_idx| if i_idx!=j_idx - 1 and matrix1[i_idx][j_idx] != matrix2[i_idx][j_idx] return matrix1[i_idx][j_idx], matrix2[i_idx][j_idx] end end end return false end Name "gt genomediff pck testset" Keywords "gt_genomediff pck" Test do allfilecodes.each do |code| test_pck("#{code}*.fas", "", "") test_pck("#{code}*.fas", "", "-mirrored") end end Name "gt genomediff esa testset" Keywords "gt_genomediff esa" Test do allfilecodes.each do |code| test_esa("#{code}*.fas", "", "") test_esa("#{code}*.fas", "", "-mirrored") end end Name "gt genomediff esq testset" Keywords "gt_genomediff esq" Test do allfilecodes.each do |code| test_esq("#{code}*.fas", "-indexname esq") test_esq("#{code}*.fas", "-indexname esq -mirrored") test_esq("esq", "") test_esq("esq", "-mirrored") end end code = smallfilecodes[0] Name "gt genomediff compare kr" Keywords "gt_genomediff esa pck check_kr simulated_data" Test do kr_testable_files.each do |code| pck_out = [] esa_out = [] esq_out = [] kr_out = [] numoffiles = 0 files = " " Dir.glob("#{code}*.fas").sort.each do |file| files += reverse_and_concat(file) + ' ' end test_pck("#{files}", "", "") File.open(last_stdout, 'r') do |outfile| while line = outfile.gets do line.chomp! next if line.match /^#/ if numoffiles == 0 numoffiles = line.match(/^\d+$/)[0].to_i else pck_out << line.split end end if numoffiles == nil or numoffiles != pck_out.length failtest("can't parse output") end end test_esa("#{files}", "", "") File.open(last_stdout, 'r') do |outfile| while line = outfile.gets do line.chomp! next if line.match /^#/ unless line.match(/^\d+$/) esa_out << line.split end end if numoffiles == nil or numoffiles != pck_out.length failtest("can't parse output or wrong line numbers") end end test_esq("#{files}", "-indexname esq") File.open(last_stdout, 'r') do |outfile| while line = outfile.gets do line.chomp! next if line.match /^#/ unless line.match(/^\d+$/) esq_out << line.split end end if numoffiles == nil or numoffiles != pck_out.length failtest("can't parse output or wrong line numbers") end end File.open("#{code}-kr.out", 'r') do |krfile| line = krfile.gets line.chomp! if numoffiles != line.to_i failtest("different num of files") end (numoffiles+1).times do krfile.gets end while line = krfile.gets do line.chomp! if line.match /^\d+$/ break end kr_out << line.split end end if result = compare_2d_result(pck_out,esa_out) failtest("different results pck-esa #{result[0]},#{result[1]}") end if result = compare_2d_result(pck_out,esq_out) failtest("different results pck-esa #{result[0]},#{result[1]}") end 0.upto(numoffiles - 1) do |i_idx| 1.upto(numoffiles) do |j_idx| unless i_idx==j_idx-1 or pck_out[i_idx][j_idx].to_f > 0.3 or kr_out[i_idx][j_idx].to_f > 0.3 if (pck_out[i_idx][j_idx].to_f - kr_out[i_idx][j_idx].to_f).abs > 0.001 failtest("different results pck-kr #{pck_out[i_idx][j_idx]},"+ "#{kr_out[i_idx][j_idx]}\n"+ "#{pck_out[i_idx][j_idx]} #{kr_out[i_idx][j_idx]}") end end end end end end def check_shulen_for_list_pairwise(list) Name "gt genomediff pairwise test" Keywords "gt_genomediff pairwise esa pck check_shulen" Test do start_idx = 1 list.each do |file1| list[start_idx..-1].each do |file2| if file1 != file2 numoffiles = 0 pck_out = [] esa_out = [] test_pck("#{$testdata}#{file1} #{$testdata}#{file2}", "", "") File.open(last_stdout, 'r') do |outfile| while line = outfile.gets do line.chomp! next if line.match /^#/ if numoffiles == 0 numoffiles = line.match(/^\d+$/)[0].to_i else pck_out << line.split end end if numoffiles == nil or numoffiles != pck_out.length failtest("can't parse output pck #{file1} #{file2}") end end test_esa("#{$testdata}#{file1} #{$testdata}#{file2}", "", "") File.open(last_stdout, 'r') do |outfile| while line = outfile.gets do line.chomp! next if line.match /^#/ unless line.match(/^\d+$/) esa_out << line.split end end if numoffiles == NIL or numoffiles != pck_out.length failtest("can't parse output esa #{file1} #{file2}") end end if result = compare_2d_result(pck_out,esa_out) failtest("different results pck-esa #{result[0]},#{result[1]}") end end end start_idx += 1 end end end check_shulen_for_list_pairwise(allfiles) check_shulen_for_list_pairwise(bigfiles) Name "gt genomediff smallfiles all at once" Keywords "gt_genomediff esa pck small check_shulen" Test do realfiles = "" allfiles.each do |file| realfiles += "#{$testdata}"+ file + " " end numoffiles = 0 pck_out = [] esa_out =[] test_pck(realfiles, "", "") File.open(last_stdout, 'r') do |outfile| while line = outfile.gets do line.chomp! next if line.match /^#/ if numoffiles == 0 numoffiles = line.match(/^\d+$/)[0].to_i else pck_out << line.split end end if numoffiles == nil or numoffiles != pck_out.length failtest("can't parse output") end end test_esa(realfiles, "", "") File.open(last_stdout, 'r') do |outfile| while line = outfile.gets do line.chomp! next if line.match /^#/ unless line.match(/^\d+$/) esa_out << line.split end end if numoffiles == NIL or numoffiles != pck_out.length failtest("can't parse output or wrong line numbers") end end if result = compare_2d_result(pck_out,esa_out) failtest("different results pck-esa #{result[0]},#{result[1]}") end end genometools-1.5.1/testsuite/gt_gff3_include.rb000066400000000000000000001127041211610345200214510ustar00rootroot00000000000000Name "gt gff3 -help" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -help" grep last_stdout, "Report bugs to" end Name "gt gff3 -noop" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -noop", :retval => 1) grep last_stderr, "unknown option" end Name "gt gff3 short test (stdin)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 < #{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "diff #{last_stdout} #{$testdata}gff3_file_1_short_sorted.txt" end Name "gt gff3 short test (file)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "diff #{last_stdout} #{$testdata}gff3_file_1_short_sorted.txt" end Name "gt gff3 short test (compressed output)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -o test -gzip #{$testdata}gff3_file_1_short.txt" grep last_stderr, "appending it" end Name "gt gff3 prob 1" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_prob_1.gff3", :retval => 1) end Name "gt gff3 prob 2" Keywords "gt_gff3" Test do run "env LC_ALL=C #{$bin}gt gff3 -sort #{$testdata}gt_gff3_prob_2.in" run "diff #{last_stdout} #{$testdata}gt_gff3_prob_2.out" end Name "gt gff3 prob 3" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_prob_3.gff3" end Name "gt gff3 prob 5" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -sort #{$testdata}gt_gff3_prob_5.in" run "diff #{last_stdout} #{$testdata}gt_gff3_prob_5.out" end Name "gt gff3 prob 6" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -sort #{$testdata}gt_gff3_prob_6.in", :retval => 1) grep(last_stderr, /does not contain/); end Name "gt gff3 prob 7 (unsorted)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_prob_7.in | #{$bin}gt gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_prob_7.unsorted" end Name "gt gff3 prob 7 (sorted)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -sort #{$testdata}gt_gff3_prob_7.in | #{$bin}gt gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_prob_7.sorted" end Name "gt gff3 prob 8" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_prob_8.in" run "diff #{last_stdout} #{$testdata}gt_gff3_prob_8.out" end Name "gt gff3 prob 9" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_prob_9.in" run "diff #{last_stdout} #{$testdata}gt_gff3_prob_9.out" end Name "gt gff3 prob 10" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_prob_10.in" run "diff #{last_stdout} #{$testdata}gt_gff3_prob_10.out" end Name "gt gff3 prob 11" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_prob_11.in" run "diff #{last_stdout} #{$testdata}gt_gff3_prob_11.out" end Name "gt gff3 prob 12" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_prob_12.gff3", :retval => 1) grep last_stderr, "Parent .* was not defined" end Name "gt gff3 prob 12 (-checkids)" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -checkids #{$testdata}gt_gff3_prob_12.gff3", :retval => 1) grep last_stderr, "is separated from its counterpart on line 5 by terminator" end Name "gt gff3 prob 13 (DAG)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -sort -tidy #{$testdata}gt_gff3_prob_13.gff3" run_test "#{$bin}gt gff3 #{last_stdout}" end Name "gt gff3 test 1.1" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -o /dev/null -force -v #{$testdata}gt_gff3_test_1.in" end Name "gt gff3 test 1.2" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 - - < #{$testdata}gt_gff3_test_1.in", :retval => 1) end Name "gt gff3 test 1.3" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_1.in | #{$bin}gt gff3" end Name "gt gff3 test 2" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_test_2.gff3", :retval => 1) end Name "gt gff3 test 3" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_3.gff3" end # make sure the -typecheck-built-in option works (for tests below!) Name "gt gff3 -typecheck-built-in" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -typecheck-built-in " + "#{$testdata}standard_gene_as_tree.gff3") end Name "gt gff3 (standard gene as DAG)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}standard_gene_as_dag.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_dag_sorted.gff3" end 4.upto(14) do |i| Name "gt gff3 test #{i}" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -typecheck-built-in " + "#{$testdata}gt_gff3_test_#{i}.gff3", :retval => 1) end end Name "gt gff3 test 15" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_15.gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_test_15.out" end Name "gt gff3 test 16" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_16.gff3" end Name "gt gff3 test 17" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_17.gff3", :retval => 1 grep(last_stderr, /unknown meta-directive encountered/); grep(last_stderr, /does not have data: ##foo/); end Name "gt gff3 test 18" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_18.gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_test_18.gff3" end Name "gt gff3 test 19" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_19.gff3" end Name "gt gff3 test 20" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_test_20.gff3", :retval => 1); grep(last_stderr, /could not parse/); end Name "gt gff3 test 21" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_test_21.gff3", :retval => 1); grep(last_stderr, /does not equal required version/); end Name "gt gff3 test 22" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_22.gff3 | #{$bin}gt gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_test_22.gff3" end Name "gt gff3 test 22 (-sort)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -sort #{$testdata}gt_gff3_test_22.gff3 | #{$bin}gt gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_test_22.gff3" end Name "gt gff3 test 23" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_23.gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_test_23.gff3" end Name "gt gff3 test 24" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_24.gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_test_23.gff3" end Name "gt gff3 test 25" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_test_25.gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_test_25.out" end Name "gt gff3 test 26" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_test_26.gff3", :retval => 1) end Name "gt gff3 test 27" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_test_27.gff3", :retval => 1) grep(last_stderr, /before the corresponding/); end Name "gt gff3 test additional attribute" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}additional_attribute.gff3" run "diff #{last_stdout} #{$testdata}additional_attribute.gff3" end Name "gt gff3 fail 1" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_fail_1.gff3", :retval => 1) end Name "gt gff3 -addintrons overlapping exons" Keywords "gt_gff3 addintrons" Test do run_test "#{$bin}gt gff3 -addintrons " + \ "#{$testdata}gt_gff3_addintrons_overlapping_exons.gff3" grep last_stderr, /overlapping boundary .* not placing 'intron' inter-feature/ run "diff #{last_stdout} #{$testdata}gt_gff3_addintrons_overlapping_exons_with_introns.gff3" end Name "gt gff3 test option -addintrons" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -addintrons #{$testdata}addintrons.gff3" run "diff #{last_stdout} #{$testdata}addintrons.out" end Name "gt gff3 test option -offset 1000" Keywords "gt_gff3 offset" Test do run_test "#{$bin}gt gff3 -offset 1000 #{$testdata}gt_gff3_offset_test.gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_offset_test.out1000" end Name "gt gff3 test option -offset -1" Keywords "gt_gff3 offset" Test do run_test "#{$bin}gt gff3 -offset -1 #{$testdata}gt_gff3_offset_test.gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_offset_test.out-1" end Name "gt gff3 test option -offset -999" Keywords "gt_gff3 offset" Test do run_test "#{$bin}gt gff3 -offset -999 #{$testdata}gt_gff3_offset_test.gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_offset_test.out-999" end Name "gt gff3 test option -offset -1001 (overflow)" Keywords "gt_gff3 offset" Test do run_test("#{$bin}gt gff3 -offset -1001 #{$testdata}gt_gff3_offset_test.gff3", :retval => 1) end Name "gt gff3 test option -offsetfile" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -offsetfile #{$testdata}gt_gff3_offsetfile_test.offsetfile #{$testdata}gt_gff3_offsetfile_test.gff3" run "diff #{last_stdout} #{$testdata}gt_gff3_offsetfile_test.out" end Name "gt gff3 test option -mergefeat" Keywords "gt_gff3 mergefeat" Test do run_test "#{$bin}gt gff3 -sort -mergefeat #{$testdata}mergefeat.gff3" run "diff #{last_stdout} #{$testdata}mergefeat.out" end Name "gt gff3 fail option -offsetfile" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -offsetfile #{$testdata}empty_file #{$testdata}gt_gff3_offsetfile_test.gff3", :retval => 1) end Name "gt gff3 fail attribute after dot" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}attribute_after_dot.gff3", :retval => 1) grep last_stderr, "more than one attribute token defined" end Name "gt gff3 fail attribute with multiple equal signs" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}attribute_w_multiple_equals.gff3", :retval => 1) grep last_stderr, "does not contain exactly one" end Name "gt gff3 fail inconsistent sequence ids" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}inconsistent_sequence_ids.gff3", :retval => 1) grep last_stderr, "has different sequence id" end Name "gt gff3 fail range check" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_range_check.gff3", :retval => 1) grep last_stderr, "is not contained in range" end Name "gt gff3 fail illegal region start" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_illegal_region_start.gff3", :retval => 1) grep last_stderr, "illegal region start" end Name "gt gff3 fail illegal feature start" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}gt_gff3_illegal_feature_start.gff3", :retval => 1) grep last_stderr, "illegal feature start" end Name "gt gff3 corrupt gff3 header" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}corrupt_gff3_header.txt", :retval => 1) grep last_stderr, "could not parse integer" end Name "gt gff3 corrupt target attribute" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}corrupt_target_attribute.gff3", :retval => 1) grep last_stderr, "must have 3 or 4 blank separated entries" end Name "gt gff3 target attribute with swapped range" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}target_attribute_swapped_range.gff3", :retval => 1) grep last_stderr, "start '2' is larger then end '1' on line" end Name "gt gff3 empty attribute" Keywords "gt_gff3 gff3_attribute" Test do run_test("#{$bin}gt gff3 #{$testdata}empty_attribute.gff3", :retval => 1) grep last_stderr, "has no tag" end Name "gt gff3 fix region boundaries (end)" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -fixregionboundaries #{$testdata}gt_gff3_range_check.gff3") grep last_stdout, "sr 1000 2001" end Name "gt gff3 fix region boundaries (start)" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -fixregionboundaries #{$testdata}gt_gff3_range_check2.gff3") grep last_stdout, "sr 900 2000" end Name "gt gff3 fix region boundaries (end)" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -fixregionboundaries #{$testdata}gt_gff3_range_check3.gff3") grep last_stdout, "sr 900 2001" end Name "gt gff3 empty attribute name" Keywords "gt_gff3 gff3_attribute" Test do run_test("#{$bin}gt gff3 #{$testdata}empty_attribute_name.gff3", :retval => 1) grep last_stderr, "has no tag" end Name "gt gff3 empty id attribute" Keywords "gt_gff3 gff3_attribute" Test do run_test("#{$bin}gt gff3 #{$testdata}empty_id_attribute.gff3", :retval => 1) grep last_stderr, "has no value" end Name "gt gff3 empty other attribute" Keywords "gt_gff3 gff3_attribute" Test do run_test("#{$bin}gt gff3 #{$testdata}empty_other_attribute.gff3", :retval => 1) grep last_stderr, "has no value" end Name "gt gff3 empty parent attribute" Keywords "gt_gff3 gff3_attribute" Test do run_test("#{$bin}gt gff3 #{$testdata}empty_parent_attribute.gff3", :retval => 1) grep last_stderr, "has no value" end # test OBO file parsing obo_gff3_file="#{$testdata}standard_gene_as_tree.gff3" Name "gt gff3 -typecheck empty file" Keywords "gt_gff3 typecheck" Test do run_test("#{$bin}gt gff3 -typecheck #{$testdata}empty_file #{obo_gff3_file}", :retval => 1) grep last_stderr, "unexpected end-of-file" end Name "gt gff3 -typecheck blank line" Keywords "gt_gff3 typecheck" Test do run_test("#{$bin}gt gff3 -typecheck #{$testdata}obo_files/blank_line.obo " + "#{obo_gff3_file}", :retval => 1) grep last_stderr, "unexpected end-of-file" end Name "gt gff3 -typecheck comment line" Keywords "gt_gff3 typecheck" Test do run_test("#{$bin}gt gff3 -typecheck #{$testdata}obo_files/comment_line.obo " + "#{obo_gff3_file}", :retval => 1) grep last_stderr, "unexpected end-of-file" end Name "gt gff3 -typecheck blank-comment line" Keywords "gt_gff3 typecheck" Test do run_test("#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/blank_comment_line.obo #{obo_gff3_file}", :retval => 1) grep last_stderr, "unexpected end-of-file" end Name "gt gff3 -typecheck tag only" Keywords "gt_gff3 typecheck" Test do run_test("#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/tag_only.obo #{obo_gff3_file}", :retval => 1) grep last_stderr, "expected character ':'" end Name "gt gff3 -typecheck missing value" Keywords "gt_gff3 typecheck" Test do run_test("#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/missing_value.obo #{obo_gff3_file}", :retval => 1) grep last_stderr, "unexpected newline" end Name "gt gff3 -typecheck minimal header" Keywords "gt_gff3 typecheck" Test do run_test "#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/minimal_header.obo #{$testdata}header.gff3" end Name "gt gff3 -typecheck corrupt header" Keywords "gt_gff3 typecheck" Test do run_test("#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/corrupt_header.obo #{obo_gff3_file}", :retval => 1) grep last_stderr, "does not contain \"format-version\" tag" end Name "gt gff3 -typecheck minimal stanza" Keywords "gt_gff3 typecheck" Test do run_test "#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/minimal_stanza.obo #{$testdata}header.gff3" end Name "gt gff3 -typecheck corrupt term stanza" Keywords "gt_gff3 typecheck" Test do run_test("#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/corrupt_term_stanza.obo #{obo_gff3_file}", :retval => 1) grep last_stderr, "lacks required \"name\" tag" end Name "gt gff3 -typecheck corrupt typedef stanza" Keywords "gt_gff3 typecheck" Test do run_test("#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/corrupt_typedef_stanza.obo #{obo_gff3_file}", :retval => 1) grep last_stderr, "lacks required \"name\" tag" end Name "gt gff3 -typecheck corrupt instance stanza" Keywords "gt_gff3 typecheck" Test do run_test("#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/corrupt_instance_stanza.obo #{obo_gff3_file}", :retval => 1) grep last_stderr, "lacks required \"instance_of\" tag" end Name "gt gff3 -typecheck windows newline" Keywords "gt_gff3 typecheck" Test do run_test "#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/windows_newline.obo #{$testdata}header.gff3" end Name "gt gff3 -typecheck comment in stanza" Keywords "gt_gff3 typecheck" Test do run_test "#{$bin}gt gff3 -typecheck " + "#{$testdata}obo_files/comment_in_stanza.obo #{$testdata}header.gff3" end Name "gt gff3 -typecheck sofa" Keywords "gt_gff3 typecheck" Test do run_test "#{$bin}gt gff3 -typecheck sofa #{obo_gff3_file}" end Name "gt gff3 -typecheck so" Keywords "gt_gff3 typecheck" Test do run_test "#{$bin}gt gff3 -typecheck so #{obo_gff3_file}" end Name "gt gff3 -typecheck so-xp" Keywords "gt_gff3 typecheck" Test do run_test "#{$bin}gt gff3 -typecheck so-xp #{obo_gff3_file}" end Name "gt gff3 blank attributes" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}blank_attributes.gff3" end Name "gt gff3 minimal fasta file" Keywords "gt_gff3 fasta" Test do run_test "#{$bin}gt gff3 -width 50 #{$testdata}minimal_fasta.gff3" run "diff #{last_stdout} #{$testdata}minimal_fasta.gff3" end Name "gt gff3 minimal fasta file (without directive)" Keywords "gt_gff3 fasta" Test do run_test "#{$bin}gt gff3 -width 50 " + "#{$testdata}minimal_fasta_without_directive.gff3" run "diff #{last_stdout} #{$testdata}minimal_fasta.gff3" end Name "gt gff3 standard fasta example" Keywords "gt_gff3 fasta" Test do run_test "#{$bin}gt gff3 #{$testdata}standard_fasta_example.gff3" end Name "gt gff3 standard fasta example (stdin)" Keywords "gt_gff3 fasta" Test do run_test "#{$bin}gt gff3 < #{$testdata}standard_fasta_example.gff3" end Name "gt gff3 two fasta sequences" Keywords "gt_gff3 fasta" Test do run_test "#{$bin}gt gff3 #{$testdata}two_fasta_seqs.gff3" run "diff #{last_stdout} #{$testdata}two_fasta_seqs.gff3" end Name "gt gff3 two fasta sequences without sequence region" Keywords "gt_gff3 fasta" Test do run_test "#{$bin}gt gff3 -sort #{$testdata}two_fasta_seqs_without_sequence_regions.gff3" run "diff #{last_stdout} #{$testdata}two_fasta_seqs.gff3" end Name "gt gff3 (-retainids)" Keywords "gt_gff3 retainids" Test do run_test "#{$bin}gt gff3 -retainids #{$testdata}retainids.gff3" run "diff #{last_stdout} #{$testdata}retainids.gff3" end Name "gt gff3 ID not unique (-retainids)" Keywords "gt_gff3 retainids" Test do run_test "#{$bin}gt gff3 -retainids #{$testdata}retain_1.gff3 " + "#{$testdata}retain_2.gff3" run "diff #{last_stdout} #{$testdata}retain_both.gff3" end Name "gt gff3 multi-feature (-retainids)" Keywords "gt_gff3 multi-feature retainids" Test do run_test "#{$bin}gt gff3 -retainids #{$testdata}multi_feature_simple.gff3" run "diff #{last_stdout} #{$testdata}multi_feature_simple.gff3" end Name "gt gff3 multi-feature, ID not unique (-retainids)" Keywords "gt_gff3 multi-feature retainids" Test do run_test "#{$bin}gt gff3 -retainids #{$testdata}multi_feature_simple.gff3 " + "#{$testdata}multi_feature_simple.gff3 " + "#{$testdata}multi_feature_simple.gff3" run "diff #{last_stdout} #{$testdata}multi_feature_multi.gff3" end Name "gt gff3 simple multi-feature (round-trip)" Keywords "gt_gff3 multi-feature" Test do run_test "#{$bin}gt gff3 #{$testdata}multi_feature_simple.gff3" run "diff #{last_stdout} #{$testdata}multi_feature_simple.gff3" end Name "gt gff3 simple multi-feature (reverted)" Keywords "gt_gff3 multi-feature" Test do run_test "#{$bin}gt gff3 #{$testdata}multi_feature_simple_reverted.gff3" run "diff #{last_stdout} #{$testdata}multi_feature_simple.gff3" end Name "gt gff3 simple multi-feature (undefined parent)" Keywords "gt_gff3 multi-feature" Test do run_test("#{$bin}gt gff3 #{$testdata}multi_feature_undefined_parent.gff3", :retval => 1) grep last_stderr, "Parent .* on line 3 .* was not defined" end Name "gt gff3 multi-feature (different sequence ID)" Keywords "gt_gff3 multi-feature" Test do run_test("#{$bin}gt gff3 " + "#{$testdata}multi_feature_different_sequence_id.gff3", :retval => 1) grep last_stderr, "has a different sequence id than its counterpart on line" end Name "gt gff3 multi-feature (with pseudo-feature)" Keywords "gt_gff3 multi-feature pseudo-feature" Test do run_test "#{$bin}gt gff3 -width 50 " + "#{$testdata}standard_fasta_example_with_id.gff3" run "diff #{last_stdout} #{$testdata}standard_fasta_example_with_id.out" end Name "gt gff3 pseudo-feature minimal" Keywords "gt_gff3 pseudo-feature" Test do run_test "#{$bin}gt gff3 #{$testdata}pseudo_feature_minimal.gff3" run "diff #{last_stdout} #{$testdata}pseudo_feature_minimal.gff3" end Name "gt gff3 negative sequence region start" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}sequence_region_negative_start.gff3" grep last_stderr, "start '-1' is negative" end Name "gt gff3 negative sequence region start (-strict)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -strict #{$testdata}sequence_region_negative_start.gff3", :retval => 1 grep last_stderr, "start '-1' is negative" end Name "gt gff3 negative sequence region end" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}sequence_region_negative_end.gff3" grep last_stderr, "end '-1497228' is negative" end Name "gt gff3 negative sequence region end (-strict)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -strict #{$testdata}sequence_region_negative_end.gff3", :retval => 1 grep last_stderr, "end '-1497228' is negative" end Name "gt gff3 negative sequence region end" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}sequence_region_negative_end.gff3" grep last_stderr, "end '-1497228' is negative" end Name "gt gff3 multiple top-level parents" Keywords "gt_gff3 pseudo-feature" Test do run_test "#{$bin}gt gff3 #{$testdata}multiple_top_level_parents.gff3" run "diff #{last_stdout} #{$testdata}multiple_top_level_parents.gff3" end Name "gt gff3 undefined parent (one of two)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}undefined_parent.gff3", :retval => 1 grep last_stderr, "Parent .* was not defined" end Name "gt gff3 missing gff3 header" Keywords "gt_gff3 missing_gff3_header" Test do run_test("#{$bin}gt gff3 #{$testdata}missing_gff3_header.gff3", :retval => 1) grep last_stderr, "does not begin with" end Name "gt gff3 missing gff3 header (-tidy)" Keywords "gt_gff3 missing_gff3_header" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}missing_gff3_header.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt gff3 empty attribute value" Keywords "gt_gff3 empty_attribute_value" Test do run_test("#{$bin}gt gff3 #{$testdata}empty_attribute_value.gff3", :retval => 1) grep last_stderr, "has no value" end Name "gt gff3 empty attribute value (-tidy)" Keywords "gt_gff3 empty_attribute_value" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}empty_attribute_value.gff3" end Name "gt gff3 duplicate attribute" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}duplicate_attribute.gff3", :retval => 1) grep last_stderr, "more than one Dbxref attribute on" end Name "gt gff3 duplicate attribute (-tidy)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}duplicate_attribute.gff3" run "diff #{last_stdout} #{$testdata}duplicate_attribute_fixed.gff3" end Name "gt gff3 multi-feature with different parent 1" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 " + "#{$testdata}multi_feature_with_different_parent_1.gff3", :retval => 1) grep last_stderr, "has a different attribute 'Parent' than its counterpart" end Name "gt gff3 multi-feature with different parent 1 (-tidy)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -tidy " + "#{$testdata}multi_feature_with_different_parent_1.gff3" run "diff #{last_stdout} " + "#{$testdata}multi_feature_with_different_parent_1_tidy.gff3" end Name "gt gff3 multi-feature with different parent 2" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 " + "#{$testdata}multi_feature_with_different_parent_2.gff3", :retval => 1) grep last_stderr, "has a different attribute 'Parent' than its counterpart" end Name "gt gff3 multi-feature with different parent 2 (-tidy)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -tidy " + "#{$testdata}multi_feature_with_different_parent_2.gff3" run "diff #{last_stdout} " + "#{$testdata}multi_feature_with_different_parent_2_tidy.gff3" end Name "gt gff3 join sequence regions with same ID (-sort)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -sort #{$testdata}sequence_region_1.gff3 " + "#{$testdata}sequence_region_2.gff3 " run "diff #{last_stdout} #{$testdata}sequence_region_joined.gff3" end Name "gt gff3 print very long attributes" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -o out.gff3 -sort #{$testdata}dynbuf.gff3" run_test "#{$bin}gt gff3 out.gff3 | diff #{$testdata}dynbuf.gff3 -" end Name "gt gff3 print very long attributes (-gzip)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -gzip -o out.gff3.gz -sort #{$testdata}dynbuf.gff3" run_test "#{$bin}gt gff3 out.gff3.gz | diff #{$testdata}dynbuf.gff3 -" end Name "gt gff3 print very long attributes (-bzip2)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -bzip2 -o out.gff3.bz2 -sort #{$testdata}dynbuf.gff3" run_test "#{$bin}gt gff3 out.gff3.bz2 | diff #{$testdata}dynbuf.gff3 -" end Name "custom_stream (C)" Keywords "gt_gff3 examples" Test do run_test "#{$bin}examples/custom_stream" run "diff #{last_stdout} #{$testdata}standard_gene_simple.gff3" end 1.upto(12) do |i| Name "gt gff3 (CDS check succ #{i})" Keywords "gt_gff3 cds_check" Test do run_test "#{$bin}gt gff3 #{$testdata}cds_check_succ_#{i}.gff3" end end Name "gt gff3 (CDS check fail 1)" Keywords "gt_gff3 cds_check" Test do run_test "#{$bin}gt gff3 #{$testdata}cds_check_fail_1.gff3", :retval => 1 grep last_stderr, /has the wrong phase 1 \(should be 0\)/ end Name "gt gff3 (CDS check fail 1, -tidy)" Keywords "gt_gff3 cds_check" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}cds_check_fail_1.gff3" run "diff #{last_stdout} #{$testdata}cds_check_succ_1.gff3" end Name "gt gff3 (CDS check fail 2)" Keywords "gt_gff3 cds_check" Test do run_test "#{$bin}gt gff3 #{$testdata}cds_check_fail_2.gff3", :retval => 1 grep last_stderr, /has the wrong phase 2 \(should be 1\)/ end Name "gt gff3 (CDS check fail 2, -tidy)" Keywords "gt_gff3 cds_check" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}cds_check_fail_2.gff3" run "diff #{last_stdout} #{$testdata}cds_check_succ_5.gff3" end Name "gt gff3 (CDS check fail 3)" Keywords "gt_gff3 cds_check" Test do run_test "#{$bin}gt gff3 #{$testdata}cds_check_fail_3.gff3", :retval => 1 grep last_stderr, /has the wrong phase 0 \(should be 2\)/ end Name "gt gff3 (CDS check fail 3, -tidy)" Keywords "gt_gff3 cds_check" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}cds_check_fail_3.gff3" run "diff #{last_stdout} #{$testdata}cds_check_succ_9.gff3" end Name "gt gff3 (CDS check fail 4)" Keywords "gt_gff3 cds_check" Test do run_test "#{$bin}gt gff3 #{$testdata}cds_check_fail_4.gff3", :retval => 1 grep last_stderr, /has the wrong phase 0 \(should be 1\)/ end Name "gt gff3 (CDS check fail 4, -tidy)" Keywords "gt_gff3 cds_check" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}cds_check_fail_4.gff3" run "diff #{last_stdout} #{$testdata}cds_check_succ_12.gff3" end Name "gt gff3 (-addids no)" Keywords "gt_gff3 addids" Test do run_test "#{$bin}gt gff3 -addids no #{$testdata}standard_gene_simple.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_simple.gff3" end Name "gt gff3 lone node with undefined range" Keywords "gt_gff3 undefinedrange" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_undefined_range.gff3", \ :retval => 1 grep last_stderr, /could not parse number '.'/ end Name "gt gff3 lone node with undefined range (-tidy)" Keywords "gt_gff3 undefinedrange" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}gt_gff3_undefined_range.gff3" grep last_stderr, /has undefined range, discarding/ run "diff #{last_stdout} #{$testdata}gt_gff3_undefined_range_tidy.gff3" end Name "gt gff3 parent node with undefined range" Keywords "gt_gff3 undefinedrange" Test do run_test "#{$bin}gt gff3 #{$testdata}gt_gff3_undefined_range_parent.gff3", \ :retval => 1 grep last_stderr, /could not parse number '.'/ end Name "gt gff3 parent node with undefined range (-tidy)" Keywords "gt_gff3 undefinedrange" Test do run_test "#{$bin}gt gff3 -tidy " + \ "#{$testdata}gt_gff3_undefined_range_parent.gff3", :retval => 1 grep last_stderr, /has undefined range, discarding/ grep last_stderr, "Parent .* on line 4 .* was not defined" end Name "gt gff3 self-referential feature node" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}self_referential.gff3", :retval => 1 grep last_stderr, /self-referential/ end Name "gt gff3 reverse feature order" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}reverse_feature_order.gff3" run "diff #{last_stdout} #{$testdata}reverse_feature_order.out" end Name "gt gff3 reverse feature order (-strict)" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -strict #{$testdata}reverse_feature_order.gff3", :retval => 1) grep last_stderr, "was not previously defined" end Name "gt gff3 reverse feature order, multiple parents" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}reverse_feature_order_multiple_parents.gff3" run "diff #{last_stdout} #{$testdata}reverse_feature_order_multiple_parents.out" end Name "gt gff3 reverse feature order, multiple parents (-strict)" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -strict #{$testdata}reverse_feature_order_multiple_parents.gff3", :retval => 1) grep last_stderr, "was not previously defined" end Name "gt gff3 reverse feature order, multi-level orphans" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}reverse_standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt gff3 reverse feature order, multi-level orphans (-strict)" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 -strict #{$testdata}reverse_standard_gene_as_tree.gff3", :retval => 1) grep last_stderr, "was not previously defined" end Name "gt gff3 simple orphan" Keywords "gt_gff3" Test do run_test("#{$bin}gt gff3 #{$testdata}simple_orphan.gff3", :retval => 1) grep last_stderr, "Parent .* was not defined" end Name "gt gff3 terminator separation" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}terminator_separation.gff3", :retval => 1 grep last_stderr, "Parent .* was not defined" end Name "gt gff3 terminator separation (-checkids)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -checkids #{$testdata}terminator_separation.gff3", :retval => 1 grep last_stderr, "the child with Parent .* is separated from its corresponding Parent" end Name "gt gff3 CDS feature with multiple (incompatible) parents" Keywords "gt_gff3 " Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}cds_feature_with_multiple_parents.gff3" grep last_stderr, "has multiple parents which require different phases" end Name "gt gff3 empty file" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}empty_file", :retval => 1 grep last_stderr, "is empty" end Name "gt gff3 header file" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}header.gff3" run "diff #{last_stdout} #{$testdata}header.gff3" end Name "gt gff3 header 3.1.21 file" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}header_3_1_21.gff3" run "diff #{last_stdout} #{$testdata}header.gff3" end Name "gt gff3 fasta sequence file" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}fasta_seq.gff3" end Name "gt gff3 multiple header lines" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}multiple_header_lines.gff3", :retval => 1 grep last_stderr, "illegal GFF version pragma" end Name "gt gff3 multiple header lines (-tidy)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}multiple_header_lines.gff3" grep last_stderr, "skipping illegal GFF version pragma" end Name "gt gff3 meta directives" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}meta_directives.gff3" grep last_stderr, ".*", true run "diff #{last_stdout} #{$testdata}meta_directives.gff3" end Name "gt gff3 unknown meta directive" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}unknown_meta_directive.gff3" grep last_stderr, "unknown meta-directive encountered in line" run "diff #{last_stdout} #{$testdata}unknown_meta_directive.gff3" end Name "gt gff3 simple cycle" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}cycle_simple.gff3", :retval => 1 grep last_stderr, "would cause a cycle" end Name "gt gff3 simple cycle (-strict)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -strict #{$testdata}cycle_simple.gff3", :retval => 1 grep last_stderr, "was not previously defined" end Name "gt gff3 orphaned parent" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}orphaned_parent.gff3", :retval => 1 grep last_stderr, "was not defined" end Name "gt gff3 uppercase attributes" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}uppercase_attributes.gff3" end Name "gt gff3 illegal uppercase attribute" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}illegal_uppercase_attribute.gff3", :retval => 1 grep last_stderr, "illegal uppercase attribute" end Name "gt gff3 illegal uppercase attribute (-tidy)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -tidy #{$testdata}illegal_uppercase_attribute.gff3" grep last_stderr, "illegal uppercase attribute" end Name "gt gff3 illegal Is_circular value" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}illegal_is_circular_value.gff3", :retval => 1 grep last_stderr, " of Is_circular attribute .* does not equal " end Name "gt gff3 Is_circular example" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}is_circular_example.gff3" run "diff #{last_stdout} #{$testdata}is_circular_example_with_sequence_region.gff3" end Name "gt gff3 Is_circular example (with sequence-region)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}is_circular_example_with_sequence_region.gff3" end Name "gt gff3 cds_feature_with_multiple_parents.gff3" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}cds_feature_with_multiple_parents_tidied.gff3" run_test "#{$bin}gt gff3 -tidy #{$testdata}cds_feature_with_multiple_parents.gff3" run "diff #{last_stdout} #{$testdata}cds_feature_with_multiple_parents_tidied.gff3" end Name "gt gff3 cds_with_multiple_parents_1.gff3" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}cds_with_multiple_parents_1_tidied.gff3" run_test "#{$bin}gt gff3 -tidy #{$testdata}cds_with_multiple_parents_1.gff3" run "diff #{last_stdout} #{$testdata}cds_with_multiple_parents_1_tidied.gff3" end Name "gt gff3 cds_with_multiple_parents_2.gff3" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}cds_with_multiple_parents_2_tidied.gff3" run_test "#{$bin}gt gff3 -tidy #{$testdata}cds_with_multiple_parents_2.gff3" run "diff #{last_stdout} #{$testdata}cds_with_multiple_parents_2_tidied.gff3" end Name "gt gff3 MD5 seqid (missing seqid)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}md5_seqid_missing_seqid.gff3", :retval => 1 grep last_stderr, "has missing sequence ID after separator" end Name "gt gff3 MD5 seqid (too short)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}md5_seqid_too_short.gff3", :retval => 1 grep last_stderr, "too short" end Name "gt gff3 MD5 seqid (wrong separator)" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 #{$testdata}md5_seqid_wrong_separator.gff3", :retval => 1 grep last_stderr, "wrong separator" end def large_gff3_test(name, file) Name "gt gff3 #{name}" Keywords "gt_gff3 large_gff3" Test do run_test("#{$bin}gt gff3 #{$gttestdata}gff3/#{file}", :maxtime => 320) end Name "gt gff3 #{name} (-sort)" Keywords "gt_gff3 large_gff3" Test do run_test("#{$bin}gt gff3 -sort -width 80 #{$gttestdata}gff3/#{file}", :maxtime => 320) run "diff #{last_stdout} #{$gttestdata}gff3/#{file}.sorted" end Name "gt gff3 #{name} (sorted)" Keywords "gt_gff3 large_gff3" Test do run_test("#{$bin}gt gff3 -width 80 #{$gttestdata}gff3/#{file}.sorted", :maxtime => 320) run "diff #{last_stdout} #{$gttestdata}gff3/#{file}.sorted" end end if $gttestdata then large_gff3_test("maker", "maker/maker.gff3") large_gff3_test("Saccharomyces cerevisiae", "sgd/saccharomyces_cerevisiae.gff") large_gff3_test("Drosophila melanogaster", "Drosophila_melanogaster.BDGP5.4.50.gff3") Name "gt gff3 TAIR10" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -tidy -sort " + "#{$gttestdata}gff3testruns/TAIR10_GFF3_genes.gff", :maxtime => 3600 run "diff #{last_stdout} #{$gttestdata}gff3testruns/tair.gff3" end Name "gt gff3 Fruitfly ESTs" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -sort #{$gttestdata}gff3testruns/EST.gff", :maxtime => 3600 run "diff #{last_stdout} #{$gttestdata}gff3testruns/fruitfly.gff3" end Name "gt gff3 Homo sapiens ENSEMBL" Keywords "gt_gff3" Test do run_test "#{$bin}gt gff3 -sort " + "#{$gttestdata}gff3testruns/Homo_sapiens_ENSEMBL.gff3", :maxtime => 3600 run "diff #{last_stdout} #{$gttestdata}gff3testruns/ensembl.gff3" end end genometools-1.5.1/testsuite/gt_gff3validator_include.rb000066400000000000000000000020311211610345200233460ustar00rootroot00000000000000# test OBO file parsing obo_gff3_file="#{$testdata}standard_gene_as_tree.gff3" Name "gt gff3validator valid file" Keywords "gt_gff3validator" Test do run_test "#{$bin}gt gff3validator #{obo_gff3_file}" grep last_stdout, "input is valid GFF3" end Name "gt gff3validator -typecheck sofa.obo" Keywords "gt_gff3validator typecheck" Test do run_test "#{$bin}gt gff3validator -typecheck sofa #{obo_gff3_file}" grep last_stdout, "input is valid GFF3" end Name "gt gff3validator -typecheck so.obo" Keywords "gt_gff3validator typecheck" Test do run_test "#{$bin}gt gff3validator -typecheck so #{obo_gff3_file}" grep last_stdout, "input is valid GFF3" end Name "gt gff3validator -typecheck so-xp.obo" Keywords "gt_gff3validator typecheck" Test do run_test "#{$bin}gt gff3validator -typecheck so-xp #{obo_gff3_file}" grep last_stdout, "input is valid GFF3" end Name "gt gff3validator corrupt file" Keywords "gt_gff3validator" Test do run_test("#{$bin}gt gff3 #{$testdata}corrupt.gff3", :retval => 1) grep last_stderr, "strand 'X'" end genometools-1.5.1/testsuite/gt_gtf_to_gff3_include.rb000066400000000000000000000017231211610345200230110ustar00rootroot00000000000000Name "gt gtf_to_gff3 test" Keywords "gt_gtf_to_gff3" Test do run_test "#{$bin}gt gtf_to_gff3 #{$testdata}gt_gtf_to_gff3_test.gtf" run "diff #{last_stdout} #{$testdata}gt_gtf_to_gff3_test.gff3" end if $gttestdata then Name "gt gtf_to_gff3 test" Keywords "gt_gtf_to_gff3 large_gtf" Test do run "#{$bin}gt gff3 -sort #{$gttestdata}gff3/Drosophila_melanogaster.BDGP5.4.50.gff3 " + "> ref_sorted.gff3" run_test("#{$bin}gt gtf_to_gff3 " + "#{$gttestdata}gtf/Drosophila_melanogaster.BDGP5.4.50.gtf " + "| #{$bin}gt gff3 -sort ", :maxtime => 3600) run "diff #{last_stdout} " + "ref_sorted.gff3" end Name "gt gtf_to_gff3 test (GENCODE)" Keywords "gt_gtf_to_gff3 large_gtf" Test do run_test "#{$bin}gt gtf_to_gff3 " + "#{$gttestdata}gtf/gencode.v11.annotation.gtf.gz " + "| #{$bin}gt gff3 -sort -tidy", :maxtime => 3600 run "diff #{last_stdout} #{$gttestdata}gff3/gencode.v11.annotation.gff3" end end genometools-1.5.1/testsuite/gt_hop_include.rb000066400000000000000000000126251211610345200214130ustar00rootroot00000000000000Name "gt hop: bam == sam" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/genome.fas" run_test "#{$bin}gt hop -ref genome.fas "+ "-map #{$testdata}hop/map.sam -sam -aggressive "+ "-reads #{$testdata}hop/reads.fastq" run "mv hop_reads.fastq using_sam.fastq" run_test "#{$bin}gt hop -ref genome.fas "+ "-map #{$testdata}hop/map.bam -aggressive "+ "-reads #{$testdata}hop/reads.fastq" run "diff using_sam.fastq hop_reads.fastq" end Name "gt hop: -aggressive" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/genome.fas" run_test "#{$bin}gt hop -ref genome.fas "+ "-map #{$testdata}hop/map.bam -aggressive "+ "-reads #{$testdata}hop/reads.fastq" run "diff #{$testdata}hop/hop_aggressive.fastq hop_reads.fastq" end Name "gt hop: -moderate" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/genome.fas" run_test "#{$bin}gt hop -ref genome.fas "+ "-map #{$testdata}hop/map.bam -moderate "+ "-reads #{$testdata}hop/reads.fastq" run "diff #{$testdata}hop/hop_moderate.fastq hop_reads.fastq" end Name "gt hop: -conservative" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/genome.fas" run_test "#{$bin}gt hop -ref genome.fas "+ "-map #{$testdata}hop/map.bam -conservative "+ "-reads #{$testdata}hop/reads.fastq" run "diff #{$testdata}hop/hop_conservative.fastq hop_reads.fastq" end Name "gt hop: -expert -hmin 4" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/genome.fas" run_test "#{$bin}gt hop -ref genome.fas "+ "-map #{$testdata}hop/map.bam -expert -hmin 4 "+ "-reads #{$testdata}hop/reads.fastq" run "diff #{$testdata}hop/hop_hmin4.fastq hop_reads.fastq" end Name "gt hop: -expert -read-hmin 3" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/genome.fas" run_test "#{$bin}gt hop -ref genome.fas "+ "-map #{$testdata}hop/map.bam -expert -read-hmin 3 "+ "-reads #{$testdata}hop/reads.fastq" run "diff #{$testdata}hop/hop_read-hmin3.fastq hop_reads.fastq" end Name "gt hop: -reads with 2 input files" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/genome.fas" run_test "#{$bin}gt hop -ref genome.fas "+ "-map #{$testdata}hop/map2.bam -aggressive "+ "-reads #{$testdata}hop/10reads.fastq "+ "#{$testdata}hop/other10reads.fastq" run "diff #{$testdata}hop/hop_10reads.fastq hop_10reads.fastq" run "diff #{$testdata}hop/hop_other10reads.fastq hop_other10reads.fastq" end Name "gt hop: -expert -refmin" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/smallgenome.fas" run_test "#{$bin}gt hop -stats -ref smallgenome.fas "+ "-map #{$testdata}hop/sg_map.bam -v -expert -refmin 0.25 "+ "-reads #{$testdata}hop/sg_reads.fastq" grep(last_stdout, /and not edited:\s+4/) grep(last_stdout, /and edited:\s+0/) run_test "#{$bin}gt hop -stats -ref smallgenome.fas "+ "-map #{$testdata}hop/sg_map.bam -v -expert -refmin 0.24 "+ "-reads #{$testdata}hop/sg_reads.fastq" grep(last_stdout, /and not edited:\s+0/) grep(last_stdout, /and edited:\s+4/) end Name "gt hop: -expert -altmax" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/smallgenome.fas" run_test "#{$bin}gt hop -stats -ref smallgenome.fas "+ "-map #{$testdata}hop/sg_map.bam -v -expert -altmax 0.49 "+ "-reads #{$testdata}hop/sg_reads.fastq" grep(last_stdout, /and not edited:\s+4/) grep(last_stdout, /and edited:\s+0/) run_test "#{$bin}gt hop -stats -ref smallgenome.fas "+ "-map #{$testdata}hop/sg_map.bam -v -expert -altmax 0.50 "+ "-reads #{$testdata}hop/sg_reads.fastq" grep(last_stdout, /and not edited:\s+0/) grep(last_stdout, /and edited:\s+4/) end Name "gt hop: -expert -covmin" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/smallgenome.fas" run_test "#{$bin}gt hop -stats -ref smallgenome.fas "+ "-map #{$testdata}hop/sg_map.bam -v -expert -covmin 6 "+ "-reads #{$testdata}hop/sg_reads.fastq" grep(last_stdout, /and not edited:\s+4/) grep(last_stdout, /and edited:\s+0/) run_test "#{$bin}gt hop -stats -ref smallgenome.fas "+ "-map #{$testdata}hop/sg_map.bam -v -expert -covmin 4 "+ "-reads #{$testdata}hop/sg_reads.fastq" grep(last_stdout, /and not edited:\s+0/) grep(last_stdout, /and edited:\s+4/) end Name "gt hop: -expert -mapqmin" Keywords "gt_hop" Test do run "#{$bin}gt encseq encode #{$testdata}hop/smallgenome.fas" run_test "#{$bin}gt hop -stats -ref smallgenome.fas -sam "+ "-map #{$testdata}hop/sg_map_q.sam -v -expert -mapqmin 0 "+ "-reads #{$testdata}hop/sg_reads.fastq" grep(last_stdout, /and not edited:\s+0/) grep(last_stdout, /and edited:\s+4/) run_test "#{$bin}gt hop -stats -ref smallgenome.fas -sam "+ "-map #{$testdata}hop/sg_map_q.sam -v -expert -mapqmin 10 "+ "-reads #{$testdata}hop/sg_reads.fastq" grep(last_stdout, /and not edited:\s+1/) grep(last_stdout, /and edited:\s+3/) run_test "#{$bin}gt hop -stats -ref smallgenome.fas -sam "+ "-map #{$testdata}hop/sg_map_q.sam -v -expert -mapqmin 21 "+ "-reads #{$testdata}hop/sg_reads.fastq" grep(last_stdout, /and not edited:\s+2/) grep(last_stdout, /and edited:\s+2/) end genometools-1.5.1/testsuite/gt_id_to_md5_include.rb000066400000000000000000000011501211610345200224570ustar00rootroot00000000000000Name "gt id_to_md5 (U89959_sas.gff3)" Keywords "gt_id_to_md5" Test do run_test "#{$bin}gt id_to_md5 -seqfiles " + "#{$testdata}U89959_genomic.fas #{$testdata}U89959_ests.fas " + "-matchdesc #{$testdata}U89959_sas.gff3" run "diff #{last_stdout} #{$testdata}U89959_sas.gff3md5" end Name "gt id_to_md5 (U89959_csas.gff3)" Keywords "gt_id_to_md5" Test do run_test "#{$bin}gt id_to_md5 -seqfiles " + "#{$testdata}U89959_genomic.fas #{$testdata}U89959_ests.fas " + "-matchdesc #{$testdata}U89959_csas.gff3" run "diff #{last_stdout} #{$testdata}U89959_csas.gff3md5" end genometools-1.5.1/testsuite/gt_idxsearch_include.rb000066400000000000000000000222621211610345200225750ustar00rootroot00000000000000allfiles = ["Atinsert.fna", "Duplicate.fna", "Random-Small.fna", "Random.fna", "Random159.fna", "Random160.fna", "RandomN.fna", "TTT-small.fna", "trna_glutamine.fna"] repfindtestfiles=["Duplicate.fna", "Wildcards.fna", "hs5hcmvcg.fna", "humhbb.fna", "mpomtcg.fna", "at1MB", "ychrIII.fna"] def makegreedyfwdmatcall(queryfile,indexarg,ms) prog="" if ms prog="#{$bin}gt matstat -verify" else prog="#{$bin}gt uniquesub" end constantargs="-min 1 -max 20 -query #{queryfile} #{indexarg}" return "#{prog} -output querypos #{constantargs}" end def checkgreedyfwdmat(queryfile,ms) run_test(makegreedyfwdmatcall(queryfile,"-fmi fmi",ms), :maxtime => 1200) run "mv #{last_stdout} tmp.fmi" run_test(makegreedyfwdmatcall(queryfile,"-esa sfx",ms), :maxtime => 1200) run "mv #{last_stdout} tmp.esa" run "diff tmp.esa tmp.fmi" run_test(makegreedyfwdmatcall(queryfile,"-pck pck",ms), :maxtime => 1200) run "mv #{last_stdout} tmp.pck" run "diff tmp.pck tmp.fmi" end def checktagerator(queryfile,ms) run "#{$bin}gt shredder -minlength 12 -maxlength 15 #{queryfile} | " + "#{$bin}gt seqfilter -minlength 12 - | " + "sed -e \'s/^>.*/>/\' > patternfile" if File.size("patternfile") > 0 run_test("#{$bin}gt tagerator -rw -cmp -e 0 -esa sfx -q patternfile", :maxtime => 240) run_test("#{$bin}gt tagerator -rw -cmp -e 1 -esa sfx -q patternfile " + "-withwildcards",:maxtime => 240) run_test("#{$bin}gt tagerator -rw -cmp -e 2 -esa sfx -q patternfile " + "-withwildcards",:maxtime => 240) run_test("#{$bin}gt tagerator -rw -cmp -esa sfx -q patternfile " + " -maxocc 10", :maxtime => 240) run_test "#{$bin}gt prebwt -maxdepth 4 -pck pck", :maxtime => 180 run_test("#{$bin}gt tagerator -rw -cmp -e 0 -pck pck -q patternfile", :maxtime => 240) run_test("#{$bin}gt tagerator -rw -cmp -e 1 -pck pck -q patternfile", :maxtime => 240) run_test("#{$bin}gt tagerator -rw -cmp -e 2 -pck pck -q patternfile", :maxtime => 240) run_test("#{$bin}gt tagerator -rw -cmp -pck pck -q patternfile " + "-maxocc 10", :maxtime => 300) end end def createandcheckgreedyfwdmat(reffile,queryfile) run "#{$scriptsdir}/runmkfm.sh #{$bin}gt 0 . fmi #{reffile}", :maxtime => 100 run "#{$bin}gt suffixerator -indexname sfx -tis -suf -ssp -dna -v " + "-db #{reffile}" run "#{$bin}gt packedindex mkindex -tis -ssp -indexname pck -db #{reffile} " + "-sprank -dna -pl -bsize 10 -locfreq 32 -dir rev", :maxtime => 180 run_test "#{$bin}gt prebwt -maxdepth 4 -pck pck", :maxtime => 180 checkgreedyfwdmat(queryfile,false) checkgreedyfwdmat(queryfile,true) end def addfilepath(filename) if filename == 'Duplicate.fna' or filename == 'at1MB' return "#{$testdata}#{filename}" else return "#{$gttestdata}DNA-mix/Grumbach.fna/#{filename}" end end def determineminlength(reffile) if reffile == 'at1MB' return 22 else return 14 end end def checkrepfind(reffile) reffilepath=addfilepath(reffile) run_test("#{$bin}gt suffixerator -algbds 3 31 80 -db " + "#{reffilepath} -indexname sfxidx -dna -suf -tis -lcp -ssp -pl", :maxtime => 320) minlength = determineminlength(reffile) run_test("#{$bin}gt repfind -l #{minlength} -ii sfxidx", :maxtime => 600) resultfile="#{$gttestdata}repfind-result/#{reffile}.result" run "cmp -s #{last_stdout} #{resultfile}" run_test("#{$bin}gt repfind -l #{minlength} -r -ii sfxidx", :maxtime => 600) resultfile="#{$gttestdata}repfind-result/#{reffile}-r.result" run "cmp -s #{last_stdout} #{resultfile}" end def checkrepfindwithquery(reffile,queryfile) reffilepath=addfilepath(reffile) queryfilepath=addfilepath(queryfile) idxname=reffile + "-idx" run_test "#{$bin}gt suffixerator -algbds 3 31 80 -db " + "#{reffilepath} -indexname #{idxname} -dna -suf -tis -lcp -ssp -pl" run_test("#{$bin}gt repfind -l 15 -ii #{idxname} -q #{queryfilepath}", :maxtime => 600) # run "sort #{last_stdout}" #run "/Users/kurtz/bin-ops/i686-apple-darwin/mkvtree.x -indexname mkv-idx " + # "-allout -v -pl -dna -db #{reffilepath}" #run "/Users/kurtz/bin-ops/i686-apple-darwin/vmatch-mini.x 15 mkv-idx " + # "#{queryfilepath}" #run "sed -e '/^#/d' #{last_stdout} | sort" # run "#{$scriptsdir}repfind-cmp.rb #{last_stdout} #{$gttestdata}repfind-result/#{reffile}-#{queryfile}.result" run "cmp -s #{last_stdout} #{$gttestdata}repfind-result/#{reffile}-#{queryfile}.result" end Name "gt paircmp" Keywords "gt_paircmp" Test do run_test "#{$bin}gt dev paircmp -a ac 11" # mv to idx end Name "gt patternmatch" Keywords "gt_patternmatch" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Atinsert.fna " + "-indexname sfx -dna -bck -suf -tis -pl" run_test "#{$bin}gt dev patternmatch -samples 10000 -minpl 10 -maxpl 15 " + " -bck -imm -ii sfx" run_test "#{$bin}gt dev patternmatch -samples 10000 -ii sfx" end Name "gt repfind small" Keywords "gt_repfind" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Atinsert.fna " + "-indexname sfx -dna -tis -suf -lcp -ssp -pl" run_test "#{$bin}gt repfind -l 8 -ii sfx" run "grep -v '^#' #{last_stdout}" run "diff -w #{last_stdout} #{$testdata}repfind-8-Atinsert.txt" run_test "#{$bin}gt repfind -scan -l 8 -ii sfx" run "grep -v '^#' #{last_stdout}" run "diff -w #{last_stdout} #{$testdata}repfind-8-Atinsert.txt" run_test "#{$bin}gt repfind -samples 40 -l 6 -ii sfx",:maxtime => 600 end if $gttestdata then Name "gt repfind extend at1MB" Keywords "gt_repfind extend" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}at1MB " + "-indexname sfx -dna -tis -suf -lcp" run_test "#{$bin}gt repfind -l 20 -extend -ii sfx" run "diff #{last_stdout} #{$testdata}repfind-20-extend.txt" run_test "#{$bin}gt repfind -l 20 -extend -ii sfx -q " + "#{$testdata}/U89959_genomic.fas" run "diff #{last_stdout} #{$testdata}repfind-20-query-extend.txt" end repfindtestfiles.each do |reffile| Name "gt repfind #{reffile}" Keywords "gt_repfind gttestdata" Test do checkrepfind(reffile) end repfindtestfiles.each do |queryfile| if reffile != queryfile Name "gt repfind #{reffile} versus #{queryfile}" Keywords "gt_repfind gttestdata" Test do checkrepfindwithquery(reffile,queryfile) end end end end end allfiles.each do |reffile| allfiles.each do |queryfile| if queryfile != reffile Name "gt greedyfwdmat #{reffile} #{queryfile}" Keywords "gt_greedyfwdmat small" Test do createandcheckgreedyfwdmat("#{$testdata}#{reffile}", "#{$testdata}#{queryfile}") checktagerator("#{$testdata}#{reffile}", "#{$testdata}#{queryfile}") run "rm -f sfx.* fmi.* pck.*" end end end end allfiles.each do |reffile| allfiles.each do |queryfile| if queryfile != reffile Name "gt idxlocali #{reffile} #{queryfile}" Keywords "gt_idxlocali" Test do run("#{$bin}gt packedindex mkindex -ssp -tis -indexname pck -db " + "#{$testdata}#{reffile} -sprank -dna -pl -bsize 10 " + "-locfreq 32 -dir rev", :maxtime => 180) run_test("#{$bin}gt dev idxlocali -s -th 7 -pck pck " + "-q #{$testdata}#{queryfile}", :maxtime => 180) run_test("#{$bin}gt dev idxlocali -s -th 7 -pck pck -online " + "-q #{$testdata}#{queryfile}", :maxtime => 180) run_test "#{$bin}gt suffixerator -indexname sfx -ssp -tis -suf -dna " + "-v -db #{$testdata}#{reffile}" run_test("#{$bin}gt dev idxlocali -s -th 7 -esa sfx " + "-q #{$testdata}#{queryfile}", :maxtime => 180) run_test("#{$bin}gt dev idxlocali -s -th 7 -esa sfx -online " + "-q #{$testdata}#{queryfile}", :maxtime => 180) end end end end Name "gt uniquesub" Keywords "gt_uniquesub" Test do run "#{$scriptsdir}runmkfm.sh #{$bin}gt 1 . Combined.fna #{$testdata}at1MB" run_test "#{$bin}gt uniquesub -output sequence querypos -min 10 " + "-max 20 -fmi Combined.fna -query #{$testdata}U89959_genomic.fas", \ :maxtime => 600 end allfiles.each do |reffile| Name "gt packedindex #{reffile}" Keywords "gt_packedindex small" Test do run_test("#{$bin}gt packedindex mkindex -tis -ssp -indexname pck " + "-sprank -db #{$testdata}#{reffile} -dna -pl -bsize 10 " + " -locfreq 32 -dir rev", :maxtime => 1200) end end Name "gt matstat/uniquesub at1MB U8" Keywords "gt_greedyfwdmat gt_matstat gt_uniquesub gttestdata" Test do createandcheckgreedyfwdmat("#{$testdata}at1MB", "#{$testdata}U89959_genomic.fas") run_test "#{$bin}gt tagerator -e 0 -q #{$testdata}corruptpatternfile.fna -pck", :retval => 1 run "rm -f sfx.* fmi.* pck.*" end genometools-1.5.1/testsuite/gt_include.rb000066400000000000000000000002361211610345200205400ustar00rootroot00000000000000Name "gt -help" Keywords "gt" Test do run_test "#{$bin}gt -help" end Name "gt -noop" Keywords "gt" Test do run_test("#{$bin}gt -noop", :retval => 1) end genometools-1.5.1/testsuite/gt_interfeat_include.rb000066400000000000000000000002611211610345200225770ustar00rootroot00000000000000Name "gt interfeat test" Keywords "gt_interfeat" Test do run_test "#{$bin}gt interfeat #{$testdata}addintrons.gff3" run "diff #{last_stdout} #{$testdata}addintrons.out" end genometools-1.5.1/testsuite/gt_ltrdigest_include.rb000066400000000000000000000520171211610345200226250ustar00rootroot00000000000000# simple reverse complement def revcomp(seq) seq.tr("aAcCgGtTnN","tTgGcCaSAnN").reverse end # simple DNA->AA translation def translate_dna(sequence) genetic_code = { 'ATA'=>'I', 'ATC'=>'I', 'ATT'=>'I', 'ATG'=>'M', 'ACA'=>'T', 'ACC'=>'T', 'ACG'=>'T', 'ACT'=>'T', 'AAC'=>'N', 'AAT'=>'N', 'AAA'=>'K', 'AAG'=>'K', 'AGC'=>'S', 'AGT'=>'S', 'AGA'=>'R', 'AGG'=>'R', 'CTA'=>'L', 'CTC'=>'L', 'CTG'=>'L', 'CTT'=>'L', 'CCA'=>'P', 'CCC'=>'P', 'CCG'=>'P', 'CCT'=>'P', 'CAC'=>'H', 'CAT'=>'H', 'CAA'=>'Q', 'CAG'=>'Q', 'CGA'=>'R', 'CGC'=>'R', 'CGG'=>'R', 'CGT'=>'R', 'GTA'=>'V', 'GTC'=>'V', 'GTG'=>'V', 'GTT'=>'V', 'GCA'=>'A', 'GCC'=>'A', 'GCG'=>'A', 'GCT'=>'A', 'GAC'=>'D', 'GAT'=>'D', 'GAA'=>'E', 'GAG'=>'E', 'GGA'=>'G', 'GGC'=>'G', 'GGG'=>'G', 'GGT'=>'G', 'TCA'=>'S', 'TCC'=>'S', 'TCG'=>'S', 'TCT'=>'S', 'TTC'=>'F', 'TTT'=>'F', 'TTA'=>'L', 'TTG'=>'L', 'TAC'=>'Y', 'TAT'=>'Y', 'TAA'=>'X', 'TAG'=>'X', 'TGC'=>'C', 'TGT'=>'C', 'TGA'=>'X', 'TGG'=>'W', } proteinseq = "" (0..sequence.length).step(3) do |i| codon = sequence[i..i+2].upcase next if codon.length != 3 if genetic_code.has_key?(codon) then proteinseq += genetic_code[codon] else raise "unknown codon '#{codon}'" end end proteinseq end # returns a hash indexed by element coordinates # containing an array of DNA sequences (one per hit fragment) def get_protdom_dna_seqs(gff3filename, chr) seqs = Hash.new File.open(gff3filename) do |file| mainstart, mainstop = 0, 0 mainstrand = '' file.readlines.each do |ln| _, _, type, start, stop, _, strand = ln.split("\t") if type == "LTR_retrotransposon" then mainstart = start.to_i mainstop = stop.to_i mainstrand = strand elsif type == "protein_match" then run_test "#{$bin}gt extractseq -frompos " + \ "#{start} -topos " + \ "#{stop} " + \ "#{$gttestdata}ltrdigest/#{chr}_genomic_dmel_" + \ "RELEASE3-1.FASTA.gz > tmp.fas" outa = File.open("tmp.fas").read.split("\n") outa.shift if seqs[[mainstart, mainstop]].nil? then seqs[[mainstart, mainstop]] = [] end out = outa.collect{|l| l.chomp.downcase}.join # we want to provide DNA sequences in reading direction if mainstrand == '-' then seqs[[mainstart, mainstop]].insert(0,(revcomp(out))) else seqs[[mainstart, mainstop]].push(out) end end end end seqs end # checks whether the sequences output by the LTRFileOutStream match those # referenced in the GFF3 file def check_ppt_pbs(gff3filename, chr) coords = {:ppt => {}, :pbs => {}} File.open(gff3filename) do |file| mainstart, mainstop = 0, 0 file.readlines.each do |ln| _, _, type, start, stop = ln.split("\t") if type == "LTR_retrotransposon" then mainstart = start.to_i mainstop = stop.to_i elsif type == "RR_tract" then coords[:ppt][[mainstart,mainstop]] = [start.to_i, stop.to_i] elsif type == "primer_binding_site" then coords[:pbs][[mainstart,mainstop]] = [start.to_i, stop.to_i] end end end [:ppt,:pbs].each do |feat| File.open("result#{chr}_#{feat}.fas") do |file| (farr = file.read.split(">")).each do |fitem| seqa = fitem.split("\n") fline = seqa.shift next if fline.nil? if m = /_(\d+)_(\d+)$/.match(fline) then start, stop = m[1].to_i, m[2].to_i seq = seqa.collect{|l| l.chomp.downcase}.join run_test "#{$bin}gt extractseq -frompos " + \ "#{coords[feat][[start,stop]][0]} -topos " + \ "#{coords[feat][[start,stop]][1]} " + \ "#{$gttestdata}ltrdigest/#{chr}_genomic_dmel_" + \ "RELEASE3-1.FASTA.gz > tmp.fas" outa = File.open("tmp.fas").read.split("\n") outa.shift out = outa.collect{|l| l.chomp.downcase}.join unless out == seq or revcomp(out) == seq raise "sequence output and GFF3 coordinates do not match " + \ "(#{seq} != #{out}) for the #{feat} with coords " + \ "#{coords[feat][[start,stop]][0]}-" + \ "#{coords[feat][[start,stop]][1]}, neither does reverse " + \ "complement!" end end end end end end def load_seqfile(filename) contents = {} File.open(filename) do |file| (farr = file.read.split(">")).each do |fitem| seqa = fitem.split("\n") fline = seqa.shift next if fline.nil? if m = /_(\d+)_(\d+)$/.match(fline) then start, stop = m[1].to_i, m[2].to_i seq = seqa.collect{|l| l.chomp.downcase}.join contents[[start,stop]] = seq end end end contents end def check_amino_acid_output(gff3file, chr, pdoms) pdoms.each do |dom| dnaseqfile = load_seqfile("result#{chr}_pdom_#{dom}.fas") aaseqfile = load_seqfile("result#{chr}_pdom_#{dom}_aa.fas") seqs = get_protdom_dna_seqs(gff3file, chr) if dnaseqfile.keys.length != aaseqfile.keys.length then raise "number of DNA and AA sequences is not equal" end if (dnaseqfile.keys - aaseqfile.keys).length != 0 then raise "DNA and AA sequence keys are not identical" end dnaseqfile.keys.each do |key| if seqs[key].nil? or seqs[key].length == 0 then raise "no protein domain sequences extracted from GFF3+sequence " + \ "for element #{key.inspect} of chromosome #{chr}" elsif seqs[key].length == 1 then # hit was not fragmented, we can check directly # first, DNA sequence in the output file must match the GFF coordinates unless seqs[key][0] == dnaseqfile[key] then raise "DNA sequence from FASTA file \n" + \ "'#{seqs[key][0]}' does " + \ "not match the sequence referred to in the GFF3 file \n" + \ "'#{dnaseqfile[key]}' in element " + \ "#{key.inspect}" end # also, translated DNA seq must match the AA sequence from FASTA out if translate_dna(seqs[key][0]) != aaseqfile[key].upcase then raise "translated sequence \n'#{translate_dna(seqs[key][0])}' " + \ "is not equal to sequence \n'#{aaseqfile[key].upcase}' in " + \ "element #{key.inspect}" end else # number of fragments > 1 # translate each fragment's DNA sequence separately and concatenate # into one => this must match the AA sequence output by LTRdigest translated_seqs = seqs[key].collect{|s| translate_dna(s)}.join if translated_seqs != aaseqfile[key].upcase then raise "sequence translated from #{seqs[key].length} frags\n" + \ "'#{translated_seqs}' " + \ "is not equal to sequence \n'#{aaseqfile[key].upcase}' in " + \ "element #{key.inspect}" end end end end end if $gttestdata then Name "gt ltrdigest missing input GFF" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt ltrdigest #{$gttestdata}ltrdigest/2L_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 end Name "gt ltrdigest unsorted input GFF" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /is not sorted/) end Name "gt ltrdigest wrong sequence regions in input GFF" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest #{$gttestdata}ltrdigest/dmel_test_Run9_4_wrong_seqid.gff3 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, "Feature 'LTR_retrotransposon1' on line 6 has invalid region identifier,must be 'seqX' with X being a sequence number, but was 'chr4'") end Name "gt ltrdigest missing input sequence" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted", :retval => 1 grep(last_stderr, /missing argument/) end Name "gt ltrdigest missing tRNA library but -trna given" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest -trnas -outfileprefix foo #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /missing argument to option/) end Name "gt ltrdigest corrupt tRNA library" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest -trnas #{$gttestdata}ltrdigest/corrupt_trna.fas #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /cannot guess file type of file/) end Name "gt ltrdigest tRNA implied options" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest -pbsalilen 10 20 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /option "-pbsalilen" requires option "-trnas"/) run_test "#{$bin}gt ltrdigest -pbsoffset 10 20 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /option "-pbsoffset" requires option "-trnas"/) run_test "#{$bin}gt ltrdigest -pbstrnaoffset 10 20 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /option "-pbstrnaoffset" requires option "-trnas"/) run_test "#{$bin}gt ltrdigest -trnas #{$gttestdata}ltrdigest/Dm-tRNAs-uniq.fa #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 0 #run "diff #{last_stdout} #{$gttestdata}ltrdigest/4_ref_noHMM.gff3" end if $arguments["hmmer"] then Name "gt ltrdigest corrupt pHMM" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest -hmms #{$gttestdata}ltrdigest/corrupt.hmm -- #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /Failed to open HMM file/) end Name "gt ltrdigest HMM list not properly closed (--)" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest -hmms #{$gttestdata}ltrdigest/hmms/RVT_1.hmm #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /missing argument/) end Name "gt ltrdigest pHMM implied options" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest -pdomevalcutoff 0.2 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /option "-pdomevalcutoff" requires option "-hmms"/) run_test "#{$bin}gt ltrdigest -pdomevalcutoff 2.2 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /argument to option "-pdomevalcutoff" must be a floating point value <= 1.000000/) end Name "gt ltrdigest use of deprecated '-threads' switch" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest -threads 2 -outfileprefix result4 -trnas #{$gttestdata}ltrdigest/Dm-tRNAs-uniq.fa -hmms #{$gttestdata}ltrdigest/hmms/RVT_1.hmm -- #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 0, :maxtime => 12000 grep(last_stderr, /option is deprecated. Please use/) end end Name "gt ltrdigest PPT HMM parameters (background distribution)" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" # probabilities do not add up to 1, sum > 0 run_test "#{$bin}gt ltrdigest -ppttprob 0.3 -pptaprob 0.3 -pptgprob 0.9 -pptcprob 0.2 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 # probability > 1 run_test "#{$bin}gt ltrdigest -ppttprob 1.3 -pptaprob 0.3 -pptgprob 0.9 -pptcprob 0.2 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 # negative probability run_test "#{$bin}gt ltrdigest -ppttprob -0.3 -pptaprob 0.3 -pptgprob 0.9 -pptcprob 0.2 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 # probabilities do not add up to 1, sum < 0 run_test "#{$bin}gt ltrdigest -ppttprob 0.1 -pptaprob 0.1 -pptgprob 0.2 -pptcprob 0.2 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 # positive test run_test "#{$bin}gt ltrdigest -ppttprob 0.25 -pptaprob 0.25 -pptgprob 0.25 -pptcprob 0.25 -trnas #{$gttestdata}ltrdigest/Dm-tRNAs-uniq.fa #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 0 #run "diff #{last_stdout} #{$gttestdata}ltrdigest/4_ref_noHMM.gff3" end Name "gt ltrdigest PPT HMM parameters (U-box U frequency)" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest -pptuprob 1.3 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 run_test "#{$bin}gt ltrdigest -pptuprob 0.0 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 0 run_test "#{$bin}gt ltrdigest -pptuprob 0.91 -trnas #{$gttestdata}ltrdigest/Dm-tRNAs-uniq.fa #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 0 #run "diff #{last_stdout} #{$gttestdata}ltrdigest/4_ref_noHMM.gff3" end Name "gt ltrdigest PPT HMM parameters (PPT R/Y frequencies)" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest -pptrprob 1.3 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 run_test "#{$bin}gt ltrdigest -pptyprob 1.3 #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 run_test "#{$bin}gt ltrdigest -pptrprob 0.97 -pptyprob 0.03 -trnas #{$gttestdata}ltrdigest/Dm-tRNAs-uniq.fa #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 0 #run "diff #{last_stdout} #{$gttestdata}ltrdigest/4_ref_noHMM.gff3" run_test "#{$bin}gt ltrdigest -pptrprob 0.6 -pptyprob 0.4 -trnas #{$gttestdata}ltrdigest/Dm-tRNAs-uniq.fa #{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 0 #run "diff #{last_stdout} #{$gttestdata}ltrdigest/4_ref_noHMM.gff3", :retval => 1 end Name "gt ltrdigest GFF and sequence do not match" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt ltrdigest #{$gttestdata}ltrdigest/dmel_test_Run9_2L.gff3.sorted 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, "exceeds sequence boundaries!") end # positive test for all D.mel chromosomes -> must match reference chromosomes_dmel = ["2L","2R","3L","3R","4","X"] chromosomes_dmel.each do |chr| if $arguments["hmmer"] then Name "gt ltrdigest D. melanogaster chromosome #{chr} basic test w/ RT" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/#{chr}_genomic_dmel_RELEASE3-1.FASTA.gz", :maxtime => 600 run_test "#{$bin}gt ltrdigest -outfileprefix result#{chr} -trnas #{$gttestdata}ltrdigest/Dm-tRNAs-uniq.fa -hmms #{$gttestdata}ltrdigest/hmms/RVT_1.hmm -- #{$gttestdata}ltrdigest/dmel_test_Run9_#{chr}.gff3.sorted #{chr}_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 0, :maxtime => 12000 check_ppt_pbs(last_stdout, chr) #run "diff #{last_stdout} #{$gttestdata}ltrdigest/#{chr}_ref.gff3" end else Name "gt ltrdigest D. mel. chromosome #{chr} basic test, no HMM" Keywords "gt_ltrdigest" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrdigest/#{chr}_genomic_dmel_RELEASE3-1.FASTA.gz", :maxtime => 600 run_test "#{$bin}gt -j 2 ltrdigest -outfileprefix result#{chr} -trnas #{$gttestdata}ltrdigest/Dm-tRNAs-uniq.fa #{$gttestdata}ltrdigest/dmel_test_Run9_#{chr}.gff3.sorted #{chr}_genomic_dmel_RELEASE3-1.FASTA.gz",\ :retval => 0, :maxtime => 700 check_ppt_pbs(last_stdout, chr) #run "diff #{last_stdout} #{$gttestdata}ltrdigest/#{chr}_ref_noHMM.gff3" end end end chromosomes_dmel.each do |chr| if $arguments["hmmer"] then Name "gt ltrdigest D. melanogaster chromosome #{chr} AAseq out" Keywords "gt_ltrdigest aminoacidout" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v " + \ "-db #{$gttestdata}ltrdigest/#{chr}_genomic_dmel_RELEASE3-1.FASTA.gz", \ :maxtime => 600 run_test "#{$bin}gt -j 2 ltrdigest -outfileprefix result#{chr} " + \ "-hmms #{$gttestdata}ltrdigest/hmms/RVT_1.hmm " + \ "-aaout yes " + \ " #{$gttestdata}ltrdigest/dmel_test_Run9_#{chr}.gff3.sorted " + \ " #{chr}_genomic_dmel_RELEASE3-1.FASTA.gz", \ :retval => 0, :maxtime => 12000 check_amino_acid_output(last_stdout, chr, ["RVT_1"]) end end end if $arguments["hmmer"] then Name "gt ltrdigest -aliout" Keywords "gt_ltrdigest aminoacidout aliout" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v " + \ "-db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz", \ :maxtime => 600 run_test "#{$bin}gt -j 2 ltrdigest -outfileprefix result4 " + \ "-hmms #{$gttestdata}ltrdigest/hmms/RVT_1.hmm -- " + \ "#{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted " + \ "4_genomic_dmel_RELEASE3-1.FASTA.gz", \ :retval => 0, :maxtime => 12000 if File.exists?("result4_pdom_RVT_1.ali") then raise TestFailed, "file \"result4_pdom_RVT_1.ali\" should not exist" end run_test "#{$bin}gt -j 2 ltrdigest -outfileprefix result4 " + \ "-hmms #{$gttestdata}ltrdigest/hmms/RVT_1.hmm " + \ "-aliout yes " + \ "#{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted " + \ "4_genomic_dmel_RELEASE3-1.FASTA.gz", \ :retval => 0, :maxtime => 12000 if !File.exists?("result4_pdom_RVT_1.ali") then raise TestFailed, "file \"result4_pdom_RVT_1.ali\" does not exist" end end Name "gt ltrdigest -aaout" Keywords "gt_ltrdigest aminoacidout aaout" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v " + \ "-db #{$gttestdata}ltrdigest/4_genomic_dmel_RELEASE3-1.FASTA.gz", \ :maxtime => 600 run_test "#{$bin}gt -j 2 ltrdigest -outfileprefix result4 " + \ "-hmms #{$gttestdata}ltrdigest/hmms/RVT_1.hmm -- " + \ "#{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted " + \ "4_genomic_dmel_RELEASE3-1.FASTA.gz", \ :retval => 0, :maxtime => 12000 if File.exists?("result4_pdom_RVT_1_aa.fas") then raise TestFailed, "file \"result4_pdom_RVT_1_aa.fas\" should not exist" end run_test "#{$bin}gt -j 2 ltrdigest -outfileprefix result4 " + \ "-hmms #{$gttestdata}ltrdigest/hmms/RVT_1.hmm " + \ "-aaout yes " + \ "#{$gttestdata}ltrdigest/dmel_test_Run9_4.gff3.sorted " + \ "4_genomic_dmel_RELEASE3-1.FASTA.gz", \ :retval => 0, :maxtime => 12000 if !File.exists?("result4_pdom_RVT_1_aa.fas") then raise TestFailed, "file \"result4_pdom_RVT_1_aa.fas\" does not exist" end end end end genometools-1.5.1/testsuite/gt_ltrharvest_include.rb000066400000000000000000000320021211610345200230120ustar00rootroot00000000000000require 'ltrun' require 'ltresult' chromosomes_dmel = ["2L","2R","3L","3R","4","X"] runs_dmel = {} runs_dmel["5-1"] = {:seed => 30, :minlenltr => 100, :maxlenltr => 1000, :mindistltr => 1000, :maxdistltr => 15000, :xdrop => 5, :similar => 85} runs_dmel["9"] = {:seed => 76, :minlenltr => 116, :maxlenltr => 800, :mindistltr => 2280, :maxdistltr => 8773, :xdrop => 7, :similar => 91} runs_dmel["10"] = {:seed => 30, :minlenltr => 100, :maxlenltr => 200, :mindistltr => 600, :maxdistltr => 15000, :xdrop => 5, :similar => 85} runs_dmel["11"] = {:seed => 40, :minlenltr => 1, :maxlenltr => 1000, :mindistltr => 1100, :maxdistltr => 16000, :xdrop => 7, :similar => 80} runs_dmel["12"] = {:seed => 20, :minlenltr => 100, :maxlenltr => 1000, :mindistltr => 1000, :maxdistltr => 20000, :xdrop => 7, :similar => 70} # Test Drosophila melanogaster predictions for the parameter sets as # described in the LTRharvest paper and compare them with prior runs. # This is used to ensure result integrity across LTRharvest versions. if $gttestdata then scer_files = {"chr01" => "chr01.19960731.fsa.gz", "chr02" => "chr02.19970727.fsa.gz", "chr03" => "chr03.19970727.fsa.gz", "chr04" => "chr04.19960731.fsa.gz", "chr05" => "chr05.19960731.fsa.gz", "chr06" => "chr06.19960731.fsa.gz", "chr07" => "chr07.19960731.fsa.gz", "chr08" => "chr08.19960731.fsa.gz", "chr09" => "chr09.19941210.fsa.gz", "chr10" => "chr10.19970727.fsa.gz", "chr11" => "chr11.19960731.fsa.gz", "chr12" => "chr12.19970730.fsa.gz", "chr13" => "chr13.19960731.fsa.gz", "chr14" => "chr14.19970727.fsa.gz", "chr15" => "chr15.19960731.fsa.gz", "chr16" => "chr16.19960731.fsa.gz", "chrAll" => "chrAll_before-1997-10-01.fsa.gz"} scer_files.sort.each do |k, v| Name "gt ltrharvest test #{k} yeast" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$gttestdata}ltrharvest/s_cer/#{v}"\ + " -dna -suf -lcp -tis -des -sds -ssp", :maxtime => 720 run_test "#{$bin}gt ltrharvest -index #{v} -seed 100 -minlenltr 100"\ + " -maxlenltr 1000 -mindistltr 1500 -maxdistltr 15000 -similar 80"\ + " -mintsd 5 -maxtsd 20 -motif tgca -motifmis 0 -vic 60"\ + " -overlaps best -xdrop 5 -mat 2 -mis -2 -ins -3 -del -3 -v"\ + " -gff3 #{k}.gff3 -out #{k}.fas -outinner #{k}_inner.fas", \ :maxtime => 25000 if k != "chr11" then run "diff #{last_stdout} #{$gttestdata}ltrharvest/s_cer/#{k}.out" run "#{$bin}gt gff3 -sort #{$gttestdata}ltrharvest/s_cer/#{k}.gff3 > ref.gff3" run "#{$bin}gt gff3 -sort #{k}.gff3 > out.gff3" run "#{$bin}gt eval -ltr out.gff3 ref.gff3" grep(last_stdout, "LTR_retrotransposon sensitivity: 100.00%") grep(last_stdout, "LTR_retrotransposon specificity: 100.00%") end run "diff #{k}.fas #{$gttestdata}ltrharvest/s_cer/#{k}.fas" run "diff #{k}_inner.fas #{$gttestdata}ltrharvest/s_cer/#{k}_inner.fas" end Name "gt ltrharvest test #{k} yeast longoutput" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$gttestdata}ltrharvest/s_cer/#{v}"\ + " -dna -suf -lcp -tis -des -sds -ssp", :maxtime => 540 run_test "#{$bin}gt ltrharvest -longoutput -index #{v} -seed 100 "\ + " -minlenltr 100 -maxlenltr 1000 -mindistltr 1500"\ + " -maxdistltr 15000 -similar 80"\ + " -mintsd 5 -maxtsd 20 -motif tgca -motifmis 0 -vic 60"\ + " -overlaps best -xdrop 5 -mat 2 -mis -2 -ins -3 -del -3 -v"\ + " -gff3 #{k}.gff3 -out #{k}.fas -outinner #{k}_inner.fas", \ :maxtime => 7200 if k != "chr11" then run "diff #{last_stdout} #{$gttestdata}ltrharvest/s_cer/#{k}_longoutput.out" run "#{$bin}gt gff3 -sort #{$gttestdata}ltrharvest/s_cer/#{k}.gff3 > ref.gff3" run "#{$bin}gt gff3 -sort #{k}.gff3 > out.gff3" run "#{$bin}gt eval -ltr out.gff3 ref.gff3" grep(last_stdout, "LTR_retrotransposon sensitivity: 100.00%") grep(last_stdout, "LTR_retrotransposon specificity: 100.00%") end run "diff #{k}.fas #{$gttestdata}ltrharvest/s_cer/#{k}.fas" run "diff #{k}_inner.fas #{$gttestdata}ltrharvest/s_cer/#{k}_inner.fas" end end dmel_files = {"chr2L" => "2L_genomic_dmel_RELEASE3-1.FASTA.gz", "chr2R" => "2R_genomic_dmel_RELEASE3-1.FASTA.gz", "chr3L" => "3L_genomic_dmel_RELEASE3-1.FASTA.gz", "chr3R" => "3R_genomic_dmel_RELEASE3-1.FASTA.gz", "chr4" => "4_genomic_dmel_RELEASE3-1.FASTA.gz", "chrX" => "X_genomic_dmel_RELEASE3-1.FASTA.gz"} dmel_files.sort.each do |k, v| Name "gt ltrharvest test on #{k} Dmel" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$gttestdata}ltrharvest/d_mel/#{v} -dna -suf -sds -lcp -tis -des -ssp", :maxtime => 36000 run_test "#{$bin}gt ltrharvest -index #{v} -seed 76 -minlenltr 116 -maxlenltr 800 -mindistltr 2280 -maxdistltr 8773 -similar 91 -mintsd 4 -maxtsd 20 -vic 60 -overlaps best -xdrop 7 -mat 2 -mis -2 -ins -3 -del -3 -v -gff3 #{k}.gff3", :maxtime => 3600 run "diff #{last_stdout} #{$gttestdata}ltrharvest/d_mel/#{k}.out" run "#{$bin}gt gff3 -sort #{$gttestdata}ltrharvest/d_mel/#{k}.gff3 > ref.gff3" run "#{$bin}gt gff3 -sort #{k}.gff3 > out.gff3" run "#{$bin}gt eval -ltr out.gff3 ref.gff3" grep(last_stdout, "LTR_retrotransposon sensitivity: 100.00%") grep(last_stdout, "LTR_retrotransposon specificity: 100.00%") end end end Name "gt ltrharvest missing index" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt ltrharvest -index ", :retval => 1 end Name "gt ltrharvest only index" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" end Name "gt ltrharvest motif and motifmis" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -motif tgca -motifmis 0" end Name "gt ltrharvest invalid motif characters" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -motif qgca -motifmis 0", :retval => 1 end Name "gt ltrharvest motif not palindromic" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -motif agga -motifmis 0", :retval => 1 end Name "gt ltrharvest maxtsd requires mintsd" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -maxtsd 20", :retval => 1 end Name "gt ltrharvest mintsd and maxtsd" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -mintsd 4 -maxtsd 20" end Name "gt ltrharvest motifmis requires motif" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -motifmis 0", :retval => 1 end Name "gt ltrharvest longoutput missing args" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -longoutput", :retval => 1 end Name "gt ltrharvest longoutput motif random" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -longoutput -motif tgca" end Name "gt ltrharvest longoutput mintsd random" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -longoutput -mintsd 5" end Name "gt ltrharvest overlaps1" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -overlaps no" end Name "gt ltrharvest overlaps2" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -overlaps best" end Name "gt ltrharvest overlaps3" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -overlaps all" end Name "gt ltrharvest FASTA output" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -out out.fna" end Name "gt ltrharvest FASTA inner output" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -outinner outinner.fna" end Name "gt ltrharvest GFF3 output" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna" + " -gff3 out.gff3" end Name "gt ltrharvest missing tables (lcp)" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna -suf -sds -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index Random.fna", :retval => 1 grep(last_stderr, "cannot open file 'Random.fna.lcp'") end Name "gt ltrharvest missing tables (suf)" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random159.fna -dna -ssp -sds -tis -des -lcp" run_test "#{$bin}gt ltrharvest -index Random159.fna", :retval => 1 grep(last_stderr, "cannot open file descriptor 'Random159.fna.suf'") end Name "gt ltrharvest missing tables (des)" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random159.fna -dna -ssp -sds -tis -lcp -suf -des" File.unlink("Random159.fna.des") run_test "#{$bin}gt ltrharvest -index Random159.fna", :retval => 1 grep(last_stderr, "cannot open file \"Random159.fna.des\"") end # test all combinations of options, test only some of them outlist = (["-seed 100", "-minlenltr 100",# "-maxlenltr 1000", "-mindistltr 1500",# "-maxdistltr 15000", "-similar 80", "-mintsd 5", "-range 1000 20000",#"-maxtsd 20", #"-motif tgca",#, #"-motifmis 0", #"-vic 60", #"-overlaps best", #"-xdrop 5", #"-mat 2","-mis -3","-ins -3","-del -3", #"-v", #"-out pred.fna", #"-outinner pred-inner.fna", #"-gff3 pred.gff3" ]) numofalphabets = outlist.length wheelspace = Array.new alphasizes = Array.new counter = 0 0.upto(numofalphabets-1) do |z| alphasizes[z] = 2 wheelspace[z] = 0 end z = numofalphabets-1 thisisnottheend = true while thisisnottheend output = false string = "" 0.upto(numofalphabets-1) do |i| if wheelspace[i] == 1 output = true string = string + " #{outlist[i]}" end end if output counter = counter + 1 Name "gt ltrharvest mixed options #{counter}" Keywords "gt_ltrharvest" Test do run_test "#{$bin}gt suffixerator -db #{$testdata}Random.fna -dna " + \ "-suf -sds -lcp -tis -des -ssp" run_test "#{$bin}gt ltrharvest -index " + "Random.fna #{string}" end end stop = false while not stop wheelspace[z] = wheelspace[z]+1 if wheelspace[z] == alphasizes[z] wheelspace[z] = 0 if z == 0 thisisnottheend = false end z = z - 1 else z = numofalphabets-1 stop = true end end end genometools-1.5.1/testsuite/gt_magicmatch_include.rb000066400000000000000000000006121211610345200227130ustar00rootroot00000000000000for seqfile in ['sw100K1.fsa', 'sw100K2.fsa', 'U89959_ests.fas', 'U89959_genomic.fas', 'Random.fna', 'RandomN.fna'] Name "magicmatch #{seqfile}" Keywords "gt_magicmatch" Test do run "cp #{$testdata+seqfile} ./#{seqfile}" run_test "#{$bin}gt dev magicmatch -t -f #{seqfile}" run "diff #{last_stdout} #{$testdata+seqfile.sub(/\..+$/, '.magicmatch')}" end end genometools-1.5.1/testsuite/gt_matchtool_include.rb000066400000000000000000000073301211610345200226140ustar00rootroot00000000000000Name "gt matchtool test (open match format)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -matchfile #{$testdata}matchtool_open.match" run "diff #{last_stdout} #{$testdata}matchtool_open.out" end Name "gt matchtool test (open match format corrupt)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -matchfile #{$testdata}matchtool_open_corrupt.match", :retval => 1 grep last_stderr, /invalid format/ end Name "gt matchtool test (open match format empty)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -matchfile #{$testdata}matchtool_open_empty.match" run "diff #{last_stdout} #{$testdata}matchtool_open_empty.out" end Name "gt matchtool test (open match format neg value)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -matchfile #{$testdata}matchtool_open_neg.match", :retval => 1 grep last_stderr, /non-negative/ end Name "gt matchtool test (open match format too few columns)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -matchfile #{$testdata}matchtool_open_too_few.match", :retval => 1 grep last_stderr, /invalid format/ end Name "gt matchtool test (open match format too many columns)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -matchfile #{$testdata}matchtool_open_too_many.match", :retval => 1 grep last_stderr, /invalid format/ end Name "gt matchtool test (open match format gz)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -matchfile #{$testdata}matchtool_open.match.gz" run "diff #{last_stdout} #{$testdata}matchtool_open.out" end Name "gt matchtool test (open match format bz2)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -matchfile #{$testdata}matchtool_open.match.bz2" run "diff #{last_stdout} #{$testdata}matchtool_open.out" end Name "gt matchtool test (blast match format)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -type BLASTOUT -matchfile #{$testdata}matchtool_blast.match" run "diff #{last_stdout} #{$testdata}matchtool_blast.out" end Name "gt matchtool test (blast match format corrupt)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -type BLASTOUT -matchfile #{$testdata}matchtool_blast_corrupt.match", :retval => 1 grep last_stderr, /invalid format/ end Name "gt matchtool test (blast match format empty)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -type BLASTOUT -matchfile #{$testdata}matchtool_blast_empty.match" run "diff #{last_stdout} #{$testdata}matchtool_blast_empty.out" end Name "gt matchtool test (blast match format too few columns)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -type BLASTOUT -matchfile #{$testdata}matchtool_blast_too_few.match", :retval => 1 grep last_stderr, /invalid format/ end Name "gt matchtool test (blast match format too many columns)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -type BLASTOUT -matchfile #{$testdata}matchtool_blast_too_many.match", :retval => 1 grep last_stderr, /invalid format/ end Name "gt matchtool test (blast match format neg values)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -type BLASTOUT -matchfile #{$testdata}matchtool_blast_neg.match", :retval => 1 grep last_stderr, /non-negative/ end Name "gt matchtool test (blast match format gz)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -type BLASTOUT -matchfile #{$testdata}matchtool_blast.match.gz" run "diff #{last_stdout} #{$testdata}matchtool_blast.out" end Name "gt matchtool test (blast match format bz2)" Keywords "gt_matchtool" Test do run_test "#{$bin}gt matchtool -type BLASTOUT -matchfile #{$testdata}matchtool_blast.match.bz2" run "diff #{last_stdout} #{$testdata}matchtool_blast.out" end genometools-1.5.1/testsuite/gt_mathsupport_include.rb000066400000000000000000000005311211610345200232040ustar00rootroot00000000000000Name "mathsupport Lua rand_max" Keywords "gt_scripts mathsupport" Test do run_test "#{$bin}gt -seed 12345 #{$testdata}/gtscripts/mathsupport.lua" end Name "mathsupport Lua rand_max (wrong seed)" Keywords "gt_scripts mathsupport" Test do run_test "#{$bin}gt -seed 54321 #{$testdata}/gtscripts/mathsupport.lua", \ :retval => 1 end genometools-1.5.1/testsuite/gt_md5_to_id_include.rb000066400000000000000000000017611211610345200224670ustar00rootroot00000000000000Name "gt md5_to_id (U89959_sas.gff3, old)" Keywords "gt_md5_to_id" Test do run_test "#{$bin}gt md5_to_id -seqfiles " + "#{$testdata}U89959_genomic.fas #{$testdata}U89959_ests.fas -- " + "#{$testdata}U89959_sas.gff3md5old" run "diff #{last_stdout} #{$testdata}U89959_sas.gff3" end Name "gt md5_to_id (U89959_sas.gff3)" Keywords "gt_md5_to_id" Test do run_test "#{$bin}gt md5_to_id #{$testdata}U89959_sas.gff3md5" run "diff #{last_stdout} #{$testdata}U89959_sas.gff3" end Name "gt md5_to_id (U89959_csas.gff3, old)" Keywords "gt_md5_to_id" Test do run_test "#{$bin}gt md5_to_id -seqfiles " + "#{$testdata}U89959_genomic.fas #{$testdata}U89959_ests.fas -- " + "#{$testdata}U89959_csas.gff3md5old" run "diff #{last_stdout} #{$testdata}U89959_csas.gff3" end Name "gt md5_to_id (U89959_csas.gff3)" Keywords "gt_md5_to_id" Test do run_test "#{$bin}gt md5_to_id #{$testdata}U89959_csas.gff3md5" run "diff #{last_stdout} #{$testdata}U89959_csas.gff3" end genometools-1.5.1/testsuite/gt_merge_include.rb000066400000000000000000000015021211610345200217140ustar00rootroot00000000000000Name "gt merge test 1" Keywords "gt_merge" Test do run_test "#{$bin}gt merge #{$testdata}gff3_file_1_short.txt" end Name "gt merge test 2" Keywords "gt_merge" Test do run_test "#{$bin}gt merge #{$testdata}gff3_file_1_short.txt" end Name "gt merge test 3" Keywords "gt_merge" Test do run_test "#{$bin}gt merge #{$testdata}gt_merge_prob_1.in1 #{$testdata}gt_merge_prob_1.in2" run "diff #{last_stdout} #{$testdata}gt_merge_prob_1.out" end Name "gt merge test 4" Keywords "gt_merge" Test do run_test "#{$bin}gt merge #{$testdata}gt_merge_prob_2.in1 #{$testdata}gt_merge_prob_2.in2" run "diff #{last_stdout} #{$testdata}gt_merge_prob_2.out" end Name "gt merge unsorted file" Keywords "gt_merge" Test do run_test("#{$bin}gt merge #{$testdata}unsorted_gff3_file.txt", :retval => 1) grep(last_stderr, "is not sorted") end genometools-1.5.1/testsuite/gt_mergeesa_include.rb000066400000000000000000000031621211610345200224110ustar00rootroot00000000000000def runmerge(queryfile,referencefiles) sfxopts="-dna -algbds 3 31 80 -suf -lcp -tis -pl" run_test "#{$bin}gt suffixerator #{sfxopts} -indexname all " + "-db #{referencefiles.join(" ")}" num = 0 indexlist = Array.new() referencefiles.each do |filename| run_test "#{$bin}gt suffixerator #{sfxopts} -indexname midx#{num} " + "-db #{filename}" run_test "#{$bin}gt dev sfxmap -tis -suf -lcp -esa midx#{num}" indexlist.push("midx#{num}") num+=1 end run_test "#{$bin}gt dev mergeesa -indexname midx-all " + "-ii #{indexlist.join(" ")}" run "cmp -s midx-all.suf all.suf" run "cmp -s midx-all.lcp all.lcp" run "cmp -s midx-all.llv all.llv" run_test "#{$bin}gt mkfmindex -noindexpos -fmout fm-all " + "-ii #{indexlist.join(" ")}" run_test "#{$bin}gt suffixerator -indexname fm-all -plain -des no -ssp no" + " -sds no -smap fm-all.al1 -tis -db fm-all.bwt" run_test "#{$bin}gt uniquesub -fmi fm-all -query #{queryfile} " + "-output sequence querypos -min 10 -max 10" end def iterrunmerge(numtoselect) reference="#{$testdata}at1MB" run "#{$scriptsdir}seqselect.rb #{numtoselect} #{reference}" run "#{$scriptsdir}splitmultifasta.rb TMP 0 #{last_stdout}" referencefiles = Array.new() Dir.new('.').each do |filename| if filename.match(/^TMP-/) referencefiles.push(filename) end end queryfile="#{$testdata}U89959_genomic.fas" runmerge(queryfile,referencefiles) end 2.upto(10) do |numtoselect| Name "gt merge #{numtoselect} enhanced suffix arrays" Keywords "gt_mergeesa" Test do iterrunmerge(numtoselect) end end genometools-1.5.1/testsuite/gt_mergefeat_include.rb000066400000000000000000000006211211610345200225550ustar00rootroot00000000000000Name "gt mergefeat test" Keywords "gt_mergefeat mergefeat" Test do run_test "#{$bin}gt mergefeat #{$testdata}mergefeat.gff3" run "diff #{last_stdout} #{$testdata}mergefeat.out" end Name "gt mergefeat test (no merge)" Keywords "gt_mergefeat mergefeat" Test do run_test "#{$bin}gt mergefeat #{$testdata}mergefeat_no_merge.gff3" run "diff #{last_stdout} #{$testdata}mergefeat_no_merge.gff3" end genometools-1.5.1/testsuite/gt_mgth_include.rb000066400000000000000000000117501211610345200215620ustar00rootroot00000000000000if $gttestdata then Name "gt mgth testdata mixed options 1" Keywords "gt_mgth" Test do run_test "#{$bin}gt mgth -o Pyrococcus_NTo1_horikoshii -g yes -r 3 -e 3 -x yes -t yes #{$gttestdata}mgth/Pyrococcus_NTo1_horikoshii.xml.gz #{$gttestdata}mgth/Pyrococcus_horikoshii.txt.gz #{$gttestdata}mgth/Hits_NTo1_Pyrococcus_horikoshii.txt.gz", :maxtime => 200 run "diff Pyrococcus_NTo1_horikoshii.xml #{$gttestdata}mgth/Pyrococcus_NTo1_horikoshii_ori_1.xml" end Name "gt mgth testdata mixed options 2" Keywords "gt_mgth" Test do run_test "#{$bin}gt mgth -o Pyrococcus_NTo1_horikoshii -s 1.17 -n 3 -b -9.10 -q -3.0 -h -3.98 -l -1.3 -p 368 -f 217.0 -t yes -g yes -m yes -x yes -r 2 -e 3 -d 0.73 #{$gttestdata}mgth/Pyrococcus_NTo1_horikoshii.xml.gz #{$gttestdata}mgth/Pyrococcus_horikoshii.txt.gz #{$gttestdata}mgth/Hits_NTo1_Pyrococcus_horikoshii.txt.gz", :maxtime => 200 run "diff Pyrococcus_NTo1_horikoshii.html #{$gttestdata}mgth/Pyrococcus_NTo1_horikoshii_ori_2.html" end Name "gt mgth testdata mixed options 3" Keywords "gt_mgth" Test do run_test "#{$bin}gt mgth -o Pyrococcus_NTo1_horikoshii -s 5 -n 3.5 -b -14.23 -q -2.88 -h -5 -l -0.75 -p 295.75 -f 300.20 -t yes -g yes -m no -x no -r 3 -e 2 -a 25 -d 0.2 #{$gttestdata}mgth/Pyrococcus_NTo1_horikoshii.xml.gz #{$gttestdata}mgth/Pyrococcus_horikoshii.txt.gz #{$gttestdata}mgth/Hits_NTo1_Pyrococcus_horikoshii.txt.gz", :maxtime => 200 run "diff Pyrococcus_NTo1_horikoshii.xml #{$gttestdata}mgth/Pyrococcus_NTo1_horikoshii_ori_3.xml" end Name "gt mgth testdata mixed options 4" Keywords "gt_mgth" Test do run_test "#{$bin}gt mgth -o Pyrococcus_horikoshii -s 3.17 -n 2.32 -b -13.64 -q -3.45 -h -4.77 -l -1.5 -p 325.50 -f 225.25 -t yes -g yes -m no -x yes -r 1 -e 1 -d 0.21 #{$gttestdata}mgth/Pyrococcus_horikoshii.xml.gz #{$gttestdata}mgth/Pyrococcus_horikoshii.txt.gz #{$gttestdata}mgth/Hits_Pyrococcus_horikoshii.txt.gz", :maxtime => 200 run "diff Pyrococcus_horikoshii.txt #{$gttestdata}mgth/Pyrococcus_horikoshii_ori_4.txt" end Name "gt mgth testdata mixed options 5" Keywords "gt_mgth" Test do run_test "#{$bin}gt mgth -o Pyrococcus_horikoshii -s 2.55 -n 4.77 -b -15 -q -3 -h -3.27 -l -1.2 -p 177.13 -f 123 -t yes -g yes -m no -x yes -r 2 -e 2 -d 0.05 #{$gttestdata}mgth/Pyrococcus_horikoshii.xml.gz #{$gttestdata}mgth/Pyrococcus_horikoshii.txt.gz #{$gttestdata}mgth/Hits_Pyrococcus_horikoshii.txt.gz", :maxtime => 200 run "diff Pyrococcus_horikoshii.html #{$gttestdata}mgth/Pyrococcus_horikoshii_ori_5.html" end Name "gt mgth testdata mixed options 6" Keywords "gt_mgth" Test do run_test "#{$bin}gt mgth -o Pyrococcus_horikoshii -s 4.12 -n 2.9 -b -10 -q -7.5 -h -2 -l -0.5 -p 300 -f 211 -t yes -g yes -m no -x no -r 1 -e 3 -a 17 -d 0.13 #{$gttestdata}mgth/Pyrococcus_horikoshii.xml.gz #{$gttestdata}mgth/Pyrococcus_horikoshii.txt.gz #{$gttestdata}mgth/Hits_Pyrococcus_horikoshii.txt.gz", :maxtime => 100 run "diff Pyrococcus_horikoshii.txt #{$gttestdata}mgth/Pyrococcus_horikoshii_ori_6.txt" end Name "gt mgth testdata mixed options 7" Keywords "gt_mgth" Test do run_test "#{$bin}gt mgth -o Metagenome -s 3.17 -n 2.32 -b -13.64 -q -3.45 -h -4.77 -l -1.5 -p 325.50 -f 225.25 -t yes -g yes -m no -x yes -r 1 -e 1 -d 0.01 #{$gttestdata}mgth/Metagenome_NT.xml.gz #{$gttestdata}mgth/Metagenome.txt.gz #{$gttestdata}mgth/Hits_NT_Metagenome.txt.gz", :maxtime => 3200 run "diff Metagenome.txt #{$gttestdata}mgth/Metagenome_ori_1.txt" end Name "gt mgth testdata mixed options 8" Keywords "gt_mgth" Test do run_test "#{$bin}gt mgth -o Metagenome -s 1.17 -n 3 -b -9.10 -q -3.0 -h -3.98 -l -1.3 -p 368 -f 217.0 -t yes -g yes -m no -x yes -r 2 -e 3 -d 0.05 #{$gttestdata}mgth/Metagenome_NTo1.xml.gz #{$gttestdata}mgth/Metagenome.txt.gz #{$gttestdata}mgth/Hits_NTo1_Metagenome.txt.gz", :maxtime => 3200 run "diff Metagenome.html #{$gttestdata}mgth/Metagenome_ori_2.html" end Name "gt mgth testdata mixed options 9" Keywords "gt_mgth" Test do run_test "#{$bin}gt mgth -o Metagenome_454 -s 3.17 -n 2.32 -b -13.64 -q -3.45 -h -4.77 -l -1.5 -p 325.50 -f 225.25 -t yes -g yes -m no -x yes -r 1 -e 1 -d 0.01 #{$gttestdata}mgth/Metagenome_NT_454.xml.gz #{$gttestdata}mgth/Metagenome_454.txt.gz #{$gttestdata}mgth/Hits_NT_Metagenome_454.txt.gz", :maxtime => 3200 run "diff Metagenome_454.txt #{$gttestdata}mgth/Metagenome_454_ori_3.txt" end Name "gt mgth testdata mixed options 10" Keywords "gt_mgth" Test do run_test "#{$bin}gt mgth -o Metagenome_454 -s 1.17 -n 3 -b -9.10 -q -3.0 -h -3.98 -l -1.3 -p 368 -f 217.0 -t yes -g yes -m no -x yes -r 2 -e 3 -d 0.05 #{$gttestdata}mgth/Metagenome_NTo1_454.xml.gz #{$gttestdata}mgth/Metagenome_454.txt.gz #{$gttestdata}mgth/Hits_NTo1_Metagenome_454.txt.gz", :maxtime => 3200 run "diff Metagenome_454.html #{$gttestdata}mgth/Metagenome_454_ori_4.html" run "rm -f #{$gttestdata}mgth/*.des #{$gttestdata}mgth/*.esq " + \ "#{$gttestdata}mgth/*.md5 #{$gttestdata}mgth/*.ois " + \ "#{$gttestdata}mgth/*.sds #{$gttestdata}mgth/*.ssp" end end genometools-1.5.1/testsuite/gt_mmapandread_include.rb000066400000000000000000000016071211610345200230740ustar00rootroot00000000000000Name "gt mmapandread test 1" Keywords "gt_mmapandread" Test do run_test("#{$bin}gt mmapandread", :retval => 1) end Name "gt mmapandread test 2" Keywords "gt_mmapandread" Test do run_test "#{$bin}gt mmapandread #{$testdata}gt_mmapandread_test_1.in" end Name "gt mmapandread test 3" Keywords "gt_mmapandread" Test do run_test "#{$bin}gt mmapandread #{$testdata}gt_mmapandread_test_2.in" end Name "gt mmapandread test 4" Keywords "gt_mmapandread" Test do run_test "#{$bin}gt mmapandread #{$testdata}gt_mmapandread_test_3.in" end Name "gt mmapandread test 5" Keywords "gt_mmapandread" Test do run "ln -s /dev/null devnulllink" run_test "#{$bin}gt mmapandread devnulllink" end Name "gt mmapandread test 6" Keywords "gt_mmapandread" Test do run_test "#{$bin}gt mmapandread #{$testdata}gt_mmapandread_test_1.in #{$testdata}gt_mmapandread_test_2.in #{$testdata}gt_mmapandread_test_3.in" end genometools-1.5.1/testsuite/gt_orffinder_include.rb000066400000000000000000000114671211610345200226060ustar00rootroot00000000000000if $gttestdata then Name "gt orffinder missing input sequence" Keywords "gt_orffinder" Test do run_test "#{$bin}gt orffinder", :retval => 1, :maxtime => 120 grep(last_stderr, /missing argument/) end Name "gt orffinder missing value for -min" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder -min 4_genomic_dmel_RELEASE3-1.FASTA.gz #{$gttestdata}orffinder/chr4.gff3", :retval => 1 grep(last_stderr, /error/) end Name "gt orffinder missing value for -max" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder -max #{$gttestdata}orffinder/chr4.gff3 4_genomic_dmel_RELEASE3-1.FASTA.gz", :retval => 1 grep(last_stderr, /error/) end Name "gt orffinder value for -min < 30" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder -min 1 -o foo 4_genomic_dmel_RELEASE3-1.FASTA.gz #{$gttestdata}orffinder/chr4.gff3", :retval => 1 grep(last_stderr, /error/) end Name "gt orffinder value for -min > -max" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/4_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder -min 130 -max 120 -o foo 4_genomic_dmel_RELEASE3-1.FASTA.gz #{$gttestdata}orffinder/chr4.gff3", :retval => 1 grep(last_stderr, /Value for/) end Name "gt orffinder -types ltrs is not a node" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/3R_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder -types altrs -- 3R_genomic_dmel_RELEASE3-1.FASTA.gz #{$gttestdata}orffinder/chr3R.gff3", :maxtime => 120 run "diff #{last_stdout} #{$gttestdata}orffinder/chr3R_no_node_altrs.gff3" end Name "gt orffinder find longest orfs for 2R" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/2R_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder 2R_genomic_dmel_RELEASE3-1.FASTA.gz #{$gttestdata}orffinder/chr2R.gff3", :maxtime => 120 run "diff #{last_stdout} #{$gttestdata}orffinder/chr2R_longest_orfs.orffinder" end Name "gt orffinder find all orfs for 3L" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/3L_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder -allorfs 3L_genomic_dmel_RELEASE3-1.FASTA.gz #{$gttestdata}orffinder/chr3L.gff3", :maxtime => 120 run "diff #{last_stdout} #{$gttestdata}orffinder/chr3L_all_orfs.orffinder" end Name "gt orffinder find all orfs in long_terminal_repeat" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/3R_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder -allorfs -types long_terminal_repeat -- 3R_genomic_dmel_RELEASE3-1.FASTA.gz #{$gttestdata}orffinder/chr3R.gff3", :maxtime => 200 run "diff #{last_stdout} #{$gttestdata}orffinder/chr3R_all_orfs_longterminalrepeat.orffinder" end Name "gt orffinder find longest orfs in long_terminal_repeat" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/3R_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder -types long_terminal_repeat -- 3R_genomic_dmel_RELEASE3-1.FASTA.gz #{$gttestdata}orffinder/chr3R.gff3", :maxtime => 200 run "diff #{last_stdout} #{$gttestdata}orffinder/chr3R_longest_orfs_longterminalrepeat.orffinder" end Name "gt orffinder find all orfs > 300nt for X" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/X_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder -allorfs -min 300 X_genomic_dmel_RELEASE3-1.FASTA.gz #{$gttestdata}orffinder/chrX.gff3", :maxtime => 120 run "diff #{last_stdout} #{$gttestdata}orffinder/chrX_all_min300nt.orffinder" end Name "gt orffinder find longest orfs > 300nt for X" Keywords "gt_orffinder" Test do run_test "#{$bin}gt suffixerator -dna -des -ssp -tis -v -db #{$gttestdata}ltrharvest/d_mel/X_genomic_dmel_RELEASE3-1.FASTA.gz" run_test "#{$bin}gt orffinder -min 300 X_genomic_dmel_RELEASE3-1.FASTA.gz #{$gttestdata}orffinder/chrX.gff3", :maxtime => 120 run "diff #{last_stdout} #{$gttestdata}orffinder/chrX_longest_min300nt.orffinder" end end genometools-1.5.1/testsuite/gt_packedindex_include.rb000066400000000000000000000156041211610345200231040ustar00rootroot00000000000000def aPrefix(prefix, list) return (list.collect {|x| prefix + x}) end def prependTestdata(filelist) return aPrefix("#{$testdata}", filelist) end def paramList(paramsHash) if paramsHash != nil return paramsHash.to_a.flatten.compact else return [] end end def runAndCheckPackedIndex(indexName,dbFiles, extraParams=Hash.new) params = { :create => { '-tis' => nil, '-des' => nil }, :timeOuts => { :bdxcreat => 100, :suffixerator => 100, :chkintegrity => 400, :chksearch => 400, :trsuftab => 100, :mkctxmap => 100 }, :bdx => {}, :chksearch => { '-chksfxarray' => nil, '-nsamples' => '100' }, :mkctxmap => { '-ctxilog' => -1 } } extraParams.keys.each do |key| params[key].merge!(extraParams[key]) if params.has_key?(key) end if indexName != nil params[:create]['-indexname'] = indexName else indexName = dbFiles.compact[0].sub(/.*\//,'') end # puts('timeout: ', params[:timeOuts][:bdxcreat]) if !extraParams.has_key?(:useSuftabTranslation) || !extraParams[:useSuftabTranslation] run_test((["#{$bin}gt", '-debug', 'packedindex', 'mkindex'] + paramList(params[:create]) + paramList(params[:bdx]) + ['-db'] + dbFiles).join(' '), :maxtime => params[:timeOuts][:bdxcreat]) end run_test((["#{$bin}gt", '-debug', 'suffixerator'] + paramList(params[:create]) + ['-bwt', '-suf', '-db'] + dbFiles).join(' '), :maxtime => params[:timeOuts][:suffixerator]) if extraParams.has_key?(:useSuftabTranslation) && extraParams[:useSuftabTranslation] run_test((["#{$bin}gt", '-debug', 'packedindex', 'trsuftab'] + paramList(params[:bdx]) + [indexName]).join(' '), :maxtime => params[:timeOuts][:trsuftab]) end if extraParams.has_key?(:mkctxmap) && extraParams[:mkctxmap] run_test((["#{$bin}gt", '-debug', 'packedindex', 'mkctxmap'] + paramList(params[:mkctxmap]) + [indexName]).join(' '), :maxtime => params[:timeOuts][:mkctxmap]) end run_test(["#{$bin}gt", '-debug', 'packedindex', 'chkintegrity', '-ticks', '1000', indexName].join(' '), :maxtime => params[:timeOuts][:chkintegrity]) run_test((["#{$bin}gt", '-debug', 'packedindex', 'chksearch'] + paramList(params[:chksearch]) + [indexName]).join(' '), :maxtime => params[:timeOuts][:chksearch]) end myfilelist = ["RandomN.fna","Random.fna","Atinsert.fna", "TTT-small.fna","trna_glutamine.fna", "Random-Small.fna","Duplicate.fna"] Name "gt packedindex check tools for simple sequences" Keywords "gt_packedindex" Test do allfiles = prependTestdata(myfilelist) runAndCheckPackedIndex('miniindex', allfiles) end Name "gt packedindex check tools for simple sequences w/o locate" Keywords "gt_packedindex" Test do allfiles = prependTestdata(myfilelist) runAndCheckPackedIndex('miniindex', allfiles, :bdx => { '-locfreq' => 0 }, :chksearch => { '-chksfxarray' => 'no' }) end Name "gt packedindex check tools for simple sequences with sprank" Keywords "gt_packedindex" Test do allfiles = prependTestdata(myfilelist) runAndCheckPackedIndex('miniindex', allfiles, :bdx => { '-sprank' => nil }, :chksearch => { '-full-lfmap' => nil }, :timeOuts => { :chksearch => 800 }) end Name "gt packedindex check tools for revcom sequence with sprank" Keywords "gt_packedindex" Test do allfiles = prependTestdata(["Atinsert.fna"]) runAndCheckPackedIndex('miniindex', allfiles, :create => { '-dir' => 'rev' }, :bdx => { '-sprank' => nil }, :chksearch => { '-full-lfmap' => nil }, :timeOuts => { :chksearch => 800 }) end #exclude this because it does not run on stefans laptop Name "gt packedindex check tools for simple sequences with context" Keywords "gt_packedindex" Test do allfiles = prependTestdata(myfilelist) runAndCheckPackedIndex('miniindex', allfiles, :bdx => { '-sprank' => nil, '-ctxilog' => -1 }, :chksearch => { '-chkcontext' => nil }, :timeOuts => { :chksearch => 800 }) end Name "gt packedindex check tools for protein sample" Keywords "gt_packedindex" Test do runAndCheckPackedIndex(nil, prependTestdata(['sw100K2.fsa']), :bdx => { '-bsize' => 1 }) end #exclude this because it does not run on stefans laptop Name "gt packedindex check tools for simple sequences, tr-mode" Keywords "gt_packedindex" Test do allfiles = prependTestdata(myfilelist) runAndCheckPackedIndex('miniindex', allfiles, :useSuftabTranslation => true, :bdx => { '-sprank' => nil }, :mkctxmap => {}) end Name "gt packedindex check tools for boundary-case sequences" Keywords "gt_packedindex" Test do allfiles = prependTestdata(['Random160.fna', 'Random159.fna']) allfiles.each do |file| runAndCheckPackedIndex(nil, [file], :bdx => { '-blbuck' => 20 }) end runAndCheckPackedIndex(nil, prependTestdata(['Random80.fna']), :bdx => { '-bsize' => 10 }) end Name "gt packedindex check tools for at1MB" Keywords "gt_packedindex" Test do runAndCheckPackedIndex('at1MB', ["#{$testdata}at1MB"], :timeOuts => { :bdxcreat => 400, :suffixerator => 400, :chkintegrity => 800, :chksearch => 400 }) end if $gttestdata then Name "gt packedindex check tools for chr01 yeast" Keywords "gt_packedindex" Test do runAndCheckPackedIndex('chr01.19960731', ["#{$gttestdata}ltrharvest/s_cer/chr01.19960731.fsa.gz"]) end dmelFiles = aPrefix("#{$gttestdata}ltrharvest/d_mel/", [ 'X_genomic_dmel_RELEASE3-1.FASTA.gz', '2L_genomic_dmel_RELEASE3-1.FASTA.gz', '2R_genomic_dmel_RELEASE3-1.FASTA.gz', '3L_genomic_dmel_RELEASE3-1.FASTA.gz', '3R_genomic_dmel_RELEASE3-1.FASTA.gz', '4_genomic_dmel_RELEASE3-1.FASTA.gz', ]) dmelFiles.each do |file| shortFileName = file.match('[^/]*$')[0] maxDisplay = 12 if shortFileName.length > maxDisplay shortFileName = shortFileName[0,maxDisplay - 4] + '...' end Name 'gt packedindex check tools for d.melanogaster (' + shortFileName + ')' Keywords 'gt_packedindex' Test do runAndCheckPackedIndex('dmel', [file], :timeOuts => { :trsuftab => 7200, :suffixerator => 57600, :chkintegrity => 3200, :chksearch => 800 }, :useSuftabTranslation => true) end end end genometools-1.5.1/testsuite/gt_python_include.rb000066400000000000000000000105761211610345200221510ustar00rootroot00000000000000Name "gtpython: genome_stream bindings (output stream)" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/gff3.py #{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "diff #{last_stdout} #{$testdata}gff3_file_1_short_sorted.txt" end Name "gtpython: genome_visitor bindings (output stream)" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/genome_visitor.py #{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "diff #{last_stdout} #{$testdata}gff3_file_1_short_sorted.txt" end Name "gtpython: feature_index and feature_stream bindings" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/feature_stuff.py " + "#{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "grep -v '^##sequence-region' #{$testdata}gff3_file_1_short_sorted.txt | diff #{last_stdout} -" end if not $arguments["nocairo"] then Name "gtpython: AnnotationSketch bindings (valid gff3 file)" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/sketch.py test.png " + "#{$testdata}gff3_file_1_short.txt" end Name "gtpython: AnnotationSketch bindings (corrupt gff3 file)" Keywords "gt_python" Test do run_python("#{$testdata}gtpython/sketch.py test.png #{$testdata}corrupt.gff3", :retval => 1) grep last_stderr, "GenomeTools error" end Name "gtpython: AnnotationSketch bindings (nonexistent gff3 file)" Keywords "gt_python" Test do run_python("#{$testdata}gtpython/sketch.py test.png " + "#{$testdata}nonexistent_file", :retval => 1) grep last_stderr, "GenomeTools error" end Name "gtpython: AnnotationSketch bindings (simple sketch)" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/sketch_simple.py test.png " + "#{$testdata}gff3_file_1_short.txt" end Name "gtpython: AnnotationSketch bindings (PNG stream)" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/sketch_stream.py test.png " + "#{$testdata}gff3_file_1_short.txt" end Name "gtpython: AnnotationSketch bindings (TrackSelectorFunc)" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/block_stuff.py " + "#{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.blocks" end Name "gtpython: AnnotationSketch bindings (style)" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/style.py #{$cur}/gtdata/sketch/default.style" end Name "gtpython: AnnotationSketch bindings (error reporting)" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/sketch-failures.py " + "#{$testdata}gff3_file_1_short.txt" end Name "gtpython: AnnotationSketch bindings (Graphics)" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/graphics_stuff.py " + "#{$testdata}graphics_curve_test_coords.txt " + "out.svg" # will fail e.g. if cairo toy font setup is different from test machine # disabled for now # run "diff out.svg #{$testdata}graphics_test.out" end Name "gtpython: AnnotationSketch bindings (FeatureNode(Iterator))" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/feature_node.py" end Name "gtpython: show_seqids" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/show_seqids.py #{$testdata}encode_known_genes_Mar07.gff3" run "diff #{last_stdout} #{$testdata}encode_known_genes_Mar07.seqids" end Name "gtpython: used_types" Keywords "gt_python" Test do run_python "#{$testdata}gtpython/used_types.py " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.types" end Name "gtpython: show_recmaps" Keywords "gt_python showrecmaps" Test do run_python "#{$testdata}gtpython/show_recmaps.py " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.hotspots" end Name "gtpython: unicode strings" Keywords "gt_python" Test do run_python("#{$testdata}gtpython/unicode_strings.py #{$cur}/gtdata/sketch/default.style test.png") end end Name "gtpython: unittests" Keywords "gt_python unittests" Test do run_python "#{$gtpython}/tests/__init__.py " grep last_stderr, "OK" end genometools-1.5.1/testsuite/gt_readjoiner_include.rb000066400000000000000000001244001211610345200227420ustar00rootroot00000000000000rdjO = "#{$bin}gt readjoiner overlap" rdjA = "#{$bin}gt readjoiner assembly" spmtest = "#{$bin}gt readjoiner spmtest" cnttest = "#{$bin}gt readjoiner cnttest" def run_correct(input, k, c) run "#{$bin}gt suffixerator -mirrored -suf -lcp -ssp"+ " -indexname reads -db #{input}" run "#{$bin}gt readjoiner correct -k #{k} -c #{c} -ii reads" end def run_prefilter(input, moreopts="") run "#{$bin}gt readjoiner prefilter -readset reads "+ "-db #{input} #{moreopts}" end def run_overlap(minlen, moreopts="") run "#{$bin}gt readjoiner overlap -readset reads "+ "-l #{minlen} #{moreopts}" end def run_assembly(moreopts="") run "#{$bin}gt readjoiner assembly -readset reads #{moreopts}" end def encode_reads(input, moreopts="") run "#{$bin}gt encseq encode -des no -sds no -md5 no -indexname reads "+ "#{moreopts} #{input}" end def prepare_esa(indexname, mirrored) run "#{$bin}gt suffixerator -ii #{indexname} -suf -lcp -ssp "+ "#{mirrored ? '-mirrored' : ''}" end def compare_encseqs(indexname1, indexname2) run "#{$bin}gt encseq decode #{indexname1}" decoded1 = last_stdout run "#{$bin}gt encseq decode #{indexname2}" decoded2 = last_stdout run "diff #{decoded1} #{decoded2}" run "#{$bin}gt encseq info #{indexname1}" run "grep -v 'index name' #{last_stdout}" info1 = last_stdout run "#{$bin}gt encseq info #{indexname2}" run "grep -v 'index name' #{last_stdout}" info2 = last_stdout run "diff #{info1} #{info2}" end Name "gt readjoiner encoder: SE/Fasta/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U -readset reads_prefilter" encode_reads("U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/FastQ/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U -readset reads_prefilter" encode_reads("U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Varlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1v.fas 1v" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1v -readset reads_prefilter" encode_reads("1v") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/FastQ/Varlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1v.fastq 1v" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1v -readset reads_prefilter" encode_reads("1v") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: PEi/Fasta/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas 1_2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1_2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1_2:100'" encode_reads("1_2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: PEi/FastQ/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1_2.fastq 1_2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1_2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fastq '1_2:100'" encode_reads("1_2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: PE2/Fasta/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1.fas 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fas 2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" encode_reads("1:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: PE2/FastQ/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" encode_reads("1:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Eqlen + PE2/Fasta/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1.fas 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fas 2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1:2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" encode_reads("U 1:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Eqlen + PEi/Fasta/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas 1_2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1_2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1_2:100'" encode_reads("U 1_2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/FastQ/Eqlen + PE2/FastQ/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "cp #{$testdata}/readjoiner/paired_reads_1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1:2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" encode_reads("U 1:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/FastQ/Eqlen + PEi/FastQ/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fastq 1_2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1_2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1_2:100'" encode_reads("U 1_2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Eqlen + PE2/FastQ/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1:2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" encode_reads("U 1:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/FastQ/Eqlen + PE2/Fasta/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "cp #{$testdata}/readjoiner/paired_reads_1.fas 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fas 2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1:2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" encode_reads("U 1:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: PE2/Fasta/Eqlen + SE/Fasta/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1.fas 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fas 2" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1:2:100 U -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" encode_reads("1:2:100 U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: PE2/FastQ/Eqlen + SE/FastQ/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1:2:100 U -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" encode_reads("1:2:100 U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: 2xPE2/Fasta/Eqlen + SE/Fasta/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1.fas 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fas 2" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1:2:100 1:2:200 U -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:200'" encode_reads("1:2:100 1:2:200 U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: 2xPE2/FastQ/Eqlen + SE/FastQ/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1:2:100 1:2:200 U -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:200'" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" encode_reads("1:2:100 1:2:200 U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: PE2/fQ/Eq + SE/fQ/Eq + PEi/fQ/Eq" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fastq '1_2'" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1:2:100 U 1_2:10000,1200 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1_2:10000,1200'" encode_reads("1:2:100 U 1_2:10000,1200") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: 2xPE2/Fas/Eq/Wild1 + SE/Fasta/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1N.fas 1N" run "cp #{$testdata}/readjoiner/paired_reads_2.fas 2" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1N:2:100 1N:2:200 U -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1N_2.p.fas '1N:2:100'" run "cp #{$testdata}/readjoiner/paired_reads_1N_2.p.fas '1N:2:200'" encode_reads("1N:2:100 1N:2:200 U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: PEi/fQ/Eq/Wild1 + SE/FastQ/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1N_2.fastq 1N_2" run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1N_2:180,10 U -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1N_2.p.fas '1N_2:180,10'" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" encode_reads("1N_2:180,10 U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: 2xPE2/fQ/Eq/Wild1 + SE/FastQ/Eqlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1N.fastq 1N" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1N:2:100 1N:2:200 U -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1N_2.p.fas '1N:2:100'" run "cp #{$testdata}/readjoiner/paired_reads_1N_2.p.fas '1N:2:200'" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" encode_reads("1N:2:100 1N:2:200 U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Eqlen + PEi/Fasta/Eq/Wild1b" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1Nb_2.fas 1Nb_2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1Nb_2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1Nb_2.p.fas '1Nb_2:100'" encode_reads("U 1Nb_2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Eqlen + PE2/Fasta/Eq/Wild1b" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1Nb.fas 1Nb" run "cp #{$testdata}/readjoiner/paired_reads_2.fas 2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1Nb:2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1Nb_2.p.fas '1Nb:2:100'" encode_reads("U 1Nb:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/FastQ/Eqlen + PE2/FastQ/Eq/Wild1b" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "cp #{$testdata}/readjoiner/paired_reads_1Nb.fastq 1Nb" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1Nb:2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1Nb_2.p.fas '1Nb:2:100'" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" encode_reads("U 1Nb:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Eqlen + PE2/Fasta/Eq/Wild2" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1.fas 1" run "cp #{$testdata}/readjoiner/paired_reads_2N.fas 2N" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1:2N:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2N.p.fas '1:2N:100'" encode_reads("U 1:2N:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/FastQ/Eqlen + PE2/FastQ/Eq/Wild2" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "cp #{$testdata}/readjoiner/paired_reads_1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2N.fastq 2N" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1:2N:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1_2N.p.fas '1:2N:100'" encode_reads("U 1:2N:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Eqlen + PE2/Fasta/Eq/Wild2b" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1.fas 1" run "cp #{$testdata}/readjoiner/paired_reads_2Nb.fas 2Nb" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1:2Nb:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2Nb.p.fas '1:2Nb:100'" encode_reads("U 1:2Nb:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Eqlen + PE2/FastQ/Eq/Wild2b" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2Nb.fastq 2Nb" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1:2Nb:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1_2Nb.p.fas '1:2Nb:100'" encode_reads("U 1:2Nb:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Eqlen + PE2/Fasta/Varlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1v.fas 1v" run "cp #{$testdata}/readjoiner/paired_reads_2.fas 2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1v:2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1v_2.fas '1v:2:100'" encode_reads("U 1v:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/FastQ/Eqlen + PE2/FastQ/Varlen" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "cp #{$testdata}/readjoiner/paired_reads_1v.fastq 1v" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1v:2:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1v_2.fas '1v:2:100'" encode_reads("U 1v:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/Fasta/Eq + PE2/Fasta/Var/Wild2b" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1v.fas 1v" run "cp #{$testdata}/readjoiner/paired_reads_2Nb.fas 2Nb" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1v:2Nb:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1v_2Nb.p.fas "+ "'1v:2Nb:100'" encode_reads("U 1v:2Nb:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/FastQ/Eq + PEi/FastQ/Var/Wild2b" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "cp #{$testdata}/readjoiner/paired_reads_1v_2Nb.fastq 1v_2Nb" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1v_2Nb:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1v_2Nb.p.fas "+ "'1v_2Nb:100'" encode_reads("U 1v_2Nb:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: SE/FastQ/Eq + PE2/FastQ/Var/Wild2b" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_U.fastq U" run "cp #{$testdata}/readjoiner/paired_reads_1v.fastq 1v" run "cp #{$testdata}/readjoiner/paired_reads_2Nb.fastq 2Nb" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db U 1v:2Nb:100 -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "cp #{$testdata}/readjoiner/paired_reads_1v_2Nb.p.fas "+ "'1v:2Nb:100'" encode_reads("U 1v:2Nb:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: PE2/Fasta/Var/Wild1N + SE/Fasta/Eq" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1Nv.fas 1Nv" run "cp #{$testdata}/readjoiner/paired_reads_2.fas 2" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1Nv:2:200 U -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1Nv_2.p.fas "+ "'1Nv:2:200'" encode_reads("1Nv:2:200 U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: PE2/FastQ/Var/Wild1N + SE/Fasta/Eq" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1Nv.fastq 1Nv" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" run "#{$bin}gt readjoiner prefilter -encodeonly "+ "-db 1Nv:2:200 U -readset reads_prefilter" run "cp #{$testdata}/readjoiner/paired_reads_1Nv_2.p.fas "+ "'1Nv:2:200'" run "cp #{$testdata}/readjoiner/paired_reads_U.fas U" encode_reads("1Nv:2:200 U") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: quality filter (-maxlow, 1L1)" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1L1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "#{$bin}gt readjoiner prefilter -maxlow 3 -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "grep 'number of reads in output readset = 4' #{last_stdout}" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" encode_reads("1:2:100") compare_encseqs("reads", "reads_prefilter") run "#{$bin}gt readjoiner prefilter -maxlow 0 -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "grep 'number of reads in output readset = 0' #{last_stdout}" end Name "gt readjoiner encoder: quality filter (-maxlow, 1L2)" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1L2.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "#{$bin}gt readjoiner prefilter -maxlow 3 -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "grep 'number of reads in output readset = 4' #{last_stdout}" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" encode_reads("1:2:100") compare_encseqs("reads", "reads_prefilter") run "#{$bin}gt readjoiner prefilter -maxlow 1 -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "grep 'number of reads in output readset = 2' #{last_stdout}" run "cp #{$testdata}/readjoiner/paired_reads_1N_2.p.fas '1:2:100'" encode_reads("1:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: quality filter (-maxlow, 1L4)" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1L4.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "#{$bin}gt readjoiner prefilter -maxlow 3 -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "grep 'number of reads in output readset = 2' #{last_stdout}" run "cp #{$testdata}/readjoiner/paired_reads_1N_2.p.fas '1:2:100'" encode_reads("1:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: quality filter (-maxlow -lowqual)" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1L1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "#{$bin}gt readjoiner prefilter -maxlow 2 -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "grep 'number of reads in output readset = 4' #{last_stdout}" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" encode_reads("1:2:100") compare_encseqs("reads", "reads_prefilter") run "cp #{$testdata}/readjoiner/paired_reads_1L1.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2.fastq 2" run "#{$bin}gt readjoiner prefilter -maxlow 2 -lowqual 10 -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "grep 'number of reads in output readset = 2' #{last_stdout}" run "cp #{$testdata}/readjoiner/paired_reads_1N_2.p.fas '1:2:100'" encode_reads("1:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner encoder: quality filter (-maxlow -phred64)" Keywords "gt_readjoiner gt_readjoiner_prefilter reads2twobit" Test do run "cp #{$testdata}/readjoiner/paired_reads_1L2_ph64.fastq 1" run "cp #{$testdata}/readjoiner/paired_reads_2_ph64.fastq 2" run "#{$bin}gt readjoiner prefilter -maxlow 3 -phred64 -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "grep 'number of reads in output readset = 4' #{last_stdout}" run "cp #{$testdata}/readjoiner/paired_reads_1_2.fas '1:2:100'" encode_reads("1:2:100") compare_encseqs("reads", "reads_prefilter") run "#{$bin}gt readjoiner prefilter -maxlow 1 -phred64 -encodeonly "+ "-db 1:2:100 -readset reads_prefilter" run "grep 'number of reads in output readset = 2' #{last_stdout}" run "cp #{$testdata}/readjoiner/paired_reads_1N_2.p.fas '1:2:100'" encode_reads("1:2:100") compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner prefilter: correct encseq output (eqlen)" Keywords "gt_readjoiner gt_readjoiner_prefilter" Test do # first prepare contfree readset in fasta format run_prefilter("#{$testdata}/readjoiner/30x_800nt.fas", "-encseq false -fasta true -q true") contfree = "reads.pf.fas" # prepare encseq using prefilter run_prefilter(contfree) run "mv reads.esq reads_prefilter.esq" # prepare encseq using encseq encode encode_reads(contfree) compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner prefilter: multiple input files (eqlen)" Keywords "gt_readjoiner gt_readjoiner_prefilter" Test do run_prefilter("#{$testdata}/readjoiner/2x3nt_1.fas "+ "#{$testdata}/readjoiner/2x3nt_2.fas "+ "#{$testdata}/readjoiner/2x3nt_3.fas") end Name "gt readjoiner prefilter: correct encseq output (varlen)" Keywords "gt_readjoiner gt_readjoiner_prefilter" Test do run_prefilter("#{$testdata}/readjoiner/30x_long_varlen.fas", "-encseq false -fasta true -q true") contfree = "reads.pf.fas" run_prefilter(contfree) run "mv reads.esq reads_prefilter.esq" run "mv reads.ssp reads_prefilter.ssp" encode_reads(contfree) compare_encseqs("reads", "reads_prefilter") end Name "gt readjoiner: no crash when no spm found" Keywords "gt_readjoiner" Test do run_prefilter("#$testdata/readjoiner/tiny.fas") run_overlap(12) run "grep 'number of irreducible suffix-prefix matches = 0' #{last_stdout}" run_assembly run "grep 'no contigs' #{last_stdout}" end Name "gt readjoiner correct" Keywords "gt_readjoiner gt_readjoiner_correct" Test do run_correct("#{$testdata}/readjoiner/errors_1.fas", 12, 2) run "#{$bin}gt encseq decode reads" run "diff #{last_stdout} #{$testdata}/readjoiner/errors_1.corrected.fas" end Name "gt readjoiner overlap: eqlen; minlen > readlen" Keywords "gt_readjoiner gt_readjoiner_overlap" Test do run_prefilter("#$testdata/readjoiner/tiny.fas") run_test "#{$bin}gt readjoiner overlap -readset reads -l 17" end =begin singlestrand Name "gt readjoiner overlap: singlestrand vs mirrored mode" Keywords "gt_readjoiner gt_readjoiner_overlap" Test do run_prefilter("#$testdata/readjoiner/tiny.fas") run_overlap(4, "-singlestrand") run "#{spmtest} -test showlist -readset reads" spm = last_stdout run_test "diff #{spm} " + "#$testdata/readjoiner/tiny_singlestrand.spm", :retval => 0 run_overlap(4) run "#{spmtest} -test showlist -readset reads" spm = last_stdout run_test "diff #{spm} " + "#$testdata/readjoiner/tiny_mirrored.spm", :retval => 0 end =end def assert_empty(fn, desc) fncontent = IO.read(fn) fncontent = fncontent.split("\n") # tolerate this ruby warning: fncontent.reject! {|line| line =~ /Insecure world writable/} failtest(desc + " should be empty") unless fncontent.join == "" end def assert_not_empty(fn, desc) failtest(desc + " should not be empty") unless IO.read(fn) != "" end Name "gt readjoiner: verbosity levels (-q/default/-v)" Keywords "gt_readjoiner gt_readjoiner_prefilter "+ "gt_readjoiner_overlap gt_readjoiner_assembly" Test do # -- prefilter -- # # default mode run_prefilter("#$testdata/readjoiner/tiny.fas") assert_not_empty(last_stdout, "stdout") assert_empty(last_stderr, "stderr") # quiet mode run_prefilter("#$testdata/readjoiner/tiny.fas", "-q") assert_empty(last_stdout, "stdout") assert_empty(last_stderr, "stderr") # verbose mode run_prefilter("#$testdata/readjoiner/tiny.fas", "-v") assert_not_empty(last_stdout, "stdout") assert_empty(last_stderr, "stderr") # -- overlap -- # # default mode run_overlap(4) assert_not_empty(last_stdout, "stdout") assert_empty(last_stderr, "stderr") # quiet mode run_overlap(4, "-q") assert_empty(last_stdout, "stdout") assert_empty(last_stderr, "stderr") # verbose mode run_overlap(4, "-v") assert_not_empty(last_stdout, "stdout") assert_empty(last_stderr, "stderr") # -- assembly -- # # default mode run_assembly assert_not_empty(last_stdout, "stdout") assert_empty(last_stderr, "stderr") # quiet mode run_assembly("-q") assert_empty(last_stdout, "stdout") assert_empty(last_stderr, "stderr") # verbose mode run_assembly("-v") assert_not_empty(last_stdout, "stdout") assert_empty(last_stderr, "stderr") end Name "gt readjoiner: wildcards (Fasta)" Keywords "gt_readjoiner gt_readjoiner_prefilter" Test do run_prefilter("#$testdata/readjoiner/wildcard1.fas") grep last_stdout, 'low-quality reads = 1' grep last_stdout, 'number of reads in filtered readset = 1' run_prefilter("#$testdata/readjoiner/wildcard2.fas") grep last_stdout, 'low-quality reads = 1' grep last_stdout, 'number of reads in filtered readset = 1' run_prefilter("#$testdata/readjoiner/wildcards.fas") grep last_stdout, 'low-quality reads = 6' grep last_stdout, 'number of reads in filtered readset = 2' # wildcard1 / wildcard2 have a 8 chars match between read 0 and read 1; # the current version of readjoiner eliminates the wildcard-containing # sequences; update the test if this is changed end Name "gt readjoiner: wildcards (FastQ)" Keywords "gt_readjoiner gt_readjoiner_prefilter" Test do run_prefilter("#$testdata/readjoiner/wildcard1.fastq") grep last_stdout, 'low-quality reads = 1' grep last_stdout, 'number of reads in filtered readset = 1' run_prefilter("#$testdata/readjoiner/wildcard2.fastq") grep last_stdout, 'low-quality reads = 1' grep last_stdout, 'number of reads in filtered readset = 1' run_prefilter("#$testdata/readjoiner/wildcards.fastq") grep last_stdout, 'low-quality reads = 6' grep last_stdout, 'number of reads in filtered readset = 2' end Name "gt readjoiner overlap: self-match" Keywords "gt_readjoiner gt_readjoiner_overlap" Test do # direct run_prefilter("#{$testdata}/readjoiner/self_spm.fas") run_overlap(8) grep last_stdout, 'number of irreducible suffix-prefix matches = 1' # with reverse complement of self run_prefilter("#{$testdata}/readjoiner/with_rc.fas") run_overlap(8) grep last_stdout, 'number of irreducible suffix-prefix matches = 1' end # the next test compares direct construction with complete graph + trans.red. Name "gt readjoiner: transitive spm determination test - 1" Keywords "gt_readjoiner" Test do run_prefilter("#{$testdata}/readjoiner/transred_1.fas", "") run_overlap(4, "-singlestrand") run_assembly("-lengthcutoff 1 -depthcutoff 1") run_test "grep -f #{$testdata}/readjoiner/transred_1_targetseq.fas "+ " reads.contigs.fas" run_overlap(4, "-singlestrand -elimtrans false") run_assembly("-redtrans -lengthcutoff 1 -depthcutoff 1") run_test "grep -f #{$testdata}/readjoiner/transred_1_targetseq.fas "+ " reads.contigs.fas" end Name "gt readjoiner: transitive spm determination test - 2" Keywords "gt_readjoiner" Test do run_prefilter("#{$testdata}/readjoiner/transred_2.fas", "") run_overlap(4) run_assembly("-lengthcutoff 1 -depthcutoff 1") run_test "grep -f #{$testdata}/readjoiner/transred_1_targetseq.fas "+ " reads.contigs.fas" run_overlap(4, "-elimtrans false") run_assembly("-redtrans -lengthcutoff 1 -depthcutoff 1") run_test "grep -f #{$testdata}/readjoiner/transred_1_targetseq.fas "+ " reads.contigs.fas" end # currently the spm list obtained from transred_3 appears to be incorrect # (the readset is varlen, currently not completely supported) # the expected spm list from -l 10 -singlestrand is in transred_3.l10.ss.spm Name "gt readjoiner: transitive spm determination test - 3" Keywords "gt_readjoiner" Test do run_prefilter("#{$testdata}/readjoiner/test_1.fas") run_overlap(39) run_assembly run "mv reads.contigs.fas contigs" run_overlap(39, "-elimtrans false") run_assembly("-redtrans") run "diff reads.contigs.fas contigs" end Name "gt readjoiner: transitive spm determination test - 4" Keywords "gt_readjoiner" Test do run_prefilter("#{$testdata}/readjoiner/test_2.fas") run_overlap(20) run_assembly run "mv reads.contigs.fas contigs" run_overlap(20, "-elimtrans false") run_assembly("-redtrans") run "diff reads.contigs.fas contigs" end Name "gt readjoiner: transitive spm determination test - 5" Keywords "gt_readjoiner" Test do run_prefilter("#{$testdata}/readjoiner/test_3.fas") run_overlap(20) run_assembly run "mv reads.contigs.fas contigs" run_overlap(20, "-elimtrans false") run_assembly("-redtrans") run "diff reads.contigs.fas contigs" end Name "gt readjoiner: transitive spm determination test - 6" Keywords "gt_readjoiner" Test do # this describes the next test case: # # 0 ctgataagtcccaggacttcagaagagctgtgag...ggacttcagaagagctgtgag # 2 ggacttcagaagagctgtgag...ggacttcagaagagctgtgagggtatggggacgg # 1 cccaggacttcagaagagctgtgag...ggacttcagaagagctgtgagggtatgggg # |---A---|-B-|----------C----------|D|---------C----------|---E----|--F-| # 2 ggacttcagaagagctgtgagaccttggccaagtc.. # |---------C----------|-------D------.. # assembly: # read_0: ABCDC # read_1: BCDCE # read_2: CDCEF # # alternative assembly: # read_0: ABCDC # read_1: BCDCE # + # read_0: ABCDC # read_2: CDCEF # # ->2 # // ^ # 0 | only the longest of the two overlaps 0..2 is really transitive # \ | # ->1 # run_prefilter("#{$testdata}/readjoiner/trans_and_submax_ovl.fas") run_overlap(20, "-singlestrand") run_assembly run "mv reads.contigs.fas contigs" run_overlap(20, "-singlestrand -elimtrans false") run_assembly("-redtrans") run "diff reads.contigs.fas contigs" end Name "gt readjoiner: transitive spm determination test - 7" Keywords "gt_readjoiner" Test do run_prefilter("#{$testdata}/readjoiner/large_count.fas") run_overlap(4) run_assembly run "mv reads.contigs.fas contigs" run_overlap(4, "-elimtrans false") run_assembly("-redtrans") run "diff reads.contigs.fas contigs" end Name "gt readjoiner: transitive spm determination test - 8" Keywords "gt_readjoiner" Test do run_prefilter("#{$testdata}/readjoiner/large_wset.fas") run_overlap(4) run_assembly run "mv reads.contigs.fas contigs" run_overlap(4, "-elimtrans false") run_assembly("-redtrans") run "diff reads.contigs.fas contigs" end Name "gt readjoiner: fastq vs fasta, 70x100nt" Keywords "gt_readjoiner" Test do run_prefilter("#{$testdata}/readjoiner/70x_100nt.fas") run_overlap(30) run_assembly run_prefilter("#{$testdata}/readjoiner/70x_100nt.fastq") run_overlap(30) run_assembly end Name "gt readjoiner: fastq phred64, 70x161nt" Keywords "gt_readjoiner" Test do run_prefilter("#{$testdata}/readjoiner/70x_161nt.fas") run_overlap(30) run_assembly run_prefilter("#{$testdata}/readjoiner/70x_161nt_phred64.fastq", "-phred64") run_overlap(30) run_assembly end Name "gt readjoiner: test different read lengths" Keywords "gt_readjoiner" Test do run_prefilter("#{$testdata}/readjoiner/70x_161nt.fas") run_overlap(30) run_assembly end Name "gt readjoiner spmtest pw" Keywords "gt_readjoiner gt_readjoiner_spmtest" Test do encode_reads("#$testdata/readjoiner/pw.fas") run_test "#{spmtest} -test bruteforce -readset reads -l 3", :retval => 0 bf = last_stdout run_test "#{spmtest} -test kmp -readset reads -l 3", :retval => 0 kmp = last_stdout run "diff #{kmp} #{bf}" run "diff #{bf} #$testdata/readjoiner/pw-ex.spm" end # spmtest [true, false].each do |mirrored| %w{contained_eqlen contained_varlen 30x_800nt 70x_100nt}.each do |fasta| Name "gt readjoiner spmtest#{' singlestrand' if !mirrored}: #{fasta}" Keywords "gt_readjoiner gt_readjoiner_spmtest" Test do spmtest += " -singlestrand" if !mirrored encode_reads("#$testdata/readjoiner/#{fasta}.fas") run_test "#{spmtest} -test bruteforce -readset reads -l 32", :retval => 0 bf = last_stdout run_test "#{spmtest} -test kmp -readset reads -l 32", :retval => 0 kmp = last_stdout run "diff #{kmp} #{bf}" prepare_esa("reads", mirrored) if (!%w{70x_100nt}.include?(fasta)) run_test "#{spmtest} -test gusfield -readset reads -l 32", :retval => 0 run "sort -u #{last_stdout}" gf = last_stdout run "sort -u #{kmp}" kmp = last_stdout run "diff #{gf} #{kmp}" end if (!%w{contained_eqlen contained_varlen 30x_800nt}.include?(fasta)) rdjO += " -singlestrand" if !mirrored run_test "#{rdjO} -readset reads -l 32 -showspm -elimtrans false -q", :retval => 0 run "sort -u #{last_stdout}" our = last_stdout run "sort -u #{kmp}" kmp = last_stdout run "diff #{our} #{kmp}" end end end end # cnttest [true, false].each do |mirrored| %w{contained_eqlen contained_varlen}.each do |fasta| Name "gt readjoiner cnttest#{' singlestrand' if !mirrored}: #{fasta}" Keywords "gt_readjoiner gt_readjoiner_cnttest" Test do cnttest += " -singlestrand" if !mirrored encode_reads("#$testdata/readjoiner/#{fasta}.fas") run_test "#{cnttest} -test bruteforce -readset reads", :retval => 0 bf = last_stdout run_test "#{cnttest} -test kmp -readset reads", :retval => 0 kmp = last_stdout run "diff #{kmp} #{bf}" prepare_esa("reads", mirrored) run_test "#{cnttest} -test esa -readset reads", :retval => 0 esa = last_stdout run "diff #{esa} #{$testdata}readjoiner/#{fasta}#{'_ss' if !mirrored}.cnt" run "sort -u #{esa}" esas = last_stdout run "sort -u #{kmp}" kmps = last_stdout run "diff #{esas} #{kmps}" end end end def assert_nofspm(irreducible, transitive = nil) grep last_stdout, "number of irreducible suffix-prefix matches = #{irreducible}" if !transitive.nil? grep last_stdout, "number of transitive suffix-prefix matches = #{transitive}" end end [1, 2].each do |varlen_test| Name "gt encseq2spm: different minlen values - test #{varlen_test}" Keywords "gt_readjoiner gt_encseq2spm" Test do encode_reads("#$testdata/readjoiner/varlen_#{varlen_test}.fas") [10, 13, 15, 33, 65, 84].each do |minlen| run "#$bin/gt encseq2spm -l #{minlen} -ii reads" end end end Name "gt encseq2spm: different minlen values - test 3" Keywords "gt_readjoiner gt_encseq2spm" Test do run_prefilter("#$testdata/readjoiner/minlen_test.fas") run "#$bin/gt encseq2spm -l 14 -ii reads" run "#$bin/gt encseq2spm -l 15 -ii reads" end Name "gt readjoiner overlap: different min match lengths" Keywords "gt_readjoiner gt_readjoiner_overlap" Test do run_prefilter("#$testdata/readjoiner/minlen_test.fas") 2.upto(40) do |minlen| run_overlap(minlen) assert_nofspm(40 - minlen) end end def unpack_array_file(i_filename, o_filename, low_filter, sizeofint, unpackstr) i_file = File.open(i_filename) o_file = File.open(o_filename, "w") loop do v = i_file.read(sizeofint) break if v.nil? value = v.unpack(unpackstr)[0] if value >= low_filter o_file.puts value end end i_file.close o_file.close end [true, false].each do |singlestrand| %w{70x_100nt 30x_800nt}.each do |dataset| Name "gt readjoiner radixsort_str test "+ "(#{dataset}, #{singlestrand ? 'single strand' : 'mirrored'})" Keywords "gt_readjoiner radixsort_str" Test do db = "#$testdata/readjoiner/#{dataset}.fas" run_prefilter(db, "-testrs -encseq no -q"+ "#{' -singlestrand' if singlestrand}") radixsort_results = last_stdout run "#{$bin}gt suffixerator -suf -db #{db}"+ "#{' -mirrored' unless singlestrand} -indexname i" is64bit = Kernel.system("#{$bin}gt -64bit") sizeofint = is64bit ? 8 : 4 unpackstr = is64bit ? "Q" : "L" unpack_array_file("i.suf", "i.suf.txt", 0, sizeofint, unpackstr) run "diff i.suf.txt #{radixsort_results}" end end end if $gttestdata # compare results with precalculated known results [700, 7000, 70000].each do |nofreads| readset="#{$gttestdata}/readjoiner/#{nofreads}x_100nt_reads" if File.exists?(readset) Name "gt readjoiner: #{nofreads}x100" Keywords "gt_readjoiner" Test do readset="#{$gttestdata}/readjoiner/#{nofreads}x_100nt_reads" run_prefilter(readset, "-cnt") run "#{cnttest} -test showlist -readset reads" run "diff #{last_stdout} #{readset}.cnt" run_overlap(45) run "#{spmtest} -test showlist -readset reads.0" run "sort #{last_stdout}" spm = last_stdout run "sort #{readset}.l45.spm" ref = last_stdout run "diff #{spm} #{ref}" run_assembly run "diff reads.contigs.fas #{readset}.l45.contigs" end end [161, 200, 300, 400, 600, 800, 1000].each do |len| reads = "#{$gttestdata}/readjoiner/#{nofreads}x_#{len}nt_reads" if File.exists?(reads) Name "gt readjoiner: #{nofreads}x#{len}" Keywords "gt_readjoiner" Test do run_prefilter(reads) run_overlap(30) run_assembly end end end end Name "gt readjoiner: multiple input files (eqlen)" Keywords "gt_readjoiner" Test do readset = "#{$gttestdata}/readjoiner/7000x_100nt_reads" run "head -n 3000 #{readset}" reads1 = last_stdout run "head -n 7000 #{readset} | tail -n 4000" reads2 = last_stdout run "head -n 13000 #{readset} | tail -n 6000" reads3 = last_stdout run "tail -n 1000 #{readset}" reads4 = last_stdout run_prefilter("#{reads1} #{reads2} #{reads3} #{reads4}") run_overlap(45) run "#{spmtest} -test showlist -readset reads.0" run "sort #{last_stdout}" spm = last_stdout run "sort #{readset}.l45.spm" ref = last_stdout run "diff #{spm} #{ref}" end end genometools-1.5.1/testsuite/gt_readreads_include.rb000066400000000000000000000046671211610345200225660ustar00rootroot00000000000000Name "gt readreads (success)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads -showseq #{$testdata}test1.fastq" end Name "gt readreads colorspace (success)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads -colorspace -showseq "+ "#{$testdata}solid_color_reads.fastq" end Name "gt readreads (non-FASTQ file)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads #{$testdata}eden.gff3", \ :retval => 1 grep(last_stderr, /expected/) end Name "gt readreads (invalid block start)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads #{$testdata}test2_wrong_begin.fastq", \ :retval => 1 grep(last_stderr, /expected/) end Name "gt readreads (different seqnames)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads " + \ "#{$testdata}test3_different_seqnames.fastq", \ :retval => 1 grep(last_stderr, "sequence description 'HWI-EAS306_9_FC305MP_6_1_1331" + \ "_1843' is not equal to qualities description 'HWI-EAS3" +\ "06_9_FC305MP_6_1_1331' in line") end Name "gt readreads (different seqlengths 1)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads " + \ "#{$testdata}test4_different_seqlengths.fastq", \ :retval => 1 grep(last_stderr, "lengths of character sequence and qualities sequence " + \ "differ") end Name "gt readreads (different seqlengths 2)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads " + \ "#{$testdata}test9_uneven_length.fastq", \ :retval => 1 grep(last_stderr, "qualities string of sequence length 33 is not ended " + \ "by newline") end Name "gt readreads (tricky)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads " + \ "#{$testdata}test5_tricky.fastq" end Name "gt readreads (empty sequence)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads #{$testdata}test7_empty_seq.fastq", \ :retval => 1 grep(last_stderr, /empty sequence/) end Name "gt readreads (premature end)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads #{$testdata}test6_premature_end.fastq", \ :retval => 1 grep(last_stderr, /premature end/) end Name "gt readreads (multiline)" Keywords "gt_readreads" Test do run_test "#{$bin}gt dev readreads #{$testdata}test10_multiline.fastq" end genometools-1.5.1/testsuite/gt_regioncov_include.rb000066400000000000000000000007111211610345200226110ustar00rootroot00000000000000Name "gt regioncov test 1 (no options)" Keywords "gt_regioncov" Test do run "#{$bin}gt dev regioncov #{$testdata}encode_known_genes_Mar07.gff3" run "diff #{last_stdout} #{$testdata}gt_regioncov_test_1.out" end Name "gt regioncov test 2 (-maxfeaturedist)" Keywords "gt_regioncov" Test do run "#{$bin}gt dev regioncov -maxfeaturedist 220000 #{$testdata}encode_known_genes_Mar07.gff3" run "diff #{last_stdout} #{$testdata}gt_regioncov_test_2.out" end genometools-1.5.1/testsuite/gt_ruby_include.rb000066400000000000000000000120321211610345200215760ustar00rootroot00000000000000rv = RUBY_VERSION.match(/^(\d+\.\d+)/) if (!rv.nil? && rv[1].to_f < 1.9) then Name "gtruby: genome_stream bindings (output stream)" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/gff3.rb #{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "diff #{last_stdout} #{$testdata}gff3_file_1_short_sorted.txt" end Name "gtruby: genome_visitor bindings (output stream)" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/genome_visitor.rb #{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "diff #{last_stdout} #{$testdata}gff3_file_1_short_sorted.txt" end Name "gtruby: feature_index and feature_stream bindings" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/feature_stuff.rb " + "#{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "grep -v '^##sequence-region' #{$testdata}gff3_file_1_short_sorted.txt | diff #{last_stdout} -" end if not $arguments["nocairo"] then Name "gtruby: AnnotationSketch bindings (valid gff3 file)" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/sketch.rb test.png " + "#{$testdata}gff3_file_1_short.txt" end Name "gtruby: AnnotationSketch bindings (corrupt gff3 file)" Keywords "gt_ruby" Test do run_ruby("#{$testdata}gtruby/sketch.rb test.png #{$testdata}corrupt.gff3", :retval => 1) grep last_stderr, "GenomeTools error" end Name "gtruby: AnnotationSketch bindings (nonexistent gff3 file)" Keywords "gt_ruby" Test do run_ruby("#{$testdata}gtruby/sketch.rb test.png " + "#{$testdata}nonexistent_file", :retval => 1) grep last_stderr, "GenomeTools error" end Name "gtruby: AnnotationSketch bindings (PNG stream)" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/sketch_stream.rb test.png " + "#{$testdata}gff3_file_1_short.txt" end Name "gtruby: AnnotationSketch bindings (TrackSelectorFunc)" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/block_stuff.rb " + "#{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.blocks" end Name "gtruby: AnnotationSketch bindings (style)" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/style.rb #{$cur}/gtdata/sketch/default.style" end Name "gtruby: AnnotationSketch bindings (error reporting)" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/sketch-failures.rb " + "#{$testdata}gff3_file_1_short.txt" end Name "gtruby: AnnotationSketch bindings (Graphics)" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/graphics_stuff.rb " + "#{$testdata}graphics_curve_test_coords.txt " + "out.svg" # will fail e.g. if cairo toy font setup is different from test machine # disabled for now # run "diff out.svg #{$testdata}graphics_test.out" end Name "gtruby: AnnotationSketch bindings (FeatureNode(Iterator))" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/feature_node.rb" end Name "gtruby: show_recmaps" Keywords "gt_ruby showrecmaps" Test do run_ruby "#{$testdata}gtruby/show_recmaps.rb " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.hotspots" end end Name "gtruby: Encseq bindings" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/encseq.rb" end Name "gtruby: show_seqids" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/show_seqids.rb #{$testdata}encode_known_genes_Mar07.gff3" run "diff #{last_stdout} #{$testdata}encode_known_genes_Mar07.seqids" end Name "gtruby: used_types" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/used_types.rb " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.types" end Name "gtruby: {Comment,Sequence,Region,Meta,EOF}Node classes" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/node_types.rb" end Name "gtruby: CustomStream/CustomVisitor basic tests" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/custom_stuff.rb #{$testdata}eden.gff3" run "diff #{last_stdout} #{$testdata}custom_streams_ref.txt" end Name "gtruby: CustomStream/CustomVisitor all node types" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/custom_visitor.rb" end Name "gtruby: Range class" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/range.rb" end Name "gtruby: TypeChecker class" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/type_checker.rb #{$cur}/gtdata/obo_files/so.obo" end Name "gtruby: TypeChecker class (failure)" Keywords "gt_ruby" Test do run_ruby "#{$testdata}gtruby/type_checker.rb #{$gtdata}/obo_files/so", :retval => 1 end end genometools-1.5.1/testsuite/gt_sambam_include.rb000066400000000000000000000026441211610345200220650ustar00rootroot00000000000000Name "gt dev sambam read_sam" Keywords "gt_sambam read_sambam sam" Test do run_test "#{$bin}gt dev sambam -sam " + "-idxfile #{$testdata}/example_1.fa.fai " + "#{$testdata}/example_1.sam.gz" run_test "diff #{$testdata}/example_1.sam.extract " + "#{last_stdout}" end Name "gt dev sambam read_sam fail without header" Keywords "gt_sambam read_sambam sam" Test do run_test "#{$bin}gt dev sambam -sam " + "#{$testdata}/example_1.sam.gz", :retval => 1 end Name "gt dev sambam read bam" Keywords "gt_sambam read_sambam bam" Test do run_test "#{$bin}gt dev sambam " + "#{$testdata}/example_1.bam" run_test "diff #{$testdata}/example_1.sam.extract " + "#{last_stdout}" end Name "gt dev sambam read sam lines" Keywords "gt_sambam read_sambam sam" Test do (50..200).step(50) do |i| run_test "#{$bin}gt dev sambam -sam -lines #{i} " + "-idxfile #{$testdata}/example_1.fa.fai " + "#{$testdata}/example_1.sam.gz" run_test "head -n #{i} #{$testdata}/example_1.sam.extract | " + "diff #{last_stdout} -" end end Name "gt dev sambam read bam lines" Keywords "gt_sambam read_sambam bam" Test do (50..200).step(50) do |i| run_test "#{$bin}gt dev sambam -lines #{i} " + "#{$testdata}/example_1.bam" run_test "head -n #{i} #{$testdata}/example_1.sam.extract | " + "diff #{last_stdout} -" end end genometools-1.5.1/testsuite/gt_script_filter_include.rb000066400000000000000000000016251211610345200234740ustar00rootroot00000000000000SCRIPT_FILTER_FIELDS = ["name", "author", "version", "email", "short_description", "description"] Name "gt scriptfilter metadata" Keywords "gt_scriptfilter" Test do run "#{$bin}gt scriptfilter -scriptname false " + \ " #{$testdata}/gtscripts/filter_metadata_test_all_strings.lua" run_test "diff #{$testdata}/script_filter_output.txt #{last_stdout}" end ["", "-oneline"].each do |par| Name "gt scriptfilter metadata as functions #{par}" Keywords "gt_scriptfilter" Test do run "#{$bin}gt scriptfilter -scriptname false #{par} " + \ " #{$testdata}/gtscripts/filter_metadata_test_all_strings.lua " + \ " > strings.txt" SCRIPT_FILTER_FIELDS.each do |field| run_test "#{$bin}gt scriptfilter -scriptname false #{par} " + \ "#{$testdata}/gtscripts/filter_metadata_test_#{field}_function.lua" run_test "diff strings.txt #{last_stdout}" end end end genometools-1.5.1/testsuite/gt_scripts_include.rb000066400000000000000000000125261211610345200223140ustar00rootroot00000000000000Name "arg passing test 1" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/arg.lua" grep(last_stdout, /^arg\[0\]=.*gt.*arg\.lua/) end Name "arg passing test 2" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/arg.lua foo" grep(last_stdout, /^arg\[0\]=.*gt.*arg\.lua/) grep(last_stdout, /^arg\[1\]=foo$/) end Name "bittab bindings" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/bittab.lua" end 1.upto(4) do |i| Name "csa_stream bindings #{i}" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/csa_stream.lua " + "#{$testdata}gt_csa_prob_#{i}.in" run "diff #{last_stdout} #{$testdata}gt_csa_prob_#{i}.out" end end 1.upto(14) do |i| Name "cds_stream bindings #{i}" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/cds_stream.lua " + "#{$testdata}gt_cds_test_#{i}.fas " + "#{$testdata}gt_cds_test_#{i}.in" run "sed 's/gtscript/gt cds/' #{last_stdout}" run "diff #{last_stdout} #{$testdata}gt_cds_test_#{i}.out" end end Name "genome_node bindings" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/genome_node.lua" end Name "genome_stream bindings" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/genome_stream.lua #{$testdata}" end Name "genome_stream bindings (output stream)" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/gff3.lua #{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "diff #{last_stdout} #{$testdata}gff3_file_1_short_sorted.txt" end Name "genome_visitor bindings" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/genome_visitor.lua #{$testdata}gff3_file_1_short.txt" run "env LC_ALL=C sort #{last_stdout}" run "diff #{last_stdout} #{$testdata}gff3_file_1_short_sorted.txt" end Name "range bindings" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/range.lua" end Name "memleak.lua" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/memleak.lua #{$testdata}standard_gene_as_tree.gff3" end Name "scorematrix2c" Keywords "gt_scripts scorematrix" Test do run_test "#{$bin}gt #{$testdata}gtscripts/scorematrix2c.lua #{$testdata}BLOSUM62" run "diff #{last_stdout} #{$testdata}blosum62.c" end Name "scorematrix2stdout" Keywords "gt_scripts scorematrix" Test do run_test "#{$bin}gt #{$testdata}gtscripts/scorematrix2stdout.lua " + "#{$testdata}BLOSUM62.gth" run "diff #{last_stdout} #{$testdata}BLOSUM62.out" end Name "require 'gtlua'" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/require_gtlua.lua" end Name "LPeg library" Keywords "gt_scripts lpeg" Test do run "cp #{$cur}/src/external/lpeg-0.10.2/test.lua ." run "cp #{$cur}/src/external/lpeg-0.10.2/re.lua ." run_test "#{$bin}gt test.lua" end Name "MD5 library" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$cur}/src/external/md5-1.1.2/tests/test.lua" end Name "gtdoc" Keywords "gt_scripts gtdoc" Test do run_test "#{$bin}gt #{$testdata}../gtscripts/gtdoc.lua #{$cur}" end Name "gtdoc -v" Keywords "gt_scripts gtdoc" Test do run_test "#{$bin}gt #{$testdata}../gtscripts/gtdoc.lua -v #{$cur}" end Name "gtdoc -html" Keywords "gt_scripts gtdoc" Test do run_test "#{$bin}gt #{$testdata}../gtscripts/gtdoc.lua -html #{$cur}" end Name "gtdoc -html -v" Keywords "gt_scripts gtdoc" Test do run_test "#{$bin}gt #{$testdata}../gtscripts/gtdoc.lua -html -v #{$cur}" end Name "feature_index and feature_stream bindings" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/feature_stuff.lua #{$testdata}" run "env LC_ALL=C sort #{last_stdout}" run "grep -v '^##sequence-region' #{$testdata}gff3_file_1_short_sorted.txt | diff #{last_stdout} -" end if not $arguments["nocairo"] then Name "AnnotationSketch (general bindings)" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/sketch.lua test.png " + "#{$testdata}gff3_file_1_short.txt" end Name "AnnotationSketch (recmaps)" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}gtscripts/recmap.lua #{$testdata}gff3_file_1_short.txt" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.recmaps" end Name "AnnotationSketch (invalid ImageInfo object)" Keywords "gt_scripts" Test do run_test("#{$bin}gt #{$testdata}gtscripts/ii_fail.lua #{$testdata}gff3_file_1_short.txt", :retval => 1) end Name "show_seqids" Keywords "gt_scripts" Test do run_test("#{$bin}gt #{$testdata}gtscripts/show_seqids.lua #{$testdata}encode_known_genes_Mar07.gff3", :maxtime => 100) run "diff #{last_stdout} #{$testdata}encode_known_genes_Mar07.seqids" end Name "evalviz.lua test 1" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}../gtscripts/evalviz.lua png_files #{$testdata}gt_eval_test_1.in #{$testdata}gt_eval_test_1.in" run "grep -v seqid #{last_stdout}" run "diff #{last_stdout} #{$testdata}gt_eval_test_1.out" end =begin XXX: takes too long Name "evalviz.lua test 2" Keywords "gt_scripts" Test do run_test "#{$bin}gt #{$testdata}../gtscripts/evalviz.lua png_files #{$testdata}gt_evalviz_test.reality #{$testdata}gt_evalviz_test.prediction" run "diff #{last_stdout} #{$testdata}gt_evalviz_test.out" end =end end genometools-1.5.1/testsuite/gt_select_include.rb000066400000000000000000000300121211610345200220720ustar00rootroot00000000000000Name "gt select test (no filter)" Keywords "gt_select" Test do run_test "#{$bin}gt select #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-seqid ctg123)" Keywords "gt_select" Test do run_test "#{$bin}gt select -seqid ctg123 #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-seqid undef)" Keywords "gt_select" Test do run_test "#{$bin}gt select -seqid undef #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}header.gff3" end Name "gt select test (-source .)" Keywords "gt_select" Test do run_test "#{$bin}gt select -source . #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-source undef)" Keywords "gt_select" Test do run_test "#{$bin}gt select -source undef #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.header" end Name "gt select test (-maxgenelength)" Keywords "gt_select" Test do run_test "#{$bin}gt select -maxgenelength 8001 #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-maxgenelength)" Keywords "gt_select" Test do run_test "#{$bin}gt select -maxgenelength 8000 #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test.out" end Name "gt select test (-mingenescore)" Keywords "gt_select" Test do run_test "#{$bin}gt select -mingenescore .5 #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-mingenescore)" Keywords "gt_select" Test do run_test "#{$bin}gt select -mingenescore .6 #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test.out" end Name "gt select test (-maxgenescore)" Keywords "gt_select" Test do run_test "#{$bin}gt select -maxgenescore .5 #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-maxgenescore)" Keywords "gt_select" Test do run_test "#{$bin}gt select -maxgenescore .4 #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test.out" end Name "gt select test (-maxgenenum)" Keywords "gt_select" Test do run_test "#{$bin}gt select -maxgenenum 1 #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-maxgenenum)" Keywords "gt_select" Test do run_test "#{$bin}gt select -maxgenenum 0 #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test.out" end Name "gt select test (-maxgenenum)" Keywords "gt_select" Test do run_test "#{$bin}gt select -maxgenenum 0 #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test.out" end Name "gt select test (-strand)" Keywords "gt_select" Test do run_test "#{$bin}gt select -strand + #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-strand)" Keywords "gt_select" Test do run_test "#{$bin}gt select -strand - #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test.out" end Name "gt select test (-strand)" Keywords "gt_select" Test do run_test("#{$bin}gt select -strand foo #{$testdata}standard_gene_as_tree.gff3", :retval => 1) grep last_stderr, /must be one of/ end Name "gt select test (-overlap)" Keywords "gt_select" Test do run_test "#{$bin}gt select -overlap 2000 3000 " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-overlap)" Keywords "gt_select" Test do run_test "#{$bin}gt select -overlap 9001 10000 " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test.out" end Name "gt select test (-minaveragessp)" Keywords "gt_select" Test do run_test "#{$bin}gt select -minaveragessp 0.5 " + "#{$testdata}splice_site_prob.gff3" run "diff #{last_stdout} #{$testdata}splice_site_prob.out" end Name "gt select test (-minaveragessp)" Keywords "gt_select" Test do run_test "#{$bin}gt select -minaveragessp 0.35 " + "#{$testdata}splice_site_prob.gff3" run "diff #{last_stdout} #{$testdata}splice_site_prob.gff3" end Name "gt select test (-hascds)" Keywords "gt_select" Test do run_test("#{$bin}gt select -hascds " + "#{$testdata}encode_known_genes_Mar07.gff3 | " + "#{$memcheck} #{$bin}gt stat", :maxtime => 120) run "diff #{last_stdout} #{$testdata}gt_select_encode.out" end Name "gt select test (-contain)" Keywords "gt_select contain" Test do run_test "#{$bin}gt select -contain 1000 9000 " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test_contain.1000-9000" end Name "gt select test (-contain)" Keywords "gt_select contain" Test do run_test "#{$bin}gt select -contain 1001 9000 " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test_contain.1001-9000" end Name "gt select test (-contain)" Keywords "gt_select contain" Test do run_test "#{$bin}gt select -contain 1000 8999 " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test_contain.1000-8999" end Name "gt select test (-contain)" Keywords "gt_select contain" Test do run_test "#{$bin}gt select -contain 1500000 1600000 " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}header.gff3" end Name "gt select test (-targetstrand)" Keywords "gt_select targetstrand" Test do run_test "#{$bin}gt select -targetstrand - #{$testdata}U89959_sas.gff3" run "diff #{last_stdout} #{$testdata}U89959_sas.minus_targets" end Name "gt select test (-targetstrand)" Keywords "gt_select targetstrand" Test do run_test "#{$bin}gt select -targetstrand + " + "#{$testdata}target_attribute_without_strand.gff3" run "diff #{last_stdout} #{$testdata}target_attribute_without_strand.gff3" end Name "gt select test (-targetbest, simple)" Keywords "gt_select targetbest" Test do run_test "#{$bin}gt select -targetbest " + "#{$testdata}filter_targetbest_simple_test.gff3" run "diff #{last_stdout} #{$testdata}filter_targetbest_simple_test.out" end Name "gt select test (-targetbest, complex)" Keywords "gt_select targetbest" Test do run_test "#{$bin}gt select -targetbest " + "#{$testdata}filter_targetbest_complex_test.gff3" run "diff #{last_stdout} #{$testdata}filter_targetbest_complex_test.out" end Name "gt select test (-targetbest, corrupt file)" Keywords "gt_select targetbest" Test do run_test("#{$bin}gt select -targetbest #{$testdata}corrupt_large.gff3", :retval => 1) grep last_stderr, "not a valid character" end Name "gt select test (-targetbest, multiple targets)" Keywords "gt_select targetbest" Test do run_test "#{$bin}gt select -targetbest " + "#{$testdata}filter_targetbest_multiple_test.gff3" run "diff #{last_stdout} " + "#{$testdata}filter_targetbest_multiple_test.gff3" end Name "gt select test (-rule_files, one file, node type in gff3)" Keywords "gt_select" Test do run_test "#{$bin}gt select -rule_files " + "#{$testdata}gtscripts/filter_test_nodetype.lua -- " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-rule_files, one file, node type not in gff3)" Keywords "gt_select" Test do run_test "#{$bin}gt select -rule_files " + "#{$testdata}gtscripts/filter_test_wrong_nodetype.lua -- " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test.out" end Name "gt select test (-rule_files, two files, logic = AND)" Keywords "gt_select" Test do run_test "#{$bin}gt select -rule_files " + "#{$testdata}gtscripts/filter_test_nodetype.lua " + "#{$testdata}gtscripts/filter_test_wrong_nodetype.lua -- " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_select_test.out" end Name "gt select test (-rule_files, two files, logic = OR)" Keywords "gt_select" Test do run_test "#{$bin}gt select -rule_logic OR -rule_files " + "#{$testdata}gtscripts/filter_test_nodetype.lua " + "#{$testdata}gtscripts/filter_test_wrong_nodetype.lua -- " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.gff3" end Name "gt select test (-rule_files, one file, wrong function name)" Keywords "gt_select" Test do run_test "#{$bin}gt select -rule_files " + "#{$testdata}gtscripts/filter_test_wrong_function_name.lua -- " + "#{$testdata}standard_gene_as_tree.gff3", :retval => 1 grep last_stderr, /error/ end Name "gt select test (reading_frame_length % 3 != 0)" Keywords "gt_select" Test do run_test "#{$bin}gt select -rule_files " + "#{$testdata}gtscripts/filter_test_orflength.lua -- " + "#{$testdata}filter_luafilter_test.gff3" run "diff #{last_stdout} #{$testdata}filter_luafilter_filtered_orfs.gff3" end Name "gt select test (check for LTR_retrotransposon and LTRs)" Keywords "gt_select" Test do run_test "#{$bin}gt select -rule_files " + "#{$testdata}gtscripts/filter_test_LTR.lua -- " + "#{$testdata}filter_luafilter_test.gff3" run "diff #{last_stdout} #{$testdata}filter_luafilter_filtered_LTR.gff3" end Name "gt select test (min two orfs on forward strand)" Keywords "gt_select" Test do run_test "#{$bin}gt select -rule_files " + "#{$testdata}gtscripts/filter_test_orf_pos_strand.lua -- " + "#{$testdata}filter_luafilter_test.gff3" run "diff #{last_stdout} #{$testdata}filter_luafilter_filtered_orf_pos.gff3" end Name "gt select test (orfs without frame attribute)" Keywords "gt_select" Test do run_test "#{$bin}gt select -rule_files " + "#{$testdata}gtscripts/filter_test_frame_attribute.lua -- " + "#{$testdata}filter_luafilter_test_no_frame_attribute.gff3" run "diff #{last_stdout} #{$testdata}filter_luafilter_filtered_orf_frame.gff3" end Name "gt select test (dropped to file (1))" Keywords "gt_select" Test do run_test "#{$bin}gt select -dropped_file nh_file01.gff3 -rule_files " + "#{$testdata}gtscripts/filter_test_orflength.lua -- " + "#{$testdata}filter_luafilter_test.gff3" run "diff nh_file01.gff3 #{$testdata}filter_nh_file01.gff3" end Name "gt select test (dropped to file (2))" Keywords "gt_select" Test do run_test "#{$bin}gt select -dropped_file nh_file02.gff3 -rule_files " + "#{$testdata}gtscripts/filter_test_LTR.lua -- " + "#{$testdata}filter_luafilter_test.gff3" run "diff nh_file02.gff3 #{$testdata}filter_nh_file02.gff3" end Name "gt select test (dropped to file (3))" Keywords "gt_select" Test do run_test "#{$bin}gt select -dropped_file nh_file03.gff3 -rule_files " + "#{$testdata}gtscripts/filter_test_orf_pos_strand.lua -- " + "#{$testdata}filter_luafilter_test.gff3" run "diff nh_file03.gff3 #{$testdata}filter_nh_file03.gff3" end Name "gt select test (dropped to file (4))" Keywords "gt_select" Test do run_test "#{$bin}gt select -dropped_file nh_file04.gff3 -rule_files " + "#{$testdata}gtscripts/filter_test_frame_attribute.lua -- " + "#{$testdata}filter_luafilter_test_no_frame_attribute.gff3" run "diff nh_file04.gff3 #{$testdata}filter_nh_file04.gff3" end Name "gt select test (lua syntax fail)" Keywords "gt_select" Test do run_test "#{$bin}gt select -rule_files " + "#{$testdata}gtscripts/filter_test_syntax_fail.lua -- " + "#{$testdata}filter_luafilter_test_no_frame_attribute.gff3", :retval => 1 grep last_stderr, /error/ end genometools-1.5.1/testsuite/gt_seq_include.rb000066400000000000000000000122361211610345200214130ustar00rootroot00000000000000Name "gt seq nonexistent file" Keywords "gt_seq" Test do run_test("#{$bin}gt seq #{$testdata}nonexistent_file", :retval => 1) end 1.upto(7) do |i| Name "gt seq fail #{i}" Keywords "gt_seq" Test do run_test("#{$bin}gt seq -recreate #{$testdata}gt_bioseq_fail_#{i}.fas", :retval => 1) end end 1.upto(7) do |i| Name "gt seq fail #{i} (stdin)" Keywords "gt_seq" Test do run_test("cat #{$testdata}gt_bioseq_fail_#{i}.fas | #{$bin}gt seq -recreate -", :retval => 1) end end Name "gt seq (DOS line breaks)" Keywords "gt_seq" Test do run "#{$scriptsdir}dos2unix #{$testdata}tRNA.dos.fas > ./tRNA.unix.fas" run_test "#{$bin}gt seq -showfasta -width 60 #{$testdata}tRNA.dos.fas" run "diff #{last_stdout} tRNA.unix.fas" run "diff #{last_stdout} #{$testdata}tRNA.dos.fas", :retval => 1 end Name "gt seq test 1" Keywords "gt_seq" Test do run "cp #{$testdata}gt_bioseq_succ_1.fas ./gt_bioseq_succ_1.fas" run_test "#{$bin}gt seq -recreate gt_bioseq_succ_1.fas" if not File.exists?("gt_bioseq_succ_1.fas.esq") then raise TestFailed, "file \"gt_bioseq_succ_1.fas.esq\" does not exist" end if not File.exists?("gt_bioseq_succ_1.fas.esq") then raise TestFailed, "file \"gt_bioseq_succ_1.fas.esq\" does not exist" end old_esq_mtime = File.mtime("gt_bioseq_succ_1.fas.esq") old_des_mtime = File.mtime("gt_bioseq_succ_1.fas.des") sleep(1) run_test "#{$bin}gt seq gt_bioseq_succ_1.fas" new_esq_mtime = File.mtime("gt_bioseq_succ_1.fas.esq") new_des_mtime = File.mtime("gt_bioseq_succ_1.fas.des") # make sure the index file have not been recreated if (old_esq_mtime != new_esq_mtime) or (old_des_mtime != new_des_mtime) then raise TestFailed, "index files have been recreated" end end Name "gt seq test 1 (stdin)" Keywords "gt_seq" Test do run "cat #{$testdata}gt_bioseq_succ_1.fas | #{$memcheck} #{$bin}gt seq -" end Name "gt seq test 2" Keywords "gt_seq" Test do run "cp #{$testdata}gt_bioseq_succ_2.fas ./gt_bioseq_succ_2.fas" run_test "#{$bin}gt seq -recreate gt_bioseq_succ_2.fas" if not File.exists?("gt_bioseq_succ_2.fas.esq") then raise TestFailed, "file \"gt_bioseq_succ_2.fas.esq\" does not exist" end if not File.exists?("gt_bioseq_succ_2.fas.des") then raise TestFailed, "file \"gt_bioseq_succ_2.fas.des\" does not exist" end old_esq_mtime = File.mtime("gt_bioseq_succ_2.fas.esq") old_des_mtime = File.mtime("gt_bioseq_succ_2.fas.des") sleep(1) run_test "#{$bin}gt seq gt_bioseq_succ_2.fas" new_esq_mtime = File.mtime("gt_bioseq_succ_2.fas.esq") new_des_mtime = File.mtime("gt_bioseq_succ_2.fas.des") # make sure the index file have not been recreated if (old_esq_mtime != new_esq_mtime) or (old_des_mtime != new_des_mtime) then raise TestFailed, "index files have been recreated" end end Name "gt seq test 2 (stdin)" Keywords "gt_seq" Test do run "cat #{$testdata}gt_bioseq_succ_2.fas | #{$memcheck} #{$bin}gt seq -" end Name "gt seq test 3" Keywords "gt_seq" Test do run_test "#{$bin}gt seq -recreate -showfasta -width 70 #{$testdata}gt_bioseq_succ_3.fas" run "diff #{last_stdout} #{$testdata}gt_bioseq_succ_3.fas" end Name "gt seq test 3 (stdin)" Keywords "gt_seq" Test do run "cat #{$testdata}gt_bioseq_succ_3.fas | #{$memcheck} #{$bin}gt seq -recreate -showfasta -width 70 -" run "diff #{last_stdout} #{$testdata}gt_bioseq_succ_3.fas" end 1.upto(3) do |i| Name "gt seq test 3 out #{i}" Keywords "gt_seq" Test do run_test "#{$bin}gt seq -showseqnum #{i} -width 70 #{$testdata}gt_bioseq_succ_3.fas" run "diff #{last_stdout} #{$testdata}gt_bioseq_succ_3.out#{i}" end end 1.upto(3) do |i| Name "gt seq test 3 out #{i} (stdin)" Keywords "gt_seq" Test do run "cat #{$testdata}gt_bioseq_succ_3.fas | #{$memcheck} #{$bin}gt seq -showseqnum #{i} -width 70 -" run "diff #{last_stdout} #{$testdata}gt_bioseq_succ_3.out#{i}" end end Name "gt seq test 3 out 4 fail" Keywords "gt_seq" Test do run_test("#{$bin}gt seq -showseqnum 4 #{$testdata}gt_bioseq_succ_3.fas", :retval => 1) end Name "gt seq test 3 stat" Keywords "gt_seq" Test do run_test "#{$bin}gt seq -stat #{$testdata}gt_bioseq_succ_3.fas" end Name "gt seq test 3 stat (stdin)" Keywords "gt_seq" Test do run "cat #{$testdata}gt_bioseq_succ_3.fas | #{$memcheck} #{$bin}gt seq -stat -" end Name "gt seq test multiple sequence files" Keywords "gt_seq" Test do run_test "#{$bin}gt seq -recreate #{$testdata}gt_bioseq_succ_1.fas #{$testdata}gt_bioseq_succ_2.fas" end Name "gt seq test multiple sequence files (incl. stdin)" Keywords "gt_seq" Test do run "cat #{$testdata}gt_bioseq_succ_2.fas | #{$memcheck} #{$bin}gt seq -recreate #{$testdata}gt_bioseq_succ_1.fas -" end Name "gt seq -gc-content" Keywords "gt_seq" Test do run "cat #{$testdata}gt_bioseq_succ_3.fas | #{$memcheck} #{$bin}gt seq -gc-content -" run "diff #{last_stdout} #{$testdata}gt_bioseq_succ_3.gc" end Name "gt seq -seqlengthdistri" Keywords "gt_seq" Test do run_test "#{$bin}gt seq -seqlengthdistri #{$testdata}sw100K1.fsa" run "diff #{last_stdout} #{$testdata}gt_bioseq_seqlengthdistri.out" end Name "gt seq -showseqnum 1.5" Keywords "gt_seq" Test do run_test("#{$bin}gt seq -showseqnum 1.5 #{$testdata}sw100K1.fsa", :retval => 1) end genometools-1.5.1/testsuite/gt_seqbuffer_include.rb000066400000000000000000000241361211610345200226070ustar00rootroot00000000000000Name "sequence buffer: EMBL 2-character code missing" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}embl_test1.embl", :retval => 1 grep(last_stderr, "2-character line code not found in line 2") end Name "sequence buffer: EMBL file type unguessable" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}embl_test2.embl", :retval => 1 grep(last_stderr, "cannot guess file type of file") end Name "sequence buffer: EMBL missing blanks" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}embl_test3.embl", :retval => 1 grep(last_stderr, "3 blanks expected between") end Name "sequence buffer: EMBL unterminated sequence" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}embl_test4.embl", :retval => 1 grep(last_stderr, "unterminated sequence") end Name "sequence buffer: EMBL multi-line description" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}embl_test5.embl" run "diff #{last_stdout} #{$testdata}embl_test5.fas" end Name "sequence buffer: EMBL empty sequence" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}embl_test6.embl", :retval => 1 grep(last_stderr, "sequence 0 is empty") end Name "sequence buffer: EMBL files mixed with GenBank" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}Random.embl " + \ "#{$testdata}Random.gbk", :retval => 1 end Name "sequence buffer: EMBL files mixed with FASTA" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}Random.embl " + \ "#{$testdata}Random.fna", :retval => 1 end allfiles = ["Atinsert", "Duplicate", "Random-Small", "Random", "Random159", "Random160", "RandomN", "TTT-small", "trna_glutamine"] allfiles.each do |file| Name "sequence buffer: check EMBL <-> FASTA #{file}" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}#{file}.fna " + \ "| grep -v '>' > #{file}_out1" run_test "#{$bin}gt convertseq #{$testdata}#{file}.embl " + \ "| grep -v '>' > #{file}_out2" run "diff -i #{file}_out1 #{file}_out2" end Name "sequence buffer: check EMBL effectivelength #{file}" Keywords "gt_convertseq sequencebuffer filelengthvalues" Test do run_test "#{$bin}gt convertseq -noseq -showfilelengthvalues " + \ "#{$testdata}#{file}.embl" efflength1 = File.open(last_stderr).read.match(/ \d+\/(\d+)$/)[1].to_i run_test "#{$bin}gt convertseq -noseq -showfilelengthvalues " + \ "#{$testdata}#{file}.fna" efflength2 = File.open(last_stderr).read.match(/ \d+\/(\d+)$/)[1].to_i raise if efflength1 != efflength2 end Name "sequence buffer: check EMBL rawfilelength #{file}" Keywords "gt_convertseq sequencebuffer filelengthvalues" Test do run_test "#{$bin}gt convertseq -noseq -showfilelengthvalues " + \ "#{$testdata}#{file}.embl" rawlength = File.open(last_stderr).read.match(/ (\d+)\/\d+$/)[1].to_i realsize = File.size("#{$testdata}#{file}.embl") raise if rawlength != realsize end end Name "sequence buffer: GenBank empty sequence" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}genbank_test1.gbk", \ :retval => 1 grep(last_stderr, "sequence 0 is empty") end Name "sequence buffer: GenBank file type unguessable" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}genbank_test3.gbk", \ :retval => 1 grep(last_stderr, "cannot guess file type of file") end Name "sequence buffer: GenBank unterminated sequence" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}genbank_test4.gbk", \ :retval => 1 grep(last_stderr, "only terminators") end Name "sequence buffer: GenBank missing sequence offset numbers" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}genbank_test6.gbk", \ :retval => 1 grep(last_stderr, "sequence offset") end Name "sequence buffer: GenBank blank missing" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}genbank_test5.gbk", \ :retval => 1 grep(last_stderr, "blank expected") end Name "sequence buffer: GenBank text before LOCUS" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}genbank_test2.gbk" run "diff #{last_stdout} #{$testdata}genbank_test2.fas" end Name "sequence buffer: GenBank missing DEFINITION line" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}genbank_test2.gbk" end Name "sequence buffer: GenBank multiple DEFINITION lines" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}genbank_test8.gbk", \ :retval => 1 grep(last_stderr, "encountered another DEFINITION line") end Name "sequence buffer: GenBank files mixed with EMBL" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}Random.gbk " + \ "#{$testdata}Random.embl" end Name "sequence buffer: GenBank files mixed with FASTA" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}Random.gbk " + \ "#{$testdata}Random.fna" end gbfiles = ["Atinsert", "Duplicate", "Random-Small", "Random", "Random159", "Random160", "RandomN", "TTT-small", "trna_glutamine"] gbfiles.each do |file| Name "sequence buffer: check GenBank <-> FASTA #{file}" Keywords "gt_convertseq sequencebuffer" Test do run_test "#{$bin}gt convertseq #{$testdata}#{file}.fna " + \ "| grep -v '>' > #{file}_out1" run_test "#{$bin}gt convertseq #{$testdata}#{file}.gbk " + \ "| grep -v '>' > #{file}_out2" run "diff -i #{file}_out1 #{file}_out2" end Name "sequence buffer: check GenBank effectivelength #{file}" Keywords "gt_convertseq sequencebuffer filelengthvalues" Test do run_test "#{$bin}gt convertseq -noseq -showfilelengthvalues " + \ "#{$testdata}#{file}.gbk" efflength1 = File.open(last_stderr).read.match(/ \d+\/(\d+)$/)[1].to_i run_test "#{$bin}gt convertseq -noseq -showfilelengthvalues " + \ "#{$testdata}#{file}.fna" efflength2 = File.open(last_stderr).read.match(/ \d+\/(\d+)$/)[1].to_i raise if efflength1 != efflength2 end Name "sequence buffer: check GenBank rawfilelength #{file}" Keywords "gt_convertseq sequencebuffer filelengthvalues" Test do run_test "#{$bin}gt convertseq -noseq -showfilelengthvalues " + \ "#{$testdata}#{file}.gbk" rawlength = File.open(last_stderr).read.match(/ (\d+)\/\d+$/)[1].to_i realsize = File.size("#{$testdata}#{file}.gbk") raise if rawlength != realsize end end Name "sequence buffer: FastQ success" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt convertseq #{$testdata}test1.fastq" run "diff -i #{last_stdout} #{$testdata}test1.fasta" end Name "sequence buffer: FastQ success, seq > buffersize" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt dev readreads -fasta #{$testdata}fastq_long.fastq > ref.fasta" run_test "#{$bin}gt convertseq #{$testdata}fastq_long.fastq" run "diff -i #{last_stdout} ref.fasta" end Name "sequence buffer: FastQ non-FASTQ file" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt convertseq #{$testdata}eden.gff3", \ :retval => 1 grep(last_stderr, /unknown file contents/) end Name "sequence buffer: FastQ invalid block start" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt convertseq #{$testdata}test2_wrong_begin.fastq", \ :retval => 1 grep(last_stderr, /unknown file contents/) end Name "sequence buffer: FastQ different seqnames" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt convertseq " + \ "#{$testdata}test3_different_seqnames.fastq", \ :retval => 1 grep(last_stderr, "sequence description 'HWI-EAS306_9_FC305MP_6_1_1331" + \ "_1843' is not equal to qualities description 'HWI-EAS3" +\ "06_9_FC305MP_6_1_1331' in line") end Name "sequence buffer: FastQ different seqlengths 1" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt convertseq " + \ "#{$testdata}test4_different_seqlengths.fastq", \ :retval => 1 grep(last_stderr, "lengths of character sequence and qualities sequence " + \ "differ") end Name "sequence buffer: FastQ different seqlengths 2" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt convertseq " + \ "#{$testdata}test9_uneven_length.fastq", \ :retval => 1 grep(last_stderr, "qualities string of sequence length 33 is not ended " + \ "by newline") end Name "sequence buffer: FastQ tricky" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt dev readreads -fasta " + \ "#{$testdata}test5_tricky.fastq > ref.fas" run_test "#{$bin}gt convertseq " + \ "#{$testdata}test5_tricky.fastq" run "diff -i #{last_stdout} ref.fas" end Name "sequence buffer: FastQ empty sequence" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt convertseq #{$testdata}test7_empty_seq.fastq", \ :retval => 1 grep(last_stderr, /empty sequence/) end Name "sequence buffer: FastQ premature end" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt convertseq #{$testdata}test6_premature_end.fastq", \ :retval => 1 grep(last_stderr, /premature end/) end Name "sequence buffer: FastQ multiline" Keywords "gt_convertseq sequencebuffer fastq" Test do run_test "#{$bin}gt convertseq #{$testdata}test10_multiline.fastq" end genometools-1.5.1/testsuite/gt_seqfilter_include.rb000066400000000000000000000012551211610345200226200ustar00rootroot00000000000000Name "gt seqfilter -minlength" Keywords "gt_seqfilter" Test do run_test "#{$bin}gt seqfilter -minlength 1000 " + "#{$testdata}nGASP/protein_100.fas" run "diff #{last_stdout} #{$testdata}nGASP/protein_long.fas" end Name "gt seqfilter -maxlength" Keywords "gt_seqfilter" Test do run_test "#{$bin}gt seqfilter -maxlength 499 " + "#{$testdata}nGASP/protein_100.fas" run "diff #{last_stdout} #{$testdata}nGASP/protein_short.fas" end Name "gt seqfilter -maxseqnum" Keywords "gt_seqfilter" Test do run_test "#{$bin}gt seqfilter -maxseqnum 10 " + "#{$testdata}nGASP/protein_100.fas" run "diff #{last_stdout} #{$testdata}nGASP/protein_10.fas" end genometools-1.5.1/testsuite/gt_seqids_include.rb000066400000000000000000000010221211610345200221020ustar00rootroot00000000000000Name "gt seqids" Keywords "gt_seqids" Test do run "#{$bin}gt seqids #{$testdata}/encode_known_genes_Mar07.gff3" run "diff #{last_stdout} #{$testdata}/encode_known_genes_Mar07.seqids" end Name "gt seqids (empty file)" Keywords "gt_seqids" Test do run "#{$bin}gt seqids #{$testdata}/gt_view_prob_1.gff3 > out" run "touch tmp" run "diff out tmp" end Name "gt seqids (nonexistant file)" Keywords "gt_seqids" Test do run "#{$bin}gt seqids #{$testdata}/foo", :retval => 1 grep(last_stderr, /such file or directory/) end genometools-1.5.1/testsuite/gt_seqlensort_include.rb000066400000000000000000000016411211610345200230200ustar00rootroot00000000000000def compare_encseqs3(indexname1, indexname2, cmpinfos) run "#{$bin}gt encseq decode #{indexname1}" decoded1 = last_stdout run "#{$bin}gt encseq decode #{indexname2}" decoded2 = last_stdout run "diff #{decoded1} #{decoded2}" if cmpinfos run "#{$bin}gt encseq info #{indexname1}" run "grep -v 'index name' #{last_stdout}" info1 = last_stdout run "#{$bin}gt encseq info #{indexname2}" run "grep -v 'index name' #{last_stdout}" info2 = last_stdout run "diff #{info1} #{info2}" end end Name "gt seqlensort" Keywords "gt_seqlensort" Test do run "cp #{$testdata}/gt_seqlensort_test.fas sequences" run "#{$bin}gt dev seqlensort -db sequences -indexname seqlensort" run "cp #{$testdata}/gt_seqlensort_test_sorted.fas sequences" run "#{$bin}gt encseq encode -des no -sds no -md5 no "+ "-indexname encseq_encode sequences" compare_encseqs3("seqlensort", "encseq_encode", true) end genometools-1.5.1/testsuite/gt_seqmutate_include.rb000066400000000000000000000012201211610345200226220ustar00rootroot00000000000000Name "gt seqmutate test 1" Keywords "gt_seqmutate" Test do run_test "#{$bin}gt -seed 1 seqmutate #{$testdata}gt_mutate_test_1.fas" run "diff #{last_stdout} #{$testdata}gt_mutate_test_1.out" end Name "gt seqmutate test 2" Keywords "gt_seqmutate" Test do run_test "#{$bin}gt -seed 987654321 seqmutate #{$testdata}gt_mutate_test_2.fas" run "diff #{last_stdout} #{$testdata}gt_mutate_test_2.out" end Name "gt seqmutate test both" Keywords "gt_seqmutate" Test do run_test "#{$bin}gt -seed 555555555 mutate -rate 2 #{$testdata}gt_mutate_test_1.fas #{$testdata}gt_mutate_test_2.fas" run "diff #{last_stdout} #{$testdata}gt_mutate_test_both.out" end genometools-1.5.1/testsuite/gt_seqorder_include.rb000066400000000000000000000031111211610345200224370ustar00rootroot00000000000000Name "gt seqorder -sort test" Keywords "gt_seqorder" Test do seq = "gt_seqorder_test.fas" run "#{$bin}gt encseq encode #$testdata#{seq}" run_test "#{$bin}gt seqorder -sort #{seq}" run "diff #{last_stdout} #{$testdata}gt_seqorder_test_sort.fas" end Name "gt seqorder -revsort test" Keywords "gt_seqorder" Test do seq = "gt_seqorder_test.fas" run "#{$bin}gt encseq encode #$testdata#{seq}" run_test "#{$bin}gt seqorder -revsort #{seq}" run "diff #{last_stdout} #{$testdata}gt_seqorder_test_revsort.fas" end Name "gt seqorder -invert test" Keywords "gt_seqorder" Test do seq = "gt_seqorder_test.fas" run "#{$bin}gt encseq encode #$testdata#{seq}" origdesc = [] IO.read("#$testdata#{seq}").each_line {|l| origdesc << l if l[0] == '>'} run_test "#{$bin}gt seqorder -invert #{seq}" invertdesc = [] IO.read("#{last_stdout}").each_line {|l| invertdesc << l if l[0] == '>'} if (origdesc != invertdesc.reverse) fail("inverted invert differ from original") end end Name "gt seqorder -shuffle test" Keywords "gt_seqorder" Test do seq = "gt_seqorder_test.fas" run "#{$bin}gt encseq encode #$testdata#{seq}" run "sort #$testdata#{seq}" sorted_original = last_stdout run_test "#{$bin}gt seqorder -shuffle #{seq}" run "sort #{last_stdout}" run "diff #{last_stdout} #{sorted_original}" end Name "gt seqorder without description support" Keywords "gt_seqorder" Test do seq = "gt_seqorder_test.fas" run "#{$bin}gt encseq encode -des no -sds no #$testdata#{seq}" run_test "#{$bin}gt seqorder -sort #{seq}" grep last_stderr, "warning" grep last_stdout, ">\n" end genometools-1.5.1/testsuite/gt_seqstat_include.rb000066400000000000000000000054661211610345200223160ustar00rootroot00000000000000Name "gt seqstat (FASTA)" Keywords "gt_seqstat" Test do run_test "#{$bin}gt seqstat -v -distlen #{$testdata}Atinsert.fna" grep(last_stdout, /21 sequences/) end Name "gt seqstat (GenBank)" Keywords "gt_seqstat" Test do run_test "#{$bin}gt seqstat -v -distlen #{$testdata}Atinsert.gbk" grep(last_stdout, /21 sequences/) end Name "gt seqstat (EMBL)" Keywords "gt_seqstat" Test do run_test "#{$bin}gt seqstat -v -distlen #{$testdata}Atinsert.embl" grep(last_stdout, /21 sequences/) end Name "gt seqstat distlen" Keywords "gt_seqstat" Test do {10 => "860--869 1", 100 => "800--899 4", 1000 => "0--999 21"}.each_pair do |bucketsize, expected| run_test "#{$bin}gt seqstat -v -distlen"+ " -b #{bucketsize} #{$testdata}Atinsert.gbk" grep(last_stdout, expected) end end Name "gt seqstat -contigs" Keywords "gt_seqstat" Test do run_test "#{$bin}gt seqstat -contigs #{$testdata}at1MB" grep(last_stdout, "number.*1952") grep(last_stdout, "total.*770425") grep(last_stdout, "mean.*394") grep(last_stdout, "median.*399") grep(last_stdout, "longest.*1102") grep(last_stdout, "shortest.*56") grep(last_stdout, "contigs > 500.*198") grep(last_stdout, "contigs > 1K.*3") grep(last_stdout, "contigs > 10K.*0") grep(last_stdout, "contigs > 100K.*0") grep(last_stdout, "contigs > 1M.*0") grep(last_stdout, "N50.*421") grep(last_stdout, "L50.*797") end Name "gt seqstat -contigs -genome" Keywords "gt_seqstat" Test do run_test "#{$bin}gt seqstat -genome 770425 -contigs #{$testdata}at1MB" grep(last_stdout, "total.*770425") grep(last_stdout, "genome.*770425") grep(last_stdout, "genome.*100.00 %") grep(last_stdout, "N50.*421") grep(last_stdout, "NG50.*421") grep(last_stdout, "L50.*797") grep(last_stdout, "LG50.*797") run_test "#{$bin}gt seqstat -genome 100000 -contigs #{$testdata}at1MB" grep(last_stdout, "genome.*100000") grep(last_stdout, "genome.*770.42 %") grep(last_stdout, "N50.*421") grep(last_stdout, "NG50.*591") grep(last_stdout, "L50.*797") grep(last_stdout, "LG50.*74") run_test "#{$bin}gt seqstat -genome 1000000 -contigs #{$testdata}at1MB" grep(last_stdout, "genome.*1000000") grep(last_stdout, "genome.*77.04 %") grep(last_stdout, "N50.*421") grep(last_stdout, "NG50.*386") grep(last_stdout, "L50.*797") grep(last_stdout, "LG50.*1086") run_test "#{$bin}gt seqstat -genome 1600000 -contigs #{$testdata}at1MB" grep(last_stdout, "genome.*1600000") grep(last_stdout, "genome.*48.15 %") grep(last_stdout, "N50.*421") grep(last_stdout, "NG50.*n\.a\.") grep(last_stdout, "L50.*797") grep(last_stdout, "LG50.*n\.a\.") end Name "gt seqstat fail (unknown file type)" Keywords "gt_seqstat" Test do run_test "#{$bin}gt seqstat -v -distlen #{$testdata}empty_file", \ :retval => 1 grep(last_stderr, /cannot guess file type/) end genometools-1.5.1/testsuite/gt_seqtransform_include.rb000066400000000000000000000013321211610345200233420ustar00rootroot00000000000000Name "gt seqtransform" Keywords "gt_seqtransform (invariant)" Test do run_test "#{$bin}gt seqtransform #{$testdata}nGASP/protein_100.fas" run "diff #{last_stdout} #{$testdata}nGASP/protein_100.fas" end Name "gt seqtransform" Keywords "gt_seqtransform -addstopaminos" Test do run_test "#{$bin}gt seqtransform -addstopaminos " + "#{$testdata}nGASP/protein_100.fas" run "diff #{last_stdout} #{$testdata}nGASP/protein_100_with_stop.fas" end Name "gt seqtransform" Keywords "gt_seqtransform -addstopaminos (invariant)" Test do run_test "#{$bin}gt seqtransform -addstopaminos " + "#{$testdata}nGASP/protein_100_with_stop.fas" run "diff #{last_stdout} #{$testdata}nGASP/protein_100_with_stop.fas" end genometools-1.5.1/testsuite/gt_sequniq_include.rb000066400000000000000000000024501211610345200223050ustar00rootroot00000000000000["", " -rev", " -seqit", " -seqit -rev"].each do |opt| Name "gt sequniq#{opt} 2xfoo test" Keywords "gt_sequniq" Test do run_test "#{$bin}gt sequniq#{opt} #{$testdata}foofoo.fas" run "diff #{last_stdout} #{$testdata}foo.fas" end Name "gt sequniq#{opt} 3xfoo test " Keywords "gt_sequniq" Test do run_test "#{$bin}gt sequniq#{opt} #{$testdata}foofoofoo.fas" run "diff #{last_stdout} #{$testdata}foo.fas" end end ["", " -seqit"].each do |opt| Name "gt sequniq#{opt} foo + rc(foo) test " Keywords "gt_sequniq" Test do run_test "#{$bin}gt sequniq#{opt} #{$testdata}foorcfoo.fas" run "diff #{last_stdout} #{$testdata}foorcfoo.fas" end Name "gt sequniq#{opt} -rev foo + rc(foo) test " Keywords "gt_sequniq" Test do run_test "#{$bin}gt sequniq#{opt} -rev #{$testdata}foorcfoo.fas" run "diff #{last_stdout} #{$testdata}foo.fas" end Name "gt sequniq#{opt} 2xfoo + rc(foo) test " Keywords "gt_sequniq" Test do run_test "#{$bin}gt sequniq#{opt} #{$testdata}foorcfoofoo.fas" run "diff #{last_stdout} #{$testdata}foorcfoo.fas" end Name "gt sequniq#{opt} -rev 2xfoo + rc(foo) test " Keywords "gt_sequniq" Test do run_test "#{$bin}gt sequniq#{opt} -rev #{$testdata}foorcfoofoo.fas" run "diff #{last_stdout} #{$testdata}foo.fas" end end genometools-1.5.1/testsuite/gt_shredder_include.rb000066400000000000000000000022241211610345200224170ustar00rootroot00000000000000Name "gt shredder" Keywords "gt_shredder" Test do run_test "#{$bin}gt shredder #{$testdata}U89959_genomic.fas" end Name "gt shredder (-coverage)" Keywords "gt_shredder" Test do run_test "#{$bin}gt shredder -coverage 5 #{$testdata}U89959_genomic.fas" end Name "gt shredder (-overlap)" Keywords "gt_shredder" Test do run_test "#{$bin}gt shredder -overlap 500 #{$testdata}U89959_genomic.fas" end Name "gt shredder (-sample)" Keywords "gt_shredder" Test do run_test "#{$bin}gt shredder -sample 0.1 #{$testdata}U89959_ests.fas" end Name "gt shredder (nonexistent file)" Keywords "gt_shredder" Test do run_test("#{$bin}gt shredder #{$testdata}nonexistent_file", :retval => 1) end Name "gt shredder (wrong argument usage)" Keywords "gt_shredder" Test do run_test("#{$bin}gt shredder -maxlength 15 #{$testdata}U89959_genomic.fas", :retval => 1) grep last_stderr, /-minlength must be <= than -maxlength/ end Name "gt shredder (minlength = maxlength)" Keywords "gt_shredder" Test do run_test "#{$bin}gt shredder -minlength 30 -maxlength 30 " + "#{$testdata}Duplicate.fna" run "diff #{last_stdout} #{$testdata}Duplicate.shreddered" end genometools-1.5.1/testsuite/gt_simreads_include.rb000066400000000000000000000074471211610345200224420ustar00rootroot00000000000000def total_length(fas) run_test %Q(grep -v ">" #{fas} | tr -d "[:space:]" | wc -c) return Integer(IO.read(last_stdout)) end def nof_seq(fas) run_test %Q(grep "^>" #{fas} | wc -l) return Integer(IO.read(last_stdout)) end def expect(label, value, expected) if value != expected failtest("#{label}: expected value #{expected}, "+ "found #{value}") end end def expect_range(label, value, min, max) if value < min or value > max failtest("#{label}: expected value in range #{min}-#{max}, "+ "found #{value}") end end Name "gt simreads -num -len test" Keywords "gt_simreads" Test do fas = "#{$testdata}U89959_genomic.fas" run_test "#{$bin}gt encseq encode #{fas}" run_test "#{$bin}gt simreads -num 100 -len 100 "+ "-force -o reads #{File.basename(fas)}" expect("number of reads", nof_seq("reads"), 100) expect("total length", total_length("reads"), 10000) end Name "gt simreads test -minlen/-maxlen" Keywords "gt_simreads" Test do fas = "#{$testdata}U89959_genomic.fas" run_test "#{$bin}gt encseq encode #{fas}" run_test "#{$bin}gt simreads -num 100 -minlen 10 -maxlen 100 "+ "-force -o reads #{File.basename(fas)}" expect("number of reads", nof_seq("reads"), 100) expect_range("total length", total_length("reads"), 1000, 10000) end Name "gt simreads -coverage test" Keywords "gt_simreads" Test do fas = "#{$testdata}U89959_genomic.fas" run_test "#{$bin}gt encseq encode #{fas}" cov = 5 len = 100 run_test "#{$bin}gt simreads -coverage #{cov} -len #{len} "+ "-force -o reads #{File.basename(fas)}" n = total_length(fas) exptlen = n * cov mod = exptlen % len exptlen += (len-mod) if mod > 0 expnreads = exptlen / len expect("total length", total_length("reads"), exptlen) expect("number of reads", nof_seq("reads"), expnreads) end Name "gt simreads grep test" Keywords "gt_simreads" Test do fas = "#{$testdata}U89959_genomic.fas" run_test "#{$bin}gt encseq encode #{fas}" cov = 3 len = 100 n = total_length(fas) run_test "#{$bin}gt simreads -coverage #{cov} -len #{len} "+ "-force -o reads #{File.basename(fas)}" # test that reads originate from target sequence # or its reverse complement run_test "#{$bin}gt convertseq -fastawidth #{n+1} #{fas}" run_test "tail -n 1 #{last_stdout}" direct = IO.read(last_stdout) run_test "#{$bin}gt convertseq -r -fastawidth #{n+1} #{fas}" run_test "tail -n 1 #{last_stdout}" rc = IO.read(last_stdout) run_test "#{$bin}gt convertseq -fastawidth #{len+1} -force -o reads2 reads" f = File.open("reads2") i = 0 f.each do |line| if !(line =~ /^>/) pattern = Regexp.new(Regexp.escape(line.chomp!), Regexp::IGNORECASE) if !(direct =~ pattern) && !(rc =~ pattern) failtest("read #{i} does not match") end end i+=1 end end def test_distfile_format(filename) f = File.open(filename) f.each do |line| if (line !~ /^#/ && line.chomp !~ /^\d+ \d+$/) failtest("distribution output file format error: #{line}") end end f.close end Name "gt simreads -ds test" Keywords "gt_simreads" Test do fas = "#{$testdata}U89959_genomic.fas" run_test "#{$bin}gt encseq encode #{fas}" cov = 10 len = 10 run_test "#{$bin}gt simreads -coverage #{cov} -len #{len} "+ "-ds starts -force -o reads #{File.basename(fas)}" test_distfile_format("starts") end Name "gt simreads -dl test" Keywords "gt_simreads" Test do fas = "#{$testdata}U89959_genomic.fas" run_test "#{$bin}gt encseq encode #{fas}" cov = 10 minlen = 10 maxlen = 100 run_test "#{$bin}gt simreads -coverage #{cov} -minlen #{minlen} "+ "-maxlen #{maxlen} -dl lengths -force -o reads #{File.basename(fas)}" test_distfile_format("lengths") end genometools-1.5.1/testsuite/gt_sketch_include.rb000066400000000000000000000272411211610345200221060ustar00rootroot00000000000000Name "gt sketch short test" Keywords "gt_sketch" Test do run_test "#{$bin}gt sketch out.png #{$testdata}gff3_file_1_short.txt", \ :maxtime => 600 run "test -e out.png" end Name "gt sketch short test (stdin)" Keywords "gt_sketch" Test do run_test "#{$bin}gt sketch out.png < #{$testdata}gff3_file_1_short.txt", \ :maxtime => 600 run "test -e out.png" end Name "gt sketch short test (unknown output format)" Keywords "gt_sketch" Test do run_test("#{$bin}gt sketch -format unknown out.png " + \ "#{$testdata}gff3_file_1_short.txt", :retval => 1, :maxtime => 600) grep(last_stderr, /must be one of:/) end Name "gt sketch short test (unwriteable PNG file)" Keywords "gt_sketch" Test do run "touch unwriteable.png" run "chmod u-w unwriteable.png" run_test("#{$bin}gt sketch -force unwriteable.png " + \ "#{$testdata}gff3_file_1_short.txt", :retval => 1, :maxtime => 600) grep(last_stderr, /an I\/O error occurred/) end Name "gt sketch short test (unwriteable PDF file)" Keywords "gt_sketch" Test do run "touch unwriteable.pdf" run "chmod u-w unwriteable.pdf" run_test("#{$bin}gt sketch -format pdf -force unwriteable.pdf " + \ "#{$testdata}gff3_file_1_short.txt", :retval => 1, :maxtime => 600) grep(last_stderr, /Permission denied/) end Name "gt sketch short test (nonexistant style file)" Keywords "gt_sketch" Test do run_test("#{$bin}gt sketch -style foo.bar out.png " + \ "#{$testdata}gff3_file_1_short.txt", :retval => 1, :maxtime => 600) grep(last_stderr, /style file 'foo.bar' does not exist/) end Name "gt sketch short test (invalid style file)" Keywords "gt_sketch" Test do run "echo thisisnotlua > foo.bar" run_test("#{$bin}gt sketch -style foo.bar out.png " + \ "#{$testdata}gff3_file_1_short.txt", :retval => 1, :maxtime => 600) grep(last_stderr, /cannot run style file/) end Name "gt sketch prob 1" Keywords "gt_sketch" Test do run_test("#{$bin}gt sketch out.png #{$testdata}gt_view_prob_1.gff3", \ :retval => 1, :maxtime => 600) end Name "gt sketch prob 2" Keywords "gt_sketch" Test do run_test "#{$bin}gt sketch out.png #{$testdata}gt_view_prob_2.gff3", \ :maxtime => 600 run "test -e out.png" end Name "gt sketch track IDs to style file" Keywords "gt_sketch" Test do run "cp #{$testdata}eden.gff3 eden2.gff3" run_test "#{$bin}gt sketch -force -style " + \ "#{$testdata}trackname1.style out.png #{$testdata}eden.gff3 " + \ "eden2.gff3" run "diff #{last_stdout} #{$testdata}trackname1.out" run "test -e out.png" end Name "gt sketch multiline without parent" Keywords "gt_sketch" Test do run_test "#{$bin}gt sketch out.png #{$testdata}gt_sketch_multiline_without_parent.gff3", :maxtime => 600 run "test -e out.png" end Name "gt sketch pipe" Keywords "gt_sketch" Test do run "#{$bin}gt gff3 #{$testdata}gff3_file_1_short.txt > in.gff3" run_test "#{$bin}gt sketch -pipe out.png in.gff3 > out.gff3", :maxtime => 600 run "diff in.gff3 out.gff3" end Name "gt sketch streams <-> file output" Keywords "gt_sketch streams annotationsketch" Test do m = `#{$bin}gt sketch -help`.match(/graphics format\s+choose from ([^ ]+)/m) raise TestFailedError if m.nil? m[1].chomp.split("|").each do |format| run_test "#{$bin}gt sketch -format #{format} out.#{format} #{$testdata}eden.gff3" run_test "#{$bin}gt sketch -streams -format #{format} streamout.#{format} #{$testdata}eden.gff3" # some formats will diff in their creation date, remove it run "sed -i '/CreationDate/d' out.#{format} streamout.#{format}" run "diff out.#{format} streamout.#{format}" end end Name "gt sketch -showrecmaps" Keywords "gt_sketch showrecmaps" Test do run_test "#{$bin}gt sketch -showrecmaps out.png " + "#{$testdata}standard_gene_as_tree.gff3", :maxtime => 600 run "diff #{last_stdout} #{$testdata}standard_gene_as_tree.recmaps" end Name "gt sketch -showrecmaps (normal text size)" Keywords "gt_sketch showrecmaps" Test do run_test "#{$bin}gt sketch -showrecmaps out.png " + "#{$testdata}gt_sketch_textwidth.gff3", :maxtime => 600 run "diff #{last_stdout} #{$testdata}gt_sketch_textwidth_0.recmaps" end Name "gt sketch -showrecmaps (narrow image)" Keywords "gt_sketch showrecmaps" Test do run_test "#{$bin}gt sketch -width 300 -showrecmaps out.png " + "#{$testdata}gt_sketch_textwidth.gff3", :maxtime => 600 run "diff #{last_stdout} #{$testdata}gt_sketch_textwidth_1.recmaps" end Name "gt sketch -showrecmaps (large text size)" Keywords "gt_sketch showrecmaps" Test do run_test "#{$bin}gt sketch -style #{$testdata}bigfonts.style " + \ "-showrecmaps out.png #{$testdata}gt_sketch_textwidth.gff3", \ :maxtime => 600 run "diff #{last_stdout} #{$testdata}gt_sketch_textwidth_2.recmaps" end Name "gt sketch runtime Lua failures" Keywords "gt_sketch lua" Test do Dir.glob("#{$testdata}fail*style") do |file| run_test("#{$bin}gt sketch -style #{file} " + \ "out.png #{$testdata}eden.gff3", \ :maxtime => 600, :retval => 1) grep(last_stderr, 'attempt to call global \'fail\'') end end Name "sketch_constructed (C)" Keywords "gt_sketch annotationsketch" Test do run_test "#{$bin}examples/sketch_constructed " + \ "#{$cur}/gtdata/sketch/default.style sketch_constructed.png", \ :maxtime => 600 end Name "sketch_parsed (C)" Keywords "gt_sketch annotationsketch" Test do run_test "#{$bin}examples/sketch_parsed " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}standard_gene_with_introns_as_tree.gff3 ", \ :maxtime => 600 end Name "sketch_parsed reverse order (C)" Keywords "gt_sketch annotationsketch" Test do run_test "#{$bin}examples/sketch_parsed_with_ordering " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}eden.gff3 ", \ :maxtime => 600 run "diff #{last_stdout} #{$testdata}order_sketch_out.txt" end Name "sketch_constructed (Lua)" Keywords "gt_sketch gt_scripts annotationsketch" Test do run_test "#{$bin}gt #{$cur}/gtscripts/sketch_constructed.lua " + \ "#{$cur}/gtdata/sketch/default.style sketch_constructed.png", \ :maxtime => 600 end Name "sketch_parsed (Lua)" Keywords "gt_sketch gt_scripts annotationsketch" Test do run_test "#{$bin}gt #{$cur}/gtscripts/sketch_parsed.lua " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}standard_gene_with_introns_as_tree.gff3", \ :maxtime => 600 end Name "sketch_constructed (Python)" Keywords "gt_sketch gt_python annotationsketch" Test do run_python "#{$cur}/gtpython/sketch_constructed.py " + \ "#{$cur}/gtdata/sketch/default.style sketch_constructed.png", \ :maxtime => 600 end Name "sketch_parsed (Python)" Keywords "gt_sketch gt_python annotationsketch" Test do run_python "#{$cur}/gtpython/sketch_parsed.py " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}standard_gene_with_introns_as_tree.gff3", \ :maxtime => 600 end Name "sketch_parsed reverse order (Python)" Keywords "gt_sketch gt_python annotationsketch" Test do run_python "#{$testdata}gtpython/sketch_parsed_with_ordering.py " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}standard_gene_with_introns_as_tree.gff3", \ :maxtime => 600 end Name "sketch_parsed invalid order (Python, string != int)" Keywords "gt_sketch gt_python annotationsketch" Test do run_python "#{$testdata}gtpython/sketch_parsed_with_invalid_ordering.py " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}standard_gene_with_introns_as_tree.gff3", \ :maxtime => 600 grep(last_stderr, /Track ordering function must return a number/) end Name "sketch_parsed invalid order (Python, None)" Keywords "gt_sketch gt_python annotationsketch" Test do run_python "#{$testdata}gtpython/sketch_parsed_with_invalid_ordering_2.py " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}standard_gene_with_introns_as_tree.gff3", \ :maxtime => 600 grep(last_stderr, /Track ordering function must return a number/) end Name "Python runtime style failures" Keywords "gt_sketch gt_python annotationsketch" Test do Dir.glob("#{$testdata}fail*style") do |file| run_python "#{$cur}/gtpython/sketch_parsed.py " + \ "#{file} sketch_parsed.png " + \ "#{$testdata}eden.gff3", \ :maxtime => 600, :retval => 1 grep(last_stderr, 'attempt to call global \'fail\'') run_python "#{$cur}/gtpython/sketch_constructed.py " + \ "#{file} sketch_constructed.png", \ :maxtime => 600, :retval => 1 grep(last_stderr, 'attempt to call global \'fail\'') run_python "#{$testdata}gtpython/style_serialize.py #{file}", :retval => 1 grep(last_stderr, 'expected boolean, number, or string') end end rv = RUBY_VERSION.match(/^(\d+\.\d+)/) if (!rv.nil? && rv[1].to_f < 1.9) and not $arguments["nocairo"] then Name "sketch_constructed (Ruby)" Keywords "gt_sketch gt_ruby annotationsketch" Test do run_ruby "#{$cur}/gtruby/sketch_constructed.rb " + \ "#{$cur}/gtdata/sketch/default.style sketch_constructed.png", \ :maxtime => 600 end Name "sketch_parsed (Ruby)" Keywords "gt_sketch gt_ruby annotationsketch" Test do run_ruby "#{$cur}/gtruby/sketch_parsed.rb " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}standard_gene_with_introns_as_tree.gff3", \ :maxtime => 600 end Name "sketch_parsed reverse order (Ruby)" Keywords "gt_sketch gt_ruby annotationsketch" Test do run_ruby "#{$testdata}gtruby/sketch_parsed_with_ordering.rb " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}standard_gene_with_introns_as_tree.gff3", \ :maxtime => 600 end Name "sketch_parsed invalid order (Ruby, string != numeric)" Keywords "gt_sketch gt_ruby annotationsketch" Test do run_ruby "#{$testdata}gtruby/sketch_parsed_with_invalid_ordering.rb " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}standard_gene_with_introns_as_tree.gff3", \ :maxtime => 600, :retval => 1 grep(last_stderr, /Track ordering callback must return a number/) end Name "sketch_parsed invalid order (Ruby, nil)" Keywords "gt_sketch gt_ruby annotationsketch" Test do run_ruby "#{$testdata}gtruby/sketch_parsed_with_invalid_ordering_2.rb " + \ "#{$cur}/gtdata/sketch/default.style sketch_parsed.png " + \ "#{$testdata}standard_gene_with_introns_as_tree.gff3", \ :maxtime => 600, :retval => 1 grep(last_stderr, /Track ordering callback must return a number/) end Name "Ruby runtime style failures" Keywords "gt_sketch gt_ruby annotationsketch" Test do Dir.glob("#{$testdata}fail*style") do |file| run_ruby "#{$cur}/gtruby/sketch_parsed.rb " + \ "#{file} sketch_parsed.png " + \ "#{$testdata}eden.gff3", \ :maxtime => 600, :retval => 1 grep(last_stderr, 'attempt to call global \'fail\'') run_ruby "#{$cur}/gtruby/sketch_constructed.rb " + \ "#{file} sketch_constructed.png", \ :maxtime => 600, :retval => 1 grep(last_stderr, 'attempt to call global \'fail\'') run_ruby "#{$testdata}gtruby/style_serialize.rb #{file}", :retval => 1 grep(last_stderr, 'expected boolean, number, or string') end end endgenometools-1.5.1/testsuite/gt_sortbench_include.rb000066400000000000000000000012621211610345200226070ustar00rootroot00000000000000methods = ["radixinplace","radixlsb", "thomas","system","inlinedptr","inlinedarr","direct"] lenlist=[10,20,30,1000,2000,4000,1000000,2000000] methods.each do |met| Name "gt sortbench #{met}" Keywords "gt_sortbench" Test do lenlist.each do |len| if met.match(/^radixinplace/) ["","-j 4"].each do |opt| run "#{$bin}gt #{opt} dev sortbench -impl #{met} -size #{len} -maxval 1000" run "#{$bin}gt #{opt} dev sortbench -impl #{met} -size #{len}" end else run "#{$bin}gt dev sortbench -impl #{met} -size #{len}" run "#{$bin}gt dev sortbench -impl #{met} -size #{len} -maxval 10000" end end end end genometools-1.5.1/testsuite/gt_splicesiteinfo_include.rb000066400000000000000000000056271211610345200236510ustar00rootroot00000000000000Name "gt splicesiteinfo -help" Keywords "gt_splicesiteinfo" Test do run_test "#{$bin}gt splicesiteinfo -help" grep last_stdout, "Report bugs to" end Name "gt splicesiteinfo -noop" Keywords "gt_splicesiteinfo" Test do run_test("#{$bin}gt splicesiteinfo -noop", :retval => 1) grep last_stderr, "unknown option" end Name "gt splicesiteinfo -seqfile nonexistent_file" Keywords "gt_splicesiteinfo" Test do run_test("#{$bin}gt splicesiteinfo -regionmapping #{$testdata}nonexistent_file", :retval => 1) end Name "gt splicesiteinfo test 1" Keywords "gt_splicesiteinfo" Test do run_test "#{$bin}gt splicesiteinfo -seqfile #{$testdata}gt_splicesiteinfo_test_1.fas #{$testdata}gt_splicesiteinfo_test_1.gff3" run "diff #{last_stdout} #{$testdata}gt_splicesiteinfo_test_1.out" end Name "gt splicesiteinfo test 2" Keywords "gt_splicesiteinfo" Test do run_test "#{$bin}gt splicesiteinfo -seqfile #{$testdata}gt_splicesiteinfo_test_2.fas #{$testdata}gt_splicesiteinfo_test_2.gff3" run "diff #{last_stdout} #{$testdata}gt_splicesiteinfo_test_2.out" end Name "gt splicesiteinfo test 3" Keywords "gt_splicesiteinfo" Test do run_test "#{$bin}gt splicesiteinfo -seqfile #{$testdata}gt_splicesiteinfo_test_1.fas #{$testdata}gt_splicesiteinfo_test_3.gff3" grep last_stderr, "unknown orientation" end Name "gt splicesiteinfo test 4" Keywords "gt_splicesiteinfo" Test do run_test "#{$bin}gt splicesiteinfo -seqfile #{$testdata}gt_splicesiteinfo_test_4.fas #{$testdata}gt_splicesiteinfo_test_4.gff3" run "diff #{last_stdout} #{$testdata}gt_splicesiteinfo_test_4.out" end Name "gt splicesiteinfo test 5 (-addintrons)" Keywords "gt_splicesiteinfo" Test do run_test "#{$bin}gt splicesiteinfo -addintrons -seqfile #{$testdata}gt_splicesiteinfo_test_5.fas #{$testdata}gt_splicesiteinfo_test_5.gff3" run "diff #{last_stdout} #{$testdata}gt_splicesiteinfo_test_5.out" end Name "gt splicesiteinfo test 6" Keywords "gt_splicesiteinfo" Test do run_test("#{$bin}gt splicesiteinfo -regionmapping #{$testdata}gt_splicesiteinfo_test_6.mapping #{$testdata}gt_splicesiteinfo_test_6.gff3", :retval => 1) grep last_stderr, "is nil" end Name "gt splicesiteinfo test 6" Keywords "gt_splicesiteinfo" Test do run_test("#{$bin}gt splicesiteinfo -regionmapping #{$testdata}gt_splicesiteinfo_test_6.mapping #{$testdata}gt_splicesiteinfo_test_6.gff3", :retval => 1) grep last_stderr, "is nil" end Name "gt splicesiteinfo prob 1" Keywords "gt_splicesiteinfo" Test do run_test "#{$bin}gt splicesiteinfo -seqfile #{$testdata}gt_splicesiteinfo_test_5.fas #{$testdata}gt_splicesiteinfo_prob_1.gff3" end Name "gt splicesiteinfo error message" Keywords "gt_splicesiteinfo" Test do run "#{$bin}gt gff3 -offset 1000 #{$testdata}gt_splicesiteinfo_test_1.gff3 " + "| #{$bin}gt splicesiteinfo -seqfile " + "#{$testdata}gt_splicesiteinfo_test_1.fas", :retval => 1 grep last_stderr, "Has the sequence-region to sequence mapping been defined correctly" end genometools-1.5.1/testsuite/gt_splitfasta_include.rb000066400000000000000000000122251211610345200227730ustar00rootroot00000000000000Name "gt splitfasta (default)" Keywords "gt_splitfasta" Test do run "cp #{$testdata}U89959_genomic.fas ." run_test "#{$bin}gt splitfasta U89959_genomic.fas" if not File.exists?("U89959_genomic.fas.1") then raise TestFailed, "file 'U89959_genomic.fas.1' does not exist" end end Name "gt splitfasta (compressed file)" Keywords "gt_splitfasta" Test do run "cp #{$testdata}U89959_genomic.fas ." run "gzip U89959_genomic.fas" run_test "#{$bin}gt splitfasta U89959_genomic.fas.gz" if not File.exists?("U89959_genomic.fas.1.gz") then raise TestFailed, "file 'U89959_genomic.fas.1.gz' does not exist" end end Name "gt splitfasta (-numfiles)" Keywords "gt_splitfasta" Test do run "cp #{$testdata}U89959_ests.fas ." run_test "#{$bin}gt splitfasta -numfiles 8 U89959_ests.fas" if not File.exists?("U89959_ests.fas.1") then raise TestFailed, "file 'U89959_ests.fas.1' does not exist" end if not File.exists?("U89959_ests.fas.8") then raise TestFailed, "file 'U89959_ests.fas.8' does not exist" end if File.exists?("U89959_ests.fas.9") then raise TestFailed, "file 'U89959_ests.fas.9' does exist" end end Name "gt splitfasta (file exists)" Keywords "gt_splitfasta" Test do run "cp #{$testdata}U89959_genomic.fas ." run "touch U89959_genomic.fas.1" run_test("#{$bin}gt splitfasta U89959_genomic.fas", :retval => 1) grep last_stderr, /exists already/ end Name "gt splitfasta (-force)" Keywords "gt_splitfasta" Test do run "cp #{$testdata}U89959_genomic.fas ." run "touch U89959_genomic.fas.1" run_test "#{$bin}gt splitfasta -force U89959_genomic.fas" if not File.exists?("U89959_genomic.fas.1") then raise TestFailed, "file 'U89959_genomic.fas.1' does not exist" end end Name "gt splitfasta (-targetsize)" Keywords "gt_splitfasta" Test do run "cp #{$testdata}U89959_genomic.fas ." run_test "#{$bin}gt splitfasta -targetsize 1 U89959_genomic.fas" if not File.exists?("U89959_genomic.fas.1") then raise TestFailed, "file 'U89959_genomic.fas.1' does not exist" end end Name "gt splitfasta (-splitdesc, nonexistent file)" Keywords "gt_splitfasta" Test do run_test("#{$bin}gt splitfasta -splitdesc . #{$testdata}nonexistent_file", :retval => 1) grep last_stderr, /does not exist or is not readable/ end Name "gt splitfasta (empty file)" Keywords "gt_splitfasta" Test do run_test("#{$bin}gt splitfasta #{$testdata}empty_file", :retval => 1) grep last_stderr, /is empty/ end Name "gt splitfasta (corrupt file)" Keywords "gt_splitfasta" Test do run_test("#{$bin}gt splitfasta #{$testdata}gt_bioseq_fail_2.fas", :retval => 1) grep last_stderr, /file is not in FASTA format/ end Name "gt splitfasta (-splitdesc)" Keywords "gt_splitfasta" Test do run_test "#{$bin}gt splitfasta -splitdesc . #{$testdata}foobar.fas" if not File.exists?("foo.fas") then raise TestFailed, "file 'foo.fas' does not exist" end if not File.exists?("bar.fas") then raise TestFailed, "file 'bar.fas' does not exist" end end Name "gt splitfasta (-splitdesc, file exists)" Keywords "gt_splitfasta" Test do run "touch foo.fas" run_test("#{$bin}gt splitfasta -splitdesc . #{$testdata}foobar.fas", :retval => 1) grep last_stderr, /exists already/ end Name "gt splitfasta (-splitdesc -force)" Keywords "gt_splitfasta" Test do run "touch foo.fas" run_test "#{$bin}gt splitfasta -force -splitdesc . #{$testdata}foobar.fas" if not File.exists?("foo.fas") then raise TestFailed, "file 'foo.fas' does not exist" end if not File.exists?("bar.fas") then raise TestFailed, "file 'bar.fas' does not exist" end end Name "gt splitfasta (-splitdesc, compressed file)" Keywords "gt_splitfasta" Test do run "cp #{$testdata}foobar.fas ." run "gzip foobar.fas" run_test "#{$bin}gt splitfasta -splitdesc . foobar.fas.gz" if not File.exists?("foo.fas.gz") then raise TestFailed, "file 'foo.fas.gz' does not exist" end if not File.exists?("bar.fas.gz") then raise TestFailed, "file 'bar.fas.gz' does not exist" end end if $gttestdata then Name "gt splitfasta (large data, compressed)" Keywords "gt_splitfasta" Test do run "cp #{$gttestdata}ltrharvest/s_cer/chrAll_before-1997-10-01.fsa.gz " + "test.fas.gz" run_test("#{$bin}gt splitfasta -targetsize 2 test.fas.gz", :maxtime => 160) # check sample if not File.exists?("test.fas.2.gz") then raise TestFailed, "file 'test.fas.2.gz' does not exist" end end Name "gt splitfasta (large data, uncompressed)" Keywords "gt_splitfasta" Test do run "cp #{$gttestdata}ltrharvest/s_cer/chrAll_before-1997-10-01.fsa.gz " + "test.fas.gz" run "gunzip test.fas.gz" run_test "#{$bin}gt splitfasta -targetsize 2 test.fas" # check sample if not File.exists?("test.fas.2") then raise TestFailed, "file 'test.fas.2' does not exist" end end Name "gt splitfasta (large data, file exists)" Keywords "gt_splitfasta" Test do run "cp #{$gttestdata}ltrharvest/s_cer/chrAll_before-1997-10-01.fsa.gz " + "test.fas.gz" run "touch test.fas.2.gz" run_test("#{$bin}gt splitfasta -targetsize 1 test.fas.gz", :retval => 1, :maxtime => 120) grep last_stderr, /exists already/ end end genometools-1.5.1/testsuite/gt_stat_include.rb000066400000000000000000000054261211610345200216010ustar00rootroot00000000000000Name "gt stat -help" Keywords "gt_stat" Test do run_test "#{$bin}gt stat -help" grep last_stdout, "Report bugs to" end Name "gt stat -noop" Keywords "gt_stat" Test do run_test("#{$bin}gt stat -noop", :retval => 1) grep last_stderr, "unknown option" end Name "gt stat (no options)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_stat_test_1.out" end Name "gt stat (-genelengthdistri)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat -genelengthdistri " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_stat_test_2.out" end Name "gt stat (-exonlengthdistri)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat -exonlengthdistri " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_stat_test_3.out" end Name "gt stat (-intronlengthdistri)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat -intronlengthdistri " + "#{$testdata}standard_gene_with_introns_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_stat_test_4.out" end Name "gt stat (-genescoredistri)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat -genescoredistri " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_stat_test_5.out" end Name "gt stat (count LTR retrotransposons)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat -v #{$testdata}gt_eval_ltr_test_1.in" run "grep -v 'processing file' #{last_stdout}" run "diff #{last_stdout} #{$testdata}gt_stat_test_6.out" end Name "gt stat (-exonnumberdistri standard gene)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat -exonnumberdistri " + "#{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_stat_exonnumberdistri_standard.out" end Name "gt stat (-exonnumberdistri encode)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat -exonnumberdistri " + "#{$testdata}encode_known_genes_Mar07.gff3", :maxtime => 300 run "diff #{last_stdout} #{$testdata}gt_stat_exonnumberdistri_encode.out" end Name "gt stat (-cdslengthdistri)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat -cdslengthdistri " + "#{$testdata}standard_fasta_example_with_id.gff3" run "diff #{last_stdout} #{$testdata}gt_stat_cdslengthdistri.out" end Name "gt stat (-source)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat -source #{$testdata}standard_gene_as_tree.gff3" run "diff #{last_stdout} #{$testdata}gt_stat_source.out" end Name "gt stat (unsorted)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat #{$testdata}unsorted_gff3_file.txt" end Name "gt stat (embedded FASTA sequence)" Keywords "gt_stat" Test do run_test "#{$bin}gt stat #{$testdata}minimal_fasta.gff3" end genometools-1.5.1/testsuite/gt_suffixerator_include.rb000066400000000000000000000505211211610345200233430ustar00rootroot00000000000000def flattenfilelist(filelist) s="" filelist.each do |f| s += "#{$testdata}#{f} " end return s end def outoptionsnobck return "-tis -suf -des -sds -ssp -lcp -bwt" end def outoptions return outoptionsnobck + " -bck" end def checksfx(parts,extra,cmp,filelist,alldirs=true) filearg=flattenfilelist(filelist) if alldirs dirlist=["fwd","rev","cpl","rcl"] else dirlist=["fwd","rev"] end dirlist.each do |dirarg| extra="" if cmp extra=extra + " -cmpcharbychar" end run_test "#{$bin}gt suffixerator -v -parts #{parts} -pl " + "-algbds 10 31 80 #{extra} #{outoptions} " + "-indexname esa -dir " + dirarg + " -db " + filearg if dirarg == "cpl" or dirarg == "rcl" run_test "#{$bin}gt dev sfxmap #{outoptions} -v " + "-esa esa", :maxtime => 600 else if dirarg == "fwd" dirarg_rev = "rev" else dirarg_rev = "fwd" end run_test "#{$bin}gt suffixerator -v -parts #{parts} -pl " + "-algbds 10 31 80 #{extra} #{outoptions} " + "-indexname esa-#{dirarg_rev} -dir " + dirarg_rev + " -db " + filearg run_test "#{$bin}gt packedindex mkindex -v -indexname pck -dir " + dirarg + " -db " + filearg run_test "#{$bin}gt dev sfxmap #{outoptions} -v " + "-esa esa -pck pck -cmpsuf", :maxtime => 600 run_test "#{$bin}gt dev sfxmap #{outoptions} -v " + "-esa esa-#{dirarg_rev} -pck pck -cmplcp", :maxtime => 600 end end end def checkdc(filelist) filearg=flattenfilelist(filelist) run_test "#{$bin}gt suffixerator -v -pl -dc 64 -dccheck " + "-lcp -suf -ssp -tis -indexname sfx -db " + flattenfilelist(filelist) run_test "#{$bin}gt dev sfxmap -lcp -suf -tis -ssp -v -esa sfx", :maxtime => 600 run_test "#{$bin}gt suffixerator -v -pl -parts 3 -dc 64 " + "-lcp -suf -tis -indexname sfx3 -db " + flattenfilelist(filelist) run_test "#{$bin}gt dev sfxmap -lcp -suf -ssp -v -esa sfx3", :maxtime => 600 run "diff sfx3.suf sfx.suf" end def checkbwt(filelist) run_test "#{$bin}gt suffixerator -pl #{outoptions} -indexname sfx -db " + flattenfilelist(filelist) end Name "gt suffixerator spmopt" Keywords "gt_suffixerator spmopt" Test do run_test "#{$bin}/gt suffixerator -des -tis -ssp -dna " + "-db #{$testdata}/U89959_genomic.fas -indexname genome-idx" run "#{$bin}/gt simreads -coverage 5 -len 100 -gzip -force " + "-o genome-idx-100-5-reads.fna.gz genome-idx" run_test "#{$bin}/gt suffixerator -mirrored -v -spmopt 45 -suf -lcp -dna " + "-parts 4 -db genome-idx-100-5-reads.fna.gz" run "#{$bin}/gt sequniq -rev genome-idx-100-5-reads.fna.gz" run "mv #{last_stdout} tmp.fas" sfxopt="-pl 2 -dna -lcp -suf -tis -ssp -db tmp.fas" indexname="sfx" mirrored=1 minlen=35 if mirrored sfxopt="#{sfxopt} -mirrored" indexname="sfx-m" else indexname="sfx" run "#{$bin}/gt encseq encode -indexname seq #{last_stdout}" run "#{$bin}/gt encseq decode -mirrored seq" run "mv #{last_stdout} tmp.fas" end sfxmapopt="-tis -suf -lcp -ssp -wholeleafcheck" run_test "#{$bin}/gt suffixerator -indexname #{indexname}-#{minlen} " + "-spmopt #{minlen} #{sfxopt}", :maxtime => 1000 run_test "#{$bin}/gt dev sfxmap #{sfxmapopt} -esa #{indexname}-#{minlen}", :maxtime => 1000 run_test "#{$bin}/gt suffixerator -indexname #{indexname} #{sfxopt}", :maxtime => 1000 run_test "#{$bin}/gt dev sfxmap #{sfxmapopt} -esa #{indexname}", :maxtime => 1000 run_test "#{$bin}/gt repfind -spm -l #{minlen} -ii #{indexname}", :maxtime => 1000 run "mv #{last_stdout} result.repfind" run_test "#{$bin}/gt encseq2spm -parts 3 -l #{minlen} -spm show " + \ "-ii #{indexname}", :maxtime => 1000 run "mv #{last_stdout} result.firstcodes" run "cmp result.repfind result.firstcodes" end allfiles = [] all_fastafiles = ["Arabidopsis-C99826.fna", "Atinsert.fna", "Atinsert_seqrange_13-17_rev.fna", "Atinsert_seqrange_3-7.fna", "Atinsert_single_3.fna", "Atinsert_single_3_rev.fna", "Copysorttest.fna", "Duplicate.fna", "Ecoli-section1.fna", "Ecoli-section2.fna", "Random-Small.fna", "Random.fna", "Random159.fna", "Random160.fna", "RandomN.fna", "Reads1.fna", "Reads2.fna", "Reads3.fna", "Repfind-example.fna", "TTTN.fna", "Small.fna", "Smalldup.fna", "TTT-small.fna", "trna_glutamine.fna", "Verysmall.fna"] allfiles += all_fastafiles allmultifiles = [] all_multifastafiles = ["Atinsert.fna", "Duplicate.fna", "Small.fna", "Verysmall.fna", "Random159.fna", "Random160.fna"] allmultifiles += all_multifastafiles all_fastqfiles = ["fastq_long.fastq", "test10_multiline.fastq", "test1.fastq", "test5_tricky.fastq"] allmultifiles += all_fastqfiles allfiles += all_fastqfiles alldir = ["fwd","cpl","rev","rcl"] Name "gt suffixerator + sfxmap allfiles" Keywords "gt_suffixerator tis" Test do run_test "#{$bin}gt suffixerator -tis -ssp -indexname sfx -db " + flattenfilelist(all_fastafiles) run_test "#{$bin}gt dev sfxmap -ssp -tis -esa sfx" end Name "gt suffixerator + sfxmap" Keywords "gt_suffixerator tis" Test do all_fastafiles.each do |filename| run_test "#{$bin}gt suffixerator -tis -ssp -indexname sfx -db " + "#{$testdata}#{filename}" run_test "#{$bin}gt dev sfxmap -ssp -tis -esa sfx" end end Name "gt suffixerator all accesstypes" Keywords "gt_suffixerator tis" Test do all_fastafiles.each do |filename| ["direct", "bit", "uchar", "ushort", "uint32"].each do |sat| run_test "#{$bin}gt suffixerator -tis -indexname sfx -sat #{sat} " + "-db #{$testdata}#{filename}" end end end Name "gt suffixerator file of reads of equal length" Keywords "gt_suffixerator reads" Test do run_test "#{$bin}/gt suffixerator -des -tis -ssp -dna " + "-db #{$testdata}U89959_genomic.fas -indexname u8idx" run_test "#{$bin}/gt simreads -coverage 4 -len 100 -force -o u8.reads u8idx" run_test "#{$bin}/gt suffixerator -v #{outoptionsnobck} -dna -db u8.reads" run "grep -q '# init character encoding (eqlen ' #{last_stdout}" run_test "#{$bin}/gt dev sfxmap -bwt -suf -lcp -des -sds -ssp -esa u8.reads",\ :maxtime => 200 run_test "#{$bin}/gt suffixerator -v #{outoptionsnobck} -dir rev -dna -db u8.reads" run_test "#{$bin}/gt dev sfxmap -suf -lcp -des -sds -ssp -esa u8.reads", \ :maxtime => 200 run_test "#{$bin}/gt dev sfxmap -ownencseq2file -esa u8.reads" run "cmp u8.reads.esq u8.reads2.esq" end Name "gt suffixerator -dc 64 -dccheck -lcp -parts 1+3" Keywords "gt_suffixerator dc" Test do all_fastafiles.each do |filename| checkdc([filename]) end end Name "gt suffixerator -dc 64 -dccheck -lcp -parts 1+3 all files" Keywords "gt_suffixerator dc" Test do checkdc(all_fastafiles) end alldir.each do |dir| Name "gt suffixerator single files #{dir}" Keywords "gt_suffixerator" Test do all_fastafiles.each do |filename| run_test "#{$bin}gt suffixerator -dir #{dir} -tis -suf -bwt -lcp " + "-indexname sfx -pl -db " + "#{$testdata}#{filename}" run_test "#{$bin}gt suffixerator -storespecialcodes -dir #{dir} -tis " + "-suf -lcp -indexname sfx -pl -db " + "#{$testdata}#{filename}" run_test "#{$bin}gt suffixerator -tis -bwt -lcp -pl -ii sfx" end end end faillist = ["-indexname sfx -db /nothing", "-indexname /nothing/sfx -db #{$testdata}TTT-small.fna", "-smap /nothing -db #{$testdata}TTT-small.fna", "-dna -db #{$testdata}sw100K1.fsa", "-protein -dir cpl -db #{$testdata}sw100K1.fsa", "-dna -db #{$testdata}Random.fna RandomN.fna", "-dna -suf -pl 10 -db #{$testdata}Random.fna", "-dna -tis -sat plain -db #{$testdata}TTT-small.fna"] Name "gt suffixerator failures" Keywords "gt_suffixerator" Test do faillist.each do |failcommand| run_test "#{$bin}gt suffixerator -tis " + failcommand,:retval => 1 end end Name "gt suffixerator sfxmap failures" Keywords "gt_suffixerator" Test do allmultifiles.each do |filename| run_test "#{$bin}gt suffixerator -tis -dna -des no -sds no -ssp no " + "-indexname localidx -sat direct " + "-db #{$testdata}#{filename}" run_test "#{$bin}gt suffixerator -suf -lcp -pl -dir rev -ii localidx" run_test "#{$bin}gt dev sfxmap -tis -des -sds -esa localidx", :retval => 1 # In short read files with equal read lengths, ssptabs need not # be built explicitly. # Thus these tests only fail for non-equal length files. if !all_fastqfiles.include?(filename) then run_test "#{$bin}gt dev sfxmap -tis -ssp -esa localidx", :retval => 1 run_test "#{$bin}gt dev sfxmap -ssp -esa localidx", :retval => 1 end run_test "#{$bin}gt dev sfxmap -des -esa localidx", :retval => 1 run_test "#{$bin}gt dev sfxmap -tis -bck -esa localidx", :retval => 1 end end Name "gt suffixerator bwt" Keywords "gt_suffixerator" Test do checkbwt(all_fastafiles) end 1.upto(3) do |parts| [0,1,2].each do |withsmap| extra="" extraname="" if withsmap == 1 extra="-protein" extraname="protein" elsif withsmap == 2 extra="-smap TransProt11" extraname="TransProt11" end Name "gt suffixerator+map protein filelist #{extraname} #{parts} parts" Keywords "gt_suffixerator" Test do checksfx(parts,extra,true,["sw100K1.fsa","sw100K2.fsa"],false) end end end 0.upto(2) do |cmpval| 1.upto(2) do |parts| [0,1,2].each do |withsmap| extra="" if withsmap == 1 extra="-dna" extraname=" dna" elsif withsmap == 2 extra="-smap TransDNA" extraname=" trans" end if cmpval == 0 cmp=false elsif cmpval == 1 cmp=true else cmp=true end Name "gt suffixerator+map #{extraname} #{parts} parts" Keywords "gt_suffixerator" Test do all_fastafiles.each do |filename| checksfx(parts,extra,cmp,[filename]) end end filelist=["RandomN.fna","Random.fna","Atinsert.fna"] Name "gt suffixerator+map dna filelist#{extraname} #{parts} parts" Keywords "gt_suffixerator" Test do checksfx(parts,extra,cmp,filelist) end end end end def checkmapped(keyword,args) Name "gt suffixerator checkmapped #{keyword}" Keywords "gt_suffixerator gttestdata" Test do run_test "#{$bin}gt suffixerator #{outoptions} -algbds 3 31 90 " + "-indexname sfxidx #{args}", :maxtime => 1200 run_test "#{$bin}gt dev sfxmap #{outoptions} -v -esa sfxidx", :maxtime => 2400 run_test "#{$bin}gt dev sfxmap #{outoptionsnobck} -stream -v -esa sfxidx", :maxtime => 2400 end end def grumbach() return "#{$gttestdata}DNA-mix/Grumbach.fna/" end if $gttestdata then checkmapped("many .fna files","-db " + "#{$gttestdata}Iowa/at100K1 " + "#{grumbach()}Wildcards.fna " + "#{grumbach()}chntxx.fna " + "#{grumbach()}hs5hcmvcg.fna " + "#{grumbach()}humdystrop.fna " + "#{grumbach()}humghcsa.fna " + "#{grumbach()}humhdabcd.fna " + "#{grumbach()}humhprtb.fna " + "#{grumbach()}mipacga.fna " + "#{grumbach()}mpocpcg.fna " + "#{grumbach()}ychrIII.fna " + "-parts 3 -pl") checkmapped("swiss with parts=1", "-parts 1 -pl -db #{$gttestdata}swissprot/swiss10K " + "#{$gttestdata}swissprot/swiss1MB") checkmapped("swiss with parts=3", "-db #{$gttestdata}swissprot/swiss10K " + "#{$gttestdata}swissprot/swiss1MB -parts 3 -pl") checkmapped("at100K1", "-parts 2 -pl -smap TransDNA -db #{$gttestdata}Iowa/at100K1") checkmapped("swiss with TransProt11", "-db #{$gttestdata}swissprot/swiss10K -parts 1 -pl -smap " + "TransProt11") end SATS = ["direct", "bytecompress", "eqlen", "bit", "uchar", "ushort", "uint32"] EQLENDNAFILE = {:filename => "#{$testdata}test1.fasta", :desc => "equal length DNA", :msgs => { "bytecompress" => "cannot use bytecompress on DNA sequences"}} DNAFILE = {:filename => "#{$testdata}Atinsert.fna", :desc => "non-equal length DNA", :msgs => { "bytecompress" => "cannot use bytecompress on DNA sequences", "eqlen" => "all sequences are of equal length and no " + \ "sequence contains"}} EQLENAAFILE = {:filename => "#{$testdata}trembl-eqlen.faa", :desc => "equal length AA", :msgs => { "eqlen" => "as the sequence is not DNA", "bit" => "as the sequence is not DNA", "uchar" => "as the sequence is not DNA", "ushort" => "as the sequence is not DNA", "uint32" => "as the sequence is not DNA"}} AAFILE = {:filename => "#{$testdata}trembl.faa", :desc => "non-equal length AA", :msgs => { "eqlen" => "as the sequence is not DNA", "bit" => "as the sequence is not DNA", "uchar" => "as the sequence is not DNA", "ushort" => "as the sequence is not DNA", "uint32" => "as the sequence is not DNA"}} excludefiles = ["RandomN.fna","Small.fna","Verysmall.fna"] Name "gt sfxmap ownencseq" Keywords "gt_suffixerator ownencseq" Test do all_fastafiles.each do |filename| if not excludefiles.member?(filename) run "#{$scriptsdir}rmwildcard.rb #{$testdata}#{filename}" run_test "#{$bin}/gt suffixerator -db #{last_stdout} -dna -v -tis -sds no -des no -md5 no -indexname sfx" run_test "#{$bin}/gt dev sfxmap -ownencseq2file -esa sfx" if File.exists?("sfx.ssp") run "cmp -s sfx.ssp sfx2.ssp" end end end end SATTESTFILES = [EQLENDNAFILE, DNAFILE, EQLENAAFILE, AAFILE] SATTESTFILES.each do |file| SATS.each do |sat| Name "gt suffixerator sat #{sat} -> #{file[:desc]}" Keywords "gt_suffixerator sats" Test do if !file[:msgs][sat].nil? then retval = 1 else retval = 0 end run_test "#{$bin}/gt suffixerator -sat #{sat} -v -suf -lcp -des -sds " + \ "-ssp -tis -db #{file[:filename]} -indexname myidx", \ :retval => retval if !file[:msgs][sat].nil? then grep(last_stderr, /#{file[:msgs][sat]}/) end run_test "#{$bin}/gt dev sfxmap -suf -lcp -des -sds -ssp -esa myidx", \ :retval => retval end end end [EQLENDNAFILE, DNAFILE].each do |file| (SATS-(file[:msgs].keys)).each do |sat| Name "gt suffixerator mirror #{sat} #{file[:desc]}" Keywords "gt_suffixerator mirror #{sat}" Test do alldir.each do |dir| run_test "#{$bin}/gt suffixerator -mirrored -sat #{sat} -v -suf " + \ "-lcp -bwt -dir #{dir} -db #{file[:filename]} -indexname myidx" run "#{$scriptsdir}/add_revcmp.rb #{file[:filename]} > reverse.fna" run_test "#{$bin}/gt suffixerator -sat #{sat} -v -suf -lcp " + \ "-bwt -dir #{dir} -db reverse.fna -indexname myidx_r" run "diff myidx.suf myidx_r.suf" run "diff myidx.lcp myidx_r.lcp" run "diff myidx.bwt myidx_r.bwt" run_test "#{$bin}/gt dev sfxmap -suf -lcp -des -sds -ssp -esa myidx", \ :maxtime => 600 run_test "#{$bin}/gt dev sfxmap -suf -lcp -des -sds -ssp -esa " + \ "myidx_r", :maxtime => 600 end end end end small_fastafiles = ["Duplicate.fna", "Random-Small.fna", "Copysorttest.fna", "Random159.fna", "Random160.fna", "TTT-small.fna", "trna_glutamine.fna", "Small.fna", "Verysmall.fna", "Arabidopsis-C99826.fna"] Name "differencecover sortmaxdepth" Keywords "differencecover sortmaxdepth" Test do small_fastafiles.each do |file| file = "#{$testdata}/#{file}" run "#{$bin}/gt suffixerator -tis -db #{file} -indexname esa" [2, 10].each do |maxinsertionsort| [10, 30, 100].each do |maxbltriesort| [2, 7, 13].each do |maxdepth| run_test "#{$bin}/gt dev sfxmap -sortmaxdepth #{maxdepth} -esa " + \ "esa -v -algbds #{maxinsertionsort} #{maxbltriesort} 1000" end run_test "#{$bin}/gt suffixerator -db #{file} -indexname esa2 " + \ "-suf -v -algbds #{maxinsertionsort} #{maxbltriesort} 1000" run_test "#{$bin}/gt dev sfxmap -suf -esa esa2" end end end end # check whether -memlimit is available as an option to enable # conditional tests if !`#{$bin}/gt suffixerator -help`.match(/memlimit/).nil? then if $gttestdata then ["2L", "2R", "3L", "3R"].each do |chr| Name "gt suffixerator -memlimit D. mel #{chr}" Keywords "gt_suffixerator memlimit" Test do size = nil run "#{$bin}/gt encseq encode -indexname dmel " + \ "#{$gttestdata}ltrharvest/d_mel/" + \ "#{chr}_genomic_dmel_RELEASE3-1.FASTA.gz", \ :maxtime => 600 out = `env GT_MEM_BOOKKEEPING=on GT_ENV_OPTIONS=-spacepeak #{$bin}/gt suffixerator -v -suf -ii dmel` if m = out.match(/space peak in megabytes: ([.0-9]+) /) then size = m[1].to_f else raise "could not get normal space peak" end [0.25, 0.5, 0.75].each do |frac| limit = size * frac run_test "env GT_MEM_BOOKKEEPING=on GT_ENV_OPTIONS=-spacepeak " + \ "#{$bin}/gt suffixerator " + \ "-suf -v " + \ "-memlimit #{limit.floor}MB " + \ "-ii dmel", :maxtime => 600 lastout = nil File.open(last_stdout) do |f| out = f.read if m = out.match(/space peak in megabytes: ([.0-9]+) /) then mysize = m[1].to_f else raise "could not get actual space peak!" end if mysize > limit and mysize - limit > (mysize/10) then raise "required size (#{mysize}) was higher than limit (#{limit})" end end end end end end Name "gt suffixerator -memlimit excludes -parts" Keywords "gt_suffixerator memlimit" Test do run "#{$bin}/gt suffixerator -db #{$testdata}/at1MB -indexname foo " + \ "-parts 3 -memlimit 2MB", :retval => 1 grep(last_stderr, /exclude each other/) end Name "gt suffixerator -memlimit invalid size" Keywords "gt_suffixerator memlimit" Test do run "#{$bin}/gt suffixerator -db #{$testdata}/at1MB -indexname foo " + \ "-memlimit 2TB", :retval => 1 grep(last_stderr, /one of the keywords MB and GB/) end Name "gt suffixerator -memlimit invalid size" Keywords "gt_suffixerator memlimit" Test do run "#{$bin}/gt suffixerator -db #{$testdata}/at1MB -indexname foo " + \ "-memlimit 2.2GB", :retval => 1 grep(last_stderr, /one of the keywords MB and GB/) end end Name "gt sfxmap spmitv" Keywords "gt_suffixerator spmitv" Test do run "#{$bin}/gt suffixerator -db #{$testdata}/Reads2.fna -suf -lcp" run "#{$bin}/gt dev sfxmap -spmitv -esa Reads2.fna" run "diff #{last_stdout} #{$testdata}/Reads2-spmitv.txt" end Name "gt sfxmap lcp-interval trees bottomup" Keywords "gt_suffixerator lcpitv" Test do run "#{$bin}/gt suffixerator -db #{$testdata}/Reads2.fna -suf -lcp " + \ "-indexname sfx" run "#{$bin}/gt dev sfxmap -enumlcpitvtreeBU -esa sfx > withBU.txt" run "#{$bin}/gt dev sfxmap -enumlcpitvtree -esa sfx > noBU.txt" run "diff withBU.txt noBU.txt" end genometools-1.5.1/testsuite/gt_tallymer_include.rb000066400000000000000000000040421211610345200224500ustar00rootroot00000000000000def runtyrmkifail(args) inputfile = "#{$testdata}Duplicate.fna" Name "gt tallymer mkindex failure" Keywords "gt_tallymer mkindex" Test do run_test "#{$bin}gt suffixerator -db #{inputfile} -tis " + "-suf -lcp -pl -dna -indexname sfxidx" run_test "#{$bin}gt tallymer mkindex " + args + " sfxidx", :retval => 1 end end def checktallymer(reffile,mersize) reffilepath="#{$testdata}#{reffile}" if reffile == 'at1MB' query="#{$testdata}U89959_genomic.fas" else query="#{$testdata}at1MB" end reftestdir="#{$gttestdata}tallymer" outoptions="-counts -pl -mersize #{mersize} -minocc 2 -maxocc 30" run_test "#{$bin}gt suffixerator -pl -dna -tis -suf -lcp " + "-indexname sfxidx -db #{reffilepath}", :maxtime => 360 run_test("#{$bin}gt tallymer mkindex -test -mersize #{mersize} -esa sfxidx", :maxtime => 360) suffix="tyrmkiout" run "mv #{last_stdout} #{reffile}.gt#{suffix}" run "cmp -s #{reffile}.gt#{suffix} #{reftestdir}/#{reffile}.#{suffix}" run_test "#{$bin}gt tallymer mkindex #{outoptions} " + "-indexname tyr-index -esa sfxidx", :maxtime => 360 if not File.zero?("tyr-index.mct") suffix="tyrseaout" run_test "#{$bin}gt tallymer search -strand fp -output qseqnum qpos " + "counts sequence -test -tyr tyr-index -q #{query}", :maxtime => 360 run "mv #{last_stdout} #{reffile}.gt#{suffix}" run "cmp -s #{reffile}.gt#{suffix} #{reftestdir}/#{reffile}.#{suffix}" end end tyrfiles = {"Atinsert.fna" => 19, "Duplicate.fna" => 12, "Random.fna" => 10, "Random159.fna" => 6, "Random160.fna" => 7, "RandomN.fna" => 3, "trna_glutamine.fna" => 10, "at1MB" => 20} runtyrmkifail("-mersize 21 -pl") runtyrmkifail("-mersize 21 -pl -minocc") runtyrmkifail("-pl -minocc 30 -maxocc 40") if $gttestdata then tyrfiles.each_pair do |reffile,mersize| Name "gt tallymer #{reffile}" Keywords "gt_tallymer gttestdata" Test do checktallymer(reffile,mersize) end end end genometools-1.5.1/testsuite/gt_trieins_include.rb000066400000000000000000000003021211610345200222670ustar00rootroot00000000000000Name "gt trieins" Keywords "gt_trieins" Test do run "#{$bin}gt suffixerator -indexname trieins-idx -pl 1 -tis -db #{$testdata}trna_glutamine.fna" run "#{$bin}gt dev trieins trieins-idx" end genometools-1.5.1/testsuite/gt_uniq_include.rb000066400000000000000000000017061211610345200215770ustar00rootroot00000000000000Name "gt uniq -help" Keywords "gt_uniq" Test do run_test "#{$bin}gt uniq -help" grep last_stdout, "Report bugs to" end Name "gt uniq -noop" Keywords "gt_uniq" Test do run_test("#{$bin}gt uniq -noop", :retval => 1) grep last_stderr, "unknown option" end Name "gt uniq nonexistent file" Keywords "gt_uniq" Test do run_test("#{$bin}gt uniq #{$testdata}nonexistent_file", :retval => 1) end Name "gt uniq corrupt file" Keywords "gt_uniq" Test do run_test("#{$bin}gt uniq #{$testdata}corrupt.gff3", :retval => 1) end Name "gt uniq test standard gene" Keywords "gt_uniq" Test do run_test "#{$bin}gt uniq -v -o test.out " + "#{$testdata}standard_gene_as_tree.gff3" run "diff test.out #{$testdata}standard_gene_as_tree.gff3" end 1.upto(6) do |i| Name "gt uniq test #{i}" Keywords "gt_uniq" Test do run_test "#{$bin}gt uniq #{$testdata}gt_uniq_test_#{i}.gff3" run "diff #{last_stdout} #{$testdata}gt_uniq_test_#{i}.out" end end genometools-1.5.1/testsuite/ltresult.rb000066400000000000000000000241771211610345200203130ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # class LTRAnnotation attr_accessor :indexm, :indexs, :data, :file, :commentlines def initialize @data = [] @commentlines = [] @indexm = {} @indexs = {} @file = "" end # The 'load_from_*' functions require at least that the first two items on # a line represent a LTR retrotransposon start and end. How the rest of each # line is read and processed depends on the file type, according to each # load function. def load_from_ltrharvest(file) File.open(file) do |ltr| @file = file ltr.each_line do |line| if line[0].chr != "#" then (sltr,eltr,lltr,sleft,eleft,lleft,sright,eright,lright) = \ line.split(" ").collect{|i| i.strip} smiddle = (eleft.to_i+1).to_s newitem = {:sltr => sltr.to_i, :eltr => eltr.to_i, :lltr => lltr.to_i, :sleft => sleft.to_i, :eleft => eleft.to_i, :lleft => lleft.to_i, :sright => sright.to_i, :eright => eright.to_i, :lright => lright.to_i} @data.push(newitem) @indexm[smiddle] = newitem @indexs[sltr] = newitem else @commentlines.push(line.chop) end end end end def load_from_berkeley(file) File.open(file) do |anno| @file=file anno.each_line do |line| if line[0].chr != "#" then (sltr, eltr, fbti_id, family_name, fbgn_id, chromosome_arm, release)\ = line.split(" ").collect{|i| i.strip} newitem = {:sltr => sltr.to_i, :eltr => eltr.to_i, :length => eltr.to_i - sltr.to_i + 1, :fbti_id => fbti_id, :family_name => family_name, :fbgn_id => fbgn_id, :chromosome_arm => chromosome_arm, :release => release} @data.push(newitem) @indexs[sltr] = newitem else @commentlines.push(line.chop) end end end end def load_from_custom(file) File.open(file) do |anno| @file=file anno.each_line do |line| if line[0].chr != "#" then (sltr, eltr, lltr, lname, ltype, lstrand)\ = line.split(" ").collect{|i| i.strip} newitem = {:sltr => sltr.to_i, :eltr => eltr.to_i, :lltr => lltr.to_i, :lname => lname, :ltype => ltype, :lstrand => lstrand} @data.push(newitem) @indexs[sltr] = newitem else @commentlines.push(line.chop) end end end end def print_content @data.each do |item| puts item.inspect end end def merge_hits(ref_hit, pred_hit) return {:s_pred => pred_hit[:sltr], :e_pred => pred_hit[:eltr], :s_ref => ref_hit[:sltr], :e_ref => ref_hit[:eltr], :length => ref_hit[:length], :fbti_id => ref_hit[:fbti_id], :family_name => ref_hit[:family_name], :fbgn_id => ref_hit[:fbgn_id], :chromosome_arm => ref_hit[:chromosome_arm], :release => ref_hit[:release] } end #compare a LTRharvest annotation with a reference annotation def compare(refAnno, difference=0, shift=0, without_ltrs=false) tp_list = [] htp_startpos_list = [] htp_endpos_list = [] fp_list = [] fn_list = [] foundlist = [] nof_fn = 0 @data.each do |item| found = false item[:sltr] += shift item[:eltr] += shift if without_ltrs then item[:sltr] += item[:lleft] item[:eltr] -= item[:lright] end refAnno.data.each do |ref_item| p_start = false p_end = false if (ref_item[:sltr] - difference <= item[:sltr] && \ item[:sltr] <= ref_item[:sltr] + difference) then p_start = true end if (ref_item[:eltr] - difference <= item[:eltr] && \ item[:eltr] <= ref_item[:eltr] + difference) then p_end = true end if (p_start and not p_end) then htp_startpos_list.push(merge_hits(ref_item, item)) foundlist.push([ref_item[:sltr],ref_item[:eltr]]) found = true elsif (p_end and not p_start) then htp_endpos_list.push(merge_hits(ref_item, item)) foundlist.push([ref_item[:sltr],ref_item[:eltr]]) found = true elsif (p_start and p_end) then tp_list.push(merge_hits(ref_item, item)) foundlist.push([ref_item[:sltr],ref_item[:eltr]]) found = true end end if !found then fp_list.push(item) end end fn_list = refAnno.data.reject do |ref_item| foundlist.include?([ref_item[:sltr],ref_item[:eltr]]) end yield tp_list, htp_startpos_list, htp_endpos_list,\ fp_list, fn_list, difference end #output comparison results in old evalscript format def compare_output(refAnno, difference) compare(refAnno, 20) do |tp_list, htp_startpos_list, htp_endpos_list,\ fp_list, fn_list, difference| puts "# compared start- and endpositions from \n# file \"#{@file}\" and\n#"\ + " file \"#{refAnno.file}\"\n#" puts "# parameters from LTRharvest (comments from\n# file \"#{@file}\"):" @commentlines.each do |line| puts line end puts "#\n# read #{refAnno.data.length} annotations of" +\ " LTR retrotransposons from\n" +\ "# file #{refAnno.file} \n#" puts("# results: each row = 1 LTR-pair\n" +\ "# startpos = 5'-boundary (of leftLTR)\n" +\ "# endpos = 3'-boundary (of rightLTR)\n#\n" +\ "# start- and endpositions may vary +/-#{difference}" +\ "bp.\n#") puts "# true positive(s) (TP) = #{tp_list.length}" puts "# half true positive(s) (TP) = #{htp_startpos_list.length\ + htp_endpos_list.length}" puts "# false positive(s) (FP) = #{fp_list.length}" puts "# false negative(s) (FN) = #{fn_list.length}" puts "#" # puts "# duplicated TP predictions = " #? puts "#" #print TPs puts "# #{tp_list.length} true positive(s) (TP)\n" +\ "# startposition endposition " +\ "+/-startposition_berkeley +/-endposition_berkeley " +\ "length FBti_id family_name FBgn_id chromosome_arm release" tp_list.sort{|i1, i2| i1[:s_pred] <=> i2[:s_pred]}.each do |tp| puts "#{tp[:s_pred]} #{tp[:e_pred]} #{tp[:s_ref]-tp[:s_pred]} "\ +"#{tp[:e_ref]-tp[:e_pred]} #{tp[:length]} #{tp[:fbti_id]} "\ +"#{tp[:family_name]} #{tp[:fbgn_id]} #{tp[:chromosome_arm]} "\ +"#{tp[:release]}" end #print hTPs puts "# #{htp_startpos_list.length} half true positive(s) (only first position correct)\n" +\ "# startposition false_endposition "+\ "+/-startposition_berkeley berkeley_endposition "+\ "length FBti_id family_name FBgn_id chromosome_arm release" htp_startpos_list.sort{|i1, i2| i1[:s_pred] <=> i2[:s_pred]}.each do |htp| puts "#{htp[:s_pred]} #{htp[:e_pred]} #{htp[:s_ref]-htp[:s_pred]} "\ +"#{htp[:e_ref]} #{htp[:length]} #{htp[:fbti_id]} "\ +"#{htp[:family_name]} #{htp[:fbgn_id]} #{htp[:chromosome_arm]} "\ +"#{htp[:release]}" end puts "# #{htp_endpos_list.length} half true positive(s) (only second position correct)\n" +\ "# false_startposition endposition "+\ "berkeley_startposition +/-endposition_berkeley"+\ "length FBti_id family_name FBgn_id chromosome_arm release" htp_endpos_list.sort{|i1, i2| i1[:s_pred] <=> i2[:s_pred]}.each do |htp| puts "#{htp[:s_pred]} #{htp[:e_pred]} #{htp[:s_ref]} "\ +"#{htp[:e_ref]-htp[:e_pred]} #{htp[:length]} #{htp[:fbti_id]} "\ +"#{htp[:family_name]} #{htp[:fbgn_id]} #{htp[:chromosome_arm]} "\ +"#{htp[:release]}" end #print FPs puts "# #{fp_list.length} false positive(s) (FP)\n" +\ "# false_startposition false_endposition length " +\ "startleftLTR endleftLTR lengthleftLTR " +\ "startrightLTR endrightLTR lengthrightLTR" fp_list.sort{|i1, i2| i1[:sltr] <=> i2[:sltr]}.each do |fp| puts "#{fp[:sltr]} #{fp[:eltr]} #{fp[:lltr]} "\ +"#{fp[:sleft]} #{fp[:eleft]} #{fp[:lleft]} "\ +"#{fp[:sright]} #{fp[:eright]} #{fp[:lright]}" end #print FNs puts "# #{fn_list.length} false negative(s) (FN)\n" +\ "# not predicted startposition, not predicted endposition" fn_list.sort{|i1, i2| i1[:sltr] <=> i2[:sltr]}.each do |fn| puts "#{fn[:sltr]} #{fn[:eltr]} #{fn[:length]} #{fn[:fbti_id]} "\ +"#{fn[:family_name]} #{fn[:fbgn_id]} #{fn[:chromosome_arm]} "\ +"#{fn[:release]}" end end end end #mixin for arbitrary decimal rounding class Float def round_to(x) (self * 10**x).round.to_f / 10**x end def ceil_to(x) (self * 10**x).ceil.to_f / 10**x end def floor_to(x) (self * 10**x).floor.to_f / 10**x end end genometools-1.5.1/testsuite/ltrun.rb000066400000000000000000000107471211610345200175770ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # #require 'escape' require 'tmpdir' class LTRharvestRun attr_accessor :config, :opts def initialize(job, config=nil, opts=nil) #default options, can be overridden using the 'config' parameter @config = { :seed =>"40", #e.g. "40" :minlenltr => 100, #e.g. "100" :maxlenltr => 1000, #e.g. "1000" :mindistltr => 1500, #e.g. "1500" :maxdistltr => 15000, #e.g. "15000" :similar => 90, #e.g. "90.0" :mintsd => 4, #e.g. "4" :maxtsd => 20, #e.g. "20" :motif => "", #e.g. "tgca" ; not set by default :motifmis => "", #e.g. "0" ; requires motif :overlaps => "best", #e.g. "no"|"best"|"all" :xdrop => 5, #e.g. "5" :mat => 2, #e.g. "2" :mis => -2, #e.g. "-2" :ins => -3, #e.g. "-3" :del => -3, #e.g. "-3" } #default options, can be overridden using the 'opts' parameter #e.g. when files should be written to persistent directories instead of #tempdir #at least specify a path to the 'gt' executable! @opts ={ :gtpath => nil, :outdir => Dir.tmpdir, :with_innerfile=>true, :with_outfile=>true, :with_gff3file=>true, :with_fastafile=>true } #job id, e.g. species @job = job #override defaults @config.merge!(config) unless config.nil? @opts.merge!(opts) unless opts.nil? @ids = [] @seqs = {} end def add_seq(chr, file, config={}) raise "sequence with id #{chr} duplicate" if @seqs.has_key?(chr) raise "file #{file}.prj not accessible" if !File.exist?("#{file}.prj") @ids.push(chr) @seqs[chr] = { :chr => chr, :file => file, :config => config, :innerfile => "#{@opts[:outdir]}/#{@job}_#{chr}"\ +"-innerregion.fsa", :gff3file => "#{@opts[:outdir]}/#{@job}_#{chr}.gff3", :fastafile => "#{@opts[:outdir]}/#{@job}_#{chr}.fsa", :resultfile => "#{@opts[:outdir]}/#{@job}_#{chr}.result" } end def each_seq @ids.each do |id| nr = id chr = @seqs[id] args = [] if File.exist?("#{chr[:file]}.prj") args.push("ltrharvest") myconf = @config.merge(chr[:config]).reject{|k,v| (v.nil?||v=="")} myconf.each do |k,v| args.push("-#{k} #{v.to_s}") end args.push("-v") args.push("-out #{chr[:fastafile]}") unless !@opts[:with_fastafile] args.push("-gff3 #{chr[:gff3file]}") unless !@opts[:with_gff3file] args.push("-outinner #{chr[:innerfile]}") unless !@opts[:with_innerfile] args.push("-index #{chr[:file]}") args.push("> #{chr[:resultfile]}") unless !@opts[:with_outfile] yield nr, chr, args, myconf end end end # set 'test' to true to enable stest return code checking def run_seq(test=false) if @opts[:gtpath].nil?\ || !File.exist?(@opts[:gtpath])\ || !File.executable?(@opts[:gtpath]) then raise "gt binary not found or executable: #{@opts[:gtpath]}" end each_seq do |nr, chr, arglist, chr_cfg| if test then run "#{@opts[:gtpath]} #{arglist.join(" ")}", :maxtime => 500 else STDERR.puts "Running #{@job}: seq '#{nr}'" success = Kernel.system("#{@opts[:gtpath]} #{arglist.join(" ")}") end if success or test then yield nr, chr[:resultfile], chr[:innerfile], \ chr[:gff3file], chr[:fastafile] else raise "canceled command: #{@opts[:gtpath]} #{arglist.join(" ")}" end end end end genometools-1.5.1/testsuite/multidimarray.rb000066400000000000000000000027651211610345200213170ustar00rootroot00000000000000class MultiDimensionalArray def initialize(*dimensions) @dimensions = Array.new(dimensions.length) @factors = Array.new(dimensions.length) product = 1 i = dimensions.length - 1 while i>=0 @dimensions[i] = dimensions[i] @factors[i] = product product *= @dimensions[i] i -= 1 end @data = Array.new(product) end def getOffset(indices) if indices.length != @dimensions.length STDERR.puts "#{$0}: getOffset indices.length = #{indices.length} " + "!= #{@dimensions.length} = @dimensions.length" exit 1 end offset = 0 0.upto(@dimensions.length-1) do |i| if indices[i] < 0 or indices[i] >= @dimensions[i] STDERR.puts "#{$0}: illegal value indices[#{i}]=#{indices[i]}" exit 1 end offset += @factors[i] * indices[i] end return offset end def [](*indices) return @data[self.getOffset(indices)] end def []=(*indicesAndValue) value = indicesAndValue.pop @data[self.getOffset(indicesAndValue)] = value end def enumaccesstubles() numofwheels = @dimensions.length wheelspace = Array.new(numofwheels) idx = numofwheels - 1 0.upto(numofwheels-1) do |i| wheelspace[i] = 0 end loop do wheelspace[idx] += 1 if wheelspace[idx] == @dimensions[idx] wheelspace[idx] = 0 if idx == 0 break end idx -= 1 else idx = numofwheels-1 yield wheelspace end end end end genometools-1.5.1/testsuite/scripts_include.rb000066400000000000000000000002531211610345200216140ustar00rootroot00000000000000Name "gmap2gff3" Keywords "scripts" Test do run "#{$scriptsdir}gmap2gff3 #{$testdata}gmap2gff3_prob.gmap" run "diff #{last_stdout} #{$testdata}gmap2gff3_prob.out" end genometools-1.5.1/testsuite/stest.rb000077500000000000000000000274441211610345200176020ustar00rootroot00000000000000#!/usr/bin/env ruby # Patrick Maass, 2006 require 'fileutils' require 'thread' class TestFailed < Exception end class TestError < Exception end class Testsuite attr_writer :nof_threads attr_reader :outlock def initialize @tests = [] @nof_threads = 1 @outlock = Mutex.new end def run inlock = Mutex.new threads = [] 1.upto(@nof_threads) do |n| threads << Thread.new(n, @tests, inlock) do |n, tests, inlock| while tests.length > 0 t = nil inlock.synchronize do t = tests.shift end if !t.nil? t.process end end end end threads.each do |thread| thread.join end end def threaded? (@nof_threads > 1) end def add(t) @tests.push(t) end end $testsuite = Testsuite.new class Test @@id = 1 @@prefix = "stest" @@failed = 0 @@errors = 0 @@feature_check = nil def self.prefix(str) @@prefix = str end def self.have_features(&bl) @@feature_check = bl end def initialize(str) @name = str @code = nil @id = @@id @@id += 1 @requirements = nil end def requires(str) @requirements = str end def code(block) @code = block end def keywords(str) @keywords ||= nil @did_run ||= nil raise "keyword reset" if @keywords raise "already run" if @did_run @keywords = {} str.split.each do |kw| if kw =~ /--/ kws = kw.split(/--/) while kws.size > 0 do k = kws.join("--") @keywords[k] = true kws.pop end end @keywords[kw] = true end end def setup_dir begin ds = "#{@@prefix}/test#{@id}" if File.exists?(ds) FileUtils.rm_r(ds) end FileUtils.mkdir_p(ds) FileUtils.chdir(ds) rescue => e raise TestError, "could not create test dir '#{ds}'" end end def self.problems return @@failed, @@errors end def process if @code != nil self.test($arguments["keywords"], $arguments["select"], $arguments["name"], &@code) end end def printmsg(msg) if $testsuite.threaded? $testsuite.outlock.synchronize do STDOUT.print msg end else STDOUT.print msg end end def test(keywords, selection, name) raise "already run" if @did_run if name if not @name =~ name return end end if keywords @keywords ||= {} if not keywords.is_selected(@keywords) return end end if selection if not selection[@id] return end end if @requirements if @@feature_check ok, info = @@feature_check.call(@requirements) if not ok if info then STDOUT.printf "%3d: %-60s: #{info}\n", @id, @name end return end end end msg = "" pid = fork do msg << "%3d: %-60s: " % [@id, @name] if !$testsuite.threaded? STDOUT.print msg STDOUT.flush msg = "" end e_info = nil e_code = 0 begin setup_dir yield rescue TestFailed => e e_info = e e_code = 1 rescue Interrupt => e exit 3 rescue Exception => e e_info = e e_code = 2 end if e_info i = "failed" if e_code != 1 then i = "error" end msg << i << "\n" msg << " [ problem: #{e_info.message}" << "\n" msg << " in: #{Dir.pwd} ]" << "\n" File.open("stest_error", "w") do |f| f.puts("Test #{@id} '#{@name}': #{i}:") f.puts("#{e_info.message}:") f.puts(e_info.backtrace) end printmsg msg exit e_code else msg << "ok" << "\n" printmsg msg exit 0 end end printmsg msg begin p, s = Process::waitpid2(pid) rescue Interrupt => e puts "interrupted" exit 1 end if s.exitstatus == 1 @@failed += 1 elsif s.exitstatus == 2 @@errors += 1 end @did_run = true end end def Test.exec(cmd, env, out_filename, err_filename, cmd_filename, max_t) pid = fork do env.each do |k,v| ENV[k] = v end begin File.open(cmd_filename, "w") do |f| env.each do |k, v| f.print "#{k}=#{v} " end # help for debugging failed tests: f.print "$CMD_PREFIX " f.puts(*cmd) end f_out = File.new(out_filename, "w") f_err = File.new(err_filename, "w") $stdout.reopen(f_out) $stderr.reopen(f_err) rescue Errno::ENOENT => e exit 90 end begin Kernel.exec(*cmd) rescue Errno::ENOENT => e # XXX: better solution (signal/kill?) exit 91 end end time_left = max_t sleep_step = 0.1 s = false while time_left > 0 sleep(sleep_step) time_left -= sleep_step p, s = Process.waitpid2(pid, Process::WNOHANG) break if s end if not s Process.kill("HUP", pid) sleep(sleep_step) p, s = Process.waitpid2(pid, Process::WNOHANG) raise TestError, "'#{cmd}' did not finish on time" end if not s.exited? if s.signaled? raise TestError, "'#{cmd}' received signal #{s.termsig}" else raise TestError, "'#{cmd}' stopped" end end if s.exitstatus == 90 raise TestError, "cannot create output files for '#{cmd}'" end if s.exitstatus == 91 raise TestError, "exec failed for '#{cmd}'" end if s.exitstatus == 92 raise TestError, "exec error for '#{cmd}'" end return s.exitstatus end def Test.run(cmd, env, o_fn, r_fn, c_fn, rv, max_t) r = Test.exec(cmd, env, o_fn, r_fn, c_fn, max_t) if r != rv raise TestFailed, "unexpected return code: #{r} != #{rv}" end end class Keywords def initialize(kw_str) e, @root = OrNode.parse(kw_str, 0) if e != kw_str.size raise "extra tokens after '#{kw_str[0, e]}': '#{kw_str[e,kw_str.size]}'" end end def is_selected(valmap) return @root.is_selected(valmap) end class Node def self.skip_space(str, i) if i.class == NilClass raise "hu" end while str[i] and str[i] == ?\s i += 1 end return i end end class VarNode < Node def self.parse(str, i) j = skip_space(str, i) if str[j] == ?( j += 1 j, n = OrNode.parse(str, j) j = skip_space(str, j) if str[j] != ?) raise "missing ')'" end j += 1 return j, n else s = j while str[j] and str[j] != ?\s and str[j] != ?( and str[j] != ?) j += 1 end vn = str[s, j - s] if vn.size < 1 then raise "empty variable" end n = VarNode.new(vn) return j, n end end def is_selected(valset) if valset[@name] then return true end return false end def print puts "var: #{@name}" end private def initialize(name) @name = name end end class NotNode < Node def self.parse(str, i) is_neg = false j = skip_space(str, i) if str[j, 4] =~ /^not[ ()]?$/ j += 3 is_neg = true end j, n1 = VarNode.parse(str, j) if is_neg then n = NotNode.new(n1) else n = n1 end return j, n end def is_selected(valset) return !@n.is_selected(valset) end def print puts "not:" @n.print end private def initialize(n) @n = n end end class AndNode < Node def self.parse(str, i) j = skip_space(str, i) j, n1 = NotNode.parse(str, j) j = skip_space(str, j) if str[j, 4] =~ /^and[ ()]?$/ j += 3 j, n2 = AndNode.parse(str, j) n = self.new(n1, n2) return j, n end return j, n1 end def is_selected(valset) return @n1.is_selected(valset) && @n2.is_selected(valset) end def print puts "A[" @n1.print puts "and" @n2.print puts "]" end private def initialize(n1, n2) @n1 = n1; @n2 = n2 end end class OrNode < AndNode def self.parse(str, i) j = skip_space(str, i) j, n1 = AndNode.parse(str, j) j = skip_space(str, j) if str[j, 3] =~ /^or[ ()]?$/ j += 2 j, n2 = OrNode.parse(str, j) n = self.new(n1, n2) return j, n else return j, n1 end end def is_selected(valset) return @n1.is_selected(valset) || @n2.is_selected(valset) end def print puts "O[" @n1.print puts "or" @n2.print puts "]" end end end # Interface to Test class and helpers # we use global variables for a simple user interface $arguments = {} $curr_test = nil $run_no = 1 def run(str, opts = {}) rv = 0 if opts[:retval] rv = opts[:retval].to_i end o_fn = opts[:stdout] if not o_fn then o_fn = "stdout_#{$run_no}" end r_fn = opts[:stderr] if not r_fn then r_fn = "stderr_#{$run_no}" end c_fn = "run_#{$run_no}" $run_no += 1 cmd = [ str ] if opts[:arguments] cmd += opts[:arguments] end env = opts[:env] env ||= {} max_t = opts[:maxtime] max_t ||= 60 Test.run(cmd, env, o_fn, r_fn, c_fn, rv, max_t) Thread.current[:last_stdout] = o_fn Thread.current[:last_stderr] = r_fn end def last_stdout Thread.current[:last_stdout] end def last_stderr Thread.current[:last_stderr] end def failtest(msg) raise TestFailed, msg end def grep(f, patt, inverse=false) if not patt.respond_to?(:source) patt = Regexp.new(patt) end hit = nil if f.respond_to?(:to_str) files = [ f ] else files = f end files.each do |fn| File.open(fn) do |f| m = f.grep patt hit = m && m.size > 0 end if hit then break end end p = "missing" if inverse then hit = !hit p = "unexpected" end if not hit raise TestFailed, "#{p} /#{patt.source}/ in #{files.join(" / ")}" end end def write_file(fn, str) File.open(fn, "w") do |f| # 1. remove first and last line # 2. remove offset a = str.split("\n") e = a.size - 1 a[1] =~ /^( *)/ off = $1.size a.each_with_index do |l, i| next if i == 0 next if i == e f.puts "#{l[off, l.size]}" end end end def Name(str) t = Test.new(str) $curr_test = t end alias Description Name alias Descr Name def Keywords(str) t = $curr_test t.keywords(str) end def Requires(str) t = $curr_test t.requires(str) end def Test(&block) t = $curr_test t.code(block) $testsuite.add(t) end def OnError f, e = Test.problems if f > 0 || e > 0 yield(f, e) end end # Set defaults Test.prefix "stest_#{File.basename($0, ".rb")}" $runpath = Dir.pwd # Set arguments from command line testfile = nil if ARGV.size > 0 i = 0 while i < ARGV.size do a = ARGV[i] if a[0] == ?- then v = ARGV[i + 1] k = a[1..a.size] $arguments[k] ||= "" av = [] while ARGV[i + 1] and ARGV[i + 1][0] != ?- av.push(ARGV[i + 1]) i += 1 end $arguments[k] = if av.size > 0 then av.join(" ") else "yes" end elsif $0 == __FILE__ and not testfile testfile = a Test.prefix "stest_#{File.basename(testfile, ".rb")}" else raise "invalid argument '#{a}'" end i += 1 end end # Handle built-in options if $arguments["keywords"] keywords = $arguments["keywords"] $arguments["keywords"] = Keywords.new(keywords) end if $arguments["select"] sel = $arguments["select"] $arguments["select"] = {} if sel =~ /(\d+)\.\.(\d+)/ Range.new(Integer($1), Integer($2)).each do |id| $arguments["select"][Integer(id)] = true end else sel.split.each do |id| $arguments["select"][Integer(id)] = true end end end if $arguments["name"] $arguments["name"] = Regexp.new($arguments["name"]) end if $0 == __FILE__ if not testfile raise "missing test file argument" end require testfile OnError do exit(1) end end genometools-1.5.1/testsuite/stest_tests.rb000077500000000000000000000155731211610345200210240ustar00rootroot00000000000000 # Patrick Maass, 2006 if $0 == __FILE__ require 'stest' at_exit do OnError do exit 1 end end end def run_g(str, opts = {}) cmd = {} prefix = "" if $arguments["valgrind"] == "yes" prefix = "valgrind --leak-check=yes " end opts[:stdout] = "std_out" opts[:stderr] = "std_err" run(prefix + str, opts) if $arguments["valgrind"] == "yes" run %{grep "ERROR SUMMARY: 0 errors" std_out std_err} end end def run_stest(fn, str, args = [], opts = {}) tfn = "#{fn}.rb" File.open(tfn, "w") do |f| f.print(str) end run "ruby #{$runpath}/stest.rb #{tfn} #{args.join(" ")}", opts end Description "Hello, World" Keywords "basics--apply--run" Test do run_g "echo huhu" run "echo hello" end Name "Hello, World 2 and a long ending" Keywords "basics--retval" Test do run("grep foo barbaz", :retval => 2) end Descr "Unavailable executable" Keywords "basics--no-exec" Test do run_stest "tt", %{ Name "No such exe" Keywords "test--no-exe" Test do run "no-such-exe foo" end }, [], :retval => 1 grep(last_stdout, /problem: exec failed/) end Name "Unavailable executables" Keywords "basics--multi-no-exec" Test do run_stest "tt", %{ Name "No such exe" Keywords "test--no-exe" Test do run "no-such-exe foo" run "no-such-exe-either" end Name "No such exe2" Keywords "test--no-exe2" Test do run "some-other bar" end }, [], :retval => 1 grep(last_stdout, /problem: exec failed/) grep(last_stdout, /2:.*: error/) end Name "Arguments" Keywords "basics--run-arguments" Test do run "echo *" run "echo ______" run("echo", :arguments => [ "*" ]) end Name "Environment" Keywords "basics--environment" Test do run("sh -c 'echo LL $TATA'", :env => { "TATA" => "foo" }) end Name "Test Input Files" Keywords "basics--write-file" Test do rundir = $runpath File.open("tt.rb", "w") do |f| f.puts %{ require 'stest' Name "TestTest" Test do run "echo hello" end } end run "ruby -I#{rundir} tt.rb" end Name "Test Error Log" Keywords "basics--error-log" Test do run_stest "tt", %{ Name "Foo" Test do failtest "and this is why" end }, [], :retval => 1 grep("stest_tt/test1/stest_error", /^and this is why:$/) end Name "Numbered output files" Keywords "basics--output-files" Test do run_stest "tt", %{ Name "foo" Test do run "echo hello" run "echo huhu" end } run "test -r stest_tt/test1/stdout_1" run "test -r stest_tt/test1/stdout_2" end Name "Store commands" Keywords "basics--store-commands" Test do run_stest "tt", %{ Name "foo" Test do run "echo hello" end } File.open("stest_tt/test1/run_1") do |f| l = f.readlines if l[0].chomp != "$CMD_PREFIX echo hello" failtest "invalid command stored" end end end Name "Test without keywords" Keywords "basics--without-keywords" Test do run_stest "tt", %{ Name "foo" Test do run "echo" end }, [ "-keywords", "some" ] run "test ! -d stest_tt" run_stest "kk", %{ Name "foo" Test do run "echo hello" end }, [ "-keywords", "not foo" ] run "test -r stest_kk/test1/run_1" end Name "Keyword Tokens" Keywords "basics--keyword-parser" Test do run_stest "tt", %{ Name "foo" Keywords "x" Test do run "echo hello" end Name "bar" Keywords "notfoo foo" Test do run "echo huhu" end }, [ "-keywords", "notfoo" ] run "test ! -d stest_tt/test1" run "test -d stest_tt/test2" end Name "Test Selection" Keywords "basics--selection" Test do run_stest "tt", %{ Name "s1" Test do run "echo foo" end Name "s2" Test do run "echo bar" end Name "s3" Test do run "echo baz" end }, %w{-select 2 3} grep("stest_tt/test2/stdout_1", "^bar$") grep("stest_tt/test3/stdout_1", "^baz$") run "test ! -d stest_tt/test1" end Name "Test Selection (name)" Keywords "basics--name-selection" Test do run_stest "tt", %{ Name "foo" Test do run "echo hello" end Name "bar" Test do run "echo huhu" end }, [ "-name", "b.r" ] grep("stest_tt/test2/stdout_1", /^huhu$/) run "test ! -d stest_tt/test1" end Name "Inverse grep" Keywords "utils--inverse-grep" Test do run_stest "tt", %{ Name "gt" Test do run "echo foo" grep(last_stdout, /foo/) grep(last_stdout, /bar/, true) end } end Name "Grep string" Keywords "utils--string-grep" Test do run_stest "tt", %{ Name "sg" Test do run "echo foo" grep(last_stdout, ".") end } end Name "Multi-file grep" Keywords "utils--multi-grep" Test do run_stest "tt", %{ Name "foo" Test do run "echo foo" grep([last_stdout, last_stderr], /^foo/) run "echo bar", :stdout => "s", :stderr => "e" grep(%w{e s}, /^bar/) end } run_stest "ft", %{ Name "will-fail" Test do run "echo hello" grep([last_stdout, last_stderr], /nowhere/) end }, [], :retval => 1 grep(last_stdout, /: failed/) end Name "Return Codes" Keywords "basics--return-codes" Test do run_stest "tt", %{ Name "sg" Test do # will fail: run "echo foo", :retval => 1 end }, [], :retval => 1 end Name "Command Line Arguments" Keywords "basics--command-line" Test do run_stest "tt", %{ Name "pa" Test do run "echo #\{$arguments["hello"]\}" run "echo #\{$arguments["flag"]\}" end }, %w{-hello hello world -flag} grep("stest_tt/test1/stdout_1", /^hello world$/) grep("stest_tt/test1/stdout_2", /^yes$/) end Name "Write-File" Keywords "utils--write-file" Test do run_stest "tt", %{ Name "wf" Test do write_file "foo", %{ from column 0 indent end block } end } File.open("stest_tt/test1/foo", "r") do |f| l = f.readlines failtest "bad offset" if l[0] != "from column 0\n" failtest "line 1 != ' indent'" if l[1] != " indent\n" failtest "line 2 != 'end block'" if l[2] != "end block\n" failtest "too many lines" if l.size != 3 end end Name "Max Time" Keywords "basics--max-time" Test do run_stest "tt", %{ Name "foo" Test do run "sleep 3", :maxtime => 1 end }, [], :retval => 1 grep last_stdout, /did not finish on time/ end Name "Range Selection" Keywords "selection--ranges" Test do run_stest "tt", %{ Name "foo" Test {} Name "bar" Test {} Name "baz" Test {} }, %w{-select 2..3} grep last_stdout, "bar" grep last_stdout, "baz" grep last_stdout, "foo", true end Name "Require/Provide" Keywords "basics--require" Test do run_stest "tt", %{ Test.have_features do |str| if str =~ /^x/ true else [ false, "skipped" ] end end Name "foo" Requires "x y v" Test do run "echo" end Name "bar" Requires "k y v" Test do run "echo" end } grep last_stdout, /1:.*: ok/ end genometools-1.5.1/testsuite/testsuite.rb000077500000000000000000000123131211610345200204560ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2006-2008 Gordon Gremme # Copyright (c) 2006-2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # the GenomeTools test suite (employs ``stest''). if $0 == __FILE__ $:<< "." # favor the local stest version require 'stest' at_exit do OnError do exit 1 end end end # set some global variables if $arguments["path"] then $path=File.join($arguments["path"], "") else $path="" end if $arguments["testdata"] then $testdata=File.join($arguments["testdata"], "") else $testdata=File.join(Dir.pwd, "..", "testdata", "") end if $arguments["bin"] then $bin=File.join($arguments["bin"], "") else $bin=File.join(Dir.pwd, "..", "bin", "") end if $arguments["cur"] then $cur=$arguments["cur"] else $cur=File.join(Dir.pwd, "..", "") end $transdir=File.join(Dir.pwd, "..", "gtdata" , "trans", "") $scriptsdir=File.join(Dir.pwd, "..", "scripts", "") if $arguments["gtruby"] then $gtruby=File.join($arguments["gtruby"], "") else $gtruby=File.join(Dir.pwd, "..", "gtruby", "") end if $arguments["gtpython"] then $gtpython=File.join($arguments["gtpython"], "") else $gtpython=File.join(Dir.pwd, "..", "gtpython", "") end if $arguments["gttestdata"] then $gttestdata=File.join($arguments["gttestdata"], "") end $systemname=`uname -s` $systemname.chomp! $MEMCHECK_SUPPORTEDPLATFORMS = ["Linux", "Darwin"] # define helper function def run_test(str, opts = {}) if $arguments["memcheck"] then if $MEMCHECK_SUPPORTEDPLATFORMS.include?($systemname) then $memcheck = "valgrind --tool=memcheck --suppressions="+ File.join($testdata, "gt.supp")+ " --leak-check=yes --error-exitcode=1 -q" elsif $systemname == "OpenBSD" then $memcheck = "env MALLOC_OPTIONS='GJ'" end else $memcheck = "" end run("#{$memcheck} #{$path}#{str}", opts) end def run_ruby(str, opts = {}) run("env LD_LIBRARY_PATH=#{$cur}/lib ruby -I #{$gtruby} #{$path}#{str}", opts) end def run_python(str, opts = {}) run("env PYTHONPATH=#{$gtpython} LD_LIBRARY_PATH=#{$cur}/lib python " + \ "#{$path}#{str}", opts) end # include the actual test modules require 'gt_bed_to_gff3_include' require 'gt_cds_include' require 'gt_chseqids_include' require 'gt_consensus_sa_include' require 'gt_csa_include' require 'gt_csr_include.rb' require 'gt_encseq_include' require 'gt_eval_include' require 'gt_extractfeat_include' require 'gt_featureindex_include' require 'gt_fingerprint_include' require 'gt_genomediff_include' require 'gt_gff3_include' require 'gt_gff3validator_include' require 'gt_gtf_to_gff3_include' require 'gt_hop_include' require 'gt_id_to_md5_include' require 'gt_include' require 'gt_interfeat_include' require 'gt_ltrdigest_include' require 'gt_ltrharvest_include' require 'gt_magicmatch_include' require 'gt_matchtool_include' require 'gt_mathsupport_include' require 'gt_md5_to_id_include' require 'gt_merge_include' require 'gt_mergefeat_include' require 'gt_mgth_include' require 'gt_mmapandread_include' require 'gt_orffinder_include' require 'gt_python_include' require 'gt_readjoiner_include' require 'gt_readreads_include' require 'gt_regioncov_include' require 'gt_ruby_include' require 'gt_sambam_include' require 'gt_script_filter_include' require 'gt_scripts_include' require 'gt_select_include' require 'gt_seq_include' require 'gt_seqbuffer_include' require 'gt_seqfilter_include' require 'gt_seqids_include' require 'gt_seqlensort_include' require 'gt_seqmutate_include' require 'gt_seqorder_include' require 'gt_seqstat_include' require 'gt_seqtransform_include' require 'gt_sequniq_include' require 'gt_shredder_include' require 'gt_simreads_include' require 'gt_splicesiteinfo_include' require 'gt_splitfasta_include' require 'gt_stat_include' require 'gt_uniq_include' if not $arguments["nocairo"] then require 'gt_sketch_include' end #now the test cases for the tools implemented or supervised by SK. require 'gt_chain2dim_include' require 'gt_cmpprjfiles_include' require 'gt_env_options_include' require 'gt_extractseq_include' require 'gt_idxsearch_include' require 'gt_mergeesa_include' require 'gt_packedindex_include' require 'gt_sortbench_include' require 'gt_suffixerator_include' require 'gt_encseq2spm_include' require 'gt_tallymer_include' require 'gt_trieins_include' require 'scripts_include' if $arguments["gcov"] then require 'gcov_include' # must be last end #we now have all tests in $testsuite. if $arguments["threads"] then $testsuite.nof_threads = $arguments["threads"].to_i end $testsuite.run genometools-1.5.1/www/000077500000000000000000000000001211610345200146705ustar00rootroot00000000000000genometools-1.5.1/www/genometools.org/000077500000000000000000000000001211610345200200115ustar00rootroot00000000000000genometools-1.5.1/www/genometools.org/htdocs/000077500000000000000000000000001211610345200212755ustar00rootroot00000000000000genometools-1.5.1/www/genometools.org/htdocs/.gitignore000066400000000000000000000001521211610345200232630ustar00rootroot00000000000000examples.html docs.html images/callbacks.png images/constructed.png images/parsed.png libgenometools.html genometools-1.5.1/www/genometools.org/htdocs/annotationsketch.html000066400000000000000000000447041211610345200255500ustar00rootroot00000000000000 The AnnotationSketch module

    The AnnotationSketch annotation drawing library

    The AnnotationSketch module is a versatile and efficient C-based drawing library for GFF3-compatible genomic annotations. It is included in the GenomeTools distribution. Additionally, bindings to the Lua, Python and Ruby programming languages are provided.

    Contents

    Overview

    AnnotationSketch consists of several classes (see Fig. 1), which take part in three visualization phases.

    [Dataflow]

    Figure 1: Schematic of the AnnotationSketch classes involved in image creation. Interfaces are printed in italics.

    Phase 1: Feature selection

    The GFF3 input data are parsed into a directed acyclic graph (annotation graph, see Fig. 2 for an example) whose nodes correspond to single features (i.e. lines from the GFF3 file). Consequently, edges in the graph represent the part-of relationships between groups of genomic features according to the Sequence Ontology hierarchy. Note that GFF3 input files must be valid according to the GFF3 specification to ensure that they can be read for AnnotationSketch drawing or any other kind of manipulation using GenomeTools. A validating GFF3 parser is available in GenomeTools (and can be run using gt gff3validator).

    [GFF3 tree]

    Figure 2: Example sequence region containing two genes in an annotation graph depicting the part-of relationships between their components.

    Each top-level node (which is a node without a parent) is then registered into a persistent FeatureIndex object. The FeatureIndex holds a collection of the top-level nodes of all features in each sequence region in an interval tree data structure that can be efficiently queried for features in a genomic region of interest. All child nodes of the top-level node are then available by the use of traversal functions.

    Alternatively, annotation graphs can be built by the user by creating each node explicitly and then connecting the nodes in a way such that the relationships are reflected in the graph structure (see example section for example code).

    Phase 2: Layout

    The next step consists of processing the features (given via a FeatureIndex or a simple array of top level nodes) into a structural Diagram object which represents a single view of the annotations of a genomic region. First, semantic units are formed from the annotation subgraphs. This is done by building blocks out of connected features by grouping and overlaying them according to several user-defined collapsing options (see Collapsing). By default, a separate track is then created for each Sequence Ontology feature type. Alternatively, if more granularity in track assignment is desired, track selector functions can be used to create tracks and assign blocks to them based on arbitrary feature characteristics. This is simply done by creating a unique identifier string per track. The Diagram object can also be used to hold one or more custom tracks, which allow users to develop their own graphical representations as plugins. The Diagram is then prepared for image output by calculating a compact Layout in which the Block objects in a track are distributed into Line objects, each containing non-overlapping blocks (see Fig. 3). The overall layout calculated this way tries to keep lines as compact as possible, minimising the amount of vertical space used. How new Lines are created depends on the chosen implementation of the LineBreaker interface, by default a Block is pushed into a new Line when either the Block or its caption overlaps with another one.

    [Diagram]

    Figure 3: The components of the Layout class reflect sections of the resulting image.

    Phase 3: Rendering

    In the final phase, the Layout object is used as a blueprint to create an image of a given type and size, considering user-defined options. The rendering process is invoked by calling the sketch() method of a Layout object. All rendering logic is implemented in classes implementing the Canvas interface, whose methods are called during traversal of the Layout members. It encapsulates the state of a drawing and works independently of the chosen rendering back-end. Instead, rendering backend-dependent subclasses of Canvas are closely tied to a specific implementation of the Graphics interface, which provides methods to draw a number of primitives to a drawing surface abstraction. It wraps around the respective low-level graphics engine and allows for its easy extension or replacement.
    Currently, there is a Graphics implementation for the Cairo 2D graphics library (GraphicsCairo) and two Canvas subclasses providing access to the image file formats supported by Cairo (CanvasCairoFile) and to arbitrary Cairo contexts (CanvasCairoContext, which directly accesses a cairo_t). This class can be used, for example, to directly draw AnnotationSketch output in any graphical environment which is supported by Cairo (see list of supported surface types).

    Collapsing

    By default, Lines are grouped by the Sequence Ontology type associated with the top-level elements of their Blocks, resulting in one track per type. To obtain a shorter yet concise output, tracks for parent types in the feature graph can be enabled to contain all the features of their child types. The features with the given type are then drawn on top of their parent features (e.g. all exon and intron features are placed into their parent mRNA or gene track). This process is called collapsing. Collapsing can be enabled by setting the collapse_to_parent option for the respective child type to true, e.g. the following options:

    style = {
      exon = {
        ...,
        collapse_to_parent = true,
        ...,
      },
      intron = {
        ...,
        collapse_to_parent = true,
        ...,
      },
      CDS = {
        ...,
        collapse_to_parent = true,
        ...,
      },
    }
    
    would lead to all features of the exon, intron and CDS types collapsing into the mRNA track (see Fig. 4 and 5).

    Figure 4: Schematic of the relationships between the gene, mRNA, exon, intron and CDS types and the colors of their representations in a diagram. The arrows illustrate how the relationships influence the collapsing process if collapsing is enabled for the exon, intron and CDS types. In this example, they will be drawn on top of their parent mRNA features.

    [collapsing]

    [collapsed/uncollapsed views]

    Figure 5:(click to enlarge) Example image of the cnn and cbs genes from Drosophila melanogaster (Ensembl release 51, positions 9326816--9341000 on chromosome arm 2R) as drawn by AnnotationSketch. At the bottom, the calculated GC content of the respective sequence is drawn via a custom track attached to the diagram. (a) shows a collapsed view in which all exon, intron and CDS types are collapsed into their parent type's track. In contrast, (b) shows the cbs gene with all collapsing options set to false, resulting in each type being drawn in its own track.

    Styles

    The Lua scripting language is used to provide user-defined settings. Settings can be imported from a script that is executed when loaded, thus eliminating the need for another parser. The Lua configuration data are made accessible to C via the Style class. Configurable options include assignment of display styles to each feature type, spacer and margin sizes, and collapsing parameters.

    Instead of giving direct values, callback Lua functions can be used in some options to generate feature-dependent configuration settings at run-time. During layout and/or rendering, the GenomeNode object for the feature to be rendered is passed to the callback function which can then be evaluated and the appropriate type can be returned.

    For example, setting the following options in the style file (or via the Lua bindings):

    style = {
      ...,
      mRNA = {
        block_caption      = function(gn)
                               rng = gn:get_range()
                               return string.format("%s/%s (%dbp, %d exons)",
                                     gn:get_attribute("Parent"),
                                     gn:get_attribute("ID"),
                                     rng:get_end() - rng:get_start() + 1,
                                     #(gn:get_exons()))
                             end,
        ...
      },
    
      exon = {
        -- Color definitions
        fill               = function(gn)
                               if gn:get_score() then
                                 aval = gn:get_score()*1.0
                               else
                                 aval = 0.0
                               end
                               return {red=1.0, green=0.0, blue=0.0, alpha=aval}
                             end,
        ...
      },
      ...
    }
    

    will result in a changed rendering (see Fig. 6). The block_caption function overrides the default block naming scheme, allowing to set custom captions to each block depending on feature properties. Color definitions such as the fill setting for a feature's fill color can also be individually styled using callbacks. In this case, the color intensity is shaded by the exon feature's score value (e.g. given in a GFF file).

    [Example rendering with callback functions]

    Figure 6: Example rendering of a GFF file using callback functions to enable custom block captions and score-dependent shading of exon features.

    An overview of the keywords used in a style file is available.

    Track assignment

    Tracks are normally created for each annotation source and/or Sequence Ontology type encountered in the annotation graph. More control is possible using track selector functions (read more).

    Custom tracks

    Even more customisability is possible using custom tracks. Custom tracks are classes which contain custom drawing functionality, making it easy to add user-defined graphical content to any AnnotationSketch drawing (read more).

    The gt sketch tool

    The GenomeTools gt executable provides a new tool which uses the AnnotationSketch library to create a drawing in PNG, PDF, PostScript or SVG format from GFF3 annotations. The annotations can be given by supplying one or more file names as command line arguments:
    $ gt sketch output.png annotation.gff3
    $
    
    or by receiving GFF3 data via the standard input, here prepared by the gt gff3 tool:
    $ gt gff3 -sort -addintrons annotation.gff3 | gt sketch output.png
    $
    
    The region to create a diagram for can be specified in detail by using the -seqid, -start and -end parameters. For example, if the D. melanogaster gene annotation is given as a dmel_annotation.gff3, use
    $ gt sketch -format pdf -seqid 2R -start 9326816 -end 9332879 output.pdf dmel_annotation.gff3
    $
    
    to plot the gene from the FlyBase default view in PDF format. The -force switch is used to force overwriting of an already existing output file. The -pipe option additionally allows passing the GFF3 input through the sketch tool via the standard output, allowing the intermediate visualisation of results in a longer pipeline of connected GFF3 tools. More command line options are available; their documentation can be viewed using the -help option. If an input file is not plotted due to parsing errors, GenomeTools includes a strict GFF3 validator tool to check whether the input file is in valid GFF3 format. Simply run a command like the following:
    $ gt gff3validator input_file.gff3
    input is valid GFF3
    $
    
    This validator also allows one to check the SO types occurring in a GFF3 file against a given OBO ontology file. This checking can be enabled by specifying the file as an argument to the -typecheck option.

    If the PDF, SVG and/or PostScript output format options are not available in the gt binary, the most likely cause is that PDF, SVG and/or PostScript support is disabled in your local Cairo headers and thus also not available in your local Cairo library. This issue is not directly related to AnnotationSketch and can be resolved by recompiling the Cairo library with the proper backend support enabled.

    Code examples

    Besides the native C programming interface, AnnotationSketch is usable from a variety of programming languages. Code examples for the individual languages can be found here.

    Try AnnotationSketch online!

    Upload your own annotations to a simple AnnotationSketch-based web application showing how output can look like.

    API Reference

    A function reference for the AnnotationSketch classes can be found in the GenomeTools C API reference.
    genometools-1.5.1/www/genometools.org/htdocs/annotationsketch/000077500000000000000000000000001211610345200246515ustar00rootroot00000000000000genometools-1.5.1/www/genometools.org/htdocs/annotationsketch/callback_examples_with_score.gff3000066400000000000000000000012061211610345200332770ustar00rootroot00000000000000##gff-version 3 ##sequence-region ctg123 1 10000 ctg123 . gene 1000 9000 0.5 + . ID=gene00001 ctg123 . TF_binding_site 1000 1012 . + . Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00001;Parent=gene00001 ctg123 . mRNA 1050 9000 . + . ID=mRNA00002;Parent=gene00001 ctg123 . mRNA 1300 9000 . + . ID=mRNA00003;Parent=gene00001 ctg123 . exon 1300 1500 0.6 + . ID=exon1;Parent=mRNA00003 ctg123 . exon 1050 1500 0.2 + . Parent=mRNA00001,mRNA00002 ctg123 . exon 3000 3902 1 + . Parent=mRNA00001,mRNA00003 ctg123 . exon 5000 5500 0.3 + . Parent=mRNA00001,mRNA00002,mRNA00003 ctg123 . exon 7000 9000 1 + . Parent=mRNA00001,mRNA00002,mRNA00003 genometools-1.5.1/www/genometools.org/htdocs/annotationsketch/callbacks.style000066400000000000000000000250331211610345200276550ustar00rootroot00000000000000-- This is a GenomeTools annotation viewer style file. -- All options must be set inside the 'style' table. -- All items in this table must be tables, called 'sections'. style = { gene = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.9, green=0.9, blue=1.0}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks -- max_num_lines = 10, }, -------------------------------------- mRNA = { block_caption = function(gn) rng = gn:get_range() return string.format("%s/%s (%dbp, %d exons)", gn:get_attribute("Parent"), gn:get_attribute("ID"), rng:get_end() - rng:get_start() + 1, #(gn:get_exons())) end, -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.4, green=0.5, blue=0.6}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -------------------------------------- exon = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = function(gn) if gn:get_score() then aval = gn:get_score()*1.0 else aval = 0.0 end return {red=1.0, green=0.0, blue=0.0, alpha=aval} end, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -------------------------------------- CDS = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.9, green=0.9, blue=0.2}, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -------------------------------------- TF_binding_site = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.8, green=0.6, blue=0.6}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -------------------------------------- intron = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=1.0, green=1.0, blue=1.0}, style = "caret", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -------------------------------------- repeat_region = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.8, green=0.3, blue=0.3}, style = "box", -- Collapsing options collapse_to_parent = false, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -------------------------------------- LTR_retrotransposon = { -- Color definitions stroke = {red=0.0, green=0.0, blue=0.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.8, green=0.5, blue=0.5}, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -------------------------------------- long_terminal_repeat = { -- Color definitions -- RGB triplets {red=,green=,blue=} -- where is a decimal value between 0 and 1. stroke = {red=0.0, green=0.0, blue=0.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.9, green=0.9, blue=0.4}, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -------------------------------------- protein_match = { -- Color definitions -- RGB triplets {red=,green=,blue=} -- where is a decimal value between 0 and 1. stroke = {red=0.0, green=0.0, blue=0.0}, stroke_marked = {red=1.0, green=0.0, blue=0.0}, fill = {red=0.1, green=0.1, blue=0.5}, style = "box", -- Collapsing options collapse_to_parent = true, split_lines = true, -- Caption options max_capt_show_width= nil, -- Display this track only if the viewport is not wider than this -- number of nucleotides. Set to 0 to disable type track. max_show_width = nil, -- Limit the number of tracks max_num_lines = 10, }, -------------------------------------- five_prime_cis_splice_site = { collapse_to_parent = true, }, -------------------------------------- three_prime_cis_splice_site = { collapse_to_parent = true, }, -------------------------------------- expressed_sequence_match = { fill = {red=0.2, green=0.2, blue=0.8}, max_show_width = 10000, max_num_lines = 10, max_capt_show_width= 5000, }, -------------------------------------- binding_site = { fill = {red=0.7, green=0.2, blue=0.8}, max_show_width = 10000, max_num_lines = 10, max_capt_show_width= 10000, }, -------------------------------------- SNP = { fill = {red=0.1, green=0.8, blue=0.8}, max_show_width = 10000, max_num_lines = 10, max_capt_show_width= 10000, }, -------------------------------------- deletion = { fill = {red=0.1, green=0.8, blue=0.8}, max_show_width = nil, max_num_lines = 10, max_capt_show_width= 10000, }, -------------------------------------- chromosome = { fill = {red=0.1, green=0.8, blue=0.8}, max_show_width = nil, max_num_lines = 10, }, -------------------------------------- substitution = { fill = {red=1.0, green=0.1, blue=0.05}, max_show_width = 10000, max_num_lines = 10, max_capt_show_width= 1000, }, -- Defines various format options for drawing. format = { -- Set the following three settings to 'false' to globally disable them. split_lines = true, -- generally enable splitting show_block_captions = true, -- generally show captions show_track_captions = true, -- generally show track captions margins = 30, -- space left and right of diagram, in pixels bar_height = 16, -- height of a feature bar, in pixels bar_vspace = 10, -- space between feature bars, in pixels track_vspace = 15, -- space between tracks, in pixels ruler_font_size = 10, -- size of scale labels ruler_space = 20, -- space between ruler and first track block_caption_font_size = 10, -- size of block captions block_caption_space = 7, -- space between blocks and their captions track_caption_font_size = 10, -- size of track captions track_caption_space = 7, -- space between tracks and their captions scale_arrow_width = 6, -- width of scale arrowheads, in pixels scale_arrow_height = 10, -- height of scale arrowheads, in pixels arrow_width = 6, -- width of feature arrowheads, in pixels stroke_width = .5, -- width of outlines, in pixels stroke_marked_width = 1.5, -- width of outlines for marked elements, in pixels show_grid = true, -- shows light vertical lines for orientation min_len_block = 20 , -- minimum length of a block in which single elements are shown track_title_color = {red=0.7, green=0.7, blue=0.7, alpha = 1.0}, default_stroke_color = {red=0.1, green=0.1, blue=0.1, alpha = 1.0}, background_color = {red=1.0, green=1.0, blue=1.0, alpha = 1.0}, }, } genometools-1.5.1/www/genometools.org/htdocs/cgi-bin/000077500000000000000000000000001211610345200226055ustar00rootroot00000000000000genometools-1.5.1/www/genometools.org/htdocs/cgi-bin/README000066400000000000000000000455101211610345200234720ustar00rootroot00000000000000GIT web Interface ================= The one working on: http://git.kernel.org/ From the git version 1.4.0 gitweb is bundled with git. How to configure gitweb for your local system --------------------------------------------- See also the "Build time configuration" section in the INSTALL file for gitweb (in gitweb/INSTALL). You can specify the following configuration variables when building GIT: * GIT_BINDIR Points where to find the git executable. You should set it up to the place where the git binary was installed (usually /usr/bin) if you don't install git from sources together with gitweb. [Default: $(bindir)] * GITWEB_SITENAME Shown in the title of all generated pages, defaults to the server name (SERVER_NAME CGI environment variable) if not set. [No default] * GITWEB_PROJECTROOT The root directory for all projects shown by gitweb. Must be set correctly for gitweb to find repositories to display. See also "Gitweb repositories" in the INSTALL file for gitweb. [Default: /pub/git] * GITWEB_PROJECT_MAXDEPTH The filesystem traversing limit for getting the project list; the number is taken as depth relative to the projectroot. It is used when GITWEB_LIST is a directory (or is not set; then project root is used). Is is meant to speed up project listing on large work trees by limiting search depth. [Default: 2007] * GITWEB_LIST Points to a directory to scan for projects (defaults to project root if not set / if empty) or to a file with explicit listing of projects (together with projects' ownership). See "Generating projects list using gitweb" in INSTALL file for gitweb to find out how to generate such file from scan of a directory. [No default, which means use root directory for projects] * GITWEB_EXPORT_OK Show repository only if this file exists (in repository). Only effective if this variable evaluates to true. [No default / Not set] * GITWEB_STRICT_EXPORT Only allow viewing of repositories also shown on the overview page. This for example makes GITWEB_EXPORT_OK to decide if repository is available and not only if it is shown. If GITWEB_LIST points to file with list of project, only those repositories listed would be available for gitweb. [No default] * GITWEB_HOMETEXT Points to an .html file which is included on the gitweb project overview page ('projects_list' view), if it exists. Relative to gitweb.cgi script. [Default: indextext.html] * GITWEB_SITE_HEADER Filename of html text to include at top of each page. Relative to gitweb.cgi script. [No default] * GITWEB_SITE_FOOTER Filename of html text to include at bottom of each page. Relative to gitweb.cgi script. [No default] * GITWEB_HOME_LINK_STR String of the home link on top of all pages, leading to $home_link (usually main gitweb page, which means projects list). Used as first part of gitweb view "breadcrumb trail": / / . [Default: projects] * GITWEB_SITENAME Name of your site or organization to appear in page titles. Set it to something descriptive for clearer bookmarks etc. If not set (if empty) gitweb uses "$SERVER_NAME Git", or "Untitled Git" if SERVER_NAME CGI environment variable is not set (e.g. if running gitweb as standalone script). [No default] * GITWEB_BASE_URL Git base URLs used for URL to where fetch project from, i.e. full URL is "$git_base_url/$project". Shown on projects summary page. Repository URL for project can be also configured per repository; this takes precedence over URLs composed from base URL and a project name. Note that you can setup multiple base URLs (for example one for git:// protocol access, another for http:// access) from the gitweb config file. [No default] * GITWEB_CSS Points to the location where you put gitweb.css on your web server (or to be more generic, the URI of gitweb stylesheet). Relative to the base URI of gitweb. Note that you can setup multiple stylesheets from the gitweb config file. [Default: gitweb.css] * GITWEB_LOGO Points to the location where you put git-logo.png on your web server (or to be more generic URI of logo, 72x27 size, displayed in top right corner of each gitweb page, and used as logo for Atom feed). Relative to base URI of gitweb. [Default: git-logo.png] * GITWEB_FAVICON Points to the location where you put git-favicon.png on your web server (or to be more generic URI of favicon, assumed to be image/png type; web browsers that support favicons (website icons) may display them in the browser's URL bar and next to site name in bookmarks). Relative to base URI of gitweb. [Default: git-favicon.png] * GITWEB_JS Points to the localtion where you put gitweb.js on your web server (or to be more generic URI of JavaScript code used by gitweb). Relative to base URI of gitweb. [Default: gitweb.js (or gitweb.min.js if JSMIN build variable is defined / JavaScript minifier is used)] * GITWEB_CONFIG This Perl file will be loaded using 'do' and can be used to override any of the options above as well as some other options -- see the "Runtime gitweb configuration" section below, and top of 'gitweb.cgi' for their full list and description. If the environment variable GITWEB_CONFIG is set when gitweb.cgi is executed, then the file specified in the environment variable will be loaded instead of the file specified when gitweb.cgi was created. [Default: gitweb_config.perl] * GITWEB_CONFIG_SYSTEM This Perl file will be loaded using 'do' as a fallback if GITWEB_CONFIG does not exist. If the environment variable GITWEB_CONFIG_SYSTEM is set when gitweb.cgi is executed, then the file specified in the environment variable will be loaded instead of the file specified when gitweb.cgi was created. [Default: /etc/gitweb.conf] Runtime gitweb configuration ---------------------------- You can adjust gitweb behaviour using the file specified in `GITWEB_CONFIG` (defaults to 'gitweb_config.perl' in the same directory as the CGI), and as a fallback `GITWEB_CONFIG_SYSTEM` (defaults to /etc/gitweb.conf). The most notable thing that is not configurable at compile time are the optional features, stored in the '%features' variable. Ultimate description on how to reconfigure the default features setting in your `GITWEB_CONFIG` or per-project in `project.git/config` can be found as comments inside 'gitweb.cgi'. See also the "Gitweb config file" (with an example of config file), and the "Gitweb repositories" sections in INSTALL file for gitweb. The gitweb config file is a fragment of perl code. You can set variables using "our $variable = value"; text from "#" character until the end of a line is ignored. See perlsyn(1) man page for details. Below is the list of variables which you might want to set in gitweb config. See the top of 'gitweb.cgi' for the full list of variables and their descriptions. Gitweb config file variables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can set, among others, the following variables in gitweb config files (with the exception of $projectroot and $projects_list this list does not include variables usually directly set during build): * $GIT Core git executable to use. By default set to "$GIT_BINDIR/git", which in turn is by default set to "$(bindir)/git". If you use git from binary package, set this to "/usr/bin/git". This can just be "git" if your webserver has a sensible PATH. If you have multiple git versions installed it can be used to choose which one to use. * $version Gitweb version, set automatically when creating gitweb.cgi from gitweb.perl. You might want to modify it if you are running modified gitweb. * $projectroot Absolute filesystem path which will be prepended to project path; the path to repository is $projectroot/$project. Set to $GITWEB_PROJECTROOT during installation. This variable have to be set correctly for gitweb to find repositories. * $projects_list Source of projects list, either directory to scan, or text file with list of repositories (in the " SP " line format; actually there can be any sequence of whitespace in place of space (SP)). Set to $GITWEB_LIST during installation. If empty, $projectroot is used to scan for repositories. * $my_url, $my_uri Full URL and absolute URL of gitweb script; in earlier versions of gitweb you might have need to set those variables, now there should be no need to do it. * $base_url Base URL for relative URLs in pages generated by gitweb, (e.g. $logo, $favicon, @stylesheets if they are relative URLs), needed and used only for URLs with nonempty PATH_INFO via - path to repository GIT_DIR, relative to $projectroot * - displayed as repository owner, preferably full name, or email, or both You can additionally use $projects_list file to limit which repositories are visible, and together with $strict_export to limit access to repositories (see "Gitweb repositories" section in gitweb/INSTALL). Per-repository gitweb configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can also configure individual repositories shown in gitweb by creating file in the GIT_DIR of git repository, or by setting some repo configuration variable (in GIT_DIR/config). You can use the following files in repository: * README.html A .html file (HTML fragment) which is included on the gitweb project summary page inside
    block element. You can use it for longer description of a project, to provide links (for example to project's homepage), etc. This is recognized only if XSS prevention is off ($prevent_xss is false); a way to include a readme safely when XSS prevention is on may be worked out in the future. * description (or gitweb.description) Short (shortened by default to 25 characters in the projects list page) single line description of a project (of a repository). Plain text file; HTML will be escaped. By default set to Unnamed repository; edit this file to name it for gitweb. from the template during repository creation. You can use the gitweb.description repo configuration variable, but the file takes precedence. * cloneurl (or multiple-valued gitweb.url) File with repository URL (used for clone and fetch), one per line. Displayed in the project summary page. You can use multiple-valued gitweb.url repository configuration variable for that, but the file takes precedence. * gitweb.owner You can use the gitweb.owner repository configuration variable to set repository's owner. It is displayed in the project list and summary page. If it's not set, filesystem directory's owner is used (via GECOS field / real name field from getpwiud(3)). * various gitweb.* config variables (in config) Read description of %feature hash for detailed list, and some descriptions. Webserver configuration ----------------------- If you want to have one URL for both gitweb and your http:// repositories, you can configure apache like this: ServerName git.example.org DocumentRoot /pub/git SetEnv GITWEB_CONFIG /etc/gitweb.conf RewriteEngine on # make the front page an internal rewrite to the gitweb script RewriteRule ^/$ /cgi-bin/gitweb.cgi # make access for "dumb clients" work RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT] The above configuration expects your public repositories to live under /pub/git and will serve them as http://git.domain.org/dir-under-pub-git, both as cloneable GIT URL and as browseable gitweb interface. If you then start your git-daemon with --base-path=/pub/git --export-all then you can even use the git:// URL with exactly the same path. Setting the environment variable GITWEB_CONFIG will tell gitweb to use the named file (i.e. in this example /etc/gitweb.conf) as a configuration for gitweb. Perl variables defined in here will override the defaults given at the head of the gitweb.perl (or gitweb.cgi). Look at the comments in that file for information on which variables and what they mean. If you use the rewrite rules from the example you'll likely also need something like the following in your gitweb.conf (or gitweb_config.perl) file: @stylesheets = ("/some/absolute/path/gitweb.css"); $my_uri = "/"; $home_link = "/"; PATH_INFO usage ----------------------- If you enable PATH_INFO usage in gitweb by putting $feature{'pathinfo'}{'default'} = [1]; in your gitweb.conf, it is possible to set up your server so that it consumes and produces URLs in the form http://git.example.com/project.git/shortlog/sometag by using a configuration such as the following, that assumes that /var/www/gitweb is the DocumentRoot of your webserver, and that it contains the gitweb.cgi script and complementary static files (stylesheet, favicon): ServerAlias git.example.com DocumentRoot /var/www/gitweb Options ExecCGI AddHandler cgi-script cgi DirectoryIndex gitweb.cgi RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.* /gitweb.cgi/$0 [L,PT] The rewrite rule guarantees that existing static files will be properly served, whereas any other URL will be passed to gitweb as PATH_INFO parameter. Notice that in this case you don't need special settings for @stylesheets, $my_uri and $home_link, but you lose "dumb client" access to your project .git dirs. A possible workaround for the latter is the following: in your project root dir (e.g. /pub/git) have the projects named without a .git extension (e.g. /pub/git/project instead of /pub/git/project.git) and configure Apache as follows: ServerAlias git.example.com DocumentRoot /var/www/gitweb AliasMatch ^(/.*?)(\.git)(/.*)?$ /pub/git$1$3 Options ExecCGI AddHandler cgi-script cgi DirectoryIndex gitweb.cgi RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.* /gitweb.cgi/$0 [L,PT] The additional AliasMatch makes it so that http://git.example.com/project.git will give raw access to the project's git dir (so that the project can be cloned), while http://git.example.com/project will provide human-friendly gitweb access. This solution is not 100% bulletproof, in the sense that if some project has a named ref (branch, tag) starting with 'git/', then paths such as http://git.example.com/project/command/abranch..git/abranch will fail with a 404 error. Originally written by: Kay Sievers Any comment/question/concern to: Git mailing list genometools-1.5.1/www/genometools.org/htdocs/cgi-bin/annotationsketch_demo.cgi000077500000000000000000000244761211610345200276710ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2008 Sascha Steinbiss # Copyright (c) 2008 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # GENOMETOOLS_PATH = "/home/satta/genometools_for_web" GTRUBY_PATH = "#{GENOMETOOLS_PATH}/gtruby" # the LD_LIBRARY_PATH has to be set externally to "#{GENOMETOOLS_PATH}/lib"! STYLE_FILE = "#{GENOMETOOLS_PATH}/gtdata/sketch/default.style" DEFAULT_ANNOTATION_FILE = "#{GENOMETOOLS_PATH}/testdata/standard_gene_as_tree.gff3" SCRIPT_PATH = "/var/www/servers/genometools.org/htdocs/cgi-bin" UPLOAD_PATH = "/tmp" IMAGE_DIR = "imgs" # relative paths from SCRIPT_PATH please MAXSIZE = 2097152 $: << (GTRUBY_PATH) require "gtruby" require "cgi" puts "Content-type: text/html" puts "" cgi = CGI.new("html4") class String # String#strip_html - Removes HTML tags from a string. # Author:: Rob Pitt # Removes HTML tags from a string. Allows you to specify some tags to be kept. def strip_html( allowed = [] ) re = if allowed.any? Regexp.new( %(<(?!(\\s|\\/)*(#{ allowed.map {|tag| Regexp.escape( tag )}.join( "|" ) })( |>|\\/|'|"|<|\\s*\\z))[^>]*(>+|\\s*\\z)), Regexp::IGNORECASE | Regexp::MULTILINE, 'u' ) else /<[^>]*(>+|\s*\z)/m end gsub(re,'') end end HTML_HEADER = < The AnnotationSketch module

    AnnotationSketch online demo

    Use this form to upload a GFF3 annotation file (up to 2MB) which is then drawn using an AnnotationSketch-based Ruby script and output to your browser. Some basic options, such as displayed sequence region and range, or the generated image width, can be set. For more options, the stand-alone gt sketch tool can be used.

    END HTML_FOOTER = < Copyright © 2007-2011 Sascha Steinbiss. Last update: 2011-02-11
    END UPLOAD_FORM = <

    " "

    " "Statistic-Section

    Annotation file: Example file
    Custom file:
    Sequence region:
    (leave blank to use first sequence region in file)
    Range to display: bp – bp
    (leave blank to show complete sequence region)
    Image width: pixels
    END HTML_IMAGE = <AnnotationSketch diagram of %s

    AnnotationSketch diagram

    END puts HTML_HEADER if cgi.params.has_key?('submitted') then # CGI parameters behave differently with uploaded file size. # StringIO.read does not seem to work right either. # account for that by checking for the type of the parameters if cgi["example"].kind_of?(StringIO) then read_method = :string else read_method = :read end begin if cgi["example"].nil? or cgi["example"].send(read_method) == "example" then e_str = 'checked="checked"' d_str1 = "" d_str2 = 'disabled="disabled"' else e_str = "" d_str1 = 'checked="checked"' d_str2 = "" end puts UPLOAD_FORM % [e_str, \ d_str1, \ d_str2, \ cgi['seqid'].string.strip_html, \ cgi['rangestart'].string.strip_html, \ cgi['rangeend'].string.strip_html, \ cgi['width'].string.strip_html] if cgi["example"].nil? or cgi["example"].send(read_method) == "example" then targetfilename = DEFAULT_ANNOTATION_FILE originalfilename = File.basename(DEFAULT_ANNOTATION_FILE) else ufile = cgi.params['file'] if ufile.first.length == 0 then GT::gterror("No file was uploaded!") elsif ufile.first.length > MAXSIZE then GT::gterror("Your uploaded file was too large! This demo service supports annotation files up to #{(MAXSIZE/1024)}KB. Please upload a smaller file.") end # mangle file path to avoid directory traversal attacks originalfilename = ufile.first.original_filename truncated_filename = File.basename(File.expand_path(originalfilename)) targetfilename = "#{UPLOAD_PATH}/#{truncated_filename}" File.open(targetfilename, "w+") do |file| file.write(ufile.first.read) end end feature_index = GT::FeatureIndexMemory.new() feature_index.add_gff3file(targetfilename) if cgi['width'].string != "" then width = cgi['width'].send(read_method).to_i if width < 70 then GT::gterror("Please set a width of more than 70 pixels!") end else width = 800 end if cgi['seqid'].string.to_s != "" then seqid = cgi['seqid'].string seqids = feature_index.get_seqids if !seqids.include?(seqid) then if not cgi["example"].send(read_method) == "example" then File.unlink(targetfilename) end GT::gterror("Invalid sequence region '#{seqid}': must be #{"one of" unless seqids.length == 1} #{seqids.collect{|v|""#{v}""}.join(" or ")}!") end else seqid = feature_index.get_first_seqid end if cgi['rangestart'] and cgi['rangestart'].string != "" \ and cgi['rangeend'] and cgi['rangeend'].string != "" then range = GT::Range.malloc range.start = cgi['rangestart'].string.to_i range.end = cgi['rangeend'].string.to_i if range.start >= range.end then GT::gterror("Invalid range, must be numeric and start must be < end!") end else range = feature_index.get_range_for_seqid(seqid) end style = GT::Style.new() style.load_file(STYLE_FILE) d = GT::Diagram.from_index(feature_index, seqid, range, style) l = GT::Layout.new(d, width, style) c = GT::CanvasCairoFile.new(style, width, l.get_height()) l.sketch(c) c.to_file("#{SCRIPT_PATH}/#{IMAGE_DIR}/#{originalfilename}.png") puts HTML_IMAGE % [originalfilename.strip_html, \ "#{IMAGE_DIR}/#{originalfilename}.png"] if not cgi["example"].send(read_method) == "example" then File.unlink(targetfilename) end rescue Exception => err: puts "

    An error has occurred

    #{err}

    " end else puts UPLOAD_FORM % ['checked="checked"', '', 'disabled="disabled"', '', '', \ '', 800] end print HTML_FOOTER genometools-1.5.1/www/genometools.org/htdocs/cgi-bin/gff3validator.cgi000066400000000000000000000173031211610345200260300ustar00rootroot00000000000000#!/usr/bin/env ruby # # Copyright (c) 2012 Sascha Steinbiss # Copyright (c) 2012 Center for Bioinformatics, University of Hamburg # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # GENOMETOOLS_PATH = "/home/satta/genometools_for_web" GTRUBY_PATH = "#{GENOMETOOLS_PATH}/gtruby" # the LD_LIBRARY_PATH has to be set externally to "#{GENOMETOOLS_PATH}/lib"! SCRIPT_PATH = "/var/www/servers/genometools.org/htdocs/cgi-bin" UPLOAD_PATH = "/tmp" MAXSIZE = 52428800 $: << (GTRUBY_PATH) require "gtruby" require "cgi" require 'tempfile' puts "Content-type: text/html" puts "" cgi = CGI.new("html4") HTML_HEADER = < GFF3 Online Validator

    GFF3 online validator

    Use this form to upload a GFF3 annotation file (up to 50 MB, can be .gz or .bz2 compressed) which is then validated against the GFF3 specification using the current Sequence Ontology OBO file.

    END HTML_FOOTER = < Copyright © 2012 Sascha Steinbiss. Last update: 2012-04-11
    END UPLOAD_FORM = <
    Annotation file:
    enable "tidy" mode (tries to fix errors)
    also report content of affected GFF lines

    This GFF3 validator is part of the GenomeTools distribution which you can download to your computer. Use the gff3validator tool to validate your own – possibly larger – GFF3 files and the gff3 tool with option -tidy to tidy them up (-help shows further options).

    END puts HTML_HEADER def print_gff3line(line, lineno, red = false) puts "" puts "#{lineno}" puts "#{if red then "→" end}" line.split("\t").each do |v| print "#{v}" end puts puts "" end if cgi.params.has_key?('submitted') then tidy = (cgi.params["tidy"].length > 0) show = (cgi.params["show"].length > 0) begin show_checked = '' tidy_checked = '' if tidy then tidy_checked = 'checked="checked"' end if show then show_checked = 'checked="checked"' end puts UPLOAD_FORM % [tidy_checked, show_checked] ufile = cgi.params['file'] if ufile.first.length == 0 then GT::gterror("No file was uploaded!") elsif ufile.first.length > MAXSIZE then GT::gterror("Your uploaded file was too large! This service supports annotation files up to #{(MAXSIZE/1024)}KB. Please upload a smaller file.") end # mangle file path to avoid directory traversal attacks originalfilename = ufile.first.original_filename truncated_filename = File.basename(File.expand_path(originalfilename)) targetfilename = "#{UPLOAD_PATH}/#{truncated_filename}" File.open(targetfilename, "w+") do |file| file.write(ufile.first.read) end errfile = Tempfile.new('validator') $stderr.reopen(errfile) checker = GT::TypeCheckerOBO.new("#{GENOMETOOLS_PATH}/gtdata/obo_files/so.obo") stream = GT::GFF3InStream.new(targetfilename, false) stream.set_type_checker(checker) if tidy then stream.enable_tidy_mode end gn = stream.next_tree() while (gn) do gn = stream.next_tree() end errfile.flush puts "

    Validation successful!

    " errfile.rewind entries = errfile.readlines if entries.length > 0 then puts "

    #{entries.length} issue#{"s" unless entries.length == 1} remaining:

    " file = File.open(targetfilename).readlines entries.each do |entry| puts "
    " puts "

    #{entry}

    " if show and (m = /line ([0-9]+)/.match(entry)) then linenumber = m[1].to_i puts "

    "
              if linenumber-1 > 0 then
                print_gff3line(file[linenumber-2].chomp,linenumber-1)
              end
              print_gff3line(file[linenumber-1].chomp, linenumber, true)
              if linenumber <= (file.length)-1 then
                print_gff3line(file[linenumber].chomp, linenumber+1)
              end
              puts "

    " end puts "
    " end end errfile.close errfile.unlink rescue Exception => err puts "

    Validation unsuccessful!

    #{err}

    " end else puts UPLOAD_FORM % ['', 'checked="checked"'] end print HTML_FOOTER genometools-1.5.1/www/genometools.org/htdocs/cgi-bin/git-favicon.png000066400000000000000000000001631211610345200255210ustar00rootroot00000000000000PNG  IHDRb PLTE|%IDATcX ؈&[2+ajjdsQ#[ovIENDB`genometools-1.5.1/www/genometools.org/htdocs/cgi-bin/git-logo.png000066400000000000000000000003171211610345200250350ustar00rootroot00000000000000PNG  IHDRH)9,PLTE``] GrIDATx CwKK4tC!EɦI$-4 VNTC0mFB)yV6׊PhS'jjiWqD_H"F'<pG SIENDB`genometools-1.5.1/www/genometools.org/htdocs/cgi-bin/gitweb.cgi000077500000000000000000006127301211610345200245660ustar00rootroot00000000000000#!/usr/bin/perl # gitweb - simple web interface to track changes in git repositories # # (C) 2005-2006, Kay Sievers # (C) 2005, Christian Gierke # # This program is licensed under the GPLv2 use strict; use warnings; use CGI qw(:standard :escapeHTML -nosticky); use CGI::Util qw(unescape); use CGI::Carp qw(fatalsToBrowser); use Encode; use Fcntl ':mode'; use File::Find qw(); use File::Basename qw(basename); binmode STDOUT, ':utf8'; our $t0; if (eval { require Time::HiRes; 1; }) { $t0 = [Time::HiRes::gettimeofday()]; } our $number_of_git_cmds = 0; BEGIN { CGI->compile() if $ENV{'MOD_PERL'}; } our $cgi = new CGI; our $version = "1.6.6.1"; our $my_url = $cgi->url(); our $my_uri = $cgi->url(-absolute => 1); # Base URL for relative URLs in gitweb ($logo, $favicon, ...), # needed and used only for URLs with nonempty PATH_INFO our $base_url = $my_url; # When the script is used as DirectoryIndex, the URL does not contain the name # of the script file itself, and $cgi->url() fails to strip PATH_INFO, so we # have to do it ourselves. We make $path_info global because it's also used # later on. # # Another issue with the script being the DirectoryIndex is that the resulting # $my_url data is not the full script URL: this is good, because we want # generated links to keep implying the script name if it wasn't explicitly # indicated in the URL we're handling, but it means that $my_url cannot be used # as base URL. # Therefore, if we needed to strip PATH_INFO, then we know that we have # to build the base URL ourselves: our $path_info = $ENV{"PATH_INFO"}; if ($path_info) { if ($my_url =~ s,\Q$path_info\E$,, && $my_uri =~ s,\Q$path_info\E$,, && defined $ENV{'SCRIPT_NAME'}) { $base_url = $cgi->url(-base => 1) . $ENV{'SCRIPT_NAME'}; } } # core git executable to use # this can just be "git" if your webserver has a sensible PATH our $GIT = "/usr/bin/git"; # absolute fs-path which will be prepended to the project path #our $projectroot = "/pub/scm"; our $projectroot = "/var/www/pub/git"; # fs traversing limit for getting project list # the number is relative to the projectroot our $project_maxdepth = 2007; # target of the home link on top of all pages our $home_link = $my_uri || "/"; # string of the home link on top of all pages our $home_link_str = "projects"; # name of your site or organization to appear in page titles # replace this with something more descriptive for clearer bookmarks our $site_name = "" || ($ENV{'SERVER_NAME'} || "Untitled") . " Git"; # filename of html text to include at top of each page our $site_header = ""; # html text to include at home page our $home_text = "indextext.html"; # filename of html text to include at bottom of each page our $site_footer = ""; # URI of stylesheets our @stylesheets = ("gitweb.css"); # URI of a single stylesheet, which can be overridden in GITWEB_CONFIG. our $stylesheet = undef; # URI of GIT logo (72x27 size) our $logo = "git-logo.png"; # URI of GIT favicon, assumed to be image/png type our $favicon = "git-favicon.png"; # URI of gitweb.js (JavaScript code for gitweb) our $javascript = "gitweb.js"; # URI and label (title) of GIT logo link #our $logo_url = "http://www.kernel.org/pub/software/scm/git/docs/"; #our $logo_label = "git documentation"; our $logo_url = "http://git-scm.com/"; our $logo_label = "git homepage"; # source of projects list our $projects_list = ""; # the width (in characters) of the projects list "Description" column our $projects_list_description_width = 25; # default order of projects list # valid values are none, project, descr, owner, and age our $default_projects_order = "project"; # show repository only if this file exists # (only effective if this variable evaluates to true) our $export_ok = ""; # show repository only if this subroutine returns true # when given the path to the project, for example: # sub { return -e "$_[0]/git-daemon-export-ok"; } our $export_auth_hook = undef; # only allow viewing of repositories also shown on the overview page our $strict_export = ""; # list of git base URLs used for URL to where fetch project from, # i.e. full URL is "$git_base_url/$project" our @git_base_url_list = grep { $_ ne '' } (""); # default blob_plain mimetype and default charset for text/plain blob our $default_blob_plain_mimetype = 'text/plain'; our $default_text_plain_charset = undef; # file to use for guessing MIME types before trying /etc/mime.types # (relative to the current git repository) our $mimetypes_file = undef; # assume this charset if line contains non-UTF-8 characters; # it should be valid encoding (see Encoding::Supported(3pm) for list), # for which encoding all byte sequences are valid, for example # 'iso-8859-1' aka 'latin1' (it is decoded without checking, so it # could be even 'utf-8' for the old behavior) our $fallback_encoding = 'latin1'; # rename detection options for git-diff and git-diff-tree # - default is '-M', with the cost proportional to # (number of removed files) * (number of new files). # - more costly is '-C' (which implies '-M'), with the cost proportional to # (number of changed files + number of removed files) * (number of new files) # - even more costly is '-C', '--find-copies-harder' with cost # (number of files in the original tree) * (number of new files) # - one might want to include '-B' option, e.g. '-B', '-M' our @diff_opts = ('-M'); # taken from git_commit # Disables features that would allow repository owners to inject script into # the gitweb domain. our $prevent_xss = 0; # information about snapshot formats that gitweb is capable of serving our %known_snapshot_formats = ( # name => { # 'display' => display name, # 'type' => mime type, # 'suffix' => filename suffix, # 'format' => --format for git-archive, # 'compressor' => [compressor command and arguments] # (array reference, optional) # 'disabled' => boolean (optional)} # 'tgz' => { 'display' => 'tar.gz', 'type' => 'application/x-gzip', 'suffix' => '.tar.gz', 'format' => 'tar', 'compressor' => ['gzip']}, 'tbz2' => { 'display' => 'tar.bz2', 'type' => 'application/x-bzip2', 'suffix' => '.tar.bz2', 'format' => 'tar', 'compressor' => ['bzip2']}, 'txz' => { 'display' => 'tar.xz', 'type' => 'application/x-xz', 'suffix' => '.tar.xz', 'format' => 'tar', 'compressor' => ['xz'], 'disabled' => 1}, 'zip' => { 'display' => 'zip', 'type' => 'application/x-zip', 'suffix' => '.zip', 'format' => 'zip'}, ); # Aliases so we understand old gitweb.snapshot values in repository # configuration. our %known_snapshot_format_aliases = ( 'gzip' => 'tgz', 'bzip2' => 'tbz2', 'xz' => 'txz', # backward compatibility: legacy gitweb config support 'x-gzip' => undef, 'gz' => undef, 'x-bzip2' => undef, 'bz2' => undef, 'x-zip' => undef, '' => undef, ); # Pixel sizes for icons and avatars. If the default font sizes or lineheights # are changed, it may be appropriate to change these values too via # $GITWEB_CONFIG. our %avatar_size = ( 'default' => 16, 'double' => 32 ); # You define site-wide feature defaults here; override them with # $GITWEB_CONFIG as necessary. our %feature = ( # feature => { # 'sub' => feature-sub (subroutine), # 'override' => allow-override (boolean), # 'default' => [ default options...] (array reference)} # # if feature is overridable (it means that allow-override has true value), # then feature-sub will be called with default options as parameters; # return value of feature-sub indicates if to enable specified feature # # if there is no 'sub' key (no feature-sub), then feature cannot be # overriden # # use gitweb_get_feature() to retrieve the value # (an array) or gitweb_check_feature() to check if # is enabled # Enable the 'blame' blob view, showing the last commit that modified # each line in the file. This can be very CPU-intensive. # To enable system wide have in $GITWEB_CONFIG # $feature{'blame'}{'default'} = [1]; # To have project specific config enable override in $GITWEB_CONFIG # $feature{'blame'}{'override'} = 1; # and in project config gitweb.blame = 0|1; 'blame' => { 'sub' => sub { feature_bool('blame', @_) }, 'override' => 0, 'default' => [0]}, # Enable the 'snapshot' link, providing a compressed archive of any # tree. This can potentially generate high traffic if you have large # project. # Value is a list of formats defined in %known_snapshot_formats that # you wish to offer. # To disable system wide have in $GITWEB_CONFIG # $feature{'snapshot'}{'default'} = []; # To have project specific config enable override in $GITWEB_CONFIG # $feature{'snapshot'}{'override'} = 1; # and in project config, a comma-separated list of formats or "none" # to disable. Example: gitweb.snapshot = tbz2,zip; 'snapshot' => { 'sub' => \&feature_snapshot, 'override' => 0, 'default' => ['tgz']}, # Enable text search, which will list the commits which match author, # committer or commit text to a given string. Enabled by default. # Project specific override is not supported. 'search' => { 'override' => 0, 'default' => [1]}, # Enable grep search, which will list the files in currently selected # tree containing the given string. Enabled by default. This can be # potentially CPU-intensive, of course. # To enable system wide have in $GITWEB_CONFIG # $feature{'grep'}{'default'} = [1]; # To have project specific config enable override in $GITWEB_CONFIG # $feature{'grep'}{'override'} = 1; # and in project config gitweb.grep = 0|1; 'grep' => { 'sub' => sub { feature_bool('grep', @_) }, 'override' => 0, 'default' => [1]}, # Enable the pickaxe search, which will list the commits that modified # a given string in a file. This can be practical and quite faster # alternative to 'blame', but still potentially CPU-intensive. # To enable system wide have in $GITWEB_CONFIG # $feature{'pickaxe'}{'default'} = [1]; # To have project specific config enable override in $GITWEB_CONFIG # $feature{'pickaxe'}{'override'} = 1; # and in project config gitweb.pickaxe = 0|1; 'pickaxe' => { 'sub' => sub { feature_bool('pickaxe', @_) }, 'override' => 0, 'default' => [1]}, # Enable showing size of blobs in a 'tree' view, in a separate # column, similar to what 'ls -l' does. This cost a bit of IO. # To disable system wide have in $GITWEB_CONFIG # $feature{'show-sizes'}{'default'} = [0]; # To have project specific config enable override in $GITWEB_CONFIG # $feature{'show-sizes'}{'override'} = 1; # and in project config gitweb.showsizes = 0|1; 'show-sizes' => { 'sub' => sub { feature_bool('showsizes', @_) }, 'override' => 0, 'default' => [1]}, # Make gitweb use an alternative format of the URLs which can be # more readable and natural-looking: project name is embedded # directly in the path and the query string contains other # auxiliary information. All gitweb installations recognize # URL in either format; this configures in which formats gitweb # generates links. # To enable system wide have in $GITWEB_CONFIG # $feature{'pathinfo'}{'default'} = [1]; # Project specific override is not supported. # Note that you will need to change the default location of CSS, # favicon, logo and possibly other files to an absolute URL. Also, # if gitweb.cgi serves as your indexfile, you will need to force # $my_uri to contain the script name in your $GITWEB_CONFIG. 'pathinfo' => { 'override' => 0, 'default' => [0]}, # Make gitweb consider projects in project root subdirectories # to be forks of existing projects. Given project $projname.git, # projects matching $projname/*.git will not be shown in the main # projects list, instead a '+' mark will be added to $projname # there and a 'forks' view will be enabled for the project, listing # all the forks. If project list is taken from a file, forks have # to be listed after the main project. # To enable system wide have in $GITWEB_CONFIG # $feature{'forks'}{'default'} = [1]; # Project specific override is not supported. 'forks' => { 'override' => 0, 'default' => [0]}, # Insert custom links to the action bar of all project pages. # This enables you mainly to link to third-party scripts integrating # into gitweb; e.g. git-browser for graphical history representation # or custom web-based repository administration interface. # The 'default' value consists of a list of triplets in the form # (label, link, position) where position is the label after which # to insert the link and link is a format string where %n expands # to the project name, %f to the project path within the filesystem, # %h to the current hash (h gitweb parameter) and %b to the current # hash base (hb gitweb parameter); %% expands to %. # To enable system wide have in $GITWEB_CONFIG e.g. # $feature{'actions'}{'default'} = [('graphiclog', # '/git-browser/by-commit.html?r=%n', 'summary')]; # Project specific override is not supported. 'actions' => { 'override' => 0, 'default' => []}, # Allow gitweb scan project content tags described in ctags/ # of project repository, and display the popular Web 2.0-ish # "tag cloud" near the project list. Note that this is something # COMPLETELY different from the normal Git tags. # gitweb by itself can show existing tags, but it does not handle # tagging itself; you need an external application for that. # For an example script, check Girocco's cgi/tagproj.cgi. # You may want to install the HTML::TagCloud Perl module to get # a pretty tag cloud instead of just a list of tags. # To enable system wide have in $GITWEB_CONFIG # $feature{'ctags'}{'default'} = ['path_to_tag_script']; # Project specific override is not supported. 'ctags' => { 'override' => 0, 'default' => [0]}, # The maximum number of patches in a patchset generated in patch # view. Set this to 0 or undef to disable patch view, or to a # negative number to remove any limit. # To disable system wide have in $GITWEB_CONFIG # $feature{'patches'}{'default'} = [0]; # To have project specific config enable override in $GITWEB_CONFIG # $feature{'patches'}{'override'} = 1; # and in project config gitweb.patches = 0|n; # where n is the maximum number of patches allowed in a patchset. 'patches' => { 'sub' => \&feature_patches, 'override' => 0, 'default' => [16]}, # Avatar support. When this feature is enabled, views such as # shortlog or commit will display an avatar associated with # the email of the committer(s) and/or author(s). # Currently available providers are gravatar and picon. # If an unknown provider is specified, the feature is disabled. # Gravatar depends on Digest::MD5. # Picon currently relies on the indiana.edu database. # To enable system wide have in $GITWEB_CONFIG # $feature{'avatar'}{'default'} = ['']; # where is either gravatar or picon. # To have project specific config enable override in $GITWEB_CONFIG # $feature{'avatar'}{'override'} = 1; # and in project config gitweb.avatar = ; 'avatar' => { 'sub' => \&feature_avatar, 'override' => 0, 'default' => ['']}, # Enable displaying how much time and how many git commands # it took to generate and display page. Disabled by default. # Project specific override is not supported. 'timed' => { 'override' => 0, 'default' => [0]}, # Enable turning some links into links to actions which require # JavaScript to run (like 'blame_incremental'). Not enabled by # default. Project specific override is currently not supported. 'javascript-actions' => { 'override' => 0, 'default' => [0]}, ); sub gitweb_get_feature { my ($name) = @_; return unless exists $feature{$name}; my ($sub, $override, @defaults) = ( $feature{$name}{'sub'}, $feature{$name}{'override'}, @{$feature{$name}{'default'}}); if (!$override) { return @defaults; } if (!defined $sub) { warn "feature $name is not overridable"; return @defaults; } return $sub->(@defaults); } # A wrapper to check if a given feature is enabled. # With this, you can say # # my $bool_feat = gitweb_check_feature('bool_feat'); # gitweb_check_feature('bool_feat') or somecode; # # instead of # # my ($bool_feat) = gitweb_get_feature('bool_feat'); # (gitweb_get_feature('bool_feat'))[0] or somecode; # sub gitweb_check_feature { return (gitweb_get_feature(@_))[0]; } sub feature_bool { my $key = shift; my ($val) = git_get_project_config($key, '--bool'); if (!defined $val) { return ($_[0]); } elsif ($val eq 'true') { return (1); } elsif ($val eq 'false') { return (0); } } sub feature_snapshot { my (@fmts) = @_; my ($val) = git_get_project_config('snapshot'); if ($val) { @fmts = ($val eq 'none' ? () : split /\s*[,\s]\s*/, $val); } return @fmts; } sub feature_patches { my @val = (git_get_project_config('patches', '--int')); if (@val) { return @val; } return ($_[0]); } sub feature_avatar { my @val = (git_get_project_config('avatar')); return @val ? @val : @_; } # checking HEAD file with -e is fragile if the repository was # initialized long time ago (i.e. symlink HEAD) and was pack-ref'ed # and then pruned. sub check_head_link { my ($dir) = @_; my $headfile = "$dir/HEAD"; return ((-e $headfile) || (-l $headfile && readlink($headfile) =~ /^refs\/heads\//)); } sub check_export_ok { my ($dir) = @_; return (check_head_link($dir) && (!$export_ok || -e "$dir/$export_ok") && (!$export_auth_hook || $export_auth_hook->($dir))); } # process alternate names for backward compatibility # filter out unsupported (unknown) snapshot formats sub filter_snapshot_fmts { my @fmts = @_; @fmts = map { exists $known_snapshot_format_aliases{$_} ? $known_snapshot_format_aliases{$_} : $_} @fmts; @fmts = grep { exists $known_snapshot_formats{$_} && !$known_snapshot_formats{$_}{'disabled'}} @fmts; } our $GITWEB_CONFIG = $ENV{'GITWEB_CONFIG'} || "gitweb_config.perl"; if (-e $GITWEB_CONFIG) { do $GITWEB_CONFIG; } else { our $GITWEB_CONFIG_SYSTEM = $ENV{'GITWEB_CONFIG_SYSTEM'} || "/etc/gitweb.conf"; do $GITWEB_CONFIG_SYSTEM if -e $GITWEB_CONFIG_SYSTEM; } # version of the core git binary our $git_version = qx("$GIT" --version) =~ m/git version (.*)$/ ? $1 : "unknown"; $number_of_git_cmds++; $projects_list ||= $projectroot; # ====================================================================== # input validation and dispatch # input parameters can be collected from a variety of sources (presently, CGI # and PATH_INFO), so we define an %input_params hash that collects them all # together during validation: this allows subsequent uses (e.g. href()) to be # agnostic of the parameter origin our %input_params = (); # input parameters are stored with the long parameter name as key. This will # also be used in the href subroutine to convert parameters to their CGI # equivalent, and since the href() usage is the most frequent one, we store # the name -> CGI key mapping here, instead of the reverse. # # XXX: Warning: If you touch this, check the search form for updating, # too. our @cgi_param_mapping = ( project => "p", action => "a", file_name => "f", file_parent => "fp", hash => "h", hash_parent => "hp", hash_base => "hb", hash_parent_base => "hpb", page => "pg", order => "o", searchtext => "s", searchtype => "st", snapshot_format => "sf", extra_options => "opt", search_use_regexp => "sr", # this must be last entry (for manipulation from JavaScript) javascript => "js" ); our %cgi_param_mapping = @cgi_param_mapping; # we will also need to know the possible actions, for validation our %actions = ( "blame" => \&git_blame, "blame_incremental" => \&git_blame_incremental, "blame_data" => \&git_blame_data, "blobdiff" => \&git_blobdiff, "blobdiff_plain" => \&git_blobdiff_plain, "blob" => \&git_blob, "blob_plain" => \&git_blob_plain, "commitdiff" => \&git_commitdiff, "commitdiff_plain" => \&git_commitdiff_plain, "commit" => \&git_commit, "forks" => \&git_forks, "heads" => \&git_heads, "history" => \&git_history, "log" => \&git_log, "patch" => \&git_patch, "patches" => \&git_patches, "rss" => \&git_rss, "atom" => \&git_atom, "search" => \&git_search, "search_help" => \&git_search_help, "shortlog" => \&git_shortlog, "summary" => \&git_summary, "tag" => \&git_tag, "tags" => \&git_tags, "tree" => \&git_tree, "snapshot" => \&git_snapshot, "object" => \&git_object, # those below don't need $project "opml" => \&git_opml, "project_list" => \&git_project_list, "project_index" => \&git_project_index, ); # finally, we have the hash of allowed extra_options for the commands that # allow them our %allowed_options = ( "--no-merges" => [ qw(rss atom log shortlog history) ], ); # fill %input_params with the CGI parameters. All values except for 'opt' # should be single values, but opt can be an array. We should probably # build an array of parameters that can be multi-valued, but since for the time # being it's only this one, we just single it out while (my ($name, $symbol) = each %cgi_param_mapping) { if ($symbol eq 'opt') { $input_params{$name} = [ $cgi->param($symbol) ]; } else { $input_params{$name} = $cgi->param($symbol); } } # now read PATH_INFO and update the parameter list for missing parameters sub evaluate_path_info { return if defined $input_params{'project'}; return if !$path_info; $path_info =~ s,^/+,,; return if !$path_info; # find which part of PATH_INFO is project my $project = $path_info; $project =~ s,/+$,,; while ($project && !check_head_link("$projectroot/$project")) { $project =~ s,/*[^/]*$,,; } return unless $project; $input_params{'project'} = $project; # do not change any parameters if an action is given using the query string return if $input_params{'action'}; $path_info =~ s,^\Q$project\E/*,,; # next, check if we have an action my $action = $path_info; $action =~ s,/.*$,,; if (exists $actions{$action}) { $path_info =~ s,^$action/*,,; $input_params{'action'} = $action; } # list of actions that want hash_base instead of hash, but can have no # pathname (f) parameter my @wants_base = ( 'tree', 'history', ); # we want to catch # [$hash_parent_base[:$file_parent]..]$hash_parent[:$file_name] my ($parentrefname, $parentpathname, $refname, $pathname) = ($path_info =~ /^(?:(.+?)(?::(.+))?\.\.)?(.+?)(?::(.+))?$/); # first, analyze the 'current' part if (defined $pathname) { # we got "branch:filename" or "branch:dir/" # we could use git_get_type(branch:pathname), but: # - it needs $git_dir # - it does a git() call # - the convention of terminating directories with a slash # makes it superfluous # - embedding the action in the PATH_INFO would make it even # more superfluous $pathname =~ s,^/+,,; if (!$pathname || substr($pathname, -1) eq "/") { $input_params{'action'} ||= "tree"; $pathname =~ s,/$,,; } else { # the default action depends on whether we had parent info # or not if ($parentrefname) { $input_params{'action'} ||= "blobdiff_plain"; } else { $input_params{'action'} ||= "blob_plain"; } } $input_params{'hash_base'} ||= $refname; $input_params{'file_name'} ||= $pathname; } elsif (defined $refname) { # we got "branch". In this case we have to choose if we have to # set hash or hash_base. # # Most of the actions without a pathname only want hash to be # set, except for the ones specified in @wants_base that want # hash_base instead. It should also be noted that hand-crafted # links having 'history' as an action and no pathname or hash # set will fail, but that happens regardless of PATH_INFO. $input_params{'action'} ||= "shortlog"; if (grep { $_ eq $input_params{'action'} } @wants_base) { $input_params{'hash_base'} ||= $refname; } else { $input_params{'hash'} ||= $refname; } } # next, handle the 'parent' part, if present if (defined $parentrefname) { # a missing pathspec defaults to the 'current' filename, allowing e.g. # someproject/blobdiff/oldrev..newrev:/filename if ($parentpathname) { $parentpathname =~ s,^/+,,; $parentpathname =~ s,/$,,; $input_params{'file_parent'} ||= $parentpathname; } else { $input_params{'file_parent'} ||= $input_params{'file_name'}; } # we assume that hash_parent_base is wanted if a path was specified, # or if the action wants hash_base instead of hash if (defined $input_params{'file_parent'} || grep { $_ eq $input_params{'action'} } @wants_base) { $input_params{'hash_parent_base'} ||= $parentrefname; } else { $input_params{'hash_parent'} ||= $parentrefname; } } # for the snapshot action, we allow URLs in the form # $project/snapshot/$hash.ext # where .ext determines the snapshot and gets removed from the # passed $refname to provide the $hash. # # To be able to tell that $refname includes the format extension, we # require the following two conditions to be satisfied: # - the hash input parameter MUST have been set from the $refname part # of the URL (i.e. they must be equal) # - the snapshot format MUST NOT have been defined already (e.g. from # CGI parameter sf) # It's also useless to try any matching unless $refname has a dot, # so we check for that too if (defined $input_params{'action'} && $input_params{'action'} eq 'snapshot' && defined $refname && index($refname, '.') != -1 && $refname eq $input_params{'hash'} && !defined $input_params{'snapshot_format'}) { # We loop over the known snapshot formats, checking for # extensions. Allowed extensions are both the defined suffix # (which includes the initial dot already) and the snapshot # format key itself, with a prepended dot while (my ($fmt, $opt) = each %known_snapshot_formats) { my $hash = $refname; unless ($hash =~ s/(\Q$opt->{'suffix'}\E|\Q.$fmt\E)$//) { next; } my $sfx = $1; # a valid suffix was found, so set the snapshot format # and reset the hash parameter $input_params{'snapshot_format'} = $fmt; $input_params{'hash'} = $hash; # we also set the format suffix to the one requested # in the URL: this way a request for e.g. .tgz returns # a .tgz instead of a .tar.gz $known_snapshot_formats{$fmt}{'suffix'} = $sfx; last; } } } evaluate_path_info(); our $action = $input_params{'action'}; if (defined $action) { if (!validate_action($action)) { die_error(400, "Invalid action parameter"); } } # parameters which are pathnames our $project = $input_params{'project'}; if (defined $project) { if (!validate_project($project)) { undef $project; die_error(404, "No such project"); } } our $file_name = $input_params{'file_name'}; if (defined $file_name) { if (!validate_pathname($file_name)) { die_error(400, "Invalid file parameter"); } } our $file_parent = $input_params{'file_parent'}; if (defined $file_parent) { if (!validate_pathname($file_parent)) { die_error(400, "Invalid file parent parameter"); } } # parameters which are refnames our $hash = $input_params{'hash'}; if (defined $hash) { if (!validate_refname($hash)) { die_error(400, "Invalid hash parameter"); } } our $hash_parent = $input_params{'hash_parent'}; if (defined $hash_parent) { if (!validate_refname($hash_parent)) { die_error(400, "Invalid hash parent parameter"); } } our $hash_base = $input_params{'hash_base'}; if (defined $hash_base) { if (!validate_refname($hash_base)) { die_error(400, "Invalid hash base parameter"); } } our @extra_options = @{$input_params{'extra_options'}}; # @extra_options is always defined, since it can only be (currently) set from # CGI, and $cgi->param() returns the empty array in array context if the param # is not set foreach my $opt (@extra_options) { if (not exists $allowed_options{$opt}) { die_error(400, "Invalid option parameter"); } if (not grep(/^$action$/, @{$allowed_options{$opt}})) { die_error(400, "Invalid option parameter for this action"); } } our $hash_parent_base = $input_params{'hash_parent_base'}; if (defined $hash_parent_base) { if (!validate_refname($hash_parent_base)) { die_error(400, "Invalid hash parent base parameter"); } } # other parameters our $page = $input_params{'page'}; if (defined $page) { if ($page =~ m/[^0-9]/) { die_error(400, "Invalid page parameter"); } } our $searchtype = $input_params{'searchtype'}; if (defined $searchtype) { if ($searchtype =~ m/[^a-z]/) { die_error(400, "Invalid searchtype parameter"); } } our $search_use_regexp = $input_params{'search_use_regexp'}; our $searchtext = $input_params{'searchtext'}; our $search_regexp; if (defined $searchtext) { if (length($searchtext) < 2) { die_error(403, "At least two characters are required for search parameter"); } $search_regexp = $search_use_regexp ? $searchtext : quotemeta $searchtext; } # path to the current git repository our $git_dir; $git_dir = "$projectroot/$project" if $project; # list of supported snapshot formats our @snapshot_fmts = gitweb_get_feature('snapshot'); @snapshot_fmts = filter_snapshot_fmts(@snapshot_fmts); # check that the avatar feature is set to a known provider name, # and for each provider check if the dependencies are satisfied. # if the provider name is invalid or the dependencies are not met, # reset $git_avatar to the empty string. our ($git_avatar) = gitweb_get_feature('avatar'); if ($git_avatar eq 'gravatar') { $git_avatar = '' unless (eval { require Digest::MD5; 1; }); } elsif ($git_avatar eq 'picon') { # no dependencies } else { $git_avatar = ''; } # dispatch if (!defined $action) { if (defined $hash) { $action = git_get_type($hash); } elsif (defined $hash_base && defined $file_name) { $action = git_get_type("$hash_base:$file_name"); } elsif (defined $project) { $action = 'summary'; } else { $action = 'project_list'; } } if (!defined($actions{$action})) { die_error(400, "Unknown action"); } if ($action !~ m/^(?:opml|project_list|project_index)$/ && !$project) { die_error(400, "Project needed"); } $actions{$action}->(); exit; ## ====================================================================== ## action links sub href { my %params = @_; # default is to use -absolute url() i.e. $my_uri my $href = $params{-full} ? $my_url : $my_uri; $params{'project'} = $project unless exists $params{'project'}; if ($params{-replay}) { while (my ($name, $symbol) = each %cgi_param_mapping) { if (!exists $params{$name}) { $params{$name} = $input_params{$name}; } } } my $use_pathinfo = gitweb_check_feature('pathinfo'); if ($use_pathinfo and defined $params{'project'}) { # try to put as many parameters as possible in PATH_INFO: # - project name # - action # - hash_parent or hash_parent_base:/file_parent # - hash or hash_base:/filename # - the snapshot_format as an appropriate suffix # When the script is the root DirectoryIndex for the domain, # $href here would be something like http://gitweb.example.com/ # Thus, we strip any trailing / from $href, to spare us double # slashes in the final URL $href =~ s,/$,,; # Then add the project name, if present $href .= "/".esc_url($params{'project'}); delete $params{'project'}; # since we destructively absorb parameters, we keep this # boolean that remembers if we're handling a snapshot my $is_snapshot = $params{'action'} eq 'snapshot'; # Summary just uses the project path URL, any other action is # added to the URL if (defined $params{'action'}) { $href .= "/".esc_url($params{'action'}) unless $params{'action'} eq 'summary'; delete $params{'action'}; } # Next, we put hash_parent_base:/file_parent..hash_base:/file_name, # stripping nonexistent or useless pieces $href .= "/" if ($params{'hash_base'} || $params{'hash_parent_base'} || $params{'hash_parent'} || $params{'hash'}); if (defined $params{'hash_base'}) { if (defined $params{'hash_parent_base'}) { $href .= esc_url($params{'hash_parent_base'}); # skip the file_parent if it's the same as the file_name if (defined $params{'file_parent'}) { if (defined $params{'file_name'} && $params{'file_parent'} eq $params{'file_name'}) { delete $params{'file_parent'}; } elsif ($params{'file_parent'} !~ /\.\./) { $href .= ":/".esc_url($params{'file_parent'}); delete $params{'file_parent'}; } } $href .= ".."; delete $params{'hash_parent'}; delete $params{'hash_parent_base'}; } elsif (defined $params{'hash_parent'}) { $href .= esc_url($params{'hash_parent'}). ".."; delete $params{'hash_parent'}; } $href .= esc_url($params{'hash_base'}); if (defined $params{'file_name'} && $params{'file_name'} !~ /\.\./) { $href .= ":/".esc_url($params{'file_name'}); delete $params{'file_name'}; } delete $params{'hash'}; delete $params{'hash_base'}; } elsif (defined $params{'hash'}) { $href .= esc_url($params{'hash'}); delete $params{'hash'}; } # If the action was a snapshot, we can absorb the # snapshot_format parameter too if ($is_snapshot) { my $fmt = $params{'snapshot_format'}; # snapshot_format should always be defined when href() # is called, but just in case some code forgets, we # fall back to the default $fmt ||= $snapshot_fmts[0]; $href .= $known_snapshot_formats{$fmt}{'suffix'}; delete $params{'snapshot_format'}; } } # now encode the parameters explicitly my @result = (); for (my $i = 0; $i < @cgi_param_mapping; $i += 2) { my ($name, $symbol) = ($cgi_param_mapping[$i], $cgi_param_mapping[$i+1]); if (defined $params{$name}) { if (ref($params{$name}) eq "ARRAY") { foreach my $par (@{$params{$name}}) { push @result, $symbol . "=" . esc_param($par); } } else { push @result, $symbol . "=" . esc_param($params{$name}); } } } $href .= "?" . join(';', @result) if scalar @result; return $href; } ## ====================================================================== ## validation, quoting/unquoting and escaping sub validate_action { my $input = shift || return undef; return undef unless exists $actions{$input}; return $input; } sub validate_project { my $input = shift || return undef; if (!validate_pathname($input) || !(-d "$projectroot/$input") || !check_export_ok("$projectroot/$input") || ($strict_export && !project_in_list($input))) { return undef; } else { return $input; } } sub validate_pathname { my $input = shift || return undef; # no '.' or '..' as elements of path, i.e. no '.' nor '..' # at the beginning, at the end, and between slashes. # also this catches doubled slashes if ($input =~ m!(^|/)(|\.|\.\.)(/|$)!) { return undef; } # no null characters if ($input =~ m!\0!) { return undef; } return $input; } sub validate_refname { my $input = shift || return undef; # textual hashes are O.K. if ($input =~ m/^[0-9a-fA-F]{40}$/) { return $input; } # it must be correct pathname $input = validate_pathname($input) or return undef; # restrictions on ref name according to git-check-ref-format if ($input =~ m!(/\.|\.\.|[\000-\040\177 ~^:?*\[]|/$)!) { return undef; } return $input; } # decode sequences of octets in utf8 into Perl's internal form, # which is utf-8 with utf8 flag set if needed. gitweb writes out # in utf-8 thanks to "binmode STDOUT, ':utf8'" at beginning sub to_utf8 { my $str = shift; if (utf8::valid($str)) { utf8::decode($str); return $str; } else { return decode($fallback_encoding, $str, Encode::FB_DEFAULT); } } # quote unsafe chars, but keep the slash, even when it's not # correct, but quoted slashes look too horrible in bookmarks sub esc_param { my $str = shift; $str =~ s/([^A-Za-z0-9\-_.~()\/:@ ]+)/CGI::escape($1)/eg; $str =~ s/ /\+/g; return $str; } # quote unsafe chars in whole URL, so some charactrs cannot be quoted sub esc_url { my $str = shift; $str =~ s/([^A-Za-z0-9\-_.~();\/;?:@&=])/sprintf("%%%02X", ord($1))/eg; $str =~ s/\+/%2B/g; $str =~ s/ /\+/g; return $str; } # replace invalid utf8 character with SUBSTITUTION sequence sub esc_html { my $str = shift; my %opts = @_; $str = to_utf8($str); $str = $cgi->escapeHTML($str); if ($opts{'-nbsp'}) { $str =~ s/ / /g; } $str =~ s|([[:cntrl:]])|(($1 ne "\t") ? quot_cec($1) : $1)|eg; return $str; } # quote control characters and escape filename to HTML sub esc_path { my $str = shift; my %opts = @_; $str = to_utf8($str); $str = $cgi->escapeHTML($str); if ($opts{'-nbsp'}) { $str =~ s/ / /g; } $str =~ s|([[:cntrl:]])|quot_cec($1)|eg; return $str; } # Make control characters "printable", using character escape codes (CEC) sub quot_cec { my $cntrl = shift; my %opts = @_; my %es = ( # character escape codes, aka escape sequences "\t" => '\t', # tab (HT) "\n" => '\n', # line feed (LF) "\r" => '\r', # carrige return (CR) "\f" => '\f', # form feed (FF) "\b" => '\b', # backspace (BS) "\a" => '\a', # alarm (bell) (BEL) "\e" => '\e', # escape (ESC) "\013" => '\v', # vertical tab (VT) "\000" => '\0', # nul character (NUL) ); my $chr = ( (exists $es{$cntrl}) ? $es{$cntrl} : sprintf('\%2x', ord($cntrl)) ); if ($opts{-nohtml}) { return $chr; } else { return "$chr"; } } # Alternatively use unicode control pictures codepoints, # Unicode "printable representation" (PR) sub quot_upr { my $cntrl = shift; my %opts = @_; my $chr = sprintf('&#%04d;', 0x2400+ord($cntrl)); if ($opts{-nohtml}) { return $chr; } else { return "$chr"; } } # git may return quoted and escaped filenames sub unquote { my $str = shift; sub unq { my $seq = shift; my %es = ( # character escape codes, aka escape sequences 't' => "\t", # tab (HT, TAB) 'n' => "\n", # newline (NL) 'r' => "\r", # return (CR) 'f' => "\f", # form feed (FF) 'b' => "\b", # backspace (BS) 'a' => "\a", # alarm (bell) (BEL) 'e' => "\e", # escape (ESC) 'v' => "\013", # vertical tab (VT) ); if ($seq =~ m/^[0-7]{1,3}$/) { # octal char sequence return chr(oct($seq)); } elsif (exists $es{$seq}) { # C escape sequence, aka character escape code return $es{$seq}; } # quoted ordinary character return $seq; } if ($str =~ m/^"(.*)"$/) { # needs unquoting $str = $1; $str =~ s/\\([^0-7]|[0-7]{1,3})/unq($1)/eg; } return $str; } # escape tabs (convert tabs to spaces) sub untabify { my $line = shift; while ((my $pos = index($line, "\t")) != -1) { if (my $count = (8 - ($pos % 8))) { my $spaces = ' ' x $count; $line =~ s/\t/$spaces/; } } return $line; } sub project_in_list { my $project = shift; my @list = git_get_projects_list(); return @list && scalar(grep { $_->{'path'} eq $project } @list); } ## ---------------------------------------------------------------------- ## HTML aware string manipulation # Try to chop given string on a word boundary between position # $len and $len+$add_len. If there is no word boundary there, # chop at $len+$add_len. Do not chop if chopped part plus ellipsis # (marking chopped part) would be longer than given string. sub chop_str { my $str = shift; my $len = shift; my $add_len = shift || 10; my $where = shift || 'right'; # 'left' | 'center' | 'right' # Make sure perl knows it is utf8 encoded so we don't # cut in the middle of a utf8 multibyte char. $str = to_utf8($str); # allow only $len chars, but don't cut a word if it would fit in $add_len # if it doesn't fit, cut it if it's still longer than the dots we would add # remove chopped character entities entirely # when chopping in the middle, distribute $len into left and right part # return early if chopping wouldn't make string shorter if ($where eq 'center') { return $str if ($len + 5 >= length($str)); # filler is length 5 $len = int($len/2); } else { return $str if ($len + 4 >= length($str)); # filler is length 4 } # regexps: ending and beginning with word part up to $add_len my $endre = qr/.{$len}\w{0,$add_len}/; my $begre = qr/\w{0,$add_len}.{$len}/; if ($where eq 'left') { $str =~ m/^(.*?)($begre)$/; my ($lead, $body) = ($1, $2); if (length($lead) > 4) { $body =~ s/^[^;]*;// if ($lead =~ m/&[^;]*$/); $lead = " ..."; } return "$lead$body"; } elsif ($where eq 'center') { $str =~ m/^($endre)(.*)$/; my ($left, $str) = ($1, $2); $str =~ m/^(.*?)($begre)$/; my ($mid, $right) = ($1, $2); if (length($mid) > 5) { $left =~ s/&[^;]*$//; $right =~ s/^[^;]*;// if ($mid =~ m/&[^;]*$/); $mid = " ... "; } return "$left$mid$right"; } else { $str =~ m/^($endre)(.*)$/; my $body = $1; my $tail = $2; if (length($tail) > 4) { $body =~ s/&[^;]*$//; $tail = "... "; } return "$body$tail"; } } # takes the same arguments as chop_str, but also wraps a around the # result with a title attribute if it does get chopped. Additionally, the # string is HTML-escaped. sub chop_and_escape_str { my ($str) = @_; my $chopped = chop_str(@_); if ($chopped eq $str) { return esc_html($chopped); } else { $str =~ s/[[:cntrl:]]/?/g; return $cgi->span({-title=>$str}, esc_html($chopped)); } } ## ---------------------------------------------------------------------- ## functions returning short strings # CSS class for given age value (in seconds) sub age_class { my $age = shift; if (!defined $age) { return "noage"; } elsif ($age < 60*60*2) { return "age0"; } elsif ($age < 60*60*24*2) { return "age1"; } else { return "age2"; } } # convert age in seconds to "nn units ago" string sub age_string { my $age = shift; my $age_str; if ($age > 60*60*24*365*2) { $age_str = (int $age/60/60/24/365); $age_str .= " years ago"; } elsif ($age > 60*60*24*(365/12)*2) { $age_str = int $age/60/60/24/(365/12); $age_str .= " months ago"; } elsif ($age > 60*60*24*7*2) { $age_str = int $age/60/60/24/7; $age_str .= " weeks ago"; } elsif ($age > 60*60*24*2) { $age_str = int $age/60/60/24; $age_str .= " days ago"; } elsif ($age > 60*60*2) { $age_str = int $age/60/60; $age_str .= " hours ago"; } elsif ($age > 60*2) { $age_str = int $age/60; $age_str .= " min ago"; } elsif ($age > 2) { $age_str = int $age; $age_str .= " sec ago"; } else { $age_str .= " right now"; } return $age_str; } use constant { S_IFINVALID => 0030000, S_IFGITLINK => 0160000, }; # submodule/subproject, a commit object reference sub S_ISGITLINK { my $mode = shift; return (($mode & S_IFMT) == S_IFGITLINK) } # convert file mode in octal to symbolic file mode string sub mode_str { my $mode = oct shift; if (S_ISGITLINK($mode)) { return 'm---------'; } elsif (S_ISDIR($mode & S_IFMT)) { return 'drwxr-xr-x'; } elsif (S_ISLNK($mode)) { return 'lrwxrwxrwx'; } elsif (S_ISREG($mode)) { # git cares only about the executable bit if ($mode & S_IXUSR) { return '-rwxr-xr-x'; } else { return '-rw-r--r--'; }; } else { return '----------'; } } # convert file mode in octal to file type string sub file_type { my $mode = shift; if ($mode !~ m/^[0-7]+$/) { return $mode; } else { $mode = oct $mode; } if (S_ISGITLINK($mode)) { return "submodule"; } elsif (S_ISDIR($mode & S_IFMT)) { return "directory"; } elsif (S_ISLNK($mode)) { return "symlink"; } elsif (S_ISREG($mode)) { return "file"; } else { return "unknown"; } } # convert file mode in octal to file type description string sub file_type_long { my $mode = shift; if ($mode !~ m/^[0-7]+$/) { return $mode; } else { $mode = oct $mode; } if (S_ISGITLINK($mode)) { return "submodule"; } elsif (S_ISDIR($mode & S_IFMT)) { return "directory"; } elsif (S_ISLNK($mode)) { return "symlink"; } elsif (S_ISREG($mode)) { if ($mode & S_IXUSR) { return "executable"; } else { return "file"; }; } else { return "unknown"; } } ## ---------------------------------------------------------------------- ## functions returning short HTML fragments, or transforming HTML fragments ## which don't belong to other sections # format line of commit message. sub format_log_line_html { my $line = shift; $line = esc_html($line, -nbsp=>1); $line =~ s{\b([0-9a-fA-F]{8,40})\b}{ $cgi->a({-href => href(action=>"object", hash=>$1), -class => "text"}, $1); }eg; return $line; } # format marker of refs pointing to given object # the destination action is chosen based on object type and current context: # - for annotated tags, we choose the tag view unless it's the current view # already, in which case we go to shortlog view # - for other refs, we keep the current view if we're in history, shortlog or # log view, and select shortlog otherwise sub format_ref_marker { my ($refs, $id) = @_; my $markers = ''; if (defined $refs->{$id}) { foreach my $ref (@{$refs->{$id}}) { # this code exploits the fact that non-lightweight tags are the # only indirect objects, and that they are the only objects for which # we want to use tag instead of shortlog as action my ($type, $name) = qw(); my $indirect = ($ref =~ s/\^\{\}$//); # e.g. tags/v2.6.11 or heads/next if ($ref =~ m!^(.*?)s?/(.*)$!) { $type = $1; $name = $2; } else { $type = "ref"; $name = $ref; } my $class = $type; $class .= " indirect" if $indirect; my $dest_action = "shortlog"; if ($indirect) { $dest_action = "tag" unless $action eq "tag"; } elsif ($action =~ /^(history|(short)?log)$/) { $dest_action = $action; } my $dest = ""; $dest .= "refs/" unless $ref =~ m!^refs/!; $dest .= $ref; my $link = $cgi->a({ -href => href( action=>$dest_action, hash=>$dest )}, $name); $markers .= " " . $link . ""; } } if ($markers) { return ' '. $markers . ''; } else { return ""; } } # format, perhaps shortened and with markers, title line sub format_subject_html { my ($long, $short, $href, $extra) = @_; $extra = '' unless defined($extra); if (length($short) < length($long)) { $long =~ s/[[:cntrl:]]/?/g; return $cgi->a({-href => $href, -class => "list subject", -title => to_utf8($long)}, esc_html($short)) . $extra; } else { return $cgi->a({-href => $href, -class => "list subject"}, esc_html($long)) . $extra; } } # Rather than recomputing the url for an email multiple times, we cache it # after the first hit. This gives a visible benefit in views where the avatar # for the same email is used repeatedly (e.g. shortlog). # The cache is shared by all avatar engines (currently gravatar only), which # are free to use it as preferred. Since only one avatar engine is used for any # given page, there's no risk for cache conflicts. our %avatar_cache = (); # Compute the picon url for a given email, by using the picon search service over at # http://www.cs.indiana.edu/picons/search.html sub picon_url { my $email = lc shift; if (!$avatar_cache{$email}) { my ($user, $domain) = split('@', $email); $avatar_cache{$email} = "http://www.cs.indiana.edu/cgi-pub/kinzler/piconsearch.cgi/" . "$domain/$user/" . "users+domains+unknown/up/single"; } return $avatar_cache{$email}; } # Compute the gravatar url for a given email, if it's not in the cache already. # Gravatar stores only the part of the URL before the size, since that's the # one computationally more expensive. This also allows reuse of the cache for # different sizes (for this particular engine). sub gravatar_url { my $email = lc shift; my $size = shift; $avatar_cache{$email} ||= "http://www.gravatar.com/avatar/" . Digest::MD5::md5_hex($email) . "?s="; return $avatar_cache{$email} . $size; } # Insert an avatar for the given $email at the given $size if the feature # is enabled. sub git_get_avatar { my ($email, %opts) = @_; my $pre_white = ($opts{-pad_before} ? " " : ""); my $post_white = ($opts{-pad_after} ? " " : ""); $opts{-size} ||= 'default'; my $size = $avatar_size{$opts{-size}} || $avatar_size{'default'}; my $url = ""; if ($git_avatar eq 'gravatar') { $url = gravatar_url($email, $size); } elsif ($git_avatar eq 'picon') { $url = picon_url($email); } # Other providers can be added by extending the if chain, defining $url # as needed. If no variant puts something in $url, we assume avatars # are completely disabled/unavailable. if ($url) { return $pre_white . "" . $post_white; } else { return ""; } } sub format_search_author { my ($author, $searchtype, $displaytext) = @_; my $have_search = gitweb_check_feature('search'); if ($have_search) { my $performed = ""; if ($searchtype eq 'author') { $performed = "authored"; } elsif ($searchtype eq 'committer') { $performed = "committed"; } return $cgi->a({-href => href(action=>"search", hash=>$hash, searchtext=>$author, searchtype=>$searchtype), class=>"list", title=>"Search for commits $performed by $author"}, $displaytext); } else { return $displaytext; } } # format the author name of the given commit with the given tag # the author name is chopped and escaped according to the other # optional parameters (see chop_str). sub format_author_html { my $tag = shift; my $co = shift; my $author = chop_and_escape_str($co->{'author_name'}, @_); return "<$tag class=\"author\">" . format_search_author($co->{'author_name'}, "author", git_get_avatar($co->{'author_email'}, -pad_after => 1) . $author) . ""; } # format git diff header line, i.e. "diff --(git|combined|cc) ..." sub format_git_diff_header_line { my $line = shift; my $diffinfo = shift; my ($from, $to) = @_; if ($diffinfo->{'nparents'}) { # combined diff $line =~ s!^(diff (.*?) )"?.*$!$1!; if ($to->{'href'}) { $line .= $cgi->a({-href => $to->{'href'}, -class => "path"}, esc_path($to->{'file'})); } else { # file was deleted (no href) $line .= esc_path($to->{'file'}); } } else { # "ordinary" diff $line =~ s!^(diff (.*?) )"?a/.*$!$1!; if ($from->{'href'}) { $line .= $cgi->a({-href => $from->{'href'}, -class => "path"}, 'a/' . esc_path($from->{'file'})); } else { # file was added (no href) $line .= 'a/' . esc_path($from->{'file'}); } $line .= ' '; if ($to->{'href'}) { $line .= $cgi->a({-href => $to->{'href'}, -class => "path"}, 'b/' . esc_path($to->{'file'})); } else { # file was deleted $line .= 'b/' . esc_path($to->{'file'}); } } return "
    $line
    \n"; } # format extended diff header line, before patch itself sub format_extended_diff_header_line { my $line = shift; my $diffinfo = shift; my ($from, $to) = @_; # match if ($line =~ s!^((copy|rename) from ).*$!$1! && $from->{'href'}) { $line .= $cgi->a({-href=>$from->{'href'}, -class=>"path"}, esc_path($from->{'file'})); } if ($line =~ s!^((copy|rename) to ).*$!$1! && $to->{'href'}) { $line .= $cgi->a({-href=>$to->{'href'}, -class=>"path"}, esc_path($to->{'file'})); } # match single if ($line =~ m/\s(\d{6})$/) { $line .= ' (' . file_type_long($1) . ')'; } # match if ($line =~ m/^index [0-9a-fA-F]{40},[0-9a-fA-F]{40}/) { # can match only for combined diff $line = 'index '; for (my $i = 0; $i < $diffinfo->{'nparents'}; $i++) { if ($from->{'href'}[$i]) { $line .= $cgi->a({-href=>$from->{'href'}[$i], -class=>"hash"}, substr($diffinfo->{'from_id'}[$i],0,7)); } else { $line .= '0' x 7; } # separator $line .= ',' if ($i < $diffinfo->{'nparents'} - 1); } $line .= '..'; if ($to->{'href'}) { $line .= $cgi->a({-href=>$to->{'href'}, -class=>"hash"}, substr($diffinfo->{'to_id'},0,7)); } else { $line .= '0' x 7; } } elsif ($line =~ m/^index [0-9a-fA-F]{40}..[0-9a-fA-F]{40}/) { # can match only for ordinary diff my ($from_link, $to_link); if ($from->{'href'}) { $from_link = $cgi->a({-href=>$from->{'href'}, -class=>"hash"}, substr($diffinfo->{'from_id'},0,7)); } else { $from_link = '0' x 7; } if ($to->{'href'}) { $to_link = $cgi->a({-href=>$to->{'href'}, -class=>"hash"}, substr($diffinfo->{'to_id'},0,7)); } else { $to_link = '0' x 7; } my ($from_id, $to_id) = ($diffinfo->{'from_id'}, $diffinfo->{'to_id'}); $line =~ s!$from_id\.\.$to_id!$from_link..$to_link!; } return $line . "
    \n"; } # format from-file/to-file diff header sub format_diff_from_to_header { my ($from_line, $to_line, $diffinfo, $from, $to, @parents) = @_; my $line; my $result = ''; $line = $from_line; #assert($line =~ m/^---/) if DEBUG; # no extra formatting for "^--- /dev/null" if (! $diffinfo->{'nparents'}) { # ordinary (single parent) diff if ($line =~ m!^--- "?a/!) { if ($from->{'href'}) { $line = '--- a/' . $cgi->a({-href=>$from->{'href'}, -class=>"path"}, esc_path($from->{'file'})); } else { $line = '--- a/' . esc_path($from->{'file'}); } } $result .= qq!
    $line
    \n!; } else { # combined diff (merge commit) for (my $i = 0; $i < $diffinfo->{'nparents'}; $i++) { if ($from->{'href'}[$i]) { $line = '--- ' . $cgi->a({-href=>href(action=>"blobdiff", hash_parent=>$diffinfo->{'from_id'}[$i], hash_parent_base=>$parents[$i], file_parent=>$from->{'file'}[$i], hash=>$diffinfo->{'to_id'}, hash_base=>$hash, file_name=>$to->{'file'}), -class=>"path", -title=>"diff" . ($i+1)}, $i+1) . '/' . $cgi->a({-href=>$from->{'href'}[$i], -class=>"path"}, esc_path($from->{'file'}[$i])); } else { $line = '--- /dev/null'; } $result .= qq!
    $line
    \n!; } } $line = $to_line; #assert($line =~ m/^\+\+\+/) if DEBUG; # no extra formatting for "^+++ /dev/null" if ($line =~ m!^\+\+\+ "?b/!) { if ($to->{'href'}) { $line = '+++ b/' . $cgi->a({-href=>$to->{'href'}, -class=>"path"}, esc_path($to->{'file'})); } else { $line = '+++ b/' . esc_path($to->{'file'}); } } $result .= qq!
    $line
    \n!; return $result; } # create note for patch simplified by combined diff sub format_diff_cc_simplified { my ($diffinfo, @parents) = @_; my $result = ''; $result .= "
    " . "diff --cc "; if (!is_deleted($diffinfo)) { $result .= $cgi->a({-href => href(action=>"blob", hash_base=>$hash, hash=>$diffinfo->{'to_id'}, file_name=>$diffinfo->{'to_file'}), -class => "path"}, esc_path($diffinfo->{'to_file'})); } else { $result .= esc_path($diffinfo->{'to_file'}); } $result .= "
    \n" . # class="diff header" "
    " . "Simple merge" . "
    \n"; # class="diff nodifferences" return $result; } # format patch (diff) line (not to be used for diff headers) sub format_diff_line { my $line = shift; my ($from, $to) = @_; my $diff_class = ""; chomp $line; if ($from && $to && ref($from->{'href'}) eq "ARRAY") { # combined diff my $prefix = substr($line, 0, scalar @{$from->{'href'}}); if ($line =~ m/^\@{3}/) { $diff_class = " chunk_header"; } elsif ($line =~ m/^\\/) { $diff_class = " incomplete"; } elsif ($prefix =~ tr/+/+/) { $diff_class = " add"; } elsif ($prefix =~ tr/-/-/) { $diff_class = " rem"; } } else { # assume ordinary diff my $char = substr($line, 0, 1); if ($char eq '+') { $diff_class = " add"; } elsif ($char eq '-') { $diff_class = " rem"; } elsif ($char eq '@') { $diff_class = " chunk_header"; } elsif ($char eq "\\") { $diff_class = " incomplete"; } } $line = untabify($line); if ($from && $to && $line =~ m/^\@{2} /) { my ($from_text, $from_start, $from_lines, $to_text, $to_start, $to_lines, $section) = $line =~ m/^\@{2} (-(\d+)(?:,(\d+))?) (\+(\d+)(?:,(\d+))?) \@{2}(.*)$/; $from_lines = 0 unless defined $from_lines; $to_lines = 0 unless defined $to_lines; if ($from->{'href'}) { $from_text = $cgi->a({-href=>"$from->{'href'}#l$from_start", -class=>"list"}, $from_text); } if ($to->{'href'}) { $to_text = $cgi->a({-href=>"$to->{'href'}#l$to_start", -class=>"list"}, $to_text); } $line = "@@ $from_text $to_text @@" . "" . esc_html($section, -nbsp=>1) . ""; return "
    $line
    \n"; } elsif ($from && $to && $line =~ m/^\@{3}/) { my ($prefix, $ranges, $section) = $line =~ m/^(\@+) (.*?) \@+(.*)$/; my (@from_text, @from_start, @from_nlines, $to_text, $to_start, $to_nlines); @from_text = split(' ', $ranges); for (my $i = 0; $i < @from_text; ++$i) { ($from_start[$i], $from_nlines[$i]) = (split(',', substr($from_text[$i], 1)), 0); } $to_text = pop @from_text; $to_start = pop @from_start; $to_nlines = pop @from_nlines; $line = "$prefix "; for (my $i = 0; $i < @from_text; ++$i) { if ($from->{'href'}[$i]) { $line .= $cgi->a({-href=>"$from->{'href'}[$i]#l$from_start[$i]", -class=>"list"}, $from_text[$i]); } else { $line .= $from_text[$i]; } $line .= " "; } if ($to->{'href'}) { $line .= $cgi->a({-href=>"$to->{'href'}#l$to_start", -class=>"list"}, $to_text); } else { $line .= $to_text; } $line .= " $prefix" . "" . esc_html($section, -nbsp=>1) . ""; return "
    $line
    \n"; } return "
    " . esc_html($line, -nbsp=>1) . "
    \n"; } # Generates undef or something like "_snapshot_" or "snapshot (_tbz2_ _zip_)", # linked. Pass the hash of the tree/commit to snapshot. sub format_snapshot_links { my ($hash) = @_; my $num_fmts = @snapshot_fmts; if ($num_fmts > 1) { # A parenthesized list of links bearing format names. # e.g. "snapshot (_tar.gz_ _zip_)" return "snapshot (" . join(' ', map $cgi->a({ -href => href( action=>"snapshot", hash=>$hash, snapshot_format=>$_ ) }, $known_snapshot_formats{$_}{'display'}) , @snapshot_fmts) . ")"; } elsif ($num_fmts == 1) { # A single "snapshot" link whose tooltip bears the format name. # i.e. "_snapshot_" my ($fmt) = @snapshot_fmts; return $cgi->a({ -href => href( action=>"snapshot", hash=>$hash, snapshot_format=>$fmt ), -title => "in format: $known_snapshot_formats{$fmt}{'display'}" }, "snapshot"); } else { # $num_fmts == 0 return undef; } } ## ...................................................................... ## functions returning values to be passed, perhaps after some ## transformation, to other functions; e.g. returning arguments to href() # returns hash to be passed to href to generate gitweb URL # in -title key it returns description of link sub get_feed_info { my $format = shift || 'Atom'; my %res = (action => lc($format)); # feed links are possible only for project views return unless (defined $project); # some views should link to OPML, or to generic project feed, # or don't have specific feed yet (so they should use generic) return if ($action =~ /^(?:tags|heads|forks|tag|search)$/x); my $branch; # branches refs uses 'refs/heads/' prefix (fullname) to differentiate # from tag links; this also makes possible to detect branch links if ((defined $hash_base && $hash_base =~ m!^refs/heads/(.*)$!) || (defined $hash && $hash =~ m!^refs/heads/(.*)$!)) { $branch = $1; } # find log type for feed description (title) my $type = 'log'; if (defined $file_name) { $type = "history of $file_name"; $type .= "/" if ($action eq 'tree'); $type .= " on '$branch'" if (defined $branch); } else { $type = "log of $branch" if (defined $branch); } $res{-title} = $type; $res{'hash'} = (defined $branch ? "refs/heads/$branch" : undef); $res{'file_name'} = $file_name; return %res; } ## ---------------------------------------------------------------------- ## git utility subroutines, invoking git commands # returns path to the core git executable and the --git-dir parameter as list sub git_cmd { $number_of_git_cmds++; return $GIT, '--git-dir='.$git_dir; } # quote the given arguments for passing them to the shell # quote_command("command", "arg 1", "arg with ' and ! characters") # => "'command' 'arg 1' 'arg with '\'' and '\!' characters'" # Try to avoid using this function wherever possible. sub quote_command { return join(' ', map { my $a = $_; $a =~ s/(['!])/'\\$1'/g; "'$a'" } @_ ); } # get HEAD ref of given project as hash sub git_get_head_hash { return git_get_full_hash(shift, 'HEAD'); } sub git_get_full_hash { return git_get_hash(@_); } sub git_get_short_hash { return git_get_hash(@_, '--short=7'); } sub git_get_hash { my ($project, $hash, @options) = @_; my $o_git_dir = $git_dir; my $retval = undef; $git_dir = "$projectroot/$project"; if (open my $fd, '-|', git_cmd(), 'rev-parse', '--verify', '-q', @options, $hash) { $retval = <$fd>; chomp $retval if defined $retval; close $fd; } if (defined $o_git_dir) { $git_dir = $o_git_dir; } return $retval; } # get type of given object sub git_get_type { my $hash = shift; open my $fd, "-|", git_cmd(), "cat-file", '-t', $hash or return; my $type = <$fd>; close $fd or return; chomp $type; return $type; } # repository configuration our $config_file = ''; our %config; # store multiple values for single key as anonymous array reference # single values stored directly in the hash, not as [ ] sub hash_set_multi { my ($hash, $key, $value) = @_; if (!exists $hash->{$key}) { $hash->{$key} = $value; } elsif (!ref $hash->{$key}) { $hash->{$key} = [ $hash->{$key}, $value ]; } else { push @{$hash->{$key}}, $value; } } # return hash of git project configuration # optionally limited to some section, e.g. 'gitweb' sub git_parse_project_config { my $section_regexp = shift; my %config; local $/ = "\0"; open my $fh, "-|", git_cmd(), "config", '-z', '-l', or return; while (my $keyval = <$fh>) { chomp $keyval; my ($key, $value) = split(/\n/, $keyval, 2); hash_set_multi(\%config, $key, $value) if (!defined $section_regexp || $key =~ /^(?:$section_regexp)\./o); } close $fh; return %config; } # convert config value to boolean: 'true' or 'false' # no value, number > 0, 'true' and 'yes' values are true # rest of values are treated as false (never as error) sub config_to_bool { my $val = shift; return 1 if !defined $val; # section.key # strip leading and trailing whitespace $val =~ s/^\s+//; $val =~ s/\s+$//; return (($val =~ /^\d+$/ && $val) || # section.key = 1 ($val =~ /^(?:true|yes)$/i)); # section.key = true } # convert config value to simple decimal number # an optional value suffix of 'k', 'm', or 'g' will cause the value # to be multiplied by 1024, 1048576, or 1073741824 sub config_to_int { my $val = shift; # strip leading and trailing whitespace $val =~ s/^\s+//; $val =~ s/\s+$//; if (my ($num, $unit) = ($val =~ /^([0-9]*)([kmg])$/i)) { $unit = lc($unit); # unknown unit is treated as 1 return $num * ($unit eq 'g' ? 1073741824 : $unit eq 'm' ? 1048576 : $unit eq 'k' ? 1024 : 1); } return $val; } # convert config value to array reference, if needed sub config_to_multi { my $val = shift; return ref($val) ? $val : (defined($val) ? [ $val ] : []); } sub git_get_project_config { my ($key, $type) = @_; # key sanity check return unless ($key); $key =~ s/^gitweb\.//; return if ($key =~ m/\W/); # type sanity check if (defined $type) { $type =~ s/^--//; $type = undef unless ($type eq 'bool' || $type eq 'int'); } # get config if (!defined $config_file || $config_file ne "$git_dir/config") { %config = git_parse_project_config('gitweb'); $config_file = "$git_dir/config"; } # check if config variable (key) exists return unless exists $config{"gitweb.$key"}; # ensure given type if (!defined $type) { return $config{"gitweb.$key"}; } elsif ($type eq 'bool') { # backward compatibility: 'git config --bool' returns true/false return config_to_bool($config{"gitweb.$key"}) ? 'true' : 'false'; } elsif ($type eq 'int') { return config_to_int($config{"gitweb.$key"}); } return $config{"gitweb.$key"}; } # get hash of given path at given ref sub git_get_hash_by_path { my $base = shift; my $path = shift || return undef; my $type = shift; $path =~ s,/+$,,; open my $fd, "-|", git_cmd(), "ls-tree", $base, "--", $path or die_error(500, "Open git-ls-tree failed"); my $line = <$fd>; close $fd or return undef; if (!defined $line) { # there is no tree or hash given by $path at $base return undef; } #'100644 blob 0fa3f3a66fb6a137f6ec2c19351ed4d807070ffa panic.c' $line =~ m/^([0-9]+) (.+) ([0-9a-fA-F]{40})\t/; if (defined $type && $type ne $2) { # type doesn't match return undef; } return $3; } # get path of entry with given hash at given tree-ish (ref) # used to get 'from' filename for combined diff (merge commit) for renames sub git_get_path_by_hash { my $base = shift || return; my $hash = shift || return; local $/ = "\0"; open my $fd, "-|", git_cmd(), "ls-tree", '-r', '-t', '-z', $base or return undef; while (my $line = <$fd>) { chomp $line; #'040000 tree 595596a6a9117ddba9fe379b6b012b558bac8423 gitweb' #'100644 blob e02e90f0429be0d2a69b76571101f20b8f75530f gitweb/README' if ($line =~ m/(?:[0-9]+) (?:.+) $hash\t(.+)$/) { close $fd; return $1; } } close $fd; return undef; } ## ...................................................................... ## git utility functions, directly accessing git repository sub git_get_project_description { my $path = shift; $git_dir = "$projectroot/$path"; open my $fd, '<', "$git_dir/description" or return git_get_project_config('description'); my $descr = <$fd>; close $fd; if (defined $descr) { chomp $descr; } return $descr; } sub git_get_project_ctags { my $path = shift; my $ctags = {}; $git_dir = "$projectroot/$path"; opendir my $dh, "$git_dir/ctags" or return $ctags; foreach (grep { -f $_ } map { "$git_dir/ctags/$_" } readdir($dh)) { open my $ct, '<', $_ or next; my $val = <$ct>; chomp $val; close $ct; my $ctag = $_; $ctag =~ s#.*/##; $ctags->{$ctag} = $val; } closedir $dh; $ctags; } sub git_populate_project_tagcloud { my $ctags = shift; # First, merge different-cased tags; tags vote on casing my %ctags_lc; foreach (keys %$ctags) { $ctags_lc{lc $_}->{count} += $ctags->{$_}; if (not $ctags_lc{lc $_}->{topcount} or $ctags_lc{lc $_}->{topcount} < $ctags->{$_}) { $ctags_lc{lc $_}->{topcount} = $ctags->{$_}; $ctags_lc{lc $_}->{topname} = $_; } } my $cloud; if (eval { require HTML::TagCloud; 1; }) { $cloud = HTML::TagCloud->new; foreach (sort keys %ctags_lc) { # Pad the title with spaces so that the cloud looks # less crammed. my $title = $ctags_lc{$_}->{topname}; $title =~ s/ / /g; $title =~ s/^/ /g; $title =~ s/$/ /g; $cloud->add($title, $home_link."?by_tag=".$_, $ctags_lc{$_}->{count}); } } else { $cloud = \%ctags_lc; } $cloud; } sub git_show_project_tagcloud { my ($cloud, $count) = @_; print STDERR ref($cloud)."..\n"; if (ref $cloud eq 'HTML::TagCloud') { return $cloud->html_and_css($count); } else { my @tags = sort { $cloud->{$a}->{count} <=> $cloud->{$b}->{count} } keys %$cloud; return '

    ' . join (', ', map { "$cloud->{$_}->{topname}" } splice(@tags, 0, $count)) . '

    '; } } sub git_get_project_url_list { my $path = shift; $git_dir = "$projectroot/$path"; open my $fd, '<', "$git_dir/cloneurl" or return wantarray ? @{ config_to_multi(git_get_project_config('url')) } : config_to_multi(git_get_project_config('url')); my @git_project_url_list = map { chomp; $_ } <$fd>; close $fd; return wantarray ? @git_project_url_list : \@git_project_url_list; } sub git_get_projects_list { my ($filter) = @_; my @list; $filter ||= ''; $filter =~ s/\.git$//; my $check_forks = gitweb_check_feature('forks'); if (-d $projects_list) { # search in directory my $dir = $projects_list . ($filter ? "/$filter" : ''); # remove the trailing "/" $dir =~ s!/+$!!; my $pfxlen = length("$dir"); my $pfxdepth = ($dir =~ tr!/!!); File::Find::find({ follow_fast => 1, # follow symbolic links follow_skip => 2, # ignore duplicates dangling_symlinks => 0, # ignore dangling symlinks, silently wanted => sub { # skip project-list toplevel, if we get it. return if (m!^[/.]$!); # only directories can be git repositories return unless (-d $_); # don't traverse too deep (Find is super slow on os x) if (($File::Find::name =~ tr!/!!) - $pfxdepth > $project_maxdepth) { $File::Find::prune = 1; return; } my $subdir = substr($File::Find::name, $pfxlen + 1); # we check related file in $projectroot my $path = ($filter ? "$filter/" : '') . $subdir; if (check_export_ok("$projectroot/$path")) { push @list, { path => $path }; $File::Find::prune = 1; } }, }, "$dir"); } elsif (-f $projects_list) { # read from file(url-encoded): # 'git%2Fgit.git Linus+Torvalds' # 'libs%2Fklibc%2Fklibc.git H.+Peter+Anvin' # 'linux%2Fhotplug%2Fudev.git Greg+Kroah-Hartman' my %paths; open my $fd, '<', $projects_list or return; PROJECT: while (my $line = <$fd>) { chomp $line; my ($path, $owner) = split ' ', $line; $path = unescape($path); $owner = unescape($owner); if (!defined $path) { next; } if ($filter ne '') { # looking for forks; my $pfx = substr($path, 0, length($filter)); if ($pfx ne $filter) { next PROJECT; } my $sfx = substr($path, length($filter)); if ($sfx !~ /^\/.*\.git$/) { next PROJECT; } } elsif ($check_forks) { PATH: foreach my $filter (keys %paths) { # looking for forks; my $pfx = substr($path, 0, length($filter)); if ($pfx ne $filter) { next PATH; } my $sfx = substr($path, length($filter)); if ($sfx !~ /^\/.*\.git$/) { next PATH; } # is a fork, don't include it in # the list next PROJECT; } } if (check_export_ok("$projectroot/$path")) { my $pr = { path => $path, owner => to_utf8($owner), }; push @list, $pr; (my $forks_path = $path) =~ s/\.git$//; $paths{$forks_path}++; } } close $fd; } return @list; } our $gitweb_project_owner = undef; sub git_get_project_list_from_file { return if (defined $gitweb_project_owner); $gitweb_project_owner = {}; # read from file (url-encoded): # 'git%2Fgit.git Linus+Torvalds' # 'libs%2Fklibc%2Fklibc.git H.+Peter+Anvin' # 'linux%2Fhotplug%2Fudev.git Greg+Kroah-Hartman' if (-f $projects_list) { open(my $fd, '<', $projects_list); while (my $line = <$fd>) { chomp $line; my ($pr, $ow) = split ' ', $line; $pr = unescape($pr); $ow = unescape($ow); $gitweb_project_owner->{$pr} = to_utf8($ow); } close $fd; } } sub git_get_project_owner { my $project = shift; my $owner; return undef unless $project; $git_dir = "$projectroot/$project"; if (!defined $gitweb_project_owner) { git_get_project_list_from_file(); } if (exists $gitweb_project_owner->{$project}) { $owner = $gitweb_project_owner->{$project}; } if (!defined $owner){ $owner = git_get_project_config('owner'); } if (!defined $owner) { $owner = get_file_owner("$git_dir"); } return $owner; } sub git_get_last_activity { my ($path) = @_; my $fd; $git_dir = "$projectroot/$path"; open($fd, "-|", git_cmd(), 'for-each-ref', '--format=%(committer)', '--sort=-committerdate', '--count=1', 'refs/heads') or return; my $most_recent = <$fd>; close $fd or return; if (defined $most_recent && $most_recent =~ / (\d+) [-+][01]\d\d\d$/) { my $timestamp = $1; my $age = time - $timestamp; return ($age, age_string($age)); } return (undef, undef); } sub git_get_references { my $type = shift || ""; my %refs; # 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11 # c39ae07f393806ccf406ef966e9a15afc43cc36a refs/tags/v2.6.11^{} open my $fd, "-|", git_cmd(), "show-ref", "--dereference", ($type ? ("--", "refs/$type") : ()) # use -- if $type or return; while (my $line = <$fd>) { chomp $line; if ($line =~ m!^([0-9a-fA-F]{40})\srefs/($type.*)$!) { if (defined $refs{$1}) { push @{$refs{$1}}, $2; } else { $refs{$1} = [ $2 ]; } } } close $fd or return; return \%refs; } sub git_get_rev_name_tags { my $hash = shift || return undef; open my $fd, "-|", git_cmd(), "name-rev", "--tags", $hash or return; my $name_rev = <$fd>; close $fd; if ($name_rev =~ m|^$hash tags/(.*)$|) { return $1; } else { # catches also '$hash undefined' output return undef; } } ## ---------------------------------------------------------------------- ## parse to hash functions sub parse_date { my $epoch = shift; my $tz = shift || "-0000"; my %date; my @months = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); my @days = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($epoch); $date{'hour'} = $hour; $date{'minute'} = $min; $date{'mday'} = $mday; $date{'day'} = $days[$wday]; $date{'month'} = $months[$mon]; $date{'rfc2822'} = sprintf "%s, %d %s %4d %02d:%02d:%02d +0000", $days[$wday], $mday, $months[$mon], 1900+$year, $hour ,$min, $sec; $date{'mday-time'} = sprintf "%d %s %02d:%02d", $mday, $months[$mon], $hour ,$min; $date{'iso-8601'} = sprintf "%04d-%02d-%02dT%02d:%02d:%02dZ", 1900+$year, 1+$mon, $mday, $hour ,$min, $sec; $tz =~ m/^([+\-][0-9][0-9])([0-9][0-9])$/; my $local = $epoch + ((int $1 + ($2/60)) * 3600); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($local); $date{'hour_local'} = $hour; $date{'minute_local'} = $min; $date{'tz_local'} = $tz; $date{'iso-tz'} = sprintf("%04d-%02d-%02d %02d:%02d:%02d %s", 1900+$year, $mon+1, $mday, $hour, $min, $sec, $tz); return %date; } sub parse_tag { my $tag_id = shift; my %tag; my @comment; open my $fd, "-|", git_cmd(), "cat-file", "tag", $tag_id or return; $tag{'id'} = $tag_id; while (my $line = <$fd>) { chomp $line; if ($line =~ m/^object ([0-9a-fA-F]{40})$/) { $tag{'object'} = $1; } elsif ($line =~ m/^type (.+)$/) { $tag{'type'} = $1; } elsif ($line =~ m/^tag (.+)$/) { $tag{'name'} = $1; } elsif ($line =~ m/^tagger (.*) ([0-9]+) (.*)$/) { $tag{'author'} = $1; $tag{'author_epoch'} = $2; $tag{'author_tz'} = $3; if ($tag{'author'} =~ m/^([^<]+) <([^>]*)>/) { $tag{'author_name'} = $1; $tag{'author_email'} = $2; } else { $tag{'author_name'} = $tag{'author'}; } } elsif ($line =~ m/--BEGIN/) { push @comment, $line; last; } elsif ($line eq "") { last; } } push @comment, <$fd>; $tag{'comment'} = \@comment; close $fd or return; if (!defined $tag{'name'}) { return }; return %tag } sub parse_commit_text { my ($commit_text, $withparents) = @_; my @commit_lines = split '\n', $commit_text; my %co; pop @commit_lines; # Remove '\0' if (! @commit_lines) { return; } my $header = shift @commit_lines; if ($header !~ m/^[0-9a-fA-F]{40}/) { return; } ($co{'id'}, my @parents) = split ' ', $header; while (my $line = shift @commit_lines) { last if $line eq "\n"; if ($line =~ m/^tree ([0-9a-fA-F]{40})$/) { $co{'tree'} = $1; } elsif ((!defined $withparents) && ($line =~ m/^parent ([0-9a-fA-F]{40})$/)) { push @parents, $1; } elsif ($line =~ m/^author (.*) ([0-9]+) (.*)$/) { $co{'author'} = to_utf8($1); $co{'author_epoch'} = $2; $co{'author_tz'} = $3; if ($co{'author'} =~ m/^([^<]+) <([^>]*)>/) { $co{'author_name'} = $1; $co{'author_email'} = $2; } else { $co{'author_name'} = $co{'author'}; } } elsif ($line =~ m/^committer (.*) ([0-9]+) (.*)$/) { $co{'committer'} = to_utf8($1); $co{'committer_epoch'} = $2; $co{'committer_tz'} = $3; if ($co{'committer'} =~ m/^([^<]+) <([^>]*)>/) { $co{'committer_name'} = $1; $co{'committer_email'} = $2; } else { $co{'committer_name'} = $co{'committer'}; } } } if (!defined $co{'tree'}) { return; }; $co{'parents'} = \@parents; $co{'parent'} = $parents[0]; foreach my $title (@commit_lines) { $title =~ s/^ //; if ($title ne "") { $co{'title'} = chop_str($title, 80, 5); # remove leading stuff of merges to make the interesting part visible if (length($title) > 50) { $title =~ s/^Automatic //; $title =~ s/^merge (of|with) /Merge ... /i; if (length($title) > 50) { $title =~ s/(http|rsync):\/\///; } if (length($title) > 50) { $title =~ s/(master|www|rsync)\.//; } if (length($title) > 50) { $title =~ s/kernel.org:?//; } if (length($title) > 50) { $title =~ s/\/pub\/scm//; } } $co{'title_short'} = chop_str($title, 50, 5); last; } } if (! defined $co{'title'} || $co{'title'} eq "") { $co{'title'} = $co{'title_short'} = '(no commit message)'; } # remove added spaces foreach my $line (@commit_lines) { $line =~ s/^ //; } $co{'comment'} = \@commit_lines; my $age = time - $co{'committer_epoch'}; $co{'age'} = $age; $co{'age_string'} = age_string($age); my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($co{'committer_epoch'}); if ($age > 60*60*24*7*2) { $co{'age_string_date'} = sprintf "%4i-%02u-%02i", 1900 + $year, $mon+1, $mday; $co{'age_string_age'} = $co{'age_string'}; } else { $co{'age_string_date'} = $co{'age_string'}; $co{'age_string_age'} = sprintf "%4i-%02u-%02i", 1900 + $year, $mon+1, $mday; } return %co; } sub parse_commit { my ($commit_id) = @_; my %co; local $/ = "\0"; open my $fd, "-|", git_cmd(), "rev-list", "--parents", "--header", "--max-count=1", $commit_id, "--", or die_error(500, "Open git-rev-list failed"); %co = parse_commit_text(<$fd>, 1); close $fd; return %co; } sub parse_commits { my ($commit_id, $maxcount, $skip, $filename, @args) = @_; my @cos; $maxcount ||= 1; $skip ||= 0; local $/ = "\0"; open my $fd, "-|", git_cmd(), "rev-list", "--header", @args, ("--max-count=" . $maxcount), ("--skip=" . $skip), @extra_options, $commit_id, "--", ($filename ? ($filename) : ()) or die_error(500, "Open git-rev-list failed"); while (my $line = <$fd>) { my %co = parse_commit_text($line); push @cos, \%co; } close $fd; return wantarray ? @cos : \@cos; } # parse line of git-diff-tree "raw" output sub parse_difftree_raw_line { my $line = shift; my %res; # ':100644 100644 03b218260e99b78c6df0ed378e59ed9205ccc96d 3b93d5e7cc7f7dd4ebed13a5cc1a4ad976fc94d8 M ls-files.c' # ':100644 100644 7f9281985086971d3877aca27704f2aaf9c448ce bc190ebc71bbd923f2b728e505408f5e54bd073a M rev-tree.c' if ($line =~ m/^:([0-7]{6}) ([0-7]{6}) ([0-9a-fA-F]{40}) ([0-9a-fA-F]{40}) (.)([0-9]{0,3})\t(.*)$/) { $res{'from_mode'} = $1; $res{'to_mode'} = $2; $res{'from_id'} = $3; $res{'to_id'} = $4; $res{'status'} = $5; $res{'similarity'} = $6; if ($res{'status'} eq 'R' || $res{'status'} eq 'C') { # renamed or copied ($res{'from_file'}, $res{'to_file'}) = map { unquote($_) } split("\t", $7); } else { $res{'from_file'} = $res{'to_file'} = $res{'file'} = unquote($7); } } # '::100755 100755 100755 60e79ca1b01bc8b057abe17ddab484699a7f5fdb 94067cc5f73388f33722d52ae02f44692bc07490 94067cc5f73388f33722d52ae02f44692bc07490 MR git-gui/git-gui.sh' # combined diff (for merge commit) elsif ($line =~ s/^(::+)((?:[0-7]{6} )+)((?:[0-9a-fA-F]{40} )+)([a-zA-Z]+)\t(.*)$//) { $res{'nparents'} = length($1); $res{'from_mode'} = [ split(' ', $2) ]; $res{'to_mode'} = pop @{$res{'from_mode'}}; $res{'from_id'} = [ split(' ', $3) ]; $res{'to_id'} = pop @{$res{'from_id'}}; $res{'status'} = [ split('', $4) ]; $res{'to_file'} = unquote($5); } # 'c512b523472485aef4fff9e57b229d9d243c967f' elsif ($line =~ m/^([0-9a-fA-F]{40})$/) { $res{'commit'} = $1; } return wantarray ? %res : \%res; } # wrapper: return parsed line of git-diff-tree "raw" output # (the argument might be raw line, or parsed info) sub parsed_difftree_line { my $line_or_ref = shift; if (ref($line_or_ref) eq "HASH") { # pre-parsed (or generated by hand) return $line_or_ref; } else { return parse_difftree_raw_line($line_or_ref); } } # parse line of git-ls-tree output sub parse_ls_tree_line { my $line = shift; my %opts = @_; my %res; if ($opts{'-l'}) { #'100644 blob 0fa3f3a66fb6a137f6ec2c19351ed4d807070ffa 16717 panic.c' $line =~ m/^([0-9]+) (.+) ([0-9a-fA-F]{40}) +(-|[0-9]+)\t(.+)$/s; $res{'mode'} = $1; $res{'type'} = $2; $res{'hash'} = $3; $res{'size'} = $4; if ($opts{'-z'}) { $res{'name'} = $5; } else { $res{'name'} = unquote($5); } } else { #'100644 blob 0fa3f3a66fb6a137f6ec2c19351ed4d807070ffa panic.c' $line =~ m/^([0-9]+) (.+) ([0-9a-fA-F]{40})\t(.+)$/s; $res{'mode'} = $1; $res{'type'} = $2; $res{'hash'} = $3; if ($opts{'-z'}) { $res{'name'} = $4; } else { $res{'name'} = unquote($4); } } return wantarray ? %res : \%res; } # generates _two_ hashes, references to which are passed as 2 and 3 argument sub parse_from_to_diffinfo { my ($diffinfo, $from, $to, @parents) = @_; if ($diffinfo->{'nparents'}) { # combined diff $from->{'file'} = []; $from->{'href'} = []; fill_from_file_info($diffinfo, @parents) unless exists $diffinfo->{'from_file'}; for (my $i = 0; $i < $diffinfo->{'nparents'}; $i++) { $from->{'file'}[$i] = defined $diffinfo->{'from_file'}[$i] ? $diffinfo->{'from_file'}[$i] : $diffinfo->{'to_file'}; if ($diffinfo->{'status'}[$i] ne "A") { # not new (added) file $from->{'href'}[$i] = href(action=>"blob", hash_base=>$parents[$i], hash=>$diffinfo->{'from_id'}[$i], file_name=>$from->{'file'}[$i]); } else { $from->{'href'}[$i] = undef; } } } else { # ordinary (not combined) diff $from->{'file'} = $diffinfo->{'from_file'}; if ($diffinfo->{'status'} ne "A") { # not new (added) file $from->{'href'} = href(action=>"blob", hash_base=>$hash_parent, hash=>$diffinfo->{'from_id'}, file_name=>$from->{'file'}); } else { delete $from->{'href'}; } } $to->{'file'} = $diffinfo->{'to_file'}; if (!is_deleted($diffinfo)) { # file exists in result $to->{'href'} = href(action=>"blob", hash_base=>$hash, hash=>$diffinfo->{'to_id'}, file_name=>$to->{'file'}); } else { delete $to->{'href'}; } } ## ...................................................................... ## parse to array of hashes functions sub git_get_heads_list { my $limit = shift; my @headslist; open my $fd, '-|', git_cmd(), 'for-each-ref', ($limit ? '--count='.($limit+1) : ()), '--sort=-committerdate', '--format=%(objectname) %(refname) %(subject)%00%(committer)', 'refs/heads' or return; while (my $line = <$fd>) { my %ref_item; chomp $line; my ($refinfo, $committerinfo) = split(/\0/, $line); my ($hash, $name, $title) = split(' ', $refinfo, 3); my ($committer, $epoch, $tz) = ($committerinfo =~ /^(.*) ([0-9]+) (.*)$/); $ref_item{'fullname'} = $name; $name =~ s!^refs/heads/!!; $ref_item{'name'} = $name; $ref_item{'id'} = $hash; $ref_item{'title'} = $title || '(no commit message)'; $ref_item{'epoch'} = $epoch; if ($epoch) { $ref_item{'age'} = age_string(time - $ref_item{'epoch'}); } else { $ref_item{'age'} = "unknown"; } push @headslist, \%ref_item; } close $fd; return wantarray ? @headslist : \@headslist; } sub git_get_tags_list { my $limit = shift; my @tagslist; open my $fd, '-|', git_cmd(), 'for-each-ref', ($limit ? '--count='.($limit+1) : ()), '--sort=-creatordate', '--format=%(objectname) %(objecttype) %(refname) '. '%(*objectname) %(*objecttype) %(subject)%00%(creator)', 'refs/tags' or return; while (my $line = <$fd>) { my %ref_item; chomp $line; my ($refinfo, $creatorinfo) = split(/\0/, $line); my ($id, $type, $name, $refid, $reftype, $title) = split(' ', $refinfo, 6); my ($creator, $epoch, $tz) = ($creatorinfo =~ /^(.*) ([0-9]+) (.*)$/); $ref_item{'fullname'} = $name; $name =~ s!^refs/tags/!!; $ref_item{'type'} = $type; $ref_item{'id'} = $id; $ref_item{'name'} = $name; if ($type eq "tag") { $ref_item{'subject'} = $title; $ref_item{'reftype'} = $reftype; $ref_item{'refid'} = $refid; } else { $ref_item{'reftype'} = $type; $ref_item{'refid'} = $id; } if ($type eq "tag" || $type eq "commit") { $ref_item{'epoch'} = $epoch; if ($epoch) { $ref_item{'age'} = age_string(time - $ref_item{'epoch'}); } else { $ref_item{'age'} = "unknown"; } } push @tagslist, \%ref_item; } close $fd; return wantarray ? @tagslist : \@tagslist; } ## ---------------------------------------------------------------------- ## filesystem-related functions sub get_file_owner { my $path = shift; my ($dev, $ino, $mode, $nlink, $st_uid, $st_gid, $rdev, $size) = stat($path); my ($name, $passwd, $uid, $gid, $quota, $comment, $gcos, $dir, $shell) = getpwuid($st_uid); if (!defined $gcos) { return undef; } my $owner = $gcos; $owner =~ s/[,;].*$//; return to_utf8($owner); } # assume that file exists sub insert_file { my $filename = shift; open my $fd, '<', $filename; print map { to_utf8($_) } <$fd>; close $fd; } ## ...................................................................... ## mimetype related functions sub mimetype_guess_file { my $filename = shift; my $mimemap = shift; -r $mimemap or return undef; my %mimemap; open(my $mh, '<', $mimemap) or return undef; while (<$mh>) { next if m/^#/; # skip comments my ($mimetype, $exts) = split(/\t+/); if (defined $exts) { my @exts = split(/\s+/, $exts); foreach my $ext (@exts) { $mimemap{$ext} = $mimetype; } } } close($mh); $filename =~ /\.([^.]*)$/; return $mimemap{$1}; } sub mimetype_guess { my $filename = shift; my $mime; $filename =~ /\./ or return undef; if ($mimetypes_file) { my $file = $mimetypes_file; if ($file !~ m!^/!) { # if it is relative path # it is relative to project $file = "$projectroot/$project/$file"; } $mime = mimetype_guess_file($filename, $file); } $mime ||= mimetype_guess_file($filename, '/etc/mime.types'); return $mime; } sub blob_mimetype { my $fd = shift; my $filename = shift; if ($filename) { my $mime = mimetype_guess($filename); $mime and return $mime; } # just in case return $default_blob_plain_mimetype unless $fd; if (-T $fd) { return 'text/plain'; } elsif (! $filename) { return 'application/octet-stream'; } elsif ($filename =~ m/\.png$/i) { return 'image/png'; } elsif ($filename =~ m/\.gif$/i) { return 'image/gif'; } elsif ($filename =~ m/\.jpe?g$/i) { return 'image/jpeg'; } else { return 'application/octet-stream'; } } sub blob_contenttype { my ($fd, $file_name, $type) = @_; $type ||= blob_mimetype($fd, $file_name); if ($type eq 'text/plain' && defined $default_text_plain_charset) { $type .= "; charset=$default_text_plain_charset"; } return $type; } ## ====================================================================== ## functions printing HTML: header, footer, error page sub git_header_html { my $status = shift || "200 OK"; my $expires = shift; my $title = "$site_name"; if (defined $project) { $title .= " - " . to_utf8($project); if (defined $action) { $title .= "/$action"; if (defined $file_name) { $title .= " - " . esc_path($file_name); if ($action eq "tree" && $file_name !~ m|/$|) { $title .= "/"; } } } } my $content_type; # require explicit support from the UA if we are to send the page as # 'application/xhtml+xml', otherwise send it as plain old 'text/html'. # we have to do this because MSIE sometimes globs '*/*', pretending to # support xhtml+xml but choking when it gets what it asked for. if (defined $cgi->http('HTTP_ACCEPT') && $cgi->http('HTTP_ACCEPT') =~ m/(,|;|\s|^)application\/xhtml\+xml(,|;|\s|$)/ && $cgi->Accept('application/xhtml+xml') != 0) { $content_type = 'application/xhtml+xml'; } else { $content_type = 'text/html'; } print $cgi->header(-type=>$content_type, -charset => 'utf-8', -status=> $status, -expires => $expires); my $mod_perl_version = $ENV{'MOD_PERL'} ? " $ENV{'MOD_PERL'}" : ''; print < $title EOF # the stylesheet, favicon etc urls won't work correctly with path_info # unless we set the appropriate base URL if ($ENV{'PATH_INFO'}) { print "\n"; } # print out each stylesheet that exist, providing backwards capability # for those people who defined $stylesheet in a config file if (defined $stylesheet) { print ''."\n"; } else { foreach my $stylesheet (@stylesheets) { next unless $stylesheet; print ''."\n"; } } if (defined $project) { my %href_params = get_feed_info(); if (!exists $href_params{'-title'}) { $href_params{'-title'} = 'log'; } foreach my $format qw(RSS Atom) { my $type = lc($format); my %link_attr = ( '-rel' => 'alternate', '-title' => "$project - $href_params{'-title'} - $format feed", '-type' => "application/$type+xml" ); $href_params{'action'} = $type; $link_attr{'-href'} = href(%href_params); print "\n"; $href_params{'extra_options'} = '--no-merges'; $link_attr{'-href'} = href(%href_params); $link_attr{'-title'} .= ' (no merges)'; print "\n"; } } else { printf(''."\n", $site_name, href(project=>undef, action=>"project_index")); printf(''."\n", $site_name, href(project=>undef, action=>"opml")); } if (defined $favicon) { print qq(\n); } print "\n" . "\n"; if (-f $site_header) { insert_file($site_header); } print "
    \n" . $cgi->a({-href => esc_url($logo_url), -title => $logo_label}, qq()); print $cgi->a({-href => esc_url($home_link)}, $home_link_str) . " / "; if (defined $project) { print $cgi->a({-href => href(action=>"summary")}, esc_html($project)); if (defined $action) { print " / $action"; } print "\n"; } print "
    \n"; my $have_search = gitweb_check_feature('search'); if (defined $project && $have_search) { if (!defined $searchtext) { $searchtext = ""; } my $search_hash; if (defined $hash_base) { $search_hash = $hash_base; } elsif (defined $hash) { $search_hash = $hash; } else { $search_hash = "HEAD"; } my $action = $my_uri; my $use_pathinfo = gitweb_check_feature('pathinfo'); if ($use_pathinfo) { $action .= "/".esc_url($project); } print $cgi->startform(-method => "get", -action => $action) . "
    \n" . (!$use_pathinfo && $cgi->input({-name=>"p", -value=>$project, -type=>"hidden"}) . "\n") . $cgi->input({-name=>"a", -value=>"search", -type=>"hidden"}) . "\n" . $cgi->input({-name=>"h", -value=>$search_hash, -type=>"hidden"}) . "\n" . $cgi->popup_menu(-name => 'st', -default => 'commit', -values => ['commit', 'grep', 'author', 'committer', 'pickaxe']) . $cgi->sup($cgi->a({-href => href(action=>"search_help")}, "?")) . " search:\n", $cgi->textfield(-name => "s", -value => $searchtext) . "\n" . "" . $cgi->checkbox(-name => 'sr', -value => 1, -label => 're', -checked => $search_use_regexp) . "" . "
    " . $cgi->end_form() . "\n"; } } sub git_footer_html { my $feed_class = 'rss_logo'; print "
    \n"; if (defined $project) { my $descr = git_get_project_description($project); if (defined $descr) { print "\n"; } my %href_params = get_feed_info(); if (!%href_params) { $feed_class .= ' generic'; } $href_params{'-title'} ||= 'log'; foreach my $format qw(RSS Atom) { $href_params{'action'} = lc($format); print $cgi->a({-href => href(%href_params), -title => "$href_params{'-title'} $format feed", -class => $feed_class}, $format)."\n"; } } else { print $cgi->a({-href => href(project=>undef, action=>"opml"), -class => $feed_class}, "OPML") . " "; print $cgi->a({-href => href(project=>undef, action=>"project_index"), -class => $feed_class}, "TXT") . "\n"; } print "
    \n"; # class="page_footer" if (defined $t0 && gitweb_check_feature('timed')) { print "
    \n"; print 'This page took '. ''. Time::HiRes::tv_interval($t0, [Time::HiRes::gettimeofday()]). ' seconds '. ' and '. ''. $number_of_git_cmds. ' git commands '. " to generate.\n"; print "
    \n"; # class="page_footer" } if (-f $site_footer) { insert_file($site_footer); } print qq!\n!; if ($action eq 'blame_incremental') { print qq!\n!; } elsif (gitweb_check_feature('javascript-actions')) { print qq!\n!; } print "\n" . ""; } # die_error(, ) # Example: die_error(404, 'Hash not found') # By convention, use the following status codes (as defined in RFC 2616): # 400: Invalid or missing CGI parameters, or # requested object exists but has wrong type. # 403: Requested feature (like "pickaxe" or "snapshot") not enabled on # this server or project. # 404: Requested object/revision/project doesn't exist. # 500: The server isn't configured properly, or # an internal error occurred (e.g. failed assertions caused by bugs), or # an unknown error occurred (e.g. the git binary died unexpectedly). sub die_error { my $status = shift || 500; my $error = shift || "Internal server error"; my %http_responses = (400 => '400 Bad Request', 403 => '403 Forbidden', 404 => '404 Not Found', 500 => '500 Internal Server Error'); git_header_html($http_responses{$status}); print <

    $status - $error
    EOF git_footer_html(); exit; } ## ---------------------------------------------------------------------- ## functions printing or outputting HTML: navigation sub git_print_page_nav { my ($current, $suppress, $head, $treehead, $treebase, $extra) = @_; $extra = '' if !defined $extra; # pager or formats my @navs = qw(summary shortlog log commit commitdiff tree); if ($suppress) { @navs = grep { $_ ne $suppress } @navs; } my %arg = map { $_ => {action=>$_} } @navs; if (defined $head) { for (qw(commit commitdiff)) { $arg{$_}{'hash'} = $head; } if ($current =~ m/^(tree | log | shortlog | commit | commitdiff | search)$/x) { for (qw(shortlog log)) { $arg{$_}{'hash'} = $head; } } } $arg{'tree'}{'hash'} = $treehead if defined $treehead; $arg{'tree'}{'hash_base'} = $treebase if defined $treebase; my @actions = gitweb_get_feature('actions'); my %repl = ( '%' => '%', 'n' => $project, # project name 'f' => $git_dir, # project path within filesystem 'h' => $treehead || '', # current hash ('h' parameter) 'b' => $treebase || '', # hash base ('hb' parameter) ); while (@actions) { my ($label, $link, $pos) = splice(@actions,0,3); # insert @navs = map { $_ eq $pos ? ($_, $label) : $_ } @navs; # munch munch $link =~ s/%([%nfhb])/$repl{$1}/g; $arg{$label}{'_href'} = $link; } print "
    \n" . (join " | ", map { $_ eq $current ? $_ : $cgi->a({-href => ($arg{$_}{_href} ? $arg{$_}{_href} : href(%{$arg{$_}}))}, "$_") } @navs); print "
    \n$extra
    \n" . "
    \n"; } sub format_paging_nav { my ($action, $page, $has_next_link) = @_; my $paging_nav; if ($page > 0) { $paging_nav .= $cgi->a({-href => href(-replay=>1, page=>undef)}, "first") . " ⋅ " . $cgi->a({-href => href(-replay=>1, page=>$page-1), -accesskey => "p", -title => "Alt-p"}, "prev"); } else { $paging_nav .= "first ⋅ prev"; } if ($has_next_link) { $paging_nav .= " ⋅ " . $cgi->a({-href => href(-replay=>1, page=>$page+1), -accesskey => "n", -title => "Alt-n"}, "next"); } else { $paging_nav .= " ⋅ next"; } return $paging_nav; } ## ...................................................................... ## functions printing or outputting HTML: div sub git_print_header_div { my ($action, $title, $hash, $hash_base) = @_; my %args = (); $args{'action'} = $action; $args{'hash'} = $hash if $hash; $args{'hash_base'} = $hash_base if $hash_base; print "
    \n" . $cgi->a({-href => href(%args), -class => "title"}, $title ? $title : $action) . "\n
    \n"; } sub print_local_time { my %date = @_; if ($date{'hour_local'} < 6) { printf(" (%02d:%02d %s)", $date{'hour_local'}, $date{'minute_local'}, $date{'tz_local'}); } else { printf(" (%02d:%02d %s)", $date{'hour_local'}, $date{'minute_local'}, $date{'tz_local'}); } } # Outputs the author name and date in long form sub git_print_authorship { my $co = shift; my %opts = @_; my $tag = $opts{-tag} || 'div'; my $author = $co->{'author_name'}; my %ad = parse_date($co->{'author_epoch'}, $co->{'author_tz'}); print "<$tag class=\"author_date\">" . format_search_author($author, "author", esc_html($author)) . " [$ad{'rfc2822'}"; print_local_time(%ad) if ($opts{-localtime}); print "]" . git_get_avatar($co->{'author_email'}, -pad_before => 1) . "\n"; } # Outputs table rows containing the full author or committer information, # in the format expected for 'commit' view (& similia). # Parameters are a commit hash reference, followed by the list of people # to output information for. If the list is empty it defalts to both # author and committer. sub git_print_authorship_rows { my $co = shift; # too bad we can't use @people = @_ || ('author', 'committer') my @people = @_; @people = ('author', 'committer') unless @people; foreach my $who (@people) { my %wd = parse_date($co->{"${who}_epoch"}, $co->{"${who}_tz"}); print "$who" . format_search_author($co->{"${who}_name"}, $who, esc_html($co->{"${who}_name"})) . " " . format_search_author($co->{"${who}_email"}, $who, esc_html("<" . $co->{"${who}_email"} . ">")) . "" . git_get_avatar($co->{"${who}_email"}, -size => 'double') . "\n" . "" . " $wd{'rfc2822'}"; print_local_time(%wd); print "" . "\n"; } } sub git_print_page_path { my $name = shift; my $type = shift; my $hb = shift; print "
    "; print $cgi->a({-href => href(action=>"tree", hash_base=>$hb), -title => 'tree root'}, to_utf8("[$project]")); print " / "; if (defined $name) { my @dirname = split '/', $name; my $basename = pop @dirname; my $fullname = ''; foreach my $dir (@dirname) { $fullname .= ($fullname ? '/' : '') . $dir; print $cgi->a({-href => href(action=>"tree", file_name=>$fullname, hash_base=>$hb), -title => $fullname}, esc_path($dir)); print " / "; } if (defined $type && $type eq 'blob') { print $cgi->a({-href => href(action=>"blob_plain", file_name=>$file_name, hash_base=>$hb), -title => $name}, esc_path($basename)); } elsif (defined $type && $type eq 'tree') { print $cgi->a({-href => href(action=>"tree", file_name=>$file_name, hash_base=>$hb), -title => $name}, esc_path($basename)); print " / "; } else { print esc_path($basename); } } print "
    \n"; } sub git_print_log { my $log = shift; my %opts = @_; if ($opts{'-remove_title'}) { # remove title, i.e. first line of log shift @$log; } # remove leading empty lines while (defined $log->[0] && $log->[0] eq "") { shift @$log; } # print log my $signoff = 0; my $empty = 0; foreach my $line (@$log) { if ($line =~ m/^ *(signed[ \-]off[ \-]by[ :]|acked[ \-]by[ :]|cc[ :])/i) { $signoff = 1; $empty = 0; if (! $opts{'-remove_signoff'}) { print "" . esc_html($line) . "
    \n"; next; } else { # remove signoff lines next; } } else { $signoff = 0; } # print only one empty line # do not print empty line after signoff if ($line eq "") { next if ($empty || $signoff); $empty = 1; } else { $empty = 0; } print format_log_line_html($line) . "
    \n"; } if ($opts{'-final_empty_line'}) { # end with single empty line print "
    \n" unless $empty; } } # return link target (what link points to) sub git_get_link_target { my $hash = shift; my $link_target; # read link open my $fd, "-|", git_cmd(), "cat-file", "blob", $hash or return; { local $/ = undef; $link_target = <$fd>; } close $fd or return; return $link_target; } # given link target, and the directory (basedir) the link is in, # return target of link relative to top directory (top tree); # return undef if it is not possible (including absolute links). sub normalize_link_target { my ($link_target, $basedir) = @_; # absolute symlinks (beginning with '/') cannot be normalized return if (substr($link_target, 0, 1) eq '/'); # normalize link target to path from top (root) tree (dir) my $path; if ($basedir) { $path = $basedir . '/' . $link_target; } else { # we are in top (root) tree (dir) $path = $link_target; } # remove //, /./, and /../ my @path_parts; foreach my $part (split('/', $path)) { # discard '.' and '' next if (!$part || $part eq '.'); # handle '..' if ($part eq '..') { if (@path_parts) { pop @path_parts; } else { # link leads outside repository (outside top dir) return; } } else { push @path_parts, $part; } } $path = join('/', @path_parts); return $path; } # print tree entry (row of git_tree), but without encompassing element sub git_print_tree_entry { my ($t, $basedir, $hash_base, $have_blame) = @_; my %base_key = (); $base_key{'hash_base'} = $hash_base if defined $hash_base; # The format of a table row is: mode list link. Where mode is # the mode of the entry, list is the name of the entry, an href, # and link is the action links of the entry. print "" . mode_str($t->{'mode'}) . "\n"; if (exists $t->{'size'}) { print "$t->{'size'}\n"; } if ($t->{'type'} eq "blob") { print "" . $cgi->a({-href => href(action=>"blob", hash=>$t->{'hash'}, file_name=>"$basedir$t->{'name'}", %base_key), -class => "list"}, esc_path($t->{'name'})); if (S_ISLNK(oct $t->{'mode'})) { my $link_target = git_get_link_target($t->{'hash'}); if ($link_target) { my $norm_target = normalize_link_target($link_target, $basedir); if (defined $norm_target) { print " -> " . $cgi->a({-href => href(action=>"object", hash_base=>$hash_base, file_name=>$norm_target), -title => $norm_target}, esc_path($link_target)); } else { print " -> " . esc_path($link_target); } } } print "\n"; print ""; print $cgi->a({-href => href(action=>"blob", hash=>$t->{'hash'}, file_name=>"$basedir$t->{'name'}", %base_key)}, "blob"); if ($have_blame) { print " | " . $cgi->a({-href => href(action=>"blame", hash=>$t->{'hash'}, file_name=>"$basedir$t->{'name'}", %base_key)}, "blame"); } if (defined $hash_base) { print " | " . $cgi->a({-href => href(action=>"history", hash_base=>$hash_base, hash=>$t->{'hash'}, file_name=>"$basedir$t->{'name'}")}, "history"); } print " | " . $cgi->a({-href => href(action=>"blob_plain", hash_base=>$hash_base, file_name=>"$basedir$t->{'name'}")}, "raw"); print "\n"; } elsif ($t->{'type'} eq "tree") { print ""; print $cgi->a({-href => href(action=>"tree", hash=>$t->{'hash'}, file_name=>"$basedir$t->{'name'}", %base_key)}, esc_path($t->{'name'})); print "\n"; print ""; print $cgi->a({-href => href(action=>"tree", hash=>$t->{'hash'}, file_name=>"$basedir$t->{'name'}", %base_key)}, "tree"); if (defined $hash_base) { print " | " . $cgi->a({-href => href(action=>"history", hash_base=>$hash_base, file_name=>"$basedir$t->{'name'}")}, "history"); } print "\n"; } else { # unknown object: we can only present history for it # (this includes 'commit' object, i.e. submodule support) print "" . esc_path($t->{'name'}) . "\n"; print ""; if (defined $hash_base) { print $cgi->a({-href => href(action=>"history", hash_base=>$hash_base, file_name=>"$basedir$t->{'name'}")}, "history"); } print "\n"; } } ## ...................................................................... ## functions printing large fragments of HTML # get pre-image filenames for merge (combined) diff sub fill_from_file_info { my ($diff, @parents) = @_; $diff->{'from_file'} = [ ]; $diff->{'from_file'}[$diff->{'nparents'} - 1] = undef; for (my $i = 0; $i < $diff->{'nparents'}; $i++) { if ($diff->{'status'}[$i] eq 'R' || $diff->{'status'}[$i] eq 'C') { $diff->{'from_file'}[$i] = git_get_path_by_hash($parents[$i], $diff->{'from_id'}[$i]); } } return $diff; } # is current raw difftree line of file deletion sub is_deleted { my $diffinfo = shift; return $diffinfo->{'to_id'} eq ('0' x 40); } # does patch correspond to [previous] difftree raw line # $diffinfo - hashref of parsed raw diff format # $patchinfo - hashref of parsed patch diff format # (the same keys as in $diffinfo) sub is_patch_split { my ($diffinfo, $patchinfo) = @_; return defined $diffinfo && defined $patchinfo && $diffinfo->{'to_file'} eq $patchinfo->{'to_file'}; } sub git_difftree_body { my ($difftree, $hash, @parents) = @_; my ($parent) = $parents[0]; my $have_blame = gitweb_check_feature('blame'); print "
    \n"; if ($#{$difftree} > 10) { print(($#{$difftree} + 1) . " files changed:\n"); } print "
    \n"; print " 1 ? "combined " : "") . "diff_tree\">\n"; # header only for combined diff in 'commitdiff' view my $has_header = @$difftree && @parents > 1 && $action eq 'commitdiff'; if ($has_header) { # table header print "\n" . "\n"; # filename, patchN link for (my $i = 0; $i < @parents; $i++) { my $par = $parents[$i]; print "\n"; } print "\n\n"; } my $alternate = 1; my $patchno = 0; foreach my $line (@{$difftree}) { my $diff = parsed_difftree_line($line); if ($alternate) { print "\n"; } else { print "\n"; } $alternate ^= 1; if (exists $diff->{'nparents'}) { # combined diff fill_from_file_info($diff, @parents) unless exists $diff->{'from_file'}; if (!is_deleted($diff)) { # file exists in the result (child) commit print "\n"; } else { print "\n"; } if ($action eq 'commitdiff') { # link to patch $patchno++; print "\n"; } my $has_history = 0; my $not_deleted = 0; for (my $i = 0; $i < $diff->{'nparents'}; $i++) { my $hash_parent = $parents[$i]; my $from_hash = $diff->{'from_id'}[$i]; my $from_path = $diff->{'from_file'}[$i]; my $status = $diff->{'status'}[$i]; $has_history ||= ($status ne 'A'); $not_deleted ||= ($status ne 'D'); if ($status eq 'A') { print "\n"; } elsif ($status eq 'D') { print "\n"; } else { if ($diff->{'to_id'} eq $from_hash) { print "\n"; } } print "\n"; print "\n"; next; # instead of 'else' clause, to avoid extra indent } # else ordinary diff my ($to_mode_oct, $to_mode_str, $to_file_type); my ($from_mode_oct, $from_mode_str, $from_file_type); if ($diff->{'to_mode'} ne ('0' x 6)) { $to_mode_oct = oct $diff->{'to_mode'}; if (S_ISREG($to_mode_oct)) { # only for regular file $to_mode_str = sprintf("%04o", $to_mode_oct & 0777); # permission bits } $to_file_type = file_type($diff->{'to_mode'}); } if ($diff->{'from_mode'} ne ('0' x 6)) { $from_mode_oct = oct $diff->{'from_mode'}; if (S_ISREG($to_mode_oct)) { # only for regular file $from_mode_str = sprintf("%04o", $from_mode_oct & 0777); # permission bits } $from_file_type = file_type($diff->{'from_mode'}); } if ($diff->{'status'} eq "A") { # created my $mode_chng = "[new $to_file_type"; $mode_chng .= " with mode: $to_mode_str" if $to_mode_str; $mode_chng .= "]"; print "\n"; print "\n"; print "\n"; } elsif ($diff->{'status'} eq "D") { # deleted my $mode_chng = "[deleted $from_file_type]"; print "\n"; print "\n"; print "\n"; } elsif ($diff->{'status'} eq "M" || $diff->{'status'} eq "T") { # modified, or type changed my $mode_chnge = ""; if ($diff->{'from_mode'} != $diff->{'to_mode'}) { $mode_chnge = "[changed"; if ($from_file_type ne $to_file_type) { $mode_chnge .= " from $from_file_type to $to_file_type"; } if (($from_mode_oct & 0777) != ($to_mode_oct & 0777)) { if ($from_mode_str && $to_mode_str) { $mode_chnge .= " mode: $from_mode_str->$to_mode_str"; } elsif ($to_mode_str) { $mode_chnge .= " mode: $to_mode_str"; } } $mode_chnge .= "]\n"; } print "\n"; print "\n"; print "\n"; } elsif ($diff->{'status'} eq "R" || $diff->{'status'} eq "C") { # renamed or copied my %status_name = ('R' => 'moved', 'C' => 'copied'); my $nstatus = $status_name{$diff->{'status'}}; my $mode_chng = ""; if ($diff->{'from_mode'} != $diff->{'to_mode'}) { # mode also for directories, so we cannot use $to_mode_str $mode_chng = sprintf(", mode: %04o", $to_mode_oct & 0777); } print "\n" . "\n" . "\n"; } # we should not encounter Unmerged (U) or Unknown (X) status print "\n"; } print "" if $has_header; print "
    " . $cgi->a({-href => href(action=>"commitdiff", hash=>$hash, hash_parent=>$par), -title => 'commitdiff to parent number ' . ($i+1) . ': ' . substr($par,0,7)}, $i+1) . " 
    " . $cgi->a({-href => href(action=>"blob", hash=>$diff->{'to_id'}, file_name=>$diff->{'to_file'}, hash_base=>$hash), -class => "list"}, esc_path($diff->{'to_file'})) . "" . esc_path($diff->{'to_file'}) . "" . $cgi->a({-href => "#patch$patchno"}, "patch") . " | " . " | " . $cgi->a({-href => href(action=>"blob", hash_base=>$hash, hash=>$from_hash, file_name=>$from_path)}, "blob" . ($i+1)) . " | "; } print $cgi->a({-href => href(action=>"blobdiff", hash=>$diff->{'to_id'}, hash_parent=>$from_hash, hash_base=>$hash, hash_parent_base=>$hash_parent, file_name=>$diff->{'to_file'}, file_parent=>$from_path)}, "diff" . ($i+1)) . " | "; if ($not_deleted) { print $cgi->a({-href => href(action=>"blob", hash=>$diff->{'to_id'}, file_name=>$diff->{'to_file'}, hash_base=>$hash)}, "blob"); print " | " if ($has_history); } if ($has_history) { print $cgi->a({-href => href(action=>"history", file_name=>$diff->{'to_file'}, hash_base=>$hash)}, "history"); } print "
    "; print $cgi->a({-href => href(action=>"blob", hash=>$diff->{'to_id'}, hash_base=>$hash, file_name=>$diff->{'file'}), -class => "list"}, esc_path($diff->{'file'})); print "$mode_chng"; if ($action eq 'commitdiff') { # link to patch $patchno++; print $cgi->a({-href => "#patch$patchno"}, "patch"); print " | "; } print $cgi->a({-href => href(action=>"blob", hash=>$diff->{'to_id'}, hash_base=>$hash, file_name=>$diff->{'file'})}, "blob"); print ""; print $cgi->a({-href => href(action=>"blob", hash=>$diff->{'from_id'}, hash_base=>$parent, file_name=>$diff->{'file'}), -class => "list"}, esc_path($diff->{'file'})); print "$mode_chng"; if ($action eq 'commitdiff') { # link to patch $patchno++; print $cgi->a({-href => "#patch$patchno"}, "patch"); print " | "; } print $cgi->a({-href => href(action=>"blob", hash=>$diff->{'from_id'}, hash_base=>$parent, file_name=>$diff->{'file'})}, "blob") . " | "; if ($have_blame) { print $cgi->a({-href => href(action=>"blame", hash_base=>$parent, file_name=>$diff->{'file'})}, "blame") . " | "; } print $cgi->a({-href => href(action=>"history", hash_base=>$parent, file_name=>$diff->{'file'})}, "history"); print ""; print $cgi->a({-href => href(action=>"blob", hash=>$diff->{'to_id'}, hash_base=>$hash, file_name=>$diff->{'file'}), -class => "list"}, esc_path($diff->{'file'})); print "$mode_chnge"; if ($action eq 'commitdiff') { # link to patch $patchno++; print $cgi->a({-href => "#patch$patchno"}, "patch") . " | "; } elsif ($diff->{'to_id'} ne $diff->{'from_id'}) { # "commit" view and modified file (not onlu mode changed) print $cgi->a({-href => href(action=>"blobdiff", hash=>$diff->{'to_id'}, hash_parent=>$diff->{'from_id'}, hash_base=>$hash, hash_parent_base=>$parent, file_name=>$diff->{'file'})}, "diff") . " | "; } print $cgi->a({-href => href(action=>"blob", hash=>$diff->{'to_id'}, hash_base=>$hash, file_name=>$diff->{'file'})}, "blob") . " | "; if ($have_blame) { print $cgi->a({-href => href(action=>"blame", hash_base=>$hash, file_name=>$diff->{'file'})}, "blame") . " | "; } print $cgi->a({-href => href(action=>"history", hash_base=>$hash, file_name=>$diff->{'file'})}, "history"); print "" . $cgi->a({-href => href(action=>"blob", hash_base=>$hash, hash=>$diff->{'to_id'}, file_name=>$diff->{'to_file'}), -class => "list"}, esc_path($diff->{'to_file'})) . "[$nstatus from " . $cgi->a({-href => href(action=>"blob", hash_base=>$parent, hash=>$diff->{'from_id'}, file_name=>$diff->{'from_file'}), -class => "list"}, esc_path($diff->{'from_file'})) . " with " . (int $diff->{'similarity'}) . "% similarity$mode_chng]"; if ($action eq 'commitdiff') { # link to patch $patchno++; print $cgi->a({-href => "#patch$patchno"}, "patch") . " | "; } elsif ($diff->{'to_id'} ne $diff->{'from_id'}) { # "commit" view and modified file (not only pure rename or copy) print $cgi->a({-href => href(action=>"blobdiff", hash=>$diff->{'to_id'}, hash_parent=>$diff->{'from_id'}, hash_base=>$hash, hash_parent_base=>$parent, file_name=>$diff->{'to_file'}, file_parent=>$diff->{'from_file'})}, "diff") . " | "; } print $cgi->a({-href => href(action=>"blob", hash=>$diff->{'to_id'}, hash_base=>$parent, file_name=>$diff->{'to_file'})}, "blob") . " | "; if ($have_blame) { print $cgi->a({-href => href(action=>"blame", hash_base=>$hash, file_name=>$diff->{'to_file'})}, "blame") . " | "; } print $cgi->a({-href => href(action=>"history", hash_base=>$hash, file_name=>$diff->{'to_file'})}, "history"); print "
    \n"; } sub git_patchset_body { my ($fd, $difftree, $hash, @hash_parents) = @_; my ($hash_parent) = $hash_parents[0]; my $is_combined = (@hash_parents > 1); my $patch_idx = 0; my $patch_number = 0; my $patch_line; my $diffinfo; my $to_name; my (%from, %to); print "
    \n"; # skip to first patch while ($patch_line = <$fd>) { chomp $patch_line; last if ($patch_line =~ m/^diff /); } PATCH: while ($patch_line) { # parse "git diff" header line if ($patch_line =~ m/^diff --git (\"(?:[^\\\"]*(?:\\.[^\\\"]*)*)\"|[^ "]*) (.*)$/) { # $1 is from_name, which we do not use $to_name = unquote($2); $to_name =~ s!^b/!!; } elsif ($patch_line =~ m/^diff --(cc|combined) ("?.*"?)$/) { # $1 is 'cc' or 'combined', which we do not use $to_name = unquote($2); } else { $to_name = undef; } # check if current patch belong to current raw line # and parse raw git-diff line if needed if (is_patch_split($diffinfo, { 'to_file' => $to_name })) { # this is continuation of a split patch print "
    \n"; } else { # advance raw git-diff output if needed $patch_idx++ if defined $diffinfo; # read and prepare patch information $diffinfo = parsed_difftree_line($difftree->[$patch_idx]); # compact combined diff output can have some patches skipped # find which patch (using pathname of result) we are at now; if ($is_combined) { while ($to_name ne $diffinfo->{'to_file'}) { print "
    \n" . format_diff_cc_simplified($diffinfo, @hash_parents) . "
    \n"; # class="patch" $patch_idx++; $patch_number++; last if $patch_idx > $#$difftree; $diffinfo = parsed_difftree_line($difftree->[$patch_idx]); } } # modifies %from, %to hashes parse_from_to_diffinfo($diffinfo, \%from, \%to, @hash_parents); # this is first patch for raw difftree line with $patch_idx index # we index @$difftree array from 0, but number patches from 1 print "
    \n"; } # git diff header #assert($patch_line =~ m/^diff /) if DEBUG; #assert($patch_line !~ m!$/$!) if DEBUG; # is chomp-ed $patch_number++; # print "git diff" header print format_git_diff_header_line($patch_line, $diffinfo, \%from, \%to); # print extended diff header print "
    \n"; EXTENDED_HEADER: while ($patch_line = <$fd>) { chomp $patch_line; last EXTENDED_HEADER if ($patch_line =~ m/^--- |^diff /); print format_extended_diff_header_line($patch_line, $diffinfo, \%from, \%to); } print "
    \n"; # class="diff extended_header" # from-file/to-file diff header if (! $patch_line) { print "
    \n"; # class="patch" last PATCH; } next PATCH if ($patch_line =~ m/^diff /); #assert($patch_line =~ m/^---/) if DEBUG; my $last_patch_line = $patch_line; $patch_line = <$fd>; chomp $patch_line; #assert($patch_line =~ m/^\+\+\+/) if DEBUG; print format_diff_from_to_header($last_patch_line, $patch_line, $diffinfo, \%from, \%to, @hash_parents); # the patch itself LINE: while ($patch_line = <$fd>) { chomp $patch_line; next PATCH if ($patch_line =~ m/^diff /); print format_diff_line($patch_line, \%from, \%to); } } continue { print "
    \n"; # class="patch" } # for compact combined (--cc) format, with chunk and patch simpliciaction # patchset might be empty, but there might be unprocessed raw lines for (++$patch_idx if $patch_number > 0; $patch_idx < @$difftree; ++$patch_idx) { # read and prepare patch information $diffinfo = parsed_difftree_line($difftree->[$patch_idx]); # generate anchor for "patch" links in difftree / whatchanged part print "
    \n" . format_diff_cc_simplified($diffinfo, @hash_parents) . "
    \n"; # class="patch" $patch_number++; } if ($patch_number == 0) { if (@hash_parents > 1) { print "
    Trivial merge
    \n"; } else { print "
    No differences found
    \n"; } } print "
    \n"; # class="patchset" } # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # fills project list info (age, description, owner, forks) for each # project in the list, removing invalid projects from returned list # NOTE: modifies $projlist, but does not remove entries from it sub fill_project_list_info { my ($projlist, $check_forks) = @_; my @projects; my $show_ctags = gitweb_check_feature('ctags'); PROJECT: foreach my $pr (@$projlist) { my (@activity) = git_get_last_activity($pr->{'path'}); unless (@activity) { next PROJECT; } ($pr->{'age'}, $pr->{'age_string'}) = @activity; if (!defined $pr->{'descr'}) { my $descr = git_get_project_description($pr->{'path'}) || ""; $descr = to_utf8($descr); $pr->{'descr_long'} = $descr; $pr->{'descr'} = chop_str($descr, $projects_list_description_width, 5); } if (!defined $pr->{'owner'}) { $pr->{'owner'} = git_get_project_owner("$pr->{'path'}") || ""; } if ($check_forks) { my $pname = $pr->{'path'}; if (($pname =~ s/\.git$//) && ($pname !~ /\/$/) && (-d "$projectroot/$pname")) { $pr->{'forks'} = "-d $projectroot/$pname"; } else { $pr->{'forks'} = 0; } } $show_ctags and $pr->{'ctags'} = git_get_project_ctags($pr->{'path'}); push @projects, $pr; } return @projects; } # print 'sort by' element, generating 'sort by $name' replay link # if that order is not selected sub print_sort_th { my ($name, $order, $header) = @_; $header ||= ucfirst($name); if ($order eq $name) { print "$header\n"; } else { print "" . $cgi->a({-href => href(-replay=>1, order=>$name), -class => "header"}, $header) . "\n"; } } sub git_project_list_body { # actually uses global variable $project my ($projlist, $order, $from, $to, $extra, $no_header) = @_; my $check_forks = gitweb_check_feature('forks'); my @projects = fill_project_list_info($projlist, $check_forks); $order ||= $default_projects_order; $from = 0 unless defined $from; $to = $#projects if (!defined $to || $#projects < $to); my %order_info = ( project => { key => 'path', type => 'str' }, descr => { key => 'descr_long', type => 'str' }, owner => { key => 'owner', type => 'str' }, age => { key => 'age', type => 'num' } ); my $oi = $order_info{$order}; if ($oi->{'type'} eq 'str') { @projects = sort {$a->{$oi->{'key'}} cmp $b->{$oi->{'key'}}} @projects; } else { @projects = sort {$a->{$oi->{'key'}} <=> $b->{$oi->{'key'}}} @projects; } my $show_ctags = gitweb_check_feature('ctags'); if ($show_ctags) { my %ctags; foreach my $p (@projects) { foreach my $ct (keys %{$p->{'ctags'}}) { $ctags{$ct} += $p->{'ctags'}->{$ct}; } } my $cloud = git_populate_project_tagcloud(\%ctags); print git_show_project_tagcloud($cloud, 64); } print "\n"; unless ($no_header) { print "\n"; if ($check_forks) { print "\n"; } print_sort_th('project', $order, 'Project'); print_sort_th('descr', $order, 'Description'); print_sort_th('owner', $order, 'Owner'); print_sort_th('age', $order, 'Last Change'); print "\n" . # for links "\n"; } my $alternate = 1; my $tagfilter = $cgi->param('by_tag'); for (my $i = $from; $i <= $to; $i++) { my $pr = $projects[$i]; next if $tagfilter and $show_ctags and not grep { lc $_ eq lc $tagfilter } keys %{$pr->{'ctags'}}; next if $searchtext and not $pr->{'path'} =~ /$searchtext/ and not $pr->{'descr_long'} =~ /$searchtext/; # Weed out forks or non-matching entries of search if ($check_forks) { my $forkbase = $project; $forkbase ||= ''; $forkbase =~ s#\.git$#/#; $forkbase="^$forkbase" if $forkbase; next if not $searchtext and not $tagfilter and $show_ctags and $pr->{'path'} =~ m#$forkbase.*/.*#; # regexp-safe } if ($alternate) { print "\n"; } else { print "\n"; } $alternate ^= 1; if ($check_forks) { print "\n"; } print "\n" . "\n" . "\n"; print "\n" . "\n" . "\n"; } if (defined $extra) { print "\n"; if ($check_forks) { print "\n"; } print "\n" . "\n"; } print "
    "; if ($pr->{'forks'}) { print "\n"; print $cgi->a({-href => href(project=>$pr->{'path'}, action=>"forks")}, "+"); } print "" . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"summary"), -class => "list"}, esc_html($pr->{'path'})) . "" . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"summary"), -class => "list", -title => $pr->{'descr_long'}}, esc_html($pr->{'descr'})) . "" . chop_and_escape_str($pr->{'owner'}, 15) . "{'age'}) . "\">" . (defined $pr->{'age_string'} ? $pr->{'age_string'} : "No commits") . "" . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"summary")}, "summary") . " | " . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"shortlog")}, "shortlog") . " | " . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"log")}, "log") . " | " . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"tree")}, "tree") . ($pr->{'forks'} ? " | " . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"forks")}, "forks") : '') . "
    $extra
    \n"; } sub git_log_body { # uses global variable $project my ($commitlist, $from, $to, $refs, $extra) = @_; $from = 0 unless defined $from; $to = $#{$commitlist} if (!defined $to || $#{$commitlist} < $to); for (my $i = 0; $i <= $to; $i++) { my %co = %{$commitlist->[$i]}; next if !%co; my $commit = $co{'id'}; my $ref = format_ref_marker($refs, $commit); my %ad = parse_date($co{'author_epoch'}); git_print_header_div('commit', "$co{'age_string'}" . esc_html($co{'title'}) . $ref, $commit); print "
    \n" . "
    \n" . $cgi->a({-href => href(action=>"commit", hash=>$commit)}, "commit") . " | " . $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff") . " | " . $cgi->a({-href => href(action=>"tree", hash=>$commit, hash_base=>$commit)}, "tree") . "
    \n" . "
    \n"; git_print_authorship(\%co, -tag => 'span'); print "
    \n
    \n"; print "
    \n"; git_print_log($co{'comment'}, -final_empty_line=> 1); print "
    \n"; } if ($extra) { print "
    \n"; print "$extra\n"; print "
    \n"; } } sub git_shortlog_body { # uses global variable $project my ($commitlist, $from, $to, $refs, $extra) = @_; $from = 0 unless defined $from; $to = $#{$commitlist} if (!defined $to || $#{$commitlist} < $to); print "\n"; my $alternate = 1; for (my $i = $from; $i <= $to; $i++) { my %co = %{$commitlist->[$i]}; my $commit = $co{'id'}; my $ref = format_ref_marker($refs, $commit); if ($alternate) { print "\n"; } else { print "\n"; } $alternate ^= 1; # git_summary() used print "\n" . print "\n" . format_author_html('td', \%co, 10) . "\n" . "\n" . "\n"; } if (defined $extra) { print "\n" . "\n" . "\n"; } print "
    $co{'age_string'}$co{'age_string_date'}"; print format_subject_html($co{'title'}, $co{'title_short'}, href(action=>"commit", hash=>$commit), $ref); print "" . $cgi->a({-href => href(action=>"commit", hash=>$commit)}, "commit") . " | " . $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff") . " | " . $cgi->a({-href => href(action=>"tree", hash=>$commit, hash_base=>$commit)}, "tree"); my $snapshot_links = format_snapshot_links($commit); if (defined $snapshot_links) { print " | " . $snapshot_links; } print "
    $extra
    \n"; } sub git_history_body { # Warning: assumes constant type (blob or tree) during history my ($commitlist, $from, $to, $refs, $extra, $file_name, $file_hash, $ftype) = @_; $from = 0 unless defined $from; $to = $#{$commitlist} unless (defined $to && $to <= $#{$commitlist}); print "\n"; my $alternate = 1; for (my $i = $from; $i <= $to; $i++) { my %co = %{$commitlist->[$i]}; if (!%co) { next; } my $commit = $co{'id'}; my $ref = format_ref_marker($refs, $commit); if ($alternate) { print "\n"; } else { print "\n"; } $alternate ^= 1; print "\n" . # shortlog: format_author_html('td', \%co, 10) format_author_html('td', \%co, 15, 3) . "\n" . "\n" . "\n"; } if (defined $extra) { print "\n" . "\n" . "\n"; } print "
    $co{'age_string_date'}"; # originally git_history used chop_str($co{'title'}, 50) print format_subject_html($co{'title'}, $co{'title_short'}, href(action=>"commit", hash=>$commit), $ref); print "" . $cgi->a({-href => href(action=>$ftype, hash_base=>$commit, file_name=>$file_name)}, $ftype) . " | " . $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff"); if ($ftype eq 'blob') { my $blob_current = $file_hash; my $blob_parent = git_get_hash_by_path($commit, $file_name); if (defined $blob_current && defined $blob_parent && $blob_current ne $blob_parent) { print " | " . $cgi->a({-href => href(action=>"blobdiff", hash=>$blob_current, hash_parent=>$blob_parent, hash_base=>$hash_base, hash_parent_base=>$commit, file_name=>$file_name)}, "diff to current"); } } print "
    $extra
    \n"; } sub git_tags_body { # uses global variable $project my ($taglist, $from, $to, $extra) = @_; $from = 0 unless defined $from; $to = $#{$taglist} if (!defined $to || $#{$taglist} < $to); print "\n"; my $alternate = 1; for (my $i = $from; $i <= $to; $i++) { my $entry = $taglist->[$i]; my %tag = %$entry; my $comment = $tag{'subject'}; my $comment_short; if (defined $comment) { $comment_short = chop_str($comment, 30, 5); } if ($alternate) { print "\n"; } else { print "\n"; } $alternate ^= 1; if (defined $tag{'age'}) { print "\n"; } else { print "\n"; } print "\n" . "\n" . "\n" . "\n" . ""; } if (defined $extra) { print "\n" . "\n" . "\n"; } print "
    $tag{'age'}" . $cgi->a({-href => href(action=>$tag{'reftype'}, hash=>$tag{'refid'}), -class => "list name"}, esc_html($tag{'name'})) . ""; if (defined $comment) { print format_subject_html($comment, $comment_short, href(action=>"tag", hash=>$tag{'id'})); } print ""; if ($tag{'type'} eq "tag") { print $cgi->a({-href => href(action=>"tag", hash=>$tag{'id'})}, "tag"); } else { print " "; } print "" . " | " . $cgi->a({-href => href(action=>$tag{'reftype'}, hash=>$tag{'refid'})}, $tag{'reftype'}); if ($tag{'reftype'} eq "commit") { print " | " . $cgi->a({-href => href(action=>"shortlog", hash=>$tag{'fullname'})}, "shortlog") . " | " . $cgi->a({-href => href(action=>"log", hash=>$tag{'fullname'})}, "log"); } elsif ($tag{'reftype'} eq "blob") { print " | " . $cgi->a({-href => href(action=>"blob_plain", hash=>$tag{'refid'})}, "raw"); } print "
    $extra
    \n"; } sub git_heads_body { # uses global variable $project my ($headlist, $head, $from, $to, $extra) = @_; $from = 0 unless defined $from; $to = $#{$headlist} if (!defined $to || $#{$headlist} < $to); print "\n"; my $alternate = 1; for (my $i = $from; $i <= $to; $i++) { my $entry = $headlist->[$i]; my %ref = %$entry; my $curr = $ref{'id'} eq $head; if ($alternate) { print "\n"; } else { print "\n"; } $alternate ^= 1; print "\n" . ($curr ? "\n" . "\n" . ""; } if (defined $extra) { print "\n" . "\n" . "\n"; } print "
    $ref{'age'}" : "") . $cgi->a({-href => href(action=>"shortlog", hash=>$ref{'fullname'}), -class => "list name"},esc_html($ref{'name'})) . "" . $cgi->a({-href => href(action=>"shortlog", hash=>$ref{'fullname'})}, "shortlog") . " | " . $cgi->a({-href => href(action=>"log", hash=>$ref{'fullname'})}, "log") . " | " . $cgi->a({-href => href(action=>"tree", hash=>$ref{'fullname'}, hash_base=>$ref{'name'})}, "tree") . "
    $extra
    \n"; } sub git_search_grep_body { my ($commitlist, $from, $to, $extra) = @_; $from = 0 unless defined $from; $to = $#{$commitlist} if (!defined $to || $#{$commitlist} < $to); print "\n"; my $alternate = 1; for (my $i = $from; $i <= $to; $i++) { my %co = %{$commitlist->[$i]}; if (!%co) { next; } my $commit = $co{'id'}; if ($alternate) { print "\n"; } else { print "\n"; } $alternate ^= 1; print "\n" . format_author_html('td', \%co, 15, 5) . "\n" . "\n" . "\n"; } if (defined $extra) { print "\n" . "\n" . "\n"; } print "
    $co{'age_string_date'}" . $cgi->a({-href => href(action=>"commit", hash=>$co{'id'}), -class => "list subject"}, chop_and_escape_str($co{'title'}, 50) . "
    "); my $comment = $co{'comment'}; foreach my $line (@$comment) { if ($line =~ m/^(.*?)($search_regexp)(.*)$/i) { my ($lead, $match, $trail) = ($1, $2, $3); $match = chop_str($match, 70, 5, 'center'); my $contextlen = int((80 - length($match))/2); $contextlen = 30 if ($contextlen > 30); $lead = chop_str($lead, $contextlen, 10, 'left'); $trail = chop_str($trail, $contextlen, 10, 'right'); $lead = esc_html($lead); $match = esc_html($match); $trail = esc_html($trail); print "$lead$match$trail
    "; } } print "
    " . $cgi->a({-href => href(action=>"commit", hash=>$co{'id'})}, "commit") . " | " . $cgi->a({-href => href(action=>"commitdiff", hash=>$co{'id'})}, "commitdiff") . " | " . $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'}, hash_base=>$co{'id'})}, "tree"); print "
    $extra
    \n"; } ## ====================================================================== ## ====================================================================== ## actions sub git_project_list { my $order = $input_params{'order'}; if (defined $order && $order !~ m/none|project|descr|owner|age/) { die_error(400, "Unknown order parameter"); } my @list = git_get_projects_list(); if (!@list) { die_error(404, "No projects found"); } git_header_html(); if (-f $home_text) { print "
    \n"; insert_file($home_text); print "
    \n"; } print $cgi->startform(-method => "get") . "

    Search:\n" . $cgi->textfield(-name => "s", -value => $searchtext) . "\n" . "

    " . $cgi->end_form() . "\n"; git_project_list_body(\@list, $order); git_footer_html(); } sub git_forks { my $order = $input_params{'order'}; if (defined $order && $order !~ m/none|project|descr|owner|age/) { die_error(400, "Unknown order parameter"); } my @list = git_get_projects_list($project); if (!@list) { die_error(404, "No forks found"); } git_header_html(); git_print_page_nav('',''); git_print_header_div('summary', "$project forks"); git_project_list_body(\@list, $order); git_footer_html(); } sub git_project_index { my @projects = git_get_projects_list($project); print $cgi->header( -type => 'text/plain', -charset => 'utf-8', -content_disposition => 'inline; filename="index.aux"'); foreach my $pr (@projects) { if (!exists $pr->{'owner'}) { $pr->{'owner'} = git_get_project_owner("$pr->{'path'}"); } my ($path, $owner) = ($pr->{'path'}, $pr->{'owner'}); # quote as in CGI::Util::encode, but keep the slash, and use '+' for ' ' $path =~ s/([^a-zA-Z0-9_.\-\/ ])/sprintf("%%%02X", ord($1))/eg; $owner =~ s/([^a-zA-Z0-9_.\-\/ ])/sprintf("%%%02X", ord($1))/eg; $path =~ s/ /\+/g; $owner =~ s/ /\+/g; print "$path $owner\n"; } } sub git_summary { my $descr = git_get_project_description($project) || "none"; my %co = parse_commit("HEAD"); my %cd = %co ? parse_date($co{'committer_epoch'}, $co{'committer_tz'}) : (); my $head = $co{'id'}; my $owner = git_get_project_owner($project); my $refs = git_get_references(); # These get_*_list functions return one more to allow us to see if # there are more ... my @taglist = git_get_tags_list(16); my @headlist = git_get_heads_list(16); my @forklist; my $check_forks = gitweb_check_feature('forks'); if ($check_forks) { @forklist = git_get_projects_list($project); } git_header_html(); git_print_page_nav('summary','', $head); print "
     
    \n"; print "\n" . "\n" . "\n"; if (defined $cd{'rfc2822'}) { print "\n"; } # use per project git URL list in $projectroot/$project/cloneurl # or make project git URL from git base URL and project name my $url_tag = "URL"; my @url_list = git_get_project_url_list($project); @url_list = map { "$_/$project" } @git_base_url_list unless @url_list; foreach my $git_url (@url_list) { next unless $git_url; print "\n"; $url_tag = ""; } # Tag cloud my $show_ctags = gitweb_check_feature('ctags'); if ($show_ctags) { my $ctags = git_get_project_ctags($project); my $cloud = git_populate_project_tagcloud($ctags); print "\n\n"; } print "
    description" . esc_html($descr) . "
    owner" . esc_html($owner) . "
    last change$cd{'rfc2822'}
    Content tags:
    "; print "
    " unless %$ctags; print "
    Add:
    "; print "
    " if %$ctags; print git_show_project_tagcloud($cloud, 48); print "
    \n"; # If XSS prevention is on, we don't include README.html. # TODO: Allow a readme in some safe format. if (!$prevent_xss && -s "$projectroot/$project/README.html") { print "
    readme
    \n" . "
    \n"; insert_file("$projectroot/$project/README.html"); print "\n
    \n"; # class="readme" } # we need to request one more than 16 (0..15) to check if # those 16 are all my @commitlist = $head ? parse_commits($head, 17) : (); if (@commitlist) { git_print_header_div('shortlog'); git_shortlog_body(\@commitlist, 0, 15, $refs, $#commitlist <= 15 ? undef : $cgi->a({-href => href(action=>"shortlog")}, "...")); } if (@taglist) { git_print_header_div('tags'); git_tags_body(\@taglist, 0, 15, $#taglist <= 15 ? undef : $cgi->a({-href => href(action=>"tags")}, "...")); } if (@headlist) { git_print_header_div('heads'); git_heads_body(\@headlist, $head, 0, 15, $#headlist <= 15 ? undef : $cgi->a({-href => href(action=>"heads")}, "...")); } if (@forklist) { git_print_header_div('forks'); git_project_list_body(\@forklist, 'age', 0, 15, $#forklist <= 15 ? undef : $cgi->a({-href => href(action=>"forks")}, "..."), 'no_header'); } git_footer_html(); } sub git_tag { my $head = git_get_head_hash($project); git_header_html(); git_print_page_nav('','', $head,undef,$head); my %tag = parse_tag($hash); if (! %tag) { die_error(404, "Unknown tag object"); } git_print_header_div('commit', esc_html($tag{'name'}), $hash); print "
    \n" . "\n" . "\n" . "\n" . "\n" . "\n" . "\n"; if (defined($tag{'author'})) { git_print_authorship_rows(\%tag, 'author'); } print "
    object" . $cgi->a({-class => "list", -href => href(action=>$tag{'type'}, hash=>$tag{'object'})}, $tag{'object'}) . "" . $cgi->a({-href => href(action=>$tag{'type'}, hash=>$tag{'object'})}, $tag{'type'}) . "
    \n\n" . "
    \n"; print "
    "; my $comment = $tag{'comment'}; foreach my $line (@$comment) { chomp $line; print esc_html($line, -nbsp=>1) . "
    \n"; } print "
    \n"; git_footer_html(); } sub git_blame_common { my $format = shift || 'porcelain'; if ($format eq 'porcelain' && $cgi->param('js')) { $format = 'incremental'; $action = 'blame_incremental'; # for page title etc } # permissions gitweb_check_feature('blame') or die_error(403, "Blame view not allowed"); # error checking die_error(400, "No file name given") unless $file_name; $hash_base ||= git_get_head_hash($project); die_error(404, "Couldn't find base commit") unless $hash_base; my %co = parse_commit($hash_base) or die_error(404, "Commit not found"); my $ftype = "blob"; if (!defined $hash) { $hash = git_get_hash_by_path($hash_base, $file_name, "blob") or die_error(404, "Error looking up file"); } else { $ftype = git_get_type($hash); if ($ftype !~ "blob") { die_error(400, "Object is not a blob"); } } my $fd; if ($format eq 'incremental') { # get file contents (as base) open $fd, "-|", git_cmd(), 'cat-file', 'blob', $hash or die_error(500, "Open git-cat-file failed"); } elsif ($format eq 'data') { # run git-blame --incremental open $fd, "-|", git_cmd(), "blame", "--incremental", $hash_base, "--", $file_name or die_error(500, "Open git-blame --incremental failed"); } else { # run git-blame --porcelain open $fd, "-|", git_cmd(), "blame", '-p', $hash_base, '--', $file_name or die_error(500, "Open git-blame --porcelain failed"); } # incremental blame data returns early if ($format eq 'data') { print $cgi->header( -type=>"text/plain", -charset => "utf-8", -status=> "200 OK"); local $| = 1; # output autoflush print while <$fd>; close $fd or print "ERROR $!\n"; print 'END'; if (defined $t0 && gitweb_check_feature('timed')) { print ' '. Time::HiRes::tv_interval($t0, [Time::HiRes::gettimeofday()]). ' '.$number_of_git_cmds; } print "\n"; return; } # page header git_header_html(); my $formats_nav = $cgi->a({-href => href(action=>"blob", -replay=>1)}, "blob") . " | "; if ($format eq 'incremental') { $formats_nav .= $cgi->a({-href => href(action=>"blame", javascript=>0, -replay=>1)}, "blame") . " (non-incremental)"; } else { $formats_nav .= $cgi->a({-href => href(action=>"blame_incremental", -replay=>1)}, "blame") . " (incremental)"; } $formats_nav .= " | " . $cgi->a({-href => href(action=>"history", -replay=>1)}, "history") . " | " . $cgi->a({-href => href(action=>$action, file_name=>$file_name)}, "HEAD"); git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav); git_print_header_div('commit', esc_html($co{'title'}), $hash_base); git_print_page_path($file_name, $ftype, $hash_base); # page body if ($format eq 'incremental') { print "\n"; print qq!
    \n!; } print qq!
    \n!; print qq!
    ... / ...
    \n! if ($format eq 'incremental'); print qq!\n!. #qq!\n!. qq!\n!. qq!\n!. qq!\n!. qq!\n!; my @rev_color = qw(light dark); my $num_colors = scalar(@rev_color); my $current_color = 0; if ($format eq 'incremental') { my $color_class = $rev_color[$current_color]; #contents of a file my $linenr = 0; LINE: while (my $line = <$fd>) { chomp $line; $linenr++; print qq!!. qq!!. qq!!; print qq!\n"; print qq!\n!; } } else { # porcelain, i.e. ordinary blame my %metainfo = (); # saves information about commits # blame data LINE: while (my $line = <$fd>) { chomp $line; # the header: [] # no for subsequent lines in group of lines my ($full_rev, $orig_lineno, $lineno, $group_size) = ($line =~ /^([0-9a-f]{40}) (\d+) (\d+)(?: (\d+))?$/); if (!exists $metainfo{$full_rev}) { $metainfo{$full_rev} = { 'nprevious' => 0 }; } my $meta = $metainfo{$full_rev}; my $data; while ($data = <$fd>) { chomp $data; last if ($data =~ s/^\t//); # contents of line if ($data =~ /^(\S+)(?: (.*))?$/) { $meta->{$1} = $2 unless exists $meta->{$1}; } if ($data =~ /^previous /) { $meta->{'nprevious'}++; } } my $short_rev = substr($full_rev, 0, 8); my $author = $meta->{'author'}; my %date = parse_date($meta->{'author-time'}, $meta->{'author-tz'}); my $date = $date{'iso-tz'}; if ($group_size) { $current_color = ($current_color + 1) % $num_colors; } my $tr_class = $rev_color[$current_color]; $tr_class .= ' boundary' if (exists $meta->{'boundary'}); $tr_class .= ' no-previous' if ($meta->{'nprevious'} == 0); $tr_class .= ' multiple-previous' if ($meta->{'nprevious'} > 1); print "\n"; if ($group_size) { print "\n"; } # 'previous' if (exists $meta->{'previous'} && $meta->{'previous'} =~ /^([a-fA-F0-9]{40}) (.*)$/) { $meta->{'parent'} = $1; $meta->{'file_parent'} = unquote($2); } my $linenr_commit = exists($meta->{'parent'}) ? $meta->{'parent'} : $full_rev; my $linenr_filename = exists($meta->{'file_parent'}) ? $meta->{'file_parent'} : unquote($meta->{'filename'}); my $blamed = href(action => 'blame', file_name => $linenr_filename, hash_base => $linenr_commit); print ""; print "\n"; print "\n"; } # end while } # footer print "\n". "
    CommitLineData
    !. qq!$linenr! . esc_html($line) . "
    1); print ">"; print $cgi->a({-href => href(action=>"commit", hash=>$full_rev, file_name=>$file_name)}, esc_html($short_rev)); if ($group_size >= 2) { my @author_initials = ($author =~ /\b([[:upper:]])\B/g); if (@author_initials) { print "
    " . esc_html(join('', @author_initials)); # or join('.', ...) } } print "
    "; print $cgi->a({ -href => "$blamed#l$orig_lineno", -class => "linenr" }, esc_html($lineno)); print "" . esc_html($data) . "
    \n"; # class="blame" print "
    \n"; # class="blame_body" close $fd or print "Reading blob failed\n"; git_footer_html(); } sub git_blame { git_blame_common(); } sub git_blame_incremental { git_blame_common('incremental'); } sub git_blame_data { git_blame_common('data'); } sub git_tags { my $head = git_get_head_hash($project); git_header_html(); git_print_page_nav('','', $head,undef,$head); git_print_header_div('summary', $project); my @tagslist = git_get_tags_list(); if (@tagslist) { git_tags_body(\@tagslist); } git_footer_html(); } sub git_heads { my $head = git_get_head_hash($project); git_header_html(); git_print_page_nav('','', $head,undef,$head); git_print_header_div('summary', $project); my @headslist = git_get_heads_list(); if (@headslist) { git_heads_body(\@headslist, $head); } git_footer_html(); } sub git_blob_plain { my $type = shift; my $expires; if (!defined $hash) { if (defined $file_name) { my $base = $hash_base || git_get_head_hash($project); $hash = git_get_hash_by_path($base, $file_name, "blob") or die_error(404, "Cannot find file"); } else { die_error(400, "No file name defined"); } } elsif ($hash =~ m/^[0-9a-fA-F]{40}$/) { # blobs defined by non-textual hash id's can be cached $expires = "+1d"; } open my $fd, "-|", git_cmd(), "cat-file", "blob", $hash or die_error(500, "Open git-cat-file blob '$hash' failed"); # content-type (can include charset) $type = blob_contenttype($fd, $file_name, $type); # "save as" filename, even when no $file_name is given my $save_as = "$hash"; if (defined $file_name) { $save_as = $file_name; } elsif ($type =~ m/^text\//) { $save_as .= '.txt'; } # With XSS prevention on, blobs of all types except a few known safe # ones are served with "Content-Disposition: attachment" to make sure # they don't run in our security domain. For certain image types, # blob view writes an tag referring to blob_plain view, and we # want to be sure not to break that by serving the image as an # attachment (though Firefox 3 doesn't seem to care). my $sandbox = $prevent_xss && $type !~ m!^(?:text/plain|image/(?:gif|png|jpeg))$!; print $cgi->header( -type => $type, -expires => $expires, -content_disposition => ($sandbox ? 'attachment' : 'inline') . '; filename="' . $save_as . '"'); local $/ = undef; binmode STDOUT, ':raw'; print <$fd>; binmode STDOUT, ':utf8'; # as set at the beginning of gitweb.cgi close $fd; } sub git_blob { my $expires; if (!defined $hash) { if (defined $file_name) { my $base = $hash_base || git_get_head_hash($project); $hash = git_get_hash_by_path($base, $file_name, "blob") or die_error(404, "Cannot find file"); } else { die_error(400, "No file name defined"); } } elsif ($hash =~ m/^[0-9a-fA-F]{40}$/) { # blobs defined by non-textual hash id's can be cached $expires = "+1d"; } my $have_blame = gitweb_check_feature('blame'); open my $fd, "-|", git_cmd(), "cat-file", "blob", $hash or die_error(500, "Couldn't cat $file_name, $hash"); my $mimetype = blob_mimetype($fd, $file_name); if ($mimetype !~ m!^(?:text/|image/(?:gif|png|jpeg)$)! && -B $fd) { close $fd; return git_blob_plain($mimetype); } # we can have blame only for text/* mimetype $have_blame &&= ($mimetype =~ m!^text/!); git_header_html(undef, $expires); my $formats_nav = ''; if (defined $hash_base && (my %co = parse_commit($hash_base))) { if (defined $file_name) { if ($have_blame) { $formats_nav .= $cgi->a({-href => href(action=>"blame", -replay=>1)}, "blame") . " | "; } $formats_nav .= $cgi->a({-href => href(action=>"history", -replay=>1)}, "history") . " | " . $cgi->a({-href => href(action=>"blob_plain", -replay=>1)}, "raw") . " | " . $cgi->a({-href => href(action=>"blob", hash_base=>"HEAD", file_name=>$file_name)}, "HEAD"); } else { $formats_nav .= $cgi->a({-href => href(action=>"blob_plain", -replay=>1)}, "raw"); } git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav); git_print_header_div('commit', esc_html($co{'title'}), $hash_base); } else { print "
    \n" . "

    \n" . "
    $hash
    \n"; } git_print_page_path($file_name, "blob", $hash_base); print "
    \n"; if ($mimetype =~ m!^image/!) { print qq!$file_name$hash, hash_base=>$hash_base, file_name=>$file_name) . qq!" />\n!; } else { my $nr; while (my $line = <$fd>) { chomp $line; $nr++; $line = untabify($line); printf "\n", $nr, $nr, $nr, esc_html($line, -nbsp=>1); } } close $fd or print "Reading blob failed.\n"; print "
    "; git_footer_html(); } sub git_tree { if (!defined $hash_base) { $hash_base = "HEAD"; } if (!defined $hash) { if (defined $file_name) { $hash = git_get_hash_by_path($hash_base, $file_name, "tree"); } else { $hash = $hash_base; } } die_error(404, "No such tree") unless defined($hash); my $show_sizes = gitweb_check_feature('show-sizes'); my $have_blame = gitweb_check_feature('blame'); my @entries = (); { local $/ = "\0"; open my $fd, "-|", git_cmd(), "ls-tree", '-z', ($show_sizes ? '-l' : ()), @extra_options, $hash or die_error(500, "Open git-ls-tree failed"); @entries = map { chomp; $_ } <$fd>; close $fd or die_error(404, "Reading tree failed"); } my $refs = git_get_references(); my $ref = format_ref_marker($refs, $hash_base); git_header_html(); my $basedir = ''; if (defined $hash_base && (my %co = parse_commit($hash_base))) { my @views_nav = (); if (defined $file_name) { push @views_nav, $cgi->a({-href => href(action=>"history", -replay=>1)}, "history"), $cgi->a({-href => href(action=>"tree", hash_base=>"HEAD", file_name=>$file_name)}, "HEAD"), } my $snapshot_links = format_snapshot_links($hash); if (defined $snapshot_links) { # FIXME: Should be available when we have no hash base as well. push @views_nav, $snapshot_links; } git_print_page_nav('tree','', $hash_base, undef, undef, join(' | ', @views_nav)); git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash_base); } else { undef $hash_base; print "
    \n"; print "

    \n"; print "
    $hash
    \n"; } if (defined $file_name) { $basedir = $file_name; if ($basedir ne '' && substr($basedir, -1) ne '/') { $basedir .= '/'; } git_print_page_path($file_name, 'tree', $hash_base); } print "
    \n"; print "\n"; my $alternate = 1; # '..' (top directory) link if possible if (defined $hash_base && defined $file_name && $file_name =~ m![^/]+$!) { if ($alternate) { print "\n"; } else { print "\n"; } $alternate ^= 1; my $up = $file_name; $up =~ s!/?[^/]+$!!; undef $up unless $up; # based on git_print_tree_entry print '\n"; print ''."\n" if $show_sizes; print '\n"; print "\n"; print "\n"; } foreach my $line (@entries) { my %t = parse_ls_tree_line($line, -z => 1, -l => $show_sizes); if ($alternate) { print "\n"; } else { print "\n"; } $alternate ^= 1; git_print_tree_entry(\%t, $basedir, $hash_base, $have_blame); print "\n"; } print "
    ' . mode_str('040000') . " '; print $cgi->a({-href => href(action=>"tree", hash_base=>$hash_base, file_name=>$up)}, ".."); print "
    \n" . "
    "; git_footer_html(); } sub snapshot_name { my ($project, $hash) = @_; # path/to/project.git -> project # path/to/project/.git -> project my $name = to_utf8($project); $name =~ s,([^/])/*\.git$,$1,; $name = basename($name); # sanitize name $name =~ s/[[:cntrl:]]/?/g; my $ver = $hash; if ($hash =~ /^[0-9a-fA-F]+$/) { # shorten SHA-1 hash my $full_hash = git_get_full_hash($project, $hash); if ($full_hash =~ /^$hash/ && length($hash) > 7) { $ver = git_get_short_hash($project, $hash); } } elsif ($hash =~ m!^refs/tags/(.*)$!) { # tags don't need shortened SHA-1 hash $ver = $1; } else { # branches and other need shortened SHA-1 hash if ($hash =~ m!^refs/(?:heads|remotes)/(.*)$!) { $ver = $1; } $ver .= '-' . git_get_short_hash($project, $hash); } # in case of hierarchical branch names $ver =~ s!/!.!g; # name = project-version_string $name = "$name-$ver"; return wantarray ? ($name, $name) : $name; } sub git_snapshot { my $format = $input_params{'snapshot_format'}; if (!@snapshot_fmts) { die_error(403, "Snapshots not allowed"); } # default to first supported snapshot format $format ||= $snapshot_fmts[0]; if ($format !~ m/^[a-z0-9]+$/) { die_error(400, "Invalid snapshot format parameter"); } elsif (!exists($known_snapshot_formats{$format})) { die_error(400, "Unknown snapshot format"); } elsif ($known_snapshot_formats{$format}{'disabled'}) { die_error(403, "Snapshot format not allowed"); } elsif (!grep($_ eq $format, @snapshot_fmts)) { die_error(403, "Unsupported snapshot format"); } my $type = git_get_type("$hash^{}"); if (!$type) { die_error(404, 'Object does not exist'); } elsif ($type eq 'blob') { die_error(400, 'Object is not a tree-ish'); } my ($name, $prefix) = snapshot_name($project, $hash); my $filename = "$name$known_snapshot_formats{$format}{'suffix'}"; my $cmd = quote_command( git_cmd(), 'archive', "--format=$known_snapshot_formats{$format}{'format'}", "--prefix=$prefix/", $hash); if (exists $known_snapshot_formats{$format}{'compressor'}) { $cmd .= ' | ' . quote_command(@{$known_snapshot_formats{$format}{'compressor'}}); } $filename =~ s/(["\\])/\\$1/g; print $cgi->header( -type => $known_snapshot_formats{$format}{'type'}, -content_disposition => 'inline; filename="' . $filename . '"', -status => '200 OK'); open my $fd, "-|", $cmd or die_error(500, "Execute git-archive failed"); binmode STDOUT, ':raw'; print <$fd>; binmode STDOUT, ':utf8'; # as set at the beginning of gitweb.cgi close $fd; } sub git_log_generic { my ($fmt_name, $body_subr, $base, $parent, $file_name, $file_hash) = @_; my $head = git_get_head_hash($project); if (!defined $base) { $base = $head; } if (!defined $page) { $page = 0; } my $refs = git_get_references(); my $commit_hash = $base; if (defined $parent) { $commit_hash = "$parent..$base"; } my @commitlist = parse_commits($commit_hash, 101, (100 * $page), defined $file_name ? ($file_name, "--full-history") : ()); my $ftype; if (!defined $file_hash && defined $file_name) { # some commits could have deleted file in question, # and not have it in tree, but one of them has to have it for (my $i = 0; $i < @commitlist; $i++) { $file_hash = git_get_hash_by_path($commitlist[$i]{'id'}, $file_name); last if defined $file_hash; } } if (defined $file_hash) { $ftype = git_get_type($file_hash); } if (defined $file_name && !defined $ftype) { die_error(500, "Unknown type of object"); } my %co; if (defined $file_name) { %co = parse_commit($base) or die_error(404, "Unknown commit object"); } my $paging_nav = format_paging_nav($fmt_name, $page, $#commitlist >= 100); my $next_link = ''; if ($#commitlist >= 100) { $next_link = $cgi->a({-href => href(-replay=>1, page=>$page+1), -accesskey => "n", -title => "Alt-n"}, "next"); } my $patch_max = gitweb_get_feature('patches'); if ($patch_max && !defined $file_name) { if ($patch_max < 0 || @commitlist <= $patch_max) { $paging_nav .= " ⋅ " . $cgi->a({-href => href(action=>"patches", -replay=>1)}, "patches"); } } git_header_html(); git_print_page_nav($fmt_name,'', $hash,$hash,$hash, $paging_nav); if (defined $file_name) { git_print_header_div('commit', esc_html($co{'title'}), $base); } else { git_print_header_div('summary', $project) } git_print_page_path($file_name, $ftype, $hash_base) if (defined $file_name); $body_subr->(\@commitlist, 0, 99, $refs, $next_link, $file_name, $file_hash, $ftype); git_footer_html(); } sub git_log { git_log_generic('log', \&git_log_body, $hash, $hash_parent); } sub git_commit { $hash ||= $hash_base || "HEAD"; my %co = parse_commit($hash) or die_error(404, "Unknown commit object"); my $parent = $co{'parent'}; my $parents = $co{'parents'}; # listref # we need to prepare $formats_nav before any parameter munging my $formats_nav; if (!defined $parent) { # --root commitdiff $formats_nav .= '(initial)'; } elsif (@$parents == 1) { # single parent commit $formats_nav .= '(parent: ' . $cgi->a({-href => href(action=>"commit", hash=>$parent)}, esc_html(substr($parent, 0, 7))) . ')'; } else { # merge commit $formats_nav .= '(merge: ' . join(' ', map { $cgi->a({-href => href(action=>"commit", hash=>$_)}, esc_html(substr($_, 0, 7))); } @$parents ) . ')'; } if (gitweb_check_feature('patches') && @$parents <= 1) { $formats_nav .= " | " . $cgi->a({-href => href(action=>"patch", -replay=>1)}, "patch"); } if (!defined $parent) { $parent = "--root"; } my @difftree; open my $fd, "-|", git_cmd(), "diff-tree", '-r', "--no-commit-id", @diff_opts, (@$parents <= 1 ? $parent : '-c'), $hash, "--" or die_error(500, "Open git-diff-tree failed"); @difftree = map { chomp; $_ } <$fd>; close $fd or die_error(404, "Reading git-diff-tree failed"); # non-textual hash id's can be cached my $expires; if ($hash =~ m/^[0-9a-fA-F]{40}$/) { $expires = "+1d"; } my $refs = git_get_references(); my $ref = format_ref_marker($refs, $co{'id'}); git_header_html(undef, $expires); git_print_page_nav('commit', '', $hash, $co{'tree'}, $hash, $formats_nav); if (defined $co{'parent'}) { git_print_header_div('commitdiff', esc_html($co{'title'}) . $ref, $hash); } else { git_print_header_div('tree', esc_html($co{'title'}) . $ref, $co{'tree'}, $hash); } print "
    \n" . "\n"; git_print_authorship_rows(\%co); print "\n"; print "" . "" . "" . "" . "\n"; foreach my $par (@$parents) { print "" . "" . "" . "" . "\n"; } print "
    commit$co{'id'}
    tree" . $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'}, hash_base=>$hash), class => "list"}, $co{'tree'}) . "" . $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'}, hash_base=>$hash)}, "tree"); my $snapshot_links = format_snapshot_links($hash); if (defined $snapshot_links) { print " | " . $snapshot_links; } print "
    parent" . $cgi->a({-href => href(action=>"commit", hash=>$par), class => "list"}, $par) . "" . $cgi->a({-href => href(action=>"commit", hash=>$par)}, "commit") . " | " . $cgi->a({-href => href(action=>"commitdiff", hash=>$hash, hash_parent=>$par)}, "diff") . "
    ". "
    \n"; print "
    \n"; git_print_log($co{'comment'}); print "
    \n"; git_difftree_body(\@difftree, $hash, @$parents); git_footer_html(); } sub git_object { # object is defined by: # - hash or hash_base alone # - hash_base and file_name my $type; # - hash or hash_base alone if ($hash || ($hash_base && !defined $file_name)) { my $object_id = $hash || $hash_base; open my $fd, "-|", quote_command( git_cmd(), 'cat-file', '-t', $object_id) . ' 2> /dev/null' or die_error(404, "Object does not exist"); $type = <$fd>; chomp $type; close $fd or die_error(404, "Object does not exist"); # - hash_base and file_name } elsif ($hash_base && defined $file_name) { $file_name =~ s,/+$,,; system(git_cmd(), "cat-file", '-e', $hash_base) == 0 or die_error(404, "Base object does not exist"); # here errors should not hapen open my $fd, "-|", git_cmd(), "ls-tree", $hash_base, "--", $file_name or die_error(500, "Open git-ls-tree failed"); my $line = <$fd>; close $fd; #'100644 blob 0fa3f3a66fb6a137f6ec2c19351ed4d807070ffa panic.c' unless ($line && $line =~ m/^([0-9]+) (.+) ([0-9a-fA-F]{40})\t/) { die_error(404, "File or directory for given base does not exist"); } $type = $2; $hash = $3; } else { die_error(400, "Not enough information to find object"); } print $cgi->redirect(-uri => href(action=>$type, -full=>1, hash=>$hash, hash_base=>$hash_base, file_name=>$file_name), -status => '302 Found'); } sub git_blobdiff { my $format = shift || 'html'; my $fd; my @difftree; my %diffinfo; my $expires; # preparing $fd and %diffinfo for git_patchset_body # new style URI if (defined $hash_base && defined $hash_parent_base) { if (defined $file_name) { # read raw output open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, $hash_parent_base, $hash_base, "--", (defined $file_parent ? $file_parent : ()), $file_name or die_error(500, "Open git-diff-tree failed"); @difftree = map { chomp; $_ } <$fd>; close $fd or die_error(404, "Reading git-diff-tree failed"); @difftree or die_error(404, "Blob diff not found"); } elsif (defined $hash && $hash =~ /[0-9a-fA-F]{40}/) { # try to find filename from $hash # read filtered raw output open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, $hash_parent_base, $hash_base, "--" or die_error(500, "Open git-diff-tree failed"); @difftree = # ':100644 100644 03b21826... 3b93d5e7... M ls-files.c' # $hash == to_id grep { /^:[0-7]{6} [0-7]{6} [0-9a-fA-F]{40} $hash/ } map { chomp; $_ } <$fd>; close $fd or die_error(404, "Reading git-diff-tree failed"); @difftree or die_error(404, "Blob diff not found"); } else { die_error(400, "Missing one of the blob diff parameters"); } if (@difftree > 1) { die_error(400, "Ambiguous blob diff specification"); } %diffinfo = parse_difftree_raw_line($difftree[0]); $file_parent ||= $diffinfo{'from_file'} || $file_name; $file_name ||= $diffinfo{'to_file'}; $hash_parent ||= $diffinfo{'from_id'}; $hash ||= $diffinfo{'to_id'}; # non-textual hash id's can be cached if ($hash_base =~ m/^[0-9a-fA-F]{40}$/ && $hash_parent_base =~ m/^[0-9a-fA-F]{40}$/) { $expires = '+1d'; } # open patch output open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, '-p', ($format eq 'html' ? "--full-index" : ()), $hash_parent_base, $hash_base, "--", (defined $file_parent ? $file_parent : ()), $file_name or die_error(500, "Open git-diff-tree failed"); } # old/legacy style URI -- not generated anymore since 1.4.3. if (!%diffinfo) { die_error('404 Not Found', "Missing one of the blob diff parameters") } # header if ($format eq 'html') { my $formats_nav = $cgi->a({-href => href(action=>"blobdiff_plain", -replay=>1)}, "raw"); git_header_html(undef, $expires); if (defined $hash_base && (my %co = parse_commit($hash_base))) { git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav); git_print_header_div('commit', esc_html($co{'title'}), $hash_base); } else { print "

    $formats_nav
    \n"; print "
    $hash vs $hash_parent
    \n"; } if (defined $file_name) { git_print_page_path($file_name, "blob", $hash_base); } else { print "
    \n"; } } elsif ($format eq 'plain') { print $cgi->header( -type => 'text/plain', -charset => 'utf-8', -expires => $expires, -content_disposition => 'inline; filename="' . "$file_name" . '.patch"'); print "X-Git-Url: " . $cgi->self_url() . "\n\n"; } else { die_error(400, "Unknown blobdiff format"); } # patch if ($format eq 'html') { print "
    \n"; git_patchset_body($fd, [ \%diffinfo ], $hash_base, $hash_parent_base); close $fd; print "
    \n"; # class="page_body" git_footer_html(); } else { while (my $line = <$fd>) { $line =~ s!a/($hash|$hash_parent)!'a/'.esc_path($diffinfo{'from_file'})!eg; $line =~ s!b/($hash|$hash_parent)!'b/'.esc_path($diffinfo{'to_file'})!eg; print $line; last if $line =~ m!^\+\+\+!; } local $/ = undef; print <$fd>; close $fd; } } sub git_blobdiff_plain { git_blobdiff('plain'); } sub git_commitdiff { my %params = @_; my $format = $params{-format} || 'html'; my ($patch_max) = gitweb_get_feature('patches'); if ($format eq 'patch') { die_error(403, "Patch view not allowed") unless $patch_max; } $hash ||= $hash_base || "HEAD"; my %co = parse_commit($hash) or die_error(404, "Unknown commit object"); # choose format for commitdiff for merge if (! defined $hash_parent && @{$co{'parents'}} > 1) { $hash_parent = '--cc'; } # we need to prepare $formats_nav before almost any parameter munging my $formats_nav; if ($format eq 'html') { $formats_nav = $cgi->a({-href => href(action=>"commitdiff_plain", -replay=>1)}, "raw"); if ($patch_max && @{$co{'parents'}} <= 1) { $formats_nav .= " | " . $cgi->a({-href => href(action=>"patch", -replay=>1)}, "patch"); } if (defined $hash_parent && $hash_parent ne '-c' && $hash_parent ne '--cc') { # commitdiff with two commits given my $hash_parent_short = $hash_parent; if ($hash_parent =~ m/^[0-9a-fA-F]{40}$/) { $hash_parent_short = substr($hash_parent, 0, 7); } $formats_nav .= ' (from'; for (my $i = 0; $i < @{$co{'parents'}}; $i++) { if ($co{'parents'}[$i] eq $hash_parent) { $formats_nav .= ' parent ' . ($i+1); last; } } $formats_nav .= ': ' . $cgi->a({-href => href(action=>"commitdiff", hash=>$hash_parent)}, esc_html($hash_parent_short)) . ')'; } elsif (!$co{'parent'}) { # --root commitdiff $formats_nav .= ' (initial)'; } elsif (scalar @{$co{'parents'}} == 1) { # single parent commit $formats_nav .= ' (parent: ' . $cgi->a({-href => href(action=>"commitdiff", hash=>$co{'parent'})}, esc_html(substr($co{'parent'}, 0, 7))) . ')'; } else { # merge commit if ($hash_parent eq '--cc') { $formats_nav .= ' | ' . $cgi->a({-href => href(action=>"commitdiff", hash=>$hash, hash_parent=>'-c')}, 'combined'); } else { # $hash_parent eq '-c' $formats_nav .= ' | ' . $cgi->a({-href => href(action=>"commitdiff", hash=>$hash, hash_parent=>'--cc')}, 'compact'); } $formats_nav .= ' (merge: ' . join(' ', map { $cgi->a({-href => href(action=>"commitdiff", hash=>$_)}, esc_html(substr($_, 0, 7))); } @{$co{'parents'}} ) . ')'; } } my $hash_parent_param = $hash_parent; if (!defined $hash_parent_param) { # --cc for multiple parents, --root for parentless $hash_parent_param = @{$co{'parents'}} > 1 ? '--cc' : $co{'parent'} || '--root'; } # read commitdiff my $fd; my @difftree; if ($format eq 'html') { open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, "--no-commit-id", "--patch-with-raw", "--full-index", $hash_parent_param, $hash, "--" or die_error(500, "Open git-diff-tree failed"); while (my $line = <$fd>) { chomp $line; # empty line ends raw part of diff-tree output last unless $line; push @difftree, scalar parse_difftree_raw_line($line); } } elsif ($format eq 'plain') { open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, '-p', $hash_parent_param, $hash, "--" or die_error(500, "Open git-diff-tree failed"); } elsif ($format eq 'patch') { # For commit ranges, we limit the output to the number of # patches specified in the 'patches' feature. # For single commits, we limit the output to a single patch, # diverging from the git-format-patch default. my @commit_spec = (); if ($hash_parent) { if ($patch_max > 0) { push @commit_spec, "-$patch_max"; } push @commit_spec, '-n', "$hash_parent..$hash"; } else { if ($params{-single}) { push @commit_spec, '-1'; } else { if ($patch_max > 0) { push @commit_spec, "-$patch_max"; } push @commit_spec, "-n"; } push @commit_spec, '--root', $hash; } open $fd, "-|", git_cmd(), "format-patch", '--encoding=utf8', '--stdout', @commit_spec or die_error(500, "Open git-format-patch failed"); } else { die_error(400, "Unknown commitdiff format"); } # non-textual hash id's can be cached my $expires; if ($hash =~ m/^[0-9a-fA-F]{40}$/) { $expires = "+1d"; } # write commit message if ($format eq 'html') { my $refs = git_get_references(); my $ref = format_ref_marker($refs, $co{'id'}); git_header_html(undef, $expires); git_print_page_nav('commitdiff','', $hash,$co{'tree'},$hash, $formats_nav); git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash); print "
    \n" . "\n"; git_print_authorship_rows(\%co); print "
    ". "
    \n"; print "
    \n"; if (@{$co{'comment'}} > 1) { print "
    \n"; git_print_log($co{'comment'}, -final_empty_line=> 1, -remove_title => 1); print "
    \n"; # class="log" } } elsif ($format eq 'plain') { my $refs = git_get_references("tags"); my $tagname = git_get_rev_name_tags($hash); my $filename = basename($project) . "-$hash.patch"; print $cgi->header( -type => 'text/plain', -charset => 'utf-8', -expires => $expires, -content_disposition => 'inline; filename="' . "$filename" . '"'); my %ad = parse_date($co{'author_epoch'}, $co{'author_tz'}); print "From: " . to_utf8($co{'author'}) . "\n"; print "Date: $ad{'rfc2822'} ($ad{'tz_local'})\n"; print "Subject: " . to_utf8($co{'title'}) . "\n"; print "X-Git-Tag: $tagname\n" if $tagname; print "X-Git-Url: " . $cgi->self_url() . "\n\n"; foreach my $line (@{$co{'comment'}}) { print to_utf8($line) . "\n"; } print "---\n\n"; } elsif ($format eq 'patch') { my $filename = basename($project) . "-$hash.patch"; print $cgi->header( -type => 'text/plain', -charset => 'utf-8', -expires => $expires, -content_disposition => 'inline; filename="' . "$filename" . '"'); } # write patch if ($format eq 'html') { my $use_parents = !defined $hash_parent || $hash_parent eq '-c' || $hash_parent eq '--cc'; git_difftree_body(\@difftree, $hash, $use_parents ? @{$co{'parents'}} : $hash_parent); print "
    \n"; git_patchset_body($fd, \@difftree, $hash, $use_parents ? @{$co{'parents'}} : $hash_parent); close $fd; print "
    \n"; # class="page_body" git_footer_html(); } elsif ($format eq 'plain') { local $/ = undef; print <$fd>; close $fd or print "Reading git-diff-tree failed\n"; } elsif ($format eq 'patch') { local $/ = undef; print <$fd>; close $fd or print "Reading git-format-patch failed\n"; } } sub git_commitdiff_plain { git_commitdiff(-format => 'plain'); } # format-patch-style patches sub git_patch { git_commitdiff(-format => 'patch', -single => 1); } sub git_patches { git_commitdiff(-format => 'patch'); } sub git_history { git_log_generic('history', \&git_history_body, $hash_base, $hash_parent_base, $file_name, $hash); } sub git_search { gitweb_check_feature('search') or die_error(403, "Search is disabled"); if (!defined $searchtext) { die_error(400, "Text field is empty"); } if (!defined $hash) { $hash = git_get_head_hash($project); } my %co = parse_commit($hash); if (!%co) { die_error(404, "Unknown commit object"); } if (!defined $page) { $page = 0; } $searchtype ||= 'commit'; if ($searchtype eq 'pickaxe') { # pickaxe may take all resources of your box and run for several minutes # with every query - so decide by yourself how public you make this feature gitweb_check_feature('pickaxe') or die_error(403, "Pickaxe is disabled"); } if ($searchtype eq 'grep') { gitweb_check_feature('grep') or die_error(403, "Grep is disabled"); } git_header_html(); if ($searchtype eq 'commit' or $searchtype eq 'author' or $searchtype eq 'committer') { my $greptype; if ($searchtype eq 'commit') { $greptype = "--grep="; } elsif ($searchtype eq 'author') { $greptype = "--author="; } elsif ($searchtype eq 'committer') { $greptype = "--committer="; } $greptype .= $searchtext; my @commitlist = parse_commits($hash, 101, (100 * $page), undef, $greptype, '--regexp-ignore-case', $search_use_regexp ? '--extended-regexp' : '--fixed-strings'); my $paging_nav = ''; if ($page > 0) { $paging_nav .= $cgi->a({-href => href(action=>"search", hash=>$hash, searchtext=>$searchtext, searchtype=>$searchtype)}, "first"); $paging_nav .= " ⋅ " . $cgi->a({-href => href(-replay=>1, page=>$page-1), -accesskey => "p", -title => "Alt-p"}, "prev"); } else { $paging_nav .= "first"; $paging_nav .= " ⋅ prev"; } my $next_link = ''; if ($#commitlist >= 100) { $next_link = $cgi->a({-href => href(-replay=>1, page=>$page+1), -accesskey => "n", -title => "Alt-n"}, "next"); $paging_nav .= " ⋅ $next_link"; } else { $paging_nav .= " ⋅ next"; } if ($#commitlist >= 100) { } git_print_page_nav('','', $hash,$co{'tree'},$hash, $paging_nav); git_print_header_div('commit', esc_html($co{'title'}), $hash); git_search_grep_body(\@commitlist, 0, 99, $next_link); } if ($searchtype eq 'pickaxe') { git_print_page_nav('','', $hash,$co{'tree'},$hash); git_print_header_div('commit', esc_html($co{'title'}), $hash); print "\n"; my $alternate = 1; local $/ = "\n"; open my $fd, '-|', git_cmd(), '--no-pager', 'log', @diff_opts, '--pretty=format:%H', '--no-abbrev', '--raw', "-S$searchtext", ($search_use_regexp ? '--pickaxe-regex' : ()); undef %co; my @files; while (my $line = <$fd>) { chomp $line; next unless $line; my %set = parse_difftree_raw_line($line); if (defined $set{'commit'}) { # finish previous commit if (%co) { print "\n" . "\n" . "\n"; } if ($alternate) { print "\n"; } else { print "\n"; } $alternate ^= 1; %co = parse_commit($set{'commit'}); my $author = chop_and_escape_str($co{'author_name'}, 15, 5); print "\n" . "\n" . "\n" . "\n" . "\n"; } print "
    " . $cgi->a({-href => href(action=>"commit", hash=>$co{'id'})}, "commit") . " | " . $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'}, hash_base=>$co{'id'})}, "tree"); print "
    $co{'age_string_date'}$author" . $cgi->a({-href => href(action=>"commit", hash=>$co{'id'}), -class => "list subject"}, chop_and_escape_str($co{'title'}, 50) . "
    "); } elsif (defined $set{'to_id'}) { next if ($set{'to_id'} =~ m/^0{40}$/); print $cgi->a({-href => href(action=>"blob", hash_base=>$co{'id'}, hash=>$set{'to_id'}, file_name=>$set{'to_file'}), -class => "list"}, "" . esc_path($set{'file'}) . "") . "
    \n"; } } close $fd; # finish last commit (warning: repetition!) if (%co) { print "
    " . $cgi->a({-href => href(action=>"commit", hash=>$co{'id'})}, "commit") . " | " . $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'}, hash_base=>$co{'id'})}, "tree"); print "
    \n"; } if ($searchtype eq 'grep') { git_print_page_nav('','', $hash,$co{'tree'},$hash); git_print_header_div('commit', esc_html($co{'title'}), $hash); print "\n"; my $alternate = 1; my $matches = 0; local $/ = "\n"; open my $fd, "-|", git_cmd(), 'grep', '-n', $search_use_regexp ? ('-E', '-i') : '-F', $searchtext, $co{'tree'}; my $lastfile = ''; while (my $line = <$fd>) { chomp $line; my ($file, $lno, $ltext, $binary); last if ($matches++ > 1000); if ($line =~ /^Binary file (.+) matches$/) { $file = $1; $binary = 1; } else { (undef, $file, $lno, $ltext) = split(/:/, $line, 4); } if ($file ne $lastfile) { $lastfile and print "\n"; if ($alternate++) { print "\n"; } else { print "\n"; } print "\n"; if ($matches > 1000) { print "
    Too many matches, listing trimmed
    \n"; } } else { print "
    No matches found
    \n"; } close $fd; print "
    ". $cgi->a({-href => href(action=>"blob", hash=>$co{'hash'}, file_name=>"$file"), -class => "list"}, esc_path($file)); print "\n"; $lastfile = $file; } if ($binary) { print "
    Binary file
    \n"; } else { $ltext = untabify($ltext); if ($ltext =~ m/^(.*)($search_regexp)(.*)$/i) { $ltext = esc_html($1, -nbsp=>1); $ltext .= ''; $ltext .= esc_html($2, -nbsp=>1); $ltext .= ''; $ltext .= esc_html($3, -nbsp=>1); } else { $ltext = esc_html($ltext, -nbsp=>1); } print "
    " . $cgi->a({-href => href(action=>"blob", hash=>$co{'hash'}, file_name=>"$file").'#l'.$lno, -class => "linenr"}, sprintf('%4i', $lno)) . ' ' . $ltext . "
    \n"; } } if ($lastfile) { print "
    \n"; } git_footer_html(); } sub git_search_help { git_header_html(); git_print_page_nav('','', $hash,$hash,$hash); print <Pattern is by default a normal string that is matched precisely (but without regard to case, except in the case of pickaxe). However, when you check the re checkbox, the pattern entered is recognized as the POSIX extended regular expression (also case insensitive).

    commit
    The commit messages and authorship information will be scanned for the given pattern.
    EOT my $have_grep = gitweb_check_feature('grep'); if ($have_grep) { print <grep
    All files in the currently selected tree (HEAD unless you are explicitly browsing a different one) are searched for the given pattern. On large trees, this search can take a while and put some strain on the server, so please use it with some consideration. Note that due to git-grep peculiarity, currently if regexp mode is turned off, the matches are case-sensitive.
    EOT } print <author
    Name and e-mail of the change author and date of birth of the patch will be scanned for the given pattern.
    committer
    Name and e-mail of the committer and date of commit will be scanned for the given pattern.
    EOT my $have_pickaxe = gitweb_check_feature('pickaxe'); if ($have_pickaxe) { print <pickaxe
    All commits that caused the string to appear or disappear from any file (changes that added, removed or "modified" the string) will be listed. This search can take a while and takes a lot of strain on the server, so please use it wisely. Note that since you may be interested even in changes just changing the case as well, this search is case sensitive.
    EOT } print "
    \n"; git_footer_html(); } sub git_shortlog { git_log_generic('shortlog', \&git_shortlog_body, $hash, $hash_parent); } ## ...................................................................... ## feeds (RSS, Atom; OPML) sub git_feed { my $format = shift || 'atom'; my $have_blame = gitweb_check_feature('blame'); # Atom: http://www.atomenabled.org/developers/syndication/ # RSS: http://www.notestips.com/80256B3A007F2692/1/NAMO5P9UPQ if ($format ne 'rss' && $format ne 'atom') { die_error(400, "Unknown web feed format"); } # log/feed of current (HEAD) branch, log of given branch, history of file/directory my $head = $hash || 'HEAD'; my @commitlist = parse_commits($head, 150, 0, $file_name); my %latest_commit; my %latest_date; my $content_type = "application/$format+xml"; if (defined $cgi->http('HTTP_ACCEPT') && $cgi->Accept('text/xml') > $cgi->Accept($content_type)) { # browser (feed reader) prefers text/xml $content_type = 'text/xml'; } if (defined($commitlist[0])) { %latest_commit = %{$commitlist[0]}; my $latest_epoch = $latest_commit{'committer_epoch'}; %latest_date = parse_date($latest_epoch); my $if_modified = $cgi->http('IF_MODIFIED_SINCE'); if (defined $if_modified) { my $since; if (eval { require HTTP::Date; 1; }) { $since = HTTP::Date::str2time($if_modified); } elsif (eval { require Time::ParseDate; 1; }) { $since = Time::ParseDate::parsedate($if_modified, GMT => 1); } if (defined $since && $latest_epoch <= $since) { print $cgi->header( -type => $content_type, -charset => 'utf-8', -last_modified => $latest_date{'rfc2822'}, -status => '304 Not Modified'); return; } } print $cgi->header( -type => $content_type, -charset => 'utf-8', -last_modified => $latest_date{'rfc2822'}); } else { print $cgi->header( -type => $content_type, -charset => 'utf-8'); } # Optimization: skip generating the body if client asks only # for Last-Modified date. return if ($cgi->request_method() eq 'HEAD'); # header variables my $title = "$site_name - $project/$action"; my $feed_type = 'log'; if (defined $hash) { $title .= " - '$hash'"; $feed_type = 'branch log'; if (defined $file_name) { $title .= " :: $file_name"; $feed_type = 'history'; } } elsif (defined $file_name) { $title .= " - $file_name"; $feed_type = 'history'; } $title .= " $feed_type"; my $descr = git_get_project_description($project); if (defined $descr) { $descr = esc_html($descr); } else { $descr = "$project " . ($format eq 'rss' ? 'RSS' : 'Atom') . " feed"; } my $owner = git_get_project_owner($project); $owner = esc_html($owner); #header my $alt_url; if (defined $file_name) { $alt_url = href(-full=>1, action=>"history", hash=>$hash, file_name=>$file_name); } elsif (defined $hash) { $alt_url = href(-full=>1, action=>"log", hash=>$hash); } else { $alt_url = href(-full=>1, action=>"summary"); } print qq!\n!; if ($format eq 'rss') { print < XML print "$title\n" . "$alt_url\n" . "$descr\n" . "en\n" . # project owner is responsible for 'editorial' content "$owner\n"; if (defined $logo || defined $favicon) { # prefer the logo to the favicon, since RSS # doesn't allow both my $img = esc_url($logo || $favicon); print "\n" . "$img\n" . "$title\n" . "$alt_url\n" . "\n"; } if (%latest_date) { print "$latest_date{'rfc2822'}\n"; print "$latest_date{'rfc2822'}\n"; } print "gitweb v.$version/$git_version\n"; } elsif ($format eq 'atom') { print < XML print "$title\n" . "$descr\n" . '' . "\n" . '' . "\n" . "" . href(-full=>1) . "\n" . # use project owner for feed author "$owner\n"; if (defined $favicon) { print "" . esc_url($favicon) . "\n"; } if (defined $logo_url) { # not twice as wide as tall: 72 x 27 pixels print "" . esc_url($logo) . "\n"; } if (! %latest_date) { # dummy date to keep the feed valid until commits trickle in: print "1970-01-01T00:00:00Z\n"; } else { print "$latest_date{'iso-8601'}\n"; } print "gitweb\n"; } # contents for (my $i = 0; $i <= $#commitlist; $i++) { my %co = %{$commitlist[$i]}; my $commit = $co{'id'}; # we read 150, we always show 30 and the ones more recent than 48 hours if (($i >= 20) && ((time - $co{'author_epoch'}) > 48*60*60)) { last; } my %cd = parse_date($co{'author_epoch'}); # get list of changed files open my $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, $co{'parent'} || "--root", $co{'id'}, "--", (defined $file_name ? $file_name : ()) or next; my @difftree = map { chomp; $_ } <$fd>; close $fd or next; # print element (entry, item) my $co_url = href(-full=>1, action=>"commitdiff", hash=>$commit); if ($format eq 'rss') { print "\n" . "" . esc_html($co{'title'}) . "\n" . "" . esc_html($co{'author'}) . "\n" . "$cd{'rfc2822'}\n" . "$co_url\n" . "$co_url\n" . "" . esc_html($co{'title'}) . "\n" . "" . "\n" . "" . esc_html($co{'title'}) . "\n" . "$cd{'iso-8601'}\n" . "\n" . " " . esc_html($co{'author_name'}) . "\n"; if ($co{'author_email'}) { print " " . esc_html($co{'author_email'}) . "\n"; } print "\n" . # use committer for contributor "\n" . " " . esc_html($co{'committer_name'}) . "\n"; if ($co{'committer_email'}) { print " " . esc_html($co{'committer_email'}) . "\n"; } print "\n" . "$cd{'iso-8601'}\n" . "\n" . "$co_url\n" . "\n" . "
    \n"; } my $comment = $co{'comment'}; print "
    \n";
    		foreach my $line (@$comment) {
    			$line = esc_html($line);
    			print "$line\n";
    		}
    		print "
      \n"; foreach my $difftree_line (@difftree) { my %difftree = parse_difftree_raw_line($difftree_line); next if !$difftree{'from_id'}; my $file = $difftree{'file'} || $difftree{'to_file'}; print "
    • " . "[" . $cgi->a({-href => href(-full=>1, action=>"blobdiff", hash=>$difftree{'to_id'}, hash_parent=>$difftree{'from_id'}, hash_base=>$co{'id'}, hash_parent_base=>$co{'parent'}, file_name=>$file, file_parent=>$difftree{'from_file'}), -title => "diff"}, 'D'); if ($have_blame) { print $cgi->a({-href => href(-full=>1, action=>"blame", file_name=>$file, hash_base=>$commit), -title => "blame"}, 'B'); } # if this is not a feed of a file history if (!defined $file_name || $file_name ne $file) { print $cgi->a({-href => href(-full=>1, action=>"history", file_name=>$file, hash=>$commit), -title => "history"}, 'H'); } $file = esc_path($file); print "] ". "$file
    • \n"; } if ($format eq 'rss') { print "
    ]]>\n" . "\n" . "\n"; } elsif ($format eq 'atom') { print "\n
    \n" . "
    \n" . "\n"; } } # end of feed if ($format eq 'rss') { print "
    \n\n"; } elsif ($format eq 'atom') { print "\n"; } } sub git_rss { git_feed('rss'); } sub git_atom { git_feed('atom'); } sub git_opml { my @list = git_get_projects_list(); print $cgi->header( -type => 'text/xml', -charset => 'utf-8', -content_disposition => 'inline; filename="opml.xml"'); print < $site_name OPML Export XML foreach my $pr (@list) { my %proj = %$pr; my $head = git_get_head_hash($proj{'path'}); if (!defined $head) { next; } $git_dir = "$projectroot/$proj{'path'}"; my %co = parse_commit($head); if (!%co) { next; } my $path = esc_html(chop_str($proj{'path'}, 25, 5)); my $rss = href('project' => $proj{'path'}, 'action' => 'rss', -full => 1); my $html = href('project' => $proj{'path'}, 'action' => 'summary', -full => 1); print "\n"; } print < XML } genometools-1.5.1/www/genometools.org/htdocs/cgi-bin/gitweb.css000066400000000000000000000202731211610345200246040ustar00rootroot00000000000000body { font-family: sans-serif; font-size: small; border: solid #d9d8d1; border-width: 1px; margin: 10px; background-color: #ffffff; color: #000000; } a { color: #0000cc; } a:hover, a:visited, a:active { color: #880000; } span.cntrl { border: dashed #aaaaaa; border-width: 1px; padding: 0px 2px 0px 2px; margin: 0px 2px 0px 2px; } img.logo { float: right; border-width: 0px; } img.avatar { vertical-align: middle; } a.list img.avatar { border-style: none; } div.page_header { height: 25px; padding: 8px; font-size: 150%; font-weight: bold; background-color: #d9d8d1; } div.page_header a:visited, a.header { color: #0000cc; } div.page_header a:hover { color: #880000; } div.page_nav { padding: 8px; } div.page_nav a:visited { color: #0000cc; } div.page_path { padding: 8px; font-weight: bold; border: solid #d9d8d1; border-width: 0px 0px 1px; } div.page_footer { height: 17px; padding: 4px 8px; background-color: #d9d8d1; } div.page_footer_text { float: left; color: #555555; font-style: italic; } div#generating_info { margin: 4px; font-size: smaller; text-align: center; color: #505050; } div.page_body { padding: 8px; font-family: monospace; } div.title, a.title { display: block; padding: 6px 8px; font-weight: bold; background-color: #edece6; text-decoration: none; color: #000000; } div.readme { padding: 8px; } a.title:hover { background-color: #d9d8d1; } div.title_text { padding: 6px 0px; border: solid #d9d8d1; border-width: 0px 0px 1px; font-family: monospace; } div.log_body { padding: 8px 8px 8px 150px; } span.age { position: relative; float: left; width: 142px; font-style: italic; } span.signoff { color: #888888; } div.log_link { padding: 0px 8px; font-size: 70%; font-family: sans-serif; font-style: normal; position: relative; float: left; width: 136px; } div.list_head { padding: 6px 8px 4px; border: solid #d9d8d1; border-width: 1px 0px 0px; font-style: italic; } .author_date, .author { font-style: italic; } div.author_date { padding: 8px; border: solid #d9d8d1; border-width: 0px 0px 1px 0px; } a.list { text-decoration: none; color: #000000; } a.subject, a.name { font-weight: bold; } table.tags a.subject { font-weight: normal; } a.list:hover { text-decoration: underline; color: #880000; } a.text { text-decoration: none; color: #0000cc; } a.text:visited { text-decoration: none; color: #880000; } a.text:hover { text-decoration: underline; color: #880000; } table { padding: 8px 4px; border-spacing: 0; } table.diff_tree { font-family: monospace; } table.combined.diff_tree th { text-align: center; } table.combined.diff_tree td { padding-right: 24px; } table.combined.diff_tree th.link, table.combined.diff_tree td.link { padding: 0px 2px; } table.combined.diff_tree td.nochange a { color: #6666ff; } table.combined.diff_tree td.nochange a:hover, table.combined.diff_tree td.nochange a:visited { color: #d06666; } table.blame { border-collapse: collapse; } table.blame td { padding: 0px 5px; font-size: 100%; vertical-align: top; } th { padding: 2px 5px; font-size: 100%; text-align: left; } /* do not change row style on hover for 'blame' view */ tr.light, table.blame .light:hover { background-color: #ffffff; } tr.dark, table.blame .dark:hover { background-color: #f6f6f0; } /* currently both use the same, but it can change */ tr.light:hover, tr.dark:hover { background-color: #edece6; } /* boundary commits in 'blame' view */ /* and commits without "previous" */ tr.boundary td.sha1, tr.no-previous td.linenr { font-weight: bold; } /* for 'blame_incremental', during processing */ tr.color1 { background-color: #f6fff6; } tr.color2 { background-color: #f6f6ff; } tr.color3 { background-color: #fff6f6; } td { padding: 2px 5px; font-size: 100%; vertical-align: top; } td.link, td.selflink { padding: 2px 5px; font-family: sans-serif; font-size: 70%; } td.selflink { padding-right: 0px; } td.sha1 { font-family: monospace; } .error { color: red; background-color: yellow; } td.current_head { text-decoration: underline; } table.diff_tree span.file_status.new { color: #008000; } table.diff_tree span.file_status.deleted { color: #c00000; } table.diff_tree span.file_status.moved, table.diff_tree span.file_status.mode_chnge { color: #777777; } table.diff_tree span.file_status.copied { color: #70a070; } /* noage: "No commits" */ table.project_list td.noage { color: #808080; font-style: italic; } /* age2: 60*60*24*2 <= age */ table.project_list td.age2, table.blame td.age2 { font-style: italic; } /* age1: 60*60*2 <= age < 60*60*24*2 */ table.project_list td.age1 { color: #009900; font-style: italic; } table.blame td.age1 { color: #009900; background: transparent; } /* age0: age < 60*60*2 */ table.project_list td.age0 { color: #009900; font-style: italic; font-weight: bold; } table.blame td.age0 { color: #009900; background: transparent; font-weight: bold; } td.pre, div.pre, div.diff { font-family: monospace; font-size: 12px; white-space: pre; } td.mode { font-family: monospace; } /* progress of blame_interactive */ div#progress_bar { height: 2px; margin-bottom: -2px; background-color: #d8d9d0; } div#progress_info { float: right; text-align: right; } /* format of (optional) objects size in 'tree' view */ td.size { font-family: monospace; text-align: right; } /* styling of diffs (patchsets): commitdiff and blobdiff views */ div.diff.header, div.diff.extended_header { white-space: normal; } div.diff.header { font-weight: bold; background-color: #edece6; margin-top: 4px; padding: 4px 0px 2px 0px; border: solid #d9d8d1; border-width: 1px 0px 1px 0px; } div.diff.header a.path { text-decoration: underline; } div.diff.extended_header, div.diff.extended_header a.path, div.diff.extended_header a.hash { color: #777777; } div.diff.extended_header .info { color: #b0b0b0; } div.diff.extended_header { background-color: #f6f5ee; padding: 2px 0px 2px 0px; } div.diff a.list, div.diff a.path, div.diff a.hash { text-decoration: none; } div.diff a.list:hover, div.diff a.path:hover, div.diff a.hash:hover { text-decoration: underline; } div.diff.to_file a.path, div.diff.to_file { color: #007000; } div.diff.add { color: #008800; } div.diff.from_file a.path, div.diff.from_file { color: #aa0000; } div.diff.rem { color: #cc0000; } div.diff.chunk_header a, div.diff.chunk_header { color: #990099; } div.diff.chunk_header { border: dotted #ffe0ff; border-width: 1px 0px 0px 0px; margin-top: 2px; } div.diff.chunk_header span.chunk_info { background-color: #ffeeff; } div.diff.chunk_header span.section { color: #aa22aa; } div.diff.incomplete { color: #cccccc; } div.diff.nodifferences { font-weight: bold; color: #600000; } div.index_include { border: solid #d9d8d1; border-width: 0px 0px 1px; padding: 12px 8px; } div.search { font-size: 100%; font-weight: normal; margin: 4px 8px; float: right; top: 56px; right: 12px } p.projsearch { text-align: center; } td.linenr { text-align: right; } a.linenr { color: #999999; text-decoration: none } a.rss_logo { float: right; padding: 3px 0px; width: 35px; line-height: 10px; border: 1px solid; border-color: #fcc7a5 #7d3302 #3e1a01 #ff954e; color: #ffffff; background-color: #ff6600; font-weight: bold; font-family: sans-serif; font-size: 70%; text-align: center; text-decoration: none; } a.rss_logo:hover { background-color: #ee5500; } a.rss_logo.generic { background-color: #ff8800; } a.rss_logo.generic:hover { background-color: #ee7700; } span.refs span { padding: 0px 4px; font-size: 70%; font-weight: normal; border: 1px solid; background-color: #ffaaff; border-color: #ffccff #ff00ee #ff00ee #ffccff; } span.refs span a { text-decoration: none; color: inherit; } span.refs span a:hover { text-decoration: underline; } span.refs span.indirect { font-style: italic; } span.refs span.ref { background-color: #aaaaff; border-color: #ccccff #0033cc #0033cc #ccccff; } span.refs span.tag { background-color: #ffffaa; border-color: #ffffcc #ffee00 #ffee00 #ffffcc; } span.refs span.head { background-color: #aaffaa; border-color: #ccffcc #00cc33 #00cc33 #ccffcc; } span.atnight { color: #cc0000; } span.match { color: #e00000; } div.binary { font-style: italic; } genometools-1.5.1/www/genometools.org/htdocs/cgi-bin/gitweb.js000066400000000000000000000567641211610345200244460ustar00rootroot00000000000000// Copyright (C) 2007, Fredrik Kuivinen // 2007, Petr Baudis // 2008-2009, Jakub Narebski /** * @fileOverview JavaScript code for gitweb (git web interface). * @license GPLv2 or later */ /* ============================================================ */ /* functions for generic gitweb actions and views */ /** * used to check if link has 'js' query parameter already (at end), * and other reasons to not add 'js=1' param at the end of link * @constant */ var jsExceptionsRe = /[;?]js=[01]$/; /** * Add '?js=1' or ';js=1' to the end of every link in the document * that doesn't have 'js' query parameter set already. * * Links with 'js=1' lead to JavaScript version of given action, if it * exists (currently there is only 'blame_incremental' for 'blame') * * @globals jsExceptionsRe */ function fixLinks() { var allLinks = document.getElementsByTagName("a") || document.links; for (var i = 0, len = allLinks.length; i < len; i++) { var link = allLinks[i]; if (!jsExceptionsRe.test(link)) { // =~ /[;?]js=[01]$/; link.href += (link.href.indexOf('?') === -1 ? '?' : ';') + 'js=1'; } } } /* ============================================================ */ /* * This code uses DOM methods instead of (nonstandard) innerHTML * to modify page. * * innerHTML is non-standard IE extension, though supported by most * browsers; however Firefox up to version 1.5 didn't implement it in * a strict mode (application/xml+xhtml mimetype). * * Also my simple benchmarks show that using elem.firstChild.data = * 'content' is slightly faster than elem.innerHTML = 'content'. It * is however more fragile (text element fragment must exists), and * less feature-rich (we cannot add HTML). * * Note that DOM 2 HTML is preferred over generic DOM 2 Core; the * equivalent using DOM 2 Core is usually shown in comments. */ /* ============================================================ */ /* generic utility functions */ /** * pad number N with nonbreakable spaces on the left, to WIDTH characters * example: padLeftStr(12, 3, '\u00A0') == '\u00A012' * ('\u00A0' is nonbreakable space) * * @param {Number|String} input: number to pad * @param {Number} width: visible width of output * @param {String} str: string to prefix to string, e.g. '\u00A0' * @returns {String} INPUT prefixed with (WIDTH - INPUT.length) x STR */ function padLeftStr(input, width, str) { var prefix = ''; width -= input.toString().length; while (width > 0) { prefix += str; width--; } return prefix + input; } /** * Pad INPUT on the left to SIZE width, using given padding character CH, * for example padLeft('a', 3, '_') is '__a'. * * @param {String} input: input value converted to string. * @param {Number} width: desired length of output. * @param {String} ch: single character to prefix to string. * * @returns {String} Modified string, at least SIZE length. */ function padLeft(input, width, ch) { var s = input + ""; while (s.length < width) { s = ch + s; } return s; } /** * Create XMLHttpRequest object in cross-browser way * @returns XMLHttpRequest object, or null */ function createRequestObject() { try { return new XMLHttpRequest(); } catch (e) {} try { return window.createRequest(); } catch (e) {} try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {} try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} return null; } /* ============================================================ */ /* utility/helper functions (and variables) */ var xhr; // XMLHttpRequest object var projectUrl; // partial query + separator ('?' or ';') // 'commits' is an associative map. It maps SHA1s to Commit objects. var commits = {}; /** * constructor for Commit objects, used in 'blame' * @class Represents a blamed commit * @param {String} sha1: SHA-1 identifier of a commit */ function Commit(sha1) { if (this instanceof Commit) { this.sha1 = sha1; this.nprevious = 0; /* number of 'previous', effective parents */ } else { return new Commit(sha1); } } /* ............................................................ */ /* progress info, timing, error reporting */ var blamedLines = 0; var totalLines = '???'; var div_progress_bar; var div_progress_info; /** * Detects how many lines does a blamed file have, * This information is used in progress info * * @returns {Number|String} Number of lines in file, or string '...' */ function countLines() { var table = document.getElementById('blame_table') || document.getElementsByTagName('table')[0]; if (table) { return table.getElementsByTagName('tr').length - 1; // for header } else { return '...'; } } /** * update progress info and length (width) of progress bar * * @globals div_progress_info, div_progress_bar, blamedLines, totalLines */ function updateProgressInfo() { if (!div_progress_info) { div_progress_info = document.getElementById('progress_info'); } if (!div_progress_bar) { div_progress_bar = document.getElementById('progress_bar'); } if (!div_progress_info && !div_progress_bar) { return; } var percentage = Math.floor(100.0*blamedLines/totalLines); if (div_progress_info) { div_progress_info.firstChild.data = blamedLines + ' / ' + totalLines + ' (' + padLeftStr(percentage, 3, '\u00A0') + '%)'; } if (div_progress_bar) { //div_progress_bar.setAttribute('style', 'width: '+percentage+'%;'); div_progress_bar.style.width = percentage + '%'; } } var t_interval_server = ''; var cmds_server = ''; var t0 = new Date(); /** * write how much it took to generate data, and to run script * * @globals t0, t_interval_server, cmds_server */ function writeTimeInterval() { var info_time = document.getElementById('generating_time'); if (!info_time || !t_interval_server) { return; } var t1 = new Date(); info_time.firstChild.data += ' + (' + t_interval_server + ' sec server blame_data / ' + (t1.getTime() - t0.getTime())/1000 + ' sec client JavaScript)'; var info_cmds = document.getElementById('generating_cmd'); if (!info_time || !cmds_server) { return; } info_cmds.firstChild.data += ' + ' + cmds_server; } /** * show an error message alert to user within page (in prohress info area) * @param {String} str: plain text error message (no HTML) * * @globals div_progress_info */ function errorInfo(str) { if (!div_progress_info) { div_progress_info = document.getElementById('progress_info'); } if (div_progress_info) { div_progress_info.className = 'error'; div_progress_info.firstChild.data = str; } } /* ............................................................ */ /* coloring rows during blame_data (git blame --incremental) run */ /** * used to extract N from 'colorN', where N is a number, * @constant */ var colorRe = /\bcolor([0-9]*)\b/; /** * return N if , otherwise return null * (some browsers require CSS class names to begin with letter) * * @param {HTMLElement} tr: table row element to check * @param {String} tr.className: 'class' attribute of tr element * @returns {Number|null} N if tr.className == 'colorN', otherwise null * * @globals colorRe */ function getColorNo(tr) { if (!tr) { return null; } var className = tr.className; if (className) { var match = colorRe.exec(className); if (match) { return parseInt(match[1], 10); } } return null; } var colorsFreq = [0, 0, 0]; /** * return one of given possible colors (currently least used one) * example: chooseColorNoFrom(2, 3) returns 2 or 3 * * @param {Number[]} arguments: one or more numbers * assumes that 1 <= arguments[i] <= colorsFreq.length * @returns {Number} Least used color number from arguments * @globals colorsFreq */ function chooseColorNoFrom() { // choose the color which is least used var colorNo = arguments[0]; for (var i = 1; i < arguments.length; i++) { if (colorsFreq[arguments[i]-1] < colorsFreq[colorNo-1]) { colorNo = arguments[i]; } } colorsFreq[colorNo-1]++; return colorNo; } /** * given two neigbour elements, find color which would be different * from color of both of neighbours; used to 3-color blame table * * @param {HTMLElement} tr_prev * @param {HTMLElement} tr_next * @returns {Number} color number N such that * colorN != tr_prev.className && colorN != tr_next.className */ function findColorNo(tr_prev, tr_next) { var color_prev = getColorNo(tr_prev); var color_next = getColorNo(tr_next); // neither of neighbours has color set // THEN we can use any of 3 possible colors if (!color_prev && !color_next) { return chooseColorNoFrom(1,2,3); } // either both neighbours have the same color, // or only one of neighbours have color set // THEN we can use any color except given var color; if (color_prev === color_next) { color = color_prev; // = color_next; } else if (!color_prev) { color = color_next; } else if (!color_next) { color = color_prev; } if (color) { return chooseColorNoFrom((color % 3) + 1, ((color+1) % 3) + 1); } // neighbours have different colors // THEN there is only one color left return (3 - ((color_prev + color_next) % 3)); } /* ............................................................ */ /* coloring rows like 'blame' after 'blame_data' finishes */ /** * returns true if given row element (tr) is first in commit group * to be used only after 'blame_data' finishes (after processing) * * @param {HTMLElement} tr: table row * @returns {Boolean} true if TR is first in commit group */ function isStartOfGroup(tr) { return tr.firstChild.className === 'sha1'; } /** * change colors to use zebra coloring (2 colors) instead of 3 colors * concatenate neighbour commit groups belonging to the same commit * * @globals colorRe */ function fixColorsAndGroups() { var colorClasses = ['light', 'dark']; var linenum = 1; var tr, prev_group; var colorClass = 0; var table = document.getElementById('blame_table') || document.getElementsByTagName('table')[0]; while ((tr = document.getElementById('l'+linenum))) { // index origin is 0, which is table header; start from 1 //while ((tr = table.rows[linenum])) { // <- it is slower if (isStartOfGroup(tr, linenum, document)) { if (prev_group && prev_group.firstChild.firstChild.href === tr.firstChild.firstChild.href) { // we have to concatenate groups var prev_rows = prev_group.firstChild.rowSpan || 1; var curr_rows = tr.firstChild.rowSpan || 1; prev_group.firstChild.rowSpan = prev_rows + curr_rows; //tr.removeChild(tr.firstChild); tr.deleteCell(0); // DOM2 HTML way } else { colorClass = (colorClass + 1) % 2; prev_group = tr; } } var tr_class = tr.className; tr.className = tr_class.replace(colorRe, colorClasses[colorClass]); linenum++; } } /* ............................................................ */ /* time and data */ /** * used to extract hours and minutes from timezone info, e.g '-0900' * @constant */ var tzRe = /^([+-][0-9][0-9])([0-9][0-9])$/; /** * return date in local time formatted in iso-8601 like format * 'yyyy-mm-dd HH:MM:SS +/-ZZZZ' e.g. '2005-08-07 21:49:46 +0200' * * @param {Number} epoch: seconds since '00:00:00 1970-01-01 UTC' * @param {String} timezoneInfo: numeric timezone '(+|-)HHMM' * @returns {String} date in local time in iso-8601 like format * * @globals tzRe */ function formatDateISOLocal(epoch, timezoneInfo) { var match = tzRe.exec(timezoneInfo); // date corrected by timezone var localDate = new Date(1000 * (epoch + (parseInt(match[1],10)*3600 + parseInt(match[2],10)*60))); var localDateStr = // e.g. '2005-08-07' localDate.getUTCFullYear() + '-' + padLeft(localDate.getUTCMonth()+1, 2, '0') + '-' + padLeft(localDate.getUTCDate(), 2, '0'); var localTimeStr = // e.g. '21:49:46' padLeft(localDate.getUTCHours(), 2, '0') + ':' + padLeft(localDate.getUTCMinutes(), 2, '0') + ':' + padLeft(localDate.getUTCSeconds(), 2, '0'); return localDateStr + ' ' + localTimeStr + ' ' + timezoneInfo; } /* ............................................................ */ /* unquoting/unescaping filenames */ /**#@+ * @constant */ var escCodeRe = /\\([^0-7]|[0-7]{1,3})/g; var octEscRe = /^[0-7]{1,3}$/; var maybeQuotedRe = /^\"(.*)\"$/; /**#@-*/ /** * unquote maybe git-quoted filename * e.g. 'aa' -> 'aa', '"a\ta"' -> 'a a' * * @param {String} str: git-quoted string * @returns {String} Unquoted and unescaped string * * @globals escCodeRe, octEscRe, maybeQuotedRe */ function unquote(str) { function unq(seq) { var es = { // character escape codes, aka escape sequences (from C) // replacements are to some extent JavaScript specific t: "\t", // tab (HT, TAB) n: "\n", // newline (NL) r: "\r", // return (CR) f: "\f", // form feed (FF) b: "\b", // backspace (BS) a: "\x07", // alarm (bell) (BEL) e: "\x1B", // escape (ESC) v: "\v" // vertical tab (VT) }; if (seq.search(octEscRe) !== -1) { // octal char sequence return String.fromCharCode(parseInt(seq, 8)); } else if (seq in es) { // C escape sequence, aka character escape code return es[seq]; } // quoted ordinary character return seq; } var match = str.match(maybeQuotedRe); if (match) { str = match[1]; // perhaps str = eval('"'+str+'"'); would be enough? str = str.replace(escCodeRe, function (substr, p1, offset, s) { return unq(p1); }); } return str; } /* ============================================================ */ /* main part: parsing response */ /** * Function called for each blame entry, as soon as it finishes. * It updates page via DOM manipulation, adding sha1 info, etc. * * @param {Commit} commit: blamed commit * @param {Object} group: object representing group of lines, * which blame the same commit (blame entry) * * @globals blamedLines */ function handleLine(commit, group) { /* This is the structure of the HTML fragment we are working with: 123 # times (my ext3 doesn't). */ var resline = group.resline; // format date and time string only once per commit if (!commit.info) { /* e.g. 'Kay Sievers, 2005-08-07 21:49:46 +0200' */ commit.info = commit.author + ', ' + formatDateISOLocal(commit.authorTime, commit.authorTimezone); } // color depends on group of lines, not only on blamed commit var colorNo = findColorNo( document.getElementById('l'+(resline-1)), document.getElementById('l'+(resline+group.numlines)) ); // loop over lines in commit group for (var i = 0; i < group.numlines; i++, resline++) { var tr = document.getElementById('l'+resline); if (!tr) { break; } /* 123 # times (my ext3 doesn't). */ var td_sha1 = tr.firstChild; var a_sha1 = td_sha1.firstChild; var a_linenr = td_sha1.nextSibling.firstChild; /* */ var tr_class = ''; if (colorNo !== null) { tr_class = 'color'+colorNo; } if (commit.boundary) { tr_class += ' boundary'; } if (commit.nprevious === 0) { tr_class += ' no-previous'; } else if (commit.nprevious > 1) { tr_class += ' multiple-previous'; } tr.className = tr_class; /* ? */ if (i === 0) { td_sha1.title = commit.info; td_sha1.rowSpan = group.numlines; a_sha1.href = projectUrl + 'a=commit;h=' + commit.sha1; if (a_sha1.firstChild) { a_sha1.firstChild.data = commit.sha1.substr(0, 8); } else { a_sha1.appendChild( document.createTextNode(commit.sha1.substr(0, 8))); } if (group.numlines >= 2) { var fragment = document.createDocumentFragment(); var br = document.createElement("br"); var match = commit.author.match(/\b([A-Z])\B/g); if (match) { var text = document.createTextNode( match.join('')); } if (br && text) { var elem = fragment || td_sha1; elem.appendChild(br); elem.appendChild(text); if (fragment) { td_sha1.appendChild(fragment); } } } } else { //tr.removeChild(td_sha1); // DOM2 Core way tr.deleteCell(0); // DOM2 HTML way } /* 123 */ var linenr_commit = ('previous' in commit ? commit.previous : commit.sha1); var linenr_filename = ('file_parent' in commit ? commit.file_parent : commit.filename); a_linenr.href = projectUrl + 'a=blame_incremental' + ';hb=' + linenr_commit + ';f=' + encodeURIComponent(linenr_filename) + '#l' + (group.srcline + i); blamedLines++; //updateProgressInfo(); } } // ---------------------------------------------------------------------- var inProgress = false; // are we processing response /**#@+ * @constant */ var sha1Re = /^([0-9a-f]{40}) ([0-9]+) ([0-9]+) ([0-9]+)/; var infoRe = /^([a-z-]+) ?(.*)/; var endRe = /^END ?([^ ]*) ?(.*)/; /**@-*/ var curCommit = new Commit(); var curGroup = {}; var pollTimer = null; /** * Parse output from 'git blame --incremental [...]', received via * XMLHttpRequest from server (blamedataUrl), and call handleLine * (which updates page) as soon as blame entry is completed. * * @param {String[]} lines: new complete lines from blamedata server * * @globals commits, curCommit, curGroup, t_interval_server, cmds_server * @globals sha1Re, infoRe, endRe */ function processBlameLines(lines) { var match; for (var i = 0, len = lines.length; i < len; i++) { if ((match = sha1Re.exec(lines[i]))) { var sha1 = match[1]; var srcline = parseInt(match[2], 10); var resline = parseInt(match[3], 10); var numlines = parseInt(match[4], 10); var c = commits[sha1]; if (!c) { c = new Commit(sha1); commits[sha1] = c; } curCommit = c; curGroup.srcline = srcline; curGroup.resline = resline; curGroup.numlines = numlines; } else if ((match = infoRe.exec(lines[i]))) { var info = match[1]; var data = match[2]; switch (info) { case 'filename': curCommit.filename = unquote(data); // 'filename' information terminates the entry handleLine(curCommit, curGroup); updateProgressInfo(); break; case 'author': curCommit.author = data; break; case 'author-time': curCommit.authorTime = parseInt(data, 10); break; case 'author-tz': curCommit.authorTimezone = data; break; case 'previous': curCommit.nprevious++; // store only first 'previous' header if (!'previous' in curCommit) { var parts = data.split(' ', 2); curCommit.previous = parts[0]; curCommit.file_parent = unquote(parts[1]); } break; case 'boundary': curCommit.boundary = true; break; } // end switch } else if ((match = endRe.exec(lines[i]))) { t_interval_server = match[1]; cmds_server = match[2]; } else if (lines[i] !== '') { // malformed line } // end if (match) } // end for (lines) } /** * Process new data and return pointer to end of processed part * * @param {String} unprocessed: new data (from nextReadPos) * @param {Number} nextReadPos: end of last processed data * @return {Number} end of processed data (new value for nextReadPos) */ function processData(unprocessed, nextReadPos) { var lastLineEnd = unprocessed.lastIndexOf('\n'); if (lastLineEnd !== -1) { var lines = unprocessed.substring(0, lastLineEnd).split('\n'); nextReadPos += lastLineEnd + 1 /* 1 == '\n'.length */; processBlameLines(lines); } // end if return nextReadPos; } /** * Handle XMLHttpRequest errors * * @param {XMLHttpRequest} xhr: XMLHttpRequest object * * @globals pollTimer, commits, inProgress */ function handleError(xhr) { errorInfo('Server error: ' + xhr.status + ' - ' + (xhr.statusText || 'Error contacting server')); clearInterval(pollTimer); commits = {}; // free memory inProgress = false; } /** * Called after XMLHttpRequest finishes (loads) * * @param {XMLHttpRequest} xhr: XMLHttpRequest object (unused) * * @globals pollTimer, commits, inProgress */ function responseLoaded(xhr) { clearInterval(pollTimer); fixColorsAndGroups(); writeTimeInterval(); commits = {}; // free memory inProgress = false; } /** * handler for XMLHttpRequest onreadystatechange event * @see startBlame * * @globals xhr, inProgress */ function handleResponse() { /* * xhr.readyState * * Value Constant (W3C) Description * ------------------------------------------------------------------- * 0 UNSENT open() has not been called yet. * 1 OPENED send() has not been called yet. * 2 HEADERS_RECEIVED send() has been called, and headers * and status are available. * 3 LOADING Downloading; responseText holds partial data. * 4 DONE The operation is complete. */ if (xhr.readyState !== 4 && xhr.readyState !== 3) { return; } // the server returned error if (xhr.readyState === 3 && xhr.status !== 200) { return; } if (xhr.readyState === 4 && xhr.status !== 200) { handleError(xhr); return; } // In konqueror xhr.responseText is sometimes null here... if (xhr.responseText === null) { return; } // in case we were called before finished processing if (inProgress) { return; } else { inProgress = true; } // extract new whole (complete) lines, and process them while (xhr.prevDataLength !== xhr.responseText.length) { if (xhr.readyState === 4 && xhr.prevDataLength === xhr.responseText.length) { break; } xhr.prevDataLength = xhr.responseText.length; var unprocessed = xhr.responseText.substring(xhr.nextReadPos); xhr.nextReadPos = processData(unprocessed, xhr.nextReadPos); } // end while // did we finish work? if (xhr.readyState === 4 && xhr.prevDataLength === xhr.responseText.length) { responseLoaded(xhr); } inProgress = false; } // ============================================================ // ------------------------------------------------------------ /** * Incrementally update line data in blame_incremental view in gitweb. * * @param {String} blamedataUrl: URL to server script generating blame data. * @param {String} bUrl: partial URL to project, used to generate links. * * Called from 'blame_incremental' view after loading table with * file contents, a base for blame view. * * @globals xhr, t0, projectUrl, div_progress_bar, totalLines, pollTimer */ function startBlame(blamedataUrl, bUrl) { xhr = createRequestObject(); if (!xhr) { errorInfo('ERROR: XMLHttpRequest not supported'); return; } t0 = new Date(); projectUrl = bUrl + (bUrl.indexOf('?') === -1 ? '?' : ';'); if ((div_progress_bar = document.getElementById('progress_bar'))) { //div_progress_bar.setAttribute('style', 'width: 100%;'); div_progress_bar.style.cssText = 'width: 100%;'; } totalLines = countLines(); updateProgressInfo(); /* add extra properties to xhr object to help processing response */ xhr.prevDataLength = -1; // used to detect if we have new data xhr.nextReadPos = 0; // where unread part of response starts xhr.onreadystatechange = handleResponse; //xhr.onreadystatechange = function () { handleResponse(xhr); }; xhr.open('GET', blamedataUrl); xhr.setRequestHeader('Accept', 'text/plain'); xhr.send(null); // not all browsers call onreadystatechange event on each server flush // poll response using timer every second to handle this issue pollTimer = setInterval(xhr.onreadystatechange, 1000); } // end of gitweb.js genometools-1.5.1/www/genometools.org/htdocs/customtracks.html000066400000000000000000000212621211610345200247100ustar00rootroot00000000000000 The AnnotationSketch module

    Custom tracks

    There are kinds of data which may be interesting to see together with annotation renderings, but that can not be expressed – or only in a complicated way – in GFF3 format. It may even be too difficult or counterintuitive to properly represent this data as typical AnnotationSketch box graphics. For example, this may be sequence data, numerical sequence analysis results, or other kinds of data which does not fit into the simple ‘genomic feature’ scheme. For an example, see Fig. 1.

    [Example custom track]

    Figure 1: Example AnnotationSketch output with a custom track at the bottom, displaying the GC content over a window size of 200 bp.

    With custom tracks, AnnotationSketch provides a mechanism to use the internal drawing functionality to create user-defined output which can be tailored to fit this kind of data. A custom track looks just like a normal AnnotationSketch track, but is completely in control of the developer. While native AnnotationSketch primitives such as boxes can of course be used, the author of a custom track is not restricted to the layout algorithm and can draw anything anywhere (as long as it is provided by the Graphics class), taking arbitrary external data into account.

    Anatomy of a custom track class

    Simply put, custom tracks are classes which are derived from a CustomTrack base class and must implement a set of mandatory methods:

    • get_height(): Returns the amount of vertical space (in pixels or points) the custom track will occupy in the final image. Must return a numeric value.
    • get_title(): Returns a title for the custom track which is displayed at the top of the track. Note that, unlike a track identifier string e.g. produced by a track selector function, the string returned by this function is not prepended by a file name.
    • render(graphics, ypos, range, style, error): Performs the actual rendering operations. As parameters, this function receives
      • a Graphics object to draw on,
      • the vertical offset ypos of the drawing area assigned to the custom track,
      • the Range of the sequence positions for which annotations are currently displayed,
      • a Style object which can be used to obtain style information specific to this custom track, and
      • an Error object which can be used to return an error message if the custom track needs to signal a problem.
      The render() method must return 0 if drawing was successful, or a negative value if an error occurred.
    Optionally, a free() method can be implemented if the subclass needs to clean up any private space allocated by itself. These methods are then called by the rendering code in AnnotationSketch when a Diagram containing a custom track is laid out and rendered. No other constraints apply on such a class besides that these methods are implemented (in the scripting language bindings, the parent classes' constructor must be called once).

    Writing an example custom track

    Let's suppose we are not satisfied with the display of single base features, such as transposable element insertion sites or SNPs. Instead of a single line denoting the feature location, we would like to have a small triangle pointing at the location. Suppose we also do not have this data in an annotation graph, so we cannot use the built-in rendering functions. It is straightforward to write a small custom track class which does this for us.
    This tutorial uses Python code for simplicity, but the general approach is common to all supported languages.

    First, we need to define a class inheriting from CustomTrack, call the parent constructor to register the functions and set instance variables for the triangle sidelength and a dictionary containing the feature positions and a description:

    class CustomTrackInsertions(CustomTrack):
      def __init__(self, sidelength, data):
        super(CustomTrackInsertions, self).__init__()
        self.sidelength = sidelength
        self.data = data
    
    We define the height to be 20 pixels:
      def get_height(self):
        return 20
    
    As a track title, we set "Insertion site":
      def get_title(self):
        return "Insertion site"
    
    The rendering code then calculates the triangle coordinates and draws the respective lines:
      def render(self, graphics, ypos, rng, style, error):
        height = (self.sidelength*math.sqrt(3))/2
        margins = graphics.get_xmargins()
        red = Color(1, 0, 0, 0.7)
        for pos, desc in self.data.iteritems():
          drawpos = margins + (float(pos)-rng.start)/(rng.end-rng.start+1)         \
                      * (graphics.get_image_width()-2*margins)
          graphics.draw_line(drawpos-self.sidelength/2, ypos + height,             \
                             drawpos, ypos,                                        \
                             red, 1)
          graphics.draw_line(drawpos, ypos,                                        \
                             drawpos+self.sidelength/2, ypos + height,             \
                             red, 1)
          graphics.draw_line(drawpos-self.sidelength/2, ypos + height,             \
                             drawpos+self.sidelength/2, ypos + height,             \
                             red, 1)
          graphics.draw_text_centered(drawpos, ypos + height + 13, str(desc))
        return 0
    
    For a Python custom track, that's it! No more code is necessary for this very simple custom track. We can now instantiate this class and attach the instance to a Diagram object:
    ...
    diagram = Diagram.from_index(feature_index, seqid, range, style)
    ...
    ctt = CustomTrackInsertions(15, {2000:"foo", 4400:"bar", 8000:"baz"})
    diagram.add_custom_track(ctt)
    ...
    
    Running layout and drawing functions on this diagram then produces the desired image:

    [Example custom track]

    Figure 2: The example insertion site custom track (at the bottom), displaying three sample data points.

    genometools-1.5.1/www/genometools.org/htdocs/design.html000066400000000000000000000370131211610345200234400ustar00rootroot00000000000000 The GenomeTools Design

    The GenomeTools design

    Major design goals of the GenomeTools system:

    • Correctness
      • built-in unit tests
      • extensive test suite
    • Portability
      • should run on every POSIX compliant UNIX system
      • depend only on a C/C++ compiler and the GNU Make build system
    • Efficiency
    • Minimalism (if in doubt, use the simpler solution)

    The GenomeTools C code is split into components plus the runtime and the main program. There are the following types of components:

    • classes
    • modules
    • unit tests
    • tools

    It is assumed that the reader is familiar with the terminology of object oriented software design.

    The runtime

    The runtime class gtr.h/gtr.c is the nucleus of the GenomeTools system. An object of this class is the place of execution in GenomeTools, like a process in an operating system. A new runtime object can be created with the gtr_new() function. gtr_register_components() registers all build in components to the runtime, and gtr_run() starts it.

    Rationale

    Having an explicit runtime class unifies the design — a runtime instance is just another object. In theory, this would allow to start multiple instances of the runtime class in parallel. For example, in threads.

    The runtime class is also the place were we start an embedded Lua script language interpreter.

    The main program

    The GenomeTools main program given in the file gt.c simply creates a new runtime object and starts it.

    Classes

    The central component type in GenomeTools is the class. Structuring the C code into classes and modules gives us a unified design approach which simplifies the thinking about design issues and avoids that the codebase becomes monolithic, a problem often encountered in C programs.

    Simple classes

    For most classes, a simple class suffices. A simple class is a class which does not inherit from other classes and from which no other classes inherit. Using mostly simple classes avoids the problems of large class hierarchies, namely the interdependence of classes which inherit from one another. The major advantage of simple classes over simple C structs is information hiding.

    Implementing simple classes

    We describe now how to implement a simple classes using the string class str.[ch] of GenomeTools as an example. The interface to a class is always given in the .h or _api.h header file (str_api.h in our example). To achieve information hiding the header file cannot contain implementation details of the class. The implementation can always be found in the corresponding .c file (str.c in our example). Therefore, we start with the following C construct to define our Str class in str.h:

    typedef struct Str Str;
    

    This seldomly used feature of C introduces a new data type named Str which is a synonym for the struct Str data type, which needs not to be known at this point. In the scope of the header file, the new data type Str cannot be used, since it's size is unknown to the compiler at this point. Nevertheless, pointers of type Str can still be defined, because in C all pointers have the same size, regardless of it's type. Using this fact, we can define a constructor function:

    Str*          str_new(void);
    

    which returns a new string object and a destructor function

    void          str_free(Str*);
    

    which destroys a given string object. This gives us the basic structure of the string class header file: A new data type (which represents the class and it's objects), a constructor function, and a destructor function.

    #ifndef STR_H
    #define STR_H
    
    /* the string class, string objects are strings which grow on demand */
    typedef struct Str Str;
    
    Str*          str_new(void);
    void          str_free(Str*);
    
    #endif
    

    Now we look at the implementation side of the story, which can be found in the str.c file. At first, we include the str.h header file to make sure that the newly defined data type is known:

    #include "str.h"
    

    Then we define struct Str which contains the actual data of a string object (the member variables in OO lingo).

    struct Str {
      char *cstr;           /* the actual string (always '\0' terminated) */
      unsigned long length; /* currently used length (without trailing '\0') */
      size_t allocated;     /* currently allocated memory */
    };
    

    Finally, we code the constructor

    Str* str_new(void)
    {
      Str *s = xmalloc(sizeof(Str));      /* create new string object */
      s->cstr = xcalloc(1, sizeof(char)); /* init the string with '\0' */
      s->length = 0;                      /* set the initial length */
      s->allocated = 1;                   /* set the initially allocated space */
      return s;                           /* return the new string object */
    }
    

    and the destructor

    void str_free(Str *s)
    {
      if (!s) return;           /* return without action if 's' is NULL */
      free(s->cstr);            /* free the stored the C string */
      free(s);                  /* free the actual string object */
    }
    

    Our string class implementation so far looks like this

    #include "str.h"
    #include "xansi.h"
    
    struct Str {
      char *cstr;           /* the actual string (always '\0' terminated) */
      unsigned long length; /* currently used length (without trailing '\0') */
      size_t allocated;     /* currently allocated memory */
    };
    
    Str* str_new(void)
    {
      Str *s = xmalloc(sizeof(Str));      /* create new string object */
      s->cstr = xcalloc(1, sizeof(char)); /* init the string with '\0' */
      s->length = 0;                      /* set the initial length */
      s->allocated = 1;                   /* set the initially allocated space */
      return s;                           /* return the new string object */
    }
    
    void str_free(Str *s)
    {
      if (!s) return;           /* return without action if 's' is NULL */
      free(s->cstr);            /* free the stored the C string */
      free(s);                  /* free the actual string object */
    }
    

    Since this string objects are pretty much useless so far, we define a couple more (object) methods in the header file str_api.h.

    Because C does not allow the traditional object.methodname syntax often used in object-oriented programming, we use the convention to pass the object always as the first argument to the function (methodname(object, ...)). To make it clear that a function is a method of a particular class classname, we prefix the method name with classname_. That is, we get classname_methodname(object, ...) as the generic form of method names in C. The constructor is always called classname_new() and the destructor classname_free(). See str.c for examples.

    Reference counting

    Adding reference counting to our newly created string class is pretty simple. At first we add a new function to the header file, which returns a new reference to the given object:

    Str*          str_ref(Str*);
    

    To implement this object, we add a new reference_count member variable in to the Str implementation

    struct Str {
      char *cstr;           /* the actual string (always '\0' terminated) */
      unsigned long length; /* currently used length (without trailing '\0') */
      size_t allocated;     /* currently allocated memory */
      unsigned int reference_count;
    };
    

    implement the str_ref() function

    Str* str_ref(Str *s)
    {
      if (!s) return NULL;
      s->reference_count++; /* increase the reference counter */
      return s;
    }
    

    and finally modify the destructor to take care of reference counting:

    void str_free(Str *s)
    {
      if (!s) return;           /* return without action if 's' is NULL */
      if (s->reference_count) { /* there are multiple references to this string */
        s->reference_count--;   /* decrement the reference counter */
        return;                 /* return without freeing the object */
      }
      free(s->cstr);            /* free the stored the C string */
      free(s);                  /* free the actual string object */
    }
    

    Modules

    Modules bundle related functions which do not belong to a class. Examples:

    • dynalloc.h, the low level module for dynamic allocation, e.g., used to implement arrays in array.c and the above-mentioned strings
    • sig.h, bundles signal related functions (high level)
    • xansi_api.h, contains wrappers for the standard ANSI C library
    • xposix.h, contains wrappers for POSIX functions we use

    When designing new code, it is not very often the case that one has to introduce new modules. Usually defining a new class is the better approach.

    The genometools.h header file

    The genometools.h header file includes all other header files of the GenomeTools library. That is, to write programs employing the library, it suffices to include the genometools.h header file.

    Unit tests

    Many classes and modules contain a *_unit_test(void) function which performs a unit test of the class/module and returns 0 in case of success and -1 in case of failure. The unit test components are loaded into the GenomeTools runtime in the function gtr_register_components() and can be executed on the command line with:

    $ gt -test
    

    Tools

    A ``tool'' is the most high-level type of component GenomeTools has to offer. We consider the ``eval'' tool here as an example. It evaluates a gene prediction against a given annotation. In principle a tool could be compiled as a single binary linking against the ``libgenometools''. Therefore the header files gt_*.h for tools only contain a single function which resemble a main() function (see gt_eval.h) and the gt_*.c files include only the genometools.h header file (see gt_eval.c). All tools are linked into the single gt binary, though. They are also loaded into the runtime via the gtr_register_components() function. All tools can be called like the eval tool in the following example:

    $ gt eval
    

    Getting started

    To get started with GenomeTools development yourself, we recommend the following:

    1. Install the Git version control system.
    2. Read the Git documentation.
    3. Clone the GenomeTools Git repository with:
      $ git clone git://genometools.org/genometools.git
      
    4. Start hacking on your own feature branch:
      $ cd genometools
      $ git checkout -b my_feature_branch_name
      
    5. Have fun!

    Acknowledgment

    We want to thank Patrick Maaß for introducing us to some techniques described in this document.

    genometools-1.5.1/www/genometools.org/htdocs/documents/000077500000000000000000000000001211610345200232765ustar00rootroot00000000000000genometools-1.5.1/www/genometools.org/htdocs/documents/annotationsketch.pdf000066400000000000000000041120121211610345200273460ustar00rootroot00000000000000%PDF-1.4 % 1 0 obj << /S /GoTo /D (chapter.1) >> endobj 4 0 obj (AnnotationSketch) endobj 5 0 obj << /S /GoTo /D (section.1.1) >> endobj 8 0 obj (Overview) endobj 9 0 obj << /S /GoTo /D (subsection.1.1.1) >> endobj 12 0 obj (Phase 1: Feature selection) endobj 13 0 obj << /S /GoTo /D (subsection.1.1.2) >> endobj 16 0 obj (Phase 2: Layout) endobj 17 0 obj << /S /GoTo /D (subsection.1.1.3) >> endobj 20 0 obj (Phase 3: Rendering) endobj 21 0 obj << /S /GoTo /D (subsection.1.1.4) >> endobj 24 0 obj (Collapsing) endobj 25 0 obj << /S /GoTo /D (subsection.1.1.5) >> endobj 28 0 obj (Styles) endobj 29 0 obj << /S /GoTo /D (section.1.2) >> endobj 32 0 obj (The gt sketch tool) endobj 33 0 obj << /S /GoTo /D (section.1.3) >> endobj 36 0 obj (Dynamic track assignment) endobj 37 0 obj << /S /GoTo /D (subsection.1.3.1) >> endobj 40 0 obj (Default: Top level type decides track membership) endobj 41 0 obj << /S /GoTo /D (subsection.1.3.2) >> endobj 44 0 obj (Track selector functions) endobj 45 0 obj << /S /GoTo /D (section.1.4) >> endobj 48 0 obj (Custom tracks) endobj 49 0 obj << /S /GoTo /D (subsection.1.4.1) >> endobj 52 0 obj (Anatomy of a custom track class) endobj 53 0 obj << /S /GoTo /D (subsection.1.4.2) >> endobj 56 0 obj (Writing an example custom track) endobj 57 0 obj << /S /GoTo /D (section.1.5) >> endobj 60 0 obj (Examples) endobj 61 0 obj << /S /GoTo /D (subsection.1.5.1) >> endobj 64 0 obj (Using AnnotationSketch to draw annotations from a file) endobj 65 0 obj << /S /GoTo /D (subsection.1.5.2) >> endobj 68 0 obj (Using AnnotationSketch to draw user-generated annotations) endobj 69 0 obj << /S /GoTo /D (chapter.2) >> endobj 72 0 obj (API Reference) endobj 73 0 obj << /S /GoTo /D (section.2.1) >> endobj 76 0 obj (Sole functions) endobj 77 0 obj << /S /GoTo /D (section.2.2) >> endobj 80 0 obj (Class GtAddIntronsStream) endobj 81 0 obj << /S /GoTo /D (section.2.3) >> endobj 84 0 obj (Class GtAlphabet) endobj 85 0 obj << /S /GoTo /D (section.2.4) >> endobj 88 0 obj (Class GtAnnoDBSchema) endobj 89 0 obj << /S /GoTo /D (section.2.5) >> endobj 92 0 obj (Class GtArray) endobj 93 0 obj << /S /GoTo /D (section.2.6) >> endobj 96 0 obj (Class GtArrayOutStream) endobj 97 0 obj << /S /GoTo /D (section.2.7) >> endobj 100 0 obj (Class GtBEDInStream) endobj 101 0 obj << /S /GoTo /D (section.2.8) >> endobj 104 0 obj (Class GtBittab) endobj 105 0 obj << /S /GoTo /D (section.2.9) >> endobj 108 0 obj (Class GtBlock) endobj 109 0 obj << /S /GoTo /D (section.2.10) >> endobj 112 0 obj (Class GtCDSStream) endobj 113 0 obj << /S /GoTo /D (section.2.11) >> endobj 116 0 obj (Class GtCSAStream) endobj 117 0 obj << /S /GoTo /D (section.2.12) >> endobj 120 0 obj (Class GtCanvas) endobj 121 0 obj << /S /GoTo /D (section.2.13) >> endobj 124 0 obj (Class GtCanvasCairoContext) endobj 125 0 obj << /S /GoTo /D (section.2.14) >> endobj 128 0 obj (Class GtCanvasCairoFile) endobj 129 0 obj << /S /GoTo /D (section.2.15) >> endobj 132 0 obj (Class GtCodonIterator) endobj 133 0 obj << /S /GoTo /D (section.2.16) >> endobj 136 0 obj (Class GtColor) endobj 137 0 obj << /S /GoTo /D (section.2.17) >> endobj 140 0 obj (Class GtCommentNode) endobj 141 0 obj << /S /GoTo /D (section.2.18) >> endobj 144 0 obj (Class GtCstrTable) endobj 145 0 obj << /S /GoTo /D (section.2.19) >> endobj 148 0 obj (Class GtCustomTrack) endobj 149 0 obj << /S /GoTo /D (section.2.20) >> endobj 152 0 obj (Class GtCustomTrackGcContent) endobj 153 0 obj << /S /GoTo /D (section.2.21) >> endobj 156 0 obj (Class GtCustomTrackScriptWrapper) endobj 157 0 obj << /S /GoTo /D (section.2.22) >> endobj 160 0 obj (Class GtDiagram) endobj 161 0 obj << /S /GoTo /D (section.2.23) >> endobj 164 0 obj (Class GtDlist) endobj 165 0 obj << /S /GoTo /D (section.2.24) >> endobj 168 0 obj (Class GtDlistelem) endobj 169 0 obj << /S /GoTo /D (section.2.25) >> endobj 172 0 obj (Class GtEOFNode) endobj 173 0 obj << /S /GoTo /D (section.2.26) >> endobj 176 0 obj (Class GtEncseq) endobj 177 0 obj << /S /GoTo /D (section.2.27) >> endobj 180 0 obj (Class GtEncseqBuilder) endobj 181 0 obj << /S /GoTo /D (section.2.28) >> endobj 184 0 obj (Class GtEncseqEncoder) endobj 185 0 obj << /S /GoTo /D (section.2.29) >> endobj 188 0 obj (Class GtEncseqLoader) endobj 189 0 obj << /S /GoTo /D (section.2.30) >> endobj 192 0 obj (Class GtEncseqReader) endobj 193 0 obj << /S /GoTo /D (section.2.31) >> endobj 196 0 obj (Class GtError) endobj 197 0 obj << /S /GoTo /D (section.2.32) >> endobj 200 0 obj (Class GtExtractFeatureStream) endobj 201 0 obj << /S /GoTo /D (section.2.33) >> endobj 204 0 obj (Class GtFeatureIndex) endobj 205 0 obj << /S /GoTo /D (section.2.34) >> endobj 208 0 obj (Class GtFeatureIndexMemory) endobj 209 0 obj << /S /GoTo /D (section.2.35) >> endobj 212 0 obj (Class GtFeatureNode) endobj 213 0 obj << /S /GoTo /D (section.2.36) >> endobj 216 0 obj (Class GtFeatureNodeIterator) endobj 217 0 obj << /S /GoTo /D (section.2.37) >> endobj 220 0 obj (Class GtFile) endobj 221 0 obj << /S /GoTo /D (section.2.38) >> endobj 224 0 obj (Class GtGFF3InStream) endobj 225 0 obj << /S /GoTo /D (section.2.39) >> endobj 228 0 obj (Class GtGFF3OutStream) endobj 229 0 obj << /S /GoTo /D (section.2.40) >> endobj 232 0 obj (Class GtGFF3Parser) endobj 233 0 obj << /S /GoTo /D (section.2.41) >> endobj 236 0 obj (Class GtGFF3Visitor) endobj 237 0 obj << /S /GoTo /D (section.2.42) >> endobj 240 0 obj (Class GtGTFInStream) endobj 241 0 obj << /S /GoTo /D (section.2.43) >> endobj 244 0 obj (Class GtGTFOutStream) endobj 245 0 obj << /S /GoTo /D (section.2.44) >> endobj 248 0 obj (Class GtGenomeNode) endobj 249 0 obj << /S /GoTo /D (section.2.45) >> endobj 252 0 obj (Class GtGraphics) endobj 253 0 obj << /S /GoTo /D (section.2.46) >> endobj 256 0 obj (Class GtHashmap) endobj 257 0 obj << /S /GoTo /D (section.2.47) >> endobj 260 0 obj (Class GtIDToMD5Stream) endobj 261 0 obj << /S /GoTo /D (section.2.48) >> endobj 264 0 obj (Class GtImageInfo) endobj 265 0 obj << /S /GoTo /D (section.2.49) >> endobj 268 0 obj (Class GtInterFeatureStream) endobj 269 0 obj << /S /GoTo /D (section.2.50) >> endobj 272 0 obj (Class GtIntervalTree) endobj 273 0 obj << /S /GoTo /D (section.2.51) >> endobj 276 0 obj (Class GtIntervalTreeNode) endobj 277 0 obj << /S /GoTo /D (section.2.52) >> endobj 280 0 obj (Class GtLayout) endobj 281 0 obj << /S /GoTo /D (section.2.53) >> endobj 284 0 obj (Class GtLogger) endobj 285 0 obj << /S /GoTo /D (section.2.54) >> endobj 288 0 obj (Class GtMD5ToIDStream) endobj 289 0 obj << /S /GoTo /D (section.2.55) >> endobj 292 0 obj (Class GtMatchBlast) endobj 293 0 obj << /S /GoTo /D (section.2.56) >> endobj 296 0 obj (Class GtMatchIterator) endobj 297 0 obj << /S /GoTo /D (section.2.57) >> endobj 300 0 obj (Class GtMatchLAST) endobj 301 0 obj << /S /GoTo /D (section.2.58) >> endobj 304 0 obj (Class GtMatchOpen) endobj 305 0 obj << /S /GoTo /D (section.2.59) >> endobj 308 0 obj (Class GtMatchSW) endobj 309 0 obj << /S /GoTo /D (section.2.60) >> endobj 312 0 obj (Class GtMergeFeatureStream) endobj 313 0 obj << /S /GoTo /D (section.2.61) >> endobj 316 0 obj (Class GtMergeStream) endobj 317 0 obj << /S /GoTo /D (section.2.62) >> endobj 320 0 obj (Class GtMetaNode) endobj 321 0 obj << /S /GoTo /D (section.2.63) >> endobj 324 0 obj (Class GtNodeStream) endobj 325 0 obj << /S /GoTo /D (section.2.64) >> endobj 328 0 obj (Class GtNodeStreamClass) endobj 329 0 obj << /S /GoTo /D (section.2.65) >> endobj 332 0 obj (Class GtNodeVisitor) endobj 333 0 obj << /S /GoTo /D (section.2.66) >> endobj 336 0 obj (Class GtOption) endobj 337 0 obj << /S /GoTo /D (section.2.67) >> endobj 340 0 obj (Class GtOptionParser) endobj 341 0 obj << /S /GoTo /D (section.2.68) >> endobj 344 0 obj (Class GtPhase) endobj 345 0 obj << /S /GoTo /D (section.2.69) >> endobj 348 0 obj (Class GtQueue) endobj 349 0 obj << /S /GoTo /D (section.2.70) >> endobj 352 0 obj (Class GtRDBVisitor) endobj 353 0 obj << /S /GoTo /D (section.2.71) >> endobj 356 0 obj (Class GtRange) endobj 357 0 obj << /S /GoTo /D (section.2.72) >> endobj 360 0 obj (Class GtReadmode) endobj 361 0 obj << /S /GoTo /D (section.2.73) >> endobj 364 0 obj (Class GtRecMap) endobj 365 0 obj << /S /GoTo /D (section.2.74) >> endobj 368 0 obj (Class GtRegionMapping) endobj 369 0 obj << /S /GoTo /D (section.2.75) >> endobj 372 0 obj (Class GtRegionNode) endobj 373 0 obj << /S /GoTo /D (section.2.76) >> endobj 376 0 obj (Class GtSelectStream) endobj 377 0 obj << /S /GoTo /D (section.2.77) >> endobj 380 0 obj (Class GtSequenceNode) endobj 381 0 obj << /S /GoTo /D (section.2.78) >> endobj 384 0 obj (Class GtSortStream) endobj 385 0 obj << /S /GoTo /D (section.2.79) >> endobj 388 0 obj (Class GtSplitter) endobj 389 0 obj << /S /GoTo /D (section.2.80) >> endobj 392 0 obj (Class GtStatStream) endobj 393 0 obj << /S /GoTo /D (section.2.81) >> endobj 396 0 obj (Class GtStr) endobj 397 0 obj << /S /GoTo /D (section.2.82) >> endobj 400 0 obj (Class GtStrArray) endobj 401 0 obj << /S /GoTo /D (section.2.83) >> endobj 404 0 obj (Class GtStrand) endobj 405 0 obj << /S /GoTo /D (section.2.84) >> endobj 408 0 obj (Class GtStyle) endobj 409 0 obj << /S /GoTo /D (section.2.85) >> endobj 412 0 obj (Class GtTagValueMap) endobj 413 0 obj << /S /GoTo /D (section.2.86) >> endobj 416 0 obj (Class GtTextWidthCalculator) endobj 417 0 obj << /S /GoTo /D (section.2.87) >> endobj 420 0 obj (Class GtTextWidthCalculatorCairo) endobj 421 0 obj << /S /GoTo /D (section.2.88) >> endobj 424 0 obj (Class GtTimer) endobj 425 0 obj << /S /GoTo /D (section.2.89) >> endobj 428 0 obj (Class GtTransTable) endobj 429 0 obj << /S /GoTo /D (section.2.90) >> endobj 432 0 obj (Class GtTranslator) endobj 433 0 obj << /S /GoTo /D (section.2.91) >> endobj 436 0 obj (Class GtTypeChecker) endobj 437 0 obj << /S /GoTo /D (section.2.92) >> endobj 440 0 obj (Class GtTypeCheckerOBO) endobj 441 0 obj << /S /GoTo /D (section.2.93) >> endobj 444 0 obj (Class GtUniqStream) endobj 445 0 obj << /S /GoTo /D (section.2.94) >> endobj 448 0 obj (Class GtVisitorStream) endobj 449 0 obj << /S /GoTo /D (section.2.95) >> endobj 452 0 obj (Module Array2dim) endobj 453 0 obj << /S /GoTo /D (section.2.96) >> endobj 456 0 obj (Module Assert) endobj 457 0 obj << /S /GoTo /D (section.2.97) >> endobj 460 0 obj (Module Bsearch) endobj 461 0 obj << /S /GoTo /D (section.2.98) >> endobj 464 0 obj (Module Countingsort) endobj 465 0 obj << /S /GoTo /D (section.2.99) >> endobj 468 0 obj (Module Cstr) endobj 469 0 obj << /S /GoTo /D (section.2.100) >> endobj 472 0 obj (Module Endianess) endobj 473 0 obj << /S /GoTo /D (section.2.101) >> endobj 476 0 obj (Module Fileutils) endobj 477 0 obj << /S /GoTo /D (section.2.102) >> endobj 480 0 obj (Module FunctionPointer) endobj 481 0 obj << /S /GoTo /D (section.2.103) >> endobj 484 0 obj (Module Grep) endobj 485 0 obj << /S /GoTo /D (section.2.104) >> endobj 488 0 obj (Module Init) endobj 489 0 obj << /S /GoTo /D (section.2.105) >> endobj 492 0 obj (Module Log) endobj 493 0 obj << /S /GoTo /D (section.2.106) >> endobj 496 0 obj (Module MemoryAllocation) endobj 497 0 obj << /S /GoTo /D (section.2.107) >> endobj 500 0 obj (Module Msort) endobj 501 0 obj << /S /GoTo /D (section.2.108) >> endobj 504 0 obj (Module POSIX) endobj 505 0 obj << /S /GoTo /D (section.2.109) >> endobj 508 0 obj (Module Parseutils) endobj 509 0 obj << /S /GoTo /D (section.2.110) >> endobj 512 0 obj (Module Qsort) endobj 513 0 obj << /S /GoTo /D (section.2.111) >> endobj 516 0 obj (Module Strcmp) endobj 517 0 obj << /S /GoTo /D (section.2.112) >> endobj 520 0 obj (Module Symbol) endobj 521 0 obj << /S /GoTo /D (section.2.113) >> endobj 524 0 obj (Module Undef) endobj 525 0 obj << /S /GoTo /D (section.2.114) >> endobj 528 0 obj (Module Unused) endobj 529 0 obj << /S /GoTo /D (section.2.115) >> endobj 532 0 obj (Module Version) endobj 533 0 obj << /S /GoTo /D (section.2.116) >> endobj 536 0 obj (Module Warning) endobj 537 0 obj << /S /GoTo /D (section.2.117) >> endobj 540 0 obj (Module XANSI) endobj 541 0 obj << /S /GoTo /D [542 0 R /Fit ] >> endobj 544 0 obj << /Length 354 /Filter /FlateDecode >> stream xڍQN0 +rL$N@linͶ5L h8񳟟AV3͗$sk$Վ W9 9T yt4v,C%1Tw]޲|@PpQ"T#yu0, k{?ߘj}Xŀ$"$ÜBGL ا݌1 4lq)xť*, tTLۯi_ jbLי\;6AШ8Psl\_>aE8 H7aPRj;"$g?fE000eqޟQ(<]5S endstream endobj 542 0 obj << /Type /Page /Contents 544 0 R /Resources 543 0 R /MediaBox [0 0 595.276 841.89] /Parent 550 0 R >> endobj 545 0 obj << /D [542 0 R /XYZ 88.291 795.961 null] >> endobj 546 0 obj << /D [542 0 R /XYZ 89.291 757.701 null] >> endobj 543 0 obj << /Font << /F39 547 0 R /F21 548 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 589 0 obj << /Length 1096 /Filter /FlateDecode >> stream xMo6:J|[b'Ea-j;;06m @$+FހmBz P[zpƛջ;="! /VQ $s?3k2[N9Q(Rn b{q*,˭IM}cg $R Wv1o 慘Fhf1}S<'& RI? BP}ޗ+&{G! +#V4>@BgdiR3s %?(9AmJ o:cDAdsS$2Gv/tXCg~*+ ׍xjb) ٰ;sNW]5TP"P]šXUUs9lya, 3u"ďDm^':B럺,ee2gI",h+,f@eЛ6EbϟjbijM6xd aa ^$6knvs;w~ endstream endobj 588 0 obj << /Type /Page /Contents 589 0 R /Resources 587 0 R /MediaBox [0 0 595.276 841.89] /Parent 550 0 R /Annots [ 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R ] >> endobj 551 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [88.295 641.845 195.909 651.413] /A << /S /GoTo /D (chapter.1) >> >> endobj 552 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 628.143 174.32 637.728] /A << /S /GoTo /D (section.1.1) >> >> endobj 553 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 614.594 280.922 624.179] /A << /S /GoTo /D (subsection.1.1.1) >> >> endobj 554 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 598.836 237.603 610.63] /A << /S /GoTo /D (subsection.1.1.2) >> >> endobj 555 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 585.287 252.145 597.081] /A << /S /GoTo /D (subsection.1.1.3) >> >> endobj 556 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 571.737 213.931 583.532] /A << /S /GoTo /D (subsection.1.1.4) >> >> endobj 557 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 558.188 193.323 569.982] /A << /S /GoTo /D (subsection.1.1.5) >> >> endobj 558 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 544.577 222.679 556.433] /A << /S /GoTo /D (section.1.2) >> >> endobj 559 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 531.09 248.086 542.884] /A << /S /GoTo /D (section.1.3) >> >> endobj 560 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 517.541 384.023 529.335] /A << /S /GoTo /D (subsection.1.3.1) >> >> endobj 561 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 506.201 271.693 515.786] /A << /S /GoTo /D (subsection.1.3.2) >> >> endobj 562 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 492.651 194.469 502.236] /A << /S /GoTo /D (section.1.4) >> >> endobj 563 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 476.893 309.351 488.687] /A << /S /GoTo /D (subsection.1.4.1) >> >> endobj 564 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 463.344 311.915 475.138] /A << /S /GoTo /D (subsection.1.4.2) >> >> endobj 565 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 449.795 174.767 461.589] /A << /S /GoTo /D (section.1.5) >> >> endobj 566 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 436.246 408.918 448.067] /A << /S /GoTo /D (subsection.1.5.1) >> >> endobj 567 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [129.75 422.696 427.463 434.518] /A << /S /GoTo /D (subsection.1.5.2) >> >> endobj 568 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [88.295 400.6 179.076 410.168] /A << /S /GoTo /D (chapter.2) >> >> endobj 569 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 386.898 194.469 396.483] /A << /S /GoTo /D (section.2.1) >> >> endobj 570 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 373.349 249.613 382.934] /A << /S /GoTo /D (section.2.2) >> >> endobj 571 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 357.59 209.01 369.385] /A << /S /GoTo /D (section.2.3) >> >> endobj 572 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 346.25 242.948 355.835] /A << /S /GoTo /D (section.2.4) >> >> endobj 573 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 330.492 194.458 342.286] /A << /S /GoTo /D (section.2.5) >> >> endobj 574 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 316.943 241.726 328.737] /A << /S /GoTo /D (section.2.6) >> >> endobj 575 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 305.515 230.828 315.188] /A << /S /GoTo /D (section.2.7) >> >> endobj 576 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 292.054 195.69 301.639] /A << /S /GoTo /D (section.2.8) >> >> endobj 577 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 278.417 195.079 288.089] /A << /S /GoTo /D (section.2.9) >> >> endobj 578 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 264.955 221.141 274.54] /A << /S /GoTo /D (section.2.10) >> >> endobj 579 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 251.406 221.141 260.991] /A << /S /GoTo /D (section.2.11) >> >> endobj 580 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 237.857 200.425 247.442] /A << /S /GoTo /D (section.2.12) >> >> endobj 581 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 224.308 259.05 233.893] /A << /S /GoTo /D (section.2.13) >> >> endobj 582 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 210.758 241.639 220.343] /A << /S /GoTo /D (section.2.14) >> >> endobj 583 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 197.209 230.217 206.794] /A << /S /GoTo /D (section.2.15) >> >> endobj 584 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 183.66 193.868 193.245] /A << /S /GoTo /D (section.2.16) >> >> endobj 585 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 170.111 235.683 179.696] /A << /S /GoTo /D (section.2.17) >> >> endobj 590 0 obj << /D [588 0 R /XYZ 88.291 795.961 null] >> endobj 591 0 obj << /D [588 0 R /XYZ 89.291 667.3 null] >> endobj 587 0 obj << /Font << /F21 548 0 R /F40 549 0 R /F47 592 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 640 0 obj << /Length 881 /Filter /FlateDecode >> stream xr0}K{aWw&\4i.\Oo_B.IUl0 'z|1a(^zmHpI&"Ɉ^y> BΑ:y;nJR!ñGϻ 1cg 18bߦnUPWWR!A0x~V.s+ ͫ|\Tz+3"|{ * bq٢VA(s pk3|U=1Y^jS4v8踅nx>R^K.v w pNMjg)Z($:k: ywJMl I:i>-l5$Pٖ,ΚMgM,:+ ԩ-i$\B)$Ќ=lWeהQ=aa f٥w;Uā.k%fydT`|{,sݫ(m}<Ѥu:$ qK ,L":^Vm\wfbC{ K!gEftЮzGEN*b>E&(3[vW&׮1X8$gf)B~2>)RN|=VRP.eN2p@ 6e0 mVG]@brnGN8UPnwB^2㝝2$[nq}FA'b˓A` P?͚ͩ TW.zS]^LDnTZmXuo@BlvÂEX }>c:Cm VqDB&#vazPJ endstream endobj 639 0 obj << /Type /Page /Contents 640 0 R /Resources 638 0 R /MediaBox [0 0 595.276 841.89] /Parent 550 0 R /Annots [ 586 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R ] >> endobj 586 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 745.593 211.17 755.178] /A << /S /GoTo /D (section.2.18) >> >> endobj 594 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 731.957 228.024 741.629] /A << /S /GoTo /D (section.2.19) >> >> endobj 595 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 718.495 275.293 728.08] /A << /S /GoTo /D (section.2.20) >> >> endobj 596 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 702.736 292.245 714.531] /A << /S /GoTo /D (section.2.21) >> >> endobj 597 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 689.187 207.188 700.981] /A << /S /GoTo /D (section.2.22) >> >> endobj 598 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 677.76 190.236 687.432] /A << /S /GoTo /D (section.2.23) >> >> endobj 599 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 664.298 211.442 673.883] /A << /S /GoTo /D (section.2.24) >> >> endobj 600 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 650.749 213.254 660.334] /A << /S /GoTo /D (section.2.25) >> >> endobj 601 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 634.99 200.523 646.785] /A << /S /GoTo /D (section.2.26) >> >> endobj 602 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 621.441 233.25 633.235] /A << /S /GoTo /D (section.2.27) >> >> endobj 603 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 607.892 236.872 619.686] /A << /S /GoTo /D (section.2.28) >> >> endobj 604 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 594.343 231.417 606.137] /A << /S /GoTo /D (section.2.29) >> >> endobj 605 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 580.794 231.417 592.588] /A << /S /GoTo /D (section.2.30) >> >> endobj 606 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 569.454 192.036 579.039] /A << /S /GoTo /D (section.2.31) >> >> endobj 607 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 555.904 264.144 565.489] /A << /S /GoTo /D (section.2.32) >> >> endobj 608 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 542.355 226.41 551.94] /A << /S /GoTo /D (section.2.33) >> >> endobj 609 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 526.597 263.981 538.391] /A << /S /GoTo /D (section.2.34) >> >> endobj 610 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 515.257 225.363 524.842] /A << /S /GoTo /D (section.2.35) >> >> endobj 611 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 501.62 257.468 511.293] /A << /S /GoTo /D (section.2.36) >> >> endobj 612 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 488.071 185.992 497.743] /A << /S /GoTo /D (section.2.37) >> >> endobj 613 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 474.609 234.472 484.194] /A << /S /GoTo /D (section.2.38) >> >> endobj 614 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 460.973 241.748 470.645] /A << /S /GoTo /D (section.2.39) >> >> endobj 615 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 447.511 221.577 457.096] /A << /S /GoTo /D (section.2.40) >> >> endobj 616 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 433.962 224.13 443.547] /A << /S /GoTo /D (section.2.41) >> >> endobj 617 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 420.412 229.617 429.997] /A << /S /GoTo /D (section.2.42) >> >> endobj 618 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 406.863 236.893 416.448] /A << /S /GoTo /D (section.2.43) >> >> endobj 619 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 393.314 229.606 402.899] /A << /S /GoTo /D (section.2.44) >> >> endobj 620 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 377.556 208.399 389.35] /A << /S /GoTo /D (section.2.45) >> >> endobj 621 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 364.006 210.221 375.801] /A << /S /GoTo /D (section.2.46) >> >> endobj 622 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 352.666 245.708 362.251] /A << /S /GoTo /D (section.2.47) >> >> endobj 623 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 336.908 214.454 348.702] /A << /S /GoTo /D (section.2.48) >> >> endobj 624 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 325.481 253.235 335.153] /A << /S /GoTo /D (section.2.49) >> >> endobj 625 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 312.019 222.275 321.604] /A << /S /GoTo /D (section.2.50) >> >> endobj 626 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 298.47 245.904 308.055] /A << /S /GoTo /D (section.2.51) >> >> endobj 627 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 282.711 199.923 294.505] /A << /S /GoTo /D (section.2.52) >> >> endobj 628 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 269.162 200.523 280.956] /A << /S /GoTo /D (section.2.53) >> >> endobj 629 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 257.822 245.708 267.407] /A << /S /GoTo /D (section.2.54) >> >> endobj 630 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 244.273 219.319 253.858] /A << /S /GoTo /D (section.2.55) >> >> endobj 631 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 230.724 228.995 240.309] /A << /S /GoTo /D (section.2.56) >> >> endobj 632 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 217.174 224.163 226.759] /A << /S /GoTo /D (section.2.57) >> >> endobj 633 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 201.416 220.519 213.21] /A << /S /GoTo /D (section.2.58) >> >> endobj 634 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 189.989 213.254 199.661] /A << /S /GoTo /D (section.2.59) >> >> endobj 635 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 174.318 260.915 186.112] /A << /S /GoTo /D (section.2.60) >> >> endobj 636 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 160.769 228.199 172.563] /A << /S /GoTo /D (section.2.61) >> >> endobj 641 0 obj << /D [639 0 R /XYZ 88.291 795.961 null] >> endobj 638 0 obj << /Font << /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 688 0 obj << /Length 902 /Filter /FlateDecode >> stream xMs0{~Wy,4ɴ4i!ӃUԱ?f_ȴ' \Yv] E3y\`@ `0ߒ0LcQ0KE#B@8e]G#^6WTE#Q$_>fbBζ?&1'K,dkTJ>D#kZ9e'#:!{p" ¬Κ8BSOUOBvj&$Ut1e-f7KY !R ~nUJCs ֘@Dx>baqϫΩg J]8`zG]dl~%Wf#k/afVM4*+eJpC] tՕ-.LUs\'^z=u}x\PP0-J-qBtgMӥNFvܖ싎b읙+shE35J $oJ>9'v9Y> endobj 637 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 745.593 215.065 755.178] /A << /S /GoTo /D (section.2.62) >> >> endobj 642 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 732.044 223.552 741.629] /A << /S /GoTo /D (section.2.63) >> >> endobj 643 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 718.407 247.191 728.08] /A << /S /GoTo /D (section.2.64) >> >> endobj 644 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 704.858 222.297 714.531] /A << /S /GoTo /D (section.2.65) >> >> endobj 645 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 689.187 199.323 700.981] /A << /S /GoTo /D (section.2.66) >> >> endobj 646 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 675.638 226.421 687.432] /A << /S /GoTo /D (section.2.67) >> >> endobj 647 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 664.211 194.468 673.883] /A << /S /GoTo /D (section.2.68) >> >> endobj 648 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 648.965 197.49 660.334] /A << /S /GoTo /D (section.2.69) >> >> endobj 649 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 637.112 221.097 646.785] /A << /S /GoTo /D (section.2.70) >> >> endobj 650 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 621.441 196.89 633.235] /A << /S /GoTo /D (section.2.71) >> >> endobj 651 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 610.014 215.676 619.686] /A << /S /GoTo /D (section.2.72) >> >> endobj 652 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 594.343 205.977 606.137] /A << /S /GoTo /D (section.2.73) >> >> endobj 653 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 580.794 239.763 592.588] /A << /S /GoTo /D (section.2.74) >> >> endobj 654 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 567.244 223.999 579.039] /A << /S /GoTo /D (section.2.75) >> >> endobj 655 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 555.904 226.584 565.489] /A << /S /GoTo /D (section.2.76) >> >> endobj 656 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 540.146 234.45 551.94] /A << /S /GoTo /D (section.2.77) >> >> endobj 657 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 528.806 218.108 538.391] /A << /S /GoTo /D (section.2.78) >> >> endobj 658 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 513.048 201.144 524.842] /A << /S /GoTo /D (section.2.79) >> >> endobj 659 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 501.708 216.897 511.293] /A << /S /GoTo /D (section.2.80) >> >> endobj 660 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 488.158 181.749 497.743] /A << /S /GoTo /D (section.2.81) >> >> endobj 661 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 472.4 207.188 484.194] /A << /S /GoTo /D (section.2.82) >> >> endobj 662 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 461.06 197.501 470.645] /A << /S /GoTo /D (section.2.83) >> >> endobj 663 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 445.302 191.447 457.096] /A << /S /GoTo /D (section.2.84) >> >> endobj 664 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 431.752 229.945 443.547] /A << /S /GoTo /D (section.2.85) >> >> endobj 665 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 420.412 260.37 429.997] /A << /S /GoTo /D (section.2.86) >> >> endobj 666 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 406.863 284.609 416.448] /A << /S /GoTo /D (section.2.87) >> >> endobj 667 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 393.314 195.297 402.899] /A << /S /GoTo /D (section.2.88) >> >> endobj 668 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 379.677 217.443 389.35] /A << /S /GoTo /D (section.2.89) >> >> endobj 669 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 366.128 213.472 375.801] /A << /S /GoTo /D (section.2.90) >> >> endobj 670 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 350.457 226.803 362.251] /A << /S /GoTo /D (section.2.91) >> >> endobj 671 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 336.908 249.832 348.702] /A << /S /GoTo /D (section.2.92) >> >> endobj 672 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 323.359 221.741 335.153] /A << /S /GoTo /D (section.2.93) >> >> endobj 673 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 311.931 229.573 321.604] /A << /S /GoTo /D (section.2.94) >> >> endobj 674 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 296.26 216.276 308.055] /A << /S /GoTo /D (section.2.95) >> >> endobj 675 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 284.833 196.279 294.505] /A << /S /GoTo /D (section.2.96) >> >> endobj 676 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 271.284 203.545 280.956] /A << /S /GoTo /D (section.2.97) >> >> endobj 677 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 255.613 225.385 267.407] /A << /S /GoTo /D (section.2.98) >> >> endobj 678 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 244.185 186.592 253.858] /A << /S /GoTo /D (section.2.99) >> >> endobj 679 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 230.724 212.643 240.309] /A << /S /GoTo /D (section.2.100) >> >> endobj 680 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 217.174 204.177 226.759] /A << /S /GoTo /D (section.2.101) >> >> endobj 681 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 203.625 238.716 213.21] /A << /S /GoTo /D (section.2.102) >> >> endobj 682 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 187.867 190.214 199.661] /A << /S /GoTo /D (section.2.103) >> >> endobj 683 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 176.439 183.56 186.112] /A << /S /GoTo /D (section.2.104) >> >> endobj 684 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 160.769 185.982 172.563] /A << /S /GoTo /D (section.2.105) >> >> endobj 689 0 obj << /D [687 0 R /XYZ 88.291 795.961 null] >> endobj 686 0 obj << /Font << /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 703 0 obj << /Length 342 /Filter /FlateDecode >> stream xOk0"4im8?6AvpPփ~q; Ĝ^x$%y@Meһ@$٥RDˈk)Hq 8BDLWyFجeYy^N'͢,(" flxKnxȘ0Jvuj,S'/1||FV<3EL:[5)wmF}n E!:æ.?|EOz{u腎sf3B_ w/U63 ; P9z/^AV_?comN4)Ŝ2#Q;w_x(^0 *"Lv 6zkZ]%Ol endstream endobj 702 0 obj << /Type /Page /Contents 703 0 R /Resources 701 0 R /MediaBox [0 0 595.276 841.89] /Parent 550 0 R /Annots [ 685 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R ] >> endobj 685 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 743.384 252.035 755.178] /A << /S /GoTo /D (section.2.106) >> >> endobj 690 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 732.044 194.469 741.629] /A << /S /GoTo /D (section.2.107) >> >> endobj 691 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 718.495 199.923 728.08] /A << /S /GoTo /D (section.2.108) >> >> endobj 692 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 704.858 210.668 714.531] /A << /S /GoTo /D (section.2.109) >> >> endobj 693 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 689.613 192.647 700.981] /A << /S /GoTo /D (section.2.110) >> >> endobj 694 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 675.638 199.923 687.432] /A << /S /GoTo /D (section.2.111) >> >> endobj 695 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 662.089 202.356 673.883] /A << /S /GoTo /D (section.2.112) >> >> endobj 696 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 650.749 195.669 660.334] /A << /S /GoTo /D (section.2.113) >> >> endobj 697 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 637.2 201.734 646.785] /A << /S /GoTo /D (section.2.114) >> >> endobj 698 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 623.65 201.734 633.235] /A << /S /GoTo /D (section.2.115) >> >> endobj 699 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 607.892 205.705 619.686] /A << /S /GoTo /D (section.2.116) >> >> endobj 700 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [104.659 596.552 201.734 606.137] /A << /S /GoTo /D (section.2.117) >> >> endobj 704 0 obj << /D [702 0 R /XYZ 88.291 795.961 null] >> endobj 701 0 obj << /Font << /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 714 0 obj << /Length 2553 /Filter /FlateDecode >> stream xڝY˲+,ΞN9]YP$!C ZF7(RC3^Fpsބ_O^EEii*MZ`(ShOpmӴC9ضNG[3Tݿ^6%.6Q!(V4(p#%[G[֬Bi^z['޾6UiTy3+Lw"rls{KGPDZ?߇ qBm)wnݺܕ+uٜlrٙi!f!HaQ8UH b@7ӽYG k@Itض'<ޕ5OVu'ybnb(P{+ɸ32fk4ܳw}V M+~2_$aEDz"/ bhM5QP$W*pT31JikƝ^v/ԦvV8WbD;\mn#9Rc9s̊:ψPwiBPd2G4)r\BCTCgY04N79"P2i35 33xFO@c3Gbq?)!,AG9@_'H4~q© nw],PH%A3io㩔DhyAUӯLQDSr&/ 1&@OFQqovo[ 7aj7SYĹMӻ{AYbs)3pAv8 p/ {waFz6&$|8޶`[?Y疴kX9e`.lN@l~d@}:7d4 &(Hu:cBbǾ/!0۾a AygB9n|u(mfp :r.pC6nuU9s`hؿCnV+)2\{#4 e&8p2okC '-:+ &wi#g.S5I!%dkasgZf@yo` &S\d\x)_ʼnyd`ĉ&څRd%JѪ/\g}x;r/[u S SRXREv"_Z)Ɔ/崐@Jr=gG_^k,)E?ɄAM*S!n0n#E\͡ZӦUCUCaey${d)h)鑦X4Fz'rpB'<Za{[xKMuymvbMu7b_;HM endstream endobj 713 0 obj << /Type /Page /Contents 714 0 R /Resources 712 0 R /MediaBox [0 0 595.276 841.89] /Parent 550 0 R /Annots [ 705 0 R 708 0 R ] >> endobj 705 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.957 549.79 124.586 561.584] /A << /S /GoTo /D (figure.caption.2) >> >> endobj 708 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [491.352 498.975 506.981 510.797] /A << /S /GoTo /D (figure.caption.3) >> >> endobj 715 0 obj << /D [713 0 R /XYZ 88.291 795.961 null] >> endobj 2 0 obj << /D [713 0 R /XYZ 89.291 757.701 null] >> endobj 6 0 obj << /D [713 0 R /XYZ 89.291 607.109 null] >> endobj 10 0 obj << /D [713 0 R /XYZ 89.291 534.832 null] >> endobj 14 0 obj << /D [713 0 R /XYZ 89.291 307.878 null] >> endobj 712 0 obj << /Font << /F21 548 0 R /F49 593 0 R /F40 549 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 723 0 obj << /Length 1249 /Filter /FlateDecode >> stream xڝn6Qj۴[ns큖K,AP*Ea~ 9HD",Y g*(o8Q݇w$e7s{Hxd=>EBfL$Rf!?`;X0wɌuIch34~P|n8g]vVV=\^XGB)Soq 3Ť/xQ_=q(|oyM,v?m9`{0hL )#߁ɡvPQy`ɴjR).[`:Io95 n}$Pf۵2whL߇G+ώ?;k}QoNO9gi<}e7h(;)S9K^^0+]q6}3[_D0e (s7;[N#둹7ͩ;—VKG*i؁8, a8`ХIZ"lsaH3etδV9te1U472*F5J`N@% Zokp@Bps΁4uɨG)E'/MOsy |}˴ݤ. v9DQ D)d/hu"a$v鯕qYwXEXKK% ٳ*ۃl}¥G)L*)Is4_IXeбo06cb)C`4Lӗޕɱ.ͯ}2\,дH WLz@#2<\bЕ99[ƨ=O*gD.\X\Ò߄yn{cYqL]dǪs5p64+ƅ\F=7(~مO`: T͗9n}na5ڥ%i(|?v+ endstream endobj 722 0 obj << /Type /Page /Contents 723 0 R /Resources 721 0 R /MediaBox [0 0 595.276 841.89] /Parent 725 0 R /Group 707 0 R /Annots [ 711 0 R ] >> endobj 706 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (../../www/genometools.org/htdocs/images/dataflow.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 726 0 R /BBox [0 0 677.797607 858.695496] /Group 707 0 R /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >>>> /Length 144031 /Filter /FlateDecode >> stream xˎ-.Sd@Cw Un( c8~B)FΉm,ER$ERu}^_WOc|v}}_w_J-}1|FlJߥI z_/_2W{|ycVzz1·[;oo̜߭4.W'f|>^QߣW&q̤$;=0u`}nTΐ/Eyƴ%z,sTW 4OdrJpi^;DMRN;@ul1zk>4Ks\M}skkl{%[o8~PLVKaBUSXչW&, ?aؾFQ]bjd [,~^҇WfɨG ?UK]g(JS{3/Qzgg9J+7OTnzEDd!+kCPm@ Fu+97àkY |]Y/ -ȡ?_&/tC΋ qåh 0)Jg%fM8nĂoB ?+Q-,A^BOb ?Z`l@ܳpH -ZὉYf1Y>sM*aoSO_M]"!`V^p+?AUȄ8L".=rin61iDLa {U5[sy>ShAԽ$obhrՖ~19@QiOma0|51ܺߍ'Ϭn2dNܨ:lF0`JjHa>M!t tZ7J/?t=uH4b7MF}hO$W.ہ Ľ?۫3@oL"Hv#Ҩ6.%71yPzە{G5$p1lAuv.C0H:IUVflK6}7Eo\Naj urk?)WovʨHAܒX :w9nu`<t%t`EhZ;O􃑃^8v;_2tڬH&"hG媶f鱃^[PrЁi#Exjbr9Y:"pglj SˆcreS$2b艶ّfZ k_T_礟?/Tmw4cGw !z{ѹJU&=셽7-t?'E˵~*iiM-s&{8f.;6㞓 S 6a3,fū4W@%M_%G6)f.^Pc*Vy9TPRnwe]N_H̕@@A ]rpu[K+~"yHkC9䮿}Sev@H J"3|IriPT~HRUpzo.Yh:žu iL6p'݆J?^qd1DLBZV;窎y$xq07Q'Y/ѲWkqA-V鄚Hu^)(EˬM$7Ỿ"0*μ L}"\H j-2/W 7%X3Dm~43q:,%YL.f~`A\0k >`0l i<PNe7Ķ',"b"yG&83 `R;UiH ~۝ @0~`J֬ c;;L{pxDhɱU;m}Ą,xײU_[|(c[iކo}`>(FI6,ӻpbLJwV h+uqM_l Dzcوd CB=@|$) 8@Px/{0'"m d`CT3L%wovC̀C&m8+li[ei,yڦD/ݰN%sF$|Y`gֹc^p9Τ=3nx#ViQlT@sҵƴB~㆏xTv:\=O:ƒܖncBncAг~=Nx*:նx"FO1qc׈ڿxc⸃^#W]te{%58 5TUhg7Fgo~py 7m"Nf0[6CP<~cɖ#EDǺ\y!qK)bєx떲|wtȒ]Timug`up!dH ½:l`7`t X]Vqq+!Elv,*R&>-5 :uL>18 o| Ty $!Firǹ.Fl˳. .}uM;掗e+%'v$q04 h#{ds{z"tK}+Zp]-; <,PS۸{;,|>;'S݃p TlK*,S:}.'E)O1պjOC nx:g3w\5Oz>ıCvGǺ ӆ\!*uIđ7ߍ`*$#V U~qY?\7 + lsNѿ1ۋ} .@K~ w4ى_@,ٜYٖ JܨH#Y@$oTv |X亶搟@C şoExbO`qw(cbZ6&C3@(|[*ukJQ\xJrɏOTkIN{n.3; dƐ(2A_\o3N׮}U`jپԙ`KnRJ┷ DF ~cSGB=Gb$#u@+{0(v#b(7C2уbc&؛`_Gr8S;c\o&,$cSqV24 w3+? _/QVJV1֙x)rz)d &hk7?Jݨy[GiKJoI 5׀<e+F. $0(hmJ23FoX9҂P;IW[ 3-Oҽ5㠻p +n~c;/El2yip|ɭ#xF6JYAN]4ҞB!r`/:G!*FT$3*V^.%{[`8p ò r9c)Ժ;@0"YxE.R.sfro__DJ"tU;7/Ri=P4nZ$Ci,= 0N3sjMB*n8LdaF[vf<. K"6ؗ2ϗ^N-0O(HW\o*^YQS0FPFyUpA&E*&!]DuIʋIA`٣ qV #=I/冲4"6R5ΫbV\Ö,+e1SIna^cVsP}l]A~F0^x {q+>T +QylӺŐ6El)dQ1\PʖE8S? sa?W^܀LRί̋2X^vQH`J!YJb'-ս=R*'c`J<+c7y*oBu0%X!D-16+} ~J$No *2d9!x؆٧p"4<.d)X*'*7<ipǪ҆>Η{gy)pA$u4CVaZ|0Een-&Ǫ<fm(V<8Rg̋._t("e kkvG!9}SnQWݲia\VbQ W[R3'/GXJ<0S %GFݚK97;(uO6;l1h5Sx0Z~aOh('wMmLϹMM7&Df\G>d=Q8f!;h~3U pɎ4Hr1.I`$SH;IWgT`jVj]1Q>*5d;^(J~h2z| }&(Ȓb2yb$p6C^rږSvTj#^OYCKR,{)Q RdI0&.!)jhiY#?LyxL۹6O Qn ^d ^VT&x65 ~cd܏aG/ ^b[Haɭz[ O ,I"u,prL>G@GFUQضk섶kab.:g?7Gےom?icS[$)o-%l#'eVQ f'@ʌ4YSrl׼Ax*M-|P6> )Fia3J6kfMN+&x|FHwZO:98>mUֱge_[) Rpc"2T`ϐSqG*[C&3?jy)K~ &y># HS ExG7*ZMfyy_| |$] ~םӠW}WuG8L ӛ|x>wKIupC˅nnONg8Bҿ7k>٧}dF&C ,$=w:R{y{3 GJ@!!ٛH1 X]!bը`WN ݊0,L>GL]# pb48@?X.JCuH_kcKu޺T#+Q䲬Wd4N(0G.գjx`s 0.c6; lkXɑ`gCIdOn*,y " "}`_@3bQ yX=  7IF&?Y\ĽfrUTg~u3a3t-`z&BC0Lt^ ^ VZ4 $e BS4P,_Iz0)s(Fp)҆4Ky*6d0^)]+ց F֞L)OFg`~)ZόOsQ D(| Lda5`xk'#&97 :BDL3 0b 1nbmlqCk%80a .(+Hճ{ 0~iX:4C6"%c~Y Ҹ*K92 &x<1Fp)CUTkB2!-zW;Òщ_iIJ{Xc `s %;۔^`4 6+T K#֐a%Q*(ˁm7|yr9Cg\ض/'axLaBٶʰK,ps~T嵗)}f#Uc2k+G0=ZfC\96ֶxiN U:vkvd=&ij;H?ur*64^qMiǠyI@ ɢ٢M.xn8a7L7TS?"cKܳbΤ4ԻcGܱdzY>^w N[6㞚jݾ^oٮ#9j}^gW"ܞl:9~W?Ƨ߻Op>w]F~{5iboC}y+en;C;lÏ8JTp¶Ma/JzV 뱬e%;iY5?o_t: B?Y)\2(~q}?qپa+e,TCvߡ"hySeeOr#dp߻7p!{8׌fkТd;ْ8m}Ϗ7և߭SߛX;{{ߦUypN\'n=w6ChRU}XF?.* {f[7s#vYkW-:0(v~]>dO/N됗4q71T TX"۫w:%Ä?VqyаP:T* `i~oZ^1cqW 1>OG2O]2j7r?1mKE kÒn*Фa-Vu! TW֙=a/bƛɠ=N @|-f F-yCT,cp$/] s!wϺ>(bKpRXS?\=;mQ1~IAɎ|X?Nxt#euŐ $]g`KZۥvx<%+zʛBHv< DFMma=Y碪NZl݃vd݃vdڹqCT|"E7@;24Oavx"ހ\#0b1;09qԥ;0_#lZ+)zӢGR[]Na*aa&s}$"r#(Zd,qDǫ'0Seva>"Kk:"8p*rvu!G rD:P։9Pq}!:VNa^R!j8Nu"`Z; ('0tqjq@O(L&=L:ӓ0>&Brp_98Pd%;bā-s8ψ^&F^&Yrn&Wm[5~jNm+tGM;ԣ⫗Vj`EW"W>Kjz.ҥT,H>ۀ)J.+.]\B| ޭdJ$ &qr4 bYD7;K,.?Wi RVVkg/6CuuE4.[_J>|R}@7(B]#1c>0Etu 9N;*k,Ehw)OQ}V5ZJ$Ś.Asq525zfC JIW)d,ydY 2RL򔬪"T0FgbpT5”_Ob/ ݘ8U/>U_IFru } ;,xp˿)82e|CUY46f9K?00at}?Ib#,f"#",Մ!eٺ2M?W.rW輐9m 9-ܘq>E9 YaaT=z3n'Eq&3e<,yICa09&';=L=/e_g#ՈGדb9`=egMXVf5$U?x%OOGt)fb8ۤI1$y M&3dy蓡Tu޾UֱQf"{N|~, ,Tb wѹ &=V6|<@80_/K?*ocW@+;IGG{fT9KK= #/}w[-0Èn Jp7=΋j Ϊx9LkT3Wvہ z`'ޱYr]:\\4N+]:^5?x}q @z;",u):%CsXc;¥Ew[1C7eA֍^~ՑmG{thQji~Q]DCqRXGDk4IAH P,ID7Iq˅l0Bws8 {8m ڶS5.FqWQt3|jUA|+G9xEg@_UUNs Z'RoI@W"yAH]l^!F$kZ3E!pDt(")Y'¡;9VI$x"};-f8Gס$FP֕*rlKAJU (zRPWJ($t`Y8>yь(#r#'BKLaÄ5w0״|hOiT.T,e#iA_YP0Vޑ~q5(ё l$tYF@ʖR؜}c?ү e̹)Ɩ+-.άA[\"֭ 5M~9־]kzsrp{1?)>1~dwU{ܘΰ?ќ1goX|vҨO\@쑑{$oR#8L ow;;BlFPzp G` 7^!\=JK uP=|nts6?xP|[Qs-^H{xDxMǏnv # ne؞[`¹kI E`ۉѕnÕnN&v9/ԓTxgzmgܛg/iugfWd7)|i`{#lW4y&=lpW:t/pl*W]Cǂ<0\'v{vϊ=ތuf\S5ҾgO}?0ۙ867V@"Qg'=ƾ(i.wJ0<gG Ý~=1"񆪠_"Gi #m\@3:δEF(}xLnnP✺l{m:HϾán΃: # ַlP@PHJnj *kT#SgRZ)=jJg^ҫnK"/r=h82qvZ$B#xx5m=#w_>qY FN1@7}Gr9#7Ʋ8sSl`xwDe;}$O;x}YO;[V9;bw˥ٛOh*ЄLri0b25 (ǭ11'UFI먷~%a|(+nT%GD0ߨJzT#TItu F5]!nll]ZVs" ] z¨~DXscpf݉6톇 v'zt*@iu"&2 ^Vt+B Z>G!b;5>1+Ԋp"p/BS(AΤӋs_ъXoZى\ldnzJ/Vu:#+/;8a:#NxrU^щxB!0 Fw{6!g ,Z$M:шR#B^jDXшM~!|pL`d7F4"|Qa ҭ,j"iV <<yv"[3ע|" iW MRLI#K6\e<٬PxP%R; V p4ѸU}Hth_Um5ERBFɽذKq`}%#c P7a^r=b{{ 0k6|$02/cHrX?a?u\QEUZzɬsτe]֚h)ő\Ԝu_DFh~05a8R9g},nfPr"ur ^janY/B!J?E,t8FfR&#jQ jz'9꒞$5W.20iO]} 5.vt AJ=jRPB4W+BBR"C\lFKJډդ T$5;M p٦FO[%Ix7'wJaI6uiא3u~>A7% -bΆgaLhșpI ~kĔ dc$R[^tIݢҘL3̞],ў#_o/)dZAe!&etwg{.GR/F_B#yq2bc8Ƚ 5* ]YQJ漩م7yI8l)V?iNsa#F#Jn̈~K tw<;⑉ʤg炣t3ɴ`φoazbVUPWBBդƳ[vA a9[*z>:HLxӋ]Ø?}<컛/LꀃN`jYlK9tXYj #oulUSm)> M/Lr_j/*Cmڭb,bL6,oF-[@cuuƘ*{%^ylQ d{HW2~ ^tkҨ¤ih}:(oGo5KW4 Lʹj5+>jT~UJtLI [8e ؽ[!{V1ۃOuZ*›]}hۮ˫z؇T:iFx׸ggR mfd$h}(i_t+Σyy+Ѵ.yd$),[s-^Iea&h DNC\Ev5PYah -pOQv`}4_6 .'(G!y[b諛I /t)k'?63a d̺?D0r$ vNBMD_!M3}K6/{"@.]`КEL=-?BMސ H([m)=H6].YF[C&W=7K.XH׺"'֥,հ9%QIݴ-plĠ{~/|6xW,{5dkwQl\uweV~Y6Kw?+\1݈3K#IJs6fX45wjVWMꏵQY҇,~؂5!xu~h#V&VVu ŝa %+jǛ^Zf'h17>L@*n&^Ԉ1\ON%:b״N̹q.+ s_+ÈozzDݰ2O2: RԋcD^rI"E?; D8"vG@Ar/Z 8 RU#l l"wGDӑMVXa>"rtD0uB$쉝=.D@ ; ‹-!`KXkzlnwͮL1Dl:{ JNƢȲs4Ԭ9|(mI<~=q?-90Zv/m԰pِ%T\,bUMq71Pj*  H(5.Mw_F\Ɯc92$ BfBjGP-2TE-bl)xdpHv?mXL-fM-J4ꂦC2viS u:8stZ hlW`nQ7fgg>wc/:t^/F9]iuFe㪽B0me.Bm6Ur9.n`ϗnyg/ BݴCy43o>|xYt5RjEnt~祽ȽYT(A׻]VZ(RuiI{ ?W8^VUjj ߝbԷ7=)J/( VrOEDRe%OtOTyUтk~4Q |NJdPlxgILny鐦8ud4P|Gt'MQO&XݠT?OHCk PV;rvLM݊T5sW2k֟1#<I_'#ʰdTKXzѐV1MUݲJƇ"฀ת4[5җTCRUE%\x`f[U^)VX{ìZu~EFbbtJ_E RO/ AJLq5W!UkBk]1)!%ಉ)Sq]rWU]E!uIL] X4*[Upbt) o|c8 %Z̺뭙ZזD Ƙ:M<[<d눤{E~0lKTݥ/äuobB!"cGJԙ<6lGLjJzA3ʊapȡ:;s_`jz>Q-e3֜.|$u!A~UJ, s %T9;\6JlgwFIj[*YY!=~z&M,qK @ v7 j S!M^ح0YRlJ'$+BPdnjÆmͭ:ݘ)řvg[R09RP4W myc&`4jڒSzҍoI"_\灉4_:bc^"Y|ΨvlGUݬĨ|w zT +/e&}@| 5 *!HZǥYUm̒^zR`u[>00Uۿ1a.T"@\W`r2Q׾&<3 NE!x_qi HAøWp_E㤫}ʮmXQjk}W&Q c *3F`$aʱ/i!>[ی߁`5;5sjRI(n*M ~1T?1U,xC^yu 4q51&3;:V K8t\N/K$_5w@0 v0qjvU0]U˥ ;^ܛ#B5.#RTmMX6헨ڊ4V&oEgQMv wx: <͸Ě&W ^!67C\zm+0HI'n3qX%o?"M)1)E(_56V65l@=X3G[4eb?ҷ^UMȢf,\lP%U6:'+TD\9{ޯ○q%kI4|MhzҍA9N|cȹa5gcF/ xQ J?UpJ'B0 i K@و5V(N@A77[bh {s[=%PϽwLPŌC͎:[BGc @ Еr7~gz!F@b"=|LOHC)$(|2A1ht&T"}=&OyJ|͋ LLȢtӏ=cV1v8% W0~q݄9ǡN U\+w@@_ *xR2}SZ7Xc,^Lӄ fګa`axdf3jVrY}gUAb<\L5LzQpf?Y-ڈxވm`r(3G^TAܭs^򾀂>obƧ6QX6+z)~\X{5g_B֪78_=M;N>xlx۱%&%E~#'V C՚Tnr9~2G"I0  W92*[tɣ{Y1=95\_I(&ݖZj[22E(aY2n#Q"ޥf=b%*[Ljjti's) ̻Av*4_ w]Pܘԓ 2cazidwV364!ܛG`Zi7 PS7BMdiTך#CXǧʶٰj)_y9.@KGV5ՠ+' Էu'kc4 ӐsSh+:6Ky#,e/ @v:oKQh+$7R s~1_;/4co0[1@uz}?+.9DG"0 rAjy<px6lٳ9Rcw m3ذb 00KWnVdԓ JvW˧(1}]t&?8[`q|>@6F[8pջ\vM2qpNuC!@ -UITb0`NjPMYQ63c0:Og[ݬVo=K꒼5kQV1-3) 3JgGRR׆l@<4E8ezq.Ū22Yɗ` Aw"=;1!7ossi $Fڂйˇ ܇Al!(ﱹ߇:fJohGl.RWS[ʾ6yLOH?dj;ծ\>,jK ' -L9B}G=}(~$iH >o8~p^l^ Nt':[ 3K[PV/8PezP/c؆zzC ]:JՋcB z1eKKz۲ j 2*zŻuV/>eá^{9l@XP}C$[MT/coṿ^7GpV/3}hq;^f^fQݨ_^bcm!0^Ŀ}4vCx֭]ph]fa$8d0iQ.`> ^;tky(Hr^< [~Mps RhB L9G ̮ 2Z5{lF5*Rs&*,+hrYoo;y7_d'p?jz{W- $L/W =( u~ߗ~k]uيvOVx*xQ$wjEOWJGνt=]8ě֑`k?N|-8~Lɭb(^Mݪ>hᡕY:o1x/JZub37%xC*r r*m%ܬ0.|͆` f<^4,#3^BK{#ucZEL~ы'fؗuYg(̵H e|<§`sWl]ٍr{T-fo) n0V tbxwY~!V5@6f& {$m~!Knvj] szp ć@9,wtߏs9B6Z#5j# U\ijD(/=LıZ/g۶i 6pS?: §]z/;AG_“Ԅ6`m:#}5K+_8j_$0q#\`zG*`BXxN<+A&q+q'%9Π0H;U9uKj6轣T#mzHz:[Zrm`t6H_ټL֑]}Ӻ xS>4ѤsfCAΡIS61qtV֡c9#^tY{EIkh/y"ep{3K}6[%]lpN˿XW`5u-1Ft֤`@$ dǥFɂ°} _!Ct}OVD9lW$bB) )z⯮Cft}uFPqs%U vjzQb5;blPS~WO4Pp^KEshLUvG9WdE^Fu9}ȨQ]\}/^S<S$UߕE0,"FJ#W5ƪ ڵi,(zK ڼZa*ۃ] W f]7b2;T㴔 Q3ޡ@Ht+=ZVwߛl5NRe\ʓTQ_ќPUf;}Z&O>`/2J[*̤B͞y%v3{.4fKg %/ީ 1,ZmZR0VW1! ,$tPE0o_AiDDd@(CU>T'e֭5g$Hb` $eMzr,%2Ɣ{`eO +S(mw!}r}./}k6XdTQ)/P双ґvnv-ׇ@(|C6(68nGvs_`,r[X؍~NӼK P̏|""A[ɏ ䷯q0ʞYʲfS+b`6;C3FHk)b1 %9Yc0􀇚+ ]>sTPsPWTlڪU#Y7{k&3bD*PE!PQiGSz ~x11AW |Xcsbٔ I AV-"x v5c!SaHϱ,MM+ȩċĉ'{; aOr[1' =l:t]+՘YǙ)X_h=2"˓fϔHVt]&SPP%2=렋l.H R9`븍K5ā6'i#[4 <]ڼ`C";d>)ޞUv*% S/K0܂1u&)WI &t߈Ӂr?_`D U%#`Ih&^C^`|ÚW7Ֆ `eęJiIV9B7nFD>_Vb΋:2`WbBSMkR k̻&l־IŸZ_4\مm0#Hr| j T+[huPR`fCkw=Gu b`,|*rGt&,g.ٷ` phو)39.j8Ŝe=hd4MU>#Aj#ÎwjI}|] TF& k& é+/K>$NK=oWe'S.%rF\=w1jh_"S9y!W֮i|$N$g!%:iWK5d|v1 8FRVS4 C-Kq/:WCWjEB|͵GKm|eE*͆jO/ںM3B (jwr py``[M5j^bqHtD8q#rNTN]IWҭ,F:;?6Z:d`XdwD M,)DNuqhSSX$`qō$բ;f[b{Z ׮.95CYZ>8yCrפ8`tfMY/#3 s{Y΂+Ԗ+O)N-xQa9b7ufF1QLԫU6]]*5;iE96u̱b~B#O40玸/:ؓ872ei%.9(3:$=b8/VP:OT ')Ӵcc96Øg3 S_gqMx=ٴDYcH̱_9 ՝5V/bwwYHTZ~Ni)Qj.XQmݣ#X:ޭ|К,B'K1ݥ};*8dKVήϣUz"TG1{Ĩ1Տo$(i'>>byf%u*s[6L)_y/F(|}Ɏ-|=E8t'@b~,QED?aj n' fS-BUѯc#z)Mwʏnh3*eo +fV`oط?Em"=|=x!.V #0Uue i͢=j{ zq>CR Kj,ƴ{R: k]3UtwH*_؋X/4":ʲ_Bzx &JEТ#Bb@t nOJfyݒW;{J 'J{pKTP^&bf,5dHR @i&;\-Qς*[fl 9M<Lğeu3(Nk>!oW%a լ5 QCۀ7(;jK:{T햱Y.uj]Mt#b#V"CpwXH$޴T bF>iȭ[i&JueP(V;O23&Ieme*@.A[{ ,%WZwb992EI3SEx r䭬?*GzqKn{0q]#Hz!0<'FA8enUkjVQ3Z2}Ld3{_ᠢӕl} /){ډ(;0}EשW؈cOEWfŴ|DFOɨU ?q|]y¤:' ?[U9~K9nfk]7eHDǺB& \ \ʾvC1qpAPJֶ"3+嶺Cmv!JWqh%\>VѰoۦ_A\7q q9Q>gܵ/ ʟrŒuq)+Eoc*`F{\1oN%Ir)yQ\C9)Cs#\#2pqKt9@P}ĤQvo$)SESȑwva7EAy'o§0لN1|25:|2T^78AAx~ӤIJ q.r%sC0TzuPOgF~M RV C9JF25"h/P"腇- rj҈:뮐"$4x32nZ UЦ"@=u{9- rXV+=\c vuv5(e7$cHHZ6 bCln^:  S}Q _g,lG\ F0PMe'QhP7+x tj^>[uEa`&N 1is' omzI 0dυD6D@[f[(UCm߹_@b3yhGଆaꉄ; Y.tё^Y"~IٴS/\6n~%'Cw=b4dW^f7˩`v3{Cp:j%Cx$/-zj = v%d7kNO$͟/ή~s:ny{ʘ$7s6Z΄eNHqFy,A[a:UU(OccT"bly(W#1v\޼Ӎ4omK]8צ/NQy~Bx[lS%T!Y h g X& z\璻⺌!ɻyr/4:PBVHw)!\k TrU,:*Qd"eu~t9[^n =(zC.~ފUR'^ XY!,/C,yx0*c20vSISolcrώ\rs2J-Kkݎgt4o^\AQDX…T* g9Z%2N*HA WǪ13„خYv=_LZ.n05 D񑴫z""F'A-gZa&e+T ~Փ/4%z"}8I8Β&RLCJNs 'PX,xb_:)0!c+kIt[%T;C/5  ԁC\zT;eCL ,'XN#Yr-?:7]mJ.hV:DC4Hu;wjnsnUΉx+S5 &k\(""pDJKuY5)c6먛k{7[pQ雮 uSyuˍ_X[e>.iwBiĻXv1 HXԧxjm窛ݚ8>꩓Mro1mv( +~zNjP*^3=%?r̈q~_em!\6w!ɚ7u{=g͗ZVW a0n%Nӎ(P/ %&ԣ zj@^G/C.4h m ÂaX0Iȅ] ae98 !D0c-4k?vLdF0]R,NTrcȖaz8ƌgs&e=ô.`egX<1iΟI8I("(]ٷ[ k+B<6#cRj+ewoӻڭ8α'}dp㡻9߃u/'iS24CKoipwؐaN>BlTR%nGG{Sns .5VD1yT߲TDmmcg'H Qr~{؀j [8_0H9 V+R~ X\:?y?gV€mMCYtL=oƺ⨌Cv?'H7;7j? f[<F=N@yn`/C܋>uV-.T14ש1 Z o 20_ hk^[rdX+\,H0UcgTwXF"rF 5ˊAJuקSwN2mWI4\wu^Cn%[bD&NVx^GeHpx0H$re$N;e j,=Dj5¤1%N2J?6K:w^VQp\=!:/& 4Ex-#:AA+=jjc-󍴯E~6~PL_t\N؁%[(e%ʤ~ʛ[FMg NFjvO<ˆx~_Zb,\b<@"}qɩ@hC/LY4!=MߗTnCQ8!R=essӖ_bBѰ MZ4b Ɛut}m( VK؈h#6%t5= l"2n㆞{WBư̗0Y 0xG x>B}OTOcKcx ݖ0#@ h`{/H:k\4LxaS54O.5p7!ݞC+)jR493̋|`` py(tk[>WDC+Ĕve,yTMڶcEA+b5%T 0ˬě2+'7_`WU:5-&" AWScʽjWW2cSrp* ΃K3 kc~9.I еG!~qƓ-{@X/2(;t+u?1ق[x}טd]?eQ MwRs!xο^CM !FE@H|I7W ,qK i3:9ZH{CJlhMҡo/?aSy(Źՙlķ)8Rmޠ0%R;ᢍ;c":uf5 hT{:~կUvW*!FRxL %ݙܬ,"i ڧU? 9/g>sZD!ʫ"YߧkedSiOQwD!p-1Y2f3\WT,}mlw v : |7 ˹u)Y[,HFnRղr4=r?5O [)p1L`GNUtO!̲RXSl!3Nfi坖@3wʛX'E-Tx0ݭ1 EvܑY@@lL6܂P'c?P8o CJ/bulP<|.ʖnS[irF0X3t 81Y~H_ʧ[MJ1)Z}E|Oݴn`܋ʯJ^VR 7-cec@,/}b=Z;zI,BQuh=%<%ȱDG#o-՘ BNڬ*s>WRTn* K3FF1'_q>sRkX?T)-pƶI^HG#Ս#x%=KF 0Xx<43"rD) kUgN52eZ$EAaJ49&]jt>?r$%K"9A'ASSpn18T!2A˯$17čԄ]!<@\j 1pj hy*Dcݗ߿5m'CcAj0 gAi-_:psK)ju$ 8yWb Ƙ>jxKdV눐V6:W&5_b]iP^d1ўL+x4zApPÅSHO`\3BéGs=GoUW7՝RG;T?.7C N-_(8 h\(8 NSAFjnR}[%8K^ 10TBp@*DG9:?ޒ HFt 8͍^GhqXũ3k?TPT`{:˰"A:^cJRZVNYVc#Jy5 'PX=&5<*x(9DqIESU&853u 4Us \KLP~j18$ɝ."WFT 'PH@[/ uR5K3QMe.(&Yk,PCa|Jz8KneC;E^ P*Qû=?Dl#/RnKM=ZEy<+=Ey.[zb^1_.kMj q;5;EA1=Ϡ ua6:mKvß4}iMq{n$[w*5xqobOA 2Iz"H9MRUSYZC)LsKmϸSY#t/cKnSctmfJYWםKhm1Yw1]:Ky'g\}=rE tI'<Ъ2F{{iԵLˀ8Ua K Z4.^%4fނ"9iM俉$G}BJﱢzfFB Smϭoq/Q x# q0tB*czۇlE|M˴"EgaU5+2uisTμ}P 7sL [ RQ[ÉX sFwC{\*(|ffgNQ>KF9W^S1$Q%\l9ànn)X{fY8`O!7u+:b[w5}X VK@>I"QCjeI ǗyfPم+*z I c nKlN&^^_[%0d%vE fzI?|;Hm]qY8ђ#a"ЍB;a!qr^&Pԇ͡$ߦ 1Pi8nHwLsi-jM* iXkyk)b[,;vXpR⥒\z+X@Fa6 ;K]򐼞$P.Ԯ!/\R\zVۂ@Fhtͥ=rGoW؊qkذlf~|]Pn#PZ&xrj08VtaɊ4ڼ JUmĞ׀maaLfKXK{O tF^D Qk4ݪw,wc YWI|Y^)|5B Ԉyb%YݫlSdR v2t׷YVvQhz^C–N;xju:ðIAڀ Ͷ:Qw"!u''Ȍ Q 1Gj;`,UnQ cOoݦ ㎧,)?vrTC#m5|Ο]41롸.lֲ.3 Ћ18Z?OXaŁ>aCXEh6,=AUr|3(ݒ_lsOaVr4,JQ'qJÑ2@ RiI"zE]:8]%CaU>j\; xEծJJMHU U[~.oJv"Q|ƚ:WL[oh%v/6{;>yvj]7,)(z=_AXC|ePUҘ!fӂK8ŭ0 SBڎEO՛{0%p^R_q;K~d6g+V2g/Գ^ _@qԐjI߄CzƉ$;r2ŝ鼨h̨_]t)K1a[1DRUh+2ACA%u{U@vK΅i.e5K]! 0t[뱅*&@pܖ&I7cdHĴַkǪ3xW'x<֚Ǹ,5Ph)W$MzFxq=sJ$!BBʚ$j^%4Tv_l EY ;ޭ$הRj |\75ԏd55{{((:$P5M(BlV]Cq&zo/bUg5X3~K[ÎP:*NQ#bcM5 vG*M v%(> ?.; P\bmwP[NA*хeMaL)_"5<vk7ØXr% bnwz\4 HZQ>fAqY[oR&(ǸHMɹRӔښ6lThh>[9/-9o $Ϥt5U#Rx*}SW2eZahMU61֗ $|7 `eqjd43@cЩi\E2hg֖ `~*"MI11<3@8|Vڿdxy.X:V>* dKQ|1Pؤ#(᠞p+vw6T;YP v $dl.6]lJnq{/ ASr0^uO))RgHʊqHLc2h +RFKtKqϒ~Eψ39 e1C~ ơ:8jMу56 /uhnBtH 40LJ2PR϶-nE7<  Sjn!gbDͭ(!F} ?IiK gސ崩Wn?)[8Qv}[y` _rMBy0؏}FZ:N Hr?()qrMI:տ gVn C7c5~ϲ7д>Rf,Kաa@ǎ}.ֹZB[sr&]w(vH΋ojЮ͝t=L,p6O[g  ǁ}/P[|if| WUnC&)WL7jս۽)l 6,ݞ"clC`%%$T_)Yp\l]$J)=$*l<ʚܱlMEOkr/QOCr9șay͉i~=^ xطR=Rb 2?يnH5!aXjюć#wn#qa$}Hv>fn0U-nvت" yNHI^ZdU^%+A;4iD+ NJS鸲5gaG;D.oaҎ1 >ӎ3 I`)Tӆv0ꌻKQ0\@\v .Q-(lDx 1(crʃ9m lKN| c;M>XĹ8N.|0َo#.8e0r&ᮙ!EP̭j!eS9k;/؆* 49NQ:k>*5 ћe#cGM:vN+Tf,2d.%n?}|~Տo\]8dKJ-QJ +QQ8U^k HCg6/x5!>s(Z|9Eq1~) `;1OO&o細;Ґ[%5c*CV?j6;L+=]푚[q!D`{T`5RB>7Jҡ(Q0yέ/yKaJ=0r g0S s-1I7m}am)qkby[ )(IY8lؑv(ҭx*rtBs3叅3܏/nhJ /M Hmb&9\O=p޳czNQl'! ˟%ǓMExܦ>R꼠 G M0X4â6Gu`RI7&Ʌbe[pr0p 4t{5KzT(Kϫ`reƑ4)M=[fmkvfaS5[=l* æy`S*|:AS+:u^-/N)F}cJiB6atMV3>mS']EqPaIEWEcwJ;ivaMfwNdP浒 ˼D4m&P#GEVGf;tpe^1T>qlkLlk+mP0V:g٤ɍ(=Ggz ) ΂R,pHkT/~rKFng1-:J ]Kk=AXLb ‰ʙwnK(|=mW;ba8fAnAe<;CEfiF%%n_(:ymAe(Mg&A(0ۺP3zf?\_nՋdefAYPC," ̂"CIY쏥}_|#GcxibD|Iq$XYA1.IeK) U}ణR_MxdQ*ạ9J㶣Frjړ! [8$% O޲1pGeD+K'!zdڷN0" |IjZF<6 a;V7?dsQjDA5w:UOn1bM>j,,,zCFiI„Ce3ƒ6<ybc}.y6 fG1S`ۭB;  Sd8jxYL*D;W[Jlv z ˺p H^w ${+q᫚eq6AvNQVe(m5P pzH_|Ϧf1Qybkn 'Wb8 pXoRU5}rW9yQ(?j@Y/) w Ldl"T1cgIN ď/~$ 8+Ko<.Y`*X!0pHdyeYې}zۓr@F!a}Dq8ρ2B5im&li)PrV,SV5.r,5`$#NŐ4z$`=/!0 C fJC f~=YLG 1qe7 .}^)y_;1E {t厢P憗ahw٢ ÂRlWtZ@⤒Q`KSSf:$C,f):9;[ŦZe{ 584J͉UN,:݇º=LmP NTΪnqH*g/}HREtlħ1P[Bv@1cVݥ#V wb" BGO֒Ux y[un7M8Lj݄^v'R x͸ZVj7ZJU.LvtԩT8ٗ-BzyUNtsi藬=SApJ]|~)Q,>ĬvTHfLVg6]3r?_ʏJ0hcr1[RxJnuP8a)Qheq!cdEo7RdxxN YӉO$,_F3u mOqU G9 ѽne6%1ux-Pw1 vx&]u$CKϕ:&zςip.xJ#WT\-Xg~)czpu+ nڇF߸sP\q vꯛ偊G=|StY<ţA9иӥrGU{s=x~QFT7 A!VԽ-2v+\ڮZVYQiO3KKBڢx\<]o aEb\x4(gr~jǛWk6]rfCڧm6l5~gxyLxXgIu6\K0:&u@HXgU :jb|[GX?:KBr:ðu8wl, U[gcXg`::j}p=u6zoiPl #lKΆҴJl7k|\u6JlBZgC':<:3[g89dΆr4U0:3}f3uѩOi &>˱^OݼKT0s6KژGZBFxZhuB{#(iaia/,ѽmynlY6~L0y,i oH"64Eα{c6RLHA;1(>OݪO9O9ϡ .FޓܘSm-); Jr첤|.1KM" Lqʤf:4v,?sEizT3#D Y j/3<+$%Lpv}k8I GREnGy֝n36kdkLС,乸գjVX 2.4t7[;LJOfpZ0Ew6DXAU|v[OW)y3ZzܦiiJmʾ[4a>~[KCNH%bQ7>*r_%>}k#| Z_[͡VS@F#|:qj[]:[FO=fSt_sBֶ>Ba(L0(8]˹ +#|8[(aE$ %Wdo  *fg)$:{?|+atK-tdo-9B>>tjNf0^PZupBV!Ϟ5T+FHŊ >ш&(7mkV[;c& )8j;j+3өvʦByo.P0&sxy۞%Ss( QΦzd{d^F)0Jhs2vMfdS፫r,YMNOT;vMdSq~e]{{kh#-L Ù=tH)>NrSaYwr["9UXK,VBYu7Cq q@+?uJ՞_vJՎJT=(L-x)UH\%ΑSW_9UߟȜpб% k3tȫ'T붱IUiT1s>#*>|RT[ T*hʤ*., uqSY []sz_%OJf_~ؤNlgnǛΛp@RBH>U%@ԝOᩜ+{24@cD>ebՖ(B#'DK:.b'N (N_Ԯӈ'mh1@,,&8#X%_3PNM P2X1'vI Exvb|[{햟ڜX Ŋ1KՈA9ϕyb{w=#,ݻ.t-s|DV9ty!̒Dz{i[ C'%7n&=/c/7~>C'* 89Wܡ\ۿ,э";4D v.Y^6B,IN*0f!ur2z Y|?*c ;%|F;*Th7T yRRXCkdCCJYSCʋ!alSK/:ORѐ؋v y<5H-2 R]DT WT/֐jXCjԐLyjH[#L8P3j/SCǑ[Q&F]:$"!=lL(ch%vL6r#,:fV@hi)b ce2qXU0LjN 3 x_Ō>Y͑0I$պ5̬WY^6`2C+HWp":@Ya0UvJhG\1ܐW>qCR\ODLehLy!YI$PdYy225TՖCq#|7A1S+7H3>nSzvHV[D|—-)fiAeUTIr\ fe|I=(tM TcEuD+(GAaJcgPe&R|B',E<&DGNĥ@ WN\zOQ揽lc*PKq#{߾q",s.T_)zː6%EUcf V ЋN1L~ڐZTǴ (drxPT\p~,uܜ1P11r{wdƸO$0 QMY=k?U2wRX=մjg-(c,QǸn{b7b3_(8@( $ Xl{t$p{2j*JE;'ppSFcka@v\58eEH de7W"c BQ4n1fӨԻĂ\b3y Jw*GH.yJ`/~,/l1S&E7[RWu7,LM"e9sZkX)L4r!<az4UvU/IxU` YZ| izjðH:T[%bh?A`& s}4%u$e*>q$}lz9Z1Dp~F{y*sr&.Mh`a#=|/BKI>!+`ٸ ZZzLN:-ӳZ1(= ]wͦ..7r\lOnm^Oga )^wULjOP&h`Tq2EIu Wnk=\3sPhArRdŖˈ4wW- NS?IYwȈ5zy"<}T< B)ӳyFEX%C~D!jۇ)DyE!:8ͦyP׹yZD!d K%pp9# Gl(~&ca%8O6 ϻ)X?vne0tϰFR؃yluo3@¢1Lz*mKnMqvK[GjMFSEd US* T1]N8T{#[`k0>DZ]AXxL+ ؏C4Ftw jqε`h[m.B4X,sׄvPZ̥ F]HCsܗ*x#=̤u׷ꄹmrC_ŹC뇬 JX [ e|INsRVyކ-kVHBgg{ֽca~%,S+jn}8mv*~B]3RA(*7KT#jnB%jK!XnFݯDu}\VM+D}@"iPV~|v%c\`C( Q t3RET{yBuUiOUr \FbJj:c봤{kq.]i̲XKǴvI0rqˡv 4]aq\iO:(c4ǒ3?y%8MD$~/UsxSe3CI\ ׫ KTRm>+ng:Z+)YẤ Js-3̼!, 6KdBmY6I\R>5_ba-P7{%MB;cۉݎ2W=ΈOD9\ŬYzS$4UN,I};gbU 9g:t \-};rVkQ'>9 SbJ!§aUx4r|=^ͮaVo=%msu`ۿ0KZCsxJw,l{T+. `ݶů-˶cIIS@)˦k2?ݙ;AIE%3hN6F%3h:Awªuۧfz'6л=q JJAl[RYfTǢWP c؜fЌA96z62a*X/)s.zXPa:W9gy'%%rP4[BfQPZf : R3T KWE2UP5Gecd>9nRg*sOD=̟J* eeM{ Jjr 1$MF*rk6dod~$59p~*r[PyTu=n]rzews^nm7qˢthݡc -}ۼk6ܲk fm }YGStH"u-\SGu<\z][=!=STrb9P }Ys InXzxhwp -ZI;A1=)GU-]1iQ~W8 Ŵj|gV=<ߔ0qCn~(Un5=4: =û=쾶{v 'ݳ[,X]Q ATv'oz}owddeon5}zg6 زwm"T(Cxl9[f0&%nƴwf.ܮQcidoUΞR}c1%hL{96#4&Dշ}Bcb]KUT1M^{/a(FoI}gE[P6+B ^WQ(ep[Њs.(cҪ.kcbAeDUV(pL;݀cҪgq +bݮr0.쎆NuxHw.tqnT$%\Il5>J8EHn'VzzLn˪RSG`U*ݚ¸8k4o 8O'm7gǸXb5 wdQAa>eQHFiJnRL+J, U˃r‹z<AWGJ+K,\i@3; 8^gŊk Йk<*ZZP[& ]asH@}; 䲂pYWkcVSYA4BX:d4qYANh%4ugMdQuaIc1>yYө+HROa `Aį P+QY}+]d'* Ui:j_ 1+ͧh^XWZKu' Rd-@V"|c]M/_`gW},v5'q'K ʉJ{ǔm~4ɢәwֲ /YZ&l\dr@ɴ61 6Lnp#U#Ng ;-ud~k^lۅaB{e/')h#r5y^7х|Y,0^(94 Zm帓1rc5Fge5dk=xux9IrAQ$xuuNW|!'ÈUV ۳ק`\d5UuiJ>\jh_e3cє|[.?2FbFTp5t`~\Ҝk@H)u sb%DxAꃂ<.Œ':5ɉx+V˗Fb]5# (be"OxWsYpW5RJkcpW\ Pi_sC ̮T85UOB:iq-ݢ5 7 UYfgq:ԑ!uP9~\ڏ S:*1 %msͿNm|)n?[mM'"oolJm{~A~ cخ TD+MjlѝPѕx.`֜7UÇYЦK1sN#ɞ_{:<UpVw8yCyNi=x>f~E,0b\/ ݆xj9z&,/@H>gU|yςf#ܦvuf H׬Yi~snNEK &a,>|H=~sV\Hrd׵sWБL$STwӯcR7*M 3jKȟE 6&aA ~_ePR!یr\7&:˯nr:[a?TNۀ/V[Bk\a39H~ A7"L 9ʴk8x &9ϵǘ-FXV\;?HvH MQ:2!}hg&y AF%0/mMV}RϦB|_!-~Eo@ GrI>7D)h)]L+4AS}) E)WpӟISFS9 h5ծg`lԋOykRcveC_*JKC-)m:--gfЖ3hÝKF9/rM gFr/E;$@SBhw0 -`x#Fٵ1lE(wb ZSW}c~xLzM2Ρ8>b1$ s%Lk2A'Lg2w["ByՊQѴ5_"Q{߻sp }g1ܔiEMq&K 4%6k}ཱྀ2m?C\5[,/l^-i!Y .4yxN?TMUm'"dc;TpXR[XpV>伳޾k<a~7RIt[P'91ciYU8-գٝ7 T ax`hq_M/n.3icz֗ 1qJQʰu%LCf:ah${y9і+j])+_`ԭhˮb yuy=#}/g,_07^LZMHI57pqM2 TdugjH" kY(ڭI?{؍;&[azѥk _kYcB[%3T tTr-t/Ue G_v >{=E?^]w_W4T 1im=A;87 ?2Pc!H3Ki}B@SZ+b&Z+ avz9-f}yj(vb7p(5L:W ^E_HZfX>&]+` vYQ]acox~.P]E ]p^a4b@a@#Y}W,SHq"5t:HNsk}CpLXdiH|`b=v״{ 3^}5vn?(dpFi.o,Vaf%V57ΘcI>INӥF>wALsD#EbBg-^7s" Ӎ-޸QL٘+r-HTn<,P<:(Mu0U&E_K2 Gf ;ݏ;2hWO˝0Fw% C\G*C 'ʏL ꄡ'rA[M7G,ŭ*[ntD'61lQ +=yv-"_uߡޣh¯T\w#Ȧ4@jbI3ƀV #`@ m'GMEg(ӆh}Jy`CgNWl+K 0/$#-ij! v-=F~l fP (M>z3:y aO d m {jjK2. [n^~)c~m-Px)stE@7a1z*-dčVGt%ŝӛ2teq[[ɜ耒niM.Y>L׀Ǝ(ù!!R67+Jgͻ !^wvnzl,l|Rw킦w=68JډYiE4eR@ػ'UžJe9ׇdx?uܤ_ԡyߪa}]Uw1;,2sHβd\$ceI!K\j40"w8 MiZ?C#XtA1[#{&IJAIdﺂ}ɐ'IJt(= *`fCY].FlX~ K7|DIqau{Ψ<&,[Ś@0 f%^*I4/R l:QTĊ#ϷD)~GY⁙r>c}l_ VW;][@1C )tE%t&;@$%2[@vN ۬:v*{ɛ]Gw.)WtL%t /5`'"B#QZjA!`@5>#\lLUnl&$U[$]5†C< i=U ^>}o 7kz->S5 TG&!k'rVzs_ʢ@9)lkb:7<riEO֖)|EMPxVcx[O->bX O9FhpG̳ŋ#_mYəMU;i7=ͱyHrc.Q<\ Nk1Z;swõޟ[ib47G ЊEP7kh`f(|Fmo(0G%b!*sŏe*Jv~I;4Ogx15lP߲p,URw_“{z;^Q"T;/<6큸\ܔɅn%!#JiHGJ!_ޜZѼa5LJ鐧@0;s6©|}E=Eh>d?ozboEct]Z/Y/iκqf›n6o}Ijvk\KJӑ_" PMMIioZEp1j4ӁnaV>,K\>COH[͚eRsg{('R /L Wy4Y)|eТͶؐfCl7TWI64\}70=~ Ȅ҆4>mJՄs.̻q޺@ `I+_1,!\U~<献kf-ιE{t7ݢp=2nCd. [~ n7N]їoNj*zxl >ㄤO-Pi)-05Wlh&h3KRҷ._22s!C4xܫ=֣ c/\ֽ3XCﰼR.ȿQʿi*y%g2⠓4qE|̨m; tUkRzC$@] zd'mV€WwQ2?,p[hRbkTz,@CN~RuW;nyNv#؆ήTCz'.Eph'km)wT=Qh&BUzl2<P=tFIdPr?;7!9ȤΙT:qHD doftBy{n/ea1 50 zFپ拦+p\6 vƫ ZǠ+kW kpG+0`W`>c5 'p\ɢ"J.FW H8]2,Nޏ8¬K4[=}z8)84$݁#HDO|#Gt,@-Ї&mw`[(d*ZK?Xjѡ8.KeЖEag|R L8)8}k;Z@@F=ԈX *P(Of^azs8^j@PB-kfuI|c_Ԝx1*{Gk.q tWxf)`l(w C-7OI*?C3';20jJDGU%@_Z1O,if~#ܓi>^{ ]K >mIjOK.IMWBaiH!&0ˮ_/L5H ڳ3(;]U';HJ*{B4R jXȹlfR).(aQn |2)$3H{]'ung u;Z#<>ϴfKnij+tXϴb#-џiҊx,PvowZ:ț ["3Po,eDL/.}â3V',y $N/X|tyM9D3PliGa2bBpv)A3&Ŋtwq {~Tq\г&(eunZ|./.8<E b &Kv9x(gz}$ONM=-ˤ'< }t"|b6cg8 !r5]y%?F}['դfvU2@24x1aqV C itUk%]QٸmV ti7D쮜3a؀վCHWb󺭈4BP8ͪC-dy8ZwxuID0ߖ驗w GKmȋT\O֣6#hE6mr7 tsITp[HPC3EZF'>rcg Ӌ}QΨ`>3W]v+{1U YީFH٘){v''_~4jcs;"/gT(4rAE_rL*rwV8v|^ʄ`Z31QЩvKu)k[Q؊B7ѨG5gJ.z !j'5X&-\܊kcz]@{Fc/+?DIK74xJј⡦MJm٦Y 'גxG %*j-+z ;pzOTTO fs6B.Zs%;˼FjYő6/Vzt~U1%[`ꋿL%<7U'4R4W|03gꥆq~֗&9N$d#=̦}"N#0~NQudRqbPHφP87R (l3In>7-q2i$Xw-*X(6JH_x7Re\?ǔWW68V@[<[O/Q.A8-]q†ۘ,eY9ew;ls~>̝ s?̝Ism쇹x};l>͝v'l0w8/0wS&sS܉al8?0é/Q4wZL0w Ntp;apipsp0w80wosc#k|ۨ#R +{FSPqwVS,b9eVzs&"0Rs,8D45RP+ ;`oi-^fΉT]}~.OM/}#߫_yyyMpGyzMpBGy {Ml8Ԝg_#orM>&Z]_y mݎ g[ʛ81$jN+yg0y@yxϼ :y֏ `μ n7Ay֏ Ngyy|#o}I/K-]y\#o7̙7̛hʛ̛|Mlxk9JgāW?&y3oqMț>?ܒSgyyzΊ7m;y<8yaX}B2obToMμ 7țWyB{d򵰔"LxdƑ.3F8Cz5Lpd_)kY"G6x'`͌׌:'"x=)V@<|ZHT`:^ވqTKpw63Nc9K-r(7DWb)dBv YȎ]HR-d Y$'84 5fٱ3)YƓbm;M[֏4G 4$90{S3M<_\Yӵ!t]4 0[>EL)!.dcp#Mwf3i2~͈\~ow Ǩ4.d8ǻ4=={Cʎ2bvhgYw _zi2K4XMi2ܟqXnP{v 'C6i&IsɜE.Й8ۙ&Kا/OR^Z&Cʝ;MfwncCte7ڳ ࿘n)nx~6yR]Vhu UoM2@jεx0=kԻomhj.Py`85/H?.)9鬝=)> 5-!R5dv^1_ϮuL9H8y/<>2rZl|m7M5rSXm9߭f#L(,}cknu+d$:h3`0G[y!!WH>$F^:X{Yr `l*jyt|ZʦpspX<'r1r1fal*|N83yeNaMD{SQtɰ~>ܻ|-SKt*n[*SgiF:UBS`d`|ԝ ,n σܰR`wDqPŇ&;~-:'%1e\L tJ9_`SC7]QgSBKZݞ mo3rhimdB(`qVR ?/lFNsGXaa{d';NsoEadp= 'gtPi~Ƽ"_(k#%z(|y;ՑWfHA>"{!=@GV6"6}x*ZǷFfcїA+.d %6<<;edLHM]O=P&]\aU(~V3殶MCq.Vu(|qi{6]3^ Nڸ2Lu(/PǕPG|*L22nc7K_#3!r3Co$=^왍 BAWp ÷=Zx#:dN5zj{X\H1wx_"Zx!-<q[0!NQ?Ne)RM4F( /Sέw~&Hz xqI=r !8FY tvy_&% js8@-5ǻ(rf"hOּ-gD3Tώѥ 0JpF9TOlODƨap6khTD)O1(2{qyI|6d._Ep\#B-ЬAXOz R19hSǦC"!2,GC@N^g^wZ;X3e~ ɻ|M;~)f^^ǥ^<>v=1dczczu|NczrN9Mh)@h::_:1nuܳcz݆7l /oqLS>=uu-^sz^׏4U quy >^GR^5qL#5u|cz_t|Jն#>:m5)@E0 UCwNW(0i$rO޹0W7rLp {Ezrwɹ0I?N'7J&&_Y5˭!5Wy`h]RkN^QJLǩs2`^'9䕋%!{76F6'-Afd d"IgJxLdkwv0Q#·Xaӎ+ t ZtVPPEb:7umGB ټCg؞rF "Pf:߳/va]ٙX\𖮖{F#}͔ X{m>Z;{O\BYdK1| HL-b Is-uL|7=dZV}9bG,\a͊bl *CڕSJlX$&By㊠ѿ~WI6& Ƞ~T] ŸjdXk=Ƣ T(m6k"̌FddP<3ؙE@DV6[#\k\"NP\]e2_^@9 (@A* Y1өg@9=/XLY.`w5=Uky`%Sv:"fΊGb(>duOuط}}a.Ob`M=1>7jTٰG ЙA6QTB"{2l1JiDPD45`jcqӆC(ȸi,? +$݁!B޺Kǯ؋9_Xsic ; I 4H#6D X(GɦW7B~G`pREUѓZ#zŌWϑIO#9JX;0Zb=8믍ѡY%>߁l 皑eh}%tAQBM^::3Ȁ$udwڤq٫?Ht"z~ݴgӆI {˻o" 3Am4omum>6F060NXfЎ N O hxm6|iS Kiaqm{}h4>6 >q i{|m@цFmk,p+2N Fiumhia!>6 NxLmZNƇ|mIhFF0 F[Ѷ;Faq}NymOzmå aղaOh96hism6S/4 z%::%F H95jQx8avbxGH;Pvl7G$7Lؘ4#U/ZҧDnU l.;Ѓȑj ]6h+MG˜ׇiPoӠ^AuחiMNP&\ri~Gè3C #Kbl(Z)5IVѡ`q% 6FicHı_3Y1ϲHG׌ޓ꒝}8 fъ\ܞL3^d^iJ' x+  ykD{` &|@1FBoR?Н#0c\M9'IP"6/&yxHG1soq'Ӱ!C Kp!. G~a#ZY*aCҜz,[M:8f&~SwFAۈ8ȸ/:0S򊃉;ܱsS9gĠ8ނZ&_RTo!$&&ƷkDXwX઺dh: S5VeUj|" \zJ"0xA70C0-l;Mr{) iN aq6C\rqHԮp/@ݺWY /SzfGj%1()zD-XW$<"uT53~Y0g*&$[xԄ# ^|Σ%!t`-=qړE/1zu1 xêfP֞86zqjK`)j@Tl]z>>GO'K?S=%6 km c0ʖy=DqJ*k#?Σ%Ԃ6rfa1T&q;=o](|C'Cx'<_DbW8Q#zpQ̲m:TM:ڨy[hC}E`Qu)2\;,il8SRNH. S'Urֹ_':ېOE_Yكcx཰Wcdf 4/,sH.()wobj@)30[<.eh`L /=~Z8.͑QG_D*f@8Dw } T6Sđxc%Jn&k~4pJz`" ;bh6,aP;@>RFkp=gxX_ߔn܁I[\>eT/n@?OB.)0嫎6(QX0ӠДk: IàT,o"ɭ#=iP>^Nc1l%4(Dz6(QY24(M>P|>@bnnނ]LeYn$ym~p$AfRq<*%RfmigZqH)+Qǡ9 2N'żnxp]7XF;8tq0j2XA^,?s(l|%'T 8 W`ttYNJ= { fTeB{|m z$ZW-_}旷Ub_`]&mΫ/n;ֲn8.x[ʔruL9Z;o8mlfKU)fo⫅ 1Wuhܜd:50>zX*Kd_I&Zcgb:7!PwyI Juo)[ ~)!Qbz+fLGYȪLϴt= 4gXjs u<}BUoO<-Q r-Nn@8/n3K:TwԖxNrv:[m:rb,ֱk9:oҶx,[ob-#-ŃPm° V >K&Kʝ)rmf NE5HbGl CƪfE qΞbu_@$@`yy%3kH;+-sWטgO85@a=Ƶ3+QrZ 'S!) Y7ȿ75 KK*r f,K, gpN" 52cd9˰f4.dۻf,\8fTή6baqlMRÚu3kr_Ox'-3oSREڳGm%$Kb4^F; !\> cd;="*c.Έ/aP:-'>Js+uBQ:ZcGEuy#%xpG(CF$ o;A` !Ƃ-._Kϐ/1dk.zԞ\V8" K?.4.X)o (ԷTbx5fcۚT!Np+$ -:AkÛ6PVګ< ^r H8.}D˕⮟.K_u?dԗի͟uʏDBt:hΕӻ攱'abAPICַ[eخ߇,':6CKX]7obxThC>VM;F8erOWHfkOՈ{=?BPϕET=ũϠcSvBGd,Ns`"!=S!G u!(28$LeͳLK08,=r)n]]nE@? g = |Y3hdIYE3*ڜO8 p;?pg>p>abO[#8|/Vj})X)<3! & ~n~k|0Lo"wvNKJ&)eRx`R8KcA])Vq`yΖQ+]3/uI\"|$s} ;ȕR⧻'sR8g3B.}x8bIô)Lx=%S jL)SR83UڼDL)|$H)fGS g ږ~K<,S y~?R gghTH!K:$J'YeĘ`0F% \4ǩ-6++NDXXy $U>qLxyzOB_j9Ƽvѡ,gG\w՘w$R'd>:B [oX's|Wq܈k0:_CYj8~e.6h㵢v2?a'rUpò L<|cQn*J,RMsnzDW x +5Уnf;=Z8{vgXVS/*HVsqu{ `,^MX%WizRzRwa!E8eIR;d8/q;4'fn}5 '*_71?:~] Bd"QZ VAssM Dǘ"#՝X7Q(H6zy~GmdX,mc^@0s* !YnƔ鈗f!FgO=Dj&C[pz֡G1byy|llɂSvh \S~2g.R$$jS1A) O&ٞYɿB5 o&e ~ȇ/]vr.e]D-d/.Fp- tKM!D|tH~]DY [ޝJW4_+ ?hޢKS]!2%(ⱹ G1im9Q5Q Ls3 in e$ܡk;\ϙ݈>Jt!mN G*ޤU?aI GM;\P <oܢS썥>pG$]dDYa#}TQyM>8ne1Dj~>7Ća'P[&%i9*augslB\fj. 8450QHHǘޝ譤Ln.Vj64vP4M沀6GsqsY ^\n_EZ?[CԨvs^kS櫇' C}"uFleP SsYߴt{ԯ82a,k8`,+ vdZ_~Y5:F+V''7իPg%Ѝ\WvBj.4ߘme. CtSP׫ay(m+O5r, nrl.{)}JѹiNmm,z6NnD7&r#?.GvqX ./ۣ&&+ca4QOa:ϰ腦cY)JQQ# i:jَUi;9^&۱FmGT-h;@v;vgl1_öcyێufYmGp2zmk}!Xە?ڐtl売 B۝j"7mV3݈cSжcѴm۱#؎UM{$خt+a>:4ujw79IMujl;,DŽr6#=i>bZNFtY|+zOs XN\S*5 -ݶl<| Iتcl=;+^ "mlh)uW8bBN4 ŦTP^Zjѭ#}s=:&E!\E]{ZO0 7f뻨~"ߊJ\-;גf9noʐ$(!IW<&I()/JQ}fBC7) xSi{pb*TFO&SNQvŝbx8O?^.MeAG\3}|ן9 j~)Gg]0IgcdxIY |?;Grc><%&cQO"M8.RlKbc[&U1GIjrJ9 $+L- 9 ߋA9>;hf*(qoLutB Lps1)KD+1f S{a6G>z8iժx@yFT$4]9ZbcҊM v uFuwCje{b٭.iZY4`Mg("keG*z8,9*keke7fw7=W:-XhZԩ!Gx& m#bՀCҰ4&ڀʮam',-;am@;#fӒQZ tny d )9|{UM<Gx2S;PE;gIW/Ysq g2>c>41Vqxv<2g7ɓ#)Y]m\n zϤCZb^2E&ӘֳBۀ/k4ng61 (h̏=;vձ1CMKL>&2Tf2>C^i::`̖hmo6S^]׌\bwо#XrW`+'p$?Vą䇱 S#wrwrIksw;}l!bNn&>~X^b[l>No-6[=c"{+'[m +Z}Sq smv{b01ih Dc,0cFQ4ƸKy;gAڴ¶j=l`ak i1E?  z Y\qKXg<}6ǰBGθOXc=)1ٰ`hnXT~PWhQ o*ueԖ8sg,^Jʲ_ /iVJxɀUWCk_JQ0yrD.HH; =R" c\%9W_-F)oBT|`w^w3{UwU͢n?R;jVKd,WlUkD3lDϜH*Z3μ|.X^jx7663͵%ל~ 1"R(fJm> Ħ)+"32],_ t aݮ`NJ6"ck~)+Ռ+zjxRN; %Jk[C%݆ȤT0ZvKv5dC$o!Dj-ݲ6LeM HjUŤ?5" )3\EnԃGW*a?id1r^Ѵ{GMkĴ6]rCO@vky,NV+ur㚃AjZ=k[2hE$"j-M RܚVѪ NѼDUKxa-% NVߘWoiżo~_ 8X52^6D<CE(B:Ҹ;DF'-`ي0 2f X<t{m }X)׀d5'[w3*ہǕ@j c,Č.gs}XrOvz~Ny2TNZsJ5@#ޚBTf+픻oQמE3W\0vb<+0MEhvգɌrkM5jr`RcHg9qCGwH8O# .rǼx afx9BQ(#F'Li>q Dc?mocK)Ѝ9$=B mH^_@FVU}{ɕ#H?0KmL`_3DA ۚ\~^m;fB,g]%Ё\gai]1q/~`uDU3I<)+ymgrx obz|5TPy`^|QnMxA[wVD8m'q91g]ZBANT냹bpNj/| V/fQ^f_Njy֨L*O/aQ^̳Ez"y-|0^@&$/f5җqE}\Pg:d?h.Njp(<>0Rn/fh䪕3)x1sDuӋڮ$9,T'J&W5諾`JWفhx1chw9^mŌ K7T0GȋKbgR\c7}A#q`:-=^<x1Sb// /fN`?^F;^ӉC]$u͏\op816Cblbo&Wyl bC{08'p"L{CKi4ՙh"c8PC}m Xv?7(x~ >{?(98y]Cgx)~X^}T@6@$pe6ŕ#AZ2U EsV\Kp!zT_6%ǼOTQ 7ԣgu9ƽhz$&RjzˬG<PKBH ER QlאƇߵ 8˅H:Z$BB `7}8S' Ndlbg̴<i e3qA'.2YGK9G {JܷƸ~~nk.&^/D|?͉(Y<"ԓh-X`[;S|%w/<&HK *H #xڜ!B)Rs$KḰhAy'^i)Oi)mDvUo8䏱 hC)&ZWa)-4(-_7<zH ~ }#~k9w&p/82M3|32[?c_qPnS[C7\4P\ޯkaMs$v'@Bv-'>Byk+J.>`3{G~ a(d2cw⏊MP~M\SxKܠxA?mf~cNҸ͡"y'6S)OʧShJ1_-pD{d8 Okվ=o|Kħ5#ڛz,uroT}XlOr ?@@(ՙ j+=CX(+*]!D)zXtD][^^SDCL~n^ H7(Ib[T jwc0[ؚWa;DmصT3){v&6K'EN{sKembemekEyt f[i%9DƾV3ɳ WI4H:D&e"@(<ڻISB$"::WHDE$(ӇVb̹21JpLh~ýV^fҊ|vu{)-bHW.AVk*sD^o'tOe%5F.8Ous30(pϱBT=˙m](sW&ClI1ҥ;Ue) "XΈw40wBr(2q&ugd: tq_ȋOq7ՌQFE gf$#QEsnuh0֕CTKS {yF&wE5+Z%"14:L>4%jv wzI8hQQ9;}-.HUҎG _ˤ1DN7Pr-_MO k*MW>?VHѼFj^)}#kg&-R|vCƚKTo;?7n8Ux%y<đ`,)'9TSGYcRA3 _;rޝCF2Z@Mf\ ]x@G\b 2S)7$OE*sɪ0Dg lrM\xa[\ކ@(O{sd)Z+ >Xۗwr4\P${-#A^Aڽn#Txo>" lKэ: ?]5Z,UwE s~A2K }`z務"O 3՛ݓ{\nApkQՍ=?ř"J}δ^OA u\*Gz\:ۄ>29gl2e+Dж/w| 83MA4+)6T-(naHn7D*H.wF>09}^]2> k6ePUjC"X^8!5(TeˢhH[i$EOaf2MR;Pmޔ®Gawkdlgc~&o;~Q2![#\*) J lw Kx}KYpwŴ7~PZNe.@,C?^RYqq6o6܁neੀ6`e[y`CX3uhv=lJ t\0,xQiNiƶ;(48}CUp_lXqkKy@|ܺ@ĴT^9j寧h0 /b.t , +ywѽ~4Q}zB?p f&U=ڳ!˜:sW˕^gw>fz!w"̻IMr!v]!f0rL;eɝHRE +˝dR4)&{Ąyz|yK|[{R;/h!vҿ>bn #΄&"oOrStEZ:mU]:MܩK4+S|pE]"ќT`/fLJన h1UUY eK!)w:@JX& l֐/ -M}Ed/OAZ:˴5JguS[לu%X377Cn3}Y=g=Z&5{9J!kWXr([j~O6A6z sZonUV- tCņj@ˢv4qj`YsuHe"dd U\O{_Ok5bø^*Ûq9#Z7 Ld+ɾ-0{dҽ' q.(^lMeq\b C'qCNbetЦ$eDDeMh^ (uN &E)P&&̊qfس.wF<8dY>Vh)EP0qϏ%ٴXĘBлUP5&00kELͩxV5YJb47 IJN;dٷOo`"wT:%C?)%87,4R|z Fڣv__yLAM8U01C !},c0]eβ"݆4w3 eG!lM%=Iz^Y0ZW5াeNgGW*V]"XQ+w@+OĨjUGOzY=H˷,"T Ku (GIo "ۣ] EJRj_=U KT-fU IZ`;P-WB9e %- a2}y[Bn݂Z+ >t @;[Xv66EK.Q0$,',!.cwNA x!xY74)M%bQNZ6\,++eTvصfGX'vAW3&Վwq#P"AWR˃g QxMҴmZ9IlYU,-`~5,sy8/M&}(X % <;~yԺ,pe'OP.L/^#+ʸl@O@Cjsal-;2 m]{J͒idYzָpx~"XٗNU#/}.,`ס0+sY:!¢'B-PQ ٓD#R5Q 90L2dmOEޓ"|9.ԏsѽ|D,aU*9q @/++. wY dW^o9ew ٛAs%{P̳iVoqO 0Vqn1$SE Mw7[LDe.f|/ E-ﵻ &Nzk7͸_H:r'"VjFӯcx+RXmhߕZr9MZfhiT򀘘-xT9!3g>s^biQϞM0Z%5 FѸP>}SnJ!,h"!P^(.M2R.)wxMBjOYؗ @CwDy8&ߞC ϝӆ !it[J&.@ mIZQ5LLʔNLt,M47 J W%H#LtN ^gs+QzxTS1.?)b 1>\n +7d畮ñLp]aa$4[sr&Pp" Ĥ !. #FtE]+z[i$Zܘ0r*jj]! P@rYEp)Į۠z?-9d$r>`+,uET0.%z5x{3 *gɆÿ\kA&"u$0vFIwUrC!\Woi0w,"-Bpsv7 .c $]Ey) tG!SGA9gߎl'_LJ\T}F'y;_dpwZ@NEoWUBf hZqV)uGD a)rĿ$;вL5Ta[&!TCAVd4t(چfس5+a@L247w(- 7O+=B8XU =14ߤԤnю/2 ;()nSzHѐųnNYCo$Ke'N.E5%J2^To_.,2xΩ+`tFP^A٨!璝q*D2 g=|[1Ac9vAE& oXwā@ ]3~!;YۀrJy@t`H'B8X,p*`#$\{k(ԅ83bnqfSy];.2 K+i-d_DC?-Bc,Tu)OlI֒1Rrg]3M~򁱭@{_I |D65g*~},b0/їN T#2:٫Ym$QiJ[y:g`(gpde|,_tl}4B]e:*Lj9ZشVJ񾊫O-fAlp'Wdgy{n] HGןd#^жHRsU_cNK:웠̌ŏu<>h[ń2Qj=X[U*׈*e_vs_DQ.'E[B+&6#MnG8l,wH 6<࠱s /9xhtBᣪ3Wz ۹f&ly*M)z]@$_m\URaw&0r—ꗜ@@Yy%Zzq\>Q4;ףUjm6K4/;O qL3BlܵrUJA Gp'$q~๕+3*TAuEw@-M?\s~"N+ab#:=!~İ|WbΏFG׭gjB/*&c(q\1utK.thVOi]֡u~鷯(HJ>$Ж^w_&'%o ;[nhĽoەMttK/Gr'u<[y %~#R8H[67 [ݑJPo뼣X#Z9t bgǑJѬ \\|rȈo ^6aW)_U{Wv ')xˈyOWMsdE_g7[˿}wöǗ\IUA2b.=Cڗ; +&}Xs"様;C@m*r؇119B`[nV~wы[rXNJ\zs,wWbn:6JL2 hyύ~]ūb"}wkp$RqbBOC#94I_Fb<V:) ESK2ovw:r !#理&?uebc}APbīʰN pdVc"kfܹl|τIQFI!u[ͻVeD)r$چBnǩ2F@rYjmUu;iUE{7V~>oh[TA< :7(RyJ[H|]|fm2.#Œ=,9cwQmykR%MsJLrf 81>Uڃx# QO~Sض^2[;b>s TYr@Tz^*WK]V8* [ X%Q*Z bAB^  ¯ oy`Tr.o%x .PqU@~_!'"tUC"Cv *_T2EOV"YM@0RrN ..@ r>Z ;uG/7a4p E&U wIpr)=Lc =(0wyP@$1Be7o\ц"# ZmV7;aFB!}v&yE!ePt[ܥ׋DSRR)"^|CD=7@'l,T+1Sƫ,˙(ɝ)+oY3;~>)5n+]iZp..Sa潛 MySZ E/=Í #[1uń*"L/uv}]yQdKI8$N~ґS\odދMXcF^ KoOؗN3\VbʙUrǨ$ir'ղ4= XTyN3qsTv~d7x7@'xZT'f ȼaf#=`͑༭.٨ȼd#q:Ffivئ3mK>!/ۘIJژyRm̼6fМL!DE)#m̀[+`ژbgB6f&Yۘ̃UL!<˥Ԏ4]_㷍Dn16ۘܮac]Qڐ=FL` H @¼~¼楄abfݏcb&:&*[q`NLKqy-OL̺yyE901/ N^&5e&#LKbib^,-f_(lPlDX\=My9>`3>v!g^6 I41/l11wK0R_ؔTCxKrx}SGMFo3'ueb摐Q6f96f;mqڏb9٘ B?h#3Sedu+ad&Fm#NIӴ1S8Jc0220F 9˵ldߵFl#3ޞFf_ȼT +)y 1Ff ;#ڶöȼ9{M#Rlq!qղGؘ3f1w^g1;ؘƌac^6%-1/A)̂m̠aR5mA9 ?8i} S+^afu]Gob>%CM33O +s*dU>d;LƸ2~r2a$Tk7kGb ]֡j%||[)Q"[HnA( J,+sl+3?0,mSPN84GȌ WH2,:qJtOac/l̩{ tOac)l̩zJuOacs1ac)l̩{ ac)̈0>6惈wB6flSؘC&f+{w&x\iI]ٚlsхy W 3FӂlF& FjY3Ns,1 fT1VfRaSbi] md1`md#,9Ȝi#_Yad^J`RC@!~w6)DQ'ko">|^F~G~G?L/G:K-SȈh9~y)hJ(+3q}Z}ʼVfИں0W"7Lx՛Q"5!B8z-l2:,1e:KT>.95pEs*bfó5>(]AQ*>햦U]:=I8,:^9YA 3PXYP.,Jb|~(/Þ_ .Bb3?!,}U@ZA"tɋzq*LYɟ!:2n#ьj/Nj'ָK{$mTa.B=e }z }ҩR7 J{< ip\H}T!EN{4HjGȱY|,BV,rpqk@ɸbf>Q#LTS0š$8_1 Jw݅y{_{D<*!V $m w;/F],pyrO)xvjv*;Qo^"EUrReJ{ZnE %lzM}Fq`9b5O_U╘x6gȞ+FCOt^Y%!3__LOvmB] /6>dߥVn3j"3NdC㮗 Sa% 86 %V[ Qdi9Jثd L6 \89`}оmD$5NEO51uFxJ#{i .&´n*W9+zĖغ$՚=U,͏R^:\n7@U2b![/k]S_ߴiKTUX@wDx:&CXbI: MFnGu֭iE&)%ك@HӚ7}|PFm(IZ`lSM|> Q=L?0tt6|?^C*SMѡLŭlSo}BzfqB8%" SZ"@:+zá<PkUX.LIcMYvIMm e6ͦS[c}ݑ!dzٸitAUR88D {%r䶽X=Ֆ\.j/d+yjS fō?L5{?-~yD,@cr{ ?~, Дʠ3D ~,/?YN?!Ek ?O?1IJ I 71#B1u/_t&X ]z;XI'h}qb;X3ۉ?Xr |8N,X/R҉eFtbp ' 2p}YpbRÉeQգː9X2?$ۉ‹ňbpcF{i&p?!~,Xcʽ~,XҏN$Ppd8Ɓ~,cFXs'5A2=~,CMeN~,qk`7pca=n,C15łx vcr7 WЄn,F 5Ǎńǒǂ+bBQb0Xn2qI[ KK?ѭt G!"WdTӏe#닒J6];2T:X2Ǐr}~,yH?_9‘%;vd*Z,h=YHj:X.#˸)YjGca ~,,Qc1O?H~,X+Kpc̑^,kX:|ā'? /0 ~XFD  &&pa8iva I \X#s: 4VX\ ]XDž;>,8 Cq5}X|%ON:Й5D3{ 9+C+Ru%p]K]WH| и}|Ws5we8Qdo9)`=~L# -u%ep]1"\Wu%_s_`zO؜dǞ*?0uGɱ}%&_yw8hy~ƶe KḒF8v\+W+i Ǖ0}m_v\IW8+g3{B)^~ޗ|) [lȈ_㿺??JU8K n_瑢cv_ Ϗΰx8xK=2YA< .5kπߛ2Կ8$VgZ!o TҜ!)| i cH f )?/iydĿ1U 1$xh:oGtǩZ[.W-=M6w RlqaDɋhex=*F1kUoiJQ ɸ 0ǐe k T>?c`Q|LXOA]MԵ_G!btebZUeR(n #t&ո+rJ Ff\041?Bu,P./UǘjabSㅡ+lQP8ժbz 臭╮Yǧ:IE)k}t|!XD -jo3z3U3EĜ ~kE;ߴ|G3Vݪ~+!N_"~b DhaLw] !ί0(ot[}HIcboR!s*=r^XFU1W"^eix`7)W Oݔ<~~"X IWilXƜ Ц $s][*_\v;S(XyHTf2]bZݜٛ<'LkR82E@`Za#x9'R ^͈_b`=.2lFh@%P/c Q] 6I"8co d @cn|'uu%*C~^V~uN%yEbmk\gns3s9={Bp'?Nw="*@% Sipkxr;A8ʭUX~y1U&&f"Ϗ ~-@Hyȣ٣7 ao|R<2pܫڭƙU9 PT DgIaৄ*SU.2v3 ٭ t.b 45@ QiDl_ٸl"Hc!K'P1vs_iPg| VN35A`ENW!IB}%5*_g3ߗ P;ZH݅{o[l{f j)%>(?co}WCz#M.R BTh`p)T5Azug^֌bysJTTtVVV8pٔ x а)+(?`_یHleg϶TZU 6Y w@X.fo;0eнwl!gAzo`02d4G7%gg΅ŠջYҒCfU3Xh||jxɫ >74ڃ8J$Z;]\7hëC{Cqkwi#LBBʠMy V\x5.S rͥdNk)JJ.8ZG(Jvf,P+D=VGD{w"@ uT|9%UwBxΙ}<$؇I K**|͍\ǙJKo'rTcPRV;ttSc2?s# %:zHMBg`@@ة0}GY])Ȕ.7_!TINgn@J=Wqc#έ Is:@2"Ϸ|бs%ή/K#?E'$I )^Qh,;&lkӄʓ,=nN7^[^$MSym%:;1>3/^['pbx }^׃}bpT9`_(p2u_ x\Qd^h^נ浕\0-K2/\=ז^ɽ֔%²^ ;k+{mEŠb0AӿiȴþRڊ Ak+6+;8 Xɾ9 0~\DZw/%=מgM6ԗ3}[KpHD%VzEa_[8ں(N~mi8iJ݇"fp3vfymWJ楙u%X?2:OWY.\nq;~a=ߛjGTCGTVHE"=)V{*.V7BEe{gI>j'0F PDA`2kX;`f{O*=5LgTF\{q=Hp p,z{sy{8lD_ɴpg{8!sOgAsO-kO֞=Z k>Sfk^ÜS果)*{C]`Kƥ7dޤ| IέCݕ_N9l6J+*+/+#e8Y9s'- A{\?b2OA4O'~~ߊn[yDϦڳ XfӥRTdGsm eH}})#t.m1U܊IH /E,$@f©b.E2N.g @ 6TԡԚ2 <DA"(` A,a!G  D0pH=,$p9[%oџ+1Ю!ܼA 2P@4]5)tH4(skhos ǍdE%Mh#IeoO#In0 $d%y>7NISl'(þ$@XӉJ.TɊC6*OŷYTE5M@hhW =Suk*,`Em+؜RApK7:3F=de`g}3Aئ)6.KkJ(~6pz<4M&4Qi=(ݑ'jZrwDQU P١eN] %+(.:BoP2+%zj-R *&^іe &GDmh^aڏs=MŬaLBaka ġ&f /p$o-!`RÄdYڗ8kZ50"TL;UL8*$0kӎYw.NMw`M2=%&2=u Slwʫ/C(8YN%S;eM%wP2dXP3QI53EnDM6=M$Br4Bv*d ax HbK?';KĘja?Go;1DZTV}\BzGy*mK%lz!k.>#GB:5'p+d,k(X62"8Ẓ Ԭ>ˡ}fYKGbu, Xk3 Dr e,ɲX+9֚'t_ $Z N龃gm?x NT-YM% amᲶSxKjغmߒm-KbM1`\+d :kyl+;9Rj\p|]Qɹhe\H`Z#EEk`ed\.9gyƃskȜU Wa].bpZu-Eeua· 7vuy:i{d]bkzX]`j.F+ě1'BH"AH8xa# Æ5Ī)-$HHa%iBJ+ + JZIVJCe$ ZȺJ~ͰPZ(}"\H\wXI+ ܁210@n0plWM3I|f̍R v 3Ic& 1|[!=BeqI*?Ƃi%i3괒[$@+ &K+ pPZXI<ZImYIe%a׮Vu<$!e+Hܥl2UpWs&8G 9 Zgz 9ICy/]u:3PޗItqdj#T*isZ.f9[_\q6Ô'A QbWgJ^3CnX#vPv aזLg(Juy7eYfJ{|~|[+L7MqщZ+1b':Di#]Zy[x5"YJ{{R:9j̪{ 8'kl(PْB_ `(0mTmᑦ,8[v ъ~@\9ܖQ4y&i\gٷg熻߼ɈsxRD"hJRQm@l}1.  X3E_`#v/鐁ol)[SͷP'lL~)=k;s5DY\=ԫ1Ե݋U;~=TwF,V=_~uyCN1)ob9ˆЭ7V.?GwCND(Ul'ikga(uh*;_fV ecqs1i⒅)v =@/$煲*K[EK(YG΁j4)0w֤p/ؘw =; ;UгKTI_B*|[O !ճ?yБʀ͇%k[PZ@dyf>؝uz`dF.؆v,lG8``:`!kuR)$llV)Yt6@Nlӗ6,6y50s_B^/UV=ܯ!k.*}a~ƤӖ5_|| LpLSqs-{ V`-?b5u=kD=cS~9DJ~r6W}tQgAH^֯0 fx6ʀt%QpƜKoi*ofl;\_*r;Nd{a#r[ 5M^!0l uR$; )CaAܰ.ҴLV=( ]`^P^؉n`Q-ity6S+=Iz;^ /7{i(='FfHlӾ2~=\{WTnwGݝ GM`oң> Dtו?r{0ւb \^]9*xՄuHL͍}7\c\{ikct' @Fӻ^lGGoS}gzҖ!&/^ak-Ӗu;gڲδeӖlwUdzZ>2kYZ֡*5U "kY޼ j>̝eZY0v^xs3Y8uwɬe1/< =U;%C0x]v)dLd(L[c'xОҖuIh37d'ҖuyZyҖa:iY˺mg2 t;8c:ZeM5'-s3gY,r,X$-C {CYs~d- Lf)˙$eXkVɴe+Ӗqwΐ8ӖҖ:N[](Ӗqġ-xQ,JlcI0#mp,ANeEVqϪJi++Evm, "QU( =EBJִ[0rlҽVHg?f[lkE j̍^!5THp4\ E 9d*]cKaaO1H0!BtP2V 9Q9e}7%ڔ+PtZv[]a'=3mY%섁H;^ȴelne8pz39Li+ 9xR$0v4Nwa*md2J[)de[BVԹg CzBmD2WHK/?r[-ICy.ǹ7% u.%V_>ˀ(mdжve쨽g&m!ѧ7EHlZZ ܛʦG~ w$/*ƝV.[ewZtZlG̽$ w&/./ͺCתF—u* |_rʨWV{d2HMm+e_^T; JC<.ԸJO+ W ׸DYኹˑ}d/3VLu+/pKj;k|ƎX=%ZŹB]dk6Salz[y(BʹYi)D•feޱsamcfB) ? T;1ِg.$Wp=^k3 8/4&&Lz|g@Y[+t섉9l8=A]l)LL a[!@[oenT>= qPR! eԶ?Pi*BgJrɞ˨U~Z qe`\ "gf.d]0ùs ii ЌKp-rw!%[0'5،+~q!Զe2\+ƅ 'J}(/cp-c{уmb'[h*MlkH4vIr;\5|k8| kVix3s Ε|3mzQ9[6NB| k<woAp֐gmHlf[F&5sHwAO(ͷ3k Èo<=Λ֎G$ɹs-oUGs.WLb\؊тsag_p.`\ T$bϓ.}}DRg-D:uWUJ+5yXʛdOEh.[B. V$_d%ounQY%wGrkIoJ3kbdnlTBY_l{o|/]A߳ğ:̾ ~)?Gb,(`,Y1Q#ߦW.xkLD"؊L%ZIF +s6* چHWbp)t Ë:>~~* ?dZ|q+ 2Pie~bb~ofQ:s+fM)0ʃƋ qv`Ք +`X QXۜVB0: bw0Wy+0*ZPMObpڳ7EUI313Gò_`ɻ/ f!<60]=azp 8_aۓPoj\.SS+I 4.$\'^yL|eN Fz}ĽErW7[N `*' gF%z *&ĵ]9rS~kjF' s> }GPpbPn;*^c7_1rn\nok'a#WpR`'yF]d'IkT;G!R՘" ?s+ɮ)ָ*!M=k$`FO߅2SvQE~⥳ +bDFɉ럻-P/9f&op<}N Jx} h?T|?g10ZRk*?&- /Ϣ'\mZTO}O7x)0̖3W "`F(Ow[qfO~( Z$r,k8I=qiGTh׬I: @˳SCyIJ!`\:V[Bi.jhs',6Y #qËvy{\66I#N͈݃Qdb^ޙ) uȻ%po}Tj't[wFՔ)σyS(=̀am3ΐIa5 `%w iTͧ>}%mZHH R3gkf%gMDOi֙ }t+.@t{\D}ZX'iyQ>QFGx(l؅)BЖ)2}[T#R#Bb,1Ջ HՇ&bbt]hЍ,j ;|ݤ %E>?v:i{{ ySut4M3@^eO tY1κifcx9Xy.5-nT~E3}m'^Eۛp gL+/q{Eo⽛cjݳ oz )7{1qη )a7>\P0,#:;FUfE$̪gUkVTHJI9FAnEE]|gUŵ㫚=Ey<f8ĕMU&Dʁu޿S>6^;L7nCzGupMܭ.;u@⠸ QsD/v/iIS"UYyӔѿH{O`t#2E 5c 2Eux ȲDf]Yvjv=`YioqPVӰXbV3\Cy3h~8+d[p6mO _\ H]-LTR:N-]z#袀J^- F,=hɢO!LC32_XH4}Adl[g!AiVdotu'uwpifƊ5U >fnV.ڱFCbDXxC3'zڇZ5z sb- fyɵb9KIIR43U.Lz M'):%E!C4T)Rq7S%N .Fd}7B3!)*R>!S-)ɮ-*&N5kNmT,#|myW߶#9ּ {E7cҲ@IA^[hJk)}jW[ӔOkRvoex z+z+x6N)E/.Vc]b!ȴ{SgزRV̄N֭SY@[]ҙUC Re'm6: NO}fg9{.VMҘz{zGR 6y%CL3"!F=Q]fsdtU-Uoc3ﶾTw7yIݮ < M©Eλ\ @&el.jVtUWɰKݾbrѓ' QMւdHdEU`٦׼N"+yW>6A ϯ"Q6, HWJ$XYhJS8k[7bDv~JDS5Wkq}V{%PeaEQb:a|;Eߩks֏œm笒'(zIU,f  DQzUX_js*Hר @G[T`Y%K;i)`w41^)jIwۜiiJWi>y[UddSH=L }S'V[Np._xC&]!^uWUϏrFfbXֶekjg ] )wHz6?;Xh/ոgl~yLPlBs܍k-Dǵɭ|*\YIz1A>,R\>))iu`'0M\adb˛#ʤ)M"z1%IyvP'|hwk!5bP$gHaR&Li0  [rz[WF#~#9%&:)$]s඘Vʽy>f%г\[ek-_o?HT\m@& D]C"LГ~4IK}OWt(R, s8&].3m1"`|?aV(^'c=B5p&{Z*7WK܍ǂV-X{EAISK\oV_`5EfMr\mkf3n[1 0lT-. a%mª&g)#^`zڼERvj ngJD@9TV0^'z|Rw;)AjA⊄  R]\KK5Dɵ$yjmC yz-4rU ١b`q8qwE6E1'lbC Ͱ@ ڞ lʗ"Ú)E~ȏH 5ۓm^2@LGo!sҧPt\Ļ(TnB89dmDz9M=]RpZqN>6Ԍ~{FƧpRkM7Խո)w{Vl3"G{]+ '% P486&B- O۵`Y›R~"" 9(3e|pWyoҹ5/l Y.B'4ˏRd&n9h~({M%#ϗfeRC:)ggkY҄2K/5rKSN^  <,]bV$ w8ʧ#?/m5\| ,rZ;B2C1A;Y^׬wźuQdzX-/8Oog,4d!T^Wc_G>o]wU*D4/ [MAǰ#ȚX]9P dJ>U{hJ i A$wR޾֨;dz9]8QMERV{$FxP31O&9$Kwr lþ}g !c/lU^BgB0A{ce+Ht(M*#7gT ]dcM6(Qn@9p@.9-O)V5(ƀ@*VZNfNY-’+zJJ:RR+Pҡ@f;g9\Q}`*me욉ꛣS:b9@Mt11ȠQDZ8@`(R^7} }[mfEUJwH\29L*rͺFhrL0]JMwq>iѝd\/O_eO(>|W5TB(n %$v%9b^< ]/?^߂ ^lC4;MȜRecrfYC<Օ1/@q'X,B%"=<2m%,!٘Rܫe :J8f[SEkfrR4tڑy(Xb;+_ja@lhro-~%ͩ/ MIQp W1Z_ʘxB d2 2SږVI$V~|K=^|-RlG0C۱Gh|x")/]GASh edeBJ>eyOd9}-ǣ9Lr4cу9|W,&kաQuu%W5/+ۻxBv> [W;DVW n)r 9=_Ůf<'s޷9{dS2zc%(^dy;t_?JuW}}z1_6B!}YViIL $Ъc%q 5=*'):Yغ慑m7ɑiwU>(h<ý>CGfu(bpx'W*Bn$fR 0yv{(Wl!ƤbhLh,-Y8P&hf4.Pp%ZX9hsA:l ȺB~_ px2#W>>Q7S Q2!umVϷ%f_ I@2o=$Exܒ.S g^!ʜ竨b UP6aܷC;tJy1ӝ-=5A/^xl7$Q%c0j*ˮ'6֋oYvq1 $F#g^cD[Au(wI !| /ׂ0,OJ73>hS529 \Ceq.Hmc>I4y.VXyJ_OPtއ6o?YS3>z`uW3/@)K]rg=6ػK375ѢpyM=ٷUf(bޖ0/AK"Wi,*T@$E3<{7xHl^㝅QҺ@.ohjIۋo0fLXիKd0|- *Gjݦpվ I֟pM=hl=:!tlճ|(*»:W^/z^7OLĿ_}Y3B 2]\UR$q/. 6 7rw eh<]tkn}'|`seߋ+QaGuրgyޱWN5tR&LjwPKŘP|԰1<٣Hfk#χ5,^ +OΒǺiC;PQ)U^^wX5t!rK_S-7 p\ŗd)ѧVlڈO?ɛbSmft(Hent~r[ ĺױҤzݑ姲tm_Q(y61l] ׻X|^u:hP~- a>,~):-?ʾ+z%P:_ͦ|ox[4{SpcIJ՜)2)Dy t*;#3ՏLB٘ [J+~i.V-k qݸ($)iF<ډXϦ=Y[;/|.]N*6 敌M5Cz}KCnj=%Ծ`2`CU4k@JpW*S>TRÑW&ftT^FZ|ҳgF;vXz}ޞ3 )b];gSQjYtZ\Kr: C (8̹4#L PrbɈ,qߡʑ-6#H(xdULV KXW=i4 ax)uьC+M_}$gz+ٻQ@eyoKhQ#tGJߍPƐYnv*9+$sFo: i&~$J5?foV8 0vGHF0͒@hŹ{zr.v;$1LQLVmg Y*$˥8b8tTH$'|GͩB{T#;}gl`'ČDYlFۑbq~܄:;V_pW^Ƙ+\U$"eR(^|\4)@l#*ILhk=N ЖSq;;lUg`%q -X.4hx5ܛ 8n7gMO"Jy]T.'3p*Զb o(qWŅ/K-(2uK^vqLzf\s>kJ/FA"bGw)Ԋ+;sM #&= \7Ő ~SOk|fyE-H)\%cv')Z_^;ȮtX[mHB.+VfƆ@^n C>ٿ:vJyXIVDV+dD667dBUX_!PTzMSM3J/sve)%#O $ugL26 <-]bnWNNia6B mV+YrfdT X:9q($C.:BK? PW/)Lg<ԇ~ŝGb)rϲ2YrDq7l\<ܔMp?7#6G 4' 施sZqPs$efZ0~'Àm Ϭ5;S* %kE.O ޮ tZڽ&;Kf_2\ڵNo=F_Ȕ$!KQtcl VəGLYF:_pT)unx1f]{5+b6wIk ة~p Ė kN捋`d֑Yp6 rݱg4-'jq+.o,2@GzyA,~$mBeNvrW}w|[Xrt17OҾT^M8ſ9~˷1*?EPI a qgs v?DvSAyB[kKo<_#_\wO|jaMc SSȉOͱDO1)m|j*CՁO-*aPG %X՜!M0>{6 Pm,3PMp\lsjo}`xkH#85y|RЩFO{BH'YsԼm/x hRVX~I=xwj2x .}dS30SZT4>),V^6o6Opgljmj`S񵠩XˆtkJ.jf` Md2+-Wq\J%N_}vΓeBk. P|w0>RNt m+,4s pIiJay)S %{P }Sgxcuhk>{%#wv벃JQJ ?wBD$oWG|Q@#j B@njuڏpДJ)Me=Ha9^5)Oo-,'Co+VXm28 > udFT$;*)p7T ɗR&Bl u3"wXBKCB&۱m^-K7ƕ^!ЎHvCBni}C ¨EX:(Ď81FƨV>|?r jf:0*pz|,'%u-a'o lN׽@D; H\m#tu1@UR@Sj v;l@!/§&."jlTa*¼rqG82rր6$Ԗ`.dU_5'tKAOеÄN 8%)P.@@0O @ G^%n;Vie#_CچŠ>%aOV^=ᩓxjw|8v|Su28 $r: X:~fIoSr3Gw74xڜ 1qEO=@}]/ ).$+aR?#0''$y5?92gф*fgFXT}Q%79LSxAzuATr]q3BrBmP N o)U^캻 ~wώ5;ρcQe/^}aJKSXuO-JSBOHOsw7|߾|Pq+"_TXڲPeXjC*vBT4but:Pv#$l,@;dICe4@Tٙ PB=+ ^ "/ݘ| vUn wK#﹥ Q >6bJoJnFOs6SL;5Y70:j{/߮Oq 35}.( /%`Rh fM@T:( b7׉Q;}Q팀]%1`ThҸ!(4 FB8 dF)eTB`-dh$SH t*-f=;#_C8OYi1vZS||D9W>NdQ*(DZё:W| JƴMnogxٛQv$j@w[Q^A!lHX6J5si;QZ-t@0VVe=rBBe=H̳N]ږq6J3ȸ⶞':2ȼT2NLqTÞoOj=" mFs:uiҝ{THc6JuO;&n'kS"q n} ڃ J@ 9lH\Á aE d掰Dw 1R@{RaiiI-^m KR0{EuvGHXaH*$s#| ~GPqoꎘVt}Dz7/Pa@q凑g:*>XymB(CCO|jDQt}f>bT#oLig9QP#B[^ ƨ|P~1QR+uKq8pSv#rl%c"G :"uEcdN.≾bTȘiQ0ϒ0]R۠mRmn @prUƨF$uf_/.j;,0*rT1-3Qnj XyX9BjH." AQ-l #R=@B8GBF[}S UqQ!sNd{GxcXbef9iCTC5H5 +OT|Sjlq&o$VB8&leq^ˍ哲QYl,Tj6󛒗{q*$7IoOe֕fߌSkƩrt>ũ7`Ckkn!ט:#|ߐHKcQJ%T hUqFpkj˩: BT-G@U-, *7NueAnq*"p*#p*6rgmkRy6J]&T Ew63 9kV[U]vQ2Cl0S|k  $M#ctӟ᧫JP‡ =miv5fK!Th=`| T;cB N"gƤӐ uFV0Q}nl3d7 {퐅àO[ԑiAr1F8\n87!aL \90*n U_m11dKjڒAYeZ YeaTyT0?Vd\@v*qq7B9IW;Sܳ"VN-+=J]^4CX-hܕx\N Dkvă6 QFWu$+M`T1]Q} 2pu877ʱ>:bJ ."Phnm'}7@)%o֤!,no{Dp逨v;~:U&=n!Th)W@u@uB4 { |Od պhЙVG Um%J#NE@x7" !<bc QP6Bvpֱw7n猌;;_S~~Ea8o1|(r5]FBd_b3duw I!jw 8;tl!*vYk.8k04ځPiPW ڽ~@'*n7 d+7FU#maTQq9n?NV#Ĩ>TyQ-/ mPB;<-Qq;̏LኁŊX%PqyamGf;ДL PUmײSZ ;էkdMcjwTh Vc릯( |u*%+o0*}o'P(Rrh˽{k],U ՌrOOed&.;wW𛊬l!) jIlATԨ=Ֆ_"QUkWWۂ8z˜#ez} E9b-MDs)޵R(anrJ]֓ PݗX!2S$17sH+fsLwjlKoTr2u)-{S @_"g§@⑹)fz3KwS|B/a&m$ )XPQTXEYmŠ\vF=KQEr ħz§cd PoƮ(quQ0ctwtDM~c':]9pv &ϮAEfq(G4>"]AEErUNItmR:cC%;绘@k|?(OUU& mhi#/5Thpݙ -CbL_rY,Jc:YM+uȑFʮ5Nov6BL&tQJ%XU#*JB~Q&g=(R R{ݬ_zc-].6І ںNd5" Ů{С\{wӊGbed^B2Rf#(eIO0 ojWWylwe mZ~B8r 'Pu3M1qljXb!t5σ{$.q\X4Wfؽڅ+q fMRn{1ؗ!>鵓O4VSsſz-=L-)+uoRc(kn#Q-;U9wɵ) :vmK(UOsǷx'VJ$PfkjLX^Cm^A9bh>U$* t}yR\R*]$hk(*6B`wuH/]+bJ7JK_veG )&mr*hp,E6?oWy+lQ<'KJtViĪvFGlAvӛ*>Uy&$P=rxD@bq553@Uy3ւ7\-COsFѦ^}niA`FaɶCkӛû--2r_zJ@ճX\;GAb&9VnSY$-7|#pfQT=O.#B8%k9F_7__Ee``?r;+7: DejIgeV2B.u @7-?7O fe ` FUH^"15Nn!MlCqq|ל,g ]"I4|˾ΰ;ןpSVFZ6 aJ$Ѫ[9@WHjIu6nY[!Sdb'ɉESf^]r=yCp[ D:gV:#¬dEtn;O4GGP}}P"xm9JvPR8ʈ@B!Hc5Nk[`W!<-w(G~0ُOfemN'g*{Q?E;V\: %]H[r\dMU|*TA/gUB\s.jSprL.Z%YaEg=R̒O΢X$xW7lcZcE mZ%:,tKF%T)E̝2}s_XODXAV4\RO&Wjn~,;e!<)M*D ]\{[눢tGodcJ2" })>@5{/OAcy(/(X u,Rf[ϪJBAD^(UYڳ`;)g*㋂(OJub"VYUȖLy-3*)I/'%b*dG~"2${=rgzv=k- dR1L{H=^<(ڟG]_ ?2ǴhrȤwhEG~Fp ePկMv$վC-JSJET[~XOw.އB~|ޟ86?Ń?5p,+a7~~?mdGyǢ`me#c=߹x͊R.$:T $OHq[t7WS?JeaC+~o'' -?OV,2k3IެP>mF?|7}х|6,ݰ?yi9 4މey9 xi? %kY*I\%x?G&񋺛{c?%s[ ̂=f_̀O)Htx7JwQZ3/|I{ɂ!`u0v/-$@o%淛FhovKz'趞g(Hgx]y?<ȬvN̤tHi FވD>/ZzJYK+ F\H AfUu(XS7>Kq潥}jX+Pj8[܄ 3﷨}Xc(o*_XnX%Vm1G^vjK~XmyPP/~(Wz[OWQb/wZk䴇f_i_GC:^!hY3ztot-$![ךku\? *FvZжP DB:իC^+(D)\#pF…e?c~g_/h^ p3^zT{? ,`8.y!9!wJOצ|0!}<_u7d,#tE4$4f+D7_msPИ kQpoCcZܞBvܟ" O-7QJdIttg~t}ҟd";7 A? OU%Ģh$*@vyUG|8aBÿ~6'wV|ٟXWE9jʝe5ɊR^@t:Xm)_=op?a=O߿amqQĢx b@(Yq+o?\J7Hyeclng'UQ=Dspy*-%XI{) .6ЧL⤯ދ_~&tr/K g|Tv^EWqNlH M< RCmcL>M*SПЕVqGCc;?n8G`.IǍH깟zh hqA|_i OV= VڲS);ыrWO:+;r.Ud+թ#z: ԏIVіzҎ<= K/0a}`~H]Vo[R?#R^fb}``ad?1:xC\֟ؐ)âhYAk9R:|_[iԜbDPB\=8͇q1 $#-)TZBOZay=!C_kk NX#A4:}h X$+WiNz0#\z,bFPC5^OgF!7 /+~X`Vozj ~wE$D &ѯDOSޟx~OcϿQ2,kU n|^Q ,)oC~ꗟ"ā4C ! kt_af!$ tAe/c^K+Ԓ/?Vdgg\^PJՓݞPK+xmSsˇ\8. YItOSP55OLZ7; "/}x{IOmS7цyڡ#Ȁ!~A.~vA0~1'C7AIt)AyƲ7˩69 d?"zsS]$9ѯ߱w.އB~|ޟ1qcQ<i}?R]D{#(k0E6޲߱w.އ9?Nt|)hr*: šyXjQ:'\~Kx@|c TDql\m-PL)Sh:S_z-uڷΤn|{_ZS?@[`7E0y[ ʳ奖VlgګczH!lݱU7]es Jlp߹u4\v͒Y:jҝ ! GY_v Q8d++GgH cT{WSr۾WE'wnHA(p|@6}A:zPD~GvJD|}RO6%iA\L 7va׾`GVe.]D[/yjE~b}gt1sxG_bG<6pܨqz;F]ƢDzxŸ|shk֋;nvC?{K4Ծċ #ĻV <:OPoK{{o^tk &2uKU9^$d#Yiݿjk6[ga~AS)&M SӚBv"m?@b9&kw֜ G:y]%N"]uC+)m"K UI9Y(6&(3vf,8Rd~%f[س9RdmM*#V 7R. |bKR}y:AOGr D. =)A44!doJDUMU1*ym4G̷&ч2{SrFg{ WF ȶ}j1G?KIϸU @^ve{w&eׁk٬6ʋh`&-u8 PYh͗IN>q e⿻Vx%Om07:r|s{ZQ3pU mڟ32,!ʦj;04> d-L k$D-zƏJ&ˊ/i%Fi0[@ ]qR2bjh*  o*{GҤgTYN7ŵ=„m&NiRsX]Ҥ(pv?Q,ݣ ?.>dDC(!:@Ta}>mGܼ*}j6#SpM8&pJW]"(_ښ'`G,biTZ }E`ke/AN-E ꅓ)"y۴uF5!_p,"9Aդl %j%D2& l^.YY0vRpgx#Y'20OĘXpPt- . XR[c -Agda }X)rKuWG18hoVm 0d`j F)|%텕ӜCL J@-3_n(%/ 9,N RVꉕ%js8yz@<[PLe<7Ɍ)Y,VPơ&eujL(^lB0ցJֺ5Ժo.VT_zT ^ޚnOBёIXb[pYmST v[ihuuh aӅv(p[KZ׹m7)7L}K$ >ɏ0Qns +B%KwlJ؏TUBPkP᭩ɲ=ָJ%%]{-Lp[F[M=r'(q _R\Y93sXB7p¢C`*eό9 gZ'ma= 5K6&M͘U֬/ǝȯG@7[ cNFpЖ.m*-ѡ\zgU}%z@Z?dUxFCN L?j9e-1=P%HX;ת|zlM\DR9*~h4!R!ifSgYRʛAZ%KsjK;kT"lީ_$IuΖuYMӹzxFMyTȖ-3~BO=8Q i*3Si Paq 7Ri)a(qrFeDMXVuMiI^jiK V6w7^)&6Ŧ&f)8mNjI\sv)ۻ,03r728Ky F+6HQ1M<ΝhNjH6ښ"9-@G[RpZly84k},<,~/HLnMϑtkG~d^}xy}*0Ch:N\sُ0 KfUɵ>|~g >Qd,Va iȩm6|~+.ɚ).ẟVy"ز ~- ]#Ov5~klժ݃!t"m<Pe% mT8ZdhAYeTU'!*/Ң ?!'ʥiNIy ֻςn.~L?ŒgѾ\r/`ƴ~O0#6 e K`59FD%0ƺ%8(0)ַMnS`&U)0/8l uL" Д)0CWLcZTf*Tj=†5NC 3k10V?ac`L_se ~HuA)Fy|@߶7S`B9.Kt Y}gC`!({#!pPF(xeB45bb Cԧ|AbC3Th8 Ieb͆f|]$̓}^RIJ4lk<6i36^\o&?@yv)|~ ɰ'cm`OEIXD-6+V= NBbv #F8zXrceh}̢)BD&WVGK[yXb XB (xB:Ll /p^ߡ}(<o8M} Y01bJ*_,57 MzDK3[୵ p5!j%+j?eTC;Kdw)%|/ƊN 0H:`cAܲ"lmqhKfqN}nW^w1 y"ӊi? ʯUWUw/<(V6*X+-tJ!<-:a~ʔ'mhofXC5|b bp|ZCiZ-`}NFxIBkOYWz)3l)fdK)ϭjy+ͭMd3qjG\J!ޛdv&nR}%P A}#’Pkl++e;]i}NWFo/F,@B[[?ZZPp^7BiH7g svrPxZdFCfDׄMQH>[$P,+qQ$v, f* d:tPjc1of[W,(:,Z΁,7v1mT9\z[6IJY䂝<bR/F2!ԛyaFy ?o֢,ce ݌>MPЛZK*Pk0*z(({ME1O,79<+p""wt6^Q_~JK6\ ݆—xo( [&#~( ?$F.6UU!_`Ed,B.Äcb,BYg]Tg8# C[<1y_P\dUV*>R}WY1XgP?Gv*#}o>(ɹ0„WƯ$(%)|^~b|^-}brPf,lЧF"*1pbcmRB]Kfo*wϜlq u'ֆK><%σQV?bҌ~ \I,>t?Ͻ"Yj{Mk^ yPn-N5r,UN[n!o;+cZD~9IZ*[,nmVLNv +ImD+J.]Wb %+Dv + Ҟ4Eb}ECe #xP@L_B8g*wŊY(y%B߬{PV(96]zWISqfS>duϸJ,V>u-~{:QetGϵشI]8Mw,y:j8ϫ/y^s=Oj}ײ䜞yȩvW_Wy^ y<78y:kY\ Z><~qТ&ЬZGh:Ӗ~b$r?ۊ"SjݚWu>/"ʞile9BbhŪ uc) Uo<(KWy KٺBӡ+ 4j[W5ڲKWhT+;ۏ3i+%W9uvǽuf_+`Q#`TBК㉺W[.K])iaMm)1VZ1emA{/֢-ec+ xeJ[Y^ny+ ڕ)C;u) 뽟dKKY$ S+}1*"K^B֥?ĽvRO9%#IȻ `Ce.ᒻGbY,W^½,Nqdei.*%xb,8>@TK Kj^cF 7*$Uk cyK[ m&*sp['C$&})u\;Rx'Kw͢t} *W:NMJl1Ẵ#,lW_|(Zup /3ht,V>}v+~"NpQG=K.޸=| Jh3b(B^e0\}r%=cX%:o<Κ y6ǹ8G*Oz 7 ÖCD(܅`^|sp?e`}'Z:̹LX0Y=㮙 Vz+ܲڻdCѥ K`m9CHP/B0m N$[YץjC-EP p@^9xD%Kwq&Ʋ+jJ3Pc,9<`1+x_ЍX W=?v}xqٷzM)n Sγ#u,WaFBboO |}Cv(f?1h 2ԋ&2-ƴZ0?X6*_8;g.bo{(t֞]NR`(DJB(Zuȓ,kbY؅6}*LJ{D;7(Fim4-3s y Vǡ( Mh)//rja;ckq;_b-io #TIC@?:-}]LѼsPQ#CԈo>7IQNkԅX\nJ'|gWKP)^%E13,K契Cl]z׺C#HⳘз̸J5MC YMpvVp,fp+xSGgV!"gQ.#XMYV6"h%Z+q!@IedsAzhzbC;`l)m :i0oWלT`^ck<'h' Pscֻ2#`+3i-Y a`Ey{ ~=G?Kb2|)Woݧђ#8%$3)Qо%g>/\FHBeKl:?}/Izq<ь8{(š }Ȳ nqR%<ФٖJP|HmlP|ȐKSx(&҃7ݏKa?Wu::uG3XzP(2׾cBT|_F; J a?Xn qT|K~p8@HlY ϻ?N%?8O.xqҜ$bu6ߌ5"#>̼ח/BvXݍ'r ֺʒB!|%CbBSpmN*mis!H3,S`H;e C2u-6tU8@g+гNP@$~|>F7y˶>E} [L֚3J)?c01bQwZ/[^&fQ)'O~E>܅N::D٩s: a,'gWh RPTbVsGΐٛ."pxEmIUiwdw@Z89rz1XLGD AdsܽtM`=49wAc\K,ƑG^2KN1|8Y^;gZ+/XrmI N:{m$zv]JINE|f%*~}̍f ebLoNO|ʁQZ1cK e:~.&t¥[("v\W{04p%k.){ue'sE%Q:@6]uM'ef \|V O?s *ъ^ ob:2=Z*j$kylxps5m9\B!a5c@w8yp)=35VitW $!&1vZbfx*P(36r9uq>):&`z$֐q >WKO =zbH@ C\\TfK~j1\ UbJ9J]wI+&&羿IϿUe΢pUG+?,Qm@zHT4@KsAK Ztzq⹢XuLN )a&ZDK ZtYҠHqEKeAK>h e&Zt_13 ΊƽiAK>hRxmAZWhi0ʂhipWt0 1gXSQ~FK- -R~>1x炖 4|EKs4?@K68,AӔ8`Z9I Z:-@-͏n1#TL[)Y4,%"c;#E8-J:Uor"ɻvg$xOjHK%)xM4Ո 30Y fgmvl׵ Zaޝ3* Ʈ@BDQxW?悜%~vu#e?:S\m1[ X8F[Q:(ڵ+ݮ2mp5ٔȂK` r $k]%9m8*9Yu'F[i`nlRi)>I?쌦Bh6|nbr"fwчR 8d=ǹG|jgh+\a9|%kP\w}wjV(4M³sQCBzhn`)^.E [:/ /.L1Sdi2-Ocegyzpȝp`#q @ #"ǃ4̻B-~\#p 鸆,)؊+U·CWtRku"*&4"ʼn۪ڕU{H=I>B|8|+pIq9vQ@%iA>x-C=RV:bw(''1"W^$mBirz$$L8M)gg/-0J rݍSK4^ -|NhC3|!Rcew"5#кe`z_eDppP( Bcưl [O^-\u{ /mO]br}^g+ۀh*uoxIemPB1k0X\|ow~5\t/,x]dH VV HVVfd Qk #.k@bnR"$tphvD@ k1\_~$d N{06^iEw"Qsp~oYʏު [ cnL1ҖiQz77_@jʌ+ǐ|5\Ho->Xd6P cGUƚpe_=>IdGsp|7 t솺.4*eRN(&- C+)/iҕXly]w f1q-H $Z>-g n*qFK`h̀t<6c?_ŗbGr~ s+X9-Wdް4 ,iwT 53 ҖVQ Fz)!_BX:jZwElyϿu 2.N~6`11ߏi{ NvVXHwEkB7B0Z#x@b~c6+Τ|F 2Qg]$kX$c5fP E 䖳‚J V -0 b*q\=S\dp-4#$]շV?{5;ڂD10U dCٵ3aFݴgO#m:V+4OzrDTtmHV==2<hhK ֈ7H2d/SD[:xnt G3!D/9LTt=h֦g90ժ$m~RH6hBYbUCIRȰA&8VDHAj)9rѷK>+ Xx@Vne{,V#Ts@ {ra/0`>WKBnZ.B]mX2O j!ZE/6֋{OԞ@@1z"W%᱐2Ln=]Oglos;4 xej c$-1'뾁|J5$"rlL3JV7[9QtA D\_Y"F9Ql~?fFbt4Q=i=-ϣ;_oAeޢvC3x/|sc_p΃5]ֽiYn|*߻./ X}F s%>D_ā4۷/( endstream endobj 726 0 obj << /Creator (cairo 1.8.2 \(http://cairographics.org\)) /Producer (cairo 1.8.2 \(http://cairographics.org\)) >> endobj 707 0 obj << /Type /Group /S /Transparency /CS /DeviceRGB >>endobj 711 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [432.191 304.909 447.82 316.703] /A << /S /GoTo /D (figure.caption.4) >> >> endobj 724 0 obj << /D [722 0 R /XYZ 88.291 795.961 null] >> endobj 716 0 obj << /D [722 0 R /XYZ 89.291 764.475 null] >> endobj 18 0 obj << /D [722 0 R /XYZ 89.291 235.754 null] >> endobj 721 0 obj << /Font << /F40 549 0 R /F49 593 0 R /F21 548 0 R /F47 592 0 R >> /XObject << /Im1 706 0 R >> /ProcSet [ /PDF /Text ] >> endobj 730 0 obj << /Length 1757 /Filter /FlateDecode >> stream xڕXKo8W(1#mӦhbhʒ*uwCV"v cy3t$prD<EEDɣL,-ae}؛Z$L=~z6//}j<\x0? *ٶq6Ѿ;x4ٙ 4^74M:=@nOíl"v{2tN8Zkޭۧ@xiL+ВT{S{vhcɘ&4C6q[4}89-x#˄C&Y^8L\^\E)DR/_7/Bs0hgY|%4i6U$T}yX=Y)H2V Q1`!#ŕJS_7Ҟ4;ۄ0a.b:> O2~j".=<2L3P*,jPtyr0S1fL^b>Pp^,e$Y'|VHR0 3H9۷4Ȃnz?k%XΗW)-Sp7'.s0;)۸m Gꃴ?63H^Ufۮ Q">W"~}pvp캶wQHyob ,k'>[% )T\574rƁ0:r BxnkKI/ۡrZ% )P0d9BY=`0#y,\A{nF%4cr4_%6?a zP0صghY `~RxP,)] *]!cC`@kF~;@N(/5%eIV/L O,MwN}h:> endobj 709 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (../../www/genometools.org/htdocs/images/gfftree.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 732 0 R /BBox [0 0 508.622955 138.158752] /Group 710 0 R /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >>/Font << /f-0-0 733 0 R>> >> /Length 1737 /Filter /FlateDecode >> stream xY6 +t.$R{(PCڽ9I7A9=H۲mftiI(R:ɽzܧK#k1}}~v_]4T}UrrLNo9T*x&^b`ăW9Qa/uXux, ]0Bn3:W7SrwS ^rRfQ,!/nMN/ӭlW!%['UODZ̗ /]vݽ~{.Xϱl2H3]~ zu?~eG s+-za/-_燐 j0mo&.}u1kELj-"ߓB j{虹JX?L1n&,ײYS_Jf.V:<#9RE K]ai]rrG܈|XЙ{cA{^LRcRpk yZXraљP´}^V>b).ɽ zk,{3 E v=bIMy9Ԣ˨.̶v1ÍXK]p>r [ç˓Ue˭e QFq)_ov- *9d.kUV65/-Kc.ᘎY 6:;ap#9v,uU8AqqZaᇭ q9EMBz,z=[k@|4+f;K}hO$ia\7YJԊ~HѩF%3;'Z[k})cvC3K'*a>-O~saJb tE@Ɏ(|> endobj 733 0 obj << /Type /Font /Subtype /Type0 /BaseFont /cmss12 /Encoding /Identity-H /DescendantFonts [ 734 0 R] /ToUnicode 735 0 R >> endobj 734 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /cmss12 /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor 736 0 R /W [ 0 [ 750 666 556 326 501 229 501 501 488 375 353 435 773 629 686 646 446 488 625 704 543 501 501 435 332]] >> endobj 735 0 obj << /Length 737 0 R /Filter /FlateDecode >> stream x]j0>YNtjB!: ߾1B _?'ynRngJèeYuԑHIr rLv[V=QUQj7:<燈7؎JKfOWJ&ŃKҙnb}Q>хy|n),В/l;}Jܩܩ#=]8$ɳS)+@'Oi<)(AA%(|@g R3Tg I$b}./Cu}yA_rB_D> endobj 737 0 obj 330 endobj 738 0 obj << /Length 739 0 R /Filter /FlateDecode /Length1 4520 >> stream xuX PTg>翏tit4OQhFm%"#*"1( D&c,ִTљĝl\k&2cmj3N4{835{| 뷴 +=w7AIgf| ?ѽ)푮 mkZQ]iN2`nזT4yG$kh޵mw0|<G-菬UA'9 Y jU!Ls0:4xp< -8;zI bmVT#1SH,U! t#[>ݙȎe" >dIsۘWBT$Museiif9kF0e2C2 <8c4֣ٮfZRFdף$2x"m,rbEgZІr,,ȥtNHeOz'˻ӅW}a|Pr`M'aÓ[D-`LN%`l ݖKSG۷#xvqdvQÓIĀ@!,>*-"RNN[NcA3--?\}+;4erc}\dËg͕c'hvp4 zI98 iY9s[g_Tl1$x|aYVpuҕmv֗=d<ɦ+/5md+v[o畴hp >K*J:LZ$M7kt4LQ0ZA@ BRAT87M%pBpb #o-(*(,5rh\DGq41.rJCJ܋}M{W{OZ=ʸsMy~xyilÉȆ뻮~Ʀ@tEg{ϯQSMDѰf Y兲{[RSӲ`_s J~>`x=r0h5" gːM1I2DZ` b0IG%'Lƻȳ<ח2%ުR2LEQ|4TY_Կ%Y Tj񣘅mcS-zȯ'7.gK:ˏ<ar \hb$C '$?KOQx‹s&({,.5Fb}P''Iq@'w\\FZ(k%bP^bE0XT (Љ#M Uqz  ɋlŸ #ww%tC3ڶZBvǦ5Z+W U1RAX !&0C7ÿ V-k.>*o)FrC6 H)7 HCךAϑ=PDA$"5R wlsiٻbS`y={|Ϟ6N N|(98{n8CM)IQnHQ;O :%R sgdV+ZDӞjj͚N\kMe ]uw;5x~w̵04Ə;2Bw92NAY4I h͵UعlL ,1&&sLw X81 X4¿F5><0(y Gx!8{{@xBǕVLN6k`e+"̾2UO>?j50\./ NL EJyg.ڳ/j_R˵皪'׫o=ѭEӵKKzu ^_ӧ`V:LyL5uI6w*k VM-g$x+(kc˨c?YxJyɻnõKG?ͷpŃ|]+/m-zsQJ$b5@ Ld깔VNQ%ck˕5+r `WgWjfGɊhIZKHmj*ԉh\'0?N.cԚUGul}M?++k> Rg˫W^:b 1A sDs=s8T'^S./j41\E"җ?.)mQj3.pcS%+r4ÅJs2SP@v:GW~0;K{5D DXlm5eXNKS5ϚB)5I[½G)aDS؁0ʏ[ppF!80`/CJ> B"I{@Ӳa_l]gl 33װ-G+iI_=Ӥo Ux& cp#]Ceh1 QiهۇƜ,ߪ!p5[Kari!RNC,+';87h>g3A p ,oOt{uWH^͎+ $u<7yu'toŃ?{d-[rg qM*ys!F&va'NoB(F%Tm yݡ%t.C5@HpzI:B irU]9?f%#Gㆽy 0Ϫg]@֗M|FrssɮrȦ᛿UOفhR2Es­0}^Wݍ^nK5|/(y&p4*PL)XB:4pSK#y ߓߧ+Um /"Jqeto4#7znrT=^Nn4b(cD E wh x:$u.$J:w0r[t(P endstream endobj 739 0 obj 3468 endobj 710 0 obj << /Type /Group /S /Transparency /CS /DeviceRGB >>endobj 718 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (../../www/genometools.org/htdocs/images/diagram.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 740 0 R /BBox [0 0 1358.270264 591.233643] /Group 719 0 R /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> /a1 << /CA 0.5 /ca 0.5 >> /a2 << /CA 0.7 /ca 0.7 >> >>/Font << /f-0-0 741 0 R>> >> /Length 66855 /Filter /FlateDecode >> stream xĽK5_ R7l7 7 iFƭjx߃ `b҃H__}QlWOo__Q?V3AgS~Cg x:oO\uk?_vڵ)qG+>Wk @;&c6lѹ9,!1;@uRjc]b?/v1g{߻]Pl~dc'gmG 7t΃Ӻvv)I&d.z9خ7"(dzvi5Xɽ'7vGш~y p. |g|ޣT2j0o}*%zu_q^GIMm*HHw= 37}}d:g98e !y󈸇A}0zy Z.$5a|4JWi;Gob4ָ}>[B~ $~~8?LN+W!#?t۟lvSR ܡ AS*>W Ӳ} )uQji( < ў$iA:yˍs7m`noM;ͪ3sݱk'&M'" 7o:vn D%r߀$ݶp۷yEmz#.W~10kka7Lf2rouLz~%MH2Pf {6-v;8譌оOzK1,1&=? !ܥPn03Х喊ހPt$ OVWf2О:\0ЀLz'pɕUjd .}០c \h@ X!EO@ob^ 70Xdo۵2{}-qQ@A;@A[s@o; 3Є$ŏ9(>A>iO /~?i[.C_&TƹO/3@9(8N6. @m`*L mP3}㐟}J~o:h1KGh[yz࣭?KH*5N;䦋; o⹞!mلL'%0oKf.n|j+9m37>&#[?F4 U8ߠ⣫ p,\v E,Þc[lG}lvX6o1ls^cVC07x ?M@}͛̄MFWZ"VnuNh6 DwXd_/4Q6J>ΔF'o5yYgHZ>d#?qjyTis)]lq|͛ҭ_c~4ܶˍPa8,^eL:E +wfUS kn9>9ڹ>9q!(&4Ҡnl%XI]vD}f' utn4rh~oA<};w+q#Y~SK#k q!OŇn> >'NG)t4#d5ZmةȈǟpoU&%;>zgq~<%](r_ޕ'#S@ysr* w tѺez{D oM7~vߜk[΂McJu,{ѵ>)ӘgoM:__s< [__ gk o S;]˸Oݿ}Il7/?O䟴l']~ ?i/a1K߻ωۗ5*׹zkY~'֞w1Le"[Jk9 {_&OZ+@$w1L.e"{mz a'OZU9c {_&OZ)?!/r\i(vnheOg-oU\Bf8/sgŻf/Q઺XOFYP<9DŽŹ]FQƩXțU_֡rw˙@:4n`yLN>\Gg!+S7ROnc!}tm7ȔAֱ[W_}lb7/szVP:-? '} KO~Xsx x,E|!@c`MD}Xhɓ&c+z2jrq}b]=@0M1rތk$6n7(i9d')B@*r X \!T )Ɇ[UW"M0XM dRFցɩ|CЮIrw'bnR;Iץ [#] ki`%1޶>8L-R PP&ۓD[P}cmWΛP`>`dK1)eضvL½WdIZLr]y(X3Iu@$m3PR_k>FցKlVo4+o\_RRx!8=DV2LTC _՛Nea?s|)ԚωL= Ưm#M [ӃYD fgogu_!iXFJ}ToJB@0 ʋf3PTŪ$IP'BQ)æ@`sm-g-kγC:vrKKSN0gSu$\ .@W2[Q } fG>dg"L!6څ | K1 @8}ėr.Gd5ܘJpؖ-n{ xrܐ<ֿ17%@'e /T]UMnvskU?6mfL_A^cQeڧCsclL0^ #b63]owUy%uHB>zP+73R&-^d,dM?&VI9;=@H[.;Vt'R!oFO3S2s7Dh[KrD.Lvd}3!ɞ-Fs!#;C  bwiq\ ˷4J7cV5OČc?@sQI+~`d |B{rxeyh@[1NeO|p(I(YefI7˔ BǾ-7Mܔ]x/Ljs`? ^+5\Vf"]dV_:"g BJ8OL xprJHD.laE,ZNNuV}K.uh-)<,xހu'T󏐸`,?mEn@awMr}Yp/aYL +}c|ԬvY 7hSD΁HH`, Vl)0SRl*o*꿗O7+egs&K\Ӝn06bG;8Ȱp[PsOD^`;\ V=!Bͬ1w[3}&~KLW3!!+! DM߰ǦHKL7Űple!0<\ 0-7D0[fRdͰ<$hv䖿4LHliW4+8 Y4^80YII˶yz(Xٱ͔!?Cl@D5Iq*m2Cm/VP|L?nk`5!AówHę>8C!+g)WtQ)q`;Lu|.t;m##Az\7 :~!lksSs3]Q73+ K^dM솉;~=qFJkRĻBn\D1yž6_b]p *6Pm(/qߛ蛘0Y#."Gs|d%L]%+Qw=! {3՞"y5 qF?_35=SQL ׄ 2sxg(O'>خu`SkvF d`0ImӦz1΅&aY۸ ݕFTa8ffI7ta9us4=U [̎F&/ SYrd1`a&f4n3 g14`8 6V#a+],1?i2Llc@4TZ 40b3~fX3 T :FӞf.ϒ;'=0oTԫȫ2f Bpa4à5ab3 [W3 7f"pf*OftU{2f <5l8֦&cs$/ITw  30dd^D}ᅿ{c봓LH\iy[׿SCY$bыVVі97պw͜ckk[ 3}J_Ÿ }}NR6g"V(p0U>:Ԭsj/om\Մr]C mXA,^q**TWVtY4]xIdTW͒L&N}u-7VQc&yPXiTX{. +{Sa-hHl nw@;*n Jlld]gi7}Q7$StV`<碲RYc2W2uy`7rjƊnMǟærJ?26Dq25v mm>h?}*"WݧH6F`ײ{>h/viτg*>+Hv@g}@KH7d`T}gR>D"{%RѬGlB26ő2CgG- Iȓ 8;䀶.O)GQ, Vqغm}ĩΏ>MHO8G"S9IمrdcǴY(OvҤ IR昸{"ˆĦ,ي}jQ P)g,ș$aR/eߴsI̞h‰QGj-n$;sZ^aA %A2IvClNb0r2Ȕ"L<&5Em~{B_G&$UV?A÷=+ fMEh-/?Zs7KϿwO߄HA(5]pk#@׌p}KJp#ڑo\t'$q?X٥ n4Ɗ^|˥ H$.QU7]. X ;puwKuؙwa <ؖn[p;. E;R#5Tm D16TytQT!A*js~a¶X?Y]}S?uIIo[J:]+uZbS4J1Q,)֨I9-gE}#wlY`ڮS' n(D7W6Xbh,_k3>6 + ьdӍC:_v5vvLM^WaDl3\86D#w_u,vHr5 !hiӆhT*9sӰS~4b,dq3Љ̴C7%>b ķGЭg؆ ;tc*D4D%[&ǴsҞ=BO!9sXL,1ӵ4DHKtn Ѡhq3Bl>UnhbnW,mn[b;th$w4bZ9b;ݖ9vh!:?EҿmٴC7V{:zp]\f_H֗ 6$|{Ӟ8G* B5,eeQBR實[翝N/3>|B=}uβK7_ߞlo+6qzDf#n @|a Gלb1 69"s*j"T\f|HQ9FғXIl -9!JdF2ҫ3h9HRpX>"W2*zhN@)UlWk ^ 8LLEzuu4rW Wz}Gz5i4}Mjع]qtעjo,FYe;W鑓jc-і T+[Ie_PPVswyBV2!Sճ$9!ʭ^`n`a,b?KR{YHDHND =q-܍ yoO!e|<洶hOA@P~̾~ ep \0f®r۠B-Jy} aC|^^ U,'UVw:v0B}lj%#bo$.Ŋ?-ޗ^wNd𺛿%Q6 ce Juxz0\>(`DH`i$Gy {^!ެWnqvJ;4 Aj1iq#?:#Z㚔 9? @5Xf&܍S YuINBD5;;gPo{hǹLgJ߄+wZK'HL-{5տ8>ɫMȌir/3̧inԾٱM(b"eL1dFSҐ$8t']Šxe6O|[IP?/%TJ$%#'BKY0kG^y /=o|  G>r@% : +~/ͿuY]1KvB|Jd>/W)tIFfKu@|&0oi֛+KL"1Ie ? 6 7;sGB+U9H317@T޴qs.r;tk6{32bf_}Ii+u\&v\~?wxXxb\b_-o;/gWj+%ޟ7h$Bl2.ӏId4 _Mx}#ky^ ddNy%8K6OnzD핥C哖Fko->,0vFB5`ķ삗$o|/Gӈi+^X-fbDU\3F#ٹy^ P%(j~WLH7C&D:!p^W-ĚDL=Ly١@]hEܢ#"̬Š53%Wz 4 D}a鲛7q: ]qN'fO˜z/| 8b/o:t41sx& xFxD1z%I:rl, myAzfJu}ң̙oErYQ 4ݜpi3.2N~}C­AUWCNו|\o26) pB˜HҶ*]@8x:PMdZKnI85Ǔ:lFMǑNPH2U5W0;ƒ0YzGO8R./Asjef)2E) ƨq$F6^ IAЎEr »×mɖ@s>|ِ,/_ܚE+(¤(eGdCv$ _/oL>~ %9 c= L!#ڲy j`ٱ4 @+KIRDQx(#;NF~(yÒUru(9^ȑ(++;DG~lS(;Gtߘ^~!as7ڔYuò[Mm=e~>vST),>|!T&A79miJD[eD!*-COUt!cEe,T3fNRG{RߵXE% >jS_4bVy% :[Q { =L,F$Zl*C)!%Z m7B$e^|{?7~p@?2ubZ~>i-Pl Ԩ2Fd1?*J 2Rh x@䋝&LH(Xv&M1ZT (x,`0@?|y"酞jw |LnZXjvpn}O< 5ޯGzwI,9fR'%,)fuz^_71fy#*PȇF#*J7h )WYE1/P@R ᴷ) _PZD*{S?$/z<Alӽ,_\ɖF̢~5% g; !IcD$l}J* yqahWCX/,Jh_j 4"XL7$nSe)Mf (zd=gx lu-;\W''ʔw3/ZD,(,^Ȑ X \Je$?ed "EqH"J7[*mE!5SA𲶟t\?f0%z ?C=~yJ1 ,ՄjbnI3'^ pIJxP1ko2Py.hy.^sqT_|ACɻNS?TXG jqt(~ԅy6M<͋r+t O CT2rb9*7͌˕=3lhp?#LԌ鱟H}Qf:Nxº| } Bڢ3A? 䢡G?C9i Ck/>7^;ut*T7dDz>h~d蠩:5BZ=<wd/XTv] ǼI!C ڥ&r1|:/~8{!=fp!JA^aSn-6]M&3䵷VTH)ש>?IiJׄWIG؟*Zo,jx%6법d$E%AM/)47IUPED[%SxU)e]c.^Uf1zfg6c'3Dmd7?a,WN.C2J.C1*(U]0T D!%^4N1TZv֠[ZO*<uXY\K]id@Y@d<ðZl\GRYV MX XD'h^R[Cj$fY΢xqՃU.vA5Ш&q؇bG[4pXtQ5w*tQ+àj\&/.NQRpcw$D0 aݿXLAccOo.X!^"Qa9DiۮT/ ݨL߆am>0hX{i \Ny!#4ۻ.L eeLC<e%|$`KѝEaT5[hz5oYΕ,U<95'at$F:7 __"B෗5=@A(DA%*&6V%e}lwkȰ3P]fs6!IU^<ΤruQl%/9Pϓf8 ٶ;K pPrԹɂ|E%o"aڦkV>rf>OQQdg"K& ,7pY rz>@ E*8<)Isg~r1:~3E=px'a Q?<&N"~DNh;L䞴T6=-LjͶ+[/gؤ4͔yC{i ]r}^0XoIdLh^B={V,n9MJy.(e}*vs  e-.۬%2] t@'vwn;!&9レǰ1*JsZ̧dblOZ HJBk!WPS-I4˹쵧;A %>8.'nYG{hBbh:xT11NNUCssjN@(hۙް vXX壆{cbPm"qѶtaA>SY\Y>V@`0 zQ%fs{A,5BA&:cnmG>"ow;+rkÉnm>w<-c߾׿|xfq/fj;s' =Dޢ>7@R7|@c.G]P5D`43m`R?sF N< O=&: 3cYY@&Ƽe[A?> x]׌TB0;oF@ 7T眠էrOY@椓9Aw{M@"g),mEqkHڶNGosU;qܠ9fb0ƚ8tr4߷mѿaY@ #f$;5#C4zt2޸Ny#c[.$OG4#H~Eig%ELwS+$:aw|q|uąd?~ػYǛ0ep?yf;V9]BIG\lS|0/%2"D # S;|:ZV+[A nP9F \R:sنL8nnM;n#6E]Bfx< {;?Orߑְ'B+nHsPuvoA@C10߀pEAI[NwKFYM]ܠfXWW g+y%B/pǸsaSE}_kܺՙ@􅆶MZ^9l+(Su*LHWoZqg5Eį0л[gY ׆,7 P/54о/f*m/lf/Y?LBc m7`F9<w#:zX)2pD ;(籛#:*4ސ1S,( K, 2H0R a+HpA8`ԼHA.Wҝ̦`A΢hAQEв( e&uQq:Ev۹}Zܠq0ii/c)tPT4X2$Z@~=fL rt&̠~$D8=@itlf"~̰6Έ#| )НYFj [ueRd!";[%Ld++&M$6at5pEX::ܳtkVCVdL+Si; 0zj}k/yz;Q y@O0Pzj,uhl_D+Ȍm"ܐaeҖxr8ͷcEހә4)G"Ia8e 1 ;|" 8K\%) )PSvn>|*t."m$™~~$ֻT9Ӫ|&"щ^ dRG+_* Q:kX'Ÿ7tE"ހFHP81' 瘐nqu?|D#ُ'tU *;EC$AsCWVL@ApVAO9Iv~x|EiEH>L7^L~ƯXdFk7 ceOʎqJ _P=pNx  ;1'@,}ev3R=|&5V|۫e?1ֺʍ~X+Rqj~VPIUűRaSEWPXg2@Ӑ6O hs0&{6"ٛ}43e%!@tcyy_z[CA7t rud#ͥAyu&XtL@.l&v=yޖY/~h` ir n>MO`]at9V8px^4OL6 Zq*3aޗTWt\R쥛LHDgTOawQ=82:tQpzFRW5n":z xo $e`CN{@|\:}=ES )G Մԕ>])vߝT:.3&]65߄nC!(2K @,"X1/u).e!;Y7 rEGBJ<'K5$Q=Y9H3at{o;3ŹnR0 Df8Rycd1Q&pH&^IL}44 pj {gMbf@S1~{rƪg6NRuu#$0l7AU R{.mµ/_,xJo8¢k)8d{9ZA!I;g1rcnۏĈ@ⲙ QM@2~u"0X-Jtߕ~V]q.] ;_Mo*<K)GinĢ@BXXzGS= O1hڴ}+N6+r[6Mhpi4~1i{Q*]B%㰛~9]j&gSȠ.?3'OTa4 $ڴ9L}lu?&}¼C(9xlΪ  EAܧ^ ^gpqȸ z bszGaO&ѦG"TR>f{ 4?|U)=YQjqN}k?H؇U'j꺨 p`.3/&Ĝ>~w~+^ig龇M\ ;pB$(Ő ~ALIϭŃhS*^k~#V{:*29hv49h %>bߩlS9/&^oGÙ`G"4Y8讙4 ݦu4O8=. R8RoSZSt7AB8oZ!@u͘S=ۧ8=;S?G˃v|GRt2A?xC SD{ <@}LyA|qy\\ʮWwIdBCD|^q_wmop晊qڨmtPZ'Ջm] Cln:އ=0о PCib&1gaB1M< x㋟x𕴓 ;G^R+kqY/ 'P3MqЫүmnK"Nö}\{^hۼ6mQx7!;X0Ɩ "n3ǚ0G*YVFf--fڕ~WvG'2wQ033bPZasdb6ph0xd]McmuMxI=yc!BwrD]FDQM&E,hˎ9}RT]GBJLOߦ$'eNJnIA0Gq&?;MP rˮj"ڗ-,2< mz6BVꘐM0&Ⰽl٥R!b4p~3GB`@dO1SQQ mgI b+ gk8m aPW8P,ecS_,R, Β~}QxIj@#@C ÁStIG*:"ڼV;#h cS PGMqlV'ZG(#MV+DAl!ckh3"n*8XjcOX"[m~2!UE:"*c%1Svv{I^|8ih*j"':&Ubi2*VՉ>4[M(Lc_y&Dj"Tf'V>RQ,{9@׹Z kH%+*)CQ18zvtJ 2 W\Dҵ5i(G$6R{I rֵ)hs4gi5q%15ukU]ıHIN&!Msm:b=qA[sϘK;zSiA  ؊] !)]!f.3AI"oYt׮i}oJDt˪2WOps`O^{^5GQ1&Uq,mE}SUqf 6Y3 U'mfF(tW\) fTІ0jME%IU6zΙծN8a=sM-_vV:x.eBgze<~*ץ! ܞղH$t%:'mY.vYTV/ׄ r}7|VyS:p5qM[1+EZzBg]蔫sB{#ku=( … 3;9ѾR5db#0rDicn+wꗥ\Q(󪠢e oDErv|ȅi$^\IwrUTA6ʗD gw#!d畵q5Jt|u ygbD+⫩`-7UpOY7OBe=$q[Mޡ^wGTBwBjI2oH.űsl~.t\\壧Ds}Y>ݱU~l^e̅=<&hP>;To4ҽY d~*c] 'M2$la,!%+Dy>ުr)xG%VKssY=CqbNQ3!Eu8=!u aɥOIg^QVĢ|ĩdsIhIOT0ځ[;E}PS-ɢPdcjFe5R c%L+_xxmĺM&#DuE1v9VV * IJ>BEy:dqJs}IAr`ND*uew+rGyY u^ b%n^ HxUE]%$]hCU%6G-u|,Z}JӉ@W2ґ&ogu +xb}Pu$ Dok翝UU+ y DPt a53P V=[Jz(*",U+A՝Ur38l ,Z\-!Ct]]>92 0IyJZ .%ko{90FIHӳȨJCASUʪu9Dbo}JzTmm 1ĚF(CT(Ўf=< G!v B^tPtEEݮ D4nF?(9pP'5ظ*QDĹQ]ӡQ+P͐A}ǫ|N2.ƀM%*5[FD۩Y:T.):ڜk\YgLBO@*vǬ,s!-UW'ƅM*Qj`;,iT}8|?o9.ƘJfS>CwZf eVH-_Z&*nle2Q$ejKUl 6]-Re25E 1+uLtY11j=WIq˻ԩSY.EW1o2fJ1) +tlO3@c cbZuL#S* &_VL4/no pܢcuAqd>QޔS HL?wgbTS-YՂ!2ՂaڊfUPĢh \cj8)W[4MS|Y4_c__e0I<YUEmQ-w\@xfXg)9M(>=Nsă:4EGӲ$=E:UNv!Rp:qJLJ[I@|VD5 Q8EVZ)I.SEU:Y:MP,{{1ᯯ aݏҰΔn7}_eW5u cuP_?ʂĮʻnyqESnpXAEVsNtw ]{Xm%~M ўNaizxP5Q>״,ѤT 9U\"/wHZVdþEs ӏg3;u6;Yr  Sg;=tE1o[qy3,7O̻f4,.)]oe1qJ ^iUk[O6=(O\XvfÑTW\m{dۗp4A!ay|"$c[@mTJzu۫m}b$iQjJmZ&jgb\^2mbg*%Ӱ0.JQibV] 62+0tDogWz*<:8l|*@` @\Ld'rIP =̣m2ЉW(4|br-ӝ}lH! km@$cw%/|\NNCz눟s^z2Ѿ-M?>bei@CR'|c04m;hS?j֏XRp|G۠lA7̿ xi5 H 0I`}NY?[ y+_k^}i]v1yz#Rͼ =T@e875eEK$[ZMmiyHH6C!@a|26> y q.>Vadl\lH1lV$i{b{H\fd[v<2AI_fJ5c4=\Š(3{<sf"ioVIiMxpiJk}LV勐ڊ!J8Ύas5[sh~,uHvQm-[[˖W2՝Kͅ^?,hئƛ+G8bA0T]k*{J|GuAs`^I8OJzk3z zk[_ǣ[V.F[6|]z'A6u=&q4%|/PU|@*1==?4[_? Ic8?@ÇOuƳχ/>}d/') ?D"{%R98=7 ϟ]IHe) PHA>x5JWf_XhS2`OvJm֊G|2W{7+][Ld >r44ResA;i'FFwhaϾ5 1=/SN|%2O" ՛[= i@3G`w"}"|S,ӹQaF]sL anLU' s ]U 0a5Fi{=8@h[k{t~5a>7ے}ni?je~ ڣslO}:>hNi;{4G7-5"\ה 5?=hAYmHlNan9Z* 75{y>oDi@F Շwȼh1_JȔvǚ7vk>W~'!)WSw| " V2XUxkFET7KnO8pϱz:/gw&~OJ\ 0bל)9psIОCdI?r*RMeFBc*cjOe3Ho/dZ(Ϻ"Rթɝ#&9pQ^5oCϪcyzF7~OC M0܇$)oIoRHHnpTҠf 8T>`D24!aWкx,;owкO =\00= &A A OHxC۾ z:PZUݮTVDy!^H͈G4NP!įɨv X~I$4 s; )*>$pk2nA0?u[ ͞؆݀ؐe(Uܸ?'J)J@Mؐt#;x!WH!o!yy*Sj@hԠSѵ_a?UDIR/p\͑P(XV ^==> NRwх(g]<'Q^)~!78X20e-БO2(|ŚxqН_9)p<%<=A_ˈo(x(3@p`O%.ΨOat; ¡'Imj۶ ѹM&W;N# %Ɂpt{%M[VJ7KH|A}OoHx􌎌HsU L)xwMuȏ`؏)r]0P?y.Vw^k;=rx]pHebKgH%=}mBܜ@乡no3>(e=`8K۞ *~A)EHMeQZ&Pt'{Crjȃ?SYh u%:&*~h=bAWQUDFϹ0^ eKȀL蓂vi\8e:fʴ*?gkĦ@`\oI>3퉒H~-,P%zi1[<{Q6 [%1<$cZB&:gxl]{DN5Ud38c$0ECt)}߀?1 caħq~(+_P`S:ET+o0uC "o;QYWS'v!6d/i|jL*[J3Q3:i<#JӠ(foEٜb{ oN!"7%8ID]e'?vIEĢ (=&8P,ᕔ"JKF Vz,LLEE.WcPYfeB2qZtu*ǮNtqS0kƋ,J~>P靟;>WaPrP5β2"OAaSe\$@Ӣx͉hPʵҝu"F^6zGoiYc5%yOJ)z9Op64%5sR%qrs%y~ݔoī\$<)M 'W2JH;a^APvF4l 3 k$Nw HE8zPz%טHQw8y٦]٫MMe%+: V*]#2[/脑[>ccB &QVHpFj}[s eH!NaOmPX(h~~[upZȑe&W;ӫ[狞d[-7娴. y1 m9DZWKI}Z[,ey^6oT6낤Gfxj2@A#Ǥ _,U𖂾џ6iDoJ:i5b=5,mD^>Jj `#oi-Z[V|8Y5-A9qW< (P̳t[*\gO++gRL͞&@Ζ4Ӹ" )Yy [ϚQC'G:>R`u"h#k~|Lih_onÞ?[8#"qy!Ld` C/G'ukryFCƦ4p7wĵ/tӾb}ZA9|tD"Sq-oQ@,1r2f9*2b.g3!bXAqjT~{`}mʊU_( _D֥paWT!c(i1: J'`063( !(^@=+OX#lxx-_5zS@,` yNtW' >DƘ,<;"(+:|m#yprZDm.WcWH#P NxO%} TrM>k7b)7*)yZaix /)ֽG(5$߈}Yt(w_AӼߕWiӗwtײUPp-uw f">Ǜ=N*ʖI8t&dĆƋW*ng<;= %|~? ۫(QF.`3QdXQL)Y s*]D]I:(ǔ?r=5NG>qN8xDx.a5ָ;.;i$'e.f(Q(XCWQu gUН[E(3b, y]JrNY͗r>E3CDnjQ2ޙՃ.[H=˔;{Ol6r:SnӟՍsFb4O0յMU6dtcM4Ju^3/H+ u79y?OoD! 6}*b/ E]4FR-P Sl YádC ")r${x $TECC5¬]!IÔcRBB Q+aj;J&e(EAWZMɃ惕ovV nzx&{S<"uWF/ uy%vɇ}{nЕ7o5'%JrKR=$^)| m$UH]#" Ɔ] A[# ;/]<>|ȕ ]hpB(h΄Gӵ`Y] Q\SZ '-{ck;'U2<1Wcr q#sWٹI[r,qwyPxRA`˾ "9+U${K ?PR.+:jI p=MЏ`쮛.Cy]y_u* l]75zq滛n{$Wk/1sck> ֵ`2FyE0-މ`[b#wb)w"B[ͤʟϣzˑw{ѓvbJþI9-gԚVkC 9C5a=|&8ތiºM$WD+3oʾl|P]Dw%Q.4<GhTO!G^dr~40 %GXF($ѹߴ]EMLA4D"~yFn嚝M{7r7P||u,ҵۭw+!ŗS|Sp$]t_lqK?,\>ǼC^yݝdZDOOrbH93>SC&L3Tf Q!ц\z4nD⭳͗1dHf9T$&|3MjS|ڏJGUFCmcsEEYybekIU%goh0u;ozY7ɿd=]BuftlnEZ=7 GI.k8vsuJ^7X\+.Ms.)UN;fN|+G$/cAġ\jx3>m{n˓h0 B򮙖a_#YCxg֏z"~n|+y/H(r;>o *AXΌ#)_yoqzr)L`z7h5nroKJtլ'(i<;_gK2>)<ԘQ p%yTy^Yw eX5ݸ i f՗c_ 8T9!ј;3 TgoI~:szu=I3Hu͜9!k\e흁3d e | !9CDO<'9by|xϟG<;7,[BOr p9W?OpJ\:;<Y'ן3_a su0쿗ciH\]?`_:pG#ךjf:þX㛉azi$ d2eA Rx@FDTN0숺IvZ;bjMhg`"LY@B{W']a#0kNND h( Xiq5^z(CYh͆Wy#n=1a ػa`oK }Մ8Tq;BE`pYa҉1> [&\oN\7<;}ȯ W8F|"z[ \o׻fpxU \"\oPh\o6pU:$7WpWμc]c \o.?FXP`xʰ *].~z( a zW+ݸ uҁr1).G+^E^p}ozׄwR2l0v4znWwώ̾RkQF+ i7k#v3ͨEr5r57A&o\ 5^b k7[ŕ(C EFRכ?Z+J42sgכp9#3>(|XbtzVF"H`c8E+،xvoi4BvihX1QAxF`h-8a>/Ij6@Ng Dιqj@x%Z"mk ėϕst#\Kϕ:fda}][ K梄ug΢-%bы"l~ٱZMz|b 9v~tXY~12!FYA ɞ.R ċJUa{WE y31 @!~MrC#nE00cdgj^O Q|~]6֕qVII,011Ɍp޽H-|o:A tI{%(Y馐M!ĺvVɳ90ɘJ9ON+%4|݅&pr ThE%ŠO #/qOF7*6I8<U0gӀ.J|qu»q77AmI|kI έ-ƮM{c ך>^s^)`A9 |;`||MPנsk, 8 )\v`Q01曃 ܙ!J@ 4~Xr # <C!k#B~b7 NC|gwcTBj#[mr; w.מ@!PR"oT Brōf@|{صJtkMyرy@iTOn:{NpO={nی,LhPcM Z*rȒIBP;v6ٍ̀~R~(S_\R7e5]Hr+zt'yF\NZ*|oP6)⯞@{B9n[YK(+&9{W 6x:!hꤡlker8=LLi{Hum*{ 3FB VT#F39GR(b|oK P8r]6l\s7%`DVӗ,B6'ފH.k#`!}DF*7 $xog@2eI8$&]|V7 .> Bw$ȅ*0uXQbl Bl|MLQ ?~!7[nv5w.[{a[G< %toqup+tot#G.jUK*⚹͟\C+\:Y\`ylU e #(a$8& ‡F"H%@r\qHKm$a$rQ|U̲=e"m4ЪT0(ٮi#O e#m|! U6"(T}P*5)YiXlI0gz#؉#12%LE:NvONf;q:,AGE4[AVى/Q={+C.pu=$ן}|YךdRX\cKKu| /LU,K\iǃOBjtbV!-I#.a3/zi#0q+;<铣z=1 e/L_^fyGPbQC$OwsF2YF0vHOz&X?.u_"}VLj@H_DVk]o|id_"w0jirM*6]`eAh2+i#q.E,Ժ=L%"e/l* 1R#J k+E(*S~e Ћ\֋^P&D1ţ/*>52\H^nH I'=7GKWуB `+.W/|aL;k7 ʑ>KbOQ>G9_˽A9bɝo0 0BԼ)^ٰ-iPTf(dADx:ճ-黡mi|!>gEO߶ؑGLK iVã]\0̕rF53R|rHJ4%ѽ8>;\}}_#\Hg@U@W &W#Ħ @ӠDu{n?'W+ᔋK' x^0g7Atй.&D_\tv[vY teǻ?cbrHA͎2mˇ?80}??#}śg~[z s IzcAGt~sgMtC'<]h-H'!8YCwȏao͠piA 0[XzațF9pwЁeK>R] N(j oteU\UԦVD.B\$AҪA| K 2Y݈@)A?{Gj1pKKW9'.}F\!ꦐk$.*^,RjzFm83 h܀-%_黭l{2\1}᭜~8>Rn߃q>Hh앒ooHqb^o\ t001Hf.ˢ(o*1ls( : f Uto;^>IӋ>n荳'`@hyrx TSrA&?p/ݸBuե'>gypҸ9/.Ǵoκªr͏(5&)]}SEB>0d$ Èr}EٽA./՘)74|'%4E* i8"rw;RF9`f ˯NU^8 ><e<(2O i'^䞫(8Eq->'J87:4N0l hpڿ#1PT;ݳR(Jɜ 6w[N0LFUIJ\L3}`@8.QpBIʼoU>e2LxEIゾDgӏ3\tFGҨ,~P"eAr|= 0.N(AQKQ.AA(ύq ?p4nߏDԧGf8oWvBKqV Rj:<`9gSO/)vS?p>B L~%p~b~ߒn3EsxFX(+ho>Z(8}m6A KB&r7 KѾ]w6/}Os0" u59<*觪Q:b_<&i =^ڛf05?TTkLT7Tec ,( gپHt@yu6Ui7"["Io8E IJ+j;ed4V ER?i$E SK F0uGXS5*`b)F[dwg# NkMI$Ȭ,+i6q x )aw dtsmhrKcH?P$ESDz(H>NY/( A( Io[) dk =$L^e\  qT_WU "R6{>ѪTCNh+. -+Vf:ܦ1\Z$Dfx|S Y@R -> a j[PMnԛ+zB *isg;q/^gx<AR*ȶa^6zv]_e`ŬNQS7?=+nn!cޝp$ٝ@tx)vN^$zѫ,mWJPHpt8#Qf(I a"E_=䳠(V`Q(rD5o1om/.fz'{Iq8}hVUca8u\'{SNp Tk`zo."3"=ʙX}´*ؚʪ"N_|QA oU PW.m'㞰}g!Ugjg7Q"4!8ί!5"'R\FIB@HA}r'|)VwZ|랐Rf@P"Id#!}( >JesrYYxb[=V ukEЈvmd/a|7ҮmVTphXn\ ̔YcH> men##B$T $6pM[]3M[إ\ƮVf{P5pNlEŪѤj欬i_K՘jsTMk࢘^5I<+x ]H1O>OfpR5%IK!$AGj6jVLi ={P5Hz;..=#Bp&ƤjrI1Iմݾj&:e${cZ4 o)-^;g=-vCHӴzMK-fUÍi~vNJtX#ޖYţ}4k9=/?V $U_HSҶZQ^V~!wxJNҜpDJK1!k<7} w™YfCcrr"o cV>* 91uޞUƤg[}cLB~=Ak=|/ A8%D:< m`jod~".+ KiUkﴄД_t85ֿ&[q#8ЖrVN+ Kz&aҺK[JOxVEr֛N_4iZ[Ϟ9|XavRYOO{. 1t*~Y W8cYoԷZBh; !0Z5:RfHL&X.zoM ÛHGRdXG>G;픭,/LLz[e]o#ԯ6$ @B:uSO+*#[AEm`ӊh-e>),Չm*ȏ|L=y$hM׭ vwArxj]dl6Vaݽh˧vYyqjO{̛,P0vrHΰNjS#~%´N?{Ub檩 ôP"|OnI!ø[iriģEtB։.k)i#՝/3;N=NºK̉.wѫu7`N$ئd:tCK ਉCcIREGRNO2G] !!.I:ɓ9Qe/HVw8+4@QU&kg[ޛ۪}=l>"aP4蹚˖w9b^vֆfH ( Z&6iN'Lt! 41B9!)Tx 9 )Pְ 1\b@I2PU|&)? =ћI{ Gh䛥$Xsp\cIg"n*#ﴮCI8';ah9}oid pn^wcIh~'Z]ja"4_{W%!+‹[˒>v\=̬ Nc>KtH]zw-V3|G.ikp$0I{.q`ț80Ktѝ%a 0Óe qXݽ@AJܕQi_nQEʝ ?-~wA)뛝q8bv1HLB9r6DJ?#VĤtce& ʗ}._@'66Tܕ*;C4W':t[5ZPq$ KW8gn~*$v.66#x"M}l/r&f83]WȻHWtvg_3ΘfG DmRnk,fW1¹ٳ^gϹT"OKHk/X"H:Qk1 Lְ`zaQq2։hW%v-φn}\qq7:Mqos۞121s# 9Iotu Lҽ?ʱy%ooFnWˋ>$Ig"NHjʨd 4}"ꑲφIez azt0~F=\O5_`~y+鎘9&.0xLs"I=r?\ӖU('~̮p"Y65k8a$X,Ij+|U$7L e~ټ;Ͷoi۪>Iy=@igi"C5YY^nk!$=QlFz|c7u3EgPNsۀc<>/CCy;Vi,-3Cp:bL[$5|o 4k]=ޞA @e7W`-3[f3HN}`~X 9h;c~{uާM$B>yV2z@VTw{="ZL^I(ߍHƨg=}Ȭh lT>93(qGgJ$-MOA{ٞݒgkOFZQzsF_fY*e߉%1 ;mϫ]X;AI!'B$(nGH)]Jbe"4q[@eH0> p r*ʣdb +3P 2c !bpk(VWI"|׃DnB`H S9ErR&ӝdr dr2߂T2IJ&xFbAW]dwr|VRkS&"u[FV])XM[tپaY s7)fMgi<| nwtgXdPFܹ?c>)S"yW=}o.?q99W>A&qo6|' N >%NbN$'y?yh8 Ďgo 8̀w<J:9uRxm{f 4ڃyD&vgeoH 63`78ZXrybeı=vYxB6'#2t6BxDz1np4=|M 3 T5`<ϵ? }tDdU~,2W_&F=Gm8mfwT0/ XVxJy&i†3 a^"x9//J?XIg25%z<(.另/|ˈ~#揦/Kb41gή{i;M2gyS ʭH2eqX9ݗ}M 1#nYǿ \??8 WهɆ_[?\b|{7_iqOߴh0р l;Wͱw*DR6wȔXQޭH{{sb|6w7@q>JпOۛu|' z={P<?W:zӛmQ(Ҷ Q귏үe<nPOwY2kPF??X 3߶ȩE8; 4()'#;gAKS@|*b'ѫFj94F=91dj!}FGs-u=?( RQw۔e,ț ލ}GP )h*epBcnd }8*ŲK߰'N6cHm셖WPG8 bI8q`墘(O4"٭ky;Nr|9>-K+c?(@n]Ё@Ƣv; 80 $2\rPf tUߴHn=u!v 2Ś]L\[+(SzOUA5/ݍf:U+J1pk\T^bI_nE.v[= z /iG8pYJ2򲡼HQ ~@v2A,I'Kvrne Or{paĨq?&a%:×~WycHLTzj~ 'ÛЯ" 1b\닍blr ׁkB*n" koE96f& ;I矫fim<)U-AmvVbOX@3Wps0 "|~<plX^$)`xK)e C$P"Z"p,kN')8^ rZq2}Xf; [.c₨A&_ wW3fe*o/Rwh"3Ur5I'>J|9 ebC LAdnX׼;JpjxZ2d*dg5pPD,fym͛4AR遂3`-<;f}@ȳ)o((``P vS'8rP/u2W]JrhwqJ#06SFFhal]F /;i (TB0T,J*Ul[4l;WʡnT"yxv|~ķR'SW|/*q5rorTBRh5.ެ4{@%96KPS'U\K'ous& M@۩L:il_onvoɒa' %P CufxC:x"'u&? 4ɤQԡ-*h Ppn;v2t@Z |TB2b>ma([Du'?r h9Ůs)`@v⒀:G} Jan^f?h !$UA9C"8lbذ }/eCi~'msB xĽ#0.=XBPX=˛ނ+ږ* [X'Q nB- M37HK +0`( O!!!7 O:WBZשJq :\OX~ZHQGKi}vؐФ/Qƙs3>6[a$`:Dd,G(\wi%6ͺ -.9թ#&$Pll &>%UkscHj!N"[h{4٨~/L@Ag?}ArIK7a Yz>dѵqUE ߥ X 'w=Q4f0IVU:Y\)P+Q:d"t)1~nҶo ]MŽDrÜٗk >04شp(3$s8z*(ZQyFEk Rvl-'%uZՄl, f/_i#=⦥ 7Zpg3kˑ;.7{#8wt-+,kWB:mƩN#nXg7Y0DPA玍hRƍ3hiV*@ZIên#UvF'y?Ko!/IL$2!$sP[P:0@X͸wdŇAlW#ϩ4BqUc ,B )?ho>7T !مlcckAqF í)^E789\ /6{-f .֦NHQNG6[YnmGY>\#!R"]3|ԠA SBIu.S˟`&\ӠBOa=RD66!4$:ht=I8c!̕<.AKCeZ>%EP&9WlN\Sۡ[$_KC-P(Hs]7Fd<$ӥS|T~eP/]37$َ۬whIԤnG.V6Py@Wze$ '"J0iLeY]8мiyϫz*nJ@VI/%??34ѯeNV9F1T5H0̋</Ñg* '݆845Bm!|Dw3Ka!6h$Vѫx>鄼~ 4]j$2ֻleIϪ$* x$vz0- W.\Ch} q35tV܍AlmIbqNHVD hnKo9 zWa"x/ x"KEo~M(];7ߜ]yV-8d{Zlq =^v :uX4(\tSGl@~䕇˷Oٰ|SjPnzJ$48臮 b?R*'閆jˇ4T_1N/xᆭKꝴڙ/:[xfbr^y5(!'^޹%wޮbT6=n)9JɗdUC:|jyĀlXA//QF>wdM{D2G@gRZ,2)x/-ySBl7"bl~PE\"mcOB]%Q~q8SuG|A*M6!e7qɫ{yq#Ѹ4O\N\yq;| W]u=l$%XoMr~Bb<=t  &^Z|Dʲ>(K/LI O]F} u*v,WWTc0o$>q'ޱOZ:9bA鄍*xQmsoB\d8sr̥3p3_̵qE̔v6cgAx5k' uZmAxɛM5Vol֯}Y}!_T{ۗnѩ}|+O,Ÿ3aZ<=)/|exH.vj$A;(J\[Niו;JT0nP)=v)3^ðg}- o;R *-?hD3/hΤ۪N tnhur/ ? /B[ Q]InAh4u.0V Uut_u961<`QYu9(7V8x b̫V? n_@|+BNRXUn4|[s*zr|To@=ɬҍwKd[>8!6F?x܇ؿ{]X /u(JA٘|Vp w}JIU7]zmxmmm R]^mJ)4$'FCBce졬n Q6&)j3bPo!>b% <4O0gŌEd ?7Ն F?eW>^ ԍ(72['F_LIUPF ,>ak%:sf'U wms #[͌ IOp{7Z^ LWrNui[ЛN@KHw9|$}egz.C+Z]f fH-{<>XЯ;ݮ^ot^\-\|MIE.ZoAkׄj"zNF;99O=AVVA8bcUf3lb'B/3ȩ՚lˇY= I Fkor<fW!nwbCyo72oSmr$%3g I} $C9\:˹q$#zKVlB*b^H~}y}ΕK b+sju~ =uq=*1p0c8I5h=2vY̥7۪2)&Z`n(,ޫ́fr~8,[|r$:eO)ri{Ė^^A(+BUdw̕!0RoW"\iEZD _3KIWJFfT7QcE$^3j~(fWRu?) RӜ $mԝ'SzS&!sA V?c L5*ZJ ޑd5Izgi%Y4ԘM `:HUσ zo#k;i\Hx75}7G37ԙ/?/|Cwsf Μ=3uf <$\C^cN:;%FVy[ַHYȊ\<'V8$btox3Ydz$=W=9n\8NC,܊X/0H?M,U+Uj7Eת^Gbjv 4 G}_emDͿ5+pϪ>?A49}97TGD?/nޮʟ`@VLчbr|<ÌV1tmWCEG*u PەQCt > Ix0bӄlӬ|o0iL  T\ߛFK$|(Ԙ®F3D/י Q6iQnI0}RqR6O\߆R5:% {ytڻ^$=!D D("gr@. >gX!DbQ,JLE8h!D܏SX!D j\q7p- Qn+!DQF Vq+i!DD nRͿ+Dj@[Z} teն%C9U >?voS!O -SLHP SdMiXD:-*Çe 2ʹR#BFBkT^]BQRdJ&iPIz(&z(7  8 <4H& 3ep7x(&QƏ-KX!3th߇D7v#> ء20vhjcOI=4CS!>B‡B0|h*N ?4ՁCS?t u):v|!P:㇦>08h,>:o]9݆>(\CC!~ ӒD'}0Q>0~h(Ç7zh)Z ءB0vh*cB0vv#qM衠,D 3{^>uv&:8gAPFŢt(E"gj%c@5O 2>U%$(CeZ ,?"u(Х /C_ x(=!FE[j%C0zj]ؠQ\~b &!i&^a:lqɁx- o! g J9qX6vZ,,[EwpkBe0|sΠ, OV5ħ[b'%/9lQЎG؇0D(L"a$-v_Iʀ!DX*6VYi Q*ћ{o1D.V]pK  k1D!w#1Ci<yPGکb;}#"8c Cfe?4!DKCtdYL "! !J!* }Dz+QWRVBQ 0Dﳰ; !oC4}`.+%@Ӕ*mhvY^~r֒(fPbWΪ?$ADٲD< s3U@ÛNaeC}$L(͵?9r}.8'ab9=3(YUl>DD#~+4]Ye8U7êӬ<". EeE(e+DQ,]j-C% EÔ H0uR4/ )F E%&(l*QZ^Aj R*J0 TqFj kچ/aPѼ2h}o*ZT#AE ѾLQj~|TVGPmР09s nTє6JV>(5GS _zp0(ojfHoIԗ EB+ ƩSu ECh͟( -7EAi#EY8L];68XAٍh͔1E~f 0thr.{ID,YY\)p˔(pQ NDqe࢔$F2(6i1PBD邈LGCS`Ʊ*EsemO[4ljТՏu?bJȢ[@Z4ihdc>x>e ZpMdQ*K4(0kP.&܄g[Q2hpQyd7aYW7莞آ%AcMBv{>龝V 0hءͩ?( Nh 2aW-Je(驎Gbb{*&jgP3kV l솱C8M袋{]tQN]{f.ytѬHF7N\Ff~/2l]DSERhVq_4d(xѼ(]!/ʁ&QIc%S(- `T{ph=&(H<aGb=v95Y0:M/Pa!eOѼ QگB(Ҏ {6E'6ET󮺞}:_zNዚ`8<|Q F{P|(r@|>PK\fí1JLڸyq<`(o `+] =?)t5@dQa;E=Gb.2gѸ Q.0F]5 h1<#.0F~iy/PC_wdJy<^FQ[X1۵0FGl.1FS1ZI$R1:SN۫J=̂G?aJN#14cMJbr7{cK`^ Q =` d4v^Ѡ$hhhC4dC?Uz&(o* 'hd2:x1h(XUaFy Ḯ8Ü«sz(z<e4$YOߙ~WZVʋt >,~+BD9U Wtgt!/ꨒjHT,Ѡ$(G?g4I%(ڶ(K q/>lg@=%,3:ImRRM~g4n g4(_tt۔qF5qFZLQ HѸ4 Qʌ&p-p8 nfQI5ADy< f~|L0Q00ft* 3JM̨]f4_ffԔE3joN EwDǜlhQ{ΨPBV8LzO$x8KdOQM4^qnfr$i7cJ cƫbW PvŢ!`~(5ܨM֛PaMV]m1֭>kiaYX? w˶vsdk:Zo: Z,of9px}/S'w $`_mb@!X+AT= %Fj7'ɨߐQTэCy_ 6sIˬ'I5w} / &D/rYf%Ayuϯr Ӱ3?1yo: D^*-JF*dD>kZFd|Ocn[Fd|gIZHᅥG F!hg}Znf2Y$U~B[`{ٍ78.Yak"u-VXĽu#q xFύ{ʫqw>rY8sV_({’,)ybtX1?kPUQS fe!}|^ս݋^ ؽM0 _"Gd3T,/Ma&g.S ) Fj=8N_zP.)9{C&{@g^ uneE)ƃ4t]{hdtK 6&^yN:iN I$ ɥi#~p5AtS9w?)g}{\{˔{mU;le$NB_& |hMIn RBm:'K FM)V;eʓ_Izރ_oO|e?f_f!%|)LBP(@;>%/zF4zYqoɺE _,o]FPNbhZ56,m{)fD _|],hs&_ ֈE'ݡYU8{&~/MvHMK&{smwZ/{(vb)<{ѶZknvfy\00uH|Ա~F.ޮ ה[}+ _dNh>ዱ-#K`o= pK0cL{_)q}P _oz> |`Xz%%o/  Su.Vs@wQXHrJ)hM0֏ z/ C΁KBJ N2o%pQ GsNe?Z` "yͅ?`|(teO0Ʒ4BZ%%~RP Z!P|S+oh@ `R AP(7tQ|K%uB _:P|K'B Rr(  wںRHZʗF.ek 7B,P O ķDR_+BV [Z!p|S+7BV ZHVx'У@qj|)GMQ@w w<+66 MNPf8PYU*rfG#kxAo4Q]&IVHUfXBUѡݑOov|$_.n>7Q;(Ip-ec0)}޾H|cqK3w|-iʁ0p+tE -j`>Ba|SE4_Q3hFX|Co6fK-ٽ 0q^D$qk=c%k6[k}t\uIAo@t &`6jXI8"|3K|=HVJ޴^M *|Mؽ^fčL|Mw5A 37nFz1ORp͗|,q8_w~B;Igku /F|1"h%PU/:`a,-|G|M0/G!ij`H ?UH\K7kPOuI?qq7iSPC曫K|m,IDb|}e|QX9kz}թ dŬ[";4ؾvh0_20_5q"Nezg\9 ;p To 3$f..ځ >b|f(iH/K|sBͷYH3j8_QiN5a1.IE9QbgZo=>)Á uORyX}MgKHI|PDE0h,1K)ZtH A- :AzbMɨ&3tz-JЖԱJ /\J&)X [MN2(Ԝ;QˢI> :\wD#=W rp@>P|3G|ݟF|-]'N|}_~WSs,D2V9&%M$;R$j_e $αuK/d|'K|_s*|f 6;H0fΑ> Mi%XiN DXGLYHgk|Lp}cg+e%fqX| K> OνqOzBc|!:ݬ>ٺF0%wO)q=R$Y,_{iR#ذuPYe d3@M5神%HU%7 3h+{eM{e8{[@H^VEZSKIbӑUN"W+)|s1ک/૮.@r5R$ _Z_L__/%-$^ _YuğOJzhfx~ ^{))ތh!W*7 BV~!r@(Ƚ!{N r@-G뢍8=}^^k!XDg'DƸi"9&wc^"qErJKOVɽ~%ɽXܫաȽ%G{qBr/[5>$9k;x^["Kw U^;3$og9!"[O Isk%ݝ".ZX^@_B)e.^_g SN5"=mo*dB9b*wڤfE{͝+i%``zK. -^Ϻh2JǠ0ٝWRgAօ E:&X$/y@$%" *L-px$زSTN}BR,zz,EG7Z`Ɩ)tVElAk)2IgXJH| ьі!C5ʰ  6j9SMg ilZ=EGTXyK9m? +1&H]LFk-Jn_"-`5~D'*/wYeU$~]3K6$^c8KKi鑚$O[QpL7ltn$E_ &HߖHgdREm|%'09jB-毵 .~HEh@MkeSZS\HOǠ_u"vχ ~ש [P ,}'Gjehj@RV!Ts$m0[slH'ecPb~Rx 2, MdF"qO"zÍ;A."zzpT섦/%$#]ψ3D6\Vzg?5U1հm_e 7Q_5EB 6z36 n]~b%0(n/o<\_NDO/$"DCv6pCo'}\O-:]9&^r{v %x_$0G/ZٲHUm|@U͔q6zt0֜Ma {I5UЬuIdBy4[tW"}ˎBov%"!I䯕j~ GڈfD["f6W- 7g"OIW4#ߜ/G|1ˤ&05+Y!oN !9A_ @rNo@՜o2'99.'9)IAiM tH@o rR˖ od_ ʬ@/'6L x" &9)[&"9+Yߜլ@/g"sV HYRχ}BeW!YyAe H!{'#T*$Ia_q6kMՃǩA=Qt3G C.(%G|AxT_,( - U5nɃ<$-LD ZN%זC~m>-4ۜ#=y/ ͧ[WP o!%e _I փizz,H͍QsSBvlLqM5(E5ߴ' ڔ_+WY8'ׯh~3'5=1](I.g"mm( 򷭎%&Ť_nID__NImAJU~ZkI[!<otT\,ŀ-D]8^=Wj 9F$>jAkఴb4hـrr%7_@kutcM?r3xk|]} ׆m_HuG  FAa,_+\HPH>qz z1RGĀjD J WDBL&D]K0B{ + ߽Fe-_G6xF׆ _kLSlj J_Dj_t"f3,R!dRQY"9V@1*%~Z.FP(3l$h)=Di/ ɯ~`SrWЉŸ_ؿœ /{uO/u k,q|HcS=v)*K5ѿɏ"Zsw4IɿMw_z✕> 1$qML^H<4Ph{N$8,!68 垈ʩ" GK?Z 7]׎>;0OBR$3kvj^r;j _ W_=N_)Eo*No`1"`j֑ (B[jB^/n5ɲ&7z~>{IŤ-uQ]8Q '/vڃS}_`B'P}ig\aP#7WNš yBK ؂A#}Hu9( LRZ7G!,/O 3Jt)I.­DU|}nA2}m|^ 7ߏ$q(E ~G 2yZa[|_$  D_KIm._%#z/ {[$$e"W}^Sv>HE(D/"HE 3cbu0$3 _!.Jo ,M@$3I_"@$~3_!%{"" _E!($ՑA-=yȨ/($# _D!$_|#!H* @_! $!o$R#K $bE RMǾM=vDbDU 8WjY ,ٝ:!HB"I_ !HB2I_ !_lg[vIU-6 Նx46G:8UH"I_l(\}dSGa\~g&?O'? v*=|kBѨqz~/s%i2e  =͍\݂` UP41z$F<*)z,Hr7bdqN)ɊZ[pxX>U,fު:qbsBjT!l5Uc!MZMMHnx*:*U@2x*HbVSޮ Re7'؜Qdӿ:x%W:ЛGmR9]KZ5-6OڜY*Gk f8&C'cUDגk^9q?i+2r4 z5`C9YLZRpF 'MD&W4ʑZr91 $,is#ѵZmɪxbsLisfI%WЛm3lxʒ6W9]Kz昕 daeIs^~t۞r#X;FYT~V.b[Ku#F4`WFoWK3Ukվkٚg'[ukY\& e!tX~hdmGgGʳ,fb9*F&;.xbQ5 P٪__?62 w{႖=h: `Bʌ_[:Cu=(+oʻQummoHۺgk?a෼d*>y$H ,kO$!)xhT9cuuhَg7!L+޻ƣg6쾬F{zߜXǢEۏkQ/,[Qg\fy:oZ'}c#CZ2P9ƨCoYk?ddk$7!]уܙ;~}y{G]&8Tvkf7GuiFATgQR5ROIus;&  ǣEG[|~q:hMgJQG+I GڌKYnOTK_em|W/fgԷ=[ Vcu~j oh!V5W橩c}B r3ۯw/>_Ocv7ɣ[[r>~~Anh7[ᬻGmA<U@C U}]G> w8Nkdi# 7{9"Ka~ŵ^)ƷTB.Cӏ9T#QWĠε\Yl}Rvy rϓ_x̾( Vz;a 1l?ZsV3Gv4 endstream endobj 740 0 obj << /Creator (cairo 1.6.4 \(http://cairographics.org\)) /Producer (cairo 1.6.4 \(http://cairographics.org\)) >> endobj 741 0 obj << /Type /Font /Subtype /Type0 /BaseFont /cmss12 /Encoding /Identity-H /DescendantFonts [ 742 0 R] /ToUnicode 743 0 R >> endobj 742 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /cmss12 /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor 744 0 R /W [ 0 [ 750 666 332 467 435 475 527 229 501 435 648 229 488]] >> endobj 743 0 obj << /Length 745 0 R /Filter /FlateDecode >> stream x]n <]NљNbLER@Z qfsp>F (]DqԆ(-NipGs 5(pxR+ڌpu-&@ƚ^ńتsuE✞$ ^Y@=04I~§> endobj 745 0 obj 278 endobj 746 0 obj << /Length 747 0 R /Filter /FlateDecode /Length1 2588 >> stream xuV}lS?w߳9/!Kl6?l$4#L@ h(_%M)*dY 1Pt6D׵U71BPX' M QJ縫ԩϾs{}k;bz (ld]KFF[j] @ woivuxL{',6~;+ M[֢!O]"wЖ;~@uVB5 e` /JDj1Oxfn{ 69|n7AtC1q+O'E) ̢`:E<rtc'\'O kfE4F I@GFqPd&[:ZwZ>vﴰ꥾^ Y1<(J2$d:LP"8`$rE$s ۬4DZA gTUU PJp8;JHYٵd)ER}bcFs5/>՗PruZΚQٲ#4~q1yyXy:d[ d*iA)@Oʖʉ'řV"=wnhzV儷ƣ=sj{-r^/{LFiiى<+';f@: Fnf0J"gfad#(/ (DCv}#}cO-H䃑]%%P0"L9@͜8QHi^]nxD8k :i[Rv9K4CZ+FI!yi99z%n޻zuRsÈ52Uf&)euOaSpJSJ!+[Ftxӱݿ\6E :z &71ҼfCTKF8kCE!,̑CVZy&'K''.wYßV~wǏkpCWnƏcEG[>Yy[K#j_sr|(--B &"Dt+Xs2H Ȣ) 2Oz:.HX)nJDO\#Ț-+ R}wQ]{./~No]?2z|9;6+{7-X1K22p]ML Ob{$eۤVj0݆TlgO.xaxx ~jI'Q,ȣ7^]ܺfoˮy~uй޿ןy1::}$ w3+q1տpyb01 ;D\Òҩ<;J`@&J3Z:ၪdKrm3Fy_!$N1yppA{az`Ͱ-+[D0(,b=vD}z tvP'o1%8F(RB ^%er6hjLNXjyZC4q%.ܠQ%r|^}{ 'nĘEFbzLoМeTl0|3niZxWnO외 JwXD@ͬ0"%  \W5G=I?>½}~U-3O큾KEb}ap4QnթbI,A[-W=*7 endstream endobj 747 0 obj 2019 endobj 719 0 obj << /Type /Group /S /Transparency /CS /DeviceRGB >>endobj 720 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [118.895 236.908 436.382 248.901] /Subtype/Link/A<
    > >> endobj 731 0 obj << /D [729 0 R /XYZ 88.291 795.961 null] >> endobj 717 0 obj << /D [729 0 R /XYZ 89.291 764.475 null] >> endobj 727 0 obj << /D [729 0 R /XYZ 89.291 616.774 null] >> endobj 22 0 obj << /D [729 0 R /XYZ 89.291 221.95 null] >> endobj 728 0 obj << /Font << /F40 549 0 R /F49 593 0 R /F47 592 0 R /F21 548 0 R >> /XObject << /Im2 709 0 R /Im3 718 0 R >> /ProcSet [ /PDF /Text ] >> endobj 756 0 obj << /Length 2162 /Filter /FlateDecode >> stream xZKQE.C2 6$ݷEi[,9I*ZɄ,5c1B"S$<ޔyYվ페*̩߬2)Ծ3+;mVkYrN\Q\7Uڄln%ϊo)6ך[S{SUnL]l7FasncWV ^L"F } $*bJ p<υw ZfEDkzxyJ+@ݨѠWN;6 ^_9A7`1Pf!͔U to g=Fl#HڭArȶ tM(XE7 T%`3 cvA1$@n#C[ `(k;/p!w{0ie:08@-D@ @tzt}yD l̪M< G,7-GIOb%Sfg))8堟xN>c[/V&GMH2^YH~*K_(y{{da+v!IfȄ4:z8xUѹJ+ xO=n=`?|gmr!@ \H 8E%EJ)}G[ #UHC܅yr K=@E)pV`.`KwLy#@PāځKd6M}Wg庫@yEg} _$Gr۪zy g&Ǡ{|U9\RNskAq 'W]3X 9ֈE _4 $-\D{3`Wk K,s瞙{dE? 8E;bdD thY'3I]H,L#PxDB.O‰olREa|LZN AhӢD#WRuw/j|g0+y @/Gϳ{Zjͧ4+[.l4L-ރ Ad#sY.+xp:2`e c{wB<e1Iػ8rQ0ńEl7B8HFHOZh7&]EۙaSD!wa KDElDz$wpszQ0mpP2,U whsY7TcD$AJ- f1)=`.b#Œe!5_S9r\`6m9 T*bmfB˳K>1&u-emG/cBzA=b"1~Wzv xHzgjZѐrݰBjJD0 iw<12S K5v2 YAmLa*%kS{,xvP.|_(Ũ]Gk/;A0#W [EBוMvveUכ*;3i?{PT=׾dhGNUi3߳H* |Ø~k3۵ے1|KsOeueWG5" //o74p~ҹs2~q"tk[kmiЈl|0-_% W~SZYJL9ekٚ1Jی5i}ӱF_6`߳0tÝ?6Q+\&Okwz}| ~X`[b/QRZ,; endstream endobj 755 0 obj << /Type /Page /Contents 756 0 R /Resources 754 0 R /MediaBox [0 0 595.276 841.89] /Parent 725 0 R /Group 753 0 R /Annots [ 748 0 R 749 0 R ] >> endobj 750 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (../../www/genometools.org/htdocs/images/collapse_types.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 778 0 R /BBox [0 0 214.917282 284.867859] /Group 751 0 R /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> /a1 << /CA 0.517045 /ca 0.517045 >> /a2 << /CA 0.5 /ca 0.5 >> /a3 << /CA 0.498039 /ca 0.498039 >> /s6 779 0 R >>/XObject << /x7 780 0 R >>/Font << /f-0-0 781 0 R>> >> /Length 1130 /Filter /FlateDecode >> stream xWMo7 ϯйʢ>( P{ rH8AF>J쌝`M`##%?Lf.~in9329 Mo3h~3N?^ΒHp-ś{C>L{냘üP 1‚RWv$ D|RHm!%!aR~iayXnχnv&ʖ뉺YP ep?yᜣ=͎*Mk_053c"ɺ8آq:?NOk١b24NFd, g8%# (!GMqNј$x&) %L)!bVJFDc%P`7`}A` Mo~*MA^ꔎi k'\ٳG<-HVc.װJVJJ3Դ\SH->L,0rE##Jݫn_2LVm VcZe&4Yr:jQ$A%Dqkѭ5fVBVkA'rWK>Jn^{2f}D_EkƄǡwOfu֌ SV^* ~_P j6 ̚@ELL'$sM,YjD6V"'RG삫wjV:?͂3]A51[N)#ۻ) q^59°ڜàĥuhiVo҉Yz&Z endstream endobj 778 0 obj << /Creator (cairo 1.6.4 \(http://cairographics.org\)) /Producer (cairo 1.6.4 \(http://cairographics.org\)) >> endobj 779 0 obj << /Type /ExtGState /SMask 782 0 R /ca 1 /CA 1 /AIS false >> endobj 780 0 obj << /Type /XObject /Length 71 /Filter /FlateDecode /Subtype /Form /BBox [ 0 0 214.917282 284.867859] /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /Pattern << /p10 783 0 R >> >> >> stream x ;U OP.BQ}M46Ax`0TR,j)ڙ(X#( endstream endobj 781 0 obj << /Type /Font /Subtype /Type0 /BaseFont /cmss12 /Encoding /Identity-H /DescendantFonts [ 784 0 R] /ToUnicode 785 0 R >> endobj 782 0 obj << /Type /Mask /S /Alpha /G 786 0 R >> endobj 783 0 obj << /Length 787 0 R /PatternType 1 /BBox [ 0 0 215 285] /XStep 1000 /YStep 1000 /TilingType 1 /PaintType 1 /Matrix [ 1 0 0 1 0 0] /Resources << /XObject << /x13 788 0 R >> >> >> stream /x13 Do endstream endobj 784 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /cmss12 /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor 789 0 R /W [ 0 [ 750 773 629 686 646 435 446 488 501 229 353 332 625 704 543 488]] >> endobj 785 0 obj << /Length 790 0 R /Filter /FlateDecode >> stream x]Mk 9nK>6B%~д?#k C3ڗhɇD6<-N 8hò~x[s֨5$A[,$NfnG4R4 Qtܾ!c+z "3$Ζ t 4jVzVW] Bxe)TDHDQIU) ўJt%+zuA$]S%moztV,΅qnn}\q8 endstream endobj 786 0 obj << /Type /XObject /Length 54 /Filter /FlateDecode /Subtype /Form /BBox [ 0 0 214.917282 284.867859] /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 0.502732 /ca 0.502732 >> >> >> >> stream x3T0¢tDb.#C=KCs# ## = 3s SKT4.  endstream endobj 787 0 obj 11 endobj 788 0 obj << /Length 791 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 0 0 215 285] /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 792 0 R >> stream x5K @}m29A@p] Q$Y,!<E-bl {ʷS#;Kg 55@Čk(Y-g&> endobj 790 0 obj 292 endobj 791 0 obj 110 endobj 792 0 obj << /ExtGState << /a0 << /CA 1 /ca 1 >> >> >> endobj 793 0 obj << /Length 794 0 R /Filter /FlateDecode /Length1 3384 >> stream xuW PTs`}vY Ew"V +ADl0!"(jAM 8WI4i:Ӵ1GL:cfIlvbM'sϽ9qkS4 @F7nf-\'I~cVfz>6j_MgꎶMM-t+mAIjۺmgM}n%y֦%\$&7uYeG֪ ӗD<Ѐ=jT!Lc\09LTxp p۷4 5Ƚ N勨X:Zqx5)iA4APc0)ELDVWd*.¢B|Kgf  83yc$th{ 2LiPOb:Pkn'{x4zLġuRL F\jtZQNtH\J1_lOC7)Ims?ra{T[t ;8ũms;ٮ.#|QQ21ѠYAXm'| 7?_6 fj-k@y/פ[tp +WD;p>oe&鋃f5 "o5V^qZNM>yEgJpEde b+U5Wo=B O5KE^}& {c9?7 6Ȁ5ZP ghƤd3'a$^0 v2 a9(x%e6QD)͇cK'Z;vX@z? 6<3OqĽ.z;XRF#j9 U(CUZFB/H  aPG쒎[N +I- HK%ȾWQ%1}hALi~D#Q-\Dr>* $?㝗w7t/ԇ{|,>ٽj_wruяfɵ?-shZ7CLmb$KwL_X{r+s-18F *yK" yYlJ H5Z%&zK\N~ҥɎ]gg! |y2'LQU'Mr0^c13їpzɗ1)19KVɒ83-aȹIrKW9V`0SE^WJXj}ٲ4q}|iU ^j43\C k+*~-_yn "ИbSiapi@=ӵ:A=30e֟ =3/Kԋ{fel*"ZPi*ף֍~}|c jo:~f}砫h<|M8r ߖ/}v(P>;)>mJ^Ϛ*3rIϙhȜَRsI1ˡl}W_ t4VbVJr "Ux北yҲb(Kc.i#&r5ș+RJXbNN edr\)&4)j轲@y@Ph ,I?Y)h)ߞ7-.4|qW Շ#z;=\[:nڐa>(HYÓ w7VedT ƊȮP#SjLޅbHةG=7 !3ff!OJa)):uxʬjjH RglI\J!"|0F,Cp> `<u+ 9BHǿk5Z5"ؗ:b[1H(ב)f2})l]H$`k3qK_\9.ݰ endstream endobj 794 0 obj 2641 endobj 751 0 obj << /Type /Group /S /Transparency /CS /DeviceRGB >>endobj 748 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.957 241.448 124.586 253.242] /A << /S /GoTo /D (figure.caption.5) >> >> endobj 749 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [143.8 241.448 159.429 253.242] /A << /S /GoTo /D (figure.caption.6) >> >> endobj 757 0 obj << /D [755 0 R /XYZ 88.291 795.961 null] >> endobj 758 0 obj << /D [755 0 R /XYZ 89.291 764.475 null] >> endobj 759 0 obj << /D [755 0 R /XYZ 89.291 440.8 null] >> endobj 760 0 obj << /D [755 0 R /XYZ 104.235 441.618 null] >> endobj 762 0 obj << /D [755 0 R /XYZ 104.235 432.153 null] >> endobj 763 0 obj << /D [755 0 R /XYZ 104.235 422.689 null] >> endobj 764 0 obj << /D [755 0 R /XYZ 104.235 413.224 null] >> endobj 765 0 obj << /D [755 0 R /XYZ 104.235 403.76 null] >> endobj 766 0 obj << /D [755 0 R /XYZ 104.235 394.295 null] >> endobj 767 0 obj << /D [755 0 R /XYZ 104.235 384.831 null] >> endobj 768 0 obj << /D [755 0 R /XYZ 104.235 375.366 null] >> endobj 769 0 obj << /D [755 0 R /XYZ 104.235 365.902 null] >> endobj 770 0 obj << /D [755 0 R /XYZ 104.235 356.437 null] >> endobj 771 0 obj << /D [755 0 R /XYZ 104.235 346.973 null] >> endobj 772 0 obj << /D [755 0 R /XYZ 104.235 337.508 null] >> endobj 773 0 obj << /D [755 0 R /XYZ 104.235 328.044 null] >> endobj 774 0 obj << /D [755 0 R /XYZ 104.235 318.579 null] >> endobj 775 0 obj << /D [755 0 R /XYZ 104.235 309.115 null] >> endobj 776 0 obj << /D [755 0 R /XYZ 104.235 299.65 null] >> endobj 777 0 obj << /D [755 0 R /XYZ 104.235 290.186 null] >> endobj 26 0 obj << /D [755 0 R /XYZ 89.291 226.49 null] >> endobj 754 0 obj << /Font << /F40 549 0 R /F49 593 0 R /F47 592 0 R /F57 761 0 R /F21 548 0 R >> /XObject << /Im4 750 0 R >> /ProcSet [ /PDF /Text ] >> endobj 798 0 obj << /Length 2801 /Filter /FlateDecode >> stream xZ[ܶ~m=4yHpQm7'(3]3D RͮT/aC9W+z{ hJ|`2 V_p&2fQw6АI}Y mN{G͓g/5_77cv6{Yj- 3W]`7gVoiaVYoS̺)Bs&OTU4>psɫ!#:l0ۢ*xƛOԞy/+mw. .+ۼfjSBP37-׻H)vE6IVk!X0I*Fן&CwUUw9wAm3),^61k  u뮫R&m+q֫񹩫 R1hŦ+Yx[z,Mz+C$Q:NeUkv Mx= @5V*Pvw(Zd>#^Vѡׇ;-@nuswm1-NV' z`b]7lJ "'} ػ.i#S*t܈iMB NtBYPSLk1J3DBfwH`) Ȼ5qHXo&}\ Ftߢ%iHrwQ̀A_}eS_WrtGo|ߖ Ac!|wG:2[wp?yM}Ϊb纈#+) HnǬ$=mq(mtF!̹P )yGc}l&B@1M %; V:ҨA1pReǑáMIB=IcMWvR_ h{xϰ XT!w82E; |l 1RV[TB 1Y )Aqp /|.S>=WLyڭ~L3=0C|~D$'Hh(-̗p`G}"Cz9 L8 LC(󧸔D_Yav1zB8$VDw9 @)nRVj+jo-u^fCGt 6hKIC` sPArS]fh1(aXYXCMsGC!M#?Pp Xk!w\$֖y#SzmHrkAd%;~E}J($c*b+"ļ@ɭm*(ݔ1A:#N\ ']`>ߌ\`tW4%#I$ϑ.#IUII2[$KIK{B#@ 6i%!-U%H_LbiTa 3H-!A"~Ex+BNHEȗ_YYR Dn󆨔QFV "_/AyǤ\Tr\L⡠g ҭL O=,n.&1VaSQ >#ϼZT^LbC+M,ࠬCYL- ? *XKtʚtPHmMm%TPi I̳ĵZ0W@;؄m]?>CpϞS(#o.%%( x*:%GOn~=pZ IP*EJ5'ݐJjw}Sgo,6 )3bYy)yfʤ:Kb[я/{Q#'cjxVc eᱣwVȂKz.ť$e5O/' X9{jzngd`FCã |/ Ϩ8 ΋I,aZzKލb%ю6)<^1!U,gÐIQ*P11y;,J>/&18I䜼Onm޲&V3LZ,g:e}jI'ݢ[S[hH! RZ0TdTSbQk)"QCQAěo%d7ף-4׎:Py+~?x jm@v*x8 endstream endobj 797 0 obj << /Type /Page /Contents 798 0 R /Resources 796 0 R /MediaBox [0 0 595.276 841.89] /Parent 725 0 R /Group 753 0 R >> endobj 752 0 obj << /Type /XObject /Subtype /Image /Width 1100 /Height 453 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 825 0 R /Length 38316 /Filter /FlateDecode >> stream x \W}eﻉ ]Q]@EdQq_e[dQT}Ae55Ę8̛7M޼Ǿ*] M|S]}sr}!@W~ D @ Ĝ1\@d F @ f8`Ɓ@ bIƁ@ `@ 8`Ɓ@ bIƁ@ `@ 8`ƩqTyJʣ@1vՎ5GL@/ _ipNS ZKj9rG~@L9&K0NM4<9XDKUz$n;S@$~=P  LdT1zSؤ!S_a W ] [ `11+qtjxZ8F*nT"ATRcV˜,p8 >hT"蔬ʼf#$Z<.=vo91n&Pgɫ*NC~%> @ Ē@t+8@ 9q q @ <@8@, p8@ Ē@8@, p8ڶm ?KZn 'Kڵk׸qc0Dh}@DZl٪U+VcǎcI}5m189q8`0n!`+Z0h``0e0[o!K7onVYMUl۶|ŖJ1iӆڰMͧ%ۘHJO5ZV3L`gvbjpWP )ZIFZStVJ1x3J13:Nf̭t|~0LcnYc>-ڰ1YC21u1Fg!r/uj3N8)g8jפ);$۩ut2Zkjyqt:q8`0e3&Ʃ,Ʃ댣q8`0Sx7p`wvq` IaY@kHW"]S5N6ר,?+2Z]A>V;ٌl`i?b/"](5gU EHjk`C1@ KX89ת2bһwoitҥk׮zѾ}{m۶ٳDΝ;GfNʷjN|^kjVWtIݻw;;v2vvZ@Zkj'}:l0#E҇fݻwǘ7o_L̬2,_֭[cϝ;wĘӧO_p|o߾k׮L6L-9Y@ h0Hfcೣ?j- ],N5h!32Uc0%c>a`nnّBy q20Sf Z`Jjp8` B2`!XTq86#XHr,đQq20Sf Z`2R5 8`0B` Cڌ`!CA,E d`001 2ML8`0B` Cڌ`!CA,Dd d`001 Hp8` B2`!X5)q86#XHr,"ezq20Sf Z`Pjp8` B2`!X50!q0!mF X#U d`b\9dee9s2SPP6233駲2Qaa! X"Uc<{% Aɓ&HDD 60JcN* P"vH^^:Juq d_r,R&uv˗/ S$-1zGƹyLєqPX&3?##WEΝc_8'tw)--e]ba?DP(XUWLYYf|L`"D&4&0vHlfFr&b_K0AAЭ pcPa A9INNo3WTTxJ ӧ+++YzJJJnCXBe&c#l Sa aYXgeGbơ=lA/8tG;zO>}:=]Krag䇳!Oa XV8z0[+˗/3ZmNQ\~D-YNJӯJ5pB %aO? a qĩgP) 8 ;&+WJd ?L):/Ʌ_hBq:u8*6=|~)1Oa XVuqN srrS?O<eO0®e=_;jqT=N?sRYJᇳl?Sc8h9N<;_sBbHzFϫ/8݄ƩC% X#R 1U|#[vF< )s6˒'lQ1?!%$ϟ}t"D5#0c)s8VVf8P0B` Cڌ`qr,KH'q8) i3AA,="e d`00-L aaa C&Lpĉf#|ۜA8`H,0Z0E6m|||̇qO6C0f0saLƁ̿[5n | {tsq0q8`$?OanA8`0B Aڌ`ts0q20Sf cΌc2A8ҍ dee0'{Kk@ 9Q$2رc-n1xNQI),0QFNرc#1kXhz$ѴiӚ mF`1#X`0oQ.]nlq4qhѢf0Ge1NZk$?H,0ZNbTZ58*eeeƩ'ӵkW0S砛2>3_|!qydkT7!! 3cy#Ȍ#Fq08gM9d58qqqZǩ3 3ca)sr8=;ڵkH8`0̧A7q80A9`  d`0 X`$` 78;O 4&&!::uMII7cR 3c/_o>Ι={uǞ ҦMo&DF*9E&&&UL6L-|<^8:zi$4@sOئM̤Q&`=h ~yWfzVRR05R P( X9S8eII8Cn]]ߒ8gh8:txGyY-]!;ѥ˿[89y`RBP|M8aa+]rZjUe˖ϵnf}-$fƮ]nݺETxooWY )c[hӾ޽OiΝ7Ş=Kۗ. e5mۖ67oNۛ6mJK~Yt ڦR>boNzF7'<{D)vf/_jڵq]CoMw´׾nMOW7Tm߿T7o~vނGޭXrNFqNn'b3 =K5k֌|HtHvhƍi,;vd6P<xGP( Q]:]1"<;Zq6oة[:=;zM{=yZ||ߩ-\تQj{vMNgGS P( ƩzTհa2Η_PiƩRDJ+㔕D5cKup!S{>zׂߘP( Jhtt& L7n|)qv߾ŵS}rȑz4cms(NWtPDt۝ 3!A=;|ߋ+^ mؼyخ],-mΝnj%ѶPşzعl4 W6} f^7ҥ󷵮iic̺uĘุq[rrسiSС#Ę C##s֠UL6L-|ӻ&3Cc fh0yDI&W իWSRR~$?+//o )oߖ.PTTtYv2a`nnّKm`a8[bYC'ѿS砛q,0q8H~6#X X5?lA q`>=p9q8H8`0̧A7 X`0!q mF`9q8) iK%o*%5#xOtsts0 1&~Doq8`$`0ScJQqwU_q8`0f0)EQ ,+8  aq8H~0žbiּS-nnq0q8`$?OaiG,99A q`>=&6F5Ǭi8 nq0q8`$?Oanc8`0f0)s8A8`$?H,؃nA8}[nk Jffɓ'M+(B 8`0Ftsts0'77իJSJVVc Vʕ+?1 =T(:NV3UEo U )h;;;[X?ɵk._|m:33Xͼo8 )m*ݻdlc1Q(`0X@lmv>rQt(Gtsts0ǒ@ii)ImeGq8`0SS5`ݻs_6:;{q3|8|81[ga;9?^-DIw -A \UU0J ?Xq a .r⟂q8`0SSEvbnX0)***++c#"CNxu-| ;B *!9l>\7nܸzqmt)VYNoٕoA 8`0)쩻?~A X`iaqݿ-]?V^^~Mb ^]xjctڈ__Ht?L-B8(z>s_S%YYYO?*g苀q8`0SS5fիό 8`ts0"G_!@Ɠ'O IIiznUq8H~0X}ٶnq8>dM`0LQE6$$A858H8`0̧ 0d,0Zq8XL\/_~A X`0!q0 ϟA X`0!q0o㠛q8`$`0SS 8pK㌢66`0 3A90 aq8H~08`q8` A=p!xa_E#Q|0q8`$?HanA8&`:J-R;v4ol q`>=p9S`yÚ߂ hXiѢf0)s8`0N-2P"d:t?~ܶm[$`0S砛q8`:8*8*P(0q8`$?OanqZZݵj*L4v{!aq8H~083^~4KAYhf0)s8`0q m=p9q8i3Ɓs8 3!q0 -csHHʎ;+Q@ӟ CIQv2>|3g$ =ن&MJ:n[^8#?mZV˖V2gƌfԜ\.,ܹD䋆9wnׄ{7oMS/y5kN4ndce*!6lӦK,>\jT%ii-:ڤIgMvvWşzعn]nF%z/BvXQ+:vn/ǒ|`X'b??l| {0q-㐎ڸqg0G}aGC0 w[!v9rajq |睖g͚u 8B| h=PV Oaq8qH ekƑ`>}}3OSe緋Nv\Y젲Ae|&::[`NmNi;[WD鹾IGjuFLN.f8:.oܸufȇJk暮7nP٦M_cݒ>p!X[[ۑ#GcRbJe'0:!cZ5C: WXx5BbbЍq8E8՚o1]9Oaq8q}Q܏#8ǧ6iQ $61Q}`gƍۊ4"-mذڞRӌӲe/ 9 Lsrr5;;oS/ͨP݃h6*,,GCe81U+aPyM#`ف,t1ŀq`A[qf8gڴ-wwӦ08c58{7(#*קbB8Mq,0 ءo_ ҌӵHMyqڴ#q chb (چ#(nA8uqc5Pd!CU.98sT{E2ӼwmN0qpL8Y Aڌ`9` cơ} .gtܸ@OiM[Jc S X98A8`$?H,0ZhW^k B6A"YPP@999l+SVVq8`0-`q4͛7SH@#??h^^I0A?ҧ`0Čӵgz05ʃ5٭o߮bj1c&pc V[VֶĘc={~$P>B0`D>]x|y`{2>ݻuqW[츸ٳZsq~cwVbg7W?ː!NN~’}E{T ^zӰaEư: srt,uJX <;iTԶcd!]k4Ќ痑1khxtϞ_磧KVV~Ci_7#ZQt_(/Ic(000=+Wҥ_b!qU8VGhҥKUUUbơהBpq=BTAθC+~j!p"b-U1!;JBq81՛_M842HL&PN{N0ӂedvLSTRe̙6MU3NEşNBBU >yhPHC%Q^1qw8*߸jyZ8Qtoqpf KJLԸBu۷Wpr"nv'6o?}zӱj:|;wq8811^11oƖ+W:ul>0F']roLN?7DhM|(|KN|.h$ Yw+t`&!0axqTeеqrsN] [w?Øٳs΍7Ԯ0a (<[42|:44/lPq@^? VMxׯ00+tjbEiqO_-1yBynSOO_3ŋE5פ]4o^W'=̜9j>|+*jKxqʩS߲#ϞՈ#rہ89=r6QM#4Ȕ)K͛ +&ظlow_ uNgOeV#ʸ/HWWӧg,1#@yヲ,K+j($5ԉ=L3`5v Ç;Ώ D1aaiQ;~xxMԩg籌qh0tqTi(*P9?0!MK[t~:Ke޷qؚ˗/镐#" '_~IaP(-9Q)Ymӟư~Amnհs gM[yǼyquq8+VL ]˻)MW%%?*wΝkMΈwЍɓwjG>jR''k4wnqΜQIV4lsiѢ[iG^fˤe9s/2p!uwwX8suG\*8g8qðz7t)!3>{p/q8#T+CcU4 (8>qAqrryxxBILbEZ?[[;hƩoxPrrX)qOqHl6q.\;W>~}qq{t'{Rqo5 ̝K]oQ/)iJD]:]gt8cds쪀Yj=S> aq!TٹSݘ0[+hJŘq7oяqHCBjDT\aVVRn#Æ2d4[ڦ]bm߾C>CT}ÇR[Vt .]ڙ1ݻw߿Ov~C?JGFv]*I5!VSJzԺ5n!Kv]^ܫ׀m[&Nim߾ʱݺ}ڹso[wۺuWUNVZq8&`֭5-XSأgjGP5oi$W:t1GS(GrF?՚Jܺu%k8H8`0$?A7G1qV`$`0S砛q8`$`0=p9㘞q!f0)sr8`8tTeeef+D q`>=p9ZS'5 3! | {ts00o{k8` )sr8` f^ 3dc f A84c…q$0D(dƨQ EWܧ@$?H,؃nA8xv4!I&\SaEX8jFif cSҫW͛70y :m 3SGwȌ]ja2w98OV`$`0N}c1ej:b )f q,0q8n!3222E7L|=` 7ڎ2e&5)lC,[(fΜP IX$:2r&sڴy k٫W'KנN Z%Q@H7/;CB-_g`ȴڹbE‚KkNکqF|GM0̧A7GA8uqƏe5 -~#)f砛qڍ Q(0`)f A7 X`0j1Ef8[frrr;f>O<}c&DDD9r|nݺ=?vuuE8H8Z~<='~lG#=<˜NW]\>}X"!ӨmÇ|hpӇ1=&TbTgw+WS[FÇVs֣xdݺj? cӉI懄?ӹ(3|M@ \\z,uu S > فKn7nҨQ>w`q8Peߘ8l[A))32@Ɲ; Voo5׮U3up+*Z0ɎcL^ڵY11.]oz{c7lW)&k ݺuH˿:t#>ʕ{fd ٳ26v?+Iv]~jl장K=:-%/5۪Ux۷ϑv25&f';V7}Ӧw>`U,qFvBn Ιk3dΝ?]iglűcFb##WȘ ѕqJŸUxCnYAAv*8%%Kbc$$9rve&hُN(yM))'_G|=apMN#IJ";~V>99{bwnW2>bOUO2.nOq6q,0qP֬H3\iժqM8G֭+4zz(;xR¹`3E').nҴݻ/Kd۷W,[ʿ9:/+8 C֮͊0$5ԩo _yQغ(ƌ9sf̘8}}?C<=GvOO{de=ܵšGL1#`q8Ph=ѻw= 9@L86\7_:itpr_O|xuE>\ʕ{׬9F0aժWzx?vlZ!\ ?P6쩤55Jts-clvgaɓvjbɓ1ڰ!_"3o/XhhA A8`(;:2NSRqKJ%CY:hЧ/FFEm+/N@PüjݼsڵYYYTha7TeR,'4bSᎎz\jk;̙``ƁB*۵kWmӽl0άY99QIK}|J?s@{qlǴռ2a+p :znqa䄂q6q:ѭ,q'߼ -=ppȐ2ZjͷM8[>:uC:v)bEb7l$Q>,=6[&M߿~SQ3ƔĂq6q,0i{I_ҝ;w M(id?ή[% /]%m 촵F>Q )S s޼k$2v[~ƌYnZT[C}8TfP/,_1,lL),|!P,-//’t$Gdktj8ʇT' A A8a(e) d&CVCҮ]ɓcM9{7n/qDj\ƹt]\ZTUi?c3aI#c?+ݽ8H8A88ong̙93";;J㰧c3Sӌn̙9ĉn3ꈈz0i\\ϔU8H8G Ʃ'SNuȐO]]ڿ' UƏ|q>3c}]7=tH;r[NN:հxqr|cMHig䤦s!Ct~Κec3.]q6q,0qjq`>=p9Z aq8Oa s8q8O6#X`b8H8`0ŞA71q8O68`q8` |B2q,0q8Oan`0f0BɒJ\o1"mF`9Hq0q88 q1!@M@R0"mF`9q8茣 @ȌMP׀q` s6q0l3СZNQ\40"mF`9q8ǔӵkWG\Z|=`v#e|A;߾=K@^ǍPml ֓W>hPѣ=5882>>M[[Ok#Hml\'N)tիmm C>vt-*zq)4eZ^qㆫuZJ_jj%))'yO+>>.3ff ۘeaM\dرIF/סC7s&&ݳܹ?2M{h?/C(:ֈuѣ GsSjDk65C\uj۶r*tQ~{3g]`qχݠfFaC._E/g~cyjt T>TIpp\F`0yF Ʊ<ơ2}1 थݙ1CjQ˅+JY4 +Pjs'ѣwTصkJrЉx{ՙ5LLzvm˖3g 9s"7mi8[^PKʕ{~q>{wdDG8t`V#ukiQZt8u[5JGrr 277r!C{𭤤~egf޽tknمbJCCOMDz=2rڵu-8`0q anYSaƙ6m~qJŦ+?nܸ'/e˶qh͸(sH/-{t$"S\ZơQwR_S5 sJ} %w,7Yi8~~)%*$ MX6@'39pzxfyٳ?Rtvzz>H-6wh̚5,vdkdģd'YOOeȅECJH..gw6f'ώO^Q;w^uq8`0Bћqt;k΢E],4b8;OX";vDrNپ:(DFQI53 tN"5^WJ8s} >Bi8ٳWΜ騫'Ntbk? (Ȏ1Na-[ WLRRNfg?iŤ.AJ߅ g2q(pǎON΍Ebn҄#CuB99O6n<ž)!ٳgޠǀ q8` 7XY ٺi'00Pk9 66^d~#=+-όjݼyĉ333ͯ/}~}1KlDC(;ĉp]>Jϐ!!k}{_]BDjw .'"+/r@/II8`0qL8M54::zt2\50ik:;;EH3Njjsqg.zeZ5ЃѴcZ-N~1Hq0q88$;6m.WKݵ+T(0b).~x c 8D&0 7Lo\ f8ltƌ$0 d`S2GYǗs:8nn\AC׮=aICcG2Gy ISL8G jٌUwDX=gc./]zq8ǔCŬFƜ;2G+8i`;ZΚlÆ@gg/5xa9!`0Gwl$` #?lfc39**:o^y۷Oȼ=\maoUȘʫr\ (5ע=2-_111U ge=$ 1l„਺^J]W`Ҥpbr)S8`Gʂgǎ ~ T`5JI`05iҚxi&y;wWf͚{yMlb6ڹs31W͚5MmӦJDڴS cǺܹ(E=гgwQ#uҼykSfsЈ剉Imǎoߥ4ctYt-Z-v!i9)ql۶N$8`0$$$$@TE8#1j X*X( Xh9l?7 *H^zE`>| {ts0ƩuƩjjIQqT$==}РAH8`0ŞA7?׭:%Zݵj*L4nܸl$`0)S砛q09܏si<|PiJq0q8`̧OanA80|9`  d`bk:gZS1  a d`#.&8G!0f砛q)0f0GsHȌ:HӖ~i3d -`q$'3`<{L auر:8*!;UQoG$?D1j mFts0ƩӌoF8\‚$+f/_tqq*9'G8]v5 H7O6#XHr8ǬGe#Lq⊊ 쑛)G5[QɍkNSTZ"ZQCMɸi3砛q,G:Q`C={GSL%j`GZJ&{.8<-3$,QK.Oa s80|Gg# 27_ecccܐ5ώF9h9U0ο˿ddFZlI6mJ͚5cOK>/!-Zc^JKK֭[]vhhh^^B;mǎ#Miѣڶml@vM&λwvƍiUiߟE\hg6mhF,FvfgV#+++n3B50۵k'ի+Wf֭[ۿ[Eׯ_g%o~;*G̶9sF·J|AV[o%n^Ri9vr+d' w;m߿¶@FN ?ɓʱS܌] SPXDx2=o*r7cA*n~-)f q,0Q)wyr>矿x!+ƼD??g !+?Ν;,5p1+WdI)+mĕ';YFMҹsgסi'B;̙_2j'գgϞ1| ងETTq{HHx _~ͨבS?U$P @9vmb;nXt ̓*mF(IX3i3{89GGwğN?NCV#rɒ% ,h`6c>,^[nfb̰af͚e>(..6{JJJ:ud&Ƥmj6ը1B ?NѰ`0A80͖-22ִ :w.Az{EGoڵjcڔTtdG1/r^+Ww6TJr=;bi*5T^HI9I&ӍOpUff]/{ ٙOLS봔{W:{{<">>.**<|sf=6;1z6$իF:)d-EuU' sSUK}sbÆǿ.pj۷W$$~dǎOoD0;_"\q8` 7tjr)ippxnnPgҤ).8ii##I%*-CDDzFF8۾ܼy3%II1챢? )ONmruہFfMfR҉Bc on2%+V&hewTTY37`]r-䉉GwTZQpjt.:#W 3.X0p!fǛ) 1ŋe,!+,fR!4KJ^]#/ޣP z8H8`:8mtO0 ,]3-MGr1v]ܹ?R=8 <|wLNoww5K0ΥKݷ*e,ۤx H|eߜm%gڴee?oؐO_v86){$2mr |ϤI{̖f3g~P2_n]vf潚sZ˩y lzB]Dҕq\[V#F!m:tCM؄͏Tyie?3fuqwq20GC>k+çK'cޣ/022c˖32ӶOEEmc,nn'OFieJ225osR"j+卻v]TC ѣwWM} *?(wrUZ+Tɱ%ȑ۴=qÇqƩ))'(e^mW!~C-Md?} B՗x$G_n\,‡Ԥ AƍD*˗sݲ.q20jhZ]0N`TI s,nÑ#bcWV>uʽSS5TbN}k ÷2S.LѲH3kV,;P]j}{SIU(&<8Ori_jyJH8agF/3+emؐϿR=Lb 8`0qa>`.0Μ9^*4z{TaԐ YY|}GJ0N]L5ϞcVlRv$]9 SX/JKuⵠ9sRcq8`0BяqHw|4,:GDњ.qH6N$!]n2G/޼yiٲپ`y=gu˗gq8u1R`$`0Ne*cmhIM|s../&`vʑ#,qHgn>G&(s,'7ㄇ_je3uawa`M))W8`0qL8$-[vvw5 ('gavܹN@0NUoӌC0iLơmi>vl?fcO-X ƹroSƂq8`0!㘒qHt43wCaDKt8 Fd绚q:xa]Ů37q8qq8$={2dS{{1cF>ֶX?6mZ[rq| ;fb̘1֎?oza 'tѩٳcҍbQ4!!cH#{]7xp7g@!ml2u2&<|]dd 8~b-:gb NԳgvj^|ZEe:}wU\gg7Nuۿd٬;Yg1q@fi6",D` ؈&PLIbEqӾYNn;ϕ>ڵK2azA*,ȂéSg֭޽{Ԇ&b q~NZZZvvm,KeUG>i55 T1È6"e*333%%80p<xb50`C >0sW& ?++KMI,+H)..qfRmeeej#(~d[*u%d~9~Gy /"Y6IJJeEFX80cq<.Aa(ƣ8 {0΂q|c޽{G]w:{qfRiiiJCbY͕e98msii>q4O x oJJŋef9de8VǙSČzaL`fq0΂q8z$55 yyy.qc0ő#G}hzjFؖU)gƑ n/]d8^5=v6Wթޥ̃q`gٳge~2uÈ8dƁqp}<lƹ{5I͹?^ (4P#P&;onnӧq1JqqqrrrTCdޮ]vIv߾}'h_ϩS `'|T& ;̐oՁTJOOw8Ɓq|J)i38 sg8`/ DOII?zrg׮]n!;QEt 8UqSq`HgfƁqH~C01g1`fƁqSq0Ϊ 2Ɓqp zgZuW]ΥfG5ҦM'Ԥ.뇥4nxzmc64i~y*K;晇oieC]z9j wv6?l'O7h.]zu%.ݺuԮ{4y~ڷog=˃v:쩧<ߺtb\?hP!Sƍկ:H'n;=8cg94cZ ]4h[NiZԭ۲Q͛wkݺOǎY7F<%I#=9dU?#KcƁq`Ɓq"q~^`׮Ș\:t5 VWJ>,xee.:5-KJʥ,\%sKO/w˺uG{ld=GZ`Dzsŋwl̘RƎ]hѮwV qqK,HOKܟ֭۵fk'N\%JcNU7==OƑwHd'DQvn}6}&lv"~I̦M륤u83fl&Qޮ]8[6K͸r͚¡Cݸs7nb*U[UN5|*mT䓣*KFU#qќ9uɼi U9J8qpETT~80 3D"H'|143s{$ڽ d]iժ-H3THjjٛoU;Ү]?[#ܴzup)fmݶb.I8{/S#ϸq$Lʶ]YtF2dʕ$;UhTT[8wߑ,Wp]N+05jvk2~|3+QPP2*U *ܰa-Zl8aƁqpHj͘?4ӳg &I /$(0.NT.jʔ11fw t8Hj]{X΢W ̝ +뺹J93g&m4_*gq7Xz/#|7}z7~80 3DZk샡a_IK7O_z =m[bm[;~߻ӻY]v}ceeݐ|/:zrllKzݖ,mn7#GZҊ_xc%xdhZ6}zuE&O^ӨQԻ8=aVSR*vp5ڵ'aq`b쳭C8ӧi>"JEsZ^y͜o{XڵjU9;Ǥ4n|jxUmП{(FmPVz ($^z%w# )))կL&z~߼&O80c[ƑO?ݲWY!(]ķkWg̘EE孷6e}vCVn{~Wb1& EiԨ͜G I:OXnxkqZܩSe+cmԭ[_}n۶#k8ag )tl߾wM7oފ+81117n=1F0s4 3T[ƩWi)8 szbXUU!aqpCC<aNY p1Ώ~8 Ɓqa8dpC 24{0aNY +;bc~q㦪wЧOI㢢:ThԨȑL*J};Ջ=zbP]i\d=xcStjM* :M٩SAbtG;xcDv=n t5 OIa88 1e{e@f]x;GC<%ma,ơPL[xJڌh9`B2}yC;C#mY$c`BCٹVz-a)i3΢q0Ϊq(ի{OIq0a8k3rK &[/_q8 {0΂qǡP@YGי!6,a88 q(?1CD8y)i3΢q0Ϊ2q(j^:v{Ո8a88 Ɓq(Qƍ[#5+8SfE0a8J䗵k ~K_X'!!aƍ*BVVVNNΚ5k:͛(I}5qCģo% a}Rz-[rIIIB2F#Ffddݻ׹,r.)j+YV_Ɠ8ŰīC?T&M:J:uZpWcL*MܹIm>a;&^=vбfV^8qfPl޼oÇ70zcgCbbtG;GԳgtX.PV3뗾3oݺUw$?t w$$_ud!===11QWJe]Y))) $=%r~J5+_+W^q*Fvvb39J)lQ ԴjA?Ueee.L#碛W59jmu[m>!dW6 jÇ ۄJi(MNt8Űx8+ [հ<N,cL}uvlP 9=o2H퍕5j8eokt-r1r޹ڧ2,Q5wvnI=㣶RtR+u5#i䒚ZXXhdc}.vp:i_^wizAlpP<Uy83IM_߱cӧuwoo;%<0iVjvLR9)%iO}e|X޹Fe &{>fLԹq[nS?=5tuGf?Y4VRM=NEOsp&8 ,*gSwA}xL[O{i|X8?)2'` ,j977c k"b 8 sq`Ɓql8yChѢ C<a> 3ΦM?.kʾ\bĥ[+9TGqw"oOġd$\cn g Q`:8#,7n%8Qh0xJڌH98 g8ic6[)++ 8'.@1&V}7q'NlI}%Ygu".=ek.:Ɓq+̙3o]>Oa88aXO!a+322233 H/_pa۶mk˖-ƴp*'ߺu++SN9ߨvMOO?p˹W{nP5ő#GA>Ӽ3 r'ŋ.FJ8KY;MƩ^5SqŰ qyqaϞ=挓cINN:0a'N:Q70Nff]JIII.oEӌ(Ʉ>5LG>0aȜr̙|aٳgq88SY$cŰz`wNzzsnL˅q>.w` \q 2UߟpDYYYbGpasι=Q+:dr޽}駺]K]Ť8SY$cŰDzmE;߮ۋ|k Ɓq؃H98 gޘj80a/2!b",0ql02!b0,Ug?ƁqpHq=g,e0C<aspʆ8 Ɓqa8dpC 2!b098a080C<%b0Ű3Ը+?Ν;7**J}4~+080C<%b0qp* QzG}1'aq`xJ<a,Gq:GAC 80x=4O,GGƉv8& 38S)8 sg1l8MUSNqqoIa!Oa)Ű 8@1͛7aƁqs~-C!l,1z˜Hg{όC 2'"d-q>&{ϿcMw^`iN~lR;'ca9g8$0.ql8"x8>ŝ֗[[pR[ˋ61vq4e.G_[|pVX!aq`'!b H^5T:}}#n ַ ϝeM'Wg^ F1!0v]Ɓq`j8>\eL@W!@f[4X{rΝ7D@yJXV[),mV+Ʊ8m\9ow0$ӵӇ1᝔qHa %7*l7bL̥7a?9_Ԯ]@<D(aP}Ip=|5d?:Yo猌%.Pt68 Ʊ!ӽu}f0^eǝs"q~ e0'HkWOzij~YnχBvJ&|HnC<[PS=wްv?g+rȜ }d/08UqlMx԰a_?-PtS Ό,Oak!/M -yݫI7oΫt0 UMŶ2VoG]afƩOtB8M{z/D@=) =VPqFb}zmtɃĘ~&M*JL,0~ysALE7߼{8p)8Kٿ7}YCJ9 N۷\…;ʤxٳgXE;{#˦MǼ|ǎ;%]NQ\V:޽6矒 32pر#Gפ5lgsg'ӗGGcȆ;K#IGY_+; ]rcǖ&b'4Mb [oPO5ĉA=4ڵG.<)m.%.Dvel K!AbD~@8N;|rȹ%$5 FK1UhOE Ɓqp8xmΜӒڕ/Or㏏HƲr޻ܩnݮQ.1T! B]\\ҵ5p9 ouyb'H$xouV'+%I쓤44YbL^^^' "f8|{̙gJrc'-\\,n") \wɕ_F0"'ҳgK__ (=>tBUӦ<'Ҍ UJv9H+ ݯAr55Yr% AklE#~8+?ΛwZ:hգ8=Z(ge0N8?ߌpV5NYU_t._z3- zmCڵC 80;K˜3Ovq"q|{ENp;_gX|G1j8n80NcY8%2].S? 6pMq`Ɓq`)L=8a σB8!S980Oa q1&4p8aṕq`\80fE2Fϱ98a1_V1Kʺi>(WWm͛o^3Ɓq`SqV0 B7~PabbT91Рwkvko ca#&'=_Y}]kwLnq`)i3YUSv`w/Ɵ6|;s&RRn^7>>}kԙOHթʕmRe<{ s$s!6,q`U}0d??TT^DTdɋ[KMiͶm7)h{ɖXիݚ5ܹkGbSx=;q?q#G1y ̧ax=8d00ο넚5l\Ϲq,L2ꊪ^5V:15w-oLHկ&vf2_}-f80{0aNY Hg=˟tBr;n3ΥK+q?cx]@4if;5m;Ώz9O#zS--mC<%b0qps~Q% 8qׯe{NңvpYQ5s//`Rz 0x=4Yx Ɓq3?DϜ9_lp]- =w6yW8\.ܞ:sr̦0!gsp΂qիW۷tKJJL*\x&;f~9x"T{xφ8`@Y߾W^}JϞ/|EQQ 9nMY0-ou|}f>#e&M* /^qDĉa)8 sY `/yNUbMYve.C51cqUH4&Mjܸ[SqV0Ts ҉q+|(Sqx g1`Ɓq"q%0{h9,C 8Uq3;0{h9,80Nd1Wi)8 szbXs`80!gsp΂qHa\p&b098aeWƹƁqpHq=g,e0Wi)` ÜV6e0C#mY$c`f8\؃1 szbXٓqƁqpHq=g,e0Wi)` ÜVve0C#mY$c`f8\؃1 szbXUIIa*M<aNY Ha05LE 80Wi)8 szbXE"Wj080Ux=4ÜVa{s423 4Ɓq`SqŰ\qzƁq`Bc(5lؐƁq`B389UqpB!^qHa\ B8$0 B808!B0`!Bs`80B!`f8!B0 38!Bg8 ƁqB!Te0Ɓqp B!aqpB!dOye0B!e0B!C 80B!Pp1Ɓqp BAUO8!qB0B!P(Bŕ!B6?B0B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B(UF |s1PB!B60f~c6A!˸kow4ƷFwBUs B>L',Wlq-44 !,^98!BpׁB&| Vmb6A0@aM1 ``"v+nl|"5|uƱA!) ̣ŕ.?MVz*)Z x0+&{p㲕Y=[YoB{s(^`er\{GְہІY::Y (ǰ(1 %|k|$ .)< {uІ\Ʃ0}zū'n8n׭$8!21h "۳PUa X1Ó 8*8ޫYc5k> HjM!8[^5+@+E"X?C""4|8&Sͳ^= %uV C\-oܲ3u"x$ k!!jVӭ[b->G8^!qeBAbI o~^^*,? "7|_lϣBi+jC!ƨ8B!a"*E8@!W/א{ endstream endobj 825 0 obj << /Type /XObject /Subtype /Image /Width 1100 /Height 453 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 24743 /Filter /FlateDecode >> stream x\S'aY ""Ku \"˰8p㨣jmmmޮ~ÖB9`g$/v|ي!i/xXlř0 s7p-GK00%h PCQ{M\ ΃v-jhkGK^vK}䣼E0fz!Bk:͛ VvRar8)( Vz' Y,G[]ɧl=بNISRq$V@3GcF%bH{D(8J.f"Ril.pFcRUi'L$i00N?v{@J#T:epR@q%&$ Ⲵ&z V/f88Kr4$UBD\Q?&Vp<+ K.%r@, Sgs Xmt,1) 0Q0ZHm*BP!u\gĨ KZRga GĪm+Zv, AK^?39~!ԨUyKsd ,lˢt k1E;aq}.Ҳ8UMOW[LV"@jS9|R ipM [YRzDX1Uxr˧L1Ӝb/Jf @!`x&(&_Xgm+5K٨hY{{jdHq*3̀ F|K( KJ3angy6Px Y)PX["$ל551`H@Z jfK4(BZc]~*S(J>mRk3@my9upRkΈcHh ZRRӎ%CraJoZ`` &cȑߎ%Ch Z1Xٓ;ùL5G%޹uaU-.nh7Llѭ @K0^KFK%@O-!dI5%~c! -%ygl)\5ֆC5AZzWB}ߑ%ՙhEX>wCZ͝N7#.}޷%fX2Wv%y LEtAMh0y @TЀ 16؏DE RdQ(OV(>|43;{Y`^U8XMoOAoڷ*jE g\ :33h5WO;޴=Lot>ΟYҴFBzOY[P," /, Ox! xzX**/`]WZ}䵉, Z._-AKdْԣ}-?KaM@K*ᰈM `EZK@跧W4%w<~޷1_P<+(Wt50/&]'4݂b}E{?W6PmEK 4%cѓg} LN -1YؒIk|U cdX-;*W(1 Y^ч% Bo0X>?+6`YIT x D}nޢˑZNoo ذXC~idXzU 䇹Jm+%J9e0 GcS,EKY<>Kv}MՑfcb%u/+.QS;r3^#V7lVɝo9qQc$}uz3b.Y\ L:և\Q{2d)| # jMǯCKY>Kl8{NX5$e=%\u/ڢv,b4^V1*s֞"W00,j$KFvXRV%peuq׳y0B 2+KNX7f %M%ҲWNk?vZRq׽گHY l6403|.hYoWeҒFxˋqDĹWK/Gp8rY:R5><}98`:nqR k{ɑ04Ƅ`%Rd[-ymWtet呖CKz[K4ssscv-cJLڕ)4΅cvB%h-i% rsWY.M8 -ot7-%xZ%z-AKdȖ%h Z2-1w?\Dh w\]mӧ-AKYzWqc_.(OygW%h Xb,K8-AK-AKF%-AK-y,,1)xM(;-% zn +3-n37E,1zǴ:{MD4.8^,ZYl#ϒw{Nۛ959`<)2V?Mx# K6A-X%B+S,]~,L@76llwBAkIXIZw ZYbUHZ #SLeux8wH՜᮰Yh Z"|(^lŭ\^yO#. / - D&=#K:%,/dԒľ&\%h Z"K-AK-AKkC9XBTUU]RE+Q#'|G^KyMzoy[3f浟|A%y⵿wNk>'%Kv^-yS7Koēb9A3mv~B=KrcI";txk o'Z)A,%!O10.tZs9[Ë aKA|Ul9%(v摱㡠tVTޖNKJ_ۉaI m:tQP~ܯ3/CApWQ7 Q!1K!{<nK8l ƨ%S%{joɧTzY©,%pAK6$Kާo g-2[mD-ɫE-%[­C-iOw-ɯ%5-KΥ[)ے[{%b ,QK%פl ξSӿ%^\?:Kⶃ=>ݓ܆`ɣtXAbE{7'=-l?,50c~[Jp8s %T^P^CNwgw'S-"yO yw2JYZ%EdN u0f¬B;G2]X6`ԓ#r믔rwpyvrwqnWPJܽb)BٓBNp^!X2: 0bm|#ȫc^ >hbMkcx0dsr%46J{}d6py¤~IDΗ$[LZrM~- jvVIh`^ޖ9[Bq*qEK>adW MqM^q pj\8M&,7 ٳ_mKwK^+{ܫEDU;5j'Wm&:O`NK=npAl߭^^]ؒ"?p嚠ؙGƁD~d(gvZ_X{۞~]d41FgގN= #WAq'~/A+ާzZ VFz&ՙXIiIxb5K%Ƽ?ulcA\*ff ydص lyG%q՗ıDv6wM^ uOE0e0~N, w%hɠ%h Z%h Z%h Z@|%h Z%/%rԃCz)G5-AK,Q߹6\[)hTGCh>}*/ܒSfh Z%bX2L>P,w&D kLD6,-AKdے1.cgܠUؔygu /AKDKR) 3ʙIBd6K-(fv)E"ᨣK`mvܱ٧{XhlX Z_H>xLUdL Ps!_9i)+-AK,8-AK-AK+ELnB&В&Bk9m6DJh [2vcw/U"yq'jp%CdyhZ|GLmDfHP|fuNq̍;'a-AKВ!Zv;Z2,d}HhNJ%cb} KhfnҲb4hBn-AK-1JZiimQy~IݴW&g%h ZSCӷK*lpPw31(zBK-+=*Mׄ-c _%h Z%hs+-AKiXho^+ gn+,NW (.rzXbƯ,%6";]P3EgrUP+5>Ash Ziɸq嚠^Dj>nʫzd? q,9o{u:wGPwٙWV8k|yBw-GS ZN w+y{Yrqydx((6Cq[N%%/Ű߶((^?(? }FA\k V=ULn*h Z"|Ml)[)nɧUndoEH|Z)%[YؒIk|U c;^-%hȴS9KʖpGwOMpo gXpv/maE#h*̅Aakɰtw Y?Ĺ0Wq56vS:8tv]-AKF%&)[©nI.ZeoI~xp3ZIwL[rdr7#b3딏kP}<ؔ沎ړ'$yݨU歐9=3-AKd?nRN)|Sr9wqsvr9[X`r&vy\nw+rjr*8;9-7ȼ=-bnWϫxR[( fiy[_zu0f¬B;;2]X6`;]#+'ǷtVr|wnfeO 9y%jlcἎ[+iZo WHge,aDeVF3x.R\<KiI Yv^iTVˊVa-y`Kj_~I_>KIpj\/odG#/n %dzNI1@l%$.KA:PS1@ZHKVH|e=ΗGJgwKʣ<9Dܫ#8vv9P CL5><}98`:nqR k{ɑe5s Ѡ5-AKF%{-lI^y8;6K:Ζl"urehZ& *$Z{@KВaT;H^^%FQFY_aI ";t쪠x#DP+5A>kh Ze sh ZB?EK-AK-AK-y,Z%h Z%h Z1ʹGy GmNhI֬7y@0a2(fhZ v1A>ĵ6o*3Uذ 4 Z+́ j0a-p26zH1 $%૩`/2X3r>鍧d{M%K B~?bkz4h6W*=}v ^7X`:v^BBVF8>I9h7R3Sp)˖L0sqSy/{,5_z"]ANiZZ2̖4.8^,TC26|Rjd|S-: qC+G5k. 'Te)b"3\K˦pVjCUSxr [2 >e+t ajCi?ђ>8h-Ӓc yMxZs% K-AK^K1ՄL`Z h+bC(-AKA|.dzŀ$Y|*D,Kv_~|Ə7k*v>?AOv űOxҳU^տSeT^wS.7vQO?}u{ɺtaݭow eɉe)9sîzOӯ_}D+"{ _}kr#i!qK~f`q.m:oIq-⥐ q2aN 3<\r`-Ғ[BYsH=.||/ߒV_;5jgy+S:vd%uwyVh00=v/Qu\Ȏه)A˒%%9Y=Ǒ"}|K|#+˹m^}#b!&S|KV߷Y5z .ڟrR򳖢%,y`вdohpeJSQ?wZ^)[U}ݬ֔%pXյtR %"5` =~^:7 -AKdX6C0/|YMZ%h`-Q"-yֺ2[ti[9Fzm-/uGKВeO&;qGzUU`saH*GRR%R9}}%qpZo%FKВn ^% OTD1Ьz-\ Fu=@&ZY{Uf+9lmm %~'I&ޛF0.~d ~ FKF%LXM͍X? ]whaUZ<7K ђpU3D٫@ӌ(oop}S-|wVP7-%ᒰĪAܼ-(~*(LPvyMU<_}SP|xVTޥ{pFPQ(ׄђݿ%`;~l'Z#/hiZԢ%uKK˕K, qqX ڝ-uWy#1uTwҀnUD,IFK;L%=?h{~_];_?/3ow_x >KM]D,FKI ,y{EKdL+mIݟ8Ye~ 9K~نȼ%Yh_ŴϽ~ -}K&^r %.3i[rZ2,-%p%o \%6}CKF%CD3>xAW W o yE ࠠxf-Mϡ'T먥oZ"]r 'hLȼ%)D-ٷ}O~oOo?/盢_Q{'Go+m?RU}NN1DF,)i%*sZ"Ġ%h ZHS-AK XO-AK$`Az-AKDTo-AK X№%h Z"KOђd(+"wZ/%4,skښc:/:ӻHKz#wZ6PXK֒yn" +ӚaOš%#V޶^X"5nphH-aKnKğgh0['KВcDv-i -9Ȭ%x-9UDvϗp~ -1=%~M߸š%#Œ D-hȱDِ,QDKh 8Z2B,ĝEYbZ,0a[5$@D2r{b7uZ?( xQt5V>sLnj֣V.5G/k 5Swx^[~/r},)%eΆ%%[,\h,?'OeǒA[Rh3}0AYZe3N23-AK^:KLmFo=lXڰ67/GK䥳Ih<v9b|iq&m -y,98XK9 mp0!M F ʅw%hKh 1hK-AK-`7&h0D&,aoE{QX%iɩpCKF%-Z" -aCKdp{CKF%Yh Zr7:L@KdВ%#_Ř3h0/yZ2,+h ZnphH$-k~--a%2yZɡ%#gh,Z?oq^|ǿhj;.:z=j}qV|s]W|mhWՏl%5Su^~nw_l}D&-?'OeΒ2-AK &-AKD1AK-Do%h ZH7-AK$-AKDq%ՄL`Z h+bC(%z.c5UD,a<% Y^1%5vd-8wђnntœ]˄:03}&8/76굌Z/ -AKd8KےߺǮX zN[bR{>x)$BܣLsYoyuՔZ8EZmJwH'HK>.wCK˧lAm=K P .x\٘{l)>wQZT%hlYv KHw9q[m"-niSvgA>cGֱYR[!! LKޓ+LW _\b st,%Bӕ?`Thf~fkWu- OfLI G%hLYK,xHshu>%u _L\` 6hPT)%4rO k| NΓ揕Вy=o=~||-)K~iܩ;- /-*ľnLk8JEoZH:zguZ%ؚg (uJǢ%BxNhv $ /('-)K6MK@uګ&`s-U4=x)Y+Q\T`8`#+ >!m%` ,rHվ^-]Żc$ -AK$mI]Kz' 7wCq^QqZtY-mZ@KВcIؐ-mjh ZY7Z%hz-9K^y|oG~WΓ?Ҋp#nP|/oW,]ֻέ cD^LU<6;΃7΋>;O+xpޠzzW.h>_NFSԢpXRȚ%9BH$ -1KfcHK@K$p~Z2̖aTK%{h,YȒ%p1LmnFg2!FmOe@KmSx0F~ܯ,qiZLw(}VOrl%>)QBK}$pZJ`s`C1/ۭzleqPj>-512-ɥczh3=—G#_}0d}ȴ$%U%ZWzNU\}N# ;A5wϏBKoӿ7?xwߴfsA+`{L Qz&ٝ5Ԋ^#gtqwWU 6'O Uqo!f{D%F.7 ~bVggۋq{Wgtů6|^zokVsb4rMLjQK ;5aXB~N ˪%ex Z%ML?GK-7&h Z%c-1ܲ-8yFP|RP,yWPzUP{@T;Ȼ@#O(QKmCw.,_$ό|&l,Sl4AWߍ;SC[,ɛ\!uf8`#Nf;3ǃ+v 5l"ȚF1_fR+Ptmb)G ǒUg^'Fkl YJ[~{<h Z":i 焥9X"w36)~{Ii^زޒ^ar+^"!k<9kI8yZMb23Q潫[JԙUGTY$kF[7lR;w 8zX%qӓ\~aʒ-j+u%- KOKb*qFu79k# xs$@CgZ>iI |pjǁI[q66Gͨ&g9C3'ɟfȟ`mۉmcyU U۩oVW9y-b7E4G, h Z":ٰĪN|YN''\׼i4jAFTRj7TaO=Ғs3Pl9]}9>CȻI.@`n1[70[uȃ28gs"͠[glKƟV$3428\"4 ۝%- K`ZyZYq֍Oݹ* 2 <&O!@`L΂jKcʷs e2P: AT^8RX› `>̨j0Q8h9X^̬`K ZM%[&g s}\g ئ%}ķhlXb\f ~}[*fyMh ZGCKF%CYD] d@K^fK"ZY"*DL@K-@o~EK-@o%h ZH7-AK &-AKDQȈ%sOMviTۺMO1w)G%hȱ%2`&›MoK-AKF%h Xr >C)9)mdY#%oY&82V$y$9Bه^ [r̃Mp{t%<9`> `)@ZTQVl_5w ZKLIJ$3&"%2cKcVbUBCsK`1Jؒn%[`k[pUZ=-(Nn̍&k闂U'dK3 wyYw(%hȱa1jX˂y/.רfcNW40 Q_Y݇}{-9֒ۮ~]^HXVIV+̙ -'x#޹O3ɯ-(X}Z+_Вwf讥g,j;4*ޝ=Ѧ5&d7G%Aek0m%#Ȓ1,q/^ְan8e^6rl~TQ3dO4@=\^ބFp[_v fPh8 k9H_% qˌDU԰/%uyq %#B KmqP<rِr0P`T [ZM!Ζ}%ژt^#-aqԚޥ.LڴrvxE 82ǏcBaljmyQ..:5_-7ހSS;zdp8/͆+SG-yn8sdvgcv x5Y@*,ܘ8bb%Ӫ&l3;,CHynL)~ڍغkNR):_ j0:Cdmdz჻yy%o;\-StwQ%by)mI&.)>={$fES6Z%ޖ;  ᚰcx)N_iA?^r*f;-Q* _ mnVC$-]KxqAږRlLk,Q5U2o9p[ xMXXUԍ<ro J'nHL5iČn}?$SIJǚrBgaǦvn,1e%v;#ܧo!vN7e)e򦇇SPwutUJ'ghܧ:ct26%jnS NN b-Q͒hX@j u m &Yc݃D9m\bTKGl>s+&NQYmKqi8䖖+TOȘe u#BETWt%؉o}]*'\D,[e1=~(5arx\Kt<Ҵ5W"d3թDԚv-QKu$p+%cc-+dWc3_1nf̠W҈dޫD,yU~b>ѳ& > NE yuEAi >ڎY*&R"hH33|˦>mKXFٱ7BՅ]M8'IdԨ)|٧i+T\pKw1y7!R#ٶV젬}(=LR;Ve侏ZަVD`5%ly]n?DVν*zԤӉb~ Y>'KD8) W)!0JD,RYvoD6ޑmİs?1yq(}D1a"Z%o-Q-9SQH 5@KDE=P0J\LP   iw$f10RIP@b)Q^FJZ@Pbc=9妟%hzSЧ%G(Ss;Kuu3-5sI6҉&[O1crtY#MP3{U71carmey}|`qdd9i'%28* 峖cGU24CKd ;Һ)-Wug q5=/Ss0:DMy9;vNxdj)ۣ%h 1N}5=z:D0ׄ5DN!,Y䑖>cZq&Cy9{\1RTrԷ\y=P EY"oeŝ%hIx$kұh?H7F9%ށ[=;6Io&dd ]>Nh ZtE:~' qˊƘ;, Z~$EC! 2?Do$,tU]cvPdkd[vvڲeo˿Ζ>-=>wz2kmٻbulYmտMK7Ւ1-b¾ԒvԿ":n-p&Z'slh lޓl-X-(k@*%Z?kZ%Pn-2ph ݵDK,%Ze^-(DK 4-2h yiIM-Ym[dq% `\n͌΁woYۺK̸Cw܂q묮3nk5hsymDK -7+m] x6xrK;X 5RVpgE6V_XC5m.w\Jͼ91Y4ݷ{d4r˽) JO+"%1rwQ72k]! .窋7cV9o{3^ΓGN&-S\3킈,~2UuIZK..ŞnВjnJ40'7W.8Jqf^T4(HnZZZ<ݹhnSnIQ7YtJX%7_%7??yv/]%;[Q-YT,=9hy.YzQˏIVZ,ںS:_dMYk[~^[^i2yW{Έ/qмߜ֌ohrNK靺,Ҩ ?,zYz=#fÛ~4C?8"y8>ݒד?¼yv8gp>OS 8vuK,^9~׻YΩ&O W7(ہ 'ӗ#ӳTsFmɿ_3/S^yU4(9B wqˈ[q|GG`7~S]#1(biIy,pg_gm\颕Sf̈V*i\o[ےJZ>?!:/6ϊjNk]ٲX8I{?q΀V^DrSqgr!ʓŷoqdfV]ޘj.,%yYMI'ۧ.+G͌),{e˓''.h1^Y;>oPgk]%eGw%kC޾CssIJ=㉛g9z' VQҒ/T!OE<9'3NORyW˘cYI?+#.IF?49-=h/GZ"u@_:+&G5nI|umz(U~,zqmKm5-aٟ}~Jr[ё"ֶ$&?e+wq :ѩq#$>ΌpWeG']6o F%_^3 }D3Ò/)nIojgO-^}Ck$ (jI^*=ujɲ]|(ѱk[J:(:H:?3>[^򗋏",R-?{gNpҷ]ӒяRUk-If10[IK2][qKbɥqgm1>NKr>.㫞;϶2/Nce5|y I AԋJ3rqz]:Ovcl,ɊE7ʜx́0GOUSsyEzU(Xy^5NuYӒ'!%-:$bmR]v.iɩDOvKnWY}d#NOt,|{l얺,t}ՐVU\ϓf󈎯gml_[^*vbYy6~rEn£?[ۻLO?c]L}~Lĩ_.}.*>pb{Rs3GR[['x9I,I냚Y̯U{Dyq2XלlDJYL-)NZզݓKZL|Xu͈gd蚺ic5rMS_qYSO_acg 2Fd'Xy_G2#nt^,6U۬h[qVUΨF{S-d'OJ(I^l9__ح̞sd4dXC[qEf4汾U,> endobj 799 0 obj << /D [797 0 R /XYZ 88.291 795.961 null] >> endobj 795 0 obj << /D [797 0 R /XYZ 89.291 764.475 null] >> endobj 800 0 obj << /D [797 0 R /XYZ 89.291 383.894 null] >> endobj 801 0 obj << /D [797 0 R /XYZ 104.235 384.712 null] >> endobj 802 0 obj << /D [797 0 R /XYZ 104.235 375.248 null] >> endobj 803 0 obj << /D [797 0 R /XYZ 104.235 365.783 null] >> endobj 804 0 obj << /D [797 0 R /XYZ 104.235 356.319 null] >> endobj 806 0 obj << /D [797 0 R /XYZ 104.235 346.854 null] >> endobj 807 0 obj << /D [797 0 R /XYZ 104.235 337.39 null] >> endobj 808 0 obj << /D [797 0 R /XYZ 104.235 327.925 null] >> endobj 809 0 obj << /D [797 0 R /XYZ 104.235 318.461 null] >> endobj 810 0 obj << /D [797 0 R /XYZ 104.235 308.996 null] >> endobj 811 0 obj << /D [797 0 R /XYZ 104.235 299.532 null] >> endobj 812 0 obj << /D [797 0 R /XYZ 104.235 290.067 null] >> endobj 813 0 obj << /D [797 0 R /XYZ 104.235 280.603 null] >> endobj 814 0 obj << /D [797 0 R /XYZ 104.235 271.138 null] >> endobj 815 0 obj << /D [797 0 R /XYZ 104.235 261.674 null] >> endobj 816 0 obj << /D [797 0 R /XYZ 104.235 252.209 null] >> endobj 817 0 obj << /D [797 0 R /XYZ 104.235 242.745 null] >> endobj 818 0 obj << /D [797 0 R /XYZ 104.235 233.28 null] >> endobj 819 0 obj << /D [797 0 R /XYZ 104.235 223.816 null] >> endobj 820 0 obj << /D [797 0 R /XYZ 104.235 214.351 null] >> endobj 821 0 obj << /D [797 0 R /XYZ 104.235 204.887 null] >> endobj 822 0 obj << /D [797 0 R /XYZ 104.235 195.422 null] >> endobj 823 0 obj << /D [797 0 R /XYZ 104.235 185.958 null] >> endobj 824 0 obj << /D [797 0 R /XYZ 104.235 176.493 null] >> endobj 796 0 obj << /Font << /F40 549 0 R /F49 593 0 R /F47 592 0 R /F57 761 0 R /F60 805 0 R >> /XObject << /Im5 752 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 830 0 obj << /Length 1957 /Filter /FlateDecode >> stream xڥnF!@(U];fұ ZK'XH10y^Z21Woߊ<&DeM>w-BˑԿWw5O VXi& & c2Yɧ;XJS/_.OPee]liyTkW׏n6f=Tmrhi{Qcݎ7pv5%Mu%hˤ@ƒ? g@2;Wpnh aҿچVIf 4Y u^0<)*)4:` *2z} +웃}MbdB _jI@VLPQ)HodZ :̪AU5m5pl@e([,sY$^7IJ7%ԅ,팄2#(K9+x&^xb0Eee* 3Vo(n˘i&se2x&ޖC{)+,GҘP>Q[Ph`8 AA~ ^TwCGΓJY:2l,mܞ zy]HFcڑ# n"ic1Q%.k*;ژǶn;:+˦i$EpGf3T* ;JdP@z32h}2!B|$ 3+>=BoW-=(-*`g:UcÉcÉTڦ?GîG}@Z=W a!/bH\f$-o5o xi~(dڶu?4VB^UgXMKKzh|Bͯe0C6 i,8 0bFhB`؏Wnxq40G|wsgP%t;=t VWzME7^w!`tsH&P.o> hU]uhMQӏnETwfӅ$ 3`O@jϏS=`̡o`i&~Brl<)B)hGbn$튋V[<R}y'=A. T|}7Cc0o8vQsJng. "):( `VK'waוEtsu$yQp~P5Q֙E"cj=q5ŗ124DPaGVD>Uإ+=:tabׄ0GKXq,Ǥ/f><ѷ=o9x?{\Y &gN(6hס83[gUVn۹=-B]10+qjMW؜7"=Y|?rN@V]|ƕ1% @w.i%".}3˛̘P'XH0=gRhRh/|@pz ܨvpF{_zu=v9<|'&iV\3w%/(Ys3v!YNA͛c?Hp I_=esfՔdmW CƒB endstream endobj 829 0 obj << /Type /Page /Contents 830 0 R /Resources 828 0 R /MediaBox [0 0 595.276 841.89] /Parent 725 0 R /Annots [ 826 0 R ] >> endobj 827 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 378 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 26673 /Filter/FlateDecode /DecodeParms<> >> stream xyXSg8 %d 5,`ݦ7W;cZmgh};[jK;֩KN.ck;NTjj" YXSvHFr~<{zB !OFA#< w1GȼeḄZM!5k֠e﭂$I^C?zc-֭;s G7BDTT~qZbccx͛7Bonݺu<))Ž$7mڴqF۰aBq20%%eӾ#ϹtRbbo*0Nw+W*LkUM{{;UKXX?QQQh ￟Z֮]]Ž$7l|P-3;;;.\xȑiߗ'ԠUA騯wzW-^Bh:;;cccѲղb K8F]`-r 5uzл yW7l؀=T Fݝ /LѣGe2-]U 6mJW5Bs|л Y~}cclJk׮ݵk{]-NW֯__ZB?|崠R\\\ZZnCq+$ɍ7vvvMHH(Zo;Z233}is<% > HHHضm {c-wzQ!D~h473DEEEDDlڴfҫ !IrŊZZZZ.r^B^WIN;שּׂq LWi4h|4B> !O`#,..\4o !Q-b2o !Q-“x{.L7yS1j7ySZ(OFt#t|S N{BR\!98B8(sppPL7BW;9'tjNp*̵A#2GeQ>mF!jܓn¹sV^f-[z{{Q|nŚL[gj%\BBH !$t綾^ڳgϏ~#??Ǐoذ᫯̆ߘp8+>|x2#&4ɕz}ll` &V$aTTXJJ/~;wMj􄅅###cdAH !!$/j"&`0+WˉI4‰/fscc={jljq\_9'䃐BBH YBN縚#`LLիWQdɾk400;}$7fI:nǎ=$7O00C[[[;'n?D"X,2l֭?O6B`m޼Y&YΧ~z͚5pFdƍaaaeˎ92p_>$$nZ$72=C=4u b OFA#Ӡi4h|4B> !OFA#Ӡi4h|j%Wz\Q _t /X-ӵ#|j`̿\LrJ\RR~OOʷ`{0ߘ?IO0HLL(^F>\333:m %%%-ʷ`{0|0>>d2J  J+**n%t:.fg!I---]]]㩩)))A \>00@dTTTrr JRRxfrK, xwNDBh E{{f~~~ٰSFBEc(//Q*&)888''g``h4rܼZff&.-++k2!b``@"&&&:"33 kAVWW]=飓/ l6sPWf``@&RGvR988H@ D*++KRLW%S&F`0D"L&ࢊu:?A)))JU9ST*J%IPЬՐŋYRB\.7%%P< L&S 9zz::Lh-@dGGGjuu< PqqKK ԈE$)ڢ\eGnܸA sssrssy<288P(rss|}'Hb+WBBBF,..&B&*-** T~mXXزeЏhsZi "66vQWW" fskkFL&D",kppuP A= /..6˗/w5]uuul6f8=cccغ:B~544b 6dVѸzQJXuzfEFF*g*Q{CWG]800 ϪBB*3PT*82 AԸ:L===ʕ+iMTVt"Wdzop8bWZb222dV,9fHNNq;6MAmmm M$owd2333[d "??ZAyyyO(SaVuZZWWdcXfsPPnQ{f2 !? 7rrr8DdfJCݝΦ&}TYYYl6; `_|Z>*&UUUUyyo-%%$$YBdgg;͌7DP2 l6 &tttD"0xh4ӂ:N&t:J+̓- hwST,X%++ B׻.+KG44HҪ*iBh"##Zh:cy:xh8=&)((i8dZ*S+))WTnqkd*ij. N3SnINS0z Fzoyó0((`0^gIKK[d /d Q]Fݝc˗_zUTR_q:BJ{3 $66=gdIV1aihpܬ,.W__w:MblF󋉉iiiAz7;NW\nAAN3x$N6diiN+,s⑸ͦ>&;$F+DZvA233iW<{i4!!j655fcX~~~F!JM&dJ;DAl6;77+1HRRRCCؘnE|>?''nO KCofp0A tr?<gH$gzF2::JCc2&Y2AL^||<7"J'7H4rCJRPBp&IV_ahV^x<{F(ǿk͖yyyRfD"CDEEUUUv@buw$I!׮]s`0d2Y]]]pppzz:A=&A"奦IV1ai .]Nt: |\.qFhhŋ䏈hkkATM$u ^zj‡|~MMu$NAjj`@,..&55U"\|`B|]uuu111gEEEՑ$$JMMmjjBD kn&d| ώap8&ccc1Zv2I6={vp't_}-'(qn$̵BBHфb x&6HTmѨR|v.2UkG2-<]\..)v7MIh.,~4>CytQ BP8!S& }JZ\!^.i4h|4B>ͻ!Ix'8ICHʧ FxxWrr_+xw#|7*++kkkkjjΟ?)x/ >ASt]wxglޱcGdd$?r>eeeBܹ0xג|~qqD"rcyRV򲲲ӧO8>{9KKKn\t meee퍍_}8qBT?3W_~eeeJ{oN]ٳJjrAA⦦KNdŋO ڵk~L ij;v@ Ǐ7|W_ =udSO/G'%%EDDKx}^Vzb7q8u!͵k'!ϳ,h`SRRp=##HIDj( Z-aHHN0Ft: ]pG?3B@Rp<11QV/w't>qX,gׯ_8^]]=a<331^WWw!m?޽{5Fٻw/رL&CW]~pZQ> !OFA#ӠilўKL 6t%\Ӡi4h|4B> !OFA#Ӡi4h|4B> !OFA#Ӡi4h|4B> !OFA#P#,//w0-iֻjxxҥKUUUx{k̰9MB&eff\/dMְf{`&Q^^>a ###111xr^ Ցh`>g2Jr CR0sg!I---]]]㩩)))A \>00@dTTTrr JRRxfrK, xwNDBh E{{f~~~\.٩jsrrFBU1(J300P[[k4\n^^^HHZ-335100 HSSSRQQյ` FGG׮]NѵA/>/looW(f憆:42ltt:n+A Aff&jTUUUYYY*d2*n755i4!d2U\\ HIIQ*~~~)))('jRSUU8Khh}W0x*bŋ-"IR.EEEߏ^qFgggDD-CCC\.ŻxxwBVsrrxb x<j!%%%::fq宦.;;fl<ull [WWP(ЯVXfݔLj4W^=::R rNlHBP%KSN+**R``RijƏokkCW7tuueggs8XVcXCCCn2bT+3$''8ͦ 6BQXX с7`2-Y`O <' ѩ0Q:-k2AX,f9((^GѨuww3LFCЄO999dD"jtd2fj!NIIAfggSEd,6&])///j5QAf9;::D"zƃfϏ:KhxI0<{Fh4iAN't:j%W}; *J>h+++8m@@ ZZZ[-z*:Jd~lNK3LLAAT*B+&22 E3aW:ZGx$Nd rZ,)TkJJJU*U}}9.ʉLi4kjj,Mf9ȳ0((`0^gIKK[d /d Q]Fݝc˗_zUTD"-,,ZA<D+e2YFF$4|V4`\nVV뫯;&gXl6[ĴS+\.@әf<fFt2XUɴTcccuV5B-Sseff.YƏiK V m63 Tj2L&T*OI ݙL&`ٹ ;vhmm-ڗ\.999 nO KCofp0A NLtpxDxoah$8=1& i%>)RyX,RtA޸qcll$I(˝FrZ,t,immq3~\.pxg"h||믿l('JkjjlH$rRUUUe vW__O$P\\|5_a C&ck0$I^^^jj\.dpBD!7n.^M6@@@ J$IRYpիWV-|ԌQG njiRSS%˗ P(uX\^WWtPΚ??d399d2]~}llxǏOHHp>` =FN&8Y³g:儴CVk%CBH =b x&l6RTNb41'[78I1O3צK|>˕YWW`0bcc+'[b#O׳;iIBtQ BP8PP(xs:̃K|4B> !OFH"""x9u1mfyǎ|>ȑ#nܹ1xג|~qqD"rcyR~ӧO8>{9KKK=6²گ O8QYYYQQT*ǟy/RR{۷oYRiZMMMhsSSҥK'd2ŋ_ `~l#|;&q7|WBaDDs=_qX,gׯ_8^]]=a<331^WW0y>{h4f޽8cǎ_2 ^u-Kcc#^eeejZVnٲKKK'oذ1^VV0yhiiݻ_UTT]LO~Z-^xy6mjooOKK{P|۶m2 _f۶m?8T*j|dd1i&lق{7<l믿o8ܵk׮]Ӏfh͛7`0}ٗ_~_qȑ#Gt:ǸN~|$9r?==={}<;x&''/]0%%ӻno̻{ݻwH`.`#ɚGhAfGBBH FcvvFZZ*1#<BBZl6L1 !!$J$7BB4<yiɒe20F`.**Z]Yye¯:h"hQW<#h(.R[{ã{F`Vf[[vܬǛ.~P/Ȗ&R2KRJ]'22Y.OmSSdmg*:T99999+V N^E Χ@BH !!$_})773.Ox\0ݸQy(?4BsJsA!9j`_^L&LVrm4Bsn/qj}A#0~STTROm汫W/҂vYBBH =h4QQ =FN&8 !$BBOK|4B> !OFA#Ӡi4h|4B> !OFA#Ӡi4h|4B> !OFA#Ӡi4h|j%Wz\Q _t /{o-6!1Id̕+W咒̿Il$'l^add$&&ftt/x__\.љ 8#""bqpp0GGGgddVF]Q*r<###**h`>g2Jr CR^oܸqmx@@FrN"I],T[;C<IliiOMMMII!`0$dP**nǣ 5]dI@@]GGnǻt:]uuH$ FP(m6kll qZ6''h4* \Enn.CyyyNNR4L999F兄233qiYYY Adll,00055511i-h]]] , bttzڵDya{{B0\.777744աdԑ8=v]T!233QRT&UTvI0 H$h bNODJJRt,Vł`P(F1$$$??2_$T*ήJHH'''wuu Rl#T(CCC---(XSS#-ZD\.okkss]bqFgggDD-CCC\.ŻxxwBVsrrx>T*E_pa]]݊+ -y[[^RRRggfg,Օpb1 Z*22Ϗbedd SX,s̐hwl6;  Eaa.HDGG<++#dfffʿdLO <' ѩ0Q:-k2AX,f9((^GѨuww3LFC999dD"jtd2fj!NIIAfggSEd,6&])///j5QAf!E,>>z˯]ёOriƴZ-?:::666afgF#zCNd:j?h*yppbqcJRNxIh4VVVqڀ deeZzWUuЕ=thٜf2&9TZUU: ~WMdddCCA]]]-BglPO<d29-ݔLKpp*`%%%*9n`` :dxL&uЉfooR#Aӯ^C=nooX,ΝF233'9r l# 2 יjjjҖ,YbǿK7wjk׮QwdW^U*"h V+]@"Ƣ_L1*&, M8.rNY,h4~~~111---===Tf -((tf!`F:-qU2-z)vbzfŋ_r%**AL&sѢE555+V@y[__>0EkLHH@ZMMM(hX,hDg-nHRd2R)~;DAl6;77SPWRRRCCؘnE|>?''"W1ai, Z`ۉNy</HOz- dtt6 >>#d25557=Md 'Q*4oE*N87n$i4rti3((uww⡡IIIA=qdJ5`H$m6[jj* IҚ6-EEEUUUv@5@ $I;$ ڵk’ L& NOO'1>>]슍5 $///55U.O K[p!rr7BCC/^&DDD[[@ B Hh$,\իV>Mkjjƨ#qzRSS jfqqq754 C(CJll\. q?c7%11Q.'%%B7Znkks"))>YCzVLpͳgϞ# u:W_}u i+JzPLSSl6Rۀ`2|e~ɤ~Ә˙kp%e>)_lI}zv0-`zQ> !L^xa.6[nÇg{_|L;pz2;vlժU[n  !I틈x"8'''߿OJJxPj hnjjrm4 #<<`DEEo {~X,+B阩srq|Y'||rIyT еZ>}AZ~{pS7008wQPP@/^8u-~׿jjjhJ']_pᮻѢ677?8^}UW['O?~B_l~̧OsX8uԎ={;v'@'|}5D"dgΜ}fy]O݁v]ܬ_|l /L۷x_|f=[nɓIIIl6%l=u}sΡm?n -V=w-?CBqpݺu1ѣGB!CUUoJd8vdd$((LJݑ$Y^^Od~~NLdaa!j-ԹBqst0V(* Z$I, P$221/ C<ܹl6/H T*F>o[oN:c$i2v}vɄx&Iŋ/fIIIo&N" ]y΃baii-=zt*jhhGٻwE3x`h$ɸ>l6՘+ !lҥL0j-ԹBqsXQ6 QQQ8b |4jN;שּׂDz fرc͙]ԸVr MoNr7o~7jǎ۸q#IFq׮]]۶mÅz0MOOgً/@A\:1O1 !o߾{>3_Ϲp¯\K=Sq i3.]j6xۯ(F{ݻwϑyIïgɘFgGвu1*hX- ˑM&vbp>%9vZn1G6aIkOu|ܟrq4Z s也pqhzd#1#ft#,*D% [Lj`}&X ALؙcdO{kАGFȜiO8(OqbQ\Hy~S%^2}S)g`_^v% \sݣR^;Fd2ɿbC 2I)~Lfa_vYhn~ !Aqh`> >@XP@@.Ag{ "AhҏN*p!72j_ >/wv?2]M<܋/ww/- &{]JN!{T Ws?GFEM-Fa/L}g"xm{F@XNʡ1!^Dj>tpQ2+aN;MH;9f{ ^`%&$&@E,+n)݋5BqLesg{ O oFL栠D'^9yY#n f@w>}qkZNL75B$wwݶysqnoJ&NߎR*OLZޙW SHTZ !OFA#Ӡ /̾ hV[ó= |L|6 ǿ|pرUVmݺX 䌐$}EDDxC$I'''߿OJJxPj hnjjD*g0QQQ%%%(~=P?XW^yV1Sf9?ywedd?' O>d婩x j}R48]Ν;zj6-v뉽ܬ?|'7޸xbmmmMMMEEũSh˗/?׿USSCWVV<8m:w}…FC9??GqꫯnCcǎ=(OZ,T*Hd2ٙ3g&/fv5⥗^ڳgOOOOsssrr <ӟ/Q3cG €X\UUod2΀ t&uw$I$1$YXXZ uPRHpp0-HP(T( IfY(vuuHdddoo/UOOOQQcNB{qСsNٌ/"->twws8՜>o[oN:c$i2v}vɄx&Iŋ/fIIIo&N" '΃baii-=zt*jhhGٻwE(^q59ټjժo$IVBSnڵ+W|gY3Iqqq}Qooo{{?Nv?!!$ 5”tjZFFFuu5ZIJJϰC6iڌ \N]d燖q\Z,ZmKfnaeee .A^勋Sմ̿oKwԠR6hJf̴9w?ؿ/PL mlc#liiiRG6mڴq 6X,j*T]]]TTgڮ7|%H$&Z|¿(t,[[[Ws oBaOO \v:0W^yoA#pi1Cj4PSRRp}ҥ |>c4뇄t:BCCZv2Ǹ+.\;U (nW("W\O< ?y1lNܰa￟8qqq333qĉ$IfddHO> d q?hq7Ht?c=[WM6>|xΝ(hB!uN ~iEEʕ+Ҩ/ j4>f ZU*'&&644lILLħPbquu5ZŎׯO&^[[w'`D3g* w}'pd2;pVRN>m2܌933fkw:Ao۸q:-իÇGx3g 􄇇Z1 t>kmmmhAR8~tܹO#\}}[o'?~\P@ P ??R<~8 _zuɒ%<`kX/ޟIo]RRB{ӮLcPkãG&&&d27+}]?;|ފE, >BZtޮ[Nv8v.N[z Qk);^|Z[-* A^7'?}$H!! }|G/9gs**.\2[n][['Y[n꺺e˖mݺ w=$''kKq,5x?i4֌  .9B}%ccc;;;iޱcFdɒ|V`kkkϞ=]r%s Ep'C0APTfddxyyH(j޽...eeeDHQTqq1_{5X,mۦQED<.b1KF~^LH<}49D7ߠ.z!>>Lf_cǐihh𰯯/|Hŋlb@77˗_~ɓ'cbb\\\$ѥPcbnDF:IլMi. ڴiS__(Ɩ܋/x!lVXXn:J֭[ѮLcĉ3gUUUHC Ep'C0A)0[۰aff&eN{eTp$ӌe#{nkCqh&kJ^^^ooonn5k&]QYYm(7x!!3e%%ЄZf͚wyg5MMM/srrrrrr9)r68d===o:n&5L>kNqzbLTU!c{;[;!8C]R=|% F0oTZI,QGQN9SN73##"*hAhQCp!8Μv $BD5!`@"H]k v $BDXժUǛ,BZZڞ={,*0<<|"K2(,,,,,T*lM4M[^^^oMXk.x88+ /XԩS|ܹErbbs:jwL}O:`矣8p ,,GFF~wG1c;wPL{9sO?m$ɳg4PQQG}!I9&HGuY1dАwnܸAs koog$IjΝ&VģI {{{{oٲ!k˖-j.7«WJ$tҠ%y?n޼irrrT*Qo666V >|;{D"!l8cM&g}~BO?-Jׯ_eT 5k477d]v2AHljjBnXBv===H$~؈`XPV +W666*7|S(ojjR(ҥKY/??ܹL.\h4HLKKi>rHZZ$I eϩBؽ{ʕ+CqqMX"Ifi]KDޞc3߹s'%%.7Ǐӏ,SK,9rMӟ}ْ%KД˖-kkkkkkKJJڹs' gB3jbԩOVT---/2s]]]GhA4 ֛ܹʼn022靝AAAL:$9<<  A>j4GGG㤂tTs{zza%‹/_<]iu1SNy&svv6NW???RIӴRJ I\eǐ{,ӧձn #'Zܾ};,, !$۷oU̺LΟ??w\^OOƖ*aaaH r *ߺu `l1څDӡIk2,,, ñvCL2kʔ)w!{bʔ)mmmHDe$B!*r=<<\.ƨLJJN:\]]u z}ccD"y&g~~竫biiiOO+suu)))}_F;S788f\K/qaԩ(39ug͚fΜԍMU$HM3ur2ȫMؒ HOO߳gϖ-[(BCCQy]eeeUUU_56dx-D܌R8E!=**?GEEY]գ:>(37n`{cx㯾_|>O>J:qsRѣGU*(2Bߙ1xzzb&W^e{ٶm׸(//H*2sS6mNnݺb +`F4jjj;v̙F$޿@\\_|STT'&&\Ø&=;vy_FߟRWWVo޼sϡ*T_z@zIIٳRT*;|0 :rXRRԋϞ=0_$ӉģXӁW^}An? 6 ȑ# &>lIIhRSS԰i4ֿ~'+**.\ȵ7oKNZ⮇Tt0555//!Ν;sY`0rjS(hOyyyllÇiޱcFu &==VV={600rJt咶s\A4 ֛JeFFo,)*..tqqOQcGDD 2lX,U^{5zvm۶a?4g?MӧOff%3gΠ.z􍁦xS^^*>/"9&HD26GAAA}}}Yihhŋʸ/ƳN͘z&XĻC #],geeMx &BK_*@ Y8v~o[ KS8( /iR^qU_霝FVJy Ҫl2R:J~1!Xi"tZKY"E/| Www,jW8: W~$񡻏/Vj Mvi!,Q9;;5/M͞\w;Oۯ-\8mY IR=:)C6R{wi4KbxDo拕Ilg:k7m%n&#~0# *,fkj"$"gVX:,y)P)o !wIlE=ݲlioab* ZVs@Ѐ(@ 'IQ߅?48Hw:7ݻ9uX,J U*?ݻwZgchϲ,NVt<۷hp3ߓ5r9I\Ѡپ_VcE92 B6Lt3sC0 >K LY|؋%>BX3eY$CLz?e9+.ϯ+L\ _/Y7,I1l'J?}阰DXGZ#t }? aI9Bҁ!T*3DAQO%72`%<~c@laypp1\a?lVl/k1A -`F gVZ:fPjpu z2ҁQ?3!KZjZP4K N.}:͖ĆQuڈOY:#z83{㩓fSiS<xTDxy3 0J4e.gC~zJ_D|Zý ѪafLJf:rz4pq"Vyʻ2&Tkc}B'i3U?I:̌(bbIGi!88s5!`@"H]k v $BD5!`@"H]k vcsQCp!8GӴ\F!`@"H]k v $BD5!`@"H]%2 endstream endobj 826 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [274.917 449.979 290.546 461.835] /A << /S /GoTo /D (figure.caption.7) >> >> endobj 831 0 obj << /D [829 0 R /XYZ 88.291 795.961 null] >> endobj 832 0 obj << /D [829 0 R /XYZ 89.291 764.475 null] >> endobj 833 0 obj << /D [829 0 R /XYZ 104.235 521.605 null] >> endobj 834 0 obj << /D [829 0 R /XYZ 104.235 512.141 null] >> endobj 835 0 obj << /D [829 0 R /XYZ 104.235 502.676 null] >> endobj 836 0 obj << /D [829 0 R /XYZ 104.235 493.212 null] >> endobj 837 0 obj << /D [829 0 R /XYZ 104.235 483.747 null] >> endobj 30 0 obj << /D [829 0 R /XYZ 89.291 380.389 null] >> endobj 828 0 obj << /Font << /F40 549 0 R /F60 805 0 R /F57 761 0 R /F47 592 0 R /F49 593 0 R /F21 548 0 R /F62 838 0 R >> /XObject << /Im6 827 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 843 0 obj << /Length 2429 /Filter /FlateDecode >> stream xڥX[۸~ϯp*9 EJ>%MO]9KSliȒ*笁΅/b39FڭywYTzޮB"^$&QjCh7Ս۶?m?e <5D*7OG1%_?b),^=ı(Ҕ%6M;ѷm?,Ypo{ HxخTnG2anK[3w]LktܻpRqyRlRLO*fI8YlEt.6NF$r^sD_` }{`O=֧vpK'jKM +]2:hŻ5X-3% ZHΣO<$O8f&E=Ss#dV+"\.iL.N)m8wp\î8*Z ov!AL\bPN<'懋/J k|RT$=$0UnYȳ Yd5JZnZ00AknwC1ڶы|E{ 08TpIβ: <8 ?mYԀׁai6;3 U\{ز {xy-}6+GD& Gx1ltyԾ d;-k%pokݟSyIՖ9H6 6nIG O`p\ƞɄ{{Www)VH:y+zI$MIHa1rm.\m?] y gAkڃ{^nKhߔrC7/q}eG1e :{@hܻ+^>_>IgDFYfc.'08 ?6[eO? 36go u&X,N0Z$׭97R_X8$E,|=u7%v,[ryadc$@8u+,}Oh2.0G3Wwe,E>2yǶnw )/Rd 84'!IJHp 'йoOW|yyv~$ps =< ZQlK>130]4zj3m.s;Oeﻑy6 Tp}|T DM 'D.Jm7.֔H9m|c:KC^*QѡEh TlPqr.mḷaY8IB8]aB+7:a=M Ԝl!&а,aZLqcuQ MŃqHp!k"Ke3 =),.J͵~7}Z83H^ 20zW[T,I i1\=M#$;dMee{G錫{ mѭ āLKmrZHFӳ[M_gGmy%ߙ@ ?8tjX{K'z, qnMI&m0KO լƱGk88 /Y/p::%! o0?0S|p7>p'2L|&Wϥ:l3袝=W ^SW čL*Yݑ=\ E2DS(}Aqn*$ƴ/u>^KlµzQ"v[|x4Twڽq>0?!WV^*o\]YYh\]> l_|¤spa/G<7v7-l qkvXl q~!١ÞYЦC>g8k5*a>> endobj 839 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [124.96 221.157 140.589 232.951] /A << /S /GoTo /D (figure.caption.8) >> >> endobj 844 0 obj << /D [842 0 R /XYZ 88.291 795.961 null] >> endobj 34 0 obj << /D [842 0 R /XYZ 89.291 397.036 null] >> endobj 38 0 obj << /D [842 0 R /XYZ 89.291 311.211 null] >> endobj 841 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F49 593 0 R /F21 548 0 R /F63 845 0 R >> /ProcSet [ /PDF /Text ] >> endobj 852 0 obj << /Length 2802 /Filter /FlateDecode >> stream x]~[ ?E*@Q$M7>mErAgkJdɑn|v<!9CPX|F%OU.2_n?$7++eE号xB}~2U-HC=/j~ƑrXd0a]a%jK}}sNհ= i>ӰC:YT"mx&3O3aFDoY*|M9\iu>#-"HVө2*081pֺar6nn;aEq7wJp7݄t23wQA77, JTTJ蛔0#cz)Cͮ!7qb@UK|rO/-]s`}W{{W.`-ߠ,(Bu$7U?mXSƑń؛0zcv *W<112@)$?(⁦_ڻE2) zJ F fPTi6L> 搼]+T:u7:we-e]UX4w"طIـB0^ucdL` `> Wk`^w`ͽ zS@22qri-e2*\y+}s6ұyYYUz-yI *hHp\g!y'Û jf.`^/@͉Jn <ۏSEEWk ӷxD,/@qr>:Jn׮6aurPr!P#c,āaԕ)zIh` LAOKӰHM9(5A|h=c:cS4 B(O1!d(<& ByܗGoԜQhC66i( O2kFmPKqf0f]6 5+6 HCTPT^HHԀO✸ 9qiʹ<30Mdl-=H9"M{Uj3W65A^+J} _=sl(!';Is2 =Ѻ B@dA_[@ 3qJ@`txDAGD2"A:S;:uFv.r,2D52"_QDL Ɂ2#@IÕ-x,}D/dnZLGWʥYv]"q3{U"q/H~>Fy-7^^+R{&Pv uӋ6Iqpߵ^2(B>qR~FTL:|aw3YAw¯)cˏP8ELZŒ}Y>=jt>G3@> endobj 840 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 242 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 864 0 R /Length 11151 /Filter /FlateDecode >> stream x tTUvj'_{9 H0 M3( *(DBk,F"2BhgAhΊ}UJ J~gժu{ܻ}Ui 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ð޽{x㍿o΋/ f~0A]r 9ZC p36eʔMpF[d*g,)))"Aum)7s.]˗)S&N8bŊWnҤIOw}9MCEJ1[x;(̝;n Vڽ{a[ l\sMc7oC=MpF듺Fj۶ST޻woD`62dHvիUXvZj<:ujbbbC3\hB?~eE Zt|c>zh\\>: pѫ):0ծ];%%% dZZUz/lN<=ldiE[K*uW.Y$l1B{HA;xr]{n [ݻw=zOJ3åK[[6y>)SW_T]wݕ)9i&m4W9ڍ7^7pu]aÆVZ*|nmPLw}'YٱcGDuԠApƼtһ?%™Qq|||Då^j޸qԩ)9ܯ_N:?F;U9^^z KҾȚӊ=zTkl-\ ֭[˗/lٲ@'N\r%yZ7ѻßaqNh+V讃]~呒Õ+W^xqU8zH""kN+:_~E?|yXujW_լY3"0޽{srrNyJzmnݦNBJJJ5",e˖WjiӦ0}o>+۵k7bĈH_*́;w,Wʯv+֬cǎxa9:hǎ%n%(+Vn55nX5cG W^y_|8}i4 *Tлw߽[~mQaaaaaaaaaaaaaaaad_5 ^[s?^ `C/  `t{08O+YBRRy|~ψ(y СC+)S$w[>wBoǿ L( C'BȮ J>|3dBff5\S: g)Į0@PBZzzzjՂKyҥKxn5ĝ/фA󫃃.Wܵ^v??GjAB&%%5htډ'.2t <x(t$]r%#{QaĉիWRs=c> S]x (A#47nW_}Uf͂cFEEUXF+VR3!!avL#4;v$J{ڴi^5XB:A ԩSQ[ĉVعs̙3AAt0DJnN<ܺu3g*8ʲ]ݻׯ_:*oذU̜;w:|});*`*TMtf ξo矽MՀ`q&ߣ <x@Հ :HV < Y x (d5`:H4jAth`:H40@P$x (Mx <x@&< µcy.lօ|=xWVt~9ֈw|} :x^jX`%Fi+~ ~ǎ[j%T9##zV5rС7NJJR6sZkcS}UHOOf͛{%iV2exѣG۷ϛ*,\ХG˖-ﯣrrr8 O&MF%ޛ6m$4TGB`-UGy~\{|ҤI5|ChxǗD/~PpnjINN6O:uXlY9zhn:9ö-U95~5s{upUWy%!CH&ZnMW^yXjɣS" At0`זZCtЁ9v7-ɽyas;OdG w]ԝɓ'gΜO֫W/,d3kAAtȑ#>:hg0h%. Ey`-۴i<sTkvtҮt;,ܲeoS&O-y:f HF*zfuZYf~"&%%%''G[o՛VǥGV|6mt̘1] E 6T>C[w$`ז7oV ׈<<7ٛzWzz:?:W\9**jذaسgϛod4+^zYѣ cbbVk- 헬.b`Zn-Vڌ3顈+C\zؓ$(̙#ϦM9$VXak?'cy^lYז(}ƅk\պu{כw|t< 7rVwy'Y "ٵ<_~7 <%KH֢J*V"S$<666֛Atx@A00d5`0d5`0^ :uj߾oW>{?+0Cǎڷ x?~;F </E~͔O޽Ǽ S]aݺ/b`>}ZH{ Y] yHIY0r&L7n"AaD0ӿ˿+ܸq+FP)du9p '!(:xgIط8Aa:af}vkWo"(t$(p:h `Dӿs]\2n :xmaklO,v},x{xM œ >xYzkFM.>#˗S_k8p Gm~`_hC0QpcGB((OG AVw~0~$?A:At.Z<{d|G_ǪӠEM:(͕>jשbt3!uP[mT޹}ڵW^UGYvvv!q!I5LTĸ [l,Y#OvpB8NY/}73f˕#Z^[utP 8,J%^i\RI0ZJJG߿_$Q)B54W̩M|)`ԋ.;tLm~]M$wRDvy*õYWY{XɷlڴIF7S `"ZOnr=cǎio풻?)# 8u0`稃^ x飃vQ433SVtݺuVYbo8sLi n4jAt0"tp۶mԖо`d`F <x@Հ :HV < Y x (d5`:H4jAth`:H40@P$x (Mx <x@&< =(ӧOw,0s: 1x4Uǣ-]Y kZ^`RJxNSw˖-5jԻw1n[egg(8XV|͎~Ptl;1ch8H H௃ t<[1rvZZٳg8|+WҥB]t`fQ^<{iذܖ-[fulDCbbb:uRZrZsSFnik-gffh"YN={p&&&N5h8f > :uL݇҄y[oh z>\j[ǶB *UJMMG<+(~ArfʕJݻOvmY ׎eY=U !Fo.*ǒ*4*V($cƒUV9 ɱqFcbGyp7nC\\ I.shm8蠆_oDC.I%J9W\qd;BjJrFFvJ#7NJJR6sZkckv(==]ӝ97oZ~Glrr9˔)c85B5𲧆 ˗/W~*Nu=~ZjO:LAo߾ wq-#zIx@۷om.\F:*''4idԨQiӦArFɠ:*]vmY:@e+~Dn۩ǫN-1}yz>G}dbɒ<_8Pm;jǤugԎNݦ<9/JPӼu[e_ߒ"|6_uIϵp:8곯[<RMxoRjib#Sŏ&(NS?2?:tN5K<[Dk1F~84R ut{o?/=\R۩&yQpj 9뉎5}}w5ih:;GoaWhosG&v֫wv$Ae֏?- r3:|1}kxйǻI_?nK<);#-S'tiDtHqA-o^vnmf-9yCTc7 i/7ky )!zuєu^tP/QgmcbxhUJomAuPsQ-myzwT뽮^D-jn\x;9v£O>g#J5_ÃE [l{K:X̧o$wKңO?΋8|937Ïk{ڍ[qޑomnSmA3:ֲ_/{J׳H {T[9mmtPQb[_+)>:k-JPD~whl-IVgĘz7fi`u޵p0D=4OPz =䳢,O׳]L=f-\cĨEy~// |ytϋ~MHBg?so80gg_7oL,:h- P{#`jBy^4Bu=/DyѺ> stream x #pdz endstream endobj 847 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [280.031 352.331 295.659 364.125] /A << /S /GoTo /D (figure.caption.8) >> >> endobj 848 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [264.966 195.413 280.595 207.207] /A << /S /GoTo /D (figure.caption.9) >> >> endobj 853 0 obj << /D [851 0 R /XYZ 88.291 795.961 null] >> endobj 846 0 obj << /D [851 0 R /XYZ 89.291 764.475 null] >> endobj 42 0 obj << /D [851 0 R /XYZ 89.291 476.066 null] >> endobj 854 0 obj << /D [851 0 R /XYZ 89.291 408.923 null] >> endobj 855 0 obj << /D [851 0 R /XYZ 104.235 409.74 null] >> endobj 856 0 obj << /D [851 0 R /XYZ 104.235 400.276 null] >> endobj 857 0 obj << /D [851 0 R /XYZ 89.291 280.398 null] >> endobj 858 0 obj << /D [851 0 R /XYZ 104.235 281.215 null] >> endobj 859 0 obj << /D [851 0 R /XYZ 104.235 271.751 null] >> endobj 860 0 obj << /D [851 0 R /XYZ 104.235 262.286 null] >> endobj 861 0 obj << /D [851 0 R /XYZ 104.235 252.822 null] >> endobj 862 0 obj << /D [851 0 R /XYZ 104.235 243.357 null] >> endobj 850 0 obj << /Font << /F40 549 0 R /F49 593 0 R /F63 845 0 R /F47 592 0 R /F21 548 0 R /F60 805 0 R /F57 761 0 R >> /XObject << /Im7 840 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 871 0 obj << /Length 2541 /Filter /FlateDecode >> stream x]s={o~Lzm{褍ߒL(D$ӻ^,vIS6a:bhiIh}R3(i1N' (OWzEi\2l㤦8f7mEi1@ͫ7ג&8urN#ܱDYIa*^c_-)#ͯN&OeYY[T+FӼ]niul6vb̀-h:+W7nk6ׇO4Yܯ>lr+ l\x!B8qLn.cw*8'VSM˗mU?Jr Dvv߆X.BPl&L@1 MyY]qއN &vCVgm\$ę5awC^xe7e>ɳ!F&2J}n,&d!`30R\Ş?mo<#3~mZ:,۾ox"^GrxV,췾-`{C讲6 eVm\yȚ&_"jy(U<9Kki9Feb6yقJHJA%"w*P (!'D1 i/ )#1') ֥("BZbMpF9Ata6gd1P !X{{Ÿ`(s)z^dd :&LWE D_t2?MJtʀC 3YTW) Ǡa_Cqu/WLy &Y1:wu FOZi)`O/0Q"J @4]@G@U% $l"9t(3|7"C p Zb*< $.YM$#:(20_P 9 bl jIPizY0 ϡ׆p%OwzC/ncXc7ʨV1(+,Gzv3!3VYA3v:e1OC.4=bI80C4fVaX 2!e ?0F[mٮi]=brc[rpò6*.a0Xs@ ,&Yhz탙n.g.;G~K"L@} h6H)ߵyvMl? nW UfYp+Q.mrv}pET=Ύ$.DdBVfιۯ朻AGwfq#2T:,Oi2XǜbDq;oAȼfH`^SoDm塪 ,wY*Ǜ(S(euj #MF@vm(1K?'ʮ탪؋G,:Q%-[,`.?]Zr3g(7ˇ O''(j\)\j [މrY[GySw7llAmoQUwؾ p!>te0NP4Ĉ|=(@(;*!0 "zyn!9na!7,}?6I:r~e`7Bcd;+3ˆJpEb'L@y2qt/}L)E[ЩE8 aȂaߠmy+٥ wyI );;PtT=c)&mg<׮ JĭT=ҏ_ߚh}9X~dgRB3)3da\u"lƋlU{{E? d5]Y¬gD!czN{aQiC^ 0uN[mrQa'dw,\5i| +Nc; I!LH SFOv8>Dݗ׋}' i~`art1| endstream endobj 870 0 obj << /Type /Page /Contents 871 0 R /Resources 869 0 R /MediaBox [0 0 595.276 841.89] /Parent 863 0 R /Group 753 0 R /Annots [ 866 0 R ] >> endobj 849 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 318 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 893 0 R /Length 13998 /Filter /FlateDecode >> stream x tTUj'ֿPH0$j7 " 2(CnFQd0U@ @!t$L$4sUUTB+֩ùۻWr*aaaaaaaaaaaaaaaaaaaaaȑ#vv^bŊٹsx\fu&O,kXDDD@ܯ_?gJ˗caaaUVM>8(\JJ* .^Շn/?=M>?gϞ .eqÇ[ٝQۭ[;vΜ9cf͚g}֙K>̘1{W\Q;=== |66iҤ=z}?/oݺue˖P>>s tŋ7tSxk,!!A9>_paÆAU#9$Xƍcbb[9op YYYj\|Y5l`i*T[Sf o'Nxqv[ 2sLg+VҬY3RJ#FQƣ>k׮@{^ٳ箻ݻw5 Wc޼yCz>}?rZXXXVM6=c) 8qB_}U&M"nF͟?iӦcƌ߿{ۦMsySSS7oJkO+pႾc닫z*U$%%Nt 7>?^ͱҫ K[urz:7(9\f͍7J+y'P]v5l0RAJO?<}tHH} ϽjLoРA@^WsW^@h;hРe˖S~Y5KʕWvH5ԩ/zUcԩ?26l؝wީ/zUeo~3[*y}A?vܹAAAV@INNmmVnky睷~jhVW>졇R>h5_b0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,lѢE8ȋȋeaF^F^8̾88 q}qyq8O+_;aaafaɓ'ȱbC-r'hpB :KO8\!8\6`:|9s4? ˙x3@PС(qZBBBݺu#bŊ!!!?cK4gЁCrpĉwܱ}b{ ~WM4d5ΠAAZjuxҥK7t$q :8nx𗞞… իedFF^0SK3@PpWa4{1AsU^~^FaVH&o߾B/ ܑN-Ξ\گA3:׃oSKΠAAp@Pp $с :A8HVAtpF3 YgA Πd5:A8jt (8p@Pp $с :A8HV Atpttpttpttpttpt ( Y3@PAgЁd5ΠAA8jAp9lٲ/m۶ح[+V0{α+W?~Bd5ΠAA8ryvFFi_t49 q :A9Jj͚5RSV|ʫ3gΨk׮UU4f׮] ;vΝ;5Fݻwiiiqqq:ܹs.xr_iP:V3DFFgÆ K.UVm(Q. iiT&XWw+52>>ތV37oNOOW[LSSSSRRUGYVVi>|X3툈qA MD ]qikׯ7ӫ1c(飀,MV>heeeO%Am& A8X=ju]rTRf́1:أ9~x֭vIIIf$44tС~gҿmA̦f5jTᆬK]v9%K3~C\dSjPg6mVZFX۷I&ʢ~Xm/Ye˖:u( AZǥM)]>v,a}~ǝ+X1cfkpuQ}\8X\ӧ-b@Ç}t"zR^=3Nrmۆ7if3ԿN6MmncǎuR挘UR~z̙3=X~MΝ;;VGegg>}Z=ڵ1czھ}{/YςƨW Rz\(sMG<_x3{s̱I/")W: 2 ePuӧQᇅ/$(|RpAO;v?;>) Y?Μ>ݯsH9xW^/ tp+g(,?^j^3 YΘEAs[ :A8HV3cN[Sܲ%$(8pm)۶ϩSuGۼ- W?oDzRR}Gom|IM=ЦM_;Or6nuC?~sCo+*)(bI:P :PAtpyQtpAA8j??A838pեK\4mq~LЫWߒ (|RtpV_UFAeMtt (&: :tDp :A8 DAphΠAA8H4сAA8HVApF3pF3pF3pF3pF3pF3pF3pF3 YgA Πd5:A8jt (8p@Pp`e mbccnݪjX´ݻ:V\yq/ y쉈k֬0Թi&{Hdd%K={7nxb2SX\ba%(K\bު-fKLȑ#i fg.ܼys||;ܧ~e!/XOհtg`JCԩSz+\|Yՙ3gԩ]tڵ_j}׮] ;vΝ;5Fݻwiii":w ܗv&T f?߰aҥKs$U|XŇ_sL{aB~3abb <.mmf׫YYW:e߳g]|\i2~kӶZ\n堰(N4l٢!ib.\𝃚hkJZg=2XO>-D\4Qz%t (n q ӯbPo;[eddLځUhX"h{H{7^۾:UTõ <.9VK8+8hLS^ګrɞ=sPUpY:kb5f޽QQQVޜdET3 VMbE0v)WtSԹNjЁnm,233U>İ7ɓfCvWnEAK_#xA4QA;v}h[ /'NPiS^԰cAgjЁn'%%yG%*V~Ѷ9\a4g#K{ǥǛ~z󺨽 erPFh3QQB n߿_̲g-' |]^Ky*BsP+Er :<9hV%''_y$03)@YFp/r㠏إe֭3G@jᅃ)))f~w358ڸqP=={hig9sT/ !66>'cK=Aa%("p`/j}/hujyj~o- 8}[Μlpp^onN6I#Fsj9ck6^V\;17|=~~m6\pG^yޏ> ҅#,̊ޣa.=:}ڊ+_vKLg E';wܦM#GհtQ7ި[ʕ+Ǐ_J5k8Pu]mC(gz?޺ukS$%%1yN"uHHHHÛN3[jlֽQFկ_[tܵks]3sZZZN<ȂFaÆ3f344 t:=D)NlРAʕ/^׫WOdDg/6mgϊ{衇jr :^NrM>ݴo'>K=إKE픔f/m6,,L?\N3Ƙ5iӦ Ύ;:537n̙d5 htᦳRJOŗzУ{:Y!9˞"7oքإ,XШQ#+WjԨ!t:9({#}.jf3c4v^|q_S*UdNV=I4`T#33SKHHp(x3mڴ޽{ٚ4iVÖKP֬Y3((hʔ)z;lذxiѪ_&ٹsgHHHڵgpijCVjU3ڵ˹zzjժ|qaÆOsWQ~V\7ް{tO'cvwNGfϞݮ];:w\\9Qmi?þ}հtMM悞–-[^"ZVVY3@PD4EjժժUk֭d5ΠΠ,S$qp $qp $qp $q :`FM}IOma/=dgCo rWxNm=w9ʗi5n^s|Uk3 ׇiٸCVÖKPС,s^s Z<=Ŷ/=_~~ū6ovz襾ڽTYzmZ|ɧ_,9:e>:И&u=[ :tez;u'^`Zkovܫo0><sy|QsP=;eΙhp_|Fga%(2:þ3`jCk?lv{wzNtuqpvx_w]2άuK3͚=VÖKPA#tyyrP>Ug}`U؄1MqҪ8׏&Dt{=x;vc^924t8[ [.AA8l37 =%BG\/żEV۸DCi rM!rP?Q8A\mڢs#Műհte17 &"ͷ^Mݵ?Kb6I}k^cZX(ԏQW.^S&i3{:t-,47 mڡƨ{+g~](ASogb{WAs.*!u vs̘?HK\eu6:k~>)wтȵR3i3iւ^j`OntO);sf'N]2vGׯ_- | Ywԃl ~ptAtp0EyQ/yQ\pAA~-d;dr :A8xru ([.AA8 M= &r :y6iXOGOO-KOv{7?v-_߰iαy?{QM~7հt($3@PMtt (&: :tDp :Ag :A ΰ4:A ΠKA Π:A Π:A Π:A Π:A Π:A Π:A Πd5:A8jt (8p@Pp $с :A8HVAtpF3 YgA Π, \lY޶m[ll֭[V+V޽{Wʕ+?e!=qqq:|͚5f:7md=dɒgzvƍ/^qiak֭ca%(K\bު-fKLȑ#i fg.ܼys||;ܧ~K;dgg_ eVt (p0333!!BRSV|ʫ3gΨk׮UU4f׮] ;vΝ;5Fݻwiii":w ܗv&T f{߰aҥKs$U|XŇHki6,S[~3*jB{14(ET'Sq3xB=k9ihuQ#xjXܻ IuQ\p0Ȓvje[x ֬Y# \qd2ѣGuVLMM53q?;͙gcGmܸьQm(س޳gv@ho:q9{ [.AA8x-,Rq,J $+>W 4:{E~o- t_K/_ޜiڵcbb?+WcǎvM6ww۶mcǀDԙ|⬬,w_}&b px?{v|G iWX{ٰa;z6mڌ9MtPgnC 8~x֭ ֬Y3))vjǫZj5bccճo߾&MDzնQׯ}-]tnٲN:!!!C q#:աCܖ?~|*UBCCxIO*aY㏛Φ]}̘1C3]W#W^mFuInͪdrh4]v.vܹ\rjh"22Һ7qľ}cA8SRKQ e˖mo#tp?_:11QՐ:u_O ( ΠAtp3 Y3,3 Y33 Y3.oϞ=[NG{Ӣeۢ)iә gCnӮ^<ܾCY(֣4lo˽5I)Ȑk~{(CIרq 7hѡip۝?aS-Ngw|qMΟoۨo /w~GC~O X8ዹ=^s/>>C̆k\Ƚ |29}8^n۱}R!)^gy{$݄bgWdGqfз^9S:8M:=bnF/|g'],ܠ).'ף/]#Yv]þꅃ ѧ>q| r! zoZ'q8Ӽc>^ :/{v} g86j{M|-g¾~-M1WA.h֖<')kכwFMtH?8cn  zTFu~~e=9S{©7D{[*7.\BB|WLq^OE_Tv2jtpJgٲe ,ŽIvs̯ BxT *T*Rqܦ2btxpPq;e/A:?q=bco޶xca:$P:9$6ʅأ)_Y &FE+mL{~X1f3693dGbi֎zA=Iz]^dG/}8襇l4y2A>B_ϋ^$p{S:8~ ?X8^$p{?Ȗ~ɘps?{|栗I`=V:8~ h/h'境:ӌ7Qf8hy{cnAtgvƭih)iәzyspOP&g ]OR 2x/6j>s: ?:Atd5:Atd5:Atd5:Atd5:Atd5:A8jt (8p@Pp $с :A8HVAtpF3 YgA Πd5:A8jt (8p8CPp $qp $qp $qp $qp $q :A8HV :tpt ( Y3@PAgЁd5ΠAA8jAp8 $q :A8HV :tDt (&: :tDp :A8,-Ξ\p :3aaaaaaaaaaaaaaaaaaaaaaaaXHr endstream endobj 893 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 318 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 468 /Filter /FlateDecode >> stream xٽ 0Qc]@ʵ`ο!CFW  @`,r.O>9n܌fmO}Cp?5XiKvh endstream endobj 866 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [283.773 233.675 299.402 245.469] /A << /S /GoTo /D (figure.caption.10) >> >> endobj 872 0 obj << /D [870 0 R /XYZ 88.291 795.961 null] >> endobj 865 0 obj << /D [870 0 R /XYZ 89.291 764.475 null] >> endobj 873 0 obj << /D [870 0 R /XYZ 89.291 482.293 null] >> endobj 874 0 obj << /D [870 0 R /XYZ 104.235 483.11 null] >> endobj 875 0 obj << /D [870 0 R /XYZ 104.235 473.646 null] >> endobj 876 0 obj << /D [870 0 R /XYZ 104.235 464.181 null] >> endobj 877 0 obj << /D [870 0 R /XYZ 104.235 454.717 null] >> endobj 878 0 obj << /D [870 0 R /XYZ 104.235 445.252 null] >> endobj 879 0 obj << /D [870 0 R /XYZ 104.235 435.788 null] >> endobj 880 0 obj << /D [870 0 R /XYZ 104.235 426.323 null] >> endobj 881 0 obj << /D [870 0 R /XYZ 89.291 361.479 null] >> endobj 882 0 obj << /D [870 0 R /XYZ 104.235 362.297 null] >> endobj 883 0 obj << /D [870 0 R /XYZ 104.235 352.832 null] >> endobj 884 0 obj << /D [870 0 R /XYZ 104.235 343.368 null] >> endobj 885 0 obj << /D [870 0 R /XYZ 104.235 333.903 null] >> endobj 886 0 obj << /D [870 0 R /XYZ 104.235 324.439 null] >> endobj 887 0 obj << /D [870 0 R /XYZ 104.235 314.974 null] >> endobj 888 0 obj << /D [870 0 R /XYZ 104.235 305.51 null] >> endobj 889 0 obj << /D [870 0 R /XYZ 104.235 296.045 null] >> endobj 890 0 obj << /D [870 0 R /XYZ 104.235 286.581 null] >> endobj 891 0 obj << /D [870 0 R /XYZ 104.235 277.116 null] >> endobj 892 0 obj << /D [870 0 R /XYZ 104.235 267.652 null] >> endobj 46 0 obj << /D [870 0 R /XYZ 89.291 218.087 null] >> endobj 869 0 obj << /Font << /F40 549 0 R /F47 592 0 R /F57 761 0 R /F60 805 0 R /F21 548 0 R >> /XObject << /Im8 849 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 898 0 obj << /Length 2148 /Filter /FlateDecode >> stream xڽXKo6W %6`b7c LV,VHV;Xm%HV}UQ<:F<<瑈D.XQH DuwgY)tCmRr'RQ7o?{ JRycƣU2STV,D+ =qn<e`طZ$KDo}o?=w"OfCEdɞ' ;I0X.TgaSZ=% :gU)~Gx=X<ō"UnO`]2r=+xTzUpx `2)֫յ5gs k Mg0zOS_wnfEpjF|MG>)I"GIovIPg-|fSMo68 bW[UsC{ޠp{Uӭ{97j@:S @9|43SpbrX˽<|j}#t.28$t~SNVߣ0םPݚ_'ךxX?:0!scU{Ii vbδs)ӭ_`'/4+R]|< {l:83 7]SS:c}ҝeR^m3ؐ Bgz$@ \.W`I2 *xFk:0]BTKx}Wêk&5.W@K7:W*`ߧP>wPix{ 2,S?sQܺXMrp#UE`a aHVͻJWwU")X)++O&O9쫫2rV;-2G1y.badY*FgJLN, 1n;0Wb@YmJί7=W cmz:cθRk"]Wq4ï@ i|Pٛ{_4sR_4+sf[&f83Y\1T&j df*x0R4]C3!9.^\2kpd!0ܨ2K#"E}us1޺H;͎^=TS*s*T]\E4pY0/W$ԾN!-dMW)[] _T@qXMH `7(>=3Z*صқ˃ Ľ(O}Y9IeЛpU_Zԟф=F ]C&?Q}Z_d2/M%$52ɬǮ*Tcs4h9'@6`*!sdrx>?@n52F!7"=;#q_Qh[OOsb\.x8 )7B/+x endstream endobj 897 0 obj << /Type /Page /Contents 898 0 R /Resources 896 0 R /MediaBox [0 0 595.276 841.89] /Parent 863 0 R /Group 753 0 R /Annots [ 868 0 R ] >> endobj 867 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 318 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 900 0 R /Length 13304 /Filter /FlateDecode >> stream x tTUs׿CQ<(hw " H"(BZ[VFEhl0$d6N"L05=ᆰJQRju9>Jr aaaaaaaaaaaaaaaaaaaaaX_yWXc?q0At0Gk6f~֒"sϞ=)h˕+W%$$DUVJFcӧ1\Rk&Θ1jժWn̙O7|=M#GDJ1whFaѢErKvvv]v޽{ h>l aO/^CyS"nĉtrisss#ѣvhIJX~~vvy<{ʇg:|r 333<8q⪫f0|bGÖ: zEGf 9ZLKK+|ß+@SN=l`寻+V-qƩfF[oF-~M4'%™ *5i]6y>\s5 ^wߝ)9eWګ͛o7tӦMŸ $&&kχ(ݻ'oFk׮@,!!EyʕsJ3|ШQȇ'}Ǎ76lX^mVNj6mJ_E֞VuօkAݾ}{J222"NOBǿ.!P<%4CpN0=љb|(љÇ[#;;?%A? r'^jK85< <\ 0^KOO]vpI*APB\\߭XMx <x(Y5jԭz7_߿_|AFA0@P׃ -Z8Svɫ $.JґB5f̘QN ={|ޖNV`"Ɋl޼yzJGNZZU֭[wAzgaVB&Y=zHBJ雄{Μ9^5y[K8uXx\>\©0@PbAjx (t$ၠAtx@A `Djx (t$ၠAtx@A `Djx (t$ၠAt A < Y x < Y x < Y x < Y x < Y x (d5`:Հ :HV < Y x (Ξ=S[.55uڵze˖ڂ d"0@P\;wӧyyy>y5vޝ ,ۗ,Y"… MNNUa{ݸqi&!;;{ѢE:ѣ>?4:V#̙3G˗Ϛ5K;vdddPmQz|&ޡ,Xg+3--z@jP6tpժUjKV_~}VVVffuXc׮];k'%%Iw?kRS%"öml+VS-[4Nc8^7oެy͛w4w(;*TgzTϭ[ZO'n< p,RRR̯bPow˓0&R fՙ zڹKA dNv&򑧀S;,vpA3դ*}&;ww(;*Tgaiz:gulYkWAw}gΩF:p A W`A$0eL322ݻw[#==}ΝVZecǎmw)C۷aÆ+WpjgiiivU/>j@wMdㆲ3+++0eCEdW>s+1YrC49ϟx5k\E`ߓqS˖.]j={@( Z2fff8:?{2lݺunS&B8*Vqٲeg.4O <x@_wa8ݍbCՀ`4Dߣ <x@YjAt$At <x@A0@P$d5`:H40@P$x (Mx <x@&< rUPaذa UϯŽduf]s5G)lݺuBBRPt+jS:u*99GiѢEgԪU)Sȓj_ݕAtkKY) :HVG Ν;Kbbbj׮=o<ȾSjʕ+89%g.\P-[dv\zu͚5~OF6`+O5<&Mvd6nܨխo߾8h57Z@t4+DjDԪUg5oޜ :HVCTeŊ*U֪UkڵDA `D0d5` `Dj05`Dj|{ĉg=tޟ!C^4,`":fȐWfg?s <=C)>}`e :Qf-/ [.?< :`N8S=8 :F!!C^– x@At0 cA:Qf͚L{,Vx@At0 w_júu;ׯuPΝ505ܹsO>mo˳ɓ'{ {-D0yYl5t0"t0???==]ŋw)Vrs)WsK,…6|>VݻwƍM\E騣Gȓ^ӀX0gy/_>k,yvؑjCG魎 ׯqV\Ij^Z\Yg:l޼9 (02qqM$}ImXisRR7mpz?kVÖKPUVi{W[z=̳233v~_Mn:l۶\b<ٲeLq|Ϳy͛wȑtP8HSuV#͋]>:4VAհx@[±GKII1A޹///O¤BՄMɫbwл5<ڙfc5)l R = 7Aɫì>Êm@ 8=Gw.T >5#Օ^zF6M8x (:hYkTeLѼ{;`/P%^#qxX+WSCOEjѫ^zxq 5k-:(qݻAΪU̓|15ݮn߾] 68QvfztmCA$ཿ&rq{2zѝEAʲPlP -:6lg~%4KI/^XU=7={tfԶoD333m`@ɤj('rufho=9GwԨs|OƋ0zUO٠#l5lMiAhe˖)_r`+*ݧ,1:=:cT.n=eKAV7A < Y 0d5<: `Dj:Հaj:Հ:Հ:Հ:Հ:Հt$At <x@ʕkذ9O|С}3DBVA  T?kuʳo߾-[ԬY3##A?o!qqqziURFs Rn[ne֬YKV ak_{wJ=ةS'ڙuԱ>n#GUn:!!A{OifN}:~x5%l߾w^0@P,v=(ٻw6m$&&:x 7ǎ+V>nǏʣGZ X|yshl4s\kKV <r_ԝשSM]wəEAtرc>:ht(Y x (n۶Myyy*jPСomlQ}'OAZj5e5&LhGvy%FVVmرz;`n+.iߓU=k>nI&p7լYgϞVjʕ+hAt0'';/Y x (p#Pbaa 7oNV`T+T3VRFk׮%t0tx@A00d5`0d5`0^$={Сo!C^-M%:D=z<}!|X۷/YD ݻqFQ{ӦMCvvEG=zG_jӠ˗Ϛ5K;vdddPmQz|&2Mfffj.Mz磃\飪N0*mT-s볲vQVPP`]vID|H)?kR 2%1öml+VS-[4NS6Ҿyf;os+1Yt)XxT*JCZtRkٳGjƬ,%`ffCvQ_Qm~w֛7oԬn<{=NJA%+A)_ ;vX!~w <KMt0@Pf$At <x@A0@PDjAthՀ фAth`:H40@P$x (Mx <x@&< "Hݻ/]N6&&Fׯ= gРAN|ZcZ͚5/_n/}W_펚>}[l,%KXT2rRKf .<(su,?=tg]O֯CJJr>lԩAt0Y\qr6[qecp ;wRK:+W^zjjޝ-?Xˡ~|&-ʡࣃZ7|-t R'. &Xkk׮PN:IPn}Bu j{fNM}l4wk3go֤IUt>BMLL45\c8B xSKXUVi?Pv㦞6mZ ԧOV&wMĤY<8p˶˖-sl>|*,,ޗ:))I5Չv.ѣ{Y6Ν;{6]wÇX"#ArƥzC 8e9#&??ߛՖ3޴Q |*}jR}d;ƒE-@c {ԱdDZOX*E順Y>}wxSAZ/+jQ͚5S `0s_7|M7ݤk2Ty7d . 3S[V?#@렲GI _.ͣ.DbIah,SP  RQ:u۞^--k`KX l9H:m9mg[S&O~mwIo}BDWqvOFf}4Z=]vy'ǟ45.v ǁO'+w jhƥ{ZbO~?~O>FkԨѢE"}+--=qeus_T 'OG"`hGU5}ڲz֭@e<*Y{s(&ˁYfVXۘE-@c{_XRCA|wK^bI?_7*355Ֆڶ&Mr@ AժU;v=|ܞh}Bdƍqqq5kٳw߂тi999y֭-s` {RbEdd=NYsdBAڴisTǎ/rQm8g7zKsΒڵkϛ7ϛ Z;(p-[dvYz}5{2>8e<@|OƲZ_\-Jn=3.|Aǒ̏ߓ_ƒ3oVe5At+\Q"7Y ڲZU[ZYMPDjx (t$CP :HV :HV``>OKSjߠc]7%~޷ݲU:7htgv|I^~gTn?ϯ gϒߍ?0uOZ{>ui{_{cF&gi%}䥡o=ڽWq]H]1S>?~ͱS_DΏ> gv{; d胔 )v_9^vԮ Y\n3t o5&-.^%=:_Lψ S~:=o}^Aywxoʛc$O>_?XUF}ᬃ[{|p&gidnBdou|y۝tsBY":8շƏ9)M]됄Z|ኩuަCL-*F]2 ~- k&|6{zW;YwؓZ.m;XFּzMg_f6irO8*MFyr^l0}.J?!)BD?p ?d|upG_t]Org$nC}j 6Bv!:(~Ay=_E!pԡQ<5~ϹrUSp'޿HM6jgwWUA92'zuݮcݟm۾R+>~`xjߟ,qLb.W57tg7NؿCIŞy>OY6>ZD;w&{ e(g?>yZo{rK:[Mu0:%h!R?uW"AV զhY\:g=(|C۸Y+oQ:ش齪XIΒAmΏ=) r۳x:|:w+opWM׽ww> ~= xRvFLֳ ڽDoEI_j!s~:t0{PMO=ҟT=]3o,G] ;Y[V~A#O* qc,9}p:h %]Qu]GgϞmIXUxs.RGB;{oSKZӢ7hh^>HkP"u|Oo@9rZR?M^x4'')׷4Ó?=uPn;y\ 7isXgm@ӺSau^DM<{5i9j>5kݽlٲ0JW{kL*韜x7k7ǾYk1< {Uj9q7A={ w "^Uk{qQ.Az4=䳢#-O \L=]-92`Ճ+vIՃ'\դ y "Ճ=;?A{&~ENOEg=| =죃<D/|Axx>VE#TE`~_ C}  ReF}~0``(?x!= :X':du0"=(D˼}Wl 2:xN >:EMC M &|t0DD= &7:F6jqO;Oۖ& Sݏ<}^xP[q1αiAfs ;Ya&gSK%7n&xF )苺 \VWex <x8h`:H40@P$x (Mx <x@&<x@jx (ajx@jx (Fjx (x@jx (x@jx (x@jx (x@jx (x@jx (x@jx (t$ၠAtx@A `Djx (t$ၠAtx@A `Djx (t$ၠAt A < Y x < Y x < Y x < Y x < Y x (d5`:Հ :HV < Y x (y[K85< <\ 0aaaaaaaaaaaaaaaaaaaaaaaaXW endstream endobj 900 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 318 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 508 /Filter /FlateDecode >> stream xٱ P#T Q[.>brh”}t8`Rl`Nt]|%  @`,0>hvS8e?5XO]fI漻|Hu-*ԋ3 rO endstream endobj 868 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.957 494.34 130.04 506.134] /A << /S /GoTo /D (figure.caption.11) >> >> endobj 899 0 obj << /D [897 0 R /XYZ 88.291 795.961 null] >> endobj 894 0 obj << /D [897 0 R /XYZ 89.291 764.475 null] >> endobj 50 0 obj << /D [897 0 R /XYZ 89.291 398.086 null] >> endobj 896 0 obj << /Font << /F40 549 0 R /F49 593 0 R /F47 592 0 R /F21 548 0 R /F63 845 0 R /F39 547 0 R >> /XObject << /Im9 867 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 904 0 obj << /Length 1502 /Filter /FlateDecode >> stream xڝWK6 -LzyL:ݙhȢ*Rn}ڎCggWDHD*ᯈd$ TMud_w"RA(ҕQ赽 ~eiڞ\DMҔi=#KLcYoi!bH᧯̀wǠou[`92.~WFXv#gs,lUfu?hih?3ﲼ5;Af*dÕԻ@RfK$(ȏ֎^`g(ZMZď?Ӛ AnJn"fM$Eh )3-"W0)Ng" ӽ:E4O4?Een{HqF4QޒyeXc4ǐ $&ݚOB>qlB ,)vǐ/9 @,<@g5U[3\͑qbW)I&l6% \5|ٰqߜZh dJ~aZi.T.)1el]= ۡ ?wleoo47<늫)_Bp endstream endobj 903 0 obj << /Type /Page /Contents 904 0 R /Resources 902 0 R /MediaBox [0 0 595.276 841.89] /Parent 863 0 R /Group 753 0 R >> endobj 895 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 552 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 906 0 R /Length 25352 /Filter /FlateDecode >> stream x tUյ{"!$DB $(P奖GKኵRpB3+X)m)\DoE$ ^6@E@A o>s:ͱ묳=\^{2AAAAAAAAAAAAAAAAAAAAAZ'ݺuKw=dȐ"-<|t2`6nX37oСď /HrCRSS4FZ(>?LfffXXhzwO&MZ`d}٩S8U[h< BHjժH E iӦoҤIiid^*M-8ydN>-CENVsNib~!F龺iPP^zGyD+Wի 9Jo޼t6j;ܽ{7E*>$$uևri^/MԩS577w21c4yPz?яƎJe<@ey *'N ݻwOGѣ;uf^.]ԫW9s`g:rJ&M4FZ(nݺ_Zx9ѣ_z%-LJJzgnO<٦鯺 _GEE_9vfŹiPq%-tF^*_;wlR꫾}FFFZW+[!!!k׮G7n4:ɘlti                y뭷0ZJ6m0Z AhYZHÆ /_%,AhH /冤V%9^yWƫeU5*_w>PZ3Bjժy0888zUX(T%~ݺu3f I< E֭[:t8ٳbŊ={ƒ2'_ʗ/_T3]riӦ I׸r&MT}ׯ_̺ubccW_m2mJR2G9P.b#cǎi{\\\U:w|ws=|#z6 'Z͸q"##jvJҪSer{q?9s挹 f x $ܸqkW\LQQѦMA-Qzȃ۷o3<(\pȑ;vlٲ?M^|rNN \c W<4#E Tٻw O?g?^β`U&XMv'HF>SSSP2rO<[/$SXXhe&K64pA~k 1SiiuLZV`ּȱcDŽd0(CBVlbe_dƍW^̵k GHLJ~aͼ߈{tz W<{'<%cpW<"LsNVlbe_Wx`]44ysU*Ńjp-y={|Aa1뜰612m"'NHF>N$:{k:D999:m(jp-]+--av^k>۱c612mj{4@D</\ **Z:(%JYYYn?CU>X9<|= {*߯ex*`sx,zȃϟ֭[elUXXXU VlbeRRR3pԭ*9z-Qxx<<R22_ccÃ/ AꗘeeR~9<x倯+Ν۬Y3.]ʕ+RrhHK>wF-nիT+!gjjjΝ :QFiI߾}ߟ&Qϟ?ܸqT+-G: <_PP`6Yf„ #FFyfwݮ]}{ < >==Ύ’:i͛_xќLto6x|?rȘBS>vӧ;v4dfϞ=k,S_x^Fݺu;|0 _p^ٳg:w[4> !gΜ1cfU, X,A'NTQyu+V9Ax00xDž~|H~~KuAIxƃ*ʃ?>j߾~xСSjg/ :9 eAx2<AXqN,xcx9 eAx2<Ac Ià Ià Ià Ià Ià Ià Ià Ià Ià Ià IÃ/ IÃ/ Qxx<<_y0--͗yY裏lǏoFΜ9cC婩rۿ+Sg&~"beVglܸڵk+WhFiӦMAs_|)ܼyEIۗsabe_{X3LЖ`~ȑ;vlٲ?M^|t kAp\ М)dX:޽{7l %~5o=r+4ׯ[M'ʳm<(+xŭ[sx,#wO$#Z(e S 'OԼp3Ad Dr &N5ȯz-!&~)--\ ̚9vP eHh `T>}:++ - k+]8 HUXA6nxU\vvɘC ͻロApk{ByB(qŃ*w;wt7(O2A f D*?~|x>e_y`]2ysU*Ńjp-0={VFX|AĦAFܼN$:{k:D2ҙ@4PkZxX3}َ;A\!8fk|Ӄ?UQ_~XA\qOf D\%77V_KIDI,9+Umvv<Z ۧ\,cCr&x,̬  |Msx,x?^h[naZaaaVׂiG9ADg,>)[UlrÃ/ Qxx<<<)) i֬-44h3DCQ`5KFCFk޼ +^zo,[UVxرVZ4[{_:{LiiѣG]fmF,X0zhkKE[JJfT+\K<<J3i ?Ν;4[{E'O̙3gѢE9sŋDСCG =Y[/TStVxxڵk]tY~udgL_pҥKó\ڵk㭳":u222pN-?wf͚IT+Wђ6|9#nZ}֦M#ȃ>Hƒ5ƒ򙚚*1W=4߿SL'g9]l߾ު-ֳ~>}4[_Fs)))FҒ}߿?--Mlƍt_M0@ƒ5ȃ"B@shqqq_+<*=)S } r5/z堠kavvvdd$Iӯ_)""B KJJ:t`&*7o~EsVnnnpp*t_9E>P`tn6W6~[:,W<(lٲA.]H2++ k#G dLL);va7;-gϞ5k*t_AkM]ZZsuuvaOW=Fƒǃ8'_憆N8/=Fƒ Ήex,ƒ8'< <2 <x,x|`o]My&MMMeK'Mmժc$LJv366Wx?5R*"xZR/rwn1ҥk}^hVm߶jUGuj6i,ߪUK/[EDDDŽTx)U?~N[nE?ocKq C[9JrOfikS|N:pOnV)"qw4k^ߘ_(cco!_Z ^xЋ֪M76jtjUGuj6NSڶk8* :|Lr֬N1OWUU5XɏSzx+YȃVIS7X/WYӱR`jӟ;| 8?}⩨ σ޵h?cG)Ӓ>e>ɉwy{eLj?<"[ypƜ=_69jO3}C֫sHʝ@7̙3j {U, V3S;鼽'mͶ,;:*4X/9`sd8%yЗ~?|d{Q_}sS0WeNEȉ' 2uڌǟ]u4Gƒ'^¦AZ5jl߀"*6=`zBblzlyMTT)((T \BƟ_^s?^ze$?H4k?rOPwM۟Vo_㥕$Uo}3$c3ˉk=KKlc+q` 냎E+_4E]( E{_4 o"4,**@ߡM}w6M4֭?iL[z*i]wX*%&i3ݧm+t<`*R+D]R/rw]>DE?hj$o6NUU8)-,e˖^(C|X2 O6c,/ttƏSHPɟx(s1ON+<s kz ȃ+|t4!FNPItL-3cDŽTJ./\sAQEEE]z,[ufypƜ=_6\5CF>1fWyo X"x 9sw/< X5 ދeȎ~gA?.yG%gboy2Gr]*8q 1倯[ 6jɣqA;* ֫yr39:. 0_t $u˂~F$+5!t#qxA%lWOHMϘ!:] lT)((9(|y /+-]y@z^D;r^߅Ra-TeTsP:1 ƃU;Pǃ 1倯Ytza}Ab<߫69X|~08  Axe_k{PXM Ab<Eݿ_tC_sA8^&& xe_{uM|PSWxWIiݺͤi35=4Ś.c[S{0%MInqםk˖-Pwɗ۩x)9 eP~9<<Dƒ _tݺu;|'ʣKKK}Fƒ Ήe_憆N8/=Fƒ Ήex,ƒ8'< <2 <x,x| <x,j_TTx!>?aw4im;5yZBÂLɪ4yڌV2_[jr a|Jr菘>osW~|Mnwn|ݶ~Mo2蕫ɔ+LkۮW"Pwk&_nR#`S+_G1#?{|ԁ>/T%+|8\}̓*7wƒ,>33^/?ʵy#lHk/TiLs1!Rn .xu|QQQVY1Eצev9yO>!{۹B$V嶻<<|CΜ99(|Ų`U|d{ԼW31z 1|`U~xƒ, ?? w+uԤISʹnfҴJb͇wjұ)=YW$Ne˖^(׻HL T Cx2G_beR~9<<)) i֬;6++mFAްaCUsNqVmwq ƒ2NXX؞=P.--=zlԣ`ѣGk^իhKII1 rsdzz\AcW-NRߵQ O6c,mU5 yrw^#<%+|8Ж'H?'OhH X|ff}{A[UʃkӶh/ &$v  ߴe-Oؔ!FZI0x… 1|_TT%DzUj9yog_k*cxJ[ *_5CF@7̙3jYxr-^, Vʵyʃoy23Ym<ꛛz&YiC$Ve@A'NXA$w˂kRx))Qg~;y0g7&XiC$F`H~~KAb_'{,X <8~gcx0!16=cv5ഹmyD;] lT)((9(|y /+ -]y@z^ 1|`~Ѫ/~Qxe_{`6ldJZli'aJ;=GTwj)c/1< ꗘxcÃ/12_beR~9<<jKHHPmNyPH;|йsges6klذaK.r劔?~<::Z2׮] >wֺuk'/\PNQ[6mTS\vm||u^SNv[FF ƒ2ERRRbccG%}ݿZZ0mfdƍ|O:壶 &8"Wk߾ު3~>}P <x,xm*k֬V1bDjj+把ڼyd|׶k.ɼ⋺mСCHKN2eӥܺjAcWVzz%%%%aaa:t0͛7x9+77788XoذaksP˗rrrrHe#G cvINNر2{YfoݺwmyPdٲe *fK.2ʢZAxX/cnݺ>|ѥkZAx2 sssCCC'NkZAx2<AXeObx<<> xx<|5/**MSRW05ygFLIV-M=Lh.ϑ8U.z$i RsA6޽nyɭǬߺG^Zr~]~%~7_v=GTy\BOf)g/1|:m<]YڪjO;]FxOKV42^ze+WZ|Dyg)ȗV[!?(A)'\ussےe?&,w+u|)GIfjz*i|6lȔl}OÔ4%]wzĩr) .11LSHǶ_ʡ?b<xc#/12_beR~9<<es6klذaK.r劔?~<::Z2׮] >wֺuk'/\PNQ[6mTS\vm||jAc_Fs)))FҒ}߿?--MMKkƍ|O:壶 &8"z:<+ȯNƒ }_PP`YFXiĈ+**j͒)..]ۮ]$/궙C#e,9eʔ |9̗R <x,OOO~d#""$,,Cfy/^4g 6L>wmNƼ|rPPPNNWX^pA7mڔjAc{ȑᑑ111B^|رD;vhv̞={֬Y|[n]{Yl٠A4ҥK{jAcQuvaO jA6 8q_{jAXqN,xcx<<>eAxX$AxXՠ(66C:J #}'_$:&|Ӗ cB*zǃ;x./**c٪5˃3漼ڴ̮22 1g!`H~~KAb_'{,wlԨkoLRRo@g?T2m{>>_$x_E>Ey(1|Uo"> o"9X|QQQ<pw4i֭L6SSISNB:5%' SҔwil za|Jr菘XK< AꗘxcÃ/12_beR~9<<":ܽ{t%#Bf"K'$rJvfGb$lzx{\ZbӼDjUn-{Vɘ% K ~wmQ.Y*n S!r=TP=Q|\r5KlV;w 9,5. W~ǐTcMC; x{޾T{ȃrY2%W^Ձ wFdY N.$~ʐMd$ƃjHƦPod 9d+`9Q~wm1)Wt6F3P=Bj6=shV=ufDgJsYU ;wnϞ=R :G3ae_E%&Ir?/*CtTn-4g;vLFO>rt+:7"HΞ={H<''  dhu3_ET%w!rA3AZaE#[8AwFB 9ӟv bWVo$t%DPf.o$md΋ʠR'zDk6ɮ r._/HFW+A+l뼨)yQ7Jryyy~޵1Y ej)4F6mڤԥd~muO'!ztQժGGoi ]<(7W;W`ƒm2YjyHyQx𠇢Ml!&|il-G}d&5{!޸-OƝR C$ɈHg9؆ +Hs/y>H޽~Zͥj.oDdTh'ck!5]SQ S0}¡f#-xa0J+UE! .H)2gg2t1|abxC =WVu ?Z'1&>Fa` <xxF׿Mu1Vr3BqܫY,s 29NM 2" y<'X&0mX8u޲TXIÃ8' @d:Iw~o:r㓀kLke/\^Tvz矗=Z>ssl֟UNsMO+))w-[n'eeW`y|U_mP6mpDYZڷtI{}{ٙ3Ĝ/ݕ ;*5^R{ٺuS99eϗdS$BL_XvXم ^YU>-yd\&*;y_*WnֲʇrV]|r;w|Jr噏?v4|RmaA.[Yw׆ Ʃ Ҋ"z[S1GIK$Qw|͹ ;`]A!>9ݤiǎrrʼnrmҥt|fKSP9R~M+,9L_SV HUbQ{;G uJdX,IkZIdg/Wt6uCd{\bTN~EL]YH Q>I]Hk8v$)~JSuEɪ\Њy, "P %ּ!$ۖ<"fuҕr1[%; Vٹ&JCk5ٳB^ 8ΤL?j˭qvԩ򌌛.|N{);~+)t5W)9u,7xvW/|O>N[(g)I>QcOIWz7vGܼm$kٵ~}tM~tb^euWzKƑ׬HHPjPiHV\BdIBU5Uc/x{0ymyAzңםrsZ)az62SjV(5涓 )l!hǎJ\׺EҪU7SB̆ST{A#G'j$Nz-#"_kGLPHdPoNي aDD rpɕDȆ(=ytvQbκD8QET)ʐJOoVlkK6𠣨͕D{]QPnMW>uQT:8cLΡI=9\¢Y)OL*%{Ov> g:]rb:~rs_[Z XFU]۷gˇ6$WJXRHm0_^%`Wʥsn GJQt3{`&W^ҷW &ˆK~`W7ܺȃRYՌ\^ EP߱5I6\YˈNv+J(Mhэ%* Ϙ蔐% ͹fmE1M\]ܣ4mTl N Õ%O'03󂹐 dY}A(wIZN-6R)`e8&>&fw-t{|CilA ZS:`&VKP Ԅܑ[PhgRhNX[g}rÆ;{hl&X7-K²eTC҆iGJ-s2tH)ԙ(f|ut[(.ֈĤf8%A(T"u,]AW6XI߼yPʭ3e7*YwUѱ[FA*:5\d-K)IQ)'&<(jUOa[SY'#3ʧ#6o.ofץF4Z}5NhD:Ҕ3 aG{/20Y̘}SR.4u?aQ </.+vsG- 8WEd[wI&:.YV()SѶ'& }<pp8W~:LWε-jLm(Yru Bz#!M3lm:#mxةQF-hU5ȃJlq2(U^&wKjO驚2a.=z5h(8{־NdEr~7="v[lz)@lm7ҿǵnoVAq [\ԌpG۲ή9_xϬɱYIHTѸũʹ]Hkrںu"H`AS3_!w7,TfLL@iڳ=JMgW$2HP . .%\&7% <- Y.9ۣӇuC> q:2}S](;ڢVtlpJ"5$!qLkUʅwť#6KCyΪUzm( 0 6S%RؤԗxMenjEܚ:)뺳{ґ f[ZڷS:j*Ɨܻꯋ{fu2DB]. :nSFd{5jI(P~E@]mk%^}"v*|w'bz-ԱO7&t' Iu宥Pz6lkgU-&t-OH*)_W1f2d#R:ReoP}UeAݬ!(a.FB]p.1;K~A~mJͻv9yXLNhfI̠i7 ž$5"=X]G0aJ,,ATbv3Tm5V/'n~[WaZuzqpjli/o%ZZ }&@:Wffs"B'حMtsfYGp:pĜ>YScǎHjpN]un\"=gƶ5ӧ;D|3`Upa Bfuga׏H|;% oC41x=+K L{1zNកK  [@Bo5RjV>+p5of]Ϊ 7fѡԝe5kkRy)Y7ISHS\ލU.s7IzuN7z}6-4f9Fa[75.R!!SOX%x P;zk^(FKċHm h99|q`Bq~v#+K .Klt?\kު$hĔ*u/܏֭9:}ùYQN$IC'Qe*QQ:{֝K562(`쀮 1uTy6(j' $DǕq1sʶn훲ަqܵ\ѯ06x*u]7ILo[[[k[݋tMGDf$)KYקԟu8^&ҙ꼍';~xmQu0;!PcNt]jjHQt|P]j\Lro,jn247 #ugZ\Fh&ڶV(:}1mƕj孷\#mϜZ$[5ĦA?/8vpu^yJ]+t~:X{}Q bGږYk]t|dPS]8/Hcpӧ3lmk/\x*+SxP:*aT TD{ JTZږݡҧnޜ.#J˻f0>'mYN_Uq&_[_!&YxЗegy8d,nW.w.(*U=LWַ4CsVҳ1t{\L݆$LOeTS*=9X_ˉO0MIL̈́0 =in-=2r]%ށ7-}E' ΃e7^9am/<ڬ\w| $ iT+k?E|>pU*x,x#֭ywe/rޗA9x,uӧ_ׯK< #""NxQw߭۷?rѣG{Msx,3g!֭ӒM^S7owڵ[n>|{Gsx,$))g-Of֟^{I&IUV}e֭_beHW_722_~*))_%lٲ7dŊ/12G_beP~9<> stream x1 0@ѦG+vr#. .b)mB ShJ:dzouhu%69?Nҋ(8w!X/ݽa%''OFQ@`,X  ?t J1  endstream endobj 905 0 obj << /D [903 0 R /XYZ 88.291 795.961 null] >> endobj 901 0 obj << /D [903 0 R /XYZ 89.291 764.475 null] >> endobj 54 0 obj << /D [903 0 R /XYZ 89.291 254.337 null] >> endobj 902 0 obj << /Font << /F40 549 0 R /F49 593 0 R /F39 547 0 R /F47 592 0 R /F21 548 0 R >> /XObject << /Im10 895 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 911 0 obj << /Length 3734 /Filter /FlateDecode >> stream x˒_%7@WٔsH1U9خ)đKLROR4A %q=$@ hݍF?aՌ߽yAgIR>{4Yen9v 6l<(}V[jnlM4q],Ժ&t]CUSӾInnR z۪.}ӍSj?ݦXӍo|-V)}k Xe^렒vuԡSE*܄!~6_Ru}NLCQ7S72DZ!n]1&<:(WT\ϿBH=| oZd. iEZF*[4}JcrڳrI@\?=π7yB܌q\mX曼\gȨ d5×YQzB`F/yPUM}s2ou=H͏o8K'Lٙq"N7~fKxOdfu 26 8NPvJנP0a yD3 Yp:V$'fiH v*XkrLy"?L)b$,UqB&Fڎ84 9}QXjnpe;^̄r 1LpgmcQ \Iɩ~N*/枘V|~P:'2+Xy,B@PN:4bX|)_D}ou#պ>\^qM^!$:Eq,a]Oeڏ)#ߵcFPu=O~Y<9jL24;l:ճ88Jxuz˼ES>EY7Y7ό(CzY~}}Yg|>Λ]h 4 ]o)OM8܇3]o!O?bP(;/iuiFtBJQ|< 7ھmbc4#ި5a0{%10c)Ӻ$UbQ Ӂbt&0TbMc %~e8I!YRQ8NՖ"ƄR`+Ll}ˡ?c^.egkC$s~4aXH,.YK) h1e[$Ur6O_ƽ)IgK%4D1LVC":eX#nini-M ;$e;Fs+^?|$Hv']ͤ(MȕH\[P&փ Ҕ"cQ #, 2?F^ّ{reB%)^*I5w)4k (#*@ IP/[jO}VԔk(EILc.Uacר`)-h4ų!uFYwG@v^sȚ_7)\0Ű)"9ipw?;S n )*S`ۖ*Vznq%UZT@-(]i1pe.$>-'$ƎE1X[8iBSAfB6~4rc.:ӰNMP 2GwW7t ;_ci`^~p;:zHok#[f GePtǢ:I$r"56IƢ!WꎺSԇ:ډ/w"w{v "1鴀X>f<: < [F;k&1fa˙IX0[P6 (;)T<əbM25a!:"Z6ִ{O1rr6YP{ٱQ9+t ܩI(y`I 񩕍*qr<[BBjo7\KpQƢ!n'9Q ˚Ltx%Nstt2|fߣpRf 3q`Hj\Dr(腿)pw5m*AǶ%o|\Qö0+Ns/[н.{Nt.p~4S?cΎN/pap﮶Eg^fmѶgXMbZ0"U>u4WlFqKq>7S}gh$!=n}}f8}F>.m7DJOTާr=_$p'G, 38oY菛-zqR'Έ=_ 3fIhjɹq ΂q+Q Z7Bu@ҵ݊j `37.d?3{ʷ]J?Gx K _`>WW]I8U( !o)dHѸhuhu?W1'أQ~б \C?M.| }cwkhQd:vyIwu/o%)*J K}3DqEg^S endstream endobj 910 0 obj << /Type /Page /Contents 911 0 R /Resources 909 0 R /MediaBox [0 0 595.276 841.89] /Parent 863 0 R /Group 753 0 R /Annots [ 907 0 R ] >> endobj 907 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.302 200.321 129.386 212.115] /A << /S /GoTo /D (figure.caption.12) >> >> endobj 912 0 obj << /D [910 0 R /XYZ 88.291 795.961 null] >> endobj 913 0 obj << /D [910 0 R /XYZ 89.291 684.206 null] >> endobj 914 0 obj << /D [910 0 R /XYZ 104.235 685.023 null] >> endobj 915 0 obj << /D [910 0 R /XYZ 104.235 675.559 null] >> endobj 916 0 obj << /D [910 0 R /XYZ 104.235 666.094 null] >> endobj 917 0 obj << /D [910 0 R /XYZ 104.235 656.63 null] >> endobj 918 0 obj << /D [910 0 R /XYZ 104.235 647.165 null] >> endobj 919 0 obj << /D [910 0 R /XYZ 89.291 606.995 null] >> endobj 920 0 obj << /D [910 0 R /XYZ 104.235 607.813 null] >> endobj 921 0 obj << /D [910 0 R /XYZ 104.235 598.349 null] >> endobj 922 0 obj << /D [910 0 R /XYZ 89.291 559.002 null] >> endobj 923 0 obj << /D [910 0 R /XYZ 104.235 558.996 null] >> endobj 924 0 obj << /D [910 0 R /XYZ 104.235 549.532 null] >> endobj 925 0 obj << /D [910 0 R /XYZ 89.291 509.362 null] >> endobj 926 0 obj << /D [910 0 R /XYZ 104.235 510.179 null] >> endobj 927 0 obj << /D [910 0 R /XYZ 104.235 500.715 null] >> endobj 928 0 obj << /D [910 0 R /XYZ 104.235 491.25 null] >> endobj 929 0 obj << /D [910 0 R /XYZ 104.235 481.786 null] >> endobj 930 0 obj << /D [910 0 R /XYZ 104.235 472.321 null] >> endobj 931 0 obj << /D [910 0 R /XYZ 104.235 462.857 null] >> endobj 932 0 obj << /D [910 0 R /XYZ 104.235 453.392 null] >> endobj 933 0 obj << /D [910 0 R /XYZ 104.235 443.928 null] >> endobj 934 0 obj << /D [910 0 R /XYZ 104.235 434.463 null] >> endobj 935 0 obj << /D [910 0 R /XYZ 104.235 424.999 null] >> endobj 936 0 obj << /D [910 0 R /XYZ 104.235 415.534 null] >> endobj 937 0 obj << /D [910 0 R /XYZ 104.235 406.07 null] >> endobj 938 0 obj << /D [910 0 R /XYZ 104.235 396.605 null] >> endobj 939 0 obj << /D [910 0 R /XYZ 104.235 387.141 null] >> endobj 940 0 obj << /D [910 0 R /XYZ 104.235 377.676 null] >> endobj 941 0 obj << /D [910 0 R /XYZ 104.235 368.212 null] >> endobj 942 0 obj << /D [910 0 R /XYZ 104.235 358.747 null] >> endobj 943 0 obj << /D [910 0 R /XYZ 104.235 349.283 null] >> endobj 944 0 obj << /D [910 0 R /XYZ 89.291 295.564 null] >> endobj 945 0 obj << /D [910 0 R /XYZ 104.235 296.381 null] >> endobj 946 0 obj << /D [910 0 R /XYZ 104.235 286.917 null] >> endobj 947 0 obj << /D [910 0 R /XYZ 104.235 277.452 null] >> endobj 948 0 obj << /D [910 0 R /XYZ 104.235 267.988 null] >> endobj 949 0 obj << /D [910 0 R /XYZ 104.235 258.523 null] >> endobj 950 0 obj << /D [910 0 R /XYZ 104.235 249.059 null] >> endobj 909 0 obj << /Font << /F40 549 0 R /F60 805 0 R /F57 761 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 956 0 obj << /Length 2368 /Filter /FlateDecode >> stream xڥYm۸¸|S~JlEZP Ȗ+I>RݜXp8á3>{w<Z>3asYr^3ZaiXA˩{&3w 1s}=Ң_j1ZOW5e,ngid&f&,Kg\b' 1|G`O')MR̅IoU(wmte \$eǖA|%y{wuY*}R̦s˃]ײ}WLi+l4.H03_lma{\,88<:|{)B6ieJ]򭬪ؽ[ؤC-bb6^QY2-zܯ\>:鉱]eU5yKX}~_K .v$#cF"^oPQ컦cCW|gq0}tat0,ui]. /ZCcⅼ-"OMFQ_-S^.SMﮯU\勩t4""nYV<&YXRe Tg㶘F6WEdW{̃%l9ZaV{nS&c|LHs)ыGswBeS4J/fri7ɷ$ ~vlzsmVe>Da #y7@sS2&g-K@}Ϳ i Z3}PVq]r%H]8)Q;s'WY[Dec@{Ya}7${pB@*qBrmhxSoV>P#5r?-7mrQkS Bl7kbU]4*4 J3 /WP.`3$0oN kNmjta܌ں鐴Mޡ[vdfֽR/]plBwQ*fevQ(Ut(ŴxV Tv3bcKu%P {~݀xD(awԮEJ!iM%M Х1 -NjPKt@4@~և9.b1uF`N\g]<Ql8p{9ujKjsT;nzK>7ގzM{Y3g)2C<[œYʸp=0m\`nۋ8WuШ4>S 35w#\?^K2Fõޟ؃ 9Nxx!ub撦oͩmqn0ǰ5(( H4(sY8E%*!M 4e̦}ͧ ;(|-pQ{:-|:9M endstream endobj 955 0 obj << /Type /Page /Contents 956 0 R /Resources 954 0 R /MediaBox [0 0 595.276 841.89] /Parent 863 0 R /Group 753 0 R /Annots [ 952 0 R ] >> endobj 908 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 297 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 970 0 R /Length 13335 /Filter /FlateDecode >> stream x tTEgYmڴir2Ē?mܸ^GFFP>Thoޛ1رvL ofĉhѢ`ȇw:}-[0amǎ/^J'''nZVohoi^/\ rmP8PV@kK.tMތyrB-z }roF[n]v-J7h`ޏVЫO[sZAy駟$gΜ=8Ϟ=orfF ~mӦM}z;fee lҤOp;|H)[.00'0˚F>15jj*)^: }/]#G] <x@ܸ8YImٲСC#THIIټyu9;yrjҠXiaժUٶmʕ+s)P֣eבtmmJwuԌњ&ЌnGx (Vf$At <x@A0@PDjAthՀ фAth`:H40@P$x (Mx <x@&< ~x:&N![J=SL@׷r]kjZ蠇uo,4ӣM隬mڵj-//w55r tux0lذƍoذaɵjjРСC~nA.˻vj:s:u{Fi$44tȑ?C,S:5Yhkرcユ+W3--/Y]y睇`MRˤ8;vXNGEE'33388XERvE#FAsKiךՓ<s]̏<5{ŪW>aPM61`ʰ*U̝;W˷v@ÇYKSIIIM4:փ:u œ9s:5SK!..N&7uv/Y]fzݻw?ɓ'!X={8qYty޼y.]" RG *\vy.u$ϋZjG^yb k*O? FKDh=(رcf4buPm5jhȅ ACΝ;WժUS&Wښ:YYYfJ wq_III6mD޽boζ6%I?YdPjJ:ksËA&77ך>^.墽aÆw&S!O0du6/AtX<{dD)~*4Q 2)Ę ibccUUuJ{+Kk֬1ە#iZֲ,',L\ZuPN311Q<"Vn<plj֭S,Y>}ZIDA`FD)&a uʢRiƤ=VA58Y6:n@2'eND*O *pYY!aENFF\-0j:zjYJK=u*# 837uiשVrzAMIIuUuew^,bovZn)0j:`n9r,y:$k;wGKA"ykc111*ҠٶVTiMTshV޿bb9kn<Uve+|$F5K-RY x (֙ /BCPPI7lpAstts_TR.٪T2w\-vmvg=ثW/)'%%ܮuiSNaaaR3g`S&u5g@qqq2ݩ[n~?p}9Y; W筷ު8e(t ONV_ӈmORعs4gI)1]/YYf+WT&iA?`)ݰT/,jժpв%AdtAӪ2\f൮%-;f I-r%on;՝q/ΝkW f6jگ裏ZzPN… |zAdk#Nuŋld?Oout!k]'Qr7MMR1ztd:ݻm%ܰ}ggg[D/Y"gLIMBvY-W@۝kjkHV$#jPt/j*KVxs1,=jX*ؗËAin8ױ:6nhZC:u&2-[a :X}Qs$ڵkߺukwtPF/6"v:4c2x6mZM:뾨q:uJqot ONvҥFC`mDONk}͢զMY,!{k 3dg5:t)VvY3Xv:hEJ2Yykt$,TA)@]}a(:ͶYp!, e pףӧObʩG}:4"Wq'#fE[:Қ9k׮~/ &\*N.6&xLX̟qqqq֣ew:/hZ ޼y1Ycucˆ G^%ӜUHa…;Z:33h3Ҭ,Y[s(&́+WUaI1ʒu_TY:*U̙3 K%’xcZuPdRaQQQ:kժtyA՛1cޒq1NWwFuid߾}5 1)mŜfW< B)VRF s2bÆ 3“Wh:OΝٳg*U WZe|A|}[ϯqk֬&P- H4JEڵKr|N.N֬5vhVKÇ[/5WAh-W^ydO>iX)]}Nq*K$$kRR (\c%AYfp[%2 Sp@A\%ŭ\?mgnՀ)57X`DMVx@+Njre|Æ ̓d5`|kjYX:@P :HVAt <At <A`P~צm'x<֑;fmQo!-_jզ]@rf[۵Cm?2b2rrrU,Y#AZ]gy^~uH4 jܢKn}FS43j^F*@\Oyņ@kּcˁM+6 lT_ɞx#w<|_YyhS&Ͽ>[!{:NO|1:tN5 :bGd'?Y.re Sv/yޝ4êV:iJ3/ 6-ujn}MYjNjA '׿3qZg_뢂ܧ߸S֕nJb?o$;{v]c{}ۅ2| qJxk[9`I_rJ:Xi%{Fq*CBNJr=?hR"oEpL2Ռ{!%CF ^*ژ7'\4g(|3¿c#ˮۂ$gtPX.9me!4suTrT4A"E5;!庑ʣwv'(B~מ}pV^/r-g/!s/<቞Oiz'UO`;3_&s/_j&Oz-Joz-X2`H×"IW<C&>'L:LծNv^jpz阜xZ,qf cZ ӱS[{ nGcmGVul=J1Q.E'=DhLL=Ko pmŶzbW Z~;yQo^>Ԫ3Y,SOz+׃HekϼϗwR\:- Aw^# jy^Gu}2z:3)Wbt:XPC_N~QttН-q#;_ߛ0:&tЇ~o7QitP5F?צ]x<֑;AyF6!C_-;;,9n5oaճW,Y#M*t-ϐᡁM[]96R23ꂚqlQ@PA~Ul&< C15lSSS~)z'O~MS0d5`:XH?-NKʕ+v͚5<uQ4oQ:(vi)H5io#P:ש:CV <%AsFEO8m6YM͔IQ:(auNՀ`)(SJHHHNN8*h˗E+XE]c5:k`jAtuPw7m$f<"gGEgTTs2ΝFJMiktP۷{N  <x@I&< x#NrZ?"a_99t_o: 4 D}xts^Ϟ֏;s`AfrspޓOZ?2NBEY_LPRswR''`~8xD}ut#r`\0\XXGn[faÊSZ+8AtGGߥvl:Y.=G1˕ lwGS˖m :Xj`ڵԢE裶5mcAt 0d5<:Հ!(t$t$t0oFڵZ07x#<0{L&:z-n \˖tD*tnhذ9smfffpp_-vޭuYfWY:8rHTzz:.\XnF_9lذƍo( 3Ƶ蠛סC";onSOΝ͛'y 9}.]0yLժUCpNbbbӦMYJstTxIMM]Јv۹sl_^rAƩ:;vw0˕:`۶mm۶S\tM!(`i頛g+ߺu+ :,Yfttԑ`UVDeNʕ+>^AA.],(&my59sLEK5fz>33SL6M*`Y蠛گ_ `e }$F^qe6<Fb$󌿿 +{m57n-܂2xNկ~;bgFAF7<:@P :HVA < Y x@A0x@A0x@A0x@A0x@A0@PDjAt$At <x@A0@PDjAt$At <x@A0@PDjAthՀ蠱<o=)Ǯ0@P,`aaaaaaaaaaaaaaaaaaaaaaaa6k endstream endobj 970 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 297 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 370 /Filter /FlateDecode >> stream x1 /2 $D\ endstream endobj 952 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [376.774 359.554 397.858 371.375] /A << /S /GoTo /D (figure.caption.13) >> >> endobj 957 0 obj << /D [955 0 R /XYZ 88.291 795.961 null] >> endobj 951 0 obj << /D [955 0 R /XYZ 89.291 764.475 null] >> endobj 58 0 obj << /D [955 0 R /XYZ 89.291 571.469 null] >> endobj 62 0 obj << /D [955 0 R /XYZ 89.291 408.897 null] >> endobj 958 0 obj << /D [955 0 R /XYZ 89.291 285.397 null] >> endobj 959 0 obj << /D [955 0 R /XYZ 89.291 263.446 null] >> endobj 960 0 obj << /D [955 0 R /XYZ 104.235 264.326 null] >> endobj 961 0 obj << /D [955 0 R /XYZ 104.235 254.861 null] >> endobj 962 0 obj << /D [955 0 R /XYZ 104.235 245.397 null] >> endobj 963 0 obj << /D [955 0 R /XYZ 104.235 235.932 null] >> endobj 964 0 obj << /D [955 0 R /XYZ 104.235 226.468 null] >> endobj 965 0 obj << /D [955 0 R /XYZ 104.235 217.003 null] >> endobj 966 0 obj << /D [955 0 R /XYZ 104.235 207.539 null] >> endobj 967 0 obj << /D [955 0 R /XYZ 104.235 198.074 null] >> endobj 968 0 obj << /D [955 0 R /XYZ 104.235 188.61 null] >> endobj 969 0 obj << /D [955 0 R /XYZ 104.235 179.145 null] >> endobj 954 0 obj << /Font << /F40 549 0 R /F21 548 0 R /F49 593 0 R /F47 592 0 R /F60 805 0 R /F57 761 0 R >> /XObject << /Im11 908 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 974 0 obj << /Length 2296 /Filter /FlateDecode >> stream x[mo#_)@>4_RCX "M `(S!K-Cpiע"h``厸 ϐ4^GW%X#Ni5{u%jI^Bu'+O\1}9+IS'ot,i\wiCHiiw1/ Wtο~Cݗ; xnrqv^f ^^Ko);74͏o}Ռٹ+Ltj„ ~vSkpMԲ[u{4T(3^E"ZlB _q:ִ3Аk#Fk =RxLG@N@nQ2JI&ycmc+(Ϡ| 9P^A9GUŽ>G*tKsK+u.ץ 8GFʗP%kngp&΃hDɫUM.#ʏU49/\ޤ\n^\?gl0k ZQߩX)Fg{+0^e T2PeEJr;@9Ǎ SkS|P8 T|>Qhw^B2Amzz {ߏًPlgGT~rr r{e` XZBt!ee Ze3K uKNSMZEa. /j8ˢM_BLjƈt HPF>kUMDb l]D')4 TQ̖& ml)P~oFIo1_lGMN"~))}]BiJw3^ft]u!w Blq~3'B0Q-l)P/j &\>h Lk4{j} ?`$fK(|riPޟ i[&$z\}g(CP@ B]VQv6D3XE`ixd? 0Ug sЌA5{ @~ s! Z4e*Mԝhwi;Y/֐$1V(c Q2rT^"&9LXfUsрe`Ec2ڇGk1a9 9YF\'mԪ(#', {6/_d+4ATz(wI&ڠ"XU62Vpc%e =~@=_<̫7:B7YyV_^S 0H8ೣ2"5cm#mN)!w+5HpIDUmט 0\\pf"~!jj3qךPr2 c/_ɯ:7e&.cI`to6>shu\ǡҌYO&mmYO! > ͸v7-7x%T^T(Ts[т5 ;3#V\S>Vl_%1mO2g0*َbN5{`: @|a,TŠ@R9BHFhb*ʶWŭ R Km}@P 9kV CUAXh*R/8'6jekr;Idc$L+kP\ >08UQv]UN4JθzVx7Z ^&X9i2ǻ%^VLMh ~Up &vP_Tn2Ze4YԤҦAEꅕD&_hMf ڢ5rsw>gٱ$M{%ӃMXp?HbZ e ',{P:of]}rc+\p!oSgr0~!pnHMnnw3-rwӝ&w;p nw[T'+tpp4q*QC+;Pkd endstream endobj 973 0 obj << /Type /Page /Contents 974 0 R /Resources 972 0 R /MediaBox [0 0 595.276 841.89] /Parent 1013 0 R >> endobj 953 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 403 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 16827 /Filter/FlateDecode /DecodeParms<> >> stream x{Xg7'!H8A EZj1վjvtuҫUZ^um]AEYh݊'  V9\;@"03xp;C @l&4B44B44B44B44B44B44B44B44B44B44B44B4G6BHd5 }f!oggBZBH/P_۷/**te޽nnnIIIǎc޽[*]]6olb߿ӦMyyyZk_k2>HVoذalc  ߟ2eJVVVoOoݻ7f̘={P+V'%%̃STyܘꏼ[oͧ~n4o1>.gܸqyyy&A>.N>Mko5MAAAll,]o 1 ---eԨQT믓'OӟDEo߾,ٵe˖4<]H$J/޳gZ4͜9so޼iWW7VA33 !}h-}f!kW@@@@@lcǎe.yo3 !}h-}f!,&`#qs{SYCk3 !}h-}f!,0\AC#AC#AFhN'qB{µ pB(/v#4mtxB8U= ZxQ8X!^VŁlj"#Aƪx8{pssKJJ:vUIl.+,,N‡sm$DB$DB$KB4mѦD"oooXO? ˦M>膏B~ u!履~1C<޽{ׯ??`upgg;wL⍍&AA$DB$DB${ ;;; @ill裏~Ǐ[LyKW2d-oWADB$DB$D>PV3lٲ,[S> ..]z믿T*j mѦ3BkǏsؖرmjw8n ,Q44B44B44B44B44B44B44B44B44B44B44B44B44B44B4aAAsTb*;wmؙ6=_jjj|||!ԶZ}vUUU[[Gdd!@..\.7SmAg]vy'N`h ꃍPP]Fo߻w/99_~w9wܤIۃy70aBZ@Wm.\PTG&;w)$$"RPP ɪ%ILLIҶj4ڞ0aBll,!D׋bTv~[RRy$x]SjXKrڮz۝;w*++[ZZe2СCG.Ǽ_~ԫ 46BBp'R\zGz>55UT*x.]SQ?Oj5oׯرcm_ʼn'ڏX,4iBP(III&k Y<ܸqҥKcǎU(T{…$Ry߸q~uFT*oݺuyBuGQT$,,nGBF!Ν;gn̘1&!˵ZmMMŋǍg*l4*HΜ9c櫰xw|2f_$88XPx{{{yytSsW@Pm!55U*>H" !"`08$DZ]]l6*zֻw޸q...1W=%(@mmmTϯFw##uuguB;>Z___[[<vuV7 CHHÕJ:99R1h4s>FM9z/@JeQQő&**JRiZ٭Nj8^/**jhheŃ`uwtn]RRw]r!C?NCu2cl 8N݃}> :p_NP(rB$DB$D^Kĉ"ӓiVPP ?@ =Fس{ hz^uVj7a;= T1a&KnbҨgjjjvv_|+VfΜI;ҧ_zLJ>[rǘ1cnܸAE-JCBBrrr`~~7__e˖O}Æ uuu7nLKK3 fgg?3^`w"ho_|Eƿ#Ϙ57ވ;bÜO?עEK+WvZ``kז.]jq+Fۃqg1zAaq]vQߨk|իW^M7ٗjt_~Mf Ar|(K.k Fhta^tK hh hh hh hh hh hN ޶mە+WjL&;|pnnZ6lXQQMǛd|[vԾg_س/!!!0FJ+cV\ilhh3HHI4 FFFFF`#f.9C0r9sF@@@@@@@@@@@@@@@@@@@@@@@@XnϩRwܡI.jjj|||!ԶZ}vUUU[[Gdd!@.]26BFCuABH[[}޽~ݹsܹs&MbF faGGDž T*ѣ !Νkjj jH$"djDb-$$Z.SWAR&L%zXlv٦ÇS٨ Ecc v-0F1 E```BB&NHrծF=TRP(M_t722NEBj'Vb~Ǝk^Kݻg\U!.j].c*[n?BBT*UllD" ő#F sΙ篫3fInrV[SSsqƙgoii1/Ҥ`Db\XW#˘miT*}ؑ !D,BD"`pHI$44!99y&qº \mmmTϯFw##uuguBbNgڵkfHfatt4!ѣK@@R*EEE'yGZdA(JUTTj%+g^^^Ǐ/..nhh>8c"**ݻ'O4f{a`Ҩs\\IGGE]5IAww8OOׯ{yyQ &EowS l2 .x #x'D"'AS{80p xF@8~5z#C#AC#Acdz۶mX-f̘a<т@hԨůF3 MMM%%%J{{%KLwBΜ9SRRt @]LMM/bŊީ Fh~iԘØ/B͛R .Fh0b:(׭[뙬OcNFgA#3f^/9v8sS=sGkko1)33ԇnmh4~~~UUU Bx{{PTx_ee˗P(zb=cccc(c6mSV"[3~gZt_   {'u.:0FӶo ??_w}286v4sSGUV_|=0zilT՗60~C=!p^Zb1W.qi8g֏Ş0gjuݚ5+MG "!"!"!vttL*$[6CB$DB$DB$d. SRSܹCo]$$$B˩mZ}6H???BHAA\.13PbO1teʔC^rꆆ\ =#pJruu=z7!ܹsMMM!!!]DLV]]-Hbbb\\\L򷶶TWWrZ(=a„XB^橌srrzG]f|J' 9rdEEرctw7tNNN=>f E``SO=5jԨ2:8pI&Qݮ^exh.]5NE]MmAA~{Ÿ8s '|2**ڵk&cjkkHPPPGGəߝ;w|}}===ozw1{FT*oݺuyBݫT*UllD" zj7# !#F/fՍ3$U7rVxq1) @[:򊌌"(""bt688֭ @c TT#j5! !"`08$DZ]]mo麚Z.k4Ү?4hPuu5}Rh߿T*&*m9˘4_QQVZZJjjjZq78*__[nQ'yV+j=tqqvZGGq|ԨQ7nܠkkk&LuVg0 !G_`TTR,**2>Ӳ8"DEET"V+X9:~xqqqCCsqq>>ԶɵР 4BnbҨR}Qj{ԨQUPT?\ntww~0a^vpp0KLGo C N+Tpĉƙ}}}M"ĉ"*6}#0az~COz#C#AC#AF(/oooԨH@@ѣmf<F?zԩSOYLB}8]}j}^V`0ܺuW^D- ----))INN6Μ9Nh2f1Y Q[v?2##cŊ<27 I/KIIh~ђ2gJUXXh bbbYL.:dz `s$a:(׭[`~~ =cgK'Od2rONN9t}_r̙7|Ӗׯ5k]VVjkƿ/ED"L|rÜL.r$&&޼y;}tg!>^ _z7To[Gmfggb~]W ؿ4jroW>, 4B44BImz뛛nhB̿Fӡ6v E>x !~_^.'>ZBxlP^Jڼ~%ۅaad#NdsSBҗLxժU*e+.«l%/ݏc}s_++ިV]LO>P~LRk4TJٜm:MRݿV*Zjmi5 mmm6nɞQ BUUUwvvRt*]SScBhoowԾg_ؾO祤 39ǿ}ag!#c9r m`/<0᠍>kg&Oa߿mcJm:N*;p_V}ͷm?`ĦO2/zn 9|G'LO>%b?fRoM^7w^З_e_ް=s^{>{Q,u:}3Ovuu7ƋN哥?}7!!0ǗF?p0u+]0hUƬN~Q:~.s>kp~'ɉ)]0(DI).ǾϠ1.W.oۅpOŹ2ٳg17/}J^d`+%漈[{'.;Suz/1: [{Nnnv! ݺ/yz;.ǮT p.,el9쓿D<;#lin*z33BA^j3ۅX}}c+le%$e˫=<.t:5_[q/{׵+'v!\sk 셹zIimTt,~ԸS< aǏJ͞ƥ'z@0Y,192"9p0Gȡbt#{`KaHHHLӥQC#AC#AC#AC#AC#AC#AC#AC#AC#AF(/ooo H@@ѣmf<F?zԩStBz_B۷o_TTT``c=v% ,8xՍ7fee}frt>>999tСCV?O?4;;x6N $ar̙7|Ӗׯ5k]VVjڵkw}က[R^#4=})R$d˗/Zm>xMBHnnә@x !eSS-G8!Eju:Uˣ6rssMf1YȃmG_Gyy9ݷz+`!!ZowOnk뤶zX@M7\\A!_ <8} "! O+Loo 6,|L GUcWxxH4 ig ZԴ5kV^Pou:t#k^M8h0̿#`0dMth\\\G "!2r>m4 t0uw:.PTcb}U?*3߄_ s xvi .XΪ_n}Z;.spۅpomٚS^^ s:;KV-aNd/lV x:.f'Y#$yq'/gN8ॗ6_v!`EXȆ']Hns%6 !я&'{lB8-:&,1m綍lV$檨Pv!388,. Yj^6BBTyDTs! ഩӒE5?9v!`TyvB8'1v?aw|m%.=p7~ _K_<B\YFB8g_|i;eff2ZHRBmCtnnn*Rj=WkK`pvvnkkq;6~O R(ϯڦ㕕/_Pqoo} E{{X=ZǞ}-փc؛ş?fo[o^H$V9hCFc*LoL}1hRisRN'JVuwww60b'Dlx{gxt”?/ yOY"+Kk,ELH(-ka{wSX tgJ[n<1p'K7nBBa/~`WaNۘu0u)ׯ۵pN[k+> `|.vnw{0Wo>:) v<›2nƝڰĠ9 3$D{hwv|RsdDr`'g /%٥Q3M{;ۅߤ{BJ$j[iome莻C;v!\4w[[y$S՗d`H,Z93;kVkz%l$uux+-k_.t]-J_?ELOijFHq?nyl t[]v!<6(pK/%m^B O`ΑJ}K>m_#$ Q ==9Oc KLp۹m#ۅc**?] K|fEFHpNӕ ۅ{}N h4Rjۂt:777JT*u:T*w0JPh4??˗/StۻC*//tԾg_ؾoFCRjL߿orko+ 5%Ep|FoY3 +3祿cȻbPgo>TjWWwa[>Ywx|iv<5mۅl.xhI7oJ*,,4ܹsNNN1116rbTx={XY6"N7Bd>ueddz:h|]YwT鯾Ypvɓ20\7[ރYyyy-[ٳ6N ~j>]VVjme…;_]T 6$&&ڒ z?5jK;H$rqqd˗/_hM))))qqq\le6Imii?~;ø`5wտBHnnq+e $`  n#dHyy9%wFFʧ09]ф 6vvv:;;w3ؗ/(z^,wlT_5>!"k:/|DDtkK/ʉcRIОch rT?QxgƷA&jSR׬YEzGN׿m1 <:i:h\\\G 0 Nsrr>b1m?% Imuw:.PTcb}U?Y6l79srv\<]?Ѵ]0h?Mʻw.Db;f~Vk}>YlEs翵ekN|ΟgI2uګ_}O ĢU3iZk+K[iYkv!`ӼBhQ/jnnfz"5BBGqge`7hR A^z)ilV l8}ۅpT6g[i3!!$ppOG]0(4,A}ۅXtLXbm.H;UQB8gppX\3,bt^6BBHt̄wT(.|BxldgQ͏G]X1UqwݮfIL~O617_!!Iϝ/?U2ok6ltޢGF?ك=5߶g_ظo|c׭\%&pj~C7Aƍ'f}g huE25{Fu:(-ka{>| yX tgJ[n<1p'K7nBBa/~ݎMb`Ж-8Bxlcir?(?qIB95}^xx8CO|14xXۅG2Bx? JI3B}?]T!={sSV_-ư]0|镒Ms^-=ko{a֋lV}_%u?4 ᜪ˥k~ِYUw*ʏM6BAʻu_BxJկy6ۅVՅErV +n^;YBR3xݏ:[W>O"a|jp/3%Y羼!NvV| ?Au-i]2{a.>[Z:L#e> rfOxL7o#.q: ^??L/K8u B٣8##yzQ,;: x0Ng> endobj 971 0 obj << /D [973 0 R /XYZ 89.291 764.475 null] >> endobj 976 0 obj << /D [973 0 R /XYZ 104.235 518.441 null] >> endobj 977 0 obj << /D [973 0 R /XYZ 104.235 508.977 null] >> endobj 978 0 obj << /D [973 0 R /XYZ 104.235 499.512 null] >> endobj 979 0 obj << /D [973 0 R /XYZ 104.235 490.048 null] >> endobj 980 0 obj << /D [973 0 R /XYZ 104.235 480.583 null] >> endobj 981 0 obj << /D [973 0 R /XYZ 104.235 471.119 null] >> endobj 982 0 obj << /D [973 0 R /XYZ 104.235 461.654 null] >> endobj 983 0 obj << /D [973 0 R /XYZ 104.235 452.19 null] >> endobj 984 0 obj << /D [973 0 R /XYZ 104.235 442.725 null] >> endobj 985 0 obj << /D [973 0 R /XYZ 104.235 433.261 null] >> endobj 986 0 obj << /D [973 0 R /XYZ 104.235 423.796 null] >> endobj 987 0 obj << /D [973 0 R /XYZ 104.235 414.332 null] >> endobj 988 0 obj << /D [973 0 R /XYZ 104.235 404.867 null] >> endobj 989 0 obj << /D [973 0 R /XYZ 104.235 395.403 null] >> endobj 990 0 obj << /D [973 0 R /XYZ 104.235 385.938 null] >> endobj 991 0 obj << /D [973 0 R /XYZ 104.235 376.474 null] >> endobj 992 0 obj << /D [973 0 R /XYZ 104.235 367.009 null] >> endobj 993 0 obj << /D [973 0 R /XYZ 104.235 357.545 null] >> endobj 994 0 obj << /D [973 0 R /XYZ 104.235 348.08 null] >> endobj 995 0 obj << /D [973 0 R /XYZ 104.235 338.616 null] >> endobj 996 0 obj << /D [973 0 R /XYZ 104.235 329.151 null] >> endobj 997 0 obj << /D [973 0 R /XYZ 104.235 319.687 null] >> endobj 998 0 obj << /D [973 0 R /XYZ 104.235 310.222 null] >> endobj 999 0 obj << /D [973 0 R /XYZ 104.235 300.758 null] >> endobj 1000 0 obj << /D [973 0 R /XYZ 104.235 291.293 null] >> endobj 1001 0 obj << /D [973 0 R /XYZ 104.235 281.829 null] >> endobj 1002 0 obj << /D [973 0 R /XYZ 104.235 272.364 null] >> endobj 1003 0 obj << /D [973 0 R /XYZ 104.235 262.9 null] >> endobj 1004 0 obj << /D [973 0 R /XYZ 104.235 253.435 null] >> endobj 1005 0 obj << /D [973 0 R /XYZ 104.235 243.971 null] >> endobj 1006 0 obj << /D [973 0 R /XYZ 104.235 234.506 null] >> endobj 1007 0 obj << /D [973 0 R /XYZ 104.235 225.042 null] >> endobj 1008 0 obj << /D [973 0 R /XYZ 104.235 215.578 null] >> endobj 1009 0 obj << /D [973 0 R /XYZ 104.235 206.113 null] >> endobj 1010 0 obj << /D [973 0 R /XYZ 104.235 196.649 null] >> endobj 1011 0 obj << /D [973 0 R /XYZ 104.235 187.184 null] >> endobj 1012 0 obj << /D [973 0 R /XYZ 104.235 177.72 null] >> endobj 972 0 obj << /Font << /F40 549 0 R /F60 805 0 R /F57 761 0 R >> /XObject << /Im12 953 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1016 0 obj << /Length 3952 /Filter /FlateDecode >> stream xko# @ 9y|?Ц =(p %BdN3ZJYzErggtpg t2B)bpyՏt0P"Ǯr0|0Q3I8cj`-N&M䃋Pړ/}Fy3o(&Z86< woX;P7Z |xC,^)I81\!%ʇ|zXo(G~;CL!J0KQS쟟iڕ;; ~dpʛ~2pYpsK-desti{Ƨ_w&qA$j^Jj>\#\$F8E8G8N~9sa_e  xgpppGS] O70E_$>*,EIne"|[@fԍ%qWsNNڋ5mx^w;REQj(ܤX+#7| / 9PJ õʵa1 \޸9\.;|x[1AKE,Va]8d;\b{Uu i&o;sl_b~<{1OB͏cGwM`0>G=c @SW^;]% dר._Fb{@?x13RKDDD%",gxe_eθqDm'2Khj)kJm aLWIk)ZGRQ^e pā60{hC)F:~YCebXuQcjcV+(vpX!߅_L%~%̚*:t=t1ox/eJQK3P"1uX) ٧0d} C) ٧0d"F4Lww)(٧Le( R~A-UYk?p[SMZG?[:+RyVPc2>%X GԪc)<%'Z4׿Y_,J,JA_;uGCEr60&>;l9IBBxp׾S@BydFӽbu"r`FÊ .I~ 8%VWEQ14Ɓ4{tmlHSY$E'gDUE3 8]*Fr-iۊR=;눸8J'mWo ^'qw!Q!hڸU`O UC oN?\nlȢY;Vn+ WUNn1<#,fsI/p@ 4wY18Rڄm3WYscp^hErQKpk6uvsڱ;Ay჉{cPغbyn(K'66Ţ=;݉&vY.Ⱦx>3tyB)j͹ .Z$/jTLLiS9m]ro.T9(3M˥;694(KvNƤêNVko|Yyp* u[(6::EI#}GS;$L'wrIQ0 kܧ腅MRfHO;_,~bsEq8d Z\ Ҥ}/^t"Vl?LIOam r1}Z>_nQހ]eܸ2c4|@d >9 tKoTquݍ! v8ە l[)iM'"Üǘy&sx D3(3RЙ)7l|)(ЀȾ)>ЎC,j ?ScGq}<JЪpq1m3> endobj 1017 0 obj << /D [1015 0 R /XYZ 88.291 795.961 null] >> endobj 1018 0 obj << /D [1015 0 R /XYZ 104.235 756.206 null] >> endobj 1019 0 obj << /D [1015 0 R /XYZ 104.235 746.742 null] >> endobj 1020 0 obj << /D [1015 0 R /XYZ 104.235 737.277 null] >> endobj 1021 0 obj << /D [1015 0 R /XYZ 104.235 727.813 null] >> endobj 1022 0 obj << /D [1015 0 R /XYZ 104.235 718.349 null] >> endobj 1023 0 obj << /D [1015 0 R /XYZ 104.235 708.884 null] >> endobj 1024 0 obj << /D [1015 0 R /XYZ 104.235 699.42 null] >> endobj 1025 0 obj << /D [1015 0 R /XYZ 104.235 689.955 null] >> endobj 1026 0 obj << /D [1015 0 R /XYZ 104.235 680.491 null] >> endobj 1027 0 obj << /D [1015 0 R /XYZ 104.235 671.026 null] >> endobj 1028 0 obj << /D [1015 0 R /XYZ 104.235 661.562 null] >> endobj 1029 0 obj << /D [1015 0 R /XYZ 104.235 652.097 null] >> endobj 1030 0 obj << /D [1015 0 R /XYZ 104.235 642.633 null] >> endobj 1031 0 obj << /D [1015 0 R /XYZ 104.235 633.168 null] >> endobj 1032 0 obj << /D [1015 0 R /XYZ 104.235 623.704 null] >> endobj 1033 0 obj << /D [1015 0 R /XYZ 104.235 614.239 null] >> endobj 1034 0 obj << /D [1015 0 R /XYZ 104.235 604.775 null] >> endobj 1035 0 obj << /D [1015 0 R /XYZ 104.235 595.31 null] >> endobj 1036 0 obj << /D [1015 0 R /XYZ 104.235 585.846 null] >> endobj 1037 0 obj << /D [1015 0 R /XYZ 104.235 576.381 null] >> endobj 1038 0 obj << /D [1015 0 R /XYZ 104.235 566.917 null] >> endobj 1039 0 obj << /D [1015 0 R /XYZ 104.235 557.452 null] >> endobj 1040 0 obj << /D [1015 0 R /XYZ 104.235 547.988 null] >> endobj 1041 0 obj << /D [1015 0 R /XYZ 104.235 538.523 null] >> endobj 1042 0 obj << /D [1015 0 R /XYZ 104.235 529.059 null] >> endobj 1043 0 obj << /D [1015 0 R /XYZ 104.235 519.594 null] >> endobj 1044 0 obj << /D [1015 0 R /XYZ 104.235 510.13 null] >> endobj 1045 0 obj << /D [1015 0 R /XYZ 104.235 500.665 null] >> endobj 1046 0 obj << /D [1015 0 R /XYZ 104.235 491.201 null] >> endobj 1047 0 obj << /D [1015 0 R /XYZ 104.235 481.736 null] >> endobj 1048 0 obj << /D [1015 0 R /XYZ 104.235 472.272 null] >> endobj 1049 0 obj << /D [1015 0 R /XYZ 104.235 462.807 null] >> endobj 1050 0 obj << /D [1015 0 R /XYZ 104.235 453.343 null] >> endobj 1051 0 obj << /D [1015 0 R /XYZ 104.235 443.878 null] >> endobj 1052 0 obj << /D [1015 0 R /XYZ 104.235 434.414 null] >> endobj 1053 0 obj << /D [1015 0 R /XYZ 104.235 424.949 null] >> endobj 1054 0 obj << /D [1015 0 R /XYZ 104.235 415.485 null] >> endobj 1055 0 obj << /D [1015 0 R /XYZ 104.235 406.02 null] >> endobj 1056 0 obj << /D [1015 0 R /XYZ 104.235 396.556 null] >> endobj 1057 0 obj << /D [1015 0 R /XYZ 104.235 387.091 null] >> endobj 1058 0 obj << /D [1015 0 R /XYZ 104.235 377.627 null] >> endobj 1059 0 obj << /D [1015 0 R /XYZ 104.235 368.162 null] >> endobj 1060 0 obj << /D [1015 0 R /XYZ 104.235 358.698 null] >> endobj 1061 0 obj << /D [1015 0 R /XYZ 104.235 349.233 null] >> endobj 1062 0 obj << /D [1015 0 R /XYZ 104.235 339.769 null] >> endobj 1063 0 obj << /D [1015 0 R /XYZ 104.235 330.304 null] >> endobj 1064 0 obj << /D [1015 0 R /XYZ 104.235 320.84 null] >> endobj 1065 0 obj << /D [1015 0 R /XYZ 104.235 311.375 null] >> endobj 1066 0 obj << /D [1015 0 R /XYZ 89.291 256.227 null] >> endobj 1067 0 obj << /D [1015 0 R /XYZ 89.291 220.726 null] >> endobj 1068 0 obj << /D [1015 0 R /XYZ 104.235 221.606 null] >> endobj 1069 0 obj << /D [1015 0 R /XYZ 104.235 212.142 null] >> endobj 1070 0 obj << /D [1015 0 R /XYZ 104.235 193.213 null] >> endobj 1071 0 obj << /D [1015 0 R /XYZ 104.235 183.748 null] >> endobj 1072 0 obj << /D [1015 0 R /XYZ 104.235 174.284 null] >> endobj 1014 0 obj << /Font << /F40 549 0 R /F57 761 0 R /F60 805 0 R /F21 548 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1075 0 obj << /Length 3271 /Filter /FlateDecode >> stream x\o_ Tj.pE}Iñ$[8Yq[pȥήVCHj 93 `[r>{#4 !j>?yBґ"=:#J@23:ތ󟞽tdeD2 pc~zx)SS 1<=3n:=t| mkaXt'Ut|˥.r 0X&4lŸ ֊f3gt?`{)/= l{X>"7Sn0|v}@*ʕBSY" tq=I&%$řS~о s,ũ\ԓ hA.>H.VU*\ Y$h4+-$KFo_dw2$B&C54QUzfA7IƺԞ&`#ɂY`*f8Lyp4-095CcV{H@,@0[Z{}xgfMHPΫFQ Oi͈ͲRH;JǠ|ydD$yg g J1岏ހ„OﰼrR cRAcf89a|mnJY M u4d s졜cwSx<~#UQ@FQL!Ѧbi&WU#(7IB :#[x:\+~X} S0YڛI{@^;8^gBsjb_Kԍƥq TeO9-۶cYZ4 0S$2w ݆ȍk*t$u+ ($UǬ!VuWsOn]UMbFUY /Cgqoܧi/tƿ qL˴&TW\gc;8aVRssҽ endstream endobj 1074 0 obj << /Type /Page /Contents 1075 0 R /Resources 1073 0 R /MediaBox [0 0 595.276 841.89] /Parent 1013 0 R >> endobj 1076 0 obj << /D [1074 0 R /XYZ 88.291 795.961 null] >> endobj 1077 0 obj << /D [1074 0 R /XYZ 104.235 756.206 null] >> endobj 1078 0 obj << /D [1074 0 R /XYZ 104.235 746.742 null] >> endobj 1079 0 obj << /D [1074 0 R /XYZ 104.235 737.277 null] >> endobj 1080 0 obj << /D [1074 0 R /XYZ 104.235 727.813 null] >> endobj 1081 0 obj << /D [1074 0 R /XYZ 104.235 718.349 null] >> endobj 1082 0 obj << /D [1074 0 R /XYZ 104.235 708.884 null] >> endobj 1083 0 obj << /D [1074 0 R /XYZ 104.235 699.42 null] >> endobj 1084 0 obj << /D [1074 0 R /XYZ 104.235 689.955 null] >> endobj 1085 0 obj << /D [1074 0 R /XYZ 104.235 680.491 null] >> endobj 1086 0 obj << /D [1074 0 R /XYZ 104.235 671.026 null] >> endobj 1087 0 obj << /D [1074 0 R /XYZ 104.235 661.562 null] >> endobj 1088 0 obj << /D [1074 0 R /XYZ 104.235 652.097 null] >> endobj 1089 0 obj << /D [1074 0 R /XYZ 104.235 642.633 null] >> endobj 1090 0 obj << /D [1074 0 R /XYZ 104.235 633.168 null] >> endobj 1091 0 obj << /D [1074 0 R /XYZ 104.235 623.704 null] >> endobj 1092 0 obj << /D [1074 0 R /XYZ 104.235 614.239 null] >> endobj 1093 0 obj << /D [1074 0 R /XYZ 104.235 604.775 null] >> endobj 1094 0 obj << /D [1074 0 R /XYZ 104.235 595.31 null] >> endobj 1095 0 obj << /D [1074 0 R /XYZ 104.235 585.846 null] >> endobj 1096 0 obj << /D [1074 0 R /XYZ 104.235 576.381 null] >> endobj 1097 0 obj << /D [1074 0 R /XYZ 104.235 566.917 null] >> endobj 1098 0 obj << /D [1074 0 R /XYZ 104.235 557.452 null] >> endobj 1099 0 obj << /D [1074 0 R /XYZ 104.235 547.988 null] >> endobj 1100 0 obj << /D [1074 0 R /XYZ 104.235 538.523 null] >> endobj 1101 0 obj << /D [1074 0 R /XYZ 104.235 529.059 null] >> endobj 1102 0 obj << /D [1074 0 R /XYZ 104.235 519.594 null] >> endobj 1103 0 obj << /D [1074 0 R /XYZ 104.235 510.13 null] >> endobj 1104 0 obj << /D [1074 0 R /XYZ 104.235 500.665 null] >> endobj 1105 0 obj << /D [1074 0 R /XYZ 104.235 491.201 null] >> endobj 1106 0 obj << /D [1074 0 R /XYZ 104.235 481.736 null] >> endobj 1107 0 obj << /D [1074 0 R /XYZ 104.235 472.272 null] >> endobj 1108 0 obj << /D [1074 0 R /XYZ 104.235 462.807 null] >> endobj 1109 0 obj << /D [1074 0 R /XYZ 104.235 453.343 null] >> endobj 1110 0 obj << /D [1074 0 R /XYZ 104.235 443.878 null] >> endobj 1111 0 obj << /D [1074 0 R /XYZ 104.235 434.414 null] >> endobj 1112 0 obj << /D [1074 0 R /XYZ 89.291 377.144 null] >> endobj 1113 0 obj << /D [1074 0 R /XYZ 89.291 357.314 null] >> endobj 1114 0 obj << /D [1074 0 R /XYZ 104.235 358.194 null] >> endobj 1115 0 obj << /D [1074 0 R /XYZ 104.235 348.729 null] >> endobj 1116 0 obj << /D [1074 0 R /XYZ 104.235 339.265 null] >> endobj 1117 0 obj << /D [1074 0 R /XYZ 104.235 329.8 null] >> endobj 1118 0 obj << /D [1074 0 R /XYZ 104.235 320.336 null] >> endobj 1119 0 obj << /D [1074 0 R /XYZ 104.235 310.872 null] >> endobj 1120 0 obj << /D [1074 0 R /XYZ 104.235 301.407 null] >> endobj 1121 0 obj << /D [1074 0 R /XYZ 104.235 291.943 null] >> endobj 1122 0 obj << /D [1074 0 R /XYZ 104.235 282.478 null] >> endobj 1123 0 obj << /D [1074 0 R /XYZ 104.235 273.014 null] >> endobj 1124 0 obj << /D [1074 0 R /XYZ 104.235 263.549 null] >> endobj 1125 0 obj << /D [1074 0 R /XYZ 104.235 254.085 null] >> endobj 1126 0 obj << /D [1074 0 R /XYZ 104.235 244.62 null] >> endobj 1127 0 obj << /D [1074 0 R /XYZ 104.235 235.156 null] >> endobj 1128 0 obj << /D [1074 0 R /XYZ 104.235 225.691 null] >> endobj 1129 0 obj << /D [1074 0 R /XYZ 104.235 216.227 null] >> endobj 1130 0 obj << /D [1074 0 R /XYZ 104.235 206.762 null] >> endobj 1131 0 obj << /D [1074 0 R /XYZ 104.235 197.298 null] >> endobj 1132 0 obj << /D [1074 0 R /XYZ 104.235 187.833 null] >> endobj 1133 0 obj << /D [1074 0 R /XYZ 104.235 178.369 null] >> endobj 1073 0 obj << /Font << /F40 549 0 R /F60 805 0 R /F57 761 0 R /F21 548 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1136 0 obj << /Length 3413 /Filter /FlateDecode >> stream x]s7=B{Y ?2ӗH^w=jɲ&d[r ](&6. lDG/Xd|5C$RتZ C1qrOINro97[(vlaw8ƻgXc}pproH(`1J-_lR'O3A!`7E0KQdXE $A@h޼6=Ii J}ŤbsWX?KO>9O!7y|9%Ivsa^( > 9B x6FD/mǩVEuAѺ"JU%`ǣHThZJ1 v,YhM2DýD8Tc"b#ۑLTbdUЊe!*Y+E/lT6ӣQu.2b, RuR IZTT;~¡GlQ[TEmiQ)so,AQś {/8LjcVǣhЖ0k(E/Z:c*L->C.G)Pu(YҦ(Рjr:SHSf2 8W'Ǽ9:+tï~oJps/9ˎũ{+K UӬE4ӌ(A5y&]}?On?f['4z2+"غJϣuY=Ek} ,|Xxr"ɷc؟9,VEӌ/;V%jµ:بPZ,G^iB8b\UEzN%J/Hu(!#)T2OpQh <ݹa#TK;^"^MA ݳ͢D6gwe@8fFJ*F)t;a>XxTJ@v=H[)HF+P9PYnc}2_on翜pm%ofpx V0x:Z8Uibc0[S0r8̨5-e'\mxz #l/mؖu`lMXuip V(e1~n3GhbvbӓS%o|Aßa'YhH{^L1/1/{EGDN(QMŨ@ȉH\1~<ʎB|{W:PP+ }KM%RpmSvB;;MyȻ'8ejqW0׃L֨ݗ6QrZ:JDpZXCjqHe_yZ֭ʹZˈU<Ԧu^8nná=5(y EJW7\Tfc.C-q*[B5TgD7nFI3F)ǁu%ڜ3X:AX2G]!s~&mvk9ev'tI`}Gw1\qbSuizAc."񘰙h'_pioC;Xc,&QQImX`]{e&i u1Lm>DMX2r OÅum9˳&!P4 E-Ҝx7؍"|9LP*ߧE?oah)25?nj;!wa c'%}Qg8^"Q$@t1^aGs/-<),J\W[(*EVNڞ9vQuXt?҇tvV)LkBuoZ?>؇pCHΟOz2˖M ]fÒ4k#b:‡gaN'|wOAOoN3 endstream endobj 1135 0 obj << /Type /Page /Contents 1136 0 R /Resources 1134 0 R /MediaBox [0 0 595.276 841.89] /Parent 1013 0 R >> endobj 1137 0 obj << /D [1135 0 R /XYZ 88.291 795.961 null] >> endobj 1138 0 obj << /D [1135 0 R /XYZ 104.235 756.206 null] >> endobj 1139 0 obj << /D [1135 0 R /XYZ 104.235 746.742 null] >> endobj 1140 0 obj << /D [1135 0 R /XYZ 104.235 737.277 null] >> endobj 1141 0 obj << /D [1135 0 R /XYZ 104.235 727.813 null] >> endobj 1142 0 obj << /D [1135 0 R /XYZ 104.235 718.349 null] >> endobj 1143 0 obj << /D [1135 0 R /XYZ 104.235 708.884 null] >> endobj 1144 0 obj << /D [1135 0 R /XYZ 104.235 699.42 null] >> endobj 1145 0 obj << /D [1135 0 R /XYZ 104.235 689.955 null] >> endobj 1146 0 obj << /D [1135 0 R /XYZ 104.235 680.491 null] >> endobj 1147 0 obj << /D [1135 0 R /XYZ 104.235 671.026 null] >> endobj 1148 0 obj << /D [1135 0 R /XYZ 104.235 661.562 null] >> endobj 1149 0 obj << /D [1135 0 R /XYZ 104.235 652.097 null] >> endobj 1150 0 obj << /D [1135 0 R /XYZ 104.235 642.633 null] >> endobj 1151 0 obj << /D [1135 0 R /XYZ 104.235 633.168 null] >> endobj 1152 0 obj << /D [1135 0 R /XYZ 104.235 623.704 null] >> endobj 1153 0 obj << /D [1135 0 R /XYZ 104.235 614.239 null] >> endobj 1154 0 obj << /D [1135 0 R /XYZ 89.291 556.969 null] >> endobj 1155 0 obj << /D [1135 0 R /XYZ 89.291 537.139 null] >> endobj 1156 0 obj << /D [1135 0 R /XYZ 104.235 538.019 null] >> endobj 1157 0 obj << /D [1135 0 R /XYZ 104.235 528.555 null] >> endobj 1158 0 obj << /D [1135 0 R /XYZ 104.235 519.09 null] >> endobj 1159 0 obj << /D [1135 0 R /XYZ 104.235 509.626 null] >> endobj 1160 0 obj << /D [1135 0 R /XYZ 104.235 500.161 null] >> endobj 1161 0 obj << /D [1135 0 R /XYZ 104.235 490.697 null] >> endobj 1162 0 obj << /D [1135 0 R /XYZ 104.235 481.232 null] >> endobj 1163 0 obj << /D [1135 0 R /XYZ 104.235 471.768 null] >> endobj 1164 0 obj << /D [1135 0 R /XYZ 104.235 462.303 null] >> endobj 1165 0 obj << /D [1135 0 R /XYZ 104.235 452.839 null] >> endobj 1166 0 obj << /D [1135 0 R /XYZ 104.235 443.374 null] >> endobj 1167 0 obj << /D [1135 0 R /XYZ 104.235 433.91 null] >> endobj 1168 0 obj << /D [1135 0 R /XYZ 104.235 424.445 null] >> endobj 1169 0 obj << /D [1135 0 R /XYZ 104.235 414.981 null] >> endobj 1170 0 obj << /D [1135 0 R /XYZ 104.235 405.516 null] >> endobj 1171 0 obj << /D [1135 0 R /XYZ 104.235 396.052 null] >> endobj 1172 0 obj << /D [1135 0 R /XYZ 104.235 386.587 null] >> endobj 1173 0 obj << /D [1135 0 R /XYZ 104.235 377.123 null] >> endobj 1174 0 obj << /D [1135 0 R /XYZ 104.235 367.658 null] >> endobj 1175 0 obj << /D [1135 0 R /XYZ 104.235 358.194 null] >> endobj 1176 0 obj << /D [1135 0 R /XYZ 104.235 348.729 null] >> endobj 1177 0 obj << /D [1135 0 R /XYZ 104.235 339.265 null] >> endobj 1178 0 obj << /D [1135 0 R /XYZ 104.235 329.8 null] >> endobj 1179 0 obj << /D [1135 0 R /XYZ 104.235 320.336 null] >> endobj 1180 0 obj << /D [1135 0 R /XYZ 104.235 310.872 null] >> endobj 1181 0 obj << /D [1135 0 R /XYZ 104.235 301.407 null] >> endobj 1182 0 obj << /D [1135 0 R /XYZ 104.235 291.943 null] >> endobj 1183 0 obj << /D [1135 0 R /XYZ 104.235 282.478 null] >> endobj 1184 0 obj << /D [1135 0 R /XYZ 104.235 273.014 null] >> endobj 1185 0 obj << /D [1135 0 R /XYZ 104.235 263.549 null] >> endobj 1186 0 obj << /D [1135 0 R /XYZ 104.235 254.085 null] >> endobj 1187 0 obj << /D [1135 0 R /XYZ 104.235 244.62 null] >> endobj 1188 0 obj << /D [1135 0 R /XYZ 104.235 235.156 null] >> endobj 1189 0 obj << /D [1135 0 R /XYZ 104.235 225.691 null] >> endobj 1190 0 obj << /D [1135 0 R /XYZ 104.235 216.227 null] >> endobj 1191 0 obj << /D [1135 0 R /XYZ 104.235 206.762 null] >> endobj 1192 0 obj << /D [1135 0 R /XYZ 104.235 197.298 null] >> endobj 1193 0 obj << /D [1135 0 R /XYZ 104.235 187.833 null] >> endobj 1194 0 obj << /D [1135 0 R /XYZ 104.235 178.369 null] >> endobj 1134 0 obj << /Font << /F40 549 0 R /F57 761 0 R /F60 805 0 R /F21 548 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1199 0 obj << /Length 3025 /Filter /FlateDecode >> stream x\[o~ϯ9i/]C]/[qчtah%Y"k]b=<3I3S 0@rH㹑2|+,# v`aҪէWio.y-e_P5}y?_|XnBYXkYPrp5|^g\>L_~~!|".'|9z:|x>.f:rYlFy\S|sKL@bCbj,\\0q>h[?xw0bVvG}HF0(Z(nXp=%Bpt-h-i>W}v!q^gA WN1aI5-IzHFX^ՋMIT\JkmI4kƭO`A JB(0! |\pM!vaDkus|XCUKXF i&vrX BƇ1Zb ̀:tm ZMmZtV_{F%06E[2 ] 5caBh',neWʣ8ɼ2@ӝD5 DRh.NR$ܺcRqv@x!#r 75(!d Z$QhʹFіD3{cҗ _B.0|8;뼏:,w0\+p IPHE{xBE )tdT/t'QBfD/5fJϔIm^Y%VF^czSZ#;%/JyD]0Qy푄%"kHh&9;_ruqr5xCDKL )@Cn"f<;7pc~;m姿x@=mƠuMs;|Ql|~Gx@,4iEq&! G!fbLτ1X1_,MŚ*n=@ޯv^-ӫwYUqW6jtjuB [N N3ʺxSPdL)1fÞ-hdf#c 3?XnIW)1b}ye$=l&F*Zj`|y͔H˙41`mڎl7=t!bdH6d*xEK23^d'8.zdV#-􋏴&R'.xy$kyaOx.$F*JҡY,"\tP(OkT6M^!z H2xTnxW{T.XHD->egpM|w(,p_5f[nmFWCOLGYy~3̉J0fo1]e'Y1h{qA4gY)uy{e_ gxY7g1,VjeZFk02)Y#Δ3ρi{Hm)4OJm긥7%WB{t-48LP`ŚU֊~w`ٔc_5 Ǚֆ6\0ʑLb<~R;~JUݍƸ %1uϺA6ϼMvSw/B,1P`ɿi u8u݅]l& -6or !VvzWgzCg$ퟲpUt8\ўL[LY`yD9]k*0}d,5 YEAvER&A&+k@ r,<=HTR_5f"$e[\Rt &3Z,n;˫Js~K)3a5wQy2t/5^,9UoV拘"kaט0]e).SC ꇕ$"bBQpр3&xm1J2)ʮqU>u~fJ]øM@L]o+İy|WޛI C DܝQц$Q8߷&ь+ɿ/V>Pt]k#}'1]֜ x TMvjJTf^r:?mORh_PljwJ.YўMge7_.' D^m{ (욲,f+۔˖^ޒ.*ш/^N1<(^j FņdRؒ(h5 *;6q|WʿS_퇽.{/*UP- *Heckp4)(181-J}%p[8'd Y& xh˄cvTs6MU-)+I]Dl] 햲yvxF=]i;QtB/++$ߑ귥_>w {NYD>Pa e@J` p9;01 ӡW5f*˔ mOtiŧFxϾ( Lg aK($d=$J9IM'J^4':RW"I44Х ӯDvi/vۖD3`c=j3Ƕ$x:tIM~~3F"fU`R(Rg&ѸUťboG\Sl 0ҹMv>J^aWy'MH[]fSflO'hO?l^Aw H z)gɣJ߄fʧFUz<^:$PdI5=CɄW!aj", endstream endobj 1198 0 obj << /Type /Page /Contents 1199 0 R /Resources 1197 0 R /MediaBox [0 0 595.276 841.89] /Parent 1013 0 R /Annots [ 1195 0 R ] >> endobj 1196 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 149 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 5695 /Filter/FlateDecode /DecodeParms<> >> stream x}p6il^*i/@R Jy| j*:͛nݺS𩧞zڦNvZ 2=6-??̙3<755dfҥ9`f^6hK?=ҥK{0HO:J$e~]vQ̞=:tKqJJOO7 <+W( tǏS8|F;v, w9w\Jc&4L[nu:۶m|2 ø|)SVX1gΜ+h4ytj40 XVVkZZZ;&X| J8o޼۷eN'S/ȵk/^\QQAaHFo 63„ܹsׯ_7nt86l(//0aCCCQQFyg)L(`Bs8aVVŋpBVVV~>즛n3!0:nɒ%±% nOK6MNI Fqǎ0dvv5͂ Μ9CaBa裏 #T%t&ӫ+++IummmJl6dq8(agg'm lr7Oœ2m?.ͯj:u*˲cǎ=}4 y/--OGJxرҔ҆ 2 #Hxz|;maaǎ)$4Hh0F#C¨IED D D D DM;Ht^ a0vH;$]\Oգ cC5x!F"F0RgGRHH4aFt3gh#)@B$DB$DE% :w1bZ.++`$JK*f{ݷohgϞ}i# A۱6&Ąb2U(Lv0QTa*D}$--M*N4iٽ>dÆ Ց_|א#Gp(k֬9yz-zN3pftV{-bBL 1a2M8xGBu<_ZLDqjh4._<+++bBF-bBL( # t%K]6b"'۫KKK#@XpakkkGGGMMرc#`DG䬫^뮻o~⦨pu]۶m5B;?oQ54B54B54B54B54B54B54B54B54B54B54B54B54B54B54B. aXo;rH'%g#<;ǏWUU1 uԩ6Z]\\0L]]ݰaZZZryQQh*fsJJJ^^^'nLHX-..$Ϫ*aR9zhtNɓN3'''Np\ɽ^o}}=S\\,HvmϟJ%%%Ƀ(#h4}ݤgC ?~d:}0|eeeaaaccc`=c2~nO0VUUM6-??<4*R L+<]ccczzzPABUVV%FM|-ѣry^^ޏ?H[[[[ZZr`:t\.nܸz<ÇJٳhF-rxȩNT*eF"<Xɲ,0BBO:5jԨcY#o,9ьf, 3gx^uĉ0']]].ܹsp'9p0(˝Ng$Gx:Ο?SrR<##CIH+ڵk|2 9aG<8IC=j0)((8~C_no/!Lri Vcf$fDZ.))!&䥥Z… : r!)0OPO@a]]D"jpj9rI^\\,/qoAR] &x e~%ܘ⑀'qpm4zVh4j ىΚ{7o8^*kAA#w>W.WD[ #,Je8r8~qјRLXHd2LT*Jɂ\.J<>#K}Lvm6gWWWHnp'I T*%O*xOII! G~u=8q+`F̍kּ8{tdϞM3fT! A#jBBl6T*znr|>MV]1A>k4/ZB,JRϴm2p8d2Y& ^8RI>"55Uxd2NS(*ҶOK̞b`}655wss#̙Or,Tpf]$ rɟ,˦^½76L.T*eZ-|'N^[Br y}>>W*J$j^" 8NP`J,ZW=.s漰r_xcRLt>qpщ =,9,K. 퍹_?{C@DQv:v[V()nVT*UOG,''|Β`#EdOzeqp8ȱfn<»?>.eY;NcYPx8% Lo'2L8lK*tn`+r<55tPr$Z~Zs3gO%#B̬ݱc9~ 3W":.ˢE!joo~{`ed{[E?ᙚDgI$4B;t?yR|vf d/磢`jɛ,8?E K!3`/N4c37tΒ0hFC~?˲V, 5}XOzU_oҤ ˕UVVrv`0LfERegg_pܹs'-- sΝ={,MMM^,nh4U}h{h5~РA?SssBͽvlNOO/**"o:thYY9a4v"$a /^s$m{>${\W1~3Ch{-4iڪUtGcǪ_~!#(L 1a$Gsyg]~pa=v\g-ڵ5Ibiݱ/,A"__9 n?Znbpj*?Tm@]b C It*w8.P,hׂhFx4(:zH:m&Ą0!>p]{:u _ìZm=&Ąb$(!!!!!!!x?YDt}t8^*_`@LV+> I̚Eo_3pŊS /Mt !ZN}$A:85 fWwpDOd2@#$˥DJB2;rK\pҥ.^l6 fnL&,NVWb8ξc}hX,kGG^O'@\B2۴?W_2 c0 2OKK#wI=0}U!^1#####]NB2+)))//ݽ{c!-[ʏ?~}ܩDJB۳͛_q4B#Dzo[?hF0f\,nXb!t O|M> >> endobj 1200 0 obj << /D [1198 0 R /XYZ 88.291 795.961 null] >> endobj 1201 0 obj << /D [1198 0 R /XYZ 89.291 764.475 null] >> endobj 1202 0 obj << /D [1198 0 R /XYZ 104.235 641.926 null] >> endobj 1203 0 obj << /D [1198 0 R /XYZ 104.235 632.461 null] >> endobj 1204 0 obj << /D [1198 0 R /XYZ 104.235 622.997 null] >> endobj 1205 0 obj << /D [1198 0 R /XYZ 104.235 613.532 null] >> endobj 1206 0 obj << /D [1198 0 R /XYZ 104.235 604.068 null] >> endobj 1207 0 obj << /D [1198 0 R /XYZ 104.235 594.603 null] >> endobj 1208 0 obj << /D [1198 0 R /XYZ 104.235 585.139 null] >> endobj 1209 0 obj << /D [1198 0 R /XYZ 104.235 575.674 null] >> endobj 1210 0 obj << /D [1198 0 R /XYZ 104.235 566.21 null] >> endobj 1211 0 obj << /D [1198 0 R /XYZ 104.235 556.745 null] >> endobj 1212 0 obj << /D [1198 0 R /XYZ 104.235 547.281 null] >> endobj 1213 0 obj << /D [1198 0 R /XYZ 104.235 537.816 null] >> endobj 66 0 obj << /D [1198 0 R /XYZ 89.291 500.193 null] >> endobj 1214 0 obj << /D [1198 0 R /XYZ 89.291 418.303 null] >> endobj 1215 0 obj << /D [1198 0 R /XYZ 89.291 396.352 null] >> endobj 1216 0 obj << /D [1198 0 R /XYZ 104.235 397.232 null] >> endobj 1217 0 obj << /D [1198 0 R /XYZ 104.235 387.768 null] >> endobj 1218 0 obj << /D [1198 0 R /XYZ 104.235 378.303 null] >> endobj 1219 0 obj << /D [1198 0 R /XYZ 104.235 368.839 null] >> endobj 1220 0 obj << /D [1198 0 R /XYZ 104.235 359.374 null] >> endobj 1221 0 obj << /D [1198 0 R /XYZ 104.235 349.91 null] >> endobj 1222 0 obj << /D [1198 0 R /XYZ 104.235 340.445 null] >> endobj 1223 0 obj << /D [1198 0 R /XYZ 104.235 330.981 null] >> endobj 1224 0 obj << /D [1198 0 R /XYZ 104.235 321.516 null] >> endobj 1225 0 obj << /D [1198 0 R /XYZ 104.235 312.052 null] >> endobj 1226 0 obj << /D [1198 0 R /XYZ 104.235 302.587 null] >> endobj 1227 0 obj << /D [1198 0 R /XYZ 104.235 293.123 null] >> endobj 1228 0 obj << /D [1198 0 R /XYZ 104.235 283.658 null] >> endobj 1229 0 obj << /D [1198 0 R /XYZ 104.235 274.194 null] >> endobj 1230 0 obj << /D [1198 0 R /XYZ 104.235 264.729 null] >> endobj 1231 0 obj << /D [1198 0 R /XYZ 104.235 255.265 null] >> endobj 1232 0 obj << /D [1198 0 R /XYZ 104.235 245.8 null] >> endobj 1233 0 obj << /D [1198 0 R /XYZ 104.235 236.336 null] >> endobj 1234 0 obj << /D [1198 0 R /XYZ 104.235 226.871 null] >> endobj 1235 0 obj << /D [1198 0 R /XYZ 104.235 217.407 null] >> endobj 1236 0 obj << /D [1198 0 R /XYZ 104.235 207.942 null] >> endobj 1237 0 obj << /D [1198 0 R /XYZ 104.235 198.478 null] >> endobj 1238 0 obj << /D [1198 0 R /XYZ 104.235 189.013 null] >> endobj 1239 0 obj << /D [1198 0 R /XYZ 104.235 179.549 null] >> endobj 1197 0 obj << /Font << /F40 549 0 R /F57 761 0 R /F21 548 0 R /F47 592 0 R /F60 805 0 R >> /XObject << /Im13 1196 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1242 0 obj << /Length 3871 /Filter /FlateDecode >> stream xko7{~Z %83|?PCMAp,[*˩l5#q$.`rp^!Fx oO&s5R!O>~3ztC/A\bÓe 6(ZOH F I"x:iL_p3&HJeGO?z^t1>=2b|eK9^By =7^A{ _OVIK yhXe>mjzjS  %OW.v@8۶#tӶQ޶L!Tضrȶ)i J9"/kK)@5ˊuj0?7! HI3'RE͕Wq,jJ'NGz~&8oڤ ʛ* ToNç>b$=U':ՙ&qWΐWWnqHtH|P(JIJ b1ӧ|aq, 'IJ uOxw'C󍯾k o| ߾z;d0}Gqr9e?9,]5c-29ׁ>rI>rr֢kAk5hG'&D=QO[*[ʿ7M;ՉWHeZ$*# *-%СmOP})gܳxﳠ61Dl"L g=} D`ĪJxwDH$BȦIԂ(n 2B]{3ѕQ`{5(AAl=}[Dz``4@>p&WО@jT IAC-#nH_p8ɲiǿӁɮ1X:edMr [Z*ASQ >3JVM0DHQ4ZeZ ܗGQ%uߔ ()kABPMpH1Qڔ&ߔ&۔'ī'i -2& iPgS Kф 6iE%2 # qu)Ψ3*=,'pPնouħnYŤiQF#eH`>Hd].BPW f`kÚjebh㸇@-fK8'Y{5TEiϒYDDL}XfJĆwElK 휧I׼I4U[y* bKMPUW ĂMǎ adU(HsdRϡ\fŹpT".P/)#𩗉g[6Uj[.M lM)¹ld6q[N߼ĪmZ*sY=h[y?vM3F:oHn{O@(oRAJ͠na5ny4] =^wPg/`-~(_$LVMVM5229zd,G4) ,@7 :(\2Z':͎")Do:g3z-${' gͺ{7;"wG0\{w (r 8KYy rj,mgvV>D>yf-EG3/l8kCHݤW(:Hp%ˏo[P V ϡ'uUyPQF<5 G;R&DAˑcEd#k᠆tKhtJ_xe:g\wKXo9 vͷ'lx 2jOg_B{X׀4c^ܽSG j!%ň6YE$(jw /xˍB6 xI%ed 59mζ}ϥCH&5K?tܙlrQT("(V(| }:F;+euh0Yd:A4ҦɺQF&V? U%o!!MaM}52zb8y4"yAҡ:2=OE"3PzVFYz$wrgY@d) 2,QưH` Q%5vcY&xr-Uiӿ\e6Gx#.toAifm͚4je* iBǣd*d,~{#wTCCfWPNV 9#HcW(K Z&OxhB N lwl" ȏ GYnSHU r.&^L9wuSd[m4 mY .8(4טEM鐬Gcyv6 ∘aHV(s"hiG;Gם{kїd* igH8g{Rnrfb‚ƭrP5K"b#*,jeЖO>$)G-tD&Dy5](j ݔҷ)=EǗ崂 t[|h5j ֕{m]Ÿ8M}μ3$ hrVY QGNQLuz 2y91r Qf)rpX,.}1"͂IdڎAڅ`Hq11< kydˋ!J,ynzJ"e;/U}OCd_ګxrNWiʙp[Yv9eyiExo/cl0ץ<&g=DTRew{^ bOqY:)rd _IXd)Y:AmȒe=/l|.̻ ~Ζ?AYpg~qe> f%?+m AP HerDA9Zƈ7HPI$gAWӥĘvq9Z6kC-.O* mI ʄ(DSryPO~[Ci1dt^xa:iWx6n^dZyQ:ʗ)C>wj{wP`&qxpb94\5$I!wp|w㭔:$ʼRx'DG"憨҈U&G5`G(_~{宻 ޖ SDAroh4;3ۣ0jC*!8b(e4H ifԂ(ˡRI[4OoB9ȺUsLZes 2@-d։C B•}/_7A!oÛHc06)qw b82IzT(=qi1_P/qdx6HPadT(K_ZYdϠw%jn9oR Lc.EGc?9:33υתsjn?8dѹf3NybFs%m}Ց~K_v"킼9*s(cwOEz։S{c2)ῦr,F9 m6 aƫy屇ơ"qsy.zڌEyvg endstream endobj 1241 0 obj << /Type /Page /Contents 1242 0 R /Resources 1240 0 R /MediaBox [0 0 595.276 841.89] /Parent 1013 0 R >> endobj 1243 0 obj << /D [1241 0 R /XYZ 88.291 795.961 null] >> endobj 1244 0 obj << /D [1241 0 R /XYZ 104.235 756.206 null] >> endobj 1245 0 obj << /D [1241 0 R /XYZ 104.235 746.742 null] >> endobj 1246 0 obj << /D [1241 0 R /XYZ 104.235 737.277 null] >> endobj 1247 0 obj << /D [1241 0 R /XYZ 104.235 727.813 null] >> endobj 1248 0 obj << /D [1241 0 R /XYZ 104.235 718.349 null] >> endobj 1249 0 obj << /D [1241 0 R /XYZ 104.235 708.884 null] >> endobj 1250 0 obj << /D [1241 0 R /XYZ 104.235 699.42 null] >> endobj 1251 0 obj << /D [1241 0 R /XYZ 104.235 689.955 null] >> endobj 1252 0 obj << /D [1241 0 R /XYZ 104.235 680.491 null] >> endobj 1253 0 obj << /D [1241 0 R /XYZ 104.235 671.026 null] >> endobj 1254 0 obj << /D [1241 0 R /XYZ 104.235 661.562 null] >> endobj 1255 0 obj << /D [1241 0 R /XYZ 104.235 652.097 null] >> endobj 1256 0 obj << /D [1241 0 R /XYZ 104.235 642.633 null] >> endobj 1257 0 obj << /D [1241 0 R /XYZ 104.235 633.168 null] >> endobj 1258 0 obj << /D [1241 0 R /XYZ 104.235 623.704 null] >> endobj 1259 0 obj << /D [1241 0 R /XYZ 104.235 614.239 null] >> endobj 1260 0 obj << /D [1241 0 R /XYZ 104.235 604.775 null] >> endobj 1261 0 obj << /D [1241 0 R /XYZ 104.235 595.31 null] >> endobj 1262 0 obj << /D [1241 0 R /XYZ 104.235 585.846 null] >> endobj 1263 0 obj << /D [1241 0 R /XYZ 104.235 576.381 null] >> endobj 1264 0 obj << /D [1241 0 R /XYZ 104.235 566.917 null] >> endobj 1265 0 obj << /D [1241 0 R /XYZ 104.235 557.452 null] >> endobj 1266 0 obj << /D [1241 0 R /XYZ 104.235 547.988 null] >> endobj 1267 0 obj << /D [1241 0 R /XYZ 104.235 538.523 null] >> endobj 1268 0 obj << /D [1241 0 R /XYZ 104.235 529.059 null] >> endobj 1269 0 obj << /D [1241 0 R /XYZ 104.235 519.594 null] >> endobj 1270 0 obj << /D [1241 0 R /XYZ 104.235 510.13 null] >> endobj 1271 0 obj << /D [1241 0 R /XYZ 104.235 500.665 null] >> endobj 1272 0 obj << /D [1241 0 R /XYZ 104.235 491.201 null] >> endobj 1273 0 obj << /D [1241 0 R /XYZ 104.235 481.736 null] >> endobj 1274 0 obj << /D [1241 0 R /XYZ 104.235 472.272 null] >> endobj 1275 0 obj << /D [1241 0 R /XYZ 104.235 462.807 null] >> endobj 1276 0 obj << /D [1241 0 R /XYZ 104.235 453.343 null] >> endobj 1277 0 obj << /D [1241 0 R /XYZ 104.235 443.878 null] >> endobj 1278 0 obj << /D [1241 0 R /XYZ 104.235 434.414 null] >> endobj 1279 0 obj << /D [1241 0 R /XYZ 104.235 424.949 null] >> endobj 1280 0 obj << /D [1241 0 R /XYZ 104.235 415.485 null] >> endobj 1281 0 obj << /D [1241 0 R /XYZ 104.235 406.02 null] >> endobj 1282 0 obj << /D [1241 0 R /XYZ 104.235 396.556 null] >> endobj 1283 0 obj << /D [1241 0 R /XYZ 104.235 387.091 null] >> endobj 1284 0 obj << /D [1241 0 R /XYZ 104.235 377.627 null] >> endobj 1285 0 obj << /D [1241 0 R /XYZ 104.235 368.162 null] >> endobj 1286 0 obj << /D [1241 0 R /XYZ 104.235 358.698 null] >> endobj 1287 0 obj << /D [1241 0 R /XYZ 104.235 349.233 null] >> endobj 1288 0 obj << /D [1241 0 R /XYZ 104.235 339.769 null] >> endobj 1289 0 obj << /D [1241 0 R /XYZ 104.235 330.304 null] >> endobj 1290 0 obj << /D [1241 0 R /XYZ 104.235 320.84 null] >> endobj 1291 0 obj << /D [1241 0 R /XYZ 104.235 311.375 null] >> endobj 1292 0 obj << /D [1241 0 R /XYZ 104.235 301.911 null] >> endobj 1293 0 obj << /D [1241 0 R /XYZ 104.235 292.446 null] >> endobj 1294 0 obj << /D [1241 0 R /XYZ 104.235 282.982 null] >> endobj 1295 0 obj << /D [1241 0 R /XYZ 104.235 273.517 null] >> endobj 1296 0 obj << /D [1241 0 R /XYZ 104.235 264.053 null] >> endobj 1297 0 obj << /D [1241 0 R /XYZ 104.235 254.588 null] >> endobj 1298 0 obj << /D [1241 0 R /XYZ 104.235 245.124 null] >> endobj 1299 0 obj << /D [1241 0 R /XYZ 104.235 235.659 null] >> endobj 1300 0 obj << /D [1241 0 R /XYZ 104.235 226.195 null] >> endobj 1301 0 obj << /D [1241 0 R /XYZ 104.235 216.73 null] >> endobj 1302 0 obj << /D [1241 0 R /XYZ 104.235 207.266 null] >> endobj 1303 0 obj << /D [1241 0 R /XYZ 104.235 197.801 null] >> endobj 1304 0 obj << /D [1241 0 R /XYZ 104.235 188.337 null] >> endobj 1305 0 obj << /D [1241 0 R /XYZ 104.235 178.872 null] >> endobj 1240 0 obj << /Font << /F40 549 0 R /F57 761 0 R /F60 805 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1308 0 obj << /Length 3444 /Filter /FlateDecode >> stream xڽko# E~$i4As׃dPQ=s]Eʦx+,93'tɛkAK'l(#T8*&W7/޽9ÄWzH-'IP(3ş.^^҉"=XKSI#b>y7W0IHȜ$ @cgN7gyȄ*=r i(pca:.ٹ[sk Ig{RQO>>P4@+RL>BG.a(tX@G#D=.Li]gA5i(ԥX+CQ8(!6`ˀ(py1AU( Eм=@pE-"at4ܿ 4 &"3-a4qE&&5pC>s[.~=p0 {DyT2[Z|̢[$&%&jע(S[3t$jmzYDO6GR<h]kQ)8]6D}H-/i]fkE%2u Lێ阺 pW0Vx 4Ѝ҇l5^AYڍ~)4܄> Y>ǽd lFoR7h vM Gj>%^'sjaM6X(ܦe9XUH"j$](, B#Ii[V$\(cqQ{oU{Ġ[ s~"\f(g(q\WOknhhOQH%1FE"<5Sq}M4>̘RJ8}! ]4M)Ɛ_ to>sҦd@5 Bk FVsg81pZӨ& 0(U(37n{UtJKBMS\݀`je*C⑼&;1 `SoѦ6UøIt mP)( cgh7,(/3/i^gL{2KtO„ߡ^~+$(!aF-hW(/LX sM.zI\aYP*}}Pcu p3_VWNlkC_Oo.|5Jtl cJA$ j\v~9;ՈՁe=ZMъp֔i@ςibTSXA(K+3h2Capx KA44!5-EW(%trEsioC6}q;mEƼ%63/TWaS"֠38ь-qg!}+yT7¥NR6Aa'gB ݆ƯԒ_*Ea瘃q̥3ȨEY(%Zl 9' m0H{mN~{F. ^$M~/uHR6%AQ),CV=Ր:HcuMO~~Me52y >>LBmоW2X 9mcR(Z QiTuS`Ѐb.m' Q7_4)SRO{~URK>iu=#QG߰M<*JZ4g!Qm QEdя4/JnTPdpa J,fs(O^;.! E2eppjxS9amd 'f5\BT"mt8/%'yNN?k}BY kIaMNGg! c5 Uź/-HqhG=ՙvvIXIjQf !P`ҼM:!0Ä(D-a<"LpR-"PC C=2HX2CU>-}qX3vfzu-)Vd}N9\ŤWozc2 }`^mV?=q J{ h@wn-d sy]>J;7WpsdgN-9;xfzq gLM?nW'! m^::Z|\nbRQW c6  X÷,q^lwlLYf#%kdz^Oo23pF2E9VfBna$}vVhNHyJs>ӚaQs6Q#(7ʚ4(-OzcU8*5!Np۝9~R2Y;?,(\r(41Fb&&ΏK7i=vTb7A_Wɗ?)Ҁh| \o+!~l(Ǽ}q6g ~BCKJ XwX%)'HFPjMmJU( 'r;].Sr.1c8•o)mRLe^I#/E#KcvmEQ&3xFJt)] 3.W%_Qwxb|+pd_%Gi2wo)qTLY2]䷵"rBp55``Zr%ݔUFQgD(7G[rdK#Ké\t0)ş$sSE\a^pK4%n_ʜ?C W(~ a6ǔԦly 6mEjE0'ǓZTEf1lZ(YW[٦EF ';?2լsΫŅѻ7?6 7B]':;2M̬P楖da=Xyb]':{?b!np|'o焘5s>90ylq,0Vjf endstream endobj 1307 0 obj << /Type /Page /Contents 1308 0 R /Resources 1306 0 R /MediaBox [0 0 595.276 841.89] /Parent 1366 0 R >> endobj 1309 0 obj << /D [1307 0 R /XYZ 88.291 795.961 null] >> endobj 1310 0 obj << /D [1307 0 R /XYZ 104.235 756.206 null] >> endobj 1311 0 obj << /D [1307 0 R /XYZ 104.235 746.742 null] >> endobj 1312 0 obj << /D [1307 0 R /XYZ 104.235 737.277 null] >> endobj 1313 0 obj << /D [1307 0 R /XYZ 104.235 727.813 null] >> endobj 1314 0 obj << /D [1307 0 R /XYZ 104.235 718.349 null] >> endobj 1315 0 obj << /D [1307 0 R /XYZ 104.235 708.884 null] >> endobj 1316 0 obj << /D [1307 0 R /XYZ 104.235 699.42 null] >> endobj 1317 0 obj << /D [1307 0 R /XYZ 104.235 689.955 null] >> endobj 1318 0 obj << /D [1307 0 R /XYZ 104.235 680.491 null] >> endobj 1319 0 obj << /D [1307 0 R /XYZ 104.235 671.026 null] >> endobj 1320 0 obj << /D [1307 0 R /XYZ 104.235 661.562 null] >> endobj 1321 0 obj << /D [1307 0 R /XYZ 104.235 652.097 null] >> endobj 1322 0 obj << /D [1307 0 R /XYZ 104.235 642.633 null] >> endobj 1323 0 obj << /D [1307 0 R /XYZ 104.235 633.168 null] >> endobj 1324 0 obj << /D [1307 0 R /XYZ 104.235 623.704 null] >> endobj 1325 0 obj << /D [1307 0 R /XYZ 104.235 614.239 null] >> endobj 1326 0 obj << /D [1307 0 R /XYZ 104.235 604.775 null] >> endobj 1327 0 obj << /D [1307 0 R /XYZ 104.235 595.31 null] >> endobj 1328 0 obj << /D [1307 0 R /XYZ 104.235 585.846 null] >> endobj 1329 0 obj << /D [1307 0 R /XYZ 104.235 576.381 null] >> endobj 1330 0 obj << /D [1307 0 R /XYZ 104.235 566.917 null] >> endobj 1331 0 obj << /D [1307 0 R /XYZ 104.235 557.452 null] >> endobj 1332 0 obj << /D [1307 0 R /XYZ 104.235 547.988 null] >> endobj 1333 0 obj << /D [1307 0 R /XYZ 104.235 538.523 null] >> endobj 1334 0 obj << /D [1307 0 R /XYZ 104.235 529.059 null] >> endobj 1335 0 obj << /D [1307 0 R /XYZ 104.235 519.594 null] >> endobj 1336 0 obj << /D [1307 0 R /XYZ 104.235 510.13 null] >> endobj 1337 0 obj << /D [1307 0 R /XYZ 104.235 500.665 null] >> endobj 1338 0 obj << /D [1307 0 R /XYZ 104.235 491.201 null] >> endobj 1339 0 obj << /D [1307 0 R /XYZ 104.235 481.736 null] >> endobj 1340 0 obj << /D [1307 0 R /XYZ 104.235 472.272 null] >> endobj 1341 0 obj << /D [1307 0 R /XYZ 104.235 462.807 null] >> endobj 1342 0 obj << /D [1307 0 R /XYZ 104.235 453.343 null] >> endobj 1343 0 obj << /D [1307 0 R /XYZ 104.235 443.878 null] >> endobj 1344 0 obj << /D [1307 0 R /XYZ 104.235 434.414 null] >> endobj 1345 0 obj << /D [1307 0 R /XYZ 104.235 424.949 null] >> endobj 1346 0 obj << /D [1307 0 R /XYZ 104.235 415.485 null] >> endobj 1347 0 obj << /D [1307 0 R /XYZ 104.235 406.02 null] >> endobj 1348 0 obj << /D [1307 0 R /XYZ 104.235 396.556 null] >> endobj 1349 0 obj << /D [1307 0 R /XYZ 104.235 387.091 null] >> endobj 1350 0 obj << /D [1307 0 R /XYZ 89.291 331.942 null] >> endobj 1351 0 obj << /D [1307 0 R /XYZ 89.291 296.442 null] >> endobj 1352 0 obj << /D [1307 0 R /XYZ 104.235 297.322 null] >> endobj 1353 0 obj << /D [1307 0 R /XYZ 104.235 287.858 null] >> endobj 1354 0 obj << /D [1307 0 R /XYZ 104.235 278.393 null] >> endobj 1355 0 obj << /D [1307 0 R /XYZ 104.235 268.929 null] >> endobj 1356 0 obj << /D [1307 0 R /XYZ 104.235 259.464 null] >> endobj 1357 0 obj << /D [1307 0 R /XYZ 104.235 250 null] >> endobj 1358 0 obj << /D [1307 0 R /XYZ 104.235 240.535 null] >> endobj 1359 0 obj << /D [1307 0 R /XYZ 104.235 231.071 null] >> endobj 1360 0 obj << /D [1307 0 R /XYZ 104.235 221.606 null] >> endobj 1361 0 obj << /D [1307 0 R /XYZ 104.235 212.142 null] >> endobj 1362 0 obj << /D [1307 0 R /XYZ 104.235 202.677 null] >> endobj 1363 0 obj << /D [1307 0 R /XYZ 104.235 193.213 null] >> endobj 1364 0 obj << /D [1307 0 R /XYZ 104.235 183.748 null] >> endobj 1365 0 obj << /D [1307 0 R /XYZ 104.235 174.284 null] >> endobj 1306 0 obj << /Font << /F40 549 0 R /F57 761 0 R /F60 805 0 R /F21 548 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1369 0 obj << /Length 3250 /Filter /FlateDecode >> stream xn7_MX_ . Їb Ē/#5T'-{xH){1Eչ>q9~IGg#:zr@+PiFF >x#JkZ.G~@(3D7 !i utwqZHpcFG1Ӈ/?DyBR0cx2D3 qpbR~r߳ `|r8qjV_b+쯱 #W2Y:>?7ĉ[l_b_Ķ0WSxU"xe5_=c(.@jA e{xHC@v3v؟ՀlG8u䐃,R%]stcl9>a#m?N"&ւ(Y"88# ~78|;\-8 HNդ-k! ǜ~:X ZhGͰ~-PiiVPsD@TuÓiH#4b!Hd;d83@+lϫPqv@ f~9sƷ`0*Yj?kϗ.]zrHW(r 0*WF^d>Ϟ΃~:-1VQHNw!9E1{?+tj̟.VJR h2QD! Q>j.۳<0B!QŬSN t(#Mije2;S[l> g\@L%)[ TZbvIȇTj`E`&,dabr?) NSSƪDhbBYvlmNivR`&PDۦpDc*R J[rfOvv^t(ڏMehnׄ`52y#THRʲD88Ie2{0`cq w8,]qxx"{rc?zg&3k.1fPԾH_oB"E-E3pf@Ь5-s_ a (IM YFγ!=ǑLH:`X˛b,B7eƪA/#ƠIע2=G՚4XxT(2bDLH1(C_]u*~gD܃Ȭ2|h}E2T 2ˆts_ߙ`؍MZZx CJ{"[!5<4C,W8@c}Cc4z@i hJ4fq)Qft͉1–4PHi{N9A ٻ%OC6RU(DvW2R )Tq6= *,#mKQ52n7ciFh—3kwYjU2wO B ee4IpٳϚVB(߯&c>Av EclOlDC[(4lWC9WexuH2_B;AY#”Xi^pB„ fe<:8]@C>~ᑡ_ 4B`nJe&R9lD]j˟gy)FB6ڎE)t :.!,bq/a 'ٔ\2ˡ _ Q|:$!x2[l2 BَeHK? ?Lu6T0y=n)>{d0LJwؿ̒a]4K^b3w[O:mٶ/Ч)R LW0 ꧫqowDǗi2Z.go܁!jT(c&%SGT4V,kk?֖}h8jEDs bk~7"P3nZ0k_l v?FU\ :쬉ϧxgMY @9_S ,Jj^ & #8j:lb AOOIHIT̊nke魍C\Bo۴~-2HIҮw'>vV8vU^YEp"ڎQfS1vd NsNj ܪAc'2YwedhcYں+6,X" Dž ^sؐ4=[䒅h Ղ(p\Mr?gOp*mqw-2&38)$mT( s"IIf%q)?QD(W(zה!qqbV"}ϵ m?p~ӚPݔQNmӗv> iȹ 7Pݐ8Wv M'> endobj 1370 0 obj << /D [1368 0 R /XYZ 88.291 795.961 null] >> endobj 1371 0 obj << /D [1368 0 R /XYZ 104.235 756.206 null] >> endobj 1372 0 obj << /D [1368 0 R /XYZ 104.235 746.742 null] >> endobj 1373 0 obj << /D [1368 0 R /XYZ 104.235 737.277 null] >> endobj 1374 0 obj << /D [1368 0 R /XYZ 104.235 727.813 null] >> endobj 1375 0 obj << /D [1368 0 R /XYZ 104.235 718.349 null] >> endobj 1376 0 obj << /D [1368 0 R /XYZ 104.235 708.884 null] >> endobj 1377 0 obj << /D [1368 0 R /XYZ 104.235 699.42 null] >> endobj 1378 0 obj << /D [1368 0 R /XYZ 104.235 689.955 null] >> endobj 1379 0 obj << /D [1368 0 R /XYZ 104.235 680.491 null] >> endobj 1380 0 obj << /D [1368 0 R /XYZ 104.235 671.026 null] >> endobj 1381 0 obj << /D [1368 0 R /XYZ 104.235 661.562 null] >> endobj 1382 0 obj << /D [1368 0 R /XYZ 104.235 652.097 null] >> endobj 1383 0 obj << /D [1368 0 R /XYZ 104.235 642.633 null] >> endobj 1384 0 obj << /D [1368 0 R /XYZ 104.235 633.168 null] >> endobj 1385 0 obj << /D [1368 0 R /XYZ 104.235 623.704 null] >> endobj 1386 0 obj << /D [1368 0 R /XYZ 104.235 614.239 null] >> endobj 1387 0 obj << /D [1368 0 R /XYZ 104.235 604.775 null] >> endobj 1388 0 obj << /D [1368 0 R /XYZ 104.235 595.31 null] >> endobj 1389 0 obj << /D [1368 0 R /XYZ 104.235 585.846 null] >> endobj 1390 0 obj << /D [1368 0 R /XYZ 104.235 576.381 null] >> endobj 1391 0 obj << /D [1368 0 R /XYZ 104.235 566.917 null] >> endobj 1392 0 obj << /D [1368 0 R /XYZ 104.235 557.452 null] >> endobj 1393 0 obj << /D [1368 0 R /XYZ 104.235 547.988 null] >> endobj 1394 0 obj << /D [1368 0 R /XYZ 104.235 538.523 null] >> endobj 1395 0 obj << /D [1368 0 R /XYZ 104.235 529.059 null] >> endobj 1396 0 obj << /D [1368 0 R /XYZ 104.235 519.594 null] >> endobj 1397 0 obj << /D [1368 0 R /XYZ 104.235 510.13 null] >> endobj 1398 0 obj << /D [1368 0 R /XYZ 104.235 500.665 null] >> endobj 1399 0 obj << /D [1368 0 R /XYZ 104.235 491.201 null] >> endobj 1400 0 obj << /D [1368 0 R /XYZ 104.235 481.736 null] >> endobj 1401 0 obj << /D [1368 0 R /XYZ 104.235 472.272 null] >> endobj 1402 0 obj << /D [1368 0 R /XYZ 104.235 462.807 null] >> endobj 1403 0 obj << /D [1368 0 R /XYZ 104.235 453.343 null] >> endobj 1404 0 obj << /D [1368 0 R /XYZ 104.235 443.878 null] >> endobj 1405 0 obj << /D [1368 0 R /XYZ 104.235 434.414 null] >> endobj 1406 0 obj << /D [1368 0 R /XYZ 89.291 377.144 null] >> endobj 1407 0 obj << /D [1368 0 R /XYZ 89.291 357.314 null] >> endobj 1408 0 obj << /D [1368 0 R /XYZ 104.235 358.194 null] >> endobj 1409 0 obj << /D [1368 0 R /XYZ 104.235 348.729 null] >> endobj 1410 0 obj << /D [1368 0 R /XYZ 104.235 339.265 null] >> endobj 1411 0 obj << /D [1368 0 R /XYZ 104.235 329.8 null] >> endobj 1412 0 obj << /D [1368 0 R /XYZ 104.235 320.336 null] >> endobj 1413 0 obj << /D [1368 0 R /XYZ 104.235 310.872 null] >> endobj 1414 0 obj << /D [1368 0 R /XYZ 104.235 301.407 null] >> endobj 1415 0 obj << /D [1368 0 R /XYZ 104.235 291.943 null] >> endobj 1416 0 obj << /D [1368 0 R /XYZ 104.235 282.478 null] >> endobj 1417 0 obj << /D [1368 0 R /XYZ 104.235 273.014 null] >> endobj 1418 0 obj << /D [1368 0 R /XYZ 104.235 263.549 null] >> endobj 1419 0 obj << /D [1368 0 R /XYZ 104.235 254.085 null] >> endobj 1420 0 obj << /D [1368 0 R /XYZ 104.235 244.62 null] >> endobj 1421 0 obj << /D [1368 0 R /XYZ 104.235 235.156 null] >> endobj 1422 0 obj << /D [1368 0 R /XYZ 104.235 225.691 null] >> endobj 1423 0 obj << /D [1368 0 R /XYZ 104.235 216.227 null] >> endobj 1424 0 obj << /D [1368 0 R /XYZ 104.235 206.762 null] >> endobj 1425 0 obj << /D [1368 0 R /XYZ 104.235 197.298 null] >> endobj 1426 0 obj << /D [1368 0 R /XYZ 104.235 187.833 null] >> endobj 1427 0 obj << /D [1368 0 R /XYZ 104.235 178.369 null] >> endobj 1367 0 obj << /Font << /F40 549 0 R /F57 761 0 R /F60 805 0 R /F21 548 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1430 0 obj << /Length 3491 /Filter /FlateDecode >> stream x\o7_˽(G>.]s+ɶJ%9%-W:hq+,wptt17h<؈QF4##qT&NnDpvtMrt5ٿ3: '^t3Fޞ%)|v::s^VIhHoȠ@,_8;a){,/+7]X7߾8a_ %vZxXަuL1dx+LTQq_(K ͩ Nsh,,6?\b,hW7Ȁ4(U'T^m$R&dՒ(#K⏎P E/YSaِ%M6!DYDDxRAR}ѠƗXckäp@wИ"&O"j8^Ԓ(CZbQіus,X^a@c8T,絎 3,ߕ&IO!˜nD-ȴu)Ef " h`kX,hAO}[BPwaN Jm ъ51s)Ev3TAYm)HO( }v嶺3n#Y%oP{JݡF1:|@^#{tl ?wm:D&D\Cm'd:eWv΅3U]D5CRj`4n)8,"qtGs.pJb@YL.\:(I&,?eWV(p[?|)ބ?'gd'f0kp?W5po)V=WX6x vpTc;ɶ{֓@8s#5p sQ AVY1'zy;YϦ}ֻYUx|`/gZ.'>//8߮r0ϫ_C'[s'[@ i4M)<,[+\i%Iek}"f̀g HӍ5]+POYrܗM]n#PIL *jΝg&d5a`|Ze>C Sǎ9F]?%)7D_O5$"R0mj֗ S3i34fMo(.ʍ7W+5{,9^aJEl\+)*}>ht=dcbbj+)tD%oTH^px5QT( ;Å-Jw=C$>~†'!C2Xc$1Fb}ꛌWI ,2h-1bwL se-FI2v]6sYUd([1%xQM@ǔP,`2`H 5HP W(F5l`'2.Iѫy41~h> endobj 1431 0 obj << /D [1429 0 R /XYZ 88.291 795.961 null] >> endobj 1432 0 obj << /D [1429 0 R /XYZ 104.235 756.206 null] >> endobj 1433 0 obj << /D [1429 0 R /XYZ 104.235 746.742 null] >> endobj 1434 0 obj << /D [1429 0 R /XYZ 104.235 737.277 null] >> endobj 1435 0 obj << /D [1429 0 R /XYZ 104.235 727.813 null] >> endobj 1436 0 obj << /D [1429 0 R /XYZ 104.235 718.349 null] >> endobj 1437 0 obj << /D [1429 0 R /XYZ 104.235 708.884 null] >> endobj 1438 0 obj << /D [1429 0 R /XYZ 104.235 699.42 null] >> endobj 1439 0 obj << /D [1429 0 R /XYZ 104.235 689.955 null] >> endobj 1440 0 obj << /D [1429 0 R /XYZ 104.235 680.491 null] >> endobj 1441 0 obj << /D [1429 0 R /XYZ 104.235 671.026 null] >> endobj 1442 0 obj << /D [1429 0 R /XYZ 104.235 661.562 null] >> endobj 1443 0 obj << /D [1429 0 R /XYZ 104.235 652.097 null] >> endobj 1444 0 obj << /D [1429 0 R /XYZ 104.235 642.633 null] >> endobj 1445 0 obj << /D [1429 0 R /XYZ 104.235 633.168 null] >> endobj 1446 0 obj << /D [1429 0 R /XYZ 104.235 623.704 null] >> endobj 1447 0 obj << /D [1429 0 R /XYZ 104.235 614.239 null] >> endobj 1448 0 obj << /D [1429 0 R /XYZ 104.235 604.775 null] >> endobj 1449 0 obj << /D [1429 0 R /XYZ 104.235 595.31 null] >> endobj 1450 0 obj << /D [1429 0 R /XYZ 89.291 538.04 null] >> endobj 1451 0 obj << /D [1429 0 R /XYZ 89.291 518.21 null] >> endobj 1452 0 obj << /D [1429 0 R /XYZ 104.235 519.09 null] >> endobj 1453 0 obj << /D [1429 0 R /XYZ 104.235 509.626 null] >> endobj 1454 0 obj << /D [1429 0 R /XYZ 104.235 500.161 null] >> endobj 1455 0 obj << /D [1429 0 R /XYZ 104.235 490.697 null] >> endobj 1456 0 obj << /D [1429 0 R /XYZ 104.235 481.232 null] >> endobj 1457 0 obj << /D [1429 0 R /XYZ 104.235 471.768 null] >> endobj 1458 0 obj << /D [1429 0 R /XYZ 104.235 462.303 null] >> endobj 1459 0 obj << /D [1429 0 R /XYZ 104.235 452.839 null] >> endobj 1460 0 obj << /D [1429 0 R /XYZ 104.235 443.374 null] >> endobj 1461 0 obj << /D [1429 0 R /XYZ 104.235 433.91 null] >> endobj 1462 0 obj << /D [1429 0 R /XYZ 104.235 424.445 null] >> endobj 1463 0 obj << /D [1429 0 R /XYZ 104.235 414.981 null] >> endobj 1464 0 obj << /D [1429 0 R /XYZ 104.235 405.516 null] >> endobj 1465 0 obj << /D [1429 0 R /XYZ 104.235 396.052 null] >> endobj 1466 0 obj << /D [1429 0 R /XYZ 104.235 386.587 null] >> endobj 1467 0 obj << /D [1429 0 R /XYZ 104.235 377.123 null] >> endobj 1468 0 obj << /D [1429 0 R /XYZ 104.235 367.658 null] >> endobj 1469 0 obj << /D [1429 0 R /XYZ 104.235 358.194 null] >> endobj 1470 0 obj << /D [1429 0 R /XYZ 104.235 348.729 null] >> endobj 1471 0 obj << /D [1429 0 R /XYZ 104.235 339.265 null] >> endobj 1472 0 obj << /D [1429 0 R /XYZ 104.235 329.8 null] >> endobj 1473 0 obj << /D [1429 0 R /XYZ 104.235 320.336 null] >> endobj 1474 0 obj << /D [1429 0 R /XYZ 104.235 310.872 null] >> endobj 1475 0 obj << /D [1429 0 R /XYZ 104.235 301.407 null] >> endobj 1476 0 obj << /D [1429 0 R /XYZ 104.235 291.943 null] >> endobj 1477 0 obj << /D [1429 0 R /XYZ 104.235 282.478 null] >> endobj 1478 0 obj << /D [1429 0 R /XYZ 104.235 273.014 null] >> endobj 1479 0 obj << /D [1429 0 R /XYZ 104.235 263.549 null] >> endobj 1480 0 obj << /D [1429 0 R /XYZ 104.235 254.085 null] >> endobj 1481 0 obj << /D [1429 0 R /XYZ 104.235 244.62 null] >> endobj 1482 0 obj << /D [1429 0 R /XYZ 104.235 235.156 null] >> endobj 1483 0 obj << /D [1429 0 R /XYZ 104.235 225.691 null] >> endobj 1484 0 obj << /D [1429 0 R /XYZ 104.235 216.227 null] >> endobj 1485 0 obj << /D [1429 0 R /XYZ 104.235 206.762 null] >> endobj 1486 0 obj << /D [1429 0 R /XYZ 104.235 197.298 null] >> endobj 1487 0 obj << /D [1429 0 R /XYZ 104.235 187.833 null] >> endobj 1488 0 obj << /D [1429 0 R /XYZ 104.235 178.369 null] >> endobj 1428 0 obj << /Font << /F40 549 0 R /F57 761 0 R /F60 805 0 R /F21 548 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1491 0 obj << /Length 959 /Filter /FlateDecode >> stream xڥXMsF W쑞I6~ug2x<,{*˩:_#0(كX,x )RkEu +&䢊LV]/I]E椾^v8)k&> 봳*!~].ޝ:R^Zި^"EmbTku|rKH\mUcw6IdjB@_17˧q/Mđ压ߗdUin:۶ *4,rh /EwXPׯ/${.;QZæ7r `fs `kp0?bY}UsCӃNu05QQpy[8 ɢk~;xyy=?-b9qEis wB56+n,|Sz|}7\@m& " B\l,+e^ TN zGyq! YLG*{T_9uwuHQ3C쳈QUY 1^De#C?/CF\/?ȧ(mg9݆2/"^OhȄyHwM@R/q%!iN !񉒔 >a [vy=5tv|ہ}vx~7h'T}n>)NjP-Vw'a36f.;l6l`C]e2n|( G_# 3>ڂA'ѰLIyPޥT>nMpz="UϠ`OW}NIt*kc"ķ,,fZ!y=h"y}n Wkrh>üFv|> endobj 1492 0 obj << /D [1490 0 R /XYZ 88.291 795.961 null] >> endobj 1493 0 obj << /D [1490 0 R /XYZ 104.235 756.206 null] >> endobj 1494 0 obj << /D [1490 0 R /XYZ 104.235 746.742 null] >> endobj 1495 0 obj << /D [1490 0 R /XYZ 104.235 737.277 null] >> endobj 1496 0 obj << /D [1490 0 R /XYZ 104.235 727.813 null] >> endobj 1497 0 obj << /D [1490 0 R /XYZ 104.235 718.349 null] >> endobj 1498 0 obj << /D [1490 0 R /XYZ 104.235 708.884 null] >> endobj 1499 0 obj << /D [1490 0 R /XYZ 104.235 699.42 null] >> endobj 1500 0 obj << /D [1490 0 R /XYZ 104.235 689.955 null] >> endobj 1501 0 obj << /D [1490 0 R /XYZ 104.235 680.491 null] >> endobj 1502 0 obj << /D [1490 0 R /XYZ 104.235 671.026 null] >> endobj 1503 0 obj << /D [1490 0 R /XYZ 104.235 661.562 null] >> endobj 1504 0 obj << /D [1490 0 R /XYZ 104.235 652.097 null] >> endobj 1505 0 obj << /D [1490 0 R /XYZ 104.235 642.633 null] >> endobj 1489 0 obj << /Font << /F40 549 0 R /F57 761 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1532 0 obj << /Length 757 /Filter /FlateDecode >> stream xKo@{'~$=UC6 *vwy85EneD{ccD1HI6@ AE }~$]#&UwK%~ӍGqI18Y7gn+ˏx  o= LrQo~D^p\ڳmo^etZW8)4'Erk_6A?"o>xH'-a(AdH,VU(R@Bw u@2;D%I:LniX S@Q%P )֒dQZB9CM ”D {*8 Қ3ZaN/x;3d(Z@F^"p/w"YqgH; jH_C* NkT@ p49$VȺ`T v"a v4j8 rV!|y(ξt)L [v~ʋtgz$$9xn示 dF:1_Ј4]\e)JxʔDH}ɞ[ƣ}Ȫ''&{8I~Ef EByϫʵOG-g endstream endobj 1531 0 obj << /Type /Page /Contents 1532 0 R /Resources 1530 0 R /MediaBox [0 0 595.276 841.89] /Parent 1366 0 R /Annots [ 1506 0 R 1507 0 R 1508 0 R 1509 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R 1516 0 R 1517 0 R 1518 0 R 1519 0 R 1520 0 R 1521 0 R 1522 0 R 1523 0 R 1524 0 R 1525 0 R 1526 0 R ] >> endobj 1506 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 621.169 506.981 632.963] /A << /S /GoTo /D (section.2.2) >> >> endobj 1507 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 598.591 506.981 610.447] /A << /S /GoTo /D (section.2.3) >> >> endobj 1508 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 576.138 506.981 587.932] /A << /S /GoTo /D (section.2.4) >> >> endobj 1509 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 553.56 506.981 565.416] /A << /S /GoTo /D (section.2.5) >> >> endobj 1510 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 531.044 506.981 542.901] /A << /S /GoTo /D (section.2.6) >> >> endobj 1511 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 508.591 506.981 520.385] /A << /S /GoTo /D (section.2.7) >> >> endobj 1512 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 486.075 506.981 497.87] /A << /S /GoTo /D (section.2.8) >> >> endobj 1513 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 463.56 506.981 475.354] /A << /S /GoTo /D (section.2.9) >> >> endobj 1514 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 441.044 506.981 452.838] /A << /S /GoTo /D (section.2.10) >> >> endobj 1515 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 418.529 506.981 430.323] /A << /S /GoTo /D (section.2.11) >> >> endobj 1516 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 396.013 506.981 407.807] /A << /S /GoTo /D (section.2.12) >> >> endobj 1517 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 373.498 506.981 385.292] /A << /S /GoTo /D (section.2.13) >> >> endobj 1518 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 350.982 506.981 362.776] /A << /S /GoTo /D (section.2.14) >> >> endobj 1519 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 328.466 506.981 340.261] /A << /S /GoTo /D (section.2.15) >> >> endobj 1520 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 305.951 506.981 317.745] /A << /S /GoTo /D (section.2.16) >> >> endobj 1521 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 283.435 506.981 295.229] /A << /S /GoTo /D (section.2.17) >> >> endobj 1522 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 260.92 506.981 272.714] /A << /S /GoTo /D (section.2.18) >> >> endobj 1523 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 238.404 506.981 250.198] /A << /S /GoTo /D (section.2.19) >> >> endobj 1524 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 215.889 506.981 227.683] /A << /S /GoTo /D (section.2.20) >> >> endobj 1525 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 193.311 506.981 205.167] /A << /S /GoTo /D (section.2.21) >> >> endobj 1526 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 170.795 506.981 182.652] /A << /S /GoTo /D (section.2.22) >> >> endobj 1533 0 obj << /D [1531 0 R /XYZ 88.291 795.961 null] >> endobj 70 0 obj << /D [1531 0 R /XYZ 89.291 757.701 null] >> endobj 1534 0 obj << /D [1531 0 R /XYZ 89.291 638.076 null] >> endobj 1530 0 obj << /Font << /F21 548 0 R /F63 845 0 R /F40 549 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1564 0 obj << /Length 759 /Filter /FlateDecode >> stream xMo@'5MpJQ/m($luXa#^Ws yl!w^=D$7";9O(C {w)AIi@ ewBُ _/W-Z4Lc үir1Mb6p6`60s?س T7`{. 2%t ID !3.BW7ɧbf5Pp)1'CA ]*"LNbSL]<3[v ыNKIØZ$}HH8!|,]p\#"HѴI#8!}֒[H!RE(6ie~W'6K.miPA3 VQ铲k#mknj\T6fOh~\eQ T1ϛ=/p#.Vk5sѦ3d/TƏhֶnJݽ!8CFZi@S/:KWc{Hp9H!Mc JJWMHW3>)7TЯk5!`5Fp1ᰡ5C4X뼚P8~2|d46/YO /ƋnHԮneLh2F$cq~WuPh҅5LPk7rzW 7v[lxYq})ѻ ɻI@Mt |)^JCz))]ն{݆_cęfE4N;*; Aߺ endstream endobj 1563 0 obj << /Type /Page /Contents 1564 0 R /Resources 1562 0 R /MediaBox [0 0 595.276 841.89] /Parent 1366 0 R /Annots [ 1527 0 R 1528 0 R 1529 0 R 1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R 1547 0 R 1548 0 R 1549 0 R 1550 0 R 1551 0 R 1552 0 R 1553 0 R 1554 0 R 1555 0 R 1556 0 R 1557 0 R 1558 0 R ] >> endobj 1527 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 743.384 506.981 755.178] /A << /S /GoTo /D (section.2.23) >> >> endobj 1528 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 720.976 506.981 732.77] /A << /S /GoTo /D (section.2.24) >> >> endobj 1529 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 698.567 506.981 710.362] /A << /S /GoTo /D (section.2.25) >> >> endobj 1535 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 676.097 506.981 687.953] /A << /S /GoTo /D (section.2.26) >> >> endobj 1536 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 653.688 506.981 665.545] /A << /S /GoTo /D (section.2.27) >> >> endobj 1537 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 631.28 506.981 643.137] /A << /S /GoTo /D (section.2.28) >> >> endobj 1538 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 608.872 506.981 620.728] /A << /S /GoTo /D (section.2.29) >> >> endobj 1539 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 586.463 506.981 598.32] /A << /S /GoTo /D (section.2.30) >> >> endobj 1540 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 564.118 506.981 575.912] /A << /S /GoTo /D (section.2.31) >> >> endobj 1541 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 541.709 506.981 553.504] /A << /S /GoTo /D (section.2.32) >> >> endobj 1542 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 519.301 506.981 531.095] /A << /S /GoTo /D (section.2.33) >> >> endobj 1543 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 496.83 506.981 508.687] /A << /S /GoTo /D (section.2.34) >> >> endobj 1544 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 474.485 506.981 486.279] /A << /S /GoTo /D (section.2.35) >> >> endobj 1545 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 452.076 506.981 463.87] /A << /S /GoTo /D (section.2.36) >> >> endobj 1546 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 429.668 506.981 441.462] /A << /S /GoTo /D (section.2.37) >> >> endobj 1547 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 407.26 506.981 419.054] /A << /S /GoTo /D (section.2.38) >> >> endobj 1548 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 384.851 506.981 396.646] /A << /S /GoTo /D (section.2.39) >> >> endobj 1549 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 362.443 506.981 374.237] /A << /S /GoTo /D (section.2.40) >> >> endobj 1550 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 340.035 506.981 351.829] /A << /S /GoTo /D (section.2.41) >> >> endobj 1551 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 317.627 506.981 329.421] /A << /S /GoTo /D (section.2.42) >> >> endobj 1552 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 295.218 506.981 307.012] /A << /S /GoTo /D (section.2.43) >> >> endobj 1553 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 272.81 506.981 284.604] /A << /S /GoTo /D (section.2.44) >> >> endobj 1554 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 250.339 506.981 262.196] /A << /S /GoTo /D (section.2.45) >> >> endobj 1555 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 227.931 506.981 239.788] /A << /S /GoTo /D (section.2.46) >> >> endobj 1556 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 205.585 506.981 217.379] /A << /S /GoTo /D (section.2.47) >> >> endobj 1557 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 183.114 506.981 194.971] /A << /S /GoTo /D (section.2.48) >> >> endobj 1558 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 160.769 506.981 172.563] /A << /S /GoTo /D (section.2.49) >> >> endobj 1565 0 obj << /D [1563 0 R /XYZ 88.291 795.961 null] >> endobj 1562 0 obj << /Font << /F63 845 0 R /F40 549 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1595 0 obj << /Length 752 /Filter /FlateDecode >> stream xMO@ agwR B==D8rJ1rb7vORƾ쓙w>L_;7F0!Ϋie>+}V1@G$ x83u*|uuPH pdɀRD#CqH hH ڂGVH~4?E׀.E5P)0sY-#S{ 4+.NGUiCQ#Xm`)<b݉nfx;1LtH*#pTEK % -\eMtGFvBPzDzf}BHtAG}n(1*pB-s{fM( QdUo[4qc|R,޻ …lS@}RMsTP4R1@t%C[NlՄ֪]Z5<ެh'}^KN &_d>b&18)gJbƔw\*bܙyc\W{cj+ܑ bWπ}\Eg4<=&cXC*fE'NZs[{٪*VЎ,v K m>)de0 l"dӨUhP1[U5JV#{oՖo$(Xy,0lrgɀ‹>}$̚}e endstream endobj 1594 0 obj << /Type /Page /Contents 1595 0 R /Resources 1593 0 R /MediaBox [0 0 595.276 841.89] /Parent 1597 0 R /Annots [ 1559 0 R 1560 0 R 1561 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R 1589 0 R ] >> endobj 1559 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 743.384 506.981 755.178] /A << /S /GoTo /D (section.2.50) >> >> endobj 1560 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 720.976 506.981 732.77] /A << /S /GoTo /D (section.2.51) >> >> endobj 1561 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 698.505 506.981 710.362] /A << /S /GoTo /D (section.2.52) >> >> endobj 1566 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 676.097 506.981 687.953] /A << /S /GoTo /D (section.2.53) >> >> endobj 1567 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 653.751 506.981 665.545] /A << /S /GoTo /D (section.2.54) >> >> endobj 1568 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 631.343 506.981 643.137] /A << /S /GoTo /D (section.2.55) >> >> endobj 1569 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 608.934 506.981 620.728] /A << /S /GoTo /D (section.2.56) >> >> endobj 1570 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 586.526 506.981 598.32] /A << /S /GoTo /D (section.2.57) >> >> endobj 1571 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 564.055 506.981 575.912] /A << /S /GoTo /D (section.2.58) >> >> endobj 1572 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 541.709 506.981 553.504] /A << /S /GoTo /D (section.2.59) >> >> endobj 1573 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 519.239 506.981 531.095] /A << /S /GoTo /D (section.2.60) >> >> endobj 1574 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 496.83 506.981 508.687] /A << /S /GoTo /D (section.2.61) >> >> endobj 1575 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 474.485 506.981 486.279] /A << /S /GoTo /D (section.2.62) >> >> endobj 1576 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 452.076 506.981 463.87] /A << /S /GoTo /D (section.2.63) >> >> endobj 1577 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 429.668 506.981 441.462] /A << /S /GoTo /D (section.2.64) >> >> endobj 1578 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 407.26 506.981 419.054] /A << /S /GoTo /D (section.2.65) >> >> endobj 1579 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 384.789 506.981 396.646] /A << /S /GoTo /D (section.2.66) >> >> endobj 1580 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 362.381 506.981 374.237] /A << /S /GoTo /D (section.2.67) >> >> endobj 1581 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 340.035 506.981 351.829] /A << /S /GoTo /D (section.2.68) >> >> endobj 1582 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 317.627 506.981 329.421] /A << /S /GoTo /D (section.2.69) >> >> endobj 1583 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 295.218 506.981 307.012] /A << /S /GoTo /D (section.2.70) >> >> endobj 1584 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 272.747 506.981 284.604] /A << /S /GoTo /D (section.2.71) >> >> endobj 1585 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 250.402 506.981 262.196] /A << /S /GoTo /D (section.2.72) >> >> endobj 1586 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 227.931 506.981 239.788] /A << /S /GoTo /D (section.2.73) >> >> endobj 1587 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.079 205.523 506.981 217.379] /A << /S /GoTo /D (section.2.74) >> >> endobj 1588 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 183.114 506.981 194.971] /A << /S /GoTo /D (section.2.75) >> >> endobj 1589 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 160.769 506.981 172.563] /A << /S /GoTo /D (section.2.76) >> >> endobj 1596 0 obj << /D [1594 0 R /XYZ 88.291 795.961 null] >> endobj 1593 0 obj << /Font << /F63 845 0 R /F40 549 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1625 0 obj << /Length 823 /Filter /FlateDecode >> stream xMO@ !~KH(\zh{&Kj`;R]HtCpiVډ4OygvQ4Ptvq|pt*hhq_%y$HϢϣ/ï̓G ՟Ij߷Tȧmg好[~fqZ8cB0M|&%iVWztz{x `yк YR̯LfKJLR-G8o\)!(?%fb*5euQ j9hO+U$yM!5!c n)D`B}WZuRN, κZY&]I$;O1RYV9Bޓ'VF$ endstream endobj 1624 0 obj << /Type /Page /Contents 1625 0 R /Resources 1623 0 R /MediaBox [0 0 595.276 841.89] /Parent 1597 0 R /Annots [ 1590 0 R 1591 0 R 1592 0 R 1598 0 R 1599 0 R 1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R 1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R 1612 0 R 1613 0 R 1614 0 R 1615 0 R 1616 0 R 1617 0 R 1618 0 R 1619 0 R ] >> endobj 1590 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 743.321 506.981 755.178] /A << /S /GoTo /D (section.2.77) >> >> endobj 1591 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 720.868 506.981 732.663] /A << /S /GoTo /D (section.2.78) >> >> endobj 1592 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 698.29 506.981 710.147] /A << /S /GoTo /D (section.2.79) >> >> endobj 1598 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 675.837 506.981 687.631] /A << /S /GoTo /D (section.2.80) >> >> endobj 1599 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 653.322 506.981 665.116] /A << /S /GoTo /D (section.2.81) >> >> endobj 1600 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 630.744 506.981 642.6] /A << /S /GoTo /D (section.2.82) >> >> endobj 1601 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 608.291 506.981 620.085] /A << /S /GoTo /D (section.2.83) >> >> endobj 1602 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 585.712 506.981 597.569] /A << /S /GoTo /D (section.2.84) >> >> endobj 1603 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 563.197 506.981 575.054] /A << /S /GoTo /D (section.2.85) >> >> endobj 1604 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 540.744 506.981 552.538] /A << /S /GoTo /D (section.2.86) >> >> endobj 1605 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 518.228 506.981 530.022] /A << /S /GoTo /D (section.2.87) >> >> endobj 1606 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 495.713 506.981 507.507] /A << /S /GoTo /D (section.2.88) >> >> endobj 1607 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 473.197 506.981 484.991] /A << /S /GoTo /D (section.2.89) >> >> endobj 1608 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 450.682 506.981 462.476] /A << /S /GoTo /D (section.2.90) >> >> endobj 1609 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 428.103 506.981 439.96] /A << /S /GoTo /D (section.2.91) >> >> endobj 1610 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 405.588 506.981 417.445] /A << /S /GoTo /D (section.2.92) >> >> endobj 1611 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 383.072 506.981 394.929] /A << /S /GoTo /D (section.2.93) >> >> endobj 1612 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 360.619 506.981 372.413] /A << /S /GoTo /D (section.2.94) >> >> endobj 1613 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 300.602 506.981 312.459] /A << /S /GoTo /D (section.2.95) >> >> endobj 1614 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 278.149 506.981 289.943] /A << /S /GoTo /D (section.2.96) >> >> endobj 1615 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 255.633 506.981 267.428] /A << /S /GoTo /D (section.2.97) >> >> endobj 1616 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 233.055 506.981 244.912] /A << /S /GoTo /D (section.2.98) >> >> endobj 1617 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 210.602 506.981 222.396] /A << /S /GoTo /D (section.2.99) >> >> endobj 1618 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 188.087 506.981 199.881] /A << /S /GoTo /D (section.2.100) >> >> endobj 1619 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 165.571 506.981 177.365] /A << /S /GoTo /D (section.2.101) >> >> endobj 1626 0 obj << /D [1624 0 R /XYZ 88.291 795.961 null] >> endobj 1627 0 obj << /D [1624 0 R /XYZ 89.291 317.572 null] >> endobj 1623 0 obj << /Font << /F63 845 0 R /F40 549 0 R /F47 592 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1643 0 obj << /Length 1935 /Filter /FlateDecode >> stream xKs6`GΎV3"D9tBDK8]50}~3o.(f˅u/sj9&bܳeY.eBk`|CsX#U)18&DoYØ0јRD Yi?uQ@?N[)=ug /bdj(SwL*Ę^rXiҧ. EF^7G1 UQvF4ARHY_Md4d;%/YIYe-.A shHOfft?;&M2N?Mķ$"1 '#Je4fmXۓ3yQM\$ j7ԯ.׶L|CR_G.["L@ E#$J} n>0bFG7!܉" d@VQڏEHMVQοJF^RB֬-5kV!Zh$G޼Ǣ \ّ7ʯŬWf VyfCﬞI^-VDQs_7!Mn=&%A: C5 #jN/l,@j܎`7]~J:ނ{8 ݵúҫ cfkUQ*%.u`:n!"NP30W~rNĴ[;U~DN-9ԻްLu~8e+$9N<9s [笾HrwOPXTIn,L/M̫2_eyo^ MU/"*y{^2kwtZks6-+\]p\_MXZż( c]IZF@\J'ǢPU'/:{ܵ%px{Y1@/v 6<>I^~[Sq{Yi%ktv7~3-]u;QVdj29VTT`iLA5i=Gܬf6M#Ⓥ \zY2AbɌ~5G*O1wX7ɑ[YPkøw徉 H"47 < ! bA,nzIx*}*F3|h NcܐԖ}~=8B .: "3 L}߂C8Sl ȏ3W2MmU͗!1%o7;&P1f vAK;!Nڏ~C zJA[ٟ"y?s N_> V8M^6m,+nd}ǻ;U+xeaP."UDRT9^D;K*Aۢgv\3H$0LP6rnSPR S_l:TfI|oԁQ TPq6`~?AqVu> +g endstream endobj 1642 0 obj << /Type /Page /Contents 1643 0 R /Resources 1641 0 R /MediaBox [0 0 595.276 841.89] /Parent 1597 0 R /Annots [ 1620 0 R 1621 0 R 1622 0 R 1628 0 R 1629 0 R 1630 0 R 1631 0 R 1632 0 R 1633 0 R 1634 0 R 1635 0 R 1636 0 R 1637 0 R 1638 0 R 1639 0 R 1640 0 R ] >> endobj 1620 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 743.384 506.981 755.178] /A << /S /GoTo /D (section.2.102) >> >> endobj 1621 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 721.166 506.981 733.023] /A << /S /GoTo /D (section.2.103) >> >> endobj 1622 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 699.074 506.981 710.868] /A << /S /GoTo /D (section.2.104) >> >> endobj 1628 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 676.856 506.981 688.713] /A << /S /GoTo /D (section.2.105) >> >> endobj 1629 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 654.701 506.981 666.558] /A << /S /GoTo /D (section.2.106) >> >> endobj 1630 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 632.609 506.981 644.403] /A << /S /GoTo /D (section.2.107) >> >> endobj 1631 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 610.454 506.981 622.248] /A << /S /GoTo /D (section.2.108) >> >> endobj 1632 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 588.298 506.981 600.093] /A << /S /GoTo /D (section.2.109) >> >> endobj 1633 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 566.143 506.981 577.938] /A << /S /GoTo /D (section.2.110) >> >> endobj 1634 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 543.926 506.981 555.782] /A << /S /GoTo /D (section.2.111) >> >> endobj 1635 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 521.771 506.981 533.627] /A << /S /GoTo /D (section.2.112) >> >> endobj 1636 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 499.678 506.981 511.472] /A << /S /GoTo /D (section.2.113) >> >> endobj 1637 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 477.523 506.981 489.317] /A << /S /GoTo /D (section.2.114) >> >> endobj 1638 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 455.368 506.981 467.162] /A << /S /GoTo /D (section.2.115) >> >> endobj 1639 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 433.15 506.981 445.007] /A << /S /GoTo /D (section.2.116) >> >> endobj 1640 0 obj << /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [488.624 411.058 506.981 422.852] /A << /S /GoTo /D (section.2.117) >> >> endobj 1644 0 obj << /D [1642 0 R /XYZ 88.291 795.961 null] >> endobj 74 0 obj << /D [1642 0 R /XYZ 89.291 395.05 null] >> endobj 1641 0 obj << /Font << /F63 845 0 R /F40 549 0 R /F47 592 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1647 0 obj << /Length 1891 /Filter /FlateDecode >> stream xZMs6W(y"xL43m|KrEbGEJ"ۜz ܷX{'?~eB0pFe2Da$9A)+EyZVl.޷&n'&,$r8O(,6_qR>$L%Mg)ɧ1lB%R kC׍ , 2:^l7&rzbX UQR%| iF{WMy_}[o{7;ֺ7]z[_ 30;b$CMSN` LjԏӰ*2`> %/\:@*G&6#alͩS},~̘]&lY9ugNTRf!n?n u:5I"¸)XR:B5jK|؉GpS"FMA[V+1轋MU'i[R%w޸tVbuƍۭ8d88{ b9FeS"Ϝ#Q{R vM۪_1XHqg&ȦqVi$%;"@,((srF t fsNM D=FlVG"  C5S=/-M+1 X 8' 'g3]G67mToB*U;>h&keAٴ̕MŹiv蔔]`xx#`<OoW hvzQke79#֟x@)R~QoL2 [Vb1Qw!{iAgi;4ŋ1ݘ N^e$end6c 1>@h@ GZN-ŗeu!C"ǰQ~24^&b^Li~t2x'*Q)N$=EEI=KŠ^ #:MɁwJSfSNe 4D\ βuvke(zNBQ1 H?hyYLCqk@/ZG\^U(}VzW9T^ ś"+sֻU~TOqnW~zkv+mGeXmMr^Gڄxs[V 2FfLIÄcc22 D9FQKI :Nc[wڷXJ!քg@~ A{mݿzպUg m>g%kd8+G@Y9@>cm~#3dfӽ<3_ef|f27KiU3}~HT!XgT/ C)ir.lАf}P4*FA5gURk}5tEKy7zxz RЦ;ٿy0 ͦy0/Ȇz|}3"sAL%YJЄ܄0P!(=<2h|k'`.<Yl}i*}ԣB7M^"q҇#W60Feqsu0W`Ȳ||YWM4Cg_ǾXPEL_;sAX@:AfmI3 ELJeН<A1`> endobj 1648 0 obj << /D [1646 0 R /XYZ 88.291 795.961 null] >> endobj 78 0 obj << /D [1646 0 R /XYZ 89.291 673.267 null] >> endobj 1649 0 obj << /D [1646 0 R /XYZ 89.291 573.502 null] >> endobj 82 0 obj << /D [1646 0 R /XYZ 89.291 507.573 null] >> endobj 1650 0 obj << /D [1646 0 R /XYZ 89.291 434.907 null] >> endobj 1645 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1653 0 obj << /Length 2079 /Filter /FlateDecode >> stream xZr6+31cNL;δq6 J-vdR% )AP${@s43}۫o>p 6$˴AF$)\gN>E>A侽z۫?XɈˆHCMկ_q6[?d1G?!c3 e꧱%Ő02^Cޭ90I dJ#0$K9GFPk: JĨcm˙ 1*ܟUe |l?ΟbimvC4EBsrs}]Wu#[#$LlEj0&϶]es}(Pk0YY*Dpz LbV O&,/ˢWۅ ~oӥm/k2)E4Ѷ6rti "m)^mk2:y\XXgN_1p+9x]S⪮Z[;~`Uykw2/ǫO֍ac؞ .V#4vE ?H aZ h1"F_ۦqW7ns$$x0nwSUe8ZOކ={OW5C=s l'b٠17KDb$GJ̥/ ?Ζ['}}DgG߆u*wjL9Uo)Azb urQ;M҉UXq(fp}ZnWK7pb";.B![ϢA]81)v1f6Ajyqш!X,qk$=I;ɢWf~"YU]DY6hyz3!Ķ{5oT o#vp"o#-m3p!>\wy[T@U9@Vd=)ϥАV4p$?){JDеGߗMC^XCrQ6 ]tSO;l 54̐UCnXJ)f̟U1?@4h/\a@^-rťڎ*)5LK1|>BPxFT!4F}NjIڥ9D(ހ\8nqTeۻL_1 ?P&,6 a[SX½uq0,'=+ 'Êitְ֮\kK CHӐ"ۄ%›:s5]A1P3xmʅ2o uTơ"ΟR@;Ϊ=X6E"8S 5G$lI^NbCXgy=?[btr֠h=SbÅv)I6@Ucf,AH§onq9Js:Am8 H~qE)m))NPM@;SôZBtzx+?ד4;^1Lgw-%NнDMku vq#TQ& Y !J@8[S}Ao^AlbYCYy"Ť*Eenj. 4 lQv6@,54 4x&A"& ICE:T ='sF~.6/W{qj# ' +&R:1k=usXNiPDԨuePLƨ&{gw;S WQ4cL,=Ta%sm#S d -8\Zu-8gKub . rׂ]´+OZՓ ( ;]_ꢵMD:y[s2M}}P/ÿ`ᵣŦ6<.-da}N1R8 Da endstream endobj 1652 0 obj << /Type /Page /Contents 1653 0 R /Resources 1651 0 R /MediaBox [0 0 595.276 841.89] /Parent 1597 0 R >> endobj 1654 0 obj << /D [1652 0 R /XYZ 88.291 795.961 null] >> endobj 1651 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1657 0 obj << /Length 2284 /Filter /FlateDecode >> stream xZKs6WhoҔ 8xMRIV-Q6keR!qߧ EДI5w 뛋s ifH4p8ABv2/ZPkV|{qus xAr8O$tyط N·CI/>\4MBJ%!x?ܧ&, dCI$l 1w> l1Emʢ/ynmiwҵ{nH[ c  fCvيrrSOzE& ] %_՚aL͟\V١h&/ 7TpHD\#"Y} Q'cC@u7~03v;865}6ݼe@^>}iEv6n>V.̼2_#LXg,a^HeŠRbr@&QQ$a`uSECӚ6r oh| Jg_X_#rĺq ALݯ"0O1nR"-g]"P I{qlJ`K͊A-$U&@eEUi1)``>0N|z K@` Q`90yp[#ֱT9C !/wXU`&Lsv#4YuFb>!3sWVQ`ClG)ш)l%HQOFFLz~Q Y T \8XZ6+oT]Aغ;@y%1, \ջ 2$Y?>:ФH@4mYgP DsY rK}>FQiz&ˋkBIߗ&y̋;Aֳuכl];ߴ+"ٸB"M((\y=2InKL$.}ȋ2[KW^;߾/o}qEifҏgEnui;_Cn̿@Gwұl]&=OŶM?\<4!151/=Z=aC>ͥ'e/^S]y Ǽg e@K8ÜYI90@~z @EEj2? n[u>;QiɦE{Ê[h, Qm2C]2K]s`H4r# ,+l\Y^0DYĠ{8qrO v~o2<1@B$1Q ~ͤf@b.=@n顏1ۑ=* ,%Q06/&F& I3U7$wm3 .D?2RIas!Aɬ 2QfR!!E?K]dcB(U6#s1Y)RHiցB^M =S:s.15i|ƭ%h]9JѲ1C:AsUӢՁ ֑*ǨP=)YKPF),Qg Y$ KMJwI*ר8drZ;wypxU"<.We%Rcd157ܪ\ٱX4oK(؊Z]5"VYT Cy1zh1-;/wN 1Vd*׷ѱtw^mم@K}7z<3)ɻ){Nq ,<..O]fRCڳ[O=Ok'bZ!wx5ǹ~)A2,LL‹ /@v><n /;(4*g䅨cPSH`Ī_;:Ys#4yCPWir8-J_lLl,`$u n#NE}VL|\>W1ӮҢޕՃMafSV[W4iycTz=$(M \ /{7X,ܻ' ;┈1>62|G{Egn"pKpWCҾuׁ#Imq7}VhϋKXxPO%7})kgQe 4шL 7bV~ endstream endobj 1656 0 obj << /Type /Page /Contents 1657 0 R /Resources 1655 0 R /MediaBox [0 0 595.276 841.89] /Parent 1597 0 R >> endobj 1658 0 obj << /D [1656 0 R /XYZ 88.291 795.961 null] >> endobj 1655 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1661 0 obj << /Length 2172 /Filter /FlateDecode >> stream xZMs6WhO|d.${:k%DJ4niVu?M]yl}c|o_fӗX߉Nje) -XHO#%BiLCP$8ߥ#BPDYRг&5\Vabt A-ԐQSưc5*$ƫ[lsIKΨ{vqC0&S6M޵/!17P$O^D{7G}L3NiFH(3$Y[3,~Jfk3Ǖy.Jh"hTdFgV3Mcdvɤupcצnp2\';}Xwצ@wU?LGQTDAKBA>HH>BȂ@0lЛk6jb3^i.8;,6w_`3nb 񕸬j;t'm/sZCj;(_\d3_OjSU:<=9HL H_<?̰6azO#^F󔓧*RH¹LJT]zO*ث$ R b"թUZCb#-' RHEIaR U4$ƫ1#Ȃ8CycOhJC0q,?v] d/X-uhēkv񧩇zg:ӛɔ ɮ<wO#ޏ𦦠]HP׆Çe]oeBE@sPA젦^@??ͪ?͘NcיdbSEX3З{pUmhlo}eg-"쳶DO>ʑ~X bVHdcI? @2%}B~@ī}M_*S|q-hQ)t lnE߷JۙUQ)yJ2J0bRWg+WWWIAnjtLaYW1ݦwR?зݮ"[n6է^{'M vmtZzG /Ԡ.Jħ4yq wgئ 2jjۘt6+Msxi䑟sgн>͂iTP]\Ay lsӳ+ncz6漗y9K-֜'{:;WݽP00+s;Jf]DnSƜ-_IAMd}a]{ooW^n‰Y)K(/LNCNk/Ŗd<!g$191F =Eg=:Œ}tU3sDҞSj:խw/4ӁjJeFt 9*1U6\">Yg 䳰jK endstream endobj 1660 0 obj << /Type /Page /Contents 1661 0 R /Resources 1659 0 R /MediaBox [0 0 595.276 841.89] /Parent 1665 0 R >> endobj 1662 0 obj << /D [1660 0 R /XYZ 88.291 795.961 null] >> endobj 86 0 obj << /D [1660 0 R /XYZ 89.291 608.636 null] >> endobj 1663 0 obj << /D [1660 0 R /XYZ 89.291 535.97 null] >> endobj 90 0 obj << /D [1660 0 R /XYZ 89.291 421.295 null] >> endobj 1664 0 obj << /D [1660 0 R /XYZ 89.291 348.628 null] >> endobj 1659 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1668 0 obj << /Length 2402 /Filter /FlateDecode >> stream xZnF+nkX&@l3qVIjXCQsAHJ*$ESu>νUt񼠋O74f(qԱ:qe$#jrpw}x槇?od[0q:|cqsto?/(.77 Aиz]r1t&/D~YUo#F}blЏ, P>];U4@SJXnwu\OA+ACmHapi.MGsEo.xSʃtS>%&T:pKtPSx숺"&, QBi`" .FI87Q˭Qc"1zIgP-Pʷ)#ΈEvVŦcSgT1H o"A\ży"<26ׅ 9@S(ޖw ok Ý,S繂l^RT7.-wuY0*8w-oi-flY֗R] gM [<!j5eSa@B϶"͈}+aCmY;txv018#>HwqUH.fß)$CƳoaDpG!xtD2HexΎ4EKss_So*( KqG!xZM/cqI1TǍÜYE̊q< S9?~"_rQ#X}7|S&r(/Ѹʗȗ0%;_S/S"1-2erL*VJ@]&Q@ ³MM1=qPۇ̮G?dMQ8ٶLEj]뷨k-,Q39a0x+&Ʈr AelV UzgEviTsuۮ.CtS'X3;yY7>yʂdϣObW'4Ur 5/uX+ş;eP^9 s[Rrҕ Py}J縴O N`jP4HK2 AIU?]#&TX{a.3If3l,?ˁYzOϡw9^?緀t]WշsQ=lF<.2sJ#lcg#0@ҧ0A y Bģy{EXO :ǽRH;jyw᭠z)Zc-|'C4ďq,c-Br-@5ܷ`b Ypc)':ƷSK±p(Xjp7nz' j==r/ HVo|U|O_%;7}9|:{Hf;eU=D >L,h49ҙ>ؿE>S|} LJYjI&L9y*sAYjXM2[Fusr&Aea6'Q]tBEg# ,|X5ÞE?yUN1͡9[dW!6e6DRNe2m;艻eyio']\+Pk%n O`,HG3@#*4ou6[>j{ywA0%l4NhM9p4ŭ/E+-cU͡AV凲wz}= 5י'+{Pm񲴵gHd#=ɓHŲF*M@[.AOS27Sb<qi>T d1{(fM ÔLo!Aq:I- Hu9l5AҤ8*hGd KFy+ nUK\>"\/˺91cy*U FQӦP/+e *9M,rX4s fƊxAO٪a2 Uch`gLSbv.f:iӛG(gy8{x^;vjv;2"8 endstream endobj 1667 0 obj << /Type /Page /Contents 1668 0 R /Resources 1666 0 R /MediaBox [0 0 595.276 841.89] /Parent 1665 0 R >> endobj 1669 0 obj << /D [1667 0 R /XYZ 88.291 795.961 null] >> endobj 1666 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1672 0 obj << /Length 2032 /Filter /FlateDecode >> stream xڽZr+,2̸&Jr8E-AXCRq%_=<EtFn@x8>=WLWm+ YN~nfXl.>U壿zlgwL$dw'P>'tv9鞟.Tj.0G*BtB UhGb:On8z P%mQfMaXvծMq_ 0 |)S"<(nN) 3cΕ)4)<`O݊0,<^:œab枠G BWT!ݲrOӣP]oWb#힘cF2u SD`c.s(ƙBF{xPb@=v#,ֺtV])a$5~,7 yѢr,5^jU=FKzP. (μd6$8| !Up?nۏ-j3n %xZZoں<,˩-^H3vѩmplVT݂Btddl3R 8| 4. d?&4zN\4B&\sO)aݞA4K)Afvio.:0FW_:8hNA&7,?hRC86yN]Iw6ФG U I.40ۢH?9 jʐ{Gy&0 +[@IqԽO\@b& ]GiX[_f`9 ZjB{9Enj*Y~OWcWqZئYtofm-#IO87Y^N>]]iĴ/*QyCxT)d?}F̉X];L\5:"^,Jd2xz T r2N !@ X=8}x~N7G̹= }d[- b#dЦ=.&vOwٹ^?I D/g> endstream endobj 1671 0 obj << /Type /Page /Contents 1672 0 R /Resources 1670 0 R /MediaBox [0 0 595.276 841.89] /Parent 1665 0 R >> endobj 1673 0 obj << /D [1671 0 R /XYZ 88.291 795.961 null] >> endobj 94 0 obj << /D [1671 0 R /XYZ 89.291 426.948 null] >> endobj 98 0 obj << /D [1671 0 R /XYZ 89.291 308.882 null] >> endobj 1670 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1676 0 obj << /Length 2378 /Filter /FlateDecode >> stream x[r6+SmrTU3Y,f"Sn~Ch-( Ĺ8^?ξI, fW73ĕӖ9-gWo翖Rv٥LբԬK#m>_g ^0+I ~~yƙ ~6)rߝMەrTrɂY@%LVuTx* JǠ `cYy\,-g.?sû`ߟUiɿ+77ղ2&F/^ q ÜPS6R:s^OEjΌ6~Ci1sL?4_(ǻ.a)z(f,Zs,^oP]_/9/.bsE`BgۮƣІyQ0ZMsa#:&գy[}/Bu;8#zueCߛfQI<>(xsKuMa܆u9cNc2Q_ *F0tT="FMQ`#:6/zS._OI&^K@31fM9=-d%Ĥɀy0T+ʵ K^̃n+* IPV7tuB\<,JYJMAaL^mi1g̤J>q;{2M&{d:教i ' >`Ɲ(P܄L+ fGT:>hA6V5F i4itX5lXV5"i\0h V2T7MdXĸG6 ]n^&yrLZdAsu*7 SA>7gv vAEQ3eT#5";́t>uw*oho*HFVaÁ0i3OݕT1Dd! (pD :Y;{nG o#tYe,u-v6mmΆ6qȌ۰`Q Mzc9 ~Yl(p#:Bye˲/C/YeY߶[ {ihZ_iuzY})ESaQ&}jq#`QQ|Q̧NQ5"!B j0Т틇a[ A+P0\-:ۮ~p+m^ީz^K Q1=.NFRH |Ǚ̑tkI*r;iQdaE51IJv7Nd"ca⨠v02Nd>%2\z6S@WڏL#]aNG>Dfsf 4OƘGX endstream endobj 1675 0 obj << /Type /Page /Contents 1676 0 R /Resources 1674 0 R /MediaBox [0 0 595.276 841.89] /Parent 1665 0 R >> endobj 1677 0 obj << /D [1675 0 R /XYZ 88.291 795.961 null] >> endobj 1678 0 obj << /D [1675 0 R /XYZ 89.291 739.378 null] >> endobj 102 0 obj << /D [1675 0 R /XYZ 89.291 487.838 null] >> endobj 1679 0 obj << /D [1675 0 R /XYZ 89.291 415.172 null] >> endobj 1674 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1682 0 obj << /Length 2071 /Filter /FlateDecode >> stream x[Ms6Whwjtd4Է&ɦm(+M_(qŢ%j.axo_v, &q`V❻յp7_Ȅ|_xv~8Sg;?fieqc\( 7)|zf%u S=77MڧfL@Rg߯]U陖y L*כ/gJKͮ&X}#F+ttbD{b~wrz[J L|V102k= `S!#s ͆LӹV/|Z?SQ}~]5VI$*L2"v/Zݹ6+MG'KHx_4:ؐ HINl ^hvakf⩲U- eLy8A5״Vћ6Imꔦh7"&h9}pXRGA$QH٤Q̏F2~i(7@1EJ&V^YeYjÌ׭,d鴡e2ڎe Nۅy+hPRbjD`Hᤒ?2/gqdeh}U$bXrVQ(:1Uŵ \ԨչS=Pp6~u,cK}LVzsVmsH"°e)o/WC@AEVI#fF!lPS4(gڢ +'H0($8r} hĸhI$͉9Is*x,S  z,\0%hp%ݙ"i"UccNp:ǂPU)u>R2󴬊X-{xNVՀQ<YPISʍ|B6ImU84ΐ"u~G렾oƘ> endobj 1683 0 obj << /D [1681 0 R /XYZ 88.291 795.961 null] >> endobj 1680 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1686 0 obj << /Length 1914 /Filter /FlateDecode >> stream xZMs6WV9!86iIfڙƾ%9lHq} %52 ow@&ٻ3/^*#lHvyi('HRx>5|-X_.?zy8#aaiW4͊٧/8o2s1ęV]1NCjWj$L2Ƹ[~Ij5ˋA e>[sbٚe 11`sS#&EyEtlM"(20WoL*7ͪ&^_'cp 8ܛ΄_8:5Ɲرj}k;[ý\iMs]Z[~>/|-h{LLv{[1L)ɪٯ+{.vNV)dkɐ p?k- Sp^o.UfMUΆ.ŶB3>^UeU}s m]__x _ ^-r@cwቿ;ݸv0[ Mah6ʯ~M#?zc۲=c>H&~LVnc=98D6Jg@ !yiHH l)} B'j[ۻcoKST7qwz%9]6(D?mѣ9@p0CyQ4Ά rS>mBW_C.λ bEs[qHQ/(O,x-!2u =* aΒRhsebJe HI'm6'd[_NAJܰՂAeLOp9)ʒSL 5lC:6[ ?rn5:jKyc 㚩7ʤ` q\PডWow{'R3|G?QKQ,Hƕ@g%pA+#J"X ]sQI@$s1txr"אsY-Z=MWCBwM'^3!ΤK:8aӹF$#Lbq2zꈵ aH)%ɢb6C#$XKA=Qfji`a "}.qkED rwߔ5) k4Hڈ8zЈCF$ͩ =L4 τ0G4$A &B1 *%`)lCrU4 *1mUus4Аu571tQl rDnm5DBܷcA6Tõ24Eq/JmՁ삼A>\v̤*dlQ7/ IpCfpw_Gp(}~ }*׀?Bʝ;k$\ZTispDFP\;K,:m鮟ƔNӜ-L"7`~9MT}wu?grg6)O%GTP˒ 5$I&hHfQ2II͉Qf$A2#O/T#u`ɚʮ*_@b!…g+Dգ6䗎&XN:*2-M$ ݡ;]$?=η;M'a^ɫrC@b'OKk$eiX8Xwd!T5CroqaP. Pڝ<`s#_fu؁"S.G;Q9AJ iYo`GȬ@DJ!:=L$8uT'1Qas2'LoANϱ79<\TIFt'8Cm̉ endstream endobj 1685 0 obj << /Type /Page /Contents 1686 0 R /Resources 1684 0 R /MediaBox [0 0 595.276 841.89] /Parent 1665 0 R >> endobj 1687 0 obj << /D [1685 0 R /XYZ 88.291 795.961 null] >> endobj 106 0 obj << /D [1685 0 R /XYZ 89.291 708.554 null] >> endobj 1688 0 obj << /D [1685 0 R /XYZ 89.291 608.789 null] >> endobj 1684 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1691 0 obj << /Length 2423 /Filter /FlateDecode >> stream xZMs6W͒j1.ʻoJfTHί߇rH 3R2tE ~]ݯ?}4+F>߭2K8ZF29z6_.Fquy]狿a b+&(W2Z.~6yE꫟[ "Fktp&QTMno C2b&\ĶEj$LEf(35y7UԋD;C ~rGq`w'?=N3 .9avF'~țS / @"v&!1H 6? Nevj"Ln\%erCfSݷN <:'ө31Hml?Hz0_vTQr[K |~x 2ts/TjP&Z-.HcT2q3l;*PDaehzPJh|w% fxa! C.b_X]?zan%eù ru1%D #j1\ lʪ h)ipm~8#08R=.0A^.5ۆA& ~󇰀 gԆq#E؍D9=*04zߺJmaV7( {žؓ*2dP(pQPK |@N+۔@P"ī{a6vih6O,S`^?O%S/AR(J'sB\<|?y;\DpNWw)=ꩊO2hf}>䏏.8D_@̇u&p7$RF*vAx@us-8mFGyYqm]oÆ] Lvyr]JhvnaWћk[weoXЦ/Li#2bu}QM>1K=fvSTC"q 틉Q\Nkzҿ2GLg\2PyP΁98S6n񼘙17SzD9\g?Z\S$RወMĞ/kd)=ݩDH>踮W-<3:N==SO2ei̊g+g3e˄_Py:N-"$}=p'ʴ|F #vsHXE4IZOLŌŤWmfjѮΛ؈\y6֯((w7veW^LseSl_K?4WQg*}98a,UY^blyW(.*~Tx7'hF[ EQu\Wf3^7×]Y{ VmQUރ̩y[+e H@\y endstream endobj 1690 0 obj << /Type /Page /Contents 1691 0 R /Resources 1689 0 R /MediaBox [0 0 595.276 841.89] /Parent 1694 0 R >> endobj 1692 0 obj << /D [1690 0 R /XYZ 88.291 795.961 null] >> endobj 110 0 obj << /D [1690 0 R /XYZ 89.291 539.248 null] >> endobj 1693 0 obj << /D [1690 0 R /XYZ 89.291 439.483 null] >> endobj 114 0 obj << /D [1690 0 R /XYZ 89.291 238.062 null] >> endobj 1689 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1697 0 obj << /Length 2063 /Filter /FlateDecode >> stream xڽYIs6W(w1q]@KD"j'~ҦD/kr1!}0mftv}A?^|Qfuce&Fj_6 ۟,ӏl%2}vݬߖBq5\030h&gs(-?Jg+iFpvgHn. "TERf]qʔSNsgaʩ&B1.=X2">c)FhS{}qU}*ДPs-bS$8]UkMqd$pЂtߚ)yZ33@ 22J$( +) ES[WחH Ed1a7W7i3 tO?l6.w2XVX;/v0}~n}ZUYI g=)K!o^ CU8NcK4= >!ƎP˰qm‡'O)xء/sj>CHK1&4t/T+|hW!<}[ݺiߖQU&-+Х}D2Bm:pEEJҏ5u$FR lO ( p+( Q_>DOͶݖS~On{LN:¬O.0pH;DlUS:Hc䫦|Ż׮̍ |$4gU"#Q}>8uVᮗY7WqP3 rC˾ؔ_uteC^N0N,^ּ+qA{fǶ ][ٶoYh[M߈ gca;NNVoԇso'&?Y`bМ~Ÿ܈#㎑_*XZFL>Q28M)\ׄ! '1)G )<&A<+M_NQ9Rbiqb[+;4X= (럀}yhS͠3]22(}8򝣰̀ xQ'z<⊈apEe}2f*`K)Weh! AuJjmY6M>8\OU2y0X7nR:fvH%ax=>1U>m]LuVB0U7]v"\`'_>W)T)OxNI99ՅY<5 {qyIp7.tp9_g9Qa8(zT+i endstream endobj 1696 0 obj << /Type /Page /Contents 1697 0 R /Resources 1695 0 R /MediaBox [0 0 595.276 841.89] /Parent 1694 0 R >> endobj 1698 0 obj << /D [1696 0 R /XYZ 88.291 795.961 null] >> endobj 1699 0 obj << /D [1696 0 R /XYZ 89.291 739.378 null] >> endobj 118 0 obj << /D [1696 0 R /XYZ 89.291 646.351 null] >> endobj 1700 0 obj << /D [1696 0 R /XYZ 89.291 546.587 null] >> endobj 122 0 obj << /D [1696 0 R /XYZ 89.291 459.01 null] >> endobj 1701 0 obj << /D [1696 0 R /XYZ 89.291 345.696 null] >> endobj 126 0 obj << /D [1696 0 R /XYZ 89.291 227.807 null] >> endobj 1695 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1704 0 obj << /Length 2740 /Filter /FlateDecode >> stream xڵZKw۸Wh)D٥y&.&%Jb+ߋ)$l$$> O<ƒ_ `C&6BKqzSL_Ue8NX / "F!b(c$geqKAFbzʶiVHd4Vbi5Ocs i~?aNT_\e]}{2' B 4xbW?blvzȁBJi700]^e<]m}9[֛3ll[ouz /2ӈk՗Mf9.4qF؎Eq NSYe]Zg;\ _a?iR0̪/ Л2g6>bCXNtQ{:?fDL<q i9v& 2#p%ʍC8  b%2&1I<36u2pVʾ?k<"1]ʤΊw꺲~ QNATPӛ{ \}3B'ۨ(E(b# )D ȤF@DJ(:b@<8Vۭe {iT׹ 7U 2; K!mO]2͗i&qP$,YcLKxC1)ߊZ `R=Bd6m'úZݥ*)8s1%,$,׷]W26F^ƫv(e}r *mԡ:*D P G} 7~Vs^ r309=шĀJS*g vaF"H0/p#LM?O6s i۲'$k<-s*-Ul}}Xxo<!m KzԮFOMVFɊ099SG@FJ168 LGH%cRXP=:V0 CI.ô'B PsIPX!.=o,T<&mpͭaO,&g{>@JϹFvҧ+Χֶ׊5w,fQݜ_o\Zv;b{˴ޕy6?,%jrS6l侅-6?4 #쀊mI;Ui 8>S@RdЎ%8p|G $=͂c6,؃=EV519{d;hN}neR'Bs~@#/W@rWM[6!@XVBð۵sP mӳmRR*kA S/:ʼ12-pVN}oeN)["U+7 tf8mF$#:>2 d}lS-ʂOp4xƧB2IBY2 K}1^zVfdFlGAq܃{]oX69XqcOEml)u}:G-O$,cF2dl%a(JNzd]. $!5.%eL|y#ĝuѝ6e.q]z Wmf@~hcC}<g;ƃS@wuR.O԰!m.}avUi2dpz9 ݂sa]tnj+{H-<+ud{M=M7;-4ĖJ͇~+ИV3ǽt~Fψ~A2!cڝ_m9wjzLc}l#=}C^@VL W]j-[l D )EQ ʵcOծXqpagBq_`T`j90,4Oӗ_^ƪl.|HɮJE47!{FTGaq]ʰx_ӍCi>,6zay=? I9L[@s7tsbFF}Ճ}5́>Π lgwL_eg Carȝ7N?*n O/wBSWد .Q[|Y2l[ۼsn?R_ ϹM}q.On endstream endobj 1703 0 obj << /Type /Page /Contents 1704 0 R /Resources 1702 0 R /MediaBox [0 0 595.276 841.89] /Parent 1694 0 R >> endobj 1705 0 obj << /D [1703 0 R /XYZ 88.291 795.961 null] >> endobj 1706 0 obj << /D [1703 0 R /XYZ 89.291 739.378 null] >> endobj 130 0 obj << /D [1703 0 R /XYZ 89.291 494.661 null] >> endobj 1707 0 obj << /D [1703 0 R /XYZ 89.291 421.995 null] >> endobj 1702 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1710 0 obj << /Length 1710 /Filter /FlateDecode >> stream xYMs6Wp)!&pxvԷ$Z%uhx@(Atł(hLEB F>4aXjYrK8VdDs<'_?|2U\ݧow#4a PmG_d>%kfc"<{W AUCY9/总քUY]9$M]j*@S}vOo隰ڽ!؇3 trj%a&MLT6af-lX,2FR28ȻDHTM<'Lo&Sˉ(Ibdkn D[֝vךDZ1r{"-|Y}5ƚXիb+H`E-oN%<ڹti)BoTqbShx2va&I2px M\ ½"˼|]듵mWOk G*BvxmjК͎&01CPdI0qVclLF-BbyF\xKن\[]QW#Fnn]6WhEGO6{h~n8\x2.E9HJMN̽l۰GĝwI:pCH*=]VZ ʉyaH%> it`|EO\ǧ5uSdۚ%o]Q>?yM{2&(̡4qnBgz :r aRaMA1i+m/UW:[[3p*yȎh-zo2O4Gj.~MцWslUS^wQ7(r\݁UAUP2޷+ڠ^z#hL@R)L̊c,R=q7'8HwOjg|iQe8ts߽ lgʵxEY^f M`pۚ`м91f K'm'/sOZuI9Z.U9/ 䧍|a>铅DW<֥HT,.a&鄧i/_%1#~|@_$:$zr+9.\|'yT4h Jgk:1*iͣҺ3plqK?w Qe?XZ C0_EkFm1㍽cim8yX[w(y~t~E՞ՍNכ.k{5<&윢[,Cf?[= endstream endobj 1709 0 obj << /Type /Page /Contents 1710 0 R /Resources 1708 0 R /MediaBox [0 0 595.276 841.89] /Parent 1694 0 R >> endobj 1711 0 obj << /D [1709 0 R /XYZ 88.291 795.961 null] >> endobj 134 0 obj << /D [1709 0 R /XYZ 89.291 708.554 null] >> endobj 1712 0 obj << /D [1709 0 R /XYZ 89.291 635.888 null] >> endobj 138 0 obj << /D [1709 0 R /XYZ 89.291 425.928 null] >> endobj 1713 0 obj << /D [1709 0 R /XYZ 89.291 339.712 null] >> endobj 142 0 obj << /D [1709 0 R /XYZ 89.291 240.822 null] >> endobj 1708 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1716 0 obj << /Length 1873 /Filter /FlateDecode >> stream xYrF+SH9}9:Jl$d, j(E fyz'gה$# I.6BKqe|Tj`d7Oo߿|Uc,(G./|!]/ϾViE)&'#ftrn8Z'~eb8>I܅"C$KĄ¶v\&T2Cmq؟tSqHIo}|A-p`z]1bxPW,Ŭ| J@)[i14 6?c gai`a7C#ZNk5M㹛 Uۦ UZKEUz@Wyc %HQ96HٞxmD So*^ h4bu6;g٪Hu_ lj1ރ[@m,uxx8 ^Na<8{i bT1.p_EB,Q,A)Hmjvj.]_Ol5'V"s/eo(r `#= Xl=PXXh~iWE}[6Ete?ݩ_:ѕ,Hj`=浌BVND~UIl `ڇ}_ ABM*8 QQb|IBQqfrP3ӧd\O2[yrcPbLݨ&L=m㑊+ب|.nc׫sі  ᵃMY ]ۆ"tGi;`S,HC8BT[[r5h>z un~31ɌiMT3dBa/7 Oz|a'2ؒy ܎}\CSMOwhBJq֞}v*m uzPlUoc*w,uWq Z[\1T6PuU' Tźh?8MbcbrĸA`e)Ӧ,> endobj 1717 0 obj << /D [1715 0 R /XYZ 88.291 795.961 null] >> endobj 1718 0 obj << /D [1715 0 R /XYZ 89.291 739.378 null] >> endobj 146 0 obj << /D [1715 0 R /XYZ 89.291 453.16 null] >> endobj 1719 0 obj << /D [1715 0 R /XYZ 89.291 353.395 null] >> endobj 150 0 obj << /D [1715 0 R /XYZ 89.291 268.055 null] >> endobj 1714 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1722 0 obj << /Length 2495 /Filter /FlateDecode >> stream xڽZv+X~?ģOGdxhH@MIx`֭b :xs'G[-###51/n֋_/J庻?Is2]\qI]]<ܴW~a>]@5DH(_5~yApv>,Bc]|G4jsc,A`sŜ+b=b8-{^egҫ9|w(50ϣ!c:Y"γZLO㿨12Ѧ/8Е|6u"v,jqQEۦxm[7acUǮ|e}Ym4ioe_7{Ԑۦ&C1 ֋vH*w$NQܭ x|gcW 3}1: ؖE_vG.a.Ӓ 8=CU3A ҋwM5be*9̜`ĞǪ3b‘sGb15'YX5w1NM MNmLMlCS`p;9zN2Wq+i?6o+DAU]괅xߧty-VbWb?TefI8轌D<"0KDG0 [:38;|fqV=ypJ '@Yd g,|7~E]5M|з2yP9_}0m_AGqs,:+l((mk(?ؖwQtjFKȌy%+x>dVq`ND8 R>n·6 .vCۗU[^ օ`.uӟvWl0?wd5H ]b|q%XO;3; >''E,Ŷ]t㄰L:Ba䠗~Oarň%a{ JRa-l[.? WRng-diAz@ MHgQ7}޲9r_6)h AWςndmq/S/pM᧥itk"{hN_ rҐ`,zSY0#<B:bA)QM?z(K(6MK,Y WS/>/W)I!Oʄ)a)aMS/TT&L.g^H-bOm;9PĩhUI|7PBQL6k⨛ߖ[':XA x-Ϥ(BLo6z>Cp2i=eR0d`tR=)|=Hqumjn]Wh P`;Q KUlῠy7yZHuXg%/0uV0Җ|]WDDy(h:YnP?;u? 'e/5lzG.A6}qVeWNcP~LF`sGS%="\EnL6^<ː jb׊h o >5d]լ‰[LJOMbab$"62q H=={QK:2|}komj*|YBhb Bh}_FtȈJQ& s}Dm{ٯ=:aԤ)`۵ͮlY$WǍ8 yQ-ڕ|le1,uRThVj5H 3X)6psh S/O?#|K}ϙÃu?|J6o&ͿDiI[/EI K4?t~G"(KL]-1f=O6=Q SG:rrA,Xr-ܝ6cƅߖ#>4yj"rU@P=lK}ꡟl{yb54áKl#Cʮ#ō-`qH[I[oMg<&cHV#Ng\"jk>C%uɧZ-NӜםN#maO\3$}/bKd18̲ȼ3d2|?ߤd'G?g$7-X"obI$#5G)fw oiғ8=2Nw@-|{<$ P{@M|.4xVY|6~OJ+[6;{ endstream endobj 1721 0 obj << /Type /Page /Contents 1722 0 R /Resources 1720 0 R /MediaBox [0 0 595.276 841.89] /Parent 1694 0 R >> endobj 1723 0 obj << /D [1721 0 R /XYZ 88.291 795.961 null] >> endobj 1724 0 obj << /D [1721 0 R /XYZ 89.291 739.378 null] >> endobj 154 0 obj << /D [1721 0 R /XYZ 89.291 621.462 null] >> endobj 1725 0 obj << /D [1721 0 R /XYZ 89.291 521.697 null] >> endobj 158 0 obj << /D [1721 0 R /XYZ 89.291 442.157 null] >> endobj 1726 0 obj << /D [1721 0 R /XYZ 89.291 315.294 null] >> endobj 1720 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1729 0 obj << /Length 2068 /Filter /FlateDecode >> stream xZ[s۸~䉰|MLw4}Zl6T<9Huδ/1E;7F>>J1Jbn٘p2N|NlR\-w? Yh"& ʿey'RxsDmF"Ap~>Shk HJv1#RYc ף?dcLNB[Au` <, <\E|fq?oFjހl^~z1CΚ}UWtNZޡ}~ \d| 2Ǻ5]$j1^Ӕ~оz7e7x-_sw5YEYi0(ʍA3!_u#1) ^*G/|Y2ȖL-xxi~=&KNB5c8;g%h_Y Ê]TP9.kiF<|\)7=r u2R C\+sfaۆ8i[wM28 !1 ఇ*jx; {V/"3M!љK-j΁܊\aԐ, P)wS5 0(Ƈ/B]쾽^J !2Ѿ0.էPG!-t\qls8h6urYVd>r,!ܓÔG@!`[ {m7h!Q@3MxEZj>J6[|%.d.4/O8$F{&A:x: >v!RKfB|5PqRps| -unso6HY8zD(@K_G%@oYgSS@ xзgBFPx[{H$%IOGcX *3Bnj[dϧKJgϼ}6)5ј19]䘠D>:+0RuYUy/H!HD]՜SiZ塙atHbSV,ϰ dpDJvtdX ov!@JK= .NnnxknWu;1Ǒ?(U,dl$+<)@\h$M% ai6=X~NT8o#P T]Gp;q!_a.e^? 4^Ub!G^`oKuWwCv&M2鄰t؜= Z;Mt̎2:;N`yE]Ж 0+Irlf.i> endobj 1730 0 obj << /D [1728 0 R /XYZ 88.291 795.961 null] >> endobj 162 0 obj << /D [1728 0 R /XYZ 89.291 538.241 null] >> endobj 1731 0 obj << /D [1728 0 R /XYZ 89.291 452.026 null] >> endobj 1727 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1735 0 obj << /Length 2227 /Filter /FlateDecode >> stream xYKwWpg:gݵ94iUEB6O$RCRɿwPevgܞ.fq}N(n.04xLbxtrfYʙX_J~w/8($HL\{U!J4yNn"R1[Ge7˲|ʼZ[17a [lD%y4o.}3ﺶ|c .rZBLq-b{^W xETi֮8<@sX#w3|?bv=,x\}(.x1rL Om]=2a6Qh($R2(G+󞠡x#Z3Oڵ4e"_13ڮ:gb3tDoޜU 'Li-pI LB,hymNNL9\x#],| 3$hDg*ނ cĔuc?眧lup:'p?OL&';jj?0q+Kjhe6@$x()k }z nqÿ~q֍x^ObXJ ta7ᶃ_jT!03<rHk~'M+)B" 7~U"rޘȜ?NT޷`gR)& [jP߄-^o2OsIǽ+__9w!GP`ǹpRsv}Bx qK)+xb\iJzAKrݙog`ÝmJvIĝirl4 &#}XaYݐн k`V&eFi! j"nvOL(24ll-E9F,KAăJ屮/[Ts㱐ܗ u@LB:kf4(nwm Ή@f>F84G!'|2h:fڷ#:lDFyw T HǏt [Q~%ramo)%~ zĬ;ߣ;yb2O곭2+ְ,߿Q[w%9'^4lvIkZQp<9TJķM RU5]xJrp##h=idYxlp 9ܽfH3ޜg$P~H]rZI' mC5kt|nes.^`'Mەj$S*`ɑFDʮޒ_8r"3fFc,+@xWA<(EL5Yu%U̓J3tS i뒁ͥ;uYOHSX|N:wi 3#"S)OF1Y83BUOBjۓzLO4OOEd:ߍyQ K{a&]bn7~uϢuZϷ~mkѿ^@0mwúnl5vKSRk>f<^Qc(l_Uh8`g7'v[Z:V:}x FOVᾢRkW8%·M?ZrO/t Sm#kagLlQ>LDI?uM~Z`޿DTęJڥ4/aBg:h@C5P Q lz`8ud#7:͕Fv r#"4,=lNoIS endstream endobj 1734 0 obj << /Type /Page /Contents 1735 0 R /Resources 1733 0 R /MediaBox [0 0 595.276 841.89] /Parent 1732 0 R >> endobj 1736 0 obj << /D [1734 0 R /XYZ 88.291 795.961 null] >> endobj 166 0 obj << /D [1734 0 R /XYZ 89.291 673.356 null] >> endobj 170 0 obj << /D [1734 0 R /XYZ 89.291 505.706 null] >> endobj 1737 0 obj << /D [1734 0 R /XYZ 89.291 419.491 null] >> endobj 174 0 obj << /D [1734 0 R /XYZ 89.291 367.111 null] >> endobj 1733 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1740 0 obj << /Length 2151 /Filter /FlateDecode >> stream xZMsWځ ɮUqecQrq|f +R&9+w7RC]N*@&"dϦ[oagfd%k6f4k9((iCݾ{=L;ԛv!`YzJ:XWUxL<>Q| #-'L Lscך lx^isF81Di[4nL>E|`3#Dc~ᦃXBzc8=#?7 !yJB5%=֧tBemTP{LdG[wJ~ PAొM{ʏ@ߖ޶!Hm RŴL~3>0wA7VL1tўE@@RtRyqҮ9 ߬S,=<䥈CvBexɌ4z,3ح?(XQphm(xAd$vJ'dFdSꥳjeAu+Ϋa A_Y7g&8,) qwmDlDTXM0λxnؚ9H^(9o);{ 8m"4$ni/4GUEQ1q:7 2E%_@cs` ųEv3BAƖ =3_/ |ABed:ݗ.o^ 8GCH1b]&B8Jq]SCQ`бgCy4}WuKpv=:<xQJ߅J^>[66X0?9S[Jae@\5J׀C( #hM,u;;!D`\fn"›g8W^xc K+I߿0wpȔ/mZ1_Oh ln13"oN.d: t2Ed^ NZ|Wd|nܻ(7ڿ:Jff1Ƹ7wU؞ߔs]hS}K7MlnOV2N+ƣˤ7;Hƍ2װ Tc ;`Ty;jKeC|eX:9ǃpv!a5FE(x6C0%a0]}o$K8qki!l|CIoj8=](x>6E׹*TpjQ֛hw=E 9b,e?]4}]~h2qqN<6n)KzfXuU}ṫKdÃ/ fo5 Lz{ endstream endobj 1739 0 obj << /Type /Page /Contents 1740 0 R /Resources 1738 0 R /MediaBox [0 0 595.276 841.89] /Parent 1732 0 R >> endobj 1741 0 obj << /D [1739 0 R /XYZ 88.291 795.961 null] >> endobj 1742 0 obj << /D [1739 0 R /XYZ 89.291 739.378 null] >> endobj 1738 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1745 0 obj << /Length 1901 /Filter /FlateDecode >> stream xZKs6W79Sx?4Lfzh[,g$!<}R Ɋ~~ָXxsw7UA02ؐQh)NfQ|TP1Yv޼tC@.HAFX|s#.]|q#7CIhw7 cH`y[~JJYpAܯ]3'"rR"2]zQ.>`6F.}szv~5tm+o_|5kCjSB%2D@L͍mj-"ҷzXAQ] cT_H>@e؁ڞ 7(iWc{ w. MFRlnFuXS%fs(GF(c9'0s9Ayˀ;pn ?@܁Cs9QӺΩH&]DrnИ7w>Hض>Ɲ R0{ S{$Q<HJcsrH+3gN}=Μ,9IdA ̉P.X8`rbrNd̛^?pbFf9 HXQzcoI(E.CI4Y)@^ rO !K#DofWRSٍF6:'5Sȶ SI BR(YJYYI,RIJeA Pe;o~UB"yt*!a?PH4gcxm~$ *@SR)pO1i*@4F,D "js8Ĩ/!g˨sɁS9DV9*!n fMX/q'rQCNnݓ;m<<φڞoο", <?Nܔ>MξγE"2I؈J NŠRBG=#`n/y}>.W]M+6l|;ƃ-LW@˃"[\tdy,^ LGLNϱFӏVg_py' v$ XYkh뼲rL;愙sALC\ :*@o| a)fh<΅o#aӠ} f I{J% FF6(xжj*V:/Xۧ`mf=R`8cWb4,( UXӠ?;u|;ݝC֝9*FD`d0aqJypT[pԂqq)Bѡ`Le$Uw!2d63,U؊8nG6eA պU4 &0-E4ǩ{_s9~|T ia.wAA)0_pw7V`XI endstream endobj 1744 0 obj << /Type /Page /Contents 1745 0 R /Resources 1743 0 R /MediaBox [0 0 595.276 841.89] /Parent 1732 0 R >> endobj 1746 0 obj << /D [1744 0 R /XYZ 88.291 795.961 null] >> endobj 1743 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F63 845 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1749 0 obj << /Length 1908 /Filter /FlateDecode >> stream xڽYIwF W(Eٗc:y/)́F6(Rb'p)Y^l.qto>p 6$G W$)sgEwcx^)ϯx 4/)Q6 O!̯ O!hoʧdm#Oic /ÉݠBN".tt 35Mtj<<,9k8fĴcxC~s!ĜЏPWwua#uSBl j_kňp9ag,mWmB}L@LKP (‘BX` ag99 =W*f`)cCRyq..Mx~ھ*Cv唳c5i:PP|HSS>J:3&ȵ *_z}\ڡ$mShYoA{ǨxrX!ݯ NC?5 ķ[$pۼa%Rm?pۓC nT=_" Z-Z?(hB(Xx\gR$r>jv7O&.Z]o)SͽM.N9iؘ;ӗٚ7`.Fq2Igp>(.O>ZX%ePc6y^ALg" 4x^K9[ rTjcz'ݫ7LgL6LՌSR -}O4r-~WÐɕ3nVG<"K_ pJ?>锲&7,N&q|e<0%sQQIj@o!ChP`"Z5m\{!u'c7B+=i (#Aԟj$f7_$1"Pe)dk%Ϳv[nX S۪'u`ť`|/zuᔏKhs1i]H_]4RLӶc%) endstream endobj 1748 0 obj << /Type /Page /Contents 1749 0 R /Resources 1747 0 R /MediaBox [0 0 595.276 841.89] /Parent 1732 0 R >> endobj 1750 0 obj << /D [1748 0 R /XYZ 88.291 795.961 null] >> endobj 178 0 obj << /D [1748 0 R /XYZ 89.291 280.645 null] >> endobj 1747 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1753 0 obj << /Length 2210 /Filter /FlateDecode >> stream x[]s}ࣜ|<&fg2δ[ɤȢ#)@Dz|{pV*Z}gnQcCeP2R#yuWWZU}&Vk.ǗvW7n׊է>pw 7hte8'iUß+JD ]?>p <4 y ̅!r`IaƱO [F$֐$Ny|*//?ބf'no_ZLs☄"FGMa B)Fcmr (,K˱Xc6Ð&&Tq m, [mឭTbۯ (_|L!L Jqvu4Wt=+y>^Vi+D?` 8wARZmL iF%c0K3E>fk&p#\!+I4,nokt,\pF,;;H/v98J` nf爔CMB.6͟1a6O݇CK5|!eS)c̾t{ ƕ_rSh&| _mH AC6M]@A~@]JLʡZ]j(l*|}mswlÊ wnnZ)o?)~9->~3Kٛ pC/x}aH_9p/&V0 D:}}dg؂ɐDũ"oqsD`>='0_Wfmh? #O6]zO3 ՓvlM CWFF?]^{٥Z||&]LxI)z713⫞ndb|PWPb`n5!E1@J(%S26-3<1܅T=Sa%[v7} }u^'.aUVВ{qDE|;b! pxN|09usNN c@ B_9[.8g rrP{'\17MqƞwMoX]ܰj(otvL\ۋ́~^ r M4܏&iGah;w>CvtDŽ7QURe28cQc px0*gM3 r45dP>ecqF\bHP(呸xF|?'q׼/ 'bѣEԾzԾ9Zj,/FK"&KFƗRG&pU9j 6P2},2W\u f橵 %{JXs0$rM*A{5ATAKnMU U&*nMt&&tB',abm[`+޶ OGM*Ǒ2?QsKmANۖrS.֔8F<l+Aqӻaup - c/(?%*8N7>Yuj}:$ @o 3l_}Jܹ2>\7Ή%o\b[& >nJĥ#Z TH$JЋ<VIX"(s6Ó4a"BAD=[P_%V_ܜ 'pD:|O"4T/-75'-ǂ0zȁgxxNQus,(I /Izh=;/uE >}+N2?A1e)2,K0!rk7QzsM[ 9nmnI '\ "UFX/ rYR@Y!S]ऺ|YuQPߴ)S03NˏٿnEd &NqC` xȿx6ˁ29ua@MʜI39$ь⌀:sms4gf!02B.D=`P3 pX_&y.Pmy-e֔JNJ4y endstream endobj 1752 0 obj << /Type /Page /Contents 1753 0 R /Resources 1751 0 R /MediaBox [0 0 595.276 841.89] /Parent 1732 0 R >> endobj 1754 0 obj << /D [1752 0 R /XYZ 88.291 795.961 null] >> endobj 1755 0 obj << /D [1752 0 R /XYZ 89.291 739.378 null] >> endobj 1751 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1758 0 obj << /Length 2792 /Filter /FlateDecode >> stream xZKs8W(b,I65SM4;JmRn.Ct74/f(hV_W6#JF29VNq~ho͇/70肮؊ JܿXo~v%"o~%JߧDQsW[^0e<ݜjW4/9Ę%p9ӄS HnvL2<eF*Ahbn"o Xk f(3ZSЌH`֎l7:`J4x>ٛbGv XF dox{+]TKH@Ifu'@-*[&0@_Z_a{1.,nM` IQˀ CK'=k-/mñ 4L|jqJ$U>Nu*!p9N6S][~} QD.xۺZIy_CzsGl5z<^ڼ 4~|o*2|J)ո@} kH"}v%/=DKGO2"g6;S┭=넸zA:PvO`*~U/s5,TC Mwm7yHx>kSǟw!MYk-s+d oС"Ye33 70 uMY"+8u;b'@x {`Ut5β%3-gcKw-Ա%-gKxl76CSĊvt*YH*dmYB3%fJKllAb2 #X1X1]DZ-˔5L(Y&C})L_b%#S&gruF7ǂ/I2XN'b+zN)z10a\\ \𹌦cܙn| tGUcjNdJ%hrH~(c0˓A4 bi gcV i"|SkȘ KpQc(בY4V)K~=wpЂ_#50 ;50x ԀƄB]d<:Mf-S٫5X٩K@lpůQ^" P.o´OG'PU,}݄y_jktrpgs.bW¼ݑ*+f9<`0wrK>vF^ t`c"K7#I0̨% ׂXƿ' \.`/$"A$Q$f"A$UP\? ^]uX]fՑE{%Īл/3m\LC9<$uȬݓ⦚Yߛ}q"Ccc֝|_3,bBއ͸Lk? j(Ss8{0z:Ter;|V3K Ԁ iXPY'?jClB)ڥS>Oc:f]o$un27Wy sDv[7NjsC2/C‹*D2shS]0rƭ^7ENE}UTUFxr`/GOA_,U3koC5(NKu|&T@ޔċ^\ !pYhwzLϨ7.dgays4f>^#YW"R73HEO/I%OܟP"ob?gD,ҽ9YNn\vKrbTs@xmH}Ya7!.CL qEr<-*XN/0 W R ,F endstream endobj 1757 0 obj << /Type /Page /Contents 1758 0 R /Resources 1756 0 R /MediaBox [0 0 595.276 841.89] /Parent 1760 0 R >> endobj 1759 0 obj << /D [1757 0 R /XYZ 88.291 795.961 null] >> endobj 1756 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1763 0 obj << /Length 2335 /Filter /FlateDecode >> stream xڵZr+5Xf&*ig53 JmdMR%An1 [ u= - Z|`8XXXG8RF29rrq7U\M~r-X%TPbr_X%[(R"FjU|8(rj=o/(x;,Wy 'ƌ˙&wQ*)~ ~|zC5eӺ3H9u0k)SئY"R 4b6$cD*ٗ!YO~ by7#UŔ[u[ DɯmB4;6O;6WewyI?NlLz۪:wLM]1l;, S8e t[ c:B\wuLUapF EЛE|O]ݔOBk@xڙk'\'̐8]`lWbK ZC\_>06DkV'DC'\js1_*Ϻ~DK*̬aSf!껼2{w.sw'w\wc/oUPAC;n|s^_V?N޻ @;ꨓW;:S;U|PJ>}Bh-WfOM&[Tua^vy-mFXS.DL[( uŔ&&Oa[p4fHq!Va@iܘg88 $eڮ0/'1wmu{Qvƈ (ϸ7A)Bd p/1@ 6QIRnXx6a5q dlG޴*!8ٴ + Y;UeɓzIЖ77Mmi.%lo5GHy [gh$ ԞlPt,Hr]{^Οc^6~ }jPC~;ŲAx2Q׋l352@\e.n7~Bqf73w'u⢐\/ gM =Ɓ(C#6n s !_fF{}yޓ@!˦jLc7\Oh[B".N]8 .sW&~zڡ_; 319 2W/bdǵ{N丏U5lp`C541OfȌd 0g8,qb+ڴobO"! 2f$Ϯcz}.gU*y| +'`XIniu #JEh+,o::^wr-ӧnLR+ HШܙpl3>eGUI[ TRoo}:һ$ןp3KˎAUeF9me/;8<?πO3UtYP=寮?ωJ ߇ a9 V_,6MOcr0*n0?0wsrm)}!ɞ[gl5,a͸ ׋qPl@8bdG-n^{-&0)I?|KskjkۛT7|Y*> mo?eWfJhnbk粋Z}#3c0En;Axݤm/۾T0}m*/TKӬɬJ³EE"g> CxG"ADنE-86Z;6t",^w&5o˜P;/GJxUMMpKT0*;i~2%A'']:s=v4m`U:wSf[#WvUDjU˜s7 endstream endobj 1762 0 obj << /Type /Page /Contents 1763 0 R /Resources 1761 0 R /MediaBox [0 0 595.276 841.89] /Parent 1760 0 R >> endobj 1764 0 obj << /D [1762 0 R /XYZ 88.291 795.961 null] >> endobj 182 0 obj << /D [1762 0 R /XYZ 89.291 708.554 null] >> endobj 1765 0 obj << /D [1762 0 R /XYZ 89.291 622.339 null] >> endobj 1761 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1768 0 obj << /Length 2554 /Filter /FlateDecode >> stream x[KsW(VޏƙķhY%Hd}c \r1A쏀} Pt񴠋74^rwJ`8qaP2͡fuu_mVkYv͗&-j|rot_g|ϗ Rh(m8(RrP_&p%J,<crr :Tuq-'p&,9怜ա؂KhA n"_7UԃSq76ObS&]gXtTb1:`~ ]R Fjes}vOq0Q%5e gm_^ }&sDEKcD* }}Z3A(Uj /Z ۊ&V՛:8cY4Emǀmزza%ᠡZXV5&4UJ"nCɿ p~ݧ-}iAVE>5R4+oh85VzmٵВ(ȧ'^hd\o3y&~N4y&ԊxM8~2 `D|X'"B<ce|&r" ˂.h܃:$tkܡOO_(uW)޽@[l]$G-0>rb`<*0 D m1 ?Z 0 D " f7^ `4ᡬcoO=p3v6"'N.v~vnwD@ *͠ { iښȶ[ k/p,}L&Z #)B_A*a,s`1S=hx}_nj u;SCR$´@g(H&`iz, #U qY@(`<-F * ehLJ @CX6~З2zn ,xaS?y!"pݔ+Xv.^MVWe8$nY=>gA9~|,B?!H1 ;MEOXniH8رuouEZN!Zvbbr!Ð_*{LBW="#j$-Tt*>}h>70uTMI.KsL?=g~{6ρTܺȂ2)rb<Wr1^Z l+RJH`Og9`cr?zD7gnS!! B$;Qpo^b2 p+S+hC`Z9<+O+Mk7Rl}LH R's,QVH "gZ` Rطm߷ pc p iA$BH r iA#҂.$fa }H>iHvf.$+DH8%@Z>>K#jTW:PT E~ڲյbuX:V"k؄ZoV:}IBiqV7DS]KؔCKtzsj=p Y8ш[9[@`uas4B8$KnYz|Zg=~٨# A5 ٦N f4% ſRP6hϔƋnw ԣJr wy<4?ngn=||3w>>ó x2OQ {5u. ñ= c zh?rÍn^xVuu9Vѱ}+s84+o(绡ƒX@͝?NZcKk}zwWHkXX2`'_eLXgz{NWz{VVgz<4J@m.,î_{E[F]ƵYp#׎pORmܖj!8k,QKq7e=/F)=mL)] Ua)]Ԃ?7 q3qCL 0p#ӎs!f?ɭ',yI@QݼE3HTp R٘<ʌgE/UTKтРOn:gƒUϨ b24R_mtpx?nl "E< VČY0AZfRLe ڜ#MXx.l=,㮞u_'sV w G<,<4^rNK<z]D8~( kc OT.5J'@6$z(`fqVgAz=Aq]誒EWBWEW#Mvi -t(_oTfk@u|B> endobj 1769 0 obj << /D [1767 0 R /XYZ 88.291 795.961 null] >> endobj 1766 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1772 0 obj << /Length 1823 /Filter /FlateDecode >> stream x]s6Wpۉ}L'nf2δ] `58ɿ˜q6Y8zyBF6bD,tJ8%CK~|w^w7!h"&(qڟyټ}O{Q"R"Cf AU!mqkTMIS~[Es'I,&!7g\!5 S0h2zrX !sYW`&LPSFT2޶4%R* աd-u;h$6򃿯6ի_n: |fڀGǼ3Rce]vw3]֕T_݇3%ɜD%3kkC H,岮+a"NbX˕3Cjg.DPEB\.RDhD$6cvE~nuvv}DLTMΉzDZvzc1+*{()(܉<=)眈XA\evvP׭Q4}@j3K6X$BI&Tv` ^L` SA'VĩmPNTqy!I (4IWCTR ռ_ R&=uYYյ\Vycj)\߶Fޝ)o %3On (*f1͎nE n!ĉ-ĒIR` xYAcG:{@= zߣ` | w;wy'jC)IaK1.=]zا<_]G:P> 9Dp ,b)N*X\ Br"@`=eQޏ7ݣ@CAsZfF* =i7ֱ[5?Gnb1Vz`/ xY{A{cGG:@=: zz£`Gi{t a9ѹ~G:&B›XL܅G0/ OxF:Bu=.yts=! d3 Ddmb6< x9 \0E 0>eu{1Pr*{ Ϝ\@o(rSND_n]UQ RUJI6Rۈ/ }1/D^)1?KT쫛XXB8<{O?č[NOCxo#)yR^'EP>j MI"QjB)6 ꔻ(UWj],PW1艊u36u ,ڟg7e嚲}kmT08&X딉Ҝ9/UQ!tp] O/{%u3&Vv z&:DmG$},&O>~rxNqP18ܦ)҄PXoduC3ck^4M}]Cpg9(PuюCcכ>WMSĦYassY J>>7*TVM0̫_ܸj=[p@]0e*}fU>;pW7&6 RMT.n쒁\6Ҥ6hmﷵ]T)|l}zObkmfU}f3?p,€]U/y4k䦙-Xesg˾nr/fŮ7~38ÚH+m ԙhY +&O:=q~+"8mF& F2q%p)GVz7_AT endstream endobj 1771 0 obj << /Type /Page /Contents 1772 0 R /Resources 1770 0 R /MediaBox [0 0 595.276 841.89] /Parent 1760 0 R >> endobj 1773 0 obj << /D [1771 0 R /XYZ 88.291 795.961 null] >> endobj 1770 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1776 0 obj << /Length 2483 /Filter /FlateDecode >> stream xZMϯQ`|8&ήS.d8;L$Q+r(ZJ`_D Fywww߽)me(=^N[4$煄~i _|~[п٭{?/'j]Sp ߽ռy@RjVSMɍ;I7:EOpH'JKŔCU,PW}aǜsuɼC_O>a"Y¹C[tݭ'ĤPX ŌC*1ͮock[o[hxÝBxŸ- k4Ͽb?)_CmVM񏻿GCAxK4qR f,f)hyg3e`.ꏿpj1Kp뷶YOV2sF0 F9uF0*^v=~Y-`OžK1gs*a@f;׺lb n}aү41A7LL#y&6hbT`176 6d%jzyo%?3`ԛ[c(c^7xcư\7ݪ%ԇ}}u?b<]%$5$!R ꫂ>EC*lM\"ǦPpG^Þ#}WmɁC0\ݞ9c&嘱CH|MFԬbI":67Ϳ_ԓ=9zŽYG=#OZm7jIdT/%6)s>RXWD8<1REuz#vY`M8kTusf& b }*iXimdGq9EKÄh*YN8x 45:VվZ ,Ci9QѶ#SvLr%= '*_F9`#aob؁ǰ` |͂Kګ aZC_Q%>Ľ>asȘ b͐)9`chcpͤs 6=F^8zQ2UfWRR)M3/$= Yo!\iJ2D1$K[K$}HSde6Y_""1l]J^@1Q"I:8[w~3^ -9@j`bKC w o2PQ%{jHSB7G`(u̖ e{K7hj֛=(1^_|(S2W9 ]YpKqod܁$Ǹ7s,)'_)|&́CkɌy5tx?ɼ _dС/IQ,!B_a46$<9dNT?9_Ox{y"TK]mks5֥$!)I'@$==݌rT>ɇTrV+d?8=8#Bɞ@1r.JCrL8N5}#ݕPF1A@rN2uU132Rcj *]SjHCyLCטIɮ֢-E A1QM)2TN@ioD3Tc M{?]1b˖t>]#r`įrTVv.RV#.k]_}]-3'TϚ3NQ>憅hdj CWX} endstream endobj 1775 0 obj << /Type /Page /Contents 1776 0 R /Resources 1774 0 R /MediaBox [0 0 595.276 841.89] /Parent 1760 0 R >> endobj 1777 0 obj << /D [1775 0 R /XYZ 88.291 795.961 null] >> endobj 186 0 obj << /D [1775 0 R /XYZ 89.291 757.701 null] >> endobj 1778 0 obj << /D [1775 0 R /XYZ 89.291 671.485 null] >> endobj 1774 0 obj << /Font << /F21 548 0 R /F40 549 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1781 0 obj << /Length 2379 /Filter /FlateDecode >> stream xݛM۸+tԤ<Aשdn=hDڣ$ʢ4(Q]{HoK|qgo8?i7yìL–ӂY -vUi|Ӎ!L̄[_c?8S}=73Ŵcp3ܔfO#\[1c, ,vQ7Sq(%w|zZLG6Y/MםLdŁtIvv7<9a¿oûH\j֩+.e.B y'*ɬ0a nxSVg~F?gm>.n%^m?0a4.`l4, tU0WۯJ1%PΪDŔ$\%a)xwnGNYɌ34dk's ְb9)FA\9W4hPW|hYRJ2-%H_܊Vz0o-u-#qpd'+@{8%yZ<rY? 3 pow#Xw3zE-hZVr*ѯf.~-vRꇍAꇽ-1o9AS?쭶GS{1kbqSlO׫ʼ0Jb#ܯ5Вr/Nyh[ w7/tOB.) nk>]>. ;X$2^B!`I6%N`I(xJ`)Y` "!*țڌPhYICu (H rUжmpY樯$oMqd/](YwGYe0im}kY{VpR]!zhf (lYf ZXX5l&l[1O~ |[oW]]XΕs,6[[ k;[*֤9438P̸6[B9Q|oyAtv3~KzP $JP@e<a9K91eT 8{4eXڐP⳪:TYeչ21qjS$:$T`ɑ$vcȗ4vWS~y2"ֽiQ0 c8?$"tO%Xq$q/)I—BxصJW> p'#G;H۝$PCs؋ [9`pUxX&66PvSlQqR {r4mSW,8<>hK..^t$TtuEEQ.]DA]DpEhP"u(hdM:ǼRH(kxJ(Y xM..^t$" E7r/z)[B!ĕ/H9v%;O 2^4PIf%+oDG”&V":~*KU|#pM~PM|o+4&Vׅ0 CO08p*H* EWABEWQP\ ]E*(UUU3ܝVԝulhoX{ endstream endobj 1780 0 obj << /Type /Page /Contents 1781 0 R /Resources 1779 0 R /MediaBox [0 0 595.276 841.89] /Parent 1760 0 R >> endobj 1782 0 obj << /D [1780 0 R /XYZ 88.291 795.961 null] >> endobj 1779 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1785 0 obj << /Length 2239 /Filter /FlateDecode >> stream xZr6+"odӕTT㬒,hY#nts/R62X|qϹ炦]of(iV7w,'dDsR~]߶nU\7?]xŠ b+&(:wd|U>^;]Up%"V'WHh1p&QT-mScWgD)0|kvǸBHX|W}gD, `dr :PҌT B ugߨ _mᝋ~Mܵ7v o@K :o>)GWeuxMAu)@|7waA% b*-x{>8 H+zm07l kek<ƒiMPh0̓+9(8vlyHziغa33{5t،{xisWC ?/f #׸_"Ɍ^O}!EkPbxA FovxaCJx|S$mQ.$AbĤ%pRGAI xycT6rxhꬦw g:0K3/N&zؕp{}cCZOx ivk R`7 um TEg˒n$p/K>t;qw*ۗ]}wq?e@lB&DLP݄ϕS6a ~4i&4Kf`+d` ؙ%I}WtBoI`3g;))k _>u>|? INBP@+cHeƵo!4Y d`pgDknXS &ڤ[h!rnڤYbCvϖ#)mD _e'B rp=,<߄Ӱ7F'Sh 2v&=1C!ȹOSRS-y'=< c |% >\<(A\C6Jaw$;=gvSfw{B+PҠY`V (}43ѥ<ߗ8nqh^D-z U`|VO20l[}K}vRVvNߖ5Y}]OkjJ賰@ endstream endobj 1784 0 obj << /Type /Page /Contents 1785 0 R /Resources 1783 0 R /MediaBox [0 0 595.276 841.89] /Parent 1788 0 R >> endobj 1786 0 obj << /D [1784 0 R /XYZ 88.291 795.961 null] >> endobj 190 0 obj << /D [1784 0 R /XYZ 89.291 478.307 null] >> endobj 1787 0 obj << /D [1784 0 R /XYZ 89.291 392.091 null] >> endobj 1783 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1791 0 obj << /Length 2171 /Filter /FlateDecode >> stream xZMs6Wj/TT[;)MA72%)eRwL.0-4cIf|%vw2X;(%eIOۛ)ke 3\-B~zG58F]mW7.N)ivKu8CmqSô:=/Qayf][[wuǦ ǕLoaJ,E~ Y0~ID;Ǫʺx6\*\wEql܆yQ|oH-ZiDtɥRtjT'd- ^# 錱3`5_wBKm(l&z(&ډr3$S: Jk ]s"&̯E';`ʜaj2a8 rk2ڄ6aǙjCEkYm"\XE.\]e2gK[D/?iaF0ԍs 7sX<>zt},p?ZO\ujK5AFjʶ7̨3o 4p3qnΗzb,q?WyhCt^MfpfDCMq+7[U%ǜnU>>;9\B_wnҷbN|0zh纠m-B+f4AEW'u[_Cx< dFmG {#e|c_T0oCcَkw/qj6NF+ mU& p)XS+?\-9! V@P v~7x,D"YfS$bO?7t/)_ O7 , X^F{DUC]I/xgz+D$x~Ǻ܌9xAQ@5AQ ?MxbNFHP,#&R5iXۖTH.FZ KWFJ%MHsƯ6}gPi06"}BL!]9ji_ 0 \@E^Kw -Y! /<;t_%Iz>_e0QHT킒 G;ϋ>6aqx$p"b~4@weUMyOcM}<~ߦ0f1J$ h;ރMpr/0g[Kf?`!߭"0A;]eAl2ZAarUPNNoظ$74zz*^>A7zB_Sos8}tKc < {'| _NS-tlF -Mẍ́\4,)8(#_蝶WTvKOKL2((@MP"'_y;:'YVUF̏>>_EsTWً ެavI0?sn2$shi~CLr,LknL(})\mJz̛2ߔu' B/HI6UB0)N $ RBw.;2~]]fx] %29}7-Δڔin4E7j6+Ftiz?ZTx*]stފwП΃Z{]ebOŊ^>0y*[w)%29,a\WI idNJ\EoLc%k?VB;uOH!ʟxAtr& da*[忼Jo}%iv\@ ;NٶkN> endobj 1792 0 obj << /D [1790 0 R /XYZ 88.291 795.961 null] >> endobj 194 0 obj << /D [1790 0 R /XYZ 89.291 757.701 null] >> endobj 1793 0 obj << /D [1790 0 R /XYZ 89.291 549.543 null] >> endobj 1789 0 obj << /Font << /F21 548 0 R /F40 549 0 R /F39 547 0 R /F49 593 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1796 0 obj << /Length 2435 /Filter /FlateDecode >> stream xڵZKwFWhvRVޏe&t̙wII(WU#K}l U߽L ol$R:[I,9|V.%UZ mw[5[&{t%S},ٯ~ݭ FXb%2?}vvYo36^2 '0^U=Ycmd;9?Ybj\~?%C9ړ o'KcDbbj_)l~ZE5DI߭!5USvdU|,!n"#B0;hOY- LzkHux7^#b,#ɅVh/E\P"]< Rh_n-qf*,%iK|-sE,k9܀=!@Y$L1v(:@(f,#N>dϿREnƎC~xE a̲E BLa$@c#OSr< -ؔ1b*KQ^3RI(񾸋qP6)/Ǭ(v"?Áêyjԯ:)~:T!KӮhzz̹o]x`4l.fړ0d6m.0M fҽ7(gˢexĽ~ǽ~*7Bo4][Xsދi>-o&;L1CP YLs AyeVyv,k)fNb!EPNxl kQDŽʂ4Ѫ !gy.=7"з+@~DlH{EObۊb5!{}Aw$C4>#.basi73Lְ6 &u 9!h_Vfa4V\ P!x!Tir:n164tEH6 χ9eH )5eʼnl^2CgSy{r(~Xg-B ҉Y*9kh# ː4\h^B>X$"CٯY֮ ,eMA4=S]20wU_8"4 ޡL~z8GNCQ Υx oooj&ZB]MsHn/} ܷ{-}_ϰPH6pÆgocRx͘ ?)"W}v}c֘w,ߗ#dk!bFw;QWQ8<9F.@עR\pM9ܜ 0'g9 i Wro2Dq\l$˂9_W K2c]4;h>z <DU:Wo蠇*>KQ֊ G4GxkQ /Hn@26 پsʦ}"I灚K 8vJ來 ݴD,~j3AW> {\8u)Uԓ*r]bxm4ߒF*d։ˉof9@ߒHoZkOd-i endstream endobj 1795 0 obj << /Type /Page /Contents 1796 0 R /Resources 1794 0 R /MediaBox [0 0 595.276 841.89] /Parent 1788 0 R >> endobj 1797 0 obj << /D [1795 0 R /XYZ 88.291 795.961 null] >> endobj 198 0 obj << /D [1795 0 R /XYZ 89.291 757.701 null] >> endobj 1798 0 obj << /D [1795 0 R /XYZ 89.291 671.485 null] >> endobj 202 0 obj << /D [1795 0 R /XYZ 89.291 497.101 null] >> endobj 1799 0 obj << /D [1795 0 R /XYZ 89.291 370.238 null] >> endobj 1794 0 obj << /Font << /F21 548 0 R /F40 549 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1802 0 obj << /Length 2472 /Filter /FlateDecode >> stream xڽZ]۶}_GBwi멳3}H K]NCqH.-$/HA8Ź^gtvsE_n{+͌Qcۻue$#z˼޶ 7W_1@glƸ$Bgǫ_~5~iFpv9| "Fk3_9l 1eT`mRa9>^sXN,5]PC\N՛Wh@D{~iF3-lJpW'-#G*1[Ee^Yv}Ba]W&M[cMivݏUub/)'[(btD6[pM&6&.mz4T~`%ZzppS.>'m%''%"%"8 ^.E(;sXu5lkrߵgf4UO238'w9 '3,qR)2ZL쪀powmlC@̕1@@bl]AE@UTA^M_=d\h;@{_aV[;oFcseg뗯:*8,uX/ݪ^np={fj^)aOvU+_v_¯j^m[J),ypwÖNj{beTZᅌsz!~.<ѱrz$B#H'< EDޤO0`9RaliwMrP=V]:D)c/%&|N0 |/)nn6!X8t26Y_5(lBUcrzLgTTa\78(p %ܰ!w@XΎw7eQtSQ1PyEv8zLPّbUoGW멣/pc&^wI}e GJwٮ D_U@Bճ*m3YHB!(ja`wù8SQAY×`>)N8ޟK*JpyJC6)zzf3 Z";^ZP?Zeȟ3gH*wg'iHS_$qX_#I>I>I GVqIƓ ǷC^vY`Ho &xj܂3/DLJ凪WMkUx:c R")բHA3g yP+ p_, AM!cb Slx`4$B-c|_Q,`֕!'aW=ЌP9 AɒXԒ 85/JO&cS |)`(˧E$>|Ȩ RJM8 J ~94UNԙ%̭8s{m1?UaPaCDX >Y8G`RF׼!r qX3CQnPT57fSDȴ| )n([CXp,f3Dua $_?'.|lPDz (CFM} OL(pw"lY 3EXtʜS[]n+vC#ٯ_(".ZU몫 4H› ̈́䅆rh4J6mհ}^@kP@ (%G (p_~*NhhdʊLՓ$&EWF|Pfvw3ޭm>V/'CiZxI<R_\я%# an|{ 2w]mL=QZd 1_dł,gT}9TM3W}a,9cTJw4S.-$-$/aK#+d:8寛gx\ 6j0K"c{"6R읣N-h2dayqSy:6_:E&cfsm`8;0RC|%$ b  z&|s]?,YNw-_bvoԱqp:vא0w*u&D`S=B "/<e3,r endstream endobj 1801 0 obj << /Type /Page /Contents 1802 0 R /Resources 1800 0 R /MediaBox [0 0 595.276 841.89] /Parent 1788 0 R >> endobj 1803 0 obj << /D [1801 0 R /XYZ 88.291 795.961 null] >> endobj 206 0 obj << /D [1801 0 R /XYZ 89.291 257.39 null] >> endobj 1800 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1806 0 obj << /Length 2271 /Filter /FlateDecode >> stream xڵYs~_P7$\b3ڸO<"l1H}wDʐΩ/"v_<,}J,X/I(ڲTm5M\)㿹t0_fZӰcna2$ſ. 0+mHdz{o|QB T-}B1,/ϧ r :ץxX=eR&3yRs|n¥G즜q}&)tIݭ۶kÊg,,Gnn8 ({}MOmUdW t@̵a%;G/WOUAl~V1 >hϱe! $wXLJ 93GV~nKVg)SZ,,|ڐ@]\cbY*\- ygkS1{:%˸yFl[WEH:x~+Jc=T+Ԅ= Ǵw{,tf{}tF peD_6N]POnjAUp+*}C/9{>^B8K:MiW>P-HbJ^tO0 >4?= v:嘟Nbo $iFo_ao-~o},Ovχ7;6c_LeXg튎D]%aljWE:aS9(m%L5}k/f_KL }]svj g~R|PdC+y@V>v $jQkiaΊ5cO{zCp /[7C]89ӖVjM7D endstream endobj 1805 0 obj << /Type /Page /Contents 1806 0 R /Resources 1804 0 R /MediaBox [0 0 595.276 841.89] /Parent 1788 0 R >> endobj 1807 0 obj << /D [1805 0 R /XYZ 88.291 795.961 null] >> endobj 1808 0 obj << /D [1805 0 R /XYZ 89.291 739.378 null] >> endobj 210 0 obj << /D [1805 0 R /XYZ 89.291 624.64 null] >> endobj 1804 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1811 0 obj << /Length 2661 /Filter /FlateDecode >> stream x[KoWtn4H,$4-y[)>$5)lk\,6E#U_d_+|rw(Y 6dusQh).tuS~^hm}ad]6׿?'ƫ S]A+ 5A LWW?W%a3z>LBkztD ;[O{L@E)I"W HePmT 8( I*kk{v㶮66E7}y4 a,&=Uejƙتk*{ַ `?E !)o ʮ7u$r S? J a-S0N ޶X '[k9xB1"Bvzd7 Mr; e`DuÏFz]Q6h SmwTݡ~ȡrG`؋^ºm\ɻ!ʄ$uQ tA%>I6T5 @d u C׎ #d008Diq<$\z({䦒bnye %ȓ(g!bBIU3vcW{NWC=Ʈ,r&G.*-:Է(H܅ 'oc"`[ D0<pd_$q@~)HI`mFT:LAa5P1qd 9'2N>%#:)|#XaKAxk珟aH, Uj $fn.  _Ž|⚬fmHc]d`8ѵ8%hK fRc]'Uzݞ~E6t6KFA,~\?Y9y,۱:~A'Etb\Py2:ۼXzeҪU> endobj 1812 0 obj << /D [1810 0 R /XYZ 88.291 795.961 null] >> endobj 1813 0 obj << /D [1810 0 R /XYZ 89.291 739.378 null] >> endobj 1809 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F81 1814 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1817 0 obj << /Length 2359 /Filter /FlateDecode >> stream xڽ[r#+x&F0ޏ766l%R#$v,4 E5˨jVBVV_]WBpxLi'oTͭpOW  86įxx|wXw?-8S/7iez.p3O}vI;ǜ9ZuJ.9#sRF Pi7.=_̙wWK?b|]W$ s&A$h4d)˄P PvHY%ʐ)ju'ʀ(hCYhΡoWY|rd|KC|z⚞k.QSq4%\w8׮]^BzR6m>=i ӪiRGg,kv:A+nx`͋[A%[XANm<\ݖm vXuW5FΔUq*uɴA?qjAZXߍTl2kQQSTmXCC-=j=W)lrg.wLEKKq W#VկORGEX~!>l/&,RE-F}Ӛƺkf}tתijv!}>AЎ *b"jcԸӒtLWdԚ6il\FKNQd"<4dn28hbn6fyD0]5~@pR6bczuˎ^?/ZI_Kۭߪ ۶ּr.?\F}R󊬸!F:]pɑXhH4e(ъ '!KD`O5u.<2R#*(_PSIO).G$qB7B圹D ^֍g&G?z)e&xE8F-þo$xEpSdiEj;@u$piί f8WX̅"UDNhe4pc_vhCUi!k2%2ƍ@XA,}ܳ%E2P֊rє&ˀ"r9>.s İ!9,{hR傊H5ݧY?~Eg$T*DUJ20r]Z~R}ЄԪ1 mRPhB@TP8 caP ǨeFTfdrHÄ2PKw(2K-υ޷/79N/t1RD)j j)굔)='~pB{sLܯHEmLE J3o1j?#0/G;A0eƳȑ{hp:"t&` GTh PphM{h0u&%p@CL%vTAG[Ni?_P~I\ I递-+DaR9 yXmI;(M&iRȇ:%t@֥'Ge{l$&'Qm]@6GȅHƏ@G=rrO8RXHq;wCJBmK1*Q5ȒRȁ{DC2󥶙Gv+#AE s<Zowȥ:tYnVrKN?柀M'A/'[sD^![܌N9s4:foO5ƶ_zΧzdyQ$.Wk29m_y] jI?@ӻ][#Wu7s9.m,0sN@_X2浵 endstream endobj 1816 0 obj << /Type /Page /Contents 1817 0 R /Resources 1815 0 R /MediaBox [0 0 595.276 841.89] /Parent 1819 0 R >> endobj 1818 0 obj << /D [1816 0 R /XYZ 88.291 795.961 null] >> endobj 1815 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1822 0 obj << /Length 2801 /Filter /FlateDecode >> stream x[r+,׾|=o Cmva R,G"RXY˫̬W>{ه;^n&8 <٧ǙLӂY+b~}{XiOO?ݿJ313az9{xW>[3T/3Ŵ}PS1ϊ>?ŕB3t `)ow!PQ)[.yFf~lK4 "[o[s^8b1]H>q-f/{ Ô.;?4.91uV˲uf㤤Mbjm6 Jᱦ>&.q7WY@a"1tr!t*?P8A $"0S=e^!_af]`H }MYj"Lz9\G ĉM+f6[PyDZIPeܸjCclS`lDžIR]L18U-:45Oj]=j͗lsB1A~" G}B[C@·a&jhkRSȞ-nHZ&y 1) fՁ݁&8f1L˶Dz0zФ[_PWp{>64Z)З| :TITR#_L]1(AόvLo`0'W, ןDbSSr+./gE͍ǥǕM޵H GDp~~h,(YM_YM|)&]8΍YM T&FۅSpeQTDCI F1k. *̈́ab$Fte^Zv>Jy LdrҘLd@nLfyd&mMfv cULpBy1pb)K]jUtx"XѽMHrF#ƆʹtܣteP 4 N;-ʢ57'iLO{WyhIyi ,b;1ncJ2968d $>No dŒ/䴅twt܊n4 RXkq1M92KV:twʹh't 0jHZC"ѐkSN])c7-*I* %*S'K~#PcyyZJ_? 1FPͭf4/P2frkۄz+=>ʨX֕~?"jB9-xdFv=vt3+U$ 8E9-. u'(vԖg(fM@]χ%g )9SY}vdt.^sR' ^?UP% `fRoYH_u:Bʢ#TP䚁" %mVIhA]1,)QM?x"\/=+_.<-T.ZL4*>3y^{伤2`ƠӜkk\cVS3MQBAJUkS= ʱWfUߢԵtr(=,mmoo|$>waWcq)OEW15H%ajLa.S'm {v_= j5M4c`SўpҎ^>pqy@%zۮCy=m |$W]Heδ;%S2#ov Y,d29q>ߵx2=^>XcR)D8?(6~"7,7)HF ēiRB)H\KA|^ R6Rb4I4Kl*2F]"IU5;722,)bB׶:mSj9TG(Tcz^iK%,?Փʥ2)[sk~'l˫#HɣHxs/SAW-JνqM!iʹ]5P|qE#TdO a?/>4^1qPG\[2zoNwv_>>,դђO7ƽLp;(`^mq6lYq7^] o)gK~a_ endstream endobj 1821 0 obj << /Type /Page /Contents 1822 0 R /Resources 1820 0 R /MediaBox [0 0 595.276 841.89] /Parent 1819 0 R >> endobj 1823 0 obj << /D [1821 0 R /XYZ 88.291 795.961 null] >> endobj 1820 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1826 0 obj << /Length 2282 /Filter /FlateDecode >> stream xZ[s}ࣴS!_l&L[)Ƀl6teA$t }绐x.h?}YQcSa2qgU8{|=w/w SЂLPBx3-Vw%)Bj]ocLJџeڔ#FnE`ca.֫TNL@TxZ#LdLD Vjl~ؔhO~mMIHns&Ǫ%8= RNQV|aT`taULg`*n 763G$\\PUj"NQ(=Mp @@i _\[Ѓ r+0-n4\Jy|L8&p*K 7<\۩ρeU^hTb땆!HNPВW('7R"kY^ YO䘾]?. E]\F9K|^_rkce }|իLE*3Wb]`V8JYm2m I\g DK!X`z96l6۳U+eW4GH(|fFqiA!aI_S\ DR"hA$UY`5JV#G;.߮NӖHvic(ӅU(Hϥ1C8J+|!Y6ڷ}~ djT/sW6Oui2\ef94Je.ir2i'i|ƞL;-F9=!uUmG(#')eَoj.Nյs1EzMĮ-_W"n=}"3-#cȢLȃ~"_ {>9Nv\P<+A]UM؝!JXE1^_J*+9NazB0J},pq xڇ| ),||֫>;+cp0iB c[սԯhvJ#f8#9N΄feĂD9NP } Cަ sD AemXrž eюߺI}ϯk'kx@$~.ao/-[/oCqS€HhHFH;lʎF`j) j ^^7 kL Ky > endobj 1827 0 obj << /D [1825 0 R /XYZ 88.291 795.961 null] >> endobj 214 0 obj << /D [1825 0 R /XYZ 89.291 538.429 null] >> endobj 218 0 obj << /D [1825 0 R /XYZ 89.291 281.81 null] >> endobj 1824 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1830 0 obj << /Length 2499 /Filter /FlateDecode >> stream xڵZIsFWevz_3.KTƩ558.)P05Bx_{M<{ |[Jf# og GK8ofGl`$?ixq+o]nTDe?o܈g(Ezx/aČ[38p}[wV,·UQͦU )bi|vB* W,-J2wG{5x>cgq,M5X*.u!RҭK\t`٥9={* 2cHlx]:])cw!h͉4%Z¬BT Ne}28S&w/IοaLwGx8$gu(!8n*n`\7.FE_$Rs## !MTeP(XLBK el^g{KoRd뀜7iz',yuvWI3TG+do7,7}$j@)"ɼsT֩J weqO@zqލ0}\.f۠0 ^⹤&B+e* !)o\ @>u}g>++kœg!JʏItB*Z0հh,ݢʒ͉0$T')27]aQB,B!4#oۃ}~ʓ܎ k]ƷK:/Oʁ <1R7lhlr=ψ<Dc= }:u,c]yC"u1gQ 9a B O4U Xļ,maFMȡ:ÐidW4 - kx!&dg`x+6hr4i2՜B*.=Ngi] bz"(љL |zĉ6A $F+Y ;7ŧ< >or}q<@ɹX9Pg_mH/`_wͳ}a1☞X$kx]EPEC?v$hߧ@%vmy\?z(K%_zӸb]zSׅ֮}=memq|:l"xA dz&KW/6%])ĤDƲO3SmXn_5 )FbupvQ`i"l8ytyo"޽Xc¸#Wu^q#vg zeeaA/WzzՃ}>ZNwFT$oF`q4cn*$Ez옑a.wǜ ^EPzn2PFM. rKe :\PIxn㋛P&u:uC&[5pS";PW:A } ]Mȑo]VsFpޥ(;esVT(ٞ]+ys5Fb(*_H[X=/R`=v6kRno٧k z?s\ƟOxD;* R&n1)k2&8Z=.1?FzZmt 2|!fHާe^-YLiռ64X O떞-k6V-,#C4ǟGfDùEnR\!@o~lӍWTnZdê<@1ٽ+ Ha!#^mӠY!@FSYf/8} Hn$݅\cĖ 7v/Sۣxw)W鸔m'9۞'Ce4njNQtFhCj叭!s֫=x\ykܕ߲.wxaF- WCo #Rz 1[lɭۘ!4 (:;6㦥4QbhZgH FCFfjt| af1Eiw|ZR,}~}x,+f))\z>]~og*U'ghib,ⳛϘN@[ɦ`NVf4hMz?0q)p=ឤQSzٓ> endobj 1831 0 obj << /D [1829 0 R /XYZ 88.291 795.961 null] >> endobj 1832 0 obj << /D [1829 0 R /XYZ 89.291 739.378 null] >> endobj 222 0 obj << /D [1829 0 R /XYZ 89.291 389.291 null] >> endobj 1833 0 obj << /D [1829 0 R /XYZ 89.291 303.076 null] >> endobj 1828 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F63 845 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1836 0 obj << /Length 2878 /Filter /FlateDecode >> stream xڭZr6+Z $rK%D*$ծHS.c# \\s.2{٧pí3JҌdt43YpMCjg.Wd2y?z?7UQNR2aϿlgH33{uonf<\j=8~ 6FNF 2 K3.r0&S ,)`j̆A)#H%Mu./`]-f T -(1\}ڽO%I6Ŧn맺MYuvnE[outjeQOQ(Ge,5 ʉ8g{s^"= *LN*Kԑ qrmQ&Rw "+cCM*b)8 NSPp2q@*^E; 7cŻӂ1WYݗ=TA2q33b;}C@dE3)SePiR 2=b6,Ahwަe^dPb[ٱtKԡ( Ov0,EA"r=ZeQ+["ѺWC&+_4 F_ @m8 (3W1P ؞a2P ОA/2P= _שM/ښvvZA(ҏyQ)T^(20^GAH(PK=^maau5IC^ݪu'=9=_IΩDޅo4q[P`]VϣwC0G/UY[@ pUe?lS]Vg"Wgk} #oٸB8;z=vn.6iV CS34s:ʕS]w֕- 6u)֔I #a 4S;Nm,h,}B 8(>*{v"t|:Out滮]<( .fSVxb]VExp.[49rޅo|88~/˂dՎUT጖ogsU`*ID-#&UBe!j#PX5, (x3=)dqK1pR*^O$>Be2Q >e'6!pJ60zOkxD܄#2ɧ hTgD0e;$ވ-3˂FJgu.4c.D@ʩ~]])+"lDilVl *V!b^h{is!1{AN 1C8jo<E]''sWڲuIŮ,o;F":*(pz:Sd>$/ hHOySˌN8*1ᾖ|wPSdy1ZgyPH?J!ic` T!쪶|ֵMՉInnig.Bш^0-@7g"T^s-Zw]Qy[S[q.}ʪvsC;kIO"w$V OV!ݫ(|@WtlU@cq@@8D,g7ܳ`v i<Z 7i-}ۻ%ʇ[|FVO6wήVslx6jknWOvl#ltd} si\4*u~)NO̻aA*ltړ6 F&bpOj|,hzc>.9䙋1@;ס]e\(FR|+ÿ]ri|N(b( 3Ls%J]]w,*$1fzeɮ--} M\V߹COy1g0zW6]Zi4NAiۮpo"?ߠM]n'7&EӤ:"Sg!N~Yjw[= {T ;4Z;m INvxnpaqPr ԳGȖ 4yO7ʝ.6{ԗOZxQ~;{x7C#FlnMJ:f/~94c C?bXlg`(Ml_gڼ?׶?>`Wԙ/lݛ^AN|s \@R$B4)əR%Ծ qB>tg(5PlIl;jaأ^e*6qYM'##"u0|Iׅ}ph鑎 q_\G joV_7N F[% qn>7,mֱY05j?tcLE@%wѯ~MM0%]~L?k,-šܽ\*;Ǟ|ܵ曳/gԡaGPSsATvGV&1bt֨5<u Ricpɠ4|_m{{ endstream endobj 1835 0 obj << /Type /Page /Contents 1836 0 R /Resources 1834 0 R /MediaBox [0 0 595.276 841.89] /Parent 1819 0 R >> endobj 1837 0 obj << /D [1835 0 R /XYZ 88.291 795.961 null] >> endobj 226 0 obj << /D [1835 0 R /XYZ 89.291 595.212 null] >> endobj 1838 0 obj << /D [1835 0 R /XYZ 89.291 508.997 null] >> endobj 230 0 obj << /D [1835 0 R /XYZ 89.291 264.217 null] >> endobj 1834 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1841 0 obj << /Length 3182 /Filter /FlateDecode >> stream xڭ[KsW(Mx?fRfdHt Eʤ%pARDt8zo7?r6c8~;ph|v6{<`MnLgK.ᵻVsUYiT\?o@eD393El:_fgg/ Rhhfo~ YE] G݊R9DKD*gP+b#!L4% T0ODL߻?!ٗl_O y;Ha9q6 D27:MpFA},-"F5X,cTz ѷ9&0bj]>'[7AK<asj7&A J(a]eb?['AkGKI۶B\ I͉DoLԊX'/Vh) (/˂>51Gk<+>ó)p Y1\ʢU׺mVe: MM_4Y^{]8m^2NL0>USL (\rKqbѕ@@Bhx mS S)c =UwHGn5%Z 08V?eiBJء)aNemf&-qKL# e9 *($`:bB{7ZزJPgMbIuo**A#A#/MhN)u 6N Lgkb:st bz_YLO!s@n}U` >!T~sÆCYUy \uHuyj`@T=CK0N~ P0p5B@n@/dX =\g$ e% `&*U#+tw#&@*xqCS'= /n>VUUUY-c#X S$RK^]IF,=IG,ޔ#xY$B9đТZ !M"U@IOl :2}|9gxcb(0 {%@t<}Qc?#@-J#Jdv  ohZxool(GI$Rm/,5RC_p4~4T1Zn 0WhȫI2L $rlV>AJ l_>h/Wޖ>Sָmzvv[̏dx,@EȑVK '9 '9BN rB"$Rf@l<&6@%Ę7|A܀aPp.sVUH{)3s?xkCNV=kd~s +k4Rp&B3ɌtiᆑU\cB#~hM2$D` }Q~Q|Dl }g:M7KPT"Ppo^)X֡ݗ,Z'epQjߖc}_ܨՔDIjF0p37N4O#s1u"1+}6IG.`'8nU4!&:D܇%t<.OuŒG% /#qwͯ쐵6\p}HACS KT|Ewg1ʞ qiT1wo~f{Oמ9" Y^@zP;5׏o{{UſW"ш `s p^ƆXc%s9 ~\Ra9ft|m(pj]r}o ~! iX!`n~tn-Sfre kpڞ[O%"u[`PœxΩg.mpa!/~d80b> endobj 1842 0 obj << /D [1840 0 R /XYZ 88.291 795.961 null] >> endobj 1843 0 obj << /D [1840 0 R /XYZ 89.291 739.378 null] >> endobj 1839 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1846 0 obj << /Length 2153 /Filter /FlateDecode >> stream xڭYw6Q7fMlםv7ٽ=(6kkK$'o_CPOES$@~'w78%1,@Jz %8m&lp Q%;@PR VA1Jc$Yw:4w( N4hEHP "(]4%*\h$ ˑ3{S@fzJ Dws6gU)tlMY+{J_vH6oǕiWplbME8{HV/p%(3]/x]},H4q Ja^Bc,KAn/1?eUƬԺͪR/޻=0j㞎?ۇ6>e6"Сj?¨[Pq7X?L!I[,ч xIe1RJ;ZKZwT|(ɐ{Fv1 cI2si^H9\ Xbu1[ Js1X1Cֿnx `k㙛']Zٰ8Ljr@%? ~ttPU=b豄T#.8@8N71Dkq{!#F^ >gvحx^ciu]lzZLx7ھLǴ 23` [2S1%5$פ t`D™b̀sc"j`:61M pM@A5f 1Zbn/g]t)O$zl)eS<2Tf㔩|k'K\ \}0F QB4{}QS=.Q>@ "I7Q71dvx"c]c<]QE2QpvYX8;EƳrwe9K<΁M.\32Ǧp떖WP3RC{^2>#/_9 r[S $d($t:d_iq-k㫟㮵"ɭYqGeC-VC˞|⑁rTTXshKDvEi& "E=Br߀\rl:O p Uq}Ƶie:_<7['q,󶭋#d3`cgVԤ9\8!,ă sQ;?}z,(n﬎iM[7TEd+(uZiqSUV?%*Z(H&.(Ŷ G3B8 \+bEEXuWߕ|@!V)+2Q_tw` L,rcc|OUDzA - Xzn㟾dGBYdVބ?-*/q2vD<:4}/} UdٰM1ݣSYzޢA^/p(QiA!\ۅ"N= 6:c]6&(x#(B97DxXL 3j.NTO5ܐt/u}-I\{fLTڑ2$&ljCրk4!P_@̛)%(c|ȴ9{(!(BF_jwȦؙ2ߛ뛢 TI)39~j0QRoOT$ gpC..ر{&rҞ}AjīۛT^"!dw.'w}MSO8`Y͎\ht5e FF8F. 6>0 @I3 @JŁĺlpB=HN|;yRYr2Ţk!qs% endstream endobj 1845 0 obj << /Type /Page /Contents 1846 0 R /Resources 1844 0 R /MediaBox [0 0 595.276 841.89] /Parent 1850 0 R >> endobj 1847 0 obj << /D [1845 0 R /XYZ 88.291 795.961 null] >> endobj 234 0 obj << /D [1845 0 R /XYZ 89.291 706.255 null] >> endobj 1848 0 obj << /D [1845 0 R /XYZ 89.291 606.49 null] >> endobj 238 0 obj << /D [1845 0 R /XYZ 89.291 402.358 null] >> endobj 1849 0 obj << /D [1845 0 R /XYZ 89.291 316.143 null] >> endobj 242 0 obj << /D [1845 0 R /XYZ 89.291 250.214 null] >> endobj 1844 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1853 0 obj << /Length 2472 /Filter /FlateDecode >> stream xڭZKs6W(OEޏNbפSA(UPT\ÃHSp`7NݏM%:6yZM#=#51O?.ڗ~&t?>Hs1̸$Rۯ6|~>cN'`nLN DQ>YlNx˄5 LB|O}*BU %hszϔSNsYrPϵޏʡ њGkN cykM}U_h |*SpaXDXI,Sc!N}(ׅ\)`DIGW۞)ddC[PPH3V y7II!2XB膿H|+vcuʩ"̨v0wʩ*f)wQ[ 7g;@ itZA]|+ɘXb }i3ml=S>>=pc4ɨ!IK;zP(*=J"~i p'L>!XT1N{ ^18%7,QDA63tYVESTm|Tnb~ózEccPB`hchmS43MN'0@UUG Wyɘ/ m7~^z_-SVDGu3I};@`-{%_ =)71ZGNJeYr7ϸJ5`+ aBa\bu:ny}#Ex2If1+BX^0R- v$Lm~.](KE6R?* 1ce@!"FNvչ_QvT_dL2-C "^yCE@(_W0 pSlF@m/j#T3f$Bt$CZÁGuRI _G=' 9 yK;qG *QeEvŸUH_9݃:P:$:z5jK½{B\͍&>@}C:wo|~$aۺZdW!z$uء9Pb훔1E˸uYqL9l=Lm^=@X |}F>Q"l֡}'`1Yrh=w U$+*Mxk㍜U&npFUlx*(#N\"">ENlp@any% 郧eGEPև:^Cy:DqAVҚBAW*u| 'E+z^Yk `I9F(yΛ6H!}}&Xkq'mN2H#l,ԍV@+ucat1^:]s-z0—;AD}?x4ة,Iu%xہGy6@3iעQ I_0eqP*v$W,kXQt;a,Tq9ȱ?r7H8<2hrr-rۑ!5.rt"G8f|9rMr`!1uQ=/YǙ,33H~o|stE𴍂N p)S2ĭ!.2~l/c/㪩7w:2>;؄N[)VR۾k+%/jFwZn=a &4*GG\wzҚ}d~Zg|b9"1ctD>UE6ߜU9rSxQy,$5꜡k| nP+8s]"ѭ׆-Or3*KZ,njEpNwQ¦/cÎg8~Y%q%h2})K=$`XD '>G4?>;OvۦL|ٔ> )pGRj e0W>57#@KGZYs@e}2%pC7VPE,\EWM12mjh>"CR4;\C.Gϥծ7ԏ+m!FP{q/Go )4"G͢ XuuS!=9CS\#VzZq;\ :d|쟺\/dT;D"$7ȨKZ!> csximTݍӨe@Fc\ n@J.4{otn5. rw^V}0Ym&1!j}[A0@K˨vtOB#\At;HuPG1|ٙ/8hl`(ِ+p endstream endobj 1852 0 obj << /Type /Page /Contents 1853 0 R /Resources 1851 0 R /MediaBox [0 0 595.276 841.89] /Parent 1850 0 R >> endobj 1854 0 obj << /D [1852 0 R /XYZ 88.291 795.961 null] >> endobj 1855 0 obj << /D [1852 0 R /XYZ 89.291 739.378 null] >> endobj 246 0 obj << /D [1852 0 R /XYZ 89.291 659.838 null] >> endobj 1856 0 obj << /D [1852 0 R /XYZ 89.291 573.622 null] >> endobj 1851 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1859 0 obj << /Length 2336 /Filter /FlateDecode >> stream xڵZ[s~У!xLYO2δ%-6ItIz lżH88䳧?i7yqVx&rZ0+ѳ:ԫۅfv͏7gb&gH!gͯ l>o`qViQ}_.oyI_=l)MfBxl` Pfn$E՘H0H.8mB2#T: 9_^kWo2=շd'̫m4ؚANA(m Y8&p& 6&21?nz 5ڴS{mjtܜeq#XHK_7r*u7mشc* WYqYC-{Ig9?fP;u<@%i+f`#Z>IP%ٸ1X:=9)]}; #'V;Qd4km͎upq.UJS_m$W}~U4ُ# ]` Fb {2E&`ޚ {(c{b., 0<:D]! YfعLbJdSI`S.պ*1(ˑE48(A5q= HcH ($PfY}`E_@@(؞J?HXV"!> d^0M%;K8P}l)3sKPpG=A͡xj_L vhF+g)8諈ٗsE%;GId"3#D[փa)*(kb W%Qጛko4NtAwT=Cx` $ɲ8i<Z8ᷰWasVo6/e;J@Y\,kwe2EyUBԩ$NJ iXX$Ny ;#|xۛ=hIVU0/R\8j)I[GKx-eL\V^}l'v^SFF P$ZU*nvsE&ϡo^m .k>MBwlѩoOyEi8`<'J:^wde}m[~Mnx?K@DTƽ#BA~yȁ26YL{bG%C G|\`8(:.ˇugi&w &6Ū]u~՘b-_ftEVt;&\H2IS\&MK[.K?E4 R9͡vM_uWMJ%'TRMs l0:wn?m3q0̎{>ł.|,Q+ {}hq B+БhM(Vj>pAžׄ/]!Uo?_T|:C({zy֙^F_4>ZsCI Gbjd .T&NJ|? l*gj]lmȏIf h(tnutmOR6-p4.Syp9vOo1iw>fcMg!$|ڑck6:.&41v1Cp I)ck-$,ʸ`4 ]%M+~3=|D(^vUqɊDGhۙ\@xycX> endobj 1860 0 obj << /D [1858 0 R /XYZ 88.291 795.961 null] >> endobj 250 0 obj << /D [1858 0 R /XYZ 89.291 337.741 null] >> endobj 1857 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1863 0 obj << /Length 2109 /Filter /FlateDecode >> stream xZKs6Wj/Ҕ5צjjcW@KԒtlOA S=FK3A&C&>~ww3%HcMukDaDn<٪z:~g r5_*fνϻ]X3da3E)fϿl0b:Ϟ]gF^02pzr@M "US /Sg#{&!uS K䐺DK >u`S$!u`LcVIӗ eRi %'`'.qߓN. O,TH1H{c <cXy5H^|[S&I{" J 罄.O!CfU%! TH#B'=aDz[۰wH*9yc7'l^hhv$7I`M9 S rfӇ`҄saXtss(9KhI<4^@ fz':/ 6t^`O? g&jjl&du8~IYp?5ԵQC8 ) d}J4lJJtkz.ѰJŰfb~3%B]i%?Nx:N2Bl]+}*A.ٱͶ˪kw`USN3%~mQ;Y\j_%AVLt5=kj,M%XE.4,)Z2 r%#0fb1꺮&H6ָ.v}ۢ;A`u\t[hO!mOnA'! ߗH1s(&I%#7tܔ[`Tcjɼݚ_ExF_cH-b˅ endstream endobj 1862 0 obj << /Type /Page /Contents 1863 0 R /Resources 1861 0 R /MediaBox [0 0 595.276 841.89] /Parent 1850 0 R >> endobj 1864 0 obj << /D [1862 0 R /XYZ 88.291 795.961 null] >> endobj 1865 0 obj << /D [1862 0 R /XYZ 89.291 739.378 null] >> endobj 1861 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1868 0 obj << /Length 2925 /Filter /FlateDecode >> stream x[v+0x?WsHڻY։,:=4!b'ɪBp.@݌>_|ŏn&8 <יL`Vg9zi.߯ſ/D !l{8SϞ3Ŵhg_.1\( 7~uYLtwh%L ;R5sFJۻf7<*d |SetR;h9VOaY /-?+\`Jun`"%L:qTJǜQw2)~MaWPS`56a0WܓW_P#!|N}X=,wS?mgYJ\n :b^Civ$u] ,p?qς=s1YW1rVv`iO,MDx;kZ25!l{\\ wI* - t 7imt똛Ԩjr TLvw$+.u{G|7WaAw}6KY4Rͬ5,8s^iو\jd f!$7R),|o/'`Ϫyqt_oW7b~H9I?>+w(#SDO)4U>P(P(6R#u ?I]K?Bqk yEZ%څRk#>.)t;{^68N@a2)^%)sz]oӃZ6f[z%E%BΫ^ppn,VvA֨6^Ct\]RQi(\VlVlJ b` N@Inz\mK>Ux++j,иdZt??,e1(7ȕYO/u~,"E1畵J*&G $FyaV2+uLJ!V頦oȒA ShnѻzO?l^1=jPGBo !COBYoTYPgA3;0M6vZ; ߚGֽbJ\z ъN=PɎ\hHB8YԤkW5Cqt,kzyLx.sw9(qې\\GGTKb2Sфop*&S8Nh^h> SmP`sM݂+Ix_k:=['A,J-X$MHUKKȪ J{XG7 V;iݶ V "gc!#mCYTcI$#(d@ة=E̛TΩcέŔGsޗhNhNjF|bf,-yO%O`;CB >ҧBz_H@m}7˷ y40;Ҥh݀u;Z72'YնJBZ,5$逗1;v5_^gQSҩr!ꥩ6Xa-^;w :W5We踧V(/\mfUoO:r;Ru2a=oc7vgdÝi8ZSJ8ulᶋJ2 0kS Jt|6c(o^l5R zc]4@bټчo { hn"H!Bg_.(őܯdJ &7i ]M{/~[©wKm'Hy}0 ƳU~0kd?FnH*ł1bxp0Qn;W+"S#o*5y E B1qa咚17| z.A"ZIRN;is><ҡk:yMo;76/:Juˀ`,-Uۧ*qlrg;[ƶ^2q#C/lR>5y-gE׫~#T:BCVPWبq?r >g?:ԋ!ʲ9!jwYH*htiQWD#o쐟M:Ӽ-Bѕ:D "k}~y Q1ij)]ydkH:b5vt1%5_SZA$by v@>(q1֣dug#̗tQG˓Aꈈ ,RL0l5N"[u_(HUz9FH5HU\3~恨VM&P1eA i@ JECNr(@RFk?dhtH(zxTs$$%(t 7iGJ7O?xO*"Y_H]N`rmv w w 17'.SkzNlK%o endstream endobj 1867 0 obj << /Type /Page /Contents 1868 0 R /Resources 1866 0 R /MediaBox [0 0 595.276 841.89] /Parent 1850 0 R >> endobj 1869 0 obj << /D [1867 0 R /XYZ 88.291 795.961 null] >> endobj 1866 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1872 0 obj << /Length 2735 /Filter /FlateDecode >> stream xZv+9x?Ɍ3K̢EKȢ#Rms %R&-9bNAD {bŌn.X_qya|&вgFg>z*WZEso/u1,cƇW?^|fsL e 7xx$k|wd^mVEl 0 qЀry`YeT_ֱ#FY.e$Mf s1+uPa@}cnW(Y/W*q-*Y7bp1\eVfN%BjUmH8'h$ȄQ}SLB'Sf`eP % W\_>!v9]|Zg4v6m8+2_\svw 7aVeRcQRd=ʪ{[ aY3!2mpn^hVtIU(zuM5!C"̄}0qR^Ɉ0A1}>̹>JB#YИP⠹2GP,-Pw3b dhh/l  N߹Ϝ=pmZP(7gVVX y{<=ݍ(jHN} XyaF61P4u,ܰ1 FP_ጱU7Z= 䤹7'BI$'ٓ>Bl 9{b K `bșؙЩi,pTgLDC:Ёn˺u pN6K( 1>V-H\yfȕ&`*U8iY5\/|4,`UGR)"ͥNMQ#86&vo7߇D*p-5o!8z83 G8llC҃.TݪZ/bkMv1 7jCwSc}yVӋ< E쭨;6' |؆2uLA7cH#J0zjgW1 nQĪnzaK-;a.j.4Q?0THkyO=mu|RA]Q_P[GWRhY8?3Vu!w߷3d2"0}1_AeiFG.Lj3K;A 4v~ސE3Z>nMd3ԛ{wa7SiFJ@넇o2_u!T79zqhrn45C+8즨}_mH(}I:R]EOԧ+T ^|Ljw;R4LSO"rf&)Ih=($-Ds]ysr3X:[-bW-4B^}xZM S2OM,l5 ] dtFb}S6EmԆeb_I㪻ey]@SV`݂؁e"Xd Ni.z [$׈ۢK_j'*LZM?GGҴ5Ns?=CӋN/M|QJH꜡ægæ:,aBr{غ "E(C{>]ş]ge=MǗ1">ycOI]kR?jeBz?LWH?Uez1UH=<~gKto,Ç 5=tC;x١<|`7a!$LOByP ;MG<ͻCtmsҜpg endstream endobj 1871 0 obj << /Type /Page /Contents 1872 0 R /Resources 1870 0 R /MediaBox [0 0 595.276 841.89] /Parent 1850 0 R >> endobj 1873 0 obj << /D [1871 0 R /XYZ 88.291 795.961 null] >> endobj 254 0 obj << /D [1871 0 R /XYZ 89.291 213.475 null] >> endobj 1870 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1876 0 obj << /Length 2340 /Filter /FlateDecode >> stream xZKwWh)1x$d왜4t&ɂ(E9$=} Q23A~} Ϯ߯_J1Ynz5,ڰTrE{9PblaK~gR3gW[ߝ_$2߶g 3 WrJ.gϿ/ql6{rK3׳¤,3Rj9N܆geV^E[, dƴce@[,~\VNS=#sZıM9ѫ{V/#i)*ZؔmObR&Lfvؒ;@BeI<pJ3a鈾ê%6u߾~r HaX `A0 :h(v^J]7jڿM7MG+ME[n*?5xPS/b^+ I5ݯ a #5e1*ѐf@[7P m!0M]%Z=8=%Jǰ_|j#PHXgwl4Ӌ&)C@\L'tY*=AM<*q$Ppm ōR-p$`*-jB@Cb^Xh 6뽌K>՞l#lڍ>T1[U9 ҫLt=hŹm^u6 ͨSIM8Ώ&iaŗ(=`ҫ)'kB9MI۴HW/j=rIk d12ǟSX']5~d_GŐEOӫ#%3<]o&Ǵ5/h?bD5~tT#H=ߐj~֕9Ă)C]]aɪoˉ^{`O= @FgJ+2U-iH9XU\#VɁ1}vzً*o̡S8$Dԯz,jB_8`e՞PB8CLToT UH3GdfTv12$jdi: WENo]6e{:kf4Dг|KfJ.g[c]Ct_u綨QoRFzHC4V JBqo1ao;4z!)]!3h)C۽ṕo9"^fƫ >,RbXe(qQ1wy/XS] Aq rHE#T1lA#}$GDGLfn~*} \GI4Կ UAJ&btd3H뛲99Lav/(<Ҽd&(w [7<5Jb}2uJFI;E~)NE4{(ΦUA3FEbAL)O}u1i>*MYԮ!RvRv]~Sr XM߅]b'N<")@Pb>5ݵ.k%) #gƪ7n\&-J)&\#b$}!8]T!NV" rZqBpچ"Gl ̉+?"VBT&.N܎JYh=L%Z6܎F'nG{Ymȟ(k> endobj 1877 0 obj << /D [1875 0 R /XYZ 88.291 795.961 null] >> endobj 1878 0 obj << /D [1875 0 R /XYZ 89.291 739.378 null] >> endobj 1874 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1882 0 obj << /Length 2469 /Filter /FlateDecode >> stream xڽZKs6WhoTj ;^vj)%w%!q%dMBd7яǛ?r6cifSS63R#1p"V)ɚf~+Iۇ9K,y<>ݩ_:϶޳3FIJAKbe}ۼlQ$׹#{%^ݷVݐ tOeOsFlH0DY"#&w}|-eU%M̙J:ȤϜ:wsϻMVVa]^.JʉfrvQ2ŷUb5aR^>K 2йӾαP)o 'Xj{eou!P7 C73fC+I4Mgo c(gh0HIf+ʷK)#\LBcUPE6/sQ|k܈J9#N%_R (:PXŇEUm¨-hwm>C-l5 LoMmV?#QCRBIJl z=-S66o[Oz qT'X)Uߖ: _rj$F3{|Qc!y`TW@ ?j3nZ{\` Jۺ0 ӁB*fL P;aՕ Í'a wKs өi7kѮ-p^盗0usqPY9 )hT` xVNuTS iA^8.7rd Ә`?׹íwIk}N&Ҧ0$cDvoyCV%m%K9n ]38\5sN7*M %"yD32uC;@  R6`#׫ZiI%6Eҭ0h *R2ɞ(sP>UP=A{Q9&=T/Oª\(. U^Y)~e^eL*"ⷀQsF4Kw'1[undjOf-Ϯq= 3PF,@AQ6,y@A&yC7vtj/??Bv e3n^Mlݭ[]|)O7xs7 F v ;$Aa^_Ľ2J+`SjW{! 12\盶;E(Xs9*yi.HvQ^EM2O'@gU5lεJ>8Q `Y4 kVk. "NTyv$⫣0Dj{'VMKbs DxԻ^LJB%@+tHZk6P;e34lἌ>3*g.MHE.w1sE%ԏCc2Whj0w)މoo¸ZLboM/)v{&avsI 4 WFu^<ņH* ^b '\;hef^ǚ!?YE=MW+qr5E((|OpiIaƜoSusg! aStQv\q``-0;ɈD :OgZƺ)xU1i<>6Qt ue/Gx) T x> J9&wIXLaln~9*]`mH9!\HGry Ȏݰ[xiBSQ7Rt9Dª42/*ȥ)-9\'9G9Ž' R1qha$az版o6l)tڗu}TLD<}-#%) P\L&v8ܫ+nhr)\cQR zb""VȎVx" bŸ+ߖdGJK"}/"r;e>Έ(ϕOֵfhd6u .MWCDW/SHr.*ty9{Ĭ&*Oa$yσP^{rT\u:q a'6uQקu71 #t$=q:R\A| UA˧"OQ{[2&ߒ55^8kȊJkvZ,]<Jñ`;y0g$EʞV>Kɺ`mS8J|ɛ : endstream endobj 1881 0 obj << /Type /Page /Contents 1882 0 R /Resources 1880 0 R /MediaBox [0 0 595.276 841.89] /Parent 1879 0 R >> endobj 1883 0 obj << /D [1881 0 R /XYZ 88.291 795.961 null] >> endobj 258 0 obj << /D [1881 0 R /XYZ 89.291 757.701 null] >> endobj 1884 0 obj << /D [1881 0 R /XYZ 89.291 671.485 null] >> endobj 262 0 obj << /D [1881 0 R /XYZ 89.291 564.847 null] >> endobj 1885 0 obj << /D [1881 0 R /XYZ 89.291 424.434 null] >> endobj 266 0 obj << /D [1881 0 R /XYZ 89.291 217.465 null] >> endobj 1880 0 obj << /Font << /F21 548 0 R /F40 549 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1888 0 obj << /Length 2358 /Filter /FlateDecode >> stream xڭZ[s۶~УP/iΤ3ӨOmh 9#.Iœ.J"EJ"|iFgh{fGg-#51V_|\.7կ?Ks:Ζ\)Oi*-SAw:pˈfrf8'zw?t(^CL)4/ww`VT&9,g3 ,gXօ}YDY; rE!ԨIDޒ 7U4h$])ˋs%SQ2GqCyEXE r d(bsV%a}S盁d ^n^ f](hymľqF0A1̞ axL@O'X'w:N%|Q]XC $:+~ is~(yQAÏ3/].)F# H;Aђ&B;N멿zc/JP]o^/`JϛgԄR'jZG"hG\9j㈖FT`:%ۨsA/w|S~~u<.PE+[?`(&Y2sٽBp;UQ'3`H/cVRjW9#HA?n4'A/]97׀l 1SzBشs;bͼ}fhVGs/ NZb _9r@< ߤSϏe 7떤rseq]~>U@˗9; 䨤"ҩ¡ӁBq. ݢ=7$_)uiM < .va/&U}w!pI5w%ax@Dz?DV1i)'`7)#`1LGfP'R}\ב)?{OYZ0;#!G!4YergEׯm+ g% h`+O} I;!RHZɤCzR2[=ƿ[drH&#E?(2rD|h'&G; @0jd.$aޅat6:u??N]$PU^#% ].SѴg#V˴C7q2S8IpSBrgLHڍ57Y`훆V@vOG M *>'Z1 ЅQz`UN ċenW[ E^SpzVwغɪ&+^(SQ) ~BJ 8. qw p UYt]ѱK$(?(yP]}8tl͌mg 8 &D_Rko.[P9`fL΅7xSNl 5}I`9qcvOzJ<Eg $W]>~>ԶR&9dS ˫ rdWDx|Tښ<4{=y͛9%!V{_}>6/}8+zsWzv{=a chvorn.:]=Mg_E1x$5xƻT` <.Dc sQ*a# bh0%L;cD $Bx6B%}.: 0Ԭ,'8_B.8m]w7Fa : W;LCF7y^Aq>&SRnF11 Ī;&MP9AZ@W&{ź:^c%);()hS.&6_g `M|x9WCԮ؞A|<ğBtRdz R b]@Y6 endstream endobj 1887 0 obj << /Type /Page /Contents 1888 0 R /Resources 1886 0 R /MediaBox [0 0 595.276 841.89] /Parent 1879 0 R >> endobj 1889 0 obj << /D [1887 0 R /XYZ 88.291 795.961 null] >> endobj 1890 0 obj << /D [1887 0 R /XYZ 89.291 739.378 null] >> endobj 270 0 obj << /D [1887 0 R /XYZ 89.291 648.588 null] >> endobj 1891 0 obj << /D [1887 0 R /XYZ 89.291 562.372 null] >> endobj 1886 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1894 0 obj << /Length 2407 /Filter /FlateDecode >> stream xڭYKs6Who+B~Of*TU{Hr)L:$5o7J ٞXn-:ه x}{ifG]f##fߋ/m/W0/` ، Jvg2D8;{+fHavr&QTM/&قfvDyT)P)ΡX7*tSY0q .e:]80I fa-z`˜ |!- cv~;T~o#V[H>nx#\LV]{W ˧ȉav'z<Բ8*p"1[pg!*]6{LF8/R<=\18GⰬ[m|]?+M5m<7|BX<(>Üށh5߷x7圇 .N^sx%٤*(Gѝ_lQ_lZpd8 VU-YS'1qM)~-?1 sS.y Ynƹut%MC&=ޤu/V571gpcF`X(xcf*"x0 2LÒr"ΡZRPTu%wGJ;US)q;+纅 `sܾ)j{Ɯ z]N=T'OP;fՉڥY ]Ѓݙ̦+ 'UoIW?рS'$ htI? rg6&kn[ m741us2*@j]#6E)FZ\vi0)[|r[H`!ΰWВd.2 cyƀK㧜@8-ljSȪ@T 9PV\f6u#Fw| \ 0qC$;H3b|5DtA%րJMUljS\LĶiF$$amڇӟѺ]E!n'(zrb\xYr YX<~:A5p`U1iB]J Zx^ijg#e(.M+ x/P܍05[%N 9uE9Rlb"|CꁻAwڈZ?EZŒkyVA|}JXiUD1<2x*3Ps=|\A9=S +:FrCY T {@+'@3g Z6rYJvvS>4#/<21^ȃdM}&!puԉ]3rL9^n=JEFZ?\샫lY[{TMeS.CGcx60 VkS*]K Sܔ4CTca6OP^۝9ab%pOu/;с!z߁M;2iGk:Fkܔuݦ5 |ʱkC$0Y_VPP|fADָ*/er*RP:~Xڳ*z)8UP+6B9aYZȑbgs,9(~ۣ}*S_q`q cD0umwy*#Uxwɯ(>\F<yO^]sӢOb%0RC 53iֻ֏k9Ү)70ݜ}u͈usB%=ڍ##ݭOBOii  (@:s@AY92Q lv'TkqsSC"x^ /#@BrF S3l`P&~c 8TK k8=8YRXK:b*Tqʓ,9E dorꐐ &uqY!>. @-vr}wz’|.ilQ<|b! endstream endobj 1893 0 obj << /Type /Page /Contents 1894 0 R /Resources 1892 0 R /MediaBox [0 0 595.276 841.89] /Parent 1879 0 R >> endobj 1895 0 obj << /D [1893 0 R /XYZ 88.291 795.961 null] >> endobj 274 0 obj << /D [1893 0 R /XYZ 89.291 616.861 null] >> endobj 278 0 obj << /D [1893 0 R /XYZ 89.291 482.145 null] >> endobj 1896 0 obj << /D [1893 0 R /XYZ 89.291 341.732 null] >> endobj 1892 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1899 0 obj << /Length 2063 /Filter /FlateDecode >> stream xZKsFWp֓y?fw+J%-Lhyd&\ odnUB02ؐfh()Np%OX}|}-Xm7?_ 04M?qýɣy0ę2)pXMJ*cNhI5 ZA&:1 R*`&MQm'EBEUcͮ>c=2F1~{O!{o޺5)(M0qKu(ooKn`|!8g)N %k Uwg3 3`s@PDIqPd E]MA Û@bQwEv3ƴq^i.{zK6 Lx:\S[w.`Uíbo\Q8bIn6w(8mwiﴉ&]z3'L Fx_tEZ z}.Xi|5+9V̶mΡHb3.1Jg Iud5VzO`\ ]QAI|1!K<j,Wu\/~k{+pV]Sݜ6(QycsBsLhQfV)幽]Smx԰&~pyםr]kP\%(*1 h{?S }P6rbBZ-[FK.$-I- r3"1V8Ic:; {Iܮ}U=)0 : O ;.vja_!pL{YC<,K1ovv5@߻l&}F?C*襬ziJ8-H:hfRWU [r }%KSK"J!E8$r|"1M5]k߉ IEf2;1.Wt]2l<G޺j:BCAT}Gf:XHbfMtL32$0㏓H9X^^CQrʗg ^33^!n2-~u+B5TToǟ{v>mہ;nx8EXC<.YE6Va#p?DaD _ U`?̋ endstream endobj 1898 0 obj << /Type /Page /Contents 1899 0 R /Resources 1897 0 R /MediaBox [0 0 595.276 841.89] /Parent 1879 0 R >> endobj 1900 0 obj << /D [1898 0 R /XYZ 88.291 795.961 null] >> endobj 282 0 obj << /D [1898 0 R /XYZ 89.291 505.818 null] >> endobj 1897 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1903 0 obj << /Length 2425 /Filter /FlateDecode >> stream xڽZMs6WhoҔ1'Sl []H%>l!{(n~M|b(ԲXqUHF4tƊy7nL0A նy?`~P"6w.Hq|W AU]j6s6D)`Z~E|fY@@^'*`N 1E/O*@S}v-ĿYa1n÷U|sIoI# A(9&RuQnBi1 }c$@`)t0Gc^O8p}F dd=]& §RYEzRln×v|>DDJ$` BQ(A o)L$tUMb:AsqYĪxSQ #Tؒ\^Xre|,@m>ToD[֋ gWMd[U9 :Q9Жbŕ)oKkjDiBM\eŹY#5;Sp:Y(-JtK-`Y x,$B>ҙ1 5of` @*:""9%~-Ev=H$uK{tzmMk֛yݧ'BaB= .%Q5'B_WFb+qZ-2(}RzqR3 ?.p9mRjIm!ԏSJCC/JV@_4BiÆ [dEhc9p[=сv4ۏ_X8$fx?Ա&7cƦV#)<>B?k@(hJ&#V޿42Vli[\Ƨ-q)n˧}|ʀiو-JUez6C⣇km!yq;;w4n8O0wE:RJϳ`g,\F,3ςi=I]Y{8/Pw~UX{l!d;j6&c %ƨ=02y3/ endstream endobj 1902 0 obj << /Type /Page /Contents 1903 0 R /Resources 1901 0 R /MediaBox [0 0 595.276 841.89] /Parent 1879 0 R >> endobj 1904 0 obj << /D [1902 0 R /XYZ 88.291 795.961 null] >> endobj 286 0 obj << /D [1902 0 R /XYZ 89.291 635.86 null] >> endobj 1905 0 obj << /D [1902 0 R /XYZ 89.291 549.644 null] >> endobj 290 0 obj << /D [1902 0 R /XYZ 89.291 456.555 null] >> endobj 1901 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1908 0 obj << /Length 2148 /Filter /FlateDecode >> stream xZKw6Wp)D(ޏevsfv!K9PT Y(YƂDpLnjfh%:=dh_oEU>'ѼZ/~ltu}wa8Jn߶<-~fs<)D8 Rh?`Ftא崙=rʉc.,{z&˅"ڤ0yYTS"y3<]ߩ-4%S?^߷ђ>tB'op&,&ouO)1VMU.8z/C L31"!}L,is \Xq!.D;)3mRp #.1SFK˩$F3IP&Tj}#cT֐˥]ARFnBu*Ko_+ d"VjJKy:0II1w˺d! a SXE فW|XW0WgZ."/oE Wp{^yلBtD[{yL 1n%VM'%ACIO%# `!]hP24mip%KiP#]uU,Ŵ.UXBޤB 3a;~Xo̓, 8K;(e"&ј@ VӦ :@FS` 1^6f:A vgJ#`BzPbX̜H^K=".@O`> {J.tٜf{6rx~Zӳt4>!͛7n_vJpbx7{7\9W}ꐪu<mbw*O2[zT-|JD*,٘џMΐ@\ 4|aʞ&,7b}gΑz+*NYnݽM|$$7vn(C $C6_]:=S7%o,w eV>9b4gO77ӮNg#`.ÞybU1?u H.HC`AU9D{<"pT)9(;yi7 r0k: ۇ7W ڹ\s6jU5+ͦ|Z=Og!sJ9Sֻ[ߺ +|d5.҈Y~;&Z{!=29YUn tUX8Z{oq}Oeņt&Ёʹ㛳흋OqewuoǢ6:zv6A:4!QBƏid@N># :\Gj2mL;×..HX8߯:괽.h$u>5 53F~ )EM98Le۴/p.P.4|^4M{{?C^1>>rG꯫D_s1$F=\ 0.RƋ{!@Ek쑋!D(Ҡ"dvQ"Bb.-Lq7|r}8Ģa U))ʽG=W,F^]PoT^%(7I4臢fSF v`Ok0 j`F vPC> v`8I2:J DNY cznD {F)P7"܅=-w"ipwF~=v68*P3vq` endstream endobj 1907 0 obj << /Type /Page /Contents 1908 0 R /Resources 1906 0 R /MediaBox [0 0 595.276 841.89] /Parent 1910 0 R >> endobj 1909 0 obj << /D [1907 0 R /XYZ 88.291 795.961 null] >> endobj 294 0 obj << /D [1907 0 R /XYZ 89.291 605.143 null] >> endobj 298 0 obj << /D [1907 0 R /XYZ 89.291 427.508 null] >> endobj 1906 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1913 0 obj << /Length 2154 /Filter /FlateDecode >> stream xZr6+R-o˙LkR5UY$Y%ZVʢ:"DRE[H*X s8qhm2}Ͽ?}I"cf,e$f4DB):yYUSe=g|ftV_;3F0 4[Fncbls5~pT1ʼnM3Er_h/(d]&>8`dLpaDRp_V`9$ϓr Z?SEN ??WWUv><|RVMY8قqM,S!v9c57m2*آ",6 q 5-JƯVs$e$iT{`nK?Xi+2lu NxIƖ46\y-:|b?bUov=L}\]p#eؤoŲ.9a=׵$*u^ K B)o'? ],ðϪ ?'U/upi[Oa7y| ll,ٶHLsxzf)q+?V|~o";x\?Pk5rsO痆/6EY+ kp/뢬0CG$!1jp{; -aᦿbbHWK͍Q"Ɩb Aڎi_ tR$s(;?׸愹X{oql=<+rtBPMK$ 939e\0;ZfX\q OQnVte, >lUDy]$ȪDSGRrKg(/ݺx2>)Xt!s1}mM[Sw6.p їp}cR3 fnpǹ6pV Ԗ[=Էs_e57zzx}_Qhjp=q5|[u] Dpt$AV{V0+QVih ̮(53QQ>Y"dOavQnY0m(cm\ad(m %ukSbN鶬! ':[T1%9[V;%(l Z~[M}5}/E;Ǣ߶no;A9 endstream endobj 1912 0 obj << /Type /Page /Contents 1913 0 R /Resources 1911 0 R /MediaBox [0 0 595.276 841.89] /Parent 1910 0 R >> endobj 1914 0 obj << /D [1912 0 R /XYZ 88.291 795.961 null] >> endobj 302 0 obj << /D [1912 0 R /XYZ 89.291 757.701 null] >> endobj 306 0 obj << /D [1912 0 R /XYZ 89.291 555.565 null] >> endobj 310 0 obj << /D [1912 0 R /XYZ 89.291 260.899 null] >> endobj 1911 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1917 0 obj << /Length 1918 /Filter /FlateDecode >> stream xڭYr+XԵ*SfHD:$W>H4$kF\H4}nfn?7?r1Ju,Ȭ###51gע}+f/?Js2V\)kwjS|l"\)moaxf0nLfs(Ol/(fݣL)4Fa 0URxk3I,gX66PK2,QcXsB[n:' ;CQ&G.T=H  o˷[Luc9Œ;ĘŮxwoK~m\qy|i~g1 ~ h!aqS{OS/]<[/͟(mY3Sb8svYS=p Qubdj-⡮jAS1e*tW2"iq✘tS;o./7,8K]ƃS0w0@/l?SʋT| 2Fϫy%& l}%(Є-q0+HhC[NFyW 3`)C7!n 'nU8 %M8&T{[̡~)lTΑٓ8Hf143{FUٴ!wOuED $ͲScR<\.cxq1OR:IWTHlMM5YMN{X:*U=ByF1S(hm]qGͅBM["ݤ9cP j:5Duky} ;ΣK#]\ HeNV":͛ʡTX' 34-{ chjNv!sЌ8 D@$(`f!8d WDDRt>~PfVH.|kPİ;mW?:$ ߍa.Sxnٓr$R_GX^{i|_? &&SA~H~=)SL4KAt ж'Ht͝1̴'DL+; K]qT8'`Pa}`?&΄9)/u&$Dʮ @/Pʐ]3Xvd΢YrCfcE¿@9sؔ8=A1ɼDq%)&E3fv7̂Qȡ[kh*w3Z+9QuKQ3{dxI߹}+. V`} 0ۓٳd0ў zaF"𑵳lWͦw*4K Z ~tA t7Qp^@֮[ZK(TnzE#1@͉\\{攋ZM,NZյun JפzmK3дq JG!m+J D5ƻkO endstream endobj 1916 0 obj << /Type /Page /Contents 1917 0 R /Resources 1915 0 R /MediaBox [0 0 595.276 841.89] /Parent 1910 0 R >> endobj 1918 0 obj << /D [1916 0 R /XYZ 88.291 795.961 null] >> endobj 1919 0 obj << /D [1916 0 R /XYZ 89.291 739.378 null] >> endobj 314 0 obj << /D [1916 0 R /XYZ 89.291 673.875 null] >> endobj 1920 0 obj << /D [1916 0 R /XYZ 89.291 587.66 null] >> endobj 318 0 obj << /D [1916 0 R /XYZ 89.291 523.967 null] >> endobj 1921 0 obj << /D [1916 0 R /XYZ 89.291 437.752 null] >> endobj 322 0 obj << /D [1916 0 R /XYZ 89.291 278.775 null] >> endobj 1915 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1924 0 obj << /Length 3076 /Filter /FlateDecode >> stream xڭ[Ks6W(Ml2T6Ud%HřiRԌx1)u泧}?^, f3ĝӖ9-gٯgsX*1ߔl{?泥L٧bRˇH3q': =sR2lr|ggo՗bZYmg';= &RxUrϬpB2UmX;&̸6}7|LsT}vKs=!Xؐ)#R;ΰ7%%r,7nO'e AHC)FIR L2e0uB2)%<em`Z"V@S]vM]+gKɰg5l qs׈NVt"&ɕ"os'ZVCI32ςur,n͈gxw.&s )L# S$k'Ʋ lYءp٠:0jLTWLxy5`n̓0sa 1O1#d(TrDŽ-j-{H `# B3ÐnYXq{m?f;GA 6c6ېQ@NM.ŵSWz($ixy5[!Rњno gFLx34j%$y(=3e;QR!|4cNiz7=A|BNO'D:i(4LX ݘQ`.Bz!{=:"h2<'I"S$S&}ӪVTM͒iP/*_#}Nu q|J-T ~-e,Zn8`L hL? W$sIMAVu~} % p??=sZ $婧{F", Lߞ5, e fޜ8cyi"8OVb{m%B}_=+^nj[JV<](e6Жr?|sEMz@ wU虂1 =S0>s'u[•SidptUhEe;>kק}}<Wq7ld_?0ac> ZҸQ_pוW2i(^{[ą8\ e*tHk5_x\G#Yy8CVיNqI:-dÎƓz뚟~~ ys|nThiG1.OI uG]y3]P5;%ۭhpg/"q#v8X*6tMo>r1 Ft&e5zmQGIcgI+E_x}twҟcHXj.ikOi`![#gGd),l]٬N}(KHGvD(}UEC~^Qa*ICu-F3wM)MжP`x!=OLd5 k7󸓫@VgN17[3z>ͮܺy|L*m0Jx$DHuLܰp:+0 RۜщhDK*{9 h$5G)E`Pqy6.9iA .@?+:$zS07H'DKN{Tx4ӬW"{`l+LJ LKsD)t-_i(ka]!i3:a⩒$i"l*O0٠[¿dǦie#>@-Ʊ__INQtRMrhy E$lE@5m8Mi+&mkg_/;Ŭ5W_%.`JFLXS=;J>EX&u[W< 40n4`c/J|4v}U1HRXчqyhIq́OmY!s9!by,/׭Ah[Mh3\n1Apįk¯Z t!T~ 9P1l&"x2]Ԙl{zlgԴ)4%fnX{e%IOu_iZ1[N%9`ĺpgV]o endstream endobj 1923 0 obj << /Type /Page /Contents 1924 0 R /Resources 1922 0 R /MediaBox [0 0 595.276 841.89] /Parent 1910 0 R >> endobj 1925 0 obj << /D [1923 0 R /XYZ 88.291 795.961 null] >> endobj 1926 0 obj << /D [1923 0 R /XYZ 89.291 739.378 null] >> endobj 1922 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1929 0 obj << /Length 2289 /Filter /FlateDecode >> stream xZ]s6}܉P|7 |DwDi7^u6ĕX"?-SECs/|,?G@8(U$& ;sу[g\6q.4.ϯUr }^?6*q7%080 ^rb"FXxLϖ__C\ńjWqǼ]أBVmm^U}B+y?: \6Ζ;Lǃq *|D̃øpMmu^Vu0a W׳ï?F/C0Bwէݘ7sm d)ESۼ֗s)_-*W>`}Vl£e_5~q_tn6%0.5G\/jǘB(bl{&X9WW.᢮.| qZeC{DiPf<k[NeeX' Ce&9pCd #ϑ>u v\<%n<JL8Kꄊ:%T~* ׻CB$b"яxCe _h3&谯A&f4]vs3X|{k!L?[?$svZ1GgJ@yBbmlQsjZ2?" B06@Nl`@Gh o ,V`Wն! if率wJFdߌ0R2yҡ ʗ!,*3&C+( ))W]|{xSӥƒ38lYjuf56Op:y]Ech6yE9vN@h ]Ey25"$)wK=˜ON꾀%gF$ m)CI`#`$ȑÏI<nK |œ G?t4-i Qt\#K4O!I["ؘIΓ0Ź< -\HIK\jœLCw,*ORyi*OR *OQywXH,l|N$ݔ Fӡq|p&u]cQx<'s𿑨39L")t6!}P`_I~k1LkBHV=ͳ[W+We4]j*CA]xӔZ=rGaQ\M͑?E.u+<\¯Oɇ͚9\Y777#Zy`0w޿z7Fc"XW~|}FAp> endobj 1930 0 obj << /D [1928 0 R /XYZ 88.291 795.961 null] >> endobj 326 0 obj << /D [1928 0 R /XYZ 89.291 757.701 null] >> endobj 330 0 obj << /D [1928 0 R /XYZ 89.291 628.812 null] >> endobj 1931 0 obj << /D [1928 0 R /XYZ 89.291 556.146 null] >> endobj 334 0 obj << /D [1928 0 R /XYZ 89.291 268.771 null] >> endobj 1927 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1934 0 obj << /Length 1889 /Filter /FlateDecode >> stream x\Ko8Wh5KͭAĀ-7C"ŲE`Rɒ8ߐqT&wL>\'߮޽() * ZiiG߯FǦڍe2ejf<1`FwyW /4FBrE&S1B<.-P[:'\UzWBUҲr}UxPXAJaw.*(/08TP"hެVrD~{&/>]go 6(4򸪍뮫|=[޽zCdhA2QZ e7ls^WcHl4n=rBE0'Qтq.-H5 &* 5utbY*,r{6G{8J>m,0XS,hh]:7qS}Ds]#Gl-W_c^߬f87qMyu6 V1ekt\E4D d - E[Ra \3P V A7󌉃^*gc ZFQ*ByHӢ%T5'vTS񦰅&/ "PNXkϓ(O`YLΑ(c!"_h 2CєShf6A8Y]XZ # ,Bu1[2!bpSI^wGʋUEl]:4:ChQH` BRs`CzP3$`c`!`cPx%`U6!`m|AZ^߬ 8l8ވ5z9<^RS~t]d˼Je vF?_ Vm n*Vy֗1j%<ʐi7՞M:T4IN/)-5#yĐG{eanL@LMw1cp^<.'O!E)OɎ$j)UX(/T0 9G6NRXRUzd]w7)I (=Ԧ RL;"ҟQ#i5\gx_yJ>9*xX.hi O%B/ϼ^͇ m4 tk^1x;}^. -@雉؛U/Z'!,"(-XD{EMX4m4C t ~[nқ|T4#ލదNwR5#塓u~Y )x(\PEO$$mkd!SM$Ax,%ڲRzyc}kSi՜bUZl|>rϻ/ /`X5ڲ0^\k VA-s&VEcX<դ]O|H1eїQRmgThMZ;q* A^ؒξuQ=GFQ,EhN'jF%[Ũ˧ha9'p?ÂZOud톗L}Z.*cv.H I> endobj 1935 0 obj << /D [1933 0 R /XYZ 88.291 795.961 null] >> endobj 1936 0 obj << /D [1933 0 R /XYZ 89.291 739.378 null] >> endobj 1932 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1939 0 obj << /Length 1778 /Filter /FlateDecode >> stream xKsH !fg{^׭MU.[[6Ƙ*Y % SIH.3=ݟZc21dFnFyKWw?>mY7mFo~;0$Gg&3.]hGw3 9sBt=2x`*7Eo $+jMbSrR5Qa "JQ tla IE-)"qMyZoQDGӹb}Kn@_ݮMpMW@2䒄Pyv7Omi΁edL6 ٛi\pq;=z7l[4yi٨l0\d[e` [[͡/NJ$bl)p)L1n' `{&% H@XnP"ųk$AK0z::|!fNIqXNGs)aCpʣ#=ܦˑ;盇BaZȸt٪+ +1){;e!_{`[m$ Z8ZNwm< Ε,$Y=9eYax'D5ӧ 4|^:}qmS}YxӚ!b.izW^k ! jp]L$@Mi]j4NlUb&q:.=LFVK2m'uCehgjD@cEa-3k fMp6|^*;c=ik%E8"ZKmhRB;GeLTx7uG˾ wz>[rZF{:jTCT1~M|Ptub 1Ac(q'qR QbHx.p-(&j%T_k |ipz I.M.i b}bsE@oUzV& eaj(ݶwW3Rg!TJ(T 9{:)w0%'B=|Z, bKס6|HXHI qFB<( =[`/)\n0(DZ,C]U śe-jT&H L02xWbP<%83prO 5+>BZ+z$V(UOB,oB)8a!Y,T1% a'C,!?a!tw!U f+`YƦ0t) ^NB:> endobj 1940 0 obj << /D [1938 0 R /XYZ 88.291 795.961 null] >> endobj 1937 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1944 0 obj << /Length 2403 /Filter /FlateDecode >> stream x[[o6~ϯУ,9w)M>h%1˩-7=~g$Jɗ( c_"g|̞3}C)) *|@-JXɇl0nFL/4ջ,^*D)(4vnsZ4j tWbMY)`nj)xunhQWBPQxenlU4&B0fSPM Km?Y=}e2xs2T/f)WkU_ wZIOvQ,˘Ι|^Fb \ U_ul|ݐކ Mj/WO]Uu,Ґws2D|$z+?,Bq:r$Z#'h8pY2X=ZL5%ZS%SXڔ%;&+K矴 $coƝadQO‰1({H.yGVWq1HPkM뀲R[f]15"/֌E)W葢Źѳ,/>zGSz+-v[oVl:[6O!6OV=+֛hz$ǥ푵 M9R eR^ĵF ^ ΨRD'bOmXzk"Ah\o$\eIq.Q|'|GkJ ݕ*]+AgTX.=GA(hGSF!o4$eawZy}Lӎ7-cQN2JP$e,Kys1Q22B.x}hN^[^}̆CEމH^ѥA$R -"+>H)6u%.u`ŴFK" ^d>c@ȗ<CGsG΃=X ڌrUxtkt, 8S;&_H8DC {|ZBsPNGQI5NGjP0unPR%kAq8$ ;RY'ơ]:5)9] > endobj 1945 0 obj << /D [1943 0 R /XYZ 88.291 795.961 null] >> endobj 1942 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1948 0 obj << /Length 2328 /Filter /FlateDecode >> stream xZMsW(MFmRVRJm%2(;?DHEYb$կ{hf;wIQbeCf,҂xg2ZZmOә9y|ڡ˘4DSg [<͖nM|8\:vLaȅw k5aRgBܲx;f: (0bAV̟_s+ŦUZ,m}q $K vڮύ?G7 ʲD [Ӳ-+tշM;xů0w]k@4.ތIUoLS;돲@06-aAIo6^=ʡNegz0RR D2v)KDm3/\t2#u[˘=d`of@Lr3pP8zI8_cY'c4KIbqnb$l6Y쐧hO/)I 0"9S1ݡb+Ҥ;%Nv0G&a v jLIڢ`Gf]gm.\ʙo6F%L)#攑tAG@'XX$3cRuEIԛ^<%W9j.rc쫗}^t%ſEy(s!_x̢T ⼽Z-A~'AmfW Aݽ8D9^k5>(i:ƌ!ۄ=~8ZWض4F 5Y!ÉGʹ{\-*pmI>rvx)P[nQVnX%v˱޸Hsc<ύybe,nyH[%1ܲCCfxB#6OS-&_O-|!}Q.ڤG1ppw#s!?F cA#ˌh,H k_0UL ۥ\`R iLrb`l%m;` 0CVT$9&o )4B+Ԧ}ILd~z߯3Wmu]5{.p\qw~E ¨8" M*y^h]:q?;7 io^M=q^chK^<ڑX4W)wq'5Ϲ߹6by,W*q;(Lec6p}AMHls&4}v4+  *҄$byN\v;NqtdpQٝ6^ _<wx*Aky.е椳)xi/ ,+,1imi <}?;?L! d|2S*^Na:]#bq"Rq?LfקTp?mq)5 pRࡔNf(uc8>@$ȀX 6g@UObz|WkmoiHZ^kNڃbE+`0ߨN0>a)[aXsYsQڧ߸p0#SA$(UZH$ŊIš 4sq$eXfΖ2#iYz~YqX6)m8)Ddmp&%е'#$J,EA.SSX C/ƅPtXM/rU(Rt4|"v 36d3q788Nі endstream endobj 1947 0 obj << /Type /Page /Contents 1948 0 R /Resources 1946 0 R /MediaBox [0 0 595.276 841.89] /Parent 1941 0 R >> endobj 1949 0 obj << /D [1947 0 R /XYZ 88.291 795.961 null] >> endobj 1946 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1952 0 obj << /Length 2223 /Filter /FlateDecode >> stream xڵZK6ϯP",oGo8Nֱ3U9dsHҊ'_4Ј^$k oA R&7&%WF29,'M?ol5o~z}s+t&LPBd|\;, %f{r3D )p&QT]SnΈRz\È<-72"(Jb lQ6bd+*a)> 48! E(J\򗁁Ŷpsf&saM F$mx,p1[ТG}\"5QXY[5A7zmz뾉w3FE>F3[;n&fb'=S!V OKvyj/XSk\#;鯯8\nu:l3!Rp8BZ" 7)a\,QOI* DqS[aYe6DşaY<7M]ȏÌÏs;8d $UiY&8{"\)4ц] ȦT3(3ӢR8;Ei¾pa/D_`Ōip6&U\0( HqW1\ Xʲq`%wY|l/;3:rHz "qlgׇ?#8B G:ld;_]Z+3xʠ6>bؠa=pg)Ğ p֌9:ՇId:5(lK1t/I+|?cٴ@xMzՠSMqI_`@&}v]_Js1/8ZT Q[_S)41ltJ,c`+xPhrEL '5B6/,S=|]u˺8(H J eP/sce. ԋƇ՚8"~!evcզ5j3Dc}U:9HJȂ!>9AyRNas \ *u ضp`](]8gH.甆ukc&6!bЃ2B>HVHM}Qll&~PF4 a?!20KI#993RD. G#7R郒Veun ;@iyN<'Sf]R-yg.q'V(+yN6,Apc47xgRSj8l%jA9_|-#ŰI((!>(渖r*d6;CIB-T(JTcRy;f4T__-ωLɣsu׾\؟v𴤐filc,C :@zWc6Բ2ս{u/虣5X\ \z$ endstream endobj 1951 0 obj << /Type /Page /Contents 1952 0 R /Resources 1950 0 R /MediaBox [0 0 595.276 841.89] /Parent 1941 0 R >> endobj 1953 0 obj << /D [1951 0 R /XYZ 88.291 795.961 null] >> endobj 338 0 obj << /D [1951 0 R /XYZ 89.291 456.231 null] >> endobj 1954 0 obj << /D [1951 0 R /XYZ 89.291 383.565 null] >> endobj 1950 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1957 0 obj << /Length 2708 /Filter /FlateDecode >> stream x[[s~У|&Fpt:LsLmrܾ$y%ZR#.I˿.RLJrLbX|Ռǻf(qԱ:HF4;ُ^Mwݿء36cC;gݏ?vFpv? "c#`&OP:C9p9gSܗn5.h GS)q2W8+jJ$OTQ 0A 練Er\cR[(վޚ=xH Jb]\onX[07Uk|p|Cq,Pz92Y ᡔɮP(+'6<"BE}+cLH"!*cn󲤒Pe-^yt v z˦w3ߏMApA6iHMǑ!Tv8}+R &і┏NgK t5U]/wߍY@q~g aW]uyi2Ml `cYޣyG[Rj I68PxRZ(ĐY9\KR|4G,yp `/m1ISD<ᖙsW6)\ud@\ㄝh߈mܦ Gح@a ?:ދ ./jrh_9C1PQw d6g  -E#~64& FMD&%4-JD#!E"M!0YP! $ 0ixl <Qh"?͌#K9?W0t S@Yp gn߼_\Ƈ徐 7A^)j l^=8Q ܕio %ܩE|V-FHP?u31ZdAj Vb$".?+j1ۨ2be@[ r)oޤ @#VqBboH5ne%^cA 56`#J+bMfwJ6E9b").z@-B2[`~Ow͢%PɏYe0c۱BV"?ne\ )V!p3Kyr$(m b.aa9 O3 ERaHuR8JQ|IrwRjӴl@p8 A^W/yIdUoJFvꣴz{ZNgٱyxWJP(XXO7zWZ۠ڀPWBXĨyN͋W2^ Ɲhܸ6ޖF,iӮ'kы50Tb646e:ƵA ۰.`>p%{4q2;Yhvrn aK?!bo~x1rQrLdV$1 n)d-Zo;2XZWPQ<*A[~yS~pc]`:Ojy%QiG< Mb ~r}xDtgB>G1]N=fqh]n0hr_ƾ M YRQ=i_jTP?28^Tew)N͊Wf͝I mqyz}ͫ2,1J/eR9L*>[gAE}ی1LsUH@zI(>e(!6$bt7>8Mc#l7vnvݵRyңZNZkE~'O8: ;0|egv:f6^Lw$@Zy[+Z\"& y+>7lzyz9,eX͛Y#+5 pGCĚ'!yb́uW|>C9P#Ak:~ z!Vn흌HM s;-J<8j|Wsw,WԳ k)(#ijywR؜;b2RObISi|'|&Ilkri uFsS‰TIuD, ~o_p _!C!eB[LʫNHDG.4>b$ʂc۩G쩎R endstream endobj 1956 0 obj << /Type /Page /Contents 1957 0 R /Resources 1955 0 R /MediaBox [0 0 595.276 841.89] /Parent 1941 0 R >> endobj 1958 0 obj << /D [1956 0 R /XYZ 88.291 795.961 null] >> endobj 1955 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F81 1814 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1961 0 obj << /Length 2331 /Filter /FlateDecode >> stream xڽZMsFWj/˜7f%ǩn&9$(bh>o>4H!j/`4ya<%4ywE~i(ԲqK8FdDs̒Gdy=V\?y| &,atu4o?'kgr"h|oLi"\7yY赌Hk%'_O:˹%V!r!0GTQ. q6/1 Kt > v(h3AaE^4q~z! bF1oJ*k6UAI1PdTZP_gM=,/_^3/fkXϏ ɍ \HAA}NP ÍQw4%TAs g2k"*Wj  }H/!R\wEIã`@=K C  )utydJ"N6l-0Q!As MR x8wq9H$=q]Ɣ/hfF||]gan0Q^dqIh˺?-~t.PfrY:_ xR&%;%ORv%R,R|K 'AC\by&՛ FTx@A=/#SVp'cpfҋDwnzs'OTR Nc? &J%k]{z"1y6Fͅ"y[nOD<:Zq]?>$? -fߦ i͖w5Yca[Yw_@̫0z]VkM :FK~˪98W*VAJE[wWQ5Ǩxdo}Sjq}+(Ûm ZM#'.mBU&C:D78#_=kFo0FU| oͯO m f;A1XO-0^L`f}Xt?_,XEvT,*S)6\ %Qɷ lx=2|7xʊʧ᳓WŗBW YW4M5FEg{Vnnqmms; 0@lNc#OMcW (r>N-|nr],H`zX ]u `?>Z\L;=|'@zmPtwZ>L<=}HX@d6;޹ -+engW2[ ~.+PwV[%9U_W1ښlg4Kh3Ŗ֛&ܴY1RZE,oXWQjSIV\pɢlCw{uKDUR[Z$*=8a^0*b^tZĂ<:&v8I8o[ꇮvYGgQ]c>vK,!ǿНB|tQh'k[Q j#.] ed_]o4Ze(lY[M2TDzw1n/[ endstream endobj 1960 0 obj << /Type /Page /Contents 1961 0 R /Resources 1959 0 R /MediaBox [0 0 595.276 841.89] /Parent 1941 0 R >> endobj 1962 0 obj << /D [1960 0 R /XYZ 88.291 795.961 null] >> endobj 342 0 obj << /D [1960 0 R /XYZ 89.291 603.312 null] >> endobj 1963 0 obj << /D [1960 0 R /XYZ 89.291 517.096 null] >> endobj 346 0 obj << /D [1960 0 R /XYZ 89.291 416.816 null] >> endobj 1964 0 obj << /D [1960 0 R /XYZ 89.291 330.601 null] >> endobj 1959 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1967 0 obj << /Length 1572 /Filter /FlateDecode >> stream xXKs6W72c!x?id$@K̎D$% @J![9E"A`b]drۏ\%# Inm' FɏtWl.HWmnF@NHBFXnb3'K)w37 CIxZ'f_b1$mF`%i`DTvSX#3z~S¿Ʈ/ 10Q.9HIWP!# ذj93HMES8DQd F?("z< IFKn&3JӶr,(cB R u rҫ[[뇨h{2uQNn!gTpQ_ͩiU/mq^͗E/DS' M– NHBD'dR-[)ǸMwp'53޴EC-˽ًE1sϩ]`wn˦X6prBNR!U,$]6džS '"CrJw8%:iPoj6F]8%5*IvY,puąg;8ENcs I$퇺Dٺ>6AeE5gxYmNPۗ:u2okW(EN!Lp0ho P.*PZ cvMƄ _e"b_;7TLRLf rg Dxs@<+BilbԩL凑0,,gIP PeI =F>BS,4<>?@m  QӠyֈAfg0lb{ͱ׺# xUWARmu?Ų˽ف>Ԩ:ҍ5L! !FE# endstream endobj 1966 0 obj << /Type /Page /Contents 1967 0 R /Resources 1965 0 R /MediaBox [0 0 595.276 841.89] /Parent 1970 0 R >> endobj 1968 0 obj << /D [1966 0 R /XYZ 88.291 795.961 null] >> endobj 350 0 obj << /D [1966 0 R /XYZ 89.291 622.186 null] >> endobj 1969 0 obj << /D [1966 0 R /XYZ 89.291 549.519 null] >> endobj 354 0 obj << /D [1966 0 R /XYZ 89.291 374.784 null] >> endobj 1965 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R /F49 593 0 R /F39 547 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1973 0 obj << /Length 2485 /Filter /FlateDecode >> stream x[K6ϯQ!@}Lr˻!Ɂ83c"jz@&B{P2я= ?oIg{19WVfg_v"xVv~o=~&RcvISoo~ 7JDLs}ZGIF[#ɔ4Z~w9+2k]-Mz,;jyδ2v;QfUN1o2@S.϶HxvbQui RKJ%9Bg@Iܢť[܍'vcR$9ʳsFzvLux'BVZm68nZ>_ nA/WW O[yfrli4 uav(%FBaF&cIj/Eː5ERr5K#Ґ2yv,DUh;HhlQKTڋ=P&c%3>e k ʔEnK"4dL\1)y}rryĢ(Xbr-1D#Yt90yT :-ڗU5\bzljpK C8yO#apLEJ$%Z nRɠ!A>΂(lO{Q;QΎ?nF))*ty$5͟nd5s&YpS2niΧDq|ŽA4A뤺.jk2or={Y;i87=G~odJ YHó˺+粹5 v|t 9"H/=~s* d5Npro=|LP͆FA?gmCaiQUl %$4VԍU~~+Ɲ^LYUPE/hhj򃵸;#۵TA3]G< ܘCTELڄ.*ho‡%Z*Ss$B, kiiZ eхVyQk5]gzeH^瞢u)(@P259,|h QYJjq4ȕ0y)İ.Fi'aG$K9pvsPDO2Z'm+uV"B> k5CG>Sm!n`e]L ~T.tM-F|3Η3rֲv`>!wώ{fHhɄ@B#y6cUp#1E_6LMXP͹zvh*{a`oGD29 06J*,Zس^XJOV$M)mT vtUc 3^EOgz?~6*`Ҭ9"X']Ђht'! @e)A+ r衜RZA!ܶ0Dr|Uea>"`)Ur1og\WCw\W!,\7˓JmfٶQ5vSŸϢou*]C&Ӽ*-L k)recu|my-ApGgK}ӻm5|_`wC?SC_QvFB>Aҕn&.i#u"ouVVV`+u;@!ćuX@~V8-7 w@OM$t:ml\o(/Ŷg=b,Hyt`Xk@"#CUn*,68@Az<:w]ae,>/kRw, WW'>N0\.U^0:$6XB\]o?z~K_f&߈0^!=de~Fk6Aզ0!բ;kcb ]YyoWvGiB&|es\6WWiU몚OMY,׳ o/9WŲ\t]( 0zw!%bEeT r!7?BGǎ9K~??ܽ =3n*pY+-" Er89󛻟&Au> endobj 1974 0 obj << /D [1972 0 R /XYZ 88.291 795.961 null] >> endobj 1975 0 obj << /D [1972 0 R /XYZ 89.291 739.378 null] >> endobj 358 0 obj << /D [1972 0 R /XYZ 89.291 312.282 null] >> endobj 1971 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F39 547 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1978 0 obj << /Length 1956 /Filter /FlateDecode >> stream xY˒6WS`tM&U. Mbp J1ts8F8w7_$"8%&JRDD讈~nW֌EowњrĹUۭւ8eWvvn>#W)J47?}a$:ۖ!$O7?O@C"uc18ԅ~L) c4X`g7$vYLAb0s$HttwjvNBۼ)]WDE5euMxI<1|F2(4ښN5-=2DaAR*c,^Qф-Scִ9Joܖ}v5MݿMs5yp&J˜Id@%2r #CA=rBP)XҾi9fIpwesx׮ ()R(n@͹0/V ǽy,64O8/`Q y*DЮu뀪sMYegqO0T*x]ngU:#yz' ʆb?;VwyJ &F1$#xIO)& [mH1<>k2lgyOCTCW=pKPe}jeu/sCv<:g 6M}]qNǬl\ɓBW]c L!jl vg.+h8 Ć*CծIWgP"䣩 x#lWٹ}lt iA*,NoؿH0B[šIڂ $v6 3F"Yvt<zYk4Uuκ팸wu ߣ6>Дl>\Ǻ6OT%)!{~4O`vZAeVN2v۽3xWm꠿'$~~ p[]&Ã98@D beCO^(,,Rj1~mEp]=;Ka`49dO{}|H= U8PJx@(Pؔ {)jF. 0[/nCP.%- eD&8bqw8opOQ1?_6]@dpGPH!8nF'=uõg(=uBO@&2&bPBkdh/1e.e:,@QؽL]>e*OȔO W2YDPdzLe:F,%PLǠe 1p %{+οRTH_` J?em[$;ݮdM""f_ # !WC ;Ro?ˠ B(j*S]PSD,*l kJ%ˬ Kr_4f)$3n )aLJ`[_-eb endstream endobj 1977 0 obj << /Type /Page /Contents 1978 0 R /Resources 1976 0 R /MediaBox [0 0 595.276 841.89] /Parent 1970 0 R >> endobj 1979 0 obj << /D [1977 0 R /XYZ 88.291 795.961 null] >> endobj 1980 0 obj << /D [1977 0 R /XYZ 89.291 739.378 null] >> endobj 362 0 obj << /D [1977 0 R /XYZ 89.291 624.703 null] >> endobj 1981 0 obj << /D [1977 0 R /XYZ 89.291 497.84 null] >> endobj 366 0 obj << /D [1977 0 R /XYZ 89.291 258.132 null] >> endobj 1976 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1984 0 obj << /Length 2615 /Filter /FlateDecode >> stream xڽZKs6W6B~m&3Tf6qNIeSI+>H(#n|@} ft~uw'fGϬ#ZFjb$mfοnlн'i/ْK"exsSݕ_V//zT\/?AgYbΉ|~w:fggo Rhh=~O@:N9{YT~ 0[>bIa.UlSMJH5ۡVK,fj07hW+?7UQHrAm"t:SQT=[ ind(ZvPJ24 '[AOEZ| ?eoQ@2bdb(m_}on{6"4Z(O۶yL- EiKUFi\G-+{˒mi5g$[:1ER) )U]}Y &g 4j kOm QlUzPftn(.(yUetzbrjO.Vl097x $ţ,y)~1'OI4h>ڦDk]V՟8]ע\O(S0j.+Bm&_wz^5MQ K'Y D XAMC@-6:uHAێ$HȪV(uM{٪WD)3v~{`KdZBY/f+g5N.}ذ\S+L}ijv18tEp_^V/VU|Oa/`{n~Hxun+ ۟?}L2Q0dӭR/\ڞ;Ȓv. eox{封C f~b@؂c76B%qxZ7ޏE Nn%CKCŌ7{]٬8#/5'ZC-i;0f-R{_U#)Qvb =:n?b:?MuTWHf/zL":3P@H?!NCٙ8e$FDszU8EN.#Dj Bt;tm_ 'c',B99ד E9^L8ҋDIz1^$ҋIFzhmN)F?p-Px;wAoW40B_x6he9 Q> jKFsFǎ[_>!#` Q۩t /bT{/élt@[C \-ytzֆ/P%46!G`փE=om>&+(|F"#$&mS P H]$CAY4`2fAY7(8F1g`D8(+1gRy41#z"4nTnEڱi:ȍt0{pQT@YŰNK !ي TF,-َY5cH3p&GYhH3P:e!XvMct&b;lil熡{(\y5>LIؠ)`?Y2Ĵ|4a,D3d{Bب(9~ֱ|]e0nv+ =/L1^jorcܞ29~W `7}xm=d -y&}/L_ endstream endobj 1983 0 obj << /Type /Page /Contents 1984 0 R /Resources 1982 0 R /MediaBox [0 0 595.276 841.89] /Parent 1970 0 R >> endobj 1985 0 obj << /D [1983 0 R /XYZ 88.291 795.961 null] >> endobj 1986 0 obj << /D [1983 0 R /XYZ 89.291 739.378 null] >> endobj 1982 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1989 0 obj << /Length 1143 /Filter /FlateDecode >> stream xڭVMo8Whы\D,Iwۍ-ƷE;ڒ+) Qʖ`KD3<̛7CMDŌ_٫[i"FIJS-בM HF4N}WE>OW]}1괻by>Q(H)4Vnq AUcmՖ(0|ܜsƉ1ρ˙&1nu_4%g 3w~>KK1Þ"I}9D3g 70n)btoMn8>d)^\~\GS$xE-b$Ru&9-բG T4~͚fmB, ?Tئ`ʼnS(+ݷ\$KiOZ;8hvC)o٢l]3g+G '7gP{6~WU]f_yxOu]2$N`/^4ۃ+W.9[. y !2nҿ#E_}o]3q`.s aqޜ&Ĝ'DNJ SX}97UQxzǢ߾ZZI';ˆcFɚ=/}샌vep{@*K5 Y<@pŇCk,sb2eVZ"}>hvv~Md-[}VNvt;< 2/Ӛ} :F;#;>CkWBƔk~:> endobj 1990 0 obj << /D [1988 0 R /XYZ 88.291 795.961 null] >> endobj 370 0 obj << /D [1988 0 R /XYZ 89.291 706.255 null] >> endobj 1991 0 obj << /D [1988 0 R /XYZ 89.291 620.04 null] >> endobj 374 0 obj << /D [1988 0 R /XYZ 89.291 513.401 null] >> endobj 1987 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1994 0 obj << /Length 3303 /Filter /FlateDecode >> stream xڭZr6)tb;cO'ݕT&hD5E㷟B4hx }qwW|YV/y 2Ubq^g>7/?~FL)ڧsnۦ*woֽ՗+l9 W +DXvWk,`,Wu!<(j[p`g|BLK;(Oy|FdL!}wUfHXj$/wKzeH; )x ."j (/wa0_UV=*B[&`YI>nڔ=p[9Dh[?nVB?6MQfP`3kNs8O!H0@2d.F),[|/pv|na 6he_Is}ڬhBsp.G7TmA_\/CSc .rT6(Nq$3PKô~8Q5fcYCy<ReTlmnxgwU՞Ԫj6ZW3&O]nwQӍ7P-F1vkȞ(%v4O"J%A-x~f1Yr#\-%ٗ1vI&LՈ;UCx8Vdɣ߰1CO 5jlӵv䩶e|,djVilhc+ƁSMդ^3nr'e$i 6¦yM̷RPclDI=U[nu=rME##K4AkLZ U" ٹ~#MqTL:1Eu>QXmCp޴lS ԏqrnD+ă]lt3&QImsHK78ZV"ɵR?T\g{*׉l1G [0yaeB6j}LX~HI];a6qE, @IcztO.Qc.쇕6⭡)ԐVOx/Bw6I$s=ӑSJXrsUˤjӟ%cktՔCMl?H._''at eдEHY"en0SӨidZh$frR Yβ7Z%l̀s lVC'f́8s|rٕX)H5J3qiF*=1lʵfta #lPH;Og7DtG^ʤ+fPLZG3J43(ILV1 UȃX䩞^"WҸ!tO0kzURS9$L:J P}];fGzn#Q} L\a!9ԋ>!:F`x-wkxzEd( t=قWn4QQ*R YZ篇{Y.&#K]dLCLv.5K(dos@@r(B#Pd\fCrg1Vc<_3$YVٸn,\hrpAW*JЭjE8c@+-hY3l瀔VBOu(;ZrThKp<FatN`P *Y_ _=m3Tz;NwU9PCH[N_zqT}v83kSg $Hr>P -zq!H.|U}0{9/9GfvgI#zs#~+Q_?OzK3?@?t!+H.jbWݩ6mc:} ]YD57i-<Х=5)1SM~ˡ[wyC3󼶯#3/YNה'~.F6#*[rhi,zs2Zd hu)uukQA6ɻWIpoCNqEQ}r5$=Erde( I3 O8>@;!:βߴM a@d/}>¤$o$s_n;/ 1ܾ.9Uj?g/?CWa[]D^n[6pM͔UEe9e4V" 0jbpC#bi[6Wu GkoﮑrQ Ah$G#H _0qC3A&PvG endstream endobj 1993 0 obj << /Type /Page /Contents 1994 0 R /Resources 1992 0 R /MediaBox [0 0 595.276 841.89] /Parent 1970 0 R >> endobj 1995 0 obj << /D [1993 0 R /XYZ 88.291 795.961 null] >> endobj 1996 0 obj << /D [1993 0 R /XYZ 89.291 739.378 null] >> endobj 378 0 obj << /D [1993 0 R /XYZ 89.291 272.424 null] >> endobj 1992 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1999 0 obj << /Length 1818 /Filter /FlateDecode >> stream xڽYIFϯPneڽ/GOUqU2d4O"!A`$|oVnoͫd# f6Jql}auO,wٻr3Φ#n[[V[ZTP1Y5nxg gR$0ۛp2ٓu1ę&3~‹b8~gQtgErN)gj-zTϢ׹v=/zpr8rE UaTa8ZF"\4F\@nn1_#sTu|*݋QDi?eepźw~YbW֊1%1F2qiHy> endobj 2000 0 obj << /D [1998 0 R /XYZ 88.291 795.961 null] >> endobj 2001 0 obj << /D [1998 0 R /XYZ 89.291 739.378 null] >> endobj 382 0 obj << /D [1998 0 R /XYZ 89.291 513.41 null] >> endobj 2002 0 obj << /D [1998 0 R /XYZ 89.291 427.194 null] >> endobj 386 0 obj << /D [1998 0 R /XYZ 89.291 362.089 null] >> endobj 2003 0 obj << /D [1998 0 R /XYZ 89.291 275.874 null] >> endobj 1997 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2007 0 obj << /Length 2272 /Filter /FlateDecode >> stream xڽZMsWHnI-v**I%U>>PBBk )ʄsY =ImF~櫏dG>?fho6ُӪayZlϟ_n&V\4/Y7?L l<Bc>#Ϥ$N_vy]*ZL'n9Ę909ӄn߾8Dm)Y{_Ѹ8_ &`;`!ɬ"F*w\jkXǒ~noqa,kEHKTݓyoK$sǜ c  ?XE5Q:ćTBMP dagAFd2#iRCsrqcІ&mXm7]Yl,p&gޕn*D3i02vY9'ʼne-*p꣨O}pLL'l]!\]gn8H`_r yQ*P0{4֧Fe9q!J0B<̥:㜋x@y-W#|ǝ*:1ɧ$|6oLىqg)F\Kw TAy.nfAj t_y>Έә ff\>B^$3@֗ż(9rѻӂxQ̓\T ,1-7~k n 'p6ߙu}yx8)v|[CMxliyaP_'PK+ۙ/jL@v}r?UĚBJUC֞S B b{ bT^=f~uz(1x"%(>2a$ _~]wI"*/_L-|F[WEkX}W7l{wMs`ؗ'Jߤ86f JP-6)skH^ۇ r VJTt,,(VLa;jN?V4nOgAX0OkCaAoR5CY*#h\2 /|BC!/Qug;!!;, u-5XxT:/Isϳ&d_JP +P3I~%ZIc/@YK RQe|*icTaMUKz)'\h1q MLlUQ%ƒ!_ymQe~/Dg֚pY>CYB~%q qx-I),"$آ b̗5"Xc,%ŌɷzKkESJ[MB!SV,NVҶ??v8Pp7hwF ե;CLNc?Cm7Fd#P3`R} -E.r4 Sy9оlvǪ;v8 7-d+Cn/"ܐOft!E0l& r+Pbd.9*uhC|ܶn8/eg_UKf]p:^q(swFڅ%]J9匿c/N3ܢd. @: ǥh2ڝϿl& boʀ႟$MybD5>$e8x'EwOߝ@ŤtBDD M'kܮ98C!2gUv#Ȟi Z8fm(*hDwOa{k4O*selR;L {rG1!*"UZ8!A> }5gq8UxI^1eYpм\a.Eڠx:Vi"%D:?t86>^:wr)]Ur|.?GneWƠ.t\ڞMQ6lM6}&kv|Ndp%hkXee^^jK%TL̙Y h!Sn|P<~ȣ?TٰAtiF툄*JZM%+v򛟴"(= f$}a+D+%[; h _Mb9rűnb'G:*3oĎwbh39eei[q endstream endobj 2006 0 obj << /Type /Page /Contents 2007 0 R /Resources 2005 0 R /MediaBox [0 0 595.276 841.89] /Parent 2004 0 R >> endobj 2008 0 obj << /D [2006 0 R /XYZ 88.291 795.961 null] >> endobj 390 0 obj << /D [2006 0 R /XYZ 89.291 551.665 null] >> endobj 2009 0 obj << /D [2006 0 R /XYZ 89.291 465.45 null] >> endobj 394 0 obj << /D [2006 0 R /XYZ 89.291 242.318 null] >> endobj 2005 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2012 0 obj << /Length 1828 /Filter /FlateDecode >> stream xڽZMs6W(g"v$f{JsP(fG& Iń!rxg>G/޽$#lHvyi(Hq]?>_2X7.?Ͽ{a-)G>RPnqy}8TN,S"iߞ}5)ÈoLBk]"Α{S a76*)ԤQ)BԪ I;S.AKlCKpr-@J:n[/w7 N X;ZpALEޢ%a a`bԼ5ZklM,&qP*qUsDO 6 AsjZ jZonvM $97ws|#P,97uS&/wm 1|0Fu;CTJ#A:TM& ХP=hG!jbz;͡X|p*4V&MO/=aEd_Ihd)@nc p?VXgJ-b[T7w60%W6\!%(yûVպCsRg02Ore0$B'/||4]ċ43v F4ثl nܭ%]۫">kŕ WɛxT1a>TL1P/7H1TP [qIT P)uij).(ࡾBo<$S33?-SsFs3LG'|'O3"AXf0A%!ؒ\M!V ԎXC]Qc[-9ICmxF}J|20Hҿ Y +um~9'BR`9āsy:F$C|"& Lpl'pd@+x)b<`!iE. epg)zHu4`Rw3Σ EڤRxU2 oUMymv6voGMQ]7S͍*QUa^4j[nbO(p~8Z+ſ;6':^zSd:aknȜ-&Msv-LdK`-'u,$ &:3O&U!rdSdQʜ%@"D*MQRvr6p!}XmWVhmlʺJEh;5H>_ٵ"'E@0)"E/ ŞpI!hek^D $P zӯl_yDAJԥJ"*Z[XLnTOuI=urV bWQDa&trG =)P;QGɚ#x7ak $q}ʔDPfSCYJtdM٣ M6-b*J)U uis%6K3Meg ث2<6c> endobj 2013 0 obj << /D [2011 0 R /XYZ 88.291 795.961 null] >> endobj 2014 0 obj << /D [2011 0 R /XYZ 89.291 739.378 null] >> endobj 2010 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F63 845 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2017 0 obj << /Length 2086 /Filter /FlateDecode >> stream xZMϯQcqtHvr}J8l~}^M-jJԨa>Ґկ^Ih?HS0Juxx,#GF29~YحWs쩾᧻s``]sr{oXo?gm!G?SL>FfUX6}y(_ 4%G S:ﺐϸD@sq3EnqqɑW\ -2+:۔SS2>7h*CtL{,2DH^$q[!Ɩ*KE4.΂*VĨE^C`ٻx >9% e2n \/)F9&V)Si{4KMRe_sxxa]op.郰i"vo!$& {:2PfW=w 2`ESK(ꐸ0{r?~Lc0ʧqWICvTv?9F*œ:¸9zZ%ƞŚ,X ˥8 jܔu'\f{,e _*nL) LlH:$s˝{d0VC=D*J9hG9l!C!Q"i~ly`5 sXPc~*cv/u/_>DTמhˤyےVLȲ,!" Y˲z}!7'ۏU[P|쥙VY[$Ds,mImq;ERdA "BD&\k2*US7rrj5/9;PQE]qV/[^|HoV>dǾ`9Fx05}CV+"R֥FjMcKa^܀@'Bsjܺ}tkLsq] ;5m4^ݛYh9YE$ʁqVg  G.0ixXbُ`Fh⠐0JD{h9@f"uDLsr+\*4_͵ZDW Pe͓pγ;X6qϣ,ൽ] 9ΐECYDϠ -u5o]M+=UZQ ڜOs±_$P/)P(Eh[H3ȑ\OcE%," Def:O'? DR-<#0m s< 0 mSʹY(;R"0R\FulDZH endstream endobj 2016 0 obj << /Type /Page /Contents 2017 0 R /Resources 2015 0 R /MediaBox [0 0 595.276 841.89] /Parent 2004 0 R >> endobj 2018 0 obj << /D [2016 0 R /XYZ 88.291 795.961 null] >> endobj 398 0 obj << /D [2016 0 R /XYZ 89.291 601.486 null] >> endobj 2019 0 obj << /D [2016 0 R /XYZ 89.291 528.82 null] >> endobj 2015 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R /F63 845 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2022 0 obj << /Length 2360 /Filter /FlateDecode >> stream xڭZrF}Wj_$5`Meg+ɛJ] .`xq$>3};= |<Ǜ>h7ynx&q`Ve>;95/Nˑ>8ևW9>p g'oljbZY\'GJ1M^TF0(FDm9y6Lq`nj[j6_ d_ufs2g|?: 3h %XЊVx۬`Y}E}sEhv}aW~_9%'0gkzuxB6"O]86RҎi#"Xu/]ߡLx.mQ-_`I{ߺ$)} ov Bж{qYGu߶~L /tޚ%-O2&7N KTpS,%De¾GA5 eucJ#z#|ۘ6^%P8 U[}T$YS/2~4<=xnHt=D7 nt=*: 3#1yk6fN9Ep ]4BWÜb5C>)طsLc4Y]"V 67`d56q`%z49sFfhrjv@%LjWQ7DTh$\RM˂ gZe &F%U9΄t˪X bxKE &U^헲".s''%0kyhVFS7zLkXu#dQ덁ڲ*.7*,gC-2p I7{ўoއm9 Dx5~C9F":u F,Bu*Qh^i+}H, bl% Cx7Oke]cִcs&T7rnr,tԍb Y4eݞ59c`4 >ή 0WS|=I! D҄d X)4Yy~{d<^IF"oaSH*]E'iZtG)lG(m8|JQ'+wͦ 0Rޅp:' uEWUNvId弭6}^?+tNbz"XY+ fU^.7h4(N=ghOn-! x}{U<'j(9Z-wҢY?`뗊J v J0%)>KޏdѩwURI Cٝ_9N2޹Z%7k[8nj[r&eرpyU՛kˁ]?EkHú}my5lZfphGGI;̭?̭V$w{ ܫUvmVrQL\T7bmXϭGsrD<=/>^z,h&G:>"Yi&@ȑp-®.:ˆ 2OXβќ2 s"9("ߥTyeč~1o+3yβ-OUjE>d|?A* endstream endobj 2021 0 obj << /Type /Page /Contents 2022 0 R /Resources 2020 0 R /MediaBox [0 0 595.276 841.89] /Parent 2004 0 R >> endobj 2023 0 obj << /D [2021 0 R /XYZ 88.291 795.961 null] >> endobj 402 0 obj << /D [2021 0 R /XYZ 89.291 586.925 null] >> endobj 2024 0 obj << /D [2021 0 R /XYZ 89.291 500.71 null] >> endobj 406 0 obj << /D [2021 0 R /XYZ 89.291 402.702 null] >> endobj 2025 0 obj << /D [2021 0 R /XYZ 89.291 289.388 null] >> endobj 2020 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2028 0 obj << /Length 2545 /Filter /FlateDecode >> stream xZMs8W(OEX|ΔǵI&s(&$v %*Ĭ un.tq{E4 FIB.lB8dDsY|Jq|W `Ͽb~[P"z>-BC\|3΄ {-Y՛3UYDA+xv}­? G?{`XFSh?M˼^qE] ̹(j+ڄnbݤMяW]x!-΍ɍVKen]QC jbe2 isvhh#F%yZc a3t twyk04ÑĬhw*E ch`i *NncQH&X^m3̑ݬh[i!L<~i}H&OՍ&ϟ9IV?_3|W61ࡸy\3̫83Dq=#б^'Ϻ88v!;+.|&x!! c ~V yjJ8[&fIp|flu[hǴ ҧQRlqAsvx. hR޷#`º!/+ n6}OrZ, tfM}ر}̂<6mS?{! $ pw_[dl =x&⽁vw!z(9 %y(T;*JwPQh ; % xI\nOC]hch x͏h=/]b*I(dļͫOHb4<Ʊ0Il&oAގؘ ${D _w>'p0o '6xwL/drT{Fɨ&S!&Ɩ ѨߙxlH3P'{7]ZDgoPE-x i"yԥݮ={cq xDm0pT|l.[}qkvljЌ:j_D-w4w%_==EVڕ;eXɹyУ[]5EWg\+޹رs'.ъ4Of#<  .{ SsG> egq0 0ߞa/w% 1 ;^ )S*\ens 5ߌ;p1P=͕4lBz'E#zpIT^sksJa.2 Hd%C,@p&G}γ%WHb,w] /e!f4b1b"pobuznDcq}sn<\<#7wwג.?2T>TчO3 hH^7pQŢAm}7d"{_[|`&=;P\2XH,zЄ 6 w͖np6c8t!/|u𥁳jBeb 8#poA%8,g$4,v&cH#t&ʱ9$MdǥNbjhv>H$>*{D\9zzoF`o=î܇xI'n]#M;c5n BR]7܄c( lu^ǒ֜E>h#.4p'fGG?+XB%GډPt?R2df EUg1# RJ7Us3{l]ȟa1UH;)!0+މ?lءq&TS~ĐrQ,ALc V{Z=KlvO36n`6뼙h0RY"\&sNM坙aM29l갹+1OȜ ǨX! endstream endobj 2027 0 obj << /Type /Page /Contents 2028 0 R /Resources 2026 0 R /MediaBox [0 0 595.276 841.89] /Parent 2004 0 R >> endobj 2029 0 obj << /D [2027 0 R /XYZ 88.291 795.961 null] >> endobj 2026 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2032 0 obj << /Length 2365 /Filter /FlateDecode >> stream xڽZKwWv˙$sO$'s=BdPku [ @t1-$ꫮWU-bDGnh;iFG=<#+#Gb>*Ƌz7~ :b#&(5?|4[q%Kz$DQEU9jM>j%aB&(RPE`Jw~OgoۻY\f۰Y]yYM.ݛ lЍ~/-)btrEy V<\ |5 k*hDc}J0CŦ_LDk .fh# a3RF%Hi'e,Ii\ܘtiȀ=p;Wxp+jH8#^ dl&!F% BRj`m=<_u~! p qS/9J'<-~ܼW;&C h 7*=* qUJh?Lg_&5ct F BC}Wj\U⾓IzB\*W:_S]pXnl=WK3^r`~i8ij,z}E&AQ!C4VͪbVcg8f6/ۢ΃l6˽Qڋc e,smy)Cx]owڒ`.:^Eԏї-bf_V\i6 -{Xȹ,0`7a&09V=4ڎpZPpڍp+mXVKl z-wexԻ"[Ue?fQ|^xlnV,kO;Ax !,vU§5~rU*Ra1/a!ll=.g#wwK`-y|B&ѿU}loj"},<(]O8TR<[̾'sH1܂(-c{9ԓN)/* ) KOġ*t`ב⻠+#|>0ṗOS5T}) &|8~4`Ab_-|߀rrD䔣lK5l<9v2 'ӃԲ U4O^sʉc. ('Um GлtqOD&Φ11הH/>9;YoH3N7S^1B/}==Ə/ļ0^,F1ڂEu't Yz} ԈFyoϣ F? H($b$I2yYRKm5iPA}Dj'bIpÑX?QsHcbNQ́՝#4K@;`GDDa>vYkhhtK}=}9(W]?q~f\vE8~e!`-/xg5jEX]u{/;rT%Bs)YLho\W+z8'{,qPN1lN'sz*p҇}MRL,j܀b5b7b-ԳG,)l4 n,.btnxO yC_ \nnxN,g'PIp3eTY̻HuAyCpB7oqAݞk1`a6D ]Yv h* X.ꩀyesC>k *i@^:}`i~=IND]I,ޗ|iPWR"ԜF'r;\B;Α"S׹Ap|FNA ;pJc}=k;8%لdɳCl'D%0gخ }iчd#MG aiw)dvwɽ ?ޗ"mnT'c`SEsA9R :^qCN AzaIA'h;tP|ίu=F$z ` rh,h"\yĬ爖Wu駖0*5V^k,rW(] H1&zY^8`BWGC+7͊4; &Q^ ¤f4?D<~C֍p߂퀃>O?}}ܧ)e"ާaP endstream endobj 2031 0 obj << /Type /Page /Contents 2032 0 R /Resources 2030 0 R /MediaBox [0 0 595.276 841.89] /Parent 2035 0 R >> endobj 2033 0 obj << /D [2031 0 R /XYZ 88.291 795.961 null] >> endobj 410 0 obj << /D [2031 0 R /XYZ 89.291 622.186 null] >> endobj 2034 0 obj << /D [2031 0 R /XYZ 89.291 481.773 null] >> endobj 2030 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2038 0 obj << /Length 2484 /Filter /FlateDecode >> stream xZMT1X[rI%^,8Ehtc$)JDU.0G h8{if&lلp83͡e5uWj,~ǻ?tAgl%T'+ϲ׻_~FHl>:D gُwgBEUޤ#a$JˆSN7;7k%abXk21k=TA_/X3XuY4{*ڂS<ngeQ7~g\`mz%U#YBVrA'QgK!$`2K*;ZҦ̯TZF6P0*n 705| 3HSZJN\d S =T%FS5J%v͘+*N@=p=4XyWͩcOޜ7pp۸Bh]160TM>$Z@nncTii` ya#:g  r 2`&mF^ n OaE.rIU_csR#C :GB1U2=' $v=T|e? ir3ҧSTĎTB?S\!6{V-mdE&BeAI˹Y**(pTT>۲֎|P䊂j }i-/rB06=C⇊p~^d]i3 8i!sXE00.mHUFZ}u+p&kև|]~{UyUNˎB'v s*#u+=C~މU=tq/KkFh,םe_rҁ#p{9OD6ޮ _+jYg\! ڭ.kQ1;kL hH:#2p; nxZMh vwԟ _Dʣ588:b_@ K~pvM$pv} }p-\Hs ,e^v #aF|JFk a9L`u)@2 ۏ j cXHfozP jgFC0o_5 5i5Q‚MQl¾85& զ զIpC)½4xWoFO?Dg4>$~ebH݄360.JGICcy)26a4 K(EcBÛ~[$d n#AsU $s kC& AXuܢHp<~0CF_ګՍOwU}êCړ6}/*vM Yb_5=F Q G0[ըj2ը%RVqo6~"OǿKiLjફ8B|5$ƍ}V$ endstream endobj 2037 0 obj << /Type /Page /Contents 2038 0 R /Resources 2036 0 R /MediaBox [0 0 595.276 841.89] /Parent 2035 0 R >> endobj 2039 0 obj << /D [2037 0 R /XYZ 88.291 795.961 null] >> endobj 414 0 obj << /D [2037 0 R /XYZ 89.291 608.762 null] >> endobj 2040 0 obj << /D [2037 0 R /XYZ 89.291 508.997 null] >> endobj 418 0 obj << /D [2037 0 R /XYZ 89.291 363.596 null] >> endobj 2041 0 obj << /D [2037 0 R /XYZ 89.291 250.282 null] >> endobj 2036 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2044 0 obj << /Length 2082 /Filter /FlateDecode >> stream xZv+0x?Lw2'99I{ Z-H"R %^mLgc$Xǭ*P4{h񎎮??􁳌I"sfeFjb$,X0SiLhsy\m_~ i(q" f3.A1 '1G4F4LKXyX Ǫro:oN.M+.We2 p"nn_M])ʦ&{8Ӝ(okͲ˼՗.=W/M/wn28qfZ[”曻_i_3Jk;u Ow Ai",ClZEH cf[_A[D{};v4 edGl/9۱bG$Kkβ%!;zqy@>EK=|3e囃o=>=tP$},;jz~I ;ԩ1✱֩8/vNboÉn\cQjC Hb.FLtV=?ŢGzoPnkIGrC+/Y\ Q,,Ԧ;]Gw)p{^= a#l?uO;wǪDJ . ^bu^w˞u7jQm󅠧qIҾ}zQR u Y X_"F@Tp$(}ᤃ v">xz021ù򄕭 LV/7EAJ@ծL$2M{\f h0yUqgOCﭼxC Čo[؅2^C6}z-*/;*A8暾AvUdՉ( ]7bh7%E·ca$VGֽBkT̥ֆHȈ{g> endobj 2045 0 obj << /D [2043 0 R /XYZ 88.291 795.961 null] >> endobj 422 0 obj << /D [2043 0 R /XYZ 89.291 757.701 null] >> endobj 2046 0 obj << /D [2043 0 R /XYZ 89.291 685.035 null] >> endobj 2042 0 obj << /Font << /F21 548 0 R /F40 549 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2049 0 obj << /Length 2386 /Filter /FlateDecode >> stream xZr6+nY0ޏ%7+̝ĩY$YeFʝCAAqv ӧS<;J2fLD HqYfi3 󏛢mgs&U~= ͛bۺF)g?O~W`fٜj?w?wWMS|sS?u>qC`4`a #"3E4g_aČvnsgZD1$)RL!f\%bb۟Vj"\f!"}*LDFiP%F`6hXϩ" m/vT/]Uo߰< o`ZFf }0>C9Qi!䧲{mR?&"} Ar8[J7݇'MJҼ,kaFp6 IARG’ 1Ϥe)UNSa) P7)b4 ۤPӠR' ۷~5TOn(1:nobkNybov9SL6ڮO]m{[<(es A$B%sC$ I+Q d_4L%x-6i`)&#q+DV``v[N붭ҿj}mӀߺ/ʦpA1A҄K5…3aS53"2z2;:BL[WvM*6,+Zl_S'/uH^.=9S 4"0*YnLO av.*L„LnCW5"qTeԖl Lj&Ag F#4051Z1FcIus5Ga}}o]#]{}b5J֮|njR_˺^vwfhxv=3w>_~M{{h=-V0241=W08Hbˏ?2m^,^\ކYI`w@uB$~j,ĀKտ9A S / S@Þē@B NJxLO ϒMvfyJ\!0it|դ_C#m@Z c,RY 5a]Tw_qW & w@N I&W]n]ʱĺ JRrİB/?$ a*]bc] sLP yeBC"b|)`4pIp%0 @2D!jTb@!II)drzQ/h+ȰWv$x$5C\mksv>2MA2+`M\ /ަC'g%g_O |AR؜ڍQ={{I} ҍ )W.4`贜8ߔWp\ 'ЪqxT+pd'~m˥Ԛc[i~7H(϶ؼ m!jT}q3H?F쪶 8.5n4Iq,ɸ-+:3nbD'Z: 㞈,]ip!t,7eWHNJצ?T/++rp&`" TA3Ff|;ǷA~UY&e͘ȿ_r(ØUZ3T訾"@bQ^K|v.H쿗ݺ\/7odm=8/H |N-:4v.c58ӠJPނĨ[J@)I`me@A[zK&ЊﻏV}FmfQ]?6e%a]ݩ1CfC-H+_Z);Vv1]x4zDj9x$)4z[wZy2٬=U@*K={6~'%ش[q"u~!wGӅ;ȃE"@ ӡSz!\9;IUT Iq =)Fg.ujpӹ==9==r{=ݞݞܞq{NԻ^~P=&蘑mo\ӀC7i!^PMJ $dD})'Yn6"*Zg3û=SQhj ,RlS:ȥČKrfOzܕKEKTҩ١‰ܳ?9AlCp5*7 _2,l endstream endobj 2048 0 obj << /Type /Page /Contents 2049 0 R /Resources 2047 0 R /MediaBox [0 0 595.276 841.89] /Parent 2035 0 R >> endobj 2050 0 obj << /D [2048 0 R /XYZ 88.291 795.961 null] >> endobj 426 0 obj << /D [2048 0 R /XYZ 89.291 757.701 null] >> endobj 430 0 obj << /D [2048 0 R /XYZ 89.291 418.297 null] >> endobj 2051 0 obj << /D [2048 0 R /XYZ 89.291 332.081 null] >> endobj 2047 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2054 0 obj << /Length 2284 /Filter /FlateDecode >> stream xKs6<[+,ޏ2$uKrH* t "lb$v7B4hvsEc&c8XfWF29lURqoY}w~u4cP+gOW?B <.D8=2Ap3 AUfU=1"Ep=ySLt3NC'gp ,ʭ *US1R ޴~,|<H J w/v@+:m1:Ȼ+źmEPċ|E~(>Ň2N]"t*ƆhJV#U٩eR^lBG,2lɩ!֎6PL0%3p,߻6o㓜02m 0V{YJ'97Rϣ(B}cC^ɏ MlT69uWQ?M*`S]*_ +4Sp6UI XumOu |u5O4 'TaMR(( #b@E7lQ]yDSPmI?vqK8EŇOh1J0J<鐦 9 bC~xw[]|JsX!Ԋג%zۆ2iբT])Xcg@sxv*6E dfhKHpQh6XOr͠k2զ(0jQYv!.CބE[a%5"X\qh4Ug5b,؀,έ8 Sx:`]I+:=ݬLP]6r^U9ar+V8Bxp)J2q&72X0v@YӉc8]P 14WA ,=136v_7mx:(S)sX&=uEy>Lv\%@64 9]ˁl3Z?fC2B 5]z]ֻT.hNq?M!Cze|! `AZuk&n`w%&tZsk[\JtAju+@|ElSJNŃC 33cI/t(|$HĊsaKZg0AJpQcMi=%$)@Pv Cd(EB90e5o0""6)MI{bȌef"^x\ S; -w]Po0qmn]BLGUdE CYyQ3bNGLFX{ϝ "fXNa|i'W>6O ۼ9ys'l4;%rDY`9ȝsw&jz<;|YѯAH1Z5>P oK=ubuBԉS'gPf!uZSREk{ӸEᗼs#"y&F|ESz ;L(Tz@(yrPgϛu94_Tj Qn ʗ h(!Zb i;r 1E!z1DNe8F+2!`œU,#C<9<<FsS[3'J\9>q i_x5qxYs jnz+$eDr e#&^VeLsڤ)9ƞng҉==!a>A"*}bM CurRPk!9TCr(8cG`~ O<_lC,SFY=B4/dP)0g1hXgH=*$,?ʉ;?9lѳ'R-9&VOr,EYL;Dz*- oedz_`ێ+ 0ĔΘl /  endstream endobj 2053 0 obj << /Type /Page /Contents 2054 0 R /Resources 2052 0 R /MediaBox [0 0 595.276 841.89] /Parent 2035 0 R >> endobj 2055 0 obj << /D [2053 0 R /XYZ 88.291 795.961 null] >> endobj 2052 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2058 0 obj << /Length 2169 /Filter /FlateDecode >> stream xZ˒۶WpI,2]NQr%jX"t %JG"Vݍnti4hᆞeL!5n7u;0~9qlTvE-BCp< ]h}5!QbY87_gF΢3C,j]cLDY;b r-7 ᬈӂ?\?7iGif٥p#Q05OKnJfKAzՖEW% 8lzIѴܖX!l}"`&RL+Ϳ٬^s9^r/;쯨׃uW=I) a9͂M{&#%T^i)*/KË8)L,j5%JةڧS2"E3ŧ.@NΣ b+@KQ36T-dTކ]p[ܷP"0!dL~_p;I ,|}{_DroRG "( l {w`*/v1a0' s\k7 :(s( uS] S̲K4fMKāB`CʧZEC}6 Ջ3[d\A 2KS)HEޤ+>¼g# „q@'Wf HV\P 0zYgcfpp Y,eM/C,asab,7)꺉#ܡhr=ܝmw ҄ ȧ~_A^kGcˇT=q +3CS.iS=iǻg _z` -҅[̓f]~ۨ!0J2 o&`ֳJ1z}my@vzqrhn |}[G`3@jpI<]guDF^ij4$gA_cyQDmA6KԳhTm7ƙbΣXAg(@^ۥ1KdCL]AtLWd SXP  :C!ta&:#(l5x@>հbK?IUn ]Ӣ,; )2*A@C )/ iY^0 `x_b ;ʎ` Ђ6qeNGEj1 ܰ8й$ !F/ a!g+ɠ1 Nc0AWh]6jO^lbo%&6x]qm?Os(6*۪ծhb>2GYp/oWwbM捲y~P>b#Sޥ -h{j9њ!~d540^IE1X$Rd n0} DEsd1Qe&59gb#S˷՝" 4'kܝ[C9`!]ʿ A#t240@°Mڄ&:r4  Pۢ E.M> endobj 2059 0 obj << /D [2057 0 R /XYZ 88.291 795.961 null] >> endobj 434 0 obj << /D [2057 0 R /XYZ 89.291 757.701 null] >> endobj 2060 0 obj << /D [2057 0 R /XYZ 89.291 685.035 null] >> endobj 438 0 obj << /D [2057 0 R /XYZ 89.291 548.523 null] >> endobj 2061 0 obj << /D [2057 0 R /XYZ 89.291 475.857 null] >> endobj 442 0 obj << /D [2057 0 R /XYZ 89.291 396.379 null] >> endobj 2062 0 obj << /D [2057 0 R /XYZ 89.291 310.163 null] >> endobj 2056 0 obj << /Font << /F21 548 0 R /F40 549 0 R /F47 592 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2065 0 obj << /Length 1918 /Filter /FlateDecode >> stream xY[s6~̾P@\GoɤiNDKH-Iq~~)Qlþ ̣UģwWd7ob22ҌLDVfVѯd͵M޶ybll˙z5Ev@G"hh.K~ۢ@Pv.4CCgݡw8:eaS:wUW43|QHPY- b42~(u }ElOUUSIPW0s~T0#TdLʄNxďE%mF 6ѧT3AʲL1yXJR^Qc!ƌ BM0C؈qUk ]Ǝɫz(b"""&aJdSyM),\$L)8KZae"DF+fx2srd"-'"},b*)U$F3k<7ж+DY~tJwć }*M̐CN3wl=.}zWM.wav=y MVeI ,{lέuzhS]gLVf]-IəP!zn)vJ$aF Cf J2c%[>Ffq/~uu/P(hޭz ?L,~W~pzp (**84C"ͺ]٭~fnբ+*ߔx6j2,aDQEY!T̘irrYn*[YO/Dr/X2 [|YIm34 Z t W2`%xKnX͘~Ǐ׿ȿڛ? 7?|k;kb LVIetkrU&l#k6D7NTԩ NL)"®ϓhɐ"#+iճˠ;bULس 4ٷuXt}lǣb[SW}!,*XLvF([./o#K$W)gñwG6Y!-^ 5uQH:N5 4rX IP))HuH J2d53BeRZ}E>áԲ[Uwky\.0k& ِIBP?wͿ endstream endobj 2064 0 obj << /Type /Page /Contents 2065 0 R /Resources 2063 0 R /MediaBox [0 0 595.276 841.89] /Parent 2068 0 R >> endobj 2066 0 obj << /D [2064 0 R /XYZ 88.291 795.961 null] >> endobj 446 0 obj << /D [2064 0 R /XYZ 89.291 757.701 null] >> endobj 2067 0 obj << /D [2064 0 R /XYZ 89.291 685.035 null] >> endobj 450 0 obj << /D [2064 0 R /XYZ 89.291 592.008 null] >> endobj 454 0 obj << /D [2064 0 R /XYZ 89.291 341.187 null] >> endobj 2063 0 obj << /Font << /F21 548 0 R /F40 549 0 R /F47 592 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2071 0 obj << /Length 2221 /Filter /FlateDecode >> stream xڵYKsFWɼ^[T\jI1P&xvc AD.hkzLuB+zꇏ%L!5Onw,1R#a'O~K9qfTR4m<,N5>[֫? (M(qX,%B kUo@$W>p{hEӉa(#?hßJɷm"V׫ƚd ;07yRB<-[#yfSECp7WlUM 7_발~~5>O]3 $!J۱OѦrwר?Y E 7&Y2AtiZUruYș&K%zdjqiWǬ)ڇ\?*(A=J*W!g_mŒ eiӶrF[0^)"Nj6eqmLc=dm}Sz #T^ʓL)v8q+WmQAڷMP1^sd͔IC1(OX!bcEzTJd.dᘔhh!B dQ"# bXsٜm]gc)`Y9 B/.% ͂ (K):1"'aͦ ji0|cΝ(C7U13x&N_*!Tty^ׄGv6R7S!@11P}a+VWPo*| ,q?w z>EVú( GTT|8ޞ  nhYv!on=fbޭhD%{l`/TfERW}aXy!Ϣ8Bb̵ LSDY;RHn_BbP%/ljf夙L;{hK T/\S=f;DCO[6&Gl}WmvMh)VAP&Q0X.lA f K3lbrCǚ#g;a0,};M8%p!Y]w .|v|*}D*ԅ])fu`y0AnTp^4a7U:U}_A }7}7&$m|V/pbOܨZ0{kS5 NjI4X2GCYʠ~5^a]{,j < EhM4ScRn8vcb=u%cXm*#?6k" LeDvRQbU%8~6;p2UƷc~wQ5]r^itHp qӃǁߛH=J:ǰ6 7Oy5& sy(6+JD #7x6|OYm#}Y9tҞlKL#?]L*B9}١K t%59fhGIK6mXP4z$\N}EQ:D?Ve|-8g2R0{9B¡ A^*0he~:* jɃsowu9D"̂A\H!X4 6GD( dZs9ZU$#Q'^r|igoDHn:UYW5=[`Ȓ#9e7xR.w26u|mi!LOXyOeˏt02%=XH!U|?m?;l//Gִ}xpʶ^HT(EL3w0H`?݆Skb϶wu}$ޟs>sspMx7 s\(ϟrI1Rϣ+ٱI9GqS= |fU0ebjhW.}tHv ǎ?/~tjDwqY+s2L|٨1t?1ϒWBpa  jMɗ4jhfPRVtE_e>ۢ(b7 x0'_c% endstream endobj 2070 0 obj << /Type /Page /Contents 2071 0 R /Resources 2069 0 R /MediaBox [0 0 595.276 841.89] /Parent 2068 0 R >> endobj 2072 0 obj << /D [2070 0 R /XYZ 88.291 795.961 null] >> endobj 458 0 obj << /D [2070 0 R /XYZ 89.291 757.701 null] >> endobj 462 0 obj << /D [2070 0 R /XYZ 89.291 506.519 null] >> endobj 2069 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2075 0 obj << /Length 2050 /Filter /FlateDecode >> stream xڵZ˖W0{=MR%P\& /ܿظW Ҩ8pty=G4@O>>|󉳈DĊG(I OYcEt;'i:_HIg f}aPji"QRH<-xBNr s= hE$:Uf :ۇ ?~Q"$zn#Ab*_~ro2Ff"D'Kh{}ǰ*Ec~;Y(k+jTM,bVvNH`1" U`0rj/8N-s(QKvVkwR^>{W?lw]IkXiv>ښyԪZmͶ5, U\ ` LX8ȝ.S̈"RxXhV;U3ad{C?ۘNTbhlDYw)qX, լ2$YX>Fy /]@%UTgi+kp2P]m3/SXcLu/ yZ.+Wv_h|p'$\'0 ;:I糼tחMإ̭fkl5syVw7=d~21^nGW{ڔK T#@.+a'6؇XӳG-BHؘsaeǑt?▏}YM=~6?~S[6$rahIp;O8#4a7L 6 o#Xj&iP<-yK@֭LnnJ"γ37Nċ]ˉƷ]]8뼋_ 'yw!h깃DZIWcƬ<ʪd 3@J={q&i'd7I^4O&tvum0yLILY 'k.R)Z8*;YZ3h: D"֍`ksR_io&@`|?]-!U6t6!A SfryC8dF9'i@kÜ\RkOmoG8K=f)din)`{?=m6˿1O}z_qmsRN)6tZ*䍱om%m3  Yr ׇ] п0c3dQ!:&ܡY08Ԫj]vH Nf@匣cأg BL7T0r&Dd  NOi@#&՗7&Yw!83 -T͎]m,Ir$YE7Xe)WTȟYW6F| j"HfT>Wse.Y@ևZu]'ׄگ:aiw'=VڠRjPc)ж4[IP}zZ#m/ը"A藾 cKFGi?mPrAavr~_t?o|c%Tr{.kZ@]8|_`"+M V K5IykEAD ³S`"4>,-n35cVfa'QbzvS:Ό Z40ԁ^YфY @ d/ycЃ !jT@vۼ7Ace< ? KJ_uoX`_y6Ubi`p ї]6[/uu}7GW*8W2ŏsfRIFNzgOX\hLq,+79$ޱFxyGI@5Z4#Ҽ;ۊ/m>2Fql̻:BΎ\cOa斝Mul[r?O|kzrD;d%;*1Iҁ]Oo*Pkygro.نD~1j?퓩6&v+óI0lcZ䨒o n%aRRy="v:oF/ָaJ0)EVݰ߈ endstream endobj 2074 0 obj << /Type /Page /Contents 2075 0 R /Resources 2073 0 R /MediaBox [0 0 595.276 841.89] /Parent 2068 0 R >> endobj 2076 0 obj << /D [2074 0 R /XYZ 88.291 795.961 null] >> endobj 466 0 obj << /D [2074 0 R /XYZ 89.291 757.701 null] >> endobj 470 0 obj << /D [2074 0 R /XYZ 89.291 417.686 null] >> endobj 474 0 obj << /D [2074 0 R /XYZ 89.291 343.881 null] >> endobj 2073 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F63 845 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2079 0 obj << /Length 2624 /Filter /FlateDecode >> stream xZKsW0'.s<洉mm*MT=@PBpPPCSr8gw36ZRF$띺$.Ҩv:eNwuwG׮JEDhSR~JOQeB 2NgsD+݅*<1ŧa+8҄Od{8VӰՐ9-Tgh1 S8=9d'\뺂@e(:?5xt(ʜ V+昑9d7嗹ُs|1)Ɉ׿UX&{@ nHJۀv[V%yHhN#9660IEBʽAVUl`%e3(O0ˈ~E#S1!)7a|Y6ʂ]ˁLv2\fծ/SΡx|@vSt,XDy?l_D)v?d"OC!S[>N ]ldq~iR3rh-ɩ%5l X(٤ٛ, =AUxU]U.7EӆQµa&AqXU`8хw^m/aTB'σS&O@D/O@G?ώl/ᑼTJ R^'+&84i\+]gŹxK`4B1#PD}ے1[۴`s֔04֦Xc6fe Ol4B\quYaN0J7P}:xtLIФ; 2emջ[l /f+ӷAn Ep # :y$ "6]E宱ɾ(o݃m>O F1q`rm^QDr˵'}]'™ϐ8ZBqf̈e|r"!vȷH=20n7D1m]6Ӄ#w5D*D6Z$CʘNK+Sׯrv>^p?OnOO/v|!3;2wk/zcKF|c?S2~!^"6}I:W\V {Hd(B8MpUGu﨡> endobj 2080 0 obj << /D [2078 0 R /XYZ 88.291 795.961 null] >> endobj 478 0 obj << /D [2078 0 R /XYZ 89.291 348.077 null] >> endobj 2077 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F49 593 0 R /F81 1814 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2083 0 obj << /Length 1813 /Filter /FlateDecode >> stream xڵYKo6W;bMq7h3.dqڒ+I_ÇȕQ7EQffw_8˘$Bj=7M|h =0O_3f K'bjuzP`| L u()F8;inWDGs>Q0$UђlȼkH^qOA{AVbۺj;JRwOy)[G<~B nD)QZH^o{+xVL\+QX d"! (ɭAUЕӠ* `CJA!ƖX>.oؖz08S}'wUssgK{reS4D9Vpt!Ã"-:^+6[ۭ[{us6-CI90% Zj,0v?m=D<-Zo$یNHV czZtrDٙi= 0Ts;iߚUu߹]xX{X }w5 㚹n޵٬sU<~4"_._?=a nũRzMĻZ!i|'&')M北֛˥iT*[O5C5 ߦ6z`!Eij =@5cO8<mB8(m5Ga }۬ŒR(%ĬZbŬS&^2ďCl !1`L|zkbveW`$^ǻǦޥU`ǯuJas}I>07*jU7g|1V I|l0-aqq䨸н~wߪq]s$3rsNgͿ=`"(?U>TIR\Џ@ޜ}OL4gDI 2 j!Q?"H LH8 k})!7&(5ZZ~L L_o3 q9c7Aǘ m7EU#) ĵYKjL*z|3b"RF\qo4Ni8rzmBKS(ξY-hWBmwM00`XfL"Q0я-(k-ʯwHAU9oGFYFS-4x+FhT$"1 P/]8ȯkdUwVne.}x.ׇb7s6bߏ "4Xʐ9Fns.g~S8@(t4g$EuqŚ~ϟUhx Вp -*&0)LA~$'ّdd9~ZL\mp=T?.osk1ć> endobj 2084 0 obj << /D [2082 0 R /XYZ 88.291 795.961 null] >> endobj 482 0 obj << /D [2082 0 R /XYZ 89.291 757.701 null] >> endobj 486 0 obj << /D [2082 0 R /XYZ 89.291 680.22 null] >> endobj 490 0 obj << /D [2082 0 R /XYZ 89.291 512.48 null] >> endobj 2081 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2087 0 obj << /Length 1716 /Filter /FlateDecode >> stream xڭX˒8WP5<+z !IfJ*tjInlN9z7FޫsC4X4xsE/,`Mđ"qe9Q5KIl.Xܮs ?j&hX^# -r](% lh&S2)JH\oW +i` 0Ikd_iw%"t :xX7([YR{ 6)ϾPID _g>氖9CsR:Stx%wE2\/(Tr[eS#˛4۸L›vSѰZgq[5~݋[3fJ9ڹ+SvC9vnJ˥W.<&1p R̛b뀸6wavdS?*zϘ M9VLc#VuTSb#=1HFdLU8bBgRDւ$gMYOVot}HYDK{[m&U{l[7~/::7M fvz%y1`WZ$/~ZqJȊaۚP 1.VQ"Qnˣjdɸ\<_+?j')8HK -E=ֱ *f14gۤoR-WmnߺtR}bhTruv+}.yCS]Tu.&?,FQFQ.b)WcK[}Y"B>3yki_U97/rjDۏ8_<Ѿ!t5p%c7y:kP/EגfYU/rTQyyB̝O"Af''#qSsbet>WU]gW~xZ3Oz_|w<@+GeTGuDT1Ћʄ^/W)ncH$ᝈ_J4$ʇG2`]_B{35i T7ճOrL>r鯄@ģK"KX"<]zc6ģ'.E#}@2'|nr P k\axt:%jww]-cMP a5x}ܕgh޹% Wd=p"8ʳ8jm/K endstream endobj 2086 0 obj << /Type /Page /Contents 2087 0 R /Resources 2085 0 R /MediaBox [0 0 595.276 841.89] /Parent 2068 0 R >> endobj 2088 0 obj << /D [2086 0 R /XYZ 88.291 795.961 null] >> endobj 494 0 obj << /D [2086 0 R /XYZ 89.291 757.701 null] >> endobj 498 0 obj << /D [2086 0 R /XYZ 89.291 462.492 null] >> endobj 2085 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R /F39 547 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2091 0 obj << /Length 2238 /Filter /FlateDecode >> stream xZI6ׯМ"748@$:H砲e[YrkIuGR#]'})QmT`\EDDO 6H&=x?`SX(ߏ?ǞHCPD(툭IqOGEH 4Q>< 6ǀažzU||2(#%t:-CJ& %(_YԍEuwǤO7=`KlL"*q}gbiJg<\gcҢϚmu'?*#TR3 Ձ6# ،ϙAEHщeɊ״<Ѹ>|2J5Qb`"7߫BɐEeYMzIY-XVegEzl64ƬU7QMN90)i8ǁR@s11 ln M@7xm=Q~nß'niN\wpŽL퓗}޻e#Ypdy{CY7"ZgNKtb!QywwHm l\ie<{*Kkw` ͳݾ_ϒ4Oy`)x.(2ף@uM7\#Rr2+t)u6EOe]=K>t6mEHƼ)^NL/`NLy8Er뮎4ڤy؜в`2h*@own%%Y5K3?ld # ޻ XV7S,*;^+pnuߚ/C~P.!01K4۪PsKJk&af@ęb a<)1$SuSy?K.Y'anb+7\6j@=ܔhªgtͫrzD%+C"p)5ŚCɉ--J?x0Ug N8Zh% -fcoW}:33t߱/1[%W 3& gx* ]r(5SMZ701~\mw)&/ s(+DO(IV{*mc۶J=t A$6햂A8C0ܙs–Vثmj3sGxŌȕ77Bli1 2fዙGύAޕmϘfqlM23qgĆ58ScE9Rہ|̷ٮĄf&fCD>>2>lHCLfA@] | hT 1n1`N% Y0V(c,:WTU!1 *6UAp>&|؝ |9C~t ZO=‘~p>p䛳<7##q9Z!:M/f{_3fc,߂e Wb|;,<ܰqJ7ˁgs9Y_xtr`r30TPQGܸL|26L7^0>V> ]OAîvݔ- _~'1[\hXΛ\c,z#g|s.gF=_]g߳sb״s P|#)_{(bwͯأ (iy?0hONLm.wD`P̜19.cՑb&=K开萧p[g>@.,m3{Ǟ8~\K~pBtReݧ՝Vr]+! nC-\\f҄g)0\ ؏ZMOq 習abtz8i_? :G>25ǢSI~ht/HKI,΢7&0l{` e !؝ 跤DxZJ4}k k0=Вw_\go3 endstream endobj 2090 0 obj << /Type /Page /Contents 2091 0 R /Resources 2089 0 R /MediaBox [0 0 595.276 841.89] /Parent 2093 0 R >> endobj 2092 0 obj << /D [2090 0 R /XYZ 88.291 795.961 null] >> endobj 502 0 obj << /D [2090 0 R /XYZ 89.291 757.701 null] >> endobj 506 0 obj << /D [2090 0 R /XYZ 89.291 520.481 null] >> endobj 2089 0 obj << /Font << /F21 548 0 R /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2096 0 obj << /Length 2209 /Filter /FlateDecode >> stream xڵYKs6W0zjayf=$9"$ Iř (ST^& v7u7DUD+_&b4e2JR2Iu}W?^}|ŀXĸ$BrE£Eu4ݏ%"M'BUF]:'qCIYFEjJfjN,'ї 0TQ'߻+xwtJ9Wi[O. Z4O/412_Y 7RPYxj>[u凌$4=X ;[y״s`U/XChtbxиnu})H'%gǝb'Mo>. D[7u"no_ˍIpGSG4ZԨem1ffjeBr5ޓ=6OEĆ27k=X=ݢ-}ž^ -PH_eqǤŹ*AZag{*q] .lɅ.ZIW tHQnǐ5fiGr acǃsjAx '+3tJ(oL ۮӗѦNjNPME˹PbZh{ʍuweVYf R˵V1ɻ[;TD 'h~\,7xBW(Uƾ찝Z$U}F@-RBz񟻦CEmo]9HE4К"*O4 `ZUBЄ I@ƥv Z.c,:ib64E]Cu26i3$,ɐ.{Jvc!}Qly@yqmq"cݡ$l\n%vY!n<8&zs3OF%lS/vDj a#>HB URz̃X1v?f#C3OJ y *9yVǎX^C=?~֮Zi_́!gaf+5gat\ƇdrMblTt+*iƍf~H-rY2OO]nJDLڶPI)Մnjlu8g*^<*,]d r܍/ΪuiN'/CzhwB2E~({Ԕ$^T9GB#g"/MdiKDLjy<*iT&oY" oZnmq!<;nr̀g`~Ns$'.rc sedU*wX~{j ?f0,2Z<`sa;E>|_3cEʆ5) ſUM3{g#r/"9"%>ojԇ+;YA,_0ľb<9yfʣ GnZ4sմra.6w,l%@9*a}8Ub.3FMeMy]`GD !kxת3Y(ܧ{| C9i li/y"yb|8=ImX %v52|gb(F6Ѕ*, ꊱa>ٔs:X|WYqn!pj|5;i/9 rh-s@Tv x7zƟ5io,))(Xq̠~vdZ M`/4w{pA)9,T>4M9jThC^ڜ䳋 >?}暧3}6eu 1b0da endstream endobj 2095 0 obj << /Type /Page /Contents 2096 0 R /Resources 2094 0 R /MediaBox [0 0 595.276 841.89] /Parent 2093 0 R >> endobj 2097 0 obj << /D [2095 0 R /XYZ 88.291 795.961 null] >> endobj 510 0 obj << /D [2095 0 R /XYZ 89.291 603.374 null] >> endobj 514 0 obj << /D [2095 0 R /XYZ 89.291 500.07 null] >> endobj 518 0 obj << /D [2095 0 R /XYZ 89.291 409.102 null] >> endobj 522 0 obj << /D [2095 0 R /XYZ 89.291 266.173 null] >> endobj 2094 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2100 0 obj << /Length 1700 /Filter /FlateDecode >> stream xڵYn8}WY/b^ANAe[JrEʱlcbhjf8P4Ya)W`C$Q)N`p| Ǔ$AEx6N=Fp@½X0Z~~;0bFEgFS6D`$j|wrUcqa o:}wuzx}@ĩD % C81MI p qm>BhQaQI` #P`sLZ^kֽ^\^&,*[1#I/hոT E:bj/:qQkp1KVĈ}#a*\"n:B lQCB 5bn/.~/d,y*!  n0#_uെcnl3W+iLhV1҆ZQрZB)֖{n'n=n;.yQ܃{ g< $ Mokm1>$mMnK<*UZ<zBH  #}K8%Xޤ|h38P:_\y7$_ɻVFR6;pLGe/PjreᦊYWyxeiQYxHʙĿFy'sL{]2c&@=C`+Mi h}8/BXeiQ: e #4 8Wlqss|1iQϔ EGx7,6sYQ6/VAX&/F FzELIR w/]YPJ9q<ƕCjKeQB]$/B~*#i'Ay"Eftk&U՘ A3՟ILhPA-gq-a0ECI(+FrGO!IOi(*۹I14'}0fUl8Ft8sly?p*ZUJsKCl+IWݶs٫6cnL8bʖ^?>n9@j-~?\pu-Yeh7$G1[P}liWNyz8NAn{쭝Ց| qHT-,tȷW-nDvu&dHuµel<Í5W%~אSC1]2O[%IDJ/o..v||l# hOg)Qg *ٺHXCcKLmmM0-(g_DV{fG+wt_lGajj%W, ^_\J:s{Ge;/d9$/Z .QZ/R,O+C&VQt3c1L߰]}).l]wy6 5e["=fz}ر4Ű9|7"<ǢE[ xW#@8"lf+ʣ|XYkC%l%.ĝ:vfDCío!x<eeΤZll:"X0]2/I@lF endstream endobj 2099 0 obj << /Type /Page /Contents 2100 0 R /Resources 2098 0 R /MediaBox [0 0 595.276 841.89] /Parent 2093 0 R >> endobj 2101 0 obj << /D [2099 0 R /XYZ 88.291 795.961 null] >> endobj 526 0 obj << /D [2099 0 R /XYZ 89.291 508.06 null] >> endobj 530 0 obj << /D [2099 0 R /XYZ 89.291 420.791 null] >> endobj 534 0 obj << /D [2099 0 R /XYZ 89.291 278.416 null] >> endobj 2098 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F81 1814 0 R /F21 548 0 R /F49 593 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2104 0 obj << /Length 1691 /Filter /FlateDecode >> stream xZY6~УGZh@Z Ƀbkrv_ߡHɒC 4E=p'w N^pvW `CE R Iag)d*UoG/oGGH$a_4G?d&1:a3 Ung9a ,mwƊ# B>ynOftvף*~&Y>ҟ T2%)=dJ W˴ cu;~CvYNL)m_3llwlyU$G1_2 &5*QTO2)`Rޡi31S V{ 9KW+\_&D3oO3"U(1 0AQ!%rRL^0nBf1m@BA0=vU=G9~[b 2 HTTg^}*8)WwY4'F&Jɐf&#}{ '5%:41*H7fXxo=ʭe4Q%F'!Is$@{2W1 rHG&j)RSugDR nMj"9 ’:hRD p%)=Gi«_ń;h|/giEȉHix J$wDY$syHw΀> endobj 2105 0 obj << /D [2103 0 R /XYZ 88.291 795.961 null] >> endobj 538 0 obj << /D [2103 0 R /XYZ 89.291 524.567 null] >> endobj 2102 0 obj << /Font << /F47 592 0 R /F40 549 0 R /F21 548 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2108 0 obj << /Length 1065 /Filter /FlateDecode >> stream xXMsHWLU.+﹦Imj/[-A+!-`;>=0D 1e`4tc`0i뇛!c͖XG9 Ts|!_/fUFpjZN-#3aT8K T w! .^˥p-uǟ:pl1†q5;h,a^dm((SDql%Q]lYfP7e[A-i| ');cd W3m8F Z*[xiQ}*Q~˶R<&tM|̬cȞ0=!B:KrkY1БP+*\ZN/%U`fcQ}(R҇V N(@@[~rv$q"VPBLPC=ytD %̘] p0|U-Bb 8USbPLD`&1%y+"=T~G6BAr.-vؙJPaJ =KBH'.㚶p}۝;‘]<]}w5p5i u% endstream endobj 2107 0 obj << /Type /Page /Contents 2108 0 R /Resources 2106 0 R /MediaBox [0 0 595.276 841.89] /Parent 2093 0 R >> endobj 2109 0 obj << /D [2107 0 R /XYZ 88.291 795.961 null] >> endobj 2106 0 obj << /Font << /F47 592 0 R /F40 549 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2110 0 obj [277.8 277.8 777.8 500 777.8] endobj 2111 0 obj [500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500] endobj 2112 0 obj << /Length 235 /Filter /FlateDecode >> stream xڝ=@-x JLYYZZ(Z(!e% %Gv73q6L)\,lH/8ҹD?upyvK)ڵ̢-~v].dŒ c\ _RX!4So9uh<ܥӋ q(R`_)XbҀdz['ф\3dVK_s*p/ endstream endobj 2113 0 obj << /Length 247 /Filter /FlateDecode >> stream xڝ=N1QDf9A6+JI * D RGR<7'ϏgFWƉ/O+>x N;Xk.a)/245̬ `,0^? h i;z R) G"MWPI3;s$]`TGf *͍ZTAJK9Kj . endstream endobj 2114 0 obj << /Length 330 /Filter /FlateDecode >> stream xڝN0/`ɋ~H[5"" & @0ۏV$qwPԁKOe}~Sg_.|O3jk^\_즵ս׶u[7VK?f~`ۭ@d0?i yDp=43<ag09UIhB'@̔#ԉӒ!mȓ#4> }@ B"l[WZIRg endstream endobj 2115 0 obj << /Length 189 /Filter /FlateDecode >> stream xб 0#xO`ZJ#NZ N⤎Q+\p Ǔ)zQ!NOkT߂K^nGj>s:JaVL[E{p8#"띈2vcZ}Zy"u歙hXJC1#90װ' endstream endobj 2116 0 obj << /Length 266 /Filter /FlateDecode >> stream xڭнN@ `W*y#OKTHtR)`b@LбC+:_%^,Q،YDKrsy9[\QNk[,s;~G*st/v55VTPՊ< W0gLow'̽8ef1p@4?7q:A@iWSx4Lt['OͶζHA@m!$yM\YN cI 8cQm7  endstream endobj 2117 0 obj << /Length 237 /Filter /FlateDecode >> stream xU1J@ L2'0 h<` A+ RK E[773G!H 䃙9Υ]/݉<%_x?p}'۞+r=\3 i>}+B2R)j*[W*5iȜ"f&{TaD˭|︁%?>gkJw`n<86DM+'w/v"8 endstream endobj 2118 0 obj << /Length 200 /Filter /FlateDecode >> stream xڵ @ S:x-NZIG; :4.!]r7tF%:ɔ1^PKI(sjK:A,*~B*hSGSz dV*{? kP_ak<l%n12=8<#ggT0 endstream endobj 838 0 obj << /Type /Font /Subtype /Type3 /Name /F62 /FontMatrix [0.00836 0 0 0.00836 0 0] /FontBBox [ 1 -28 65 73 ] /Resources << /ProcSet [ /PDF /ImageB ] >> /FirstChar 99 /LastChar 116 /Widths 2119 0 R /Encoding 2120 0 R /CharProcs 2121 0 R >> endobj 2119 0 obj [65.79 0 65.79 0 65.79 65.79 0 0 65.79 0 0 0 0 0 0 0 65.79 65.79 ] endobj 2120 0 obj << /Type /Encoding /Differences [99/a99 100/.notdef 101/a101 102/.notdef 103/a103/a104 105/.notdef 107/a107 108/.notdef 115/a115/a116] >> endobj 2121 0 obj << /a99 2112 0 R /a101 2113 0 R /a103 2114 0 R /a104 2115 0 R /a107 2116 0 R /a115 2117 0 R /a116 2118 0 R >> endobj 2122 0 obj << /Length 177 /Filter /FlateDecode >> stream x5̱ @ B}x:jotr'utPt=Z|>S/|$Ol> stream xm10 P HV H01 &`d-G22T .]m۬˒4-1d4] |`Yqc;6Ց Ֆ^ U_SSA%@JnS IVDC; L?]s̋X_|x/YIG endstream endobj 2124 0 obj << /Length 181 /Filter /FlateDecode >> stream x}ͱ 0+[V I.@% xJ7!ܟ|< )%90/BN%dMy> stream xm 0tܒG=I:j3:9::(:G#d =gojlH25>iyfqcoQiQmkQ tIU G+橋|("$0#"XF"vAn!RsJm_f7Z]t endstream endobj 2126 0 obj << /Length 144 /Filter /FlateDecode >> stream x3635R0Pac#CCB.#K I$r9yr+Yr{E=}JJS|hCX.O ?00@l cJ 1HՓ+ hX endstream endobj 2127 0 obj << /Length 219 /Filter /FlateDecode >> stream xu=N14Ms:PZJHPQ *LDjMrVJ{ó ~f u~뛗iW7U#ICwǹ^??Vk6~f~x392W[ v@7b;ĶES&Z0[ژe И&'tB2Cg)Q 湊q@]ny_{v endstream endobj 2128 0 obj << /Length 151 /Filter /FlateDecode >> stream x3635R0CcsCCB.c3 s<͸=\ %E\N @B4Pm,B0z?0N@##~?4,n endstream endobj 2129 0 obj << /Length 122 /Filter /FlateDecode >> stream x3635R0P0bcc#CB.#1s≮=\ %E\N \. ц \. v P1H  :@ 1.WO@.5E endstream endobj 2130 0 obj << /Length 107 /Filter /FlateDecode >> stream x3635R0P0bccCCB.#s I$r9yr+s{E=}JJS|hCX.Oo  szrrѥL endstream endobj 2131 0 obj << /Length 130 /Filter /FlateDecode >> stream x3635R0P5  )\\@H*ɥT¥U()*Mw pV0wQtQ8L@v(qhCh'W ƨu endstream endobj 2132 0 obj << /Length 144 /Filter /FlateDecode >> stream x3635R0CcscCB.c3D"9ɓK?\،K(ʥPRTʥ`ȥm`P0@1oN| ?` .WO@.rd endstream endobj 2133 0 obj << /Length 158 /Filter /FlateDecode >> stream x3635R0P0bcccCB.# I$r9yr+Yp{E=}JJS ]  b<]00 7@X 13< ;@vr L endstream endobj 2134 0 obj << /Length 181 /Filter /FlateDecode >> stream xڍͱ @ ly z=uj;:9::(:_t(AD! lL)tD'Wq{u`ޑQd:_8N7 23g*W쁙'W~"'̀{:#տ<+P8/9nAys endstream endobj 2135 0 obj << /Length 139 /Filter /FlateDecode >> stream xڅ1 1Ф &ٰ +P֣y--;nDlx03q8( R]1og.Xͺ.|D\- ~T :V*[>^-oy3oGjӄ%^FO endstream endobj 2136 0 obj << /Length 169 /Filter /FlateDecode >> stream x-= @I%L2'p7@VbvBr='_N;ɭ2+Q۾מF\f.~dSfidݱo$T) ZKSD>>~d JCqA4Yr#}p{F=R endstream endobj 2137 0 obj << /Length 153 /Filter /FlateDecode >> stream x3635R0Pac#c CB.#K I$r9yr+Yr{E=}JJS ]  b<]~000?$O*f``50g`Փ+ .T# endstream endobj 2138 0 obj << /Length 129 /Filter /FlateDecode >> stream x3635R0CcscCB.c3D"9ɓK?\،K(ʥPRTʥ`ȥm`PЉ?0P`?؁pLZ~\o endstream endobj 2139 0 obj << /Length 150 /Filter /FlateDecode >> stream x3635R0PacScCB.c1s<=\ %E\N \. ц \. @?}{0WPW \\\>F endstream endobj 2140 0 obj << /Length 158 /Filter /FlateDecode >> stream x]ͱA_i> stream x3635R0PacSCCB.c1s<=\ %E\N @BA,0˃q@?Ǿæg000r r# endstream endobj 805 0 obj << /Type /Font /Subtype /Type3 /Name /F60 /FontMatrix [0.01506 0 0 0.01506 0 0] /FontBBox [ -1 -16 38 42 ] /Resources << /ProcSet [ /PDF /ImageB ] >> /FirstChar 35 /LastChar 122 /Widths 2142 0 R /Encoding 2143 0 R /CharProcs 2144 0 R >> endobj 2142 0 obj [36.52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36.52 0 36.52 36.52 36.52 36.52 36.52 36.52 36.52 0 0 36.52 36.52 36.52 36.52 36.52 0 36.52 36.52 36.52 36.52 36.52 0 0 0 36.52 ] endobj 2143 0 obj << /Type /Encoding /Differences [35/a35 36/.notdef 97/a97 98/.notdef 99/a99/a100/a101/a102/a103/a104/a105 106/.notdef 108/a108/a109/a110/a111/a112 113/.notdef 114/a114/a115/a116/a117/a118 119/.notdef 122/a122] >> endobj 2144 0 obj << /a35 2141 0 R /a97 2122 0 R /a99 2123 0 R /a100 2124 0 R /a101 2125 0 R /a102 2126 0 R /a103 2127 0 R /a104 2128 0 R /a105 2129 0 R /a108 2130 0 R /a109 2131 0 R /a110 2132 0 R /a111 2133 0 R /a112 2134 0 R /a114 2135 0 R /a115 2136 0 R /a116 2137 0 R /a117 2138 0 R /a118 2139 0 R /a122 2140 0 R >> endobj 2145 0 obj [531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3] endobj 2147 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444] endobj 2148 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 2149 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000 333 980 389 333 722 0 0 722 0 333 500 500 500 500 200 500 333] endobj 2150 0 obj [586.1 586.1 891.7 891.7 255.6 286.1 550 550 550 550 550 733.3 488.9 565.3 794.4 855.6 550 947.2 1069.5 855.6 255.6 366.7 558.3 916.7 550 1029.1 830.6 305.6 427.8 427.8 550 855.6 305.6 366.7 305.6 550 550 550 550 550 550 550 550 550 550 550 305.6 305.6 366.7 855.6 519.4 519.4 733.3 733.3 733.3 702.8 794.4 641.7 611.1 733.3 794.4 330.6 519.4 763.9 580.6 977.8 794.4 794.4 702.8 794.4 702.8 611.1 733.3 763.9 733.3 1038.9 733.3 733.3 672.2 343.1 558.3 343.1 550 305.6 305.6 525 561.1 488.9 561.1 511.1 336.1 550 561.1 255.6 286.1 530.6 255.6 866.7 561.1 550 561.1 561.1 372.2 421.7 404.2 561.1 500 744.4 500 500] endobj 2151 0 obj [389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 0 0 0 333 500 500 1000 500 500 333 1000 556 333 1000 0 0 0 0 0 0 500 500 350 500] endobj 2152 0 obj << /Length1 1475 /Length2 6209 /Length3 0 /Length 7200 /Filter /FlateDecode >> stream xڍxT?RPIf"p a)c Mbt)ݥtK)) J!^>zg;FvH[ +Kuu5!` ,, X_8 nRaCxL"݀Z\a DL ".`ɿ h) aj!2F88byzxIIۿ܁p4uBpW|Fh!XqbQR #D;z"@C8/ZA][p?FH{'  ΟE /g( tEAݼn@{ #B. .$E@mJ P|#A\?fU7;e+ \ԧ@as/fgц X(XB\XBw½`(/%B6~{8zX*- na2~hxdg_#먙jno # ,!` 8q>ށ"~W5]N<~SB'4-` ނ_.?_D_=pqC].޿-~/."nmjsuvBK'DD,'!vwXdk.7$qqw挿\0b5 _סC]줐FCxJ%Qvp_ݐX ߳\ ZT/+ Aw`@EY@ ?T/_%q __;HtSuHa" V]!+2lBQv֔vdDʩ]O0gvbg[d_]mՁ6n|X 8e#%6bt7hry;n#.J?;?&zrӕkuTdгH~lm3^e#T m#@g|o4u -9ðԪ},*"+L^[챑AcNa|7Zoqi{&ORM} +5M_N+x1LGh}Y+>6K4 t(h?<Π/x-qLnSn4hط+-%AdϾdm ;03d^c7of?=GZ_bZ0wpr7F¥5}5~ewK t<ءi;Ķ)Kk[l^̜.6͑Ѩ!)7I L`d~ =t3LvV wYc 5|8ߔd3` L0Gsw;ݶMh"R X+.ӒL CG/Q~5G!TNGyOh[r0P,-ѯ3Ҩf\$pwPջ7MoJۉ<7.xAw oz\14srP[eHqӐ6w!7 =3Fl-hݰH/"EuS`Z:awoj^N u!,Rݤ ?9aݻB4Bb |9,[Bfػ p3dZX-j t_X!OfXI$c8Ćϔm YЅ}s-ַޟ*^ihOVZ~I[Ǥ/|+COPFe.Z_3!?`i%˘˟Abmg3M9τٻ25V{yд. pfrd9bkz94ve;S,1%9Jߝ>wR˴q 7(&)"=TipՄ=DeVAS@ƭf x3(H~!M-z<2>{ŒܒGXgPB9wޕ7#%Gu>U 3_jUn su`ͻ:qmOzMR+3.,}n#gޙ]pPE(d0%;2}i4WΝ̔P&$ּN YhMH2a/>J z:dX^7}SfW~Qkw ՇZlG} Z TDS|a 9RxbtDX>bg\q{ۅΥwؗyD[&q4_W;*џI}Rm",4wJCYZa e :dC"w Uɦ:#fھSNJvkIq-궺6yg(7t]S}/ik/p~ćdİ:+QìּwƬT׌W M`_*/(D?DvRz騼mWL8+b}oHԉe"“p-zj<b:ɖǂYJ"UgDe _ZSI(G8 J)tAQq_܁9#Cb`KM a779^$wgRs˦…ݓl3 Lto!i'wS1'z^=t⩄"nrK]4R?pBIje?z#zѵD|ڗ7Ũ:zmlڜ@7< Sc♴]b$۟ z1A?e{oY+jL#,x( U;c1CaC69iP]q{Uzp(0v&9{QA2fBA'jjiJkՁt0rh"vѥBImrϿj{ wο\{;l6]QWhNGJjȕW ԌIW|xj&NwAqLvb1- ԜEJS]6g-ml/C$ 28yfLi+3jwI8{G79QʧO(6 `,{5C[]kat4Kgw vo? `!>@2aɉӧ'e9ҵ$dPm=D_ %Թ#QC-o6ztH&n0,Mi'G}RR¦B>zKBJ 1kzA3Gұ֖-hDĊH'EΪ3quGMiGo(d%9.`k;sDS &gI\ 1,?P?- *@ cQW+'G}q(лm97n5rw<X]/g$*#b[cTm]v^4Ue{# -,@͛Oe 0ߺZN~mN^ {pdbG l|g=& |vH"DLJ\a9Z\lf3(m㖓).>dޏGmS[%brQRm90βNYͽb^ozm&uy N9"kV`\ϝ_5k^Y k *r's֞=Sw>91j]cbKv7dɥ ΀c$QѶ^Wm c}LnQޱ13)y-˂ӂ>Ϯ~HBАa̹M!A/elh+k#CBHJ;$φxJ*c{t &-{5XS@NJt[zHVW xrV5$m׶3[:Np8?z>e*d,y~.aWuas7IՏE+ݲT#a~ O,((ozYǼznBq1}p'E P/*$/c Yz$M_v5+` =Oִ|щB}=VAlcpB7ϣA)Hc0E =x;C]F?)R'vw1)Pކ#2l ^Y?Ukv+ "d,9D?tUQsCԌT-?+6bmͿ\Dn{XOy];p dyE*b!9;f4H#ͣD4>`!)E@%L8d֘:wGMMuάs&>VB~@RL\Tl#`s [i#=.ɯ%د׳Ww6:j4cy{nG/닍a It]*kbdL= z!#IO1o t~9!E ؕQ$sw=HS\p$(8ed|ࡸ;8XƶV7̎TbmXF{qz%x}n#c^ـ:&f8rWd}p!Kj¿M]sܘ3{qYC1N"ٽxCiA\Ld8̫ ',6$@V4Gf"?˻4fh5|2iL[ϛFx[sz 0Mq>wU Xwy5lյ|I0Go|khcVW6wxj`[H(CrUqlC:ݹ d+:[C5ݒg:݈D{ veMߴ6huލJ 0F4ۘ ^l;}i3@xp}] "-nb:㲞הyb@n ReJj%_"cN_V{5I͕OٖJ``201]%ro O[;N^'9ZD[ K;*J!H!pNHvtm9V$[J, ԐRh(R$HC s&~^&6C˘K+35׾qHFhBvt9BEPV a25juAKD;x_^Zq1I5Z_[[^zǀ8ưoH(L ĕ6TEmK\L9_vobćnu4ǽyCM@`Ui8)r<qyE!ܡ=\^\DTZMZz yO! }щtwZ+pŠ!eTOY^|Z0e)hNgl[cC?#8 endstream endobj 2153 0 obj << /Type /FontDescriptor /FontName /OLFVEJ+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/comma/greater/less/period) /FontFile 2152 0 R >> endobj 2154 0 obj << /Length1 2299 /Length2 14271 /Length3 0 /Length 15599 /Filter /FlateDecode >> stream xڍeT\k Nww%[}rsGQuZ:9(rpebcf+鰱XY9YYّ4]4HTZ@gk?lĝ&`+TsqظxYY쬬|59$Lܭ9Jlmi G_Q{@ hhfbPY]'#?  3# t:(&njDаvJda vf@9PU(;moF`cf; d/g33%PR`vte8ehbXۙ U @JT`.f֎..vd+ ђ {{ _IX;bm@>_TY4܀,.VVV^Vn 4b+#_J`~> G Aq1q\݀~>T/Bbc[LH@c8[{YC`!xAv^u,bzJR [-&0عXl||^VF/GDY 4/և@h+2kc oMRnvv?6vso"+Tٙ_ xWD,n'\ߣߓv\|LlG>3[>ߔf 󿶐`l>~0 0;\.09?S%7`x,Eo `,;EA| 8Χ)͢A|j8 `5 p-Z?\߈3:?\߈ 3فΘ\;=0?/dǞ/AnX;`7w 2@0Y@0#@0]?|# vuO?`?ΠQw7|K.;\I|qk j G;|\=@pSrwLgG2vpx?@6ssvu_oY h2i%`ڝ=Kag(2Bp헜1LPZZc2TsY[i yD*u`Ijv 9sGD "F_Bх(lnٯNKS߻AS&#ڦU[GħutHcM}lvADR`RG *fqw'9s0WLI!" NR ,Silc^-Y\j L>R=KO t+ҞGbaoRblf=,MV `itl:i !=w)`TyI^$כ+JvyoE)Ba+J_}BFjoe.:e(<]Ƕq z$'UJW'fa'VIw=ӈ: )k|Mn[tO bJ-܉n4̛6Op0 xv1^!7RyZXfKzc+ٝ';>OfIį.qyPIg8Ap_[8%d =I3)=~5w~AZ$t@軚)hamH!ɗ;qZsJՁwUْDS!Uܤ: Gu 5 +''ۊ ˡ̌U?S<8#r"EFLy :e4qN 6p&Y$xfZGčF<ȹ8 /fz|x=gLre1Ekvʆ{8V*vGVN&#nmy ~~`cT%`c=P \\(|qVmŰ켄˨*0th9 ~1b0%7A.gV_%'AsFWRFNHo{ xNzaA7Ts|q.ߛIx4tvtߍA^ܚ&WZ%\ WW9ŏ*,Q:h-cv.T³ʤX f6Q$Lf^)> Eծ/⸍obUx?kHHs~>[d sSN-YǘDY~SPl_1zu5 KarN5vM,ih?* "B* CHGpHJ[I1u*Ab5_Sذ>z8oiQ/hf6G,WBcˮLw9~c-2V{Rh%᷐IVIFK$nOһ >ϰ1&''>=yEb$4XAW!C34GEMR]+ %*v_Wp6w;ϫp}If[%.h*6qshCU~glue@q:+G. oq }LTQ6|"(wH9@yywyEhG>vc.t,!h1Vmz: };/|FN(K;f/s"QpWdIsL*4E AXԃćOGAA PED󙴧MEXiO븊t%>!/MZC&=Rm~2APxvd1XG/^XSӐT6'nd#ЦmA'#L{u]Xc]\Bè5(Xʍ\D -.pm|>{ 9U\ֆI)9;շS=ZHbG"gyGhbw ߮&ʻ9&jJ4hIPRcwU(+}SO{ 3]5Vr=sR :+A1n ke3G많rzMW3 ? aoX"TTqRKa/Lz0 ٶhDXX/-amYcƯ^ lcR(*3a-t#/=&uR .&Mup5Mݩo$F.32=YW ܋O{Ud`ݴ3 )U(}K۲јX{azlW&+ڶUKVRme?z.Fο8R$WƳOOe)1g܍\)sE$Nl2|ɨ,1.O>U+OLV\uv#ORy]g#DYߺ†N> GjȒg\nBHaz{P Ş(zyGq`0iCJi=S& kTjE8cEk7cd˼,,NCqq};G,gD1wd8z:;_J/ʒ+2TJ*g9̾FOnB\:f(5y`;$quO&>"˴(b#M<#OGʦ!B\8#I ·{,Cqffz`b]9d.%{w(k08lr ߨz]NurSz}p=f`?d}3X\i7%asZ2FU Xrl?4,rS$J{E)Zu@JG{d{l>)|ӘwP7RI^bT; /eƤf͞|XK̩[5xX+,:noR<͕`([XOz Imn?Ti--C>:RuHB2+|tЕ1ٺ~a&c؞} T:YR}X%}~LWٖOl MDW%E(;/7ZyGڴꄓ>>^A Q+ w N%}H${ZIwXYWXݧG>R5l9]iw w>lmpyH5inA&4lEKsx$\ a]ko.!?iGՅ>J 0up q[q0FY!mD^|Y>b:1;rV4{a+!бlw MEoaUa3/)E zcN \>CoIAkXM'e8XZMDWl|]f|h6=^z1PO#&uNJIa 6>&tIg z哉j98vݐ, AD'zf'JdZlNj,zC-}oetlto~>d 8+oqG,b"÷ZRpWcYU|Z7쾪*3SeSysj{}^ cԯeCv䔅5A䳞ޡ&P43'wu+%_g&vde6j]Hۿ!)w8MR U~Khc˞!& ]KccAe_hK@RL,j!;d|9 x+ӋzeJG8GuGk;~:+4˾˞[L,Wz&Ri<:zgh+YFsadʟ %6-grӴas`[/T /sf=[mWw51X\5 r#gdaEj^ zp/̨mB̀`rl<,Xa+M Nj[;;is֢+߄@ϔ3lڵpٶ$S{cԷYZ:(xݰk1&י!?%ߩ"2 i5$B.;tiBwO;II9WP;!2g&Nྻ*{70)ƎAt)gmgdOTI#5黗ŨSmm|JNgCBأ Zּ8}lXl_Fm7|z< p*>3ߊRHL\]J@8[%ȺSalqF7U@|kNJ/>a}'AshT[f#4 nx_0(ͧ&1D~iUq=, -schn[t_!ْP&퍃-ϬHd*Y/%!Yr^ԬpW _ěNw*\rmxr IX04\'koϪl u TcNMLєDn?ynzm3azDL-P-])kr&G&JK !eO¶Z_vZw0ǂ%ȐWߵoΛݚ]aWy:}_K SLNǞ!w)S!FWIV|K87rf|uexeɏ[6;jTk&V ްm3Mzw|& }[4mJ٩wIχ=j)y@4ꈜ!yN6]B['lQ,/2^]Y;Ber™Jt! 9 ~Oc E:>wOP!:,%M$=ŋz`>lV#D Ny(DiҪ3J.rsfʰk'dAK`ps"M-?e(q,c(h雾JI2>颊0dIQ]= ,x,1E> [miRK+a:? vj̅^XpZb h9.ưHYueHM(`O}ͩUGb }{y?4 \re\~O$1ʼnP_ pso,|Ŗ楂=nrNis7`ŷr<'x~sfʋlLK2wlA,%^,to?Xz ]4Jrq40=QUw /LZB?vR;RNE)WgcՆ-8o/UI,wD# ?BmdIwĉv2nhđj0oѨF^;OqZ.Jp4nR.Դ1YٓRxB/e8U-OvsKJz =sW,Gx)z%YJ5Q%v?L,VA@:,( IJe-aJ;almraJDCrf'6Mֺ=^V탃/:K xɋEiZv قT;մ}Pȿ'd+?kNqC, "tÆ95 8_Jh8TvF`G6{P= jwQK:7dzlMB}h%pA VMa1ŵeu61ia׼Wɋo.QT' =Ad{!<^#1oZIY(h4o 1 *I\2\n8 4d^]g2Թ7핧WǜɜJY-jwESbEv+&heYfsTfgv{:fx@؎rC()zN&$wS Mry F&ۯ&y;?1cF as=Q8))q(m/aV*׭i$i02e!})?e[J|m^0SMzXX1"G6$|+g9v}en83Ugl\] wFw 偭튪 yP+"|ez\(1x8nN;s4|qPhoAȨx)PG䁔mCINCp-Ǒ{=Y-JU79h%xeOSf =⿇A]<ٽ!J Kv&(u;SQ鴬ѵl6|β?3b+_.)6Fp0g@){>/¹߼d3_dvג1hӃ\PD}(p,i,43 [:~!KainJeꅏī8'8= Ա= *E^/)dpV]nO&.osޝ0$ ~\Mz ұ&V5m gH1, gH^$+>\d#I=CX /KY9l_ovb޼r*7O}B.B$ZMMrWMť !nR#֞37" Q 7UKZw -C9}NB_>y3 H&j@D@"Iho3cdٻxJerb" !n턭_* dKZ4WzE2%0k\ű `WPymGV1nAa]af%EPCGE.sv"nvL?I0oȸJ0^Z#|!{@*oW}m)]]v܊66A^R\-f*| *uVB79͟so/9@N8rߪ.cj;{EWd~p\>r:ˈ*xoGeֲ0fMEz2ڻjĪ}f+66<XqTs1kQ@4g4H0_QbŮ -xK.‡WKA֐uK!nX}7 }+__R^,D~6 v\kS?=tp+Y u,As*3'FShug[O: RO,YO ^KaC nqP\cOv^Wi+kL/ȮC|t͔Z35E´zm2ԇ* )vwoE` HOU0m#9߶#5Ԝ&s(-wm!Z{TA2N猎Jp+bf,\??BH>&$aZ4١ړP/:>YA“t)`7LA#'Z7ͷJaɻ;E%=윳Z` CHKtzƅUކ~n+ed9b;ͅORiCLבV;8#층ZbREU5_Ka 0ye~.O])DKV*.맰1}I55qs@y>"A5[ T3*#9UmFsEȗX>ɞ:|ֵ)ǚHٞ|ۀy,ZŒD(2{]4&;JA?2GW}j" Uai1>E1֫S}Ǽؤ??#$3XW{w#^G[;jZf/?ʗ\HX"?^黢{U8?[wYhg{}8]Qls;WQbJC27n椮*}VT j5CQdE8ڔD8+{WUCT^ *J?PR]n6&7ЫPqETGeńby!bWtp+Lau%bSsuJEcBtS.~li5[g 1ՄU7Vr+> f<úe?r'\Yg糋{R 0kAQ]}9G/FjԲjbVijr'skn-jJ̙dCXoF?] 2px[O ^ Mt"t{=*"%Xays{t9>}EJA6 8t@6뵚ʖ"6^' ?ngp,OZke[SP(JMqwӋnyRK .ҔB̥*_gZTODKNn)%?[HrI%4R3g]sA Gݩ}]dO=L}CM$ppDZބ4dC}N¨eh:ܖ'F?I6(އM18\U)CI)D&&1I{w^bRдW-&<4Y,Ouom'jJ9ZMUU#U˅+K]}Mu*F FXRţy=d\JrnoR0# c/!%G2kRsrV$oKi; `K7Hi2ݨ/ê?q:r)"ެ~,G#n9HDqGjIL$,d VLtZ̡PJqD$ðbMNjn+N8J6ptbK4`7nF Z%6{XxAK )Ĭ=ajNRTS@a<7VDv#q'_g}~Yr~m$y+TΘdFGEEcHRsH!\ໞ÷µlhMbF.e7߰s'N !冮iSO|d!<'.29ɸrd\ X_K#{H5@{m,i+ѓL*fT-_IHlSi&u9j9Eӥ5@24N66ԞsoECBcFVa\ԠrHʔK43Fv=iR2-z=6ehQLNoӨWLkOAh,k%o:֖<\u _Jr_`L92jtRϓF&WXl 2w +2hS+XH,yrB5ג5zc3O, ž]HG=+&i'e* 〣h.r)p0\Adӭi2zGgu:]3^ خ5i1>b,+Kp :@'MgC.$u.&Y;V_5_K/wIw ,E\>TZ=t/[ZX>n{@6>o8זL[Ȝ0"(#'qȼ*e _:ʥǀ&܍nߕ"wb0r߅v|| 4~)ufSK<nA|.uL*{[-C.[ ,4melp֓ͨ1Ghgwaө M/wG{\r>19rO Cx?3vڔǬ endstream endobj 2155 0 obj << /Type /FontDescriptor /FontName /BAZNKF+CMSSBX10 /Flags 4 /FontBBox [-71 -250 1099 780] /Ascent 694 /CapHeight 694 /Descent -194 /ItalicAngle 0 /StemV 136 /XHeight 458 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/Q/R/S/T/U/V/W/X/a/b/c/colon/d/e/eight/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/period/q/r/s/seven/six/t/three/two/u/v/w/x/y/zero) /FontFile 2154 0 R >> endobj 2156 0 obj << /Length1 1449 /Length2 6262 /Length3 0 /Length 7248 /Filter /FlateDecode >> stream xڍxT[5Ҥ# = KHC Az;t"+Uz. M49̞p痷AZCU4?H( PԾo@a PCqC]P0$B?.P0cS1@m$  QI$%"]$J`7 @[D@QDHgO=SG7+ uA6muTH W {h %tpP jIv&@0~;#m`(c P ⊰0յPoo@3 + O` C*Zhax[c .0g4J(3 昕6H''("?% 9wO?uD la۟4l\ǮPu? J^gCOg//33`B1D(vqz+"`P;30$WuL4P۩x I%D$ ;'_V=0#: Mszq ?cw$FP?B0o igU#W87`p?]јFb&Pֆ\۫cfDa9?o; ZpD~;( |у8be\Pd29B" ؓJ ̪ $p"]~6VX Bn K qD("+D 3$__7 !R/Ϊ7GVV;"zEМϼ3T'+3d@i{Nv|[ c^eQt,ӊ'6'v 7WCUꁜ8[0Y!ŬVd9)Rʅ gҁM'הwckow}ng/(D`Qna'⣂dr#?+'sm|:k*_9n|A_ cګv-}*AU~BxyCHRuyXkض1TFz/+((ɸB$_hsJx)|$ m6ಚ 4;O")jUOZj5 8*߽4})dg1Rv3^ݕ&||S=}Ku+/KjD ZI\mt>Hs& â)Iip+~ZJf냢c|ap3 @Qb7A042vVK)\»A2 `2݁VQ/^~ߺՀzD*s Uvwjѳ,o_}›*%p#q It|I׋5Z$-7n-9 ]I,RIY5CdwF}@ˑr*=9r `zh>YU[ޞ1sMZyr;jAb4-Occ7*֖=ݑ]Mt s#^|U tD,# 7km[BEaAͺ%d˥x乼Vm_9U)gaOAЋ= pM3⮣4ޏr#@B;%=eoyI/힞7}zl eo<:'n49_ ƭYdnIW+>Ϗ׮g˓|ju?H^0]TAb1 nN"=f-dⴔBo;|o@.w*)ce)<X\z?]FSŞ~yvU&pcxac?\aqQv1ޡ5:fO.eUgiV">GoUuiik);6%=)bh<ft{q}`Lk/UEY6@R;ǚB% (ߞXhUѽ@FKq65i(}OثhQ◫R]2pgՌ .՘RRq:ԛSQ6cb79[r)+j)9f.f |bS%.%cQʓ{Uͽl<}ZR Դe0k']͛P6VwrM:/w ^Z}#1' TsnpH5 *\FRv4fT205[ ---rw\|#(Ew d2+6uRRFxmt\9xfDt;H]{\WOzіV2K x.;u;WQ3]">zxQ1DL|vw6q(P:M%>uOJ @0?m-%$ݘqr>YK ߖ.^ӧԩl|}_B9&A詅,c*+2BvSw?ndʗS?~9?DƲjyn=~$sXAgPGwf]g|RPl{Ѵǝ~W cyͣ7Khߍu'Ak2oxmJ{wLOp'@[n~i ][S)5g鹌)d(mXQY[G<ϲt\IIۅ%E}_:u=pMaq,>CEaEw*5Y3Q678Dcr<$-r=nK^]?ͽ^cM9KȉZh>R(竘vyEy9zbNW1Z99Kgdm!<e)ӌXھj sm]pqntU' {\kSZyp_Ȳbɠ穙n>,BT_LύjTqeSXAP;2V}?EiFgzl|mfP1*Y`9w ̆!CN_5%:\QR>ȏIU>[5Sc%֯{7XMdБ!zƮR6EMiИ^s"2tk`WBI朞}:&\ApE}CI[-{S)IQ|++f4.W/=,Xr!]5ĄȷV;4MegcK-IIݤpc !On&u=X%0ؔ*V@oU]J6հ  pEsbdQ =aeHݫHmtU(z"NKvt/KMᬷ(ӹF읠jLPa5laԟ ұ NOH>-y 5,VgX/Du|wD(׆Jk*( +^`5BfTΔynm$F)\ح džFqTwFMG߬*f%Fq_K\nYӻ)@;dD9Ǧz2cBu-I.t\}#QHyr]1Gsv!*hȨYB8,fIdo3LLm%ju6mĽ{-nPл=53K9t:Κܣ-"5G&v-]Bdvhc)KXDo 7k\8+}WVxZy/A/S] ϑ{?=Y]|~"zSvնн>>\]4cWYXVM8FޏR]xO$97͂݇*ԃ@Q>GM! FYOñ0:%ϡ,ۇs)H\3JZ9#ʏ~j TxP{j9T4)7殏h~ :~+}~8OK6޹lfׂeg"+zVHVe!6͉ovHkl٤ Bf2UQ{ӊC;둄vQ;'y7*h^*Wg;/7x-{w E&4wEL!*M˙9Io('ʌ4H=%%vqƲPehŎdSM5w^) GyLKӸ>І-5kP9x{.QuQӗJ̺tl3-lӇ̷DT}b$v _tblFLuiش|>_i}$yX4;.T8-jc 7D;NL~y|Ֆ܇ޫfs_)tICSy*XY9=b[˕Lok[)AjVEhӕIxucug΅ J<|!` %8vW_kٚ6[ϴ?jIS~<{vK6q\34x`=gn ջ)CDzQ n4M{ex>2סGGFECJͼୋSm;PcI imZ$M HIzy&PD6N}gA_'z}o49@8/V͍QnKQ&J;9{}G^1,%{1JbF ^Qd%u+v|UęSU 91upƘȚp:+Р/ur;Rk֏F˘7VY2whtpݚz]WRM`9.A:jO@v*1c5ǭo4IE,Ʀ-CEp, $Lj=|JV VFݭغ*_C.'鐜ҳ^~KK8Ud$ίMEmx6DK7L8ܝfy~s"(6U*m#>9۸VbL5 -]+ȍGU~<Дm;܅g3ԏ.IZ+bՑB~^۳UAvSjLVn-)Xy߳h x7avR;1h:45HizWC:vVj[0JuX촩LW*iyH>m5h=m VqJcjOjǏO*C_nd.fnF/ӻd# @?xVr%o(# i,n9ד/юv@`B~v3,  endstream endobj 2157 0 obj << /Type /FontDescriptor /FontName /NPVDWK+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet (/arrowright/backslash/bullet) /FontFile 2156 0 R >> endobj 2158 0 obj << /Length1 2677 /Length2 19300 /Length3 0 /Length 20827 /Filter /FlateDecode >> stream xڌP 6 5HpwONpwwww \ߜs=꽢 fݽ@NJ/lbgugf`ʫ13XX,#::Ya!4t Avk3+ _C;G @ cg tB p03wG15ow  ole46[='=#5t:M P0S9@? U;Sg7CG $0:\\lMPv@hcipxogCcc;{C[ [35(!L05ojhamh2!@BX`-읝,06ۚm'f4݃õs/251 {Fu[ ?6 o:%PdK ` *ca Ar2t]>^*!03L,F@3 [Ab0-:Lc0']ЄZ{6E%4Ei)_; @ `gpps|7ʿJp#?%z2\ @ POLLƠ_WoW$\SGohcah]A!ok:M,\lV!¶f6Ihdll@ѭ-lJvN7zf&Nq* h7_0tt4@` ;;&@G`k r9"uFDAF߈4iQ7083Q7b0JFF߈ (F .ro(@\~#E7qQ@\~#ohF .Z"ng/bq1t ﶂH:6@FVNֆNJY;6l:?+Vq6rY_lIll~skRMY[At1Y')3 rxs3"w@z^`& ;:Cs{s :!? ֿ3jkA AW1TX%Pj[nO?( FߤA1bfj[ azmh٘ b5"@lQf! e;ޯリ? b `t6wqҠpp=Uq2s/qRAY=z t]]AMu]݁KvƼ?[醙g4R齖\Q`+36oVwĩn_NjaC[TZ'q'Nk Մ_?[A6wȐg;p(b޻J)Wr">LGG~/%1:K LOGq:{s;5F,GsŚ諒0VԉGKy1:E%r,n r5hHO9iwL֎Kܒd>-5=H{4?OPpiM$$s zCBiM]c`32N%v8ww knoeSI#<4|U)-h&[\6˧:SS3JГ[sLǰ`e䏐 1# 9^Rn %)ÛyK)5(~w9}QUd=̲X{S/&No҃nj *PCU6ַz~"r/^l$z߯~M_Kb,))*)5LkYG7}>-R-+"ҭ[9lN{(6&cp9 Sd7o{_YZu'Gf _7en,B!2xH/էO"M0ݰ+< =dI_ pa2I"!hX:s Y;J?UqzzO1Q50l]wТl,;f0巵lgn7:ucFz=d3ʒ h=l:Szw|YTdjvJagqIHDEU3cŭUu_A%v92]21޹Ct'Q'2Wd7SKWʙvA eRly0 הDjXVƠ/Zf mDžaϵ8!zj(YJ﫪vtTT2JDE*_?\ ܢ9!;X>SHAO*'YG?4e(BgwT4eIk\}Jπ*|&QUv{R =S|SIG+\UEES֦ Ŝf፯yj~ՓuaIBXAyvٴv hSt"XX'QE[Ka^1l$^L7ZtTz>m,*'cv~?va @YDdBUܴ[1UVx@n@qJH+ zj1&˝.G-x Z5 dc&}t8dfcUk0=- ^p$t]{ I 5+ K3oR &p T<]祙 )y%8ezGt^zcƺv uM79eR j/ $EIm]2,P;9Gd?/~22J}ǒGg\ QpO§vcݍ߀cYR ]#'OʎA C ڒ46\Zv ~"Plp"F jzGoo>Jϧνع25I\ 3*+[ >y `^5v<qvs V!;~J{ɖ(*X}ծhّbcyV~nҩX~cJu}jMK#\]/0&dq1k1I2 GPۛL&gk*̬?GıkUN]Ꞙ òI9m<ݬb3^m7GZ}$Xs7M|ɉ?CdNLzWh˘`Ճ7quG6i%~٘\鼫UZC Ĩ.Js?"SNuw}'L9I ڗ|SCm Tgyx7S^M-&ࢮmõ|\M|B)Z߃tG6l\s<(3i5}NGg [{ SϦrDCcb .X&%Z[C!xRJ~Hh?dDpFDa^joZҰ:}t3w©*JİJV|wj{ yț'㊡J֣1j^4LjE~B3%|MԬF^^K4T0ple[H{0i/IJ vv^܏TuXH ]r<_κ:HXDR`a}pr SCBJ' L3fͲ Zf_/4 isXQ6w,TeǕy*(.X+|ci9RWK˚ax|y]bzpI) ۲-8`YrF0}>[}0cvK1d(#w_gRnӪ9o>gsK '\FS-vヸZ\,ve뻰Du,_I~lgbՀ]T%N*vD ,x^nea57-X]"U0X!2㌼><f*vuyttizWD302gi1A}f4-"Eث&>*Z.iFJ ƂfVvvkXEY5_M!?)-0Xw2J]cf5 !΅ h`h`Sz0}bY<OŨ++Zkȱ3yH*s|ePt` /RId^8pyɅD;p51A!'W6p~aԑX /bed'!o;h׈6gFx5@(~QJX8o'=S/슮ż`Dve0AD"J.7TPrXZqHa@ƙb߭w -h~`y1Ӧ]{maž H(U~YSv+T-u2r[ز A!UT4WmؕgFXc60~w Q~%Gnk/n>JGMZ\ "2Xcz.JR> ӻ QG1k`ܣ0uFiédG%9Oɸӳv +7hjg+~;V?a93y0> X>tG7ۏDߕAQZ"Ƌy)X8lܾC"A l3GZUlވߊ oiuB9ltU1.8 #8Ҥ+>BlS.ge SI з8P)\W|js^ "/y5p$ίkV7 %Ud =Ϯ v5nQP.`[ž3}\#v Ģ.ZQP*G(0PiL ,-d'W{ehpSEEvE2k* {K>lDN*,7TpYEjv궕8RsS3W:GӠ O?a>H\]Z4r[™s܈ίH4~̱r,MhG{Ϯg0TOטQNg)53y(,ԼGb ΰO ل"-|RxD:hUp6 Fv|YQٓx%#J$߫ߛ I EW>vfB a׈2+X-[tCB)IXP0o>>LcQ~>肩oÏ1"޼ |h~MQ[40/χHN'.{@E1Hr~)001Eð\I̎Dd'&j 4UWy[o r&nh7K\ej&<2wBj%v;Vb̲ [b׋B!f&TQǪaC@@burkU%Ȉŭ&A^A%<hJtGIQzNF†XڽiҔT s)`fj℅ӈYߞaxPӺT|w[/J'%G 0t`g. VDdz!K;p DVsF1`V9K]7ȩiZBauWX{Ri%F~YzDˤDmcI*?v G=bN %N5 ]>'Mr NIČj42X2XZ&Y8CCCAhj^76C8 7p㏯^hgu_O7a`3LBowQ̹'E9Sj0 -n/d9wC5L0tjWs?&j2t [w+'6]1~dv"nꙚD6ruY{ <ȗr|ʟZ2|%1‰KMbu}v,1>oѬVu%t/RA Ƈ_J>ND%"%3`wB.t 9~Pj?InBq7ZsN'}vV@Հa1 %+TC Hɒ!*Y(hf?t3O!E02{+B'ে'LHfK gC*WQB:83oDžw|N4ަ4_]NW_:RA!.eTPGBLcPW2D~7e O/l>N2ViZ02~)X@/k2Fkep. .4PޛU-_QA bSG5xD}%փjCBJBAr9u% 81$EJwٞ/w7)WekEdk-x@06% _ۣ'&e[};mqVLENxDtT2݆s8=g+aӅZ۴-[rXͮ\JY|٣~ wSU0~ @vn{fuO.]q7tSCȎB<~='VJ-m[ǹ4kngpY)՚.58O-ɏW#p6e M42I/8WWtSN%Ǒ;GA=S? Ch=ش?AA5z~@ՏU6œN%xzFnpkR%m1C+eH nWWlŸߦkUg 6\c3Ƭon)qC8V~ 6 P&ljM:)InR1(]Bh~k,Vl8.@͚z'qDM}ΦOA 7,L^&;u2r$oT>Cdf9pzaϛ&|Es[vTuۻPh5y83:t ܞ;opø)f\b11MbYEM@7J[v)G491Y^?Wu @Ubs(+=x`*Uz yc1N<܅t{tfq~ʢs2l#9))t<뎽q4[b^gO9+}2Lݹ}a 55 ߌ쫿gDpDhJ2eѲCsz6eht-@*N&szEfs.j.XdD&.3fcop.RwM b-݆/f~wJѕXs0v t3VQV*Z7ArmL:AQ3ˉLZ^k&ghg˦~=m-Inɋ=m3cmZШe/?O`u 1yq!Qbk9Gb[NQ3P@U V X/^*۲3#S5N:&b])â|N\ZFVt=5RR9{+U[-hK˷'˘]G w.:7ğXq~,kVYd8LpA]-glⲼ #'[q? 0d:hqI?Y:F9 c'~7Q82,+(Zy(m b O{)>B4IyӒTyjb: {^a4I`(C|e!J -*GI#>mȘxlbW0ǫJX/%EvXK*u;cR]j|YfѲtarMBu#*q7 QOW>aC+Z;żz*~X66gG*xE^s{ 1cw|;7TQmaLT%hߕ}E\Z XV~Y3IyIo%rl\ߥ91XY D>߄yǚadb c v_+:5V6F$}V!(|I&Oa *й$rMD~ҌE쏵x T Eh5*mJ稒e)$e;JQlK5ݮ_ ,I/ 2 ߍopU݊qSE<@ h48R/ O#S(A81X>ej ɛ%s{\ lPwwD+/@쮫X.ݼ+ dw 8W3L_)PS\e7NmlQZ΃%1lqssJ·XpEQwI*Uh^3Qs.imA9id+:|z rڅ 58KhpEyB")jNtMiGm.E0[i+g @SFI'dǜzOYD8Դ#1ʒ508g@|dc;uiRS-D]l9 =o3p_udp=E^܍l+w)Z'SHBbăKܞ5! * C37@c~mv:3TkCV{RAwy|j0Z,^r76XZ>>54vRaOGʙˑ@!?RF1f=l+ZI3)gxoi\Ϝ޽Cpme vZ/#yS+!>ŋĢC+ )Q\gz1 &̤}OW93nrVލ qLGapIp{)wL|r5)4_tNlj)^ށlY^Zv+YSkl6x&`|uݷ*%f836mkbD3_1^تհɨ0 +4T׆m4R|jg&;Cb*T]$s[dwߝ^Q9ڧJ&f<2ζvq,; Z;K 7#F`}"/tc82r[obh kQЭ $I`q~m=t|#a/P!,#V=aZ`YBIne}7BKTsD(qC~*qG+Pih idrTKO82jv} 0u7`ΜYdKUJœI6)Ti' ֶ<ྻqNǁ1e/9KR b o 9= Kk&0*~FzM&wӌ2y쥓[#o!NP0Nyz ;^ W@ 9E±Wݯcf&ݞP~{^j~*m~#?q$ſx|웉L5] *҅]qmśs3Gb,}bokү$N0K R"W2ƅ, $(0I^k H&TV?$SmS'N&껄2T\5VMRNzr^$*_r2~D!-WuKkl厽<:4[[pT%УY ,Rev>4~ܢz !; #o9{9ThYK{'$yNJEiۘVȸD=jKegt Oj'3Z|я?T׭݊sa+:18| וTp6jjejj{#6k :PB((Ҥ>Q;\3@;z?iN3ҾjpO=zk1-&[gUڔ{{VoVlL=SE-āN R "G$CjNhjX<_k!%p/Nq$ &߆{(Wz{jI8];8z 2Ӥtp ;QՕռ9EcJB+Y6[l(SB&Og-Kϰ+a}WaX ^G/hn ߏDA1HӀ ܱzu ;xa^N]rd1W''p&vsWhz$)V*~To[3)'G) תּ/ V"(Ҫ,ݕ:6GjlxFM\kd9r_h\6x:VҾӼ(gjpf&>aZ堍'vtR4;?Mϊt< IDT3*><܀/!'Ǥamy1.gAtk5l a(! GJ'BjwzuH~.$^hrQ/bKڊ랺*7o81ƼS[0i~q%+!e*K߅yqq^_' SZ֪;ڬ4Qq#4 E'rϳPjڨD6 x?a#tG5q OceC؈< 3g2~Z}%c B|=cm6a9Q -ߧ]=g lVe w+k">/l'w/{I/ t_'5 bPbzCÿ́k=/pSߪY;Y58v['ZW6ohȪ& e^R-3~[!6{l.t_3'1ՉP}oRWAjT!CaMHPDqJnӀ r`9([N OaLiYlYyA %n;S-Ɂy>Ӏ@fuÅ" NƯ 6lJ?1iBj7yw߫EN}j{΀MG^$ndm@x,&-V(AaXBIy7#} ryٞS _\{M-k޶n붍gީ(}`[Djn|xPm[U$?bˠw#&49mqCZ1C#5ϠԈK{+ *K_#UV[r'X&wH]Iٛ$kΟZĜ^S1p_>z+|ۭ56}y*[֜۱.u ' 18kpIxC/ՒLHa۩\4df >cX-w8>RcϖGjfuijVs1|O K/h FHȍ-6^hRt R ʴxX5+|Q_ow`L|P{C?ɩh5BvZuw㺄ILj!p<^;59j1lz v)cŦ]ϙ6f/[{FtuzZMpy8e;˱kD=uȃ>x%kR!Sč+3m;_::U0mܭ1$!f])惋g9گ.DS݇6ej/dݒ w_縩 ]\Ȑ&8Hbos@f\blQ|0kDT9a༚JQqHh<.L^luIS3 J68MRr?n;M;d_oNj)9]@=Wp#%7Q"DkCG̬[Ž/Dv)k] V_q֞t(>>^ťvAC3y6. =8aļ~6"OMj;̫PР7_- Ȥ|_,GMڊ["8}UDYMŜ/D\"X Pp97Z!aʯk Ha;խw%< ֚KntpyCC"-fv1-ߟwDSws#a\FH< :c4.qh3{'C| XL`pwxd:9>KswEycW")Ʋi1@+:M'BqHn鹢ZbN&Ƨs}LJ9H*%*|͓/N(w/^isZU1mּ3>-Hj.9˺ ·&P|<9teې\%a's&{=Z -̋PgnjÀVޓq `QY Ps)z3\C^[{LؒU ^^_zRPB }NWΛ‹j$Zvw"LpFJC3w&H jQiChYO`j-_&sCӐDƴ(MPͩŌzzqPZ4 #ؙe#Cރ֏`!͡}5(B) Ib 1llLX'lXZ~%X C!dq?(jꓤlWٕ&f&z_oץvR#h@!Q`LDgW1hؖy%yvM iQhWV . ۦ]DTo` 9%fk/eɏVTgJ:>POz䧫vhsI3?4'sܪS^` x- >M5t!i2-gU4Ã-^R6Tm#o}B>';W &Ε%/mu?#^BUB2'O*gQwɶ{QT/Z7!ՠ"S1 H%c0'X^}6q_W%޸k"bqEVB? "@$5׭IVkߐzsQHj`EN s$\ \. 3GofItn5v+9FB'&.LI"Lkb+Z/鉎n"&`3`2wZc NH8)xs(.dqYr4w[&J-ME?"Rxї-obNx `ъ'p'H0&$-* 6ijU~?:B๗#(LP@j5p.|gOtp/ū]~|)efnA!2 @jJ5MKpH=Jb)єFH:4fs,j/MqR s+vҝm!(; »WdPa3U۩A%Zt.d7yo8!G%J'Of{{ B ,0 I/g iSR\1+(ԭȴGF~NQiΓ^A6<N4Fޤ _?a 88-# o'9 YItH0D"PQC*q-e!~*t&{+N>2|I/=5z],FtMcٗf)s`Sk{o6 HR"|u̜ >1@{}@0 [)$UŬ4f&{X߽#|cCfkP+q#S+a @ߎu$ -2[ :ÖȡB~tCM7(pBg;"mAgM:"k]:q>B 4nؒ݉QUr\Ӭijd=ɑRPo]4Rf !X@ bL,r<-nm 5׊L8(~^lꦟUxewo|[n[.كUid\SZvNm SyXd8P$~7,bgB f9Zs|",P?75mt^41ptNӟ.a Ăe%dk[`lx߬N%> endobj 2160 0 obj << /Length1 2742 /Length2 12679 /Length3 0 /Length 14204 /Filter /FlateDecode >> stream xڍT/Lt7CIPR5H ݝ JIIwHJHw#R)|9{kX {3jl3 ޅ )Tprrsrrk]lAAN`N S(M* ( ''S?'AP؃%!N`+k|03/XRہeSkԣ-@bx FakAwwwvS;gv+b P9@_ TL@gƎFд;M׀X:P-d p9JUJ  ?ڿ R6579{`[@UFÅ`joK7u3ۚA # ` M͝.`_)r2$d+>)ZvO;kcqX-,%aevtK#%Y\ܜ#an˼/&` M Ay;.N _?Ѐ@`ۣ%,;=8:^{[CRBJJKIH@<l6.n.//O@FM?EU3o{@K,  T I'/9yR?M/+߀d\mmb3M@jEVY]+b ]q{+v{,.n ANxm3&VA=JۛC,~m/:\\o t=-@5U@XB~5!7z߈! 8E/82!q8~#noP#?O_A=FPC7AkFP:ԻH3qCyvЩu:*`gߊPQ*bfjnlkl/9dKUd pKh-E!Б7_;EߩrC g3f m*/|Ѝ 4>,ښaZ!V`?bC\t BC]Ya` CJBmw|"Z|h%jw3u\ZRjM7zoWyPs 1":غi .@ Bm &^g-oDgk<~^%.N?fZ(w P玳9jC[ Bz^=Nyj wuL:A[= =z)@ sYPț֛*q2wQ. $nۯ$oϹ;nWqmt 9mV|ң Z-6X}q_;+rm)vtp[X7_M1:nd ?o.>Ffh8`GB&F ijns>=LٽM][ ^K'pPyTd0E4}tUȖ#ؗ2چV%c_ 1}UuĝQ. 㞈v4ڎRL?5Αb&Z*r@wWhwJN2)aJnG5D] o >_H)eq0';IC:go_ۥ7Mdnw岊%X؄ݶoPaL ͼG3e"1C"8+*vC,%!a؞8 p͞JϢ?_^>Wj:Uɚ!>ӭ 89"]ʒ9VO#TKDQ Ž>\_+9džn͜&Fnb[NDH6?WB< f`<{x&cFVΦO/C=!vRt-؊NO] $T0vym YcgaA2a㡟y}s$!?Z8[>n4i [᥸7<N9892/$fUO5Ma;ZLc|}Sd>^ϛ~|3ׁNN,̤SbIĀ7?kL7tu\U o/a&P'3*|W&"Ykqk-URAF`%<X5E U@2L>md!R#jšlM?Ӫٛ z)La ?Y5}VH2[10i"\h8Jfp][} MF]u?3U^ӦhZ9UƉYrT/'g%` wc{^\ Ui=kfL?M:1D~$u TqP#Q$)jM&ߣ#`PuǷ D~dRNhQa*JK+KH#1 ~55ڱI/風+Ҟ;m]~x0vhH!*: %=ktSWtfvlEvxhg{2݁pќxj,Ni#\`>E8b 4$1% s(FX>ŵu@qL{`g?FQ̏K{3D W2gyAw90&q"F5Sb_5z|Tb)v?y+|cE>XTx સ6&ДE36{k$|M"@oJDGa_^\IۼXNͺaR8V )l2Q+GLL61srz ]iQ =1%C?,!/׮w&+wl0[Cj\=ԐĀ%GsKo >l)thR|dҗT)ȃ ^8VP\x=jIsJȉBm 9IJ9Yr*8t88AK-s=xsxt<-2LLw̆VCCA~O3( ]!K8:=~ b2QN=zYU*dr}z~A)ѷ(VF]fV:08|#oqڰTj"!Q QLcAalbK xњs|O)y<_q QA TuçÎD`q{`]r'OWEojuspe1aܫrMu 1n1 { >-a,}uӚEbH8<$I c`;FL96u1&dvr?)=SY(NÌ7%"I7hr(8rRyZ kd@իc];u1^?G(8Њ8<I t}q-r:!l*8( -p]ovYtқŰ2Y8g6l}|p' Flh(L`ϐ;,)ٹ#Y*WvJ{PutLYFxӱ XhfKr7\k{cԼܩf7Fw#}>86H]760ꕗ#}ݖ3-\1eBTƁF) 3ڹY(Mx#M*~Rbg"-rԢmѼfdL ŀݚf`Zm՞N r }R&MGؙ7ߔP>l>ClI5g\»OEp%͜| 9j p?ws\! dwH{uZpjcmH" a"ep{&^TePNvo؂aZx-VnX3 RIA3sDBL2S^8 GX\ff(:ď@d'\)d("#˭ceʸ ݼX';AlmT.$)9s*`naOBFqqdq6mDg*sODE*`vP{Pq#2{>ryUۀ}r춉%K72 Dj.}[va&pg s˸BwbM SdsM e5d ^d楲H_׉J8OH!B\tJ0ׯFLnn~R #+p ( z TgxG@raԯ_0^er*eMlv^o鳹 Aoc՜+"P>8>٤wm0dg h\$G~V9M 4Qm?$M8GF_&v_#ʘ/ÊZ*CzL*Va]q.t뉷v~Xyt6> i]ikf-R@Tf3\ttDWTm^ +]&9+cйl}WrEwVzZG Oׄ)L^QBH :%6?_1aE%%cǽ"HXh1&)ާO?qBpj}ؓSߑO69^3ViI1D[ >;:0^R06̇d Qx膸+rD} k+bFGSpQnojqsj} u)7-SӡCqKF,5֯Ms}/_z.ڀ8?n|Q@>ֳu%(Ja,*\jƗJcaXs A)6EHQ륥/Q _x^hhlS]wXuM >\dިcw[P[ԕR4f+Y|4Y)_po^-r!`1քZM=è8W/P8CFeF{j)#/}0Z|!C^5_U"ISF;۝dcy2Pc]):NW(}P)sPYHKjt7 VCUaN=f_)Sv'1$rwR>Ř=V䛣ĺuK9gDrS4 {f|LcYo݈{jc7B NJyW๷yt]M)W=WtI+EK;Bwtiow-d;9 C_mg!]F" TYZ??"؉h¹mٯ=2P.f1%(PT|}yTd+oCC6.QMvn%vEh^43`ҩB}&$Ϫk]Y|A_Vڐ̕v$fp[e؝L7.&}8apqym8kWrh\`-_2fk).HS\3XK !L#j)-/%=IU4¿HrK'}7E=+]1{#4 YF1H߰ΗEIv#{:szqA] d&m6 cFNV&xb w*]z*@3Ib9S+f-pao$b^C%h/Xٷ yTѠk[V`Y &+s~c*+#ozˑcBAꧼ|*X \2W}EЭR^PrfĠHfiCJ+2:q?hRdCU~R[zcNƠZI r1A$Xce_#ji@.DU8ltx5ax"bُߓel戋&i/e܍fzή+W*ed,[Eu5]ԶqiM}W%J&V]M1\f嬡6ʦ]`gĜm`oĦq^4aD*QSG贊YW;c]OWk\mOgqF 9g;vjwC,-5ޢjȏK(kRajdNABmV>|>h2n=r:mVLɣYd(^BRɻL,]=ĪHgM4mظ]~WpNFqV咥6ad"v.~1oy޼xNY s6j)8mgzt=)ASj0J7n)$U¶lϵfm:&$4}RóC!_Icm xfTCgec8IGk`sB RvU[-,^2R&AInl:8QCDZm MAލb}6<;92b0^"VRBHTG 3PһD/7AfL{O}qi<%(%BbUN- 鲻;>KsZZk;j&V\CFVAG⦯³Bt&#]!sB TQbT_ؗbS_SdIginU6]̭,jVSS-TV0Ivr}g/E)_#$=>F48 1c7\ăx(nkQ9: %g]9 nS8vbXI{y[%de!A5:Ko#x:gRȺT'X/ bLTWBfrpIIE^Fs{Q,OA쾄&=N2X6ٙՂ"k!gJmottoS~s1e9dUx$~>+JHmQn!5uUldYƇIMض-C껠B\$zo$׵EYZȏH_Z%/ïuleRkc yKrDi"Й 3#펎Mt/=2AEa{KSWRiFƶp9l+MiVx//N'(=eu;t<[;l[oy͸$ɛ}]EB &<z hRh:y/9uf%`F3wˊᗅ.-K{2VpIGGmAhrh橥 1ޗȏK[4DF3y6XZJ$)k7k?|f&.}ȭnF\^壸ME5.ؓY la,1C/#]}HG\m*;l1IzNR0ZZ*JKBdCiꤺ딻FK#QbQY{l$&9IcwXFI!j7h缌V}\7YoJGqE}*lA&-PPqdofCaHeIA!`CayZE^{%>߽8w9dmMR7b?n? ӏ]z}Y#jZӭRDSU܄ UK,S~Sί$EVdOfm L[uzɤNexJtfVH)Nl`U ۫dF17Y/׊;/9?={)"؄Dԋ8f׀v~,Y/ ڒ\1_kvOp,b*, 9a/@xw"_2.O"=z*.qw&% $[P%is$jN xfJ#. mX 6;E3*#n~p2~& B&3󵾫. F\A@!TB'QWVy -!,L:;M*'sR(9I:?FmC w+{wǮ9rS1Sqϵ,UfDT(0#rl|6Dz$_*ɖFhK뙲2nrF)}v{l@J SzZ\nwXϚ zmaZ2+_'?{i`TېR8jw@FܷM^ |ޫ7^U|#8`&@/`Lw\Fs;A5wQNHw[3QQ骄ogOv אּN(mo]C>->P-OoM6$Q6%JU&XjnPe1³ J:ma~? A0/J펨k/1ȇ>$sG`x¤ȱ3҃;fNA-a T^g0:jZ cw=P&? #ƞf4`k+v?I3ٺ2DZkUR YSs7x'K4dw"^|1e{/㰒~x=w1O]Z]wĈlHkg GҔG!Gh?[nfëN?y=S r َ$,_CEC? :Xw||Wq<e޼cξ M4]6-=I9m^6^D]9aa7ԒxaI.ߖmfD`@BLoXRCr":U}Gg"(_K3ú:נ\ rPj}- ʎFgjV,OUQɕo^`;&:절WРJW;2 jE +dш7:'n~_h;6GǸ5 "Ӆ2L R-}"\Rq΂B⇣e>l{ψ2Eɂ!axJzs\8j^ ҽJg.KY*VT_cP֛O?I&5ʥ^ӫDG ҰM8"9䣴3G;vbv Cй8#^O4$Ӫ Y96o.maL ښr# WL|}nh%IP@URn^%K;s5>TZuY1"Rrkе}c,[k]=:;:/MX.K-ڣȍ)һ']tl\ e_hϋ׼뵺-S=s%~XUQ%8Pnj^MkbM?E[Ziw@ĔJ>uu).U^wG&>)%ȵ݇[zAԒ N[_vcrSg﨔<[•I5\^+Ǜ5m׵4 hW 9S+Ok(ՊbڄaHYNO_1@fj7ڈB]-0ϧŨe%(tq`O"EzBOUdx z~OY ُN_$>"R3R+ q<FYzJ2ҥgш^D$X gqpK u4k?ts +6YgȔN}1/$kx%yQG.aeqYi09ǔvd>N>!6AN6Oix eg.BSqB/ňcސ <^(39%BGwZ35DX砓Z1ėfٹ38[rBh }=8?$+beD(g 8&'`cDGgK׬//6;8 .lkP = ŐFϱt-ث0yɧ\t%G!>% O`<6NwR&b[r_"ec,tyg!;aK4!B>m5\*uJ޴Zu&C9"b%TEk XhylWE(+ʆ4/5$q=khv]NwB37yJT|?} MPczWٸEuMTyaVaw[C xSl48+ #Hd 4=*VURgs04WeR9t oW9_x71caK[!\?cLo ;+wk-$9z.;J;$1dM=7\˶hf a[}۔,*GR]%*KӅncY%Y"S9$zGzC듻;.o hՒDj'eTKZKgy~uF8!`~gJ0:<.Mt[OA+DWlu[uzC}D}fZ/rYO;o#DςR->i(0_⢖KEG>Zm! ̜cjr ̜]mы얥Tãyf7$Vۑ}s_Z46׎ym0Z޹*S 'p6(>4=2 d?m|^nm6J&؜- lj߳>ݐTW:!|˗A+q[.窌#f1ȴKxjTdB7&H=E3ɠ`Il:4ƭDT `#7DO>z#|[g!}m{^2JY$h)z N`Ro(o!Ŋ`Dc T a9,گ iC :N@wa1L4蛏`YŹEzD%jױx#`hMT|y endstream endobj 2161 0 obj << /Type /FontDescriptor /FontName /CBDDUG+CMTT8 /Flags 4 /FontBBox [-5 -232 545 699] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 76 /XHeight 431 /CharSet (/A/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/X/a/ampersand/asterisk/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 2160 0 R >> endobj 2162 0 obj << /Length1 1626 /Length2 7935 /Length3 0 /Length 8769 /Filter /FlateDecode >> stream xڭVeTݖ %8 ŭ  ܭ+^"iqw Cͽw73f-~~9+O4umV8 ԡNVnp'u8H[ b<؅' K +b7͹S|b }NV>Z f<'FKJf2^,b,Yy ~;M>]}fxaWŽ|/N}?J3fdBN@RK^<[b4{BY33vyI95ĩK!42ɕF WLڜ胭NE7nnAvF3فZ\zY}"[sYKYs+$̠5td8l9'YEG)=d6IcOӁcepr./1ėoh47jǐZbLvv8IZQGynA{i8ZXS,MDSpSnnA~7?'}S.cZ[6٦هIgRP9r7qoLAPnK8{)CiuAʙ5[(9$`G aaaN_2\2ɓ~</x)'mjld8DSKw's:a"2uZ pD($Z=7A3V@r0[f38;B?տcZ>x?KdWȊ Pbewc$dfPB:Yی 1kE+B=WDXS՞mF \&~N<^2ƈ1#`,V SRx>Da\ˈL^LѬghIes Lu{r1 O؉5XT+>򾩃OJ;lYq]vŒؚvm~NJy<_$jS + 2$ YTJ*R_lwuz|uVaϢh*xcKgm#{v'Ј[:uuH4fxjj1S_ֲX%@),ÐwSi֔ȅ+}_0!ePm1͘dmwhU ]v|FɁ5J-O\%3'wg)j+r7R!C\{q(:n.W=RRIqe MgU=.qٹT3VYAN kR $ ~miո;Y5>~Vf B-J Ȃ'BrYoY ֣`ݹĚ  *M/ƋDg`&|1!ɫOv*,~YeM1A8^D.sb,'aKl!±MOq>HU[(o$Y3HE&LïTB޺rg/5HjfI4"47!ݪIqX|]݊`!ls秌)H_Hl{!dHRw&Y 9yy6 ; _ơǀOZPT,; EIݳ2tҞmY %z/DOa %i1HT2%X^"M?9JgNG2a d@=(-}. 8΁4hxPk\sh2HDT붓ԣNPEh~v*6$)_)O7rH^bw¼w!D0*/k+!PaRXGڂ}k ؜ U:];S]Y܁ z!; ةwٸil&DwQIq]`dLgACYǻFWL dĶQZ|/]%䨫\#%?fl*b$P LVVb(P/ \dS9S#&*WWB6͘D./ EtEرq)s, o-Y}*[Yw .ϣCmNsh~(dJ,;ȴ"KXM _?6sG%Y3^`"Dzp(=a+Դȭ]]|ja<4);vO7)jJv:<yMy/tnsCt11wgZ΂痍됫oV8(X%sq/u"띆Y}GMLhRRm&k%kRj'R 9b z1W 8] k֞ Yx,\[7vj28(-2Ԇ[cy^Xo_~ʒlU+&ηڭ\%'e K? ح57^fycRmxu$dnfDUoD>4z)UF%R%74Zх,ikE_(b inYf$>&E${V;ZAO*Zψb3Gt_VŭϷޚ^Ak[FՋUfrR\BsEѕ wϗ$3=(,d6:KU\3k㇐<DuMi{_4_1NoG놘:[9#`}:г,"hxxǭ,raO:)G7*}l։8F|Aq3݁,W^@1A #),e^YQI-XU'@mɥMqP b+ !fU "?@Ok*uѲ?{E\QsFrx9=&>D&eU<1cvd\}q:/{|3cxK J*mԅSG `q+;=nX>yL!-Ԍ^ƙRrp?p-/Zͬ&LtC2UP |40$:' gKQVbӵb R+mf4Bm?w*uvXD< /֒ܔ߫="V8*?g迎2`hx1&0U2/G`ÌD/#6zf,3HTZr.?"-Z8\„Wp%)3  Ҟd3u_["gN fouGBPfwQ5Oj$mQGOO&)ޠ9I'YQFسR?{6|Q8ޕ"5UQ?J(& 7?>j͟"I0z|u4qTHXέWPcp\lW BԌ]V{qeLxCh,֩oT]v;iC 2 &-يN/ l5Ƀm({ϫp\3M($Fv_F4_eVz˗Rrp.׻d*ҫ٩1sQE#"*X2>Vo2ͲZ%P]j+7?nf:uu7_Ktrf`l{rYKՈ7{j- ŎNC$CMS=躰|m[IjyG٬2ei: oɇ+* J)TjjT:pa<*.j&vQŽVn]E䳰x1VRւ=`;6|T} &DfI\u';λq&nĤ-i|d~:3Oe.ti BCuS;77o^=&9C %/hEm]N0ܤ9㮩q mfϷԅ]b^X)h"ha,fD嶜9E2|5AaFk2ėe#3 ^78ZI/MYIQsNkRЌ|.o0=yu9;_G#,! Ѩ t}aKF.$V3s遖00㺜_Q5ۚU,%T-D)NS9pq.:'Jph_\u7GYjIG:_J nAyL?qB:I#dg"o NF"+`.]0@ 6؊M3_֑ ~D16M=(pZƲPp? g4 ;TOg`lH0ՒOI4? ONQ&[~a:$!S#"dzb9<`L,Ġ"ƥ ( 9j~{ kLH#q+fVT,^!K+~=Qq0FϹ)un%ǭoWarX5`-sn~NRX$E݈|.Qfq|sx9>$s&<6$mCo=Eo ʳ;'{I쭫'Qʶ' _O)2ehM"wIt8pUr>BMQ?Uf2^e24uU&9E}}nҧN~/}s@̩% <:pJ{'ZAuHj-@O͸2t49'ZĄ&#w *tC4sKgJ8`O#9/0xDgeTΚS+^&YIܘ;j5t$Z )wd7"Qk?j4z+وU/ȊˍN'I]zs*5ӴwS% yW}9bp^Q SF#!Mg^Io.eM{:~z^v>6l9ҝ\ε٠["l9dbg-y] 5N!ه]L[ʹ-'_}'.3ӫO狾cYYZ$'Y j_r㟪*S#}Hi' V?5H̔(& Z{1x=]=ts,gW'偃æ1[yWٶaYV Q;qc/ (*Xָ:y$5"{ #1c/CEkm\8S endstream endobj 2163 0 obj << /Type /FontDescriptor /FontName /KADGFK+NimbusRomNo9L-Medi /Flags 4 /FontBBox [-168 -341 1000 960] /Ascent 690 /CapHeight 690 /Descent -209 /ItalicAngle 0 /StemV 140 /XHeight 461 /CharSet (/I/S/a/d/e/endash/f/i/l/m/n/o/p/r/s/t/u/w/y/z) /FontFile 2162 0 R >> endobj 2164 0 obj << /Length1 1630 /Length2 18504 /Length3 0 /Length 19346 /Filter /FlateDecode >> stream xڬctf]&vضm۶mۮNUl۶ӧt{&k&#RT2u06wwcg[(;;p)Y`D͌\E\͸fQ333 lea TS֠O?&ct}q7up3w bfp4[ٚD%j 3{3g#[ @Ō ` ``ojOi.\FG3nf&fhfvV..V. g#{׿=puXٛغ_ÿrtvkaWL7t4r'_5?%KjO,c3f@ p60r65sq gz#GG[y;`bfkN7V0 ̊rS7й9A $Lmf0 C(X#[#r\_lmw 13Y?cdgefN&j-BagET`ndgٛ9Zٛ_m112?$[efo_+K׿gPUאפ,*WU/ǿjLaaO;'3&俀,gl [7#ӿ ?jdow_Vͽ ڲ OuFvk=fN/p&ՒZ]*Ï0isCi^ [4B7;`G{Je],P7T$EhO&运P/ȓO(FzCaz:?4|sT/i"'yx/>2e^X| 0 .x\G1$̨J7ZXe_lΰ^劳=nY )aBV\O4TgDTR`m GL,G T1А{H7gJ#QPP:" M5N`$mCrʺz~x R %7rv]3!wT>ٽ}~[ 1`Ùf=(a-+rh8TOE㺡fZS*ܜNhl +>Za8|g BP=t&t#K;KǼ0Z$xu/@cjRD=$c1={) 7g[oO*0\cS;DFZeͨI-F0oi |wOU' 3Y2X_ S*͡R\6;$r0u'wG4"E! E@+׃&(UK 1*x42Ah޾ i?X{S]Aͫ5=^]5 4Rb_= 8.^ޙl=nq~Ej|BVo.'=F%Ù)f6ªͶTȖ'KLUPso)J5G\Pw$Q(F6n/OGNzZ 폟e4 䈕ΪXT;%9~lSU5jL{ocBTA eSX|9e|#P}w:;4fQ0Ni0{c7i sBϕ0W}uep^Y}> bP`&5GF/٨P?q7⁂VJ0J^ÚMK Jak}~L,xA-&>/f~,jv_!R|GD$0ij荷WÒG']t'/%ت1]hT|3H}Wݶ0C.rѮGHZF WOWZ(և3AਝÂOnuQ-'7/;{ro#{^)"9 O(T؅tXeD?Cvb̆20d5 ΪudOO52~j(KFx^t~ߔA PG;u}L-•/FPɤ2($"FJ֡'mK@!a5_0 \f}ۦF::ӟ]8QT)$%0 2G#f%0.M͇eYr]DK \YslGL2$ 2Rt+FI#҈ιXY _6#UX/1\jZUu{^t5=T$cA >P]\d$V";# 3 ۹¤˳(d&k) R("oQ_,x_ȷ9b}F,]Rrڣ&)o0m|!4I;#29C]o$7:.OԑӰ}֊-U42LF$/;ѢT5O3~^꣔IvTq+{^HjhM߼souJ<&!U:L{ua|9¨S?ǎw"컁;.hvMgSdt_"ҔkjW&cI `)bTRYCguUXJmv|K BSPju6WH i,M2 Nf"g[6\V6XC/[EbHc#^eᄭM)u0׊j-`^:T$uIO;ʬ0)(° ^;[7u hvd'tz4!+ \P!lTC\قy ʸ-8\%g#G?P3]R%u>=ƜJ~f3k_+iZhŅg<]ݬlx)[w90~3$S ظwujYKk4>QŔ .R=IwĂڰ.X:X~'׻[K_ U-@i8~W-҃,ZLZjI$.hߙ{ڗlOTg"XC]_M.=d[Zg|j]~:FJy)2R-;F8_,.O(xxJ!cd wc}AHNj;W_|M8^sZ|2U ~G\WYN{9 9v[ EZk $8mF< Q RB*{);-IHZG겉UNX}Ien-S3:DMrcYuK2jXAJPuMΒ1ANăְ}|n<7w[a_VlތDm״VOлŹW?Gd=KpCil E.6yX{KsK趮Pa8 x%K0"ql u0nQ( qNHXtV1wLhXw/bӿ&4 ^6qPg:}n?51+*΂ 'UJor}I`wjP8B?|i1w7T*)opVծ8di AxyKWY_ X地Dػ˷%Cl? byIH# u;㩲Bg!*о Z^' ^hȽlnJ|/j/Y/Uls`^f?b>V6EyJM.b`` ef4uLu-=Rj_/K'0(0|*XY/NyJjӶ+?ȄY;@~)7i 97cFFۘοhNmim+5R6ʰf$.JxNCpFlժ!Ǯ&K˟Lr&:DrE(cɧ}>K'ܕ/7]a@=Gkt];mȏS<͢*lVv@=tyŢZXBGZS /eOof8}ZQrUcW(7$܇eKo"N8SOGϡxě4aOD8<NZd'eH-"{>w6}k_Hb۩E pg5i``^/ r)f4(bWDݟW?e])kET{EZ莞&hmL`5VL=fU0w濂h1Npyy2Yh@Yz5$_Q٤ceWi5m0}ΣȻ S4aRMrMB H%b1f+QIJD7,seTKyvFfBۍqI߆=7uW9]>3|ݼ}:S;ecWmJee^ADZOVKP wxġ(."ܞm8 ͒{XEܯA~邿N{…?+ḧ́.ǻحN=:W%c.4 ^*CvDo$ :5ĵ5kݜTk1л nX8z]X2_}K0fjAބ3i%}Sh<{kOa4{XBM-9i'a]‰Y?W>u}Y~ԊV[T<}{˓OَQ*`? .ەzZ X2͕AN~bh Sn{Y ٝ*2r%^&顏 2>|X0 x4 hjf*.2L`ݪgHG# pYR{}J$(IEktm@O 9#JnrpS]ܒ][Y]u2TvKR-dc4f} rs^:I?yܶ`GG{`w0)h\ê~ ]"/?:Z񣳝9[j Fvmahb|mfzZ->nrF /m$]|ft'0"[v \yǔG;MmϙK<^T8#G{S^)T[VN>xW{ܤ 6>?UzB gP 1rʧud;`)SK˨w3$iⷑHM/R QSQM\1Tq[,WDFSuEyћ ݱĕ]Nw6VT[KLgں{$jujĔ N@QnGٍan`ijڐc"JrLv%\3+4^wYj|_ZOxtw(TxJ(vrnێ^Q:/τ??w|1ˉ4!BwՀhdxVBh8VFs+#/g*. ix_@ea${p6)V8$V0LБ*Ykb vgcic7)gÖW1e|eͣCݠiGgǰ}돴8v6X ]Fք l<0io\Pfv)m0dO~D]JJOTiBri"}Y1J{J _~Cvv 횭$'(ʟZMR{q[3a d4 YT&C{V=h1b&ĝO@8<WN_IϵLg8M 4;bS;=K&sKڔƲ%1胲 Db8vjy/kt'֨I #;0`Н P+)neS>HH`/0$N]Si1mu/):]@ZMx |l^`xFFh72VNxfh]ᆨgZ^񐫞~[V' 㰙}z jsd}Oepd')p:s~l L ܚ&\[܈TAnP=LF{-n0goVB;f@ aXA?b vn>i&Io=i[ÖYc(Es#,qB 'shm]#46B.a;GyCqȯOއ#r'sm'y-݆%+sŃ2_n8[_Hzfp <2 ͚N[-6dhcxEcUWZB[^eZ@c.R5wKN urw蹠4j^b5z-D SE>oX,2V]Dw Q62!k "iI"ovhS>a(监_O@Tg3!u ڜ 70o _}Cy$m R:j# 6^ӒՉkMh8¼ƒV`qT LdF"IN>Y& ~&q4v+-rT7>H*kك|nKgO7oݿj#9~{Q(%,CG\j;!S5BKUsč9V9t<\d乀IQFW 'Cst;>FLMW[ ՝#WT%G S`R9JQa 57+,l's:ETN1ʼnϘdx71qT4mAOMlk/+Wr9+(XcJ[>jf0(kiBp@CJFv1b$ck931/Oޫ!?kw}|J9!f6"=fb7IEGE,'© wseh[ Aݮ(Ë]GWqj&UHOːsiZ36oaBa5e_܎8Dajq:at 3I-Nt!ݜ哞G:׽^6Tz Wљ]"ŏԚWٱCYdn5-J_Uw瑩b'p1I wA}3 9 鲣58<56Sl^7p y =GV\Wܻ& -*Yg㱟%o C˝Ot&t?Йk-u "7;4\<PE6?0+IGkgz5U2xycM_O)PϒC?//N_foP0x7M5.. To.9P¬DUF,ub@]wH(Œ-!{y{G_-KeՊ Z6%utv 励Amu*j]h ]UdOtǝX)Vpxc_*#Ya9RJd!y1oCq20MFr=zOo~G@= 4,s[HȶT,FdX+gVSj=s oouh~R\;X5;zB`PZh;L{̺GP-T/* Q|+R%x -G⥃jn-~"k8-tCKUB؜Ml740vZ.c=j;O[r¨J!ʳ?՚ l_?dkW1 }OՅ6';Z=.m̩_|a hbJӜyj#X=rJa*^z52<3:m)s g0Eq66)]k!46O‰NSyBSA/,"[vþ˴i >{-L~<ږxbGWWοP#=<3/Np?:az İ#Ӵ+0 wkcXbw·F]s jJ@ :~hnȂ8,%ieKn ;?66L!Vf Nd.JtRKwn(钰hwn{b-IRQp[r`C4XzҔۊQNO=WB; +{6w[7,svUL iʴNl+- ĭeg 1r'ʱ MǠX_4lcC7ģ9s'ԋn}e%i㜡w7ZOcGTo~#"*M|ěY)CD@QxoZ$͊-W$٥摒ۃ+R?gƢx 6VƬY(M^j>ZAel F\7nӦe:# u4g}`imnXݐdv?wm.aYę.TܒAqH%(Zicu_u@빙,:ٮ<~d=#ZB(gÕ{IUD`y^aP>Y HJhqe,=ٖYt/t`(Ҷc /@ J[\ʔgLXe#yV.U=6?jDdJ{I-*( ͣV,Bx%ST$Xʂ]( -)6h~@ؒduS_84\FR&)T0Ns,FSM"}S#D̯S^sAc[0SbYIޯ S.xkGm)u%`dD!wٛ;H {+XSx~@j?>=Jf[j$c;-E*co`!ȓC0#n3aPy޴ͣJo&,ɋ^uMK[M/[7.)J7yrjfp%Qk6%@5|V)) ѠѦ۳P"ĝ lzbMrZ œd3i+'3y,H{L+n;I1YF- B̶\=8婯 ḭVWUms|͟ .Ve8SnA~6WSKC5{=i[6:w#G$: b1ۡ[wM$Aw z΃I(az.L֍b@*{|,_҂l2Tuòp,_ϟP*ѳ47yC.b*tE] n(^ZP*NFeSx!"iDa~ ms .̛A0QF{U'_|'qa)!YL̦$ׅfiAY~7siܽTTt)5l6*H;Wxh _^{ <Y~E@hsR6Ү/hԍ1fM Ejg{Ok>:X,oh o/ g덧i+!rK!E|ےhdJ]+q9=J- [Mm}3gm8FCGҴb!gI']5|~p2>;Ҋ}|_aRӛIƮ`Ⱥ4|wC#!E!zɭ_o,#W+\>UTizX'DLF sB̞qI{s&Wx ,5kZcP nW~%,B(CXB?sݺ55?,M]̽V\Ƚ*Z[l8"z)Ro7ڏP&@c1Hh/ (^RxGL5|{d֥s倡$Ltp[(kև3Ӓ ɇcq`rO:ڣ\]t+ZAC^IWyh~{N.3B,ItAr @&͎%CӓiY3=Wd#l1ccpHbS :H< UIrt ڙsZxv0 DT0>rw!rhvxze ppGN>tBtwܪ qIHqqj0DGQ`Q8>sﯨ/7#~(yRVW\YgGcV}郥7u{cE~Bnli2bC O"oyYu7MXIELCq= 4{)ܱ O{j rDE1;4nSHzOT5ePU+]FG~, E_>u4u8 );X髓w{_~02sV6b>0)=GpýI۫h3!OCbGz-NVTմ] ݱ}.]?L%a O;9wpMu3$\od M*?q(F@]Y0ʓ'=Fwl@fMf{c`UbMf|JX#".Q*R(W|\4pson夶!|AA/j¤QoJ+6Y)-laz1 ;dþV8%.Zgm=DJ &]NX\;Ι){m``TO~T]n9;HUm1P`h-Ey4+*(d͔f@AsbzPL`{SE^͏{=#b~O9VE߅|)vX3_WN"y(X.ޣTRj08<F+ xvdngԀχAX#v$<ֲbF$-c%sҎgQWQUǚWJܒf2_L{H[d.\ӂ `M{)hֽu}-~[,i}ɴ(+\%} +8^OW}Bx쎍=;B̗ ' "bԙr67! HP ɖGY2NU p cnGd<2!kч "y,^KN$ʫ{?x(|y^}7@'Y%0+Oe{bIMWR&MA&!iUWd hVh9$+JgH߇Q@"5;-0(Y&%JA!ZEk8{jQuνzL$+_-F644;N%k>)V} he$H!A|8 Co_5{?!3=9e@yDʢ,sVIRyp%.;@6MKǴd=w+[LǛZ$ lpx:J)w:v q %XcԆKY9Lj}ڦL5VTBNaֺ&bb9i^|-/3sQFMRFJ7 R|votI.REknOx`wQhT߮LԠ.qWB?d")sY_ q'%tgM".j} SMЪ'aL"މD?:}ىTYn!cZ}\/Ǽ-_`;>U0i؎p`DFEvdS p&)>D ۚf#ȩϰ[r _C{djQ~KƪNt& v-Z]ޙd۟G<Κ P eBwAKUͬkMrP!f''!;D8QG?Cw?T70!o?B&%cwOgχ @~=FkXyVs~ >ХOQ t>'=Sۖ2gOVn!\L q@WPÔ1At]2&<.&t_M"mOca ZJkR@ޱ?G2}K|aƻ_ciNqڄ {+$lxy4ٌqQTʐ-Yx9ٚa)Sst5~!SHI=f]Ϥ͐|3$b=9GKnQN@o;jmJ/U1f "-goJl4=3TS* u ԙ9A<‹{Yiae #f,E(&Y΄\6 *t'cGw%X\TEZ]#1/{o˯?"d>7iF\"~Zw&* V[BX;ZwB̀xP=+'Ct_{1mD@cR~ƹc<È,EwϡuEݝ^.GJG],Wj_O4`~<)ko8>[t-H2$gGzibAqT:cߢN1s։3.a1ęº+ME14 tscF^4{9\v+-T~,nrgqAEX4i}x#z{9?JyCQZTX֭JSrj^$/չW-ՈV wxLg;%%U#ڔy S"ic#Ȗq@QwJVNEMz4'chUdxnb'=>%}!Y8y3df#3^"+7nf݁Js @z YʗƨbA}E% 罄KxIi iq[q[J\|U D<2kSҏz"K Wj9| <ϡ՘2儊^nj` VA$ ۾ǒQHGވֹOr GW9PһE K&'Cǟf CIkz^OP&̏}`u.QkGKTzԔR m%pXVI@rO"q n(#XŸ$[jޝ/ukC ws`MjoŠpBb endstream endobj 2165 0 obj << /Type /FontDescriptor /FontName /OLVWNX+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/asterisk/b/bracketleft/bracketright/c/colon/comma/d/dieresis/e/eight/endash/equal/exclam/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quotedblleft/quotedblright/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 2164 0 R >> endobj 2166 0 obj << /Length1 1647 /Length2 12715 /Length3 0 /Length 13550 /Filter /FlateDecode >> stream xڭveXݒ-w`A!@x܂]ww{ܙ?3}wڵjMM,jjg bg ffga(lTlU`#k;ƍDM-4l%@~ 4ppv s 0N]E_{:m4.@k;{- @WTҒVI*$@"A&9 H0sXc05U;d4LAL{ r;قlٚX;wؼcdJvN`'G=UI?[zvf;ML*ol`X@)=;#4@ʀ 47r4:9Ӽsu:Todoo߻# hmƂdWHۚa7u't$Ll@3$V;{HOe=$_Esߩ8[[+ټ7? }g @װ6r5p@& rd9GQ[wٹYa9}M@` mW5:Zl"}NllYLlRkx X%$if7,sx29x/uOMacaccko4mML#U{/]{\} @7 ✝ˤdp%^f߈NW;t_}AZ^o]OR:_sEKk˶ @5m{4؋3sq;~jFٌ6םeg8NG;z_J_l[{4o(*shbni{z/`;35&.ȮX/Δ~IvUSt-WcbN5lg}B o~_*)#M/1nوWeSZ]4}ojP}aL9v40hDLz+\C>˞h e6z).gp u_*|('љǎb*fsK,/=-xT۰{K!_5חH_e,L@f2<+_hDFo bt=?WN\'f;od\RW3>? WLl H"DpYib0o;N>(CԜ'~Jvoc4i: 7QC3 )NZYUiHSQpy[D!u vg^wBKtw x]ϳ|!u]jyXg:Յg-Ͱj`IN{u/jyaM2yhYd;6endu8T93|,wY V.@Zul|:L۽yGBk)D켶9mY+RF$nE4ݢmO\́H)|9~O#<tzIJtMsGGrz*}u:]s^-ʜDLW} dɩqO3%%v^J:r> ي[ ]*xz9`oC@@bă*p `ca&5Ic;#2/*q0)O"-$Ҡ$(W5y`^C7Q *wn9aBSqӑ#4mw]u AyNÝ pU J mp]3gIO ~YɝcVfKHNOls42UA,`ce[8-3 kdTss,טV8V,#y EWQ3NXpagͪp6*nE.X<+wr'R$g5Jkۀ@(<7T/ 4nB'Kf3\[Ne :Zr%ׇ.5agﳷGzgةeE$QRӐ=lzG[W1]~;C@3c&j-Z!&%[w!!OvCvΆ<64$Bv5: *Q3^]$eG)ѕzdG0 \3X#$9˜ 7o\'k-TBĐ $/?I~-XC[o_fħN`ZV3S *#$'ҐC~K>)WII*1N[55nYa~UD͑H'uV+&{lg_sd dԈPȅ^Z^Azyܡ\njko&:w;4F M(02Q̆Q<Itv.ZG8Ӈ".q^CqNk$*Hϫ=|Ejolpy8ϳDo~/J<XLW\uS$=oNC=j7ڶhN5r?p8Y6>ڻu;롼E#t;bGOKo.K{A}~(ȿ'v=OOHnӍa(xT:˽0~Oih;M 󞐄35Vt`)7 ^Ɇi hfz֜UKЫ}?|ڧE|T@Śxr%j!0\[}p&srmXK;>4w_Qc,3REOwwiLX^ sOpټB|>]0 gjXk=g` 3haK?ץȋBn('fqԯS=]˯m(-[Myh%SƆו= I;T{iqSUlٟi3VsbWԕE%*~ aLcK:; ǁU`]ftv~R#tP<@$.).,&+LD&g,ܒDFN#s-}`TlK|uj0y63WrmmWW 7ٮo*ZrT;c:-֠Dyis#"c[ii?OkD08MCO *C55ȭ\ͼOYTmVu*SqsH#CM&/z>yl6L4Iűgc!#=}Pfj`g#/'s|8iDϺHq&9dV &_/W\>8- Et@IMa.bYy[hs=K7sNX(02tѯP#/?~\s1|%7OR|3M`!>-TT!v-4 ;v\l 3A灆k=cVK iwیa)t^yБz&"?ʩ]<,Me+J單4yi!#4`s% A|=J njv텳wVIq;wHfRH(F ˁb^6N޸Q!.+n'SEYSqpY歪uNtY>ʜe =/eMG˖X;$1zZ:LjɣՑ&5d; @i 42QFEmgNT9Tp5/LJZl_Z֑Zx8}Ȉ!NDp/D'S)tߌL7*"|bU) DE] ҭ6ZfZ,K15:ަ?0)*&5t1Y!Խr`?{D/u񅌳P4.KlpFQ.WJb5cˠ4HdӘG\sXE~ʽʵnjU uكeÉ7MKMKI)XŰ:c5 5jL~8:#7Zӳ!~ B߼mKLJ}Ri0( sT~\fO_TWm?_K1QW\4ei3GG[/:G m &A=p|%lᚩ1ZyZE}6CwΞo+|}YZݾe=IzPf}ի2/qe&V!DodL+cù|LD=~=(qzrFV;ˋ㣁%u dvfA-Rs@v-^R^R` nDvX.4QeD˩>ߪ׋-~&uģϷ@av_Դ= 8[X[;G8C4Z)ylol̘5gZRmD݆wN8@f/}\6y,sdgakk,YƸ)e2#q?g~ŦBuulHq^S׵%(EdEby|u!rY?;KE#vWabޫ.X3qc[#g "2#vL{2*.ckp8_iNpZWfn8Ey]ݤ_30R^u?m(Ă$DՎ |ꨏx1FQ0Ǿ͜8jxܔN@i!,ۥ)mv)%_338~r+ofH]x܋]e?9Kux.'kv*} o\OICĶ=0-HsPpVlǟY ~s\BQIǮ_N0ƀ7[BǼFOsʜc;A^y` 1+!s\8G!CS2UTI b|S->_*S!?S_wu9tKԂT/FDKc|ː j}!N hfm/7'ʯA5DVX'Co^?Y >_-oQ5Q+ &ڎ1/5IVjj ZPhkSRm2'95<j(3p漢LO0]wTn PϽ>!-{T.t:Q6o^)m?a*|R;7RI + NHp CUU߄%v ڧhYAch1坂oW.CfI!쩼xwӗuhnqVE`uK.&d:gE=OQbu. IUw%WeՋWG;'C(z׏!+Nǂ|qm-Qvi'%21` a'|O}R״% j'lTV> Pʕĝ ."mnެe=(^+@͙ xR&/?5c/ <.j#.i=~ QFH1Eמ6c'Ev#?4u#[_@r~Vo&Wn 'L=f5_ U.׸C;.ٕ4Rƾ|$&ՠ"}V#Ĵ tng1h9>z]AqB*W2%pig]uhB& $yQ9.v<~}lqD0ʃ@gbU C!ItI"nUTjŌ!0I՚&B]λ) (SOXh᱀xJHwq\Sv/uL`UZ_?71}\h9m7Xi0IHcNBwyC2NZ^mH%$[}ڷۇjI5K!_D[>T,+ at.\A):MVoDy` cTO&*hzJ~q'|AKKr>DE&hQ)#ݾ@u_ޯ4fvd}z;dc5]d#O~E΃.*;Mbj3RJ_̂%S&LHYԄ|{@ k/,0Kcg=a{[ox׉T,_93`ڮm}h%{j[GDo3X ZڈHv[SYd?U/MWյc娒ʆu$~G8Sy?_p4W ѻi/V i*(jy`o׊"hƨ= t`m*Ξ Jo28Gx͔u Ů0Т;%gG@[䱮;B! MuPk[n榘dZ0NƊrq<vZq(Cڰ- IWjYs찕+{{~b3-F&|7Hw `,G:˔Xf.C%+ݗ[VmC]4_b J-?vײA1%$9e^/@=P\ݯH-C ؗ!Y-X (#>7уYUp<>y "O@^-|k?ٍ@1Ya5aP)yf,5x.oi7#yiR0 ǏsGZ<U i=9~_KQc;To+-wB*G,0я0cxQlmsϥKt"劒 go)0}(ϞA'EBǩPspnҗ@v1gƑ%p{9Jf<@ЈA4UL^Qk_к$t⚶Xg- }C}!Q~B9{(?>'=BOA$I@] g4v+ek*ˬsjT03X'UYW2mJ[-Yrl! NP 4a>kvQExYYYvF>mkoy/l^]~H<hgՂ( c`73 ke]RE;%|Xm]]L4[N6g{ATvy% t!rN ߋО>ze$DI\$IQA9mfn"PƷq'ӂFi37\\hP)$뼷iVEa H4UH"]ԤÖ?-X:KՠmvfFGY[¯Nur3>NgU_kW$=ED1,Xœm>wL:88=3r}(nNxuQ[W$.B9RyvںQsc8V?yV'~nr/ '[* ӶmE` oҜc"􃰿“z@#81Uj(vi@"fB6>ŃZV` '٥YpE6vhepegW3;Q0b^zi(ޫ™fpdANqGu~IC'ήuH.H٬j"܌H^D@UVmWl!MCS'H> C_KR Kb;kXC#;u0>F鱭v|s$7"]+w7UN]Vcuͦ81 LeԐ3[q) Pj}4zV)PuʖW%M#AR( x ŧztYK%<)/{U6щ?XΉo 0097 ŖT) cWp`_`tP)h]'2'aCC}8&D,/FV'&k0ПUYMh,aN2@CytHEV&`nH)c7.aC? .ŝ!2zW%v\,0uzosk]s,r<7,>oD:JXg YSHGi\9ɸIų]wmd)M*)qG1oH=2{.>*0{eShn-쓰l;zI j,EȞmq,K-N$hj.Q^-8r+\m@Ĩ,SzAW>jՖsېݒj\`)+#3DM!R{SmXƺ o_mUgQD:HGf A].Ł7aضgFĺu1+ Ws_n=D+hgan={c>-iDaڊUH!d#XdwmʛRlʷ0^gb^(3β|^V/~~ž$نIod2V?ˆa.4u6!_!,hU-_iܝEϟJ6ouX\#'3gnNe9A67Vz oA XqqW?^E <aXSbjr]2<& U^1^R{I9]Rٕzǯ#ਫ਼\[!0="Xh]GMJmx sVs<=+*4Ep^^BYb?% ,%3Y\QгTK&UkCfns 8Y6rg'n{.k `$9Z%: aI4TB4{"=QKXC6!T4_~)-é\[<8o wʲg]AmP4At7fjmg endstream endobj 2167 0 obj << /Type /FontDescriptor /FontName /IUDGTB+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 668 /CapHeight 668 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/A/B/C/D/E/F/G/H/I/L/N/P/R/S/T/U/a/b/c/colon/d/e/f/fi/g/h/hyphen/i/k/l/m/n/o/p/period/q/r/s/slash/t/u/v/w/x/y) /FontFile 2166 0 R >> endobj 2146 0 obj << /Type /Encoding /Differences [2/fi/fl 33/exclam 39/quoteright/parenleft/parenright/asterisk 44/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 61/equal 63/question 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y 91/bracketleft 93/bracketright 96/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 147/quotedblleft/quotedblright 150/endash 168/dieresis] >> endobj 1814 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OLFVEJ+CMMI10 /FontDescriptor 2153 0 R /FirstChar 58 /LastChar 62 /Widths 2110 0 R >> endobj 548 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BAZNKF+CMSSBX10 /FontDescriptor 2155 0 R /FirstChar 12 /LastChar 121 /Widths 2150 0 R >> endobj 845 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NPVDWK+CMSY10 /FontDescriptor 2157 0 R /FirstChar 15 /LastChar 110 /Widths 2111 0 R >> endobj 592 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CAFNXC+CMTT10 /FontDescriptor 2159 0 R /FirstChar 35 /LastChar 124 /Widths 2148 0 R >> endobj 761 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CBDDUG+CMTT8 /FontDescriptor 2161 0 R /FirstChar 33 /LastChar 125 /Widths 2145 0 R >> endobj 547 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KADGFK+NimbusRomNo9L-Medi /FontDescriptor 2163 0 R /FirstChar 73 /LastChar 150 /Widths 2151 0 R /Encoding 2146 0 R >> endobj 549 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OLVWNX+NimbusRomNo9L-Regu /FontDescriptor 2165 0 R /FirstChar 2 /LastChar 168 /Widths 2149 0 R /Encoding 2146 0 R >> endobj 593 0 obj << /Type /Font /Subtype /Type1 /BaseFont /IUDGTB+NimbusRomNo9L-ReguItal /FontDescriptor 2167 0 R /FirstChar 2 /LastChar 121 /Widths 2147 0 R /Encoding 2146 0 R >> endobj 550 0 obj << /Type /Pages /Count 6 /Parent 2168 0 R /Kids [542 0 R 588 0 R 639 0 R 687 0 R 702 0 R 713 0 R] >> endobj 725 0 obj << /Type /Pages /Count 6 /Parent 2168 0 R /Kids [722 0 R 729 0 R 755 0 R 797 0 R 829 0 R 842 0 R] >> endobj 863 0 obj << /Type /Pages /Count 6 /Parent 2168 0 R /Kids [851 0 R 870 0 R 897 0 R 903 0 R 910 0 R 955 0 R] >> endobj 1013 0 obj << /Type /Pages /Count 6 /Parent 2168 0 R /Kids [973 0 R 1015 0 R 1074 0 R 1135 0 R 1198 0 R 1241 0 R] >> endobj 1366 0 obj << /Type /Pages /Count 6 /Parent 2168 0 R /Kids [1307 0 R 1368 0 R 1429 0 R 1490 0 R 1531 0 R 1563 0 R] >> endobj 1597 0 obj << /Type /Pages /Count 6 /Parent 2168 0 R /Kids [1594 0 R 1624 0 R 1642 0 R 1646 0 R 1652 0 R 1656 0 R] >> endobj 1665 0 obj << /Type /Pages /Count 6 /Parent 2169 0 R /Kids [1660 0 R 1667 0 R 1671 0 R 1675 0 R 1681 0 R 1685 0 R] >> endobj 1694 0 obj << /Type /Pages /Count 6 /Parent 2169 0 R /Kids [1690 0 R 1696 0 R 1703 0 R 1709 0 R 1715 0 R 1721 0 R] >> endobj 1732 0 obj << /Type /Pages /Count 6 /Parent 2169 0 R /Kids [1728 0 R 1734 0 R 1739 0 R 1744 0 R 1748 0 R 1752 0 R] >> endobj 1760 0 obj << /Type /Pages /Count 6 /Parent 2169 0 R /Kids [1757 0 R 1762 0 R 1767 0 R 1771 0 R 1775 0 R 1780 0 R] >> endobj 1788 0 obj << /Type /Pages /Count 6 /Parent 2169 0 R /Kids [1784 0 R 1790 0 R 1795 0 R 1801 0 R 1805 0 R 1810 0 R] >> endobj 1819 0 obj << /Type /Pages /Count 6 /Parent 2169 0 R /Kids [1816 0 R 1821 0 R 1825 0 R 1829 0 R 1835 0 R 1840 0 R] >> endobj 1850 0 obj << /Type /Pages /Count 6 /Parent 2170 0 R /Kids [1845 0 R 1852 0 R 1858 0 R 1862 0 R 1867 0 R 1871 0 R] >> endobj 1879 0 obj << /Type /Pages /Count 6 /Parent 2170 0 R /Kids [1875 0 R 1881 0 R 1887 0 R 1893 0 R 1898 0 R 1902 0 R] >> endobj 1910 0 obj << /Type /Pages /Count 6 /Parent 2170 0 R /Kids [1907 0 R 1912 0 R 1916 0 R 1923 0 R 1928 0 R 1933 0 R] >> endobj 1941 0 obj << /Type /Pages /Count 6 /Parent 2170 0 R /Kids [1938 0 R 1943 0 R 1947 0 R 1951 0 R 1956 0 R 1960 0 R] >> endobj 1970 0 obj << /Type /Pages /Count 6 /Parent 2170 0 R /Kids [1966 0 R 1972 0 R 1977 0 R 1983 0 R 1988 0 R 1993 0 R] >> endobj 2004 0 obj << /Type /Pages /Count 6 /Parent 2170 0 R /Kids [1998 0 R 2006 0 R 2011 0 R 2016 0 R 2021 0 R 2027 0 R] >> endobj 2035 0 obj << /Type /Pages /Count 6 /Parent 2171 0 R /Kids [2031 0 R 2037 0 R 2043 0 R 2048 0 R 2053 0 R 2057 0 R] >> endobj 2068 0 obj << /Type /Pages /Count 6 /Parent 2171 0 R /Kids [2064 0 R 2070 0 R 2074 0 R 2078 0 R 2082 0 R 2086 0 R] >> endobj 2093 0 obj << /Type /Pages /Count 5 /Parent 2171 0 R /Kids [2090 0 R 2095 0 R 2099 0 R 2103 0 R 2107 0 R] >> endobj 2168 0 obj << /Type /Pages /Count 36 /Parent 2172 0 R /Kids [550 0 R 725 0 R 863 0 R 1013 0 R 1366 0 R 1597 0 R] >> endobj 2169 0 obj << /Type /Pages /Count 36 /Parent 2172 0 R /Kids [1665 0 R 1694 0 R 1732 0 R 1760 0 R 1788 0 R 1819 0 R] >> endobj 2170 0 obj << /Type /Pages /Count 36 /Parent 2172 0 R /Kids [1850 0 R 1879 0 R 1910 0 R 1941 0 R 1970 0 R 2004 0 R] >> endobj 2171 0 obj << /Type /Pages /Count 17 /Parent 2172 0 R /Kids [2035 0 R 2068 0 R 2093 0 R] >> endobj 2172 0 obj << /Type /Pages /Count 125 /Kids [2168 0 R 2169 0 R 2170 0 R 2171 0 R] >> endobj 2173 0 obj << /Type /Outlines /First 3 0 R /Last 71 0 R /Count 2 >> endobj 539 0 obj << /Title 540 0 R /A 537 0 R /Parent 71 0 R /Prev 535 0 R >> endobj 535 0 obj << /Title 536 0 R /A 533 0 R /Parent 71 0 R /Prev 531 0 R /Next 539 0 R >> endobj 531 0 obj << /Title 532 0 R /A 529 0 R /Parent 71 0 R /Prev 527 0 R /Next 535 0 R >> endobj 527 0 obj << /Title 528 0 R /A 525 0 R /Parent 71 0 R /Prev 523 0 R /Next 531 0 R >> endobj 523 0 obj << /Title 524 0 R /A 521 0 R /Parent 71 0 R /Prev 519 0 R /Next 527 0 R >> endobj 519 0 obj << /Title 520 0 R /A 517 0 R /Parent 71 0 R /Prev 515 0 R /Next 523 0 R >> endobj 515 0 obj << /Title 516 0 R /A 513 0 R /Parent 71 0 R /Prev 511 0 R /Next 519 0 R >> endobj 511 0 obj << /Title 512 0 R /A 509 0 R /Parent 71 0 R /Prev 507 0 R /Next 515 0 R >> endobj 507 0 obj << /Title 508 0 R /A 505 0 R /Parent 71 0 R /Prev 503 0 R /Next 511 0 R >> endobj 503 0 obj << /Title 504 0 R /A 501 0 R /Parent 71 0 R /Prev 499 0 R /Next 507 0 R >> endobj 499 0 obj << /Title 500 0 R /A 497 0 R /Parent 71 0 R /Prev 495 0 R /Next 503 0 R >> endobj 495 0 obj << /Title 496 0 R /A 493 0 R /Parent 71 0 R /Prev 491 0 R /Next 499 0 R >> endobj 491 0 obj << /Title 492 0 R /A 489 0 R /Parent 71 0 R /Prev 487 0 R /Next 495 0 R >> endobj 487 0 obj << /Title 488 0 R /A 485 0 R /Parent 71 0 R /Prev 483 0 R /Next 491 0 R >> endobj 483 0 obj << /Title 484 0 R /A 481 0 R /Parent 71 0 R /Prev 479 0 R /Next 487 0 R >> endobj 479 0 obj << /Title 480 0 R /A 477 0 R /Parent 71 0 R /Prev 475 0 R /Next 483 0 R >> endobj 475 0 obj << /Title 476 0 R /A 473 0 R /Parent 71 0 R /Prev 471 0 R /Next 479 0 R >> endobj 471 0 obj << /Title 472 0 R /A 469 0 R /Parent 71 0 R /Prev 467 0 R /Next 475 0 R >> endobj 467 0 obj << /Title 468 0 R /A 465 0 R /Parent 71 0 R /Prev 463 0 R /Next 471 0 R >> endobj 463 0 obj << /Title 464 0 R /A 461 0 R /Parent 71 0 R /Prev 459 0 R /Next 467 0 R >> endobj 459 0 obj << /Title 460 0 R /A 457 0 R /Parent 71 0 R /Prev 455 0 R /Next 463 0 R >> endobj 455 0 obj << /Title 456 0 R /A 453 0 R /Parent 71 0 R /Prev 451 0 R /Next 459 0 R >> endobj 451 0 obj << /Title 452 0 R /A 449 0 R /Parent 71 0 R /Prev 447 0 R /Next 455 0 R >> endobj 447 0 obj << /Title 448 0 R /A 445 0 R /Parent 71 0 R /Prev 443 0 R /Next 451 0 R >> endobj 443 0 obj << /Title 444 0 R /A 441 0 R /Parent 71 0 R /Prev 439 0 R /Next 447 0 R >> endobj 439 0 obj << /Title 440 0 R /A 437 0 R /Parent 71 0 R /Prev 435 0 R /Next 443 0 R >> endobj 435 0 obj << /Title 436 0 R /A 433 0 R /Parent 71 0 R /Prev 431 0 R /Next 439 0 R >> endobj 431 0 obj << /Title 432 0 R /A 429 0 R /Parent 71 0 R /Prev 427 0 R /Next 435 0 R >> endobj 427 0 obj << /Title 428 0 R /A 425 0 R /Parent 71 0 R /Prev 423 0 R /Next 431 0 R >> endobj 423 0 obj << /Title 424 0 R /A 421 0 R /Parent 71 0 R /Prev 419 0 R /Next 427 0 R >> endobj 419 0 obj << /Title 420 0 R /A 417 0 R /Parent 71 0 R /Prev 415 0 R /Next 423 0 R >> endobj 415 0 obj << /Title 416 0 R /A 413 0 R /Parent 71 0 R /Prev 411 0 R /Next 419 0 R >> endobj 411 0 obj << /Title 412 0 R /A 409 0 R /Parent 71 0 R /Prev 407 0 R /Next 415 0 R >> endobj 407 0 obj << /Title 408 0 R /A 405 0 R /Parent 71 0 R /Prev 403 0 R /Next 411 0 R >> endobj 403 0 obj << /Title 404 0 R /A 401 0 R /Parent 71 0 R /Prev 399 0 R /Next 407 0 R >> endobj 399 0 obj << /Title 400 0 R /A 397 0 R /Parent 71 0 R /Prev 395 0 R /Next 403 0 R >> endobj 395 0 obj << /Title 396 0 R /A 393 0 R /Parent 71 0 R /Prev 391 0 R /Next 399 0 R >> endobj 391 0 obj << /Title 392 0 R /A 389 0 R /Parent 71 0 R /Prev 387 0 R /Next 395 0 R >> endobj 387 0 obj << /Title 388 0 R /A 385 0 R /Parent 71 0 R /Prev 383 0 R /Next 391 0 R >> endobj 383 0 obj << /Title 384 0 R /A 381 0 R /Parent 71 0 R /Prev 379 0 R /Next 387 0 R >> endobj 379 0 obj << /Title 380 0 R /A 377 0 R /Parent 71 0 R /Prev 375 0 R /Next 383 0 R >> endobj 375 0 obj << /Title 376 0 R /A 373 0 R /Parent 71 0 R /Prev 371 0 R /Next 379 0 R >> endobj 371 0 obj << /Title 372 0 R /A 369 0 R /Parent 71 0 R /Prev 367 0 R /Next 375 0 R >> endobj 367 0 obj << /Title 368 0 R /A 365 0 R /Parent 71 0 R /Prev 363 0 R /Next 371 0 R >> endobj 363 0 obj << /Title 364 0 R /A 361 0 R /Parent 71 0 R /Prev 359 0 R /Next 367 0 R >> endobj 359 0 obj << /Title 360 0 R /A 357 0 R /Parent 71 0 R /Prev 355 0 R /Next 363 0 R >> endobj 355 0 obj << /Title 356 0 R /A 353 0 R /Parent 71 0 R /Prev 351 0 R /Next 359 0 R >> endobj 351 0 obj << /Title 352 0 R /A 349 0 R /Parent 71 0 R /Prev 347 0 R /Next 355 0 R >> endobj 347 0 obj << /Title 348 0 R /A 345 0 R /Parent 71 0 R /Prev 343 0 R /Next 351 0 R >> endobj 343 0 obj << /Title 344 0 R /A 341 0 R /Parent 71 0 R /Prev 339 0 R /Next 347 0 R >> endobj 339 0 obj << /Title 340 0 R /A 337 0 R /Parent 71 0 R /Prev 335 0 R /Next 343 0 R >> endobj 335 0 obj << /Title 336 0 R /A 333 0 R /Parent 71 0 R /Prev 331 0 R /Next 339 0 R >> endobj 331 0 obj << /Title 332 0 R /A 329 0 R /Parent 71 0 R /Prev 327 0 R /Next 335 0 R >> endobj 327 0 obj << /Title 328 0 R /A 325 0 R /Parent 71 0 R /Prev 323 0 R /Next 331 0 R >> endobj 323 0 obj << /Title 324 0 R /A 321 0 R /Parent 71 0 R /Prev 319 0 R /Next 327 0 R >> endobj 319 0 obj << /Title 320 0 R /A 317 0 R /Parent 71 0 R /Prev 315 0 R /Next 323 0 R >> endobj 315 0 obj << /Title 316 0 R /A 313 0 R /Parent 71 0 R /Prev 311 0 R /Next 319 0 R >> endobj 311 0 obj << /Title 312 0 R /A 309 0 R /Parent 71 0 R /Prev 307 0 R /Next 315 0 R >> endobj 307 0 obj << /Title 308 0 R /A 305 0 R /Parent 71 0 R /Prev 303 0 R /Next 311 0 R >> endobj 303 0 obj << /Title 304 0 R /A 301 0 R /Parent 71 0 R /Prev 299 0 R /Next 307 0 R >> endobj 299 0 obj << /Title 300 0 R /A 297 0 R /Parent 71 0 R /Prev 295 0 R /Next 303 0 R >> endobj 295 0 obj << /Title 296 0 R /A 293 0 R /Parent 71 0 R /Prev 291 0 R /Next 299 0 R >> endobj 291 0 obj << /Title 292 0 R /A 289 0 R /Parent 71 0 R /Prev 287 0 R /Next 295 0 R >> endobj 287 0 obj << /Title 288 0 R /A 285 0 R /Parent 71 0 R /Prev 283 0 R /Next 291 0 R >> endobj 283 0 obj << /Title 284 0 R /A 281 0 R /Parent 71 0 R /Prev 279 0 R /Next 287 0 R >> endobj 279 0 obj << /Title 280 0 R /A 277 0 R /Parent 71 0 R /Prev 275 0 R /Next 283 0 R >> endobj 275 0 obj << /Title 276 0 R /A 273 0 R /Parent 71 0 R /Prev 271 0 R /Next 279 0 R >> endobj 271 0 obj << /Title 272 0 R /A 269 0 R /Parent 71 0 R /Prev 267 0 R /Next 275 0 R >> endobj 267 0 obj << /Title 268 0 R /A 265 0 R /Parent 71 0 R /Prev 263 0 R /Next 271 0 R >> endobj 263 0 obj << /Title 264 0 R /A 261 0 R /Parent 71 0 R /Prev 259 0 R /Next 267 0 R >> endobj 259 0 obj << /Title 260 0 R /A 257 0 R /Parent 71 0 R /Prev 255 0 R /Next 263 0 R >> endobj 255 0 obj << /Title 256 0 R /A 253 0 R /Parent 71 0 R /Prev 251 0 R /Next 259 0 R >> endobj 251 0 obj << /Title 252 0 R /A 249 0 R /Parent 71 0 R /Prev 247 0 R /Next 255 0 R >> endobj 247 0 obj << /Title 248 0 R /A 245 0 R /Parent 71 0 R /Prev 243 0 R /Next 251 0 R >> endobj 243 0 obj << /Title 244 0 R /A 241 0 R /Parent 71 0 R /Prev 239 0 R /Next 247 0 R >> endobj 239 0 obj << /Title 240 0 R /A 237 0 R /Parent 71 0 R /Prev 235 0 R /Next 243 0 R >> endobj 235 0 obj << /Title 236 0 R /A 233 0 R /Parent 71 0 R /Prev 231 0 R /Next 239 0 R >> endobj 231 0 obj << /Title 232 0 R /A 229 0 R /Parent 71 0 R /Prev 227 0 R /Next 235 0 R >> endobj 227 0 obj << /Title 228 0 R /A 225 0 R /Parent 71 0 R /Prev 223 0 R /Next 231 0 R >> endobj 223 0 obj << /Title 224 0 R /A 221 0 R /Parent 71 0 R /Prev 219 0 R /Next 227 0 R >> endobj 219 0 obj << /Title 220 0 R /A 217 0 R /Parent 71 0 R /Prev 215 0 R /Next 223 0 R >> endobj 215 0 obj << /Title 216 0 R /A 213 0 R /Parent 71 0 R /Prev 211 0 R /Next 219 0 R >> endobj 211 0 obj << /Title 212 0 R /A 209 0 R /Parent 71 0 R /Prev 207 0 R /Next 215 0 R >> endobj 207 0 obj << /Title 208 0 R /A 205 0 R /Parent 71 0 R /Prev 203 0 R /Next 211 0 R >> endobj 203 0 obj << /Title 204 0 R /A 201 0 R /Parent 71 0 R /Prev 199 0 R /Next 207 0 R >> endobj 199 0 obj << /Title 200 0 R /A 197 0 R /Parent 71 0 R /Prev 195 0 R /Next 203 0 R >> endobj 195 0 obj << /Title 196 0 R /A 193 0 R /Parent 71 0 R /Prev 191 0 R /Next 199 0 R >> endobj 191 0 obj << /Title 192 0 R /A 189 0 R /Parent 71 0 R /Prev 187 0 R /Next 195 0 R >> endobj 187 0 obj << /Title 188 0 R /A 185 0 R /Parent 71 0 R /Prev 183 0 R /Next 191 0 R >> endobj 183 0 obj << /Title 184 0 R /A 181 0 R /Parent 71 0 R /Prev 179 0 R /Next 187 0 R >> endobj 179 0 obj << /Title 180 0 R /A 177 0 R /Parent 71 0 R /Prev 175 0 R /Next 183 0 R >> endobj 175 0 obj << /Title 176 0 R /A 173 0 R /Parent 71 0 R /Prev 171 0 R /Next 179 0 R >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R /Parent 71 0 R /Prev 167 0 R /Next 175 0 R >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R /Parent 71 0 R /Prev 163 0 R /Next 171 0 R >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R /Parent 71 0 R /Prev 159 0 R /Next 167 0 R >> endobj 159 0 obj << /Title 160 0 R /A 157 0 R /Parent 71 0 R /Prev 155 0 R /Next 163 0 R >> endobj 155 0 obj << /Title 156 0 R /A 153 0 R /Parent 71 0 R /Prev 151 0 R /Next 159 0 R >> endobj 151 0 obj << /Title 152 0 R /A 149 0 R /Parent 71 0 R /Prev 147 0 R /Next 155 0 R >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R /Parent 71 0 R /Prev 143 0 R /Next 151 0 R >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R /Parent 71 0 R /Prev 139 0 R /Next 147 0 R >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R /Parent 71 0 R /Prev 135 0 R /Next 143 0 R >> endobj 135 0 obj << /Title 136 0 R /A 133 0 R /Parent 71 0 R /Prev 131 0 R /Next 139 0 R >> endobj 131 0 obj << /Title 132 0 R /A 129 0 R /Parent 71 0 R /Prev 127 0 R /Next 135 0 R >> endobj 127 0 obj << /Title 128 0 R /A 125 0 R /Parent 71 0 R /Prev 123 0 R /Next 131 0 R >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R /Parent 71 0 R /Prev 119 0 R /Next 127 0 R >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R /Parent 71 0 R /Prev 115 0 R /Next 123 0 R >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R /Parent 71 0 R /Prev 111 0 R /Next 119 0 R >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R /Parent 71 0 R /Prev 107 0 R /Next 115 0 R >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 71 0 R /Prev 103 0 R /Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R /Parent 71 0 R /Prev 99 0 R /Next 107 0 R >> endobj 99 0 obj << /Title 100 0 R /A 97 0 R /Parent 71 0 R /Prev 95 0 R /Next 103 0 R >> endobj 95 0 obj << /Title 96 0 R /A 93 0 R /Parent 71 0 R /Prev 91 0 R /Next 99 0 R >> endobj 91 0 obj << /Title 92 0 R /A 89 0 R /Parent 71 0 R /Prev 87 0 R /Next 95 0 R >> endobj 87 0 obj << /Title 88 0 R /A 85 0 R /Parent 71 0 R /Prev 83 0 R /Next 91 0 R >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 71 0 R /Prev 79 0 R /Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 71 0 R /Prev 75 0 R /Next 83 0 R >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R /Parent 71 0 R /Next 79 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 2173 0 R /Prev 3 0 R /First 75 0 R /Last 539 0 R /Count -117 >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R /Parent 59 0 R /Prev 63 0 R >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R /Parent 59 0 R /Next 67 0 R >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 3 0 R /Prev 47 0 R /First 63 0 R /Last 67 0 R /Count -2 >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 47 0 R /Prev 51 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 47 0 R /Next 55 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 3 0 R /Prev 35 0 R /Next 59 0 R /First 51 0 R /Last 55 0 R /Count -2 >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 35 0 R /Prev 39 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 35 0 R /Next 43 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 3 0 R /Prev 31 0 R /Next 47 0 R /First 39 0 R /Last 43 0 R /Count -2 >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 3 0 R /Prev 7 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 7 0 R /Prev 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 7 0 R /Prev 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 7 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 7 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 3 0 R /Next 31 0 R /First 11 0 R /Last 27 0 R /Count -5 >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 2173 0 R /Next 71 0 R /First 7 0 R /Last 59 0 R /Count -5 >> endobj 2174 0 obj << /Names [(Doc-Start) 546 0 R (chapter*.1) 591 0 R (chapter.1) 2 0 R (chapter.2) 70 0 R (figure.caption.10) 894 0 R (figure.caption.11) 901 0 R] /Limits [(Doc-Start) (figure.caption.11)] >> endobj 2175 0 obj << /Names [(figure.caption.12) 951 0 R (figure.caption.13) 971 0 R (figure.caption.18) 1201 0 R (figure.caption.2) 716 0 R (figure.caption.3) 717 0 R (figure.caption.4) 727 0 R] /Limits [(figure.caption.12) (figure.caption.4)] >> endobj 2176 0 obj << /Names [(figure.caption.5) 758 0 R (figure.caption.6) 795 0 R (figure.caption.7) 832 0 R (figure.caption.8) 846 0 R (figure.caption.9) 865 0 R (lstlisting.1.-1) 759 0 R] /Limits [(figure.caption.5) (lstlisting.1.-1)] >> endobj 2177 0 obj << /Names [(lstlisting.1.-10) 925 0 R (lstlisting.1.-11) 944 0 R (lstlisting.1.-12) 959 0 R (lstlisting.1.-13) 1067 0 R (lstlisting.1.-14) 1113 0 R (lstlisting.1.-15) 1155 0 R] /Limits [(lstlisting.1.-10) (lstlisting.1.-15)] >> endobj 2178 0 obj << /Names [(lstlisting.1.-16) 1215 0 R (lstlisting.1.-17) 1351 0 R (lstlisting.1.-18) 1407 0 R (lstlisting.1.-19) 1451 0 R (lstlisting.1.-2) 800 0 R (lstlisting.1.-3) 854 0 R] /Limits [(lstlisting.1.-16) (lstlisting.1.-3)] >> endobj 2179 0 obj << /Names [(lstlisting.1.-4) 857 0 R (lstlisting.1.-5) 873 0 R (lstlisting.1.-6) 881 0 R (lstlisting.1.-7) 913 0 R (lstlisting.1.-8) 919 0 R (lstlisting.1.-9) 922 0 R] /Limits [(lstlisting.1.-4) (lstlisting.1.-9)] >> endobj 2180 0 obj << /Names [(lstnumber.-1.1) 760 0 R (lstnumber.-1.10) 770 0 R (lstnumber.-1.11) 771 0 R (lstnumber.-1.12) 772 0 R (lstnumber.-1.13) 773 0 R (lstnumber.-1.14) 774 0 R] /Limits [(lstnumber.-1.1) (lstnumber.-1.14)] >> endobj 2181 0 obj << /Names [(lstnumber.-1.15) 775 0 R (lstnumber.-1.16) 776 0 R (lstnumber.-1.17) 777 0 R (lstnumber.-1.2) 762 0 R (lstnumber.-1.3) 763 0 R (lstnumber.-1.4) 764 0 R] /Limits [(lstnumber.-1.15) (lstnumber.-1.4)] >> endobj 2182 0 obj << /Names [(lstnumber.-1.5) 765 0 R (lstnumber.-1.6) 766 0 R (lstnumber.-1.7) 767 0 R (lstnumber.-1.8) 768 0 R (lstnumber.-1.9) 769 0 R (lstnumber.-10.10) 926 0 R] /Limits [(lstnumber.-1.5) (lstnumber.-10.10)] >> endobj 2183 0 obj << /Names [(lstnumber.-10.11) 927 0 R (lstnumber.-10.12) 928 0 R (lstnumber.-10.13) 929 0 R (lstnumber.-10.14) 930 0 R (lstnumber.-10.15) 931 0 R (lstnumber.-10.16) 932 0 R] /Limits [(lstnumber.-10.11) (lstnumber.-10.16)] >> endobj 2184 0 obj << /Names [(lstnumber.-10.17) 933 0 R (lstnumber.-10.18) 934 0 R (lstnumber.-10.19) 935 0 R (lstnumber.-10.20) 936 0 R (lstnumber.-10.21) 937 0 R (lstnumber.-10.22) 938 0 R] /Limits [(lstnumber.-10.17) (lstnumber.-10.22)] >> endobj 2185 0 obj << /Names [(lstnumber.-10.23) 939 0 R (lstnumber.-10.24) 940 0 R (lstnumber.-10.25) 941 0 R (lstnumber.-10.26) 942 0 R (lstnumber.-10.27) 943 0 R (lstnumber.-11.1) 945 0 R] /Limits [(lstnumber.-10.23) (lstnumber.-11.1)] >> endobj 2186 0 obj << /Names [(lstnumber.-11.2) 946 0 R (lstnumber.-11.3) 947 0 R (lstnumber.-11.4) 948 0 R (lstnumber.-11.5) 949 0 R (lstnumber.-11.6) 950 0 R (lstnumber.-12.1) 960 0 R] /Limits [(lstnumber.-11.2) (lstnumber.-12.1)] >> endobj 2187 0 obj << /Names [(lstnumber.-12.10) 969 0 R (lstnumber.-12.11) 976 0 R (lstnumber.-12.12) 977 0 R (lstnumber.-12.13) 978 0 R (lstnumber.-12.14) 979 0 R (lstnumber.-12.15) 980 0 R] /Limits [(lstnumber.-12.10) (lstnumber.-12.15)] >> endobj 2188 0 obj << /Names [(lstnumber.-12.16) 981 0 R (lstnumber.-12.17) 982 0 R (lstnumber.-12.18) 983 0 R (lstnumber.-12.19) 984 0 R (lstnumber.-12.2) 961 0 R (lstnumber.-12.20) 985 0 R] /Limits [(lstnumber.-12.16) (lstnumber.-12.20)] >> endobj 2189 0 obj << /Names [(lstnumber.-12.21) 986 0 R (lstnumber.-12.22) 987 0 R (lstnumber.-12.23) 988 0 R (lstnumber.-12.24) 989 0 R (lstnumber.-12.25) 990 0 R (lstnumber.-12.26) 991 0 R] /Limits [(lstnumber.-12.21) (lstnumber.-12.26)] >> endobj 2190 0 obj << /Names [(lstnumber.-12.27) 992 0 R (lstnumber.-12.28) 993 0 R (lstnumber.-12.29) 994 0 R (lstnumber.-12.3) 962 0 R (lstnumber.-12.30) 995 0 R (lstnumber.-12.31) 996 0 R] /Limits [(lstnumber.-12.27) (lstnumber.-12.31)] >> endobj 2191 0 obj << /Names [(lstnumber.-12.32) 997 0 R (lstnumber.-12.33) 998 0 R (lstnumber.-12.34) 999 0 R (lstnumber.-12.35) 1000 0 R (lstnumber.-12.36) 1001 0 R (lstnumber.-12.37) 1002 0 R] /Limits [(lstnumber.-12.32) (lstnumber.-12.37)] >> endobj 2192 0 obj << /Names [(lstnumber.-12.38) 1003 0 R (lstnumber.-12.39) 1004 0 R (lstnumber.-12.4) 963 0 R (lstnumber.-12.40) 1005 0 R (lstnumber.-12.41) 1006 0 R (lstnumber.-12.42) 1007 0 R] /Limits [(lstnumber.-12.38) (lstnumber.-12.42)] >> endobj 2193 0 obj << /Names [(lstnumber.-12.43) 1008 0 R (lstnumber.-12.44) 1009 0 R (lstnumber.-12.45) 1010 0 R (lstnumber.-12.46) 1011 0 R (lstnumber.-12.47) 1012 0 R (lstnumber.-12.48) 1018 0 R] /Limits [(lstnumber.-12.43) (lstnumber.-12.48)] >> endobj 2194 0 obj << /Names [(lstnumber.-12.49) 1019 0 R (lstnumber.-12.5) 964 0 R (lstnumber.-12.50) 1020 0 R (lstnumber.-12.51) 1021 0 R (lstnumber.-12.52) 1022 0 R (lstnumber.-12.53) 1023 0 R] /Limits [(lstnumber.-12.49) (lstnumber.-12.53)] >> endobj 2195 0 obj << /Names [(lstnumber.-12.54) 1024 0 R (lstnumber.-12.55) 1025 0 R (lstnumber.-12.56) 1026 0 R (lstnumber.-12.57) 1027 0 R (lstnumber.-12.58) 1028 0 R (lstnumber.-12.59) 1029 0 R] /Limits [(lstnumber.-12.54) (lstnumber.-12.59)] >> endobj 2196 0 obj << /Names [(lstnumber.-12.6) 965 0 R (lstnumber.-12.60) 1030 0 R (lstnumber.-12.61) 1031 0 R (lstnumber.-12.62) 1032 0 R (lstnumber.-12.63) 1033 0 R (lstnumber.-12.64) 1034 0 R] /Limits [(lstnumber.-12.6) (lstnumber.-12.64)] >> endobj 2197 0 obj << /Names [(lstnumber.-12.65) 1035 0 R (lstnumber.-12.66) 1036 0 R (lstnumber.-12.67) 1037 0 R (lstnumber.-12.68) 1038 0 R (lstnumber.-12.69) 1039 0 R (lstnumber.-12.7) 966 0 R] /Limits [(lstnumber.-12.65) (lstnumber.-12.7)] >> endobj 2198 0 obj << /Names [(lstnumber.-12.70) 1040 0 R (lstnumber.-12.71) 1041 0 R (lstnumber.-12.72) 1042 0 R (lstnumber.-12.73) 1043 0 R (lstnumber.-12.74) 1044 0 R (lstnumber.-12.75) 1045 0 R] /Limits [(lstnumber.-12.70) (lstnumber.-12.75)] >> endobj 2199 0 obj << /Names [(lstnumber.-12.76) 1046 0 R (lstnumber.-12.77) 1047 0 R (lstnumber.-12.78) 1048 0 R (lstnumber.-12.79) 1049 0 R (lstnumber.-12.8) 967 0 R (lstnumber.-12.80) 1050 0 R] /Limits [(lstnumber.-12.76) (lstnumber.-12.80)] >> endobj 2200 0 obj << /Names [(lstnumber.-12.81) 1051 0 R (lstnumber.-12.82) 1052 0 R (lstnumber.-12.83) 1053 0 R (lstnumber.-12.84) 1054 0 R (lstnumber.-12.85) 1055 0 R (lstnumber.-12.86) 1056 0 R] /Limits [(lstnumber.-12.81) (lstnumber.-12.86)] >> endobj 2201 0 obj << /Names [(lstnumber.-12.87) 1057 0 R (lstnumber.-12.88) 1058 0 R (lstnumber.-12.89) 1059 0 R (lstnumber.-12.9) 968 0 R (lstnumber.-12.90) 1060 0 R (lstnumber.-12.91) 1061 0 R] /Limits [(lstnumber.-12.87) (lstnumber.-12.91)] >> endobj 2202 0 obj << /Names [(lstnumber.-12.92) 1062 0 R (lstnumber.-12.93) 1063 0 R (lstnumber.-12.94) 1064 0 R (lstnumber.-12.95) 1065 0 R (lstnumber.-13.1) 1068 0 R (lstnumber.-13.10) 1081 0 R] /Limits [(lstnumber.-12.92) (lstnumber.-13.10)] >> endobj 2203 0 obj << /Names [(lstnumber.-13.11) 1082 0 R (lstnumber.-13.12) 1083 0 R (lstnumber.-13.13) 1084 0 R (lstnumber.-13.14) 1085 0 R (lstnumber.-13.15) 1086 0 R (lstnumber.-13.16) 1087 0 R] /Limits [(lstnumber.-13.11) (lstnumber.-13.16)] >> endobj 2204 0 obj << /Names [(lstnumber.-13.17) 1088 0 R (lstnumber.-13.18) 1089 0 R (lstnumber.-13.19) 1090 0 R (lstnumber.-13.2) 1069 0 R (lstnumber.-13.20) 1091 0 R (lstnumber.-13.21) 1092 0 R] /Limits [(lstnumber.-13.17) (lstnumber.-13.21)] >> endobj 2205 0 obj << /Names [(lstnumber.-13.22) 1093 0 R (lstnumber.-13.23) 1094 0 R (lstnumber.-13.24) 1095 0 R (lstnumber.-13.25) 1096 0 R (lstnumber.-13.26) 1097 0 R (lstnumber.-13.27) 1098 0 R] /Limits [(lstnumber.-13.22) (lstnumber.-13.27)] >> endobj 2206 0 obj << /Names [(lstnumber.-13.28) 1099 0 R (lstnumber.-13.29) 1100 0 R (lstnumber.-13.3) 1070 0 R (lstnumber.-13.30) 1101 0 R (lstnumber.-13.31) 1102 0 R (lstnumber.-13.32) 1103 0 R] /Limits [(lstnumber.-13.28) (lstnumber.-13.32)] >> endobj 2207 0 obj << /Names [(lstnumber.-13.33) 1104 0 R (lstnumber.-13.34) 1105 0 R (lstnumber.-13.35) 1106 0 R (lstnumber.-13.36) 1107 0 R (lstnumber.-13.37) 1108 0 R (lstnumber.-13.38) 1109 0 R] /Limits [(lstnumber.-13.33) (lstnumber.-13.38)] >> endobj 2208 0 obj << /Names [(lstnumber.-13.39) 1110 0 R (lstnumber.-13.4) 1071 0 R (lstnumber.-13.40) 1111 0 R (lstnumber.-13.5) 1072 0 R (lstnumber.-13.6) 1077 0 R (lstnumber.-13.7) 1078 0 R] /Limits [(lstnumber.-13.39) (lstnumber.-13.7)] >> endobj 2209 0 obj << /Names [(lstnumber.-13.8) 1079 0 R (lstnumber.-13.9) 1080 0 R (lstnumber.-14.1) 1114 0 R (lstnumber.-14.10) 1123 0 R (lstnumber.-14.11) 1124 0 R (lstnumber.-14.12) 1125 0 R] /Limits [(lstnumber.-13.8) (lstnumber.-14.12)] >> endobj 2210 0 obj << /Names [(lstnumber.-14.13) 1126 0 R (lstnumber.-14.14) 1127 0 R (lstnumber.-14.15) 1128 0 R (lstnumber.-14.16) 1129 0 R (lstnumber.-14.17) 1130 0 R (lstnumber.-14.18) 1131 0 R] /Limits [(lstnumber.-14.13) (lstnumber.-14.18)] >> endobj 2211 0 obj << /Names [(lstnumber.-14.19) 1132 0 R (lstnumber.-14.2) 1115 0 R (lstnumber.-14.20) 1133 0 R (lstnumber.-14.21) 1138 0 R (lstnumber.-14.22) 1139 0 R (lstnumber.-14.23) 1140 0 R] /Limits [(lstnumber.-14.19) (lstnumber.-14.23)] >> endobj 2212 0 obj << /Names [(lstnumber.-14.24) 1141 0 R (lstnumber.-14.25) 1142 0 R (lstnumber.-14.26) 1143 0 R (lstnumber.-14.27) 1144 0 R (lstnumber.-14.28) 1145 0 R (lstnumber.-14.29) 1146 0 R] /Limits [(lstnumber.-14.24) (lstnumber.-14.29)] >> endobj 2213 0 obj << /Names [(lstnumber.-14.3) 1116 0 R (lstnumber.-14.30) 1147 0 R (lstnumber.-14.31) 1148 0 R (lstnumber.-14.32) 1149 0 R (lstnumber.-14.33) 1150 0 R (lstnumber.-14.34) 1151 0 R] /Limits [(lstnumber.-14.3) (lstnumber.-14.34)] >> endobj 2214 0 obj << /Names [(lstnumber.-14.35) 1152 0 R (lstnumber.-14.36) 1153 0 R (lstnumber.-14.4) 1117 0 R (lstnumber.-14.5) 1118 0 R (lstnumber.-14.6) 1119 0 R (lstnumber.-14.7) 1120 0 R] /Limits [(lstnumber.-14.35) (lstnumber.-14.7)] >> endobj 2215 0 obj << /Names [(lstnumber.-14.8) 1121 0 R (lstnumber.-14.9) 1122 0 R (lstnumber.-15.1) 1156 0 R (lstnumber.-15.10) 1165 0 R (lstnumber.-15.11) 1166 0 R (lstnumber.-15.12) 1167 0 R] /Limits [(lstnumber.-14.8) (lstnumber.-15.12)] >> endobj 2216 0 obj << /Names [(lstnumber.-15.13) 1168 0 R (lstnumber.-15.14) 1169 0 R (lstnumber.-15.15) 1170 0 R (lstnumber.-15.16) 1171 0 R (lstnumber.-15.17) 1172 0 R (lstnumber.-15.18) 1173 0 R] /Limits [(lstnumber.-15.13) (lstnumber.-15.18)] >> endobj 2217 0 obj << /Names [(lstnumber.-15.19) 1174 0 R (lstnumber.-15.2) 1157 0 R (lstnumber.-15.20) 1175 0 R (lstnumber.-15.21) 1176 0 R (lstnumber.-15.22) 1177 0 R (lstnumber.-15.23) 1178 0 R] /Limits [(lstnumber.-15.19) (lstnumber.-15.23)] >> endobj 2218 0 obj << /Names [(lstnumber.-15.24) 1179 0 R (lstnumber.-15.25) 1180 0 R (lstnumber.-15.26) 1181 0 R (lstnumber.-15.27) 1182 0 R (lstnumber.-15.28) 1183 0 R (lstnumber.-15.29) 1184 0 R] /Limits [(lstnumber.-15.24) (lstnumber.-15.29)] >> endobj 2219 0 obj << /Names [(lstnumber.-15.3) 1158 0 R (lstnumber.-15.30) 1185 0 R (lstnumber.-15.31) 1186 0 R (lstnumber.-15.32) 1187 0 R (lstnumber.-15.33) 1188 0 R (lstnumber.-15.34) 1189 0 R] /Limits [(lstnumber.-15.3) (lstnumber.-15.34)] >> endobj 2220 0 obj << /Names [(lstnumber.-15.35) 1190 0 R (lstnumber.-15.36) 1191 0 R (lstnumber.-15.37) 1192 0 R (lstnumber.-15.38) 1193 0 R (lstnumber.-15.39) 1194 0 R (lstnumber.-15.4) 1159 0 R] /Limits [(lstnumber.-15.35) (lstnumber.-15.4)] >> endobj 2221 0 obj << /Names [(lstnumber.-15.40) 1202 0 R (lstnumber.-15.41) 1203 0 R (lstnumber.-15.42) 1204 0 R (lstnumber.-15.43) 1205 0 R (lstnumber.-15.44) 1206 0 R (lstnumber.-15.45) 1207 0 R] /Limits [(lstnumber.-15.40) (lstnumber.-15.45)] >> endobj 2222 0 obj << /Names [(lstnumber.-15.46) 1208 0 R (lstnumber.-15.47) 1209 0 R (lstnumber.-15.48) 1210 0 R (lstnumber.-15.49) 1211 0 R (lstnumber.-15.5) 1160 0 R (lstnumber.-15.50) 1212 0 R] /Limits [(lstnumber.-15.46) (lstnumber.-15.50)] >> endobj 2223 0 obj << /Names [(lstnumber.-15.51) 1213 0 R (lstnumber.-15.6) 1161 0 R (lstnumber.-15.7) 1162 0 R (lstnumber.-15.8) 1163 0 R (lstnumber.-15.9) 1164 0 R (lstnumber.-16.1) 1216 0 R] /Limits [(lstnumber.-15.51) (lstnumber.-16.1)] >> endobj 2224 0 obj << /Names [(lstnumber.-16.10) 1225 0 R (lstnumber.-16.100) 1323 0 R (lstnumber.-16.101) 1324 0 R (lstnumber.-16.102) 1325 0 R (lstnumber.-16.103) 1326 0 R (lstnumber.-16.104) 1327 0 R] /Limits [(lstnumber.-16.10) (lstnumber.-16.104)] >> endobj 2225 0 obj << /Names [(lstnumber.-16.105) 1328 0 R (lstnumber.-16.106) 1329 0 R (lstnumber.-16.107) 1330 0 R (lstnumber.-16.108) 1331 0 R (lstnumber.-16.109) 1332 0 R (lstnumber.-16.11) 1226 0 R] /Limits [(lstnumber.-16.105) (lstnumber.-16.11)] >> endobj 2226 0 obj << /Names [(lstnumber.-16.110) 1333 0 R (lstnumber.-16.111) 1334 0 R (lstnumber.-16.112) 1335 0 R (lstnumber.-16.113) 1336 0 R (lstnumber.-16.114) 1337 0 R (lstnumber.-16.115) 1338 0 R] /Limits [(lstnumber.-16.110) (lstnumber.-16.115)] >> endobj 2227 0 obj << /Names [(lstnumber.-16.116) 1339 0 R (lstnumber.-16.117) 1340 0 R (lstnumber.-16.118) 1341 0 R (lstnumber.-16.119) 1342 0 R (lstnumber.-16.12) 1227 0 R (lstnumber.-16.120) 1343 0 R] /Limits [(lstnumber.-16.116) (lstnumber.-16.120)] >> endobj 2228 0 obj << /Names [(lstnumber.-16.121) 1344 0 R (lstnumber.-16.122) 1345 0 R (lstnumber.-16.123) 1346 0 R (lstnumber.-16.124) 1347 0 R (lstnumber.-16.125) 1348 0 R (lstnumber.-16.126) 1349 0 R] /Limits [(lstnumber.-16.121) (lstnumber.-16.126)] >> endobj 2229 0 obj << /Names [(lstnumber.-16.13) 1228 0 R (lstnumber.-16.14) 1229 0 R (lstnumber.-16.15) 1230 0 R (lstnumber.-16.16) 1231 0 R (lstnumber.-16.17) 1232 0 R (lstnumber.-16.18) 1233 0 R] /Limits [(lstnumber.-16.13) (lstnumber.-16.18)] >> endobj 2230 0 obj << /Names [(lstnumber.-16.19) 1234 0 R (lstnumber.-16.2) 1217 0 R (lstnumber.-16.20) 1235 0 R (lstnumber.-16.21) 1236 0 R (lstnumber.-16.22) 1237 0 R (lstnumber.-16.23) 1238 0 R] /Limits [(lstnumber.-16.19) (lstnumber.-16.23)] >> endobj 2231 0 obj << /Names [(lstnumber.-16.24) 1239 0 R (lstnumber.-16.25) 1244 0 R (lstnumber.-16.26) 1245 0 R (lstnumber.-16.27) 1246 0 R (lstnumber.-16.28) 1247 0 R (lstnumber.-16.29) 1248 0 R] /Limits [(lstnumber.-16.24) (lstnumber.-16.29)] >> endobj 2232 0 obj << /Names [(lstnumber.-16.3) 1218 0 R (lstnumber.-16.30) 1249 0 R (lstnumber.-16.31) 1250 0 R (lstnumber.-16.32) 1251 0 R (lstnumber.-16.33) 1252 0 R (lstnumber.-16.34) 1253 0 R] /Limits [(lstnumber.-16.3) (lstnumber.-16.34)] >> endobj 2233 0 obj << /Names [(lstnumber.-16.35) 1254 0 R (lstnumber.-16.36) 1255 0 R (lstnumber.-16.37) 1256 0 R (lstnumber.-16.38) 1257 0 R (lstnumber.-16.39) 1258 0 R (lstnumber.-16.4) 1219 0 R] /Limits [(lstnumber.-16.35) (lstnumber.-16.4)] >> endobj 2234 0 obj << /Names [(lstnumber.-16.40) 1259 0 R (lstnumber.-16.41) 1260 0 R (lstnumber.-16.42) 1261 0 R (lstnumber.-16.43) 1262 0 R (lstnumber.-16.44) 1263 0 R (lstnumber.-16.45) 1264 0 R] /Limits [(lstnumber.-16.40) (lstnumber.-16.45)] >> endobj 2235 0 obj << /Names [(lstnumber.-16.46) 1265 0 R (lstnumber.-16.47) 1266 0 R (lstnumber.-16.48) 1267 0 R (lstnumber.-16.49) 1268 0 R (lstnumber.-16.5) 1220 0 R (lstnumber.-16.50) 1269 0 R] /Limits [(lstnumber.-16.46) (lstnumber.-16.50)] >> endobj 2236 0 obj << /Names [(lstnumber.-16.51) 1270 0 R (lstnumber.-16.52) 1271 0 R (lstnumber.-16.53) 1272 0 R (lstnumber.-16.54) 1273 0 R (lstnumber.-16.55) 1274 0 R (lstnumber.-16.56) 1275 0 R] /Limits [(lstnumber.-16.51) (lstnumber.-16.56)] >> endobj 2237 0 obj << /Names [(lstnumber.-16.57) 1276 0 R (lstnumber.-16.58) 1277 0 R (lstnumber.-16.59) 1278 0 R (lstnumber.-16.6) 1221 0 R (lstnumber.-16.60) 1279 0 R (lstnumber.-16.61) 1280 0 R] /Limits [(lstnumber.-16.57) (lstnumber.-16.61)] >> endobj 2238 0 obj << /Names [(lstnumber.-16.62) 1281 0 R (lstnumber.-16.63) 1282 0 R (lstnumber.-16.64) 1283 0 R (lstnumber.-16.65) 1284 0 R (lstnumber.-16.66) 1285 0 R (lstnumber.-16.67) 1286 0 R] /Limits [(lstnumber.-16.62) (lstnumber.-16.67)] >> endobj 2239 0 obj << /Names [(lstnumber.-16.68) 1287 0 R (lstnumber.-16.69) 1288 0 R (lstnumber.-16.7) 1222 0 R (lstnumber.-16.70) 1289 0 R (lstnumber.-16.71) 1290 0 R (lstnumber.-16.72) 1291 0 R] /Limits [(lstnumber.-16.68) (lstnumber.-16.72)] >> endobj 2240 0 obj << /Names [(lstnumber.-16.73) 1292 0 R (lstnumber.-16.74) 1293 0 R (lstnumber.-16.75) 1294 0 R (lstnumber.-16.76) 1295 0 R (lstnumber.-16.77) 1296 0 R (lstnumber.-16.78) 1297 0 R] /Limits [(lstnumber.-16.73) (lstnumber.-16.78)] >> endobj 2241 0 obj << /Names [(lstnumber.-16.79) 1298 0 R (lstnumber.-16.8) 1223 0 R (lstnumber.-16.80) 1299 0 R (lstnumber.-16.81) 1300 0 R (lstnumber.-16.82) 1301 0 R (lstnumber.-16.83) 1302 0 R] /Limits [(lstnumber.-16.79) (lstnumber.-16.83)] >> endobj 2242 0 obj << /Names [(lstnumber.-16.84) 1303 0 R (lstnumber.-16.85) 1304 0 R (lstnumber.-16.86) 1305 0 R (lstnumber.-16.87) 1310 0 R (lstnumber.-16.88) 1311 0 R (lstnumber.-16.89) 1312 0 R] /Limits [(lstnumber.-16.84) (lstnumber.-16.89)] >> endobj 2243 0 obj << /Names [(lstnumber.-16.9) 1224 0 R (lstnumber.-16.90) 1313 0 R (lstnumber.-16.91) 1314 0 R (lstnumber.-16.92) 1315 0 R (lstnumber.-16.93) 1316 0 R (lstnumber.-16.94) 1317 0 R] /Limits [(lstnumber.-16.9) (lstnumber.-16.94)] >> endobj 2244 0 obj << /Names [(lstnumber.-16.95) 1318 0 R (lstnumber.-16.96) 1319 0 R (lstnumber.-16.97) 1320 0 R (lstnumber.-16.98) 1321 0 R (lstnumber.-16.99) 1322 0 R (lstnumber.-17.1) 1352 0 R] /Limits [(lstnumber.-16.95) (lstnumber.-17.1)] >> endobj 2245 0 obj << /Names [(lstnumber.-17.10) 1361 0 R (lstnumber.-17.11) 1362 0 R (lstnumber.-17.12) 1363 0 R (lstnumber.-17.13) 1364 0 R (lstnumber.-17.14) 1365 0 R (lstnumber.-17.15) 1371 0 R] /Limits [(lstnumber.-17.10) (lstnumber.-17.15)] >> endobj 2246 0 obj << /Names [(lstnumber.-17.16) 1372 0 R (lstnumber.-17.17) 1373 0 R (lstnumber.-17.18) 1374 0 R (lstnumber.-17.19) 1375 0 R (lstnumber.-17.2) 1353 0 R (lstnumber.-17.20) 1376 0 R] /Limits [(lstnumber.-17.16) (lstnumber.-17.20)] >> endobj 2247 0 obj << /Names [(lstnumber.-17.21) 1377 0 R (lstnumber.-17.22) 1378 0 R (lstnumber.-17.23) 1379 0 R (lstnumber.-17.24) 1380 0 R (lstnumber.-17.25) 1381 0 R (lstnumber.-17.26) 1382 0 R] /Limits [(lstnumber.-17.21) (lstnumber.-17.26)] >> endobj 2248 0 obj << /Names [(lstnumber.-17.27) 1383 0 R (lstnumber.-17.28) 1384 0 R (lstnumber.-17.29) 1385 0 R (lstnumber.-17.3) 1354 0 R (lstnumber.-17.30) 1386 0 R (lstnumber.-17.31) 1387 0 R] /Limits [(lstnumber.-17.27) (lstnumber.-17.31)] >> endobj 2249 0 obj << /Names [(lstnumber.-17.32) 1388 0 R (lstnumber.-17.33) 1389 0 R (lstnumber.-17.34) 1390 0 R (lstnumber.-17.35) 1391 0 R (lstnumber.-17.36) 1392 0 R (lstnumber.-17.37) 1393 0 R] /Limits [(lstnumber.-17.32) (lstnumber.-17.37)] >> endobj 2250 0 obj << /Names [(lstnumber.-17.38) 1394 0 R (lstnumber.-17.39) 1395 0 R (lstnumber.-17.4) 1355 0 R (lstnumber.-17.40) 1396 0 R (lstnumber.-17.41) 1397 0 R (lstnumber.-17.42) 1398 0 R] /Limits [(lstnumber.-17.38) (lstnumber.-17.42)] >> endobj 2251 0 obj << /Names [(lstnumber.-17.43) 1399 0 R (lstnumber.-17.44) 1400 0 R (lstnumber.-17.45) 1401 0 R (lstnumber.-17.46) 1402 0 R (lstnumber.-17.47) 1403 0 R (lstnumber.-17.48) 1404 0 R] /Limits [(lstnumber.-17.43) (lstnumber.-17.48)] >> endobj 2252 0 obj << /Names [(lstnumber.-17.49) 1405 0 R (lstnumber.-17.5) 1356 0 R (lstnumber.-17.6) 1357 0 R (lstnumber.-17.7) 1358 0 R (lstnumber.-17.8) 1359 0 R (lstnumber.-17.9) 1360 0 R] /Limits [(lstnumber.-17.49) (lstnumber.-17.9)] >> endobj 2253 0 obj << /Names [(lstnumber.-18.1) 1408 0 R (lstnumber.-18.10) 1417 0 R (lstnumber.-18.11) 1418 0 R (lstnumber.-18.12) 1419 0 R (lstnumber.-18.13) 1420 0 R (lstnumber.-18.14) 1421 0 R] /Limits [(lstnumber.-18.1) (lstnumber.-18.14)] >> endobj 2254 0 obj << /Names [(lstnumber.-18.15) 1422 0 R (lstnumber.-18.16) 1423 0 R (lstnumber.-18.17) 1424 0 R (lstnumber.-18.18) 1425 0 R (lstnumber.-18.19) 1426 0 R (lstnumber.-18.2) 1409 0 R] /Limits [(lstnumber.-18.15) (lstnumber.-18.2)] >> endobj 2255 0 obj << /Names [(lstnumber.-18.20) 1427 0 R (lstnumber.-18.21) 1432 0 R (lstnumber.-18.22) 1433 0 R (lstnumber.-18.23) 1434 0 R (lstnumber.-18.24) 1435 0 R (lstnumber.-18.25) 1436 0 R] /Limits [(lstnumber.-18.20) (lstnumber.-18.25)] >> endobj 2256 0 obj << /Names [(lstnumber.-18.26) 1437 0 R (lstnumber.-18.27) 1438 0 R (lstnumber.-18.28) 1439 0 R (lstnumber.-18.29) 1440 0 R (lstnumber.-18.3) 1410 0 R (lstnumber.-18.30) 1441 0 R] /Limits [(lstnumber.-18.26) (lstnumber.-18.30)] >> endobj 2257 0 obj << /Names [(lstnumber.-18.31) 1442 0 R (lstnumber.-18.32) 1443 0 R (lstnumber.-18.33) 1444 0 R (lstnumber.-18.34) 1445 0 R (lstnumber.-18.35) 1446 0 R (lstnumber.-18.36) 1447 0 R] /Limits [(lstnumber.-18.31) (lstnumber.-18.36)] >> endobj 2258 0 obj << /Names [(lstnumber.-18.37) 1448 0 R (lstnumber.-18.38) 1449 0 R (lstnumber.-18.4) 1411 0 R (lstnumber.-18.5) 1412 0 R (lstnumber.-18.6) 1413 0 R (lstnumber.-18.7) 1414 0 R] /Limits [(lstnumber.-18.37) (lstnumber.-18.7)] >> endobj 2259 0 obj << /Names [(lstnumber.-18.8) 1415 0 R (lstnumber.-18.9) 1416 0 R (lstnumber.-19.1) 1452 0 R (lstnumber.-19.10) 1461 0 R (lstnumber.-19.11) 1462 0 R (lstnumber.-19.12) 1463 0 R] /Limits [(lstnumber.-18.8) (lstnumber.-19.12)] >> endobj 2260 0 obj << /Names [(lstnumber.-19.13) 1464 0 R (lstnumber.-19.14) 1465 0 R (lstnumber.-19.15) 1466 0 R (lstnumber.-19.16) 1467 0 R (lstnumber.-19.17) 1468 0 R (lstnumber.-19.18) 1469 0 R] /Limits [(lstnumber.-19.13) (lstnumber.-19.18)] >> endobj 2261 0 obj << /Names [(lstnumber.-19.19) 1470 0 R (lstnumber.-19.2) 1453 0 R (lstnumber.-19.20) 1471 0 R (lstnumber.-19.21) 1472 0 R (lstnumber.-19.22) 1473 0 R (lstnumber.-19.23) 1474 0 R] /Limits [(lstnumber.-19.19) (lstnumber.-19.23)] >> endobj 2262 0 obj << /Names [(lstnumber.-19.24) 1475 0 R (lstnumber.-19.25) 1476 0 R (lstnumber.-19.26) 1477 0 R (lstnumber.-19.27) 1478 0 R (lstnumber.-19.28) 1479 0 R (lstnumber.-19.29) 1480 0 R] /Limits [(lstnumber.-19.24) (lstnumber.-19.29)] >> endobj 2263 0 obj << /Names [(lstnumber.-19.3) 1454 0 R (lstnumber.-19.30) 1481 0 R (lstnumber.-19.31) 1482 0 R (lstnumber.-19.32) 1483 0 R (lstnumber.-19.33) 1484 0 R (lstnumber.-19.34) 1485 0 R] /Limits [(lstnumber.-19.3) (lstnumber.-19.34)] >> endobj 2264 0 obj << /Names [(lstnumber.-19.35) 1486 0 R (lstnumber.-19.36) 1487 0 R (lstnumber.-19.37) 1488 0 R (lstnumber.-19.38) 1493 0 R (lstnumber.-19.39) 1494 0 R (lstnumber.-19.4) 1455 0 R] /Limits [(lstnumber.-19.35) (lstnumber.-19.4)] >> endobj 2265 0 obj << /Names [(lstnumber.-19.40) 1495 0 R (lstnumber.-19.41) 1496 0 R (lstnumber.-19.42) 1497 0 R (lstnumber.-19.43) 1498 0 R (lstnumber.-19.44) 1499 0 R (lstnumber.-19.45) 1500 0 R] /Limits [(lstnumber.-19.40) (lstnumber.-19.45)] >> endobj 2266 0 obj << /Names [(lstnumber.-19.46) 1501 0 R (lstnumber.-19.47) 1502 0 R (lstnumber.-19.48) 1503 0 R (lstnumber.-19.49) 1504 0 R (lstnumber.-19.5) 1456 0 R (lstnumber.-19.50) 1505 0 R] /Limits [(lstnumber.-19.46) (lstnumber.-19.50)] >> endobj 2267 0 obj << /Names [(lstnumber.-19.6) 1457 0 R (lstnumber.-19.7) 1458 0 R (lstnumber.-19.8) 1459 0 R (lstnumber.-19.9) 1460 0 R (lstnumber.-2.1) 801 0 R (lstnumber.-2.10) 811 0 R] /Limits [(lstnumber.-19.6) (lstnumber.-2.10)] >> endobj 2268 0 obj << /Names [(lstnumber.-2.11) 812 0 R (lstnumber.-2.12) 813 0 R (lstnumber.-2.13) 814 0 R (lstnumber.-2.14) 815 0 R (lstnumber.-2.15) 816 0 R (lstnumber.-2.16) 817 0 R] /Limits [(lstnumber.-2.11) (lstnumber.-2.16)] >> endobj 2269 0 obj << /Names [(lstnumber.-2.17) 818 0 R (lstnumber.-2.18) 819 0 R (lstnumber.-2.19) 820 0 R (lstnumber.-2.2) 802 0 R (lstnumber.-2.20) 821 0 R (lstnumber.-2.21) 822 0 R] /Limits [(lstnumber.-2.17) (lstnumber.-2.21)] >> endobj 2270 0 obj << /Names [(lstnumber.-2.22) 823 0 R (lstnumber.-2.23) 824 0 R (lstnumber.-2.24) 833 0 R (lstnumber.-2.25) 834 0 R (lstnumber.-2.26) 835 0 R (lstnumber.-2.27) 836 0 R] /Limits [(lstnumber.-2.22) (lstnumber.-2.27)] >> endobj 2271 0 obj << /Names [(lstnumber.-2.28) 837 0 R (lstnumber.-2.3) 803 0 R (lstnumber.-2.4) 804 0 R (lstnumber.-2.5) 806 0 R (lstnumber.-2.6) 807 0 R (lstnumber.-2.7) 808 0 R] /Limits [(lstnumber.-2.28) (lstnumber.-2.7)] >> endobj 2272 0 obj << /Names [(lstnumber.-2.8) 809 0 R (lstnumber.-2.9) 810 0 R (lstnumber.-3.1) 855 0 R (lstnumber.-3.2) 856 0 R (lstnumber.-4.1) 858 0 R (lstnumber.-4.2) 859 0 R] /Limits [(lstnumber.-2.8) (lstnumber.-4.2)] >> endobj 2273 0 obj << /Names [(lstnumber.-4.3) 860 0 R (lstnumber.-4.4) 861 0 R (lstnumber.-4.5) 862 0 R (lstnumber.-5.1) 874 0 R (lstnumber.-5.2) 875 0 R (lstnumber.-5.3) 876 0 R] /Limits [(lstnumber.-4.3) (lstnumber.-5.3)] >> endobj 2274 0 obj << /Names [(lstnumber.-5.4) 877 0 R (lstnumber.-5.5) 878 0 R (lstnumber.-5.6) 879 0 R (lstnumber.-5.7) 880 0 R (lstnumber.-6.1) 882 0 R (lstnumber.-6.10) 891 0 R] /Limits [(lstnumber.-5.4) (lstnumber.-6.10)] >> endobj 2275 0 obj << /Names [(lstnumber.-6.11) 892 0 R (lstnumber.-6.2) 883 0 R (lstnumber.-6.3) 884 0 R (lstnumber.-6.4) 885 0 R (lstnumber.-6.5) 886 0 R (lstnumber.-6.6) 887 0 R] /Limits [(lstnumber.-6.11) (lstnumber.-6.6)] >> endobj 2276 0 obj << /Names [(lstnumber.-6.7) 888 0 R (lstnumber.-6.8) 889 0 R (lstnumber.-6.9) 890 0 R (lstnumber.-7.1) 914 0 R (lstnumber.-7.2) 915 0 R (lstnumber.-7.3) 916 0 R] /Limits [(lstnumber.-6.7) (lstnumber.-7.3)] >> endobj 2277 0 obj << /Names [(lstnumber.-7.4) 917 0 R (lstnumber.-7.5) 918 0 R (lstnumber.-8.6) 920 0 R (lstnumber.-8.7) 921 0 R (lstnumber.-9.8) 923 0 R (lstnumber.-9.9) 924 0 R] /Limits [(lstnumber.-7.4) (lstnumber.-9.9)] >> endobj 2278 0 obj << /Names [(page.1) 545 0 R (page.10) 799 0 R (page.100) 1985 0 R (page.101) 1990 0 R (page.102) 1995 0 R (page.103) 2000 0 R] /Limits [(page.1) (page.103)] >> endobj 2279 0 obj << /Names [(page.104) 2008 0 R (page.105) 2013 0 R (page.106) 2018 0 R (page.107) 2023 0 R (page.108) 2029 0 R (page.109) 2033 0 R] /Limits [(page.104) (page.109)] >> endobj 2280 0 obj << /Names [(page.11) 831 0 R (page.110) 2039 0 R (page.111) 2045 0 R (page.112) 2050 0 R (page.113) 2055 0 R (page.114) 2059 0 R] /Limits [(page.11) (page.114)] >> endobj 2281 0 obj << /Names [(page.115) 2066 0 R (page.116) 2072 0 R (page.117) 2076 0 R (page.118) 2080 0 R (page.119) 2084 0 R (page.12) 844 0 R] /Limits [(page.115) (page.12)] >> endobj 2282 0 obj << /Names [(page.120) 2088 0 R (page.121) 2092 0 R (page.122) 2097 0 R (page.123) 2101 0 R (page.124) 2105 0 R (page.125) 2109 0 R] /Limits [(page.120) (page.125)] >> endobj 2283 0 obj << /Names [(page.13) 853 0 R (page.14) 872 0 R (page.15) 899 0 R (page.16) 905 0 R (page.17) 912 0 R (page.18) 957 0 R] /Limits [(page.13) (page.18)] >> endobj 2284 0 obj << /Names [(page.19) 975 0 R (page.2) 590 0 R (page.20) 1017 0 R (page.21) 1076 0 R (page.22) 1137 0 R (page.23) 1200 0 R] /Limits [(page.19) (page.23)] >> endobj 2285 0 obj << /Names [(page.24) 1243 0 R (page.25) 1309 0 R (page.26) 1370 0 R (page.27) 1431 0 R (page.28) 1492 0 R (page.29) 1533 0 R] /Limits [(page.24) (page.29)] >> endobj 2286 0 obj << /Names [(page.3) 641 0 R (page.30) 1565 0 R (page.31) 1596 0 R (page.32) 1626 0 R (page.33) 1644 0 R (page.34) 1648 0 R] /Limits [(page.3) (page.34)] >> endobj 2287 0 obj << /Names [(page.35) 1654 0 R (page.36) 1658 0 R (page.37) 1662 0 R (page.38) 1669 0 R (page.39) 1673 0 R (page.4) 689 0 R] /Limits [(page.35) (page.4)] >> endobj 2288 0 obj << /Names [(page.40) 1677 0 R (page.41) 1683 0 R (page.42) 1687 0 R (page.43) 1692 0 R (page.44) 1698 0 R (page.45) 1705 0 R] /Limits [(page.40) (page.45)] >> endobj 2289 0 obj << /Names [(page.46) 1711 0 R (page.47) 1717 0 R (page.48) 1723 0 R (page.49) 1730 0 R (page.5) 704 0 R (page.50) 1736 0 R] /Limits [(page.46) (page.50)] >> endobj 2290 0 obj << /Names [(page.51) 1741 0 R (page.52) 1746 0 R (page.53) 1750 0 R (page.54) 1754 0 R (page.55) 1759 0 R (page.56) 1764 0 R] /Limits [(page.51) (page.56)] >> endobj 2291 0 obj << /Names [(page.57) 1769 0 R (page.58) 1773 0 R (page.59) 1777 0 R (page.6) 715 0 R (page.60) 1782 0 R (page.61) 1786 0 R] /Limits [(page.57) (page.61)] >> endobj 2292 0 obj << /Names [(page.62) 1792 0 R (page.63) 1797 0 R (page.64) 1803 0 R (page.65) 1807 0 R (page.66) 1812 0 R (page.67) 1818 0 R] /Limits [(page.62) (page.67)] >> endobj 2293 0 obj << /Names [(page.68) 1823 0 R (page.69) 1827 0 R (page.7) 724 0 R (page.70) 1831 0 R (page.71) 1837 0 R (page.72) 1842 0 R] /Limits [(page.68) (page.72)] >> endobj 2294 0 obj << /Names [(page.73) 1847 0 R (page.74) 1854 0 R (page.75) 1860 0 R (page.76) 1864 0 R (page.77) 1869 0 R (page.78) 1873 0 R] /Limits [(page.73) (page.78)] >> endobj 2295 0 obj << /Names [(page.79) 1877 0 R (page.8) 731 0 R (page.80) 1883 0 R (page.81) 1889 0 R (page.82) 1895 0 R (page.83) 1900 0 R] /Limits [(page.79) (page.83)] >> endobj 2296 0 obj << /Names [(page.84) 1904 0 R (page.85) 1909 0 R (page.86) 1914 0 R (page.87) 1918 0 R (page.88) 1925 0 R (page.89) 1930 0 R] /Limits [(page.84) (page.89)] >> endobj 2297 0 obj << /Names [(page.9) 757 0 R (page.90) 1935 0 R (page.91) 1940 0 R (page.92) 1945 0 R (page.93) 1949 0 R (page.94) 1953 0 R] /Limits [(page.9) (page.94)] >> endobj 2298 0 obj << /Names [(page.95) 1958 0 R (page.96) 1962 0 R (page.97) 1968 0 R (page.98) 1974 0 R (page.99) 1979 0 R (section*.100) 2046 0 R] /Limits [(page.95) (section*.100)] >> endobj 2299 0 obj << /Names [(section*.101) 2051 0 R (section*.102) 2060 0 R (section*.103) 2061 0 R (section*.104) 2062 0 R (section*.105) 2067 0 R (section*.14) 958 0 R] /Limits [(section*.101) (section*.14)] >> endobj 2300 0 obj << /Names [(section*.15) 1066 0 R (section*.16) 1112 0 R (section*.17) 1154 0 R (section*.19) 1214 0 R (section*.20) 1350 0 R (section*.21) 1406 0 R] /Limits [(section*.15) (section*.21)] >> endobj 2301 0 obj << /Names [(section*.22) 1450 0 R (section*.23) 1534 0 R (section*.24) 1627 0 R (section*.25) 1649 0 R (section*.26) 1650 0 R (section*.27) 1663 0 R] /Limits [(section*.22) (section*.27)] >> endobj 2302 0 obj << /Names [(section*.28) 1664 0 R (section*.29) 1678 0 R (section*.30) 1679 0 R (section*.31) 1688 0 R (section*.32) 1693 0 R (section*.33) 1699 0 R] /Limits [(section*.28) (section*.33)] >> endobj 2303 0 obj << /Names [(section*.34) 1700 0 R (section*.35) 1701 0 R (section*.36) 1706 0 R (section*.37) 1707 0 R (section*.38) 1712 0 R (section*.39) 1713 0 R] /Limits [(section*.34) (section*.39)] >> endobj 2304 0 obj << /Names [(section*.40) 1718 0 R (section*.41) 1719 0 R (section*.42) 1724 0 R (section*.43) 1725 0 R (section*.44) 1726 0 R (section*.45) 1731 0 R] /Limits [(section*.40) (section*.45)] >> endobj 2305 0 obj << /Names [(section*.46) 1737 0 R (section*.47) 1742 0 R (section*.48) 1755 0 R (section*.49) 1765 0 R (section*.50) 1778 0 R (section*.51) 1787 0 R] /Limits [(section*.46) (section*.51)] >> endobj 2306 0 obj << /Names [(section*.52) 1793 0 R (section*.53) 1798 0 R (section*.54) 1799 0 R (section*.55) 1808 0 R (section*.56) 1813 0 R (section*.57) 1832 0 R] /Limits [(section*.52) (section*.57)] >> endobj 2307 0 obj << /Names [(section*.58) 1833 0 R (section*.59) 1838 0 R (section*.60) 1843 0 R (section*.61) 1848 0 R (section*.62) 1849 0 R (section*.63) 1855 0 R] /Limits [(section*.58) (section*.63)] >> endobj 2308 0 obj << /Names [(section*.64) 1856 0 R (section*.65) 1865 0 R (section*.66) 1878 0 R (section*.67) 1884 0 R (section*.68) 1885 0 R (section*.69) 1890 0 R] /Limits [(section*.64) (section*.69)] >> endobj 2309 0 obj << /Names [(section*.70) 1891 0 R (section*.71) 1896 0 R (section*.72) 1905 0 R (section*.73) 1919 0 R (section*.74) 1920 0 R (section*.75) 1921 0 R] /Limits [(section*.70) (section*.75)] >> endobj 2310 0 obj << /Names [(section*.76) 1926 0 R (section*.77) 1931 0 R (section*.78) 1936 0 R (section*.79) 1954 0 R (section*.80) 1963 0 R (section*.81) 1964 0 R] /Limits [(section*.76) (section*.81)] >> endobj 2311 0 obj << /Names [(section*.82) 1969 0 R (section*.83) 1975 0 R (section*.84) 1980 0 R (section*.85) 1981 0 R (section*.86) 1986 0 R (section*.87) 1991 0 R] /Limits [(section*.82) (section*.87)] >> endobj 2312 0 obj << /Names [(section*.88) 1996 0 R (section*.89) 2001 0 R (section*.90) 2002 0 R (section*.91) 2003 0 R (section*.92) 2009 0 R (section*.93) 2014 0 R] /Limits [(section*.88) (section*.93)] >> endobj 2313 0 obj << /Names [(section*.94) 2019 0 R (section*.95) 2024 0 R (section*.96) 2025 0 R (section*.97) 2034 0 R (section*.98) 2040 0 R (section*.99) 2041 0 R] /Limits [(section*.94) (section*.99)] >> endobj 2314 0 obj << /Names [(section.1.1) 6 0 R (section.1.2) 30 0 R (section.1.3) 34 0 R (section.1.4) 46 0 R (section.1.5) 58 0 R (section.2.1) 74 0 R] /Limits [(section.1.1) (section.2.1)] >> endobj 2315 0 obj << /Names [(section.2.10) 110 0 R (section.2.100) 470 0 R (section.2.101) 474 0 R (section.2.102) 478 0 R (section.2.103) 482 0 R (section.2.104) 486 0 R] /Limits [(section.2.10) (section.2.104)] >> endobj 2316 0 obj << /Names [(section.2.105) 490 0 R (section.2.106) 494 0 R (section.2.107) 498 0 R (section.2.108) 502 0 R (section.2.109) 506 0 R (section.2.11) 114 0 R] /Limits [(section.2.105) (section.2.11)] >> endobj 2317 0 obj << /Names [(section.2.110) 510 0 R (section.2.111) 514 0 R (section.2.112) 518 0 R (section.2.113) 522 0 R (section.2.114) 526 0 R (section.2.115) 530 0 R] /Limits [(section.2.110) (section.2.115)] >> endobj 2318 0 obj << /Names [(section.2.116) 534 0 R (section.2.117) 538 0 R (section.2.12) 118 0 R (section.2.13) 122 0 R (section.2.14) 126 0 R (section.2.15) 130 0 R] /Limits [(section.2.116) (section.2.15)] >> endobj 2319 0 obj << /Names [(section.2.16) 134 0 R (section.2.17) 138 0 R (section.2.18) 142 0 R (section.2.19) 146 0 R (section.2.2) 78 0 R (section.2.20) 150 0 R] /Limits [(section.2.16) (section.2.20)] >> endobj 2320 0 obj << /Names [(section.2.21) 154 0 R (section.2.22) 158 0 R (section.2.23) 162 0 R (section.2.24) 166 0 R (section.2.25) 170 0 R (section.2.26) 174 0 R] /Limits [(section.2.21) (section.2.26)] >> endobj 2321 0 obj << /Names [(section.2.27) 178 0 R (section.2.28) 182 0 R (section.2.29) 186 0 R (section.2.3) 82 0 R (section.2.30) 190 0 R (section.2.31) 194 0 R] /Limits [(section.2.27) (section.2.31)] >> endobj 2322 0 obj << /Names [(section.2.32) 198 0 R (section.2.33) 202 0 R (section.2.34) 206 0 R (section.2.35) 210 0 R (section.2.36) 214 0 R (section.2.37) 218 0 R] /Limits [(section.2.32) (section.2.37)] >> endobj 2323 0 obj << /Names [(section.2.38) 222 0 R (section.2.39) 226 0 R (section.2.4) 86 0 R (section.2.40) 230 0 R (section.2.41) 234 0 R (section.2.42) 238 0 R] /Limits [(section.2.38) (section.2.42)] >> endobj 2324 0 obj << /Names [(section.2.43) 242 0 R (section.2.44) 246 0 R (section.2.45) 250 0 R (section.2.46) 254 0 R (section.2.47) 258 0 R (section.2.48) 262 0 R] /Limits [(section.2.43) (section.2.48)] >> endobj 2325 0 obj << /Names [(section.2.49) 266 0 R (section.2.5) 90 0 R (section.2.50) 270 0 R (section.2.51) 274 0 R (section.2.52) 278 0 R (section.2.53) 282 0 R] /Limits [(section.2.49) (section.2.53)] >> endobj 2326 0 obj << /Names [(section.2.54) 286 0 R (section.2.55) 290 0 R (section.2.56) 294 0 R (section.2.57) 298 0 R (section.2.58) 302 0 R (section.2.59) 306 0 R] /Limits [(section.2.54) (section.2.59)] >> endobj 2327 0 obj << /Names [(section.2.6) 94 0 R (section.2.60) 310 0 R (section.2.61) 314 0 R (section.2.62) 318 0 R (section.2.63) 322 0 R (section.2.64) 326 0 R] /Limits [(section.2.6) (section.2.64)] >> endobj 2328 0 obj << /Names [(section.2.65) 330 0 R (section.2.66) 334 0 R (section.2.67) 338 0 R (section.2.68) 342 0 R (section.2.69) 346 0 R (section.2.7) 98 0 R] /Limits [(section.2.65) (section.2.7)] >> endobj 2329 0 obj << /Names [(section.2.70) 350 0 R (section.2.71) 354 0 R (section.2.72) 358 0 R (section.2.73) 362 0 R (section.2.74) 366 0 R (section.2.75) 370 0 R] /Limits [(section.2.70) (section.2.75)] >> endobj 2330 0 obj << /Names [(section.2.76) 374 0 R (section.2.77) 378 0 R (section.2.78) 382 0 R (section.2.79) 386 0 R (section.2.8) 102 0 R (section.2.80) 390 0 R] /Limits [(section.2.76) (section.2.80)] >> endobj 2331 0 obj << /Names [(section.2.81) 394 0 R (section.2.82) 398 0 R (section.2.83) 402 0 R (section.2.84) 406 0 R (section.2.85) 410 0 R (section.2.86) 414 0 R] /Limits [(section.2.81) (section.2.86)] >> endobj 2332 0 obj << /Names [(section.2.87) 418 0 R (section.2.88) 422 0 R (section.2.89) 426 0 R (section.2.9) 106 0 R (section.2.90) 430 0 R (section.2.91) 434 0 R] /Limits [(section.2.87) (section.2.91)] >> endobj 2333 0 obj << /Names [(section.2.92) 438 0 R (section.2.93) 442 0 R (section.2.94) 446 0 R (section.2.95) 450 0 R (section.2.96) 454 0 R (section.2.97) 458 0 R] /Limits [(section.2.92) (section.2.97)] >> endobj 2334 0 obj << /Names [(section.2.98) 462 0 R (section.2.99) 466 0 R (subsection.1.1.1) 10 0 R (subsection.1.1.2) 14 0 R (subsection.1.1.3) 18 0 R (subsection.1.1.4) 22 0 R] /Limits [(section.2.98) (subsection.1.1.4)] >> endobj 2335 0 obj << /Names [(subsection.1.1.5) 26 0 R (subsection.1.3.1) 38 0 R (subsection.1.3.2) 42 0 R (subsection.1.4.1) 50 0 R (subsection.1.4.2) 54 0 R (subsection.1.5.1) 62 0 R] /Limits [(subsection.1.1.5) (subsection.1.5.1)] >> endobj 2336 0 obj << /Names [(subsection.1.5.2) 66 0 R] /Limits [(subsection.1.5.2) (subsection.1.5.2)] >> endobj 2337 0 obj << /Kids [2174 0 R 2175 0 R 2176 0 R 2177 0 R 2178 0 R 2179 0 R] /Limits [(Doc-Start) (lstlisting.1.-9)] >> endobj 2338 0 obj << /Kids [2180 0 R 2181 0 R 2182 0 R 2183 0 R 2184 0 R 2185 0 R] /Limits [(lstnumber.-1.1) (lstnumber.-11.1)] >> endobj 2339 0 obj << /Kids [2186 0 R 2187 0 R 2188 0 R 2189 0 R 2190 0 R 2191 0 R] /Limits [(lstnumber.-11.2) (lstnumber.-12.37)] >> endobj 2340 0 obj << /Kids [2192 0 R 2193 0 R 2194 0 R 2195 0 R 2196 0 R 2197 0 R] /Limits [(lstnumber.-12.38) (lstnumber.-12.7)] >> endobj 2341 0 obj << /Kids [2198 0 R 2199 0 R 2200 0 R 2201 0 R 2202 0 R 2203 0 R] /Limits [(lstnumber.-12.70) (lstnumber.-13.16)] >> endobj 2342 0 obj << /Kids [2204 0 R 2205 0 R 2206 0 R 2207 0 R 2208 0 R 2209 0 R] /Limits [(lstnumber.-13.17) (lstnumber.-14.12)] >> endobj 2343 0 obj << /Kids [2210 0 R 2211 0 R 2212 0 R 2213 0 R 2214 0 R 2215 0 R] /Limits [(lstnumber.-14.13) (lstnumber.-15.12)] >> endobj 2344 0 obj << /Kids [2216 0 R 2217 0 R 2218 0 R 2219 0 R 2220 0 R 2221 0 R] /Limits [(lstnumber.-15.13) (lstnumber.-15.45)] >> endobj 2345 0 obj << /Kids [2222 0 R 2223 0 R 2224 0 R 2225 0 R 2226 0 R 2227 0 R] /Limits [(lstnumber.-15.46) (lstnumber.-16.120)] >> endobj 2346 0 obj << /Kids [2228 0 R 2229 0 R 2230 0 R 2231 0 R 2232 0 R 2233 0 R] /Limits [(lstnumber.-16.121) (lstnumber.-16.4)] >> endobj 2347 0 obj << /Kids [2234 0 R 2235 0 R 2236 0 R 2237 0 R 2238 0 R 2239 0 R] /Limits [(lstnumber.-16.40) (lstnumber.-16.72)] >> endobj 2348 0 obj << /Kids [2240 0 R 2241 0 R 2242 0 R 2243 0 R 2244 0 R 2245 0 R] /Limits [(lstnumber.-16.73) (lstnumber.-17.15)] >> endobj 2349 0 obj << /Kids [2246 0 R 2247 0 R 2248 0 R 2249 0 R 2250 0 R 2251 0 R] /Limits [(lstnumber.-17.16) (lstnumber.-17.48)] >> endobj 2350 0 obj << /Kids [2252 0 R 2253 0 R 2254 0 R 2255 0 R 2256 0 R 2257 0 R] /Limits [(lstnumber.-17.49) (lstnumber.-18.36)] >> endobj 2351 0 obj << /Kids [2258 0 R 2259 0 R 2260 0 R 2261 0 R 2262 0 R 2263 0 R] /Limits [(lstnumber.-18.37) (lstnumber.-19.34)] >> endobj 2352 0 obj << /Kids [2264 0 R 2265 0 R 2266 0 R 2267 0 R 2268 0 R 2269 0 R] /Limits [(lstnumber.-19.35) (lstnumber.-2.21)] >> endobj 2353 0 obj << /Kids [2270 0 R 2271 0 R 2272 0 R 2273 0 R 2274 0 R 2275 0 R] /Limits [(lstnumber.-2.22) (lstnumber.-6.6)] >> endobj 2354 0 obj << /Kids [2276 0 R 2277 0 R 2278 0 R 2279 0 R 2280 0 R 2281 0 R] /Limits [(lstnumber.-6.7) (page.12)] >> endobj 2355 0 obj << /Kids [2282 0 R 2283 0 R 2284 0 R 2285 0 R 2286 0 R 2287 0 R] /Limits [(page.120) (page.4)] >> endobj 2356 0 obj << /Kids [2288 0 R 2289 0 R 2290 0 R 2291 0 R 2292 0 R 2293 0 R] /Limits [(page.40) (page.72)] >> endobj 2357 0 obj << /Kids [2294 0 R 2295 0 R 2296 0 R 2297 0 R 2298 0 R 2299 0 R] /Limits [(page.73) (section*.14)] >> endobj 2358 0 obj << /Kids [2300 0 R 2301 0 R 2302 0 R 2303 0 R 2304 0 R 2305 0 R] /Limits [(section*.15) (section*.51)] >> endobj 2359 0 obj << /Kids [2306 0 R 2307 0 R 2308 0 R 2309 0 R 2310 0 R 2311 0 R] /Limits [(section*.52) (section*.87)] >> endobj 2360 0 obj << /Kids [2312 0 R 2313 0 R 2314 0 R 2315 0 R 2316 0 R 2317 0 R] /Limits [(section*.88) (section.2.115)] >> endobj 2361 0 obj << /Kids [2318 0 R 2319 0 R 2320 0 R 2321 0 R 2322 0 R 2323 0 R] /Limits [(section.2.116) (section.2.42)] >> endobj 2362 0 obj << /Kids [2324 0 R 2325 0 R 2326 0 R 2327 0 R 2328 0 R 2329 0 R] /Limits [(section.2.43) (section.2.75)] >> endobj 2363 0 obj << /Kids [2330 0 R 2331 0 R 2332 0 R 2333 0 R 2334 0 R 2335 0 R] /Limits [(section.2.76) (subsection.1.5.1)] >> endobj 2364 0 obj << /Kids [2336 0 R] /Limits [(subsection.1.5.2) (subsection.1.5.2)] >> endobj 2365 0 obj << /Kids [2337 0 R 2338 0 R 2339 0 R 2340 0 R 2341 0 R 2342 0 R] /Limits [(Doc-Start) (lstnumber.-14.12)] >> endobj 2366 0 obj << /Kids [2343 0 R 2344 0 R 2345 0 R 2346 0 R 2347 0 R 2348 0 R] /Limits [(lstnumber.-14.13) (lstnumber.-17.15)] >> endobj 2367 0 obj << /Kids [2349 0 R 2350 0 R 2351 0 R 2352 0 R 2353 0 R 2354 0 R] /Limits [(lstnumber.-17.16) (page.12)] >> endobj 2368 0 obj << /Kids [2355 0 R 2356 0 R 2357 0 R 2358 0 R 2359 0 R 2360 0 R] /Limits [(page.120) (section.2.115)] >> endobj 2369 0 obj << /Kids [2361 0 R 2362 0 R 2363 0 R 2364 0 R] /Limits [(section.2.116) (subsection.1.5.2)] >> endobj 2370 0 obj << /Kids [2365 0 R 2366 0 R 2367 0 R 2368 0 R 2369 0 R] /Limits [(Doc-Start) (subsection.1.5.2)] >> endobj 2371 0 obj << /Dests 2370 0 R >> endobj 2372 0 obj << /Type /Catalog /Pages 2172 0 R /Outlines 2173 0 R /Names 2371 0 R /PageMode/UseOutlines /OpenAction 541 0 R >> endobj 2373 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords() /CreationDate (D:20120823211054+02'00') /ModDate (D:20120823211054+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 2374 0000000000 65535 f 0000000015 00000 n 0000042625 00000 n 0000996794 00000 n 0000000060 00000 n 0000000094 00000 n 0000042684 00000 n 0000996687 00000 n 0000000141 00000 n 0000000167 00000 n 0000042743 00000 n 0000996615 00000 n 0000000219 00000 n 0000000264 00000 n 0000042803 00000 n 0000996529 00000 n 0000000317 00000 n 0000000351 00000 n 0000189299 00000 n 0000996443 00000 n 0000000404 00000 n 0000000441 00000 n 0000269335 00000 n 0000996357 00000 n 0000000494 00000 n 0000000523 00000 n 0000280497 00000 n 0000996284 00000 n 0000000576 00000 n 0000000601 00000 n 0000378678 00000 n 0000996199 00000 n 0000000649 00000 n 0000000686 00000 n 0000381807 00000 n 0000996076 00000 n 0000000734 00000 n 0000000777 00000 n 0000381867 00000 n 0000996002 00000 n 0000000830 00000 n 0000000897 00000 n 0000397364 00000 n 0000995928 00000 n 0000000950 00000 n 0000000993 00000 n 0000417297 00000 n 0000995805 00000 n 0000001041 00000 n 0000001073 00000 n 0000434364 00000 n 0000995731 00000 n 0000001126 00000 n 0000001176 00000 n 0000462937 00000 n 0000995657 00000 n 0000001229 00000 n 0000001279 00000 n 0000486769 00000 n 0000995547 00000 n 0000001327 00000 n 0000001354 00000 n 0000486829 00000 n 0000995473 00000 n 0000001407 00000 n 0000001480 00000 n 0000542779 00000 n 0000995399 00000 n 0000001533 00000 n 0000001609 00000 n 0000581711 00000 n 0000995284 00000 n 0000001655 00000 n 0000001687 00000 n 0000603385 00000 n 0000995210 00000 n 0000001735 00000 n 0000001768 00000 n 0000605716 00000 n 0000995123 00000 n 0000001816 00000 n 0000001859 00000 n 0000605840 00000 n 0000995036 00000 n 0000001907 00000 n 0000001942 00000 n 0000613587 00000 n 0000994949 00000 n 0000001990 00000 n 0000002029 00000 n 0000613710 00000 n 0000994862 00000 n 0000002077 00000 n 0000002109 00000 n 0000618989 00000 n 0000994775 00000 n 0000002157 00000 n 0000002198 00000 n 0000619050 00000 n 0000994686 00000 n 0000002246 00000 n 0000002285 00000 n 0000621919 00000 n 0000994595 00000 n 0000002334 00000 n 0000002368 00000 n 0000626750 00000 n 0000994503 00000 n 0000002417 00000 n 0000002450 00000 n 0000629665 00000 n 0000994411 00000 n 0000002500 00000 n 0000002537 00000 n 0000629790 00000 n 0000994319 00000 n 0000002587 00000 n 0000002624 00000 n 0000632358 00000 n 0000994227 00000 n 0000002674 00000 n 0000002708 00000 n 0000632483 00000 n 0000994135 00000 n 0000002758 00000 n 0000002804 00000 n 0000632607 00000 n 0000994043 00000 n 0000002854 00000 n 0000002897 00000 n 0000635852 00000 n 0000993951 00000 n 0000002947 00000 n 0000002988 00000 n 0000638054 00000 n 0000993859 00000 n 0000003038 00000 n 0000003071 00000 n 0000638179 00000 n 0000993767 00000 n 0000003121 00000 n 0000003160 00000 n 0000638304 00000 n 0000993675 00000 n 0000003210 00000 n 0000003247 00000 n 0000640669 00000 n 0000993583 00000 n 0000003297 00000 n 0000003336 00000 n 0000640793 00000 n 0000993491 00000 n 0000003386 00000 n 0000003434 00000 n 0000643780 00000 n 0000993399 00000 n 0000003484 00000 n 0000003536 00000 n 0000643905 00000 n 0000993307 00000 n 0000003586 00000 n 0000003621 00000 n 0000646465 00000 n 0000993215 00000 n 0000003671 00000 n 0000003704 00000 n 0000649184 00000 n 0000993123 00000 n 0000003754 00000 n 0000003791 00000 n 0000649246 00000 n 0000993031 00000 n 0000003841 00000 n 0000003876 00000 n 0000649371 00000 n 0000992939 00000 n 0000003926 00000 n 0000003960 00000 n 0000656570 00000 n 0000992847 00000 n 0000004010 00000 n 0000004051 00000 n 0000665120 00000 n 0000992755 00000 n 0000004101 00000 n 0000004142 00000 n 0000673180 00000 n 0000992663 00000 n 0000004192 00000 n 0000004232 00000 n 0000678644 00000 n 0000992571 00000 n 0000004282 00000 n 0000004322 00000 n 0000681307 00000 n 0000992479 00000 n 0000004372 00000 n 0000004405 00000 n 0000684260 00000 n 0000992387 00000 n 0000004455 00000 n 0000004503 00000 n 0000684385 00000 n 0000992295 00000 n 0000004553 00000 n 0000004593 00000 n 0000687349 00000 n 0000992203 00000 n 0000004643 00000 n 0000004689 00000 n 0000690111 00000 n 0000992111 00000 n 0000004739 00000 n 0000004778 00000 n 0000701794 00000 n 0000992019 00000 n 0000004828 00000 n 0000004875 00000 n 0000701856 00000 n 0000991927 00000 n 0000004925 00000 n 0000004957 00000 n 0000704859 00000 n 0000991835 00000 n 0000005007 00000 n 0000005047 00000 n 0000708242 00000 n 0000991743 00000 n 0000005097 00000 n 0000005138 00000 n 0000708367 00000 n 0000991651 00000 n 0000005188 00000 n 0000005226 00000 n 0000714561 00000 n 0000991559 00000 n 0000005276 00000 n 0000005315 00000 n 0000714685 00000 n 0000991467 00000 n 0000005365 00000 n 0000005404 00000 n 0000714810 00000 n 0000991375 00000 n 0000005454 00000 n 0000005494 00000 n 0000717774 00000 n 0000991283 00000 n 0000005544 00000 n 0000005582 00000 n 0000720602 00000 n 0000991191 00000 n 0000005632 00000 n 0000005668 00000 n 0000729584 00000 n 0000991099 00000 n 0000005718 00000 n 0000005753 00000 n 0000735252 00000 n 0000991007 00000 n 0000005803 00000 n 0000005844 00000 n 0000735377 00000 n 0000990915 00000 n 0000005894 00000 n 0000005931 00000 n 0000735502 00000 n 0000990823 00000 n 0000005981 00000 n 0000006027 00000 n 0000738352 00000 n 0000990731 00000 n 0000006077 00000 n 0000006117 00000 n 0000741251 00000 n 0000990639 00000 n 0000006167 00000 n 0000006211 00000 n 0000741313 00000 n 0000990547 00000 n 0000006261 00000 n 0000006295 00000 n 0000743868 00000 n 0000990455 00000 n 0000006345 00000 n 0000006379 00000 n 0000746722 00000 n 0000990363 00000 n 0000006429 00000 n 0000006470 00000 n 0000746846 00000 n 0000990271 00000 n 0000006520 00000 n 0000006558 00000 n 0000749423 00000 n 0000990179 00000 n 0000006608 00000 n 0000006649 00000 n 0000749485 00000 n 0000990087 00000 n 0000006699 00000 n 0000006736 00000 n 0000752068 00000 n 0000989995 00000 n 0000006786 00000 n 0000006823 00000 n 0000752130 00000 n 0000989903 00000 n 0000006873 00000 n 0000006908 00000 n 0000752192 00000 n 0000989811 00000 n 0000006958 00000 n 0000007004 00000 n 0000754602 00000 n 0000989719 00000 n 0000007054 00000 n 0000007093 00000 n 0000754726 00000 n 0000989627 00000 n 0000007143 00000 n 0000007179 00000 n 0000754851 00000 n 0000989535 00000 n 0000007229 00000 n 0000007267 00000 n 0000761075 00000 n 0000989443 00000 n 0000007317 00000 n 0000007360 00000 n 0000761137 00000 n 0000989351 00000 n 0000007410 00000 n 0000007449 00000 n 0000761262 00000 n 0000989259 00000 n 0000007499 00000 n 0000007533 00000 n 0000773804 00000 n 0000989167 00000 n 0000007583 00000 n 0000007623 00000 n 0000779703 00000 n 0000989075 00000 n 0000007673 00000 n 0000007706 00000 n 0000779828 00000 n 0000988983 00000 n 0000007756 00000 n 0000007789 00000 n 0000781905 00000 n 0000988891 00000 n 0000007839 00000 n 0000007877 00000 n 0000782030 00000 n 0000988799 00000 n 0000007927 00000 n 0000007960 00000 n 0000785033 00000 n 0000988707 00000 n 0000008010 00000 n 0000008046 00000 n 0000787494 00000 n 0000988615 00000 n 0000008096 00000 n 0000008130 00000 n 0000787618 00000 n 0000988523 00000 n 0000008180 00000 n 0000008221 00000 n 0000792248 00000 n 0000988431 00000 n 0000008271 00000 n 0000008309 00000 n 0000792372 00000 n 0000988339 00000 n 0000008359 00000 n 0000008399 00000 n 0000796167 00000 n 0000988247 00000 n 0000008449 00000 n 0000008489 00000 n 0000798490 00000 n 0000988155 00000 n 0000008539 00000 n 0000008577 00000 n 0000798614 00000 n 0000988063 00000 n 0000008627 00000 n 0000008663 00000 n 0000801378 00000 n 0000987971 00000 n 0000008713 00000 n 0000008751 00000 n 0000801502 00000 n 0000987879 00000 n 0000008801 00000 n 0000008832 00000 n 0000806288 00000 n 0000987787 00000 n 0000008882 00000 n 0000008918 00000 n 0000809152 00000 n 0000987695 00000 n 0000008968 00000 n 0000009002 00000 n 0000809276 00000 n 0000987603 00000 n 0000009052 00000 n 0000009085 00000 n 0000815058 00000 n 0000987511 00000 n 0000009135 00000 n 0000009174 00000 n 0000818047 00000 n 0000987419 00000 n 0000009224 00000 n 0000009271 00000 n 0000818172 00000 n 0000987327 00000 n 0000009321 00000 n 0000009373 00000 n 0000820746 00000 n 0000987235 00000 n 0000009423 00000 n 0000009456 00000 n 0000823624 00000 n 0000987143 00000 n 0000009506 00000 n 0000009544 00000 n 0000823686 00000 n 0000987051 00000 n 0000009594 00000 n 0000009632 00000 n 0000828998 00000 n 0000986959 00000 n 0000009682 00000 n 0000009721 00000 n 0000829123 00000 n 0000986867 00000 n 0000009771 00000 n 0000009813 00000 n 0000829248 00000 n 0000986775 00000 n 0000009863 00000 n 0000009901 00000 n 0000831671 00000 n 0000986683 00000 n 0000009951 00000 n 0000009992 00000 n 0000831796 00000 n 0000986591 00000 n 0000010042 00000 n 0000010078 00000 n 0000831858 00000 n 0000986499 00000 n 0000010128 00000 n 0000010161 00000 n 0000834508 00000 n 0000986407 00000 n 0000010211 00000 n 0000010245 00000 n 0000834570 00000 n 0000986315 00000 n 0000010295 00000 n 0000010334 00000 n 0000837062 00000 n 0000986223 00000 n 0000010384 00000 n 0000010415 00000 n 0000837124 00000 n 0000986131 00000 n 0000010466 00000 n 0000010502 00000 n 0000837186 00000 n 0000986039 00000 n 0000010553 00000 n 0000010589 00000 n 0000840252 00000 n 0000985947 00000 n 0000010640 00000 n 0000010682 00000 n 0000842521 00000 n 0000985855 00000 n 0000010733 00000 n 0000010764 00000 n 0000842583 00000 n 0000985763 00000 n 0000010815 00000 n 0000010846 00000 n 0000842644 00000 n 0000985671 00000 n 0000010897 00000 n 0000010927 00000 n 0000844801 00000 n 0000985579 00000 n 0000010978 00000 n 0000011021 00000 n 0000844863 00000 n 0000985487 00000 n 0000011072 00000 n 0000011104 00000 n 0000847543 00000 n 0000985395 00000 n 0000011155 00000 n 0000011187 00000 n 0000847605 00000 n 0000985303 00000 n 0000011238 00000 n 0000011275 00000 n 0000850243 00000 n 0000985211 00000 n 0000011326 00000 n 0000011358 00000 n 0000850305 00000 n 0000985119 00000 n 0000011409 00000 n 0000011442 00000 n 0000850366 00000 n 0000985027 00000 n 0000011493 00000 n 0000011526 00000 n 0000850428 00000 n 0000984935 00000 n 0000011577 00000 n 0000011609 00000 n 0000852557 00000 n 0000984843 00000 n 0000011660 00000 n 0000011693 00000 n 0000852618 00000 n 0000984751 00000 n 0000011744 00000 n 0000011778 00000 n 0000852680 00000 n 0000984659 00000 n 0000011829 00000 n 0000011863 00000 n 0000854827 00000 n 0000984581 00000 n 0000011914 00000 n 0000011946 00000 n 0000012433 00000 n 0000012674 00000 n 0000011998 00000 n 0000012552 00000 n 0000012613 00000 n 0000980813 00000 n 0000980228 00000 n 0000980990 00000 n 0000981346 00000 n 0000014360 00000 n 0000014511 00000 n 0000014664 00000 n 0000014822 00000 n 0000014979 00000 n 0000015137 00000 n 0000015295 00000 n 0000015453 00000 n 0000015607 00000 n 0000015760 00000 n 0000015918 00000 n 0000016076 00000 n 0000016230 00000 n 0000016388 00000 n 0000016546 00000 n 0000016700 00000 n 0000016858 00000 n 0000017016 00000 n 0000017165 00000 n 0000017319 00000 n 0000017473 00000 n 0000017625 00000 n 0000017778 00000 n 0000017932 00000 n 0000018086 00000 n 0000018240 00000 n 0000018393 00000 n 0000018547 00000 n 0000018701 00000 n 0000018856 00000 n 0000019011 00000 n 0000019165 00000 n 0000019320 00000 n 0000019475 00000 n 0000019629 00000 n 0000021460 00000 n 0000019904 00000 n 0000013949 00000 n 0000012772 00000 n 0000019784 00000 n 0000019845 00000 n 0000980522 00000 n 0000981166 00000 n 0000021614 00000 n 0000021769 00000 n 0000021923 00000 n 0000022078 00000 n 0000022233 00000 n 0000022387 00000 n 0000022542 00000 n 0000022697 00000 n 0000022851 00000 n 0000023005 00000 n 0000023160 00000 n 0000023315 00000 n 0000023470 00000 n 0000023625 00000 n 0000023780 00000 n 0000023933 00000 n 0000024088 00000 n 0000024243 00000 n 0000024397 00000 n 0000024552 00000 n 0000024707 00000 n 0000024862 00000 n 0000025017 00000 n 0000025171 00000 n 0000025326 00000 n 0000025481 00000 n 0000025636 00000 n 0000025790 00000 n 0000025945 00000 n 0000026100 00000 n 0000026255 00000 n 0000026410 00000 n 0000026565 00000 n 0000026719 00000 n 0000026874 00000 n 0000027029 00000 n 0000027184 00000 n 0000027339 00000 n 0000027494 00000 n 0000027649 00000 n 0000027803 00000 n 0000027958 00000 n 0000028113 00000 n 0000029867 00000 n 0000028329 00000 n 0000020977 00000 n 0000020015 00000 n 0000028268 00000 n 0000030022 00000 n 0000030177 00000 n 0000030331 00000 n 0000030486 00000 n 0000030641 00000 n 0000030796 00000 n 0000030951 00000 n 0000031105 00000 n 0000031260 00000 n 0000031414 00000 n 0000031569 00000 n 0000031724 00000 n 0000031879 00000 n 0000032034 00000 n 0000032189 00000 n 0000032342 00000 n 0000032497 00000 n 0000032652 00000 n 0000032807 00000 n 0000032962 00000 n 0000033115 00000 n 0000033269 00000 n 0000033424 00000 n 0000033579 00000 n 0000033733 00000 n 0000033888 00000 n 0000034043 00000 n 0000034197 00000 n 0000034352 00000 n 0000034507 00000 n 0000034662 00000 n 0000034817 00000 n 0000034972 00000 n 0000035126 00000 n 0000035281 00000 n 0000035436 00000 n 0000035591 00000 n 0000035746 00000 n 0000035902 00000 n 0000036058 00000 n 0000036213 00000 n 0000036369 00000 n 0000036524 00000 n 0000037463 00000 n 0000036741 00000 n 0000029384 00000 n 0000028401 00000 n 0000036680 00000 n 0000037619 00000 n 0000037775 00000 n 0000037930 00000 n 0000038086 00000 n 0000038242 00000 n 0000038398 00000 n 0000038554 00000 n 0000038710 00000 n 0000038864 00000 n 0000039019 00000 n 0000039175 00000 n 0000039392 00000 n 0000037236 00000 n 0000036813 00000 n 0000039331 00000 n 0000042247 00000 n 0000044459 00000 n 0000188952 00000 n 0000042405 00000 n 0000191490 00000 n 0000198341 00000 n 0000189019 00000 n 0000042863 00000 n 0000042100 00000 n 0000039466 00000 n 0000042564 00000 n 0000189238 00000 n 0000269213 00000 n 0000198408 00000 n 0000268882 00000 n 0000268949 00000 n 0000189359 00000 n 0000044305 00000 n 0000042975 00000 n 0000189177 00000 n 0000981464 00000 n 0000188824 00000 n 0000269274 00000 n 0000269394 00000 n 0000191336 00000 n 0000189498 00000 n 0000269152 00000 n 0000193584 00000 n 0000193712 00000 n 0000193850 00000 n 0000194135 00000 n 0000194542 00000 n 0000194739 00000 n 0000194760 00000 n 0000198319 00000 n 0000265674 00000 n 0000265802 00000 n 0000265940 00000 n 0000266177 00000 n 0000266532 00000 n 0000266729 00000 n 0000266750 00000 n 0000268860 00000 n 0000278948 00000 n 0000279107 00000 n 0000271952 00000 n 0000278881 00000 n 0000283724 00000 n 0000347157 00000 n 0000280556 00000 n 0000271790 00000 n 0000269547 00000 n 0000279264 00000 n 0000279325 00000 n 0000279386 00000 n 0000279445 00000 n 0000980668 00000 n 0000279507 00000 n 0000279569 00000 n 0000279631 00000 n 0000279693 00000 n 0000279754 00000 n 0000279816 00000 n 0000279878 00000 n 0000279940 00000 n 0000280002 00000 n 0000280064 00000 n 0000280126 00000 n 0000280188 00000 n 0000280250 00000 n 0000280312 00000 n 0000280374 00000 n 0000280435 00000 n 0000273582 00000 n 0000273710 00000 n 0000273788 00000 n 0000274138 00000 n 0000274276 00000 n 0000274332 00000 n 0000274554 00000 n 0000274803 00000 n 0000275172 00000 n 0000275491 00000 n 0000275511 00000 n 0000275826 00000 n 0000276023 00000 n 0000276044 00000 n 0000276065 00000 n 0000276127 00000 n 0000278859 00000 n 0000347289 00000 n 0000348835 00000 n 0000283590 00000 n 0000280708 00000 n 0000347228 00000 n 0000347350 00000 n 0000347411 00000 n 0000347473 00000 n 0000347535 00000 n 0000347597 00000 n 0000864637 00000 n 0000347659 00000 n 0000347721 00000 n 0000347782 00000 n 0000347844 00000 n 0000347906 00000 n 0000347968 00000 n 0000348030 00000 n 0000348092 00000 n 0000348154 00000 n 0000348216 00000 n 0000348278 00000 n 0000348340 00000 n 0000348402 00000 n 0000348463 00000 n 0000348525 00000 n 0000348587 00000 n 0000348649 00000 n 0000348711 00000 n 0000348773 00000 n 0000322234 00000 n 0000378087 00000 n 0000351172 00000 n 0000378738 00000 n 0000351033 00000 n 0000348995 00000 n 0000378246 00000 n 0000378307 00000 n 0000378368 00000 n 0000378430 00000 n 0000378492 00000 n 0000378554 00000 n 0000378616 00000 n 0000859287 00000 n 0000381588 00000 n 0000385096 00000 n 0000381927 00000 n 0000381434 00000 n 0000378924 00000 n 0000381746 00000 n 0000980376 00000 n 0000397303 00000 n 0000396924 00000 n 0000397083 00000 n 0000400941 00000 n 0000397979 00000 n 0000384934 00000 n 0000382051 00000 n 0000397242 00000 n 0000397424 00000 n 0000397485 00000 n 0000397546 00000 n 0000397608 00000 n 0000397669 00000 n 0000397731 00000 n 0000397793 00000 n 0000397855 00000 n 0000397917 00000 n 0000981582 00000 n 0000396440 00000 n 0000416000 00000 n 0000415779 00000 n 0000419900 00000 n 0000434084 00000 n 0000417357 00000 n 0000400787 00000 n 0000398165 00000 n 0000415939 00000 n 0000416061 00000 n 0000416122 00000 n 0000416183 00000 n 0000416245 00000 n 0000416307 00000 n 0000416369 00000 n 0000416431 00000 n 0000416493 00000 n 0000416555 00000 n 0000416616 00000 n 0000416678 00000 n 0000416740 00000 n 0000416802 00000 n 0000416864 00000 n 0000416926 00000 n 0000416988 00000 n 0000417049 00000 n 0000417111 00000 n 0000417173 00000 n 0000417235 00000 n 0000415132 00000 n 0000434303 00000 n 0000436314 00000 n 0000434424 00000 n 0000419746 00000 n 0000417517 00000 n 0000434242 00000 n 0000433397 00000 n 0000462876 00000 n 0000462997 00000 n 0000436180 00000 n 0000434597 00000 n 0000462815 00000 n 0000461859 00000 n 0000467127 00000 n 0000472410 00000 n 0000469696 00000 n 0000466973 00000 n 0000463158 00000 n 0000467287 00000 n 0000467348 00000 n 0000467409 00000 n 0000467471 00000 n 0000467533 00000 n 0000467595 00000 n 0000467656 00000 n 0000467718 00000 n 0000467779 00000 n 0000467841 00000 n 0000467903 00000 n 0000467964 00000 n 0000468026 00000 n 0000468088 00000 n 0000468149 00000 n 0000468211 00000 n 0000468273 00000 n 0000468334 00000 n 0000468396 00000 n 0000468458 00000 n 0000468520 00000 n 0000468582 00000 n 0000468644 00000 n 0000468706 00000 n 0000468768 00000 n 0000468830 00000 n 0000468891 00000 n 0000468953 00000 n 0000469015 00000 n 0000469077 00000 n 0000469139 00000 n 0000469201 00000 n 0000469263 00000 n 0000469324 00000 n 0000469386 00000 n 0000469448 00000 n 0000469510 00000 n 0000469572 00000 n 0000469634 00000 n 0000486708 00000 n 0000486487 00000 n 0000490301 00000 n 0000487630 00000 n 0000472256 00000 n 0000469807 00000 n 0000486647 00000 n 0000486889 00000 n 0000486950 00000 n 0000487011 00000 n 0000487073 00000 n 0000487135 00000 n 0000487197 00000 n 0000487259 00000 n 0000487321 00000 n 0000487383 00000 n 0000487445 00000 n 0000487507 00000 n 0000487568 00000 n 0000485938 00000 n 0000507431 00000 n 0000509794 00000 n 0000490181 00000 n 0000487804 00000 n 0000507370 00000 n 0000507492 00000 n 0000507554 00000 n 0000507616 00000 n 0000507678 00000 n 0000507740 00000 n 0000507802 00000 n 0000507864 00000 n 0000507926 00000 n 0000507987 00000 n 0000508049 00000 n 0000508111 00000 n 0000508173 00000 n 0000508235 00000 n 0000508297 00000 n 0000508359 00000 n 0000508421 00000 n 0000508483 00000 n 0000508545 00000 n 0000508607 00000 n 0000508668 00000 n 0000508730 00000 n 0000508792 00000 n 0000508854 00000 n 0000508916 00000 n 0000508978 00000 n 0000509041 00000 n 0000509104 00000 n 0000509167 00000 n 0000509228 00000 n 0000509291 00000 n 0000509354 00000 n 0000509417 00000 n 0000509480 00000 n 0000509543 00000 n 0000509606 00000 n 0000509669 00000 n 0000509732 00000 n 0000981700 00000 n 0000517662 00000 n 0000513963 00000 n 0000509929 00000 n 0000514086 00000 n 0000514149 00000 n 0000514213 00000 n 0000514277 00000 n 0000514341 00000 n 0000514405 00000 n 0000514469 00000 n 0000514533 00000 n 0000514596 00000 n 0000514660 00000 n 0000514724 00000 n 0000514788 00000 n 0000514852 00000 n 0000514916 00000 n 0000514980 00000 n 0000515044 00000 n 0000515108 00000 n 0000515172 00000 n 0000515236 00000 n 0000515299 00000 n 0000515363 00000 n 0000515427 00000 n 0000515491 00000 n 0000515555 00000 n 0000515619 00000 n 0000515683 00000 n 0000515747 00000 n 0000515811 00000 n 0000515874 00000 n 0000515938 00000 n 0000516002 00000 n 0000516066 00000 n 0000516130 00000 n 0000516194 00000 n 0000516258 00000 n 0000516322 00000 n 0000516386 00000 n 0000516450 00000 n 0000516514 00000 n 0000516577 00000 n 0000516641 00000 n 0000516705 00000 n 0000516769 00000 n 0000516833 00000 n 0000516897 00000 n 0000516961 00000 n 0000517025 00000 n 0000517089 00000 n 0000517152 00000 n 0000517216 00000 n 0000517279 00000 n 0000517342 00000 n 0000517406 00000 n 0000517470 00000 n 0000517534 00000 n 0000517598 00000 n 0000524966 00000 n 0000521140 00000 n 0000517787 00000 n 0000521263 00000 n 0000521326 00000 n 0000521390 00000 n 0000521454 00000 n 0000521518 00000 n 0000521582 00000 n 0000521646 00000 n 0000521710 00000 n 0000521773 00000 n 0000521837 00000 n 0000521901 00000 n 0000521965 00000 n 0000522029 00000 n 0000522093 00000 n 0000522157 00000 n 0000522221 00000 n 0000522285 00000 n 0000522349 00000 n 0000522413 00000 n 0000522476 00000 n 0000522540 00000 n 0000522604 00000 n 0000522668 00000 n 0000522732 00000 n 0000522796 00000 n 0000522860 00000 n 0000522924 00000 n 0000522988 00000 n 0000523051 00000 n 0000523115 00000 n 0000523179 00000 n 0000523243 00000 n 0000523307 00000 n 0000523371 00000 n 0000523435 00000 n 0000523499 00000 n 0000523563 00000 n 0000523626 00000 n 0000523689 00000 n 0000523753 00000 n 0000523817 00000 n 0000523881 00000 n 0000523943 00000 n 0000524007 00000 n 0000524071 00000 n 0000524135 00000 n 0000524199 00000 n 0000524263 00000 n 0000524327 00000 n 0000524391 00000 n 0000524455 00000 n 0000524518 00000 n 0000524582 00000 n 0000524646 00000 n 0000524710 00000 n 0000524774 00000 n 0000524838 00000 n 0000524902 00000 n 0000532412 00000 n 0000528586 00000 n 0000525091 00000 n 0000528709 00000 n 0000528772 00000 n 0000528836 00000 n 0000528900 00000 n 0000528964 00000 n 0000529028 00000 n 0000529092 00000 n 0000529156 00000 n 0000529219 00000 n 0000529283 00000 n 0000529347 00000 n 0000529411 00000 n 0000529475 00000 n 0000529539 00000 n 0000529603 00000 n 0000529667 00000 n 0000529731 00000 n 0000529795 00000 n 0000529858 00000 n 0000529921 00000 n 0000529985 00000 n 0000530049 00000 n 0000530112 00000 n 0000530176 00000 n 0000530240 00000 n 0000530304 00000 n 0000530368 00000 n 0000530432 00000 n 0000530496 00000 n 0000530560 00000 n 0000530624 00000 n 0000530687 00000 n 0000530751 00000 n 0000530815 00000 n 0000530879 00000 n 0000530943 00000 n 0000531007 00000 n 0000531071 00000 n 0000531135 00000 n 0000531199 00000 n 0000531263 00000 n 0000531327 00000 n 0000531389 00000 n 0000531453 00000 n 0000531517 00000 n 0000531581 00000 n 0000531645 00000 n 0000531709 00000 n 0000531773 00000 n 0000531837 00000 n 0000531901 00000 n 0000531964 00000 n 0000532028 00000 n 0000532092 00000 n 0000532156 00000 n 0000532220 00000 n 0000532284 00000 n 0000532348 00000 n 0000541725 00000 n 0000535788 00000 n 0000544499 00000 n 0000535644 00000 n 0000532537 00000 n 0000541886 00000 n 0000541949 00000 n 0000542012 00000 n 0000542076 00000 n 0000542140 00000 n 0000542204 00000 n 0000542268 00000 n 0000542332 00000 n 0000542396 00000 n 0000542460 00000 n 0000542524 00000 n 0000542587 00000 n 0000542651 00000 n 0000542715 00000 n 0000542840 00000 n 0000542903 00000 n 0000542966 00000 n 0000543030 00000 n 0000543094 00000 n 0000543158 00000 n 0000543222 00000 n 0000543286 00000 n 0000543349 00000 n 0000543413 00000 n 0000543477 00000 n 0000543541 00000 n 0000543605 00000 n 0000543669 00000 n 0000543733 00000 n 0000543797 00000 n 0000543861 00000 n 0000543925 00000 n 0000543989 00000 n 0000544051 00000 n 0000544115 00000 n 0000544179 00000 n 0000544243 00000 n 0000544307 00000 n 0000544371 00000 n 0000544435 00000 n 0000552763 00000 n 0000548615 00000 n 0000544662 00000 n 0000548738 00000 n 0000548801 00000 n 0000548865 00000 n 0000548929 00000 n 0000548993 00000 n 0000549057 00000 n 0000549121 00000 n 0000549185 00000 n 0000549248 00000 n 0000549312 00000 n 0000549376 00000 n 0000549440 00000 n 0000549504 00000 n 0000549568 00000 n 0000549632 00000 n 0000549696 00000 n 0000549760 00000 n 0000549824 00000 n 0000549888 00000 n 0000549951 00000 n 0000550015 00000 n 0000550079 00000 n 0000550143 00000 n 0000550207 00000 n 0000550271 00000 n 0000550335 00000 n 0000550399 00000 n 0000550463 00000 n 0000550526 00000 n 0000550590 00000 n 0000550654 00000 n 0000550718 00000 n 0000550782 00000 n 0000550846 00000 n 0000550910 00000 n 0000550974 00000 n 0000551038 00000 n 0000551102 00000 n 0000551166 00000 n 0000551229 00000 n 0000551293 00000 n 0000551357 00000 n 0000551421 00000 n 0000551485 00000 n 0000551549 00000 n 0000551613 00000 n 0000551677 00000 n 0000551741 00000 n 0000551804 00000 n 0000551868 00000 n 0000551932 00000 n 0000551996 00000 n 0000552060 00000 n 0000552124 00000 n 0000552188 00000 n 0000552252 00000 n 0000552316 00000 n 0000552380 00000 n 0000552444 00000 n 0000552507 00000 n 0000552571 00000 n 0000552635 00000 n 0000552699 00000 n 0000560148 00000 n 0000556388 00000 n 0000552862 00000 n 0000556511 00000 n 0000556574 00000 n 0000556638 00000 n 0000556702 00000 n 0000556766 00000 n 0000556830 00000 n 0000556894 00000 n 0000556958 00000 n 0000557021 00000 n 0000557085 00000 n 0000557149 00000 n 0000557213 00000 n 0000557277 00000 n 0000557341 00000 n 0000557405 00000 n 0000557469 00000 n 0000557533 00000 n 0000557597 00000 n 0000557661 00000 n 0000557724 00000 n 0000557788 00000 n 0000557852 00000 n 0000557916 00000 n 0000557980 00000 n 0000558044 00000 n 0000558108 00000 n 0000558172 00000 n 0000558236 00000 n 0000558299 00000 n 0000558363 00000 n 0000558427 00000 n 0000558491 00000 n 0000558555 00000 n 0000558619 00000 n 0000558683 00000 n 0000558747 00000 n 0000558811 00000 n 0000558875 00000 n 0000558939 00000 n 0000559002 00000 n 0000559066 00000 n 0000559130 00000 n 0000559193 00000 n 0000559256 00000 n 0000559320 00000 n 0000559384 00000 n 0000559448 00000 n 0000559512 00000 n 0000559576 00000 n 0000559636 00000 n 0000559700 00000 n 0000559764 00000 n 0000559828 00000 n 0000559892 00000 n 0000559956 00000 n 0000560020 00000 n 0000560084 00000 n 0000981824 00000 n 0000567431 00000 n 0000563605 00000 n 0000560273 00000 n 0000563728 00000 n 0000563791 00000 n 0000563855 00000 n 0000563919 00000 n 0000563983 00000 n 0000564047 00000 n 0000564111 00000 n 0000564175 00000 n 0000564238 00000 n 0000564302 00000 n 0000564366 00000 n 0000564430 00000 n 0000564494 00000 n 0000564558 00000 n 0000564622 00000 n 0000564686 00000 n 0000564750 00000 n 0000564814 00000 n 0000564878 00000 n 0000564941 00000 n 0000565005 00000 n 0000565069 00000 n 0000565133 00000 n 0000565197 00000 n 0000565261 00000 n 0000565325 00000 n 0000565389 00000 n 0000565453 00000 n 0000565516 00000 n 0000565580 00000 n 0000565644 00000 n 0000565708 00000 n 0000565772 00000 n 0000565836 00000 n 0000565900 00000 n 0000565964 00000 n 0000566028 00000 n 0000566091 00000 n 0000566154 00000 n 0000566218 00000 n 0000566282 00000 n 0000566346 00000 n 0000566408 00000 n 0000566472 00000 n 0000566536 00000 n 0000566600 00000 n 0000566664 00000 n 0000566728 00000 n 0000566792 00000 n 0000566856 00000 n 0000566920 00000 n 0000566983 00000 n 0000567047 00000 n 0000567111 00000 n 0000567175 00000 n 0000567239 00000 n 0000567303 00000 n 0000567367 00000 n 0000574952 00000 n 0000571129 00000 n 0000567556 00000 n 0000571252 00000 n 0000571315 00000 n 0000571379 00000 n 0000571443 00000 n 0000571507 00000 n 0000571571 00000 n 0000571635 00000 n 0000571699 00000 n 0000571762 00000 n 0000571826 00000 n 0000571890 00000 n 0000571954 00000 n 0000572018 00000 n 0000572082 00000 n 0000572146 00000 n 0000572210 00000 n 0000572274 00000 n 0000572338 00000 n 0000572402 00000 n 0000572465 00000 n 0000572527 00000 n 0000572589 00000 n 0000572652 00000 n 0000572716 00000 n 0000572780 00000 n 0000572844 00000 n 0000572908 00000 n 0000572972 00000 n 0000573036 00000 n 0000573100 00000 n 0000573164 00000 n 0000573227 00000 n 0000573291 00000 n 0000573355 00000 n 0000573419 00000 n 0000573483 00000 n 0000573547 00000 n 0000573611 00000 n 0000573675 00000 n 0000573739 00000 n 0000573803 00000 n 0000573867 00000 n 0000573929 00000 n 0000573993 00000 n 0000574057 00000 n 0000574121 00000 n 0000574185 00000 n 0000574249 00000 n 0000574313 00000 n 0000574377 00000 n 0000574441 00000 n 0000574504 00000 n 0000574568 00000 n 0000574632 00000 n 0000574696 00000 n 0000574760 00000 n 0000574824 00000 n 0000574888 00000 n 0000577135 00000 n 0000576118 00000 n 0000575077 00000 n 0000576241 00000 n 0000576304 00000 n 0000576368 00000 n 0000576432 00000 n 0000576496 00000 n 0000576560 00000 n 0000576624 00000 n 0000576688 00000 n 0000576751 00000 n 0000576815 00000 n 0000576879 00000 n 0000576943 00000 n 0000577007 00000 n 0000577071 00000 n 0000578384 00000 n 0000578539 00000 n 0000578694 00000 n 0000578849 00000 n 0000579003 00000 n 0000579158 00000 n 0000579313 00000 n 0000579467 00000 n 0000579621 00000 n 0000579777 00000 n 0000579933 00000 n 0000580089 00000 n 0000580245 00000 n 0000580401 00000 n 0000580557 00000 n 0000580713 00000 n 0000580869 00000 n 0000581024 00000 n 0000581180 00000 n 0000581336 00000 n 0000581492 00000 n 0000583166 00000 n 0000583322 00000 n 0000583477 00000 n 0000581835 00000 n 0000578060 00000 n 0000577221 00000 n 0000581648 00000 n 0000581772 00000 n 0000583633 00000 n 0000583789 00000 n 0000583945 00000 n 0000584100 00000 n 0000584256 00000 n 0000584411 00000 n 0000584567 00000 n 0000584723 00000 n 0000584879 00000 n 0000585034 00000 n 0000585190 00000 n 0000585345 00000 n 0000585501 00000 n 0000585656 00000 n 0000585812 00000 n 0000585968 00000 n 0000586124 00000 n 0000586280 00000 n 0000586436 00000 n 0000586591 00000 n 0000586747 00000 n 0000586903 00000 n 0000587059 00000 n 0000587215 00000 n 0000588745 00000 n 0000588901 00000 n 0000589056 00000 n 0000587434 00000 n 0000582788 00000 n 0000581947 00000 n 0000587371 00000 n 0000589212 00000 n 0000589368 00000 n 0000589524 00000 n 0000589680 00000 n 0000589836 00000 n 0000589991 00000 n 0000590147 00000 n 0000590303 00000 n 0000590459 00000 n 0000590614 00000 n 0000590770 00000 n 0000590925 00000 n 0000591081 00000 n 0000591236 00000 n 0000591392 00000 n 0000591548 00000 n 0000591704 00000 n 0000591860 00000 n 0000592016 00000 n 0000592172 00000 n 0000592328 00000 n 0000592484 00000 n 0000592640 00000 n 0000592796 00000 n 0000594379 00000 n 0000594535 00000 n 0000594691 00000 n 0000593015 00000 n 0000588367 00000 n 0000587533 00000 n 0000592952 00000 n 0000981949 00000 n 0000594846 00000 n 0000595002 00000 n 0000595158 00000 n 0000595312 00000 n 0000595468 00000 n 0000595624 00000 n 0000595780 00000 n 0000595936 00000 n 0000596092 00000 n 0000596248 00000 n 0000596404 00000 n 0000596560 00000 n 0000596715 00000 n 0000596871 00000 n 0000597027 00000 n 0000597183 00000 n 0000597339 00000 n 0000597495 00000 n 0000597651 00000 n 0000597807 00000 n 0000597963 00000 n 0000598120 00000 n 0000600811 00000 n 0000600968 00000 n 0000601125 00000 n 0000598403 00000 n 0000594019 00000 n 0000593114 00000 n 0000598277 00000 n 0000598340 00000 n 0000601282 00000 n 0000601439 00000 n 0000601596 00000 n 0000601753 00000 n 0000601910 00000 n 0000602067 00000 n 0000602224 00000 n 0000602381 00000 n 0000602538 00000 n 0000602695 00000 n 0000602852 00000 n 0000603009 00000 n 0000603165 00000 n 0000603445 00000 n 0000600532 00000 n 0000598515 00000 n 0000603322 00000 n 0000605964 00000 n 0000605530 00000 n 0000603557 00000 n 0000605653 00000 n 0000605777 00000 n 0000605901 00000 n 0000608423 00000 n 0000608237 00000 n 0000606076 00000 n 0000608360 00000 n 0000611061 00000 n 0000610875 00000 n 0000608509 00000 n 0000610998 00000 n 0000613834 00000 n 0000613401 00000 n 0000611147 00000 n 0000613524 00000 n 0000613648 00000 n 0000613771 00000 n 0000982074 00000 n 0000616603 00000 n 0000616417 00000 n 0000613933 00000 n 0000616540 00000 n 0000619111 00000 n 0000618803 00000 n 0000616689 00000 n 0000618926 00000 n 0000622044 00000 n 0000621670 00000 n 0000619210 00000 n 0000621793 00000 n 0000621856 00000 n 0000621981 00000 n 0000624482 00000 n 0000624296 00000 n 0000622143 00000 n 0000624419 00000 n 0000626875 00000 n 0000626564 00000 n 0000624568 00000 n 0000626687 00000 n 0000626812 00000 n 0000629852 00000 n 0000629479 00000 n 0000626974 00000 n 0000629602 00000 n 0000629727 00000 n 0000982199 00000 n 0000632669 00000 n 0000632109 00000 n 0000629964 00000 n 0000632232 00000 n 0000632295 00000 n 0000632420 00000 n 0000632544 00000 n 0000635977 00000 n 0000635603 00000 n 0000632781 00000 n 0000635726 00000 n 0000635789 00000 n 0000635914 00000 n 0000638366 00000 n 0000637868 00000 n 0000636076 00000 n 0000637991 00000 n 0000638116 00000 n 0000638241 00000 n 0000640855 00000 n 0000640420 00000 n 0000638465 00000 n 0000640543 00000 n 0000640606 00000 n 0000640730 00000 n 0000644030 00000 n 0000643531 00000 n 0000640954 00000 n 0000643654 00000 n 0000643717 00000 n 0000643842 00000 n 0000643967 00000 n 0000646590 00000 n 0000646279 00000 n 0000644129 00000 n 0000646402 00000 n 0000646527 00000 n 0000982324 00000 n 0000649433 00000 n 0000648998 00000 n 0000646689 00000 n 0000649121 00000 n 0000649308 00000 n 0000652027 00000 n 0000651778 00000 n 0000649545 00000 n 0000651901 00000 n 0000651964 00000 n 0000654295 00000 n 0000654109 00000 n 0000652126 00000 n 0000654232 00000 n 0000656632 00000 n 0000656384 00000 n 0000654394 00000 n 0000656507 00000 n 0000659272 00000 n 0000659023 00000 n 0000656731 00000 n 0000659146 00000 n 0000659209 00000 n 0000662431 00000 n 0000662245 00000 n 0000659371 00000 n 0000662368 00000 n 0000982449 00000 n 0000665245 00000 n 0000664934 00000 n 0000662517 00000 n 0000665057 00000 n 0000665182 00000 n 0000668166 00000 n 0000667980 00000 n 0000665344 00000 n 0000668103 00000 n 0000670343 00000 n 0000670157 00000 n 0000668252 00000 n 0000670280 00000 n 0000673305 00000 n 0000672994 00000 n 0000670429 00000 n 0000673117 00000 n 0000673242 00000 n 0000676051 00000 n 0000675865 00000 n 0000673404 00000 n 0000675988 00000 n 0000678769 00000 n 0000678458 00000 n 0000676137 00000 n 0000678581 00000 n 0000678706 00000 n 0000982574 00000 n 0000681432 00000 n 0000681121 00000 n 0000678868 00000 n 0000681244 00000 n 0000681369 00000 n 0000684510 00000 n 0000684074 00000 n 0000681557 00000 n 0000684197 00000 n 0000684322 00000 n 0000684447 00000 n 0000687410 00000 n 0000687163 00000 n 0000684609 00000 n 0000687286 00000 n 0000690172 00000 n 0000689862 00000 n 0000687509 00000 n 0000689985 00000 n 0000690048 00000 n 0000693263 00000 n 0000693014 00000 n 0000690271 00000 n 0000693137 00000 n 0000693200 00000 n 0000980082 00000 n 0000696003 00000 n 0000695817 00000 n 0000693376 00000 n 0000695940 00000 n 0000982699 00000 n 0000699158 00000 n 0000698972 00000 n 0000696089 00000 n 0000699095 00000 n 0000701917 00000 n 0000701608 00000 n 0000699244 00000 n 0000701731 00000 n 0000704984 00000 n 0000704610 00000 n 0000702029 00000 n 0000704733 00000 n 0000704796 00000 n 0000704921 00000 n 0000708429 00000 n 0000708056 00000 n 0000705096 00000 n 0000708179 00000 n 0000708304 00000 n 0000712041 00000 n 0000711792 00000 n 0000708528 00000 n 0000711915 00000 n 0000711978 00000 n 0000714872 00000 n 0000714375 00000 n 0000712140 00000 n 0000714498 00000 n 0000714623 00000 n 0000714747 00000 n 0000982824 00000 n 0000717899 00000 n 0000717525 00000 n 0000714971 00000 n 0000717648 00000 n 0000717711 00000 n 0000717836 00000 n 0000720664 00000 n 0000720416 00000 n 0000717998 00000 n 0000720539 00000 n 0000723203 00000 n 0000722954 00000 n 0000720763 00000 n 0000723077 00000 n 0000723140 00000 n 0000726495 00000 n 0000726309 00000 n 0000723302 00000 n 0000726432 00000 n 0000729646 00000 n 0000729398 00000 n 0000726581 00000 n 0000729521 00000 n 0000732416 00000 n 0000732167 00000 n 0000729745 00000 n 0000732290 00000 n 0000732353 00000 n 0000982949 00000 n 0000735564 00000 n 0000735066 00000 n 0000732515 00000 n 0000735189 00000 n 0000735314 00000 n 0000735439 00000 n 0000738477 00000 n 0000738103 00000 n 0000735663 00000 n 0000738226 00000 n 0000738289 00000 n 0000738414 00000 n 0000741438 00000 n 0000741065 00000 n 0000738576 00000 n 0000741188 00000 n 0000741375 00000 n 0000743930 00000 n 0000743682 00000 n 0000741537 00000 n 0000743805 00000 n 0000746908 00000 n 0000746536 00000 n 0000744029 00000 n 0000746659 00000 n 0000746783 00000 n 0000749547 00000 n 0000749237 00000 n 0000747007 00000 n 0000749360 00000 n 0000983074 00000 n 0000752254 00000 n 0000751882 00000 n 0000749646 00000 n 0000752005 00000 n 0000754913 00000 n 0000754353 00000 n 0000752353 00000 n 0000754476 00000 n 0000754539 00000 n 0000754664 00000 n 0000754788 00000 n 0000758419 00000 n 0000758170 00000 n 0000755012 00000 n 0000758293 00000 n 0000758356 00000 n 0000761324 00000 n 0000760889 00000 n 0000758518 00000 n 0000761012 00000 n 0000761199 00000 n 0000763643 00000 n 0000763394 00000 n 0000761423 00000 n 0000763517 00000 n 0000763580 00000 n 0000765788 00000 n 0000765602 00000 n 0000763742 00000 n 0000765725 00000 n 0000983199 00000 n 0000768545 00000 n 0000768359 00000 n 0000765874 00000 n 0000768482 00000 n 0000771227 00000 n 0000771041 00000 n 0000768631 00000 n 0000771164 00000 n 0000773929 00000 n 0000773618 00000 n 0000771313 00000 n 0000773741 00000 n 0000773866 00000 n 0000777004 00000 n 0000776818 00000 n 0000774028 00000 n 0000776941 00000 n 0000779953 00000 n 0000779517 00000 n 0000777104 00000 n 0000779640 00000 n 0000779765 00000 n 0000779890 00000 n 0000782092 00000 n 0000781719 00000 n 0000780065 00000 n 0000781842 00000 n 0000781967 00000 n 0000983324 00000 n 0000785095 00000 n 0000784784 00000 n 0000782217 00000 n 0000784907 00000 n 0000784970 00000 n 0000787680 00000 n 0000787245 00000 n 0000785207 00000 n 0000787368 00000 n 0000787431 00000 n 0000787556 00000 n 0000790738 00000 n 0000790489 00000 n 0000787792 00000 n 0000790612 00000 n 0000790675 00000 n 0000792434 00000 n 0000792062 00000 n 0000790837 00000 n 0000792185 00000 n 0000792310 00000 n 0000796229 00000 n 0000795918 00000 n 0000792533 00000 n 0000796041 00000 n 0000796104 00000 n 0000798739 00000 n 0000798241 00000 n 0000796341 00000 n 0000798364 00000 n 0000798427 00000 n 0000798551 00000 n 0000798676 00000 n 0000983449 00000 n 0000801564 00000 n 0000801192 00000 n 0000798838 00000 n 0000801315 00000 n 0000801440 00000 n 0000803822 00000 n 0000803573 00000 n 0000801663 00000 n 0000803696 00000 n 0000803759 00000 n 0000806412 00000 n 0000806102 00000 n 0000803934 00000 n 0000806225 00000 n 0000806350 00000 n 0000809401 00000 n 0000808966 00000 n 0000806524 00000 n 0000809089 00000 n 0000809214 00000 n 0000809338 00000 n 0000812326 00000 n 0000812140 00000 n 0000809513 00000 n 0000812263 00000 n 0000815183 00000 n 0000814872 00000 n 0000812425 00000 n 0000814995 00000 n 0000815120 00000 n 0000983574 00000 n 0000818297 00000 n 0000817861 00000 n 0000815295 00000 n 0000817984 00000 n 0000818109 00000 n 0000818234 00000 n 0000820871 00000 n 0000820560 00000 n 0000818396 00000 n 0000820683 00000 n 0000820808 00000 n 0000823811 00000 n 0000823438 00000 n 0000820970 00000 n 0000823561 00000 n 0000823748 00000 n 0000826475 00000 n 0000826289 00000 n 0000823923 00000 n 0000826412 00000 n 0000829373 00000 n 0000828812 00000 n 0000826561 00000 n 0000828935 00000 n 0000829060 00000 n 0000829185 00000 n 0000829310 00000 n 0000831920 00000 n 0000831485 00000 n 0000829485 00000 n 0000831608 00000 n 0000831733 00000 n 0000983699 00000 n 0000834632 00000 n 0000834322 00000 n 0000832019 00000 n 0000834445 00000 n 0000837248 00000 n 0000836876 00000 n 0000834744 00000 n 0000836999 00000 n 0000840314 00000 n 0000840066 00000 n 0000837360 00000 n 0000840189 00000 n 0000842705 00000 n 0000842335 00000 n 0000840440 00000 n 0000842458 00000 n 0000844925 00000 n 0000844615 00000 n 0000842817 00000 n 0000844738 00000 n 0000847667 00000 n 0000847357 00000 n 0000845037 00000 n 0000847480 00000 n 0000983824 00000 n 0000850490 00000 n 0000850057 00000 n 0000847766 00000 n 0000850180 00000 n 0000852742 00000 n 0000852371 00000 n 0000850589 00000 n 0000852494 00000 n 0000854889 00000 n 0000854641 00000 n 0000852868 00000 n 0000854764 00000 n 0000856321 00000 n 0000856135 00000 n 0000854988 00000 n 0000856258 00000 n 0000856407 00000 n 0000856455 00000 n 0000857009 00000 n 0000857326 00000 n 0000857655 00000 n 0000858067 00000 n 0000858338 00000 n 0000858686 00000 n 0000859005 00000 n 0000859540 00000 n 0000859625 00000 n 0000859781 00000 n 0000859909 00000 n 0000860168 00000 n 0000860416 00000 n 0000860679 00000 n 0000860931 00000 n 0000861157 00000 n 0000861458 00000 n 0000861691 00000 n 0000861895 00000 n 0000862084 00000 n 0000862296 00000 n 0000862522 00000 n 0000862762 00000 n 0000863025 00000 n 0000863246 00000 n 0000863497 00000 n 0000863732 00000 n 0000863943 00000 n 0000864175 00000 n 0000864415 00000 n 0000864891 00000 n 0000865168 00000 n 0000865399 00000 n 0000865720 00000 n 0000979645 00000 n 0000866298 00000 n 0000866770 00000 n 0000867150 00000 n 0000867789 00000 n 0000868420 00000 n 0000868738 00000 n 0000876059 00000 n 0000876307 00000 n 0000892028 00000 n 0000892416 00000 n 0000899785 00000 n 0000900035 00000 n 0000920984 00000 n 0000921507 00000 n 0000935833 00000 n 0000936414 00000 n 0000945304 00000 n 0000945583 00000 n 0000965051 00000 n 0000965625 00000 n 0000979297 00000 n 0000983940 00000 n 0000984063 00000 n 0000984189 00000 n 0000984315 00000 n 0000984414 00000 n 0000984506 00000 n 0000996903 00000 n 0000997112 00000 n 0000997360 00000 n 0000997601 00000 n 0000997847 00000 n 0000998091 00000 n 0000998326 00000 n 0000998559 00000 n 0000998790 00000 n 0000999021 00000 n 0000999264 00000 n 0000999507 00000 n 0000999748 00000 n 0000999983 00000 n 0001000226 00000 n 0001000468 00000 n 0001000711 00000 n 0001000953 00000 n 0001001199 00000 n 0001001446 00000 n 0001001695 00000 n 0001001942 00000 n 0001002191 00000 n 0001002437 00000 n 0001002683 00000 n 0001002932 00000 n 0001003179 00000 n 0001003428 00000 n 0001003675 00000 n 0001003923 00000 n 0001004172 00000 n 0001004420 00000 n 0001004669 00000 n 0001004917 00000 n 0001005166 00000 n 0001005410 00000 n 0001005655 00000 n 0001005904 00000 n 0001006152 00000 n 0001006401 00000 n 0001006648 00000 n 0001006892 00000 n 0001007137 00000 n 0001007386 00000 n 0001007634 00000 n 0001007883 00000 n 0001008130 00000 n 0001008377 00000 n 0001008626 00000 n 0001008874 00000 n 0001009117 00000 n 0001009372 00000 n 0001009627 00000 n 0001009884 00000 n 0001010140 00000 n 0001010397 00000 n 0001010646 00000 n 0001010894 00000 n 0001011143 00000 n 0001011390 00000 n 0001011637 00000 n 0001011886 00000 n 0001012134 00000 n 0001012383 00000 n 0001012631 00000 n 0001012880 00000 n 0001013128 00000 n 0001013377 00000 n 0001013625 00000 n 0001013874 00000 n 0001014121 00000 n 0001014368 00000 n 0001014617 00000 n 0001014865 00000 n 0001015114 00000 n 0001015362 00000 n 0001015611 00000 n 0001015859 00000 n 0001016108 00000 n 0001016351 00000 n 0001016598 00000 n 0001016845 00000 n 0001017094 00000 n 0001017342 00000 n 0001017591 00000 n 0001017835 00000 n 0001018080 00000 n 0001018329 00000 n 0001018577 00000 n 0001018826 00000 n 0001019073 00000 n 0001019320 00000 n 0001019569 00000 n 0001019817 00000 n 0001020055 00000 n 0001020290 00000 n 0001020524 00000 n 0001020759 00000 n 0001020988 00000 n 0001021215 00000 n 0001021442 00000 n 0001021671 00000 n 0001021900 00000 n 0001022127 00000 n 0001022354 00000 n 0001022532 00000 n 0001022717 00000 n 0001022899 00000 n 0001023081 00000 n 0001023266 00000 n 0001023437 00000 n 0001023611 00000 n 0001023788 00000 n 0001023962 00000 n 0001024136 00000 n 0001024313 00000 n 0001024488 00000 n 0001024665 00000 n 0001024840 00000 n 0001025017 00000 n 0001025192 00000 n 0001025369 00000 n 0001025544 00000 n 0001025721 00000 n 0001025895 00000 n 0001026082 00000 n 0001026296 00000 n 0001026505 00000 n 0001026714 00000 n 0001026923 00000 n 0001027132 00000 n 0001027341 00000 n 0001027550 00000 n 0001027759 00000 n 0001027968 00000 n 0001028177 00000 n 0001028386 00000 n 0001028595 00000 n 0001028804 00000 n 0001029013 00000 n 0001029222 00000 n 0001029418 00000 n 0001029635 00000 n 0001029852 00000 n 0001030071 00000 n 0001030285 00000 n 0001030494 00000 n 0001030705 00000 n 0001030914 00000 n 0001031125 00000 n 0001031334 00000 n 0001031545 00000 n 0001031754 00000 n 0001031965 00000 n 0001032173 00000 n 0001032381 00000 n 0001032592 00000 n 0001032802 00000 n 0001033013 00000 n 0001033223 00000 n 0001033434 00000 n 0001033661 00000 n 0001033898 00000 n 0001034005 00000 n 0001034131 00000 n 0001034262 00000 n 0001034395 00000 n 0001034528 00000 n 0001034662 00000 n 0001034796 00000 n 0001034930 00000 n 0001035064 00000 n 0001035199 00000 n 0001035333 00000 n 0001035467 00000 n 0001035601 00000 n 0001035735 00000 n 0001035869 00000 n 0001036003 00000 n 0001036136 00000 n 0001036267 00000 n 0001036390 00000 n 0001036506 00000 n 0001036622 00000 n 0001036742 00000 n 0001036866 00000 n 0001036990 00000 n 0001037116 00000 n 0001037243 00000 n 0001037369 00000 n 0001037499 00000 n 0001037588 00000 n 0001037715 00000 n 0001037849 00000 n 0001037974 00000 n 0001038097 00000 n 0001038210 00000 n 0001038328 00000 n 0001038368 00000 n 0001038500 00000 n trailer << /Size 2374 /Root 2372 0 R /Info 2373 0 R /ID [<485F0AA442AD2CA3949805796F32E517> <485F0AA442AD2CA3949805796F32E517>] >> startxref 1038827 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/devguide.pdf000066400000000000000000007371401211610345200256010ustar00rootroot00000000000000%PDF-1.5 % 60 0 obj << /Length 1418 /Filter /FlateDecode >> stream xڕWɒ6W*Bx+'S"1"2\D46I5I|@M2O?~xUT %v-/jvm>ujq -RpE_ziP(imdXBm2!ewf[8V]0%pƖ%b\d[%$`d`}7+=GɴF {9g qSi1(e5{њg QDVsD( DnR{Hs XT$aqz<$=N=ȧ' ݲG&880r"n1W75m(j_:@"2.I7m.Y$ WgeB7Η!ՄA8-clK{ֶC.2~U*F5>A>z }AeQ9Yx JX o^B\,mEjMEuLHBGrv۩YbKjT:LGGzYKԎ&"$[tuhE -33$}d 5A5hK(u&StYw='t&"̾EgAIi ~w"jVpktayT}Trj)Dc^ C2QlM`0YR8S82jNPj-X^Zl`k>PExp}"j~sX1}K^Oz䬛LZtEa-~!d}4qZ!0ȼz>>|p:Ydrpʦj{}.IZ~/h@!vM M,+WL(Бn r $KXr  h}~7c;ukۯ~!` [W_hZYH,V Fg o$GօׯM P0 ZWCS*<5iQ/I/{g5N˫e)p. o%kT CY}'pPn8**ibZO .h&V_wn`jU1x3G@$~ }##QUP/@EUߘ/ Eɖܯ]«4 9> stream x˒_r.J +HAv Df ,)b@L{C[+?\޺,Z$*7ŻH/WJJ}Yʺ/˕2Z]uW/Q"  q~:׻Q %E&3@Ms-+cuTmÊf}Us*V"Q Mk.f_,35)#8: ڹ%N0L,WJ}{(C[w=zZ6=k 1mJb'ܾYv8T':F-DߕsqDYm[yV ꨫ;UnCsxx -i5aa|!r#ۼ P Cmͮ/!q+\i6}Y3XEsncWzwNY}ʶe6oA3HiNU!et#h3o>lHcbi>9e>ڍ@q f֍?VUo˶Mj\92,ؓ?u%Edg1{dxO8ژ⛛͹v\tR ǘVeH.clTOYaX,.z 藁˕~AlFMy5Ud(ߐ] \vgX FiOzHU(Mjm5R m`Y TVXyv\!} e ϱT1`y]GCȄ‰,Ib<ѩSʧVOeF>1Z$H7D #}3PM@V#EcC7KG|44{v8f=aےfO0S+c2_&aw?K+h yS#]NAíC{]X vL.3S #zA'䨕8DZ/ {mpol/ ʯ2Hǰr mATG}㏩E tޖܷ}hڶk=2Mq) scJ)2Jq)$0 lBw;aUm T/_zQNQmy2(|4A_?fg4!h@\s0 5h=x˗B'O<ѝQ7M@4BEwqqO?r0FJ-1f\lvᲓpoPNǰP T#} `:T$MQK}^CREoGpS*/"J=V*!~|ԕu'b^>B2G]w *X"b@e99#kd"LNXR& hz烃0{Q6'өTԌ/D(%&pWM pInWGUss1=o:BCzK t-a)MO %+i<tDs D4?RD\:8N ȹpGDUqwW;4u\1.aϾ#1Rʖ>t< cJ; GZm9Ɂ V9C]+5&Ռ>^]y\%q ;*K&,~%#'-qm`Z }+Q r-Wg2ĐЪ-`݄z' lC^OfA{ c &u },U)"#"D^Gd'ɈG5%XY51YO v#%)]Sd֜g 0DU<>9xkwL6`7:Yr΅x)kU0 MF7!h,a"Sb?e Tؒi(g$cng[9ԢMIh a)-ur5Fi(rKk,KA_tl./%g.M&fBb59c0CTN.γ!v|>±|9NMİϴ իsX@+l<ͯ΂\ }ޅvB={RBp UviR*?OJB}šRU? %_eVh;@9(W)ʉ#> ;I +W` 8y6׹籠q88}>.ar!c8k›ќ6#=&ק=.tiG{bcQtCR-l!yA-no rW>}h3mz^?`9s9 o/ec3K6XТX}|4oQ C܌#4 +Eo.#‡;M s.x2be? endstream endobj 98 0 obj << /Length 2553 /Filter /FlateDecode >> stream x][o+~ئ]AТAѠ=SNa&nr]|I4Hg3C~^ZxDorrtNQcYaY '̸dZ|_\ԋјkW^8?R?'i-Æ5VT7-HYP^Tb#r;Q>AÀ]O\.m'j,Q0Ghtm6[T7hQP3byܟeZtb *`Ejqs I`T%ASI½nt"W

    [Rn'XJHK?Yt ?5<89XȑB8 IG*1%h5|- %%]}*} AAYޯ Ho1%q\;CY=ic {@ZIqXQp²[BHVqA;3Tb`~Kao?!MLb~p-L$Z[}A AJz w! 9/C(@@C) BėI {9B2NR!~2e&Y8Ȟ] -S^Ύr={߳uX %^`m!Z?*1gLD`^ e:P$&|3(5a֔*T]Wrs&F7yFS\#qìw֌n4/9v0& (Fs9G2'ٜdM3DjkS"m1c;nYZE_6rg폫clVhѱXa RJSt LzM;k,v dIV+$Z_Wx,!B*%& 5SZSc$ĸyk}+,:hYZk:hYPN6 ZΠZ11©͘YΘY~.27[&%[Jt1ouL`ve>x!>P!\" 3g.bJ;Gƅ& =Et6ęsER!jq#xl gH39c39cE4趈 q'tYU263` gf,3 02@fO3t29c39Y/SOZɐ}K>d46\ C/iukb; ?c1NK3*3^:3^5#6tQI5//&,,)ͺ_ ,&lY4æ=J Bhee^_Ǜ6zVa%``0'rNev vjk 4=n_.jZ'\wtvWуX5 ɷW͈GD{ZRƇ胦MvkZ̄3X{x E endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 795 /Length 1491 /Filter /FlateDecode >> stream xڭXMoG 9t4r#m5>QHJGjI[f3~<~ 1H)F# ~(q ę`)5Q` !u!PP|F  KPI!IX$cɤK!@$;>EŒ)0J1 J92^T5.X)ˆT ҦX3A$)}LPJ`.L 4)ܙMZ2LpNVuUH08C:㔌gxR U n  -. K p0X8 r 8@.x } AD=/◵ZH6ȒJД\|l(CN ,c$M yC_>FD#+>2/)E !l9FZi;FbiH"l9 *bن)_5O}_Cq b{;Gܚp]Q%}, ǖGATM.Ck=;ei۾vzn=7s'݅WU׀EdIMmZԆI90dl*v{17aeW[0LW*lP +}i!ߺ0MK9# i)'`Yi:/fgoL&7 3mj7fFn:ךx{KWc_eݲR++]N+Mbڄ &Q}rjp ,bL54a  6MpJӄ(xQ h6ߴ`̏ 5)J;ڄa O\Uv~,pň޶?۵`x~U @C x_Z07 ׶Aj1(i7  /L endstream endobj 152 0 obj << /Length 2963 /Filter /FlateDecode >> stream x]}>TbD"M>h,ѶZ[r$9{;,t \LQÏ KWUzs7w* Efa2*IlP|cFi#v Aج܊˪:?Wʈ,IbDD&ZW-zq)d uDL W\;&f:(% MӮum&a6:v8;O e|76(Tx1bKGIBzBe]\V_|W8+qJhIis_%4j x%:d+xlP+b*i{&ԐdT_ Q(zmsلT3.ۑHI9;5)wҶ̏e;lXiK~ɫ.\1lYHuz;[~;nЂ=U;0mܣGlt4ncʼnB)hB/!!q:^?c9|j -rGthsvlhnEwE洘!C Ր1q阄= Iwd _!矹~sӈmht%ixQOމa,mž4'M(A2\5ڃ˙@.Sf+rpYXv@ْL-ue):rL<ٹ)5?])'C7apg!ŋ`QCB2%W7,y~&έ0I$_s*80Fӡ"CΙk>CoH!hzzy*%%D LB"·M]:)=.[/+ËKC`8!P+.A^Md9&{׺ 0ad%R,_VU@jʪzp2=\EX B☉٪_Z9GPՌGhqRz v ‰R3O˗#GBxjBh䠇:wֳmdVjf@ip Q1$?,O׊pPJW,L:lH+mHfr;R`u{b\ }]+72AC/}Ɛb3K[{~a@}ǠԀk̓F#\J#f> 2&f1ᥭ0qۥi ͝BؐO)3եRRho%L30\J}rZ@-gbG'3#R!xb` endstream endobj 172 0 obj << /Length 2852 /Filter /FlateDecode >> stream x]o=B:6k}(@ hD"uNRwvf)Qر6ul"i-&0Ty|'m'k`:N2r>Th]  au1uAGAX#lF`SE/~#ǂR)gt P6hnV+^ EX"\!\W4+A7- Ne&+԰N`+9ně99ௐ'tep6{7A[%5%  K{~|& >_A wc8ϋc4WL(sX{«!FA<یRo9\:iuq9y(~C/^Ǝ lqLC]0D+A(zEO(gP4 Az:p;|>'y=z5q D_GNdiOIl9zAv?{DHt4 5 5 VbA^"3iEVKiu3:A"eMS-tg j岚4PT%h꫌;$N?!븙r9f>^lhx{jS_{ӏoaj/vN HgR9b/yM%DHk$h!Sf/x*Í]}۔Upa!'t``oR Xx!L N!MÁ-N8 bjzA)Ո]]ikpO^> 3.0hj =1wl}*h%4s6kWS" @`˺c+c{Yb_WǖCQbOR8+*5*?ؾu3~o˲n@7Ieš綏ӑe?Py+ \i0dfuIuHݢ.nCtu3[nh/Y;FҶHO8R?KBn6F[^۞$w2?eMclęPOs.MY.vs87G}uB =Har'^"^a`巁R3m|΋c9 `i7_݃ivRYT?n=CXf -ƈ]ş!4 ͼ C`Ni+R@?j%a7z$%)-o)"~߿w'9~t d yDK b&G.>r L#L< @+ាUښiGUPNv)s eT-.RZ°CըI6ahӘo3{*̣Y)gKjٵcHQv J f.&QikF4Q&W&uKdnJWe?oB4`b"rsXf9DzQ9Q5x?QxW,F@3>G@ R8eoɸOA9b_Z endstream endobj 217 0 obj << /Length 2929 /Filter /FlateDecode >> stream x[[۸~ϯpSb d$mn/H"БcM!)˗$>Fk83fHN^=Iv2~뵵~xĠe-O#'%0 dWOrǑ}K'8 8f|o (C>q1yf:3X@ 謁qQg3_Q iӐBuɋcA0 Rp9t &kUҽ炉BxKOyB&=1xWv)e%9-4LFሠT,r2-ܲ-)Rʙ:b(#!^ _-R+3Y )eBeh"T| :!eXd9?bro74Ư+7z3&oah ;~_|3 k6b )+# Rn1"z:O&A!fwk¤v7H+L_ ?<1I3k*$#Z2CUA_g|rvq"+ӳ uK28HgͲ+`eV88Hmp&)~ADAV2ȎOk0Fz7'XWSQeѷ)+v|RcbK7xT6SSәXհLb߅粜rZ8e> f,co/cf]6Tzxk)luK35Uh~ۦO)E=3NFQ2zJ?W1;CTC6pgWC,Pdܫ`Mmw ڪI0GZ~հilz)\/ArYz)KsK`iu,7aׄ#W/% -~.@lӐ}zP57ulմUl 5:fhD+_9*94h)qbG1 x1}!5ş~i.~m5L~QGGL;a͈Oi^=L踤ؼƱƭ, ng2'5!DٍxUʷL̢ @DzC]—{4|!-iMtFsb+780㛯FFt=x Jx@$cO8lP.NpzըλQжb&RKއ) ~"{R.h; jtG&Ld myW28Z'\'~nPsĞ0eܶP%GP͖b8xD0>E6e, Vd(;З u/AyUPE@P /`VB;SBhlݨWr>͝$ $˝<2qb;\HC>EzK-sK*j[/Cם,r`7.;mnsluFZ0P"otI"Vc8"DWl;}vbHۏ!]U;4BБވg Sd-rsb1aSV"ur:Gw#x6Ăl«Cyٗc##2dNdۙf`?Ѓ[u`?Xq9<Pl><+/':<Օz1~?碣ǽ rۿKz0`™DO4y1MN NLt.v>T>;o@(Q T}$g2/s vpVGO'>˦Z"7D( isf SwaqKa8ۛ]E,)vemC!>kD6 v ySziAZBr.>*p#EesEFYxeM7U'3d04x;N'Qi 4yùŲ OU3 o<|^cG,"Ts/M% V}n=O=OQ|"~sW{loHsH1!ؤ_]urj {1S{g(o:G7 =ypAuR/0* NaZ,vQ 5 ,,>b<ta? |n'cG6Fmuxx29zO*%j)Pu=\.G~}g c\_f-GE7xRCYFA u9:Z΀<&똋(9_ӧ{7|x`|ه˷C@R0Pԙ2Gp7qNcR)Ju2:E_#f9M'="6hX #BtBb&UWH7Cs;_B!N e"nD[i)M).O哙[)|0 endstream endobj 149 0 obj << /Type /ObjStm /N 100 /First 871 /Length 1325 /Filter /FlateDecode >> stream xڭX]k[G}bۗ;_&Z?8Ld37ĒŨI掮Ξ3+N%HDTĿgO $H8$DxR+) ܨ$eQMZC-Y%=U4jAQ.6QE\K]OKQcy|>|n02QÀ4 _wB {w֌axtp0உD`, Bap<<7lL x us]\ÄQ݀7wu{w<pMRp; 0exaL¾2I<jxò;8ITlb|0R?͇#Ji.nxN6 0 暴H0pOJ xpBrY^#`S z''*]"&:2&X?5={ve=-&5+`lYFD"ٰ G%uʕBސB0VBvQrӐ]z. PF{ 7QBvd/P}:9I)/Jׂ?EFd'?1d~ܜe_:M}+|qn5/y0g|{8mq|^쉬áXaeTJP81^ Zkv a hn{Qo?J:VmXo=Vcv(蒽! q8~J9Y\R$1U5Ե[+W!&Vc3HY` mvCe)2k1V#IӬJbFr:X+8>tд;">cqG0\!8 pɕӆZ#ֵxbqE[L1͸[1i&݈ ah{LjZ\䈊VrivHWzACvun <].WBoܙyMÛ뿧fv]f3S<,Fieڻ\j=_H:OOM?=?ݬ3$/Nܑp~9F~i7ua7>u0HUGsXp(((. vD|&(ŎWp;"2 /pUۯ!,\q + endstream endobj 258 0 obj << /Length 2861 /Filter /FlateDecode >> stream xZmo~b\%E $ݵEY+jw%GPZ^mr óp83= ?wOw]O?{ siW.V9%W6徯֒|VJdw]KyۏzC\xU}o^(NV~ ^( b/o׽;9ϧ* ?e?6% 2X*Ǧk gqj>E&lQL-?]D949s@Ke2R0ǦYYhE?ƫfjduU> MچL2LT~3TQ:طZ;_!۩o]wa2M;uS Zjô)zJ:00RZ/6X#A!c ܬM_|23gߟ" %P (rD/٤AdWW]-C< e(*$Gw{T.,5I.<;_ms٢{f_K{LDv+˾)ϷrZߟКi{6>|䵍lk}5*mr'yS8xBNIISU_.׊P ᅾ,cA ĥY?;[<[{Zkc\w_'9Uk6ibXl{6/ߦze:tP vH7iԋC?HRF~DFG : l?gSx(p 0N MC3m[8^j197HK;HHkG9Ts(P+28`B<ϳט)%%v6:F 閲JL EM^I *9Ѝ/0 O-Iq+DAt!B26t9l –wuU[ѰJ0`i,@p 3ICG_Jq*#HS#)5F/^Z$w^YHSnhː^%*Nʑʙ꼎Ps t)f,: t'mNU_ 5#Z3~چw#agyتCAw^xRα; aT1EYT(˯"G7DgcSo>I:bCkvS o Sۅ)[উ> |&Dvk2p0t9!k9"]u(ۖ,@9Tm#995*YzrgB,Pӌ-nW:s"/λ'%n0t 9 .`e(¶ ̚\5Ԏlaͦ-=h4 8 T8B(*9x\1gUq߷oGk0ߛ*%7gBkg\ͦTu-'|*ۀBakq8"W!34{9kXPwoNmP50Oa>,ZẬjp> )ޘ,=n5u^YhEBK+;AMB аPI* !2 xo sD=Wa EAH;u^GumPKGB &,O~}K- ə"P0b,LE")ER,1b Zj >XxCWꣂ2^/XH2f]!@in9BH=[Ggёlc,Jɓ?muI2,@pI~b n )m!IDaFdin RB0DFܠHġa'f] ыƺ@5[ӎ.l[ޗ\q\}f6hS8_>,cq ;y[2¶@ Tm$ h+v+}E|eS]zpgRs,fyqΙdC3n SV'GEǂ bbꆢԑ 7Y^?:}RQfQ ,B򞊖hcN}1|qБ8X^ţKoB&W#LJ@@S+f6ͅE݃>EORCix&4PtB@)@k{ڹ@)״ 2p{rGϻysx6 o8I1Ztw!.7,H^Tp?,_im b:H bRL5r 1]OkFBEGA`>5潉.&;Q뚪2WW<'NM89:R BqEz41j-ߵmZzU8fM<[xTba?TlBtK#9=s߾R^"8ַ8Vڇ¥W 9\ 7Lb`6<4&0fYj endstream endobj 214 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./mlayout.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 287 0 R /BBox [0 0 474.201385 174.975983] /Group 260 0 R /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >>/Font << /f-0-0 288 0 R/f-1-0 289 0 R/f-2-0 290 0 R>> >> /Length 1868 /Filter /FlateDecode >> stream xM4 =#MOKhH 07evf?uW Uo8sqCa?l?[޿AZ ?6j,{!m BuȯKZby{y >L0-$S @EHGuH%TjV}QAU0B5c,qW˗*UA~?OwH#"OG$p:zL03sK:e8ui:fNkX' 7@p(C'i9Jɽ+9 EգU9Ldp}a 9%8P#! 킲"W]I.mY PԐ%@Xu` KdS\ig }x M)O~= /BhPfmH@˲ tt/uhP@aePCԨ`l tg+IcAyel j6P(F3 Pk h{*#be"UcJ{$"DT)UЎkR4҅kh' ?余k,2匠H98<&9ZYZɦTL{2H U+G\J#+60OrIO-)MnA؟$L8E@=/0.Zb 2>ǫ'Od)}%M}5:^ϩWofyyCN#]v٩ X_~>,rJA5}'֙4^yXٚp9*0zO+Ūf6 6APImc\ Wc92$)UB {Z0afItS+Ud;5$sUq:`U sΥLԲ5=%~pXYV"]g+q68^/$6p'NN .뼯llDFY3͎hI1dF=xW7FtD~eK"F4db6R&9y`F4"d't10I2#<;de!Ldel3֦rW@ 2bdCA;^pm!$-!g2z@FiN旅7һSz):TgDIUǛNN򩧇hh.${ tu~C y4.V a_ ͑>WHcTa{vE .^](nznaK0 endstream endobj 292 0 obj << /Length 298 0 R /Filter /FlateDecode >> stream x]j >$M6e{ɡh0:IFŘC޾YPA7|3k{+{ 0j<.vaI 7Jc0o^f׵~ug42ֶpϽ*fNE]mC(IZ0&feh?Ba§> stream x]Mn0b"Ctâ?*b,CܾJZ{38/?$^> stream x]n E|,EGN$RnCuxJ"Bvi_Zg#daTF0x ǫu(A[WY ҋ,y8Ό!L g=$ {uW|_:ݽ]\4 h4ݫor@ȼmumW5{-Q E@mh:O/*Fd"DaڱV0퉪Ӂ3ӑ5Tv91μ‰I+k4kf2DEΚbgc=r=8]5%dl>^zz endstream endobj 303 0 obj << /Length 306 0 R /Filter /FlateDecode /Length1 11108 >> stream xzy|S虙+]IdYvWҕE^%y߮a1$6C @ I 0YKS I-@,m6/mӦI,CI'4%)m;}x̙9mv+Cװu7G෬Z1՗o]O5+W{"Vo|FăkشF-Xt+=_ѿe&`B&}Z/\qc@j0nyh>H)-lpxN9EY?3baBɆhƺ4,V Ӓ7n?ZsTRNmTS[QкJؤdZtu&a8?jᝂ,?q[]^wyfX@VfqBT&|,vgU3=I2m& @.e⪅xꕋޅmKr3h5Õ^g;oo}.1WsYjAgp} ϭk$P!d}#Dc4Wَb(b8]<=iCfmYK- 7u2}^GI8 σ77Cܹ<.DZǔh3+nwمB;2C|(!S&v6>fړ^2z.w34`/2}qi rRnyH$K&[NmWh-c̥  |PNZ@aeRih -W }}}Y֖v@2^-VWUUSDžg\K_<}+\LhYesVnWGy߻ y-m(SsT'J.zO\lW-W牒gCCϔV^{ 0MfNf$O-պٶ&dfɴX/6輼7ƫ_(j)xn+&š,`(' URsf:J`MA(h>K'|{3ޙqϝw`]sJ,%Zzd> X2!vК$A.#JY;l<\:5d#)i]!7@@PEiaG8UxqYb?y e:y:/L\N.',g?e}krP{U^cihإ j:Avvhiя lѦU08)-vޘjg}7])zB_Vvٌ@K6y{}*8w[`jW7x8J)*Njsqv3NZnpSC?lv-{Rg Y֫/,n'_Cb>]sK *P96 =ɩ&rS=~]E>;(Ovs?^Af14qWflk,'F QH{ũt}z2ҷ!99a[+iLDΨZ [IVmRTA9u\:Luw&.y*Cs|5*+z>SҚ9uTw;yT`:u+a? :ɖh)nrk_kƹR}WL.\d[zwsŠ9[#kKmX:w>^pq͕{ݴME.Y\WWIÂyk/-jjxKxoÞU=< 2hzɚڡ5h}P˪Tmeu jDlG'iQuUISy4CDTUUIADi`z"r|ԏ(werk0CX; arѧ ҍi9M@YR Pի2y;Gt*ЪNɊbvUԟ21z 'pq㒅ui9wviʠ^k0j~ap@Y1l`s뒻8Tg{R\W㓢Siu-k>Vpk\,iYg̶O-ׅ3_թwzh )~[Kb%RraLZ['0ϰ-Ю4o6ou?UpD\ᑢ9pC< #`ElxQnsmbYr ,L>6).DݞpА2+-G(J^Ua@*yIï̏(^Gn%Vw%k."oK7bn;fHҺ;+sbRq}vPSLc%SxF}Jgmo+iE]0jn~>+٨TMLEItuz^34<^Oy<bk32|u6Fm|I!yGfRg&fW8_׸P^-SWHPL-;TFq+zhY7yM >NsXap:Nü6]lړ o6;N]kWMw>![m+%Cj卅ڊ#U8pCa–zYdSZSAe<lAz|%ߎ0 ?|\ɩYie fM8Bn' n6\a. A V $TE _fx/po~ jּ Up #\~) 7wIf;4Mp1\AH #B=r 40t\J2&? h!U4"E!n~#)%;FG^.eo'k24QL^<+~Bɢ&?HST~;uSYGZ<$Pw_>LP %`|~ <(WP~ CL8J3L_i<,&*\IyMH%aVMh5m3l:.+zO?УU;b(6%ȑl'{=~eS|&s~NB\HS|ZYه%mvvH;8C#2w'tArypLz5 h W:"Ml ߆WCt&?'uv|ۜG^ 4Vj iO1Sth|'1%rg'J~nַ}:ȝ MUjF4򍰕NGECPDn什-u)osKO`d܁ēG1~UfMkvg+סoϦYC[SQ] [ayM$IM u5ՕX8RTXŀ'ys=nӁD5˒i63 zp(ng,%K\Xlo/QpiXaӌi*|J )WRJ}m/fKs{~[KL.}nºߏ|m5YkK̸z@Vn80]PR Æ f`-GQ+V7LAgM%bk[%*;HP[Ĝ=m8A/%@Ȍ$0]]&e|*ⱁ[X4b\!_ܓ`Y\5f[:ڜt``/=44c \V2܈}(C۔k} 8M\3v)=y[#ntDm=?{[ss``QsSRX,қK3=Jώ3=g/Q}- ˴س%^;. ,mtپZ"{zЩ05qYb1&iUM^uj HX^8()PFaSLE۞qᆹ0휿p`p^ t;3DߌIy2g`X߶DѽČ[{kH]IVyCw̆u.z>&$WƑLުFW!,y .]vZs:nP x+Pi,QEv"KҬE-JEQ/ (pfWԬL1CynόZC{ThL3R*ՍQ8a#䓒-s*E-p< Ō~RNIPIXW>::z=iBU j3 jBs!c$)(4C(>*ޡ$&T/xdx OK@4 F)G>RSA@a<g"h2CQ/c- Ҙ| apH]̇#GgDXV*3TR?cV\HcN ˣ@8V럒 a\\/RmW`B-6k>:D_7 [[Tw0&2f%LRI'PK܇C ʰlƼNņPgD-òY5+Z,>a#tS"  ]za 8Y:%^KE|HZVGrMwM7Mk޸i~7MqSVD=JINj9G-%tgzgg3}%>Sb"MLШjUJ2y0+/I|0B挄FZ\T y:̃)@v ߂H.Bp$O2gM Q'GBA*T|xDP-z|/"@L]p)v_>RqВE.55TPE<5L\VaLJFǒ:2"+#p =8"W &e\G]8Ia777CI P V'y*G$ܕ{ ݈Hqa=NBJ$=U`1 S/ +g 3+V 3ƒ7&NBmp\յJEuxQwR( ‚/'#R)_ʯ;y>UgљuFAiu@?"ʭUrrJɩu M^y\JdN=-QLDM3g{Igbl9t.%ĀFFN?͉ ;I`~Oʈ=JTwnͣޛofkSVX:U[3r&I&JEv&fvmGu 9Bfmmv2,*uHJ}]l;)dUKdF dٯ)tÃB[ 4zTiiJs44u9J "IEP!`8P~-W~KwHwoEۥH眞aLVv&U5%=0ހ q47;#R֧5&cV=G9@+Fl6Mu(]JYyQNu9",؜v^^֖(Z@lgۥ76y7mV>L4b=SpikoOGfeϷӬwƈ:.ٜJ?M6"϶+Y"Y+G^zĜH|^q2JϰQrvd endstream endobj 304 0 obj << /Length 307 0 R /Filter /FlateDecode /Length1 17556 >> stream x{ |Ź[+ٺ,YZiuZmٖ#ulr c"!@c;&B(Ғ(vBbxВ^)ZRhkZG;Cb47{TCb;"EQ":EjL-^g떒a+̺[􌳶YL-k`ҏ2s5^qs;ran1~ڔx73G)X:Vb[ kZcKw9 !gݿp8>'' ,N++)5R\5h$)0! X!+EFQ2@_!S)8br%o}qԍq?r8%ZUupXNmrhH8YSW[W[]ewMe9x&w=`=Mueq3n~sFm wWm}ujF8\ij̆ /v2g&WgXI 7:us(MT!xee1.a1] C';mΈۜ"Ӥ}3 v f*!Ilm17~ $$6gI1˜e`aG,@,,8Sdw?~Y7|ZF݂Gt,jt0^JRR:F~M$VxSh̀@ #l-;JKn}͸u${LP3'-v=qi G ,P)Lc5%N|OpQyPY⯂=P&~S{5U1d5T&-5a\9RÇB&%ShWln/qQ\\[uUt-G&?6OEW{TC*cp!*۽on谙ճpR g*9k55 9?x7n\օACn*Pf^^˖5rb>MT4ӷyѶakia0,ׅ~S^gs',DLs7Ć% lt9HMMR7: 5ɚdȺ^nhw:[(D+c*+KU=Tww$qㄐKPa22#jCau!Yvj Hȥ/WJNcf|{bel).-zu1z|Bc4*k,7ĤʺθιXJ5[k\/Z`uIEưfU+(QOA8㔯&xwLe,tc^\'i5ݔT!:RLe]v촦v;?vC4.ANЈiSzILx5^Ӽ&w*5eBUԐ @10XCm%O;{LsID,BEZIt-%*Ƙي՗gBh0Tס @ B΅`^ ڀc|)^xJA1$CQ!`yfWQ_|!I/Z4`0'A''6nI&xlk*Ns3<2WPW_[OxF!? ԧ$d). kgݦFj*m=T"Ȝ{W|{eCaRgz U0[pei;o喥ҥ1߬ΩQ(<ӮD&5vт_r (d_`teݵq#’Fyc±@][ EXΙļ1tLǼvcrS;2LyIdabMnE5HYLH'P  < sfWV8.HpR1:[#uf_)`oaB2px!A Ņd!sή1|s _y>N`T-?ʨl gBǪN uǠT< _mݨb*]0б 5̞\sD{mrQmjFcUVy"f\'1Kֶa֥ :Dҁz˔\}|2 V'lk{| lj>k-'&T6+BIJFHԗI]2y4r7&TmUEVH?=}˫(犼 TϝC+}f~mʑj\u({!\5ݴh̫V(A&jģ6sԇV{C!lWaVuU8MSl:/tZ~Уv;9ugP4f`LjqMm+Gv!pGˆ[bCHunv,9f؀; 8c5 8È};Ӈ@zz' }LKfTccY,gy`(QS$ʽy۾ wYdQ!*&͊vePù$sOʮxR>:Y]2.-F5*7v\kq,w^S$`F Zw{]!qgw!_wLFDMFhzp־"|N0X0I3\Mh}b*Ovv+xBnLs\1jN  '" !+Umt֔6`3kbv,wr0RcV@\kW;d75;e^;c?_X8a ՜0F4Y ydcn1&X+L hL96љha3M6;wp[_7 ph(98boISVYu?iPyG.qP~Q`02()#:QFSSΗ._KZ)J5r}9*WIXAB~5 5kv-Y䑃s.4'V.xsշ= o<WnWTDr7 Ê[Qy?o3E",t$E5*x$'K<ț';TMEbAѬSP/A#ݮh51_ &2F*F!#)&9czJaH/ g8!^ /ity^}lAInڮn5vw"q3%x-- , Rߍ-烚ZɏWfZU=NoM~xU*??< YG 2IpTWG 5새GVu v 'OXc" yɗ"E3kH HLp#9#S82.Ñ rqG")vdO˓OB絰A'.tO QywDkr Hإf_TV~]m*$_,Ԇ4$*= W\A 炜&AUU5*oҊm ;6Um/z"Ճrn>O=l\E Q_c`uH.9H K,Y Yр ] zxSJp }>a Ij\:)qR&>s8?mGA)%gxez.7vmusk2VZQ`5s*>;qFasg?kNDj[ cN[ Hd+< ¨V=>۾0´v2; 7X\^:懅,Rȋ)t̫?y1Fd~^CXQZx5W-ťc\âbưl7q9L1*VͰ Sk74&Wyg4^IU AQW9 H'ӍTwEE -G=(Rβxu#Lzqk[j(ӱ&C;yچf.],:52yΆz.S<1 & $h*|nz{ *ם5e6ok4,tJJkLiqG<E"~븭 sx #sROqf<[!}Öa rDů ?r}9t o]f# d"|3#g_g~B@@P8?06c!PL(RꭩJFg톽b(Q E(TtG(p6(sA%} '&AШ7NLxh `?*9xDNӎ)(q gI w|nebעkݫ+OM{ö>U?ys6g}l9eODž?X.LO[ oaw1'Ca4DÀX iJ76p !g`^㰑$kdQ4J ȎO#}N3WKbL?A ]R%'tNr9J>/aAż[էtPV_ .߸sRpAiMk5d|zo??7@u2:۪}]5 OViZ}*է]GNEuLuo`5oÒ  ׂ~# x}_~?aBomLt'R#%{A`Ѡ{гto?.k<b>>ݣA5n&'ګ{oݒ|}!pGKecH8"_"RD+]/iej F=kJB%Bm. qɛVoOgcL5㌹ $Gp&0R"B"c UahEKpIL33Ur6Ðsꁉ(G':R͝Q_h4iaO b΃Tլyh'^Y4D $D9?=>(υOO-G.>Zq~fapѰ{س/𰼿E6JSї=G&.XbJ6JaE"|[DuK*RBm z&D_S*rGrJ8 }Y}0sN19ňFH;8X08-*eREV#k MT_`tőaJxi6H)s\RˉhjUlW"^ i :7@cNYQmE~0^~p Hڐ;@N9{>D5=Ds[ 3Q zf490w ԏEm=l~ZA(6twҡf]</B吟K8#Fqh-GEs!>,п6._U) {v(w_6-D۸эpwNbzf̫̯X&r6.eױwo?gf?|\+{{w5~ BJ.JiB~>)›Brr1,fndc~]1~137&`6e`|\s!{rCeld O~;@5x#jçϑĞ!4H.03r=ك:st=r~$wWc菌L>C5~Ar-ICq'MًC?<Vq2~+FTw)Ll#K x%~n ޹B_ xD@6%BN0S/Rͽ>{I&o?ՉBUyQym 5$h o@Xs{a'Ѕm?W*Қ{VLп{ZMt?%j0cEׂ_0q6@3ߜ ~3|<伃 X`M|]{5]#ϭ@ТӠFR.ր}sѻB؉ waF3Н{r+EءU`EϢeQԕhn6 4*T·uh}Fм/gy4μ"=!UO_SWWUV&%h$ {E.^X`sNxeFVyvFʆ3Y6,ϝ[JJ !46Y)6.o@[K%RRKR,e"KcxUEj~VFp\"eqFj޺~5浺:CVC=3!ֆi0lҚu-tY&Ժr 8-n4ͫUY$ʚjԬ図:t=] #M3&Uaf,aø-Yǭg_sks/׺V- 풲r]]Gfgf-`,3w€]]S~ukVJlZy~hCh()*RNΠVihq6宕-hm.Er]^S8*Zzd_άT4v}tF<`ZtʰzGC|0ܕ]q}Vۜ.\HO<唕>$~hr%Fl<-) "4Égdibʽuޮj(S*(d̗%=xWdhZ3x۲YobzmmvNu(3m/+/Mp6<ˆ`zQ|l\5cq|+zN *4*Kbfn>7AERM)A*Z2ꧮ_|| {ABP S¢g@ ށBPNCyڡn6QL1ZC@}t17B`#M 2C$BWp09\eE[#ɀ-P*`i7BI1Qq?5;!%'rG[[12DcUjH%08> ՚Ff͚3%Ut{y9 Tk4ZVu܆w( @¼; Wy¼ :=H|s9>jTMCz 9mdB{ RC!A i9F,Z<ha_l=ߦmCf;J  $};g!8t-17>`V #Q0ٺєRnU\VGii۵jQR׎1ĬF_  @ @ ˬ gD7ib f؊l}B k>deJQ|=i\jZEۡ6Ba|L9ȴ3= G zX@ՏO,?Οx.* ?e+{zFK s>hɬB  0 ]b聭>AI8 39(ڙjYϢYNj.C۟55{{s40JF(dV' U7"@@zb>6z/p6p +Ʀ*%j{B=ўFychctA]nGrc1x-CO|QAv# ^^g :y$^Q@#:s,dP#GT@}ϢvzH}u_9ZO.g`Gۛ@߇:;ҳQtp>n9r e4,k< arI(JME#6`O#j[M4?o|]Ȑ( #~PMxd57)OS5RMJ7[~cx6B5rWӰ3.|&#~ hzMSc3ҾZ'<R΍MI?F^ğaմOGg}M6|cii7<BC>x'Q?1 (4RSߚ#U0#m07PBY>0 č7K|MBۮds:wp\ (Bg"Q:oDVYd IQH&lV'oDkFۡX?/ЅOy1^-F~~n׈=1t7@ˉ1&g-$ڃ2QO<=" V3} ҇|Cc4 | r/1ȭk2=[;$N?gV^Oʵk[kz5^)E[w]mYlWt>9vX/`7imQy&A0&p-ΦZ ^/8oH(0Li:bW*'S5Z<^<[tSHc 8}_~. c*-yڄ61LLM 0͛q)Y 'rGx[M-_o-Af endstream endobj 305 0 obj << /Length 308 0 R /Filter /FlateDecode /Length1 13376 >> stream xz xU𹷪t%]Ig ݤ+d"KDB `e$:h@]y\@:Pq  uotV7K+{=uֹ瞥a8.Zp%{t.Z: 뗬tޏnPMtK|exZx%@"p5~ KWŜˌwacO^޷h!X_h\bʓ{7a.Il*phRkRĸ*58ЫUxWa xӮvG/NƧ/OF㐈TUR܁S ~ €|Ax[Zwnvj:Τekz>?&OnIn-mO-\ۜʼƹ7 wz(_} K`mȧ+6;vXݝ"7^5udD{ H$FBHU%t$v$gv)>{OSW ݫNgMujîQ!jD"Z×zclBw1}_}zpG7TcX,B\; Q Onw 3y.jB9G5@Hwn-fͺ{f14y%'׹ :bHW Mp.E%=H\G-)oYw1:rPoOVuw/G3ooYcj^WՐ.`vCH(Ìg[j$HFF'ปߝt ۡumh◶5d'Z 6Sդ9& k sm5\ 7ƞ hq8R%MzՕaޜcY< Sn7,')rEif7 }~m;D)%fOB+&Ş E}'ItD= `#H7Q Z@f-W*[Ms l&GbDd]gixxC>fK@4*ąx:4 K֊vg%WMqv܆ӿ.Xh8-;@C5Cj7Ds"̓aB ;C3?RZ(RW\Nv)*X+cXW[ɏdLm6fX{;[.xWi& o{hیWn:ȝOr<4M~/lhŋr6wɗ=zUTTkƗcq9ީ`̅uRIS<3=<=hl&nF]J2:s=w;\%"w=6@x?Ec=y3) JL|FH~DvGf3Uiђ=t5v2G~O|y*g;8ԗ#޿z9zIF<:Rhx.w ̱*6`9sҠ)n2嘌48MHrAp94 }{=>#1zkȩk6O`'!חGbT>Sz`,CEq8ǕPk/O`sLLDY҈uDc]wttmpln2 ގ 6_/\M܎+>.2Yj:y'*w2~ 5,t1]/._fZnYl[:D,0h"`gQ| F%. DJAIۊQa9>VR'%;2D%^!nb}O]>[]{O0H|Ϝ|_᧷5]kw~NnfL4:u:VZ޶q_)n'ӥbc@UTUis4TSu:۶2<('{GOb,P”hDqmV:V7Иch~v?x9ƂG%~B̰m_Kz8:d[<V)nw@D-AZ!$iw=8'#Ϫu| Ñ|u=4nܪ}H1W:6P(و0@x"R9/EIAFK xIyy6Fڀj=GNLRc,I8ؒmtSEbɃf=UxK/H|gv x1O[N1ZY֏ JeY~hڢJ65_ѳ7ov_ߨq0{WQO_?7}L Mw 﫫i-D5We7{x\y/{wqKvLNw;I?чO_п?W͹1Gr^65]ZK\!9<ц`9,fb<yPc(z }Lju2 ܕsU)2ߞPۅ1\٨LQ&Nק7}dN6\&Fƞt%2%֬8Ip'2Lb'vzk&lw&؉~XGwAONY 9Q5 ԅyN(QE9^Wf֖U*ZWW^X%B -F"yeY.ŽD "X9|+f.:2]M[JWCPFRIrf*XrVOi?.(VtPgC׊7sgYwtgxxjc{Iij2YMoDkuZȔJ\?>Bu進 r_0̹x3ݱ@/} sztwRkeX>/"yQxFj_h1k 8&%,‚X[SM`NHumj vQ13DŽX0歊UcXXK.VI--D8\X^^RզH`˖j!*(:F8әGU}*UB"'n)2UM[ח^}:l/`[LtxD,_L=}Jʃ$=q '1 na?B*L.*rKk sL-ng%wYÌ~²3ś fl),B),Hx?#hBgRn3OtVY@$'MEt5YkSKߚ ˵$C-|3b!Ql5#{|MѪYQԚ-Me&lDH~pp#1!5#e,?Li a\AH){6*kEum8i \B|$V|FK4NS&G!W2 FL*#IC,AZ8\y!<7O0Ks1wKBRO^Moj\U:MӖ;[Ԏjc'49̌Ztx V T{j 9 LDv( +3ִWTV%\|'ZZDB폔媉dvuyEӌ/(pM9AS U:y*FX?2yө&&'*htkLb+qJ;OvGgef~G|hJ{ՏG@,*v{F^e(( D]R* ѫ| Q!ξ]`dw6_?5.H@i0f9MJB~`)(UF͡|W3Ќka(˛{ņOD jʗ4+iUeZ' e$mm>+j[<Ҿen^%D7\,WʤDXPW6CNurjruh>}XAgOZW]msjg.34" 93Vl:dCYk% s̑CS!"@ Vf-zkJ!'7g]9穾ֳ-3xL)81ɗXZxnkg"c^f˰MA**? cUшC`q,tE)7II5׼۟}PS97ݷȑz7_4+JϤlXcZv7a?رfrCTwaO8;Yiu;XBn"H"`_oDh? ߅nUo̩ⴡMOuXGu^xyVjSP 4MoC{yKX7Sz櫳FId}2z;D&?0wnC(4jZ! 9Zd1ȲY 5+Ԫv?*j@ :Ѓ`0cj>G|Hf,|63e>7+ ,V,ԏB8+vy5-x $|,rH'N9fE7X4R9YiKxP\= 78w)!z(Yf=8c.Gx,x[-+忑!~G($#$CWy|?j$7\%fCkp[xt t|3װIރzҿ`SB9уyrmpL#q;G3}\ܳ`-`<᨞΢h`65=ђZ2HFу:P[QN8o;8_Q(M_ȭ.0N$_R#q/_zy>heŸ3 p>_ )% .RtF$_߇0hw sqW¯3 og?%u$a2\H*vo(u5tܛ\iGz8MZsZpa%+;>%8jL&)4'-n27=} +wɵT-ψOW-Gk ]8qܙ]h=Gk&~RI#sH'!KIYcd7Gהj@=E"z=QzB[]RWW@K)ש[F_L[ӗ7OM"x+q]p)7­?%P/8[ {*|."KZJ.C'0y ϓCu.|C t M?.ᶚᚸ|M>rswU:DujUjA}QG ޠMr)}AߥqKwGǧqӹ鴅ƀ}h+٪"QfZ#Vy:H{,@'ޤn+DއuL&=4C3i½{Vq;،*-wJ*ʽ~pkd!өBAz6)#-;`9G~Ҁ 2Udj.wA!zM>]xޡ8D_k2>^$27BȇĆO6ӊ޿O)ڽ|T~t0DR IRiB<6a\]mMuUeEyYi0R?/'c"sLF^ըU6Q.=荨Ď 4zCWg܀ 7aoy6,ԅ'^փ[L+aW#o[ppVgXL&|ᮅCvy.)+,嘳 3cJKgg4K؊A$0SC`pQᯋ]KpG%u-=xg'UB88GY 515?NFɒf"S\cү++]+ TLG._ERb'903BohWG3ђw+Y#3 N[I?g;. w`lc֘^fXtr>mQQ?#:$_jŨ/Iih ۓB ҋxSJݥeۏYq1k~X;zp}gpaJ ;"+zNhJ޻l؅//SMj^`i }j.|T^m:LY|(|D~!?o¥!lB8oe7IYv$.v>>@ ՜%SF;A,7a *k#g2I$UZIR*0>[cpgH)$+'zQIúDswV"D8{2Io#0^E^ENKwWv@۹ XtAކ,0 u' b?p)t*7I#ߍHpJ<"}F'qí_cXsߊkh56m#p$Zjk;$C 8N+Wׄ#Pvb+G8>)qx4\qJ a:B )Jq]b]RX3`G݀9b Ԭ =+alG9&[0 a:v"h! 4A4:Ѻw ܼ 5zWpŨbx%㒋UOM#F8^(De ZAFЈ q2*B90nrWlr!&l|:mc!ŘCqpqBi0ՙS_2<> -[Po0 WH"+qNb *+W/AΏ [ڈ (]PWv =N+-Zo|0(xP`o:1|:.ojooJ^5}5mDMQS]T5GM, ~ VpHyd tϒ@ԢœuOOSZ$gzeH1TJ3H8&ACRfF4j5e"M& hZVhZVUky-Ղ֞KQj峡gW|6T"%Z S i:hDžIG" &0"z Dv@ǬhGJ#L6D;urkY)"3 >=BJoŗ]]!rK8& k'POxsQ$/yODžլ!uuX6=t#]{m&ZA{@dD t+`$#Wc&mCxZf"3ḁce.Ud.pqQsdLOʜMB\*pb䆵KɁ`p"&ӻh) dK584O^ņ[શYCWI[HS [vMZXcn>?1B6Y {֤?1 Ob=k4IybhZ؅BwQ 'vMt +kk}{y +#V&6T\̆𔱡VfD^hvH@%<mZ?W_q?_5ʿsCj7h6*-ޘ wsx`fgZkpf?_c tkoȚM?A"3f=C endstream endobj 312 0 obj << /Length 2724 /Filter /FlateDecode >> stream xYm۶~BJe, l8ui2팝PNM*_|w߻oHYɓHXjO^\Vj2SGB('VO*HOI&Wĕx<'VqM.&itd&q(b:K#Q7RΒ$twy|KO'e9)IO;<=q KkFJk2>-a7a_O˅2pG494Ν&g1{ r}6dI{ jz:zfl Z - %~rW|!$x: "eA`}Ykcwl_]4 +(9|XBc"`Zk 9=[zσTMQ5l!_ϴvρB_4KJI 8U vVDPž6,E(KRڰdzN O6P㬥Mԓ$8" ό<ϴTFC  /qԮ}Em&szf)xMϊs_̳Xڜ׳m*ýgj'NqXbnyw?!F&7CGO:Q5cPsjoj/\sഡ~ ~(: չCPt<_Ƴ-06RƷ5I*Ejkc <+|31qȭA \N s&*x%xZšf3T̙O3g:UO.U,7qJndknSMl۸ڼ*ećOvW.<Ý"=FUs=gQ /0hNe[a.Xyc!EQ̆۬Xr[@"ÏU HeOo;[I0@i~spxϫ[)t+/{d=PJC})"+fqOڵ]M>^x ZĦ3OK=Nlf@aVgʝW];c׺.+mzzjwXo*}D@r^U ƨP U0тc@ޥ&h046UCH=dAvBCo2oG>lRC WVwP$Q?.[]A00Ü~]NhHF0Qǵ@6 IGa⣼Q?K=c1b(=aG3>t!H< :}<8%hLG1Tu˛d;5%ĮrTMٵN<Ǒ415 dh| >E%٣00$X;2(eM h sDI8 KBƮCLg{pmwA}!πC 嚳嶪W69LCJ7-銿d2 .w%Yg1W M]1404XHCm x&f@~oЕ\P \ o]m0 Ա."Topb )g&e}&6$@8d)8ůœ %\9:0J#&qQsn{۹Qۮ2LޑfVwdVy7; 8 I6K2kN얅dcp\̗|q\\lYl h"!*z7SZ{0vYeu 50zb0Nё0M=)yGa Θocg1}>]|:CH_qT8NTM7_5੪oMYa A^/?*?ڥh1a6mngX*DQODYG$hn9mZN`a`ފBЁ+ w׊Vc$)Rg0&=B7ٖ z27o2J/4o~c2~mfNHE^aʺP(ODߨMV96xD9 uk؞+G=.W~UU-_NBޗ  јg O endstream endobj 332 0 obj << /Length 3077 /Filter /FlateDecode >> stream x\o_qCq ,hHE6J{݋;:ٖQp yZPZ ??p俜={+*k `^u W.W/i%o6@rɩr=Bcn|'ߝQx*ʱR IIܹum YCjC$ iw'BqJ[V9]S^Šp&md՗f$>rfD ?$,3 LYƅ) TLqE,l/ןA))`G3 ,U>`}g쥣`E9u/0^0S93dn_þRގ=ņ};4c(lvjmc3PվLmbPnhv~ۦ(gfU{Dp4L&x*3:/vr`q"{0kx]s Yhni[LLÃ*-l&5k;?} eljb1ƩSsbx4Ʃ˓*:*\vԙP6BR-$PH5zMRQjǬ.*lX>i"ɀ3k]43 A9afNQi1X@PFn- w xnQ[;I97^b&ȲlZ@ZI*ny?"mH?绅5EN/0,(ƱL0qk{HG4(XPA$w!q5%ܻK]wa]|*3#6 -+esLUe`YW1LC4$R=%'6숂R`(q_WΘ_jˆc@|FQm&6F0e`4i6ǘj^Qnlq7'pIJ\zCq/R| X %#lf\jX9QP{ ~.2¾ JR y=PfPJDx[d<':X\xtit@ztiCJ]bP8?'ui ;ǠJf5bP_H)SUEK0ˣ2m"3&ͮ1 1SG5B˒U`b,89CwZ͡V"!rQ(r4I6˩@^?5Od"i eLq*f}uX2 系B\ ˡͼh:FhWAf~ +, gN\LNVŨB m.^;528ƝT][0 (f O,ۅ`XN .|ĝF^>R7dP|͆4΍jA-0x^Bn{)%Z$Ö́Bn]/]qcbMoohm3̕U$d (!70&; "꺩UlH6yZbOT;HHȻ71,ﳕEf+23z ڬgcC֠^MfKU&(@w(.ɬ8h#3?YVWa_0W3=W1RvDG4.–0fRT1KrZHqDGVɷ;Rs\"H[viN1$Չl]0xћL+.`J8>l/J֛Ǿ-r#Sk;+4$:.uѹ @ m2%ukm5]y|R_p9,a>>$(( "=_r^ 64dFWI]`37{Fq[&;syY_!買ɞJ?quZDeS`jI)Ԃ9{xaS>y*2Re޸]9זedU7x7$>lOtHyAEż%枟÷UW*`+ADʄ>i] endstream endobj 255 0 obj << /Type /ObjStm /N 100 /First 875 /Length 1742 /Filter /FlateDecode >> stream xڵXMsW(LJ#[U$huDHjylZ6{`|h 8I('YIASTB㍲U6uʖV*y\bXQI;+_qEyQ`Ul %%*g);.'U s# <sEbrY YpKeĀOv"R#c"`xLg ƨ1HB#tE(gHbUO( LS4C Ӱ%8'G0$N^T0 h>)@spAU`0hUh#3HhΆNaT1d95_V u4z'"&b_/TR")@0CCs`hFLAsAB`"Ba* f#S XW(ȏ`u PH<XyÈB\!%B0ٱd haW#IV9P4Du?#5q舤i\\"M@_llɌpd|=,cM8ktԶp ͈i6hf\g6Üd;ꎐ`[eWCQgN_7ꋆe?;~Yc+&InV~]wb>}3 :u89LWUܻp2??[;\ͰR{|5(3~,ur5]~zX]U%pq37z ӤpqS?i&ݛ麯N?'tq^gp1_\~=ņC׈*7PDN,4٦/c_vϷ+xa4~x=5gM}砨󤿜7[wp1|$?.޻w-W5НIK!돚_¡\US}lُNwU7-R!5oѺɪs?Oz2 wpV a;~l&~85{T>^ýۨH}V֢Ҳ ݈UWFbF@ӦDdͿlUUD|"OP8|*͢t~)lnUGQNݏ#jL<-qGx0}qN,k;)syǦЁ XM%-̡m|֟{5BH[7T (g&aI{6ʇ8#Zyoj谫^|t4(}n\8\?ĥ50!Ou,EK; :I;Km1:v`|1h@=JMIB-r*6+Rk(:ԥE©\ ~ݐkΛ- Ϻ\,C?A_o"/d`%QU}wJnBg.cN*uIeG[vPÀ-p:`#V{뛏k  ]}Ű|Ŵvo1ܕqoѩTڸkÂ|khqsYͥIKmb N.00S÷3abm] &<]rFsdy-[[de祸[f2r4N:gϷ |KXҎr@ "i ~Gć"|&ෟ. ! endstream endobj 385 0 obj << /Length 3236 /Filter /FlateDecode >> stream x]~ӦkI""rH׳fJB|֖g#ًL6"23{P2rn5:ioLJ=A.ooJ7yNGqHh%V#gǖ†sI *VgnTKJ}_55ʖbۖ1|(ۇuIUW}Ulӛmr*4 q+iٍI*1]o[(.z+^(ݡ-qŰʹJ~S@}]RpRve[-93٪ uf] :&K5ep:wјnTY0Rfdyx M<΀K0Y%Z |oEДhnNEٿ-q)X,9)T(y"+ۖe>raUKW~_Fc=LyVE_^ZO][ʮ+%gh uOL`gC)/@r].: mPdIs:#45u~Su}T#1rS._!AU< sAL;YÙ{.9<%2 j O(4a ,p*^/kx "s~fr3SZٕ3!8C4G-C[BNꦞ_ ~:4:,&?4zɮ.k$ܩfҫKpHEv%9f="JI9Iw܎=nOjv=k8-*0d ORmNאXCq+ MlW_e9'0kJ0!o u&t.ӱZȬT +S78J,K>FQr[rڼ8 'iT&CfS.;mijw x"¿$%ȕp彊(2dp F rp;@,";9:kz>Ol9&DZbqr Ked)Y<ɖ;N$T3'-'kN'}^jNzN:5i,#ׄ^^K>N~= [k;% Y[I\BlYx+:5:x*,$aDgK0մe0!h#h#D8YD53OR49 ȉ)6)%qGB"p;v8xT}/ Af!e=?_la({u ,Ee> ڸO,1k[ha$ݏPA~܅ Eۡ'xC O”LshO3H~b]]Y\OBFeP! џHI3=:Obrd f$.O:B& d f@:*iS2)]A.=*2y@/bK<Sz&%FHrCwxGM^BcVMygK8?4GC!#I;`/r?#ᣞSlMJ Ѱ3v~ܳa/2ڨNO= Y*8@&F6cvP dsLJǶ(VC6Vg0^(h"?w̨qn*̛TlnP/K'DiΦݔ2eYڝd9_ݑ:+\&$H].Wx7"TLɌ:S?V'σcktMkܿ)|D%3\]WX+q1Jn0sIEѤ ; -r,V'f—! gAExϊyigF Hx@wGSsqA:S֌Ra4t'c,jlC>uWf ,1 (CTD" 10,Ξ6Es'ے ?[%"3u`==[b|Qϯ339däR C4W5e e9<5`GԌ1BcQs.'BKzDM:`4trCMT7;|.p'7WkO4煓vz# NY6Z({ŕ~A㠖x7=nq+@8r;oGE \+Sɓ6 ~ endstream endobj 424 0 obj << /Length 2598 /Filter /FlateDecode >> stream xkoܸ{~ 4ߏ-pE/)+=hkaCh%)-k'44~-΋3CW-޾8ULU{j^0E VXVhmu^:)Y(ttE_/#W7R8eq~Y8A(60m}Y/ƕ-@[^,/W/VY#U ~/)򗋿{Q8!R `@+' a.C yX2E˿Rbip(P 7܄8#R*`%\'HIT([=9D+VIcl 6YdZ> =&EoR"Tq7DHy0)Ao=\xphQor *td ֨w.I #:o6E6`PgQI$尐!ª@qc BqՁ" L@˟4 FT*}$rxB[ 77詋HU ª2Z[\n q_abB{gs,jM LRP:CC2WO琲NŇ $/Q0^VhubuA#^Ş^{{^N(xK=OE)^e$QE,b< s>6H]~Уw[}"xF%{oQaq8rQ܄ov4Zy3^Wa݌uz@jچպ[0UÃ*X_ulWֱPݭ^mƀ߇PW~H! 聎~e>F 9P22v~P+!Vx3xL&APæu;vWY HPh<|yqL0֛oyڼ $FpjF(oq+6Ř;7Xqx7G' (Ǫn'O+#7F tDKl;l2YTB2gcr4R]"M`)$QNAʣMq1[tIDC>#]2OEKڤ|o яpJ{DCÝP%%?..K a}0O̓Ri|d䇁@ఐ#A#tгNۤ d>&T23[,1g=aMbObObOb2DOR+Ij\uI~֕ﲳBI" `!C3+ӉQIKU(݅*vt~PYE(ԅRw3N݇}lC=w198R/#&OM5\(̭p 10wpSj zcAːla4ծjߵ~滵*AP gPUw+?+Vd]3j!:Yyai9oj÷Vc% Dbpc~w4&_?*5ZS8ë&E}p/0!ӟw3OնMx$(OC$VO9mMn oц'vkAU0<~tNbۤSh]>ₜ)ׂ+qD{k ^ͧ ᅴqB%\jNG'35IA^sGXYh32tsm&(ɟӟ{D4@$N(ٰ3^:iApܽ۩ X9~tfI:|bįWg"aӲB0TZV=˳#1|uI[+YY/k/?Bn}`NAzN}`tbQ*آo}u9V}ջMPs[=t~۲ׇ tesfp?}ϑ %Jz7CoэӪ>&@vOr uhiۺ_0V7c׿͸iXr oENq 6\8sc1߆!=rUx-\-q0Q2w@6}|4(yRyxl 8x5' /n_Cnk_7{EpԃKU, "_ˁ( endstream endobj 381 0 obj << /Type /ObjStm /N 100 /First 870 /Length 1263 /Filter /FlateDecode >> stream xڝ]\7 ϯe{cYdZ^]"C 3e? }6^ ֜y~%[2H%q+I|}H}T-Չi40v|ƂO55SsF%ɵӤjǞu$n%usjmZ2A1IKD0- MP喘݀ L`: X1)-<(Q/wx .cƄG.@_\H0 @hxˆ x óL=<0:Ll<[smCcW~x; [*'.>  )$U=mWvŸ@60y fVgv<^P̟gs Dt<ܘi9aO`sE7e|,"!E]˴^>ާ]?}Oyñe};<ܾ#ݻ>Jgo^]f=pu=/pnw;]%)7>XAoZtFQD"@=ڼLC=ë~|x//ɛ|@ΙǜL6Ba,ׄ3\1 aᘫ۹혣[o!'j~sfJf0ֲXf5ȹXfX[,3z<(mfFSsŷF,3z\8]k@@:6Cxeo+q*$zά; I 9oCpސIbc #AQ;-[VIZjտUT f] NoTN)NVr n |?pK3yg9ss 9sȟp&EX6p(c*na~bjWp8 V,4H&q*qHAʆecϏq>Gk8=ڰ8,tp$ endstream endobj 470 0 obj << /Length 2445 /Filter /FlateDecode >> stream xYKϯ-T KA&'r*Jv''`!t Er(h6"wO&| ߽>I64$iFĒ*}1؛/tK#hʂYW7OULua96]rFP}U]-L3f)S>LaC"twj_ $b1_!Ti2{-30 ^.QR2{X|vEWDt4~Ng&2 YjBOE%L[ s "sw6"QeلQemXSSV+&BS3Rk-x?6DZ%JN Xѭ72frWhQcʨK1n(YB*"êe"Ly:a+d U~ ZzLAB1ە*ާ(E>*UӚYXuwp,+ 0ؠ7\/Nղ +Kߜ!sj9⇳fڛh{v Εp,LdWUBX[)Mx3]+81BzmtKs}zyj z)@7YMň' HXPH2YC);"TC,D⳯jɴ߬6B?TqB5(qbC5CO] S ڠtl}U ЫP'!.O, UC k4Aqdn[ߧ+<8z]/] x=uԞ^0a'7cPRe_֞+:V=r )$a> stream xZYF~jā `$^d)G"5x&껺꫃o~|߾y1J7gbs{R0MH&ls{kE߷*1[Hrw1pԵŻ=nZTlov2rX!+"`VGS7gs{joT5k$d]qNrқHO_,h>_c;L%cd$'Xe}(cGwفx\E*{mT{dZ&TLGg=7,@E+[_/eJ_WG+ uO(_6tMM–M"rD|xzK蕴3ɢPι-VM7 bQ"bQ"uw!)$mζ}ahāp(/ ӁԴ&`b`)s; [ 4cH03EkҳyYwk :66v l<9c`Pz.t5d')l>,R.(p. ?@Mɛgř~kУl)$*"t" ,["p٠l!w*P.RQ`:{mIF ܞJ2h:nw~ܟrӻ@1@(~Lܵ9-wmsLEШrX*TÊ4.0/<$RYj΂l"~p`*Z)܁=q4o7o{KzwEƫ7)b+0`!9`n =]k.M`@rP;cI.-@iqpP֤`k6$isھ;pg!s[;Ηzn.||߆.6A&v =}Ig12BW*brUI&/NC>ʢޟL&4fq:0u<*A&@t ޟQDHX.HW XH!&t+]hn_ M푆 j^ jT{Jh&\_3cTC4KӄVh0&}ULOgq̧` Z^ߋCoLy@``/A_v7fd8:Ѕt2)0n #pP{Ha^(%.mslk(A!ڻVG ֣Jf.XGH@ &E$Txb,U7UIX,VT&?Oge`~ 6;u0H]_J iO|wzXXxpni L#27G0GN8 }`+pyA- r{j%ʎvϮd-ɗ# Rg,ш3{ gr)LU'gܟJt.H#pW[U '(Ds=~ rqJȋ"01?R* QiFc:F+yU `R/hXrs&GL~FQ\m@xUӝ?{K~Spޤk0:!\I9_eUz'·0< f*{((a"ԃҳKC>24LS93/mjCb+?8a}*+p-J9O7;ttj`<Bt*)/E?U|%"{=zNpV]O.ƫ`k @(Ĕs/ql]kȓNE R ǀ r+`E@­a4:$]F:zqu:r;= о *Ab-&LFclhp?3)P鰲q1K@dGd߶j翩_ăVP!}b":a28,U&j l~5~6P{,Nƌj;< -r"Mmi78K.7.0c{XHH!C%!C(}Ě%c1¤c*r͑vR@bbٴX40%܇ޗP}(f4jkXBZ3|y[~)Y~O5tjUE<0OWG -/|tH|794D񩻀p`Ǜg ݔ:s/=!: b@ C` ]J}+$R宦ư4īY ף\5W,zc'L> stream xZ_s`BuN(`[wͤCg:OIJI E*$_>@QPɃ%,.v]BW4P&a61,4'L*.U9_5͹i+;_~2#R8&pa\mQ>ȄQӜ9>,#" ̾L?Ď&! pI*kkٵ~٬uj;ۆ-m;2 !ӛuEU53ݶ32mnb5isQ2({?AsΉb٫vmX01дnBǦ4hF.w}4mdT jst3םy&Teu@XE<uoAQ'EfȢ Q J+z8 `m<۩c}[aeĦmzr:znvX@Aih>*Y.ͶS_K_{spϏ+i$c"Q2p++3,g+Y`eC8`<\1q~6_!=d0\?a + +H~V8բ]7th*ph }d*J=ȦOu\]Bk'8iCWQ5"Dc^b+14{19D~ܶJ1w!H!HfS NqAGڙ$ګ}Pa%*,43}q8!H&> LACBI+EkGH=OFcqu L j;aAl=[o l*?P/ΐ;QB}7]t~t--֭GE6*,DžEiq%'Nvn 3!;;W >l&4$&\N(ڀ.Þi-ì|:|(们_4,O_K krT]onK7?eD$5QI2;"CG̣Pf)̌>CS$5 &ҦSK;aEl\#ed<'5Mb8љ:ԅa`Rwλf2aM+A&3 I% QO;:r[Bj[ L .1EQb~;–qE%sbd*@3y4 “pt endstream endobj 515 0 obj << /Length 2387 /Filter /FlateDecode >> stream x˒۸>_Q |T][!N(XH-AzVʿl8aV4,_QE6ӟ{.w B-̅E"/Db aEb}ǻ7IEqPZa"ʹPYxzh1;i^*jh_x1:LF.Dny_HW-i,$]OS&'(k0(ƺ0YWBkVEEѸgg 30i\8 i":FX894_eZe2'ju}HIC4KyH=͗xX}3IU^"N4kd p;$kwI<L ̍h>VX,$Ԍ4N42%-ZGjҤ2QpX.$aSEvŘT&<[ N `hD}-cb2s*ST ߇7&!.dp{@{NlXN1SDw"e[.3 UC݃V2{y^:QvcT!~Nk{T&Lm9Y ԡ@K$" & %Yk4$=7ZǦo˱;'.5q>V,J]:QӟVK{_]3>O&l`I&biwplQΈ]S;$ؘU / [V[f/)XՏ[X&Bfg >5mʫ*ʶ_͚v1\tO]MΎx\@  ¨:H -TMqW/ĒqIsaY1M7XY.d.cj<5ex=uY.U4=m{h^wnS[󊕟ƐӪm*a-kJw+E2[6+9.\'5SIwfG(:rL]ݻ`FZ F8 igc|?0h}`T~9zW~hnk6òݡ=S2 9vXc+ hf54\N>m SB:!l7}X~[B\;Oz.إбG]@۷EY`cٴ{ryTIea0z"́o5`X*u Z }9Qbſ;kk ,EMoNyfckp6F>+!/]{`;z+qb# c!gE*s>|;i8~Օc)ԜVCcڳRᲪ{ Lp>ddȹF[{M燃 +k rl명2oELJ"߹Zhx3 bJ"9Nܐ}J45zBq)H|Sg |oe3o~U#E ]=4ąv:;d`sEpRAPPvsf='!qrкkY*Ib=ӆ`pp)k)l2n1@aRM73dV HیM6R@Ct}(a.vl8V ~Qn` յ'fp+FSp)fX_POC-"g3=.$:o<,aTmG#MOh'׬UlV6=c@>tÏ#> 4#$ZXZcg;ۓ'ߕSß= ߴ>66K||? Xu`m4z'/1>Xpَmؾahyhm$ ^2OTx$\iĿ sV%c2`qyY'D~} qSR_lz9+^T^_AǴ_7坊YL7"J@ZoH3)*Q mĎ/ng چ7?zg9 $ͫBdG絀yWj0pz-fO;4G{h1pu~§L Fd%X36L`Vi]1s8 ݜ8t݀Զ.0~߁0f\> stream x]s6_;M `9Ql8vk+tNhWTI*ﯿ Jl%>dA|,x&=wӿ/v_EǘD^wOzqNy眤s,w~k {s/aA>1_͏G@ҺV<|Y7 vXLB=^T*{Mb^'DA6O$qC)ySe^Gng׫ljr|׏ŷ\1"e)dD/g-J85݄{0p$D 6jsg_/[.5baSVc=U2E˾n=!yW-yFrB8i1wY:*U3,=\0~Fz3٨nJhxL[ȅWؘ;+wȹ*֒ GY5s6n7 [TN?s.+>%nB-}DeAGe՟h,QK|RLr)'y\c(ImbQPjMׂhH_owc0R;eA PW0ꛙV'ӗ,s|tNJӑj:7jԴf8ɡ)ulVirS>EX{oxŤ $k>\U-hVu 5uCNu\^n-[nt^eSxwʙhҰpPJ@KZ4C.|pTIyG(>15QHUqBНbj]ߦ ؅ZQI^esNCYT'n}iZWL,/~,N9fza+S,+y6I|,g&$Xr_TiumXi5ՈD]liF0 5()r\IrߊR@6-:ޗ:3V]Pau}[E#q7?/BZs8JzUֻ|=_ח:Km(f#fOZpHt`IHsH2&x gYoO,RaaPOyh6!L8<8([$jBR▵H'LF^tPd\\WdtdHEg<h ^v+6$ sw 3(VM)3*hҼPRYޮԗh0ʊZw7 y*,-wQ'kg{"b}H@qIjnj#6uyK5 0Gz_>XޢmJʟ@ؘD,/b3 '}y|4na$SúzXKOJ-(F܀S?lSGiFc P? L(7-wB`I}@$aRRmV/lɶF[ϝ4!9?>'zIĸGޭ`G [r|`cTvj\6/%oen%, Lᤨ#lB0~ng XGC(Sn%vVbAF4;+kY7ߠֆr2?If0*,R|Z3cO v| 0в#?"H4L{ rtI`it1C8UcDsrJil9R6R~*HUjCWF63<`m+p s 3@[*\56~ EǮc/=y))"}fQ´BĖ;|1uV<Բe2]2e 3$ 5t Z׶ +PI<o#[H`%?v+B[ꑯTo]+LZ+NpR %R Qx')ğ u4B%9f:oir)Ĵc^jc[ cBTZ&},lfū3 A) mg k~))cF/ V;6Ep9|2p%gl#s;͇z[G/Q2и%[QߗFjx{c\VS*n?Y/o)iA.R슓`CW'X)j%Ac[y053XLg]I,و!pE|:O~쐓P"7-wtBg`ʲ_—!کXVKm9j sv ŬZh6`\[DɚF9L{Z(b)wPkB</mLÉlLd;FHZ2憾qzk~}%>-iKLyC~{\ío̹v~[Ė }bSpIUX""C[&9:9D'{(9%eVxbaKCc`c0^k˒k ku x@SwjBtƣ#L;fؒF  `mb{D^(G ʙ}X['/ { pF3{]vfKVJC2B$ QFw~3 ;6:Ks 6Y{KgF6E:9_@@[ u d wAr lcG?5ܯn'{ 1\S^+j x ږ:6:9f᪓۞bOZ,?H] 8 Q[iH\ڋÕ^0[ ޷mjޚci2  7Ol96Xg FP{_c.{xPq0t.U=0:Ef!pK'LHLS%nֽlO[6'}~dL@-_^ṼqJK"zVշRDJD:S?u,Vs%j um3[*Nr}NcufWXǕzZס)$IHa||%n#SdݕXϘJ|YA*SCUYdJU%zyQ7iL R#X Թ2 M¤M RNܗ0*oMix%|TXLz9LCehdi>۔+imοb6k2]}YJVi1iI߸5o?P(_}?ܧE4ȋD25eMjT.䪮 $zSJ-]+*ÌحD'c(2k#:RUuަDN]dHjL~}֤`24W777b$wJsbz!gsj? `Mx 7p-$ }=H&~[LfnVW"]/}Twg!M#dXM\!rߜ0: endstream endobj 554 0 obj << /Length 3297 /Filter /FlateDecode >> stream xkϱ"L8]8E*Llq^.~b-<Ζ2Kemy j Y3j S^,%d I~$>B^a{ "*ڦm2=dкgG]VdY5WWkƁL#xj3> lõͮFy)cznnj5V3MI {&j+deJ[y;DO(k ]uݞ8@lu㯻Zqݥ^?|(2i"%\.#B4H8[tvq'uHY OhHgZF2!c`ZbjT$7GCDAC|u)b̩b(!.jFF=e :ZDKUs$KaǯMVka5k%l;zov "+Xr u{IQʘ<ޗCĜ*q(Ӛ B{m7C{4RA29/:n6 GAˮ8*uM_ۺ$PV"Nq]`27ӟT}UWvsGla<_u 9&ۻ-ƯcvH^|-AQ*!M-8.20})̶L`*C@zsd430#QߘZv1Nԉxb0dȆjjDTxSaZi\965siĚ,s8 EvaK(XՙBXEk!t@T8B~~cG .0սƃw-dZ@g;Kp̴`%RԆbk 0R!\ (`<-AwqiQ]Ϥo=R+ʈʩ[@M=%pf<9@cGot3L.a)Gac+t?uɏB0F2e e]np`9'amU[zO J1vX8a2d* .uj&n_Ogm9jyOOaԶ;!a<rSx h4 Mz6333GTXy)#+v +Q*,#N)9` bsdU8y'2w I;-D!+gطaΠ\xoSISpb8ጥwf֯&5aX"{` TR)KebT&C tSJ*0L@VCN݌'6Xh \Xc1U!ƴœf<cQpqC =3 ]gh%d b_#\#|*=كܤS=0}E.ZJw_g+T;6򘄊n﨎a>_M3P|7Ks?˔^.Ew$2O!IT 'EB¨8z)S%iHR@c:x2ȳ 9 N Q>s3WćrbZ+0݄HXEY⿊xB9G}icq_;yзW8a@G "={ `ɬ!1%͔Co({|Ʒ r4i>-1qJ=~9yxd)Rt8Q_3 8*46Ip fXK&vG{S*()J ȩ>!Ek&THv?;De!eJ-a !+`Pt8-Buع-M΂驖EJ+ݟҼ>ZF;-G@C8Sk!5DqF?TPYv3tkt^?0"~7L@*I&RA9`T=h!`W莅Wǭ^:Ht֢nbI(Hhy,(ݕp{@F0)wg~_w,N#Иɱ3ɴ1ﵯy[$pǵۮw{w;^x%-}.;{i;ֿ3vXIpw㉁$*:?Ͽmf; tjXHMU.jގ7 3I_fO0Z^niNm_߄A#=sэL9U)еU $3,6rkm|(xR3(=RĽ(ê zHDMLի{Kh&`J?$kez Yѹj b*Gw7\"[ldXƴ޽ۈ9[,`qbI#x=tx~bU%f%#1\MS:)+,[w6V.5|."*sKnn󐤴!DJD ?ٺr^;B7:.[[O37\vw+ Tg)]~; q.n endstream endobj 467 0 obj << /Type /ObjStm /N 100 /First 873 /Length 1530 /Filter /FlateDecode >> stream xXN\7}?_ۗ E"D4Z) Tjx 4EIg"ցr8.e'%ؘ+Mv1-.bcۜ(6:lũ!eu84ek.M,R3N"\hKĮ*aI uHE] 0sQ"FLXLЁhPhi0S5 X fZįAƧ-[c'9 t *;ITСipȴ~ 8FBeQ'I9ɴ$ɖ99p3"cHneH'8 P`ZYi>4 n k0# ,0A%` HrJS(?H憆jVnVh!B`j.@ bQSQAgaTt^+ROS+KӔ3| 3p)Xb W-1=l3b,,i1),jH@Q vH[[a|sϿlX-o_qm.%u>-q,Snq:;847w@LF(M "f Wyv忷ޱ.4ᶗD8_ԅ„ƽi0\|\L[f9}U)$uYpFQѤXck'NWK߼xyN_=B}AԢ^QkcBZ#(>H> E.ᰢ G|ZIչ\ׄZzꮞ7=I}7sf_Kp^.FW^˝tabF=CZn8p6Wq D$ɎO:/kJ0PbP |nN[P4TFm .ȝ`\71UOւ:Չso"*qN F9ϵM}S6aruFDNWUJ[Pn*Zkv-qoZvs{ f05A}`PlN,h^0ȶqkJ`n}O$ӳv{RI٢"ԅ/'d|q(l" ޛr7Ҡ׿Vklxm]/wno](k*^̸ȅ’ɐq{kk?nOkz~_~7WzկN>;G,.`j\1{zt1۸wږ[WQՠMX*KkHz߉ o>Ӧ\rN; NtA:c"<3&[z݌bNpl`3&$7AIjI+~\BOaN7y,0/V}6O޴);xj'e6kPÙ n 3_?m# endstream endobj 581 0 obj << /Length 2743 /Filter /FlateDecode >> stream xZ[۸~_kHQitYlm;E4E [-D=Re2}ȼ+'ZMtۛ~H"*vRqi&Cjൔ_?a"tݾHTJP剧*MRa~XvA[UEAi,G늛ֵ(JwLKe.w6)>X1[LiaM{Se+r'V"ķ69;HC/?L"^:m{w ~EGcuka=\Joq[j.WR]vh76-7wz/ps|/Rk/hjITQ;n(ݵ} Z9lv)"J"n кfV4oBdA%j˗[`IB_F隸X5ɉ, F)_c:K 3;tixj7 C(85 8bm%tDp<![phy\]V̉`u:9\iBJz{,q|VRn4N7'CLƒO7q[;CDh0uk\gkzBŖ;:n;]&P=jV/_&TʵI<$7:'eSq {N[0Xw;u{\MWf ʫ@lIvJbE)TyDZf2x02?E9 Xllfb\b{fa"'" 3lv`U-Q[Q̚%";"@$Thܱ4cU[OY'qͯk;4kŁ%l@E1#xQ:Ս3Q.bBK%6M0e9H+ɽɊ`ۙ7= 6gPvoQPt-̇NyIORz7͍ NZ fVc[5eջ k5 MmI4Q`k;M]Fwh^Y&L͓qqLe0}yS˟z_lT>V=qɨz`]yU eVtZ,(Qa>-AQL)r^:7uo/zTͱ#\DKZM)䔹ŷ]=9D(ܚFa9" 9wwh7n>auxc7yhXz}bo2-" dThA"S7 %`.Lt^CJBgq.5T2PtJoaaGr8z{P!fpr%~)Grf%S;# 8PgUEXI_k{:jZD,*GS;}eS1mԱ#@'Tnxn"Tbܒ{4ty4lb3|{"ZBPf"H l7ء2:b/PTQ,,bnqMvBXxs#4XJ800L`qhH9 (OT1=Hߒi =}HjJZ82sNJ AsgL(T~ }+V I%g0߯0K͓e)֠eĸ?<(̥"[8g;q9$g߯e~maαکLXld"09qJ HM7T~Gʆ {(Xx Oo |2GH"EzeL5IPYiC("30sp_(Q㡺Uy5ݣΊDfS(d3WwKf2pNݍ47?BDT4٘ O/jtM)7Pyu,N1͕CgRYU5vгV- - ,Ch#ݚ4K*5%M]=,*S]qݓ*fI&etG[mK.x·R)QdqA4"r]=<F3 d*кt&2̊bUNXDaW ʁ}g߼CMgj|S|d[;.]ۘ$fWƋxYC/Ͽ϶$L2-϶L j b>}fZϣt0caR_yqM)&;S gsbcOw$Hj̋n J2uѢw8IXQ ]=y;Fee_>C$C7yT׹;~8ӫˡ\ f/I-2eC䧄 E~r*/𜡺A*R|Eg䜛Tʛogc/:dUB|$%=Z1gM0ζ'UR%*߉TG ,)(OfE\>i[H<5frQ4ho # *FFD>?F7 endstream endobj 596 0 obj << /Length 2914 /Filter /FlateDecode >> stream xڽYYܶ~ׯRVdžoBXd'Q];\ >J"E^ԓxҮSar:DԠm7(wX03Ò鬬hȱ5)=r 2D|0)¤S&{ x[u}) b#V#AbxMZTc[^0)( m2(J,0)ٙ,2C|c;]# JwV;.)fU7@XD IAzp1s?i r5-\-V8@KMGXԃza,QtPNpZ<{ Z*g츥[QJNf/Z+.Y @\jGnW,cV]5>n88l!Pس/5.@Fߜ!"GĿ\ċ{Ul \ TZ>p6,c?p›q@s ei<_XRI_,%*VpmBU iPGԒ8N#)^?Yx$ACpL/_x QN8X$nGјhM7vWldI (!JB&C#?0Y+=ނ.g~R=Dn`q ?[Dy3M܀s8wI8èyE3Eg|99AhG%ydFP /fDD׆חE˯h^QK(I t~&0_S>bvҝt×Hڗ)0J}x'@`ܹ/B:Lm \^dvyP[QCC aUJ\wLr*}HM$Et]0|!wr(XW>AYB;%')KNGs5r3cHRg1Bޮ%K~ʀNwN9 {-'Bpo Ƒ@d羼fped?ҠPHfYz4p&b0ՒS{c(3Qf I=I'9L0c;f:9$:x6w o g[TJ{F/n(O Y3:II5p|as*oM".7u)`Y3]8bNQAߡƳ(qT3RtLr3sF_ᛯy$3 2L ]YhQCl *tA]yo.2([2߶Y@;Lx.~7'SWN?7KI? o6Ǖ"CxXwL< Vzf<)|~'ɿB|U[ gPbBuIGw7n]rpËBJEy c/o9~Zޝ^zL0IA. #?,~( oNprJ'~5 .)W*k*2ɡfET`DEB il2pQ/ʁ>1\CI~>f%9Fb2aehA=X8Xd endstream endobj 607 0 obj << /Length 2853 /Filter /FlateDecode >> stream xZsBL't& mqI'ʹ)xxeHtw P, `勛_zOzq Ys@3:ɄWjwXW.<˭ա2 <ԇ\_ۆRƥ9z}6nG[z%UjWE_5554I6eV˺teK-wU=Î49b^]]/(F X,bFG P40ȷ{$ "hZjֱZPޏ9R1o;0a\1fڢUn){mp1da*ns-.|u ݶ94M#TmuEs!@]x2.rz~8NkDтyqbMdCّwdo"vi@ךjK7G ݒpkU9Yeh,!G8B%*cp0i\N7@[RӮ&(͸6S4˰g_/rkfɄ43"md%NzMi̾H}ք!zI:7r`0[3L(qE"] G/vwŻLJ1pmտhyhS *[%>B}Z2N۠ PV2#̓Pu7ZCiDյn 'se#7+ӚI'.*Gx 0%RdO^OYjO{_]_ 8;,Ư^/^|!/Ķڿ4迓94-On"gsƥbFq_,ζXXB  УGK=豥GqoN#QoJXT=r†VPhtd. _| ߡNeiK m9Nͪ/:Mέ.@@/ WLrG򁾘1N!J&26f۰ͿY3/ {`2 `M֍lNѮsK(wXX֡֡{vP&3H)5ٵ rU9`@˔ NP^cYbَ.6֩O7t.$J#T?_U)(o~0g7p .s>CP}4?C5X@`L)NAj:xbF " ŕ+X/N_;) 9UO'={=ZgXΔvdz[܌X~ʰ1sE'/xǵb̌)fgL:ԻT8$:`lt;`=xgEı,OG#k 'S`9J8]$692Z7BHB-1оLk|GK_3*ȧ_AׅaFGbS~X=fƹ1 )XJ\D ĩeUvLce[Cmy00uWŮcЀwx:o:6u]uSElMRD "1'c> Ŀ78}3 N_2=)3a Hp&R݈"x;?N?!znjsM9ggHgAyX.g^ >.*̼Zrh%!gǫǹʞl >4>! \{Ip8Xyt+3a_}0^C'̤"yNYyxbԌǻR<*χe>i2BKzB@BsyBSo4 WH} +ܪ]l]W;UdBd Uڪ?֥i ڄ(1$ŔM)i*60:SNZ>RM~IVПY&i̪-1#)55CQ3U)ɦ9r: UPm>C]X]J ۅ$;4}W4 s!n*ix =EGjkthkCnȢKJb_}<}QÞCTb7L玉8vfٗ^!@m.w ³1E:҉)a40ːz_L!C08H1p|F>іO 3} Oh]8S涼܌5%3ٸp1,?M :0M6uH8q9.6R:{Ů}sn t䣮ǯ]Mى"\/hrf\P') endstream endobj 637 0 obj << /Length 2643 /Filter /FlateDecode >> stream xZ[o~_>jW+ɦ E@Syh F6T\ )R::}0yxf̹~3rYċoͻ-R9gWۅSp2Wߣ"r? "VhřDA 44ɀ4Yߧ/ư^¶˕tz&W f_rrcѿ ywmUя BƲ_ܟ7OڒR"Vv<$|ҙ>š`RQ^ Ռ^@G|d-aPX3atw!/ѤOa{nP 3ZU:^<#ЩN~W:eq닏ag1fcUte]؉R6vVyˤJR`eOZ";+jGkc7Lu5C#.}cF]Abr[7ǠZ)*VUfj MZBKG-L#_a֢>V]Yq f9+]Y4© rrޅ-TG>/ny+V]k9-gɦYo;$Or+-gȭ+fSwYMzCwLSԷl ෋6>NpUGG drh*IH_JV$>a"M9a!-,$*p"&\uMEf'Qǖ[ʪ赔Q+i%fcaᓼ1wz.p$U]]ݐoСyvl%j%n3SsCU5Gʩ`  pd0'0ۃ)g rƣ1[d4n C- .-3d|_A} )dSQToGޑ c\5a}|$$O츏2KB=9F{6yYg &o)d^-S&Pfj > 6Tm5ා$p_>*RQ.ūzVaYvDzݤ%jR3)uͺxB#b9d*2Д'yn=U8=Ym)UbeLtp{'}D6eUve+}|*8tͱ<~||P@7| %p^нQ_a:I"ւ-/. ;:WWpGQ:)Ji!_;вo ,=a + T)1֌N#Tq\!YɥCtLcF]?{ Jڱ=&WbTG/383.f1{op[BaI 6UU7(훿#x L'gA[fޘʤ* oQ,9![[=MR0pp`|+g֔2p@Jf֔0 DQx_ (%#a==W,Fk kCόT$o@)=ٕ Ztq/NVYLZ cD痹+`\b&a%be4BRȅEps@ abv όg7w|6og үP[((V UP4QIOPV*%_YBYِzh4iL%*ʭgJp)֦RTn8͟:edbekفY)dF͝_Tnm+i *3 J빜sl5%A:lԗD8R"EQ%'N3+zĩs${b́ N}GGmתK,LfA~"Fz&yJ A+3#gh\燾2"Ƞ픶C\X֍N[q%}-%RviNwab=Oބ)+L|J|wrcuQdr]?| 1tjE"|Ig{Hl C'5T³7CNkKfzvה?f\F̎J081=u#q5Bi@kzC-=ۡxKs4#F[@x0T 䬆2 UvM کv)$(M2fLLЉ#ў{^~:HݸPgL>+4pNX0] ³P<4Ž , endstream endobj 664 0 obj << /Length 2727 /Filter /FlateDecode >> stream xڵY۶[ԌHJa` :ܡBh[,zn eIq{HC*\zZdj_LWJR2&iV3"!|Z=w~qȬRnwHb22V:ʒJ:K;*7TTJ;*_8 ކq( ^.y/SN0`GT%MvCf"w v7?".$'")bAzȒzɔ0 eqH:XJ䙓l+jԶ,?afҴ4͐ŤiJ?Rodx ta?^ڈPW jf8y08s̵Duu#[aڣ=nl˽zWn GHÆ޾5]a+[h."M_`kzvuKGm諚zi-ludB -?* Hj0˻G[ipwXJ4վi n|#.\~lzܪ]I~;>P@ȷW}m'~TAcEZ44`ӸDh,r;L]e^ CU]tH C AG|fe2 DzF8 =Tᑞ!V bxKQF $a 92pa tqm~Q0>~P|2%_;pEP^(kkwyoa;4'Fi|b/cZ,=lQq@Z.1o_6C <7(Z_ʊS!Ϲ[UGœ/GBGe̻ .Y=72 l^tʆ#Fc{wIh҉g9V0YsSa$3BIeR,hxu\/|K󝔏}} v9x|O?]̈DId♏R(9E^ @q:x#qxjP5 )Pu5D9Ÿ~=IX8+jץJ&"˒(%(GANY!7v &Lj,KhHۨ -#40{*4RRH"?OLB'ΐxod !+ >7 5$) 9ZJ\_RYOrW=Nd6X5uIG**ɿ}ɻy1{>>LL@eK8B, (pT(z2%@Zĕ3CJ9e1tv7TA?j/Y= C=MퟕhZ }[)E<tp!\<6Oj bz3, Lq7zu"C,bd`2f0/f $8J?<=h$LQ$"gt۶<1qϔheQ|O/H}?t2ඞ](!3\IEQ50q@(tjf/Sq*B)pb30f^а endstream endobj 578 0 obj << /Type /ObjStm /N 100 /First 873 /Length 1266 /Filter /FlateDecode >> stream xڥXMo7 ϯ/Њ#6@HE .bH}7^3}hPZs.KѸh≫q S\Ga"MVDqߩȔ:ۈqo1^{͸֋V+11be6Okaf` c"l68a n$!t`h B=<+atj0fx*0ƈ# #NVX' Ì$)g0bg1.aGc H o ܂PKxc0ǀbqCD<PClrDO\#H+{KQ&扜5(SFBeJG)b q39K3cda̢+v0A`6%caq,R{:x.ggu0)eyٽ)wwݯx5:ev}ˇ~oa huߧr#5+{ڬS&|Ə&OIۄhFJZٹ9ϖ:unz@zJGCq@+Xzܝ[^95Nozi|@xǾnS幁M5TMN\NU+^!ԁ~肞htCOUY8c [%$ԓ&[ρu&#vM( Ys 3z˪I0ɜ(TK"8u+m&s'5N9p {N&OO-<[52}Vs.c.c&J48 endstream endobj 683 0 obj << /Length 3368 /Filter /FlateDecode >> stream x[~"gI6rMQh ]"K$g(w>{]AK7Cά\- yՋW[PRd2SE81$Bj&Vtϫv,|_.WqEz1ݡ&ԬjStE]e7o{M;n_W\mo=uӽRCWdD"8Bדvoؚb%xWۦZb"sbbaM}m+) ,I˗WׯOsGA~[E:1yi(rg(W2IiWٰzso}Dn3_ _vC+yidFL|R>HW` D Z\]6>o[؜~kE~ۋo ]h8+:2j/jA pJaB jPqvS&, N˲Ɖi-*(~rj#P He0R`zlT–){J1T$ir҂Ҏ+J=sH0x/``A%:z5kJ!UOSK ZaL6JVʉdk@p%QgvH\lX(kJ=$'ynt;i5ߡ"Ϙɀ1L'$頜c*Μ1@*P53<]b54C~u^$x팻(QNÿ*sM }`# )9 g¾huDay2&و͆E-o(`} #it ёs$$֑*^ߍ%P|` Ig :I 'CvH~S?14f>T;+? ~#L6ǥq*g;)?bX·Y)*\|Ba@)ףMw.bjr|w/m8%[[+8tI2WŮ(_: m"t&osk'iX%R7`p\af%dm}ۖXPwyy*;OO#ӊ8"/qI}>0?v%3Bjzfq>pD Lzӽ(&Ҋ$dyKNkp }+b Ny l0G{8͡0Xk`к{>F+Q- 5Fiq\#wc,ϲl2,&b: arD Hf?s,Njى5Kў )*j%IB2ɑƦؑ@ hm}(*vR}#$u_#0~炟Lzb$jj릡++D*6a[ov7o3d*Cۙn8D30)Iَјh8aw_õrخ(jKR?^k 7QCy0&%I xp1lUW@?|r.Kr&?DNq.|'a?BJB} ,AK-V iۧZ'A(?7V1VT endstream endobj 709 0 obj << /Length 3123 /Filter /FlateDecode >> stream xZKϯ(dEO#'0CqP-XIAz5Ej9&K"ՏZjuXJ>|8[iqlV*ӫ$5NvGfJ`Mj덉U6N m[svk? T`LrKqT[s ,G sk\Zm |iëXY  X]nFh:Wu04﹮ߌVE;hv\8KkYv'%X!c wcѻri1sƲ:Y@1 .؇jkKZ_utԻWևM`{,<):?3uF?jĒa7:h]!"* Ztkǭ?(eТAŰ#QTOǶصYIӴC1Tm#vT Fd˛wnJXCˬb;@E٭9X9=2nFvT @ 4y * =ߡjmՔe. ky>ѫkUDyxsȢ߷ubܾuGM l׃gRѲ^AM/Aml[-HжhJډ:_pW wT m2q؈+甸Q4NyQXU#ţjB]MlwP\$1" Pǒ&sj5]I=Z_wD&7| *S|M~1'0Ab3\wPnrrFQcJ.H1P4Nu3yF[ _%{!ͦqQ~mUvkhŤ &Ԙ(-bp(ÜfE]H}\+%JIf ծk$9¸g7ġړ32O s&f>? n') aj9O"碔aRJ,`(Kw 6;fhBav#M 7J?CJU6' LYJ$- k%F9Lw*}[u08 meVM?tr,8Lz4C}ZG>ӛN7IEP|bF7l73-wfj ryt $Fkk&}Bk~> stream xZݏ ߿NγtH \KSS= %W /Ghia-j4$CY/ nn߆b!8Kx"wE,&LDn{𾨳]Ac5Q[sYdMV- @CNݝris_#VXYnq/k)[dhn-RYAc;SAK}!ϳKݟojYbvJ(j^繞`ahۉEtvyۦM:kz2v/AsoNNǜuPK i LӯL" U>r_)d ֣?, 8Iі+4*iqiB`I] Pqʂ=:JYY iyIAķr22΄ɡiVX֙צ_K L:YZ-j{L9ti&,RSE knr1uV'{E/r]Ֆ,L[ŧ]yb*%#xMuZ?ssh*d&JR ;ʼ0V2}p;o\̽w^B Ҽ.bu=pLnC ڴbsyj*qVUYa h7@3*rЊ|+Ub!LWtG\O<u[1 |+$V00p%x$c=UPV֙j &nIZYaOl2 ;_>RJeg|WU ώ{jph͛B&vRQ{#u즴 Yί)}_yL"N] Cb`ǸP,-tӜRC:|x8ҥi/xJEil9A3'_҄ɤ/=4gs,dW2ZqOyJ::4iމr,$pٺKGUc*=?V! qMbmO_eQk~SԞL Xy3դPű>`Nm*ؽ+d<4#=uSej9nDpܳJ(x$;y 6"gJddѣ5(xLt;u~Y0H<]/k__ _?;t_nu$_WV\ pڴFB0bwiGƐgDn؇/pUdD4`\Q>s?a_n_0UA{3h/=_H#N :k4KiێڷN-)9+rp8Pw|EѰt:R {xᴻr}2%{N7,Cg0Pj"T<] o">Be 5|GIpqp闻 X endstream endobj 734 0 obj << /Length 2803 /Filter /FlateDecode >> stream xڥZ\| \ˣH $Ah[-_W{|5IQo:-ʤ !Xf\mXĉd"w(cjYQYm綬+dVҶ˟,Cb%a&$4ڞMISSwupS+ Pw~mh0H,Ixa(~\n[ vs9y fXb/+fѱl}\i'eKm xiu[7KF;MuHYډnd*wNab{)$d?Վី ' {E8Na E+LtvXzO2FQ1xۈugi;z$@~Gz^٥4ѯKapt{n|O+,^wbXxSQ^UsLݖOؗύ$a2h7n.EDT8s= U-S,/ƶ=i^j7MyéNemkofq_>uX BR=tt莰hs'LX`}W qңx̫e $g ZR)rY#30na"L"F\G/sOeXuM2zлSZix_utKO>wsG {Y6MG@N4ik%`0*L6/k)`޽Oƙ C>vծG'p\?!BR5r QގpT g*ggU)hƝ%s>87.|zGpD(ýi즛Cp(RZ:y՛D\ KyLmW\i ۻ'A6 )͙QקmU_Ss)H}4٘ (亸)q^΀|FbE.㢷UW 0̈xc?C xYc2H+_:{$(LZoB79RRuiEα!7LCkVƊ-Wɸ ^5-*8RHjX RT J }@IZg2*ᢏiBY_$L/0<0 e6+Ӓ E0Vpu,yr^xs|fpczrȠ,nABSlw>ts`![ +*a'h熄VK sF!׎(̽oCΫ@cN 1a;A01"aYi+r.x9kH{&Mwn>ߟG6u?q gRY(>8$TCBEdH wџbqK$6du5a)$;D,8 J= L">t8Mt"Be Kksd| ^{jkӧ>+ywVՉ['Tt13yWEL N+6QGrz"wa>倐7фD!{>3f_baz@ !!E7 _)bs5up>]loy屓&Dn)d (./s)*"`dk7>1M!BzI}+#'{(JDh> E\yBPJŐ&M~2s]sq@M{LD﹇pBm%˸OsmHz!߿n؈w39R+V?s^!9i >UnC8`nnu*m}F*͠8JHjiF}i#LayBq}@>#Gt}3)Sȍ4an|Sfvs-Ow6Sc姷:յ.ρ" i5)mJNdtd05uath;=J qÍ\))В/_40j\Ec% X M*s_7阅"drh(uQNp~ ^ߚ("cb|Q2Žt\$9(+c,`X2`$LC6jH,5 !uw[!fut-wo˪ؾ;fK0.{ӷ &>n:%`֊k_Rش endstream endobj 750 0 obj << /Length 2698 /Filter /FlateDecode >> stream xZK۸ϯPnT$]۱]Ԧ68{XCB*>hg5 !F_wW_w7"<*j㐉8]_O\6̻}*a07ڶyQn6an2d)/֛P/=6 oMK?2ztY{U[v[ۜW8Kh"7us0w4 ~L:0~ԕMXsIR{SS5,8MC"u[jׂMwQɻ}XT4xoMHD_e:Ӊ%a:1 ^R ߛ5ae+<;3\(aB%.yӚ۫ 5Kebit!uK5vMT:Yg>l: *+˺2өS0cƜ,JIh\Bb*86]{|˚nAUIȔ\<+.w:TsDF'*"h+ׁ 2F <[sh" ~?d4pl S](NGD(_j&71ssƥ[KF%RL4WOFC5': K#^|1ģA5NǯNϞia]4U!4y4ga S4}@p Ly(J&~v)+E޴J5T=6lʙ&d\2±"EY*P`j?]H񯷯[j[Fd!O}D9H <2B cR?(84S{?^>D0>5Gk#] g:ڎ!:b! eJPg2TYځrPL,.,sܛd(qL],ㆠ&cbu=yNHM}c {!>@^je/w4j.?ǔSJ;8c!hP?$;n ։>;+̭ 'G:xn}wCGn@)Qm9, B9dfpY7 q*`SQ'qpoΉ ィP '~'h=QtHT5[wݩ{Cx Yx?ʹ?4ktZrGCgId>/T/k-<8+@F!"i:9L!|(MyV͵UP3|ƃ;bH7ش;5 W5AaˑKL88M8o[خ.#3PA1qPb!$2ܷ'k"s?s hte\n٫Pip"/X/x1|_a>p()\$aK&D|CFY uδނ-9c6 M'B}(N ,sCxT7ytzap0WWmgxs)H6?SݨCWa. iI.ƪ6TJ qYNl|u4Ew2RثCd,\Ϊm=U量VYŏOC4NɐZ=fYIkb#y47 oGtmT:#&z_iɇ;o {3E8ҴxO!:r$ea>08.q{fh-(qn4|3PK2GQ uQ]rG}) 5Mcm2ߚT-r7^5CM_ *Ftn~ IuXXo]pOT4S&*IGMēvD|p2<؞SʳIq6xσQM;*Ë 9o:xhm)`5ƂsL ?ўE8O3`| 0r"a|ɍ endstream endobj 757 0 obj << /Length 2372 /Filter /FlateDecode >> stream xڽYKϯr",A䬓T9M(% O_~Lz|4^FV{|߽ky2YI~ePI%i(dy!$y=Enȫv +u>~zi6aoj{jL:u 0}3%N7m& }kXpg"Βiy-o6Le gIUM2gFpNBj;ka[7 [0CJC"!qG~{HgH1HƉaJC0Mx)dp|Z}zvy_\4n9hFAYU7ki H GL#eoi@6FbUAK tQ@P돶jT~?4dF Rḇ۫#M1T;4-dkìqO,ΤVyUZD:lͬvdjb& 0YouE}~_{'a`!3Z"=În\kywxw=J<[EE^H&aMJP9`VuQh- w̐qMS)GXCeK%,~sE5doJb,Qy`[<ӵ~oM V _0dPdd?e٦xc( yoa uy[Qe2J]e9Pju"$  ^gnHvTp"GH%HuAC+*<?[{nn8r[ [>7O Up븘.vh5>ƫW@P Py7ѫwAƎ^jI ["97]7n-T1 "Qegm Lbts:nAHnmdBK\0qn2*ʼb 9F 1D۹?PXG4&{M~ X^C&nMUjF4 uF+'sH9HΧ.9F`pUg[$LA%Cȋ!:p@-wG17;rrsұ*<ʔɋ*zOqp+DTNL{^å.Bl#}dW;fG,0P9283GAxe7xDi&D?.:(fM~…ٔJ!C/2*0uw`W7 endstream endobj 680 0 obj << /Type /ObjStm /N 100 /First 869 /Length 1629 /Filter /FlateDecode >> stream xڭX[oT7~_Gx=U@)HHm<@UÞ(Q7'7|Fyxnqsu Kt1VX'XmeGlkr fR&Y+. 805\&'+2AJIN`fH UWT&*VW+\ l j °5 igƶ< I *ΉFD#Yp Ιz M4 @]Q01uS #>k$b}Fa "f<ԉFa1Q%XJaPJp`$0J0.aCh k%*& NC'/|6Y毜G ef|A`q F`{R U ˄8MRr)[TAepH-5KDF*^Ċ`P+68 0JFTPԉJ۞¬FH ώ(`    I8ۛt/Q޺Ͽv#d~u~~\baa C0 &Zx?P<%,fmXRV=o {3h Ǚ}qN~98A m2#8.&.oWI Gz͵+ŗ-v^hx,8f!4m1jU2"92r)]GEY@+ik5z`Rt kȺTn>hhL5'I<^q{ݽ8M`nO!Z2ʰ|W]`'gWC%lU9 %K'_HrX%u7p\lUIRs {;nJǼƕFJ"D3RDC mH(dCsCֻ"0ߴq1o15qd'+[zhfà 4Hlh:ۨ QS/!n-+l ?n%Gkl>#XPpXQt{{n{yn | 8_-g?Ytgn6?~_Ο8qqn5Kl ocW\&du?ԺYQEkr wmŕ"0}K ݞV ٚC5h&7|[17b 2*$IL6wf&|ptUzQE*Į㋸T{_\K"Oܼ Y3)DOl?鿬խTukcهmuk 1-E+oyPFa+ھPD;_hy{JncGq\1g-UiKH9vhÖכ !6-ȖׂqQ`)/ endstream endobj 786 0 obj << /Length 2812 /Filter /FlateDecode >> stream xZ[۸~_>E)R(-6AŢCd%F]sxHY8٠3[ y98j Woo‹߿ܾQrC_VY¢XD0dr!d?q0Q,:RAD< ipaZ 4SW>*zx|yUp"r0cAIU] Q9/K7#}0v1 ů׆11%k!]r؏Pat kU0y_Ȳ(V!lIa0d LO@U(,Uqb)ǂ6a@3<RŠ `*&RB۪װ"2aaCuX/ XaX 2Q4[<18ދj״Zμ;jtd\ieeF/U/./X5^H G &LƜ6*'38M '=ڟiGwNs25mXH~=k=83oKjF5[AkMWb RfUf8q[* 0NfdWNc':::ퟫs%X"G:oj*o/~²$s3`jKrd :SK ʌEt2SuYpֱ *<au%Q?*vR뼭L`pZyډsV LQJuag yI4ҕEo]]NI ޿뜼(`{툪a1cW;Y2r7owwh6c%nj NpRxN;8,[-zW$,*Y 6wkeB2xn.bݎAY^, XpN];{_:jwmN{' l<9HŜ"{PMa蘮X3g&j^/l}BHY$oax@(ImygYה[]BJA0k rB@׹:i.8L/g*IqW9.B,҅)=)5H1趧С[QBaA$%!C\,eii60gͣx#8RP|`\%o-;{M۪- o>%ME}>_y9i= eb< -S`ZۄlڥՌKopW%E=qfZWC\}wA7T! eˣpbec4n 1u-9Ki?TpܚP޺gLKt J'}ul,TTb;X #pt/T!  0z9/9-Bn]c>DqhvU92͌jBZaX(S x(4Rd,p6< m'?΃FU$_Us+NET`5cv}ɣAA~,l ,WhU.m `0#ka*]ᚹ,}SEHL !J48Z q/d؟DKUHfgAVCbIfzھ*ugIPE=a8u$X!Y O@?A$> \a贍#$=a0BN"JXK'a_!}pp4}Cq[WEB[`RS/gE&w#z1ݮӮ&v{* 3nC$˛rWG- V!12]h\'0 ׷Ӊ`A#"Ib(x,f{ɦS7~zQ/\tC. ų >vQ}YBG)'q/DtצOx᪄fP^edOb#{Hp78&Y4%b"D2ω-1XF(%au4p[ccm@x Au+Z?_*; M}eB I}L}ùo?ea #bC^Z)jhyg+@SdA O-ƹڱd]mN8^g03u(.5Ә endstream endobj 809 0 obj << /Length 1655 /Filter /FlateDecode >> stream xڝWݏ4#N$$@!Jq<ۚsK8vxIx͘+O7ޖJpVJ+)SZ[ĶZWg>X;siwxd{ǻZ<9R6B1')Hzzmoq !`ҠG˕,rVZЏt[bur]b_7k_odgo>H0iz7>mkcSbq]AXK\4b3[ʹ7v}kוT)$+bրewvVUl- tUk>Hc? S{GXXlQR}%lh,듭?6hɬg\c}9 }I3 HgwI &'4ʋUɪcC$c4Gw_m46%y)Y~9{;Esx潃Mk 6ipr1l͙Atv 2hT&T{F![}.݁2Ef4Ӯu!īФ vvHը'ܴJL%AhI/d(.QeD?S`k@lEct{ף;F.r߶xQ[09Z.!5[yJYB?;j .WDђEV99gOڛ`漃 $"oѯ=#׏vzWU r1$/J)`C]ED8d9 xu_-j/sai$Rca"R3MT̀2[w!n⽑4}@̥hA|}uF!*h̲XRKe^AΛ>xPgZh(nUj+OBTb"dY]Ot8)X/lBfp^=% l@տ]jppccƵ(%NO,O%N$/3`MnqF{r9ʼS9h& DD?v\OuZkP 1ss||m,̱X 263 şwu_cz4c.n-:źK2g*-fE^|ΘK:0OH`8utaoD= ,P_.m(HLVr1P*OR=}҅)K^j(]ĺS@1+`fI(tt].>xZ~c\. u.<^#x`G OKʹHEٳX]#j5&6}`.#hJl@#mf%羠\?+4B,0Σ;n}ly% |:KYn޶B/F_\Uư%6_q}w_i( endstream endobj 824 0 obj << /Length1 1421 /Length2 5943 /Length3 0 /Length 6902 /Filter /FlateDecode >> stream xڍwT}? I ܄FwwJFlc4HwwJ7J#!t3y?}~W?7[ 쐶0U$Itt4 $ 88Xz #ᡄA82sA"]`! XT,& A hI2nj"0 C B:?@_@W :#W q"p)X?ÏD;rz@vBB\a8Fpo!AÀ8  C`p!v04Wh C;iW??!P(Ax@{ ͏Bv?!.$.@lq*!8ah8 ]~bfb?ϧ Gà{ 3[#°{0F4T`XH\LH\s<? y`j?aba~>ivp(h s#ΎS˸@s~` _O8!.^v5b} mME?eTTDz}|" $,=3Ͽ:7_{GF =O5 7%t8BÀ\H}[+GYWTsvWbqˡĭ]Ma7ZfV ,$  z8F Bij{H Ńˆ=3rfk?enyis'ED4Q'}嵃ycS]w`M<2sr{iM2t/=h.29;^CJ߿?${pҕivtՔhӳH|dm0Zg+k|rEdnm-@G5b,u@MoaXjeajk?ܷh|lhz-p:nYJsI>aF)f ֢fe0&ݙpWX5C'G nf(y{.V{.Yj"K*]E.AJlvF2EޮY8Y`W[t?MO^s}޻.e2 _K/wٶtMaWPT+݀Oo!} R([=yJG?>8 :vhZ扯WeI%|r`fˑfavi{MŤx/hi6WFW U^"wHJ1ǎnGqueo3Sm;= v(F h| p-}~Ԝ O@hZIȏu7i?eMYz]M6{ֱ0z|oߴTS80w\fbaFm|s]ۤoCPakEMZ"ٳS4/u(dYγHOAlF*/ xWV7YTs.+fI\[&GvM J(?H]>uՊ癝~{,ƛxX|Wg+ 8mѢ <Ɨ$7a;]ȶuV ^g_[cצ naCOhFSk RnH`Rڗۨ8綅.N TT?QrE.F8*fn}q"P.&߷C Zl#E] I**n\%]Xea)amy=tU=xRP+/@H!y@ڨjXC eֹ} {&h C.evXߠ3{T;ZTXk~m#V]ƞ(w?%7joBod%> m[Џ};$C=6)?z枊>/փ_ƣ(7Kk D%|lQ?NͿ Pc?YblIYm\ e\۟9,=׺Y='?o]m]4w `d](oU"ɉf]?|!Е@>h@9SA(U&Ǻq/ܘ/".³]AηΕ2%$6>[=sŐL3٭p2qcyՍcOK0R-N˪tF(Cv fjN1) E,\`d-#€*;w9h4&2/,f^tfCڸ'-n侼αTN\dՔ6L\<2PFRg=5%lU`^jw^2,V"*1ACЯ!g(T oeh y"7j*r׃CEU6ѷ2tK,J꿘x^K2&#~YnB0C-O72썄w9"@E2k*m);V|.Vu l}oYR`lb>wcZ鬓1y˪!zI*lG;Z^9/jf2vj8YS"ҽ3/V.#tvHuyM#a,.XNΥJGrwhhf $Пh+<{|&@1) GD\:5zYx);0`YӤ6Pjԧi[iM+dwĥ>zp!dͷڬqPV8'wޛD*2ç\)A޽.DL!55$剢-lfăG4`26Xе1^r;# J^FATa]t w&;{=_j8EX&YFI]~mAg_Pf^lդ&ϽZ  po$vݛ(0y˵=?"[˓?= JY;̔Dn-uf(+k"R-?dz< ^>WU}-jDyF 'Q*\kǿ&vy_C=tR-eizӅ':¦307Q>m4asbJqVJK5t2sQ]J.A˹L]sz \ v*6cuj{l2Zsr*'kZٜ{Eh vA2v1S(OW5O+{ <(U C2[y>ްAb "/)RmX5}&׵6>hy&δRWҐ'wWthlDi|{bm3@I&2?X~MYq3#h^rXN`!}߀\Åw?}w5/MP ;K٪wzl7V\*8\AYd{JZMskr*w ƎRoo.9ߙO7,8$W d&2n,,0cY}^[Rŧ w/𚳌5ttX}k;؈2%b)hGĝo ׉mORs["xoJPd Ry|6M􁸯v+aoryF*^(Lڶ5Ϗ`LlXƾ y{&y~wlXP1 Fg 8.5 6<'6m%Lתo1eD -ܨ1H=)iz?=3QN6&2_$BLhbPWRq_ r+gȘ怌u(Q~ 2$'f"on-:gs5u,&?x9@qDmp^3(-9%+2 (ؾ/ nO6~ '0[χ,T##XIExlS,v\L;,mx"}`JįZ=[47Ů&n#E7nn-FNU7i=0z{11|;z ޺viu̳dpYx='Jx@-erhjPn|:rg@mkS9Wv4O7|u-~SqQ<['dOW&퐛"xqڽ 9/C`XJ@CpuU> stream xڍtT6 JCt730 K()0 Ht#4HJ|cZ߷fg{k}_{ag7SpDCU4_P Pҹ@F04 b7<`HPPkS8$`a,&%"QR2 HĮtE]2\XRRW8 E @vb+:@!E# &% qGeyoO€.?0ry"0(plqPCs"~x?3 +tu |ag zh4/A8BHl< C챀_7 K= (3 *G%+2 uWd ?'' GO7c5msQAAAqIa@}\~7ur ݐn4= ^P' 8Ѐ=;; u},f]/G$o hf/"D%Ǿ3Ϳ7_V}# Hm<p2[ :`~gmBp/7/ㆸUDceĊPSo)@a@CP@8F*C;ޡM!HϏ sxx`g%UHǟ (=$ uZm@DcC,@ {b5ju>8uM"#WF4Vͷww}97)鵧asC]-7U'몮E'48}rop4>@?]M;#J{I:mj>o1S=Q+bZg| Vs3GhY |ww|Ȇ__2k>n$[ =<)1hce; W\KѤ/,8S'S4 5rؽ8DMkW{RS GJ[UymBqLIg \$.!?g?E=?^l4}%. b;=% d ՠ;T )xJ^oa}XZ~~ܛ:2\Ló|:a(trfqHWB1;Eډ l"jce]VaO$LJ,mUv*GI:-+P}Ez(v=b${!/26¡J} %),af!΢'eg壔{*9,|R79o_ (jOU*ih18*@CMZGFGn% u9{&?5a ( E=#& z+, Li]Us2131W5t.:;}ujb۞l|˧%|eD#w8d$bu(-OWiJ84*utiP/-E՜vU}eF}7gTWt4Ot^ <M:n^w =K4l?EF[d;E*'8dLLC iI-_ͼe0+NgC9پ/H.S"F7뙘=,v'KK}srmyZܴX8@r->oA`.i-QJ6=oRp_TȇyMEs-zD S|Mf QG{[.*/_9\NZ*T5p<őW(ir`T%)Fys.R;.F{3qQEjI }rq‡Uld&_c:UJ_:m.8Ω]$L;v})&nCEm (F)K!o(.]v>B 09Nqd6#%[ӝ+ ZHb[ѡg7.#]Y )ήywAg1s2qTw 2N]t Pk8s-W & "cNY[4eˠWM*2p?:m9}}]jB~&;!>W_Zܤn]Nby}v&]L҇]NkmCcoJ <Ѝz=$m8 zE@<WzKEIˏMgswce>yNAhz))SDI.k6v*>lX%$7,<$q9KH6P'RC5N3lMg"9Dɋ~+lB37$/Y^5mJn=#oPAӕle4̈z7aF8tӱ Ϗ2d7z[%^% bX1p hj_H9?aΰ+?*Fܰm!$ywV&A=÷rLʢH:fbm4sZlۓ(!'{ 8H-jVܗFS&\KP[jâFu;Y7dB/yJ$6@XP?!OC>5 uPXX3Eg;)kwe,+%kz nĪ[ x&~ho[m^H@i |J1 eWp|pCJyӏ=ַB G.=Q.s Cԅ/D7W+f`}h:.R^4$qfntD85KY~tE*Ut hEvr`T׷qQjw2ˁ%g?%̾_b/Ns)^v,,]t6lfj|xvX]SkV`C2<~Ev%aWCfۓqkѕ}{O4krH+Co&aȦ8\BESe" i6?nޕO*$JTQ*;F}#Mqtpj^ݞ@ߟ_b,ԀgW,W to'?߾Y!wY{gYv|zTw 2#r>c=yziԘ=:{&^/mQl|T̗6tu +Gƛ^M8L$~6|Ctj ߥ-3[ktL<8b-O?u?P{=܋3ÕpEg{L+D{`TMijjj׎'/⇉/zv@"UK1?exV0Β.l:'v6ԴE ;.iܷ oty`>5|:N"AB]{HYHVWD~ߜ{!K{VfʴRbJi|x)"g&dXP=77}l/ͦy]xnt 1q@\vc~:q֕Rq֯Qd:O<_x a=)(coK3W)7:}aihe9e(N4iTNȰ}šu╘u wRtsļ* ou{L٥H߫Ut~Í֓`UG5Q^Ujy"֫].d%''L%~EhGPk:eL]tcd/r.@7M5GכRBv|4T\#v=k2 3HaܜbEk>& ۝w2 m~]G(˽:y'|r5g@U.G!'(֪BנYcO}sԦ6ͪ%5C yQw"Nu5.]1cDxX֪P (~/?"6'Nk>nlz;޼0"jF56ݧ9!8+ ,#:BMxsjT+]#/%hRU[Sn O}\Rpȏ<П+Vy#Avf\q]L}Xj킺ikH:DE++eb# 2,0M{ʐ"@* 3EAx!P]'okƓ43P32Q;lL҆|B*k,jb%ګj2qYADqհ)9C M݆iECQɨ7 ,Ѷ7kF_glL *%kTI6,Vs(3iG [v1 'YylP->e2gxu)͛=*B4LK]|=6 ъbGd9*OVwD#H>:<](T߫vL;+0.zK Z Xkr 9g]u<40S:'ЪYG+#xY"( 6KjIM JŋY4Pv ՘6MkrHcDQ8d_EE'KTuhI$VDavРiC b;~%IbN endstream endobj 828 0 obj << /Length1 1476 /Length2 6466 /Length3 0 /Length 7466 /Filter /FlateDecode >> stream xڍx4[׾ ^!z׈. c 1#fKD'ZщGޢQ(!7)Z߷f{g5Lzym6`58 +' P~h&(ee5 츬`W+DTHP ZNDS]W:~if؏?Z'9HЧ'zlid2s&%Uݎ28 ORiwџ1"ǒZj]?Ğ)PZM\Zz\(ORu8]LC YhlJ%)lŗ/Zutj3]Gt x(VڢT Cs1)X57S33-laq2,Sd_)A\LdRd4dz:LnCxꅔ2&NߵvEYГOśe$4h'1RCVk;9 r1Zե$ƙ㌅r If tI)N9})X(~)("(8~xKE/zOmxC~!+͜vsE:"m%ɠCFdr]~:;1U4F%wL[o3K{;ƞyfP]9ZV'ڬGedj=iq?/hq&-b]srYDI@J>&)Z;M?8@)p.XhƇ`W\۵`yMRsrxMD\MtQ&q'#;/ExG-K'*MXf"+E$yfqyzZBBMxJS|p)='wQ O/Lt 2T ӛO.ْӠj7H +Բm㎀([ 8pB!vcTYڻ5~gPy:r$V囖!ELx1o\nQ}3 a2Nq5\D6g2w7}?'b(FJ'f9-v$2bq5̓wC5ݛje>?b.^A9a@9e3K_pJ'b(͉♍tKQ\ &c>VcྷL82!z h᠑Fh& ˈYek>{gܘEnCnn$Re=yXjOjvW\fB g)e~DI :V)Qj$4^!MSawB/ _}"Qqp"瓞23wo>!dǮ|쵼Ve_1U` bHш?a޼y%+KLaXʳW}L>P E#xK,K[̧#K hJF-4?~m͊3SO }x*EPC\+7+QGbJ$ytuqcag%dX#~>} 9SO2 K@QziR`VχU|O ! ˓mi|#d.4)́X,F7ҽ˺pdC>ٝxڳ&WN펾 9I'|/X^.4*$G}qCPLoueyf`_Rvuسm͆&m l˻?u6B~@<Vi~EӓE(1dhn ~w<:S~f'ٜi߰ds.̼RzGZ r2oYk\?U 5ƺe??-A>,'_6%$1 9s13{6'W٩f{`cazJhX]z9-f39>nDZS3\dIq 9 =ɪuo1vg_S"03k?|bV/#mY'H6&wcxJzq9T^.4/W#q"kޭR5*n$7u!գs- <yazQ\/Bv4*8qg,s?j˺!Q[}r7^ς댝7R?)WN8N8{ۜqKv'HsBoZ"8=sɘ>ױipJ}S2Of;ʥr,?0x3Gr7Mv~ϫs?R0~$׫o%KЊ0o&:hn5qɻsgP(%=>-%  ؈DtQ/>Ӑ8 ɑ ίtyh9yNeeюKey80oR U'Q qϬޡST4͙u #5z_aN݋HOrO}pKWY4W)Q8 /dN2vT[\kȲ3nD6`47y@D*M S.EzvyaE;/cx5ӆ$Z+v>[@- 2/>4 u1}lqᛉz뻨q݄Q I_ٛ .Q]_nmD"XOI\.g9Tkw}j)(~qҚHT@TG =2ն'oW.OaG3DǏгzgaozmE K?U_><I0Y.|`/T=X&G[<Ѳv,l* [~^e?PV[8j+^ݧL[ko`e6AMȃE}}#cy#lMwYd["NOs5juj-15w"q )'lݑJM X*8zu屟,`셀GŁ$k:BNvycq;G;'&>YSqJ,KPK%qg#Nm&};T1NT)Yު|a~$AqjdQ(;a:Qmtk6RK2k=Fߊ KZ e?-L:l.gN+}7$W/M$B?uSִY8x FÔ.ëo5BZ՘Ō䶰O?hO P3NM}E|^?\-e]{ %93^*.')h(^<Q1Si' 0'FYJ~Xt%.y oU\]G4ʒzƜDJ,mO+Ȣױw;dL!&˰<0dZ }!EyQћYE -"bP8B?- $i-$xNmOQs j-4OñRO0z]N>3WS8IfOR~3;%DZJ?N$I{pMaEp&Z {\4+x%{ >i׀:v&n19l`XFvܹܲSf#$3q>ǍI*˪~DW!U;A#x3n+$|MD('!I9TyO029ױ4ۗvK nNVCz)y \T܉|G=x=G}O2j$sGƩМy'򚘓b>bo:-E Z*r+m=*ͤ,5>liv}.̲?@|Niݠ;߿>&)rILi\)TNռVz|, Z'y iw>҇5.gf#gPM ~Iԋ~zθPih<G3?7q|R}trOp3Ж9 Vn#ѺeM]lL{KB.AfOV rdظ|1$0ti-LoiL`Ӵs[Ža >񲷽L:#7.*6{oV/p~}_z(d#^ebk>P 6smcZ&sZۗA_r&EKgݭ+8y}t㚪tg. j͍&Qמ;Q jEg_ GX|:7$Y)s Pr]u5= yuC;lY=ZeM8YBҕm_ח`s=@z0*g~5%\]+וMjϿbhwSE/xcVoy?iy@;ːeشU#~(%58UGOIne1imվPhI0a$; Iɣ2[>wej(_ɹqЩh0k.ϰS HPLR6 *6vaU"XxG@ mcU~<;"n܎9ys{Uw)^7r޳.qֻ9ux2S^ 9#0ı5s Q6[0Տ:$?w"Ls4p)9,K,mF KJ1ƅK s;<.u77vhDp+jɺq5*S=CÌ9C .I]cJr#N endstream endobj 830 0 obj << /Length1 1934 /Length2 12884 /Length3 0 /Length 14073 /Filter /FlateDecode >> stream xڍP N Cи\kpww n݂Csg~_^uUwk$UVe5@vΌL,|q55V ; % vJu%Ȏ_@#w{ b`errXXxrHZ ;8hLh Dm&Fv#g {G#*?%h,ܘl@B 7Kg 4!hd K%@?U#n49ؙ2%{pL+Bv&l<,f6@<3@#'{{ԍRF dhidiF?ʼ8h? KG{0uv 7;"3K;S?d3tpHnBftp <:Y0ke},̀?^NF@ ߎESKg1f;ZtXǏzf '+fWWRKN11;dpr|O_UO  ׿毥oE44 . '3Qu/#)?4 Zx>.z:+M-]lW}CDm>HK')KwşkxnciT9YYYX}L|ߨ(ig2c8FF, b}QS `f9@\)'YY `qs?zSUA>xq17qL@6_l/ ` 0d0 wrs_]տwv6m;3_?Tؿ/_X: 3s'ᝉſk8 G ss|'/NO?cg"2?4AX^Y׈1M Ri2z-;v<&Vgl:ފ&J܈x6~Ol2׆438Up"Z?@OȨ&o %Kƒy/^?P:iKcH]9\y<2gF"8: wԹY78z(B/-y 56n| |m<"*/o^%EY,L`$c]g|:2,6˼>m}H{tu'(xfnnRyJ-Eáwa 1^P7Z'7r'guS::f;;kb/>X 0<V^}VS咿\P` RQ0 Қ)Gnj19tyیu{huFW>29\rk=y6z$Npc4XĝicW@3$pg,ݓȮV̴IO(>=6 Cig4'k+`b^Ю,8, H!(ʉA8E ڬ9LQ2GydZW\%U^Dr@KjLEMَ8a_²^ q%QȺ! * #t*ƽdm>>q]}3F7 VL/Q9+cIbFfgm[qƅNא0+bͼX$D2;-UD6Fj m3lnר4p#և.^l?e6$w̧J} )Q]SxRRF g^8JoYSo5y#RNҞ9f+&^ y.b1unEM[Z^&[o+ ש-ۯtD~`|hd9ѥޟgKO"pa1% L{s+38'~4<yKF ScvymZ.5Yr*GzL.+~_~7̤̫" X ҧH:Vs\梜.nU#V#گL[#$sI Yut,`ƺ"E=ߏgfxED6[-];H;,z*13?}$Q"*Cq+UWSH]ԳMMvIU͗fǝaC$.ʆAnCgȮ@f"NNE%LPJZl^xH`mX$Fz2Ul@ 1~\-7$iG 5H: w\,mYk\}Fߐ&r6QUngZ(=CrKYO+\]MEK7{Kb^G3oW "N &m|YDaeNo-O,Yn;HNj?*%!F4H|-s  J`#z ,azbd>~lC1X]O]\PۇmBkߖ5SQ|@iHuJD'7$~j9!ǛquGy݀8l/&gsxZ?uV '÷LCmxEE;~+hX D9SfH&Xo;QGXc|@~r`4νD?L;) Б|Ѽ1200J/ZŒC<J=$^v2[*^ ܕ݈:2 ܑU".˗dp6O/'UU"zbzVUM|Fer!p[| #cq֯Z H{3 p7jsw# Vק%$B h3:aSD di7OÏԝA_R& x câ 77i)11GNS@v>Bo5^m=x%˲椫]8xW A_PwŨ{g,Vwk^2 IK>3i?q 䭭`y͟m˩ ~( Q~%r%_k:|jr;[F jע::vP1X [TC!J3\NV9R5H0~%+i%Y|1#0="N>H\ s9Աl0^/ EROdw|eg܃NzGg>b\7qĠ(P>\^)}4IYp.F53Ҍ-0CjHJQreQA8?523H2(a]f1UJg ^ qH?ҥ-86YR,ah ,\>OV{;\/@zAd˧CP+QdX ͮ SBWu4-ND Q 6?e=\Vפä2 d bSϋt7t(eΦNy8&MmiO_&|z[c9rB ]=c'Oa)# цT!Tm7j?O;*̫'GЖݧ|ݳ[&{~9pcJ.+ϊ#0,I6n\<̤yz6۱QKyrVܔޥމ)HX,G5c櫝.?}_r#~Ps$M'ty]bvpI-׶#<`UvJ0}6[GՔ+14C4혷VEq:Qwڻ۱%_蕬kM~oCjw#}?9|ܞ-G`D ,afn䕴Mxͱð z`7͗l{^@ yJ.3:>Q|0o@ɾOY?7m,h abEE ;AޢqRZKGSdhaQft+ ]cgnIVr eiyWpHԄ5 ?{va$JAVs+ے%RB-݁3؛cS77OvBy9%'f4jC>ؗ<27 Io >E´&kqo!vDۀ0!Anp]\䚃T'Xʈگ@ aF@9d/C[~([ҭQ,B dĬGEg &$U'19+eac. J w)E'wGOaKÒq`]wruj# lb^ \/ {y_oX~98OWCEzҙ{ e,bOP@GazřOjJ!*U&205`dB&N_R&ag3j Pv`"l``ͩ c$,ɮawLWhyd"!-"ezDBY2%{(L`r爍y Y_dכ_hLȑkw^9H]<" L ӯZ%b[sG.p-e=fjY1yY. zzֲ3p*8vmx:wfџ,8)u4hl!W wǜP. d/rX|`zRֱ K߼Q Ʌ0{AIw>_q{p[dībX[CDS6V;*H!~K%j4FxQ#!vEFc"K:pP46sMo-x b[6.`|֏MP@%vRc)H:sH8~Zk=qP^~6! pF9̤[&*)Wf|V,5S5#}sK>7m-U9]yz[fqqMdLaof04\>n)HeEP]XX:_?ˡ~}?]Ou>—+0Ќ5C13.,A~R ӋEoJQeƝ,Gj}[2!iIX=Rק2lr ,*\(>s{ (*d S N,^J&9굯jc2kf63wٸ Z]n}k#uY%\r$o* ܞKpdt}峚?$jyM j|/CUz9C3U=upNp@zW8b]8{u/ݺ 4 n-jE3$aZBm$I,G. ʭ' 1Qd}-Slѵ3PWlVJ'i}e*%Vo5ue8āBɷ{PqNAX6"w-Q_ҍ^{m{g Tߤ FM@k#* YӅe +_va lN=W>Qȑ9Z4W!fx.s랟fУ4^ZSX6aPo?Iҵ*սclu~P$NomJP͵#06o"^ ~5'k7>&uN Pi|]ȷv sAs%e@M+Ryb5X&qe#4!rRmbRغbƯm(7ySn-sLJu{cH DzSEt)wClDo=B#I39wm#/o(aFu#u ?8e?Sȫϕ(K߀x2v|ݶ-82.]"uN*1ZEGiد{)ĚPگRJי*oj?n֩e~GW pÝ^Ӵ 0ᢺ ms#Hb,c6J8kY^iqnI]_\[P<-zg6\84,~.$3[WKS _5?tBjvx}OܧUmYhQc8r-N[":Hv '䓃*Jr*PC̾ v4`,Ȯd;GݖJb*~bJ-LSezX‹щU^룋%+,]h/'c+&"wfeH) jvpuKqH82) z1PJ6amL|']|L=0\"Jt}O\wcDsy5ސP KN4EtT}u}\񯬆@q3fO- W-NiX*Y w B|&ՎD}RgHӞvpr맙Uˌfy +N{3SFvlIQXy#'zX%#"Wh[gf:Uӱ:?d(5>کP1' Ζ~r߂ !q1ߠd6f@ 9m7 5UTs6pؚORp)yOZe GS$@ĢSdZ˞%cBȔ-<#pmmǘ _ĐE<0ѕ7BdKp+c?Zl4~ZX /~{:c]0ld<ڠmsJ#onX:FC:8=r_ ͢м?}&(gƏziO<ΔuW\ 2XlGyxWW[elqˬfB uQ+y\K~}z0bpS^ <{r-{eiCË2ԪCTp^1_ k*_yET*H&Ik\P ʀ<<"F›ʑX=)t o%3<~1| l')eueVubl+̲ض.摷&(.(#FF9MҁdXXjSs/$!mKX1xi8բ5K:W FAc[_*"TOێ-<4,e-5ZXc5O1#+*klUNleV;G-F( .N8$wt:`?ҹ$Ī(3{rP U'M4 S#5ER)IEOyPW4ɁI-(+93^jHblxLG h׼2uD޼_ /X^`LbN!nĐw^A70Iޤ&l!46U\s3f~=RJ$^~:svW7r+:!#tlw}'xr"M4!_ ȯwi}߁O`^S˚+*BxSE;ȎpdHb/9"9Œ$8BvJ/ &dȪġh,4q 򇚴Y: Bq3'<^+to6f14 :/%ZEp?^ L9ea,8\Zx__*;rJH[(*kZl2 25}[_ʃf1-I|%r"/=dgN?T[|F&il ̺lx?-< o](q[蠛C4ίOzhQ)\[*4;gX`{D6lǻAK^mkg$푅9PSFp_=G9tP Uٶ^(cF @XjO 3ZM朖B?jmƇxۊhw|MPbO%Ϡ|͂p}1*Żozbk"9Nv;ZØ`sސ2Őn-_xN)@2̸:= -z_!P9:ٸ\mȱ*M+%oz6Zߧ  $GXZ'5a4_cØ ݲ0hIq)>,9&aFlB%W,*p{U(Kf"#`^i=M_^>+Ȭ0),2 ٦kS(sA+\\rs|sP8bG9@&v|5D_bO 0ٕdIy$>_.i•1~_8Z&0J&R44+Dlяs-U E84>%ގf½|M;I$vM+4A=sEjʘ&I.^qP+DzpTP&";^s⽸?]՚"%@Ri`tݑG)oiU"_8w w`oA~kص+V?ވ# ?A ?!Wzբw}bΦR-32,pɱ/11B+~6GJGzY}g/JD6|au=|aHO#榬f&쌩9t y?eFlfF?HEkD;sL  *g0Άu@ouiۿj8EԽKތSPmv}׵OS 2w\:ꗠu`ԫOgY)8ՠKd73q盜D?m M C^1ЄHCBn6;N{ X klx:UonPݦoθ@H1I?Cd7,qfOnx}f.'m;*"+,܈cW8@~ZyF_027$ͬy(z??+ZqT^!Qd79zU͎*7HF8c`P,B^y|wu~&*5jZ32RcmDta1;7aJk Vs!9P@Rw)J!7j-lq| f]a Z;eB ml󬐁s̥&&BNh;Q^z>$jgx=y;Y~*j{XzQ@ :Kg`;Ź_0VWiWy #%J`ᅾA}o;/TT]0?&ًbxxFpkvSxţh G38eYs[ށ .#W'q>!3[zsЍPRf/ɱ%Y7lkv-n|"UiGotbFsm  tEFFQZ" #UB"|wFMu>ʍABAD4P M*[N:%D|0ŗ/ۨ4SC{~Z.1ד*-UVU=W$--9ySҌ=Z7Ѿ*O+#~u0O,U P' 6eNi`}{e3gg崛%}2́Xɴ ڞAJL[8Ax'~?l :XxF\$Uw6|fd + #eRWx7`\3ݱŇP ?" I0ea5"ZGixw/5aiL&\.Y;˙JeǩÚlAպ:& 0.=~Ċ_!{Zvy!qFȮ*}\V, h*.[;J> д.ig5W6K>S lq$4 endstream endobj 832 0 obj << /Length1 1474 /Length2 2074 /Length3 0 /Length 3005 /Filter /FlateDecode >> stream xڍT 8T{oM#m"KHhƖdT39ÙCUHPYE CT\)|-M W "wFZy9s{4<Ҙ\ȖגDSˋDD H$㴴`>imPELCX| :sQHdhJ22%2hEMk0fx@<7( X/.C L4 A~ :2@6e?f|~)  zBC & hx¼O./Ql!<,E0!t5B>$σRimÁ>'=5B ݅pH#LSDF``=\oPD1@$HxASAԍqqF,ÅH}G G"L}!g? [HQ SþFLdoco?MkҒ %kɔu04| FVaqB#dZKtߗH%2^|i)Od+`⺟90;lY6Ù3W:;CLX9 ! lPS2:F 7.~o$"r]7 k*acGeJWL5@pDL_d*'a;ʄB ;8H= Lo$; XߙT3IX.դ`AD#2(m0_OB .c}kѷԄk{׌c}8%; Ͼ%nQ"|OjӢ[sX{l0ȣ }Nwl b{BE2Gg̴չ1?Ɣhg, hvXx8|\v`"Lyv`&ܙ|KN~ @V]ɣ$ty=N5vsuUtZ<|ǾUrwFǐQz -e~B7d2ۼ&!2 57,2}xػAW""E)Pw {2Ʒc1H7!Yϒ_㛿"EUr˧F|Mj'Lt|4Ttnj,v[.ؼ|- }+mQglԮ>KO\ԏBQ^Y٪|e+ddׇ$JO诵YuL1o"50QTݕ_ȑdĺi,t깂2og8?ؘՎ=j[*<()9ɮ-g1LjHɦn{|G+2 dLB?ꊘ#3ZY&Lِ+ע)3E#ٙ?7*~ԗLMʋ:%zlZDE/FO_0 aׯo-|lZױ>ax;e-gas i;nWc$m}I]]Ը9Eki iy۱[&_=gFܘ6o;tJe;?5$(Sx%+#ߏv.bE%p2<˲-drjĺ1e|n3]֒jE1Wpߚ)6F|\Jws@wjmvk6ZO٪,>(db/ ]h?51UvI]iV{z4R2k*,Z[ W`6ݭP'^|{ӁOV6QSk-jόOm ?Hp=u}SEDdёdZ*Z21в[q۶ELd_@3s=νԲ6DFʡ8+w||hXs!0bjI=PqЧs]yȃNlZJz kv^^7\/\-vi}R*yd76h("\g]*G"u2 ~+mW &:R/߫Gܠ" Q{W2+b*b}z傟?cz*L96FlH3[NW+zpWGdMt%MAǍջpޅ*FZ47`z̈sk~O5^o7~̡[-ʸqI95⏳wcCsRYh{|QHd^Ӫ%Z WϏo.?;R+sq"SM(wjwUA7 9K.I> stream xڌP  6ݝ5Kp'wK@`>g'{*OZ/  ( vpe`eH)ij ٹX9Qhh4AvQh. R@SWLbvupp8x95; MA%V[F vzs@g@hhnj^^QÃޅl% Zԁ.@gw/eS{?XQh `KWSg "\ ',Hp"@?̀æ`{GS/d*z2L,24sCΛL gn PB3ՅdE@,`!:4h)?u{8X,,"aȦrrK"B-x8@'ܚ/^! |K b:|T/BX]f@+o1 i3`=_?g/ oFMMB]$%^ '+_'/۟% H?CAaoe0d߃}moBnvvMAv^1 +d)p:Y hrZyWSrH8X[F,h r5{\w;Ppdm! Ue߈2``l.Nd=-5 9XQj(/M/?&ؤ~#~o$`d#xF6߈ &A+F芿$oA!U#Ht]7Dl$oE7Ar @,ME\KS{Gȶu W J6SȈ\lo?f䄙RN3gSs1޿N8]^_9af/dd <&) HN! rdL)o/ KnR 1iܐ"Z{9Z@@H6@Hmz& )_[8 CqA"9ٛuZ5a;O9#fsA *aÔoBh7o7":]ftP? 1ҿ@A;s< ĉ 7C'B 6Wkg)n$sՆt7IHA. ȷ#d0c=!!) ,q[e-\vV/}Fl,oJfv!/P.07;4`K.3pZ+6Տ3HYX9} ˵,dzjm]c7d)e0hs 0ZM!2daߠ$#ZVuj L߮SSivWPޒqh f( enG]?6 N(,5R7#XLFBs,V>]PRI_;{5Չ]L9Gyp&S* WkԼ{g38gj}Rg]aɂ7װD NGħLWۤg8嵯;nMA%)$kA]óVg=`h |3ԥH9|yC:ReI")r4ÄG0A@֞+>wl$8&s2u'/`?7y[2LႬWRc3A}~n9wV,؂?6>~'ֽY7x=Ϟ@5&om8SlG \i}刷CK(Iɑ2 xj[PȲ9dz8?)R o V28iVPG?e nUnY]jS/˱'>j7ɼ(fIg@I!q\T;}|¯~z0+h.ΨжFAU~uRq`YH]#VwgXA_>y+[`Ul((ψ&j3)MjZR껳)R#/3#{3Ş֋3oQ֌+]nY̢肢-|xp~ |~2Z}΁2A]aTJ85r0t߯%NG䮆nЃqʹA •u%|۟+P=ACX͞y_INr t9c <⨿x"ni؉]_`-;+.}P*-,r.]O;s*ږriY3D}W ED_d~z= WEuwSC(crw'յTޗ0H7ZFqؓZ$ؽ󀼇f]k:nU՞\>qm7z4>hˬ֐hOLpXC!ihT3b-rHa@V};'Ty-l4eK'$_\W::~"Br*|(Pݺ]GrbTG ֵU0_3pvquγ0$U& 4<7{cgT4LQ1B&q_?i.mľo-KĞ)`ĺ gٙI9˜;1Jx/"P4ZK$L^TW%El睙@OfP5LY9nL]2iʟavԴ8ݬz~A8fZ>c|"aNd%lC7PJ?]TY1WZ?%&YKImn31 l»Ƴ?ou~װsjO! qe7d'K a˛UyAO3k(*A'E3/_V- ҫ$`Mj˺&̄F50/b ^s3Q{A|ȸ5ќ|\c@.` c.BCNNwOw= &%0 Ri-'Wk C8IXY̵cUf[{UqQNW]ӸBHЖ0Dh5%$!!͖"3!s2&D\-(}oǛ~KMYmcUQ1fԵK(7c<|\m7ܗɑt[ V'izSd#k!f}Mw 6{wFx܏P:ӭX]jYY׷@bkۢITVDUy2nIlrpՉ׺KCt!!52X7oHAR1wh+D!}/QFaQ⛝zm_^x^л]tV1V__x&3LʜJxYRr X6ڱ"oMʛ[_t֌,/џl{f& wL-eR4=׏eOFВbt1eӸL,RZg3 1ޮl:ioʲlѬ!k*Iz4=Gmi,C~Exr8т^>s"1+5qy].,^[o6?}KH jfQPk@)5(eNdSf*FdqH jq*c_B/.C5m;Vy1ķq^\F|M] 0aw8ܓ?n`UUN`e*c˔9c 6i^`$]Od+/L*Fg]0h`뮐+G7CF%jz9]-إ{BRpB>S=9 z">Ɏ"Ƭ*g 1CnvԬO_^GTJ"ҏbIaM+Mf#1Q"uʞD{C?NӠEaN&/a=-'r?÷Vb㙍J}*H1Qa>bNq:ҼhF!a yl稯5pp;F}KFL&o[^ ]_HMVM_ ?DUԝmnЩ*thIZS3\,+._f zQks=ɵ^6s\ @VB{CU?)KFZD[qmy0#-$MwПZ؎9e8'i-GykM7qi`ZP@ʆJ}~dw l韱jڐ27 K& QI WK44fVn:RMO.$|Ui!>q;@ B;+Ϸ]gg5W=gak탥›?%.% VuAQ}sp\$F&E$:)H|F%;MM^]2u䳚4t )ݒC /J=$I? :]yӭkS>w%"!~3F~*{խRu %_rmnMA}fWD" 3X 7GӲDa.dJ݁gz/ޝr>3$ kiFUUѮAqXע=sfPnWgo9G5TDu$1S}RYu*8Hn8Kw?cqE*/=pkBi\Z6N`]ۘ8<j-c997fc!x )TuW<Ϥ`~vS1Ƭg3N{m^8]HȘ /]E@*bCg~|K I[XQn!x*I߬MazLyV7kizzpĥ ZA]4J2,no|XMu2Ƥ2z4ΜȦt O~¯뺳M {? ܥogX (ځp+Z GhGs;9_ͩi 7):n3C%Ǩͱ&lT+|in%`FSX9"/iZ( AsYn{D&CL,6Z92p=jp;q{/ OWxbshb蛿=5<ZJARn3 %{ɱS~ᘻ뼰9&q>2b*7'#23vTp t*ߙ4sJ^ą|J1J;"]"Fn尙ѕ >æ>QrVtMwCZtE5TFG.k/DUi~|GWuBpfTVqUMbVIqà%uf«*z0-LFW@2Y$fjO{$I=62_0W:t^ގ7BG9\hp=J!hN=pɗ\i| %VZkBhoɉ[pV:jkAN!#d* *c8i?ո0PT 9C%- C2{)N2vFCg@΁XKu, 쌷meo$[Ƃ@?G=eI\'(lDczD9 FYx Z5O۽()y$PzV>'͞*t 536zXpiHG;|0 /KT.-hFU jĈ[Oi\>HJMcߜ׏,}'T 5+L^v)ok&JlGC Fת?SIN5g#3zP<T˅|-&!Hҫx>+#rLl60X ~g"/1ߘBn#p#E# ǦH<o+]0OFI994Dיfu}""_4!-oɃ<u (cyC)f"L'7"rfQ6,/qCƬA8HIy%Ƙy˳hU{\ZSmn pƮ1?DPVІRȴճG1ᆗP5L^q߻zx ntn4D﫰g=9w.䎣VHJذ 1MΘv ΏI8r#$е0f7c980 '\un_2Yž)Y:9=uah%㿚D!NT+3)&ه lښ;&?L~z`f.I]Ir: j yqu qaP\hY< a'deUP㒛Hi-CbEș"[6-<;=l'آ.^91͏LkIfl(]04FV_!\n9pbFԽSBPa[R$#3jDX!Acܧ^0%W,]qbDnN[">s3ov-MW47.9zb˶hѾ#؋:~m {pe:YTeMilv{jC {p~RS QYˆ ~K*Y( 笱yd`ׁSB ۆY2c%PgWb{Ռ2ϒn#w:~%L5#BQ ەf蟎^cG]࠷ׇِ`L$3aҿuLTf OXaM/@[7`]F͝vQ} nأF%sDf}o:2/_iMemKuc~iڰQJޯ*YQĻR;E'dW_5:DFlkW`Jh:!5ot,Um7BT,Q?a7\Qyk:5(׵#OQBepM x"ap3ˊEf b>xrQ׉.),SxH *"X6U8 ӛjVKׄ w ʇ[**Z]wBE% Ηl{D^f1\AjtSӆ//M 7B# ^G}Om%㏙L[C#Mu}aok\Zyz^"*FNN$tOT=otKf눡$(ײַb|rIZ#u Gv5~CnQOĆ:]y4~y)VØa{C{֪oz;WJFa䲀8W?MXf9)'dʭPU7~(Qc8mRm놩ϟPa;TWDj3>kj)|ؓ^,N-GqP1ф;s쇦g켺5Gbg9xԱ!IUz"IФ+o9 ?~/3{>ɍYx~~v$u+ɛ,W(8)M!(dQĞ*'W8n 56FZEv};G)}ԸlQ*)/L;)ZdoV:#]plWU1dsYzK fo gn,KbGt!w+I7$8m铞a6x'I[CQX4 lHsYVn(,wcK*| B ;g|C6 ͍ҞVB1?hp% ;\(L:a)Jٽt؛C=q|mH^2g_u"H; |j0v_*;I c}pҼHR(ULh,`'lՋeҀk0t"&)mfH8#b1lOl+9vLKSu;:CaƉ[0i^ $>z[ښlmD}Wݮa{'W-[I:P 1D&SN :A̺ъD:sXgݭw?|_ KiU$K3s J7[H}*e/K#>Gj%;|Zg h kքw'YaƞZGMcj'A9A6E=D=چJU/nEiiO!{V۵΀F٧N=]Ay| l*i\g(C l5$zT$3QTYf[ ߉ĎB&a/ÿ1z4ZOnqo%P5ѥ47մŢgK>*;b2f() r4q.:0'^w̹;[900aojtg^c 7|:xRUhN(z}6 ,jM*qKhmn~u4H-?]R[Nԥ>3rE1/zhLgB%xB]sz2 ϳjk Rʬ˸b=!:2ā#jA]؃yۢƼ0T467 'uO|Rml|D,GϷ415YYįtھ`,ͱ}@ 6J<鰊ҥԧV%R2Oo! .ab;>sAI2 9E݆,ܕaAU1`YY%RXJ3/ݬd>oKgHC1MW{9F1Db'lrNcSLUŜbE\W:wYVT0,8ѶǾoA|{e,-8e˥O:جؗ)܊U&]o.E Ml0jklIʥ p9hD Rj#pru!HvGh md a$1yqct]y~?~B(#0}Hu凚[\!𮺹q weNx;m͖<%`'1`Y;1Gn_YJc3L+R[zLVU; QGi2T+!Yfm:^*Z+ >REȨVY&5R6*h|rHXtc?+Q"?d }nNo{kKlBeG–Ioἃ/VUfFLV ¯ MQ`eۧzWn Ϲ:Tk/B]#aY)m@  T"Cpܔpͽ6V{xf}Jt")ÕHQ 4^S*,p~}KHQ5<xfB`1?ax M)Ye䋭i^ ]Ƿs&ɚ#S]#M=A80SgЉ#O_l{6݆s[~v.wq\hl>wIVz( =m\%j:[W G"`S'C-Jz!}3CBFy.cxl3h.>m1{a;Ŏ*(?m{Bns +3 ΂o@@3/* nxZтPoD,ߞ9NIt5 7P @YXQSw>_rh T9*U~$# W1mw!_w7\*JbДe?օ"?]@5"w榛vjBכʾRY\\_\IWxi!*dhK8֩i ޽xծH|T]W9Ubr{`N͞|Ϻ/ϡnG9`Cm(9mm!:?馝We#֚YkB]3 eUU XK1¨Y!-vާݙEg7KUf" d5="p?>h!pRyCV9N03 *sW8^ϲg6C]@9qtfHAIo=5VSQуc<_71"N/37ghn>)]O"d!Qq_uLFCyu&WIUK_ækjX4[ "*[7Ǣ,@j73{~ʇBk7?N`Ər9P`-/7Z6OiI95˩9C]%UomVho|QR"Fw&܌~&_\z@ܮ1ԅ5iܷ^q@TD +9^}%*ΆeD$YhJ4O)(>/9ecRgI%z2qxū>G[YI[tފӯbD6d?.Ş c1m&= ):6/(WDN]/ҟw3I}̏f(L\}эwCGyr. ϨYi'%1e3Au^C}wSP D'Z1!WuM U߼ާ?iksYi\|` /mC1*V&rq3Kz14!*'j?Aj4 ܂/Vq1ivCtY,=z$%lzr14mqAyUoCnAp71V f :oyšdքlfmJvB׭lnN2f뵍h9r@7ZԴŌc34I|E}#מZE=yj&ޛ$ AtsNYRK9Ie0UEV̝qqTe)~%p"u$;9X(73#Yhp-B vY%Т)֑ r2U>qO?cۺT8ym?HJ0G PS\&68>3㿿]O.BIe[` u43|x6`qtSq .EVᨤ [Y[pg2K=UROgC r|h|mWohh9Ԓ,o_JV|+ ;0U"YHG,^ؕ{oj{@IlFvgBRkd:Xy~ 9 ?pxhn:XG2 "ooioP wScy{Sf=ys@tU@6?ڼY>D"*fj ? FJ̺N>T]5KJqyajnӂƐk[j5#i j͂sJ~TjV; M(W+Rc/#8LZ2v/gAO AAh@)$7RQ1KSEej #V;cFF75`V4iv}Mݳ59˜늜ʪ~y HFl\7,fs3&53)+_A/(*+dy/h\YCdAڲ>IF.[S15ay罤[TOw]yVx-w]]}DkUlw#q!Un+{i4*%2h_ag{ YۍQ7jR誙,zpmYuP\;CU47MQ(/sZTM-L= s &Nʾ"oT4ܥeԠu2(Q+ﬗgo-PcLlI ?o)ѵW9kWSh[Q{k0-gY@CH{G'U%\ҁuƺ0(DP@.y8#a$qЅ~'@-b$P1Bq?٥nL$pe9I|ٷ1!Mk2x ٘u84C|<*K7'/Bf;PRiqh+Kka.a[N8.<$~gn֎rcvqJlLRQ_aɖ$M[ qkc>lf 6CoN;Z(C d^GBx0+^+/Kc*]D[<(e1v`/3_zYXy_+H<"p{.fiDImߕ jqz* *d pN 5>І*Q>yKmf0?qB}gh7!St}(ރq?]6L^n Ghc1i WG G)܊swU&%9cf Kl9Pa(;ZI 1+rG|qΛZ!.u1Ƭ:9O*#9RK;0G=uw7=H\jQ?.@ӅMhFG>촑䃍@2ۚm)aV9 |E)Jo*pr}m~7tT.?,ZBcfs4ʃJ~ _pY6U#V-Vx - T]3l{FrI jv[6%F'Hv)67vCj8ئa9qU3EŪټ ӌXʮ3b׊DG}}3,CV[mhk 3{RS<O~SJi`;_ؕg,zYAEm8(_(sm#"|G|K37a6xVmwi֠k,fh3o.}Y}ݜYbe.)k5w4>"p ,3%05dZ㏷}N2K^JsW-3k=o5em=LH@ Qt*?a:/Fbg/ކ2o8Xe[WIВs;1]jحv2҅Ցc>8+ J!9EBN3,v1(F?W RCfsni؏)*PرXͫ_xl/ĺ~d&J}7OS<vF~>dhQ]-gt ^a$GO*4%*pt5nux*je E =hٔx@`PӖ,2VR$!e͇#ǚ .nR*p Є}͓]#@{]_ȯ=YZޕ%eԺueS[j {{umTݶosPkcW#X?m iʯT]7 co y_b%f3PaAU6%$ȦSE WMƉ3w-bDڟ^qV6/COz,y<7O%Xo.0"}xXD3i{3'n[tsw1`>\0oKu [pa )S;[R0T 7v!kߴ̴||dP' iR|uM͊;MjKi$JSdC*^a2pH-uz M01@WkJ,d sc\u2ַeb\ ݤ\ns աd}cFG 04m0yۉ_q^CE2;<|hBjE^RnmA8P|sPGΏ:O'nt@A A꼿rAÃWe⍃\?N{?56Yx hb)|JcLOL4Hˮa{֎w2WŃ'3>@\E=&duGW,/iHkZMo7JL~q^]YQ -z ~?o 6ⱉ~p mtDu?.(WHbN| -Pֲu^d5,+ ԑL > stream xڭwUT]-ΆK @wwww$Ow}{+UkQ)2LR {FV&> N+Ϩ4|9()ŝ.V { c @hq F]E្L&tP}mAv@{kGU b [J2iEu4dl Pv52[흁s)Ҝ>b:@S7)/dgrX8ۻ|7u5 7 'Ї݇#2UYB8],]l?,@#̇p+ `f`k#0\-0v2:;WwY'Uo`7o` 5gB`eiY7XY!7suO53 @39"#%2ӿ-K{5c>=c-W֚ٚN%0Ch,e4Sr1~o-0N/8ڛ+Y]VUQX* (Ed_ˆ<^\<Fv֏@<+8Yyt?faxy0 FcK/Gy{@)"Ȕ?:%=ե7{p\Br0ȡ^ ϯ [nR0p/Kw0܍cKݕKmOU7?A1rf6v'ZOny~X(>uh `5gT#C]=YƸ>d .FNoOn`#:+Lfi t}ZL; U5#$VJ;B5/ǤB?t?D6@#Lsp2@˲W4qH U"3U3q{⋐IA8O,J;aTB2kHɆ%W jߐ,>կ4W&C)90"q#ZQ&|Å/|UǫVXIZKLcD3oRr6;gIA21:^5N.F\4ocnNUPrJEr \lĤNl 2 d*א14қuTOy XcɃut>m3GZ?~޺ӉmΈ2F.g(K? 2|3fvHK+xQa aZM8HjcRNΫӋ;dCkDtQgM((LWJ@!%|PIv'i~ \T׋eU`-F2 {dTv3.dHyCz%BOzl(#h/,g] % 1&Sw<_tg9?qoK\a/>bf5 pmp$X8c֩T_si洬 so,'J])ӵ+(ep `^=[OkVj:ka'a^ˡP'ʕ;Q$w39֜07/#,UkRqQ9z;FfhIk&R/mWAk犮) לq\GE)b l  -Wʜ# ZA;PK/Ɲu20Ҏt(MtL"\HȚBAN JZ N-ҘOH~9pҩp{SY]mSԥhMWݻLOFAx?/v)3N tjU/:_ a&]pFJ YCaP}`?hd)uҝZ4mX~la5djhD^EyX%"R5% SxMZ48>ȵvպoc"fL4KP]`0-KP_{Je]&za`t,-0i;[P<<6Sxt:$d׌VD#` s5'+yA|Z#O (#!Z-x8r,~Ŋ47v_"ǐ-~CR=HQ>%ABgT8fN[V:RW~=V2 R_WX'qV \V$`h8'YK+lFq?dQdG?rladt7^ZkBjc HFDFJKo#4PgD}(V9wϝQ+߲ڱQGONmvbD=\9mk/5S! 姘:T&#GnhHg}b\gUq57tvRu4WN0e"'9̈6'A7h`q9d{j:Z'b̛jUsLy0HcFJ{g+ |6v |!s؋= QFJ Ilk;j=5>q^K xaGl(Y>3cʵ a4wwVczۮ+zme٧FbKn c*:Ůbּ #9`b YCİWC~lL8)4oW2~Bs5,5"9:)+|el.Ҳ ʲ,tZ~HA)T$95s ho.I?O xEs!T =~p٦Dʊd XGnp0$#P. \89;U|ƛ$lđo< jsy=#_vJ3j *)^dahS% ڱ479}Tʲeιc|BD ,U%?kDS $u*@sb6u^^@V IQsuKL6IJcK558>s=}M:m l|.ҝ=+ǔ%1/p{>ڐIbَ 3OrnTÑd˃,(6vOK=Ӑсu۸+Koj$L,F@% 5'iC_;q}1 ym`fo ]oJG+V%_3XB4Z`k]⥓uDtwqfXx|,"80sN"҂4ş).L}Yy>_|ƈ+>]|V '.I"R}PTnIin~֩PdgI3iؤ e`ř ,iD`RT}xh }l d!7nTWt8D2lՙ8g [P$Kl\Fnua?]ft160vde2tg=0lC N3~CBKRS,pC >-e OBscua 5#=/_ls}ݴ V&LrQUR|1AԶϳC*Vf-x+췄Z0N(v~xQ$ 2eLBNHtp% ?xhC_"VLZrL Gn! AYߺ<6>Y:t$PpY|Nd44>V`>P6wଠyɷ<9k'{wG͟|U|0°=?Ɗj[nNGi/o_SÓ(uucix({L( ;r L_y N(.Sw= GR}L0jɊM8;Ej3Y|X.bwq2{}OrEso`O8r0Nld!)_MvGkSXz#ځ[w]ݬ _dVs\"!ٜkHep\;> U#;Wmjytuv02[)B`t,wI?%z(iࢤm^Q~C.VTDiI E'1,^ D~;ۮR٥XMG!+:I%^cJ=}bg"]({Un>ޮAY'j.QWSc̕(9ԭߘP`! ,*r1eaU7[wȓ35iRG4cΐ8K"@0gݳs1y um0j_AUBqlגyHY+r1/aޚe$HwSkAahQhC]G|^Cjn<#ǃr0O;?=lb[]N DzV*a9~}DLu״5VnݲF!_eYUg#B4r"4ZA7Y[K=שP]5 ^2?"=OG9؇N|4#Q ϟ~Ru/sOzkTJQR BbFn zV"$#TX7uû[p/lo.G]G(YEwp.IuTǚf E=IC" KԊ$ 8w)+Q8͔Ǹ$)rEN4njioּ87u7<.2ȸ bf=pGe 7XA_+cs:D AwtZdAvþ6_mˈ2{9c`E.[L{;%7t:zIf,9g_UF( ZKn7k0H>k%i& ]徻c`%Ϡ!#Jʞ\ñ#{pݱ7[$hO1_h^`xAZW-& yr5\W87\uve?Sԭ e'6:5hQZhpar'sPlOrxUUgo;;d'MNqwHt^wmLCrf hЮ m]htnBr,!' ]pJq2"KR/\Q`*yn?֧iO*5(ͯ3 ^OmAa s=\jPg4Ց:2}C/ 輼Ut˨M7+ -x&܏L(`]_R SYQgv,s{q+qxڡXۇ,~>{y ;U85ˬ (clY5e5)t4}ZgZa?cY+LӪPDΊ,(,@^b%?*v/FʴPRʌ "KLs+#,%59gD|T- 2P66Қ|l)tW~@zDC6,\/rDBSc(BI\C]꧕ڣqDcy ӥtheUcL!9%LV>Ȅ%yEUιݤGWh3Inybu \QÃ3,Y+TĄI `Xߘ7jqb: oO7_]vLJ=WlZvE@`Q疒_5 PY; 18{4nyNbB~O_`i腒Q?Ά!!5mS[A !ַE.*16Nʅoò1MGI+ FJMMvl 4{BLfO14)=/|k$`܈>Ua.&j 7ρ7b =Ӥ|DJ!Cry*=d!ʏͅe{_DfsYn0`o /Զ7;k"[qMxFgpo߻,ucm`H^a"Fxzl9 af/"-exL-iJ,e;B9-G#iBOI|*I֤Ds'p'@5Aą-ʪnMJdl`|Q*'TX݌wXV FHV jw"(8]ԑkXrTx"]p'vE.ghU9*pHɉ!O,<1㠗N+a)-FB`x@FT#-qWooϦsQ cgj_ގLAصH8:gYu#fFv/`'g˨X_ @p--L5N?*1'}PYl4O1?%.NkzU7xx8(=" lv)oOvD% з'?EudO juj Aš0|@X Kp O)\ 4όDe YWIC]uzQ=G0U+ouϾxU~94Ґ"r4p9zbrb{a9Br0m'nN{~1 _ Ms<@X ZyO;!,jF޹9Is^{IVX2N>d9\~Yӝp|=”hǷEX]1Yj4xӶcKCV8bӆ"mS&t؎$MW&A3?hxs ڨAw6"VEJW-+_&1EN~*ZvIezɑ(B)9VB~hNgUYI,TvbA2bPTGnM& @h|jer~31J;ʶX pj_[ u1c<؎uV@u襢`x`̘9@|v.Y&wȣBѮ.mikw+)g5#|U,*uzӵlG9cA$eDk&ei}1VhAfKbIéUW%xt?s l'Lۤ~):@6 ĞY> ,SBϓ~|a[bљȮ63tDpYjVixS]ұ%_~=Q/iI$Lrp<;Fv|iʇ:*њhSQW{-1bI{aJa/>,5ݦkܠЌWNlx~X"KXC7 Ȅ~p/woW"H:ׅtӻ)WY' {Rgzr2 wvd7;dg;6+J ztg%$Үp% WF79y3ttµqSɆg+Vwް/7 ]ӰPaM!)o7*мg+BW}!/Z\w#~U/Hq-SIoIE?f}g8ZOL*X|Yk_rdmA?vv\ysfZzWKo4 AD߁9:L" =UUƻ+XвxLrEzɬB\T"qqe{YJ D4,֙PY&NhqU>iRD7?ʸj&}d]{`~a a9Zq;;45*D(>]Rik0ye]B ëk90C <iA>?g ALf֚5vg9V ̵l_׽uR ^n}eC>Ӱ3fz6Z˳v K\̜zOJ]Kf7Elk{PcmpIv[cW$Lɬ:+wQ1aӉCQ+<SuܥŬq%AV\':)8=FoXwI:zDcq95Q.&Hi?4ߞ8D` ~MLJٲhiJ|-g%T)oT3$%14d)\"8#E1ZdՕon$md8~{h5?)bged 9&? zK tB󜓽@ǀڳ'4}2C 1+]N3, aSi{9QLY݇}2.pP53TƃR0%^O-x*rYΉE ;j,AH1Flއ|pp¢H>Gz_v $-Kj.U7"#o hgnSo㨴r$y4mE be{U !p;_{g~]`expm\ЯW~H]&n 'Pdx}[tĢ服uItd85MDz^eg#ZbXb,f3v<8*'ŦOwE<^an 1Y@4_& $]QqELT)Y-@@8r/oP4]Kfz-ʦ֦/U%v_iQ'XtYX .0;]56=\,j.y0Xs8JcMrw_ɏ c0`yݵ-Hmd g:wqzǢCL1rbAaΰ#D2o4pѭ!n{|UU:( &sG(آcPz$hp|{^D*L}^in ˾Ygz޾>m r(D}cƛ k-Fp$z;. -cJ"WǎMB>VzH}L+A,Y҃j rb4ʂx i<ͽ8гWd%%4o]b9wʫZgj F35 X0ʂHmBj]w<S!ȶ׾R3?y.HˆFI:/[q oF䬳hHH{`q8A|r7%VЉ9]ߝܞfxp˗l6IKyӟ<lwI:/KLx"zLi~}Xcf̗J6JA!MsBN)zkUEN`RG `a=YoX?}g(_ͱ<6|)Zf]',*k?$tWW_QTf4G&*z *eN_ endstream endobj 838 0 obj << /Length1 1630 /Length2 17643 /Length3 0 /Length 18488 /Filter /FlateDecode >> stream xڬctem&;NŬضUwl۶mTl۶mv}8_ck\{73rȘZ9+X[XK(;ʙHH VB@C@Pggg#Z۸ڙ8ȕT(S @?4=M -m, B_;648L- rj2rQ% ga277Y,}[[S=_,~{`ocoE53`lrk? Y+!;uLm ;O?MF- )_0@S+{? 6@׿ؙ+ G{S+̀`gh 30 gz뿼e?s0u70gSolcS+_̊5rG9A $VC#_2CX#[#r\_E-,d;w @ Ϣ|'jbt`m2K -ݿ".r&#ߞKde`hgaje@COG_t&Vo/]toQ/Z28>!?ǨvM2y-Gy2{)a}h Q>'29X|zP2rr8+Sw^apj҄H6ON Ŕ39AnSpHC{[.:>>5 ʳGW(]`If峃+м) Q(UΒ{$8(b?8"ijI<4::Sxuz% w`\:/@%aydr>55p3ZһXv8WLNJIA.aHsQը#:,N$*UakmFϹa–`z;RЂo`` e9-6$6{NN 19D{  Xj36u6SNPkI1&z*Ih< %.N.曏RcֆR$*T]DebRB̖ȖA:.5ȏN.6AB/U+~A1(`dAȬzA4W]%O'.|枺3 Pޣ|;CKT&?Q?E^l EHT1ۤJJc)&)Ͷ3<'+YY8\~F:7ORv3bЯzJQO|_gfbOZj XQvImO)|H!?p:p`Ds%.tROݟ;,]v ߤ*?ֺ93Ka-\'b~|3!8̟ctPjs)Spvr㸎$ a,v BJoR޳RXHZ˺bMq_σ< cM, _%&QnĮm W!N.%]yɏV fi}(~cb.D<-g1 h 8 ,awՇI{Ao^DlVz<ɓx4F;b;!YjO>ɓ>$+]u& J;FhTG\c侭N#Cgoc<);ibf$k'CWdL]uVţ%Rs98m!! ]F'[wn)`Fus ޘag2E3iXfQϟ2׳6m"kTlcn{e0Y"O`XSe~!?]`T2 D3[Zn[dЯ8x=a<ズ EFhwnlkb /:™p`|(,t6Ox:[=)w;=1VDfyW̜,.y[xn 0HAxǽ9v88h`+nŽĥl^Ղ'L4Wj)o0ݚn,-+#_V,R%٣{?lѫ\17Pu <-KpsN_ +-?0`ُFn1~f`&!S(\hǺfB玒3yJ5a,>pt ^ηeR?s|}(,_u.\i2=^r}`zJ0LĒDOFh@/;&Nھπh890vlcCMF{GwP"|Ƀ!k:~im 9.9i32h82wbd :qo%vgi֫"۟,HC:ecJjeU;ѬRN?hx+(xG|eaڜILy%mrd $63OyQIWt;O~ ~RWW3\cf"d2K'첽`5q'SlXe;H*d |93ͺxx\Yi?Rt%a%{!^(>AvXM/BRyջߌ#Y꽉-KWv*,o kN^uvl-KT#Qy!,jI|Y~8Âf/ెm)b"4! K*]׬4nFØX bAVlgIs+ ZAev]Ihڴy"DV V4)7M򻪽.q36g!eZ]2T~ҙesKO\Gag`wNF`&fgU*6W ag(b]8 R#'O< M5)rĴ:Y6`OdU:;g:VS"dm`Ӿ :8z1Pno֯LNt,[~x7Oi%ğ'&o Q^bX]?ޘP<^g2Pi4~:`jY _`ใf> tK/] *x/yLo_@hb}-@R@SPAIkeOߵ38A(flba`#w}|͚vsc0CԬmւD؎HWmVE,J +; VNDZhG'Zdo+nN;og)NJxڴܕ=7MXDwSޓkjU4Tؕex.UuߏtLR&,7J1D֩aRܯp! yjX,|-Q@BUNJDZU-ј:>p='x҃$z4g-nob0AL{>\B3~c BLY҆Ҽ32r~46xu'q@aR(uDxXkWD(ac9^\`光mARJ_+멄] W\ lZ-Q5F]Eb _{7UVVmrLz7_KJm<. 81^Q1fiͱ1c9ZLiK亃CM1\ԁo! UTdUˠ-W5$.Kd4$9)ҟ+Yx)Сނ+[zEyORwG^Q /;ޖ>8,%Y5.ֈpEI;δ=z8u0P(uxlֺd+ʭJơlJ / Gpk<9fZ?D<*PfҴhTmc˱G 0q{~#̓&+hB r6+tXIx~=0ۚϞp0Bsj/Z6K'Q_G>vyCA9M;T5La5P$r(&nI -oǢ!,+?֞{;M1W/JB*:c.vz a-,@QaHRU7mz#90,unNmBu\qeu}$9P 4SwH4o(l5NۆU6;~u:+D,v?Bۄ>V1K8RWF9К+2&ԧ9Qi.ɶshG;'s+b"Iφ;c: P]5Qtu]3"_8U܎ӫ}~se=,uL+RӑƸPG,(|hXNMK%NhB >C?DIu]&QRuD2u*ZtyM/2"$b(^Aټ$k}S=ނ..7xȍ :;P[?s](rBٗTy K\7R@/CzK'PspI.JR= W K/[ $ԋ8m^15Mު`&TUL~>(ʇ#WkZr-b}mu?K#ٽߑ3ֳٔjv}]? |NU[3=Lnw햼 ꕱ)o^s FPŋb\Bh{k`>!htY,rgDݠlH>drg2#P)EZ(p #3o5TE``'!P!f0zq6 ~sQYJMkÄW:"y/T]et EkN&: )2ַk0ݤ]Pxms;0r'L -{xM6SI'xZ.CƲb {Ir;RZcOwnyL K@ylA6b~^;E;4Pю7f{cƯ!c <Rp'n p(>׼{.h㝢eHB :'3w#s:[;6G5inԊ+Qjl;Ygp[j+- sc'!+_g;)bIBjWxW&`U|3m.Z-^Heo?S~?$OW,PoQ㧎@8YЊt1-vߪ'4`{}}[(JahH 8~z8ҒgRciQˋ:ilAt5z}cpmN/Lm Y|gNm] GDPǨJx۟ű}t<\<#-:x (SU$ŮoO]XOo_p@ W'F=_Er*·x~ ]2z d7Z}^{,0 /Ed Y&bC"'˽tk0=AڏQ(v!%? щfv3巓_*b1WhĈ5LRGN}Wcfg<5+74 "@m5XWcgwVE a)yOUlwu|%s:3"Ue"|NAD=.#ײS$YS|+P\594dzj&& lVLX̓xC u%n` 9Wa+O/MпC<}g)ol*O%P.=(Mðh7/0G `[ u")(?0,$u@-{!^n]t8͎ۦR̈ B6J:=d?0F.-]&2Y/z[xF A_5b`VK`yw>ɶ*@[(a7!x}kh}t} !Jis{R3ge?ѓRXT]S [eluIr) Ii-ݳ1-b :DW^`3B5atS҉Saʎ$⌓4!/VǽFFi3pXaAQ:vXF}UxSe'*!4?bl?lYMI0f;gHՎmYNB97n!u?Ղ"ܷ6qsoTD"M/7/Qײ+Pߢ@1zma8C LYHYܰ3Akb~Rqq_:.X)-0lZ.7r `T[ڪh{CMRp ~ZlvlW?'Z LH/E: Ot˯qr9Y ƹڱ12r~lv3L!meB)2`Eڵ䴪/V,3nRN˸"b]Ł)mXUecL"Pj?z! ,"J Y*;ګ ;KELx1 t~am77mXS];U'g]-PE.b= /-s=<؁w8f+j.cTWw<7E;3{21[8+"?#r˵OQT%cq8;-bJղۤlL4](X9؋ x; ҃}Qc~Uv'*ݲiIn(7v >+#(Bc.fpڡ.uLZp٩?fWҽٲvi`^'ȿ~|ۥOj8qZ[A+zߒ\s^ schۄecY='3Zmb*Ϗ箬 LّPgB$m2_3_NxZJζ3u1 o9E40QԶ .w m=pe)reLMH$q<\w+\Cs $_?%::髢caɹ\?1eW׶Z>,Q,e 0MǧTwQ7qg#,+7a_jYV*? I@{iw=8CP.rz;^.SWMO:+]-Ds $88vd'SPcU`A&KG8lr6x`3vZ4Ou6dODQ> Eղ|,Հ 4)ڧttExjpėH::<|(u4fOD[R?Y|Jx"2tYSZ Yk*LjLIJ{*{jq$΂d{V"qEԤw_И&lcU ٥F kHtPjh0i$6bKr r1 6R [ a~,Vub Ҫx$% 6"-`ɦ#:\\G, [UIw w-2RH(Ǿ =v6Q*", ~; W>ၡ j24w<Nϒq@*۠FCJkT!|i6#)Jmeu Fl'^/i Ⱥ╕Wsn h/BEqe=nXM";2>..{jJ܎FHjJ\cUy`U! 4YD92 y'ž5j,(EPG''y3T֠`0-fKʣ@beA3!A!1QAܦ{`3C" ymb d!tQKZTV&m$D9S9#ˊ4t|!Y"ax'lc_7n"bo=at 4H`.m+\4xr>E|R߂ǜ" 1*%5vj[d&*ƹYOXy- yG-i)a_hς֯6d^ 89cW9\teq9mPv1鸊'qnu AhM7=iVWdf_sLlY)1!5seu:*土:0Uhɻ1i(ؓ;:mUQEI%Vв$}1X5`;9LNB@nW_4m "+,s"+uG:tP `WNZG΁ֺ> 4(H/q𙨰 , c=bFbRPYNJ.&UyRF$x%MYg5*Ža.#RJGRDPۮ1%+K_Nu7샓$;dVkccn14:$[6w *,Wl|#$2bF!Ŷ# "kG?%WK =Q̌:ip ضڜP.A$^ swl2)*(UWn轢nw_Ϯpr=Y"uPz35B[2PĻ>F3!ɻLoH)]g9K~&]G^e{VFJ.n 7t6:V@flNmN8r Iܡ/,y̡cEEdn_s}Be M5iPJ7h+1RB!yBX|wd%C4r0x@tt즌`0nӷ}^8vC Xێ `SGCjBAe٤= dl>9@Ɉy'QN ޖ7@;Q[(d_˻ 1cJ'R=-ۧu! kFsP0vy2FclVَݓf=B8 Bdh7|CKf1\т}g'gCR3qvqnt(cAWbgI|)e2"hk|K~=}QDhԡ"jY۝dl\w@W *>Za̅uk$i=xr8Tj4?(2.E=$m̹?<F9ϗ4QhܺmoeeO*wu[PY<:_=9s1r!`LVN UTUAgӺ*k}ũ~ FHKqgٖ l# DM/n5Su;^f;{k@5nkpNTvv iAHd"IC"&W呗-pe<_G>z-b_=˟bY-A_HSb YW;B~T0M9VvQh,_Vy-Cp\NL eH8PnWVIdFտ+&Cj"6OFwU E-TlF;R䵦po]p{{41_z%._t-sIR+8}YäeQ%BVFЦQIuBMzr=vlәanQx|m4EQ g9pAy0 If7W(߶]cy8* yٚ#> Dß7ӈgz](܃.krdЗokԬWPvJhvjR|0O&iq&E}%`Ƹd*'`ZgZ-΀#k CV()-YM3姍;B,pr~{^Ă?.nԉiMۨQ̈/-3lX!}Q_:!{nxA/_sg^Hi<>'M07K (V:8=5{$?Söգ Wp {ܕ}6םg+r,iHYEL&"қ[cXu\7ygj  _a0a Z= Z j“.8Tfl;q4Dc:Gj*D= ˢH:(?,My X:ssV"7IQ?2Gh) fiRfD,mJ| bcZt}T"|Iʏڴs͉TAS*)/_\2+!֬P|A)$ bs^mT6SK\[tUgVߴ>d}> xzT\!ο/U˫~erdn(4ݓI`|3ю+ .yE*"7󍙜[xі# EO\ʷ+pUU,y}uZ=B> vҶ=;Gqi%z) ((+q;UȖ $gXtu0 "#6 =6+^ V :" my͕vX?O<9YMPmc~4o1*<7!Z;F ք%#zs2^ UtRRIM[wF?dgc7`vPSB^-K,FJ +hӪv %h`AY:n631OwTrI]`0, 9o4rW5,/] >${}V썹F?^-:<,N|!/# Mf+M`U#n44H4^7 Dv}߷JLPvF_ʼj}U*~1!{:s7`ۗPj|0ABIh*x)GHe9`!,UXv[”Y}pμwU蜶.Eyqò֟%#RJ['?ch"ɲD Xn"wwr]v_<_`k"$f[VVS%+2z]BwY=:it hN׶uBƫ TZA}*Jܠ=+iTDIwTNL^Y7Fk.3FE&IJQZ(d3* s.g7hcC]4˘9,f-iIJ:O7/\\PY^ \ 7Cky au!;6_09xT>"80^YF#%Vi 3Nޕ}t8Ԥzwo%u$'çb߀NRԎTvKR*yb aq} Bӯ@W lS2ѴoJĴ|o^ _t,phq 4~o:S:uh$cUaI`uPLGa 1.4HE0Հ+XMy[_kS Jz0fh@ʊhcs>wJ UmcS[a syͷ[K1*UGFth%d)N(=e~8^ywY8]{Gg -qKOALqv)S[vơH&LNrB:hІjy/4B_}KeFt6:&b*ɉFWw$)w&U &^t*L:-y;4B.2|(Lj(Ra"l #{eP9?O;8bАnax8NO򬏓(ur5TYX/AqKHq2S?(5 hTn(ЦD[ w}ގߪ˻[SX4-UwQ\C`nCԦُ:!ilʴRQlwݨJ9OLt5cn;bm˞ע][Ko.[pE*B?#ʎE &f l7\!#B'=$~xM&b<:Wp@<CvS𕬑 ܁ΞUT o]脽堛!+1BJޜۋy ' (>5ji?SkV?K.EXbXS[ݷ,WkJۥd*CIs4AJV4 WP٧R :wQL\U_gpm8/}$<*תE ~8C>~lwJ]~n l0:>]CpOqMX @ä,=x"7ȱ8byvR)jb1":w%=ӝW&A4zǨ1ջTb*Đӥ_UU y@,u{fW-SA>ڹJE2}ul@=gړ[v;v-1R0i3)ylO8eͧѲӛge,1U^6B* )_.qOFQH*eҁ_uzl"+o_naʳNNj3T\Gybld{Ks_)w~Lp"bSCn> stream xڭteXݒ-ܥqwwwN4ҸC@p {p}gΜyνg~]jU^\MY(rcfga:5U5nfwZhf2s t)ϏD trvqik322 {$y:89;An@M fX:jz*:Ym,t}oBdk+'W? '_Y޹3ha:1`7 v5߁dnWv+ rvuzp|Ԝn` W[g7{V5)fcWn; pztpwweXڂ̼s9];d @k3WK NOh[70={nk[_"rnO53EY:@+$V',{"/H"FqwpP1s|1w @ ײq0spl-P3G[.߽u?8G qB,0ۂeljn6+3ۮ :؂"}AlliZ؃Rd=wZ:jҚͶY}*ܴȤd$$<f^9i&bY `x_'Y8Y5Gnf O_oy^@ ' Pon5xكRЃaZyAUN]ia, ?珝_vqhRs){0~Ѵ2~;щ=Sڀa5a\ G2p~GDM-".&&m@%l.cV"^cd7oSכzWG^wdOT_o/ 4'Z Oe6IaJgt^`X ^l_;0L𕮙Q*&R̂w,"b^^WsӌV8R%r*AM:jp+܏9(Y;H‚a@\f| $= <.s4yP!5HsLTah/YU%SZ:X5ziSH3Ppx!" f e:nzh!hGM:ITu#8/y_bz+{B=Ol\zӍJxeNNR+/EP(t@ˡ9%csl"k!TJʛG`1l(e%A&7ꒆ۴l;++4pyW,.Z&AJ9"Zf{4 j8д bxݯs1~]k7`4PDu青wPWV-ەt2*Ux[4b'"%d?{5a&YY:-ؔMKsQLuCnYɣ'& c~xh sXD%ĉL MlM&gU.9d+ߵVYcR} ` 0,XcQڥY\^F4 gk!:D-r h)|әIɮ$K; tAjF;1qx6eO3% 5y- h!1o8!3~ldI`s4x9D(g?Uqgczxf"3s_MkDg\?0Gs9 }IhŇTLSbBd#­ܑ|W'&u=M?l߲R:jQe1aN\AgJ4bdϐЀ~[nMQGrw>wgw[YkzH;Xl:'bVUԒk Xf1̄# +A|(V ӌHvCdVy'3mH0=[83׺Iw7Cv~1v҃8^R#VQA~?Pm/9L-j06܏߈Sz*`zLg,P9#Q$NV>F97vcdfk`P$݀2_a*,Ty*6Ġ0=U([wDϧP"Q[ģ8]rJ~y~`PG,g\+{d֝]7N֟F! fq 2rKn̠(W#Y7py  ltIf+[z۴`ԟyۋD `_ Bf 4}oROTEYlQkQ4P`{nrɋ CZkh>+ Yb>b7Yl&p,-Y$_s+후̙)7KקW }ܙ5+y*(UE2VbH[La Sjf۽k-X0(z$拪 sھdמBهHxJ 4!_b) 5M æB|Łn5:!҂$`<0> )` B W}߀Su@Jvo?0d0sԇFߧVFDCݶaNaQq^ǹ2A໫N^h>*C6dQlL}PqfyVӒ5/'i9N3Uc?#S/ELxB}L.t.J%XH&p&]F䁯Ğ>7!G;;( gN=Ù #>-]Ii-"% ?t~Я5y|q'|t ^ ֖ܱ2ȑyo^:d>.'N~`hܖAxBqu_r' eNA^ C+lv5z%7kYf/P *wC= n22ujs?ġHˍB]v u^+1†aKƘB&NNz{#r5cjʽUJ^  {y,*ڝ ůdvn/tmtZS4nqK`O)Ԛekۄc_K 0\3aR;}3?2UZi@f;X3 `iÜmf,v~͓CrVc]\/`3R~ߢ0$;&2HZ]N=og! NAh4YCױ¿CטHpcP) ^*QRpIEϔJwnzM6k4SyCɟ懜ÓIނkF쑽`&|WK9Ӷۧ ,5e]:@} G1uU9iτwc^I;vԘa}\-pхG aIKoY T,Q .$7[~6@<<[@v‹e\" ,dAR^V.\7&_Uh'ʌAҔc? =;"~X I|n:Sl(EbuWo){s*!1[i#$XKZq"E~iL<PŞ-i=OI LUt!Lv?cW !^;Z Zk?- S B"np J+VD\2%Ԅ7]egCW Q ZF:z e]^kVmw'uDٜK^~C6 XFOjT2|+oӠL$),1ǡ`tu_*= |''H ?{2>Vs0%LV A[g/e4v1P|֖Azc1rMD<LJ^gƯJyaKrrhdĽgцo_jQ5Oi=T3^ 0^. t6?N swuT/jaxx49VU5wIh9tdOg=+`o˯nZ)Hķz8-QZl =6G=$\MjMhq8M}hh9+)!d8܆ }?Ya.!h$>ȅІCP9|# qXO@*$@BA^y[NS?wyz^O  8^|]\ 疴'˺Lf( %!#~o 3~/-S#粆W`F2K[O ~7<ۭ1 z!H 92O,텝T2*lVҭ>[@m*)j+UMR"ap0E{`Qbr44EY5g,E8BK6p;i;KrVJ+~sAW? %2ΆMnHaf#Uǯ~8EfTHM-of`iRTX cAxRHO1Tٳ釯3zOU"l9U1tS!%?4\f@A3L9/Bxy$y/jZ5!{,eGc,Maܕ94{_27Ne O,G%ɉJ5M5c >sa]8EIȳV8|iqqOT8Ȑ𹞇 't st/m<<~i9a3tTm/0EEs[MʥJqq͇oY权ϝvK'A,rL~M(!-³myzla4QCݘC &y$[6e ^ Zc3 FsF`T 99A2-YO<{`"OMe`bj|UTp1XqOm{fLr\2FkjS[=Zvϻ/n14.UxB #c v\83 JxM hMpFXūXս^RqIa%°,+Ş%AowoApssX >nu NY R"+ؾ2{Rl]3[/m^exeՑ;(Ee$'>}x΄&ZKנY XZ8yL3%B 5NZpN,#O2=o>63VO x "DނH_op!aS@?2tNSzm`Ե}\Ŋ }0DTf^?3߲ȯ&MXe6H׹XE('<)XExozF5Zn}K;Иji35wEF;q?nrxRݝ n;8"^d!vR֔t =WBg/غ9]`զh{:e0X+iߡﳠl-Uuѧ:{YUX +0z7#:(ϛ`1+#rCd:"8:IX!t4L5L+,u>p أ@e-0h=x0+ʏֺkZ&{Up2漨S> #&-WߎHݤtNj[삼G!x>lZ ?Dz*RKH5x!}p,e6OnU@I"08 aTZ49#VP>gHQA?@'"W?$;J U \iDCDӴLBd5'Af_|6e33ΒGkK6.Aaw,v13Xöo1.3]"^Zcy _kc`BD6޽O񥘭/;=ΌLdFC•RLݖ= n5Z5S%ӁvϚ~$ ᝉư`1Tn X^)Tﳫ5]ȳ!1Ycפܢo5<&4y;s'C ?dsE zTTP<,iFHY|@,.!N'n~sbX5Kp6]UDBiE6ˏEq&I/>a:!ΆJ>b<Ő*qz"$u(=eطF6U˛ D=gt8L'Yf-֨`ywiA<#ŧR.L@Q~JiP)I|=/U<\Z(ƺU5~`.N-#>|Kܳ>>y]_D4tzxOC ?ؓ'¥w}#f]O%/.yP ˞׷%߱%GXo8fRDʒǜvig@{EL2 -ɡLbt},3! Rm/Yȗ tG懀ϠjXvk<#2Ib7k-1$T\ Z 4$}( V\0o)OkCp2X͂)7_=u0`t+?r_PGmXGP!Hf%4$1b<~$6({8%#/DR0^b޽1PUG/{`]h=>[iLcU@^Vb~!ySu7[%qb1S=dW$ Es5J>) _B!ߙS|s i$or[rhHQ\0ϹΈ|HNF j.(9o/ ! i/졤L`/4Y2O3}x,<>6Rg-4sHWdo;)? S h1ހa s܎R^N~A3?\hqQD,~NX=nV k׊¹A4 hĝiXZ Y)I'C=A𔚦JS"3kq s&ioP[WFŠ/{l4B#PH Ǩz6& b#4nI$L]rDh\n?<֨GQ7v0i^d  m 7gu:O= &>~8_WJFi[%5P/% M/LO>UbZϋ'῰VH1('9K2K$|MY{GC0 ¡ ~a෸B}H8)ɝZ7Fv.|NǗpTcI+KCZ1(#F Vvuޖr xM@d>B_W *.c6X76hPL5pFΓ7s7U53 #{~թp w5i4/pļt[B8NDFMUG4%n7V2J]w{̀|!={<|oQ l$?̣zFrx$FY: A_ֻ+ZLZ~RE`.U !Y'y/]aG}ߜ2AjSHǰ[z &A}5xLjXO^愖l^ 5O t}M/j\:lT$SuD"p*VAJVaMpH #@6g}[>׏{?rڝ*LǛJ]AOA0bAUC MoIגn)t9%fi0,ytn&Y}'ǤW_rac[/.N<<. EX endstream endobj 775 0 obj << /Type /ObjStm /N 100 /First 900 /Length 3873 /Filter /FlateDecode >> stream x[ko8_ "ObvW)(7Zrίs)ɑeY yy_ظ 8 p<"'HiL#H0ԥ1@<`Ca;Jl6mz>Lf?o 6'N!&bJO?d`ͧ@҅R/mT*eWڹ/[z;xvVz=ͦԫO{͞})1RP`NkCȗ" R]t{dp" KCK[Q 9pqh| %%Gb"oT0$X3W%UԂB[84*eNxS'^lŽ٧trU7b.Wpw֢rO0<@R6f<̦rCBjZ6Je59k/[L{Y?M@{%pr^uv!S /l!։NqZd(G˫ >Mǡ]0z)Cah=WfY9v|Y1\]6ewuM{H!BXX!ú,p_"P6}=6ta bXi1WJ!1FnX[ !B1bCbiBfBZ ͑"Ni*Z1VX̃=6=ވ4aH*~zmk}H:22=KqUmaB'; f`pN+f:1$6=Xq>J,X"_R#aC0IC֝|v^P/ndHsҡג)VUӧ1ZGЬ#=m|%*ڿh[jԃsO Q_>4ѨQ$ѩu@qԃC&z4@w{U;ulzM:Jx+E!Vry&CȦ]2F/<۷yQrxꏛ{8>KnRzġ!-8u.'-h8.gbQRU2/r&E:-Ux9@+w &9zr &HEE{EQmq+IϒѢ5fkB]e{‹s9ahAtM%9㤸bg8 KQ_-mgo`J"3 9_nV !q=g/!{ޱ#%,)A6&윥]+v*!f#6fv7elr 6cwZ𑌶'D86XE~JNl|Nd6m>~?nLB:wѦŪ{ !qNJ1y29ϑ2bΒugdҋi1oF#m \}FI?d ."MU>]Q>@Bf*z-|`r}eEz~6*+%t<,u[͇?_\MӔwflrl[v;̇gP+frp_ g(=M]1a "6lJYYqUGU4sr&e F*vZ>rQz9q˻]p^ܬpm&,¼^gKFcV:qDfŤl) }gmr| Uc #bڑ6,7pF0zmy՚uxM)zGMmHP6WmݔCy="v WjOGM>ԉ|>ՓO@? u+&gZ:z>d%yyϢ|gg3f湗1żS:`<ɴNO|I[.lJVEݪw/[fh@{yleL}&[_DvrW L7Q7pI?߮hp4T"hF n7\ /g4$7'tlSZ22/=Z]5TGoJ;PevtѢL}MCZڵ[ ݨC.C0AZw#zAJ!SG At@@UQ/:_{LA@Aq!,.]UOf pJ誴5.5Get cI:: It ٞ>o`в{:sNt+c; txFтcD9Ҙ^s SAs:: &2(^H~,WP+4`0]yRsSCW{i/3 >o endstream endobj 856 0 obj << /Type /ObjStm /N 100 /First 947 /Length 4233 /Filter /FlateDecode >> stream xڕ\-mW2`%(*Y$=0UޫӪf_bdI$zk?9~HqX-(?v\iGaC(ٛ[<~T+G7h^&v4!hCC:޼!Mqs?D;C>pezz9T$zP}B9ka*a?k!yti=?GwC<oW(hy (G93 }֠7ΰ)1ԈiF0.8!ڏR7UJ pi)AJcT1F ヘ?O%h=dQc AcH /0ˈ*11Qc #|kõC:;apDvZaƌ14b NH ۍc1K[#Sņ~!1WXHb {K(I#\O0#Ȅ?U">R"0x0.%exXgD͈wO?rϿ헯/?ﴽy HzX:ǷǗ|ex?zh,+ B BjIږx_d|,Ѕ~1 .Cg}1:l^DtbRnaR%?ӏ=@ΐ 4 xUz!, N 2&΄!0)"%/F,H31QR^(xHDv H r!@M5@qzxwHQТ؎Tult3 'm՚~d͂\ȩ"uClDYK2%Y˶5\IJg/,XXV1`yVe"UۗYdtꘖl@XeYx Yx K̳.NR;bJe)$lYx ɘZB[Brb7)e[B[b1LO[B 5eQ&cM--6KsK.Y\H$V3%4hPgvᎈ,%K5s@\S:lYΦAǓ+tj UN)B2=n=@0vs{ @`N4s9XL5'{fo]7M  )J!x]6xH[ '۷Ηf 2FIC@Q `@ ymQCcˤCB$*-e[#J2;Vt%K@ϝe&9E&idIz%Y|.תZn\%9%$ddŗ2m[(w0IvBNM:E0ɐ*کT I*uKJme[ITA*Vl*b<*)y@gԖX+HgޓLEu8ub="KRR[b}>8K#ɖUH$sųJ* CpZ0ԖZ.4V(5&z 4ldkNr0zJ.VvruH*(sH#sgޮdldkWkL=jLl@xD$e#}5b1&bH_,_͡{Z/=k4CV6fhF ZHY+I75+IԖXVhC@dF!F!rE]-S*l@4茤ڦ! r.eֻWu>%T#fKH:wB\}w+:WhFBƍed:a;\IeR[fs&u.äWs&M:aҹ &o"#PH%;5t]QSH}B&٦)ibs*Kl:I,'N,ɭ4|F, V-3}JmeIwв$˵,?:Ir-'NirN*sjHm|,Q%ð%:P,>vy7<UC&˗ rdBj:P,>vyr!<ɤ  '(L(}Rʞˆ_yrKJFMd Bl,d++꫿Vw^-dN+dJ+$n^!\ )fuWR,a7͚ait`#Tlt?l ?y%w'ۨD| U}R T^^*tzWfgQ-ı}֟W2/<`I2~uۨD1$ *hNh:m:(ޖCmȏRByT i£}4~_>U pׅۢ!ѧ^;_健k+>_J*0Íg>?6?|_=_J>_hLg5__}hv="3d[%UfVt˪*c5?gV%'PF ?`X|0gk"4j᰹V} wrcJs \ &is#k GnV`XsW^evZd @,^f:>]͓/2;B <+/8P*sg`v6TSs*G>ߔo#l1'+y gq34وhрJS߿%$ڕ+9+++ο凇.\{'~*~-~ TIjRJZzů}q(3/P NQuvүF+O?1Z0"|pyO_c]_~m7W ۾~"ޯ¯Lگ ݤ =1E*YZxڐ% 5W+ϯƝ_vP`ɸrqͨ܏Q?S; L endstream endobj 970 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.13)/Keywords() /CreationDate (D:20130204151252+01'00') /ModDate (D:20130204151252+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) kpathsea version 6.1.0) >> endobj 957 0 obj << /Type /ObjStm /N 13 /First 105 /Length 447 /Filter /FlateDecode >> stream xڍTj@+Rw-R1,l7F0搿OIz&QP|ިP %QW$ Um\ V" jbCq pc# d̚쏄(wO*1ɯ.U 0C;n!K;4>]K$ a%TTK& -#V@xqEK\KZ9"rD䈨4KlVTϵ,.) 1uhK BXq}~[eB!9 cğYR5J8?^~ڗRb!!!E \s8W8W~Ks k 2#cx~uȮmv./9ku(a ͓O6ӧlz>lyw3yp͏jHS endstream endobj 971 0 obj << /Type /XRef /Index [0 972] /Size 972 /W [1 3 1] /Root 969 0 R /Info 970 0 R /ID [<045D44C8B1115E7885AF351122209BA8> <045D44C8B1115E7885AF351122209BA8>] /Length 2119 /Filter /FlateDecode >> stream x%9I7==c|ǷY/ YȐ@`$b%JrH,I  Ad$X2R1_yӯ~]uu.t댶(@v{h43_^{`s&27b0sl΅y7]a9swl. sm.!sKݲbͥ=s7l.0 #VjXka 6u [\ s[C;KŽ{ߝ^C0 cpQ8pNI8 XUji2t7p.B[eWa uhgvfil~VDK5x 9 ^kҤ4fUjJBwm[`I6m%-$$$$$$$$$$$$$$m$',m {l$vR@i$$$$$$$$$$OBw/J*vbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHb-PPPPPPPPPPPPPPP`Z?'ڞ:]ϵMT+o[VyU*o[VyU*o[VyUiTTuVuVuVu=F[H^|F+C m$****ֺ>t6){bVVVTD>~^ >2rzۧ}KKKKKKKKKKKKKKK}cz;|Q ΅y0a,E0a CXa UZXCG[&CﯵͰ6;`'ݰ> Qp1pN)8 g`$p7v.0. Sp 6܁pxcxO<^kAn]tP JMAAAAY“m/ėVLŮP蠰_ag{ݰ׵o*?n/KJJY`#4))RRRRRR!P[.c!}֢BO r RRRRRRRRRRRRRRRRReZp_m*)*)*)*)*)*)Gz03`&̂0B{uS\!vt:ܕN.0 #Vjh7̓Fa]nz`3lۯsG_jv `?pFa ;=ct8HySpڋ',8/b\d[\pn-1y=!Dh1<'s_S2o}-,,,,,,,<Ÿ?lKY^6A{lY DYYYYYYy )3y#g6`:i?o+g3L|&>g3ә|4_ۮϜg)mPtg~H 3_3Bwf:szV>^^~f?f_%o쥃=93 |0:\hϿ`̇ACK߆}a'ץ h_y%> :X=@Gvٷ!]{vB{, {`/4pFC7ۮBo?mt8FGHS _jcx}6:VN|N51< x 50_,R)ř0 foV$*4F#QHT$*DE"QHT$*DE"Q(|D"QHT1DE"QQ((q8'iLGw# LY?YD?^DjDjKp07&܂pa}pƇH|$>G#H|$?-'O|>} pz/Xʡ endstream endobj startxref 242969 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/genomediff.pdf000066400000000000000000005307351211610345200261110ustar00rootroot00000000000000%PDF-1.5 % 3 0 obj << /Length 390 /Filter /FlateDecode >> stream xڅN0@ /xkNva6H("m".B$Vn|}adbߜjk*99eR\ A!CgҜ%˸H?$UXx J ) 3R}X x@݅UᮞnYڸ$㚖BD/{|dmG Z෽}q}<םngw "7f'WrB-q 1T_q ʥ{c\X/, `1hͩVz9g۶nh/#{a:gjcRS DA7ni+8[.k>gD endstream endobj 12 0 obj << /Length 2258 /Filter /FlateDecode >> stream xڭYێ6}C@ÛHiy;A,@<6F]2Tk)⥪Xu7 7oKI&1djcfilhIU"roߋt#˒DX`Ҙ0`4Q>XZNTo m;BP΅r. o4IWi*ў\߽,+iSwk ?,LchAɔM* ]AJ`}8n &aTo 0&z.5cJbn4v*6nQ&!*"U]=͌x] KWEZj0uk^ t&Ўsvg,izgԤksš:˽9 Z15$G٠a4k5$ޜ-&P=m@ 2}@Tr^jJd `W~9L^Cb75UxN\FN]Ӣ7OQ sKz?L oKh T¸n3;˧qmZHRHelzCYv]'vMW>p*SG-@X”*cToH@rƂ|7H?('w-ggc/*>tJgؖRCkx(Zk,PEhϮ#{іclCZ eR!&`k1X5lY6@ypB@Lwot$7X'o f|uHCy6b2N֢62}I&4-D  !<<4 YL3c~boTğ=:Ů*F'2i!\ڮyҎˌq[#J7n=҉b.8D |3ܛ0" P,- }kL>i T(NkO~WUx7nB  Qqn'oc@3?aF 1ʒ#Ԫ^fj9ǔ1r< t:Dp P$W\??9fCʋ xCR| O̚1dtp&I1"nu;`]|{L YTYxHCkXl9T6/.J$r숱"`$ d{Qojpk~$HՃӜ;m U}\Ea, ,h҅aiz:Q3^ B(WݚXr"ʧlc ,')$&S}R}{0#%Vձ~&eK \ECdojMf1-M GiL b =8VMOĕ^ Bj@Հ1{ rOp8{#]=H(]\WAL~X8re$ųAHHLEɔ% Lٟ@YX ȋPp dF 9 p}z3|a ,X1ٍ(8>;†UO }n~k؍\fsh/;x]ޚ[Ӻ3Q-mh.NxMw n*&?4:\QzD[;ron<IƤ]90Si%05UɁ1> stream xZm۸- \DHq{Aɡrز-ĶIl3C5Jݗ,#9/̐ExrN~vwu )Ejq]ĉHha6wɫ*QP_뼮u.28C:S4|;LmSK pY-M8 C-hb!>__!wY2Aⴛ*caUMc(9q_2O+bdXI-N7'|^ K ED-נY"Lޖ ۞^tP˕Aٸ榨uSVgrZsME]^u.+Ƒ~#5OS&;@28q0m4lK^u&?:w#Y~CI~;~ pS:f_cn VC)"!Ph/O˕akueUXI Y%v ~B(R=rLdiL z ? ~<9aaqHdxl>U+XghgovKߚr/oH A9UZ ZV;2?~&?;w#24p3f.oRWSz 3 -9ksF tK&g rލ6UNcXVyGB\ FĊ XhO޷KT Z<9%O*R|&bvyOE#-Lyz!UdT4 KGx^(J/ ۚq(7g;mqZ&Q(>{Pz"Ub?gU#vO <0NRˎr.N.3&HmЈd;q "`bu]/;?KE1I28Bs`IWnFJ3g!  C%$^`Y);zj@YbV}r{÷O`3pQdzDgƒGV}nQfFY#X##PEoQٗu;s}jcYgv g .>J:{Ok9+ 읋d6>pV'#ѣ}:T3u7 L~LVƎF}S˭ʭ[9OXQɔ{+wӜ!={oaa /|:Gf'EM^禮nEf..p'D3,8&Z;kS)F /YQ%U nGS8ئΓNwֈם}5'y:as I!Wn(te.S<3d>9jaux0:%p2p\3(b nBdƄm*: flR9qu4ꦺZ]]"g=Cqt}z*\l0wLy\h`HtX^pADva?]D2 O2±T~*߱rMZDu.<:Q_uX9jw\q/ݔqU+NP}U9z$%49|j&0EF%?-um9(@S!b3¾.j=i[L?S$7c|pO>rUǺ*oL ( usb'TR7Ŭ $2%hFKD8PI;(J(P&Z(4_|p|`yrOc?yz:_[{5S4$ںJG]UEG'J>YvGx`tCQ6%~)3%Mk؅V=ж4~s$ZԐ,qE XS:Z=F̰dEkC 4a,Ʒk$"5V!IkxhIj`sH0:ϤCnWn&;eU -Pu{ $n(I 1?)e:aYMh pmFDRrQ8zIK{*CF>k\A9JG6?pDZTsr,^,*X1 5{k2II~+_s3"ShpNu>{}kv` s٫Ew!rMzI}QmpTq6oS8#K]Iψvg gf2'0"ѩ_+st "U:ȘPЅorw$u=ѥT9},`S'uDCm\ Q`Ɖ$Ih'؂~@[w؝r`1ウ*Pvy59Ȃ]`+q54͞h endstream endobj 27 0 obj << /Length 2345 /Filter /FlateDecode >> stream xڭYɎFWXM&d`c c`]KK/?/"lR=c}zw^轻 m{QI[/ʳ -"/ S7Mm7Xe~z/ؙi;v$_VQvݕAԼc5iK"uu?UtBOW"4C/$4'A&ޮ+1q{tѮWY;Ci},EHUJ2/SiB&aSݑߪd6Jq=(-[U[`ݖdKB'E,$QZnfr'Piܠe/9e 9|[- 2VQA-s/t "q, 6$Mw-mF?AMKAc0 v_nX%?؏F!_ fy4 Γ>%}oXG}ZZ7~ڍ8 AΗ~+XmiՂgzkz\n9y۲½i d;x[իL28׵mMjy'+L,)&/A5Ԫa}"bAPC!VIo뎄 c]/bDž(>i$N,LɑVtZi9L+G:^ royi7GoSּ1AD|blD#(N`n^|4s44e&~zgǗlz⦢Mq25* UD"ǽoR vjؖ,w13}^zG'<Šn_!ܿnA-]D*ΟNQzV=AaTq/3O;؎2?t( zKIiHdT1Hո&1YN}o[3tKf.4chƮA;<,hU0iwqgQxfj /W2"JcG'I޳zYtI z/H* ꪩOAL 1Uc((on&0-1K rN ɲ jl, ' 9P0Zy1dPBS ~}J6J~BCPIg/"e,W R,O(̡5 dVֵim7 /:JsT ٮE`_βaQևH* a/S,ƍݹ|xX 3#oHv`J98}G>ҳj+ʗ'xTE0Ǝ\h !tP IIUbnt -9M)'Y;8;"Tcuh&NP]y a(ӑF(LZ;7aTDq7yW;~$ͬbl[XL c'θ)Nq`A drZe[^VÇj7/6` o;I҆1s0%392r>w(!¬wsVV1t&#qN ɸ+W%dltVG(,gQ& vcRk;ӳ^g{O(I)`#%3+ bML :"h jϚvk]'%ыUDvdp-, ]rv)[ֹ6㆟MW p V6 aPM'\g|i; QxT:X+}^U(A7nŷ:Z>s1ww׃{`RRe0W("qO{XT..T$d~*X1<:"Ho\'u[(1`/#;FjM#mR  gG#]Q 3%;3K|r)sYih=HfG6_PSUnmǹpv2z%ɔ=U{҅գJ=w1"h N*}Ŀ'Up)u0cNd@\*5f)`!ĊX顠\ 8=%}Y<0v"qV[w`y5[hkwC3{w' 5Sb܆νQḙUqHBO@j_S$$ѹ懂Wk:*gB37P(PJJǨZJ{3ݽ^#H# rpds r`˙ ٿ@6 һ0 YV|W{Rq endstream endobj 30 0 obj << /Length 2146 /Filter /FlateDecode >> stream xYKo6W>!d] M[,4l7wHίzIݲ#Y"bU}n|M"+k$;DiEyL}sl4jj_7Ed*4mQ6x1 u&n ]˝v}<0n?w x4h#yH/s*FJiAKP 4Hl6K +]Rv3ӓxO@7/tpl'(OTY*晉N,ii&^Mh<-_KhӌvA/h ]S;Ph p퐤z5'GaʥüV6͖I P˂=^sH.B$$$IJRT>g3}l5LwTJx`īCR*Y <skd0%J2%o4PY* b-HsD]I vpMydy)q u=JnA0vhL#~#'/@·V>TƯ)$Ei'/ Xr?R3#;n.\PN}ElƥW1,7p l88eփ!pla P}kx g[-pJe3^RC x&)_q"ȯҫ&TgP+3bn&VvvǫtWmA  UL` MAi5_>WG*&f$\}FN܇0j f$> ٵq.x=5u~zs==* ϗ~lfV:Hա#^%Oiܡg"L5pFᗎVTbn 0[𞂷_{֐_2t6I1Ÿcb뤘y]H;jLIC_}@> stream xWKoFW>i4+'i%HA{ggWбS@F>gfihpyDD7`z}yt69:<`dJ`2& &&Dq ;ѫɳQ/MATpkW"G0Ȓ )'y itgcҙ~Jo_ȁҔN8-K@(>,eN.6~ ƌ0ζ P𩚨Loͣ8<5 ^ԁuob='KaT d'S3*:A,('Yݘb_[~!f]2 AʇPtZ=~1% SAԇd ,8 G:nnm{I,Ṁ|/bO$C IiкsCyJ `5<@h0AF$Ž_:D(zSΜBӼXXzAz_P՛zah8+bL1SoDvˢ= 3ezODЌiaޕ_]yW`u2J9ꔆqdw8=Wn}s]`1K& Ba AmwfK-pxckcGUj7`]vR)J kSKv׾XRg: aJv'4sL2d(τ&IL]ʂ11r.]'4Ch4\#ݮ<(0 ,rQa.}X՛nƂIzIX֘C..aD1v F> )33،5og#ߜ)i.1xSHv+ E\iL55Ab`S~gaS--A|v]Ò#rOUy5s{%lYbN[bQLw1ƭϊ6v9fC< W&o7 eݚMS杙ä-ϥ"I*w8p~G2UcAmӓYQ-죹iaݴ E f*K-u]k7+^VP*wV}_1/T&V:_+T2|fpOM1^QZ?HC,)Ni90i"H2_ ,8pz H!S=d}R@R̼<%ڔKX4?<]k&oػZ<!s﹭KT^ PnQߓn:,ƼoY- Kl:?9+ꒌ@V0 3E_zb=r!d\sly#&`Y;p&.ZYgx?IpBu_1I]]eMt| ߶E$mgVdAI;mucǪrI,d3dϚ}58dr#8 endstream endobj 49 0 obj << /Length1 1916 /Length2 12308 /Length3 0 /Length 13488 /Filter /FlateDecode >> stream xڍP upw:  $  !\vϞ=﫺jf~3bN@i'G7fv6.;ZfZv99 !$ވJNyw{;'GW _X i(N`[~Yy49 3G -=@ttB6nn,f,N`kz&'t=?J(9*irB  A@G7wGK !Pq:Yv@YX8989zV { @EZˍ `h dofF3u3¿s\Y\A6K9ZJ898\OZݛõstt/9ZZQ3#('Mfcc]@/ ?hz;T!~`Vd|@u5@+!,Ans5obA^cۄY:9{CYu*o`groJU@eG9G+'x k2ZzFPvzg 7dfx{c?HO=?z3_yvw{ % qTZ6D6\A^@KU迧Turqm,.׷S|[ )hdqp`3oD-%8:ފX98Q ^?*7ޘJ7߈jZ#7/f >?ͧްZ Xo! ߐmr e/?-/\oܷ¿o8~k80\)[.on 'ۘy:o yOot71 w0x?/{ hd!fu_'Fɼ7!"ĊxU̅wYbtrk$Xmg:"BmZ|^#3tݤU'z38TtT#2G{Ұ:QôE%o3M_'-qy@_ON8\kꝊhNAP}g!3=|$*0 `;V!E9"TtXh=2梋{ؒep:>V@fT)C [9XdSXomYQZt-a[u*DtLґeGi_ƞQJh5@JI3JN¾h^y\Ś9tMf00>ArNNv(eHmMH3co׋&/Sۆ[:,t3gymsb&JwH=Ve[ _LIoU 6!3Òsƥmd}}se>Z ?H9nwd=B}Gu.lLXxuTz YV19!ӝI֫JX(G)Ӟ~]ymR7BiV_?),>1x$D!B""1#)m!"rfi&+Xki|Vu$ dwڕ}OV(Ϭ:B%Ӈ^ C?uL`|]|r>J& YoS_^M4b<k3@ðӷUM-\_1\%?@|A帑'!8,(6hu;& mi<}ouC|vߐlNL`O;q72CZoPzK 2s-@8 /OJcń+BƢyJeXV&"?k᥋oE`ӱR[s%wOa0Ddj+!Dj00adrM'">qw%:d&!'D+NƏmC:&Q:%U3ˢx:RKpB ЊN|RqHf |¿:<2#t7';$W.iڂ \ZKY$܉ HNi*~0M#x2S0r5R̴ S+0@uIE׺0w !LF^[&D%6&|R>-/XwIp.nQ ZV)ʝup={WM"/x.h8AF,Oă}+~!N`*9o}8C^CS(ހas[tb0x]N\4YN@ #fC99΃8wtyB#;/ʛA6$i E!Fd8S%Jׄyxg5y9Q!bX$MdҦSwE4 Y$_wk|*X"<SzbbTTC.g`Cf̚lIYM1w'IޒJMKjV2φܑ;8zM8 MJOL|4f(T?"`/yO~/jSS_בt"\r^N%1ޫ~T|5O𫺥tUH;cZa1s|JO`V SkJenvs.ݑ+۽4qE:h7dOgCSz,ov|-]#q5 `<&Ducp:PaAgXKE !R'LVQveVfqp!=πܴFM}Ð-%ZaD dZfho8w2Ś+ }"P 3y yYm0AA=J*jDM5{Z9j j]7f.{CWl.P/2m]G^9)|Z͞ECUrLiӵu eM_V[ʭ%nݱAڎHS斩6!1 ZWbtPh kbXe (Z+t[_-<|NF,/BqGh[].Ws7&j#<1P`ڦ&Aն]Y. u4vJGk汀p?".otMHqSK:T1c9Xtw(d&QN̾/޴ JW3abX6 UJa<-X~\4?^( K\ 2o Kwxˎ ߌ_k z%.U8-$kM&sW CL!`ƛ2j`,F@!4!~ֈ.lQ`ҌHtku7RQ<خi1:!A Hk`4~nP)4J񣱝DÙ7Z*5o2)jy*JՁ#sW.ݧ+d `\Q,ЊoFOid\HH7.4m9#`Yࠚ.zkvKjf(y<:M]9VpH`x-(;3>ɟ>;c[7Y("̓.;wL:KF}E򮌨HFVku&q_i~x6`ixD^ ;xgZzԫ4hL˔DŽkt1ۃF ߧ>HӮ1-1[ xe>Y.b36T>kĶ9_S>4C&hNL)C<&ɫЉo|)^6~> V 1SF_j(Ǿj!z,{{LY߶`[{|u[~͙~6DHg;LJRVrHe2$Z0Mz|xe 1DF_+)Ĝ. |ݣb5/ءPo r"aݹ![UFs7ނLFXlLS.wVL$hrFFBj)dXX: YڴE6 Rƍoȇ/d,aȧ|C-M&f֖(; :sZy>ߕ# nS_ ({-ˆ>XFV{lh;<e:8X:)h8m& HC**7bM>jl%~ɓ)\W=h&J.PI_rC[V*btﹴ Ri{f&x ߟͤPW(zK ~TR/udٱrȵEVzB b m'!I.U0~/GĢe ?&.wqy_g-[ `Rcmloڤ8m nWv?4)W'[]O;f*y }FAo;_.7:ų%PW[Jlƾoו|49̵W+y9jL$xևLg97F:NN}DtI,^V*W0UkP*$whn r>.78!2;e]VWK*X`~ЏeYTدFpn3WzRڙth9ix!vnﰝPjBf} ժ}A2z,#KLZNy'y3$ xm< %F$V}<~$'iuX8VUw+/ZFHJ&#㻔s/]Uɡh B-g,4O͚)D2ŒfftMg_6m$ۅ3H B^fʔjx|STi&%!=# ,Nz2~[5EjX[E1:TbhIy6V~lQ$.!o&UXwLbqt%U Бdsn#Sμ.Lq_`\t$. G 4eL"-2AIyU)BOscPVԁcD6p%<9cy&lr7im*jBkkW{60 *Gph#6iM7/ӵ⺪eKZheY.7t!) M.#9{5ae@!#drp oD{ 26jYIg}JsY2ۜE&t)7ҹ60~0gch-hiOK=wK^qvHؽE 7?aT TXXQ%hs#mhz1ji&n56G)eҟz ʢ0y\F>o.#}syDeanTLd.F|ᦹI*{!SaKMՋ#<<Sۚ4>!~3A ۸pNm՛"Z ԉq_%P?˖BCgeL,ʹ3Z37>9x`oS$/*~<"( M'_SN!I")8T%_֓< ~*R?)Q*/R`(c B`XJ/9P-霅}AY_ R]"ˤ"==Eق ]Jf QQ*mq~JKD$=H?b@cWp4#Y.rAsIQQT^*OzN< {VU=~YB7,۝,")z5%u5fv*ke/> [-=m,&%~:Y+ uvRZLWߦEn%pX[;wҺW"I5*}SF~d~807{xzjט9zyme̩ 1MxoB֤o!bA bq؅\/P:U@5fuŐeF&A,JxQ&Ԛo~*rp  Vy˅[ϴfcu8!:ɔҨWĘ]rpcGs)E{L2 n]1I 5c ױ9ndFTye.(,.bg(} _ +̬' i+wc!35 1о3ZW%_mm㚞Ls0@ʽ(r^1r.̃z/^\ed쭻0HpA(*24&l[;6&Sn?:6Um?T Ps!UQ3<?%GeN?{!϶E"1?$Ҳm:U$_/-ZϢ%:@f3D9`fSߦ ؾZe$V˛t);i˝ᄺ#z̞N@\։ms~55tY#5hqEBPrfY;vhϯ-d0"Ѹi#WF^@)h3Q Z2&)taП;᭍bR u@z .ˎGmQAEk?nxzEقs@bH/&=r\~;`m5h2Ͽk lZNn-p.s3RaY?ϱGs&?sg5)E=`+p𼌮kku6MSCzQ+9%ςXÛR{%J[CFzvMՈOv579Wl!z2-_ex˒sr)ݷ }#Ie^:-+} z$tBx; 4wy~kT++oTHR7"fN)Ln7uIH;t!f@I4K $T)S͚0YYއl=(Z Yi:pMcAHd4[ۣKŸhSarMgv~y@k R< +FQh`}:R:,^w>q;74濋e( cTN6wn0Fg5?}45ỷ‘FaWʐG}Tӫ!F]Tc]-t2:$NnNaDHfziKq*/rVb-ԅpV? y6=\{]g(_E#ҧ:=:/ְ锉=V)E}Uq{U'GWѵq}j6+ù6.oМ.H#[\^Z\`I s6l>'0]6 ;<1~U|/Ə24?CЊ˱Jã>9޿=-&g1x>%Cxs:fx : R"EFV%N>FՉFq "KVM| u2JSDs ]U"P(P̎(h*=Czv$s䐂q}̴k> ym5i >S~ 6Xit:P&%ch”&ѱufg!hվ x挜5[Il[ݝnv[}IL'@tsʆENup## =;}h fW_#2.7_[ns>\eʳ" :7P]Zs`|3i#wbjra^+ |6-tYB.%[](JXaF GU>{ujYhfVNG#uOUqe!/N'nX@or[[m3aWۆ9P|_vl>2X};GE5PE)Ӟ3.f!Ii)@4%&MyBdc ӄJ6=:/S`*(>}g,* } q!y|`0 Yos;D#!XeXhd7[X*Y#jU+R٥M}A'&}(G8h>gֵ'c(t콂1V "%" QKkԃSagQBdpg=h9d~~tO, O7+)OmE*Y,KýΌqQdXgwEUž |b@+2S׹ TH뫸6.-Zj{*> a?{tNYYȐ5mL-Ku r}(bc ]C^yEQ rḫޓM֢ a-))`\Oʌ2TYF({i:x5yv{+%%T$w~>4n)B[XIUQ$O9RJʕu[ͼu :sG2ԁA ŕrld}LJkí[͝WN2 \=9,as*!d>w endstream endobj 51 0 obj << /Length1 1518 /Length2 7658 /Length3 0 /Length 8654 /Filter /FlateDecode >> stream xڍwuT.]!5tww):# C %!]!(ݍwwkyYkumV` (>V01P 13@P?%B~ ~Q >>_@8Br0 "Gufw# 1ivh 0?%ؤH' ^^www a'p z`0 lErM``q#E` \\a6`?@_Ms{<3W!w2yB`v[ j =\u@({ P^'Ck bF+lᎎ` {}0;EՉqv)s#|||3amw `{G ߽]@n` w??bX 0߹wSxnl0?k``7 p78[@/ *{^E`S>vЂ5 YwKtB#_#'n]w*y ?ĭoL ӊK@pU~;XW/$YGߠeRKÀxX{y/&_C7H |\{P6A"#.W%^1ϰٶ@ zVN+rS9\8Db"8P@]R#ϗ]LJo/ 9+Eώ0 @EA6.^(ϧMct=S_zC45c~tu+҆h;HG=5 e7IܔOGhf)=(͎k)yJA-졌۽=Erm𚪟7H;ONKØ)ɌrOFg#S/K鑙ǥu3ȏldi@$LX4~筞:d^dS[Uz.x??I^]0{A9jpw վ2>Kq\H!ZZi-7ë OmA ɔ;N=]G j\''nM6?c{yzYjrYnt]eԻT*nz>au i'A:$+Mp1DeqxÛ T }V8!XF0Ih)qBok†טIrXsρf8hw\sFvͩ4̂7b T#0K&jd,ҩu+n Lrer07kں |ix8 (Edlke/nJSGNPe!7OlQUB+ف1cU2l&6m f9*%+AOx2FK+c0w~ICSA&Eк4[OJE9uaDlz 4}GZƙoޫ/̨ cHXR7`XXCjADH.$&|,'O'u\!N4$i3Όz'+Ddo#! 2:p@϶pHJ{1躭zfmH2<g}gJ.$g|FPU X؎ɛ T%a{A#5n||vN(?Fڻ$qrQ-.#J9ߺGT˳S,.cC{U>z@|5aOcqvD# p#u*"j+2N3bh\xs -vxWԚzHk0m&E"Q.'Od?lՂjtEF߀ >G?fGsci`JPULgLK<0wpL1ݘ`ef('RAez,Մ [ϼJ@+}UCD| FxdA$҉[գ{Ww"jx:7FJ)ܙJ~+'h`g@7 ޓo[ %GRS|Ą2 :7'BZ]7Ld:XwCSt* {nEQӫ:P8qǨwXE_|`riM)`޿YXK+Yd3!u>9WYXj;jὉ~Į3en貶 '0_Kȗх"ˎRg{6B"يdBui)Yծ?1 r072Q3 D)M>- Ç+ pRɊIIӺyP X ء* -iO@5ˏ*ـԄ"Fćsٴz %up"YG e r)a/D'O>sWYgnE84g2K(EHQIzeÓfZo% ߖ=1 pT/~Vxv0!R~d4{ޫPƋ#KA>&OLW?e|s8mUZ*(jݷ7Mr^Zϣ,q5)?. ikGd I"w]!j Ei jrR$å!0$^0#6n#>DL*#X<kx+V0^7wB;{ke.CmGm+ MZŭ!YT`f*+䜑Ց q\E:{14_Rء_zts 竲XNةffbPR[Iĉ,gch) 2Xm qŕb,D7_7?޷4mn?qlѬ<:Ie&ޛSh7TT;]mb^\H>zaNS*[sP7J;u~fRFsZַZTWq[ cqܔ{C$KʢQ'p$F*W<$#R~)-+j3`5vrF÷[H9[c#>vjuvNk!`ƙ2Ke"rبHjMSNTyK/3r]yatt:SwRX.S_jܹ?NMblTJ@ xJJl?k 8܏y`1^ ZI1ER#-; ]BCjh7goPl*$c&m`> _\Q?A]aNjT[&@[] >76-yHQncYNoFTC(LJ~@O GfZ+vҴrd\V ٨}#me $2~c(西b * ~οPVn{w'JXk. +!CD˜ \tUr9O)( ֶ:I> /F<^t '%[·]υKb `Ÿ;<脵qU_&.PhOMmP^(.S =uNoZѐ1`&۾TVl2"E%WHn})Fv: uSD[OC 9^f2PFFOٽ 1ę=ΒTk^g~>Fj)(ܾU>Z8boidWw348]Ǯ\l" AQ4 1eq"Uǖޟ$U,MO$)H!sk;Ƭ_v-iz@B[gl@Ns#uqd=IN-,~UvMEv Mq`+:DӦ?+QV ʮ& \` O ':Ǯi.oAg&ajHWG}A/Ͷt uaaa(.~YFބ9'(q)2˹-?.<leGJ"VЗ]eElO=U }34`$^4<`g{o Hm/{N~Vn,wQURToW_@?HQ&Q348}v5|AC^rӹ3xzށɧ]ҁ@O3%r|[r/ĵm쯚7uN a̳IsU<Qxq)<T+:G"k;]GNJrI2q@J'ݜQݟròN'P9 EfaӺngFeh";+J<QR%(2OHoX#JIJۭQC&-7?u|-M#Mo5;XJoE7&w/EW%T?=?/G.'˷v22ڎ*D ꉧ9ȬnܛU9"EͧГ2"r lu.O&L¿b/Jv4b(`Sj$sxdi+)VؑA@w]X[7q{Lfղ m^T,UG|u?Oq$][Ps71$s5+~='_`MmIX8 ESKs-D܉C.t").Cxin$ Y>4P<$P1w'v BY|?@ogKs8}MQE6Ã}%gԣZmċu=e0qxkZw3rݼzyDGZ<=AcNJjáheR8?SU Qn֊>0_nv=@)])yJe=>ߌt͵+D4`E 4:4a|kt:Eebp6ړ$0upiaьؼʪF(LA 3]t>+: 2>_{iU^So9DapVRNb=Ǹm&ib7 S{$쀜Jj#YyD+ɨi=JȢ`c& I51xuv V#r{ 9šwEs4T%B@oکQ |xMBI(H޺cy#:#XhJJv9q-\B)/7#ܧ#H%_]7/IYI{Pߌ(mQer԰Xw# sdS3aQѧBhIǦq3Iw{x=}qaD/)5 M5n9vUFD9P]V=_Fsw'`]~tDlN%{J\Q@=]~s^m$VC#1qZINڦtT$G-܋/۟)a`鄂*wZhX}:QWy9ucɵB$ޱ`!}o+7"= 9@Ut(?=׶=Me<*%)O,~C4 ? F(KNtx{4_:yT6p%3i> stream xڍtT>%4H/+. ҈ Ҡ4 Rt((]~|s}f暹I߈G"H^~I?__tg1zxp@<`OE M/W@@TR@L /! P`/@z(!}=`Nۃzs$$ĸܠ0{0F:AnO0(_%إHwI>>ooo^'/Q C: PE vō`#bp@z=[+ CF=w(n ]_``{{; ;`P6/ !`WOm>n{T [#=y=aH*s;g8D #= ޗu#08;  'օ# @>N|0u r߲wGn@a?|O0 @zxA/ ;# n<`>+[ ~w-hk[r諸"/ n_] W Ԁ; Nv|1A)?W#t""NW}%U/W?sr+j/ nP3k;.YP> i08T Wv]n?.Gywˆnڿ[P# VRPDB>#)[[rą|[ÔǼm.<t-:*M7%z]E;#&*d9I"G,Se)UNkWHO)7FiٴRҺ[#\^s@-V"x- Π1i%TS``)\2xk78g<-^-LG'i.̎>@0WϧŔRwRF<ɿW rvy;A~`bg֕UJɟ* Ry% uY9~DZ.^HCYqJ\Ob;Wډɫv-C5˧c=cj~|ZBNqBP1REt'Pr?N*VP8^e rXS7}hfm";,#AD&V &u\6aY4c~e*^mqRD(I^s j|ֹôwaCUW{7(19&ҩ$^rF0M&vSl?O:Ͽf=?zF<oaݷtrx欶='kmGѡ@O+9peAh#LX!XEF qaMacsg U#>{ dl'S;n~aX۸HSҗNݪIyN;%^gHTbjK5~n[ub@b5G\=hm!au g wI=""*~B;:{qfrH1 YFiD'#N:" ̏WQO iwV}iϤth \y :VeԆCcN*Z8P3id0YT~#S37pbI JŘxe'ݰ-OsL8sdN=*VSaevq[U*y!S$WiYuÄgI$= pʨ̌ѱf9ۀ)'˥Zf4v' ~m&OSA8r3zv HIP,2& Lۀxq2f uʂw#K8EQ s(ѡNf8)GUd++-R= Bz}R"XrND*Zt,@ ՃqICǚ 'Q5_ߋa~8<=Sl%.6#]u ]mwM?42?<p4ǜHXwl^ +̀Uytb0K~K-ktO#qIg1,=L+d~:.YT/.1CR0ï҈Py}ptt^H=QQڍٞ(ez?R8e&pWђ 6>I$[g,tv2*9G2IT¢W/tr@e&&ps/2C֓qr6$L.zCutB9V.#䴟!5ּ`X6>zDMsUS"Ye;8$ ќO{up|*P?/ (r'vehz@t5}JHJ!hA>XՉB#B49fpf[q2k1 #Fd#X{y&a)MJ*TZHbp  qZݣA9tJ<^[z㭎n -/(MZe6#tC=gyA%=.j[[e; )/@va}vيG"u#ew {Ƈz\WJ8leJ'\ JDz="+8Q){N4k'1yuႷ?p`βDXtx~:K8K"y_)Xӡ)0ֺs!F;Z(lhnjI|agWnmvOBd݉&jwe(oTQme%/o |iazj8K$>R kYl =';&,TFl|\\`nf]qdιBsKU _}nnW;I7cə"L!J)Ғ;0 l &{o+T<ɑj{yeAõxeSD)4`jUZ6M]]cߜ46oKJ -tLL'e'7^qC{Mt -|3F y?]^Nys=' {zgEٶC k6&7T;i$5[TWbP 2'0ĜD9Y>OpJ5dwx]VnG.]2E>&̢}d˦gmRIBpnP7xE*V=W.pDT8{ :H+i n4ֶIuL.Ȇ"5{"MjQf]+G UOS{k科`Wf0*6q Hy> \?4NYI bL  u^e3d&GKf_W'zO">Է t.Zf( "_~-JzWQ$xK1H:&Ӥdwk;ua«]Z/[_-˼ >H0; &h~*Af5sT6(Mp"j57-.(!DPpl!t1XR.`{SQ!RtG ʺRZqtEp۷ }҆6BmUէVP>ROqFx鱗\N)xFJ B|wC奾S/+`% =Н܌Pe>Gm24vؚl G^"a񠍑[>oE~G{}ȴqRa` mmq~M%9%YFQ0YTݷnn;:zFrEk{Zfڶ$T -MeyIؔS (Nnq&WkP|v]+\%oٞn#맱4y6hLẪyem}_"[Û x>sY)'Lai ,ؕ#ܶK2 Ɖ z؉?˞Һ~Ͷn߰kmŏ̝bnVj[d/-K9cGS;4n)M|usQ20d8/Uי/ovL DmN\NOXLg6 ' ;Ua"'ޢ2,9ku{`6#Y=N5TwLyfc_ld%ŧc^tׄP [o!׾lfIJ⻀kO×g*3q}u晈s4svD{EDV1"A"@sөGűeQz ۮRx2to HIȂE\?8[?p.y#mM#'jY.xerbX+?O䢋̼p_1K,ڹ1wbwYM4D I:CL2 WǪ(|Ӟqow X Sه%֜/^\ʃ0ǃj:F\?J9C8sS2=QMDp0ԮFk_۞6d3+jx_|J6sQ}^Ig.ڧޭNx*hi/<ґgvn4 aw!l pNpj,k{;h %Pxw@ MA ה+LlCM+KAӠUq4'Wh䡸&FDJzZ&ʟhw QwLJ;:Qd$tAdz  ?}&~hf&y K`OGx@ Okv'/^RfU:,!ìIy2qo0(<2U1y&) .kgnfЗj1[6D]KHHՖREt~=,~fƕ:6=ҝ6a޿c׈9Z]mQJM!W6zJDt2cb롹Z_&:aw-rxIu E σ=p]vn':_<|ìOB% qq[Xr[ȉvo}x S 󵳝,:`Uֽ7;MA]9auLWUvWKhV;9W,a,B2IUftab| ֋/'Fk VkJdh{eTIeVzALyM籗cbKul =TlG6pt} r:޶?҃l8kIɑеLv@q ,'=Hq?lC.O/ :&C^1-vklw*ӥ*ڶK+%R e -\̈%J[^M̽n؂dS ^Sjr:VܴŢ$5:_̟Hgx ֪{Wʇ,؎uځ9^|β|h/2~F|ȱբgD[c081!z8\\Rz"W;cČ S {]Z\ݴM@>7@$]X.{v E$^3s1K|gg 1D.B4C`+O{s5SJo} TJy$ov汶0?WBD1X#FZ"EeF &5=a,Ptxn/Mc#gΤ;rmO~4wrǶʺca[/wo<Pu <2dr[wc5`馂RY'rAM8PZ[RgOsfn7 Ĕӌ|zQO!cS6c=|5ߧKdNk}E,rH S~#-bA0b׶M|wb N0uSs |j)(\v Orp|6z_^&wOCXuwS^vM?0bsN]zQDjYFpOlkBԿCgaKiJrM24K:XcM乒w*v}]$qӡpzzb!M2l6qB1ӽ2\%9!^")ԋsLvO{l! b ~}pj%Cie"w:ׁrjQl(>yN꒭-R#CK`i2#ajTR8Bѻ0k+kbbPllf Jq endstream endobj 55 0 obj << /Length1 1752 /Length2 4980 /Length3 0 /Length 6072 /Filter /FlateDecode >> stream xڍw 4m~֬ !d_g>ʖ}`3kVdyْVlE3瘹y9?E!`@M_`) 0XG#;h͑8wE 6ubHY H_D,NPy iհ8#XO@. @P9E$a}B,{+#yzzJ\%8a1w.#ݑ8$8 \I(=CDGb܉1 m=AA~N3( =c]\aoG /0#" %<`(4̎H; мh  tPxw wH$( 505 w9OC‰ u'7GaGBWF@j$M4lH<  @zAG%L]ߝ#3Q+' A/_wH?߿F4@hF`B!C`1h?Lkd#Ko* %Vde,TwKw ics4~.0 XD#? p ,@k=7GYoK4;A'!\PhH_R#(xqM.b.K5Q^H w>9nX G\>3yq'w[.cGK()# p87 8g22ā n+}'D~=Gst2 HNA7}? 1!79BX/r J ǿ C_7&&bvPʍ#v8D_!2au@?q?Ew{b1g}._Q$ y;+t*YS|SCTٗCYi[hY Fvh6ĨO  RhKyKVi65یTNJ eVQ@#A&R?ȾTm>&Xm+Nj^%MH1wRGaBoҼ#GYhyWi^a7.Q.:}bXߥ%qD|gX4bC*=zv:/49mK3?y cқ62j۰G5Y ȮBp$\Ty#g휽Y+j:ys;j+0IzXNΙvb/_{ YzvՖs" n6[6Ab}d=vdD|?>QqBE+YX^Ɠtu5Lq.7.ȵ/&KX&d!tFehHl.m*JI1Î5ۻ]U P\"&)jbHJ'@_U(ћ@%@{}E]B_oog^ry"Hyd2 lo@1xiBOlZ_v;=M⛒b3?\$[=Še"wwgAE~G|CUQ 0&8603띷a>M擉.9o,8Sf}}#dk-2^S2|Hodhs/}h|*:tW b"y~l6q ;LO;yyƯr\2dUSޠ`z{۔Ą6&}|tPE;#r~;HE1sڇH)JSHi?~.sZ"aI㰞^x;^ؓxW"؍4yXu}qIP0p4f{i^f#pZq㕔/xDs_+؛=wfVc&ؗv pڜ[ԁVUvݛj_z,%wlD<4ht7NRhλWz@=Է}Ǭ’U.7{gt\&EUb>Hhr#ΐvj|_YnF[D 'wjRUޖ]ujl_l kXاs̝2zgo.9f0[̦(r$H1?<6l2^sZhM'i0 )%q[Kl:a<9 jW%\ ? yf5ҳ$ hU|5CCXJP7z#~ѱg0Bog#yZWd%ͬt?9_LMR>emNL(YZٮLcaK >e^[o/ iSxĖv (TXd=7UtD\b-)F8ΖZrZbF4Bq|asraD'(Sm7_\?J򎹵jV cINv ] r\ZR{!(kW/E^bϸ ;T~L9U*SmϮpu;lCmʵXOc>nT4Jg;(>NK@\?OQ|V dE-٣}w:2?odźG옼H zz RK5".Ef*lKقr9oOkd<(I8jD2 xٚ6)w>L4BrP3IpI? ,b\h5"~A|ƸaitlϿA8B@Nҙ4EFȪp Pvveg~{u9oRWzIrL]I?e6ī hRpٜy.V22 7g:~8K/&ig zL9'ӯ/+2b\j8)죳s&~ ssڈ몁Q[ZaK&gY@w?dT-z5*vv|}m7s79W{+!X71XmO)rv4Ҝb= Y3xvh0-uBvtЂG57fcTb'u&Nx*,&Yxg~k3Q͖ήKΨ/T '-WJ2f͈"4ô6z6~EwYCwlXK@2P}MCCBj/nh[rQ_:xVCjbxX'Eܝܙr T+vQXm(8p˥0/IV^\*]m(,Ogqyflb9H2$vNʊnN endstream endobj 57 0 obj << /Length1 1451 /Length2 6312 /Length3 0 /Length 7289 /Filter /FlateDecode >> stream xڍuTl7RJ#AKclC`% )!%H  -݈y;;g~q+!lj8_X@H!,!48(.<` S18#@X ,!#,)#$`vm#"TF8{"a(S# Pt#a  DCN #ўJ%EeN(CC` :@ Aa {; `0„H:PC OD0` pr=api =| #݀0G-w@>A 9Q(/`Ynpr(_`= )[su4\\*|0*t0 .$%)*% FF_j /g3c~P@70txoÿ%"aa ؂!08?1j_2fH\C?aЯN!NJz Ǩx EąB"Iyst'OF =/jpnK 0῅%CoH/t9zYmfEjkv0Wj%QC0DKC{נ%T% !+ĥΘ!~UDbzL_˿0 "GdjV)2/Mi*?P`ERg1Y6AXʡMGgCZ7b?Y ,/ǯ`:ad'm5IRb)Fva1EA 9ItNĻߥ*Q|ܬ^UE(xkhk,~D{/{)&pExN\)Q{%|O_ 8B䪲*bgH.6(l) sY hzwi-.M2¡D-yiP_xGTrPHܬ_kоɛ}Kڇqe{CK|R4tHy 20S~q :iTN*8Hi 1LrdX["jn՟_jicϥ_㔂(m^+"8汍Ƶiߟ.wA "c"$A&olp28+G*?HŝBdd>k qAgk_G2^H*mhiۻaPoV2zÃoˡuU(!}3F `\P~AMgdtl+䊬αyK$nݱ"E_j=P.T:WdΘ>}-i29L|,RФbYԄqLߡZ9ynI\0/hMwoiBMl7ܛpĢNhO+8l$$r:dkލBRA<4Ϲhb z ~J&,qfLkpAFe÷8wl8,h cm샐,+<`^uFDAK{h* ˧c)xf q[?f-??2uv-&MOJ<*=sKtc~6?->ظf[|;ꂧ3hK<Ĩ;Mvd^ye0Ɲ*-jwj#TFta|3[=熓37쟏+PQSs.xtJX|s(zҵVͩϵ~jtO~x Z 19p>{ l۰TiDu5qřz/j5Vd6* 2LEGJȇ6o н`kPڴiU1-W WEFlmJ~dͷn~-48f,}kCr6LX!7]l%{Hq*4Z磼B\loVcՂlX=aF+\Epd`n;pݦq}0j G|EۢoL. (TǔufUʈYu>IY-E0[F}yNIХ;oiKLXE fxHJD(}14Fk*1b$)^O7f=Q ]m5qoIo5r>%Etc?۸OEF =+|79c85D183q֥z |ǿ#I.^:]\\l7AN# r5ugg_^py{QS78NP7q4YsLnYSn Ts8 MhP5~mdž* |t~ӫWMv|LZO.jD\r=S.;w#pFDe(UM ?j-v-04pӡ26[K,O#S*gga< *ƐS0.^ [g9>ߢgǨpƌEɳ$>aAĽHXpB뇍J},m_ im#w|2Z{/so/bgT1;ΞW<:{0>WT~@E6Rw;" |$K^co_AWbr&YyO2 c5" cqȵݳ))3[=ð\l틨ɕbţ.'KQ(K}x-6 \e malSb {;E9F-[[Dki}bˑ3RJӻ))PZ6R[FR&5}Qg--x< )L܁A8+.Ȭ?>f"2Jjvʘ++~vqbSO furC+H]ֽ!8HvM-eHT NニB7W'^Bb  fTw} p@|a"vjL`PlOɼ!ک:X^D=P4L̉ZWgwmGR$*?8^"r65d ڡ>YeiR 9.ggdT |Br+nZ=lM_APIUEte{nFJ^^ﱊ|V~I|fܺ/cl":k+|̼)Ӝ_%`9yXl@gHya(I uգ]On4>y?ԯS]RY(I`n)YC˦

    7)GQj+4B مKhǛ73@;>n"%G*@1$P&EBn^-*i\#vڝ=KsboY[Wrw-pNmƐmg4vc٦w^3M=.]dđ%U,>:8g P-_x:V y1|F[ ' Chi1hJ(!n}a:76Q4F4Iժ .7OŠjm4!ڂ oU.җ$TsoH[jTR8SFB$`5pvۺjpL6+5.2) )GQ&K?kZH1e-ĕE]Y|&w"{؜>/SHx'&Xg|l{?t޹\=]||>g!eጕyxEGn.ٹQDO~YߴICcO+jpNؐEj 7!pݫD-փ;pImm{)"ԁ/֧[hoĥq)_5}Vx&n(ɈYT/$l`L;H]+eAfT֑R<5"bgd8?-rySHCF9e3oyfn-Yċ]V nFևI3ڲ: Dj endstream endobj 59 0 obj << /Length1 1408 /Length2 6021 /Length3 0 /Length 6983 /Filter /FlateDecode >> stream xڍtT6`P* u%%)1`06`CJ@C:$DdH>?=}ιw{}?u (al4N*tt4$DD8/7EbR+A|0!O4=PTKAoIA 0"w"] Py"A@F`)JWw#0W@%%o.\H8 pD8 bH_-eq8W)!!///A V x!qpD0d`7`@!4PၶCအ6@Iu7TvUjD.Wv(-0ݯD !A/7+'@#? ?,=~;o p`p@)Np#؄#?oVza(WHKT1ހ( ,P(Exw\{OG = t p{i] [B p%7H?0$=p]`@w)⏖uvHj`}( BDXU7wäwABw0XO AvpggK؟ K r}4cKbCA !DcpǸSZ3* Q/ݝ07CkF)'0p0a ^eH2̄[_u,>ʙѪPnZ;5*~[a`U]u`M8;7o}Qi"T{Xr9;C0}xq^+WިR]}ImѲzEqYZ2M)^UT]ݳ̭!9"p*LʢdU&WO<7hlhnSt+ޢ<9D;>ؠ|[q("*7g'3jz2wntw ue;tI9>0O0)B@41A[N\͐(g6K;ŵ3>X/$R 0zh8P+x{- # 3]4qe9G Kg)NI Hr*ݘ䀎cdOYIbVϵcv]gLcGrG?Pxxa] *՝ Ij&LDMq=7=WN4whKZ1N,@f5Pv8-w(j|).^xջ}`g/hroRt:0]Q+)ْA9`m-GV g \2.ܒ 6sx[&L@DAuʱ^$Οp[z6?dsi!ZwS;u#d>vVG^DGmfU:)Pzqn-pG/7z׭m-N\F g)ia)DUVX.p&JE! ߴo'qAe= qOD2/j }EacYnKL>o\xiԄU+f6M; mt" zSnb4%G1xzy`͠",wt811;FZaD%U1Z̸Ev<&c@w$-w/3j6ҦXf8mS"=Tq#^+rW/iY rח E|l-5 ^}%3{ᛍ4*q^[{ܘNH{-bƘj3fu$VE}Ge|ΩvZJ4Ry`j+岴߿ JA>ehm)%tł\mN)x!}E@0Mc0񓋴!39 1}:Պ"/"' 6`!wp=x#!STiNjˣdnr ΆQ_h ClW!|URrvTup- |WykxZٚ[/gZo8 $1ˇUMkUY7ZP0+>|:bW:;V{:L{"~8&8E2D#iLK8GG1Nv*V'w| PӰNi8:9[ة ȴ u3ԁR[0:YzoiU4VGN7\F~CSed-|y|f&>15b{C[iI1J&s\C+eN~SP+Q8"g.JFa^q 5٣-;ϗĉwd a߾bbۥĩ1/l9?3'_B֧>U)&$!C)4Q#扶"aO_S5a6e^W5^68y/`dϑq}39aͅTҤ}#ƜGnnLEX$g*og8]335W)\%c}%|p|']ұ>nRX:Cdzun5zkճU, RqzM]df2R\ ©S4ѡ$4)̰RӒ Kdƻ䐙>G_Texػ.Kv]`-r2Fp7Ɛ^n[RWJrk^_nB~[w-w[ * Smŭs&7|"nW!YXNEq鋰:[_"ό^ "oi#ycӧ( ۋRZ$v'ݲ4+6=<ڛ>ɣ7!@md$TxʩMeLsD얔[lvJ cl✭$}]bdwM^4ֱ9RԮԽ <Ż(^/m5ƫ]F́B6 6cU⭤,Wrlõ]Yr<pke^>-6^0 לּ"o! ;j)ڮ4 _D0Z^vWp!IJIXCM7SEӏS`0fٝ$Q\3 v|քVJIu[O7ăUL?zcOz{6;V_&Tֶ)M_W) FoOW7·8IwzWՑA5c%\,|9T_Iے&HkF^Ȕ n^pj,3 <+Z:I$ʰϓOFhN`7$vrDLR tz⧡zF塉qgN G9{9iv䩲J+=lJ<esÚ.IRHb:!(^MMo/է35v:יͯF6΁Ÿp3j@'bvd4?Ylشʾ`ΡqĜHx˫Z=kL,SH*bζ%ZDۋ[J*ytuq믲/-*h41<@oKҶ+{G- JvwAGn~@0T_e**e?x>|Z ܙ*C8.d!iُ_\|nl׃{sLk=E:7=-Js˯)o=bc܊a{?>O?Zlpe{Jg"9I >9 L,H9>:֋jq*0ƼHF`c>O5O7>n{'[z&ʤ";8>+ sMCoMd-!0coV'!<""9%xS@P˂[H^TY-rmvUH4l?迎vlZf 0M'z4+^fh31(g#!^4S#?A[cմ/^";)ҲJ8NoN\Ĥ8ѭgT}Q jmP$+9 }Ր١5yzOwskM-7VV–=)-{}5Swơq !IUE\sϰ.;šB ;¤Mqƚ'kѝ<G5tkoeHx W6`bf_DgrHȋd[Jr&6ndO HR X%q@o匨Z߼sS%eN+sϓ:2 Md+b"R20 율PC]_]F͢aג'g; _l̗LgLm1,FH݃'[ߘ+4C0_cF`bbe\Ȃ5M_?'wd:ayE,͎1!g/WuƼZ}&^oƵS=S1V8n68jVH$1.M*3BIqn8rsm};ĒB<yƖL%tq9ۀCL*u@+)([[-5^jVC3" iӸQıT^SzHxveW7ݲQN< 7jhDUo_:p q ̈A*Ji𐵙1"6$` G{_}r}H܏K H/}4`]:8.;0P \K@|TmtGs;"w;`CD% EOՍտ/1~7ǰǟqyk 4JCAF@;[o&_}̲{g^} SWNhC k X4I„WrR>?*ɥL>W,R-޸r ޹}eM^xwޜ!N&Ż]R#/ reUu`n*):Jh'|GQ_Aވ`Ce)ɽg#  A;#'6bnô+npL""_ ;3_2'| zw8iojAtEk̛3ಃ;>K \{-1=6!3,&ܛ$XLIZXA QvqWmQ~1nxB 1;޶_L}(tYË*yͳi9:J[G K7swVDlASκs,e9VVê:u9R_L3\/eŧ^b!Fw-zIe]HֳNj@ ?ŻZ;gJ~m. s =if|2μ! c57`[lm\X:C4§cmʗw\ 2+6L3uOοppY g[Yeg4KB09K8ܦɓɅˍgz 23UKQݖ&$zUG57EFE& endstream endobj 61 0 obj << /Length1 2106 /Length2 17102 /Length3 0 /Length 18367 /Filter /FlateDecode >> stream xڌTm55l۶mdۜlds2'dc}k}ku'{GJL+hbkqec*12`IIU,aIՀ6\2v:}D >dmmRVFf##;?\C ,@K*lk`afqƔFNNv?@ cC9DcC+BP;9qӻZ;:Q\-J@G a5/fts ǿʶN@hlct|Pm2ˀwmt ,lt6463q1ZXb2tNnN4C? m? ] - >  &0 7=Gc ;'G:G ?(ʢ6&¶@'G?pݝZغx L-lLL alGjca C `e```d@7cs?«T2!`igk0 0~|z:N@o+22L,F@3 ;X>fOebkcWuBBnOZ-+!cx0-)U0;E1pxXP2=AcF_moBbVV) -6egXkke&W+d6fV-DO>[Yl-l ?3P?z O{0tp0thbx2~l :}>yLm`(+^_ @/Ћ8Ez3^}q|X*X*AQ8??#3 E:c[G?*Mo//7~(MY?> ~Ǵ6JǿBGjvak :#e[עW W>^;~82Qv4hm bd8!>J/Q*->cgNdK t./s}xqݛIJI*&3`N0iimGV`*-AE?NifviTA<\Z}W{/5KVn)\{g (nWCkؤ^giT#uKH1 h񠩐/n~"LHQzF1yjm2E?{Tar"E!:LX,-ZSD@FDwȔQca_2Ÿ"PW֌@$VӮTl ;2qk5ws;`Aįѝ^oA~\3WF*QsU r u$*͊K a0g6v!D?8o\h ͹/VȺlrF)X̢!yc끍sUt"e2۬KC$E,{#:_9 ~UDz(FN6 pޙnUT٪=^T Do}RqO+ߙ1">Sr!nATW}ڙ)~q)!%/Z> Z])Ǫ@vT)@+4sXsY [GY!cqvbplfӪJenGF~Kf޲*ذ[1q:oh~\\1X ڨ:nl2fO>AυNpSaaǻuzYADfKkmvvfI==uG[QXUfVE"l9,Oz}4dQdĨTpn۫,M3l>{BCUr-d{`F(w //t銐g$x#K\2ٲbs o⑆;Q(u I]';h|[l _Q_ $ga[X,:ec r xJ0º]i纵nrbt*ςf)P^b2rM68bc㊌$J#٭f)tuB*Z=v֚,xuqG/oՌ2`Ùڙ25H )m{F0Cca,duF1s)7븨F75ƕ/3YD>)%v.WYx!qiwKtBHlZ4MK9@-B"kAsr%X=Q@-E]ronU=W!lPu(KD B)w)iA5V;7 ESL+U؞KRI4qy JnSp갢%Xt:v(@4>SOW0+r>9JF{D9(TbȺ #`FupĨ,T/w&!ʤ*ڤcjN2^5oQ4uKEK O7bo?{%"@&%7H vߓ3{K)Ⱥ^r'm밎4V T/5|6mmd)`rǦa<7V/,3l} dj tW U@[=_]e6YnSI|Q;&Jk-u@5s_&&0Sj:=g4 6sTH5!ѹ ܂hqD72Dm:9^H_/Q=r2 v|qگjX@ȁ5_h iL ')஬sVhe+pTCBx.kw膡vX郂Dp.1K8*&  Ö mɴ3cVr;>&vvFGzMf7enh49&[H8uPžݫ)-]FݩF ( ) Zu}]g-{< % ǷkarA2u\EVHq'ªyeMK% d$S5>h.'A9Z~ut=U3Fl1QgBl5XCnE|ߟ=!MYEWQPXz\N U|`lC[U.JT!oF扵DZYuwfLN`-FL{0 +S(0G&+eWF(.6@GXA_^KUZ?kXToJ!QU3cɚI ss{?sIDkZN3x%uq!?۾V 1/פ Qvxs7d*hOss~T6 ,kc!3.?yDDkh>Ҏ#ZZ2>]BMMޔeJ7Yr 1Jz0tfW#ày?GD@Y,#' XΎZ]9a {Ojlc )ٷo['cC;De_Meg4U__[4IN JtGKCLD?6EpO^mK}]#%Y*G\%6gM R|k?ĤI7lEM59Umti.!^5XjeWmF.iYGwSo31R&wPD wƎ|U$gXSoc~j^w_YO8=Ui@r)-$rV)Gxbj]oӐ|·\a[Z:1g.K= ;zcBQ~r*-M̼'֨R?,v%bM_-[N2n_]'wDǗ_05oW Z55Ո;g@=4.3?#:GmFo_n|c 󶃤7-74'{*8}4Xқmf,t:i+`.Xl*¹үnU,WLԊ >R/@XT6‘6)NwhLNx/*e$f# M`n8C$);"ʔK7z{ylNźkFQwVjqM Lf2v_5Z.{p@ >U-6[aM>l`x\<]3d05.] qjoq%cu`D |{ q\ *m&1:+~2눤Q3;Zgsi>AC)iAr_#m.c?t^Qţ-*nSvteD-tx\MF:7Τh]{yDs8#C-g k\ʥF !x*Im=666%C1A{mGW S*1f̙\2+gC`wШlf*Gv!W)Hh ;zrUE0YZt$0Mv2F/ֺWֽA8I;xomvH1{uf$]' ]WF5_r9Y3Grѡu0:1_.,^yLSgR,%DqclUڬxlO1h_=~sUxU WqHͷɏ9 bCFd IX札5i|Lzԃb뤂ÞsaM5C`gH!j*Ӷ | Ot9N:O% WosZKNkìi~LWd*qפ,GidMUbu2loji;`xH{i_ Wn:\{~+Dԕ:R|EDqU g/JuA~1]'5G2Ax鉤¯G0$#\>~7,F?UN#w&ͮM.הb2v'ש(G-Oyб63

    Z9ؾYXM%쾄0q"`zྟ )A 2Fn|lҨ$deiw g,O0ju*HZӯ;L,SQ=/IgWr3ߠ>c msnDhjNMp'MRwq0}a.ѹ0C0s u5RgWw_}TՉ xx\>x`T˟k *c0PJ6\PVth+݊pIz7p FU'cW |  󘴡bqUvnH->.uu'鸜Y>b>@~v!G3PEE7wRʷcxeVkݓ8T5e5 Z@|:!ߟMdFJHFO.seő z1z;PA]~$+R~ҐQ^T-X=HLNj>tXa@{:V2\;$hFn]YT]?Յ*#@\@1HPtbwڄ.tFـ:CYc^{"`q㇗i** =׆pTڈ+|7cwB[G,>0D,T*ޮg'Pxֈ7A:p uV^GS/6烤Dt~ QCV"јBoưF^d>aܓd엂r%'BjYNЌbhU^gKո]0-"|ًpt#g2N^BN ypF`qAki嚞A.­ȩaovumhiK]GK:e~$.g%n aMEI`*a= pILu\ޞObnUYH-su3^x7vz,P'];YGpQߡ3#}]z`{%rgozf&+F ] C z1sWnI[6m ڶKz=} :r3 _I;\2x{6-?d1X&/}8)gU;1qY(EJ07:H=Үa5HŸa?_]n aVK+ ޿NcInֵlcj v@zyF /\ ,BA]ހ\_@qQ T)M.Ȣݹ0kZTgn(C38LasE&$ nͬ:5vyAvB. {(z1 2Lcj~<[$Ђ-:TջǁSKvk{ߖZ4tYߛk6VI`r!cnҮy/Y3@V߮Vd'[?N~,ѮGy,ylL` KV}Y:t&X#3e7\42m.;T7V:'9vq/HΑ˟) FD*G4 cOWGk[<?F(SqQ`g?Y?n-\IY~>.zs5C^ |H5lF4UÏm~kL9:C3jp"E.*%9|_v /Z{z @DMd N W@K'SZտXSO3b08.ijfZJ"-b{vbˮղiNLS,$!}B/}^N*VF_f;GƱè]y\)q%L-nF(fOo ?%~Ա?ҀRJՁERr9:ߺg@}ǒn;Dp+?E)#ˮ Oc$(lR{H3[}ńĨ;Cg)B}] S.r=wǾ$U@m}ǭ7voю8cM6'~Ag%Up3⩬EY`1Ɏ0F,}e.Ü!],OХ~ocv&A=f;آg,9VqVȚh dt-0Bճp"^ sC\5f TN`Ɣ+y>?Ucq]WK:RNnwHf"$*mC$3Arj]>P*dD>0րI D}|H])/Dotjl͐EUo&s'x쳅w xA#ptsEg1ۮMáM.nwɼ6L&J+8΢?]\a "aGEr-}A SK$K 2w4P[FB]=BDYt8 w/~WӑLɞDOq5l ΢hmHy}9.\gd,Xfy[cB}ߩLgR\/M/3p=RS@Xw}+!PH.#/ !aWȯn[|} E1 \^ˋ(V1wC+6bfP~7*{C=9#||p_KXUΰe q鹏K lq-d,lAѷ;2 neDSU!H;flk$O*#35|0l2V^/Lh%[Ć]rR CM-+} g$ DqrB 3 5/c`}SB98gn>)to؅ _FjWcjC,8H2hXe,Ps4r n'%L_#];=E7ԡGmmO0 OR~:#$(c%MT}U+C \ eF Q„yJ_8'9p *{kJ n/\r6.qVdN%r%(7'2&/ fF[ᘶWLqt#ݏ/Xeu%ȤL`yNf;)qh ϑɶ\Q;B卸 j(8mi/{<_+R+No0*hb;8nGʛpZ[I]ۉd),VAPu.CV) >IQ hYݩz*>jSV1A윇Ik<<ɲi}Ѳ5u41RD0x(leȮA 2q- s%ˆ}9fLܙ^΅ >d$HFNJ㤗jr5vVJ䢈yeӽXEQQemHc.MP6?U".Utlasm)dNFWv1P43y&`Luo\s#SNL̴=_ g 8L"ek0 Rub *mW)Dp]vp#&خV`[,q#k@=8 (bkEyD,HXod\>S-QDԪwI Y 1477jocB ԭJ]2oQǑ+V `Yx(ʄC͈iM|9? X7MG~4іvQ X9160@<_(d>M NXĽWAMO·:*p/:$ڤ5y⑨IN#=Eo|I9[>S=?*hvqZr9<*T]{v̧R[=m#o o:L{/5iĆ! Q1:RV"}&<2m=]}1'ՅfP8%`} Wtx4YVv; YLnbt !ü >t(BJ(L=1F=ֿr83gϚ W&\JJb2i=7츒:V[%n'q1aȤrA0 < 'NG4O?ĸPs.kW-X ҇м^/H/ohrL:`{.:BlJ=,>.bf,R8tN"_b/>+H*v Ҩ({5φZi]w`51}et͊2 )k8 N31M۩k3vjI?9+8AaS46.\W)~UM2*-h\ҫ*УUbQ11\BAػyٮE u#g(VhɕH0GvD̚ӡqRV\VMPJo~@3*–Am]ᬙYVَTp0blk[Tjl,Ep,6 ԠHP=㷉A #ÊY4Š'S3).o]!xafqRyW㍫ޕE:/>I|(.2eM0@~9 (l`#mOVbM ]Ҽ.o =FCLt˫o Ke*ǜLB>6r}ԏ`C_ڦa6ٕ%uo3tfu4Y(jL<{wݸE*ؤhH bĨ Lw-Z))ek(%oC9ޔJHi0z{& +)ilxkO4;O2}CpW%UHH)A5anA%1nЗ$ݖ+ KP ޗ k/:ݙc]J+m#YO9xlHl4KuHbo~olqL(U4KaLh1~Ull\YĈgy#`?;|^^񓣑媂X#@Ό3|aY%R)-cM>v>dqL S޻4mLs=L'ĝ]@uM BΨ4 䤏xj QH-TE&ݬ{*2f,ܔ|B0VWH̶,Ԃ X +O=$ %iHZ͟< ^#Nru2,.>P_(? + qREj ^REwKl='M,_| cC.5*U􄯊H:X.TIZm_lV]˪u'[%0UOGX[7J bDw}v%j)j z.ۏy#ڱY{Bt.AG9j^eB*P~8fLMIIl1v!teK tp\@2mFP(B01YU7ɝdZHՋb)eY+ f&_8lOw*iW)#_PZE'wBB%'WF>qP7sKw̞bmɯR܁tЂ=[GLv8&8|) СcOUЧ '[D1z̴=ag[ǠFXt.dI7G⻸:뺺}aG1K€o"bփu d{O@ľO@in51{ɂ6oq9-B{[ӾV_~cFV߽‚]r9j h] +䓔8)`/ .'p V;c&.@ٻGgΏ2KnyDZlqMblʒ M}zO,oE} {&+#O[?º| 2ЭDVYe IHD?ΕHcn1;:Lug :l._W}˶3LPrmFC/g6Ι{QD'!ԏ U6vfOy H!yt){"$D2\٨6;{=|'@TDfLBbv|AG#W%=ۋ nێf+;r`QBJџlZl#pC`uT'sC9[eU*1pxwZے}!J H n (YĥHP??v?CD \p趧Zc@1\(*h?lmaBm>yherc**Ik(ɯզ5}uTF~-!CѼV%Fzx=urO䌖\s&ßpGMs #!s}(]^]VTK/G$83~FUgdVWS1[yLW[T-L3>Ey4@d>z*Gyhi ӄHq P]0aDÚmQWIHX']V1IQ>ڕ3QC2ohK~hӴȌVfv:ϥE 9ڱBr'Sh5mkkz1hjrJa81/]&S |i\8􏲧CىP߶AdџynlXdq␘S#E#tUghoa} ϙhWliA4;/l0bRx꿔 )3ȫҭGVPRf \~Pep:D/>pFG&}K/%]nqYg{7me- ei#m _][`NN,ܭKc$$f};l/f&"2ʸRLfDڥ͐ɞIAqlR2U/ U5otB)ե^[R)1c-  d-6x Z`Dw 93e&b?.N6Ob/3c:΀EI4VQ:L:7vKL鍻FCkخk0Y"4Y{U`c []0PeqV]j,$n>ai).\+A'Ƈho +'"S kt49)[u1@:E9!ܷA/j !a޹ )0 endstream endobj 63 0 obj << /Length1 2523 /Length2 18530 /Length3 0 /Length 19976 /Filter /FlateDecode >> stream xڌT gwm۶dɮi]mk o?3s߷uy69* Pޕ *`bbe`bb#'Wr+#:X9a 4v};dl̬ffN&&  ybVfy=\=LܜtVycWK{DSc[(,]]y=<<\-V h`jV.U]=w) xP(:1ǀoo /"+MM-V@+/Cc[wcwc+[cw37H+ <Sg+GW+ۿJdfvv@{Wr݋;x ̭*͑Q (-ɻ `gbbf@OSKƿռ+W0/ge|b:|T/cfYLVp@<L `eVѡDD<>lzvf7 ,?-U277߄Jxpw+jFPpx_e 130]_,op[MGmlge&_m_SM?,4rZiWo\$ᐅ.U ,#7ɞ!r'ADE˝|#IZ죳8^-4Q Oix75նEc5dqAƒde䵰6)Sg x=D b TqeJA=6oOaINmmoDĽR\kV^Ot^31[ #(~BQL;͏c3nx)m) X (_˩ [Ú 4^yR84/[o`XouKḱ~C<_7ʍ͘,}YfiRE}a{ ھ3,-UZW_vJԞO,>F ȑ(бV/zm ЕHu3؞3ZxV_Fezґ8z?S`eQF)Sssl/IsBsSeMi1^~x=4[9NŘAJ(1z.~`*+*68Sҳ`m\OpbhcԱ뱭7q>e/As߄iɞ.!6T{̏GB;]\+ua*12#_ cqo1?]|SUvN1ZDJYVυ2*&I3^HMfA# _ңrCKr4*FZ?g2WdjbQͼT  N̜[JSD8O4׈˱_}3#ԋL'7 FJm9f,38 uaY7rto2vlە|ɩ5!].VdSVb|1$(OJ_Q *oMI紖Dž̒`\BY ^ * '`(gƒұrf3}B/^0zUrU'-k|Sln E ۥg6;0/9FRpdv%z*2Ĭ.<@႓qHaqFFөKGވ٫,p!oH]a6N)/N4i,mu -] ._.{QI{9#նI0"mf3?$U k+|IܭA#+ ~7ƺAm/6爢5k.׻n [!{|1@3W`CxѼnH[V,IJ;p^˫ EIv4n/i\Y7"9(?lO4e…)(ଐz*hӷQ545tzimvx/ -2| ({D`?Okd7t^?r*a$t>, B9Q"OTtv{ |m/x6[ yp53((R2 /J ?qH'm*U!O(ò' ֩Y>}Xun3}0N(1xJB;NM>v}EFtc萫Q|Sf\}@5{0qRL<5n YQ{AqǸmc'Ԃ(J1CeN?Y& hA4&qAW ԕVw@"QCl.=<+.W4-!_`bJoy@2 엻0 lH={&^]V f>fIt3BWK_;DW[nQ} T~Ww^QV%M0ˉVLՃ6]t_]~#pfœ`| ACMԑ#1.L1?f.vaΑ]m/6噳d8_ݵ'I e3*PRKKQ82 JE߄"0^0rzx)gwqQ"Fw%8XnWS մtNzze2*yM,߆P Zf{!T!fqisD%?>9 򭷕ÂE! {'HwuT钙,<"Y7o%[*2s{ @{'l/d 77eX\-Z_|JpE^,1@Qj EDF,qS@gu m;s"o PnhLcTF?cԍM PTq`? KO{P%eh:Uc|1D=bd>ǜb|7[ f٨-Zp眆 #/@`+>k> .`8ڑ-HRk}Y+ THUE6RÌh];z 7)c*.I;&46!Q29R/ V`U){G?:3=c,aVA8\$M4HIu_ūRuFiȄj>ڽqU+PK<+#כ+Ƿؚ @ ,n7}0l},Ġ8,$}P6l$0L$__xHߔ( p:5&xz_=>Qobah:ڮUXMpy8r9ns;?mña e^%멒gYm6PE^kulڗߠ-pmőx$7Y w1[iвňr#(ȑo!4aV!G6TVfbb $lMnwݥF6ЮAN<X |0 M5-ShMTmxDIR6E.pZ,=;|zbEO-E0hJLPS$NmSȑP4Zo+߂5vғnW>42KKyFh#OT$9@U69ss{MUf}E[[UhHH6Y6,™GTQ#S,ד)=MDjv ffehU{ǹtWUXYhNIvA$8`ot((Y`] D3Sn?a BӲy bn@fM&5&%SD"qq o٭3u}G57* ѵ;r?"1ޞyl= T P{]PtQz@4N(ᮔue)De,~u?ySE;-D?ߝmO\Q츌i)<6~ݾmN\,Hԙu2 Hxf8aR3o+nnuf9`F62(pr'XTS*ĨTQE!+Yy[oh#E?ћL{(z38p \`#G6Ϝ8QX@Zb..-'ť=ȷ+بaghd_cE4&dWgc\^c u[___Xv9Se3"A(5"Zt"80">/$Yk|o첟HРYڙ(|S(Cx+;/;f> 1Fk7:0c^150x_ǘ-Oet}o | M6] *3TԑP T],+ʿ:A5km@+SО~1G`2b)XH 0m{yk 5<$8܈+{ BcSi"]ǚcZ VL _=G{"H&|V -ID% jC] }Nۚ,BBif1hTv4,t9vD U[|L&ۨ%(\fо<w5Xԗ ݉ Mc jyިPe~3 -}z&Ӗ1 e1 ̳) ̨t^)v:6#m& T@LiM-eU}AkxM m=Z/ AҫT4 ѿ|>D_ !r^W}9 왏8W!Utᘝ9Gi0߇fH'a G'" ?2=Ĺ!Q7e_:V7hEg8Y1`piXP}Ϫ2"F9fRjr\ =bMgE."Zd`:03g\ςEJdjxX/ 9 w*zng _ܲЅK*GruX{u P92ttW as8I ܐ i,<ڂVܝX^A-rhͷyky" 60^1[|-`Eo,(N Wbb" 0 { K2Av=ej% s'+0re ZI3K!ڼ_w҉ևBC 98(6(59KěYM+iBt4wZy茓KX x(5Kɔj~H/W'ɟrAHFOpF;>8I։8FH1Zy nG Zklfl2 `T1XF5a! kRJvÈ>Ho|;дjߟ~J,Do7qjfw!r!3.>'ft4Y+Ch[&jQxU_0Yz,~ʯʎ}g كGP 1IRjib0V D,lYo >|W#̾khHmBdȲ^=\@,P30×Έ &y#H>|ehd1-vv,a\ 졮DvGTQ:WHy9ϲ uDqL1V$ŝ3PTz[N^QtxzYkqtuׅ*;Fx&9=ɀQ;SkVZ+Г "S-^lK ajt"N8 !F/%]c,=,"aиɥ_6^8^ڜ9G,A2•Ş?|1-yeχ$ɔEp-BBq3\h]5)ᡃ,SkAXiBK}h[`B퇍RT 3@ȫM?tY>: O .47k31U#1A1LIqqMZ+\]W*T 8B^r7ZЙ4wg>-hb* w s%HP0@ Yc̐gvpH%X4>"IcKn `xoT+6˳3sB5:Z<ƾdq߆igK A,8-|⑏ ßVk]|}OsvOb?X_v3dC4 >Ҁx{$cD -m(oүM,|FKvKUvC7P1%J_QJ5R -@b!|,MuI18 ɖÙJ91tIެ1naסNN~m4{z2gwP 43y?KVxsAnAժdQ]:r}1gǕWpE"Th6sïl؝5Xs׬>vAϯC7W("_2H čvo2{CwV*pЩ] ?负X4U 2+tcBΪ|~UzCW(*g/H:6E4-|9Z-SW4*%<0aC2*wq0Ŋ-G Z+:#`C|ܨӈ'xKd }hTq!-o.gꏗr\7И^aÂiDK!5t!= #;o|̓ nEçllŬcwfj~ CkQ=7>%7ŔHsPŅ}<_-ɧchl`"{ ~]Ɏn yty1Gj3JuE 7m/ , w6-P[={A v3'W \䗳w3[`)[vXF# QݔvAo6Je_|i$Lx=^t+uz0mq[>B!G?8?b~ 'C`˺pLvZp}*j[Ź&b˦^y*u" VD4U29웿ϳC\{r$~ϯCc[=_.ݱ>#5@#v {\UH=ᨚm@6Y'؉vvc owMAP#G4*I[D5 b-ȩB鶝A(:;# 5cF\ZV]AR@b* =#4z5}[;T1(>*<E}pX6^rpxbAty ]z>X>w1VS1K'hKGc%ܛm8V8 %>xe Jn[ĎdpB]b,ߝv4ha."6+ɒhƥ6ՙ~1X:N^"рPr)YÎۉQ:U:-`Wq= Ik]W5\tL~f\4Y"^Ʋk+>#` p, (.y6-Jp@בb%q)]Bʢq0c\* -m}9Șx|OGL@UgJ 4`R0*]-["qs 춁̧)-z'PocU:6YŻǕgԫN> E=VuY=!dϪ_dc::6_mʹkLUϬ[ՃhIIHMR. [P(ǵ=*?l_q`$ --pO A%90D왤rdB:.lN]d|N32paX7xJQ@oLDd^0 ]KdKjU;?' X{'zֲ%,G,,[z,8L{76N )S^8X国 DhՌHpVCs;)"&_XVY+l6]bKzyX6řʏ#BŶT\\&"OS~evР!c&!6ҟv?'5 -Z8ޣ;uFAK7>?XiR)xbqM . q$a\ݠG^RRa:H(CU3Y%$taZH;b.?PFfD]> ZxZ&J3Df5󒉪z>/2ol%Q"4 T=e|ys;HHm.&YgF2g,7|'ϕ=z& E1bȯHr A';[ R EE'4`O2P"Yxm) 4ch*3mKyUeJ?ɲhÍcMzܣA^c|$Y׼YbK>f5Q+-з@VYڠ._{pY(7n,0X;__͡O;75ҍ%'M?]յT5.bnL>9.i+aziTk6݁)]{MTeL{V2i'b%<#(իԐ(8Ě+Go$ڝ8Tߙ7BKxM2> PԸͻd۪Cy=_IK;3UMse /Qxi;zչ 2o;@)bB> jq+e3?L& co3 '^)]RH4$]dZR//Q?ә\zE][ mקKwad+E5>a,×oa:- o" SsE ѕSjxm7%QoqL$4=Gbj_='BhBWv5LV4[|R9̎IJoK׸7b[fy③4*!nE@8_:zM&}ρs (|KEzcBXFؽIxJ≆g{a51 0] kvdŵ4ygzC("aHY_5 Ogk+*81-jN1NukI΋q[| (UI+ϝc[?GCUXǶ=2Zl&U  1حDG"àh! "vYy{p/Spe \(d&)QVj7|ٟWCXvVWH;] ςژfL +#)F0cNHƋYɏ?O30y0f.WsQʞ]_K 8`>`G}n]L"6/u1c1`P[s8a+C%|M,bVUԥ\E3kEe HB)WAs6U ر:BW-N˥]-Tt}aUq x_bJQ˟w"COs~xԛ AcP?.@5i%(لyԩPNF5 8)[ɚ4uPh7:f 'd-#V2-}0_i14A4˒(˳*]]=i 6N0N2KdIRePs>c~nաE0$VސgL ׷Y8<ŬRW)|8(9lNHMB 늘= OgAnkR$.  2a-xG8P< 9ur*2_+w)Av\& iwUoY#AwhP[)/ȕ ඔq2WjH*Wm9IN)* }vdQ۪+8@^Yk lq6/3ĥ(N8ebdRu"PE21ik`+KsQ!\ׁB)`+q1h^#7g{+ Mg =>`jK}tcqcJdt0S{rfY*\}N]W"T]%Wdu l=wϫݓbG @HEyx㿾%TzbBAl|V-)Z$# oN&Z| "Ӡ Ofh\`n@n{4ᔅTZ|bIoҒx-XD1:z{#= (ly8RMI41󩡮s‘QݻM`V ZkFM[•U/v'Y:Nq+|#Mkޘ"M̩~ר^bCt֦B cpiIrREnU*,>a\g}h׍nd%xuVЫA-^;{G2t8DQ'Q4/7sv+5kDAzG p}J%>F#Y#|y$|B7$+!89X'@ކVFF9==n*]QL(uelNsWj ?2x³KHJ؋c 2?|]n]+55g]LwD΋~3<.;:‚N\]2B&viD:ѧuPj8qzҚf?p@uvG?}.%k 3%lCG3V]9M ċ7;ה<[N3 I-)FsY<4]}Eyab_G8 i9\ӾB4+ȣJeqY^iK_C0T.$-mND׺ik>^xy3Tŋp?9ևvRe0=E\JfW\lVpSqx_V"'ڛG qUBNy϶5GМ5l)8[ f,9$D˙#0$L.9[Bc#Ը /4]]#)ȩvl_:OR PA.9 T [ʸ,U|q[evˇ;s䊙F:U8 -K}ip|u"גErD'dqwik ԇ2r6e%ˬC@M^5 C\͒*?&gK -ŕZ{{Aɽ9eltQM/]Y}"7i\Z܈ 6.<Q3L?D~]NpuxڋvrqkI%! QDdίFGƐ2E3|֙O.|./,$s6U |T81^f^Z9GVY<$9R#U՟V\+*54pêvEWOKejD?I@lQSP!M.< 8Bj7m;MX nbrg`;cuM]q Sp6 Oz!tTc@/IvVkJ&s \%qu;xU%i(vDM3ZLV#7>dU'eش ,|wR 5]TsM':ɧHk6~̑RS163OmJL @䥸 f)@z?7I#'TtG4JR TL6#@9qŇC`~|JGQr+U!*snh 7Dj_յzyd~ACXbkW( Ɗ{-uMM[)(A^SLIga@Ebzy8g!HpWI7S7B_#\efcďD@K۵ ɔx=* @ /tyn 5a쫐3r d!}CY\h+EA>3ͭf~{x 9+1`o L?]dxrr ğp>A.p&M*g8 Z)Bo:5>/Y^2=?, J"B邿hJ%?D-EUuM2N .j[40 YGvNFx*dރoB Pkq5Y)8S]5]hL.Ϣ)HEB*y1v!1 oa, OQ{_ێr?ypߖLeFVCOMj0QxFCv8qҍssI[A/K'zyE9NZjmϐ8-GA&F\՜Z*@ΰ%ݽ$Vrc&57BL5 X(cwHSS\rۆiҨ ,%UPkͼL"`CJq-12O*{^JХ[Aih@{k2tha~SM 4 HFmmDn=5+v,lx ^7Ws$zQօJ="HggAY]vt9Ø =6`*^  Ζxl(kL ؿ?IF#UC ~%Cp_Ws$Yd7WQ aOf]ǀIJsFt J`+wX`9TczcwdR5D݉9wPڽZS2 sI_,WS9.qWHޫ*6ʱ.Dg&MV0mУϻ6"&֡9]jM$-*HLYY? bYK {\5 W=LTiiѰga%xSN6Poz&4`S( qoy Fm 7m8j;K 2Z_#SȴFJ~LW&d%lAPaI*I5E=C(#?3(sцΤ;ϗG"LcqvLT qc8I`F_](>_/-bm>d4\%봜+(exʖ}b(6>luDhjفJbAs={4爸ƱI_m0ׁf`= /דEUu9=󈺮=Z(HKK%t"7`Vɠ1{rB)iAb_n]gP nM UpY$Ig1LX *XUW3,Bs[yVg9+OJ]?~q,wZY`fsì 'ʌO֕E="R]Pf>BVcq".c(1̏%[Y$vlle$ p_Bax)/䧻%T>(Y H;GߦKu[ }hۊ/!oPNϮiⳣ?uh2^VasI+vꒆ(Cn$9['{+66'|? qҢOV#¨+=eCR_>=4Q4CK?~$G<pJ+&~pxQڭ~<|!%#9X AZ0J2>;0ӈvi_JJٌw1b-`ϞG4oezTH-6qɱ>%݆Vevy{cFj]$SL6b^Zx),+"̘ 0m:cCJ2 FR|6+?*ML.%W;Oxhӈ.J%Vd}XlB7)y+BjHVcH|% KjP1<#3DZێ_JtЗmDߠ*$ $`HI> stream xڍv4[۶N.DAD7!z`03z{Ht{oQwAtRD?9=gy&zu-N +Tp T4 /ăĤ suie҅:H9C!w6i] Ptsp q @W Y qYTHI uk'Œ  pNH0Kq:ZBZHK_%Xٺ: \ FshB]P+/U3.\&- `P] kRP9B+so\)gB0d%Ax6k& ~B\wwbq{rGOz.0GW./_evYa%áW_듆9C- #?5 ae#Psr*Hrgfu@ 0?zZrvr21vD:H@}aл  puvzo Y,60P?;<F;q@| p;Քt`$ |>0U/؟k]PapwpS,N +TwRXV1dyUߔ uspf8π;%M n6cUV07{\!w!q6\daP+u;Pu ]w7owYvA-eH_sqvxP+oe\] /D 7(:@ߐ"@@~o[9;oݑ DPO% R8Į*BʃssDdiS/{ι5kyzв]DeX鮽4`7h2l4F;Du=jNm/>N>荨Lo sH<>yV- lj|)wU4c?Ŕm1˕dߓpd$kN1w;7pmǔiЏIƟxK~{H1]>k'Z1d;"=f@݈R'JOhX_,-R58_B <;Eď\hD'>gn;0!PRcԋId,BEqnZuD:w Jl-OyK"F%I< gK3%I0)LFwE'ހmIb2lh{|o>ygiSyU;!2V{Q9.3pHF9L_k4%é <dW ~y$as3/^1=KzW.jP1zCux"Gﲑf/ݞ?ߣJI)4gNMC^XJ7@U> }xf5. ѭ}aQ%<8(ޡ6Ie|-XslgtD.a|nz]K?}Flٱ8Ư? m-ymSw8<'?'kE4̷)ukhe>WCyGQ0w |yJe+=Qwz[/<ܪʼns*db+/@mhLBnySMyo>q;Hs-M`tҠtvJ1^|gཤ 3,)77ji:R2\ z 掠>ՒJVF JjR:26/bl)-HG-OG wN{2+iF )jH{ FWMOma[?k:ۡtFrh%ڔH5*.1,u`{7~C1[Ff*,Ly<ǑxE~ ,q6rR,/&/kB8埭P SF 6K+.Z|P{ҼǠw]djVb k* )Bxqqj?uw)TpO\_$`g``&=CיfK2R筜 sWPth^=6dAܳvP: b(\*EV!wşjb> iqhƓLFMy>ץ2GyI,2*PbqD>m"]wqOc+eV)^e:OeȰ'ڈ8԰h-y$'8hMy]CYi(2`uZ6)%q {*K2C"P Mp_B`Wl܂' )/脫 |H:D#~;a;=0(gi6K/1k5X<[KwE|N *0,/6+2Jwyrh'6z`}XXb9#a)XE,y$ uaKŇ֣ GC`f IɜS#Tc4$imy7bC.W%{D k^ />τ SDѧf'3mk<5ݶ ߄~ӯ(3GbQU(AͪJ8YP%?/ FfƾqcprUeGO:ea¤|)>EY)c0*$ቖeuXG85p5[_Ii5tT6|T'K"HNMΪJ4*wM(I._5[ ǦTͣ&1{!bSShȉUڵ'>%m;evZp-{>bf@'HT4hGK&c9Hd.3&`C;!<ۄ@SwPvB>*2=yyo>MVǿZ9O9/֗Wdб"?ڬ*{֫اO@mB r='0*g!j_+q`|QNrDFnn -1lu."ZGլt# SXsN0f-/ $,] Z{?P95WqkB.f^z.yk=Gv ֟sL"?zטЕ9V Ktݫ؃qaOzċzEctGciZρ=zdb V Pz$2DMj-S 6>.R}o17@=_"6]# 6;JtJjc-/~%j}X䰈|d?UCEaSᅰ1*-XA 8}PQ"dKVSJU5RhO 6UwA+S)6d4,MQh ;QKcpPb8dN7EmYcS,=Zi{Lx}o\nS\ɯ1QM^[D2lTIdf'jSS.Զ<ASrOҲ#9+S`we+ZfNGt!!?D_ ΏhenAc_μ~>R*:t"B gQĴRwة8ޑ((֛w3O.t\6Y\rQjjqqsU&$#J8SJEQ)|ߌb껸CEK,ϜcbZRsrtpUST@O37aVe2k~rU͗6RW a|B0eqWMABA!;PIOG;ʼnxة$ ^嵑C9S^EJ=tҟ47N?fvq73_GM$ 6LxٌZ2a ϊ9l/j?t]%Yl+}._R^3Ł[YUSNN?j}891]ê^a^xNb)]uX1 r[\Ih׭ l%?eUʹq[\sնƱ7ɋE|&9jͣMZ2x-X?;NҘI(DA!lcm&s}{ ú+D>{uqaBʷX̅GjMlaʨ] {dUNqn`Jn,4͆R4)'^5&hTMI0Wi!lܦ^IPY\p{skg`dRcG\I6cNj|$a@{>kPؗ=rGFҝwɤ62 |1kA'{TsY{MΟ{ <5y_G71aμr2RҷrINS^ woS]Ky݀m8|ƚ 3՟Rǥ!uIzP!ش7P/1k7-|:z@ ;z36PȞtYVTDބyV6.jwSpV)  endstream endobj 67 0 obj << /Length1 1420 /Length2 6093 /Length3 0 /Length 7058 /Filter /FlateDecode >> stream xڍx4\ڶ .JtC2{'z'1 ft׈ !$.JѣQM=5kw繮=6D )A aBcOa uGPv IA"=!$NDKT0;p9>0G4f߷n@HRRw9@0ꂙFH G nG4UJP vAr</`EA=v_`h@B# WiC"P0B%k9!п] @.` =5m #~%($ K ` ?Pw+D0 jfU2@O`G:#^-{ ;WA'"$DP7(k+w! 졘/B? @{@3OPH`P1n_6aK~BЯϿ0 C">N}Ă*&| + K$@!!!1( }?:j"ɿ@`vo G6<NEb pA "u_+RǹJ`Oh6t ; uv0j("0<Cv04/.}pD~=w0U 0҃8c-(̑A1\UiK¢b;؇% hA Ɣ0Hw_+ڂyrbl̦atawwB™I$D:MXy"Ať(Q4s?Gm,17Gvh"F'xwχv/i䡱TWu8@+{Ld,q-&/;E_^Hn\ŧi 觊m[O,Xٗn[fxk _a?ŝ)}Y쟟ӝ.rXU)*>k@R/ubrYj]K#=o{E<tANv.2ڬf$mLvJgW⨴:ثu0juƑ%gسCEFh=JJK~y$gv7IPsPk:-y U$#7?wF#wǂ[o&6h~0UCWkM!mxs rq߶K?Pa7!72^нe!4NNJ[z!As#7T ɫW :ߴNu&k{D>^~+rCb,x_|r!OI eyOĝ+D=Gؼ'1vW+W꺷F)>mT/[X>^Yy:IJrHѾ;`W:=nJ*d\"+t8%pLUHN$nGB'@,GzU,M% u.yjF35"}QDW>Z2scP i‹XrHQ`?\_u_JxFUSR#ՏPU&W{[$酙. ajaNfS8Δ 85@m lCGjů"$V⢹Nn0FO d(0mKM\»Ŷ:UK*'XIV^X&Q7?iO )~ڠͤ3?dz(p-G~,'2yrrbV Im;}ɀ_8N0S,|,]:k0D*Y>ٜ$Y"S-;Y?g![Ԭ;;7= Sps T Hls{irZo<+j[cdzdQii:sCDB$0oki Éw-*[w=;-~L37js+lejF$ߖY犻b`.3qѤDGfK~)ٕw2Lܓt윾*`E,YP7Iz_$5k}sǠ82I'%H||m4V:qE ʣ#o~#*eV 23R6'.䢄|lz_V0K$W#ݸBnhE]s֓BaT?T}pgS&/8,+EC)دGVTgXX`5OA`#쥗3#5K4FlXFфbJsLW-lgeVx~Q=} yi|O`7 !WDJ rݲ=Go%Bկ/MgWzCeYV;|xr#X^gM ᷏5 FkV׳[ gMbg-E56{V=%}(h4|\UVNt;B9#RaV/m}Օ8BE^ibO 7[?Ʃޝ(zA0 C7 . r!vb I%<  #f_dkk}j||T˓q75I|[}Fc#|mS+2Qi_!|95.%wEh3g]:w;j2J5iߜk wg'9A؊W.aobȾ]B|m~?9~֓<)uOofptz_2lq.5Y3ʵYOL]zҗJ>:(%%Mkκ!{W(@͉7KL;钱=ON&;ZN[x|BUo4*{pDV.E<9ilxp,tȃBd\rO[#Q/X7b> ,|<2p+dMIz6ԹUMm >* [h86`8NH+c|`E{\5[tCo87M"hM@ݖw BU~ IruT(=^sB# )p%Cy+ͥNz[xRwI&q߂"o*&9tUinkubϙs<84s {:LT3aܒBѕ0=Hzk ʲx_ %sp'ՂI6V]a[&1ngcױY3z]x,Ƀ渀կɼL|AUN¢}!'I{iuӌoj }M4aRs 6 JHON:z{?YPU|m8(Rl@]1jA3M,+y@3?6d"gEj5)enfo+V^ju{3?@Ʋna^~ sdaȮk}{O^Oud|^Xb8 qK]wٯŠ6MCDSJ|nSLTUg%Ҿgsw'>P[afI/ UKS%=w9TAmTYc';7e|st=H)E=lnm(FgEMH;:dFki3:xxqL\,eKΆ>š6Qכ3|)WA2}\Q2&߂%]YmڰK ZfOVuknfȑbws81+?${~A펭یƓARsr9g@QJ'IrӹUaq+Cs?$'^3tK@vjӥuGztΩ33սJj}}cE%[e\4Á"N]Yϓ 2qmJ]n=g4NvkS9HԎآ4]+-3ўrb 8LS​<-0|(H _&BǓ;0lT\ps{Ǭ_9y ks tlTrɞ%ztAO 7T_Br7D c OGɰO=}>enaV#}(5ӳu`Dq|зIjlb&*:1g-0[xŨVN7T9GK1y` @(~@Y K]2ԘB^Oo,zl\#{|dz,U|]{ yiMJ<ϯNw%+NՐUG3pD(R`싸W -d ue Y"rt ~CgInih|ix {ZQeed 9/S\S6-GZ_ >zD$Gq]^M]TGq%͛FǷ4֥;) xF&zCR'aeˢ/zrfEe\ovirȨ;eLJLIh#PS"ręwF\vԒ|xv~V.M#zsNQ{=H;t<ɚ^+dgC3qJze"yDjB=oq5{H7l?}"d`($@@@}WhPtGoXU fmUb[WnVl ˌo;˫,s,S(I YF. xH$h2ucFs*l&)gP 9_,nw*(g+];M$׎qÎM]3w^|#_#!K!cT%{H#WFMbe5rc Qp,QG#Iqr5T˖~ /f?]_ VŰj-D YSTm-&2vVGL(l~v?AkR_b4+eAg.T>6<}\pHuK[1SZBMNlarҏpɺ=pV[@&B1l&NO+|bўRv4|l۱%[ЋWz:\3LޮŬOiee_l9ix+VH7fk2Eϗz=*ox^|5n\S=;a34 z9${a/-?Rj>ԥʏ [\9Q_ QARP ߇~)7mFn`׽x忢/6DrS[!Az%QΨA82d>Clݼ+.ߩ@սa?{D6C9rkh{usӎ{9G8M)HG3s;GU|1s}~JUu#8y4g<dbIsX5k߼V>x8/0F  y:?oՊW $@ 9pI8 yXS"e棁yA2%,po EQD+u3֎W!g ab!҃ỎK' ˙) Uj\ ̈́/&)I@VzbdZ5հKZU=(sYEz\;X&_L1&4Z'N1ntS1EDC.76y9+;"X 9 xH<<ퟲnK_\&TI܂N l:z.=J>{#]> stream xڍP[-{p-8 4 t$`!w .]!8<̝>k>{CO.m *@0vn.27^sKAot `XȺ`29+س: PppDE<\\2xm]e5+_l/p{jv g @SA cXm0rB<@VnPX=wwPw+ 9#aYl+ qqaP?m݇:!^`!;6l=\9 76"0?z8p@s~Wsj =~T7؂l`k=b_y o)3\}2{f-?G̩o(owV@~v~.77@q}OQlϿ0;@q(WoE 2\@>[< !Vڂ<\W zi3ٹ8 of5 0P <{qqylT7ʃm  ψ@?)C`.vw?+Cp 8F:g?#gsyv ?>v|?y 8y!ϙ\ynyN?|o\/u6Oԟ<?C h8 umb1,p[sW;XV77zAcf'f雓1Jbm T̓gGĒlkO|ܠ3u!5Lvc6mOQXL4*/BhtZkLL2Lj0MJ06xf WՋ}?U-']w/ZB2YCGt%iEӕ'Δζcu7{e7>ҜlKgz[3~7ei+jZLg,*-U$W@Y@WZ͑V58oMJNgN%=瞴Aqɴ ˈAuwX Ut(aSD޽: 6ȣ?Qe%q0r6sUwfAz -#z0"3dA$Q#G%'2aۛ5$g1|9Bz\;=ꋒsZQ O#AUOUlIt,H "{cV͡NF8Eж&UsyKG $5S7JۛF} (zc˥wre?6Xź.D8Oe5ayVx SvhXg9ub-MK(Յ nh, 8h* Rb6Χl9J2{ /{}I7d !P&^gZUFϳ3l%ߘ!P]"Xg `#M Ҽ,.{!aa(MSE7L3p,Tk (_@DK7> BRe>Ӥn`u).mbqkNIٜw0-|:1 n&sEo M\"|c"_vPaiiXNKZ k|Lז<,e%7}Ʌ uv znv;I5BO磁>6ЛB5; ]ї퍢 [*! tݒBfxs1̧s{ gP%̕[<[IG:7q$S׶xپ]r4TLw%>Œ%˷Rp\()?%*̽M~NAok=Zʌ:+Mw(ԮGnJyQ<؟Ѫ5ǝByJy (X_T,t;9ݞնˠdEVaNE3fEg\[1@1S4\/ QKGs>y򴭁  ^oMR"m oːƖC%{"+p2[}U6?k}K!d"̄0sf_h]Ԟ:-))/d.Q󧑕 Im+*ep= Wz y{˨ Ia{L̘TU Qy2>^Av %˵@<$"t-.7蛭O=u6LIsCxnX)MEϬC?d*X"OrLZ6,.KbI̓۲_uxInm%b#Qƒ8 fmk6VXevW*n BOW(/]ӥ/ Xlȕ?(~[U;)29:[,{< ] KNW1~Z9ܿa_~#XFk{vt߽A;i˴-uRZ,nhGU4:e/q{6g~iCO2,$eGW*Zͻ_CtÕßj*,Bm xZʃ0fx}YTEdĆ O #0=#.}|V凷}}?X]y爫Ya0#U D5,9܃^>H#Z.=@v2kᡆ bf4z.U~_B=z9)~QlZD˜H4m}= Mxx˾Ev7]bv"ϐu> vDϙ3L d3RMg>٠[vcGӆI+F%HR -bU+_o"G6An ,v..(<%3u&y yе>i4>f$Eehv(X顁{& awse\W6߶9:+!ʿ#\k}@#n]['(v@f^vszzCp]][DkeQǘWfsO) $n[#QƸ#1&+"Μ#SkWDsGfqejhf 쮩7㋵1DOM)@=_9 %8jaSnqֈha*3w*KΠxRqhd˧@m an#凋)SN6c7 unq1zJ;a:p_aW DFfi`I{JJF''f7"l58Aŝ=s_ZLH00R*]Vbނc rYWZ./qtsyJ({oS ᩶԰B|xE|{mm?D$zs FO3zlRz!a^W3dG%-Ӆ+4UxqK%YK:Oznq0ƣ78ahOCc,ֽcjf*Ѧ` ކ7I 6$NE40Ȩ.&;S%dGV(!Y,lC'Hns] 1t3Q Uj/ט#i 3UI(s +"Ei ˯cmŤ,HjWO06 BEճ}a.ǟ@}* Uf^ ΟjÅٿ7m ԿMf9I+) Uw'py+J'Jhv fX4asY'yzPGvdkOb5Mkf ʧ_M߈;ڨQ3oGl-#mu~@{oﲙ dž=kUyw8F-)@Om [ԩ :po6nQZjg2el|k_w{`l:%7+=!RYbt ?#_ T+nxjN׫æ#(XRHw "U,m(b[rJw]v+N i-D9f]|sģB!^oԺtU#+[ XDS E]/AuH}Kl ks3;%sQ l%xdUZWOcTWwF"K},ًU,Yk62Lo)U[IN yOgU|W ;ÉrhFJimyW6@U ׫ "7RI]%p 9 IaGV bdv$=ؕ wٸǧ!SvֱÙ5s8PHCk$~bsyy!m?RC/܋;Y2'Ju>Mgd+'|g,(=~&>@XGW* 5!xn"6 :m.Vi+ >X>!v$j?i_I믰 Xk`'Ԇvd^}G\5FZ6/Lf'Ֆ5O |Tj'0Svh#щ80ʢkD N;z!Lt}9%wn#J1dk(OKXKW+ `]|T):]<3-)/ʩG^ ۭv.r^hJ{5:Pn7aRd6[j>g^#D e;Pl1,`3S0[٫ ,6YxA|ok,Q£d1eC3ΙfpVuu 0MH_P9.Tѿa5Zv $ pX~b^XDIE/&_t?l4>:V5|>KYij?a"?`Ux[|).#gFU<*,뢔BV_+5% {yFίg-$vF BMϒj0yZDZ0^a/$-j@EJ(c&Vh3KNC;fKut6ԄG/ k3 ˧{/# ]ūztm߉,1"'$srT+ѿ9j`]ZZw}rkӡCt'q(mf=ϲNώw5[&g ԰HX ёd~LXv>SGZBWbP$4e;罨YC2٤Mb\2vQc~d7|2XZI9*{(HQT}ȳ^J+J:S~{oȝoհ/^|+7eZB!VuNДh {Ϩ@2',y=J/:xr{3A~8gy_~ 3uGi뾹e<)Äwy* U#c)q*iXE&NW?d\\!UC0M*;qȣJe81-3TIm9ˮT9wm9S#.=M[wCO J[!<[poTf:LoEڌF`HYu,`&uGAeM(JUfֻGEvTc<]oX X8 өcuLo, -*Eou2|9/h NʱO2U*[_ǭ8ʇ5Këꌯ#5KSok [j״Ku#@7A&vY̿ N{)Og@űo(8XE&`%h-ڭЪmL+ziock% (ǩcUٟnȱ^"AQT߈vzt6 v4]ΧqDT=f7$8x"U-{E9CӇ ÈV4d R-ViQD斄~;p[+xѼ#a^P v0ðǴ2.TMo3V=o2O>zffi=s +YP%Q"JS,M~)PbiyNk,gx\~BH[X~_x)]{0qGA|~ZIOEN6 ehq.Wxcjv̔|&g1oɎ/]r7WK7@=CDvEaa#!$ hJ/kԆ|у*H/^hfi~ٛG@xƍ;dj'(_8zk\=yܔ8[r Qװ|iq~I859#%va5M:XD ëg54J3~@\DU;GZ2,%y\SEi2IIhvOa[At[pqNuQԫU۝5+kΓ'O!;llC\7e/^Ơ-s䤳5 ?4WJ H0 S:-z"q\+PS拟LeZF=e,d,=;W/2H`YI$]ga5W촑r\,ѱM>@sv.)-R +ɣ]W/D:IK$Hےd> ]vztjĉj@iC;6#_9U? !26'D]bbc,OFkވQ oXf(kt~]j;YZjn؝+ⷹǕA'2 {\E<5cf'U_깹6 -tqtYC*:KRU\H؇:RAaW"2{%5n\9ԫ |1xw%\2u3gCr/i߱s#UaW}|N7M'IW@VS^P'fUBaLEcBC _kxUĬI1DESc[߭N׬ U'awj(BFM_>m ̺Zph(">Qm:~v7쟭P' 4yF*y#mاg#f/y.ʹ}9÷ 6{l'T™76o2ebD<N_2p7VS5WMUONO V~Hdgb-J<5r9!a481R,*3L5Lx?W?@ ?ɔ, G^x=2`0-ro[Һhl'1 Z'$6f-v-z09;LX!n%vX*[~tOLÍqR\ \X[^fᄯ=nAuPKRx50/*rʍ%\a>e??ϔ!ȣ >z{{"ƫ^5x_a$Oǹt^XA3~\OD{ߓZ p *h&P2#n*I;Q_1\T")~=!Aovk[6AHWvE11<CmJ""jWVH1{x"vԬ9it9Anչ;"ȇw)bbe!Z4 '0;!7j%W( ,Ӹ\8؝lt*.#:6ݦ\} &1vֶKQuBB5~ŸosrBpL2)uEl-۪H0H&6q ԝk{S޷Y{Hڐ6qĤw80wɦP 1cBz~}vs ԗ1+p N>I;ŒZw,}2a DJꘗz7&IW)[m@ZfNaD_ P1ûp Nc~h[Ӿ4WwiKfy #{>/(G-;}ȧ-Ue#8~'c/uIƛUNEN z2-^ :}V'QTOL8^1&5Wq+Q¬I Tg3 ^;֙W"^-_f- ]M# 17Th`3釸E(JXa.0T -W5Cd| l~GPr]D1Ŵ劇:T ~fG5k.T{UebPiHU>"dzll\SY8XYr ) |G~c} C<Ɲ0A 48;L/Q#z |Lt0IKZ^$p I{O"d]A6x IY+0%b F|]}dcF)įpPp~efqYv\ƲS7­ڠlȖZ U^N1+MWU]C3H{\,yYXeza-lSk݊%lSwTbZ̉~Zyi= ?CQO.&<'ԓޠaoMo+-Vl+_E˟-kٸ:3Z3.`I^G^zwc݆^ԟֈ'd#7U ~G/Z:{aJϙb{F!F QjڱL2+@zz(J[+͋aId!^&HZUSs-2{WSy SoʗaбNJj޿| uI^ˎWjXΜn˨C4gͦRzg*eC47C.5@X z;}S8 <@k#=0]mRYq|DëHgdD3!aUaŢΗVL_{ig_B*)AW ՊvT*ZLt 1Tr;F sQtEil_, X{zvU eݭFYq$i=ӄ;{OU9/gRʈ+.T(|qWPj0Q5ӲJ#%K݂ >[c.}'\Ƿ@"l[wOit{oJ`~4γN54\A[-fŹ}?NB/gfZZaRR7t2Md rYSgv&㒝wD (NZ0ܘw"j L+YZ~P@ROz+,pVO6؊gBޗP|Tʉ/GB_߳Xp+/)BwGq%"Mȯ+T@`J/#=0YTvi6>VΡ% Gm:`bo{e-+U<%9m\zg ܰ&?k΢|rNjAC3NT)ٷG/'\}w>_q#M:yIF{pL/֊&J[FzK z?Kc%p vnZmI6lܾԵ{Y^ƫ#}R?[> !T#|.;1*>.#4t4rlE@ 0c.IO2f}H)ci"?l}:Ki̺ u;Γ_It۝wQA+?P9xɂ>yt ;I (55lw.;a=1ɖMF,+ endstream endobj 71 0 obj << /Length1 2040 /Length2 14577 /Length3 0 /Length 15815 /Filter /FlateDecode >> stream xڍte Ƕ۶m۶TlWR**V%ضYrp9kimgc̵ +=#7@DNUB CFjjk; ="D͌\?mFri7[ @gn)@ `oC&lea(ML\\̜LrFfv+TL\%#7 ?-lbnf C2@oi0dUK+*FfOg3su,@`ٿhoF&&vF^Vs+[3,+-@#[|#w#+[#π?ąF blBbeF?|n DL>݋õw275C#1&lf6FFFNf.ĒTt2a0agen fo"&&+f3;[yt?ۏ }v?1(ߒvб٘LL,6FGVE#1SQ;ﱡ luM>??)z*+odgewg?~ΆP Zz\>gDXY[[y*ZXK95l\w>sLl>#e9Y#0rv6a3f66笚yz{F?3`'A`/`0HX *r<"NF?_A5M>y8~n,$'[?5u|1~ `[}"/GK;SͿ'Oqv)_/I?9~Ζÿ> Y>;9|vn? ~w'OKx?{ ~g_Mܜ??oϮAcfif`b]X+A? ?xu '~,tR$3wr\bh͍nnK;|"| ݭmbojqCǭ,&|ֱ/* H3z8hH,NN8Nj:ٹ.)RkOl;+V''2Y'G}82SY>1ێ Jc1'{R ,41_uLuQհ926q)I뇩"naik|2E!OΩ~31zu!N#[- JNi~ KDOgv'F4VG'Kb3/{uO6$RJwa\9˦e9 [Zpɩm (/EͣPjrF2%|$={o$TH'w=@jHE|8ts.⵩=]g$+/MYoʨwmhE"n)֤5BM%1&v+3d `. c[ӕUZ\]"^ Դ$VtAv:z-10%aEk)EXXUo;|i$7 1ENJ[i4ա "3{Eo| V@zG ~3B7##^@=+;mB@VLtX .kSqnP^Ul#ONtozs\Dg%/y ۇ!|f%'2tP,V𰾭`Fn;0v8 1>=_W¸ˀ(6/s45pl:oFp6drda[801J%ZL|ENd"Hj@ey(R( Ž!LwlAk%܇%>e$(U'$Q-#>\$|b8-^#,%yq/#[Gb%DP [O OXR'g04LJ;rOO(9>J /;hg7(i_@}v&d8"k gm23HMUZ<fE.$3GzL ed}$U$ / 6@8s-+,oLCGK-Io/r9){m)iBvo¦ZEH{"x9޳0*N7Jx[d)8{g(CD.K(>rA޲1z?tu ^`_ aN)Er`_/LZw.ñE3FHjݵ Ldͼ !68Va_4'Cupl ~,2k>l6ŵ37eXao9dp"Scx\B귎޹7(Rdښ&0U/Z&8{_: @ BN/ȍvy>mD-B|'7{Fvf>n{Z6 %!/@Q[JXOZxB>DwΊr6*+^(_05#1ÂԉR-)"bs{n,B6R$}QaA+Sn8ҥuKޒ({ e8]<n_ю&txQ׀ L7$41 k6&3!:)kqc(He!p#[ģa NI(;)S]&12=3vtDXq˕n%ڼ^&2[\$'~O'Ⴘ,ŪƢ^J1n`g摻ɳudAUüRAa*לhx wD+$*Za#5 t"T[?kȱ*eraՠ$A .3dz)m]-z:A[u19G;}.xJPȗ&VJސ~xΓ ^(}k`ky[¢[ XcD) ~u-zs*k*_RH`|AnuĊex[BO[vN4q,bh><T2nG+㺬?&<>bbeۂ"dYrmV{KR9kUOnzF](&7VG6O ì$%7:^ P b? 혅#aj]1c)Pgd2E~NBPsHHY);d?DVsb2-?&,ܒpMl'K_70^GI"-h xI9jѻqN9r1+f'*ԧ1#u Mz8_~ވ{\Z9XpJ-P-nuJ gN/+ *v҈ -1g ~7L[|rL0vKs րO[d9ٕ=z &!`spM>t*lH1šϿ2hݽAjcGCtu-ȻDpڥlcJWݮ4J&V lYUE~i~p+!(t v^ Lge=Z{uyJڔl;qkh8ݐoh.f܎i%Q+M ҼxrAQ1x}ՄCP ,DC/d_Ab9|X^)HJN~ഏ5(:cpcsh0IgI-ɑo%"aE^vD%DF=^=,WefĸubD6mAǒlKh cV݃N̯*9,IYU1M>_ˆms;e`W*|)^Mk\p1Q'Hjos a5BLտT77]spfĶ]y~xn;sphZ#1:N}. Ug!+\E<6*A=6=IFӁ6Wlkj^$E*׵>'O?4(Ydj#w.gH5t ,ǚ澟d{傲clGb\"a`,9U-qW1 HHSRu{vd.27D> Nj]n< ܄$;c>hq;$S:+ٕ+c2C>:wQMǚyCH _sGx'(?}UgGukH ˂@`=2PA4Ssvp*JR[ath }>/)<S4v4-O fxyؓuExnS+!sKOĩѿqHrdc:ﴝ7}/ y >ԣ훈B HN-sG~lr_Q m٪䀗P_[? Fx(M@u,2_O90A0[+L:x<4ߘui 7s}iZ/ZkfS{G2F,5.eKkQBla ZBv 8;ID uZE࣬ZϤMe3F]MS=jqG6O4UUEčl3 hG};'Y(V-󴝭ImQɏ"}ϩ}mH¨MZe"UYmwٗJA0g(G"b߼6巬>v)#ξ\Ҵ:JC>ucpn0 1W Ge#È faߎCrrdXM"A ޹ٔަY7ɱ&D׭8`3 _8A8òFne!)T@ ø0e+]P)|6Wt(bC? }Xgx)O,[XƎНl|JuT@S\ *'jq&hke#U{(7=倗F𝑕Jg2;)bހFs;3{eM.W'\w!gвkzAóAoM=%W MZwQ[s!6CG"b|dU$š2tj1iu}Gg:F5?0 |hK7w)ܧ]٬j}m vU RksB\q`XOH6co]U=.RҕG{ WB+T u@Ig]cڗyɗwgw@ ܫ%ڐ K Ӟ+ל֭CU3Wj_1Pt \F'{ +qܩ@-n+s)Gpfrj0u_]pľpɯ}KUOHK`^|=Bbg߭W;Y6tJ+|D/ 옄̐pӾje;/D ^ur&6xa/ګڍ[r &jBülXsQ_T \G1|E.ی놃a8Q}/i3"4-V6FFbq,Kz(4h+m::݀d\hիs'Uߧ~OK_lb*,cuN?sHA G t2:/DʦJpѫX)"58yʓ&dlF gBgdp]khi3^KT*̙wJMI 1v,hne%#%xXgt>;-$83H܇9a5lS v@>2^rOu)Lfu'Lr1humS c ԈSOpМ%KT"x|İ5:=nv rn+)JэswZQ l@ѹqhDڡ*i0{2y$Tn_,Xh\uKV^.N." FHwǞti! ;ߖsMR$Q~DE7cF`tF:rŗa`m9V19'f $pU>g넍B,7.r>+Å~`!g$v G }`Kywt|2U7[9cAN'ɶV"PU<0+&,_MՔB73f67pBx/!bA-1wJmB)NU\RauTEgÃFY5$o#N_D$n_6RRa[k" ,7B*۸\\Bk _i3cMZ GA]_dXvG9~B|<%4}[Zw`Lp` ,rH=)$PY0-ęy΋[[h2ΐqFڴV!֊5j5Y$$|10; *WwͻIH7puLJM7]MGdŃXBU 6yޕGoC7`Ww'挽:<ܕāwTM=N9g! ZI MJP`l!pcedk׌7hH7#zY:V@;TzϔMt+C yl=n6U~ PIreLyvcD"E hRzr%wӑ/zu2nJf td!LрE$EFmzR`&P?`1e}FRgx:]oS]P?u,!2Ÿ=-<IЎXQ ՛z3Ƅ,9QuT֬Bqjdp0`]/^!,ʝy1{FJXLO'tnnx+q.dm8i̶繤heJ(V~32KԦzpB lߎ6Zj'NɘY #do7, vX7HU).zh6BVún Qn+']ZI @kͼVګq\+PQD[j 2xP#QܘM!hOf#73q#?.g'kДb ,8fTt@;`B/9S@PR{Vω"G~0=n-0 o?g -gWzucxD+@ AYkFrf< @|6Y"}w:2-2Wa5%>582a/ {h 8R,τQu #Fo# At.$YPK{m8J>'qKA|2cu+WA{%ĜI!nmٻNoIzJl%lOb659yCotOY!^pٶeD=f6ͅ%zrzLR:Ḁd mA;t'Υ磢1vDL0X F["%R/W㭭3l+Ts״oHD;O?r ?aSX =X(%k ئ>omg=f^Z;Y,ݜlKϲ;I՘'zUvDu.d^<P~7cn:7.تhsduʺߒuG%"VT?F's7=0:!o@(7yi53yV Zkn9>1Eq%-H-Cb-&UJ .q~2uOǻ~cfAL|]{;Y'H%\^Ŷw L*R[jˌ+LHے3-Yg/sq$K촞f >E-@I|rp~t >p'&d"8>+RH_ja㈯5c=s6Xƌ3l7iݬ.N&( bb[,Mr-OC/X' g q;I"z(C^^E<8a+at9@fKs 8fywhaB}Zȕ%_ke,uzV&(b{IZۙ䕳w-GuMkտh5Qa;>*(U,TfVA]w*IP>K]ЛC\BȦj L}3mt B#KBX4G=\),TOaW-%N .]E8n+^.Malk@ꛓU1r /{? 1i_zQ]RaZ>QoTl3 L~1;JnR=+Y;%y q<]0 slΡz|8@%dzJ,pq tUk 3Gm[I(W= Oc82q.VT&ɖqWԻ.T3*~lUJYR9jPW$'&C.Lyv$p}/=@J M rjbY~|҆} ïR0s2dJj߱g׎"8=)<ලeC,\6cV]#u#<"VixKCx~_8'R];*,]WϼYyhw %Ù)O&) 2ۥm{#,fH]oorG5}PHgͰ/(ViO߯#A9p"%)bkoV p}b[_DE;Ο?h~ALޯ4w/h͵/ǁry?{uj 1+Ĭuf2k:j*Mi\=XaTwSeW1 sB3[b_}MMS.ɺ=$bC?iRŞFqjK!Eaд)rϽKi/S4)$klf9ݓv7K26I!% O/q&)`}иq&~I$$Ԅ88xa\',1<H lZ|;_0!x0uk*p؏{f2:Hs=2Ř終R46!nRMpEpeeXaBc]|b!_Y{G5|㖅MZK╇){qY+#-D7 Z-BqbG#)ifP{jc&&\ 8~;Yx|z=ߏJiBW>adq$x:20_ևٻǃQ=A!2WuF#Z7 U߄Yj0[bEH秎MN Djf Kn Wݰ̝t$/y^7 Lj|$֨+>Lg"(1U7ƸKFanVrSlG*}mdGVV6<~y6beJUE2,tIYV} ^۪e]U*҆CюIHyXm+T2ՈC!Р; S(8O|6Oew;59|?}7hWvxa%"K iq|o5;!YxcӚA?F\3;EzԥMTl.oW v(uB5N(_؉"_%PiD$ЛhW5R BCi⪿iϷj70.W~KGM^ך1Mhqkar m QZ@ݔY|@Rx`̧ɮ'͇|#& ;_.~?!b\8p덩 Z3S7n گmb3ȥ[5W31H.|La a3BXnWp^Mz@"i~-ОAܜDoÏfdZݨ-Zhr4cHBY0t3\ݥ-N849/6nF@z,R͏,_x<Wù!hD$\Έl)u~s 3f w2) xd =R0ǫf1:ꪡzw>w_!xaP̓E5BF"p7MAyU:0TLdV~;ރS4Q+)h!5#m+b8Ꞙ u =wrϥ2IZ $Nӡ;B,\.,a=اAXIW$fVGMcsVih w1c2:JhW~O,e]%}e&[^7_ k<f5@k' X9ӑJj5 N$av_d bi%u[|^ff&Ek_!{BUB3佈rAӅ.}]k`i>Fؾ&nMlW%Ңo2 t  n8EbjJh K9t8'15MO>mZѫ],[aa6 `׈Nh/x`a:3ËP; ~tnKsב99з"%żL8E rd/e*|f. #[ vu|ϨʼnPo 5{Iה3O*!Xʆ%&ǧ:hCSF} W/Y3?$k^H!&O*/͌ Ʋ B.м;A >+޲T |Eh ۴B{i+OS>b\2'Mez sdgm )BMcCɍݙpS|{jJTF6) 㛶5\v6x6NڀRZsSXfɶ*~ڴq}`#!D>xV=3͘c|G}ms^y6b姗SEaqMP U)ZlKC^>Ɛy4g}v7֘zM&ue}b o'5K>0d89qZ욼&ق3QIsZ 0\[E2kR߶URX8!GPBGA {)2ɺf߾1Q%pm|FƐ5}EpXĢ j$/IՎHbq}u TeZ]"S#T@Or)=c9:ϸZMC?YJt*R\éߓ-t[hi6~X\Yy~iX%NjH endstream endobj 73 0 obj << /Length1 2118 /Length2 14286 /Length3 0 /Length 15558 /Filter /FlateDecode >> stream xڍP4 ; 4݂ܝ݃;p99{UUkuAE$j` twebcf+XY9YYA4. {X;M\eM\ n67??++?& s3@@% r}Z3:Q;3`j{hfb Ps0]'#?  0#jP݁怿(Mƌ@PK`a  lAf@{w7{s3=;@MF nW &ffv&^ {KPgvte؛ehbon51}7t 9]]]@qd+{%. 4{˿kcad7#= (6"?2K+t=ͬXJ[#d|b:|_0L {?@;<z`翟 7#fQRg7*<>L&vQ?*]?[8Ew⦆76_uoEnie7z}\/C>_4_[ I'\jfg mA@e_ OMqy*EoF {3N`l_\\5zf{w;;?3_#%|,E<?} n`Qc*XT vSAQ3A:?= p#_K_;Mb^?{P 9{khxK|/|m&,۾C^od9'~w(rspus= +;;w*8Gbkb\ߏfqp{ {{|o%h 4CXZp0 ~_#J7!4KAJW[4umuG2Iklx[JQ^;)ɢ~bx"&/NA6TNn(ʅ}Re+ca {*re3L1A L?ø2c\zț|#Md@;ꣻ0V҅OG y16M#v&SR!J 1O;IvƯ'/j'5F^݋fH_x`!)URg?`峿usr+wrV7=g ,%Kf˷:֧zqsSc\ (5 (j8S ^NoYRcj`L7WÃ6eX,L%31'haLyՇvSqn'st KC(9&-ZDQXQ\:,;uEE8_F'ce{8~#¤Y9X4G(UP=\WKXfʕD'*tW|-#M^2ӝ59TS^;EQ/q,qm^߃ߏčikfQi5XYYzOy}t1Udf=̊G ֏]> Tb* >\#7icpZk57zmЇN`sCz'|0G NW8< OJ(Qqk 1# 0\\}~[Er_WdoDpKyU:b9Y39/N=t:zӲr>sI[Ӑ#bubJD A`>8 Sv$ypU)]\@I.C9"{9oB9\㿾06[tS>lcOGM9EhNI%JL4~@. eR'i*9uON(aS ={W'Kq~^ Gmi6#f_A:4mCew\fB?ط;a̰<ؐb9Md sZv- JWJ,,O: AWJ$4>u(jjlޏoWӄ]~$wb%mgP!y0'Ko4 a(J>Ӓ&[ZCAO\k9EvsC #k#_pH9 Q jjv+ TUĿCVsQ܈m1 PHFE*/U4^: B c Yr@0Q.AvվXj|!>mhL@Z9KcH(G*=L##ȯp!Ů[?oSrG;&p6@*N06ؤclIJqqev_-̮匩v:wʏ]ZNddâR(M+C$uxr{HnS!zxu]o1ߋkLj Z!r%,JTԧD>xr⧠q9NO~&Lm9NO#.稬>ƛo۶\4kNiҿJ5[w}RаNn$̓ )?n-Y !a:0~tGPNi.|D \vEH~h9`%3h:Z'iB :)8,y -.^ ޑ]=2 ٖU"*("LE4՘!}x890x5҄j@1 U)q52<6Z T{Pct(~/OɵI7˙WקZDN;a%{."Kɾy4JХ \0Q[?6^'ȳS-︎{IGuh3zP,n)ܬ|pόG gPLQ$tXm>85; m-i oQDʜ`:(Z(-Yz\E*Pta{[FABy@. B"FqP1J0}%+Ь(JagH0v*0Nק#bK[(̥X>cjr =Ge ]I%Wa?D!qIn ިƴSBo(94HgM,Ȫ҂s1ӟqN{(4B"VU(`+R X$[ŐC_Q'xY i1O:] ]7J42'wVDZ!?DPhT6njQ|M}>LmdL!{T,orbywuEj2w}B_M ~` ƌ=bړT{+L{ 5m ǕwGu.24J睕ٰKxi .T)ۭ(i|t?<ȳl`yڹE#?~H.MX oO1]QOt"?tyg**Leit93-?BEysD:USgٍ0N@ᑷ'㲏aҸs6CUsXcmzt" UI`i;Ȁ˫Y,A9GȢ yGB@XjR-mԞ)KtqAsM~iY3eS8 =ބ;2d!-Ѫe_IKNYN%2`x3=4rN9.1lu7Z? tbn?vy {iO}KFѠmtsi.|Gfa9~>L!y<1NQT rClzV7u'v.C< s/#NZa&ի.T$ c0$^G|2\VkLQ$s݌ՖJ4CeUdsa4įp;a9#4LtD%y &Lg>x8NXgc'[i ܖLA7; N^ xB %L"3ؖkܝ5Vp ,`ˬB6,Y2= jf5E-ϱTʱ(td`#މf\**ۀ7O#\'"l볪#P -+#Չ@;⿝_6h7"/?|L1Q6 pι<GYzwʁ{5V=q[*C2ͥ|E;5kn.:0kE@Z GڷR-6@q; ~AMWjmC`:T!jXtI'n S뇣^n1W> a=gW>z]lVN'QrcXX^L2ZgNOz`x3z8 £ͨ$WN^!HÍz7B+xEmaL'벫L::ܦQi)Rnjq;gh^:_RTײίMR=} ՞G0rsݛ::>&߷PbX4/gm&i:Fp]we=t})ŇI@Q;ޒ[:`Idn}=âf׉${/:(QE45V*G5߷w\s%OSolq c&njrAlӻՖ 1pGq/k`|c0xA9M#^GSe 49/k;EbIZĺQJjA'G&m ]m0{j\wL~lCaQUJRp;X @;\_HIh<{1S&L-ܳ[äaBЦK[|:æN.Uli|;) Ѣz(  dlݫocfH ]ۼ=v̾Ui#b|NDS!izIC̐CJaG-52#ϓLWYo;9(lWxb9sD7 @D 6j `~[k H2FbN,VO>BA=gn9yd>}šaK0aO/Dr34؎I &/|}*\xb;R4x& SwfkVL-rUC飔$5sscq!OXMdO^Jky82ړ`z!a7#M~+T3N7~b&MsWugY) oIؚN[ VD|C(~ɬuinzTWZE 5RA Q&9pen hӻ;1H]+llDV4vo7ZeZW[:{NTzOp;A~<[Jp7-y!/"" 7rhaXh38Qh>fCJjfhux5O7򰵻ڃ AuVk3OpQ L G"`3TYwlFU5lB &eZ0ԛ c7|FZ/>_ Dj1^pl9"]@Ӏyeh)l`ډ'\! 'i:0JtM7Z JKT9mBgK$୐'Dza"H[b7 %7n?ĜĚ`1S ;)N7`6}_]nu-eN-X2/7A#zxRӄ)CE Ru%~C$ wD?CY pC@ȺEg,zNn 4*:v\p:l7]MqXt,&+T)^ÌcK3 &)&+i]_5 ,#njؑJc/5&@2·APTbdX/$G0Kκ mTD ^ȗڜgo}P!]W r@bTzAF6¸h[{X3^eh~Fr+~]ɎU*(U5m_8N2_v:c Zb)jZ[w#ֵ|- y[#:\a$`dvm:mp'k|&ȭ>;,BNu)#FS/ݙּK"da78QGQgnM'ܕҾ2VY,41 Oi>KsGÀ࠷a+>iih <@c7ڄiID‚1k&F3Ds9f8^N+Ew:webgmB aY vr;w-K?lH\'6Ǵ)؃xMy`$k CS:|: 4_wjtB0mq6ѝdHH0r~krÜ2] ZEanZ[ kdP9SVt Χr64U?jq-6  Y4L{3$"vW5Z1u ehaHuB\vЫ04JY;&쏺 Q7@bNa X,Po/d'Zjw+ȥ!U2bS}3@\nR>:Lr?]Rz<6ej2iM6!6nHg姿?6CG8 aɡ}{]gGKN;qZA'7{ޯ{IRS9 `=9 5/ eo..79Z]sS">+ǫ~¨6)ƹg(8TqNiū5ea⾲Q[)bg&:}:I0Ex߯cCEQ^u}1жb{{aiC)Vg>j& ΅\o8ȡC "Y q' ~_rZ}x?>Ojï˱xFPˀ;*E1 QYqxb5]¤SVY8*s3YLkp*3ʏRl.hZ\oErJV=HO*ܵCH$<0 ,in>uFrߩOm [o$O5S/i-8؉7[*8Euo3 yc|bK/Byoo"D`s):YwBk$!3{|P i(xGj kt¤łwmo7[8eXF*@m\bVmy+S@C#t$k x9"^&[)A61ͨl).) >^l!crG|+i '"k&|/CTϰ8u,l`jȏc:_LMgK&Z4Ȱյ 0slTdЙěVP?˺ھE_HEuQRL_?^}?癠8'>T}I0$c.U}1=}/l2MPim&~G'bTzE=CCtԭPV;ON[$(%I:׆e-Rmɂ]Z.?|U⚼&)ק, a*˜OV{?qҪPSw/[.!;c~.}Q-Y83 %z|ԣ؜`w\BgpHDz%R) [7țZOuI)ůqZfcRwDV!*wltK8@SQoy?ٲDS-}$3EiԾAN|@|-d΍ScO@;ʼn4n5z.&!­F.-H-^#uqU@\P~Ӄ$>qRM~CR V&GᵒTha؛u)x T0 Y&'@NoC󢀇~@1pJbddIN[nw(Hʵ ̸TFw|$(P ٹNX&8j)2jq׆hޣC{hӟԇF"2HS">p8wwi,#CN$Nxo9P} /I=ߩD22)XF_BR`3q9 FQx /3f˲sqv47Te~ !cvEHwM l2)q.fz]J1"Vr=ʓ?ml,]Hܬ!msBAQ: l7bԣacxM!tQb6D .FH44!l;>g>' pk+: wXv9ldுl2&ެv /Z/\ ![he\#0čX([:"b'U-!oFv3 \]vrXIe >E[ $R rpS;fCDŎKъzxƘ^{aD$tV?$YY}+Roqm-|ih6ݼ7y&.KRn1XZwVD)KU۳ق HDZ02$䡝 h໑y7xGvfm"]xMFlx!m|cVBYe%Șk&I:2ĞeSt);SLؠ9\fV0ƥ8BQ0*&B2.ZZ<4 HGt2D_1ur4+ߊ :AiO1]ssظnk;iM^Xy0O9b_d$i3* ٯ‡ ?dp) y+9`'?5@˄_,s_28Iʨz ƃ)`%畲W:9Ɛ8]Ӻ d 57F^x7mDe +/[["ګHbմ9A[ˌ'p\mT7kK9!$dJZuu-PcmMO'6)"eș7w^av~^Ѷ:{>[kJ(u9|j xP%+829j`cH ݗ􍸒zAy ^gakKH(?:+ID?E&"Ɵxܦ?>1qq 6(96}ٔ ; _C\4/#>U@(J{IPv ~mf =$۵"fOX3tou?n{⃊f L'bh&}vL1:فsϻx5\o(-ȉ4㥄 OO4 tB8fcZQ) sQ'4QaŎ&YEW|795[@7 ;mȩ.fZsP, 99k6Z^652J&ГCs󊰕^ak"OӜ}T<|iܭc.N܃~Z~TAiE?mߌX{1f1qe{b8SLJڂE&.2@_.(2Kr>Kjû !N| 3ʓ IIkI&Ztae r4@unNZ#stLN1Sjf:jC[?R L䟺) `DŔK /٢2Ry% WZb(M`G/!w;D4l0%mΊ$7ӿm;Rdi.Oѣ[+)ϻ~,iXzYVxe@blXWbؗ3bҥ̃|!]TQZE໳ &p6uW]d)[RY@ MV8-m tI`ΌFy}Np&xVyUGnb A Dzzwk;I{@F4_y\!baLz y lG-73+8ZݸW3",MS塱%eoya\, 2l6_x%X# "!L9UO@ cфe(1䊣~{ưId77MȬq}'eT%p>bu>mZs/׀_9N;4t%4v77c{j?%4ZI|J$!4Nuocit_5U} #Vr^SYٲȯ#.)-q7?/6WB!t6Vҟbn҃j|fu>oX[@kݗHchJ.YA[8oq憫6zҍ=DžGߥ̠y]xir32#s|/<\wRBd:tkxPlg)ऄUBuAь奔(îސ zxvF9@&;Alή 1tٺ8+WkRXN ׹ (Pw'Iٓdʞ }M] !G'N7gaeYfv]2u ol.j#͙YڭbI/M]M<]wAͩ˙i%|j^i/HS𺆵 c I&̀ѽ,Jz)Bzq!]_>TYv7{z533peh<ܣڣA.]oCsu|8vzq5U#f?I' 8˒SX%? endstream endobj 75 0 obj << /Length1 2343 /Length2 8923 /Length3 0 /Length 10286 /Filter /FlateDecode >> stream xڍT7Nw#8) ect(!t7"" ))R  }~9{vζ{v|٘uYípg$/He`xA ~66p@( `$FZpg#O','"A p8@hP767fkD/r'&&r:@ A-0;!0(?&8%Hq ӓ GJ߻!P7(j 2@;5^6/ P GRqw"(j_`Ϳ9RC p'7`st5y^O {a`+W`  ҍ 3GO32+9[+H7)P t9[Lh su)A~lH@]P/o/!O6*_ fE=$A0gQl_4 ?> ;;zj1P]IG")+{|y<!~AVquclv\p4 GM3{AB y~MO+߈9`'4#QGBR5$!rζ Z_OPaP]@#CuSP%6!p럫/$ #`oj|zmDPl-~Q""ֿ hMPH0 FV)~89F@1`j-7Q*_l(?x1 BP!Bqr~%P;:3jQFQ 6UPY$=<3^S y~("jF}b#|+Mmã%(۟6cXοfj)lm{{A='T$Ora D҈ aeWɍO&2*o ΖG}N&v8ږNӰu* :j rҍ{)HgcpPKH azMȗHY:/鬦<^y /NY!Rhm2w}`6'H)䰫? {[A%vx烋|luCԣtp|p}sޏEΏ^+V@6{wbMN \;E&oϟIGz(3['gO*"Xt<KFV&T\ONcm8\?'V)h>_z|l q|f } j^}#6^YF#=LfML 9|װ;WS5 :cϷn/AG6\,ViRǤ+ʱj#Bl2B\ NC ,mpd6',ҪuQ{uq<7E+fO_ƉQT36譇0wgo9sJoiö(sUHx_ &x:KQYc*?I[I~J0ؚΆ}I\SgcE>M^k3-UUP{יu:p@$і[7+Y4X%pZ?7I#(vE՛jI,n:\Y΅nɤl )vG)2QRW/(d.`oGU($|?n[$ׄ;?G_`GT{ĝܮwf´[XIgҶֵ{ 1fQV>u4?>nҤqʳ Se0&WenM;YGй*.x?_oG#IeU )xAز}|ft)KȊ  [o0<[5%`擊ʪ%XgB{Ppe f&0ޣ9PNb5b M:Vu(G[\-Z{#l35詐4 VVWzGxq.e2nG-Mn^'o&%\&[!*kD6\#ǖUg!DL}gQquXkf)Xm1ܷjZC`S+ 䣢 9?H< dX5~TZcgKssT Bq7+Ǻ!q[1޿8Q_8٘==~Űɖ5 {C_'cJMs0KUBlKlM#4 -GxM8K _d[aQ4$ j! 'I_'iyIfss[%^H9I6ٌc)m; mH?{%u<315#H́0Z6vpu都'k0y!m!ic^ 71c8ihLKO?I|u=cڷ87;Av1zRS2H|>03Kyvb<|M-aĞxSُӔeU9*WMHlz@Stz;1a*A |Y} {t[x&ԆnWmLrB!JZ,6ż{:x`$ilת7rtv/xnj)`[^>p9MM]^+udHR"-AޗY3.O1Xk%Df` X>(l{uQY_Cza|D\hHck`ԽPeS6$߃f`}z2m]e!z 9 -Q?᳝*kWr'{-~eJArIY-"9nQdJS }"NskOB*9{^'fyG= mSڭB9@UWx4{BaKփ{Ij^v 4q|yq.Eh;/_kR4h$h,CNNT9=J 3nc\N5J%L:zޡK%4^ 1 8 yw̹~)݀2q@hm"b:d15dZ #-L|hu7dq/CH,oU MRk9٫M6 ?ڶPPն^5̍~R$d.]"+C[:wqtUgp1b3Obrg_Xp*?FH `UlJ#-C,^vp0Nr; >n"rx7l]@^}XF=6=uc+0]vf2yT_@5f4d0lVE 9&jZXm._xiuǻz伣 r*JK^9L,No^ ` $F[֪9ܓ%pR}'xfic ԄʲՆ%,SB-rGmMm su̷K%Ƙ<|#|[\!fMC*f^{Ju",4HΕFOW Xe&]y̑K`!C8s]F*sRYN.ܥk>x.UÇA)X kr Yc#]`O]<-Ncc]b+Jej=QÖ1ߦ浝]7ۓxk,"LDڑ |)pj+ظBך"[2Ք9՛Zv% ܷMԨy߳Ҽߍ{[Ss- LlPi,HQ\,MdFJݐ˵FpM%# аAU/(;HJbϘ:Άxx>ra'S(\=9ܬ 7&0-fmÙCV8?+ i܁fwH\; ' O0@u#FlM/9Qhz!]] d& C_ry2O5sl=h7Ws]{tzwdsC+hVG_L/hie H?RZ.jT]&\n;F!:962_Z]b_HO ~EbQl|F%cE[|5$Y1N6Q,3a؍.KIXٺKU ֱ M$)أ="]i &ҷO׌0ymr|v~yRaeUdL'whS \Lr]6L DZrjKME= =] p)਽g Cji{>V[4r)Q1!>zncݏ!o.vJlz2^+[пvHO3Yx&횄v4 {)o*Y)8`*5.Wɦ9 h8q) w>1[4N(^S )w6{ftDD, _w34atY VQroFAw?Y/ȽS Raĭ<4K\aiqca˻#meJ0 )ѧGP(Fx-8X!? +=!xEt iYq70>nPs|lШ꒭Z\7wcxBݽTiX?v*(ҕ`w\sfSPFL[f:[.5mUܫ #&]%H;FXlP(gͱyU` #-+flvwU)D%O m,,{JDb(bv!퇃,V:!]_S{NUE'ƇC]LԵ1emwf\* m)t{)J~PY(P,YTH~=aMxXWҘ3ZF[  cniX}07:4Gc; 2HɎߧQ3RE(}k [_9erx~xFAA`Qy^ ӎ>aظB_Fk+gʬ'\%⌮(P/ }gb0H=9=ĉ`F$_i1`fY19 uUf MДot:_A,OO^iRMQ!J8(ϵK{ybdp0wx`FVCYl٣Knt3"gy%u9Pe={VLAxH?H-1nm>E6#o.KPnQͼ!*4LHO|t5RB"ߴ#:t "fb&A]]Ih[4{74xrV5 Lh ^+ 3tH:VmZI\yʬH.ҘyzV%UnMOYpSt'I;/!{R}qusb~vՌ3VaMe2 D1^pNSa i1 1MWUK3rƜXI^ w&L06>g*xyȾe==6=NN\@, ho?`}VBu`ي49/#!-4)\" Čk-yz'/X+Bj3~3b礆z6\W- a*=GF4SE)x|7OVKKm|IҲr<l.BVc1W d (məYڴWL髙yw`.{cXf֬YJ”?KLP;0$ϴǹ},"Q'l6._-Iu1G8Hƕv*o 7F A-m=74Xɖ6G;c:oqP=a#|*9xi!b-[Wg)+*+5<2RDApt+7roS&)"Q\Z]{"c7Y AM±[~<'Zx BnYt-]\f]u2? W5'h3Y PId^@A4Apur}SؠǛf/$xC> !6'6n?; e16K7e̥Q:MY']q}˓-fV˻Z>t:*|{X /ɞZ922 yȢ8;U=lbڮ\v4j;G[ϲ~䋏'I3! k ^=U0ס|տ!Sc2e/r+='RPڛzYS,X:BFp}7ҵPo,ҟtg{z)c*s@.xۉRsEymnƌ+aFt'ZRe"u%[M(LYZK_@y9z51R`9mnon_un|z_bȑ -p7]3RX¡% {dσI(~f4'+%up_$zbǵ]^1;$]4cn=M.qǣ!vg [h"]F{v5?r-|{LҼ^E3^X^&H|MG8j'; ͮP$`K6i4OџHc(&VڳHsUZ_47o=vu>m˛l0ۻ:xe[0**=z 7/݀HV ktI:_bCSC i 8Kj})8όo5 ѨxGer6xڄ|Ln+p؃D0R $ٍȬȴBAJÈU?5۬\s)hJqIMZn#ASl\MeWʥxzx8ImMy& ⾤XJO'kzWލ]/7h|Ep'};=aĉ芸'_WmD$lɿ5DRc> YWm>7 wRU SR|0 :Yf+|$L#<7Z"x\XCWOCGBmH6u'z OITi}m7adHRU#po/I7r?X2G*A8 Op$=&9mΘ=9X.ⳊBqV xz;A7@ Մ~?3؞3(lciU6l5+Ⱥ~e >WCW*SAbOUt Fw7H+ٜ{6hC1ȱ,А;dp)t/e/qJs*D}S%6>CG+y lR{M4)oB1rGLwi Ed^<1esFא!Gdg[ T a ;xK LO ޭLA{ӷU9IcO zyk7> endobj 8 0 obj << /Type /ObjStm /N 56 /First 448 /Length 3341 /Filter /FlateDecode >> stream x[[S~sT.U*@a ٤``>k0n~h *5R[u58( YDWHYȠ Y*GFBվPe(-B h$ JBBj J+qodji]a+)V`4 o {WبK,a&΁[^Z_XUx9M6A\w DIu CiA" `0 *<7z 5J@.i` lG߯B ϫؘ\ͫ`طMn Lh>V|*aF@`Ze A  `QwU`Rq0VlnsGշyz뮥ZvF-}g|5yh'~@xj dJgZj[{8n` _k`Zy@a2\R4nX ij-In2Dj8AnXSGq%Za4Nx||Lm8­N4 Jw?ABO 9{ZϱDdI Z$a1M/dn}>mﶍ}.o@ՠ=ZLJ N;4tƥKi&O-)!mf^1KheSHmj TёAYVԢ_??O4=<Li Pyl}m4d;LGVXX"k uNG.l%x$nkkVŎ}ڤy-d4<Fq[:pg/"%EQ =E30I'C9rdnw>m♵,+\3tWsSJCp\@Q1@=\qIZ,$0%1"|=\sTrxmFv[<%ce˱d?%Kޣ kxFBFj Ƿķ,ec3ZoHFslڢx:!:&}ƅRMbk]̫#cT*ӼtYtkla2idSTa#3UGo(A>[搢J[hV*xU+o 7R;tCKvyB6lGE%3BO+Tr {8q >EP ߴG R}FGq*D%/#er3BX\+1J\j:_LJ&UFLO?B YގQEW14 J%B 0br\MAÍI[nt+{UVªRz6wA>$(G5^RtDžRrWWpSv܇{Lɘw6.^|uVMgiBŮ{;NQײ65Σ²'lnK/^G{{ߐ^t,eDjЫִjf[۾@cBe|*v]lJ{q"dxߩJ]ƫGWe w$Dߓ:ț9= >U[ }+hh:#.l~1V,|\llGJm鶑n+]tHK:CW phnewn`mnd[q(`#v\):dԿK} s~uԎ%gÓ/O7Tm~'p;%]G< uˡ%ӱ%\5»uBGrtk\e؊o٬Dr_*}ϹoM$o ꘜkH endstream endobj 79 0 obj << /Type /XRef /Index [0 80] /Size 80 /W [1 3 1] /Root 77 0 R /Info 78 0 R /ID [<1BD0ADA3BC727BAC87AA2B357392EB40> <1BD0ADA3BC727BAC87AA2B357392EB40>] /Length 226 /Filter /FlateDecode >> stream x;NQᙫ / oKPԄX {abg"’%k;:lf;^ @2P]s]WbA_E-.EGECTEL,_DS,8 2D4x&VDZXbCl-9MouᓫD']ebv%摫B|~ٵOiuH~t\G똡:axtk#? b% endstream endobj startxref 176128 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/hop.pdf000066400000000000000000002305301211610345200245620ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 464 /Filter /FlateDecode >> stream x}Rˎ0+L$l~"Ag,q u'N5 B{GX24gDtu@?%N/#Mk aWa6= r]Wt&`pD#i%/|8&kw !˶C&X$R󉄥 am7R͎"Jd$$ψşKI1ħſ%F\/mS2U+dq#<,tYD{xsm֧SWŶft%%WşI׌yz4┝kbWη?0P dyulM) Ov? #iJC$)` 7.>-SzT[\b1c8dUhj֢jh_[CAwJ&ߍq> e|o>7@i endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 1 0 obj << /Font << /F26 4 0 R /F28 5 0 R /F30 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 10 0 obj << /Length 2064 /Filter /FlateDecode >> stream xڥX[6~ϯG9"@MHymz,Dd2=dvIoxO&XM$Pf958fŋ]Wze"ᜩ4~|1Wj-,,Рl__gmEmhhMc$7?ړ=dil۲~81Әzwm{14e؃%}:#uӕMDCvhV+IM= lYqFndI2re@$}sW j;]U/4RSp":7v[7{z,Yoˎd۲e5v%3[ZBAR>LNim߸xlg+d9zYkSHQ gPo+F2$>4DN)ll69v#rZ'":Ӷoyɱ tK;'Ru }M,*[(8KD2,d7-PxaG":'z0϶mK wKR~iϦAZQ6PILS RJdWmm'(֢U{jО.}ΧPvIMDz;.7L*H:˲=rgIS C0UץYG2 aj+Ga9s!@,_lgX:uq /K!Y a U@T %%˹p tP[7']=f(鲱?0Nib& \Aƀqr[xhQ8#ä )Y=]uz] Y;*L a9YMpX_BWp(P‚*Ӊlu 8DTuS{s#}QRڼo,)yDAɌ_^ӗW!)$}ˡo=8'F'-&YwGMq& w$u dGSqί(R,3Xr%jg7 &dK}_ "A _pKw Y"Z +_ۼ*' endstream endobj 9 0 obj << /Type /Page /Contents 10 0 R /Resources 8 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 8 0 obj << /Font << /F45 11 0 R /F26 4 0 R /F30 6 0 R /F28 5 0 R >> /ProcSet [ /PDF /Text ] >> endobj 14 0 obj << /Length 2245 /Filter /FlateDecode >> stream xڵY[ܺ ~_1 .I)YͮXlߗ)_fi)JHJHz>~2FM6wMЛ-Rlw2[DMYow*y\?UI4,~ٺj~RFJQ$%T&Lv1qJLEO8U]H-Dˮ{ڶ]'4 D~{iEݿOY_ʡjw0a҂H|( ,5Y'1-|E.âa~uRYRU@7{ hp̔HԐ`.Vp\ ` ([9Qe@< *!)).X*uT:zDn mPy=2Q̇'jRu{ /دbsܨBK[3^@ȓPz"~(GU LՌq{Z ]OF$FQl)zw@8zox)~5Hճ!$L;h8 ._nW p=Ce۹ITӉPy"$Alrו=Eؼ%HWUK%Y D08bC@(pBiQ%{>UhR |m9pt=ѡ8(Yhz{qt;z.~Sxph۵{D>P'\s ,ݘB @#l7G*G X8֛7nE9XyYd= TMv^<5 )v[ 0 d*O9ؒyQ,~ʖ,ѧK*j\.(.̢avdᐩϒqIcU^UZ#Ed UFP5BA U-)w0gQPvVh7^%.y <]Lg1LF+Óxw啁#$BWBoݥMX>Y$ǬK>1Oi& 4%+QՑuh!\=3q?hC{R *SI,AO6ҧЊMH8~/K4K&_!?V<.$Us?\ƀOރ/BcInaKOo O<ĕճ F?+ԿP* )lx~%׌O*]h5ի8^Gdj.|x_?7{J,HH;cD+ CY *"-T {2YHDbFMYpTCC ĕNHlEm$:]l 3./XZE'ju:YzRN<"j'}Fn׷h4qxȜS+02|l Fco<v$XǵzFx/GTɜy_i|^Z>iU2sY?Shs00~-*1}.x:2Ƶlk(|LN'fV`_A=e9LԃϦbcd%/+ Ay-^\=Xe@q%_WPPt}嬣3@cռ6 o[q?1a ս㪛*C5 (6yT;ɲֺR@@{>7S@ѧS`;!P{{-<3Ȋwr=TaC(1Ql{}pKh p[ endstream endobj 13 0 obj << /Type /Page /Contents 14 0 R /Resources 12 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 12 0 obj << /Font << /F45 11 0 R /F26 4 0 R /F28 5 0 R /F30 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 17 0 obj << /Length 2349 /Filter /FlateDecode >> stream xڭɮBG h6k02< `@IH"&i}j&)y k盧׏aQ8<6q'ޤQgyy:n~8fSCU޾~ձ[ި8]MowaBƱyEɡMyy+*>]C=)O)ۃP֗G\ߟ 6;Q0O0CEݖG\&@=o۱G$臂C$2 U}xYnW:[$C\.C5BC+'lKS u.xw· @ac{1T*0Ђ =-_RIV~(>Pn@)2N]t0>:Ĥ$a: #mWZ]5:`io',b@-7A|Aߙ^ ]g|~Sk섾]yX!ȪD}b+is)G)SLX`~˧{r{t!DECutm‹OSps3hh_(׸N3?"5dBbUdIq >S~:pp#+dz] N k\AhIZs XuW쪲YOANCFrO? әIxp Ǣ呅X\!O¥'8hFV9RzB? Opʏpy`so `0l /l~}H:aDIUIj?ġq3A|&84&&\!fRǞVJIZHX 6O29G1N!hv5+5abzsy9<t';rHL?0H%`e7).D,hN鈨`))Q8,}8dh8?1/).L406T4D\T*(9-VAŻ*;K܃ =CHr i5xL'eo$S%~/RK(>+(R>*}ǚԾ :$e,11]4'~UqjպV N0ڂX4mA]}w[rq}v;e FSBOQ9):%F G1O]3y/׹az)ѠZY4tǸ{ ?[!lSUWdAN춣q>zB! ԰7oS̘#rv}V [ȫɵdQ70𿚲~duG"Rlފ]ҫlVE= X 1z@صMҚ8Z endstream endobj 16 0 obj << /Type /Page /Contents 17 0 R /Resources 15 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 15 0 obj << /Font << /F26 4 0 R /F45 11 0 R /F38 18 0 R /F30 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 21 0 obj << /Length 1576 /Filter /FlateDecode >> stream xڍW6_JdUG^FЖmJs!wdw,p.=Fq` _qR5|)D֤9tKݐgKhwޟG33E _2 a"#z畂8ر@ 9S{pr%8DzAi`Mi=*0# uB<*Ɛci3 ./_WM6TW7T00Mm[9DqΊlj;>g.kw9NNLJzg#iuMkA ]vO]ѵC&k;8O& HCﮮEӡ/JGp+(g_THχɉ\ '¦  #R7l:F!qB eO lp PY;03eIL$15\,'; 0^vi6KS'gf) ]_-CS,(ڹ!x? SCI}s6;ش2Nc˜;: vNDf9 HS eAv:3J~x:1<4; F 'M}O#Pp Ci1= 9A={FCoZ&ЩS'^RPNO3szsz3kS6{Ny:ۦU" js&+<N&ۣ(3̡H)o4ӼXՕb [7KvG==C7٤ v wWD!ME<::Sa= Ʊ舜!z%bژ5_XqJi()x~# endstream endobj 20 0 obj << /Type /Page /Contents 21 0 R /Resources 19 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 19 0 obj << /Font << /F30 6 0 R /F26 4 0 R /F45 11 0 R /F28 5 0 R >> /ProcSet [ /PDF /Text ] >> endobj 22 0 obj [500] endobj 24 0 obj [250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500] endobj 25 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 26 0 obj [611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 27 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444] endobj 28 0 obj << /Length1 1403 /Length2 6029 /Length3 0 /Length 6987 /Filter /FlateDecode >> stream xڍx4ֶ Zhчu{NDc0D{ !: G'JM=5k={_{p (!mHZ$(i PD&0пD&Pw ;ؔh P<@"H\ Re'-xD@QDJHWw#S[7Pp `@v`*Bp!}#*%$%vA "dy^0#{B(t.?8F0_C= ` p@aB<vPw:PC E Ht%!~!+C8ap(@WUKv`8 {ap-{`>a sEQ0/B`ڬSB@hѯ)ܡL}3{eCa*dy@5`0&h(PRLLG_|\~HW=4f|P@  B`gǘ1X1>(TL PSQ H H .. guoz`؟GF =  L&GƆ :HP\@!,{Gpo?_v} 0z@cfCCM 6^ 43# @P0o qKK!Q_L_>A1~g]ikE`wwF(U;oH4&G:X(@#1vxc0^u( !ABÜ^(0x l୬vF'E9g9jgM)ؽ37W11|Qwnrz>Ko]P`qI0&NqDfckb:s.#rPr(9%gMg@)ub?1ge_E?"naakhimn_Qfo؋J:*ytIPXJilt.86? ےD<to>~QY>b1.Dr99ڑ&]t(ZߋK \֞Bka/4?snLK ||(gv7]auZ/yҌ%qmPO! dpYG& &*bZYd5OB^TA~^[Cyɹq#Y#mLBsp)rRJ/L/= iI>^?@^~KMD[C!a+·6:\a'gZS=~o#IAB]CxtjdwL3_vpm{7\RI +D[-Z'=O,ΤmZ}j9pQᦨ M5.)B;S8$PmxC BѾh.@Sk9BqQ/ 8DU⇧ȇBfbo}]_n[1(hE[)=h(4O~Whru%n-rEK9R=͏D=IG5A߆$9?0aa2VI=*jI> gQyEmzɬgX_$DPRMi? Rpc.G}yahPeYAVY;8Ϫq+ԫwPFOJgu9!}r\?o"epc o*ItBYϋ5:$JCT&ȺEּdTZa륕*7eN4PJ+Wv$#%pMgkV8׳®Ϧ,Tu憜zHd 32Ө-Aч1n/N(h1ܬš[ rWËIlƥr'ur)3a➤2z TY|NաHZf}kG$2E' (>5ANF\tl_㇓~YYki;3P\J>k5/^[B%Rjn\t[74.91$}/!U,n9c%'pñX`;h4b5y|dI!OKhBpu %Ydm cV}[ 0d+NvaeM z%(CXX2Z'xP;>qVNi)7"5?(?1FzuE .O} ):p@}|j]) ج2Yg[|'?ES2Œu<{K >L4X껞v'2wK=Lտ9,LCOӠ*M<8HqKYV-)ɱqCX?զ }bjjx3rwSWUf@K#[a,!>.ع./jJ> 7!汫brԋ߷j~89n71Ii+ϹADi.F@x$wvmX6XDf'TkFKjYǴOu韝{W Ǭ8ȁ W{.amXd.ȩ{7[_k@ Oڏ:wA@B礱*w3"!,*d:G>GbMty/#xxH"OKa)5dEI"8tgX$s*8xĒjO&~1~i_<>>*[G,4qr%-B}S;f~seBЗB%*[tS.T3oԝZ̊ {D>7qFY-b U>$յZ[r灻(Bqb^2aL[@{Ȳ=Hud2'8Iɏ I3[ɻlكh;!حiTެEGaeW%RO?4 ~Z6J]$l~8fM/8r_:6GT_*[k)s|f /B S(`xηiꆌ9F@Be -tAjk ؑT/tc˃Hd|MZzdH>.Ef쇒*4N2DO,yݬ&9+V0Uwb֧=۫nXV^/Oka,Jzg=a1a_zMgEIKݞ6jўtz_3 zTFaSu$+RS"sE=+  A\.{YƟ%]Y;Kmp̔%+ydYq,b&Wn^y?HF;;sIQ._XtҎg"u;"rt a#n9hBix:ì{̚Q}zʷ(csR\S6~M}̀o׏<#rSI9HH ^͔m{*BUEK8'f-zB m)t\"(IXŢclsqayY5W/L%4d=K_,Jh!Q"䑲Yw迦O%Tku6b%,b]Z EJ6O]lGI;<'ҕskr;co$׎^t;(<"h["WH] iEt:Z=K&Ij}7śuР<ɚ{81%]Wv*wO{*j,rk,ו/NYL.i ~D"d>{mJ=s6O(oi<AG6V^8UDo|I!Ҋqǎ7M]3w^r#_= _w_Ub}#rȾc魖bw±\' LN }plHlプ:0B*\WtEo#̫zf9$^[ڕM=dV0Y ?4C!RL2 1Zt+%!.T ߳b, F<˃(v Z1SJ%^O!{ZN?㡏5+#;|ݺsj\b^GbfȻ5u#s,KL{,vƂTf"S"XflIL{iԼ|1 _{s"g,y ZtͰ3Pس Kc*u!{T#wbzAB/𾏢x9;|y4GX=#[lg\_YeE~h{۟[ML3%פR;s!LnPSO.K~xZU[^l:DxBFIC%2`Hjx^xYv56KߴYշ{?Z!NJs˕ssc {;2Sd՟=WE iƤ ]Z%u)r:Uzj턜7:83-nN|UNѓg\hԗ`;Hr0q/h,ӇZ=w^G9XpG+fvPh5b-hk ~jɗa˂ifAgќyK"'krTUGO(νʨPꥪ޷GKI:$g̬WxҒe` Y%WDS8pHG1R&v#SYSSĘG&5 _+,/w1r^+/_=}b+Ք6_:Q8U9dS'8vd`'=b7eTo F?liG:Vt?V^.}|>V6L+Vi> endobj 30 0 obj << /Length1 1612 /Length2 14549 /Length3 0 /Length 15387 /Filter /FlateDecode >> stream xڭeTeͲ%;mݡpٸ;V8?s8ߟ~ceD1#sENB/lbgugf`[8+\_Fv8rrQG34,,fnnn8r3JMY,$oEF!{ZZk}n;,;nhcar6jٗ L L6Z8IXM-_]hma R_331Oֳ5O_":wqSQZ!"b:,\>la;@d&?Z?lhk5^K_V[ge8ac /mT-*K4x ahhX<ߗ9òM^RnPtr2"fiD{].nAhs0L*)땼ALw:\>Rc=#5av4Q$?>Pǣ͍%5M9%Nv0pk4|qtU Bg8Kns&n ,h!ϘSr.W8ߟD3@@ zCw.Ռc Vl=m϶YO$n!uwc.1ֹ~}0nFE,7kG}@懲I-xj'uZ{:P7?xsqd.0hFzUzgWg_>HP< 5o\} 9(˭]xTߚP9s|&$ZV ( -ˡVH*YGo@:j&恿$~w[ *}fFf阖?SZ"zcU <մQV,yC`M $[ uYr {H3Ħbc闿9ƕ kZ m fJuilv&vW|Wޚ(qk!ˡňOBF:cI[(qSkj i ׾6|-b^KLRqE|/ENl$#`xiy1*8pnsg3uymxÝ4_଼qv$[p3 A7b:N#ҷċxtj  ep٪kjW[Fڇ>qes+_g tuvUID#x#Z%>Ƃ&Q 5]Vu;OךIZk~`] wkY>Q>Jl#qLX2jJ\;6];8E/'$Xv3Z:{ᮯ}@м_3tDL!b4+E-^2JhThWt^,ϖkǡ7!+RJ q{ڥpaC1nWI &s)ЌxՆڅ64 3}ႦwW> D Y>%y0>u3GcT Y!l'KñV-> ~4%;+TIf\H٥ P0FX,J/vAEdW8p$O}a5Q[a%m,ܙ^:+ @0's/gXB[')J(ї@xEDl+s%Ι=1N+jC$Bi=M] <7?V+.$5ſK ͱ!nT l@'EIq2KRCI ^2F^^,W = BaQBTx &7k{CWtMH M킓 Ug-4d!&pgz`ؤ&mPCPh^_l)&}mͭB׌muhh '{Ks44x46r7QW|? s!muJ.H9xzH[ɻ D?8 G+!~}hTK+~/%ձ3vR XO^k/4Ww:9(Vٻ0SuiTYIwґ*od|AŊsjYՔ _X>՜H>n x>(.芾"ZPyJV7K9#'4 V`$-f>  d,Eej!\YWy0y#qD B"2%# Zw$+B͖:2̊N~ڭ oA/i/\iTGƕҵ"ilNC6l2E/Cn;|`ȼ%'ʓSb 7 @l Q͜(̄/ VċU(\}qP|2SQ1@zϧd)Լ5+-%m~M D!Q6z(fR$uiH1-o {T?I4hs t8+4/>=xa>ڗW)²N/>NLՔF`n2 $2"J}y?b=̖$?&>8b[ʌq3b.k im߭_if^Xlag-)& Cp`*Z/J1>?]%I-Q\f+R<;'t=? Nʊ\u }E%=ngBH˾#ŪevQx1#|l708bEhJl8ӫ_U*:q}&1EX4*i\2X7N{dߡ>°%eb9́ %gzp3hl K[vw1G3N05P٥bY Fn){lf&a;,QYqB>YBgR^5ږ"CX>ݓ _ ypw%Mj\iV7TM!!ruȇ)w=QPH53y gZ8_HZcCI35q&e֟3K@͆2o;byw_pŕMkDKY_e+QBJ=F!@#j\R PUəa.0eI)6cWne`g6{@ fio(c+'`ahy<kb(m0Ukזr~`S 2K?d0k E! :ɖ#5: r2Vh҇fIufo>r #b 0%3E 1;= 'pj=}z!=}8a5g엡g N* Cy,jճV{aeV{|芤OwXO (6{R>T0n. /,fJLy84x ; K4$Rk_D7Cx?7>_de3ւ[Y[hzs(fYN2<ANjDPӧ!D޸eU >\~KIUxJ7ruuIar }}RTsU&Yh*1wLu<C[@[> 2 ׺{yi~)lF%7D~_>?r!c!c18rJn#x5Y $o_'Ԟ@>r ٜ̈́wq8(Ku_Po+?hoS1Hunr- TfO(֞&;nN W!CZ Y](R}&@ܝ_'I6{BQ\[OY}O溹`򮱋K~].ݬ+jot1N.Pԓ .%?S-;ngg6q.c86Wy(]d2Xio7Ww8IM{UyV|!.7Bfi) K澮Tk8Bf}zc% BnޡCYN̓"úGAu覦hSst׏$f,T|5Fq^,ŰKe a'.3ux鈮yvć Z-tAFN?grG@Ώrvf{㏳džscƢ2)Y>)Hjjes^B9qUf:<5%:\ emqi9#%][>Hש:I,}6YWtW9wHsA4*dC2zIp,N4zm5w4M||1%'aay Ӵ9Yzܖ}:]}P,Z g‘1{gEјAÏl݄+G4qKU8` 4J4訿>菏~K֑oX TEWUv7ѠJK&%IDx W ҄V[_`'aIH{K. GatR0"՝92-U2b#K#Ql6LrΩNJ.,S.hrثoz݂JJK o@ϜXsCJl'10e{j*J?cd/w dpՁ+%XF ܟ3s)ǧ)"fP2ڬ[))h?aHc'Zuzwֽ.;D}c2gUj…-0*k9W`&z?JNf0?*5g]pc"Vi# $6(c'kxD{F_xVㅃHUō%&+:z#לE?~רƩrPd\ ڐB*r|c1Ą=m@f#_05: p❻c. +D.:3w1$6>E[( Bw+4N@TJ4H;=/,Z;GC8{17$,ft4?ر(Qɪ]θz3URdu$d_d9X%Fc8!he܃- 7=(9vND|~8s`>?ލ~y*si"KW2%CbKM>ik̅9U]"Ѯގ5,Kz5CnD]!xZf-g+ ̶h XONe!:guA3/^Ol@][̓B7JEj>Sx+'xm'CりVO5I`E23l`vR]TnB .K搻pΘ$2Ȟh|hl'jˌ=&ZF3>Ebqh[ClT5L“j_2́nobdvA#{7b |&U7H -3&5J;Np*-i8 zͥŪM52d?3w5S'Û4~0R3AVԬB9 aZ_GM$ T5lÒ ~q<(WR 0>#r)]u?`,WeǛ{ CzNK2~qq&~ s| 3 k(~ h'kک} /vp 8˜<5P]3tt)[|di^&rsB^ςngejc6F cx7z_| uͲB i"t%y`baqmw馥F$>u[lZF6D`؟g*cdI+MwIkO>9CfKQ?7ӥGSjMZqlUn #وTzwȋ/-r f4fgvfMkQ,"zʾ>/F+ߑmcMچ$G*߼ eSJr>,},~+C e,qŏ+0 Ց9qSla[ф}:k2Zz Q+(;њg{'alyr*A#gq!7<Жk8C8_Enps0sڡ>Pː]|ŏHT_;(;_05a~%fĤ|$J>s 1fxt׎ۂӢ2R5yIj#B//7@f JmK|sTO܈ͷO(k@,~^PBF4v0OsDfc2ٴ<(FlEn \_A  JEp8jU79!=&'ˎєNsXe=@ 쉁^bWg21WB$<G\.UÅvkID ^lsbmlag!G&I~fkON4MFM;^{TocZ~;r4Ү3NI<OMB몄yΫ?~kk P֣+B5_}"oVhq ,yo }ީU?Tap1e7dWmV n1Ǽ̞~Ho:Sj+{6,ra}|p LP5hA$bEV~`@Lb:g&6|خHB_ H"m%=*{^5$dMYp\νAѸH{vK]RY:henf/η>'0xvxdMRlPkm&M(¡ PL}:u%06TB[!˸;yt*wޥ=gEaZȼ Lw5TNO]홌c̣ZsSܼi+M)X*iiw6{ AJsRTm;$R ԑ#{WVwYejO ֢U{eQRx4fBVxc |Ab`hDBtQTypleQK!\`L}f/'a` 1iGއ҂{2Lp0HKyI,ʹϞcwtSN&ݳJ'M +]nZ[RSW!=m+xX=~fdщխ" ,:\wZnrg)mC*r6?ϪlY@+d5j!#l)lu }{fBg<gQ6ܯW)iS6|V7RT~/^UqUDx rK/ G|Jfü˄~=Y*[_+jAmlR9.}f0,U $AeMFAvDx]Z%=ݻN u |!Y,@0%_н1Z[Ėed| <'2jUqGa #E]@Ou{tDجiURU >S*EhF/v mW!bϣTjO Ts!qyY  ~:wv$?%X͌9"̲>_Kx`%R]-mVHRuT^`;sF#). CA#Q*uPxK"(hIPZ&D ˾9~pXme>D*eK#vyĀ$`rhqSa=NX5Lf),tKR ULIRaZjD*D[8%52@{$jBo%c:|AӟA<;f2dnH>e1~H=hX)#5΃#p.6[l 2N nU7,ZX@f]OӵؠY.BͿm& t.%&2*-5&:7^YBl*L *Tkns^P;/ *5:)Kut'{і]Pmp{1y֮eh guʇ"f :|P$O/|,8%I] OkpsH^gR`U@us!8H%4́݀#h+)k!=]HOWJA8$CF{˘exDƽEl3 +XwNަciXlVЦx0g]/"Q"7/yͻQ lyj*sJw;HTꢜ|*,O~)JLBqH[c4-Br *Ô!1 a;,?BUZi*L1\nvp6*qW|U<+ 'P!$!zE>m~Y 2{ܛ:l`8B{"vrkë䐾i_T4|)n/ J=%.(9m` u]ge&SD`N%),v,sy=PAz&d:8{7/2!Ç6 ܑ_ W~z 쎮T?*IR{e|A$U}yMak8(1'"?ھzRA7ѣ 1[.qUơNw0fcc'_`=@oUVyWaƖj !ěb*RsNr'EUhD5@`Ɵ7;2r&ҡ2aDs'nҰi6NCM] .ܪZ2VsYMݠVRY_XԙV.͗]Ũ>S xCt2'w0w#+۫GJa\:&]]40x1&){1Y ~?J6X endstream endobj 31 0 obj << /Type /FontDescriptor /FontName /XIQRHE+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/A/C/D/E/F/G/I/L/M/N/R/S/T/a/at/b/backslash/bar/c/colon/d/dollar/e/equal/f/five/four/g/greater/h/hyphen/i/k/l/m/n/numbersign/o/one/p/period/plus/q/quotedbl/quoteright/r/s/six/slash/t/three/u/underscore/v/w/x/y/z) /FontFile 30 0 R >> endobj 32 0 obj << /Length1 1626 /Length2 11842 /Length3 0 /Length 12688 /Filter /FlateDecode >> stream xڭweT\.; 4H܂Ip /wf:wGҧ꩷vo e5fs)Plafga(L]Uv`^yf9&Bs@@`{q4?yyyQhb`'@EO_&SԼy:,o@[ V@SR֑QI)j@'[- 2;`'?39ҜYb8L@3Л t9;=@K'{[ `/or ߀ovo``gx˪,.+_AojlWI¼i!& {g+)`rv5x 7 g?0&N@g0o?Ml=m_@g Ƿfܖ {ֿfE `g?u@Dп01ź(`[Je-[#_9o>khI[[Eǎ-{۞Z4.vZۚNb{7ZX!9K܁ _5́N {/:u+_pC7WoT UWRI^ZX* D 6_aDE/fO<fN@<+@@?~<K {3_c176sqrz#Vy h0 6NHTu8|Q/_nK _-5~ a{i9txޖeo'Ж<#Bq';zVٴ'6͝aUâ'9n\Q8`V7cBT&|i~ǘLoB|H0v1{pvpqЕ]c7k`QXͲ1SYqsih-jwS$R?S{=TMWbۘ:\ 87k,GYU]e;n399wθO\c?M}>~݉\u@|?4EX,.@ =B4/,-O>wѓ|ߴ/ 6A?>~@K)a ejs5 (hq/}g5EʲyU\1=4t< $c5ۣ0@ 'Qak zDߗ{v@6ҁ/UyTT$-zf(EB}w\UrBzyk/O檶%-3BT{bT QxRU $axlf;:a Q]g=u#i.NR)cd?騑|p | Ӿm´ :̸5 n)TRVꌃ(+~VԲAEW5*u+Hnhf廬)Lkxr; 1BLߧpK~'(PtHB-&zݯZÈJ 9l#]P ;IfHV`l|9*`jF-܎8ustTygJwQh>*K_LV5qpP{Slg͏+ J'fC,fD 瑯D~6r5w: ./s(#|3E͛~FW) "VF"wLH:)aɛi@+H_? hyGۺ7V-t$~JVZQH>}5Qc)5ҫ_#<,Z7-m`T.QHw .-tEoWM۬ ` g~C: ,ٹH57໇>_fz %x珆aӲƍI5&t#cҋ} %dK;(L<'ɶcs: B"BPlEk.Áބy)J=i3 ~elfYD)]rlr a%΀)z +]t[~Cjgz&/^+K;} dbuv;ToZ2twg>nO뻞m^p6>5b!V nm3RTq',t(bNihQfEԥO˝F|8z'Ο:9wdAu<7uGB ?m+[0.sac o-cr}Y-O:_}G.z ڑ+Uqh\h{4d 26A󃋄 [u:&dȄ.2 z}'8IZjI)$Y2?Z}Tw![aحCt=%adb+dC}05ic d㛠#XO:8 ZXoԖUԧ, C"zk\UcD"ҠH)ʉR$Zo`d+2 9-jP|/cqjJ,>.jhQV%[]$/F=/C*L&x9OBlmh"jm KyJ7@̝z ٌ}egvש"F&$Ս Rv5Esh6Qx>vO#/]D Ytqw}EGePd+^$WJ Hl􀞳w!1ڢQ:uL 5ji1)Mx^ lY>|$J #haYJXWIXoa,[!pFnywo jlkMt*B@hݮ 1Շj_ObOL3 N/`zD{7 푊n٘[ :l bv9LJsr,Vn=bGc[_+^CewD Z)l c{]T/H_2?k}Lܫca__[ [C͹P?c?jHx,gN1~'L(u-^~]&c]vXڴ4@  lʅo$Pw^qqڣ|ZDhp8=eL͘p)ne6aLgdsyY}σ _M,~:aekPBY"B1e?pE"kҖOc 4Up7FAVx{ɤʈ9f\HwgZDkA2u)xSFr$86:a/*fCqK%Uıfi HΣB?pf )P~OÐG-jdk.qHhtg[҇؄E(|`dzbHbwSgY#on]EPJQ88F)1t{+]ezx&]J̘ϧdZa+:$hϰ`qo@>?/Buiz*c.t +R$_9'SAwҪp62WTY^xz)K 2Qybٕa٨9B _ na9~(K!ᱯIrbLza7/\=u8?YC>$e6oQFO@Z`L]eq;_t-FrEuOz4c=؍pUv.7>&ݺ?%HHM.(;xqrsӞ˵_:,3A.˦e"\.1$U,Tѧ)^V+Ҧh툼b'SvT,ïI}]hԷ: Bzt=s LܑErmCSG3Ul JҲQG+&|e }GРYϕ. IA2܉$îO"[jBvQdL$1_OpIUG5\d*?aL9^oX{ l LN4MSWw! hoNPe1BN ?!,X%igVՖqcC>${.8>Ô'#xhjMj! %5JbkR4ֹF7ܐ2T>^7F)@dp1IJ@O6JQEQ|>+]9|~b6sUf S,5굇M63v7 HvgԠB5=j2?G$nܧTq1s+ڿɷz#_ɲ#+a0d[$ʅk))-:{c2f[ZHg7pS c vRrzD8ͬ(7Ʌ)plGۚP, |U'՝2? l)ScI LnDy'UQ cUX:]b4mtXNPLz3}Փ{P't[Ci$3 ɡZC{KZLc:m_51'ݦJNgPrc )*$!Yi?]7ꔤfds0UJ'-ۭ_Dy=8RũoA8z%lԟړOla . Eȸ-0ByݘKWoQ3w~nȏkmd\I2j8v3x**/)[;+9LeW,a֯a c,l|IH=rQo~3#l<>F=&.7SC?Iվ9^4`M9fAt̓ƬϽ iyPG^GK[oaN2W*s8^CIB3=_ĬtC0$cͦ&g-+vDH}^R/π/uaU?܆Яuao 9m]Cċn2ymPBsp/ oD~0co#*} QV]tN }XXJwm.,Zi&uÜKOBʪ5בo-DDmY_ՈƚS$gKW2ʧ8)y欌zQ^B=pɤz*{(r;6砩N3G@Q6QiBHzYXƇ?h0ftߴ}։-]}+S,[~QT,, m6825 ߌSbJ2ha{N_!&a\o&:z^'딖g6y͔5;^%"3"F45ra" +lYAc;׃ɉw"Lto k_{=>vIvnY8} y6C&2L|:]߯3OoCԸ{(dXߍ+[*ZʩI,;& pn| %8NV W-*^FQ]lտiHA,zZE,2Ow`?nZdXd̰rݺ{%+txIy˾ !" YcȸOd߹x m\/fE)rCRTQCG/ #R4R r 4/D!*0pjlI+h?}73.'tVOx\u >W÷u\$jz峠+7#,R %H]T*S4 R щ!?Ȝia;Y54OꙧƮ8]`viO@IS;+u ^1 7Vj3Tf;CR;~8ą nćN[AYW<ϐ[2RiTZs2g62 ]6t211!UG鎝p7'AUP8a",BO:- D԰CqްUIW=Eꔀ 1x]|&w(-Z^o֬&> FRjUn>eUd_%cf2BU&&pɷ1֡⿱hw,5#:tS'՘CaBYrKim__T.c&!0]NNBIKxtᩢ<@.q4$ Jlң?{ks^drsύTJAS*0%+*l)JFJ6xOE]{Ue*˻_]}i[-2W2P>1TBY!a? Dвo_?B3?0퐏sr'ppHq#l¶*Hn>b.Cc1G6k _C)c5|'^ !V3כVkrFpum*TAa,vBg# 5dbM@4a=]#"Ɣ7+Yi$*ʌ2cNAy/=&A] -2;!_æ YdȚ8jbzN_qS<~ lP:zÐqs:`AzN&1$6H iƊqNa?[Hc0;n⦒P/װ[t/JԈڣu}rb{Q}M]KLDh[/l9lCOaR8ЙsA7Ny FaT2É\ ِiit_M]Yß1HCD/JBz Yr>$ } T7. pS]<ESv]t躓gBxhi}1<C,[&Rqq9CбLjE n%S&hswѺ1]b%-ϴSxhXZ0zC#U߰//YGy/Rn|4*f if nq6$,J벛.( tz@9el jb#ۇJ,?>NH|II|doŅJv%VےAZP*fqqca.7i⩇پZy'HQ]f0$C4jS=6’]ѫj) mCʰ0wB:(;jPR`pl`#ZIJE)$6'4.a&.OEb3y[R$5N[6/BYd},W@~6XCCF4#@춛>hp;nmu,*\sJ,vEL_ 5.N0ޘ A{m$j7KhZ=uNi/.o=P5dz4;cp=r[Q0]j7-Ahr\%Qh AD& MP- ي¡`QkEl,DStmIjH 8:Lg qdiPkLv"36E|4,@b:`(+4ӏLU̿>?>!>}gMt6%hRPKW][3 #Wܖb  n.M\8it(zl K%5@+;RLE%ڿ`$j$=յ[,o8jjd=6(nRs彶Cir+|POȍ_Hf[H*ֳ{q+E!J$:ocZo'?$12jrI$7'M.-Wڿ"xO {R s?DUĄ5Hٓ"{YKr=suLMSmqXvc).P&dR3R]% M"AKѻ( X,| 3kEy0X:º<.G*&8#Fű6_LXK9z fyf&ڻO3;,;¼I3&S~"[2pzTQM#դ?W9WZ(H>侎 ~r#PV&/K܂*Y6̚;*i' <^rSop_fP)`I͛WvtHkBZp?Kq6>VKL=]]؛סj֛NSzv/!iu wq y:wkjgkc[cTzGEDB`t y@##ۦ+nxT+g:U}~Ph< ]d@"yt,STj?XWgұb߼Sg)R|ԟ/ŭgGǰs4, 2LX}G۳Ĉp }t@`m']獶na*>T M]ggP Aߧ Ivo@'q5CIÓUqW]g]#L%겡ʐ85y > endobj 34 0 obj << /Length1 1630 /Length2 15691 /Length3 0 /Length 16533 /Filter /FlateDecode >> stream xڭct}&v*m۶SI*ضtacc}?Ϝ9;e|[Ƶ{9P 7wwUwWvSdRZ$\fn GI37 ?@h Zl|||T G'oVK]?5̽7dst:n6@PQՓS(kd@3;:V. GK?2s\a@/ ?&FrX9#`anOV*__0UGW7W oVUIfcOnW_3ꯧ?- pz:ٙy2]AY#hmbitu g{3'';E;rsY1#i75]sr[o6˿D-` B`Qvt@2 B -nglfw}c(94vf.3{)z]LXRo%UTY_z-K_l6 /ov"9rTnNk(9ZOqqG//7/[;&忀SV2ssy ?%#`hh9Xݶl]K_m33pG$ A97k9fD6}cn^!C^<n@)Y˟fךŜv:oZ>K12/8H?XE >?lG||8c8^Vr0D V 3|o8]>qU/'6v^O}U5OQ9ƦFPbtFMHG棯RZQw+aHtd9U--{yro yfʬS=`3n6x 0YJYb쉥3g7˘3Aմ:{yo~+X~)o`t^bEp#+#,ƻ=bؓRұS$۝& HƌeqJO!/CB-:M. ICHFZE{ʞ XO*vab; -!iCoS8V<>Y4]HJ9XD3GofL*), HYMNIWy@öMxӉgRw aqNX8O &M~,@&שM V:4a1 Qb80McX+0qX#CcBiHԠy֦UJ;ufrKT)lvgQ5@ñcܖTZ}- ́0ǩ3zYCrK7L)%VJDdej/QtxdynuQ#݅lfL()oEOE%B.BCS[lV7B4N-<݃o}=%u/Ff pQ5a߀6l;dXģhjyJa GdݩOWW&]m*imC]YiN:>F1Z{4k/ m}?w2S.[/LU 抖:`[-=‹["y3q̄Xueks_^ \%˹ip ?*K2 E#I8ۉA<r] 1g ~Cu&#չ6KjĮ^ut$Xb=N ^n|6 5l#Z1 ؛L 3 USA9э́kXث%*D,1 `*GOwn&҆嘽pt#  k5*h^t.&,T2q)οfUĚլ5g#)V:Hz1KzIqt~ o}ԭ6@At^րͨ| >v{ϰ+B9gG LJ|3qJMR=(:q#;/OZ%.{^` .5+WG^ںҥn0a( 5,%[vG -̵DQg׊)BJ: _M IOC_]w_ 1C{E(b4lS36a  FlqB[6d^6#89IKJ `5%V-n`ʥJ^%[;De(᷋O+|8rbu;oMOEt'/Uc 8/% Te]*gڈ7#fԽOkc)30\+Ĝo6Hh)[2yv_kL <@?t9e&f. Sge??0JQvOBUhO]o!l5HVc'{-_lR/V|UjW.ޯ&6Tb!lfL~ԨD( IL75SOg:DN1Ey2ocnc#ck#̵ P;7kilB1GrP#Nl@=K0PR.L!nUu$)>uSq%&z[{1$a`!D<-v,u~ݞ wj 3)[ka]&"QryH AJ*Ֆ;ʼn0n4L>˝mK, {8v>&ޤNVnK&5 7̝I\Z ẕX]7kUwQcI@"߇o$pB> CF>̍s@ϓܳ#M#zɤ)`7^=}\(EjkDN2%8Šڊ9?I\\)o< BdfωVLxc 8wP0<(¾ݞ2xŲQe)cvqI, S|ۇHŠT'}@MԑKcyG:TULYCE.jqE|ys12ύm- $4R$Wˠ 8%}UkF:<^ ⯌aIdh^Y+5K,"Y%.0 ]݌L; E~ frȣӱș2(KE)Ό }pTCH8:JC;/wɖVwIgK-h%v q{l>juG7DŽ5qR#%fZh+Ш* uuQ_E:E"N]|3Z'|Uc8]`yX-!:1wPav_5 Um2!zq?3"$UB {KjbhgsF9 ! WHhN|^:`mWpڦ{'/ OțcQ.$Ιw[o]6%yiˢ\Q0no~Dg_pdhP=g"4Cd,EqVkx]J_Sm-0P'b:fwx-ZM{[1_C^@mh((}goDşضobt7gx ΨIS }|\7_^\7&XkZ[}md=/+6vPWBA3,I]f4]0}9FwYFuE@k;vws7`|xN|~ TDDn"$Da Y^“X3if\e;6+wUWhzA;D<!Ds,Xp\X?2}lϮn&c_`…Nъb8+`&0pڵ` αvWaȵ}|T󎋄g=ؗwo鮝Id4# L7 XgWqkv@|.ܹITVEb^n'#Ye3;[C$,x/W3NFW#G6Nr^{ z?͐_~--4i*7Jʔ$ E ]r Kw%ꂱj ҹ)&[-⦟/@Ӆhj E~6鯡S4A-E8+5j1PʑŭA lS֑I;r~'w^04ģJa3p-wk>@Z6M)Dӕ2{UF%CjKP* Սp\0.#X*6"Mc0MeiXAMDXjm :ؗEn"Ϭ <޼%v %!&evj¾tEմ_; 觨:($&Q.pvwvo1&3Yw^%$|.K-t4RxU/ vHA 1EQ݈03FL$=I2v0x͖}2ˍpO԰;`da |D`U&RJ~!+vFS|eAr ;M`Xj٬.kB ;TzXUEԏ~}W'{,8:9 X{^A(! ,%" V913){*v}S.oVdI"b=ruҞ_q0կR+ b4tTqvr;z U~Dx1<ٹH5rF׬5.6qo1`Inj;]ExiMφpIIu<]1Aup~ Й׶2UɑYUm?zEۂ`1"H/&J3"6'[DHk,¡- kjJ7j6\GN 7C̜a8b:TT#?#C_RaU髛'5 IK"mbwt~ okmpq$HjB>"C_֐:0=|!@S&[VU2Ҵ1O .gTdSl~ hQzS6|S#t}wK㢜1:֦( RPگ#k[827= nǡsH<'`R&] Y tJ&2Gz=) @`KT+ʂGrlZKQ|cB`C.OY$U_02K.~3掓Yc$@7+`g8GaF[*jJlۡ6yA7psjȼL 1ܥ3ϼur71pW^CyErS[8xkLem(wb'hm뙌&cqU<}&QkT=; S]Avs|_=VFIzD .Ki(=O w3]s}" OUAɄG ܉کFѨ$:YhQaTO] Z\ht<%[qMNv0x?\|r!Vڲ89Gŗc #%iǥz| 508zNFyVg.yFQ8N}PG{nf9MyLД!^΂E$` LU Rd1 \3<&e.QӠ; W7l˴/mWa`#Ae4Odxܢ{Jx#jJ\gpqJᘡJ(#z2+u>2^X,ݢ6 ֦~M+XRYgy4[)` J;24RʴSkZ5|Bꔩ`֋Zգ}/H,CoSݼ<$BC(}ғSN=0O0feȾ[>?^;\-"w놫 =X$1M1(k.&iR/wqA0$;bI&mx9j1vQYtvQH'DžB[HB=F26 wV!.0W^dn- עW -i d+J@cckޛx:4̯[TOu*v<#'pwPGBIk`5HC ! _XAHhZ64'pcS+py]xRcRb$6,:@bL=l Zkk,3);۠=$g4ThJ}Tej!|6a2sϵ Ukڔgk>ZL^buNeo@Z(`NR߬%D_#.^-K0]Y $HM.hd~3Ɠ{!_YLMckBuJCI\iXrEpopm ?=]A?76;4 ]Z 8~\z xTE U?Vmh$n5e=zdL8+DFv2>>GU ZP;;[ mIr>4<.g)6N`49,ya?TTqayKʮ<}(U n?že=qkM;RӞN"&ZyM<0&sO2\O,CEwzEf&#h:h):0jcgaHlgd͍ދT?''L= Zr(2P<S'"X|i/!lsW\|ݶXfG0A$'1u\@40&]5qFQ^" v ,s;PH>Y>bgt3(4 P.CK>ta|d⥷ 9m'o5OV`5GP-l$-\l 옷+-ZF+LmsTcis#/ wJU=81q×2&WA[QgG i]~@ Cqvʢ!$p>HH^jpt$syTi$1׸Aɍ)6q@!l/C˱wq Dsۭ%8:2rRk9ՊS Y5{Zk 6&0T(qUXlJcRc:@I\5ߨgB+ӿnoł.}5,a_SKJ#6WmhGk [ E"<qOyը"9+aT ?̵.ܼ!"3s$sv%;^:/wAN2F'y ^^ȒUw֛3NB+XzӍ@x4_-*gC cYaȴy>ʋR552ʣ#:@~k/طK: :EL񢳇jO'ly C}?owPmx}¨Lg)< miK\k+UR7?138(;6b{Vj(CI"8s]F[:""E_Q0J`iSVv8uʇ8|#!o%2N΂dbāꗘTap1 yiN=i]enVV{:d_mH^AT08{ ?:(3aL bVd;MJ0> z@Nt`Mp%LNq49>̡ SI:%ՒSe֒U~[af4CI+6C~ZitK|5 1*7|/qG,k }ZhU+F3D`?~+hޜ 9u1NC"ЇfPtwv?\xm: @;H.y\$}ldEϜ!:O]\G酐<5cAӽ^|S_KBX^Vu/Sf4?ޮg#0ʌ+w\?Ǩ&w%NDrʀ8nu+F®?IO,D} OwA'(m{FtH%#*)^I"ۛz%'G^N*={2Rۋʭaqcz8hWN&O$ϒT6{!'Q5m; =O&ؔSKYϛd\ucA9)V}P;1-2 zɷQƵ)]B Z߹reW0IO~;wZe(*^tu%sjE7!*oJvk8:{; {Yz61ɱ-%Σ0Z.K"YB HSyֱuQ *w t#gJVUalZӺy҈ص~muȹ?.<GTG<^-dV7S,Kܡ}kb &joVO +:Oo}ἱ"*"IFaݪk\7(_cYAK% jsa z.3GC1Nz:(-q.mE7R!+=*d!nWnmbGgPBE E@bAcg,kMbEx*/CUozu 1>cSeI Y^KyU4i "Ul|L.ܟktv;!r-1Srݠ]vՄAl\Cx ﮓ.@}C ƻͻƺ>PoF?[=㟅h_k!m8`_ɇLTUX a ٶ rU@#I/C}:93iX~ ٯ+[d}VS.TU Ēdq^jľTGjԬU}Yߒf (?jS*/g5?S(a=z;s/Rj֙£(WtLU0S}N3_qY{*S=?y^F `_듰U!E܄䨙S`%Ͱi]mjj4 ?Dtr^o_K;l؂}wo6'3}?Q @ZYKH7h8!:z̓A6- pxD\MY߷/+k]a a1HQm(['%0\n&\C9ZPwi+~kAÎ_gqJtXȐFkkMuguU\`*%^Y"Mm+ 1}|X?O*Qv!Iq#6H Y.P}B>EEbSIaƎrX؎]/9*Ui2xWCIdpfN-LxuYO|tk~=ƏJ:t#B3ٍ/ sVpg OdCH=`cIQb3FΟo K.XYx gx\)YB$1ۏ;nM)|ӪnY=6~ qoB=5C$\ŒQѠLE2xqk^~{ƷIt<]ӠNYnC!E̝!O]{N=]'ŵ=伽p8GTZAЅKE*Y+.1x?\Z$gdr)1%hk˯Z@{fhߏV)ۊiH=7}R {}ݾO&d{4ey}C̘Xl+COمe幒KSUN\r#J Re2V,9K "e%Bɨ_.=g,N%WGJJV[rg=CJ}pCz^ݸ#uF:^1ofNǘ8Ph *6~{HW =5F5=wc+Y[Y G vA׍drR<Ahv<L<{,9Y9W~@p&#ˌ]KcO﹨JU 9Ũ}E> 71b-1S>12`B݉{!2{c2luWًoB2ە$=Fys+M=냤Ou7BF#z1L!GfrdɬFhIn?[aK.}m5{5M2/-}t45E_i1pO)b;,0k ȰI+ߣsvBH[(vg`r͂k" zdG+HP:c.cˌ8] C Bã $ғ^FǬmD{>~Z"X-#'8%,g"o^r&e 1J! $1jse"LEmM鹹 W~iu4A 2ɠw5enO@ң8A_c@Kxv.Op rhqr,d7rf/*2 'j"`&y-]-͡emŘexu{jG$60amcZ '$Wւa{JF u=5:!ʐ؅.Ünt@)Ҥ@ 8:@ P^+rSQY!oٸ ݲt|qdFe?i*Q#f/wZox.v[j^ c_8ysr\爂FdܔxCVWDžޜ -VN-g"u= -(XH]'#ڃ LG?{W)M(CܒB;q}tjb-A.WRAeբy.wK2L Yhƨ t. [ꪢ=ukgZ!X_pyR_wI7@2V7ӕg%u[U]R; 7t Gm\ۛ ]3Th-Ie6Ʉ k>NZ7E(AR57|c{>6o_TR艾A+QVS25mg/"oM(z+4)2mL.#xP͚yD nuT޻(P`%jos_=֧TrZ811Hseo0xO6Č7Aq@{l%c ^kMAW(2coJL9\rwh zU){ ~,*D" $@d;00\L#{hCt&[[LڸNxUf :=zRzWa)ZG6,/GLv($5N "H*(xc#/o^d}&4"Ͽ'KᄕN {?[nozԽHV#gLkQxHu}``4MS?s_[PO]ߣ~Q}¸ Z)߮PXښ"F'M%5`㼹26iJ74h' B\)]JdN 5vasrK9~{Tp(/yF#쭱~(i L*c~ p9$dC]H;e\1K&s:G} ԐTeX8?QPgu.uQ=>viغ¥ Q얐?L5jϘk{8|[bBGoP!t)D M!_3SqC]4 }F$D_toPkz"~aaW杠ޗ[|uK+Eez3WYhw9󜻉;ad]tw`ϡKe-u"8xe^}DU,\xjj{}p"GX PnCp@/F,p e;joD,ql8 ^&=Qs(,:>m^fthm6)L嚋-5ǎOn6%xj[}ڳ.e \l,;؊a0vޚTSO݆#Moc(ԓ\>g}‚D>`88)x1 rqG:a sSMVg&Dna!kYOx}C^mnT&KmAToON^A_X?HMQDА*?.kظ8UI>#g~hMnPu]+jpTn^{'}u_ K5' OP+'gSZ"^Xdh>A`ަVH]щ ڪMà_J&LOƜ,xQ!gõwV[5_:7m#ǥOYU/,T[7|Z!>!tyHp ql}ZiFňndw/hl{Bo1OdW=kaW7p#U S3׺FѪ!LW6)îl8;#~'IWԌaiΣ+TG.Uw7̜2g&,GKˉ# Vc#rZ$SNTC8v_:~8k (qpKlj%8' |۳C|G4 ?rs endstream endobj 35 0 obj << /Type /FontDescriptor /FontName /INNXUP+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/W/X/a/b/bracketleft/bracketright/c/colon/comma/d/e/f/fi/five/fl/four/g/h/hyphen/i/k/l/m/n/o/one/p/parenleft/parenright/period/q/r/s/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 34 0 R >> endobj 36 0 obj << /Length1 1647 /Length2 9228 /Length3 0 /Length 10066 /Filter /FlateDecode >> stream xڭweXے5]wwww 4Hw$@pw CΙ;w}g~]kתjWH)k*A0N^.1S:zl\Ϙ :#l`@1xEEE `13beg?gOO# t@݀`3Q+ c `Q2(@"tl]Av  d8@</v=Oi\\'hzv |~<6` Ov_ A= ;ܞg2'(('''@wCLl@`O yB]mc?A=@ ;3LtY'Uo ky]ycc;Emzu@,z9 {`t@ւCXw*sD7Ho"M]}Wj%/WW-{ {*ŁP\#s鮏<*,;/&?8 vLYVq46T(^tʯ, M,35GMW>Q 4YyrbĥFYTɁ|my- I|ĔAF=fX]` igxCE!fDMQ%)X^W=6VĨ9/-߬;A> jN_z"rM΂QTL>}S} F =YjyT).~[cV:^kvV#vfjʪ;SG!EW5tgtH˴~W^ jNψܰ0kq9vaK&r^丞[P뇫K`vY>hν21TͰ4,NHkΰE8f6 ۫R!ۭ'{darWPε|Z,keI-(1^d+dizO7DE&V{]fݨ Ъߴ5뫐$Z!\"$ ՙ1 HfJ e!O8# 2쏦-y+]ܳ=>)RLhO32WDžآiɯDz nd&TT@9SpUAcLir+D4n!!nj]nzFrQ}L*2}Y谴4g{޽WcD`!$>/ݭp>a?(Hwd_V} +|IqGQCsWbIL Ihn4'pzw|h7){_'¶[W?1uO93P#d4f9XҐtBCh}vED܂M3 ;Q1a&{R% ڬV(kF B-Gl3U'Hv[-ch@_(+>pD)0(^VJ=eBI"o46 U3eښEM) #GsAuT+"~\;x1|ԏ .X!+Y\[泬1(^DEla2*reuRAq)y+9WNjb߯N#?vkD$>vT+v_0 hgVyFoL-.ᦉ-S&(Ybp×eSD+ @3G|o冃iuTRj"?NlFv\mxeGju.~e]lM֭ySњjH&CɁi٣GF}b)bRZۃ/"qpBm~QeR0ޮ8Q ٟl33(;^6VɋثtN 0tSG[~wYV14oWeY}s]I"WL 9 {)Bw iTn¤c22vicՂL0wSN8;7y~&O&>Wh/C|W*h1q9JO*55.G#.h%- Uj$#8۞HЕ N9mR'0۾qW;(cÒomcwA'ۖCJԋOfSmw4o&H.\-_M9UK&Z[D\ހ M{b5Oz#/߅e4 b#OkZDj?^vSy;2dOaF=fXH},h$ 5Ljɸ]`1bA+_\apUӔN(ߛe <"2}iiKϧ(c7qIXi8S0qcLHzVT3N OdmK!mB3`f [CFVd1M)NY`5E>nJ8c_j# 7as?k{0*4h:sI,gku;Oe0Xk|b\fcPmTb׻,HxP!ìU^2>4{霣;A슲ӊS<-Y:e8>"Mql7ю+ܔA3_ʘȭ*.Gd,,sl_"!,p9|ևeJԑ BMJe<)=~w&I-L2+YFZ:ܴ-]"O/|pvJ0{l>o"kJjה -N2{wg9d>} $_VP zkth?3sJZN\p*˅qbB i5Q).)0$(emGD/1 M(;A yG; ]%đT2r":~L)rJ3^kzvvv"73jUhO+>]2jO+:cĄ;FRi!A֯Ry 8.7{Gm6tۣr{nW,Pa[!,5)uҫv0mPݐy5&.ۅL>>+IAqTR}rPm-ueZah.HPG =q& ~zCN*͘\һ"zN}*=;$9q^n^dyK ,{&良ÔPл c/ NV΂<ZdћRo\Q0a.@*d{14sHXMU'w[Olya9#a}.hb/K~ڒ9HR{|zU.T'u}s*ӆ#k'Vb  e&xq7q-;j5SZ U2ѫ(hkknAuȒx[r@di![ԡY܂*G5q8x&ʿfm]4mxVOoޱHMd݇4hr]XD: ݹ[7YaW6>0>ܽbɔn!P))}fsm]_8Ѵ^{!=2&a 2rQH}4DSE4m%=]rT6Dd0Çu^.ylCWϼux*on2?dC椧O;X3s{:'!_Юȍ&*8/ۇ$Vh.:|@Pc2eى.t1<އ!jVeL40| 3?khNv&QvYܸO7h4c3mf6f\D<ߨoq3ZF^\_oGX\l?ME0zEj`)׹7Cw EzVSy9Y 5Z |!&ӿMВ1FTqy4ߗ$3c<ۜ{~QKt9 q_(1dB>q0r#DEEGNҔQqHiD =Sʵ ATȖ=CGSwTVb2Ik2 w l3?9𷈇:~:v/5Ҋs>"R^)Qh5,7ÍDr <t L{¼՘]ys6a|3@Ɵ[H!f@PA<.a'b.^6oy]/8P0J1LDh|;keb6Pz{}0]|OufPwo5E&? r]`ޣQ<-s `rL^2l1Ǿ1aCkᮋ=a4%"|!f`Dꑺ+£cTݚ:/,{v6,V"~!Y =$nu@գҾ1"y,S>>\!mW`UpE !o[SZֽ6!9iL=z̀tLYqN\#Akm pW)[ 9=M&cj<=Tup0 ꄱ}GtflxND=ohoSH) ;d_Ɓ-CZz@ go%拂7,tz=2;f#O<> wEڋ&JJ x<6w&y_vG2RY-7<o_a (( zZqtJI (R6ICH%F+a)&X\6N ct5<%#O}=M085ʳ䲒DPN^MkBV8#V&x,֮38ڸۏboVA%rq1Jd&68ֆ3}I. Ԓڇ##pkQbi$ܮ`yYTy|{kdegD'y黙,=%׸5D%]0ABÍ"uQX:x Х!FzƧ!oi/I.pټ$3} !ȼaAͮ<)m /: 5/&S;ѯEJ/ Zt>~g7Yk|~FPf6wpF1Grnܾ'n,mXuHN{X]:A _ I_u4;b<bs;hDJ"+̺絏GKuOYw/,@hK 2<|dϤOtKqVþgV5q>n: n1]j1A ]^6 V_.^&88å*P5aeCPk޸7O*(sWeeH;Hs'0tW]~;E[ST_#Ns[OhLgjX+YC"1$AM; WS'b׻8~L4XS_IqmS/@,Klz.9|8^S#n`'5U?jh:J_Hq-ͭmB@ocĊ_*znQ*9򓽟'waycjݢ*'~U9ߊߧDwz{.JQ+@I´OIs:"[m_bmoZf#{\``sG=*o+fw5_6V|3ځO(b>6-Jv:X ޓSe AӤ;> <6*ktg{iS ҜT8@WV>6(+e!н, "7:@C+r_pkX<.]a8VUi8,_z$~-Sbx/ě;׿5E&pN'N;8|4G3|\^3ȁd_t`ۊ.ѫ|i-ؘD훖 Wk}$/'r?nR' K/}t0hTN S2<ɇPn m>vELO=Yvs/n~PQ!V4ZtS:XF>&'nh }`ZnGuNP,ϣs*̬MUT)QEj~*S%^de.2\`@vgzpyluĆTAtvv, ~>WUPG1TPb{vaaD1D,@uI+N$Pߚe ޥ]yIxeDu q/%m\K)H5hK$"ÄxcSߤ-_n:x|f% J }u2sG$xHv TvM:ǧXGQ{3s sUÒy"7[廉&TO+ ]ʣ\+jZuWdu戋t-v+ 9#&~\tD̬D&Y4Lό''X-⩱.wy,q’lw&PPNf:eUVܧdGH}T,`23$P,+'.f:$&R $es/O6iϜ"XFD% Iv\ endstream endobj 37 0 obj << /Type /FontDescriptor /FontName /YWQVKE+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 668 /CapHeight 668 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/B/G/K/M/S/T/a/b/c/d/e/f/g/h/i/k/l/m/n/o/r/s/t/u/w/z) /FontFile 36 0 R >> endobj 23 0 obj << /Type /Encoding /Differences [2/fi/fl 34/quotedbl/numbersign/dollar 39/quoteright/parenleft/parenright 43/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six 58/colon 61/equal/greater 64/at/A/B/C/D/E/F/G/H/I 75/K/L/M/N/O/P 82/R/S/T/U 87/W/X 91/bracketleft/backslash/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i 107/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 124/bar] >> endobj 18 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GFAWRG+CMSY10 /FontDescriptor 29 0 R /FirstChar 15 /LastChar 15 /Widths 22 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XIQRHE+NimbusMonL-Regu /FontDescriptor 31 0 R /FirstChar 34 /LastChar 124 /Widths 25 0 R /Encoding 23 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZFOLHV+NimbusRomNo9L-Medi /FontDescriptor 33 0 R /FirstChar 46 /LastChar 121 /Widths 24 0 R /Encoding 23 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /INNXUP+NimbusRomNo9L-Regu /FontDescriptor 35 0 R /FirstChar 2 /LastChar 122 /Widths 27 0 R /Encoding 23 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YWQVKE+NimbusRomNo9L-ReguItal /FontDescriptor 37 0 R /FirstChar 66 /LastChar 122 /Widths 26 0 R /Encoding 23 0 R >> endobj 7 0 obj << /Type /Pages /Count 5 /Kids [2 0 R 9 0 R 13 0 R 16 0 R 20 0 R] >> endobj 38 0 obj << /Type /Catalog /Pages 7 0 R >> endobj 39 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20120823211056+02'00') /ModDate (D:20120823211056+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 40 0000000000 65535 f 0000000669 00000 n 0000000558 00000 n 0000000015 00000 n 0000076470 00000 n 0000076638 00000 n 0000076134 00000 n 0000076811 00000 n 0000003015 00000 n 0000002903 00000 n 0000000759 00000 n 0000076300 00000 n 0000005556 00000 n 0000005442 00000 n 0000003117 00000 n 0000008202 00000 n 0000008088 00000 n 0000005659 00000 n 0000075994 00000 n 0000010076 00000 n 0000009962 00000 n 0000008306 00000 n 0000010179 00000 n 0000075601 00000 n 0000010201 00000 n 0000010524 00000 n 0000010906 00000 n 0000011152 00000 n 0000011626 00000 n 0000018732 00000 n 0000018957 00000 n 0000034464 00000 n 0000034899 00000 n 0000047707 00000 n 0000048040 00000 n 0000064693 00000 n 0000065129 00000 n 0000075314 00000 n 0000076895 00000 n 0000076945 00000 n trailer << /Size 40 /Root 38 0 R /Info 39 0 R /ID [<14B2A34289EF72A85637CFEBCE2DFB6C> <14B2A34289EF72A85637CFEBCE2DFB6C>] >> startxref 77211 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/ltrdigest.pdf000066400000000000000000006032471211610345200260060ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 804 /Filter /FlateDecode >> stream x}TM62B_ xSƱz\>ds`@3#M pl/S$@_ -QU{wH"DɮKLgN3S5_YD5Ip|)+trZLMqeB8b3$I^Ոڌ f{H$b#'IbQ>U9OPJi.c" g5cEP*phtr+/ BV'9'5Ƶ%.s,⭁fm(3 Y2r7N7X&茖ϰr=oy[>10R!!nRxLat09[3N1HV7y>*(,EhlML'4g9tO:2A^B$:pk_]}Nct{i渥F+$K5NhYEI-\SD"DR+WUn$e8_W0賤ftW|*3,hk-1.3ʃC0c^ I]͂4<.4[,0qqb4uN3aP& h+A.`%ڇnC^4žʛ0 b,_,ϸĔ `J`6E P^T"x;(L N4;Qdb & J ~3w^%5`t@sj`~ `w endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 1 0 obj << /Font << /F25 4 0 R /F26 5 0 R /F29 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 10 0 obj << /Length 2430 /Filter /FlateDecode >> stream xڭYݏ6_`1WԷ CRd"H}<mWqp.P 3n_?ѝD(n{KR]"/my `Z櫶ִ?az'($&"$-ݞLބQ*P(Zwf{#!C),?`TZ+%q!%KRĺo תNŶmEڎH̯A;f-W|kOS{;[G62 DXH"YmdE:he4F?KNۮjs۷ O5 N4܃TVx \US}~sۍv;e!0zvpү7. E~,Hq(MX)}~*L q H0_d I(` 1ij=RV"yXmBPGAl-tHzg9mu4EnECe͹u,^e.@J@Or 'x Ψv^Iu5J2axTf#`yƀgx7xkƀM༇.%c_…p=6dD"my ^RC!1[1HO%1Srѓ+ 2M\$UUy0b3!}+=>N) CHYc/qQ Gs(QA?t{J:B (1s,JOh[8?bTsԼc5OGǘ QFٸrЊ?|xg(l@b<\ = A.?adʒ,9Y}P S-+}pV/?}:cd:/UR@Mè0I"<BX bVQmX0@c:P3)tZ,"CUR$~X)X?Щý\Dvvo7U8gגA['6i9kbIGc0#QxljB.NB~x;E(ZM˜0nx@"4,R@Q4L_әH/?? ~U‘Pr1rBފ!CJ1CZyҵ`!XZ[B_  oƸ yQL</ӉәPH.[;I.=wtmw\D 0 Fy[U+s(!a(yDKuO{vDg3( 3ޤ`;o=Pwr`8;Jץpa*<ux<5·=T0K/1A>7Μ<Nkm93A7E_1"ah{&kNzBUBxXiP6HL[Y 'UB@1؜ZwEGA(|̣3S`g V)h\It}&*"񏶰瓩*jri/P>DQ<{W?hg~ISo$suQZrC?Q"K"C`6$`skYV>mn5<r=ڢTLa!6rݱ z=T~.ƱQsԗY߬%ԇ -eKSz# R Gi*5'kLΫ[ktZ-R"FgI0TQ"rb)hz}}) endstream endobj 9 0 obj << /Type /Page /Contents 10 0 R /Resources 8 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 8 0 obj << /Font << /F43 11 0 R /F26 5 0 R /F25 4 0 R /F33 12 0 R /F29 6 0 R /F47 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 16 0 obj << /Length 2046 /Filter /FlateDecode >> stream xڭXI!PV.A3A2lTEEyKnb-6L)7*&q&6$f|ŔFuoNeڝZw~ K6t$;.Uԟ]),Xwo"IH۞m_5m.YGJ>7m_]mH&3"f}6Ddѹk{]6Z4ypCSyUOⱬ*hqLف$)c'.q\][W1Dr;[F#mQ "Ok&۝˲{8=uq>]]g#@V4C#[j"OZ&9Uy6V.2+Y7w x1:Y_Wǔ4y#9Ef?<c唌e&ZX(;9 g[O0xtʍ#hy Uڋe*vE#k1{c(0@L~WA:ܷ6 %nzzpKs_m,>RES޻WL iv j.jiu'wh^ʕ6]{9e}^hДᇹ9 'ߎOstBI%$MG:ǘk=;eųVLKb0UU 1 )b4 Dck R`:؁ ,:CA z,SVmƣzdrނ/.rY;!0BRiLD]%g\6@ "`OY\^c>^׻sԧ ","&!$ `=wX~ysޟb E#,䎽T@/u[bymr̢FC{W yoeF6H!rFQvT_n|Qyei}_! w<%0 9݆*d ^p$NR*lXZ _e,IZq l8` .[ hzaFW,I1_CA;mFijXn[U-_v`W'>, kB`Qs3p9o ypPPQ|D7x .YyCcܪ?o~ 8 [ " X-0`׀@}XA &mQJN}>+ S5y+$Lʼ`K=hlvXlOesA)LÏ_T 3sE*Ij[j{ϊs*h|~EѿoJ{[kKtp)8an&GXFtVyF=Ik}[yԶ>'ir֘ҭ}rwv5*&Lee3[1 F K endstream endobj 15 0 obj << /Type /Page /Contents 16 0 R /Resources 14 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 14 0 obj << /Font << /F29 6 0 R /F26 5 0 R /F25 4 0 R /F43 11 0 R /F33 12 0 R /F47 13 0 R /F15 17 0 R >> /ProcSet [ /PDF /Text ] >> endobj 20 0 obj << /Length 630 /Filter /FlateDecode >> stream xڅTMӓ0+r|Xgr=В( $xʲ>ѻ5SRIP~@Raq u&Q^M\~UjdRwb򞧿Uc0N(_MbWIqZ ]}묝O(RwS@d$nV1Т|nQpq}ײ:&Ħ|LUHZQP.V Idpp Rցtu2e34e8s7Pk%CPυI η_̾N%M}`ZTaRG4kQh|T["ؽ):M]Qצv΃Sџvm{p^Fƨ$U)b, շS8!㸸6Tc%y*CQLejA\;[( &p: a:S~Þ|XSٳK1?z XBbIzMnJo.-LN K4OX{1~EME P(P(!2?G-A%|ELzFpǧFߢ/>11e#+qbW4- ]WzۚZlm endstream endobj 19 0 obj << /Type /Page /Contents 20 0 R /Resources 18 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 18 0 obj << /Font << /F26 5 0 R /F25 4 0 R /F29 6 0 R /F15 17 0 R >> /ProcSet [ /PDF /Text ] >> endobj 23 0 obj << /Length 1538 /Filter /FlateDecode >> stream xڽYɒ6WR$%qǎGl@Pf_6R|tni R][4bf.rLxhg˹g |S<#sBg<{|S5YW˷:2)p-gˏXA"e3&NIR)8I&yP{/gI&xJ77nl˲TK_FhOH3Mm}=GExkW]Zpt ˩?㴐?s/ıBvo] vieWcxu:mW)QIMR+6t.ATb͏&erӼJ*c;uHOYEe,FYq{Ys.+x`6!Pe#)aB@¸1AH !O3]xԷƣ)"%mC㮏Ȅ=O] .䣳] \F6GTp=(8}O+Wf1{ʄ<r@iT](,q"G,\CDLo_+,aGux 0 =L]+.VFlJgLsq{+ r +BF\ apD0d1OtY.?y|v~f "4x} endstream endobj 22 0 obj << /Type /Page /Contents 23 0 R /Resources 21 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 21 0 obj << /Font << /F26 5 0 R /F25 4 0 R /F29 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 26 0 obj << /Length 2824 /Filter /FlateDecode >> stream xZ[۸~_+^DJ@dYh[6@56=#ԖII^th-2-/#<$;k%W\1XWf+ˋlu[}L$ O4ySz#49mym_~يsVdc60UkIӮ^\}*^XnXVt÷_V)zp3+ɲ܀:>\{_23NJֹMMSqtz:{#PW*ܲ;mEkl"'NeObh@^ e7Qya] OMWUS uoڋ]"y_Z۷͆Np}[x#^IwiySy <%גqt3Td`BF/u=Y܈N`DZ A~ݷEeLwTP`)saU]oqeKx.y K-H^$v[;K/94Qu~a`n |ݑƏm[O;e_sx-7ӴqUt_.mέ*l;ZŖ\ƹb`,sbdyO݆o]:sc_C$ '>W{Onz|ԁ:wH@F_ސi7͡[RΘ<.i7 /ZpKpaU d=H=v#L:qt19"Yio x*-yΙ +pOr/ J?"kJ5y摆f(?/H\]2~JvrM xlijl`)0e7srs#FEpR,…AB8,B2q /[owxtaZh *6u_V5|kyhi zbU)T#~('t&ڒ QEBZusOph+<y!.%`SHLJzD;ۅRgOډ1aLrJfL>- j$U!+@U]#%؅%;lXij goMFhT;ԃ@i)M0 |_ hp;D!FɗFGEoPD~s / 5m&5sKē*Mz(4PEYw6Ц]@7 >7R:syf@ҡyRdD/dg6tK91L'^"h_0ٶmIvb{8-(R䵊 ~/ΎT,̘)K9|rٕi;l;n2<ã ]womw;p6n6(uȈdSF۶:T%&yV61lY-~(,u"|R*ًuZlj3>Tʃ,53 >}O`&2[qcϮAl}OR9CFS>Sp8=mg.~v闏ShHN\hҸ /6s#CP7lT5 ,sNۗ 5b&*6ݫ6Z }ۅbBxNχMP?tfNgY<iRahƈp65-%< ޽TxPtq)(::6W4t/Lw(8qI<)L5G2 K&?8vc C}mhy2!˟OoC"H9! %#' y)T|2I "|p13H=s-^ӻѵ]k2 GG#>$ܺO4,}\€Uk'RyQH07m·x 4@MPLj5 c?m1_ʠ߰^] *O.ܿ^ ${cE}q7sv#Q; :6יTHC >x by8\ ?.tڃ/'"Zb t0Y4}EEs~EeC endstream endobj 25 0 obj << /Type /Page /Contents 26 0 R /Resources 24 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 24 0 obj << /Font << /F43 11 0 R /F25 4 0 R /F26 5 0 R /F29 6 0 R /F38 27 0 R /F15 17 0 R /F33 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 30 0 obj << /Length 2542 /Filter /FlateDecode >> stream xݓ۶[K[$V<x"T(*xI\iOK|,vXfu3ƈUV3k1DJbO%o_z E#،:,+*BR*:ܽ+L %ݿmBUƮoO $^kT+sRZ9[o *Q"}lU3AI7hpL\'D&*.nn݆sB,`\iQ6 #ɰ|_kMv6@~orX{FKl~%:OO3Xzl0XjӃ9qgTwZQV5c#kb9buU9 Tޝ'qaqY)Xk0Ĩ>>e (ka%}RX5vΌ(djU j9@Ŝ$)Wc0{U`b9`E;+!ֲ-8{vGمN% *A{HaճN M.M\&599Mm ܄^CB b9J;c9ij!8j<T~FC.I$/f+ :͊>2f D^G7!Wy <̉#qR- o<ʲ1'#㾀E}6:vi)kH):I:od$W}ph˜e 0|^Y%~\08g9-|rPszA ֿbd2Ή-G/v WLf7d6RGW+8#j tth>qEtW!z1Vt`\O2: k>\v# ”um}eCa`;Z x)ŵ~ u;?zMBb &]]Ld2"U2 o >'dӜP0{Pȷ~, O8koLD{n+ߤ{_5pu,7VDZ6p\a`G& C(XȽɃL*ؽf'~X.@`a%Ϋ;u-2y@(!; ' a ! awXU"0B) #Cwi}/);B {& .P ]DPGv }F\_= kvΟdb'lCśhK~s{lJhX Bw_w eǗJ_ P>3EP:b `1d9x<1dgtbh4v䐖T6k8bI endstream endobj 29 0 obj << /Type /Page /Contents 30 0 R /Resources 28 0 R /MediaBox [0 0 595.276 841.89] /Parent 34 0 R >> endobj 28 0 obj << /Font << /F33 12 0 R /F26 5 0 R /F38 27 0 R /F29 6 0 R /F25 4 0 R /F43 11 0 R /F11 31 0 R /F10 32 0 R /F15 17 0 R /F39 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 37 0 obj << /Length 2388 /Filter /FlateDecode >> stream xZM6ϯ-TՈ&r`֮R)o,8%"Hh(׺v$hFyy&Vs-֑҉"2R&UbϏfy7uN*,~nk0T̘7kJќkضL_lz6Y9*w纡֝a]Q Eل)n1I&Ekkʥ7F! ϲIZHQZdFaZIZWfifcKAšjbl.S4]ܫc mߡ򱯋[! 3=Kp37.q$ T%A S~ӄ9 oq)(m*p-q8_|U8c|\byX_M`. SH0,y̭`.0qa.Z[U_= @Dgyk0?UM_wr i;3z]M֏{2l`&;D Iz x ~"0l 7V*'y>N,Q^h? h& 7 Vu"&GPq.ׁYdbN64d|saƝLg[+NMO>u p 9?|x\oToX7l/lRCc~J.zmOzu'c0>}ʢ&4nyM":P{S@+(W2 ͥ'"LɄEq\>iJrSfxV,EEo*46@KXo~-V0CyEޑEou?rD*>j(v%}=BNI /\=9b, D* "MZjbL Lߚ"!S}W6);RHu#`$u >\x4j} THyY!t Id :DA!kw\-25Oys:u`"b0`d!_J&.\ҸJLXW0ŝ"(S+/p8@8v_H,-"!"cgjkof$r:*wK"eC'pF5ԣ׋a{ٰrf>dòlHѦsw!N6GdÎijm^|b^R keש'hR*EtW'Q̅Oȸ1p׃ˎun\ ED?Aie6>89K8 (1w  endstream endobj 36 0 obj << /Type /Page /Contents 37 0 R /Resources 35 0 R /MediaBox [0 0 595.276 841.89] /Parent 34 0 R >> endobj 35 0 obj << /Font << /F29 6 0 R /F11 31 0 R /F10 32 0 R /F26 5 0 R /F15 17 0 R /F33 12 0 R /F38 27 0 R /F39 33 0 R /F1 38 0 R /F41 39 0 R /F36 40 0 R /F40 41 0 R /F43 11 0 R >> /ProcSet [ /PDF /Text ] >> endobj 44 0 obj << /Length 2336 /Filter /FlateDecode >> stream xYݏܶ_oբ^ߒ@8h 0A˽S֗;á=H$jD 7Cry!V9˭*3,7*՚eYW?'ֿey2gY6\ӤcY4#01 &dbQ麒T+kɓkaȜ'}Olʾ\K3%޺cV"ܕMjN}Dhusn|Q\_许a*S_Ly5UdBQzt'f氖D1ކefyD9ʂim?Eⷨ:9S=gxbXO0̄7Sݾ̩fdh`jLP*@UZt+ `XTRTUuH0ɹ.{„JUԻ?~Gfϵ2w>4*MT HTf #}(! 0|oN,%eRA7qJ* b! qtr{-U[V'Dk۹ 4bb1 3ȱwwyJ4u&Ue/)%Xk+#z8!ąLZם>}>w}Y.&{^ˎern״(:ac3kE0w.u!v*X6Kib>Θd"H:x*^1w0$lB'%a3K0$,säF:X'hjRa4_mEvm45)=&& b@Ah]Am=a }er󆈎f1ċ\3G!0'_ bOsE\LPA,EC-6(qhڠ= S>/ @i a§isQ(X>O%.E)N1i gSj@O]oՅbtdzeE,6bXKIreQܤ kbBWԿk AbטPe6 g"ӽIAc4e68QM,Y6R$ 詡#?f}Oo"1הּɫkOg+Ѓaôkmq"'8qܹe\X\xjqadG#83ΏUאSAbOȏj~pA+~Q&e6 |\kfyg /eE؁`pHÑ?LYPl|߉3ZME.+^A/חyK"F̟eUmĕ %P範a&ULU x6292 E!JxC3嬊y3hߏWdf*'-dOS:8a\(İfs)C}uCY=$2>ޘpe OQq> d\ bߏ ,Sa&O~"45Sچ3'X8&p C:Ǩl"K 7|X c`\--3if'%>xH>(FwG4臿cY7Ux8[C3;16E^WEҰCw.l:#]h6Gr$>Ho/>`8-$KeK%j 9J6p$/h'u}@&(yӵ-0I'C6}EsM4R6]N~D ɥW4/ cr;? B'PU:5K^*P? psS[6l @Qzn<y;,|>n]D%q얅0c0/h]tc%s&Y}Q}s8D\.tbwdSYv70pr3>SO>4 wGߕ}7G=0Ax뇙egm/RGr9)}f!ϔh_o?&cr1ZEmO"N>`)l`5~?gR +6p2e˛g  endstream endobj 43 0 obj << /Type /Page /Contents 44 0 R /Resources 42 0 R /MediaBox [0 0 595.276 841.89] /Parent 34 0 R >> endobj 42 0 obj << /Font << /F11 31 0 R /F10 32 0 R /F26 5 0 R /F15 17 0 R /F29 6 0 R /F38 27 0 R /F39 33 0 R /F33 12 0 R /F43 11 0 R /F7 45 0 R /F41 39 0 R /F36 40 0 R >> /ProcSet [ /PDF /Text ] >> endobj 48 0 obj << /Length 2890 /Filter /FlateDecode >> stream xڽZIܶϯ#;O aC%ʼnX n6hS$[z9(lB-_|y{FHFn+8SDkffu[Gzxۿ?J#q_m`)at4:rvוM*uZj=YEv-LDs Aew%tI)S&c K%߬%n,ʻu:c\~[o .ߴt l{X&zF,_s#Cu;+wG6Z &Rʹ&aLI?_{F8j蛇ϝ!y*[kiɶ=ڂzվ`S@&f3iƲ4빩ֱ^-1'LϜˊ5uuY߅zwmNRIʌI@q•;xFaIugBzf7LCq%vux\ևn_KHm憿zw e]-FQUjf4tBEu9W9N)o ?o㢕pQ^3T}YUap(lކuc^R8jaeK`1NŠ3yŸ@b֞Zl=3К}vk_ӖweWVABDB Js7]^ÛkJ=c0:{[h"X2 fg-g{&PXp ET%%Y/3xV4[Q 4 dsomtsaoBpfv0{+웪jЎ݋eAy8x Ș'M":s لԏuNQrXH hOXRt2D΋T?wBO<8fN.KF + RC8|xi .N|~ nyNK(O0F- thvZ٩gabfi1Ah ~3?S#2NKy*rD} *f^gOi(XA hz28Wb5N}53c .5dܪF"cHWJHOkס_Unۼ}M*R X渾PsR+8 hgeuЯ,@@4*y5-\2%2#?^XG6  Ph7;K=<Td<|x> lӕc33Q4n&~ &l}ݷ6ụN9l(x|A4nTC \^aѝwĆH!㖰}[v%D83? *):>zޔ랅Qiy(~/X#" zX|tfÉdqyo&4^Wn~@Wb% ̬4[x*{RЀջ^\(s)N[쾔mC t.qj֗NXgםdٕ[۶-gpCAϘx+=b#$Mo%MO+-5T,`561x!QbJS%|r" 77'w6Tx`_s*eǹ.Lvb9Sl3{%@cxa݂k&f1Kc S% *XKbgMp-v"7ͷb[!ɷ @T$@LΤ`'\HT ;}&xΈoHoP7J]Q<S&7lCf:S&#Aǹ6\݇opPqF&M˱)lX.çȌ|';^$|*FjqnP4E o1yB uѓnCjj!`:*|8M9_(}I>$۔s{IpB~䞸:[St0"Lv.ӕaز:!w$̠רH _DC^#=. il[`0=z ?~b" }ӄ H|3S7[Ұ:@ m7$^bmL}v;'Kk$={Dz~XX^B4dw%nrTTx/t W^z]@ D7 " F9̏c-hoX~$ߋ_3ɈU!?{2zG @8NV/Q֚GeUk1OӛpX+L\[saGO){a0$d[3>]:,jxStŧcprkkH?u.=e ˷ _MY08[$+ee/DJ;󔞸9T~K:7%qgK浭mp^oӰp mK)-bu [> endobj 46 0 obj << /Font << /F43 11 0 R /F26 5 0 R /F25 4 0 R /F29 6 0 R /F38 27 0 R >> /ProcSet [ /PDF /Text ] >> endobj 51 0 obj << /Length 548 /Filter /FlateDecode >> stream xmRMs0Wp3EćoiNfzIrA4wA“t{}|aG)N`^~D4bq //{t mJF~BզH Glq, 6Z <8uGg @+u)Kꦩ jb)#ٝ4"6oz}Mq c#;\STi2^@ Cۡ;խxwe9?;|9궭ORٖX7W6"ϳO 6qul\A֍=Fuu ]`)8!O?Q㺨KgvPFc T9O7C)f"V$&ߌuՖ8ز+>%sp MRwݠ;׸fԦFT[ ټ`*_:=[tU]5\=j]h1RɜB/ҎA$U9߲UM--FP4ib)JFnL endstream endobj 50 0 obj << /Type /Page /Contents 51 0 R /Resources 49 0 R /MediaBox [0 0 595.276 841.89] /Parent 34 0 R >> endobj 49 0 obj << /Font << /F26 5 0 R /F25 4 0 R /F29 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 52 0 obj [569.5 569.5] endobj 53 0 obj [838.1] endobj 54 0 obj [531.3 531.3 531.3 531.3 531.3 531.3] endobj 55 0 obj [826.4 295.1 826.4 531.3 826.4 531.3 826.4 826.4 826.4 826.4 826.4 826.4 826.4 1062.5 531.3 531.3 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 1062.5 1062.5 826.4 826.4 1062.5 1062.5 531.3 531.3 1062.5 1062.5 1062.5 826.4 1062.5 1062.5 649.3 649.3 1062.5 1062.5 1062.5 826.4 288.2 1062.5 708.3 708.3 944.5 944.5 0 0 590.3 590.3 708.3 531.3 767.4 767.4 826.4 826.4 649.3 849.5 694.7 562.6 821.7 560.8 758.3 631 904.2 585.5 720.1 807.4 730.7 1264.5 869.1 841.6 743.3 867.7 906.9 643.4 586.3 662.8 656.2 1054.6 756.4 705.8 763.6 708.3 708.3 708.3 708.3 708.3 649.3 649.3 472.2 472.2 472.2 472.2 531.3 531.3] endobj 56 0 obj [1055.6] endobj 57 0 obj [295.1 826.4 531.3 826.4 531.3 559.7 795.8 801.4 757.3 871.7 778.7 672.4 827.9 872.8 460.7 580.4 896 722.6 1020.4 843.3 806.2 673.6 835.7 800.2 646.2 618.6 718.8 618.8 1002.4 873.9 615.8 720 413.2 413.2 413.2 1062.5 1062.5 434 564.4 454.5 460.2 546.7 492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7 513.5 534.8 474.4 479.5 491.3 383.7 615.2 517.4 762.5 598.1] endobj 58 0 obj [859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2 431.6 675.4 571.4 826.4 647.8] endobj 59 0 obj [277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1] endobj 60 0 obj [272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1 441.3 461.2 353.6 557.3 473.4 699.9 556.4] endobj 61 0 obj [761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272] endobj 63 0 obj [611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278] endobj 64 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500] endobj 65 0 obj [250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500] endobj 66 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 67 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500] endobj 68 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 69 0 obj << /Length1 1406 /Length2 5931 /Length3 0 /Length 6889 /Filter /FlateDecode >> stream xڍuT6U:ҋ {/"!%j轋HQt邂T))s>ֽ+k%;XPi@"Ђ ! @UWB@) NeCy@`4֦AcH$ IȀ$e@(7A|]!=$EʥG:?xp; B]掭P8  }u@C2 {n8 Jm:ACHO A}3\WG88!l{zô`&ۜ`h8PZDRB¿ {~;AXAKwaH1^a)pC{AX33v(]?'0v7XXG\E͜9UT~@PDZ$%EALMsHpDbmL|YA]hoB_ ~WuFnn<?]ho4VHD 5h]ZhV$'59P9`ӻ0; ˇ^N U?K#H_@P(?)vؓ8{B$ 8"Qf*{y~a~_nzPX^lϿ3SHlK]dIM_\y13vD cneu#OlGgV[IGm)4QZ 4 soǕ-EiPH{۫WW]ԪZ6yٸ`iMXW}$5 1͞4y=' N-X-$NUxflĂDnFe=GLi dG+MEc0w68>}ZJeP%}[ Lxg$Ӕ {7oQ6-;6&N A@5uqrpQ⨧}9 2w *+$`dE#>g<4_b$hQj Z=w {POi/EbLӝ ]:~JsŅzI?g\`TR".Uru&Qzbj{b[Rӧ4 “//9+n>20sIjܺ!wgzĕ nrOD;o|g,o,I)GS@ C3_pkя)V;oZ9} EtX}uīcP]%ʾv 0VDݺz(T{a`SuRc`[XfoW<-鷤5!6eJkSo~܍zQ;6挐p˰h%kץe~lKNP^筚/>*8f jO!3%d~2y!fHQB%sɎ/)b3 ˾7HM{Q}SQ}XAəc\Dam\^t-'ؤѼAocDu`t/p.kQ:5jôc Xrg#+_bl>Ib-~\!=N*n\Y(*|-vmz̸Ņ߫ۆZ+> 9 O}[t\]lx-R뎭Λo60d(*)Nվ JS SJ]'-tEdQTsN_{ӏ` 7OR>T[&ިdc|kXfP?h#rOW{.%vW2gҩo;? *UP8L_wQp4@7]!Di.*75ەb)*|8;=łe%Qx?Z|M/߷Y9-?޻ύI<75{\"ZYLΒ&UE`J$?%H&YgԩrURPHEEkKh3 w`@r6{x &ܐ:ՖSCIk 6iUY)2O OdBW|+stUe!˫ʘcN2<ԋ$74)Y~Q{fUl$᯸>&PNÄDjI'1ɮ)hmկ=_ujb.P5O1q|SMөSnwCv<Y&]r"f=nN dDbQJiiCZvXnnǝj46+)8fSH+` '& -z$eɓdfORFWH$\aTiHNd5.' r՚ώٷ81K I1%*қȚvdm3QN,kO:\H:yiwpqš3Z{;krz|*uuU 8J' ]Y{Lb\x/h߲xxKw@,ё9b&)ζHʀfcq6oحi.|jƃ,Hc f$ŠD\A{+N)[<Ӻ磰:f a,,w%o(vgg7hXJ kR\ꣀSԁKjR0pc)uHd }Lտ[S^*!8ᤒq]%m$+~-xF>, EF)qPs9#W k'9lT㫇vVFv&NwĖr>r(f\s_3/SQ.5K"[\K4zMlܽo6G4>rS]FLtc9z- v7,ud4YUq'x1jz=}5}G*ZOOqeAж9Qoj| D3ʒiF7hp%f顭Jkʛ[yF%g4f÷VT 0Uژ+&';lc]'q[#VdW.'MBJR:Dd5P2*a[,QMLnH6()%(D?E4GA; 23l~fO3NIH\t'&9~˴̛SVGpWCw-L0RZ3 W,i]?QǨ 砅We.}aʠZCy󊪪BXv"f@L f7r͙G@4gʪBWPlؗ~'ƕGD )խ̦-ya4,R7oUS 22FWʜݞ @mTfWwfۀK}{u\uEUExa)CDO)_"{5\Q=]?,1x]{=~0L[ycB *`%NGe^ ܯ'2U,[}hߊQ>y$D3`6 r .S{vlTuslr;6HҖd3BCJ5,6G>Q̌=_kPj)p_ab1N>)dNM]? Y}:1&d`Wg9M a nOFCvXNXث,338^Dh, ?iY|jĕXr4&'"E GxF̭{К4F<ꩤ.2Q+dJ٪pB ~E9&m6|{xV֪]!CM'|Btv "`WK8Zfv-^~sOȈw 5 *'{y77gH|diA#/%hF6I$嫗%I3jOžÃw e2rbZS16 =bD6W5PzrWd!x$6"Ou=[g7*~C(u qBFFLX\5&L|$!!/ z%ev\2x"ev^ fÕih@^[ -NZZS/fLc` ^?v%%͋>\-k8gOK\~\d)i6ޥ!̂+77Wx*8 Tf:H}4W=$=Lc8ǔB2#"(WXՋWE!\lfŏq$֒+D1^V6ͮ^_(n.I3xg aO NsQ,eNGrtvњ9B98ZG%^j̼U1.REfd ԜL-j/ʰT*Oj cUv%neNȱ'4-/ȧ.F0CsFW,*4_?2#(iqQMP(b@3p:_Χ}7f+_=zB*deɹKyPIwYL3)sqWSP-G'+嗭q`@d/u/>d_Y@4j zP8㨵Av:ZG'ɭ}el>+V#N3 1;7/+oI0sk9pʊKm]cpZViqL9CIqG~&oMP} endstream endobj 70 0 obj << /Type /FontDescriptor /FontName /LBWBDW+CMEX10 /Flags 4 /FontBBox [-24 -2960 1454 772] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 47 /XHeight 431 /CharSet (/summationtext) /FontFile 69 0 R >> endobj 71 0 obj << /Length1 1675 /Length2 9068 /Length3 0 /Length 10145 /Filter /FlateDecode >> stream xڍTk6tJJ#CJ)%-J 0P30C4 ݠtKtKw's5k:B B??/@WDG+(w]*pN%2W"޶.^`M8Y=6co1x^fIds#,g2CiQz%)4vCU=':Go\TT^pJܕ05GZ 7>+O$\U`'Mg h1{{69.Nh3?mFEs5Y ;}ZcT]|u@:mBv- FNh`ê=ъ^<k؍,P1I9 6_dIW GU"¥`ڈz4' ;7$Z}ёM2' YoY+&vq %0D>J>᳦iߒ-RqeSy̙݆ v+J [ҟZl X -^3TD&NЩ ȌC۲4'M=77[iLeUlȞމ \u"zSdCt-F9L"cS<0A8+[hD=W}iG;50huzq8JdՔrkZc]vT_nkU-@j2XXIVZ2le-]%<+W$ lb#O0^Fyrܺ%AN=k(aU`)%¶jlUoލ3۟380pvfف(g/uG^S8f8e螶[(v4p>6Vx u;9ncPˏBGNE+6xaT dDj^MF6hE/ɉ(쒲OrЅ5a2_^6D&n`]([ ɢtk& 'F] C~{r2JYbsD.tT"GO1:c05(߿?C@(yFUҨB_EY"l8Wkl-K 9|q)1akWVYmt0܍R};+U(O$<^TMl"G5gTtK$ w`@8ϑllXϝ[-eeèTwWfbUEN44s:O;y-msXUM ;U 3)' U2lifcZEX,ʵh`CbrH"Mf,o?_\K G9#E&75cYibC^)*t;e[\&pu 5CWE;/3_ ڒJ*LUWҽnSi^/,mjL8v鹿ˠΦG@hie)T s J5!\"b*F=[~p"OY ;-f`y`WTQVbc1O+1-KrϩiNF1au$jx%:;m(85Ur?QҔ k+ du"RqVOqNE,hF")fn?Vfv:8%7W#!?ry'D*p@%0QϔT~2 uxӒ {Fpئl :3䷄72{e)F,FQnNʼna[j%>WamL4cANA|5y$Gb`2)*g e0Z*xRf{Þ͊ڣėlZ} 6b16]<MkHrM:c2SzL#A h^c`nE혀Jҁt-#Vr3X_'tsߦו-5wn]`΁zEig\ 9)ɛ+y=3C Dk̾G e5"lҘfJ90(qQ0!sT[w ḽ_騖-b)裱-'rJ4eZb ,O؊r !gb2q\+7^kE$# [Ϧ['"R8)}^4Yw3h8o6f|6@(ma_>MƖ_Z|򂀻VpSPJ?Qlzwpy%Y_ c) Lf`>$W3***G9 .  i~L!A}Rh)@xfbwgN',slS n3C{>wgaPIfyCI`0 x,!cEZ-]2HZ-dl-{F~'©0Jk<*ZVz"YיQ@9m3SOΠĺ{x}^E<,e S| 79kԗd=fpsȟzi8x7rRbXkfBGqy#%3Gg¹u,G}&z|eN+rhoOmfdh -ƽTbʼ͕RՕ$DwH/O93[ܔܽCfo׼7GiAC=(+;yJL᦯=uꇢ W:TtE< tX b~4Y&[rWI]nlOybE59>U+ Fto}R~א|JRVBw1NU3)] -DlcA7WB0R4p6/R_~83$u#7IY8ޝT&׏<ګ31S7!mY'[,Ul$z cm>x{*owx(JBQS_c'aph[Dyx#* h nzb"[es~t˵]-k0ՂI>b2T a71ϙOTPPXxB{1[IEF34ժe6,?Lˌ Q-7_9ᣓpQ8ڌOdٖ-꯻Zv 'Xp-Sm7a;q8L2"]lۍr9Q#t{,s)` Սx*10$*1B:sR TiiU9FX"'a|-HˆzJjؐͲep> vCc`p\K<3{siG-A1#!eA?k}~PP,LSmq%U ‰,P9 /xkv5%|f J;(״M!f2VO>dy+!yN=}6swbY߂o|;&Ot[oie̷zsWK=OxRA_q/4Uj֥跖Nbuޟ(RpďIɋ$%|9-YTKT˸~)U[ƻ!KL =xXخ)eBzV#,0bxiJ3~~B:0Jp!̚ uD2Juy\ZhORVSok D, ʼnx?M׻%nٓ4EBd|?,ysHF}n[ j+;",,kMK{N<b82Ě'z-@ޠx3' ]=_4t.nt`D(Y4b'}Mv_yBK o}T5c] %*Q]ELhC{L; gkOaÞEI'+ArD-5qGw@E]& :LQ9rX+QX2nOTsϛԟߧc(8]R놥>Kv-] ׎YnFtRJGH~OvE"4YU@ldBDD=&`P_h CbO}B0ZzuYlH%TcqF_ԓg]6gF'oHFt&cib}&0M?mR`&^ܢS=G`d:Z{ĩ"6|5V+fӴ%n"| $-Ms8*7$ e0L%63!mEBN+`mV Ȏ(wH-=@|˒܆]Dհ=ꝰej;Q nl/b\)KneF1jI"^oR4/ ߙ{Ly,BP4x;[S<u a@~!8?6(@2?W~kOi>b]jI%5-Z Wع䁄[˦:h/0v˹)БH$0@Ec9#Ʉ~(InmCX]ߵ[ Kӿ5x'e'=L!aS ':ǎsrzk 87MlE$q YUQ 4߱ hj_$d-^WmjjI~!}:lhZmM4 ^ϴ"L;(r /'e wqDYD"._܀̱޾e,MO;GjH`~U.V ݶ|Ě3RrOnғ9BO8`at8@y3.mpjB3HH\(YZDV0.4T&MqIM*z*Fn 2!lkJB^:~`GnG"to*fC>X>SnmeIR ܾ,Hkǰ%{wJu = щ )7߰D(imt`Q`UZG^fɐ}sq=}zZ|^b]Pm; vڈ:c^2tkNS&z'Xu?G]/9))eGIx^SZ)?1a\p[mD? WQu1jųXKKФ^'aL3heЏ,9E}oV㎻z]Tnsյw/u?@CFy25Ueu'c I(Eg܂s8ʚIhjDeMcrK5;FSYŵ`RLI۳'!dqx+Y4F%j|lfb!\M?_;>N {xI`k nVӧZkB[~^Iy3UQK0/lMo)7.YrQE6X,,&PT wTN-LcQ P)I%8ҭZKTaOOم#9CAG*0Xx[x7:P FK?̋I/ js;n:#y؍Pt,,m)E'_IDJZ 9JփdyQ 3$1y܈!M}Y{gA/6rBLHY0^ЭB˽L*Xe oZd-#\(%}f:<˫6bpeyCWݛTj;!W.C7akedA@YpΫiй9U4Flϔ;+mW,'{Bq[M  gN !\ Y޳JM= yC%.2R )WLX$18yfR٧`efӴxV%c_ފW%ub:ZIzF/ByfeW$a1Ο6.WQoϧI2Cؚ{٬B!ʿԟs~[jE/0^:>&& 'V]w4֎XO P^̊Ի$pkND4zߪhe)A,5zl/ˆujN3Ac8--يRJ.jPuDg@ * tl5&] /TTi9Oi0Rئ sXflQ:Li:i_GcI棞u~N\Vb.Yww_>L'= `HIHWSznX(Y(K?u2:j[7S uįb?~̪ݚy׾'1# aENAE69(.Inw綣6t~ :rBX`kr3Ye+jxaE EFϮhՊI伙nQ/&R)MĠ*zJ>G|m@)ffᵪ^>5VGlsM6/y1WT<1%judy&u11'[q qCR2$\W.Q:ic53~e\ޯt5z+R.&X_|&(Q͵U"QUNZHM ERVscSP ]ػe]J*r޽4v#P t]ؽկnn?TtN˚Ink'^ [e6ŹΝP:Ks`}tACw0Ua``}Ui\(OqԨ< k\7"YZsu=SGgWOf 3(E&̠.d%*P_CzGplikݓRnPIeamX#y>z7qLe3B )\UIN{|qꎥİY1<ߺzڶ- endstream endobj 72 0 obj << /Type /FontDescriptor /FontName /NUSLQF+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/L/a/c/comma/d/e/f/h/i/l/m/n/o/p/period/r/s/t) /FontFile 71 0 R >> endobj 73 0 obj << /Length1 1602 /Length2 9263 /Length3 0 /Length 10319 /Filter /FlateDecode >> stream xڍPo6H+4 -  ,.Kw7Hww7J#  !)|}y9}_\yh)Uԙ &@i&PTeqqj`P,@cؓNvv^66ߎ{# PtZ =TW)=p dj (,6OMS_),a0[VV'''c( B YԀP# 2@4tZ%Abs2 S 6eʶ@ :0jtENllj 5s5,s1fxcGcɓG7HjjAY YyjLbcà' >݅~CnK of`PV/': Φ h0V?ap̟`=@?t7#wz%tvv0ZfRor=яϛ `k1*_1Cn̜fn6;ӁU1u:3ʂ!OyDԾ8E % O>7Ӄy #,Wۀ]x"i9!O+_W-49Uf$b`'3sqAA@3O2= 0Px{.4CxUsHM!fw`looD'f@?8`eC`O!'s=ApX~xHV$~~?oi_Fjo*WulN֪>ZKD )mǡE6FYe=G_o9°_l֪0_xUv<Н^MG=ʔZq\Iy\0) & ;\:Qg‘6ԳxHD Q׻͞e t~1Lq&6#Lh+Y]D\(D hp:%bd yJZm2 k[;4yta}T選EU$EU%(1;뤙wm-!f ŽSogO.E%+\ufb# 9ɬhL6H 3.d/9!ϛ-t/NE* +S<~g0Fż/]T ԂEv:'PktK5jK3ZF-}8aJhDl4R(Iނ:$M~|'7g#GT6w*zlZI02M1GF/ǝd=U^ze o-G [SVu&{  #g@>ěOdm+9)Gz`J;~/ |i 8nVn f` +NcR^E﫪WjeKyC*JIͯW, t\I z.7~}C$E]u)nNv#OӟLy23W8MW\q/wbJv;ώ hqFD#chwo׆Jώ5N@+wtGs[y_ i/%~+)B d_'1<kdyH(fm5Y@߱,NIko ]vg^vz")eds:k 0 93yy ~kE{E1çB/ +J+j"ޑ-y79g ,D< [8P^yp}^ tK5M[.)tRSŵ N A!(BIȩK@국xZ>{l(J.I?!m%|cWQNzOk*|e5ixDx (0uZHGR1=u^KC&c#퉩[/sUFr;KLym {eykѪ! ,_%K`U #,&VHme[y{mxD$9ވVfIC: s`u2UH]]348WO*F1ߢ;"}cLfBl狂FQlv ۓb5$C(lմcdx~&'N1= vKo9ļK >0ARo_E 3uG_:&ρ w:{RWNrwq$?*qzH>Vppd%PGK㮊B1Zx#8,WLt[_?O1 d|ӒʰUa. ͠ I&$Ńd78'0VT+3 ^u\f]57Sg)jm)_W~Ԕ+p?g[-}$7kNLg`du@"@5֏=ǁ{eMϪ\O ~wtpPh}@>cyΗW˘055Rп]񢼱7I Prћm5q쑄ԭWHmNpt9ރ`VLJ0E]Xc`BAݚ' f,Iډ{/37ImC+I7z35 /+2CŰ/l^[QMةCT{ŴWYX'pgF/(ۑmz0qծȼ.Vi 6蔙3&]&e g~e7gLV3{ʣAގuX8vM%wjE^;"XZ'2]_%EÉ1s*HV [3RUQ#ܘ C):Q/&5 lJA A/U\eMw+ܖI_ud8ZDĊddf7'y!k6h q\$']v6d=,!\m(R1 ]vKrmZ5FMkࣷdps`uM%FnSg?&u1/Ww"fjO-ی_pDUs&Pj?ffv}ӄvC6ufc}GjǬ[Ќ+K`^{8/Sk좥^/KX$B&/7ŔY z`d4x_ PӲ6~XX#ܷ?4( L|VܾtlY}P\&v#;_`G5o$'̟}UZ+`oq*詻XZ-LR/2Ym}cΒ)Ol]@9dNC] GlE:!cl9j x췅Π) N7\uII8Oыs]>) {Vv}A{烖Pe{zWo!>`NTR4{O2O5 WWgHL8(9TZ(f4nCNlY8T>K(h8[eFҗe*sHj#zHuI0f:cɑ[Վ_6avRZs/ ѩ@R݁zceFL¬h tI>g>UY|CPϩ5yEGX_l3SuZ2o~JV/udx;1O'EP,TWiMNۙž^{=#975u\@wAnMC$GGy/߄uӌ1۸:( o =<Ft{B_ԒruzGwshfgF[̞4Ɂ2gp^5RnNU%EB6$Q#A[ Rf]!d CIFJ2.º#56eyuR)TG&Hi(/IHv^w&ХE km9RhO!_u"ҁw/oXɼ_s5˳)|.5=vxփo4?Ұd-&"v(jsqv |Lж 5%“FavgjdE4w'gqCLTDvVD6 "I3D6$O\uTWkHR e? $PE6O|WsV",dZu^ kηArCn?+m+mk&ɛ\iq_JD ~+FE =8S2c tWhU|ܼ:<Ǒ`bk[ny"O {.FȮ"%% @|ܝ́{ܥmzu\bפvJ,T[7$0>]!h_ikg#Gfbǃ xa~y )8DFQ=і>\`_Vc&"W}d7DAiYKfk4{S֚r& /׃DKwCLHϒMd5-Xv/ʔSfe*N 4Fa MeQ^D_×[֍c<78be:ٻ$R {H=,Tv@Tuݏï|K[9.Q~KJɻu` y eC=ƆWm g;AIe%s|h-b(_ʕ}4ZRKocbr͌zߘ ĺ_[\,[D/%~jfwyjgy 8bI8&b&P7mX,vQK眙 iP| pKFW=.B^~bݓvR(̥8=L "r!7k@>'^4 u'4|:U%*Nz+J=$ r'-L mf"UU}q[C쐊Pg,JL+WV05qkqO`B`,^&qKq|'}i%]ןv]oi uUD^-'8;\eK k\uz8v)i!F7~\D-[2u얭C)V'#-̻i_) ^p<6cLhXy$STWB$'I|lwX~oLkPI[m8җlu+hN- ~f )g AX8-FAQ=C*yyUAV ǯ]:XQiG^هΑiu);IaֲˈFf Up'ol5h 'BhXط<2֓lզj*Sfq)db$xoWu5\$a-=)doF)/*o^׏ FtJp ʗWɾpr%;}wy!a]%ֺD'>ɷV0$86ҥn Ht:Kp3DQI"c׶_Ctk="׺j|+[Zu麆n[ˁwӐcFe ?9 -UP!ݯ,;&T i5ܥ c=*vjH%!&*td~ƪ&>`!d{8/ % G%Nl ¹ Fxc|{#-|ʁ;CRcFY#[DN,8 ֗έշP9gU?eMpkN۷&] ޾iݴy6]v=#~s}tS^Y/&:'b?Gmk+hpT;WDὲFX y0٦aC]jQ.ZdӋ~zz\y9'_>9 MB0:.D?Eop*T0 f~ QAPUFﺰ" b{C/#Ӿw>6Q H%Q-S~9f0}o5.kwdeՊ52A C=)j@EsUouAɁF]4ֈ]{J%I>q:Sv X'?H6V;';-]j؇*tSy09.f0+=Lm!.}$!x x0@îax恎mB0U'7Eo=fmܺ(d-eSޯX,oLb$?i+PYQY7Z-ZV[RC1'XJIAxD4M7:'  g߳<$" dOuޤNI,+W푗F}v eM G\J!ӸlD=a6,I"G|͚{iv oe3&CS,T^ĀV5+Tiby"DFp2wlj;;mc\-a*QՖ>J"Y OkjkGbqR]}.kH"Y<}TGL'ܳ39:ﯪ8#Ԗ:\Lb%&nzvd3͟ T,:z&},} M!\E .#!lWa.ߵZdP<ÆյHKZx|2Fd|G_{FªW8&  kaO_}+ endstream endobj 74 0 obj << /Type /FontDescriptor /FontName /JCUOMQ+CMMI12 /Flags 4 /FontBBox [-31 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/A/C/G/c/comma/d/greater/i/l/less/p/r/x) /FontFile 73 0 R >> endobj 75 0 obj << /Length1 1406 /Length2 6093 /Length3 0 /Length 7043 /Filter /FlateDecode >> stream xڍt 45Jw#{#Bv0fca=]h,D쒽Ql=y~9{~}s|ƢpFaEb  $||&H /5 @Q Ab : (েFu<]`I XF,%@  u(OA:8b e>aB@p+AQ@=(J0$JXC qPz#@#ㅀC]&H?zc=A $ Dx Ph @q n`1+; ]ݠ(_$htA@tŰ>X u@^P Ԏs(jAa=<. JCeM\@a=@b0µ3 KG@=MQHwO_. Jʁw (+񷚀 '@ ? b<o Hhp@d'd1H%=0}h?+n 1k ljjh?4e g@'6 ` \8_+#w }4?ԷI`{~x+Y0C].9%v5GYe=Vm,(ERb ?z郀 0?D{.H@LxU<czV{da݇& F i  H~w % h ט +-!BͿ@ `I4L1ܩ&J[tyX|;BBt5%Gsf!87g62 X;뫹}|s-Wԁ(d́.i#Ck4DO8J0=DW^] w1y P5ț"Ѣ4G]lsdo,,guR1 Ż|@noثRfOK6hp1 7m3[PX88>l0ӴfǒҝarE9<+AۚG 3N|vz5,YnPUX =Q1$ݓn0a8]'nF[y>1N'SdNHcZ^&)3ុΜ*LϋwmKQ_8apɧ]# h +KNn;rWsy 7+~1 :l~g@P>fwZS>BfQdԅ Xu]N] v.Zxo襪ecRƠpX~q)TL/X!֊V[|4Da7*;D% S@cm^Q?fhA>17 6 yg ,?K'gݼQ/Ma-J&/ZAcDJ:j,rsCשlZ*33v.ޝ:o7^C[+H?]mow*H{#B4K(1pxpǴ} ,I12ըě[֓3.5U@YpT|- v؛ IkGM VwJ lo{hܘIKyn8Fh1bk!^Q:_EyMnrlY'B~죖7Wo7۱V4@XcBn}1Ջk/Oz?_ ͔3dUrSqe}ߋ;qa598#v,ŐA'WI[cU /U>޺O";~vf r@b*:EWI.aVs0 s* %6gqSz;ڗ^vUoaYI8rx=Oc("GJtFXAdD֛,+Eӂc=߭*"Ot~̏e\^j5XCжp<%]TwU^6M+>P#ؔH^ǿ ~<7a׻7BA2]hG|.δ^n-u[y m&ݞH"Y"Eǝd2F+Kǹ2uCX6y$V}#QheJ#j9n(=u'KX5*e[=P%D4lz ',w2 H&3~"IG])f{bm`WH{+Hxo{2I yQ~cvb!)Q<)!гcZxrdCդ3"I-F>^8ߦ'|PhV\f^{mr®G^G/Þi}y^nJ;υem] F뤧}Wd+w᳙KʼnIO4Ym]0 ga[폗f-yJbu~CG ?N7nR{AFbKtŠzyrhYyr2M|SP2Y /z/R}j +w_q/oEO$f^]7QSx6=߯Şe["&"03uѻ.>vο%3M1A© mf ᄈ-j Ppnŭlb>XkjO|&ST4')3?.m@*Ф*cj(\ׇ 3:z'E i{3]f[ L CW^,,|}%~ğ[쮤d62gcxژx,R]+68;{O>K2)2 #IkOf'L M݂VԳδBV)!p EWRl"kCQ> .zE/*^1#vT=Ƕu3Ey$s=cy2uH,c@fe/nOg8xNuA A:8?Ň4$NZ4.v+n&Mxfn.@`My]Rtm R4]Nc:.ˤ;4UU^8ɾ<rAUZ.HqĪ*34FBod;rU,L{RswّY]Ł,й&G磚XV"txLXma>Md>uk>JYгyݫ~$,77}̰KLK\mȀ_iv/zR,wpKM|Up0`R,dKIT01tI,޴|.EGZ[ӧu~jALZCE|0T|& {]3r=TH:<ݭ*z#*$;Ļ.ZObs7LõO+ P?"f+e(G\[Ο5޳.UD8;| ,?Y= fN<5kvDC6-k/QyӪk* v߇b*`f9q/""Z;ZmfMiH8Us~@WW^A> U`\O" lj Mu]@Y|ZEK\-my$ [8m.\ު[!ޒms`TjS|׃`9G/ܭv/4^H1W]ǃu֜* 9tLbB}fF ]zqU&K?bqKFHF9sQn2fƏ,(xᔃrS yvv1/#q..Ɵ 9tۤ/ʣk?)2fCui] Jl| U#Ds/F}o4,`w%[ChsE\XXllhEЛK~J$l[hr0R0sĿ%.W˯U_NqcC lnȾds{kd~1 `(嶡ܺxW:pN5AYL>G TKdʦ SSH>~rk[bbm\._@LH~OWƮ:a^i䫻N&̅z}p%@QQvOE@~D.S#E_ņĮ81z11d4Q[єl*KY;ǶAK^Zʖ%>듉Irm8"N&3"}Dg@ *Kxt\|ssqWm՟%U%4Ŗe(X\٨̓1{Φ 1C6g-wOY=aTPֻH|Z7=D ڔXF 㻋]$ͬk޴ԉ-r+rĨLv獡f!-{#{σPbY3z7(]@6S‰]#anhښs GݹnR"/T0w>> a/JzOW>ݦL%%}Vnf9G!OdHex5\C3:o{6nywֹ,<#x9NI%sB4WW0XniQyq \9j웜ɜv}CZ[\NJO V:i,؇}~UӪWT1;z# lȯԇZ𣹍OȦ&J&qMp C@9|C^T 2xo2qPLU¤Sܰuk.D:\\w)E^p\Z3ɢ ]Ff?=cm,i/\ )4ylT+LfWu2_7Ǽ;| `=պVطK :햠ֶnZ)! b7>gDxЋA,|~Ͷ&@Y<:f~φmaGsʣ&od%$&5**64Tٝwe:'=vt+6l_'HGi(8|ި*>BSDyz.1ztA k"vXεη9)mK;,Jon7se ]uW'Cqtc#6.H|}CSڝ$N&Ia=eW{n%V /F, C6؞{0텫E "?'~I#fuBYaiQ޺zTK""@p;SR_C`ESNaЙJE]o7~y_a oLA+rowE.Ԍë}I]B)QpuQ1TXqq}__c!]Yu)xH-)ATQ>]2WI<DI(L" }? o޼CTO+={bLv\?4y(8+u硧&79l?q1pBJuQTO5g12] ;g˔/b8T,Bd> Y@e+^s^qYآQ1K`S~O/id#O,zvt _Za \Qe \"vDMRs endstream endobj 76 0 obj << /Type /FontDescriptor /FontName /UEFQYP+CMMI6 /Flags 4 /FontBBox [11 -250 1241 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 85 /XHeight 431 /CharSet (/U) /FontFile 75 0 R >> endobj 77 0 obj << /Length1 1579 /Length2 9161 /Length3 0 /Length 10202 /Filter /FlateDecode >> stream xڍP-C)R[ E \kqo)).O9?sd&y׶Y{N4Af`{(3; @RYYƁJMڂ2R뀝]  BmR@s=@ ```cp,A@e=Zbi}>G9=tb(V`́Ms_%脬PGVVwww =h]n`7a '3TjO <l!`{ W{|8@S^ 3X&_S߅ ${K PQbz@@{@s> =qs @F\|&=sg#ԅb"2]I:ف.'q?ݓ;{, $@'W_!&m`(v=̭Xtdm~fx&XP]n`F 0[BQl[ =kϓѳ@1_VI 9u)?㓐px39aUBۿ-lrxn<_+C#T +}C6n6/#OߤqMAl= x+y-Cu2q_<gfbaqxAj՟B{gBj.o,6=o[yb.+c1y:;=Qk {w+9`{<Vߦ?/U,*Vг|X5E\Vs?U\͙99_,HV!3W]t7{QWCBĉݙwOӯ8QCs&9٫2+2ֽ*N׹_~xo75yr]1|$3_|]HEB*FyF4Շ !MjLچ$w2^.ueJx$:G[vQKڼ-o1i*B=7c E*QAGIku 0J3_{bK'd "׎u->Dʃm>9sX#p]i>+L,Qх\I`%@{DX֞]26G,yx-d;l)ͱ9(٠/z2sMqTG-h/AĽ|(Hy$sxrG;vV~~5V̗ UC&~rnT$3IpN/9{\rYQ_3iE1/gʛ#i_;jXP)@Z9׵=d.RT3-cF e㇄ %S(>LNŐ1;جCR񖿃1hqȯG3o%5hBAURm.^//~Xt\tNӛzQܿ_;OKqwƍ$s5xskd i_zq!( )-w5<&T]1e:.00o[ۛOy@$),J'g#<_`_TKD e>`L:# VrG,JJ-UfFyU}-0he$.jTO) ;̆m_{zX|נ/c_Z1v7+áO/bKc#+z`|3BdOL'oY<$#IPχ|M6NԊCS$|o&tHz PЖB}OH9TSUs%8pst͜1<>yj㭸lEJqɛ4o ^1_e ÎbE(Q[ mZAҗI$ԄKd'پ`ErʿƆt-z$w_@bpd; |DA5ucˮ@n[6>|H( K{bϚq=^(,}cĠKpC8Ճm_aFh.tF{¤u|5v ?UxЎLeEYMQh`A S6/jQ9V'g73?zk p\"^Vw,G&zd#sh{M&*qs~ ի՝ll`5uGܜ\_.{uJp]Mɷɾ[ 4} 6M]J!JxS),FiP+/)8 Uq {;=Hُe*'S飌e|X?syan$⤂!d d;+j.!WFԒ$9}VwnTe.9ID<&ivpc JyāN?~@$q)(pOr,2%ݜڠv`+1MA+ED M̥K7R;vRک]V 6g(jW(̬X>CĶG;|M-4Vl.{H[$m_Z#:7~eΫFne>)}#=vi|Tp=)}ùhn-O|m+t0R͊ 91&v%& Kh*Ǡ 0X]0kb u\dz+oI14h0]oS3W>`i,~Y7)PR@pBZPׁz~7*彃RmTPIבR7ai-"2Q+$CwLk5b_eqMF۶;. SxI|OZ/޴5 =2rlkM 6hj,k[ R̎cB}3>**GbL|ʼE@㨖C_-0E7}5٦$[-gKDpbS?> |J/x aUL^|=޹ {yI@Lekn7][۶zA7({Uj^]i~ږN]!;{q}$MgS8B ]"zJC"T9Ϫ#eLmPe`I$m|n*\zWO (aY8:;X>7&MJB"ZZ+ˀ|bᢜ ;n&1k q,fVx2dq5W-ˆ6ofPϳCәNάt.f2N&Iӕy3&4o;Hu t~e4jP>vϔactӵ/F"h OR͑^=f>[I(cxVj\/>ol݋ž.\>!S;25]} *>)^{ ;C]p,;I-E!dF{刃_+9-3B)lKK1Z/,c!C6>+ Ң|qY CrJpҒw؃6/#To5~k-b+(pAAp!`Zd -Eҕ=JtUTB,J:%n2΅R2wFactCG\JC/z(X>ՎǸ˩65քCU פЖ"A&@ݼH 3:'_ xeg?lB'*ԜEI[K kt#螿m ʓV7(0xmW6=~ޏ`M_Uޅ# [Ǯ.,A{`%.68⃦V/od&RRi!u~l&}ܛ[d~$ensիuW҄Z.e-SyIPTj7>XOv-Eɡ2 $̻6LQ58S&6$ 24{#=K1=gv}f,-plK2MSCPl}oyM$f7 6dgѫ܉;{F]nN[H75nVH?󐑑ݫi}+ƿaZB"~1\[ T|r}B2Bޅ4~o_6}W-h䟏68йK$bq5+hjj()(LfxgRib{-Y-u{7$1۴wbfj8Rp!!TAoWWwͫ1˼+=P6)~?Jͼf2}R>@F/$%W!{#JVW s4;y;9c>=Һ&T7Ns)#'4~+_;Pȩ/b6ÖCx2-(K喝(}ψJf_lVtɚ9BT@KtϤ"&NVIE2tehtr|gt8҇A)7?/"wPgݛh6<GZθR8Zތ:e_>荬]4?ֺi07z^:/v᝼-9 a]R+ۣEk/7fcV[|@/ԟrO=X_зW)͑$a*OrD>ŕhmumLH^y0 ^Fx#FJa#O26xQTqAqYNࠨ$%rw is6}"jJ5iϜlƴ4\QjeeOdS(Zq'5K{=&v~ԈO- /v6hbɦ&Zx#IDHJjpalRA@M`a`3AUI=b42Nʫo J3 K2/mC,rY`9fy/Ȉƴ&wbÇYfU=yy%(DG||k809nZԚөyT$꜖λw]wx+v,t;~K{O^i_jc22=qN,X#)SݞzHp[ۥvYT`@ :n_LSmc/t_$'4@Atry*@j| ji wѮ k֯GtPj.tRSTN9B*(Mo< R)ڒo$ʯ9  >׋z%R]Mr2# ^'s-:xL@dj#(2̓꺣!7W3Q%̄:Mh!CaE^ gb)3QrfMj iNa~X2rŬ_ӡ>$HftY4cӛŞ`OeH+z^)r>ä._E blii[>GĈ9;g F9ݫ4mgǗoAE/sFۭS*D,\Pcrx,kH ?N6(Q} D7i0Qh%i;@Pxc-Gag1VwuEF3 ݯb;JD9nE [|R,D5I߆ ɦE R\J4!T"rK_!~ /^Uw@$HYc{p plN#m2"zOmӭ`e$`݂7&S=HExEPXp}"œP28'7" 掽ȝ(-âMɡ~ء{/w%Z҅#啒h4 / ?k p>Z,UsiE@(IӞ*z\,|yk/' mLaE4AϘjq3(_'0pW$5W(9**N[s=} 1:&`њe{/׀-8(lيKͻ>d~wah%T0V>5O팆LHFERntg}e+B΁c;A'4Izu0ToVk& zPh -IaXAlՇKI1^~Rذ!!C-PL·%4_;W,W[˯(jX r;R#0ͨP\qum=b&Ν { m5'bf$Wj==^MZ wz::G02c馾7~0evHA Փ endstream endobj 78 0 obj << /Type /FontDescriptor /FontName /VCRHQD+CMMI7 /Flags 4 /FontBBox [-1 -250 1171 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet (/A/C/G/R/T/U/Y/a/d/i/m/n/x) /FontFile 77 0 R >> endobj 79 0 obj << /Length1 1569 /Length2 8484 /Length3 0 /Length 9531 /Filter /FlateDecode >> stream xڍTk6 JJH 043 !4tw7 Z߷f8뺎::M)k%Tss2jjJf`еwwmfЇ!0 #mwdPpy`~a0wB<je8 fڹ##ي`r[A`5 W fQ;wwa..///N3f+whCP7O57a:3Nl=/  NVPtT.P_ ٿ $C.=`chȫr{ 0߁';A,vKi HCXٻ#8N)r.Z #O jl_'{60k$=\`P%ٿC&mPwHPGu@~qq \.$ h 퇀xBno P[{Ցf_ynR{`'30'/ _IKý~ܼn> ȇ.OCUb@VT*H "apo Y!'Oߴ7$qC|@j9jptwYVZ{8o;9R0[9 ޿y{o_JY pA5W2 _>Y9"rAts19e98r nnl Fέ5\0;2a>f~>o_Hpix\"dćD[=_FVvY /"n"RBV p+pJ)J/QQKCnBsLIW:oUJmҮ+s~5>;_]P5JhRcIX03UwͿb$.PhVom,R%hٯ)g9!k4 z+W^k}K!ʞ[?EȉSbT/?) T !Qˣ&On<"3b:d{Oגv&3Meg-,858Iz6>ĜPr8$^nei %&d\4*D{ O[#bZ7i'>iJ%qPz(9nHyt{ĭGkPaR=WraF9Y)( i4B'bԮ~_ sPnеr X}a38awsow^ C OQ~~A>J G৾`n%z :TZR C*[;\PNPt,?knQ fgJ󼝫Z yʼn9%B;Vn?O \S&4,qY;#0hKe,s ژL+MޑUuR,}\LI-!SO`WܯeИg([5(C2,k+ tQȫMKlTg %%؏3>:{2T e<^W R=a/ =L)L |^^ 7ޚbZ,V5Sڜi`]=ĭ@lrfxIi? hhEhy!ݍ74bs)FGY L k8ы7_f]'|n=ŧ%AM|cҐt#i?W a} ˨ eU|zݛp=5mRsx`k \(vjdtQЂE^ujn}%X$_kV37%.0QT"Q$ +MMBvDH_}Oq;@p9Fu+:/Os Ar"ՉcZLGٔS;&]uH;\~,x^#kV3Ҍg =L]Λ7mb%rgSe}x ^˵/}Nٔ0{QbIӾ.T2Ç*Ar(^(_Z1pIvZ=>QFQ׽ La$0NbR{!F`li fh8}\xCˤ#ӷ^R5ts !(2*Qʩ0%k[7Ϣ ezO&q_{B/&PR`j>כ+@>FzŊ&߾> YiPDc 8Й =8aUv S<qRX7ج>? 0+Lu"+"(&'y)79Bk#9tЉ-AjNtB޻rfյ6#.2"g {}V&zӈ D_PTD| SVi%A^q5zSڒU9%BB t5Jz~Q?6~'ɨ4=̭ >lj_\,i!."46wC&bOU΃ ]+@*DL0Y}L Ӭ(9Sx,jyZ7$K9l&ڣ3Ϗrbh~bF:^յO;z+N XϿd3McXN],Ksxgh`$A} rQɮ>nNF)yT6ހSf]2bʥ w ]0ЋЁX)+`ޓ:U*%Z\Ƨ"@}4Ct|✅a4oF `/~T/j]i!ˡ8xVQ ]@qQvmb0nSv@؏8f:M1x0O}p0; jڜP4-Jq VzJ^ouθ OA4bIjz05zUۑ]߻}s+7|abj0uEcVT*~CH'3N^'mGk<B;|'0 k dvTȡs۽jSY,q7P", OLãƟt ӷtqAv@wv_ R623lYG|k߇0r]ꭩ^#汎YD oDut^y}C}՟k(xc2p$tDi1kڲ`qveJӬMDza?Qo_m=&B+|Q։nga$v*ơ|qchȓTsZ;%&œ›jb[V30YȻ(k5;E-3-['Dߕ Ih|&gA(jl=e~]UC)ʳ&M|9o%l e0r}nyFBUCu\ḪTW8cǝ_]:yh}$"7.i}'"tɱ mnޜBؖuCK[E%gɱJE?GYK9ѕ`>FY{zJٔ&5'Qd/S%R~csΑz|qz~ -#H:ZfhF*V;mؒ6xXxHv`~"XӽH+YV] UEh%bx!OtĞ7aPsJouBVhw*;=J'M_Ɛ uw_|,` TcڡY?(j$@ɶ+O[RJ32OπWS9+j_[_sԿf rY 2\S)z1 }HQn9[ "~I1ZQқ[FTjq 3, +\J.I%gW"WLi^oKz>sH*La喀:Lq̮ %ɸ 0~2MJcg71vd* Փqc*y3( 87%A(ُb̼oC=mY ;72AOym k~MMF0ׇ ùkta &^2ɵ " \eܨI7\6rORe ~WGF܏H/mLaI $S{{&fr<{c缋R̷>V):(dRfW"*aׂ ֢c/Z.cLJ҅6ݚS^Gq:?\Oq-_K|ZzJ#|: 8#LAuD v2/C|V}}q Z[ŽV:$$/6D:#0KcSX 2Fyl((+D>ne0#|;%Rѓzgڞ4P6o.*i&l1YQ!UEarae({ÁWc4XQ#ealG8nT|0%YnWmLY9l+Zͽe^CVO'pa/a&zK-!.E 0fHcey0ɦc֍}vf=dx*|ȵ-q++,!l 뿒}EWqJf1+f8_ʫeʈLⓝ[qtE[Ũ sLGIQ#޾NP<7T#dM6_ݷ'c)NmKUwqLK9͓JOhu Vz.bAl >HH+%Z#H2W~2)f&ZD*`~* J4M*W'?Orċ0ݯB7f}ϓ>.Ԁ٢2 1YSW.-X%37[/hDy(,*Z講/2aBFڥqh^$~>.gהPaIXoX]>kZu|K-\:_(Ϛ2F7~m{̑\y|ldvbC<*><9֨ciͰFDy,=Ex6FRK"#%쓦lΩiE=|fNQexL iĩIo7fqMs֕KYu7Kv_(# ,ߤPATFtKJ)NP9!i?p ߂PlN 6$D NJk!= kuA!G-L: i3?3!h E(3P΍BtWPa>_-OS^\q=-"8-ڛ(Vgw٧AGd~,S* xR1t$7Rtpet{H;cm&'~<$+MV`weNl$4ݲwK|)Nq:G熹+{»c"u#8+@,4k ]7Ci^MKjwxS1h$Rrp7׾1!)}a1r*,wr(zC = S6}Z OVjxGE soLCDJ?/\S4R8U ؾo4v_z=L$ݙPɁm,͆msUqdbVXܡ_"VuhaFn#Ia;ȋ-9Tެ"$M-FZDIU_@kڰga{9+gM:櫊ڵ=_̱I*R<{9$pP%pDq0&Ws66SW] &'5bү8D&t+GҫdDHDbc;.\wfF:[p:VYl:׶m\^myJtZo֝('~{+q Iy${;/]gInFg0.=#!3~G{k؈vXzޛZŻ1RQuE?:[Qĩd %* &ݏn0ӻ~PUcig)ݟp-TzفpUǺB: 'UKR݋AE_%V%˕~[P |yg#O |d9=巺M\ovyKP*mWHj,%&?V37\H)" C|64`':ecnWabڵytUgUJb>nKk-b]'O>贙X#wCdnPҸJod j{T,Q]9N`V5GMs @Las ļ-6C%]j5"T1#:劼o)s:%j7݊؅[}K*םi:MMǒ/tඩd6#rFdq; $^}1@5xO8_xϠ,*"%3iSp}k`Nѥ۔VƊz8!;Git+7ٮ( zQGzn)F y }*OcVew?ʳb2, g$ T4y7?^M7b4+Qcy6^#; 7}`Bk)W[^ڬsSnjxߚ3Z?Qs#!V>W٠GN[e6T) Yѫi4|)!m\X_W8 6TGx_x68H-¶T:*U 2 Mb~^Di8ހI/VJrw5O{7,8ǪVх#S:ACM7Xt:1NF;A @,ks6-nOmŷ屋o~7I4}1O RTg_J_ 9EZtRMr '=4ld]IՑj+ZLm99$r/ⴺ߽ZX#NyÅSK/3CƗF46b[ (0ӌ0颮Äǀ%98?_VUfHyC(fi0h|).D0s$SfČx zha;}kyAd&}y(cj5@S/t,#yVSNNYoxJȩxZ_񊓌qEv 4/谜iFM\dF(#vpRזI>k:~kt" 6}wBx=" < f1,B"px>*V*%ӇunqUp,oX:oNjzGOy]L^q12^R61X*Z^<2zDAWpr0u! niuu7`}2pdkXbYw#lj"Lx]?,`R=*$0t g B/o ϕLt7yt辭5h~n&Q6WXJ}Sj lNS3iSK_܅HpBeB) _ X,wڠqn:]F"Gd:Zzc~DCO +A9kZ)?OSF#rbM?lakHa2Eq}AE:Kb$q>qj32z\px xgkҺz`KZ3'BM7v(עN!{L)^p,W!*jot)GhFLbY;; }EʾN|S^ȕ* _l%@N֟I{"oB$?pĮǪ0i ̮,R)5Cg3>t? k/XsstOBy39XH<ׯ*{:ݗ_]`4tIixR endstream endobj 80 0 obj << /Type /FontDescriptor /FontName /CXUEKK+CMMI8 /Flags 4 /FontBBox [-24 -250 1110 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 78 /XHeight 431 /CharSet (/A/C/G/R/T/U/Y/comma/e/p/s/x) /FontFile 79 0 R >> endobj 81 0 obj << /Length1 1523 /Length2 6965 /Length3 0 /Length 7984 /Filter /FlateDecode >> stream xڍtPZ-齷 ޥ*B@HBHoһi"E HG)tiGޛyo2䬽:gb70RGA4p0Pk$*Ņ@1B..( &2ܡJPEA@L E:08@TRVTJ2'"P5'+ A!\ 脾^0@TFFJw9@Ap.q `(/ ^y'4)+"% ruF^PAyB@?ʄ &NP?1BA7 o*<fs}>|O ௻ _DPbpE>P# 5 тW"掸y0M*Ѝ乃QP$] %Q-U8ڝԠ(}Dtp~@¡nmRn 0G d n7I;( QD 7" P;@< ~;( F P8?70(7 x=Q?oe|I_3 }5M}?{ HK$G _gC w@dHex ޿&7VxqC|%%7b9a+W=7S CL.Qm4f:T\#] 7N,wnaP8D=qf:5wb !KLB'z3E2;yпp:wfȿ MFDn7dH?$7%h'HD|!(o_ (׿&FœkϪU)Lrg ͠:<.HrBP*iCoWyOg~mG|d4F=mm>f!unf.-:\nҤTg^u}s#kU.'LcLq~bOM6ur:I7vͦ$@'^gY,+1.NKzʑqn:tJP#h;F]SEakzFgCn1Y^zlj'KZɮ%xwruZ0: #":M|^Z H#':6xD$ f^7iTњeuC :KKGЊcNWւ мԁD*?z\uweLjhQجnMS#`zB[q*„Ǒ"`@4Ⱥvm/jϋ,*uiJUEts-&QZ˲j:QWGoF_Y R,'ߛ,`-ʏM0$گ'0T>.[;b3&{;ְǢgkVxt;xHr݌ZEx]i*llV0 ktdt+1ݑpG@= Pf&ݣ)>yqqzpΗX:=tYtr1{y5>#7{[}{L;C8I1_ĜPS7ϟNAj|wYݥ<'Ƌ8NI.Ajϛb5[L0DM}?E6=WG5JfYto`&$=d[Ro 3i`ZNe\=`v5塒\-W^Qf,:n::f`}w+zDi ٱӸvKS-^‰ m4M 4wlwރ1ǁ5[-/{5O$JҙqBcNe6b Kv&dw6HTgqUYlJ߳w/#z ^QgF(ً8A7~o>R% }.JGk_xq.;akc0365{;j\̑JsN:ܤW*k,1R vꭥt3;j)ge':r$z]G$3q]/Na2}~ \*$*M=^Npʒĵ"Yjxf8kng6Le. %w;pN|{f#䧸>gB ${ gHrΈL4)D}YE|,uHdvaoQ6gN^7Z~_~ ,utYXL eŊ33>LOٽOHw4u'I˖T J%^zt2W$9w$P~@}Ɔ3;W |I#8~I)6[ӗmCWqdD;ߒݦ쵗:Cķ&uNܝ;L"vz;qe=˧d; rt' HҢ^WBXP _s1-"0:BO+,7`X-56&v&>KU? 7KFc %ݯxZ۪ps )aEmo:Vp<ڙ?ݗ9:VPx~7_"6PE.,6B<)r lPsfTmISH$Ԙ8]0,<;eژaO1p"UYFxu >0{,@Um[?{k*%^=PJ"#fJT+#An1ο}tguU ӊ6E'@u~Oj*WSlc>[]dTzXgx2[,5k|'܎M3| D\欠ЅsR7gz42!e(}UW|iO*2|h-1#Fu̷Nᇳ41w,!xv!cEVRٰutŝҌ1YPR$ݓvTv찮-Zʬ4~Y71 3I"*PP[:x?V!qULokv( ^R%:c&k}ٍ"4f+GTOdWߋz~M3J;VW VjӓNQe <ĩ\ֿ.۽7q{#~,*ŋKX07~&>1`^(|'!F*VNU<@M魛iCq\aifrxǹsH __xC]ս.ot`={C>KjRsv`T&[\9(cKp‘̶;{,Bz*e 2t 6ޣ#׳VwϢ򎧵ՆR3;_fu'a-ݶlԠJQ7t5xYV6qbsi̘1*]~-ixj& &YM$$]$B:gֺZUr +%k8W d5L:~Nfz,'@QwېWCFGH3t~~$uKyO[^+ՀGbS.?O 5Rqb;"I1?A؍WS4M'ieO4#e<)3RTen]ҵ ף+sASloqПzSջY Ջ Mݡyb7iT8ns!wb'ovÂj" %\?^uy!os>V xgklig5I.k>T/=8xIdK"tDr)@]FO?4YRB.Рq%xa#򼻤Kk1SRSzԸLdtb%G'"p|&ǾvBBwR+d_FӚfTԄ! l}cxsh GL˚Yik/(CȪGVFpN?yW^Ӧ8w~@WRUr EH?vIX>T R1-:.&Z{ >#k'Y+pǎwQPk] [w4K{Cf~<]y9M,$ˢHqhn.\hnLfT/wcj"MTu0\upVG:tv9B/_BYsxrJqmx^z-)_AiGYuf@EV`͕~вJshWq_)T _n` hTz4Tz[vdNͽQʇqcPuV:ΡDu裧ews}=qlUA㱭a kL^!\[MڏfAa{<}3MЏ&y^1=z_ ?I|<3ԏE(t`q#dO+W# ]&!XUer}y=A<ʭj`k`GƧ0u0c: uu3MV;1],HZ4?dz%ќtf:ܘ2M^O2YpoB.MdD RJPU3&uc7SL .Wq SqqT5r?ԋ=D]`HHyV3˙{zbcmxR(̠7Йˠ2ypHAv?x\ in䗆8 Ie1N'*!qS\2ķ5yo/=$Aw >zyZ]s} F8_f"x{ `xcr^Mu˼z&]-6|B C锹:b[wڙ/-#gh@=߀ x$Zq=S%{P}B6cHP#ize$׼ Vڏ5US\!i5ת2r¹?uUyKاot/kj̸Of;`-]ĩrTY[c#o;5zțCHM9C+D|z47$A DxGEȽk GY $cpgB [uCʔՙVG8fyASڔVm*˭~b+)2^4[>k$s?<~ކ]( /sNWpXSUf bJZ+$.")snĥQM-%zhm> ࿵">(cSݕ<8o,;Vg6bk/oQH,}KHbZ s,yU};]T0 NM0T#-4Neȥ"S}*VHPL\VJsi=J+CGGAr%J)]LL]YZv/pBDz 1uĴ ޚS}ƾiF ȾEQzy-x}ffxF.}mx̨+-_]_yF鞂 ?cdI`Wz,$yGuk <#n>'if5WkLXT.q缝3"+J|cjV.9mn?j$h6S÷;ڋ|aVy*{.hF2,'̏^:gO]Y>_l\Bl}S5B"anG~xI/7K =]GVRi XD*Wث#C JD=ͬ'-9|Q'(aE_asܥ (pHի7sTw0SO(r ,O˪oߊ@9&le3|蟁<$y~IH1 /ܤDyT*SH$ yμXm%8>BuyoMm/5qx>P~޶O';b(1H6'ۃMU{RO87VV>߃-FxM.sjIUk & 4%Y68'F8dws{7:65!,T7T=QDOM LƬ`kt*k~L(FgH==,msNO%X]G @H endstream endobj 82 0 obj << /Type /FontDescriptor /FontName /VFODGO+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/bracketleft/bracketright/eight/equal/one/plus/three/zero) /FontFile 81 0 R >> endobj 83 0 obj << /Length1 1395 /Length2 6090 /Length3 0 /Length 7032 /Filter /FlateDecode >> stream xڍVT컧$F42 tl1r4J  Ҋ( RJJ()W{νgl}~{TT D1PDK~~3FQrͮCx:w3@>@"-`_hPpu(7_ AbU:`@p A( G+ @S4 ++)Abhu_\! L 4sEx6E;c8@(o| kMu s^G`,a_<῍_j|8O'p8o/qo 0,@ɎWÝ wxA_Oxn9Q.HJK\7Mh NT\(*.B @!YZ#(dA9@_0|"wC4p?Ka/C7?meV(b,~# @%6;!|iB񛡂rޚ s@( ~`?&8~]RC;9q)i KR@Np߼Ph,> tFc)) _2-/o"Kp?@nu{ua (E(n sLC&";bsAiIC`_y ,1Ÿ$>dd 09vJu7JЙWpwV]|R/(+g"DR+P-W9C+ӧ2j]^ ʮ={sڗ[q[k-jۘZuH3yC(q_ *=&ŨH]xJ"kWQsDdg6®AbF8ݵlZ' "k")+Jaޟ𤠔-bRsRs3rS$wĥ9l&X?K=0eLPJ! }I]vA$o%|؎ >l2EkO>bw8̈r)dR'=m{|C[VMF |[H>IP{tϩ|ԝ&%2T٬M|$rJ;F s!-dXFu9NׂGCg]\h[-j2v}ÿ{CyL6kiW骹rtIh Y&0{6# ҷvifB5^L0wXYu\'cӠzH%%MuRFP'~fz'>t|Dn797]b4I:֙#@_㌠ԛ4B(zYs:I!l~W ]˹iYBuSqEiuԽ~v_S&&}SF$ED #ߌ6+Lb62ի^O*8ɫEJ56|2 $o*3#Ƅ8aC㳚nš yu=:'gj<ޞ<NXAtڭrHr8ž^_x9ӵ-yQ$7IT. >6 dWʞ?O}V mA=xAʧ<E7hWtuƸ5Ӭ4tHex|"\dn:EZ9~NܦΩSX>`">6E9#aIr<ŏ;4Zm {d_= Fx@NCx޵)msFi4ANvbkmۘؗi_*h%ku+alJi :Y?uf cT`39y}YW_?|W: U͸$,T ʮ?,pjUDOXt=0]P"a8":#Ȱ殪MyHF^0\?ד)~Hkr5$U>YH'i:2 ::7J_Q*y 윪G"M 1, $[܊cV5wfeF X#z=Ghls}Ix ĕC3^ԙ?KŽgj6oSچ'8wV9R1&sjk#dY) ? 8[t1s 7dc*DM]%?]rkJ:U+V& =mwЉNwEyZ)&/8m.®d4.q(zn^WY)5Jt'\ZxV{y#[E\MHiM;I }žO$䧗F~?a&}d^2^0'<휘hlN~-Ez xOHb,9}'[/Cvs^\ /jBl0V6c v,mFN:`r9 ^gC-86XNI3=k*bWEa2+=25k{L~\hbQ7zW(6>z~L )@y.qO"? cż[}6hހ`y.&2%ћ7jNJ[iӥ&iNu폥dܪQ֜!Fɯi4-Y KTi>0NcqDUϊۘȃ͸W&J_?k{]Vty2zfv !>mF9z}7w%ikU_DhEHI~a7<ӞJ@] *g$c'Ad籨k|YՔ+L6mî- {&ϗ>3-$j AfQafQ ݋Z xtHpgg~AIRvM;;-Syq߶ G눱SVmw3 uj#}Z5gm>5kWpdյUUj{@ pL׊Oc62hT ۵۷Biwt]iiOF+ uXhl$lai7%1؅Gy) ) WI|\@2EIp>d^j\Ml+8\^, 5_Ϳ5tPO! ιh37<#D}is§@O ϖEBfi FM2qpw'{ep\#pZ`G@T"0+'c3 Mɔ(g藥XvTr9 ا$Y-% f~Ga?@CT a(p).qGq%4#[ 3kE6aWكTӄ|WPr=EJp ~ZV XKAֆM=?ׯQhUJi49~RrH Ƙq٧ d8QR%=3=rU@Yֳy#IT:|Յ]تS0nv3!5nMN:[- eǠ{JsTi+.cRH"۬lFE}gZS}ĻSm)7QzsBL 0Y۬ngwX`mnjӍt`XnYWyRW+nXpIj9K 1fr.sT#ȪSJ$ (ie ǖDG69K*YYm_lF-ENCZPuj&ltW[@&uVXZ/c#"*¸|#8r {ւmߒE7;,oTw;㨊rQW^YPT?@4'AfTW>bΎxcUv\pmehTH<>ْdk#fVC =gqI[?֦ѝvcw%rm.RAF"Y;Yo $:A󰯒Sz/C)$Uٕ j7n{7zg+ؑO1EO2I2s?/Pzʷv-i)0M C)L7nZ]e2e =՗W_}C,n%(& 6Լ7-;LHCTA>gdg&%ed?xnB`w%tZ3u?%0LS=ɷ٘~7FsGQ v{ wmUh:n00& Ln_љyAPuٗBtjp:V$,e3V,mWH]6>{goϹ$5BVFw"-HT]W;-!w?x.}Yl&{}=Z K.9҉\B {>gkrQv6̛wrp鮉d`-}\\d4JJśv3ѱ?&pxK3ܚ$x o>[j^ F)pw ;~Y !;\w_%. HHF3zT)LE&Qvq-.a@Gͭdm$%:2O;__*m'?oCamޢ#gy߄1LŹ e.SP \<\s-34Zu:>cra6S +/l5zX8@ _å|6Y$"AL*yoRZv} n-Q`~mԓҗT*!4_iA.^ʜ ڰ[o j}I\TĮʾ UdBǑv/{"G 'ϧ}ynxFeb| ^k)Whu([/&\ޛ"hvp6&UpEܹ!~|l֔m3BwX0RTѷ'vY1x䷋F@LRb޺P,ұh CDF&||Cg;_ #a endstream endobj 84 0 obj << /Type /FontDescriptor /FontName /FYGEPU+CMR7 /Flags 4 /FontBBox [-27 -250 1122 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet (/one/two) /FontFile 83 0 R >> endobj 85 0 obj << /Length1 1413 /Length2 6314 /Length3 0 /Length 7274 /Filter /FlateDecode >> stream xڍt4k.!wK>jA%2 c1H."z%j ѣE^-I9kz}=u?z k  KwaaQAaaB#( %0 ݠ+"!`FFaܴp@D4HRZXP[@[@!n/$@RRgj`S  6P_):P.BB`g7A? E97b 耝! rFP?jC ja$ k.g?_WA+W"(w0{AtUQh?rx [c~7T0_lP Я4KV*"!pH ֽ~ 9Av غáu<0*!(@\XXXR @\AWr#/oo5? `A0>n`BC|!BmP5 'OvbGL E_Nn"0oGQ @@D\ K ߿o쿵z`_ ':Hax օw?$,.l;_Y~TaV_ v¼cXl6v}[[Q`f(a\"MAQ6 0aP8D aav a&ҿK*mvND\#`/B18,-׀ „x~IkbR-Bn2#!_mܑH:߻!6SUON*=VeG9VB6H)OEP~k}͍ІDs xFϟh^}Ud&`0_t5 r©~~T/ijC]Y<2V.ItQ<"m(p#:c %K&;<bш#ێ1[9+5qkg7c9BOQ?yy`9cpa1$MO'CР\Ț'7V!YoƯ҅IVZuWlvYK\SW懢D{hDvben,Ax.;_%f=Cm Q#F ?Ja=mxf=ؘ7̈%VFM@a /l׈3-hv{rh؟-WnyKUyp?)>x M .m|eBPI`Y_rg,.vY볨/w9/FgJ +ӵYRr ka~Wлa/ _V9L%6BlU#]]s &qiqqʇf-LG o؋t7621N) {%`LmY`\ۧa-yET&C|S.^J7Ԇ<>.6Z Ϧ-s# 4u*:܆@vL6U}RՖJP- D͔aÇ3J͝Ew*->ۉDe}<> 1hovni>|oT.]gPL=,n@83Huwiݸ)g˙8<۽W$}- w[Gg69%1;? oQjzǘ\$[/owj _5=pc|'+tD0>+HG_ZԳ^A܉5ɭbR^=S]ρ ^F.gVI"bE`uZV14v?t2}Ѣ¾ =Sy#>XXv)|ovf#0R, i;sD5cs#Üw]TKټ ꤱ3 5-G\$CuwܭUD\-z筭$* ?{Mu+ߒW’S|rhOK,K6l}$S.ޣBjRC혤g,VCKd{-FuljO򣵷R#']湳j!-DRyf_4~s}~Mw$:J}As3TL")*5BU :?may]p7s /7I"A䦭W`&?})_u P29~U[zbra}SM@ym#ISH!2čbR0+'LhvmnA+SX nTX8R+hQqbZR>si=D+5tpm=qVma/cDvTHKF=dp}MƵKu;opCU7KMH?4bq\MWakdy$$[h }|bDU%זϜe2s=d _0mυS1fݑe2#ZeruG 4˷;|vtB<}Κd[2=PL1[\"IxL`oj@>zWەRܗKG+ƍMT7OG86q[#]M]ݱ-KԘ:^Hf'IWL+b7턌&}KqaPOpibڃX$tЉA\_.v?g-"ɞS#}"p{Ђ#h[S?oLTޘXh1,􇡝sdW3&r.E[8MC 3`B 5cdKvS*ꡟDf%)ŒɸuPM'* mĘetF}jXĮvr.pKWZۦdYMZ2ؚK̴OV Spx d3I[zQ*V~A&tS䗩*ߗcexͲηeG" DŽ1J ˱ӭ2h;>JJd 2q_>Ɏ3w;2J fgʨl^hKeK?:1Xk[MD&!_ʋs=LBsw*%H5Qr^sjiV-,7)6߫XSD'Ɋ88QJyGt V1<'8J#DIk{棣LRCC|4%a!Fn)(VEð_K\P־A\;$2 ]c}Q)]hk3cFߋ`5D0*NYxɗ] hL:)S-fdEًu5Q?V '/|~!*,)>Wx#k^sm^KYwLaz4roQ)LrVFu{!gTbY߽8nyD|EC + [~SNiIXA\Gh)'YmܲH6Í#KhMPS)wOAT&;f#Z/8)P+xe/s6/r} ,锸̫˚7d<_҃}?)|ADWeZWʼ7_3zV8gݽm׈wkAK\,;|~}Cg|n8s4w,MOn#]W4*2U= k Z!xLzXm;MY< CߤC.0 фg}M`1r.7a+G s%?D 8vUđ r2Cj zbVA^T@;x|С#×0Meҏ7:_鳍X0Q^ӐF2V&#L[X5KmT-ksaBn"mc,2tz \e>)kW|6xE:4~8/Ư!okc?hjg\2GB.gm7s@{=K3)UR|EKM&kcBE5:('8D{ӇmM5f҂b#T;Qϼ;j N-3aR8k,cK;8Jxy<ܢj(r&t?>8%MeU(@u/_>i@s $Q8elW("QqN>K( ߛu6jz 0u#pK:S.}X~M,d2 &y5"nV+PY"on T!|:!&ZFr=kN,]EPZ)lO3u1IkO!S*.|lزJVVS ';|ul0^69uPݳl @ۍbR oG,R~yFʰ$Xu&W*J=%y6$)DgUa@?A{,f5x5sh_%E.]K!}*e0H ?m r3rIJ!֐-nuvuuAaaPyRɝ"*7Q/=GvqwI (Ë4"3T"wyHhѵGa^|hۂ.k_J~jA.4U絛Uz[_29؈@!px=N~inz1w ҴY |](:pٛUcKö=!h3ȁOMv@N'F ֹba}rN;pʵ4TQHG`0cirX[]F>$,"jZ]yD32}Rĉ8Qehf9xRe`7HMU<I W`7epZۈɊ?&T-7b;PEv6fr5⁳|snh#\wcxutUALcߥp-1}+=6*70~VkǕ72M/ai77|;$ϞooJ]|s^<+'nZA|8~t%Ey{%(Gc@Ey,IYw]k ה3nfUdkk^ǡD`;QIEr߰Dii78¡Yu8Y\5:,SK"BY^뤷 C\|! 礰ϟK$mmӈ2X_&]mCX/u&e endstream endobj 86 0 obj << /Type /FontDescriptor /FontName /DVLPQP+CMR8 /Flags 4 /FontBBox [-36 -250 1070 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 76 /XHeight 431 /CharSet (/one/six/three) /FontFile 85 0 R >> endobj 87 0 obj << /Length1 1509 /Length2 6780 /Length3 0 /Length 7786 /Filter /FlateDecode >> stream xڍxT[.)1 00 34Ht Ht+)]*x?߽kݻf~~wϬa璵ف`P7@^Sߔ+ˏdF@@8LF w8_ [SE 5aP's(z5a:?Xl>QQaYW;h h"@Ȋ@[@>J*@xyyqۺ¹aRl/0 =A_Z?ԸqN`_}@0#C< w:@_U'I'W"0w-su0VFx#8P_8 oi !~o$ E2t!p0G_iǬ8ί)A@i {;ac?*AB8A :*`m #9Hm `"v G0?ّ05`o9/R~|_, A!>qbm9S9e5?1~\.Q!^@XX<:?_U0_$7?`36lWЂ! G@iW{GJo;_ Գ90@@kmUE"gD9n'`dF@ր AF 9z@G UaF_P`n냃Tr%CΪ=_uR|4}@yzoPu C_5A Ҥ\f8 |yZ"Ek*AFG-`\gM09ɼsj+ !al y 3zy:]f2 F(ZئbA3D$.'4F_JH>[<{@TU?z~MI"0vOt:Lxn5_a5I3|_v/OMd ѩӁ֯Fi:3Nvz4~B?#Vd+T6% 64lruhg~-d+jQ{S9BpQj fQ?t(@/"m'C(NM8[i%Cs-1ߔήz?Q ъCD{|1z# ;yvkiJ!D#ZED qih5+nuk9L%{Kw; ꛱^byqVk wLO2@ bT='״JyvK'8"!7V0jOYX(ģ\ck45}5*PjDz5b4LB{h:^7̛ﻏFgu~a}\`-%5|nR-B hb,[S!^Od:_ma>cٳ-(Y>N<5NrdE3l`˂kSZ6}O=b\]' kμA\Ndqv]Y+Ԋ,l{!_V@Dژ#aCz?18e8ɘiMG1ϑ组 -L2Y*)$VuX^,z&r0608jJ_Jυ {̓K.6 SdҢ E">%la U3;LaxEߒ|_\\8ENZ+8\Jleemȥ|{;w`Yݨ|=ZH+R~JsO=$J9C@r L* ,vahKGߚf,`!V̱"fx+sX;č +lz [ uN}񄽴[+hY,!9IBOr&VuVBDCu9%W`_LL:sl0rthyaӬ_VyʩkYu~],dkhik|0۶56 viuX %OiR,%kT_ѐ"nU@: Z' Bx%G'y|ocS9wkYZf?(UAC[K~Wfcx2a (a~ԛVqJ˳Rߴ;kpv u^cJ3o-UXQ)ZdR[u" ]u*w(qBph PyBCIR#>6a0Cdi#/^#ipѾ"R?} {\w2):S$]$.m˾'{} J~5-?3~)8C4v}bVy̹X۹cÎvg^Ʃ@uvq"1iڹ:!eW|ag)_!M ב~2 es.ccհs~u/]Ǐqn|V$!s1Q/{4]y{b;o&n3:rU<0&&<UЇ$4zz5Bc+{>B珁XTP^_ 4tOmˍu|fi]0),@uFyo&T⇐d7%ʲ/u3Pa(n4h({ Ցؗ]l1U Ա8^dfdgq?vHl%dZu`e&EQY%6lnAG*qoVμL .bUo9(1 :L< =#Ӌ\JŽC&YN߹_X~(D8,^izMc5Q >RPoa:B/w- DIM5v~ kHi}v ;(PK-GktLT,Y繥4rkBAbǙ'/rd*w>}3q6BHvuI#f mdQ kG.8.7;St/*5O^Gc8@keƟTa㸣e+]JcYںGѱtVpczaE뉴,.>tj1f}|%eB5 yXfBF`aH^e٤>7Ze%(YUH6r&Fʐ8 Y2vx$[ ƣ[!.)?+8RAM|X\Yn]K_XJrNgJulx0R+^T8Ժ iŧ{Jng*Ű(¾kh̥GsVOPh, J$=駘L:\+xb=h}׉{h䰆 R𭆨]8]| 7:nݝht2R{/ Rv)M[%N~Y+.1۝zi k8}I=9Bj6Kߕ-odᲵ8m}1f Ӓ_Q)}.m./3|ͻaWjک9bjQ[:N77)?Jو,*( fgQ5T{)_grw뤨{|DLI ҎY7-Ыٮ0~ZeͲ~)nli:T3|--Ҥa2K"wM=zQ]^`_A?u+;y^p$Phc-pL!<$\p_ A~୲!F(cBdF,mBcw ֳ[ "y5k5Bq~]QG IQܱϰ̻'3aZΏw~uU,#< |c[%I_Gle=UrD/+)%$5J̲^10 |*|yMpt'"}7WھkG)T,b^HMB/UvŤ{ g~yWOR.\ ;QGLjXBߜДHZр;/ "SQ~NBٓr( םima`eNJ[ǺL>OZlOI54̍r?>KO煰4Dy5C;:'rV )_pC=hk?1@?l>e2] %+֬I/:mGKt䴅fSbw֍}~Pi}/1u3>Nt5ȭP+Q-SĤ(i\lۜ=4R"9ᢺo,*P k@D6Ul+p(g(mع.VɓPR'܊\?vTj&4(ŕsuIAڸ#aɲ/ hm50^hEzUO9(1Hvs(ÏgG7c~>y0UꖜײV*D.~'U!fʰ׺i5. /Zȼ3?uЄ+g"5$nN؏n8ayBaP0t[9Cxzϊy&yX?|c`ϐRʎcvynuZmLw92^%FY#=cZ xVanhxNP7mвmwCW9s|}&gA|U.zG62~}Ϣ%l5\/^A_p9;Ly4,.N 1kaRze qf_>bkNh՞OW@~.JKq2iN=/acwv+Z3k8A{&^ LKLHp4Bz&mMofum#FLEP Gb-윅a]kOvQo(/j!(DAϘI}-Ąn^)`rn%5a$lՀFĦ) Zߧ0v վ2]{7Zi|0Apt y( QVNYARLOhL:-Al;*|N%\Y;Dc'O5 k?w۽SZ)JPKTjni','{vCtoYԧm܀$ +?T2jobZ>D$]K'[ j~J\=ZKlZKiҾ IoWq*3qHht=X(-^Տ=dz#WƆ)HàR[/OJ&^/>0zc?~㓻3d*4X5>δXiP>o3u{nS`{#S[iB.Cyxΐ㱣 }#W?c/!9X4~u;{["ԦEuY $Kalo)k ԦkilA[ٖѻjxc9s{mJ~ <>@f{ MS^$v&npұxr /噧14)/{JH82 qӈ"jrnx)$~7ɶӿd8g:8}U{ZQQsnOrb߶:ƀd?zM3೜Vt$_*iV8^>7οt?c|#⑤-c^9ҟ/=rQb{A}j覵uW;fHtwbZ9mݖndȀCnOjշ-^ ui6Tm*Z6{t\<]We: E*Cm OED θi==!Ɠ8gy:ߔE0MJSfqECj&WLE!>q̆ل,ɷ}J@> endobj 89 0 obj << /Length1 1460 /Length2 6421 /Length3 0 /Length 7403 /Filter /FlateDecode >> stream xڍuT6 NIG s0bm4H4"J(tJ y9s]06QoX1Xahf- %@`8u>> ;B;) }Xg)G{a_ oA:x @‘GqɁf@#8Anb += H? pnXa  EaP87#fFx`1 WnY @ÑX W}4v??uE|$W0/Q $ ƜXXNZZR}΢›y~?`&嵬YspYQ%Ҡmu-/GML'~}sss2%v ;*ˣh8S{Sr1xR/ғ9GB:flޭa!L )7orضLt3J#ִM=[# hN 4,Jl[tdMQѠ$gV8bڬQ .[)Q,ZǑo emTmyTe5/KTfLK5?Э}ߺP ؎^xˉDFARH.v1ĝn.bemݫͼO v)7xϹ:KHo>8sjQBse js‰{Tqs4FC(Yضt3D Q6|G_܃_k*XR d%DŽX:I;ܝ ʤc&Q 901锸tCEl$Ki%iy#XMp"䌾+ErSy8Hy}"g),Ff'$qp>2:Bjc\ůA2e텯4Zj/vӄ}VY t1 *^~)$7: xT~>Mc+$R^xʱ|[P U)8ȮagRl*jyOy>btk߳~pm&BOny}ڢ// &%]DG}!thjM٤vam̯1C(OП=7-6s}y'AHk0^SRhޭ "r1#ɥPպ[g@JYzGԷSO:\kLһkC>^TujHƴ:$Q66f-( 䙳@[,p'Ʒ|sciGZ.OO.. &}F(7B:MU–<Ӽ#; iWf׎rhNKNEx؜h[J0}*H|%|DkS¼9g_O0oztVX(ߗ쟘PO=" %2e=[*bBeϋ∎\*кs5f[i0l#A6j{q .NB62MCoTVqMz~=9*Ւz^t8;hV\RB%kN?D ua=׎ gN+\Q[#Q_PBHz3ø }UoU2 O_%Rԩ@ǒįN>m*> QJ Q h0KxAhCvs3whBuEήsɓ9'#KpHeHv:h}\[]ޢ'*2o{]-Z~ƿ&'l#'3QK VK5a,1DbnEv=u/f}û֣tӗFl϶J \>nܣWdwojT7=.sXpGŴAP gh(fgwaY#:Kw;?Jź_@_ݛZ~uI6f>JΆ^h10zI{ c19z07I-W\dsZeZ׿=Ž*ܜzPX<4@aEBn+,̴#]`M+>V'xDf^޾i9.Y\~W_~G֥5FS+lNȍQfT~I&ZiI6S9~HY+>뼆֏L`V5,y#[41=si~ܐ0dH ]+C;4'ߚ.9O}=>zznE@tP9|gnyY4,s1 !WE,sa6tm;c'// -XpŖ9V)Hziݙ4a^be@v/!IiLc:Lk;dlj;\ Jϝ;?7?-bZ݌Hu[`E=KMVWߌP8m~+:m_L-wLRjNJ^^"|A G,;iy mf>W9F-Z2*S:X.{'ui}1k#Z 7u4HFЋ=Ke{REގMnܑ0(w'spHhDZM3m<}/3/$oL!oyzdX]ɕַr.Q|]f}8Է7UuKS}b;@<LD E/A mN/g7ϔԟ AecE_rT"zW{%#۳ı|S]] PTFIz@Hg^jǮcU/RZэm/C 53xjn> f˽r]4uLfH3$ӻ|sp3&i擆JɣG5 4jTd>ѸHx`[QʤWQaْGwl&7nywG/\@},bGpʁ~ EԂ^LnO`ީ0r"JMó.M3a+]^wš8 _Ylh0g},t/u/|u).' . ޶ɯZM Oj4@ѹZpY%CiTR OH>U?lب+Ҭhq՜ M8'"i砂?FqBƕx U矛N{-\H~xKNE30ޢuߘҺH .6KȂy3\Bn4Toԥ'|eC8SSCd%-vL-JurVpG.qVpVmw: v0?_k-xv c%n'?u-I.[- *cK}J}[f!5(0[Aլ2ZoD®ּw!+puznE@bTǁ0)ӯrm*%Þg V:MϕĞfZ#wd[PQR9z]$2qIr"un//!5ÌXWT<{R0$2i(_嚂C=*#E7=f%6_c֙Ug7wU:Y$Zҧ~'+Ro)U]l/(O* ~)>ׇvvHF9ENn Ƀ(f폒aZ 1akS%Es5T\e)sq$߰m>rKxd,gj0t ;9eI!o/ޞ(+2Ehy{q ~/?mد>T/T{xXՇ_pVo>*WoR7R0f1AVf= I't>dhvMd~bxa:bk}24QNⵉc|;ԇm>w§ Ҥo{W=};k/T BX7b- V8pA+W$Wz d%irU8xXdrjIkV eE0DiÄѫϯ)h?-Ͼ`~)QNxͪcWZvozp\I5U&2jo_ 3YUURӺ);?yn.m ~يe Һ{-=iu8& 6Mٽab/ tG/p:j_k1d7ȀyDͽӨu\s+kRB-s"0< Ruw)L=@ Tb>&>A3enHp0''7Gu Ԙ)^$)*E<:Uk~K `m>[ro"|X+:^1W"]jϜq.{㙆:aUz. 㫻y+'e^{/Y;qP&}޿te{l5e'T^]10t\V-ըO_n8ͨc*TS{2}Ko =o$r58ՔӾp/k5QNp2o(5RJ_-*:^`ݟ:svP%\P;C9Q4,yU'O7hm t.yw+lW:^jS:">xs9^HxRZB8s>2&Npm?)a;{/3#&;k5w803J_IgM=~ڦrIWDN'^AFK|Wl 9ud:1Hk.qxcަhxO%e.::s4gG*1m endstream endobj 90 0 obj << /Type /FontDescriptor /FontName /OMLUHC+CMSY8 /Flags 4 /FontBBox [-30 -955 1185 779] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 46 /XHeight 431 /CharSet (/braceleft/braceright/element/minus) /FontFile 89 0 R >> endobj 91 0 obj << /Length1 1612 /Length2 15081 /Length3 0 /Length 15915 /Filter /FlateDecode >> stream xڭc%Uɝ+Yi6wڶm۶mҶJ;{Nw=Yf̈k=2"yE:##=#@AZ KF&dw4wrTFa! Ku731uP*R/?!@hickv Q8f@RLV [ , f@k `b 8@Cۀ@\[w^omfֆNFk7![{V}m l ?6#l )_0fG? #3[K}ڛ1M,abӝUokk6_Ls:mbf ϠHXm7r>gDP%odcm028M SO[ovuշ;`o4;Roef🁪p k03h j 47s44[ԿF@{K3k_EL#L -i=]@k$WQgUPW;_QwTrK"cc` ڸ<@:fv߄LL^la+@oɌL*<kCfEQx/?nC'{-5@+vugyjFc-Vf/pmIRaoMOjg{M}gǁ$h/%EO2*ϋ/eПA!\5zAz\QpwBN;$T=/s/:-aJ} F'r#jm9y#P D.Mv O},3DG7=OWgvݟ ȕ`牭^CMádi >كe9cEyKMTS7F2V{tmLh^׈MBKl{$7\NQ>kj] D}a ʘnY9K'ꚶ={cb6hha倞vZpF Ɓ26:̦PZjEjWgGO_.`@,Y8YlA=\@}*+ m|!2ܟzμay$x#D 2K  =AqhAsQKN7bSIę:zaEY)w954T>֊c^ wxMdp /8\JSJ >u,0ACq1d*^mCr)1c <b{uh\ww/.OZ8>L M㚃PV"KiOt(nR~'%y*Ҩ ^NXxě͟>AwN8Ig-8aC!7w,:w>cb@d3nٷb_fE8SAHRtjZAKEOE)B~:aÕ8nZV`f?jz:~չ5'w%0>ECs8OJY@AcΪm[)E0@|$OTK~.+mhw2@nQ[ %( wɥhp2.瞥ٔ}u( X 4̷5Ja-%rf&|[Jxrj !kzj6G;ѫ9x>zߗtv%sB`h&ȕ/ (L| xW(RmUw;m4xͩN(׺{ኺ AtaF_S3< ~3nܯl!`x7,6A#T/oŲmOQzorzq IYb/vtRByIy@A8"Sn4$w3Fx g$hHtiEL i&£3+Ǥ/>mOyF QⰍ6I43 5`[upާmёy*TF*ed|qD>XBFՙ7jpDٕPg&z,\/d'4yo=u0\t ۏح~긎;0PPkиzvٖ}oǧ@ChX=:)ZT}Z f?f5.i1N#aMwzh/"y!fi8WcZzBe\M17ڸԭ.IgV.լC/App5mAwmmE@0XQy-hGcKM_./uvoFgg&e ?% 98 5QoLLMe".qˌT`3!k? !atzȟb)DNNObܐ%wΧB5&/B,rifuyʢt95zNxDp4~Q;4$A;,QM=vq DBa38m{: R6d*JVܹXl;M>c/[kFmBdbY)6/|\>t,J; ƛ7esbe)C8]JHL |&}Yy/=o&p"BٍaF1)iJ.Й/zv^Y{summZ7tٌc ڱ6I $/W5=L4<]~蟘ȅ"w 1!JǰQREe*VIXhp9L;yu@A6?f0BnXwXL51Mx5IP{'57E@?S|Nt2`5s>cWFLorr-tjfhCѧgUvl!l>x¾ ucsո$nï{.^ڭ0XL$z]w -pmj@i-6–*2ux&_Tn#);[XRaZ06J]#[#AKÈ#${ =DmJ'p'";7~ :UHԜrhE;ݺ1j@*[1FŹbZuw&ReBB~(Xػrh[~[HnEce%o?)ym*rmbCvce~q&xD [dvͧo>7_JNA+TZ{5l>t~+OM~g 5Rg3dӂMLA$Yg9/9J'.d<jr<+eP: >'^bi[aPݷ:y,U-xR,PS4nH0,lmc8m V5owԋkޡ@lf-㽪ĵFw(Y!=JWOX[ban}ˉNkCP zxnBf,A-JG'bD|..n\3y/_/ۊfI%x-_'}JEJ}>T\WP#VsG:BNaQL^lcƢwdAtLY$ϡ`n.5|[N=]ĥJL)Mv m1\=6*B"ru|kɿTVv7[ c3>+܋lq[ a뻁ۄEBYq)$tϮ[M $>90V9WdC42So !RwyzЯ\(qjȈ \ Rk6FW޽I wFņ#eC:r[&IC<:Д0OBru & GF@isw.ҥVby2;n^7qZn`W?TPEAHrPNRͺ7."-ʏ\2< D։c5ĹIVH7> QӁME_sn.[ndjL67T$.HR`b1lpUW<@aQ2vZٌzOBMV$^e8%Q7}rv߄agW۵cԚ!YX)r4D`v@םt_`?2=P77mnL%ӥCC6|N].<;=^)]v.zϯ+xW>RBV6UE~*:RJ֨!ZY%%sY˽rsOHG3qpi OYyt7R*ߴjv oԡQeW'(]Zt>ۜb5!q ԍ<;]#N|}fˆFmț{/|R_=:_} <F,9"yaw'P!JeS+ÔP]Zvc 2Ǎ~u#p V SQds\V@B: t{&KFLn&_3ߔmԅD1ynEI7W}YsC6ֱAy޴`g/WY'H"=izZ Ƀ c+K!7BWHJD#&diSY<V~'tz !!,,vΉ}sTk5pQ׷wԜG9 ǮhTxddU[GxG!rRqNt7fM$ \zۡd$~ϰOx]NBLΝ7=R/y=)Z?ݲ6q:-^Dw~!ֳNxxMVDh%jߦ%#ѐr\97+T*9v텕(CL#v+6D[?:RbS)dx˨hp.KxlՂ`<؝lAPIx1Jقvq `eҖҝB[)fnB-^܀ (hبP 2ISM7W<Ǩv>/)+ߕF]{Gq ?Bp@M+]Sq7W*B^˾{_"@ti &{Y>d UДS/ (UqSBH t)UtfB S2~S(ޒV SZs@ǟSU-H %>Mql!xKM/Gwini^+ ^ Sb q3~]+G1U$=Lf©N,Tebi6< 08R-4FUSGVS]ZM'CdL{wf!7@D1e"9B/(=s| L5-_CױQ$s_\gŖY6Dtʹvo=s_L65DRmٙ"k[ĠEI`MQ=w3pᏆwʚ,"CaAv?9qX6dXCS<ȿO~^иl&sgȤ~:ޅ}ȶ .ƌ}8eG1~}`Zksy}fҴI1?9TG\5F,C yM*4zuZ/c%F2+tJ%sm٤ʪ)2? (ɨr׆\6oA39 rRgK(RHޡے(Gk 97C6Lpj#p+ 5f5\g-V͍<&&Tuԁ;~),Li>@em>YDx+]+Y-@-th͓[zwUCW6s\f79JGd?BQ3ǝ*Ep7;' =j^Ԡ0U `Ʒ|'9I 8k\$VE@S٦܊j0VE؛^^Y&'9\^sgJYjL,Qeg1|q3"t ,|NGo]d{6&ߴȆMѰ?! UԀNv|_ծC8bia Q l69iALTKD%;zƚ偄}\nLml͍^Nfo nfV'$憁~+-r[yC`̮A#R\bv)˚ʧ|d%Gmsu1F.䙃?>1C\23<(XD&*N1 jjPMߖ(McUq Jy 8R1+crFYs tU.$drbq]ExC$Z+T}EnA]u#`ͮtdZpǴrA"cy[. ϕsuJMvO^)cS?|< udwP!*i/s@{Dx`s-RQZkq=3SʭPvtj/R伴E;s2YΗʶ?6CPFTW4 y- $X{lfF|$_d[hS_/5)Tjv]3ǨAz mCOw:HN"ohF 6";_%.l^_k_'ӈfר3wCBFlɜY9~?b:)~*1z> [??ŧ$r s]C5.vBVlі7y^WPҘPcfjX"kqzpySi(HoF$x){mfBzusVs̙oc>ۑk{ץ bNGnCS`/[W\ZT&/o5~Ý>X0@Rc}ͷ$6㩳-w_ʛ&f389-ym}f A~̐2!֢_,K'shpl t&!q&`Eh(&BR˸jt}sKR4H|+^b(-q^\p?dq(v)# ]g?,Ù WY]<@~b')0iՙkj6EŰodӢbڶ^ 8a_vsu qkg !d6O ^}~5{NKLF/3ŵt8r,>۶C <\[S)C_chxrRburM5I5P&DKML -<Ne^_E(vXG&2"<`vD( EIu<0R=OW(IP^IMGo)# 甯LT/8('|BUhtT2M~͢'qUx*—J*Jބim,`1!7,"?/mOg_ʞ6"J^=Ei*lx9:z z6 ؍7nuFzR =ә!ıǴ:Y98R#Ն*! jgN vS{@N%Nw96 {*5ův$B(_'[ 6 Z.72"7unɞFwF^}DЕuBWFsFd@mW1 Q~ݑRz L7|n֐h~.r0p]l\2.b(M\|]##^Q  @9˸%;,LFnF݌,] Hc:I#WCbu{9 {k`E'*U²@GH}Enfd {_E4Ћ4DZYC] \ksN14xRA!fW& /J:Q<s6; k z'& Ӡ΃Uf u0m`N D@h8 ;1GۅZp/]e7t($fMb14DI)fM)F9yxqZDwXe><$jF0[ |_ʹ6d؞% zaԧ.=-_& odF,A|׬ hL#:~~|&ay.8}0ϙdˍĵji(Pv#=Ά8(ܭnfI +_$C4{6"zZқ!,R-h_>Ⱦ2j?Cv,y}aR-]wCY<%6/ͼ2n2XuLvuO$֫1 JΦJ7\Xد_އ 2:U e: 9\ T͡0PtA7w!y&׮f"u<1)29]"uTK__ uNe9E(ek:aP/R'{ML&R mΠB;7ުK҉fŨ/2.&/JRgoUn5>([ʲ#H ;ԶݗCh]RK&EUpoqdJh믜md|.볘7P5O48&n$[$K#z{P>^WD{iwwLq`"T=cAW z~Nsk/Tu>8F Yz(*/T,x ŀ=T-ֈ1>5^PӸ0d`{n[d`Ŏ,+dGpuNmIgnmRsxO- X~jb@[8,<&h!7H&Ǡ \tF> )$mj5p%)f*͸HOe`ųSNC~P@]=7o&J4!c1_Q))G/B,`KTV% ^9)Zp䣟@Pʒܗ5XdIw)Bj5TD<aV,TzҡQu-R#1@=0I=?ZheqprZJ#1 PvOt!b;jS,? 6݁Ɵ K-YAǛ׈*H䥂 [eоfq Ri]4mלYA;1-G`{屬2 ڕS}eo;BD:fۓ/hh6(Ea-TeXh_iPD"o> Ql[j?h'w2v56m~|-PΡ:N )6xpnXkԏB?$ endstream endobj 92 0 obj << /Type /FontDescriptor /FontName /DFQYTM+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/A/C/D/E/F/G/H/I/L/M/N/R/S/T/U/X/a/asterisk/at/b/c/colon/comma/d/dollar/e/equal/f/five/g/greater/h/hyphen/i/j/k/l/less/m/n/o/one/p/period/plus/q/quoteright/r/s/seven/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 91 0 R >> endobj 93 0 obj << /Length1 1626 /Length2 10738 /Length3 0 /Length 11562 /Filter /FlateDecode >> stream xڭvUT]-wwwƃ%w;$%Os=kΪY_EE$fhvt31@fnjJ| L@ ]΅HE%4$M@~6 4N^. +k0VSM񟒿Lf^ytY9_܁vN@{:[ ; @BYEWVI@+ :]L*nfv s X:q;:X*͕=+4=́NN@{; r1u9۹Y]n7 'w w{0GW xϪ")`kS_]Aj廥_%{\`'\f@={0'0\AVDpZX]]ü;ߪ7uro,ss[YYKG?nNs ڿfhȢ~O ߱#@ +G -fgdj>1%cx3_r1yZvDVfA O ln 4{rM -0Ndn\P,;UgѐЕQd߆*Crz(:Z0⎞&6n^'{?;?ϊ`'@nV' #`hبM,'\\ Wg#.; ٤ekps&$zؠJ5 6M_[~:tO|)zרy|L?Ҏ9S؀fۚPU3*~%jp? puB3O@k)8$K{\כ<8Ah9-I0[4}S\`gaU]u{e0JXRխzg3t/boda5zСogxXXj`8*jZhíz0 HK=9Fع k;E;{ CNuy/. _FK5/Me+-{Ӟ Ab^ 'ЍTnݒ<3U/ x!NSt*ބ3?@P`8!}F1a}".s4NgH4rok_ɆQ 垤1bу9AɹV4x et *G Kg~7(gFem/JuPaߝqLcJ 'A Z\O^5_lfo-$ ˵dM ~:k&>~]a͇e["#9tO/9?mB\7~ΌްA ,g,86~aqJV|]xvΤNp7Fi^p6l֬̓O;w5>{?4΄8夔#PHnR[\}5۩ĿF˘B>`!a-`}:ė>n#B x&)ACTVTkTɞ#wŀsOR%"jO)(E~ +&l^8h?0Sl׀m5AEeqfsox趮j n ~3#[F( `AFw/`߆{m {٤seeR: 5`.zn /ul!#@'rt!6<[1E &2By<E?~J2ôU0~bJZ9xwTғ' K +>THTraq&đp<( w2̾ЇWz>)M׽|{K_hi,Ӆ;zܘMO U'`m:T(?]0A)ݤ4U۳ 6"m}*Ns^aN arCoy3ڤ{-nq?%S^DaBí/TQ6SmBNjdTG;_cº!e=' Xm;XƢ+S <)~'±1ʎyqGY!]BMԣeJi4oF><QDDO`JQ]/{>Ҏ\, -,VMV g *.[d("Ή`ȏLs4!ZNɮv0m-ZF?pba-_yv׺)9oϽf\m$_Ί=2&z"@r3)jkۧg'"bT!ٱlfÖ㘝EՕѦm䴸IՋj9d|~Bqo8]wvZA}z"?R;On H {mwS0D+m+{.)>9p0upjԲ"3nF6•8HjΘ z, 2J*vhd:{qNR6*Nc߈;axH ǎ ڪ,k4Ct>% X8mNDvJ)9i E[7)ïdIvD[^PuM1e9 WZJVj]"Y0 %DvGSxFVL8t? 0KfS}:/ ^6L&A7VWqLONb*i7K@jg%\B9.=6zKﲒ!#^@;s-P|[cxcפͅ:̓$KZWK\auTU]J_IN>*V? ўu|:F7UnxJ=Moyn׺7~ Ęq.Y{|OEE >8qj*FM4WuƉXu#EQ8/~3 &'p3B),Ŵ7V+2B aBz^]Q"SrN;|{S1K@vJG5!쟗řA!%+Tw]DQ:;?(t-& XQ@bp?LrLf$?ɛc^Pz,l6SGM_ddw)W>Kt~{\`M?vy(#5kX) 5Vݸ A3ȃ0r d.0Z,a䏒[ I?2?F^\%5 W4irDrs[)I`P77#fB̂O~7S=8Q^pu3rVawhMGOᱷA0BAoћ{, _ 9c7q^ٙ>h~q?lCsRJ?NC%ݑ2 }Bs ұLcόsNJL%y^sQQ8޶˖EXإr#܄`/ϰ㢴D#I‚}-Ehe3zOŸx:`/t}-VvC%Y7:~ ßMH̯=3v!G+ yyIW/ l /jdSKHg`1T`CnQ1s(/;Q#_7WT}5,Õc{)UaW!uv1R3>|4QB{EHZM [ݖ譸nE< "?W#EЍaXsMlrS{qy8~_-)WURwLHLb`dmfD^l}&Ī$&adᨥ#>cR o@W]cݬX ,As{Zb릗vI)ϑ&2 9ΈKxE/NVUCz?](+1L\d\7+:|V%#xu`F5h bl(q@ `QyU ]%z=&WV'-=@J-Sw[#2i=w_RϺ~{ >/ VGx=9&7( j D!?!SAt4vZҁBT+Z kYL ;2{PLJ 2#k806p<ױ0,XYuV.QlS%a=I%D3|kϤZ U,x}5-pd;a_^SՊέgfQ.Lqp.}.ӰqӾȟ>cn$XxM :W 5-QG20$ÉMOb \M橸ʍY7axZjpŞ>,9*6@DtLi;L) O-L7V)Q퀝-e: PtM"$dh[RaLeC9·4>< J>>ʀ9w9W;_YC 1 #Sh3V}J?xw']ljsn5}ʥO0? %,^B=e9Tad%hJN]NBBϵ;hGˆ}U{ɋM;lirhĺ:o"% aiUJr 9 1{kiƖ#BŇU(a CDΨ0!pe0'1J~e.p|G8rx_xB"yՠg/zpP|jLLV1KD؋x-aֻlE(ߎE Y$/ۢ?PYo3!.qyf( º и w_u)C6 :UC~!a}1yt~)\,1\c/ưx/fW o]"ejr#۳b~m >9ě#I!a>"+Aϕ*knެHgEcbcVDVR9g$[It>CZ&GRIP4e[S.¤--{_S)+/N}J93{Vi5*wȐ} lr.~KXlL^ZV\_+#ne =pzB.ًv̮l9/`ǐY!-`,c`tsڈ)PNAT \uQ @b$XPA٩C&鏙oQ$ఙpUzC,QUü׃W:dzQ7 ac2\)2wrOiP} #m%[7JA~[–S3E.&D0eO fNBe64-k:ewKpXR;Z=)z~D"%VݢUa=>,oFLޟ[!92 =}Ӆ-M_Z"1`řvB\u¬i~aʮC}_ Yn3b(?3¹lQfP]觲?cAU0N fsSWr[0<}URͲ-YxzQqZm1 Mo4@8>ta/z~\ňrH EYXQ'HzAlne9u7a3GekS^͵2+/n'ݛfH8_'}neY"&>:?|:0AC0f-;u{#UIc$8qPTvWaq>Y6暰1t({f lݳR vB5^4M'QyxGrS{Ġﵘ!:3[~:?nӐem-!#r6?~ÃunN=v\fϐ>3"`ܺP̒_șsLAمbZ,szwp,/Gx}lGhSG:**6Ֆ0*HvkdC`B 'F*;i|qc]"ebz5JLqBTuA/@oj(f4^D0R*p;+S2?CgW!ZI OF&\4 ʽYB($z<L۾9J!@&氳Cҙi<,֋u/\؇ΩxV5٢}:L'mlyAynkt:^(V=gZj;ci{ ʼ'ҨېniQoNysjܫjT._6y2?3GIs),{Q=VNiկP Ou3~p6aJaX:]V| HDZjGEʍ5TwWf0Pp=\ cg~]EP'Lpqں&ZhcDAsoX^ΧAܘ<#CV0gǕc FHc9k88_XOiH# ĉU.f>26yfM}k su!jq@1tJŠcydmQkpx/ʞn6dxHh~E. :!{dk௏7M)tM_V쇘$P7p~ǵsկQ,Sƾ6)򢐡rHQV;Ad{܀3UL\%yre+z-$>{Vf=~s)X#Iոx]K]֙™dz*6[U"ouDJ? a$ŷ̦^7?Pm]zn”o'( A9!Vc&Q-OLzRxGՈ \ݍ`{/S DgpRv6W_q۔rAư?2L*೹ym#7jXN0䉪E9m}VvٱM80 f'|HBSy|tlŒQ* lIӹø[>|P 8(le+Jzlgܹw" ɧ;;: \f!Nu1UW%k$!m ˝)\Hy 7~ޛS^~o6d)ژl3螫eݙ*Z֬4KQwd?XFx 6\K#ImKd:Ec0:rϵI&t}VEzd D05pS*2FT(F1⬗A6CSI(5hO~IL&\*8NYhbnu^X \zOGIjA'O`sX0usC6:?|yhL#Mg#?gFMz+Ao/+,aV cDVjWQey6bT-i^us쉥L 1LT{g^P9uTw"\f ih)# D;<Az]jH\L҅(bG$xd VJďQ4 ^5{x+*E-秱6m6aԅ}%t IJԝ̿P3F+@J8zWhQV/f^ךp5BϘ-rdUPT{%0\؁ K[> R}y`- d܃l#6Cg@v}4<8@3{z gnyH5xnRq(Wd l2#e0,l ԅ5A5ړ0i7|J# q+"*/oD?1(MEu3LLђ:6T᝖&`( ,`bQX6MQ~,pKݗ>織cd q9b3|qb?6vR4ah^Oֳn ܇>f`a*tr({) `!SVdLڐT1s*g(}q~}PĴx `=5 ߠ/=UQΉL(Gcsl)gFbE3+?1]Fٍs> ͧ {Ti{0ZDBcu^کf.0\<9}uc?;7ưs,g'w`@ψux^ X&'ڎJU/icM9k]xwAzӕ9iy9ܬףf:=5?2(!=ymQp g3:Ȓ )R'y aBI;"ғS*"eɔq7CAB5o^e)!2Lsut%s6R(}݃CA"?(+󑭫4H/ᘃ5LXn}kKN]] <8-, :J޾AG70 ܞj!a Z,8Z#s=H>%]Lddf_TwBFmKPȁU\&WbQ*S-[R ҜD7-{HJ|bP{oEAnQ_;dl~_}=]WD:`H}!;%ᦷ.o8e۠1z;B_ORAhͿw Jb@4oo#$4CX͌zrHo)2bx;J<`Iᩔ?4-q0cZ0.eijjIaюS9ϳR퇻ׂos 8|\<=&r]) }(t>]*BdG4:ۜJN99WudL 33L%Jc;Wg2?A||K ;A ň#WܙYIihp`G(MS~MnnC}l,U Y\o[+Ng.Z&%J/7^lHmEKk5.> (z9_|GRę5-@Fr9\ŋ!aP|9D N $H=zФxf+d~r6cy s[vꅕ2PNٚt4hxL= tꭍ~{7aUڪrBta6'H 96ٙOKw |K4&7S@iw=aH3ձ&>n&"K.ZZb]u41@ce]fk`R}`Z,4_WW.zRSe}vGZK̖r[DJֆ2G+YO;1DxaUp3+v#VK1)NGQo3@kTQ0 #Zmu}T0v>y`^? endstream endobj 94 0 obj << /Type /FontDescriptor /FontName /TJCYGM+NimbusRomNo9L-Medi /Flags 4 /FontBBox [-168 -341 1000 960] /Ascent 690 /CapHeight 690 /Descent -209 /ItalicAngle 0 /StemV 140 /XHeight 461 /CharSet (/B/E/I/O/P/R/S/T/U/a/c/d/e/f/five/four/g/h/i/l/m/n/o/one/p/period/r/s/six/t/three/two/u/x) /FontFile 93 0 R >> endobj 95 0 obj << /Length1 1642 /Length2 5898 /Length3 0 /Length 6739 /Filter /FlateDecode >> stream xڭtgXSm.i")޻4i{CIhH MAtHGH^7J J)'{XZ3<4U HFTRL6G# E0r^^ ! 4`@RAAC\0+sߖ.g!H4}xCHw(Z@C&6z:c+E0rC@C.HF" ߭p\jha0/x@Q04 ( C^.?y8w#3E1h0 ಚjjU'  {n `߹ r^:j,Y2n>}k/+뜲3yfnS!/t"zE}&OԛZO/mXo$i7!7(ZEw_rf^oq.zS'>گ~7  sh~ψ-R(-,b>Ks_8zkjJg1O=ZXc?e4ޭq򨎛tl?P$IF.Ш`5n 5+~Ƒb꫋uՓՌ wDmNTb"ͻMOI J{w 2HZ]Z \tL:K6ɑ~mf .9'KOg҆[*W=zF%w}JP:B.CwװŲ1R/5/0?t잺 ʉ6#oۣ$ _ZF]L}t~řWe?2~^ J(zų @L?h}=OOb5Y(rؓ2㏮*2Lj!\\*`Zt:ч ~K7]US0JX>L Y*RG#d1Vߚ.5!\_Ɉ ϟnia\m1y1#RdvOOgO|IO c\̔=KtR `SvO3g-"ǔ|7?^-^5 pם1ePqf>WIΩ( 1<|8TP3An`PyO@8k e/y`v?VuaбnuDN,nQ47]SMmvҽy㜾q\-!r^?Ev=Z&S"|(F}4w`8 6)!qTF_ ?4/}'>IǾzvJ/y vnKK$J7nDz?cSo Zb%{GF{3%VNpL`[= Z%ޫܤۼmÖ>$C.]@WU80eM(R={kp"ɵy?%6ńG_aɃZA#xE Og_+u\ƞF:H۪P+~*%{)&V OL;^ƾv[we+$iHB? ޮ͟{ٷ~Zr=s}ds(C):F?BpYttS=2߈ j-<ͷ[EzmvoG,a=g I&rY&ϳw+loIw"G&1=Ćy?4ǧj@ÍJY>V x![]cHRط4$C ͟Љ/"ˈ btO[%#TͲTeg?CӞPWZxXS4ZtcTt9U 1G|N^/]3dmc[O3abv_ae NS6.n/> +Jn:A Ň`'\obR+vxaKVM+7UXB!X#Ei W PqWjus 3Ze5 ޷Or<gY3\q|iBY!7ylt٥JY>iJc.&f o |k~Z[&iҾ47WS$;vnϬҝU9J /x[1b?#Ja-ۈ_†ڑ]P^O4t):۰\yiuHgC0d 'Lg|xZl"ïM*qڈe2XE!Avpj ={L ~sO Q^_nx {FtˬEgܜ|օ4<c`s{_{1(ʌvos]ڕm>,AU#_h=jŤIs~r =^td(҈0pt&Z `d %M%ro3XI0Ck3qp<{tV}(P>Z|-;ϕ)t1fzg}G_Ane7FO^5.mQj} &Na2hO~!F 0]of]Uk__jN.(koeiJ*)Ȯ<_S~bqnjƃGTvKB'~ȑ m}'n+ǪYРD Y:d8WYw*y=Տڟly?ѓBNl\h-cJ!XԂ413ێ!%/1f,luf`l,w[6azǫu.~?h@%H~ŭs4dAxttv+b]{jJ7ܠ*鈔M2XsLG5h۱=ުQ?;(uI5*%YY)~]؇Ÿ@<S{Pp/ӳ^ƪ<_~}|{c_|Xe[z忄߀Hy˶%w,}VEƙ9Sk(s~hHt!Գ{lBRHBDzJ5~n*d${ z=#Y_č40G1%U{ŇY J?<(7l\*/eR;:'.y_2&-Hڎ{[]-K RjLLL̼"f1= |7/5"[CDb%GUr?6MhB>,R܎l!u&tGW7X'fQuǢEoGf<2 I㱇X h $cUCXMmn6 -2je-Աrzѕt؍åBwt'(SSwVzW\ҺsKLb,-Ţs@>\ @Nd%78!Pa>QOs>0>^#;7Ũg%be z4c8+oqI1ك*z.(߸c;_Z'Ұ-$Bb`j$[7>1sSU:kMy+#3گn6N:@pBkk{Lo^n tKuo?~{bs2ti0ĉMRv OwG_p3EOoG[Gwȟк 0چfG-$?_)B}OT*!diY};q76hseYJu9 Gaj״%1YvY+ ݦjO c"<FoJ9Ia=OᆀFtsJQfnּOWo|PR=ab^'.ǻwnv}i|WD$?OXdr댴R)Z|[qlțx!ݔjk H,eںU#RM2q:!&ٺ%|Ѧ$C-1P!J+\Rwt3!ZQjji?9"|1*weмWDKXI/H|-y/E 27t'"#W Pф$Srt bq- $SQ:e5{b! *%3Bj2&)!Vyn?;So3g-vgSp7lfA)m%%n# liőG|]vxI ~u1dbݓ. endstream endobj 96 0 obj << /Type /FontDescriptor /FontName /EKSQYT+NimbusRomNo9L-MediItal /Flags 4 /FontBBox [-200 -324 996 964] /Ascent 688 /CapHeight 688 /Descent -209 /ItalicAngle -15 /StemV 120 /XHeight 462 /CharSet (/L/R/T/d/e/g/i/s/t) /FontFile 95 0 R >> endobj 97 0 obj << /Length1 1630 /Length2 17042 /Length3 0 /Length 17886 /Filter /FlateDecode >> stream xڬStm&vVl۶m۶m'TlTlFŶ}{I>XcA)W j^hB: cyÎ@ܲk"䎕'Ooc _09o)݃j֒*揗/gM>DX4jjՉ9!#'}??t͊O.Vc>3a!~Ez рTFөcR-f` 1 )c1={) 䠋`3ԭ' SkDױ1qs"gGeͨI 0`T).fi |wOU' 3Y2X_j S_C %lvHvAa.HO!hL?Y-\HB/Ĩ,VXyJ `mO tկW,.V{B^w }4JFH{}bczyamD"+Wõ۩Dz3u91*xNMH75V-NCD?YdϦ.{sյMQ?⃺#*@5At}]95k0DJ?$Jiw++U뒨wsئ~T31q|Kx8nƟuaAg#_@,p$NjQ[=Ι.,[+W_!c{e~6ގj^?X*Ok(qvt-\63re$fG+&4ln- EISo1j}\j֓>]?N9 'NjӔ"G^Y_ Ml#Rg=_jy!5|n͒űyJG!$bOM}>^ᾓF?@]4icK)ӝb& 1l^O¤ E:i=Y [}BLw-q nUY4R%V; 1mT㈷89acѰ^ޚz`;h Ny]0bqaCː {V_z>(QkX,Q_#*R%LۥR$*ޭ < b~uV|Tbھ.$<򃅀8,OD _;XM zÉDrE9B>) QIDTM$/ EYk*jQ65305rjCX0q!?y#JB̤͋dd&bgkg1퀨( .;[Yİ<&hzVZrHA=W"Ax6tgqg{&~CPCoWh=[> ,eY }G]CZ$&QB a.(Ez/+Yi Fkk--GhKsc)m@_o2[FǦ}{&quQq 8ɨ+OD⊩&䪒0=Թ+ctN&P0~Cs/OT-|)HTZnæzJFUuT VNv6<<M)}qDګI`6f}e_!r'( OEm_Ӭ)<$_/2'<-`ĽOqꨡu" L |? 4O 9zKUQD`,l$&SVu ^>quQDnWP[{ݝ>2\t=bCʡLBqbTzME7>Tf]L%AWb㋴7w4╇U0S_!w>B9Ա {F(}b(e HXyBb5we FP[=|(KO"ˬRn*v (nv׬b,NTdN&?LprIsooj>~啕҈"2!-~lЈ3qLa8dA OFI?[72>Ӓ6 >|t_"g9^I$zz+ưQfHcb*)t:s|f0:rz!G(Dq!Y3厀g3Ocy*$KvMJTGoQM1)Q&F&Ğosډj#ϭ;WνN «ĹwP_* +8CqX!\LHn.ey4F ;s$+M`<)VRYձqO]4_RXw(-#9K4 Mw0u^,Fd}f|oOI/Iz䦬RU/HȮQ?"+gwJ4ۙ?)Y5*Qg( E%VhP#<^At ^IJ/*\-CvkG$QE%yPх&c3ՙ8[-5eN #\mށqHJϛ$p0| >v8џJ[,it}[(51wBs kT>(#gcƭ!N|K ۵YsXG\}_n5|JVqMc4F!%ጏg~˪2Q6 |!2(ӅvUo151}Hu|SicOY&Y+C(6 JSV|XWFm)CA+>m[mj C)_kJN)l-@av9ISM\IYLhL'XoD<-HI"γtYvvJE}868PRoApHw:hA n>CHt nߡ% :WҧvahKׄV;lL۵^4KvD,Ғ R߹yt}X0y9VOW^'yO 0:lXp@Q!yAxr?6V7"%q+{{4@S'z.II3_/%hSWI$!'yLj-csOtv{mCY&;_q@yޒ" m ^~JULx'/Ss fk&': AkzMqhFqqÑ*х!|+"Z%Fߢzo&n眆SQ6JVihMWHIy#^*ffHgp:k~ AwX5du;E:m8ҊSbO m+I1z>0>kAbqA[@`qW]/#r22 ag#X$Bpvqy\zWf_Ѳ[M}VE(e89-H4;^Cu}=.IZF ͘Sf\׃e.jrC{AC},zhzA3mZ`} )t,}ʸ5b},>+W:wpu P[5zfϣC $ccPl`6+zk$bǝ-8E}.kæ"&_o?)-bmP 5HQ }1i) ɲr|ktbB~lя*8k w-QؔbiH$vFk`e*CM4O㝀w61a#y$&yXtB$FK˗JM zMHهB+]1)1^.~xR?}fm Qxt_'IZܦMH݄GT="c9XfuX(FSz}z  |y=oiN.:ՏD~&2#N-z`pxWH*3=w-452b@Bh1J6&1Uj<*^'+|h9gc7.;zV萕 Od]@AOz= L"66<ՈQh \ǻyxTְկ\Pͤb(S)ӽxzAJC|bC<mF1u2[!v85H@ܸI-wלk݈z*[51kQeJ`m:?=?5y%W⤞Y1#g ~,gZZvS{0XdkFHflf2 C@n֌ YvfAK$K6aLn;)p,֠؄4/4Pކ%#A5 :gBW?;{z1l"U1l6vG)ׯtwjא~8A]9&ߜCr{Dray/2jT +UnWh)bkהnG\D(%" ,B>yT99ށl Ztc\S'_!YnPlP_v\έAy<լw M}0wEzs V9{x\ <0 ?dR_js 忳=LD ᒩX_RyXMj& g5u XX߮H79 :(!o6U'2C̯1c&ʍ#yQC'Ix~FBQ%*=YV{k,cflWYKi4ep~ rdL`$?Өbˊr.{nY$1A,J/1, :sPwpFi$y m1=A^𷚵W!^  8>g6fHp%CW;^au'JgJ d*;ă-,ԯmFl՘ʮ\ZI;BI_ku>BXq _j2=c-r\%`-GQ!~DP-϶>*aڔe,̬Jnep4ZdZP~UQ.OAD(H*.̧֧jGIE|atpT (P)C  Dt|U{WkJ,^KʱЇj腩):<:k>%'#;lSr@tPAyO2Y2%R,/۾>ZaPD< HŒ"8A,D*]J δ(XMf晑:/ų = a }9`O{Q1݆_O)P>wXQو{*뚮ٶ`Si+| \I"/2Jd1zlhˬ6U&zOy5W9ft " F*tMȜSU,EE 2}gfub磕i!LHr' }z1\^ߌ=~5XΣ E]hNȝ2RQ~kZb: r~gH_Nwnv\ia vClD%Q(5$9yߨך6 )4:C*'é#,ztOڙ'_yHkǣ:`fw -;D{ 7opAZimO&7j4.'cZ<řZa!>T!0?1Wh>ШSW=17ɷ}2r*B5/lGkY|^GE 쒜Ӯ-<ϦVz/l=ik ˀ!e:ٖitҶb(gwڌ5.'Z{^*uCBJp  $c9F? ^{6X 6LgȫQL1YN.YbMTK[ˉXtюrTaŧr"}6BJA0r_jYΔwUȠ٫CP";llc'Ii&T ƃ%% +2u>X^h:^ NMl 6l[[J_ߌ@}5v1X\H+"yC"SYA. x~FVH9-jy ܼv"g^'K!; 5e;c[)e:MRFHW1Sʅ:vl[Mx/xk"}-ySDc߼lM' ͲcOSsō%x&:'[~Fm<}5} Pl ,Ōg,OS_#F :$^Xdl+Pҽ[ K7̌WZdp>rCX9k_(j*eqbse uiY4L=c`!OR#>\w`F [R5osDjϞ"ZJmw. s K08|N#(l>K ͠RԋǕYt8&ovKg=]`1`8r),V%繩 W!'fdSLJո_7ZzBQ۹f~j "u}ٕxJEkݳɤu%tetIxAVv=ò-2#(_ʴe,hW-k)z$k^z~3N@3_6b,(O+Įi t5;okǬ.Ŀ?NX&&y}gϴ:lQ/{s)|r`yqMO zE5+EDy"8ZVV:@ۍ7N~,`IuD33rC^{8$ ҝQD Rc 0?& '2N "օ.2hYX!s_8A6䌐%8Z $z@Awlj~uUZ TǢoq`` eqgk8n2ZxQ =e@lIQ-@gH4VԴAD)?yGw=(, 1! zg?} Dbp40 ToqƳH6;gNe"~\ro&B"=8AGxhT-xj剤m0jN.1)g0b[܉c抶Z9ƌa 73%Rh?^s]d]UlThTn;?/AbkĬM:Gԗ *DFʉeRö:N+FV@;͠7Uq}Nj}3eg1Ҧ'/<~j/n(+E IźGJvʩ;%v`)~\.~ e++'wPܖKWTe&C *FQ~l=Yc^>~쮜(=֒sqSI;-k}Jag"vtݧwy0|a9*CNvl344Rz,"pu;:(7Y+d]Wp-;্6A0k&?ȀOۉ_ ].6ǯX[h[IǻU`_tdpv)HM!Mf0%*sćIpDEF*Szsj}o{"(MBŃ!zIqUz6cKZQ[l[)^-AS9 8nW+U<*7F]fE*7t1Z=]7uQq À@u8~4צ̭qZ9EF,bYG>Gi䩵qG6O1rk/=3ͥZa6:t^;}1$XzO8Ɍ5Z69e:|/U Z|Nc\a*?B2Ҏ&ťLni@MTh )žc$>coJqtYa$95s>U}5$,`紝-gޞqpbĀᠿG*_O{Rzk9T:%3, 6VAYÜ3,5[1'xNÜyqvP.7H7"c*'A9l}W[c'M%kwP;.*oP!܊CD. 1p9'B!^UkKֈRc_rijMQP.`=R)op_L, TfRيdЄ+ 胙R4,o}NTL^]xzf] [>g(XG\}Sg Gk5b GO?hN}E[|dZ0Q*Zʲ·UI!9[F]N~zj WH" /~Нz4^ Wc5mI*umΡ0Fk)2I+JV.t~W!ʍ2lI[^c;-45Vzq\]|_4c|u[MNK)oU34HoB@N,S̝6һPZGba$qHjB%csV,>#X~gH]zRy䇰9LݫM QP4GAq@-oi+q]jy")д,52 I dttB5nY #;h $?l@P0p4m #I)ծ'\u#/_WxPIu>U%V]S鑛cqnN87kmZ!p4@ִ=aUa 15A7ٞl606X=s4ϩSEB'P[ao&ƓEzvQY*z,R9-R,˸WiKZ\҂v)QL'Ȭ` :uu!,o(!`&#zlַzUK KqXz38ٖyt)5xH$X;6^I1cZMç%(@e}Y_zPYO[;UwY:Mr4%}laE !#˲hI~[gdsb'+[ЗB)^Oj纕z|#}8[Q ('$38B謦&zG\h{0@ȁɪ˛Xv?8Ňjm͒Q^+^X'P̪;,9 :j}^P%L ]$=h\v0nݒԡ`ٟsR7#|_oԔnvwٙ&$Xg(H= e\`gJ!ҁ‰gYaC0G$VK5z[p0~L.wlH"W֥},XO[{ݏ9õ-ezZ1tnbҽ.l@aޫߺV*t6mHEGLu[ FNy$9tN) ?Ժ&K 8+K:VYSM5MOծa f?&ГgͬkBwF.|UЈЬGĄۅYiRWcnb=/n_eO"޿a!1V0=KIt*lD3TϞ~Kٮ4PF %ⶴ(b4;N{tƥ`/ȗ6g~+#?1I7^b\Ãp0ZŻFn/!:QL&UA;0URb߼%6ZD&cV ;5)8LY+l`}qu8QP`:Ojip=U e!V+ZçpgP) ̜;\JF*;>m&뛬*"CItyDbWOޏy&BvL~~3|`sG$4~|ɴ2R"z:PQa  jOoKOѓdɘ:SzW%\s.QkBޘ)~@eI9,ۆ%dD7pUɍeet᱕m>Y%́$]/]XT~[sv;x"SQFGej, ACTIOx!Q-x+}i $Vј&od8i\6#kJ.֗얝OHf?Pe &Ҵ⼄xQ8:>6<>Q:Y(fwp ;JStV{]->nƑ jeuPt=|EROz/!O~:ks(WU@LwjMĕuk_MI%dFpJH?e3}n>ݔXoh;rq,onu9<3=s;LyXP!/*{豃bE0hž-K$OBГXA zMRD)_H&I7&w- rTɳDfG!&P-(麁?=8ELExbG~>`una~~Jb 7`68;}Ms4`liswH\4w " }GG\PdP,Y^!R k(zq\+1#uqUJ7ꮑnbPFI[C`T3xOݲi !$Bg}3( D%q є2pqTE>YK*SMY u`߉PQMnȽY̳BqgZYITLkiw-^#`~vfN|lO> 84qc{Ptͫ2 '?yQC0Rdq[m݈R+ۤR%yG"G~WRFu]Gi6-PrX%:L. $uR)ڛ3/Xc'b g#:#~udcs_|8Dr>B3 |-+qbD'LNTpY߁B{FJ#j0C")Tk/9@4FY3=zq`K0o6UԱ[GZ\ Us_AZZ%\T<^-5J= *}#,~ kjgC?"Fw!VŗIdxX=w?"v2%H = Y3]]Olvz5SKcʈXЋ 3[_LUJ{ck/ͮ$ T-o(r^$ފ94Db6m]!Z_*FoFDžŕ@XTG> ] endstream endobj 98 0 obj << /Type /FontDescriptor /FontName /XUSMYN+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quotedblleft/quotedblright/quoteleft/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 97 0 R >> endobj 99 0 obj << /Length1 1647 /Length2 12016 /Length3 0 /Length 12851 /Filter /FlateDecode >> stream xڭweT\6Hpwk=C[݂%8wNp.;3wf̏zzKjbf$Pٚ8;Bl!|̪@ g'cƅHM-4vA-`CH@@N: U-zFFJR;fh\6;[ l,s  #(RH@$Ml@y)C68L!`3_9q9v@SЛh:؂ߞ G1 搿siؾaodG'GSͫ'dioG iALJo u2N@7|f G;c7odvpv-ha`ftt|yv'?eolgg5o1gAdxiFd_d;?fv z-c3`4GdU8ϪWko_%mlm{h]ll-gjl qU[ _[Ub$ h r2ۼ]r }3bcLdj \`ng*&%lۿߺI7OZ 8E%.qx2s9xކm8>zn&bYccacc/Bl 1Ԝfo`Sg 2CM VINx;a kr!I7J*Xj_g2 vv$O)r0ViZxwY Q=frilZa+(Z xWnƚ6 5pz^_cOb 8c{246CA1^zVdyy&,@?s|Ip ޡDIi ^|zb3Dhf$_VЄyaz 8u= #Uw( jC`o"f}8M\h~mcUeメM OE6h~7 8[/vE ^6n;𩷫<$~>+ ! pRf“vj`iN{ux>¼oXOޅ jma6mYmDYULG ,@>bV R\oѠa9V2x/%4-t8d+?,bnY:ݯD@x q Eǘ=pZ|røq\Rۦ=/9|\hvX*7#u8M{zF|m^ػVdٜm^Mlt)9qL_lJ? >?xWwP66~:ZDDݬuUšk`NRͽ9RNu}" BǤ)#T ndLR̥|j6 `&[-C}J|~&5ۓvPj*s^aA1jHsk/hEѭ?cܙhΫl=,DHu.WHN3Jh2dDEa)grAq?ffWMN)2K N"pO 57_-%wعb#rtXO4-Nc,$DC!+6ur"x= RXֺҌͽ ea2+s"~z41h~Z~MJg10])Z 1xh_%fgˊ  jzVq^5(Uϕ0ي :!- Z74g}y+Q2]_Db$Gt\O1p5c9ymwjM I5`)kN6ELy#]/Dv]G.ܶw$kشF4ڒY^z܉6y pF{ԨA =2 `P4 z{VČĦO%φVS˫ֺ%&}!OY[DtkɽIQ(S4i+L[)xfL%90ayaTfnj^l%;A<˱8C9бI|)7hƒgF!W)ƵSN طFxjx2C톡8֠ T@Z^:= aox{0qI(kYkԸ3tH" ]]3/<24&׻i i@˗p1qߔacdC[@:;b}vhP*vdZhV&fu-Ym<qªkƯZIWD ,H0h.EC?BFw܀꼁1k3͎+ˏGGj'X wF$p7\&hF .EĐ?Onv"Hk`%f#&8,|C9ry9/DͧɉA i^.es $"fO#z`,-AL#WSX@U}]]98up/N~[*]5RTdw#di0]} | yMLΞ4$m#pĝfކ"RFSàV-9k9]_#1 = vW,W= Yq!xçR\@CH v1oC?IY*Zak&)6k?Bgc>ClFb]=z\fݲ}TnjE3KK89b]$+ϹY| 9̗ݷc@2MH^ŵɗJ*!Z>Fhyˮym`6ԝX&/ډu=B7;)eúvi 'ʒaQWxQx#>zI7#XYuU<ȓY\GdgAg>i"ɮʧ+xJ*$Ƕz LG :E$wx\I/ϑ;a}EbU[WrV"CS|/wY+$?h;sgW_ryc7wehP<|*ά~'Z.GeZV' [ݪ+ 3A^+Z{\]’\21I 鹳gG8}pS a@1}hM랹OGMUTVk|*@boh/Q#/YL~ HDׇTs1y֮I |vޣ9huu_I|_c!T8Q-;t2HOp'ݒaجl&YFȁ^+؉*đKd.$]'n0i<׷#~כFsFŸpι|E7#*Ɔ{F?%\ܦ AHhS17~&Y։3(rq⦆?BKo!@39 .dس9sveGؖ(%QHz._3P'݌ն!߈H!2y}~bg|(TOXnTÍ]$ n:Ė`I3/]Q6Hj'$zUy'Ƞ=rA\pAK8a9k$Ĕ|X(&b=IZo\b)hU%K' )|4=B1:[%&iM2%s| i>R0N{`Od=Ԣύ7Jo:ʵÈ{Ƿ"{Ѡ#8ǘ[e{cisto a4u085?lvLԺЙ{߬6UMR4L1 -B%#S/:dיnf?N6$s r3{B3qM&CAkyW=(j_Khm1 l/:5)HA%3<ڂ]Wug:6!K?QQlb=_+i÷` J`i8t/ӎm1}sW)l2}?ƠZU8)X0 pbJ$[9n/.PV}CٞZōV=e(hF\NAm$hNi?'?T>.\v5Ot)}uu3+}Ы} r{o{Ẏa21E.C'2ɸ`򅐻5 Q>0TnFÜZ25D>%MVp(I.BeYM0ҪzϺT;+@as?1f-NZ,gDW scX׻qV.5cGomXkG&G)pɛpjPo\yvߎ2IZֻ6Zi; |ۅ$΅%m3=OӕkNȼ(޷>M:"x,r9+R88<ˈ NTCs`t4Lᑰ'ES-2gwNu!OH'y^]UnnDz֟BĦYL{Â5FJ&Dҵ:S2W"^_/j@hj?l\шoXNN'PTHς3:fV&!c5Pd}sTі7hr?Z}w]EcD 4`<-U#V?G:~>햯*;ܶ:lu=FURz_j,>c lq}rx7 'z8 }ݔu@ESR(z!y`1]C.d*8/-=F|P-)#нBRl8KRi&ck4gj( ,S~I+ںX(c)94dXHJ1rW+H/K8&5Շ|F+3`sýDo `t~*,O+ޝ(6FYm,HfXke Y& 9wϗisگ8ʗhTKg]R5΅R^T촁EҐ8hʲS?r'^׋mLr b74l8ڢʼnj0Z,%aI:\;{2N!;`)9@&CH]MJ)9X벣mƪ|4V rxX:Gຶ4Rlos xP?|.D2 /*('NP,l1{h#GN W"v_ȏ@@eA:Q yrtRPEw#܇1zȽ/i^ d~y\-<$a$}Y˨( .ˤqMk i\[pl<+hi+RY U2#.?(Et 1le /;>66V#E>?q=UwAꩯW+͑pp/郓>KZ;뾅IM_sȼpz?* :?L>0ɷ_lh)#JI> Y >`bl\.+īkKqk3 :SjLcJ=*WqX?Ո6G$7nEm6م/Gi+TH^]pvњlYlJ?O:5ًOQuH ;hH,^>HUZ$I}Dz:0!IZTrhjp ) \7RחNp{=K)_R Lʅx{|^mt~Zx"Oazw~y8_9Zcҕm8#k|JҞZ_+Y2 m6gh .70=}! h(' (E ǽ)3Q= WOc–D+Irw QݡJdqX9?f>IY>A{38 !B\SɛQ7\B5L::deM^8O TSĪ+LB)#[T~Fi]o E V.CRO~&z,${BdO OL/u:rƨ*=rÁytdGjl劺$=zTkD؁xEJ󜸴 ;ܔa4w)XKK avɽ |d>d<ʺzmxdW(G]p9}.PRGyo %l1KD$L7^N L*G)=~R g}Z~O[qI 3HTűeiC0BJ!NG{Hr=ZL-*QoDe16a.H5k5!w|_$h/# NT=K4emdh|-n\+UWx c[:T/&fR<;|vZMrb>-/O&DO[k;.#sZb\{fn4dBU%^/ܮްik=V3+# {:A3Ƒ"IHI0]޸ID#dd@KR1y8p4^ic9`&R}+o)Sd"U$/V'z鸌 IT*.WwX$D,"X8a. .\m6=.ةXYQmx7Tv h~嘾$RRR iLs.ٳC3GWU[ynKw}k~>F=+%77RfM.Bdr~?MBzń#KdCh8,S*.-7>EApOoQ>~r׷u5RMnɔ3l\ D-CjAO'xǪZRcwj LZ%RB:"ñywGv&nRՐTQݩdL=ag Se9dmظX*SW] Ԩ%2xz!4-OJX6Gu endstream endobj 100 0 obj << /Type /FontDescriptor /FontName /GSJWLU+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 669 /CapHeight 669 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/A/B/C/F/G/K/L/M/N/R/S/T/U/W/a/b/c/d/e/f/fi/g/h/hyphen/i/l/m/n/o/p/q/r/s/slash/t/three/u/v/x/y/z) /FontFile 99 0 R >> endobj 62 0 obj << /Type /Encoding /Differences [2/fi/fl 36/dollar 39/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon 60/less/equal/greater 64/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P 82/R/S/T/U/V/W/X 91/bracketleft 93/bracketright 96/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 147/quotedblleft/quotedblright 150/endash] >> endobj 38 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LBWBDW+CMEX10 /FontDescriptor 70 0 R /FirstChar 80 /LastChar 80 /Widths 56 0 R >> endobj 31 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NUSLQF+CMMI10 /FontDescriptor 72 0 R /FirstChar 58 /LastChar 116 /Widths 59 0 R >> endobj 27 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JCUOMQ+CMMI12 /FontDescriptor 74 0 R /FirstChar 59 /LastChar 120 /Widths 60 0 R >> endobj 41 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UEFQYP+CMMI6 /FontDescriptor 76 0 R /FirstChar 85 /LastChar 85 /Widths 53 0 R >> endobj 32 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VCRHQD+CMMI7 /FontDescriptor 78 0 R /FirstChar 65 /LastChar 120 /Widths 58 0 R >> endobj 33 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CXUEKK+CMMI8 /FontDescriptor 80 0 R /FirstChar 59 /LastChar 120 /Widths 57 0 R >> endobj 17 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VFODGO+CMR12 /FontDescriptor 82 0 R /FirstChar 43 /LastChar 93 /Widths 61 0 R >> endobj 45 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FYGEPU+CMR7 /FontDescriptor 84 0 R /FirstChar 49 /LastChar 50 /Widths 52 0 R >> endobj 40 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DVLPQP+CMR8 /FontDescriptor 86 0 R /FirstChar 49 /LastChar 54 /Widths 54 0 R >> endobj 12 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OBYBGJ+CMSY10 /FontDescriptor 88 0 R /FirstChar 0 /LastChar 103 /Widths 64 0 R >> endobj 39 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OMLUHC+CMSY8 /FontDescriptor 90 0 R /FirstChar 0 /LastChar 103 /Widths 55 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DFQYTM+NimbusMonL-Regu /FontDescriptor 92 0 R /FirstChar 36 /LastChar 122 /Widths 66 0 R /Encoding 62 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TJCYGM+NimbusRomNo9L-Medi /FontDescriptor 94 0 R /FirstChar 46 /LastChar 120 /Widths 65 0 R /Encoding 62 0 R >> endobj 13 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EKSQYT+NimbusRomNo9L-MediItal /FontDescriptor 96 0 R /FirstChar 76 /LastChar 116 /Widths 63 0 R /Encoding 62 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XUSMYN+NimbusRomNo9L-Regu /FontDescriptor 98 0 R /FirstChar 2 /LastChar 150 /Widths 67 0 R /Encoding 62 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GSJWLU+NimbusRomNo9L-ReguItal /FontDescriptor 100 0 R /FirstChar 2 /LastChar 122 /Widths 68 0 R /Encoding 62 0 R >> endobj 7 0 obj << /Type /Pages /Count 6 /Parent 101 0 R /Kids [2 0 R 9 0 R 15 0 R 19 0 R 22 0 R 25 0 R] >> endobj 34 0 obj << /Type /Pages /Count 5 /Parent 101 0 R /Kids [29 0 R 36 0 R 43 0 R 47 0 R 50 0 R] >> endobj 101 0 obj << /Type /Pages /Count 11 /Kids [7 0 R 34 0 R] >> endobj 102 0 obj << /Type /Catalog /Pages 101 0 R >> endobj 103 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20120824175103+02'00') /ModDate (D:20120824175103+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 104 0000000000 65535 f 0000001009 00000 n 0000000898 00000 n 0000000015 00000 n 0000195299 00000 n 0000195131 00000 n 0000194621 00000 n 0000195472 00000 n 0000003721 00000 n 0000003609 00000 n 0000001099 00000 n 0000194787 00000 n 0000194342 00000 n 0000194957 00000 n 0000006087 00000 n 0000005973 00000 n 0000003847 00000 n 0000193927 00000 n 0000007050 00000 n 0000006936 00000 n 0000006226 00000 n 0000008885 00000 n 0000008771 00000 n 0000007153 00000 n 0000011994 00000 n 0000011880 00000 n 0000008976 00000 n 0000193367 00000 n 0000014870 00000 n 0000014755 00000 n 0000012133 00000 n 0000193226 00000 n 0000193647 00000 n 0000193787 00000 n 0000195579 00000 n 0000017628 00000 n 0000017513 00000 n 0000015045 00000 n 0000193086 00000 n 0000194482 00000 n 0000194204 00000 n 0000193508 00000 n 0000020370 00000 n 0000020255 00000 n 0000017839 00000 n 0000194066 00000 n 0000023654 00000 n 0000023539 00000 n 0000020569 00000 n 0000024512 00000 n 0000024397 00000 n 0000023769 00000 n 0000024603 00000 n 0000024633 00000 n 0000024657 00000 n 0000024711 00000 n 0000025359 00000 n 0000025384 00000 n 0000025772 00000 n 0000026127 00000 n 0000026485 00000 n 0000026861 00000 n 0000192669 00000 n 0000027150 00000 n 0000027332 00000 n 0000027933 00000 n 0000028252 00000 n 0000028618 00000 n 0000029188 00000 n 0000029662 00000 n 0000036670 00000 n 0000036898 00000 n 0000047162 00000 n 0000047425 00000 n 0000057863 00000 n 0000058120 00000 n 0000065282 00000 n 0000065500 00000 n 0000075821 00000 n 0000076063 00000 n 0000085713 00000 n 0000085958 00000 n 0000094061 00000 n 0000094332 00000 n 0000101483 00000 n 0000101705 00000 n 0000109098 00000 n 0000109326 00000 n 0000117231 00000 n 0000117501 00000 n 0000125023 00000 n 0000125275 00000 n 0000141310 00000 n 0000141734 00000 n 0000153416 00000 n 0000153735 00000 n 0000160593 00000 n 0000160846 00000 n 0000178852 00000 n 0000179366 00000 n 0000192337 00000 n 0000195682 00000 n 0000195749 00000 n 0000195802 00000 n trailer << /Size 104 /Root 102 0 R /Info 103 0 R /ID [<0C708B719030484AB3C0AED26AD9FAD3> <0C708B719030484AB3C0AED26AD9FAD3>] >> startxref 196069 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/ltrharvest.pdf000066400000000000000000005071321211610345200261770ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 726 /Filter /FlateDecode >> stream x}TMs0Wp i8C9f#q_xܞ$VVoq<[|YD1:\!Y$8GXhYE?x)\khF`Kr"IimE3rpĸr*T@L.^*0on7EyvD2=HXأ 㸷u@9dY\7sK. D –֚~kcǘnV-P8'R6/JN#emIFG*_ ◄d]Ys]~6!yHJ2/o+u]7ـfz)9_!%r!(I8"%OMڠ$eY+{*}Yt募)2eA[3úWM]+ӻM<5ˌ BcM&rT !dlʷkt151v=MP?{_;m/F+\)LFف} ǃ;W fߦ~SP.NG p^Ę5q>sP*Q3^5dܙ'Dž5oҚp0kBNa><[ͯ𢀱YnjL z ]a.H~5R!ƹbѪ_OU2hPi % g xK9I ?@J΅ZT>/֜~ endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 1 0 obj << /Font << /F25 4 0 R /F26 5 0 R /F29 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 10 0 obj << /Length 2270 /Filter /FlateDecode >> stream xڝYIsm&ظ{&TRSs5'w( H*b}x_~,-ݟdNBwCBw)Ͳ,g?;Z&LgQJ*)RNIQun.eUvQzJ7c{PѐKqhX}oJOCeE.pmizQʎLA0FYBX8}d 1&%Q[%'pvilgT8LcIxA(K B8_mm2yTpi;oos+ʔ*f\or[g{$zYaj'x[;]ϢÜIH]1'vn3j K (̍U{Und] mV2nWi/Ngeg hmQ9Z^[M$2^A?װHNHK1Q=_uꉭt0U$[u9! GB@ a8~КS2.K> |*b0SYfkQ.@vL&PjQ:Qt,g t@p/.njA"hS;?`ö>8jZkk<=% ^E+xi?m\ |9P%]YZ BА _7AsYiǜAC\@6~4zZ A  Q.c=FFL F8D6gނ5,zтvvx@SB#Ex:A[4w侵TӳɄ0 jZSE#5>_˂ -0 ;P63i)Ks XkGOxv. Q:>L16E'c)}xΪˌgh/Quќ壬|sC)`U>;an6K#]W~Un'Gu-(@,W{TT':$(=62 OΏꯁ㥪8da@dmdPH;媇wCNǘE(gPH^‘\DUPl7V=̯osE2fbg|\:Bua^U谦suх0*$ɜJ-(D q_an0 "ȲE!q 1@J* ]~3Jz2'YV"i⹯;4eZC*. euUU* ops"x7o\_R THRf)sW?t^eW߃L@ְ}n&WL[ jte3) x70!L_)NC )o àļpR~htlU!`c3aT4#rQ9)n 9+HXks9r)##2pĬIUTP[wV ܝA@ _a_2 ؏ xaSaYx,0@bTm<%#EabyDߠ)lW@2a^Z,mMm"r;{|]59{yOˏo=". ڠD <ڳ9-X)/6x0ID]pw$r)[QGUDTBV[䲐d Eʢރћ$\(B{-{]TM%_NA4XZ6)#ΡP!cWSQh5{C0{[eרO1[:C XH/ټzEм#a!!j &ngR'b.R3!S<U.P/^}zΓ9\\"ObE;ݥ[kOn_L{MتGfWiRW{?ቪo$WYlJ|QxO] y𙗺OW)\]}QQZYxަ/#<[C폇& 3WGN(N^8`ZߗSЁ&t2LA}e^nz-|[6gNh;(e@MwxMk:5f ^h%X=TD1S!mic0!&=.a"j_ވKX`WB?;*l#Bfni&{8 əԇ?1"B endstream endobj 9 0 obj << /Type /Page /Contents 10 0 R /Resources 8 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 8 0 obj << /Font << /F54 11 0 R /F26 5 0 R /F25 4 0 R /F29 6 0 R /F34 12 0 R /F62 13 0 R /F15 14 0 R /F48 15 0 R >> /ProcSet [ /PDF /Text ] >> endobj 18 0 obj << /Length 1259 /Filter /FlateDecode >> stream xڽXM6+|I*A#ɖ?rdRV2&sJ;mIYfrʖZ_na6{GJl?FI(O{&1y!&S2?o&H1l|s1y} XoJQBӟ&g\mD"X+-1[4"3y\ֲVR48m62"`{ċ4=`^ZF~{_0Їq=:n", J:vcG&E/VkmfSȧ> Br*Lly͎"جD*Hu vQJzFyÕ\1Ɣ`ZgWKq%d{MXlėV83Wi[ >M ; j 5+*H9-4OUFV @q`Z_&0&F&8k=ۭ y!vBrR"^rpB˕(?&?ߚ(>+'b?xAQ+J7EyFDaၯaxRΆit@YY-s\ٙ:鿧*&|q(٥lnf.gAaLl)D|B|оϕ Ek+ t&z׋e'dι]UE7dSn|^;4x}1opzNYm#TWUf>\zK6HQn ηWhup\l7?QL譗;z_eUtp/PxV(7Kᦽb}5:;ie .ozhѤzk +-dEV:9!Pg+M' nL'FQO ?e!=HYbyW]3qZK}xum5uEn.{?2εN ZPEoCuFћ;`(%-rw8E|h^#4 n1 M) endstream endobj 17 0 obj << /Type /Page /Contents 18 0 R /Resources 16 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 16 0 obj << /Font << /F26 5 0 R /F25 4 0 R /F29 6 0 R /F34 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 21 0 obj << /Length 2118 /Filter /FlateDecode >> stream xXKϯQƌH`l`mvln :zLS"ٳ\rHX,V}r'sV*%6FiKɳ쏛l;Ҥ}~ v.ŸPwUs/l]PYzbh*aR2/7;OsJgKԜ/ׇ8e&OOP.Pn^rkUCK?\xZGϩJ{MK5lzj;Za[d?];S۷ Q@SNMpǕAAd}'Չ.ųKՒ@0ˋiYu1;Ss.33GΌ U `>C2iBK}juu/B`:LslGCE|ts_)a6 -;nX%h`9T[(FCvǪYãdB$(x C[c"X6W[\7jXA JG{rXT'̚󹭯Tcu=g x2" e)vI~r) Eβ 8ʡC%aloEh.ޟ (pl,ȴl8|rh>Z>?=W̓:*ÙYɊC^60?]B ?RΩingR&߇6|x|3|I4Vo %h^o5 Z%.RB^W Mipɛf$ukY D0" 9pK\ >X C nT{Cgvf;,wD]o} %V~݅*@WY8|Qӡ_`rYۅ !ό&  ΔR%'8Kqܗǹj# fގ":^hɼIt T.j5_դzKTITE6A+̈W"u,Wy1%& 0ss6IxbWpѽ?6@B" uTTk("Ƀ tXi|YTSc|Mr'Ϸr;kxzN=^VO"sYn-.5q$zɢs$0ztvBBGzpޮHh={|vŌV!RY^yq]Ѩ1?8[=5=MI!!p:-j Z'W@5c endstream endobj 20 0 obj << /Type /Page /Contents 21 0 R /Resources 19 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 19 0 obj << /Font << /F26 5 0 R /F29 6 0 R /F11 22 0 R /F43 23 0 R /F15 14 0 R /F54 11 0 R /F25 4 0 R /F10 24 0 R >> /ProcSet [ /PDF /Text ] >> endobj 27 0 obj << /Length 2455 /Filter /FlateDecode >> stream xYMϯ% 9H"`@d6;-w +K^IbV{I$XzU?}p\!q V81J1N左j~ۧ9}Pf Io 挴^q"%X`ΙZNL ՟վ>>owBl|h ԧˉ^ݑUNdw`+j0;&!>>~sQHKz-Yn _~uƶ;z@6;!J͊)ί;uׂγzgۍ4ڏx'~Q$oW\ɭf6g7]L1Upv-Ϟp,^v]ԃ-r=\NU;lV쿴b :ʎ`Q֝腢4}H99 @SU)$9WvU>Tg ?6T~`\ ? HA˝M/ӛv* !0a+!Snlu5ӅY]& .R%4ʢ`R+?Uc+Ǯ O뱢guLInHÅjhGV M%JYIc#yE.5˭zS+ɍ">pr(XYICw*Wn`\/>=C.?<#T Hg`'@HfԴYYGxogo.(u*^qUA Ȯ0PU*4H&X-OC.Pojb9,3dOhj yTvjF 5*,q;Kwg;[LR1!'ӖiSL7O7NpGa 돫YS—M؃1:xP Sa*qX%>OB?Rqc @xA @kO*rQH4*N :%c^4Xevqo~5^YQdeTkj ?$~XEF!1\jWzvVZZsTdDz et>P^7ªmL˦n}we`RA6̎OU_M$}7K ,ROScwsS!;-E<)o;)^6M>xƩ=45!LJ}o zn+dq,ϞtJaBeCO^s+ չKWV֙ im̈́JDJ~Yb 2_!tK{m&5ʖ|"&<|F=Mcx*ݕMuÕ_6A z -oaʠ飛ZpWw)qS7B =|Ү _@L1}L:ԁ `o=뒡I)w+ƾ!8Q=pSP-IC`nq3+B= ɋ/; .R/V"/Ta}-\g|y_s? 'Ep_>'f{ endstream endobj 26 0 obj << /Type /Page /Contents 27 0 R /Resources 25 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 25 0 obj << /Font << /F29 6 0 R /F11 22 0 R /F10 24 0 R /F26 5 0 R /F15 14 0 R /F25 4 0 R /F43 23 0 R >> /ProcSet [ /PDF /Text ] >> endobj 30 0 obj << /Length 1992 /Filter /FlateDecode >> stream xYK6Wh1#c @PA*dɐw!xheM7r۽3+Cbj{XIE+-ɍ\펫?ٶUq6~~9׹^eY7ŊRbdqN8ao~I Ub ,j,e2¥\m B(l͖|?Y70ҟ/=_ P~uÊ?ՠ >~hZ7nųx.G\ưWjm6}[ݹ9έ=lŘXpJKbpF.[( ecU>^с%}tLa4X#3ceݔǶǶ9ֹZu&]nĶ'~5أhOH|km[S?\J; lCD\ Ձzvqp}N_=45[\@:yS<a)-zY{a Eۗ d@N\1#Fѿ.(+<"y ȫKXNr^}6IIGp 䡴}1ͭKGipU+Іs-qI/njHX@Q10}>w,[2[^US% L}(ފp*ĵTUm lfawو{YCʔ2O_a}Pʾt"ԲCBh{P9b^ْЦ1:B*P="'r~4Dp]ߜ;k"g x{$mC&R9T\>`fj mք0mJX.%LPӧ" CHz"kPłè$2K ' eot1BhSTųAڴ]8|}9?7 FrYnt0~!_Kʕf7K]#B)Yn}&$0&Dx1 6r n  7 8a!'K4!G|E4t4{ghcEE09# i俺-bP^As:x4Ãͬd - ƠCίa'0Q|&*<@ 8xF̼o~eX%5$!O!oE" *e-C}ЈFp y# BJfVSLm3”S~sXH1 PtPP& ndYē 7(F˖72's' x#c {pi4} R)藲;ت*j\16s"T>}>/-#w蛜|ֶ. 0 Ssי9_5ucGSZԆQY>m}sMG97@O'䂽&K4Ov`B>?xiӾԮqˣh,TM\[x^Jw J7?)r>' R<9Q'T /G}w7~ endstream endobj 29 0 obj << /Type /Page /Contents 30 0 R /Resources 28 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 28 0 obj << /Font << /F29 6 0 R /F25 4 0 R /F34 12 0 R /F26 5 0 R /F54 11 0 R /F43 23 0 R /F15 14 0 R >> /ProcSet [ /PDF /Text ] >> endobj 33 0 obj << /Length 2028 /Filter /FlateDecode >> stream xڭXKϯ069+R0m'9lh[,yEy<>U,Jlv9D*YlٮTƲ2]RTM5۾x׿mيsV*%ELdjsɤ̈eo:eDZ;ZnMn}ErZf4hjzDr6nF~Jೝ_%S|.=~2'ԟ&N^SzOWْ[HbY,elHH u5;~T2ZSŝ̕e0SL3=SO7ӳ9XKXn|.XH/~tgx9 24D25# n hre&(3]0ugJ3%&ʓ"n\1N/dɾ2.]5a0D]$sxiz}Ϥ)F[=UݏH{{0THt9 .`@$,K' ν&LkU!3pLXO=qeA}u=c͋I%+//+9 yhΌb,U;ID1o<)Tm[2zY{i zlsW!ej#d^jQ7nsnH<5xe\ $MŲ gAFCo>UPUAL9=k9|Tg%~Cڑ͑vO*y49 KX'] N>7g&8̬9WAt2b8aґjCyS1?>(s7Cx<@\i%"= x]-a  8I]3 3ՅQ5x߃pa:0rV'*~ZgtYHDuQCLecb5@, ZYwmlP"O/ځRhjC>&a6|q]ctɷHe^8 ḭߨTY\?)ֆuA'gؽ `.$.U.Le_6afΘ.h?@#: ~*iٗ=ʷ],S4fp W%<=ϫ~ \u7ԷmB sgpUELE,6׏7i|4·08sj(0 ϯi{Vҟ3|}d Ư#[lfM¦?woi7_`]YQ7ƨt75Q|+ :%]0 8`k~ 1HIR2.}gC|=PYS,=d#s8V{E3VE9 P+^ƌ ѯfco3f@ tqY _Ixd(Hdn^ Q5 endstream endobj 32 0 obj << /Type /Page /Contents 33 0 R /Resources 31 0 R /MediaBox [0 0 595.276 841.89] /Parent 34 0 R >> endobj 31 0 obj << /Font << /F29 6 0 R /F26 5 0 R /F25 4 0 R /F15 14 0 R /F54 11 0 R /F62 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 37 0 obj << /Length 1582 /Filter /FlateDecode >> stream xڭXK6Wh2+)J9hHQ kѶPrHyC)KV=3o8oRe'W<9WqȲlVE?7yD\ qe}6is6kBy $oT;:Ri 3J֛Y`<-"xSO16Ɗ.2YĚHA:IBҠ 2-7lȬ"i5!6<LbLF">3،JqI /4!9O` 4J/),xċ8eck]Clq4KѸbw\oHDm-FM$M/toX^?JdP w )^ohf"6IJyלD-O^w!Ye>ʜ:)/MU@4:"ᜩ)*\HU LPU[4Cu{d;c`%^vA3wђG][Yho>L"˛Žb1' QXEy^,@E44n 1_%6H>A֪vw>$F+$XZ: )E(f'wR$ңQhg><1tv,tHӼ B0IU/m07zxQZr-#tڔ0m Rq4U\(`Ƌn;kFv1%8?B=NhugbWI< )p:K d[8x4ey% }[Q9eǴ̃<'FB4z Ս/)@, VM#Nm޲_'μ> endobj 35 0 obj << /Font << /F29 6 0 R /F26 5 0 R /F25 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 40 0 obj << /Length 1172 /Filter /FlateDecode >> stream xWI6_a9@rI@.ECS[ӃbӶZr(ߗPbF9+ZϿmo~yCJ!%Xm+.Pl%e_6xmuװݾKVRU{ Bh'Fh!mq<=+.Γ@'&E?%OiGm'd\qF7 ΍ "Oǒ!`hQ qJ!{aLI>rD3"EVFq{+"D8W2tFȅ*%T9T]"I*C]AzoJ"* aAS'2g|\D,+R>F>688F ׹ݝI\|/*sc[ [* ߽OSۍrw6>WMqZ9yMui=2$t69eSceei;%ِ)XĖ2%̐]sT)Z#muNux\Աt!B%(*ex2Snt($TC{{(p9w1ٹ2ibcкT􇜼PSw_\+狣M<+tQMUZ]͹VtuT\dZO_1K@p-I{$̈DylNK k=9UKspdNp OQ% ]#0r"%SKĘc_@@ wS1anF{G['ݸG}u +|~&]\ٍސuubuفu3gUgai rZk`'-KxaFQ߈> endobj 38 0 obj << /Font << /F29 6 0 R /F26 5 0 R >> /ProcSet [ /PDF /Text ] >> endobj 43 0 obj << /Length 1717 /Filter /FlateDecode >> stream xX_6 =8@Ze[C{@[7Ag+1NerO?8qrÀa/LIHIq53xBb9c J8q2fb1n&Q{3rPO}^4f!ƈ`'JZɶmU+܌twY Uv䗰Vc9e'ܮ]6RMi 3J!&FǙ`>bbx ʈWwʱ[(n,uFc<@1aJ4v{zl`RvRH,{T!Of Lj Q΍B6D,E j!aQwkiJh8c% ,+r]ٖBNْRDqdl,v+g(Kc(m\WmP_~: >E]k^mvUWn [.{DרIIe65[nN0ʰOӰ+)ń"GBO0951$?xXoR}$*s)EiUm\_ u'nJV̧v-eу0s Ϻ(땝DN@"ZVʼ\>1 Qbyf3͢? T(+" ^S֗ò&L<$eYfVހ}=%,nL}5Le]ZlY^h1| 6ve]8Q[ #^=ve9W'|>=L5w_}v l $DS{cx·CJԆ`NV/O9cI'u6p fQeƔfd7Gy'!\O[>YO!sMJ*$bT9n-ɇa(g%ܼ\ݛ9'~eM7>4:͟Le+`?/l)_X"R[o Yڦ+Y q41y ƌ^x sjl3n!6WwQ/L4<Vxzg%G iJ%UzfW/J}E4 EQPLI}Ӑq<} m4:s/up2Ntg:YοCNi/RnjN9Y<  endstream endobj 42 0 obj << /Type /Page /Contents 43 0 R /Resources 41 0 R /MediaBox [0 0 595.276 841.89] /Parent 34 0 R >> endobj 41 0 obj << /Font << /F29 6 0 R /F54 11 0 R /F62 13 0 R /F26 5 0 R /F25 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 46 0 obj << /Length 1789 /Filter /FlateDecode >> stream xڽMH[@V|$.MM[49$F/=m +K$_!g(ۯLi^L9/ͫ¬ 3(WJ4rU)jWf!c돛U93kTQs."u!&@aR@)ks|J|`lgwƘ:IyQNХ҂0J! (z*j|_4 .DJߢPV+T`\HR2 ~~ֹE.ƶ? <!+@4滣\gnST 1z3\eF&?s;=h:dBjTLR=ha6M{OytMvnzB>g}Y̶* u^RYUEנaQeumv«(\<a 'yj 1B(S:p:q [@%UiwL.kONvD=!ӕfžJibasL=bߩ9 i͋̎^:< C|T= ,0#َ3A#@VE]?fmDLԥa\Em1FEՂwHF&P ف06)Na-t AhN0 Y/dmvuBJePZ3k&zn~ ?` G¡\נGJ0oq<:LY(M2.y[#Ha>3e \|8BBgb:/XG7[x~񶏻sGu/xL&o;b _ܽ%KN pxt#ȍrLg#~zCVmV#͗1yv|˼&P*2m\($\ɂ)Q`.Ui¼ɥb[td rI*K3@9ˍa<%eo7'S5Os曔AAx`,@&m{r͸ ;ǐhݬkh۵* x 8`d_ fS N.e ZY 4+l2A ̞;h8Ha{QI aƙmjB~H}_f7v;a~#žd^ )/Jp_s`0<84$/Y†fKUg_PKqTD)"|ACWd崅=d~?u|Rb)^xj *Zdo(]Hl N6 ]~c${Z'h3E:2q j&ݠvb.zװ_KS 1W 5kO-GBa)~b @C%E R[ALM_)B̆p%)9 !,˻U^mau]S̄Hzտ,6 endstream endobj 45 0 obj << /Type /Page /Contents 46 0 R /Resources 44 0 R /MediaBox [0 0 595.276 841.89] /Parent 34 0 R >> endobj 44 0 obj << /Font << /F29 6 0 R /F54 11 0 R /F62 13 0 R /F26 5 0 R /F25 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 49 0 obj << /Length 1687 /Filter /FlateDecode >> stream xڭWMs6W)9ħovu⦍մ3NKPBRv_ҢL'"bx:?z96"4LGetc(l28'uiox3[Smm_o:<-hK">nL%`ͤHHI"wwqvJxIfL L!)vje|"81E84(T: suB, oCFe"C1I%&],1ܫ; Fk)7LE3?7y4GD$qS,Q$} MF3 U!4m2aa`%!Si}Ɛ:20R)AˊQH2q|\TU܏MzaM5?T]X6Sug,LrŠd6PjhJ;g"!!lv:DMS$?sNWOuQΨ& 'C/!eR @ݵ2mRxnm/N.e]mk-W-K Ecڌs㫼!}䩭+7[ۭ5x"`!w@Jmt6w$uH`' PH@ _L nbCxlzqopף_  ՌXCI$`_r-%fFKE{- D\|q)!Y7g409!ɢb]-K7 k);ݮn ݊`~]EBqk@k7un uM(xikk>\@ҏ?]d<4hR@AG5t˫]]wYdu=)VU qlIe b`'J #B!¡(ăUH< ?버Hc6ƚn?ܸJPrʘ;{s=wT }|c$a:u7$5| iTv/La?Fw LRHGwbCʲD==`C _BO endstream endobj 48 0 obj << /Type /Page /Contents 49 0 R /Resources 47 0 R /MediaBox [0 0 595.276 841.89] /Parent 34 0 R >> endobj 47 0 obj << /Font << /F26 5 0 R /F25 4 0 R /F34 12 0 R /F15 14 0 R /F44 50 0 R /F45 51 0 R /F43 23 0 R /F29 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 52 0 obj [674.9 547.7 559.1 642.5 589 600.7 607.7 725.7 445.6 511.6 660.9 401.6 1093.7 769.7 612.5 642.5 570.7 579.9 584.5 476.8 737.3 625 893.2 697.9] endobj 53 0 obj [871.7 778.7 672.4 827.9 872.8 460.7 580.4 896 722.6 1020.4 843.3 806.2 673.6 835.7 800.2 646.2 618.6 718.8 618.8 1002.4 873.9 615.8 720 413.2 413.2 413.2 1062.5 1062.5 434 564.4 454.5 460.2 546.7 492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7] endobj 54 0 obj [619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2 431.6 675.4 571.4 826.4 647.8] endobj 55 0 obj [272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1 441.3 461.2 353.6 557.3 473.4 699.9 556.4 477.4] endobj 56 0 obj [827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3] endobj 57 0 obj [514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] endobj 58 0 obj [380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272] endobj 60 0 obj [250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 832 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444] endobj 61 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8] endobj 62 0 obj [333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500] endobj 63 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 64 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500] endobj 65 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 66 0 obj << /Length1 1459 /Length2 6676 /Length3 0 /Length 7657 /Filter /FlateDecode >> stream xڍwT}?)!"T@z%Ur#An%EDIAn<9>q c@% AH98 a'zRc( C%C c:e0먃4]A1IAqI (`6&Er(!(=[G x8p30ꌭ; \ Rtww;(;Yn>; cЇ(7 d.)`ŸQPV@hl+` 4zH(/g ( t%!3 0'(@OU[6Nh69[TX!(@Ü~aJ=f ǠI CA!s#[mlqE0W:;( @]P=WCO$Q@l00[( v0(W) l` j;;V K~}de o#iۂu(%/wCJs^gD+Vg_G!$lY/7#Z:Z ;`-Ǎ));؃h&u+ :M"Jܔ2n&Õ)ے)nonͣkYO s]'Oic93ڇ}q/Z#GF /lĸ!sʹ͒ aysGٸ`];l?p2̓wOTzA 6BQ_(Oev?NZIE]uvA RU}tS! G8v7R 8 /7l-qKn&'/5|;e4T')6&xyojb9/s,v>4>X*.n ><FݤFP>( k^{jfnr!M/{FDHKqXz4NTm|4`p_F$/߰rBToԍ.DקD*i( ̹w˂]zŖ5N8堟ǎbe6lwΟ;69rX;S_ Yq$A7i9DzT' |;\{x3Qӣ9YKu9_[i# mR.Ix [z:ϳM}rB1+[`mO};hVB$ G%zޢ@ 9$Y.Pqt0l WTrF-9}sSlVDd#h",ܕvmwma6,刑0a)fk9НWZKR}熈!M?zOE dO5dg>z",I'Xm[ bP'eҹs ) 2 "{W2,Q<*-xުkMT}~Qg3_+MW~ѭ;b:i1xb/|A[Utb~Aqa=N[q6?pysI=N5mz/GM]dK "FENRjxҭCVאpJ}zHa^(/uܩsΩjIw|sR$7H‰b_LD=lGl2w$4s= ?\rR?$NR"L@t*55uwhǴ5%W/tBN ՙ×]PsttF"Xmǜ Pi0[Ș6f$(_"+;qm㓪W{QW.[1OwgZ)D՞ [5oR%yВ+=ڍ|MS8?q*|IebnY ^od6#|!HL70=lQZ'6mk$ eCtRzh+lWHhxzѭ[Y#öcEH+R--1^+6I -'/.8xNŘ̾5(,OJo,?bG9YwJfaY磀7Fvk[2}Haԕ6OXS ˀ$0h"y*^tn%SƧ wɐPc0bɧJ)['4]"?Ŕu*q8sf 1s˰t'v TI뫖}W&eQfu۱2F"a={,uv%BLIw$rˡrQp3;x;QmP_(]yJ:2Ve#z;Oe3эM|w_};Ӈ"ZP6r?VTf؎) $~9lBp s$ Sa0YbBMIBE{8cjhL/igO /Q/g ?fA "/(do¬4?_:F6؏r ߘ`J\y;a&6L6ǐ}jH*_eq98LRec6ٲZ.-1,c> |ȬW$l Ỵj %XeˡkfjG*~ u6XY0腶B[dEM\ti-ѭ@Eհ J8weN[fjVi\}F7*]F]G68\RD˥dNP`i\(AK2I Usj,]<(<ڿ %Ο> dZK$O_8ׇ97^|[^(Al}ӨSr$~b$z4.mR>vRߒ2] )򧹻uW{h|l*;غ/^DRі(?Bp 本soML饸攓L'2~nҳ4٣(nA˥>\6(;R,  .5F{"K]c*^Q#W t{ύeL\.j5Jy6< ~X7o{jqsf㭆Lo`qXy9 `KѲG C]PˍnSdұ8g~<^ ?c@{HO9oֽf6C*O$HGFimU[/ ߖqU{L̵,-UPx:7|"ek;S Qk=oYSznVE+3Jڥpry%d>Ӟ eZKղ|+F &$NٽN{ꁟ̕ɊSz:g-^x>ʌ]Kc)܆QnK A=U HUDOo7"&g>P)lz ^}]eu P.m3f!bHv@ >]OLݥ~>es$7 "m.%r'}P@IWDˬafwENO}Q❍ǻ3q9>dWfL| nFr / _ĕ]WK61͐}MCp3'MNS~7[J CqcP±F(m}|t1>UJ"_mS/ *q3=`"q}QJ$X?]-ڻ5P}odPjPrϧ6=V9T$l|–nIE+2WTɕzC|s<-(d<,ޖ~1+G8(!,L:'rD;I8HU;7ZϿ9Zh#i@Gt/>['Zߪ[^O0ܟs\iI&v/]eՔ휂*?[s 89u<+$X,6E('=z`~A"d &sVBӷd)>Um*:C|-/>jj܌+&SWjO:>d+FUEo4pI= 2(&>p<Ը]U-mS+8pB!p7sB4p֦JiY?g'=O@u3cVJ8]itօdH$qv chg<#"J&vZj[}"0^BV]dqC|՗hP6gbɍ]xNI]E҂zm٨P\-t 31-]I|{vEsFrKCgF51Ů^?8ҲE?|XqL-2g5ȚY{f1twC]sd yOIK ٷmhz hϗ6sċ'Z=ՙDX}W)[|찝Å]ⴉRڔ4ڤ1&lr!Sh`/~dst0TfCF1ߙ[AЭkIHXʕ1>˜މsj.WsF^:ݾʒ%88ܸD`t;ɧrlhxN%CAB\[Dd$ZyDYךk? m7hH(/ DXTb`Ow2c։HR.L # 8Y*Qk<^9ǁǦEݜW+.,3 Cou n:%{frh[{1ZxI#$c n}茝ETbJ2\F1oş›L#g!hЦȺC]y7 mE>u9H_`^ !>,a4HK񌷪z+E8A{+~g% Z2dX/31 JD)+$|gj'g_" ?R 3}m)sj?C蘖/󭢤ͭ/Nej5"ewXu`:zg?e N掌^ wg9鸨|{ =`k#q3ZVoȕ@j؈ S9k_Mߛ$+['O:/&w_9{_ǯ]'{E:V=YXujO mKgۘMVTn]mkF;%d쥃koǂ\ݩ<2S3o3 ֖{A8`] FܳF슦DP( |S dsFS٨9dC0>^z[ OpCxxkyq䱮~1enfSmvDҐ~|R7 Ǭ%(% 2<>;!TAJ{EmoN>ᬷhEKߔV] ߝ8W"ds9L"ܯC\Jdy^,&Ǻ7 ~rzبMx}}~ˬ4$ ?Eq[#u֞xHkvB&^ZOOWQ5P,p񸔔2XkWhɈXUm0H:}I#DOuRgaBjmS endstream endobj 67 0 obj << /Type /FontDescriptor /FontName /WXPBKA+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/D/L/x/y) /FontFile 66 0 R >> endobj 68 0 obj << /Length1 1520 /Length2 8424 /Length3 0 /Length 9438 /Filter /FlateDecode >> stream xڍtT_.]Jt %CtHt C 5ttwJH )H}]5k콟y~aQbp09@.aō Ac18@` ! }2 #PPty@~a0Ko0@p`,iGOg5q&03($$G:@ `b#drC!p($j ; srs]8ĘP5@qvX~S!Qbh[C] h9XA \S\ag-e#'XO9+w!(d`yBaVK&@0@c> ?8: '=2 wp5,!0 @!{0wߖ%fa# Q gx'l{mOGAo#_oGG# /rή_O X@p9 bgQ~@?+GY8EcbSvjǯ`*H݌"\TrG@JI4em f$M0d\:UHmZ)J˄G )"K3ɢ>6eݳ jȵPf6I?My4 g,3+>(@0%/熢 ` ><4~I"/ ɬj3`t3T.5N*ANX 1{!qX$X6驖ujV1m Zl[.IJ*-]ji{n;s2I] E)Lj:?PuxF3sqZoRt,hF%A| j:L'5Sg^sPV=0GL~)f#0Iڧ"J'yv1NYcP,$9_n60'Ǹ#pBt?&۫ ! f2Tqx,W{MRIwI-(4 UuAkؤ[ ;hL=YoJKӪPе ޟůﬓܴ&shs,(I:*ݱ-a8̂ll!4%!LwuͥDzhd ٧\+ggXHs`j*5CnT m;2O$lw1O .2Zg>ٞT"cՉ9Dc\\XX[0K7Ft800WȏgNod ܅,~o>fi!"e0\TCd!F--j;+u !]T8Ez+N! >F֣%m#J4ş-J#;Sun$%<#1-sxFXd/}P+1Mΰ>47S2,تBCm&ev2:7˦7")9oP< E uZCxAYI|^7z.RFthJ_k6DP07 vG>rڊaF]U'f+)^/g]Y'2wqvd/&\5xp+lh׳\kJvi[Sn=/+eWdp`)0mf5k7FdO`<B]ŢzS)Bg7DoaE,(|9F˘CgS!Yۅ9lq ez1 ػ{< IH@HYX7scxQ) p#3;uzXT>_4Ȏ89u%I{jbKCfW ʙ|՟ye*@j3SHe]|=xA˩;mǶ-{dcBR!_xj6+cT:=%36mSCTY J|=LZj#m vR$=t /vJ(OG^6{#>6& ¢,PKdaJ3O _I{Hz=Ezp"p>oT=gȊY,,u[j&*˕}m8Ƌ"{JvǍrzQ?'9V6s>[hz$GiPt\&yx4u[{:>+i8ONm@/&$|#֩G^sX˸KJO¡qFph{JӎfrU"6 ϛp8%1LXotX)۾j`|e.hLzvƣ62shs%~l w#-\+䈫|DzPpbc`ԉ_H-Gȗ(<79PXmf?5"zb {i/@arGr_:txB_{ދC}?0@ g*At/Hdm^t.PGkeQ*TB~%|7[Vb"_8U}f{6y3%)wr?Mb)L_}uűJe7vg,Ϙ<#eRN[焭zxw:TU$]\ߙ>5PFi?Y+pÀFcz,oJ;Q~оy(|"L1r1=k\*/Tm( 6# B!_~rVXvFN)4㗣xNYݳ7!xضfevbCEPfY)ret "#2"~OĐ[49S%>SY^[O%rgo<2шoY`X{ZI!mK<+%]{ 1|WI^}S[Nrsc,Qw V6E0jc:HENI @C +mF78G|&4E:M3pWNwM%>!/IVaټ..'eFiSogbRMT.}6p1K'K壘 Cz0$w7H&[$~ 6R>z - ?FGbbr[8c -os.%= hnkѾ%jh%]U{X[?;ZuyB,YOwJR7(?SbfVN޼/[(W{ns=!$E7C17a*2e }[,ZxVZbИce}%1'HD6BD݃w"7_Tɻ {B('Z.N m_6˰]]A3P1 T )s6̚IiAj|IJUCO5w  aI׸IB@6b`ٮ9ȅKg%J5kNlƥ^2Xu:EQGdxMGxNŚ:π]ʜc.4;^B*,Fᔳ½(Yu7ox 謑yTޮN>ik&$V"jMdutͥH6*g6pVEe}I9+z K;Ѳc4v`_DBK3䭎Zӊ"6v*^=ѧF_Gk]'eDV'Nӡoj\˶'/Ch,W~NhE?*2x6dEdlT(K"$.`?m}J[B6+ M4C;y"Sǚ<99Rػ7Ϧנ񴲩:j̗"QK{߉w 欮0FZ5y;/ь 'l1Q}G$6K*a&qڟ ui͏ғvbh,اۥM}C7 z bט u9=#V)\{7({, ԟmlǛzc f'O/_˧oU ?Q}vzտDMq6fnoOH],VkG޶}s@6 X %W=< ΊÙ/Cv>`1k~B C툢76FdU8=AhI1&vh\@Lf#[Xu><ˎDOy&"ar$R73q5v#ʼn푵 2{4"F'*}h*^gUSilkQM1NhhlgIkdFy6[(3qﬥo'%sJkƚx<[$%o]g({dwwyȜ㎏޶;6 hUwEg9=Lj|{өi(%-}@f*%Z]Ahh.fFڂƒh#(I\ݶbbZ`#[gyZrX S zȍOm7@*c> <I*%Dj.(Xy,-iFSI("# v͓BeUt\6鯹_ rQ.$"ߝOeH S6˚cz&"(u9Ei'G !|O ]Kwݒ52<Ŧ!E9xQ:G)a rlI{ @VBBڧ/-p({g&L`AVd0mYrkuz{u~kf)sb, L jޕa$7b{iAV7#Rލ-bٯ[0mZU3h86y8_7mb1?оcUhD6M*6AX)8fκĝ&jɡ>3<vB_|hi/"<8Ē=% 49hdjb6Hګ'u =1 - uËBxyz3dYnBG+,nym`-3 M{̡p30TԦ=ej+u~򓳴QB)}C {s6LjH^6r Qt[ԹOb(`MjyZ([͟Ղ^q>-c&sT}u&ީ ;?l#> :lpx&K(ivڐR1]BD IG}z ovO.f,A>;6J)- 4,P XV=AN-QH1̭QIrQ0,tDrEH$PZn0E|-cO*O10~:i$*H>pǓ*@`b%-ς=>CdH^ J$VyW;t|~~3#Eޟ9v7IJM;g=D51=%ʍ̻9Y['FKQ> B;|vbbL*Kkp:5yo҈~ [_f :Y{_`xkqgld endstream endobj 69 0 obj << /Type /FontDescriptor /FontName /KPHWYJ+CMMI12 /Flags 4 /FontBBox [-31 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/D/L/T/X/comma/l/x/y) /FontFile 68 0 R >> endobj 70 0 obj << /Length1 1466 /Length2 7127 /Length3 0 /Length 8111 /Filter /FlateDecode >> stream xڍtTk/( R3t7C033Ђ-H# %HIw Ht)z{޻ֽkϳ{ eh>?P. @A"}@!% !h ps QI$%vDH!@B]8PN^.Pp $@ ;b*B!=G{+-$) qtGr<h[#+ І8 '"\Ph Q8 p+& 0zꚀNpg?'_ѿ!!P( B m8!X@_W&A8@0; _\.'++D_i0)H+ѯ.p(ڽL@%X#0_ `nNH\]/   pgj++ ƀ"?"W;vqoÿ%"C@+ IOvnG  0bs2 B:x{jj*j<Ǧ`j  Aa@ swoWo#Q/Zp2܀Fa pC}3w ~~3nhZh0ˁoW#UւnmUGC0례P$Gp Cg@uP_/& /fW3?&+fѿKc} (دm@\\ ^DB`$ ?0k {;@BcB̾k ѯ1K T%P _@? F-% L=PiT*خ:JouDn꙱ ȫ'n x̹.]Y珇>_kXjOX6,V'ؓ >w^%+2Ktc0E~O( {Y9q,Ҭ8SQp{ѪOU䈖3g1&h%,,E;sxۋ} w#4W؟H1* W.ݺ)rJ'RPzO)/q .36h%/}r.$$3yMLk47:kd{j[^|oPA/.jo xE~ $>mTH{fw:Hm 44)ei|`bCYNrm<[pҦRІZ tqi^X %A8;$ǨTLc!ݧ|ĀTkEt3ưHWNF&'Տ8a 2Q!OsxrSKč!P%aKa+/؟Ġ-O?='t`pѡaeV=HK7;QQmv~ŻsG%0զ] ʘO$=CSx#/Erf[9W)D2#T\t,>aTuBԋ! ,c2s'2ɘFMBw(}$hn܈x8fzD^:x/͊<%ߗKg M9^0_:Ru쩫vbݚ::WMIz!MKyv5DD%}aR71N᮸dař{eT;UTo6lC=u<4_zoD>obOyb GI E6a#x{^ n$oaz=m.'xEEklns]dqu,jQQt-eܑxs>%Z<>*'pW w7taHkQU0yiEkfyx/4Nٞq(paAk 0/Q|!%4[+<76M%Jߓ[f\^ bMkvҬR_pOd;tS om,ֹin8)پAt];Vl}Q`ݭ7X݉^(UH.eY8e׏+\qݤgC\(}h˜=ڣr$K4/BVGf1vf4CjK'&ݩX,*Gj0GuDliэ 4̀KFgP57-jɦ?vC:f{)XH-/RA2Yd'W3L.(a S'тWxA.ܘ|]8z!u Ǣ)ֈ.D3;`alG#ܳDgp?t4`Ð~R]ŖpYSgOEYe~,8|3mۑN)o_N)iCޭ:uV޲Ölkհ6O7YgQ.i%0h7ҋ{ >9"qX^к`ˇ{{ut]">?ÉwErQlT;J6?b>K17n$| z?VuDԿtMP #W[G{8`05ry" t\V5To8cQ_~T۹!G_.0>SFKM5)t|-1R9e-iMSf|GHE"aV"@B % 2kiZ u)R y&K٤sdT 1ʱ"ќ魝P)ӉmTҗ})cKm6b9SLhW`S, /5iV4}ɄcИ7eduzѪP/t`̓ paͧlpj9z;oYa|n}C7cwy ?p9JwzH"%MЙr&F~١}\)`ΚnWMkTxSq~@9a}Ƿ$鈮.)ʟ}vwEirodJOx-Ո<;[9# jpZmbad>uN'*Fv` M=qBsN8|N͏|#NY%8-^舃pC(iz.8nFgo-TօtVW FC<7` {לYdGEhnoO%g8ڢ } 8N (eX]zJ pӂa< רi,1e/=\X(a:EFU-kam&7>gsiGp K,u?,E8u_,$;tT4na?4ҧERDᤡԏuNϱ#kjYLcn#U?7yuApjt:w&F1UU`8E#;A*g6&%y֒g* K`lq8ϷJi+)%Q ٹ}ඃ;#81}ti2ZJ)=J6$ S+[4+,zߟ;}*2Sw%3^5T:bBTAIBaz_HҚ۵dc,r=QcY`mm#g4[#^R}>ӝ x~| G[n/ ;m6lQp3>n_$w.cGC-(PES{I<M](oqjF7ڲ*^D.y;k9y&zDn9dԷ+\ղm N=g{w{v6Ku~O^q𒪏\T sBCyĄDԽggnXٶ|db4sV6?6Ok!=6( Yo?j?HaK+ߔ!8Y)hl $e^Jtxp[TSdcFvu^hZ󅶎}$wwsmF'iE8;3nAb/SEPC=PMw37+3޴I<;U5oY>+wܸT/v^˺Lcҹr3wݜ̆R|C#}o9nf&9`l\|O :Va `iQl늿pU(rnPV%˧:)-!Ih*%p'Xfp2s)[$nXwpY7ש>dZpP,a; ;&RT)Eδl `{/@v0Ta6N^됉,=WxaidڣK8oEq-=b[GJ}x=_ )YEWٛ J;wRRxx# p l" ˯yp&-gY;3o#h~~,QgWE=%o'5YI<DU #g-՜$ɧz3g&}Te/;XdY VSc4DH` llf$;A7_X3ن܄ 4mxʦ vQ8-[ qxEN(n]dE7-,d6l8y|o]ܗbգZ?UpRI{PջYimf*9:SS' h6*θ:P+-v|k\K+?ʀ=VsErV_xh5wdDϋ̈reYHK+wxƇVaPuӤ:y?5 wNlׁ֧Ŗ-  M97`Ӟ>;T£;} Vc^W=G`{ '/S.&W)8Ktl(k>I h6Zܙ Gꖌ ;:Riw%Jw mRI9%Y(*icXX:Q>*PU$~P A?~w¼o;U|cNg-Ñ*V>oP!oFg uma9v2G Pi szob(RpnxiaÀ\#v+&@[޸h!;}X{ŰڤĴ4>Azli 3rlQmn~҉1Oًrj^ğy[hE*|=z|] N/cQBב%Y h5 6h-(%ک}E|{y@+jHm/u'CĽ=<,G* 5|KqH3=%64̭hʺ#P7wmcamu=>\ܮJ0P ~ *α}5t.ʚ> endobj 72 0 obj << /Length1 1481 /Length2 7276 /Length3 0 /Length 8276 /Filter /FlateDecode >> stream xڍTk6L t ]Cwww 0C  H tH# H4HIJ79yk}ߚy]}LCM"9ҪNNnvNN., P weA\ݠN0 v Su nO/ ;U ZTJN0Pjc G+ђ gtB-0*n qDh vh;YB!p`Ý88<==nN6bLO(qz@?ر[5  PK U؟`?b_ٿ AaN`7f:@r*p/8+ vpsB=P"w`& =7KW3܍ "ǯ2[YI;9:B`p7_@]!k3Y{'/` YY"a̡ Ce A@^N~n.U^ eF0uvrX#H@C}op : wz98!/+'?!/|RRN^_6WjOAE,Z&PsBh`G&y~W!9wnu+!ew8b-TP}ȟUVXA׫#Cf8&Xi@ᖶ,g8@a '7/"|G|U!V{0dCfdkx`WW7B ! [v@pX;b ?jp@ 8p\CKwWWB7@ XSN!v5!Ul#"\l#q9Rn]EZ:o36j6Sg4SHRO\{4||(neӣ cI',W mUkXUBL)o=%eYu{cN,~Ydwo3:H#x. '+G)ÃQsS䱛k!O d<ΔXѣ^9j@қLŐ:*>\Ls͡?jONHQUpJd??Vh夬t.Rj_@B}tbjE.[87xfƸEtMbeATͮѝx?3iԍ>Xe[dLsWMYZ9Yf;zRnm E]+so#_73ڿvΈo>wDLq~`M7O1FK#7P]uNz ˆ; ~W0OF= |4bMG$)2A4Gg=OfZ5%@ϘxcØ ŅhjB?%#H*ZS}cHRK2n>wy,>fݦwʘnPsB߇D?\nsԃ, {.dpCd;Cy@0{&(Rc4!U.Oy,7‹re6~?|\4ֿJuY^٤f'ܓIژG(eyNI7琗I~;(&#"{R蚫-_ŋUaoǑ]IgZ(:;ᴮwtޞNT1g)>Pvz^oTk֠WBI/q1& k #^&=eeW2qCD#ڛԛnHnVfH}j6.O/ \w?VZ=F9ϛ`), j;$!*MBLdi]ˌm!m)٤gUUCkIF4ܯկWvQA#^{KXA;H<*K+oS6yƒyؼި+RRH۝*@Josl~zVDNJS0Ť]G OypIEX)/1tuHҚQ{0EBKᖅVr5]l+gNl؅P3v]HEai/x%ͭȘItJi%jy+7؟f{QR Y#9⨩I t)$7>. /j_P팳!R2[Yg͔$u&6gb4s`b>P|FGN]u2dZ}@Dŭ-DyG垅k[xMLpIŢ1Rꙕ*QW4j:K'lgT%ȽXM*@JkqG89k0T@$7HnE4] =+9Ə5Wu/!{Lwq'wX6J7CP8uuIPzC)ٛ%Maġȼ׃n! %X^"h={H0AU%s$T>w;Rjc5꣋tME 9]%DM2HnヷF5_pc,nm!ڈ@ZΞI k:O3djqB㛆/"V$3ܳ'asڗ|'CZU_3&=\I~niU۔"%0%,>Vl F5'[~i\9:Jz,T@u6Çf3s{i-ܾC`%;#Y3xcVC  / o5׎ȥP[n'%237#g/,)w9fh[,Ң]lC잪jZt_ cS9DQ`{mTЖhwYuj{g bgz~cAy/F೐qBU7Oʍ;Vi"j[OG= pMnV2>d8q8wS,ۮIWt~\F>zeѺ!_p 3p֧=;0p>%1p~ηb%AIF}n`|s67h& ۞MYW H5NYφv/12!VhZZI$j|N]!$ψnrNYLc57aSiG:,U]abXUiM} 0XBsy0ʤncט8(B)>_+RKԓѰkKV L#G0KHeB7,+еbdpyvKи9 `↪PnXQؑI yv>S|4iޕasVk ]OLyߧI8Iawcr9ToӭK k:)Za2N{YAi56@_mI-SyI4٦;dm; rN*`]@5-9+WD 2޶L[GũMUc7x[ެG˓z=_"q{N0XO8ЇG5"WƣtT9s%,L ^.?׃oƦo4O8!AS-s?/ T,Vh/~Z0FZ]a=oӛe f15-2/нƘƠmF~pz6qpVPEm bYju((LzT۳ƭ˦ja$܄u OIʾ݋O6.!ڝuKÄ"֓[P֡}X.1J,*rᵀix{,Y^lNdJR); x? ՗@uqtcv8w^1N<+a̘t|,bӼU;eUF_ÁKzȔsOÑ]TzjΚ.n 4V˓D E2wC:4"5',tb}R yߝ16DIRjNnui>_y:!j_Kmm Wسp3 5W :c}O8n/H%Sς{acw6Vtb M' ֺ޿/)s![MwTsN ,ԃ"zx:bp{mKPX .2~Ǽ1tSyFNȊ_ e0/vE`d$.)}:.PҪ{CA{B/Bǔ8B8or hiT>#IB%xHJԆI-].bh(v$޿)rd-6qb}`SÌlѮ{b~hC[DLrdrf3'*9ƂQ-JzFBdce .Kp> d1%#طP~!; %_*M!E$!_ϷM1;S-:?T{p&|1p{P;7KI=d͝j}Ղј 6 ߉VI,0$?c\ϲ`^`T~L2# aEH.-h1O|O<aޡ==:8t.`SH4 :k#8d09bo,ҲlUw1qwo7b@2/ߝGX~p[ OJc+&8#H+a <Q:R&ZA5 ULk lIyIx 23jr=,]J 9^+;0.O7HmÉŕ+ sc; 0 մ^kM2zt 28{7}E>6s mn%3MMOüB"n} \)~|~G2rl1^ڟE}.:(QDY$A֑Os`>*ba^F|V^족OV:sMS<6!mN qT]Aǀ򹪾],Ysή[q}\Jʥ*A|"G\!#`S;KT+K'4 A]хvC 9w;?+yΊl][N1Wu4EBҥ$,@㫷]d2>\±b\Յ `7و8|^Sa\@uO#3`!XLeޡmw%!8fhCx?qu 6E.Ff}=O=Ap2sY1"wnev6MX_6oT,MI'u%k%wG]"XHu6~oe'SF%8A+Z5훚3:s+v/U`::M ER8+:e02[#++ %nl1Ou=g[G0{ t%b[[BnPGolm4?~KP۹m3:Қ]v^3={f˼hӦGJ/KP:ο哖p+]$mNbius hQ]spIZ~ B:h;d |M:4Zb =usއ>d0[g#4k)=~"mDsy}Ϻsبl:~Ѧ:ey=6eUs~~CQKu'C暈ҒNPZRpOO)j4y] fVotPb Y^ l l vo-A¯Gӳ,!yȺHq\>(fV΀FEX36+vS(}K[!qGC¨gxr|1U5_Vֹ[&wjX8dbgAe?R1 Q=zLp34p4_>}}ߝ.a%pBKU`fz SMlHc?`PH-9S_ˌJX;ikHFhl.e[dk]'~A|<[ @z>> 2£(-%pk}XJ 0/cټ;-٠u%Ѩ!8ɪj`l`_t44j!˔ǃbĈ} 4={ .#sPyHwfY_z5hj6cW ZNKZ3*C1U=<*oOg |iiB#bkߵ (Vin'J2pk(@1Z% 1'U!)JM+" hvJ=T{ULcS_CiJRPX`Mo #|.2=,4,7"uy}rteWȣpi҈prruz}ߺ(+ŋ mo{X'IF.@7(rdYU{:3SAʧT=7K;Y~,JY2dR$(iPMN#lAϢQ1Zƒ{&\#9ɸ،B˴xB|lDROvL4tb% %=[p hQXkP^MMKsֹ`JV&}4^4 dlc'/bSM`TJ2Ds&$e8gLFjw d endstream endobj 73 0 obj << /Type /FontDescriptor /FontName /GGWLNW+CMMI7 /Flags 4 /FontBBox [-1 -250 1171 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet (/a/e/i/m/n/x) /FontFile 72 0 R >> endobj 74 0 obj << /Length1 1452 /Length2 6860 /Length3 0 /Length 7848 /Filter /FlateDecode >> stream xڍt4kۮѢ 0 F{ `F.z'JB[D A'wZY}=ǔZHKD#dfփa `(8!d]aP4'Ecԑ# DA $w"U u[y*H E,trڡ1 `bED~`p+(E0'ZAH+8 lvh(/ Ńt`xv  Ѐ: !dQH8V0 Sᆰ0t0ğd? \_տVVH'g( aM5' EXJ:z;$ P@1r;Q<(/`nYa-tr!(_]aVkYaGXa̫JHX_sB!3 M@VuqRpstf?P'_ .1PGbԁǰ?ZVYݜ;b!p,㇣0k-8 G8D}r0U 0r|VP AQ / ès#ֿ@]]^B`,ѭ57<$S` ] YP+ ^2EN~"~3o`}B3|trnVj\X̾UC4{qgKAaӖDZiҷXySdEK\$muIt&z-UR ihi.TO+bmEβOo5g).h5$"U#IU0lo=Ꙋ{hry>Z9*|˜>wd1P'ۣ2gF%~"mORd H=t L2FXR hy7?Ny2ԿH6Ȗ |jWQz7 eʘq.lN^"8U3 %DTp"HBP-˂ރV)7{N{[n<4OP.j؏2 UjQii0R*xۓxGwEP$\|,WV)rDySވ)YWn2XBc&$k3κPGcyioy[[-^˒?a0lRE'ڈg`,,g',R(?{57]m/C!tj- qTig 8bFrv54WV!.yrۄQ5tk+SB@@"/ z5kTOe"+S2~eIrQʖ?n r>[Brj)g?7t7@b3ioe@ {*Aj4A]C]hf]XJec;XO)WlF*`kGF8՝*=-ҝ’760?- =T5q&S7ʋY&M46=Z[~mK[aUΔp_ ~WW+|/ꎝַ?=ɷ]g Ĉ{H*/'.s=؎![%Xq/Q8%4)|5e_p6Zy}4Z5g_5ќ͠ȕ}x@l+*r^HŸv˷M[hx*@zuA_Hx%89h/z 8sVx3y'"GӮ#9pLխK{^#D|DƱ;食Db~h9]&ߦںVס}ctn} dII)13ϫImx7y 7xsS×Ē'LXoÃB쥴Y`76ߊ/'={5a;'%ĵKӤ Wq7ꖭI0WtrOK՞؟VTgZT}\ͬ{H0=NOU\[id$ZIDe/.)׹eOu^yẈ/}lyK T~>)%"x\X/BXXC|Cm+|GlqE wGw"hzggƋ#G ޮa)E@هヺv^ϧ^P3.?>aLc#5ӁŗYlJt@yZ݊s1lvUu{|Һֈ)kPYP#do%$Uچ7 C4M6<06lPC; 5f=+W?ZTteAȺ~iYaW)fQ:Kmn3L /,K<ًJ}I+7ᬾzSi\:%lm>p%.ʮ{vvcϗ6,@ٛMZ-#1`B;zp0;*v:Ό:hz +G -|1c;O&gn.rū (=ٟ-%Գmm77xnl?e]sZ\:AMѐPGSGsRg.ϳ M9g4i%ڰvjL $^r\\VPt'c6JҮ/+k |]}I7Mqbg?,}":5ZR<(̢2D|V$*y ռE5(>r:NZV Ru_=&n QP~#0,  ƒE Tl} ODy⛝Uui>Pc,|wVP٥>TzPm;ylYZg(uEpcm'!mqˏKXwUJs,' [xu:ڐ QCIސ'd(%ڣo4;j@ 2bYS{ӊ'3tZ }oLB($bA- Oh[Ok/Mu_P)-u2Nn~&p@7o'&扑 1t7֕PWObOzʯKH` PxǰX%CC̢q¬%K3iʈ ^LF.ikϣ 4rɧS$Ma=T<)Rr:(0LM j87>u#ګPNZ`J GN3gВ!`Pt@XGM۬wZOs;}FoWê+2y@\%'<gYqa1&$Ū00I/+7fl?*l;,ucgdf^)zGkSny'QS<'r,$5$r8&^& 93V5ZR- |qK luۅ$%K%Gn.nbl}(PNg]fEb?X [jkARb YR"@_|1r>*ЙqR7Py>\' l?='j" $&2qª35}S&rdfqD@8+@3`>rb~ĆG'I(ƦdҞ4o5{B"!ȍ㗟[_w;H3M,,_+p'+}^CkiQ0v. h)g.9c-eT+[KC9*U{(u+qwgWߟE:ʽZJXxJ78=JQmH r8ȩ) i=r̢;k3f F' qDȹM|X6,|YBˁ6~xavya b5tZG~n C A)<OͭSkWt{?;@bPP /i{~ri}$R[TZ|>`kL:-PzdTK3R^ b1w~퀅0@{ _].Wv蕀=b=\5fEs0:K)gRQXJw&@]u@ ;̌XI*9vԳ|*]uXry6J<&2o2=ˠ5YyOqv5!Yqzx*džƒfs_`/b(jBto2 YgɘO!ofedB}hq Sxb<Nf !ByH39\3H*Wz2b*\ñt5H~)pB"lRArc A1ӸI[s`2X5W:٢K?w^|23].h?lWShЧp!/;(CEtMh ͚{Tr2A|}==~-n>hT5-<7j# &a>[n;M" 7x+oTƏ"#\Mz:wBt$)yy!9vN O0 W}^T_ϤnbDpWZx=Q?0<Sd e]p-rj ll~G=F≏;{ MJ![̯Yt *fɆn3ԑę Y=I .]RךSraA͐#hS;DZ(~F]dzr-y*CۀOk9EUT!vډ9#/gMsg_/q[.0} ه?6 :WZ 0 +.YOw"#(ӗGGl߉Bسx;(/JQ3u~TY5n36k!=]: 'D1C+d  Zױr[ȕ" %q\91H’,q{U&uM7BDO ҇ݟۖc&swwBI>L{v `It^[YQNr JEzʻQ6M DMm+@}{^kоuHNԵ]rW ϾɎ;\R{&<džEF(뇈}ީb֒6\ eH3{҉X3t]_yUw٪t0!-W~a~,eBDHw-VVQ6-ǑL`Fx^B#.G"]_2:ڑVd|n b[Y2 'brex8aꍶAqbW*7p ypЊ|pr<;QJ_ un!4{m,c T;Tѳ7'M44VFtƢhvǔS/N%Db3ݝQ_ZXi*)sGf}`#CHpsne~]bnY7 3Gd[ۤK> endobj 76 0 obj << /Length1 1583 /Length2 7413 /Length3 0 /Length 8460 /Filter /FlateDecode >> stream xڍtTj. ]"t( J C R-*]HH?9wZYkfg1)!jpO(P6@! &d3 ]prPFB@(4B0@P (&%(.@ɿH) jhaWB6e8 G JJ(:CP0!`BP^GR gW~8NE ;K0@ `dumQ $` C͇]^_ _DP` wF`^P=Gyx /G+rA@h7 乂PʕK/tUa6pgg J~*P$.:0P/6nc "@ P\Rq@<荼F_0ZآE@+@! ~>  F!vP?hbn> xDϞ Üq_mu:<Ǧ DqQ ,ߨ݀jl?е[_SpAe _;6X_Rssrmm? g_IvCB >dm (z;avN)#U уF.靠0 eC{AӿSp_{'$*! /B zDE>xl? Bp$ᯎJ  #$ڢ~to:n߈(ކI  O_DB/fC8CC#!k!"  N=}DA 0,,P~V5&;Ͷ(gvAU7'4y VW>fkBwˍ\XhOG&}vRh>ZE]wNt18CZKq `Sj>^mHt.bN_Z<ovM:׉Inu_ysR>7Jc3bֱDn \Ь<//S64KX2t~˪]6bZԜ9pv?g;G]m,0Sew[SrUxSe3J0ǰde7 Xn}!ʬi EFPErue[;Ɥ=j5E^MRb۹ze\qBb>VY{Hwc8WveOtˏHțdOxNe>|3 w M_z+N)k;Õv>YBRl}NS$š5y1`9Ͳn*mD"Ww׵MVxq'7ZUR݅KM > lIWMv/K9‘?mV|ߟNrww*3w { Q}r=+Z9u\9ceOz )3#{dpЊP! r4R[)9R2Kj%(R&Q7#KvLشwˤ M03;ў/Y|f+D{1%߂Jj^5G̜-rmBd1w^\Lap&meʙ@Omx> >B>+L(lא?"rC~\`ˋ'tT80bRvsTh\ܬ(Դ]kЎB&)%W87sd%SJ4 D 4hDTLn7P}U;ʽMQbBDІOMNnQaP 4֗i*?d-3֠"PLRk'ɬHtßQT@Ÿ<[ChTUs{|2-'X/TX`2I٭T;<k5N ǖbTGt_&9+KszHD tsV|Ubv…p+|^*!5.TuיvO/>̒ goaH2 K'sT.uy7r" NG98!٣䅥^^0{Ȝ0}'٫nSמ&-YP.+{)Lux7(Xf!"̂ 1^ 9v7L!8 a/# ؚVGHvܷ843׌٢*mԷ&MVuW ouڏk)Ȩk("tϝftF5OWJ|O .L~8Ͱ 2a~via@}Թ)GcX٧bC8ChZ}ar0VjJ$hD {5*4_6q['s*c $ L 5ʹeĬd*AG1y%%TĢ{|qI*E-[.vEU؍V%=|L̛QKn/4Y 9XE(j_YF^&VpY^E;ٱMC*HwREm(&uU Do_-;wJ1XraЍ"330l֎%x߾y."xVj}[X)!ZnDZ!AEL_E<-; WEƮ\ Vzg)2i~OͬxX?9Pլ;xEIAU=ņt*sEadJikn՟X*z7ryVJ͓ůͰ.iY~#Z|7gf4jՐM͸l)hA!NMR84kLR^$n9 Wv>8>ha)}EDCqrZ̆랃fF j@19Yq*A)ǶۚwgP=CRњ9 x bQ8teBxkK,Ϝ9wUm[=oq^7" :u"xƮv bJ}!@UP9ͥ"ژ<H>ܴJ3J9`WU oߡ%=$V^Lx!.^g50ϊSU3o3v1J̽v,0'IdA0P4 G峯p! RI{jkvZvW[8zc~?P4R|kOIV]'In"K-qWUzx} J6Xtwى0,*C8yiN>J{ʭWVS|nlRwXoF.4j0Hm&7NƗpWWQv{u-n3o c;ʞWP : _(Vn.T| EO↱-y%|O]^h`M`{l2ijE 1+C8$5S:k4W5 [^e+n,$:uwUM{Dv;I@m[zğjŒI1!0J p˱&eH`qi,\%Uܭ4\𸱯a1O1#k=rRv><2UIj$wm]`f)-*O/9co'x7QJ3NFYxFDiYz5V3V>Yđߩx2 |A}HɘYu`[v !8CsRPk;Cug'/zc\v' sΎaoK!,BFB∦2Ɣ`eu/]m>qw/ b_r֎dcx=1r(P.+|XDJKxrJvi^|#&[ABrcK֜-NײAdۮ1\nh6z_BxS n#JO\,c3gӰ mC-_(e{|k;` n >ofttϴx{jBXI^,(;G2v|Ә,O.ʲa#[=$4ٺȣgyDw}'"a. y/ AV#.6+c»=| .֪KŶ/|r{J8rof_8~Hjj @,=vSyDYNrZH Rq{+*`DN*̐<U>^W:iP[oC/$i%!͍|{'݀/iG~O>1`.ӇL9fg^܂?cR,U˞s~zS뮹c{;_|(SfO3{ g jN6ʰ!9RGN)&^do6쟿>YN(aw;`︧z':8f"VT:⾏W' a_q)S`x?ùs?i3r9FԋēAQMIwjGʆ0]zxeuy.Rؒ0r vxn,6Ϛե9@AcBb:IY[T3;$pk%=WS̤=﷜爴je*k kbjH=f|h ~(ģbGw 51Փ'IǦttU7~b.e"INt9( i96 T+ٱJ=1ejnO>!(g䳺$NLN8M`~U[rb`#a%sQQ md?=J"= 9 nHaޓ@ع&n5|[]7n3G OpT™nr.BC/Ʉ ?<.2Q`'Jx;iޕmh5@gb h k&TU!G(#ɶf-Hء8Z^\t>a#Iej)9CF)඲ d| |sB噛][ƙq*51Y7l2ԷW )sfQb>0PoNjj$-RWiט_kyƞ% s]-'L 8=N{r-g2x?N8.z`º?7.ܒiq-E^Yd_t>= f`pJ՛wQNHrxeEpZ;+s?5Ki{zb+컱&?FŤM.%$~ֶ|}k9"I}PҢ@+)Sap0fPjz+8eQGUWξ[-aW+;JԖ3bl;oOxĽmvHd'u#z<P뮩(z+mlTϼU:^,М0^Aa}Lܞ "gSc)bѨQ𚯨Ltѭ0cgD6٫"up)̴xyY l&83Q4j\*kyb Tܛe)ǢvpMxnR>V3{8V˲OkK0z:e ep">*gi-s7"|~t4@ Bn@0I%;]E@p]]L!.+PYqWSFnxXMYO깜/`p(* `_(q̢̒5 sH7,d2acz7b(zŗ?ywFf(&nفHֈS+cs ]~{VW.q}}P_y\84QkyUZG");BR( xH۲a4//Ⱥ%MD->@L'gq#^8d{"q^ B9[YZ"q  UZ}MɲΚm|λ EvzCsmF2{}Us8'7ԻTBIRRACMWlNìWh՚jV;=!@|Voꃪژ~\|Ϊ\3ZSď֎<q FD1څDMmgcxPw^HXh[ uIKi/sreYǎgRɽPrcM )Ǚ>XCJ @QlcסmFz?;AߨJ|`֐M~s+'bSRvB;HK;QO3+ͅtDͷ0*۞0̕K5OR5Qzujŏi&n? K2_'=~:.HԛКdDh-bGWñ;\jl!"Q8\x޿oԞД٣2bÍCLGCn ~K endstream endobj 77 0 obj << /Type /FontDescriptor /FontName /MGCKON+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/bracketleft/bracketright/equal/five/one/parenleft/parenright/plus/three/two/zero) /FontFile 76 0 R >> endobj 78 0 obj << /Length1 1502 /Length2 6491 /Length3 0 /Length 7499 /Filter /FlateDecode >> stream xڍx4o߾V͢6"GHԬUwR{5j+v5vz`O(a( B8@=# m;Y@J'g"W0A~0Tо;0#Bb`lqu0@U0񄹣Q('Gi0ǬpPBAh)<̹ i+r!pr4A<|0ѿ1'( /Ygc?w//!(pЀ @{zApA{ A{'` |0$o_-7TWC_FEE/ _H/)@ 1( yuB?G$@7 %GƆ H ( `@!,{G^p/;ovx`̆3!v5hh0fFND"qJ uЇ!οpD~;( lуbeLPd t9Bb'؏J̪$p 8"=~6ڃ=Qsh9 IJH'w@  h;f?l鉙_:pu@P4""F0rGLEo(si6~ڄCPlYt _t<4J>.'(iT<#fb/ɀג+lx=m5H!c+2zŠQ]S#w1KMau[;XIVD<ƍ/oREOIgu%}rӜc 'R8NZǡ/n%~:YLjEutqR U).wKN\w]*tjN;}%VlӲi w{*(;ёN5Cz#{Gƙ vy]\6eƀ+7T8{"s@ѠFcH0a]ﮄQMzY)7.sk>z4u٤DGn[n9ŝw:BܛtF>F"_,j/cN±%@gPެQOR \ }@F\xls@Ԙ 󇣻kYY+iC[ArQB\J~+5'[C%Rj\t״/D\dhvTOK?,#U.Ҭb%'g9=929il aB%bÓju{Xv#|ʹ /,"у,1EވYƫUY mlO(&2fH]A#It°9P?gu o}4_e[mM!=GS2ŒmK ?L4v%26{uIK[et%ՠ.M<0 HqIFXW.u5kx:{wS1.k%]QYr [D+Vgx[8rNꪈ|') ,7'1NUiĿ{1ӷ=#Xutk=B9T[Xq\PM⫸TfөKjp0-G3*E<]jl\"C:bNڞ=:us="c1}[73:o:T_${L7ۤՎwԎ_[bFt ?B;|\hA< 0Gc={a@=rΛ7c7$z;d\4g,yuRK:Lڛ}Ւ}Mz'h`-IKLq}S.&Z'.-wA5/h<+k=mG ڹY/Aw@gqyq*3"e;E>C`M^w}ǯ=twh y Ыc=dCI&0d{X4ћ37*8xĚjG.Kc0xA||T2yxsX' ׊.  ?Mse 23/g ~p'oZ.d W.,ݽZv1{Soa!QH1([Ͱc.uܱ!ߖ-;=G2"@ "WHv 5~o?w<!荺)T#K{maRO>4 u~Z4:|~iĶI얇~hDU\6L^~&*[k s|ڧ^"&>'w;5wd]*D)O'W7d2 |T-e`h s[b}t!Okn_45+W[ %+ԟ;MKJt!zh-|sږLTHdgŬ͵; 7=^,Zie*LzHδQojuƧ%I ]vj?9 =Ucc(o6e)͇THMmvR mU#+5ޡr< 1-ssI M=n dY߸Aʏo]M*o=xJ3tY 8Wo[_:.UA:F,Ѩ`"}@/+a&?"EB{r Hoai8nͫrTiUH~\n;Y&C%Ym;K ׸u-_ϔ%-~b]q(l./7"{Z=Q,ۜÎaR?3J@aj7IJuaq;C"d>stYԦWvWWvkjj}cSy5yYw'',p)Y1˥Ԃ2xtKRHDlSÿ*pӊ;ՙvj ;z~;W.[! SqreBnt\pCG.ģϛzTi铰.V=TW@-T[h͙~C>'Ue&3jUMZF"#*&,:r Cv+dMn 8/vS cRϟ.[3كRVZ| m,ƳH=eW-}hLF'+eC>/"5gY\-= AoR URzu$[g ~>]iu q^腚ӊ krѷ Qq5 f%r3Ht?-qРKW$_G _w[X`5}7DF*,jвf,{:m*YWA,dt@f r'"W)e0kE;EnvmQW'l}ZvZA ެx)GĐr\.iݰVtGs%̛eNGRrD<#He =qPWsעv!j_oQw5)y1^B5C*L%Kuk8<́ZOEv_w !N" έ`ݍ乭3Et-#,O~ )>gf"*}O&rP)E1IH#iEo7½8/4Hl?dZ ◤6|]I+7?5Qp|y :~sV>>\4cwyhNm4f2=B$$Yo)+fASUA'!3IY׍GƊ|@/Dyԓڱy7xfK?Rns'[aݩ ]Wcn'ykbӬn˭q om+ W{OT36 ]&&?dܴx>[}c)v\(hŽwD~fkI~W&RQS/r&_/zFkm {{-3` 5{G4=mlLeKhћ>"7,'}MmKp4vitٚm~_6SoJezVgKy=t\U՗`NSo $h#vQcoy#gk$2>C|9K.[*{"17l.FrdQ֟|C1)3,y 5V0vjQܕGȊOGM ~j!)&Oc8sV SV)bȹʨP⹪q(3Tf'Xx‚u;@Y;WD81p()o ٧)gTsaQue_H/:heBۿ-Ǒ#/FGZ -|vJ%X)fϣ&pC4,z3_#]\f}ȚrrIj%J|='Q܈G[uia0ZfiٽZwPv57$2ßO",iЖ#D7C]ghtG_yW-Ej4 JR4^ee*k<1Q:aH8r?: endstream endobj 79 0 obj << /Type /FontDescriptor /FontName /IPXJHA+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet (/bar/bullet/floorleft/floorright/minus/multiply) /FontFile 78 0 R >> endobj 80 0 obj << /Length1 1525 /Length2 2571 /Length3 0 /Length 3526 /Filter /FlateDecode >> stream xڍT 8TmLICf;YOc 1gbW(G"ʒRTFȗ)|hu5us?{?-a_р{0SjF6NN8eUQbQh ?( HC0EkÈH@60d Siha2Ӵc|DlKQh#J||:?^,PX* @DS< @V$~Z2T- &88X @Wi>z @0A:H d.KSB'_=&14@dRH Bi:d`pgFeO T<%$ vJx2FAxFK[QNAT]5b lB! AG-C1˗O)? I2L*ƙ2A eB @ UQ@ !bp KIbN FB$CA 1 x>;I1r4("Ϸ!#r/clMlL\%L!@"PTVQԔUuM5 .?оC{gA!w  塑~_F 2U.ܑ)L^|'GC d2l`d>($B̀f-xdB (> Mh1Kq Hw2Da:qX?ro L+P0qq<Ea)8dF`Ȓf %. 4jjbh -C\q\ iT0 AĘ +:aSG`h//}e@0$zav_YK DG[U8#&;^9Dͨuon[#⵶^=t[5SyΝT(DSU9?v1ӑ6{wGbBiwLZqR_S:@3پpZ&s+%Ml:_U4]6i'͢UM?)*VnqrЈHUxnm{M-wEا }|߷۝"]ϜȪDXj]X(λ^NDgS3,+f8Ņ2!CkS)Dٜls1:BMH3irvt؎Be갧jf@n7"x|FjR߇"ktUdrF]Sk>J' u .;JV[s6ݎZ-ab>c[ē}|'R| fy1q۵ 'jk3I_.F{ufzN c([:KӃŌ-JUNdqiyWgQYNQrb2?K=3n7Do,Ԝ>vH`㹏󖹛mQ*欼وdXsFjEQ#SD4Ψ!I jY6MV>HUwSWob(f3 #!}'TؤNI3;zuvPTZ«ʤ[>6,`+vdM7Mz$>.LZqRݍ25?Pr"~a`MxܪWlVotD,3A%xOIz|wϚ-Ⱥ_\}Ǜ5gz"RGFm*+H8eE;5#;)֝D޴J?Z4+>*9gqk2mӷQHe֚U;=2{zoL|Cwu"({MDf O$;})l|x^/=kہ]zMZķ.#H[N;+ѵJw?TkM_X@QG ҁq= l͑FM䊳9>씸7̖T0Ϝ9593oXݻ[6iW?n!ͼ# =p.%Q2U .'E6屪/~1vrShg{y4C>&bU]O}]=ʟJ}Hn;ƫr#`N[LRg8,2:52~̺pI&✊3Ta>㩻;* = 9ٙD7` z~8ޑEzf#4Zfh~tD56$Hc}w߀G5fhZy9+Z+qoaOb-:T7l endstream endobj 81 0 obj << /Type /FontDescriptor /FontName /NYEMEW+CMTT12 /Flags 4 /FontBBox [-1 -234 524 695] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/c/d/e/f/i/l/p/s/t/u) /FontFile 80 0 R >> endobj 82 0 obj << /Length1 1612 /Length2 15460 /Length3 0 /Length 16297 /Filter /FlateDecode >> stream xڭctg_-mumIǶm۶m۶ms3{s{j͚Uc)80sḓ mmhM,$$BN6NƜUc#!Msw075s++RPQQhnj blekgmlz1`bne S(ČmrV)sCcGc  ?9p n3v34E 3v6wt0w:8큓-&"d`7/oV9at2w'_7o?%IdO.cEPM;U'^_m8;9[B30i7 4?"ncb `\ f/ }#[+w 4ߔ;iDoEyoyOhQg++} Hc_V jo8N!`cWzZE݌̝ &V;/_EL = -mi=˿]6FIHN'!K?EI/QZ!(h{i30x NnͿ%3J?`Dl mE'} נB.rYe;aL k1ە6*pT}6Ms~/}HP[_xQ mvQ¥Fy^/JmjҫN+|Nw29@^?S?6Ģu!6!&#Hrrsxh4{sasD=Ojs¿Vh `+h$Ir*WEg],L1=D;н~j"aimt@6΂l5a8u+;pd޷i[` #< eym۷@4辜Q^aIG1{ S٤X}WoN"]d #5TadZdhvS(=-2-廫շTO00Ug,GW~9{Sj-b{#ƷFD~HLd%-{3ە4"g Q kĝAbx)6~({!'z}4+wwH\gdL@8'X9$f, 'ׂHވ?ϹXLVa,qiԧ 5OO]&WhgP~B ?ŢW^@Ч4bKH%Y!v$vȇQb-Ϸ]5 w~DIqGye1*cq4iu(1?3uM۲dY$U4,S&Wo38R|YqS'cݱUO1c$JR[ITٿK$:XUPQ7}ȣ=zlS Ezjl3ׇoBp.A['p=~7Bk$80Jj:~M# H8z4Sܮ7pG u~'CJQ6p )u+?˨[2q^}sYyL @=Ԅ!T(Wߢva>1Zܝ7k¶G8xOUXA?*w YNIri\2vå l"y^I(h@lfakwǃ4]Tw#U=< Z7??f» +'͇RL|E/*:P- 9B2e!ٌCFiZ>F_z)z}@bSo4B#928 Wp&fkaVufvi 2Z_c6#LK٢P7)r KX L 2?$*gR2֟Bj<".e^kf 5pm3¯??, 9%{oG0q%88 U8>>^KIvo=`Nr7|0^y?9Q#Rm4$v3 il/0d07>ES퍃(A7Ϧy6|pd皖$`> tiXă|KoG*| G4Etz~FFT:ؽ!4&O+${/]՜[-i1@3wQJuh9&j 8aK]'a_X5.}n|&: # ΰRC h$%[o%VJ:{ub2<$X8_6Kka`s&+SxG4# c_*`ޣ@qfP։-MhW %"Zyo1IUl)K @<̑qCZ}s l8i>.I('|Ƃ9؉#JfօƋ?L W]2BZ~.pA%d5EQ?9]y0I>L[c}#2i^l6ҮлUM&Ƚ+#8X@] ^4r ;lԨWePu0o?oK3~UvKuxOEZWE ٥ө u4opu}SE@DA~)WENALVX 赻tvÏ$=b_NK譊 InAا_9oc!u(Um`c4KTiO|,"1WHW# Vʑ[S%huxpA,㜱nWs F{9q2@VhH|[5B&eSOl)׊:G {` LVbaPX2ǾҨ*F8q-vs}X?ƸwO|4JZf1҂;>G'r=hBOMl0vx,/TTRGQT7b~A }W{DB_vp !,bf"mTŇ!YtT}G*'?(*/x^Z}'hLV71Lr]LaFSLU'(픇`r>h11_Dh YTWqs]ò|b.|Ъ\tfw aUi5QU}{l%wBx/f9nd94=Wsy>cMp|;Sw{.Jyw*"eݚlZ"-/ĐC͉ )B~f2 n2H2ڹQ.*GsNnX[­&!3&XOxs/o"`3A,jȆ3"|_\QlA(,ݼL>T2.hapzF9YڊF+ 2dB5YΣx}],R8,DcUc Ȭ囃q%C us_3s˱lڧRC#>'0~W#.CwytGoim-^^ 6&*dU']C g=кәRh`»a`!6mmjg}+b&Fԝ`!=j>&p}Q$!qGj!GCׇ h'cT_,%Q $ Oe%x$޻Jj^ީ%0YR.2e'{P5)y/\j@6Dه!P,ihOLm%!L[QWԒ/hUcVo)TZuٚZ0*)vYAh$ѓ p[NHĵ>Ebn= mhQIЊ몭M#R|ۨs99a˹PS޶>7Gy>@͖p8ŃSXKWjXIĀR$aIFzB`مokQ{:CZ!eRw| (XYGv$)М`T}qסH|3Q)x'y(HQӗ I*jhƹρ>J騤D@/1;PYVV.Y|Rp/ =|G/gͼ940gB_ZJl P@?rRigzO-}ez)ufV6oYR5 ޝA僁7#c:o+%6a:w iAIt¹u!>_m1qy9o$%{`w*(8b2(TU]cPFѵ \O~DGA}9Sa>GI&ӷuiDAA?xTuMf[ԩ~h\o@{{AKBt!`5tˡWKZ hXQ@W=yt^ pJ)ɘ IV3'ǰx75iwϘCADӬ\ɱQ‚`Ll֫)٩D߃+\[h͠nh"˹ȍhե "Z>`kkw`JnҞ ݯh [s.^{V܌ 2-802$7)ҫ"fkwg+ E8-M5_Kj؋E/Ā70 B>q+M/<~%q|h;^ iU p5}rs%nl:#ie3vBJ7X-GsOKz,~C'I([6~Njq2AALٮci*D͚c]ck1P~& XԷP{ƯTU.~F4yY3a!#T , |W@ql'Jm JQC )ʨl*FWjgY/([Gޤ3A3)ņtB0~,LtA+Gpt~o0o\ۜ\vY(j+6Z8$ЉK tIO<_G`1GXiq\ T{ =~QD.esӈƤP3ž1K,p׳~]c%iKur뮱48Ɔrea"Կ"crye񝽩 礨ǝHQ`@ߎZa !UM8^ElGI@(Ӣ SVo;8KK NzۮrgKBot_;ݝ0MKq];ɠO B\p,}8_v߃]&{N$\YnO9ufGֈ6LZc U7ĐVS T7YpѲ./|kg5 J?!a}%Ekօ{LnyY=.9A}%p Fa5g%5)9g@w׏+3JcI Y9Z#yyeM5ps-&t]~=I$A8ral@5 uo{35 ˕ {{ joHB^]YA<Zef|Vup,,]aUv颽Kq:AޢhNVfCTZh cqt@zkdMϽu.ky!M-RX?B"0X~[.rwdch;`}Ռ)#@:76r.rR9zYT̏_^KU 6ѹck2^בڨ4t\llUEݟ@fHyS)M@/emZ5&ױ0Il{PJ? DB#US+ҲJHdC kN0gnS23‘@BW<fתU\]F=5^~( *iHec I)k83r"B5@ OVtA8^]=>F@Z?w:ncjLuuJgr1h<3T cm AJpb%>k 9ĽPP\SCi8V.>Th!EPgM5))ޣrE@Q蔥 awe2953kfem/|#~)â)?,arEޔL8I@w]gY# %*TW3BɋÑ:-ATپ7}uxBz}|jW3MzmxTl"/ˎ庮B =!sUΜcV[~`[=7 0c(j1@(zbEOӛ}ju"I0Ph O{49"GAG*0XH =pI7 `Y ײ A1_}KhL㕰A+c>? 3<$eJ>Omf}GVb y8xKWQSo r4l6A_6H̟dJ>eY9 ?;㐂5EG4ݲo>.HDU{}䃨 1s=B"xԗ]cDzJ%i]B Z*a&aYX.B*S-RPd3C[(MKG kz6<:dg?*Cjp ޕUڥA:{hN IVm uw"dxݦSBrw:jZ _xy3v =|v^ KAc㭠FfF>j/}qLXnB7 Te<7K˭$ ׺Q9>&6*N˯e"uUt_h;Jh+%W,.тp7eh4K/ k/7#lOΪt A<ڔ`L]@ d),OB:_ۅ(HK ؗ 4SOQhہfv AϡdUL)J:-*`t<Fyh4x8eMYDХ3bNXȂ{ש1Ne]WC; 6' hJፙˣ@THB 4 kRm{MKVNyz 8¶w6JJ\tP(n @'QIc.)*;Bɐ@FqȾѧ+,Y|Ԑ: kOzXˎl\\C*M&I~ W.C=w)[29@†r^Ãu4vYb6v-[ہ튪: Ҧ9biA/ci"@Fx%jgb3)]e^)qU8f5y~V ^]E?[ܕ|rU L{aX$:Etjkz̀dEVAMK]8I, Cz~#% #rt[t)YǑlOY"A/vA',,٫o$Bu˱OT(<ĝjW5F:$&;Rġ^Ō76Aޔ7NV=Br`{FrB]l>aUk/r Uu\So:rW53n*%{QŃ Qc)uvlx~IefnHIeW9;4O\jWrB4ͿMFCa{#wy[2TN5/Q^. Ͻԡ 72,SM!Yb%3SF=bAn0'MؘqۂsTm2`\wRQAdvfy0YTeѱݶOB1"2Ȕ^Fq'{Sa)$i&IaD'[&v~剀kaHZuwq!:q# MlLJ7f3儚jר ޘ)%BTP8}EI!Tam1.l~ i(t?($D @fnVxa¶)f{@\ 疴|t|/z]erE?.q~xA0RJFXnِf33VMV)' LW-XԨ@ң8k5FP*0f/!>':W/mQѺc_jj\QgGP  sv?DO8)ELE%x "FDi\=:FD‘juܗMܮ"\T;>]Ȃ>uNZ,rWvr2&8 wMc$w5ф|ZBa.Bm*B[Xf9 Ӕ~ɜDnQq>'~9+KR\h#8p{z61NJtתfO>,_1-@4O&-o'C魞^֘4vwx;9^e 'UH6?-m,Qt̺[ѭqTi1$K%ͪuݹg 5P=`BĽk.ǙY |SǮ5Dab%s#xD6W, ݳg>Avrʵd3ПFj`#$GB~X19#ho0UIM9\ OքfN[#8ܾICpyCRۛ )5T|46qb" ,Sѯr50΄5@e7ێ_p4 26K>4MO8,W<;KcϋYc,pǮNL{5b4Ӡu_ڽqW@NH;,n~}uԲT4b Rs+'ќX!rFpRw8 *}cӥTLqMḷ<ư&ij"MLԃ&^&XF@wr~َ'n#C,8)ʦ3B"N/#PZ1˯P)}|=]tí5q,7䲼QҸ7Jclk'RݒIgDH4"p܃Lԟsvd3bv/~%|im;0A,HTgp~g?]kS~V쮂^!9cc-BU^ oy.F/I_c&/n캓>TAǐ%2-~>{>\h?8QNL*v&$zRPS"am@d;W (QaYd~-3  U|ͤw.Q!o5DjjƦy?ac)HqI:7L T|gfb'>S}Fmt-uD`V~@cG_8JH>K~縰!.6sGk(7F d04sJ%"_\HE*69v\z޹b\whFn] hs En?~HW".++A~~̟ȇ,lk6g|XKhhv\?ʝj #JT/ئzצ4׾qF%yU\o75?,-5_)BiоAY]1;Bmvl r;ΨP`@GjmQ@qG%Nc#+^<5m ʌ@:#C/_ut]&ra6Qo}X;$`U׺珱 s|&zQzNu|}W5`~Ό.Ձe jp>ijJw]cO\o3͐^]䩮Q&ݪӡ>C`* ԮtZe{RY^C?fw"t h6hAo`:w^QDc͑BlSWV9 ta|LIP]iLBFYvUG >=CZJIV도"`idXiޤۊDBM2(FN9!ԢGu4Y8aMZk]DS m.Ƀ'  ]`/j`0[/[IEdCy\5Ņ0r(+䴰%~;kn I1R(m_f!&S"4No6|H1=;elaΧWdo S2V5z\9C0 *cwx.F0m0^{I]ɣT uft=3^7>} cdİ@zxwax2ɛuYi¾,zɝ3׭vye};snҚPٿ=:CV9^{ֱ YC ȤsWcC =j*fz[Tř۞p}/:䎸BB+qIP~(YJ]S]IMݫ +DCG h"PZHSSh!. \=iR+?1{ok,KNLl4Va,^,mpѭ6c(OwIU~s V)(t};';QތTwP?Xk@_ٟR2FXdž V &}6G66ϩKw4Hu/`VM;dƆ3#C+B׎^%$PCAx8Tnnlt`UGxQ3h~gG!ub0"+xP͟ vfGԐhYYh'ZW)UgqT{15g1i\sK@2d Y4NKL BbKVD ]կ5=nt܃OC7V3?gq5HI:s *pkAﴖ6diX t/g}G5]BZ‰pr)7qG}\-7T}oJrnZ>2h WM{C*q_q}XǥI<i|=$Ws9xlkL3v޴ ]TŻwjyFDIeWG6/~ sI^.b8Z/ 4JIg;Z(ىO&48zDgm>eK)<:pܦ b@#fI>|:TwPN d[EۢUb@[\b=jS`W: w# mRi:i^H: < 6_;o]sA Vez[cZky\$# E ]y-/X?o~%oFC==r*̉fXj޸S0q8BaIؾ™W(NG^͸%Yk2`0f@T5cM~]`"yW ʈVI{߀ _ bds\_Ug6 MqB>\EmPS ;RLmqZ#p!YdMGg3(oF"JMZLCq$hLN,s4BLjqm^{v4+WNO M!LXCbcG2|'DbCC@KF3^-aۘȔ.ㅐnDY(z M,4;!O]?_~Xi^E*Z8* 8 YW_ G2k.],+69#C|lTƳ3w80i0o;!k~(=XE%kkk7J+\$"4tv5V$mL endstream endobj 83 0 obj << /Type /FontDescriptor /FontName /BRZGHX+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/A/B/C/D/E/F/I/L/M/O/R/S/T/a/at/b/c/colon/comma/d/dollar/e/eight/equal/f/five/four/g/greater/h/hyphen/i/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/q/quotedbl/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 82 0 R >> endobj 84 0 obj << /Length1 1626 /Length2 11271 /Length3 0 /Length 12114 /Filter /FlateDecode >> stream xڭveTۖ-$K.\¡ n]{܂9ow^2\kGQjI@Pw윂`;3G%6e xI9L`{iS(H H\\wht)GgBfÿ́- [G;=V RQՕ(`كMm.f`sd1,8ZbI@#r79b87 X:C_gum]x[8M5 B̝PkUUiZB @sZ ꅚ!(W-38ښz~stM'V3h @^a^?Mm=v;8;;ךږ`{4vEv\Aaz%a tAh%;}"$oO]в.M^o 13%_bj%k'?J:'5},0!`wP 5Xھo=l Hl89ŧi6K@*9tteX@%jz8rVu FR/?׻JH(7лM`wkߜ?~< р_7 ]_vwr-9 YfAksG;;i~rM %PnX^?&ci[yg'-CG2$̛+{e'è3Su=^N흍5uG$ng&?|?)b[apj oz:IYcPL }&Ηuψ|0Z.z Rq̾=,:UvIvEj.SrNM0uTZ7Q P/h|<5 5͌aa0l%c=Exƿך||5K߉]v J#{.|kTS&rN%S2B4%5[P)W`ɓl@*|.P\<ӠNt/3AŸk9lUK֨hc9dK җ@b;XI%cgٷRr+2L5afe>? Nb҄@Ca*A6` %58%b _3A x')woY3E$O%JZ41VB{׆UHًW#3LLgrL E|J]31jlˤޚ@XkY4P{VuW2;>246 rbm1"8c~ c}[n'7Ckط+`g)CvEuWj '\l$7C?ޛWzNQ- a |&6.{'4Ʉ<-ޚTDfVCRcXNu%%a} 5~53@CY>7n#@861aCN+Xzh'ߙ;b{՗E2چjw1ʂ4,]Vuc`'o!~\ݫ*D~g/D6E[mly^G̈RI!^ bSبV%aM}YjN"Lx~:kҼ?:-Xc5?EL!|Eطkх&r"4y|M(S)҂%?RCXޢ@%\Z[]C ܯ 3?ea&xgF?q(\|??CD5נȒV4pDf0P̺Wij4֣wb;&0 |:DV\25EHW(җ C0LhOcb+ݬ'˱SWB>KR;&tc"xsrm?!-g+<AK[}-fTBm;Gz8 Lw] miRDwVwƀS_ҰZ9v6qƩiJ4#Vk Nqїo?t_SLp,?G]z"ʰ["Tqt|J01g>`\>ҋWF}ͨYr-!ՖR-y´Abۈ};]ӴEZصMEA˘ԅ.)|KtЉXb{_o:o{ݪ6n,Fer0/k4)fyQR/€ Nc 2tQŜmdR{|u$B˂i7u &nUn+\LwcHKn~[GEIVy>5&ҡ] 9K-嫓/v'Oq%ٮ xsp/j9~P!2osF4_Eq~!B|hǴMYc-ؽlg['{_B*aLm]i2$c! Wsj{g57=Ո[poLT6۫# ?jUEnM}"؊M7Y DY3`DlS~h[Ž"O hCZ R=:zFz)NvM l9T֘|myɬ⚞uW/t͐^xvX +Jఁ*=0ֆрMg&CM^=΅ աmq'k"gx?2u0 ~%.kg䆣x3̵7=q)7v^YmEszy/KQ7ۚ.=\B^npnn7~ĭe ! iDc1Օ.!K$OF3\2{[g0NU8smAEu0Cix}c֩>f7λ=n3Xgp}ڶ p40Vw _Fxф4T-}ѥ0ׁI++#]o|6׼@%#f+Ag{<~PpOCI>̱@{>ފ1.5 q[@, cVz5\>2 G`6Ӑ8Y~|00QP=&=2RƕDZ@U/3S0A w&y&æ m!D$vnd P_͚v4S$OS¶(6eD߂}@)bS0/PYݗ-M%PW"QQѦcP~-سiw@Q7ΘKю>=v|Mx$B2 ;UA+%\nf4([ YeE4 k JB+^ǻ%8d 6~ i=*X>>usd!eyMg-Atc5?b0lڙvx)V}! \#p8 ux` 0I0*}U?sFżʡv9d)Ĉr\(qJCSXpͯJ?p`hه^ZlXe?nZ}rmMß ᭲(3m-OR 6*b`#C"j1}z ح)XHy5;t \>0 |Ҁ&p3ڱuԝ22cOY?L? "f҆V Y5~)rw)Jٮ~9O!ok9921nh+s qvf un 2n@h=OLVYGAWtV4|!`k0Iu<)܌3 !c4T]KXc=ާⴵy Mټ;<#..%w0(ƝP'tL߿fv߷qZ%b9pCq[S+zmc91WbP.Ox+.tUVȡG !o(qޛ[k/o?eu|4f\8ZxXlN44hJDQczUU^]'$JoWa);PѵK}q~>ƖDjRϲƳ/S[X>nZQe!a@>~断 Ft5 )t)\x\2jNedz;=TEYZk.*(mL\=fΘ U|6,V -3n͊/spF h_6I\.22EdYc }iUHgUa\yXJOdUv3 Ś37̦ Y*jE uń|ίL3O?@~loXCTuA-\\[ăW5j>z9e}Ae[Aay =KCÖb[1,tayJpϖ-'I:Ů ?V"8VgT\&`JZBH5aYآw]9? v] s= eszvgΣ QFJ БK{."K=ƕX[CͪeJddžtmbb_w&x9a4<[c=eUs'\GrfZW:5V.=`Z (  qdqUŰ֪mCMc氉=QhrIdҨ_.ٶ_6KB6rIv_DXgF;gUġ_PgʶlU+q+g<Jmfw0" p\z(ve2fIoQs]^eHcNj yN~yYU]uPVszh#31^ykvjߤ)rD@Ȳ GwQΎI sR۾3Ur=ۗR}b?2ݮ#Ϣt@s0BUdCEwO m˜tJQSp>رFlf_~jtsӐ; 4olФМǷhq)p&."7Zd(r?J@PH[x߽)Ͳj&vyȋY6y9̄FЗF>nj07s`{4G|Oѵ*fܬ0$ٗŇ6,M޻=pd}j̇_kDEm2B>=g%JL2KL8/D5z}Ƿ#f,5Z}D_a#y`s<?6-.[ܔ W%)5lլX[GbsrÜ:12 oL`aޚ79IS GAḙO13?JnL0=o>JHOp`ͨF;r)1[R~A^x !tNPByI=aX؃<)v |ɘ4Q\P`-!+keE&ӓ De:&39zn&bRfexhP;IkcG.l|l_,L@~(">_U;AvGM- _Z=8]tT K%r vƘ`wv/?EzӬ1ᦧl Bw ?5*->3bO^*У'w?P{O-Sc`2|9S,.]vM:6Rm@ Ȱletz+\=FW^:;&F}p˻;kUHIeπ=γf0<ht%c/?< yw/';=+Us<: %Kɕ[Z\ZL_U^l5RjFe*@ME60z:[c`i_9ֶ"bn&",}5F Iͫ :x/\M 5bN3*1F .[LM M{eL mت1t>Zy5UXC;cIO N,ËRdci%r:Eϥx>HHxZ TIhp !iTi9quh_ Y8ǻo-^] yVzI0sֽ(z&HCƒh.7RtDl7%ӣ<% nL,p}xmPnKC1M)K7TsJђCu鯒W0;o@`FefĆ[&ц߱*kX16cՍE.42N>-2`1 i)-՜%MH) /gN_#յ@M/TMŮt ? i|BK׸=~x"a^KsQ b鐚@q\Vls4d7P^jdշ3܏sO2a̪(އ$yOk[]ֱ1kr [9NgDw6 |$OJ'q?#~x~Inۋ*a6~!:5͞86{gaؔ{66%de7\D>u`>?MNMy,tmxU`<5VV0!pzD]*:#Cj#rtg#_5v8:%~hQWQ;XW0h^ֹFB *{i@߆ ġt궸|̙%EQ6S; sEzoG[xsbP1z .hp u%dY[!*gUU<3\_P=oS*THj3R;a 7- *I\ Bޥ[qABoߩʒ@CpBr"j?PHj~_$fz:ÚR ~ZcTq"l[k6t[g/\kŤRc#'_gllSOڈ' X+f.oU935,h2i|&L^[ > "a`+U[D:='_ъ0! ʑ{'ɢzh5*n׵g$"ْ5JH'0^|`63˻Wy<ԊvrO Rx+50}}{) [f@_K =*@hu9cB _$5Yx"sARKLyй3Y5oo+gm:bMj_B)w[|V_g4Nڒ¼lZQ endstream endobj 85 0 obj << /Type /FontDescriptor /FontName /ZCXYFJ+NimbusRomNo9L-Medi /Flags 4 /FontBBox [-168 -341 1000 960] /Ascent 690 /CapHeight 690 /Descent -209 /ItalicAngle 0 /StemV 140 /XHeight 461 /CharSet (/A/E/F/I/M/O/P/R/S/T/U/a/c/d/e/f/five/four/g/h/i/l/m/n/o/one/p/parenleft/parenright/period/q/r/s/six/t/three/two/u/x) /FontFile 84 0 R >> endobj 86 0 obj << /Length1 1642 /Length2 6356 /Length3 0 /Length 7197 /Filter /FlateDecode >> stream xڭweXmHHCwwKwH 13tI4HtH4J 4ﳏ3}ssu^q3qBAJPWvvB]b\ [* @bB8LL0B8d P|bbb8Ly' lqppm!f+3A )ǁz ؁AymU-e@MY;m`bAa(587K 02 ar q\A00|{@ CllA "=\L Gm``WUGA:@p0@퐞P-4HC;5` :=d02`p` { #iܿo>{hFAv8|Ȝ6dn{0B>޿n^`.̰!B!Ξ[L `? D;qy?ܜ.k w @{ٸ~ t;{w6U_{:\|Bp%VqnR?w qVB/gHϣ$bl?:ȉ@{7&߇TrrP7?.~A0@LXgM  dE ![qbYu3 gnj#옚&Qx?ĵN /**~L̮',oA?r|غ/1pl(O3zsZcTpkm乮E X [ësW?X6D{̉;,:л6)9c$d~ɻtIO+i+řl.rT[GF9/]+<|.JÕ{_?gҟ3MuP잉!UCQAOӨ0>l戔0xvM2Ȕ꒤wb0j5`pu{@Q7V/Yv'QllDk!ڱE!l{aOm@;FӗŏY+wY64u \Ȍj_;*fژH=+,"?HqY8kё4M{FH䭦aLukZ=e9BWv#X1k5r~y!SU=!bI+kXej biߢ\ԧI*^ޠ|R5^@{4'% W /5\nʮ)J7kr= 'T_AޣA;C,L4F`A|EmN᪷s utiUf#٫4fcK'"wYǦLJh*̧T4ќ"riS $f%zë4-v-<)yЈKussp^a*.#}ǁYTiUo%UBIbRGEQ}\ϭK[`ik%3'Ri;fLK=Am|i"] "!@ s廣ٲ$<{I0h 5Y׫/z!(;ol}hfU0m23.ʧC[xbGP+jf.Sఠ?z|qMm珁SFW)u8)+ $PlvLD]̈_ELAPy$| Y*XS~ۭgp6KԀqzO![Nsך$L(zrh,WY$2^{ɍwv(I)KgM9ڮ+]H2 ,cRbrR]fp d|2MZIښ\F:N):p4Pi>o|dD7#nogNvk#i|arx#d{;ʡY=]Fmnrj'0BExCRY\;0'\ߋ^EmNךw1i`(I`Xx`t6*~L&͹P&M(+s)j95%6Oإ唲K[ͿQ`HR׆P1)b5iT(! "aw0c0lܟM~طqI`YţfԜIT쩸:`꛼ CҢ\eN4*@ p#xgnTg: ,X_GM.R4ˉP`b%~Y7pVp cIi9V0 xWۛ="|>zdțj7a\xVxnl8@ӏ*u?[9,`slzĘ:LF" (a幎,'4s2OջBlZ1fXTJGJ}6W5Iu{ R/~3_Sq1ozj3C #{/'r#|=7oMDgN)(l*]<(,輖v_H*-Nrkq#ov`VS)uukDZ$% դCU2CY w_NE\_^k VL0pB:Z^=[rt- m?rPtl s\ؗ GCa}1OkڠS |xqX O&^~j CQǐ!tUTCe'UlG~{wևkߨɆ` $xڛV5c-`*$Hd7f |YYDul( im}t70KLgVu!k^?3kO'u1ʍ=,({cG'N˙+$_)!(zؾR1Hȋ ?᷻15&=  ;EjUhAlʋEO-)ɡH~"Y X\9cX:qfLTR/ۏ"qyc_}? zQ'Nnxo'B!]]+Q|7X RxL^=]| c!c8&YQkDۍtVv)./׹|j-U'c|G|$t{g! D^3#:9iQэ4NcJ&_e?#*ܱuS[K46-pO j3&cmK1Mi*&V!tVSo6>~*g/hJ}ioF񩻘8`.A`)6H1cYwƛ=p7egIU |oǺ7]#~Z7gu+pde֣τk($MԲE.cs4 1.dP(}";ZJÖTPʚ)EcXTbYUJʊR=fs˵=nFNGHcg7Y:#~Z=@Q I{M'@/6|.PBDda8&nf xZQ񳗺M&l 4XŘ'o◭*ǭ< oϹ#G4NwVca`;I1pEiP?NIݫ^ܐ=S={\q787'B]!:&qRx!S؄QUuL4R`Q u(~6=5oY{6lfE鱐 D $TNa_?N:rj/Lr}<َou"FaҼv)uCrpWY;|#K|ڏCGV-%+ MwNHi'se]]\M̗ &oQ?oXlϸ=/pFGdcOofabi}DG*r Ex/%[WB@ jܣO 5= AB?;j]y׆ Ye)4D顸8x6H /o=|Kvwnkd Vˣ-fg3o)wi7/yo^˾LD8뿸@dxMvvsCA$x/=%7[B*c/F"U1_fXY' ]TZ2) d;3m|∳)/AFӷ'O7DqFx 9xԗ"N1o|3{4SDϬD' W9d_j2p'&f;wӀ[ZD[KXZWF[?=b&h e.f}Л`@JBs*%)4/YGCBոx̞s),NDxPFe֘bmc ls1OMoo>XI,'`qAܥ!?p gnՈǚJFҺy.+f'D#N5txU?bH?.o5 l9圛Fc`8}:OF΅gJP.d*yp;F3 Gg}Wt/-]vcʸ3Rp^t~U4x$^&+;c3H H3f'3 ehIG'8.8]:BX0Gyy-[< P77>[Rv C<.gܦ-޸s_RTKY'2cTq [I״FR%1*ruؑuDol6\,x endstream endobj 87 0 obj << /Type /FontDescriptor /FontName /KGFAHU+NimbusRomNo9L-MediItal /Flags 4 /FontBBox [-200 -324 996 964] /Ascent 688 /CapHeight 688 /Descent -209 /ItalicAngle -15 /StemV 120 /XHeight 462 /CharSet (/L/R/S/T/a/c/e/h/i/period/r/s/t/v) /FontFile 86 0 R >> endobj 88 0 obj << /Length1 1630 /Length2 17953 /Length3 0 /Length 18785 /Filter /FlateDecode >> stream xڬctf]&v8ضmwl۶mŠm;88}q?ckk7* Pޕ`eg`-GpQP:]Ō]<M@ h `a0sssQD,,]*4t)`.Vʿ/@[G;_kGU j [J jIu$ll Pr32Y]4sgS{3Jsa%08M=M@g;++:MmI_ 9:; bl UILyZ`ퟒ Wjlepz0rq5/տps @ cg3[_t?/;:z_V3+W93ߘc[X13+fCtWI9z̀p CXf#[#r\_%lmw 139?clge֚v5a{010[h"a 4Sr5ٿf@g[+{_nV=3ѩYZCU@{Z_?6fP y9T#`?8x|9,\߄Y7!gycWg+OߺUx_`MUWc{?Mݜ8k@O))ouFvkvȔ~fPf:=jPNsǏ_2ߎlҀ hP)p}g4(G̼Ќ^ۅ`8ڟRV1({" sLH^AoٍP|~A|D54>:2w 9 6/?$՝ӥf9]5Ymō1n9KIh$^wx|KI謚AceOMwqKdY 'RNXJF4,'[# RPCxUʾPiW?"^Z %~+pXc'>&!!mo1OЯ*lq|x`i-X"U5 #Ђq=)X_qQZyb)}S t{z3ٿ#. ͞l-ۇjіS(gKչ@Z2niӍ>۫I8H%<]aP M yF - 7Ɍ>2Z0ٞi6xD7)7Y{ނ}K*tpGBtmAѧgAGN2*jKPwr.&m㣅X 1 A|-ӗ"D-⮠oyh24A_ٌPODŭd&tΈ@|4]Ij_AA*-+xX6"AK5L$D10lȪZRZ³k@>b>,Z{#wιޤ4­0Ő>;sB|_3#p: PhmS0RO% Ixİ >`;_Ns XN#Acz_.[;ɋm=WB\"1~L7 /frkLcw|F>9}LAt$-"pX]6of mCNzs+,Ů9M7{Z'7kLQN ޱܫI@?#rwy!@sVTp)z0͐_dzP#Rvn>^Ti/.kKAþ)Oyig;NЛ!qKS x}]cϳN1,"8?OS xP ` $/_ 4E$u*$5}.036,p%N^ Ǟ -2ZQCOdj<=DdMh°Ǟ~2uz !9cy c-@Ѧd&ݞaDv>"o5{%yvz ق,Ts,Og Mw'{sROH) ؔl=E|ىm88 cLSJ93eIb&n#== %do_}>aBb_|=70Z| j36-QuDäSL@)n*&bGI _bK42J+BɸSMt]ZrsCj-v#Uئv4C.ww3k2xltշ"NYW!v>P:Pl]uXD^DZ!ɰx1?[!gy(*K%\6jKZ~7'-<#8ʅٳɻ3 )*Ƭ]ܲ0.7bgBӘ)BM=@nc㼶l%a/{!2p-K';i̪A'z-/=|O^3+ WXMhvf7XU-B`LϢF2">9 ʼnxXYtňy: ˃lZ]"ŰXUw®eA'PT=:7Æ(&vX79pRuY0"N50TLK>+o?֢ ڷ^*SO*{[]Yg84X:*J=E:Ȍnh4ӋܳuAnAjǬ2'Ѓ5j'wJKNdn?7fAGSD'OA8%+.^fPKZdeC1jC:b)*+7wIlSLZR\rGjHcB;n>X e0Q)C!I,7Cz?6S2QX?(ѝUpO'wC87"Z  ֔[~t[#0;D5~$WݢyBmnF,ofȜck.qpB 6!v5P#K$RE]ͧD~& w5=8`nO"+柦#0KչWlMKOg]L̰Qٖ #L9'V]svfxM,a4mC.!qIl&JQE \쫃"c\pY\LQ- O ׫}ؿD0HY#n7mW"p~D y@}d~1+ls 188&(/5%P%nly HG3D e y{ 5T2ca2D/yykwx[ !NF/)EC]ByқY)AcoHf̷Gk68D<86Kg5tQO+f!*Ec VS} ' :`sgO R/L&"'9@o~*%kgXʩSE<ƞ~ԻܐPȏ/\Ȇ$.ٟVWuDFq(P90X{!e7/'m9"m֥|zrKMԝ,W؂94f3 m#n7&ĆZ$'m 4Ϯt ؾqV%FhM9JؠYiFbYdʪ)`b(7o\Zm!6Z}:$fuQ2HKAɳ~~1+7C"p9\ė=== I1% h*#8 ITZrS{ֳ-zu[! pR^'YXi. bi[¬[J@ IAyR6m= cBpQff^bwiaf\, Ű2 H(BHU@8IsZi憭=伪 {4b.{"\嘤™\g*"4MYbxW&{4CYS1ZlyBN{cy/0:. H(1{2J:ܷxl$=5ucw=h:b%H98s"zr4r_!Hi/" ۾w3]߱'__I\kӍd#v|)s%:.%໓%bϩ?]> Z={%[EbCcHwνj"ߓ鏮̧ܸ/>dNOmd+RN& tqإ{3kSχY/x<7/|u1x};;*" #7"oF9f&k^rQj'4kD!Tm|^ Lw}MgaށpOF֙="V f1!׋KjHł칛<=+0ˣ;~'Sv 6G E. q30&n7QlmbOjpt+#R fūGVzlY9}8 ˑP =\ITĨnO7NAic9YnuXvcki|>8 H>wLB'!6m۷eۀ5S -ڼ憎OB``^D)z&헆@gՃ[Hɱ2-W8F}ˍc=j20d1_5^M.i҇_I{]4O5.{a.#nqntDGbYO3*yTB(K0ҏ7! =`/]q>wVii,DJ kל=p3K(Rkd5 ̵.h )S2q̭L'`/'G58h4ag60,a0T<)avaKNOZ[)|% S!Wee18:x?h =oGN66waSiռaKG'4l2EnT(/Q ^O =W AH0Ѵ18dwpMd9ဌ vmqowHfn$\$|w?X( XA)"sϽ;n)X~,~jUz^k۰, er˴c$9+4! L[74hٳ^wDRV 1.YXzN"̢ZMe>5DYc4=ԁ]Rň ~Gja}7%"<7-. _k(A'~34,a_dC5G%Yyyp_lx󤊈0r.Cs~& n,a#ݙwubM2eK$dU+lfZ?NZ . /(oK:̌qe^`iJOw䗚gB rce*F*X+6ǥ؎驃)!j9(9>3igjt%S¢#cGPHa9(ķٕy&..ؗ, w9{ad;z@%H`Rvu6;{k~AhWQ_tQ2ȷûш>OCdį""UFmӘGMu&Y0)TG= %a!@fXZ2^Z @i_elи *jz6$^ôΩfF;Cs<(_e 3BTC/t,I ;3ReeM{ŰlaL:0$u%LT-&0+ȕ%۞c01DL 7]*jBP{=ra`8wuJpzO8{DS+BJ$~lLڑ_7Mӎ%}Ž]m儉![6竻1]-b=+[RR`e&h3yˤ3ʫ}'UIYהȏVp':X=LU]YԤ;~oNX{@a=B풙B+p^sXK$v <75R3|IF?Pb{6UE-ЀZ+TA${|dƯ e޲ldLZHr;_&&m^eh)\wWV9A"!8([9+憢h"^;(Rc][ZvUe 5X'뎴? i:Qu 2&;`3h,$M2Pl1lө\l0u17'w[g3?-$ߣc){jqb\3{ݕSdF_do&z:I Y'@9NBұvJ;o^C9.ToZa,)h{<BB,qSk"l_8b,C%iim_ 6%WfkZs(@TP^nn : c_%nȊ|76WSAK[i-:߅yK'R/A.F&Hz'+ޢ ߧ+9 xҼ"!}MΒ$EI҄z.^߱%eEY#RՆgY\3d7_vD'UwDs”D|4 UrM& $/uG">I,|WX!mFR+E5u^VрGP_bv KOUr4fx:\7qW%qo!U)plibt D7 ,!IŭS9WBǾ)61W|q tc"{,}q8\i\\剡5|zֆ0748fF8{z1:mߺ'WH]hR@:~\L8_8aE-4*1|.zr;(s+*ykGwθ4<ɼ#]0*a֩+VDgOHKKoRŸAb6IĜ8  d<28מjWlS'3^Ǥ$~W=xMv(.GmzKn1܇D.FRk+ۇZO8GKQKՙѾ+{Yڞc@ؠ 5\2STe,>/tVkz>6~ۈ|*l\ip)}Aآue.pOهY:} p( 滵VJ'kxzC勮a)QN,U65UKKxq*7iPB{!<0WʊrǖlQP\!xt0aG9TAy,ST2xh3^ʦFϦ_$L}^AC < {e~Ru1l_FEs3",k:΋4Z+[e2ѣ qY#r߮Q ȉ>}5MGL{@vd3^cYfvszHk8S<{vӔ$z1ю)V=ڝTXW%v5S6"U}h9 wQu;c#N: e&<>L)PItCd~gJ:-Ux8˶(JZ,IxOV%+io ϏUnF:m[QCp.MCp,&+w8X. 0X% AQO? h ci|m+^3G zNflfHI׮3pKvH)ێ K"iIֳ##c w-MTLvDcŊ`Oh+e(X_/}XyP<{n6~eeAiM5k2Zjg5?ՅJ[)_Sm^!qjF)c{)6'iL%l{-]^mfn,;N`].@DrXU?.FoΝX0Hg(a˲o"Y kgf0-N@]76M1 K8Y#HZخwT0auNM%]+SLm=/}輪eY8{jѷ"SN%PW'ݛn9b#ru}aXP)=y*'jK?d`vj($IB|m A2qo3-#Ļ0Ł@;mg{n9(Yt.#vCba~zy(5M)VW1FcpNL~G_:ks^\۰d ffV@MR^ o8-dqj4\]7|,А4膉F 'g7>)-YI->Sy_.,xK(j܋ʖ&R;"9čL|T-,Kڮy<5o=y/vYKe8V 43-dLT܂[쌑="|E-jd$z3Mpsw+~N(ThD[w7ɭFb2~tטI$uSzK1|s)(g7Ȣrt*-DӖ!â^ǚ_6۩N|`fNK?yK:) `װ&?[^E5N].*PՖgy E%Gc(2PB]&7J t$D +$VxK+.o*%K?|`3d8kwNV7ڝ8$ZW$(!Cs& 5ڎxGo.6>[G UT69-CIOUV}ft9 /~Fx6hhF%em]2fVzH| et7Z>ר" RF\b%nfeUzni3EX ``RlZj̢W8aK:؎h_[Hon)sζ^Ombj.% Egbz޳ M8z ޡb˨wKp` n e$o],^fJ:q}۞4dg -ܛDBSgꇕCRq'ԧ'˳W64+Q7D/dOtVΑJ1ܤwb(}\yero`Ss,? '3h> ?AѐݝDnu ;HM@{t3L_s@GmKT3xi-uN>FC9v!dxd\rwkɹ_9O1 r{R;P ac;al~ PZ#)UljuG若ѮyMcq}H]hhs*60X3o!&ptpw[mYd",[] q-ۤ3/Jy. ( &̈ZXu?UG82u_[*[`[ X4dOEIy2B@TqQ7 !/ s|jMAggOG׽EъBO׳Ȫf_ "Q7d,4vtY;d 0~/8v=1awkydPy'.0TC,lxZbϰ܌r}ق <.o ڢWw]ƒ}3_i: 2lʧ:|0F#ԓ PW=6~PQjK۪LXS BX˨ǹ'uX@[4qU,#r5Yo-*`:Z4Q(/8$5~ ;Cx/$+K]el@j~pkIYWzVim13G ZƠDW$&-Ҥ@ov%=sUgbT8͋j釚\q{Ȭt^JT(MltC1?"|d53j}lcڽƶtItPK8CyőKu",=s6 Ҋ̀q9KN3(dÕPJ^/!,dlqAEAz~uKVTgQyux3CKCIpQMK]z.9xh`j53Kt(6L E`Ooxw5YV/]Ɩӆc$3{oC[1`K\7T^ g?Pz},s6J:|uesV%1 T~?ɂB].HvL!+vO*ԋsi'u`#k \2V ' 8$еn<č7g⿁e;k'T#iD'%79 0؊`i GǽG) Z>Kjwn  >F6.2YN36CΦ`~9G^ t4,pݯCG OF ]AzioECl$]JvstQN(+sgR'ukR)\xk\E"9C^CJUZͲ?BЯL?=%)4 >u,^UL=O5(1c+FM Xi -MqIsr~Җi;]A B3JETWb`D+5]ykt{Ϻ睊FaiaUw;c=iMErva5Ls0Us"X쎺)xE|$ hD@\!3Ƣ $C“+HןȑB$J!#8ڛV-Tn>߲l4d3˶\)Mc;=IuՄlOOcg[4bV?_cךB&)^SoZmމC0㤗.ѻZT[0\>jch1 hـØ^}& U?JqBJP@7ΌteN ȧ𕿣=ѨNw.[ր˗lv[25XK {\_ X\c/a=Gj89(׵%7Á݅'US9C0:󲝣Go8s(mP|c`WϸNk'%I4K#keU*=4<sjSdc 8MJ&iRP#+!!SZ^gYM4mHW$GE0 6ugy\Zxۿ_yؚNA@9EY>o/ΡzAʮڰ4-2նAKoC:F!<Ț)l쮑5SB3rH)d:M|5h>; Z 3Ҝ\<@ ơoI]M{dux,2`3'YmBP^L*'Tt &A5m~\b۷?ahQO J`MBKF;|F9p3B9:GP{\/@D܍+͖}xԥ-[4H.q ??ZOXImdATVƧНHZ3s!.WwMd0QM js"tc$/g׻v)ubd/4.xT ez7CģQOC4jT2  3h+#KnhװgPLmv4pYan$eP|hi,M,R Z&"crvt  MIj endstream endobj 89 0 obj << /Type /FontDescriptor /FontName /ZAZOVY+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 88 0 R >> endobj 90 0 obj << /Length1 1647 /Length2 12003 /Length3 0 /Length 12856 /Filter /FlateDecode >> stream xڭweT\ݲ-NCpN]4wN.}{8?{jUfѴT*E@R%{5,Ҋ;L!`{ S 2HNN -@ li0hi323?7Og=dhQA ۂ*Ji%M4V-PA F Wiάo\S#~sAA,GvX:Cm]JnwBNo;ް72g3 EUG+S_o0m寒hP)CemM=b9:Nlo XN KS's[_:zSGG[9! [ Vη@[lK= _"ko`+bgߒ05w,Pؔ o! 3YD_Eyw%N-bkdj3Acjx5_ /WS;ﻵA?8GQ{7s vUkڛl7>7'v4@7t6I =-efY+  DVt0_Tbb9y.u_kESx{h$: tqrzSiV?_DYu [eCG%;9`CjW8to1mvwNr|1vb˼f=P;tZaNQO.'[Fwx47ԚXV:(CĽޡs-RoȴTIZ + n˻{4j ?\:.Xձ{_Y r[g]5VAxm MsPq(4N3W$uBstO~z}EC L96A Ps*"]s.W 2wΣ;6<RO-4Q(.OXr#Օ * D| x52Ozܠ=D_ 7醊$Ev$SvZ]kEbJgWOF 'ԅpURf'z"bˡ}GcnKh?kG4 ?Zy&OTE^E3&}D'NqkP!j&;6QDbnJ)`6V%-qFjGI. P/`~;Zcݎis7<\z.~Qh5 Q9?ֻTtS%Tvtx|ig9J§ 0O+OyUEEjޮ#۶,I>3ñTg2`5͢6˘ +ԣiىԓm|z;Z2f呴i|p2B> sʗS]vg]5'uS})K&㘛鉶9DQUtl C*9SPtQqكZ=SkY&\.3 3rq{,u`g A~a .!$z⼹4YG>gOB҄|rո '0v݂qxEJ lk9Y-xY>v%߫xé*Dr{_MLʑ g.=F =t }$!̲ +nIL 36u;e-ldqgPbohymi}H-O}DBv$&L9*U)vnpXѿ gc^dw#rڏkmI(sTz5NF%/Zn\ǘA8 (dzv#ϩ{_!\>ĢaPǒ{9@1+ q!fwŭvhl5Ox:\#Y ܙQdN L0nϱSGy4择Er٤hߡe}K-y5"8n/詎G1_FΜ: ,w^VόW,,(uJ IKny8@pdƎRS+u5@˭J]xJh? Ϡ5Uq@2P.,R%D _fʖ<ݮi]%R_~K<ˮ$KO`/!n<5heN"&"0{bMkbUo!Ltrof8Lxf'OnKEA:;p Lh)(INެupB-d]m$y1#FK^Pyg$㲚bj@! /unb勜W"cÉ>bZ(cF7ZgZ,X[G>8B" 0.$a9˷?Q?G|\HRߒ,XisӨp ̛dfd |Kv̭4p}T햇5@6O"m(gc6>dsF]쥽2Fe6fTfm> R>F2#)/xP8HTV8}7]\7Tb.*Q}# uyw7'|Eu.+VʷkhR6!tC˴'$ֈt4rƷV%Z[W  ogZHp+ҊkZVS8 Ј=j"$:ӽ%j{ȴ.kd[NMU8:w7DrҔU:sGdOj!chs=V|çbs_>􋩌͎tlVu%<T~o\ZL%J"4|;tWvreew)'""U6~r1} 4"ZrO.h!}6Ag\8ҝ)^ }є{)t/[þь47|ˉ3S_ FQyL"{<<\cbt}ǁ0 CFwa@uߎ5Tu-)v&|d)8j XknDn7j=q/h<IkPI3zRm7J ʫ=v ǻ=ӗЉoBh[XHh؁"qrJ".$p㐛Wn@`< {e26kO6"|$lǦ@ >eنvd)6.W6Wъәd-uDnŨDNpq J[(@M { *Ė1F&?,f܈WՐNɻRd14 n)pE!L[SZN.Bk B%~U *jF۵I۽VI;O'.pw$cEE*^=5-s|_^^O_l4_6QxZB 6:gzR*tհOz#hW=! wS,dtnrVO;ju֊)ٹ>ޱ׺j2f=EJwP<6IY uO;Ũk@`vٻM9Wi$koz4Jy5&=tY,[D6%%."Xc%|p~Yq-IC-ѮRҿ/7uU)JIy|G@Q=!؀Z!9dSw@_ii "Be]!*)g!*4Ө1r1inPBrhyg=bA&Lx'cb2̔K"QdNvFC!]uCv-LblǍ>PUlxEb%{h㩢tZi=g?~ʇ*EQ:t7y<0j;w0xY4CMmʫŸ́ r^Rzpܳ$+g\DZ˒ɿϦ0KPUb;J?qa]7-n 35:f8+1HK*h!84Y?_}28k)ۨ>͜4tu~۔l'>!?fiިϜpEv>\&) i)/ <'Pt;#}hV~3I^G7I;Et֣`FF2IW;= 2]_TUQ, e}\ѻ{CѤèoow%26'52aA4R[r3}K3~RA7XeⰊqc =>2+?l7.1Y߉n55{Hnvr%vӠ~—Gp V.}|"AJ; dȇ2~ MډV|}wN]>49Ajs ??؊-]f Z &v0gUw CB\T_jX͈hJ)TaUf%ҫwnoQΈΝ,L`bv1m3C͜a}tΘњ.ÏH?LL9,szMP8KH&FaB!2rhhg0D72eH:e谱+8?KQ[Igf@>6Q'$e5CP KZWY'B_S)= iin6z."v?q(녴hRH1]|BMxtIy@K\;}\v_x|E֒,LېW|g>e]25e|:{h$B~K]v y-2—Ӭ dl4΢'ȧ[7_~Frw0 eܤXT_P7[~Fӳ~?^5plp |$S+xzg@䷺{Ò'W# g{2ښ!)Nhexh$fw^[S!!'jD O1Ι&Ú̌<Փ-ky9eٰbGWf^ĻH&'hM%/[),5cJ76TVH$7`g"-7lGiL^>?>lF.SÈ{%[cd~MX۾j8͋ #WJnUMu#Z5[AJJ9H))7i;'؂T-!&N8fndcGy3q<=K d,~O FaQO6^Z!@O&gH4./5#gTwe.iĪъY&wg_M^&˦L8_L %+[la-B}Es cEНO4Dv5"bK4h_2^Ȍ6V@ +-FG$Wϖ]wc`U'QswMyu+>{a.vvGTC a _,!oKGiHlXZZQBpf'ϻ+K`9 ُbam+r',:iD/Af.f%R~ K^l=D3ݷJus!9yZn%֐B4K6)QNαJlY$k-դgY1o=@Z@1+kHn{y7[&&Q?On RYe!m4T cx~T㑶Ϡa&N%OǙ)LlB;lH2&K߰f Sҟ'~|WCٗKYPfg,WxA J-8q΂5eF(3c:Y=Ʊd%R+nzK@ oԸm/`9~sl#5>fԹ!cת(4zE {8A@#~qd!6ѶjV܅iԥHSظȭLHqE~wn$mMC2b;̹n ?C?58! X6mTR 9~EꌎYSjW<Dtl..L+,I$W1&' iVJ7nVe S4_S&"0X]\od +^L&eNN29IJFO㆐ Ξ)[@O#bK)uѮAZ}6W [!ANmRXJ#K˼m`1sx=|%b}ǺТ7!eeT{11Zu1/la06CleC<̘vZ 29# k;jZ϶Ú:JֳabHU{'`c3 */M}xj؝4NE][ޡAHq5_9iUxq0>JD\u>|pgݸU뎺ߒe-2A6J@E$s~.\|*+TKÕl+}z{噎 FuDbHU kbe(%ca껶'c&0[תy1x b*%ןk`Dn y8@OvQ/2PW(hj MT_Q7 Bqkj_}a)V>Khy-؀烒 !UعW^7/?5,w"m1M:*$27ԗ` ]_u)ɾ~gr}]ρ|_4 ؂| |Q4: (Q0y T'[F}o;^Af^xW'\Q &_;) ~BN?ߒ@4ɱ} ^Ɣgcror0tcRDTq(W}PeJؔݦ' [ewrrTJq,|DZA<uZAN70燔Nc9D滣=l IH)^4$bS?$$說5j?z(JcmR,tsm~z֚jw!8t0uzhâ|,jI $pO P灈#e/ 1#ݎY)] ,^3"΀ou0<vH ;SE ^IBI]% D!x0Ύ`b٤¸W LЈu䅗#%!<*1R_*HdHaՎ AKlU飚ۧFH65hpQKvp17HENU@Ebȼ8]uLK =B֝ ծx|ʢmPpAqp#6kFԐgGhz>Ϡ= ⹤tiQWNj-SکݒQw32[yYNpL H.={|Aa%sz%8umֽ3o]B9'QtYdUX 6⟏[nJ7Q;`X' TWa$Jg?*UxP}ڱes󴐠nZHa9pM 77h8&mg/Iv5.d`F~^IಧW#ЬVq1e9f3cU؟ Ql J'?k#7}z]Pz[}gjI3gfq.iV!9+s`:}[[>vb3kАC 5LNBxu"\R尞PM$̂+QM 8c3tܘx[6=}[9`:D$"f>?9~yۑ땝͠P 4pYQP9ڦ=Q݊ /. ' !W7~cjLcf(ʧH9$;l'7POpD t㟐,5lXN,Y1ғz %'s_]`>d+)uK*b$De}Ey4=h zעjYKUޣwB@BH_fv2;)]C8u5K1c>rk]L`[-u> 3wֹ+#R]3WbhNu[ZeQtRz=-=B6>\5]?;Qy_|k~(1ˈxa;B=5lXh]_[*n{nvC`)xF^- _mc>ܖd<^<R폍ަ&vw5H`L}y4Y-˜/v8\^5)\8I')kmEKx.8ƆfUS]C&%>͠J 9MQChMAGgs 3-=sy4X"=I֣ےA8bTʬCF9;BU)KsQIWkn4k 6_[IOR&>WhsҲcȳ!wy3QzzQ-~z$>h=ozJEW/?)~ύst2I!8(ca=/_n9Ĺr7PZ_M'58H9pÿ1,Xr'MYC\(׉k{\Tլ-nRZ kӀTNVU(^eu%~ɚbe7dH[&VƧW_t5V,5~Slr+;3MW-]( |g?WvӺ~@KpM4J| Hbuu'h{K-EjĮ,Z f5w_|GGJ+ѯ AA!xiPr>=O\@JT2!lP,٭3@B%G+FCހZ?ӹJ6-3]$ ׷>O['~ܬDmj8s-?ȑ 1n|=rAfG~҈!=<*߈JGQqع0I戒 ›A; Q[,. endstream endobj 91 0 obj << /Type /FontDescriptor /FontName /LEDZVO+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 669 /CapHeight 669 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/A/B/C/D/E/G/J/K/L/M/R/S/T/U/V/W/X/a/b/c/d/e/f/fi/g/h/hyphen/i/l/m/n/o/p/period/r/s/t/u/v/x/y/z) /FontFile 90 0 R >> endobj 59 0 obj << /Type /Encoding /Differences [2/fi/fl 34/quotedbl/numbersign/dollar/percent 39/quoteright/parenleft/parenright 43/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon 61/equal/greater 64/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P 82/R/S/T/U/V/W/X 91/bracketleft 93/bracketright 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 150/endash] >> endobj 22 0 obj << /Type /Font /Subtype /Type1 /BaseFont /WXPBKA+CMMI10 /FontDescriptor 67 0 R /FirstChar 68 /LastChar 121 /Widths 56 0 R >> endobj 23 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KPHWYJ+CMMI12 /FontDescriptor 69 0 R /FirstChar 59 /LastChar 121 /Widths 55 0 R >> endobj 51 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HHQEHJ+CMMI6 /FontDescriptor 71 0 R /FirstChar 97 /LastChar 120 /Widths 52 0 R >> endobj 24 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GGWLNW+CMMI7 /FontDescriptor 73 0 R /FirstChar 97 /LastChar 120 /Widths 54 0 R >> endobj 50 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NMEVHI+CMMI8 /FontDescriptor 75 0 R /FirstChar 68 /LastChar 110 /Widths 53 0 R >> endobj 14 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MGCKON+CMR12 /FontDescriptor 77 0 R /FirstChar 40 /LastChar 93 /Widths 58 0 R >> endobj 12 0 obj << /Type /Font /Subtype /Type1 /BaseFont /IPXJHA+CMSY10 /FontDescriptor 79 0 R /FirstChar 0 /LastChar 106 /Widths 61 0 R >> endobj 15 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NYEMEW+CMTT12 /FontDescriptor 81 0 R /FirstChar 99 /LastChar 117 /Widths 57 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BRZGHX+NimbusMonL-Regu /FontDescriptor 83 0 R /FirstChar 34 /LastChar 122 /Widths 63 0 R /Encoding 59 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZCXYFJ+NimbusRomNo9L-Medi /FontDescriptor 85 0 R /FirstChar 40 /LastChar 120 /Widths 62 0 R /Encoding 59 0 R >> endobj 13 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KGFAHU+NimbusRomNo9L-MediItal /FontDescriptor 87 0 R /FirstChar 46 /LastChar 118 /Widths 60 0 R /Encoding 59 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZAZOVY+NimbusRomNo9L-Regu /FontDescriptor 89 0 R /FirstChar 2 /LastChar 150 /Widths 64 0 R /Encoding 59 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LEDZVO+NimbusRomNo9L-ReguItal /FontDescriptor 91 0 R /FirstChar 2 /LastChar 122 /Widths 65 0 R /Encoding 59 0 R >> endobj 7 0 obj << /Type /Pages /Count 6 /Parent 92 0 R /Kids [2 0 R 9 0 R 17 0 R 20 0 R 26 0 R 29 0 R] >> endobj 34 0 obj << /Type /Pages /Count 6 /Parent 92 0 R /Kids [32 0 R 36 0 R 39 0 R 42 0 R 45 0 R 48 0 R] >> endobj 92 0 obj << /Type /Pages /Count 12 /Kids [7 0 R 34 0 R] >> endobj 93 0 obj << /Type /Catalog /Pages 92 0 R >> endobj 94 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20120806142607+02'00') /ModDate (D:20120806142607+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 95 0000000000 65535 f 0000000931 00000 n 0000000820 00000 n 0000000015 00000 n 0000164686 00000 n 0000164518 00000 n 0000164008 00000 n 0000164858 00000 n 0000003483 00000 n 0000003371 00000 n 0000001021 00000 n 0000164174 00000 n 0000163727 00000 n 0000164344 00000 n 0000163588 00000 n 0000163867 00000 n 0000005086 00000 n 0000004972 00000 n 0000003633 00000 n 0000007501 00000 n 0000007387 00000 n 0000005189 00000 n 0000162886 00000 n 0000163027 00000 n 0000163308 00000 n 0000010301 00000 n 0000010187 00000 n 0000007652 00000 n 0000012626 00000 n 0000012512 00000 n 0000010440 00000 n 0000014988 00000 n 0000014873 00000 n 0000012765 00000 n 0000164964 00000 n 0000016892 00000 n 0000016777 00000 n 0000015115 00000 n 0000018350 00000 n 0000018235 00000 n 0000016983 00000 n 0000020342 00000 n 0000020227 00000 n 0000018430 00000 n 0000022441 00000 n 0000022326 00000 n 0000020457 00000 n 0000024438 00000 n 0000024323 00000 n 0000022556 00000 n 0000163448 00000 n 0000163168 00000 n 0000024589 00000 n 0000024748 00000 n 0000025022 00000 n 0000025183 00000 n 0000025565 00000 n 0000025899 00000 n 0000026031 00000 n 0000162493 00000 n 0000026338 00000 n 0000026648 00000 n 0000027267 00000 n 0000027610 00000 n 0000027984 00000 n 0000028554 00000 n 0000029028 00000 n 0000036804 00000 n 0000037030 00000 n 0000046587 00000 n 0000046825 00000 n 0000055055 00000 n 0000055281 00000 n 0000063676 00000 n 0000063904 00000 n 0000071871 00000 n 0000072096 00000 n 0000080675 00000 n 0000080970 00000 n 0000088588 00000 n 0000088853 00000 n 0000092498 00000 n 0000092732 00000 n 0000109149 00000 n 0000109615 00000 n 0000121849 00000 n 0000122195 00000 n 0000129511 00000 n 0000129779 00000 n 0000148684 00000 n 0000149187 00000 n 0000162163 00000 n 0000165073 00000 n 0000165139 00000 n 0000165190 00000 n trailer << /Size 95 /Root 93 0 R /Info 94 0 R /ID [<7AA962FB3B0E65790E6F3FEABC5EAA52> <7AA962FB3B0E65790E6F3FEABC5EAA52>] >> startxref 165456 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/matstat.pdf000066400000000000000000002650641211610345200254630ustar00rootroot00000000000000%PDF-1.5 % 3 0 obj << /Length 2111 /Filter /FlateDecode >> stream xYKQX$$.'<2Gp-Q Iegק $xHBяyoZIΊBJh͌Rjqhi}~͇|=o VZ4f_W4|}N]uSG/|[mg-sp_~hv_Z-U{AMgaJޠd BKfKK+~껪eo4__xʭbQ2-Su87ͩi U:XjZIkl4oY] OtGF>ad$lbۨP_ыBc++‚cK81L;Clo1J^Mt!Kf<B0g Y-Nx` Z03+ xF18l!á{G'4}NV$F8MR 9;v:ͩs)gqQ9\! oouQ^,0ퟜC~AէZ5 fV}I94$ġ• 5j_sU:?Wo>S*muĉ[Lʧ5XNݥ<$gӆ+hckpT#mY<m9Ʊ~n~ildK jM[ty[N3 LVS00X ؼSDYȩl/IRAٗ~ 7(Yn%E?5u oeaBi@yKֺ%)¡pvb¤꾺xvȍi>>/(M1i)֗GxC&; GP]M@p69}$'~JbӾzKfB#yC$Cevj,{mnG֦|>CǠyWԤnx5`8-Vjp\=Ѡ &Gxp7Qm.XV1{`8 w310) :R F I&%&lO sX NKD!&""1Rm0# wgR>mIP0 |#YҭK adY)9`m^ v{lj4pD+00-Mφ*}mhd:!Cv08-A{Px']LĿp$F*N]"̉)(\ Re{2(_,z(bRx-8|% 7WM;8jiLm^5|Ԩ:e]43r?o]y`fCn={[zp*99JtЮfg$yHɂY~~/K*ُ} uc{v6aYA"U> stream xɒ#b*;qR9Y9)ɖz{zHO w<,5F޽;%]+&5@NweiZl_qw+‘r&wcM%bI,uL鸧 a1=GԮZa\ڬ"[{kھɴ巽4lP a:r܁j=|Gr&$li ŔD¤1jHBaz#ҚD-8!c=y֗JkUSu8Hu C3|q g9qKfDe~KYq(ƹ3% m<4C B%^"Uʓv{~/CRd C_>AYU6($b[け"yP=^h*ѻ!໿,m}Mm3}]H8 {8l;O!M{Br( `WY%Aj"^䷕i3&d=w t/%]F+ % 9jH3!?6X a&c3K&` Re}~uIw]Ey*.Gaqr) ^)l3Xpf kFAbf|+ A&78 g OCB&%00YԽ`z䐟&=^my і)٤ρOPUSLZYz$> ymUYy~,\4^OE?r;8nRqEx7*ܔ%1H&"ml8:C'siOo /0Q`{m'bRӠh3C56x CNmڥHutfבr^Z8@-7f\Wk~+8e_!"(6ҥ%0z]vX8>/ &yĄSm G83cR(ʼ kVoB|_Ii#jrN&O_Z. 6^#$yQ/|kX OEiyJm*/PmO_=xfO4j4Pv-)גǑg,/м3|[x&*{咹y৿d7F#/ىMʹN)ME2O_/N 4QX9r]2 ;"4a[{/}Jjj$IPմ|{t%\ C'q GkB=>ؽciqz y\Qzk(9]D8bt)h۬_?niWAX[@-Ej+DM'+xN/z ,OyepWB3NL{/e/q^T0Owon# endstream endobj 28 0 obj << /Length1 1533 /Length2 8238 /Length3 0 /Length 9262 /Filter /FlateDecode >> stream xڍT6(t,) KHHw,.%t7Kw("ҝ"]҈;{γ\3s_\0hpXì 0('x 㲰B,`8s%'geWP\rnk@qYÜ<] v>@ןt#,v` K #<$c灹Js!;6vq[~S[:ƃе l.`C)Pk ;@GIV r@'9:YB=!P[  PPAx P@K8>`iustK 85CP .`{=WP;MՉW qv+wg FDED`gdO} ؀pn`p@5Xm!PWwmכٽ¬aPXX]]o <^@7/ :jZB>߿+*Am`ubq}0q[l ;[ [|B|y wD l?qKG߈{A"C v"h55J% ('Wx5!_bg= P& ^\3+d _Dğ琇`ֿw_H`b{/{K_^kxy0} {Bbv x!a x:: /S>~0@ܷ1 3= )H"ؾ&W ;$A/C~|slDX9NguY_K'^ku?lb~Ny0N|D1H/tBѤ 'lyfmۥBc&ΝHAD9Y(]FLoEhի.tJ$k1:h54,I=QE7ֽpwKx[!s(H^FNR!:m7J9Z6n k&,C08] ;҅P{hRw^֒ og143yە'Wy S$9 獊$I̮q=lsۇ5ڀKbW=IzćJEbX +޼ p2b)9qvC>iP66gaHDoH`Oĺg2om*7H3()UM2QdݹM\f~*u|[)ǖ+Jkd˕cp 8< :+V-aw+C 3BΉxJ>$*AjOV Ջ6 KցA;|=p.O;=YEg/ "tX)IZwi&Q2[b]=$VaWBχ>[ KQ%Y^Hcى#1f=ȃP߱Mz 0J'H<ͧE85hLϼJ3xu=JjθXuQۢvR#qSmDj9Ux'Q-J:#\VdryM˦.e C99ꄠ.%bڂCTYџ9k^[DӴ_-k2&zlX3/wh+'Iz+\TkWyl>y5h¡V-$*U-B"zגm(~x+G!.4tJ`RgU'餑D풆cw4Z.+xJ[#l=EUTEsoSLKtObWVZY` RnҥO)g;~0J|&}5`=k= _ S1`]qrOwSQ*"&u?U9b1 9HIwqur?xC [1VZܣ9ml:4X瀹WGMFhؘR.N6Ņo1<@5|EXXqp4ǝΫIUX,$kv#-* UE: jdBkđ]? 8rB X k1Q{JȼRՊ܉hi?QXOhANÃ˾uF -_vb9NoS7ߔ[b k7;6tЊQ+bX0|ՔmWI~fr}vg:Xf<b&$n=&mt׌EnڌN)K17t zܴHîd9t˪mQEF1Zq]-4~/w-b+uX+BIyyʶ9ϋ&G.h_f2vQDOwW+<%p^Xyc^uc$/E_ &ZG?P} d$j%ؽIƍ_}4 ]ʢE~ Lʈg'=傳wnW~9=zK~S5t78"HxAvn9qbXh ٕUmqõP}o9Q/5']MI!S1:&>"UǮ1{,ykxZsv:oֿ\JrphS2t6أ;1}:pވJ)C/j#&[as8'</dnx/6 XO\q07.gWtUR>m L'\S{jmQa~p1Y|buscz#|kDs&{έfrŶp9+a=_ē\j]("gA%d*8c3?=Kk!Nc=+GZ"-*k<\1 FwcJK-wKY$r"|^ǹ;kUKtdyյJPXr&/mR.Ak6<3cc,zsb#ׯ '!W+TG#"O?ay=p}7}6dF .OyN* --d/ ^J2^ލb518=Ǩ^V&/e-F;;ARZHr0bۍ?O>Y|GQv=gaJ> ,2] ?PI _?)r5q 2P"mnCi &{˫Wy;0A3$b[7Tǫ Љ,D?6=}PXuasHGmU(qQ^G |Oɡ#[Vf*csary᙭}'@(F-O|1ރx.ڐ*tΝNYE~zϣu{e.g]F^{sQ([1ğ,`!gK흨ERK1u?P?|(`%/dbgBgm_:3 zmGv'1TusW*_qH'c˞gb[%H毃DCғ'Q.[+_KzF!Wl.ݑYjב WO#k-)c͔XS9^4ܦsֶ Ϳm[yodWie7n g8\ұc-_V 5#Z$/hߚ7ys}kG/hQHQ8NkpֽmҀ)n-+ T[\[>%i 7uoKNU5)>r2 ~YK,B%zɩ`xu &lb{e!ꮯh,(A! K3 ɏt6vŜ+%tL2He(.ƎY]pؒEUrzaN\q}Se~η sF7 w !P*%=3ZpYVa @}'cܚHF(偐>CsF2 vX+պj%a!Az2t C9]]TO䎷>֊ 4=pyZԖJGҵ9?xN`lȘ0&󧜵K_9ȵ|# #+X )u=¼`~ vӻʽ.#o;}\N'z&kff[1ѵ?`-QST#EuʈlU"(e/qX(+QrXsmML0F@Y/OofYeZO)A J VT64DR^a}z(a9zܳlhwdToC2Qw$ӢMv+5mgFTƛbM$uyJ B_fYJ?F%|Gc# W$YaL>5M(&Uַ{WgH*8 Q1 Jn+n}^ ;ƾ=t󅷗 EѰlo't8 QmX8Xi)kW[,.cwր{.KU6 @WW Jwi5WxzGn?V`a5L?&%g ̇Z0Hw:T=@D{8MH>zꆡQ,e؀RUhbӴ^ۊ/'z Uw7=ˠu 8j#*?xMӼ((|ДSI6ԽGZǵS^Z'x(c.זo0=Yy;իLk~{ViҊ<hzHd)$h~$^3K0R `z+S-q]sEafdVL0Ipm{fYlpxWN:?Okj&1-_=$O{RUjt&hBjvu\)U=#qa>gcIuN׼8ȳl;G炤FM&[OԂÐ+h,7=n-l&n9=i]i6dn->8{jSzfny+٫YqXtc,dهcJx$;U1x@Ӧ\@45r;ةVHt@Cݏv}=^VNl/%s,Oo@E"{~_%P_g凌_3g&J7@5=aN!y"[x?ZX=%eT.>N{A#r [[%J/yn4{dkcnZbĹQ+$H n_$| Y5qthR4\0p9s})f;gFtuēUbo_}^Qf?4XC^+yZ^FZIܒWJ'`!f}Yp 6gy@#f;zd#FOQ2.zY&t[tv=l[T[ ]Q0wɥDO$vJ }.J6wn`aF6pȩUͅCWF{Y$<\'4gS_+ ®An>OȤ$ʮ2Y>H&3=1@fS,n]|;ʘ})߼> q?zMFthvg՝/qB6n h HX]Yu\mS`/oDpkVoն&'n%rYMiTQWѢ)A8ZUYE<1^0z _A_V:IYJkmToy?꜒[qZ͢NzeNm8hU&0VM)9#LH6TeM%H79Bk~A EdgY"kX Jiس6yk 1J]эde HBoTƣ!2y~Fvf_Z;^R_cRR#ſ=bW#Gꇶb+4B7to N.TRۧYy ^kY8w-lCKv6:s x)aD3L:9>m0â圴]A7pPR4pXmL,W6޴J]i5 cN_?V^1vY<囦*Vț.c\".^Ԩj/bC2 HAV^Yu" YIB¤WEďZ_'dX^r卅l?0Qj̿L SsC^&|n.;+D8ELaF8Zgg830 Ц [\I%S4Nkמ"073 ˭/W 9. ㆿ>Es ܆*qm՗CGJAq?we򴽾ȶGiag[/ ;| uT?zܵ`!;M4=\][ ч&y=<'-s*wOs뭢쳇DW\2M8ҠF^T`EO2GEL9F ~ǝ$9` w`t9ϙ]$58knSʘ3eVm<vFoVϪZuHま/ӫ1ùa&w]T? _kWVF/=}իX8sc(MͱKiGW'm-6xL~##חl8"jyE=xښNUMB`iH" ;)1:v]qmW,2ޅ̀]p`cHG_Nlk: 5WK}[/Y2.P[C,CtڜD\[Q|!2&qؘJ @vfi]Ys x'~$_5%"gc?X/oglP]lͫjNC=V2D)ņ81f2jXۉaro=(?dŀŒAϭ8?R^nx rݢPP*rk;+tqO&e24?}fnb[cRY*ULӡغ ''99‡`L:NV l{jw=s )zp:1֯ՈKGPC,EɲW_0\gu^Ic +;Nd?v jpfG\6EQsT6|IDq܈vc~WNsB ux]9g g/ĿnKaa-n'K>(=6L|fb}5A) }"s8P>N˨[;oo3zTն ȡنck}3:2^nu9SK5T^ ty?=zJ3^z|: EB endstream endobj 30 0 obj << /Length1 1515 /Length2 6693 /Length3 0 /Length 7698 /Filter /FlateDecode >> stream xڍtT6 2{Pl`1Ni$CDAK@DB:!(}}|9۞z뾹9 MU!ۮ0H(P3@q PCP;!QP0 \]8$IɁ@(+JAz"]Wԝ[鍂98gJ @Q0;0F;B]*ځW;| h4RNTK.rPxЎc; ~]rLaqW{\p~၀@Q$o!D@3 +lg#a= ܾ+Ơ`#z`+_7nWsChww'Eџi^YQwuq"?CA[wg^?{b)jy@u4\Ah$@PH/#'|_W?`O(oÿO Cl0_P`@?qEwմ3Ǧ K$AY$,/ s7 ])\4<]AJP( WM?2f J諩s Z@Opo|5?s @!0o ݅pjk lWf|OܯzDعB~ΝBIWR6@Tኾ \ػHvTE휡W+ RWP7FHD@(j Pw::H/_1jsϚ{DQVIRvK1GDy%ΞtA.]#iL&<ͭ 棫'aHRÎ蒌`ͭᡈ,:2,>[\kdkj U`10י\~;tm_v0Yp+nT6j &FVw cyxl'zs  1_= 9@: [owZݦ]vD_&'q=Ű{#&ktb>rv8Fp˦W:E>*ec {Яv,H؋;(7Ӥ*gJu[vO]<dr1楑Z֑&*`y5Fo6f~,XmҎ]WKr({慨^k(!?ϐلļ%TuϏ74Ї}\~ 7;(@)Pg_:Kp4WyۮBBNp|ݞ)48RZ\͉Qy^񠛄5mYT9N,!F\{4<}4 ˙ehRF:Byvc|F@RyNsm-eXףb4s"aɌ^#MEזRmi?:g:ԕmwTX-֎ϗg2&nF=._*ؠx XIs̐"|@"6T>7&岧AGx7y_#˷l6jjEV0q]顏 z0Ju K;|g&bOKc>Fs_HK\}KbmQ fsE[ĤxV~2D5)N&l]_? $F}ĞHBo[;Rf:<òígdUG$*U-/QvKt|k9 2-)%}ڢɅ iƳڌ-o&futSBYCbBi^Gٱ( }8xiX=\~p)8W\DyUWCD7xVf4a;w` o%5]IɓV=:>O>fozk|4: b+A߽,gpQ':d]%xxn@1T"TP?W}Jm: S}Ey~ RZ3k*X{1J+H2Jo,`J^W*RJxZA'fٖ.!T@|9EI{hK]%򈷑{YJFU=ZCNo ̨# j_]c0)р8Ow1'rUXS%%n2"!b)"*xA {x&iegYN d49VC%V>S*S"N%pF5J>Bhc7+Do>p0N~|nOM}Il/8Y 9vDچƄ #'FlV 8늢z<ЗieQMɄUfL pvG'LC\Ȟ/l7H>0dC۩4̌,|}_w3)AO\At\q[QD?8#7wWA&͟HR5-{B4LaG{Mx$ LFMB`74 hSaaxԜ9۲nDt(8s.{)w"Vj/Wuls@nڷ B*Gt%oٍa4^,a~}Ze5Z5nݷF6$n@^.5Ui˻):N.9QYb":> !կPG,LδS_-X.7/zQTP-{HըT "3w+[yDܛw>|{=[>O^[}œ=_I$2H RH1yLK>LZZئoLs3gz0wR88^TkAPL\+Ga[O](VZJH"XwR݌%[=h~qB>ݰ 3)ekޣF쓰2_Q! sövtD fE%Ľ]PnD"1[0EYIm k!&r6G3fe,Zᆿ~N`ӤҌ"vE[Vi{:g4Mi]a $/ޢ/=7?&mDdXL=^B]\'Ž4:<-(S"Jd?l^Vfǔ1wMV‘/ 7šq+ɸamô*|[gQYDdziYeU6;ȉ| ̬H y`F_ _SI3CKpm.w(e! w%b*_};]PeKu>eM*T!Cšy0idCX}JȎ OVʳ\ʜ[4׺O^f5jڔ[5z-Jb8IM@3{ggl˂ۀk3D=>Uj]|A}O'?gE/`5o8!j{=i»EjM#L'.R!qe$i*VܔV蠀&*#ܾUՙc>dnJJ䣑KW<^r ̈!5 {Z' fF`hLsh-@I]9V=pk/~ܾK9+"D3T웙wy"GucB//A SHX!X|لc_Erc™fm V +7ǻV>6İ,WZ;rx>A|ϵuh"ȁ\r+s2T00&y׸N[EtVLZv%:^4ni"LSyiPe6iTĸc\92>YЋ6X`]`s<ɼ莽ڈp̮Z8y;{ڹVF2|#El\?S 3ls +;q7(QiYS*=ˎXv`!Og!OMUp1ܧqv oiZ$Xrr~XE8I2v'5&7MVZ K#lcHGgILu ژ)[7MJp&1D5ynr񸯏z~DAɤȺ)͙ͭi@Isbj5ĺzagTў*j3Iu!afQX-u&HP(57$ʩ~˭8H4P`a[}ݑ.Џ۝OJcOD$ҍ+ JxPyIH^[f9Iz;QT,\%Er^Uem.9ڻH&a8GJ8{9qFhPw1C@cҼpS[7J#T>dd 3PE'>ȶX(_,BЁ[ qRMXZ$:Jnr ;et@p 'qPE >Du#jh˥j*ތZF tБ kS0CVkf8\'(vR]Yem92~̗EHcnko0Iz S32yvZw}&Qs)-$3%nWh2>yzn}.~I;ֶ"A wWZu0+T3oX>?8IAt۱x޼`S\MVn sޫ)O7ÕRLXDR g _ BM<OHJu~eq7+_BdtkuNGrJ솀86r2dc֫`ͣ\暸cӅ/Gg?]ME෍6( Kg-I,,O\K`shT![L N=9Ӓ^xw sey Hc'ߔ> stream xڍxTS6Ez^{ $*IG HR H&E@@s=v;Nd34TrB:BՑ H( P3@(Bi Cáۉ8͡^(!/(@4HBR^U 'F"("N- III(y@`0FB=0!`8 AH#F{J =PBH/y^/ 0^>P'/}5!"N+ {A"Po 0xBu$W?ѿ!\08`+C _@0ă}08u0@]0yQB(G_i0ǬpRAzx@hѯ¼̹ i;{ C89)lj`LD@1A\0v6c8z"=`3E@h/ohp:"N0u!c: b}ugQ7wMTPSYJ H !!g[ ?Zg$@/e^?+#1zx-{@1 swO{<? =$fB 5zP'{`̌(!\0:CN04/- L 8 5D`;( |уc-(L~g]5kE`//?F U'oH4& pFzj,(v{607 ^^i >^}( !ZCBd"ݞGv^+1 nᯬvǥX Ċ=t%՘#詹 Fq{Ö4XjGN^@Y .)Slpm-殢$zE}*FmYK<glYD=Vl{I^6ަZfaIʝ mrF^<=.MEOV86DOť,vRN_͵ }d#uHԻE_%7-ލH9c&X,TjeL?ye=Ĕrs_w斟f㈆{d%Y]ei&fyJƹ1\FvʪJ2()z\Rı!$_%)I"s!,W {ڒ=Gg}LKT LCspu>> [WB4<۲Ϩ׆kuw$*yMڑȺHۭmUH@"4=.wO7}PB8W-|?-y;Wz6U'] lcW3B/O'c$*^H&Yd|}so9]q'j 򷰊Hj$6[ gߺ՘=zB&͗!oE;h7T3j TdvH2N4-*{47_A>Bal|^9M1U&#An@zEM=o-tSx>*eFD3Cd]-% C;߅\r'awȹh&#fZ΁:Uc((1}>'l۾ϳr+hFDS.r'i?] Ihbw5S8mSXM䛋!}G'hBk+꧉fƙn6J:Gc" x#Hj39InFj^<:9q Pup*Q9;|rp%̭r⿼Vo?l晢-E2 q; ثrt?jiKHtܱJDZyφ=dG;\ 'Ƕ6W)kkvl`ڃUڰ.b+o;,8"%qe9b:Ӝ䆉N**[a1ةaŢ,L0U'bxqil`5~U8֡+'[Q!ݪ~)mfpU¬1#J. ֧׾xMT p6/W2eY=>,RI͚i2 nI#Hڥ< v R/vC֘xh6ǧm?w%ݙ.salk!~-%8Ø0c4DTrB"dyI]Y]IK!oW!VceEy7$\;*6)O'&Ϫ&ådN K 4T<VQV/evVyN؉s?{Dv`%<"3?Wݥ7lyY_@އAJiKZ3$4wOϘiQ8WC-v `$E͠b% A[<m_V5*k:Ό^Er5F[yzne6DhlY jS2xW*Pm߳%Dih50*|FF۫.4a\45We J.w.usB+AX cO; 2k3WPRlI;t7M k6h~ԓ7:6McUCS*|&f#uΨ܊ۅn ];!ʃY㈆ "]ܲV]+P ҄">5;b"mU9~ pa{lǚs+=ll)X2y@e)3dGE.4[0޻@kϫ j8xĖ{CJG30 ϗgI,#4l1!ˈdg_>1c9tJkjĻ-Ԕ2"tϘWYǽHWYpD~6oYP+w?7`~9B4O:uʯ >^3N ĭRig:ϖ_:sƖuiҸin2́4\uv,uz[O(1罉888kڙAї;Bwxc )?F|heBlsuyY}ð 3bA}ۨ\/,I|D.JjD(T%f5?g"VddndW㱅ؙ|Į =s1&GJ!kF4;=,8JiS*j }D\fz(lo}V\|hufxҔ3Coo̙֞ w1=*I]z𑸳{"iO߹"Ȳ [o2^T}Vɀ7䦆~ʙ+hW/~d;Hkb>ǣ¥'l=2_Fᴤ?٧U4/ $ߺͦ_{3v*MepJZ1tzd!-&%~Ze- sg*쒘R Xdk^ ɮ>:fbدP͟!}"[3J6l'Lʓ;¨ rm\]+ó^>ӈ%_ȅZk;uRᯝzxrhzbÔh5w N^r[j,YY,N>`M>B'x^] j"u XH}r/ݓ)|{\ކY˼[zzD͍$}ZFUV6EZtQށ ‡O>jPjvaޡ3_9m Rdœsud\ ^QXi $}=q4I)&#(yCs(7bj*T1z,MՅcscGmԆ˜rC1g g:󆮍lZqFwcCULionݔH p^]p6ON>^e(Śs -!ZBt쳺sh7,.9J 5kJy6 ^2k͸ Kd!U-"6XЭ(8gf",ܺNkz[sT~`G҅`Tj(s\ g^ܸwz>_4̤Ql%Fayk}2"›}QIfVOW =ifB@-|S:F3@z)/?j7WKB C{!bG%kUe/jbo4C>O'0-JPrY3'{Ñ(+>'AFƼd]:|=7:tE D ~Q B O4馛F˺D;|jL0+Q=<4A,*z:.NK nviobBim`|9`jt~zi Wu\Eǖ#2?D_xX< .ujf(?p9%ЋΘO713 xؔ}1st/+x~\NOF+kV.mTaSdqG[p /hʜ|ZaG[e`EzRH+ oOI?e{咮_0>`xt*lglP.Ohc7Ŋ "{|D/Wƒh6 󯆆wov/wd0ϮȌ-q??7+dJmoOԉ=#+hyxGnquq*=:,bx\}msF{mvC%Կؑ)Z3cjCLpiں|9 \Xvsw&/"m ]t{dفg J10EB(vC2n_6K߯4e YGʎUp6.#<ŪNŸ]zǰ?gs{Ѱ/~6%u>}qw6G0Ar[ܥqeo=BXS_eԵkf nhq19Q m B@CESJ'>uq|9.:\dBNIK- 2X*=` 2*? }:ȢqשԻ|ۅ 'n+Tɟw$(3n4]>PChg +\Y%7R~(șL3|dXԺxU}㴤qP].ȣ!D`u yUF@G1)ӟX>#v NS_#„NbXm7jYy+CƉ ilW7qMWO+")_2VLqፇ&o["[ާ}KgݻP]P*I$s 4b61z+_QXk4)dϿ,!"ز_č8Yh%U V0EP|8?|W}f}q|yII&sUDU/wr endstream endobj 34 0 obj << /Length1 1429 /Length2 6493 /Length3 0 /Length 7464 /Filter /FlateDecode >> stream xڍuTk- MzޥCUz'@(I ҥ#tAzUt|uZ;3{f̞7tye8 J4 ( @Q H(& ڧhB50+$HD%@(7!P4jpIGz@P>?q@<rn ir;ٸvP_%K9P ~~ooo>7$Q E9 H2@ ; +w@yx@h+CSQO00h^;BNm983E,Aqt߉sB œYN'=KJ^V VXh7Wytb^b6Q}R =9eOZon"TFLm ׷ 5l'Ŕq:xҏYH>hllH,k jq8VdI,h)"4p-s|!͜Oh\c}HHnY6!knuf!T WjdkB(CDbn6c ~%H[+S>$TR\´^ 5-,$sLb>f̭݈jɧF[|uuߓV8gqR&z#FN>}3r7Y@5D#ϸgE-#L>:1?fIp@hJ"HU+[*'6H|ZNd\֫V٭TKT4ٗ"):̌ڥ *oG~-V5-Lb<&BN|O,bޑ'l ?_6:<{(\~C+RlDM]x}j%hHMiXia觺VN5 TB};܇h ~"a83gI?DTe\rByC!Tϫ>qo/B,(*FmuGƦK<#\ vCz@z1ɎԖq1/n2bSިDq  II0//Y:P԰Ga7aɋzɼNuymvmRϮVQt} >{f xC=-"dGaT_8Iy`kP?s%S9VSTu+}gn%3z9&_|$hm+ ;sdz;JSSN$Ea[53=a^J+p1+,6B}Md\,4ތΕw)y)`A*@HSiv'>ͣ {Am!-Icr`7.S.O:3%I] ?5r+-9)F?wwbiHi8o myw] 3 yLկ1&,z{ށn(XȊܶ DU9yG53jDsAbOaHxRq.چz V͌RUjN2\uCG-Xo} |FBr\ds`?'!lt0_ #кHhѥ%:^r_S֢s&̋: m!8?TQ \R1 V-3Fyr7j;CޟT |{t9\VhUl{0tRp4zuPgM^*__U .jpf,'1|]GYAz=c?g߱R-, aId~S*PVs>OǧVhޭ\6 zůlZlxF"I"4okC:/z\ ILQXGK? )ƙe3Z>B+kj}SDEKlԵW?(z9R|[zxeO-N2"+#;qNn,IKgaa^}AqNڝ;#֙OB%иq +?1n4H/Dhb}NֶGd j-Y)YŹ`1)ja ܃ـ V .Rq\q+TFWR =fg?ƷOO=i"+m%GzX ]Y[K{'܁\e UɵIӒrs=  f|#dభ_&_#2tp`&ĉj Xas_8*UHҁ/YN" ^eU2Jߊ:x*K[Qg6)n/[vřΗM 6g3x)[izĦ!_6 \ G5nOւ9$ ȻI" jII/&2Y4Zd]}cC;W1oS$;[}LhW:# MEٺCc:iGTgPGwZZ$jiMh-)h X@ʫF߭0Zͼz;#RyL<|Q{%ʓV%5y xס;.lb_KIne͔&('7Q>lA@L֍iLd j9N+-C`CJNW8$'8,p+3-2sӓ,\m˷VݦZEJv,1ٛ<1`CyiG±\Vr݉K/֤ȵ);$Uj.KҤ.7uԔe|gWKA5aYчW[WWU*E -=ېRC5w.ꌖ]Jq/}qMj@/7\Zδ G@MIMTW7Uy_0Q.|pwZ;.kNM/ZBU^8!XNa m,Oq %jЀj=xyC5e h"cTcžd|}Z[ѪdF$~`(%v BQ@75s3Qg&M3Rۣ/_czɉnjKk3nF=D"|XĂ12pYd91ڲh'[rÔ5lLwƿnR>8"KN)pHki}7#VLLW&qE]ܣfݖw%U(yUf^")xΫ x"Q̊p_J*[ۭ4.-R*--2Q2^se,rbحom$$"CNdLs# mdlcMga/&~躴g"s)_歡Ra;*$ oоnn|L65ؐԙE~W yCv6آuV?cTiEeS>fhWs+<["]zCdؑt\]~5 |zWT*#X\!d:'K#cfVbאe5?NWp{帱#I7 챖Q @KVOɨg%YK*w3;㗄XߛMx3kb{ܒ۾X*mJ qܖ`<{'t >@A;l"GVQUq=A8-)6a٤F$ ODF#KOMѰఴmbm@¾[#XÝ,!Ql> :L+QtMRr _Fp- ݘEdR+b)z_b&`0sju;[ vu zڕGI]͜h'@!aɢZSk*},`$S6Pavĺ8j߱2 o'@>7etLr~.hQLYq-UhȔRjC?Uwڼi_[#ݘtkܗ $}V]y i0J^ Vr%AwiuķT105!hų񱺗UǾBb.ЌT2ti%~ݖsE@ ?$HXR/fxwPPUamʒ&CL>߬5"".?#|+J~`AI~Yէuu!OGQ"Bv[aTHdi:==? iz} h~$w+|72piE:|zj(['vBX-76{VT*RϮ:Lߢ|madqpoEPɮTʧUU%Ex)c`m/¾|x`!ͱrTqNh*%kQ *Ϫy_h^{BSeq=wQ%L!jdz1QA<5\5^ajJ9G\g$y g**Eρqrq2]'R;e+Vgq endstream endobj 36 0 obj << /Length1 1606 /Length2 5064 /Length3 0 /Length 5856 /Filter /FlateDecode >> stream xڭTuXm;E_NafafJT@@ AbFBJIQ:S跻^o?zss<*B"Bb¢sRC!(Eͭ0$BP‘97DaNXĂ_P_!?<xBHAMP ap(nhdk iP FpЇ pDD@`JT1` ErPP 0 !` {@~ H\·3Bb0FZ:rc`87tEB`_%`p^,X7W.(aPp.7 ၁!dp@C@h`pؿgTB>o#G q9X\n'\נ"v>O(w~ ?D}ԑ\ť3w"$?#o_cs 4 gN #!\ :O!o[wgG{.q52nڭ=z|A|)A cpGSRֺ)B\@&=ҭ'^8QW[n S0?,e;]Tq^(>3XϔjbG|Gʽ\ꃞ!\toO$b ҬE)z实wEtR WVzq+.IO_/J_tN96]&Pf9mx$A؆)qgr+KZm7 y؀-K|1.x'.*/ΧVp݋CkK"юը]VJ4stC<°P=8+*ڐ`.s↘D0} S#r"}ϋ]#cZę(tx {}`ﲫI#/Od U2]?hVoԥ-hHy IL&tj =]pVYB+lQc,5Ã3ZCo;weZkYbCDzmں0xq ˻-X:Y~M+>^Eu;%۫DD(Jw9'h7L`չR%f(}HC^+Fbmܥ3|cdaǾ]<;^hUqv;<_s(\1։L=LVT2[Y?$T;vqq_VS,C ߄=,K2b W;"U/ؙ^3H#fNQe"VfS5zbc$>?KGGN%K=n<^ʟ,Vod^;38 ivݤT$ }C; o](hs^EUֶxrN*>GiY&JV#`TB*` NV{>JS e^:&gvb36z T,_~*>?+U~A%i:`ʵr[juy8%#5ut+oG/K ƉFdds{mr','sRa[#YAᇑ69mxIYǘ0+cԼNaZ-QŔ)UofcZBDOhiB7-1A}3aYiVb\PU8OSu7 4w^:ƯVLl3Z1;~դ[x/^s#s!_Ksڈ˃C$iۛ͠ooiH`dYi0>b]6Ż"F%Zap)QL<%AǞN\|ep l{zMժ-=p m{,!G(keD{Հpū8MG\BtI!tf`]-?Ej(}VV)9A5:mJSX)oW<\]|,RŠT4k>W{ATwue.)>w\nnvl5+ϫeǏo<xyo$IdB:;4;:(va4#2 C7 DkJgt"k a>/u9džF!grl7oCu0 M'Qч^#ϼ߸Eb]*|Z6YdN"|v #G g3(SF.4%1wb &ۃPwU3xQ"+x&%piՒd)9^0`|V"5uji3ZXl#71YU)q\g˰5un4qLxO黪zG +j!{"6A2*d|یLG3%&f ؝q.7(*zPX.}=}D[ƫ_rCl8JMST4y/  /d3P""d"62kCq+U3/oZv8/\߯8͈*0k-Jξ o rl#7GlS&ym'AR\?lOw. {&,邟`ĺWU6xuT~ep'Rn\Va{]%}Îcshw# o?zþ;^Vnzga~O8bY'Eĺ}߸^νqwg%Ka.hHDzf7.!<xշj*`GNN\Ci`;f5e)Y+7wؤ+: T+ɠ\f΀Q>~sjӘqWF5ZTOd8NAK;/DZc-yk( %(Y} svh9 VWj'BujmI '#+NeS"?W8 T[L *볲UhX*,I@SXMCW1|!~ ~:{ wZ"o2^8}KRmpO̻dMEpm˽s}Y#Lы0dx7m/^vn IzD'cz"hF%6rÔOcNn19 Q?7dX{~'L/9t p2M/uK}RFxtHfw3dښD'Y`J7yW 3z-E)!QNnc~ bT|(e7Xe/0VCdZ+vx)v:1+&I\˹ϱ1lG7= {K[ yM%HJ:HL gBQZ 4w#a[[5ca/t|xO2T<*ack3^rPZ{չ8g^L^ŮG/GTk/]k_2eۊ,e+9.,pv7CqPn8| i ޢϚ;C"T'G.'>$  ft)Xi߶+L+8S l&6U|ŝ%6Ҽ'ëĖDo81J [Ͳ-a,KDMEs*O8˖ȯt48}٣`(E;-$%^ˡ‘pQH7[0tM#߹7psv3h3A3CUR/3i #w[:c3n$>.`  #N8!-7~.Mx&Z8S}WQ&[޶ٖu[rFd̤tطm'<o_?w.owJ0#VN}⃹h1mQoQ^& )}k&Zxf[H8$ŧknf"KU߶ GrgR*}}5: ' x9c|aPthfQCals4+w*tX<`‹"&KEIb'5"[3cURǘuX\mg?4IQ jm)&dAMφNNuo қl)nI1{SI(҂1 mlag >NFߙ+cӗic-sd.hV87RUHxU#.ݦ@_kDm:C90_u 4wz endstream endobj 38 0 obj << /Length1 1612 /Length2 12921 /Length3 0 /Length 13748 /Filter /FlateDecode >> stream xڭxUTdے-N$P8CQCU۷ocX3fČrgR(1;%Xy  @KwBhf nh@3++ bmiPբ?=;]-@;G'{'xp,1%eE)@ t1(Ỳ@  _2~bLN@3m@/3_.z` t1qp쁛#/v ǿ 98~F>]\\Y%ܮ֟ng_%X;܀^n2̭]L?s9XM_ .@Ks;''_WR߻On@; F8Ϝfn- G ?Ny]n_3CI`cRttL '+'k_ywhIw;;Ea;+Zȸ|6CSfF]%nfV Nmp0Y;?f[Y:zNS3IiiK(wnNG\!*e< l\τ,,MaXV0qs}w`$57O_n3wOU>s^@3G30l±qpfYQ<5Ư-sgNoGXvTb2mn.& s8%]NfͣUW(¹n6' 2 G'̦DҳsԟOT#ct|&g$in.f<,?d)G4T0nv;J7M=icʖifRܗK"W["ƢӬkx {#C,=/@ğge5.ggV60 *숃YB5'FTRLz,+3 Pg,*ZkQ9cdtFvT3lUD 0)!全jG2/bUWSteA䜨H-pL(#h%hSV2"S?ɩ4O%Ծ%^A0qq'H@)ɥ2/aF1fNg&qI⸇d/5wbph"R*VgQ4{e_t}W_]E:p$fOR [Il b vfTw=G-P?Eb< 2(]8O#)FtTf/K/$l¶0V}+Ły>. '|陝\עіn0;rS\LE$][PA}^U"/ivVDAJN*ڮr  (ʞVZM!$7 8멕ColгF+r.Q,iC7O4_ 7<{TŸ)t"r͓쇔lĔ/fWGmUݘm#|-&-q1|z~Ejs̋ Ro2I^NEbښ1$(+2X%w(F*++l˦ӈ<<%g @?kۂ9{[P5yWԘ<9TD狟{ ϴXBrd(䝜X Z䮢T%g3rgPb@m}W઴c>$hGc"pkJ۠K1yDACNه-&GWU#ʅ|~NXF].A9*61js95YS^ 0I9Ybs7&豍+ǃ4Q$|@6udM:[ xJLy̼: P6noS۞g᯲!ùW=IT1}`o39v3k|rd &OX5갩zʆǰ5U]1f/YׅByD\Xx6fHͩ`LT .K#"` tkĄ; xol6T9?R{n @)#A)}%$*݈^,OM?>}d۸4wsN-#}r4if W+R6͝U#:I-GG⍏Wxc- C93Hrd0G;3OpCUkKKoMW2%5F],< lOJ>l1' %b|q#A 6o}jd!)%8rB]l1;x> T+r1ɤw2C5gS.=Q5q-^Wi#EFK7RZ&,JwP,#8 fe,0ڽPg#5=@LQhG_o(v'U0}[ܟ <;5TXswcv:ښLCߖ niݜ| Is!2Z䍘apNJwRD8?} ?h};5;lDϡmeI4Dǧ8L$# jq0JS껬{ޕ8O 4- Mv&9)4WԈ]SX"NZ['y ]򯵻(i11 _1W\TY{J^iDKfFl #4`>*zvȍDs lJvimX2oCb'ٚaIgw0WZ!{h3t;Hm$~b&kve[BY 'rO wKGEo+GG,JYruM X n?,I6vjY`ʈ`kV;F+̇Zg`_ᇊ|:3XDpP⛖r]TTv/xh~Vq㎙4%Z6a_{r^/,ɥ7Gd3^H)VC9KmV^w/&۵ǖ$'tixj";YpOй4e[@y njjI$@Zr2s7#~c4J9҇Uh3v>v }aŶVt$(WoS͖JwW5\" } m{2(v-'p]qzZ- -7@bc$1˝]}h$t:x&Pʬ%'vplu E`ma} b̋Z7GHՓ 93ry'!>Ⱦxf )tZ.wy]ŕ}2zژm %蜚q6xG +*]u DxtZⷶVw*,$)N'@;JpUccdfgsE[v/乧56"~?c4OiG'+wx9 =tz\vL'L6<)pV7 QL͜0< QޯuᰬHDv E0j!fOw[JSŞ3L/bzqm|DZ=;R~e{¼(R+ V48nr!ۂzi7i5Vly% _j87 x39ܵA&;U{|}P au%_gd" 9]-kKtPG8Ud2zHG+O{x#rాa&I,)yCa5fo[[P:4‚!I3QwxS-=}#[;EopsʜpąW(a{B-s_a7VagksXoyc2Q!bT[Z]O&W[x*J+#^ R r`9y耨&@mmMɯŕfk,) D;۷؆7R꿖A#Ifa WgHCKa1{8K=7=W +:)-=.ոSW~~pe"&6Sϟ{G/,z@pٛ4smDg1iOІ4,ijR~5a(,i|OGͦ!AHrb,9k _ZX.wrS4`*45QzkJqW"<ND't= bZ[2Go[}ϙ42ai ')l~LpMьNJ~ 1!r,]1:\ϯ!o,PҔ}16]ӄvn%b!. hq#P"E+ʡT3UّLn..W RP -uLu O36iO铬6hjmxѧ/عH[r?+rj=Ͳ7"&.oi曬CJu/7㠥/rdkfAOܴg1钤c֩$MY}mRt#\jz'K\’IWgC-rij.t8<H %!,84,sRc< l]r4H`D l Ϲz}%}!k HEM TlF7|jc: 뫨M0_vFZ!~'6M\Q0Q99.C2ėcyqʃA Wxws뒿wQ7-.J΋EϖvTms3 ,">{̠I|9"kӖgRO"2 .yU;f "1QqPBPT̈́^RcnT@CYA[$ШkҦ4ζ:6$kk뼌Xڲ6-qA6{յ>ƯXc p# mD\ tvx}_M:l#直70fӽC:4#,RlSC+ߠڪn-J6LY,MHN˷-0-C$>IS_ &oSaNG o w%igA) /3C Q7sF܅Ҭ*ڑV$ tSBY4\t)Cț0fwIi㔌 o:+ԛ!DVk\#5, uxi9`<2r\6*њadg9 'c)H Eb<v˛*B^jǝW&702oD.$y6\>Mrl^LA@٭;r[(CYki^VWU4%/8U9 [bjbk*o`.$uO4aue>믱W<%&4` OHS(Fݱjp䞍\KțӊW~:@{(#}j %r< =K?e\[E[A%WG(E-)W;;p~+dg{Xk*\[/=^Սa %φovMz֐ڥ5Lm3rSQ9e$ej4$Rvdz#k1<p_&Mk 6fD'U}rcpW#SL/-u(|9t'cV,*$> r\y&[;jWC9"", U+ M-EPIW;NQ )Q#L7uv>隋0iwOmg H8r m 1d+|*=]Zw/x}X-w(r}ݰ1Gd9PlO>tȯ?lڴ36%KqξdWxl("neˠ`6ͩ&HxANn&2ͬ тL@GwɊ#&z s|3vB~`UapZ.sLZZ?hq-8kǿzjV5p8Q02}T /TZAj\~6O+Ilߌ`^>`d|~<" {Џ3Q@~gl1 VLrU o@~U0ZA Aҕ_zHL i /1Zz{(X@~ԆiaXl~=$Aqsɢ=g0%nEǵ>E%|'l3BtkY[R&v6͢Ȯ0q_L[޶e1*mh?VUZ4!~G{]F #̩.$l:6祡ޡbV%Zqju)C+uS ݌K06IU7ڻb723׮V(/Qy㝍kQk,{qBހD)Mæy[R yZS/q\JXmF^füxxً" 39aBss"@lG5bqp.ys?*C,߸xYYkj42 _zA1n+ RuY#l]L]ⱶX,Lo$q(_1GO흇lL:ccڇw!޾Fy hW'&lj">`=(8:._Ic-eNaޓ$F֩ ~(Gpt֙զst·y5'o!Y.йde+bV&Wp/Y+ݠ45O8 3ٓMQeLL6.ml3Ue))Z7~ØD49AppS#0⾖yA6]G.jQ̠p3(LS(wj=lN=E[Tj67OF>ϐZk΂QL!qBH{Y:’ 18C%VΊ7J~ᲑJ8b[x; :9D0kdU|+Q1jr=5<|g'R9 sJȞV! /y|%ݏ%AgU=#Ndczf;yZFJ/}}`TT.Tq;zr*µ>fn2fNe7iC&{v{bġ7Hޯ}bY)FqVX.I-Uki`._Z 73g,g۶S̓d3f3)z){r(X !va)u\i[-Pq@5.\[f6E$Ju;u4* EyapGdCMHd}cW"N|,.s/ۤ1a6V8asOqࢫ>o1'-Úrɾmߦ]b(pkHb^—Vr݈l a `r5`%'oX[sL/L5źZe#ϥB`VܠR@z~C5D!P("g}<fF;GKt-Y$: mgg`iT='!h 16yǐd\{ET\l=*HV3[~ж.*Xk&,D4@ÄhMW vvz]G;^lEbbü4]]i5x-xH93DLCw^>=Ap$㛿UX6ɋY{Wn:xss ǞLJ2g4hL7:%GuZ˷kt;GBRќ{k~0sf%@6,/jF`7_! F>Fm߉;zyļz/pwE~[q/4_.G5PHAs&O)u\ŗ{t6˙ۘ˕ bkIAZg! Ze1 5Ȏrd`N7ںTXB%}QAq1{m,׃YZ[gC]/7*Li=aM5[Cɱ`^&R;٪:Fol_ljWB -T1&.3b?kkOSkRNy[M0G1Î]<03ZW>S5-FK!.(Q^9*}o>X;qH\VBVUn"뀇iZW7aԼr.81J 1)8 4oJ\{ /ԉri0Gn$0N|i"W}Oqb!A<3l_,nDXT;{ AP-Avje޿hW\Mn6r}e+:|qc&#$vο< _mic&| ],V{MdXb+7qk s>ybW4xyŐЄpE͎r"ն6c"v 1#c鎃Y}P?il˯0'гX˭n>~=HbOopHpڸS2_^J&a: 9}3qB 2tNq_Sqx ?S6߿gA͇C| X/[jI93txpJGJ8mSMd s?ު,Q2w?zE:*8lΖC(TChD[ٮ蚝\h&?Nѓ}N N@teB- a2٢0Ӊyq(4ef~"28͕Nb3/%2V˜L8@isakLQ%5|sT);NwFz M 0eՃZ/x.6ofڽb#^idUaĨ_a2FONg*3Qj FWx5S($ZdZ>\)z w5NHC4}[i)-_xX-v{0bi5L'Qv36fFsl秧Z53-]ў݇T%zkua0^ <4ފrj$3α:]yM)i+(glR5_p̲P- Q-# .32(_L\M*gfσ[Gfh u\4I*- J%Ժ\aXNGd V| K*4/g?oj*GZirwjUb?bq4! 7j4Ԏ]gK:W6Dmb;B+Mno<toA.k`aÉHu\J-NxqR.#0! `S%4Q$hDdsFb5$"=UeNyq=v>XpqH0{saq3HE8ЩDn]2ԽnZ"#`V/R8ܵmkzIz ikXd1VW\Ld*/gC\9! _o؂JsJVpmec`Ò!~Ad{oZʭܙk4nl‹]E[Q@R g)Ii"eb͊bu$qQJB#~o01)ěn,04o;/f_,Ь _[~ lqkJam^0WSV5NЩ %EeUƚ$ă| bE_c25.NgTDol2~Edi(Pwhޑ>RT>\1xk;{?'CޒytLVDѩx#s 7NNi!1iګs] ƝiCQϹYә磉j6q^ ${,FeT\uax9Ygl1;*~'uX{B#-ND|I .-j+s:< endstream endobj 40 0 obj << /Length1 1626 /Length2 7475 /Length3 0 /Length 8303 /Filter /FlateDecode >> stream xڭVeTiA!%f`nF@iiD@R@Jɋs{r0k;F:5MN s  T.*BJ (^Ώ(!0i3DHC.#@FX4tX9%m0wj0B!0}&@XCP;@JUMENE Afv5s;(C`V`vY@ % 08;B{7 q8BPgo`7!{p@a`;9-u`8Ϫ&-Nwng`yoiv]}{- s H\>}0G8 g(_8p|>Nb"!v@\n`}n+( Y:A-\s4̰ރ0pٹ, \*-[we]T?2f0(~bfsߜn uf-YBeHX\ fAa{^ M &/fwTϥZW8 `0H'' ~ qlCA߿^F #;XM~)Y3Ɲu٤f!jr?Jvs ;Խ.rM ]zkz] mqx9Mjܕ GMړx9fq ^ڞN*H{Gu kL6^8k1ù#8] I;a= QMS9sc *F32]D)|qEkQ_a^ gКlY^ ^9I;(RXZݥz{V  J]l:]ƥVlET=dxw9C%̪I '-z"/vC?iп܇_Z<}3qڳ*,F]/9Bn c(9Qfߐla\!hD/OEYu+̅ɆΟ\sVMl/㒍Af6WuO*8D)~RM*HAdDi? Y- 0'zIQ@ ާ<ȽcC\)Bgr-pwP GP8MLԫ±i2l"/|_2WX< {}֝!c9*k|cj7q7i$_(k3}.k!M)|pI+ 'p(rm| (6?۾Z=G1Տ>kʌ^|.[.w;l&]C\)#ŧug y85)/FZ^TAt unnB:d$H}f4n6Tl5J] \;َ%tgRB&(~k8)=`wh 7w_{ɻIW -8MO^iR c%ĺ>!1:#vBJ6jڪrc(-VV$=u-(0yz_(:?~Gw侏m5~oǭl*3(^x3_ddڬ P^Hwd~2 @gM4;,AkaȥGR.l r9Z^zffưsLN3XEPPTh)9-2c|œM1uE`mك~c҆etaݓeI`qC-qsZop8OT&5#|AG萓?FLѭ5Ys4 ,sRksMaD1qLl}=ٗeM,2g_뉣X([eHJkQ17PhϬ%jR$Vd:p:dؼAWPr"[Vmc,!3^ld`nB81.F΀TfD +޽VqW8/2"q.+LL!g:rC3}̏vK]qz^b8Bt'#ؓ~_`Vlg%_n$wz~Ek:k6̄+I4 Pd݉KE(3/W)!3ăxBdiW^i踍*{̒L#/)4irq޿%Z/h5NLJMIZ/hLkWO"Kid y*8ɋǠGm|.uc[*&>*9S1֕k6\ݑ!t5ZtHbJS+eӖz/U*B1 ^-7 nΕ ?n}'T 6~TN(&"̔sji>'PgTW*"G1YJ&J 13ԌpJ '/}CuCxO fsy^Cj 9c C9 C-9=8.ɽ{3HψPnU> 11?uٷdY )LyVՌI[3Ia XYq tWR$IPkH?XjF[iYfxe"5vT@Ǽl"(2dNȩ)mz]k[YV? mY9՗8CNUhHї{ϙ-T6hN,~0!"(CC۵#^^0ra,D.U[5t%a=EtW  N,j)oxB/f vS]=dY@52_zdGFc4c.}%a; ٠]+瓵u>QeYw7Awf8ʢJj{ 8ȰZmƃEeRECҫY7j-yQ^p{ "q_Ls nQLzCL:~ũn戯UGuAG՞5nJ0b{oQ٭ F.ݲueAغmcryE 13}/LD]]\޴EU&QTm~$߀e 8R|s ,8y!_8#?w-:UXgT ?LJN8goT;wKZvňtOsNqb"+'+cET{ᇬN\ lz~{$|՝ ~+>2s'%k)0ֆ3PB5p'hFAۅqRMxL2f9V_.zF2{.!G6vL Ɖ5|\,5l,jh¨Vk UHjO=`hI%>~jͼ]{jWiK<~. aaKdoHrq\Vnj#W5SUb߈d(}K.`&YYbX)u~ZN'~SjB? #(A{Zc %{$jlZJ l명? |+]">10,'"侔~v**ҥM(Ӑdc-X!1`txɉ 4:0' ? Ɩ?ך}IG@mhQћȒNLHҀG@?C6cUuګp.;~K5(ݒe/d#&+ؘIJ gy"ƾ嵙a.PZGT{/%r%ݔ*z55{de62zKs~Npͣ-9 çKk8zz=L+[oNUOi߄Ik j6ibgRoL~Ĩh=XKxe1-m\Kg<~^|;IIǧGs= ^zaB;a"Nv*=Cdžٯ:rⲳke K%q[!KT34H$p>KCHF&]ZuK[0('g#c2/GjtBu߁WIG~cZRYܩ%bzhyJק̮4e'hki&u3{ҼDrYO~UFY܌h/?T''شDkBA E 6U#m,nv8oETF'ZʒO_Ri1Vvu 6ڔ|E`o[OCKSEFpjHm1*2(}i\(N0|^OWnpWw>l;Rf~Z]Uc>eHx[3QW߸OuUawUz[T O7:b AVE`S?HK>5: ;Mv|~n>vsajN>aP&<%L*x\wŽ:iÌN,3ɓFWԔ~Kw$O W[m<>i}EݠĥCxr0xMm5TLj]¼qCVP76lX߼|n&$j,I(̤zHǧqˠvя vy3~zu[5J_n'%T_;-CA݋|?7>(h&͌c$?O|4`a!wJBpR^ g;O~nOwhH nlY@Y^= [gڏ¼pzF+:/D=_REky_x5e/aȌ 95EZ[ koXg<\8 :ZuE5a*cWN wXJjD!c'wKqU17TocaFR#^AQiW-NHĽ sCSĄMnx,5$+>6e+} M nt㋋J8f]l]9N Sr|ӟ<7;0{t6f~<#*zmН'>o'py -uTpx$Li; VE)g5\DW}D8E23R)+7oSW]Q6I4Fih3ֈ暚g~<.(GWMO՘ǘa$sAΦMy{Q}XRp8Ӝ,nFw;zVBL<,OŠ8L24ͪ[*Հ ىtsl#{AݓCbɉ? dٯBK\ooU%kBc??y1X?Q'0J0mdDe/c(4TzǾŎ ez@m`͇zk1@N,RcP8== Q gś;fv7Րmъ'(Hn0>K kV ec.m<7ow s[m02|D-_2Hc?\h"GiJ]8_|f]aOcWO4Ce`N<(%bZVGF1e)ΕbWV`LUTq &{Q\7UR0_"rk{Nhޟ0ĬO'Uc_p?5gZ뚌V\ݨPuy^ Snunw`i|oPlw ħoN5h8xOh^xp!rmk&=&=o%{v,RN:-l-IhzªUD[k*b_jt'6ίK XIAt26ADMRu&8z,A% XG>MC1>l< cK$(ˈQH}pzamDkd#+ۀez9Z\9$g3nF>=-z`o +jQuB ÇV(b|vOU+y=PUGSIrBꡁA;M!ߣuQ~AΕtxp) "QR:aɧhq,7F/ܥBU֐{\ojh1Z|vYQHǶFzՕuMp( Uۇؽg鴋g {Zczwؖuu;1ӎW׭*'bwMÎ"[T+(,G=({u endstream endobj 42 0 obj << /Length1 1630 /Length2 14209 /Length3 0 /Length 15053 /Filter /FlateDecode >> stream xڭctem&WcUl۶VlWbTl۶o>=Xc{⚸=؋DI^ db.wgf`(Xٙ:@r*@WB d/fb47XXQ@ICG?%L!U. +[s$ZRA inodl Pr52Y;,@N {3JsfvM>=LQ}8;Y9;@'c{Vf$)+!'ЧݧL ld$&<],]l,>-@/'̧bO,sgO0'le ́NfΟ0t?/;8z/3gLS@+{fE`f?tnNj?3C󙄱`fnr c῏[or_pU01|Eck1?yWkMv1l=& %<͔\L-ƶ=\@_tjV6oϨ*%GY2T5OG5 yFDgгp1޿τY|7!gyc'+gL52tBͤ4Ҕ5"'9j R D %m EwUf*[AG3G91 i[ОF=}HYo)XLm@vإ`} EZk 扒Ρ~lܥљ*<+h4y [ Y?-yV" /˖s2gRM7Ho?U$%+c'0pɆC&2a2_Efސd{,S_mӉյ{ʋ5Y{_}H*w_mqp؅1SEA4 =]P6gYhb3dZE6.С(_f < 2ЌNU)iFV'UW$%VnfRbQ묁>_UL }&z+|^TIjnk,a !A>Yl͞ m;J&v(ǚ^Lܟ2 n.Xb\ eS7@`/U"oexwT"ܛz@ՄԬWY)؛mMk <1 ĝ.HU+J.^d0>\Y")jzX =Ek K>!c37gCo :=҅)ёUvz3D]o:ܙӹ=X~d;D;-="nȤ-FzS*tR)߂ʛ;⦏TSUKў68$t*-)=SNVQ;Ot12ܐ'/źF%2@Oc)- ǐn'dR*$z ɮ0'HE 䪮>Mk7ɾsBp?]bpg8VLvfs20XV%M{͓M> .79 ёs5$WL AZBjo'SQwGJ-<mO$L [eLLx"$< Sm֘6XK[#3Ra^4ARj~g(6K6tPnsX_VOt5iR5҃҇4!{g4<}ѸE3so%e};,epS8b-u NPS7'o0.t70b䬶4e5QԊJA')LAb;Dy(L0D28׹U~28/;"a۹tOtޙTMU>aSfcjg r m@Ӹw V.II^}FLJ ]p(nv>2S_,@ױc3 (?jZErbOaMB3$۵ |,}B#4< B$Z50úQ}c `kgO#, tn5ϕwaW~_bVippSA TAݣe0G u{_qx⚆H)~|n6!u}gvݮbDS$Ӣ]#3UcenZBp4 .*/P bu+fFpړp..r-)\Z>-~bIɖ n<ܴl_;p4R3=fmUjILЦlQU+'%^ӄ%=kć P {ɸ ʣq7O->sAY#R"N?$B>kr?wAٮ8T#MjriVw(G۲*|qREd{{[Ңh}?^q-M[oV)CF5<I(MO7^C$.?a!6T1^S#ES=x=ES\m(d\k;/ +ܥf$c3P̭#3 3+҂͜I^8(F6"._v xǓAPNȖz$ ŃWA8ܛ(yjzaV @7p@(e[oIfA】%4YwzvF8@،іƄ1Ń9GI `H% CO6Ȳ|9?z{-#k[ls( QtP?+$\ ^iHžY%Ȋ kjo&d09Fa %|'s?t{~㗮ut2JpCsr1_ڥvb1"V_I#_r]a[9<;s"]?\eU۟F Zx1OpfFG<<ƔL,4LYT;Kb#e~V)I 3"2jd9l2ⶕDBtf' H8,|/d"8Uwea,1PĐ^u\^]b2{aZ`b=jC__gӳ9$ZBe=*{Bp_$QmcKӍm:Ʀ~,"s`7=  d*ɇ/\ M'(?l?/vy|Pou(\\)[G'y|G1mN87K'[ Ë1JTjq+/}զL&Qe4VCc^[` PY_"Y1bU8_:{Yyts| %U^l̆(!dT֓ Rz\h¥N#=WiB݅7㡦۔t!$d/fJJEi7|*·mCܐ*\ 2 bIqޛ[=?a|]i/6lbnq/Ig "adÁZ1 CBN|a!nį;4ksٔo~쫭e Ivi4r޼e8& .PvUOZdrC?&x]bާ@l]̫X.v0aX.R.ml0T%Q''~Dc&+cA RYFG @x.~٠ R y8zG rО.OC617\'G@ 0ki&=#JQ#w0ɘpRoKZ0n{O4o#&VHRF&Uҷ _+1%LVbN}Kɛ.iP8˖ẚM D,A>wJxm`?쉎ꖴUEc*V(:Ӥ j_$MZ4.>ܷa^&}6-K *>A%YՎVB-SVE%Z{qGQM/%jIF]iL)!̌+BdpSaIq^a.\11m(Z?$$Ix0(K>` =ŃPW=Dj_mb|Afp=#zIoz2Vsn b30tb YO$!e[݀c)eEFƕGg ^UAh5nWZƸw^x!/A;oR RڽA,l+LJ("r6LWr &mnQcX#At7Q C~= ,\M_&Kz\IppX L *@" .+&[0W&V}ty᫶pb_Ö嘇]ϼQtaXP-&d]U|W h^VmVaax0C0Ӄa~Ǡ 7+#[`Zu%>hCnܥM-˸Iw2a7X#R8JFˈ-)ZyXn;3?h(ڱ@{lj:Q*kVIMr^9X$TZO>eY&X$3"j )K#j(a:L̦Los7=|ϯKb\Bah}h@r#iKNX%~V)~'Tц3m/v=la`qOUMO"P*.vQ-T} o臞Lfө@<욏@#Dd4S/woA{uʿ;3jKu(*f :H=YH}o9%\rƎO^C6bY,}R>FLsTɾyP.4n6UfPyݗJ|aXvqx3<6D/gUO&N:(sڏy4?걐061&<`:Mo\0FR?V,Аr[kyGF6\udZO.C fNc}ɵ"U@" Jt]-R^Pdmv"i\{*(NQ'({y,MsRB _⸣er.}N.$Y-kfCChܑ̦L!K?JK)}&30d}#:_^!?>,M3"^l 9ʞ se#e ZhF65v iY{$x&U!?fz7vBFPҠ(\+ZQuǮIAn<'[՘PXAMK X Br%8r0WQǗ`d]PJ"7*Q$j5WFyiVh!ql5" Җ $q0>Ddя3Scaw|eW<>^"=8Eg&ã*c^K<^-?s֫j1<#mdG||jqjɌln%9)D?_ CF!*ˠ ueO=fAa9Q eZq4g&'IMw{&Z 59qƱG 2 <DQGCE,SEhH i{\}Im\;\U>Rh78h \vḶc ή16FXyX:#;0D%pޅǒ}!3z+wC6 `Q<7KK8+&Ԏ gЉ!5>ޏzBU?JZ<Ʉ4Qج,^([bz;Ԍ9o}IcS|D $woBIE Āk^,f0LCc u˖ЀN~^ 󅺑17p:ˬ-.hk*mMoft`צZ͞wz(=9$~=r]V3=78b2N0Ѣ}X'W}F1wh}<5p4@s߉PrS崑/0BҨU9i/$})h9F&;>8'?7m'+ 㛧mσ*L6`"O 2\sZG!EŮR_a'ߑf5l`Ram'O["OKM˦]poT KAqƛ?c!zX |p.Xhc rݙҢ/9Sx Me:hmȼ}5Iڹ$bZ*ހe}8~pgд$޶`<_X.]&;?ŋҊDPSre7*UM omC= ~_n]e+7ŵTLH ](" $6t 0{nӜ<m![sD +Ǎteȡ4O-D^kjA?OkUB)h {>RZOAnX /A/9K4퓶3'fO)(p.ZG rRUC&DY5I."z1qyȀB9TfA,pw> j yې+Fʼn 4kj)ǍJPcq$Ń9ncCNBᭃ,F*C˝ov)s]?vc`=(`nB.&[~]?3w[S%}h|VZ9 `:С O; Y䘘⎕#㎽ޓq,21{+eV'@WSLk*.&hg8yV :TFo !*?@(5saE(_*ksԸ|̹AN=n\'>l[i%ƺHj7:_e*j0C  SZ5)ؘ"K~cݻ/r+ * gd]F}Dda`6aᜰf%DyT =›j(XN9ێt 0 r`RRϣⷭ$IJ~#ҍvr&T?A]zx8xh:rS3,/ b5}0,@eU.}qN?Tp }6)aPWW'Qa1LAxzn6` | "7bf:QڄoC eYrH9`S Z ө3an,;0nʉK& dly@G`aͷh_5 $hKBQ8}a<(/^CÎzߝ;NH>q@MK`=#C )TX6!Z<ā%#8BFLzZhUIۊ eN6&0oJdhoV3{#V.ta0`g?j܁jQu0tO_L. {PCen(U~M 0]r ` c9u8Yfu@Ӎ0OqSTC2}-eNnF},fK>}hꜪ@*̚C]U+`^v*Aq< 241hl\Wzd/BK7LН=v, [7G0gj[?#E"jCthB*vX_$uꡱE<E0ɾ~̫$vr ;Q?]'X G>M.d닶XA4x!5PZJ , b&3F]{!TՀ$ D nWB`1Gn amΰYfCY7MllCt'R ǎj˹C@?R< ӾM:?~%]f)k ֭j-:ԇ+JW*wsWmݔ K6_~8`زE1{QJfgKjRFrHc/-CIPB  ]7.B  Crt% u O,Q46giH15CY@5)ĕ6(08گr1(o|'ڮ[ϑb *@ tG/fqQ^g&ׄ%MEH䳎 `nOA?vun*l+5~b (%^_03j#nfXj Z66`i,9ނ^D ;y+D -.0ܸVs`$i7E":g \Hm waBR0%eE#Pޓ5n>2 r-vNv+eŶg3\%]5G_\u9ml^l+0qvIc-hpGZCa8G/_=17+YJ"籉jR1o@M8$6!,|)%05 on_|=(rhuM*vĸ‰ qL=ؔ5T mY_ ʌ6%L0ijEڍxX(@tᕅC΀~Bb;]  .%TUB谠 ṕ&YnY,VLQS ƟB>h-l\6!h?Q[/;jwT OYx׭4߶Cuz1ߩO/A|djJ2 uBn h>gMe81KᅓR fy9Xݙ0Ɣk5yvHjIzvk+Evz!/N p _/pITis^$D \f.{hHP./'~ͤB;*OCĻ"Jx|߃ V!X>oħ;e1X1.ٮ82(OTVl诖>F:<'@yRpeFy35N,^X]2.-KT+>)RzT`cb-Q?WLx%=׎`3eW'{f% /<Ֆߟt*H d}נgR#$rEXdKDi~Lɚ >.Sd&+dOz? 1V/D zW@z7--:ySGk2]awd6?/گiz2*Dq~#v[1,C)#j8#p@>oGe7o;ltY9`G.9BZbgT~Ym\nan L{ #֕:qsq2Ӗ$Hv&Kk~#/ Dw,J{A?2˩w_ʓ*U r7v#y̆gz[2~Fx_|*eE *˔~#wo٩wF8ʝG3wV4L[-7dG_!;E*#jN9s0nu޽rl{| ??NqaW!gϞ%QZ3~ftJxNVt ExMaλ+Dui >+T~$m%!] P)zuMA ҏE;.lmƙ;WDh VjYiӻbNDbi Yyˡ͏JΌLT)bNRS'.7e9qi=hT[՟VD0OKL1 q=5+eـOyש0V,z߈Lx0FJ#J&ukaڀ 6aZ>P;v y9< %{B}ȱ5parGYkU҃gH=pkK7|R?l-3,GNZ|`g򕪍%n-JB`Ei=u89IIQA3M2ӗc4|*~GbʔG`h5X--H{9gk" ʳ)]l,?ږsyKx!rtPʔ@ՔRq>Q{nS_;N1Kܲ)ڻۈ&UW,S0cQ!K7Z_MI蛐]dڴj:aFڴhddʲ}~eϫJ~Pͽ{U~͍1rhCU"F-?ٞ[6G鯏`ʒLdrF=/8O<> stream xڭueX6^\w/RhVHhšZHqwwww)Z={?Gr{枙gH!m 1)@0NnQ6A"ơ vVϘ#,Br@Hȁ, F,jkm|O?H'[k0 Þ)ׁ: fXڃꊀo 0܄@v Pli5'g.i'}Y@G7 ` awlΖ x[A* ypxƞ4!N0' # USN:a6@؟N0bi p_33 ڂ0O.sjWN`VPK{33g=h_^U- doʼng^VvKg`. _̰< + .u9%Ne-[G}Jlotx y]PY6@(±BSz?9;4Y!NͶN n KM[ h|y߀-AP{[0Y9_0][?j ónu%?lۿ5g&:<9xEBϏ9{Ek j0<ϓɿȃ- H[>Pmq@n igdX)IZq{+bwcnnV_17)xU}IgcԞÆ fo+=sK(қ-Amӟ4;y_?xRmH[osmPK4jv|GG"<>SoξS b@=8;E#򭋐3+g`$l ˆOoe*l*=/ldA_>*<;h妌_fSyb6K%e3`>ЀߦFLaU og_r˜o3іrնl|όit2:V\{e 9vsg6BJ>ڄ/2^{v*{r]Tgʙl.7} (D8U.^bsIKIq:m|Z~D='ɞlyA I̧q@4|JK׉dQ6!Z>z1&&ɳz ò}kHW0 =n"$D3)JI[,|q?7^oN [3{`&.msej,W pFp[lSU; Mm𡺹a=rmŭh3 ~;]E&_ktKT0 2˿ g3S:Igˠat(,mq""ݒ9)~hz -R3HнySDC{>”椲>uAz=f^A*K2ݦi[Y΋,Y`FϹNcޏ{xwWElE.*za/ TA[׍Yr-8.{meO]Z` tGC5@ |͍dQ߫ЀLWDzgS2 g*,fl)~IknU>%."bɶV8pK=rډxk !q0LYAT[D?D]䘿iauDr}/;SBΡVΞ-'z(^ N䶟gy)]zȺ k}"J9+2Qɪ6g:q[@$?Yy쬮 K6#|p/FOJ0_Xr𩊪Ȅ,Rq* 1"z"f) >e nD|eCy:xOBN%Lorј*۴PBa+Ac2 SǷ=އ^Ktiԧkd9OܩnP m%yqZjAsW'EL.LbbvN3D>B@z,#3HS@4m7ϰ1> #&-<`"^ c9΍s̛ k$ Q5J^l$ɔmϊy^ k |j9W\*m2"3e}!x/6[X\5[;/6w$|$E}$JnU>\tF~UX=+~sAdl$h?';kX"+fDb臅@6C]oXBd'ZH]D=lp*T&%ԅ %h%Z/<V[@b"pZxg6(֛(R~3$"+J? V0\uU^7;CbNw qR yxY|vIFgi݇R/|L|ߡ! Tjh]|Nja /+I \g>DN a\;uֿF@˨u!㮎李5!>k99"*_`-E/&>|r )2Iה7bo_$QtG-G\Lᗺ)OOFDZ.;>Y߷ Qc|*g?NBs/`jOծm(F)('A@(}05,L‹F7E^sr'iezS aIA\G +ZԐK. ,є۫+}bG%V~4*UzY^Q~H~*_}"mC=e&W]Q(1 d>Aϣg$ym^%Wx&W;"jg`O0,C%^RO86L=Vׁ Mkޢ_7(Ft7>ݙ")e&V$C^~j` |`˵w/7S WD6pvL5 6}WN@nó$fev:2tRMDOǹ-luhiJs$RǰtLJF0:C=ϗhh Ǡ /.̅|{ YصzAL1L cҴ[(@X'%ʹ Q3uT&zoY?Sq-޸Zl8~albКzΐSm__cwmF[޿;/M{,^,!ѽ#4rf: ӥzGVˢNlvRVp{"Pn=!6aq41|%8S^o'j#u3ʙˢYzhsO^A&x<v`/WQyAWp3LFj,O+:1X,/\kO3;,ˌ-Ff;OA$Qe.υ%KZ#єàLJtbe1{ri k@P TփYVcʄ~B$ʥ۰ߑref'Qx˖@@KϿ5Yr'hhUŽ%ll-A`QZ,rBq3F—=(h !)ObΠY+lɎ{-T/_-mPS&>W(:nR gj= HnG+TDsl#]R{&H[~zoty\-x;H_j??`*[Ȥ'R DMӐmwuu6.Q}%8#DtThw곞#Wv.#{ f RPIPM@\*&r7cfh+VJ2u8oZ5<`x:m@LcE\ʨc&3{$Uuޥwu?H~M͈Ek}yv5;v~0ր_?Z_a\N\g-0,ϰ0g3?")I1w!I{ =~RS4ce*DC1_sQ #8lR_tTLEg| VFc5hW_[ Up1dĬsѥ#~fw+>J}2#{_ÄEIk+ ˭Q.By=.+bS~uVITr5D//1M$`$\ac/wz[x#EuyJ47m>F zZ-G)6'%xp^Q@g0lyf:2 5vɅPPљ;-g/Sx0dPOpP.YeM-D*U4-ryd9e`͒~,>]#PBs QGKWxٝXw ; zW.-}=f.PL^y~J:\…bbG'}D7c? +f԰^Nyp^}ͿBkfNcUo=; C'r)ZT5c̏,L)GQ=qHp!eHBáE|+PJP'Wuلo2v8@w9 D5hz{;_6Z7zv̴^ 3e %y:e]/EӃ~2DVե*bvU6J<^ hHn489>B/$ُ% $1X<&tOzM|+쇏.i^tdWq(M2}޿usU;@NbĞfبA-MM&fhpE!z\cC7wƢspz>w3%U)A q>o+?~NLvv/t"6lGrJD/uI 2,+յXH v])MNӰf:dGB?QhRC^U'4ByqP0h!|kLQµVοO&mwE;n7e[ /v*7zэryV7_+ij`Q6.g"V5nӳ G~9Z[ z#i1%7ѻg]G-@S/Yw19[ͯۻh-ݒ^fCV|({uDSoͷI^Cp_Z'^g- a=i*~M$δurJ=FT:K!scMC0 6ƫ 1Y<*:uISdcV(N? Snȅ2VeV>c08̽G74eL 21TW|^z{"l0O"O/iT.gisyavpIqEq7S{S }OV9*> m Iƾ\ժ^ 袡ZcC jWcp{P:ő>0X{B[V?oc5߿He5A"{] Tj<\`}׊|Cv*3[6<}da'$r/Oei&f~3ЧD@;n5zɍGY,H⼌)xj?77iܢw[0_kVKV"#?rHoK~.O&BPui%to Yu| QڸwZDΉ'\@/S6 ^9;ۼ=tJ:xhsYѸo۰~#-fu|\5CSn؏x"n.{ԮV,D3˟0 =,c$7P&NdR>Od!2U{2\*z@ `K@YUXIS~0%9~Z{m1*B%ˇEW"]گ`^h^@ut ýlӀic4!qYj<=Pe8ЉgO=zta`]!h[1Aᖑ&Oy|To~ '62CL(gބAJ]Y+op1/a^o_y20;:*[-O=T@]G/B{"Je@ ni%D8!CWL_~FdB-;ۣ*nr{y3d>X~ k>>bh;uvFAEb OEqXDlj2~pNJ9yD]ff'Iԓ}( 7Tʢ>wyݺ2A}T=nZS?F,W7JCPt0寔pцL`}=(q5L4eS'K6xC!(??Eޥk[V/9oHL=aSemB`]A2&\ y8~ #d_ڍ. C8 U|/%$9IG{KSU/8RB{׺z!N͂佟98w'Roz㥔ͱ,!cqStݱ b'×_ʃh3G%one( _% 41~ (|rxǽbWXUo-+vx`O#kJqrl *>.P*EBc~H+"I2KE:?52fpO$$|ZNBu! :眼=G02lnό{p oؚz 1켠OG<[ILdI#-4u(TLTRm F?%vY.ðu2gV.llVG&0[o*y e5xc|k1NXw2=7uLW(Bݬ7GFJ㖚иM$CCyeN| |We\fc %vLytB4 N= <ӢV`CwKI) mnI90|J"_Z~?}#S؈- )3GAYWqek"ɑхrC=$h&^~cs F{T fEK+V}:Fq']WvvO* K,gI9| V@o 9Zվ,[֘&rV-dovVgغ-cf|e endstream endobj 47 0 obj << /Producer (pdfTeX-1.40.13) /Creator (TeX) /CreationDate (D:20121213132129+01'00') /ModDate (D:20121213132129+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) kpathsea version 6.1.0) >> endobj 13 0 obj << /Type /ObjStm /N 34 /First 256 /Length 2210 /Filter /FlateDecode >> stream xY]S}㽵5R[ ]cYdI~֌lv FH>Z3 &XpLX&`0䙶Da hQ=AIńS#S-.B&c@!S oSޠ0L]嘖ׁi w3aHo,0[ pXHf"V1Ϭ0ŬǬe+`2')q $7oZ}oŷI91-~\QpX^:[v^Ӗ2Eۇ0޿'؅Q PU3^]uzJzZܪ` 8ꘔ6vO ;vY XGͫ@|9;ڐe,)G@wS/Xޚ曷dV˥]3uOkۮ.P1ƴm]V="T)2l.6j,)-Ή6",cOJ4ָkbi+;VkM- $ 2, UhX 8(MtB L(3+ˌ4 zIWbh+_`֪a# $<':֪;$+f@&&cY8$]c2b@ z)f Gʈy%Q*٫FֶzMp@Ovva0jDQC@ u^}Hty?mة2]fdbXt5mB9o뾮1>IE"JGuU%S!ZBTrN7y2 ͐ә$|yF:bej?]'`jsb4]~^LZbw)JZ96ӑ4d|s]dI$y8 KZz.HH 4 3H1_YtRDR$YzZi|\fEm,y9N>OE@oqwԻ G#Qw8h}!q߹3]؊/x 50w[\z4 ts~4Lʻ/x m(0r{xwxw=?c>7V`O9_>lJpxQI/v|8(=VݾOb N?}'b9xxG3֜0b4tF7X$t~s[`:]_[Uz~z)Sdo痣t|8ll Wˁ{ҩcw"%Uv`E!rX!!X|f9fыh3M`. `:E: R]pPg+^8__#~orS7$;A+wX+Jda`{~g|'|r;*K>kȧ|:*GpT/g96V<;kRh67q!-ֿT /Kr YUkdX9;(#Dg⑘"Frzw׃OpKpKvۈX|L:ɷ6 |C' 3?w*%}>/їk%O_N?- *=pf82j1 , @8%&{3jAÒD3zxջ.A4:{.a^`nsE!S*= \R P;vE=?īM%?l(  &KR,D\Z.29]<b4KjDp:2,y3h(3AvLC!s+87ܤzj֟zman8w>(|n܋X sŹEaV^?'7ܢ5s koTkyf*s+L?khxV=ӯS{g,WQf_v̋3/pS`񃙈v^ oZh}\ endstream endobj 48 0 obj << /Type /XRef /Index [0 49] /Size 49 /W [1 3 1] /Root 46 0 R /Info 47 0 R /ID [<7C2ADF06DE4CAE82012D1EEC3EF0EBA6> <7C2ADF06DE4CAE82012D1EEC3EF0EBA6>] /Length 144 /Filter /FlateDecode >> stream x;Zݵ\D܂(J^&Jא˟I~Q@HLD&b(b zOn~LENDxQ%(>}ˏ+!{W8Ůo] }q5"/W[?Y endstream endobj startxref 92330 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/mgth.pdf000066400000000000000000004230171211610345200247370ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 395 /Filter /FlateDecode >> stream x}Mo0 :@Iԗ}\6ņ]V&JbI.I1$E|^ȉ0۰n%AZ"1D52;mYu7Nξr|dԥC(Jh٪bkUgBp BjDBuʵ+>B>kWzHۂ0PG\j40H.Jc( 4!Z!ukɪ?/g5-P~uY?zW _scJ 6 "9 9>1:[րIHAWƾFU=g·>z:5fg5oJ `;^lBކ *-iq݌KX-\22)_>Ͳ4OsE06?o endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 595.276 841.89] /Parent 6 0 R >> endobj 1 0 obj << /Font << /F24 4 0 R /F25 5 0 R >> /ProcSet [ /PDF /Text ] >> endobj 9 0 obj << /Length 2219 /Filter /FlateDecode >> stream xڽYY~ׯ``0p*um,+,]I$ ͯO .ufNQw%??+9Y̅;TmӮȉ0. V-{9mz y"L<Qp}wC㰹Jr99NZJ`zO6Lⸯ+14I0ga[]"/ݯu>}sVM_x F'+aoxqW3v=s{0c֣[~σVb>C}w%؋=/<@o~~rwm<\+Z 9Kx\^iTU? ksUtFֹr @TD$><4_hr0 H Ty,u/qPúK\•'LlY>y!/eY` XF^M~!H} C 0@mC,tpW & ,TP {<_ ;6=Z=9a{J|A':Rc}ZhAk?5Yޤ ,|CZOfKOK\h$K.qw NǁPOOQ,EwQjDݮ˼$ӁxF[SEbW{>I}iҜcš7cZ6cdUP%@q-Q8c9azw; t$ta<6L&`L]am4PNҷfGV.Tٵn 1!$4 `=ƔMZH5`WXŸ!$; }^d!9d'&ۑ֏@z}jK3*_^ BΎ >l yI[o}' nUʕ@~nG0,]M%o~"jKXCl4 U3@5Y8^(l1"O?VgےoLe&܂Ze&O0IX"n#!1yD JǪœ@P5]_D`IGlcH%l td(_ず$pnNwcxbhZx5Ina J,.KL'3xb*!0`cNinP/C'hTA`C zp!\qE, A %aZKԨ|~0NoEKV=2E;}F_p .[A,l= v&?1et<`zV\piWv_Cc%CP?.k_F!SVm!gI!2 ؘ5/fO~Ys<3Y RG}Le+ٹC}w3<DȚqUq~F.q_-4 endstream endobj 8 0 obj << /Type /Page /Contents 9 0 R /Resources 7 0 R /MediaBox [0 0 595.276 841.89] /Parent 6 0 R >> endobj 7 0 obj << /Font << /F47 10 0 R /F25 5 0 R /F24 4 0 R /F50 11 0 R /F33 12 0 R /F55 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 16 0 obj << /Length 2407 /Filter /FlateDecode >> stream xYK۸ϯ-R%>}MRފTR!!)Ԍg}_Chn.$/4n~"Xq0*XU,I]AWAmR| L ӢH¢vBQ*KuǦt۲L#_guUl56UJw\oS|:$ ˟u~*53WAx B[x"NqS0+x8 $ouEYb9UXPhדnihۢae_t^ " 3J X-B$' (Sj4SO DmΨ嘆& -CAdE>i 6}}hκ}]- ǫg$j RYB1ν-4|""ea([lޙj#DĽeGt=H?,HR7k-.m9ƼjFda^ 4ɋm]F _qFXc8""tdyF5B2dO/B~ʭ q|w{}(J]U`$j?JޒJ]֦1KV^`{*R5; l)i)ǏX#qP]gT{`'߾/ZX |K pӇ n/[8s>#Bv {)s4|0 SR+#yO>dBfJ0m 1R)#ߞ- i1n.-F !,z{E{狭2Yg`;t1(f7̧5@ LQ6KH)yqUn$N44=#ڣ sΡ 6g%$ ,C/b0ZBa唜?|1R¶"$~7S&G; "Bnlsސ@`SFL{*8 xN4qP[m{[ BqQ5bQSbCQ\o#o^U ;z%, Zu5hTmS&b Ck/A^Vuu-q[B 5R쯧lZOʣ%ɿk j5ʉ#[TÕW"|+V#~{V sXU9GɳPf[M`)*GBePAhc37XaOO,5=Di/*[sF[bWOXb[ׁԚy=s\,KbU’mնW%ڸ4׼8@4y1ib;_<+~&MYagșĪPTdovGP:d$ȒRmGd`=6cfNMEJp:R*\J$oo 'gӜ|Ҽm80j_ޞYu%a]=}0>YPpzcj2O*_6{䝽ȗhU΄نaR_;ݒNE . h(1.ҙ}Y<|L $Q|4 yKE4{@ᤸE |Ŷ} . zQoPB$D&O@z:Q+`'qty.MN̲>ϳb&#>}5c]}Qk@VF'f^Х| mhL,}$^['xfPK8Eb)&]@ii:@>Q> endobj 14 0 obj << /Font << /F24 4 0 R /F25 5 0 R /F47 10 0 R /F55 13 0 R /F50 11 0 R /F15 17 0 R /F33 12 0 R /F42 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 21 0 obj << /Length 2253 /Filter /FlateDecode >> stream xZKs6ϯБZx\*d{8$,V$R#RxvAg<  nt4}w~TtNy:{\TJR-f$j,o|ˁ DK Xls%%a1FR2u3ڛZlv=ְ}?s]Ue9(7EdZ22W䩞y*$m+ظ^RnVn u[CE?+-x oofU P7Z"i֔ /cksI8i<<%B=^4ӚܸIB ' Mғ>IhiMO9 ɇJSk a382d+3ǭ_S6WfqOJs|w/DϡgB"8:.rNw7BEqƘ(fAro bnoj셺G g騒W={vV'X `E~p):K:]1gD)*T* r /e0HՉlf{ Pj6,T86uPbsR#5R++ spCNІfky߳dk. g`۩)cMߐ8!\g_8/&'& A-"&q|we)z5k.L3 RЂ<|=Z]{q<0-ϿnVGWMi6i2fy`G\p)!~i>/<&|iQ~!$O;B{p 4̱-eEՆ<5_?`zݐuTu(275ӁG4nBOr(z 'D=\%E4]Dqi,RXGdܼh؝jkn2d╞լ߹Ε 8nX8 \he Uۭk_UR'6xuyC1]r _O M`@[xqR+`ձMƒ5bo/pDrIֵWbhG~E foO59C_)lz;[T! 4'yN\\yDhk>]Ü<>@'ǍmFëp׃&`ߊ͑o6aTE+fwX1eeg>6)bk# $Qoz cdiXdX;d~x? 8 endstream endobj 20 0 obj << /Type /Page /Contents 21 0 R /Resources 19 0 R /MediaBox [0 0 595.276 841.89] /Parent 6 0 R >> endobj 19 0 obj << /Font << /F50 11 0 R /F24 4 0 R /F25 5 0 R /F33 12 0 R /F15 17 0 R /F42 18 0 R /F11 22 0 R /F10 23 0 R /F13 24 0 R >> /ProcSet [ /PDF /Text ] >> endobj 27 0 obj << /Length 2608 /Filter /FlateDecode >> stream xZKБZas[;ɦ*v*=l( PLR;3Fc8uUˈh_愋"\ܼ w7WuZzH4<&X)z-~ rY١t)m޿]Z{8ba@MT˕He`\\\)أ7$Sۼ*TPV-54fNÊ+TDz m$ul=z4^Ʒ`)K#ݧLr;'."2A9J(qE]8['-҂%Ik3SFLru`~)VJ,u`gi^+b@2-dl˕¯3< K2:QoŕUP,9Mrj *!)G,4Iƪ;3Fr{6|Ze1oWbʭ8@Q꽳i܈6Mg4D38MrT4 pr G*/eRL$؈ӕ. ns[ZX0a1=hCBD{Bu9%jaڑ~]FxGv:Č*eB`vFHyH(QZ1wT??8f*I;y)4wBN·_/ѹI$^U5Gݔ6<(\0]+ 8K FU>"K|'' )kK"kC~^rpz3 Jp ۘ1(q8 ر=$^{(v?V}>o6kgX:eMk~>Jsq #pV\\M"f"@琑01vBO' }| 2, 4»wsD,mr9ᔗ+D/*O[hALrr0m@Ze|PN1 .4M'0<=Vuk9+T:_0adjzK0 ]+$8\NlgGr!< =I1siAȅwc:.7i62k pēZXƃm`h 4B@'C\ x#r qٷO .랇 ͳ,1W&`-Q ס]A@6Eu% ڬ)zՄr%,$z6|?;z;#ɹq4wr4- Z/_D@$Xf \kH_34=ށc4uh$>7)/:ocq`cUf$03Z,賛l~YhItPgI-goԃ̑R0>'.fӟط|s70H>sFzn >S0](&7tWvq^ʞB#a.ߣU:!rݮκ'4ilVVC* Sa){|9\ >޼%QOP6 wO:xCMtOH L5gezc-:{a,HD2IǺ҈qYݿ*w:v*݇܃/j[{4F)*rȄBOĢ_,Wf)"'a-T S\W@'<*Vy{蜞x8fzΛ)J"ID-!mU=~3]-)NJ h;rt{#rx!HXKs  ֮-%8yG#qS\Yd '/f#:ll29?T#eLR?M"V"T腇l)[>(E|L~>F Lҧ" E>'؈HhF#g yWpO`wJ]5MQ.p)k#eT";?ėmu:gu)K=]ܘ:2xŬ(n˳'vdiM)7^$.&]ʅ=8&g$z$>lأ4_M֖vFl9fd2 ^kƨzN`UݻቫQiT? "+o_X¸ wY5;Sq</]Bh[cp7:P=ɱS56yʱأ}qĪ?mh/wyA@ c&7+TLlj_mPSvO)푪}l*j@j*4V+h z :+!a~F;-tpQ{?H)2s&@"_qC68OQ&wl/ K65ڬ5`}5%I;T"fnrBc֏s> endobj 25 0 obj << /Font << /F50 11 0 R /F25 5 0 R /F11 22 0 R /F10 23 0 R /F13 24 0 R /F42 18 0 R /F24 4 0 R /F33 12 0 R /F47 10 0 R /F15 17 0 R >> /ProcSet [ /PDF /Text ] >> endobj 30 0 obj << /Length 1194 /Filter /FlateDecode >> stream xڭr6z al%UהxJ.3s`*T$*>Ͷ.j0ŴJXhLhۄϫFidH@eE$X2+ϩfR^?M343)3i>OnuD\PG;ǽ+=\^]שQ'7W&p{} o'O1K@NKKNg' QYN$|3&~!DX۶$jblo3Fؒ~6Ih0DH= |T`Cfn `!>Dh!^d1V"Β JTݒ>L.߸zHU܏kb &,x,a:nV)c,4 t Z3{Uf,JnxpcXW엪 s*}P4Hcfp2PHLYyim^"`SN琂PhVRGJBR / ;WqP<(dT͞kww.rاke%y>Z.mH!!:_@gH|zU`->T$Zjz{ڕgm, cIA(qxXjL  HM }@AG@6Ri#^Jy S6qGH;_#qtKvQVt<| q2DPWej;W.';XiR1p5>U,:mg\Æ[၄kN#"'';gn7wePJZs"ˉڕ+8qpw1`> X$+f~@Ex=X|v[mu<1t ⳠH p>8iצ88͑p>:T8 ]9>ķ# RvFO}^G]֝ӋZyОМO'Cxgp8?V$\1C M03.Pn endstream endobj 29 0 obj << /Type /Page /Contents 30 0 R /Resources 28 0 R /MediaBox [0 0 595.276 841.89] /Parent 6 0 R >> endobj 28 0 obj << /Font << /F47 10 0 R /F55 13 0 R /F25 5 0 R /F42 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 33 0 obj << /Length 2181 /Filter /FlateDecode >> stream xZKwWxz#.'ɣӱO33 e;6dOn- !NHRQT}0xpqdr&Hj68GJd:c}1柵I"MTi2^:baM~r.ĦJ0Ҙ+m7&IWfL85iŠ7eCL=aɻaݻ׎'@ >J4tkxKaCǨW^Upb^(;ʓ0ra(9ךJC8BhDJ# zyNdM6"B{'{P\!9  (H qt#߀yJt\D\~Ad  ,;*~o >009L!\/nG?&Wgwg?&#>8?:]܍@l(xH&Cͼ/m 6q|ɔKq_&@rW˒{ۜGP(<̭1QЬ01 D  {(un8뫳=a_iiuk ʨY}Rv7R7P\)t]"kQ/۰N~i4qiމJ*Mdpx 7Tr1;("]x3Ɓ{0*}\KXUYM'i-o*]Ns&td{Cԉ2El,`ZZʓ&)*,^2cJoq]w-U1Y >-ɴ1ML7-N*%fH-ԻwJ*m=,D67,8IiOwyxP`Ҩ|*aȨ^]@?gwgc&64yG4 >zC3"Z "+aI2!AgА0ud]C3*Mr$QCΌl)5tpH& صJTOA"\}6h"A@>D Z y=pCM trP_)EQz\4,2c6v0T) db1؋/8/]ثoLzT7'*}]j588L@Jԕ,ƂeOɧXX4nW4#b 6Ѓ7{>F0A#BARUo.pEPo:1 dd{Xvw~4Y"ϋ6"X6 #Nuo`k5\.:r;:.`&0HLf-;D\'emm3X{Ad?tvׯk߮wf..dz0+eyv"p13 k*#D'M'˦P((߲FLP o2N. #P,$. XLf V&v",3ceC*_Y)NfByEI.xVrC;LоJ:b$ !@3{ {>%,GvL&c> endobj 31 0 obj << /Font << /F47 10 0 R /F55 13 0 R /F25 5 0 R /F33 12 0 R /F24 4 0 R /F50 11 0 R >> /ProcSet [ /PDF /Text ] >> endobj 37 0 obj << /Length 498 /Filter /FlateDecode >> stream xmSM WpR!RݶR[o$6Y)t]2<7ofxc.ÆlLJq)UIJ́៛b@_uWѠÞ[q}8{n\0 @\`ŊXntFhCfNqAh</ |~۠cQ &C$}m.jAZrƞ<2*t.ڎ4BcVM'u7ky^Wӻ.ɀhq?Llk!1#@ce8cG?joNڌbx%,AJRWߟ(kZm*TX..`7E@B8'Q ֮@ endstream endobj 36 0 obj << /Type /Page /Contents 37 0 R /Resources 35 0 R /MediaBox [0 0 595.276 841.89] /Parent 34 0 R >> endobj 35 0 obj << /Font << /F25 5 0 R /F47 10 0 R /F24 4 0 R /F50 11 0 R >> /ProcSet [ /PDF /Text ] >> endobj 38 0 obj [892.9] endobj 39 0 obj [935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2 431.6 675.4 571.4 826.4 647.8] endobj 40 0 obj [750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1] endobj 41 0 obj [272 272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1 441.3 461.2 353.6 557.3 473.4 699.9 556.4 477.4 454.9] endobj 42 0 obj [489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272] endobj 44 0 obj [889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278] endobj 45 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8] endobj 46 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 47 0 obj [333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500] endobj 48 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444] endobj 49 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 400 275 400 541 0 0 0 333 500 556 889 500 500 333 1000 500 333 944 0 0 0 0 0 0 556 556 350 500 889 333 980 389 333 667 0 0 556 0 389 500 500 500 500 275 500 333] endobj 50 0 obj << /Length1 1486 /Length2 7086 /Length3 0 /Length 8081 /Filter /FlateDecode >> stream xڍwTk. ))Ҍݍ0 0 3#" ݍtwKJ*%!HJn9k֚yᆵg@G[nU;A<@1*y@>|DbC ot `&@b@ (]aMg#<0[;MlvHTTw8@ AM0tSv!0(_)$h/ GJs`h;EB N?xYv0_} n0uTjP翜5r9O?ѿ!sm% ; vvDo`#w`.|> CQ<(/< FOBn݃pn^K60gk_0!x a.Ϡ |nTBA0 Cx0@@A7|pfB]4-@k œF K?0dv0k䉺/n~>7  o|oQUjvKho O@{ ~+ݑ3Gv; 7ˡ Yv5њPk37K"l{CtnP/= sZ4nj8œ:psf 7 ffED/zjC|B0 č$,57"r{$ݫ8n*cVDidnߡ%r8VX!pͨih3u}tk2qk$9Bd/}8I'm> OnEJjAZUEtF_?롛 e}v\xP]?έdSVy-I\a)wy79oocu w$\N{}}WItsZ9t_1w{: ~[&3;^DR>,[yyPcQ]zv@9ow- 8Lh#h gFZ$#Z%cߖf?C.i5w9:w~?dF*2J;EB˞5f7*R >q^$mVW Rh[tdޜVl,cr3 ܃<8'Oo a!C\qoLSF[zPZLODcO{Tj\~4:!<*.`3.`0HBgulo 96K:qq} {;ޭ_ ]34sKXaH6 m٤뢢8tEvzcqN`Ca.6g>dc U"&'z'@'jtFj Z.,w/GX|^#[ # cP]{`}k 63_騗Ejze Xc![R. cytM3 r$-G?L}1Wigѥ>SIy=N.?G}OOIhB:һP4,b>@அQț;sCBrq/woK|V1JF㿦͜0݊[Z}^S+5-# ԃk{YtKݒUTxk9X+/L=+vskRzԳ;ߗn4|@p8@6I'KQX0$`giQ\ARRѠ͆Ƀjn|v:QL=QԈWcI]+aJLb\9:ұkWlk}}$JK7zrp?Ǵ=q+mp?34*- kٚՈ÷MRSenhI6`DEI~fJk3E%ʕT*T,w @fN [-K?%;ٻ|UV(M6#֞a MNR'q ј9f|cm[٤*-] CܧyoIx'^(a{ 4.=ս=W{6YoIVxvLnִ_}䷼t;B8# 5Kҏxp7SSk<_}"#_B_ wY|cՂC9FoID>("uX~E&9W]CaC6%W.@#[M[!٩9|dXq{52r a_Ѵ϶hd68s\ &oX&9C42m ewVM)Tȶ]撛ԡMsf_Cu E9OߢU?eHWXYybIm~ q<Fd+Mkyt` 1+)D:a/_.C/,.SEXpq-ѠdyݧmvfD 5Ol0.qpړ]U% D\@3MB]nާNs7dhcv^8|~7kcɔȶs o|[ƭ #NVTf|S]x͝F>ZI'_:{-l%G_Da~Qf! Ek!6x|C+$.yV&AR8uYUsbO7w=GZŷ"}o1W/7䋅mSNъI2ѿCŜ({x6`$>|-?nSd{|TLY[5GêŒJ\c*KI_lny-M=͘G8^Ig|Wo8;:<4hxNܙ6P+godagzٽKNQ?eY`CԲ[:uQ~ԫ^Sdqg͆zX17o$CiK:_x>֙6je\vrmBsd H`(VX&_m г6`+R,|%VzgS6QSyNJ#P Z= Lq_w+!mGAB־}Ҍ)>a\6X9~XK? 7y2$ ^X(e./YE!LIRgБ}*]8% 0Ly5µ:mz:k-~h.)3tc糉2@zLl$X[Rp+Pz{q[1X=xcjp^@mʾ;+%q A?K&I x{=Vۭuke,4/KӆҊL?Ǐn80-dgy_T7+CY o'av&yc4C {*'T Ws9֏QgI*QՁuq~w ח/G)|Lw=!0NFSKleiIƶŷ# %E YX5<"sMNW "9dc3r!8W'-h ^>Jq?_E] 6i֮))f5Md~2,ꥰm&\֡R_ķ"kzۚ r#9(%\x Y/бqn%aQO8~D3{.8?_Zk]E'¼?fi`Y}KyB.Px>v{-ު<Ϻ,uur[(Nobs,/HXk^9R%%=2fr!ըmD3F`غ,9zG ^\gs#,Ĝ)kSm::W5bH ٍ5o\A2ͨY^+u/5%bf} VNŽyL9B#L5ǙXpL؝kBG綫 }&jJ0LC7qҠ-qQF = /޼&=^S_j={̮$Y%+M00}.gnOH&~JHF)!־S\*psY^Λ-]Fզ j`Y_+);xgJkC $ʚࢃ~G7[6) ozv,X[hWO+ s@j-5x^NS-]g;1;7nqKqGj|JqܨYDuI]H 5`/"lF$#we: n 4K8XSrsv3LW'l =VFMt^XlsIZOan %Q PV@'"!u"65l-Nl04g:JssрmW|>;N:\ Q;'nl2OȰ2f޷p53bm\F5i,6TFnQ|gvZ5~CT&5N~wUùc-N!OɱD|9}yA+Qt1DRlj!tѢQKrw+^(@宙,5Q;`2U}B@qÄETtZ6y[[i touZomLwsޖBp-i#`TgSdd-Z,'# ?1pi,ͨ W26u@# N𥪼сZcѰx"ѡV0Aiiup(C1+դmP̚2Rw$h&Dmї ЎGf^*GBLFwF|bŻe*$c H~Y(cOui`)ylJM2`ҽHZ lEY6 DcD$L'WLN>>fYP|g7ڪ噧){wth{a7o1XWīrE+ZI]> endobj 52 0 obj << /Length1 1634 /Length2 9782 /Length3 0 /Length 10844 /Filter /FlateDecode >> stream xڍT\. H0 =   ]"t7H % ]H7_5k͜ggh4$-`9S ad`Ё10A_` Q&?BJ.v.00''SoC0@ `&4bmbp ;C@@*n _!EmpGa777v=l- pmZ`l 2@ h5vL Bjw:;{tqq;U`?U4`5;;g w:x@V;0@]Ng,`G+bx4t @NR|` g#w1:XJCpd `=87P7w.'_6"d`8SPGvA6x8Pr?uX=X0`@W0&,?Vw8aP;bEEZRJ bqq8 R 8`}g׿0;`?7=~q?o.H==b#]ˡ }\5Ѫ`Kj%t~$:/;'rLԀA6xaqk@aϣ'wq=ٟ* q\o ~\C|3`?8`w]=Θ/ZH-_ pXs?ߏ1p9//?O=x >~L/_8;??oǓA3PHmuPe$(aҥ7P):GvgvzڬrL7meԩZ g_lr[&~!z]PN#d'HQ rAРkf~Y5PN@)Y0M9ފ_ge}t{DZe+ 征ynʎ%׀#8H? /Z|m'/ yBڪ4Z$9q $Ʒthi6$-9)6P+@qPw^ rZ~ S3(kvOۇmJ O|~ԎM*g' @O/E3zNZu!3"_*ȷ0[j555Z@7}ֺNJ`Bqhqq+u6iOG`a;'Np<,)ͥMڵalgO=o[v/ t%x*6 2GIH2O#^чb4عNX z!} c O k˭~lx)XqJ9gu^4eg\^<1ݱf2ԍ¥yt7')} V mFx^l- p!;>YE{/@Y}h@1QRgq:A4ܛ|]w&WQB¤X"?V|7~Dp4Byzyݻ؍!a7|qH3;>Be{0;!CcV"^U5ܱN]rjZAn= S^R6j[q'#& AmJ@ $.EQP{5bn#֊D,zԣu9+CأH@8|0#)5KMY$':Eͼ7"x7W:.ڄVҴ(N eìm.SMm+Yzv 0Q'> ihwdd" r.Oqs޳hm.~=1%^uI0=#oqDsJS@:fg>@符*LX&PBcM!(d'/ K4F.F1,:YZ%ϼio~1 s((yE:&ܵOw$tK6=o9rҙ#l?&J3XBy${ J>@V2/q|pzyD-P\]T4>K[*FN@j ֬m6:qyjPtlGe,H5bΰnFjo!l@%3\Yx;P~8u]tl!2 YΜ?*4 K2q |: CAb Z+砾co]k큅ߢwkƠQ)W:W6ßZ~(TYFt&i/:=HT|s",5uHe 1_=-҈q7Lfs%ݾ CՃdz"Oۜt|3) U'Ǚ} 6zmCPA3ѳ][e+׳>kndI'_8c ݯreuAH6bͩ+#tn6Qc  WU b_zD)*_2⪻`YJu`E̽۳]Q&Kn6YKqF>*=ᜬ\gJkT9c7JtG`"\)eO'O&M_pխz܌<pό̗i>Q=' JdZ|>B}wϚ-! nv7Q~ <갱kRS91Wx#xޢg#*oD MYUl}IҾ*  a^59.ӄQZԄnId{:oܵNѬ[oZ{':Mve-n2G2@[b6YOZ`mش -43+x:Z~<_O 4%:\,^5~E}l {V|Ȅ *Lnvҧ,W@yb'˜l4JDz=I=w$wfT=*ʊY //|eFʊU"Ǘ+.={?HEzǍtr^U20+9:}6Sgv G]st T*yp8 &jbmu:ێx=g8E/r5l֑22\BOuW_8K=̠_,]c*Ü@q_RӿmUFf=˓6 k1]3&8)<9,>Ȇ?$1qCux]=)xPwx\~yz9W~콴Lq) f"y@e_>o'jhΜ|}Q<;>,`/8f")GL},5gV$價(iy1UyG9-y0#:ź!߱;iCa.Ri.߻Os¬{ s>y^hؘ z,r?xW|NN^z?d^C$茇͜MNv0"68ՆӪz#!2!wǡ]nzF|(v[NGT(>TbvDّ6 j]1,YNԳvE/uwC^nv63=yۺ|JE=py': o,k~v6!8ׇ|4 Һ f(1p7uԟ?fjs=% dz{d/רdNU@k K>xmScG)5ZbI0.U }cH*?/]r{]mm\ulb{0T/!_?< ShmϞ]hcWB FZ&[ff{޴Qџ5O=q){VVCH=ATM>}bWIP ObYLsZR LRt8ɰWwK@.CR<͗8 !,auI8dEVWbGp_"_uu³ufF$Ɵdgtּ& DUl8?ɈԮڍ3e\}"Q bqgB鋢J">bSXfmҪP&*u+j;+Eލy;@' &XeGۊ~6 W??F"ˆ ڏuS"vve؝qM+-ccuM1T*oV`|Bt=@}JU"MnkίC$="4lT,Is 9Z#T4tN%V?*4J񄣢ܭ0y,u/OX&\tX^}n''_n>D w,PUVN%hi-n4FRUY,[v'׬\eP?'L"L5 !]"mW˟3LQjc `4i_/u W6^NȈ;ITo:O ܱ]XE.#*oF;,4=Tp4=)-S>~ك,'V1cѽ ,YD)13a/^8.*-s}5, ˟wX jUװZ*F|Y,2~?ë]KDfMZPSzgnT>ϧu;| cw4 B-?I%ބ$T9N2%m0[ϟ&K;vn]ӏC1"ڄocG/F Z0* 50fzK#!7Ce)^/Gv,pg$9/۞ k9oSekSN0▙3"W" BŸ7yV`ĕAo8O&-ػ.BAfdև(.8*ݭC*HZ_F=Nh*>32t]dJ2zй mw)X㺴P^6@X7@w^I8m\Mu UdDd'5ζn_*o"1mzܛY߳xlS~s|UuUOɅJI$v'ކ%#t &Fư @O'I\*zZ;12*][Xfi2 Ž. e/<—};nE-|d稜]d!$HAw޼5tM~֛MLX=|\ѺqRofXC}cPז^slSL 9k m 'Qj+,i];DzV*CM9͹Ò%ggdrѿiS`p)tp\}Jt$Gje^- MؒU`M#"at[uEB^ Y1ڸ0=W/mF-p)NG -]w2\|]{|z-Iv.9Z'h`a/7VU rRFSH6U"RFߧ.bL7}Ig"h䆸)ИiSeG}FvYG\-E(PUP}˾1Q$Db2aA!:}! #99[|D([+ |2JkTYʆhGDڂ%%'{>Q1kN-(9ٗ=y~rhJ[=R׽Y* 0Ȟ"K}1vJhw$Ď׭ Ya['+f| JZj#B ;i <.z"vk~.R냕Rkh/ͦ?@a' ӕx?bv.~M4Ň=<}VJ>p@@Pw@P,7]je sPLV1$QZ{̓ Ju?W P"}֑D)|i' j/ ޺8b,D;'cKD[pl 9mD]ͳEb{/EL !Q <8&׊6C2W 믅$ XQ!} &ӗV1!Bj=xz.ls=_یp!t#7ɠ ]$ZdD%rϟS̼ OV-!Xưrqtq AY_dwR)bbO'SȭgVokҒhM،a)H|=,kw+UFK#Y; 1՜V㿮Ly?ig5 #+mI&0fRS4W\`@BEixVff :j d3X0jXTO8&[ \QR=HV% 3H ^[[)r]?H!mtP]10TkY*LS@CBb@&H[D\]=AIG2#orܺ+t-[Jm5 AZX3d*yGrmTk.7HIQSֱt(|2c zD;[gP4 zoo\ *r*sdt0 1{fO7@ >U`#i]di>sTp1LqLpڮ}eK[!R47#L۳{x6aW.^۬{qv"W&a.iO3K)DUd)THx*4N{$9!g^S;npd?,i֬(XAafIon)a=FYzYd}eѓq="k/ 6?ɿVBd^ohٰ5hɪGwRL0oV}4,^E9XB93p_D>'xս*AT"R~zKM,Djo}]2yGUU-a+m`Ddb fdҍcz~=~S2S5/fQY]W?z@'^ojQ5hi8؄L^͊ 7V~El='@"sbOЮ4mx*DM~#ʖӨ <+r]ǐwG&۠K*$p{gȍ'NetِpY`l Qohpg`g)pllȄ[[ݮB0br) hsq%ULydq ]L#b }[Je.РDlҏ\X.J{Dâzk_rؚk1}ɠ;ƌ*T}Q' !S7sL`RWw>Jzg 8ޔ1ޕ$QV QV{|: HzҞ}ٔ8uw.silZX$gH&MvyNi ;YtK߆N8k#ӝڧM+m-3a!З9Ũ!(}!a2ZŶ\HЅDHslъ@>֨aZk{#ANHcN% ojۘπ_ُ/EClP,m~IB$-gҀU,W!;B`2MΉ ϥcvZ% &.~EC׭ z"Ew1]L@ah[w䩕OԛuQCK+ϗ.v|9F// OP6ڧ o媀Ea(5:Pٕ䜪L@E9[0I*~Pmgh>U& >;X #sP}ܽ 6'T}s4^^ż#V9{y=Sˇ$I/yo|Cs5`ǬZV>0w+xȑ&*oʆC~ Оٛ y~>z*'!jHp6'׀vձywE;03.+T:zX c\Ge%|.ǧ%uS;Ut:\y℗Er[N|4'%=] &eDu!UH'Ȕ3X 'JVY$+cj݈@\3m{8gڼ>T:Xj7HEk&z.մU_Iait̺|m.s4xoOdZHmZGz`;#ˮ~5L,a]1{TTXBY0";]ߙwKmX_eݺvxbg{Ƚ7W{wuW;:"-:Q~=m^OVBe񂘤Wq\ܤ^WڹԼp cSoTC-]~[w.4+Š F*݂'J KZɪ֞وÒ^/l)ZarʁSF,,Af7A F_ K7n0Oo-,zP3K6m`D}BTOՓS teV;77~}uPqxyI]vGv 2vluVxD刴5=Rn3jQAhvO]}-J[R9Iq9S&c=GS)sE㣀 طM1BW9j_#'_xz;m'p0~v*eQue6u(7Bf گGm-fy;H<ʊZ"l hz^DAM$ {Ռ=dhwo;~n8}(jrّ\`,CtHVTᴌER*~,"[j5dPbA>м$WQ^K1-VB*UgDdCZhBڸv-Vނ2AB$Ő[ºcv^Ɏ9L~SJ1斍+н36qS:pv3K;$-kJHgGEA'ߍ$ $HQrDY4A\ %9/%AI4K17@ۄ+eX? endstream endobj 53 0 obj << /Type /FontDescriptor /FontName /XXILHI+CMMI12 /Flags 4 /FontBBox [-31 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/a/d/e/g/greater/m/n/o/p/period/r/t/u/x/z) /FontFile 52 0 R >> endobj 54 0 obj << /Length1 1539 /Length2 8254 /Length3 0 /Length 9280 /Filter /FlateDecode >> stream xڍP- C%C HNq(Z(nšP\ Jq9{ϼ7IlﵿQiL!2v08S ,f ӂm 1t NP;H:B@Gl(8 _)@;G! (`' :I;{wG%q-fL ?t-jApKf w"p+;։5+ h@ .07a 3v :%/9<lfc3 q>99 #=#Mw[%lm!0IA!fWgav0Ͽ96Mlϡ :8Cy4ac\ff񻼖=`H 5<`x:\ 3?0@jB,0?!;Bo9p{e(/?Rf}vnO6  oǪ}6 @ο8<^޿x- ƿG [=j`Gf_Uo8q3 [Rv?p7T(+CPgA!x8/;IAf _x 9A8Y{:3Wc@N#8d}i4r@ wGA<"^'ql?zp)Gs;Gmzo$ 7pJp@ 8lR|,r=I>@ n3y;3@*q2W K=.<#txzffƲbRPȪSE2™f-e;̮il/ry&$Bjϻ-5pjz] dT:2u74ͦCZ[$ E%Q+t\aĹV>:82GuB Ǖ"AYž.t9H4ŗcz;_ޯ{R9b~pAm: > g #$Oڢ+OIJ^k$+hoҼӞ.PzhsEQ-Tbl5S "QޖDZO8xs&f& T4DoZr,h-T)3~_b}1iaueDOїk-+~4X-Xd:C]OQ$dq}C9CYtAUhS]vaց<%>5c+WYn=~J5}Sż]%Gc^QAm[&S]j7gC1_#oO_rs!yސs/~n eg5zw`$rUC EgC禪וv!S-ɬgo/30NԂ\g Of)3HžEY&ȥydIҖר?-_A]y-GYMT^ƈt\QđJGHxsw >HfWy3_؅EDyLFz'rl*;5U,dݱuӱ'^d8bG2Q`$RVA$+E`X婰)vb6DJ(J`RŐ$k-~4%5IIAމ>:2񭮯_B:} [6Vco嬗0Yf J}:ϰ`LPҤj9wH2W `9^R6h$# kV9W(B /(TT$3uMXx>#k-9'XSeG2mh ++*. Pi_>g< J*FTqmUY7G`MY&?P{5R ;6#7[M6>ܥ*yt1į=~e$@)kt9^}R[m@$4mmb rpqQ"/6v)P?ƹ'27H5n*^l#i|ugKY&Ԥ*;+#dw|"> 񓻝ޚk5&8܍]\{kV&\Sx!v&lGL5!Yce/h ^5Md.JNglSv E,Z9>gh 0'"V^80}QcFyp45ھڑԂ;JKN$卾xwYlz;yȠe ѧo(Y0)o~*l@0+g`@Ϸ3v͂ etdt9vݛ1N;IǤ~_k |2xIRWCq:DoVp$D+s݌~w^K2ю%W 8:.Fg('O/ƼdKqg2DXtz,Ň\~"i*Hko)OMҷ 2<d/Xto9~MfNeHasٻ*g9uw ]%oXUa5Zd2~ G3l5Zt5OV\lh.N1#j.#:?VABq!nc['/L~_ n0fz#qߣteίPyjX^:Wh*#U9Ǩ؅y$#T͘R%-o%tǥ%c 7QV`Y[v$|E&e<) N 䔒_U۫}Vw쁖-Z:HP#J0hT5fh\Ȍ36&B%w۵;E \%p NސO^w#.I5W0ӧ$fi /G}yl,g}L'Ljtl6^Ԧ{bugƖ]kՈ$tR4 KWο( )ɇϢ\CG/j *xo} vHICŮ 9~5C1`=jڐN5h7_ [-ddBLVtZ߁%HO|jә+J,# ջe9foqv={E<SyMRFrWc˼dGÓYe&hhVbt{8?An J-'i\ӑ)&o0?Vݽ|O>P]jSݒqdGpRQJs,;ӫs:7SC aЮ7UVY6O/hŚd$9Dۧ5"_NnҺS f/D01ơ9p*[^h}Q?r(Ǘ㍺.€ SQu)}r2M.OX^cYb `54*2-xԾA[@iA|z~1{tIPA0٬ |"ՀG*եq뢸-} Buݴs\W-쐈}sJǯ|dSsmuMTv;N b>Um;ztEZ6,BI7'k i^,nDr +t\/)kecCW,w-FԽ&,P_"+/B6C3 .㽸K٭=gp/iq^CVTQpk yeOv$fYy&hldV M\oX,j.=|[)܃*VG=sZfdPyJx"Y4CrETeRCN'CBW9URX8l񾩏;t,`OݞK 0&P߿$NSFҺ?À&8p a:#Q7w֖'yA/qai~<lCg4y@FdI?*%? )N?wwo=ٙ>ďәRǛS_` -qm#W^f8 iP5gkWUc{;wW0|k24["uKKn MK>/q*mKbw WwCQ!Hy?L՞( F5h[cY$oRk@ գ*^ݡNq7.LF"rN\O~<@sΨkϓ؆j@ |x J]:~ڀQD;>뿯GӱQ¥|:BsPYf7 Hر.U}#eqrAYsn=#F"Anԙr1Ưu{Z3#٩EŵBUw^I`.:(,O1Sfr۫8Wnv0|G= ϯ]FFMxR@=9 H[OLy|qM*@^ON;0ΔP*Mt2eyogSJ r (=}fc_"9M*/SH}㡲lS>8nSo}2`q[EfWE: fI+nh+>īIya b l̝0Xl/?zũmƍ>\s*Bǃupft6f UZƼݸKH-LGX1v :>J~VבaV3|^3/,֔b{.?j)7BV%Ro4S%T$F?YD3V?0.:Da[~ӈg '*_?p&# v]쏕 g#;4|BNE4k?9F> M;F y}p/tR~30^ഩ*^$`]GA K P1Tf2kYs1R6~ie{ ht~B04̵օ{e쾤+=!yj+X9)*5MQw)0ϖ4 xE gw_V^}A9BثB+u&nD Kd`cn3//x&*8z0Q]-گK͡#ok  `_Ės[ϱW-Q^*/,5 pc Kr̗eدj>D=߭Ɗ~G%ycF\r'/G4E.*n-׵)UW^5H4݀WnCCu4G6ƄSl~"ܽBaU6,O-1U 9)xOϝYGF:9[BFX=o>bElA_2^ncb_ܑ{mYS[LVjX+ mWޯp4x/%íBَBzÈgvQtI$^Br![: $ϧ)Ԩ G: *6cz%:΢Kɏ^vcw"btu%qh#(ϱ˰H3JcCVɗgs pjt^'KUI*qs/qiAolrѢt&_+r3u耦ajZumMLko5ޟȣ|e2iZ+i5>8$Us-x҉iO4W@ endstream endobj 55 0 obj << /Type /FontDescriptor /FontName /HUVTJU+CMMI7 /Flags 4 /FontBBox [-1 -250 1171 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet (/H/S/a/e/i/m/n/q/t/x) /FontFile 54 0 R >> endobj 56 0 obj << /Length1 1502 /Length2 6756 /Length3 0 /Length 7759 /Filter /FlateDecode >> stream xڍUTݷ%$A!閒`S.A? ABiNAި_ZYkw>߾g;lF ECQ(&qrP?a"NS($``&NhyD""R@ @+`@ zq }0G'f<)_ :` =`AQ>*#B {{{ <HG^7 0z@^P`. [' 7B8H(pL'E04zP`? "$w?%n` pBzB(4JC~]=| zs0@dc) sGyy\JYsjp Gy|?Uj9vߝu#~.`pOOwa8'TS DE$@8E; ,oE1 h!{A('4^ 0{SC~1GK {"O{ApWWHos4OPL (*!HIB? OAM [+x^wE` |+%?_RtuE vq' 3:l3 {u(0f:@pG׿CC!0o LyWk"@pyw'^qjp{܉JHH$؇O3(Bp  8 D?;*#C]+_pa7 ȿq0'Fy#¾Po_b=H̐F__7 ";7wՃ7_Osne #{L6"zDgP3mAc-G!.ؽZ Ō]E]8|Oj-2j=k!;F#3ZS^;|{G9[74ΖPδUb~ǴMy̞'2Lxiمb-7?mw yE}Z4JR#HL8oÉZx*2jU+:OdY͋燻%@9JG#e2]'TzIڻE L62?dwS' ,DWΪ ,3ԍC @No4m>5h'"@2zbT~cVݒG#za٧}*_Pc4/qCGvn3h:N|=3fy)b]Λ[#FWի5.k5 x_gVEYwUSg3 _KӸ?k7,09m?vwVP%r A~235O B袂G2E31$יJRJX4yRnw cO9qWOӼ"Qh̊Q2fڴ&M$quC/W%,6Nd9.JF6YU\mlZ(uN.C?*5txJPLY֧ȗs"V)5|O8MsdqR߾ A8!zEjzx'2q1Q0VbVY#k/UVGRM,Q*-"pec#UoO>/U`Fc~C <2Nau4]+ՖTH kBm06dt~r싕䣇4 ߈-ٺ> 0|'hϣV&!Z*#Q9Ѭ;lr_Hh\$EAAoWS0vX/<7:Eᑙ|U_;ЉE! ŔZQLV 5?Ť-wuk}4ջ .Vkk~uTC\_r'P~bw';Dž39 ocGosUQDIo6 i ef՜R-lȞ{ܮsřjup3f_|!CR4nV)*Nc"tCOBtw3BKhO3m хlCb'9A-|!2[tFC*w)vÑ6t' h{{5ezm+e M9Dבz`,Wz7M7xشZ,/TY-) ?;!5!,9oschy0 cy(x>gc47]80ᮒ339ON憐S܋^ Ul;sk%xwREyI먞L˿+'$QZ՝<[ 6LKYD \QS1VNpA=֦ 8S&xkwUkB(v|AYQ Jbjx*%y{zl+ N)XkMUY$8S~1w[mk˚7"UZ-{}?ۙ4jZ,UKҎ4E*n+8Gey45 ^H`ʼ%_ y8EsC>9Kww@9ۍ/[P ^s]wPL8]dlxAmُq4 cTw7d߈χl&s(ړӓΞQ,f gII5 sܨZ&ֿ)c05I9۠#;2eM 'd f#FVvE}`AtF@')7սn{'DN`e‘EhlU*hW \z(4h_4!U$8M챆sR)oKZؼ7qe Hg;w୆sx? % |_IW)33uC0/`"IHTq2_h5R,VGO5m Z m]RiHv y}GtBW E,IBxw;.建3aj|={j+# CiXpE.HLQ$AȐ@{o3$~_Ä9)?TOj(a;V"*?L 5-~JR(Rv(dlqY܉'q(Hlܧqj3/91[ƹ:5 3Eq~?sr$14)D}Cͥf-jc.|7 %[AwT*_\}3mˬx>{cwn.^*_ SG޺%cnhC6<&V%ښj]$XwкIq-] $(p{KtӶtSsSW즽!SJ86shyסpPǙx^W= ASO#%|JT yCtb8nd[;rW.,.,RP]K K!_Ҩ\ԧ$ktLC%vlӻ:t\֊(Fg "V[XZN5_=;4X~z.>;n;ha3<_UvC&:Û^n0;#OG~#^.&u=(3>/r!Ϸ/A=l~BwMy>obU,}`\kdr ! .BaV1Voz $kFNO‡S:mqL+u$Jn\ 8>xVZ6 gB\ȾxφA]U=Y5;XDup56cssg0Esth;C nDfeHS_蓡6J7Eĥ~j9upbkQ>)΄1l%<`MLv3VPɬz;fa;F/[8mĸE(Uf>~w9H/vRhͶH.?ӯ tԯlU #j0sMTʋh;zr}3X'c,v$y\h E> ;H*ϯ["WSMcFܸW'u#z=t^lVCKB=tQl$w8~GD22h=ᴟJnT^Ѭ1w—.ɹ.Ma6 }'(bvyASQv2i6"nؒjqF^3[.^Du yaKX  Ueb^Չ&ğrGB' >6/ڴd_ދGbů e)q&[ NZٙ-~(s|8$v&wMƓ4l e)6gߐ/Jަ^3ka¥cIvS1yvi=ϲ6bev\q֑-9 Ļot `lj~zo,Qq8B/~H urUJv1G']}q m &"\o"*[ɝX@$J~~4f!yi|˔C/bwAz҂qtL˦mH-i4dv\?!hvA\aMGa҉L^,'hya-YB5]"Z*r݉Z7SS$1Q,+fb`<'/l@o!F%^YfMq$,zާ= &'OX{ۢc ^~^L;s2~Ww}Wܴ~OkY`Tܜyk)_eE^3Kyu 5Y0"}~S_>X dJKx]gg$_"_/7 z&6Ua4v%R?ګHPM=5%B/f<ڴ]MꮓePխӂiO胤jgu^|{hr$}q vB9k:h%87{ ΛYn$.uR.3w c~.=_AC%Xޒqv#V&|C':KX fiFܤbƒK&۶pHN`Zs|S\9S&Ft q }z"nݞHM&L~N 2 _CUոx44u!uMn0>wd[Iķp?iґ~lw?Z!=QjqTZǼa9TA$ANJk,tSl(!VfϴTd~J *MEtZ*wڈKGh I5J]h޺x;B?4K͟{z@Fo[pJC FSߞz$K '>֬,L1nYϒEZ*~5 XS.ۨ j'JIbLTk!5rPYXij` _,p:> endobj 58 0 obj << /Length1 1437 /Length2 6156 /Length3 0 /Length 7130 /Filter /FlateDecode >> stream xڍx4ڶ Z}^{0ØN Jt A=ނM=5k?8@qqQy7'dh!n ;(~(!DKٹ!N2<`F=_:vn?XF_C# @P CR``O;P] WUOBd;n(ŇE`8*G^@E^`b qG"/ʠYwsÐ_SxA}s0,ospE˝+AAxƜH0P\DDX}A;(Apw#8F} 8(?`v]Q XQdRw#7S4V76C_N/ WP+.DEAoTguQQE{ ?c g8J`ǿoPo!*{E*^Po?_ ҳ5pԄ;@k ^nUGڡfD9C>ÿpB vЃ Ai@B``=8AeCu PGFM?*@p_#((,C)e P-q? DPpO_+yBQ6jPs7A`^?<=Q[&m `_0oapyqY'Oû5l#d{ଅ:p|el -嘯ЕLB$r߆oӷN`8ӸhVa>=#KLK4H헟Kn7@91S&-2Ak9r܊8e HBGHcK#8=ThYgHLEsn[Τ`L.UI 9 $!"#9#ml\sHibBR׃J5"#ϤZ3B&(%o~&_FQa2y7TJO`[ҊV ?m57X@cӻ7lwZ'edUk:<"R`(V7' ).[iux86}|nIG>| 6L`%ob &ga|hΎxPYE]K'-q$ WGtˤmt 0zB?銼w<ݶ6U nŊ1Z~BRl43Rl|u#a+zEk%\-#OwlpË:Npy~eHo~RӚ4~-}#ʨrKaEn,Axw4@PVÁA8vglҁVb^|r$)ЬJdRjՏmo$?mӦ9#^r\#n|d'R:Ŭ.BWXl`Z4YI6DnoZn+KiHgLϯ(ѿQ^e\9#r`b|)f35ᴜ-Op>Q}{G趼 zUCB.i+B(G2C`ᐱzcX(&`ԼhmҸeQy-V"R+zχSfxY˵eveܹf#D (ADir%:6GBF[ bmQ?V]ΈF)VHUT礧_'lH?Im+d ]_(@:+~)g bKшzSsUWrgܬ1 #gYd+.BQ E&c_a6s,NOIĠIlom8sޅ,L4Qv2I&}ɸA3œ>Q&Y*-mI`$  +~B !sS s .m4N "Щ C;tfE|zT@k[)ܪ1Yﶫ̵>";Ãb,e;xؖc|iO6`3_Mhx+Y`{Aߏ$I-]FipnB/?!qda]gﯪ(^.aR9*0\jV濔:nu6D'E/twyWE(6l!4|4'[@R+Ц촹3G/o0H#^l}ZJa` r9&)Gyx W&7*R_26,bs,Όγo"LjB*Ro({JxqrI!ût&PW s/)vjܨ=Ư:̪"Ae{؅MEoӹ86[MfWT+jad+?TثGi8z3?64/OiZD*aK} Gcaxr*?]~zE~3m'U?vSdf.ԋj|W&9u.FS1\ pT$A&zX?C{Md!nv8ܺ&6 |Z(qRN9M9Ӗ{GnQJ0;㶔쨻pz,~'EpZ}sR_6>\Kn{WyP%C} Ћf=^㤓]j¼s ̻'I_(ϥ, !`X%C߉i"9 mK^/'bI}>N \6a|q1OzvLbt# ڍX1=Jn}BL/a.gA753]Q>ZٹfakuHrpu1- OY~#uҮ]WVi*Wf%4=BHu?໮|b,Ї+=P^U]~%Swa & WB2(UKg&k[f#WktE}4W<.E>9([ɵjكd`q:"Oȉ ;80cԑNқ5J{xF RqcYv$zEl8*0-wa]IР@\a@^/\rĠͭ4.`|gnBgY7hx\]zfюTP>n,Gm.xOe_ܭ%(U9pnxT!fޞ|ENWGDoV&6a1D$Os[s3kW(rqgIe[G;$Pu^FI]AqKe4'TW&M#F*>,mwbmr Or @-r:lnYe̘޻eƠS&j_.}pI+wE`SZWi,}|E*nI}IlX!<˝_,MsN,Z9靦gtFi]*b?gIRao4%f BN6,!#Ϗٹ(n \2 מ^KJ>.aJ-IF͘I}l]nc*nliޚl!QI kƹTInRąxh#ek6B1t"h=닠͗}eקw. BwËDH"s/UIM 86H^}4>A[#?UYĘ(~QS:H<4]=)z װ^b] zR&9*6Yl!)}]5h\1",leл4lxEkUOucw#,IYluIMq83U6 vjV9\(b~u>)U| M!_G]p)q~mxA:OF2(J;)hCbT/{AjA3)KIO6\|QM:`_3fЧ'^JQiAl!7nf۷i@ܲe1lP3V= ʶl2}>Xw O"fYZWT&ʵ}ج=}E>yq9%1-bP8Z?-q$,Á\[YHg '!^,$ޭ)4cDRo'QX?}g_sr=USs#_?y)M!iX߂A♤~nen.{B ^v ׫;X>1fY}+NtKR ;v`pg&u\Q7jA~nL=$]OUx~} FJ]VȲyo+V~m!cfPk3!dtsm[KUTYo sy糃YAKi8BD paQW՟iXRxj|R)MZ-D&"xV& yM-'biP裳Z%r+k; c\fٚSX!,s4Ǘ窊؟Q ݈~N{jv@jb"OS72CX^`T:+>MiUFҲw1sĦrhT`#L>|FY,00zj1Kj5V_wFA?ϖ앑sZs{QZO">'"f4tF;q8X; X?ލPH^Ȼw`]7{Y7>ՖQ0pay<L@͒p#Hd~2G12W)~rn[׮p~Ы&9 t ›*f*&/lep%:D ; Y}kO1hΎ ]4h+!YH5tȊ"7.(wy6&S$ڔpRN2P Ѐɧ)AiDmuoM<j9uW]~'MۑnNx~hG^6/{=F`mk%O\8n1d.>6t9*aJ?v\7}s%IO|Y_A>\0xX{c2ZhyyRMy1!&s;y~jrEaµ㰅[u@a>glBgd85-'$o1ѩm'5z-jY 5-Tz'Xh"ayٺc]i Xc4Us\ɫ}܋`d $q&ߵaoex7r9&?<=Ib=ShUZWgSUCl21zeDHHyAaKmgL_OUm3'|a>jPKR>'J *M*\+q}Wf% AM@%ܽۋllIɸo4%5N4\8Wж0![*EefEk zL2eTBUyBnNY[b,=tQrD'D 5]{.8/d]1Ouz ڗEYi΢k[ƌ۷ :zJэ)UB endstream endobj 59 0 obj << /Type /FontDescriptor /FontName /XCUIUX+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet (/bar/bullet/minus) /FontFile 58 0 R >> endobj 60 0 obj << /Length1 1393 /Length2 5904 /Length3 0 /Length 6854 /Filter /FlateDecode >> stream xڍtTk.]  H"!ݍt C0t7RJI!! tw"(9kz}|EKGaU@Q< ^>1OMre&bӇ"]a EB(MBǩ#7GH@0k:/@"0[;߯'i'(` v" 0(_%8P(g1 Ãʋ@Jr>xPv+ ;A %b\u6(0 @a("]e53'XOC_xA)WB0d0prý`p[  TPEyp_`GW:9o(Hkhs a(W^W/_eS["p+ѯPz^?u#<>l`pk_ ݜO07_!h?6[( HXXPu@=!v__f4?g3 |\P ߎ@ 5 XAmapP?g0O { ߯F _ <>< !#!ď~]?o A8_e( A~x}!7Gn v9z - uZ5:^e-i-< A^>?vjCAU{8P-+_> 诊+za]PWAXR0D$2z7 G)4F? Ik| J7$@[P'B43< m^!>,ި;R>N ⸋u)`cS \G?},񫬚&ɊnQ٠Tc+BPLvܻWrbiXڨWB7 ?ZAQBk.N5T3# gGjgOYs xM8" B6dعF~ OMHy' B^s(gEdp'2&j JUKiO~AG/¯zi|ڝJlúCYݤO>~&cl>+%L\:[l&xGTJ 6% d_gh.l1T-KHZ0d`a8N0WqPDJ HNiġ})I+VEġ>&@K@JB{wx/rSf)>S3)05@?/SiwǒW:T!Gi$O?87|-B zNGe80+nUX NL%vw QC&{[6̘X1^nCA>} |y!%WV}WaR6cl/YJAkQM\]+^n1Ǎ+vTg|vI1x302'r\l]0?_"mR[snT菍) \ȠYγoswsa]C{,So3't8sĩzP ,`,^ʪ OoQI^wyԸ3t$]S*aLZhJXD.؊>׳s} zIϓS3c{"JGb 1 zBXܟGdMNP+X3+`d_.ђwN yp Yҩ6 ;/+C"}e#b-"E1[8JT>^֪^~](11}ԭ#@yjRlGv+?0^$l6"K}.)yb ݴ{%' ܑM_[!ief?`=90~o7*<;rc5[yP z*D^ #~ iIU*!|d2D0k}w+De!=_Q).Vn|[aq0NI,$kfNqJ@wJ;C>?9ݐAK7uֿ+MUkǤzo5_\҄WXuE\LfS]k5^nM;OO*Gn8bFjxfM1G3TwNyJnjZ{yB"V,Z7LbN-7=)S8~*Z72YT廇CmsLt$K)X̢R+?a ;.OSnGs[\#ˣ[Hqťv5 Vߘ"u1I]oP7CXO#wk}45^~>3d݈=S:!)58EbÖ"x-Ŏ_$ &-󍶒ZXƯ+&xE&wDWHycgB LL.Rk&i>~l߹FwfԆsś2_v[,>5bê_ޛk)I.@9*r 껖v嵝nQk!/B|uK"KxT>*DbglzcƢ. Ҭc$%*7۷l45wL2WlV} dhzel1iݳ0,U8U4JVʂJۥ陛gOqV|fSeiX}IeMqmϸPs"d$ f ] m!g?50K⊪oE,h(V´z@Y Ibi?bu,V%ܣ]x࣌ƹ׫gkWS⊴Jy*_UP[$\ff;, Tgܯ^gTF i9[c}f+d"tIYqiPzYz8mޢO&!npMԉ搘"?WdK #zAPIj *<:\ZOXZsuNA_便ba_g>$:Z;ՠ<1a_KRemٻ=k޳[S"'1|:& 51?g9c|/3%\FAnDY9ό`3HN{Eysw"Ay~3&;{Jr0bWIN=HaSOpSWm_2!&f.(5͐ǔ F2 1^RsvC8j54?Up*ոu ?ƪGX@oē|F;8do =rw%ffEKȏg9? 13Q8|L…-N5L+F^VqOso\A $A4AzGǚ#P`7oGeeu#:+?5vɼ`\ ș p\g4=}M%:{(V1p]J9»$ʃ|GBHCe|/#>I<e&sN$618G}kl` 犌,Ou*m"Zb@I\#^=mVs.S˲X W{0[^`g s2椁F ߤñ7m"^#3Rܤ #m ghg" Y l+V fRz%g3j,.[WRruI?n.>kd#}cYk J1$uHt#Yn:`B)JYl}UFdWK63Pvrk=r?Kر,o1r|UBoɣ!Tr_زٜԺw]:+7´abd1ϰZꋼ~nbF:zC=$eϰ Uq|l|ʨ`!X;ӭ3~'ݏlԼ4!~D<2ܡC i7/f:?4 s|ٱ?9*+ຆ*6%0{NTd_[O㷌lr v:MRmkFlfGKԷ/_D 1R#eֺĽjj#%'\7Z|,CnɞzXPќ+J@ w?2ö,eGq 94K'bpSI< Vi&Z<[Ƚ'q4B"9u,*S1xbt.XqHkk(h~L'zy|kخ UC&^fR8c%Rܞ+f,&A^ȯ"LQTz$6F:}qW;iϾk|21օr--RZNȏYs<%fU='970(GTvy Ǻx7 " YOVd'555_[#Й܎ ~Br|fѹLfï}rֲD5 ;Jo)sW#l"+ٴTJB_F'~7䒗‡ķzTS ?w߼(`4)l {knbu-,gZ2P:>4PZ=3Klj:مxR{%Tl+FiNn<-ZobdZd],9o>.xk36#RO" Bo$tR"i|*6EHJ%;% /pnO>WWFiD4Z]S9!T@3> 7fTcVkY\5Ã-{e-=?+:lS&Y(P endstream endobj 61 0 obj << /Type /FontDescriptor /FontName /PXBGHL+CMSY7 /Flags 4 /FontBBox [-15 -951 1251 782] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 49 /XHeight 431 /CharSet (/minus) /FontFile 60 0 R >> endobj 62 0 obj << /Length1 1612 /Length2 11790 /Length3 0 /Length 12615 /Filter /FlateDecode >> stream xڭxeT]ݒ-.!k =?~=^UfͪYk7% P1rveT9>@C!PĀ66+///%@QSVg?=;,lT/.@k;{-Q́S k @TAQSZ^@#) FY c`j`lgkbWiNLXNC=ch`tprxX8 mA=,lM"a7G͇L dha|dUO!NnG_% -l \F@G0{Gi8;Yؚhfhb tr;_7v{Q6eB`ei mfaנHۚXYa7qwh&v)#%2 "9ߡ% m> ㆱc pC kfÿA# 2hه ,L,0Z8IXM-@SCNmW5:Z[?FV[[z&NC3;(A9;\!"bd8ll[noۚ7xOMN_NMW~y1' mo{BIYW'#=K&ŝ=qjC,Vjz] Uё+98>ǤI wǛF7'nm~@*H(1Ʌp'HXwA%.eo\%{qɂD3&[&xJNڭFGLM#h,V\k{1ne"9vmE"vɇ:ȤN;s|Vk\$2ل\:yJX&$7zsh瘫=2(8uM@ߎ# Ø\`SiVi)]-f"q_i|f(s~rdOЯDZnzӾ,<3$ѪQÁe]6.G|F͒^jL($ ' ._`[!8(S-z9Kw{ylYTx|oNkIdܟŹ@ZIu, u~̧y +X|6BѐϖIjA%a]=i%ФpBYQG/orU$ɦU) 軰?dzKMjr⹒v ho 5R&I0V.~T8=c@]h,C}t]PQIUVcX!J`PE## ]zRbnn%MEAiӡKkZ9YyQA[{ŷOcOQAm7&:ocH#7w2jJ& ^="-&vqq9a@X B2,*H>9/5J0=?ؾ8g F[z$[7i[&̾W(E'͡kۚy2#4,ON(ڧv1!m=.F N "C !*6cj"*=nQ[Eg.̞-_q?28Q PTW+Eh=M@L9Qٌ'C#YaKL?@f*/7ڛss􏹔!^.#Y=}Uo6ˡg`6n{O4ծY !c-}.|Xesrڜ\O^{4&mf`85sS \ʗ@?h&O!9^ѻ̌>8;*6rr1y8sOmsSw .gq9!brĥ'@c!YeZu)g(ðK?l޺t@ڬJ<*)O4}R}lv&'5=ԾXsoC0E%qV$xq-z&ӓlxmaVbq*LX#qkyW d,X=zW o&RW:Ķ/~2}~RB#m =+ %Zmۻ7cNL04:  UnIcjSm۳RyYN/7mMy;@^MPxF'frvy^bԎQıvk6iҞr6_MZ`v0D `{t -$ϾbQ_>L'^o.~Yd={@V ]1f:BԼ+C9uq@FeOЌ9q^7I=UV{ǁ k~q54GCNzlwoUiubq3܉p(a[Rel*ɨjRJ·Mf`|G<lmeoH+]( |g+Co½DZ3t *NSWGdqtI}!g΀"wM,ߺʬ@&Lj4sƃYiɂžo!/ B'$#Uq08>aT quz_n6 iй v<~HE(Z zuy%]~J#b> ٠$Zd]vYNlJTwpTg=%ju:|1{TіD'O$t{_6˾O>JpVXE33Wb%#R͋[6Pla_`a]:@~1{'\LM,~-K\(|͞YߔoЦ:¶`esݪsu~VR oY:.ǿ:a֐鎓dS} k|' őգl#yڄj[)I^Jyd( P˹iUU^ak(&4Q-7MǦG^m^KCgBUayuәHrɦ#%628am6'Ȁr_ﭮml, ",CNwJ,yZBTYZLo0Uegc1 iY36 tx(|Z;fU )kT{\kq`q*N"IܦpV ^ 5\Q[ _c\(%#p+~AF]F{ʩ/ 㥁Bum1n"=`Q/lـTAlpYwo.)7K|֫c,;5W`&h!LꯨQQG&!.77QO:{$NlNJj4(OzfsO/1 SE ]Y f]߭FS"dcSkpus>Vz2b/uCH5ZH2V-Px2/1N~Zl .ȴMFI _13bW[:KQZbF10MRM_yOY7Ft< }>1ܽ&,;KN=A," ˛kC҅lN(MUm25J'.~KԈmzEkJ 0) .UMò%|H,WkŘ}`#H$^듦 /VYCa#E4naSthƯx$!SFOw_˵=I3n#˾JfY;ȴA5oMHō{ġBԘ8䌐u~ӴtGP'z`L%~h箨b2jEued+-wCM&U<ӑHgE#T VԹ+.!rVSDǫ,ڙH6ڙH kO)IvʁAwM'D~י}&aq\AZ_չn2VD3XdH*rnPEq djDDUS >(G#6 qgah4"\%Huf^SV干BgW!Z 4}aU_nszYLRlOVp sog~1׺%_RCU,T ~Bz;k{h=ED34L- Qk;;"| Ȼ[%Jฦyh-.%ç+9&@{^L"k Xu]\eyZwXH*9zb'˾L Kks*nINTRy@d{Gމۆ'y9G$ E(I`39'B 1Jsr|LC%h3pr@uL~]S; !/+(I5ݬ|DdONA2ƮwCz yq Nb+gR\˶ʂ!Q5QF()H0s wcGfQ,鑛/*Ex- A2X RQCI.sUrT33 km*x _柯LZ"Ok#Kdm'Wuz K&<CپJ}t"92E\ LD3cK+MlS LE^;x͖S#B:]BÉ@<6vCWiX?urrYRoUxI)LWrkes>L mexIShAv>d@|BA:v{H3!Ω φqUtbTcԈDǰաGӄ=,g`-ǖP4Bc|W)WGgDbi HGg\N_wIjB`=jt~%n5$/3_WP&{/:s'^+`ۙEsDz]1@!30NJox.Е1TE@ıE=wss0EA] ~ǀts OF8lDw/㟊c_CF(G Lx]C M{_ ?UTjyUƆ&>F-];#ֲz{3>|G|46l}Uet% \ W}ʓZ*UרYa]ealz `xX9Q>Z*ѯ/8 ~w9>19gr!ͫ(FSL$xѲ/dOcH&<"$mO@>LQGN:`AH^LWcrR&mml!"6D{c:uͫ9NcY߱.U/DXDB0<D LE#H q[owhGGcxCYS3~ӛ wK{9 AGtJOS:oW>_b-U{5R 5?7ҭ!v(o͆B͊aq3gSeD[6T$MշN A[ݵ>JKi &t< \!5¬zW4Ce~jG{;c%!/%R߿xZH wl9ȵ+#)Pn8ι; QGrW8H<^&7–a5aBY0WK;+-Ko M%엉6KLAQ!f9D\ EήҫGAllHU?eų}RIYmqAkUA Ͽs0|]ڦf2=; 4 w> 0ק"r;{ BhT]zUT&_!M̉*wfy@p - V`881o_. I)[b-V+gv9Y:j@$b*|gk)"3f )x]%'\J3"e<MMJSB |dkŭ)g L`03= 6f]u-s[y-.Z;BtŪ9&%3=#5x3hP0eN'l)ε:R6dpV M U nPSde04|3Π}RQ/]`?9ݓ{ؼ^E<c0?!9?R͇._Qe>6x??:½!dUuǓNd 2-o(}"Po"]!=(gӌT@BXqR7Q^^㍘,Um: V >HvDXq)YV-+#O 9B%ƮX |r` )C`uf7՜vޠ/Rӎ!l9x/&p  q?-yyJc'"EDeʼn9%Iihbw{ ql۩5`l])Pj2GVVZ FGm]RVxRymW%qja20ϡ\ XCs,n̖J!C~ڦ0tKO:#'kSrWiG@{ v-BZp7X6*2tܭ;r|`y*9ڭ.~z2r#OI՘͊I嵿$鈑{aĤz+rIv#BtNbFTF@b >v^)hɓ6dB;n\meYW-QD(=p!&Q8Z$ㅼx~m/Mu@M @hYF%egMݧIMp&cݨݙTi97Q:I{k=]W 4K7Sq-hEz{ K0J3nSd@~QUw``3T6 N? #S~{ݭՑW0s')ؠNGVtN}yp{RRFbmO#jR=۸'{;~A-2&ƤZl femT%x \]5BfpZG5nmsYB6Mj.uFRW}Y[s F&uEQ))֒h>,I& N6I{JܕٟT3icL$1peT&osβKJ/o zCD q0',Ǹ rߨ"]fmy8jWzlj.&l?z lL+ѥQ} zq[(sK_^:(szF/-'E6v$ ઊg!Ubϑ lq2mZ4<.k3yt521`t0`0D#pSgZbl52ѵ (eCXN {hٞMSF` y ΝxeQɋc_&.PY7[v)]HɝM' ]O+MծX!Fbҹ<}$eŮ([Ģ%z\P+SQ?rQLbRDTWi,%\Q&J Dk~ߜ@5BJ #=- p*e*RbA+1F3{ExJF]UlT|hRejuQVQ=:A"""5pkewͯF 7q~å塭S[:!dbžoqN5eѻvhotVy2fwTVr#B\N[^Mdkn$_ XMf?5q.nTgt-lZ^$K2WlQ3qrzrq5~Ͽ]u;+HkJFE\{Ks ԡBd<-!‰s X^;e˚H҈+1K$mz[֠a,§Pj~ב$GRWm䉀C|k搫vkV*wR3.xmdgoݫ5os90Y9z2 ޓc5g*I܈NX;| ޽D^VwW&|v[@߈cKctT邬E4?,|e`m x~!Cib& (oRW. bM6=)ܟlh=JN)1w8`A3i hJ_\ P]_72ʼH^ޏ 4yrwaA&9.|g:6PA gB; _<7wZtPFp&~}Uz%p]JwICpqi5TNҏE~ULE9OKiڭ7UfQ >-L9-+g=cܦR4b =~ `Wk,BfdGQdm. kl{/G06r7 2-+2g?6:Q44ט&/-BhB V-XaHhM:EpFgqa>y0ST&k?Vi endstream endobj 63 0 obj << /Type /FontDescriptor /FontName /EKHAIJ+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/A/B/C/F/H/L/M/S/T/a/b/c/colon/d/e/equal/f/g/h/hyphen/i/k/l/m/n/o/p/period/q/question/quotedbl/quoteright/r/s/slash/t/u/v/w/x/y/z) /FontFile 62 0 R >> endobj 64 0 obj << /Length1 1626 /Length2 11042 /Length3 0 /Length 11885 /Filter /FlateDecode >> stream xڭteTۖ-!Kpww¥p'݂ w $@pw}sߟ~7Ʒ5ךko 5M H.P;Xi898 ((`+vr2 @ d p >89{m zm ]&&Z Xx- l};9;!oDM U5}yY6@r5[؃-J`K` `՚ ,A W?v5w;Zڻ"fr[Û L f vުI'Wm7d tt}o0o^9 yAeno]pw;Z3dm a5 oݛ;;{wqC@Vo5-!ol튼v<@ax#atrAVl*Nʬ> ['j.}Whw{{sx{do @ C;_I [I'{!o#p~F TC,mVoۮڃAo=R ;lv ߤ<-q;Pm Zoe'tpX9!^v@<+C\^÷9?F hBo_ܖo}ߺ;y,,>fdgBƤ {9 :5jq ̈bT4!{y[qgߞ+ tRHO3m;NIZn/֘Ig(awgmYVklLz[s57ʩ:!17R{3.-}}sdP Yp ݷ_!û7S|! 29F2YKȰz6n(`F(E,EGhE;V\v+TǮ1ѥYǽǍ(į~9 V|(A_ؤϣmCM_؜ӫFJտphߎ:=r[VDloш)[C0慑j`Fv\dK""XzLL-%̶\) &b&R:ZN\e!׳Cû=]&@D actw6' nŠ3/Kj_kd'( RY[731i pgMXYrՒp)h,0MQN?ieq2)-'BVS<خևHnXX{ Aw6K6[ 7ǘVݥ@ 70BK;f0-tqJAV4!֖/дnk=$LVdU!_GG @`9+\[Fm37KN:gIq5"y $r#@Շuj;E6ZἧjMrYDZKYS D2x$ۼaKձJL"O_/]P5Rg~53 K3=!A$V*TSZ c&7O!ߎ5%ߏ&l/.x#g*HsQπPGOjtR=m`gLnΧc;|e Brm˴R\:vci+ Ffx$S mzmNBwS?ՃejT>5O%E"|Ȅ"sIPAY9.{[9C1 a8$7zZ^0yBKYau&O `M2QvQPhūcqǴ" qtd5_kg(mwn~VbJ q{t*q+N|'yy"{_"o5?xGd蹽P +_<#lE3fQDyO+L BB>3Bg-lFyKV|x ՀIU/.q;{99V ~QT6la}WX{Aagֽ4<裺Ȯr'YkݟYVON J2?FY TDQG 1aξ6q|UeaBUǻ~ʚ۵06ף\B*weix$>D~Pahn<m *7gKL ע?1FYD7h2SmMMa5՗D.@5PZns ysß nl鰱ңUگ'Ŕ;'>mƓLe;E8,m2LJ:-ayqHi{s&t̚G{i bRyMS:xf3rw˦ރi:O+A2@_9!$*Ie=f>DXiELC3g'jNpQg71M{HY)h>wї6di=wr}_ӒcLtΙOPYN)-iS UNl|%;@?%R!."䃾:%š4__6d+Qؼ9[n %>qd[nnce_"U*X%T Ū{0%~*6CBswKaQWBR+@_"D}kk/ܤzP͜y߅TJirl0:vTF >W9$}Ո.ᮞxO˗3)TL:J/Q)i7d|NYԛ܁Z_أJpd;򿊕>i/T**W4H2-=G H <|_O!N&}Oy-(3UPFY.vKcqc=b8v2OUI9n??F ǦBiCje{jY.~W`Wsj4^GͶ&׻xm]+jwN;>NWo{bX.H392giX׀?}7bd24YPx2 %|&[ NzP:5D7 Mz=pqp6M,jnѺbl+PbB-FOD.d0 }5@|; %׎;ӏ"{]uѕJ4x"O\(jM V?XW8 #GOtk~}%,`YiJ\a1):Czo³U:ȇY;T< DDu/,N&v@*P&#b(,Wbpk y&K#zëQG{K^qgzIfjHH'g4ﶸ$؋q,jG>[*BF{yLXVtg~aFNL7iXCwD,s*榨P@t%5;G 9Nj'3d'QUܜDdCK5k2M7Nw1);k S n dKFnU1OCW(l AI O-^gLsme 4&.„X-k2/m":'#yn>X`)W7j[tiܣg5pǧ&,ypt1S(lpp/n:~w8H fòHr4U@!yp$gF.kJ cm@A-Z.B#Ҧ$>ѼeJggs^j]DƉ*oJĹHlbRP%nٰTՑnvqR o1>ʥy!y>ucDߺ)h܋ˈƸVê=anW{݄5CHBn+]g Ue3WMZÃW9Wm&(=X _@M ñ"Qom>"!6Ib|Ŕ;ɍ)iѺ*>Ed G3OAcuoPt J{& !7ӣa)wuDI6~͚b[o?(w%] #[nN^?T4Zn, l/Tl|)Y(#*$۴intmH8p/P by*,!yy=7.80k,3%7kb3 c֦R0k0뮦rK{j*a{n^곪ֲkag 1FsqMd;o)s٩3 _ Hǚ ^/s6ja]=1o+|!OwʹY!yjK ޞM8m\ A>u'έBf'EaL#i#=$@Sh$)MSi/`7l>Tҩse~l5rLؐ*s :ڜEMDQt`'. %RI; ?,)Z̆d02X:\B,XAaXu{Y_+U8¸:5'O;?/:B$[WH{򻆺/=́C, .OeDa^f f{Sca'ϟ0_xDCg1cxO .Lkk/gŠQ|WRC"X*uIhʟҗ g:FCMZ)?ۥfj?ziI>E"ϥg 77t'A'ⷽ,h82]Ͽ8cup'"ݖv36 <_d2][wv,&`{}ܠ;*hÉ]M6dOUaxͬ2H—ª?ޗNһ7B)/u wdz[^k GnKxGixv "X@1zay>C˃QP旱(W1Ǡs4Y)'+\,`4tX_\1q'*|aЄGLܜ6ׄߗqaPX 4C>$J\6pF'34XR40h/: r$5kEa 52'|qBlc| 엄 'Б #Kʠ돓飌f;yQ;İݸ1 d? G5WJe!$]KAuHC@HɴPlU@XTHVTOqPNOغCnKke3Ɓϑgt@ oGk{lHHHF$gLUvF!-_z㒲K0e,6c|ՃK_YcV y(3ld$f ^'֜EC_xڨOsJKkuA|G0@mҸ z0Dz>)Z<ʉb Ak`&O#/^痻́:$o,C*L4'i&^' Н0pM(28|CsC~0E'G5e/D|Kc=RӍ::08nERUuйecO(̩>LsQV沲B^F}܆5Z|@gq7$8!d;+X{e~/$:( M$Q&nOiP(d֢@\De)x3^E" ^$=ηWe I,ߩls-3F6_w3Jp[i(xE؀eQHilx=9}GV2'jj',p0pv X{\)0*+%g-\O"p6+–*1Uo~[\'= w$s'O|lh}͙ I ezQN [9yRxj;FHj4vGܬ;/nG56\:堩T}%uLY^lzYieD@*O5ZX--L &=l1 L ɌKxjPijy•{vRn2틯݆/|`7.]'xE_0Pꀴ1/~98 kbS63{ D.GWʈ"[B9N{[l>qnbIaB̚]0A83N Ty10 N!5GtM{s@!i+J4W1VcSO`EjZnMЧ0G&&GރȒcM|—ۢ_;a$gBB'exd]j(k5T)$`Q,X.kT_-c˟~j[V~ " o= ?F;ja*!Rc#t;M3}>1\9gR(\jInq% hv$ B!\4d9Ck)GF=)CbS/jnZP2!r15TGChDG ?W5L"ФOeM\?z~2~OSĒ|WŰHvfލ8kɛ5Guݳ> %kU[Q+ IMIS*&:8wFfR]W'u,=8i'kXyTXȨ?[ƩԣemO"sΐeeIAX.*uΓky5>ku-9,bq?;\o -YmfL.9\V̝L* zߡ+(Uz 5<ª~"*ȜV#eaBƔ:cc ݅by5:<) &,:s?CنJ~LW+LӤF@v[ة"ѷ3U^ nP>Lyֱ~X,g͗4 A!eF[KW>f[,i{zosyOB{Ukc.uH,:o\?y-d{kɮ  7=F^̱?ߌ՚O=si2 9mb3:ˍX(TL:MKٿ #W]3اE4eY$: =ZojO] ˉ1,q']dyo͚qy:eͬ7DE0T/ RcЖOff'hqUj |-ghDGжG&( '|h8eŒ5E1j"$Z4T=F|I*:Ȫ>UZݴMݙfR}/Oj∆ؚ#QW RNc]SM(  f9-scM/Ȋ+ڠǸ;0]N}D]8}kC 4u}: Ѹ_^;LLpyf_EO046q6䁂 Ρgş):4_K-zd7R9!ʘ%든i۝8eAK0K4E6"vJݷdf !\2t8J J`~eƷ[Ⲷ*e*wcUL-vlv4m(›?uw&MlyZ$vd6O_B1(OKMvD,N:bl*UI1~UoI@VC #R;_tƀ^fM[D$JPB?-N P fI7 㐲<'Xg9pӟӦ%H?Dj[ܞf8APN@o0~{_O3L\;?k~.w+!諡fq@R3M%,~fkzWJ+CYu8ʡ Gr@r2ةBoa%E AoPs> endobj 66 0 obj << /Length1 1642 /Length2 6634 /Length3 0 /Length 7471 /Filter /FlateDecode >> stream xڭweXm6 -Cwtww 03P3*ҭtwwKJwJH7 ~>~εεu{ʨg+BT`^A> Ն3=ceUtPB% $c(P{ood|8.WhP3WQpT!wdzP@ z@8v0w_ n̓%<A!@>{w+y r.i)Cz 1$rdV=%D8s{@0f@[!i(u >߹l!0 EFݡ]bt;C<<4H߷w=w 2'mu=/v0_v'_qNd@0Ȕ|9G>ZY hh~/O}?@OoS_E+wG+O/3CA yqƮ`3"9@ANxqf713V6o6g=D |d JAx+,WXH . D'@;TO@@?h]A02D]ȩ7 twGg C >< $15# Q0gp\i{AxIQa~@5UjxϚIww[\)ٻ!y/9{IVEKMi}x"`>o`]n]3+?NJ nD!-g{su?248}ٳEÝ* |蟴ǘq?ocz_]An|z!erzfWxo:1U{£>SVD<));ZÇ|lm}ȩ5 Q'8&H]Cx_o(q`ݷAKRߞ9K7[LŁ)B'j&K@_K, Rua17m;`]&4Vm m 3MZnps.yz^s\70l˾Ո҅pyh[̠r~2X, 2+*:JqYhӓHYՠOyAj R5``B|eH4ro!0A?t?q6J_B!'N"ˀҲm:̣xG](NaYfz/r!̫@/8M.t0]nQӃI0(~b=z e)~_]8P1$:mb@wrR~;E=yV=AolDMyik{c#\kI=X~7P$ܐĘVc96}Mߜ +弟ojJ;ԑWΩ[L?kx&.mpyVsb7Yh=8ֲwu(D1<]Fb/oOI)=$0'ͱ&yTZ(_IW( 7\"^/::5ou2?KK8Ckq͵"z-TCFiz2_H`9K =hO=Jdj6%ckُ4;pYU^lJfUrhL}բ\y֫ %JLR/>Ӳ!Xw#Ȝs AvGq#'GD}3q=I<4RE`NbXmܡ^=0VQ^C5}S=4z5<aVGj0d:8 G TW O>/ >6Eь.u׶Ra{nH,*5xWM/,,ʚQQt*ZDxdKyt^TIIg3i|zTQ^l^y(sh+3demk/40K5nUWFSlfS *Cv)NVAa=’QXٶ7%)po/< pj8-!uК46wn7iպ" xE`CӳX\;UrsO i[\P6?^_%v%||?)e|zec5E8Xsseˬ}[d!T.Z3\Li̩5(S2wu5(x-wdfN9D0'si㡊ovT|⛷q ,񲑳퇞Ah4D\.be]4[Iiq@EH~#$ Un4~_"?A.!'[W4,G+A~leh隬E[rЍo[nlEt$ۧvBttŬQ8J}^0hongoI^kRR{w xlgkKs(gv0ղEY$ *9*# VQPkEܧۖ^k{0n~]E|ID qE)iUÆ=SwX֜DYsAT0+?꽪|vQљ̬/v=C5$4WWLZs:;a:F2پHLW78yjz;E)Zӯw⶯5 4^|v657$n?M$/y1y][UNѫ*g@(Ak|YT[MR-;bAw?qV *CeB2bʧ6>BHUU TZcLB+*Aذ$T(Nd:&FNG]J6 l [1ujτd|fu`dݺ|"0$6x*u~y:ӡP;  Pw2=qBY#D͏r̕ZYz~ؾ^ְwT8NMq/mj8s#,h&]U+?n6 {ĒɥVn߬xmXiO<1L/S. m S?b|J`@^k1<&+}I?vYWmu[v5`d#V5o{OB-vfm/=Yw__@f^{HzPU)P/Vͦbn%`kq:8Af?f@5VluJrYAG(-l7)6_P--C%EVPO0H'S,bF]<>E ҫݴ ] fI"/V3Qڞ >?lPGx2ۢ -]x'5T馊'#4Oפ$!6sG?v$3*j΋p1Z|Jio OCYDC4D>vex&oF0z#D01i8cow_93}GOdu$Q/ _Fղ&l+h.aTyj,DAĨVDZlY2}Ė%w'БDZ۱\Xa-gL6(Ⱥ,O8bsZx\|Jk^~5n0CiuI1ekj{RZt=#PQs лq{ZC=q*gu +Dv/سO:X=zYmAG#r @$wisu}lk~_mǖ-" E|._uA? 좉֥]WG/Fpt³|4^JVөZ_tf9l6ٲSk-ÕcoPQcub:fqJ>-K= 7f^0H})(j`-N78S.#(IUfez եB6[Ihw~XΧ8סT m:zZ#ϵơ?qXG$D;^"fqA,zNXՏbbɇ3^haf:{kym~P*yheļ^f־?LA+NױS8OHH(Wˤ9>4420-jTyM#˃U,s &o4q/m  \836҈ͪ~q4 xKf :h(_qCtZKJޝZ=sL3dFC @iQs_=0Q`4ĬC aNPkՃOM֗Ѳp{9H&Ǜ?kԯKZza;\θ@)pxLCR|U>"dCmZBuaĐ\B2M@WWeJķvv\4St/xj4> Ko2-QXR\w-٦89> ?S(~:FEF(''3 0`U4+rӆ}W%8 ǰ[A9Ax.H4"7N!|LJ^K^6r<11tL|FZilZ 3)ȮExAF83)>JN> endobj 68 0 obj << /Length1 1630 /Length2 17087 /Length3 0 /Length 17935 /Filter /FlateDecode >> stream xڬct]&vvTmTl';Ύ]mmUm}q?^5{Q)2ٛ%A.L,E+;Wg{;E{yF+௜J hbe7v4fq) Ã@wttЪh3hz:[Y?܀v@_kGU b [bߔeR) dl Pr52[A@:=Ҝb8@Sn@S?*7`d r{_ `J.ΦNV.Q%?-M])_0.V g X&@?3`8-labӝTo`/oY\LlcmaB`gVd@V\CtWhIكl=f@sfE{!w,3@ -_9_.}Вv;w @Ϣ5vYz&d\Ed& %c\ߔdO#7nʅj$uw/EWRmL֌svO?,‹&qralE bSju2\g6Y? O{kow 8LCCLZjeͨi5f*8ڄ`r,aG|/{kzx3"c4ϝ `4!~|-aAnYrμb\foW&rF+庖&ܲLІ;{\y@coF%[l@w8Y$f䇱^wrR_LZ8`bśoR(%Ԩe^Nj _&*}9'*Y~\ ĽKf5O:cgBBEX1L,GOrs&sԙ r!_M,|Hyb졺?> m-Zbf/G8Bs ܩ`/Ϣos5w4<[z.k9r&q7ӣev4m^-+% )'vl6~~FLAV\D5 DVz2OPJ7-֔Lå G9n3^l)LB27 Vil؁k'^MI j؛'XF3z':X/.(0~gKC($UkZBd n=O# &_eOF.$oaK T4Y@&Z9B˹r83,;=Az]=Xd; !_ 8"wӯbV7drͪ*O6#!fnM}]T`#tՑhO\Dź^UM5Ԟ'ѻOs}#n' /%uFY?Tecf6Nmb:u;qw^RI'+%6zԜ ]W=|+VŇ~j$s6POK >Y؞H^T3[eMDHAO}٧jmј1ZK [0@i&ӑ?փAU$mb|RRPg+Ι޾.j+c['*;2'G-)o22 Gc8%5U2B*\Ll`O egpèqavX+FQ:3i jp,X1a۬gs0#~-;3Y}(r0PʗKo<;fʠ7mTrB㳨"g枏h|<+o'↊2sxr@ޮm8e?amuZmiʘCԴi8[kn2!6ÄU%r72qkP7fpP #6[R"_ǭ \2D.;DٟgOx Af6+k0K:7_V32ZӴcݹra5AMMε4A$[64#&e7]Jm8cCgpkko͓nS!K$a* v%)Œ5'x }3G3u[vQE֛?3owUjӯ;m _LJ3Sy#x)m1*@ivy5&u{=ǨwLF7P~n@jVr*cVUS 2[{ 3%~MHf3ԘQsfXIF@&o$չ\k)BAa ` zL+߼Ejg*CנC=z2 g^q^)~ZtV)ᆊ|uD@(LZʾ:Ӵ3><I>+l<[>v?=Id>(f`: ~_\Oq;"SU/} =#qI|ܮz? v:9e+l#05}?C6B_R 7L@q߹x]yl"KWУ;ؚ_{J 8z~XY5@RS68- S&Cby*$HU3"(^7ģ@%6~[B5DV֩6 u¨]EL:jdӇv?A"UaTL=%h,z&0>j*ؒ&߆Zwg1EYNDu[5Լ,>SCT3꫈ cfL`aI3ކZ&*!t_m$G~nײ#*])X0I~oXiD~j0NиLz'4a>s-pv̳4o>Y"2$3.|kFae%G悂؃ԭaj[rmKg^/:$(~/:ᘢكqsŬ9HX\CҹqU&ƿ)w䏍 >Gpێ0뙉0*qMT>iF6+X !7u;ӷr7=8ݹ5d.Ň9&.tb؀ w%yx\x`EhK¿N+ k" bJ-.h F9:Gz֬4塔)D zb ȂCK.ۅ@.؛oGIqAbEyWaλ7'R[/>*bHQ P<89Hx*"eA*JTIĉGH cAZ~NKVe m2'p.J Dž%~1|]B{:(`x5o;|a;#h@ JAZұHVĉc\WՈ+nй86]j}\Wnj^ijm)6(I%=}mr]m@-E?nW+b7.f@?oXK`{jz_P4o±1Rh\/ F7ICwQUg*ɗƺs*Yͣ55ŀ F#w0r $7'*E:h/Q'UK)Q^v!\+Y5b0ж>d$uәƎh ա2&2mk4=Nj{ٸ]XCPwSH*)Ed}tߏQfӰhMq[wN%q<_^,e!R@t_壊RˆܔX1-~%cPݖ"}"_3|C1௕͐zimf) ӧVev4ɀKIm⮭ vqzG߽Pr6_ W4>Հ Gmk ,eSD_FX,3SB0'{,C>:F"fE4GT KU{kWٲ_ %D*o{QqÒ!8'Ns}:,P֌ R !vrV'ď`qY:c6ނ8%a^D +lwhdZ')U eϭi"kN[Eq֤r-Q_ zg@qܜg\s] @'}XL !@=teD.Pe*!t!Rh57᳉wuΗw@LPcRrcWUc9~qAMeNTg{ƷR 2*n(w?h#]̖cď *-b 4<S*vze:%:xӋ §O_>҅Fxi&$h U5 3ؔ4}fˋJl,^,IC!("pw>m >F:W귗/dˋ4/k`⼈6̢_wF{EQ *(<} :tV t1JMyTax!Jkwl0H0rlAԪ)Mq2W15d涑;&"ɛxÿC уT*o *.+2|ZFBt;Jxp*ԝ@m*1:9ee϶=,;2`!<.NF)O &=Rt%47rf6OgB倨 c|LIۖҊk1zZp0 p߂7([F.mKa%2.#Kb")a?,S+aZFJhRENW eكmdaU͆!12B_``V2rFSwN \hJ[ƇhhK󽷧Yx &G]h($ovKwݳeeǬEqnOz]_)&¥a 8w)ݛm@Zjw<~7.:qâˮ[IHZe&dNl~v[]FV`8 s091LP^G,!UD 6ycJI}`}H'F,͗$WnɦI %QYAEG@Fލ6сLds}3H%KNw m?7gGX{I'GZF"*{yAoW&ʗ}7 qnC],L0f4=8TQW<˔(Rft|&0 v2򗶕\yuAb9b]dox$hZ$&]ҿLv`u]n985Z4YJ9RX+ISH n NO% /y˸`?y@ٞd|@8d%ѵy/o83Ze, IꢤSnn{ifHJ)Ivr]>LYTVkO~!TcR5Vv'd`6~]J,z.QP=SpU v),}A('9O_3̈́~1>eSMItk \+Ewg; KdAǙo2 `'NЙ/b窉 ׹?ЉIvg<`+]t?͘dο: !|{v]:_"!;)/s{jSaٚ <{N>,ϩĻ4,jDy{K@ )H6hTR%d47S ymyBZ`Ŕē@P(tb+)O|| cV+oyεi >1"1׮5+j|J#֭UDusIǏ*y9㣩N.aEv`ƚu_3 ')sΩk%)JOJS mnVs!K%6up7s9tv2aoaFǒGqڂ%\B.יXbPp򭡬ܶm Ӟ ҭNo c1vQPDa1 ?WbY oאWP+SE- kRc`. HCXTҠv,F`^lԬPwyԜ[QPR離iK $gY~.zx.R<1⃻q+bjvW#>'Fi} soq֬ QFCKz,ߺ;G'N3QnT@6W׆!eriN~)8{Be7 uV_@ ZXlƀHAemJ1A i=͐gùm *z\σj\&VɐeԜwmvn9Px> OYb=!o sV b.5U0oE˄P *RI!WcƈGx񶾄ڹ1OLAoL3] nNY 5%kÈ,PXv b֣rWI ^VkZ'a#egm1 &L AS"ށNfgLlP;V4˙fwJ'3܈ӎn{H 3QwMXaHWKdϤUX 3Ы?WQFMk9z.ta,2ؒ[/icr Y%s$6dWͦXk=Q~HrT2,UM´vJE2=dJiQ@ԥPˠx뭩IoATy L$މ~hq;j ΗnI8xNpƇz<3ɆUgw~^3'V&Iܴfn1aP=1 Z ss0}r+Еl"iB? r]ddxV#YљLٟ+HckDh[UU:\R _$@t PZUa`l sGٔ6nSXj~7ajʩ%6o>q>6hR{NM"5ou*Qje 9~$>Y6 [!! ԗ$2ِ1jx!6#!{zƮqc3Ir5qkgr7Js#nC6Eҫ"5Htk HR7`'N^Ҏ\yJAt"Hi۾S-v<^#u9l%% B SM+XT+zO(ܰ"1gAX'a>MCYc"hsLe%L\wDJ-Z3m)"д&99z:v6PI4+qF+qQi8:::&;Qg.D6jf9S3 (S`K|Z1ƠF.5B6S*pn^;/_xFD63)㭟>1L'*HĨr|9Xۿ,;x[o`aK pK]iRg lTF&CTB1S y,z܇,J UQ8fJjlt%I"yx_;ӄHݕ3\VqԊXqanבu3c=v~~F2r$&vQ{MwR, YBq/ɸ xah)$>UkZs6 \S*=W oʙuΧ]| maY2?9aYIĥ}SPչJas3l=x8aHYE"i aH!yȩ٧6Ts▧a> SJ2%z)]nۆ=* XXxkh\-W kgbP'O 5#PZw ?l?U*⬙KĻ*YMo] tK dloYHr Y2FؕJ ̧ks=ެvr%#~Odpxv*Gh5]W$!v =鲩YN tBEwJ1p<>P$8KLR ,av/K>? 7d?S~q̈́@ޡ"Վ V3jThLtι[ x=kKҳi蓆5n:4EYOj2Xcȷڊ!Iy\Pƕ Nz} )<{P3a7#LY-V$_}nkQQ߬[:X\U;J@~e9U^G.44>GZ~ѧk'1(,$"/Όx-u9ϔS)S>M%76gXGn!Zp<+j d2m- HWoJ0nxgwÔ9ٍo*guWd)>K+y<à`?.R<*Bi<WڏNV+F0kj q=#tf9( N)14G' /adXL'n9Tu&ďi Cݮ3@wʒ9wL'M!/5U?yW7d[ ykLh#6}TK[|vP  k3K%kMec%T=EQ nh:noCc^=Ģ{;zpvKE) o4m2YÓ>Zk~0EU!t9 6FjF BV zrJe͠3OW4۠ zZ{{ a0R5RaZf!t 7Ӹ@\n*3c+L6Hڒ4: lU3YntWzni 3qMf?2hPvB5sxhGW^KLi%a4r )kN; __ŖI|0/+xNkxŜP47c (\E{%훻vO->B,iۥ9}/t Ѹ*lY%dJJcNN?9vB}'' ҁCmsڣ ]p>8%|2| ޡN +4#^IWoL^Ȟ: xԤUM.{&B^D/6^M] PdΡ^ןa,EԲ"\ jCfgbLR rh蓲ܸF֧}i}xC|PC!y (֤1#t lA Oe-bGdAᵰe/'e;;4R)">6ܖX=Jh14vHd~hn;GŤmr };]نylaߨGd<`\QY j I!jB X-qc3fͦQ[yM?2Xoʦ Ki[:goY{a"5+#// !iyZMڡs#D ֤8,tu5}u$F~LwgcW> Piuꦥa*)ַ{=S#Zm9c?܎BOKDq?ɠs[ h7s0kgVƌk6w'﷗tXdv`LQur#4IP;7GKBbZK1s5 i\;\\ 0+͏sLdXI37u%Xht ߵ_š4AXax쟗AIXL&p[+9ZSZz6tc |Eou\>!!p`6GڟS>ha࿇<#[:XDI|g gF$끒3bXu}BWljnBXeH5]դTOQNb%5+{{hSҪ竝D_X48=`Agm4N^ %cLmϸ 2<,ks?j#S\Q& h(0[-CɅZ\"}烋A&['~ŖS޻9h4 (A.?/ ̐}81I!edInu1#/fKE'*fI {^C [ +g!R y@[oe"ogǚ]tUa ci}29 w125[ht$wM29W@oCR m _uq 1zZoCIxÑ}hՍ<$7Ɂklj+T!tUSA<wC hOCĦ*ʰ `-IG.1-X6">D(3ԋr$w UǜI _0NnWC?7FthcFk1y{/UnFN,T5`* g`ToWYDYϧk.XZ 3qՠ^ _TDW$)R+@g3ɔ.z-@S\zxDD;65 4 gRI5凖m{K>#xp~qHk͡j/y _R5iylZɭu7i4g'ni-(s%CFw ClFT9;\)mUi&])sB ^ *y$1,x}1:!J YnSO\ڟޛBT?Q1H!nk{X'Kx038|0,FW2>"AiNU" f??TmzXpy%Uw.2,ONv9_k endstream endobj 69 0 obj << /Type /FontDescriptor /FontName /OQBOEH+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 68 0 R >> endobj 70 0 obj << /Length1 1647 /Length2 11054 /Length3 0 /Length 11898 /Filter /FlateDecode >> stream xڭveX\.ni5xpwwoqh]w ݂3gs;?zWVVU75:9$vpefga(Yۛ| j K7YW]DžDM- Z$ ~6 2pp`G/gkK+W6=##ӿ$Lyttм w:p,@qe]Y%i&@r~/B `mrp,f`sJsayu. 3w7/lo vX:\ v0s3+ww0+=?t] [[*o;̻hpy0vqz~st; 7kepY@..0οꁎv^{]]@v,H1\c[Z; /`;?nԹ z= 9 `@bUXf#W#9/C;-fgo:w @ײ:Z8f+swkm?W#;C\,\[HY{U]ͬ@[`rv;N/69{ ]m6Vy W /G?"i+`a{q_gE'@H:#uW{/;oy{@ OSMzVk5^~o7;@cQFA~`%+ =b*~keGaw׎+'؏'cq7ը%X;lFaFMkwsTUͨd3} {~ 6խ#YZmN;z=fc[ھ ؞"Ɯ8DO@<#dW/:WGw(>X/nA`@q4Ez6ﳁk+qAJ@8qs&oT5esO7hl)kr:7u (Rt3Od=/ߴ:VMԖI>ߊ6b'eϻMtŐUpM8xJ^8)UCaJ靐xHq{,Vn*tTVXf}\k#?݉5g'[;xzX/azյ/ց_=V ')GA)EzF;6漲p}`#Y=qP!T̂w$,dZVW{>dJ3B)9bAU*P(iH‚!/?pq8בt}H$^MQeCW M7Q?DTGPI[h}`UcrM%B6j8ӟcm8(2n?(Sٍw8"EuqKjyTo\7f³ΗDjPY~Wmjya/-rvhcw+Ż<pgX񗰒 VZ_X@ImT֝^DnjU rj>$*]~zgJ!q[lיJieRpLlah0&T'M!o&'u4M,7=oͻLQvob2} Py躪sؔ|7)_hg/-#vҜ[kF8E~ Km#o-qfn6!x2`T _WvBΊ0o,*gqVP<?_r l&i.'KrYFb;k^ ^H{MĻGA}О@𧪎Xw[!ҲvQRuZ: 6 3$o6=3j>/fwqSgo;-I@ǔ,\R|H'?A]{hAKѢ g6cp</_Yg-O/!rhl+ imME8 w8;[ j0ĆKy3} Ek!څϒsL21X]%-|vΙNnmsnoj)ǘ穓x†?ATYB3)!RlZTHJVQ˹xXv.?  Ty;O&4 "x\v[Ib*Uj;*Ju_ۍ?Sٚ4*|o'Š,¦gPOК(SrЈ+ׇ xVqls g CB)xnK{J}ycç@mr T| on :`t`MQ:p^YLHb0s*3= ?J>~CYml.3N! <L<ȼ"\1Y>}os3 W*6f/Qfm!-؏ۡb &ン#>\OM̀@MOCa:T[_#i2+t>7߇9w 9Jlbw~:wTn|dR?ctl^Go-̄:˽٪XvN5J]Ib#BN\}"B? tb'T~MAÛes5  qG yIO;T5PBWL`u+j9}FѸP~qz82UG!Bm%Zw t*S7QmH,FmIY>úxTM +'5zfЯTfD%k^s ( 58]  ~Q{_ϻB%5uI mk Tp#?J7!N `0 6@* *-1XBhӅ:+%u􏺖"#q^\\z/0\]U:ByC8YHԫ˽&|~Z$|.|\F3k zb\0̎f{a 6bi]Ҭ|1\%j1} 5%Sl1ǹ#%Q"<;ߎvҠmnoc?&ǘq/b7žݶfR\b'_[,ͤTϝGK/H&BbxjD vdxpG e9lfp6)HBC} $Edhꁋ~Iz\ {MN0k\.唢NX Wݖw t uרc|k_2(4o^ ~gd΂g#Vx_"r&M6Ya|8(<4?:@]77upce"aX=nIyXu+KoXpzUزQۋ;qT6*;ؕa2VU~t1g%b#IlsghHg?~~=6k(PW{&'tᏃF.X[D&" `dKC?%OWcg ݨ9;2'ɅMc~.YT/[$^+3!ۋwti}t^!_8B!yg&ImJPAɤHӦoC߃095mJ1^Cd샊l:_5 bwBܭjs`6!.yV'-բr@v8D4.&Bfw.f]sJ@Gsd>׈j(:2.#^ͼ=vb[-seR-gQ  l^ɺȧOC±C03j:YO\v0VuIJuuj~RH= 5l599E r!$HlJ҆_4R8y/}H:6ϑW7 C]jvzqRy|2$AЭr{eZ/}k*v [lnZh[I.&!ߗDT!tqGK<`Ar7"ߚn"׸`D\6RnCvcЯu'Nj]jƺ Pk9 ^`o=$ U_Y%S Y+̿p. X`*Tdrb֟Zp<$*o )H_c:T}6Z넢 _(I4xQ6Ɯ X&5ƥǽy ;i-]HM%e^zG-[uv[3\}H(WX232KB6K‚bT"Fiacn~<0eL}a-xbFG cN|Q pSZfoG|4>9NVTxKNl_6O[Ң|Qv[PDDaA lHD˧UpwKF<7 Mx:_ǝcvg(&۽N~S},c4#;W͖[fB 8toz:!39•t'bu^lZ#{:\  XNXď0QG"zP_,v#1T#]qQ ;4̈QB>A/TAMM^:S);Tӱ{OͰZ[6F|$2e"%,֯i{? <y)6ijiUfG{\O_Rؑڥ5/K i~MVt].~ʕxDZYsӍ%]fDNg+]-)!1iUJ)/:{ S%czg{9#)C_=f-Z=+FL у Q>b0H0739lNxkuMHUܲ]VٟE­:&YZH?Um`[p$ٛH9S8P\>.euzZ^X|)tuh6 W8FS;Cya>]-~i% +ܬ賷GpI=ScGY/*`54&V7 t~`&")-i#d9~G6h_Tc.P"k]#d`-OM=-&*"z=\u1Wk}Hs_N IOKtaCf(|G -7\W|{}f@mIFن<Mx'ʬs|N!?mEKY|+ *O<ɉvX|UҢ'Hjg醰;r"#:"=&`JėMzkm2R)S10"9 S^1?&E/٢qB0`CS;sA聯j:tqBSͼCi'3W9H=LXNzL,R7dʒQxLR@ V`Id/hI}YԢR^;Gp8ǙwzTǁp,Sd.,Dyո%KsEE> "`y-ylpve'mqX=E_ ۓ`(eOQdˡR|= ~o9-^p/Kavߎ~ cخcTo?V2dHYy%3< @ 2COT1 ._D.u!ojۆvׁ7>pQK].5•4 Te#6 5ܸ^OBd馥ջOx\xa߆\:|G0t{ijHgR+؀ =E([W7߯⫥CA2$d:[=taw*-ֺk 29 L;K ކyYNkQԒ/#O)8S7KRjkҏwL-*/qC8dir$@5τP( G9ޑ.#̉8YB%|Z:)G,I"pz1kDCkFӷ -.| #a EM| h3wAx?zYEۆer4%&|:&uh#@3luw ?ŘAtq5JY Ȃ4jk Z8!&>_yT'ZP 3ǐ?7B lvV+Tq&iaU_QuK4YGyL(8IN ,^(:G{T) ޛ^ v"'{VEexl: x=QL*8a&C%S==(sO[9bɚʝhzT~5]5[3JP2C"fت w|&)w`z%+ҦI3 ̴MI_}۫h|'^jk3,ơIՊ6u!N@Z)kǁ>H(4xl~ӟ]⸿5(qؓ3 p[?ɨh)Jngi:ɽY&I xx㞰Eh7vggpՙ 3 i{ھRE㱘"vc|ם1՜e=*ݾN뚺VyxQ8s(d]-ksēhU 5'&(68s "3ڏZ3WY7<.ֶk#Zf~AZJ++puΗE jzxC Ss!y ~a{!"n9 eik^_/HlFJD83t F7|=@PMKT,*,5y%~p2,&Oȗyel/ڂSagwfˇofwQS3_E#\w0&[+ Э rlдDZÓN O7ASRAphV\H07zL7ÞMƷ>rVe.=7!2U /[H]m[*,aBm_M,DNJ! :F™\FfLj@CB^q0 ^M28 U_vv q8;䰞K э7N)u[]O} 6%g7kFKdDhK(Bx̾W3 yq^xvwT] 8u?(>]P$`s<ЀllDэB9 lH,+_tKԌ\`{^5 )Kx%u NZv{I+R~nҷY59 'l¡5 A\8R۟GN?c͎GJ']YK#>E)I PX6e_̓#')FYNgKP~_yC)A Zuv0?n9g^05 }ZMw@<Bc!ъtb7i+SfC5n jȠ"頩þMsgmS(gډ+ ObD*O0"¸uawkW en35R= d,/w$ԇg6[JB.ЙR-vG9d|+x+Or`PW[dբ F;hL?MRkiY|<'bwJ[OƑmhaN_#W@,;:f9H-Dܔ0Vuj^TV+H" z,CCc1kT4'=v'\i'B%=`&)aѥ9H`jWϱFGMDZ Ipg41JۆR{A2k/ֹv^9HsG1ØQEPGCwOc"_fK0X{%qT-9q&竰 K?=9ww9&MNCBN%#=晨,իu"|G! 9Ǿ1;-ƭ!ddM‚gD\QNȩl*kȚ͌$FkgKak.ؠ؋d[|Kg Lv(zDOVuY+ו鬐R#M8 Nt~p* s5w(;7h"q-!Q,.fҭ<}b9=_1J)2Uj2ݔ| JAŘU4"U-U& "u g ~9H$B 6pSlzDƼLc 8ǪXcs!(>xC>Pe> endobj 43 0 obj << /Type /Encoding /Differences [2/fi/fl 34/quotedbl 39/quoteright/parenleft/parenright 44/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon 61/equal 63/question 65/A/B/C/D/E/F/G/H/I 75/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y 91/bracketleft 93/bracketright 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 168/dieresis] >> endobj 22 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YYZKYR+CMMI10 /FontDescriptor 51 0 R /FirstChar 65 /LastChar 116 /Widths 40 0 R >> endobj 18 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XXILHI+CMMI12 /FontDescriptor 53 0 R /FirstChar 58 /LastChar 122 /Widths 41 0 R >> endobj 23 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HUVTJU+CMMI7 /FontDescriptor 55 0 R /FirstChar 72 /LastChar 120 /Widths 39 0 R >> endobj 17 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RSSLKM+CMR12 /FontDescriptor 57 0 R /FirstChar 48 /LastChar 93 /Widths 42 0 R >> endobj 12 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XCUIUX+CMSY10 /FontDescriptor 59 0 R /FirstChar 0 /LastChar 106 /Widths 45 0 R >> endobj 24 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PXBGHL+CMSY7 /FontDescriptor 61 0 R /FirstChar 0 /LastChar 0 /Widths 38 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EKHAIJ+NimbusMonL-Regu /FontDescriptor 63 0 R /FirstChar 34 /LastChar 122 /Widths 46 0 R /Encoding 43 0 R >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QHGNCT+NimbusRomNo9L-Medi /FontDescriptor 65 0 R /FirstChar 45 /LastChar 121 /Widths 47 0 R /Encoding 43 0 R >> endobj 13 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VXUESA+NimbusRomNo9L-MediItal /FontDescriptor 67 0 R /FirstChar 77 /LastChar 116 /Widths 44 0 R /Encoding 43 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OQBOEH+NimbusRomNo9L-Regu /FontDescriptor 69 0 R /FirstChar 2 /LastChar 122 /Widths 48 0 R /Encoding 43 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ISBXUL+NimbusRomNo9L-ReguItal /FontDescriptor 71 0 R /FirstChar 2 /LastChar 168 /Widths 49 0 R /Encoding 43 0 R >> endobj 6 0 obj << /Type /Pages /Count 6 /Parent 72 0 R /Kids [2 0 R 8 0 R 15 0 R 20 0 R 26 0 R 29 0 R] >> endobj 34 0 obj << /Type /Pages /Count 2 /Parent 72 0 R /Kids [32 0 R 36 0 R] >> endobj 72 0 obj << /Type /Pages /Count 8 /Kids [6 0 R 34 0 R] >> endobj 73 0 obj << /Type /Catalog /Pages 72 0 R >> endobj 74 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20120824175103+02'00') /ModDate (D:20120824175103+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 75 0000000000 65535 f 0000000600 00000 n 0000000489 00000 n 0000000015 00000 n 0000138416 00000 n 0000138248 00000 n 0000138588 00000 n 0000003088 00000 n 0000002977 00000 n 0000000679 00000 n 0000137904 00000 n 0000137737 00000 n 0000137460 00000 n 0000138074 00000 n 0000005816 00000 n 0000005702 00000 n 0000003215 00000 n 0000137321 00000 n 0000137040 00000 n 0000008415 00000 n 0000008301 00000 n 0000005968 00000 n 0000136899 00000 n 0000137181 00000 n 0000137600 00000 n 0000011381 00000 n 0000011267 00000 n 0000008579 00000 n 0000012945 00000 n 0000012831 00000 n 0000011557 00000 n 0000015426 00000 n 0000015311 00000 n 0000013050 00000 n 0000138694 00000 n 0000016247 00000 n 0000016132 00000 n 0000015554 00000 n 0000016351 00000 n 0000016375 00000 n 0000016688 00000 n 0000017008 00000 n 0000017400 00000 n 0000136532 00000 n 0000017663 00000 n 0000017841 00000 n 0000018460 00000 n 0000018834 00000 n 0000019161 00000 n 0000019635 00000 n 0000020270 00000 n 0000028470 00000 n 0000028700 00000 n 0000039663 00000 n 0000039922 00000 n 0000049321 00000 n 0000049557 00000 n 0000057435 00000 n 0000057697 00000 n 0000064946 00000 n 0000065181 00000 n 0000072154 00000 n 0000072377 00000 n 0000085112 00000 n 0000085465 00000 n 0000097470 00000 n 0000097804 00000 n 0000105394 00000 n 0000105653 00000 n 0000123708 00000 n 0000124188 00000 n 0000136206 00000 n 0000138775 00000 n 0000138840 00000 n 0000138891 00000 n trailer << /Size 75 /Root 73 0 R /Info 74 0 R /ID [ ] >> startxref 139157 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/packedindex.pdf000066400000000000000000005150051211610345200262560ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 373 /Filter /FlateDecode >> stream x}OO0>? v q0D "ՊL<ɦYp8sm3 ehPCn 0ݮ;7}.;h R+D [,TIRIX3d(oڡT\Q|G¶qƠ`(?[_DRڀQxm Egö-m[iCϜz|۱biх| l 3 ;K.n(/ퟧS lkfK lR>)sZ/['sf L|n!"U^gǥpgOJs ^CcP'~uݬ0R endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 1 0 obj << /Font << /F25 4 0 R /F26 5 0 R /F29 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 10 0 obj << /Length 1547 /Filter /FlateDecode >> stream xڭXr6+D&mtڙL;S/( 0Hl{)Qva =R?>W R J_v !آX,s1~k$emϛAwqO\*!ݏ9#o]TX%ƫ(E,`[t7K%vuxɐl92vs7(1 _UjY0gB,G>{-쬛F7zujSMX$i}Ř6y)\)"'qrЛ2%Ԩj?uvI.g?Gͦç~?XzS7~=E`ώ #6Ƀ{6}on:s i@QZS!N!LD^6[ΩuSqunwlT@CGߠ9s0PS\K XBXDG%3B(%*l,R I5揱vF[΁k^)9͹N+ؙF_0b=`bX^ ~&9^IA#tC#/z؆" DqgMϫCX)=ϳèOrZrM ?۳@u*'cW|G$;u*Xge;5OMC"3{s`]$zC a*^OGoUk|CR…Z_]½V . kn,+{}tOj$39HkyV%%:tOcn{N70#]gdKxη3q_5t Um ̽'" ?|Z} endstream endobj 9 0 obj << /Type /Page /Contents 10 0 R /Resources 8 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 8 0 obj << /Font << /F49 11 0 R /F26 5 0 R /F25 4 0 R /F29 6 0 R /F34 12 0 R /F53 13 0 R /F54 14 0 R /F56 15 0 R /F15 16 0 R >> /ProcSet [ /PDF /Text ] >> endobj 19 0 obj << /Length 2645 /Filter /FlateDecode >> stream xڽYIQaHoؓ+$J<>P$1M.|HB*ˉ <<{ on>~," X̹%~_7wJnw<7w۝_~Fvrˣ̓s8ow?9sFm^l߂RӃze犴웪76e-f\晛Ǿj{:w>Cdor9}(643*-cڇ>^z*+a0χsY$;{={i /K޾ kT˧Ne1Dt*q/sfוoUVdn}3W3 !ƲkeIue+tt%n`˯%mNx(qq؏i QVUa絴srޠEt|ű^}MgX1@nr2f1V@8%,j4OFEJY-+7S(\e!4wjp0 2|[![ьfXW;楽Sc ˜eۮkq`b Y*3&לIԻ Ay6؜e@F#>ЫWoHlza4`$N0& l_a>͘K]5ge8$[ b54 -q]Ƣ4sYc׌9҄H.eb9'x6iXIf粲Ibb0ENvl-of{蟧<"Av!\1RF&sz%h 1>_@%pk%#b2,Ɠvȋ%$GA g)5b4 LN.)W-dI -peῑuCaѨ6LAMiyvַ}#xlL.k:RUUAe AQc?ȋv]gD>Vyı&1!q>6ytӾjfLl7a<"|OT0_j-*>Lg1fT6H7Ɠ172UdWVQki'P7K@ K'DM'06fp)O Ѷì]7LnBSp(h)r tAx J0d~sQNhSɦ&UZڪBAm@̺#-)&jԔzeMTNDB 4\G\U|5Y*D,LC,_%u3$S(r4 }"Q m 7r5aJēw*H%MLZ 7S _0&G(R1֏S OX>ȢyOH՚"uDM{`ȷ*)6ar.J狼4TjkXEepwj؅8:US)e-`d19}Y]k5դTQͨFWCmucC=Uʹce%~%/X+O.np\Έ&:|> KKގTFWŞ@yx:ძ:ߤW:W aAƂpRȾID*(P&o|1">8}'BR'q" 99DAJ  "r.| 0z>za 2feB1`qb5JjG&/D5| y΢!$TTvD~⺕y( MٞbHHO1sqhʒ`* e endstream endobj 18 0 obj << /Type /Page /Contents 19 0 R /Resources 17 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 17 0 obj << /Font << /F26 5 0 R /F25 4 0 R /F53 13 0 R /F29 6 0 R /F44 20 0 R /F45 21 0 R /F34 12 0 R /F15 16 0 R /F42 22 0 R >> /ProcSet [ /PDF /Text ] >> endobj 25 0 obj << /Length 2481 /Filter /FlateDecode >> stream xڕYKϯ!@l`͕(Q{l6H9eYtOHIn|Kd=H|oբ.d{8T!:ەy.ZN66 O=tD]B$`*MEDcV,w4y^'={Th˕F3~׃َFfO:#5^I_4ISJּeJ3>lYdp̳bڿQ7(y"*8: {5O4B~χ47NB}(}Cn@kD8uN[%$dF2TT\]D*cڶgx/M,A%SqHAOd4;Ѱ$lEW}WvgRm@; l} {t­I@UrE^W  2!!|ixᔺa0smx%ZgaV<_L{w퇉4:89Yݝ‘V/:ͣƹuFgف:HjhgCAt+,w?'"x+d72N/NjUmd*D[dupf82 AKES#둪:֬7&(f*WO9E ?cq&+aCdISBk.f^ǒ`Ŷrۨq'_ܣ6(ܻPi9yE$52j vjx׹̭ 2eնfŃ B;=6HzW%z%NUO n0DiO͉G.F3M'g7h?jˉ5X*a/Q}pIOb4PF5<8r(uvB ET^btFktCno2,ylXoakZ}'v8A\κ2Rqci!+!!MEhgȥelT2dŤ cV$`I_9Ns&5xc/CF . + x=BseNɋZQ%*r] -H WTdc@}Mw I4jkbˌ tg!>:HO |b1?@"鵹Z9?a+uԸ5 - vc GoC?oB­gs`ۙ'8x 0јKl~EH"8Lj-0} wKh+?qم6/ᴆ J4,mQHC+^ c8Yb<: {!Z4'1˙4hA{M7U oEkDVo5K:dY|, j̠ͻP?}.A(N*H d;0p%(NNE^RE:Iϒ3sW=1A8iێч=uf[bchSXCH/ԉ]*3.r³t3-<1>a"SXZ`|!]z LϺmb1Ic͠\ji_6QO'~ɯ"P<u_xᆲu>hA$2d|cde>7rDX`@pgemO\wW=P·n| oF\Ϯ:Wϛ=YoU`!4iw[,U V%EڎVBqQm9i MސʟIMՆVtPeJp'2q[^hnAZ3%!nz64#KN_'uD0$L)&tŷD eJQz FQ  n"v͉‡).76aƿ^6;ұ ח G@\jmTƷ|w !Y2 _8in E V&ۉ6z[Z] IIX]*z6dfk:mG"^W\瘚4r)p:]PUL|ypS[R jHUcD!1h(.'⁅i4gI{ /V (څӄaڠ{m8,"߻DDQ05ޜ_y{\h|ht,?jHя?D_) Y6UU{<ѐ6=N@-?gy֠9Kl=aSQq4` )ƚI ]O v}Uxu_FÁyPrMkLn/»Ǩ mt[ϛcL`He]Gse8/ endstream endobj 24 0 obj << /Type /Page /Contents 25 0 R /Resources 23 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 23 0 obj << /Font << /F29 6 0 R /F11 26 0 R /F26 5 0 R /F44 20 0 R /F15 16 0 R /F42 22 0 R /F54 14 0 R /F45 21 0 R /F49 11 0 R /F53 13 0 R /F34 12 0 R /F25 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 29 0 obj << /Length 1980 /Filter /FlateDecode >> stream xYK6QbQzkhP($YmamwV&mМLQp曧߽~+Eɥ.R*ʒ\FCV\z[[}uᡪ;oi<3du|>xtL@׹,Q) L$,!"I.Nz5W9Ir }xЭ^,88̀֬w Ҹ;haYح}2b2ֵ{yApj.@ګ.[]ˏTҦubKלuYou;:o LdPbJZ ƜЂ]mWҹGJ'@ FVkPq|d艻bhX|Op(Vz \!HѨ.\uۢXǪ; ;N`N5ݮ"P݂U,45͑k4+ wV+N&N Y; Lԃ_A9]_*Gٹ\Ns E>c|.'ypoqNlox;t[QNLFTT>|^(-)3 *9SQE2:^K8e$e}YiН]ԗFSŚӦ9OM<Į6lmWײ92A0XG5xy~Mxu&ݡۦƠ8||f[E.|xYWeVO׭ ^V˱370FSaL\DR*r\u`c#lNY\<ÌiKy'CaHRh Vvq# }byBW(q_)IOOIbP6j {\v`)]pH\;x*r"yWA':׭a-d٩8 080QDOM*jW[Jbv: hQ`~N>a(\gnɤnbd7E{2CT+J :V^Pyf)+8h ,*?Ƞ2/l)t棁d$+P!9'A2PM7KBr۾nq9}VX=rB\ N3XUiH t ?Ur)lVS-B-)\|Sl@ظp(Yږ|qxÌ0NA_/79>@gNiI>mr¡](BqI4m0veXץR@yc]1-PAI&$ISy)"ux27EyDݡܪp?Q qcZ4j4EVc1<abEpssnq[3oRJ Rmr,ڠP~9Y@;Vm!HY٨iF`jz 7:-ͬ34"$T\Ƶ*ә4$!<I~dGY|2*b3Kc){?t1ҎE"K.;k1aWk2DKHf|Z [5WmaM9\-\ ?l;~b<aj> endobj 27 0 obj << /Font << /F53 13 0 R /F29 6 0 R /F26 5 0 R /F54 14 0 R /F25 4 0 R /F11 26 0 R /F10 30 0 R /F15 16 0 R /F44 20 0 R /F34 12 0 R /F49 11 0 R /F56 15 0 R >> /ProcSet [ /PDF /Text ] >> endobj 33 0 obj << /Length 1725 /Filter /FlateDecode >> stream xXK6l)%EM)-Qka%ѕ_!zث$mz2Ùoyo6W7q{1E%Tpo{+.+լ6\P:$ ODp#~b<^n`)f; qOmr=d-TJvnaw cse˜0_T8"  NQC0_&yBZ JJ3 $atW`SzI ! TZ٫%;XLh^)KFg_O`=rU)@|;4ETR:+m; #I8x#΅0"R:h"qD(OcM)],N`YVeXSo.q$lunUƇb x ͳ{ݕ}-0MGze9 KNǜݹL;%xqh2#PVN)г06g\pP(A|׷ ߳],=md"( Ql ahD~oeHQѹ F1xZAR „"Swd.[ LeU5`Ue.Z= ЗRNR9U-HXr= 445+;ܭec<,^MB&fVe}uZ g% I赅?3#NUziDUQ1C'Cy3M9kOKF.>.E۪1G%CQ)5C 5^AD@3Ww&dpۧTއ߮ޘ]#Q+.L,d &\xT . n ?X&)v%58US;/%pkjqZ]k;ɶCg*z&%TNAFB}qcN7+p! Hb""7ek‚ L;COƧ仗 [nqI] Fyd!]p) (HtOm|8 ʯqf s/:eqebK{wp[6r8Uvxken~6aBc© Wk? {@Oq~M|e0=HC(}f{ZݯoqCB-{\.;As31cOk{rSՕS8ϾH3H.B1`U t}/)GyƚUT\c=~ۇ> endobj 31 0 obj << /Font << /F29 6 0 R /F11 26 0 R /F26 5 0 R /F44 20 0 R /F25 4 0 R /F34 12 0 R /F49 11 0 R /F66 34 0 R /F54 14 0 R >> /ProcSet [ /PDF /Text ] >> endobj 37 0 obj << /Length 811 /Filter /FlateDecode >> stream xڵUMS0+|mF;$3\G$90="Y۷OɇlNA2[gB"ٰՍȖ&G[~pVRb]mV^?1mjM)oaT UXt*OAMm{G0kٵn>t>_)!8&#Dp/p*Zǜ^Թs$HFPI%op "oP7\Ӯ{eWc>WA![>F/Zudί.&Z̡s ݻMf]AV{ve4#Γ*?ހY)+| 8)tC' Ӹ(А!Pv RZ#F8QZFR2?[CNpQdڑe[Px3x+JGKP%8=EaLޏ)8tkŐ aeQxm/9b•g"7Avm5z0ݤuHp1b3 La X͑sFv n3Vg 3i58KKI~/x>Uƣ thۋz/ דUv?as}5G Oil[s$-/ cl0l((Qj0)Z A2p!MjŔܴAj6j6,lz~┛Y2+ܧ޽tGX&e5ѕbPrRg<9_ endstream endobj 36 0 obj << /Type /Page /Contents 37 0 R /Resources 35 0 R /MediaBox [0 0 595.276 841.89] /Parent 38 0 R >> endobj 35 0 obj << /Font << /F29 6 0 R /F49 11 0 R /F26 5 0 R /F25 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 40 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 41 0 obj [542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2 431.6 675.4 571.4 826.4 647.8] endobj 42 0 obj [680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8] endobj 43 0 obj [531.3] endobj 44 0 obj [460.2 546.7 492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7 513.5 534.8 474.4 479.5 491.3 383.7 615.2] endobj 45 0 obj [622.8 552.8 507.9 433.7 395.4 427.7 483.1 456.3 346.1 563.7 571.2 589.1 483.8 427.7 555.4 505 556.5 425.2 527.8 579.5 613.4 636.6 609.7 458.2 577.1 808.9 505 354.2 641.4 979.2 979.2 979.2 979.2 272 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1 441.3 461.2 353.6 557.3] endobj 46 0 obj [489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6] endobj 47 0 obj [500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500] endobj 48 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 49 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 50 0 obj [500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500] endobj 51 0 obj [556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500] endobj 52 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 53 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000 333 980 389 333 722 0 0 722 0 333 500 500 500 500 200 500 333] endobj 54 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 55 0 obj << /Length1 1489 /Length2 7064 /Length3 0 /Length 8064 /Filter /FlateDecode >> stream xڍwT}? !"Ȑ 4(5``lchR%RR@$%C>s}o\ 푶P5$+Iut4 $, sqpzr.(C"C `:糖D4`aXL ,.@ ɿh) fh"P 92兆9:au~w]hЁ`v8ibG EIW ({: (j q&H0ra2"4WavPaE=_w+ݟ_`;;+ !08-@!p q[!5E}>b10/_iǬWFBX T`hܽ@z `{_0#:G( @PO;'F^(o#D00(qGP_4S"0;,C;;^ uK <~}dg=4M@QI `@<:އt5HPo$gox, 7-@ ;CwmC\ap?xB?C_Bh=[5("DD0j0O}/2= | 8 ~]<(lݳs_.2A0E/_CI!Q1x)D`C=sD /&5hq1P$) K@%@xg`Q[Gvh 5z(l$W0-`F#,LK)3s%'rbU{ʭ< CI{~ KVy.{.Xj"}Kqͮ'hD#lY/"c"n~^ ߿UB̞H7d/}7@ܽ(0dwA%G_ݿ.m2(󢋂PndMWEpx#}w+ %ZIأ: Kz TNtyP> Z{ݬ8ט;Rդwz;|ׯE(]7G< nݶbA-jyDZXu:Z?p4f\9-S%:ro@oN}Hwd,Km֨eف$˷R v>Lží99@O-)[mrYD*+Fo |s°+Sf/naN|iWx+B%.%zݠ9'Y5/5Qs_}j2-7))슜[ r>G}aۉAD.6򊕇JwNu|j^Vu&,Rը ==ճhvڊ59w?Cy|,t O&9Pt$ƃ,LQ}R̽2Gv&LDbGxW.+*_FEm1Hs 5Z3"BZA-k W> #@;.Jq-9Yu/1ݗ=i[|8oҳ\T l=֜:3](tDJGHDS檧/m_UV|Ч4f VFٮW>P&q="3q c [Js^Ya=RُEEA31.2rk>V i&ė4Bz~s.J̭2lI!Eܐo2Y}Yt똄7=R@<7ЁIPAx2xWeuzA\ ymID0j͛ uwJzKol'^yA!1KS[}bJdYnGRvԷ n!ϰW^Fc(;&cgI+n>|)@TrVm5(ג]FL>?̙BT>`|v;s cHS =Wȳ]LƥucVwKk[eQ3 ywV&4Ӓ4<$*iA/AAb6x&᪈qپUWR#P\Q+j zk+tHlQ+,:K)o<~pqn\w"liNie!~*Vo}~4'ȹ4{ͣ+iͪ9 h1Y5ot}An~eV*\ea\JT"󼜹uÙ[Ad0In8O!Ô2i { (NjH!U 85W޹y%9eX:~* zP൯o%o)vZ;}Zu)OoI؎)`ny޻ %`; M{\Fo4.'d;CBMn' ;0ş4l`er0enܡgftݣ)->~wq[hB@o~-+pSNRrє:B"hW1gRgi`U`И^b%|G/Y"+jt qݷYPa$iwBB4"%܆X}KTs=UQUA!\2fE(v<(KIk+s͡txk#/3mKm?[Z7<݄;Yc YKמ}2 Ȯ*7%n YͣyXJSfG?L<u5XQ8`l}eEOu`1@E`*8շY'{6 $9yfwzjFwo_E5;ȧdL+ԯ aZ-{ՅBZm5UvKء'7=2g.e9d`]Dh"P6u~H$ rl0j%F~RaO[R!ᐐ|bs5jBQؚՍ kfOz|ycwUL=')d%9`L?uBSAKW v ;, *cJY)g!j^vl&i>V#d9Ӗ eZMUnI?(bRv_gx&5s!zŜ]Ϳ"|8 G l|17~^D\GhCaS] mш! u^j}21 (RjbP(_(.s{6nQ'Si:z$ЮM#fІ|) ݽN^Z35j2C~uϑmglۊ=5K.8n|W+eQ7"1|x{}c&{/N0GbO23 ݄awcyހm˼J̮C&>͈sUC`+ MASQƑ-k#v8KI7(w bD81#b6c8-iY>$ (* )QI79>){_nR\jI U}>sL%K&̕o"T`%{O}Ɵ\>';܂bˊꮬubcO瞋鑆9+M-Jȇ]V!~CɞJdWk8(E/җcc.UvM7Ü$? w1E/y Zpz -]^^W9ESǨуJ6nfs\,: ^1y dNj 1d׵r[,dbKpSt NMKT;)嬧^!PTiS_ޫ1L륡!̸`>*>_zA{Rt\dۺl)@x36x[ ulU]- NorX^8\.1` ǃh@튚&ps6>jLA;EiqHѠj"jU>ǟH A53cS6W A el)P(lUpT&e'gWOrJ%[oǑ{Ӡ0fZm?Ǎ.{|}q 3*iuz,Zю25lN,:ʫն#ԺNp*.E;Q^׭Ѹ-vtT gXWdV%$q)˒yZnjT[j5NHRv"(.^+tޞ',oiNAB%GY 5Js1Uk<̼5<{DvOOɶ<L$Շ5M²* \|%Ky̞|Ctͦ}!L v&ΕqΝ` O?|bUD2/:1gR?B2X=I+Vh3I(A 1miVklf96/EqGwgٺ =?j[#Pq,H]t&PJu=wӕVEO>#1qҹEa$v"x$*2pT Ίh>ȷ6)>U*}1z&Rf`ze[8 xaj TEnzIб.VץR;ɓ-oBjqgg &ҍjO=Yso{=Z\T:"̺@5&G42cJ%|20ݙlJԬ4^o6(:|>箸uOA_&SmNM2^"Rg(4|M6Y0 RW^ z3Xs'c,2V- n"ʯ K\ CY8Bcn(/bcgݨIxE(NuK^R'?J.zZ̵m2oSTC%N+A/kRv y/{cclye`x^f ӓ6e>w !Qz[/߆C,)LWgZPŕcŎ—sI5Kl(8:S5!i\  endstream endobj 56 0 obj << /Type /FontDescriptor /FontName /BIAVYX+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/L/c/k/l/m/s) /FontFile 55 0 R >> endobj 57 0 obj << /Length1 1508 /Length2 8148 /Length3 0 /Length 9157 /Filter /FlateDecode >> stream xڍTZ6 Ht ) " 3 ]R H %4H7H޷[ٽ}VSC aNnQ/Qd|vra!"t@ăPvxEyD"8D@W( PΘ2p'5P#ْ#""' evZa5 h -`` \\nnn@{gN ; `'W02@h'&#@uˠB s~qN%U_쀿/tGN ZZ0(`4U9vs?]P;Ńßցy)--gNgo\<\ $Θ:-݃n0$+( dŁKut+p %w]#o/j~r'[ w5/aNPw1xܿ?:>0 yψT_Iɲ _Fii;+ =|;Ͽn@q; /׿ް:`o-mB;ۑ;_;j]ˡXh50bV%aI`DKuAP%/23vPX `px^< <G<0N@].[G#"-Qeo3\\!>ĺgK'Pϣ-1fbA65A-?(86G47CGM>R"?#ofӮ.3sF-G4;4f m@O-rEҤx a~^=DT,/ܢQUJL)`Mh1)pN&p=$@/to@K~m_C'I.n=ofN҉I4Yr?lTIw?Mi ՃNŋ1t|li=֚y~1'cZmJ:-jvIx@veV2>}™,ީ+Kc{ec[ncrjuqDhMRaV[#dY */B0T nS71I]22 &J;~ox H{lܠkڻ|+ŝ/'MhJ>4: T. E(+K ]fP"9\3RWo}7QArW 1RXHwy6I<[bSo.OIRʢT*%od**!w%Cr itL7?x8;-CkF2QE>5¡^C"9L~=YѽP- Ǻ]ҦXLRBL)VBl*҄V%aql#69m^e =yY^%d9O hj;<_G1rsA7)nm"sDW?]FAq]|Xj j]gq;Y7m-LpPtd YuC['T՟k]Y8"h*#n d_ЛS)Q -*dbpa.=r*P2>GLfA~`Z,ּ/]tjyi"-ߛ OPj%zkE+B8#K$I*}>ץi{ l78sфSm_@5M)x&zœ--zC ߦ=Eqeowߑϙ#eM_@ƋZTh A]):+R!5|$CТIȭMH!b˟ƍ՞ 2o|)oi"[[N43d0%->S> y8hDUE[%8 *Lk CI^ 2YTG KC/b.-[XJ6j4i jF~\OBC%![T.='sN'_PFYx :ݻ[JSnCۓFk I8wNʱ+OU2ڽ>+F$E9z-)of$ R?}:O"RX@kg-&~otZsz`5\W.#G62ch8q:z1Я;ϓGԳt-c@v-IN; dTq!MxM>ry=~1jJ&c7I7S'2œj<ʰLv=C=rI nyߕcX'O{RH..>NWė/~}/r#M:y|$T_8ݍ*܃d;hRGyO(8YR_kh<2DztPA@k@a$G^#B_?UQZ1O 9' W?('52ZQnXUMK>(mvo"P$0QR: SLʡ j<ΑI]τ3,CJ+[u3>Ic)E.|8">\aAN*TiAItʜl&/z zG#xE>_DK+,+qK!IG'b% S#xhnįHtE*G_h.lԵ(7"g{?vٿsI+|6k3\3!+:=.d>cp9^NI)Y<=;>]av:Ro(bX?^5WRlĔ:vpoy?/jtbcY"'!<4׋_}<,/16vgѬΘ="xϕeO'繏Ew:ԜԤ]ޙcUPYU F-h+R.J՛~tR<݅zH;pI` [Ǵ> ZWerqnz]Ĝ(ٛ"n#sU7 RടYA浄!QANxض>O9K$nG" (=&KzU.PHFAf|s.ff6vOtPJmuIxiyTu侖F Rfa>ޓ1MN.*]M/݋p"HRDx`_ '*򧧤KfUl\  /M6b~EG1prRMl3&?68Wǜ)E=b4*s $A-{ӠjQSg.u$}m!D ơ3bղc~tMw|RtI6 ?9 \`0 `)XP?" 3k|J:Ǧ=lgB &H@-H z 7͘ڧϞAi&ߺyNSH#IʸtM!CrWiH~jxRC%B1vt#K4,x'|&ٯ@cB2a"Zs& r瑡zN[>Ēƈv.QWW}=O|NOhPcSXh_fٰsI}<^3g _X[Kd"$K3ӲVj1~=q,!uM˻ϧežMTl;M#⸤ j=CËZEeDxl =Tp2?uɱ/G*9K!mHlٕDBp\ Nv gײ%MOϯ-ԩm`7WNYe~)'L =o6Jъ~z^FC< %~6Iچ$U;|e9Hb^{CA7Y0K~֕WP®mC?Q'f|;:?hCӬ80bMy6̭GRo˾WYQ*鄯"בcy0s߮ƱЮޫTj8?-+wBܯ4yMvY_\V3O&AҤ?}TzhKQgQž;y_pnԀOd%#q+YW[b_bFp$ K[7GD4&L^: 1\%$ޏY$kYr70٩ "푡py%5mFm|:ٻV_PϾYztR5vu+ūQqLtkxy+%ч}FpS5BDN7FELe:ѩܓCNh %Q ҙeXlђ38G]AUЪ|]mr2=щI(kPEBPWhҎZ&{L> 5)mݑ:gu@)b:0+#LXu"BL*:v4lWXnhtݻٵXnR!Z+0l%{38Xp{gj;\7V35,kq#&DZs5ɧgg~e+@B1j$&dZV9P`#{3]1܈J;뎥;C-nL ~E ԺW_]$( VdeF 2O)J!ѣ  <MkE2}c[̽wv{]h@%oF+ Bw+K {xL#,7@$o?£ȭC3M.ڪ?s:q[|B}tqE9 "dX3"˚~ܨ ֱ3u՚_8l>'MƱn*[}3zZe0S7}Ka;`H o1{$cc =om:ŷNmı=[2^2 2V_!|ɯ\^PR#ixִ4F77'c25js7%Vijj>utF"U] bA|AKrf$:6Ebtx0ԧb )JjE],BJ"ȏV%L޳O28Ws=a׊h_h6`F#lh/"I޽9F rUK Xݘ($hg I!lwk0b'Wƻs_qR/ rG3~82 K٩eqD l|+yc~2nꎿM'^[5{_4! & ̈d?qm?+c. b%D,<"<2}$b:!3J]1&djf|kYn@-ZHvbx](bDKB_4LTl NZCź}jiO hs n3*8ݢEȔ*N%Z 6[,yphH_rvAdL"oK:{:9J-\ᔫ9ɑuY΍)dy7?ZE|"JG>/[8:_d/۫䍨!rH=a%[SxAv|fvRY7sqnـZ/#{ %`M75*D"Yݸ?ڌ\nQLc^,.d]/U.:r8_}S˛ ueo}RF=}݃LTl/'#&sܲQWDod jojfן?Pjq獧W%{:ލz> endobj 59 0 obj << /Length1 1422 /Length2 6199 /Length3 0 /Length 7164 /Filter /FlateDecode >> stream xڍtTk/)-H ҝJ CC %!(ݍtH JHHI4ߨ;kݻf<ٿ03hqZ#J8kh@~ Ytc6p #Q:0姁T ~HH $,@ѿbPEnxgoWU#  s:A]a0FAP!`G"Mt; \mع0@uZ~h1`nz' @)a( Pz*-g(._w_`` {#΃Brp_`G7*9P;du`A\aH77/ҠnYn-pr‘nxSB!k3Y8`[akCUrABA0zAxv6~Q}?u{@HWw6[0`ɎRCmȨ¼O(_PFq=_^#9Y?cCx|An>A Qgja' `@]8<_+w MP?7 !{~x+ݐo3oa;r@QZ j9jPk[U`zmQ anJ0/6 CgCn_/* /j W 5?&jK}(!_'(P@I_jm^# ?k xtD> 2wWWTفo zA!xsx}MHY,'~1X9.Oqb%^/#}^Didnߡ)rew[^-U)TOZi&lDb}htQ:J[1&x) jwVӊ"O(YVb}iʨ&~Y`h`+*H#x $NbUVN*c9e Eqi}F;XaCN݁;%W鲟C-uFޯ>ZT= [ p7HH[[J0XԻNR0 U⭏4 -3X~Z,6sy~dΓ}k :+ERÐp ٖ<;ѤͼmrO͂ ]/+\ZLP|1z 2cKK&/AduHR&r>%kz_ebg5 $˂(k .+1My^@ɹ{MfQ+[^p(Փc8:8 d,7gW |{ß#^X#DFuܚKG)` ^Vx>Zpr4vomef1+j}sL3Qra<)K%Ք8p;F(pXr/u}AiT%MSЎvRs0N⡋˜=pZb27j;"C۳ or+o yJ*vE7$.;?m ~KK3\d-!dOΞi݊*Of6GD*i )hD;=~b|+ar),X` =Ȍ1*ѼTeIv)EPۜ2|ڒt4S dtP@qj#9 9Vagtv|u+誇7sqV무)3gHJ T!-e7< 9GKO؆u^܋XKIΦ}1l>94a~T6Z(ly)DU?Z1)4=c([W^xUGSx*ðJmyV쇇N7aytq>:#BZ '.EW49rR|Dyר,g,۱杙 o=ל] /ޝfLDgqXcW6)CAtim;7 EpbVt7bTR4rV*[b$sE>"?pl?.$8L#޹%#@epyڙ`]&{4 y{s*0&Y1Wsw\c!Lp.*8E]臛Ʌ(C d5;tZ5:k!?jZ_[+Q+SA~S3,UCSYO f6CiS4qb~f"Qr׉^sNG[gJ,P q#9*M.;rdFx1N}.\q&:[Q:}=R?ƙf~ *RA2sҢQ`oS7硃=u-+g)3n#N|0#;^o,-(qဟ5K8p .X^1t,cVi:mDYw `qz ̎2uaIB_}k4MXBi3m,; jW*[IYH%:3W{hgrO ^IyGޟ[叭]Q1Wm ?kx?x$0舫bpȉcˍ5'#*!'N!lV+d"iUu=MR,ˌrw) 3'T֝ [@fqٵOqy;M7KvKvGIa'`+m?>i~~I8AehBoָ_j4`LhġHfrBKn7u,L'Xl 1*}Hk ],dcGLaԉ^fs7nN_뿌- 2?Rw~"I06wWcI^FlHwtxOΈ˝) vC||'~ZlV4Fy0Rlm'K󍬡=2L^*HNd |:_"G8n֍yIQK=kӚƐ"Z)?]e^$~֓uv!eɻ˯`tִ(p;k JL~OF{;bp?om`Oyor{'>J̯O6_Vhg˧cSaQ2mL[t<6f^#"hzT\'k^-A]a:MEa?rzL ƹ~)LWahm6)~T<(jjhӛKq|e߇Հџ}8kZ܋0;ȇ0dٚл4S\5OygsFc{~m^/N̴!#" Z"Cx5ʧ=8ǃ sZc?a&4.=Ϲ3[h3d'ɝveo^^wTVg%9Q^s-4P @^zچ Eys]ȸ+-fa#=g&.!{1z]uKF66aZ#{Rj1|}R"2> sSWBwL#S(qkW٧eB᧸~b>Kij#'e:kygw#1} <,J`}?"Iww\ Tb rU{ˍeUۚ&_szs c;ߥ% +uMaqAhTJr%2/)EkGpr<]uuM ;֞aF2vIdQm~\#rdJ& '*]7Rb͸0jLv80~JQ#a?3z.Y/nɏܹG?da;0 ؃N;碥/%3|#;IGzp{ꪚXlvu_gMaU0V4=s>S3jnxJQZ^76shO1~MFi jP0גjQqօn]qtc~k-A[e{tC &NLL͑ꖋZ腲%R'P1Զ}5W#=мЖ'.P9iv#+21JM3ڐvJB,XJųU4l9 u}y|U<Xv.;#ƈݹP2UMPߗ|){]]7 H|q0 cغ6K(}5uyCEdG/&9YyS IηZW$cGV9L3Q0À{/NɧJeIs[dž?‚H'HyxjٹHmCT,KƢ񄷱IҷspD5ی:'NwT-;nEOHF>hV.}Jگ(|&v/Ŀǧ2:%[3՝#1v #'tOٻsS`ƅld(d'LۏfRAKX+Tovm<.⼍ZƩ c\i.sv[&aEKFS3s@w;-= ϶ IRR4/_gbd|f\>̞WLJ5g}:T܏4b:Htv_z"Æolǁ|rrЄɫq!ˉ.zS C.5њ^~њI] RΊ)>~1$~ߑV;>:9b5{r5A "}H7᳊#hbI#T@T8'@޸dG6c^Hl6-oZ m*zK7yc> endobj 61 0 obj << /Length1 1467 /Length2 6892 /Length3 0 /Length 7880 /Filter /FlateDecode >> stream xڍTk5LJ*!9Cw4C3tHwt)( 479yk}ߚy}_{?,x䬑V0e$45UE /O¢G;r\Qp$B\a4ƧAc4#, EA ?$w"Uq[4yjH EĢtrڡ1 `rbb"ܿrN0W8hBv0'̉P#@ ^j.iF;yxxBPHW[inmЅ`0k/-2^"ǯA{@\a!P 759v!$kIu70/?] BNa ;hO47qD!1wbI=9,`u;Q(/|`nY atr!(_)]aP̵{٬˰#m~vs3@]``\DlahHTD@TsHg n 0 ߁[D`0E`p?1n|W'ϛ9^H?˧lbHO _ ms}5蟎$7 /^Bb }3y߸)9:'_ .1Dbԁǰ?ZքYݜ7`!p, ㇣0Gp4 G8`@adu|VP AP / ès(!H_r@\]!^DB`,![koxH4AZ|6e11C653o&a5z #.h1/mr& ,=nc-9a*odooVp={׮^}j%Ԅql" uA"Yp*n`8ҹH9zAWr3MaL=5-V/fq+.޷ hY&؋EgK|w?`+E,0˚jI7rl+l!A 37b~ڕ,֚ \DEcQSXcnj{'Ȟ 0td xv|fW:A{D/^o U+ݺ8q|b9ɔ8wly{ 8ɔ*x[xjpS9]]JsF"=xˠsWt*r֘+\ Ŗ&jSJU~ݴ%'%1:R̰fynZa!-сc> I~*-wLit}$ŇGo/dpXlTlFW093d&bߑu+yZ/$k9$I1xL~G%/ ܪA)dТ ڸ ԥ=E2 v:pKN=MNm/6~:c&9)X"U{Fd.Ȝ0aòe }G/տ \/9GI<}q+acڡJ4?diݍi 5٥WWu,xf|*ob[qZ^j/[F3U*sZNr6v[Ke#oq品f`i&x?YXU7> L8+ᗌ>6 4B/ (mou~fCkV˃<=YRMGCnz _I'J?g'Լ=}>J-la`l yxGzgOϴ*߽5ݻNV})YJĀD]'ʌy.τ4q@]$kRe RKQ/ĂT˯ ]|beb ;# m-7]['\_zᷭ7<=Nřץlx騲h4}ֻm6_+}gԕT#dL:Jct ]ٲm8k~t\,bgcWd_5K!`SdetԾl ge?ɲ)H $xoy;JmFYr$pc9iGbAXKakY^l1yA}!%?ih0[fU^Lߊ-iϦa2(6gM! #QK,PW:TBu]>IiO•l8Ϗ.Ny2?N.5im& F'mM,JQ5c13> EN8e@(Hp2߬3LI7Yag6&9bc S]k-XСܘY c V&fA5u%M)d%V[_7sd-(X#P}r})K8ܲ8-s|9!3#c}Sړrm4dF? ' cn9۷ ::x<*0۸"u ֦m8QN4n<y1kPDBTKhsYN,La>Lj ؑ9>z Y]}(Lpd=Z-hjJ vhrBRO#]Ƿp8A୘݆X[y`7@AVU­xԝ Wpd5YXv(;}8fW[lYֆn-.C* Ś/Z*:4?5؎C3SuKn.>e))$r0izaRYT)2-.d\_MkBJ%:e?z =!@=3LrIGF #Va5u7diH^ 1iLFq _d[_F3!\/yEL,xZJHxb$9@?*9:y)ՓwIk^?{Ѭ\ ͉w,G64 R4L`";Z 3}%d삘d&:|zZG8R6~.4 o@y|Fdqzg]lCxeFQT-'b n,mZ=:Lތ6KPO[ThF3¤}>ҙ1<Ԅ#3ϱ_45%K%p:&^Dk7͙^ ulAMjY-' >~r*^1~Kǻ֛yߝ${\_JͩƜž~& ʥ`'Y Nʰ{Sw43x^(|4- "]˴3 Ez>[q%$(;!9%a .1x/ JQ] @,ڬ;Q4;~林A6u||ƧyTfc٧w"p>♅D4~|4ar}@Q0M)r{FǥLvay|$GM0'|sUOm.JwAd?0+\VMSeqE{ݟeFQ0߹e㴁U$,.p= O79C7DDT2YBz۠zUٱUR';բ(ZCsR9Ϛ>M{ZwYڪ]a"QEB+W__I:T͞gC]nA(=tZxfCA1wL\TF9*V.$ z1įȧ7yFqSh jx_榩[Lj ]Z'q,4ǯ"f4S$h5i琜J`S 'ßU%I9 +EN\\+^"2aETJŗT {?p-8{2nD |85Oj_ؖBPt< Vf-8>:;+`>O餧0qUA"_  u Άd;H7{ΊO8!{"L9N=?hJ)  Nc!` շz8[Z,u/|u4>CrxC¤ή:N+ 5 #qdT,Gk w;v J ߣ,np c@F7EK:=P9ҙ2?倅<7@w]6Q=b%B8|) &{d d4~"bO⬕7>&I %}e~ DmM+5b됭]STԥ-DA yLϙ TB 3若q1^% J?վM{VN/هSfmQ'DH4Ēz?o&43!^_H3Itb{ {Kf$TT7v3cNХdllL&`z'R (ys~v[6OUV{@i1Ʋ9iǭ?P1=eI3K|b+ȦDL+HdT sI'35`R٬Ҿʹ;~V*R[/7xpjVSu^0UIKfh3`(ǖwT|2Ft}5#\pzxx8wLč,/z5Y&m9]a7a^ް[Ʒbu`ƏNQ̷wCuPrC\ZmT)0GԟU{Xdo`BUVv, i4[hgJMծcR+<&{Ì\3Gar%(P;G ]Ff=^ :j6Z^9 EMZ>-׹H2j^uʋr'ŷ<,Dp9|Jk n%'Of5ڡ=41v$qշQ:2iI)Q+UEO,gVT)Pj$dzjTt6߈ϙ:>-*[T+c:L:l)D2>5D}P!0+/ +e1.i-] ِ%`%E˞1TuHBm՜;8lO\Ho㢐*!mX-0mK9Y.q0[B ?G4 &Dݫ̠yvH)8dyzse1v,(g;pii.8Q躇:L^ر]5p<<kD[Oåiq.ۊu\ ;E{nf/ng[q٭|HT}#jTlw 9@]KsR2t(N_Ν }Kr\3m=62߳)1$AV;x;EZFj}H$=[6Tl slm%nhT3n:0 :Ͼ\@]r lS1{/Yᩑ2LܣyF`UAQ>Q<ňF?#L]Y6O$l)8HQH9KfM*%m5'cmި?ЌPVCIEz~_lԾ 5͊\hh)bDyz6Bڄ~;መVw= jڧl٘ǷV,ȁ9Yg<4qȸh˾^O/~0]aߑs2&5pR ŋfުnVain*f{n?U^)nΨXe X吊27JiISyB쵳81>:rNX/w ex3HY߳7-z$\":xt9GR 9--`~xeyMpOc^PH1{&_$W"ͺJ7?W߆!obQ!V]S]^Vo,e 7FYky9y;]CsDz;t\, na4 whjF>}UP _iM<}g)٬S.™g}Ο6nr7{ %mRˀsZrxV4C*D,+%kjݾd!EsQcRU&ێ' uB?M<\)NBaUmfS!rS~D棇lfl8?u-]d+GC}8=aRW|}E|I{Nk.jP5/2#C&ȷqޓoQӁǦuiŽ_ɗيgϞđ>ΙP*:!1>%ˌ./Ջ%yA"!8nN/jܶJr۠V]M,@GZH8l]?~ \)L&Y34~[Kấz2rDڔCVsyx%o_pRnI*v5U#UuڀMHb56IoWth%+YB G.>)"X[WDdd܂:@k/iv!R ] mH!3S$)-6&k\|SZa1Ygeul vKOv c#0^8z arUGvR*I{!%nWúVbvvqՄ!߭IhHN<9cF8r;D endstream endobj 62 0 obj << /Type /FontDescriptor /FontName /FRDSFX+CMMI8 /Flags 4 /FontBBox [-24 -250 1110 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 78 /XHeight 431 /CharSet (/c/f/k/n/u) /FontFile 61 0 R >> endobj 63 0 obj << /Length1 1484 /Length2 7099 /Length3 0 /Length 8099 /Filter /FlateDecode >> stream xڍT6N#!]2 鐮"  FF@"ttJ诞y߳s}\}36}CE()! & ,(뀅E@ (BawC9L`hW8 )hS預Mw@X ,!-,) D@߁(4@t($̕C셆ٻ#ۆ IN(:pq9ݜhA Q6pwss8 vr<O= s=`P/]Of#{럸!ntpGBahC m3 gz_ٿ !66('g 0CmA7? \Q7yzCE_\mpg7WAW8E_en*`H7W_Sa67msH'/"uw2F]a*@bv078`.^Wy#/go/3`{CB<`7;?m p7SIof}3|4x ў0ϓ卼($6?>%%# *@W_w[Pipӻix 6'n p| 8KYSdM{o7o q# QVnv?7Y;W rH;?m>c`P}{ 7p$L 7Ǜͬ~`7G"mP_{'"./bD>7 a~+ $DݤnlQh_\o~F!0BQfBnh_xx!v C m蛕-^ۿ0fC<=yPzZ)Avc40"3x}2bnYHa{S-aDsAOߋ'⩏t#+1 )^96akr亸KSzvajzJg'V *$H.J? Xs=pM/.|x*gU3o+VHg7F"w3Q r(mjO.>ӵ /9=Flp{OћV#wpi4,6'9%ei.b4%%5`jyN!7mo؞6%SIYjwK`g3?8OS"Veij jY9o60鱹̋=@ BXapnT6䨐1=bq?513OLm'{bY'bǓ42Mqb\LWDqg 8KtjU"4#㮸L߾?~wcY ,3T"'E<6Kˋgv\Ik5xHz,P_ӥ^hZmseֵ C:[#r>uԜ] CJl>颎Rh= DYs{('<6N78, l?}0##j8p; ^م5A}ׅQ;Sز'pkЁGA}L6EZw!cUXO,g:<2 1?<.k{:ቝ{e6/|nIy?o8`Η9E$|m'ɣOF.(cxv{,:e#-oVɛ||0ar jv$L{/o.C ۼ{'cA75HbiJC "ʥ3z X7ؘ~m:oJ|_]1ī~GzjԚ D.. O y ,Xy^[W|tDzZrEڲ.&|>W=TmWo!D:f{og{ 5cjsx?(xMD&8Kk'An#8q\B̕*%uuʨƵ"w}mΎˠh\im%pK Q3fTĎZocV&̨[2s$9G PbnSIٯ4MtsGѫ/ӾI]w#_] /o %>٧K?&^paWD/I_#ndY ,g+x ݡf\',CI/}}ݵكiJi'A/D/k 4Q/$Hhq'1 b Zgr~i1l^-lRmBRE:-ت>.o,'Ily {$ýoeOᨰgd(nUaeE07S/Rh]]/)T\6F{Dmh@+2R-RJ%ԅ 3 -ގLN?d ť~ a]u"c5$->uj{'9ʥ[hG :R,jv,WZIsA0c%i{8{qc>a&YtJ~W|XzWuBC' !c9cqXbqedJφA>W)&4 9Yx@Wf[p\mzE-,7eϹ_qՁRo)rpm&E k2VP?Dʫ:-A\(-*ξqDl坟֣ :脜͂3^*y% 7c\X@X8 .$~ŻlS`T-ל c8ݲjDNw@Hў;R)ܵT{=uVE2D: EW^@I?)[M'E+ϒ{7!)}6-vf~A3LoV> k+UP\Ʈ8kdqh>iRQ&jIk܃ڮi0ˏ;uq HI qhd` ID݉xq[&/5pɞrC66Ծݥ M Sm7uVJ#0v|.nz̉훙!gjT-r˜+։&){89A6 d4ʳi}/%%*x,~cF[\Œ>:8ٓr%4 KCXOm=G-̷DV1$ǹIh"n;|b|SCw×d*!NkwDz-[].Ϋ /O m/XgM-"[AZ,ztdAvۦV!n|LPmLj7)z ?ݜ 8I/ YقpYa?iHV5weޣE!t=lwm&mDfr0M`>]JN( qU)D&! ⦮, ^~I.vSvg&zl `ڝ zwhC9F$l![EK/#QTBqژ'arj#$XT;=ϔKֺj9upBGB3‰6)ݻتklJΌ_^ >-!o<ʅF3$J=ja|(ᣬg-^b.@)VK;pZX8:jɩDcFV_/b\߸ 5^*5$BӘ6mPs1QO;;06ï"q?>H@J9$D;Mp)>+)37/X[C=_p>i3l(czQpݘ@-]1i^Vt̟,Tz@Is0ScG %mKѰXџ/Y-K^JED Ȫ?y~TJt\._pW-E6+Y _ҠKb`#c3( Qrl:O Mxhb*$$SQT^8NLDo3b쫷_d^J(gB&\֮[YߵB?g NdN C,d&ڥ;=! Wݴm7hvDCg–w T=-zLZ&X|CwU|*> U8$!d{'; ~V̞; ;ɮǿXD䷰aSn 5:L#PU;y1>W\ҨZ$?e~ȸM&tӧ;,Y];0ʡCx5?捝leCw+ݑ”G`uh #gsx+ʐ^\sCH}JvYd+ tPue絽c0g[4 ?<ʻf?aWw]%ur-8R63qXYˁPpV6H8j ر:"?j~ҵ@W+z}M\ '(&ܡvt <ΏCor 5GǔG`k!qoi^}`Jù^ƒd`ezOa$̰\>4ubm.[{džg qq{ 6˿U`a֔cSj<,lo?O]Sӭs +8ȉL)A8/"Vvϊ_svFۻaqUg 8XS㾷@.|i &wsLN߽@FƐR/f 䜨c>"o4T6 lCP֩\S"M a`61o*܈fy/f 5/F/Mz3E3V9C7Gem)6SyN瓹0O2˅VȻ<>:Mh%VʔW VǑ<.+@PH( yއ1s]`& 1TZr⟞ sk-ӎx}V(]ϊGϏްX_PƤD=ONd+,}}6AKA)bO8髩*@511 G~Ax$9&·jׅeh`!h*@$հ~> sBeL~ۭqޠ,}jŻ*? Hpl1VeIsC-'ߖb>*S1YJ&He `K뵏q@%+KU: : ,vO#"X!C%Ѣ#/ޜ-"|YqҎA eߝu5K}6>TĜ4cUƼOK|lJkj ujs#1Dx~bPW.mTYS[:;/!> endobj 65 0 obj << /Length1 1379 /Length2 5960 /Length3 0 /Length 6894 /Filter /FlateDecode >> stream xڍTTݷKAB@SkafnniAZ@CZC@@7ޚ~s}ʤ+c) H^ 8@NC@@! +> a%`5`T K$&oDiUW  n`@!X`Ξp=U%Úq֖P%䄪hm  8#|N> ' .@ +@ìE[AAW @詨A?y5 o?-aNΖPO0` Z|H$j+-,K+T[et(~CXH Ő 6r0'' u>y0duOmuܡmP_l\ `W(?6; , *\ k{_Πf}a[/#FXH+;#6`k$ d2lأ:{P2E͖ 'ws5 %+ x> Q(o%ϳ h9ʅ 05mcQt@~{9~ ӏbW$J0.5@6`W -QʐAD0B#z mÇҚ#)A:BI%0_Xᖞƣvo J6 s /'O.?H/`kW8%ߍGUk[ Ț`vf-ҡeY ;ưN^Yx1ngeƋ%LRG/k sjqCu.}u6>Rf՗v1 tl@oSevq}DKqޥQ]2?2Y)vd7 $h5*sˀE~A2y|2AfQ5w7aѲ`B ֈ|p[v%`uЊ+ dkCS ӌuDR%2jQ9)G(ꒇO+VV "ZMluh7V҂L\[_$iWqSx-kS)OK/{~%uT_3W e|Axm~Wt?{TVtMy3~t8>mIԚZT2CEd {:9 GH<0^py"%֜>rݕD99tU3IEQgR{U2x(|ϒt kq%H"{3xl" 3bV%̓֙<-~默ؤqZŁqQ*J/[lE'  ݋|!z)}AE@TCȞ%լe0z@;VÑ:ݙxw^T/J^|ô'*iC[?_&5w< mz̩Qi +Xbxr_-0NACBU )څ[v]v\gdC?Q U<$AnJ{N.@eAv.id$ XcI pۗxay #ܺtJYwG<ȭթrO[[uQ+nkhqGB&9v$5(d5ʔZʃIv`DPB"Yz屍D#3::)J|!zz cmũ1¡߱UGr68ՠi*gպ)>lRC`tb'DMZhU&YaMW1iZGt?uo~=@5J*ϡ4p3;ցX5rQlz:{캘O{Ӹ3Q ̙y17 i^&AJ v=n^,{m'ʏpP|+wiFФ[ %;NG\MqLZ (epƻ45bao<[#\5}%B/p?.vޓBg9rHyAkYBoWo+vyEzD;%S>;Q4xu"rATҞY fhh䣺^ȹkDy\ 9^4aٍ0t~/Y.7UWVG950/mh SA#I#axn|syH-~lX0\=OAnzJ\.ke3P%xxk\ >cNBC<?2+x< n)my패-R}:;vns؈ޕqFnxl 0Cᓛ!Nj*Vپ oTԏi |+6ޜS+xwʶb] pUna_8%Hm,ub .7M/;#H`QSy]a 5ݴ$;ӈTľ3fW*jD]Z%[^Eђ5@6.VP#U3K\zS;pUr^9zV?.z TUfI=j#<5GFϝVU:d3Pg@ dyİIܗG;ǠJ<3#æ Kbu} 'ʉ\0'wyo7|bmPKTQ~e@t^E|6̼,$7`&~uf2ƛ>=mOuilXNr&n+ g%uӴ*Dd|2w? U! \r7-/MR5}] 8uV( ~)sXS(ک{4qU,rO&y4vT6Z-e81}~s.KBe#I*9u^vbzBsP}W Out6=x0b ɋUuCTVjWffOO d E+Iܨ,Q#S0Hv m 4@?6ŇR3=i~mt̮X=_ QK@G +_`kyi )j77v;u7ih)_6JRg).3`ȇw1)<❮c/D Dsk6'w߭/)`iڕ7YO0Іf_ߝY\z])  to`mt*vf"LHlNʈ1F_gF5ZsZV+|pZj<DZ˗ԽAɉCs&m: &|r& GZɩQKS/(fV!}0lF|ɒ-An&uXŢjc $R xa }qWzg:=*shHFu;H~$=eD=Fsue,I&N=չ`jgxq"fԔ|jc۸ƈiG4S!Gզi =sUf{^lWo360Tg|8Zsr>~6 2E1WV hD٘3ϢX~x+JY@ZHtpEIh4➵wfd)ú4٤-IҢĎAyǵTDR'%Yg/[B "[[[o1(949;/K0S-8pJ^?Hr/gQZ!/O]ZOR*`.6+yOHjkP{Kփ,| ǡ܎] jDWF7%ByR;D#qϯuV;ݣ@5*_N3\jN>JWJQ|f!woW3Dt"l#wm7n̊ڏP&pczisKkP>\ aX*KSQd敁TK|wzPS_FCi9c I`l&IJ6~1ȅCo7uLZfD"K=]*QN=҇bmhQrVSMQgsP2W7QQfWKcf6|FfqI9l&iX/" M$FHlbpxh|R^a,46Ũ#+҆QG-ps&"(ӳAң64oMh CD>+rZVf#,%W#|a<*vH?uAÝLQX5n5]aEA# +y pO) wuO[A(t2 X$pYgŖגiN1~{&^4}S?d*]Mpɖ*'s}RcNâʵz;nЀUwxsZ*1Y>(GqE} §l遂"BjIY5,[S=-oRTNjbU?%XhAXX2Jx } пV#8~]Ӟ 1.꧑/^t endstream endobj 66 0 obj << /Type /FontDescriptor /FontName /OHMPEU+CMR8 /Flags 4 /FontBBox [-36 -250 1070 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 76 /XHeight 431 /CharSet (/two) /FontFile 65 0 R >> endobj 67 0 obj << /Length1 1538 /Length2 6747 /Length3 0 /Length 7756 /Filter /FlateDecode >> stream xڍT[6L443twwHC3 ) H"7z<=k}ߚf}ݵ}_YƬg+oaH^Pmh@A> P @<pĿ<= HdD9ja O($HD%@(#Cdlha" #>wx8mam[ Ul rB"%l|pGogxxA(tl  Ho[@ xPZ]w/g'ݟ_am`-ppB*Z|H--Gz:CmPn Pآ{8#|g/ҠYfws_SrQ073 {Ow~ccODEDAc;7w8h@ +` F 0dG֨{8,(_,Q àqb~u3% U?1*(}^q DEoTQEuz ?c :p!PFwew sۺ9C}xD͆65!u55{gO#mQ3"sD$ wF8@`w3P50AEcCu P-m&*p_#( ,%@)Pj-q? DPp_Ev?o/Ly؂!P_^ `ԹC !(R?Y"u "W,.޼pV׺b/psT+Wӌf-GNs\3ODӒ6U|$F߇Eip=/-0Xj}&h5Isi L }z eru0]JPбQc0ywr^*Kێި#8#tHYgnNkud&":yx5Wb^LA~^{C9IDA#y#m,|sRb ׃rWKU"^HH|m:7o~Iڰ~SɽNms# U!bhesp eŠVi G; Iw/M:?*+(I8"7Mȉl'B`|hNPY%] ָX+U>e:~!?fq/=tEûn[>W nʼn6Z-=l!+4O}Wh|u#a-zO;I'<2չhv\ݚ8q=m# zOQJݷ@((%C/'^8,B,V\1gs=ƴXbٻz=e=j5{cK21hzkD+{xu+fD'kU kT!,_ү= c䅏E>z>dmUg'MtDL]SXGO d18ߔma6g>W锇:!W|=ίQn~2Y -ϱ<";cYMr"IՍ.1A<`Ϭ~&CdqÌ/݃^ L⮄dOR|%锆7.I#p˪gv~,lbo/uc" z_X^Jv||K=GUnzf·hoO>RFR+~ߦ9+ qoX{q3t kw76r @rz܉rapr%gyXDiyϾʂ pW 9f'H7{nh$_na{B( |S&.y#?yTԟ~~3E{pwjyɉ\Sls͢*HXGtg*NO خl5ZV t7o/CşBh4LPMӗ^yHyoZax@k:Ӡ/5{s,Cë*膷k -io:Юq 4ĸv!c^ w <ġ u)R %W̒0w d\Xg"MNw-68],ckd6FmIBO[vghŕ ~䓶䁬HR8#~xĬz\ܥx_ǥ%va3֡CLf=^㸓CjҼs»$ Vi4RB' #d4Kx K{^!cccMo}\nq(\l:B-'oo/݈Bmlj,$[Ds>i!g0=CQ>Zɹ=H3е]rPe!= G]q׉_gh4[̊ {|X3c,R1)W~^]YvVu;c?)"t㮡38ږȑ[btKOaMqalFsM.ɧ8jrib|0i[|xNq vp>qa֨#/;*W+%# -G]x#R) L8*l00)s4+J=p(0i !t& ~ٜss?>Ј7֭gZO S~V`29}z$\F"Mg) ƚDXXqABg{ek'FIL 52E%M^9мǯ:y0g8/rс£"y'Ž ԧA>;|wޥ.8ѥ2I~L~{?@Snq1.Ǐ)קîRƌ[:ۈ8eDQsԳR:Di;e|%Hh@=ie%IPa֭y".4';q)P25Xdp@QE~-bO:Y/B*k;uF~&G35,bFr؉F~ez119 ˢ12_Kz%G@IF/QzeQ0a'} ʑ8Eڵl2>VJm':d++n %ءઆ]4CxL{P[1Xvke'M'/RwLaY'KRǽ-t|')5۝va,nq77nfFcl1?l-Wik~z}΍% zR}\~ ;bէa[j#Py9䨫ɐ^.ݧ\{9A0`],,vC]CKJ 5c:Yc\ߩֻz+l*C Q8 zN Ot-ZGw񎌨Vf2CmPʠ9 eV@|PܥGed:'pO QA;^k;ݧALsgVeʵ-KJ%Am.p/?Ԍ"OoM]R6٨(w5jrUXY;7)=H_H;E̮'VDzy(G@I ӋaݰTvQ$SORQhd*I'ɫ^GgOd5STXDj28<5g,#3Sһ!_W|kOEt򂑻AdG& ؞΋6#<=o;ll~*p~=jgoSbǏ,<=TO-OͭpG!֎zU}x6Z=,֞U@^qJ} <م7C;ӵML{N%vG7_w*w.2yH uѴ?uشCW!Kp"gѵmLkPoy\? 8dN^7 "+o \*"KXJN-(gb1S6p-E])Wg UKyg<Q/V˓R$،Zw*Pd&ʔ!CDbq ׵#eu>?oVHİ^ m{YO(c5Wc&GY>O}w|SX<)"sqxo+v+i2Ҿrx(mPb=kd7+Wк3ft/BF-+Wvϟ[ gpD'IctEo\%lm ܶ]KOMrq$`'ZefIl;–+zk_ssZKVH%꾎Vhfy_&] 6w/Z[q2y=|ѹdk]#y7;1eڄpz!=/ӳ}#1HË~6Ɛ}/C+=,4MYʐKZDc:ugYNj .$Z:?\/Z4ҕ'l|~tĆo_o\P)>؀LIkS)hL>IL/ L ߦt뛶ӽ9Jn9qU_~\XHۑ%O3n<|{@^6Ο+{.6{רK չr PcXT}bgG?a*b|jq'w[ rTRս7~ATʇlB1wUse?-`yFIҖo-vɗ<Stx8x{q[ nZeĬU aċe'uٻx5Gqd1{s03m'6ֿR;| }=M gLX^# `+9T¤YxZE@h˻d&' %:~6#lNbfvL*CP۩o;EH0F v6bH`fdo|偙A$R= /~ k#7<[h_i0^  W!j:1h Z}KI,w"|T'&F.gO[ݰZ2iz>i.5ƃr 0V nO@=˹OoȠqu L5@AzŤQ\DhT#<{U+5\47\||yMh IZ?\dۛdǻ:`@\]G>I1=̵Γvq[OWB dzJ/+l?iK4;\GH5X^b _^ck.iMAgKo&‹ x[@*C?zz )S!qVGعA{wpuH>M|~-MlIמ)JIN+lߘz:aG)ȶ޹RsX s7IIVV?~,Ke޳ә9f:I([߉?؁#aݭ~u::/͂66wm mωKT]}BsvgWc?6%4+k[ٳ%U|hPŞ7i{=<<; =S8י֞ /K p?q-薽ҳ)fVF)@(f / uIbCvu;ć`9ϻvaY ;,A> endobj 69 0 obj << /Length1 1606 /Length2 8472 /Length3 0 /Length 9294 /Filter /FlateDecode >> stream xڭteT[5!K !%{hqww\ !XGwY)9vծs_kKZBArG8;7@`S8*KA-ON~Lzzi(Cep@d Yxx˜ilm0h1'`񟑧0#dqr9Ÿ @ ۃjoUL:y# ۃ-` # @ %Ok0',I9,O@ ?!6` t?-],x[A"T ex)u1x 5G ? w]lSf`ЋI}_%=̠WQ\]pX:C!ބ6 Xo0,mNEr[X2i }6^$hjyʣ#تM{Py/x4VC0h_զ\F/ pᨁ Px 2>q H7Sr Ol Gx-bW 0}%IoXr8=yY?/ Qڰ9-2 ۟ˠ؇(ghӛ$rOz:/-ye>ѭw<'*8z{Ew:3UP6ZU(o4{Rz*IbÝuzX^Ix/dXԼS~w=x^*r+($&LFjcVM~颴ŌR#k( 4w<3œ#Q8(qn.> $5E<>bh)af{!㊨ —qO!5lnyƱLd)JWm ]⠝tYՒ;rfӚҭѡoBq8krKfF<$E. ˉ6NQWI*>=*u1[td% iFŤM^# ECsB^go߼ mC}7LC$_- wJg \ 3,KC/F6Ckk]/nM-_|u@kE/p.AZNE0/=XPHNdtSպ=HU3Ntu݌{3'kGG`$B*x"!ţ z -D}1/x #~@x =5qKzFyڵtⅈ<ѱxe03⋼W%oiVDTەvY, Z&"H#  ;Jz̘1XEy؎?^ PON^D]T!}|&L î̻)^*$A\hc[YٝTm6{Iօph3 E W&B=YmNxIN`^f7 v(T9{!!9b0p4)}^sB;D;W+1i|-10֍|/)xD?vRn()MG+A,|%PH'u1!  Niu5nioh~ɹD$"ו*;ȭ3CF^9.Y.&;f$Jy@$9;94 h-ڟ}HˍMlDgK@ǂhOȩ/+_\rx}W?dudNo6/:%xn8/~VH`b|qp^DPEzPwY[|~1+ AzɌVqgjy s"a_/g#̶"plx/;0Å.N w>A`fO SٕPrUOw].91Ur?{ ьMB-g> ty"ﹴq ;J۽T}?P)H H/jsb#I`MG?]h6is̓½R":٢I/pU>r>J̗ꦆV>OQr})8񤿠vTח> "B ]%-tlU$Q_{ZΑtd5b YLݣCl:m$G|NuN56ӫ|,N&=-Lo?>d3mVaaB7)ӟkm1X4-5}U7mLHE4V 5LS ±SI$<%[O?WFZ}mޫBh|sڠ+Dos&,B$@i;rۻjvX/n%\U.AO ?$Ţ .CebMGIo ɤF xNgfWED/%6a$t*1{yjy KL,a]oGǣHro'Ky4r_:q-E`u3Tш+ QWN$rs G$"~ENCD{/b6N|yj=u\k, lܣ)ɚs@`O$x.APd|k_&+dfpyjjٌ}q}<$RFy%SQ3#vRxVׁ{Y ft:.8/l\h_n.y5ǣeϋb=X 3j{gҲWtqmrdWpDBs#9?Y/A2nv=_ _HgNe$3Wfa(_l}@߻G>hכӛM_{ ifG|:N 6;Nl$PͧO828tۙf`(M~;ESz˫\Pӥm?w26Վ ;{~QHJQfdq.5mQ;'&hhso2` rL"#$?pW1w->X'M ]5Ӟ(rh8 KȎ;iUGhșYD*ݴ17xxC6[st0XvXؗ]KEJ(sCӷB d>x"?IBc|ڑWn+z@Sefs$ )*xg?1i +#j/* UOxk=fb9]a<΀vR%{v ]Eo68JpHM(\tf t!]t #)OP / 2'R7ȡ+QD=),MTGL"FVG,*C^H=/Úҟ5)8;vӡ}IVPeL쐏htN[] ߇m.6G1*;{ꄨ2Lj&$QlQPc x\.r[r} (\K羈<@yݳTMJ1W  HR(.,dIp.BFӣ-8ױQ+$_K)v!' $)Nb0is6P?>Sd~E>VJGc\ZЌEe֫ Jxr(OѱLJJ?,֣$}9Aю5rudF 8(v:YOk! EC.8X(> 9¤R$Di!ɐ+)uRg̰{݇(]wJI ^#wdT/pہd=zqP7kòBjE m)KS Mk*ujtOB ۬8L:p«Ti { 6tbk?EL;NENб@J>Eʒ-XFfoki"~sj6[ `BpFL+ pp!Is^C=?'xQ.Țt'@MUVV\Tu&r3 |;uzӚIje00A*8ˤ/^S'C)ɖJq?cP'By~1{9LlD4~ 607fFp A[8`_LaqAZYQt2Y,'DXsV#V3O6{8s4Z!~9A(<T3E{eO[> r`@%{i!KߏBlKsaL4qæK t_Rvyyqk%Q6qy"{6q{=o`,d8 QDh-vL8 "aFmYq>׿߾DI4ވC:5Q_E)g{N#to+*{ b}&WlG^L hL$Nذ,!Z2Ӊr`]'&b%mbpdžHgxMs(ؙs% g8~g/r$9q!ԋhKsɢS]Fm[oBL\9$[kQ̸ބ=m#F֩!&qg62oQ{C>,qzE9 F}FSR5喱 zc&2{c͉16)dCbRag"s_i:xΪ X^>cJ*I| nzt- |C}.JA| 0Vo>؟~Psz{u@Xm\;aҫ!D(pkɋ0;!𹳤*3z1SF5֑f 'n6r'{N?(_ys-ՑZi$:A޲$-AA뱊1 ;2Hni/c;B[]yr.bPI"n?7#[IQ,+)@P=`ΕW 3A~i':&|`OӚF\(,D;G*q,Dܟx9aV"NJ>?y~~dO`-vxtK]zW-K i"YCNkre㉺gO>ͯtA7-k4:T(cVR ΙVyRJK申:Cu/MK@ZDZ7Aړ!- ȜzgU D#1וLs 7~Pb}&X3&|kL8,pj CAD˪CM.nia]TMuA*OR !{dQT)O >/IYdԗ 9kP&n.PĜyRS V}ӴK| .'[d]tTUy+>} :/b=5 X5ƕo"ͼ_J$Ý9%l- ^U_z7 !{_c.m^#rZ%ψ-C/&ʯO75"Hw_ Feb%(jsF"g2&QhcvZ~4Q*p~>l[FbN\wrJyg9wv#V"j[ZgWYe^ )gο}\ }^;(51"l`HD8~)N;] +kHqOm!; j?EzxY 7sΰ='6='Nb#ϼ3LR@J5/>r>8v`K \nXD<+3۾psl5_vaw V-o \e-YUA@;x:~%$IC"JR6,oOL*ȫ_kyguԡN 8Sk`hL7"f B,AL:*;7ϻ?8~14\bt/Sܐ\3$e'NJzEgY^Ca> endobj 71 0 obj << /Length1 1624 /Length2 4429 /Length3 0 /Length 5241 /Filter /FlateDecode >> stream xڭTeXFD|iAD@1aĠRC@P3/czuu\40QlA +"!*mq]RGD "Ṏ!X8  9A( ) HSQNnh=752rغ"1p;$Kx"PN KAڃ}8Xjo7A$ (H (GE!a0.U 0N N] $ 8hG8C Ab 38N ~F< bh d5P]'=ɍ`u CAq'-4 #1tŞ㄀rȜ_e0ph!@ @C>}= +_5q_JB%䶃#NE yHpNaA D0> KH w*s"##S'Ѓ8#^3CO pQ:+=!BPE$mc4 !´~M0#AJ3C O/?k'rZBmi@os]_55+!"#HrW9Y g] wK~As ENv Ak/ šu|B-<PO#(Sxl;M$mϜKM2| P qSm )vt4-8x\IexvvVVhW*&~D(b#!҆kS wN'VRC2:= FOkj߳d?UHl/1ȹeSLnF-*:=taзe])W-jCHrwW$Nڂ}ma:ϛ/9Olv?_U7$r{8fj)e2) X <^~rl\A[Ux< j;R] #9g%':%7Tp"on`́I|.9~ rҜK`WkkCg僾[l:FTӶ?T_[dɧRCsϐS}{z1ޔi^M6Ckq3 gv:>\fAN3eƉ0ͻ?Z7v Tn@߬x~M3Ug7<8֡o}%4!@ex_L2 nS=cNNQu/I<=ĴL=s[^~Ԕm dL3/>br?"}ٵ;iMa;wo/}rľnSԊq\/{QD8Cl&P%$y,&4>Him[_\2z؞lQn<{y3uxw\犤;ۣ eQkBti;ڊr(.r|1vv-fM`Oo`;vq ړw5ǧ^N0' Qf!UR(sj{ij=rEܺirږ Wwcs\HR;LxlyUU \.! ) jwxAyXpwv:%фvb_لN?sG>Wrk[}D8q&3A!_k5W,t"~{ WɍE:g]cE!G@Ta=[[>\L+ ~{I>Z8/+<܁.rz%mGiUmH,kϟ3;{/V)ᢤ5‘U6W5(輖t+Qߦ+6[w1R=XRixF);ݰi}'jw)4Bbōȸ}z5n:)9$0y6*]r#IEuad_ y#UCO^aM. 볥rOiֽ3}9á CKi-{]l~o}DҴڸRB5 )_ ލ仝W[\%O#7}6 MURhَj̾峴+Cw+R5GLޓʣw9+}w;G9yU00i+ֆ1Gm^4_Vqqq3鹳O \q`g3e8NO*.dJmީm~[zurch6j¥4Q=4lisF‚'ۖ#^;{33˾r#]>9V]D@d%IBO}n$wVګc 06ymce!&W=rˆRZ.9TW_"FRPP)nkОU&Ag=1nƳt⇾gQS; kN?sRK\u$Fܥ|5]S3cw!Ӆ;u<1-zVޙgVq2g~ G88({eQ22Xl3+!tn6!:{Yf^4rڎ$z<#t[t<)G`~ZAxnAP.#eof͗+>X9wcv0[;boDV2P݃ Ve]g? v9F1߸b3w^ƱX+6n:}槊LU^ uQ) |{ŋx:۟ho\ XГ1#nZgqC%3Țq<.wS?u^*m>Y! [/"_"}|с*zԌ*cjC陙ə=I}]n'Q6Kz6+sNf9W7p;PWhoՑq߇fk =M> A$M/ U28T2$ƇwRsi'rp̑4%z X 2,ػ鲚6ՆPaaoC; JZۦ5[O<1ai%x-js=[erZu\tiF RaALJ!B-mB٣_ ԙxt>̇C5GMĹ2v;bV_J]}8&ʷuəY@,YI8:>?!f57޹]&B n>N3Zr /t<C!p @2I E69emrR?:TYKUķZ7sZ@WN<'%uM̹&9R';˪hDO{[e\jX8HlF]QoCȄ3^$w[2J/H2eW}VAAq_!d\Uwݗ{ڀ)zC]0E<J$vέG-ދ'.-dh3h/\AF4K! 2HCj/9H nۀB~rη/Bv?VgP3+\奔y?GBQktMxopN&?\HC]yp^ݧSHN)K&qq춠M+W$8%*,r!3O1C]'82&U!f[Ԝo&T*'Oku\X D*奆ߕ6ɖݱOc`s:1۽KxaL0ݧqB6]cM j[ endstream endobj 72 0 obj << /Type /FontDescriptor /FontName /EIHPMJ+NimbusMonL-BoldObli /Flags 4 /FontBBox [-61 -278 840 871] /Ascent 623 /CapHeight 552 /Descent -126 /ItalicAngle -12 /StemV 103 /XHeight 439 /CharSet (/a/d/e/g/s/t) /FontFile 71 0 R >> endobj 73 0 obj << /Length1 1612 /Length2 13583 /Length3 0 /Length 14419 /Filter /FlateDecode >> stream xڭweTے-.wwww qظwwww݃ ]=ι}{OcZfլUcl e53 Pd P3quV3-\F 1'^ āVV @ deaICGGO_!|tP~|mAv@{E5 b [bJ2Rj)/)=jbke 2;i '?S_93~`8@Sk@S_.z` p2w `eojj9oBN2UY\<],]l?"@ble pz0rv5d7 Wg+{28-l0uu[_\,9M]>r[X#05(2 ?fs: f惄`4G`R|PTfo"E?qUBK*} ? cÀvnlge?\@M?H?pd\?!bo!3#?VΒV@3e+SKG7:Z?f[ZzfJC3H*kKHN;JC{uObQa< / 7 ? .NVݏY.?~< )YQs1726uurPQt h2 Np7<)9P֨^\_ K2z al}k\Bs}?VУ|#}׾Yw)W٠U)kGm_*xd?|Mo^ w)}T}מxGu:;zP%ׯ\zf=e[9OZ1%X8`K3(yb_:eO/X*$wMLUt,Gn)^@߻Ǒ[(06 *[ɦ 3hZ[bͳ0(,[[mϼ DR+q)|AY}? pOSօ`9@(ٷ{ yO=Mqlhu2IW]C'-E 0t> 48b#>QjGd a; U Gm7owZ77]J"M7V:R7<7\0@+vc>W # UVK[ pg ,]}N;ʩ9YdnO/^q; +fDbn<_TLq*+(~|?7%ꟈ,7!U`Z#08)˹@(*DUeMi ĄZfZ3$j^Eo9PY!8GR?XHTdٶGñ(G-͝!`,`{CHqSIF0@ :K" }ZC-ϠD) 1Fkse8BEmNH@VB ,X?Խݚ*mJXtzJN' hmZ_ڋI&bo> T<ÛV{/* 7ҵbʵ”g0AY_rty 9Sg?/֒=JP[fHsnPjOtcs)XS9U5R̮4r;tE 3lJ#Gռ-[jeuY4=DkWOv tۺ:ԗrN,``26o#@a/"s{@z(=3zD_8n-[P4!.C1<*Yw _qW|$V.!78^US&KPF Z8o#&AQѥST=)2/FJOT8C*pb})W\`X9Lgc(LƬKn) I.r>t)ᴸV2^C,=fsHp?]Yb2oS)mB]+" žpZ6 >@Fk~2C}z9Ñ~b?x%v~(} v+M\2{.EdٌC85uVDw^fAutDͼ[k At~s FZئ}lQ7I{h/Ƚ)\!ѶGѩ.P90H˚O,.]wL_^062Mj4gS aSןj̹qs<@KL *id/3--8yZG F(y鹨GWPe3.TRtbBP^Z&–*2nLvgyO FcS8ӥz5AO]*kV.9+8nVXEʷ=R2?YJ|-hv$=O)0g miH8{Itn@00f]LBl l]~97-.=[~ŷ6 ĀSպT8C|prFem|ΐPyst\u/G_1q]u`ʦƱk!:,zQaW&a MdNcEwf[oUcGًF=&MAB si cjaEDJzI/Uݣ[k4X~C?8HL:3-H y]J{6)G#٭TW믑 #iW$+G$mTti+oޠu Ҕ; $*$DdD :u).=zB4 A5gy1aȣ)uÜ\x ?8SSBW7 "Q"Z}+ʈBIp.!(ݧqnAiQ(p<ýhi~Fّ E3kO>I-zH$b$|pĸ DNRn6}7PwOP\4Bty¸''/۪!~whbN6jyi^1#f$|/^/*4ߘsJu 6Be;,(iٿ.^@1≀}"[$޻ͩDg1"|%¯|_Z~M!z0OȎijLX坎U1xgV:'()7 f1D[32:U#jӊO$.4(^ál<ڴ7ȵsEjmAC~%fn'A/x[f殣v3W*jj?}l( JXf vDZ֗ :=(=.=>m0@7\1q -ϯfԆ/ P-Y[C`1H2s=.p,q7Za x 7M虬i4Uw}2oiH:KW*]\]ЗN>i3bZI'r&e֙eU9Lf7hYV > 5SK&j` "t҄rwY(+T,s O:RYj YAann-$~ݴU˷ +E " w"Q#m{(ZpĿs? s]QP*ʝKR4:`juU\_ {Hdߐ.ZJ > #[n.nP p3Sx'&NЄ  Άo[n?Ĉҝamx 4kkϲo/K_YA/b*7f9wT.a~ 70}.#e69qއ467ī`jZ'NeAi vNMP+ Z V]pi9J""MHc gc_mʕg*?(7NtOcA/>d ?t$tL@I#^xlLc.IyY~3Y+_2Z.jUA}g-Гz:߶twJ}NdA{2R]=r^wOH$4K]Jޠ菣g1 %Lڞ+U Fb-Sɲv|:I'q_?>5TBWK.81,u\3 |܏e<u`D <ȫEEpt Zj4^%XWəZ`W;vZfS.i`^x5I$O5^Jed6'n:F֬Ŋ\Rj㰽 _h|%xh ['C#A¬Ea\!QwCb+ ],Zq|IEw`e.pC~v"y"o@(Q}-#1fIT0'wZ8j_2/:I-yllBK+9R9CK|5rN:dm\`\#эe;ft+ac/VFF5ZB6|ڹP3TY bAҬ%?•>%4U-|v҂9VgD .R4(ͬit2S¬FÍ`ێCD&9B?o)QK:tdo㦺N{Ù(38A DťP <@8Ѕ>{Z_ݒx̥aIn'uk- U(IٮbλC?ģ|4|(2)UoKqVfgc'!Re.cRd`A]_vW,)fy;7){+\QWk`7HĒRq #4^O](}611:JrT[T"T5Im%A Waq)uOyÚ\/Ȕ8t`tF_9r͝ߠNzYdk E}{-N?*['!*WIE]uTV$vzPkQ vPXmwШ\ѐvKU{t& IBvNoIFЫ 1Zd( c? ׼lD$۝gIhZgq:`$IAdm+eSwTUϽR(ں`ŰjTFr79EXEFqtM ~f$m[׿DJdKS,,{ bpjU Ғ2]ڴO컑<,azZk?01lxZ%R~`&$z1ccVmV)ꘕb_\.nxOhVet1p*C;n G9Ifm֫v3%]N*lAlfLiBBqt4ge/lͿ٦"Sxֲ'Ml^[X0v!^ᢏċW\qAlv޸s2UOh, 6Ei!L9Vo&4~'fa2 ql1%HmTUCX0;b:F|!V+0FX 0do \7fDԍʍWBQU 2mt2F0voz]ټ/)7@C;LB&W{-&ZyZ):9ͣ'稰-m#gT4o iZMDX &ډ U0kRyXL 48],qp{]%*v偖?Va ݦЉʧ"dLG"q؇~3ɽ"-Y9GՖDh^xD\3 MݡW/ ǤjlRcu.z R&߮s\q9 ğU.E@!r@1X:,^oʧ?XMf3H@!ۜ%핻w{FU۶c;ayKY&_tai[V JvoMf4Sܺ$8TgxUuWWmtC/?Y7$>I_n|5S;~<\47'ğ iNne0te܌yI0GJ从>e}QQڳ,t0}i_^4cmդGv}[S/'ؠ?}_:*Rh ppd&/3X[\DCYxy*بb8gOj4~?j~T•lOj0vo;X#c;^nt0 P\GGpR])k|>bNbgyGɯg+$-tϢr]֕- KL)+2ɌsTPȉp-̀͟{'ƭEKs\ tv xZܭ4¥gً,.1w9Jh¸+eĮ- fqdNhtBK yVmPqxyQm+=.VUgFdQ6 Z[Mţ19?ΎJ!k9Kjgܨ)>;' sk9Ȁс;d;>PakT#}ˢr1\n5wcU?Gu5Q )ѧky"❞:&SM bv8?4dpI8ɎEj+1zzgh,9Ch./ |,o9dk .%Y\>#P`m'Sӑ.t_8LF*b+>f [5OZ{%* 1H\x xgbM3 D[8\Ѷ%3`*+RfE&u Rˮ:=V4"rr3 )GPfĽ ; OxyޓWDR9NƙO\ [ ` *Ȁb+xIokaT2hAE5eDn&I݄R ĉҶmAYChU•:̑xSC6Hqj-ܨL>D::W}{&Yz']8gҿw E V'&H?Aû)b${dNfo~|ack \WDXjsy,DօE^838# BOO{lͼ,=K367]Ѫ9Wy, HyFewoq (U!F p AգzkwAyģeAod#PcЎ)WًPaHG1\.H6(^)lR,AiK|UrNXxRHϲPlk9,K}ąߞ58kxNmǂ^Ϣ$.<1gwGtozRt]z-aܕ< vt362bK.e&$Et0s+ܖv,z9hD:Fnl7ZܻkGbw{oTFϠ^ǶG{ޘ( pcKpTsj 7x]0Ue(j߉ ga&^x2zq#_3P[:Й< Fc%>e fXH.=;}+fVޱH;8>gsHћ eINHKD'k|\\lXYpE>{}ޒT}Y9(4 C1nš/ v! #z$q/y; jOzKbq2W W.U]o#RИ XX>Mۦ+"E5=-i DjvVʃhmdQ*a1EKeod=9,WGE3W͆dЛ3Mpiv_*;:G]\ ~AQGwI{z {*O} fǠP6Վo:&zrȒW +u_KԐєk, {*T. ^ &eN7^+^pZVU %zV<_Q$x vc4")`^rE7MSХR`{9UT@PK^b!-FepgRYg= ƴނ8cئ]9c a:@?o@g}gW[3Ȇ1 M^in/N^;6/~̎K>53maja*Z]X z$4Z>?>De84'`kdkS0wI?aXRA~Tn#{ = 33ߺmoXICPWܴłoF2!ղBt.סaT^A:uPV82}XWWv]x<3BplĒA.C?F'Ncڧ_bdr!Q{5jI>C~+/y$+FFITsv3uX/nI'r𮹒Sr' tZiTLyKFdG䊯x`ܮ&ye% ?+|m1v&U{uG[-T3),٣ QIm%$Wm)Q)T`r6w0HK^6`Uٻdl?mw70ݶ%WN!KsK1%xBQp <᪕YIr12O2>= {> endobj 75 0 obj << /Length1 1630 /Length2 8811 /Length3 0 /Length 9635 /Filter /FlateDecode >> stream xڭveTڶ5ZܽXphqww+ @ R(]Jq^݋P)R޻?Zs\{0hpHYBAPKv0wuQBT9A֮`3 P,, [HH ut[z,llq{yt[C?@PGL0 lhh)+ ht}n A\@,+3 iͅK8,a  rv<]@y0( wS WAggLsp;Y5ef~PgOK럖žiQ q@?AK=9332\]VpY-A..4>{_п0doʼn AgY VP7vKW`n ggXZB!K+u(9%2N#W%wW:1ꓪF$`Kʐ6 +"* g:n>e*HwB'.n'Wq\D˔|HAj} MkՈFy#H|πD˥N c{>ahuT((i ;6Y-7nkZZ~zP8eoYouӽ)C$Tfyrޔn N^P#^9:_?8 !h7M1f3VaXv&:Z7 | HhɈYB!^wv),CDj6J֧'˸!ѕn%4:sa"Z& ş:Sk2<(HֺlW]&5,g }L>#g:`}-/p(SN1by#c{/w1ƕHs਷FiqiS hθD3>8ds' >DTzT9SC)ڙ]ƣs]Pkˀ V^&sJp9Ug^#MFɤL88룡?zgءo&CcM9,9m*-'^ņ:gTuٌtH:&tU&O9Ȣ?!!A Y7<b1Z4rtڊ޳z> fbR;Me  K ! )5T>Mڻw'ZۋFq\L {Tͅ-N+d׵&ХQ2򳛛? ີ07jv`_'V$V,a#Sڟ~8է٪8aT먠wjuƓz%{s)~#>c}M2B#]]YuriyUc$P!q:;%t^/*hnI(|GUw㝰ٜN-lro@~nEߗ0?&UyĽ6ARhA6=)WQm̥%'=v_uV!'TaHEe(K bOahj-7%͹ZmDh<iSh:Dy[ a.8V/Sh܅'{<}hW֦vhVF)F:_/ն;i/J7b+h ?3R32chUbPL..Z9N>NtHA wv?mݭwۺHm>h EƲ;0\B+F"齆~W3dK-/Q\@_4YvvtEF=桪i 2F~ +mN["[xf.@uﲻS#n ibjз:t)xug-TE/3I*HaqF 8cVmi# >\bщpFN{`17HD]qImN9gTKW 9G*龱Be71rͽۆ[I%'E#c *IQ'<7[7Z4@^q?-~KMS VW,4{:U F6s8τOGH&?xK옜[pߡ^Dj]SQX,3|zebzrP+/cCuJ.yVBV_-:͚'%IՕǾm82YJm а*^s)B}܎i<5)5ή?m)G|7"?y%'g85AD7jeTY:KՓכhpU)WJoJ: צ?cM961Nwqjm.9xQx976Kd&XՀc 9bLX{9WщzOE}TM[3 KAǁVb^5 r/U| ls5gZI n@jg}̴2HB|7{qpw8IN}uG^Mw+a_L^+$S ^<߾$==|UGgkN/DT2 Dn.]?OqO#<ѽvp(YH`|鍀݋cڧFH7ke}'ę7D'H(TCm]CsG<6 =$IH{f9'QةFƔDП[D1jxZ˯pIH68 $ , İG8q]yYË$F<~ 1g+rGqof^V9q`Wdq_w V 1 */'΅}}\pid Hz[{u3cj <8r^,uT-㙐.$8RnsbQBKlw<QS<}}d~&ܮ2fA7K1:&nHAX0i7cc:L"Ǻ,Ju=CUDz%fG,4?b#oٮ`bנ*#.?NN9ax ɋɲ}{ŚK 0VKNl:ϭkcsRo Ŭk)Lap9;~,"h77ط,l1"4~mj۷?'JQ)yGPWl:#_l~L#VTڣ;Z_CFx)0LfJ?:@.7tIxxȑ뙅C2>> M"עS3bV,^7N ˒(ȌȚO,Gjem1!!fy0H|Mbkaޑh)gQ?lG' .sCqԿrK?5۪\p7ŇJ +_>*SFNp\%:*Mn"͉s/t6NBO5*Jo-ܽY3&bj7'и=(kT FFX(jz%/'0.wôS=~3Uy4[zɘ6>$ yG݂zPpVeX_~sl}Zl _ox[$Y\g~{ :,^sm>$zNHd nSHzn/A \f%p$W>o;!y+bhBٿd|EܮDn;̖Ch--{)썦#KF,,p7BrO=xEQ:vl՜n 1cTad}3>%i;)y;KGc*lUrYZ*! r~!R6s4ߏ$7(X[A uɦ~h(j-x3zhanU;% 9ZqE-psf’}=Ѿz 0x('_,  \( &«ΫZ5̅jq.EK9[Ѧ~ln&xȋ$$El%q~%^?<~l0@S\i} #EW~8!TRm!$əح\r9h߃(mƬ8fK7t ?)B؛B~kz"Hz@ެnZ|sŝs5w`U & MWIs ObϝqfLApέ9J0t:"#yit_ݟ1u 7I-F%_oMneLm e%J~Чn?eZ=9vkl/rv5ٛqFH4{t{g$} mX0xNcǦl3S I,c@(w".jb;Mvja nڕ7F8|֠˿[s&cB߄bň2$Jg1*G 9rM.Й_*AG )>>_= @=f×56)(Rql̐DZDw>s-48?nFHy*ПjxkQ!R Nǵ\ Rޢi[Ѱw*vsa$Q uS]ݑT=FNƒ:{9ĵbeCtqm ..Q+7h)5!vLtFfIKVRhYZ3LBB1uaşH7:^9cѢNur% ععrIB8 EL˶dWZ:? uٲ FynL)P'}[#91?CCghH4!CK, mA }nluTAY$.PY':NV>ÖTMdzU3M?YSDL J{Huxʢ1} Mq6Z>g(K :$L4 [i{EIfZa}C#,-(_<1JړGP3e3bO);$Rl(o$ux|vev2V6 u#]r$fTD$c(d!=gbtK+ ~bK+@#1~dVO XؑOыw9p߾G_9 PR?qL7f]/:.eϏw[{u0s(/fɾsZ}6~cq^4ХsqursYHm 4o޴(B7x CC[XcXPbOEOC,M^c4h,\r@t/1o(~P+S`j7# ^JH$υz7~ 4f +*ADn f᡾KWХT S!1Z[)^*ط܍tw&\_e/ԉHJm!'&~iER1Bmo/K)7L $֛9.`T N|V푹Ccx6u`H9c4g pYWQ  a.T^'"u>*+P* bl^NeXpr:@f8aG䦧 S{O EMm+\.V[e=+eյG[joHJa-Xb^r#+9HBBcPw sIZ%NiUNA.$ßg'HyjcZ4|u-7U|EtF&dy}RNvcksʶNYԬ&Iʘ+wq_uB/5$:\3ۨ{7S2JWy )$):^e,7=g8$!hV䈶hB[qX;'6 $cLUJ"z`|$R kpgT ;M ^ f0"ۜUݡ8Wct$GKM']v~8)-r/FgPc> endobj 77 0 obj << /Length1 1626 /Length2 11664 /Length3 0 /Length 12507 /Filter /FlateDecode >> stream xڭweT\.Nݽ= 4A9ΝgkzꭽLEI (Pٛ9+9)0)-@9 ah-@s;; vji100S ?5 +ǃܬK +$ VH.vw3;9@dtp,]v8,@K` pu>܀^@T'=rX:}r0s o@N.`*n. '7GV t6u++C pp4wua>n W\f@#G0'0]AVDpZX]]?|;ߪ7urorsY2#4wmr@`kVd,l[;whv %GJe-[#_9o>kh)w;;%Sǎ|,SǞ(Z4=sWGKD>haef*Z̭v[`t9?x&6ViXm"*ſo,z: rPc4>G)u+q>q)ϳ Q7+' #`hب:X|L R|?<4GX_q4ֈ[0MBh r4ܩE8ޱ?0+j!uOۡMȟn}(Ũ9v.77U5WG ,'D^V0ƒԩ4#c_o LqܼM\Z@?{8iN;ɭ3'[u(Zm~ffa_neb'fP.p$ 12L ֒CV49q0-QIm5}D U)ř4#Ε>[d*ls <ໄY G5(ө%lYuǛ W(7˂,ĀHNI3/{ /y)g;ݰFm`edY2m 3O=-+0\Bְ߳H W;":MYmry0R;`qqA%cYYg$K̃n/ʠ“M`w}D_c+vZ]sc.m{D:EZk1s5.tg$qDD|A2FFIYvs2#I6R5Z& Κ0̼ŰnIy=HC߄חN_v %%&5ZH#MհH~6֚>e8Sf}N]˽j;:d7 ybن Y ''vvjrpi qe%g 'F J~1 3|/d|`pA{۹!2o͐+oCxF8L&f 2Y!3f*`ׂnĞaGV64xIπu)SXY3`3Zt%A@P]m **;]O1ļۺʫM9DwM[%fר8 ף2G_Tu ߋ1]H&//אZչP+hQt;@XSǦ-<tC!'J<.ʆ'иNBY.E]OoGh%3twVC#7S֗>71i|!=Q*2J @ǎvAAnJ 3"IlD,(7a݈>R"%OXLϗy\xW`}Kӊh8Egt .Џ' mTlmB5z~ORod/ەq\y65 E$Iۛ^C5k͉5 :ϊu9;^]rxkѦ=*CTǙ;pkJ J 4B⺞zI92Zǰ²9_Ccl}VwI)յW\Mxv3|uک ֳMBKC^Má`f<_P8n p"A9Q pBt6eښOo6o ɓ #&W6-nοBǚ ]V$X*.TnTW\2% W]g*eEFcyսL94eE/Dy\Pƚ@fr|v;JwkW܌bZܤ]WOA5G"?$xO_2 #Xn"`NYf*,l#5vRrTǴr63Bouz%L 3ӿ`g5.|e )u#pnʍ 9Vs4a|{c P*4 $zt<3 _t3K62M=U4r0郿Le6(7̪jn8".4%:C~U׮ uuRsmv!j ֡ARBBQ=ߪr@c6^0QE>d'`|֡ M>Ȱ' & Q|&Ew(WtM,*,0)*rICa ~}Bћķ'1oUe0i^0yMzQ!UY>On_fè:P wz_W i=8ho 50?f-_6Q=t=.HF"MzHä<9[ʇA%Lբ15!Et]p-'r?H"~!̅Ǡ>'ӌwjS'VT;ut!;y8OtM0ȯFđb#cf@RT$|%l^&)b'+ ?O}&槤7/qb8C&Z59^$3|I5:\(mpCuk\9pww?mf6ː }ipWx :GϻҨ*R#ɯt$ݕSnMÖqs|w. 3a!(x 4 ꮷ'hZOP7+kDp7) ; Hdw7#9=Z 1'g w3*_ qܶIg XGI['1}7ʾ i'ϢH ܽW?*ۀEC@E-2eҡs+"|Ǎ:vqB vv7e֤6#LL~y ALnhҩ.$cd8rrca*jFϮݻ:xwI7t۶^j36bOZ`jfoY#EMц>}Zrز<hfޝv*tc*eKejLX7ܓBPS|>{UUU|c6'<0y}g'׳`<5f,#2,شAi .sN>+9,7OU?B`QZ!U\f3yy]s#.YWkq0cO&6jޘ ϾFY8<õ[w"&S4jO%~ *G.cO{΄2ˤΣCqIFp~1/7LG.ZC:,=?+c#&tGKqv87)w.b-(4dT\kvah"@Kj:ŰWl?}Z+R'y}Zq>]9 1XhN|䊲YѪ^Zd#kLeOI*AoX_+a;\uӉgWʆ6g52t:+L#Z:k;G:0~.?D¾ !NÒTtٕˌ_"̜=nmTt #ǍX}(ec"Pd {O6 2>v4U 8xȯvbޓ {r^P3ŸdZ2lNq1coEeb:t"${⦪(CϏ'E0`9$GkI:ve O0EF>lD\r{׃*׆wK .]0Q t75_Ѡ,V*ڨfz·0f)!CJ3t,w%CAU3gw1xXgh>c3`cbP+ QRYwIUuDohQv_$%\Hzo]w_G'Uq2kIory3yLVWbKZ3OxHsd.3=w-6\l <_Ɋ[(Nv_'ҟ2+ؼ1mLe # Z}Ԁ >unw݂`azj t< pe9J0#Ɨh!*8I銬SªܚJ}uIh49_5{y9j("7EɜV ,VDБWF@^w{)*a4?bӘXdͨ7z2=Me'$.R\ -ઌfv9§Df`Dq"!J'Wh[ wT+ӀT' *)Y:tӏzHr6D1ѸdUwryIaVA7 yZ6|axz ~-nv_сobݞB߰Jk^o[m*e]SuzۺwFk5ig+D#~hOLn<ȁ2]7g\Kh!9 !tgC1n}I )Dn'$_P}Ul1ԶߘqgS$tb[LP*#j!Z j=l#R{"@+TFb:nDʯxÞjIQ_P382K;ۊgַ0"zL,Z4rqXl҈DZE?{ݸ/yw?>8L3g0N=pCi~lAwm\Ι~$ڥvŹd= t(:C%@>S-۵ѱѳ)/6Ħm 93)-xrp661)[p t}Euu >|"Qm6ъwg%u]qڍ#t*:]\tc@GX:Q1jW7_*Be|Qb[ʁ@`y7-ƚ9aBy/`w+=|F=|-Hb&nȴ;c6ΒoB,"'5kD I JrWEet8f!꼜GȯQyX1yIy[Xr9aguHxFV/va% xj5k322|>T ymHj:KV0NCײ)蟆Ppкg^W#T">}fo`4Zm"̭M791b8kbL^xېwKDRKb7vFsPU'Jw < fSW^ߧKϙ5͈m)q4?@Lj :"㋚Y(."w]V%>pVӤ̷wBZХ˽x-~ŸLS2]_2`aI*[ 8a&FiFJHC8;k^Z|8eHJç6le5?KbˈQ1[k0qȮ\a//l@r(IM3d#f'$Z$h63F+YKՂKFvV5+ZY={a$0 cb}S?} ɑϷKyKM#rElCmy^rG*V:/]m7|sN"BSxMƱUj@g"' *gl&Di}X,*UE#: e:lʒN>8.Bʆ3]~`l">W:<L'/ pМ}Uc&=u}{ع*в]7PzF%5S٣*3GGk{ƞcOD,B覥9Lj da;x8b[vMvsIMѓNS֊RH& . [ރzRaYkCD5o4cڀ^z)r: {"=BwɬK`Ղk1@zKb[U a Ut!ml u08:U\egcCmi;q#Y+[&ax> D𾟣ˊʒ(B xNѣ׉HopW.Z影(Cx-w@ q{{%$?Ov>&l;d 2yW:IjjѴy5[gq~N^0W *f"Ӭ a~'nԟG}SMeڱ92QF1rsn57]M"fơNv )_Cg=՜hNdE yS <&Q2?@R >Ažc]xʹU>CAXHEu*Ct|jSYmp,o ZLb'`ͨf.=VQ+aQu_QFFU:3r)TF͕~%5Ytq; 3i.>K)%<_e,e3S`.OVn8QsnfĦd-%Hnvq=1ZJTJ{5 =EZ.MtMљ;,b 2SEx>o= p\JkxO;8~n=>`.=@~N`35t"|j"gVm^^/w=̧х9Wst6:m;`ͥpa]) C{,4~J4CJzg֜ЊgP;Ղƺh d tF%+En}1oi2P#?zOq %!R^^i..kv[ mvLd;Be1Fi~CP~֟Bn9\1J)tv2N WMVB!G9'bޔa~.Pϭ++ҥ#6lg3ʢ6izmڗ0]]08l/ GKݙj6K_p.BV`}ZP2I3 YՇwئs`DbɛfG+z8Սd*zcA;){&3 IϸcZ*Pؠۍ#)ҧ$81y oVio 9'4oEV%@{Kitp% g70v .斎ߝz9?tpR\? zܲǖ6XP}jI֑TT_-  o.cvꜶVt C AB^iNè_.[l2lb frGj~G",GE4ٸǾl[ k3d`0YrQ+Y^NG7fI̟.ǖ z:"51(P!4*:DG $ ~RKL]֣3r4}BQ1ӘN7Tچ_]&o+h)0ZC!"hgMZ;yْIwVZ\qɹӺ*`L()Wպ}tG[X|I]2%Z%{?aW zs&sO)>F3֖Аz_>KHQ-Iq?=P,CU8'kdC񂏌NE݌kЧD61UX-!uҡBHE fSj{ nEc̮op9T)< (ogswAZ7:Q4Yx"!N+"oGkdamЍNߗM 7ՍGV9 8!VKp~gJ9)C>?jĒQ]w`;T*~Slr[ҙMEP3PM-)6?1]/z L^cU3MSj25*[![<,0\Dctrs~;~KM 3}~m h=$Y8¥wZ'l@9:LSr{8CBCbeYTL0<ꪝ3 'HC$_M{ٷFii oGЩ>I)B-A4G*h-U/ĴqO Ui\cPWa#7OgC~Ũh4MM.7݄#.6 Jaڑh׵^8![ekr꺥9%S߶~糷Fнfo"d_[J2r4~Ѵ51Xat'd} h6M6|KRzX~6YLO]Ew|q6/S Y {RYwzHzukVFpxc[?B[ᅪA +Uq3/ [g o$[yD#c]~! zH6Ucp ߅"?Ÿz+Q[ !Es!ivƶ|a9n<+I %:Bf;1E~r N.I)ȞsTPYT7ն8~EB~xõKb] @ied0+O֪U09<} Nd?Tzars}yïIhH~99ܤӻ%v(p}WBA- B҆~ȋ=M pe1I/8ĉOQbn+{WQ~l̯K0MB#E}iVdkz[/5$#z ݽ-W2M]44Rʯt]mJݩTpF%@Gec{ ?2Z^w q4֑~v=usCqUxCߪ1[ܮ ;}Pfoݫ+٭.mX(>DCNd9ql0 ~yA>]h~ͨ,ȠFκo$Ӈ|~gceWd?/ٟ76 Wn:_`YSP*7yS*e312)^Āi/&U?*7"" Ir5Y$/.h 5,ҁOke?JI/'ۆ(cpa`kFb^LR$Ә*3'+7u4`U^]򣆘M.~¼jHƪghx㙶&E, :n!A~-~F `^ͨB /yC7gܯ<ʹ^p"]7<4*sF{b#.9~/IʟMRȝWHFx6F5 #W:=R 7oK 1M9!"uc;="|OǑ'4X{lH+h3M*ES3:$Қ fob6!͡&saŽi`&Cr5@ʗR3ݰR-ߏF?6 BdO+΋9H:s.ώ?o%yAIk|-a 9{}\1G4ΘNG3DfOEy 6`=i.S|J|!> E&^r׾Tu^1`|j1JE~c$h0|^/ʩhi͌aHm5e`L#ͪҡ endstream endobj 78 0 obj << /Type /FontDescriptor /FontName /ZYMAXW+NimbusRomNo9L-Medi /Flags 4 /FontBBox [-168 -341 1000 960] /Ascent 690 /CapHeight 690 /Descent -209 /ItalicAngle 0 /StemV 140 /XHeight 461 /CharSet (/B/C/D/E/I/O/R/T/a/b/bracketleft/bracketright/c/d/e/f/fi/five/four/g/h/i/k/l/m/n/o/one/p/period/q/r/s/six/t/three/two/u/v/x/y) /FontFile 77 0 R >> endobj 79 0 obj << /Length1 1642 /Length2 5365 /Length3 0 /Length 6195 /Filter /FlateDecode >> stream xڭueXTm6݂"H [iP AFAZ) i)%{o~?9εεu6 }#%D`D$De]鬋y51 'IQ򪠠 Pa2B[4/t@LPHHoo/#>; E`@#(8@ [h&:Ews8@C8uH5(K  LJA=Pߐ0E9h3G( #Nn0䟂\PH3Ó#4wjՉqa~F0=!H`x<he pύ'sAᆆ#@@AA(}{O4׿kcP'(-|N0=/qsE 3#/A" Eb)ʢ9G>ZI _4 5{ٸ9 DN.fпVF:Aůǫ#"!%*V{@!p n@QNp/3v " lٟ,UԕMY?c "!>RVFzDnKuH߹GCE%~lAFB~߆0 ‹gCP0(,mR)GժI=%8+÷6dF8PW;rusct#ݛ[94_]EG^>AbyGtqQ):I桠/{/ρ sp|+%k|1ˇ]mۤ lB(yeAL߬ވ`mQ{sR]ᾒ/՗UG 46_E_A=yLŇRppj6B7-lj̑jHi5ihN#|Tf̒NdRgyakW!IJb%GVJ~";<rOijǵa$U=OaMmZX,$`fo,]sf[EmS/*?aD8vss;g>+Sa-iqi[=leHV[!Con>TX'v 908X'k0-i寴bss ݴف?z rt7f];XV,+Qf׵ h')Mo,(Ъˈe띑:+_=8$Yg<%qeiY:֌Ա\I'>֪0V!Ur8ۿ8.z,q&yrKAU0 QHl |d5Dd1DlxȡRgr=7̦`_ķX8v`U! eSa:e_=wz5rr{o}1BgNVKkB =*zb=tȢA緌W yD1UQı=RD¢'ZQ|j`ulhĢ1iHc?\vG GYי wɰK꠫hjR?:IXUSmC ʍ s};[]K3ƕ]Uk r5x0(b%f`LK?: Z9]ƺ/nwYx8pM}h#n%V=pD&C+GY72/^Ro{Ϸ [}uTIϱƗ̶!scyk LSp oESpkN#-Ѵҋٸrec4#&e+[" `Hr{{tu:ﳴ5:Guݽ2[Mc2N^ NQ` =-THObpܫE5i.w< aU!R BO.XZڿqbӍ?"6=MI^Bu|N5OHTp˶k+I8Hܵ9f@> MLPbQ [8-Gs_1n~2Sˣ;j+JdϗPfq~1rq5d_*5/Dnʳh?|gKN8)MjR=}_Yݳخv\lTv`_eGiy2k+9σ hs TilυƼ H],H_v.j{u9ʌٳn(֫S]?TI*j7<\Kyh_EK9(?^^ ؅I>_IGx&s,0fr_<}¨8 ?f"%LY-bgE @]DsQżkYnxhud)ml%t1pG޽ K$x%-$.v`>ܤqNǎNۻ@v#+Of5e6T~GPZVMܜԣM/ȋ` a^olᝍ'}?r>r\ TѠ&| |ա?dHQzxbwSth|#-"øb!v|E-2jە4+aӮ4Jʡ~:2oFH~GDzyq,i17267V!?T;\5o%N' j^ukc5؍'$jdZqW7׿".J?0Q}IwO "yT'HHVk&諒WR9ܾy6iv7 ?'i0Eo+w_Xźp57tIjjũu()|GE!ZkK~LBG+m5y:+CZYi*䘹ļ8ep}r>UJ&l7/Hj{>5U2luǀ=*+`q] Gfaju}r59lk'׫)S)=o^sq [U&Ȉ[u.DәoŚD뎾$ֱήAJQ# ރ'K1 H˟͞S/)WIi|[M+?epvWS\oOJFrfן&&6X>uݢ]觮qهFica^xbEOV(\%7 fF] sFr?8B-%icj}evSj{=YL w/6MUt&BleW<υd? 8e2NعeAu2GɛϽ.~WV7S~#M~'mB9r=|"w#W wY 8{]&?b2ٺz\S6$X[p_ ԥja`Uus$Y o<礒X/Q?hG<4 !h] 2@/ryd>pVzgy['I|c *9s|{%mr/]oÒ[,}=C䐖;~ Zя~i,oP7CvMp*xLY)pBϯ7+qJ;oo XWsyJ0yiucݠ0UMlZ)0RHo;JhMǕT2ਕ͗w( b X{ pl@!I/ӷ)~]Oڜk.sobvvhmnm m ZSM9\{Y.=s⃤:4ywh;^ydzߛ$+*ÆT>cAWp"Tț'kpuj)-0YdW#w@K^V&rI͂MDEq)GTOeMV ^@VI?LxaMmUt`ߪ WI7OP w6沅A Sűg'lΛ1X[$pLoԜӍ0cZVxfɇ匭&_C9;ɵ\ENror2~ZYw9l߾f/R|rYor^{A4H|n,btd)ǠԘgss'Y8EbL= 2_BRpLۨףSFCǪ2]%K8y>U>Rr@g6b5OaOkfnAY<ŏ{ /fS_ϝ| '7,n1fEV>@IӭXG=€T_]+=iu͎sĦL7eF|_bmp#PZY'ǁ,*K΁lkR@L|,o 5 FNʫ$ &XX 5Rfr; i2^*gg[Cv[@O-hǃMVL{(]:.Kl~h`3(V6F{kg:> endobj 81 0 obj << /Length1 1630 /Length2 16218 /Length3 0 /Length 17062 /Filter /FlateDecode >> stream xڬctf]&vضm۶J%Vm۶m۶}Oq?ckkMFB'd`l&`JD 3vsQvwS6p8Z9؋q4Lf&ff @@AECCL^C@/ `nekQPԒPJȫ$͜lnƶV&Y+3{3*3?r\Ly989Y}X,]`eobfOJᯅ__0EWg+GWߨ.V󿖦&n/_ZW#+{?V.F^cstWn.V-/_um/9= ߘ&c[X03+R&M_ gf&ad`o053awp@2 B -fk+odwc=Y4F?#;+[0w0)WmK #=㿅V.VfV&s#ۿ=\/j+T-Ll!*3{Z_?fP z9?s0`<tL:fNoB\̬>bϳ'@o݌L?<1{FGO?j7g$k5fff&0K& YHH|M;PjO(Fo{pix0}ψ\ M9\*35<~/>F2^X| 3 .Gx\b.%V֯X:_a_NI_ኲ=j_H!)`BVXHk*ȉ7Z#@&Ə.X7Z+XCT_yH7gJtQPP7yr)k/Hfp٤u*8@JcT'r>v]!wT6Dnή1y](!-ɮKh(_DOZݝr܌6?{ <逧kV=rwܤ1ߞlkPG ,mO4{Uͮ;N+9 OB҇_X_rMmC7f<_y!5ӱ;oıyF $#NM?^cF>@˯1 V"tȻ!%/WE'40<``Clk>n2u_GtWO0lDeE#|zm"VERDQC޽pG5j96G7tRJ :Vsc o)q-'9t g4x*|jԃw@q|Kf"bQ`.BgTYnE]Xh X?ySḁLƜ/$Bc.=X:? HxǽkTyɝ 0s(oH&ɖ7w-̞ h!lT_l-&J9[|Fw>{+5L/+Ͱ?qBT|R($Uq ImAڸJZMvM:HcZ49ٛNGe^3i"Y$~ Ykn/#u!5e0|+6%VO`ZkƽcSCODHA=YڞTYϔ {$"' @޷UuL>$HmXP_!4j˞RDd%+2M4pThsjj/e+̖Ҷ!eZʼA\YziG4D2b䝫G4f<lj gL6y'FH~Si0U!ֹ'uXTH~$,1 raCj-> zYu:CH VNv&<<M)}aDګI`:|}eOw!t7'F_;'ifTNL O &SK )Ƨ*p}nJ@rQ\falVfCA_2Ӕo>[4L,9z:l OR'6w\:IJω:cԆ.枛{.W3Tq]5#/n%7In.eyς57}F7sۅ3$L`<);d˨Vjظ'/箏?)ivo_L鈑jlLqz]< a,m.q_w9w5)F=i>qcQu4 ի\qe\p揍tM;_6lEsh޵$ j M~q>2ǫoq?}7b"ƫ4hY3#xTǹP%0ŷ%Gm0-Cˏ22Sϲ·T BDC^Bvr:#3Лy>"‘ cEM#ѓ&U$hJR<d-W),FHtǰ_J`.w/s:sDߍ6ΜT/*fڈb)`,HΑqTJ)p)M7Pңw2P,&qUnc~Vϲ) V:|g$vVرbVkٍYe81G0'*-k|jzWn44mNc0KL`-U] F\.M5o7]fڲɔ 78ej~wT:O.ر˃ gܧV=WӾ[dyJ3 Z.B *J[nߍ=vn |:EQ7D7Y^&1}up?B"I9dSoChH g {{| hDa^*b G6 <)ȩi[ cvM跇Ȕ{ [ @)I>ةmI4E %gaG7.tz j՘&82x2M VfIm1Uj7wQǙ-H7%H|ZN5/w]Dt-:Hͦbu|ރq%&Am)U UDb .MJ$CV՚=Q(Ua}@ëǺ,ϰxGE11|F:Z!.?mgOx/HufHOKyӿdTgxD{mյ3xcើ vr^:P#Vn}nֵdR;h{0:%7rѤiٲmcODAu{UDZmv;T{/0y&{izP, Af #اʃ n&ePZƾ;v])D/ܖK" ]s-kWn8M`3=AIa̋-Ff'fvd;D 1D%Ea+,,ϜWJ'"kÍKgJWɧWfyy]g.($]I |*/|hziC1 rMB TK\i?q0gwr~E 1_}Q~N;3 y_-]@%w|;=n1tu~6P^zFL7Jbo%#ƐϫBhU _d `P |ӄv,Y.z;+k;LNG쀾/Jvx剥yug먊z|  :8 Ѯ/bђo=EzQ/聅ķ94ΧReyC1b}qW y{N|x!p< ͡%P ]EhP6ơ96=a3ғi}ߜ#eaL!֬TrIgگ%Rۻ3O|{ 1^ɜ HHe^JNn`7& $#= |uW~]j|te]&hufӉ8@%@Xj}Ql?DL *`aSo3GwT< շb%OpUŕ,t4lS &vG`YkIXHW4^US_=?4\faxH ɂrʬF :rR7-Ct|E>p"wlEG`bZŹ{p{O ؍8B =pm4 `\0FKG:uHH;{ |hhyX[vs*rդvy8/wx;ڸC(U|:]&v~7, g[T+ }1/`\cn*A:ilP]3%gHW"U95x=vpBDlbgp &$eARb{߷Q_e%SIֱ06Z$^}SwqTp޹zGc8  t%q"NR]K!|iez QT# 7MZrԵvy}&7^k*G/Osؑiֱ-57 5DlT⨢nͻ>4#mŀ^cش}ufFvG> zj~%TdXm!HQdjPG+6{4p%BKo,Hoxp&zE_ Jq5f"J:,Y6+#CA Q7VV54-v+?VٮI!:6|\{?u[nD3x| Ysq`iV@liWh5g;IɰU+,,7fP dEZ&o" !c[+Ey3`qۤ$`\ՀDLrv8}444D$nQޙ}MVq3|RC JL $3P]oX#eM>?bMXP'bi&8֏XӚHNil:G8ۖr9l.<Ӹۤ=ƺ"K6' a3ĢB#.eHݏpU\Ŧ6q.#5Ea/1Ȕ{Y6?НR#/E=ʺ%pϼjJN F1Ћ^Dq٧*Pb^%.h⛡~), ÖJ(F>H'\zܵVzTlRτX^g՘ _"_eMnE&JB6֏:FZ>Oڴ*'VB)Xْ ֤enث1J:$ Uwr'!~4x#r,SFhɉFwN/Iz) sBwfc?V.0vURǘ䴛RF{Nv~1 @.á1>zs\(}P/\!hp`S*]b $-=X;Eƅ!iQh2$7`u!wT!}/I3w:zKw2֯\"H(Яr#ƧJLv=Yv%g( :l8POFSL\q@J'Fay; hKrI1ecň\/ Tt6\@UM2ו,'կǂ(4"n㕵U`0ZyL1NDU CDqO\̳SP ׏?-cALsq;3iL5(TʚAH;U,lsxXdGfb7u ƞjM)7dTePN6U_PxDBjUv3»it2w'j p8ѻJFԩi`*=A'$_ƇV ݄)``4.REUpȮDhZƟ$#d}N* -ilnG)dۙ8O[LwBAp%kY[ {36:U,x0hDHµ`1wUOWQ.)]c+ԤT| p: 9y3OG9:bF'aukΞg0w!~dgRՂ8SwHK`y Lu|=0OUaPIpWp 7#LEK8znbpZsvO[vf: 5@+Sw} y =0zи]X|LYEԉ~_C'OtPK]<_<ܞPIid&kV[k< Q}ymN8 NH31bїh4˛f90UXfݬ8J8ƳmӮМ:u.pؑj{d³V'¿=^sNҒXZiaK+>P^14Eu XlAqPhߑz-*W+ >F OѣYY#6Ip Ps|:>^1B̬aS4վzmB1SyK(d'feQzք>*6wd?䨶Frwջ9R~gW4dqRqPvi*=+XX˗tuks_a*}*;eSٝ ς9ؾ%e \=O TRDK? ʋ#tnaG*P)H>t̆ve?_6Jgӈ&q}݃J -p+av'JD][#{;$y-+xL>p$- u09{8*L쀑3ܸ֓/Ē0ǻHGvcUF'q3λFcuԒ}U '7Cfę% 4/ܩ]{UےF(x8ܵ (v|HB2Y9D;斸&K?=˼_bF5X \PȈšuڧm^$:w#%e9!X,rJQ{ЂHbVCbosB千)ʟ{F'O ay(Y(%0O%{apuQ<>!y9=gjuuek{uFxф sš.j(.HƦ`xb\%9%X<QdtxdV \X ՙp 2)4k1pۊ2qT{9xcĿzMj 'u(.JHfR(^]Lplu{~iHYAk6Yl,2e32YT-9O\yD6ɒ@$??]Gg5kkkV-wMBNj0 *--|g]ANS2;!4+@<=8$)'2 @ KzB!9{iҎ QCM6IzWeuV FHUM?"2c0*~"QS #EZfTeeZ`ƍsB.k49arĥm LN׳$l !=c`4HؠG2v,ՙ4탽_ 5JOM.1&*< D6a84ܦJʷW):ܾ3π>:Jm%'0z\|G/AHʡ]d=G "~t; f5u a=scNiI6eUK(CU#;.`>笸p3A~V!qԂ h9l3ÿ-Q;Liʸ/nj_L(>MCe30#GHW*s>(wK LRZU0镫1ք} xE2Idİ5'L1K@_u_ °S$кr_dԥ2#y o>sOz~f r.)Em!z}+J3g}-/~mZ3 XLǝBg''|v |h-QY47( #pjC(j1АcQ]C<0MDC(;|_Gw@ OL@sr-Iu";wG2~s U[ 3|t{cs 25 `4jяBߥ b\6yћ~['4MMk3h@2D` 5B =z4θ6RxtpUx ne鄈V XリL bL]S.[vȳE,/zlKtvbݴ(_e N\u]8W'W$saK> Znj/΀b;SP/X6gxC=#p ߐ ."@C AJ u)רvf{`6ǓTڕV0\ez^n2qbӼxd3\?wJd 1~Q/Q80L|(?H+?MI"5 GCzCH.I-҅w7Iv/b롟Dҵ $ir`>KIw RGyt˚UFSӚ\N#SF$PJsAƪ02Fy7OnsUVNbpv.jwYHCI9Hkȥ3#uK H|X2V!f[%#k2nMpO#esӍG&2D >0Q OZ&WgNX0vx`b EK 'o;s9g1F^UԬc͛ŵo[we;UTV+!R{sw_d⯼j@6~{栔)u0K,SP-Z3md6rn>b{UJy%XܛCM_Cnڔ1beX1:orDgZ.s035X=F} EO0bKjz^gN*P1 eaXB-pE~SCS#%^/TB~d6K/Dǥ7 aes#6 ܇43$h%tTΩb7!Q8LXu5 7I'vcZb^)/&tmQh2Yc[=-G["-^Ft/9{RSƫz5 ;v٩2>E;`L ,ZW lc`>$=Y_C@ˋ"ijEdc,Q\g(P>RWR1b^MY>ou{R@QY@k_ٷЂsu+־ 7G^mٰY azo&[i"c;՚[>24kС9YFE&U0Du]QrJPhWz[W+s商y]{ 77qʪLKNq'A(Iy~Qf8M0 k6Bԝ/5;VȤ{(C$ϫqR"H+wr U9Rc+I@en̹^=_SP9E֗\h,ۇɚnX3V=yXk!_EG0WL'?T|?QhzɋƌfJFZPuj.p;+i=n3 _a -Q&ۀO.dKN)-hO_⩢ 1v'sv>Ӊ_ endstream endobj 82 0 obj << /Type /FontDescriptor /FontName /OHYKTY+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/X/a/b/bracketleft/bracketright/c/colon/comma/d/dieresis/e/eight/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/o/one/p/parenleft/parenright/period/q/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 81 0 R >> endobj 83 0 obj << /Length1 1647 /Length2 10368 /Length3 0 /Length 11222 /Filter /FlateDecode >> stream xڭweT\ݒ6.wwCt7n݂<@ n!hCwYq:]OUvu4$!@9؍SrtwՂ8ATشnNhe,܀}5@hp !PoQWK?[@^<]A`ˇu^(׎@ 9jFy5]< ty)BdPY@& `[% BV7b@.N Wחo`bv{97rtWBPLj^j۟خyi rS_ f܀^nbY WK2 4]A`f pZX;]]_h^?-PG!@n@GvT.Vn/mA`T?8[Cy]: ?=5 ڠrA^Bw*D7Ho"M]}Wj9wGG5 {^2k*?gW 'g Bl;f hrX8_v]58qr crQo^ti]%#EaY+t@FWX /`|/Q/"U-\@^윜\?LFlGn`/EKXu @/ J$>=+í=]\p ŵ: B:#ׄ*ƄAw82th [X9L12c}TV9G4LZy\i< hVj۰`p>:O޻byнEʒB'bA* C7ѝ&Ldl->3Z;oWsNZA).HU VkN%vڹ4wr<^gyv"r ZYhWR {$xI9n#;(+kk {I{ ETtFyCp|?S_Hi}նUXYTf?{Pc'?ׁ;gڧXn㺑kyJ;ї WGɹoS5/ǝ|-ZG'V_f=n,%$12RJfͬ8.J{ B+I{Xb 6< VuZ[b*]r[CZI}a幝CM\!( @ߴU&rt\E7lNq̘ӀL_.d ,Y^!'ɫ)ƇR18s1ItnB:Y f%ϧy q)Y*ꪤ;(ITi; cBpTRNAjMl.-Bϻ}[RMB)I]oK~O>ӛ|!t vuߴh5ܘwU󌰰\l ktIdV(ϡVv, Ĉ<ܹi,#yWwpsW粛/shtc${c K;h▏ϋ'LȭOp"[>@9;cE{FXԹf|~ʶ4KY&=O"IE;@woiљU >a뽵z;``fl?HOGV[M|Ɣa*9B5_Qn tݯ(g"i]6S xj>~Pq]|ٽϹh:6^QQ-)+&&?za`̶2R7Ş~ ï H(rEŞ=H#pU;Quh]*3i0g,\ s9|-vW;e|0I4hg_ތ夔hxy!j0z9&"iDGh.Qo`®m2.wtc=G,ҢAl}v׈RXJ/awz'7'Z?mW |?xP{1f'?y!CK@ 6(dʀ$yZ&^`Io:l̼K:c.%&dЮ% Jb#0zbo1wH:THH8<[>"Ν0x1/ϩuV06,|C)iYe%i]>϶dp^\l2 xz.c"H*{q <<(#{J;JzAHa?7g~ۢ>}VAVa ll4<n}!d*WsWz{R D>y%HZ6胡h&9"|#¨6y=Z6^ϛy{IݐWqв΍!2D5’rʹ{ΐRrO1"C&^h;DnD]: <,RoOj /-bo\;nn9o~SK.ϣU0UYivQ+ї&PY4NuOMM/gDS/rXX3{;m 8N KKj]K>͊+O)j=GSǨe j;~)CLͰ{hrCȚl+Yhd4kEШ1Fʌl6\{ݒ=iiqaQ]lBl"I@.ϓ$ M〦Cߡ>WA`r錍d|HlY ~\IYvJ7i~)ՁFZf6(v\22YEb*P+zxú JB2~uDY3syN^NxD2ge->CKh!VU>rk;CPYcq:׈"j M9vO FVE<'կ8M$Gpa]|+xC3Ax0.o&j}ɇyUXMc}:ɫm>nXuC)݂ݫ6m;yW鬊^ab)ptt NLY.JF{rbk:+e``WMџ{Jbyg|"Omh7äx:[pIi4}R1S2:7M[{ h֞~'5 H;Ɍ|$͚P c3oS<vg/~= ҕ[#@`֞ߴxo^mյQHo&Scb=ħv y<2D<4( .`I-P#ZS 0Չz';hN It{`_Nr]:.MI\I(gcA˩=E4*h}` ]E@t?|}47S1ȖߠU +а@mqm4(Qd `,TaA&M5H pL~-&|~zs+}]<#~lv`YYrw6NcQ:Uu1Ӓ;y{CF6!Vd||B,(?kSWvqpvASDy kNEwAlt 2pԩL?زJ<(AT2[WsE 9ο>}ہY98 lc#hd) ٶ"Y'\R |ǤeJ/CJơ9}G99\tN͉)V냎;MwaC4 raA:SlT?[3#B= v"3I@c!~Rݑh+_CW鰫 tߵ_%uo,2;c;`:>X6>#g9הh$*{% ^5B9臐wL:0k8uSWj}X^( W.tX/EMdg0@Ľ2VU$6 x`nP<92絍XڎZXzfK8 G5o:W,ʀ݌̟Z~72LhGsSPGr|k|e+&/L aKޝVjLX†%s2vԋ|+E|e ³_'Z_Cܺ+pzVlx;sYXM(KG>l i(y(CO"-uտdǨT]glT4K5F@fŅ6+\]a'=t /Ŗ57Y`ZmL X/m<~<ꍇ[_pG*6R,u\V NE>uwF+xU(I\;hE2LG<+m~l~m,Aarhl{0Z$& #p$R+Ukmab]˺*c)(b"%_Mc۾fĂ]bqnkD*UXe<+gwPM0s-w TWK[iTw]Z)L)VV6q]qqZbdP0\ߐYQĎ,Zu+}ez&r&w%,||–1~~Z+;6r-]GBaJFs8¶kmAn6 ^,{64w\9-yy Fte=?<&h#B)Vw(.i 9Ch:C.vy[׭$<yd.R_[ϸLf#"sqbF#wȼ93!C͘M'Rs^%ĕe$}9uB+AG<qQGZRW:Uդdɻ{lKk2FZHM!mA[nyh{{Q;=Yp7鈥tEZvUh٣%u^.cnѭ}JNJ)Ya9Q{x!xk*6 G]6|89Y8Y꜇x)߽W0*iV#6=H!ak!v2rYx/eK#, TT'ە}~q vgm )~PXIxyX6?vhćg9G  (y`:[ϟ VO#Bz(&]&e4>zmF_+3s?Gqf!!F&>K $aՆ-6=??Q:|'H8J Ps"K%yQVNL ;F_NyCi9ғV#A)=:yǚܰmx 7| Aco*Lih?ѽgRo\8aZ!+Ÿ>ǍYCΛ5cXw]=g\H23tNGY4Q`jƈYy{%:$'C[GѣS bPm3'Fcj %}o\ pEY.|'?AG.q-AVED`t`ӭ(֦^kO9 SڐڊЀ`91Ā"/KI4bhzm)i3|]&9,klV4hWJ";fDx6[uftM]8QLGfͅb>?:%6Ҙaw[2S.=f/>t&"AZfWq=<=P{ZTIİQ`QLYx*'g)XmkPM9E'{DQnQS 7!.LX>vp2Tۦ[p+0fҙ0eg1G$cdmxDz.䯝bcݾ({.xcQMA0s,IFJ ,!z7.VAuDNkS%%VCvmyUn`D/Yčƽ%+իw/ 7m>x0YDE8lw ӣ'n ~U^4s*9-x۸똾r-pE?5*C0tk6C${ ;ar2CwpB[9+ܐ|wKJ,ɽH{5v8h '"Vb'BV-_P܄I=~f #85 YIk8g6C50 π%bҚѤˏ-9B?@XfnfPYg{?UƠТeN![91냴hzm&~!ɩe{w4$hŞjw%CDyxauL*wm|U$5 .es) *^T$a)Bzr(-ڬ1-ohyE݃7CXXzmE;m! p|V-;m[B汈nf3{#(/>AYx['GM' ɖ,#fRz*=? p3Ap0.MJxsk!r~fE6XYXqڈoQnn}4Y4 fR+~qQpwר!߮*2zW= eb_.tDɄ9K3ԨDA B%bS ~Ŀv9kF-F5]3)H..u8'2>%T/aI},'-9􍂜"ggw:~%6'8 ES6+# 8׏_X2I<3 JCq5^)}(-a3XR›%鎧 K o=Rxw!Z|nlL]습;V̉,IG 2Lr TLЋ[N1N Rc}>gZݩQcc3yB4 'K_ʱ=.-']K z.mX ɳ?Gv[U%1,#fTؚ|1ao &1 %/ϴ-9s;s$82mH{sA;횚O,qocpgL*C,)=\\S{Pc"T b୍HEC\w?deQ~ī8Ŕԫ_k9UNia_!3C#*w6j#uS!xաux]im]zXw畔A5">{KR%_dC 4 .XA]ȖFpN`8D *#SXJQ$ "'=8wt.ewㆇm2{-yϭwu+_iJ309e^ }#yiBjp Ԅ  W 5'zDdu__Lo]no:=SXbT$5t;t/|1M@5*>XjSHAf'45:;*@ GgHh!U~§ҨaMmL uSW*|zguKxpjW6BW(#~B^u z59w]t3yR95[dy0QLd|2)A\BB/嗻a}mr̀g&7}>s<\s(|ZQE>f9]4*x*S\ 5nF\3;2GM.Pw%s¾-R"<]9ZO(f|n{\xd6/3 W ď:ә9q[`f3=LhD1O)Ӳ]ΉyfXry ¬7;Q)b,o >@SV=Ζu Y?[;B֡* DmyQJHr/GR',Ԇ"4aFvX}޷#a0BUxGݖ{ui+QGrUK[ǰfԃ4F!_EN_2>1Ίu4MnzCF<ׁ|R59nT##_RҾN(Yz+S)I'${.|n# endstream endobj 84 0 obj << /Type /FontDescriptor /FontName /CUJZDI+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 669 /CapHeight 669 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/A/C/G/J/K/M/S/T/a/c/d/e/f/fi/g/h/i/k/l/m/n/o/p/r/s/t/u/v/x/y/z) /FontFile 83 0 R >> endobj 39 0 obj << /Type /Encoding /Differences [2/fi 35/numbersign/dollar 39/quoteright/parenleft/parenright 44/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon 64/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P 82/R/S/T/U/V/W/X 91/bracketleft 93/bracketright 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 168/dieresis] >> endobj 26 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BIAVYX+CMMI10 /FontDescriptor 56 0 R /FirstChar 76 /LastChar 115 /Widths 42 0 R >> endobj 20 0 obj << /Type /Font /Subtype /Type1 /BaseFont /AZLVAD+CMMI12 /FontDescriptor 58 0 R /FirstChar 11 /LastChar 117 /Widths 45 0 R >> endobj 30 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UWBQUA+CMMI7 /FontDescriptor 60 0 R /FirstChar 101 /LastChar 120 /Widths 41 0 R >> endobj 21 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FRDSFX+CMMI8 /FontDescriptor 62 0 R /FirstChar 99 /LastChar 117 /Widths 44 0 R >> endobj 16 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KNLXOJ+CMR12 /FontDescriptor 64 0 R /FirstChar 48 /LastChar 111 /Widths 46 0 R >> endobj 22 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OHMPEU+CMR8 /FontDescriptor 66 0 R /FirstChar 50 /LastChar 50 /Widths 43 0 R >> endobj 12 0 obj << /Type /Font /Subtype /Type1 /BaseFont /IBXDJG+CMSY10 /FontDescriptor 68 0 R /FirstChar 15 /LastChar 107 /Widths 50 0 R >> endobj 13 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GZWAYN+NimbusMonL-Bold /FontDescriptor 70 0 R /FirstChar 97 /LastChar 121 /Widths 49 0 R /Encoding 39 0 R >> endobj 34 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EIHPMJ+NimbusMonL-BoldObli /FontDescriptor 72 0 R /FirstChar 97 /LastChar 116 /Widths 40 0 R /Encoding 39 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /AFPYEE+NimbusMonL-Regu /FontDescriptor 74 0 R /FirstChar 35 /LastChar 122 /Widths 52 0 R /Encoding 39 0 R >> endobj 14 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VPSXIH+NimbusMonL-ReguObli /FontDescriptor 76 0 R /FirstChar 46 /LastChar 122 /Widths 48 0 R /Encoding 39 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZYMAXW+NimbusRomNo9L-Medi /FontDescriptor 78 0 R /FirstChar 2 /LastChar 121 /Widths 51 0 R /Encoding 39 0 R >> endobj 15 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PAZCGA+NimbusRomNo9L-MediItal /FontDescriptor 80 0 R /FirstChar 97 /LastChar 120 /Widths 47 0 R /Encoding 39 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OHYKTY+NimbusRomNo9L-Regu /FontDescriptor 82 0 R /FirstChar 2 /LastChar 168 /Widths 53 0 R /Encoding 39 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CUJZDI+NimbusRomNo9L-ReguItal /FontDescriptor 84 0 R /FirstChar 2 /LastChar 122 /Widths 54 0 R /Encoding 39 0 R >> endobj 7 0 obj << /Type /Pages /Count 6 /Parent 85 0 R /Kids [2 0 R 9 0 R 18 0 R 24 0 R 28 0 R 32 0 R] >> endobj 38 0 obj << /Type /Pages /Count 1 /Parent 85 0 R /Kids [36 0 R] >> endobj 85 0 obj << /Type /Pages /Count 7 /Kids [7 0 R 38 0 R] >> endobj 86 0 obj << /Type /Catalog /Pages 85 0 R >> endobj 87 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20120824175103+02'00') /ModDate (D:20120824175103+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 88 0000000000 65535 f 0000000578 00000 n 0000000467 00000 n 0000000015 00000 n 0000167849 00000 n 0000167681 00000 n 0000167001 00000 n 0000168021 00000 n 0000002407 00000 n 0000002295 00000 n 0000000668 00000 n 0000167338 00000 n 0000166522 00000 n 0000166663 00000 n 0000167167 00000 n 0000167507 00000 n 0000166244 00000 n 0000005408 00000 n 0000005294 00000 n 0000002569 00000 n 0000165822 00000 n 0000166104 00000 n 0000166384 00000 n 0000008246 00000 n 0000008132 00000 n 0000005571 00000 n 0000165681 00000 n 0000010619 00000 n 0000010505 00000 n 0000008445 00000 n 0000165963 00000 n 0000012737 00000 n 0000012623 00000 n 0000010818 00000 n 0000166830 00000 n 0000013906 00000 n 0000013791 00000 n 0000012900 00000 n 0000168127 00000 n 0000165328 00000 n 0000014009 00000 n 0000014107 00000 n 0000014244 00000 n 0000014494 00000 n 0000014518 00000 n 0000014650 00000 n 0000015286 00000 n 0000015639 00000 n 0000015753 00000 n 0000016079 00000 n 0000016197 00000 n 0000016737 00000 n 0000017209 00000 n 0000017579 00000 n 0000018216 00000 n 0000018690 00000 n 0000026873 00000 n 0000027103 00000 n 0000036379 00000 n 0000036615 00000 n 0000043898 00000 n 0000044118 00000 n 0000052117 00000 n 0000052344 00000 n 0000060562 00000 n 0000060803 00000 n 0000067816 00000 n 0000068034 00000 n 0000075909 00000 n 0000076191 00000 n 0000085604 00000 n 0000085871 00000 n 0000091231 00000 n 0000091474 00000 n 0000106013 00000 n 0000106417 00000 n 0000116171 00000 n 0000116488 00000 n 0000129115 00000 n 0000129470 00000 n 0000135784 00000 n 0000136037 00000 n 0000153219 00000 n 0000153688 00000 n 0000165030 00000 n 0000168201 00000 n 0000168266 00000 n 0000168317 00000 n trailer << /Size 88 /Root 86 0 R /Info 87 0 R /ID [ ] >> startxref 168583 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/readjoiner.pdf000066400000000000000000003432121211610345200261200ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 503 /Filter /FlateDecode >> stream x}S˒0WhWA3zٜ Ǎ͞XJ8XM#G&Eq/V7?H4f]FĀf*[m7k?١Kbz3e%2 *qRdygdD)Kky |aYnom! 3Fֺ15B 5Iк&Bx=Y[t)d.͒+*fU퇂iH읳9)B RV& 5q;ڝqk!X> Cʊy@k9'oͰ٧fC?g}|i]ߥ>ܙA &=s^O$6%VQ\;@c 'ӭ ',ʛhg1!96P $R8> endobj 1 0 obj << /Font << /F27 4 0 R /F28 5 0 R /F32 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 10 0 obj << /Length 2574 /Filter /FlateDecode >> stream xڭYݓ۶_qBr̤iܹLxLghSݦ}ufRn^֒ɦqjGSn"O,͚K&e~y L'n~gx6Z< 1ٕG5peaP=}ԙ8]XpVT|Z<w~CeҐd‘5-X)Tݪ1[+ٴ:mЄ냕_yyPoZuh9g/SGF&pq)y FtGݪ0/׷Y#c~ 9* M#*=Au6d'M"$L 5]\f5+1vU4"~mFoe`mۉ9*tXA>.Z(sVpu!zZ=҃;bYA~X{2Â`7͒\p@UǨ!;wE{x$Q&b0+O. 2YAh^.SeCQ.hit_c&#A=y5smsw4|;D?;6[py a{P}o/]~?䟾lsoY4uٌq.Ycr']2ImW*D7x 5Q"DN[-KZ0hh.c1n_^*5CrDoxl޿Ւ%p)B_k  @SM/ Ga 4vޤ=p@L} 8u+`GpRZ_Tg xNj)dL0ÿGZ") TS/! }T2N{=!NYdD,s@l0 }<m%?U&30g%$".S^wY]³BEXTUeL@ 7 r >~SGc;YpZ+"UȊ r4q5hhٟm7D>C>Ȃ(˖tY TJˢm %rqDI@:5)U\P%HpAoİ-9[&2 +>Q֙B/[Zj+ѢXne+ٟ{YAr?͍G!Iiz,Z[I t-Sacjݰysf.$pbAbO=8:kTop9%40P211L*)FqnmCc)H`wb@g-k4I)خ;wBku D8@+fx:v YD"19Yg`0*=apl=Bh0vjcs,X.Lmx>5{p`t8I\1^I=mo6dy Myd'%~*8N\ȰYu~]^z\LY!.o״!s2$SHB|uljأކ 8}kěeG'J1$ȼsdiXA hJѽ ka%oIUG! Z`]+Ad0@T<1i퀱1|f[L%]^%>a[Sb\1+&%a!XA9uuқ|VuyfMc|'U,c+_I1*WB'WoE60Y: h"=?GN'I9T \hjNԊĘZlJAt]ynpgb,R̄cTޮ؍i(fzc]$?>QXT{־̬Ijj,UCcWGY!H!QaA_ =- .>eI&:]oi*"cţIxfpS =uK"T9 YU> endobj 8 0 obj << /Font << /F47 11 0 R /F27 4 0 R /F28 5 0 R /F32 6 0 R /F41 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 15 0 obj << /Length 2042 /Filter /FlateDecode >> stream xڥX[ܶ~]HuWHQINzb UL` $W=zM'' K+@!^jK"p K}#hpQ7:bN{"oU٪0Zw| Ӹ?ʑD_AAa_Dشșodg<){ B̵1(*l 0ӵS =(4`鄖C{~͆3U]F|;4>tY#Q;&0Is@2zHAgiQg/u`) ƀֳ;{ tADby6 cyicU 1y0Wz^;S>}]krMd00VdG` (䡥1fNQܣ!ܧ*8w2qqBqEo\ M8Vϯd+fq!$Xu28@:w+J)\7W=ά tkqK;E.f84`% G؂t^Z9Խdeﰤ yuPT+!@0gR'-U$F^-bgD\DgT|_ǝ(U/: q͖"o+%1|BzbjȚp},PKE\p [HwxB0nChS !bIhɸ(23 Qu$-SfEeJӗC/ʃ ^a50Zrv6|D@잴BFcyuc^x&mC| 3g.r,wǘzzɨ8hI\S;Pp7A8^f;!"> endobj 13 0 obj << /Font << /F47 11 0 R /F28 5 0 R /F32 6 0 R /F41 12 0 R /F27 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 18 0 obj << /Length 2236 /Filter /FlateDecode >> stream xڭXK6ϯQă uUR 1CÇ_n4rkD@7~>ܽ{/ ,cy8m`:$JD|qKql"iwd,B,Dihx,DXok~ +M$("ͱ)}1gڨÑ 揻wK%sN4S$;otkZX,AT,9],i(Fk82d)"9 N㷍!&5cYh'EHQ-ىhw[0Jbd*sџi4ؚG=WL)Dt*(A9 yk!]oܴ9sKaiP\7inJś`O'IF{2\~O$!;#0b)4st%S:{ kt)AE@1p>LCZɟQ$JL{ C ځ) =x$;,"b_<:O^&5y1d^ʡ4V pxM]{pLk9x[2A]$QV]gX4fU񅧩WW) k)Eyh<{ PD4g-x>6Y`z- 4;zC~8t`vH[N u~SBX@!W{0Wd2)u(@%#AyOJ+քxSnƆLXx"J;"PRx%%=^r{Pϖc&}km*0V*KK|k/$9%pnATdE| bުѺ ]IxL"EYҺ9t4Ѓ鬳㟚vX4c`"] zH?HX#ץjz"u{,p,W1:4GS!ǖ`X6n@H˪!(5%|8Y6lu(Abhꛦ_bMݛ+PRGg~t2NBZ70_]Z/ `O\Ld|.gdk_Ҧ_ G)s~;ǯdDۄ]DD ]$W.R'M" ԇD"u?1E\5Ŝʡr `i!W #^6=)E H󄙟)Sk"d@:Lڀ+9;cXCɯj-ME}%1a_ΐ(r/'`I{FPFȁѩm*"bb[P= ƵV᫩.`vR'LI )?e0h[Fy@_C!c|)ˮ j2 r ǎ?П>Ny&e3W!Ri:x: uqiH7 ,D=vJb{.=̀AYX%z| jV-$]\`\Ozz{a X7\OEMx9lb!G zϨ|j'A}y/8^R>cj4sGw҃) E0 EP"XZwl < N(q'دF&*_oģ9/ž'|2:K S@:;47]`5wxR@â9-4%. s.y.b 5\ hZ<"'3ęF=.J t#(]r R6`}*Gl;SjzJH@VScXNu~qy 늃?XbWp2Z Ϭ+W"꫄>wW-ȎkC2-S&SH8 * ~8^A %eg$7>5'+N5@%IŋeUWk> endobj 16 0 obj << /Font << /F28 5 0 R /F32 6 0 R /F27 4 0 R /F47 11 0 R /F38 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 22 0 obj << /Length 2391 /Filter /FlateDecode >> stream xڍXI6 r,y:23ɻ%FeNۖ_!EK_KLII}ӛ/I?cyzOF<]ըEFB6yVAF$E pFb^Tӿ. ## 9$ [9yEc2/Ϫnث'e(PCI{XRcOK_tE hPK Dg7z2ntI;cA6r5td00O 0ńhPDN:,tpwaָa ٸ^ +Wx/,OD-F]xyKЏ#LذZ4xtpS?9h`grP^aI՝gT{Ft%\x/e#wKq務i鳽n"dZlg! sX뻕/8,MB kÓqfHtKD2?UZdf~?Ҭv3~̮ݘs{)ŠTW$^g{EJM08I~TC3`$4mX u?aD ^T=򢻒:)7IƇ>@ǣKZ0WO,#<'yn48Tv$1'FuFR_8b_N%]NDG ӡQ=]{^(q{:g)4D$= H ch6 zFO~M%ʂ >~ 5Zܮ(CGʇCD6973.xcKGd\V};P j2pB"ɦleVKmpd:@JH=:kΞk3Z7D^4 60Tdc\cHc?5hrQXh\ktw*炔Hr?KS?.$)+unց`^s,<]ޭNdS3Q#] Pm Dz]P٭h-(܏Go@̄DdnrjjRI\pELA@  sy\X4OfnJZ 7#U8 TE)sX2>+b]EtP XA9! M]z?p-ۂϕu\ۅO^.aT+9 k]n]>\8& y0BL@1.wp7a, vLҨC`*AEYl>ckXxAPbWim ģ_p% jf1k\>.χWl.6yrV?GYuXj@W[y Bc^? %>q;[BuuZr&/%n-YB*ZXa95N.%(Tl RS]ثBqA|8j?[sL>04 bsI&U'`{)R[?5d_4X;70z8ryݲyIPw7QQ>Y{9oPllx:j_c<Ɲ/js3di0K6j9}n"8;R }Z_] iVLZXc!z;7 y ƹ!%,Pks5o/B.EYpTnfH\@}p 4L¬Im8*5g^WGs$G0~g8d}ˉ-_@dOp\&p9ZH{gLU}Is1>1F:wo\}\JoD ",lf9 !h.qםi9:?^%-uك# o2Vi[׆p8y͚2 @L_EOkf:<ӵ|  ;[@K/=R{^۬/(BaG\59UוJkнDW`G1DyUQYd/~j7:/WliAe@ITͣ%A? m02HwLɩ#wY+v- 2?ɁA(SL endstream endobj 21 0 obj << /Type /Page /Contents 22 0 R /Resources 20 0 R /MediaBox [0 0 595.276 841.89] /Parent 7 0 R >> endobj 20 0 obj << /Font << /F28 5 0 R /F38 19 0 R /F32 6 0 R /F47 11 0 R /F27 4 0 R /F56 23 0 R >> /ProcSet [ /PDF /Text ] >> endobj 26 0 obj << /Length 2291 /Filter /FlateDecode >> stream xڕX[6~_G. l3(v9@>(&)/LQI)}QZi.4SY$QEλ SG|Lm{o<3cj`imʋXqAwyםyrVq" }D窮>} w$؜oH6+⠯z[W/b- @,upGa0w#RFVM߹Ѵ1f0' 25 syL[3dH嗆9)i4X> C,%dڳ M'Wu_|jӃA^R%POM~fF&VgK!830j8^ |L2#T!~ cL:]2He̕[qV%$f)AAyyK ɔcgC#ZR29RW38d%GCeJ g{kF{)i+=}bpa~w,O>A8!uu-g9D2D`VJ?G䎬X)O,2ό' Z?ee%(x&9[9 GDytY[yͦ8a#cvW=ÝUW:UZUr΁M90Ql%@q CF8 e  C;x.RQZ] *,;>,_0 {a5+L|kjC1_eCD }upV:.v j0He+mxcc۞3e*w)cp$ ڮ=8^U!Tk&BC, xJJ${@,0Ҏ1*l!+nB-Pn 8qaǁ@/H} il$P`!0aFT:PKN]6 (͇}m0$Wցͳll.CZh) w=[E*/f`¶䚥#fQ1EYE܆g1޻бNr2s47r<I]!6#Ftê0Ü3h2uH͐ }מ3t#'wV(S{[G a=dpI#K@?N4ix`Cl)Epћ _Gtq8Ar{ᅰ o@N*ldHo5Q4l'ņ-jFQV/a*ER[n#7T*SتB5bsiiE#n)K6FbA8EJ\xLCs7qx_Suyy\yxUbN3 ښy`ޫ^7!j#(iv7<`xPCq#L {ϰ|CJ M^/4jK^ MT$J C#V]o36;`O<_$*̷Sud*q2')1w̜4(Kv;{vF;*> endobj 24 0 obj << /Font << /F28 5 0 R /F41 12 0 R /F15 27 0 R /F32 6 0 R /F47 11 0 R /F27 4 0 R /F56 23 0 R >> /ProcSet [ /PDF /Text ] >> endobj 30 0 obj << /Length 2504 /Filter /FlateDecode >> stream xڭY[6~_G^$J $hwtwCM*tqDsx(pY`_,yx.Hy.V"cRnJ5ӅZeI"]V# d᦬=`,]*`X6STm):5 GrbEf=N5A(ń,:!fY2 8QmלmF`{P9; _މ{rPN@^SO{40QV5 @ę7a@gQk`l'1ANrXu{{jtT@=5!TLf}[`-|l}WG̭,X'׀5I 4wp 6Γocljwe;PDP 4JpݎΔcS˽8&ͣ0Lʙ(ĸ"XHhՔ'Pu??=mv!5|  %EĮc8Moad;1lT$ $$;Y&˔S[,._tJ>H YQ~ŏZG+J $*M3 8?*.Ac)Zz\9 '@*s@5q !7RRx"F(ZdAѢZghiXKA ՞Ɏ8]l;ׂ;"ėld%Z&wjy(ڸ74QYN/1n)[6fd곯Ne3XOCݼ҅&3#+.0Yʒ7,5>(9ncup؀jrRQz*a9|S>ڡj\^8Muj|!D= b<3DqHoNI{Q<4GbIC-hvmRvGۀ3zq=aޅäaZ$V1hݐe7 8><ZZs.94&JN"R=:xg=0 m7&B=aMi>_<:P J +ހ8!d$Q,R|B\^̟5`@n/ -TpYepz0g7̥:XPV#DB&0˯of5ޯRʊ/R<_V5FTQ}oA{ԁ^Bx`.!$0f`N@=-~߆N_SVX&&4*mhUY0M;l:,}BÂ$$}a8zB>^JLYίAxnqn pd!}<}V>7nY!/?㟈[~>kA;[JOMC@`n=[#wkSLo> endobj 28 0 obj << /Font << /F47 11 0 R /F28 5 0 R /F32 6 0 R /F27 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 34 0 obj << /Length 504 /Filter /FlateDecode >> stream xڅRr0+|fb!ɖlF( S[I l]yf`8=677L`F)lvL,)F%&y Ms;5LSa ^TrNnvD BK Eut-bdwKug[#Wb QH rm|JN> endobj 32 0 obj << /Font << /F28 5 0 R /F27 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 35 0 obj [489.6 489.6 489.6 489.6 489.6 489.6 489.6] endobj 37 0 obj [667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500 444] endobj 38 0 obj [410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5] endobj 39 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8] endobj 40 0 obj [556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500] endobj 41 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 42 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500] endobj 43 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 44 0 obj << /Length1 1466 /Length2 6677 /Length3 0 /Length 7663 /Filter /FlateDecode >> stream xڍuTk-(Ҕ1TzE7`BI Mz #A@:RDA"қtDG;]ޕwf3=oXVe8 (hh||<||,,P#o?>S B>E ԀO\@PX("GAnPk A(=P[;l`vPLLw:@ A0eqB9`(lv(8/; GJsܡ(;. AA(4AN?xYvP_= G(CS\a}:@OU V s9 ?d*Np'g @!-eu Ypt> uY[t 4?`ABqU}J0kBOg0;o Eՙuq*]l!(0xx r9x9Ý6h A(+mk(BaTG!6#S>_<f 9z=bާ&&Fꪜ('(/xq B| 0@:j* 4 ;Ghтѿނ)7w;hAˡG쿡6Zb uu* ^9-Z@A>P2b E@AH:b;_.H ED/^í$0@<ђ@[B/ zy!5Q5h ) u)&Z h~@[-!tۿ_?3 Kq^È{ի4f5A/;kVLyP¾CSGԱjמ߹*o>z1ys-$QFa}V]"%Q[~F?\@;H4g0H/ke]橰1;Kw;G޲e1yU~ӋOpB&ޑr5S%=rz C c3̝ojzh6W[uA{?^HSm d]"ŇE"Œp(y-er"o{n|Y0lX!YZ7*շ}g(tGh \MzYsN ˣ9(S)0A% t֛\yW72_5z3XzW,[=H%Z*:?lP+fckY Ę!YlN+Ԁ)TjM-VSBO*m8"Y`~}-\t)Pպ]eW-nY KU'^ZnÓ]$E@iܑ,#~> 澲RԶ(F-0#irz~GyF >-x|Jb|4zMN@B q+@OyRlWz $BICm-mYE^URԑLwIrw>a\@E 6j =řM~<]HW}3k_5A~9Pe_E ֽw *`)sJ (o,=䰊ŲEP<^]= 6|d1u[4'3qTl13IB|V'iخJY&ZWf)dg%-a. O1*7yuB*un(6Q.[.E5)@y8L\bjNCx*+Tq[J3Ti+9Uro!fEʪ_զ B##XJ b`fY9[bEoH+9obK#1lv,rs͖pJ1̥w;w|.ʑԙNsl+2UdQ X0 8}TQ+*RZ'ƏJDvt[[g JSK r =CYqW &q<t:u) u{1}l)J"Hh Z/'eVv{r\@hg8ҎJʍzݹɜOzJK%Ic wO׫\jحG}o֨]`%y'4Wf7=*֏JRUF@n+,DžQp1뤣'۷,kFS޲aU)SRiߎofI NkG=Ce {ߌmk bSqcvn n .ے[ƵBE2O q",f_Py{ jd/YFi~^sAd\EL>E17GELֶsך=s,_Ya*S۴KG|wPV(4'Z\PS٢Gx3r *Be;aPHoS9CK_צC[\DeΩ"ՕZE汴p)_&]\dPcs 4Y|V9SnLM#&FրX̸ M 5̐%R=k!I~T{L5߷y UHj[$-ym'mu3&8M`Fl_.LK+?7?.U]!b^j\̬60D+~9SVE>ܽ1xs?C fxNCs1c0caKLꉆDZG}oY g^QG i$gTNÌ zo^SƉw- iVVLh.Dq ٣48X}iYPe[qtMU3R'p#c?m$LzgQED7ζ=Rnm/=#uȍG_Ǐ2e gLAL 6m1KߧJޞ/7 7Ll,Б$kgD)>䖌MgY\a2 'ivnyFF،R8 +@0H]ќzΔ٥Ɓ9.{G}88 |_#꘾}:zK*;ch1Lچ yuRN`RJ,ɐJ!4yʏ}7mmٗΓq|h:]PTe}0I啷$v"poƞUmҠY#3NG0>FYInJvZGk~kvygl FȐ01&2%|qF]к9g?!Cf+[*(*[ӓͫGNY(:6H=-m>_sznѽ.tj̽\u*nS~a4"I|}1խKdU/BA6(6]oϚ3grr1tKhx1|xruC˧ż'L{fѫދ +J Wa)J9\YĬƵ[p sF@m4JB<"pXŖD×"e~׷ 1{[*4#rUmn, L$?0d ':Xpvw"o=e} Cx|+S!tL$>0wZ#xh@S3oooGjQ|Y`D&+u,2`-j |n2 juE"< 8˝fhQ_y~N]3?#:smeEhY5&GG5?92Dž2W0j)U12+iϻx#Nl~#̊u1T;0/;/EB=Oe.rnΡVgϣH% ,QִW-4HߎыHc`bE=8*̘'dKʈ-ٰG?كzT6%gGst)ñb9ׅPRfoDzu,TO_Zs@8GUTMZ* J!E24MK5צPѺXf3*.L{Sw39h!TTq ¶{~܆fA2_l [©q ږI1仢];Ib`\շ[% `ysq<*.Rs-&!C){OvÅ-7Yc5a0љS&bug9Qfc> endobj 46 0 obj << /Length1 1420 /Length2 6365 /Length3 0 /Length 7334 /Filter /FlateDecode >> stream xڍt8TԦ=j5cZ* DFfڊ֞ԦvUjԬUbZT)j#k}#,`i-EX)Yi@ $+奁@9jaa8S 0pRa``,c qf($**9 P@F CfM-BcnXB_bq_/#f`;̋FQ8 bX,ZMFO-¸i_A? ^̤6p߸5ބ $Mhwˀ?wܟ쟅_`#H7+X\5Ⱇ`$g "}p؅`U+@=ozK{?),Ce$TCbOA/{H2 GB]el;>0c?!? Pʪ  qY Qh+, #Qz}a,eeP8 pNam1p&=Y7G($?+cok!?>]](%SW`S@iQ؟9 e@?ʿTBoJg@W}_n_ #%ld3^c,:H7? p,<Y?5)Y |}x'ބYrH s` O $KNQ(KXP( Ki$ KH\QUȸ R&7A * WkCX_ o`8zfQqX'1.(.89L _褿z~@l_{4Sk#et[U)Q|;[O: }|TR6kAwШHF T`y"f({YĆXt$"<&)Cj|?~(իL B!w"reTBAD>oؠc. rgKoG(F7N8n @_ϳ6;v~p˩ ۜx7hZa[qSSUTBeDxLe[^y/E +}l J y{E0kZ/*{P{T`H;9CQlg nQE7!.o=IwUIbC4az.a{+~a{Ns {8/%?s慄}Sr=TP]X6{ww7ڞ.KsXt^8$9@g;C,F8٩.Yȭvsʧ{8pca_ 5>I  - wrZV^u}] @b wP ((A1unfwn0rܧ `ؓ2a 4DlRy;5EOV$q׃1N3e;=Kj*OiUEOc>Na =wo%NNCϤj.S4a lby*5W+dҊ2AFϫC)&MlS K$eyǣc9#̭i"gI %Li9Y|as2獽7 7?Cy7г+4R(aVS4}JMa/ ?1F3@%IY5 9׎XOijRhIl4ԥ?4(TyֈJ'% nlkO} E J3؄;ף5_%9k.^zM9XQQSsm:_BFcZ7dR"m%= Oo;{J>~à-fPc" F)xb|4ޫbWZzH6eMhV\5Pk!}WL^y{;(JhI7C;'鍖\)vfw_#?;kۯJr>YDVk0#iٿRҧ$R #YƟ H-);Gj: ~4H%S ~"?/bhGQ( r DT-l.ŚL__,p z=%,X4}Fۘ#fp K8SǮ SȧF Nn@"%Q P瘢"cK()dIJf ,Q4&jVYŰe0RLq?Gv'>Begck1Kz1k~0;>ZE >Y,qZZe[5GE0<ڍ&褦dR?3{y𔕅K)oWD2=恫*IGf▐?H-5 `Bs[N-ș`lEK~ZᴞelS.; ۲^(>Jr9mL89}$S &e[um7ȻM[UWɚV0 7;mCspنDo3afJ` \uXWk#JEMF,8ϰ0uRWC:'a.o#/Ɛv.|@s0L0Ch  [oG+n)L˰=B3.0 <:Ba"}W$?L~Vo.srYM"GA D{V+]uDBGo1F!"3 W+HbxH.F̒;U|td<m^ OYHXyR$/Of 6 4eɹ퐔L*3. PB0[Υs҇\ZD^/ڕm"nWL m'ndYCMQ㳽nxH{>gr{lm8Quԇ]Y]aɜHC/9?"eEn Wz#f|!u`=:GĞ-Ўgb9]RoYL#{u^6mZ1?EGm®mLYkװ\F Z2MaMiq_5=f}mzx!pbR#?q'6}zU dGN,^_;C =\?nzM\a'և]kzW"jK^'1ʣQ¼E,aRUjZ=XyYgRZ*7֠[nI/qեxY*. nЏ+7|e9.Ҹ]HrN*GagD?S濿 v--ё28H1/2!#A_%[m13ѱN kc9^m3ԸbglR*Xr^=뤞R1L'eȆ=Gk+zLB \5lTpG\wZd{ìڇb[ٜ'k6964f9Uu艘B3m6dV*__ԱSY3Cc#ymoCЇ!2Y7O$j|ܛ-qמ[2z%2N1OZYWF7W=K2lP/AkfjݵfozCk n3ִP __0ck Eܰgg_/p]iu}O&$87\lNU1}c׾qz*jBT &,Vl`2NWۡhŦe̥&lݣbs+UTY kNV IذV 'µCǓC!{Mϴcn4ׯ?ٳgY/'l"jPНXC…7ܤ=mBe@R :p݇(ϐ +:\TZu62 @l a/I9QܶL+>MH_xjg˭z_kHiH r&><(r||/%IJV쮇euT+M&C{Diبɣզd)OD}D:/G 1Ƈ'L'BnY^2@t)jyՋn1F{dVCyZXg["*>=JݟjJ5npcӦ~xwT:[u8*pՑFi[YOJI.:8_Q{xdkEx#7@Ln:ih]KzJXqBwxi: :z$fCn΁䗏u$#.}%Dezs[͸y>u~wN ~k뚊cŮ-kJRFEH*.g[ M|-I90ŧ>HN(- z3(QA<WUø۪> K;K|þHv 8hLB Ȁ9(w)Tyʺ`QKr6G|ޓ}tnW<ѭZW%#LEo~ y(B::BrC[3.V\B"R  054l6OmDSnavk[VdūD)rxHU/xN7_ižެsX`fj Aj?Z^N-bաh1I]_<^`NlvJ`ߙR6Q }Ӗ^b͡4[!e*l\|⬴hVXTB]H ]'ߝJ̓:IS3^ѱS $5la"J5Qp7$=)`'M]IWo )u-po;L;3V}E8t.ӎ2yNj͉N.c$5D;sG-/4|H.Q[f϶O v 8_6 jh)douA J j*]N$V@1KXi€}bH[RKw?Equ^p{{T=gʵfŶyT3ͩېa)9jЦ\9ѪbхĔ;/,Bv L˪g?[WӰ IYtNK^׶6L ULĝg'2e<,Q y20q\ei;.훣>BSsbUt-Q Qy68%qZ^"\ 2{蓾D1NfxLjgWYnUY5:ݭo|$գp Y yDW'a/tr i;/?~V{LHVr#S; /l[茙HLPFqv&2-Y]n v^"Pø~mQ1ޥk:+wTiƿ?$ endstream endobj 47 0 obj << /Type /FontDescriptor /FontName /HDIZBO+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/five/six/zero) /FontFile 46 0 R >> endobj 48 0 obj << /Length1 1444 /Length2 6302 /Length3 0 /Length 7288 /Filter /FlateDecode >> stream xڍx8m۾{ gP{ojoj5"ĦW)iQRԨYFvQT/}Gk}םd34TvD8@4pPgb%bB@(!') rC!'`pB2d?yUR]S9,~`p̊]#?H1b&}`k͝f1})-|y_z(;%cdD'(t`?bXAZِ%RxZg{j^a?&[N\\|כ%vTS+,[Pj?=uJ(,.SʌdvR(%K?&^y59뫆6x8Հ/^:b_3.LLג"PšYu:}P++a5t~֛DWYb7? ;""j!TEƂrP2pRj賹x Zmɚ?jy>}gMyR[9^geϛT4l\XkSS{i)&V-+HI2JJ5OZ3B?P3M"_m]硰(Na}w;ɗ[*VK*?͂)+:%HytPhs5ft~_"SݞM_SCJAM~RXusxbuuH{ة;PVG{6RZl^t.Qy7) bXS4\ũp3OSc%ByxôHV$||S!Plᓰ;?eDWÝM[ F0VQ-VISŖꇺWkV"2Eh}'ڽ_!O/,YsӏrZ&O~peX5iluɱ]Dh8|-{6 #V=~!`vB;6|K1삍k6lܣ>@#t &ٴoǿ|c1O{lN~/%;UhrfO׾}3 }֨dtK0LS,+6͛/$Vm 7G4d}n+MUnHgMϯZP[+aޜK;nwX5c7HͅdR^f(Í& }nh]Ր3KY=> 7k2hf3RIުhOxMҨuQY]N"4 %C{O>{L q4)4(!#$Ifh?4IӔJS2bM?7H9Eʢ[ x#k$"4J.RR;} #WsY8[/YUڞx7WuV=[Z>\"Vg߸sy@vgҴ b&hPD!Dz o֤ U KGRV7ɫvl߆WjVhB;L؋d2.Lb ŏr$T?{?昮5N~ "֯ :pD}rXjY/ [\c>>̵=R ;r@Ҳ]$R b 7H'p ،g$3zJ-mշ="FGHӤꇔePYG,9k*sBK}ض3K$ nqll;Б~gvԑs`k3;Q,a^Ġ.Z" ouIF_%FTs5qyZtN x{|[eUZw^o8ꁠR>$~mR1PB꨸XoIKnMߢƬܖJPC={Q?({L4Jq0mz8Ë9Tg4;HK-HnԜjoMvM ]}&"euu;Y_KU ?q4n;=EaMt #t}g#^#d>%It\z"]؇'/݉`b[N]!ɯ*23#_& R,Óp&?TlZUv(SXV]=\]LVi>g^a}01IwEe CqZ^;%jw?"|ꗲ< &G%8N|2:7se/2;aON3PFWNuh?wxXy|tvÔi{:yONGݑe{;G_ԠWe2( -l_̢/2}7q70 :74BJ-gI ZGTx#Z-*N:&m( )k,X苰F#@8m-!ra"1 yYvGߋF4*կf^n+OQRa1?yq(^F*OVP8f=YƾdW*9[y+/FHY_/mc.IynDVͱIoZM'%)o|"jo@{{q]Q=*T:r{8ehtp]}nJ<ݳ7Nl7X:7}K(='t(sig,>Ud{:4!f0W:,v*妜y1(WX6&MY6V4٤x*s4Ugܟ} V"]z9(<[u2ΰWGq=Wş&y,WЏ}%c%Tf߉]n>mL?O`f vo׮c1K{Esj{!7: V< sR|[:޻U#Vα!DZZkIj>%!D;OSK{ѯ qPl0O88lRZ.j^Zd* {|d>I3ȉuXFh:~dѩ1.ksJ< Ci]'1_Vn/h*9 -/OWox";D\ 5Ⱥb(ftƞ&٪Mf)|{\b)֋ҦzzmM }\͵g˟u|L RhPmu?,2{UܐHTuU'DRX͓qJuddmuv×~Cc-{۾) 1-OVDҚV_iYғ>Ш6wdΠ<j2\Ԑߧw:wZ3kPѺW{~;&DДi-bEq_,r<2G?lSB/T :Fxݓ{Lx佲u" _orILq&)R,7kr$YMUٛ*b-) We LKbB_hvqNlןʏ[}*:.3D'_ŷꠊЎ˨Y_n>-˸BA B;CC 5/kdk0C><6 ߴ0^URy -0GRtVL"u#7#+(<ӟ>$ɗ%5to] IWqNS{?;gx"bgdP&OXCe>B{<Y9^/? 6~[YR8`{ ٮ:m\a׭/EgGc4P*K[B.k ahvX93נ_iVp | ;|"nn+r* d/o8O&,ԍs)NnEKQ/Lj%P;xEji萯G|R~]$Ҹ}${t/+|??ndb9 ė #|zbՁql:KbcCvǿ;{;":g4Q{SC;kq y@1HPLhYЖUԹR{N_0hqUݓl[:˘#5Znr?dXWOSx,9|x Ǯe\wr4JgOԑ=(YX'n 5 d]j:,ox|lsċh|bG,]s {Y7gӖ!"ÝӼy~SnSYʻxz#oY(tƬ+\n)m^\KGKy( Y cMj;T @бc V{ 3n@j6b? =ON4Hj3%3n$}CcKp<~er } px/Z7e>sv,ҳMR7lX`,l-'s0Ҹ|iu;ha:$U\7U}kO1F/NL`dz|oz,ՇB:6TEqkg4ks ry=Z%/`=p 9wi]FmO 3&n9vW[q]./ΎR&nHR[4;Pj/ke+^ۂPB)05 C)9͇@[\7;K8}o珻QIޝoo6`Sxe?L~0y7Hja}]o"O.I/< ͒u ScQwג=BV}=^O/-k"|U"vHEZѵyD{fm6&ͤ5tvE,Gp%,.v VEI8 si+11ldY{ ;j<8uc~%;GGI'7-yՐO<~r,g8Ƹ;#/C6υd0xX3%) ֺ^-׌ i#%,;M@5ݐg.ٲq߈JBk.dƜ ·,a5޹A:ORTw79,²f?,$?64J{w08J;)RhGt3V:>!Ւ@W~ ]FIr>$EBZ ]j/F܅uߊXosrd#6ws~J#,>Wbݒ#:LL3J ē/EfA k?n"ɤ8:Ft P>GvSFP#&?4TcISzM&9-LU2oU> endobj 50 0 obj << /Length1 1612 /Length2 13499 /Length3 0 /Length 14313 /Filter /FlateDecode >> stream xڭuctݲn+ѫt:m۶;ضtl۶m7߷9}sxgUͧf-o T|6F6֎TtԴ@i3+}')kI*y#'৑ DHZPшbd42`H6nf&@r%y JwOM3k 燳'hlfiUH+E,Nf@I3#k# =_9Pb9Ff׌\ lr[98|~&z֎=pYX:Enl7![{O'#3?x:9 141p}0^G=3k_􍀆fzn?l`fmO?F&zF0uu[zn߶;89:YS4pmbf CנYha7tO "kf(>IX[ ahm?Sw*SD7Ho"{_,-> alvgef?\@9}6SZj\ e LzۮdmhdoifmRO3edm?E:Կd?wTt$H/ ~~W; g`2&d Cϳ+PdZ ?OZ#dm`c׬(8Y~r8,?ҼyRjQAN:ż ߛlԵMnsǶo;1,:γ<(rH[X(|i OT/f%7 ԙiF ^[>D9>h^ՑH (rOHcz: vq)3"I80⏿9C>;lq!S5y:~Ps˒SoE<%XA?u^bj sq] MDPc# `żZʸc]'9¼G@۳wL(j~nݹ Z pNλ)绾_a;4b-/Ȉ)z[(cdâ k4Bߵ_އ 2&oUoC&A5M|#7͘>OjElO&GDptސn͎5|3S'18 `=8][_ĉ>.TL;9i|1R|< =^A+?>643dJqj,=$yӠ|*J@5*%7ũۯ)Cf%QN4J0/Ӳ(vAZyK3RֻWkWp㐭-9R6@RmדopTvNU'BEÐ VBBqEO0f[~B r]RO6ŗfVL7A;#^#R:] !^qa+ 5$k1QYU[9` ;΁nS.) ^JwG /(u} }Y1'1- тy7=<lb~:fgA}VD+0tK s\א'm}²7!R*Q@z3[[yxg7'M6*ȧlWT7갇,q+вItI_#=ܺw.zڨ"Lˢ2`wD)kMZDw6DpۣSȨtGDx3DBs;Zc'POT7/H傻oۺavT5>PǶc%\UqC˵y_I-D혉 eX@5E!-5EeFdO aw c&,=/Gf+ A& {DAIBAkN}$W{*qN<%`~hDrbMup/LH<'\!|fnVڏ 1ܧ'tx~6>oE#ҽD0RKKMHJJfT^ Uق=6 z14ٙ p , p hE[ɩLff>Ñ G @sBZ:mj~dcX9z]G<=Mй]laUugߤ\,o|b 6{OUNŢsi⎑Y32#Q1'KQ4/0#P6='H^u,±[|F,TFrfQOÇpF"gA;GJba/|w#'Y5TiєrG$Ẇen\ nu8}9Awk}-fxԖm2k*ސxW/mzzzRF5 P~d9co2 yx:#A?OQ*&(B~놏TueLnh?Ԑhr*K Mb[pX`:K0i<YF| ƅWm@,g9UшS7~l )@*L ,u#] *2~Y&^d"^,"3Q uZ/KɜΚJWZv0#z$R?JM!+480E=̓b( mʯD"dӪik(5p׾';N 7G?fL'08hxkUpe.k5&9b=;5WuE7{|^U\ EGNY.(Eok(tm_Edqaڛ|WAf 0J(\~}TdW{Qjҝէ" qI I= )poW =*yjwr ƱNz@-t#yM/|H:7џm~ c`[ofUBz0% ]&z8au+)]T޻?fx:vUkm 0@613 ''xW/E]t`ڟ b ,%`Y-_9HL<%o@TS؜:R\<~Qp(@ͻWIg%ekIm0[U􌘹Urhbmڕt=}Jk &_:Sd 9B;}˸&TU\bQ7 WJ./t]` CA&h:#fVd*BxWͤvMn4AcmT{,ۿ\kL% RILS`0jz80]=@7 ~A#{!?bTӜksy1땊e{k`ʿ5% } Ʃk,8F5 y^ +ވfNFO9r(S}a} }i*ė=ºAϭ%?a7u3Ak~"+rc]_[H7`O0I8,}B6TGJpz'GOr&u<~jV55Y.t~*V'=DkL_n2NϗS]j1U VФձ!3-hF~՟|mHz2Xq g/W졵%>kJO^@GBQr 4=ڛDL}@N1Rԯy\&8^^dd DʰtH W}oOPs>Yrpc֓[kGUP:EdG͂% `cUE}.zq/wPe`ի(rL2 :6-l]So[?ܐ6=SniIwȋn{ѣ8"8ͺRK D[ϳћ-8nHq6r*V Nz/NbĦuݎ5Rsm14"PoUZ&Sw6ĘRӀuG`rWa)h/X8'~e۾ӕ]1YSl!6c9 6 s,s$YÃc~$8ă-n#DHH)*!al/ڂyLd{G7[zIa+^neP@ؘٜ%]$0pći{ R2<.%Wb7M"5uU@g\#0Zb0rsb~ov64Kfp_1{_ᖘ!,J9~@g(%H[CܘF't?aKy^¤ZDԌ.}Jy]+n|)¾ BLa0 X2ak+޵KR] d:g`"[K֓ZU|rcA lKt8&mOсv_&G߮Lx7CRhA@/ڴ_iHkfl(m3 ms&vX$-9?zb~;zfVb~ sULm~a35?"(H\&X Xv} R1,T6LNHg4U{Q#\"l')"}h 0#s]J7h.5I i6K%8B"*k+fzV_dYUzv5xޠy.W x5r>xM~ 9e\ņe,v9!w6%8Wf ojNfUrߡ׉.1,kbc)m^fwkg $GlW67㾔Va^o4N>(k x 0%i#-v]?lќEL\ȋư0pĨ0ƳUWK`tFQZ|rVLh]G.ww[B6a(\Z'l.JIݴO@l= ` ba&(H%2ppA/[>r_cfWxhY_OSTl 经K$/! LtZ2W\)$.DIw+E՚݈5&8G'U//$XfwѦx*_D$D@JW:DutҝJ8YѰRVb@4ݠ0! e^A 6sxg _uR o[/ ,AD26u<90H`7۩^*ES2 _Fnۚvn&_073Ka~q-)f5kuZi{P1l\6pNEL8Ja7DcdlnFE@92sVed׊lx5Rq0>v}C~>:B14ќА w}72=k9v!'f$q_ɐwts#xʜh&'=̀<<u\ׂ[d Wqz ц1f# Kl<*9aܬ7Yx]{ ?grC˦Jyi9Er.5Yȭ&GWhIĎ/坚/)18t-alقszf!;XzmeE$vv0$=d۩Gű7q.i) be{} :wrunepY.tәx_"QM #ge؈Fre&0h "XsZyюgڡ9x`X4`x?Xq N v"L zGI pY OJC{c Ğ2-S6Ds sٔ24sٰpUdOc5@lף G$O!I؂6YN2M \֭2ҫ1b->hT'T /ErvyڦX6,4ߜW'~g~C |+_6P߳^ ",$c(;ݝsEZ]8PH':Pd!QDt"u#Qu32ezK)yB1p1p,m4=uVvmaF5*;q* 3"mt c2ŰRg>$g{>wUWt6#@hL6Ş౱Gnl՘S;xFf/ujz*bLlKn?;Q㢌d`jOsCjD2ƴmf=~Y#HjEۤr90[c<ڎI|2LX+=]V$U 1rF@9)h)4RgKlbKs-aWvڅ*P"F8lSe_;~LXOPP56uaY#N^j6 ~݀D>n}Ջ# RJ|0C4n[ Tl o'L<0YP/.-}d3IwP,yp(f'uح-6u TU+-~{ աFc徫BYP>畴$cm):>ߢ J"0YwߕΑG쎌{o];Z':U =S8v1h }SI $WÞI4rLҒ?;SQy=J6jv^T>v0]?-y"h+|nXHQQd0b",Eb#s~ԛ7_myiJ+%A\ }G:@d޲N=2N6:(< #h I]t"ظPZQ:H (X.*^7lj$Ϟ kĉl:sO]wH:@?EV ܬG$8g.TCϐorDwǁ;lZwM-2ʕ&YijUPI/;:ృCR' 9(G+舫Ϊ2#^6c@c哂s }*.ndX͝Asq+,-DPD{RjH>ÍgL-iA5s@zU`?-OWedrm#1R;=lktox{GsEW3k6j3U!=;У4r,ᔃ&/HP,#+kOjKݾ_%S C!߀tӊr6P4<~Nd|A,14z9 IY# H!cTyҴH8 ^ՙO\EG=A ;f/3AK?Kv|kЧa(oΒ'tfI_Dp?(nxP~5Y!/&}__}8KG Mˤe黂}q)U,4e s$&{pjLzNh+dMX&td=d=! MZ?IP΀,ڋ-~#> zH`&*UNtSP ѻܠ̹(P;~9wwG%v1Q:'{ Sn->79@ԍ?_r1I]⎏:gQ }.?o-P˽B/xЩ^D8')ݽ 4+̴`w!Qҡ@0Nd#}OuQ PuKiGS,z3^2T+w?ouhЁN~B  \3Kxd}n\C9)+諸]f$ /-df9T9_@ӗN-՘z^Q|"?SXVTsBը#Q@1k+^+t: * SDZ- ܎iK1L*K ]]C+sk虭UQwc%I`'f#5g w 5AѬ7:'(ݦrfx="[na0}tIJ#/~ӋX%v]sg0Oz0^,]VnqMdې{Vrc)dO,cdy U]*uQ&AQ(l ~N.☁JIOҚg)_x8{8Uz< Eel)VڡFsǝT7@s8xSެ->~ⲫU*76wjftVlag4r'%]y6 |NQI}kp۩d$[f\.N1EEu-yul '\ūzrx!\/sa@qM RX~:@7t}( RvYe#Gq[n@met$B0wٞSh2rQ.%5R9:GE}V. t>a{ڊZkUD}pGoA!g#`3JB:I,434ͷ6}cogL~Wy&am5QQؠ{R/`B=㯣`),عKS䪥$B- .+1zTHs*Ҡ8@9&v(˳JSG]M¯!n]s(80}71<_b+WJLT2@8:O4yП+wt|8-%h#,CcS0 UMѪ;<-3Ժ ϖM9,Yn(]iAZo$7L?1BG'@>S~}*gnf7F",1,s~`AjBXY2ݗ-O?gG?|3j>:gt^1ۦN2 ׊~6KD+*A5ӣ@pgͨ>'9a5/SDNjpD<)V.ިTSA:s9XAhPgv3@{nUH,iQZ,kĈ1]dA.+O-Ap6}2Y`X kz 0q7  '%ԅ|֐i[^|V W4q˩{o%]J1UyLg6ɾ ?n[ީ|7\t&]( }sUffP\b >_˵ς?/] @bʾSmEAO~]'O㮑uxU|ԛh'!`orKce:: m☄3U+8Ѳi2{RLA5 { jP^0 bNyjE]E%V^nJar UU8{(pkUD2ynVN[y#izw);J0}jaj+-}ptQrgRN[̛1pІեЃ*r:HZ_;>ñI5uJ3^r"|>اlG{A{Kdږ_ʙTpq=+DJ}RF_ު9EصXۊpHV=QA-5g XuCr䟡CYA 9SCbK;뢭"mQ7%u!yԘ~W7o$9>N O1bLm(%u[[l.p|Zrxm)CK}H8A4W=@F@RҸM;O~ˊ7u~-Q3 젰{%%jg3Juێ K5lϋ1u:ŕ+#) 6UmL]߲QnKTyڣYX$ޏYBQ)15HT`8=64e1$-nUN >uvl:W^7F$)Eb9bNNs}Rc"sI Ӏ*8I ݎZ70he{"'1rIxz/pB Kʙ#ZBYe3{5G | B'ʃ|݊UT˗逦O:'`z$0|M&i{m% 7Wfv20Ė}^UÚU{U sH䵜?R_|#(m4@NgXCJ̣*\~XDz3(*<`.@V80>S{ lB&Oͯ?x?G{jd_^7AP K}'|wU$[CfWqSd ;("t+f@: }f*PK֪?7yatH3lL?!P6MM| =Գ!$ M :@wbz)#Zzʬ̢SYV&IE]Ld& ojhF |F!H2V%m"SJ?1pK":ۉ9Z&SCHiR xע>%GU~[Ab0@ց]"c~vaALK)~8봍 V|xN 9|f-|٢$ RԽîpIl5R#n% o,Xzi>!8◮pC0UT_TF3c`pYk{vMs1]m 7;&IbbeΒH%y%z(cLA_P4;6 endstream endobj 51 0 obj << /Type /FontDescriptor /FontName /ENTTQY+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/A/C/I/L/N/S/T/a/at/b/backslash/bar/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/o/one/p/period/plus/q/r/s/six/slash/t/two/u/underscore/v/w/x/y/z/zero) /FontFile 50 0 R >> endobj 52 0 obj << /Length1 1626 /Length2 11512 /Length3 0 /Length 12352 /Filter /FlateDecode >> stream xڭveT.kCwwwwmqk\Ak`Cpwwww3ܹWT=j* uFQsSP7uuQsWrU`T[(TT , s `E;8z:[[ZAjt 0O[%@sp!o)ׁ bXXہ*JZi%M4 rT\M f ` 0s[՚ [.Q2~ y21A..ok3 y` 6s5 o@ood*.3gkG୪?pBjXof-͛ _LAskG;[dpu[d t6yt'utt;o` qY04ն0+` +?殎is9= ڿv l 0Y0+9@Jhw,3H7Po!B{_SK)7vd`۝(:4Wڠs3W,6Q-,L,PZHY{U!fV ۼkAv`/6 +k3[_p+7,"B?׿Uޖ?ZQt0/4bboFV.#;{?;?eE 7 ῤ96 mK[)  eqMjF ?oDB/رV[~v԰ 2`1F#Oxv4ɠ<tXFҎ#gXv7GTՌHǚٝ>|uD3Km®*8:N8m!ώA%Q$B`", ]GI5ϻf).y^ b#\ DWlR<18XAD^I]Kֹ,g\}$~"d~&)T?%߰jS_b>tv,o4fRG @Nvfʔ?Kx~"h7[fhr5&`b+u@-@\oz}tDeCz 1ROz\NX8}xzK[ת0bE+?Zn<eē߻̯%bMՑUCH*=Hdy8Q-Kx!Þ[6iYԪNtu8:֗y ulʚ1?SCGX>S/ . 7.º\.7\PvV$59՗" )2Ɠ1mYiTPPOw/,; \mm5Ǐ^٨R wh45ڕҌE9/xm,Q.(\] HbT+'? y%{B --a7֐MG3r7&H4'+D<ѧʧ !zH|? +:*Q'a zLtuFL؉^"|J{S!.h1Z削6e+!JsIY8Gx؃Ct$׮75{ivXGT]8ypF>K Z"ߛh~O%|WQNnH.es{'n~ѯT4A98DJ)~Y@5 v6Gݩ W,nPf: 2SErq^ra2iŲ?,12`Wgs"OK5 ec=0A:m):>󝓈^LT ]#Fͽ4Iᶚ%TN4da1&||XKa&nm/N! ޡ!Q@ Zl&PD>xo9V9uIҭ=_{8>>Nv٢ N.?N!ܠE㭂Z/1|}zN\-LPo?y$uglZGˋv+} (SXF _I1avŧ%cI2cS 3^MƜ[~R}mtbGNlIνʤzמLQ5 m͟cofИ2# S'+^>!L m~1fܥ—S["BMn|SI ҀR ƙ'mNbXJďsf(1xr<>ﲐn%lOPL[y9@V{ږp;.W M`AAhHףسbXl{?P+NlgS/EOUlFv $S$y|MmvlhgNI|tOTif 6efjܳk%| 'jbpFNҼCSVn'*h3#9Ygޚ8ӄ?Iu}}J];?b핽aH`c|xfrR-:# v^M߲4/D 6 j15d3 nE(ѢsI_FJDݿ=;шzϥ%w`>2 W4TE,"e7FW fI+ =FA "ܠB >s_+>F7Qgc'[OvK3Z |ʮnhܓ_1Fٝm-h- U91V'7E,qZ7bR(EKǵY$IU#| piՊw̖.ͶNU01Oy(z8|A%}46ȻüM Fk8Lf#{( $[r۸\4;|ȥߝ]š#䅢MI^l+v*Era0V>gӝ@M(8[2PN5e}>WV8]]\z~aDH~5bN/N\B_L Q`Fw0£5;C /=LmkHaHkk&%'FB%Fde UZ$V .v.-Ȍ[3F#Q]mOtJMÚ.ig7Zsx/mh$E&Sv `O˝ZiOѝ̱Y~x5 N3<2a);)cf;]6SFJԕ?Í8[Y@ 3$ +˳}AjO0K|촼 ) )\peW[}>30 &u )nX8?3abs}"-!EI XIpŐ)h$t)7>Խ׳yY-̻L=.*#zFS>˷Jͨ Lf/lѴjGY WSR=evXQO46;'ic$H^[8A5te.G|H㩚his}N[CBiQ=<py'Z_hnдBf|WqW NNk<F,CT?ɽ(P`')臜{mO'bxtQ#: K&6T6gY7/}T7H?j<9iF+e&cS3-6P 52d.vrSO`l?b}<Uyk4`tmeq79J -x?Aʵt2,ЉF.z+?C:bk Jf J[ZivY|z~:$(L߄ hDceu]i@B3FlTNrV((ge\=_騎Pf촉7.1?%o#TX,́:o7=1pƺI9Zb,ͫeӶ)BtAӑSt_UsC^बKb4_il' jy{768<cYhk9ogDxg'ώt7XSB,Gːl4Oi//:Rca؎PgW#hG@61OSc"{g& !T,x;5xI. ^Lzό3cxsd H*(>|[;[}y/{f;V#-5fo?Z:Usfrsw 6E(ȑ~:.]#lަeA:"mԍSgо$m.]Fg|7"" /{M @E(j`M|p淢Zrs+,:6ܔUf9 %J𞓢p_SRywB/-T Tϻp#c=+I6&Y`A?t蠕}8. .,)ʹ5t>/_#yd%"y-R fLiJLSܥm4y$^|u?|mmˬ|*jE>]vxU/2ic*^bp4=5c.W c ?{,4in_aEbmn0HbfѬ f1SS#P93hUkF VbT^MhoJ3^SD<8 a1E }y$0X̧|?=BǨ'DNxw0odۺkkk>9rai0qmM:u42&7Ol$Ϊl\n(jY|䴵3z*DM=_dȹywc:ޕ=ʦs$|O 4a~l}ͺRrd%6>H)&J4j3((_jHItM!0\o4(pL5MeiiMjM#Y5V\7?A5eu*yǧGMģ,k{+XK974*elS8}e~ #Ӌ0kNJ=ެ8(p>?>6Ήv~cyY`5~ "gfQa0!BrSͪX-Z&Yp*6 z"?{͍쏂ߗ/Q`lE^SE̪aCt.mhF1[3hЅeUy*`7jK &gnى'b1FMQ*$KJCYJ2K/ 9ݔ)<SbVՌ4,R} rb[L\JEL/`An A)\?>i.\@C1 AW*~+"_˯~RTj3Z?%!FdwjGjGG';EL*Xk$xkY⒌kr8K(y{+4n8oBm*,FE@0Q^PB*sIՎřYq1:>uF.My0Q"aU%ݻ]^1lꎟᯓW>ޣ$S]zP,.Mb]m$Zxn`ƨII~y@O:5U> ׈'M0@[\F+I)Ⱏꛬvl-D0XEsgF2(Lԍ)l?oS O]J͔x\i:1C Ňf225%uD֭ T4؄m:;Ӗ1XM[3m ;iBSS wT?ԅN̼'Qnj(Ċ|QuP9YlTΜi-\YF}0)dlV$X8Mn1r25Dr13\vDf5Uy gᑺqڈOd?pwA\J)ni*$d 538{9u09bS@1aN}:Mݾ#)!59,-A!*!Mg<|ҍ\ﶗSZUh^j[/*Z+=> .eei&VXIMP?{W~]+}tR*?.7{IG$I*4)[Jk;8a@nG8H?q"rU2Ppi+ܧLQMbV=~[NNc={FUl_9e_nCEb["G2ڪrR\ǴrIw)L2肣ʹ@JOU Ke-y+PeƹڪpT:շ5b[_'Wmw&Cևa {yt󠒖{jK\}4oVvoF?V0;DkĀ@ ʦ-_f8CH_v XƔd#_y.B Winwe+kqTv",?*Άćj"Il}g_/ ;0;IK[>Xǩ h&b-]+b(ueE(#u?KA70К" +fٞY*f Sظw/O~SPX+X/jyjq\A)Ht^2SrH[E:w3?#x)g%\ݩ"cK44mh6>T'ݵwMA2)rQs/8t0N OP: +^ $xy30> 6>VnK^oru,^S2Zt+%By6O䈥ZMD}?oz (wVI~ͨ_)31)eВ!o9!ri}Ƽy]tq^sq{7tO}T73jg~Ѽ{Z|ˉg#(5Vs7Z33pGs^BJܪ l8kiG@hzшPie3TDDf?eIWk% z8e*vl=z[y,|*^ܾl\(4k 7^A"'NWURvM*@VW៎Yv[+#@.QaW{PwQȷlXOԯ*(IŊeg#g}[CGS<7$N{R};셽xfa=H讷 p}Qb Џ?y7nǂkpJ}S7z5e_*w,Xw8RNZ(4Y [Y9m\kh^-^mʴhҪt6hx.tKu1#߈Bq[pWb iԍiXD zX.Sԉ2lEРs5d5t{g*3VD /S!Ryxt|~5D\nG^樀0*S+*ōS)Sr-wP#";T\ NuԈuq"rD7qʑXZ-+;1 '=%?LKlMd2i#wī/{=CrD|t>ꎭ~ 'L'2wCZ;XFl#4D;qW2 Ҁ &S0X/֌ۃb4o U2 @[dpu OS\>|:'@4$*X> /%u`<]bv2YO?HQl<٧8 ~K# zvBql8QQy\^[b%?V\tdn;w¢ 4ީ9HZY" g LnF_\V GůxB=Jk~=pͱ{N1[M"jԩXsQ傽:_K n߈ƔI7uKl[T˭t^\Aj+CUQI+wG.Ν=?BhHsˈ5;7@wRlO!S̗ư U5~Nu4Ԋ =rieSJ\–hc: :oy={?O帵Un~"^Y˷ă=?1bŇF. 9wLG•H-\b`#zsWԿHIN x 㴲,bﺶ~8UV ]܋Ik 'Xu$>.Ģ-%d-c`&SJWa*>raQ.wnB_s מPoG15i@TsS G~ZDJ+ԁuk3 ]q3FyPSk_!Fbd7pqpRzP4xg[I?aL]EHj̠:dq>!=;O}&B{zD[8k/)-73r_$ڎaQ)[yԹN8;ljL*cnyn"YTETTqdEDp"xI%d"&!_a׈$>Ja;v53JTT|6 !j> endobj 54 0 obj << /Length1 1642 /Length2 7243 /Length3 0 /Length 8088 /Filter /FlateDecode >> stream xڭveXm6CHJ HwH#% 000H4H4HtIt7(>~εεu{7%!yŀ{sg'm:\TK l QF{L$8L@9'** `k$UW[ooH'5 |0=8P "m@+ 4PVW*00 Mgs( Ül@+8,![svN` }:'g hw!0 V?9 =& d8 Y5iBp{OK`4(9`7\`% r}O怀) N l BXBNN4ܿo>{O4׿k P+n}N }nk {^aVp _vKga.`ğ b=3lE,0;lQ#SYg*sDH?"Nj_^Ojg(Td? l큿 C]?-Z_f} _f l AZ@cׅYP |/🻽ba_f5S>!i8kO3-}M%#wzpߗ%(**zxyy}2<n{t pF n` $B<61% YN/gʇ_2O);1xI@Azm5=dP,j'lm37s1'Hq0a(īc_K4`GsB/HF*͋sޯ]-GmkT鑸L rm8ki-测0Lm|5+j|[U҄f2&Wm&`lrWd4{ϙ+5Zp=Qˊ[9({8+Z2vVpFH'MqcGkTٮmTvk.Ǫuϡ\wxdzԌ!U݊3vïboZO75녶v,SZ:ڴ? a);,7gYBmFړsUANS- IQ}M_*9\n0B@G;\}Cyc]0ɅtVl9|sf#ǚ5t H?k80ۻ+QB++I}.xR u*.d_FK352-79 {/Ѱ G:..T?6֙ 5jU?/ G+hUíTI;NeOM`t |v <*'JCF`E𖕕@S<˵F`Rjd$2KښtP'M;-}SD @ĸ|@4&K:W 3-né,O5. om!l¸y=DŜwg>*`axk `R(st8nFl<ZQ%iU:kQ ɚݶgNL R5BaR *TM6dPt߅=@k"bV5 e5 nIb Hf;3 }r !fJlKBe>_w.gv{Y ޻C7]h#ѳ1l5f?J !=A ZMNDb>a o3 Ry=lK5tq;03"C3;#wcX{OT9>l>`^+QM!ۋvNӂvyI.y_GY%}K吽Ϙ_δkfmHf V>GP;F%TϦOaLlY)Ve2he+[fĢ[[XVjOWQ7 =%|Q+Fm\ З~x>ZꔥRv'bSY#㩻ioذEז 1cYawևCJG)tye.}ߙ鳀rJh͒| u;U}EiO|3kSeDɒ&%~B]^xT=G\dFdmX((ѷe:?"nBUPT>)!&'Yx '#J ]m1:\La@oӢS¥VMd1:eX.b)A*B l7B?8DU:nN¾5at59/M?\/~oȸ bӫ}^9g{1!Q~%<Λ]xZsMߵSV_]L|,,.}BE0KbSmUL9*"YC>ZrG?F>;cҙ mu/2Xzt$CD3M&МdGy)G=!Y@H.%wӻ@fdFq/o]]kt }94o{SJC }V%4:I \aW~-\J~'ސy..2Fu wKXgjm__̜Ns~)I/,ϋ:2SQmӐI+Lw_~{L/qO?{ff+c"8&Gޞ@ա hx+&(lj2+P뒂LDecn枕c+Z6trdfrcY^2/pnRfA+OsF޵:jjA㭭 \2]f;iM`XҘ(`?1DW,a&3<֝N[򾛈jsK/&.OV-se< f[ҳT'8FU%#N)M'r.JT<2@z{mv~˂/l,izbAZvǑŦ^ٔ4Kmd^QUbz Kî;#O:/̺2 >̺V Vצd끦BX"ڂ5t,L"&%A-HjXOV^kC*= b? 4GK(Ң(pPiR^F4,ETI%Ja Oȍ zT' ]=TNknQ + y.r{FzQ-.tD$2$}=/C :<]'|6AzR8hZ4؆9I1_fyb;= "߫g :H~opnٲ|X=CDKZw:y͗]cF%Lgzl1^QKIwDgj(H&v6^&Ʒ?c;OPn<\UFh<@dH[I6cGDYwow4؇~H *T8xN;4œ<ȝ]^|pLC;@lfӀ9O !PefɃ.o §'5g-OPɑDtf^d.c}`He&Qu mPᤳI!MC*)tϭٚqP8g6{}1Cm I}Tml&cFMTփ- 46..b@Jr0(p|  AN"9^ێ2E)r3dG1`Jp OfZLpC -*)tKJƛNCrvm{s>By_Ԛ8m@#oj5 w"}%YQjQĽٱ.S bn X1urg(Zt`668V8;Aot7D3iWcm(gt܎?Io#H!AHo~!qm"; zUrOړrnhN_݌hj˽ NND ±]=C {=u3*G+2TJ_7%J1@S,|7@PW&;d;O" ˴9tJKݠ 6+ A4)=o3e~{EO+Z;|B]O&x;(|qPM藝zyݾ ˟g`p.|H3:F/׉=G ˷Y%DA,]y:هw#=GVtx$NO4)CKELӓ*,J7 A7D-8A H۰7$O3_@Tּ`,o{ZgR'8ZY;_: l@\BV}T늋}@Bsӟ9Sݨld&eD]rW$oD/eKk1Fӕ3FhGS#hwu)ijw2NT jz|N2:;>(?0<9됪9>6|S{rtnYZX7cZ'։Q{"y03Z&H5fQkyoߒBmVIas. h_6~{7K[L0N[g{ 'b/Y 2ͬYyy3 3j~4hKb0Ȋq('wcQ;ܫQfd 21eB@ M/9422b Rk 9cq ׭<7OxaZ8G!w4(qRN6ʩ$&'I" ǽ"(x$uTY]c_bjwVD8{c%y +AϮq(>)D_jCl?c0J^]0YYֽqbQfis>xUp2E(U^=Zd Z˔6ƀa-2(VƳo7EՓi]HNOl {}:dö{c,®RVs xG"5*xq&;sa^Wի^lul>589k1}+JEuc3=&U7樎S|\nR}!/ڸ5[7F?ILAOqm[I'[<:aCбg.԰HsXk8Up(Fդg5Kk4kۣ!nςYo.J_7nw)Rĭh{>,&VASa~{}v AWwf лyfhKUz旐n8]v2ò)dI48{ s)_}W&:ͮ3M#nqkr! pp\N4\ eӫ :ᴈ/w0\qgrTQze^r(FB-?Sk[oԙ |7謶JΑpQ`Q3|2u_ބ<-qS ]7i*Dd鯽=T̺'1iw68r|u+vIi{?PO}cd*oK64 1WϽj.Xqr21o%:2J,)'EE$ (< Q*b e_.J`ͯ%{] HDRɈc}W܎}:FZ8WqY8{ǘL 3m 0 5vhgxΪFbvv8&wsڣ;fuF´6F{E8j 3},nEfwm:A 'XOp=LV>;V V(ZP~~Mq}wKTGED8Vx3?xd91g# ݊em XQ¥5\D,)vgʺ|6VGooPw&8~ %'bv89&1զ ,ISN mIfo͊mK7(sh]%{NJɂ!^q?Aڵ/a3A~}%vD>ո9ذ =ķ{R46 QL=n޽$~vn1M-1Zna1k**oU|)]g~F g(.[ +y4bp, |uQ\9&t|ytLJSvmuU}]/X{]]Kz=[6[UXft٠ e'*몃%;hox*m=s}u4=|8KX+V;dx^!A|G -{#tzcP"` i\% ?fm. 4v8tF` sRXWI`jm9mEvF 7Ys=Z_؏g<:hB rE,@1k [>PYrlf"'_[b-Zt'کNZkݛk)p}.LhU 1E7&}#F-WK*}.gǟH4bQ/8k zz\x:Ԍz M{wϩwpFs^W]G7~ gYdv?Ǫ6"G EG}j?HhSyxk,x8]>B3vQ{RPxI0_ie:IͰJ鮾=1.٪=x|_^^.'dܞO5f(ŏgt#fzC g7Xc:ڑXªn@B endstream endobj 55 0 obj << /Type /FontDescriptor /FontName /VQNEPZ+NimbusRomNo9L-MediItal /Flags 4 /FontBBox [-200 -324 996 964] /Ascent 688 /CapHeight 688 /Descent -209 /ItalicAngle -15 /StemV 120 /XHeight 462 /CharSet (/A/O/R/a/b/d/e/i/j/l/m/n/o/p/r/s/v/y) /FontFile 54 0 R >> endobj 56 0 obj << /Length1 1630 /Length2 17043 /Length3 0 /Length 17883 /Filter /FlateDecode >> stream xڬct}&騣JǶӱmmvAǶmvcy̙uޙ/3Cm\޻IULLlx #'e;y;nYzeSs_9;9)dg+ t6hDM,,fnnnr#@AMKKLF2Pp51u bj p0M" ZR* y5#bd 2ȂMmLfv?v&Jsb%MALݍMQMm@NN '#o [ck+7WBv-l)99;;*;Og ?@;&v./_Zg lO,#S 7_0{GпpqٚgtGSs_t?/=m/ڌoLc翱Årй:AT $&vS3Fy;!Tw,3@ -_9_u+<-94@dN& ![010[r(-f@=\dk@_t c+H`V(&"M92T;Ϊsٙ?0v/zf.= 7 &俀-tvt?_zFQqښ)GmU_sojnjlgl\;<) 9b_ҠZӿڮ/=|&qc}_`ۚ'2'&E'A ~ rƙFբ66I%e7VGGjRן_Q|:0j N((Fz@q|SNI= ?_\9*[4ѓ<_]cw03.X?d.BcY EfT:V9~[erǂ%I ٷ>թ%CL$ՙ2ԣp} G+O-XCJ5}Ǚ"w$} [e(Yr[.WFl)5hX.7=r0tMFbh\[t1@ÙFp Z`2yl)g(F5Ct:QǺ;©Y=ɼY+6] WqPH+ءZ 1{Fs&jMzovYS~ Do?ٷ XWu? 6( r=xoW׬*,ҽ.`&p"] WxB#QjBT(pL).&i2\WwUl ;SYrh^oڞ*  !?"U6h6!uNhA_* )4DQo. 5aBGMq sva LB\<$*U=_ٲ:غ~G yĭY+ј>/WAハȆ宆j/ʷQ,dKr1`r۝0mhm/\mImN]4-%F~ }ml"咆5rO&@Ģ7-{(''_Kudc?mZ|HC|)o9!(\LZ#> 1vױW h~]0n Pˆ5yT\4 DLX>OtQlt?CTp)$b+ίpܹlqlE6dm4Rg썜-h+M=~LlNY6h38N;/ fsB}X5,Hql}^bpt|P,U E,Lm|pύ98X }n C}CXQIEIW[)38u+ŦO!|mkg¯㗋ٿx!W+%0f,?|?-N[{WdRB:"k }bL<<9 yL_rDJr724 <&I.i2gnwvw>V9P2F *p'`K*jCzqʺ TP(xuqTD[Gj{Kg=~ ,av럟&3ZHaD|hҘֲl~_bg6PvKij'r |O MOfu͓Qzpc|#m𾢴vqzإ L}MV|i*edx4Q0.┴ @gUgY^6U2rJ*^54Nr!]i.mƵڥ"MWs3[i? I5Ct]'/yy"`_I{u%z\:")'@)Ъ6iI5&jfsXy(#:ꬰd= b ܲe.CEL=2L(k_ixU[9hgNFFcbN+h噕I햆N 8ŅX3Rdg63K]J}:8獷!HEosQ>#a2WLc.5RmďwĩvGPF B`ځt\90x j]أRrySlXK6$Ӗ|`G@/Rmw*>p'ӳj,)~XZ.5"3a{K4W= :)M{}o|>_롆ts 3fp;OԂ; MkX# Iʦ4FjI{%<ԆuҠ=8$][xKziB ;d˔^C}?v3!]HhHC3@ԃ\rKX}a_|܆чR ݄>Ň50inyn)1RQ@whK/맠u*̾h&P2ĹڂH %f)R^2ڧ B7ڣ_oSxhtcDg`5z 7YǍ*U9Mp]IDtŕHGRSO4r!{+i~ 1YKsm}^RR1߶_$I}&]Ԟ^ n-9^2AZue̵Z9`' K)U{$f+k^rɂv%{?tV׹ ͦߴ1lmjJKR390t^ȥЫaվRB? (SMfԴ@u:R;&VA7^0eQ9x]fqI/,uU,WpCa;q7{^Bj-˷i$8cF!*I)7щW[$.?nIT  Zyp秽R Q9*rJwDru` F ' &d"c(\HXw,ޚR,ZgFK%&j"<k<<2Y_hJPے)k҅!"ssxX.bgw0Ce,'mKrt6ϳ_g"JaM2UheG2+|oYDDRNOAm{ſp: 4D^(bdSQxx+e%CύA޾U&ҎzZeYCd46{;Z=冏_p Jg_'S[4"˅Q#۾%vx5pl( 3QSc$ZFuC4YU13 8 RΗkv _8&9V/*g5ͳИ0T(?+d G2HU| (\u|DnEs\s z8TF\ fu6':ŀR@(VuT GBlj (b}Ą"Au^`fC%ɭG?%[i+O<ٸDg(Y%04|vL 0@Rǘ< Vu.ۧ9}|i-ż-Geahˀ8tg!#b{@\(RC~O&hP=#lF$־\`("LS,0pDB1j8lV};h S頟=^O`'Sl;p~ հkkz7 ֲ,I(RAX V;[\q|.Ԉʌalã;Y/E1~u`JZ{?A)$}e2@Osqػv~2m]螲Z~gA_NG| R gᓄ{ \Ng/ʾ3ѡ)]DFwub15!]j^eA&*QzyBatehA!L|ew:|,A u[7"GJΨQ/^ASMKT@08lߧшt΍ )Iüx2N:`NP~k(2X,isq(Q9. rפBz׋OɻI~ /߻ɀ[լWp}V]8}8=PnlTڳ@yYNAàY qZM?SCm-U9&PµoPb%J_.d4$˳™JBhu]l͛)&ACq-0_w3\Y7ct |#J-+l^Ip,UحXOkSp6 bb g[pk ˲n;A6<*nk#bR{4^m]gՌjQLDž!F5 ɰ$Mf%hϰ yw+F1 8 T{5,#5Ѯ߹;qeHt @|YӕoAye"Bs%Rxoh`A>K}"R! l8YҠ< ly#ḋNs R &-6\PJڎ([*TXdU["E`e \wd4TnENJ7 = 3^ʩӁ`C8 azFk建ŅkΝϗak#>mĦa+[rRzNH ~ԵsWlJ0uWjs~(r!);re9'VL1G[a}9EKn)ȍq{aXb]e  V@>:T8Մm*7WNvIaFA,.xL;}`o0V^[sZեQR.Oj+JoIM_HpZ]KxNٗV`l̰3&LE "'nR:d~l =s+!߿ǃQJ565d~t0TK*A&vGtɦ-?o#D)dhÏQY_in7.a=H rRc*C0HʱTe%,L(]ce6_3&r1K5~9;PYg|=d$* 0E[ 8{|/jm$ ;p|釘ٻj1^GW z<\Uï(ū$#/?Bs(<}Ub&Wzu08Gf7UDdķ|""@4~my*bG5 jadwKҁ8RzoamQ5R塖wˍ&>z6W|Kmo_dG@JQ1J)WeBڷiC px!VcD+K/BL@EWDJZaEdz+>F2/ܡYda/y8 _|9hHc)5Ԁk$7l6%"I$2z>`Z)q+٣Mʑ25𨋰%6IQd n[_FqF"+EuBմoQ_;N`v P l̈́ҁzf,J!!_`5`w7խBlgMp,7S:?yquI'$2-\(>](֗s@HPl]Bp`x#Oi NvF|Wk*pugvM1j%UNy)ل{#5}"Ϲଋ_$+n3l`lDuĦ)>zþIM>BhdX\( i]& g+~ZF &*EsnJx \Y탞z@#j>ޡ@mRxq.Nt'գ.K"T`G:jĘp;%D˅x Tl,kNϖ)tаL*+Zi?ѺbuyڃHcWΞnB`2/N/QluBT-|í?0:U"̵j-ʤUO2;v KtgAyŜ(~Q{U@ɛpˊ%ugƶe7Aw--UګH"Os;D(wCQob@JQ㊿P@O^S4,3dV9`x] ٲ(ը~G3< 9S3mV@k&/~lFCL#RO.Yg**gJ(K9-x$*~$4SwY~VQH'8F5~YA~Vx, OK>RI,`A,9PZH=k߽ѶGr߸)40=`Z-_Dmj,(E8EFrfΰf%Q" )}aD~s6%*gh?!v_5 w`T~ȏI`E@)Xf x([~ZL 1CEIC{F*KNƍjiM5KMf`J;['{Gbr-t^\JUWFQW2z.KIwJ҃Wqi؆+q"{_V7E&(3m~NN'GݮNK}EwҲBBɢAm>n ߺc˯E])>DbҳIbtABQ~ # Q\dw~]mO š$ʗow_ n!Q~co`zЧwouQr Ӟ{*EU1`[pHCQ *4wߘӑuʺĹs4}5Ǵk=mY6*{̷281zF謴^1!CDWrM?hZ=&^E{(n :GSX8U 68پ|a9ԸnO89=(5ɃIFڡ>;Eanx]*|OΒdI )C Wik0}V_$g;}!|x4U}2%9s7.kTi׮h7**5t}SBAe-A4DIPj:k'3W)vGX 6`2"r#sFmhZjQc (G+ـ}iE+.)XBYQ6e`FvAHsϛQ:s;o%z=sm0="sHu2lI "C#J3@ejT=kirAn|e0 kMrZgx)Dbd3x/d}p?L%͛ ¹nܵ_/z2:$[ 0)A$;WC$Zq 5kgz~>A9<|faWcu,hTex SW T>l >UW.A(RS+ﴫkcYX;{B+ d'quw/Po=Kk ›IȊړ %R͖vֽS{lz.چz=()sކ&z=z  (ꐍy 3KS ֫@:N @4`CM p-PXhP\ Cp*? /~(x6vD KpmSs%4-zGx xz>@W^*& ?FFĄ<2E4S?iED'O~ f-87ĄtO4b|wc?ve=խ.P JH4*CuDn:=<&/S=!H ӷV@|%(W|ͷ%f69-Lv=-[5-^z/2_y)-^tNah|\oG\Ob?ZX<,VRb;LUo'&wX0BVn9Qcf[ܒ$ոkN԰$ca7(87Zҽ&Rh+&aͳS,L8r ˋ I~bD/bZϏLydU8Z]K?{B^'f: ŲY#Cuje,[j3edHzڮ8T WJ[I%cNRj0 ץɸϱ;i R̼:%FAŴɧxe]!Fr^(LJcEV ؛ @iJcm T%սbZ$ۺiu*Bۯ>L:,:z ;[mL^A(+vNVUMde\wKB0zs; LVDx|:*dw5&T$I*M*zE/aj*\V&}j?=MV^2{'/YQaaf'8eM?ftryIUƃ9aXbtW}m>nQ߻K=b4T u@(|<>dq7R(&?<",S$*J4_7xLTr Us5F]&un/wQms٪R@LsYdFl!\؂2we& 9$٥j>3~&AEؐwo8_XE5+7<5R!gb;rWkV,msA5愖dY6fS J/ FKtz D_{qZᒦ :l]iq[טWa|svߩbKS{ *'ʮ]_owk /:R9va5= @z̫`.mT'fB:/Z+\tڐqauKMS7bٯ/RQlrid,W1 4YXk1EdH_v=D ,ń_?7?uEvcU z'sy)L= cC:%Y0G$y>$Ì<>7;(\?xUTIG䩟|0iGk75GƬN-D .S0C_umjQ#<q>ZiY߲wqގ xPbU34m%Vjwq aNXkX:R}zrC6}p<PL5T_,a"cPf-A {w2VG^Dg-zvĴ[Lዥ.)Z&`;z1^xFZ3HH% ֤zk`[p@n.ޏBXw\âlo9oq?4_!n[QA(hJ;+^ TĽ*{ih5EbʶDM޵P$*8ofHq~=5SZv}/7˻}5qEV2^]Ab_) KO&Hѿ]1l^x>VGO*f8{ؠFѣky Z\ʚgxXZ20˓?` .[K6fTHPgr VIylHzu:H\Pv %3w""@(9o',?,LnyNw]}4 =G}} [d~$ RZv)nu|`q+QhWe0NKL j>Lrn]+\u?ߎ۞ix#a#}laY%J2yZw=MeK ^)cK|Lkt_ܽ>n]5`eBϹZ99xB KqW:x8=мr 8tX(ɇl ._ޯiB7uye,tAs<:F6{n/'d],䇤=}z6ySHPJsHg)FRcZ ^#UdUPܓ-I#wAW;vYYCs[΁*/MU׆ȟ~s.;\r;1_s"5Cs+ejtrxQ &\£ZB _^N7+L At4#Z|Ty*Fsl=r76$AX}:)̅|nգPmh( )84lB= 9i6r +R0uɛi]=k.DO{g_ܹ\]ꀊ J-߯OXjpI+%H9ʲB̟T(jdW{#U3%Bo#@f1ک/$CR95+[vrc;%d(iÚ;(8L?BQ rVv ć0^|ߘ~C; ة  |noj:d貲&'+tNӄZe>Ju\''_{&\ DOtNŅ܏i&sGkA`L^ .3!1 =d{M0lO{g ^u`,QD=2lR m22%V ]#QaQU=6E98|H=^E b9ZfΒ>Czؘ̥ t?<ւl KHG8N\dxn? 2'[ӑȹ|u~Y'.gp^ʼn|)]:L= EJLMƾ|v[kt}_* w-ɔQhG%/$rsl3"*W#Uڿi[져wH(xtY$N=2 |C̐nӁgc@6GG+ H>N[xNϺʷ5ɔ?uO+sMY6Y7Z)O?"*8Fے XNZM"3{`3fKy3,w rр'<ڛ)K cI&*Pe2/5Ϋn½%Q9vcnnzgݓ0}Xe>1_E@W) ٳ9DjRzp#+t  3B]b>m~E 별KJ^j>/1+j˴^x5`j]VEBiC'bLh`d^gFqfR endstream endobj 57 0 obj << /Type /FontDescriptor /FontName /EEXSLZ+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/W/X/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 56 0 R >> endobj 58 0 obj << /Length1 1647 /Length2 13468 /Length3 0 /Length 14320 /Filter /FlateDecode >> stream xڭyUXܒ--xNi4w <'gΜν2w޵vګ^LUI (31m\]ԁVr`S{;ƅHE% 48$M@~ 4N6V`,]yyt ;QK{ @BEUONY@+Eۘḿ  `daWi.\b.S at b8l\\l\VΦ 6 s{Wx[: wLblGUG`kS_]laM Gs׿J{yG6 +`ado4\]l@Vʀ 2uӼs:_7ur[ hoɌWȁ,l[:s:@ { {OE@?SOW_O <;{c)k3௅cc:{w~[Y+Bln 4Z .o/5A^ûnW%.+lۿ/wX H:JyJ\`ba}qc_g%S ϿNFF#2w4 O_oy{@9ʢ@mZf:/whBҠ z(ĩfQA@cZ/J)6GN/{#=4)|"_ yXKQҏu7aY&ԍK?O}p? p+sB3Om@o+<:N:쾄%dȉC0K>" 4qf ⍕J"Os{`^zeP<ۊu#Ѝ (9'P"<}O(yA^+M7r 4 -GƉǕi.u*q&ƝZ?vb~xb(;A[1H&)C&lҰ$<}0WBogq K֒Jە+kY)u.|9_*HKIΏ93!PgI9Oj7{atbc.jJ fn+҅K$Z*}^2 XAdAog2Ҏ$۶E>o IP4UksQ{!nQEcqgH3l!hȜpNu&k9ȸ A3h:饁,rqZb& <,TrG#Z}P>lX~ӍJVz6dOMS)-F]ڣ29T7It{6(Q&t,3Gv#Ԓ\ IKߵ(m= ]kqx|W̍I/۳~%tG0,bi67Dj`GzOUq GǘhC=6?xp+׻L*y?F%TWj!Q, )i2*\S\{/=c ;+eߡj7oػP<`;ZO`hIHئCmzN=il 'd$9ن8wKwD6x0u};XsAz~mhJ0_7n6 BHnu)WYg\]Ei]bbFƌr8$B_&~( 7䫍&S"&kQ}A29>WK&`QuwXCK0HoXcͮ8lrSaѭYvoME T""&7o5Shc^3В#sʁN]y%h>2̑|Fے>0K M[oX{{wqk(sА3MYV'332 BF-y^O90H%8 T|M~&J௖A5T3kjQa庂QdB:J7o5*$9<^|4# xq7 $T"`AVU|""DkͦSv!-<ǩW&bZvbvS]I=HPRWtbf^=hSX,m=c[Z~7,=Nrř 2u"t;^B[c0;~@!3),ӢxeK2!6,o&Zh(k!D⠩sJXk#EM~)l{nQcjPh\u/AB);02 q5EIչR!)Aڢ'Ɨavqa?3f3=.EZJqxDrT_%=)z<7FU%x z=P;Ǫy% >V);0n&kꤢϜ^:>eesCZeObZx5rX\w³-$A CK>i@=ldԩ~:AYk,eV$ X0͍;m΋b /W=zEK¦n-^u+ =hh('8= |q/K5hh;i|Ȥ d.|(dF!9RG>mk. .b Yq J)`M3(U3VkJ Fv~QSiլQǁ=> ESnzMVi29]!dޝ|\%y)JUiņ 3$i(BpDXYcw <Ն&p;hROwS Sw -eYpm#O}&0@O5&H4[_ȋa%WcpW?C>l/JMB  6dIbVbXXqRTs6 U3Ԃ2B]@80:vyWZraJdHXcVǬ @$J)e;=tlb3oEH<׈ݓv B 2?P1ta|EޡEₘBvIݨ ky@zzzt,=m̘SH6w~+Hmt@Yj/2򁂫u{ڸ/G1vʫ|тj%^9qa%ZUK. + Uͪ GY!ߎ /e lV:e_pܒ_*bJAmhnumUwQGqJ8U>GoI!/EcC1ӌ6^V?]^RuvJ ;Y֌t.\3E+2,|h|.P"gR[żt-h o.fߔIxK\^8Ag3ӏӠhȰr4wt5bH8iE@bw>HmWXev>45"Z/͝7})ס4(},M ?>WcA]}dڥ4c6Ke0HU}\ >K s@|x 'aZSY ۧ965%c0.X9eWO`ggb!^Ƅ%x(BS5H3C90yzV^t|z.xf:˖=C,&K o(cD@ԯ}omnx^3g"H`HNl>#瞄q\_"[ 1!sbJ6-,Tt?>D'h,ba¥l뼰1xg.irۙ{-}6Ln&@FnDXxܨBJ?&/2V%-JQ#a=ʹjdy4'a%5HFZ5qdr@pg" "*g]6t=YL&dQΆտN[Џ p}~TFK0Ϛ>Vsr tR˞Ψ;عGo%U^QU*S>ބCx Yzŏyʎx &DQJ ]J4% I|b,bX WtR_$ 3uI2z{l!es{jeZ/޼D!bvtI9]=ɚ ~lsb#x3Ī-g_Ry~t%o>ls gPLl< 5JZmŒtsG 뎉J fP HsLStmm&ChG *ׄu~ r[V'=MҔ^kV(vCU{fiƅ[Aq.-͐_kD· |$4R,;smH:81n[)^rHtRoΐa+=907S, LRk79rך;Fa;Q_9cmI=,ո+n_|(REPqj, $|Zz Ar[$El'*UDd xJ~m#+"pۋ\)7i9-(0Zh_)H.|09jٟL,D-wE(DRHș8+S73h ֙-IEh;۝ވmdv~ytޮ"QvLjWX҆?9CaȋO]*=`]0lPe A[ʉíV$WѶ#Tgϑj"PrT\ ΥZz M#ICZr ~c(ϝsJSy攙cp!d!|oqmv>O ^ r\nNM! i86 `W~ah<]xt涛 7xlA l*zav>ڷC5rߍLE0'I&&*Tcޚa(4|Ur~ gG xl1-gWb4\ⅆA{s5,(:mV"VäY%m}) ,L ױkSfӉA^֬lf >f! ʥH[Tw6'H+ˢQׇCC=M*k򨤮q\^#[ut|JOj(fcHhǥ d#aԎ 5t&5]HN֞CFn1A@f^XC'SwC FWX *B\'yjXh2 ŮdǗxc8Yl+A>ZK%ZF&oa -:'e"(S6Ǥ|/<,c|.VQg_":yk-ѣh/P"/'_FCf)w;S\/hcT7D81$`idf4#Sf,M6O![}W-6a't`ܢԦDVZGy&)9kRr MVfg` z6KZ JmZny[SNS6SR[v#Iy.*,Z;,➊rW0 v,X0GP%p$I}I՟q1tfb7^ntFkd+%F2)f$QvQ.zbݎvu'fwWGn(1~,etMƾ0rS5+S:l|3È޶D\QYEV1tl2ҁG4MG_'h,ܪnӯJaAmjҟ p0t?rC7ʒ LF yp}W,O;? ࠛr~20f:9 "O>h ,JxdR3? }Yd i;, J_Mw,)C˥@u{xg*k`4;B}KRT܆M P2v`VMQ`ϳ$LfhD%$1feC$̪20{=iݚRodƫ%3B 9(ktl21R׎ccbCꏃ߂ ~c,xgZw/ԝ+\Z?R%5Yr4PN/ZF}$A}5bD5t3yx=EKIo <+J/]x]QY8cjQ n-=.?N\wɡw۝kC%A?lU(=WbOlBxId7BP_L Iiy9@KHH bKG0<*{FPHȂŞWi7m#dK/p;W5>:M>ʯ|L(0O9.X~SyZ,hqQg,gX~+iY, i^AEy?/f[7)IuM眶HLdrQIR>5x ڿ((($!s}t$2uCi@άú#P&M jmbmifZfvLp8;D]+J EHfD`趃η1sܔ@"-{Wo~_ԏ8Lߨ}"Z:a"2ǵ^P#X%Mqmxn}V{G~b#%wʽ8ZcцQn/@ltsmK:fi%qdqMM͟xnc6J_".avޟ뤘9ld&Lb)ʘ:I͓l5)Ck~ijxbTzp vLNug.zWN8IvLŲgu}JMqwމPs?meR4Qɡ_7}Iiքgh EuMkKZD{ķLj;U `zȹ6?Mx]:)N]ˇ§avq73D$tl(#0۝܅5/k}(ſ26c`y9k zmb}<@YZ/˩m/tu¨rtYѓ*;.Nh[*W Zt/1EoT$?uE+ H{8"juݵ vH+hO7&IXK6Tl+M%20Ryy ~("A2s1|8qK}˲MyPĀ! ,/0Xr;%JdGbz噜H\YKҏTI:C_;M՘Ydp@1yGk-7fFXq<2Dc kz2vW*æ1nBkAiD%>s{{0eQ2Ҹr)@h+dtGaǪaL7"n]--Bl#QP5 UE&RkMqMtVÏ`ٶW^o^l?$-p#HX<%!. 2@Ӆ_*]K:J5&KP?Ra#;qK8`DML $z: Tcmf.`%9 LC"~U[;+s0R!+#.CC]OΆy&;BZ+8;-ID˕jNųk1B}؏ @W,k:=vRC H%q'|O>N0;"^S5L!Lk q^bjoA*>_ %yD_ϵ?umRf1( 7F G%R:1gč4֙1HTd7p:vwEe@/<b2ոJUwyi2oAHs2 at#a|C.$mp$ $lXw?Qhn%( {!d0fUzGP!+<9]`_[e?iS?re)Гj|dVpeׇV*i%[;էn+sP_X;J1A +/ş5P`tm$^@\R=!1v$m%S75Bc5*: 5~( 2˾ "ܵw%FN<"*`( N_;@BRFdZK[t\0U%GwH!=B"|%#U3\/ROŤ2CAY2: IX֧1UYT@i"g>d>v-[`5*"*DE>]r[]K@J<8Ň(U@QYhnH-Kh2Xh BUo?L3tϏh93BC0r5YJ'e aT:΁)SQ.KެBVCp3$\SlGOq@^l)z%>Yʥsӥ"^ F'IkӫkH}[ĂXDJݰU)j)tg8>͏,@4X5ZMsI z>&Yjay BƓoPd",9Xq_Fe!UH=v휑{$qm qk9Hy465,6O BBZ-nDErȦrQP_w_qD=Dץw/̧xz[N8ZnWv*><2q:|aK;";רy5qk'k`WC(Y[ŻpҡrQv9}[8z(wBScpIQ+%ZфDL3J q|j.֋"[ʉF.ѲY "rc,'o*.VWZv0h1'P9͉}1ٜicyq\EiXfW^kyK`"t, u@IԵN (nx*^&oX_Ḑֵ%l[:[,Eۥ`7Q,? )Gu1c/EQ/Iת*_ /m,WE j"DLa"JLSKR=w nYSBk{owA@kp{8~5{'|}*=健 u8w=?-Ņu c: ~ GǯiiBayV-<#WF 0%Z:N{\ blAOVG#64#|۔>lϑdt wR/ʓ.w4EU7մ*$:7L3wPU&4=ˤ#68WwP%}#k1%M*yycP\=.Ox%Hal6ı2⪕,cr=dhD>Q PCºQ\} 2GĤi5~n/CV|O*c$h]+0[F jH1ea ± qۤN-U 3[Y"`T6ߺt_?AjJ8 O=e/]cCΫlTXtD$9zMkVf/FÜ Rf yj5Zfk?G$qeKI&WɨdJŲy!hR =K?$ gdBP@m$M ֲyi_M  VuYZ%XB*fIævy[y(s <]6]VOİf{9-?0{nנ,{dc?sbWԌMRu>@pnewAx$ q稧( ٭\4ݞݡZ4qag}q<,̎85ϖ%OE) lʲ+UVו fl J HYBr^~:-0dQX;WʋP$QvlJѶ N}5rgqg91=,RI:ώ1 Y6D !B(KnW6]߶D-\VaX ɉ [Րj uFEa>':AU֧Ԉ(X-Ok N SRDa/?5KF,yHJsXXmSS_Url/U+gAXMT3 O>엃!J>~ТbwWEAQPI%@!J[:'BpM_((ӆɥ5TV3ZsQ[Jse{LT1{6s ҁ>R!)vF@oyq ӵw@KZsU#+J46Wz6ݩ>,+ůiq6i4E˭N`K3Q sjT(˺g:.3aAZ*?)3%eUr'Q rAST%) =(iI2Z}P iW"mb3ζzmD<Qۈ v}!@Tk#ZЙpMsa)Eb}="W 5Lh.06l?B9KY(zt= ?<GC>媮鯚h.͹9 BUi/&!/noZ}hp08_&J$Hj88i\]Ή&2l潫 ?Zs5 w}$"%vjB[/^T-lewۃ'K XD4&Xi}n=}1#U,`sI$9ɩ4iEpSą__V2v$y@}>pV c#ȬROpZ/a@AΕf+L׋:\-bO=Q==7R/>![ #"Q4/BEDCtZٺM>[®վ;ٝ3."tLP8?o.PӇZ<{M$54vG(`}]j[YProgB>1 uBC0H!A'8DxWZ=[Ǟ4Fї>| g}/KrR0 endstream endobj 59 0 obj << /Type /FontDescriptor /FontName /UBHHMW+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 668 /CapHeight 668 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/A/B/C/D/G/J/K/M/O/P/R/S/T/a/b/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/j/l/m/n/o/one/p/period/q/r/s/seven/six/t/three/two/u/v/w/y/z/zero) /FontFile 58 0 R >> endobj 36 0 obj << /Type /Encoding /Differences [2/fi/fl 40/parenleft/parenright 43/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater 64/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U 87/W/X 91/bracketleft/backslash/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 124/bar 150/endash] >> endobj 19 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VZZXLI+CMMI12 /FontDescriptor 45 0 R /FirstChar 96 /LastChar 110 /Widths 38 0 R >> endobj 27 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HDIZBO+CMR12 /FontDescriptor 47 0 R /FirstChar 48 /LastChar 54 /Widths 35 0 R >> endobj 12 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RHXVKY+CMSY10 /FontDescriptor 49 0 R /FirstChar 0 /LastChar 25 /Widths 39 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ENTTQY+NimbusMonL-Regu /FontDescriptor 51 0 R /FirstChar 43 /LastChar 124 /Widths 41 0 R /Encoding 36 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /BaseFont /APJVMP+NimbusRomNo9L-Medi /FontDescriptor 53 0 R /FirstChar 2 /LastChar 121 /Widths 40 0 R /Encoding 36 0 R >> endobj 23 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VQNEPZ+NimbusRomNo9L-MediItal /FontDescriptor 55 0 R /FirstChar 65 /LastChar 121 /Widths 37 0 R /Encoding 36 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EEXSLZ+NimbusRomNo9L-Regu /FontDescriptor 57 0 R /FirstChar 2 /LastChar 150 /Widths 42 0 R /Encoding 36 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UBHHMW+NimbusRomNo9L-ReguItal /FontDescriptor 59 0 R /FirstChar 2 /LastChar 122 /Widths 43 0 R /Encoding 36 0 R >> endobj 7 0 obj << /Type /Pages /Count 6 /Parent 60 0 R /Kids [2 0 R 9 0 R 14 0 R 17 0 R 21 0 R 25 0 R] >> endobj 31 0 obj << /Type /Pages /Count 2 /Parent 60 0 R /Kids [29 0 R 33 0 R] >> endobj 60 0 obj << /Type /Pages /Count 8 /Kids [7 0 R 31 0 R] >> endobj 61 0 obj << /Type /Catalog /Pages 60 0 R >> endobj 62 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20120926163133+02'00') /ModDate (D:20120926163133+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 63 0000000000 65535 f 0000000708 00000 n 0000000597 00000 n 0000000015 00000 n 0000114203 00000 n 0000114035 00000 n 0000113526 00000 n 0000114375 00000 n 0000003564 00000 n 0000003452 00000 n 0000000798 00000 n 0000113692 00000 n 0000113387 00000 n 0000005914 00000 n 0000005800 00000 n 0000003678 00000 n 0000008459 00000 n 0000008345 00000 n 0000006029 00000 n 0000113107 00000 n 0000011159 00000 n 0000011045 00000 n 0000008574 00000 n 0000113861 00000 n 0000013771 00000 n 0000013657 00000 n 0000011286 00000 n 0000113248 00000 n 0000016609 00000 n 0000016494 00000 n 0000013910 00000 n 0000114481 00000 n 0000017411 00000 n 0000017296 00000 n 0000016712 00000 n 0000017491 00000 n 0000112722 00000 n 0000017551 00000 n 0000017797 00000 n 0000017901 00000 n 0000018066 00000 n 0000018538 00000 n 0000018884 00000 n 0000019454 00000 n 0000019928 00000 n 0000027710 00000 n 0000027942 00000 n 0000035395 00000 n 0000035623 00000 n 0000043030 00000 n 0000043273 00000 n 0000057706 00000 n 0000058138 00000 n 0000070610 00000 n 0000070940 00000 n 0000079147 00000 n 0000079418 00000 n 0000097421 00000 n 0000097899 00000 n 0000112339 00000 n 0000114562 00000 n 0000114627 00000 n 0000114678 00000 n trailer << /Size 63 /Root 61 0 R /Info 62 0 R /ID [<9B9B33C99FA9AC85CD10136C68FA7493> <9B9B33C99FA9AC85CD10136C68FA7493>] >> startxref 114944 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/repfind.pdf000066400000000000000000003261401211610345200254260ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 1894 /Filter /FlateDecode >> stream xڥM۶_#9c!Hd{;v3u3RO'Ɂ'%B%>bR]7of%9SJV~*VbxVd>Ͱ 9wX+NׅYeųhDގʹvfx Tʾt'}1WJֲd-'Qt]nX!].3\oޖ|%JVJպ}7жgwRus]rVfQ(hzzfyӻAVq?&U4Oi}םDyrd)Ar. pN4ɫE󩗴J.Uڪ"j]qX9ۚ* 2i׏f'س7v +0O_f%8%])Vj&eYF4R{O7tGg zϑΞ 1Nk 4rphY`9>y # ֋(? F.Eul!u׉e98dٽcw>kH/lɬtjY)o/Yp<1%[bZI@_m3cGVq㹁Dݸ /BP:P ̯2\# Ǟ"dq2灷#x\WqS7b.^F 5~Y$3[? [;۝&H+X@k>2C*܁*V*B頊n0ْ250䏈:Z{\?^zr7"ܻ1e7_y0B # X@ǃI@ Lϥb*[b;wp-Zh$muk*UC$oHg!g/#9VU2+eE^g}%`9b 3㧃Д2{s#vg yGczB-Gn\=,Qo4\!( H8Yi՚@DL`GDRw l{g\klhnK!bBqX"']RQ7F2 7R*4f$voSaVu CBͥ nt>q~hkQC ;i,&Y ɾZ*u#&+nq~J|^Naԛk3,5rVit.P.R;/:ͻUJS -Уg(Q'*ɥjl-9)k*}HE@BHL=HhTk17s㶁6&xQS`=0K,ON')(F@^+fcJ Id(El@OTawrWn7:BOS5% c8HhOg!ݻzCs^-uuʅCji8]:e(8J&ܭRPttfYw̗E"ЍDWҽRCN)_7_sxiٿ$m :!ra}N+XBޡ-> endobj 1 0 obj << /Font << /F38 4 0 R /F39 5 0 R /F40 6 0 R /F30 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 11 0 obj << /Length 1191 /Filter /FlateDecode >> stream xڭWK6QjQZ" Z(עmzUS]xў$Ùo ~w>+6D Jx6EhI7b6n 8ٝT'nJ~}w !䜚xe0QĠ$HNuW P,`=9{4rүSʓiKC(D~<c>; _0T$H/GqDqFX%*s۠2u46KPpFcY'ϝl*zʬЋ͖1^,##h!r$pDQPsܶZUP1Ƌ."B2Zp@ D,wj_*)mQQ 0Jqry2`#V(2 6`=Oy7OM|'~2GcŦn e'6߄3)s"?g}:%I7gk HzZ*T,uX^-M@{ ` (MT]~nWܮBz^Γ~pn5נf /2,J DPad5e@5pUmPЉҷFϺV>P*O)Nad-c;eqR7h2e _b[x,*Kg>JݖYm0џ^E[Y1wslY.Z2_Mù1S^N 4_i6#:[B|P{=7t7mVO9 /O>z䃹ZӤ"%=ocm//o^ƼqxP]%Mu֚y+~1ァnNI5ílihd(sIè|A׾jJ+=вj U ]\DXn)VlNTncpn,'f|Rpks61s#7nX JUg 5F~Z6ڏ0WzC vp{m *Qs+Qp[ԗ8'gn4~lr3qq23q8bx,21]dASjFpRgJ-]L+ڤM߰}{_%䖛SH.χ*WBW<y/B`j endstream endobj 10 0 obj << /Type /Page /Contents 11 0 R /Resources 9 0 R /MediaBox [0 0 595.276 841.89] /Parent 8 0 R >> endobj 9 0 obj << /Font << /F48 12 0 R /F39 5 0 R /F38 4 0 R /F40 6 0 R /F30 7 0 R /F15 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 16 0 obj << /Length 1476 /Filter /FlateDecode >> stream xڭWK6 6$ (qfn=8Y?%EʱSMv=(o~闇0[)%8֫*˅*ՙezޭjӬ7Ao7IѢ3yѿmM |\m(Kt9JE(ɉT).2 Aez d*c<E] M2n8 tVq`c4P7:h#d4OJ $a8"Nku*jZaCH<ҾTL3Tca@a _]?ݿT7eK1Iׅ}]笊+DB|>~v1* e<#FYoZ BŭtwpՖع:媡jY;]*ء ]c-$L`H\}+3'g>e2$LGJݻ3Ji#NPij|=~َ 3nZEZi@, l_&E'Kٙ6xפsRs"'AriLnƘoJc+FHO,`S>P"Ok>?gHlQ E՘3f,gh,u@>jvZε0:51t9pM\ xq*c Zz5]1`3Ɲn0 j@]'3UWw' $35,Ugw;\fmFEpZUOlkQY=F:}He4V3MXd*׫Bnи/L=Yn\_}r[: dBt"wh3\lEPW6hUoj.8 9pVH.> ey3 ]Y+^>+ꎀw_Ʌusx/6RNu}8O-!, lgX" bEWp5N6H6e<ȒY ihv66YSR+\]E+Y=;p:T ?MiH>Pc ) U¨)Q8(B2$1!&i`NEҿ)'7K@~=t h;lo "E 15u0ec)6v ofãxm`O¥7vf0͋MS,\9lZڱѲ^pjhc!5lG]tļ;v,2ϟXC_>@]ʮeTcqڎAa1+>٘\[IE`e.ϟ@Ee endstream endobj 15 0 obj << /Type /Page /Contents 16 0 R /Resources 14 0 R /MediaBox [0 0 595.276 841.89] /Parent 8 0 R >> endobj 14 0 obj << /Font << /F38 4 0 R /F39 5 0 R /F33 17 0 R /F30 7 0 R /F15 13 0 R /F48 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 20 0 obj << /Length 1939 /Filter /FlateDecode >> stream xYI6WQL\Ef`N AVTKIh 802'Izy7\mD9nFTӍ i,779fKTfҴw7= !H AW@31&+qٷVᬮ[a֯*oڇ3w<5=R$:u@-$B=H0Q8h_["K7` 7_ti,Co%TgNg~KqviS\{տ|S[k<9i}=-ك7Zx5ut$ 1h77E&7uWŖC<-vHU/J{0xmZ/2R9c< !|p 0 8{Y= O!88|_Vg%|``#TK5ꑆgH\H{D#AWy6mwJ9*E2GZMඣ2pVw;MQ ̤8B:z03Qr)B`J)~(.Tt>PpP9LRw88jYdP )$O@ 犐Z.4AM)*7R".8ŀGbf# E懮GIe^j\ P|4ph8!c15GR91ң^RE)" Q1) i=睓]86Z]u(t~V"OίGD-V?Y4#>';X7}It]&CK[tETO]t˴JOj2Bk(@WG*>u]VW ҦOc]jIb %ӽDبT*GbLhg8g!8I;GdD)X͑ i^ >͖5󫦌 OM 5P=l2Q6ǎԁ.9p `C}9>!Z2'#sOvR>4(j ~] W+5BK:UM?HN|٥_ܜsxɱ|%}MR8+y>Abzpp1 ӂC~9_ 8Eb&ğ}a(\Vjx%݌tͧv5MX%L{yMY\MוiW;v' jV>9Ʊ7NvߐώD_D_DLDqRPH㐲,/PxIlrӨ=I+cl=ģ8 9 6^LZDOŧ݃ڮ e8_#0ؠ!)&#N ^:帛f=9BrrKcjbT\;F9FuoXZS֡l$8N1RMS,jtE-ѐ8~яCDeAwů8'ybHiKzYTKC3{ViL-ݻ9:^TQ܍]Ss6%$ǤP[e`GZq {[F˄]?V'cП φGj[K)"EA9;`Qs[y( endstream endobj 19 0 obj << /Type /Page /Contents 20 0 R /Resources 18 0 R /MediaBox [0 0 595.276 841.89] /Parent 8 0 R >> endobj 18 0 obj << /Font << /F48 12 0 R /F39 5 0 R /F38 4 0 R /F30 7 0 R /F15 13 0 R /F33 17 0 R /F34 21 0 R /F28 22 0 R /F40 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 23 0 obj [531.3] endobj 24 0 obj [826.4] endobj 25 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7] endobj 26 0 obj [380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272] endobj 28 0 obj [500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556] endobj 29 0 obj [272 272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1 441.3 461.2 353.6 557.3] endobj 30 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 31 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444] endobj 32 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 33 0 obj << /Length1 1818 /Length2 12731 /Length3 0 /Length 13880 /Filter /FlateDecode >> stream xڍPZ Cphp,4qwww{dھ^T5 !P ,''`aagbaaCR-#RAV|eh~ 嬭Vv++7 ߆v|QG1@ mmGlmb25@cD `f l X f@˷Fk#?!h`>ff'''&K{&k;SZlPƀZX"@ dBd` ,@F@+7+c-;@EJ`X.p+og##kK+)d(2 + ,  @onVu@6`{&{_=2Ŭ?[[Z' ݻ delW6jV [lDd@0 ̘Jb[7k[@ 9=[` 2 +?@@7X0ck+ ?YEKARJ_-G)"b pcdg0qXYظowK @OD)+8tv}_Ԡ7?ed1zb#_Q_+w[Od/7B;ߖCmE🍖,V l$VoDgd`bG9A`#iYA=05BGʮƪ½-ĶSyiZe@ŷ$DSm!PRV{xx܍(w/ qQfHw;ܶ`tdݵ] H5$ώHûLk`)a%0OAb-3)3\.^DiR)ئAAxn^Jb9^ֹP>r?<5لV[rنS.ţ2m߁++'rw(J'I\4qsIJ_A5l6Ml< =ZF7# x<Y,?lZD'jc}I~Ygb /~c/)2a &*Vtz2l:&:)cjd6Q>.CVUi\֝1Vd*X3+z T4e$zzsiqu(cBGC.8QE)‹[a EͥIGB[5zDٙfyǼЁ1)0èI-*Lzj)C9H^G/mW kܝ{DBӎ])ZV@䵘JQ4cY[kY]*H!|~f9&7Cf7 B&$n6:{S^2Olk^㠔n JH>VXl`i[&y~N#&VEYUkQX 1Պ7yT7tV3b{K].ȪvPhhfRDW_Kx6E݀R5e]%%&@Z#bUG1HGSUأ$ffx?Yf",4.4OdL%>ϒ4XuetI0uq2KqgDq'J<ͽGx]ρݍׯq:g]1Y;#h<^d˲᳽rǚ~ЭnQNZ[N!fwXqWز(KT=cq%_eedk<"FjGgf.{Ac/[|TY Ԍ(FNmwbVIE%?jho6g4}p+W ASpE 6}d"Կ!d*CXeҲs{˵u)$Yةlպ5Z1!Y~ m˂Ţ#[$:5%-qn4Ӣw_YE\peZ]Asf!sNd⮱f3vb:J@u DQ/ 9Bv!QA~zӖY%`jݯy|;7ug$:? ڙ7Q49{2+8ſicMOlEΨExOSdWb?SeZI&3kr*9Ө%m_,]G_' ysux;K<1&DtX!܇K5_& CHh nO-CpnSo,*_aFE$(㖙9HҤx%Q*H_̒ ;=;w\1m}sʼnib|˫1tp& ҄\%5sȔlp2'˳W 6=#2,{F'W[8 iv\XOn L;M?qsB NUڂxFhdU'@c(}@Фa8o:e_>0ъȺ泒_@SRrWU o-m0 ׊OsbPO&Ӳbvsމn/뤽U|O+Y#av>g>SLy4v\޹1/enT|RT^`0;eP@|CA0)N\^Qu߸֜ۑb$Ğ+l$߇eشRsBwԻ\B!"5 t^tg v* ¨w=EWss0?Ae!W{U7 s(z-Nb^Ŗw_R2b \FR>To$',_ O+i#N"v(7?+=/IQ KH63N[n2kU0'8ZkkQjѠVXmk~Ƃ%JZ4²ujdϔeЂcKNN!+?b%eIe`=:gu:ncPs .? _hڟkniFŹEOyf_}! cWِn\:)9u5hLe CGQBi40fg!1l1F@~L!o J/%^f<6il6-CQy#)B @XE/̿}j]t= .3l>%iyC@La‘F-p:ȇg}=yܖwN )ȕjSe0䱄`f'mnٴ߫t>N 4y$ mcb9W}}HD/d}4l[1{3gPgOgrE l 1wh DhcʤHu£>@j".[}ESXfZ_yʼnֳ<gJ'+}8A] K5$V|v6!83p} RSɱTc\x! !WE؟75O 5/պs}RIrEó:Edr ͲN_EUyBdzch>̚^=3G7J QTY^Ŗ/n bYCKپw.dH2;==v1唧}w911Gw7ve'Lm F{ J1b^wn~  ƹC 2rR"8SUA7E6-JnXBQvbLл;j~[ywCӣV68t}-٭Vy\tgJGR~'փyk"?C<8Ť\Mו=[sfr]) =ɐlPi^8+(޷Da3# ]$qYGclEm*񟞍,ЋW3W^^? !?ᅮfC& 5>|RKAyߟCdm^w^֡<8bhKR# Q!r)ձ*mDGsnVb{gH_ B6=DT"SX~z!xͮf\ZOթ%sǾD}k_͑;9 ߂t_*T\y*4JdH%95vuڴX7Y2 N>9zKx(Op.D?6޵x )kTb`"ΊlEŽT&E+SCzxΌJE>`"Oa&k] Oa/V}~as#l wYq4>Rf>UO<#ͤU"j܂:Qc/ȻY*iZ@0)A2ŘnL9>טp[4bL㸺jVj_bpݩ3qԫ?N40|^[gF0ǎT +,-2qm8ϼ!iJ@퉟"}ud?ȭHs5=0Z(-lW'b)A(So*UPZq|hN/JqXr0x}46: |bd6L1-[wQOOszdewuoN80].a}IWSW5MJ(GnkZ`$S,oJfߛmc7..L8a@lv!g9JcHu=sCcJ&뢛!<0f*#hM(x>u$}.s;*Lg_C^zʀ ,qz^,5GpidK2o?P%#ds.a&q:4>\MCh'5l%贬@!e+*§Hrp QڬЏ["%͠åti$OTUiu [ 6Ea85&k(&1zv:u%*?L s[1OoZuDL"ƨEn>Zs@?2VKQz" xMJCYnwʱ!ESt6W͖j,d FWn^hx3`ȟ{{{{6d%"W4%r\\};\l٪A(NZRY1GB^ZdKjOyĎWɕIQ-&ۃq[n4?̺j(E r,}~,W9 j e'?HP`o#P.Fj` jTM͹& 3AOy4:U5gq+~`Xn?嵴6 }}F݌OFd}`b/֞ep=yTsץI࢒mvpx@M",'ϲ`eQTY%:hš})'&Z(ڴ@uM⎵}Tz=FX$*ϫE(R#.ȧ\$9Lrt0#BLjzw늨T)CRp/O> eOvl,|][KMo2䘨EW+YUyNLN8|5@e 6q}6'F^aftKZa/Ta6dJY@/$M~Iq|%=Wϣ^ӦR:B,6kfUꥴ,wlęP^^w nn XJ^ 6)ɏ CM}\FX# ɻ[)'mjQt\Űy$Wc,J l=}8q.{|93L&)֥ JƒZTdޡ_olXdʾ6a=@ug҈*c۹s#ۊᨀbM!2AϨa>bCՋ>CǻSq-t mE@D" ڃAj,HRq;WgߔiWfl=f.;䮉Po+DO Keb&[މ1ZkYs2}#HU"O|B=dVyޥgI>lŰm*R˝fũՔC'on"'o1źo1ϳF0^NQ"㱤3V4s/MH- 7|gQ݈,Z?ٶF3}rj[Tʼn|^YMc3Zy9,쾓ٜfw}A Ft4~8S]7I̊cϙAic#$D278#!쉬ԡv.sOO]G9[KQח~ݯ3glzp5:s7(fhtE>V0 jf$s&(j9C ¡CaW gX5,P=H"7](c b4@S9UV}.q5۰ʃ2?H`xouˍP"xe|š\gP^_2Ba8x \#X'CEN-gc`TA~ַ!B~%fK CGo@+Tn5I>NҺ) ̳X\kiqʮ|{HZR|~х76)\c8nܲMÀC¥QW QR0В?{ZMaS[ 3B bX*4qEULb:>ΦԳgxU'm:ʍ],|+,t)x_J+?uفOSsj[l:Xt5^^Iy-HR *Ñ0K#*M]Q҇s-3)LjWWAgA:G|f*q}a[Lr#i$qfmPnY"Gv'C31rQ?C}+Cm[!?]ki)Xլia-D%Ƀ7ZEo0$\}چ7Ql'_u R]Y:DStfjk۞?C@/ cP[сhmͻoV1)2vy1H!&l61%uPQI;n6"~wq wXl#͏ 鮈>|,@>:~ h{1(<>4L[r69Χzc*Y(4?|榩c> O!!SdmAJ.å?z8 zZGl t B0/0#zd7Z4a^! &~i0 uC0|!7Fk28݌'Z=Lo0g WCLbw}ISnwLP~"}lKp&w>A/yRި6_Pl7i4[W٣RPDnUL{6Kfj ]z5͌^UzVBx1~Hӕ3bVBWM3 o3M{Y[*-՘U "͆çs%>y0+{.(LpNi[%u޷vd埗7ERub$ }Hq=(Nr"bB1ؙ @d&"߻|18N8 f >=2߆BԬu1(2z-Apߞ( ְ\a>MIƒJ۱"[IaMpҨMuo'!6UQpC .W>(9cvq!,'  )xY#q!R$,rW i]щb8+V_jZw[ҲP*k7^] k`S~ k奓v1K98xحsݔ 6pf1cyX|ai;֊M&<s=>냚 9HhAӛ4yqnyO c*n>{Јb ?Qb|}VysCUp}1 (ُ0iRY{15E@P]iœK/PVJUauBqe#Wp%ߐb$@`)L"%kx/{7&jNMs4nZbM?~w: 6$bg)ihV6u7ÀB1ikSuδOlD\28ZwwsBOU>!KNxxRFzU݉43aJ&(wkhWjtߘV.gG U&m}Doе$PmĶ^%Xr]n+GmB j,7kLuXNbiGA+^A_h태/zQ>v,n*d"ɍ?i-N#&]2r^ϡl)fzH,lO,Gk.%[*> ܑKDjG崍7wr 82Rldllv7NwHsCu@؜+$Qab!B(iP,bw!~ojq&C\'eYd Tu^.3qBQ!અ#ՀZ!\g4 c4R,evFJ%R1/]Mb9BƯ&~n7[i+)q1ڊRX*i]fP! &iy\jt7L ?en54tuF|F2_nDu\ȯ%[hhuqQs8VafL (7ĥ|Vn´64wzϷ~L)l2( ʙe*P 08tG{ '}12(V*we3X{O=J0b}țL2eF:bzvO ; Ebc: hӊѕk8vO 1C!(9Jy},+/k1宷)r/w jʕp*0̛>clX+ c ?A2gWAvpH39*#ˤɢ zM=IX;}Fp@nݮq-l TV3Dz95V")KABOASEXOjU7f U۸z=оI΂b`%N-&[ˊ(B.N\[3&l A#-yLN= endstream endobj 34 0 obj << /Type /FontDescriptor /FontName /SYOHIV+CMMI12 /Flags 4 /FontBBox [-31 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/A/B/C/D/G/H/K/M/N/R/S/T/V/W/Y/a/c/comma/g/i/j/l/less/lscript/n/period/t/u) /FontFile 33 0 R >> endobj 35 0 obj << /Length1 1548 /Length2 7009 /Length3 0 /Length 8037 /Filter /FlateDecode >> stream xڍT4ZE [Ĉm%mb0fF$z {D"JhQBAޤ{[5k9>ܜªH;m$#,&@(Nm`rn3(D54a` .Oxb1iy1y  D0{@s!Qh_|~Яr+ =0 / >E' %/*%vuA^0u=`Woe"'oAw\6kw~' @LDo??`_`#aG ܾ#b`D0{ap.۪F0Ny4 qqJIe <: [wg]H/ aSJsjIA`P @ In($ (N= ^a CÎ׸aX= {bqG"ꯨ.*[߱[X$@X\J '+ B ?gCp@~K_2<>ge([ܗJ7d 0s7zHl 3{0jcPE8Fmjo@~[.0ŀ {Oq[j Hs'.% `or ^RR_1܀C A 1N?&Q91 qDo\ow H nFHDq?k @{i"N 7*B @0ֿ̉( M#! ε'ժl^nNro?CwxQWe/US^\yw2w45٨6׌c;u}dWMT6~wpyRӝxjbJF§76u)NǚXOqeaNf$@::I$+Qk"wgDܽ%3;8ﭭTߒeHƎUGb-> } z{߆{LY^arVk1gd[eLA.S'>˩"c91q z"sx" 62-Y @l5[:9fzm/pjOLDzn w!Qw{W[խ)9l=Z؈YcR2s[$ )[nPgTmyD}X/5-Pȕͤ)$";m"X`|*Dw`^`aH-jJ}#:l;_&l{u[>&GNk-dsk'`RpڤawRky-z?lEX(X- 0DkJ5oQ﯉U?Z*zg|]Iވ{}I= gs@:4*fS`̃OS̗;tz\sxx+t`Y}%SDю0g2HdCšϞ? 'Ŵ o/QݳnyAC~rra?l-G\0DuX=v16}k5f%L؉ g tX vFy3$ z-{ Y\zyWgeH9,{駂omO\VHr,{7~Q}Z;nTjK$ǘ.% K yC.|;?܃ۘmg5oZ_›q|CN6JK-c5:W"ӧFA%YhcygZB̛*V.e})֑DȬhwLmt%2'i\#ւ}IL2YXrr aڥT3;zw.ώt! \ռpe/#iZidr9j>,=.M|L|nuN5OwvC?n~f*֙,vZڛ<`匇:q=C&=! cJgJqJ8X{17cI <|IWEnrfO8')Gh4%hӂm&sxZ$PwRPk6N.*{G6866$#nr*Ћ%2󧤹M~^zdܲ!zliBJ̀hrAdh^Myd iÌ~oCbB ʣ(*}c8y*n{Օ@ɤc̥z6#"㕹-2+,#{B;}I[0lEeGjYcX'rbz;x #_UBOLm01 I6՗Sޢ|82x.Mjb#QˁI7O?OҤSs*X7աx6Sw55CϔMz9|xj|e >tͥT+g+5 ,;%ںP6U> Ө).O P`tPý^<ƵtODdT2E~QgO [rcg32E\x.G[T1JPna,!/^ۛaK؍ է"zTVU3Je^uתyro|HM Eur\-bBwSF!1SӗnTqRH~q<sȌdԿPwFvMPӘv%bZ9Ϝo6R^mWLd>חGw&6 lngw{\u\&>u{:$gf{6TI')h⒖~$WBHȠTweu_Azoy #60ɾd!ĩdbӺgʌHcSJOQxcw6+D_r2N~LN=n~~/T@>kowfh.(Lخ%Ys5Ey&%i[vRtdR kLMXឝrmlOXFn2wد5ői7f07<ٶ}̈ *ǻ)NOZEh0BY vɏ:sݻyU J6%@ ~z:r1!4`QW1#y%u.]Atptk|#P7Pjͅޠ>ZhӌS-Ub8wZRF_&X4d1/tqOڣk}S& %O[ 6&vD-P!h|{1WxoqT[W$]/vVu-z-~ny^3; 0 {eCK+cyG: aS[3wHV^/F;[3/goA:z%egcI&6{96 DO4PMN }jT$c"X;c2W^aO&uhh)7B0SMS- <ATUL_]{o+Ji ^G.XĽd/ _\\r ~GHq5ŶR2Ț E`;m;+ݰW7`9}rǹi%8g ^CΘսOt`=gC.Awz++ vcDsV1=60Db.{0՛rLR7?`GGAת1LWsԇC%=,K/ J`"X"nx+qNÄN|S${-fq^sx4Emck6WIpr)Joqhsy YD:6Qiֵù▞+6Y9) 6IyyQfҥ۞WQ"WHxZGŲGENmfvQ-9eW wh7>ދ&|/98-f;FQwVlJ}#F|Lm'ήptη,rX[^YZuSS' /P7Ӝ+F^I=nY#:G%xM : ʹ#KuLG=m9u7 C/v`=N?ŶFSf&H;$h-ښxLeKF6x\ @ #M焈\RGxU/Ԯ.Y߹xFSGsXYӏ UWyCCUiRu 4:Of8j>6z|TH'ٗMBk"\?RB]/SpޫV%: {ek jKDU#2᥿C&eÛ6,՘LzYTV2Pρw6m vc/-_lhPX*q's x#(2fg_"b~=~s."* HJʪԮ ZAJUnxvZ(SFFR531-u7|>֨z" 53m*P #6i QOaJ =ӃT``[a,Y;젧0u-zI' 0\6Ǿυf>uҫ`hIbBjXQl5g{Λ DI"f&IN?}{dŞs;zq@Ϋg3՝{.q3RN )hEہhhV'9OuǑ$_=6Wh^*dRYrՋf#Z$M"R~=/R+-SL[sxtLszpZz!WAiNچ!37u5w&( ecЮB.Vih:'lÿQ%XSsz%\fc 1J߄V'۫jzbӆ =6`K{׼sd?A܁k3"{$s/}sMn lc7L>}a?8-0I*iKqԗ]8dI>9`m-1q+mVɞD&@gM¶1l+U7rz~ (WC]L9>kPJnj @Y-<85)Zى@+.oD @gfNa lV˜6 ĐG띦1Jɋ6&rb_ Us&~'>+zoV'$ YC&\2N3{c/Abb{ߜpLΚu:Z۪^9DDAgDD{^3ˉ{jRcmXb8a5gn!%jMsxʝqe'Y OtG;yt\Sq%&8v,NbeHy]e߻G S&]IL?RjN+I!F/@AY+\Su%jpf^'T.xXHt֓ nrnCc4{gd懈2PwD'Z[weٙ/q/=IED$z,e=tK -W}N1 ͂u-w#Y l]Lg0lkY*-KiiIr n)2XBf?3!7< _ 6p{Y9ITCu AUvlT%!J/.H]9M'Ly`aHԈuCX@n܉I- dVF|;; P2T d_ӝʗy[,5Ͻ,];Z~J_ATZc~LxtwUDz]=[ctWo :J\h.;dy+M [0 OOQeѯ슒V_Ϸ?ϛƐI^,DfsyVxamҖWUJV |Q3{;n3Y]$ճ}]U:r栗>_ ~~+]+|H:]Z]3Oͽ&f\>WMT&/+NL1oFkW9E:5۽Fr㭘N6sQާ$Ϝ1 U3aڅgT`9Ha3=1=wqã)4~$շ?a-nSs=e(Q 0oF?_2ftXPŭrkonn$c29Q&lcGzr\O9SeG zD3s̐vxeb/u0M_ x`@oGִ,7 k-oH1~kL{`㧫lb$/<EpPJJA,"9C-Zr6kOw[ҫO yEǮYM-W_}U{ ΙJQ3Om{HғֳP:?ݵVTqI(Mi endstream endobj 36 0 obj << /Type /FontDescriptor /FontName /MRYRRA+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/bracketleft/bracketright/equal/one/parenleft/parenright/plus/two/zero) /FontFile 35 0 R >> endobj 37 0 obj << /Length1 1379 /Length2 5943 /Length3 0 /Length 6879 /Filter /FlateDecode >> stream xڍTTݛAJ鐔sf`f.i锖nIQw97y>ea瑵[0_ ' `a1?,F`I7< Bm :LA@APD(*+(!M^F]{_K (..; F@l@0&vFwApP( >>^3 z`$ 9%`8@v( @0 Npقto@ #XnW.gBd v(Dq@0_ ( P5:A%Y]OtHEB*dE< C! ~O۠o݋X`pk;[7>C gD`WƁWq/oo3~>.pbF A` @-C`TGvѓG@<fh~,ܲà^.6oA0?/E/]oamA<?Uavpw ?9\8G `6M)U?hQrB{ zG V& >!bM-?(Z0{ߗA*A<:kP GB~=3 ?ZqB?%H~h)"nKs""@{5GShx~;8<|ꗑ_m~oe`isǪͧtfԗZ$_R˘F5KeTdLHH;ʆ^kʛHirIҲѦ[.;TxtNҨK'3CB<)z_Rۑ\*KQ_1>pޓX%9lE+IR`O<ƴ3=ɺv~0B "'#sW8~o*׌ n2hb(kt/h:qœv$^[@Pl.PU~fb'6X0S`f6a.@tSՓjĹ9嬏=F~I#wʃ[JPTgݶ{; sJg%Wک|{4a.K W-B&ÚqhD~ywy ;HrDr?m[0:vCB /4#2t 7F@Ut.Fu~?}j R CԴMJM cG>9^ '~\o4ƸE_<2[@c1,}Kpf9Mxk^j,]K=zwO@2 *Gօq2.z-M-{v}U@$Nd&`ޮRrQxNKvVm3oqf{̎w4 "~G<5lqnm9zƦߩ桛D=^ lH$Da#IaWvWkx-MX߽/҉# t6&4T9zӨNoɧ&.Kcӵabt?Th~1@=J"gt5ƴ1l%8+J:ҌM 2hlwod566B|Df~:]T/'[!YgnH7ݪsgr|˹l,~{MMwgH[AsRQd򱼢Z9ssSaQb Qs[/|vFqK חz1Fe׾'ä2]cȻ"i1'pKl3gUs7X1Y3ra:vL\=ֶl{cbOՅ>Ox].;gb ю Uc}&]7@hy05o8-D`q3#vMF+䍰B9%+G+&nQZ&fuXl(TS +wc#2ŞU=B yG} J֏%Aξm~t8H 4짾V2y)=~L-) PsŬޥpyӝ?-70#'~c'ֽ I&57*n{#k9JQ,a. 5S(t[l]cVHNkS}傁54,N6sl@~_M,URԏXINWM1;r"Inه;gۻtvӬL' S ,S4QGۙCbj> -l睛NٱBeRufNvrzURY T} H^HK|s5cn 錣 7n!dU&9l9XLb'J KX1X[FnM tlj'#@T1m\u(Zyᙒꍁr }Dt֔oR, /Lиr/M3S;yotlB'Ku} Y'mX'grr 9}j7Ks`$^[$Wiw45=A_N45+zJVlmVaq}ʋh \E³Jx@QMz`{ހ|F\䣶Z nU~I7`v7wwYa8-HQ%$u!NJr[zSI7+.וʃEG˜n}Q,ܮ2qY$J+:E;,26'Fhb@+E i:ꎝ}uRGt.sڼh] B6[~ DDץοVRyRZ \j\߳|rm(k$SL`OQmЎOSOcb/Q$Ld*+oc A o*b9o|x4C<,1P:w*qQPz&'ݿ 49y>22+N?(S+ }Ol-lis6Ww<R?z3k-l^|cv/c 6Y:QE|5wva*2Ux([-%0nl_[˾<ܸr14T~g~dq{>Z}oq"|0ȣEz{w]+PC."n}[CsW[s أW,کyG ~'- ~F`(.78wτh:Դ)}Ę}m'ׇF#-VdT 2ʨBi3+wnE0WT(oU?Lx5Q~:.zӒX|Ǚn ETLv3)A|靕OaTl`=uE18o=l*G=!ԑw)ϴVS>7;‹*lXoFh6;\ 9p"ִ/V_dffG|]}.&uNj{쭹Vyz@P?-G2E Kk }QNfV&2և?| ⤟B[H^upGKjQ7➶wfg)i6y»ƴbXebGj^ JMXd=llmcf<.`b(J{NT2|d*S?hI,+useĵ(m a|j2gwL^S%Sԯ`Հ3A8ulDr_`*B5v+Yq>=z, 4խkd:=at8J vfN}?i\'DݣڲC]3+Q}H j璒 Ф"=;=y,|r-°T ;# z An}aF[[~Z7Aiy# I_`\qJA1֨WLږ["K=] i<=2&?!0#g_ʃl4erGH^Eݏs6S$'+m ^/GW$=zonmoi1mW Zj?|opE3`o>zV#}Mςz?Qcsr8:ڶʓf|JmhYxzuv_''(-;;)I:;;Qǖ1agR;iofgw@/FXɤxPw5׮2yq_:vi+r08,ngaoUlJ ?^3]h\ }ĒP?w7r[=.pW:pzɓPNV^̃}d}l(c KKOf'uZeVP[|ճJ⎠5'4'*;o~!M9bQ2Oʹ U)&߃,-ɉ 'fTF7%GTz+t9X&t"yA\~AGC/2eYt2O-)GE6fPo4x2KS:>-fKf?ziT/ +WmEv)oқZ['P_X T/Jq*P6 +?ǻ]|1,t_)k}PȺfN^.Ji$z.Uoz-VRxM澄K8ekS!e42C5Z(S);qsGom&\%=AqJݨ.:o=3 olh֚;wK)bn.X ^ոso7~s8R}C>8-)u\xì۾U ,7S~j8BeeKX%4>#Ҁ] /{W]giKvͥ wO-| *uPp={Z}*d_zX(7C(xkGfN:U.cPavUiL7'IJ}Q#(9 *uFUSZ(QsEh@TZ啵'_ѭ΀m+.LٟevbY'`mO/(FmBr+D{4$U />Z&bVF(X8-U)ȊQaK ű*Lh\24Hr݆`sfȚYNgYgӶQ; wyXRw*.EGRQ"BWw֩t n7f~ǮNsߩ('( hX)+nSzxz1xW[%Uy >/S3@D .w=oZn-yk>mAAYI/nt:O%rr`k8XTe-%Qe{Cup ވNavnIĶ!Zݫq)z59΂3_,DlHdƩK@g96l+%vWpDV&Ŗ^Pe>!`XRݵ(ӶrS)gݔ,ؼLnvgBZ-ug> endobj 39 0 obj << /Length1 1462 /Length2 6395 /Length3 0 /Length 7380 /Filter /FlateDecode >> stream xڍx4}ۿj3]{キHĦj+GQ{EZU^m7yyߓss\䄕I׀WaVFQ|@  P 7j vGBpPpۡИ =`!VDK<->:F* |ܡN(t N(os+ PN`WtD `A(xBI{yyٹ"Ҝ</( F=_%\Jg:A ;`PDxtt&@ KY//GPoc;f( QCyxvp_v0$moi٣~nPء+SuC!PدAY puQH_)B t} }@_e8x=jt1G0  '_ }at ~n7]8 ?v`P `v !wz,h ^zB3[uL/<+(D€W7kxTC@wB<0pA3o[ y ~JH-K۹Ba>4|@wC Zh-j(;<x|E*CP/.= t E _2\w ="0zW B8ZAAa>0O`( ]cp5Xa=Ghڣ:?y zRh @m?>&`o0~ s~qY+GŻ1h%b}礉2X֡3ݹZQo79K( 5#ނoo 1gkIzĶ)&3W=B[/7[{W@9 S:-*N.k j̒$E5Sh|G,75̡w9}τN 5zkD#Ȩ}ՙ)rԛl iŮlKXK? ۓ<RY *Q+3;9Dw-+Ǵ!Z8QfKO#ZH *i^ ޭn-G PyORwwxP#/Ͽh3g)g&La`K]ˀ1* $wxɠg\R= #T/pyBܐ9Z{0:RAu~զUk:hiFdK6/^ZR4C7oiD]=tёڿ1$},".Qm`~"{e ѹ)KD{,K3[,-a?qu՚3pm)Jx epsdvڕ5A4IB'|!p :3n9|⢜̊g70/jP6*)]u9n >0yگP<Љb(:]DQeq}t ۮ 6!1b5U?i|:;m8{vd7^} F}-l=.15-YXy9ʠlAfΔ#,4텋I}G;. ǬXIrW_\1bGw`w_RmQT$|dw$(mR#(ëydYsz=\8֕*8+b^WaS`YE$ n~U@UTnZV*hքw=f_ {S-@ G޴Cj_OM󾓚aъ[*5И|o9X‹B="U.0 Fj҇Fs5<J %]^.#3\ p%@{CXs7 2{}O~:f6l>[~\Qa:4pu[-qQ KoQOڒ2"n"M=-@8ky;yuLЫ S<3 h#:N:u.y_r) ?xy\ORfR4ц1u9jĉXBb[5QLLTh^qw?.] avV_Klm^5Ci^3 "1}LC&G^roc;hTVq^ ,ģ}*T^ү0>nNس+7a uδG|{AtEʃ"PJBj*˾-exL9EwH' \5_L%vmItdIp,iC0G(zœ쒝%(ځw8?%;jpj`.7Λy~p>v~ڰ#73qAstH}dZZvmQr$|E|(6Foa{ ǺWR?cпgzuu{qYǥ )\܎nrA<# W.lsVb0N4DA3n'ꑈں6GrBz; gOXĕ (Z*sn ]+8Nu?̕^"WVyo񫱣abKqc"^BSu3cЗ/rq{QEOu?κ/TX~ӆ}\FiKy$3T["u #pgh}6YN^m65gy/M޹dGaD&?'T/s>PM'~sAh[\Wn(~|E"fIuIdP,}H0VeO?~ ^B՘KOhյEK ND=~JCŽOW2IX(WhP9.,..,Vj(@5$ &'ç?rϟ1jmfFcۯQj<}NgKyB fZ4GgF<`ד5 1ʆ\׏M oOPhc]Nd]9 g5i+>8jlY?UВ2u1ِޭg-JiJˇ:tqz/X"2# +$I'ڝ` P)ΓTpxq{ݭV:_; G_*XqbWs0frMs~.nՆXFߓfBayCHIYeDh{͛[]^`YWK]vшʎI.( #@K +ob,IiMq^1TD[mf7*HȐwirgΣث[J3+,wpCp?Zj @ NB$ '+g &~9ZSKB2 qZ'V$L%I=I2nJgL]jJ&)dXیund24Yj4up -TMZVkNT{]鲯$\ f0^hn ( Ey+Dd'NOi=GW_t'+3p0ϸ?iM*';Ku ^W":|OP{Á¤GƫUUկEcꍐ!Y/g}6ަ*_;%~ϒ,Ϳ6;IڢJX޳]‚-ύeg*Ti2x~m5jէ~\M+_;]TG6nCvT `$> pH́d#32hD9FbmoVΙY5m4>[;PI& 8e ~+&w=SھeO)T!.bJ)oIRq tFAD΂ ş+uD]Lwbְ:/!ydTjV{ALༀ%"&|@Ks>b7MsV;^t:um古L>OQ@I 3, FvɔV7WTYq쭳.I5sѾy݃3Iyko\wC=X,jD?mtp73X^/ۆS-Ъ̽ܝm@i*Nnͮࣉˑ~nl/(Z(jr"V$BTI'NhĴ%M+D2P(چ4$=@2~LT"ןa q?`ЂbJ3)3E=BXԅb&k j%O_HYtm=rȾSVsA9$ݘn Yl^Zo{Jݒ3ZD5js]q+? |`yaBA4;p喥lO֕RG"$m<^2~1X1cU8-W<%<(=}l_:0Tza5.u&bJ[QAM$$Q Rb9cd/V@5g՝Ul&[7 [g߲Kf T-L ?sЗb.(uD(j]{R͖fVxRU=-1y'ݖ-pP鱾k3ɜxq0O$ Gze}L^fZ$e= μǓV; g+`G羒uj>ӖJ Fh4^?JˀE .6߲sn\.Ϳ`/聟N~;_,5?a#k-y>JQ^s9 דd)h +6yAL..XpTJ AI0\$1Ic4/8"=(5.[Ϥy׉\:?@-ΠJ3Osscd _vD讀l8|w#' R[VIϑzBhekQn$BQ}V WzP}˩ nw}T/eP J|]m-c g۾|}5Ƥh̐,=ӂOs ˘ָŘz>ʏ7ݮ(Dĥ]ѡʮ|y{sRa1)m > se]#2'u=O(s/Y|@h ;y6PJʪQy"uυV&)y=>[ 9bL.q@B(j2]ydIN'kܤ=F 71m2OFYcg̖WWl6ouͤwcz~X\n:U .jLИ!_فYRAqpg >Д?IZvFY JNބ: ٜ=l؋ӑ3?4ѯfRO'g]DҿE1?gdxpnD3V\9ٷ y.W뱷ߔ5_44N'7> endobj 41 0 obj << /Length1 1393 /Length2 5903 /Length3 0 /Length 6851 /Filter /FlateDecode >> stream xڍuT6-N etctJwH0@6`QB@$DJZi DAB;x~9{v02V#4((,T30 0X cĹ < F5 ԡ8|pED`,w #Tz"@PB`"7B{(Op7s'ocs@`Y)) Y 9,oi#sC H{z"8";}HxD7# 0{@lQ.>گ߈SUE{@aYII$PZZ2Y?SQeƀ8<Ђdp2m`K[RoYE/7/ᆺ"]|C-l#=\۫塂rS\XTmGb5sMWD!X7> /^u0g[_//@B1'~x޿ 8| 1h~ qE0NuB{h9q!!\Ttފ]]9Yq *ykDqVܟqoli1L3s8djs<$1ܞ *H:fz_]^f X^UgiɜO]#y爡ݝ׫8(s{ $ʬ֩Q]axChEףa)'d_R}Eͻl{ը)Y? 4z7;8U|L̉aU<'S20*emz(ns`&#o ]&"J_ݕm҉0&y'6NHb 2 eLz"vPRޞҳ뻞[񍞳N9OΓWo|㴮(H`8|p7Ω+w0UkwED`3 G7S P &j*'ȡC5_,67ŃKxv;Ivލ힐XPdnE  ѷi?Uwp6kyMATXW&qx!Hcc 4c1K$+KpIE›5vI:waw+5^q V y{ʩegJ%]`r\]HsKMVoN' tݜݶ.Ec!Gom;u79z_$WZ]%c|KY$>2HEJC7UZǣϦIBN?S%}v z"v"mtG#ȓ# S"q7N1AM['v(K ltCN*Gv%وj]Aj G5'I:j7 ~@Ї]ًLҫoܡ~>pذ㡁!J 2+y z\ aN7 [nZ! -@St2ƒ@^ek[{= ({HO[>trA;!d'!!\q@i<;&0.1\uۿsbֹǡ%h:\zF3;u#<LIi]QgEړ1_ϣB?۵HM YѮSXn[(=iJyShߟQ_BM$7R=" n "gξW˻=VLiR;L! 9X q[vZ殪⛊9aK{Ds'+οhI8Ǩ.xyuDt]UJHfu1"jt+AxN<+nvAS{}y ,HEkw!q ʭW[I/^خE,B J6_<1`@}\|85Rcgo2oGQk,7: WWv#l錜Q< wR\:Jft2f»RG;/Xmz)lwt4\l ?Hjr7h9 6H֗2MUtm:Q P}<°^y8!vufB'bo7ɝr DY [%@>sz{kԓlTDv$3߁15'Y/Ǐgi,#R"ؖYi &ܢ$>""kRjs)և'e*0[+> b".RaQ&b2S{|tx rL-*k9X+lrDrnzԘ0xM"Ԏ%@ߩݾ UڈGnϮDrKiG I:# H~?! bTBQ w!,oi=s8+6;)832φ{%@gpV1zp0?T;_`Jý'F`Ҥ2Ki2Drǣjr|vleP(^ O`ihw\hN3OM"a[xr0\-% %{DlYK2SQUf)W48 aSԁS풃1Az&SohArD Hň Jsy?rRO>_F4*dXc?'ΑHhLQKˁb9ߵPjdYY[;R6qqw!z>C|TnG?C'gYn!$ꎳ۶Ƌ[yzɛ2˹RzvRe[*/K,";ߔdֱxE9+o#e GLnj'QSqG?s2pX@9|n8]ayzK1jjS \2R k.aRl߮ÁmJW-_?M'd4]h6 HK2ӌʜT*pXWF=dOR0Az O}&AC17s+fM,/*Py6?%097[\ȠshĤy)q*mֳÜZuJ2Kxr7-w1CJ?iZ !RNC'CktIǩxM~ jO=[+HPIS!]&.ɹ;o;yv;SE-]+glr!yx@1П2r^7`ACJ4H1hY]~R5tR./46u׀>Dʸ;nՔy mZiWGԥΥ'sI6釣͹,`t -ʆ0>vouKr+HR5esRAkd6Qb ƭ)}ARϥs5 z.H!J`dĀM]9aR \l>:M]8HÁK3lJ&W\R>ZoƩZ!'wE^Nn8o]oڊ=aמn96P{mWV dkƜ3.Tu}lܵg59ͪ&c0JLfX{ga%ڮڂ6^2ጏ7Ɵ :A_sqd(H$]O9"vc?ߋygCCpu5|?,aQ+i1 :N-o{0zBv`xa9wJ 7 S[y>wk_ntwؘ'd*w ^&C%ZlUqA2B nP+fތ "/z(@>xߢ㯺o:]Z:R|@7trR |7n]nxRn^Ҽ[_BFuE9N 'گqS#}Y Yjȼ[f-UeTIÄ+dIt:Nߘ7;RFgղȧ ,pᘪ[ (TNgy8R/+vy'3w?| [_zh5KF (XvƽcUen ˃W/,mc4孿ʙhT>/yeIcמ }C|IkՇw([)fUkZgc/M(2 T]%'Q wYb] Y'{bujc-a;CA|Rkh3بPyQ]8YSo\sl9i'V\ Vj6kATR ۊ%vxs[ 5#)QwN^mL*3b+n"r5ۑז=s+'k1VIp0k$9\PuTC̀^}n8V %O!E 8h3*?ZĈup?}O/]i|+ahb15K ˲P]6Tuyi5ueCpgUƪٻs} >io{; e>|(􉻙6{OLݶ?3oQ~Kᙘh"j=h~ۭJ endstream endobj 42 0 obj << /Type /FontDescriptor /FontName /TMCDBM+CMSY8 /Flags 4 /FontBBox [-30 -955 1185 779] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 46 /XHeight 431 /CharSet (/minus) /FontFile 41 0 R >> endobj 43 0 obj << /Length1 1612 /Length2 11936 /Length3 0 /Length 12744 /Filter /FlateDecode >> stream xڭwctfݲnq:Nol6:v6;6;m6:vr}?k5j>T=5P^V(fcHH32prU8>@}G3k}G @ ha[7{3SG%55?- @ Z;~B7*GS .!)'Sy'K3C!H 0Xc0624O,A>hh jE[98|&֎=pYZ:Enl7![{O'#3?x:; 141t}0^G}3k#\@gO0[{i89Y hood tp;ߪ׷t{QhiL35,_"iml`d?}@DP~7tal?S(w*D7Ho";_Ŝ,-> c,p}+3KaÿA# AkOAa4s3sɛ9-?;]hoif TfhŧljfhaWYZ+ON &KwQ;*~Rdmk+21>r02zaZVY2߅ϕοZ5+JF_܆N}? ߃ al SS1Ezls}+m|RB8^'[Ol1,ɻ9^Ĕ=dmEjs2l _&ۘ/(}s}Hm kۑAPNNG {p3aH1Oo !]N# .5< CsͿ(d;(ea0,5PN3\M~\ÐRn5٣l@d@7G﹆Z7w/d 'ۿj%0:sj^v1Kɿ)a_e?r24lzvePWH=&?bФ)ټgIN2(&DnM O_x& ۧT!vqg֧='aP$ ވ'A\|"|N"~MPOw`i ; o_TpXeO$7ﴝ}~b_`rkeN `ĂГ\v\^q8 i~Ļ ᠮ-__C~-C1q۞$ >A}%=1ɹ"8j `iJG3PپA ew 0~@N>0]8ۺ~#[p:OoLpo!<'|v=bM.ا-;gkf3.}k%dehs@lJw3[:6qPzsNKi@DMK?Lm< 'fF9!)hv ڣ-7y1ʖ_|WG1stT{!fٗo#Zu*ӪjQ6'$ia#C_6$QY4wGmCn3ƌ gAd;U˺_)Vbqh8bnlc#$"nW OL1+V}dnT 6:=֕+HzԆ8"51W+~ѨM m; Z Q%~mM׌H5M1@$ipO8)\>m`@~]}ȧʒjR 1u@:bz`it._D{x?@6_-A|g^Q9;vM^YOꡏ+/{m`*n~< F_ C6*#O?JRx$8C=&Kj8s'J< -\21\Eaor~\p\cPzIhG%g>Rr ekD|^@/s}:UfM0K+ikV,<[$eL<=oDNd1 0 M 6hS<=iTe- ̷gI ;(S+K2:nC 8LWPh ytrM 9hN=ɹb &ؿyA(#$ެubINo11sCe3W zƞmͼt!47ۋeA)7l&fXJ|EHsJy/B~grg_y&n)=~Suȴul㽌"J ^ eXמWwWtAK>2Q.B:RrkYK%y~ҏ'!ӿH:].X^Wc>~AL>$*Ko3o x~_Ρ6?W%I'fn*9C?qJ8jY塁q/DdICzRnC'BsTAۆJ #\\ GphNj|Ƞ~6# l^҉Kx1W} { N#W|p+-Ntmَ#y[gѕV<QGEUɌ>Y/<硅IZ2bSX0JzWqM{kev־T&Q)B--q|v&_XyRE7Uk:`2"Rr֢8+Q!Vw8sWDI7/eW*nXf-en͉2Atu;X`̂|nDDlϐOYSK|@T*^q]<܎}i~|v _/,RL6Av+DcK:yWÃOZ +y\0mZU\PJ$7W sTu~tengxTCgCxC_|+۬>8#׀WH]d tZFI(6,Y| h Yjsu$yh朔FgSC-W.dl BܝP8XK܎$;\>y Tu.J95W(t KJ%V#DO8jVxh*"xҎs I|9,t-DI25/r4 8C;CV;w7ɸ =)>v8 &3 W5ǐ buXKe>jуYjik)`b,V  0tAp+(cK$7DPPz\IۃA mo;f&r7-j}<[|4^i#$boݷ Q$%H '62;W K-^xH?$#**wyrN(܀uLYnCnɜKY I,GG(PAPb&v^Z`A۬̔_!w u.̞~`E7 1gLRNX_G&@:n/*LX_;n x+(jz~1ZkhHa`aQў6KwSiL~}Pz\'$@|ae"`+"YKP4HLr+>-#t ھ.{a)CkWvEg*rty0e;㙎@n,~掍=ijsl%Y)f,af`c]q5*{h *cQݾLG$GG6&88a%>]|]N&(oNk"{`zCQm; ~#@~ C2$g\O^'0R_>A.JX47$\CF0C}{a'fF7ˏ4Ѳf38x|mQ_2t'n&GR_EPKOޟ!3%U'Xrjɮ&vw.q䩃NL@"TJqܩ0{y(P }M~ooiW? MWb5/n= c27f{;;eD˹PO^-.w. )|# J~0bg#%N{&6:va;,cNƊ_n*mDqPM1L!s2#g jkPs[P( mX7-N¾E`^!Rd nqqv5$)1!`aZ19To"DV~a(x#PE/@Zh,I5P c!0{a!yp -AO XC3ٜ̓q @ze4gkkꥈ6ٟ(B6Ɣoz9;LUܷzr`w*X6Bx9pwG #8ߒskx"9 DvXiJzN,Ə yX+fSwܜ{Z5F-j)/1)m Nu]6C! Ƕr+_;GӔb%((Wڦ^X`ш3Nߞ % |LbLpj U*~F ?qS4;!!YPq+9]!CO14k)??hb9$k0wOlGXwl2R,^J?'*Ӵ02Ou*E+zVuUHe /XuYIfc,!P9N!Тm> bC\G8nmrUCӏtn '(JWHo{[?,MF%ou .⟑tf$[U^xA5oWl-zhx~t{,VC(!dx3@7ϒʏg2)Cbll2`(BJ%ת8[aoE5vc.Z h|CoGF>=aTߓяd+ S|}32TbHB,C S*JEJ<߮C|(H"iAr0 *`%DI%.}٫DtJ^bYuu"[ݣ, kj#|7)&[4㮑Oͯ{RI%GlBTThEKENC1iAӹ}Z̢!zM,3UO#V$΁m:J(=HHChIc4ڽ$RN39#]N`] z^\j,r9!Tfג-|lp0g exߌP|yhh1pj]0¢ jT;3q HuX4Mwv^&T,!;kLo暠 [w *?Py~/{qF &'NVҗňݏxgs [U$,u֭`Ӏ#P"Uqt:/@mR͝=5HAxҗ4)&FNJGˠHАEL ޼1`7ϺquTKYȉqW =ZhaQzd}#da[Y kj<UC&`RP 7ZWꈈ"KpIj5Ĕ9+$Dt1>Sv +`pxN7$Lq4Wm7UPo:( ytJ<2Lpp<.LRUY>m>BKL^jGWRQHd618+#Sƀ=G.2PZՋ jIsJ2YL PP%tRJűL7zjMN&y@VN 61Pd-}-$6ՠ1D}]OzY qjl4}Zd4lT!g'{$k7b~N͊hs rg̮n~MUE̓ł$^ ܵN.~2cCΘJO?U k/@`J=e,Kʠגi;B,@C'Rf!"ƽg"ǁė{?}Ij:0SN<͠J[B>C  X 3VcJRlMik*|#AR1prWuӹV@!BcAҟx_^SENr)\;bN#:! `df"(/͋h05 ?mo{=|G׊$FRul]0<%bj:+f 3bjtf': F]_rOrQBP @}4h$vPlÎi]} /X"ھ4y-!R0*P1?'uvA)slPnZp]jv1=#BA/H(w  \RC؁xf<Η#u@>WF&%0D[) ǯS~bs}&mOҦӐ!O"Hk9ʍ˟źKa#Qm9Fq[Nnpag w GOhB'͌S"_]N۝uSn;uTдqT>wiZ@%xrU.咥`BJ$qc10 ,f3SˣZ'[5 H%3(ۑn>xaTu O;cYKD_;zdr$;pe|,GZ7F"Cqe'XhǤtdKrK5D_"?gj߽.O.B 臯#V;=EakCa[Adf>/`):oL{M?Uj][*,,wZǃ9!㭐`T :f:ض'VfDp{OՏNzD4>FXއzltq=;&}#3m/cĘٵA4A969&ZlEd!8ܙ='b(q8<ٙhC wa4f%1 `Ž9h`S5qtOgPɤѠF.ngJ׵nαDp/&S>F4cg:0ȼD.deK 3Uz?yDUT[k8VB$ڑ9|Eh{8d`}te Jw˓^{a3B]!N >jGV7[Fb>Bk1/q7za&K?-2V'5gS'к ,z粑@MI䣴&`/Sp_9.7tkl}uo\}=^|[8ǘ Agu1;xFaN٦\tp)Lg%OOuP_Fp: mx6Je,ЖH-|@`3Np/'n{|n .4Ɠd&QӍXve8;w$TyFX՚>̬Wٔ?AW'!q^$3kfЉ~ ,JlָDR*[` S::!f$^o)bT_36<;'4R{݂pIܕWDݍ宫?7PLthAx0s7lgKRgr߅L dpGᯈˍh Nbҩjt-sX?Ue+Qji@g=6T׏{bP٦2bS%k@ܙBׅ'އ홮|Y8 ONa5!l".l:EUA.H`OB[si -^M#Vs\L7i[2jXhqQfp+V#9k} +kҒ]Dt.E #,<%)h |(r%E#2g C42品cɒ4].ǹ4ԫ/C`ER jyxU*^GDVJo9V:; K guȾ d쳣A%*!Iڛ+0z4VSݍ2fGeCI/qD\SR9"=d]%dlBz&q~W{-\8d{LFdYdTVIu]z3|Qs *y>Θ+zߑ[> DMv3}CK/g@%I cZ>E fY{#ZfQ7TEy deSOrcS)F~/0NBtdN_+2f1bfdV,""P“}`LIm漸1E^ endstream endobj 44 0 obj << /Type /FontDescriptor /FontName /YQIZWM+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/F/R/S/a/at/b/c/colon/d/e/f/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/period/q/r/s/seven/six/slash/t/two/u/v/x/y/z/zero) /FontFile 43 0 R >> endobj 45 0 obj << /Length1 1626 /Length2 9315 /Length3 0 /Length 10152 /Filter /FlateDecode >> stream xڭteTk-6.A]wwww %%7ܹ~?޵]):*u-6 +Peb- `GU2 xI͡ 9(Znn *@ u4XXXOK$dq:NЗ@- A@QNU t;,@e% dX] KOk\9 =-Lg#y Ws' `5/@ήK2u0 t9C/Uեe 5 `O+۟yBAN SA̽^j$sv rV+yg:ߺ7wvv+aA!@kvT.З6 'T?d pqrsO;1V`'/C }) `߱#@ ?S˺98;,7rd̝/w shsG+zJiSDNvο ,hZ^^ rHl\iۂ, dO/TCCY_R߀89,T/OII'_^ s%J/Y WK2G'K՟т;Yl)-\]_t_;z-QR3ҠD9Fݝ\?8.wm =|^;.5wȼ;IБ GGԕFe73Fڑ^ɬ!?֨I"x + S {~ >3eJu A+v- ne}5C@_B)Kv 9!U" 3ΐ{U]sus@GK>ܷ G$`HIbi oUr. s05T%w:7QuPСk7|mYp#cMR\f<]H}(~)4]i!D4XtM]#V1lJ4ZO]Oֿ)c[{!}^y>lhJIK Xlzy/#B<,h0@M0qQj@"Y#̆ P̲wU3CUx@I?VD2>AI?LNת"g~g*, NwY[fܑ}N?5.C">)19F1YMu|2j &b/U05{7txw.͂Xt;u.:o\?F_f~۰~#8Y!]'Vqpaɺc9l1Jl7p3=ײܗt=ղE ^n7$A'V\bX&3/<v"b̕7$ZlTWR^<0Zȁ()``x_'<>owwnZű]5M|b U F+DZ Mr|bƘ58{7/ՎVuџkvi{>O:v䄎2Ȼy颰BTR?J 1=&+4@y?;XdI|DƝv (-h'=x88Hi`1ߙ4b0'/ G4(C ǩEpEᖍ5jgci5©=&]8kW9*!P)3!nfJD"?[i'!8pXh ,(!~sQ4pVKG;({D~|?$9| H4wZR9ȃ̕D9xs, 5ǒ_cL̏K0{„ظl*c8ZKrh_zJM ~@@|JYf^VR'o[|yFU1zekElȰd)񏢐2vqvi■|)E|KnþēHK՘nr 4G'\ȇ}5j&2ĨOG1` voN" T,"Χߌ MR6\p?MK#2ھ:#S$Ib-ڃ0ֵd% D|i{ңc6:5R^zP#Zbn#}$=W֛+ K*`)?FD[&Lw–!&Cɻiί6zędHs[?T:Af@<$ϱט 'QJ;inv…]aM%_]I8W//M[ђ#>(t{h)ĝpyY8#SXx+Aex֔í1*Qs6@1e?*~uoyxrc`&Jl,__n˼Z ,Yh8TޏO%5kMGXMw:t"*ܑa:-P^7^evj-W,ATDWv>F-х)<8~.Ҩ)NіJ3=Tp3o%Q/\]m%6jj%=ȝϾ! _+ 4:G*44.V U^@k̎pW PZCFS8v%R0Efֵ1]\4XI=F-q.!E`O5[sG"I=Y⇉ܟtUC+>0 Gr`޽ ܷ,k$KXkIg@~̿^kDU/pK7gtƚ餔 {n u,(>vs-g뾃W99/t\AFXEd7;p`myn@KjN2}q+.m;*ۘ]yhn|=|tXFGUI _g?iׯ?ɆPJX3X`HS $ɋa@3$(3%Bi'~F8O7,⛴n{/ !,TtC#rSgX-#\&b?4tZXGy Y\-2)}b1NC{Qv<yh&YhՕߣĔY:0/g=:pܠ*GQEn CقIE[~ ,5]݇A>؅`v*96ialyTtn9jRoKKړhjT6D&(ejPjZ>5- ]Qrs4b͕k t9_ b:W]]LJ;~;ē~ZY]%Irՠ_q:8VyLr^l !o'[=շhB.O+Zהn!IUDy91 F z/RFZs]μ7Q9htK1 s5m]5=ΉE5i"2F5T$?~acLS,$᜸CJ '>rs$xrGjiߞP@=jj\0f_=Ƭ,GK+vTf?{-*e8ꏰ68zbk= nVp@K_MvKܕP`&D;_~{r>:29A?]N<8ݹtlr^{d)s:PJ?Y< tSQe ek2O5舍 iomzk+{lTaw>p.@]ww@1#3:Ģ`[uN pEO \D9|fu1ey/jŁ1nSBKaˊ8ϡ]p+=nlah*haaO̹9P4t!K5BIKZg|Rc#+KڥE Si7'ӃEiBDjk:Cv&)rbz6*~ ,?n(t+7:`0=ʘ`WHfc[P>?"WU3muNʱC}Q/]RfZ M¯Jx4bZa8}VqVE<2= l4ճ*8V)!lrYwJ. io=;y]CmLA}Ն`Jέ&l?}6ܺ?F51 ψ\G@!|P1ڊZ9* Vm.gɼ~qI1QbT`T;]%iw=Ls$^SжV#^m;l6pR2`8GRhFzc/hbx0}͏EM5BmJDq?su_g2(]HAhrF0Iy2oZJ21 [ XQzF[ccނz,s}TѲ=;pVz KP3jEzղ- yJ< b;|_:R^ڸQ8UPΑڮԺIMʓbձߊD<D~2abmJGTUvcV;|]0P.K5ݱ95Yo\QDA@RŢ~k <. qhR\VNȻͼM?a(Ktް1+W@ú75'k1œe­P*2ttLec="7֪Hά'HBkn Ỿ5DpvfY;2!LI̮|Vg'RL/$REƸD72$AwIO׏ !#P}·Wf?,>3Gb=e~;VGQ^ I+QaI6_`B+Ć+^'jxD%bfkxu$P:YYd/ -%I]Ӎn/ܵ&K3SHRZ阓6 &IȟOg@HtIōt#dN' pO JQԧܫ_YG+Hf5)MtJg,oS|V[OSy<++ M'@E%pO(*?yk8/w>džeL JOZNy>_FXPơ:=Yn12 Im@COoMrNYjf~STeF"@ū3n3gAib8o6j7,8蚻lIȿ}DlFgE5_<2ԃiʼngǫ*̥l'ޫէ#J M"gj|GI>'۳`~d2ҋo .p+aie&,ZU[/ֹؤ,kkO]eAazQy3x11'AÛ*J̮6&l}@mc` ֚CM{*9x6u*5ZᄦE5>5ү4u@SlC,Wa`Rln22+Qar/df(7dyzvil|F"4 +2ZN_&?~+tiMH=+1 @x:U ID2pBk^vl/=,,K]!1-ĭSc$-bUw\F>~WcpXs'bxKĉ\Gxjc-ѧ//35pf&Z]b'ǣ*޹2ޠO5Ko9 4W=3`jPx8ۨ,.[ ErW< ʭɜ!ݪZ*Ӕ휌[~+u|~d|M1zkbptGo5Ɨ|#5?jO9#^VAo} z|Ԋ`(s0(GӥaKb!nGG'G:EΞdrWQbi6~jr% {GmLTD(3>\%~q±X3ti2^C) K/@E)#3~RZ3-\RK\k76⧼Os/Dյ ۗf=$3إciʘ}C)Ӄe*p1[̺[TwOČLiYҩE3H8t֪igM*rSdDKg_΍횔stPE΁]7F ckb(G.*]R*6K4sv&Q{uM8;13 &J=(:3Fe[sb<ůY/arkz$K}.8tMޓR^A2 I ,ö#C:E׵ 52jFi鯉#.>b8~h``Hw[ "%R1.F`PKe1h[^?m~gRujώA~IH,)jQ=)EQnCͲޕRpC7,><R$ՔhlyF`MW`Ali BHs"M6=Y~8fwby\+o )INuY??ee?WH&L1v ҙ6a3wk"4_#-;\dOhWݥʬyZ2ȭQCZ^BdWY`mY\z ('S,%|e=҄EU7x56,]e Ǩ&E}s@T(t,薧SX]/X)İUsck ob8.l(X^|ǬK#.Iyn5c*B0fȚx>(Yڕx8iy3JuS5Ӳcd:_0!>2-_'vt@lxrg0ܺ1$^ P\{+\灓TpHc`MDBo0'dqTEo>+P:^DD:+Qԝ{G:Mtx1c GѴ[Y8"6*Cl(m%/5z^|ZM*:EyrQ'@R\ޢ6 > endobj 47 0 obj << /Length1 1630 /Length2 15347 /Length3 0 /Length 16197 /Filter /FlateDecode >> stream xڭeT\&Sw!8w NNpzӧǹϏcS)|EE$j4:21lL@@% S΅@E%bajt0qhY$,6^^^*8@EL^X9?-N׎jWk @4VZI mhbbPv31(ؘY8,@3??DA#|؀V.&=plISn WBN.O O'2 2sqr|FUw&|@OKs?%K u5q\-<]ej09ٛx}srWn G̀baebno}|bӝTod/o࿬g6 {Kf6ϘflXYGK rs7й[A g&@G{/%3$e>(o!7r+G%Z^scKg _,L-V԰2[h0Wq5X_r Gs {GOnV+ѩ[ۘ9C׿UO? fPs\ս>s(11' L&俀hb _ Qs5q4)GmIgq[XxZ!,/Cl2]kqs%z CJ ]i[Ư5̍|^ No{r84])D(z שyX KO}.6tY5UT _a'9\.( (PR5a<>N<|躂#dȉ7K>&Kr2vm0{~vU.dhU'jxx,RnaqX}ﲊ,{Ce/Lb$R3({ĽrZ/ėfkx(FQȵI+"?\F Zfg0JHmHyҶHQa78N*eAAH[gV0{g2XF ehXᴦ]*g2|ѲT77Ɇ-]zi\AsS{勷ud:Jb8uOPMk*R2"w38;)av(sr#wF,VGrv(<=HI8ӥm׉5XM V(j*]x_w̅*l&dp\"}t)wՔxBSajb(pL &92\wOu{,1V4/CW9EL}BDC`XQgH3 @CL{&z#zVXE ang"a>+S^Փ9#s;Z:nJǖ^Tc{'_Q |D H!T׾띲ܥ0yV:q4C9/8L}#s65m % u7Z㉳sٚdexZ&&%~/8`E%( [Ԩwe.?'*m7 &*5x .D=O2'Alk2 !F"l 8kMxS u情?or/-`Fkbz<ܟ o.Zc;Ϟ*qzP 5`Ob:Gs54bV^ i/2qecZvPW֕";Wj|\gV~|:6R8) T7$e=s>ّ'M{>ְ 4jgu|H¿P`*^>2yyB6 Yqը;x+[A֋eViOb\K* S!r ~t [waypةTtW8 fYlȁ[j:!#~Mq Z"=#_,u^|s`ց@ ` u$pmB1(~%iw2f~| -!г#+/eʷZH-e{3Pd&@/Lr8I,3piuN+ ,aH}=^lD|> 2⭕1("-ܞOX/wdrT^G,Ӂ< z2)! -3jijC:hDREzGKUMB5^i+V; s=CYBV>NJzuư=Yՙ)wUGWB2Tݼ`jQ5)Q~ˀlGY>O;JuMKJ[1+3Ɍɾ!-iˋbbނBA> aJ3BnˇqhQu0>$5Cg;Ṉ~;&CFtoy%I5`!KMt4B2z>/;؛S 5 Z+sf:]#}H8<_NBad#'KzF榆bF{`t5Y25򪲃Q4aG'4|"Qӱ?>K**'z?1 ;?\yC1wef!"ѬYV*\ԧm ut YሰgxUA 9{ቚY8M1HGC,o㐊@ *{" 7).2i\i\~}{,jJ]2(n. 3\?l@בs Ø jz&Uz x>'H+G*Blƴ 2PVςM[[; 8OaOݱ.A|4u+{#0 h3,HDJAp׵hiMF GֳxfFfQlIǍ9Q&ɱt!yì < 37򎪚uۙ"(A m:lJ>jֈA|Wm?t o/>xyL6^]ɖQX-.#S` ܁=DPHw%Q<$(A D9bb{\".a|oiCepPgoH$e6PR(2ei\YttWo%T7tZHV<&mvGPdԫ^kc6ߒ'TG9FFՂO"dkM "6%lX7x˚^5 lLӞVnl`@YTr2[*2h́QSs%gh{#}c]Ԫqމ({6QlC@}~+集~τȂΣ 4RkZA0W+!^%0=7U߁qߧy?QI'/cx oM]):Z$_GWZZǏ5|@׍CZB&mW^=M9R}FAl?THJ9[%d&ޕO@+C&KvL#rIϓ%cUcs3[pt yro%&z%k̹=WBn/loǽ9+oR(8'#9u=$J+JkG\(X.n҄R5}`~lNN B} $xyˢm`x^9/TB̽Pv#_oSDuQRLX^q$᧲gk+WݎYJ8r['t}X|-e-*IqϪ喻QM9B`ަ.7SaSu-P$PN0O4غoXjhwT[~"_sTk{+REpKCMW&'ӶCZ@ AN}3MIEC-(B0֦զ`mWOk3NJ"P@])L9 ׬kǥ, 7z`/;M K|Rƒ+ƆTQ!?-Fǘ? %_|OcU@ @qi0qމ~?-1-O$VB'MnjE~O>ȍ N0A8q'c~Il{kc|C`OK:<þ4!JKU}V,یG8`< jd,sL>f&fɌyH7>a0CBծu:4}˂h޹wNÕ@:-ZSպWk8@fg 7IpQMow"Un$rGZ Fnd& #rmo!wdiim$^ؼ&nk} )cJzF]sI;*yQ4s"5#y u};S 0x{]$ݱ{{}f~+ZJ0W($8PIRR}C-~D³X~BJF 'ɊzyBSW&Ia~|NEKW,v],[X߉)r">,ipf."4 Z #1诺r) n9_fvsiuߏ%k%-R06~!lCups՟KR48ڎé> 1 BH?! /eq6\_An":c{_!F8v<0j(ӈ/~2X8"#fe)+|U\Qj4GVnI~s?,G#d9qjB-nQ Vps HgR҆BǫHy }hz&1䡭#U(x!x)G<9+,%Ͼ) [*F&sDK,8ma+r3f4~ڱ{~C:h`{~RljK H]]CڔTH;>ID@F5٦W!.#a&IHYؑbNŁR ;XQ_>h69[b{[D \% ޤM[[xeQ9G3{UN RYg0040Ҧtk;>Kݏ1Nr\Z王'%&}܉,,ՔryPedn@6㲼JV?Ǚp K ''a0?Dl\7A(#ֹϞke਱,y5ڤY?_'n 2=)RBD+Rnf pWt)VbǭɒT7T;݆36u)d'uwAǨyeUʊ?dP 8!d W#O<>?gcEu/ Wdim2q_$ -gq(߳4l;moĂDԑE>y 9 9X9,ۂ؈ʰוp# bxKkrNi'qo_ԋY!fDc]#?M I|Gv~\D`R<_m̈́U=g3UpCXN4 n:e/ reiU}lckQRW5恕|Hq&lRE|pԤ|Mu_XX ҹY;4mߝ&LlăӲGgR;{4kPK+qe$HhĮWJ36'(RlL ;k(1}euq9#@s^~<Ps=B1yb,HP$K!fyx 3 ܅n-멶` D"W][DAS[M`=goLh|7A{^ĆKذi~cU`  >lF4eӎQM:l 0]ϩ/8˲1?EXcS!iz<>L')&rz%㸛s^lQg-@Dž6eh7\ ?䇯g-4Ehaṁ@=ҎX"fU]:S]iVGT`/_l c^?Cg%qIS]: Y&(9Neg-*ZXm6 ar;a֨[:lw3h2h?~hHUvc5>Q(;sOz; sAÈ.m`*e& (JuD9d`;m"̀ZY8<- SnaltkK/U$ۚhuO Q+mk5-* u?^}y-/#b\bK˜&P2VXr D]~F;xEMGHY 貜'bM`|?]{-u76'$P$XKC* M.@7^_5|+wB L@|[M۠agʵf`Cx}~(t@= paݭ$d^ԟiscmCZbma ki!)ac?2y 9M->z`6) Nk8LQUDwт+ 34):!QlȨnN1TM:8GYq怷HWs]SWzz3=~ ON_&-Tq 5-'Y= R#e"j1v#e'p.5Wm9P);] w}ɂk0oaQGO[a)&wmGȑ.: 5<Zʊ_xUqM:T\G'3:Xh=NϯX a`Dq5WӪ6m_%L^ćx{u( ?1&GdV#0FL-啚)ds.xv4\K)@{6um9Lǹ4KBKX?-c#g'Yi%0"44B{˩'fSr~p҄J4 b'XolDH8H#p19!fS;.8N{&8{M8%I:'OA{ܕ CNu!7p 5d#j &oRwi ZQA7WN{5V3xwx]4'JlyGd)ڮʍ4]h/ d,XJc0'"l;c?v! ܠ J[;3,X,"tPUKyL~Qjrlz;M5tVCo YkvjMv,-iB$x>*3oxLaOWO=.stP7.~//dkjI!9f9uZZ)Y"; ǯdwLl33,Bs\h%l\ I3i!a1g5:pdev(t8rb[JnS[;^Mp#.V/k^Iۯ~p7EݫNLз ]A8SЉkٰ_j慯r"M,6pEE1Dzx^p:՜h3^wWh \ВT7PZkc^JH͕iy>r*V8ߵu5vVyO؝]/dmoE甦*Ď t3=/ĺ>PYr[Nѩ rO 7:$E\c3 bt%:c7\C%:3]ZKQ%5b"A|Atss`eO( ǵR4$$}1 T*{a4S>[ W?l@!nb!M5J}Fw(ozM#ul{u]Jq&<5` Q;*YrD$Q~hya^YRA0wlO䅖#,yfhKS8rR^WҵA'rV Um~x+¸@JdԾd;6k yLTۦEM jK?c{NF.Ѝ(1!Yؓ\ ki./=(^+TaՂkzMRDՁՍv ԃô }1}>"uHA\dJ.g?U wzk=ebQٛ9:uTQc$n3fI z"[m1.nOIE'uI`"* y?bAKӢRWѹElATM|w~s:?0mCL߅, NɈy,~,Wh<6a_cH=mV.1+CtQBw3G&"һ y tR*^YfhzBL[R%P<|K/^k} S%DpW;WbS+C+e|7K̿5"x)/JԤOϋW<zCF,vo̒VKFTYnYa4`.ކCgԻ۴_WS &U<.hEאϘUchx5pKKUF-蓪h ds|GLŮBl_ ,,,Sa@܊,FpBTmJ_Td+# BwȮz8xՎ#kѮ w=}9$vt.BrQ_v; L`78آ77zY^~mql%H7DbG|o e3V[lsP"`œnt*G @K h8m~Z@Tu sM-K=M?pSE k@dyR}vMRhEq[e; k5/[\Oaf^'VmfN~UYڌw"wfkX.Ѯ44sb0\jA}bv]w>MQI/&/G16z ‹kPVfi%YvsC8MEQ:r6(f'2L,PqNhH/^sW29w: d1,͔Hy9;ͼA=֕G2oЅ"m7dCP:,(F58OIWlG&>5"p@oBaf,S8>?v&~5GE9]wo>/׸U){z'fg@<[s e9ՁeȖFUa2)NgaGIjZ~nnbSNEZҾGڱ(Qc_ ,R0#d頌 S2[Lc~ CQɴq/bo%_C\M%{i>.6@ك6e7D=#|?ķvƗTd2.dUjjYۀYYiPjTMF @FZBǘX[[Mg- I"^KMו_"lTc7:-)lY YJb I(mPqG.8*Rڎ5'0tZNA>˻A4q&wL~7d݌#6ӿhG8;+֎va:8 lFTGd7ǚbh .ˑ3 Uū!;׈NmG-{7.ւpĐM%.t)ƿPd1]`=azA3fg k*Qܠ:~ˆx,)t!p| FAY}ŎЮfT ҼB 9U`YiKWN(εF=Rȝһ/U lE?4_D .IiO*IU![ihMV롶<7g'/nb2.p<!% D0b 5LYv8Yh{uҥg%lDG)#xKrԃv~=uy+!"-T=o W̩,NJ/ޫDO ͻ8rCUuXZfkڞez $ڒے[N@=Ñ#)PR?zYĸBߟ@GOuv&/ij g1իOdNBҔ\‹½!_ ĩq2(o3WU0(]mBwB."Vy)M>l'UMME dbq/dm;ݛBmJ&+n!\ekH]?+GPm܍/Pbssq.T{QEGnNe&Vڈ3 30Slh(i۾5A||BIѫ" 癇ܼ Ysm'>v=iqyI.1Ó8<º qXzk8b^DGLPu3aH>5eGGG6SCNOl&UI;f+|RrNGHzT8@&ѣQCAkCz0w?/;nBj$O~ANYZ9xMR9l!s|6='g]nx@>8tYjH۩9F+rPN⤓LyU#Ӻ# >hIT/gN{Rnwa.|Zs)K%i3Y<[hys_WuCRK`o~3%JE#4ψF9Jyו15V<4ސe} )`KdIiv nlXiPD6?%-aCVn L9j-MiP߿vOwR]<(M9M|C9ZT"td Q~u:/_&0w,o{ī{:Sρᵏ'#!h Sf=wtX&mP$k|L&9)lv mtu!^!Žj$s9{uszj5Hri~F/=G_Z4S vUӄW6*&z{ݟb^ZhPzRHQ);{]a{Kg%-JGPXTq ̎;d93ɁnT% YRF5);lF=I_&ʟpJLDOk<8} ,B"ӿy/\XHr{bTGG9KPT{CdM`c霎6?F | endstream endobj 48 0 obj << /Type /FontDescriptor /FontName /ZGVPVH+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/N/O/P/R/S/T/U/V/W/a/b/bracketleft/bracketright/c/colon/comma/d/e/f/fi/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/six/t/three/two/u/v/w/x/y/z/zero) /FontFile 47 0 R >> endobj 49 0 obj << /Length1 1647 /Length2 9336 /Length3 0 /Length 10186 /Filter /FlateDecode >> stream xڭueX6RXqkpwעݡH!AkiKZ(+PKq/}={:߷vϏ3=3=τJ]Mf p6.vNa&A&̦ vU 'N  2 8XȀ-.!!!t:4`cbaa S5@ 9:'u ۀV0@ZM@AU(COMCl-ʶ` `s@>,`PK??qI@GSb8l]\~l] (0-j'쯂aOO:bl%$+hB1Z;'+ "TlvWfHsr~]yК>$aj]o`0}8ܐSwcu@C$P3%S[V>#EbU$A3N ^E}CgoϮcu2H4:_.UM{WwP$t5wcSR.ճ65^?lh?}y:9Y!rIĢM?z&oPHצ^8Ǩ9Ou!QOu>3s*\,Cm̋eBm<nAT\:<ReZV⻕Yyv'^wU6~C_e5T(A>測+˒1?mݒ^j!.LX 6MY6^lc^磲U4Ihoي3d;v]oDDǴP-UIlB4^4b7L<C$'4'&]F7F" n3RP ghFhZYA0ALc &SJLBQ~&IC1Mm`Y;bv~ؐCLg{Y4;765c?UX:7$'A8gݧZ5{wd r/uW92­Xnm큕]Np 7sֹ`h}-/(c! nȌHu((W^T}odKJ#S3YLْj÷9s!A{D?l6"R~q[UM˴ʼdY-v?V\ UN_3wRa|Bz˱e,~lJ;y-:ReyRǢ%,zNKt(;!ȉ *ҽ̗m:|gT9%d|X^=%8M~E`]!S{Ck_%R^A7H\j۷Ds:]\:*9!b6=,EI!+~# ܞÛn}Et\Uau?YJ#kpįdO:}5@˄@,UPj K-׻1l gͱ]ct>Y?\QF~՟&%w˻_? Z#ߗSbE!IC VZNI}Rpi՛aJ=Gb4COm=]UC e'SESODR 7dƼb6q<2+;mP.-lzΪ!x)ò~*"C!E7J@-eÙF~Q@F-#k#]*+>x* M4j⊎\'YkA%MpU} $3ATM{ދ~DvGaECƜc螱T#xKyg 629,ԯe͏4E,Of`: q2ZVKN vpG@V*]7flp^K5b?*~Lx\ԡpFE.Ѹ=4VzuvuN$ hQ>\Q(]Z;h rQ}>92&bIR*O3b:3)OU5/ !Tw9{7TM= yQEZx1?+y_|#'==_u k)@JZ>FogxIG4Lzc{c}1,9u-XkYEh>02F2v=p3ܗ,2o%Mν躁dpc*S;52ɪOl,O 4G7(f%iWj9cld[S4֊Rr:h숵|v3FǂI0;x)Du>}9Nlccq;ŤLZ(I 4zZW-!}2Bj-o)ݣYG0Qˆ0ˬײ+g@'elX{iyV ?Y:j}t+;;Jl]TlVDlc頙9]o֢ijQY C50}K8j6 ƣP,V̊Qz}g9б<9DkZ%fD7G/Vi4( Ϩ0@)vͳi ƞo9]'5DJk5e,tD7V۳?OD}` >@+a O03oX~7:%VƧ&>!e{|KFc~M#c3vӡC_zqH= ,^->f[t#,c ;U$;´)H;ct~an2ԯ|,Hn-!6aa$g(+,:MNV"IJ ۤ( m86n YM1W?ޕǝHsch#JЉIlB3k8P4@ D:vX?s;ՀL18̣I.}.`9 LA"Sf-͆zV&}K%ݏV9b j x 3Q۳8^9We Pr-0ay~!RP@c_@tN’ pBDo[q U4Nlҥ?K3εVy2e 6 ;{ysG V R!Do~rV%.d#kqk0'UR<8>;uLh>:޺'f-p#dTְ27cwҦ{x#&E1E% J*EV?>Dywse `5ϛxY6/ ]c6uu0ݫ,XXuuY3jޣ=a,2WxB Ǝ>Iv:[Y OPOM$h8gc+(ZQ)|;蓜 :Ƈb&δ zd6s.!V1ǝ4udͫķ/atqmN ޥ^+vOc"ȿ~<(;+IA3 CT ADu)G/QST:e\i+yD:5o3vv9*FCz6ȳ$5(l b ݩiϦkj˗\;v.ic*_(7Mŏ=)4(Ija|B\{>I&Z0hn}bAS\iCz^۳r(**/:_Ɖ`sχdt7;ON&v[!O `7/˹a􊮝U3' ' ?X}}d#O![1Ap !+NSv/婜6`a3x}xՋy4]m!A'F;l =b"<D(g m: t3;h~K v*닦>đx+aѣcScj:KSגk) z7G]mȮ |YQ}B4Xr"ꬪSe >i5床*OF?yAi{IT[銷R\PRR<5KezI! D:Kim -clVۼ)(LRnbB78WM0j4 "!,ѰbLZ-‡앥M[ 6,}Yiq*2Gװ1< ;֔T7QҠwXYHk,]2!Xd)r+sPN(` %XxÜ4#\Vxu夝fK,VϳBs?녛)wђޣvǺx?ͼE&|T%e=8FSuƣ9q^KG*@W4YԲћFA~.D']3bvwݟ޺݋nOf1cޑa^ж6 芢o @*?R˾P:xFE32L,̗Zeuk,c3|k^B!i4a*-Js<35JSoz=~!%Yɽ $pa曪zĴ⬶2Ϡ̸zuQU$e6cܯop| ьdW. `>ĩC?h[ݢJJa}k6JpRd|-L, %s5ч>l`zMJ;5i1)^|X}bRXM_&BY(`?JJAbPUQ5,$R*^:C lC8= ʴuyEu| {ULAL?H m bTUP1&'&֤0mjW?wq*o}Dя ,I?6:ݞW1Zw^0pZmnjEb1 l0\%B%Z!r*_G"$ sW:C%Ʉvz\TD eqAoHӈG=6dhjr)`XJʱ]Q C :xsbƑym%GQTt?857nޤq]u፯6]f!)i.\1RåPηW|Ymqbg;_U5#&͇~"4#TqfBnb We2)K &-nio*rَFz̨7^Xu^}}^onV)l72ʄohm ɳ5+,$aPұ̭1_#\y9u{Pk"o};ەZʰ:xHnSdrĤ,} mX\&O6ï0-J\7GP-1gɟI5D62Sm2՗ qbN$רXU˫Spt2I,@?y%ZGRl>W|d}HFBq8&w҃ͥH H"Bӻ42&^hǻU*STG<(/=zܱ'oRr%EE33*C"X.0ʔ4+E6[KΗ7^x(Clƨ=\Ġ͸Xz#K‹xXsRv+/; $񻨘3uF&w>>n/ش~][*= a#E@<b;ËdNZ$4&,>ЀPA5U8dQotj3֊ݨ tevNoAs ku¥t[@O:meJ|*I=K0̝L"цgܳepe{E6k֬-9'Ɣ8'q%wbZw>T}"룡&m`TKl|_ v%F7 +8V> M<)!MV!T?P g\XJ]g}I!;~ }r=!XQn+^jY3ԸA=CIf~O=@7ٟc!/ T|&gFXٗUF=uט )#c{hɈqㅂi]9s?^\Գ rj Z2qKN~e:{}[E?A"cErX<Y'~ޫ@`5_% B$+햕SCJB{8AKRq Ol]b0a,R߸犥Y>1)`796~%2`Q8qFr=gM趋v~--F\3w1VcԞj8M[}>.N4sHyW܋1H:[bg#P9Ay2p=GKgbo/dD7,wvR8U\U!aR8Kˡ/Fw"e:^ifZUOEMI@ gY.T3?R$3J^w(:U7%Y2ؘZ2 iEOfcSy&y›9UZw׹uY]/}E@he"c{+6=84Tuu9] 8CcCw ;p4n w \qco |U%'6Q_nͭ$pM*,0*VPƤ#,)iezB+I0 A]tJn羈L }_T- 9|7䠻U%p-BCφ@|38H ȋ &BI,aegXdN(EL6 |VJZ¤mD(ZU(wl6 ![goB؁5? \w-2l;DMwc/l^aLk+;[\&jen1)fX-F/P= }-gІOm`Eӆ3D$7ߛ;F ܟ6>{EGL:}l1"V;S[&;GwR>TxJ]7|>%R樌Y ˏht3C- նӫ%DmG}~ nmhscoBp;8d[yLxOq$az6S{R|=45m3-J*Ś..iXQGܴ|w*9Eạ<Ǧ+yu131ueJiNJqFUMSD_G~5)L7 Fkž[اr[{-I>4Ĉkڵ>nl1**hH'Mo|a ,"ɨ N ir꺷fs`GxZ~k{#= *;pGѳ>4 p>ZN4 $&g;5\?1;yZމOaȶh]T\otl`-BKsKpdr2) -zH`%OӚ0m7Q^Դ97>w3V5b (`U endstream endobj 50 0 obj << /Type /FontDescriptor /FontName /GZUKOH+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 668 /CapHeight 668 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/K/S/a/b/c/d/e/f/fi/g/i/l/m/n/o/p/r/s/t/u/v/w/x/z) /FontFile 49 0 R >> endobj 27 0 obj << /Type /Encoding /Differences [2/fi 40/parenleft/parenright 44/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven 57/nine/colon 64/at/A/B/C/D/E/F/G/H/I/J/K 78/N/O/P 82/R/S/T/U/V/W 91/bracketleft 93/bracketright 97/a/b/c/d/e/f/g/h/i 107/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z] >> endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SYOHIV+CMMI12 /FontDescriptor 34 0 R /FirstChar 58 /LastChar 117 /Widths 29 0 R >> endobj 13 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MRYRRA+CMR12 /FontDescriptor 36 0 R /FirstChar 40 /LastChar 93 /Widths 26 0 R >> endobj 22 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TNKJCO+CMR8 /FontDescriptor 38 0 R /FirstChar 49 /LastChar 49 /Widths 23 0 R >> endobj 17 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OUMNAW+CMSY10 /FontDescriptor 40 0 R /FirstChar 0 /LastChar 50 /Widths 25 0 R >> endobj 21 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TMCDBM+CMSY8 /FontDescriptor 42 0 R /FirstChar 0 /LastChar 0 /Widths 24 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YQIZWM+NimbusMonL-Regu /FontDescriptor 44 0 R /FirstChar 45 /LastChar 122 /Widths 32 0 R /Encoding 27 0 R >> endobj 12 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QLXBXY+NimbusRomNo9L-Medi /FontDescriptor 46 0 R /FirstChar 49 /LastChar 117 /Widths 28 0 R /Encoding 27 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZGVPVH+NimbusRomNo9L-Regu /FontDescriptor 48 0 R /FirstChar 2 /LastChar 122 /Widths 31 0 R /Encoding 27 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GZUKOH+NimbusRomNo9L-ReguItal /FontDescriptor 50 0 R /FirstChar 2 /LastChar 122 /Widths 30 0 R /Encoding 27 0 R >> endobj 8 0 obj << /Type /Pages /Count 4 /Kids [2 0 R 10 0 R 15 0 R 19 0 R] >> endobj 51 0 obj << /Type /Catalog /Pages 8 0 R >> endobj 52 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20120806142609+02'00') /ModDate (D:20120806142609+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 53 0000000000 65535 f 0000002099 00000 n 0000001988 00000 n 0000000015 00000 n 0000107376 00000 n 0000107712 00000 n 0000107880 00000 n 0000106683 00000 n 0000108052 00000 n 0000003584 00000 n 0000003471 00000 n 0000002200 00000 n 0000107542 00000 n 0000106823 00000 n 0000005379 00000 n 0000005265 00000 n 0000003709 00000 n 0000107100 00000 n 0000007639 00000 n 0000007525 00000 n 0000005506 00000 n 0000107239 00000 n 0000106962 00000 n 0000007801 00000 n 0000007825 00000 n 0000007849 00000 n 0000008145 00000 n 0000106379 00000 n 0000008452 00000 n 0000008747 00000 n 0000009109 00000 n 0000009583 00000 n 0000010057 00000 n 0000010387 00000 n 0000024387 00000 n 0000024679 00000 n 0000032835 00000 n 0000033119 00000 n 0000040117 00000 n 0000040335 00000 n 0000047834 00000 n 0000048083 00000 n 0000055053 00000 n 0000055276 00000 n 0000068140 00000 n 0000068485 00000 n 0000078756 00000 n 0000079046 00000 n 0000095363 00000 n 0000095790 00000 n 0000106095 00000 n 0000108130 00000 n 0000108180 00000 n trailer << /Size 53 /Root 51 0 R /Info 52 0 R /ID [<8F3A19C78FA72BA27F792B8BF98E1B32> <8F3A19C78FA72BA27F792B8BF98E1B32>] >> startxref 108446 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/tagerator.pdf000066400000000000000000003526371211610345200260010ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 2919 /Filter /FlateDecode >> stream xڵZKs8W(F\ xONUɞ2Ze&!q<~ AʠfOA7Y2cxLru )|Zžliן? >8Fko٪XofSH@T{zsYoKz];qibTC`KpIK-Jd6_|Vlun?M(i癓>8jx:}ߺZ }lϛ{Gq[ gj쨛s;]yKqΠn`Sg΀F@71ߩVUme띍HWW %Txt\me<Ԓ2˨`8j;{ ~A?tϑAkG}M{rS+9Y)J Dq^ 023eۨ|u.fVeܣ d4ql>s:S|TXgv{n[y sTEB^ \x` P {sq_/:]5 ipz ֪Wī? ~3+f xH@Boo$>,0B^ wWQ#sD*%aH >&D:ZE…TKX,C9ISDT̔ UYcSXT>3݃͢]j c {B^h\tCt84Ïmj &7[V uھ˿e&,Վ~T=."LsZ,kzQ҇9ƽ@"T&er/8' ζd{F0FăxulLtݩTPx@h#LBJ]1R& P#? fȇX4G{"? < 'pY94D29d5ʴE ˠ#PRUn$t>a5>d$LYˣ3/Ҟ˫Y\UT|{(:W=m•zL1`6ibg<8R#8O1&a"\,hs&Ý0Y.3(ANncmʮHӳK <{"Q 8yJ4u>w%7zMy0. l GPięLO*@mѫЉjK䭟u7^BTBlyAmB0T z(y+-&.K6:Br/NȽ> *ĄI^ݷaInܵz͋=<yL{k֫ '|)rx7ꕹ\D~wT@ %Iu=U{ ]Gs2 0YM&S}$Fm NG2Z/ut~M2֛pG6> &[Sr,TբT % EL+^(Bz2 !ǩ\Ұ:1MKCd.f6AMCppQxo#= LC[wEWmixlv吿6ä_rx֬OqU;b}[s ) mo#Ⓩp2Ov䴽\G[NWa@D(XVa* 2=VQQ`.]&/CS.7i/1uL.9YY&%4 n)Mu1aGRؘSCl]ǥϘy eiJ!DU|a-OUH_atj) z)"\3wC7 *,LKAÙ@R3zn\=: F_k*}dµByPmU8۽@e$9Wi gxǿh|B7~ <iS'љqk:BP Z+>r&y5Cw`:4Sok4Č=;oCiJ9)G=,LG!YWW> uIfw%KǪ.w7Lj Xl3\!GL!Vm}XdAs[u<i>|$>I3%'27Xy]MLʲI%:1*SL}wT Q/-RpOցX-Jhgv8pSd~q ^!q'U]i~9Д1W,5cU` g h>Sʡh#wE.Æ^^ :`7%)I'  }P]^Bz67*pM5 ~M)L $I8%_)BlBy!` 0<6|{Hh*jOx|rYCV j1NiӧYHbF!< :HW+`{TS_f,/C!!v_yoia endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 595.276 841.89] /Parent 12 0 R >> endobj 1 0 obj << /Font << /F40 4 0 R /F41 5 0 R /F42 6 0 R /F44 7 0 R /F28 8 0 R /F15 9 0 R /F31 10 0 R /F46 11 0 R >> /ProcSet [ /PDF /Text ] >> endobj 15 0 obj << /Length 2418 /Filter /FlateDecode >> stream xڵYKϯ裌"E1Al 9L3@2֎-y$9ݳ>U)ݞ r2_*ֻrRTƨ]T]QdBiX|LetYuJ~6۬(`Z2a*3>F>FWeB|>=;vie#Ί>iyas?Sw#{>z>s{'K~LSL۰,N]δ=Į*nM!R#R ssLJTRrIv]w2Onǃ ~bJiDuȽ ˛.FL!N v`Y%7$@mh@98Z$ߥep[x*Pn5Jd"sL#ϔT`0dۭڮ=]N4i;`5E Xȅɲ@N%;Ͽ_4^PG]HkQ)ݵIF4JL`#O2F2G޽kcdd*tU̇>Ȁ=qy1LHYEJ*`()kQ " ̮| 6Ooh@|J~1 WQe5wO]wu%,_sG2$W\'_(r=A]95f,2" *pmDV0/!10Y"hюQ &|)p y:xK= pV\f&>f춣8gTbs3`*Z!lss~IX9h;ʾ ]Rrw6}7P1CЬr*pG CƧ|@Yn7*:2tvƎkn~igT=NH@2'h°G0e vp@C +va@pí9nƋKc =HKFS O3HYgc "H'\dUhDN7PCE)caTV>_;"/<0J(@դrn>ɂ$m,$):jK?,f1p %7_6eT0D wU"-;p+mG޴:lxed O$d*ܓ:ڕgCj)Kr0tѦ\a7uG vu3ђÌP:VQyQ&64 z\2Brk[=. K3zF*WW ~5ЁlFg \ f]P9P93|v !X󱖰J=-Ԟj0dH-`U̙[B> endobj 13 0 obj << /Font << /F31 10 0 R /F41 5 0 R /F42 6 0 R /F28 8 0 R /F15 9 0 R /F40 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 18 0 obj << /Length 2203 /Filter /FlateDecode >> stream xڭYKs6W8Bx-J=l=%)he>,ɿ~!G"__won8HK*} $J1D9 MX}3ۿts1`qK&2ykaBZab"E"!eQ@BPN"EEXu T!H1v ے,a!%U\u6oUue'}b_EbWv"bduv>&K*}I睦N] BL dIWJZ1ko~rC@8uh"@Iy_8HoMi\Zq."t͇ѱV " L!,@Ld0&5RZ,2b \Q}P `p)dyqa]֞x\<U#RI.r^ u$ +В>) Hٗ!YSp?\4Z] tv8V.>qS 4P]m$GR+ %#pNjDb'`Hx]N`Dt#O:QCHyCpm&[xq% S3&$;۸@x*ogi`bxJ0a>EjAoƳqZ%N0|*0ݬ1s  #l'ŏШȍ֎쫛jDP7onk ?E/Fmw0V:nkhVť;A脷wv [&2r /{ TD4zNg@u rX9c׌Mm\`r3"­-֍*7ŧAк 2 ҬM:ϣI`$97 )#$L<]y%m7 ICwhEnBg.F M\} shCs7tK"}R0P\1^ʿ$$}L}G陻yyGg2g6grwlj inCx;5?r&6!X5<\r(#o5XI31|UeOpb|sQ==i#)kTAqd֚jyWA.-Aѱ,Je!4P{F3Bv?SO endstream endobj 17 0 obj << /Type /Page /Contents 18 0 R /Resources 16 0 R /MediaBox [0 0 595.276 841.89] /Parent 12 0 R >> endobj 16 0 obj << /Font << /F40 4 0 R /F42 6 0 R /F26 19 0 R /F28 8 0 R /F29 20 0 R /F41 5 0 R /F44 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 23 0 obj << /Length 2104 /Filter /FlateDecode >> stream xˎ>_a 9ر·  L6V֖ק*fk: XU,y۔yi<7䦔Pbp|ƲCjh;~?xoZT_'u `;.UoqZ#? ̾\oCJoC \?%.OQd2{G2;<]4 . ׶0"з!Asߪz*u0w>%¡R+BmGVN촡#vЂ +ͅ$B$q QI@PC4F!+h[C( QڦrMܦ\gVʞZٓ+|s|m ._{9X{9\{ㅐjvƅ\mee3z7Kŕ~oI1"E'݉Rf?1 us݄M7_psW3ÿޟ+g n\]nv@[D *S9,ّS&זMlDi\)PSּr})00TuBAE8`oٻ.! }/Jp|rC<hkы?ؒ#&uCל*V_qektede|FQF.aN-sx \]RjY.dA5PAi0`Xι)6|B75y>J -z'̥K?[nͼV%XU, 2x#=KukCHr-:OD^I>#l9!<Stʜ3AqSDܡҠ2#Sb)i>}Ivip=~NrpB|4)DaSB欼S)<2gf%2+TnM1IbwwAn@޶ jH*gcNd~ͤ% nb2sJMPF$,I劏oȓCSeP`F}^(k碏\+s,դ% ҬZN67ҒUI*օǵ \кKQO;#+)1h0[3G$  1[MD*̹b(keURzt;`͡'#@,C\V}Bb3lNPzz&߹Iz],oǻ#P >: ' ӱv S`r[u/̪{09ƛL,@T7K5/vCZWMJ`-תDu*]C4SYg s 8rzlP^?z ,!HC@eaKu'k>mV ؐ/~2BcjKTh>зGsmÈMrՅa>]^jT= p0fNla%ح@X]gG[7ʱHy 5代vK ϙ5۷Õ[[@A~C- Bz g*Dh'eG؊> &߱4ԔǰtC*y[f2X-%r(:"þ}CCʿ5xБ cM-)pjidTg'❧~IߦfvuVBATDRȹ/(2T0TW@WQ(2DQiKLjM '// m̞X tbOT2Elf̕(TT&_ԀH swk֪>z_#0.ѥc yaG»K{pF?XE=OtqQ?=ͺ~tkmďxt:M_N>KF\+QWz^~zej]cXP]9lN"I6?C; endstream endobj 22 0 obj << /Type /Page /Contents 23 0 R /Resources 21 0 R /MediaBox [0 0 595.276 841.89] /Parent 12 0 R >> endobj 21 0 obj << /Font << /F40 4 0 R /F41 5 0 R /F28 8 0 R /F31 10 0 R /F15 9 0 R /F42 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 26 0 obj << /Length 1627 /Filter /FlateDecode >> stream xڍXK6Wh2R|  ZAkӶYr$:_!gV5X o e["_m++e*2W%\79c Ϥ!s$ޯb Q 3#!b R\ }tFxB{B|-M^5o .!\h*2%{#2D~Iq~da8s^}t;' %O;]vnWzB&DHJmPdQ cꪡv~Ag/0%.r~=R| Uv;}dLZ{k#w\u]$zV,2 ZJ |ګgDb\%OR[0C2h~2ϖR<"c\6GGh- =I9ћ8k{D><`dxWN=C2 DӕUS5GSgyyr!GDCd=$6=HS9g&B rL9SYSeD:ك3I:r5ѳ!3NiFr*iay_҉*848$܋pʘD$xK>U`uAMT}e]m}!s,Cʻ~ͼu>5~aA?=~PTp[>,<l)L1q@zشQ<򸃞iEؐ!vv ʈIemam"-c{\75{SM1{ÕA(f<EXvc ^E:T{YL|Bk[!ӎmZoN A͙}fz)Ûv烆,zZ s}u%͇p.2յB-bå B\5o~ =6|m6nn2qߗK 8T4a3q>tRB"bp>e}I0[/04>{R!udyR"0t`>m endstream endobj 25 0 obj << /Type /Page /Contents 26 0 R /Resources 24 0 R /MediaBox [0 0 595.276 841.89] /Parent 12 0 R >> endobj 24 0 obj << /Font << /F40 4 0 R /F41 5 0 R /F42 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 27 0 obj [474.4] endobj 28 0 obj [531.3] endobj 30 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 31 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7] endobj 32 0 obj [380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272] endobj 33 0 obj [272 272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1 441.3 461.2 353.6 557.3 473.4 699.9] endobj 34 0 obj [556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500] endobj 35 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 36 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444] endobj 37 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 38 0 obj << /Length1 1687 /Length2 10403 /Length3 0 /Length 11499 /Filter /FlateDecode >> stream xڍP-; tpw`!0;=K Np]BGs*Vݻ{킖RUUj BX98JJr\n6.4ZZM o;6 !:=ۤND%( lp q qp88&BR@9@ h%v`K+s018Yۂf@@ d}> hЀANANՕ hued G e2WklhM+ +x6؀@g9|:@CNbIVrlIWD`@33X,6 " 1M8B.@ G@_996{d!P[[w}R`󽻳5+od[nَ] wIy6c9x9 {̊v?=x{Am?h@o#4NN9 ` ClYvs<' 7 qLj5uuj?N ?xwaU㟌r s?x;qk5 #࿏P>/4pr=V!;u"g? ?~-/B;;=C ,Ru@*Z dv_Y$EgavUNfV.x> B(=kψ,^s;`g@C={,h- `m ؟en wv |PxA> ??Pk/sQg%SsvAU#sI.χ͜>g7@fhsP3@_U$[#"')q8HOidf+usY+KZܬsJ!kIa3v2jW\$ rbU7=/kf]KdZ:J2 H՝M5x/m6>%+Q)ݠŹ~^_&'uJ#-O*ŃY{1> TO@C)R_2/uFU<ыּB+o 7og@r$UeȒo[L zX3CUyɹχ)fzl:9in\&W3FYd !-\0MǗ.MYǤAm: k/RkK>\hQ09!1p8ڋݨM|jV:ʸ_.N;+;:c/уj<Ɯ?u GJhռטU0F(-cajxd|51m#q4,7P_M'0g9Jd=rMa'rd-q'f>ӯ'=Ug>Y Ɗ[G(K":S4VtFjăkFCP'~b /+;:e)=EKPNlm?}Tt!aZO kL3TsFǺmV̉5 VAUR/r!S=PY_L(kGgʋ7ذZS ĝei{VLM`P٩؜Lepz).aHMpi2cL1Cܖy*2&}8 H#L' aaR>{) = VnL:"ި`?e~ߥ:r.Z ;ix[$l2m{%+Wy~RD34̊3"6uG{r[>Rx~uw6^cpxShr3W_oJ=7f,.l#.奒m'9,9mxv;cLD0*K,*kc"ߒ.6ֹi3 av"Qc,  >vLpxn\Wq\keE̅~ RPzBB5(DvI-^pd6{odVKBXyB!xXZcֳ[Fʄ[2r[ LDU;9 $Hy&⾸aU`2qUjFq~| nt϶ LJE'놠BBI⡡N-*؏{}23Uv0 1e!쒤D#j1b'Uɬ3bڲ(/߰\=C8pbވte[~\|fI݊w)QxӬڢW)GNf?ZO~(,CקJNh}5g=\1v `.TƝ"#0׌qW7Xm٤Wb4ݚy5I[PZy2&DTk_r|wJU_%F#FaL". A&9JcvճG0t5XOk5ӞB zD#,7,tk3 'ɋ"mrl5cpyp\C i%A7 S'v|aZ0aZs 6ObYAYߔjuIz'z嚷γ"5>$0lKibFf(&EOѴeؑرfփ}ƇSIUZ^U\"2?@B8au K1*N|w`K .PnH%;+`Tx:;l.9gjO[K1;Ǝk?v ΄PV+U\Z w9TSj2$ VL% ǨCOlt) /&e9G Ay0T@;Dy*bN0 E9+עf:y^BA5G9Yˏ!zt[8b- +WWWT\&"/o7EY;)1˛ZNXhlZ8'K!֝bM6yø^ ]owȞN kalಪ\?t8OI 8OW;8L<^SRSZ^ aG)9j_8)@E Ûaɾ 'M$6ߢ#ǎAtY"-3nfU89PXO,gO;us]tZ椩wJmğǽMARka5G.Oļg͸"s:F#$H m"WrXoY-P:tFAQWbf|S?S*%8ul/,eѩkI@ԋ"ьceCm*T5. g,Aqa#nU"׉'r3/wh>iWb]hKl(>T욝7.[.m3Wue/w\v3ga܄uxsZHKo#_DDq&^[>+?v}J +_3ˢ*tCxF*zġCҐEQ4Ƥz W'83zgOsM{HY4j8eiҟm+.^fdT$8]Uf{y9uxZ*wGcGf=g 9KpWy]+N{xv؋6mS8ng9x{M%cP)R%r[T(0&!Z{7l;qɭ]͝lJٯ?(;0L'i+S[JE?_asy=ZO lK/=pZF|/b .t^q+!8I,0D+eo.M*W#WYy.{SD!Wcׄ^1y4M5B?pN}޹riY{\~Iz alkKLjO?7W^+bMJlq&AoN5\R4 *Ucw$Ts%eX WP Lc\yjS^7#LAKE!IJY,D~G<(6A +oADW*eTHv7y%I#!{+z\OA8up [HLY%Α#TJmP9'#8樾pw*XM4G&i+77MOfqƒz@>=^Goޔ]a߯uyi>Lm\/'S" w\t)흏:")ځA}P?\Z'Wyq# n.rBg҉Ւpw}sϵs2`3L;mX)cxfҖƯF܋`c1&EXkOBͰVK2 ZZ;fM^TL]뫗rub,= cGfG4AIp][\"塂YXb#\{hBe؛{aAL\`8M΍ESuYzTJ}i~V߁Ώ*UGeROt,oXqMg3IL{TȦ;)Eluk\2[!@NrkܽJ鷩a8ވ@軒a} r҇XXwދI38'\LRcr~-u#x(FGJ[ǁqJu/aTsCW7+-1K")ڥ{jts- Ő8G>Qb1X/BsVÓZ_mf 5Ѣ=Z}7u׷>z=* ?eD}?'X6n"Z/׳CR6yJIFFM먮]QO/L*g+x ѳw}cETk1ã{Ap$tobƹ} 'm1zP$x˄ zjv|+Ce^Evc^YST P|JLZX=@G北V \fA Ԅr=R{OGЃCP7<#ơTWG^KDm_~a!jȴ;ۥ *&ʯ đcl+4O~$۩uwy3qӿI=k V,c1KEc' Ëww (lԮ0Wޱe.]Ai7i9: SESakfƌ%}`7n} sʍ\}?p 1UR};ź#3*,V"IP%4) "'LvC8/Xn0P̽XxH3a>u%14!?Oo 8 E .K2"l]CEДZBͯİiǨpD`D!wyc.ΓQN̤_Q&IۜYCpFٷ.ƥ|&΅s48(ڥLl2 j%:ҵ!t%sv8fMAn]Ggcrψ1T|Nٝ;hw{c '3SȌp8 .3(?xe) 7㑚IN`H} .U ]\eTܷ"M(RQ,"-Je 'R43,IFo~hZ$jY.Shq LUN7э?,8w"ƿc3D'T~Ny9FB:}g)Cy (bev~4،#vvh=EG'R׮P^POGw>&ŦE}%(Cᚥ3fW~'S 率RΈCvy%%[X["U3Mk=ƪ:Da>Aü_=ر=g[u|[MRi"}35od RH)B0CF8'<0ңh_֚XՙFfL/Zx3wPra(=(Ai=BUNGrӇJ,s7ȫB]Ķ<+AupJa:2 "i`ICg;*|(>,3H bN/55}Rz /zGy,cʫz\It"s/?IXx8=*R ) kA t y{x#xR=BEg|GMr)FlWr#8!K0*$ʱtc_12<̮|݈+!k1V:DŽ)Ba1d;a~s_Aݏ*]#5Rd[͎t![lL`Yc>Y cFƤ闽WutI)Z 1Qq~3} CYW,Ir?Uݫ6.QWyt4;r<љl"?)T`~@![FQe H|Ck*eVܼrE7ۢҗ;L\Y.X G/T!TrY,u0wFrSױY=/^v mN1NA4mⓈ 0Sx7@Ar? ts3(25{WDj\7țԳ=8xś&m`lV`>UM4IXnKLv9ش(6+/x;r-4_ Y.if~DAzQuTV<*݆^x'$2BRI|PqЂ]5aѾ> _KLFKauU&0-LvYpxYRHY~ދ"ݫVPx1P3,w <:wLNRCH`!."t$FdfT8p/7lOlE% ˈ,gppa JXzS,OȐ q΢:Lt 0#q,C=ղx1J+.4BJUBz̒sD WvٛH8sه;hbYF;z_گ³`pThwZ\bH1ȉW ,wa#nk xºk~>jJAIKQa.$!*suUkQW r%}t2{CU~>I8$_#<υ>cs:-x| 4*ID.اO08沎+@KH<{PA-aPnΐkNؐ0"\ %0mո$p4й)ؗcXٷ].ƚ%XO]C]LnNzӘ9{Uoz{!vs}i m=o@Eؙ,s)}!K{P\ kv%YRi;?naƉ:jMi]qn b;E54!7ĜQb**PhnF'sZTRdxq5H :niΣ&3g\ڟv9JmUˁuAͼf0qyi'o Nt(~tQYLzB@F;#9zFJR%$$~r Ď7!~dvt;!M+$ΝÇ|.A&9۫ۗ _UvmOJL@u˒>J:an5q $L{?.Hx:gEOg%ɬ^+vќRȪǔgU ̫) \,ɗj;< )@NTSSpR4u5y+>0Ipxy q]V_۸3&Vt endstream endobj 39 0 obj << /Type /FontDescriptor /FontName /TLYENW+CMMI12 /Flags 4 /FontBBox [-31 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/S/comma/d/e/greater/i/j/k/l/lscript/m/p/period/s/t/u/v/w) /FontFile 38 0 R >> endobj 40 0 obj << /Length1 1408 /Length2 6034 /Length3 0 /Length 6994 /Filter /FlateDecode >> stream xڍtT[6H)49CI)Cw7C3 ! ]t H+" z{Zfgs_ɦg((oEQXAXPV`Q!0XuAe&4Ax`h P@8 F O" @$!`@ ;! (vF!0h7_#% RR~$aXG+#H_%xdX7iaaooo!+FpWFbᅰ~t`?ȄH9#G$my  G0 O5 յ]7O֟௻ B+W!$w2 GPH`tA*ZBXC `и| >9 P`8=nX 2[VF)]](,8}LFGt6F!=JLX@,yKTR@FnN/3A ǁ@ ?R `=<)!XDSgFq܃_pC\| =_acM%y# ?SP@"b8@ `n2OEu=U w{<iw 4[p)7H巛p\.BSCMCzW C DL,ǎĨ }vzH, Cc\_>θg p8(8E%̗GNtkMx@XRAk['FpO\t5{[N:3˄9Ն53y %82|_dMRYL2|=Y2 QvjQp?8\wW@ʺMۄɋK/MXK=Xb(H 9)s׾N^rK#Y,[Ymъz%ϱu25e[I)Qukx|R)0+Uz}ɤUQ5g3'Q,HyMoy"2s~LMAZ#:(XT#T2=w=!Nv^ Td( B߲ YpO6㳲1NUp A!<$M~'57LvJ.U.mJ?J\v%BSyJ+=30vq/WLl|srjև'yJ#%guW^!co<(oXHV&?燚|iC*3d!&[0^ 53_ {H z뇉 {_F-aBDd1Tr*r_9/Sk;Kf׻LgVoSh]G{S->N\/ëMVGw q ]@)M ; QK-M4(+ŨܿbC&!\ Z`Xg_];)C_ڣ7]%I@v%BYXҫS=S[h+ޜP}L%;by_wIOƨ!]ԛ#I19&2uuus~QЏ'9/eRW6k<ĒfFynX7OyJoMD /^^u$&!uesOa)N2c!GRݾ*w;f(;]I7VJWyF`0Ԗ;dB6~ӄ朿aa:)r|ؕY8lP0͸Цc4cu9e-9gRpʸLX42f0ڡi",zrs}q/(5=;9go=h )2 B߽W-k1=7nSo6zibks i:ڡPj`&6-Di>+r4-^FF9A%CKfM/_ђOJЋwuwTvw Kr#t\q[lӎDW(w)J0?nWp:t< * W=sv#]*GfZ 5[3?iÁVP' ҍ-˔*lR})_f仗9߾<0Ǜ8@;L⌘Fc0l֗5\~273G6roc{}v5NFՇeSd,OyH9D]:~Q86vZ]GJWK˽ܻV#u,]ٮB,FNK=hя9~J@LS?ڒu2m@1p]0ç JʋSJ3MF$q q]gAŹع#f][ $^kZR# 2 g+d {{ rQ]4>]=ح hg*Jtj )bR3yüm _ `:;72tx 'yb}^}ujܮٜ>whqhs\ZeJ"YyA˵ ܽ픺e- ꊗC\3k+2> )].( +4 -иsj5D2dt,nvZFԯ>U1&$!oS1iZW3-%N#G 3b}ct}ٴ{*4;1 m&S>;1'B7/bGmM̗/! Ciӝ+eE >FL:{X±1aJJt!2oUDwujG/So׈we|L}Wu-t.Ւ foה gٞu&2{nuP9#(SzQ$18ok4G ilvN@| v@ZqN}ˁMkmx@7s֛Z\ `v&fQNbӚ&~6 v? /W_EIFǬ|a+oaE~/]/j ,ſӶ<'632֗6ū;)+@ed$txS3 O{BN9 T.SJy>tkZKI[wONŬIj.zKXEK~ad>woW.H_N(V%͛z:9YSYCCw;wDH$q0Yvs*b4EPa3sܶZt ZNm'?B"_P^/l.ܫ>?d=#"5Š}3`DkB{ON#e,K4ֻzw_2L2.$ 0ؑdk?,j;,R zvbxT @Ma zS#LU>7fQP$zu3Q{sKPLc2 UJj?x=[L -h?!WT_ihƭ^-"/[(~޵Ҋy=Іgo6Elb.ӹ0պ#_<|ƜI`Nt{ѷ41:Lci'+Pw1nlt!Tz9'1E@iǔǙǐAF1B.5Ϡ,KD S9C>V^|)cEwhW,gESniQ(KS0 ǔs-5[Y}#/~t^$Թ"R7Ϭtf!Od-hj2G_~2f5x^]Xˋ0T~>xJ58mPYIOZHŋA(rnx: `+P28땐S.Mco\qڧu^ģ蓛`+;? j*f.w_{EQ< f 3oT VfVe>>Y#ygaE)Sm1Ĥ"GW;Vt zN{}Ll{Tȉ$x8kNUJXpLg"Fݞ̕AT1~vQZH} 4JSOov -@5ELMt6i=3v'w5~]?'^'BV?_PG ɫu@<\m\\̾}oC%Im~ɂ# 90|Xch΍ş|N=j_!Dx(. o{ YIP&3n(WYkn!GrumXx("WMhH׆މ͆:酊fYJbs3'|Z͢.7#ڧ9^0 ㊨Y3^eq}z iMͥ1牺]-C?72I@h#Nj!%1v~n6vuKEV>9=B"<] pVݞToGZɫڌ6$?#\]TQTm}7ɵq(#Ma }U5ٕ>?㌇i<7DZ,SreJ ߊ|3rv$Ag,lf3iԜq;A|l*Vk8^&\d>!0lǺ;0<˶# ̙M`lϱRUVl._ Ps(ַLQƧaL a[0KxƝY{I{2YW+iMnwt oDqt`M͗*9`=xG];[nz-]rwN~Mq47׍P{pNaPt"<-ʟ\t7@T?3ݢtc̡yj 㶉N'TnsdZj]2{:Ej_/A!A{p80TS+IwR*7f Q7BJt2?ϼ-u)RUZ,l#oGP?6v'e-߿@|qm.D;~UU'PGubjvȇc']L.Henox)Pdtyl?^ ˸,INp 0:6&tz&*٪#,A>8W툵vEvh=iҊQO>$v 뮤y6Qn`!#Z&?!i+}MSLp9Dzxue}xfIJʏb^`H&a[7F5.EeE{c)^pj~0ʶf$I39ߪtyUI[As+i1akU ͳcrilYILB*rmC?F6ovk]!IkۉIءͶ4Ddq+ xkCDKCWӴ.D"/Қ^,I\ M-q (!yy<x+L@3'q,3Ϯ:Q6Ԇo;`Cà#Wa endstream endobj 41 0 obj << /Type /FontDescriptor /FontName /UKDATJ+CMMI8 /Flags 4 /FontBBox [-24 -250 1110 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 78 /XHeight 431 /CharSet (/q) /FontFile 40 0 R >> endobj 42 0 obj << /Length1 1532 /Length2 6860 /Length3 0 /Length 7877 /Filter /FlateDecode >> stream xڍt4j׮.JcD'6`31:k CD^D BRwݻֽk֚}΢gȧh!h>A~@Y@P BFP4 &d7\rPFA@LFn00@PLJP\ ;"PR;D! )_ ())~W8@Ap6q0W .G4)% rqG7'L87K8ՆU+2xmd4MCu]pWeNSY\W:QgRޚ:`|puXgź>&F>#-߫'&-yO$H (&EG+M,zAK K"H抧ơx}D.LNԀHr"{֌'*#΄[AQ0pCl1^^lh$QejUd291u=ᾳ?g";F]\0Sd[SrUxQe3J0ǰde7 X[n~&άn fѦnIFD+ }19NytL^)E.bkx MN,{fƒsOcvKJ;J@^{/jǭ6lN$3Dw)ѯ5q= |sؔ|Zn3f) Gg^9:UzߩFLw| 2W{*׳]˝6|ٹMI\[gʳe9A_QkX3&>1*NSJwFH0.FU,a'NW!RƠ$•/0l3ȉ|5>jV+lL}ZLI*-Ȫ1!27E9s& gHp`h=ɬ o{":^&Pi?7C; \ѣȑqhïN)x T$f0Mudq}5FQlWQ Md$ m!,}lcu9WAV?RІG55a'՗`:Pv` !NdW׼Fҷ]'u}HW~N8zi#1-Ȥ]Nj$A`BM* !rMB%g#l@P(&;5dҾ|ßRP@<1 [CjTWs5;vOĄ+V= d+&j}7bpl-FuęJ3q#WK˜R1QY\,®RłO#ĸ?U]uƣ]DLfws0xVn~i񆧓tF9+V?1K {IG:8Pw qo入ss^ jYةh#$v,\bs*׻/[!52uϊE7†TtwY;}wg4X٦}`flom@G\};DUɓpyUdl YAE'NE^=|_`7-g^6y&OT5G~=ņt*&sEd/J?xCk)#N\4ph;ۘ@r'Wv>p~ڂ"~q]Ru9F-f~яf&$ j@,T,ᡸ=Paʱ`)sHBJ+Z#G=?wcA,j.-^W )@H z$n$tpb7ВLQ+/ <cév_ڷ.õ7-qK+n,qFH +n.6 1`Vb"YYj+#aMu7S;^ӊ1';=NMAIP_]X}Jk, BXEӗbwVFmtÅSzA{+p6PxBCn]e>jŗk4_Lܵ8eaJc0Q`}}dA )0`ҬhWDq4IzU\IKa`P+5?zfVyb=>˽.=Oo3#|Tp{lK1E.ɁGl']k o ohFo~xH8)(@ RBs);FTqQW}'ӏnOnﶝ9â2sY$Q!c;wlz%XjE8/u-6ɅD &I=f|p/%-Vj&D)fv:\8QG~rӖ[7AiJVO/rZhq`ꄒs?ю4F]|&X#,o-КpJne/3bW(6Itt<*@XD)>S甌9mNg% rʌ+V~avZJn\}<{S cʞbNtCϔz7΃@QaQ"ϾH%$&|@{*{NՊ8om ,Ox\)$8ozQ?]v{%A2#^p']РK ԶM&DlS~|u/ (RW=7D 3=,m1fbG΅GW2?ڌ_]ڷBIKg̨C_|JpH CMZ>N=ʹc7h~DC{ʞg0D c引LZ;G%Ϧ6l\Q`I bhFA}h]g&XP"D\y }O %^M| T8ͤܢ63"N ѫ CNExG̊$ܣH$F z&QR'c{d)o5GvBZ=aԿHPmKΗZ7ƸNf8ۻ*K, Pݾ-i4W" . Ƀ#ʅSk]>rXv_;?v Eʳzxl#3oi|pQz@ʹYKgbZFb&60k;s=µ')ص:ы 7rc@m"CM<@.HvN w#HWyZ%ŚJ-SL.bz)ԫ.7hIk-tсq-0vEgrCӹk ~ cM׸/L)9>r㲞 ΈΛO6/~R)gφRyg̻8R<|Pli?c1:ϼp{jB~#¹iPg*v\[Y<u}΀oޕx&DLC3lyD>L|эAJ G0'y A6#O#q cO}86hⳉfX"~)-}ۗ0#[!}o*Ё9Lt#{:7 yl7_gS1sc,Q'jk+9[,yJ(n S, T'H3`?4vi$)HTj;4w>^5Վ2([}g\p<s 2s;bZsvҷ!&"|}elLOGߝ\S 3lBrA1/:U5ɑ6R属go4쟿8YJxvqW3NtPE$B:׽eeW' akC]ݔ)w0Cqsx%m04S7|xϨHwjG'ʇ0]zxuyO%%=!`2;RE2?(':_դ/~X0H{RewJ>~ܞ|B,:%29`4剁6J)[G%>" ; mtW Di}\p@ _d]6(u~̅zu8#qGe?6)|j12Ⴢ33  3xi8H;,z-mMWY tsTDvXmPU%:>b"ۜտ#[Ma$۴Znlt>z(2r2zG"̃[2T搱ٯ4 P7=F[ƙnMT>pdS\=e&o;կ{LϕE@9MG||0$J DrF_eeX!y3Dr1@$zÿ*ޝT;<>3T @R']`uY<\ђ^jEr$s\K 㹵$>(iUѕ08c(5gw2bc/cV@,qKε:3星 [QɏmW[QT@J*%IP@gqvasߵW.eD A"kI~ 1S0굉{jRr+,.I#)F_U(-zTZlgR(KZ(SE瑴$9DOo6mZpGv5|#TӨȻhlR!Yq{Uq1zmg9쬏wVnk6j8&7iEٔ:GR:Y̦][Dݸ kǧn NOGҷ ֻZg4y>>c '%O[5:j1P+*%:_)8]Ze &HN1<_ZϘ`O2efvg=>.( endstream endobj 43 0 obj << /Type /FontDescriptor /FontName /SZPFKZ+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/bracketleft/bracketright/equal/one/parenleft/parenright/plus/zero) /FontFile 42 0 R >> endobj 44 0 obj << /Length1 1379 /Length2 5943 /Length3 0 /Length 6879 /Filter /FlateDecode >> stream xڍTTݛAJ鐔sf`f.i锖nIQw97y>ea瑵[0_ ' `a1?,F`I7< Bm :LA@APD(*+(!M^F]{_K (..; F@l@0&vFwApP( >>^3 z`$ 9%`8@v( @0 Npقto@ #XnW.gBd v(Dq@0_ ( P5:A%Y]OtHEB*dE< C! ~O۠o݋X`pk;[7>C gD`WƁWq/oo3~>.pbF A` @-C`TGvѓG@<fh~,ܲà^.6oA0?/E/]oamA<?Uavpw ?9\8G `6M)U?hQrB{ zG V& >!bM-?(Z0{ߗA*A<:kP GB~=3 ?ZqB?%H~h)"nKs""@{5GShx~;8<|ꗑ_m~oe`isǪͧtfԗZ$_R˘F5KeTdLHH;ʆ^kʛHirIҲѦ[.;TxtNҨK'3CB<)z_Rۑ\*KQ_1>pޓX%9lE+IR`O<ƴ3=ɺv~0B "'#sW8~o*׌ n2hb(kt/h:qœv$^[@Pl.PU~fb'6X0S`f6a.@tSՓjĹ9嬏=F~I#wʃ[JPTgݶ{; sJg%Wک|{4a.K W-B&ÚqhD~ywy ;HrDr?m[0:vCB /4#2t 7F@Ut.Fu~?}j R CԴMJM cG>9^ '~\o4ƸE_<2[@c1,}Kpf9Mxk^j,]K=zwO@2 *Gօq2.z-M-{v}U@$Nd&`ޮRrQxNKvVm3oqf{̎w4 "~G<5lqnm9zƦߩ桛D=^ lH$Da#IaWvWkx-MX߽/҉# t6&4T9zӨNoɧ&.Kcӵabt?Th~1@=J"gt5ƴ1l%8+J:ҌM 2hlwod566B|Df~:]T/'[!YgnH7ݪsgr|˹l,~{MMwgH[AsRQd򱼢Z9ssSaQb Qs[/|vFqK חz1Fe׾'ä2]cȻ"i1'pKl3gUs7X1Y3ra:vL\=ֶl{cbOՅ>Ox].;gb ю Uc}&]7@hy05o8-D`q3#vMF+䍰B9%+G+&nQZ&fuXl(TS +wc#2ŞU=B yG} J֏%Aξm~t8H 4짾V2y)=~L-) PsŬޥpyӝ?-70#'~c'ֽ I&57*n{#k9JQ,a. 5S(t[l]cVHNkS}傁54,N6sl@~_M,URԏXINWM1;r"Inه;gۻtvӬL' S ,S4QGۙCbj> -l睛NٱBeRufNvrzURY T} H^HK|s5cn 錣 7n!dU&9l9XLb'J KX1X[FnM tlj'#@T1m\u(Zyᙒꍁr }Dt֔oR, /Lиr/M3S;yotlB'Ku} Y'mX'grr 9}j7Ks`$^[$Wiw45=A_N45+zJVlmVaq}ʋh \E³Jx@QMz`{ހ|F\䣶Z nU~I7`v7wwYa8-HQ%$u!NJr[zSI7+.וʃEG˜n}Q,ܮ2qY$J+:E;,26'Fhb@+E i:ꎝ}uRGt.sڼh] B6[~ DDץοVRyRZ \j\߳|rm(k$SL`OQmЎOSOcb/Q$Ld*+oc A o*b9o|x4C<,1P:w*qQPz&'ݿ 49y>22+N?(S+ }Ol-lis6Ww<R?z3k-l^|cv/c 6Y:QE|5wva*2Ux([-%0nl_[˾<ܸr14T~g~dq{>Z}oq"|0ȣEz{w]+PC."n}[CsW[s أW,کyG ~'- ~F`(.78wτh:Դ)}Ę}m'ׇF#-VdT 2ʨBi3+wnE0WT(oU?Lx5Q~:.zӒX|Ǚn ETLv3)A|靕OaTl`=uE18o=l*G=!ԑw)ϴVS>7;‹*lXoFh6;\ 9p"ִ/V_dffG|]}.&uNj{쭹Vyz@P?-G2E Kk }QNfV&2և?| ⤟B[H^upGKjQ7➶wfg)i6y»ƴbXebGj^ JMXd=llmcf<.`b(J{NT2|d*S?hI,+useĵ(m a|j2gwL^S%Sԯ`Հ3A8ulDr_`*B5v+Yq>=z, 4խkd:=at8J vfN}?i\'DݣڲC]3+Q}H j璒 Ф"=;=y,|r-°T ;# z An}aF[[~Z7Aiy# I_`\qJA1֨WLږ["K=] i<=2&?!0#g_ʃl4erGH^Eݏs6S$'+m ^/GW$=zonmoi1mW Zj?|opE3`o>zV#}Mςz?Qcsr8:ڶʓf|JmhYxzuv_''(-;;)I:;;Qǖ1agR;iofgw@/FXɤxPw5׮2yq_:vi+r08,ngaoUlJ ?^3]h\ }ĒP?w7r[=.pW:pzɓPNV^̃}d}l(c KKOf'uZeVP[|ճJ⎠5'4'*;o~!M9bQ2Oʹ U)&߃,-ɉ 'fTF7%GTz+t9X&t"yA\~AGC/2eYt2O-)GE6fPo4x2KS:>-fKf?ziT/ +WmEv)oқZ['P_X T/Jq*P6 +?ǻ]|1,t_)k}PȺfN^.Ji$z.Uoz-VRxM澄K8ekS!e42C5Z(S);qsGom&\%=AqJݨ.:o=3 olh֚;wK)bn.X ^ոso7~s8R}C>8-)u\xì۾U ,7S~j8BeeKX%4>#Ҁ] /{W]giKvͥ wO-| *uPp={Z}*d_zX(7C(xkGfN:U.cPavUiL7'IJ}Q#(9 *uFUSZ(QsEh@TZ啵'_ѭ΀m+.LٟevbY'`mO/(FmBr+D{4$U />Z&bVF(X8-U)ȊQaK ű*Lh\24Hr݆`sfȚYNgYgӶQ; wyXRw*.EGRQ"BWw֩t n7f~ǮNsߩ('( hX)+nSzxz1xW[%Uy >/S3@D .w=oZn-yk>mAAYI/nt:O%rr`k8XTe-%Qe{Cup ވNavnIĶ!Zݫq)z59΂3_,DlHdƩK@g96l+%vWpDV&Ŗ^Pe>!`XRݵ(ӶrS)gݔ,ؼLnvgBZ-ug> endobj 46 0 obj << /Length1 1462 /Length2 6395 /Length3 0 /Length 7380 /Filter /FlateDecode >> stream xڍx4}ۿj3]{キHĦj+GQ{EZU^m7yyߓss\䄕I׀WaVFQ|@  P 7j vGBpPpۡИ =`!VDK<->:F* |ܡN(t N(os+ PN`WtD `A(xBI{yyٹ"Ҝ</( F=_%\Jg:A ;`PDxtt&@ KY//GPoc;f( QCyxvp_v0$moi٣~nPء+SuC!PدAY puQH_)B t} }@_e8x=jt1G0  '_ }at ~n7]8 ?v`P `v !wz,h ^zB3[uL/<+(D€W7kxTC@wB<0pA3o[ y ~JH-K۹Ba>4|@wC Zh-j(;<x|E*CP/.= t E _2\w ="0zW B8ZAAa>0O`( ]cp5Xa=Ghڣ:?y zRh @m?>&`o0~ s~qY+GŻ1h%b}礉2X֡3ݹZQo79K( 5#ނoo 1gkIzĶ)&3W=B[/7[{W@9 S:-*N.k j̒$E5Sh|G,75̡w9}τN 5zkD#Ȩ}ՙ)rԛl iŮlKXK? ۓ<RY *Q+3;9Dw-+Ǵ!Z8QfKO#ZH *i^ ޭn-G PyORwwxP#/Ͽh3g)g&La`K]ˀ1* $wxɠg\R= #T/pyBܐ9Z{0:RAu~զUk:hiFdK6/^ZR4C7oiD]=tёڿ1$},".Qm`~"{e ѹ)KD{,K3[,-a?qu՚3pm)Jx epsdvڕ5A4IB'|!p :3n9|⢜̊g70/jP6*)]u9n >0yگP<Љb(:]DQeq}t ۮ 6!1b5U?i|:;m8{vd7^} F}-l=.15-YXy9ʠlAfΔ#,4텋I}G;. ǬXIrW_\1bGw`w_RmQT$|dw$(mR#(ëydYsz=\8֕*8+b^WaS`YE$ n~U@UTnZV*hքw=f_ {S-@ G޴Cj_OM󾓚aъ[*5И|o9X‹B="U.0 Fj҇Fs5<J %]^.#3\ p%@{CXs7 2{}O~:f6l>[~\Qa:4pu[-qQ KoQOڒ2"n"M=-@8ky;yuLЫ S<3 h#:N:u.y_r) ?xy\ORfR4ц1u9jĉXBb[5QLLTh^qw?.] avV_Klm^5Ci^3 "1}LC&G^roc;hTVq^ ,ģ}*T^ү0>nNس+7a uδG|{AtEʃ"PJBj*˾-exL9EwH' \5_L%vmItdIp,iC0G(zœ쒝%(ځw8?%;jpj`.7Λy~p>v~ڰ#73qAstH}dZZvmQr$|E|(6Foa{ ǺWR?cпgzuu{qYǥ )\܎nrA<# W.lsVb0N4DA3n'ꑈں6GrBz; gOXĕ (Z*sn ]+8Nu?̕^"WVyo񫱣abKqc"^BSu3cЗ/rq{QEOu?κ/TX~ӆ}\FiKy$3T["u #pgh}6YN^m65gy/M޹dGaD&?'T/s>PM'~sAh[\Wn(~|E"fIuIdP,}H0VeO?~ ^B՘KOhյEK ND=~JCŽOW2IX(WhP9.,..,Vj(@5$ &'ç?rϟ1jmfFcۯQj<}NgKyB fZ4GgF<`ד5 1ʆ\׏M oOPhc]Nd]9 g5i+>8jlY?UВ2u1ِޭg-JiJˇ:tqz/X"2# +$I'ڝ` P)ΓTpxq{ݭV:_; G_*XqbWs0frMs~.nՆXFߓfBayCHIYeDh{͛[]^`YWK]vшʎI.( #@K +ob,IiMq^1TD[mf7*HȐwirgΣث[J3+,wpCp?Zj @ NB$ '+g &~9ZSKB2 qZ'V$L%I=I2nJgL]jJ&)dXیund24Yj4up -TMZVkNT{]鲯$\ f0^hn ( Ey+Dd'NOi=GW_t'+3p0ϸ?iM*';Ku ^W":|OP{Á¤GƫUUկEcꍐ!Y/g}6ަ*_;%~ϒ,Ϳ6;IڢJX޳]‚-ύeg*Ti2x~m5jէ~\M+_;]TG6nCvT `$> pH́d#32hD9FbmoVΙY5m4>[;PI& 8e ~+&w=SھeO)T!.bJ)oIRq tFAD΂ ş+uD]Lwbְ:/!ydTjV{ALༀ%"&|@Ks>b7MsV;^t:um古L>OQ@I 3, FvɔV7WTYq쭳.I5sѾy݃3Iyko\wC=X,jD?mtp73X^/ۆS-Ъ̽ܝm@i*Nnͮࣉˑ~nl/(Z(jr"V$BTI'NhĴ%M+D2P(چ4$=@2~LT"ןa q?`ЂbJ3)3E=BXԅb&k j%O_HYtm=rȾSVsA9$ݘn Yl^Zo{Jݒ3ZD5js]q+? |`yaBA4;p喥lO֕RG"$m<^2~1X1cU8-W<%<(=}l_:0Tza5.u&bJ[QAM$$Q Rb9cd/V@5g՝Ul&[7 [g߲Kf T-L ?sЗb.(uD(j]{R͖fVxRU=-1y'ݖ-pP鱾k3ɜxq0O$ Gze}L^fZ$e= μǓV; g+`G羒uj>ӖJ Fh4^?JˀE .6߲sn\.Ϳ`/聟N~;_,5?a#k-y>JQ^s9 דd)h +6yAL..XpTJ AI0\$1Ic4/8"=(5.[Ϥy׉\:?@-ΠJ3Osscd _vD讀l8|w#' R[VIϑzBhekQn$BQ}V WzP}˩ nw}T/eP J|]m-c g۾|}5Ƥh̐,=ӂOs ˘ָŘz>ʏ7ݮ(Dĥ]ѡʮ|y{sRa1)m > se]#2'u=O(s/Y|@h ;y6PJʪQy"uυV&)y=>[ 9bL.q@B(j2]ydIN'kܤ=F 71m2OFYcg̖WWl6ouͤwcz~X\n:U .jLИ!_فYRAqpg >Д?IZvFY JNބ: ٜ=l؋ӑ3?4ѯfRO'g]DҿE1?gdxpnD3V\9ٷ y.W뱷ߔ5_44N'7> endobj 48 0 obj << /Length1 1606 /Length2 4586 /Length3 0 /Length 5367 /Filter /FlateDecode >> stream xڭVgT۶E"D@A>^C*Az$@ $!$tޤT)ҥiRD^Jo"U|Qί{Ϗk͵eSE!‚ @dsB!5Q(w_PX8 dPA@XZZB{`vXH߄O  p?\a !0p Pѽpij0$ F8h!0 EaoP\X .pA p1;0 ]; HIE"ƠNLu`h,'Y([|&lW bp cֲP ƃ1_4p.pݟ  "`..x<'݃hǯӨ_YǺE5!X|m;8EQGڢao?# ϝCQH^Fa%NeN@DDMܿjV!`'~` 4o;DoǠKv]T0. l~PGZ# %fh8"]w9^_uū5@-O EE;% & HJR€T#b9eӲ , /ֿ?]7ka0w'D6!9-[Ɛ٫lE3WiWj~6+]d}Z,X'sV1r՜dӚE3 ɷ dGf59Cd&2^ܫo{J !:w/$"5umY/߸vuv4.\{C! f}ʖ|J.6)OWjt`XJf#XB%y/8QB[ s:=ӥKF4@简[5 ('MET#w)V<]Irx le財)i0Kv*JR%#suY9$E!OF &=7Ј}urv0Me,_x(_5pjZ%Zh'x׶=-u˞ߘ PYvb[QA}SYnϨYoDImI͸ۛKzYƃ1Ƿ/} 5SiZ%$c{F,`QG^[vyDY£FԜY1;%kn$DИ,j $[]jR]|e- tǛQVn7^'2k|ݰ:Ik*vh8 +fyEd,*WUWd*1!Y3dES̪\cr|?gR}Kwќc?,). ^6e<>MJ͂Jӧo0zYT+4j+-W'*N؄YMR{*G-Zvuqx9@V{S7$< 3zVwLjD D>-A7vu==zG(m0I/I}P̃rD"_ L%l3T_۫1q*ޝLvnA KjMlC1Ô  H:PFrX#)3"R5y6/'>N 6:%?^Tm6IXŒm ]ox^IPVJFuwx-VV)Lq #YJCE)q xxC>ҧj;ē<4 ',++U)!WM7+&=y"7jLd9gw5rK,ُE&v} އwd2DS=60~׽|=jZAMIZ)~Bɒ2T!yB^lʢsLllg[& 5on{EH'gb12yJFtx#-TFv5/+;u]x+OdENr`Cǥv82_gۤХ"$WfϞNt6k/|G^uht$b_pGuJ 4&RQXXLWˎ.!E.t@ފNêIV4Ȑ{ fR 鎈(XXÍݕQF4aw_rA Km˳:"XbA5,V%J=a|ԓXWYH[TJsfbS,(wnCCFsj4"-kro nj5NCg us0c/' ֵ xBC)Z{EN:̞"7˴T'>у7aK~j26#7v.g?zt,ѣ[tFjl,o˛PB8^͛pWy5P\gAwK|uQ< "d(e^hY7}P- %Varm(쪍4meIgI\"r)E bS~)n=̑ rDMwv HbY9G`/fV^an$) 5:WNҴcMOaUkw-g)Z2E?Խ*2r>0mGe;ϲ|=[&\#} _^V+ofm6; :m. }|dC|%&9H.,n]5ۋgonqzbiO NCGQ}o"EVMIJnxdh? ^:Ryl}šGeibl!,x3.8sw`V^>wH!SŠٷ'OvjyDtcߵݖx$|6vZ.3ߣ^huoZ`eUvdZqn+ s Y{3]P/?%KYj,OD?GTvKzvuos,%Cc3kAAxgi{oنdJ3!*akwʠg zTקn+u(r4G~!{q>Ecd^0)+DGM*)?z½)(vήHP 繵2]K (3 &f3J!Z{VR'B>T`*~e8'ݠ"Ҷ)G,6AV_Qvt2Ͼ^.zvb*ZfRW`E .h$P n@pۺ#e߰ĵfyO )~7Y,$[92f,'G mR$4=\ϗKεy%&xWƤ!`/X])^zeνx"4븖|ZFWQot <(۞gW>4M%;zoq˨ЊҦH3k2_ GVH-& endstream endobj 49 0 obj << /Type /FontDescriptor /FontName /QQRVPA+NimbusMonL-Bold /Flags 4 /FontBBox [-43 -278 681 871] /Ascent 623 /CapHeight 552 /Descent -126 /ItalicAngle 0 /StemV 101 /XHeight 439 /CharSet (/a/e/g/o/r/t) /FontFile 48 0 R >> endobj 50 0 obj << /Length1 1612 /Length2 13782 /Length3 0 /Length 14616 /Filter /FlateDecode >> stream xڭweT]ݒ-w ] N]^~=^UfͪYk)IEA@I+#+ /@E Ϩ t1r"PR9M\A&@^ 4Xyxx(b G/gkK+W-==ÿ,L@hr:oTV@ #(RH&ve7S;k3H 9̭*ͅ 4 itp:[yX,M\v0s3oBΠ?|A..f֎?Y%.şHs_%jbpz0vq34\,ŀ 4q6WwU'TohnQhg'ܖ ?}@D!abr-ARhg*3 +C{ZNa@y_wnboml@-?H?pd\M4C ,L,0ZHZ{͕]ͬ&v:]lg0Ost0wD:"ߩG)U(Ed0DEA?'3OBnVV&0Z+:[{wkeo0f fEx/U> A=f@f|!6Yq&zX!Bԋ k@<ƯLS^ǎot{#=vݩB?rBT ː3Nb|.7tX4&TT K_aٝ.h 1)Q:PпP%>S v_AS&z;6C?S Fd:Inq%i\2cV% wZ6hIA ɒdT_#$v`!Rkm/Nг|3cǡIg)k;|@揄Lڌԭ-.7gT23*x|Bi÷;7vZ.p^>L Yu`96[,#=6=9hp-qʸ G,(J6N>99]h陜k5p}@GAe Tk-9.ٙd(قHyҚ(ᯋqe8þ]43ZCa*fqeq 9ro[KQ+3Sy*℥"~~CW4bdRʸmoMearR*V1d:IpI B*&QYze4-t%vl%p 5-Kʴ=<HW(~޸A<Ѧ\ѼFP,2esǢ.";KV1uع},KW 'eDs+*m ԑD Ut2@ T_cVjMdKq4H[eSQTR[X)'ABYDQPt ]?ookbTҿ|KfL"`n1'؈Ə^mu/ ]_7gcaW^Gzaf1FGM}Ɇf-n \?6eQ#7CEoy"&:9𖒔;=ȜbGq3D`dԾYq$ 9H.c, H'^L\=g/dFNT5VnTӁk5}lESj, HNh3;ZE ֩bu?ʑiN17:-Y _~oWǜ7Ņ0?i)΀WRK׬&͇\#aa$FIk9 |$ZVB QJS W)i:e<>H2I~׺$$գ~2NL!_}@,u1FsKox+kmwRx^0~\eev0U<@Z(3/lFUNuFIi[r!w=/Lh\7 rMcȇR;;{CӿsIT>e|XiT(o |y;O\~w_nj~pyu?l-Y(TV*2D)CҌ{-' ^kD[As"m>4w7 g7dxݴt00YNwFq,\030GXˠ \fak8~ @ERY f+R:ĕ{/ЖHtb9@he v dt$y83POu8Fٓ WFj\6-b6+k%[}5xhGNB*DTC8^˭,= 02(Kv8۞oR۾n| ډ~Y x+\Aq[68'B FMCHFv|]x 5F sBFaGQ?7 vG?E{3t%2-x#t&iRiC!D"]y"XMԉF`jy[)4Uy|T?· ~;ې;ʂ idmܮ>h Y+dOԐ7Ҕ$UG0fCbm_ή< a[GТ'1}R ɢ3VPDdS.lbե'@ `t<u.҃%k:z MiK/r:!bcC#Ÿw%cKgLsgjoːڅѰN55"G% ]iMap$ϮIWb[ZUg֐M_a0O~V|͹' Bf=P8:pd %F\jp܏(D;`Q&~U0*@}~4>H?_R|ac !+1'}Nd8ƁKL`s_(I, ƱD'O6Z;>ޯ&'7MH"wxYخ{.ɜFTXo7]'g錡9cf+sgs АɝfƍwgIg:G77ڌTuz36Fk:P@EJA,e}' (.8#饑W[b\,DϑHZ qo&q y NʄTRW[]3I_-,Wlv|^0RSRl!N47 1!e]aP]J&^'wL'2K<:t- '{kgzA%B:w\<݂DБ@r]7f'3q}p7rPh+"AA6Vt9&skP$_XZ`#R$Q6Ko4Ύd6~4;2/GwKS?82^Eϱ=.2.,kC&ED; P*"wylVx&KK `?O?g <Ǝ/MӐyR(:ܹQ^w8]UˀK% 8klI~][<w6 ӧ# nLg8מI*[OqCq ?^*ȑ,P;r\/x+r~yFUzg+a[q1h*!ub"*ز>2uark7\nb\"ԥ.E2[āSm<ᄸ,zpjf,@n:RQ B~ӛnZ[9GC<\@_rX%>F;az_,s8O^7hK./+5yX:eWsf;xbl2Ϗy%H eZɓՇRC&MgjyAFб ؖ(zQ^IPǜN .lw5h+9:2x׌1+nrNuo'iĬ-fヲÔ]$su*|ḺU~1Za<#F`96r ޿r,,mud` EO%F!RҴTF"!yY!i2B_WCоY@.0oJ uC^bDG8Yg a;)RiIjmkʧ}]x$pĜ,'xc.H8rzq|Hl*,v ivʬ |ÙGVEi"9C$݀ s_E?ę_|C9%/.H@u\G2S%9Vz]>HӌO1>7'ŎRuVg˸%K'gXU : $/c=3tV^# rxhqw;߳њ {^p_ON%xëvscd7gL1vL>tJCiP][-`pCY^i}>Jh$k PFo+Ow!wi 1 c\% mGc1q!蝨$pyU}\b ]H\j-7E[ KgV>sYvdXr\Kg(j,b7&+ A+d.ؒ7LJFF-iB eʒg6aUh~ UʀHz(̗ɓ` ȈY@Zr~r)LG'y2g,"lNd `*ZW-ya7ŋ#!1'58*򟴍02h"wD,':f^ m'f Y} UE&Ay 0dળ\S;x Pm3'trufS*hK _]Y>矬;[V2=W_՞P_VޒrW{N\r'r} G[y.Hi89e|;5s/U />. cbd _5մ ZQ/F4-~C{2O / gQr.DOdF DX4j˟c(O[E>]{4A՟JlʌPCS~W$xƃvq#4,cLCK%/9r''5ص%Zs%Pfs' Hnp6!Y~A@;n(JBJFB[#/a֓$cFԄ'z,7Wj=%/dr/r80+L4;5 Ag*]FYnwz˯ė!|Pv"ٟy6,8H" |Oh'^uَr췟`nSBJ `e~^? 9Iozvڞ"ei)Oϙf&ʿc2Y'闍UD9XZZXhȡ~Gv#6À7(.XjvVxR-h' I z}z".ұavMBc}}J'풖A+I\ۺzĞ/cx(Ҿ)kP@{ wF*U?e" T䲡&zgݗ~=%%w[&c'V4ڗzܲ˺UʺkH{,+w>b{Vu;v'3SIVXC.%80 Y,0_ ޜ/t± O 9vCAH^Vgv-a6]&rY/t5"R ga_Ϯ{Sͳ]27HK];~Q&ν7F[R[.!sLr&s>VߚiCVT)5^s+hEvBL䌁^d{d_TUa%mi0'njsXϻFIXV!y)Ób_Dy8!)nb \[Ăሐx b+ J ǷUޝDqZߩWfRxaoӸNH F旓R\,-GMM!|e.l^?2d\RӸW{d)1Ew4Q6>&oaV0oP}Zf31sՅm)űɯ1}!!5v#FH v`Cԑ( d551! {O"1p]>t W5 JczȢ&C!v}d'ьR#i/O6; zФR b:^IlZ7*T5޺Ӛ3YJҒ"˥|6del'XAUC4y{Z_j ct%3=ʣWA(.]H47 2< _;BԽ,`썟Fj]i˅툰 'U 4(J4(󚟧H?rHUւFuk=ݾb*:>#h+j ԰#z*Esjdf# _‰8/k[:!e\(knVpMPe]VyQ^w2"3*EW,.A"E*BP c@v} bM*/Q !8-iTpga! XX+gIV,B2TQyAĬK~G"-JE=BlѸ4ɯpsĵ/sұM|;sq\$O[m FNsmUIͬ#fyE17l N'; t[L'*xtQn).qEGP5M?v AIL2M]B=R>IDžfӼ63#'|#YH' c$jw.\;@`n+U*oVFW"3&y]=}x2B;J%SEZ~&owo5c 7DC 9Z ik/64גwȩMsa _ܕƢH'~4 SNMLwbct.VYcQ FϨ;23XY_IڸQn[r9?.P ;Jx& '&8Y"ʃ]ה۾z6=#ѱX~IE0WLAiW%Q$kX׭5ްJЄ(k^vPboRX,I&Q{ET`oYj֋Xv\OAqV;h;VB&0kr x{|{A[gS%Wpz>t6 t4aAX RAO~B_k6&g6UȨnƅCwq>W'@XzJ8j yKHW%`5&:5V3=7 b3V`5`A8-3"=]Aao4;i_Q[Cf#n .iOrApGU#vܐ1|ЈFT9ϸڠ>Nxyr:)(S[PZw.-/ tE5e䈳JeFd>FYe )$]ƃVY÷[hY@bڭf >I&[12%w2+~ұNje lA#\:LvZdw"]aU|ӱ̩/7Xta?nK^f#:)R@\_dgÄ?TOu\GV'ܲv((kx~~F)ԯnY囥 ]N9x$i7!;˖kDpOCG]Rbؘۚ'Pf޷&޿c=tTeTs /$ ]ó8eByEƍBoWy!j (^ evT9._vW\B[ S;mZ '\p4PF-NPD^g,^-- _6:oЯ7?9*w\leo_RWrR%RoQ!7FKۥeyjt>;;Dv!efMy;.7RKɱ 3J!!H:gԅt"L>/_UtaI4g+.BYͼ*]R6 h~{3WҤ DLCs:’l6\~mp yǝ"wMkSދ(!ZPE.V c;ZşyxFGk"%A#r5ma.؀rU$Q(nil,m ,m2AĤUSHK3ssA˴T"FCb'J_bp+C2.W @B[qB zw05>تb0Iii)AuSWJ ig93}6u!XeS b!"ܵ3vؘKPHiLkiwЎ) ظʽ!_:?ֶ3kbHeO?Nt_0ϗFhתgh\?; dɊp]h`>`>f.98KcDb& mL(;\ -XMO?6я w=َTES?8Q#2Z1MU07d^^ME FSsoCh"͚tuuPz6=-cv@Ϣ $?_t qߜHu GA^/f*䘂5J},%E`؛:K]ѽ0Ƒi{/nG [^j[ "X},GEiZt+&xty78)9ӈ+Z#vuEa/P0DPQ/QksLI%9so3B{v? U$]Z=P-.0ShL @]-{ZG#ǠWips\|2 "ƕrݏO.]fL14\q0yGܝgzumFa먅0g'vxiL%C PoMC$!Xƾǔ\IFR֡IO=콧b1܂7 7_Pads_-4~ch HSvZ~>9g |M<, ST^qFqFWՐ /=S]X!˚E)>" f f'հmP6hȂ; ݣ㕟Ǔʼ!|8|/`w#2 D;}Iyz:Cw緗&?;u͙mL_DPL_Bɦr{Oth盖Jy NFdoXW]Xk''.'+bTn1iuRC_Wm+MV7Vԥ7S-&g l;:UlDrl#{8jٳ[y-sO$EkK&x?EZOXVnK,a=/j)濾Vb~{ɩ@̞}lpovn>ԩzJ ,Z}I̹rKJh {hgbnYSC=MFQGWRN #ɹQD^!~~C)wT|xKLp*2?c<4!2: =KX]2/ӮVb0a)3gx=d+()Gҗ F7k0rT ΡL̥D9{ Ӕezòk6ّ s/P?((7_svp@hLpQg̈́MޯM70!`UTJmP]4%X,˃| < C?ݦ|I• ~[>GR5>bhKY3܌Vֶʺ&%?ڀA6 NПv檷Pڤ)H P%}p֙| eij>ԫ&Cilp}.# &ZoFCt^{4|+GuJg1rTG&uÉ6j!η 1IP01f1ӧ6_X#y"?l0ěR{=Qw{$cҮHׅ| dl qʩzpݿD!J]n vd#[Fkf?$Uz3EqYyPexi=WJA_\ͺ)7sY 7R G]cBfwrs!l<_Kx(wy{zq8*NS=yĞ;hHe~I#ñԾb•rJ~;k|3EԟR fO =YirGJؖ%nA6v`!&VYExr$87e9~'Pp Bp# 4TfÅ[Р'[V{2#tME鷺kTB1>Xs d9=&9uNS*R:m$0ܩ18k_'s2%E1FNfScb>tNP?P1r ~֠uNG9k53y,٬'^"uio)'Dtxڭ9c#oG|zWM}GO_Ń9U9WUឨ)妕GV9C?c;b@"Юm Zg RwvnZuǷQ\B49hfϯc)e7)U8dG Ez;F<|ID@x!.ӏUAeW4쀉??S endstream endobj 51 0 obj << /Type /FontDescriptor /FontName /NHGHZN+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/G/K/Q/a/asterisk/b/c/colon/d/dollar/e/eight/equal/f/five/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 50 0 R >> endobj 52 0 obj << /Length1 1626 /Length2 9175 /Length3 0 /Length 10004 /Filter /FlateDecode >> stream xڭveT\6 `wwơ %xwA;CΙ;w3s[T=4j,V .Psps9XVv9 $h9KC]@ h p$A`/-@O?4/v6ڗw#t_;j-`mH˫eU@g fhg P: le4W֗Xs+hi` ` ;C_z-ݬx[^,^t/@PWK xɪ&%7N9OnW5dbitS_0/Z+ eXٹͽ^rCjlObtu} OwY'Uo;z 0A]֬(/9-/mQ̊5 ;W s+ h¦XfoBeU̝^xY2΀=PY4nN_u9ZNjqgZYڹy젖ksǗ~%vB휁/R ;l, l_ <.\2T{ ß0 O7 /?eRges(`R7;_ϓ񿄑vYMˤ y!R?< DY ۧfA+ ~Hvwr k ARJ*BXkG: :ǹ$T ]y˴-|Lہl&i'?V xuk|}@$m \3SQ_1,Sc[jap*&]_ vF"fʊE2'KE2\X>!ܹa Vueˌ2ؾ3鱮OW_;)'GK8]}Rw؛uo&K(Fӎ뼎‡ \U"(pV6GtFð)zr I+QyHߎ]t J 맿; @\M7ytmˬ݇,A+p98bB>Y|Xd)[GB![K^Iֻ)eY~!~ z:| K˄ $3^Z]<(`0GI0qQl@"LnGߟsO _z̭j7&Fҫ %.t\U fF8 5~-wm @Ȍ:b%ћ&g29B6YKu0j z+Z#ojf4额txwʟW5rs{W0O/|2*VdQJؤ zUge 1}`9T|ɢztmYC<L`hQ!M85=<4=;J[j },pvKI/S+M$5XrfܷCGûjn+xQacv[h6X'B{>eXsmMS<.#{YXY|d9jI4?qLUQF,/ezfTUsUtRZan! lLa C/4nϙƴ.9" xSzv;sҷ3RMQF9D{ؼ\qIej͖O1c b E&m2=_<K/rMm6gd悓۞g2GHFHW)TR*;Zء:㫽r=VJ&wnpe& V15htS)[^¬kk~pA՝JI\&A^jr|KA21!,6ZQDŸw JiaJQ¦]RZ:USaW|8wCmX.z@xo198$FAL# AZoxNVܜeo*x>`ϗO\ _!5lX658xS9i'eƘtjT}z[w*>slmզK :wSc_$Qr[xF=Lg!yZdIxIP.x4 3Eu/n/76(etXf}?8IdP. H αϐ&~vK' ԥ:R* HϯPs) D<I%|E{`R FЂ@'J%x8dLŽ|_F@kLq+{T\n|:uPp ] i葔zǹXhν-Ƚd] *!@v;˞@ ?}`h !a,B)C Y?7!ls4kjb`Fz +G;Vr {ٽu5}YZdOf cMD{Əb!5ec.g +/fMc~$5\YX93g!\z*|Zi۷Y(Ɛlqƺ<\ﰽƯy)t^ R.*quRUfƍ~AU%9B]H&!a[}o 5Y[Ⱦ?UaSYڞJcMӷ aH13A_CiIH2R{;XnmX_\Nꃴ3`DT:.VKLۻJi]ZVՆaۮ-Wp+\I3r]p 1xmUBEd-[i4LY7YC>fE U6H Io $مt%f09E7)[};->6l7GҲ-嫢}3%eVK7,!C #بv51G w=vFx^:ҁ]t7}5bccBO:D%wRF_Ƅ/<aU?[ hU Vl}r?PVaY0ʆnLpO6k$ʭ*H &e~Bݕ1B'9bU̚9(;>ݟwsy01H4 r]M9:S*:Y7#|2ҳ XF"X"֤6Om`xhxi1مLMq'c(o+UQpZa=E߉tx;V˾-# Kԙܝqaݓvة zH,WXz478c hT>?!;y, ЬAks\5J${Q˖ pgr\žFy}U7/^J~ݱroEsO(.IleԸ 7eM C^*S.DY#*}gR>L5d:Qh^*o04]#k02oڞbɬV&vVKջl_1JM˸~5-/ jt;tm2I6lpǾtU7lzB'zGla )(v8fF WB.wMm1~JahUl3s\}{1G0$';_bK:)69u{]KT{ +Hm}9(ߕpY~ɏu DP>3~ޓ+E4{`X| MDܗ?99V~Pf|~aQ7p~(9 -i 鳺+,w ]x#QX],8#e<%\c*iO,@4\2X~ S+ z$1).AN&b0uk(.w(G^cb᫃jYl[ J\&F #́ tS̀iy_X&[> ~zjA,J15E #||Q#qQye꺔ΏUݷ7 Vn'H[(ՙt=қy9{A7xh[]gӕp?c &ccY2N20b[#l{;nJ8-g>zf zI7A Pүy1`fad8jC_tI.o۱l@Ѳv0/g46)Y|fǺiŒ|;WUlu[35o(b%{H?_bhb:˾!H)Yy,I%d;p6[s4s2}KagVޞ̡4Ψ|ұt:Gͩ`30qRez_huM_:w )0\*ѓ֭Qѡ6?.3fJsz-``ٗ_՚g1(ɂ P҄0&mLu{ڻ_a#w0Z l₥4KKQh_1u=LjŢ؃|J?0Rj=FtLPm$xF6PʒpKBfw<[jIy#-9yJ2xkʦ4u=~}.e(^.wTl1=Ti]4EJ >&T&D.wk'f/͂>D4~w\?GFjҖ61yA%>9t+~Ʊ$杛Ki_X7U4\8 Q;Cvϥ$r!H`&1jg^18j]n^c۠c\nV5SlΧ= -/:fX#O|o:[3/ITE^~^+huuΑ1J,MZl5 Ԃ&c6LZЛZTJ boi$*]犱+MyEsy r9 ptO> AAR(#zEb D,W~FR"fw@5H׻%-={TfɌzT[B<W-՜bƬ,G܏ s . >]\ArS|G;1mug?j T :ш8)s}_WdIHґY Ufd;L#bfD˹p(dFK0sj3/`4V%ID:TL' CcRD@K"]!u1=Ȉ2VF}ET$G9i6`84TK'8je#Ԭt Ђ rf3^UlkK{|Z6,!%$}3W`/&<<`D:'̪{tFO8CZC7~:> $ψDžT|ߙVD,6)rV .weMyҟ*0^)'}VDbp6(.snZ:h4$$QH^.!uV)\ZPK#/ei؝81?eFqIExfJf9 sp#)VN`9 -7ޑh^Vޝ~ֵ:9HnZғ5ykl z:1jHЌv)2 TO~x֤"pd|VIy)G &훪XYx}˴n EGKK&^L9: |JS|wgckBD@x`N.N|]]?VX6gvիIb]c7CEWJqeM>QW6 m#m^EMZ۬OKK7gB(ZI{~+W")*hpV$$D~`c⃏m_}Or8ո141IQr> kNqq\,/9 sSc?b5?fSO"ݲv~h$ endstream endobj 53 0 obj << /Type /FontDescriptor /FontName /OXMXZW+NimbusRomNo9L-Medi /Flags 4 /FontBBox [-168 -341 1000 960] /Ascent 690 /CapHeight 690 /Descent -209 /ItalicAngle 0 /StemV 140 /XHeight 461 /CharSet (/E/P/T/a/d/e/fi/g/h/i/l/m/n/o/one/p/r/s/t/three/two/x/y) /FontFile 52 0 R >> endobj 54 0 obj << /Length1 1630 /Length2 14863 /Length3 0 /Length 15707 /Filter /FlateDecode >> stream xڭctf]&UT;m۶m۶͊m'۶Yӧt{&k&!W034uaZ8)qH(YIHM -l M8j&a### dghaf WQTO?&Ct0}q51u dbp67ZX5$db*1[Gk@Ʉ`j`dgklOiN'{#n&F&&6NNN3G[=pXY_ݿwkaWL7t67p'_5?%K lO,C-f@ p413p46qr gz{{ky`dbmJ 7ft̊rcй8A $ l=&tvCX#[#r\_E]e lw 13i?c`caj&N&l-fIX`j`g8Z[ؚ_m0?$[ebk_+K׿SV,gejdAA;w +;#&俀,ch[7=ÿt ?l`kw_VͽڲWezVsIa^F]Jڦiίv3CIʣ^4kT|"-lTGtpj^׋;`G{ %ӿ!)\ ?5ġv"6!&"y8F$O7Pr@}ι<0(M nz~~ P'7rX}n,ԭ&4)˪|ͱ]HnRW$LoaH[6MHSt[{EXgJ =5Ļ/ʤxce|S4? kNw+;Sz"YpOh|*pV CuȒcztf֧5P ߚQZ /"6 q{~SB ~ ɕnyQ$PޮYKyQ>]zR5抵37g\7R͋ FjpRQx%+[m?Ig+LؙHEsIySTU7KW 酸;">dx,gp<# # \Td6V W1Γ]k|Jɫ~>berҳu@cދ0P(2@[ <&{*}v$'njl;Bfo6;-Zݩ16ªDЖ'STe@so1rGl@w8A9(Zv7A#;z PG| U.)Bcr]%4ENQTeR5 +Wf'[ܛyV30v*Ot&(X%,&jl uR`xui ;@ogUV{ 1@93W׍$ `UFif 6ǎFbzλahĞۭyH04mP[ֳ3lz/k;v@Vt1E!!ku%` 0|+yB= PK$QZd\l)C;e*Is_h-5&F{ރnBySxRM4 ]:x(~pUsymNwSuBD4v~v(6g쏞K.5vmI R % g,i^|OG&X愉m`zzYkPgj~|+-96>-$=WUOj>(oakX4AO# btO÷KpYef[a'y&*?A'/Ŕ}m83>_{3q]Cėb6W8Bv}>:6m#-T`ňt2 ėmVbSOjf ZRѳu>ln^Wh33-z}2Jܾl?/srӏմGgnD+ڶM).g\W*OrŲJ.B!>-BHwW)WiɉF hQ7"D#:"z,NįxC*<*½M;Gkm? v%8qJ QΗDB4_\OJqTT/VD]߰ 0˨|AlVEg6JZt|pa= [Ige,*^RWw68x>8w$ 8e^hTw-G>C0$W&X43#%*[ 7ֆHEJަ=tx1UMn0:1N˫j~3%@>Ϝ8ش'E/5WLs=PlmxǼ {$z1[7fN'Xv>&6-`고޲A.ǻ\OT6^:i ^j3jP^@wEm"2"%|{Rߤ {^_zWT>7( (>{(WhCH3x(l_X4uZd1j#3Hd) P纚 >f7߯.]ŭoCNVyw 0զvMy{-bhrʥɆ+Z`9yKJ@_ hWZWhҲ|d)1xhsPAtT+!Hl >b)O $؜m[eO9*a2 W%Q4Ìo`7|0u|!%LRKBV6H5yL!ߧI U-a=;p,kX( |b^2e.L9ܐ=JH9eU]gk;5Fth}pl1\ EWpבSŔFHMko! 2|'I+bT Ѧ**,ݾm{VZ|d¤&B?x=fJُ`ab>}}vq}va::܊Gk*H5RN¨%1} 21c=2S~' T}TAUz5ÇTGcEtIAȱ%KْB4fWqQ|Ow\]˖!LJ#0;Zh]lPwa\?DKvכHB5q4 J9WtX\Om9@Z@6d `+) ϬyBcK̊-MYgHsP?P➖=li}Y,/4*o8 y.0xs]r+(m6C"Sfkמ=|CH"606 LY~}SFz@4تI;S9<̹jU-t֪v$ R3¬[%l%nl(s:SچR)i d=D+S7{^U[; R_ G?KLMe\{ֵ(5bORE>CJ4Ć~fa.94#܅p4jYs+$|]zo #ae "=UXl}i2 >m pliMLM%DvzJaSvhXoQyo)9W$+-a`1f U1aJwb1˟MTȀ6p5lbQKpG;; ~ 3OSULWyLdLa~uTz+Mw+c/~F8Gf~u0Ӟ1IIVVD#{?p9}{wpÏnE)mԲ:'uD&AyG|B"hEuFhGj|+{1IEvsDB#W>_-~` C4H HN] S񤽩Ox7I**y_fM6n128}b3ˑI-N] +q~ rI,b/: nQXQX>@ڿ•OW'PnTwDm*oD Hrv3Al=t;$!07ìXf1oi=c-{ah` e=cGﺨGːCS scQ-Ltkl^0c؀3Usdm5J=$LUdco`7Cߟ`1ah\wU!#$za@XnlL06 P4%gW4O" TV 6a)g/h,T,}r@sN6Ų1wN%m~′v kk 6G9Kځ\=g|C԰%ig1BH N<) !tr}׈k!;Y:d0-;^nNVC;Bz(ǽԁU9Ȭ! UAӈ+koPzhXҀ¬1/{O?uhhU嵈1~֓Lw&>z~ Tj1nF>۪G$ XvQ^cI;dߚ_*^-bֶI7E_ PO=`yzEYs%Eމ4.v`ʁY?e~0r{/I%yگ&,悝JӼD+I'Ouf ޢr}X*(e@~`1^@X7O]5v P,ۢ.66o蠘 x~"Tt -^ 4\hဥ\E1plYl=y#CiPdDSs r<$/sGhNRسX}BoX߲B`.?2rLr8e dNC貳jwoTwve`2WpMs69ɘQ\6R8KFzE[@o *Q~܂Wt[XX^-qhʆ>$  !3`h'jOrg? ]rDı%F(,˜pkM t<,fnhQQyMU~3WSV`b[l!%'g[@:b^گO[H4&eoQ{okPglqp>,I D[KЍи;<:`6>>@E\K-7bbvX "@/'R5g7RǑFpƎx [2Zh']UM[Mx҅9IHS ɵЈ5LC^/AnsKFFVDH#7ʔyW* K`Fv74#mOJ?o]q{!f2Wxo,IuzCpO&JKi[5zCз?.0ePDfv7tѭٽ=U,$)c<"e,O6P8 EȪ&E"a<4T#8R_/<Հ_WALi4?">-nE5V#0WXtd4K7'mJR39-EfwFÑ i`II1Ġ bAf_ĭ~V(t8brE id*pmJw+r5b{} lf7Gx䰱Ҝ OIų!kd+)G8AN*:B|ǻPM^1:D j/Β~'Iֆ& `$bmDWa{G$RJ_`E^qL O((QQaA#Kzo/4}7.ujAh>/3x\9%٪E_ʶmu6 )BN^ 8萃S7*pŞa5:97uQ6M<٣T[N2DYQ%VЩ9ٚ Z'/L9 _LWs>q %J7!-141^ȹӔIye;y^&Z YEesL7O׵u(\] ָ4lBx42O6(Ѫ;ND)T]j7Ehv,jP3w*?a>a mJGN8B1Ĉ?r偓1APnPxCؼn&c|di0_94;{4re'<<{Hy&-r0T׬(^ۅ|z]-zl %=E#6u}K:ׂܶmnjqVA{߽$ʵ^h}kjNV;?Zy{$:l@Q=6O2N#ǿc&,Nb-uןIC &϶V_wԲxH &vƣx*7 t@J7`wd]m6$ !2sQ҄?3 =Jt_2ᴇ@5tڛޜ_YLȫ\vq-O(ʟ/}8' QrOslVh je2d?8T"J>Xʆ x*% Ay!$&P|zşQ8sw̮ٝ#C%cby? 2ڏ̍QbG)hm cjn}~^D!K'Z~<ޓ@ږ ; T [֏!11yϥׁrTۺrab&LDWޭm]3ԬƐ0@ Ѩ"+ew3X"a]DՠƮk{]TΒ8볊eB)rx Rz?قz ~;=tT8K.jl^˪[  WN,q5[V[d%\pbݬ()IHdԛcW4cMqӴtb W_+{ Qtwl ? ѣ5H/Ƒ2Mu5fN'?9*씉(:h 6l~H -ij fTax>D6f17)*&PǧwhyR<_:q'NϺmb[,Vb XjNRp$L60 Wl#xm3tty tDz+\X1ɺ=+:J52~Ūp tM~9$떚C Q/(VMFk:Q0 ,Ds>M\߇ٌ|+rrFJPmxXNB=,bכCJhc_5|D) +]%/h i&:5 ֭5{24*^0KA, !RB<) <eyDW&jH>$cg6iC#sVmnl<=Zy[zbvmb7KO/Mjf?4b$\7/5[,RB^#9 1$+|7o>溼Do|z͊e{ M^׫&iѾG|9@}՗n\pEG~4 Q.!*йㆍK,~(-ʠk(0"Sא(" V"x5>={H Y߄H9U;;lFs`1;KQ@ Og/g0 :91ٜ Nk)PniMЁ(GRyM4ʶFJO/:7+NdsҬ;9a`ˉw[[k%Zy KWy7) !7 4'76eIy>jV ?*])סKlV޺ɽTJWG tG1E8MǣUM$g EyЗ7#h CM<8+̂P͗|J}W?/+suJz] jAC&Bmm2MsscɻEЮ:QIe!Rt1h*~DT9R yNԃpwイg'BWӛ\.;FNm[ ^kHTv(sW <9x8ׂ5&vCqdH2!Dު?^? ", ˯}l|NO0Yj}yJ+{E`!ooЙ ",snfR{A-~VB7x+$j#y!¸#[ &3!RdQ@cyl8쎅(J@WP/jqP'ڎ͎+*Pr1uV޿{,/5;{jFdSHcaIzO#ŸHWlՠz `TmYO~?9x.z13bN)ēWQ2dM!A9e򥕡Op\QGl|o/Vp>>22j* $z?m'SH;kE-p.n'/ă"&@L 띔j5( ?R#O/_ev ސfS5?kFǺx,/e'Q '8;/l=>"d AM"RakGq#|Hy$+6yswUjAo8?6b:YZ{ʻh-+e"a_UH%?,ױpSn6_ ~ VjSt1$gm@5G`TJƯYH -'-yIF.Ep%~7aYpSAo !C&_ڄίdV5&NAeˮ6߅ ~$PFJͲw!+NҖK3\UkJbu!9Ji6fq۾6x7i8a$EK#Y`w۩ ö2k^~#.n{%OZP;F B :@ǻΫkEڎQ7A@hCWB;(I$ 1[Ɉc "}^5?%ulKE|ߎpg.ʹ]ٴWlk^* ~!#L;'@ȯ,/GqZCn<j_S ᢗ&[]Bfn%a߁`9KWw`dZ{ջ89@W!|kTo'ڋٴ΃daKx?mB3U[p`#^X[J-6@I$<'G|z:&RsP73F=f y_!R R-Ư+t-Fp): Y&/11T'oJнҎ6ݔ%Wv)Fʜ_/j_b j!b^@gTv}S|AlO\ ]U\g_IT4ewL/P,;q0jf $OiYB )MQ 0(L.+J=([Sd\";IU{hoƸ_+_CtvD^uxәe\:J6P$(c}_tKxYշ}t+>+699k֭" /Tl"`pݬBKZmdM! GGj Aԍ wE$О+c(]̀J̳]"=O?\Z/ !+K|!=_ii\wN]\Jo eT( )8y<~wp endstream endobj 55 0 obj << /Type /FontDescriptor /FontName /VDLTGP+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/H/I/M/N/O/S/T/U/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/six/t/three/two/u/v/w/x/y/z/zero) /FontFile 54 0 R >> endobj 56 0 obj << /Length1 1647 /Length2 9505 /Length3 0 /Length 10353 /Filter /FlateDecode >> stream xڭueX6ZCqww/ZHP4BEw+.݋}|=?+=rL5٤-`(;0@ `(¦qQ^t|tt295@+, B8:y@@6P> ?%Lмx:l@{G' vP[ dȨk*)t @0R=LkGlS3 3-NT' r@З@ ՟^֎%q|pxѽi8:C-! '(%yBm͡b;^GK+GK?%{yBA`g9;ٛ{~sJgbetv~yӝ o՛;9{:Q_bZB_bۀEl[n+W KV`{CcG zo+Gm.j/s0T9,WsOUB l;b<hZ_\l؃'tlA[[k /Upm2x UJZ/`|YƗu oUs(xx/[:Z#m9eKGm05xᅱtZ:Z|KJMVe}#ЩZ'7ǿ̱/)xMCy {ͨS̾V=C{8܇3gYe+ô#@?dZeSok}XS4h37?k?>ebW܊oz~!vnd|E1'ߧz\V[>!޹ ax%?|Nrgl.4j,\=o[yVFٞβdK9vyr<\U7 !RiƇ"Q1Za1tN<:9 F%3{,l*-Қ vwZRUi!dY- 9(P)Ag p*oYVQJ沥UB&糐diJuZݔ(+ j]*öy6S$6RE<(grBfْYZ^uV_#n p%WV 5b3{2TsΕHh}0"0Ǧe[kW ((dç#/dof.qdSΗU[.`]tn+Dⶰ m}eŲ^4tK %fƙdc!nVf5` eS &`Y1̓PͫWwyy ij%#<ᲂ l\BBX;o7W<1A;1IjS+LrsFM{X$c DurO=u5Xa5Xaswr*44u֙+`6MA)W_Y2NeHI>FHB[!5tF޷ \Udh˧Dh y/tBjVOC83,Ub5[KSoS'w}>G˯3)օIY9!qJaE n 8l$J0aS+w"= ~7kD(cdiG҂\#K$%~箹F q4$娇c1c`-0ou\bt PnMpch%IxU_Z|SUoKmZh5H 1F\Fh'g'C̖e/$6Q8?h| e({>'~? v.jlhT>Eaon?/;cX.#bk> !te9ue uj'vo|-i˙A~Y鿥HNc,vhWlCMlyLnÚ+:g&F+2}6KJ0IY 3QӼjq= 3W Y N!D:G)=%+0PİR! _TL_G'EEɃZ 8s(-Q;^Rw)qxD?7m8{f̲B, A¶3D³nMMehtfOP2}~+ hMPN3b3W+Iȸ<zp~tj8) !wf 8hQEڸ1]L•Y]2R;,L͎s@./β˺Y؈ZiY+Skdld#34PֳPgLv z kdDCZefX.9DSd ޵KBMh(obYdGYws՜N9IHSZnKD ܢ%^֣Mz\7o3QY"fOmPzdM,%15Wff00o548 zJ' g7ĝi5yit1}H$o5㱫=-|Vw_m)2mφ$CwYmnxhVͤ*ɞ.?@m{KdTw3u#à~+rhIa{Uf[C|*۩y@Ӥ&;)>eYf>W&oqېW54ԹTHq~w%dRָ7mNtw 6e;T1eo^[4tsv_߯C%iUX5"OR?ox̳vxJht!o4sU[>&p!Lv㼵9&fzD{BG?J[. IJ18y")ki|f&G~=1;՟*.2iO: J!Ƿ:)_!߶EG{8nar"6La: }N_]$Yp!ZOg=U'(oBj_) Z:ҽ!HHI1\]Z/L=7T%q$]8>iб2չ"|)OȲI~&0aLǾ#cFxM13TNK qɮrQeVd K3K^y =A9=\|AMrԻo<׾sfÿ1,vÞ4 hcG%SVQn虤ǞVnF'#(q/& FdrgD,h樮PwQ퐙WnhRړ·q:ւ}^n2ݝchnO&v-FzrnGEpfEdں87 KV]>>AG~& a٭b`(HĊ3TJy*LbjmyvX k9vOjw-%}h0YZ %#uMF~ TAf1l P[_w5Bktա'|Q{4M{6# WƤGE'6Gׂȼ.%V"?)B Λjύܒ[FX$eFCcdA+"kQOUMcp\n1mWa9`s8-Jۄ8Qo.ּWZFq=o9X:~g AdQօ%6Yr@Yt?iqcCgAճ$5Q0٤oJE" ].\ͶA\je'9sXBD?dxVw P:0qzeݩʜ\žMRͶH0Gɘ|1tgi )$xm4BV1C9R`sVpW*^91c;f V6!օ}eSEׄݙw"aԤ9o&,ۂ{⑺j.62F9PLl(8ܹеm~U8yxQs{52<eǬq~@v~M~%T1$#+*N |-J!y,YZ՘{n bF9&t-q :+iW@2Aeg|:JthE`WtzhYvMf1m.sM>@GĎ"m>!2n۰ gqbŹ:0gPOAH!/谿vJ*F,h:(Lܸi &q!`fӯѨMza=2udt,PzM3kEb-ULk ЀHHo m74rouf[)-QVc Ut2~f֣m VɨؒtO=Sȑ7Ze6 {LO7? 1?~xwFbU蓦vĴnݦ QCh!ҙ< .AR0_mm3dѯW^e:KGmMIiקRv\@%ӐÞC$Nauo1At^r+B, %3=:fhoCEJ;6:bze\imZPG_$GW,D%J{rPڢuQ-1\SaWѪQLT?K Z TUw)qDKM*IǠ4:44=oZO+2ŵ6:\vd kMw6!K-Hz)oBf`ɌV)uHIܶJXLhߦwr{gk.jcW]|3韕,fwCN77;d ̤X6nR;8ȼJ ̷ْدc*Dz6c *퍑~䷔*1tJ^qGkl%-_ǣ1i!c/rSj{Bbʹ][{)CD]rE 4T\-"&e6qhB&LC ߆n,_$@0~|>ygȒRI#f'ѹtr2auS"_HLuAb~֣'sS^QyxIR,6nXon>#ޢr6E]vtX(ngOy&48GTG9vtɌzŭ n L"~El{ttT*d@·RdpqzN[n)1 o:Yר8U~le{͞TINhYY?j_b)x$?U UT+4,9d32\4ߊf}0aq&6'rԸnԩQ3o ׻)kcz9nClXpu?ˍhǴ|*%Nq :=qLXdZeFۅ20(C=H&h3!&IP$C,0a_d7CeX[P -ը+UqpܟY7p3֌F޿k{$e鯽qJִ*@]؞lGp'=h; C{Du`;..Owɳ;$'q}՚Zh>Ԑf-X&ʩ6?6,h}yq73.P̍,l~OJhtW͠Da _u+|Yti͐4z%5z'RY>AE/y/")ȇ2|%Hhj|lVLW'<"Stdjv"90 U?q[cZSӲtP$r7> /I f\M|0OuuiNː옞vt-.'~Q#v"6":RBNa7c)%y_f:.}D"k'l(7[DٯYsWYj m="TU=250!ZĤϟ"a; .9@8f1Th򃷐mF~m)m~55p^sA]{{a6.+ueW roPL VQOr<NSTAO/Ud.陳]kI~3sB*ZbHx:2MdV_ɿ+*O䷾ۧRp#@KLI@[wEҁ8HǓ6Aώvp%g LyP"e`lM{H+Y< JpN`?JQTlOx֕yx6-6G%C=P[u'( SҔq7̩w~u^yTQ[ZTOą9%NAJ$ sm/ .F/WrUuȘϯiYH&i׼PWV.͏,wa.̬QofjEjnЂ,'*{~'Cb^{HTyA!=.b|A-EM_)Z﮿DzޥW+T$hh(-AM|BzzFl,6"څaj^~k4 Ŏ8{P.'z9ON}!=o`P|,[qo.VXrJ!GVȔn Wt]k=雔ae.쿉hw5-@xdj6RBS(CSbRN%O_l}1e[ՖuT^I[CW.ڎq[v[,'\|^_g'$ZgŶSw0!ϳ]4qm{v:xHg:(=_O^_(=G ޔ}wYַbBwHAПy0`~ v~<,ZNLOgg[/Ij9v-fz 5$v"j|pli >fgXx5LJGrq}F2Թ^vjxOPCd*qU4KLK*RW1$ V2.0ϺF7y>BkQ,`5MC# {65Ϡv1=>< $.G~L~1|δ0Q}trstHwjIܧ7 G !j 7D6UMӜ 5L a:̝(DŽ<źRl(?9 ?G]og+$yk| , Egݧ,$ <]5,np+"*PBUU.6:IU\NJW N EUlQΊ|13 KylOU|*) x &J4$|a=L X$hP^'UlIAv>zG_vQ endstream endobj 57 0 obj << /Type /FontDescriptor /FontName /RUCXEX+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 668 /CapHeight 668 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/K/S/a/c/d/e/f/fi/g/h/i/k/l/m/n/o/p/q/r/s/t/u/x/y/z) /FontFile 56 0 R >> endobj 29 0 obj << /Type /Encoding /Differences [2/fi 35/numbersign/dollar 40/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon 61/equal 65/A/B/C/D/E/F/G/H/I 75/K 77/M/N/O/P/Q 83/S/T/U 91/bracketleft 93/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z] >> endobj 8 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TLYENW+CMMI12 /FontDescriptor 39 0 R /FirstChar 58 /LastChar 119 /Widths 33 0 R >> endobj 20 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UKDATJ+CMMI8 /FontDescriptor 41 0 R /FirstChar 113 /LastChar 113 /Widths 27 0 R >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SZPFKZ+CMR12 /FontDescriptor 43 0 R /FirstChar 40 /LastChar 93 /Widths 32 0 R >> endobj 19 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TNKJCO+CMR8 /FontDescriptor 45 0 R /FirstChar 49 /LastChar 49 /Widths 28 0 R >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OUMNAW+CMSY10 /FontDescriptor 47 0 R /FirstChar 0 /LastChar 50 /Widths 31 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QQRVPA+NimbusMonL-Bold /FontDescriptor 49 0 R /FirstChar 97 /LastChar 116 /Widths 30 0 R /Encoding 29 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NHGHZN+NimbusMonL-Regu /FontDescriptor 51 0 R /FirstChar 35 /LastChar 122 /Widths 37 0 R /Encoding 29 0 R >> endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OXMXZW+NimbusRomNo9L-Medi /FontDescriptor 53 0 R /FirstChar 2 /LastChar 121 /Widths 34 0 R /Encoding 29 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VDLTGP+NimbusRomNo9L-Regu /FontDescriptor 55 0 R /FirstChar 2 /LastChar 122 /Widths 36 0 R /Encoding 29 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RUCXEX+NimbusRomNo9L-ReguItal /FontDescriptor 57 0 R /FirstChar 2 /LastChar 122 /Widths 35 0 R /Encoding 29 0 R >> endobj 12 0 obj << /Type /Pages /Count 5 /Kids [2 0 R 14 0 R 17 0 R 22 0 R 25 0 R] >> endobj 58 0 obj << /Type /Catalog /Pages 12 0 R >> endobj 59 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20120806142610+02'00') /ModDate (D:20120806142610+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 60 0000000000 65535 f 0000003125 00000 n 0000003013 00000 n 0000000015 00000 n 0000117788 00000 n 0000118122 00000 n 0000118290 00000 n 0000117954 00000 n 0000116925 00000 n 0000117206 00000 n 0000117482 00000 n 0000117621 00000 n 0000118462 00000 n 0000005885 00000 n 0000005770 00000 n 0000003272 00000 n 0000008408 00000 n 0000008293 00000 n 0000006010 00000 n 0000117344 00000 n 0000117065 00000 n 0000010844 00000 n 0000010729 00000 n 0000008545 00000 n 0000012791 00000 n 0000012676 00000 n 0000010969 00000 n 0000012882 00000 n 0000012906 00000 n 0000116569 00000 n 0000012930 00000 n 0000013028 00000 n 0000013324 00000 n 0000013631 00000 n 0000014005 00000 n 0000014477 00000 n 0000014951 00000 n 0000015425 00000 n 0000015795 00000 n 0000027414 00000 n 0000027689 00000 n 0000034802 00000 n 0000035021 00000 n 0000043017 00000 n 0000043297 00000 n 0000050295 00000 n 0000050513 00000 n 0000058012 00000 n 0000058261 00000 n 0000063747 00000 n 0000063984 00000 n 0000078720 00000 n 0000079148 00000 n 0000089271 00000 n 0000089556 00000 n 0000105383 00000 n 0000105811 00000 n 0000116283 00000 n 0000118548 00000 n 0000118599 00000 n trailer << /Size 60 /Root 58 0 R /Info 59 0 R /ID [<235F910EBBA6E03414638C256A7672A1> <235F910EBBA6E03414638C256A7672A1>] >> startxref 118865 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/tallymer.pdf000066400000000000000000004442351211610345200256360ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 2355 /Filter /FlateDecode >> stream xڭYI۸W#UeJзT\藚J$%R2_n4E' ޿y~RO"e9V/mshTGݹGi 82tδe7>:[aEPMup!u UݷnጳTNnnc攨z[^0DQܪs]GdnO/(TTӁ֌U+޹ 츹bGpnCO3zLaLdv5@WzT5^=ssvGU2xDpGԟdr:U3&+YLq5rtZQǶʛDbTk /īva#l\l-$+y1qaMi:vNĤ`UXބ<5˝&is)W+Kf$7#C&mf9j5OR\Xf,8Iz/7.Sj!۟h4xu6]V ̠DB$.vH{JM1äXaA0z^(O`C"}"y(8y/št_ (vy[p~rB4䜌Z'U/թ؜ʷT2S{@Tǩ7IEsX@;Lf_p_""r1-GES-.$*UCgN'K+>99X-D;p&X:: RG2G)@u]y(+b 3b2_xai#IXDB>^mGP!.M#:H^碶s(dCMȏ:4t2}NW]|3ңnao ;a Yo,sy^9]SWo۪Kä/vYi{Ak!fZW+tlZv1ƻWg&dXoN%>Fu11?8\HEO_+wbմlr6 pH&29l ׇSYcL ]@ol|"§0y>v !>D_3hZz ނ:ܹ:iGyJzٕ{wN>U 2˥=*)ɆH m RNR_)lpwx90WLc ꭭^kBlh}F*ʱ9䶏]҉{ HCdKR5@|QV`\JX,;0B5&BZE[ HRh49phx/Q'j;Fݽ˅ 8xp15W~jnU `dȮQz~ $3F(wGQ'KRŋ7~_r endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 595.276 841.89] /Parent 10 0 R >> endobj 1 0 obj << /Font << /F44 4 0 R /F20 5 0 R /F45 6 0 R /F49 7 0 R /F51 8 0 R /F52 9 0 R >> /ProcSet [ /PDF /Text ] >> endobj 13 0 obj << /Length 2874 /Filter /FlateDecode >> stream xڭYKsܸWmGU,|-dݪ*er!19ʯO7 9Gb_$ D7_?_uIYhswؘEıbR]ݝM~_%Rc$k%7=s0D1L(ߟm^ow2 4h8mk/io[Z;4-M>wihO;HDd?1bw ;y@:vSI;fWٽA˝fs6)>my=wJ󄙟;5]& Kx&Hї'y~5񠫃.eʪFmN4G9S)bn8܊d+(C80ͨ:$NXt/N_yѢ:5msڗ-h4j=ϝFĒ)51ݿɮ 8-ޣFCu;1v%xn3/oMmV=Y* gvFSHDu>ю܇SW2<7qokf=\a\6\s&xGD #FѺ#&Ia^p"wC? Ns`!ʼn?ffaxH87!g= 5Sy2~#'x@~|D~~G<ڝ KD \T(L3๽U:+[lc&rW'8BB%~+zD!gF[ |kҾ"kl_y&yU2}ֿU2orًyPS)(7~{q j $~mbc谸f FUAU;=#>M4'Ot S3M80$`˪1)8ٮ:2h]%6`wlBaCIB{E_N`Է`\bt.`D*'Å;IP\t<:dso [7h4YdyZKs6 F\F0-S˭a mZ]4G "#(89e}RNQ޶'Loi--eg22DV`̈́2b<(qs UͽH&fi y($EG p?Ɠow7o mxR&F~o X}+GyфBUV7yЅDSB8g4Wa *°(y&XуWѶYhڮ ΃EGPXAb-!$ 2~>Χ2*ɕ|'񔅖E0)\ˬ!yuf;N-sl&nA+[Q5ƺ~nl>BLVk MEEU^bSEtyQ)/)j{UvŪD2;( r@<Ő0.'eLۡ!2`rJ^\3>"'.N#W#PihORE1.@s Ѻ<ջ/]dwE3%wUt2%9VOd p;7@ 8 UT1ٰ<)Q(c*JxPꋧ1F &mK"q{ jl} R+ܔ?e% \~utj.v mqUˆ˝MX]I8ffIvn-dndA$ZY -3W4P=Gf!õrSK 2yNr#6va7঍VBQly [N#20ʪ!FUkVps<\> mS ;aL~ z z\k?e6)Wxܷiո7tԉt|XXZv\ ùi}gQ%Era WM]vwV12rѲЪ^ ՗!8^V蚿pzzb\DlzZɳκtj\``?QF|)06gJ(,.5HƆ=5!2;RVv_[9rFuSxoiE>⍗#OYRA_V.mE˒@cѝ[7/:Sr7,?Bm_wוa';d~ z[{h:&d\)=@a#gDH^\h݅}3Ao.w7|07w&SUT8N,D3rtٌPDu9gmO5\FC`J?0/pW&]tȭC" ~hV>mn͠& ْ_D iqޜΕ-%28*>ە"G7[z(P߂A ]8*`O[{jӡAjUv'Ԁiy>Xc3ТEJx*ֿecc۶CUa2&7mRafprXn`wD֡^=(IkCHm* mu~EٝX>S8 e^CSp)S>ArQ J4o 2{IB endstream endobj 12 0 obj << /Type /Page /Contents 13 0 R /Resources 11 0 R /MediaBox [0 0 595.276 841.89] /Parent 10 0 R >> endobj 11 0 obj << /Font << /F49 7 0 R /F20 5 0 R /F44 4 0 R /F45 6 0 R /F15 14 0 R /F1 15 0 R /F29 16 0 R /F31 17 0 R /F56 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 21 0 obj << /Length 2607 /Filter /FlateDecode >> stream xZv8+δ0xLf,.M6'TlOA KJ{1+n]T+BP.]=AR Q=猠80mro*_(TA9hbQN8*p6Yz:k$T#EXnKS"GJq,2CV*1B#&kO-9Ҍȫ9v!/M7W)o~S>~9"7,/hbx_ B\(mDW`%R Z1T١kb^Ǧ:S+I%_@s}TiU3mvP7Ben[}S>]Qa߱5@a;̹@HmVYM?f Ocsl(d!q.w|015ȠqӕEuD_O}5 r " Q"!^~=Ԭح <*a4ИOؠi qB EWԽ8aZ/Yq+`cUM2~3 X}5ƎoGU8pj\Pcܿz{xaDsXLJ5Tݚ`Oi%f~ܳGvV=f5s1e ` #NXl _["(;SJ`(A1YGs1(/ (WA)UVD:[iљV2I2܈c _J ET}?І?Jqlj)L<` `2 nͶ70gldZhMK,ak 'L=g#Dmsߛ0)7EcSC0g\3}5}E?a ZKȯ# 3@'%=G=~\S l酱<~ $RZEicmk$ D"K/2"`Ǻ-tĄu.l:Xjgu> endobj 19 0 obj << /Font << /F44 4 0 R /F49 7 0 R /F20 5 0 R /F51 8 0 R /F52 9 0 R /F45 6 0 R /F29 16 0 R /F31 17 0 R /F25 22 0 R /F15 14 0 R >> /ProcSet [ /PDF /Text ] >> endobj 25 0 obj << /Length 2464 /Filter /FlateDecode >> stream xYK6WjA$=C%A#dz~2e @hkݻ0^WeL^B1n{Ҵͥ8? WR8KY +U8>ڵ̓u*H%6#II;I|.U%(SLf v= ޷^BLϊ6LÃMLR&$ͪ`r VNu( V(1V.Sr2K:/Qu2d[T,Xi sJ K'U. (Is^<@sOՃn/]kdήE|ASowya̚ Tc,N$D[T~@[mP(c4F # b'c҄(__$(ʼaKAbL1>$:+_i: rӌN-Kvu?tf-yr!˂sXR"X#Ȓ%GHUusO<|2}v.@qXL3 u[2-bϯ>/miߕ6J( ij?X VJ-C_aɾ{8Q/Zż1v6y ZѼejm 1'Aݡ?O<> v;ostƆsM8҇z8\}D~Wjf-f<;R9+7QŘFh+HF$ d…P(R}%txE$ӐdƔ)1P:.q*U;$&_(1~-q8j3UT"11yk3u+0d9=ff%̓kRKT6LrureOm9*-Ojn,5_uE#Uc+kY*,1T/1`{PuwI$Z0RE1?@TP2PA0`2ͼfgiHe#g.=M!_p{o1 eF'uܞH&gr08R>%^bq&ww.}o_dߛo(fby Q͍niC[1띟rxZ4 כ0VF dw@x1Nd;.%I^ɹk(60TkA4Z9xC\hl.iRa_yqۀSKр=! 7QlxS9{_zޭ1C#êV ̌NjhuO&g`v]x$YpoAd<7 Г^vxٷgs" >cBj_cP#힝~m緖 -o[vSwؗOϙ[õn\V󍂘KkSfI"H[jw\BJv$_G@P MƵ-y~JHAQe Bl E[z)4rV}az{[oPk~̘-78}̼a+uo,V]3]e?36 ,' l ˛{~Vhe |?cxE): b!9h[0F#ݣ唉g#"jL.yΦO|5>7Vdh{U̾ӍB{_NDt ǘ\3tBJ1R;e_1ɐxy]*e k乕a G">Ly/t8,.# <5,=e/k54@&:] ڑS5 d'B`quY0Xݯ6q`ÄF&搵t5wPHRɠtj_]\_F._EX\t\G (b~dzG.DS

    T m|o{B0. b dI/éw?ݽ??~ endstream endobj 24 0 obj << /Type /Page /Contents 25 0 R /Resources 23 0 R /MediaBox [0 0 595.276 841.89] /Parent 10 0 R >> endobj 23 0 obj << /Font << /F52 9 0 R /F51 8 0 R /F44 4 0 R /F20 5 0 R /F29 16 0 R /F49 7 0 R /F45 6 0 R /F56 18 0 R >> /ProcSet [ /PDF /Text ] >> endobj 28 0 obj << /Length 2038 /Filter /FlateDecode >> stream xڭXK6Wm6fE#Rk Z,iwC=#c8f82ݤ,Dy8mTĢ4qȄi@\TM@$(ugs*%,a(fRFDyqzC5tMCdm#EF}A9 a TPT4 e_4%IʔHr21 @_·>O˷ÂG0`"3d=\nR`%-uFBm]idI qQ42qcjyVWpT Y/vlEH /E 8!@ (y=Zl'+ݯ_WGhj\Rt A_,䘳x=~YBpx:M|fws!RL$֯H5C)YٻU4@%8)a k,Y4Å6P p`qEc8Y0 q,8ۣGxF, J'S\tVu$4(&>kK]y-ft02k[m¨]hս E\Zx`FxX9ʸSq0$j'CI$҄Er]#/B/2X$ HAi {yâ8Ĉ0;F40/[ۀ]ť+IqYY*мPu.@&9Kdxs${jF}f.y=TOX2cMFנ\`3^笷yBRY/GfvX'WsZy^@KB >1y:n6*Sl[_1JnbXY $`3JX'$BKwhஃnX,V$Pɷ.#+bچS[_CIM |0ȩk;۪Th8h,zYI\6Y),cumˡ.}&T, &~r1^a0_e$Ge{x ,<5}hjC'0d*N'P<X'WJ`FMF; bZwLC@#hA1^`di3tk Ke!~<>{d"LTy>JrŕEu41`I".6t2UhX]Жáj.%fH!1ٱ_ jB h v2벤#էQ7z)V:;rv2=zD! pO\'Rnqw#2T&^d!*lT*i&C7_ݤZ 5_hyөx֧^ y*\XG,IBie{w1+#I?J~ͤQ7vy$L8±yh0[~yG_ i{ 1)}?6xL0~Ϋi5_?gC_CR-;IԔy})+mAo A 39ы550+$svw0c/`ooZ|ѵ)IcㅟpCq]Xk( yux0*25IlXWHwj endstream endobj 27 0 obj << /Type /Page /Contents 28 0 R /Resources 26 0 R /MediaBox [0 0 595.276 841.89] /Parent 10 0 R >> endobj 26 0 obj << /Font << /F49 7 0 R /F45 6 0 R /F44 4 0 R /F25 22 0 R /F52 9 0 R /F51 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 31 0 obj << /Length 1884 /Filter /FlateDecode >> stream xڵYKo6W7÷,| 6a2Zbw iII=o%<{ɮU_?|EtIq-DR,uaFbja0Ύ߆vi-%_F#.ŷbQ`QF(_)L5!lmWu,QRN(y-E}3ߏCrOvpֿ5+]NҔw@ ,}Nγq~cI.kyTy&"͚vIBo4i[359Sm:쏃6Ow>JڔΘNP!X%)J_WR6 B0vfۧ~ 6%Ӿ!c?+ɉ'g M: BM: ^{1xAvg N/kn[sa{ i!+젃QJVPjg6sV!$x]q +3CN%a,ߦjȟδMIAǜt&2s$kڛxx7kW4ǖ. SweiIHQ ț#c^Sai㣾BH!q.uk;gR+D~ߌᤵx7k@YLsy^@EA7ƙ Rp\"LY!(ADE|~ɨGOڂ \_os3 (1.cً#@bO4;Bl,8rF2Hs5 tUxZȡ:^PCHߐ⥃!{ݪl*Br3 9,;6utEƯवm?D4xh UߍpܛfR?6u|UpKS$ʇOש{BN;sx@&~shnYP4 Tul8vQq K_(Ic.L>|n%A2֭}f8wРV}kC,PͦC_*~dǟkaE߱dcZBJm$9){?Ķ?zǐ1/~CLb }͡X!!pg -YYK]<<|h~.NK6 BیXaӟ)R";n%yZ@v43ȣR|:7Ȁd̂6BX9 4nc* R( OdY,Ar .un~!e$ *`$H|͒pgZ0-gq[kMti^]xS&T^MIDky%!ҀKeZ`%+9/^^KN~%쌜Dwg`>0晈)XP6lXI6(^(JR53V">lB;֖tc^ 'ȃQz&@ptY?sr]R1 !b*}0Na㆟ٙKO.փ=Cro;m(#3Pau# jWx >i,6m.DD qB~rp&) ƴǃvqC I˰Rj$;òraI tD&:Ibj#WaLl^ n{܀M1 >ٜ1ΡS ,i\?La8Mm `\qt:#>"  |.@ͩ|S`Yb.E*Ғ]f']B9D;;NŝImL@k I!_(2ra endstream endobj 30 0 obj << /Type /Page /Contents 31 0 R /Resources 29 0 R /MediaBox [0 0 595.276 841.89] /Parent 10 0 R >> endobj 29 0 obj << /Font << /F49 7 0 R /F44 4 0 R /F45 6 0 R /F29 16 0 R /F56 18 0 R /F20 5 0 R /F25 22 0 R /F15 14 0 R >> /ProcSet [ /PDF /Text ] >> endobj 34 0 obj << /Length 1099 /Filter /FlateDecode >> stream xWKo6Wh2|?@[=A+3[J2w$e{3q=!gqf8pcqQ2TbRn[|*Xo,r9d}to/g}a ՟S^l@) `PEO/Bhw Eige:> gT6:ľ혎OjK}iʪ<ͷcd[{^vIan.ɍ4WFhn YO$w8yVViBp4 Ùg6 gt-&'+\</3?C(/Xy, X9Ø#u}uuWZmYkRv<H;3nP%vxt_soK SWoᒺ6Ow>s؎MfbU?^_,pĕ Z +ĕ?+~lsDjL]|;ڽ%Wof!6$,쓐gj{_%:laO/Ž^vBӹV JJ.N4p% k煃ȀOB .OK/Hյ6'T^-"*I"WR\Y媥9W2TkJ:Scy_u8ܐ] o Tnv >>>V7u endstream endobj 33 0 obj << /Type /Page /Contents 34 0 R /Resources 32 0 R /MediaBox [0 0 595.276 841.89] /Parent 35 0 R >> endobj 32 0 obj << /Font << /F49 7 0 R /F44 4 0 R /F15 14 0 R /F20 5 0 R /F29 16 0 R /F25 22 0 R >> /ProcSet [ /PDF /Text ] >> endobj 38 0 obj << /Length 1328 /Filter /FlateDecode >> stream xڵXKo60dfIq\ S큑hG-9wd˦5řA*>~, 1z!QF,|X-΄X[ǂ.V#e(43B-iTLGFa(̓BTH9}_YMRl\OsڥOggRR+3,*O /Jв~@Oޖ{g_pT7ܹ}])*2bvvP :y|D=/Y34}[2n\֣ȏOҦnDpm]r}ϔ]4;mPXQsMTy\zLnop55^"D)s]HKRJBVuSa9h6vV} QHR ,W˜DSTXo΍9w.Z.bunv~XQx\硂+V0ռPXY65 WMlUlKO9:H9[cw.U#%H.RڦJ?ɂH6)C޸ul,NbSۇќ1QsƧqӮrf^fZqI[W6TtKDtw1waupv;$LRx'S,b\\A\a4#49eK)o8 g؂q*6\oq4U40 sq(1CFX_έ뷭k6pϠî]m"CdR]gu])߇:=!Y{:]i)ng4vb!R7} mf"p?w:0&ʉx8yzB5tKqp%9'r"SJ }$<'n1&oECFش˗%pqUY4хj&;#5W grh|`Lhep\*A]Vi*BO6f +1>.jE\$x^^!o?eְ*Y76A!['i#__Fs?#7cǂ]ݎ@{#D/bj= \_/f/W?_'=A%zJD7sgs|N\@|0 ?>?/A endstream endobj 37 0 obj << /Type /Page /Contents 38 0 R /Resources 36 0 R /MediaBox [0 0 595.276 841.89] /Parent 35 0 R >> endobj 36 0 obj << /Font << /F49 7 0 R /F44 4 0 R /F45 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 41 0 obj << /Length 2042 /Filter /FlateDecode >> stream xڭXK6ϯ0$%2$HC=$9e-,9==_*VeA#A_=wo}ZlL\!7H6$Ja5]&D1RDKz{FlvEfH{HoHTd_*yt#e\h5p^t{[DGT{??_JagÃ/s0 $T{Z`T Z[u 7~g4&.惏xulZb-䈎yvCQRA{Z=]7s0t.'S|h{zb8#at ag-_7. xixHG8Zvl#a2cwZ=,=t5khH|w b 5F~hcgW}& Q +RnZ-rx6x-}ßfH6&@)|L5K2Ԙ UE5>&z,ZuDAfn Hh?LlXt2Jꟷjj5߼1v5޸+%޳ujx[\U) "SGTq]kUrs;K&hm'TklO"A޼xv^u endstream endobj 40 0 obj << /Type /Page /Contents 41 0 R /Resources 39 0 R /MediaBox [0 0 595.276 841.89] /Parent 35 0 R >> endobj 39 0 obj << /Font << /F49 7 0 R /F44 4 0 R /F51 8 0 R /F45 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 42 0 obj [277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8] endobj 44 0 obj [500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556] endobj 45 0 obj [492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7 513.5 534.8 474.4 479.5 491.3 383.7] endobj 46 0 obj [826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2 590.3 560.8 767.4 560.8] endobj 47 0 obj [527.8 527.8] endobj 48 0 obj [761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6] endobj 49 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 50 0 obj [500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500] endobj 51 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 52 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 53 0 obj [272 272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1] endobj 54 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444] endobj 55 0 obj << /Length1 1433 /Length2 5931 /Length3 0 /Length 6900 /Filter /FlateDecode >> stream xڍuT۶5 HT H "{BJ!л4iJo{QRH^x|{͹s/lzH;ARemU30 A !2NN#8#RPF hM}/WXK@!Ho"%Px@}$IƩtC<?<8ow Bm  P8 2Nh Dx>p Cy$t n?Ҁd#'_!AX+ Cxb]0`u!"kE) +_(A+ D/"xC;,!5E}>O( z]i[fU2 @{ b'.w%]i`Md9QB%0sX w;+wa0ob áh wt` Žד5vWXLLŘJJH_F@H $)EDEBW ۪@8 o%FAhoA_v (Լ\]wH j kap/F5("]UHfGC G_/ vP{ۭ UL"BAȰǞD0vOa D XV^ "S0H D\ah%/"ĿdzP=!ث}&|aP)$T:¹>VU ,'%q*OMVgԱb@7ܲ*G VK#qtscmd3 }zIo )\xv+=y[]ԪZqxВ |IFv"3 /͞4X?# N.X, %NW yfdȌDn.Fi=iLiB[Q(+KA\>l VPJVBR)ޙ IԥC n:Tֶ$u]I6h'RoUO&l[L<^7AꮗN }Knn/1xq4(t ],x񞻄>x+^l E|lԉݩJ]:>*S ,;+zپ҅֨ljE\\|uŐ E"$fN1)jڇ''_^gU~%Ly]"ܴufKMRDɍ^Q0JNBc)u7iq% ]9*RgO >K Oe\c;)?;i ^,ziR+;"9i88yjb^ڕl3Z#L'~l9A~$R;NxX7x&}ddT%dG^r"K`C-a` ᐆ{e~w o|%3>.Ʌ\.Cg,[wEs#B^6 f۵_J?N8f H!5%j=ɲt )Ecfꓸ*G_S[ ^_U5~o B'[֠yK^mXNщ$:$BuLlnZV1 x'ٳyA?s,kP:74b sf#X+_`1~ "-koh8 u84vp$|z"\nv Wtp +>|:xA\OAdm/J-_mu]CQ)O Uw@(VT:^8BT:)9>phХ+2IJXskko} LNKdt MsCTߣvۇ2K?JyTO[- Ϭa=05q2~S&i}kK%j3#KӏHfntQI]߮IR:ŹI!$-׀Ə43vwZ8tlaRkux&\]cP&dalt0,DU Y#F{42ǯJ3oRbUZY/Ӕs=Zyդl=v&slt _o}ddtTYؒsl,y3|A̪'ɶ*-qMR!+n O ]zl9w-%b3d- LEߵISa2WQU(ȷchC7wCqoOFt\}= "cWt-2 '$C̳;neUݬ:|UÍ 3jm0n 4QoCh)_=o:,Q|5D|fW*FiN ga/9?iu(&ME`#rZ'0Jil7:6e+gz27b]y~i{{V\B.im'*2z|qTo^L{ ?29#ĿÎC+}kcܺ"6 ǜYD"TF{׈~C,sʍ1 V6^XnYk`<͟8%"sC[6Wo .RJu !!UBQbyN*uٙH !blQ݈Ԑolr<d%1yXL2"z=&<Ɩe<C{_mgf%7eJpE`_׻NK/,.L`1z;=7( t@D+9o^ .4 "Wkpm1SV`l8dn܂8$=#Y,Q~N$k˖CԨVC{)B:,A^΍5|[}so~ Onܹ̒B~iD3ep!=y;鈄re.Ғa ?|9FQ8MjM_T)Ws {oߌ}$Ng|x]!lԌ: }O)Ηul휰靚o-kϙhR;WBq66M</AlOZ[tHIT'?Mq;8X!]KNrC5q"J2iNB/XRg:7jN^K`$=(d/Oom%mlӵܻ}9\E~(ळݙc yt.avBg>%ǾFUmScBtQ*YRÂ{)GI͗VWpZv2!ioV%gnؿ:y:hC;E6X㢎>CckJZʹoa>^^o0F*W[{Kۘ'U$L˦hQyܴ?oP[XK)hڨܞ9r$Dćfͪg4YSpK܇TQ#$mzWc> GTl(\Q+ t O"H"O~d +A}(3)TM'n4ѹoS }}}9=%_I"TQfj'S-N<%zHQlTsu&¼z>ݱxni#!rFvM2k[:2 # ȡOFOpIN<bLf Q|9Z?SS07GaLn;j+̱ow;g 6qK S\#R 쥀R[')` ) c(⑯ vޫ).EpPI9ﮒ5_+~-t̨ y:'S&c7F&>Uhfz Z/ز: oYʞiPؖυdX`ZZvXjC.#yD}qHdRky䵀~ijgЈHLe:3ݨ2M <& Y6̲V-$rA%VM\sK</ۇ!&fܳ aϪ$yRa| |wsolc唌)qdonN XB9ӑ~V`kF}WWueX̋>tlE/rL?2}盡 {"a!E\|mQY.'Q\1sǹң5ęP v Mƹ8:8b둍W!351!Xӗb 9\X O0ڹvSςW ֛Ǹ@kSs8#g>@kXѰy^jt)p.O'GVٺ,qehxAV)s/j͟&<45sexDYm݅)uN"{]琞c= euSB7_=RVQgYc,N$o:*M>''" GUGL-{d&m\.ra 8fDϦJ0 aY16e.l{xNڦ ^%A> |JPF67mH{:#Jjv-^^Kww 5*G;YWgH}h<7{@6D#{Y*.c/o/w\d幦^]Dk܂itO7^PUnI9ԩ{ҫ+Otg1m]=jq#M}/LhF6IM% ndz* OC<+w2J@m^HˎnKjCG[1@t NRɵ{VZ_5]vÁc֌w(uSn\Z\_xfy˻="}ksœ*COi 挽k r(u)<.lyՓųFoU.fw o51ʙZ|"Ճ&+5-%)z,:ώ}-CSM3szg*J,t?yVߵ;fwQ"Ӽ/"hU\7\uz8#ЄU[n4Nb!"Ptt*݀Ff|)cano:?3Fۀv Bw&=~x7]W[fPu<NbԤ3(+ ϵ",`ҿʣuQ@x|Kb؞TtxFߤr;dDY> %x6~_Z0$9OQ endstream endobj 56 0 obj << /Type /FontDescriptor /FontName /XOYXDU+CMEX10 /Flags 4 /FontBBox [-24 -2960 1454 772] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 47 /XHeight 431 /CharSet (/floorleftBig/floorrightBig) /FontFile 55 0 R >> endobj 57 0 obj << /Length1 1514 /Length2 7993 /Length3 0 /Length 9016 /Filter /FlateDecode >> stream xڍwT.HA@-Tz/JiBAHқHHAH {Gѽ99uZ73;;|kY׀OaQAQ|@~A)c--5@PP_PP'd qFpx >% B.0(& JD8K@0k?@ #=aP[`.PRRO:@ ->  0?JpآPRnnn $?* pl$b M rM`h C0@ؠ@aCHt  @0P8B5rg.IGl`&? AH: كЀ?*z`g# ɏ( ֏8 I?%3wp{c6iX8 aN.51h}P *(!.,!8 `[z8Bh>^G fAz!Aik@apWG!6;fh?z@+7ψM_G/>a OHT|οn  oip7\vO)`U Zf_ɯRKkZ\}&Pr Ʌс^Kx 0[RHͣt'XJN%ZNx5Q%[Ao %ۈWkb+I;KZ$ x#fײLdTʆZM]:)[3Jt ]j ICF?șx=G w\}Aq>Oz2"tP~;c=]/mjf%(S'! P88*2Q4mm=ERg~<^ZB%υƇI?[9h bIy<[gT(`#1y5xKs6nU%.Ӭm qFtUp̈́Tc?]X˼lJhAXɹ(LiKuHz75g=k#DWMufp Á*.]mϜj10xq>ӗnr+pop"oO7R(^e\m3枦I6Ou;Z\oWzl͍9MO6SZW]`!nݳ=2q֋є{t[RI >gݦm>w!L'nj|mtmtR19U/Խkg,țΟmLl7WN((93+2ifWl}Z\v?Ys%>Y6=%<җ^!xT-gx]q-+:SD5SLyVpbQq.\g\YoIO^siYw8_~ݙ֭)Ҽ| ?4Ncֈ;?V3L}}ÛiQP2p5Vfθ9PWi3Wj-xͪg 7'=ڃebcEJ袠Όr)mNgSǐ#0q˕q&ʶ|*ÝRgӮo&vLg06J]Yo1Q~^PDK".֏fy&)oy=*'%ɟ/{{ڙP{O2ߪ؎woq_7֊6^ 47S݈Ѝ&ug.{JEWN:gУDl](E.B913M]ٌ}\G \Xg> &d-3 TҒKI̿V'Z#IVhПhI12v0U  U;w'0k[i(#Ҡq;̗Sb%Gr9*-?Hvڜc{^vBvC%U$=,aXaP-L*JQqz= a6[ߵ,;T+\,鯜x ޖ]qer>]CUɇJ?FB*]ם1XXmZqI#1~N6cK}p$ S>Y-_ZKyqu2[vb1B 1H\"M_ lIdT$,nj-khe-求( bu+=j"џ6[iM<>)pc2騃*'ZV\37H|3QxX8˵ƹet56ڑ_k\ӺbcQe֞MAYkYY1cbaܭGAo˻U=F1@ǚKqN5=3⳷fܦ7ۦΫB?/-3gXƯ$iIE6]q5 $(M]kf/$m)o>As7{iҫY޳ަj\v*)1%ɕ)3]DKO*WD0;WbJdS٩x1#b' e=LyNfQ!I%{*ͯ3e j$)wJ4l\=k&KpᵇM=sOh:faJ$+^)̬=Fop>8qrw?a~z6o]\'m-W0c>^lOZ4?+Q;{J -d'=3IvHBWfpbl$wai3^TDQ繲TOcrFɷ>ꄗ_1[?OrE6$$v{% ^_6%+ӹB]R%f{_p} yr}':eIH#j 4Ubo_6~[Vg;0p>T,[2U`6GH+i$2^Kp_ںHpҨQꔰ GH\;]$:`] nJH~w2] &=<LW%T29:K5bL_+[CwH؉ XT}5g!c@3񁓔YeP|O]~) $Jn'4Z{>rWcQqu幌C=coOɛi}hkA2d؋H]>9c9jAY(Aݶ!34Z n[REe<]ZBuV'ܒ(HEA1k;{}I}s`" N4.]&֒q+j>rt]*¾i!b\ SmO=ObD_=t,:E@\Eզ g MtNOߦ ߉3CHj^MZ_JNOza$E w=2zsi3Tyl.KaF0vܕ}#mah]wU .s['XͽP[ WM3ۓTBNxXOeR}o6_7 u ^t§ӶU;FM}A!c'/<~Sy -:"]7櫕2'B0,oЧdR( +L/>i`I"c~w0zQB_z '1ܖ_+]̚t4cҐ02'gl#aՏ>]>B:L֣2J+57R2\ɖݪ6e~~<ҌbNYV'8_wj2Xe Y njVrƒBo8̊01%7-O UJҪM}&u4#w%HI[;S?FĴƃ')7\So3d4EA2rW-(,\~ͦܗ-Ưl5Ǘ3{(<,\uWȐl/hJ'3$(_'1f^ jax{@S9V8AO/oy'2LK~.:d?-x rzͱ =}hڹypȼDRt0ܧfo5QU ]TvgЖ]+b/I8#eNko3/22]?s^xycEM%}̶VL$3fgYnѨ%mKUs54BšnziC //bhGU<¹۾Κ* G  |=XjnIu~7O|^-%p.}m-I[H3έuF555MgfwxN/Jj"zCRAExϳAUNk/2?c9PhrP=_nd0bٸ(84 }YFoI:| ?g0.f3zNk䬗e2L6ak@'FWmf.}l .)t1?&>S5j>9&3<)/.oE.ͨH| WZ[nמhl_;Is}TpLt0aWWzL:x7i;Ӑ[T0 HևOLrGuu#Hz}^"NYPI'3Ǚج_bt<20?xcM|=Vt`idD2_S''0n( t\djQ`Q|k[l'1LxuuRYnytx'WG·oK'Na8> endobj 59 0 obj << /Length1 1483 /Length2 6993 /Length3 0 /Length 7987 /Filter /FlateDecode >> stream xڍT[6(RJH 3tt0 0 0CKw HJ H( (Ht t4zZ߷Xkx, tydl0E$r*"$ N܄,07G !hL;`,,~  ߉H71@4xU$"dCxјcءXTr@BmsƜ8H(W v {4EӓE=}"W E_ D0W^; uA0?- h7w?`E0;81n|7` p ~C/$˧.nbH/_`0<|.o𿽏   `x 4M$07 ~Ww Ew'aO w+ew4FH:je *hF2; y ?~8JyGC0]`p#`('SO #;#YAa6'Aa4_6 ϡ"m~ɑ_HA 1XB/[o|$S`0H7_kccb(\a |nn oyHxƓjOO8;'F<,ѝ #_fgͨ)Nw-5e]Or'|k<⹯nw:aX1-q=Va,X['#)N]lۧP klj.R5~gݭ"tHŖk&tJԳdco,i]kLG.s8TAV^`EnVF>a\A* &<#($-*kS1h_9Ew#8 ND-C YL_8WBMxx `dP;%pWNg~zS=p,"}.mEI[OCJ*u/>Ra}$ۄ {ILoft1wDnK*йZ/J_"3gr-$)ǟgAlor!A0=9dĊc$r@EJuxzfWr  {g6Nq)5a 9:""e[? \|2w2ǗMi/Oߘ'GіV*mգˁ.R7hO66"L?wD(C+ga ֕x ܕ ӺxZY|5DO$gcC?T4,/< X+,ݤ%kL!#NI u#;O,H@;$Z:ۙ r`vML#l>mu88 , ^ʪgXeΈS!chT4s^>?>of7ͦ'4+U8Z1Znok'ܛ',C|m=it _ž)ꜯf-@iT˂<(_z)?bᓪh W=><2w),JjvN3y>Zpll ?U-z̳hϴУ5ӧNZm)֖i2p *Uέ2j-0!ɢa_d9劄vA\bD~tS`1ٵ@:!}L&BlG3U~av/Mo}iXTᷭ;2=FYХH u> tRj4uڳhM._+= 'ZRF fmQ ]ƹ}mk~\,}/WPŎ`˪c6TBNC%.Is)H$dxoN`뙋m%2(=mUP3Vk~hKA+i^\ű!AzZ?in>5(̪2ϯ>8".mͥf&28.o].S#{ۋ,zP7ZT\N?U]^ )O•lcuZ &z;Ǽd]7w'&'!;/jKy䁀eT[ PIp \Ld|V:Cz S؄}p\T[IsiyZ=:w6pVV?LOFZMfgqbj (DT?O\HM4&4nglvo9 x~@!G-cw nAG\QqNfRScY+,&}ح7 7Zwr14 :ŁAM6͢Ć55"#_W?&"/r;Ggn [R ҳzFzdz8#{,NNrhMHȄQ w2whtq$;# rM)2۸$q Ѣi !75R=,bȿ(:eRH78?(v1Nh64 oO9f]%܊CIi8}+:Lnֲca!SD[2kӯ; V5Sg'%QmxoЗ}W8x&f ?ubۍAӵKl~Me~PSEHhtjaREdwNA [l3]6\_LkJ.B:9&@)SurXiqQ^ÀUoCC+,pAnmB9]Өr~9)V>z^ծP̼WR#2lky!S3+~fG\ #g.ito,͋n^SMϹʯJ=>ȅ@׹#lJ<8*"Ʈ +/C''u4C)' #xeIg$i圫x_t\~ҲQԸLNFsk -5%%q8$YD+dGqтZqT ̬߆Na.Gzq͢% %?r.;bmwýPIoŶ糽J5'XR{,*ע既gکg+CMc]*(uEg#),o _Fy&b'?8 ʯ~[K֍6^ Y diJ4HH˹JwƲn,! B<4<AhrnE6GS3б@?ɡ, :?k65L/$Y}# Vy F!raraO71j:F }}_$(ޑ#!7VWVULA&W.Ϋu+*0f n6(ΌkppF' fPNǻ7mr5 tu. v\Hye]Mm4M>w1f19z/c9~];+pI? AI_$砌R`-խ,I!*$}"'L\'\+6RC,2btq_ ]tR:Տa!;I=ktk3ڕI@^Fh=Vg,8R޻=-`>K餣0W}~[)Mă "dD6Qp&4PFGZ LQ5~L"L1I5U84ft])y/*?r&As{wz W;I;@"cN^}-oTUVg~Saڦ,2\i:rMg&fQ2GȇGO>3kJ;SB{Bcȇ2*MΖ#I/ v:VU#E[y\7Nip R5~Wُҙ67㈅<;H#>{\MtʏJAJv3ÔC&aG273#gd-N[ٯǦHF03ES(ϭ%4ضNqO,`e|+u!E(*%}*4]=j4PsIwB=/SC^#UL !3v(O"tVdcXsòTO48SD-}gqd8tRn63 [ܻO9&JMBb% yR&ہI~jRe"[{pX:Oj:1|MRQk}-VxaFJI&-71E?dW[?ڻJ'? m|+tajU2>-չ5ORGR=09{ M-WVPhkk'xi =2߈mț<:y^Ub,g=yﳔ{TҲ{̓LXxq6A]iD!8k L.V0#ijtfP{A՜g;?`=rk3 yk},ڦSׂ?c{ӶxWĝ*&FD!psmYSDݭ̢~qP!ɋ8 xyjsy׸тy9wBWTYf>=fZ+ǙXT8}ԕrW^Lҽ)_'fΥ\)Dy-nAY]PNE Ye5ڏ RݑxukC~RdL_`]n3#MAqȌy?&4q) 7#ŶGP/]3Aq7 ][yV#,}P"B vɞ`sginzvzJvje}hW4#jpvJddx40)h=y1E +6ɴDW'?t*塺Dv6>9Hn(Y4ԞiZʀKk.r%Kȋ=H|A!Ohd0kljJ4hEs#:i/%x]FVk>GK[TArvW/A.{Q<^8n\B0q^ 6dWF ԮfTQ~tjΫAp-+]ƍƠwcX>%i1i1MebeM\PQ oOǍ.&>;nb\q)@nwU4)bq&ob96V-SEs<8n( T}e)1Hy[stɐzr>$TA?^"{dh/@mY%vtΗKsMz%[@'J]8 w90yҹuCQHn;#ϮA㼯JI\ip4{w(-MD(/wp6lD) # )&?oU/JNc?6 u 95}FK0J7 qoeO}<߮u< !xnmW^e8& 7+]5|x2=t'`=+~yBF?VCi#^rU =CA[ϒgӅQd#MtG1D~ߒB;uAV6vyZd]+n7fhri[χ34-%v,1++E@y>o4uh_<ǢC^;YTPbNgݠ#lЬo cjQtOگ+2*qOhS[ב63a!?oI1CLSY*[<$/A"+ìAvA`m=n.[&:mFVX3% EzdzA}I$6ltD@D7>A?t+L[S'俱Q=nb~Tޅc3Gq8LГ*^DG. юZϞIH姥)ʳ[s܈k FF,(P( 96SX4.9w8lu|CwW‹,CzXv?5ϔ%`ABu2Õr>ōX"fp'6(/QV:\ aO4'{ endstream endobj 60 0 obj << /Type /FontDescriptor /FontName /LBNLZQ+CMMI8 /Flags 4 /FontBBox [-24 -250 1110 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 78 /XHeight 431 /CharSet (/e/n/p/q/s/t) /FontFile 59 0 R >> endobj 61 0 obj << /Length1 1582 /Length2 7647 /Length3 0 /Length 8694 /Filter /FlateDecode >> stream xڍTn6N#!݈ i( c0cnC;DB}smu\}7* &b P\#6aп`Rn ( sEG: `1 Q)9Qi9  芒ha0@Er"P0G' QYYۿ.P BA' D00uà* DD<<55WO@HLR +#?5߂W M/U1>+e(_?J/gN*7n{U@o%&C!07b@PE8i# B` =ly8 5rE~5!Q |};c4vV]P:+މIJ@(ȋ$GoeDl K"5QYQ= vbD/\vHaݰbcÔ"X "nI t o "(=Wsn(-_lPP'L:5 yTrZ!Aq{2_g vNA_:VMG5w2~󭱆8)ɸfɏ =/Vw2SY|k߈ۦǝM(ԣK۳df0lbx\EɨPyqyϽ6C3s1[3 m1~).\@ ~bhZry& ^309Emp13>^hIt)H$ڝ[ݗnG6L]¥%Md:s7諬M蓫l9<k1zsst vlˎUsf}{zޣ+pCpkOl][QєA&:X%393=QֈM72nӈ+t%%Wore2_Ş/ 1h\Ә _ҋ`ۃ!p%uaݝXIV[ٚNrEw}k\tFJ&4o/0gx܂Ǩh-ʸ'U3yػYl^<9afE^!xN*=N8!C˺k? AH.^ZYI]i|F&-v+`@CaȜf uD"Wݎ˪;#YtIMX`p[=Brr{~&_{d?nb6%6( G5;zTɩcjiH_ӥGv*^z0I#6䘟4[ixS3^U&`tT= 8fMtLqnʛtXl/l)s_Os5ܘ 5Nb:Nz¯܈_~m!7žNv9#ՑkuRgקbo|8囑8y3xl!>d)Ij)]>Bǜ֋#_n~ ݦϥYl44<- /b;i! z>b1 ʏHUK~{BЗ&rY (&JS S¡*xEX;`.{ԉztE3}/J 8\jm]\mXNOrs$ ſgDᬲgp0v]nkK47]'XVidz5OR%qno~* L'`DϷ,L\.\"ݫ#TP/j2,XĚy-Z7|fCi_GאLs!Ӊ 7YsҵM[h=}DTK;neJcCmqG-dBY+K%y[rSn{fG&ѽ,Fqr\'DK~w &;Q 23FC/[SGJFtS=jG 3yy RS*VaJKqH]7|7ݓ֥Dkdqᥪwp٥ $uP /VJ0(>k,`F^W&RJdR~-U=q!T@5l 9ϒ>MtHK cɞ̙yL%pF֔^ϲoވ40g ǖBSɗR#]ҐǎֹNָrb)/V Ǐw(+(|^-ɧe] >vKrmeW ʉ<G>6[M&9 g)Yvme,g5m7[Mg0 V2-^wfމRoV: >OnQ-u`%u4A 8wR c]xvr^@8ZMpe=]6M\[(ylo.Ȣ=yGS/'PLD1qJG>\ZJȮwW ա<eRV]p$Ր@_d*6uܕa3W1;(n{ْ0j=AuF>~1( k(ES ݭF4WQ.渋bNjqfȞJcoܟIdxzka?'Z,Ha.`jIQQRqsh3j:[͊i #An@ȳĴȶB6x~y€[6~uZtm Sfb}.&0P `nˉQ<>8eD3P,vՊ>^_MJf!o hZ)/:*j ʢcaT&7b]m"Oaq,3 {Ia*{brhc"#&|idy3[)PҔKu-z!]HcmQx7'A/ִ q/K327׷OIâs8fweQ!Xb`$Tvn]2U\,`3s~3Ŕ ԧ>k)g/\ /ros{+vq)Ih̯V3ru6TټV4R }(6;|yDGlSZ-9P74h!ҔpLya'#a+Q>f"A .w(>99}pJWiь}[s0]5>n'm=ʝ1@_ u׶BAtoti']sgb/&Py#a7i=F$ n˼ ˗t$5KyT^*v&PT z,2^W&8yіϻpnP HW)Dto9o$X|&h$z ~mo^G řʚDZ&T9j kas_bFs6ԈTxd|+"拤`r%][2.qgmkq녓0OCʾq!%5nc޾f5++ !R_ʦmR3M$܅<)'"RD,_•WBs#pH8:vʼ5uNo+"r,ȌL?53Mer<";'oFf'y`z"{F ωS p]9tVJY1Jjn| }57'+ l_EOEtF2~@h_xQ}_'?gE?`%w8j[}i܂E4zjc +)7$F+kFLܔU6q'qk+LpUg<ХZv:U+W,xr}P=C0?^l+,ow6꛽6`覐Bڲ5}V`cKIC}?\{gb\,H_.4r@T05 FN(+yX;z7;#郏E(1% Pg\>lBu#Aj0ӹIAvW"!iyK7Y:ꛜ E.Z?t8p+_ sm"tdyפHo ~f%ѧ’|wǔÂ%>f~T=gG$ل.#% %p :2GI@ŜzAYrlq _Ǵ'1=8C9(#3PNę*ݼaϩ0&wn8ਬWu=1L-aOD}*Y/_oɺu,zQOz=|c uuzkwFյsP7מLg8/^#(qR]Yai>6.—IexDC!Uѵ'V_L${Q]e"{f4}JsI,֍ʒ>U9? PS 8w=fH:/ipg־L8wvWc %*gFzaS<و.0+eJ-t[lJb![g~Ve}FR6H--G$zVTi@HJ);\ya/3O\DtKmn{RJ__̆Z0yβG=`-\8x˟UXYf cY)t>r\[y70L{Zx^BoE4w Gɚ/NªN&0!t7>؊D(Lh@w{9Mso~ORd?d۵LoX$`ZpGi+! Xj;E"Nx= Tɚ՟i NP{iGGK!-B.Tk]SaVmZ6L_Jӿva 溤{!!^ 6M|/+?52yŋ7BķmQ]%5 {9q{ߑT8ڟj ׯM|um~\kKɥU#I83HLHUw0<3زo/S"aN/J9tH-6cRg):2jJT^9m|ƠݖE39/b1U:2e.Z<ܾCwA| Vg{u#VT[ W _zZ}!35 H TGR :XFoL37=T,^]A|PFEx&1:J!!;S,gz0[3%«|hO^e^g"!aѾlZEz(9Bj ڼb0#%PtdƭL#NjT'HPg"d_H֭dM֕NZ"i-TwQ;e3TժMi{*9J7kj{!0g.=gE YZ`kKձy*점M.{qfM@szKtOUaË Cmڴcy~l}ɇ$xHL4!='2qwy ڤ'&CLMEڗ7 fx ~O-\YGk׭(Tud6 r IЧ=脅> $wR3Tdj !R, ֻz6nt?%T4 ];|gM=21v&8x%9)YUۑl0ޙ&AeuTUY1`aqPt)y2CbQgHm_JOb9s":_8?\Ruf-ilI-7|Ġ*MI[ycp]zW^6nk7,BNg}W aGwsq,ϚT䕺O=MߝŬ[ (}]N𹨦B='>&4𥕾{?aYW;G-fd\Α &ˍӢ3>>'DK1)[w GM F endstream endobj 62 0 obj << /Type /FontDescriptor /FontName /QZVWJJ+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/bracketleft/bracketright/equal/g/l/o/one/plus/six/three/two/zero) /FontFile 61 0 R >> endobj 63 0 obj << /Length1 1572 /Length2 8224 /Length3 0 /Length 9267 /Filter /FlateDecode >> stream xڍT6LK7HCt#]H 0 1ttK#tJKtw*)95k=sk׽H)m )@!0N (@VM[ËȨ 9B1An`(D? Ԡ# Dyx<<"6,<5. rd:{m`,>XX@!?i'+Pف,:P+0_!X`΢ܞ\Nn\PW[ V'f\=@ր-@ dځu60O W8@7; (4AU25 p laeurx!#q, ֿ -ݠp  %- Z x} sr;wx!ֲP''~r`WzB|:ۀ!6Kvwփ]ArC` @GH@^Vvܿz;(:C6@`}S&[ [0pd + `'-k(?VfS*O+wix D*޻/Nk]XA 1Mxx3qw > ,_z8aP/A-Ze|3!7YkaVv3wC@P7g |׬O|RT *wJy ,\]-1ჇK_ |9A^x @ap<  oJj3Oj>F;@SWjO?]1]Wڳ[ѫta(lfKkR]g^Ipce4 or0wF%0*oܯir]^rr#2j ¡q&_T%V\ҦI[ל,>[׮{?͘GEYɸcV:ӾE>]TYR)hơ(Tk}f;^&(U3-(;FUѡms'Q@iMNҺW&mjϾXkef7eـ4J4?vdRu+ Oe{7XuFd RX7S8:XٕV6=ܑPj bTmf7$K ހ#4Ҹ'-C*۾cYk&<U#4&l9: JlNj"[  k3'a&VtwEcՎ@ءuLܓg4}z1uύ H*ȄQFmTA @'BdOvr>Χ wD=yD[az >(esS*Q/_ B+UR+g׶ BnH=5u[Ĩu@+aXPᑌJbEo 4U`A2&޶uFYό\2 oTCH #=ݮV֋WjEдKB;zM#[릹 >/Q%@)E$jnKl¬o!W\ؓMc6Oޕej@)jҧɵR& ͍w+f%Ne:Wτ (KE98-<E^&\ !g/p | >< O~u6E0K/ٱp+yCJ6@?aX1Y>sveHH.1tvȋ0;[9:t:jnz 1 %l5@o|rdts"m;yuVx&B.qTvlMk:#B}{Dz2L|yckOfxh: %ȿr_ ]~AR>(–[s~.tEWT$ Xzx9Dp҅Z\J(&K-:r"}iH"@dL>n5bo2q!RXᇶy 9lփ l/ tJ %}bp|)+viTƎ`9jz,ZF JKɘ'oĬ}Yלe잢ƻa`U"8%}{N3-'awL$uf-t=bBd.{19bqd-.wb6= ˕0Kn`ۃ\Hwt\bW=Eo54%nuʼnQЅtLڶo콳P^RAg9-ikĖiÔ'Z,~$c_ͯu -32C=xh$KYRlTi 9VuLI\Ɔ 2?ulԓ|]0*VQ! t/ {21fa xOE2 @Z؎BRFTz۸?H[5!|4SE<ʿC(PjwE|vKMN2xnhL?XCS!QzQnsμ(|Eh S>nVC0z>k>u]!A"4y ܌8Hj9:n@45 dz\RCsJvK_Fd~jzҪ@CUoqȌ![X/-iLYb fm O`b#& 1¢*x!/?5-6St^R2-\mGi TٞQ-@G ʏJJT"\fzd|gF|Y& B۪A'yAsxbjeፖLISd}6d˜J^6Ι~;S,"͕!Lg3<?7;1`ۨDm=zW˜RStZ xBRplH;fԐ~oD29nj݅'2ɽ>?ڪkNHD`4TqC48շ͍IW]WTpuE-y[%SYpe#JݿơΏ/o<-a9-zG g eXk91wò"H@v[x\Kb>@{[U^xݰМ;Ȣ<H~5|ǹ|{| ^$hHxPsjL&ash0Fm!ATF(PńΩb_J5k 5B[?H,L ޼U`0Qe[8T!hd$:ᇯxW]!1bL~ajdMO;rL.sput qU\9LR't2cD.@?GIR.[s Qmmtl%>,,9#]3YКK'S%dҀl%+ʄ Ė[p{$.mW Ice0sBCKE`oTf+ Cw#w8cwnMn,)@0*-fhYo[ F r6M9p"{dѡ  cW!/fp(-F<H5O߲#-F\yڜ?]{^) TVfvf;qjx&@cmC^J3#k\za4;=l6ƫ[эxV4ܲv[GDl@`GCpw[y01&ÉK ir[ۄq;/BK$F:Uej:{!x;]@u<5;7i̱c qrstȹE6`Wʤ:_L,mF>q:yJ;<^t/'Gb派QUJU6d5:)SֵW]<`hʳ9}Z*X}NolEU?/v]=>.Lǭ!.}ɹ})ckonVJUvp{B*MoW[O>ZD#K` 21b x!0\,qhe闌(ѐ;WnvبR_ /;k dTnc3 zuiD'kcY5uKG?Ht5Ə xyw&̔o78Jp* q Ni7N]2FQ,* =`D BO;5 v?:G_-,= _՜{+KeFڜ֫ <a_6n~?ס,iؿE Hj[dA s&^ y`'daq&5`tFսw?}snD}_x$\;11@F)!snG[_ȩۄTn 73 &]||^%0PS"19I!TotMJ?漵HuV͠tx<r-bRC=ٻ tjrO:F۞?P-QP K&iSUaY3thPQYz\D" "Z:8V_2њfAWI7Zzc^+:jCbg:}=A& @"YS݁ȐWHn&^!si_ HqlTKWeW1ZHL(Ү&r%^ߕE?{vPό&X,&C{WB7I;( yΤĦQFrHEk=|X>F8P!??7l>9CH\w5 >edwmA.6; j9g_ӌU4@ *(g3khvqRۇ aMtEk -;Z:JB)'厗񋉵qĴ^B$珹>.EpE)[P[/Jwʌl=KQ"%oAi{`bd:"%ֵ'>D2z圖vLaպوW%WTdWu$gCu#g 8Fݾ GAr)R%h,GF+ o^I='" Vy^NEp'Irӌyί6IUR1@Tjh~[|;]EgUL]-e=jpKBmt~ 1 2E}gu@x'V80ί?j2B]Ȫ_tB 㻚}HQnw E=/ʌ:BJ}JEe|]_fuZ^sOz[_[iW$m'C$3M@*wpaGnAFŧu' L}A pV܅Aí͌ Q=S7*EVԬ'@ QJ&ٌFyl47Wo,~bL&p?U?y_5E^_xiJür~*gx:9YmhU>_Wtt'ۍӞo˿q-2?5ak;A؝>2KT;U^;.~i5EFC<]FF9]hai"q[Iz`ΛQğNʓ]X P7r)2G)hq2rƣVr3m%7L:f *|=.Lg8![ax*Lg%r\4{$r xq/ zʚjoA[æO0@6u-&i5ppX3y^ۦ!0Cm>__Ώ{5cPaah $F'6a> %u$b Mւ=2j4VE!:^ ;1_ $\~ QL|p+= <ڢ>( q6~K* TI>b?C0*i|vƩUv" UB8i endstream endobj 64 0 obj << /Type /FontDescriptor /FontName /FBOOUR+CMR8 /Flags 4 /FontBBox [-36 -250 1070 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 76 /XHeight 431 /CharSet (/a/five/four/i/m/n/one/plus/seven/six/three/two/x) /FontFile 63 0 R >> endobj 65 0 obj << /Length1 1494 /Length2 6523 /Length3 0 /Length 7530 /Filter /FlateDecode >> stream xڍxT[."Mb@zM@zw Jޛ (w Ҥ9{׺we3g3;Y`50P`j($F$([ PD&0cf04_e1X. D@"H\ QR h0412 $%`p can؊0`aq`ܥnhA?q0/2@CM` G0F9b0րC`H46 yƚ:}w/_~A+; H_8 Gj: ?h6#Xףּj0~hD8 J=fU$TCbĿA+H7# uE.d?i`M90Q({@~0uv6c9X@# A{OXv{E ps#k9by* B"|b!+eCE ?q*)|’I1 E QHE{z ?cw=V0( `@C;_Yy"?  ]vB 55к0(0vFNX e>0qKK7[G Ph{;zW݂ƶ UEBP_#(,*{x} D Ba>%D0c A @ۀ-$C~?6a@׭=ĶnV,`{e kO󷾰^F`0xvwy~R-:Lh%Y0[}⁒=n(`,b|:wdܐt| jҞ@k' 4*LdLnog͕b>}H[d5+M5׹ؒ}3hy"ucxR{,u|osz3D {Ū"oi %S'j5q8D"8ۋ,kKlpS]gJtZ6{~n%T99ڙ&]s4[-au]NJJ-up?6> :FwbIEHy$f`qr4x.b2м9t_dz^xŝz=3DHEG曍&MѣfbZ.; <S2 iAI2EB_쭯"v暍FP({ %͔ S - Tt.[nV4A>6=P'GgzwUSZ&qr.g"]ҡ5r`Qs^\5 U>us3y9NGru7# Ql;UAF_m"V(Kµ&Y5oƾ|sf\:~Ow%T7M,aYU+E\OI0W,Zch6?vI:x; U1՚,]zG:5VvxrIE}ƴlqm|/#崙"\CgbzI;~\[4q5E[,lb怆+7X$g"K@Ȗ񠩁fH0ΰeu{ЖQ낖3,: Ya)d ⵞ y%M׳9m/N{}3S%EI8F| #ZyI+_'8W'y~l-CB%W}yhaG./l ,)H\a_iGs՗ݾP6$~B6@>>Lu돬[gM#3Qm؛8cWm(%i +MBKK<٬&o;cu4!l i瞶8ĊYbJs^ȹ,evGeT6BAQ} |d. wr)rRP]gi<NˇE4+fWFúe6S$DJ3Xҕ~W] ѷwu۬7^'2x.J_[at%񥌧iHufP HqIT~qSWg }.f]M*22Xg"ug#^zgQ0c/{|`lc'ZGV o u$F_AFQgq+crt4޷j:5MXD\c'@~Tvoa2>k>P_${H?ӬѸ(1 A2?2 %;wx~c9&zvCف3!=f[$zW.&q!= fn_3sRO:Hڝy՚}Mm$Jy>H akRof~ w;C2ctJqʥt[ǥU? fwήuF$}Kf̲c&:!Uo\.~y]톟X3T+$K{!EU}^moCq [*P阨'#ݛ$:f^FGHm8no 'ٽ0l31:g$$D' Z%\g~+SI6N_ZQ.sPE!#G[y΃覄Mp7I:-3 E07&FZ}rW}h{oEL]IRy9uG0j- krR:̎q=ɜdi>f6` N=5ڼ!ݸsf\~V?@ެ2iOJY f/.ޓB<,iY@N]SQMqӘ!W3ݢ=l%,+)|N5e\*E)Bs~L$W7d0Q ~R+edhcr[cp٘a$ ]dOa+n;Zzڥ+ ʼn %Co]J,f$U [i]d*֟{Wۑ8Mv{XZqkѽ!; 5ưD>O0p{ڸ7_pϯ쿐7= 9Vgg / ,h.hpV*6;)T#+;CBko$ZfggB;z852>?`}>0!3b0SX?y"ޕv* _$WϓJQT+Xܷѫ/z~I쪨iC{Bh\2}G@0YkܟuQ!_;lY}q2ΰ]sjc/BV(SЗm -e-DҝծİbEL92W.6"rZ~*z'u8 I:Xr˱J?v-9A-Ŝ|Dk,w&x/<&`Lބ>WM,y2KE)Nm̀=sewueYMql.8hS3OW:)(°i׬hKs"r#8/D$_&Fϓ74xRTx{{ڞ9#E k!Kr踦TW9xWua3I_)K _B?o@D <6" dSLS8L= Yߊ򤕡3<;k@].(( ̘mu%ly(ǠKz®ȓ }ō 9s\y qe6Rҷ)$>ķXW|#Ă*A`QSZ>y@ffʋdq˛ɢb=u1r!;ڒv`z=j \'i0npc0G~N>DZH7y}>d1wCa|VXP` Pnd8mpb\v3;vJfC9;s1ς1CA{fKCeu|EMUΙcLѡ/|Vߤ*{8-}ǞPC0zʌD^iA5 -$ly@}};fĦ9#$(72gU{7;i2Qz2.w]riUQ͐Cn4 ,VQ2U=(HekT &).Gvv·*)do$$/K |A]|$QC1 M5)nLL"EXͺK\kQaYE5Wb\rnӒ$tPP92H9 1\iPjI>U=,h~[H})>SA[FX]FS~bR}cD\ME7ŀ\ri-SR̓ؑYCi%[.^"uaȶM }dWvKw2_-؇ HR )ZխϼؘiBr&aŷ a>><- SwyhnmVes$o/ -B=fjԃ@ѫ>WUasI9&ɛCLdcUkKyDqO[IÝikI|x[u<3(QqW˔Aq+}Fh"<5mm璛-Vbctpǝ̭n%]Ѣj9-]䭷(f?]0X VưjϋD ٮ:=:qK^:B>渪6Ccn~ߴ5HT➜߼P)F}|]ȻmŠO_dW9,'CሀFi{<^'w>VXoC lvCa1l .q 1{/))Oa&Pg|k#lf>_ļ,^*SthҿtvRq,6z R;bK(UyI?kQ ٪IpmG9׬s|G`9) =w#DY|_s5_W-gDRѐ*9!X9}Z" @ : ӿ1tWg Zayiff*akCvSV%]V۽ ~EQZLPER0Z^ORy CB㑺(' IaLy[I-BE#8 ?W~=u;'!&T H42kNbZ>D$\2| r R$oVt.$7u:>Z?/aymMuA l7Y ?^7|XKj-BP'ڗ|&vJNp#< :[)YST4<ˠǯx >ajIrZ9+/+b'E=LkxIe12c`]Ռ: zwTjn lRq\V%.E;\k 댴7q}_ռtC\+L$a- =-y^ {;24<~ * m9M}O>)&JEU 2p6sQ ɰsy͖i߾d\wKT]8}01(i9OkV$qyrnXşp021nbdL)a9r-C+g_F,sKxVst2j}^sPj|4BEǕC[*hg^ , :Ex [Ƒ`]n/ \skE%ӿ?Y endstream endobj 66 0 obj << /Type /FontDescriptor /FontName /ZCQATX+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet (/bar/element/greaterequal/lessequal/periodcentered) /FontFile 65 0 R >> endobj 67 0 obj << /Length1 1606 /Length2 8051 /Length3 0 /Length 8864 /Filter /FlateDecode >> stream xڭwuTo>-, KIw -H7K²t7Ht) )HKc3s_s\s9@fA\"@2 .> pʘ!"@P  @i;be2ii0;hM'lsC닚`0a ZB@iU5W*@&y-< ՜ :08Z@~ htr n o 89=|!N@+ -~x[r"|`j0'q@am ,"-` %=sҦ7s 9HPu$1ܝ[^LSO\8V)p26 9C\Tr4ՓO.X29> ~O^ZLD#E c3缆|U۬:^Jo;dyE1IJp@kFga@iZkF;MRNr?FoBӄ(5hMyR[9}y٥'ACtzoԐsfjs,ア —YBHU2Km^C,.MIt`3۸>[9+ikefpWDirM xBh^bX/:zj\dF&ule!vLe+v߿nGFd% hŤō٢m;.WPf]qTjQ' *1"O%p/e?qVW=7$Q!⯀g,`ed턮$@Gf0xIM)M]=+sɣz5余?)Ktt ޗNWW{< o/ɧ*"ҷ5<9-JYށU]Iַ-7 n%J;D3">S&*U4N^f\.˟z|F-|wCRK]I~,uX \zy-2lE<=SIfMqZG{z|m~+}r^mO!= vDЂcV}  =$yI} VAjNUyfKPӱkG? kUT]U4Ԏuoc_x*43E7=> ~%93+{-3Q0PHOG'($RŇ?}yOD{;{eXZ6l;K.}6c,tFQFQAɏM0a1]?I8z&U _49vHʽX'E'0=,޵94sKvݗi3pK^N/%ߧ}>r| QBMsHUYr'rurJx*W{cSjM9)&<C[_2x-"YM$C fZFwhj>zE/"pUQ缷YSmӪHyfY3*"{oGO"M7l#nͿX93ՕF?ֆTJsΦ Lm ֻpG3nw>>!(g$B:܋R2+Fg&6,n[7F{?,P+8^G'WFN,u; ,UzݏaP&,q@rQ'\A{-Vvd B2vH,' ci]]G-4?Q,HqԌ-_!_u,k Я\1(Lt9 ėhn&u УfB.ѩQ8#Zepl& s&f!bq6LMw4x(,Ԫ W)ËQaF|&FaAZRjU5"¢q75YTuUܥ^dh)4`L*+(׮Qb̧\=l'>CwCx3İ%)0ū9]6o sM8ۀ7?`nVIG6ڃP?.'vㅄ~KaGtCfH9\qW_- m5++r2ќ_՗ђWUS\) D W 6*5 occ%>ʏrKRJo}$f#@Gz)Mu5\yUBSmaɥi 5QgSMڅϑ.jAfLὯGԘ}PN^J45a&w@_d'ߎ~ʎo,bGpkڙ?t坁}LCA IN'eDwOF>qN OSI" @RUe2|@@tbN##?:Jx]OrPbGks@/j˷Ʊz_<\ ѓ~&b _+ u8))VvIzbp#}t"Ȳ5RPGH./; .r\mHϠ@ٗtLM]qv|iĊw]>w'_(glhnd}л*T!FP]3DvTW͓iHl17c. p j|M;VYWn54 ڶBY3&֥+^2m'Fr<ؘݔłe2=8汁Q&iS:2vPp5lչk*|?%OYD0pljWԭ{E$wU! Obx} ۘ$)p}Y:c`$:+әz 8'T\i)A;!aҝ B3COڂwZ /O\؂Sb ZI_,%Um F/h1mn´_{^6V d9<YP@P/jRо>,1$ze(_5#K=G{@vv0HKD#uƆ2ed+7Z7+{JN?yO¤79.*/0"eRų7>,tZ+c9.T5upjzgm]t!|8-ғ ﳶOlWbݏ%}žFX޲bLg˔cv ?^ӻf3Rc`J [@'1dX8,7z c^Cu-g`S*zr7&}е2Z؛s94{hzƽ*n4I)uGzVjS2ӧY岪9L{K+s`FFD-v4x)Fzڊx"߁5A{nv|2=(<[#y'-n䐸Lގ6I*-cc>/۾?i>aT:8"?yCOEI.ؗ!{\ t `?ю{!{ꏨ ɤKX<+Z%HL LpBPriot"TJ ?j]f`S?yj_v;Ov8O֭Fiâ;a]2w_xaۤ!).pG|}2w$KT=V6&KTl P6Sm^}3bO;QspJ됧xD7U\>Mbl9IhUpjYL1/X0΍:b (8Wԧ@ -ʹd~!ըT t,52Mhx̸@zDIEy ?.pK]nI!cD2%*Ϟ}|"I:/^^BM2 i|!]3&S'JlŎcﺨ"2[Nt9%81ZR;&#R+52QzV<2l'>z{w~-)>.|Ov hAٷmL.iH˼qi]-a*ݦ8(AWvZ;tO!o]f/,"t+Ɠ̸wC3nȧLϛ*Я)q_%Gz lzh7Gl{Գ0mWntOڄWju%J9!|9Ycw%WԳZ#@[ i5qRhԊ}JoI9WSъuYKOpTWH-g%.vdaZWmʷqfZ9{KOV5N6}r\O5>GL7Һ堠ج勐f? ;?Wx%Gg"En?k -3bEЈ~HXB[GWçQ13g7284fd{]*5WD'7O`GШT uwǢg廮44*-M=-|$r_GX`_C: %n^3(ofn, ]~̗G$BdO~z,iCJ 7_Q (Z¤6 C׋M$VU?d0th;[ޗkpf}:^0(q5h9~Qb1)n%$ xCc^Loc"^kIES )htv=?Ù僮A'@ Zsݴ4P].J5N/e$tcDMo IYӴ£+Fcu`٬bû1xkry9S* F8. .Ycņc;d{:dFS@_&KWU|RyҞ!YreU{>\Y(FEDWfdqc.5Nu`&d]T"HGB|,G&ҼڲN{4Qqju'TF4lKl|iQ^?~I"DL:xB6%4E< K;uM2fX2Cv_ٔTJ9g8kWphZoQi҆6~ 3^quq3:KysfUg˘'M v%yJ}AX< Sیx>d+pS\Z1 ʐz蒬ޖ{{Ąw RTM2}+2hgvgaL~v,k,Jߪ.XgS4^odU^H3ߚ7ļKG58o(fɰc<Әڱ rQeރ I{џ<%[[ 7-V+8-bd[㨼c;qϟ3K2)N4i)wb(k|X9/ LJ4) u K\`ܧ%Gylj6p.rhW~@A_ǻʧRFk Q/셭CĨ\+'ߟ~;r\W ?wKVL#˛BDg$QUaC.^roK> endobj 69 0 obj << /Length1 1612 /Length2 13965 /Length3 0 /Length 14799 /Filter /FlateDecode >> stream xڭyeT]ݒ-wpw@wMpw}۷o?{U՚5fl %Ua3{  #3@dk,oo'Ǡp1r PP:]@vb.@& 4X(N K& ,L<dawڹoT.@9UTҖVPK*$v@'c  29iN,vfJsf% 08;MA=L@'[w`dl._&d''?xX 7ifoWI.@rf gc?98 z_WR߻O g9# 럜.r[i;s{ ?fn_3C󇄱' h`'%2 "9ߡ%\mlm ?. 뎱1vmA6͆GO3,#Y4SZ̍mtod003OdjmW9ڙ;?"MINGTTZԿh"oo0DD= N +矄\,,MaX7vqytwko0vfٟ͊O_nSW'?}߃zMVMyC23]'tY CʛJj3"օ26Owx.;cP |hmPv};b2(G<ь񾘗ۂd8ؙPV1({!bsx s+ wgٍ 2P}|xx ^clcO#&wg/;Ր')1.C-PA_Zp(2gTc/JL 43_M /)8hۚ0Ls,9<*=ZD8wȾ \uJvHdT _9rWLH6l%3&<Ç)}|8!NKxC`3i]mZ- D0di8ȏ sgqDVv NdI4Tp.6rn[#݅)JPuHf|):g\g}F"+YwK tU0J8'Z[)#tm۰J Ie" ua¯WS5g4B.bwmSqIoiV5~aU1ۤNptfu8~=և9Qٺ^#iKl|0YKc,jɅkh4&*b'R6xȗCo\!2|yi2b_Qd~Dd_.v 5:,wibߊ/1Ͷ^ATI[Z JrٸNL{V!'Bis)33#$2T'lIJ +XSH$*M^ W$V(#Ij^Jڜ`HF6p $&rE)Tls$R 8=Axэb:"'G[`oV ya #/L߇7)QIj8Q؃"/a^;rr)d;덢V ޵Tg e8MUEϴVJ_D9GYq]e9.XƯ)1v5(ۉ#ç0".eQ2'suC&F;_zI5*~ zLNB} )19/3il5Hq\tqVh 5n#?bu3'D_w'WtTp3XIxL !+djNW(G83PJdWz׬),)_VDWעwh #l2bD8Ev^$5o7NgΎߡ/uꐵ%uev֥kyEEC3V&.RC2fteDAoùS"o;թyhk\l.¢ C>^6gUR"> {K> Nf((g>Sk^\'z)[ xA߼W"z^5W? OJ#ŗfnXțKjwt8cuE(&4r Ĭ0 kOcrJ59jxF%'>ObqZ'r>IAI/瞧Moc`Wq )8;QԪq6LxW]K᨟`.tE8{7`?IѸG#eǰIǪ9B@lS"n=f{-ɐ4A $}rB/#m)Ez0oB3I' ʹA701m&%-UFô_ +T[bMpMtX kÿQW[Ie.xUN=StiHjEa!´q6`nkdk[ke)|G<< cSua :lęv+Ԃ0ӝ|?&D*, a>tOE 梬i5  Yaޠ|+Ν\q!\FDUY6w֥'bu+́zL3)z.iWpgAj_9Ssf4GN$ "OҦזT:SxWZSR:ebԴhs}8DMaRpւqUP6?B c0Gl,\Yb?&>]э;XG@F1=)dph݄IaODHXqTC9uIܙP̖a Ckq*1+Stj( (E$T%4`9efB&wf4ucviSx1ѠSZͯ㨁<&-G#˲0̝!  'e "S1o¯ ye {;(ZIqk2|j e'*N$!Tu'-u! ßsWb_훂L(ISʆ\Yq/cP &ttO^Am@!~MWmpeO_L7<*/xR,BYun-ّ2vrD͊}39T;'j$}\e.uW./w\h)e|? [z4W~=+bª?^%$Pd&UQҐXie &L&椺($E][:2<)ҳ-[2Fb} 7N:6&^Po3a\v dl'2GJP%qŽB) LL?qr~ݎй~ÙB7#Oo7ڊE|*;Ě]?m}7`Y(|FM+E @XZM[m7@o@ qTxu=S@uBCUl|dhbb'`%>/3^9VN<=Z "ͤ^o1QHS\`ȿ e3kq9.+-ĉBmƂwqYلK;K槾2M" teYAԱoʬĻeV@Sm>ubwJyW;s |vM"\ Tx|+x Cyٔ {c8XO)8a7R7+F 2:nGQLe(.۫ ?uj_ stԈ Ӌ-is$aj|1vM63thA U5!cO LpXMdu82= uDk2LwD^dkϯʚ #ylƤ(Kk3p xƕ0C̨܍'JCH$ |Tz oFPcM8㸩+F&!z?;"rJ3)JI4"l/D.Zw݈{BFU_kS&IE3ArYcz\8r| 6AmΒcQm sLE#Dzi$K6jUߕ%PJG9J|N-]D Ez0mqǙ)}&}gVIT V,, 9x`B0:IgsxKCjUp= NƵWc|&(*/IX,R3ʈOG4x.e-BR.=qCSGJ|,b׫/HC!RãP}FY eg~^ rOͮGo4qىiK1(u{B2/lҿ:W\-NY&uv'+CgZz7hckO ԈC}C.U$.#Yodh4Xgs CkrD m4?Dį$M8[H%uWwgz&8ea(Q;+E F+6G.٧Yk-JΔĨ4QO2Mu?Kܐd:|SY hGysp99 ?DƥȩEJ=wVB(a )V8Ӽ t`Q0H)0gv#,m7UWlW\ jZtө]]YܺMYb6;]>W@:ߌQc.h,\薆ϗQ!Q5ԘiwFiƅ t 7I%5PWVȠ6 u8}\^);<= t ".*noRڸ[6iu&312~Y9 = m Krv z L|1RSK'BO.4R! /fʿ xW{ij27"F {k])%Gtxf0D<8Ę-A t{Ta(šjp8^- ;kv0pN$g;nӺo,(丹67JvXvxqA.EvuzWiȹ~2u(FRR7mMSea_ ~0!%CޅC8\g'Av@"HCEYS©qàO):a5/ `;]YuZMz+%8hF V?@&Yw0-':b0T$S ާms6*eFӛ 6dkF_ZeY@ Y^L-zk +{|!P뙕<[\yBΞܣuj?Ml'1i6᳉~/_0s岉,Fwئ?y@A2ܧi EXnDQC@k?M6\Q+l0tib3]y=ə]GFj~{ nw4YtW+q >7%g ɂxQw 7xe7F`#;eh܂]EWT-c}Ko_ /t̊9{" ːꍟ/{:;NeO >_~F4|Jsj4E- xӜQ3[/镹?tNN^Z`)^CQQpN21@Q >f'*X$W-7SN LV87i;寏{œ[<טQ -'d?kx[>١/)!r u+~M崬9Î(/bk{LdI:~gU>g#|59dKNR͙ao}9-BnyA,蠤|;,&;9}!&=f$\v# tP]0qɵ)3lδ-.J9"g[bUdqEGX{ ]nPlH^#^Md"w ~*mF8dI^_/xZNe) K<;1sĜY#[7& TA&an.$r¶Aj6L jBb`.#hDfk iIyNv^/cFchZЫF&8PC̨N4O:ht Te57$M~~ЈK6dY\eUFf!Z-e){q6 ZJ@#"y֣or;1ݽ fK^߇Wl h=d)D$owu+h} |ђհ{bXtĸNP;EA/2G0E|sұlj r5Y&Ԁc]# XRCZE39QO0]&]37bښQsfBg DhWٿwK#׉sQ^>-EdKfdwI3yj~bV\5K}AˈgMf#6^1>&wD@$ L0qکERѻYֿ?(-Gz䆆ƭ÷o ֈibӶk6;=zUJNLH*bWn &!ajzeжV?]G#KJzHЃ]T|$q_m]΢[V4yz-ᖉsY.QcW&SfM9Cᖣ#XIۂYքOgՓ) =_l~quQ;H>yrhA2\tC1s¿3XT&Arz^j>0lʔ5oc;*>^,Hfˈ4hѬM6tBsF֡2\j˫##QJ#}fU<=( `kuZbZ{bG +oK*/M Uvwsm/S*ΊW幔 I>׈n dεU6܁9Xt+yV / vnaf}XTn]"100^t!KoG uߛ+|b|Yf|q=0@{̓i ihHL-R~8qˇ eFRn15<1 cO+A=sE~iEr@Vك q3>砡Aw]㺌v.tvi-i Ze׬O8I# .8,]̓8{h6'ƛ=JHgNYzɋ!j!lSM\wVb[R>YSUӿnxpk,g9+[d)쾪9@&1T=oD91ub²k24ǛҭsE݋?`8*H#b[Zslt-'OH)d_NfO{RL)uM[!ݕyudꗠY X~*huc9r;,V&Ԑ ^}R{'\AYܤtđBgVtY;q3]qz5 Χ _=3((JV}OSNԮHT3oOf,%e!>S'LkLWPEh XTWl]HGJâ2ٷ}]x{~jOqrDcq#3H 1 Z f-$W?ɢgMLr^qT?ĦX4@+cvL1kTݎsSWk9c7Є 7dQgDMj"ծ5u恹bl&̖%[0xE>-3A(Z ij/Hp})]/v׊xe~}cݽ%$GݢG⇔z%d=MՖYuCWGGe1AlT"ۗ7bPȸ \gJ "l=Kn9ACWdr§GjxNXNv@?gci*C_5\g|RfUD^J ̐ qT—# }cQƤ gF/ D̆BHjlXVpq}acO1&WKv`C#i}7Y`e/J@y Ȇ7ciOW~H4g=P MZ$t@\rՏf[>raC9駶ManxNϙ4^j;"nx07LF9x6MՕW0˭H'lYOtg+r2bklrYmWsa1x2)u#ňWv}mH'%Fb/P;Er0\EqXp}4@nMñ^{MIB t#&qOg,=_Tơ~;-t($_4SHWxv_5Ydl3(o8FD衶ϷFeǜoDPrl R^8re-(W"y`J?o)vG%6>M\MLY5\4P۔ʖ7>kTYż+̑;W'̜{:&=vű m}zgq&q.)m/K(]1B7 om"`ON]^k[>tVG?_͂Շl- 7:-A|y*LjfM- G; `V"U[tbtUo.|0&| }~0\Ekn}+5ݪ^$M]|$i7򣮷Cp# ԅz}2 M8me0+[ ~d޹笎dyKCF.\˽Rĺ*6*ľAFm u}Wǃ>|s dxv6Y#8G~n(0-Tp$e؃ msC ?k#=&aa 7SLm~>n@Cu%=$+K@vmXNFDņB[/hpӅVn{`=BXT|(܇aǫ(7g޷[N=i}42:K"_iՁ+ c=HcfmZ+GɒGH$ܘ3Vp[#-Xu|v~vm'?Kyۃtge{} DĐhF0_Fǁ3Yb4 pŹ)ߊ-V$w >f )Ak}!L[`J:H~Mؤ带C?:Ǎ|@ '?g<9Y ~JNWCZh"UI͇P"5.b+XDΡ6,8t ׆sӨ(`e9T 0|[k1S(m&>'SyEؗ6<5H/P-` ]W˕xO7P[uF+y" prlr,?l:nFcR?OY,$t[yLK'8gg2?ɽY& aoeqn;/P{@03J)`u89F-t {L@E?19ƽŗ%VMV .kuy=lb az~ڙni.}o$aٖA۟11i=TYs9_YH~Juc.w}w}"{ ͗Q1閅L? u^-˷21>?TqÊt߂!FWJ%Q;N=IkL, &Hi Dv\mAF:uSڗ͘[! ̑\ֿ /F[3 tx OjD-><1svOu=[T. Lh;UEJqn5*H[tڳwndLAuCVÕ,5a]Vd2Ȍ}>=T/j,}~>e6, mJ]`M [xZqfx{xU䎺^V'ח/Лw\E E)C끊_*r/ 0C𔙢_J_}@P8dbȐf7Y̝񋾟N2 #l*<ёppԆKPIڗX{dZx͘e܃>vR ھwdd^]XMhKZVmދ{ƷXC?(Dz mHS ?@>h2< endstream endobj 70 0 obj << /Type /FontDescriptor /FontName /LZCCIV+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/N/S/U/V/a/b/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/f/five/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/quotedbl/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 69 0 R >> endobj 71 0 obj << /Length1 1166 /Length2 2711 /Length3 0 /Length 3459 /Filter /FlateDecode >> stream xuSy<[e馅leɒe1gyǎYhk -*KY{J$nYBH$yG{뾟w~|NGƀ&d] >MT dd t"" N toAi45L{  i A*@bQd,$ lAAł4-U#2I%=q["p`$@df%V SRYM6c#8}s\@ޓNhP< Sy(@#$g3oS3cIJb7O p_G1(*I_hn`Ãt@v@_a?S<8,Ri,o_m3NO8a,װ~?5֯5LDWU"D4p:Dր'@3!qH.U}} L#ld@ $`I ƺHR KHxr%lXʒ~{X )Mj<[RnWxz_CR/eLJĻvtccOR'c["Gb{# 딹v EQc%0#v_BHrlNh%gD.+H|qj()ᵞV@ڌa1+42hgrGoNȽpzPg)rEҪpg~FYrS*m_F$]iQ@Ӻ?U2 Ɣ:]%-°6_n;챈w9ۺy5DsǓ~FM*%lĂeI~۳gjרy! U ՗&'HfO͹.r)"zD>h ȖkmX- Q/ $`!b2)չ:M&>Ҳ>|wo:NWmz"6c+Q ݖFsE^23=e7tV}^ Ί9!-gv,IDmK^SLf`Q[W'T~tt>&Eת͊\Ep=GH@]I?o?~g첈cm!Sw^#y-J`75䏲HQ3|[ :xF>1`4 ʺmw(} ܽWÚ܎5"0]7T q0OWFK#KwrF䩳_k!/̨Z[Hm}{d &c:bfqq9_ٸB)sFDŽNhEimJ2k:QagQUm;^?Z[{İ-e*Bq.Uc,)oyL. tiz~ HHn–>n8~;5sl N< ڕc9QZ}Kh "~QeD:[?Ttn G{`jMQ!g@D="ot&3-QM:{1$cPMF,bsR7NH.oCǏq:7o{՛]笵J;:5JLrH5窷 fMEqg~SB<AxƦkbx.3Ih rylX,!+|l`%Q J&uY]'U>9Jם>viYFoZE Zr'wof=Sq1^\ڍ\|.W*>qdcم[Ӽ4Ҍ*P6ǎZ K1VT?f+3 f+{3܊8vTc'>Y[uZSGǸmiNĥ/Z%A3)E)8൅SލMoMt 3Uf pJgE{i<5B/Y__aԽ!*(6 q m/;>k=n5pdbScRУ]=p“8oRd5On5:S4TԀPTdxZ:J$duF. Y G9WgN) eW5%YpO" Se,2ig'C{de\m1/mB17*s\-h-*׹q4dM@0=mia]thgqsNKhMz~Zu%aaö/MG.Z٪HR]F Lw(UӜ`OriYS%^pr1/4k28+~t/}J{Wib ^+I  p , 736qFv74h`v6A>0VɌw 4rQo-8`O;<ɾ7+WmYS6\މ M͈Lo3XLF%$4g5?:Fw%9vt =}& p5+{ e i6N-!`ÖtsH(!4DIս8!nW]%r'ͯ-'> endobj 73 0 obj << /Length1 1626 /Length2 9634 /Length3 0 /Length 10477 /Filter /FlateDecode >> stream xڭweT\ۖ.[ ww (\ Ipw#tq^?=^S9ڛ\UY`v0 vf.vJ *FtBR@Hv~~~j3 Rסgdd ?5.`K{dy v+l H)d2 {-@lP]@ g =4X.S#09Q1Av`w`ljy7u*p ëݫ5 fU'' U px:)/kW-l< r@k``- 4uڂ\\^üӝ o՛::zaC\@,(9!-(fE:7_ 33 L U@cG z'GmvU6{!cjx=g?bj9Z7Z [?urז[" Us+kkAζ`{+@/*Z@4=_G)JZ #!ff0srW@Cʿkd q{ ^fcx0Fbj|Q:;?<2GYw0 NLIt8kvK 4y aixn;r#ϰ;ԅgKۙ:'.xF˸jT~}]qNM{ǘQD+3OzJ;G _/qmX PصG4?h;/ws␩M}ȓ &7nPZîK, Ɩ %5L^j]s5픒?DKݕH8}# /Ԋ ޻Cef笪Fa6\W0wdQ@/YnZ@"N/k"` aXB]WqZ_W( )3.ysc=eM>oWb$陁T)2P&O洎vZN㪄 >xhNUGnnkD F5B9OոGe2H4׺ߕf.qW$ JqC>?wfVPJ* vE{RO0ʏ!5tt _swiksq[ TD0e46I^2ִ_~bdcBzɈ/w{ >21&2xϾܞ!d(b᠏x)*i AM\vUt%]j|rQ H =ې/{oڇ\[p'-' 3T;*|~c240B)Uz.J^1=ZA rQKĝ>sT)'lt(B.Yh mʨ+';O=ė~TlmzwKY轒뺷up,?v$L~6d9g֢<шUe.iyՖRW;#E6^ͧ [bä6n*\/zİ/gI<<gvkI1{&W+#>Zv0-<>4. 6ac,4>$$qEA_ʍ1(I(| VlYxrIs=9Mn^D{u4^=ּTKLr"Gƒe,fWn 'dšG~!xCWˬbɯyJ 2?} S1JOTu 9ݑ9hP=+۞F.=C(~M W8DB)h`HLvra*"(/ٌF 6lTiNi ^G2LY.23yNM3j51yZ>s2 o2a{󅏏 /P֧.v͜"u)"Uфhj4W X21̼rsq4BKF3^uKYWqfCSM0-XgƜ0L q ,ZRK$VgπqFqNtOTʫZX0䝒:AE#!!%uPRH~9jS3L1 ])u1M)UI<6mͅ>YeWB]{[pe5NsUhǂ xw$[.Pt60Qx'8/ *IWkw 7}240/>SxgG9[N1`;wK+AE⾱ܭCar|>7e??v}E~rCB}/`e`=p7mp To.1OCs +křV]F;xi|${lGSa}g WT:U}jưg2OxǠG̟LgƄonu3Ee0bY4+8҅uGxIgMO B74NC_hj(~°9]lMs)7> Dr؛c,B/jM ZJ7ɣcxKiܿ~ˤfҹPmQPwtDP"% iԕcDybWIa}4ؕ/\[%+y74zfЧ-fE -nc"}_f^ubH13frO$B>bcLu3JA D%@l;H1'-tiA.f7Ҵxw[AD>`S;BY^%VÅwYtAH1o?1[[+$2K~kNSsrr%3E϶eed>wxG3$%,ٮ~T>`ZK#TDNͿA|oT{*JTen{NαC UA+!}̡5F݊2L-A֖:Nב9*La>ăϷ > .Jiy SK) |}kM{Үw{GG䔫^B~IҚY/tBj9 ߖC>^?s%뺧o ]h-`!wCLV~EÏ>5Q`?5::=v[pb~ I^7fK!h`[EG*Pm ۏ U>Fn()T0kBY[ws1s1!f?JzV:̒Ƚ1HMZJM2Aޒ?Qm~F`czV-{5bHza 5ꮊΩ^B5뻠R30:h0`*n1~@(mbv^D? KXro`BH~*!?%~Sq v-Ӻ֬ФCܶ! SHeaPؗxкmn E귪e}U /̏mGMNq/g:(J4 +!6QOiQ}w#MtR E⠁JW/ј4B.Z?ߑ'{x<=&dZpt+0_&q#o:q2lG}yT~}#/ksn6hzq"> ^舖5ىYk$ ;t/K2w!ףPaq|GuΨg'+>DKMD ty-jcןwUO~b=7.it;~B Wu*_\q^Ӭ2q IQHc܊ΘގSσ_=I;/&d\q5‚;5V(%+Q:-"ӼCbݰX?}g4ݓ">3 #f!@)D9VO_|NI =Mt1_ir&.vN`Au Lqot[2|]yQ~-n ߲MB$2)hX)x"rBT2~BvoX,2"Ey 'Ņ8ΚH54ei[ә X$hu+ۥ0B ~)",M\W,9E tʿ(ɣ\Yu5d{o䤤ޡ@^sg2+M k\1m@T^~Rmln\3Xϩͪm\yLƆeHM]iy?!bBp*b% b) 9#ZdʋLwM}5tƲ,ڲz`q/Uvh^ TRbT6@Y8.fLTFpY9s}~:Gb:wX:JU\!\Q8Ƽgu6!bQ 6c@١2d/SPҖ`^SBJNcUtAY—BB+"\Kib!v}>mt4t)”y]G;j{m*'RA0_ ̛H:N*"ս)1V*w/+ r٢6}H)m2߄|R"v;p&ח| a91+T*f *u`Kz(Fol­|5ir?%i0[JΫ)fwXvh70pw{:t[-!6 lW1WV{qlzsWO!GF%d%6,!%-AV'#KR(͂ *eK6ǽ|5PG fa}?{Ď_]00ujQI﶐kkҟl[v洪Xߐ‚4ʩĂrB{ZYZDw(g-?k]pQ=CerjOIG8b"y1v>гء0D; #aF <<\Y 3[ bnjŠeZ M{`i,m Q$ PdF 뻺z\YSUYGy<hԜO>)ML:lDݝtf\=;%= 46'̞V\L-kT.o/1hmkXYf]%?H6}' (HUs(;+rv8j8z=tƅ,k,#/]H tU;d{cB  - 80P"Z)utlcCd˳-'x(Z{3jYuX!m$zBć/}sȈNmzDH]RiRI" ( w˜n<^#P5db O"ئ14JT Eu-|+;䫳u/ؗ(bP5}4h8h̖{J2 #FG*s):c~' ~V?x&y!U9%X5R6hGEp9DUظbԘMЇВç?ʼn!)AEhvLP9\S1IC1UD2]Te0|[]8XV ߺ~F!ܙ&p u} [} b )H뤞fIJも@"TW~"1z@| =[GX+Bm>քfş,1OL[}{!V":3"8Ezm\I4ul{}UEBW+U;Zb%%T0qn6|H`iD}/ `R[r Ϡv׎XV5Cts lj_(ݞoDоiHm QeBʫ/PXA+{8`*!prF8~$HbSY){ cсf s8u~Vr΋NvW(2';_rJ~MN=⬫U*e|܉tiHj 5`tQ Q"JU7q3V/t|yR&&> 9x- `+?Wq NxvEņVi~Qt/yYߎ_qR|M'Y-fd P?M[JؿKР(~]q.72/qAb14\2.8V5/~ l}+}jЫZY*Zo;j%itIAx&$Gcۙ,/T.^Ŝ#xג-gt޸0:čksɴu91.(Ҿ}iI1=8x'9D;N\`,xG3 ::Vc~ZP^(3&AUaRO/դ A2Tv^MR[|Bupm$xu}9k"\6 J"s 9=ڛX :ة´eaPqPnvMDuǗ2yu^dhl`~OsK]K!1ΉL&nR~)fS3y'szĒr \|5͞n::˩4u[ GW=.aFN , I&p;Pj+`._*'s KHn1MDoj!55hӝJ{mǦwĴo5:͉S#9{~ðfa5V. $"J_+ D!Ȉ?m,_\!Qx#JEKV #S*9r sYZ BgeP 2Նê2&Eb a>ʂ 7&u]qMd uBĶk>CU2?4?PRi1/Sنi#2~!פsd4}ɠȍU)>$S֪-o1+E ]WTbBi5Dx{IccI.="9b/`JC#?z~`[diɌ3NÖ1Br1$F<&J*l<5mJfܶ&L {']n[1AatИJtX*M<3snb endstream endobj 74 0 obj << /Type /FontDescriptor /FontName /OBRSUT+NimbusRomNo9L-Medi /Flags 4 /FontBBox [-168 -341 1000 960] /Ascent 690 /CapHeight 690 /Descent -209 /ItalicAngle 0 /StemV 140 /XHeight 461 /CharSet (/A/E/R/a/c/colon/e/f/four/g/h/i/k/l/m/n/o/one/p/r/s/t/three/two/u/v/x) /FontFile 73 0 R >> endobj 75 0 obj << /Length1 1630 /Length2 15447 /Length3 0 /Length 16292 /Filter /FlateDecode >> stream xڭcp}&vvl۶mswlutlIǶ}?Ϝ9S2s>ҵpߪ$j " ,̼E<௞B`/nj в0[XY,<<-R鱑MIWIE 3Wؐ1`]dj3jVC>%إ$_n(2`!O'KS-eNV= Xx5]PxQg&ʣg#C22^ENH빚2 jc" fZ{Đ_"~pnbd bߍ_F+xRd@^tL T>LP(v7#Vé9 vŠLȦ[\ePSM]s*HrpelO8_RRnF,R)J䊇rogDZioE9~Sլ,\|6?__=γ@i{]0Y7~g}F@?6[Aajۯ7. Oz]`Y?86 :=Fo9@xzײ7@kgv)X$I^+3BI-Ɯ |%ڻW^E7cFӟb&채lZԒL)}!J0]zZ(f29驝$bn31vd<ᅰnH_[K@ }G: hu<1agk%e3dAuM = 3_U_f8ϖr9/t x KHYuvqy6:o>p3C b.[ ;ZÓޣ$=O #jU'Qx) 1qnIчWt^0w6RI YWsꍸRm$^!XK1zfLG8/csZ'Qo ]QXIؗc{>46Px ~s(~D&ARoԘU{wQTxI&,q{[&53 %zf]X8ao!/uY"̳\jaKG퀸(>'KU̸<&hzZ^|@E ;&-E|:xN`uk{&T-=[6 *QW6`֒3m?aGg}Kigc s(#+\^U ~ z= MFøo/2E>P5E:͚#M+_84UR>;'~H~Zs!–29d{d5CiXe/ ԩ~n_l=3GRfuh8m/\ 8v>J}D1PQ&fDVEV =ү Uf&lEARWw xЄd8h XrvaBdRz=MnN]:%)O#eBϣejMFa /OqVţ0lq7%+J=i M#3^CA.9'\0ع (J-(>QYNS.OHR c-݇`|֛]V̐Dk( z S"z6S͗,2s>EBGS^nG2lqmCsjY*ӰBJObp._r&4{rݘ ]XSw#kdٹ۱5)bU KC?l#-]qJͅq-L#?H@At>@_a!F;_"=^Wb!Zg!G;ہ"9η&WyȺ<3h;AWmIDu<ik+|"8DBUJi(tFy ޒ |G~~j-Oщ}#tƹe0CqJckP\-xQ2JHU7xa՟,c-ӢoiJ^ ]$"gGybAoXpF! HLgOyZ'c a "uP]2N:-bWBm‰2Y屲̈́h45yH"gz8cL8$\[Ih&k42(vBp5eڏ PBm (64+H\AeD@HR4[J]-'I~ߎZRѦ2u%jU}тg&ͽLo@I{UXCl\r3th4y&+юPj.\o RE+HU4S#&SM8q*:l] j&iB,7e=Z* 0;9q[& 0%M)+C x$т Ws-,Qْ&("0̴7Ty2hT481B|?KGTni4?nՅoj6N P{_JNAB ks]!d}}'K֋}uqȄ`;/eI:G 8#/P'Debzp B!<8aO'5p,ޠi;YRԱhꉼ{X|/ʈ n*Φkndh }83p0bMr "aPlGk@h}TR5Em^}~'$%DEEAe1U6i|Uk-b`q7[<$<#m6\!*R%WFDg^i*XȯG!+|CU(^Ll7xk1HNEՅ%KTWKv+IQ큱/xک%߳(lp^􌑨w df41 ܵ2X,lQ%Xh5-SZ1~jI83|2àu!^+RrѠZ)!N[P\}oLhıßv!vg5Q 2v 5RN1j.NF豨ؾ~|] 3KV%LَnVQ+1蚞*rw̄9X m=#}8كs4ܾ 5K&I *D{˲$)#?|]h Z|"qCi?x49zY&8B.#  PsRۅ>X8T ^,!ʡ{I7~6=>Ȓ:;$#V<:oⴇt] 0^$<վ$(>QN@Ӈ݀1[] y;=)c'Ydb*T tEhs?7+Et?&jl@FǮ3Gp`E!X*~G> .QANݴ@FyU4πm!DaLhǥoPI|n T<2@ 4=kܲnYGz9.KF%v砚 'ȹ@VC S*+ )s;Ϣ{+A]{ůB$r\"F=Vå ''&hEXeiG#Uۍvx,r/0xI&^:7q$ -FE\}܎140g`c4!e?FyL2(T1XnD=e=]2 ~#S@ m~}4l TlëP.< ;EshT9 &җ#=cגrܫՀxtWzvmH04h+[ߊ~5\BIPbϝTlS *X ~mBz]"r=SY~3f}yH;|Ɖ DI|\Ifٱ(|%7l 㦧.[QJ!+}o渠'^ /Ue$NW (9h4џ a}zsQ"1 8'R-9:YqXn]d|­;sB+^wU OYYtjn;Yd813K HoJ^db@;Op̻IyYEUԞm-ujڬC!1B*ܪsiSƘhQaHzG [-*O6pWc}k3 z0g]ICw[@^;4U>d-Ў+KR|j#%Ι2WFkk<VNa!2<&!_%>`䆍GjWf2^lxʡ* wr3+e] EQX;#zH/=#V!"lQkP @(*!+SbHjH:,-8#OgbuY;~j8+2U$nXp?MgkH -*aQȻ OmNqgV!x7]Ex>NI҂T#[bI'ܭ!A> ƳfN2֍+}˘Az٫zzܥw3ǹ`vSJ Hbq-}lF7Tp݁p\KGs4 y~:;D$4[_N ki Mh5I"^JN q Ãm`$/aʖJ-+ ;(U&HַNuK:"dү;L6truoOYHB]NHL[ap-rf$3n?q `tthF"i¸kR[paLͫ MB (lDP'>0z$xg.9 )x1u1Xr)=p~o2E'xJ/A#`w&Le剄nE/CQUg8Gr:9.b!|<=Q>p!'2V`dxJ>X٭RtZ #`VCt V ,jI^c)rhH\,Q4Z(EԈ\˒RΌԃ{鹇+/ɗ +=\)#aSkF;BjЮߞCIY{6<ڍ2# B'|;ӻ1㚸$d%'g.E:v}*R{s|NyflL0yL B}!mIcNwN~t tHP\~Vh'jb6ڑx*ԡ"RrFI 3=(n? lRl3r0d?r5s_ZAl Rɚ%M*?_o:wT#:,ѱrijM*d`XpO0Kjhc\v>F-voe4ZbPʚJ1X oMIX, ֊)Y!Zj4=-Vc6{֘ |k% -V >30:Zү.|EWU;ԹP])DaYsq6'Uj'=uM͸_Dwjh,48JPEPߢ 5Cy L2h Vݫn&V@Pa=jK%:V{D0<>w_m@ڍtSqENXϸ_7<*9=,o6WYCk2?S* U,T+x ўaQzm39Y3iR E F"ٕ]䋈`CUD4w_Yn)WS#`~RΤ"١5e%@f/ +(q,'!(]Q(֖/j8)|?KuV3ɹs3 k]u8kj{׻zgJD*k2u$ yǘ vŠY|&q9Is6[-bK }4W𫨇"[e!n9/N>z1"?Tu ^Etc ImxŶ64bŻ:ns]SBb:oCRq#3/eޝHFNwr35#Glܮ L/6*N~D {J*_PSbR cahd#KG|^2hen"uh_LCdy۵FJ|0$qnFS.hf'9-z&GO@Յ]1v{mLAvc&{DH{, rIhJD!H=6h ]6w2It+ŗ%<( 2-/[R*BpuZ ⊖ov-5O<}g99 QSJfuftq|F`z}w]+49}.D://-[@9ׇGŒ3yvߞhU3@Ε*Spsȧ FmC͞okOSlEH!$ & ٮ ˧]v@,Db9E:pSkoA\6d }t h>||;bPp[vwGN6C,( 9bwR4"Ft |m.#:SK܃ff=*C*,#w(M^&|tp0.!  >2=Ŀ+qF'u5QaGD IpO&U=tDb4 ,&Wxi˟vW6BX}fF'G@"d:G , ]^Ѡ EPC'?|ե۴<Іm0@zaN0)u/lU>;>7R,8J槽g|?M/Ugw/ p5tq\a!ЯEx\Fd1}b|/(FO-2h_cjtY(9 6;>kKم$ nqvtgE='s ,}Kb~X"6:Vg_:vi-UboU#}^`yeW_srv?#܏sHoZ Y9 uBL3گհx\KGy1 (}#kh7qO"݇o-'!ԝr[ ?Q^Zd:pA 6su^y,KB_O_.xNTx'*)^\sC{=tc*-~ },9f=E3q4,Bg6wx~MP` Mi7GAEŗv*JΆn"8ƅ]DOPs9exc,çsIZ-l]9 RȪ酂Pˬ,kљ!kYk$Xhs'_0[=Lr-]ndD9|5fce)-Wd%s˗֏".ߊ1l˨m}p!iu2bS MS?6Ýbj;G=)Yo>'˱u'Gܢ<BqNZ]D1 4_XCeT2gW?BdSj'n:6(:*]ݸޝAfuCzIyk&su<@p\7= ݽ35QџPݯR_Nz15ÇO 9؀.cp;|,rHUj\:He46ؕ@FܧԑR~O׻ iJ _F.~d32L(mkO\<#vw[ƤUpM~!!L5.mtܩ):A%8r8S1 QV =Ve$΂E spFjtncjtEFC6dC'tht߿Qmધ@W g澮g{fXH04:u<(\&"~>p<A֥rnJߘØ"™zyZ\ d\]%bocyD b03I|1m H h\KY9j s4B+W.Lx݄$&, 0W9#}]Rdr[BQ#Cpn/"^9R-i8Y7uCea[4J>YaOQNP Qs XA;J>Śɣt WjHoe'Ʊ %o.sj8؜v3FLhG.Jpu> 0ڃآ. G [@JL̂%aGqZLOKt0Mץ77+Z"8T_qwsRgwϵ 4~c0swRʐ7{0h\) 3 _9s M)UqH|T j `̢UgM=5G5 AN^_#ifBw>c&%b}+ς%As])=@^3 K=aZСۜ5ƺncFjqK[*K NH9KzSj3_fkϩ_^j?\~oˑ{Ď.>K//aU$ _ØavN'#nVtGohǸS7*Rӥ'h[F г+l ƠA;L* #Ꮃ*f:ƩCav)=p#Cϔtd*Xj#GB׋u!8_Z?$:s_|?<9/.j8% sC? ;C| g#^|1;|'ZĚL^WXdE￙"9)DƑ.ȼӔ4jGfCDNjU%@Vaѫ÷=neNъuK Ge$ВQXFp)ّf| Nʇ]1#@nù6E+$/tG1N,yϏL5y۲7]jNFs-bTVםÒ<=="!F]:k!*0*(|S.wBnLؘIF=iSrUhPgcqH%] Q j#HAQy#<%ϴZNG?ȞT$ dÜB Cκ!V.% h ޓ )a3FKrs>yC4oGۅڃ:U#)RcWUA6|EULO9a%<C{CF擓IɹS,.km>[+n nLc*Ũj<+ s\oqN6:Kk!tocR$fUD;ht(~I.斻Q^5|?\ .lbݭč4)'sZ)S]#?V1E4L>W:_q^Icuȱ#" 5ji#Uf ZY ڙ?ȷU?.&(B% endstream endobj 76 0 obj << /Type /FontDescriptor /FontName /ZETGSS+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/M/N/O/S/T/U/W/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 75 0 R >> endobj 77 0 obj << /Length1 1647 /Length2 10518 /Length3 0 /Length 11368 /Filter /FlateDecode >> stream xڭveTܒ-$K!64N%@ % }wY3o~t>vU]VP3; Ll̬%k{375{%>&5 B:M] `~6 l|||H4+6=,̼EX[Bo?v`8P Zv`PYEWVIAZI ߚPq3A` ` r[՚  Y=A`ǿ F#7`l q}W5dfWov rtvxT\\]@֎*R.o0WKco4o5 t+`nhg2\! 4u6Ѽqu;_7ut;olg׼B,l9s;}A"L v^s[J{"/H"FrS2ۢ1v @ײ3upAWT#M!&6.f]=*֮ +mׄ!7߷ V4A{o6ٶ;M#'ߞ#;#Dl:+:[{YYYodo4_sj 14ܜ{uߏ @!62\s%{:iV:t|+3y ei?t|ޓ?܍gGו>#\mab1*A8Ҏ9S؄fWU3*~#lpF8rġuDcCaU&躀#fȉG0O=Hq2q>!{`ge~]c ܠn0ifv-J|<4mi$ Am4 YVMwNR^`TW,yU|O]D.c\&ob_! L,܇cgqJu Ú|2KZ+I5N<?~rhߡ &| _9+SNs?>^hŞWo#b }$J3feuu?g4JI?*&XE "˴̽&*Ɖ. o"D  ,̏O\M7CU: _s6FzS-4}EJ. OۨM *@O'|o:(I!nkEf)@EX^|D><*O jP_zՉNxfON(.F^ء}=#gطvy7)R'v!0}5hBXEf}a o&-iR[wVxUU)1[ 2"?k*vЛt-a/7"beU:3FeG| LSq zoJ ˃x͸HE(6BG , gQB 4nÞ'ϮuW)JK7bQM֘,YhegtxBބ7ӫ ;\2}K+I<:PA zd UO鸬]v3y. 8s2DZ 5hL]%\j{Cu}ݻN$ Mq 4Z~s$S'> CQ1l pM6sD2Go:ʲ3fP!MRwǃ/ݯh(D YLJ5jʂ]E1lzEkH¡5F!x(%'Yc_ޭ.5접< :2VAXEF])FClt|Xw76M utr0EĻ-Y`E\BuЧ~̻,Ro+l1N $թe1qhsZ4][\Q%"SjzbS2*x> ^0cy"#oH&>ɕ 貟zYLPWtM*zm8%tWKf OMj#I1,pÞg qO;a>w3sLDqXTs.kvxf<IT߯duV//}ÁJ7%NqC P{4cDԾLS+2UE808C ׌Fb!L{spߠRMF8:Z.h[w>pΟ_bSC4^(PLL-o+wyu:+y7}׶ViU6DbS'Ft`/wL6"V6p/~ -gIASÛHSduaQ\nҸ#v,P;髫$Ѻ^pkBWl?OKOigkLbsUz)Π@#t׻Cpbα Iz+/9_mݿgL)z,jm4$c6PF, e~yx.{}vnlG󫞋arW ' Mf!1!I"^n$<aEO0wZ3tyfȄ48;My] +jrt0 Z=1#i)]QgZ.'"C&w ڣLBr \yk lQe۶ʯ&/XVDxV_ihyߙOwzuݠ ,*N(25$3yU#TIUI:ܝZ PDY+Ւ0g/;y^Τǘ?֥h9u&%Y=ʞ1q "] ;r>_nc8)x JN6ܑSV! \\Pch FkOSyKd^7na=gɒ6g2TEZ8كvaDq=qS3V۸($;nTa|bZS5R2^vp`|Ӛ+-L =sw/\6 ]k2_a1[1sG1.qzªqɥ|!2qm } nbe5$ed?_P|TD22x0YuS gF3C8g+ϸDM*YO鑅㇐TOx8dEXiQ6w(1%mwMVf~%:`H*%3ǁ'\5z[yeܝ^Y uNY&jZRYz_}{Xb:΃ȅ$ k@i qv2xab[XqϹ̭XTF%`t,OaK' KK )G}ZG~xWp3qx@L`骼.㕠rsepD Zyt+* _|[11 >*KeZ kM*01fAJv;Zu?Ya`0Ȣz̖fe`J B?m̒1_/7dćcqcO\/x1=4`,up&MMӓݸ4cdve?}1x5*I$})-a_IsM:9MZ*gzXSUbx.Fٌ*<\,@`5pA\B M0g"V ["* (0T%IQh@S`r!oK],=8/RAgO\փvoZ4fona-!( Qq'wˤ]xSG㐮Fd}mбjDؾ݈P4LRQ/?q(T2 +kWj4lM[|]<+U{睡ΐ⋷e)=v!~ ;=kT!k]a^mΊ쑐ewc$* &?4:nLc eFG%V^G-`ea7 D 5(]H-P8Mia4`a0]N=:CM1NH o_vMwuE}ga ´LY1 @HTn#0=Ywp|Rm61&iV3R17d)mMNB$j Dߡ7͗2$Ml1t["n2Lͤ<ZXMlP W| )8Yls{OC4V\?#r0#F`.`m @*ZOurA UHd ٮ?vAvxهo/_ n-pߠ2_ȯk4P WS1ԏ{ONƺMlExՈ8>ukTXr[s3Bou=@NVlJ&S8&~Y~KCYYϾz:Y1(Y|sj3~ﴡPqWI1?"%pDOhӹ͍.'Cta&G?(~yf_=Iݐ;>VE"ޘjtr d]̎Xdenl9}{F0#ZVbP9cteOoVMP+,Q&dtu-/MG_f 8  =I;5nVMў_*\%q=Qn EN.8?~F19ؓ~m~ɖi0Ns#D:vc&גYi4b-W93ORZU)zBQ` {#A VO+(uXJG .gµ<4$ӊx vZ-$JB|2EsA/;_MfxaKq>oӈij3{Bk}rQoXMEjxܟhgfNմ)jyhdX t6)7 ykv)'}C$s6is,I/:~5m\>or*klx-^+*|V_1syifk5_Fd );Kq+I6 6s|SY`3۾>iIZY= k,9Rj8 ^ mKJiIوc|EMw'k ~\ U!Mo?aX"}Iy"NyPMh:2XJ[Ine3ޜ[X3J.qېͨv_洜i,(kS~똗 }#M#Lw 24|F5EpBv&jd!KqV8*=>,ϹX^ Nr2N82C@UA. 4=͍Rdh 1 ^5k6B[>S![9'tRZƜ|`Nƶen 2L&҄h2ƂYI;]3?W!ЧsKPR'<]*q.r#u8!*jc%QW,dޡ}yPi2ON :cw_sNl u;ΜAOqX ⁁7.]lL;\o:)"^DlY u ^r܍(p.1*dXUCfZoV'_R^REK A'A$Be3c ~f%~E\z$m(ի%׀[=Hn-~iN%#w^dZ:K0f3NcE?(iFټhÂs@= z04Gr2COuv#]堋g2›EҒ+!ֱYB6[& VGVl?e !w@U&\Lujr:l"<~SkI^l'_>|\)zFѿ\- @^Bc<4jA\$2Jz),lƥF݃KL8vm1=f.>ֱu2thK~4W W4& < @Ch:ij!:/ Ec||C>pd <&9^N\&^\""\FX.f0^NPD8mOx}!Q5 4$XY aIJ[G8 p'ERDZ pt/:IY5u7`Ďqf`kB#uY_0 p"~/-qӹ2G KysnZpm>r:Ա-.''\To4_IkX;xL_쥪Ԙ6333@Fgp;{9f<3 ȾL˨c]@td4)Og[y-dBj {D`R] ` twA(Az:0*QPjR% rè Xޘe& oanسES,ษ)DO|+A3`9ܸHUtoj+?[vƒ}r6 &_i7J@gGOhSSʒ&%Lrk"~N=NH̚*؍ETC&ouv"VmePiUgki׍QN2;^-a'WIJe#x:9) G\V4x=8L>Qfې`1j.ȭ8+7Vmg،/a[dݑR!$bkVKXgTz1"t$mEv3ѭ6(LZ$)v"ɠ~tW!9e8V1ϪU*h{Q0[ǔLx6, yX&50#T fq9纠`Eq6\;"č/@H hd:){*Y. I_'(dے)] ħ}׌N) Z%#u2|__G*|E[]iv(EaÈZ#(R2)|PhuToI(|+rS@oՠrj^6[חh~#uJl2gcUٱܬ3 dNƄ=yԳ-ϯoI.څg$iV}V͌JH`Yg~V# eӴ>gA%S͏vpF: 'ƞ>ZL\Wom&}Ɯ~*&±2 H 􈟦)oV J1>FD|nL k@RxMCo}7;2TSt}HHT+T׎7!?c:p~8+ )^;xp.C+'>pwjqMPn\ an"dY*V~CL润r8\UzCkrS:(+tX%+v4BEOmDʟ'KM#Ng))hA"62 },d>xvkH*2EpO`"$MBv|QJ֗1/ՃͽWGR$s_+FH3e8123# ߴt|Ȁj߯%=&kF5丒3g2~oq=`1,q8AxP}y5]*xv'_^#5rTɃAM|G HPM?M:3sDkt.Ш;d;VUeF/.S'ʠ;n+m%Dsu {ws3d zI.yc=̘~DϠ$lvwDJج̙9ת> H'gTt(L@oC_*X3^Bx<ܱ#AD ݘ #c^mI4KZSZ!c%^yf&Ort)+xgB{!JGSI-?| !kAL">IǀKt0 6[;ԁvp71 ہt%H92FT]|[q/bUhIj8ZPGUes5NlO:B'Q?t?όv[uKڱ)#sP/|-@3xmU_4p*]aVqyE];'LQzp#8q&pj! 6<n>T @PQt51 wjxO~ (U8BtEecT <^Pvu\ˬEl5b98 8͹|1'ȟP$?54ɸdbȒ^) r fBqq`(q~ )-Dc=  qHj] ̓F߉F|2 ;jKjE* c͸Ͼ4B P/pdW%lkmIЩ=Ͽ#U͸Txgc_E5\}IOY g7JL V `_#R|oKX(j'rH Iq֝wK,Yy>[EV )pڊ܁$A@}6輺W 1\Y(e2"aϑi|%FSJd/Ek=غof(%ID4;m%9 f?X)BbU;*XN$ Pmؙ$uxR 9@ kmY9ދ%:& s,,\~"3V~gf{UoC&MCˣ%coo~j`h:RNaw},N1 ;҄E}w?yte%#(t\!DIjJU:mdg85!rxsn}m\˰?zH f$+Rpx}pOu- ǘ>wH7}q14U_/EˮT ~\j'NZJI'~*VBb,5Yb(%|X> endobj 43 0 obj << /Type /Encoding /Differences [2/fi 34/quotedbl/numbersign/dollar 39/quoteright/parenleft/parenright 43/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon 61/equal 65/A/B/C/D/E/F/G/H/I/J/K 77/M/N/O 82/R/S/T/U/V/W 91/bracketleft 93/bracketright 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z] >> endobj 15 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XOYXDU+CMEX10 /FontDescriptor 56 0 R /FirstChar 106 /LastChar 107 /Widths 47 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BXXGIJ+CMMI12 /FontDescriptor 58 0 R /FirstChar 58 /LastChar 113 /Widths 53 0 R >> endobj 17 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LBNLZQ+CMMI8 /FontDescriptor 60 0 R /FirstChar 101 /LastChar 116 /Widths 45 0 R >> endobj 14 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QZVWJJ+CMR12 /FontDescriptor 62 0 R /FirstChar 43 /LastChar 111 /Widths 48 0 R >> endobj 16 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FBOOUR+CMR8 /FontDescriptor 64 0 R /FirstChar 43 /LastChar 120 /Widths 46 0 R >> endobj 22 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZCQATX+CMSY10 /FontDescriptor 66 0 R /FirstChar 1 /LastChar 106 /Widths 42 0 R >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SEUZGS+NimbusMonL-Bold /FontDescriptor 68 0 R /FirstChar 97 /LastChar 120 /Widths 49 0 R /Encoding 43 0 R >> endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LZCCIV+NimbusMonL-Regu /FontDescriptor 70 0 R /FirstChar 34 /LastChar 122 /Widths 51 0 R /Encoding 43 0 R >> endobj 18 0 obj << /Type /Font /Subtype /Type1 /BaseFont /IKBLDR+NimbusSanL-Regu /FontDescriptor 72 0 R /FirstChar 99 /LastChar 117 /Widths 44 0 R /Encoding 43 0 R >> endobj 8 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OBRSUT+NimbusRomNo9L-Medi /FontDescriptor 74 0 R /FirstChar 49 /LastChar 120 /Widths 50 0 R /Encoding 43 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZETGSS+NimbusRomNo9L-Regu /FontDescriptor 76 0 R /FirstChar 2 /LastChar 122 /Widths 54 0 R /Encoding 43 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RXIZWC+NimbusRomNo9L-ReguItal /FontDescriptor 78 0 R /FirstChar 2 /LastChar 122 /Widths 52 0 R /Encoding 43 0 R >> endobj 10 0 obj << /Type /Pages /Count 6 /Parent 79 0 R /Kids [2 0 R 12 0 R 20 0 R 24 0 R 27 0 R 30 0 R] >> endobj 35 0 obj << /Type /Pages /Count 3 /Parent 79 0 R /Kids [33 0 R 37 0 R 40 0 R] >> endobj 79 0 obj << /Type /Pages /Count 9 /Kids [10 0 R 35 0 R] >> endobj 80 0 obj << /Type /Catalog /Pages 79 0 R >> endobj 81 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20120806142609+02'00') /ModDate (D:20120806142609+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 82 0000000000 65535 f 0000002561 00000 n 0000002449 00000 n 0000000015 00000 n 0000146944 00000 n 0000145576 00000 n 0000147112 00000 n 0000146442 00000 n 0000146775 00000 n 0000146276 00000 n 0000147284 00000 n 0000005753 00000 n 0000005638 00000 n 0000002684 00000 n 0000145857 00000 n 0000145434 00000 n 0000145997 00000 n 0000145716 00000 n 0000146608 00000 n 0000008716 00000 n 0000008601 00000 n 0000005914 00000 n 0000146136 00000 n 0000011547 00000 n 0000011432 00000 n 0000008888 00000 n 0000013928 00000 n 0000013813 00000 n 0000011695 00000 n 0000016132 00000 n 0000016017 00000 n 0000014053 00000 n 0000017576 00000 n 0000017461 00000 n 0000016282 00000 n 0000147392 00000 n 0000019226 00000 n 0000019111 00000 n 0000017703 00000 n 0000021554 00000 n 0000021439 00000 n 0000019317 00000 n 0000021656 00000 n 0000145077 00000 n 0000022269 00000 n 0000022363 00000 n 0000022477 00000 n 0000022962 00000 n 0000022992 00000 n 0000023371 00000 n 0000023485 00000 n 0000023792 00000 n 0000024166 00000 n 0000024640 00000 n 0000024978 00000 n 0000025452 00000 n 0000032471 00000 n 0000032712 00000 n 0000041847 00000 n 0000042091 00000 n 0000050197 00000 n 0000050426 00000 n 0000059239 00000 n 0000059518 00000 n 0000068904 00000 n 0000069167 00000 n 0000076816 00000 n 0000077084 00000 n 0000086067 00000 n 0000086330 00000 n 0000101249 00000 n 0000101710 00000 n 0000105288 00000 n 0000105526 00000 n 0000116122 00000 n 0000116421 00000 n 0000132833 00000 n 0000133279 00000 n 0000144767 00000 n 0000147480 00000 n 0000147546 00000 n 0000147597 00000 n trailer << /Size 82 /Root 80 0 R /Info 81 0 R /ID [ ] >> startxref 147863 %%EOF genometools-1.5.1/www/genometools.org/htdocs/documents/uniquesub.pdf000066400000000000000000003142641211610345200260230ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 2179 /Filter /FlateDecode >> stream xYKQ`< b]:WsFF%R)N~h9ll*@w߼)jq[0 3r$=.>,/MK]nWo;dcDrAqZ05Wty:wg{ɮ=`Onź/PduS/a#1HgZmD[h=ՂI"dȜ7I b?6+ akIL#nKyvn`v}zY lUa/ǽ4o+չoxN+/AX A zt=)?30LIf PYUIZ3Jf_ 78!2%¸&dí?F(J2HInI8\DPj"&&JҺ HCű;:Z]@J(Rz`aܸDSFun.GJ(i$1 h)x߯AC7.%)²QU EOZsF.j$Nn awaXP;p#gS~Ce&lFQ{ƙ@ rvuȧ; cp5)*8x+Fdn|)sDPFhW xcXd%lig[Comߞp s#,j5afz nKG߻Q`=><*4(ikV>rS#W ųml('.ϯ+af[9m8_5{ w')Rlfq2$ 8U4w釷hɹpy[05:<6Y%ڮN܁1^9vB)2=nŲ9&%l Dëpg(ʂ"oJ?QNJQ4ݦ=/'\̿(5:7Es$q顧PDG|č$x" _.\NRI˜ Wd22##Uh4 &1DfOB ⵑeQwH7:2QgQUaܻs$;Gyp<,u.7]ahP3GB?dӏJI>O\͐>R$w{H!zH!'&wYXR:PPY)f#ݻ&'9Tl;@I4SgiR1(iEg\CA)%e#g+&__.rĴ9C>:&[7{T\wA}u|0>d TI-I_/zPs,z PDЂGgZ_-r eZTac~̪p=?(2*{$dz~W^R 9new|]Ξr'ٓ+Ș]15< @,L#d-rOɣTuNE⨙8$2WTKFdc{L xVHb? L1I;pv}.ȒPT埭kq ;^|oaufsmG˙M5`QU6G'>TY $ip\@;O_ Dű[m:<]^VdwLl6.Xlm9ƮZ91_Êm=?Wcbqy+MLb3s6&2ʰck=Z б]`v(sV=Z2LaAȶPf9ݠmaM'bО|w r{!м}}K|{ a1J0 u=;s$8.FXd03/V:Y^Yaqqy÷yŌ-w?tɵҳJ"Ytƣ I1,68}f3FEZ]$ۯ}I/68uuXYoj(a{O?E186P=Z?vv)}&K/A~8~ rSF^ Z P od|> _<馺BҒ} Y_o7P endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 595.276 841.89] /Parent 13 0 R >> endobj 1 0 obj << /Font << /F43 4 0 R /F44 5 0 R /F45 6 0 R /F47 7 0 R /F48 8 0 R /F34 9 0 R /F40 10 0 R /F15 11 0 R /F37 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 16 0 obj << /Length 2120 /Filter /FlateDecode >> stream xYYo~ׯǥi9dvy2n/w/}V:'%+剶.ivmFeP'\Ed԰=|tVf`3 qCsxHBX:Ukj!d$/Cp/=f2ɠ0Ya)48!K) oIʃMФ}4lj!fJoTZKY43zrŖv+z v#hm8Zl(U,QGn1} "CIz_EDb:"F*Y# KDDbBDQE匈 "J3 $~$+$V}W ;.?gHiԔ߼fnZzZQ #bH0Z&!bL ) w4۴uҺgG 78CK˴ڜZ2\[ݵ6$2S`X?^cu jI m[{“?۬|B!pP}# JC>BDxl7l 82 y#NK '5 4zsݛ]uΖ} wśpY$海cqW#F/&s7QS}Ys"5GnTvpF1604Rp t4OiQ[8^#5!dKffxkę*,͜ 64U#Q`ϾAa}RUЦufKDqܯ:ҏ%E2=+#4?)MO5++̱ W aq~!`x4Aw-=8jnp{j3yީ0%3:z+9NesHYN 320m\j;[ܘ]%8=R*+OTǺlYMFXa Y$52&qmȉ=!'(/>e Mp?DZ0nfn.N_JR0`\#0Dt0tG$/ғ<*bTw n1³?6L@`%nD?vH3ҼF_Ͷ;|Wyyo0 T|xP -kٛ[."0= R,\ (O) /9,+1}4sC?H>=ЉAE4+9.DANG[i\Ѓᦿ̒SީOxNOKx*< :3r/V16&LzJx~4GԶ?x#+7e1hѼ6Ӧt.t%K}Ǚagw:}rT.v"q _5`>wA/vrO(.jƉ XWuC5'2ZJi!|i-ӌ1 : 8ǎvOM( endstream endobj 15 0 obj << /Type /Page /Contents 16 0 R /Resources 14 0 R /MediaBox [0 0 595.276 841.89] /Parent 13 0 R >> endobj 14 0 obj << /Font << /F44 5 0 R /F43 4 0 R /F34 9 0 R /F40 10 0 R /F15 11 0 R /F37 12 0 R /F47 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 19 0 obj << /Length 1261 /Filter /FlateDecode >> stream xڭWKs6WHX0 ғS@K1 |Q~}H2ZkZ>n}un!$-br.>'K"ZIhm/7lBRD_ YV449 D=bD^FBrSdJdd6flRн,>6#)R|:lne@D} W"ɂu#[oԇrIE"ceeXkgSys /s ;`,J𐍰YYٽuYwKn+cVC6)Ġrʠ<ג=Y qV$"<1o~S!q8_TJG7!s+&9 %H*ܓiSy&ó{:ަcBA"4P I% PTuSفZU{HU)pSMYǢM_wrBc6n3xS.쪲; IӋo5^;уe Dq诞#[ ,SkR'vv ;!{_5" oa-", 8 ce|*uޫqWOvK 28=gH`6eUyRV3(e]msl9UnPV+BL4!}R,_X1=wo xR-V|)#ʑKmu AU(|mi͡ 7L]A'vtki&7l,{A( o6MBͼ(BJXz \5:>سS0|8yDX!_\" ,'b!t5:v~rV@>^O~&_o{n#~g+pb)E?FǦu 0 KBH=vc^<*4@)4M#M)^q dmPү^en޸tc%@GUeO_p-!M_pӄ`Ow7G̍=YR̯l\(2 ^s>:f~}7[ endstream endobj 18 0 obj << /Type /Page /Contents 19 0 R /Resources 17 0 R /MediaBox [0 0 595.276 841.89] /Parent 13 0 R >> endobj 17 0 obj << /Font << /F44 5 0 R /F34 9 0 R /F43 4 0 R /F15 11 0 R /F37 12 0 R /F40 10 0 R /F47 7 0 R /F45 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 20 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8] endobj 21 0 obj [380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272] endobj 22 0 obj [300 300 450 250 800 550 500 500 450 412.5 400 325 525] endobj 23 0 obj [272 272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1 441.3 461.2] endobj 25 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 26 0 obj [500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500] endobj 27 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 28 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000 333 980 389 333 722 0 0 722 0 333 500 500 500 500 200 500 333] endobj 29 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 30 0 obj << /Length1 1518 /Length2 8197 /Length3 0 /Length 9216 /Filter /FlateDecode >> stream xڍT6 (HIPJwH Hw 0303t7tww JtH "ݍҼ_߷Y7g}s36,"9yx|~.>\ffY G@`P@ O %g{/?WHWX#ȁ\ VU. F2[>,,^QQa?i0b TAH[ {6FW  [$QՕ m$Y9-@ ]Vߔj Ըp:_m5K0q U`_`/rg.IYZAPw` UnHjGA. = &to~K8B@s]P+YD>ww szcYCVֿiX9;rB!N`E1.lH 0Yr@'}Xp= 0 w{{g-\^^ @~[eqˏ¬`P{ߔ<9y|<^>!aǫ}:WTZa4XVo4oXxOWO$lo'9@F y?/TD UDDjs/tN^.< lAZ%q= ր! ,Ϟq߳B " >j =|BrǽĽ%^+0} 7hAQ`;~xxyܐBnf? Y6 )(vo8?5:3~Ocy^`7%R<Ȯ6ZʕsmX ܀s8  7>\*?+ofIMݾI\ z*,mK*wfGu "l hF' f6^.-nU]qrtMb WY)/_EZ[2,\)E/cݝQȪڻI@$[DIV:Ӊyg^Bk ޞR )m ߦ_RBh:5NneNX룶Dʚbpɉ qRx'-eQ"ڣsF6d2Άes:JtʶKƬUB`"MA!ŒχDtu<ܶkWvZ$  `/z-u!]=I|yr4Uwvy$W}v"k[=W<)Zd4@Df!0*Eհ R]@*5K!È@ZܣYˁ-lZyіO *Ѱ1$.Z/Q<@\yx;Ha,mMl\׎aJ2e?$ ,H1>eKb،ۼ~&RxgH1I]左5z.d񠃺w?sȸhQ2}u'∎duNw!qdr{؃qkG(!bmƪBɐW2to[[o5֓*R7Am6- v-`Q7:V {:ޱf,%÷$]d k7=6kS+fɘ7xݜe[֤QP.%׆-K'YcJp27hSpuZ^`;:TJ-ICvmo%hnea"ޗu:qi6&慠jB__MQ6O$ӫg/%?~*ɤ zj^i?Ace,).70VՊ+8R|tr)t5W1g"c-,\H2j4i j꧖XID'R);pLp`SBt{ :޾jeX>w|x\v!,=#^t'G_`tV̮D#(#z$BfCu'YV7w_dE9T-GWSRD)%?O ab.{"qcxR{r:gίB H14eh8sҥ]ՙZ3}q Y|К[qv=Ar> Laڍ#~d9oWF/.nݜL$4pEn?6# zš԰ZYHפGMT ?\ 9V;>!dP12 SL1˙<澣I}ɖ>օ*;qK0+Z\ޑIoIN>'7AX^__ _ܵ%5@Gi[{2r߭Y7](M(:gi*f#su D ;{K^B?z3ܒ U^ _=X<5ʍ|eOv'1Xus[2_/B&WK&Dgb[L_8 &Ob5_Ktw{ KW,,șEL+oe̔#OSwL_6rݦNԵZϽi_ {';K<n1sukzŞ=TI.ءy|gV̆^`]*p~JYe)ue@ qKy0cSnzl!_:B.)j-ݺOM<6z[LL_,-VGd$Ջ*v**Tdz^D ^{cT+=(zA:v6F@mX= *9J`pm<|/5C55@T<_~r:&uc[Z46u|߼l){;.J(A֣w]V~vpͼ͝]CpTZ*aTKvUHM?Xgk+\y hO_ ;ވSnK5tvXVIh7"?:0Sϒ!M;b4 9vQ>[;bZݻtӷ ԺB -d=rղ}棵^l5w 6vl(flfWFrA"P|_݂`!2{C, NsB+8޾5].w/~b &zfk[qu_xD)B(6$XTR YS_J") ꠄ8r I}% ZgHՓ7ޛD6٣ؼ~v]Eo"ir/ Ez "* 5T\ 2 f[rn77|cRV$ZPTUU͗!!f/e QߴYᖢ_jyғ-/ *øBhEV$r]brk)^n^]dFΌ>Fr 2",3>O(E?JĻm;8ty~|1U=yW!kcp. ?^ĨMpx]sZxUPewX&JbDx6`KqK?U y!oXZMvHUv%T;£K66LګIrR'PRšXz;A[oU8./`l}$ӲBĩa{h-b۳I9ǩ $ / FzL%ߊZJEpGFC Rڡ/8vRAR^[NlD%1edW-ƢP=Z07dֱ'NN.5mqԫ>hlfcesZ~G)xL$5o6LڊC?-tE&h &oEZG)^$8~eM^gYqgX+L?Auro[Տ0 Lhk$ #BmZ0)50ay ua!rlUNEײ5k/6VF^SARe C fgAhd7nͭ޲oѼwyސ}yw/p7KSɞN=#ec̦;&L@'on)D`^G'⽑[ ({8zalE;3XΈx Hu*raO)M}aߝQ|#$D5Xֱ,rΠlc{8`.WD}vS,E<+&/<ل _eiPq׋!TOߤhx`jU:`p,4+zK1;neᒪTv9ejFqQ`tz [S2)Q4 Xb-A^j߂ q$5x|y?ۨ`d]I_d2ɲ: M>RZUD[äDx0l$Ek1k{^>yޖBq`nT WE&oesrG1rm]rYyd_kJ {gHᬍ!)/Y9FrzsQPp]IlEv,G58q,NJgk"_骱O7dt_(G r?@d%j*aܤ*yupG?#Ze2qѵ1Őy1wd@qOml 5'4"H&aV?+lQ7tphȄ%n|mxd6}yC~gT@;-#٥DOOze["$$Tl_8q.=|k$9;#%x!z|i#,\TJIl6m9š=XR4u&۔،,?Bನ5@AtJ #k7SkJ'Y-l=㘄Kls'9Op< wTI=29" XA{,Ĝ%GXeXc16>*9Bt -7P~3OL|h SˈDQU,eˮ"wy]W%)qEEPeY#i *|^A6n'W܇A:Ba._kfA'%ru KCWw'Xnjihz"[^令>( i~bV&O]tc7С{t偋`NafEi~og8XսLsV%3[rs8g/+˗ؽ֯Qܗ+uQ,W%JAyW/J6g\;>O47$w`0HzHO|=ܗuj5q =7RǠ /Mr)n\ pu"'>3#_:w|s<']ne遻t>sOҢ454RJd,%Ad&D_l T4dȌXXK>?]䑮)4P"y@fq|.N Z^zP:1U`>oa(f3]Qmb(._>JP'[r73^~ճRX"X>Jo6fV0.3r4)Pg(?+" AE1DDQɎ(&LQye~"|߯/`Dt>yl,Ԟ)K(~Ӕ*O88mz@%pH%+I\WS=K׿BN@%Fa{YeNlgdg5jKv>ӸH2³ o X_}~]8B*ѡe6C/QL*I "^)1X2ycXGg.3In0]ny$@fșl:= w_C^ùsèA!\#?*aɶ-4.#c'B8m~t1эG]RUfEdn B endstream endobj 31 0 obj << /Type /FontDescriptor /FontName /HCBQIZ+CMMI12 /Flags 4 /FontBBox [-31 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/comma/i/lscript/m/n/period/s) /FontFile 30 0 R >> endobj 32 0 obj << /Length1 1566 /Length2 7200 /Length3 0 /Length 8235 /Filter /FlateDecode >> stream xڍTT컧 0Tdlcc().i>BB$TSs9Sy~ej.A:Bu(Pid&.%E@ R^^ &嵂=aHsDCA+L 3B"^p$@\FA\VH9" -7 0 POR^M$ sv\/@,+E q_Us$+ R{"*7>0 E{C! wof o+CW^ *07Άn @\TtFLC Hw C8`p(DP '* AWnI00Ob?\uYDCOҟӂ૶C@~x,0/֟.W?3RLoዂ2( h zC 0h/h7D*.# ' u}>'J^$kjhZ fMCHJD$rrYi Y_)݀$G8!)\/Bύ1JP?ʿgKy!/8YA0WJ\mj7j FP?v#B!0 巄Uz8 5Ez~5q ?lWvzOҗY]WU<%#~pք2ŨzEAk6j :B ˃"h11DÝi6{ [B_uHC/{bQe37X|hcRpڧc?ӳc!Rd2=41\̾C}.bnUh@Ybt}NFg{$/!ZEqOsDu{XO?L1:\Pjt%[I\m:'^=یˮ ˔oyXG|2(0{Fڌ_P]Q*dNf߁~`φowgRm˾{z;1[ צwZ00k^~:yY}YB:V ;3Ov[i% gkMeDE`aq/ U Ew}wXPz ^9{YζrU.xt& )>)A-ŚזӬe?e?y~dLAjXb.^幀іO/KC頕I,B[y9m->Mx)w[ߖr*H?`<4HQ4RI4oZ/[d8]# +qST`D::}^ 5Y)2KORʸ_O&]Q/&Wޣw#kUHhq(7>j(KkC͢?`㿯HC?wvS3?Ω ' oWkX^.մ]<#o 1EL֞(ɵW)艥5I1I &Yl`x{S=`T]X\8>݋X:*9؜-_!]"zOPw^<qk[hjF&1k^UVr>dbwa$(k˕#.3yYZ N!g9qvSL.FN>NM%30 I5'ԗRk?) zS@ dԿ@iQ(wҶ ܚ&Nd#>So;ީr[24RΗkIeX>|&dA(PI٬mvu.IOBzwE#6eڞqe{ g*QsTnwF񵰥 `+?!2(;#4KϗoJdQT'ְCjQT2(Mr(<\]d| {`3tب.>>ڠN5_`9RRlbƗ_Y3o-\ߪ )7q7P̪kW/ΛJb#w4OU*@wCNm̰=\!\fdB:7+ tn=ɎzNo}9J:cI(h)oC,SgZ6Zs_pxAB ONBusSHӤ* AwCqL?ܙoh Z^A( 2&Np9gyoc/{62ƒA-<"l@}dT&0;6RN]u>hq,2Ar*SUmTB ȃ0^'~?Kq uJ2b^z(O ԶAO"v pULI#h4/6ӱˈ5noxZ*Pz/͈.2ӂB7JnTJhJϏLC.#B}q@T/]_Bz3eRmNx1#VsʯAO4bYyk/&ߛ-6{^jTr6v\5s z;4Idm nR6KU]1=Cr bqOt 扉pdbX2(„ j9'!(GUw"x߈w1FǤIYz9*:'^1Tw"brEMFZ{6xp!Ȫ+uO[//DLL9sJO>)+[+00CPUaDc@]goy^gnd<6Ňf-<!KHGN#9OJG|y\UzVF]>@Mw= kiOqXaѲd3C}F>۴ 0-h٧A엸25XՐ%Ἃt;L)¨#1ٲd*N~c qpdOM*rDSX<=vtDR{9D;zu✎>E',Jc&tmm1Xvf۔`3/h wuqb?*W?nZ yh6_%[AN%nE5FE+U+Z&(=n2 p;zmr$팂ӹ%1!.;һGl0Mݍۼ~ʽ<8^JM 2fFxz&^(jw_ۏ#z:xd[]ٷɄiqNbI$8Yv@?H$VID0K*&F>pK3WX`޺ddxn 1j5ڙ~i #;aqԌ2>g8U? X~ 6. e/NJ>ܖi;<&jP\-ԍrE׽ju 1s{w (kD'}~h$ҕ?X7xS-3]'sVL9&ӑ I3Cj}@NOÂKs%UDͨ4(qC &-< 幨J6D#E7WĦwъҪóT*s^,$9G#S fFU* ȶ_7ZrZ* y@<X9oc&=-S)nD5( M<Ԫ9,Ju0@)"%33s߃vR"3 o?Etҫ ~fhCdAfnZQ갃.pΉƒ0g%U 6Y8k{d Ǒ3GyJU=a8詸Xs՝ m3z=GjݜK5ЅGRP[lӄ㗄dQM dk(!j/]Tm#P_E>Hw?xkQM`곲.c#3 ͺv y;-(/Zˈ%:"8dX9PK})N`RQ /jH'q=#(E%-clgE2a $ަt2R:>2=jY_e;(UɋXi lT?TzIc !ꬸoL#C}l#JU06eclƱ# 3C\Q'*ғEn3LG KQ+eX$Mx]G$/8Dĥ ~eNx-h2 ҍ)J=\Uޫp= R >G3uݻjX)dծ5Hఖq݉\2D/GZ ,~  anj/BgwjUo)'.h7rn[] JKqI-֘!'\my/'7PAyBlM!s"aꈃuGCWW!5IVlࠆu^XLxS`jٳ4zb2< /93u]U].f`m(Hۻћajjh3jTm;hRb/I(Lvvud?Q.bfThc>`[Nt#K5܍ !u:tPjΖټ}{h-_OM-d{x_;";c}!Ƣ1fM.}Y]sI:Wshw}CTZI࠾" x~tSԈ7) G{#&W+_|03)XyBO:(Z2c3ՠx=4zis2zT$P~bIOUAU)zs/sAS>[ދE7Bד՗~eq%q/^WUͶ ; ,6'$"4\s #o:k[+xÇ#QX&<_TOt3BF{B!ˎ}V]ʘֱA㥯^T7qYIj< ~ǎK붫:o o/vK![M'#^зCD~!(bY~H=v'LjHF so_GEmJ>xn˘)'J\)kb"]HTEbB#As}T;"n\ Hw |^:67&vNGsQv].0o<6uN@m-Wlh3f*N'[,Q?a 9#+oq#o͉89;~ l10ƱbxG7E/ƨ'%W$APٝzHe"%/b^滻y{+ITh j֚uY ʵ1MZYw^Xn%Z̝ږj}K^ N2̪=T(VOPs3}$oї\]qߞʱ!d]-aC'YJ6zO"</ ; endstream endobj 33 0 obj << /Type /FontDescriptor /FontName /NCBBPW+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/bracketleft/bracketright/equal/one/parenleft/parenright/plus/three/two/zero) /FontFile 32 0 R >> endobj 34 0 obj << /Length1 1530 /Length2 6681 /Length3 0 /Length 7707 /Filter /FlateDecode >> stream xڍxT[.E^H{ Azޛ H/һR7R?z0?W+Y8bF~x7p6{[Hl77 ϓRavp?-U7U5S?FYY7_-*  ]oTgw+ ]ev3h‘z#s |.7H mgm\ P? =Ѐ#'T#_xUaR|y!o6rKK7 _ /r@Ȼٲ&0rWA~A!Rȕ 9v` Yc|@!//@FryPQ:nc@E.?솼|Jy!S U{A8spxӛZj/ck]щ&Q~XJOe)F2#9ƽ+#P7eO s&37$X] .r1=J.ҩq2y]M&2=U &nPC/e;b)lg 8-T $UeI$MUmvGa+OKd,v`YE^9S8О4()@hG=\pN"gj+G;/EKr#Wm,sph~/:kNc^Zvi,Tr{:.;"M*2镬6uhIX[MicϷWJcn81-tpqgA~R"C!D<ۊ=!/a&P7?]KITZta1P@h^_}%SXL !>q9*ї!-i"Ag˓'u6|ǰLu;ǶT2u.dUE+AҺDѫF2e= Kxrm$e϶dTz:\a]挕ߛҲɧt0RHydU5^rg,SAyz+\'<IJ6{Atf@ZzNIdh{X^Pxf{?~nяd]Wgg{~DϟleemȦx;o*w泺Qk5z浴N$F%5rZcg- J9@rG(׊6\*3,|ahfK ?vg!L,N-Di [,aax76,ٳ?W/N֯w1']{XEf J-z–7&:ç.ˉ-x1Ǹg9dCݔl]aC˛ 3f*4CP82;ίkl}2\ )϶8ߕE=:E@S2 <{J1uFEhG :%R_ ]v/7M\u!'kTNq8QNYT*I12WvDŽFuw[:?u+ r:v#9Hx5U_:8Yd*&G]Cic9p4Fco뱀 1oYs'&/zeCEvR+uƤl&}ΚF&oԧ9/b-NX/0Qeo]Qb .)u>V OIXYbQ>]_B#(ÛEdy ZB8ڵ28;bQ[aSxQI(+?Ϣ@QH .O(/Br^Rc.K0M~ a.7TJA>=.sώ m4tX|Z: 7Ltem[=Q_Qr}gmIpZ Yp# bo6\cW|so@տ蘢 _6isO&M:0܇|W 2",*$n:0LFq`8||4VW<3Rц?RZQYn5֌8Lh^4X[׎`Gت:=Xih2M8'i;0>LCo~Za٨ }ăYTެe5|Ճ/{1'/>0|%Y5ៃa؁ASilA-^]lѯt[S8ph9\ejI;U  |M^Ә@CȳǫXFM=:,LG殷Š0xq(^\\OU# ҵuwV'2Ӂ:{ݲtϘND $p[H*w_yaX \+;t?~!s(SVp雉Sb"'^kS|_u5ן/tفAҭ,i坧'܎ƺq݁ޗJLwa<FS?Nt)ej벓B$(3ߣic^\|jdQq[y%i% uXzJot8m({B3l\M.O E]PKu:mh(5|YȔG/{dv&`,Z+($y~GքMqQcyИs|# # ,Zy/Akʢ(:B2pqsE,"&RG*D33R}Kv9ttӑ/.2\:5/StmHy]5Oyڥ8%nu;+C ; uW+d;3t "<:Ap++S {SXS^lr~J ֚+Gl5K~Ԅ :t@5sJΪY_־!ht^1`z#AB)d>WjNZNh!PA?K3̡LKW'.gj=c͵&_; NH;Rbܐ3OoseGf͵&*dekS@C > 'KSgM&uSz/}m$2+/ g)~3flW6 K+.!v Xp'B_;%ٖVkxrD֖/q]yЯ+tPd* %bهteSC*)S,VUfEH̋ŋ%mg f-*VQAr'dw?IOg7qd{ k)м,hCپ *,"ps}!\⻘8 '}b8a&8F,}Rcuq|(σfwC סS1ni $}$j"86mкYu"e MW%ig/hԃQB SX %_q5KgSqt{?>ꥥxv\{V/խΛ(dS D=3d8꾷z WX`Z x8 $:)4)"*n~{M+Soz|gp_ ~~൒Æf(SBdF,mBcw }L klN5׉Bףq~Q#p$(|W'uͺ'3Omc߲uU/'8 7|c['I]Glf=SrD/-)! կJ̲\02[|*|y!pt'"s3WھcK) T,bjKN(I R1 ANr.fş*%~8wװ9-!% ybPf^sYDn>/@)k8͎TSADs ;.Vį4֥o$僁yvTMP#0M/n{Y Y }/}NՌ9Rdc^Ď/jǟZ$h|} PkGcj^S߿˷Zdzf-JWY'nphELIJ}'SWc脇Zܺ(JՂr-"f$=;SGgI #YupC+s'.-?F+$.rL$2g3teå%0|$O$$HoߵB /䉏p9;C<×4lnN}s1mKVaRe8ގWS)gZk~4x=>uLѻia؞\e̚+cُvu+smƔ}) F]n1^.`oT' ^q-ֺRaԵ~cV0ߩHIIB񌙇X\ &lzLakl?M$A'f'V ~*2Xj⋚HЭc2TTc-ߟm<3'Pj Dž }ᇩ&Y WOda*k1iRף1Yx6< r7J@0(v%*`gOtAI稚RYswmˇ'߲M[{&>.[^(gR^ŴƭD$-*w"੟W+֒um!sMJ^Ťص)v@8LOTu/~2ެٱ;6j۽:UN|qj@I&.xl؅IjBӇnc&75KXw.|d4З:h^;XB=pNUhpn2 endstream endobj 35 0 obj << /Type /FontDescriptor /FontName /LZRGRV+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet (/bar/bullet/element/greaterequal/lessequal/minus/perpendicular) /FontFile 34 0 R >> endobj 36 0 obj << /Length1 1459 /Length2 6955 /Length3 0 /Length 7943 /Filter /FlateDecode >> stream xڍTk6 HII#= 1t4CKHI330C#]! !! 4HKwJ{Z߷fg}뾯}?kipX,0+/7P @ 3.b-\>y W$P9xBbb@ -!un F0[;WdlV^QQa'0be[ځ,:0+_%$\]xx<<<-0;'j#pw5e5nfW@faG@Ap;@tC/7UlaesrzA# ZZ8"`| w %{E $?Vp+qőW6+@`NN`+!pr߽x۲@m~ѰvsуB\ ? - ED`ʎW]/g /73`؀?8> w0-^^5` @qtmxH>y2A*uy@POPV p xyaA uղY  M2 ;4`H=l9Ph)U*]8_O Գ+r6a /T@!nNZ gDj97P/?[kA\߇`ȯ{O 9zVȻ'uy@4HN?7jZu|#bx`EzLM#*ab]߆jK9?ږ|vɓ1v Nm% OgevX{xh1QXEDBd2e?Ȍ7GO'*n_w t͖pBөwvUO2wҶڅT͇ck ^4Y"H|֎VKn[ rVyzpn#`3*X,c9fCב3{lKZ$CV.LgT. ^|e7=+~?FWiO@ϘӓGӹ*L;2Lm)4yUԍ{z#0+_aYQ?}N">9^ ʏؓQt'[wCF'dGE:øɷY Ky^&Ew <҇h A"-\(1:ҷU˝aV t!SX@ woY ! gfT5n:EEo+M}4aG=l)xycxܻFFÅC =#iko=({ TU>Sj_cdS' Pr-$’|h3AЪLRvNhs݊¤WFXd'NU%1fpI2 !^Tc$" sIq6 X헤A{>cZ '2g $35jdNwRTQBYt<0+|~0.aVQ_ڌ?U0A5IL% S4k"OӉyV(MEjIM )VkcGk7*zWUA76`afDhz"b)"9 kA`j:<]wIYLxqT[Zm ʇhfܘzɿ@CbL{"̻͑A]yd &h8-i wQ+ \7$CxWCt'Yl\tNϼ*f D>}od^yƎBeN̯i<4{sWgBDrZ=iɄ-I}lv!-XzO-TjPEUp殾cKa0/"^!RwSU#?D5(扷ÂNT'J(Y܇[R,bD&1.dLw.&[,pecNM"0 zJ'llqN"'ڸp@''hhJecʯ.-:IrU{W~]!~+ qek]pDò'eK| B>tI&}|CY2?1_[rP֡Hth0h(ʳ}3;p6FU{SS?jU`(h&,dr~yõJ08kswĀk6L?Q};S!{k6nw#7d%Tޢ2 Jh-@PlAR{o ^ R9}.^3s'{D1d$IAaݝ>>8YlV?)0Q6p9,v,1v{t8tck&Cc/(AlQiˬM51f%|'AſG%HX>B,s="-c`|Ew5Wtj[\NAre)[_<*\h `SfWKهxuYgzUs*xS'(Pnd˖p& L q1 "{Jxz_bv&o %V]9_u~vh)A|uMFϓo361#_:uyJ_a[-f׾W/uE 9oe^e, DV\ W T᥯Ylwm]e"ξx/:M;E.G\uHb؉&3d1D{e{߷7TrC\_D22ur@vH? ((_QPc9PbOYaAj(?nQ(ęneXaڪǰV5k(!M-DH3ծuĉfmq( 1iɮLxvH&[b=mx3YOGGʇ/>US3XPlR2+"72B(s&juWH$rz8K1mH+NQ;+lx-ƒ|e`9L͏9WՓt\[ِ!g"9WOqIϛ&ܶˀ\͔4O]+Z$sYq!~)YF๋f8/ 顅ѷyz46k 2}?/@GsRPNQNS18SQ&=H{ORE(츦}+UME)6xBm*սb;,r&`ٜL該6*61 Kھӛ gO4&̳sXd1˨\FijB-;윏{}fYӠrK_*XWzsƪ(*f٤1RFꞅvHHK㼆~BviA l|[o h5K Fybͽjl#xs4B+rXq_0_b\׫$M'tWcv4=[͐bnF2kwƄ3rv6urnSn!'NUӯ]i}fs:‚w;n7pћJ%ւç,eM_Z#UW5ԵV%מFj MakJ\oh?V}+coʻ5.rP"F oN(Iaxȳscnlc,@<6?M K詣B/ yո>Ӟ%FI@ugT3Btow/ӑ òhkT:Wqw';4ر 6c~VR}[io0#)R&ʙtxA?}]"f!+̨*_E]C=Ifz>υ铭zpDR.j_aŞBVs;c3'<9{YXZ*Q2v-?щ s`X u9UE# =ٍ~cΪnP׳E!P9t|DziW2/ɞ/C-"VІe*^EޒPN]%$(>^XHR9wxL85O䬿&L:,irBIj*qU _jFS]@ƻSj8+sG.yNzT<!n5ULj4|(Pu<ReUXmt38ilrW(61j8lsQgu{.ڥyF miNjAe,_v{ptjΏtbqJ~~H8G4sagE'am2iI`Fv~R~À6@nLcDX$v'"m־!DIeϞWq{GSA[1 /D8 o,;1o=5Lk$|QEO\ÄK{3B#ඏ5ꪫ 0M׏ZM< 1zFW%ҙJz7g_~jdaJa_"iL%m"1vBwyZSyq{SOq@a(3|J,ZX+oW+?f&j{ ;H5.1l,urMa,l¶6v7IO鄒_ʢKtlޭ3CVFg^T1K'}W$R;íYxh[odFG]Sw!^ z+qq nΣ55c~Zs–Xa ;xi`}Lg,Xa)|sEM db!hT {q6$:G=5bkᵯzF|08պ:yCWzN])2&<~|R¤P){؞ӌK,Cp?p^o+"ޛK,gv|ѩDË'M=~CX-RBrm$pYcq qw'J$wf\`A luL6BܓYJ)U9Ԉok* [qL S]8rw)n=ؚÁ%3 ?WR}+"2'tꞔ{]N0aNO( De!؍:2¾yfaQN,~J~`"o {_ڲg_Y?Sy&GOc~ H kRZ3A6Iؗ-cd#^xdQ?h`XE}vԵd@h\7N{q9J+`dj‚DuN F9,wo芲CW JE-cەUM@(Wԭ}xP}u E& cpr#3-D6ƠlUO͂UTt %Z){9g-bzA٤o@' vW3 lhg>ZvO^w<O$EeʼZUrZiz]ϟj{)빲=9"-U R4B  }z.ӥyϗ5ze|{,V 'A:p~hf[3RVʟ0nccYx}Q$ƒ>}wk ?*8MTtL}Dc?qyDRzÅ=2b/ bE:M=b>3M_ukjU &␤8sM endstream endobj 37 0 obj << /Type /FontDescriptor /FontName /UGINKD+CMTI12 /Flags 4 /FontBBox [-36 -251 1103 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 63 /XHeight 431 /CharSet (/i/m/p/s/u) /FontFile 36 0 R >> endobj 38 0 obj << /Length1 1606 /Length2 5510 /Length3 0 /Length 6315 /Filter /FlateDecode >> stream xڭTg8V%D 2HK!ژ cQF. E^^> I]B^${;9{]*ϽOp,jBvp$EDڢ_~?bn0~ 0D(̖JT%o*DH?"Oܿk?.>Z; 0(_`'8ohĂ cPD Ǩ=`P=8b؂#04=F@$&=5;`Hߙ[DGOX,=X#3%%a{R]) uocp)e1e7U$%X0JX:~!h4Aw?+y T_P dl)cFgӏ- ` ޣf OKE*d?>p>[Xna@6'3op򷾽6SOp1@2&yƧG3dfw/X^b@Sl?t{}gZ_Hb tDK~.tuv4o.0 3`ѻsc{P+4+N1`Xrz!vmeGfrG|7]B,TrJ+NLeH3i)vQܦ^t}Uja`+W@͵F YLDwDݜWNe_tRvhД)(HZ1ˎ Y }b.(.[SvYߩT0H dyJ- mN'vK1w 9)<X`+ާ;"6U/ :+Mn*yUV<>>ɸ@F-N%h(8hȫc9(#IuzJ[2<,C=ל]̼5,R#F՝{B)@~-%${zR @`5Ay:KQN6WoUm`AcWdp]8ձxj'i"yhwW_6S%*mDp (N2piML}? iXD@ˤ/Ss9Cj1j`Lyܺ< cZ$7g@ٽ8$!j+`؉6[IIF{#-EW}l)VN Kq&X$k{k*DhM٦OnSr0F(NǦ7~rpQ)65d{5UH0Td.!zrz@'jhv=8w\:T@._=ы?0DRBj?q;ϸ\ 6}\^wht4CڱAuP ]o6`+W!iȼ؃׻>4l5/E) Y5)YRj,g1-Om&l^[4酮FsLsJd;T+;Nޓge cm b줍B ,#/!(l6q`_ڭ5vP c{>Fg¨;Q/z~@HfTt蹂ڶ?B‰O1l1U<&elVZM{3 =[y@'^yٻ⌉w+U}^D2$OQB|#3Bo߄m>*eyqn f߶cɕ?ǁ҃W1#M<3˱1- w#ա3MQT ]x7gULM͈?PhOkrtְ='>^L<0njp*DֶNKȦ|//Iۮ6_E)WROGVwк:uҵ7{:cAOn+6Çve wwEJ6.+}"SRQ^% Y8Nv>et(!-i/KtFù/\,^PF罕sHlYes-r:7<ҳ\WH㙤OS\X#D~wl _4l2S%FH{giC: W]9#K^;E |-+ v, qni[zJnl󡟆ENAnTIrUP OTqxbc]9x Fa/|)Y!.!*HIO-\Ä|n p¹ p`Y>Gәgue~8l}fVO`xɜ?J}H5NJ;.\~l!)Ra6۰nLM m3gIJu̚@Q~ FC!3 {:4K|o2[A[|dzp5Ӡ]C &ɑԊe]rbn%oL9Fi5{}ȁC>;W"' *kvK*I$bCc';nϭK=SC$ /m"1ꡩEǣ.-NբPTfw#OwnM׉!EMU1 EN] q#ʡ,uoYM)Lڹ81j jT[pr)%5:T. Z[/fvy&傆_Ra!p'49=lQx0񉹚y}sOr@Ǘqp-KsKK Wv!WTarNkܩ9]v g  >^ QlsB}87 o x+Ge;PqAYD"-oA?9>N<4Gz}4}T[Boh2_0 F'+P6+Ϧc\tX ϗLJq 'ɂQO<6PVy^S5Jx/څUi:]|Tվd ,4/=ﯮd2#61Ҧ/9P>t^>M֜.?9LmڼVrh<(0I>2r+M:Bjdm]hmQ0'?Z4nJI{l/ gg K; G!y Ͳ\r=,_݃7~΢ (1U;w-ֺLHɡlD}I VGoSl8N]c]:[y+owdEnWx^%kQLܴX U,YLP9_ 'Hšvs8u'7;EubJr/Y('uռ*1kY7efPi蝗X~ 8؊ ]Xw4=D[! 7| LPM&%_+=m K/{^‡rQ1^_ /:d-)EV-#:rt2cI@ HQyo8~r#>qX&}G=S?23!y {u+I᠟?J+M7BrtxJ2Q]Q=ȞZ`\-1-I;rcO-_Qs~Ӡl .>w70i'cTPi > AQ/uי;D$:狸2: U9NA0T&ifn$"ŜKalS$^͂řd`=G' ]70⇕ 郓f5X= VR+"'Ss(&ק0vo 3t~{RygoR;{&-*r7;?: iU\q4vdЎ~\>wRf`g&7P` Fm8;襻s#{wC:5si>6OMxEtQQnw j"\ x&LYSSS]/u5-P8c' U/_[$cN.J_WwQE(9UˎxHlvM31o}׼~z7G*IY,=6:G|bsֈK5҃{v=KcA/ĉ+.lð/u󺂙VI)oITܜS(m/wϨZ}i޳aѦFRGW}O}ן_lɟU[ѳ 'w^{l[.Nʍ~fJ<d,۸ڊ#zysⲡOY"}wwrOdOn:5S͇꯸-2+ <G6m5]8$ء> 2^:WVvlZqyLDvo8/8Oq=#v_uN,ٞ]4U`'v h<>V(Z-HTs~]wL$:ŗ vL ;%v,žԠ^ĥldž 38|F@wu~sx!CYd7&t*Wd:Sgu١uJOC3lw> ׮ܤS?ƇQ{nirD57#ը6>򘉸|*#Y͔M%ML#bX/'dcKi:;atb)Ew682nnON yg&+^+\ԲYjŭn<W qغ>d˃TONR8qs{OT~7JPݟ'r3":OMPo.4ud3jc@yTlT4&|!:&zh<㘲`W*,Vrp1FΫ ;l86ÏE򡸵-||h 9 ݵld⣇߉:9FբV׆w_8JW/1ic : endstream endobj 39 0 obj << /Type /FontDescriptor /FontName /SWNPOU+NimbusMonL-Bold /Flags 4 /FontBBox [-43 -278 681 871] /Ascent 623 /CapHeight 552 /Descent -126 /ItalicAngle 0 /StemV 101 /XHeight 439 /CharSet (/b/e/i/n/q/s/u) /FontFile 38 0 R >> endobj 40 0 obj << /Length1 1612 /Length2 12921 /Length3 0 /Length 13748 /Filter /FlateDecode >> stream xڭxUTdے-N$P8CQCU۷ocX3fČrgR(1;%Xy  @KwBhf nh@3++ bmiPբ?=;]-@;G'{'xp,1%eE)@ t1(Ỳ@  _2~bLN@3m@/3_.z` t1qp쁛#/v ǿ 98~F>]\\Y%ܮ֟ng_%X;܀^n2̭]L?s9XM_ .@Ks;''_WR߻On@; F8Ϝfn- G ?Ny]n_3CI`cRttL '+'k_ywhIw;;Ea;+Zȸ|6CSfF]%nfV Nmp0Y;?f[Y:zNS3IiiK(wnNG\!*e< l\τ,,MaXV0qs}w`$57O_n3wOU>s^@3G30l±qpfYQ<5Ư-sgNoGXvTb2mn.& s8%]NfͣUW(¹n6' 2 G'̦DҳsԟOT#ct|&g$in.f<,?d)G4T0nv;J7M=icʖifRܗK"W["ƢӬkx {#C,=/@ğge5.ggV60 *숃YB5'FTRLz,+3 Pg,*ZkQ9cdtFvT3lUD 0)!全jG2/bUWSteA䜨H-pL(#h%hSV2"S?ɩ4O%Ծ%^A0qq'H@)ɥ2/aF1fNg&qI⸇d/5wbph"R*VgQ4{e_t}W_]E:p$fOR [Il b vfTw=G-P?Eb< 2(]8O#)FtTf/K/$l¶0V}+Ły>. '|陝\עіn0;rS\LE$][PA}^U"/ivVDAJN*ڮr  (ʞVZM!$7 8멕ColгF+r.Q,iC7O4_ 7<{TŸ)t"r͓쇔lĔ/fWGmUݘm#|-&-q1|z~Ejs̋ Ro2I^NEbښ1$(+2X%w(F*++l˦ӈ<<%g @?kۂ9{[P5yWԘ<9TD狟{ ϴXBrd(䝜X Z䮢T%g3rgPb@m}W઴c>$hGc"pkJ۠K1yDACNه-&GWU#ʅ|~NXF].A9*61js95YS^ 0I9Ybs7&豍+ǃ4Q$|@6udM:[ xJLy̼: P6noS۞g᯲!ùW=IT1}`o39v3k|rd &OX5갩zʆǰ5U]1f/YׅByD\Xx6fHͩ`LT .K#"` tkĄ; xol6T9?R{n @)#A)}%$*݈^,OM?>}d۸4wsN-#}r4if W+R6͝U#:I-GG⍏Wxc- C93Hrd0G;3OpCUkKKoMW2%5F],< lOJ>l1' %b|q#A 6o}jd!)%8rB]l1;x> T+r1ɤw2C5gS.=Q5q-^Wi#EFK7RZ&,JwP,#8 fe,0ڽPg#5=@LQhG_o(v'U0}[ܟ <;5TXswcv:ښLCߖ niݜ| Is!2Z䍘apNJwRD8?} ?h};5;lDϡmeI4Dǧ8L$# jq0JS껬{ޕ8O 4- Mv&9)4WԈ]SX"NZ['y ]򯵻(i11 _1W\TY{J^iDKfFl #4`>*zvȍDs lJvimX2oCb'ٚaIgw0WZ!{h3t;Hm$~b&kve[BY 'rO wKGEo+GG,JYruM X n?,I6vjY`ʈ`kV;F+̇Zg`_ᇊ|:3XDpP⛖r]TTv/xh~Vq㎙4%Z6a_{r^/,ɥ7Gd3^H)VC9KmV^w/&۵ǖ$'tixj";YpOй4e[@y njjI$@Zr2s7#~c4J9҇Uh3v>v }aŶVt$(WoS͖JwW5\" } m{2(v-'p]qzZ- -7@bc$1˝]}h$t:x&Pʬ%'vplu E`ma} b̋Z7GHՓ 93ry'!>Ⱦxf )tZ.wy]ŕ}2zژm %蜚q6xG +*]u DxtZⷶVw*,$)N'@;JpUccdfgsE[v/乧56"~?c4OiG'+wx9 =tz\vL'L6<)pV7 QL͜0< QޯuᰬHDv E0j!fOw[JSŞ3L/bzqm|DZ=;R~e{¼(R+ V48nr!ۂzi7i5Vly% _j87 x39ܵA&;U{|}P au%_gd" 9]-kKtPG8Ud2zHG+O{x#rాa&I,)yCa5fo[[P:4‚!I3QwxS-=}#[;EopsʜpąW(a{B-s_a7VagksXoyc2Q!bT[Z]O&W[x*J+#^ R r`9y耨&@mmMɯŕfk,) D;۷؆7R꿖A#Ifa WgHCKa1{8K=7=W +:)-=.ոSW~~pe"&6Sϟ{G/,z@pٛ4smDg1iOІ4,ijR~5a(,i|OGͦ!AHrb,9k _ZX.wrS4`*45QzkJqW"<ND't= bZ[2Go[}ϙ42ai ')l~LpMьNJ~ 1!r,]1:\ϯ!o,PҔ}16]ӄvn%b!. hq#P"E+ʡT3UّLn..W RP -uLu O36iO铬6hjmxѧ/عH[r?+rj=Ͳ7"&.oi曬CJu/7㠥/rdkfAOܴg1钤c֩$MY}mRt#\jz'K\’IWgC-rij.t8<H %!,84,sRc< l]r4H`D l Ϲz}%}!k HEM TlF7|jc: 뫨M0_vFZ!~'6M\Q0Q99.C2ėcyqʃA Wxws뒿wQ7-.J΋EϖvTms3 ,">{̠I|9"kӖgRO"2 .yU;f "1QqPBPT̈́^RcnT@CYA[$ШkҦ4ζ:6$kk뼌Xڲ6-qA6{յ>ƯXc p# mD\ tvx}_M:l#直70fӽC:4#,RlSC+ߠڪn-J6LY,MHN˷-0-C$>IS_ &oSaNG o w%igA) /3C Q7sF܅Ҭ*ڑV$ tSBY4\t)Cț0fwIi㔌 o:+ԛ!DVk\#5, uxi9`<2r\6*њadg9 'c)H Eb<v˛*B^jǝW&702oD.$y6\>Mrl^LA@٭;r[(CYki^VWU4%/8U9 [bjbk*o`.$uO4aue>믱W<%&4` OHS(Fݱjp䞍\KțӊW~:@{(#}j %r< =K?e\[E[A%WG(E-)W;;p~+dg{Xk*\[/=^Սa %φovMz֐ڥ5Lm3rSQ9e$ej4$Rvdz#k1<p_&Mk 6fD'U}rcpW#SL/-u(|9t'cV,*$> r\y&[;jWC9"", U+ M-EPIW;NQ )Q#L7uv>隋0iwOmg H8r m 1d+|*=]Zw/x}X-w(r}ݰ1Gd9PlO>tȯ?lڴ36%KqξdWxl("neˠ`6ͩ&HxANn&2ͬ тL@GwɊ#&z s|3vB~`UapZ.sLZZ?hq-8kǿzjV5p8Q02}T /TZAj\~6O+Ilߌ`^>`d|~<" {Џ3Q@~gl1 VLrU o@~U0ZA Aҕ_zHL i /1Zz{(X@~ԆiaXl~=$Aqsɢ=g0%nEǵ>E%|'l3BtkY[R&v6͢Ȯ0q_L[޶e1*mh?VUZ4!~G{]F #̩.$l:6祡ޡbV%Zqju)C+uS ݌K06IU7ڻb723׮V(/Qy㝍kQk,{qBހD)Mæy[R yZS/q\JXmF^füxxً" 39aBss"@lG5bqp.ys?*C,߸xYYkj42 _zA1n+ RuY#l]L]ⱶX,Lo$q(_1GO흇lL:ccڇw!޾Fy hW'&lj">`=(8:._Ic-eNaޓ$F֩ ~(Gpt֙զst·y5'o!Y.йde+bV&Wp/Y+ݠ45O8 3ٓMQeLL6.ml3Ue))Z7~ØD49AppS#0⾖yA6]G.jQ̠p3(LS(wj=lN=E[Tj67OF>ϐZk΂QL!qBH{Y:’ 18C%VΊ7J~ᲑJ8b[x; :9D0kdU|+Q1jr=5<|g'R9 sJȞV! /y|%ݏ%AgU=#Ndczf;yZFJ/}}`TT.Tq;zr*µ>fn2fNe7iC&{v{bġ7Hޯ}bY)FqVX.I-Uki`._Z 73g,g۶S̓d3f3)z){r(X !va)u\i[-Pq@5.\[f6E$Ju;u4* EyapGdCMHd}cW"N|,.s/ۤ1a6V8asOqࢫ>o1'-Úrɾmߦ]b(pkHb^—Vr݈l a `r5`%'oX[sL/L5źZe#ϥB`VܠR@z~C5D!P("g}<fF;GKt-Y$: mgg`iT='!h 16yǐd\{ET\l=*HV3[~ж.*Xk&,D4@ÄhMW vvz]G;^lEbbü4]]i5x-xH93DLCw^>=Ap$㛿UX6ɋY{Wn:xss ǞLJ2g4hL7:%GuZ˷kt;GBRќ{k~0sf%@6,/jF`7_! F>Fm߉;zyļz/pwE~[q/4_.G5PHAs&O)u\ŗ{t6˙ۘ˕ bkIAZg! Ze1 5Ȏrd`N7ںTXB%}QAq1{m,׃YZ[gC]/7*Li=aM5[Cɱ`^&R;٪:Fol_ljWB -T1&.3b?kkOSkRNy[M0G1Î]<03ZW>S5-FK!.(Q^9*}o>X;qH\VBVUn"뀇iZW7aԼr.81J 1)8 4oJ\{ /ԉri0Gn$0N|i"W}Oqb!A<3l_,nDXT;{ AP-Avje޿hW\Mn6r}e+:|qc&#$vο< _mic&| ],V{MdXb+7qk s>ybW4xyŐЄpE͎r"ն6c"v 1#c鎃Y}P?il˯0'гX˭n>~=HbOopHpڸS2_^J&a: 9}3qB 2tNq_Sqx ?S6߿gA͇C| X/[jI93txpJGJ8mSMd s?ު,Q2w?zE:*8lΖC(TChD[ٮ蚝\h&?Nѓ}N N@teB- a2٢0Ӊyq(4ef~"28͕Nb3/%2V˜L8@isakLQ%5|sT);NwFz M 0eՃZ/x.6ofڽb#^idUaĨ_a2FONg*3Qj FWx5S($ZdZ>\)z w5NHC4}[i)-_xX-v{0bi5L'Qv36fFsl秧Z53-]ў݇T%zkua0^ <4ފrj$3α:]yM)i+(glR5_p̲P- Q-# .32(_L\M*gfσ[Gfh u\4I*- J%Ժ\aXNGd V| K*4/g?oj*GZirwjUb?bq4! 7j4Ԏ]gK:W6Dmb;B+Mno<toA.k`aÉHu\J-NxqR.#0! `S%4Q$hDdsFb5$"=UeNyq=v>XpqH0{saq3HE8ЩDn]2ԽnZ"#`V/R8ܵmkzIz ikXd1VW\Ld*/gC\9! _o؂JsJVpmec`Ò!~Ad{oZʭܙk4nl‹]E[Q@R g)Ii"eb͊bu$qQJB#~o01)ěn,04o;/f_,Ь _[~ lqkJam^0WSV5NЩ %EeUƚ$ă| bE_c25.NgTDol2~Edi(Pwhޑ>RT>\1xk;{?'CޒytLVDѩx#s 7NNi!1iګs] ƝiCQϹYә磉j6q^ ${,FeT\uax9Ygl1;*~'uX{B#-ND|I .-j+s:< endstream endobj 41 0 obj << /Type /FontDescriptor /FontName /GWXEOJ+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/G/K/M/a/asterisk/b/c/colon/comma/d/e/eight/f/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 40 0 R >> endobj 42 0 obj << /Length1 1626 /Length2 8107 /Length3 0 /Length 8941 /Filter /FlateDecode >> stream xڭteXm6HHHJ!ݍt0 R))RҒҥ4ҍ }UHdavrm)A mh>/ vB`G])>}{G]`<)}o#hE_?0rr^_.>a {$$*? _g k+ `7/_?`a@gПCX@_?n]Ǯ΃^` 3PCzV4oH/ ^I ҹ=0=rEmUw݈}]݆@ =|OY@c3Ǣ'c(eTSa^!][tWlA ADp`Z[V:${I,=}Gh9o1ĭIRvVh/HpSYyPL ۊE,n cU'N)!1rNE :U5.==ߩ>gҕ]w\#P#α^ T W7xfDK0~G_(e0&@HV&s3vڹ,&.j0x}qmb]ˌ;0K`Dz<9åtاW“$5;۾Y>G27;M{_lB;G^ڬh{0{xZW̢Og:G\z_?3;+('_Y|5"#셗;:͊:uD3сRRbQ]Nog-^L^RI#h3 .D,Le:a݂deu2"anƋfP)t.x# KYD,FM}KRs]1gxTh5E ->7l6h0,M]ӥIawѥr51_1Z{0h~#Ƕϑ^4v~gά'VG4i 98O:6`-ZDnf7MnMTU وahek+b܃%Ѻ1<픻bmIYϴ6 pwYz[ͨoEe9+% g||2aa=G~.m : F\ڤRqh-NuCC;HlVM9uB;.k₺xuEHƀ;Hd8yR#\V*':bL+4/A-X-WX'BcVyQ~L[^]6B\9EߔV+Em,\v~6k5J%6 b\??܋1oBa! d,{ϩAt\( 1E;|<ƜiYSQ)U>HLȶwV@/*7 ْWˎ+O%D _^"}2=_\J z%ѿKK&`,Ss8CKE7o[F-$.qgWIp.^0N$#6;ts<ҕ (HlLMm z"e!}$2,32rkG_=m1:$#|(|"b?>Pڑ|,I6 T|ͅe y$WBզ jo ]oh'DԄR1D4f|C *g8(YɈvk^~)9R*m0L *E^%':R<,uQHXNx/]%>1%2#!i+o_Xzب*z)3&|w癥U]0lqEFnv Mf< 2ά~ЃҒ.ޒ4܃@/`PՑ.+SVbI4_^oMwdm6gsݹq֚u\]+sx/+T/W$@Uy9E㮝\7)d͆=P?k^:Ph3QIFшBŨCп3Yl<ی,/iR )`N"1R) ?m ֠KF;fG.[}C^D0W%Ӏg?$^>HHqd1i%^oA4l? RC\zZ;گ9igwAn/CQTtͮo}9 MR%ffn-OKl] uZ%4JȩuJC4ɱ&jz+w ht8|#ؿjn&bUDZ8Fp0&%װ]jx4U'D +狗\ Z a Uidޙ\py=Hk>6+\O>C$M%['Rg'-{j(6gO/,;OKG%b Ěߩ$]ZLZɔyyW- K^~5^NJ.ܷe~N{,mh(SaFjZGUuG 0_XTt!7'Cc-Ktr \' )˘K>/b*:P-Z& !$rQX@ lIY[!?y;m\ٹ;fc +Enmz5ߏ=m S9bn-Ýv_ ytZXo{4_hRKQVd.s =qbNnNFryE_4/B6yvYq'e7"e˒MƭS,Sw>+"\__R̥h˫Q텽Q"@wyCo$TȢ{t"Y ]WeZt}O|V/(WH8ԗ./Hl_ImEV&cYkTn*MKSƤ^VGbSwbx7'SNwd^^j-ɱF I3fl nr]p. -D{jҟ B`ln[HH{:> K,AB}%q-WO 涏"[utjo0qkΟnKA@D{3SG)7k*9^ϫQݹ3Rׄ4xǝF<ɼ1W[bɦIzgϬ:ьJMKژt9Nh (=v0 InF`ZA[j-]:}vy0 Tuق(GW:N̷׽:|b:ɩLcŅ` ojV h>S tE91v5Х +j+P(y <q-d?dj '~4gM{Z;-?<&hW5 ٣TB{  n%~X،~{y+hni}?+\Y}O˂:6ʼ ;C:g(˂ `=o E߬/"i3)=7Z]|&bLysg4*F %@sC4f yun(w\W%0@.ud,Iy2&勑^l˕VJt頔2TGƶ!FWɼ}KFm']ayH*5+@#&6+@'3XZ Ry2}t_]p5WT9cZVBR+Hjra-+v擻iW<N1{gۂxNtulՕ*WKN]&exfb-̿n N_`5rGx]YaajtT߈i q*a7[|cn)<9-QdLocFP/U]BsMO"NNY݂"6Kz!ȶOr/j3~/YEfs~']L GxS]`G/Js' Nbri6ӰE ” PwÙ)rƳBL_# { ͊ Y,C8"Lov Ȯ5_Er(nnf%n``F&,ę4ӄ*{iYh=s62Cu.QT쯆C>@hOQu[}[yHcnGs"<{Ctx^ޭsiT(Rh|6ě#*Sݝ/!BR5/0#%>\H\dY8SL"&Zx־ !ڼ`R.d*y;wt-a*s]i`90XN=+Ի^)1lS]+v|kVh.,c)wiXn>]!s9#%Si̶\1HJ)VS+Ov4܂+N5P5$!]ep>oq㽌[{?[幠4@Φ/L2}_KV\HN_OMElijc& O"_vMtP^[GT"Q=Ӿ.=>Xjd ".n,BZDޣ8"BCt6xAE%g췏=ڵ779+*fذѵ2(lu,x8C:/ 9'm_HQUG#)͍~k+]r/f'\a&Ej2Kkr,? /F(82?RO<f@UݒAV8=#ZE$ax8]zhq5%>]]F=ǥ̐ ԜZde,yx\u(W::!Ҽ]Ӡ@PۯP0\H Lm .}4XVB[MqP楴] }呎htU&+KWI.,+JGAAo:ZCjViԚ|!6S+MVoaQJxF\RO^!$PUQuƏ pDFHaޑ<%vN&0d4qv pa"ل3ʛZ2xd{.<9.nE]~(]=ƒE\Iv%#0d9toJ^)ieU}Yg^櫬r N 蔫6EѿQ2l4>L>.8;y=@z E9s;Qj hԺ)Bx!U4{kg?&R 3ϡhViؚ4ڜݶ9gQZk)baA^e艼q˫cZhEpJ֨!o(' eK6lY@"ՎW!7]m= /S`YB=ٜBmTFιݝ#Դ_<o$m3_}~BB@> endobj 44 0 obj << /Length1 1630 /Length2 15249 /Length3 0 /Length 16089 /Filter /FlateDecode >> stream xڭcp}&{wбmv;tl۶m̙3uޙ/3î/] M]AV(fkDH36tvT唡U:YȄN6"N@.: 401999¶vfN U%uJjj0tHGsS.@+[;k_@e d[ r q9U8``Pp627Șm[տ?9tFÀnF@L4;o# l6FVWoblzXSutr4r0sͪ ": h 5ilkOKku20q8ݜe;Y_e8;ۘg4/_} m/Y#ʄoN#MmI[#ÿvas:k@ " mm@8z9[)w,@ -_9_{bVVr7 Cce16r?EWou?I:_j4w3w+;L _zUc /+T̍,m!&/]^QEXAKs`wT?5?0BBnOZF6- N&M1,k`7㿺t ?d`cw_uvt.qZf9`eMh0׫UvpW5Lq}/}HQ`Zw'/sI({P7S,FL;SZنbcP;ܝPTYE0sDGNhcRс&GŸG<1dX>I>!_]+3իPT]=ޖHw. MA c]/Cᣙ hƄU~v,IqZfpF5D,n}QH ,dhK1p)jEN!E% Flw&TI:S5bz()ՉTl]+[ۤ97\,peW}rZ L,u#.>KblNv%~'GsOg(l]}ƴ TzrYQz2($_b^[֣L-PL=[ڋRܘ\cWP&KWp^[ʣ[:C ^EN@ 2X [/qܚDKcͥc lyPbDё^/CqfTXtoD 昩}X'}6oY!0X"ŷuʯ}){*;/(T{hm!?5n+!.́FM3VH3 O =hņrJQXVA)je#7j,P1 |zQі{XX-X[/| ^c"xOh.\ŸjB= Oz:+GOP^+):-Y647 9>D4!ѯEl:uRhM* ?~OXIPs:%F$=h+Hxҷܨ};I<5 vWcfFb!enV)( LOT Hy41` !𺑕T2 ٟ_5&_r!kGgFOo-T`D=Cb9+ZP`Μto#Sf4 C9- V!JG#,PO&c0./X^Ѵ}R^e&d.UpHFsI}d 'ekj~| "dJ$ҩ\kM昴:/nmr"csE:B+S7*.љE0՝ʻuU)ڣTÖ́w i DMP~y/Tz*o;FAus{T0rO, {Sev !TT xD- P% 2YiUH6M ӊ3h8Pr@BBGݲwuY2k<>śnAL'a`e7ʞnz2|\em}g5jj)jNU7@s>vthՀXҤ pA$4ϰKG^xB~׷kY Y6]aٍ' }7 C68~a͸uUh*~P1cȫSUtcT;u6$!ceyW8+l `Oǂ\!:I>22>e&\z^8 F^]BᲑԕ81NDZ<@.=gDEl|ǷU`fz{w.AOFDac̓Ujv( BCɋ8vңM(}B")~~2tDbaP6`}&"j-|<ŭ[h)6#WL[ktM Ed4eaM/V1lr2|Bf3y{y)$`QՀ` ;v/$Z_ ;Eݰ(~le~ۘ=dR,#b2`^pk:ui{9$5;?/3:|2k!MS#TEOq|bRoDRA.#{S 5uNL֢nc;z@Z]r;tfA-úwR葜TtLYBGCh&hIP4[I07igqw5yLqa/gTd&n=AxTs¶<Ȟ0^gVc+o7އM#F- ..PhNaFw4hؒKY.{T8[ g̫ӭdh8XYiJ]qJ}Z*cS䤝8i@YuD|^EǞ{qlNܨX 9R`Pa_ؑHs'F&pUr9R 'Sy6jlhVo|b2# &~yI#|aůA9TJ.l,aa!2hpqDHez{GZr !Yl{n0Ϗߺ#GMT)M48V"tֆrܪfUu| !ezs}cZjD.0̗OQm~^f2yFao>}  +kyu*WWJ 2(`F{qV.3esP_&QAj^=PJVq K)5wԴ,{[0VOD0%'eJs8tB?)Pq`0?z(MGX\P-''nj|88ݐrz]2iB9ww@fZty^2x;'Q'2SǤX*/xTyõCjuj`ĥw|`8y-a\];rNLb! 6fxAA,wQ:ro} 璚(xT;PjYaIQUNk/*7hʮSG׿ f-ٛ~fc̼◃lAs4Ms볓ף+c!Rsqk(uhtK~V3W AO.,DxeؕP5.:++(`%.@uZ7wci[7i)WByy'D`\s@#gg8-ڹ%0]ioh X4p_ }OJхZ$ebԠ -ӋxH~MsR1Iq<_c-a3; aIz-icq\"GCEsis$t0*mV~m44,8Yw4 /b,}mp|F+μ>61f} >e5ho;Z.`o_Wt5oCD 0 Ti]ٙ8(&ۑ#ݖ9^EeHHlLR6y{d1+ՄkA(w_21ݯ?yซ쮏:6r V֞b` #v Mb3nn&hzaͮo+Jr38vsz){-ҳ]bu(3CGݣDNk_B hJAWi{ 䳊ƟZ'l=apBw'5 '[\&m8r_KZsp'dڅ0顛 ;SXFeYvrR&scY/tx6-H۪DBͿGFih 'ZZ5FWz3v`FKNS)ԙU|o6@YIewEeU0 aZHN9ivw Cd jK 1|I+:/f4m2Ut,.gh v~\uV&5?"E'`/r"u;F:` Vo'?eOl-Dr~Ug2$ 0|Uڭ7S֜qJ n\@/ab}]ai J99޺VNE^35U**dшW,Ȕc7wʨSup{n|ȍ󠴢I~+ =ZXK}BRK UրV_Hcs`;-hfO1Ԩ"Vf=iVfWk@5rXo5 {bYwBw q˽ ,rwud5|l)AcYMAP5-#ˆh_A} ćۙ8:\cV|Pex€ٰ9)~p9<8ĆS=x϶Kb?ǔųegʙ+@00 4~(ٻfOo`2y Gas3UP8mRwH%0aR챿5ѵl*JF3Ug"6xPAL\v,WU +n1ɎcJ> L纏5lu\' qٹR jXH{S>*^b}_OʦV۟ ¤Q-J%Sbc!Y MdI n*Fm>tuOY{1SNuvH>K}pa5f=Q53gܤ(ﴑƷO*w}r)CTw _ѻZ׎CHluR.X1dHN}K 9K!4 *Lh6-E+u#q.5q)te>r-'Ӥ"\ &Ǚʹu-&c THXc%56( cSS%Dg-"yNt_E#biK.z%1iEͥ^&u%Hnx.&I(E'0P+/Hv|fmq֕7GZȾz]2Bf@'&WuFwhXQ4HF 9)e$ɢz3oI. yplUzLzMk!"6-u+T%y+$[du0GQGnZ_gV?i3usxnvA?czc4lqYxu|jG%=&ew; w"D ~Zdu*sP|psJMxdEVg'{!Čtd;7^4j dgU1t ie zͨWZDkWo"[裾3| )ӏ !ݖt)( `_+3C,ƅC[d\|F̐)%);/\sPfu,:C։ SJBP)FjO(,nvGyYw<toNUۂ>NdǯWnN08m~-w Nd6I{(k1"tz%l !W 1 "]!n ,?\_IM51AC|xU|5S ;M{lxR2Ph{=3†«~SOYR_[Z;'eYI+X*aP"a3)\b!` !:Ss{#YjgZ&Ev 4myI\y#YbT/h|SI-r22բ\p ?EwyKլ< E`}[v X~ԸUuQ=D LC&0FkcJGs?y–\# V 啚#,&qHS6}v^j 5hN6%Y}qFu#%L0o!#\bc#iW\ԥ*}.N/wK8f*cmt*fKMm8<ºR6IO9>/cg4]׺PW;KN# T݆q &ٴB2"Y?ͮ)J)|euCRVo#މ4Z09Z5^lZ_T3{U@{ؽ4GnuZhT-Ғ^Q=Nx'ID\Ɓೆo>Som0zaH?DkOJJ,74q?F*!c+[Yv4r!('zCPi16aY.6pXkکwP"r95,VaDD7;"%<^,(9CnLK i 4xõԠxŻs9S4H6꩒|wr4Bܠ``y'I5ԸnHe^ћq;8wHzxӵ?8˦F'J6ږ1u1je)e&04XFY-sVRz8lLngpqĮS| fP6`~%i]ԃ-R^e˹^aHGRo}̢I( Uz D~77Oʂ-hwkyHSٟ Hu6 ҰXGWRH3}?oa48(*QDL7 * #LO ;G>9giF*K^k|n:׶ O`הg~VU.c^M!>e[;ʚ- 8^\;J_m'++θ5yƹ9ݺ>lu#2#::-qy[rzLY '#xE١XfPVI݅6>6z)NX]'r#(bSz/L-#hL _31ɶ?}2hJ#`E_'Z/lwz:-@mPMDsZsHd6f7m,nt7A^E^E~^Xi)8WFtB7_ZxBxCcƝa棰 .4䯚5ŌSy~AvHw7-p#GW{(_߅ w` Ж2-zܡY 5.%pig:Z!cd)vXE#*VD2iBz6!oť8ס?fӶΪI%~]t_60WQVN'Oi<ІC2\pi97J+4Mmh c<=˲Yj]d;Q;kkF0|;vouc|_`xex3=5@Y&t.~V`ֲ=ո+Ih.E\}0SWU{g].@Q h:Tma]/r]ȿKq,A>Kr]# ;Ӷ/{;})MIqW{͡4tUŭZ~DA7 F6mOa6GFP [98'&/BmKlgk^WGAt8:^4:fxJ1UAs>oG Mw%rTQ6q.M$Q\ KE:}BW݀V&ҋpTKBH6M\`JALU5ɀ.2!Ϫ`v\n b>hNgU?S߮}PIj=R hS~0W儺ZSo|(jh1j#G[Ȅ ڎ:R&9o_I`)ZL򯟔|M.Q˩=Pi|ܑHrH ΗtYTNx oBE8וB F Ա?fZSSRJWƻ@FoV4ʞdΝN/h ̓Q](dq.dX' 244~4Nr^12t"$ˬt!{}k'*0HyD~cfANh3̎.mFSNHʘ_ !ϐY–2*!8 ccHkU9/݌{ ?P\3.{fR3'RذuTGZ$pN d@5RjL~ֲc%Ÿ܌ە0 NSg Y"ڃ7۽,qX`̺' 5/O[=ݴ" M}̅޻^l VM%rAXpGǠ'n82V쁐sstтSF?ܤCQn={@pl &W%1QtuFwʩMh6]QaTCa=44:#H,E]Jef,./\dH!G%ViP=s"+S$Z r&޹O1m\n} T\%RB|^9CXDig)D?+ܖ]*ury%R[$2EU_fx;==o=yIJDO <|a]4tTp0 "a#Vx3 P#eu>OtXe* \ BSn/?};>ʪ>) ʟ'qC¬e?7F'e 6{ЕPS_,-WPLfߜ2X8d TRދWGMj㔢rOG 51w//.o:sOb}hPY&zQ5cJPP1t8s[=]vOMM[YKw$ܑl\x,erB(ǰ}Mt 33j7ܢڳ̧1CL5u["Vt:%e؛|Bh-(ģQw[kS" Q%gi~aw[1J\^.j\=C-pA%~~[i(#0c\`ԹL)frh߽x{KF^U5v^{J'|j+צE|X]t0J<^c>4PFBHd* "dˠjx%L8nݻJ90m~yIw˅K5ׂUF~Ș0bKGF|_;)D{Z"T?,!K DXY+o8\ZUw $BC]bS0-38O7y;J^kW2i!pN0Etn:G mbUB9SEM%%F>Z\Q3˖ +;x띦H!k&u6яJM=>43@,v):^ yFhX|CG(o4-s]|_ t_96O t7WHQ(evR..~փKK&ၬMab48{NsKfWF4Y4ʝܫixj!ɧ 9f$ANJscH-A~uvAqcx6*'xJί=CBPv%KS`bEę$ٰ5'b[6Uafz#\Ә+m]r-E $Gz(hqYȏM߿Sƞ y{o6%e0Cl8D܃svQ`U{N|dsFH B?+V7 R4Ro+F)o3hE;PcK]c記ɟ@I[u?,5mcOsS^(∰C<ï9љ = S5 v<.$I$ވki=EUˌmN|gYҵ)(*=ߗr^qhGᠧylPM;Jyr2d\0AV_k@T}VLXցfȧ36& PX(~䓮T_ԚB:^mR"AGy}N ٔ`|3٫Ia^Qe{ gnF_. Ȫq{Q hjG99 mj6GT V -K?Br_Nrz^{ Nr| W\~pD(h.[j"M:(AY{ A+9uV͠E$bR}nҋQ]Ǽ1VaNSN,8zG!̏vfu?4o ~mЫ(%oj GU-dBscV;sA\B짼R^FۋBC;N,>vƲY4 q=R*y?ka齍RVMPK72|y.sv) m(1}Y  入8I$iPr'n1R,$ 6_m&GQg6B}iByǞ_fտk`{vjqYKUbuGz8{[u^1sI,\ݞnI".cq=0wQ> endobj 46 0 obj << /Length1 1647 /Length2 8706 /Length3 0 /Length 9554 /Filter /FlateDecode >> stream xڭveXܖ5P$4!4 Z(E RܥXXbŊ;w}gH^[> 3usIt PT\[0a,ffEuU$& ;c1n0'G8H߄럖?W@<ݝ\,O? .k OUSZ("|#zVEwh4c-0KoI.D;,ۗ_:Q֟qfb2Kڐ''_7دq}=߹2Ak|xR|4B!սnαa4# :.CJ5c 0`[:yS(yݏ\_^6=u\S!FIy6Ll T$ yf#ytU]uʬ۷ h_^ojb3ϹpSЯ4٩Y+*s:ysW(?ONGϪWwseiǖREIxpAbmoʢULix3t;/2euuf`hRqhR9lVkBbtF8HY@fHA*e3Js;t/#o^b-\idOa ?x%OYSh)2qȤDZ~[|GnVi;bE0, (vUvbP>.$~+N4v7TwLQ;3fPY~w퇱BfYY& `\<: HE}b])6S|G8Oe%4UNNrmlS{&w3 *-2nQ$4Q}Osւ߈JijL/[i(%4;2cEHB_:$9,'ՖWT;?]٣e.fLnکHT0.cV.xaY_݉$Ogn h ik}M(f˕WG F)`} h]|ơl۩wؔ?f7+>)'L|*XF*Yhs=~dc=IdkV&NYz>cT CRD%aO2єKPI5dF#: xuVWi3 /ژc̖WLkJȉG+oh8U9Yfa.?m86H}.rd"`RVf0Ns61%wWfMp5w-WkO~FUo)652s0kÕ?UY!v cA]nVe  x1ˠƠ4hq_&QDXLo`"wQhΩ<%GR(i?F%;.0'P+=807OWJ GfG-]hVdQ4 Y;E}%cX,0}|2A$XlDwCzFJ8Ak[d2"D,B캸RՄ&vx/d,Ts竰X)Zo`p膘mH!'R7 %$1M>xGe>x!凉ۿN: F"iHLQ%T@m|u~VL7%Q]'"G)~qe b~̮;<3|ԈeV5f撜/+WƭQ93=zkE3f:T⸃BA )A/P] l)\g>TEGхy1mTMP`rKN*lM)6'Smd+=э/?o8D?I>9v8tCRV$̘ Ͼn\BelU'#IKp͆Cx)|*'@ķT 1OvZKDeϿScպHۨNgmG *<[Nit:p'Ma ߋS49峺Qyn >ͭ}+gdXzpV9]BeHl4T>׳.ͳY9Xe쏭}' 5}% qƽCjlWIAtI{#9l2AިŷVҶ-rxztI3Y3_pB[ C>c i#.$vưfca ˗n]c~ &=Iȃ(@( l`kܨOS˛򳓰kr=}o}d?&VNu-7Q"|؛8GH=PJXvY} GLkN;FæTda[W={$pnǼ\:QRU^gDSb=b =LՔ;Sȳ_t5Ɋ~:p4yIY֓nM挧uٸBdw,Dy-8G,33ACǬ}|c8z\XdKMd'uߩ,8}H@gsi$&rVw}M.3=(ŘЋK4Rwb\ vK`v Ռ ;t#piT<YTX < D&w/Exפ8(Ǔig D%C'=_/ maeaZ[$%5ka 5bzH5%uyFYw{ʑ/8s5:i3sQs l% LUWqkBD-d֠*>EICί>4cAI(>yV6pu* ƹƼ$$ΔVI `rD±GD6c!h XxM,P߇!y$q~|#cۍbȰ%u-2+uS{=f.P!7 lKuE$.'jBGY揰 sf %jasfr0E<9&jymX]$(.WY74JJ3>|Ѩ|mˏ:e'*w] :\82Y:k+uZZwYU/D$y>=3sc:B ulH%]NQf2`Y&TWXQhJ,K2G4{F`ţqZkm!ZBwBZt FJN#_[sBbbgjsK\-L2,ji7+RN8=_^+Z[#଻4s $3ZwJG(>cf<<3 >reN%fߝnо$Vi"ۖ(")"RۓxSNEN\X>& ro*61³O ",m6d~Ѡ|#VB  .+@:9ʝ$Jb&l7NqLQ|VOv8#n/=_k:{IU)4A%@k9]*[f/uGk~I^^ӌ\N Ri'. )"?}VB^π".śyz#>}kD)cl29Ӹwb{hJl?>Fz&sElugz? j^gV%߾7ﹽO|=M$zAv$nb`ݡգ,]:Ɣ;k׵p]Pdw mۺNUR>j<佖^."x=P6ȐpA&fMΑr؍ލ:O*mUPPf@ս+!;̰Δ߄UW&䌉b1II"VDBV7܍&~1 Uk[/R݉T~hө\HfDԃM;X+S6٨Z7T*H~kiVRco,pù#"e5t;K%eB KLgX${͋}d%Ifvtwl;xΏb7dhi?&e H@yW' 3hnVvt79*˩VtZvcy9DzVeqT^a]bM#DkQuɼ QZ;, \b#lLmU[⤴"SAZH+ឍӻU6/b}6()kE9*⦗#*oFM%Q몌*`X3fR kie< H @̍APٱ=6Rؗ:d?JuP\uIBugNif&=ۋ#C-6ъZ2z}D2;E.r!Զ ݻox v`02mmu -Δ7ɳL*R;.:I*dS#h#\@Kpr, fS\_A0ى5Gm,;ӂPw{kBѝ,|SzL@Ms)^c29<qNcS8qNy``g:ʉ&5+fm/6 ͭD[q\&lf3 rWϘnʻt[m1Q_쎻Xl+>ryC5|Rq6&bZ^5}{xY(;aa>1iuvy'r2g큀IornO|.]{ܦmL/GR\q_i5w7t'⵲D y3Sd/ 5~x;&vnj-hDQ۸ ٥~8T$i~?swrH ^d6<7!*ڭ$GWY/Hb(bj6DWmNXf:vkΏH+N8UoTAqި,,dzKG=5H+F5X 'dX|}ፅTQ=_!zcطe vsuл$TX+b"A- L0Pam@%ew C ȩ-5-M_xхwKiNE/UbiBOV'+WTê;mo{5Sms_2RapOZu߯z/!qN1zKH"7,: }*$4md|%W'_o@a[s~sPG{|dݭhL;Cj&PY]z@CJ"(&Z] ]9]:eĒT!3r,1t(ցLbz+3je!iFBDK̚fɟWBƫ-P4ΪÅQVֲue"|ɫm v_FV2..M b^,'9-"D}ϯ=|sE37V։)⒛xYֿH Wl#%ZZ$)JQkZa t=uVg.3"sf9ΠKH.k0EQo<^YѢ#4{8W? WGaˉ~'#$?,BlK)YINLne(XJi'e{ʙ7[=%p)1Q~pr7v y{U~b`): GӖTs岷KU` bkVV.UH-/`(> endobj 24 0 obj << /Type /Encoding /Differences [2/fi 40/parenleft/parenright/asterisk 44/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon 65/A/B/C 69/E/F/G/H/I 75/K 77/M/N/O/P 82/R/S/T/U 91/bracketleft 93/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 150/endash 168/dieresis] >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HCBQIZ+CMMI12 /FontDescriptor 31 0 R /FirstChar 58 /LastChar 115 /Widths 23 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NCBBPW+CMR12 /FontDescriptor 33 0 R /FirstChar 40 /LastChar 93 /Widths 21 0 R >> endobj 12 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LZRGRV+CMSY10 /FontDescriptor 35 0 R /FirstChar 0 /LastChar 106 /Widths 20 0 R >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UGINKD+CMTI12 /FontDescriptor 37 0 R /FirstChar 105 /LastChar 117 /Widths 22 0 R >> endobj 8 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SWNPOU+NimbusMonL-Bold /FontDescriptor 39 0 R /FirstChar 98 /LastChar 117 /Widths 25 0 R /Encoding 24 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GWXEOJ+NimbusMonL-Regu /FontDescriptor 41 0 R /FirstChar 40 /LastChar 122 /Widths 29 0 R /Encoding 24 0 R >> endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YVCBEZ+NimbusRomNo9L-Medi /FontDescriptor 43 0 R /FirstChar 49 /LastChar 120 /Widths 26 0 R /Encoding 24 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QTCPZQ+NimbusRomNo9L-Regu /FontDescriptor 45 0 R /FirstChar 2 /LastChar 168 /Widths 28 0 R /Encoding 24 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SFHYWA+NimbusRomNo9L-ReguItal /FontDescriptor 47 0 R /FirstChar 2 /LastChar 122 /Widths 27 0 R /Encoding 24 0 R >> endobj 13 0 obj << /Type /Pages /Count 3 /Kids [2 0 R 15 0 R 18 0 R] >> endobj 48 0 obj << /Type /Catalog /Pages 13 0 R >> endobj 49 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20120806142608+02'00') /ModDate (D:20120806142608+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 50 0000000000 65535 f 0000002385 00000 n 0000002273 00000 n 0000000015 00000 n 0000102406 00000 n 0000102741 00000 n 0000102909 00000 n 0000102572 00000 n 0000102240 00000 n 0000101679 00000 n 0000102098 00000 n 0000101819 00000 n 0000101958 00000 n 0000103081 00000 n 0000004859 00000 n 0000004744 00000 n 0000002544 00000 n 0000006453 00000 n 0000006338 00000 n 0000004997 00000 n 0000006602 00000 n 0000007221 00000 n 0000007528 00000 n 0000007600 00000 n 0000101330 00000 n 0000007950 00000 n 0000008048 00000 n 0000008355 00000 n 0000008829 00000 n 0000009466 00000 n 0000009816 00000 n 0000019151 00000 n 0000019398 00000 n 0000027752 00000 n 0000028042 00000 n 0000035868 00000 n 0000036148 00000 n 0000044210 00000 n 0000044438 00000 n 0000050872 00000 n 0000051111 00000 n 0000064979 00000 n 0000065384 00000 n 0000074444 00000 n 0000074716 00000 n 0000090925 00000 n 0000091379 00000 n 0000101052 00000 n 0000103153 00000 n 0000103204 00000 n trailer << /Size 50 /Root 48 0 R /Info 49 0 R /ID [ ] >> startxref 103470 %%EOF genometools-1.5.1/www/genometools.org/htdocs/examples_tmpl.html000066400000000000000000000141121211610345200250340ustar00rootroot00000000000000 The AnnotationSketch module

    AnnotationSketch code examples

    Using AnnotationSketch to draw annotations from a file

    The following code examples (in C and Lua) illustrate how to produce an image from a given GFF3 file using AnnotationSketch. The result is shown in Fig. 7. In essence, these code examples implement something like a simple version of the gt sketch tool from GenomeTools without most command-line options.

    [Example rendering from parsed GFF3 file]

    Figure 7: Example rendering of a GFF3 file with default style.

    C code

    (See src/examples/sketch_parsed.c in the source distribution.)
    
    

    Lua code

    (See gtscripts/sketch_parsed.lua in the source distribution. This example can be run by the command line gt gtscripts/sketch_parsed.lua <style_file> <PNG_file> <GFF3_file>)
    
    

    Ruby code

    (See gtruby/sketch_parsed.rb in the source distribution.)
    
    

    Python code

    (See gtpython/sketch_parsed.py in the source distribution.)
    
    

    Using AnnotationSketch to draw user-generated annotations

    The following C code example illustrates how to produce an image from annotation graphs created by user code. The result is shown in Fig. 8.

    [Example rendering from user-generated annotations]

    Figure 8: Example rendering of user-generated annotations with default style.

    C code

    (See src/examples/sketch_constructed.c in the source distribution.)
    
    

    Lua code

    (See gtscripts/sketch_constructed.lua in the source distribution. This example can be run by the command line gt gtscripts/sketch_constructed.lua <style_file> <PNG_file>)
    
    

    Ruby code

    (See gtruby/sketch_constructed.rb in the source distribution.)
    
    

    Python code

    (See gtpython/sketch_constructed.py in the source distribution.)
    
    
    genometools-1.5.1/www/genometools.org/htdocs/images/000077500000000000000000000000001211610345200225425ustar00rootroot00000000000000genometools-1.5.1/www/genometools.org/htdocs/images/annotation.gff3000066400000000000000000004117271211610345200254770ustar00rootroot00000000000000##gff-version 3 ##sequence-region chr16 4043 26056510 chr16 ENCODE gene 4043 9448 . - . ID=gene1;Name=Z84812.2-001;Name2=Z84812.2 chr16 ENCODE exon 4043 4511 . - . Parent=gene1 chr16 ENCODE CDS 4381 4511 . - . Parent=gene1 chr16 . intron 4512 4651 . - . Parent=gene1 chr16 ENCODE exon 4652 4720 . - . Parent=gene1 chr16 ENCODE CDS 4652 4720 . - . Parent=gene1 chr16 . intron 4721 5480 . - . Parent=gene1 chr16 ENCODE exon 5481 5633 . - . Parent=gene1 chr16 ENCODE CDS 5481 5633 . - . Parent=gene1 chr16 . intron 5634 6289 . - . Parent=gene1 chr16 ENCODE exon 6290 6448 . - . Parent=gene1 chr16 ENCODE CDS 6290 6448 . - . Parent=gene1 chr16 . intron 6449 6536 . - . Parent=gene1 chr16 ENCODE exon 6537 6738 . - . Parent=gene1 chr16 ENCODE CDS 6537 6738 . - . Parent=gene1 chr16 . intron 6739 6915 . - . Parent=gene1 chr16 ENCODE exon 6916 7051 . - . Parent=gene1 chr16 ENCODE CDS 6916 7051 . - . Parent=gene1 chr16 . intron 7052 7290 . - . Parent=gene1 chr16 ENCODE exon 7291 7427 . - . Parent=gene1 chr16 ENCODE CDS 7291 7427 . - . Parent=gene1 chr16 . intron 7428 7603 . - . Parent=gene1 chr16 ENCODE exon 7604 7750 . - . Parent=gene1 chr16 ENCODE CDS 7604 7750 . - . Parent=gene1 chr16 . intron 7751 7956 . - . Parent=gene1 chr16 ENCODE exon 7957 8068 . - . Parent=gene1 chr16 ENCODE CDS 7957 8068 . - . Parent=gene1 chr16 . intron 8069 8601 . - . Parent=gene1 chr16 ENCODE CDS 8602 8789 . - . Parent=gene1 chr16 ENCODE exon 8602 9448 . - . Parent=gene1 ### chr16 ENCODE gene 4085 6383 . - . ID=gene2;Name=Z84812.2-010;Name2=Z84812.2 chr16 ENCODE exon 4085 5633 . - . Parent=gene2 chr16 . intron 5634 6289 . - . Parent=gene2 chr16 ENCODE exon 6290 6383 . - . Parent=gene2 ### chr16 ENCODE gene 4085 7083 . - . ID=gene3;Name=Z84812.2-006;Name2=Z84812.2 chr16 ENCODE exon 4085 4720 . - . Parent=gene3 chr16 . intron 4721 5480 . - . Parent=gene3 chr16 ENCODE exon 5481 5633 . - . Parent=gene3 chr16 . intron 5634 6289 . - . Parent=gene3 chr16 ENCODE exon 6290 6448 . - . Parent=gene3 chr16 . intron 6449 6540 . - . Parent=gene3 chr16 ENCODE exon 6541 6738 . - . Parent=gene3 chr16 . intron 6739 6915 . - . Parent=gene3 chr16 ENCODE exon 6916 7083 . - . Parent=gene3 ### chr16 ENCODE gene 4085 8925 . - . ID=gene4;Name=Z84812.2-004;Name2=Z84812.2 chr16 ENCODE exon 4085 4511 . - . Parent=gene4 chr16 . intron 4512 4651 . - . Parent=gene4 chr16 ENCODE exon 4652 4720 . - . Parent=gene4 chr16 . intron 4721 5480 . - . Parent=gene4 chr16 ENCODE exon 5481 5633 . - . Parent=gene4 chr16 . intron 5634 6289 . - . Parent=gene4 chr16 ENCODE exon 6290 6448 . - . Parent=gene4 chr16 . intron 6449 6540 . - . Parent=gene4 chr16 ENCODE exon 6541 6738 . - . Parent=gene4 chr16 . intron 6739 6915 . - . Parent=gene4 chr16 ENCODE exon 6916 7427 . - . Parent=gene4 chr16 . intron 7428 7603 . - . Parent=gene4 chr16 ENCODE exon 7604 7750 . - . Parent=gene4 chr16 . intron 7751 7956 . - . Parent=gene4 chr16 ENCODE exon 7957 8058 . - . Parent=gene4 chr16 . intron 8059 8189 . - . Parent=gene4 chr16 ENCODE exon 8190 8243 . - . Parent=gene4 chr16 . intron 8244 8601 . - . Parent=gene4 chr16 ENCODE exon 8602 8925 . - . Parent=gene4 ### chr16 ENCODE gene 4085 9409 . - . ID=gene5;Name=Z84812.2-003;Name2=Z84812.2 chr16 ENCODE exon 4085 4511 . - . Parent=gene5 chr16 . intron 4512 4651 . - . Parent=gene5 chr16 ENCODE exon 4652 4720 . - . Parent=gene5 chr16 . intron 4721 5480 . - . Parent=gene5 chr16 ENCODE exon 5481 5633 . - . Parent=gene5 chr16 . intron 5634 6289 . - . Parent=gene5 chr16 ENCODE exon 6290 6448 . - . Parent=gene5 chr16 . intron 6449 6540 . - . Parent=gene5 chr16 ENCODE exon 6541 6738 . - . Parent=gene5 chr16 . intron 6739 6915 . - . Parent=gene5 chr16 ENCODE exon 6916 7427 . - . Parent=gene5 chr16 . intron 7428 7603 . - . Parent=gene5 chr16 ENCODE exon 7604 7750 . - . Parent=gene5 chr16 . intron 7751 7956 . - . Parent=gene5 chr16 ENCODE exon 7957 8055 . - . Parent=gene5 chr16 . intron 8056 8601 . - . Parent=gene5 chr16 ENCODE exon 8602 9409 . - . Parent=gene5 ### chr16 ENCODE gene 4085 9452 . - . ID=gene6;Name=Z84812.2-002;Name2=Z84812.2 chr16 ENCODE exon 4085 4511 . - . Parent=gene6 chr16 . intron 4512 4651 . - . Parent=gene6 chr16 ENCODE exon 4652 4720 . - . Parent=gene6 chr16 . intron 4721 5480 . - . Parent=gene6 chr16 ENCODE exon 5481 5633 . - . Parent=gene6 chr16 . intron 5634 6289 . - . Parent=gene6 chr16 ENCODE exon 6290 6448 . - . Parent=gene6 chr16 . intron 6449 6540 . - . Parent=gene6 chr16 ENCODE exon 6541 6738 . - . Parent=gene6 chr16 . intron 6739 6915 . - . Parent=gene6 chr16 ENCODE exon 6916 7051 . - . Parent=gene6 chr16 . intron 7052 7290 . - . Parent=gene6 chr16 ENCODE exon 7291 7427 . - . Parent=gene6 chr16 . intron 7428 7603 . - . Parent=gene6 chr16 ENCODE exon 7604 7750 . - . Parent=gene6 chr16 . intron 7751 7956 . - . Parent=gene6 chr16 ENCODE exon 7957 8055 . - . Parent=gene6 chr16 . intron 8056 8601 . - . Parent=gene6 chr16 ENCODE exon 8602 9452 . - . Parent=gene6 ### chr16 ENCODE gene 4088 8422 . - . ID=gene7;Name=Z84812.2-008;Name2=Z84812.2 chr16 ENCODE exon 4088 6448 . - . Parent=gene7 chr16 . intron 6449 6540 . - . Parent=gene7 chr16 ENCODE exon 6541 8422 . - . Parent=gene7 ### chr16 ENCODE gene 4117 6241 . - . ID=gene8;Name=Z84812.2-005;Name2=Z84812.2 chr16 ENCODE exon 4117 4720 . - . Parent=gene8 chr16 . intron 4721 5480 . - . Parent=gene8 chr16 ENCODE exon 5481 6241 . - . Parent=gene8 ### chr16 ENCODE gene 4256 5022 . - . ID=gene9;Name=Z84812.2-011;Name2=Z84812.2 chr16 ENCODE exon 4256 4511 . - . Parent=gene9 chr16 . intron 4512 4651 . - . Parent=gene9 chr16 ENCODE exon 4652 5022 . - . Parent=gene9 ### chr16 ENCODE gene 5739 6975 . - . ID=gene10;Name=Z84812.2-009;Name2=Z84812.2 chr16 ENCODE exon 5739 5993 . - . Parent=gene10 chr16 . intron 5994 6289 . - . Parent=gene10 chr16 ENCODE exon 6290 6448 . - . Parent=gene10 chr16 . intron 6449 6540 . - . Parent=gene10 chr16 ENCODE exon 6541 6738 . - . Parent=gene10 chr16 . intron 6739 6915 . - . Parent=gene10 chr16 ENCODE exon 6916 6975 . - . Parent=gene10 ### chr16 ENCODE gene 7711 8508 . - . ID=gene11;Name=Z84812.2-007;Name2=Z84812.2 chr16 ENCODE exon 7711 7750 . - . Parent=gene11 chr16 . intron 7751 7956 . - . Parent=gene11 chr16 ENCODE exon 7957 8508 . - . Parent=gene11 ### chr16 ENCODE gene 12910 15123 . + . ID=gene12;Name=Z84723.1-001;Name2=Z84723.1 chr16 ENCODE exon 12910 13085 . + . Parent=gene12 chr16 ENCODE CDS 12932 13085 . + . Parent=gene12 chr16 . intron 13086 14245 . + . Parent=gene12 chr16 ENCODE CDS 14246 14283 . + . Parent=gene12 chr16 ENCODE exon 14246 15123 . + . Parent=gene12 ### chr16 ENCODE gene 36407 43628 . - . ID=gene13;Name=Z69719.1-001;Name2=POLR3K chr16 ENCODE exon 36407 37557 . - . Parent=gene13 chr16 ENCODE CDS 37430 37557 . - . Parent=gene13 chr16 . intron 37558 41557 . - . Parent=gene13 chr16 ENCODE exon 41558 41645 . - . Parent=gene13 chr16 ENCODE CDS 41558 41645 . - . Parent=gene13 chr16 . intron 41646 43475 . - . Parent=gene13 chr16 ENCODE CDS 43476 43586 . - . Parent=gene13 chr16 ENCODE exon 43476 43628 . - . Parent=gene13 ### chr16 ENCODE gene 37236 42142 . - . ID=gene14;Name=Z69719.1-002;Name2=POLR3K chr16 ENCODE exon 37236 37557 . - . Parent=gene14 chr16 . intron 37558 41557 . - . Parent=gene14 chr16 ENCODE exon 41558 42142 . - . Parent=gene14 ### chr16 ENCODE gene 43010 47669 . + . ID=gene15;Name=Z69719.2-001;Name2=C16orf33 chr16 ENCODE exon 43010 44058 . + . Parent=gene15 chr16 ENCODE CDS 44017 44058 . + . Parent=gene15 chr16 . intron 44059 45458 . + . Parent=gene15 chr16 ENCODE exon 45459 45549 . + . Parent=gene15 chr16 ENCODE CDS 45459 45549 . + . Parent=gene15 chr16 . intron 45550 45776 . + . Parent=gene15 chr16 ENCODE exon 45777 45882 . + . Parent=gene15 chr16 ENCODE CDS 45777 45882 . + . Parent=gene15 chr16 . intron 45883 46538 . + . Parent=gene15 chr16 ENCODE exon 46539 46613 . + . Parent=gene15 chr16 ENCODE CDS 46539 46613 . + . Parent=gene15 chr16 . intron 46614 47085 . + . Parent=gene15 chr16 ENCODE CDS 47086 47143 . + . Parent=gene15 chr16 ENCODE exon 47086 47669 . + . Parent=gene15 ### chr16 ENCODE gene 43864 47467 . + . ID=gene16;Name=Z69719.2-003;Name2=C16orf33 chr16 ENCODE exon 43864 44058 . + . Parent=gene16 chr16 . intron 44059 45765 . + . Parent=gene16 chr16 ENCODE exon 45766 45882 . + . Parent=gene16 chr16 . intron 45883 46538 . + . Parent=gene16 chr16 ENCODE exon 46539 46613 . + . Parent=gene16 chr16 . intron 46614 47085 . + . Parent=gene16 chr16 ENCODE exon 47086 47467 . + . Parent=gene16 ### chr16 ENCODE gene 43887 47372 . + . ID=gene17;Name=Z69719.2-004;Name2=C16orf33 chr16 ENCODE exon 43887 44058 . + . Parent=gene17 chr16 . intron 44059 45458 . + . Parent=gene17 chr16 ENCODE exon 45459 45549 . + . Parent=gene17 chr16 . intron 45550 45776 . + . Parent=gene17 chr16 ENCODE exon 45777 45882 . + . Parent=gene17 chr16 . intron 45883 46320 . + . Parent=gene17 chr16 ENCODE exon 46321 46420 . + . Parent=gene17 chr16 . intron 46421 46538 . + . Parent=gene17 chr16 ENCODE exon 46539 46613 . + . Parent=gene17 chr16 . intron 46614 47085 . + . Parent=gene17 chr16 ENCODE exon 47086 47372 . + . Parent=gene17 ### chr16 ENCODE gene 44960 47444 . + . ID=gene18;Name=Z69719.2-002;Name2=C16orf33 chr16 ENCODE exon 44960 45549 . + . Parent=gene18 chr16 . intron 45550 45776 . + . Parent=gene18 chr16 ENCODE exon 45777 45882 . + . Parent=gene18 chr16 . intron 45883 46538 . + . Parent=gene18 chr16 ENCODE exon 46539 46613 . + . Parent=gene18 chr16 . intron 46614 47085 . + . Parent=gene18 chr16 ENCODE exon 47086 47444 . + . Parent=gene18 ### chr16 ENCODE gene 45495 47453 . + . ID=gene19;Name=Z69719.2-005;Name2=C16orf33 chr16 ENCODE exon 45495 45549 . + . Parent=gene19 chr16 . intron 45550 45776 . + . Parent=gene19 chr16 ENCODE exon 45777 46613 . + . Parent=gene19 chr16 . intron 46614 47085 . + . Parent=gene19 chr16 ENCODE exon 47086 47453 . + . Parent=gene19 ### chr16 ENCODE gene 48058 62629 . - . ID=gene20;Name=Z69719.3-001;Name2=RHBDF1 chr16 ENCODE exon 48058 48758 . - . Parent=gene20 chr16 ENCODE CDS 48339 48758 . - . Parent=gene20 chr16 . intron 48759 48971 . - . Parent=gene20 chr16 ENCODE exon 48972 49125 . - . Parent=gene20 chr16 ENCODE CDS 48972 49125 . - . Parent=gene20 chr16 . intron 49126 49246 . - . Parent=gene20 chr16 ENCODE exon 49247 49347 . - . Parent=gene20 chr16 ENCODE CDS 49247 49347 . - . Parent=gene20 chr16 . intron 49348 49416 . - . Parent=gene20 chr16 ENCODE exon 49417 49492 . - . Parent=gene20 chr16 ENCODE CDS 49417 49492 . - . Parent=gene20 chr16 . intron 49493 49729 . - . Parent=gene20 chr16 ENCODE exon 49730 49824 . - . Parent=gene20 chr16 ENCODE CDS 49730 49824 . - . Parent=gene20 chr16 . intron 49825 50213 . - . Parent=gene20 chr16 ENCODE exon 50214 50277 . - . Parent=gene20 chr16 ENCODE CDS 50214 50277 . - . Parent=gene20 chr16 . intron 50278 50436 . - . Parent=gene20 chr16 ENCODE exon 50437 50537 . - . Parent=gene20 chr16 ENCODE CDS 50437 50537 . - . Parent=gene20 chr16 . intron 50538 51117 . - . Parent=gene20 chr16 ENCODE exon 51118 51279 . - . Parent=gene20 chr16 ENCODE CDS 51118 51279 . - . Parent=gene20 chr16 . intron 51280 51382 . - . Parent=gene20 chr16 ENCODE exon 51383 51457 . - . Parent=gene20 chr16 ENCODE CDS 51383 51457 . - . Parent=gene20 chr16 . intron 51458 51582 . - . Parent=gene20 chr16 ENCODE exon 51583 51694 . - . Parent=gene20 chr16 ENCODE CDS 51583 51694 . - . Parent=gene20 chr16 . intron 51695 51795 . - . Parent=gene20 chr16 ENCODE exon 51796 52050 . - . Parent=gene20 chr16 ENCODE CDS 51796 52050 . - . Parent=gene20 chr16 . intron 52051 52535 . - . Parent=gene20 chr16 ENCODE exon 52536 52693 . - . Parent=gene20 chr16 ENCODE CDS 52536 52693 . - . Parent=gene20 chr16 . intron 52694 52772 . - . Parent=gene20 chr16 ENCODE exon 52773 52895 . - . Parent=gene20 chr16 ENCODE CDS 52773 52895 . - . Parent=gene20 chr16 . intron 52896 52970 . - . Parent=gene20 chr16 ENCODE exon 52971 53180 . - . Parent=gene20 chr16 ENCODE CDS 52971 53180 . - . Parent=gene20 chr16 . intron 53181 53584 . - . Parent=gene20 chr16 ENCODE exon 53585 53798 . - . Parent=gene20 chr16 ENCODE CDS 53585 53798 . - . Parent=gene20 chr16 . intron 53799 54696 . - . Parent=gene20 chr16 ENCODE exon 54697 54827 . - . Parent=gene20 chr16 ENCODE CDS 54697 54827 . - . Parent=gene20 chr16 . intron 54828 54896 . - . Parent=gene20 chr16 ENCODE CDS 54897 55013 . - . Parent=gene20 chr16 ENCODE exon 54897 55037 . - . Parent=gene20 chr16 . intron 55038 62510 . - . Parent=gene20 chr16 ENCODE exon 62511 62629 . - . Parent=gene20 ### chr16 ENCODE gene 48059 62593 . - . ID=gene21;Name=Z69719.3-002;Name2=RHBDF1 chr16 ENCODE exon 48059 48758 . - . Parent=gene21 chr16 . intron 48759 48971 . - . Parent=gene21 chr16 ENCODE exon 48972 49492 . - . Parent=gene21 chr16 . intron 49493 49729 . - . Parent=gene21 chr16 ENCODE exon 49730 50277 . - . Parent=gene21 chr16 . intron 50278 50436 . - . Parent=gene21 chr16 ENCODE exon 50437 51279 . - . Parent=gene21 chr16 . intron 51280 51382 . - . Parent=gene21 chr16 ENCODE exon 51383 51457 . - . Parent=gene21 chr16 . intron 51458 51582 . - . Parent=gene21 chr16 ENCODE exon 51583 51694 . - . Parent=gene21 chr16 . intron 51695 51795 . - . Parent=gene21 chr16 ENCODE exon 51796 52050 . - . Parent=gene21 chr16 . intron 52051 52535 . - . Parent=gene21 chr16 ENCODE exon 52536 52693 . - . Parent=gene21 chr16 . intron 52694 52772 . - . Parent=gene21 chr16 ENCODE exon 52773 52895 . - . Parent=gene21 chr16 . intron 52896 52970 . - . Parent=gene21 chr16 ENCODE exon 52971 53180 . - . Parent=gene21 chr16 . intron 53181 53584 . - . Parent=gene21 chr16 ENCODE exon 53585 53798 . - . Parent=gene21 chr16 . intron 53799 54696 . - . Parent=gene21 chr16 ENCODE exon 54697 54827 . - . Parent=gene21 chr16 . intron 54828 54929 . - . Parent=gene21 chr16 ENCODE exon 54930 55037 . - . Parent=gene21 chr16 . intron 55038 62510 . - . Parent=gene21 chr16 ENCODE exon 62511 62593 . - . Parent=gene21 ### chr16 ENCODE gene 48136 49760 . - . ID=gene22;Name=Z69719.3-008;Name2=RHBDF1 chr16 ENCODE exon 48136 48758 . - . Parent=gene22 chr16 ENCODE CDS 48339 48758 . - . Parent=gene22 chr16 . intron 48759 48971 . - . Parent=gene22 chr16 ENCODE exon 48972 49091 . - . Parent=gene22 chr16 ENCODE CDS 48972 49091 . - . Parent=gene22 chr16 . intron 49092 49296 . - . Parent=gene22 chr16 ENCODE exon 49297 49347 . - . Parent=gene22 chr16 ENCODE CDS 49297 49347 . - . Parent=gene22 chr16 . intron 49348 49416 . - . Parent=gene22 chr16 ENCODE exon 49417 49492 . - . Parent=gene22 chr16 ENCODE CDS 49417 49492 . - . Parent=gene22 chr16 . intron 49493 49729 . - . Parent=gene22 chr16 ENCODE exon 49730 49760 . - . Parent=gene22 chr16 ENCODE CDS 49730 49760 . - . Parent=gene22 ### chr16 ENCODE gene 48972 50191 . - . ID=gene23;Name=Z69719.3-007;Name2=RHBDF1 chr16 ENCODE exon 48972 49347 . - . Parent=gene23 chr16 . intron 49348 49416 . - . Parent=gene23 chr16 ENCODE exon 49417 49492 . - . Parent=gene23 chr16 . intron 49493 49729 . - . Parent=gene23 chr16 ENCODE exon 49730 50191 . - . Parent=gene23 ### chr16 ENCODE gene 49231 50678 . - . ID=gene24;Name=Z69719.3-006;Name2=RHBDF1 chr16 ENCODE exon 49231 49492 . - . Parent=gene24 chr16 . intron 49493 49729 . - . Parent=gene24 chr16 ENCODE exon 49730 50096 . - . Parent=gene24 chr16 . intron 50097 50213 . - . Parent=gene24 chr16 ENCODE exon 50214 50277 . - . Parent=gene24 chr16 . intron 50278 50436 . - . Parent=gene24 chr16 ENCODE exon 50437 50678 . - . Parent=gene24 ### chr16 ENCODE gene 51423 52204 . - . ID=gene25;Name=Z69719.3-009;Name2=RHBDF1 chr16 ENCODE exon 51423 51457 . - . Parent=gene25 chr16 . intron 51458 51582 . - . Parent=gene25 chr16 ENCODE exon 51583 51694 . - . Parent=gene25 chr16 . intron 51695 51795 . - . Parent=gene25 chr16 ENCODE exon 51796 52204 . - . Parent=gene25 ### chr16 ENCODE gene 52971 55035 . - . ID=gene26;Name=Z69719.3-005;Name2=RHBDF1 chr16 ENCODE exon 52971 53180 . - . Parent=gene26 chr16 . intron 53181 53584 . - . Parent=gene26 chr16 ENCODE exon 53585 53920 . - . Parent=gene26 chr16 . intron 53921 54696 . - . Parent=gene26 chr16 ENCODE exon 54697 54827 . - . Parent=gene26 chr16 . intron 54828 54896 . - . Parent=gene26 chr16 ENCODE exon 54897 55035 . - . Parent=gene26 ### chr16 ENCODE gene 53035 62619 . - . ID=gene27;Name=Z69719.3-003;Name2=RHBDF1 chr16 ENCODE exon 53035 53180 . - . Parent=gene27 chr16 . intron 53181 53584 . - . Parent=gene27 chr16 ENCODE exon 53585 55037 . - . Parent=gene27 chr16 . intron 55038 62510 . - . Parent=gene27 chr16 ENCODE exon 62511 62619 . - . Parent=gene27 ### chr16 ENCODE gene 53155 66354 . - . ID=gene28;Name=Z69719.3-010;Name2=RHBDF1 chr16 ENCODE exon 53155 53180 . - . Parent=gene28 chr16 ENCODE CDS 53155 53180 . - . Parent=gene28 chr16 . intron 53181 53584 . - . Parent=gene28 chr16 ENCODE exon 53585 53798 . - . Parent=gene28 chr16 ENCODE CDS 53585 53798 . - . Parent=gene28 chr16 . intron 53799 54696 . - . Parent=gene28 chr16 ENCODE exon 54697 54827 . - . Parent=gene28 chr16 ENCODE CDS 54697 54827 . - . Parent=gene28 chr16 . intron 54828 54896 . - . Parent=gene28 chr16 ENCODE CDS 54897 55013 . - . Parent=gene28 chr16 ENCODE exon 54897 55037 . - . Parent=gene28 chr16 . intron 55038 66251 . - . Parent=gene28 chr16 ENCODE exon 66252 66354 . - . Parent=gene28 ### chr16 ENCODE gene 53585 62566 . - . ID=gene29;Name=Z69719.3-004;Name2=RHBDF1 chr16 ENCODE exon 53585 53798 . - . Parent=gene29 chr16 ENCODE CDS 53585 53798 . - . Parent=gene29 chr16 . intron 53799 54330 . - . Parent=gene29 chr16 ENCODE exon 54331 54438 . - . Parent=gene29 chr16 ENCODE CDS 54331 54438 . - . Parent=gene29 chr16 . intron 54439 54696 . - . Parent=gene29 chr16 ENCODE exon 54697 54827 . - . Parent=gene29 chr16 ENCODE CDS 54697 54827 . - . Parent=gene29 chr16 . intron 54828 54896 . - . Parent=gene29 chr16 ENCODE CDS 54897 55013 . - . Parent=gene29 chr16 ENCODE exon 54897 55037 . - . Parent=gene29 chr16 . intron 55038 62513 . - . Parent=gene29 chr16 ENCODE exon 62514 62566 . - . Parent=gene29 ### chr16 ENCODE gene 54550 66340 . - . ID=gene30;Name=Z69719.3-011;Name2=RHBDF1 chr16 ENCODE exon 54550 55037 . - . Parent=gene30 chr16 . intron 55038 66251 . - . Parent=gene30 chr16 ENCODE exon 66252 66340 . - . Parent=gene30 ### chr16 ENCODE gene 67006 75683 . + . ID=gene31;Name=Z69720.1-004;Name2=MPG chr16 ENCODE exon 67006 67124 . + . Parent=gene31 chr16 . intron 67125 69423 . + . Parent=gene31 chr16 ENCODE exon 69424 69699 . + . Parent=gene31 chr16 ENCODE CDS 69436 69699 . + . Parent=gene31 chr16 . intron 69700 73050 . + . Parent=gene31 chr16 ENCODE exon 73051 73255 . + . Parent=gene31 chr16 ENCODE CDS 73051 73255 . + . Parent=gene31 chr16 . intron 73256 75399 . + . Parent=gene31 chr16 ENCODE exon 75400 75683 . + . Parent=gene31 chr16 ENCODE CDS 75400 75683 . + . Parent=gene31 ### chr16 ENCODE gene 68062 75852 . + . ID=gene32;Name=Z69720.1-002;Name2=MPG chr16 ENCODE exon 68062 68332 . + . Parent=gene32 chr16 ENCODE CDS 68309 68332 . + . Parent=gene32 chr16 . intron 68333 69423 . + . Parent=gene32 chr16 ENCODE exon 69424 69699 . + . Parent=gene32 chr16 ENCODE CDS 69424 69699 . + . Parent=gene32 chr16 . intron 69700 73050 . + . Parent=gene32 chr16 ENCODE exon 73051 73255 . + . Parent=gene32 chr16 ENCODE CDS 73051 73255 . + . Parent=gene32 chr16 . intron 73256 75399 . + . Parent=gene32 chr16 ENCODE CDS 75400 75776 . + . Parent=gene32 chr16 ENCODE exon 75400 75852 . + . Parent=gene32 ### chr16 ENCODE gene 68243 69843 . + . ID=gene33;Name=Z69720.1-003;Name2=MPG chr16 ENCODE exon 68243 68332 . + . Parent=gene33 chr16 . intron 68333 69423 . + . Parent=gene33 chr16 ENCODE exon 69424 69843 . + . Parent=gene33 ### chr16 ENCODE gene 68256 75841 . + . ID=gene34;Name=Z69720.1-001;Name2=MPG chr16 ENCODE exon 68256 68332 . + . Parent=gene34 chr16 . intron 68333 69137 . + . Parent=gene34 chr16 ENCODE exon 69138 69330 . + . Parent=gene34 chr16 ENCODE CDS 69292 69330 . + . Parent=gene34 chr16 . intron 69331 69423 . + . Parent=gene34 chr16 ENCODE exon 69424 69699 . + . Parent=gene34 chr16 ENCODE CDS 69424 69699 . + . Parent=gene34 chr16 . intron 69700 73050 . + . Parent=gene34 chr16 ENCODE exon 73051 73255 . + . Parent=gene34 chr16 ENCODE CDS 73051 73255 . + . Parent=gene34 chr16 . intron 73256 75399 . + . Parent=gene34 chr16 ENCODE CDS 75400 75776 . + . Parent=gene34 chr16 ENCODE exon 75400 75841 . + . Parent=gene34 ### chr16 ENCODE gene 74273 81084 . - . ID=gene35;Name=Z69666.1-005;Name2=C16orf35 chr16 ENCODE exon 74273 74594 . - . Parent=gene35 chr16 . intron 74595 76666 . - . Parent=gene35 chr16 ENCODE exon 76667 76869 . - . Parent=gene35 chr16 . intron 76870 78696 . - . Parent=gene35 chr16 ENCODE exon 78697 81084 . - . Parent=gene35 ### chr16 ENCODE gene 74273 128859 . - . ID=gene36;Name=Z69666.1-001;Name2=C16orf35 chr16 ENCODE exon 74273 74594 . - . Parent=gene36 chr16 . intron 74595 75819 . - . Parent=gene36 chr16 ENCODE exon 75820 76869 . - . Parent=gene36 chr16 . intron 76870 78696 . - . Parent=gene36 chr16 ENCODE exon 78697 78773 . - . Parent=gene36 chr16 . intron 78774 78775 . - . Parent=gene36 chr16 ENCODE exon 78776 78888 . - . Parent=gene36 chr16 . intron 78889 79710 . - . Parent=gene36 chr16 ENCODE exon 79711 79900 . - . Parent=gene36 chr16 . intron 79901 82593 . - . Parent=gene36 chr16 ENCODE exon 82594 82723 . - . Parent=gene36 chr16 . intron 82724 83216 . - . Parent=gene36 chr16 ENCODE exon 83217 83323 . - . Parent=gene36 chr16 . intron 83324 88142 . - . Parent=gene36 chr16 ENCODE exon 88143 88299 . - . Parent=gene36 chr16 . intron 88300 90369 . - . Parent=gene36 chr16 ENCODE exon 90370 90507 . - . Parent=gene36 chr16 . intron 90508 100522 . - . Parent=gene36 chr16 ENCODE exon 100523 100604 . - . Parent=gene36 chr16 . intron 100605 102620 . - . Parent=gene36 chr16 ENCODE exon 102621 102774 . - . Parent=gene36 chr16 . intron 102775 107299 . - . Parent=gene36 chr16 ENCODE exon 107300 107374 . - . Parent=gene36 chr16 . intron 107375 109124 . - . Parent=gene36 chr16 ENCODE exon 109125 109254 . - . Parent=gene36 chr16 . intron 109255 120520 . - . Parent=gene36 chr16 ENCODE exon 120521 120590 . - . Parent=gene36 chr16 . intron 120591 128148 . - . Parent=gene36 chr16 ENCODE exon 128149 128333 . - . Parent=gene36 chr16 . intron 128334 128640 . - . Parent=gene36 chr16 ENCODE exon 128641 128859 . - . Parent=gene36 ### chr16 ENCODE gene 75800 128511 . - . ID=gene37;Name=Z69666.1-003;Name2=C16orf35 chr16 ENCODE exon 75800 76869 . - . Parent=gene37 chr16 ENCODE CDS 76704 76869 . - . Parent=gene37 chr16 . intron 76870 78696 . - . Parent=gene37 chr16 ENCODE exon 78697 78773 . - . Parent=gene37 chr16 ENCODE CDS 78697 78773 . - . Parent=gene37 chr16 . intron 78774 78775 . - . Parent=gene37 chr16 ENCODE exon 78776 78888 . - . Parent=gene37 chr16 ENCODE CDS 78776 78888 . - . Parent=gene37 chr16 . intron 78889 79710 . - . Parent=gene37 chr16 ENCODE exon 79711 79900 . - . Parent=gene37 chr16 ENCODE CDS 79711 79900 . - . Parent=gene37 chr16 . intron 79901 82593 . - . Parent=gene37 chr16 ENCODE exon 82594 82723 . - . Parent=gene37 chr16 ENCODE CDS 82594 82723 . - . Parent=gene37 chr16 . intron 82724 83216 . - . Parent=gene37 chr16 ENCODE exon 83217 83323 . - . Parent=gene37 chr16 ENCODE CDS 83217 83323 . - . Parent=gene37 chr16 . intron 83324 88142 . - . Parent=gene37 chr16 ENCODE exon 88143 88299 . - . Parent=gene37 chr16 ENCODE CDS 88143 88299 . - . Parent=gene37 chr16 . intron 88300 90369 . - . Parent=gene37 chr16 ENCODE exon 90370 90507 . - . Parent=gene37 chr16 ENCODE CDS 90370 90507 . - . Parent=gene37 chr16 . intron 90508 100522 . - . Parent=gene37 chr16 ENCODE exon 100523 100604 . - . Parent=gene37 chr16 ENCODE CDS 100523 100604 . - . Parent=gene37 chr16 . intron 100605 102620 . - . Parent=gene37 chr16 ENCODE exon 102621 102774 . - . Parent=gene37 chr16 ENCODE CDS 102621 102774 . - . Parent=gene37 chr16 . intron 102775 109124 . - . Parent=gene37 chr16 ENCODE exon 109125 109254 . - . Parent=gene37 chr16 ENCODE CDS 109125 109254 . - . Parent=gene37 chr16 . intron 109255 120520 . - . Parent=gene37 chr16 ENCODE exon 120521 120590 . - . Parent=gene37 chr16 ENCODE CDS 120521 120590 . - . Parent=gene37 chr16 . intron 120591 128148 . - . Parent=gene37 chr16 ENCODE CDS 128149 128266 . - . Parent=gene37 chr16 ENCODE exon 128149 128511 . - . Parent=gene37 ### chr16 ENCODE gene 75800 128669 . - . ID=gene38;Name=Z69666.1-002;Name2=C16orf35 chr16 ENCODE exon 75800 76869 . - . Parent=gene38 chr16 . intron 76870 78696 . - . Parent=gene38 chr16 ENCODE exon 78697 78773 . - . Parent=gene38 chr16 . intron 78774 78775 . - . Parent=gene38 chr16 ENCODE exon 78776 78888 . - . Parent=gene38 chr16 . intron 78889 79710 . - . Parent=gene38 chr16 ENCODE exon 79711 79900 . - . Parent=gene38 chr16 . intron 79901 82593 . - . Parent=gene38 chr16 ENCODE exon 82594 82723 . - . Parent=gene38 chr16 . intron 82724 83216 . - . Parent=gene38 chr16 ENCODE exon 83217 83323 . - . Parent=gene38 chr16 . intron 83324 88142 . - . Parent=gene38 chr16 ENCODE exon 88143 88299 . - . Parent=gene38 chr16 . intron 88300 90369 . - . Parent=gene38 chr16 ENCODE exon 90370 90507 . - . Parent=gene38 chr16 . intron 90508 100522 . - . Parent=gene38 chr16 ENCODE exon 100523 100604 . - . Parent=gene38 chr16 . intron 100605 102620 . - . Parent=gene38 chr16 ENCODE exon 102621 102774 . - . Parent=gene38 chr16 . intron 102775 120520 . - . Parent=gene38 chr16 ENCODE exon 120521 120590 . - . Parent=gene38 chr16 . intron 120591 128148 . - . Parent=gene38 chr16 ENCODE exon 128149 128669 . - . Parent=gene38 ### chr16 ENCODE gene 76696 128268 . - . ID=gene39;Name=Z69666.1-004;Name2=C16orf35 chr16 ENCODE exon 76696 76869 . - . Parent=gene39 chr16 . intron 76870 78696 . - . Parent=gene39 chr16 ENCODE exon 78697 78888 . - . Parent=gene39 chr16 . intron 78889 79710 . - . Parent=gene39 chr16 ENCODE exon 79711 79900 . - . Parent=gene39 chr16 . intron 79901 82593 . - . Parent=gene39 chr16 ENCODE exon 82594 82723 . - . Parent=gene39 chr16 . intron 82724 83216 . - . Parent=gene39 chr16 ENCODE exon 83217 83323 . - . Parent=gene39 chr16 . intron 83324 88142 . - . Parent=gene39 chr16 ENCODE exon 88143 88299 . - . Parent=gene39 chr16 . intron 88300 90369 . - . Parent=gene39 chr16 ENCODE exon 90370 90507 . - . Parent=gene39 chr16 . intron 90508 100522 . - . Parent=gene39 chr16 ENCODE exon 100523 100604 . - . Parent=gene39 chr16 . intron 100605 102620 . - . Parent=gene39 chr16 ENCODE exon 102621 102774 . - . Parent=gene39 chr16 . intron 102775 107299 . - . Parent=gene39 chr16 ENCODE exon 107300 107374 . - . Parent=gene39 chr16 . intron 107375 120520 . - . Parent=gene39 chr16 ENCODE exon 120521 120590 . - . Parent=gene39 chr16 . intron 120591 128148 . - . Parent=gene39 chr16 ENCODE exon 128149 128268 . - . Parent=gene39 ### chr16 ENCODE gene 76704 128266 . - . ID=gene40;Name=Z69666.1-012;Name2=C16orf35 chr16 ENCODE exon 76704 76869 . - . Parent=gene40 chr16 ENCODE CDS 76704 76869 . - . Parent=gene40 chr16 . intron 76870 78696 . - . Parent=gene40 chr16 ENCODE exon 78697 78773 . - . Parent=gene40 chr16 ENCODE CDS 78697 78773 . - . Parent=gene40 chr16 . intron 78774 78775 . - . Parent=gene40 chr16 ENCODE exon 78776 78888 . - . Parent=gene40 chr16 ENCODE CDS 78776 78888 . - . Parent=gene40 chr16 . intron 78889 79710 . - . Parent=gene40 chr16 ENCODE exon 79711 79900 . - . Parent=gene40 chr16 ENCODE CDS 79711 79900 . - . Parent=gene40 chr16 . intron 79901 82593 . - . Parent=gene40 chr16 ENCODE exon 82594 82723 . - . Parent=gene40 chr16 ENCODE CDS 82594 82723 . - . Parent=gene40 chr16 . intron 82724 83216 . - . Parent=gene40 chr16 ENCODE exon 83217 83323 . - . Parent=gene40 chr16 ENCODE CDS 83217 83323 . - . Parent=gene40 chr16 . intron 83324 88142 . - . Parent=gene40 chr16 ENCODE exon 88143 88299 . - . Parent=gene40 chr16 ENCODE CDS 88143 88299 . - . Parent=gene40 chr16 . intron 88300 90369 . - . Parent=gene40 chr16 ENCODE exon 90370 90507 . - . Parent=gene40 chr16 ENCODE CDS 90370 90507 . - . Parent=gene40 chr16 . intron 90508 100522 . - . Parent=gene40 chr16 ENCODE exon 100523 100604 . - . Parent=gene40 chr16 ENCODE CDS 100523 100604 . - . Parent=gene40 chr16 . intron 100605 102620 . - . Parent=gene40 chr16 ENCODE exon 102621 102774 . - . Parent=gene40 chr16 ENCODE CDS 102621 102774 . - . Parent=gene40 chr16 . intron 102775 107299 . - . Parent=gene40 chr16 ENCODE exon 107300 107374 . - . Parent=gene40 chr16 ENCODE CDS 107300 107374 . - . Parent=gene40 chr16 . intron 107375 109124 . - . Parent=gene40 chr16 ENCODE exon 109125 109254 . - . Parent=gene40 chr16 ENCODE CDS 109125 109254 . - . Parent=gene40 chr16 . intron 109255 120520 . - . Parent=gene40 chr16 ENCODE exon 120521 120590 . - . Parent=gene40 chr16 ENCODE CDS 120521 120590 . - . Parent=gene40 chr16 . intron 120591 128148 . - . Parent=gene40 chr16 ENCODE exon 128149 128266 . - . Parent=gene40 chr16 ENCODE CDS 128149 128266 . - . Parent=gene40 ### chr16 ENCODE gene 82789 88158 . - . ID=gene41;Name=Z69666.1-009;Name2=C16orf35 chr16 ENCODE exon 82789 83323 . - . Parent=gene41 chr16 . intron 83324 88142 . - . Parent=gene41 chr16 ENCODE exon 88143 88158 . - . Parent=gene41 ### chr16 ENCODE gene 83257 109404 . - . ID=gene42;Name=Z69666.1-008;Name2=C16orf35 chr16 ENCODE exon 83257 83323 . - . Parent=gene42 chr16 . intron 83324 88142 . - . Parent=gene42 chr16 ENCODE exon 88143 88299 . - . Parent=gene42 chr16 . intron 88300 90369 . - . Parent=gene42 chr16 ENCODE exon 90370 90507 . - . Parent=gene42 chr16 . intron 90508 100522 . - . Parent=gene42 chr16 ENCODE exon 100523 100604 . - . Parent=gene42 chr16 . intron 100605 102620 . - . Parent=gene42 chr16 ENCODE exon 102621 102774 . - . Parent=gene42 chr16 . intron 102775 107299 . - . Parent=gene42 chr16 ENCODE exon 107300 107374 . - . Parent=gene42 chr16 . intron 107375 109124 . - . Parent=gene42 chr16 ENCODE exon 109125 109254 . - . Parent=gene42 chr16 . intron 109255 109352 . - . Parent=gene42 chr16 ENCODE exon 109353 109404 . - . Parent=gene42 ### chr16 ENCODE gene 88228 128665 . - . ID=gene43;Name=Z69666.1-010;Name2=C16orf35 chr16 ENCODE exon 88228 88299 . - . Parent=gene43 chr16 . intron 88300 90369 . - . Parent=gene43 chr16 ENCODE exon 90370 90507 . - . Parent=gene43 chr16 . intron 90508 100522 . - . Parent=gene43 chr16 ENCODE exon 100523 100604 . - . Parent=gene43 chr16 . intron 100605 102620 . - . Parent=gene43 chr16 ENCODE exon 102621 102774 . - . Parent=gene43 chr16 . intron 102775 107299 . - . Parent=gene43 chr16 ENCODE exon 107300 107374 . - . Parent=gene43 chr16 . intron 107375 109124 . - . Parent=gene43 chr16 ENCODE exon 109125 109254 . - . Parent=gene43 chr16 . intron 109255 113505 . - . Parent=gene43 chr16 ENCODE exon 113506 113544 . - . Parent=gene43 chr16 . intron 113545 114935 . - . Parent=gene43 chr16 ENCODE exon 114936 115072 . - . Parent=gene43 chr16 . intron 115073 120520 . - . Parent=gene43 chr16 ENCODE exon 120521 120590 . - . Parent=gene43 chr16 . intron 120591 128640 . - . Parent=gene43 chr16 ENCODE exon 128641 128665 . - . Parent=gene43 ### chr16 ENCODE gene 100523 128676 . - . ID=gene44;Name=Z69666.1-006;Name2=C16orf35 chr16 ENCODE exon 100523 100604 . - . Parent=gene44 chr16 . intron 100605 102620 . - . Parent=gene44 chr16 ENCODE exon 102621 102774 . - . Parent=gene44 chr16 . intron 102775 109124 . - . Parent=gene44 chr16 ENCODE exon 109125 109254 . - . Parent=gene44 chr16 . intron 109255 114935 . - . Parent=gene44 chr16 ENCODE exon 114936 115072 . - . Parent=gene44 chr16 . intron 115073 120520 . - . Parent=gene44 chr16 ENCODE exon 120521 120590 . - . Parent=gene44 chr16 . intron 120591 128148 . - . Parent=gene44 chr16 ENCODE exon 128149 128333 . - . Parent=gene44 chr16 . intron 128334 128640 . - . Parent=gene44 chr16 ENCODE exon 128641 128676 . - . Parent=gene44 ### chr16 ENCODE gene 102659 128334 . - . ID=gene45;Name=Z69666.1-011;Name2=C16orf35 chr16 ENCODE exon 102659 102774 . - . Parent=gene45 chr16 ENCODE CDS 102659 102774 . - . Parent=gene45 chr16 . intron 102775 107299 . - . Parent=gene45 chr16 ENCODE exon 107300 107374 . - . Parent=gene45 chr16 ENCODE CDS 107300 107374 . - . Parent=gene45 chr16 . intron 107375 109124 . - . Parent=gene45 chr16 ENCODE exon 109125 109254 . - . Parent=gene45 chr16 ENCODE CDS 109125 109254 . - . Parent=gene45 chr16 . intron 109255 113505 . - . Parent=gene45 chr16 ENCODE exon 113506 113544 . - . Parent=gene45 chr16 ENCODE CDS 113506 113544 . - . Parent=gene45 chr16 . intron 113545 120520 . - . Parent=gene45 chr16 ENCODE exon 120521 120590 . - . Parent=gene45 chr16 ENCODE CDS 120521 120590 . - . Parent=gene45 chr16 . intron 120591 128148 . - . Parent=gene45 chr16 ENCODE CDS 128149 128266 . - . Parent=gene45 chr16 ENCODE exon 128149 128334 . - . Parent=gene45 ### chr16 ENCODE gene 142686 144502 . + . ID=gene46;Name=Z84721.1-001;Name2=HBZ chr16 ENCODE exon 142686 143003 . + . Parent=gene46 chr16 ENCODE CDS 142909 143003 . + . Parent=gene46 chr16 . intron 143004 143890 . + . Parent=gene46 chr16 ENCODE exon 143891 144095 . + . Parent=gene46 chr16 ENCODE CDS 143891 144095 . + . Parent=gene46 chr16 . intron 144096 144270 . + . Parent=gene46 chr16 ENCODE CDS 144271 144399 . + . Parent=gene46 chr16 ENCODE exon 144271 144502 . + . Parent=gene46 ### chr16 ENCODE gene 143891 156760 . + . ID=gene47;Name=Z84721.3-003;Name2=HBM chr16 ENCODE exon 143891 144095 . + . Parent=gene47 chr16 . intron 144096 156266 . + . Parent=gene47 chr16 ENCODE exon 156267 156471 . + . Parent=gene47 chr16 . intron 156472 156578 . + . Parent=gene47 chr16 ENCODE exon 156579 156760 . + . Parent=gene47 ### chr16 ENCODE gene 154481 156760 . + . ID=gene48;Name=Z84721.3-002;Name2=HBM chr16 ENCODE exon 154481 154685 . + . Parent=gene48 chr16 . intron 154686 156266 . + . Parent=gene48 chr16 ENCODE exon 156267 156471 . + . Parent=gene48 chr16 . intron 156472 156578 . + . Parent=gene48 chr16 ENCODE exon 156579 156760 . + . Parent=gene48 ### chr16 ENCODE gene 155977 156767 . + . ID=gene49;Name=Z84721.3-001;Name2=HBM chr16 ENCODE exon 155977 156088 . + . Parent=gene49 chr16 ENCODE CDS 155997 156088 . + . Parent=gene49 chr16 . intron 156089 156266 . + . Parent=gene49 chr16 ENCODE exon 156267 156471 . + . Parent=gene49 chr16 ENCODE CDS 156267 156471 . + . Parent=gene49 chr16 . intron 156472 156578 . + . Parent=gene49 chr16 ENCODE CDS 156579 156707 . + . Parent=gene49 chr16 ENCODE exon 156579 156767 . + . Parent=gene49 ### chr16 ENCODE gene 162846 163709 . + . ID=gene50;Name=Z84721.5-001;Name2=HBA2 chr16 ENCODE exon 162846 163006 . + . Parent=gene50 chr16 ENCODE CDS 162912 163006 . + . Parent=gene50 chr16 . intron 163007 163123 . + . Parent=gene50 chr16 ENCODE exon 163124 163328 . + . Parent=gene50 chr16 ENCODE CDS 163124 163328 . + . Parent=gene50 chr16 . intron 163329 163470 . + . Parent=gene50 chr16 ENCODE CDS 163471 163599 . + . Parent=gene50 chr16 ENCODE exon 163471 163709 . + . Parent=gene50 ### chr16 ENCODE gene 162889 163709 . + . ID=gene51;Name=Z84721.5-002;Name2=HBA2 chr16 ENCODE exon 162889 162957 . + . Parent=gene51 chr16 . intron 162958 163123 . + . Parent=gene51 chr16 ENCODE exon 163124 163328 . + . Parent=gene51 chr16 ENCODE CDS 163125 163328 . + . Parent=gene51 chr16 . intron 163329 163470 . + . Parent=gene51 chr16 ENCODE CDS 163471 163599 . + . Parent=gene51 chr16 ENCODE exon 163471 163709 . + . Parent=gene51 ### chr16 ENCODE gene 162893 163674 . + . ID=gene52;Name=Z84721.5-003;Name2=HBA2 chr16 ENCODE exon 162893 163328 . + . Parent=gene52 chr16 . intron 163329 163470 . + . Parent=gene52 chr16 ENCODE exon 163471 163674 . + . Parent=gene52 ### chr16 ENCODE gene 162942 163655 . + . ID=gene53;Name=Z84721.5-005;Name2=HBA2 chr16 ENCODE exon 162942 163006 . + . Parent=gene53 chr16 . intron 163007 163123 . + . Parent=gene53 chr16 ENCODE exon 163124 163247 . + . Parent=gene53 chr16 . intron 163248 163307 . + . Parent=gene53 chr16 ENCODE exon 163308 163328 . + . Parent=gene53 chr16 . intron 163329 163470 . + . Parent=gene53 chr16 ENCODE exon 163471 163655 . + . Parent=gene53 ### chr16 ENCODE gene 162943 163462 . + . ID=gene54;Name=Z84721.5-006;Name2=HBA2 chr16 ENCODE exon 162943 163006 . + . Parent=gene54 chr16 . intron 163007 163123 . + . Parent=gene54 chr16 ENCODE exon 163124 163462 . + . Parent=gene54 ### chr16 ENCODE gene 166679 167521 . + . ID=gene55;Name=Z84721.6-001;Name2=HBA1 chr16 ENCODE exon 166679 166810 . + . Parent=gene55 chr16 ENCODE CDS 166716 166810 . + . Parent=gene55 chr16 . intron 166811 166927 . + . Parent=gene55 chr16 ENCODE exon 166928 167132 . + . Parent=gene55 chr16 ENCODE CDS 166928 167132 . + . Parent=gene55 chr16 . intron 167133 167281 . + . Parent=gene55 chr16 ENCODE CDS 167282 167410 . + . Parent=gene55 chr16 ENCODE exon 167282 167521 . + . Parent=gene55 ### chr16 ENCODE gene 166697 167519 . + . ID=gene56;Name=Z84721.6-002;Name2=HBA1 chr16 ENCODE exon 166697 167132 . + . Parent=gene56 chr16 . intron 167133 167281 . + . Parent=gene56 chr16 ENCODE exon 167282 167519 . + . Parent=gene56 ### chr16 ENCODE gene 166702 167488 . + . ID=gene57;Name=Z84721.6-003;Name2=HBA1 chr16 ENCODE exon 166702 166810 . + . Parent=gene57 chr16 . intron 166811 166927 . + . Parent=gene57 chr16 ENCODE exon 166928 166967 . + . Parent=gene57 chr16 . intron 166968 167120 . + . Parent=gene57 chr16 ENCODE exon 167121 167132 . + . Parent=gene57 chr16 . intron 167133 167281 . + . Parent=gene57 chr16 ENCODE exon 167282 167488 . + . Parent=gene57 ### chr16 ENCODE gene 166703 167521 . + . ID=gene58;Name=Z84721.6-006;Name2=HBA1 chr16 ENCODE exon 166703 166761 . + . Parent=gene58 chr16 . intron 166762 166927 . + . Parent=gene58 chr16 ENCODE exon 166928 167132 . + . Parent=gene58 chr16 ENCODE CDS 166929 167132 . + . Parent=gene58 chr16 . intron 167133 167281 . + . Parent=gene58 chr16 ENCODE CDS 167282 167410 . + . Parent=gene58 chr16 ENCODE exon 167282 167521 . + . Parent=gene58 ### chr16 ENCODE gene 166746 167498 . + . ID=gene59;Name=Z84721.6-004;Name2=HBA1 chr16 ENCODE exon 166746 166810 . + . Parent=gene59 chr16 . intron 166811 166927 . + . Parent=gene59 chr16 ENCODE exon 166928 167051 . + . Parent=gene59 chr16 . intron 167052 167111 . + . Parent=gene59 chr16 ENCODE exon 167112 167132 . + . Parent=gene59 chr16 . intron 167133 167281 . + . Parent=gene59 chr16 ENCODE exon 167282 167498 . + . Parent=gene59 ### chr16 ENCODE gene 166747 167273 . + . ID=gene60;Name=Z84721.6-005;Name2=HBA1 chr16 ENCODE exon 166747 166810 . + . Parent=gene60 chr16 . intron 166811 166927 . + . Parent=gene60 chr16 ENCODE exon 166928 167273 . + . Parent=gene60 ### chr16 ENCODE gene 170452 171180 . + . ID=gene61;Name=Z84721.7-001;Name2=HBQ1 chr16 ENCODE exon 170452 170580 . + . Parent=gene61 chr16 ENCODE CDS 170486 170580 . + . Parent=gene61 chr16 . intron 170581 170664 . + . Parent=gene61 chr16 ENCODE exon 170665 170869 . + . Parent=gene61 chr16 ENCODE CDS 170665 170869 . + . Parent=gene61 chr16 . intron 170870 170978 . + . Parent=gene61 chr16 ENCODE CDS 170979 171107 . + . Parent=gene61 chr16 ENCODE exon 170979 171180 . + . Parent=gene61 ### chr16 ENCODE gene 178969 219439 . - . ID=gene62;Name=LA16c-OS12.1-006;Name2=LUC7L chr16 ENCODE exon 178969 179339 . - . Parent=gene62 chr16 . intron 179340 179967 . - . Parent=gene62 chr16 ENCODE exon 179968 180135 . - . Parent=gene62 chr16 . intron 180136 180540 . - . Parent=gene62 chr16 ENCODE exon 180541 180570 . - . Parent=gene62 chr16 . intron 180571 182926 . - . Parent=gene62 chr16 ENCODE exon 182927 183015 . - . Parent=gene62 chr16 . intron 183016 189061 . - . Parent=gene62 chr16 ENCODE exon 189062 189238 . - . Parent=gene62 chr16 . intron 189239 196003 . - . Parent=gene62 chr16 ENCODE exon 196004 196147 . - . Parent=gene62 chr16 . intron 196148 198077 . - . Parent=gene62 chr16 ENCODE exon 198078 198188 . - . Parent=gene62 chr16 . intron 198189 210648 . - . Parent=gene62 chr16 ENCODE exon 210649 210747 . - . Parent=gene62 chr16 . intron 210748 217241 . - . Parent=gene62 chr16 ENCODE exon 217242 217336 . - . Parent=gene62 chr16 . intron 217337 217986 . - . Parent=gene62 chr16 ENCODE exon 217987 219439 . - . Parent=gene62 ### chr16 ENCODE gene 178969 219450 . - . ID=gene63;Name=LA16c-OS12.1-003;Name2=LUC7L chr16 ENCODE exon 178969 179339 . - . Parent=gene63 chr16 ENCODE CDS 179198 179339 . - . Parent=gene63 chr16 . intron 179340 179967 . - . Parent=gene63 chr16 ENCODE exon 179968 180135 . - . Parent=gene63 chr16 ENCODE CDS 179968 180135 . - . Parent=gene63 chr16 . intron 180136 180540 . - . Parent=gene63 chr16 ENCODE exon 180541 180570 . - . Parent=gene63 chr16 ENCODE CDS 180541 180570 . - . Parent=gene63 chr16 . intron 180571 182926 . - . Parent=gene63 chr16 ENCODE exon 182927 183015 . - . Parent=gene63 chr16 ENCODE CDS 182927 183015 . - . Parent=gene63 chr16 . intron 183016 189061 . - . Parent=gene63 chr16 ENCODE exon 189062 189238 . - . Parent=gene63 chr16 ENCODE CDS 189062 189238 . - . Parent=gene63 chr16 . intron 189239 196003 . - . Parent=gene63 chr16 ENCODE exon 196004 196147 . - . Parent=gene63 chr16 ENCODE CDS 196004 196147 . - . Parent=gene63 chr16 . intron 196148 198077 . - . Parent=gene63 chr16 ENCODE exon 198078 198188 . - . Parent=gene63 chr16 ENCODE CDS 198078 198188 . - . Parent=gene63 chr16 . intron 198189 210648 . - . Parent=gene63 chr16 ENCODE exon 210649 210747 . - . Parent=gene63 chr16 ENCODE CDS 210649 210747 . - . Parent=gene63 chr16 . intron 210748 217241 . - . Parent=gene63 chr16 ENCODE exon 217242 217336 . - . Parent=gene63 chr16 ENCODE CDS 217242 217336 . - . Parent=gene63 chr16 . intron 217337 219278 . - . Parent=gene63 chr16 ENCODE CDS 219279 219339 . - . Parent=gene63 chr16 ENCODE exon 219279 219450 . - . Parent=gene63 ### chr16 ENCODE gene 178969 219463 . - . ID=gene64;Name=LA16c-OS12.1-001;Name2=LUC7L chr16 ENCODE exon 178969 180135 . - . Parent=gene64 chr16 ENCODE CDS 179964 180135 . - . Parent=gene64 chr16 . intron 180136 180540 . - . Parent=gene64 chr16 ENCODE exon 180541 180570 . - . Parent=gene64 chr16 ENCODE CDS 180541 180570 . - . Parent=gene64 chr16 . intron 180571 182926 . - . Parent=gene64 chr16 ENCODE exon 182927 183015 . - . Parent=gene64 chr16 ENCODE CDS 182927 183015 . - . Parent=gene64 chr16 . intron 183016 189061 . - . Parent=gene64 chr16 ENCODE exon 189062 189238 . - . Parent=gene64 chr16 ENCODE CDS 189062 189238 . - . Parent=gene64 chr16 . intron 189239 196003 . - . Parent=gene64 chr16 ENCODE exon 196004 196147 . - . Parent=gene64 chr16 ENCODE CDS 196004 196147 . - . Parent=gene64 chr16 . intron 196148 198077 . - . Parent=gene64 chr16 ENCODE exon 198078 198188 . - . Parent=gene64 chr16 ENCODE CDS 198078 198188 . - . Parent=gene64 chr16 . intron 198189 210648 . - . Parent=gene64 chr16 ENCODE exon 210649 210747 . - . Parent=gene64 chr16 ENCODE CDS 210649 210747 . - . Parent=gene64 chr16 . intron 210748 217241 . - . Parent=gene64 chr16 ENCODE exon 217242 217336 . - . Parent=gene64 chr16 ENCODE CDS 217242 217336 . - . Parent=gene64 chr16 . intron 217337 219278 . - . Parent=gene64 chr16 ENCODE CDS 219279 219339 . - . Parent=gene64 chr16 ENCODE exon 219279 219463 . - . Parent=gene64 ### chr16 ENCODE gene 178971 219463 . - . ID=gene65;Name=LA16c-OS12.1-002;Name2=LUC7L chr16 ENCODE exon 178971 179339 . - . Parent=gene65 chr16 . intron 179340 179930 . - . Parent=gene65 chr16 ENCODE exon 179931 180135 . - . Parent=gene65 chr16 ENCODE CDS 179964 180135 . - . Parent=gene65 chr16 . intron 180136 180540 . - . Parent=gene65 chr16 ENCODE exon 180541 180570 . - . Parent=gene65 chr16 ENCODE CDS 180541 180570 . - . Parent=gene65 chr16 . intron 180571 182926 . - . Parent=gene65 chr16 ENCODE exon 182927 183015 . - . Parent=gene65 chr16 ENCODE CDS 182927 183015 . - . Parent=gene65 chr16 . intron 183016 189061 . - . Parent=gene65 chr16 ENCODE exon 189062 189238 . - . Parent=gene65 chr16 ENCODE CDS 189062 189238 . - . Parent=gene65 chr16 . intron 189239 196003 . - . Parent=gene65 chr16 ENCODE exon 196004 196147 . - . Parent=gene65 chr16 ENCODE CDS 196004 196147 . - . Parent=gene65 chr16 . intron 196148 198077 . - . Parent=gene65 chr16 ENCODE exon 198078 198188 . - . Parent=gene65 chr16 ENCODE CDS 198078 198188 . - . Parent=gene65 chr16 . intron 198189 210648 . - . Parent=gene65 chr16 ENCODE exon 210649 210747 . - . Parent=gene65 chr16 ENCODE CDS 210649 210747 . - . Parent=gene65 chr16 . intron 210748 217241 . - . Parent=gene65 chr16 ENCODE exon 217242 217336 . - . Parent=gene65 chr16 ENCODE CDS 217242 217336 . - . Parent=gene65 chr16 . intron 217337 219278 . - . Parent=gene65 chr16 ENCODE CDS 219279 219339 . - . Parent=gene65 chr16 ENCODE exon 219279 219463 . - . Parent=gene65 ### chr16 ENCODE gene 178990 180595 . - . ID=gene66;Name=LA16c-OS12.1-017;Name2=LUC7L chr16 ENCODE exon 178990 179339 . - . Parent=gene66 chr16 . intron 179340 179967 . - . Parent=gene66 chr16 ENCODE exon 179968 180135 . - . Parent=gene66 chr16 . intron 180136 180540 . - . Parent=gene66 chr16 ENCODE exon 180541 180595 . - . Parent=gene66 ### chr16 ENCODE gene 178990 196087 . - . ID=gene67;Name=LA16c-OS12.1-016;Name2=LUC7L chr16 ENCODE exon 178990 179339 . - . Parent=gene67 chr16 ENCODE CDS 179198 179339 . - . Parent=gene67 chr16 . intron 179340 179967 . - . Parent=gene67 chr16 ENCODE exon 179968 180135 . - . Parent=gene67 chr16 ENCODE CDS 179968 180135 . - . Parent=gene67 chr16 . intron 180136 180540 . - . Parent=gene67 chr16 ENCODE exon 180541 180570 . - . Parent=gene67 chr16 ENCODE CDS 180541 180570 . - . Parent=gene67 chr16 . intron 180571 182926 . - . Parent=gene67 chr16 ENCODE exon 182927 183015 . - . Parent=gene67 chr16 ENCODE CDS 182927 183015 . - . Parent=gene67 chr16 . intron 183016 196003 . - . Parent=gene67 chr16 ENCODE exon 196004 196087 . - . Parent=gene67 chr16 ENCODE CDS 196004 196087 . - . Parent=gene67 ### chr16 ENCODE gene 178990 219451 . - . ID=gene68;Name=LA16c-OS12.1-005;Name2=LUC7L chr16 ENCODE exon 178990 179339 . - . Parent=gene68 chr16 . intron 179340 179967 . - . Parent=gene68 chr16 ENCODE exon 179968 180135 . - . Parent=gene68 chr16 . intron 180136 180540 . - . Parent=gene68 chr16 ENCODE exon 180541 180570 . - . Parent=gene68 chr16 . intron 180571 180661 . - . Parent=gene68 chr16 ENCODE exon 180662 180802 . - . Parent=gene68 chr16 . intron 180803 182926 . - . Parent=gene68 chr16 ENCODE exon 182927 183015 . - . Parent=gene68 chr16 . intron 183016 189061 . - . Parent=gene68 chr16 ENCODE exon 189062 189238 . - . Parent=gene68 chr16 . intron 189239 196003 . - . Parent=gene68 chr16 ENCODE exon 196004 196147 . - . Parent=gene68 chr16 . intron 196148 198077 . - . Parent=gene68 chr16 ENCODE exon 198078 198188 . - . Parent=gene68 chr16 . intron 198189 210648 . - . Parent=gene68 chr16 ENCODE exon 210649 210747 . - . Parent=gene68 chr16 . intron 210748 217241 . - . Parent=gene68 chr16 ENCODE exon 217242 218402 . - . Parent=gene68 chr16 . intron 218403 219278 . - . Parent=gene68 chr16 ENCODE exon 219279 219451 . - . Parent=gene68 ### chr16 ENCODE gene 179098 199773 . - . ID=gene69;Name=LA16c-OS12.1-008;Name2=LUC7L chr16 ENCODE exon 179098 179339 . - . Parent=gene69 chr16 . intron 179340 179967 . - . Parent=gene69 chr16 ENCODE exon 179968 180135 . - . Parent=gene69 chr16 . intron 180136 180540 . - . Parent=gene69 chr16 ENCODE exon 180541 180570 . - . Parent=gene69 chr16 . intron 180571 182926 . - . Parent=gene69 chr16 ENCODE exon 182927 183015 . - . Parent=gene69 chr16 . intron 183016 189061 . - . Parent=gene69 chr16 ENCODE exon 189062 189238 . - . Parent=gene69 chr16 . intron 189239 196003 . - . Parent=gene69 chr16 ENCODE exon 196004 196147 . - . Parent=gene69 chr16 . intron 196148 198077 . - . Parent=gene69 chr16 ENCODE exon 198078 198188 . - . Parent=gene69 chr16 . intron 198189 198600 . - . Parent=gene69 chr16 ENCODE exon 198601 199773 . - . Parent=gene69 ### chr16 ENCODE gene 179115 180549 . - . ID=gene70;Name=LA16c-OS12.1-018;Name2=LUC7L chr16 ENCODE exon 179115 179339 . - . Parent=gene70 chr16 . intron 179340 179946 . - . Parent=gene70 chr16 ENCODE exon 179947 180135 . - . Parent=gene70 chr16 . intron 180136 180540 . - . Parent=gene70 chr16 ENCODE exon 180541 180549 . - . Parent=gene70 ### chr16 ENCODE gene 179896 217686 . - . ID=gene71;Name=LA16c-OS12.1-007;Name2=LUC7L chr16 ENCODE exon 179896 180135 . - . Parent=gene71 chr16 ENCODE CDS 179964 180135 . - . Parent=gene71 chr16 . intron 180136 180540 . - . Parent=gene71 chr16 ENCODE exon 180541 180570 . - . Parent=gene71 chr16 ENCODE CDS 180541 180570 . - . Parent=gene71 chr16 . intron 180571 182926 . - . Parent=gene71 chr16 ENCODE exon 182927 183015 . - . Parent=gene71 chr16 ENCODE CDS 182927 183015 . - . Parent=gene71 chr16 . intron 183016 189061 . - . Parent=gene71 chr16 ENCODE exon 189062 189238 . - . Parent=gene71 chr16 ENCODE CDS 189062 189238 . - . Parent=gene71 chr16 . intron 189239 196003 . - . Parent=gene71 chr16 ENCODE exon 196004 196147 . - . Parent=gene71 chr16 ENCODE CDS 196004 196147 . - . Parent=gene71 chr16 . intron 196148 198077 . - . Parent=gene71 chr16 ENCODE exon 198078 198188 . - . Parent=gene71 chr16 ENCODE CDS 198078 198188 . - . Parent=gene71 chr16 . intron 198189 210648 . - . Parent=gene71 chr16 ENCODE CDS 210649 210744 . - . Parent=gene71 chr16 ENCODE exon 210649 210747 . - . Parent=gene71 chr16 . intron 210748 217241 . - . Parent=gene71 chr16 ENCODE exon 217242 217686 . - . Parent=gene71 ### chr16 ENCODE gene 179896 219434 . - . ID=gene72;Name=LA16c-OS12.1-004;Name2=LUC7L chr16 ENCODE exon 179896 180135 . - . Parent=gene72 chr16 . intron 180136 180540 . - . Parent=gene72 chr16 ENCODE exon 180541 180570 . - . Parent=gene72 chr16 . intron 180571 182926 . - . Parent=gene72 chr16 ENCODE exon 182927 183015 . - . Parent=gene72 chr16 . intron 183016 189061 . - . Parent=gene72 chr16 ENCODE exon 189062 189238 . - . Parent=gene72 chr16 . intron 189239 196003 . - . Parent=gene72 chr16 ENCODE exon 196004 196147 . - . Parent=gene72 chr16 . intron 196148 198077 . - . Parent=gene72 chr16 ENCODE exon 198078 198188 . - . Parent=gene72 chr16 . intron 198189 210648 . - . Parent=gene72 chr16 ENCODE exon 210649 210747 . - . Parent=gene72 chr16 . intron 210748 217241 . - . Parent=gene72 chr16 ENCODE exon 217242 217336 . - . Parent=gene72 chr16 . intron 217337 218332 . - . Parent=gene72 chr16 ENCODE exon 218333 218402 . - . Parent=gene72 chr16 . intron 218403 219278 . - . Parent=gene72 chr16 ENCODE exon 219279 219434 . - . Parent=gene72 ### chr16 ENCODE gene 180001 198508 . - . ID=gene73;Name=LA16c-OS12.1-014;Name2=LUC7L chr16 ENCODE exon 180001 180135 . - . Parent=gene73 chr16 . intron 180136 180540 . - . Parent=gene73 chr16 ENCODE exon 180541 180570 . - . Parent=gene73 chr16 . intron 180571 182926 . - . Parent=gene73 chr16 ENCODE exon 182927 183015 . - . Parent=gene73 chr16 . intron 183016 189061 . - . Parent=gene73 chr16 ENCODE exon 189062 189238 . - . Parent=gene73 chr16 . intron 189239 196003 . - . Parent=gene73 chr16 ENCODE exon 196004 196147 . - . Parent=gene73 chr16 . intron 196148 198077 . - . Parent=gene73 chr16 ENCODE exon 198078 198508 . - . Parent=gene73 ### chr16 ENCODE gene 180122 219374 . - . ID=gene74;Name=LA16c-OS12.1-009;Name2=LUC7L chr16 ENCODE exon 180122 180135 . - . Parent=gene74 chr16 . intron 180136 180540 . - . Parent=gene74 chr16 ENCODE exon 180541 180570 . - . Parent=gene74 chr16 . intron 180571 182926 . - . Parent=gene74 chr16 ENCODE exon 182927 183015 . - . Parent=gene74 chr16 . intron 183016 189061 . - . Parent=gene74 chr16 ENCODE exon 189062 189238 . - . Parent=gene74 chr16 . intron 189239 196003 . - . Parent=gene74 chr16 ENCODE exon 196004 196147 . - . Parent=gene74 chr16 . intron 196148 198077 . - . Parent=gene74 chr16 ENCODE exon 198078 198188 . - . Parent=gene74 chr16 . intron 198189 198600 . - . Parent=gene74 chr16 ENCODE exon 198601 198664 . - . Parent=gene74 chr16 . intron 198665 210648 . - . Parent=gene74 chr16 ENCODE exon 210649 210747 . - . Parent=gene74 chr16 . intron 210748 217241 . - . Parent=gene74 chr16 ENCODE exon 217242 217336 . - . Parent=gene74 chr16 . intron 217337 218332 . - . Parent=gene74 chr16 ENCODE exon 218333 218402 . - . Parent=gene74 chr16 . intron 218403 219278 . - . Parent=gene74 chr16 ENCODE exon 219279 219374 . - . Parent=gene74 ### chr16 ENCODE gene 180541 219422 . - . ID=gene75;Name=LA16c-OS12.1-015;Name2=LUC7L chr16 ENCODE exon 180541 180570 . - . Parent=gene75 chr16 . intron 180571 182926 . - . Parent=gene75 chr16 ENCODE exon 182927 183015 . - . Parent=gene75 chr16 . intron 183016 189061 . - . Parent=gene75 chr16 ENCODE exon 189062 189238 . - . Parent=gene75 chr16 . intron 189239 196003 . - . Parent=gene75 chr16 ENCODE exon 196004 196147 . - . Parent=gene75 chr16 . intron 196148 198077 . - . Parent=gene75 chr16 ENCODE exon 198078 198188 . - . Parent=gene75 chr16 . intron 198189 219278 . - . Parent=gene75 chr16 ENCODE exon 219279 219422 . - . Parent=gene75 ### chr16 ENCODE gene 196004 217656 . - . ID=gene76;Name=LA16c-OS12.1-012;Name2=LUC7L chr16 ENCODE exon 196004 196147 . - . Parent=gene76 chr16 . intron 196148 198077 . - . Parent=gene76 chr16 ENCODE exon 198078 198188 . - . Parent=gene76 chr16 . intron 198189 198600 . - . Parent=gene76 chr16 ENCODE exon 198601 198664 . - . Parent=gene76 chr16 . intron 198665 210648 . - . Parent=gene76 chr16 ENCODE exon 210649 210747 . - . Parent=gene76 chr16 . intron 210748 217241 . - . Parent=gene76 chr16 ENCODE exon 217242 217656 . - . Parent=gene76 ### chr16 ENCODE gene 198633 219142 . - . ID=gene77;Name=LA16c-OS12.1-010;Name2=LUC7L chr16 ENCODE exon 198633 198664 . - . Parent=gene77 chr16 . intron 198665 210648 . - . Parent=gene77 chr16 ENCODE exon 210649 210747 . - . Parent=gene77 chr16 . intron 210748 217241 . - . Parent=gene77 chr16 ENCODE exon 217242 217336 . - . Parent=gene77 chr16 . intron 217337 218700 . - . Parent=gene77 chr16 ENCODE exon 218701 219142 . - . Parent=gene77 ### chr16 ENCODE gene 210171 217614 . - . ID=gene78;Name=LA16c-OS12.1-013;Name2=LUC7L chr16 ENCODE exon 210171 210747 . - . Parent=gene78 chr16 . intron 210748 217241 . - . Parent=gene78 chr16 ENCODE exon 217242 217614 . - . Parent=gene78 ### chr16 ENCODE gene 218124 218990 . - . ID=gene79;Name=LA16c-OS12.1-011;Name2=LUC7L chr16 ENCODE exon 218124 218402 . - . Parent=gene79 chr16 . intron 218403 218700 . - . Parent=gene79 chr16 ENCODE exon 218701 218990 . - . Parent=gene79 ### chr16 ENCODE gene 224546 256125 . + . ID=gene80;Name=AC004754.1-001;Name2=ITFG3 chr16 ENCODE exon 224546 224857 . + . Parent=gene80 chr16 . intron 224858 239548 . + . Parent=gene80 chr16 ENCODE exon 239549 239654 . + . Parent=gene80 chr16 . intron 239655 244380 . + . Parent=gene80 chr16 ENCODE exon 244381 244681 . + . Parent=gene80 chr16 ENCODE CDS 244414 244681 . + . Parent=gene80 chr16 . intron 244682 249482 . + . Parent=gene80 chr16 ENCODE exon 249483 249599 . + . Parent=gene80 chr16 ENCODE CDS 249483 249599 . + . Parent=gene80 chr16 . intron 249600 249968 . + . Parent=gene80 chr16 ENCODE exon 249969 250160 . + . Parent=gene80 chr16 ENCODE CDS 249969 250160 . + . Parent=gene80 chr16 . intron 250161 251383 . + . Parent=gene80 chr16 ENCODE exon 251384 251514 . + . Parent=gene80 chr16 ENCODE CDS 251384 251514 . + . Parent=gene80 chr16 . intron 251515 252092 . + . Parent=gene80 chr16 ENCODE exon 252093 252225 . + . Parent=gene80 chr16 ENCODE CDS 252093 252225 . + . Parent=gene80 chr16 . intron 252226 252423 . + . Parent=gene80 chr16 ENCODE exon 252424 252553 . + . Parent=gene80 chr16 ENCODE CDS 252424 252553 . + . Parent=gene80 chr16 . intron 252554 253261 . + . Parent=gene80 chr16 ENCODE exon 253262 253402 . + . Parent=gene80 chr16 ENCODE CDS 253262 253402 . + . Parent=gene80 chr16 . intron 253403 253699 . + . Parent=gene80 chr16 ENCODE exon 253700 253775 . + . Parent=gene80 chr16 ENCODE CDS 253700 253775 . + . Parent=gene80 chr16 . intron 253776 254015 . + . Parent=gene80 chr16 ENCODE exon 254016 254171 . + . Parent=gene80 chr16 ENCODE CDS 254016 254171 . + . Parent=gene80 chr16 . intron 254172 254613 . + . Parent=gene80 chr16 ENCODE exon 254614 254716 . + . Parent=gene80 chr16 ENCODE CDS 254614 254716 . + . Parent=gene80 chr16 . intron 254717 254810 . + . Parent=gene80 chr16 ENCODE CDS 254811 255022 . + . Parent=gene80 chr16 ENCODE exon 254811 256125 . + . Parent=gene80 ### chr16 ENCODE gene 224802 258971 . + . ID=gene81;Name=AC004754.1-002;Name2=ITFG3 chr16 ENCODE exon 224802 224857 . + . Parent=gene81 chr16 . intron 224858 239548 . + . Parent=gene81 chr16 ENCODE exon 239549 239654 . + . Parent=gene81 chr16 . intron 239655 244380 . + . Parent=gene81 chr16 ENCODE exon 244381 244681 . + . Parent=gene81 chr16 ENCODE CDS 244414 244681 . + . Parent=gene81 chr16 . intron 244682 249482 . + . Parent=gene81 chr16 ENCODE exon 249483 249599 . + . Parent=gene81 chr16 ENCODE CDS 249483 249599 . + . Parent=gene81 chr16 . intron 249600 249968 . + . Parent=gene81 chr16 ENCODE exon 249969 250160 . + . Parent=gene81 chr16 ENCODE CDS 249969 250160 . + . Parent=gene81 chr16 . intron 250161 251383 . + . Parent=gene81 chr16 ENCODE exon 251384 251514 . + . Parent=gene81 chr16 ENCODE CDS 251384 251514 . + . Parent=gene81 chr16 . intron 251515 252092 . + . Parent=gene81 chr16 ENCODE exon 252093 252225 . + . Parent=gene81 chr16 ENCODE CDS 252093 252225 . + . Parent=gene81 chr16 . intron 252226 252423 . + . Parent=gene81 chr16 ENCODE exon 252424 252553 . + . Parent=gene81 chr16 ENCODE CDS 252424 252553 . + . Parent=gene81 chr16 . intron 252554 253261 . + . Parent=gene81 chr16 ENCODE exon 253262 253402 . + . Parent=gene81 chr16 ENCODE CDS 253262 253402 . + . Parent=gene81 chr16 . intron 253403 253699 . + . Parent=gene81 chr16 ENCODE exon 253700 253775 . + . Parent=gene81 chr16 ENCODE CDS 253700 253775 . + . Parent=gene81 chr16 . intron 253776 254015 . + . Parent=gene81 chr16 ENCODE exon 254016 254171 . + . Parent=gene81 chr16 ENCODE CDS 254016 254171 . + . Parent=gene81 chr16 . intron 254172 254613 . + . Parent=gene81 chr16 ENCODE exon 254614 254716 . + . Parent=gene81 chr16 ENCODE CDS 254614 254716 . + . Parent=gene81 chr16 . intron 254717 254810 . + . Parent=gene81 chr16 ENCODE exon 254811 254908 . + . Parent=gene81 chr16 ENCODE CDS 254811 254908 . + . Parent=gene81 chr16 . intron 254909 258775 . + . Parent=gene81 chr16 ENCODE CDS 258776 258853 . + . Parent=gene81 chr16 ENCODE exon 258776 258971 . + . Parent=gene81 ### chr16 ENCODE gene 224818 249521 . + . ID=gene82;Name=AC004754.1-017;Name2=ITFG3 chr16 ENCODE exon 224818 224857 . + . Parent=gene82 chr16 . intron 224858 239548 . + . Parent=gene82 chr16 ENCODE exon 239549 239654 . + . Parent=gene82 chr16 . intron 239655 243832 . + . Parent=gene82 chr16 ENCODE exon 243833 243929 . + . Parent=gene82 chr16 . intron 243930 244380 . + . Parent=gene82 chr16 ENCODE exon 244381 244681 . + . Parent=gene82 chr16 ENCODE CDS 244414 244681 . + . Parent=gene82 chr16 . intron 244682 249482 . + . Parent=gene82 chr16 ENCODE CDS 249483 249504 . + . Parent=gene82 chr16 ENCODE exon 249483 249521 . + . Parent=gene82 ### chr16 ENCODE gene 224827 244565 . + . ID=gene83;Name=AC004754.1-005;Name2=ITFG3 chr16 ENCODE exon 224827 224857 . + . Parent=gene83 chr16 . intron 224858 239548 . + . Parent=gene83 chr16 ENCODE exon 239549 239654 . + . Parent=gene83 chr16 . intron 239655 244328 . + . Parent=gene83 chr16 ENCODE exon 244329 244565 . + . Parent=gene83 chr16 ENCODE CDS 244414 244565 . + . Parent=gene83 ### chr16 ENCODE gene 224829 250003 . + . ID=gene84;Name=AC004754.1-006;Name2=ITFG3 chr16 ENCODE exon 224829 224857 . + . Parent=gene84 chr16 . intron 224858 239548 . + . Parent=gene84 chr16 ENCODE exon 239549 239654 . + . Parent=gene84 chr16 . intron 239655 244387 . + . Parent=gene84 chr16 ENCODE exon 244388 244681 . + . Parent=gene84 chr16 ENCODE CDS 244414 244681 . + . Parent=gene84 chr16 . intron 244682 249482 . + . Parent=gene84 chr16 ENCODE exon 249483 249599 . + . Parent=gene84 chr16 ENCODE CDS 249483 249599 . + . Parent=gene84 chr16 . intron 249600 249995 . + . Parent=gene84 chr16 ENCODE exon 249996 250003 . + . Parent=gene84 chr16 ENCODE CDS 249996 250003 . + . Parent=gene84 ### chr16 ENCODE gene 224830 244674 . + . ID=gene85;Name=AC004754.1-007;Name2=ITFG3 chr16 ENCODE exon 224830 224857 . + . Parent=gene85 chr16 . intron 224858 239548 . + . Parent=gene85 chr16 ENCODE exon 239549 239658 . + . Parent=gene85 chr16 . intron 239659 244380 . + . Parent=gene85 chr16 ENCODE exon 244381 244674 . + . Parent=gene85 chr16 ENCODE CDS 244414 244674 . + . Parent=gene85 ### chr16 ENCODE gene 224834 251514 . + . ID=gene86;Name=AC004754.1-004;Name2=ITFG3 chr16 ENCODE exon 224834 224857 . + . Parent=gene86 chr16 . intron 224858 236956 . + . Parent=gene86 chr16 ENCODE exon 236957 237069 . + . Parent=gene86 chr16 . intron 237070 239548 . + . Parent=gene86 chr16 ENCODE exon 239549 239654 . + . Parent=gene86 chr16 . intron 239655 244380 . + . Parent=gene86 chr16 ENCODE exon 244381 244681 . + . Parent=gene86 chr16 ENCODE CDS 244414 244681 . + . Parent=gene86 chr16 . intron 244682 249482 . + . Parent=gene86 chr16 ENCODE exon 249483 249599 . + . Parent=gene86 chr16 ENCODE CDS 249483 249599 . + . Parent=gene86 chr16 . intron 249600 249968 . + . Parent=gene86 chr16 ENCODE exon 249969 250160 . + . Parent=gene86 chr16 ENCODE CDS 249969 250160 . + . Parent=gene86 chr16 . intron 250161 251383 . + . Parent=gene86 chr16 ENCODE exon 251384 251514 . + . Parent=gene86 chr16 ENCODE CDS 251384 251514 . + . Parent=gene86 ### chr16 ENCODE gene 224838 252139 . + . ID=gene87;Name=AC004754.1-010;Name2=ITFG3 chr16 ENCODE exon 224838 224857 . + . Parent=gene87 chr16 . intron 224858 239548 . + . Parent=gene87 chr16 ENCODE exon 239549 239654 . + . Parent=gene87 chr16 . intron 239655 244380 . + . Parent=gene87 chr16 ENCODE exon 244381 244681 . + . Parent=gene87 chr16 ENCODE CDS 244414 244681 . + . Parent=gene87 chr16 . intron 244682 249482 . + . Parent=gene87 chr16 ENCODE exon 249483 249599 . + . Parent=gene87 chr16 ENCODE CDS 249483 249599 . + . Parent=gene87 chr16 . intron 249600 249995 . + . Parent=gene87 chr16 ENCODE exon 249996 250160 . + . Parent=gene87 chr16 ENCODE CDS 249996 250160 . + . Parent=gene87 chr16 . intron 250161 251383 . + . Parent=gene87 chr16 ENCODE exon 251384 251514 . + . Parent=gene87 chr16 ENCODE CDS 251384 251514 . + . Parent=gene87 chr16 . intron 251515 252092 . + . Parent=gene87 chr16 ENCODE exon 252093 252139 . + . Parent=gene87 chr16 ENCODE CDS 252093 252139 . + . Parent=gene87 ### chr16 ENCODE gene 224844 251505 . + . ID=gene88;Name=AC004754.1-009;Name2=ITFG3 chr16 ENCODE exon 224844 224857 . + . Parent=gene88 chr16 . intron 224858 238243 . + . Parent=gene88 chr16 ENCODE exon 238244 238397 . + . Parent=gene88 chr16 . intron 238398 239548 . + . Parent=gene88 chr16 ENCODE exon 239549 239654 . + . Parent=gene88 chr16 . intron 239655 244380 . + . Parent=gene88 chr16 ENCODE exon 244381 244681 . + . Parent=gene88 chr16 ENCODE CDS 244414 244681 . + . Parent=gene88 chr16 . intron 244682 249482 . + . Parent=gene88 chr16 ENCODE exon 249483 249599 . + . Parent=gene88 chr16 ENCODE CDS 249483 249599 . + . Parent=gene88 chr16 . intron 249600 249968 . + . Parent=gene88 chr16 ENCODE exon 249969 250160 . + . Parent=gene88 chr16 ENCODE CDS 249969 250160 . + . Parent=gene88 chr16 . intron 250161 251383 . + . Parent=gene88 chr16 ENCODE exon 251384 251505 . + . Parent=gene88 chr16 ENCODE CDS 251384 251505 . + . Parent=gene88 ### chr16 ENCODE gene 224846 256120 . + . ID=gene89;Name=AC004754.1-003;Name2=ITFG3 chr16 ENCODE exon 224846 224857 . + . Parent=gene89 chr16 . intron 224858 239548 . + . Parent=gene89 chr16 ENCODE exon 239549 239654 . + . Parent=gene89 chr16 . intron 239655 244387 . + . Parent=gene89 chr16 ENCODE exon 244388 244681 . + . Parent=gene89 chr16 ENCODE CDS 244414 244681 . + . Parent=gene89 chr16 . intron 244682 249482 . + . Parent=gene89 chr16 ENCODE exon 249483 249599 . + . Parent=gene89 chr16 ENCODE CDS 249483 249599 . + . Parent=gene89 chr16 . intron 249600 249968 . + . Parent=gene89 chr16 ENCODE exon 249969 250160 . + . Parent=gene89 chr16 ENCODE CDS 249969 250160 . + . Parent=gene89 chr16 . intron 250161 251383 . + . Parent=gene89 chr16 ENCODE exon 251384 251514 . + . Parent=gene89 chr16 ENCODE CDS 251384 251514 . + . Parent=gene89 chr16 . intron 251515 252092 . + . Parent=gene89 chr16 ENCODE exon 252093 252225 . + . Parent=gene89 chr16 ENCODE CDS 252093 252225 . + . Parent=gene89 chr16 . intron 252226 252423 . + . Parent=gene89 chr16 ENCODE exon 252424 252553 . + . Parent=gene89 chr16 ENCODE CDS 252424 252553 . + . Parent=gene89 chr16 . intron 252554 253261 . + . Parent=gene89 chr16 ENCODE exon 253262 253402 . + . Parent=gene89 chr16 ENCODE CDS 253262 253402 . + . Parent=gene89 chr16 . intron 253403 253699 . + . Parent=gene89 chr16 ENCODE exon 253700 253775 . + . Parent=gene89 chr16 ENCODE CDS 253700 253775 . + . Parent=gene89 chr16 . intron 253776 254015 . + . Parent=gene89 chr16 ENCODE exon 254016 254171 . + . Parent=gene89 chr16 ENCODE CDS 254016 254171 . + . Parent=gene89 chr16 . intron 254172 254613 . + . Parent=gene89 chr16 ENCODE exon 254614 254716 . + . Parent=gene89 chr16 ENCODE CDS 254614 254716 . + . Parent=gene89 chr16 . intron 254717 254810 . + . Parent=gene89 chr16 ENCODE CDS 254811 255022 . + . Parent=gene89 chr16 ENCODE exon 254811 256120 . + . Parent=gene89 ### chr16 ENCODE gene 224847 250009 . + . ID=gene90;Name=AC004754.1-016;Name2=ITFG3 chr16 ENCODE exon 224847 224857 . + . Parent=gene90 chr16 . intron 224858 239548 . + . Parent=gene90 chr16 ENCODE exon 239549 239654 . + . Parent=gene90 chr16 . intron 239655 244380 . + . Parent=gene90 chr16 ENCODE exon 244381 244681 . + . Parent=gene90 chr16 ENCODE CDS 244414 244681 . + . Parent=gene90 chr16 . intron 244682 249968 . + . Parent=gene90 chr16 ENCODE exon 249969 250009 . + . Parent=gene90 chr16 ENCODE CDS 249969 250009 . + . Parent=gene90 ### chr16 ENCODE gene 230188 244619 . + . ID=gene91;Name=AC004754.1-008;Name2=ITFG3 chr16 ENCODE exon 230188 230276 . + . Parent=gene91 chr16 . intron 230277 239548 . + . Parent=gene91 chr16 ENCODE exon 239549 239654 . + . Parent=gene91 chr16 . intron 239655 243832 . + . Parent=gene91 chr16 ENCODE exon 243833 243929 . + . Parent=gene91 chr16 . intron 243930 244328 . + . Parent=gene91 chr16 ENCODE exon 244329 244619 . + . Parent=gene91 chr16 ENCODE CDS 244414 244619 . + . Parent=gene91 ### chr16 ENCODE gene 244122 249520 . + . ID=gene92;Name=AC004754.1-011;Name2=ITFG3 chr16 ENCODE exon 244122 244681 . + . Parent=gene92 chr16 . intron 244682 249482 . + . Parent=gene92 chr16 ENCODE exon 249483 249520 . + . Parent=gene92 ### chr16 ENCODE gene 244628 250788 . + . ID=gene93;Name=AC004754.1-013;Name2=ITFG3 chr16 ENCODE exon 244628 244681 . + . Parent=gene93 chr16 ENCODE CDS 244628 244681 . + . Parent=gene93 chr16 . intron 244682 249482 . + . Parent=gene93 chr16 ENCODE exon 249483 249599 . + . Parent=gene93 chr16 ENCODE CDS 249483 249599 . + . Parent=gene93 chr16 . intron 249600 249968 . + . Parent=gene93 chr16 ENCODE exon 249969 250160 . + . Parent=gene93 chr16 ENCODE CDS 249969 250160 . + . Parent=gene93 chr16 . intron 250161 250412 . + . Parent=gene93 chr16 ENCODE CDS 250413 250753 . + . Parent=gene93 chr16 ENCODE exon 250413 250788 . + . Parent=gene93 ### chr16 ENCODE gene 251205 252244 . + . ID=gene94;Name=AC004754.1-012;Name2=ITFG3 chr16 ENCODE exon 251205 251514 . + . Parent=gene94 chr16 . intron 251515 252092 . + . Parent=gene94 chr16 ENCODE exon 252093 252244 . + . Parent=gene94 ### chr16 ENCODE gene 252508 255090 . + . ID=gene95;Name=AC004754.1-014;Name2=ITFG3 chr16 ENCODE exon 252508 252553 . + . Parent=gene95 chr16 ENCODE CDS 252508 252553 . + . Parent=gene95 chr16 . intron 252554 253261 . + . Parent=gene95 chr16 ENCODE exon 253262 253402 . + . Parent=gene95 chr16 ENCODE CDS 253262 253402 . + . Parent=gene95 chr16 . intron 253403 253699 . + . Parent=gene95 chr16 ENCODE exon 253700 253775 . + . Parent=gene95 chr16 ENCODE CDS 253700 253775 . + . Parent=gene95 chr16 . intron 253776 254613 . + . Parent=gene95 chr16 ENCODE exon 254614 254716 . + . Parent=gene95 chr16 ENCODE CDS 254614 254716 . + . Parent=gene95 chr16 . intron 254717 254810 . + . Parent=gene95 chr16 ENCODE CDS 254811 255022 . + . Parent=gene95 chr16 ENCODE exon 254811 255090 . + . Parent=gene95 ### chr16 ENCODE gene 254624 256120 . + . ID=gene96;Name=AC004754.1-015;Name2=ITFG3 chr16 ENCODE exon 254624 254716 . + . Parent=gene96 chr16 . intron 254717 254810 . + . Parent=gene96 chr16 ENCODE exon 254811 254893 . + . Parent=gene96 chr16 . intron 254894 255941 . + . Parent=gene96 chr16 ENCODE exon 255942 256120 . + . Parent=gene96 ### chr16 ENCODE gene 258301 265930 . - . ID=gene97;Name=AC004754.2-001;Name2=RGS11 chr16 ENCODE exon 258301 259383 . - . Parent=gene97 chr16 ENCODE CDS 259269 259383 . - . Parent=gene97 chr16 . intron 259384 259502 . - . Parent=gene97 chr16 ENCODE exon 259503 259585 . - . Parent=gene97 chr16 ENCODE CDS 259503 259585 . - . Parent=gene97 chr16 . intron 259586 260522 . - . Parent=gene97 chr16 ENCODE exon 260523 260661 . - . Parent=gene97 chr16 ENCODE CDS 260523 260661 . - . Parent=gene97 chr16 . intron 260662 260743 . - . Parent=gene97 chr16 ENCODE exon 260744 260831 . - . Parent=gene97 chr16 ENCODE CDS 260744 260831 . - . Parent=gene97 chr16 . intron 260832 260983 . - . Parent=gene97 chr16 ENCODE exon 260984 261099 . - . Parent=gene97 chr16 ENCODE CDS 260984 261099 . - . Parent=gene97 chr16 . intron 261100 261201 . - . Parent=gene97 chr16 ENCODE exon 261202 261315 . - . Parent=gene97 chr16 ENCODE CDS 261202 261315 . - . Parent=gene97 chr16 . intron 261316 261398 . - . Parent=gene97 chr16 ENCODE exon 261399 261460 . - . Parent=gene97 chr16 ENCODE CDS 261399 261460 . - . Parent=gene97 chr16 . intron 261461 261539 . - . Parent=gene97 chr16 ENCODE exon 261540 261569 . - . Parent=gene97 chr16 ENCODE CDS 261540 261569 . - . Parent=gene97 chr16 . intron 261570 262862 . - . Parent=gene97 chr16 ENCODE exon 262863 262931 . - . Parent=gene97 chr16 ENCODE CDS 262863 262931 . - . Parent=gene97 chr16 . intron 262932 263475 . - . Parent=gene97 chr16 ENCODE exon 263476 263557 . - . Parent=gene97 chr16 ENCODE CDS 263476 263557 . - . Parent=gene97 chr16 . intron 263558 263760 . - . Parent=gene97 chr16 ENCODE exon 263761 263837 . - . Parent=gene97 chr16 ENCODE CDS 263761 263837 . - . Parent=gene97 chr16 . intron 263838 264043 . - . Parent=gene97 chr16 ENCODE exon 264044 264102 . - . Parent=gene97 chr16 ENCODE CDS 264044 264102 . - . Parent=gene97 chr16 . intron 264103 264214 . - . Parent=gene97 chr16 ENCODE exon 264215 264266 . - . Parent=gene97 chr16 ENCODE CDS 264215 264266 . - . Parent=gene97 chr16 . intron 264267 264976 . - . Parent=gene97 chr16 ENCODE exon 264977 265083 . - . Parent=gene97 chr16 ENCODE CDS 264977 265083 . - . Parent=gene97 chr16 . intron 265084 265283 . - . Parent=gene97 chr16 ENCODE exon 265284 265334 . - . Parent=gene97 chr16 ENCODE CDS 265284 265334 . - . Parent=gene97 chr16 . intron 265335 265402 . - . Parent=gene97 chr16 ENCODE exon 265403 265499 . - . Parent=gene97 chr16 ENCODE CDS 265403 265499 . - . Parent=gene97 chr16 . intron 265500 265849 . - . Parent=gene97 chr16 ENCODE CDS 265850 265912 . - . Parent=gene97 chr16 ENCODE exon 265850 265930 . - . Parent=gene97 ### chr16 ENCODE gene 258301 265941 . - . ID=gene98;Name=AC004754.2-002;Name2=RGS11 chr16 ENCODE exon 258301 259383 . - . Parent=gene98 chr16 . intron 259384 259502 . - . Parent=gene98 chr16 ENCODE exon 259503 259585 . - . Parent=gene98 chr16 . intron 259586 260522 . - . Parent=gene98 chr16 ENCODE exon 260523 260661 . - . Parent=gene98 chr16 . intron 260662 260743 . - . Parent=gene98 chr16 ENCODE exon 260744 260831 . - . Parent=gene98 chr16 . intron 260832 260983 . - . Parent=gene98 chr16 ENCODE exon 260984 261099 . - . Parent=gene98 chr16 . intron 261100 261201 . - . Parent=gene98 chr16 ENCODE exon 261202 261315 . - . Parent=gene98 chr16 . intron 261316 261398 . - . Parent=gene98 chr16 ENCODE exon 261399 261460 . - . Parent=gene98 chr16 . intron 261461 261539 . - . Parent=gene98 chr16 ENCODE exon 261540 261569 . - . Parent=gene98 chr16 . intron 261570 263475 . - . Parent=gene98 chr16 ENCODE exon 263476 263557 . - . Parent=gene98 chr16 . intron 263558 263760 . - . Parent=gene98 chr16 ENCODE exon 263761 263837 . - . Parent=gene98 chr16 . intron 263838 264043 . - . Parent=gene98 chr16 ENCODE exon 264044 264102 . - . Parent=gene98 chr16 . intron 264103 264214 . - . Parent=gene98 chr16 ENCODE exon 264215 264266 . - . Parent=gene98 chr16 . intron 264267 265283 . - . Parent=gene98 chr16 ENCODE exon 265284 265334 . - . Parent=gene98 chr16 . intron 265335 265402 . - . Parent=gene98 chr16 ENCODE exon 265403 265499 . - . Parent=gene98 chr16 . intron 265500 265838 . - . Parent=gene98 chr16 ENCODE exon 265839 265941 . - . Parent=gene98 ### chr16 ENCODE gene 258311 265915 . - . ID=gene99;Name=AC004754.2-003;Name2=RGS11 chr16 ENCODE exon 258311 259383 . - . Parent=gene99 chr16 ENCODE CDS 259269 259383 . - . Parent=gene99 chr16 . intron 259384 259502 . - . Parent=gene99 chr16 ENCODE exon 259503 259585 . - . Parent=gene99 chr16 ENCODE CDS 259503 259585 . - . Parent=gene99 chr16 . intron 259586 260522 . - . Parent=gene99 chr16 ENCODE exon 260523 260661 . - . Parent=gene99 chr16 ENCODE CDS 260523 260661 . - . Parent=gene99 chr16 . intron 260662 260743 . - . Parent=gene99 chr16 ENCODE exon 260744 260831 . - . Parent=gene99 chr16 ENCODE CDS 260744 260831 . - . Parent=gene99 chr16 . intron 260832 260983 . - . Parent=gene99 chr16 ENCODE exon 260984 261099 . - . Parent=gene99 chr16 ENCODE CDS 260984 261099 . - . Parent=gene99 chr16 . intron 261100 261201 . - . Parent=gene99 chr16 ENCODE exon 261202 261315 . - . Parent=gene99 chr16 ENCODE CDS 261202 261315 . - . Parent=gene99 chr16 . intron 261316 261398 . - . Parent=gene99 chr16 ENCODE exon 261399 261460 . - . Parent=gene99 chr16 ENCODE CDS 261399 261460 . - . Parent=gene99 chr16 . intron 261461 261539 . - . Parent=gene99 chr16 ENCODE exon 261540 261569 . - . Parent=gene99 chr16 ENCODE CDS 261540 261569 . - . Parent=gene99 chr16 . intron 261570 262862 . - . Parent=gene99 chr16 ENCODE exon 262863 262931 . - . Parent=gene99 chr16 ENCODE CDS 262863 262931 . - . Parent=gene99 chr16 . intron 262932 263475 . - . Parent=gene99 chr16 ENCODE exon 263476 263557 . - . Parent=gene99 chr16 ENCODE CDS 263476 263557 . - . Parent=gene99 chr16 . intron 263558 263760 . - . Parent=gene99 chr16 ENCODE exon 263761 263837 . - . Parent=gene99 chr16 ENCODE CDS 263761 263837 . - . Parent=gene99 chr16 . intron 263838 264043 . - . Parent=gene99 chr16 ENCODE exon 264044 264102 . - . Parent=gene99 chr16 ENCODE CDS 264044 264102 . - . Parent=gene99 chr16 . intron 264103 264214 . - . Parent=gene99 chr16 ENCODE exon 264215 264266 . - . Parent=gene99 chr16 ENCODE CDS 264215 264266 . - . Parent=gene99 chr16 . intron 264267 264976 . - . Parent=gene99 chr16 ENCODE exon 264977 265083 . - . Parent=gene99 chr16 ENCODE CDS 264977 265083 . - . Parent=gene99 chr16 . intron 265084 265283 . - . Parent=gene99 chr16 ENCODE exon 265284 265334 . - . Parent=gene99 chr16 ENCODE CDS 265284 265334 . - . Parent=gene99 chr16 . intron 265335 265402 . - . Parent=gene99 chr16 ENCODE exon 265403 265499 . - . Parent=gene99 chr16 ENCODE CDS 265403 265499 . - . Parent=gene99 chr16 . intron 265500 265838 . - . Parent=gene99 chr16 ENCODE exon 265839 265915 . - . Parent=gene99 ### chr16 ENCODE gene 258319 264957 . - . ID=gene100;Name=AC004754.2-008;Name2=RGS11 chr16 ENCODE exon 258319 259383 . - . Parent=gene100 chr16 . intron 259384 259502 . - . Parent=gene100 chr16 ENCODE exon 259503 259585 . - . Parent=gene100 chr16 . intron 259586 260522 . - . Parent=gene100 chr16 ENCODE exon 260523 260661 . - . Parent=gene100 chr16 . intron 260662 260743 . - . Parent=gene100 chr16 ENCODE exon 260744 260831 . - . Parent=gene100 chr16 . intron 260832 260983 . - . Parent=gene100 chr16 ENCODE exon 260984 261099 . - . Parent=gene100 chr16 . intron 261100 261201 . - . Parent=gene100 chr16 ENCODE exon 261202 262931 . - . Parent=gene100 chr16 . intron 262932 263475 . - . Parent=gene100 chr16 ENCODE exon 263476 263557 . - . Parent=gene100 chr16 . intron 263558 263760 . - . Parent=gene100 chr16 ENCODE exon 263761 263837 . - . Parent=gene100 chr16 . intron 263838 264043 . - . Parent=gene100 chr16 ENCODE exon 264044 264957 . - . Parent=gene100 ### chr16 ENCODE gene 258727 272085 . + . ID=gene101;Name=LA16c-314G4.1-006;Name2=ARHGDIG chr16 ENCODE exon 258727 259005 . + . Parent=gene101 chr16 ENCODE CDS 258727 259005 . + . Parent=gene101 chr16 . intron 259006 271746 . + . Parent=gene101 chr16 ENCODE exon 271747 271926 . + . Parent=gene101 chr16 ENCODE CDS 271747 271926 . + . Parent=gene101 chr16 . intron 271927 272025 . + . Parent=gene101 chr16 ENCODE exon 272026 272085 . + . Parent=gene101 chr16 ENCODE CDS 272026 272085 . + . Parent=gene101 ### chr16 ENCODE gene 258727 272085 . + . ID=gene102;Name=LA16c-314G4.1-005;Name2=ARHGDIG chr16 ENCODE exon 258727 259005 . + . Parent=gene102 chr16 ENCODE CDS 258727 259005 . + . Parent=gene102 chr16 . intron 259006 272025 . + . Parent=gene102 chr16 ENCODE exon 272026 272085 . + . Parent=gene102 chr16 ENCODE CDS 272026 272085 . + . Parent=gene102 ### chr16 ENCODE gene 258982 262183 . + . ID=gene103;Name=LA16c-314G4.1-007;Name2=ARHGDIG chr16 ENCODE exon 258982 259005 . + . Parent=gene103 chr16 . intron 259006 261881 . + . Parent=gene103 chr16 ENCODE exon 261882 262183 . + . Parent=gene103 ### chr16 ENCODE gene 259269 265912 . - . ID=gene104;Name=AC004754.2-004;Name2=RGS11 chr16 ENCODE exon 259269 259383 . - . Parent=gene104 chr16 ENCODE CDS 259269 259383 . - . Parent=gene104 chr16 . intron 259384 259502 . - . Parent=gene104 chr16 ENCODE exon 259503 259585 . - . Parent=gene104 chr16 ENCODE CDS 259503 259585 . - . Parent=gene104 chr16 . intron 259586 260522 . - . Parent=gene104 chr16 ENCODE exon 260523 260661 . - . Parent=gene104 chr16 ENCODE CDS 260523 260661 . - . Parent=gene104 chr16 . intron 260662 260743 . - . Parent=gene104 chr16 ENCODE exon 260744 260831 . - . Parent=gene104 chr16 ENCODE CDS 260744 260831 . - . Parent=gene104 chr16 . intron 260832 260983 . - . Parent=gene104 chr16 ENCODE exon 260984 261099 . - . Parent=gene104 chr16 ENCODE CDS 260984 261099 . - . Parent=gene104 chr16 . intron 261100 261201 . - . Parent=gene104 chr16 ENCODE exon 261202 261315 . - . Parent=gene104 chr16 ENCODE CDS 261202 261315 . - . Parent=gene104 chr16 . intron 261316 261398 . - . Parent=gene104 chr16 ENCODE exon 261399 261460 . - . Parent=gene104 chr16 ENCODE CDS 261399 261460 . - . Parent=gene104 chr16 . intron 261461 261539 . - . Parent=gene104 chr16 ENCODE exon 261540 261569 . - . Parent=gene104 chr16 ENCODE CDS 261540 261569 . - . Parent=gene104 chr16 . intron 261570 262862 . - . Parent=gene104 chr16 ENCODE exon 262863 262931 . - . Parent=gene104 chr16 ENCODE CDS 262863 262931 . - . Parent=gene104 chr16 . intron 262932 263475 . - . Parent=gene104 chr16 ENCODE exon 263476 263557 . - . Parent=gene104 chr16 ENCODE CDS 263476 263557 . - . Parent=gene104 chr16 . intron 263558 263760 . - . Parent=gene104 chr16 ENCODE exon 263761 263837 . - . Parent=gene104 chr16 ENCODE CDS 263761 263837 . - . Parent=gene104 chr16 . intron 263838 264043 . - . Parent=gene104 chr16 ENCODE exon 264044 264102 . - . Parent=gene104 chr16 ENCODE CDS 264044 264102 . - . Parent=gene104 chr16 . intron 264103 264957 . - . Parent=gene104 chr16 ENCODE exon 264958 265083 . - . Parent=gene104 chr16 ENCODE CDS 264958 265083 . - . Parent=gene104 chr16 . intron 265084 265283 . - . Parent=gene104 chr16 ENCODE exon 265284 265334 . - . Parent=gene104 chr16 ENCODE CDS 265284 265334 . - . Parent=gene104 chr16 . intron 265335 265402 . - . Parent=gene104 chr16 ENCODE exon 265403 265499 . - . Parent=gene104 chr16 ENCODE CDS 265403 265499 . - . Parent=gene104 chr16 . intron 265500 265849 . - . Parent=gene104 chr16 ENCODE exon 265850 265912 . - . Parent=gene104 chr16 ENCODE CDS 265850 265912 . - . Parent=gene104 ### chr16 ENCODE gene 260647 264274 . - . ID=gene105;Name=AC004754.2-007;Name2=RGS11 chr16 ENCODE exon 260647 260661 . - . Parent=gene105 chr16 . intron 260662 260743 . - . Parent=gene105 chr16 ENCODE exon 260744 260831 . - . Parent=gene105 chr16 . intron 260832 260983 . - . Parent=gene105 chr16 ENCODE exon 260984 261099 . - . Parent=gene105 chr16 . intron 261100 261201 . - . Parent=gene105 chr16 ENCODE exon 261202 261315 . - . Parent=gene105 chr16 . intron 261316 261398 . - . Parent=gene105 chr16 ENCODE exon 261399 261460 . - . Parent=gene105 chr16 . intron 261461 261539 . - . Parent=gene105 chr16 ENCODE exon 261540 261569 . - . Parent=gene105 chr16 . intron 261570 262862 . - . Parent=gene105 chr16 ENCODE exon 262863 262931 . - . Parent=gene105 chr16 . intron 262932 263475 . - . Parent=gene105 chr16 ENCODE exon 263476 263557 . - . Parent=gene105 chr16 . intron 263558 263760 . - . Parent=gene105 chr16 ENCODE exon 263761 263837 . - . Parent=gene105 chr16 . intron 263838 264043 . - . Parent=gene105 chr16 ENCODE exon 264044 264102 . - . Parent=gene105 chr16 . intron 264103 264214 . - . Parent=gene105 chr16 ENCODE exon 264215 264274 . - . Parent=gene105 ### chr16 ENCODE gene 261827 265981 . - . ID=gene106;Name=AC004754.2-005;Name2=RGS11 chr16 ENCODE exon 261827 262494 . - . Parent=gene106 chr16 . intron 262495 262862 . - . Parent=gene106 chr16 ENCODE exon 262863 262931 . - . Parent=gene106 chr16 . intron 262932 263475 . - . Parent=gene106 chr16 ENCODE exon 263476 263557 . - . Parent=gene106 chr16 . intron 263558 263760 . - . Parent=gene106 chr16 ENCODE exon 263761 263837 . - . Parent=gene106 chr16 . intron 263838 264043 . - . Parent=gene106 chr16 ENCODE exon 264044 264102 . - . Parent=gene106 chr16 . intron 264103 264214 . - . Parent=gene106 chr16 ENCODE exon 264215 265083 . - . Parent=gene106 chr16 . intron 265084 265283 . - . Parent=gene106 chr16 ENCODE exon 265284 265334 . - . Parent=gene106 chr16 . intron 265335 265402 . - . Parent=gene106 chr16 ENCODE exon 265403 265499 . - . Parent=gene106 chr16 . intron 265500 265849 . - . Parent=gene106 chr16 ENCODE exon 265850 265981 . - . Parent=gene106 ### chr16 ENCODE gene 264940 265568 . - . ID=gene107;Name=AC004754.2-006;Name2=RGS11 chr16 ENCODE exon 264940 265083 . - . Parent=gene107 chr16 . intron 265084 265283 . - . Parent=gene107 chr16 ENCODE exon 265284 265334 . - . Parent=gene107 chr16 . intron 265335 265402 . - . Parent=gene107 chr16 ENCODE exon 265403 265568 . - . Parent=gene107 ### chr16 ENCODE gene 270451 272689 . + . ID=gene108;Name=LA16c-314G4.1-004;Name2=ARHGDIG chr16 ENCODE exon 270451 270754 . + . Parent=gene108 chr16 ENCODE CDS 270682 270754 . + . Parent=gene108 chr16 . intron 270755 271746 . + . Parent=gene108 chr16 ENCODE exon 271747 271926 . + . Parent=gene108 chr16 ENCODE CDS 271747 271926 . + . Parent=gene108 chr16 . intron 271927 272025 . + . Parent=gene108 chr16 ENCODE exon 272026 272109 . + . Parent=gene108 chr16 ENCODE CDS 272026 272109 . + . Parent=gene108 chr16 . intron 272110 272297 . + . Parent=gene108 chr16 ENCODE exon 272298 272356 . + . Parent=gene108 chr16 ENCODE CDS 272298 272356 . + . Parent=gene108 chr16 . intron 272357 272467 . + . Parent=gene108 chr16 ENCODE exon 272468 272531 . + . Parent=gene108 chr16 ENCODE CDS 272468 272531 . + . Parent=gene108 chr16 . intron 272532 272615 . + . Parent=gene108 chr16 ENCODE exon 272616 272689 . + . Parent=gene108 chr16 ENCODE CDS 272616 272689 . + . Parent=gene108 ### chr16 ENCODE gene 270607 273004 . + . ID=gene109;Name=LA16c-314G4.1-001;Name2=ARHGDIG chr16 ENCODE exon 270607 270754 . + . Parent=gene109 chr16 ENCODE CDS 270682 270754 . + . Parent=gene109 chr16 . intron 270755 271746 . + . Parent=gene109 chr16 ENCODE exon 271747 271926 . + . Parent=gene109 chr16 ENCODE CDS 271747 271926 . + . Parent=gene109 chr16 . intron 271927 272025 . + . Parent=gene109 chr16 ENCODE exon 272026 272109 . + . Parent=gene109 chr16 ENCODE CDS 272026 272109 . + . Parent=gene109 chr16 . intron 272110 272297 . + . Parent=gene109 chr16 ENCODE exon 272298 272374 . + . Parent=gene109 chr16 ENCODE CDS 272298 272374 . + . Parent=gene109 chr16 . intron 272375 272467 . + . Parent=gene109 chr16 ENCODE exon 272468 272531 . + . Parent=gene109 chr16 ENCODE CDS 272468 272531 . + . Parent=gene109 chr16 . intron 272532 272615 . + . Parent=gene109 chr16 ENCODE CDS 272616 272815 . + . Parent=gene109 chr16 ENCODE exon 272616 273004 . + . Parent=gene109 ### chr16 ENCODE gene 270856 272811 . + . ID=gene110;Name=LA16c-314G4.1-002;Name2=ARHGDIG chr16 ENCODE exon 270856 270934 . + . Parent=gene110 chr16 ENCODE CDS 270856 270934 . + . Parent=gene110 chr16 . intron 270935 271746 . + . Parent=gene110 chr16 ENCODE exon 271747 271926 . + . Parent=gene110 chr16 ENCODE CDS 271747 271926 . + . Parent=gene110 chr16 . intron 271927 272025 . + . Parent=gene110 chr16 ENCODE exon 272026 272109 . + . Parent=gene110 chr16 ENCODE CDS 272026 272109 . + . Parent=gene110 chr16 . intron 272110 272297 . + . Parent=gene110 chr16 ENCODE exon 272298 272374 . + . Parent=gene110 chr16 ENCODE CDS 272298 272374 . + . Parent=gene110 chr16 . intron 272375 272467 . + . Parent=gene110 chr16 ENCODE exon 272468 272531 . + . Parent=gene110 chr16 ENCODE CDS 272468 272531 . + . Parent=gene110 chr16 . intron 272532 272615 . + . Parent=gene110 chr16 ENCODE exon 272616 272811 . + . Parent=gene110 chr16 ENCODE CDS 272616 272811 . + . Parent=gene110 ### chr16 ENCODE gene 271083 272841 . + . ID=gene111;Name=LA16c-314G4.1-003;Name2=ARHGDIG chr16 ENCODE exon 271083 271926 . + . Parent=gene111 chr16 . intron 271927 272048 . + . Parent=gene111 chr16 ENCODE exon 272049 272109 . + . Parent=gene111 chr16 . intron 272110 272297 . + . Parent=gene111 chr16 ENCODE exon 272298 272374 . + . Parent=gene111 chr16 . intron 272375 272467 . + . Parent=gene111 chr16 ENCODE exon 272468 272531 . + . Parent=gene111 chr16 . intron 272532 272615 . + . Parent=gene111 chr16 ENCODE exon 272616 272841 . + . Parent=gene111 ### chr16 ENCODE gene 273153 277216 . + . ID=gene112;Name=LA16c-314G4.2-001;Name2=PDIA2 chr16 ENCODE exon 273153 273369 . + . Parent=gene112 chr16 ENCODE CDS 273171 273369 . + . Parent=gene112 chr16 . intron 273370 274387 . + . Parent=gene112 chr16 ENCODE exon 274388 274594 . + . Parent=gene112 chr16 ENCODE CDS 274388 274594 . + . Parent=gene112 chr16 . intron 274595 274659 . + . Parent=gene112 chr16 ENCODE exon 274660 274793 . + . Parent=gene112 chr16 ENCODE CDS 274660 274793 . + . Parent=gene112 chr16 . intron 274794 274878 . + . Parent=gene112 chr16 ENCODE exon 274879 275016 . + . Parent=gene112 chr16 ENCODE CDS 274879 275016 . + . Parent=gene112 chr16 . intron 275017 275084 . + . Parent=gene112 chr16 ENCODE exon 275085 275201 . + . Parent=gene112 chr16 ENCODE CDS 275085 275201 . + . Parent=gene112 chr16 . intron 275202 275312 . + . Parent=gene112 chr16 ENCODE exon 275313 275438 . + . Parent=gene112 chr16 ENCODE CDS 275313 275438 . + . Parent=gene112 chr16 . intron 275439 275506 . + . Parent=gene112 chr16 ENCODE exon 275507 275704 . + . Parent=gene112 chr16 ENCODE CDS 275507 275704 . + . Parent=gene112 chr16 . intron 275705 276353 . + . Parent=gene112 chr16 ENCODE exon 276354 276474 . + . Parent=gene112 chr16 ENCODE CDS 276354 276474 . + . Parent=gene112 chr16 . intron 276475 276554 . + . Parent=gene112 chr16 ENCODE exon 276555 276736 . + . Parent=gene112 chr16 ENCODE CDS 276555 276736 . + . Parent=gene112 chr16 . intron 276737 276835 . + . Parent=gene112 chr16 ENCODE exon 276836 276946 . + . Parent=gene112 chr16 ENCODE CDS 276836 276946 . + . Parent=gene112 chr16 . intron 276947 277069 . + . Parent=gene112 chr16 ENCODE CDS 277070 277114 . + . Parent=gene112 chr16 ENCODE exon 277070 277216 . + . Parent=gene112 ### chr16 ENCODE gene 273165 277215 . + . ID=gene113;Name=LA16c-314G4.2-002;Name2=PDIA2 chr16 ENCODE exon 273165 273369 . + . Parent=gene113 chr16 . intron 273370 274387 . + . Parent=gene113 chr16 ENCODE exon 274388 274475 . + . Parent=gene113 chr16 . intron 274476 274512 . + . Parent=gene113 chr16 ENCODE exon 274513 274594 . + . Parent=gene113 chr16 . intron 274595 274659 . + . Parent=gene113 chr16 ENCODE exon 274660 274793 . + . Parent=gene113 chr16 . intron 274794 274878 . + . Parent=gene113 chr16 ENCODE exon 274879 275016 . + . Parent=gene113 chr16 . intron 275017 275084 . + . Parent=gene113 chr16 ENCODE exon 275085 275201 . + . Parent=gene113 chr16 . intron 275202 275312 . + . Parent=gene113 chr16 ENCODE exon 275313 275438 . + . Parent=gene113 chr16 . intron 275439 275506 . + . Parent=gene113 chr16 ENCODE exon 275507 275704 . + . Parent=gene113 chr16 . intron 275705 276353 . + . Parent=gene113 chr16 ENCODE exon 276354 276474 . + . Parent=gene113 chr16 . intron 276475 276554 . + . Parent=gene113 chr16 ENCODE exon 276555 276736 . + . Parent=gene113 chr16 . intron 276737 276835 . + . Parent=gene113 chr16 ENCODE exon 276836 276946 . + . Parent=gene113 chr16 . intron 276947 277069 . + . Parent=gene113 chr16 ENCODE exon 277070 277215 . + . Parent=gene113 ### chr16 ENCODE gene 273165 277215 . + . ID=gene114;Name=LA16c-314G4.2-003;Name2=PDIA2 chr16 ENCODE exon 273165 273369 . + . Parent=gene114 chr16 . intron 273370 274387 . + . Parent=gene114 chr16 ENCODE exon 274388 274793 . + . Parent=gene114 chr16 . intron 274794 274878 . + . Parent=gene114 chr16 ENCODE exon 274879 275016 . + . Parent=gene114 chr16 . intron 275017 275084 . + . Parent=gene114 chr16 ENCODE exon 275085 275201 . + . Parent=gene114 chr16 . intron 275202 275312 . + . Parent=gene114 chr16 ENCODE exon 275313 275438 . + . Parent=gene114 chr16 . intron 275439 275506 . + . Parent=gene114 chr16 ENCODE exon 275507 275704 . + . Parent=gene114 chr16 . intron 275705 276353 . + . Parent=gene114 chr16 ENCODE exon 276354 276474 . + . Parent=gene114 chr16 . intron 276475 276554 . + . Parent=gene114 chr16 ENCODE exon 276555 276736 . + . Parent=gene114 chr16 . intron 276737 276835 . + . Parent=gene114 chr16 ENCODE exon 276836 276946 . + . Parent=gene114 chr16 . intron 276947 277069 . + . Parent=gene114 chr16 ENCODE exon 277070 277215 . + . Parent=gene114 ### chr16 ENCODE gene 273181 275141 . + . ID=gene115;Name=LA16c-314G4.2-005;Name2=PDIA2 chr16 ENCODE exon 273181 273369 . + . Parent=gene115 chr16 ENCODE CDS 273181 273369 . + . Parent=gene115 chr16 . intron 273370 274387 . + . Parent=gene115 chr16 ENCODE exon 274388 274594 . + . Parent=gene115 chr16 ENCODE CDS 274388 274594 . + . Parent=gene115 chr16 . intron 274595 274659 . + . Parent=gene115 chr16 ENCODE exon 274660 274793 . + . Parent=gene115 chr16 ENCODE CDS 274660 274793 . + . Parent=gene115 chr16 . intron 274794 274923 . + . Parent=gene115 chr16 ENCODE exon 274924 275016 . + . Parent=gene115 chr16 ENCODE CDS 274924 275016 . + . Parent=gene115 chr16 . intron 275017 275084 . + . Parent=gene115 chr16 ENCODE exon 275085 275141 . + . Parent=gene115 chr16 ENCODE CDS 275085 275141 . + . Parent=gene115 ### chr16 ENCODE gene 274153 277209 . + . ID=gene116;Name=LA16c-314G4.2-004;Name2=PDIA2 chr16 ENCODE exon 274153 274594 . + . Parent=gene116 chr16 . intron 274595 274659 . + . Parent=gene116 chr16 ENCODE exon 274660 274793 . + . Parent=gene116 chr16 . intron 274794 274878 . + . Parent=gene116 chr16 ENCODE exon 274879 275704 . + . Parent=gene116 chr16 . intron 275705 276353 . + . Parent=gene116 chr16 ENCODE exon 276354 276474 . + . Parent=gene116 chr16 . intron 276475 276554 . + . Parent=gene116 chr16 ENCODE exon 276555 276736 . + . Parent=gene116 chr16 . intron 276737 276835 . + . Parent=gene116 chr16 ENCODE exon 276836 276946 . + . Parent=gene116 chr16 . intron 276947 277069 . + . Parent=gene116 chr16 ENCODE exon 277070 277209 . + . Parent=gene116 ### chr16 ENCODE gene 274876 275577 . + . ID=gene117;Name=LA16c-314G4.2-006;Name2=PDIA2 chr16 ENCODE exon 274876 275016 . + . Parent=gene117 chr16 . intron 275017 275084 . + . Parent=gene117 chr16 ENCODE exon 275085 275201 . + . Parent=gene117 chr16 . intron 275202 275312 . + . Parent=gene117 chr16 ENCODE exon 275313 275434 . + . Parent=gene117 chr16 . intron 275435 275506 . + . Parent=gene117 chr16 ENCODE exon 275507 275577 . + . Parent=gene117 ### chr16 ENCODE gene 275681 277216 . + . ID=gene118;Name=LA16c-314G4.2-007;Name2=PDIA2 chr16 ENCODE exon 275681 275704 . + . Parent=gene118 chr16 ENCODE CDS 275681 275704 . + . Parent=gene118 chr16 . intron 275705 276371 . + . Parent=gene118 chr16 ENCODE exon 276372 276474 . + . Parent=gene118 chr16 ENCODE CDS 276372 276474 . + . Parent=gene118 chr16 . intron 276475 276554 . + . Parent=gene118 chr16 ENCODE exon 276555 276736 . + . Parent=gene118 chr16 ENCODE CDS 276555 276736 . + . Parent=gene118 chr16 . intron 276737 276835 . + . Parent=gene118 chr16 ENCODE exon 276836 276946 . + . Parent=gene118 chr16 ENCODE CDS 276836 276946 . + . Parent=gene118 chr16 . intron 276947 277069 . + . Parent=gene118 chr16 ENCODE CDS 277070 277114 . + . Parent=gene118 chr16 ENCODE exon 277070 277216 . + . Parent=gene118 ### chr16 ENCODE gene 277441 283533 . - . ID=gene119;Name=LA16c-314G4.3-006;Name2=AXIN1 chr16 ENCODE exon 277441 277626 . - . Parent=gene119 chr16 . intron 277627 279464 . - . Parent=gene119 chr16 ENCODE exon 279465 279608 . - . Parent=gene119 chr16 . intron 279609 283488 . - . Parent=gene119 chr16 ENCODE exon 283489 283533 . - . Parent=gene119 ### chr16 ENCODE gene 277441 336323 . - . ID=gene120;Name=LA16c-314G4.3-007;Name2=AXIN1 chr16 ENCODE exon 277441 278249 . - . Parent=gene120 chr16 . intron 278250 279440 . - . Parent=gene120 chr16 ENCODE exon 279441 283719 . - . Parent=gene120 chr16 . intron 283720 287056 . - . Parent=gene120 chr16 ENCODE exon 287057 287227 . - . Parent=gene120 chr16 . intron 287228 287722 . - . Parent=gene120 chr16 ENCODE exon 287723 288252 . - . Parent=gene120 chr16 . intron 288253 294304 . - . Parent=gene120 chr16 ENCODE exon 294305 294442 . - . Parent=gene120 chr16 . intron 294443 299973 . - . Parent=gene120 chr16 ENCODE exon 299974 300070 . - . Parent=gene120 chr16 . intron 300071 304543 . - . Parent=gene120 chr16 ENCODE exon 304544 304684 . - . Parent=gene120 chr16 . intron 304685 336148 . - . Parent=gene120 chr16 ENCODE exon 336149 336323 . - . Parent=gene120 ### chr16 ENCODE gene 277441 342660 . - . ID=gene121;Name=LA16c-314G4.3-001;Name2=AXIN1 chr16 ENCODE exon 277441 278249 . - . Parent=gene121 chr16 ENCODE CDS 278123 278249 . - . Parent=gene121 chr16 . intron 278250 279440 . - . Parent=gene121 chr16 ENCODE exon 279441 279608 . - . Parent=gene121 chr16 ENCODE CDS 279441 279608 . - . Parent=gene121 chr16 . intron 279609 281190 . - . Parent=gene121 chr16 ENCODE exon 281191 281298 . - . Parent=gene121 chr16 ENCODE CDS 281191 281298 . - . Parent=gene121 chr16 . intron 281299 283488 . - . Parent=gene121 chr16 ENCODE exon 283489 283719 . - . Parent=gene121 chr16 ENCODE CDS 283489 283719 . - . Parent=gene121 chr16 . intron 283720 287056 . - . Parent=gene121 chr16 ENCODE exon 287057 287227 . - . Parent=gene121 chr16 ENCODE CDS 287057 287227 . - . Parent=gene121 chr16 . intron 287228 287722 . - . Parent=gene121 chr16 ENCODE exon 287723 288252 . - . Parent=gene121 chr16 ENCODE CDS 287723 288252 . - . Parent=gene121 chr16 . intron 288253 294304 . - . Parent=gene121 chr16 ENCODE exon 294305 294442 . - . Parent=gene121 chr16 ENCODE CDS 294305 294442 . - . Parent=gene121 chr16 . intron 294443 299973 . - . Parent=gene121 chr16 ENCODE exon 299974 300070 . - . Parent=gene121 chr16 ENCODE CDS 299974 300070 . - . Parent=gene121 chr16 . intron 300071 304543 . - . Parent=gene121 chr16 ENCODE exon 304544 304684 . - . Parent=gene121 chr16 ENCODE CDS 304544 304684 . - . Parent=gene121 chr16 . intron 304685 336148 . - . Parent=gene121 chr16 ENCODE CDS 336149 337026 . - . Parent=gene121 chr16 ENCODE exon 336149 337107 . - . Parent=gene121 chr16 . intron 337108 342369 . - . Parent=gene121 chr16 ENCODE exon 342370 342660 . - . Parent=gene121 ### chr16 ENCODE gene 277442 342450 . - . ID=gene122;Name=LA16c-314G4.3-002;Name2=AXIN1 chr16 ENCODE exon 277442 278249 . - . Parent=gene122 chr16 ENCODE CDS 278123 278249 . - . Parent=gene122 chr16 . intron 278250 279440 . - . Parent=gene122 chr16 ENCODE exon 279441 279608 . - . Parent=gene122 chr16 ENCODE CDS 279441 279608 . - . Parent=gene122 chr16 . intron 279609 283488 . - . Parent=gene122 chr16 ENCODE exon 283489 283719 . - . Parent=gene122 chr16 ENCODE CDS 283489 283719 . - . Parent=gene122 chr16 . intron 283720 287056 . - . Parent=gene122 chr16 ENCODE exon 287057 287227 . - . Parent=gene122 chr16 ENCODE CDS 287057 287227 . - . Parent=gene122 chr16 . intron 287228 287722 . - . Parent=gene122 chr16 ENCODE exon 287723 288252 . - . Parent=gene122 chr16 ENCODE CDS 287723 288252 . - . Parent=gene122 chr16 . intron 288253 294304 . - . Parent=gene122 chr16 ENCODE exon 294305 294442 . - . Parent=gene122 chr16 ENCODE CDS 294305 294442 . - . Parent=gene122 chr16 . intron 294443 299973 . - . Parent=gene122 chr16 ENCODE exon 299974 300070 . - . Parent=gene122 chr16 ENCODE CDS 299974 300070 . - . Parent=gene122 chr16 . intron 300071 304543 . - . Parent=gene122 chr16 ENCODE exon 304544 304684 . - . Parent=gene122 chr16 ENCODE CDS 304544 304684 . - . Parent=gene122 chr16 . intron 304685 336148 . - . Parent=gene122 chr16 ENCODE CDS 336149 337026 . - . Parent=gene122 chr16 ENCODE exon 336149 337107 . - . Parent=gene122 chr16 . intron 337108 342369 . - . Parent=gene122 chr16 ENCODE exon 342370 342450 . - . Parent=gene122 ### chr16 ENCODE gene 278191 283537 . - . ID=gene123;Name=LA16c-314G4.3-005;Name2=AXIN1 chr16 ENCODE exon 278191 278307 . - . Parent=gene123 chr16 . intron 278308 279440 . - . Parent=gene123 chr16 ENCODE exon 279441 279608 . - . Parent=gene123 chr16 . intron 279609 283488 . - . Parent=gene123 chr16 ENCODE exon 283489 283537 . - . Parent=gene123 ### chr16 ENCODE gene 287845 342674 . - . ID=gene124;Name=LA16c-314G4.3-004;Name2=AXIN1 chr16 ENCODE exon 287845 288252 . - . Parent=gene124 chr16 . intron 288253 294304 . - . Parent=gene124 chr16 ENCODE exon 294305 294442 . - . Parent=gene124 chr16 . intron 294443 299973 . - . Parent=gene124 chr16 ENCODE exon 299974 300070 . - . Parent=gene124 chr16 . intron 300071 304543 . - . Parent=gene124 chr16 ENCODE exon 304544 304684 . - . Parent=gene124 chr16 . intron 304685 342369 . - . Parent=gene124 chr16 ENCODE exon 342370 342674 . - . Parent=gene124 ### chr16 ENCODE gene 356928 360569 . - . ID=gene125;Name=Z97634.1-001;Name2=MRPL28 chr16 ENCODE exon 356928 357783 . - . Parent=gene125 chr16 ENCODE CDS 357676 357783 . - . Parent=gene125 chr16 . intron 357784 358328 . - . Parent=gene125 chr16 ENCODE exon 358329 358415 . - . Parent=gene125 chr16 ENCODE CDS 358329 358415 . - . Parent=gene125 chr16 . intron 358416 358501 . - . Parent=gene125 chr16 ENCODE exon 358502 358627 . - . Parent=gene125 chr16 ENCODE CDS 358502 358627 . - . Parent=gene125 chr16 . intron 358628 359059 . - . Parent=gene125 chr16 ENCODE exon 359060 359221 . - . Parent=gene125 chr16 ENCODE CDS 359060 359221 . - . Parent=gene125 chr16 . intron 359222 359931 . - . Parent=gene125 chr16 ENCODE CDS 359932 360219 . - . Parent=gene125 chr16 ENCODE exon 359932 360226 . - . Parent=gene125 chr16 . intron 360227 360499 . - . Parent=gene125 chr16 ENCODE exon 360500 360569 . - . Parent=gene125 ### chr16 ENCODE gene 357395 360510 . - . ID=gene126;Name=Z97634.1-004;Name2=MRPL28 chr16 ENCODE exon 357395 357783 . - . Parent=gene126 chr16 . intron 357784 358328 . - . Parent=gene126 chr16 ENCODE exon 358329 358415 . - . Parent=gene126 chr16 . intron 358416 358501 . - . Parent=gene126 chr16 ENCODE exon 358502 359221 . - . Parent=gene126 chr16 . intron 359222 359931 . - . Parent=gene126 chr16 ENCODE exon 359932 360226 . - . Parent=gene126 chr16 . intron 360227 360499 . - . Parent=gene126 chr16 ENCODE exon 360500 360510 . - . Parent=gene126 ### chr16 ENCODE gene 357395 360527 . - . ID=gene127;Name=Z97634.1-002;Name2=MRPL28 chr16 ENCODE exon 357395 357783 . - . Parent=gene127 chr16 . intron 357784 358328 . - . Parent=gene127 chr16 ENCODE exon 358329 358415 . - . Parent=gene127 chr16 . intron 358416 358501 . - . Parent=gene127 chr16 ENCODE exon 358502 360226 . - . Parent=gene127 chr16 . intron 360227 360499 . - . Parent=gene127 chr16 ENCODE exon 360500 360527 . - . Parent=gene127 ### chr16 ENCODE gene 357397 359804 . - . ID=gene128;Name=Z97634.1-012;Name2=MRPL28 chr16 ENCODE exon 357397 357496 . - . Parent=gene128 chr16 ENCODE CDS 357411 357496 . - . Parent=gene128 chr16 . intron 357497 359594 . - . Parent=gene128 chr16 ENCODE CDS 359595 359655 . - . Parent=gene128 chr16 ENCODE exon 359595 359804 . - . Parent=gene128 ### chr16 ENCODE gene 357397 360528 . - . ID=gene129;Name=Z97634.1-006;Name2=MRPL28 chr16 ENCODE exon 357397 357783 . - . Parent=gene129 chr16 ENCODE CDS 357676 357783 . - . Parent=gene129 chr16 . intron 357784 358328 . - . Parent=gene129 chr16 ENCODE exon 358329 358415 . - . Parent=gene129 chr16 ENCODE CDS 358329 358415 . - . Parent=gene129 chr16 . intron 358416 358501 . - . Parent=gene129 chr16 ENCODE exon 358502 358636 . - . Parent=gene129 chr16 ENCODE CDS 358502 358636 . - . Parent=gene129 chr16 . intron 358637 359068 . - . Parent=gene129 chr16 ENCODE exon 359069 359221 . - . Parent=gene129 chr16 ENCODE CDS 359069 359221 . - . Parent=gene129 chr16 . intron 359222 359931 . - . Parent=gene129 chr16 ENCODE CDS 359932 360219 . - . Parent=gene129 chr16 ENCODE exon 359932 360226 . - . Parent=gene129 chr16 . intron 360227 360499 . - . Parent=gene129 chr16 ENCODE exon 360500 360528 . - . Parent=gene129 ### chr16 ENCODE gene 357399 360226 . - . ID=gene130;Name=Z97634.1-007;Name2=MRPL28 chr16 ENCODE exon 357399 357783 . - . Parent=gene130 chr16 . intron 357784 358328 . - . Parent=gene130 chr16 ENCODE exon 358329 358415 . - . Parent=gene130 chr16 . intron 358416 358501 . - . Parent=gene130 chr16 ENCODE exon 358502 359212 . - . Parent=gene130 chr16 . intron 359213 359931 . - . Parent=gene130 chr16 ENCODE exon 359932 360226 . - . Parent=gene130 ### chr16 ENCODE gene 357410 360235 . - . ID=gene131;Name=Z97634.1-005;Name2=MRPL28 chr16 ENCODE exon 357410 357783 . - . Parent=gene131 chr16 ENCODE CDS 357676 357783 . - . Parent=gene131 chr16 . intron 357784 358328 . - . Parent=gene131 chr16 ENCODE exon 358329 358415 . - . Parent=gene131 chr16 ENCODE CDS 358329 358415 . - . Parent=gene131 chr16 . intron 358416 358501 . - . Parent=gene131 chr16 ENCODE exon 358502 358627 . - . Parent=gene131 chr16 ENCODE CDS 358502 358627 . - . Parent=gene131 chr16 . intron 358628 359059 . - . Parent=gene131 chr16 ENCODE exon 359060 359221 . - . Parent=gene131 chr16 ENCODE CDS 359060 359221 . - . Parent=gene131 chr16 . intron 359222 359931 . - . Parent=gene131 chr16 ENCODE CDS 359932 360219 . - . Parent=gene131 chr16 ENCODE exon 359932 360235 . - . Parent=gene131 ### chr16 ENCODE gene 357428 360235 . - . ID=gene132;Name=Z97634.1-003;Name2=MRPL28 chr16 ENCODE exon 357428 357783 . - . Parent=gene132 chr16 . intron 357784 358328 . - . Parent=gene132 chr16 ENCODE exon 358329 358415 . - . Parent=gene132 chr16 . intron 358416 358501 . - . Parent=gene132 chr16 ENCODE exon 358502 359221 . - . Parent=gene132 chr16 . intron 359222 359931 . - . Parent=gene132 chr16 ENCODE exon 359932 360235 . - . Parent=gene132 ### chr16 ENCODE gene 357614 360510 . - . ID=gene133;Name=Z97634.1-008;Name2=MRPL28 chr16 ENCODE exon 357614 357783 . - . Parent=gene133 chr16 ENCODE CDS 357676 357783 . - . Parent=gene133 chr16 . intron 357784 358328 . - . Parent=gene133 chr16 ENCODE exon 358329 358415 . - . Parent=gene133 chr16 ENCODE CDS 358329 358415 . - . Parent=gene133 chr16 . intron 358416 358501 . - . Parent=gene133 chr16 ENCODE exon 358502 358636 . - . Parent=gene133 chr16 ENCODE CDS 358502 358636 . - . Parent=gene133 chr16 . intron 358637 359068 . - . Parent=gene133 chr16 ENCODE exon 359069 359221 . - . Parent=gene133 chr16 ENCODE CDS 359069 359221 . - . Parent=gene133 chr16 . intron 359222 359931 . - . Parent=gene133 chr16 ENCODE CDS 359932 360219 . - . Parent=gene133 chr16 ENCODE exon 359932 360226 . - . Parent=gene133 chr16 . intron 360227 360485 . - . Parent=gene133 chr16 ENCODE exon 360486 360510 . - . Parent=gene133 ### chr16 ENCODE gene 357725 360433 . - . ID=gene134;Name=Z97634.1-010;Name2=MRPL28 chr16 ENCODE exon 357725 357783 . - . Parent=gene134 chr16 ENCODE CDS 357725 357783 . - . Parent=gene134 chr16 . intron 357784 358328 . - . Parent=gene134 chr16 ENCODE exon 358329 358415 . - . Parent=gene134 chr16 ENCODE CDS 358329 358415 . - . Parent=gene134 chr16 . intron 358416 358501 . - . Parent=gene134 chr16 ENCODE exon 358502 358636 . - . Parent=gene134 chr16 ENCODE CDS 358502 358636 . - . Parent=gene134 chr16 . intron 358637 359068 . - . Parent=gene134 chr16 ENCODE exon 359069 359221 . - . Parent=gene134 chr16 ENCODE CDS 359069 359221 . - . Parent=gene134 chr16 . intron 359222 359931 . - . Parent=gene134 chr16 ENCODE CDS 359932 360219 . - . Parent=gene134 chr16 ENCODE exon 359932 360226 . - . Parent=gene134 chr16 . intron 360227 360362 . - . Parent=gene134 chr16 ENCODE exon 360363 360433 . - . Parent=gene134 ### chr16 ENCODE gene 358336 360503 . - . ID=gene135;Name=Z97634.1-009;Name2=MRPL28 chr16 ENCODE exon 358336 358415 . - . Parent=gene135 chr16 ENCODE CDS 358336 358415 . - . Parent=gene135 chr16 . intron 358416 358501 . - . Parent=gene135 chr16 ENCODE exon 358502 358636 . - . Parent=gene135 chr16 ENCODE CDS 358502 358636 . - . Parent=gene135 chr16 . intron 358637 359068 . - . Parent=gene135 chr16 ENCODE exon 359069 359221 . - . Parent=gene135 chr16 ENCODE CDS 359069 359221 . - . Parent=gene135 chr16 . intron 359222 359931 . - . Parent=gene135 chr16 ENCODE CDS 359932 360219 . - . Parent=gene135 chr16 ENCODE exon 359932 360226 . - . Parent=gene135 chr16 . intron 360227 360444 . - . Parent=gene135 chr16 ENCODE exon 360445 360503 . - . Parent=gene135 ### chr16 ENCODE gene 358409 360339 . - . ID=gene136;Name=Z97634.1-011;Name2=MRPL28 chr16 ENCODE exon 358409 358415 . - . Parent=gene136 chr16 ENCODE CDS 358409 358415 . - . Parent=gene136 chr16 . intron 358416 358501 . - . Parent=gene136 chr16 ENCODE exon 358502 358636 . - . Parent=gene136 chr16 ENCODE CDS 358502 358636 . - . Parent=gene136 chr16 . intron 358637 359068 . - . Parent=gene136 chr16 ENCODE exon 359069 359221 . - . Parent=gene136 chr16 ENCODE CDS 359069 359221 . - . Parent=gene136 chr16 . intron 359222 359931 . - . Parent=gene136 chr16 ENCODE CDS 359932 360219 . - . Parent=gene136 chr16 ENCODE exon 359932 360226 . - . Parent=gene136 chr16 . intron 360227 360310 . - . Parent=gene136 chr16 ENCODE exon 360311 360339 . - . Parent=gene136 ### chr16 ENCODE gene 360774 371983 . - . ID=gene137;Name=Z97634.2-001;Name2=TMEM8 chr16 ENCODE exon 360774 362284 . - . Parent=gene137 chr16 ENCODE CDS 361988 362284 . - . Parent=gene137 chr16 . intron 362285 362611 . - . Parent=gene137 chr16 ENCODE exon 362612 362728 . - . Parent=gene137 chr16 ENCODE CDS 362612 362728 . - . Parent=gene137 chr16 . intron 362729 364005 . - . Parent=gene137 chr16 ENCODE exon 364006 364152 . - . Parent=gene137 chr16 ENCODE CDS 364006 364152 . - . Parent=gene137 chr16 . intron 364153 364221 . - . Parent=gene137 chr16 ENCODE exon 364222 364400 . - . Parent=gene137 chr16 ENCODE CDS 364222 364400 . - . Parent=gene137 chr16 . intron 364401 364756 . - . Parent=gene137 chr16 ENCODE exon 364757 364893 . - . Parent=gene137 chr16 ENCODE CDS 364757 364893 . - . Parent=gene137 chr16 . intron 364894 365133 . - . Parent=gene137 chr16 ENCODE exon 365134 365257 . - . Parent=gene137 chr16 ENCODE CDS 365134 365257 . - . Parent=gene137 chr16 . intron 365258 365345 . - . Parent=gene137 chr16 ENCODE exon 365346 365436 . - . Parent=gene137 chr16 ENCODE CDS 365346 365436 . - . Parent=gene137 chr16 . intron 365437 366136 . - . Parent=gene137 chr16 ENCODE exon 366137 366456 . - . Parent=gene137 chr16 ENCODE CDS 366137 366456 . - . Parent=gene137 chr16 . intron 366457 366544 . - . Parent=gene137 chr16 ENCODE exon 366545 366813 . - . Parent=gene137 chr16 ENCODE CDS 366545 366813 . - . Parent=gene137 chr16 . intron 366814 367037 . - . Parent=gene137 chr16 ENCODE exon 367038 367165 . - . Parent=gene137 chr16 ENCODE CDS 367038 367165 . - . Parent=gene137 chr16 . intron 367166 367378 . - . Parent=gene137 chr16 ENCODE exon 367379 367586 . - . Parent=gene137 chr16 ENCODE CDS 367379 367586 . - . Parent=gene137 chr16 . intron 367587 367671 . - . Parent=gene137 chr16 ENCODE exon 367672 367849 . - . Parent=gene137 chr16 ENCODE CDS 367672 367849 . - . Parent=gene137 chr16 . intron 367850 371701 . - . Parent=gene137 chr16 ENCODE CDS 371702 371822 . - . Parent=gene137 chr16 ENCODE exon 371702 371983 . - . Parent=gene137 ### chr16 ENCODE gene 361863 364852 . - . ID=gene138;Name=Z97634.2-005;Name2=TMEM8 chr16 ENCODE exon 361863 362284 . - . Parent=gene138 chr16 ENCODE CDS 361988 362284 . - . Parent=gene138 chr16 . intron 362285 364005 . - . Parent=gene138 chr16 ENCODE exon 364006 364152 . - . Parent=gene138 chr16 ENCODE CDS 364006 364152 . - . Parent=gene138 chr16 . intron 364153 364221 . - . Parent=gene138 chr16 ENCODE exon 364222 364400 . - . Parent=gene138 chr16 ENCODE CDS 364222 364400 . - . Parent=gene138 chr16 . intron 364401 364756 . - . Parent=gene138 chr16 ENCODE exon 364757 364852 . - . Parent=gene138 chr16 ENCODE CDS 364757 364852 . - . Parent=gene138 ### chr16 ENCODE gene 361865 371979 . - . ID=gene139;Name=Z97634.2-002;Name2=TMEM8 chr16 ENCODE exon 361865 362284 . - . Parent=gene139 chr16 . intron 362285 362611 . - . Parent=gene139 chr16 ENCODE exon 362612 362728 . - . Parent=gene139 chr16 . intron 362729 364005 . - . Parent=gene139 chr16 ENCODE exon 364006 364152 . - . Parent=gene139 chr16 . intron 364153 364221 . - . Parent=gene139 chr16 ENCODE exon 364222 364400 . - . Parent=gene139 chr16 . intron 364401 364756 . - . Parent=gene139 chr16 ENCODE exon 364757 364893 . - . Parent=gene139 chr16 . intron 364894 365133 . - . Parent=gene139 chr16 ENCODE exon 365134 365257 . - . Parent=gene139 chr16 . intron 365258 365345 . - . Parent=gene139 chr16 ENCODE exon 365346 365436 . - . Parent=gene139 chr16 . intron 365437 366136 . - . Parent=gene139 chr16 ENCODE exon 366137 366456 . - . Parent=gene139 chr16 . intron 366457 366544 . - . Parent=gene139 chr16 ENCODE exon 366545 366813 . - . Parent=gene139 chr16 . intron 366814 367037 . - . Parent=gene139 chr16 ENCODE exon 367038 367165 . - . Parent=gene139 chr16 . intron 367166 367378 . - . Parent=gene139 chr16 ENCODE exon 367379 367586 . - . Parent=gene139 chr16 . intron 367587 367671 . - . Parent=gene139 chr16 ENCODE exon 367672 367806 . - . Parent=gene139 chr16 . intron 367807 371908 . - . Parent=gene139 chr16 ENCODE exon 371909 371979 . - . Parent=gene139 ### chr16 ENCODE gene 362417 365216 . - . ID=gene140;Name=Z97634.2-006;Name2=TMEM8 chr16 ENCODE exon 362417 362728 . - . Parent=gene140 chr16 . intron 362729 364005 . - . Parent=gene140 chr16 ENCODE exon 364006 364152 . - . Parent=gene140 chr16 . intron 364153 364221 . - . Parent=gene140 chr16 ENCODE exon 364222 364400 . - . Parent=gene140 chr16 . intron 364401 364756 . - . Parent=gene140 chr16 ENCODE exon 364757 364893 . - . Parent=gene140 chr16 . intron 364894 365133 . - . Parent=gene140 chr16 ENCODE exon 365134 365216 . - . Parent=gene140 ### chr16 ENCODE gene 364006 365076 . - . ID=gene141;Name=Z97634.2-004;Name2=TMEM8 chr16 ENCODE exon 364006 364152 . - . Parent=gene141 chr16 . intron 364153 364221 . - . Parent=gene141 chr16 ENCODE exon 364222 364400 . - . Parent=gene141 chr16 . intron 364401 364756 . - . Parent=gene141 chr16 ENCODE exon 364757 365076 . - . Parent=gene141 ### chr16 ENCODE gene 364810 366476 . - . ID=gene142;Name=Z97634.2-003;Name2=TMEM8 chr16 ENCODE exon 364810 364893 . - . Parent=gene142 chr16 . intron 364894 365133 . - . Parent=gene142 chr16 ENCODE exon 365134 365257 . - . Parent=gene142 chr16 . intron 365258 365345 . - . Parent=gene142 chr16 ENCODE exon 365346 365436 . - . Parent=gene142 chr16 . intron 365437 366136 . - . Parent=gene142 chr16 ENCODE exon 366137 366476 . - . Parent=gene142 ### chr16 ENCODE gene 366807 377000 . - . ID=gene143;Name=Z97634.2-008;Name2=TMEM8 chr16 ENCODE exon 366807 366813 . - . Parent=gene143 chr16 . intron 366814 367037 . - . Parent=gene143 chr16 ENCODE exon 367038 367165 . - . Parent=gene143 chr16 . intron 367166 367378 . - . Parent=gene143 chr16 ENCODE exon 367379 367586 . - . Parent=gene143 chr16 . intron 367587 374256 . - . Parent=gene143 chr16 ENCODE exon 374257 374397 . - . Parent=gene143 chr16 . intron 374398 376897 . - . Parent=gene143 chr16 ENCODE exon 376898 377000 . - . Parent=gene143 ### chr16 ENCODE gene 367109 377114 . - . ID=gene144;Name=Z97634.2-007;Name2=TMEM8 chr16 ENCODE exon 367109 367165 . - . Parent=gene144 chr16 . intron 367166 367378 . - . Parent=gene144 chr16 ENCODE exon 367379 367586 . - . Parent=gene144 chr16 . intron 367587 367671 . - . Parent=gene144 chr16 ENCODE exon 367672 367849 . - . Parent=gene144 chr16 . intron 367850 374256 . - . Parent=gene144 chr16 ENCODE exon 374257 374397 . - . Parent=gene144 chr16 . intron 374398 376897 . - . Parent=gene144 chr16 ENCODE exon 376898 377114 . - . Parent=gene144 ### chr16 ENCODE gene 386726 390747 . + . ID=gene145;Name=Z97634.4-002;Name2=NME4 chr16 ENCODE exon 386726 387080 . + . Parent=gene145 chr16 . intron 387081 388990 . + . Parent=gene145 chr16 ENCODE exon 388991 389124 . + . Parent=gene145 chr16 ENCODE CDS 389110 389124 . + . Parent=gene145 chr16 . intron 389125 389379 . + . Parent=gene145 chr16 ENCODE exon 389380 389481 . + . Parent=gene145 chr16 ENCODE CDS 389380 389481 . + . Parent=gene145 chr16 . intron 389482 389627 . + . Parent=gene145 chr16 ENCODE exon 389628 389740 . + . Parent=gene145 chr16 ENCODE CDS 389628 389740 . + . Parent=gene145 chr16 . intron 389741 390219 . + . Parent=gene145 chr16 ENCODE CDS 390220 390343 . + . Parent=gene145 chr16 ENCODE exon 390220 390747 . + . Parent=gene145 ### chr16 ENCODE gene 386770 389475 . + . ID=gene146;Name=Z97634.4-005;Name2=NME4 chr16 ENCODE exon 386770 387080 . + . Parent=gene146 chr16 . intron 387081 388208 . + . Parent=gene146 chr16 ENCODE exon 388209 388386 . + . Parent=gene146 chr16 . intron 388387 388990 . + . Parent=gene146 chr16 ENCODE exon 388991 389124 . + . Parent=gene146 chr16 ENCODE CDS 389110 389124 . + . Parent=gene146 chr16 . intron 389125 389379 . + . Parent=gene146 chr16 ENCODE exon 389380 389475 . + . Parent=gene146 chr16 ENCODE CDS 389380 389475 . + . Parent=gene146 ### chr16 ENCODE gene 387200 390735 . + . ID=gene147;Name=Z97634.4-006;Name2=NME4 chr16 ENCODE exon 387200 387314 . + . Parent=gene147 chr16 . intron 387315 388208 . + . Parent=gene147 chr16 ENCODE exon 388209 388395 . + . Parent=gene147 chr16 . intron 388396 388990 . + . Parent=gene147 chr16 ENCODE exon 388991 389124 . + . Parent=gene147 chr16 . intron 389125 389379 . + . Parent=gene147 chr16 ENCODE exon 389380 389481 . + . Parent=gene147 chr16 . intron 389482 389627 . + . Parent=gene147 chr16 ENCODE exon 389628 389740 . + . Parent=gene147 chr16 . intron 389741 390219 . + . Parent=gene147 chr16 ENCODE exon 390220 390735 . + . Parent=gene147 ### chr16 ENCODE gene 387201 400368 . + . ID=gene148;Name=Z97634.4-0012;Name2=NME4 chr16 ENCODE exon 387201 387314 . + . Parent=gene148 chr16 . intron 387315 388990 . + . Parent=gene148 chr16 ENCODE exon 388991 389124 . + . Parent=gene148 chr16 . intron 389125 389379 . + . Parent=gene148 chr16 ENCODE exon 389380 389481 . + . Parent=gene148 chr16 . intron 389482 389627 . + . Parent=gene148 chr16 ENCODE exon 389628 389740 . + . Parent=gene148 chr16 . intron 389741 390219 . + . Parent=gene148 chr16 ENCODE exon 390220 390295 . + . Parent=gene148 chr16 . intron 390296 391947 . + . Parent=gene148 chr16 ENCODE exon 391948 392044 . + . Parent=gene148 chr16 . intron 392045 394956 . + . Parent=gene148 chr16 ENCODE exon 394957 395025 . + . Parent=gene148 chr16 . intron 395026 396346 . + . Parent=gene148 chr16 ENCODE exon 396347 396398 . + . Parent=gene148 chr16 . intron 396399 396685 . + . Parent=gene148 chr16 ENCODE exon 396686 396778 . + . Parent=gene148 chr16 . intron 396779 397425 . + . Parent=gene148 chr16 ENCODE exon 397426 397561 . + . Parent=gene148 chr16 . intron 397562 400243 . + . Parent=gene148 chr16 ENCODE exon 400244 400368 . + . Parent=gene148 ### chr16 ENCODE gene 387209 390588 . + . ID=gene149;Name=Z97634.4-007;Name2=NME4 chr16 ENCODE exon 387209 387314 . + . Parent=gene149 chr16 . intron 387315 388990 . + . Parent=gene149 chr16 ENCODE exon 388991 389012 . + . Parent=gene149 chr16 . intron 389013 389066 . + . Parent=gene149 chr16 ENCODE exon 389067 389124 . + . Parent=gene149 chr16 . intron 389125 389379 . + . Parent=gene149 chr16 ENCODE exon 389380 389481 . + . Parent=gene149 chr16 . intron 389482 389627 . + . Parent=gene149 chr16 ENCODE exon 389628 389740 . + . Parent=gene149 chr16 . intron 389741 390219 . + . Parent=gene149 chr16 ENCODE exon 390220 390588 . + . Parent=gene149 ### chr16 ENCODE gene 387209 390634 . + . ID=gene150;Name=Z97634.4-003;Name2=NME4 chr16 ENCODE exon 387209 387314 . + . Parent=gene150 chr16 . intron 387315 388208 . + . Parent=gene150 chr16 ENCODE exon 388209 389124 . + . Parent=gene150 chr16 . intron 389125 389379 . + . Parent=gene150 chr16 ENCODE exon 389380 389481 . + . Parent=gene150 chr16 . intron 389482 389627 . + . Parent=gene150 chr16 ENCODE exon 389628 389740 . + . Parent=gene150 chr16 . intron 389741 390219 . + . Parent=gene150 chr16 ENCODE exon 390220 390634 . + . Parent=gene150 ### chr16 ENCODE gene 387210 390507 . + . ID=gene151;Name=Z97634.4-011;Name2=NME4 chr16 ENCODE exon 387210 387314 . + . Parent=gene151 chr16 ENCODE CDS 387224 387314 . + . Parent=gene151 chr16 . intron 387315 387879 . + . Parent=gene151 chr16 ENCODE exon 387880 387903 . + . Parent=gene151 chr16 ENCODE CDS 387880 387903 . + . Parent=gene151 chr16 . intron 387904 388990 . + . Parent=gene151 chr16 ENCODE exon 388991 389124 . + . Parent=gene151 chr16 ENCODE CDS 388991 389124 . + . Parent=gene151 chr16 . intron 389125 389379 . + . Parent=gene151 chr16 ENCODE exon 389380 389481 . + . Parent=gene151 chr16 ENCODE CDS 389380 389481 . + . Parent=gene151 chr16 . intron 389482 389627 . + . Parent=gene151 chr16 ENCODE exon 389628 389740 . + . Parent=gene151 chr16 ENCODE CDS 389628 389740 . + . Parent=gene151 chr16 . intron 389741 390219 . + . Parent=gene151 chr16 ENCODE CDS 390220 390343 . + . Parent=gene151 chr16 ENCODE exon 390220 390507 . + . Parent=gene151 ### chr16 ENCODE gene 387210 390760 . + . ID=gene152;Name=Z97634.4-001;Name2=NME4 chr16 ENCODE exon 387210 387314 . + . Parent=gene152 chr16 ENCODE CDS 387224 387314 . + . Parent=gene152 chr16 . intron 387315 388990 . + . Parent=gene152 chr16 ENCODE exon 388991 389124 . + . Parent=gene152 chr16 ENCODE CDS 388991 389124 . + . Parent=gene152 chr16 . intron 389125 389379 . + . Parent=gene152 chr16 ENCODE exon 389380 389481 . + . Parent=gene152 chr16 ENCODE CDS 389380 389481 . + . Parent=gene152 chr16 . intron 389482 389627 . + . Parent=gene152 chr16 ENCODE exon 389628 389740 . + . Parent=gene152 chr16 ENCODE CDS 389628 389740 . + . Parent=gene152 chr16 . intron 389741 390219 . + . Parent=gene152 chr16 ENCODE CDS 390220 390343 . + . Parent=gene152 chr16 ENCODE exon 390220 390760 . + . Parent=gene152 ### chr16 ENCODE gene 387238 390649 . + . ID=gene153;Name=Z97634.4-009;Name2=NME4 chr16 ENCODE exon 387238 387314 . + . Parent=gene153 chr16 ENCODE CDS 387238 387314 . + . Parent=gene153 chr16 . intron 387315 388990 . + . Parent=gene153 chr16 ENCODE exon 388991 389124 . + . Parent=gene153 chr16 ENCODE CDS 388991 389124 . + . Parent=gene153 chr16 . intron 389125 389379 . + . Parent=gene153 chr16 ENCODE exon 389380 389481 . + . Parent=gene153 chr16 ENCODE CDS 389380 389481 . + . Parent=gene153 chr16 . intron 389482 389627 . + . Parent=gene153 chr16 ENCODE exon 389628 389740 . + . Parent=gene153 chr16 ENCODE CDS 389628 389740 . + . Parent=gene153 chr16 . intron 389741 390109 . + . Parent=gene153 chr16 ENCODE CDS 390110 390191 . + . Parent=gene153 chr16 ENCODE exon 390110 390649 . + . Parent=gene153 ### chr16 ENCODE gene 387743 390417 . + . ID=gene154;Name=Z97634.4-010;Name2=NME4 chr16 ENCODE exon 387743 388180 . + . Parent=gene154 chr16 . intron 388181 388990 . + . Parent=gene154 chr16 ENCODE exon 388991 389124 . + . Parent=gene154 chr16 . intron 389125 389379 . + . Parent=gene154 chr16 ENCODE exon 389380 389481 . + . Parent=gene154 chr16 . intron 389482 389627 . + . Parent=gene154 chr16 ENCODE exon 389628 389740 . + . Parent=gene154 chr16 . intron 389741 390219 . + . Parent=gene154 chr16 ENCODE exon 390220 390417 . + . Parent=gene154 ### chr16 ENCODE gene 387774 402488 . + . ID=gene155;Name=Z97634.4-0013;Name2=NME4 chr16 ENCODE exon 387774 387893 . + . Parent=gene155 chr16 . intron 387894 394985 . + . Parent=gene155 chr16 ENCODE exon 394986 395025 . + . Parent=gene155 chr16 . intron 395026 396346 . + . Parent=gene155 chr16 ENCODE exon 396347 396398 . + . Parent=gene155 chr16 . intron 396399 397425 . + . Parent=gene155 chr16 ENCODE exon 397426 397561 . + . Parent=gene155 chr16 . intron 397562 400243 . + . Parent=gene155 chr16 ENCODE exon 400244 400368 . + . Parent=gene155 chr16 . intron 400369 400691 . + . Parent=gene155 chr16 ENCODE exon 400692 400785 . + . Parent=gene155 chr16 . intron 400786 400972 . + . Parent=gene155 chr16 ENCODE exon 400973 401077 . + . Parent=gene155 chr16 . intron 401078 401361 . + . Parent=gene155 chr16 ENCODE exon 401362 401579 . + . Parent=gene155 chr16 . intron 401580 401890 . + . Parent=gene155 chr16 ENCODE exon 401891 402488 . + . Parent=gene155 ### chr16 ENCODE gene 388411 390750 . + . ID=gene156;Name=Z97634.4-004;Name2=NME4 chr16 ENCODE exon 388411 389740 . + . Parent=gene156 chr16 . intron 389741 390219 . + . Parent=gene156 chr16 ENCODE exon 390220 390750 . + . Parent=gene156 ### chr16 ENCODE gene 389048 389740 . + . ID=gene157;Name=Z97634.4-008;Name2=NME4 chr16 ENCODE exon 389048 389124 . + . Parent=gene157 chr16 . intron 389125 389295 . + . Parent=gene157 chr16 ENCODE exon 389296 389481 . + . Parent=gene157 chr16 . intron 389482 389627 . + . Parent=gene157 chr16 ENCODE exon 389628 389740 . + . Parent=gene157 ### chr16 ENCODE gene 391827 402488 . + . ID=gene158;Name=AL023881.1-001;Name2=DECR2 chr16 ENCODE exon 391827 392044 . + . Parent=gene158 chr16 ENCODE CDS 391965 392044 . + . Parent=gene158 chr16 . intron 392045 394956 . + . Parent=gene158 chr16 ENCODE exon 394957 395025 . + . Parent=gene158 chr16 ENCODE CDS 394957 395025 . + . Parent=gene158 chr16 . intron 395026 396346 . + . Parent=gene158 chr16 ENCODE exon 396347 396398 . + . Parent=gene158 chr16 ENCODE CDS 396347 396398 . + . Parent=gene158 chr16 . intron 396399 397425 . + . Parent=gene158 chr16 ENCODE exon 397426 397561 . + . Parent=gene158 chr16 ENCODE CDS 397426 397561 . + . Parent=gene158 chr16 . intron 397562 400243 . + . Parent=gene158 chr16 ENCODE exon 400244 400368 . + . Parent=gene158 chr16 ENCODE CDS 400244 400368 . + . Parent=gene158 chr16 . intron 400369 400691 . + . Parent=gene158 chr16 ENCODE exon 400692 400785 . + . Parent=gene158 chr16 ENCODE CDS 400692 400785 . + . Parent=gene158 chr16 . intron 400786 400972 . + . Parent=gene158 chr16 ENCODE exon 400973 401077 . + . Parent=gene158 chr16 ENCODE CDS 400973 401077 . + . Parent=gene158 chr16 . intron 401078 401361 . + . Parent=gene158 chr16 ENCODE exon 401362 401579 . + . Parent=gene158 chr16 ENCODE CDS 401362 401579 . + . Parent=gene158 chr16 . intron 401580 401890 . + . Parent=gene158 chr16 ENCODE exon 401891 402488 . + . Parent=gene158 ### chr16 ENCODE gene 391859 402371 . + . ID=gene159;Name=AL023881.1-005;Name2=DECR2 chr16 ENCODE exon 391859 392044 . + . Parent=gene159 chr16 . intron 392045 394956 . + . Parent=gene159 chr16 ENCODE exon 394957 395025 . + . Parent=gene159 chr16 . intron 395026 396346 . + . Parent=gene159 chr16 ENCODE exon 396347 396398 . + . Parent=gene159 chr16 . intron 396399 396685 . + . Parent=gene159 chr16 ENCODE exon 396686 397201 . + . Parent=gene159 chr16 . intron 397202 397295 . + . Parent=gene159 chr16 ENCODE exon 397296 397561 . + . Parent=gene159 chr16 . intron 397562 400243 . + . Parent=gene159 chr16 ENCODE exon 400244 400368 . + . Parent=gene159 chr16 . intron 400369 400691 . + . Parent=gene159 chr16 ENCODE exon 400692 400785 . + . Parent=gene159 chr16 . intron 400786 400972 . + . Parent=gene159 chr16 ENCODE exon 400973 401077 . + . Parent=gene159 chr16 . intron 401078 401361 . + . Parent=gene159 chr16 ENCODE exon 401362 401579 . + . Parent=gene159 chr16 . intron 401580 401890 . + . Parent=gene159 chr16 ENCODE exon 401891 402094 . + . Parent=gene159 chr16 . intron 402095 402120 . + . Parent=gene159 chr16 ENCODE exon 402121 402371 . + . Parent=gene159 ### chr16 ENCODE gene 391883 401977 . + . ID=gene160;Name=AL023881.1-008;Name2=DECR2 chr16 ENCODE exon 391883 392044 . + . Parent=gene160 chr16 ENCODE CDS 391965 392044 . + . Parent=gene160 chr16 . intron 392045 394956 . + . Parent=gene160 chr16 ENCODE exon 394957 395025 . + . Parent=gene160 chr16 ENCODE CDS 394957 395025 . + . Parent=gene160 chr16 . intron 395026 396346 . + . Parent=gene160 chr16 ENCODE exon 396347 396362 . + . Parent=gene160 chr16 ENCODE CDS 396347 396362 . + . Parent=gene160 chr16 . intron 396363 397425 . + . Parent=gene160 chr16 ENCODE exon 397426 397561 . + . Parent=gene160 chr16 ENCODE CDS 397426 397561 . + . Parent=gene160 chr16 . intron 397562 400243 . + . Parent=gene160 chr16 ENCODE exon 400244 400368 . + . Parent=gene160 chr16 ENCODE CDS 400244 400368 . + . Parent=gene160 chr16 . intron 400369 400691 . + . Parent=gene160 chr16 ENCODE exon 400692 400785 . + . Parent=gene160 chr16 ENCODE CDS 400692 400785 . + . Parent=gene160 chr16 . intron 400786 400972 . + . Parent=gene160 chr16 ENCODE exon 400973 401077 . + . Parent=gene160 chr16 ENCODE CDS 400973 401077 . + . Parent=gene160 chr16 . intron 401078 401361 . + . Parent=gene160 chr16 ENCODE exon 401362 401579 . + . Parent=gene160 chr16 ENCODE CDS 401362 401579 . + . Parent=gene160 chr16 . intron 401580 401890 . + . Parent=gene160 chr16 ENCODE exon 401891 401977 . + . Parent=gene160 ### chr16 ENCODE gene 391883 402467 . + . ID=gene161;Name=AL023881.1-004;Name2=DECR2 chr16 ENCODE exon 391883 392044 . + . Parent=gene161 chr16 . intron 392045 394956 . + . Parent=gene161 chr16 ENCODE exon 394957 395040 . + . Parent=gene161 chr16 . intron 395041 397425 . + . Parent=gene161 chr16 ENCODE exon 397426 397561 . + . Parent=gene161 chr16 . intron 397562 400243 . + . Parent=gene161 chr16 ENCODE exon 400244 400368 . + . Parent=gene161 chr16 . intron 400369 400691 . + . Parent=gene161 chr16 ENCODE exon 400692 400785 . + . Parent=gene161 chr16 . intron 400786 400972 . + . Parent=gene161 chr16 ENCODE exon 400973 401077 . + . Parent=gene161 chr16 . intron 401078 401361 . + . Parent=gene161 chr16 ENCODE exon 401362 401579 . + . Parent=gene161 chr16 . intron 401580 401890 . + . Parent=gene161 chr16 ENCODE exon 401891 402467 . + . Parent=gene161 ### chr16 ENCODE gene 391894 402371 . + . ID=gene162;Name=AL023881.1-003;Name2=DECR2 chr16 ENCODE exon 391894 392044 . + . Parent=gene162 chr16 . intron 392045 394956 . + . Parent=gene162 chr16 ENCODE exon 394957 395025 . + . Parent=gene162 chr16 . intron 395026 395513 . + . Parent=gene162 chr16 ENCODE exon 395514 395666 . + . Parent=gene162 chr16 . intron 395667 396346 . + . Parent=gene162 chr16 ENCODE exon 396347 396398 . + . Parent=gene162 chr16 . intron 396399 397425 . + . Parent=gene162 chr16 ENCODE exon 397426 397561 . + . Parent=gene162 chr16 . intron 397562 400209 . + . Parent=gene162 chr16 ENCODE exon 400210 400368 . + . Parent=gene162 chr16 . intron 400369 400691 . + . Parent=gene162 chr16 ENCODE exon 400692 400785 . + . Parent=gene162 chr16 . intron 400786 400972 . + . Parent=gene162 chr16 ENCODE exon 400973 401077 . + . Parent=gene162 chr16 . intron 401078 401361 . + . Parent=gene162 chr16 ENCODE exon 401362 401579 . + . Parent=gene162 chr16 . intron 401580 401890 . + . Parent=gene162 chr16 ENCODE exon 401891 402371 . + . Parent=gene162 ### chr16 ENCODE gene 391916 402488 . + . ID=gene163;Name=AL023881.1-006;Name2=DECR2 chr16 ENCODE exon 391916 392044 . + . Parent=gene163 chr16 . intron 392045 394956 . + . Parent=gene163 chr16 ENCODE exon 394957 395025 . + . Parent=gene163 chr16 . intron 395026 396346 . + . Parent=gene163 chr16 ENCODE exon 396347 396398 . + . Parent=gene163 chr16 . intron 396399 396685 . + . Parent=gene163 chr16 ENCODE exon 396686 396834 . + . Parent=gene163 chr16 . intron 396835 396890 . + . Parent=gene163 chr16 ENCODE exon 396891 396953 . + . Parent=gene163 chr16 . intron 396954 397425 . + . Parent=gene163 chr16 ENCODE exon 397426 397561 . + . Parent=gene163 chr16 . intron 397562 400243 . + . Parent=gene163 chr16 ENCODE exon 400244 400368 . + . Parent=gene163 chr16 . intron 400369 400691 . + . Parent=gene163 chr16 ENCODE exon 400692 400785 . + . Parent=gene163 chr16 . intron 400786 400972 . + . Parent=gene163 chr16 ENCODE exon 400973 401077 . + . Parent=gene163 chr16 . intron 401078 401361 . + . Parent=gene163 chr16 ENCODE exon 401362 401579 . + . Parent=gene163 chr16 . intron 401580 401890 . + . Parent=gene163 chr16 ENCODE exon 401891 402488 . + . Parent=gene163 ### chr16 ENCODE gene 391927 401472 . + . ID=gene164;Name=AL023881.1-009;Name2=DECR2 chr16 ENCODE exon 391927 392044 . + . Parent=gene164 chr16 . intron 392045 394956 . + . Parent=gene164 chr16 ENCODE exon 394957 395025 . + . Parent=gene164 chr16 . intron 395026 396346 . + . Parent=gene164 chr16 ENCODE exon 396347 396398 . + . Parent=gene164 chr16 . intron 396399 396685 . + . Parent=gene164 chr16 ENCODE exon 396686 396953 . + . Parent=gene164 chr16 . intron 396954 397425 . + . Parent=gene164 chr16 ENCODE exon 397426 397561 . + . Parent=gene164 chr16 . intron 397562 400243 . + . Parent=gene164 chr16 ENCODE exon 400244 400368 . + . Parent=gene164 chr16 . intron 400369 400691 . + . Parent=gene164 chr16 ENCODE exon 400692 400785 . + . Parent=gene164 chr16 . intron 400786 400972 . + . Parent=gene164 chr16 ENCODE exon 400973 401077 . + . Parent=gene164 chr16 . intron 401078 401361 . + . Parent=gene164 chr16 ENCODE exon 401362 401472 . + . Parent=gene164 ### chr16 ENCODE gene 392006 397172 . + . ID=gene165;Name=AL023881.1-010;Name2=DECR2 chr16 ENCODE exon 392006 392044 . + . Parent=gene165 chr16 . intron 392045 394956 . + . Parent=gene165 chr16 ENCODE exon 394957 395025 . + . Parent=gene165 chr16 . intron 395026 396346 . + . Parent=gene165 chr16 ENCODE exon 396347 396834 . + . Parent=gene165 chr16 . intron 396835 396890 . + . Parent=gene165 chr16 ENCODE exon 396891 397172 . + . Parent=gene165 ### chr16 ENCODE gene 396896 402488 . + . ID=gene166;Name=AL023881.1-015;Name2=DECR2 chr16 ENCODE exon 396896 396953 . + . Parent=gene166 chr16 . intron 396954 400243 . + . Parent=gene166 chr16 ENCODE exon 400244 400405 . + . Parent=gene166 chr16 . intron 400406 400691 . + . Parent=gene166 chr16 ENCODE exon 400692 400785 . + . Parent=gene166 chr16 . intron 400786 400972 . + . Parent=gene166 chr16 ENCODE exon 400973 401077 . + . Parent=gene166 chr16 . intron 401078 401890 . + . Parent=gene166 chr16 ENCODE exon 401891 402488 . + . Parent=gene166 ### chr16 ENCODE gene 396947 400296 . + . ID=gene167;Name=AL023881.1-012;Name2=DECR2 chr16 ENCODE exon 396947 397561 . + . Parent=gene167 chr16 . intron 397562 400209 . + . Parent=gene167 chr16 ENCODE exon 400210 400296 . + . Parent=gene167 ### chr16 ENCODE gene 397428 401929 . + . ID=gene168;Name=AL023881.1-014;Name2=DECR2 chr16 ENCODE exon 397428 397561 . + . Parent=gene168 chr16 . intron 397562 400243 . + . Parent=gene168 chr16 ENCODE exon 400244 400405 . + . Parent=gene168 chr16 . intron 400406 400691 . + . Parent=gene168 chr16 ENCODE exon 400692 400754 . + . Parent=gene168 chr16 . intron 400755 400972 . + . Parent=gene168 chr16 ENCODE exon 400973 401077 . + . Parent=gene168 chr16 . intron 401078 401361 . + . Parent=gene168 chr16 ENCODE exon 401362 401579 . + . Parent=gene168 chr16 . intron 401580 401890 . + . Parent=gene168 chr16 ENCODE exon 401891 401929 . + . Parent=gene168 ### chr16 ENCODE gene 399600 402482 . + . ID=gene169;Name=AL023881.1-007;Name2=DECR2 chr16 ENCODE exon 399600 400368 . + . Parent=gene169 chr16 . intron 400369 400691 . + . Parent=gene169 chr16 ENCODE exon 400692 400785 . + . Parent=gene169 chr16 . intron 400786 400972 . + . Parent=gene169 chr16 ENCODE exon 400973 401579 . + . Parent=gene169 chr16 . intron 401580 401890 . + . Parent=gene169 chr16 ENCODE exon 401891 402482 . + . Parent=gene169 ### chr16 ENCODE gene 400113 401051 . + . ID=gene170;Name=AL023881.1-013;Name2=DECR2 chr16 ENCODE exon 400113 400368 . + . Parent=gene170 chr16 . intron 400369 400691 . + . Parent=gene170 chr16 ENCODE exon 400692 401051 . + . Parent=gene170 ### chr16 ENCODE gene 415620 495628 . + . ID=gene171;Name=Z98882.1-001;Name2=RAB11FIP3 chr16 ENCODE exon 415620 416721 . + . Parent=gene171 chr16 . intron 416722 451404 . + . Parent=gene171 chr16 ENCODE exon 451405 451498 . + . Parent=gene171 chr16 . intron 451499 461295 . + . Parent=gene171 chr16 ENCODE exon 461296 461390 . + . Parent=gene171 chr16 . intron 461391 472525 . + . Parent=gene171 chr16 ENCODE exon 472526 472737 . + . Parent=gene171 chr16 . intron 472738 478851 . + . Parent=gene171 chr16 ENCODE exon 478852 479001 . + . Parent=gene171 chr16 . intron 479002 486824 . + . Parent=gene171 chr16 ENCODE exon 486825 486860 . + . Parent=gene171 chr16 . intron 486861 493004 . + . Parent=gene171 chr16 ENCODE exon 493005 493098 . + . Parent=gene171 chr16 . intron 493099 495524 . + . Parent=gene171 chr16 ENCODE exon 495525 495628 . + . Parent=gene171 ### chr16 ENCODE gene 464870 495606 . + . ID=gene172;Name=Z98882.1-002;Name2=RAB11FIP3 chr16 ENCODE exon 464870 465099 . + . Parent=gene172 chr16 . intron 465100 472525 . + . Parent=gene172 chr16 ENCODE exon 472526 472737 . + . Parent=gene172 chr16 ENCODE CDS 472553 472737 . + . Parent=gene172 chr16 . intron 472738 478851 . + . Parent=gene172 chr16 ENCODE exon 478852 479001 . + . Parent=gene172 chr16 ENCODE CDS 478852 479001 . + . Parent=gene172 chr16 . intron 479002 486824 . + . Parent=gene172 chr16 ENCODE exon 486825 486860 . + . Parent=gene172 chr16 ENCODE CDS 486825 486860 . + . Parent=gene172 chr16 . intron 486861 493004 . + . Parent=gene172 chr16 ENCODE exon 493005 493098 . + . Parent=gene172 chr16 ENCODE CDS 493005 493098 . + . Parent=gene172 chr16 . intron 493099 495524 . + . Parent=gene172 chr16 ENCODE exon 495525 495606 . + . Parent=gene172 chr16 ENCODE CDS 495525 495606 . + . Parent=gene172 ### chr16 ENCODE gene 464925 479102 . + . ID=gene173;Name=Z98882.1-008;Name2=RAB11FIP3 chr16 ENCODE exon 464925 465046 . + . Parent=gene173 chr16 . intron 465047 472525 . + . Parent=gene173 chr16 ENCODE exon 472526 472737 . + . Parent=gene173 chr16 . intron 472738 478851 . + . Parent=gene173 chr16 ENCODE exon 478852 479102 . + . Parent=gene173 ### chr16 ENCODE gene 464925 493064 . + . ID=gene174;Name=Z98882.1-009;Name2=RAB11FIP3 chr16 ENCODE exon 464925 465046 . + . Parent=gene174 chr16 ENCODE CDS 465032 465046 . + . Parent=gene174 chr16 . intron 465047 472525 . + . Parent=gene174 chr16 ENCODE exon 472526 472737 . + . Parent=gene174 chr16 ENCODE CDS 472526 472737 . + . Parent=gene174 chr16 . intron 472738 478851 . + . Parent=gene174 chr16 ENCODE exon 478852 479001 . + . Parent=gene174 chr16 ENCODE CDS 478852 479001 . + . Parent=gene174 chr16 . intron 479002 486824 . + . Parent=gene174 chr16 ENCODE exon 486825 486860 . + . Parent=gene174 chr16 ENCODE CDS 486825 486860 . + . Parent=gene174 chr16 . intron 486861 493004 . + . Parent=gene174 chr16 ENCODE exon 493005 493064 . + . Parent=gene174 chr16 ENCODE CDS 493005 493064 . + . Parent=gene174 ### chr16 ENCODE gene 472658 487449 . + . ID=gene175;Name=Z98882.1-004;Name2=RAB11FIP3 chr16 ENCODE exon 472658 472737 . + . Parent=gene175 chr16 . intron 472738 478851 . + . Parent=gene175 chr16 ENCODE exon 478852 479001 . + . Parent=gene175 chr16 . intron 479002 481134 . + . Parent=gene175 chr16 ENCODE exon 481135 481269 . + . Parent=gene175 chr16 . intron 481270 486824 . + . Parent=gene175 chr16 ENCODE exon 486825 486860 . + . Parent=gene175 chr16 . intron 486861 487292 . + . Parent=gene175 chr16 ENCODE exon 487293 487449 . + . Parent=gene175 ### chr16 ENCODE gene 478943 487159 . + . ID=gene176;Name=Z98882.1-003;Name2=RAB11FIP3 chr16 ENCODE exon 478943 479001 . + . Parent=gene176 chr16 . intron 479002 481134 . + . Parent=gene176 chr16 ENCODE exon 481135 481269 . + . Parent=gene176 chr16 . intron 481270 486824 . + . Parent=gene176 chr16 ENCODE exon 486825 487159 . + . Parent=gene176 ### chr16 ENCODE gene 492751 495628 . + . ID=gene177;Name=Z98882.1-005;Name2=RAB11FIP3 chr16 ENCODE exon 492751 493098 . + . Parent=gene177 chr16 . intron 493099 495524 . + . Parent=gene177 chr16 ENCODE exon 495525 495628 . + . Parent=gene177 ### chr16 ENCODE gene 25805568 26055029 . + . ID=gene178;Name=AC093511.1-002;Name2=HS3ST4 chr16 ENCODE exon 25805568 25805743 . + . Parent=gene178 chr16 . intron 25805744 26054433 . + . Parent=gene178 chr16 ENCODE exon 26054434 26055029 . + . Parent=gene178 ### chr16 ENCODE gene 26054434 26056510 . + . ID=gene179;Name=AC093511.1-001;Name2=HS3ST4 chr16 ENCODE exon 26054434 26056510 . + . Parent=gene179 ### genometools-1.5.1/www/genometools.org/htdocs/images/annotation.png000066400000000000000000000557371211610345200254430ustar00rootroot00000000000000PNG  IHDRF[LbKGD IDATxy\T?׀"",1RSUKZʴB[^.^wK[)&u575AD0Y\wİ/3̜|<| !23t"""""}bKDDDD&/4DDDDdXIcKDDDD&/4DDDDdXIcKDDDD&/4DDDDdX5QJJ  777aÆ WWW/H\]]aeeCRAPbgm~6@D$Gk֬Ap=a۷1s6oooi?~<.\@YY,,,p!xxxNL5 pvvF@@ҚΩS^z |I?~)S.8C/Q \v IIIxjSB^e˖?sL:Uk۔)Sw^#%%zND- DD͔ɓ'cǎP*5š[ny&'xR_"!!A9!!!HJJž={0vV^"f())qpB9cu}qqqҾǏ]t񼧞z oog "DDMV1ydc֬YZ|Xng4w\Z C/Q믿Fddb_}`Fzz:ytAAA?~%' ÝK.unܸ3gbPo= !hIoFnpM#22lقuֵDDDD$3K,+R5 K,رcuvU[pppŋ=N_WxT*uޮ>0%' \r̪r 0k}Wx+[Xvۢ[h{x|wޒS*77vvv:oWU`V}KNYA.9f6݃J rrrp:=G t?9s`: FDDDD/'''NDVV>}:Ns/,DDDDBbb^aRi:DDDDdXIcKDDDD&/4DDDDdXIcKDDDD&/4DDDDdXIcKDDDD&/4DDDDdXIcKDDDD&/4DDDDdXIkcȓ_~wAvЮ];HNNJPT8}4:vbh4*  !FDDDDF`Wx򐖖POB~~>n£>P֭[bxzzbAzz!!!Z oVVafVQsw ٳZ GGG5666()):^RAPHt ZJKKP( BsssaggתYȸ얆:޽{h4h4{.cǎHOOGqq1@Rvz<=\ v]tvfffΞ=+]MT=^333}""""2R^^^h48st; \\\j?dݻw_y>>077s=Cի߿?J%,--1dذao.e Ck O6}11ussàACZZZ!շ"//>www,^Xz~m3ܻwQQQX`:vA~~>N Ȁ7^x5 Æ CQQ233O"$$}ŗ_~7|R;+VonPȺtBBBj7k,|'*~8݋iӦnܸK"::Xvpttą p УGxzzFSNIϻ|2q%_TקO CXXP(haާt$''뷳X4'''O͛T*{""zooofffusv'uAJJ /o6~X[[#((CZZ.^8=5 ހչΜ9ؽ{7vڅYfIk%{{{;O)))7/D;w#GSN!&&!!!Zo0vrӒ7 .[""oDž 7n瑙YتӧqIcpƎ[ukcLڶm+ 8s ze˖aݺuI&a³>kD.xy888wޑ xرc駟0byn™3g9{1PqGpp0RSSqT*|5jHnr 0uTmڴQmczESZɓ'#<<\&"zԷ>#ի}yyys뚟#""7o⫯BPP%' oiORR*f2S"""#P___\vΝ;J\qLHL /L ^""""2i,xȤܛ֊b;w0tz1$yyXZwpLuYuO.9fZ߼\^2s6gl[~˘o:aRZƛo7X''0RXZZ:dժjݮVtr*1%' YwKV(qc\/_d:cR4lf̘o􅙜[ӧ?1%"2rmL;g2;~~b2v؉>}חcJDd*kMDZ{8D7'QV 򄡣1 f(DDTDZ{xȾMLLę31sb28DD8vYw a(&cJD$c1_b Ch?9L< ~ ppp7믿c[[[ܾ}h$&ca5ƴrgۘ;v4< =ן_cc*_}O<w5_ǚf豓?|7L3* !0tȸ+u[affR|ԇe]-_ƘƗ.r 0>%' ǒ_6_\ƵzΆƶ5Ʈ.rSc6m2- ;wK/֭ dpLuq>.x ; dpLuq./x`a:ɨӘBDD||I0ot'\h(&bL#)cJDd*kMDZ{8L ?ގ:X |N)[ ı3}m @ͱq,[w8:v4tz1$Xl>TU`V}KNuͻͥ5P.Z=gSǶ5)T冎3Xrssaggg¬'\r̪r 0>%'bR4UǂL ^""""2i,xȤ%""""ƂL ^""""2i,xȤ%""""ƂL ^"""RT033'0b ^"""۷oK.ذaCۚ;w.9tDƃ/) ͛ҶaÆ!88^^^ؾ}}ڵիBCCqEi{hh(Z36QicDDD2jGE``-::vvv(..Ɵ'L2)))صk.]B 09Q`KDD$Seeeݻwѽ{w|F 6ɓDzz:q93VVV &2>Q- DDD2eaaW"-- ؿ?ȑ#éST*( mVz~2DDD2gee-[`ҥ(++Cnn.<<<ЦM%' fdŊ`ݺ033Adׯ1`=߫ƀ4PΝKuCG!2z,xd* ; Ȩ%""Ç9i(DF/͛<.]:˗ (%""2K?ގ: ǒssslܸ˖ufii,--tҖ>UϩѨ  ^"""Ѿ}{lܨOmR%'oi """"ƂL ^""""2i,xȤ%""""ƂL ^""""2i,xȤ%""""ƂL ^""""2im !B>|۷FRDPP,,,}=z􀯯/ 99j^^^ ?C!BDDDD +fff ða`iidi9QVVVs쌴֊KDDDDF`WxKKKq!;;vvv޽;^NNN5K u7nK.ZǪT*dggGٳgDDDD0ނ?8JKKqm <!!!vZwJvwwwBVkm{.`ee ?DDDDd| zTIڢD:NGii)N۶mѵkW}TT[DDDDdD Zi_`677PqB븡CBVHOOG׮]ۣGĠ{rdff"??@aB!F) UΝC.]P(}ر#RRR&}9}4СCC'""""ŧ4Tecc{{{R3T[.]*98(D{d.77W62%' \r̪r 0 /QS%""""ƂL ^""""2i,xȤ%""""ƂL ^""""2i/x0c o߾ ?v4 BBB̛7* w^^^n:^^^X~}6m_c?jgϞO%J333xzz #FBW6DD֌L̜9S{?p@7x|}kAe;>ƬyMuJ\Cرcd$$$`ƍsN133ñcpMܸq8x T*f̘h\r1118y$sN$$$ 11_}~z1w\9r}gΜ,Teaa_oF.]a{QgϞ&aVך!ѣѫW/i_tt4n߾ 5Ҏ;!=ւTjhkjV_8yuL,[ cؼytlDDlق 3gĉ1zhTBSN |||`nn{իWѿ(JXZZbȐ!ϰa ///l߾] r p9ϸqԟ( ͛Ҷ9sjt[DDX!""BŋKϯm{!** ,:_]׵NcPͽw^L6 p ,] ڵk}qJ]]]>}GAAgtt4qEl۶ ѣ7|MO]j5=>}H8#F{prrB\\\&"zԷf$&&"((6cRuƬyw IDATMj5θɺ୏;q8qAAAptt#GԩS._t\tI#o&@( h4lذA)==f=~t1g֭MOueeeAǎq5,ZHڷgL<0ydʇH^u[k{5テY6vMƬyMV_8yuP﫥9s`صkf͚%m///1vX>}ZЦ /"11Ν|||pԩSAHH֍!''...F۟FgӦM􄧧'RSSTtUPfogφ;֯_}AQgDDT5.\oܸϟGfffcOɓ'… ;vlץz;ϟرc55ȑ#k_y^]'cB $V\)ENNBQZZ*PTB!+bѢE"""Bܽ{W ! ~(//"))I'N!uB$"nݺ%>3 /!P*ҹO!8tXdIBEfϞ`R^^.,--III];v^!C:۫O\r B6k]kF V GGG!s*66V 8Q׷Ɗ !55j_y^]寮9kܑ#Gjm! ၀,^*^u=C^Sy`\]]6ݻ7>{O8!"j BÇڵk@Ϟ=1n8lڴ \#RMY 55#<*Ҙ5 0.sm=77vvvc!///@FFÑ`gϢm۶ >P>J.9fUx6ekyLINY"+uIJJ7BCC7_.!""Kc<"]kck׮޹sg_mSQk1+DDDDD ^""""2q,xȤt;f?w 3o޼f_\-n祗^A""^)))z?/\>"ɽixzpΟX5sC{YY%pWG-))Ð[3gãWRk07ܩiШ-o5cc/ bk_wqZCDDPXX^ 棤`֢%%yH*:uvѣk/..ºyqal5de<<3i zU"J^]\#2rs'gRoYY|v]5BCDi T*:kMKg}//؅'1wދ53wsPXhΝCEq}WRZ<̎DQQ4J/ӳr`]Я >]""2nj?OO| _+ u{+x1Z4 ""VImjkB\9Fxy."{zkz\|}G:gntp0[秱Ptu2<9R͞Y<^~ 85}DvFۯKJWn-jOU^OBu_ҕ6]gncc> !:G]~qƯZ?O?&[_Th׮JKK~Cz6=F޾s7"Nj C[99?.bAN67pt܅jw|KcT*3?ʖK_³Sѥ{@pAjju==rsq%V3 ,}ox?tA>}s%ܿQץ0 1n p"""GIfk@PPKv1Z=}{>}ބ-,[vF-UXlrmV7jPP '+~XUjt\PPrEQtAqQQ۳oŕ+I-EDD)-- قUfog⒍ ]07{ggc0kV ʵm8{4.]*ksh wODD1lHO@׮]qff&_VIk`9Zy>XFꚻ3r lhaUU'}_cض@(J0` ?,{v[[[ǀߥ36+ߙu|sگ|Vk췰ĤI^m?{;y>ǧ|~t]vⱓdMZsm\G~J_^?^vnV5gOw]7Kk|DU}bkzUTY/uG mo8qN/=]"""₷zi(''g̝W|6i3F]yOh|QIO/L4!!cy>r4{?[Ӭ^_dպ=]"""F>Ç?6tO4/Ln}k/,x?_6dd_ҥ+P\^zqplγqnX_o=]"""1vhvm 1 { mAP\tvUnި_qSgm2ُ⧟=;q>Jֽ;b*v<ٞsxՅx2nܨ l-fLGjEv5gSsok2tr;{{L88M2]&S~Դ/uK 5漀Wʐv_/=]"""Oms˯|?g&-@ffN1p(Z!N֟PN8càVzy3|0wd89h+.yv #mV4_܍i1kĤ^=tͱs?P*tfyy91S׽V-ǚއy\\<|[Էj2tmDK!]ͅc4 \r̪r 0>%'  /IcKDDDD&/4DDDDdXIcKDDDD&/4DDDDdXIcKDDDD&/Ր3f={Ę1c?7F̓J|w󃗗"""[={֯__o))):t(憭[j?>~ E6lPq* fff􄛛Fh W^mr?H34͛ӦMk7|Ĵ*5vo|&eozi׀aK5;HNNFrr2}]ܹs혙رcy&nܸD\/mW5XXdffbٲe077X|"""edddW^9s&&NѣG#??:uB||<\\\sss| n߾ F||<.^m۶!;;[+۵kpU3 /!P*"66VT*1f{ !C%Kٟ8g .Rz$Eiiرcx絎2djUr)\r u͛.] Fh41h i&ׯ ???qTT4Ǫ]6vB9?00PKZJܹsG !3<# zBu#""vsǤRK9\5 n2>ī ۶mP|}}uV̙3...ؿ?2220qDdeeAӧcԩ033ݻ1abʔ)3fڵkŇ~nݺaܸqVVV 믿F||<"##hxg쏧fϿ|Ə_׫w8p >#DEEaɒ%Z'N={`Ȑ!Mf "٨:L6y3 O?4x 8;;SN'LX>Q\CDd(5]wpxK5/]Vc{Ν ~u9L?DDDT;^%""""ƂL ^""""2it꥗^[),,D~~>󑗗qBnfV[VCBsssATJ+JJ6n܈~={Y[֭[OGGi՘1cFLW^~elڴ mڰtiȫw}۷7tjPQQ/Ykhr\_Ոe, QRR"fh4ysuE񧴁v ޾p Ҷy+ks9m`mШ6 `ccSb >٩GQQL**u633(P(RlT6ְQJg׈jsT:X_#lZ]7xL}߉~AVnW}sUuӧoBjOCm_cOW7*ocj<<=59Jsc Miq}y.r<}\OG` _$^wOo}^)^,c[uZZ2jjs`BEk}]4 ""VI7kzXR"ǧ:/cptTBU^Q'7Hy'a+ . Z\dee_V\ ւBʩT}bLjJ-m* .WnPVi kkkmWHʅбc]!| -- yy c5ʾz]VV{{{(m+F66Jpk׮eyロ'P\\\~.PՍnWU^D<2:lBa`t%MGgZ#LP|}[\@iYǍĴզZg4Bg/ܿwƾ|agk"7,xNش;÷GjxyuPqUcԘUU*|IDAT.<=BzJn})((n *SC^~ _T9f X@mkkk(ݺuVBNAP޾QWqSPP6mHse}7#ɿ^*:W\R)ζvvұrQ9o[2T9 iMiS  NsD|ݣoYJK??rsrɮ&vn}sاP(_;z$w69C~~t_j寎sr*\U hvicic3<<-MGdLtqJKKw.R+EEETѕ?s/+ެhmSfVzsaU獒bi=={_ߒ=ԥ9sU:w4\\Quon֧ /pIطNQZZ;{{;8 33C x晗fK:ch`cwo|s(^2,xIKZZ[W{8~l~Q1޽{ʕ$|s{U;.r Pw]kfmieW\JM2/ZnmVeIi( RBrYE." 80 0܇/|9gv\m&%mVwx>.,],yՔ:>>>AXX0pR*|[6jjo~ƛ=:5::iD,AZH{?=+%sխb1R/ kumɠVpAl xxu _ۇǗnu{֜\]1I?|ת_|EgF6yj_z!&fH TUUҥKt k۲x{KR B^o kX4zD"C[J—_o=;D D3gA.WJu5eHKKÅ PPPJG^^_9s}T*2y[V]&OWWu?yxZ-f7wYT`0tw#0`,YJ)CtNVkr}E{wÏCC}?jjjڗ+Ww̲\ww:k]r۹̙":]Nce؟;{wWoK "Apv[Q(]Y\._Ǘn{[[[ߛX}]իB"|uSb_~/^;˫?$ttYm]rڕ捶9yŒW=vKؼ8<u|P\rn9%k˂giC۲%GL"@=WlѦ滎s==JEg[(&qu:׹:['`K&͛7|QX#ӧE˻m牬P(qq{$"Ӽaym:k8_;7;}P]Sa~&O Yp^asX;ԥWDyy3g= JJjmgW8u{$"Ӽaym:kkʊ͞%X&KVoJk_UUExw;S=6VV;cKڸ!Gw޽evvz# TnVmFc-t|qC6rލ:f{;nG<qkK˖/_cgV-__gc^D"k7cbr~oh ۑO (+ 6i%'f}sMf8 Ssm6[q%K$ vz] !sL]0 ݎkwc+qJ|~p'L?%i>fb`͚Uw?cg-yL񘤍i$b`liYD"-dN¬.9fw 0=KNY]r,< ^""""h,xȣ%""""Ƃ< ^""""h,xȣ%""""Ƃ< ^""""h,xȣWף®}hZڵ"""" ص}^J4T*ȑ#-ڇKꬎ5  Z4ŋHMMNC^^BBB`0TNN8V Nx 4%%%PT8~8BCC1t^gH$(--˗ ___d2DGGSLٷv ^`ѣ!H6DDDD} ^PT3f quTVVbĉ())Aee% i/⧟~BLL AFFR)z=;($$$ڵk7nՙqL<p1dN455H$Cmm-d2ZZZH?Ո8eN-xGKK ܸ!,,hH;w3> ŋz*b14 T*gL X|㎐s5R!BCCd2Z|,N-xo3~{}׷nP(PWW\ &@$!??>do"/sQ]]NJp^VC"I$t:d E]]  jkk Cmm-t:AhMDDDD+#99W@SRR@TTTٳŨQ JCTT.]SNA" ((744@rrr3g?rss닀"66Gp㡵Hh4L$5 1iҤU(v@Vb 8qIIIFuǑY.Y%'.9fw 0=KNYesATB!**ʢb ^ZBԩSFȀYm4هx3[/y4DDDDXGcKDDDD/I* ;vkrѢE@JJ:cbĉD$""X}XZ&S`` kiv>(>sz-m""/ :K,QWW={ 55)))҂ 2> N̙3MMM}mӦMCzz:o^z%cʔ)XvU`ƍHHH)Sxbl߾MMM{Abb"nݺN}<={6MJddd%"" ^rI غu+OdL0$ %%EEEXjqFbX|9RSSİaðb 2a…HJJԩS__N>˖-Czz:0~x̞=ϟL\pxw,H"""H!lEP 881¬SSS3f̙3F뜙SVSN֭[1f̘.w1퉻duڃ%'{xl ++ EEEP({-vȱX[L^ݵFCCϟo#44Ԭ6xbK}^hh(rssGcKDDDD/y4K.aРA[zQ*H$v藺GFomUcca^# cPbE,G в[J2RcDG[)3g jKV#&&h{Z4ܹӪDD]aK.A_ު6qe,]FG9FR8} <><6z5;+ +o;_A:j^i˙$3?LMSm-96]YQzbΜ9fU[[Ǐcŝ_VVZ; v&W* jEFx&;[,wu!7kܹscTNǐȖDpGP(fa۷[Fdq1J%222 6F^Kv+VW L}g(^M'N_GXXmy-٭y7bH2^K;_oWm >ƍCnn.XVΩ.Y%'3.ٕ^EAغuubb]VkV?]]?gFkk=D}^ũSW <\y/8;/:af̝jkQgXcn}8V ɤTZPٳ7o[Y;^ 8F`0@[/N,HdZkk3 GDDhm&kɓݼRA@ⓓ-fΓYu؛umf,* 111V~99ڇdu: @.ҥKVN0%'DDzɣ ^DfcVsڃ%'.9fuVuV,xȣ%""""Ƃ< ^""""h,xȣ%""""Ƃ< ^""""h,xȣ%""""Ƃ<PhVIENDB`genometools-1.5.1/www/genometools.org/htdocs/images/cnn_large.png000066400000000000000000002341031211610345200252030ustar00rootroot00000000000000PNG  IHDRLl sBIT|d pHYsftEXtSoftwarewww.inkscape.org< IDATxy|3;Y$$ ܠx("lEjԫVg֪(?ZZ6 I6!ŋ3y33UEGI'onZ+ 7 :ROoBUϊv>DD$"oN3*)^΅~""""6VRq@hBDDc z#X,`Β(CDD Q))tA΅""""6PRIa΅Ƃ ED̷"rĘ2Ed3 '"s:CD悈ȨF'9VD""'?'q!rDd@öЕz\D^D4yPDƙDd,"sBڛƙ"rZu"rj0?^D?fH7;DQ"ree9H$"cYv<""g6_ "c̟3s"2`BBDr] s`  |iu(""X=; !s_E"R?nj;RO<1LQK ^׉H=BpB9f`ҊD$Gt? 1IY~a.o;RO,w\qfAâVhMN?T{Uu;#yŴVC,P`Yc=1 Tq oU5`iH("I2$-UUK,EoZMF`y--"y"ro%9L0LDnD Bn\ !~8&@%ݪuL8_Dn0 7C7ӿGۼP2FUtJJ=6@ +  @7s; 4?d?9d ~H{VP)b xzW=o{[d/lCo7m`/^9X0Vg(9S.LU0XDy/CB[EDDD@|BTc-tA<$c(i;RG;j>W#xEVĈHUU_9DPo<Ъ4=߫}mڡNJUp |$HmUչdFU_+;sRշυ!'"m."`kdiiUox(Yee&< KUnEj5|/ *@.A="##&-yΡƦ%G;fꪪYNzyJh"bv͑9(y4W=91Σ:kfff̜h"bʚ<EG>wF;h 3y4ΛȵyG^}"xs`+dffncLvvfgg_yjU펌T{&?egg_n/}<$;;0۝+H=0333?XSN/;;p?f"9~Fҿ :PDCu96u2\ s^/"@8ztK$ "M;4jvv͔-"Ds ø8yrrrlN9 ."'E;CSDΎvՑ_3E$0G;0_v;N}GsHW=jQ,5$s׭CI, p,"mb U=&&&NjG^"rD%@ZiJrrr,zjFҿHa٪XD$5Ha 3S."aٿH_$IDġ?9Tu/ܜ}p_a "U/Zq""""Vt+PVW3 =Q{V `'@˽NZUu)H1J""""vKU)" RxoiMa c0$ql86 a[,tCG0M-vVkpcͶ޿@ a٬쟈 H _b!"Up8⚊e`Կ,0r8Mw$cv"l7dFR<1T@L7l)LU 233/ZbDDDDD6o|Ur-b6KJ='(m7yܔmzV"r#<P c{0:ݻwO߱c("RUUUTl.]R<^Tbtٽ{Φb,Na]tIݵk׎b[""wp /}oZm{]kjjꚊq111Nέտ.m*/HI/99ٞ%K3Ǿ"U}'6ED/-UժZzܹs|ӦM{%kk맜rΣ9?'fϞ1ڹD'sJ~~Υ9)Sqi\㣏>z[nrٲeM7 g}KΥ9y䑣 t֤Iv.ё_3ϟӧO7ڹDjԨQ=ӧzΥ:STTtsii\sͲhn㯛0a­Υ9>|j|I1]oq%cGiM,4~nf4qv0bn_Fl~Igpθ;-Vn뼉3 폅;Wvn8aܚ]yBqn6}(Dmh^u`1n `^{_^q7vnNx@Mο7fE;H=:ww̽t7Wvܩ0`ΎyTw܁yӰXŕzFxmS,!"v-FDDDDԮzx@XOi!Ä"""""%#|BX=%" &DDDD镔zAdX0!"""έԓ #QJC,QUR`Gs!"""""JJ=ކTb:ROŒ΅'LS))"4#cC,QQRxhBDD &DDDD)z `Ts!""""":암z86ڹ4C,a`΅:LUR΅:ksVZ`Aɓ':;fKZ`AjvGn>ӌŋǍ7n9uԚhKDDDD+)X `RsiK{駎3gΜ?hrHҥK5j9al|{,KO9QTT kVL8rz'Z {|.((XQGѬ+L SX79kI.+AD^P ua]n\.,Sbcc{E9]""""jRΌv.ah1L@WQWa5jIڳjboz^a@xp\׋=bn5x0~Wpʕ@ 00 5 㔖n¾dΜ9I H .6U999+**WVVp@B<~v,XpaUua+.]=zoTPTTt;URRRjR0j|}.k<)ȧN<Ų#np\W\\nUZSPPpۂ K èzOX,"2@N 3 26퉉' w_Qz 8/ڹGU5)111\.׭rlٲ >0+SRR06.\8ZUQJ>aСO\VUc߾}@w1"n~~[_|ŕ)))GWTT|?w}gVWWȤSUk\x8U=t:/8Ϋ@o_D?p:/tΚ4iRmEEEw W~teff,"ga602U5ι1@ு@`"LDDDDWR XQ\\WUNJXUS]]} Ns.=裏2 ""99ymEEIjWU/.zwޝ '$$LP80^v:Qs-ZzOLII f' _YGT>} `MAA^11gϞvlll61۳z/ͰLj;!!?Ve˖]#" Ørn#4g}vy,ݽ{w8$Ӌ/g-7nܾgNgl,"PaߒcFrT. èlEp̙-.ZDb@ c'}@D}:_D+++0.QFt:,,,WXXxƒ]`d,YG!ɓ==hG"""?4{swYv.Ϻl\gE;x뭷2`枒*N}!":l`BDDDnvpݳk?v.r9^{YQNYn>,=5 Qt"v"""""""X0!""vKDz΃Ly ؏>gD!mDdtwW Z#g"&yH7."#ED."9":Qg "I7beV#"%Q"""r /m>v!"#Df&t]vXp8EN[/Z~g|!" &" 0Fx paMD `0)/"V1ɒ&"b,c9f9{&"fx{4WDCHǜ7  KTսODt؉ IUTOy/?@bb[UNlT U}QU1-Vէ#X8)p o#Q{ߕ Tc~ ` HݻwuLm0_f՚^CK:2?2`#pGm:DRcEKyyy"`"/PU?kp)<]pyL>QtY#g; IDAT&9 X7ٜvBUKEy@ "EoW "2 E-YvDU";͛7;{\5U("ȕu g.P_VD2O{'e)삉Vv/ywki3Qտ7uM巵a:Dm0Un wq zCGfq eNn<: >Vԯ_h@DԖX0!"""""""j""""j[reE2O8]6~WGM[:位ÇrꧢGs t 6%UVVyKuKHM~Ȉv.зoΘ5k!ϝaÎf~?ڹD*+ˑ_ZaXsi]tOOwݺΥ9:kfNNAuuu5[l\"eX,jrWTlss;6J)"k;w\"ܫW|ݝ;UcɒiӦk@s |~-;֯_cFUIImʕUt˖-Ky?N۱cUpO:?GiXk~~DSM/T||Rȑӷ̣obcc=3-Y2'׮_XP?3lX⬾}cc\r]8鶙'e={+553kժz_93Orrjի#&;m/MŞrJ/hώ_c"_~]/d^y%M+= gۇfLN=uk;)ŧbNQsy29ANv?шCڧ١~?W>y〆}u~LU{pWv.to2%Uit_Tw=_[Wl$ܺuk'o!5?mZx X4d|SDXӛ0zՉ-ݿ՚ƾ}Ɵ5l=c[Ɩ֗TT6¨QI1ۣbD}-_o8m[,=|7o`qE??~Y Wv{Ν_,.9ٚ_4/}won>qWpoѣGq㜏XBDDDD60pMt{OsCs1 {>ۨ޽GE;<ᄤII+;!CnF@6-{1Hhp}k ķD{gwD˗>EKSN)x˯kwNQǔn>qK6c̘Q>dHKv.ٽʇ KKD=f6|x̖̫x[FLc4s_{o<8jozva=:~)Y cQ9q&N,xn*/] + mtn1#3q Z2 &FcߑG&Dm T[bڼ>nqZ]8 .2X-!"""w7hA&1lgv.Y~_ݿmcDNKa닖C*L~TNN'Lpnt~bJ~gD{AŏK?VY~_LS1>/-r0 ~YYY#K;[r233лwcӃop8}z뭞eee ݽN2o烥̗^Vmu)+WWk,H*+HZһuVTlL6=v"3p +Nܲ߭~;`2_HJ++󥗗@ q5`Vr{jBY/}6S pys\7ow/+h H.+H 㵖7o6|uupH)+H /P߿o6_wz<gX'?p NMM݁޽z$1W^Y~{/G d8ѣG1x j7ρ)ѣmpYgZ|yJ=ߏز2_֭cQO(/w-+WVj\ۼ<1|@r[I޼߽~ieeZ?&5̗>lX%..07xطow&ǣ$n߾kFHgZZZ2dddd8={7|7ߨQ]jbb,6ׯӰׯ }Mb1Q޽{-h¾믿*fBDDDtxXuMXְ@{o<Җ-[G;@n~ ]g֭%n{#8ؼyclKO7jwou22ZwOGƊwo36WV mcƍl} UYYmt]oRKJ0 q8, ,@HIkuCmFn[7:6_ffzY+B۽/#újMh=zݺߩn\εtvE׮FU׮FU:11mnvݻ}g)\VVh}۷Z?[[iӦO)//&4M6mvW]UU|7[qj@aHdfZvT ;H[|GqXT̴ڵ[V+驵>T@r$'[k"nTi5u{-;6l]m۶mG'j[ח$5R4_nnyׯ`ST5h¾¤tvk]+W~i:(2{+1yСym/Kgo\^i\}Yʕ|U3xc/+gE3k-Xrxc^z>V}sKKQ̙ujv.ƍqO?mCIɾƚ5w;j׶dn?TŽҎʪ?V.X]jWD{vl>ee]KPVU_NK^|>gBDDDanZcި}!GQPSS'ʒ%\>\ez%ر{uF?C|;~k#ݦb?H,-m| WŦm"blt|S ezb{*/)in6tZmkՒ[?]pw͚;Z›s]]]v;w5ݞ{ۋtIHMHI޲ϡ]7vۛR^t|eIŮ[WxS~5&UVz楦sX?}_Wyu`k29s^? |ޏ?-^۹K<ۣ /<' 6l:}6lh}szw Ks8)6W^yh^˫xgkjuǎ=axbbbʻ!x4Ȟyܹo\yTUUwɒOWF;H٦M;?ߢKsx7|yZxQF[s9jW%%Rzvǟkz5ڹ4zW/9yPЊXQز/O??aXݣUXv@gqFEff'|r૯n8mswϞeZc5F S&Nz/6)-ڿc=6gfgܒ//v%,Y579>;;{eD8mEr͟)ݺuw'5ygyCu}g#cРAW oL}M0.}GUnwYXzRKnw}?-X[s\}vvGWnKKnq;w^QϻT }ǽQp֎G~4loG;H8v`W_VDvgxn\"vsvsچ9Ac=.Ɓ 6ljxmb '>}n9ahHUm7vݻ,ص9;ܶnw%={v5<~_XOUk"QcQ:,0!":ܰ`BDDDD!G5Y":`BDdۭ """ 0 #pa,\pp{f t@ƧTְ9sX㧉O>9YYY?~~'O^`DjPĉw_;[lαZSxN/[zOMLLI"|R^O"Pӹ x<9|"\UXXZHիב=zXrpTMMSN,,, Μ93:G:2L?>s- Z0y??`fkn/^glxl6۟|M͝SWWqs\ނVժQFyGr] ={_/4 蟗rݮ_]7n/"_aaayyyu\6L: I;6ɉ'; QC.W"rER=O^o!CիWԮ.+**RTT4EU={nrO,3_X;ٕ666د|>߷N\`A3ÿ[~4Z [xu…|>_XVoI&vbt\j}vn"R?+pDt@,QqxvDDD-tVȣ^}>wLLL2ۘWZu={zSՅ ]|_Aָ] "0[D$0bbbog̙6nؿ},xuΙkíٽY-!"݌ye{{ pZz{yyyKn v}MUVVnLJJz!" ł VZ7߬tN\ڳoC8NZ@"C1L谧GW\c`:^~6MDDDDD &Di?L?pFoxKQ;[r`0#"I"rj8۶mq"2ZD, :dɒDqdDD &DDDDD '@Adɒ47 `q}DDrco:Q1LPUvE08\sX; @Ĩdp`Gꪖȗ&DDDDDt`W-z0783nj=]DPD0TU?`Vն=#"L:>+oyul&tٵkW󞪞"2x)";W_=dȐOZDDo!""""TuXEO7xcosv_3n^p'vn;nܹ}C]~Nn >,G]v"".^aBDDDD]-2o}nQՑnS_՜կ7eʔͪz^[yzA*}mpĂ aBUkVL׆mϜ9C͏#aLEn!"A_:8>SN9e`8Ȳl_|qEEE]-Z?PH ;iEe\xa7v+e„ MSOeM>E׷oؿIǏoYU=M/"^^npm3"e>`>}M2ϡ/=Gd󻧥şp M{yu~He˖td_̟?wQU C AEQj&QP-`]E+: IDATuUPZ&4&='ɤd 2 ~'O2s{fNf9C%mr!D#h0a1c ݽoߩƍaF#v*$I1jԋZ+iSVQ/6a)5u)!EľvZ%K'b#;\\.6e:޽U..Q^ p$fGTJE5.{z"mJpp{ijܹo.Z#^6aa׾;2}Spff~Q/:Җ3ϡ,] bnޜ;hօ!w]am#YO55۱}~rؼ9wP~KQ/hlKfg'{~XQӑv$N0c1v#RFD\999ԋ$RZŭ7)UMmd2:ǝ @@@ u(=Vm݈O/lkT2***/ϧA٠kx"5Kq/PTT ||"gǑ/wwºxc.]\\++C9VTWwk|to9Х,5lRk oG|R9"EMddoge-唗=FDG/f!ˡMk 61 b\`0 j ƮL`v\1c*XDPY {'꩎jxwo.F@@9:Ɓnn!3_u> !>>tT ׸ ZsOEhM[}} uF KY:~xo 䢷hq`j0v h0|+`0b1c,ktmy]Gr5 (,l8/ѯ9[{v5 M30yvT -Q\-_?ۻ_;:8<%`0x+Ł B5u /W^^^rV4rҪUI4]#Iҁ={ ""W!jYi2BKr񛓒!8k-%?rhat" gz왲e˖o BB_(bT*`^`04 r<+%c0$^6c1ƮDzݻxJVV-z5:/EE9IsFx*p9ޟe ٯF7& 1*>o:4gF`;WD%I jl~m5JDݻq"*BD8zժX,B=o>|-000['ϭQ&SQQJMmwqݺu 3ghׯ_[׿^q ;s+x{{@J#q RI۷344T߬.=iWq:>_uu({ <**}?3LjWb2 zۻۓP׿8-~ős5w?~u5jk-ɔ_Q\r[:gKݻXoۧX,N95љE_l&pz8111[] ۞] 23uii[wRS;MUU鎊5n.h ^˿=ޔϑ$i?ijkkO۷EFik„ nnn$I)BS(KƏD&IR{"_$I1{ܹVI?eZ7'ɇ[5UZo#umšhN+ʥM8s(FJ=]c1g{լ,mKAfגlTIN4se{v50+v ueMB}~0eQ1f˖OgۻMk\Lɩ5Q]8qb L4h4e폏?C֬Yiw;h b(={숏Lj#m|yI| >L'N%$$w6RF &&f]Þ=zxvFgFш^h1c]:ؽ^ѱ\~c\L6-RPJ{t5ٰSOvd 6STtKvS6;mUUiصiS 5nܸR5k)v?fBB7q^݃a1cOܹ^ii;5v9իëssO|%(ikv4g֫\v^曟e).{׸-Zb2h_RZVcieM0c1_MMi׵ՎU]VH{ rϞVި<|&;;ɲEEEi99Zqܪ#G~p(=772LvӧU޹sOV)%fڵ5v9nјUvM7ovwuKrsT=p SmٲݟCzŸxyT۷i|Uu*ɔBT۷o_S+5ߑuKjj_}QUu*==%55-Ǖ(.>zS:N0c1v+*J; ybAA?Z-m^J}Fqku:ݛ͕iTޙX=t:ʾ`#&'o@#_[HFNXv8vf\%1c14k0؟ 'Lc1c1 c1c1X#0a1cc8ac1c1'Lc1c1 "JD\dDzmw#D"}2̈(%(@LDѼ"zXq"ȷD]oWƓQDIDMIDc`۶mq'"Wyyrl*"zID5۵#(ƮLD}'r:}(=ڂˆ.sݑ9pOs>cS 0C""_|(BLKD=È;ʷ}u D"hY aw1v ރuc)("`>K6l:{(xVe `HJ o`& ?k| `'DtX uxk9v?`6u! B}8_ FwQ'̬K0vIjyQ'n9 K|RClms]b cuB'(}py8k [0.I1o4R Ff!C`1vh ssxCq(7B}nnn7Q>\7!vB|BD}%XCD?p7* !Lr%=g]m5 T>Kq#l|.*_?M<? DMQJD{BuEni@5Ex$xq@"rB!TmT8ۨ%%AD3B ?%ȷ,3-~B|0Pg 9uu-򴜨<#!nJ]7l_،pvxFm<c]%^z@TmoJU @7Qݺ6B !^BԽZ# 6t<%1֒%'m`B< Jyؾ`<ĿRQ D1v(P˯UsJ=/k$z!'eJx,B"g;!D5B@(ΞwF*O1(ol-X Բ7%"r`Ͻ \8E7DNc `7s\ ΁W:aKiώ2cssfrOэ}˘SdR $$$Sm `߂~IDB<_W@lskg@?<$-!f#loc)ka5`]HDrQ-ע7`_v! ﰽ}LDI/|?s#ؒm6+Dы &%o`Kh`[~!DeIDH~Y"Z(oowP#('`иI$lӎ~ǁTTئ'%ӉMﰍR,^ I"h*l#HFv~ G`K~FlwXf_~Ksv5Lcr8a"@Ån4XrQBXg_G{S59"M69KތFu8v 秷@~"*Bd* …7:&Ÿ8^mm3h}qM]]>H[sukoBō6l :xٮN\fڟF㍎c?gF8MRcW~Md5)c1ny1cuvS]]~z7g̛7OZbEx{VK.U^Z*`ʕ]ҥKlڴI#ogK&1cdggY,իR|R F".)))N7T*WRRZv`X"Iut?6OɉFڿoBvjhVknKfKO~ڥFqw̞<{䟺.]X,/Q..5?׷TRv<*2)qrsӺUWg $ujk[_ߠeZڱ>'i-.;?}zk *W]MTjܹQaeZ//R:&MNΞ*UӴVŢ5* 5aadڗ6lPo!S*R;j<<ʕJUYzޒtxXq-ë0|**j<-ue+*kO>h_lpp*b6\5Ij?9\7؟Xt􀟵Zfj4D`J^^6zy7.fJ}mRUU5UU Kt mEYY{IIFd@@Q֭vunYM?}z8rijRTzxxt)..f3*#"fee%UWV7^P @QQqjxu{Rel_fst{+++ӛ+tb'$&&N%p݅Q<2^}T*գv6׭[d6( đDODi&&&KDADFD?GhVP(F !H]Wj34]Dtj=HDslXh„ `<>Fp; [, 1!OLLLA````-^`pW"B|hS¤[^_?ɵNeӛv{7[fQ{xtQS뷯ZWb~Mxvtc-ۗ}gZaϨ /,† ?Cjd*Żokn&;!'>`3Go=m_#ƍqC_z)!!M?/ނ=h\1rO?-@yyF٘2uZ0x@ z#nߗq K><|Łd[o/R_""'vtXhv\s++1am՝; ݇՗}]K„^nuZkg[x{lQN0愐æOpؿ0qb,K+$4{aBjz^h˖-9 IRw'fbRݽwyy+VWw/yN+I]l6?!I555TZZ:l6+hby\To0 `&5km{>GD cO,^TTtC|||p$!!`Z &$Z*X4u.]uuu?+))ij$Z":T*weee {8ps+W%I'?D 1ƮZNOj""deg4@-&K(J<'KN(9y;~S?zĉ3ѫ ,YRRoOCqrcʔG;c߾ .ToگYl$)`2NK[???j]h&L Yb?V+-3n]bϞ ݘ9qV+>t&fP翤B ?+224HN}BĮ]b40: B{k=9q_q9!6 IIo;w<=@V#>> _e Jny2޽>`ĄBK$o> OϖC!ƍ/6?BJZklCPbn\.zRBVknX'MT`#,ΩT`jޘ>5v(( k׮DT TTV $IJ1bD@"0### @bKVį͛gGNfS&LؒS] !@*%l6h4g~;w@B%^D4PqNٌ A%]Z|?aZkߏR(7,jS:qZd((n>{cdžݽu**ʱdG޽?nLv"B|}pqb/x{))_曯i}!dE%K7AHBpp8۷'311Ͷ{@P\Pd*Cpp8; .н{7xz?ځ\K?A>".nhHL0?A?6"9Fə Ν0>n04<9wlҰa HXa0&F*rB~5$$$H'S qqƝ&|V[NDg EZ՚DDjF`ONN49|͚5.III ID4˫ɕp@`x@Yh"^B,%""WpaƜJ Jw{m98vEE9QLśoN} l=viTWWbժ/p~L8zb>}wkMxݻoEE/C`ؾlZde߯ӹb@3RSaS} "Iq[VS^Z,DBH@R$I: |2TZ7nw޽T*V@||_$C$I$-& 6qJUmZ˃%IJ$['z}}}򋷷Q{0ͿX,?ƍW0UNQ51 BROoX,/2I... !n1'k⯻nNqeӧG~5S]](wj.6o^s\\#"y**ʱz7 Bñzkx;јhР$< k׮ٹvSw!KHH : jBPþɓ'_h4VRUdzT.I1c< )h4 @T>nN];z@w0cp]7{ĈK^yy0~|w˻y}۔wO:+-\s 88 @ÙcƄocذGlCToѡ>w.$5i0 xz~h@Nʅ͙4iR >>1'>iFᓰsߦ؏X7dKk#F{Q{x/lYJoU*xxx=z BnqЙ  Ϲ{w zrsQPTϯoK?5f͚m QSSL G?ѳwn9 w\RYY"Xg>c<"jzeVTTTb߾J}_k:TNgQ]JԉJAcǎcz}]ql=ѣwF[, 6L&#_}dIK 2c99c;oI .mp#C.ήp$a֬7]c<<[>[loԨؽ}s|T{nn5EXuz;| 6sѣ_IJe;Z/SxacǏo_#"ªU.ٱc[0g::9xכW1gη9 Kw6۩z%%ض w|e#~~G|ݫ'Nro1Xp꫈ԃWdlep5Sn]1,翌zᷱvmvٕ[XDD܆͛/1xN~w׏2T*q=Ʒ:7jȐѨǒ^^:q$%풛CBuu/9ڜlU֦=!DiVֱ׮ZHۗzEX|3[:ŋbΜ{>Rٱ #`4F#'ǹ~;#3ԪYrnKxx]RRRQS ѡhm۵("*ODv޷n=,p:iwcڴP*LR5kѧf8~|С _em#c1v 80BT9s5k>s~.% ؾu<1vXc`ל9_obx;4OGVVNnm6챠ȹ\sE9{'XS{hQ%vὐl3?|K x"&Sv6cʔ: v:?1N'mv< wѳfi p++˰z'RStc5Ҧq6v{FD[ڳgӝ\ O?5{4H6sM+.\86--䥋 -??/mz;.''#~Tǩ(.F+iժcƧZh3sKfJʰ -UUfsnŊW]pao}""RX͛׆gu,ESW`ԩ=߼>]i G3gkv._q6l.x``PpYYdrv>dLڱc{JJr{xz9sEgώMR]~~қ>ܖ MSy{^aC{**tUUڼU7de~cylF|Vwh4>Jq]vFqNqh\MNѱ8h4^ `N{2nh4xg^{`%hhGfSӽz)!Jq0.yvn^Fkt[}5WyN 02Jk0X'>ןc1c1 c1c2DMDvt1v% c1cݦQcǎih ~DID4x1g c1o߮7'"rm(C;(Dp„1c+HBgƌ9B|fF8Aa2Wa1cu5, `7%Bc]q.y„&B6@2J!ēDtw`bO{c1etk!ʉhOp>)8@D–0Id c < ؒ'OqkB` p'lɓ\Txhaˀ/Bllr![Dm? !%"Wؖ;1c+[^ ,(hwLd1verf@DD`BB t%r`-r-DP"0۵"eCmu(s8W_>09d c1vB18h4`Nѱ8h4x^=ѱh\&NM+/1%UrxF@HB(hMj!O !ʛBs>𸼭= Vf1c~::c~0B" @Jy<3ۇ-(ϒo]@Ѿ:)2vVQr:c1v َ3喱!! .gÇ~HpI7V6&&rpNNnxYZYEmc'[# ZҞ;u#1w*uTTУGOtX IѣG̀#G;t_8?gc??V뙞ѿQQ zEu>>]=<}t$KտȰ!%,s3kkW>%#9uyʋ)Fqȴi2ʕ6ƾ: }[jwn&gg1c `u[ t_'>ىr쵭YDK?g:?gs]gp__' s3kښ8VpfJc1c.2ܣюq1v Q̘ČC;:p„1c]xB9Fѱĩ)9O+V;#]"s Zvzq[~ѣXʕ+GG^x!o߾wyg$V2 L[I85&{mh0|τUjzrI7]bbbZNka@P_}*vm8c? cOY,*mNM\RmF\o+`gie6WQM6enf:T"FTtֈ76J͛ZҬY_ۙfͺWP~m }hכMTѾ}]jkkIRoV'N֬@׽;)AFV6W5f3Cn6W8_JUVTJRX,j ʗ,VS**ʤ>}1Oq6RIZ_v8Pc֎1X)J7ϙboxҦIn5]?ֽݪ y۷ g w :GOˣKSѸ@ӟ Wr0`i~ !i TUU?ZAe }d|:WǎFf@ѣ5Dvl3)8s(,0ntxzvirUUN:6HBhhյ=B_}0n\kX8uyyh\?}$f̸11o΢Ebo`;jv\=ӯc HMM+FF9v6mIIIw{cSPPU7blt$*'O~{3ɒ,#I,K>x'%KX'Ĉ~6VIf!++ K|~#6ŚO}CQQ.nMOw]U_4W~pt-o?ւѣAP⭷ČCnOƹs`ڦHmZu׍F9F=xzzcРlX8s(6lXV?h&{]wJXroo x݄uqQ4W "lڴ AZ1ƘC,ecW!x~m3nxp¤gϡ_{1Q\{u<AvA``7DJ%9W=z
    ۶j4;:g㚺>H;5"VVK]A[mvԙ.N絭3og;]fZ2ZV]k[Z "-$$9${ιɢ',&BXQQά~. T}nd1.\BLLր`GTa֬ bpػW++?ӦvVn k^^:V^R? 7F>< Dbs~;L|zk'rr .1-XO|l̝;]c1֭'Lp3?nx>3풒GrڵR݇z}m;~D9IIw-]N:yZ]z6gb ;·}wZQR<_32>W'$\Ɩ.X#G|࡬2c􋌌]|S vϞM=wᄡvRו]_&ԩc;9x?^'/-XDarFzj9S;{ٳ>>wө$%-A qhч?!]^^jDDLCv/z?cI>sh`0x+ig0+b}0Kj `…9ӯ@ϟ3G}m3 J~!gue|<%O;sMZu`+ `VD2>W2>\FQ}?rZf=rp 6nVZB[z駿-ps|ю+:iܸGFav1XA0Iv\suWY,:z$NP嶓'߃_dfpa]wVIc$ᡇ'|ߪHHx7hxԐCDaafcT88c]\%ԩ_u (^B&-O; 5{8޸<({Hl2vhDP(Vf" I"$99?ũyuE$()eeeŭW.y(,,9>^[!!yyʲ^:H&ꔕUԧO6{?e&QVQaۺ/\]SM)cu+ qwmеcnU 8~?6 TkگԵ &V;ݑ`XZ6ݱ`00UվܱgzCzߟwV;CN '.V[^:e1\ cK"1c6c]8ac1ƺ&@`1v} c1ty 8ac1Ʈ]9ac c1:&1'Lc1$K1&DIDGLD ~({D4}e1c]Q^#8Z0aNȥ )&"!" $!DDu@"Qxf"7 vWO9 '(&"cg1c^DŽ1Xq:aBD=| wxo?FD1B "?S8fl0D`l"j`PXc1u1a1n-W3_\LD+PTT60\ "Bw&xJ}*HD+(Hp  !*PD1c{݁oaNȕI+s P(& Im׭_FBB/Q"zޚ%[~ c1Xט3pcq~).)))6VRyyyOLL\ڑ9#%%ef&OD[)IR,mGƺu$I2%%kφ T*mnc:J[Ԯ26y|I?olp$ !}BDo0 !F!ڸzd~ADЅ0c.tӄΝ;#""$IҮ[.jZ<=={TVV).N2l۶MP@&T6lX,5Cըj@JJJ_IҧMfڼy6}cv7--M1tКUVɔJU3f8Q/(JݻQ{0f"*%=$ պJP(T%;l*BQ8eʔK6maVVOhhhΝ;#m6[Gpbb⩍7FTWWg͚UUSSNHHRheuWN'LU̱%aw}qljB6\㓰'QE~h3cncBl*..L$IQB4Jj&[;wUQQ1V1зH`uS_v7d2SjjOk׮L&{JPl3IIII۳ge˖T*߅?IP0INN^3N$_6 !ˆ%IV(Fl"i̷l[͚ik׮_.k-d2y%JV7ׯ"=<>~FWΓu$f;[@XXϢE(*>|T,+,3.3}!!%J1E||![lJ>/IMN_6jdv[,VP/ii{pW]YIWm/5HfzKH*'`(b1uֿm%ҋZnʰ& XIDBUϝѹ+VÇA 7/Z <\c?.j.սJ/_pyu^fs…Ye9eeִ1znnU˶IIIsĈgq1cd01b;VR;fXxzzd2jwP6lX 1#FXd?~3fxjjjҍF0"Z[m<`0lj4o7s̭.4h'[o$g=} aÆ}j+che$6v)SNHƩS=l=Fy{`Իʗ/s$`Ĉ>Ъ_h; /w|^cUؼyѣkFTUU`ʔylIGs6(?}Ο>[Ԕ)h05gAyyI]R酞=#,/#(Wos\-,Þ=_F.^|_u> y!"'FN;v~xzý&6۾93zMKO?w;\;7O!MUa g]U&YYgsDth}V_^e€ςw70 DD,{Sq7būœ97(?zt#,xjN&?UYY4?9QQq!]`(Fvv* a5 **h~w2r':tFڧs c*J5jV|\QQP(6EDD,nL&iZ]688xS-j)61s9a3dРɿ,ɒtDM^w5 +PUu9a|~ ;q;2D?%%E:ɉ@UU9RR>CHHn XhBgYu'QSS;Ij@N0BZ1?(D"#cTYoq{lSu4(/رXꫧ|E[|8̝ۺ9s~#Gvcժ0y\hM'Gk7j_."34.^kPTz!*Ǝ .SѠbAn9ݻ&SÉSa?i©SQQ#ݬ !7LVkcgBp6`WtSq.lTD0DF!((Ò)B|2 v{k^^Y/(>ww C\[n181X=.%LH>xfC؜b1#;{Oum6T*oTV׵]x&kg];v&BC8Y 7:tzEwy  E-*GjQdוdr.Tz]qamِݻ7l||ELڻź9g0֕7|ަ!k`4Vb|.n€#u "r˝$Yu>r6:,\}0ds%W }_XQQΝ;/4(W ""s ŌU0kdTWW!'' 99iwFTTFN]ۘC(B(998p`g?DBB"wE2U~1zސ1ּpw1ƺ.&{'q`Μn 7!///ࡇFܐ]S%%Eؾ}5bΜߴX?"' ؉oYIcJ_DL0p!gAeeD// "!}$ QQիAyIIRSBFP"6?""b!IM_9#$ pn,99=Q(8w8[oϧmpA=&nUd2eJK/b͚Ы X9>~<w7߾g L 6*U k%(( AAaWWUU + vX2$Cxx \^ >xcc3{٩1SCFDD,FҩO"Bpp8\zf…/l%ɡE#**DL}G !4 10Ɯ ]'ac] !Lp_߫x>czӹof3BB"nA@o`׎7.\ُ5{ߜCa1غk!7pᤫZ-8{4 С7xn~~A>ef Ƕm_݆@D  "_MqLpX*nWOx&?TT!22ÆoVKW'IktW٬ӇP\\PW.BDFƂH¯Ax#cn0k&JA&tuK{\ \@yy&F�'&Ʒ}8f]‡oj}Ōԣ4h&NK_@yŴyymHK;!C\[#6vڋCxmƄٳm޷P3˗zfAjQ;qq[uRW&I2DE!*c-C~ıc1c/KKc7Afnug$CDDODD\9ƌ ?{lða]KmƮkTP;c]_?rS+ݍmҝ_{}*ٵlS>5݆ {kd>k9(, ŹsJ3hXH:tM7yWq^l@Ը;.\wøn%$\nDY3!cf/ny)c9ͥm@a N%?QK IDAT3{OϑXz Ͼ yyWO-{ ':,kM>aߏo7B.xCyyq+>1xxSyyT6zh6.dsDu/1zMEzfCK :▜ tKW^pB<D 0!D:L6m={„|3crJJ j8slу-k\aZޖ2gƢE~mXy-wl:΍78ĉ w*.,8,L~ͧOOc2}8v>J婍ɟy3gxmK/%,^|x^^RM(8pztSǮF&]hZx͝{H߇wfm6lo:ZKWscc<|SwR^^l Q,YŋѵGypZYYyʕy[۾tE{X7 ?a.h:)-ۋbhBhiB7jQg"ZNDQBl`>9 pcZ0{_~lZ~q]kaV]@Z`0,wVX\e0Fj_;4 &>.`x[hڶ>7K@.0 r?lW}{Ʌ]5sϼ{W_]%gljgZ\׈HNKz-v,/Q< .&{%^6 &"… P;ck0c1օvw׈)! X/xDLDo͛7qO @ @KD(Y&,::Wfu0a1c׭&@vvc #(iժUQDt;0 F F!Ģ+V8nm! +X`:{6mڤaP3Xg c1v[X2::EI BP;$SBrG1cℽ"7`]n<kVac1X }o`0T!RO8ٸ]HHYQ&>f0c3Lc1/cgF߆>|P\Bi WG{V1cN݁0:\aBvlf/`!ϖa1cWkc$f|"#' !!Y"z$"0!&D"c{7!2F"򳗝 1c]ߖfDAD&q;*--kyN"HD9}nݪ1tD$ѿqID+qeV\_ ! !6Y`6B$"RFe7 !~+?B<` m7h ןAD)%QeP+c1ƺN}MD[hٻ7uohBGb";<䓩~{6"X:Y%xם1t5$LLHm?`dD/m|e(^Eo.1cu?eٵBJ!D x"һ7þ$|zwG]Dt/P_ړ$G~vIDtμHD @+H}H7@'Hp}p=r%aCD2Ms;FljDg !ʄk7} e?Nc1ƺƄڤ ƈ.;eB/$̜'|ұV"n?~A` !B__AQa/n'O>V^ kz!h{;pz.7ZQ]an!!^O{fhc{U纫>IQc1ƺ]]#D4@l}aaavpp5fZ@qΞ0vMB텶O>@?((~ps###=?SYfN1DQnDDe3g \nݵ!."]ZZzMb\5NP?51cv4 I:N Nt:N; A Q88γ|Nh?@t%K~=zP@xxxNGEEiO߻wo@ddd((HgUFf?* GCBBBmڐ+~5<<<"""t:>22 =Q&,,,Zao_xQXs뮻BRSS4W\.dW_} bܣG_{AпN?wkDDDJ)j#.((ؿ3pg3z Bcǎa42!"GT46LxO_/DFFt:}DDDy߿?<<ܱ,ãt:>..γ{://`&Ս"1vWƺ6*TT8qj?OM5DDDJehlv|1115!!!/""c!D%JRY:pBT_J8q<}m4vlυk4M,,,4_?r\_VѦgVV;?eoa1c+k.gݱj/ ?nh=!`}aaa`BHMM5¸B[6#GȨ+^{+RtU' g,**]9qAYWצrrr'K GZm_ܹsm?'kMؚ߫Z\-OX5Ssx|X<~+Dž Ծ]tUnn|ͽWss"Ec|Z̙uFNQOy晁f;]YGNSrd6^xqĒ%K:O?'993g;W=:˖- MP?XxDyڰܬY.\2eJVBK;?p|FFƐAm1-V@S3'GL8sK. {\}%9`, QF̜93Cˮ{?] {/_ZVV&{ǯU"ZռBꖫ1Ɯ a„1XkU„Go~2 o>zsNUU lsѳQ vQylB:E۝_]6͟?p,0݁R1M8$?jv}*)^dȑm#}"Awm~ |ޖuuNoBee9NKY 4?QRRHEe2z1]yll/  "22Cg-(Ȣ}ڢ{7H8~BŔ).{,,XĉR~~$_KD_p|;2//?Lr_kreŋu' "X.Å ZZ2Ɗcٲ\53{\|ȗ/?x2((Ȧ\i6RC.6xZ?BCpTA/?r53YppVM7$ecn;c_&c﾿df_^Oj#GL l6=nMmYWǎUPރ{ƌ-[ O>7HՂ[ŋ4iZz?̙q8N PXxgFUoj/ƎЫv`Yy`^Nҫl B0jT_T T^Z7ޘGᮯl>//v`ذ=ٜ4ٳ#GNBTT[_xC܁޽{IldfFyyIc(8fY<j4~8W[-_r0`L QgM99i=JF^0~l(Ο٩: ሊH[vɦM+0`TzAkAecu .g<}{}%p'+$ 6/_~`\okۊ1e~8|| "BXaa+ 34ۋr"#c +ڵo= ¾}Ɩ+RMϧ#;;FcM֔J/DDȑj6B:qCCc::0hZm˷fLF}pB.** عs5v42de}[1rd1z>>HO?7nq""."@Jb,Z4M&Cnn$DG˜13\5.-3gb]J؁M^7fXg3Lq*g{Çwee%HM 55fl5j-ƎQw/iQYRRdqAQQ0fLRM0p55f75AD ^~~AN'9#SmOxe)fՂ3kADDD EZ""G 8fCAA6N>3&h􈌌+رccb;D}bV!c180!"czM}PVvBA||S*?1ضmҾ…_k€-[V"""svY? )wK7޸ >:ƥKqaՕyx(;&4^L2+zǎK z}.}X`㩮F㋡Co/lǎg&yYYgp5j Fr.yPx`{qb>C 0`ӳ6g + *+/GMD ^q£HPX#())jPwu?οI,dg`htmRnZuqd'IR3~V 2q7X c{ŬZA:2lXF'K0|Nܹ/\6:q̟t}\LPo,YrGF\U]]\3@.Wo ل[W"=WLڻv;v\F^5{OgRy_13j =$vXS.JQQ 0߬{yiiX` 躪 .֭S@fzǏGZl+\omR]Es3'*+ːu۶vy]>s]=al0\¦M_=$th;]o[d2y-a9n7:p goɐZoYc6;1ڎ1a1"&fq3LS,^t}Y*u>qx: 𘋔J/L~oDboYj&ny;+LRiE,Lpn}<{"Z.;NիGޑ)S浹끷Р<+W:yzZ?NC }7ܝx\skDތuRTv΂?18ٳe'*+K[| $$M`{OQQQre%EE^??avY=)_U OoZ/ m~wcĆ ٨^' c1z@#d1m4}/BG!Cǚ5j lَvu&fG Z|(*!55U{ lܘө.cc' --at>~}YxdTVh,k2c]v;cK !Dg۸ J7oŞ=.U}1}Xoa=r|ɯ f~eS0-Wn³~پAw,®]gKgVbҤf _/tsэ1<%1Ujc~ǎm̙_j:" Wt|2~־$I#|g5_>٪j/N3fOJ$ju~![1Fc_sw(%Lo_#G6;XpK0XgӪ\?S{v^BQYit=s;C& Qt}WQ7NUUU%RTjTe(d2\.{痕/]þDܒ%_`+dK.nu6C ꟑkۣzuw/$Y;qrG6yoOX)ռtVg[ar\yBq]S8~|lŅZQU~~>997Ӌn,d6S͵% X,ņk]VVj?*W]]δwL1 FH,? `hcuKĉ?6 TkگԵaVHZ`0,wVX\e0Fj_vw,a0BQww,a0>ܻZmu{Y~`0 T.sKmd0K>XZ ZZws cf|Kc1c׉.9S1ص c1]u &1p„1cuK1zM> wcs c1:,c 'Lc1Xw cM c1ήdܲe+m^yiڵ %Vmذa[.ヒ@VR;ܹSi/g "FDcG?"'{F"j{1c:hO:ו6OwTLP* !$ 7%%5JJrrB2$m={vW}|.99MII^w^ٱcu%rW*  uii)^zAo6X-s IDAT u"0Q"|!D  Oqީ}d"Napnyc1]5"=gIRRRBׯCDz'%%(5 ?7͛u555( O D"LLL#"EчӧO?|Сq*ꆢIII֭[7I&MBPRR37lRT*/%I:@D7l#DX,9s ]ׯ_$&":(/IOB0hРO'B 3'ܽjժoU*U]?.]999yHRRv{ac]3LF@1_> @,Ǭ!D {{;LDqnp'j1m"ިMH*e3p1cm:m9mXo 0<))Q*$I(b%6xc1ƘïL-|`l>} PѤ+ !lD d2YE6ӦM;GDE*2d2YbfK!"СC)))WrygΜT 7nLIIy4996"[sbP*F\$I7:>[r9 !n2dȺ#FLDZ,[=cJdQ{LOǒi?n}٨= :s.Oq[yչٗfaUdDdQ(SâML~1fQMhrzQEfň, ðC3ǩf}\) q<Z۶s^+**~n$zWX17&&@~bbA.<nRjovƍ㘘p8\Vxy<V۶R+WG=Сz̘'QQQNeeҬr`R$ ][c׻ի׫YYYB=+V~ǂp8<Id}IIIhe !D}u-t{- ~'S)=w˸U*$MZY!B!XSͲmx' 5u#ӦM[0yȴ`p&\6~_).,+&W^D(j'D֝:uڟ;k)Sdff^c;66z3f쏔>10m0,S]>++kWԱеkםDE1u?7A&NX DB|)9uהB!,9.''j& hٶ2 tjӷnx"Z]!BqZO!$a"B!)1교b"ջK_9=bb|蒒_5Jdu }>))|o`ҴQ+RRڗF[)Ciiɑ']pҭy^߾}E?9VvPNOl6oϷ;QwJK˼IIC5`='&׭[A;w;[9:|x_)'w^7ܡCNz~W+={E*+~qqC1+*ʼ:&$$UD߰:uGVV\pgՆ +ӴGxSvR|DlPYYk`_撘ڮ]Jڞ=\۷Ǩ[wrއaU^^+++񕗗zJc**ʼe󾶔R:&&6_KT!S+++ˎ=zy<ӻwm39mܸl.*=eeGbcNy"ޡCʗ/_!ZB!DPSSyVuwfZZ5.d;'SO}ĀvKફ?1g{ߛA5}M&hg ?͔9r f3nFe ٹsW^y))5d;v|N^JNa=zi77.QZZ̦Ms&B!SWx<\zTNb󴢢-[>cTTߕRao֭{xˬ^>~ǎMt֛.qbҥt3.&O?3W/fӦOַ /gٳ?G_^]? FiiAZrp8wQ1JJ0}W3BRR*)$'II$$$#0%%;-ƒBu{^SN+))d|iAվwۺu3O gӦ왒ڭ[)_{8Dx<^FKƠ4iyUa^x&=l L#!!qU7[LL,dРL/(ΪUر#'*))0`8=zd4Z;LrZkR(.>1>G?~Qbؿ79'_}ٲeg&L޽iˆa<ÍKkIrDɄ:&L#@;н{:)$$$h"I+S\|D¥0Ⱦ};)*:NIIC%11D% $`^Ky{-Ú!SC)|97ywS*(--ȑ<&N_cp8Dbb A?~w-.zcFkնz}L =?C~C9ri~or6 Umb-%'wܝGѡC>9eZaa?aժNT|>uƟt ]7ڵQ&y(x̟?TfQWF22xq˗UW]O\\‰{ƏˑVڱ.Rak#žڞnz*uxHNKA!O|9v{kNG㦛ƶtB4-[/Қ{J &B)a2x7` O2j. Ƴw6m^)viG(j,]. ukMaxx?2jN֭0ȦMkhm*>>_ 郹iTқSrQ.aԨKNL$r-tғG1p,z8H>۸IJ~}>xt[,[]pU_'1\ٔ[S4ƍ3]mk3RwU[%D'<%$%h]B<KCUm-t h-Tז/UDE'_\ҎVqDƶA!hyN d:m'$y'rUkQYYN]h׮3~/ u#/N87[|? gn냅 8}ʉg]._iݍ"oܸҥdfMqΒB } iocǚDx1y|B-bb6vٔ 0dH(уL6ct҃.]z2͛װd\22vg|'./?7Wr,Z|?7{TJ6n\Ͳe OTRҥ牖M 4f%|9[(*:ƻフmy% P8&J5ZgV?_,{-JkE-s90j|#FH Bj}gKj8C)p%K"w:qkJdq/rO,kݬYz݁!ہJǕR\ͦGHb&׾MS!huݺ}W߹s}C>u9rwFvlϖ-uO!>>k}K&Uy<n9w|׮1⻼F?uK!ėBjj&M^Cn9J>:swkp j3o_ܯ O@7\zu'~D)RB쏁GsEzzzpCSB4:O߸qoMOm|swy5 Z Za3+?oPZ޽ѻt>`M<lۖʶmYяy/ \ƍˡxokPh  HлʴȠc)I={,KKK;iyRݲ! 7|{ncLO(b /_*z5t%k>τ_/Y.)_EBxɷyy{K+N;x챇}][i7E F٣{}ȑY=R SQ%KbJ)Z&kXYr)-]|jܹ ᔔI8@=Y[J֜]޽{wꆾD);JӚ&y6Ν5}/xK2}߾ ]O~?hh}>BֺP)Ro=(6*vkW+H>ҁUGDT`+R=R5}Æ {WVHk] p%v͚5/CtlC!I&Z}J)vwO*///ӟ N@YZh3eY~_ jrwq yyyomܸPͥ[q:tE|~Ѣj^b.'/S^ߕΘ1-rɓkHp-e…ٴiO~{Yom}X9N}E~*|SSS;p :s}Wl_|qԩSkX{.^KQ?;v؁k Zׯ_3<_ްGL5ENh7' 1 )[_ dt,u~x9 y'?2J!+222JVY][)E?Gknr c[`c~c6]?3-H}Q<,߿c`08({ꩧ^oկYA^wsVZW5pU%:1M걏p{rK=o [_Yۂ`)1}HKԅz{R!F)B!u>B% !B!N !hM%G!BsUFzJmǷ-Km9K\\W{Ynذ!{^k>%4'xqqd !B!,qMhwW8ix#-LB!82LD!D#…8I!Bqvm[B/Y?7k[:B!g' !h$[+{ V{udΜ9^הR@mۋݳcǎgΜY^߀u<@6a'z!Offwl~ $7ڶT ׶GjsmۏuKֱSN}Pyyyj+l۞0o޼ΡPۣFJNJJjhM*//[Z"۶sΝOJJ`YVt J˛{\x 8εmCy,vvvv}vB!ڼ%ga>x`~#_ʸfAz}m\SS1cFMڼy۪lJJR҈O\xY^Me;0!!.i͚ jskؿ /`ћ5m|/hfuٿ㌌))?dʎ};v߻ezѻcWZQmbn oٽ{ʶKٺ{XG]qKudΜ9|>߿3 ;RС ݑfϞ7"&&&U6Ќ3/Z(]8Z*33Woo999'O|ضHJ۶IJJ*ݻz۶O$K.KHHxv쟛[}>}\{~pxzdaaᬒ/SQQ8/BUp7WTT\ < rOP(H 酅1*hxfϗ:qJz$f999'2Z%ΰB!A!ėL]0xqRJy0MO>66999SVX{RW?`{EEE;Ԏ+V&pH)KnWN'O.v۶='ujvm;^+ksνQ%Əm~6)))hY֠p8<);;/RZm~J)^bbXԮs^~UkwVV֮:f8xƌ#m۞ (Wci@|r8S֕@">33299HTJj^oeyyy^_~~~7uޞ={ WkKR=RcWX>++ Zx<}ΝܶKJJ~xn Z^7))m~#:x}P(={<8cRCpիWc_9qx8ejTYYy_8])P(T( /,///3?8ΣG)5q2N>eY ÿ BC)uUNNߵy^ZHNjߩ,B!-@AK!)9ZNfggR$2oʔ){UYO 5OL:upoևwᅠJ cCU7UpTZv́j_mlU [2s`+zّx"f79$Bє3[:!ͣN -Gss(M󤤤y&M ּDr_k,(BpM0N9Bڜ tfΜYZ:!BФ!h]!B!V5BqNB!>j8B4I!BQ{[:!C&B!BԞc"_0B!>B-BWRkJ7REycRO*.wtTJR)+XԃJ[RB!B4B்J*,O+Ju,Z/`˖- K. \VJ x?|TJ%74Ҿ!B-BU&&HA@9kVnv)A/'H`-&6|7B!h6vq:߿8}L8NڲB!8C8S Zq&8=rٵXQz:ӿ˹¨;3ʺ%5FMq.83\8N\83qLP(uglrg81ߗ6~0 joZnfvJKKKcc@ &9JǵַL{B!h^I97pZ?p8]ǙV]-_+}5u7g,pmg &Xu__8N<*֭[ Lpׯ_EuRVVIN4F|q $HlذJ$`^ l_q.nhvSR*aT֭[>SR@zRj)C9̩Ϭ pzB!(#=`˶[[k꼎$lj0|komj񤤤ܨ;v, iQV۶8 fYL ѭ|cZ;vl%0:mKM_| &G_QQ|Ӳz`8@W࿁:tvguL&cn6$psǎtu|۶pw~v'sb׮]sWYYY_~_Ym/UVh߾}pȝt 0۶Wܘ&ڶ=> #c$7eyVb#c|>!M!B2l(((8οa*ՙsĈm ߶ܮ7Imt+0W1V`*Tٶcs0X<,uڻwo]D۶w`1I?@VΝ l۾Ӛ`mۑ:˻8p`Vֻc+/ٶ;gϞv:؏I:qbӧOQvn+Ceee],$b޽{r1?R>=vڷo]lUxD t׸W5ևB!lǴ:W״֪O>Y!p8wض] t: Ѫ;a^~y`ʔ)ֿtlZkN+Z;;Oh7!BLZ8&+1b*1-N<ղʘ"2[c J0'16`+?JLuCܹ={.$=hv% Rq+-b1IQTeQQ@ )d}8]eee{.qo> am%1qѣG'&&+̹4f$F%wczw_|LR-LFo lfٶ]iiض$&It o۶`f<ڶsرԔm?| G9mTmP!B%֪Zضv%qNKKL`ZV<8hL%v ;׬Yѣa xqˁm!#礎;9z$UU>qi% s/mذaf G6lLB`8ôxĶ"qҀg9#zD{g7g s>zhmۿv\[ |]C x7R{~;x 8wiad8brq'.ǹ,ك$'ӉLB%0B!cwh5xN۶_^oeff^5g(_ ~T)s?`S`y"VYO.袿`TY$9m  ?L|bI0\pT;MtvT!մ O Q߫Zʺ0]_ c0yD:{cذaWEyJ0`eY?p<ۭɶO ~>LK80㺏]U*wG=q^8s B50B!2SmǗvKٶ}OKl^GT&'۪۶͒B!IVĶ0TK!Ĺ!OB!ˬ1Q=rB42I!BQ?B!A0B!2Sʈz\Bs$LB!Vxa!G&B!Bԟ$L% !B!o QRRJQR*FFu7^Jr\E)?BA&B!BSFza`}KQD`puԴ?RJ?qԩS?vIJ, ؜A !Dk" !B!14JHvy HZ .&\r%˯@RGKo74.!h$a"B!Dô8&J&/" HMNN.uX^_J+oB! `0?yMZjkT,$S`esl|O=^:+Bq @EFx,gA kGBjϜ9c裁E{"~0PHpvE40BFt%L$}1)J71r VwȋچS1 VeXP `*i]0IV$+uH%۲螕U>n&=c->dF m7jŲH$9^@2 E)]Gg g1\0Ō=R.첊ޘװИJ'ʏ97w-}G &?3[en &ݱz,b,;Բ؉96VjmՅpN2+żv00&yǼ.Jˢ,2$ - obIXt L2-T*EdYt.lȲO  A؉~ edNLzEBE^.a>XBͅ=Ͱ;u&Fa5cZ66ҁ!hLIJHdl\|t`ZmlihM>zv?H dL&SAΰ,`*[=8+1Xa܋(V*G->̅N{L}ALB' /J̅aLg?5*USLs%`k)t1Ӳ65n '9Y袊/:8vrkL*˯\8b.111pdTwխ˃(釉h@&VuٲaA*̹j䬭d,19H,ר)I?`>>-x*Lrw^<.œט@}MCJxL2`K, /&!*cx&)j3~ka*C0XyeoOI,\8vg ,6`Cރ({e_$q- '`sҖel;0cB8Ή LeYK5{ NJN\`,`*1 5Epj²聩aZx1vk! LedQGRˢ5h" Ӛ`_ZLJҽ֘]mca,cΣ}dU*"8&9 tT`EC!^\(w?<)a-.vTjx7`|xaλ G%&! l XWc`n.cV \9N[I|F *_I Tg~%nr,Z/~^uJ1]rpH=nn\z,6c>;`o3l-^:׸c[t;ӊ sreV릛z>Sװ4R \(|dفl IDATn1լ' ·65;bZwcY]Lqq:s$rX<~QbIϙ?t8$`t[5y,HD!m&a^c y1NZ*Ƴq8ovwcF| ҖŻ \eY 7Q2 Si,$A#7Ѳܲ SɖL dRwX^/MJ0&)i5y/$JmIc\nƻw4uײ{ fYjh@#e2̝6Ľ!oہ@f{)pi3(Yymv`Ĵw}C79Ӭ898 9ϭO|^nmˢ;0&.z~w $:Y`*{'N~^hgS ˘q"Fb9Ŝ7inqC݃rZ\O$v4k'VI(aEb/&A/EpT]9Ƈ1IϪ@evuI+ FaK ꄉd/f(K0BJco\H}e; ,ӀzL&}BL'89O0w56c.ه`nnȸ'20&ɒfY̭Zqo {; ѭ@.n.nkS[{ٜwSQ~l<`e1Es^pAMFbZfE?{&iQ.1p?cIy0 }blX,$'`>KBgjRWnVbNBp}-GaZŜҘ״,jڸ83k !hV0q̰10XpE5r_;inTw,uJ}`Des'.s'Yo\r3dBI))i[*Od-@ Ϛu_]z"X^7F1]ˢS&:nzHXᾆKykY|I❇[n ~4"s{1vG'/-T e1x}{xn Uױ.>wϜ|nuψTbuc'V6(//r&o*|ӝ)͋qt]sptY/w#'Ŵ(9[RL[]ͬ//ܖ!jsye23h0n7ȸBy蒫&͇R@d0XŀeYTb)kY&b{nm$PkRe՜Z!D&]n&a`6pD-jLpL L,7ILOJ~ɮ&S_T4J1w|skb'j`OqQlX^Ü,ρkuo⋞v/ܱ@?cʹTխ| .lmȸ7a̝<`AL3NI"Zc\_d NpM6'.`ZbE8ʶ,cϤ՘@4L;?'@X:w8瞋_n{ :`}cUō=ۥjy&+J-k`)e1X>iôB-dWV(C- ,3`e&yґS4jmeL-71Ad̲#0OS>vLŖ+/qKc~>gY´ I$$1-ÌuwqrUu_ꥺҝtg !J YDEVdST߈qdɌ(̀a kM$ ! !V}JT|<Խ=vu9ןY/;ڧ2^|i!""WP$bҡ~9s ou59s*"2.\ugޱ8 ͱ瞫zɥ5яZ6n^\)9H`UU367c1wzbŊ/֘1connsDX7o/;:**WLN3'nj|55moް!^~Yf67Gʺ[O=uO@+ 7U&YSUUUcǎks>ocW.wΝk1MҺ)lkݝ3f4mٶfǎsľǸq>{ÒHM}.Z2瞫۰Elʕ뮟5_?ؒ%n-N̝[XeeWY;tPS1r̘ ^ތߙACCK+O6-3H$Nd2;WXQ|΢~pƢS[6R,+$둽^mmƍ%SzE[oVfY d|e~˝o66:qme/[=6uo|p㆙3vΟ?ye2uj#;vyᅪdyy׆ho\ZU1,x|'9YI<?󏝝nSt/[XW_MVz} …^xX̽u_\;vx<~2#=bҠO9e >:aMj3?~Ző7nC؄ mct{gO" 'l]\Vֵg~'颷?~[kD/X5jvwEͥݫfzL36vg:jGLϘČMlXQ1fD㶭_bO=r͚{ꩱGx^? H8k_Rc<+*zŸe^OڵeW;'u]pHE<?XV5 fp~$G[oU>9յDnWeqq|b<\D~gb1nLiaʔb17嗓YSVTDۊO:sR AWj\ϜQIC~޾f,\tڀyǰq)잲wYK= {w N8cC:XQQB2\5mt:jo!yG(,xҥj|A.|Z##E* N'FggLoE_K*EB:L<I U+N{.?'-]w64s8Y0 x"~ƈsTu64=?Ej)!?KR|k&iP? -:#S;yp(g߯lPbPx1 _yp;RLO]FD`+잡+neutw#DDuP} T/APe0,|{PԱ<|]eD MiB1ԩA䠃׷/_\ݦLT5q;N8_D4;+%"cꘈ2 3޼4JsXJQSO >)@CoR܉4xt`ç?_7MJgE:;B <:xc=6&"{o >Cz"""{O&'|=pe4 8V/b6p~׬%"KDV[qppEDD&"""^Jx_HX@f>[3wپ# @@v'~HjhX_$܂IUvo[@X 64oF.k:g])qNڵbqX~p,>H҂utee江tQ!tN9c/xdwv @UEUTp\kmגz ?^ɼyѲ~ijpl_#~otixI(>kA1u`ƎL. gyM lvPDDDDDdOO\<~&Q!bR/~ptvgU~?g?6pgہ$yl~:ះ.;&y0]v^Qxx>k Wk~Dq80(0`ҟ&x|V7$.,b 'kDX۶&?AR)W͇=w[o-]/ *]ŘC%gL(7fp]Iծ^߇ S)K`q]Q(a?D"gvEYQk5kE_J*8P| `WM3xL=՝IçV7 ^nni>H#~}RDw=t2WYhOձ`PDDDDDdp< |m3dS)?ZqF>=?su0tF`W~馉i l.kh߃/9У-3m]N\\uE.3 }]w /M,mhؕOŃgGcob'ԵϾ~.KR)bCN-XP\buR:Aȱ@K.iBD澸ᆲړOQDDDDDdp<(ԾK(>4po8vA--km*.k"2r?,z."q꩝'+˗G⇖WN؉xY lx!oH _ <&Pvݭ ZNw;OO>35h2ZYJN<;7X,lӍ/8 0.\$v0[VT$@@5|8ꦛbׯGOFAP?=m%ks端s=je3NkACt΃n]o/.Ox ?$CLs¢.KY9Mr*Eov2f>ֽP?`= j}Q:s:]ৰڒN.nl{-~_<=mҩkCz.XPx[-zg4'mY}hʕթQi|@e P#&"""""I `"7R3 f65Y |z4f]:MW_]2.38?KQ%A{'.J>-_M|?gd$񅃻+|S߸ ɗ-1iRfӴi٩V tHHHx}*_fOIlgDup&gp**xp~8p%n/+uLkʕǾ^C; _xxWMރd VDDDDDd< |fR^^^zx)S-^xF!8qD3+^b2uŊ{EN$nj('NDp~eeecǎ+...)/Z-SLi5뵗xb ╭xWW$EMM3#zu~Vjjk[/g$:?ɮMxmm׿jkk[O5#8$=:9"w]GuTUul?}gmmksUUGg&cLؖ 0a„㋊<&`-y|jjj&Gтulۗ߄ jƮXbF |a٬W,PYqs4g\k4:Qy_Չۚ;lg~lAnv̤IU-[ ,XjbZ[56P9eJ2+ij^Z\t7wg}7ffvl,:`bfQ nZ/v=mf3 \SwL4iĉ/v9,AӶGN޴TفcǎG" vxW#tzz!쌥)l };lwߴ%**ŢOhkĪ:b۲$rethvQ;.V~];wf-dc;Zƍko)+.gL`f5D"ifk:VΟ?|i"""""quTIDATQ+W5<+眡+VxSO[_$}܌3]ǀx2m+ےTtA{lG:>L&o+ɌLKqB ̚5+yKܕL&ةޗKӧ'$ɛ h^_2Y}]2|mчm ߡ;nƌdf_2"Uf6& b[DDF=LDDDDD` `0-> 9@Q8X o"" LDDDDDH,0qsι¢ι`!8wu`}Xlu/ Owzb(Ff|zh}0Æ݈~Ϳ3{s;On^z 0ZMO13@#s3B9zgAnȨ4`d2=PdrힷnJ&m@pco%n|OͨL&6d29ZZH&ۨ4g6d2(l6d2 QP~};3U>L&wA[DDF;+""""253J l'vm>ef1\nVݍιI3{{ED a"""""2'ځXys96V ^XDD&"""""Co(ꘈH?(`"""""2\b"""6)`"""""2/חk RRx㾜JmaomGe۾__ۗ[6PKDDDDD\x}m۶upEDD<3OCrDDDDDꘈ@#""""2d2Y|"""D4$GDDDDdE_e2A0ɣ&""""""""y0ɣHLDDDDDDDD(`""""""""G< QDDDDDDDD$&""""""""y0ɣHLDDDDDDDD(`""""""""G< QDDDDDDDD$&""""""""y0ɣHLDDDDDDDD(`""""""""G< QDDDDDDDD$&""""""""y0ɣHLDDDDDDDD(`""""""""G< QDD~Qlfɼe}6埣LDdPY}MY؎}x ,;~<1X+3;~׏}l6ʁk2 3;mƘYжByy5#M=1#~h3;x $LDdYskm[@]7mqu?9^x{9 r?wpsn4IDDDgX`^6MICָ>2,"*pp+W*~o Ld s 9w'p8quAmq~ޟ7;皜s1"""] Ds8w6}[,oOӢwru;~#᳌?3M̐M>L[n G:}@{e>,pε歟Sۻ:>x6afQtCS]{35@su3ù?D {/~P׻@qx9&Yw|8 K*)>ІO>/P_bf?lfC 흊Ԝ^ ħf """sε,mef? 8whf 3̮E1f%3jefayN0?}yoۖD3̾VGfv՛ߛel]cf7n}3cfژݮ̾}U\>aa_ér^3̾:0}M7~3mfe.w(`""m!oٙ@sιCޟͺ^{XH`HX`ssŧ]^݇vx9]1=>#os.a+!k[k8nr= \\afg םs;Mos=r>+x92_%`s?5__8:s?saSpi~|m=j6ϛayۼ\F\#p3KBΑ-+rw>o*`u}a&H ǰB±'?w:e;n|8 =^X 13VXW˶9wC8ڞۈόؙ#pX8Psr|gֵf^ׄ[{8 ߁@8K'%^G0V;&ͬ> $sm?Oaeι3s //")ºׁg?%ec¿m@W(PC@f3?<&z%3Q&sM,PpnNpEOoUCqDDDT;9%`>ylzd_g{qu9ngpΝ t", cJa8ߙY}>QRR 1kUalsv|R:?!1|P)iy9woxt }(g{s ]a~hYJ\'>s\~'2rέõ}&"2DC+CM# 46sZ 3+"/~B7?.`{\霻%|9\p(a= 7Uwo$Nt=I~Z`Q-x{;p{y?p)GDDd .la]Kx9x"Y3BkN]mx9yq*Y:r`zܱ0X.`y37Uv&|Z>k0cZt.۞fUY%zܡT¿cG߳liRpf;G(`""m=7b3?9T4 q&ᬼ|9ׂ6'=(ܣB⫹ߗ=pܿ?b6ʜ6WY R[aٲb?N1_=l>uv3zV+ersks!"""Ye{ބx.VλuTdž .٠^&JvtAp9~(#PY_^1pJ`snaW6۸k|&U7-X੼c!\cMg|̒@snK'&"2О /`O A?q3ɎM}Czl?P+[|!Ԕeƀ#iYemp@U*5"3{3ffC5"/ Ef뭼ϴi̪͔}iX[]mkW9fP l?w|xo oMON 嚌0igfogy7Q#aJ/pv}#Y3dP<X:Ns~zٿ_ #o_ {q_|%=, dO>pkz%c쪜mR+ 7|-O(`""n?BfO8 _ ^Ű~>>M9LXw߇ZwҾ`fWǞ^`fG@}:gd3~k6(7>f~F;s |9 ^qx m(_L`'d0]2Y. / Auޏ11}b&>sK7UU"YYgfلQ/.U gefWٗs/8le0g?pνm?Zn2g@ux>Qe~60!Hgn,}ofw>dYnfwO#6|?l= k VwsnS{f>y4sp8 __Kdc}>/"R3{9Hβ"93dqs{Z~ܻCXֆ G~֗*{s3+$|=$>es.2F~r2XV.b? 4?O8۞.gkoc~\njMRDDD0Yιsx=;8,>L={.>[_kB  Rπs b7gނȍ^.|a;>}s8 +>kp>̏{q_:綄y!Mm_w4Uﳮ'u6?g.9]O?&>Nι'ý?M asu)蜛^ |9wcoǗ}&"2l:G )jjf3ve!cf~5TDDD]!Y iRN3/G0y9w74$GD\HuK !WWRv2Mlp7DDDD^a | a'`IE 0Amfa/O^ӈ6DDDd:zuzە ޓS/dbf~>iCQhA8IENDB`genometools-1.5.1/www/genometools.org/htdocs/images/collapse_types.pdf000066400000000000000000000177531211610345200263000ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 4 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 0 0 214.917282 284.867859 ] /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> stream xWMo7 ϯйʢ>( P{ rH8AF>J쌝`M`##%?Lf.~in9329 Mo3h~3N?^ΒHp-ś{C>L{냘üP 1‚RWv$ D|RHm!%!aR~iayXnχnv&ʖ뉺YP ep?yᜣ=͎*Mk_053c"ɺ8آq:?NOk١b24NFd, g8%# (!GMqNј$x&) %L)!bVJFDc%P`7`}A` Mo~*MA^ꔎi k'\ٳG<-HVc.װJVJJ3Դ\SH->L,0rE##Jݫn_2LVm VcZe&4Yr:jQ$A%Dqkѭ5fVBVkA'rWK>Jn^{2f}D_EkƄǡwOfu֌ SV^* ~_P j6 ̚@ELL'$sM,YjD6V"'RG삫wjV:?͂3]A51[N)#ۻ) q^59°ڜàĥuhiVo҉Yz&Z endstream endobj 4 0 obj 1130 endobj 2 0 obj << /ExtGState << /a0 << /CA 1 /ca 1 >> /a1 << /CA 0.517045 /ca 0.517045 >> /a2 << /CA 0.5 /ca 0.5 >> /a3 << /CA 0.498039 /ca 0.498039 >> /s6 6 0 R >> /XObject << /x7 7 0 R >> /Font << /f-0-0 5 0 R >> >> endobj 8 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 214.917282 284.867859 ] /Contents 3 0 R /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> endobj 9 0 obj << /Type /XObject /Length 54 /Filter /FlateDecode /Subtype /Form /BBox [ 0 0 214.917282 284.867859 ] /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 0.502732 /ca 0.502732 >> >> >> >> stream x3T0¢tDb.#C=KCs# ## = 3s SKT4.  endstream endobj 7 0 obj << /Type /XObject /Length 71 /Filter /FlateDecode /Subtype /Form /BBox [ 0 0 214.917282 284.867859 ] /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /Pattern << /p10 10 0 R >> >> >> stream x ;U OP.BQ}M46Ax`0TR,j)ڙ(X#( endstream endobj 11 0 obj << /Type /Mask /S /Alpha /G 9 0 R >> endobj 6 0 obj << /Type /ExtGState /SMask 11 0 R /ca 1 /CA 1 /AIS false >> endobj 13 0 obj << /Length 14 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 0 0 215 285 ] /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 12 0 R >> stream x5K @}m29A@p] Q$Y,!<E-bl {ʷS#;Kg 55@Čk(Y-g&> >> >> endobj 10 0 obj << /Length 15 0 R /PatternType 1 /BBox [0 0 215 285] /XStep 1000 /YStep 1000 /TilingType 1 /PaintType 1 /Matrix [ 1 0 0 1 -0.00000000000000365 0 ] /Resources << /XObject << /x13 13 0 R >> >> >> stream /x13 Do endstream endobj 15 0 obj 11 endobj 16 0 obj << /Length 17 0 R /Filter /FlateDecode /Length1 3384 >> stream xuW PTs`}vY Ew"V +ADl0!"(jAM 8WI4i:Ӵ1GL:cfIlvbM'sϽ9qkS4 @F7nf-\'I~cVfz>6j_MgꎶMM-t+mAIjۺmgM}n%y֦%\$&7uYeG֪ ӗD<Ѐ=jT!Lc\09LTxp p۷4 5Ƚ N勨X:Zqx5)iA4APc0)ELDVWd*.¢B|Kgf  83yc$th{ 2LiPOb:Pkn'{x4zLġuRL F\jtZQNtH\J1_lOC7)Ims?ra{T[t ;8ũms;ٮ.#|QQ21ѠYAXm'| 7?_6 fj-k@y/פ[tp +WD;p>oe&鋃f5 "o5V^qZNM>yEgJpEde b+U5Wo=B O5KE^}& {c9?7 6Ȁ5ZP ghƤd3'a$^0 v2 a9(x%e6QD)͇cK'Z;vX@z? 6<3OqĽ.z;XRF#j9 U(CUZFB/H  aPG쒎[N +I- HK%ȾWQ%1}hALi~D#Q-\Dr>* $?㝗w7t/ԇ{|,>ٽj_wruяfɵ?-shZ7CLmb$KwL_X{r+s-18F *yK" yYlJ H5Z%&zK\N~ҥɎ]gg! |y2'LQU'Mr0^c13їpzɗ1)19KVɒ83-aȹIrKW9V`0SE^WJXj}ٲ4q}|iU ^j43\C k+*~-_yn "ИbSiapi@=ӵ:A=30e֟ =3/Kԋ{fel*"ZPi*ף֍~}|c jo:~f}砫h<|M8r ߖ/}v(P>;)>mJ^Ϛ*3rIϙhȜَRsI1ˡl}W_ t4VbVJr "Ux北yҲb(Kc.i#&r5ș+RJXbNN edr\)&4)j轲@y@Ph ,I?Y)h)ߞ7-.4|qW Շ#z;=\[:nڐa>(HYÓ w7VedT ƊȮP#SjLޅbHةG=7 !3ff!OJa)):uxʬjjH RglI\J!"|0F,Cp> `<u+ 9BHǿk5Z5"ؗ:b[1H(ב)f2})l]H$`k3qK_\9.ݰ endstream endobj 17 0 obj 2641 endobj 18 0 obj << /Length 19 0 R /Filter /FlateDecode >> stream x]Mk 9nK>6B%~д?#k C3ڗhɇD6<-N 8hò~x[s֨5$A[,$NfnG4R4 Qtܾ!c+z "3$Ζ t 4jVzVW] Bxe)TDHDQIU) ўJt%+zuA$]S%moztV,΅qnn}\q8 endstream endobj 19 0 obj 292 endobj 20 0 obj << /Type /FontDescriptor /FontName /cmss12 /Flags 4 /FontBBox [ -62 -250 978 758 ] /ItalicAngle 0 /Ascent 714 /Descent -214 /CapHeight 758 /StemV 80 /StemH 80 /FontFile2 16 0 R >> endobj 21 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /cmss12 /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor 20 0 R /W [0 [ 750 773 629 686 646 435 446 488 501 229 353 332 625 704 543 488 ]] >> endobj 5 0 obj << /Type /Font /Subtype /Type0 /BaseFont /cmss12 /Encoding /Identity-H /DescendantFonts [ 21 0 R] /ToUnicode 18 0 R >> endobj 1 0 obj << /Type /Pages /Kids [ 8 0 R ] /Count 1 >> endobj 22 0 obj << /Creator (cairo 1.6.4 (http://cairographics.org)) /Producer (cairo 1.6.4 (http://cairographics.org)) >> endobj 23 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 24 0000000000 65535 f 0000007361 00000 n 0000001421 00000 n 0000000015 00000 n 0000001398 00000 n 0000007212 00000 n 0000002734 00000 n 0000002273 00000 n 0000001690 00000 n 0000001904 00000 n 0000003269 00000 n 0000002675 00000 n 0000003196 00000 n 0000002821 00000 n 0000003173 00000 n 0000003531 00000 n 0000003553 00000 n 0000006289 00000 n 0000006313 00000 n 0000006683 00000 n 0000006706 00000 n 0000006932 00000 n 0000007426 00000 n 0000007552 00000 n trailer << /Size 24 /Root 23 0 R /Info 22 0 R >> startxref 7605 %%EOF genometools-1.5.1/www/genometools.org/htdocs/images/collapse_types.png000066400000000000000000000305161211610345200263030ustar00rootroot00000000000000PNG  IHDRK YsBIT|d pHYs >tEXtSoftwarewww.inkscape.org< IDATxwT?/{ T`X5&Qc4&jϚDbCEԨ "b+*,saܙyٝ{=3󽧿*F""> BMҶwHڎj6iA/{ISL h8!iz"" 7N:ih=f=r1z3i{jd饪뷀ɍbBOUm9ik .UǨ^L ̜ٴe]󫮺hŤ1z̜ٴՅ5=FaB/T3svۿI0:ig3{n럴=F`B/3TubSS't.C:r*TujQn(,j^uIۑcS p <fP`"05^I鄇 9Ͻ <G%yMJچrz%n@TG߯o(]_g2/;(;.뺡!q:P?K3i32g^l Z&;P?*"E7^X-'mVXN׀b^7ƌ`BLE><7/0#PT?<`L!"W 5qL\c㓜3;(@U7'Dg"X˼ADvɫv2jYh MgcӀ "raa`g.y=p<\ we zea.} ,  &"lCX3xOU3"00Ȗͳ;7"";[F-M"tBrHU$x/!PTGIvv G<2SjogTVœ9-1kW< \/"7O!m h!&daB-&[`J6 1W Vn秦at # # # # # # # #؂/"'m%$m@9aB7L؎po}W?nSt.Mڀr¶q= ;xw(G70 0R ݰ= 0W=&tFcS ѫa}`B7`B7FO&tH&tj`B7^ GO&tFzLS 0R ݰ= # S zcB7l= 1GO&tÚ)nU ݰ= 16L膑L)n)nXLЫa)nU ݰ>z 0F 0Vaa5z 0`BzLͣVW=&t)n)nXL膑j6H՘1czM>ADz#.Ь- Pͮ3"i^5cDgM-Zjn^%QTS[{;|kQKn1ϗk;$˯v^B5ٰqF/CDA:}KV!5u/Yr_첂ŦתzQ[[w|}\}؁'>-F`B/#zPqڽjj2tO&2AD6Og޾3K]|3J jjnjC^xRhzˆ5u?6`>M:1'LMmݘŗU !lSK 0'ԠB/Ѽ}lLz1'_^=1C>zL ̚όŧ\9!3LU Pw[Zf 8-^. `B/T͖YGGoħ$mQ]U2ky^KUXӽ1:eVaw_DՁ QU2yG,R⊜QU}zVq?m1*W^557US.3Ob/Y+&iC5cBDPGzp13T5чM5c*U(FƍkZh~PoQX^zL^K&tH&tj`B7^>KZ'H=p(E2TΤ(L "k$m%RRo-[l=?uIa䏈 # # # # # #J"X6剈l$"K%mGHЁE"P҆#"5"< |M"mB8xKDN[!"D-`#zUmMֲ6g oȡ"RMF"7E@v4X  77>XE Uc .oKDV#V2xD+pH]D6${,AoYӇy|5C`wv_GDNQ{ ~%BDF[ xxLUsyXY__\gS@࿄=v ,/`Ixx' <& @bB%--s4U-cc:036[XP/"YuɳW<ј1]_`?EPՏ##Dd`#09gU1PsTJj*I"fy뇦c}Ed.y(A9V1Kz_󜩪cT`Bk&`W`\%B^"r000h 17"E&..QD^]DVD$"Ӏ"XW~,";p eq> zDy2C/"imUmR{U` "rU,*"Dd'0U=LU?(d)/w1p-`iBm0 ?ch'DLD<~PIo&",y,Md5rPկTBwuQ9nB | $C_x0.~-i̱s qYjO9g&ᓀ@#};e7A1vOc[&%> [.5ztsU}ysd=>9a9B3-ڪ6paAzn~-"u%yNDzHhg̸sTYUV'47*d=zl8NUr3|r^h0}v,qDX r`Iw%& e^*}T w׋q֪tK0gTu\!1'V{>ˮ> pa:mJctU} X0CP!v[vYq$Bm~S#⣪b "~&a pyB=qfU߄EQۋȢz(pl\m$_(b7UmIF5aey'}B!tp̈́Aý`^ < "u7# ͉W!a|k=3Kr9x^U ߎF'X”"ҭ)˼;1E`t0#/r 㵜g6ds*aO71 EֱSzmqa05Uys :MD6ED4%]GUEdUEY{MD&,(m}8}xH#DdRZ*Dd}L.:):mr=&r(7:2>HL-F0FUܜ~@T (O哾8Y8n0yyBU(aG5HU}QTu:m)rj+K0UHҵWFؒX0njaC6K"ҟQnht>aoBU\W0 xB^+*aa,"'޹ȝ^ۂq=ǁieFjV\YBs }S Nbt~qm4v{.ܗ_~9駟QT^z6lSO=5~ƌ2_jAUDd$/oͱEDйe~qF=oܸqS|]l;p9s)1\DB ^Y VOȣò{_CpD!D\8~GضzM!3~FكqnȖ"282i[JB43 oA9X{~4΃/"Ljȫ8B 5aqyCAA&^c %ztw#"FUm+B8~$Tyw+dF~@MvL>j]DŸe{8U 'b\;x#Es /FQxZ=#f{ x.!$;Vz%xa9Wqι݀v(8s43B_x>sJgK(~9`4snJ*J978{ߖ'Yx< lCd2T"TuztxmΩe~aBSsO 9p>cQ$b̅ l^ULҰR!"v'zФO}Bd;F%mOpHp>PFaxB3jGD$,:Cz{ܥ%*5z܅+ i0 Xf{RzU}NU^~90";fdx$,9Ā`Iι&BC`},ub҆dߖks.y%g0{~R2,Kɾ&G}_0ws)5wF(JGk'~ppsnr$RgpνJ_6);BbH8+Q'~!rӝs6'QEA,-U=/d9[ҶdF:nOڞr9w'aыQ8[9. x9wIDw]<c`jߓ6"IC|ι31wㅤWlJCDVS' .Y0VE*PNd8 X{ ZBHBDF+Yw?,i{zpCҶx"Dʍs<Ԝ1i{* Sկ4{&ap\US(&ιO b{aT0TW"lL πιwM#nޯ={+9(]VLp1g9z6Ȕs~IS SHVH=-IP8.x,1Jl ,1$G)7/9 H_f}9/;uISA̮?"xGxDd. 585wTy3?}胀i.{2>=sk86s0) M>*jtP 1,@TTk!lV{BTgRld{fKt޾TL= ӊ#{&mO3G^B>J2_0sj=+:0>pYXWS;)jD^^P\8Ygpν ޯ=eʢgTk`) EmǰBg;QB++9]Cȩ⽯' esnp&aAM E)j SH g9.(t Q5z_ȭF TKN~Bgp|N:snݪ8_)_-J\0*Pe""}+EN葂=mQ55:@t5X{z$}V ~3/IeMTM=n7`.Bv﫪Ed_yw;3( ιj~= 1#|#_ 897VUYgp} {n$@7bCoݕ}1yιbYPBpMFy&mOiFvS܈O""yCιhQBs/=@D >9>$ #h2qA̵ T}9w/WmyX$tUj{ 8[D:5v8&:sCڤ)2*o`?KjNQ i/X`K` -T゙q2or4U&ȹ"2Ge;:~,eɓ=#ż&mHT蛕Ԝ"q~BmsKѳ!#ĥ?#+A_yKiX)PρEdJι(5#K.IS`^ A jPgFϜ9s psJTb+nWƝ h5:%1'&Lp;ÆnXbzJ7⽯5m ม bFqW}OHO{8ഢ'nHBX\KeOιsqn/#R_gˠ+Y,\BKd[IޟGu̾#4bB8n" Ў+asО~Q`/ܬ(_cEdLL- ܟW*4P9hO[VC{3paAUUU"iPj$tb V&]U&R<|QZU8xLDr0 /  #O|ޯNhaUU!DNDN$RsM.HJsXVU 7|snfLGD<"2& Vws[xNڞ>]m 6x%<.rם]e/>IIDATmC So E`\94!8}9Ni  =W…x!y?yj0fqcM`Bhj,,N;Q)A9a'ڞ b l|("a fs I2`\1>{?nsbMz'p<)""b5zqΝIXMyyҶD%,m|>X^DĤR/6 ׊-8g}s7I!"K?QNPf~a}I١kOȅq)Q.pMjlcc Dt?etΟ(qH79ODIشΰĮ0t qpsg;qdX $y{:7:DQ$,H_v 0_7y%&U6ıt/bQjX`/Sh/Qg>V iY""wNU~+"~^h{、Mh+ :Ї0xqꈎT62$mH%!"3(y@0 0R 0R 0R 0R 0R 0R 0R-DdA2OUuFT3"a.U}"ooTCq NHv+7R0Wg'Ӊ gȑ=Nbg'Duɰ|QZ5xpE lB ^'>OڐjED~\MY&xUU(' DxU*\ 0dت4GT>ߝE9fU "p&a"P/U|a.ygX\-xzanCLa6"nOZj3p,a9Y2NVK$BD\ "ZD.kȦYD!y$pu{"2-"w}"rH8@yVDv}$eΎ+"p~x|-/*"'EDȾ9e,"Dd6l[;1$"Lji/Z:PF7/{ey."| j, 4b l;`a1s"x.[0p1!pY$} x4xl]Lx'e|u1`2pg4S\|7v׉8kײ d9!c~f]뀕~eO,kh=]!^\'鮎6:v\<ӁzZxPw_T'?T6,"'c UxU%! ͒KULU%<)}&jg҄z`8  >KUu?'K fDޱO0,Ku7">;^NpD20v-"2_lt_X0%4XD 5 \L"Aꇙ;d";$ ~su3 5!99>"RGpU7HU 49XduGݽUwO _-.BY!c\`;NU+2܍4SP-#D@DZ0X˸mK ɽi-AH889054"n>yi_,?NXΜQDTG*'uP%:&xzEdO$`T8~!B"<0?Kcd`7z0N{1SJ{jMv!TJ=qA"k~)v1$0X0t\0zCD |/Qv`]l Gi!]08FUoȹDœ:M"!VBk4`|&9l |He!aMAv%t?t9~*70x9&>(@UTDCs#uGW"3aa8p$?ci5C ÷)U6ʸTD^%tʏTudhN:Բ,pZ pP]HߛfNuyu$0psKj[(cq6{ʸtz{0@U,r%lZ # # # # # # # # # # # #tXGDlZ`.W`X6]s-E z|`MLҷHT+MQ :a # # # #ϸZ.Gx3EUg$lQl=kSDo_3ˆQDѭqS4Uzm'"} $ =f"Hx,E~Ņ%C@͝Ed*Z1sfcE?Ľ !˙\7!Z@ N/AD)$1Cki:N{$tYa~?vMy+*cpYE T_Hb{y^n|"(AkLD)[Ddzy+k~U:f5嗳`mG>W"D?AܫL3'ƚQyl-`;ye| ,6E/5ܻC>>E g䇈,OFRՂߍ[ž˄ׅ.6SO]<տn W#~?W#ԬݷꗥAU61Mby-3eLҎrBkM~mr)F m q/ LƪjnԒ>)"?#8XD%ROȞ_sпG W/R?%Uw>s)wZ_XK@pV"(~ -?y0UL&4?+ "VC\yeoYlD[BBM\v7ޱK7Ө#" k GUb>88""eW >%"goN." ?2t/rnl7DDj M5%׀Uj?tDD姩Ed*iAwnhWYO/YܪS5ܻz;5l؉SKaP#: Ҵ<4`Z[ 66_"6zµ[v[cqeG]Z~+)a/B%ᤧʁL&ȂA"N'Dh5KV*Gonn:y^{0(RUu|nTkUEcc_=랝wKS:@Tƭ&N7zRU͔X9u~Qv}kVf"'~ܴų{wf2S??wLږr"&~ܴOް^J12-MC/Ou7#]˨gM?ȕ>+( غZt9~ܴ_㏏X wMMu}UW~B$MF'U榭F>󧟾e@2B55]w2Iۓ$ݞPi͍vo0atBeBUmj<ƎnIB[Qy dSݬYK%m=DdZy*tqʬԑ?c^&IENDB`genometools-1.5.1/www/genometools.org/htdocs/images/collapse_types.svg000066400000000000000000000363001211610345200263130ustar00rootroot00000000000000 image/svg+xml mRNA exon intron CDS gene genometools-1.5.1/www/genometools.org/htdocs/images/collapsed.png000066400000000000000000000705711211610345200252300ustar00rootroot00000000000000PNG  IHDR,0bKGDtIME  (7 IDATxy@d5,E(b  aѪUd!U*WEQ[֪bA|r^R**nD 1B!icB2؞_|9,OfYT0 <ƐO!A2(AA@ BdP"$ ɠ D H!A2(|?B[WW@CAEE`0ϓ $**&!!t/^ &L8w@kv***}]{{ tww6(ݻHaX\\\HH@CAz/Htð~彽UWW 'O' .ahF}6ayyyk֬Q? W^tvv~}}V ZZZj AH3M0aT155"ݙ)SaVZZ:eʔ>.Q(XaX,600P? Ќ ' eơ0{Ǐ ,/tpp7o .a2n8x&י:}}}:W[[;ڇݥI&eeeav…AT=tNXYYYVVhѢ< |>8""Ņl_`ƌőd)))K.%ƓWjjjeeejjׯ߿Ν;x0ШݷoߤILMMMMM===*}8tzzzƌ3zGFҏFob;#A0a„ gw¨jpB|}}SRR~~~Pqk׮?~3>PXX8J\jllo"@AA.x<a_} 埃sqМB7nڴl/bÆ ʟ[l!ۋXn]TT^a}ٶmF|*bPɃ}p]]xB]"="$ Ja(|vekk`0t q0wB6=\҄35 %..N&,,LUUUF6nܨ& 6;vEذah֯_+G[GGCGrBCCTjLL|We}r`v~52ٰaî] κ4af„ xa iQAe])ϰ4ohoow5X,~K(KCCC! a0sy Ν;t3O7ppY믫2cՀN g@ K.tMoQ[[;qD+WVX!4hQȘ1c$ޮ+++999W\krJlljnn^kk|B F!;w>z@R]HMg"Mh0 SQQhH33ɠ D H!A2(AA@ BdP"$ ɠ D H!A2(AA@ Bdeړ.[r2oh B%K 1J( %%877@zcUtu}ϒt̙U *fftBcllXV kQwH,us-j_T"0Ah ݽwhOȞ3JWWg\7K%3,hOs،e?^³rR"gd𭷨׮ݟ:fn>I:FL*{V3 uuu")S&vV)&NF.]N_JBl.Z4ٳ 4-KH*GP>#{ LḺ^Q_ps%XZZfee?ɴxWibXrkkbi'e_ŋ}Fd&'$$@0jhh{rd*\f;RZZ܌aXQQ>ID0 Vo`~~?_ x!ϟ?x+?M6]UUU[[+}+޽{>K_賜aɓ'{_nnnfʔ)eeeN2j^zebbI BJXW^D,GWWð&})GU f$ eٓ&M@Tx\╀y$y!ݪ>K_XaiUU} e',))-t:F '$$He*吜,{p_IƍPT@ p@!W7QΕ`hhX__~%̚5K.9魭:#A"g+..&j첲0 ̴0߇@J+rwM$b9 E,c&) 1~'Uw ٳg+ .Z+x'O$^ ;7dn+>K__rNz\\ܪUnnn۷oߤILMMMMM'Ol#oggggg' >J+GU fxpܹ+ߞ R[[+q%WBOOǫ_U^^')^ g╀I_QN P^9r޾WB3~ Ǐ/NؗR"BիWD,YŭXB~}})GU fo!^ ޾}ޒ(xǏ]%qe'Of2nWB_>K_744k(/UUU-,,<~YYYZYYݻwO?BTh4I>c ߯;x<$O>?;;;*&MXd SZ׾+r|FfPUUܜx%cl9At:w!^ iW¾}ƎkmmM])6:::Z[[njQO IWW5 \`tT r0"K,55u4+cTkϟ>CyZZZ?.x<^@@KȩSk&M̶m_7sALL JI>?xwGDCC)S_OcǎYMOOtRPPЌ3UWנAo]G}vzzz```cc͛7ϟw47BAxʵǏIII %>8-[Ȉd2LWWWT&?4{DDD899ikkI(ay~E eVJUUU۷oʊܲeW |tttlڴ v_Vo5nlݺnGFF߆*oi&KK[|# %!lӛvҥk׮9;; x}"NNNNNN4oA}ĨT$oJE&(.R͞3СCB/_lذF „( -j'w88J߿aٳg]]j p>hʔ)Ѿ2pK.rN%,]uV8"~ xJ24 VSjhյ'O PWW$j;tF[Jj |5ZZhadI".{z$F͚kP^jiilu;ՈxʘxosЁ/6[ϯsO}twwUU |%ԥ~{@%w44L޽x00 *13BN!GAoMO8u){3򣏂O˖E%%ƍU fxRJN hjjJ,qEΒ6TG4A2(AA@ BdP"$ ɠ D H!A2 ¹s2ˆdZXX0 s?e*׭[HX,[[[aeeubr ]]]nnnvvvnnn]]]( qcwwwn#cˋGʯ Pr޽{RL+Wl6qGJKK1 +**uL"aX\\\HHƠ O_n7W3k4CݻwKxZZZQ$jժLhč999rA ;p5Nhڪ*h OHHWꑣCrrǍRnloo3D_(N( ssspWjjjeeejjlѢE٥rؾ}{FFƀg@ rPj;88>>>__ߊ @ff&133333̜9S,Twvv}6Jۊөx%JFF 011%::Zn``PTT(((49…2rrrb2&l6 8=<՟=[:ilF ͹'Op'駬fS~'^Dׯ_ )//"ۅwª)E0b|||@Aֶsws_P5sLmmn}A !a_Ι6f 5BD"ڼy~l_GyA{w"mm}`cclwGIAcS?.7`:ZG[r0ns 4/7ݸq5#ffׯAXXX\RBCр&R9!okѢ7J|^*E F?JXןXGY)1Qv5:2 `NyE%׋@ZH_V0 O힞<u"6]'믿#5潉-QFXAE4VV3kf B//Q5xxxh]mvLɠ D H!A2(AA@ BdP"$ (#ΝKKK555h̄IΝ#f &Nd2-,,$֭311!X,-sBwwwIPՅƭ[Jԋ@ e!łKR߿_KK+..ÙL&;zjpp0/**¯xHHHիW%K.wQFRo޼f|}}Iƍ駟d&ABCC===sss׭[KKKF???zԾw߸q#ihhpSDFFF&&&DtoI[[[|˗$:W$33!WZ5m4/a7oߠ"b ,))-/_vvv666MMMbB:NшJ9$'';;;(I T@ ƍ0"ËfB{nnn\|yBBBeeejjlѢEٽRSSJ9TTTl߾=##c@IY()|}}+** `ff&>>>De_|gg۷oSTfbRBBl+OT*Kw/^011wޅ011⺺I&b.ccc+?V0:;;a 6/t̙kkk}AAAqNQ+++ccnCCC/Ԕ/j5tmSU TLԔ]ZlƎqs`06m8p d2 55qt=-3f;3cN"テ}$^TZfM:~:n9|7>}2sȸ+Vسg… bE̜ą?m۶H/<_~iaut{fҤIqq= &I'AF, 4 CKo|%ooo555(Buo޼9|[T׮윜_pl}mz= yȡ |Wg !/吚駟><##cɒ% 0ƍ999AAA666Tuu+Vl={D"ŋp+J|USS[ld2>>>-<77wݺu/njj+Wtvvb(agUcಿzaĉfb|"vѨ{]_1ofժU׮]۲eŋ{{{*NUU۳"##l"BY|:::6mڔ5Ŋ?K9r$,, `0>}*PH$ڿW_}Ξ=%='tz]]|גCLL֭[vddّĤ_o|7|s…wvv*Rihh\e ;;;nc%9s͞=[aӵ>#SSSkR+W8q[vahhb |┕eff2h،$?????7nDFF:::Iɘ1cTTTy'Od@ѣGFFFƍmm-۷/""BCCʹp\555pmذȑ#}322tuuOccSJHsʕ_~e0oڴŋ111666XsGdo}. ƻ.Y$+KkP('OޱcF۴i*0ϟK /#~'1To-}PSӶf_)ɓ_}?rʡxKd„ 7oŗ/_4770pҥk׮9;;V'''''X6q7'Ov?Hd``-@.iɒ% ׯ_r>77WTT|7nΥJ&ֶE|]vmHȿ/RFFFRR?0s#޷oݻ%F{+¬Y?O?jJOO˥h} +W o\r+v5@AC &MpE0aP(LHHǏO(𨬬|YZZ2KJϘ1߇R駟 ÇwK ===d]uYXXHj_x{;Haks^uuuLLKL"t:]CCxNa]rrX ~皚>իW5##EF(`x2|ŃpGQ8;?Km8rD1fι]4\6(e$ox1˯օkrs3JHJ}jٻ`u]SgΝHҹ48tW/;>L?p@rF?={/_vO YÇ%,'NT+ȈFF#]1PUU2eʀ:cx-(8#ijjJlUVe|'ҊbPAzzz'O ӦMc6rC ɓ'Nhdd4yٕ7z_`+FB9hii tDv >Qak^hy]ZV^ޘ>ݾo34KkjFƮ</F_M|/C#]|1,:rF$H/*%iol}򤧧'OnH PDOmmmEEERI#=P (bO?xD-gjz{{y<^mm- ; qvޭqFȨֆf)NVb"[[[DeM ]lYNNN_U@ *EQL}QRR_SS[ ta}}1<<sBŋgff¤VNT*hoo C 011%::Zn``PTT>U]]p8Iu$2]tww;991LKKK.''$|lnXXf)7%%pOOs0 #""&o0 ND/SNm۶W1ݓ'Ovuu=pc6o  `]v`$ooo٩SdVyyyFBhd=(FHѦ ?"pP"$ ɐ:*A^^qK8(l0hjjс>/j,Xq^ իWaȓ'O$fyG3J/^011xcN>}pS# Cwp߈i&֭Y~55UMM5sderTĉ[TthyW_}eff)5&%}4…-:}4WloҾD"mɹ sݿ_*^h%쵵yӧ7553܆N7TCuuް?9s溛זPNLLO:^Dׯ_46 BQUU::q7Car/tpW_O? ٹm[ﯗ/kllٻwرc |X,&>oaar'N(FEvvv~g爾^jhh8qYX,ɥG'mܸm֬0UU59+KΞ={ƌG 5sLmm~G 0O }. P2"7oNz̙%Kٳgi=qotvvn߾}߾}Dٙ3gW!͛oe=222ۮ6nܘl-50'C,Yի7^kbb'G#lٲk.]]]T-- .`ccG?NO4M]]Q~.r 9=:44xxx?)ɓEnp8K9 þ曨YpP(,/Mf*暈ZᅬOY~/ψP$8pN47~7GGG@oo2F/عl5ϞUM:uꔝ݂ ?3@/MMM2F*kddØ^Dp˖׮( "Z֯__\s "@9x6Lfg 3msY_,pMaaK_벴 4H~7oo=^DË#َ oټy}s:N<<\LL^xQڿ :uQ=="N>_l_g3*PKK/o:L#Éʑ#M Q)SL֬YXRrlG--}޾}lGQԁõΝ(^x,-~\W7o@Th>|2S%FQ<{V` ]UUy'vOOL L;"*bEAؼyիWfHieL̖'}%Ph\`> zm :,^^}ΆtH̵xz8#FWcI3k, "5dnK**qLё.b.A ;ǂ ɠ D H!A2(AA@ BdP"$ ;w.O,--)OL8w1Kpp1SrݺuDŲe0VVVw!(' fggB7菊IHHҡAQ^X,=$$իl6ի9ʥKfggeT*͛l6;--W$HTTiiu1447nݺ.[^^^^^OLj@ GwޭqFSbdd"( ɓČ26V__n|R$HNN'|XjUff&4fffƜ?f(۵kW||'gm_NannN\6==]KK+;;;88XUUrJ L<5--->>n?-..P(W^D"66vժU)))xkRR74h.\($f@  a#Qݑ`VWWBt?Y3PdP"$ ɐ3P(ojj *Oc`` A&\.W__mba?fffӧOW1c2444YB\SSsڴipŋ&&̭L%qΝ!BNFD| &\&Y}j~/ fC[ZZ?.x<^@@"N1_4.a4…-:}4WloҾD"sU*W3B sbX !L44t2qXJ +544D"??hf2iiiVƱCϓ0<رck֬r/]4c 9y5yUH$ruu~L ~... EUUUf.55u^W\{X0</ݸq#''GCC#((Ɔb ޳gH$Zx npRRRCCCjjj˖-322b2L&uX,|EMMM|>bʕ'NXz@CJ Bd/0r...{#G#*rʉ'޺ukǎ+Veee #::Z]G;?????7nDFF:::IH$RSS7oޭ[)r=222o7nLLLUp#pӦCUUF|Pxي GGǝ;w;vE9;;;;;ק|ooo+ݼy3++kڴiQQQx#⸸EEEYZZzzzⓀH411y;d*8@uERo޼_\\I\^" v$qu֝8q7.[,)) 7lp?Gwޭ'FFF|OHzxbFyIakk7lH$A233cV̔0.[ 7"C%%%*,,,4 #|ϋq#z\T---v"@AA . IWWɴ7),,f_z뛒HNNxh]vmC:.0~'077D"@aavvvvppjOO˗ Svڒɓ]]]6o /^P( fK$K흒M4&%%\ - P HkFیףM3PdP"$ ɐc7yG 1QׇbG,X,yG%g5 CěiAXQQow@,>>cƠV+2Pv;skxӵ>#SSS3Rԕ+WN8֭[;v044\b>d!E…Bٳg+**w9vA\__󽽽@ !lqw1%?{ Zrp;a„͛7˗/GFF WO7{cGiiƍ*++ܼyݻ)S,_pΝqif͚'3# 'q͚(wSsZϟ?(={ٳy(ۚ]oAi5"oJmZЩ2+E F9HOw%׋@ZH{wӧʯ*** '_;1 7lٲe;x(.᰸ ki*/+"6j|>Vb++?PxB5rA^:o0%@PΝ?o~! @ H!A2(AA@ BdP"$ ɠ D HFyA8w\ƟXZZA;ɴ`0Ν#f 666T[ё(cX Ν;$AܺQ(nhܵk,N_paGOx<Ǔkoo5\.0.ݻˑr &Hiiiss3aEEEDd&} 0,...$$CBBpcPP>{LSSS}s5<iR߸q#idd hii'D'O$fV__n|R$HNN'|XjUff&4fffƜh44c,@ e"CKJJkjjpKaa!NhUUUI+S) +.DR4 ގwyܹڊ~A BwBPRSS+++SSSeee-.CEE3224 몪~A wpp }||𖒙p3g2}󝝝o߾MR'%$$"t7^|RQGGGK*r[F ByA-a700(**AQQQ )LLLIaaal6fN@rrFO?cI+WCAy.ےse9%T&OꚖ_WWyf((..P(W^D"66vժU)))И 0;w|JBaH;ˑt auuu***4 ic ɠ D H!A2Ly( 󛚚s&uuuݻwaA|!rbI;jff6}t hmm3Fѿ?@PXX(mh666 FFFpEhjjN6 nxns;*a---}iv}}=ހٙ/]̙3q {G .===''yĉUUKJJ/fVk&'#"RSS@|qaa ""`lڴ ue?`bŋmmm===+++`oPO[KK P)5&%O]prѢEOϞ-@~tZHw߹rrJ\)+;+Vسg… ٿ8>}&QqضmALLmWrjnn\`#yt$ȭNB|%ooo555XD遁7oބJo{{緧ٳ/_͛7^-KCGʕk@O?K,Q0a7n !Xf#/^<_8NJJvhh(GMMmٲeFFFL&dp#MMM|>bʕ'NXz@@?رc|>x޽'''mmm_.\,X?>}/ N w^6p8Ϗ4Ќ^jhh8qYX,"Yڎ=յw޵k׾[} 7|jժk׮mٲŋuR۷geeEFFnٲE+BY|:::6mڔ5,k̙]]9`0O>Lj #Gctz]]|גCLL֭[vddDGG;6l>38555 ;agg֭{1gΜ~gϖ>G*^ J]rĉoݺcCC+VH VTL 䣢wƍHGGǠ t2Djjjͻu62_ѣGFFFƍm#ErjjjڰaÑ#Ggdd7+ccSʿ&$$߿_MM/ݻ+**/_|P40Z[[9wD6}6l6;88n/YdΝHP(<{lEEΝ;ǎ;hW|-c7oʚ6mZTT8......EEEQQQ$ Ҵ5Ϝ9yԩSOo㚺>~( j@ P?Qġ :cZ+6T@hiFJ! P\j!, 1@?xf:{<9K޳Gjժm۶(޺U'sN<)N81ƺds8{v)VJNLOOr?rR]>7::NJ|"0eܽO>]\533c2L&$$$֥o(Ҳzhx #.B EQ&$>-!KqqԥKIr-[,\HTU4Iɓ2gr_~9wx|| n55Y*N$xp̙Vt]CllX<)իUvėhhtt߾@voofC BGGgj-E\ܱSbHc5"`ƌjMBDGG~Mbbbbeed̙3n[ @aeeeaaaff6HR4ʴblvE  E݈YHXo_Ν<M47+_xjl\`*ϞS(SJDžAa]]Y_OҀb>.YZ477(:HUu\ w/_ZO~~CChGGV9^~}޽xB$b<($ɵkF') *O}&N8b G555 z{{===XJH{yقJ==<Ì}}}}n F`nݢP(333633P[[5kWġ&""";;[Sj1^A?G"ٳgR?}rʚ@nnncc̙3aق $ROUxܿV466666***`EOBakk;ݻwWWWWWWNt@ZZYr%f\b~hOlmm siC-~~~:::b8WPIVVVnnnYYY \.744:TVVjkk{xxܼyS)*bbb6oޜnjjZPP^^^8uzCgd|Z1@ !A2H "$CB_@ (//.CCCbQ`٦fMH$,kxN@篯'hGGlQE`Qx܌m!4|`ccH$\.˖.w;Yx<JVG;*Gssc;:b3F9" > 10oppcHHNN=K;w$z%I^^^yyWb?#kkkSRr_-+/~7b񞞞sQ(6___"?.0nnUE!+'5k.^~#U; >yr1+@$y{{˗/T(?>Ǘ|*e)ne$ɦM?,( X/rҤIɓԛ76/x {Ŋ~)sRҙTd-O$Aplr8eٳgwuuI &X[ϵ[IzH$A5|___"ױ+3RgϞJ۶mcW^ϧh1NY==};%Dnnno߶YN>}ʕSN-[L[[[GGGT v| G@R==Յr"Î^~;w,]T~|߯X,|ׯF8kSvv$i޸Q\_/qrR{۷755egg[`ᒒ"}}}6w\ٳzzz6mTWW?~\$]v/8466ST:.£g1 Y,*xuvvG*;;AQo!!!111+W*)MII9r:u `3χ 5*iiiiAAAG3gΜȒ :8&KKKv֐`ɴQhۆ}ֶbs˗?F {k!ӦM H$ׯ_ vppP;_\\ MژssɓQz/da9:9=ڵ/&]SSs!L8qÆ zS<ÛBȾرcFYk״ J{Xf͉ǸiBWnrf;`@ HLL tsssY`@```|VZUWWm6%[ >dɓ''X0Lcccs^.Jԉ:pϟs\$'$$$Y|~ott4%J|%?a,{>}\繹ϟkffd2Lb{p>AAA---W0^x<"PEllroLG]$gܲ…t@UGsIDAT@#O{6]zBQ7"Gpsg(yE1/lʳg9c{{RqapPXWWǓ4`bXmVjWZ =JK577vfD[UW__xr%74vtmQ1 'L(j`B"\vmx񝢠R8gĉ#*E$744TO8%Ojn`<(O=lkȇϻ] (A2H "$D@ !A2H "$D@ !A2ŋ`kkDs}`kkkKm)((ׯ_ǹROVVVrssJHHrСR[[͛JOVytSSSl555 qE#B>Z$3ЊdA"D H AyyyWW wtuu 655U7kD"aX#ŧw?}}}8yG;::d3*fl ayGU]??'; ۉ,<Jbk{pmSOOBӓH$%%%RT$9cUp855k9" > 10oppcHHNN=K;w$z%I^^^yyWb?#kkkSRr_-+/~7b񞞞sQ(6___"?.0nnU{!+'5k.^~#U>yr1+@$y{{˗/T(5w[dӦMǏOFKqB}}},_~9i$l[owEſ_w066 ;wnHHHmmc./?)Px___IIgS[}f "[g0)Ξ=K*N0z@@(MzGGիWE"}2'^Yjoo?{T*ݶm;zj~~>Fq-QPH$rss}<>2xp+W:ujٲe:::8Ԣ><`0^^^ 9aW^]~}gg;w.]xO`\.Ψ~bgL݇xϜ9?YցJ5ScqA"q^۷oojj^nR%%%EEE4mܹg6m>~H$Zv(^nqhllLOORt:]GWW>333c0 M݋X,ooo=Utuux<[[݈555}疖gϞ<2** BRz^tF555ݹsgJ}ؾ};?}lLccӹsyNNJ}ghhb…,HW^ ¨;vǎۼysqqR.""d߿_iC[[{Æ 'N a2j`X ,RBIIIw8::644`1"HJJ rCtt4ʳvΜ9J***Μ9'ӟ544h= Z(^t {-Zg?q7n1cZ,,,JKK<8eʔM6+ǹp ---0gggFd1H$]dIi]m8Clo?fb$%'lwwwceii*}?x`ѢE &XXXoŋZɓCCC?'aHagg(VWWcN׭[d2}AFFFXXسgώ9equu믿⋬/`;w۷ŋ۷o'@Y-[?!<<ܹs"^u[[[Νe#/\}v죹^ggZ'%%Eoԩ&&&\.W3𡗗ʕ+bXι@opN)|?67+"t4$1&&FQoQ[[ʊFiӦJ$ׯY[[;88/..vuuQGژssɓQz/d$7k׮/Xq<<)[;6n5kvvvjj}޽ ,BထοQMMMB!xOOOŝ055=yCW)! Mʕ-[Όx| D<[]}=N777|gժUuuu۶mQҡuOڵ؀ga!P__3iҿaBBl{=l٧/4E;,Q.%l9p!PUu:2rH$'O˜l\ )(d8QjJJ$l(-P+''ZfdT6ɻ{W8Ox)GZڿdSݹ'O99y3*1Z)bS?Eo_ wWK@ 470wX7؀@?Ds"P(jF?NϜ9cV*&+E q4ʴblvE YHXo_Ν<M47+_xjl\`spyB"glooU<.  xrX,+p'KEssRX,cD[UW__x@~}~`JSګ eGG7ANׯ_߻w' **j`B"\vmx񝢠R8gĉ#*5C86Ub5E1x·=E!B>Zvwg, "$D@ !A2H "$D@ !A2H "$D@ !A2H "$D@ !A2H "$D@ !A2H "$D@ !A2H "$D@ !A2H "$D@ !A2H "$D@ !A2H "$D@ !A2H "$D@ !A2H "$D@ !A2H "$D@ !A2H/ލ8CIENDB`genometools-1.5.1/www/genometools.org/htdocs/images/collapsing.png000066400000000000000000001156451211610345200254170ustar00rootroot00000000000000PNG  IHDRX*sBIT|d pHYsVV/StEXtSoftwarewww.inkscape.org< IDATxyx[ՙrŒ/;ٜŎ h%eBB[h-eBvJ;Sthh$@ز@'^ۺCmɱN<Y9}st{{1p.:cSz= `j=p8MM}$感68p8 An'8sRSgùp.:jp\iG cJ`-cd؜p81p1>02gp1oTjiP GcMp PHB/n (+CDLPID,}vx[ cev~1ߩh Xo;9lb` z#P,p8&qܼAd&.ʩ;*jۗo/B$?]f /`Gw  Zhn_Ǯ/WNp%qND#`0@=#N5\Nr8@ !pǛ, `AUuq'x@p2|'R @&e?:[LgS[Ѐ>GvQ٫v*\%"*@}6_E nRi"(,ءDayC"c?r8T<ci0T>14=7^q8WDt/$cr'C.|AyCuWU\W9N>p8}RSg؀d}xC 5D ''G7>\ 5uv /WiP:> 5f~! SSSp!,_nJM] Kۗ+ Annv`6 DtM#}ULKKT#!55kDAB(J""!##k;BMddd"C1%wcg(dee/Ĕjcl(9DTBD7_:Uv ">FD~ZZZFBMVVVJOyrr)5(---rss-ӗ<"]w$Eғ1G$]Hz5166G$E 4h}ڗP@DQq'Fξ*x{^.jaX nXP$BrDQ\k;Vujk;(ˋTYڎ힕k;Cq 7PfZRy~IM]"/#4=틢4//5 y &bzQ{G~?bIO_rXċl4n{uvgȲkqSyŋjmmM/_ɉh`eyfF_}lwOy>f;Ze;fX(8xR!pU!avvEQFWLHHoXb>Ll2ڎNE1b`0d|,K(~PTX` %=XBiXb`Hh4y1y`4 EɵX,1M8P1^b4PGNrrrzVnةn_Sg'per` cYYYJoXmM:.9d2PoXz'&&y.WT:T\0+1IO_rɔjX~<[,tI&b?zVӗ}!k m&7Lnwb]/zCi4/ ^wxR!}:vҴ7tW^8زeKL\RSkcx(777nҤIǴ=7x^{Сcg(픔hgsw ;>hI6@p BY<9=ܮ&oxٳo{v{_z=py>f;Zechz!0r:QajߺgZV!jf zؙbZ ;VvdX֥C`gj;1?v!:~~RWu]_%+#gE;DjoKO_C~CMO4y@"z /. hp/p8? s,SSgZXZXm >/Ft,RSgW3~p8*mƍAYJNښ5kק!!T\QG``JҎ?>l6o e%%%o;x911QvKKK*++ |>qٲeB8NZ~@,yyySo!"*--};WV{}>F NPVV^/+--2E~+uݸqcvJJuVTee1@f?vXFY uz}^^֊EQ牢x^OKK+YAe,,ԗn3999SA` Z#]@c3(i;cc"Q(1E٥(J@ٳgDQ3G8"Lii)3$ޒeDQLE dYCظqc,~+Vԅ98eʔ*++Kc+T=}p8Noj n}ҏ$Il6$I'YUUUOrrr ֆmS4eʔ}!!!a NE }$= Bw>"Iҽ6oj9_X.kxŊ #ȶ˖-;>v䒒/5SSg c`ZjwI4glԩ$F+\q81aXs8  ҿaÆ䲲Xj;?RnΥcmXJNcСCbrI?af͚:S3LD~O*++̳^KDuΜ93o@r8!jEDDd$l"QP:p8=!DtegQ ͜+ "Xf}-'DODh$?MD6yPQ= `ܹs+"MR6mڔRs8FȨHLLt i|p8Xi`g`=S5Mgo۶_(S{g\qDbb $IvFCt1E!IҸ5k֔%$e׿[޽1cH1qÉ|;phƌx-ʢ4 N)*0$%GKscPrr¸6kq,mtq *JgwK;&S|i|XQDh-^ N-vM#%ɱDQιP:..fsK;F!=#vJ;"235qoVkGO|1e07DeeŹ 3sr,|G8PYٱ%JgonOر˯?qG|ݩSMMO4yV֌QGK$w[0\u[_/'"gj`HU7޸Ƅį}-%lo@B;|ؼ~ Zyժ1&G?Qy]vM70ƺOW4iz߯|CQa}}7=+\Anz 0xk Kp8ċ׾:0E̜>>Eτv%bieWj|էg$貲999I * ng:=٘ەxYp04^/TMgáhNe&X::Ź\>Ď@(sN ]'n*s:S}'jlѣGz*%$SYYY)paiii񅅅>222 5ɦP;v6!:Lɴ(P\>u6yhQHIJ"x1Gzq==$)A׸h9qq@Rx=uVW'47;$)!55Ξ=s`q1&[CM9sePYۏfNuETk_xL[o&/;lmʯwk?]7ސv~m>l﮻~ڼ\Nr͗}OۂKjjyJXQ0^w DJ4|5vD ,Lb/K]#=vDQ00|bz!cg(:>;|N`ڹWP?yuv振2܊]ֵOa?{$I#)8um7eGQ{ZSz!µyz[O~#r8 2!IQc U*' R% @c,E?0N4M'| f4 7iOr\U%+\q8+ijU*IcGEQ|WQu\\gDTz3rss0*.^":+ZN"rTbJUx2U*UZnNLDꔔ&aN3c({}>$!5\5Zu~L}sRRRrL{7*I&_WUUSQbOLLXbKO}$2e '3[leX5jTSP'I(^lY5azKKKz_ kqNxŹjxW\y 0ܾp8رj*E%I dɓ'G KDSP突1ߴO:0ܾp8rs8`q2֮}cy|޼ŁO>j p8NlWz5 t˯7r8gșмm۶Ν{2ܹs'x@tΕp8!1V-I5k7͟ IR?|:XowhIx[#X!󅀏`q8g7no.ĉB/3D˩S )_77d ?hvѡS>iRÇkz'N1ȑ3+'|Ĉ\Spt[{'\Zڷ0\r"2&S23 SxW}Ck@bv.gJvgyuNjn߾G~n{i4͉䚚P_ڽ;zn?`_>[omh@ٰaEeO\\\|aaal }]6l0x ѣG=&L[j+  ?9#zeSXj15UelTsyf#ˊ?>%OI9!?֬މh'5u/9yLkˆI^+7< @MOdyvvV{=7<VEX&y32ƻz|~,dYvwxE?rd9$  &_}"!!. jmmuIKѫOg6k<`k#kOSe1z7DNDdTVVeِ?1dFuH1v@",j"ʷX,U 3QE(]7o6A8+½D`6UVV>iƍEk!뉨eÆ |)V{A!\q$$xGiG.̝{0mڗ2Ga޽QGƎ],Nxt5? kĨQYGGju9zf!+k}Bzg)rF9Xz~ Gc:TAk^"An'c~~3c+Q455-:Aey x<cEQh ˗/z8@Q 0hƘ`J:* svq8g 4˲_\ZߥeL^nA:Ed 9tS8SϘ">xo~fffjFF!--->333Ap:@!S/,{^dbL|NStą/NeHFzmF*ߥzp=[خ`B~wp߽^A=ϣ P,>G%^uVV%99+';;;T.Ws)O?wY;c~U].[,Ŵ#Gjrss-2Cw߻{}Ӧ]=eboO?Gc]QNp1)a(%"=c1!@ZUUU1^@eeeb'EiȰ666A\***V,r 9m(eymIT*$*Eֹ#Bd)DJ Տ3x |u=?L8$IJ.EZmp DQ Ӊ2>tt Fř~T*F9,.j+܎FctگVëV3L3xD ؊;wZZd2Mfs\DO ;uӧw0|:B$@f}}}cP +;T~J]T}j^"OXY':?o8UN!3nJ+{<>FMATT*}Pt&犫Lm[9t:Sg|"Ac0.ػ|㛷x d"XO I4jŊg Ƙ>.--u;q༫-Z5AMSN˗ӧw[ZZZuwpQ/X9ܾ Gϝ;xNHuy{mM'ؽK7Ο@]lyoG+Wùvhm=}N?p`OeeE1_{p=xT}Hv L/znWkzʳq/yzܬݻ[MO4Z]v\pv{T[G=6uUWt}o㊞/|0оHOܼ/=剉{+ #1>̣{TMNC=4OY)ݻ,̙{n;X4 ԩ?$){߻u/$)gyYfo6{KdOXA.>CGM@l1?УD?P/i}/z;8zopl67SO3l6oY?Dp8 8pK (uD=b 2*"J9Dd~Ƈm~ѣGէOօQ u 1La]8iם8 FHV\.`/TP}η[TXJD'p<ǃ GgȜ`'M\уEHPBDN&"*p3IW$}h S>`)Sh ^8XNDXIDVLD[AfEiN I|Aʳ$Q#h0`d"j)i1N:3@7К%&|)Bs`p͛7pt2D T"@:}3qݡCƆ4hndgg?xɃdovvAגD \'^ jۤIKR7]]h}Ty\\AAtFuuoLHhBFJ֦,. 8vlfVhn56'L(jzvt}6+*FUk夥&TѡuLvI8~|}H`S%~W?[+)))3E9YYYy( DT7'===CPotyIIIU Ymӂ ʚx(3/--mعsf(].ten +D4a|AA[>#h$cy󆩧8W;Q㯛QR3fFR8R 55ٳ#.s۷ 5'O~ SKss̘q8}0~}x\0aF7uua8/&O.Ո3nZz.4a֎s1ntB;ϩ~yy Nފc9 3f܄#VYqii7t$&AƬYSrQU%L6&֭0~ ,kbIfcةX;WfF={V%9uu@~HN΅ Q7 c#-Z,ڴ (̹͝=y]$a dY[3pH`6i':9#|ބ AD`cŊ쳝X򐔔m)c 6}xժ_&_'vUlhHZ&,@gYYj`l.z]oC"-C`!1ae%-(j"8|gE nXcA2c7lZVE Mur˵r- 6aa"?_"Nr'"a{WL{ -ƀ<|x<k38tdeĸqӺFM¸qp𧨭=ߏ={~ɓ3m~>LL$_c@ڰ~SX =aAeT'0rDuW!T*5^>5Fc" ƶ mUT7aعs=O#G(\ۈB7>5TjTj06833![pvd"''ą 8|xRS- (,vU_T/aL5yy珇iV: #0`v_7w޼^hמYh4vQn:Nɲ*"jH4iһE &A||^׊@ʠm )jyrz|g+VlaV(i"_"`Mhٷ,#>.df{Eȑ{Z] (*\U(*Ijk ˖w+z{BD8q&N:$ډt8{3%b.#e˯QRbVOQdmo.a2%"'goaժm0HKƑ#{ۏpҲyFݘ8qw έ!0ƢJ޽`޼;gz~Lz&;9srn/p Q~̌1mmP/lպ 7 TWo$:iĈɫ`>a?s$dffv\pY&t#"OIIɻ$Oz$Ą ZHNI7p#(s!v|$IӵZ퇋-H˗$p]ZWX#QFyo֭ z;%Eҥî]f?ZȁI8fs2I|Qk7F\3ztdy2dɽؿZm 1~=݆ qw!"hٲDZcو> f$%hv[TN&}-9鳻vm?o Rgδa/ADjٹ,.7@[aժ5]Ŋ!.Bv5替Q L7-ȲL~rzǎMOض6`,vVꤦQ]RQAkCj7m/=̙=úֺ~EZGZ̹;2GOW'&&z=Lq]={c{3scSϘwϓcb"Yt.JrOz_W&v?K}BADZ+tM'd.Yq}frEAm0ĥl;@Qjj:w;{Fc7--u)j5Ç7bs IDATyLj۩~}N't\=zܡDI'Kfd_Sg7ׂP3"[ٳgl6Uw`[ocLg] >Mn&/:i Kss,\xJ8s:;mƕǎ ;vjWmɳv5vm U1&H9Ko, T䌂Z-{n…)&_ޟqu0fW_UǞ=uⴉg#!%%Sߧqs)l`|޾O4c0ě::lM?5PXg[꒱PPPŒވѣG[[3j7#F풏? lCjy`ɒqlk9ttHNBBRLI}??0!-- )Ap:ر)t2Ơ( >Lַ}ߏq㊰c?/9%mF\1\ۯ=_}qL"Xŋ[7߁,]bgͣμ*} !@lƋ0!=3,d29_Or&oK2/q<{r ofi }ATRwZ%}y]{o=ϾS\ytL>W\vk:㢢#/_,kf744M'֨ȰvfsꋼUc?>>.*<<,jD}:}p ɯ?'ÃB@E)/𗱱K>\h`6/ŵk0;ьwƭhm=/J-rst8HL@S=(CLL%r۷=1&'g;~~ w͒;c1rH`ګVQW۷ݱX|S6>Ӈƴo "FE׿cfuٙ=ҵLb?@ /<| \Nhڙ9/DHa4E_M4Y @k<Р1W_ 2-[o] #U.11^ϼ?8'p$y{JnwQ"k4n&sQvk^37Ѧ>N mnw6]x""6x㏫t 9I4ן74\Ѵ`X)c4M~ m͌,(>F}4oFEpqrfM!`z1  Iz J30`0w?.]q3+E2!!DM? . " !q(l'BBrx$UvBB#%B|3}f( <Y !; q[`0&JP `'| Z(QJO zCVB %]0 c{`0LLa'zɒ% FBPX/$JgnX =`0 Lz5 Ppcy饗~K[[[W{6\22""ѣQ;wㆆoM СCkV8}JJ郄R !$///tԩ}ǵh4SpzJ+66gXl9E_&J4:u b/~nBȻR1 q.!3 c< ,aY,GI60q`0/er  UBPJ[(JUq}NYujzrMe+:!Re0Z$I^n,))BdYSJ:tqI)mqݚaÔv !n-Ȳt:h !Cfsqsh1i-[2!a $Da )0!f9_Х"|ҟr94?Sz=Z]hCWYjv9}Ǐ[V_!k-Ύ!!8Qnl5vGIhll=,,rVk®\9۝Υaa6Լ^'?[==n jkI%@G)RYGIkloMJlv5M|FF锞a.\(RzܹnE{<^O-n@Ǎ hzo||MKm!Kz{m=;~cQpr)Ov(:(`K>)))m0 Q֭[7##LǏ7R_ ˢ(@޽{l9eׯ?SPPϜecB?%Qoo)rsU0nb]Q)O@bbʨ oòeQT/x{&e6 ?_9w]xj)"zquINtt4RytD\\*-#p ر#pl"Z[ ͘R J tSX& >> iQSs ,ܨj Xoo'`qv)̙7j&ftqqOi_j#PQq))pܻ.`ãfFyxt:22rƵ˲FԍGAhh8RFڽ^7 ˖Mtt4Cq""bgpK ᰡ<CBǧn<1""2b}< ,V*M@n_/-4Ƌ+Iw Nqz =^p`ʕق?_C<7jj.RyAOg2!+kͨ6I\!BP^6v/@7_FnI}ɲގ lx< ċ5!Ґ8q\@! q|DxTVv34dR Aҥ9ฅ)`0"nkk@T >uiVŲ (֏V,ݴѠY2DDY{lۖ:ҮVkly00<5uVsǿGD!xpGKRRD|9 5ugjoz㢊ٟaѣ  ?qJ>B6`3RSJ.}\}} 'aaQU InOIɆ$m@{{P}a &\ӡ#==Gzz'gԩ޿ĕ+A7DDl.DkkeVp͛GOe = Ꝏ20˗?=e˓,hjSPx*ST';UQQ'+`'|&Iy}',˞q6OVUŵN&?JÜN#"?Dbddݨw{Y^͚wysiXXmm"zj2?:*R /+;Z.4GUEm-Iڽ /HuJAg2ݙN?{v3y?aԲ,BRj{ft:#D(+]m٦~XD,̪[`,NaH(kRYܻ~VJ8O?#w;11 &b0 EzaPJFG?SXXR*B4RoTCA\^>_&O=T˝-l`0|(t`H@)lzj=`LK1B !!uuuzBHoVBD!o_oՄ!!_'#ܝɮ ]"L ?EDaSO=%IҢHsΧ79|P`(X!+x( 7A!$w@n,ק 1-:A("N ~~Y'b鄐v$A s% @В`Df6mPP'J2 NJi'"hQ`. !$qJ ?WHtSQQ/v} !K!_}4MR+ԽzjwZJi)fвBƗG!x:;;g=S ŋeLhRJi =J[oNSJޠ7s~(G(g)olVRJ_;x`ASMsA7L;00~ \Rկ{zzIIIubbb"|III(Sbbb!OLLL|AhQGGGv?>ɓ.!!!2:::$!!Ubbbϗ2!ꔔsDDD****{|FF6---Y{tttlFFE76V~jM萸(Bg6WvT*9&&&d8>(OLLPT[T*!!!jJ酼~322/bc_t755655`/v8~~bcc}}%$$Dk] (~$}LLLpl6?~.uZZZV [b3))iٳQjc3g?SҦ`0 iSSS(ޟ+5??tH;E;v>cCc̵"XL)'u'{78ͭ>_/A(CUUU;;;};{Q] mكIG @x~>cQr7b0  G{:.êU^޾ϝ9S_a6\CXH@YuWp|7lyxtu6<ZK DbڢI7.|Lt-OBcuƚJ WaF'?lAoo'R^jF||ڔe.OcFF2>xPʴX`ٲx7xyڀǦM_!55d,8w5Lv R Wyb\8dž ";f`M0Qh֖@} `70p ~\܄LyMǍF,=6V/""QQ *[^ǎ}K'Y s$(+1 3cլ:x ׸''g qLq쨯Fdd<׍\؃HL\H?sl?-QAkk(#7P΀lTSNDtu`׮RyFlĦ>~H.\x+V8qŌ?.jk0?rr6gt*:&G;, ҖO Ghn--p:S,!+k✍N--pF(&fA\q@OO96DDFO 22cF_|SM˘"2]Q`|(6nܽ'9XNSHI/$IBJ2/W^M?A@kkN|6/ۉJe=jXX$/Bft:pf%<7(~;v~z#!/#;;=>Ȳ #:: yX"&<6Xh4:N)ŭ[:?"Z]_Jn탣bHJZ V?q)(lGG=LD)e#wzJ`̜+l^~Or0rl-xVƍOξkfGPHK[>~ 0ǩS͛Fm ƪU+ĀtdeykPSG,[6=&IZ=(Xd.]t ~AA||*SGڢQ^ s6M&f!IBLLHۊ>(t/g|;i߹A0w#iW'%<<fr鹰35wCRS;t(Xlc}'8pxQU$C}nN"x]}}ۗН'&\u[>}}OZ<iVOjN!:m58 IDAT |񄄄Y5;!T_p|su~oS^jݙg'^Mn4> >~tLlkTQo!!5 sMM}$D+*΋$T*x9){. 7nxy@lRxaDiTQG'6W4>flFccՐʓ:wMbJBzV]` [` 3ic}Qssn}{ 27?#bXAϳ. >} Cft E1o 'y!A3's5Y(ha~&cnߝ4csAX 6\e0 Ɨ6M`L`1 Ɨ&y`ƥr qWq@/9H~r[Řp]#~@fJQQQ,vI:s=(**,((Dn7]tIEz6$$Dw9i0"׬Y@)m%lp @ F(ubtQJ]6hR{:  &Z0xw 7C) qqq | 8 v{Z~#ѣGn? ?S>q !dA)|x; .D`0gʑ,F!$RSJs(Jc٘Ng\MMVY,˛!),\h4kt:W\pBH?c<Bf8.h˲TG)J)ݬj#eY6PJZa=L 6lp@ NJi'"([PF XuXҖY8kpNJ%Jd2ݒey$5 !D+<ϛdYq\-RjeYz!m%Xxq\AY;%IZK:ZZZkU>as233(饗ؚeƌ8Ee {!'(Mn{Y``0b0Fd TQkDQ|K.]())l6MJJjZrpzcrjWǍaaa}Me(qܭ]vs(ɹ~m>ٳhϞAeExO\1 .!=k; ߿e.@^W Ƽ0ڰaێ!G?gTe25ï5NJZ*k_P:W\yLM}}΁U 5+V B"5,O'V!i#E[=7|3vzѝ!rf?GUvR!f ..e`h&`a~;zݼYz55Adou{楎N6裻·aMI!}@t)g F6VW !!}CCvҥ3g`^oPJ14d6cn+~1S.%``:32]V@P; S8y҄+6N`-L(lyq5knVl֏ۖ+hhxpxܨ9 99KYs?:;[QQq+"ȑcv(hk&ALfdfNYe鴏c6G: ƿGcrjuؤqx\V?@KK-._>u8sNy^88t:0Qa07-:(HhseXhkPM7.1F nǶ܀$D\\̬3Y(_/.&X EQd4"**ŊXۏEa֭F\ӯ_^*v{/2{jkIO55 VX #O81jҥKիl>(Ji!Ft:::4 ,D ƌ(zzT߸am:Y^ =m< ln| pP̛r,EܹqキZe >l5Z?ɞ($$4,&/r?ζ$ip{1dvtlBOO%""q'O`!$s4'lP}OSG O<~ժU?/CN ڵkkqqg lx'wN{{=n\Q\`!("Jvftuex:pTgƍƠc,. TV@lqBeY6 J)xJi1֟x.f !ܷ2t+B&_`&\uܑw˟Ԓ${fHe47_҆{Fo޼E"#Oi JJNEDDZ {^^'0WvB4,D'8UU4 hjQA81p<^1x'l>|:,<|p0]9XZz*ZաCF b45d?T*Ch_VZz?h'!9%N^k<2R |QW'c'&f3|wQuuRSMLy-hN;$N\ޥKvBhظpJ%RJB]k֬YE1I4w|P  ̧Q p|pY,x`~᭙(A)E}m~pH79Xy |0sAy3ߝ8K(1SMu m#J9Q^z#~F!?O~#LjRþ|۞2qXtE gC)uEDDuwgrg0 ]isJ*=7k=$tT\Z7GCBtLe;^DiIOm].ϨkN*'z%А[NjJo0hc`w8}wBQʿ}>>xϧN 5L`1 ßY"z֊V]{΁ 'fb;OdgX}1>Z}1oFE)R_6E`0  b`Gw'a ,`j[ Hkh|iqow,agh; gai/wCƢܹu`e`0c"du ;@iqo܏?(,,8~*33zOݻw 裏$yw9&æڵk'Mn:~}q諫]/g0A9Ļ\m6[FQѣGChwuaSaaB ڿ/ cp T}ՎЛNRJqDV&;iA7TxqEzuАsZ͇?vh3.7a ;SOd'`F D$>sZ].ikd}ɘUS8l!X}ale}DvKO'=O^gmUqeΙ_b3I㮼曒dz')>>Kdڵ\Nie9+̙K)"dJTMY|,/pv`wIIZ۩j\.XTTbŊ'N,%iiiyc*ja$ *wΝVTk)-nreBɲ$r޽{8;p_oYVTTc2 u Ç/%$˲|vwkTDžxABH,NY^M**D۹sg+J1zy:** ,Rzh)qGV !K> $SdM.µ:YBYC"`)"ulrɒ8Oo=4hL4E)ɴI3ڵk7xM8R9 Ɨpr,_8nymm^IV$Ȳq\-=,ߒey !T.Ji!$(I>'PJ(]$swKVʲC)]v+r !M)}F7JrB@n.n!Mg)MR@-111U%%%;@Rp !I,"r&?DI$8^oeY"r$IIR B1׫j%%%(ݻ)^Nʲ8.^w`0fB~f0ZN߿_'7DQ8{IIIcO'@ǎn)--Um---UdLL)))=r^ͦ -**5h￟uCL=RZO7Bt?8 @%L2w Eh}13 cHO5ѺLg,jkk{j^֭[OI`r`XvRrѰKoܸB) Rt:EEE9t=F񁎎(**? PJJJJ,/8JKO:󒒒$BT)O=q\JlΝ---Y,<ω}L}}}i[TT/˲'999GO>B)]J)e˖ŝ:uj,˵<ϧRJ8ά%K\3L< VF!*BH,f{<(q^t9DiJi4i$-89F! $}S|v/<8;^zHA)''')^B48vmmm)4BZ!q6QB\.]>;tKd8N)M;~FeY~4%%8.+졃;ˤRꡔ֥QJ|핔RRO)uRJQJb0  ,~gggJrahTzƍcv}RZZVvc|Bx/U=aaam#T<ϯj)))GeYP|/EcD) {& iZ!T9p_"J/(gggqܫ:}BMSRRoڲr)--Fi:K)uB9j4!YUPr=HeYjm%%%8rHJZsl6p8b=888i㼒$]' SJG"b,,w$`00B) ~GŲӾZeee`XkErEvZc׉x)77v(/ _Zz'FE1'++k]AAAOAp/(y{yWJ(~ +33 {P/b~xxxիk鳵z޽~}w& 1!&W]EN/aݻt `1 c*Xc0`0`!L`1 c*4('<˿om&DBB !iS[c0L`1 cRSM}PRLk!VTTTWdeeuX %b>, ,`L`M&Yf׿@?$jJ)whm$ Ƃhłp9Gh,,Xm`ł=bj@ma0uX2*6EPM65RJdk `,w$M #Uڲ< @', (%z4Z@ %P.J(CF-P2w҇j)zVt;Mgb Rޚ6(ulV+t8p@+H/:AKY7u>62(ߏҠ|oP1M]'D 'O6 pDQtA΂Rz˷(XT`Y,#b*PFVicC&Fj`Xp><%w Bf.r_-THb""NP.7 c'C}>l,pV+C3b@nt>\j(P DȆ( /X, Z RLCɂc|%#(7cN~}D ELE^w0 "B"|dYyGȁ2E2G,CAh;S߳5@TL o'AhmA}bJ"XrCX,8;Wh@F,C)_bbkߵKZЀO|t(o"4P P>f PFl;|gPq[(J^㡈aYGBY=@3F(bjEt.|N`|HfAaj58HA72_ mLZ, $(F?&Y5z(nIPF1LPg6a2wjW6Ӹo:4OEx`7hdl<Ex8(h+LǍ_Z,hPibh}-"(OAw,YłUvY,pر)<0(#Cf(fn(} D٣6L @]>|'fbY ' ZpO׆N8uO?[XaL /0<1fй՗#C2P!PDQhJ߀"T|VPF? `}h`qݘs=;٧ 2l2}{2X 4X܌|#Iˠ<`0Ŏ&[lX0ddH7|rȖo^(7^(D:(7IP.|7p/ǩٌMq^A]Mz8iXpV;k(}ORZN}}fjE%aZ3}Q% !b>}0,D1 b x2žbSMJ(#E{wey/pL2uB!l" aQTVX[Z[vSZGE RsZEh"" 4ɖKd$BBfsNNfyy̛l/e \nD"D]ww?sv~.W_qEӘ+ac[,+G|c/&a$&1ǔ3ό5D"]vAb{ե{0t#4E"Ը)k !OC55_{-ڽ3`{o>+?lφVS˿E}>|!))]/&++Tm{$ǩ!}7 Z -`F1}zN?57K; ۵+X0MUvZM[[Ui Zל XloEEޣ7 ̚Z;{eeEX=gξJb[G0ٸ1o! ׇ.ڶ-;s1 Դ?'i޼#F4={Vl`)݌CPJ6&31>3s\lW~ֽU۲mT)]Xx] @B3<Dx f%L1-HL]'"w,>..83#p uƨ{x3=옲@קFB sҍU7l$Bm8Kp8ga/z\s]|Z\XJuOS1PDwO>KwZlpOwϻpax{yPIOӺ{]y!_2agag>uc"並7~VBJqGUy-"N'D:)#Y뫩߰9!BX]/\0vU;7~u{ -UQOK_2ǝy@lɒK2 ;[>=&UCZ|3u?a/=(OF`).ٳ\cTInݖʚ@? zM%~!?1htBEEE\-voSA\rItc_ŮWNKø@<3flv 6HϏhʹ!c/nz`Wnݚdcgg/f˧x(Hs \eŊĕ+{Of)XJ)zk } B m{o;ږ2g:bDԧ" ;in&-2uؠ$fҰklu'jŋwp㉣ ϋ}8&Gmٚ潑o~kU n1#FO{_c%yrˌuq@zb?%F"=q7x9˗'\T#ؿi/xŌի䊪2/O˚4_bJiRˎ>߀ 8>4BE>T u"5y^lԥæ}ds z^b;#P5m?a32ao06X)iv׾aZR%sݜZ~[ni|=#K1otʕ*l ?7Hmڏm _*}s!vpZ~2ҥAKٓŬSE,R=U]?/i^ڴ})b7"-@.\bl`?ڵ@aa< l7i161g~aʰݥiusx&q6roM3HO^m<)(5}5صyNŶκsύ6= En4`UWǭ[~=5`ۧF2 bQYcG6v\J't`H1vP(nY=ɧ4=;;{\ss󾦦}=? LOOR^^^lY[>---Ν >ssZZuuFVm?y)_^Ƚn_ /dRpsM&;aX7:OSАc3)v\D8 ^mۖ3K&ǛuÇN3R{x5b2 gh4cą ~h(MK3aҧz޾h<.K93;s-UU%"l<裗`t_SiJ)NkC /mʕiEEE?+f;鳀9jg'n:z5ؿQmC9r>?'qsuqX1OL2 ^n_SUI[o [4:B ʨ WNQ?'erR^\9u@FPhkpS9'qsu7CiӦRc̳"2Caa)Rǀv*Q%;l6< `Yo9zד^A RJ-]K4RJ)u =B,RGK[@,RGeTIn%XCXJ)A[JRJdR]RJ)` pj}v~oS]:"?"#wOW\z^:ҝ,@Wk=$Xui{Nһ:]1=R]wK1}W)`Kek.ћc]5N,RIZ:kRJ)d:])R*4RJ)J2 RJ)L,RJ$K)R*4RJ)J2 RJ)L,RJ$K)R*4RJ)J2 RJ)L,RJ$K)R*4RJ)J2 RJ)L,RJ$Kvx#"}'[DNw$D$mHVyJ)Nl`@,1S \!"Y\k"2o s`x72TJ}v(9[D-!-CD>Ed<|Eddy2K,r1"."3Dн N)"4 ƘNDd{~<'Ȥ::cRBkd׺1٥ A"8Z&)["rpӚn[E(2&+Sc nbc=*dJʁA[+7@ K| BDv۸߿[`%e"r\=ϕqϹ?:?=.>`$pPme()>KfcM@."0Tn.MDF"ro-"rn#" >i@sB-n DJD2Dd {Ed{|GgX*>gipLLh8%gs1Se.ʸq` X`RaתmuY^z!`! ã,@vB 01afTDJ1sS.P >&c~\˝/3ƼhB"1؋\ڵsR>qkEdޚ1x 8 {Yi u\+FOw{ O`TIƘW]ҪXD엸)%؉_a[^-O|1{x#aqu^Ƙ5vg+\ԉeɩqߦ=Ǟ#Zǂmvϛ]k}kGlx{7=G% a[O U l՘1}Wk.=1Ƭ2|{N^ S1tQߓX*^}vIDN WNOVlphUc܅:,u\_]O`+".N'?x߸:)N<-6`AnhB1-bHg|6x2k +l=>o'{*S>ءaύl"]?ly2?r]Ҍ1Ӏ`6ڈPW*@1uH6lIr+oc$3_1Q9 rbƘ{-Vخ‘؋=\Ƙ:ccN㶝|m2.^mv[gTD2AjWA1-8r"cFc.wS1[]CKLc̮L s=TVmyc;[)UhM?c[9?V]cfIENDB`genometools-1.5.1/www/genometools.org/htdocs/images/dataflow.pdf000066400000000000000000004330271211610345200250470ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 4 0 R /Filter /FlateDecode >> stream xˎ-.Sd@Cw Un( c8~B)FΉm,ER$ERu}^_WOc|v}}_w_J-}1|FlJߥI z_/_2W{|ycVzz1·[;oo̜߭4.W'f|>^QߣW&q̤$;=0u`}nTΐ/Eyƴ%z,sTW 4OdrJpi^;DMRN;@ul1zk>4Ks\M}skkl{%[o8~PLVKaBUSXչW&, ?aؾFQ]bjd [,~^҇WfɨG ?UK]g(JS{3/Qzgg9J+7OTnzEDd!+kCPm@ Fu+97àkY |]Y/ -ȡ?_&/tC΋ qåh 0)Jg%fM8nĂoB ?+Q-,A^BOb ?Z`l@ܳpH -ZὉYf1Y>sM*aoSO_M]"!`V^p+?AUȄ8L".=rin61iDLa {U5[sy>ShAԽ$obhrՖ~19@QiOma0|51ܺߍ'Ϭn2dNܨ:lF0`JjHa>M!t tZ7J/?t=uH4b7MF}hO$W.ہ Ľ?۫3@oL"Hv#Ҩ6.%71yPzە{G5$p1lAuv.C0H:IUVflK6}7Eo\Naj urk?)WovʨHAܒX :w9nu`<t%t`EhZ;O􃑃^8v;_2tڬH&"hG媶f鱃^[PrЁi#Exjbr9Y:"pglj SˆcreS$2b艶ّfZ k_T_礟?/Tmw4cGw !z{ѹJU&=셽7-t?'E˵~*iiM-s&{8f.;6㞓 S 6a3,fū4W@%M_%G6)f.^Pc*Vy9TPRnwe]N_H̕@@A ]rpu[K+~"yHkC9䮿}Sev@H J"3|IriPT~HRUpzo.Yh:žu iL6p'݆J?^qd1DLBZV;窎y$xq07Q'Y/ѲWkqA-V鄚Hu^)(EˬM$7Ỿ"0*μ L}"\H j-2/W 7%X3Dm~43q:,%YL.f~`A\0k >`0l i<PNe7Ķ',"b"yG&83 `R;UiH ~۝ @0~`J֬ c;;L{pxDhɱU;m}Ą,xײU_[|(c[iކo}`>(FI6,ӻpbLJwV h+uqM_l Dzcوd CB=@|$) 8@Px/{0'"m d`CT3L%wovC̀C&m8+li[ei,yڦD/ݰN%sF$|Y`gֹc^p9Τ=3nx#ViQlT@sҵƴB~㆏xTv:\=O:ƒܖncBncAг~=Nx*:նx"FO1qc׈ڿxc⸃^#W]te{%58 5TUhg7Fgo~py 7m"Nf0[6CP<~cɖ#EDǺ\y!qK)bєx떲|wtȒ]Timug`up!dH ½:l`7`t X]Vqq+!Elv,*R&>-5 :uL>18 o| Ty $!Firǹ.Fl˳. .}uM;掗e+%'v$q04 h#{ds{z"tK}+Zp]-; <,PS۸{;,|>;'S݃p TlK*,S:}.'E)O1պjOC nx:g3w\5Oz>ıCvGǺ ӆ\!*uIđ7ߍ`*$#V U~qY?\7 + lsNѿ1ۋ} .@K~ w4ى_@,ٜYٖ JܨH#Y@$oTv |X亶搟@C şoExbO`qw(cbZ6&C3@(|[*ukJQ\xJrɏOTkIN{n.3; dƐ(2A_\o3N׮}U`jپԙ`KnRJ┷ DF ~cSGB=Gb$#u@+{0(v#b(7C2уbc&؛`_Gr8S;c\o&,$cSqV24 w3+? _/QVJV1֙x)rz)d &hk7?Jݨy[GiKJoI 5׀<e+F. $0(hmJ23FoX9҂P;IW[ 3-Oҽ5㠻p +n~c;/El2yip|ɭ#xF6JYAN]4ҞB!r`/:G!*FT$3*V^.%{[`8p ò r9c)Ժ;@0"YxE.R.sfro__DJ"tU;7/Ri=P4nZ$Ci,= 0N3sjMB*n8LdaF[vf<. K"6ؗ2ϗ^N-0O(HW\o*^YQS0FPFyUpA&E*&!]DuIʋIA`٣ qV #=I/冲4"6R5ΫbV\Ö,+e1SIna^cVsP}l]A~F0^x {q+>T +QylӺŐ6El)dQ1\PʖE8S? sa?W^܀LRί̋2X^vQH`J!YJb'-ս=R*'c`J<+c7y*oBu0%X!D-16+} ~J$No *2d9!x؆٧p"4<.d)X*'*7<ipǪ҆>Η{gy)pA$u4CVaZ|0Een-&Ǫ<fm(V<8Rg̋._t("e kkvG!9}SnQWݲia\VbQ W[R3'/GXJ<0S %GFݚK97;(uO6;l1h5Sx0Z~aOh('wMmLϹMM7&Df\G>d=Q8f!;h~3U pɎ4Hr1.I`$SH;IWgT`jVj]1Q>*5d;^(J~h2z| }&(Ȓb2yb$p6C^rږSvTj#^OYCKR,{)Q RdI0&.!)jhiY#?LyxL۹6O Qn ^d ^VT&x65 ~cd܏aG/ ^b[Haɭz[ O ,I"u,prL>G@GFUQضk섶kab.:g?7Gےom?icS[$)o-%l#'eVQ f'@ʌ4YSrl׼Ax*M-|P6> )Fia3J6kfMN+&x|FHwZO:98>mUֱge_[) Rpc"2T`ϐSqG*[C&3?jy)K~ &y># HS ExG7*ZMfyy_| |$] ~םӠW}WuG8L ӛ|x>wKIupC˅nnONg8Bҿ7k>٧}dF&C ,$=w:R{y{3 GJ@!!ٛH1 X]!bը`WN ݊0,L>GL]# pb48@?X.JCuH_kcKu޺T#+Q䲬Wd4N(0G.գjx`s 0.c6; lkXɑ`gCIdOn*,y " "}`_@3bQ yX=  7IF&?Y\ĽfrUTg~u3a3t-`z&BC0Lt^ ^ VZ4 $e BS4P,_Iz0)s(Fp)҆4Ky*6d0^)]+ց F֞L)OFg`~)ZόOsQ D(| Lda5`xk'#&97 :BDL3 0b 1nbmlqCk%80a .(+Hճ{ 0~iX:4C6"%c~Y Ҹ*K92 &x<1Fp)CUTkB2!-zW;Òщ_iIJ{Xc `s %;۔^`4 6+T K#֐a%Q*(ˁm7|yr9Cg\ض/'axLaBٶʰK,ps~T嵗)}f#Uc2k+G0=ZfC\96ֶxiN U:vkvd=&ij;H?ur*64^qMiǠyI@ ɢ٢M.xn8a7L7TS?"cKܳbΤ4ԻcGܱdzY>^w N[6㞚jݾ^oٮ#9j}^gW"ܞl:9~W?Ƨ߻Op>w]F~{5iboC}y+en;C;lÏ8JTp¶Ma/JzV 뱬e%;iY5?o_t: B?Y)\2(~q}?qپa+e,TCvߡ"hySeeOr#dp߻7p!{8׌fkТd;ْ8m}Ϗ7և߭SߛX;{{ߦUypN\'n=w6ChRU}XF?.* {f[7s#vYkW-:0(v~]>dO/N됗4q71T TX"۫w:%Ä?VqyаP:T* `i~oZ^1cqW 1>OG2O]2j7r?1mKE kÒn*Фa-Vu! TW֙=a/bƛɠ=N @|-f F-yCT,cp$/] s!wϺ>(bKpRXS?\=;mQ1~IAɎ|X?Nxt#euŐ $]g`KZۥvx<%+zʛBHv< DFMma=Y碪NZl݃vd݃vdڹqCT|"E7@;24Oavx"ހ\#0b1;09qԥ;0_#lZ+)zӢGR[]Na*aa&s}$"r#(Zd,qDǫ'0Seva>"Kk:"8p*rvu!G rD:P։9Pq}!:VNa^R!j8Nu"`Z; ('0tqjq@O(L&=L:ӓ0>&Brp_98Pd%;bā-s8ψ^&F^&Yrn&Wm[5~jNm+tGM;ԣ⫗Vj`EW"W>Kjz.ҥT,H>ۀ)J.+.]\B| ޭdJ$ &qr4 bYD7;K,.?Wi RVVkg/6CuuE4.[_J>|R}@7(B]#1c>0Etu 9N;*k,Ehw)OQ}V5ZJ$Ś.Asq525zfC JIW)d,ydY 2RL򔬪"T0FgbpT5”_Ob/ ݘ8U/>U_IFru } ;,xp˿)82e|CUY46f9K?00at}?Ib#,f"#",Մ!eٺ2M?W.rW輐9m 9-ܘq>E9 YaaT=z3n'Eq&3e<,yICa09&';=L=/e_g#ՈGדb9`=egMXVf5$U?x%OOGt)fb8ۤI1$y M&3dy蓡Tu޾UֱQf"{N|~, ,Tb wѹ &=V6|<@80_/K?*ocW@+;IGG{fT9KK= #/}w[-0Èn Jp7=΋j Ϊx9LkT3Wvہ z`'ޱYr]:\\4N+]:^5?x}q @z;",u):%CsXc;¥Ew[1C7eA֍^~ՑmG{thQji~Q]DCqRXGDk4IAH P,ID7Iq˅l0Bws8 {8m ڶS5.FqWQt3|jUA|+G9xEg@_UUNs Z'RoI@W"yAH]l^!F$kZ3E!pDt(")Y'¡;9VI$x"};-f8Gס$FP֕*rlKAJU (zRPWJ($t`Y8>yь(#r#'BKLaÄ5w0״|hOiT.T,e#iA_YP0Vޑ~q5(ё l$tYF@ʖR؜}c?ү e̹)Ɩ+-.άA[\"֭ 5M~9־]kzsrp{1?)>1~dwU{ܘΰ?ќ1goX|vҨO\@쑑{$oR#8L ow;;BlFPzp G` 7^!\=JK uP=|nts6?xP|[Qs-^H{xDxMǏnv # ne؞[`¹kI E`ۉѕnÕnN&v9/ԓTxgzmgܛg/iugfWd7)|i`{#lW4y&=lpW:t/pl*W]Cǂ<0\'v{vϊ=ތuf\S5ҾgO}?0ۙ867V@"Qg'=ƾ(i.wJ0<gG Ý~=1"񆪠_"Gi #m\@3:δEF(}xLnnP✺l{m:HϾán΃: # ַlP@PHJnj *kT#SgRZ)=jJg^ҫnK"/r=h82qvZ$B#xx5m=#w_>qY FN1@7}Gr9#7Ʋ8sSl`xwDe;}$O;x}YO;[V9;bw˥ٛOh*ЄLri0b25 (ǭ11'UFI먷~%a|(+nT%GD0ߨJzT#TItu F5]!nll]ZVs" ] z¨~DXscpf݉6톇 v'zt*@iu"&2 ^Vt+B Z>G!b;5>1+Ԋp"p/BS(AΤӋs_ъXoZى\ldnzJ/Vu:#+/;8a:#NxrU^щxB!0 Fw{6!g ,Z$M:шR#B^jDXшM~!|pL`d7F4"|Qa ҭ,j"iV <<yv"[3ע|" iW MRLI#K6\e<٬PxP%R; V p4ѸU}Hth_Um5ERBFɽذKq`}%#c P7a^r=b{{ 0k6|$02/cHrX?a?u\QEUZzɬsτe]֚h)ő\Ԝu_DFh~05a8R9g},nfPr"ur ^janY/B!J?E,t8FfR&#jQ jz'9꒞$5W.20iO]} 5.vt AJ=jRPB4W+BBR"C\lFKJډդ T$5;M p٦FO[%Ix7'wJaI6uiא3u~>A7% -bΆgaLhșpI ~kĔ dc$R[^tIݢҘL3̞],ў#_o/)dZAe!&etwg{.GR/F_B#yq2bc8Ƚ 5* ]YQJ漩م7yI8l)V?iNsa#F#Jn̈~K tw<;⑉ʤg炣t3ɴ`φoazbVUPWBBդƳ[vA a9[*z>:HLxӋ]Ø?}<컛/LꀃN`jYlK9tXYj #oulUSm)> M/Lr_j/*Cmڭb,bL6,oF-[@cuuƘ*{%^ylQ d{HW2~ ^tkҨ¤ih}:(oGo5KW4 Lʹj5+>jT~UJtLI [8e ؽ[!{V1ۃOuZ*›]}hۮ˫z؇T:iFx׸ggR mfd$h}(i_t+Σyy+Ѵ.yd$),[s-^Iea&h DNC\Ev5PYah -pOQv`}4_6 .'(G!y[b諛I /t)k'?63a d̺?D0r$ vNBMD_!M3}K6/{"@.]`КEL=-?BMސ H([m)=H6].YF[C&W=7K.XH׺"'֥,հ9%QIݴ-plĠ{~/|6xW,{5dkwQl\uweV~Y6Kw?+\1݈3K#IJs6fX45wjVWMꏵQY҇,~؂5!xu~h#V&VVu ŝa %+jǛ^Zf'h17>L@*n&^Ԉ1\ON%:b״N̹q.+ s_+ÈozzDݰ2O2: RԋcD^rI"E?; D8"vG@Ar/Z 8 RU#l l"wGDӑMVXa>"rtD0uB$쉝=.D@ ; ‹-!`KXkzlnwͮL1Dl:{ JNƢȲs4Ԭ9|(mI<~=q?-90Zv/m԰pِ%T\,bUMq71Pj*  H(5.Mw_F\Ɯc92$ BfBjGP-2TE-bl)xdpHv?mXL-fM-J4ꂦC2viS u:8stZ hlW`nQ7fgg>wc/:t^/F9]iuFe㪽B0me.Bm6Ur9.n`ϗnyg/ BݴCy43o>|xYt5RjEnt~祽ȽYT(A׻]VZ(RuiI{ ?W8^VUjj ߝbԷ7=)J/( VrOEDRe%OtOTyUтk~4Q |NJdPlxgILny鐦8ud4P|Gt'MQO&XݠT?OHCk PV;rvLM݊T5sW2k֟1#<I_'#ʰdTKXzѐV1MUݲJƇ"฀ת4[5җTCRUE%\x`f[U^)VX{ìZu~EFbbtJ_E RO/ AJLq5W!UkBk]1)!%ಉ)Sq]rWU]E!uIL] X4*[Upbt) o|c8 %Z̺뭙ZזD Ƙ:M<[<d눤{E~0lKTݥ/äuobB!"cGJԙ<6lGLjJzA3ʊapȡ:;s_`jz>Q-e3֜.|$u!A~UJ, s %T9;\6JlgwFIj[*YY!=~z&M,qK @ v7 j S!M^ح0YRlJ'$+BPdnjÆmͭ:ݘ)řvg[R09RP4W myc&`4jڒSzҍoI"_\灉4_:bc^"Y|ΨvlGUݬĨ|w zT +/e&}@| 5 *!HZǥYUm̒^zR`u[>00Uۿ1a.T"@\W`r2Q׾&<3 NE!x_qi HAøWp_E㤫}ʮmXQjk}W&Q c *3F`$aʱ/i!>[ی߁`5;5sjRI(n*M ~1T?1U,xC^yu 4q51&3;:V K8t\N/K$_5w@0 v0qjvU0]U˥ ;^ܛ#B5.#RTmMX6헨ڊ4V&oEgQMv wx: <͸Ě&W ^!67C\zm+0HI'n3qX%o?"M)1)E(_56V65l@=X3G[4eb?ҷ^UMȢf,\lP%U6:'+TD\9{ޯ○q%kI4|MhzҍA9N|cȹa5gcF/ xQ J?UpJ'B0 i K@و5V(N@A77[bh {s[=%PϽwLPŌC͎:[BGc @ Еr7~gz!F@b"=|LOHC)$(|2A1ht&T"}=&OyJ|͋ LLȢtӏ=cV1v8% W0~q݄9ǡN U\+w@@_ *xR2}SZ7Xc,^Lӄ fګa`axdf3jVrY}gUAb<\L5LzQpf?Y-ڈxވm`r(3G^TAܭs^򾀂>obƧ6QX6+z)~\X{5g_B֪78_=M;N>xlx۱%&%E~#'V C՚Tnr9~2G"I0  W92*[tɣ{Y1=95\_I(&ݖZj[22E(aY2n#Q"ޥf=b%*[Ljjti's) ̻Av*4_ w]Pܘԓ 2cazidwV364!ܛG`Zi7 PS7BMdiTך#CXǧʶٰj)_y9.@KGV5ՠ+' Էu'kc4 ӐsSh+:6Ky#,e/ @v:oKQh+$7R s~1_;/4co0[1@uz}?+.9DG"0 rAjy<px6lٳ9Rcw m3ذb 00KWnVdԓ JvW˧(1}]t&?8[`q|>@6F[8pջ\vM2qpNuC!@ -UITb0`NjPMYQ63c0:Og[ݬVo=K꒼5kQV1-3) 3JgGRR׆l@<4E8ezq.Ū22Yɗ` Aw"=;1!7ossi $Fڂйˇ ܇Al!(ﱹ߇:fJohGl.RWS[ʾ6yLOH?dj;ծ\>,jK ' -L9B}G=}(~$iH >o8~p^l^ Nt':[ 3K[PV/8PezP/c؆zzC ]:JՋcB z1eKKz۲ j 2*zŻuV/>eá^{9l@XP}C$[MT/coṿ^7GpV/3}hq;^f^fQݨ_^bcm!0^Ŀ}4vCx֭]ph]fa$8d0iQ.`> ^;tky(Hr^< [~Mps RhB L9G ̮ 2Z5{lF5*Rs&*,+hrYoo;y7_d'p?jz{W- $L/W =( u~ߗ~k]uيvOVx*xQ$wjEOWJGνt=]8ě֑`k?N|-8~Lɭb(^Mݪ>hᡕY:o1x/JZub37%xC*r r*m%ܬ0.|͆` f<^4,#3^BK{#ucZEL~ы'fؗuYg(̵H e|<§`sWl]ٍr{T-fo) n0V tbxwY~!V5@6f& {$m~!Knvj] szp ć@9,wtߏs9B6Z#5j# U\ijD(/=LıZ/g۶i 6pS?: §]z/;AG_“Ԅ6`m:#}5K+_8j_$0q#\`zG*`BXxN<+A&q+q'%9Π0H;U9uKj6轣T#mzHz:[Zrm`t6H_ټL֑]}Ӻ xS>4ѤsfCAΡIS61qtV֡c9#^tY{EIkh/y"ep{3K}6[%]lpN˿XW`5u-1Ft֤`@$ dǥFɂ°} _!Ct}OVD9lW$bB) )z⯮Cft}uFPqs%U vjzQb5;blPS~WO4Pp^KEshLUvG9WdE^Fu9}ȨQ]\}/^S<S$UߕE0,"FJ#W5ƪ ڵi,(zK ڼZa*ۃ] W f]7b2;T㴔 Q3ޡ@Ht+=ZVwߛl5NRe\ʓTQ_ќPUf;}Z&O>`/2J[*̤B͞y%v3{.4fKg %/ީ 1,ZmZR0VW1! ,$tPE0o_AiDDd@(CU>T'e֭5g$Hb` $eMzr,%2Ɣ{`eO +S(mw!}r}./}k6XdTQ)/P双ґvnv-ׇ@(|C6(68nGvs_`,r[X؍~NӼK P̏|""A[ɏ ䷯q0ʞYʲfS+b`6;C3FHk)b1 %9Yc0􀇚+ ]>sTPsPWTlڪU#Y7{k&3bD*PE!PQiGSz ~x11AW |Xcsbٔ I AV-"x v5c!SaHϱ,MM+ȩċĉ'{; aOr[1' =l:t]+՘YǙ)X_h=2"˓fϔHVt]&SPP%2=렋l.H R9`븍K5ā6'i#[4 <]ڼ`C";d>)ޞUv*% S/K0܂1u&)WI &t߈Ӂr?_`D U%#`Ih&^C^`|ÚW7Ֆ `eęJiIV9B7nFD>_Vb΋:2`WbBSMkR k̻&l־IŸZ_4\مm0#Hr| j T+[huPR`fCkw=Gu b`,|*rGt&,g.ٷ` phو)39.j8Ŝe=hd4MU>#Aj#ÎwjI}|] TF& k& é+/K>$NK=oWe'S.%rF\=w1jh_"S9y!W֮i|$N$g!%:iWK5d|v1 8FRVS4 C-Kq/:WCWjEB|͵GKm|eE*͆jO/ںM3B (jwr py``[M5j^bqHtD8q#rNTN]IWҭ,F:;?6Z:d`XdwD M,)DNuqhSSX$`qō$բ;f[b{Z ׮.95CYZ>8yCrפ8`tfMY/#3 s{Y΂+Ԗ+O)N-xQa9b7ufF1QLԫU6]]*5;iE96u̱b~B#O40玸/:ؓ872ei%.9(3:$=b8/VP:OT ')Ӵcc96Øg3 S_gqMx=ٴDYcH̱_9 ՝5V/bwwYHTZ~Ni)Qj.XQmݣ#X:ޭ|К,B'K1ݥ};*8dKVήϣUz"TG1{Ĩ1Տo$(i'>>byf%u*s[6L)_y/F(|}Ɏ-|=E8t'@b~,QED?aj n' fS-BUѯc#z)Mwʏnh3*eo +fV`oط?Em"=|=x!.V #0Uue i͢=j{ zq>CR Kj,ƴ{R: k]3UtwH*_؋X/4":ʲ_Bzx &JEТ#Bb@t nOJfyݒW;{J 'J{pKTP^&bf,5dHR @i&;\-Qς*[fl 9M<Lğeu3(Nk>!oW%a լ5 QCۀ7(;jK:{T햱Y.uj]Mt#b#V"CpwXH$޴T bF>iȭ[i&JueP(V;O23&Ieme*@.A[{ ,%WZwb992EI3SEx r䭬?*GzqKn{0q]#Hz!0<'FA8enUkjVQ3Z2}Ld3{_ᠢӕl} /){ډ(;0}EשW؈cOEWfŴ|DFOɨU ?q|]y¤:' ?[U9~K9nfk]7eHDǺB& \ \ʾvC1qpAPJֶ"3+嶺Cmv!JWqh%\>VѰoۦ_A\7q q9Q>gܵ/ ʟrŒuq)+Eoc*`F{\1oN%Ir)yQ\C9)Cs#\#2pqKt9@P}ĤQvo$)SESȑwva7EAy'o§0لN1|25:|2T^78AAx~ӤIJ q.r%sC0TzuPOgF~M RV C9JF25"h/P"腇- rj҈:뮐"$4x32nZ UЦ"@=u{9- rXV+=\c vuv5(e7$cHHZ6 bCln^:  S}Q _g,lG\ F0PMe'QhP7+x tj^>[uEa`&N 1is' omzI 0dυD6D@[f[(UCm߹_@b3yhGଆaꉄ; Y.tё^Y"~IٴS/\6n~%'Cw=b4dW^f7˩`v3{Cp:j%Cx$/-zj = v%d7kNO$͟/ή~s:ny{ʘ$7s6Z΄eNHqFy,A[a:UU(OccT"bly(W#1v\޼Ӎ4omK]8צ/NQy~Bx[lS%T!Y h g X& z\璻⺌!ɻyr/4:PBVHw)!\k TrU,:*Qd"eu~t9[^n =(zC.~ފUR'^ XY!,/C,yx0*c20vSISolcrώ\rs2J-Kkݎgt4o^\AQDX…T* g9Z%2N*HA WǪ13„خYv=_LZ.n05 D񑴫z""F'A-gZa&e+T ~Փ/4%z"}8I8Β&RLCJNs 'PX,xb_:)0!c+kIt[%T;C/5  ԁC\zT;eCL ,'XN#Yr-?:7]mJ.hV:DC4Hu;wjnsnUΉx+S5 &k\(""pDJKuY5)c6먛k{7[pQ雮 uSyuˍ_X[e>.iwBiĻXv1 HXԧxjm窛ݚ8>꩓Mro1mv( +~zNjP*^3=%?r̈q~_em!\6w!ɚ7u{=g͗ZVW a0n%Nӎ(P/ %&ԣ zj@^G/C.4h m ÂaX0Iȅ] ae98 !D0c-4k?vLdF0]R,NTrcȖaz8ƌgs&e=ô.`egX<1iΟI8I("(]ٷ[ k+B<6#cRj+ewoӻڭ8α'}dp㡻9߃u/'iS24CKoipwؐaN>BlTR%nGG{Sns .5VD1yT߲TDmmcg'H Qr~{؀j [8_0H9 V+R~ X\:?y?gV€mMCYtL=oƺ⨌Cv?'H7;7j? f[<F=N@yn`/C܋>uV-.T14ש1 Z o 20_ hk^[rdX+\,H0UcgTwXF"rF 5ˊAJuקSwN2mWI4\wu^Cn%[bD&NVx^GeHpx0H$re$N;e j,=Dj5¤1%N2J?6K:w^VQp\=!:/& 4Ex-#:AA+=jjc-󍴯E~6~PL_t\N؁%[(e%ʤ~ʛ[FMg NFjvO<ˆx~_Zb,\b<@"}qɩ@hC/LY4!=MߗTnCQ8!R=essӖ_bBѰ MZ4b Ɛut}m( VK؈h#6%t5= l"2n㆞{WBư̗0Y 0xG x>B}OTOcKcx ݖ0#@ h`{/H:k\4LxaS54O.5p7!ݞC+)jR493̋|`` py(tk[>WDC+Ĕve,yTMڶcEA+b5%T 0ˬě2+'7_`WU:5-&" AWScʽjWW2cSrp* ΃K3 kc~9.I еG!~qƓ-{@X/2(;t+u?1ق[x}טd]?eQ MwRs!xο^CM !FE@H|I7W ,qK i3:9ZH{CJlhMҡo/?aSy(Źՙlķ)8Rmޠ0%R;ᢍ;c":uf5 hT{:~կUvW*!FRxL %ݙܬ,"i ڧU? 9/g>sZD!ʫ"YߧkedSiOQwD!p-1Y2f3\WT,}mlw v : |7 ˹u)Y[,HFnRղr4=r?5O [)p1L`GNUtO!̲RXSl!3Nfi坖@3wʛX'E-Tx0ݭ1 EvܑY@@lL6܂P'c?P8o CJ/bulP<|.ʖnS[irF0X3t 81Y~H_ʧ[MJ1)Z}E|Oݴn`܋ʯJ^VR 7-cec@,/}b=Z;zI,BQuh=%<%ȱDG#o-՘ BNڬ*s>WRTn* K3FF1'_q>sRkX?T)-pƶI^HG#Ս#x%=KF 0Xx<43"rD) kUgN52eZ$EAaJ49&]jt>?r$%K"9A'ASSpn18T!2A˯$17čԄ]!<@\j 1pj hy*Dcݗ߿5m'CcAj0 gAi-_:psK)ju$ 8yWb Ƙ>jxKdV눐V6:W&5_b]iP^d1ўL+x4zApPÅSHO`\3BéGs=GoUW7՝RG;T?.7C N-_(8 h\(8 NSAFjnR}[%8K^ 10TBp@*DG9:?ޒ HFt 8͍^GhqXũ3k?TPT`{:˰"A:^cJRZVNYVc#Jy5 'PX=&5<*x(9DqIESU&853u 4Us \KLP~j18$ɝ."WFT 'PH@[/ uR5K3QMe.(&Yk,PCa|Jz8KneC;E^ P*Qû=?Dl#/RnKM=ZEy<+=Ey.[zb^1_.kMj q;5;EA1=Ϡ ua6:mKvß4}iMq{n$[w*5xqobOA 2Iz"H9MRUSYZC)LsKmϸSY#t/cKnSctmfJYWםKhm1Yw1]:Ky'g\}=rE tI'<Ъ2F{{iԵLˀ8Ua K Z4.^%4fނ"9iM俉$G}BJﱢzfFB Smϭoq/Q x# q0tB*czۇlE|M˴"EgaU5+2uisTμ}P 7sL [ RQ[ÉX sFwC{\*(|ffgNQ>KF9W^S1$Q%\l9ànn)X{fY8`O!7u+:b[w5}X VK@>I"QCjeI ǗyfPم+*z I c nKlN&^^_[%0d%vE fzI?|;Hm]qY8ђ#a"ЍB;a!qr^&Pԇ͡$ߦ 1Pi8nHwLsi-jM* iXkyk)b[,;vXpR⥒\z+X@Fa6 ;K]򐼞$P.Ԯ!/\R\zVۂ@Fhtͥ=rGoW؊qkذlf~|]Pn#PZ&xrj08VtaɊ4ڼ JUmĞ׀maaLfKXK{O tF^D Qk4ݪw,wc YWI|Y^)|5B Ԉyb%YݫlSdR v2t׷YVvQhz^C–N;xju:ðIAڀ Ͷ:Qw"!u''Ȍ Q 1Gj;`,UnQ cOoݦ ㎧,)?vrTC#m5|Ο]41롸.lֲ.3 Ћ18Z?OXaŁ>aCXEh6,=AUr|3(ݒ_lsOaVr4,JQ'qJÑ2@ RiI"zE]:8]%CaU>j\; xEծJJMHU U[~.oJv"Q|ƚ:WL[oh%v/6{;>yvj]7,)(z=_AXC|ePUҘ!fӂK8ŭ0 SBڎEO՛{0%p^R_q;K~d6g+V2g/Գ^ _@qԐjI߄CzƉ$;r2ŝ鼨h̨_]t)K1a[1DRUh+2ACA%u{U@vK΅i.e5K]! 0t[뱅*&@pܖ&I7cdHĴַkǪ3xW'x<֚Ǹ,5Ph)W$MzFxq=sJ$!BBʚ$j^%4Tv_l EY ;ޭ$הRj |\75ԏd55{{((:$P5M(BlV]Cq&zo/bUg5X3~K[ÎP:*NQ#bcM5 vG*M v%(> ?.; P\bmwP[NA*хeMaL)_"5<vk7ØXr% bnwz\4 HZQ>fAqY[oR&(ǸHMɹRӔښ6lThh>[9/-9o $Ϥt5U#Rx*}SW2eZahMU61֗ $|7 `eqjd43@cЩi\E2hg֖ `~*"MI11<3@8|Vڿdxy.X:V>* dKQ|1Pؤ#(᠞p+vw6T;YP v $dl.6]lJnq{/ ASr0^uO))RgHʊqHLc2h +RFKtKqϒ~Eψ39 e1C~ ơ:8jMу56 /uhnBtH 40LJ2PR϶-nE7<  Sjn!gbDͭ(!F} ?IiK gސ崩Wn?)[8Qv}[y` _rMBy0؏}FZ:N Hr?()qrMI:տ gVn C7c5~ϲ7д>Rf,Kաa@ǎ}.ֹZB[sr&]w(vH΋ojЮ͝t=L,p6O[g  ǁ}/P[|if| WUnC&)WL7jս۽)l 6,ݞ"clC`%%$T_)Yp\l]$J)=$*l<ʚܱlMEOkr/QOCr9șay͉i~=^ xطR=Rb 2?يnH5!aXjюć#wn#qa$}Hv>fn0U-nvت" yNHI^ZdU^%+A;4iD+ NJS鸲5gaG;D.oaҎ1 >ӎ3 I`)Tӆv0ꌻKQ0\@\v .Q-(lDx 1(crʃ9m lKN| c;M>XĹ8N.|0َo#.8e0r&ᮙ!EP̭j!eS9k;/؆* 49NQ:k>*5 ћe#cGM:vN+Tf,2d.%n?}|~Տo\]8dKJ-QJ +QQ8U^k HCg6/x5!>s(Z|9Eq1~) `;1OO&o細;Ґ[%5c*CV?j6;L+=]푚[q!D`{T`5RB>7Jҡ(Q0yέ/yKaJ=0r g0S s-1I7m}am)qkby[ )(IY8lؑv(ҭx*rtBs3叅3܏/nhJ /M Hmb&9\O=p޳czNQl'! ˟%ǓMExܦ>R꼠 G M0X4â6Gu`RI7&Ʌbe[pr0p 4t{5KzT(Kϫ`reƑ4)M=[fmkvfaS5[=l* æy`S*|:AS+:u^-/N)F}cJiB6atMV3>mS']EqPaIEWEcwJ;ivaMfwNdP浒 ˼D4m&P#GEVGf;tpe^1T>qlkLlk+mP0V:g٤ɍ(=Ggz ) ΂R,pHkT/~rKFng1-:J ]Kk=AXLb ‰ʙwnK(|=mW;ba8fAnAe<;CEfiF%%n_(:ymAe(Mg&A(0ۺP3zf?\_nՋdefAYPC," ̂"CIY쏥}_|#GcxibD|Iq$XYA1.IeK) U}ణR_MxdQ*ạ9J㶣Frjړ! [8$% O޲1pGeD+K'!zdڷN0" |IjZF<6 a;V7?dsQjDA5w:UOn1bM>j,,,zCFiI„Ce3ƒ6<ybc}.y6 fG1S`ۭB;  Sd8jxYL*D;W[Jlv z ˺p H^w ${+q᫚eq6AvNQVe(m5P pzH_|Ϧf1Qybkn 'Wb8 pXoRU5}rW9yQ(?j@Y/) w Ldl"T1cgIN ď/~$ 8+Ko<.Y`*X!0pHdyeYې}zۓr@F!a}Dq8ρ2B5im&li)PrV,SV5.r,5`$#NŐ4z$`=/!0 C fJC f~=YLG 1qe7 .}^)y_;1E {t厢P憗ahw٢ ÂRlWtZ@⤒Q`KSSf:$C,f):9;[ŦZe{ 584J͉UN,:݇º=LmP NTΪnqH*g/}HREtlħ1P[Bv@1cVݥ#V wb" BGO֒Ux y[un7M8Lj݄^v'R x͸ZVj7ZJU.LvtԩT8ٗ-BzyUNtsi藬=SApJ]|~)Q,>ĬvTHfLVg6]3r?_ʏJ0hcr1[RxJnuP8a)Qheq!cdEo7RdxxN YӉO$,_F3u mOqU G9 ѽne6%1ux-Pw1 vx&]u$CKϕ:&zςip.xJ#WT\-Xg~)czpu+ nڇF߸sP\q vꯛ偊G=|StY<ţA9иӥrGU{s=x~QFT7 A!VԽ-2v+\ڮZVYQiO3KKBڢx\<]o aEb\x4(gr~jǛWk6]rfCڧm6l5~gxyLxXgIu6\K0:&u@HXgU :jb|[GX?:KBr:ðu8wl, U[gcXg`::j}p=u6zoiPl #lKΆҴJl7k|\u6JlBZgC':<:3[g89dΆr4U0:3}f3uѩOi &>˱^OݼKT0s6KژGZBFxZhuB{#(iaia/,ѽmynlY6~L0y,i oH"64Eα{c6RLHA;1(>OݪO9O9ϡ .FޓܘSm-); Jr첤|.1KM" Lqʤf:4v,?sEizT3#D Y j/3<+$%Lpv}k8I GREnGy֝n36kdkLС,乸գjVX 2.4t7[;LJOfpZ0Ew6DXAU|v[OW)y3ZzܦiiJmʾ[4a>~[KCNH%bQ7>*r_%>}k#| Z_[͡VS@F#|:qj[]:[FO=fSt_sBֶ>Ba(L0(8]˹ +#|8[(aE$ %Wdo  *fg)$:{?|+atK-tdo-9B>>tjNf0^PZupBV!Ϟ5T+FHŊ >ш&(7mkV[;c& )8j;j+3өvʦByo.P0&sxy۞%Ss( QΦzd{d^F)0Jhs2vMfdS፫r,YMNOT;vMdSq~e]{{kh#-L Ù=tH)>NrSaYwr["9UXK,VBYu7Cq q@+?uJ՞_vJՎJT=(L-x)UH\%ΑSW_9UߟȜpб% k3tȫ'T붱IUiT1s>#*>|RT[ T*hʤ*., uqSY []sz_%OJf_~ؤNlgnǛΛp@RBH>U%@ԝOᩜ+{24@cD>ebՖ(B#'DK:.b'N (N_Ԯӈ'mh1@,,&8#X%_3PNM P2X1'vI Exvb|[{햟ڜX Ŋ1KՈA9ϕyb{w=#,ݻ.t-s|DV9ty!̒Dz{i[ C'%7n&=/c/7~>C'* 89Wܡ\ۿ,э";4D v.Y^6B,IN*0f!ur2z Y|?*c ;%|F;*Th7T yRRXCkdCCJYSCʋ!alSK/:ORѐ؋v y<5H-2 R]DT WT/֐jXCjԐLyjH[#L8P3j/SCǑ[Q&F]:$"!=lL(ch%vL6r#,:fV@hi)b ce2qXU0LjN 3 x_Ō>Y͑0I$պ5̬WY^6`2C+HWp":@Ya0UvJhG\1ܐW>qCR\ODLehLy!YI$PdYy225TՖCq#|7A1S+7H3>nSzvHV[D|—-)fiAeUTIr\ fe|I=(tM TcEuD+(GAaJcgPe&R|B',E<&DGNĥ@ WN\zOQ揽lc*PKq#{߾q",s.T_)zː6%EUcf V ЋN1L~ڐZTǴ (drxPT\p~,uܜ1P11r{wdƸO$0 QMY=k?U2wRX=մjg-(c,QǸn{b7b3_(8@( $ Xl{t$p{2j*JE;'ppSFcka@v\58eEH de7W"c BQ4n1fӨԻĂ\b3y Jw*GH.yJ`/~,/l1S&E7[RWu7,LM"e9sZkX)L4r!<az4UvU/IxU` YZ| izjðH:T[%bh?A`& s}4%u$e*>q$}lz9Z1Dp~F{y*sr&.Mh`a#=|/BKI>!+`ٸ ZZzLN:-ӳZ1(= ]wͦ..7r\lOnm^Oga )^wULjOP&h`Tq2EIu Wnk=\3sPhArRdŖˈ4wW- NS?IYwȈ5zy"<}T< B)ӳyFEX%C~D!jۇ)DyE!:8ͦyP׹yZD!d K%pp9# Gl(~&ca%8O6 ϻ)X?vne0tϰFR؃yluo3@¢1Lz*mKnMqvK[GjMFSEd US* T1]N8T{#[`k0>DZ]AXxL+ ؏C4Ftw jqε`h[m.B4X,sׄvPZ̥ F]HCsܗ*x#=̤u׷ꄹmrC_ŹC뇬 JX [ e|INsRVyކ-kVHBgg{ֽca~%,S+jn}8mv*~B]3RA(*7KT#jnB%jK!XnFݯDu}\VM+D}@"iPV~|v%c\`C( Q t3RET{yBuUiOUr \FbJj:c봤{kq.]i̲XKǴvI0rqˡv 4]aq\iO:(c4ǒ3?y%8MD$~/UsxSe3CI\ ׫ KTRm>+ng:Z+)YẤ Js-3̼!, 6KdBmY6I\R>5_ba-P7{%MB;cۉݎ2W=ΈOD9\ŬYzS$4UN,I};gbU 9g:t \-};rVkQ'>9 SbJ!§aUx4r|=^ͮaVo=%msu`ۿ0KZCsxJw,l{T+. `ݶů-˶cIIS@)˦k2?ݙ;AIE%3hN6F%3h:Awªuۧfz'6л=q JJAl[RYfTǢWP c؜fЌA96z62a*X/)s.zXPa:W9gy'%%rP4[BfQPZf : R3T KWE2UP5Gecd>9nRg*sOD=̟J* eeM{ Jjr 1$MF*rk6dod~$59p~*r[PyTu=n]rzews^nm7qˢthݡc -}ۼk6ܲk fm }YGStH"u-\SGu<\z][=!=STrb9P }Ys InXzxhwp -ZI;A1=)GU-]1iQ~W8 Ŵj|gV=<ߔ0qCn~(Un5=4: =û=쾶{v 'ݳ[,X]Q ATv'oz}owddeon5}zg6 زwm"T(Cxl9[f0&%nƴwf.ܮQcidoUΞR}c1%hL{96#4&Dշ}Bcb]KUT1M^{/a(FoI}gE[P6+B ^WQ(ep[Њs.(cҪ.kcbAeDUV(pL;݀cҪgq +bݮr0.쎆NuxHw.tqnT$%\Il5>J8EHn'VzzLn˪RSG`U*ݚ¸8k4o 8O'm7gǸXb5 wdQAa>eQHFiJnRL+J, U˃r‹z<AWGJ+K,\i@3; 8^gŊk Йk<*ZZP[& ]asH@}; 䲂pYWkcVSYA4BX:d4qYANh%4ugMdQuaIc1>yYө+HROa `Aį P+QY}+]d'* Ui:j_ 1+ͧh^XWZKu' Rd-@V"|c]M/_`gW},v5'q'K ʉJ{ǔm~4ɢәwֲ /YZ&l\dr@ɴ61 6Lnp#U#Ng ;-ud~k^lۅaB{e/')h#r5y^7х|Y,0^(94 Zm帓1rc5Fge5dk=xux9IrAQ$xuuNW|!'ÈUV ۳ק`\d5UuiJ>\jh_e3cє|[.?2FbFTp5t`~\Ҝk@H)u sb%DxAꃂ<.Œ':5ɉx+V˗Fb]5# (be"OxWsYpW5RJkcpW\ Pi_sC ̮T85UOB:iq-ݢ5 7 UYfgq:ԑ!uP9~\ڏ S:*1 %msͿNm|)n?[mM'"oolJm{~A~ cخ TD+MjlѝPѕx.`֜7UÇYЦK1sN#ɞ_{:<UpVw8yCyNi=x>f~E,0b\/ ݆xj9z&,/@H>gU|yςf#ܦvuf H׬Yi~snNEK &a,>|H=~sV\Hrd׵sWБL$STwӯcR7*M 3jKȟE 6&aA ~_ePR!یr\7&:˯nr:[a?TNۀ/V[Bk\a39H~ A7"L 9ʴk8x &9ϵǘ-FXV\;?HvH MQ:2!}hg&y AF%0/mMV}RϦB|_!-~Eo@ GrI>7D)h)]L+4AS}) E)WpӟISFS9 h5ծg`lԋOykRcveC_*JKC-)m:--gfЖ3hÝKF9/rM gFr/E;$@SBhw0 -`x#Fٵ1lE(wb ZSW}c~xLzM2Ρ8>b1$ s%Lk2A'Lg2w["ByՊQѴ5_"Q{߻sp }g1ܔiEMq&K 4%6k}ཱྀ2m?C\5[,/l^-i!Y .4yxN?TMUm'"dc;TpXR[XpV>伳޾k<a~7RIt[P'91ciYU8-գٝ7 T ax`hq_M/n.3icz֗ 1qJQʰu%LCf:ah${y9і+j])+_`ԭhˮb yuy=#}/g,_07^LZMHI57pqM2 TdugjH" kY(ڭI?{؍;&[azѥk _kYcB[%3T tTr-t/Ue G_v >{=E?^]w_W4T 1im=A;87 ?2Pc!H3Ki}B@SZ+b&Z+ avz9-f}yj(vb7p(5L:W ^E_HZfX>&]+` vYQ]acox~.P]E ]p^a4b@a@#Y}W,SHq"5t:HNsk}CpLXdiH|`b=v״{ 3^}5vn?(dpFi.o,Vaf%V57ΘcI>INӥF>wALsD#EbBg-^7s" Ӎ-޸QL٘+r-HTn<,P<:(Mu0U&E_K2 Gf ;ݏ;2hWO˝0Fw% C\G*C 'ʏL ꄡ'rA[M7G,ŭ*[ntD'61lQ +=yv-"_uߡޣh¯T\w#Ȧ4@jbI3ƀV #`@ m'GMEg(ӆh}Jy`CgNWl+K 0/$#-ij! v-=F~l fP (M>z3:y aO d m {jjK2. [n^~)c~m-Px)stE@7a1z*-dčVGt%ŝӛ2teq[[ɜ耒niM.Y>L׀Ǝ(ù!!R67+Jgͻ !^wvnzl,l|Rw킦w=68JډYiE4eR@ػ'UžJe9ׇdx?uܤ_ԡyߪa}]Uw1;,2sHβd\$ceI!K\j40"w8 MiZ?C#XtA1[#{&IJAIdﺂ}ɐ'IJt(= *`fCY].FlX~ K7|DIqau{Ψ<&,[Ś@0 f%^*I4/R l:QTĊ#ϷD)~GY⁙r>c}l_ VW;][@1C )tE%t&;@$%2[@vN ۬:v*{ɛ]Gw.)WtL%t /5`'"B#QZjA!`@5>#\lLUnl&$U[$]5†C< i=U ^>}o 7kz->S5 TG&!k'rVzs_ʢ@9)lkb:7<riEO֖)|EMPxVcx[O->bX O9FhpG̳ŋ#_mYəMU;i7=ͱyHrc.Q<\ Nk1Z;swõޟ[ib47G ЊEP7kh`f(|Fmo(0G%b!*sŏe*Jv~I;4Ogx15lP߲p,URw_“{z;^Q"T;/<6큸\ܔɅn%!#JiHGJ!_ޜZѼa5LJ鐧@0;s6©|}E=Eh>d?ozboEct]Z/Y/iκqf›n6o}Ijvk\KJӑ_" PMMIioZEp1j4ӁnaV>,K\>COH[͚eRsg{('R /L Wy4Y)|eТͶؐfCl7TWI64\}70=~ Ȅ҆4>mJՄs.̻q޺@ `I+_1,!\U~<献kf-ιE{t7ݢp=2nCd. [~ n7N]їoNj*zxl >ㄤO-Pi)-05Wlh&h3KRҷ._22s!C4xܫ=֣ c/\ֽ3XCﰼR.ȿQʿi*y%g2⠓4qE|̨m; tUkRzC$@] zd'mV€WwQ2?,p[hRbkTz,@CN~RuW;nyNv#؆ήTCz'.Eph'km)wT=Qh&BUzl2<P=tFIdPr?;7!9ȤΙT:qHD doftBy{n/ea1 50 zFپ拦+p\6 vƫ ZǠ+kW kpG+0`W`>c5 'p\ɢ"J.FW H8]2,Nޏ8¬K4[=}z8)84$݁#HDO|#Gt,@-Ї&mw`[(d*ZK?Xjѡ8.KeЖEag|R L8)8}k;Z@@F=ԈX *P(Of^azs8^j@PB-kfuI|c_Ԝx1*{Gk.q tWxf)`l(w C-7OI*?C3';20jJDGU%@_Z1O,if~#ܓi>^{ ]K >mIjOK.IMWBaiH!&0ˮ_/L5H ڳ3(;]U';HJ*{B4R jXȹlfR).(aQn |2)$3H{]'ung u;Z#<>ϴfKnij+tXϴb#-џiҊx,PvowZ:ț ["3Po,eDL/.}â3V',y $N/X|tyM9D3PliGa2bBpv)A3&Ŋtwq {~Tq\г&(eunZ|./.8<E b &Kv9x(gz}$ONM=-ˤ'< }t"|b6cg8 !r5]y%?F}['դfvU2@24x1aqV C itUk%]QٸmV ti7D쮜3a؀վCHWb󺭈4BP8ͪC-dy8ZwxuID0ߖ驗w GKmȋT\O֣6#hE6mr7 tsITp[HPC3EZF'>rcg Ӌ}QΨ`>3W]v+{1U YީFH٘){v''_~4jcs;"/gT(4rAE_rL*rwV8v|^ʄ`Z31QЩvKu)k[Q؊B7ѨG5gJ.z !j'5X&-\܊kcz]@{Fc/+?DIK74xJј⡦MJm٦Y 'גxG %*j-+z ;pzOTTO fs6B.Zs%;˼FjYő6/Vzt~U1%[`ꋿL%<7U'4R4W|03gꥆq~֗&9N$d#=̦}"N#0~NQudRqbPHφP87R (l3In>7-q2i$Xw-*X(6JH_x7Re\?ǔWW68V@[<[O/Q.A8-]q†ۘ,eY9ew;ls~>̝ s?̝Ism쇹x};l>͝v'l0w8/0wS&sS܉al8?0é/Q4wZL0w Ntp;apipsp0w80wosc#k|ۨ#R +{FSPqwVS,b9eVzs&"0Rs,8D45RP+ ;`oi-^fΉT]}~.OM/}#߫_yyyMpGyzMpBGy {Ml8Ԝg_#orM>&Z]_y mݎ g[ʛ81$jN+yg0y@yxϼ :y֏ `μ n7Ay֏ Ngyy|#o}I/K-]y\#o7̙7̛hʛ̛|Mlxk9JgāW?&y3oqMț>?ܒSgyyzΊ7m;y<8yaX}B2obToMμ 7țWyB{d򵰔"LxdƑ.3F8Cz5Lpd_)kY"G6x'`͌׌:'"x=)V@<|ZHT`:^ވqTKpw63Nc9K-r(7DWb)dBv YȎ]HR-d Y$'84 5fٱ3)YƓbm;M[֏4G 4$90{S3M<_\Yӵ!t]4 0[>EL)!.dcp#Mwf3i2~͈\~ow Ǩ4.d8ǻ4=={Cʎ2bvhgYw _zi2K4XMi2ܟqXnP{v 'C6i&IsɜE.Й8ۙ&Kا/OR^Z&Cʝ;MfwncCte7ڳ ࿘n)nx~6yR]Vhu UoM2@jεx0=kԻomhj.Py`85/H?.)9鬝=)> 5-!R5dv^1_ϮuL9H8y/<>2rZl|m7M5rSXm9߭f#L(,}cknu+d$:h3`0G[y!!WH>$F^:X{Yr `l*jyt|ZʦpspX<'r1r1fal*|N83yeNaMD{SQtɰ~>ܻ|-SKt*n[*SgiF:UBS`d`|ԝ ,n σܰR`wDqPŇ&;~-:'%1e\L tJ9_`SC7]QgSBKZݞ mo3rhimdB(`qVR ?/lFNsGXaa{d';NsoEadp= 'gtPi~Ƽ"_(k#%z(|y;ՑWfHA>"{!=@GV6"6}x*ZǷFfcїA+.d %6<<;edLHM]O=P&]\aU(~V3殶MCq.Vu(|qi{6]3^ Nڸ2Lu(/PǕPG|*L22nc7K_#3!r3Co$=^왍 BAWp ÷=Zx#:dN5zj{X\H1wx_"Zx!-<q[0!NQ?Ne)RM4F( /Sέw~&Hz xqI=r !8FY tvy_&% js8@-5ǻ(rf"hOּ-gD3Tώѥ 0JpF9TOlODƨap6khTD)O1(2{qyI|6d._Ep\#B-ЬAXOz R19hSǦC"!2,GC@N^g^wZ;X3e~ ɻ|M;~)f^^ǥ^<>v=1dczczu|NczrN9Mh)@h::_:1nuܳcz݆7l /oqLS>=uu-^sz^׏4U quy >^GR^5qL#5u|cz_t|Jն#>:m5)@E0 UCwNW(0i$rO޹0W7rLp {Ezrwɹ0I?N'7J&&_Y5˭!5Wy`h]RkN^QJLǩs2`^'9䕋%!{76F6'-Afd d"IgJxLdkwv0Q#·Xaӎ+ t ZtVPPEb:7umGB ټCg؞rF "Pf:߳/va]ٙX\𖮖{F#}͔ X{m>Z;{O\BYdK1| HL-b Is-uL|7=dZV}9bG,\a͊bl *CڕSJlX$&By㊠ѿ~WI6& Ƞ~T] ŸjdXk=Ƣ T(m6k"̌FddP<3ؙE@DV6[#\k\"NP\]e2_^@9 (@A* Y1өg@9=/XLY.`w5=Uky`%Sv:"fΊGb(>duOuط}}a.Ob`M=1>7jTٰG ЙA6QTB"{2l1JiDPD45`jcqӆC(ȸi,? +$݁!B޺Kǯ؋9_Xsic ; I 4H#6D X(GɦW7B~G`pREUѓZ#zŌWϑIO#9JX;0Zb=8믍ѡY%>߁l 皑eh}%tAQBM^::3Ȁ$udwڤq٫?Ht"z~ݴgӆI {˻o" 3Am4omum>6F060NXfЎ N O hxm6|iS Kiaqm{}h4>6 >q i{|m@цFmk,p+2N Fiumhia!>6 NxLmZNƇ|mIhFF0 F[Ѷ;Faq}NymOzmå aղaOh96hism6S/4 z%::%F H95jQx8avbxGH;Pvl7G$7Lؘ4#U/ZҧDnU l.;Ѓȑj ]6h+MG˜ׇiPoӠ^AuחiMNP&\ri~Gè3C #Kbl(Z)5IVѡ`q% 6FicHı_3Y1ϲHG׌ޓ꒝}8 fъ\ܞL3^d^iJ' x+  ykD{` &|@1FBoR?Н#0c\M9'IP"6/&yxHG1soq'Ӱ!C Kp!. G~a#ZY*aCҜz,[M:8f&~SwFAۈ8ȸ/:0S򊃉;ܱsS9gĠ8ނZ&_RTo!$&&ƷkDXwX઺dh: S5VeUj|" \zJ"0xA70C0-l;Mr{) iN aq6C\rqHԮp/@ݺWY /SzfGj%1()zD-XW$<"uT53~Y0g*&$[xԄ# ^|Σ%!t`-=qړE/1zu1 xêfP֞86zqjK`)j@Tl]z>>GO'K?S=%6 km c0ʖy=DqJ*k#?Σ%Ԃ6rfa1T&q;=o](|C'Cx'<_DbW8Q#zpQ̲m:TM:ڨy[hC}E`Qu)2\;,il8SRNH. S'Urֹ_':ېOE_Yكcx཰Wcdf 4/,sH.()wobj@)30[<.eh`L /=~Z8.͑QG_D*f@8Dw } T6Sđxc%Jn&k~4pJz`" ;bh6,aP;@>RFkp=gxX_ߔn܁I[\>eT/n@?OB.)0嫎6(QX0ӠДk: IàT,o"ɭ#=iP>^Nc1l%4(Dz6(QY24(M>P|>@bnnނ]LeYn$ym~p$AfRq<*%RfmigZqH)+Qǡ9 2N'żnxp]7XF;8tq0j2XA^,?s(l|%'T 8 W`ttYNJ= { fTeB{|m z$ZW-_}旷Ub_`]&mΫ/n;ֲn8.x[ʔruL9Z;o8mlfKU)fo⫅ 1Wuhܜd:50>zX*Kd_I&Zcgb:7!PwyI Juo)[ ~)!Qbz+fLGYȪLϴt= 4gXjs u<}BUoO<-Q r-Nn@8/n3K:TwԖxNrv:[m:rb,ֱk9:oҶx,[ob-#-ŃPm° V >K&Kʝ)rmf NE5HbGl CƪfE qΞbu_@$@`yy%3kH;+-sWטgO85@a=Ƶ3+QrZ 'S!) Y7ȿ75 KK*r f,K, gpN" 52cd9˰f4.dۻf,\8fTή6baqlMRÚu3kr_Ox'-3oSREڳGm%$Kb4^F; !\> cd;="*c.Έ/aP:-'>Js+uBQ:ZcGEuy#%xpG(CF$ o;A` !Ƃ-._Kϐ/1dk.zԞ\V8" K?.4.X)o (ԷTbx5fcۚT!Np+$ -:AkÛ6PVګ< ^r H8.}D˕⮟.K_u?dԗի͟uʏDBt:hΕӻ攱'abAPICַ[eخ߇,':6CKX]7obxThC>VM;F8erOWHfkOՈ{=?BPϕET=ũϠcSvBGd,Ns`"!=S!G u!(28$LeͳLK08,=r)n]]nE@? g = |Y3hdIYE3*ڜO8 p;?pg>p>abO[#8|/Vj})X)<3! & ~n~k|0Lo"wvNKJ&)eRx`R8KcA])Vq`yΖQ+]3/uI\"|$s} ;ȕR⧻'sR8g3B.}x8bIô)Lx=%S jL)SR83UڼDL)|$H)fGS g ږ~K<,S y~?R gghTH!K:$J'YeĘ`0F% \4ǩ-6++NDXXy $U>qLxyzOB_j9Ƽvѡ,gG\w՘w$R'd>:B [oX's|Wq܈k0:_CYj8~e.6h㵢v2?a'rUpò L<|cQn*J,RMsnzDW x +5Уnf;=Z8{vgXVS/*HVsqu{ `,^MX%WizRzRwa!E8eIR;d8/q;4'fn}5 '*_71?:~] Bd"QZ VAssM Dǘ"#՝X7Q(H6zy~GmdX,mc^@0s* !YnƔ鈗f!FgO=Dj&C[pz֡G1byy|llɂSvh \S~2g.R$$jS1A) O&ٞYɿB5 o&e ~ȇ/]vr.e]D-d/.Fp- tKM!D|tH~]DY [ޝJW4_+ ?hޢKS]!2%(ⱹ G1im9Q5Q Ls3 in e$ܡk;\ϙ݈>Jt!mN G*ޤU?aI GM;\P <oܢS썥>pG$]dDYa#}TQyM>8ne1Dj~>7Ća'P[&%i9*augslB\fj. 8450QHHǘޝ譤Ln.Vj64vP4M沀6GsqsY ^\n_EZ?[CԨvs^kS櫇' C}"uFleP SsYߴt{ԯ82a,k8`,+ vdZ_~Y5:F+V''7իPg%Ѝ\WvBj.4ߘme. CtSP׫ay(m+O5r, nrl.{)}JѹiNmm,z6NnD7&r#?.GvqX ./ۣ&&+ca4QOa:ϰ腦cY)JQQ# i:jَUi;9^&۱FmGT-h;@v;vgl1_öcyێufYmGp2zmk}!Xە?ڐtl売 B۝j"7mV3݈cSжcѴm۱#؎UM{$خt+a>:4ujw79IMujl;,DŽr6#=i>bZNFtY|+zOs XN\S*5 -ݶl<| Iتcl=;+^ "mlh)uW8bBN4 ŦTP^Zjѭ#}s=:&E!\E]{ZO0 7f뻨~"ߊJ\-;גf9noʐ$(!IW<&I()/JQ}fBC7) xSi{pb*TFO&SNQvŝbx8O?^.MeAG\3}|ן9 j~)Gg]0IgcdxIY |?;Grc><%&cQO"M8.RlKbc[&U1GIjrJ9 $+L- 9 ߋA9>;hf*(qoLutB Lps1)KD+1f S{a6G>z8iժx@yFT$4]9ZbcҊM v uFuwCje{b٭.iZY4`Mg("keG*z8,9*keke7fw7=W:-XhZԩ!Gx& m#bՀCҰ4&ڀʮam',-;am@;#fӒQZ tny d )9|{UM<Gx2S;PE;gIW/Ysq g2>c>41Vqxv<2g7ɓ#)Y]m\n zϤCZb^2E&ӘֳBۀ/k4ng61 (h̏=;vձ1CMKL>&2Tf2>C^i::`̖hmo6S^]׌\bwо#XrW`+'p$?Vą䇱 S#wrwrIksw;}l!bNn&>~X^b[l>No-6[=c"{+'[m +Z}Sq smv{b01ih Dc,0cFQ4ƸKy;gAڴ¶j=l`ak i1E?  z Y\qKXg<}6ǰBGθOXc=)1ٰ`hnXT~PWhQ o*ueԖ8sg,^Jʲ_ /iVJxɀUWCk_JQ0yrD.HH; =R" c\%9W_-F)oBT|`w^w3{UwU͢n?R;jVKd,WlUkD3lDϜH*Z3μ|.X^jx7663͵%ל~ 1"R(fJm> Ħ)+"32],_ t aݮ`NJ6"ck~)+Ռ+zjxRN; %Jk[C%݆ȤT0ZvKv5dC$o!Dj-ݲ6LeM HjUŤ?5" )3\EnԃGW*a?id1r^Ѵ{GMkĴ6]rCO@vky,NV+ur㚃AjZ=k[2hE$"j-M RܚVѪ NѼDUKxa-% NVߘWoiżo~_ 8X52^6D<CE(B:Ҹ;DF'-`ي0 2f X<t{m }X)׀d5'[w3*ہǕ@j c,Č.gs}XrOvz~Ny2TNZsJ5@#ޚBTf+픻oQמE3W\0vb<+0MEhvգɌrkM5jr`RcHg9qCGwH8O# .rǼx afx9BQ(#F'Li>q Dc?mocK)Ѝ9$=B mH^_@FVU}{ɕ#H?0KmL`_3DA ۚ\~^m;fB,g]%Ё\gai]1q/~`uDU3I<)+ymgrx obz|5TPy`^|QnMxA[wVD8m'q91g]ZBANT냹bpNj/| V/fQ^f_Njy֨L*O/aQ^̳Ez"y-|0^@&$/f5җqE}\Pg:d?h.Njp(<>0Rn/fh䪕3)x1sDuӋڮ$9,T'J&W5諾`JWفhx1chw9^mŌ K7T0GȋKbgR\c7}A#q`:-=^<x1Sb// /fN`?^F;^ӉC]$u͏\op816Cblbo&Wyl bC{08'p"L{CKi4ՙh"c8PC}m Xv?7(x~ >{?(98y]Cgx)~X^}T@6@$pe6ŕ#AZ2U EsV\Kp!zT_6%ǼOTQ 7ԣgu9ƽhz$&RjzˬG<PKBH ER QlאƇߵ 8˅H:Z$BB `7}8S' Ndlbg̴<i e3qA'.2YGK9G {JܷƸ~~nk.&^/D|?͉(Y<"ԓh-X`[;S|%w/<&HK *H #xڜ!B)Rs$KḰhAy'^i)Oi)mDvUo8䏱 hC)&ZWa)-4(-_7<zH ~ }#~k9w&p/82M3|32[?c_qPnS[C7\4P\ޯkaMs$v'@Bv-'>Byk+J.>`3{G~ a(d2cw⏊MP~M\SxKܠxA?mf~cNҸ͡"y'6S)OʧShJ1_-pD{d8 Okվ=o|Kħ5#ڛz,uroT}XlOr ?@@(ՙ j+=CX(+*]!D)zXtD][^^SDCL~n^ H7(Ib[T jwc0[ؚWa;DmصT3){v&6K'EN{sKembemekEyt f[i%9DƾV3ɳ WI4H:D&e"@(<ڻISB$"::WHDE$(ӇVb̹21JpLh~ýV^fҊ|vu{)-bHW.AVk*sD^o'tOe%5F.8Ous30(pϱBT=˙m](sW&ClI1ҥ;Ue) "XΈw40wBr(2q&ugd: tq_ȋOq7ՌQFE gf$#QEsnuh0֕CTKS {yF&wE5+Z%"14:L>4%jv wzI8hQQ9;}-.HUҎG _ˤ1DN7Pr-_MO k*MW>?VHѼFj^)}#kg&-R|vCƚKTo;?7n8Ux%y<đ`,)'9TSGYcRA3 _;rޝCF2Z@Mf\ ]x@G\b 2S)7$OE*sɪ0Dg lrM\xa[\ކ@(O{sd)Z+ >Xۗwr4\P${-#A^Aڽn#Txo>" lKэ: ?]5Z,UwE s~A2K }`z務"O 3՛ݓ{\nApkQՍ=?ř"J}δ^OA u\*Gz\:ۄ>29gl2e+Dж/w| 83MA4+)6T-(naHn7D*H.wF>09}^]2> k6ePUjC"X^8!5(TeˢhH[i$EOaf2MR;Pmޔ®Gawkdlgc~&o;~Q2![#\*) J lw Kx}KYpwŴ7~PZNe.@,C?^RYqq6o6܁neੀ6`e[y`CX3uhv=lJ t\0,xQiNiƶ;(48}CUp_lXqkKy@|ܺ@ĴT^9j寧h0 /b.t , +ywѽ~4Q}zB?p f&U=ڳ!˜:sW˕^gw>fz!w"̻IMr!v]!f0rL;eɝHRE +˝dR4)&{Ąyz|yK|[{R;/h!vҿ>bn #΄&"oOrStEZ:mU]:MܩK4+S|pE]"ќT`/fLJన h1UUY eK!)w:@JX& l֐/ -M}Ed/OAZ:˴5JguS[לu%X377Cn3}Y=g=Z&5{9J!kWXr([j~O6A6z sZonUV- tCņj@ˢv4qj`YsuHe"dd U\O{_Ok5bø^*Ûq9#Z7 Ld+ɾ-0{dҽ' q.(^lMeq\b C'qCNbetЦ$eDDeMh^ (uN &E)P&&̊qfس.wF<8dY>Vh)EP0qϏ%ٴXĘBлUP5&00kELͩxV5YJb47 IJN;dٷOo`"wT:%C?)%87,4R|z Fڣv__yLAM8U01C !},c0]eβ"݆4w3 eG!lM%=Iz^Y0ZW5াeNgGW*V]"XQ+w@+OĨjUGOzY=H˷,"T Ku (GIo "ۣ] EJRj_=U KT-fU IZ`;P-WB9e %- a2}y[Bn݂Z+ >t @;[Xv66EK.Q0$,',!.cwNA x!xY74)M%bQNZ6\,++eTvصfGX'vAW3&Վwq#P"AWR˃g QxMҴmZ9IlYU,-`~5,sy8/M&}(X % <;~yԺ,pe'OP.L/^#+ʸl@O@Cjsal-;2 m]{J͒idYzָpx~"XٗNU#/}.,`ס0+sY:!¢'B-PQ ٓD#R5Q 90L2dmOEޓ"|9.ԏsѽ|D,aU*9q @/++. wY dW^o9ew ٛAs%{P̳iVoqO 0Vqn1$SE Mw7[LDe.f|/ E-ﵻ &Nzk7͸_H:r'"VjFӯcx+RXmhߕZr9MZfhiT򀘘-xT9!3g>s^biQϞM0Z%5 FѸP>}SnJ!,h"!P^(.M2R.)wxMBjOYؗ @CwDy8&ߞC ϝӆ !it[J&.@ mIZQ5LLʔNLt,M47 J W%H#LtN ^gs+QzxTS1.?)b 1>\n +7d畮ñLp]aa$4[sr&Pp" Ĥ !. #FtE]+z[i$Zܘ0r*jj]! P@rYEp)Į۠z?-9d$r>`+,uET0.%z5x{3 *gɆÿ\kA&"u$0vFIwUrC!\Woi0w,"-Bpsv7 .c $]Ey) tG!SGA9gߎl'_LJ\T}F'y;_dpwZ@NEoWUBf hZqV)uGD a)rĿ$;вL5Ta[&!TCAVd4t(چfس5+a@L247w(- 7O+=B8XU =14ߤԤnю/2 ;()nSzHѐųnNYCo$Ke'N.E5%J2^To_.,2xΩ+`tFP^A٨!璝q*D2 g=|[1Ac9vAE& oXwā@ ]3~!;YۀrJy@t`H'B8X,p*`#$\{k(ԅ83bnqfSy];.2 K+i-d_DC?-Bc,Tu)OlI֒1Rrg]3M~򁱭@{_I |D65g*~},b0/їN T#2:٫Ym$QiJ[y:g`(gpde|,_tl}4B]e:*Lj9ZشVJ񾊫O-fAlp'Wdgy{n] HGןd#^жHRsU_cNK:웠̌ŏu<>h[ń2Qj=X[U*׈*e_vs_DQ.'E[B+&6#MnG8l,wH 6<࠱s /9xhtBᣪ3Wz ۹f&ly*M)z]@$_m\URaw&0r—ꗜ@@Yy%Zzq\>Q4;ףUjm6K4/;O qL3BlܵrUJA Gp'$q~๕+3*TAuEw@-M?\s~"N+ab#:=!~İ|WbΏFG׭gjB/*&c(q\1utK.thVOi]֡u~鷯(HJ>$Ж^w_&'%o ;[nhĽoەMttK/Gr'u<[y %~#R8H[67 [ݑJPo뼣X#Z9t bgǑJѬ \\|rȈo ^6aW)_U{Wv ')xˈyOWMsdE_g7[˿}wöǗ\IUA2b.=Cڗ; +&}Xs"様;C@m*r؇119B`[nV~wы[rXNJ\zs,wWbn:6JL2 hyύ~]ūb"}wkp$RqbBOC#94I_Fb<V:) ESK2ovw:r !#理&?uebc}APbīʰN pdVc"kfܹl|τIQFI!u[ͻVeD)r$چBnǩ2F@rYjmUu;iUE{7V~>oh[TA< :7(RyJ[H|]|fm2.#Œ=,9cwQmykR%MsJLrf 81>Uڃx# QO~Sض^2[;b>s TYr@Tz^*WK]V8* [ X%Q*Z bAB^  ¯ oy`Tr.o%x .PqU@~_!'"tUC"Cv *_T2EOV"YM@0RrN ..@ r>Z ;uG/7a4p E&U wIpr)=Lc =(0wyP@$1Be7o\ц"# ZmV7;aFB!}v&yE!ePt[ܥ׋DSRR)"^|CD=7@'l,T+1Sƫ,˙(ɝ)+oY3;~>)5n+]iZp..Sa潛 MySZ E/=Í #[1uń*"L/uv}]yQdKI8$N~ґS\odދMXcF^ KoOؗN3\VbʙUrǨ$ir'ղ4= XTyN3qsTv~d7x7@'xZT'f ȼaf#=`͑༭.٨ȼd#q:Ffivئ3mK>!/ۘIJژyRm̼6fМL!DE)#m̀[+`ژbgB6f&Yۘ̃UL!<˥Ԏ4]_㷍Dn16ۘܮac]Qڐ=FL` H @¼~¼楄abfݏcb&:&*[q`NLKqy-OL̺yyE901/ N^&5e&#LKbib^,-f_(lPlDX\=My9>`3>v!g^6 I41/l11wK0R_ؔTCxKrx}SGMFo3'ueb摐Q6f96f;mqڏb9٘ B?h#3Sedu+ad&Fm#NIӴ1S8Jc0220F 9˵ldߵFl#3ޞFf_ȼT +)y 1Ff ;#ڶöȼ9{M#Rlq!qղGؘ3f1w^g1;ؘƌac^6%-1/A)̂m̠aR5mA9 ?8i} S+^afu]Gob>%CM33O +s*dU>d;LƸ2~r2a$Tk7kGb ]֡j%||[)Q"[HnA( J,+sl+3?0,mSPN84GȌ WH2,:qJtOac/l̩{ tOac)l̩zJuOacs1ac)l̩{ ac)̈0>6惈wB6flSؘC&f+{w&x\iI]ٚlsхy W 3FӂlF& FjY3Ns,1 fT1VfRaSbi] md1`md#,9Ȝi#_Yad^J`RC@!~w6)DQ'ko">|^F~G~G?L/G:K-SȈh9~y)hJ(+3q}Z}ʼVfИں0W"7Lx՛Q"5!B8z-l2:,1e:KT>.95pEs*bfó5>(]AQ*>햦U]:=I8,:^9YA 3PXYP.,Jb|~(/Þ_ .Bb3?!,}U@ZA"tɋzq*LYɟ!:2n#ьj/Nj'ָK{$mTa.B=e }z }ҩR7 J{< ip\H}T!EN{4HjGȱY|,BV,rpqk@ɸbf>Q#LTS0š$8_1 Jw݅y{_{D<*!V $m w;/F],pyrO)xvjv*;Qo^"EUrReJ{ZnE %lzM}Fq`9b5O_U╘x6gȞ+FCOt^Y%!3__LOvmB] /6>dߥVn3j"3NdC㮗 Sa% 86 %V[ Qdi9Jثd L6 \89`}оmD$5NEO51uFxJ#{i .&´n*W9+zĖغ$՚=U,͏R^:\n7@U2b![/k]S_ߴiKTUX@wDx:&CXbI: MFnGu֭iE&)%ك@HӚ7}|PFm(IZ`lSM|> Q=L?0tt6|?^C*SMѡLŭlSo}BzfqB8%" SZ"@:+zá<PkUX.LIcMYvIMm e6ͦS[c}ݑ!dzٸitAUR88D {%r䶽X=Ֆ\.j/d+yjS fō?L5{?-~yD,@cr{ ?~, Дʠ3D ~,/?YN?!Ek ?O?1IJ I 71#B1u/_t&X ]z;XI'h}qb;X3ۉ?Xr |8N,X/R҉eFtbp ' 2p}YpbRÉeQգː9X2?$ۉ‹ňbpcF{i&p?!~,Xcʽ~,XҏN$Ppd8Ɓ~,cFXs'5A2=~,CMeN~,qk`7pca=n,C15łx vcr7 WЄn,F 5Ǎńǒǂ+bBQb0Xn2qI[ KK?ѭt G!"WdTӏe#닒J6];2T:X2Ǐr}~,yH?_9‘%;vd*Z,h=YHj:X.#˸)YjGca ~,,Qc1O?H~,X+Kpc̑^,kX:|ā'? /0 ~XFD  &&pa8iva I \X#s: 4VX\ ]XDž;>,8 Cq5}X|%ON:Й5D3{ 9+C+Ru%p]K]WH| и}|Ws5we8Qdo9)`=~L# -u%ep]1"\Wu%_s_`zO؜dǞ*?0uGɱ}%&_yw8hy~ƶe KḒF8v\+W+i Ǖ0}m_v\IW8+g3{B)^~ޗ|) [lȈ_㿺??JU8K n_瑢cv_ Ϗΰx8xK=2YA< .5kπߛ2Կ8$VgZ!o TҜ!)| i cH f )?/iydĿ1U 1$xh:oGtǩZ[.W-=M6w RlqaDɋhex=*F1kUoiJQ ɸ 0ǐe k T>?c`Q|LXOA]MԵ_G!btebZUeR(n #t&ո+rJ Ff\041?Bu,P./UǘjabSㅡ+lQP8ժbz 臭╮Yǧ:IE)k}t|!XD -jo3z3U3EĜ ~kE;ߴ|G3Vݪ~+!N_"~b DhaLw] !ί0(ot[}HIcboR!s*=r^XFU1W"^eix`7)W Oݔ<~~"X IWilXƜ Ц $s][*_\v;S(XyHTf2]bZݜٛ<'LkR82E@`Za#x9'R ^͈_b`=.2lFh@%P/c Q] 6I"8co d @cn|'uu%*C~^V~uN%yEbmk\gns3s9={Bp'?Nw="*@% Sipkxr;A8ʭUX~y1U&&f"Ϗ ~-@Hyȣ٣7 ao|R<2pܫڭƙU9 PT DgIaৄ*SU.2v3 ٭ t.b 45@ QiDl_ٸl"Hc!K'P1vs_iPg| VN35A`ENW!IB}%5*_g3ߗ P;ZH݅{o[l{f j)%>(?co}WCz#M.R BTh`p)T5Azug^֌bysJTTtVVV8pٔ x а)+(?`_یHleg϶TZU 6Y w@X.fo;0eнwl!gAzo`02d4G7%gg΅ŠջYҒCfU3Xh||jxɫ >74ڃ8J$Z;]\7hëC{Cqkwi#LBBʠMy V\x5.S rͥdNk)JJ.8ZG(Jvf,P+D=VGD{w"@ uT|9%UwBxΙ}<$؇I K**|͍\ǙJKo'rTcPRV;ttSc2?s# %:zHMBg`@@ة0}GY])Ȕ.7_!TINgn@J=Wqc#έ Is:@2"Ϸ|бs%ή/K#?E'$I )^Qh,;&lkӄʓ,=nN7^[^$MSym%:;1>3/^['pbx }^׃}bpT9`_(p2u_ x\Qd^h^נ浕\0-K2/\=ז^ɽ֔%²^ ;k+{mEŠb0AӿiȴþRڊ Ak+6+;8 Xɾ9 0~\DZw/%=מgM6ԗ3}[KpHD%VzEa_[8ں(N~mi8iJ݇"fp3vfymWJ楙u%X?2:OWY.\nq;~a=ߛjGTCGTVHE"=)V{*.V7BEe{gI>j'0F PDA`2kX;`f{O*=5LgTF\{q=Hp p,z{sy{8lD_ɴpg{8!sOgAsO-kO֞=Z k>Sfk^ÜS果)*{C]`Kƥ7dޤ| IέCݕ_N9l6J+*+/+#e8Y9s'- A{\?b2OA4O'~~ߊn[yDϦڳ XfӥRTdGsm eH}})#t.m1U܊IH /E,$@f©b.E2N.g @ 6TԡԚ2 <DA"(` A,a!G  D0pH=,$p9[%oџ+1Ю!ܼA 2P@4]5)tH4(skhos ǍdE%Mh#IeoO#In0 $d%y>7NISl'(þ$@XӉJ.TɊC6*OŷYTE5M@hhW =Suk*,`Em+؜RApK7:3F=de`g}3Aئ)6.KkJ(~6pz<4M&4Qi=(ݑ'jZrwDQU P١eN] %+(.:BoP2+%zj-R *&^іe &GDmh^aڏs=MŬaLBaka ġ&f /p$o-!`RÄdYڗ8kZ50"TL;UL8*$0kӎYw.NMw`M2=%&2=u Slwʫ/C(8YN%S;eM%wP2dXP3QI53EnDM6=M$Br4Bv*d ax HbK?';KĘja?Go;1DZTV}\BzGy*mK%lz!k.>#GB:5'p+d,k(X62"8Ẓ Ԭ>ˡ}fYKGbu, Xk3 Dr e,ɲX+9֚'t_ $Z N龃gm?x NT-YM% amᲶSxKjغmߒm-KbM1`\+d :kyl+;9Rj\p|]Qɹhe\H`Z#EEk`ed\.9gyƃskȜU Wa].bpZu-Eeua· 7vuy:i{d]bkzX]`j.F+ě1'BH"AH8xa# Æ5Ī)-$HHa%iBJ+ + JZIVJCe$ ZȺJ~ͰPZ(}"\H\wXI+ ܁210@n0plWM3I|f̍R v 3Ic& 1|[!=BeqI*?Ƃi%i3괒[$@+ &K+ pPZXI<ZImYIe%a׮Vu<$!e+Hܥl2UpWs&8G 9 Zgz 9ICy/]u:3PޗItqdj#T*isZ.f9[_\q6Ô'A QbWgJ^3CnX#vPv aזLg(Juy7eYfJ{|~|[+L7MqщZ+1b':Di#]Zy[x5"YJ{{R:9j̪{ 8'kl(PْB_ `(0mTmᑦ,8[v ъ~@\9ܖQ4y&i\gٷg熻߼ɈsxRD"hJRQm@l}1.  X3E_`#v/鐁ol)[SͷP'lL~)=k;s5DY\=ԫ1Ե݋U;~=TwF,V=_~uyCN1)ob9ˆЭ7V.?GwCND(Ul'ikga(uh*;_fV ecqs1i⒅)v =@/$煲*K[EK(YG΁j4)0w֤p/ؘw =; ;UгKTI_B*|[O !ճ?yБʀ͇%k[PZ@dyf>؝uz`dF.؆v,lG8``:`!kuR)$llV)Yt6@Nlӗ6,6y50s_B^/UV=ܯ!k.*}a~ƤӖ5_|| LpLSqs-{ V`-?b5u=kD=cS~9DJ~r6W}tQgAH^֯0 fx6ʀt%QpƜKoi*ofl;\_*r;Nd{a#r[ 5M^!0l uR$; )CaAܰ.ҴLV=( ]`^P^؉n`Q-ity6S+=Iz;^ /7{i(='FfHlӾ2~=\{WTnwGݝ GM`oң> Dtו?r{0ւb \^]9*xՄuHL͍}7\c\{ikct' @Fӻ^lGGoS}gzҖ!&/^ak-Ӗu;gڲδeӖlwUdzZ>2kYZ֡*5U "kY޼ j>̝eZY0v^xs3Y8uwɬe1/< =U;%C0x]v)dLd(L[c'xОҖuIh37d'ҖuyZyҖa:iY˺mg2 t;8c:ZeM5'-s3gY,r,X$-C {CYs~d- Lf)˙$eXkVɴe+Ӗqwΐ8ӖҖ:N[](Ӗqġ-xQ,JlcI0#mp,ANeEVqϪJi++Evm, "QU( =EBJִ[0rlҽVHg?f[lkE j̍^!5THp4\ E 9d*]cKaaO1H0!BtP2V 9Q9e}7%ڔ+PtZv[]a'=3mY%섁H;^ȴelne8pz39Li+ 9xR$0v4Nwa*md2J[)de[BVԹg CzBmD2WHK/?r[-ICy.ǹ7% u.%V_>ˀ(mdжve쨽g&m!ѧ7EHlZZ ܛʦG~ w$/*ƝV.[ewZtZlG̽$ w&/./ͺCתF—u* |_rʨWV{d2HMm+e_^T; JC<.ԸJO+ W ׸DYኹˑ}d/3VLu+/pKj;k|ƎX=%ZŹB]dk6Salz[y(BʹYi)D•feޱsamcfB) ? T;1ِg.$Wp=^k3 8/4&&Lz|g@Y[+t섉9l8=A]l)LL a[!@[oenT>= qPR! eԶ?Pi*BgJrɞ˨U~Z qe`\ "gf.d]0ùs ii ЌKp-rw!%[0'5،+~q!Զe2\+ƅ 'J}(/cp-c{уmb'[h*MlkH4vIr;\5|k8| kVix3s Ε|3mzQ9[6NB| k<woAp֐gmHlf[F&5sHwAO(ͷ3k Èo<=Λ֎G$ɹs-oUGs.WLb\؊тsag_p.`\ T$bϓ.}}DRg-D:uWUJ+5yXʛdOEh.[B. V$_d%ounQY%wGrkIoJ3kbdnlTBY_l{o|/]A߳ğ:̾ ~)?Gb,(`,Y1Q#ߦW.xkLD"؊L%ZIF +s6* چHWbp)t Ë:>~~* ?dZ|q+ 2Pie~bb~ofQ:s+fM)0ʃƋ qv`Ք +`X QXۜVB0: bw0Wy+0*ZPMObpڳ7EUI313Gò_`ɻ/ f!<60]=azp 8_aۓPoj\.SS+I 4.$\'^yL|eN Fz}ĽErW7[N `*' gF%z *&ĵ]9rS~kjF' s> }GPpbPn;*^c7_1rn\nok'a#WpR`'yF]d'IkT;G!R՘" ?s+ɮ)ָ*!M=k$`FO߅2SvQE~⥳ +bDFɉ럻-P/9f&op<}N Jx} h?T|?g10ZRk*?&- /Ϣ'\mZTO}O7x)0̖3W "`F(Ow[qfO~( Z$r,k8I=qiGTh׬I: @˳SCyIJ!`\:V[Bi.jhs',6Y #qËvy{\66I#N͈݃Qdb^ޙ) uȻ%po}Tj't[wFՔ)σyS(=̀am3ΐIa5 `%w iTͧ>}%mZHH R3gkf%gMDOi֙ }t+.@t{\D}ZX'iyQ>QFGx(l؅)BЖ)2}[T#R#Bb,1Ջ HՇ&bbt]hЍ,j ;|ݤ %E>?v:i{{ ySut4M3@^eO tY1κifcx9Xy.5-nT~E3}m'^Eۛp gL+/q{Eo⽛cjݳ oz )7{1qη )a7>\P0,#:;FUfE$̪gUkVTHJI9FAnEE]|gUŵ㫚=Ey<f8ĕMU&Dʁu޿S>6^;L7nCzGupMܭ.;u@⠸ QsD/v/iIS"UYyӔѿH{O`t#2E 5c 2Eux ȲDf]Yvjv=`YioqPVӰXbV3\Cy3h~8+d[p6mO _\ H]-LTR:N-]z#袀J^- F,=hɢO!LC32_XH4}Adl[g!AiVdotu'uwpifƊ5U >fnV.ڱFCbDXxC3'zڇZ5z sb- fyɵb9KIIR43U.Lz M'):%E!C4T)Rq7S%N .Fd}7B3!)*R>!S-)ɮ-*&N5kNmT,#|myW߶#9ּ {E7cҲ@IA^[hJk)}jW[ӔOkRvoex z+z+x6N)E/.Vc]b!ȴ{SgزRV̄N֭SY@[]ҙUC Re'm6: NO}fg9{.VMҘz{zGR 6y%CL3"!F=Q]fsdtU-Uoc3ﶾTw7yIݮ < M©Eλ\ @&el.jVtUWɰKݾbrѓ' QMւdHdEU`٦׼N"+yW>6A ϯ"Q6, HWJ$XYhJS8k[7bDv~JDS5Wkq}V{%PeaEQb:a|;Eߩks֏œm笒'(zIU,f  DQzUX_js*Hר @G[T`Y%K;i)`w41^)jIwۜiiJWi>y[UddSH=L }S'V[Np._xC&]!^uWUϏrFfbXֶekjg ] )wHz6?;Xh/ոgl~yLPlBs܍k-Dǵɭ|*\YIz1A>,R\>))iu`'0M\adb˛#ʤ)M"z1%IyvP'|hwk!5bP$gHaR&Li0  [rz[WF#~#9%&:)$]s඘Vʽy>f%г\[ek-_o?HT\m@& D]C"LГ~4IK}OWt(R, s8&].3m1"`|?aV(^'c=B5p&{Z*7WK܍ǂV-X{EAISK\oV_`5EfMr\mkf3n[1 0lT-. a%mª&g)#^`zڼERvj ngJD@9TV0^'z|Rw;)AjA⊄  R]\KK5Dɵ$yjmC yz-4rU ١b`q8qwE6E1'lbC Ͱ@ ڞ lʗ"Ú)E~ȏH 5ۓm^2@LGo!sҧPt\Ļ(TnB89dmDz9M=]RpZqN>6Ԍ~{FƧpRkM7Խո)w{Vl3"G{]+ '% P486&B- O۵`Y›R~"" 9(3e|pWyoҹ5/l Y.B'4ˏRd&n9h~({M%#ϗfeRC:)ggkY҄2K/5rKSN^  <,]bV$ w8ʧ#?/m5\| ,rZ;B2C1A;Y^׬wźuQdzX-/8Oog,4d!T^Wc_G>o]wU*D4/ [MAǰ#ȚX]9P dJ>U{hJ i A$wR޾֨;dz9]8QMERV{$FxP31O&9$Kwr lþ}g !c/lU^BgB0A{ce+Ht(M*#7gT ]dcM6(Qn@9p@.9-O)V5(ƀ@*VZNfNY-’+zJJ:RR+Pҡ@f;g9\Q}`*me욉ꛣS:b9@Mt11ȠQDZ8@`(R^7} }[mfEUJwH\29L*rͺFhrL0]JMwq>iѝd\/O_eO(>|W5TB(n %$v%9b^< ]/?^߂ ^lC4;MȜRecrfYC<Օ1/@q'X,B%"=<2m%,!٘Rܫe :J8f[SEkfrR4tڑy(Xb;+_ja@lhro-~%ͩ/ MIQp W1Z_ʘxB d2 2SږVI$V~|K=^|-RlG0C۱Gh|x")/]GASh edeBJ>eyOd9}-ǣ9Lr4cу9|W,&kաQuu%W5/+ۻxBv> [W;DVW n)r 9=_Ůf<'s޷9{dS2zc%(^dy;t_?JuW}}z1_6B!}YViIL $Ъc%q 5=*'):Yغ慑m7ɑiwU>(h<ý>CGfu(bpx'W*Bn$fR 0yv{(Wl!ƤbhLh,-Y8P&hf4.Pp%ZX9hsA:l ȺB~_ px2#W>>Q7S Q2!umVϷ%f_ I@2o=$Exܒ.S g^!ʜ竨b UP6aܷC;tJy1ӝ-=5A/^xl7$Q%c0j*ˮ'6֋oYvq1 $F#g^cD[Au(wI !| /ׂ0,OJ73>hS529 \Ceq.Hmc>I4y.VXyJ_OPtއ6o?YS3>z`uW3/@)K]rg=6ػK375ѢpyM=ٷUf(bޖ0/AK"Wi,*T@$E3<{7xHl^㝅QҺ@.ohjIۋo0fLXիKd0|- *Gjݦpվ I֟pM=hl=:!tlճ|(*»:W^/z^7OLĿ_}Y3B 2]\UR$q/. 6 7rw eh<]tkn}'|`seߋ+QaGuրgyޱWN5tR&LjwPKŘP|԰1<٣Hfk#χ5,^ +OΒǺiC;PQ)U^^wX5t!rK_S-7 p\ŗd)ѧVlڈO?ɛbSmft(Hent~r[ ĺױҤzݑ姲tm_Q(y61l] ׻X|^u:hP~- a>,~):-?ʾ+z%P:_ͦ|ox[4{SpcIJ՜)2)Dy t*;#3ՏLB٘ [J+~i.V-k qݸ($)iF<ډXϦ=Y[;/|.]N*6 敌M5Cz}KCnj=%Ծ`2`CU4k@JpW*S>TRÑW&ftT^FZ|ҳgF;vXz}ޞ3 )b];gSQjYtZ\Kr: C (8̹4#L PrbɈ,qߡʑ-6#H(xdULV KXW=i4 ax)uьC+M_}$gz+ٻQ@eyoKhQ#tGJߍPƐYnv*9+$sFo: i&~$J5?foV8 0vGHF0͒@hŹ{zr.v;$1LQLVmg Y*$˥8b8tTH$'|GͩB{T#;}gl`'ČDYlFۑbq~܄:;V_pW^Ƙ+\U$"eR(^|\4)@l#*ILhk=N ЖSq;;lUg`%q -X.4hx5ܛ 8n7gMO"Jy]T.'3p*Զb o(qWŅ/K-(2uK^vqLzf\s>kJ/FA"bGw)Ԋ+;sM #&= \7Ő ~SOk|fyE-H)\%cv')Z_^;ȮtX[mHB.+VfƆ@^n C>ٿ:vJyXIVDV+dD667dBUX_!PTzMSM3J/sve)%#O $ugL26 <-]bnWNNia6B mV+YrfdT X:9q($C.:BK? PW/)Lg<ԇ~ŝGb)rϲ2YrDq7l\<ܔMp?7#6G 4' 施sZqPs$efZ0~'Àm Ϭ5;S* %kE.O ޮ tZڽ&;Kf_2\ڵNo=F_Ȕ$!KQtcl VəGLYF:_pT)unx1f]{5+b6wIk ة~p Ė kN捋`d֑Yp6 rݱg4-'jq+.o,2@GzyA,~$mBeNvrW}w|[Xrt17OҾT^M8ſ9~˷1*?EPI a qgs v?DvSAyB[kKo<_#_\wO|jaMc SSȉOͱDO1)m|j*CՁO-*aPG %X՜!M0>{6 Pm,3PMp\lsjo}`xkH#85y|RЩFO{BH'YsԼm/x hRVX~I=xwj2x .}dS30SZT4>),V^6o6Opgljmj`S񵠩XˆtkJ.jf` Md2+-Wq\J%N_}vΓeBk. P|w0>RNt m+,4s pIiJay)S %{P }Sgxcuhk>{%#wv벃JQJ ?wBD$oWG|Q@#j B@njuڏpДJ)Me=Ha9^5)Oo-,'Co+VXm28 > udFT$;*)p7T ɗR&Bl u3"wXBKCB&۱m^-K7ƕ^!ЎHvCBni}C ¨EX:(Ď81FƨV>|?r jf:0*pz|,'%u-a'o lN׽@D; H\m#tu1@UR@Sj v;l@!/§&."jlTa*¼rqG82rր6$Ԗ`.dU_5'tKAOеÄN 8%)P.@@0O @ G^%n;Vie#_CچŠ>%aOV^=ᩓxjw|8v|Su28 $r: X:~fIoSr3Gw74xڜ 1qEO=@}]/ ).$+aR?#0''$y5?92gф*fgFXT}Q%79LSxAzuATr]q3BrBmP N o)U^캻 ~wώ5;ρcQe/^}aJKSXuO-JSBOHOsw7|߾|Pq+"_TXڲPeXjC*vBT4but:Pv#$l,@;dICe4@Tٙ PB=+ ^ "/ݘ| vUn wK#﹥ Q >6bJoJnFOs6SL;5Y70:j{/߮Oq 35}.( /%`Rh fM@T:( b7׉Q;}Q팀]%1`ThҸ!(4 FB8 dF)eTB`-dh$SH t*-f=;#_C8OYi1vZS||D9W>NdQ*(DZё:W| JƴMnogxٛQv$j@w[Q^A!lHX6J5si;QZ-t@0VVe=rBBe=H̳N]ږq6J3ȸ⶞':2ȼT2NLqTÞoOj=" mFs:uiҝ{THc6JuO;&n'kS"q n} ڃ J@ 9lH\Á aE d掰Dw 1R@{RaiiI-^m KR0{EuvGHXaH*$s#| ~GPqoꎘVt}Dz7/Pa@q凑g:*>XymB(CCO|jDQt}f>bT#oLig9QP#B[^ ƨ|P~1QR+uKq8pSv#rl%c"G :"uEcdN.≾bTȘiQ0ϒ0]R۠mRmn @prUƨF$uf_/.j;,0*rT1-3Qnj XyX9BjH." AQ-l #R=@B8GBF[}S UqQ!sNd{GxcXbef9iCTC5H5 +OT|Sjlq&o$VB8&leq^ˍ哲QYl,Tj6󛒗{q*$7IoOe֕fߌSkƩrt>ũ7`Ckkn!ט:#|ߐHKcQJ%T hUqFpkj˩: BT-G@U-, *7NueAnq*"p*#p*6rgmkRy6J]&T Ew63 9kV[U]vQ2Cl0S|k  $M#ctӟ᧫JP‡ =miv5fK!Th=`| T;cB N"gƤӐ uFV0Q}nl3d7 {퐅àO[ԑiAr1F8\n87!aL \90*n U_m11dKjڒAYeZ YeaTyT0?Vd\@v*qq7B9IW;Sܳ"VN-+=J]^4CX-hܕx\N Dkvă6 QFWu$+M`T1]Q} 2pu877ʱ>:bJ ."Phnm'}7@)%o֤!,no{Dp逨v;~:U&=n!Th)W@u@uB4 { |Od պhЙVG Um%J#NE@x7" !<bc QP6Bvpֱw7n猌;;_S~~Ea8o1|(r5]FBd_b3duw I!jw 8;tl!*vYk.8k04ځPiPW ڽ~@'*n7 d+7FU#maTQq9n?NV#Ĩ>TyQ-/ mPB;<-Qq;̏LኁŊX%PqyamGf;ДL PUmײSZ ;էkdMcjwTh Vc릯( |u*%+o0*}o'P(Rrh˽{k],U ՌrOOed&.;wW𛊬l!) jIlATԨ=Ֆ_"QUkWWۂ8z˜#ez} E9b-MDs)޵R(anrJ]֓ PݗX!2S$17sH+fsLwjlKoTr2u)-{S @_"g§@⑹)fz3KwS|B/a&m$ )XPQTXEYmŠ\vF=KQEr ħz§cd PoƮ(quQ0ctwtDM~c':]9pv &ϮAEfq(G4>"]AEErUNItmR:cC%;绘@k|?(OUU& mhi#/5Thpݙ -CbL_rY,Jc:YM+uȑFʮ5Nov6BL&tQJ%XU#*JB~Q&g=(R R{ݬ_zc-].6І ںNd5" Ů{С\{wӊGbed^B2Rf#(eIO0 ojWWylwe mZ~B8r 'Pu3M1qljXb!t5σ{$.q\X4Wfؽڅ+q fMRn{1ؗ!>鵓O4VSsſz-=L-)+uoRc(kn#Q-;U9wɵ) :vmK(UOsǷx'VJ$PfkjLX^Cm^A9bh>U$* t}yR\R*]$hk(*6B`wuH/]+bJ7JK_veG )&mr*hp,E6?oWy+lQ<'KJtViĪvFGlAvӛ*>Uy&$P=rxD@bq553@Uy3ւ7\-COsFѦ^}niA`FaɶCkӛû--2r_zJ@ճX\;GAb&9VnSY$-7|#pfQT=O.#B8%k9F_7__Ee``?r;+7: DejIgeV2B.u @7-?7O fe ` FUH^"15Nn!MlCqq|ל,g ]"I4|˾ΰ;ןpSVFZ6 aJ$Ѫ[9@WHjIu6nY[!Sdb'ɉESf^]r=yCp[ D:gV:#¬dEtn;O4GGP}}P"xm9JvPR8ʈ@B!Hc5Nk[`W!<-w(G~0ُOfemN'g*{Q?E;V\: %]H[r\dMU|*TA/gUB\s.jSprL.Z%YaEg=R̒O΢X$xW7lcZcE mZ%:,tKF%T)E̝2}s_XODXAV4\RO&Wjn~,;e!<)M*D ]\{[눢tGodcJ2" })>@5{/OAcy(/(X u,Rf[ϪJBAD^(UYڳ`;)g*㋂(OJub"VYUȖLy-3*)I/'%b*dG~"2${=rgzv=k- dR1L{H=^<(ڟG]_ ?2ǴhrȤwhEG~Fp ePկMv$վC-JSJET[~XOw.އB~|ޟ86?Ń?5p,+a7~~?mdGyǢ`me#c=߹x͊R.$:T $OHq[t7WS?JeaC+~o'' -?OV,2k3IެP>mF?|7}х|6,ݰ?yi9 4މey9 xi? %kY*I\%x?G&񋺛{c?%s[ ̂=f_̀O)Htx7JwQZ3/|I{ɂ!`u0v/-$@o%淛FhovKz'趞g(Hgx]y?<ȬvN̤tHi FވD>/ZzJYK+ F\H AfUu(XS7>Kq潥}jX+Pj8[܄ 3﷨}Xc(o*_XnX%Vm1G^vjK~XmyPP/~(Wz[OWQb/wZk䴇f_i_GC:^!hY3ztot-$![ךku\? *FvZжP DB:իC^+(D)\#pF…e?c~g_/h^ p3^zT{? ,`8.y!9!wJOצ|0!}<_u7d,#tE4$4f+D7_msPИ kQpoCcZܞBvܟ" O-7QJdIttg~t}ҟd";7 A? OU%Ģh$*@vyUG|8aBÿ~6'wV|ٟXWE9jʝe5ɊR^@t:Xm)_=op?a=O߿amqQĢx b@(Yq+o?\J7Hyeclng'UQ=Dspy*-%XI{) .6ЧL⤯ދ_~&tr/K g|Tv^EWqNlH M< RCmcL>M*SПЕVqGCc;?n8G`.IǍH깟zh hqA|_i OV= VڲS);ыrWO:+;r.Ud+թ#z: ԏIVіzҎ<= K/0a}`~H]Vo[R?#R^fb}``ad?1:xC\֟ؐ)âhYAk9R:|_[iԜbDPB\=8͇q1 $#-)TZBOZay=!C_kk NX#A4:}h X$+WiNz0#\z,bFPC5^OgF!7 /+~X`Vozj ~wE$D &ѯDOSޟx~OcϿQ2,kU n|^Q ,)oC~ꗟ"ā4C ! kt_af!$ tAe/c^K+Ԓ/?Vdgg\^PJՓݞPK+xmSsˇ\8. YItOSP55OLZ7; "/}x{IOmS7цyڡ#Ȁ!~A.~vA0~1'C7AIt)AyƲ7˩69 d?"zsS]$9ѯ߱w.އB~|ޟ1qcQ<i}?R]D{#(k0E6޲߱w.އ9?Nt|)hr*: šyXjQ:'\~Kx@|c TDql\m-PL)Sh:S_z-uڷΤn|{_ZS?@[`7E0y[ ʳ奖VlgګczH!lݱU7]es Jlp߹u4\v͒Y:jҝ ! GY_v Q8d++GgH cT{WSr۾WE'wnHA(p|@6}A:zPD~GvJD|}RO6%iA\L 7va׾`GVe.]D[/yjE~b}gt1sxG_bG<6pܨqz;F]ƢDzxŸ|shk֋;nvC?{K4Ծċ #ĻV <:OPoK{{o^tk &2uKU9^$d#Yiݿjk6[ga~AS)&M SӚBv"m?@b9&kw֜ G:y]%N"]uC+)m"K UI9Y(6&(3vf,8Rd~%f[س9RdmM*#V 7R. |bKR}y:AOGr D. =)A44!doJDUMU1*ym4G̷&ч2{SrFg{ WF ȶ}j1G?KIϸU @^ve{w&eׁk٬6ʋh`&-u8 PYh͗IN>q e⿻Vx%Om07:r|s{ZQ3pU mڟ32,!ʦj;04> d-L k$D-zƏJ&ˊ/i%Fi0[@ ]qR2bjh*  o*{GҤgTYN7ŵ=„m&NiRsX]Ҥ(pv?Q,ݣ ?.>dDC(!:@Ta}>mGܼ*}j6#SpM8&pJW]"(_ښ'`G,biTZ }E`ke/AN-E ꅓ)"y۴uF5!_p,"9Aդl %j%D2& l^.YY0vRpgx#Y'20OĘXpPt- . XR[c -Agda }X)rKuWG18hoVm 0d`j F)|%텕ӜCL J@-3_n(%/ 9,N RVꉕ%js8yz@<[PLe<7Ɍ)Y,VPơ&eujL(^lB0ցJֺ5Ժo.VT_zT ^ޚnOBёIXb[pYmST v[ihuuh aӅv(p[KZ׹m7)7L}K$ >ɏ0Qns +B%KwlJ؏TUBPkP᭩ɲ=ָJ%%]{-Lp[F[M=r'(q _R\Y93sXB7p¢C`*eό9 gZ'ma= 5K6&M͘U֬/ǝȯG@7[ cNFpЖ.m*-ѡ\zgU}%z@Z?dUxFCN L?j9e-1=P%HX;ת|zlM\DR9*~h4!R!ifSgYRʛAZ%KsjK;kT"lީ_$IuΖuYMӹzxFMyTȖ-3~BO=8Q i*3Si Paq 7Ri)a(qrFeDMXVuMiI^jiK V6w7^)&6Ŧ&f)8mNjI\sv)ۻ,03r728Ky F+6HQ1M<ΝhNjH6ښ"9-@G[RpZly84k},<,~/HLnMϑtkG~d^}xy}*0Ch:N\sُ0 KfUɵ>|~g >Qd,Va iȩm6|~+.ɚ).ẟVy"ز ~- ]#Ov5~klժ݃!t"m<Pe% mT8ZdhAYeTU'!*/Ң ?!'ʥiNIy ֻςn.~L?ŒgѾ\r/`ƴ~O0#6 e K`59FD%0ƺ%8(0)ַMnS`&U)0/8l uL" Д)0CWLcZTf*Tj=†5NC 3k10V?ac`L_se ~HuA)Fy|@߶7S`B9.Kt Y}gC`!({#!pPF(xeB45bb Cԧ|AbC3Th8 Ieb͆f|]$̓}^RIJ4lk<6i36^\o&?@yv)|~ ɰ'cm`OEIXD-6+V= NBbv #F8zXrceh}̢)BD&WVGK[yXb XB (xB:Ll /p^ߡ}(<o8M} Y01bJ*_,57 MzDK3[୵ p5!j%+j?eTC;Kdw)%|/ƊN 0H:`cAܲ"lmqhKfqN}nW^w1 y"ӊi? ʯUWUw/<(V6*X+-tJ!<-:a~ʔ'mhofXC5|b bp|ZCiZ-`}NFxIBkOYWz)3l)fdK)ϭjy+ͭMd3qjG\J!ޛdv&nR}%P A}#’Pkl++e;]i}NWFo/F,@B[[?ZZPp^7BiH7g svrPxZdFCfDׄMQH>[$P,+qQ$v, f* d:tPjc1of[W,(:,Z΁,7v1mT9\z[6IJY䂝<bR/F2!ԛyaFy ?o֢,ce ݌>MPЛZK*Pk0*z(({ME1O,79<+p""wt6^Q_~JK6\ ݆—xo( [&#~( ?$F.6UU!_`Ed,B.Äcb,BYg]Tg8# C[<1y_P\dUV*>R}WY1XgP?Gv*#}o>(ɹ0„WƯ$(%)|^~b|^-}brPf,lЧF"*1pbcmRB]Kfo*wϜlq u'ֆK><%σQV?bҌ~ \I,>t?Ͻ"Yj{Mk^ yPn-N5r,UN[n!o;+cZD~9IZ*[,nmVLNv +ImD+J.]Wb %+Dv + Ҟ4Eb}ECe #xP@L_B8g*wŊY(y%B߬{PV(96]zWISqfS>duϸJ,V>u-~{:QetGϵشI]8Mw,y:j8ϫ/y^s=Oj}ײ䜞yȩvW_Wy^ y<78y:kY\ Z><~qТ&ЬZGh:Ӗ~b$r?ۊ"SjݚWu>/"ʞile9BbhŪ uc) Uo<(KWy KٺBӡ+ 4j[W5ڲKWhT+;ۏ3i+%W9uvǽuf_+`Q#`TBК㉺W[.K])iaMm)1VZ1emA{/֢-ec+ xeJ[Y^ny+ ڕ)C;u) 뽟dKKY$ S+}1*"K^B֥?ĽvRO9%#IȻ `Ce.ᒻGbY,W^½,Nqdei.*%xb,8>@TK Kj^cF 7*$Uk cyK[ m&*sp['C$&})u\;Rx'Kw͢t} *W:NMJl1Ẵ#,lW_|(Zup /3ht,V>}v+~"NpQG=K.޸=| Jh3b(B^e0\}r%=cX%:o<Κ y6ǹ8G*Oz 7 ÖCD(܅`^|sp?e`}'Z:̹LX0Y=㮙 Vz+ܲڻdCѥ K`m9CHP/B0m N$[YץjC-EP p@^9xD%Kwq&Ʋ+jJ3Pc,9<`1+x_ЍX W=?v}xqٷzM)n Sγ#u,WaFBboO |}Cv(f?1h 2ԋ&2-ƴZ0?X6*_8;g.bo{(t֞]NR`(DJB(Zuȓ,kbY؅6}*LJ{D;7(Fim4-3s y Vǡ( Mh)//rja;ckq;_b-io #TIC@?:-}]LѼsPQ#CԈo>7IQNkԅX\nJ'|gWKP)^%E13,K契Cl]z׺C#HⳘз̸J5MC YMpvVp,fp+xSGgV!"gQ.#XMYV6"h%Z+q!@IedsAzhzbC;`l)m :i0oWלT`^ck<'h' Pscֻ2#`+3i-Y a`Ey{ ~=G?Kb2|)Woݧђ#8%$3)Qо%g>/\FHBeKl:?}/Izq<ь8{(š }Ȳ nqR%<ФٖJP|HmlP|ȐKSx(&҃7ݏKa?Wu::uG3XzP(2׾cBT|_F; J a?Xn qT|K~p8@HlY ϻ?N%?8O.xqҜ$bu6ߌ5"#>̼ח/BvXݍ'r ֺʒB!|%CbBSpmN*mis!H3,S`H;e C2u-6tU8@g+гNP@$~|>F7y˶>E} [L֚3J)?c01bQwZ/[^&fQ)'O~E>܅N::D٩s: a,'gWh RPTbVsGΐٛ."pxEmIUiwdw@Z89rz1XLGD AdsܽtM`=49wAc\K,ƑG^2KN1|8Y^;gZ+/XrmI N:{m$zv]JINE|f%*~}̍f ebLoNO|ʁQZ1cK e:~.&t¥[("v\W{04p%k.){ue'sE%Q:@6]uM'ef \|V O?s *ъ^ ob:2=Z*j$kylxps5m9\B!a5c@w8yp)=35VitW $!&1vZbfx*P(36r9uq>):&`z$֐q >WKO =zbH@ C\\TfK~j1\ UbJ9J]wI+&&羿IϿUe΢pUG+?,Qm@zHT4@KsAK Ztzq⹢XuLN )a&ZDK ZtYҠHqEKeAK>h e&Zt_13 ΊƽiAK>hRxmAZWhi0ʂhipWt0 1gXSQ~FK- -R~>1x炖 4|EKs4?@K68,AӔ8`Z9I Z:-@-͏n1#TL[)Y4,%"c;#E8-J:Uor"ɻvg$xOjHK%)xM4Ո 30Y fgmvl׵ Zaޝ3* Ʈ@BDQxW?悜%~vu#e?:S\m1[ X8F[Q:(ڵ+ݮ2mp5ٔȂK` r $k]%9m8*9Yu'F[i`nlRi)>I?쌦Bh6|nbr"fwчR 8d=ǹG|jgh+\a9|%kP\w}wjV(4M³sQCBzhn`)^.E [:/ /.L1Sdi2-Ocegyzpȝp`#q @ #"ǃ4̻B-~\#p 鸆,)؊+U·CWtRku"*&4"ʼn۪ڕU{H=I>B|8|+pIq9vQ@%iA>x-C=RV:bw(''1"W^$mBirz$$L8M)gg/-0J rݍSK4^ -|NhC3|!Rcew"5#кe`z_eDppP( Bcưl [O^-\u{ /mO]br}^g+ۀh*uoxIemPB1k0X\|ow~5\t/,x]dH VV HVVfd Qk #.k@bnR"$tphvD@ k1\_~$d N{06^iEw"Qsp~oYʏު [ cnL1ҖiQz77_@jʌ+ǐ|5\Ho->Xd6P cGUƚpe_=>IdGsp|7 t솺.4*eRN(&- C+)/iҕXly]w f1q-H $Z>-g n*qFK`h̀t<6c?_ŗbGr~ s+X9-Wdް4 ,iwT 53 ҖVQ Fz)!_BX:jZwElyϿu 2.N~6`11ߏi{ NvVXHwEkB7B0Z#x@b~c6+Τ|F 2Qg]$kX$c5fP E 䖳‚J V -0 b*q\=S\dp-4#$]շV?{5;ڂD10U dCٵ3aFݴgO#m:V+4OzrDTtmHV==2<hhK ֈ7H2d/SD[:xnt G3!D/9LTt=h֦g90ժ$m~RH6hBYbUCIRȰA&8VDHAj)9rѷK>+ Xx@Vne{,V#Ts@ {ra/0`>WKBnZ.B]mX2O j!ZE/6֋{OԞ@@1z"W%᱐2Ln=]Oglos;4 xej c$-1'뾁|J5$"rlL3JV7[9QtA D\_Y"F9Ql~?fFbt4Q=i=-ϣ;_oAeޢvC3x/|sc_p΃5]ֽiYn|*߻./ X}F s%>D_ā4۷/( endstream endobj 4 0 obj 144031 endobj 2 0 obj << /ExtGState << /a0 << /CA 1 /ca 1 >> >> >> endobj 5 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 677.797607 858.695496 ] /Contents 3 0 R /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> endobj 1 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 6 0 obj << /Creator (cairo 1.8.2 (http://cairographics.org)) /Producer (cairo 1.8.2 (http://cairographics.org)) >> endobj 7 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 8 0000000000 65535 f 0000144433 00000 n 0000144147 00000 n 0000000015 00000 n 0000144122 00000 n 0000144219 00000 n 0000144498 00000 n 0000144623 00000 n trailer << /Size 8 /Root 7 0 R /Info 6 0 R >> startxref 144675 %%EOF genometools-1.5.1/www/genometools.org/htdocs/images/dataflow.png000066400000000000000000002030611211610345200250530ustar00rootroot00000000000000PNG  IHDRXz2sBIT|d pHYs ̑tEXtSoftwarewww.inkscape.org< IDATxu$ߏ n݂k5;A64MLKt}ݮ{ꞮS&kHX8^$n#~.l!!$K|?nYأl׀{l?Mg˺9nB`[` md2V1L dEҌ:m4n$ Xbl =!;0ވg.&mcSM%i. 8JRaIN6nF*$2L(G2} I7kloVod_DzƐpp3 p>0UqmZGEm\mx"2 74Ƙ ?`!mU< ,e/H`e[V7!Ĵ D} KUbf`:L ,Vl*;l l"'ǀ t30,U<V ia`Q?pieIt%"^I[IRYۉ%> /et%] AIHUaO@ڌ#8ICx7ܒ0\}~Ɣt%=!is^Lҵ<^6IJzUFڍ G%!i?IK:8;%iI{qX}4XӒ,MI:X XD%) IK:-3D.eE͜ڜOޏ^v3}%7Fپ$m&i9+ijרlRk]"2X*iԊcIg2L_bCYtwɁ[kд{f"z7p0'KӶ'K$M Xؑ~{ 8Q><!il6`u"ZuRsQH"}FU65){v4p%e!$2$K5n]\yHDWE9 'F }j.e/ WNKn$_#-iĔ &.6J&rOmLGO:0]-ÁUT"> Ktqjy;W5F$;t$d+ xbۺčz `F#J6Ig$V~MA

    _YWL'i%bX5׸,[_D2J8ADUiM$%"22LL3;Xs9DؾSҥÒ n#!lVMSܥtp[))RV1#D畴IwSG/KYUDfix@n'ݕm -78.Ҕڄ4&4))(Tx- L(:?6Xһ٦Q*"g+ˎـPկ;/_EX~+Z"jw{hd = ىēb2HK^b/H:pҎr̿l'i[`/b `vB#fL7'l7Ph1$_$NlWv"٧ef'\V&-~dbs i>vұ /#mHltDQ/TE8(/h„3IHJ/|MPSҬ׶_I'&H##?wgڿ0!gq "4fY'Tz3'i!_1)pHLޏK,rj% a*.@DZ'k,>Lwa"dw~d:ntcl} ']N9&kUUue$E<9/)mQy դS-nb&d2C3=`N$_P l|Ht"s٦L&d8 $_ INUi͉>WuF VRGߧPltFi߂)$%ikI+Ԯ_W=_ftҿcJ[|jӠ퇉\iA ]ӔM&d2]k"V5a)Rv8U٠-%Mh,W IsOJ,H"")~B'h|`")ߧ|)U ;]z7723p$|:i*6d2Lt/St)IxcΫHNJ]oBҶ?HZs djIl{2^4U)ptzu6%8NDEF̎moփt!GpwoE+3L&t`J8Yu N8%5Jm_xtLZ}:pgZ}&}[%V,M)Wg*wHhҼl_J,*rH\Sr: ~,  I>L&dK˶Uדtϒ)az^R::zOҰĴr|VKKUh \$)bz\{VAikC"V :B'3d2LAz=/I O5kh^.*71+,4$-Qq/~B3C6)QXItj$DSq5af$IgtE d2Lfh['IZBM2"1;Tdݮǀ%G$/^C$MOzFm}#d^& Bɹ|גt:o DfbsSuaI=?d2L iDBDag lMSjws@`iBUB"l{XEQgVW(p/="Z s±\I>E-V$leV^\F2L&LMV'Srln[:It#U7Jd2L&i=5{RMpt|_@(D.7v7실z+EG%$K>!^V^G"i9b aE7dZO` n[2#iQbDwD*D fG:jGKE% O]O^niEw,B@T{ ¡܊ >I8Xs0i$DZdž}9d}_$L*GEQcqO} Igy{r? A)93K9Q"lN/.iA`_`;ەǍN8aO>dvHRdrZӂˀelRm8*$ArNk>5Q b"dB*?/ O*#kG` Ḭ,UˀiSdS9prkrG)L&b `!DB!t+tMlwE¿+޲#~vSle V`%nBpƲƑ46p6vk=WoY&) L/`v$s&kV)?飔 ޑulCw"s>ɴ,I3Clk{>tOZt[%#ivSF< 2=aKj'M2:u.B9ɴ"#XG>rGy9X(ps$-n}&ɿ W-z}24IyTj 5I?uG&KU*go3}iIGZ^kp!xsjs0HeSm*V9;0kYATo!yRl_> h7Om%Dw+fXIZ6]dK=7Mz!pmXxFIProĪmzz{H(in:K xM DHV;˜+l,i9Ty 9Q}e"U/ƱV Kڲ C(~=)\`IS EwN&"ĝ^FȄ1GZyph= ?LC&B"Xߖ$ pm]n*QPzU?'GA|Ik[WgpI;oJ*U‹P ~ʙ اcN}[OKZ=,iK۝uHl;}OϺ;>-8/D m"D$I[T&9b{ Vz:>Ew%"sL(j"OI+پ|k*Oj^ȭ*wʝk%"`>9pa tHP^Ciil.wg R7uZ5_H 8[JTqSGo_k$djIXrz&}uJ(iۮI88)v-p%:U$mED7Lf0]ߒN%,CPԓplCc}M??I;~@]ђ폻3bjqI+'*3wA©hE=DҚn!VO= AǍӈ{Wlߗw+^ψ<1~gic>GA)J$6<5!FE<{T}KE$E|f+ % ^ϚdzVʙ[pT- 䩉釛DDYh7/od"Aδ}bM b,f`&۟~IDl?(po캫TYmO)i8B}N`4iI۟$Oۮu#PYF!9gJLPңN DHbg7WDQ6fUfr#|ZҊMV#rʞl/7Jy˚fO*\>de9X%My~AB9$9p }'T;́mTP"ײA}$ { V`߬n-mXSɱzܗXHriQ}f2_i[K)3jٶ5ӏYikiI'K:'dIJ:TŒQ),&H&IۗHbKNҬ)jtFҜ4]$P~z`4̆D]q_b+ cP^($\)w I\xV%77ྡྷ+* ʷCi"7 Qfd2)ʶ,?!qsB:SF=y'0.!% k*ܽJz0F>@1p\B.01QTFSe'ps87Z4Bu{`;-!psJmf) IDATGcZ]AZw#⚎J(ݩLGc%/j`.OOQ9`NJ, Ø$~$D'~0L(9Wks(Q|Ͱ>c\ \?qwZõz*o[`gcV?*!p!᜶{(QqY`*Lߗ Z/|-!0be~ 弤}KwK5|DUUBDhՈ=?]E<VHDo%/ҧo,E7n*!N?+~u4I Q_DL=ED?֒.!B{3 'Lv;PԮu.ppZkuK ՎqFQmF6'"ua Itˢ}xW.~HJ uQIGNҮ¡~c%Mc&j?vg%-CD΢b:R.mK8M볈e\E- Bҽϋl_̹#i*<`OU;&]uVUQ6d2Vyn&221?!ߙn"Xko?UqCk*U`=[beDzm\fnt)/Dk/ـ+  i]6Qa"2imV&a:p=0m ǎODߎ%"vsti}LaiuY8__:Tď0mw %=l~DJ| l' C i߶ UsqSK:x:i՛%}/i|m}YlO8-됴&jmciv׆-[|n^ 86}$-`f42Zs-ߒ 2+Z';9"D/pEīV$M,."Wհ#)>!V\>q=Rr6)iEI}K6d2V"|8~HHQoD\ĔD5DqDAGu5 S޹ k.y`L?C8&љ%*ՁE+(WNi$]uimv0~&iYˡL\I3xlߏ^~TmT)a*"+I$Vn" M8^xCQ h41~Pd_4yfAL5#gqbf+gHh\Eۓ-QI&\*r/&ko;WI&x!k FxR梹h7LJQꊆ?!+BjGF&r f%R38p&醎]EafKEL$[B&Hf7|L&Sr#i+vGxi(*n }I59~o89(c<T¼T8Pq,"Y~jB'MLE$l]< d+S()fIz<49l+o=XIR#2ƝhEqZ ^f}дбj("|Bv26[i&'L0~_[S1a_9I 6ns"WYV7ʓn+\L^YE ӱ5pi׶`dg=}NL~^{𤤥hwB,@C%Qj(.iTIE˴UG!$- plDqzvb?@I@܄U]yb'jyVs@ى4-]@]B5;#$~"Q竄ceEp{=Sf}~A6d2F#XBOGTo1FG!ϒHݶKR9hvQS$큳ExIސg-I+Jg1~o{.H奺%EV'>l1 m/mw+~xPaL;K3Q*Zl$8VeJNo75S$$0kLNMʁF 4YxP>GҺ]'inI;H"E:HMYDA W}!{%ediAzSTLfDF Tk+MIDZ#I:$^uHN:Rl(?s]OQdj*N4R}N|%]ḢIڜ d;jDQuw#MPc?ClWD'C2i=Se˓Zyo2,Qei bO@#{.p Hc:[ -jFbĵ=8QsN0u) LK8Q/ 3 7D׉dD."i "'G"C"}|U`zw%*G &tf'iO<|\ ^$RߛtZ3k)lϒO |PZ -K<'q)"_QqʭHEK?LQӾ(&D!!f%~0?&=$Xu5qӺ'y<)} qBHU*6C\ XWMԂڱ[gZ<>W~W~nJ}n"1z)S/~b*j G 1O%DPْ#uSp͖,.5B|+"]"WKE{\MPpȋ\>/l 7c_'."zlפ'^#ŃRe`6ڑd2@srv"t @?B|'0 پ>MsmM< gjVҽ$]N$>eJU:<)ݔ{?MmPĪv1=!klF[`Ibv"!+s2b"iG`$F"0AN"i*"b-{X1f*۾!$wΕE!ΚL͎Kol_4Ռ+yU B] hU3"cG&i-L&;XӫQ%͔J8Ua9W Q몜ˈ\{[bj`kbXDlC$nɯu^Y?'ʗ?KH<\ ۩EM6DJ_95rc`|ؾ)ѾºnRQ"cIcV1~$sTM[]L]">*d `&Ye?ma¡TF'P&_лmiI:bAC%wR1U(i_b uJ[WKvZZr@ovےdniI>Pޡ4usMmK+HsbS僈E8W8]F#?|xyJs0s$D꿔Kۚݷjv̓_Uzliefp񽅤 ܎Ly:6~|N&~6i甖鈍eN8p!_"yEہ]pIn,CH=ʯv%`ɭ+lŀiGB裤#JlmfΥ;%AɎoB`N*MH,$zMI[~d2X+)rN$9nBaR~\cO@ȃ\4E݀l?UGE]JO%~N.}APG{v8 v4K:T0(D8su wbm<[s#ɴ`e:I# t 5%MG\HV\]GD*BT;~l"7iXT;U/?k8vd$;E⠕v4 m4Q%.'T; 8XX˽9~&] idZD 0' fي( ޣsXMZC-Ps8LQ֪ئh;!p,)V&f/78(ߴPv2Ov2K}{=l,%[a}'`IspH=BLPO0cǧ-!$IhB݁MbV7p1h`N_d21'%=^OJY.PrCHTRuzIsHWδU^$nh2'p{ӌWC46\bl]wv@󛊲IN5aH2 ~Yq0-wZ9^&!CN' դ50MqR8M9@v4^i$F73 }g j@MrFhmv4VLT0~n ):p1jL&y?*YUoI^Ȓ너W$D35pU(3 (?aA[3תQ>4Zv4ၚ#WURES"M1L8K)L&3Q5+=HOwc͓ jF4qwIKM'i*F4Q1*{E&) =W`FJp?EDD^!UnhhA|(JDzкpuEi&_Tu$@ȹI҄ %IJzX84De/tkAd$|@DpޒtH>|S.vHt^;X^Q|=5vt%} |"o~?ujR떊ͣu%>%MT/Z] s͌=WmHjݤi?Ւ]i0җFW &!(S%K}3Lߢ`-$i IH'0pSRcjD{遧H*%I}\_("Gki8VEcޡi `Aӥ1vO,Dd$= ija~F(71R]MѮzYxúiQRQWk I/~3LߤTpb10xe iTvSo ޷Dڜ&iS`NWVW|OlJj;`#ۯ/92+?(Ulߛe5l!4Ey#E% M5/f:E]W(IYm|#wcI'i ۗ1, #\@afZevQ򉤉Uͤߢ"i2`vd2A]dnI/KV| :\_cUwc&Z"9cabqbE͌рwɎ۹2.-YvyTq}E}S^ ۯ**"V \n&#drC3PItEͨ>ƪUԳ!mYhPVH9 U>Dddtc2lܷlOU)v*)v3ZALG $`b+ws̸Da|ǁQ\kZLffK!,0O_4Cn[z"=2ޕn;IöH{vC} /h LoPS'S6窯`_wfsHCRN1nsW"b\e2)h"?OPedBҞD>}/V^L]eso7,`}WLQWV&iw4!R[T"iA`reaB6!ұY&<:8q&3T`_r$n{`r)K$ĉ%mE蛭L&S9ɴEVJIS:rS!2pS٭^{``9ؙL#XLHKIjJCh5;?"Jbm zsPIvKf*4Bv26a~`Q`{IGٜJ Ic]ho{QzQۏָLQOL&S0J+n4y="-`6۰/p*rR2"_q3L$`e21ߵ- "i>fBHH(4ow o `q`4Md2 LCHun>Vڃ29T2 %t,aVd?9+lDDPnOŬec!+^"lX9gU&)`e2/ՅH<,b~0 IDATqn+IU&!oxLf";XLa;"K,ISGxQшi\c5Jv2zDNfjSJ7Ky_ [5V&zV&ӡ8؆(2|y{yO q-Ax\Hd7d:K2M4voXgxX)Mf2LKV&}p{qJtx\$d2!su!s{ai [49A-JvB)d2dVNC/"0w 9E}ufٹd2EE1l!i)FIcVRú%L߂g%c{d2Lb`a`I'Bŭ$w̤^Ilжƚ 89;WLd+~X(+s~;$ hr9X6IQ!*Latu^$}P#}g2Ld+~pf4B"zT+INҸNީm%- X>G#BIl*ۗn}Lf2LQUL? XiC`ۧDKTgpQjꔴp>9010c*,]>qٶKg&INrd?Mћ$-m#`yASYJz 8>S}t #Ics_ 8ed2E#XL?"M^D6B(u3(SGmW]Vl62^KaĹ\ Xڔd2$;XL?#M \`ZCSӃ@dKm55z*,if|o՞L&i59= Lo+ k]~~7u7Ju\%@`mI#jS&ɴd #8=`JDĨAur]v}tLm$ VP,\ef]Z  ׵ATXEAAPdB  (2`AAP  L(XAAE&  " VAA + ȄAAPd"{! ՙل,N X nfԭTAuG(XAPv+T!i382_%m9 ha=L)WJZXBC73`3̖Fgdi#i KՀu8 oVixR9s?ԛ @8Aݳ&T^ٕ@wI[lLR(K6_$ \lcfH֩L{YH=bf=$ xkf&+{t3[GR?3:o߀lS?XƧ\o}`3MUf=^ٔj\ J V=ٖe.pf@;3䔫ρ}$ӭf?}^ XX_RT6 `f?&Yv[8dfNd(EM.,縕+ f[6作Cb[‚ jP`ަ-%c00!)gz'8<)tM֣mX)s IMdf'; AB y)^NWhfC% Lܿqv_~+)0̾˓ pފApydN,]^t7%T pryہn%u >X\&r1WjΑtjf8cZ%x8yyHܱI[zgH:|%̴Ro)Irm%QpKRjiǒײBt:+APuJ~GQ+&iiz0P\9X _  ,+5_g{W²Gx Xx<z _9^J_bF7|GՍ/d䞑?p=Hfj_A-!(M$ 2u-KTI];lpEm  VAA + ȄAAPdB  (2`AAP  L(XAAE&  " VAA + _A-EZ &MZ G(XA)>p9ph] RhN$OM׵ATHATײAkV$AG(XAToA?ATAX + VAAu + B AP`AP]B (P .V$Ԭ Ij_r䐴%Wt%-)U+] +vAP +JI+KZVIM.q] "|2< DzZWV߰DX zG B8<|f6/#0TI'r;7$bok٘Tv+pݚ|[Cy>1kO*a \"3;N`M\GXf69[bTrXWr0310|jCr[`%K(XAP"\ j` iBIH*;IJZFCtSM$=.2IC$} iLH/5Igޔ]ZIO4X&eȺ~O I;=|~IWIkrSx K)RW%]$FEeљ=0EGK實\HjIk$t$R{w:׿~#Id;IK:b-ـ@4"ղǎ:7qh`nYZ (LvJm~cq߮=9R'K֠Wʐu]`lftmħMaVE5{k p+ X.]﵁瀋K]ӵY=j>? \x*K3߫ҵڥ6OFۦӡR5 4k "i|u-Smla Ң']:iڠaf53i=?7ÕɁ`O B;63m'0Fٴ*~McL6?p%bFol mflp>pJ!+VZ, __Rf6ӀIfK~_ku5ik+mU3f#]H353е3̚bf_VtaJh_ԨW)*ZZ>[/?gkִyP[8.N:Vڠ R3IgWRrRcIJɇ[ 9v5o2)*?WЦ0f[0W< q~U86(Ifv4cղ܊[6ĭe5`63{~0UAP"H74CS m-U$*o钖 ?5-[=3毰8(3f6&H{$jf fMBUe0h9m§^2VVb@I tƕ8tWoƧu,4YIKjr3߼%C(XAPHwn+Y9WOH>.ՊUI[}-GPIqKwr8[{fֿ;ܿFI)I7IKi6).HBU~!ˁ7%M>6>5ƻk+B+yg1g  lP>O-k<c 83DJfKT=1EImq1CqI(5`]ͬuqg=p?v'x3]x `f3q7qyU95qQ3{w_򹋙Ǵ:mfb:> \x Wx P+pxCC8| ܖ=kf*\_0"s.Cp,"f62}_hEt1*:~% t%=JZ|[ZQ|ܞYeBA0/"O>/rϼ6+YE9nmȴИ]l1^P3$mf[׵,DDlgfqU~cS43ۥ}O[ի[c%JOlbQa zq |T|Z>KW%]["sP[|:芊'/|?H>2Uc#v|uŊ!9翊O#/(eDϱ>Nh_ԩcK(XAP3v6`KپfyEu&ԅ]MgYVn6x;+ܧ)G)YqWOcf#p$]S>wW̕p<ɹ4cToEn+'3gq|`ΕEOS5a+Xf6ީα-q\#I SߢPLLZAP Ws46WJ| V_$mb |Bx9JJwwqxb0p s "B I?G0d 3lW 寮 mp'-^NGՒ(*@ή9>q|hUIGU6GzQ87>k\ z8HFir\P xcqYH \- IYU"s[^§55 6XB)U+y$`fP` RejvZc`;|u~J}ɳ`3񕣧AGUrUԡxց,/S7Gʉ vGB 1xv=UK*dSMY\~U+!wƒ Wve3~O!8:UdŒ<ff2+@1JSܚ] 4p lffיlܱH: :<1\*i[U1)ie fv}PMR≓/7sxj"Bn$q(3uKzZ]He-$/9I%ic$u$=+ϡvjGJVtB9מHaQuI53T̸;WzZI:L$OҲΐtP&Wȗg^H紇<75*IK:6sֹIxݝdS&I-i1( p(n3)(%(f>,]eCQMq'$:>Vdbęg#CLǬRBjR7?s|u]57f[lІ?L?4}ymZqE/>}بcоd['7@Ãw ɓ!}>WVH +4Ngϕ!cOfJn$^i(U<xy7˫{=l"pgftNx` M^ٱ6 8=S;:};6;g8'e%Y.Ƨst/=hyx_Q\%e__E}/=ڭJ5]uA ú  |%ߘdIHXF-XpGxIG㑖I֌+.f<>ŰPoNC{z;VZXO-Klϒ,#_M._+C#mIG⎷K i9zSekA"rm\A)+f ՙ/i~; ^xFJsp5wf'T_StM2$kxw%ma: fs7w$=b)zJLA ! n1ƘY<ƌG?Jϙh37/QFkJ:]" <ԑv-OFs'[N9l#%Osr ODc0?-5*br{ شXMrU5 XPX9!e 3ojhr|W*?Bػ=H:$x,;NMoŷ=%.iz=f̆MĭpwKZKX= ĕ\4c$ͯ _{PGRF7tk!?r-)οuzple<ə$_I+H,)fNNeK&yyf::I[JꐮoEH 0{btp?%GRJt;.mHZgH/S~[/r<}vYS撲/E' (-^Hqidҏ:6wbO??hT|*N< Wrӂ=qEe<3vp IDATu>"%=&:)J=5!' )|92K򠃙Uh&7o%NTuJܪ) ʴk(fnx Ѳ:=ˏ@[fYukvx Plf$w-߰),3%VSJ VB0J&EN ̓AP ŧ"Y( 4++6+x ;l|mZ̊\O5'(O?V}'| *0ge(BAqyW6Tp_JZ"9߄)AR.ɓ$_)&7IZNҒ54f, H:T6 ? "p`G]r`.|W.dEN~XQ1Նϟ+6ƒ7^  {⫞JS|< JԒAR +(6iY~L5fVԕFA5I/ŗAP9^Nb<`Au)or%6t1 y4S2RA4HU[\UB\$۬OJA0 Vr6t`EJ*)ě\ږ)uDT`~Bs IKKZ;nrsmkԄc<.MA!*XK$%(5_1 5R^Sv2ѷ39#o'&o|!){?L}G~^mEI'v$WE'`nМƓbf\vrs3)4<7Ajnɪ/p%j3S @+3;,G>)tlh;̬PN 3*0 QSFݎxn]88S6z`^B wlEO;>P= )&%1V` 0ZgA\AMh3ئ@k@V$3 lZޙc•&+  44 VAA VAA + ȄAAPdB  (2`AAPI7IW-}k  MTrXQK}wVER+<@!iC3{onfW Iu-Ke?pa%>U VefvUW2(Qu(W,p6p 9X8UAZ<hFLuKU'6PJ҂%iaMɫ[ff+O;3W.5~TVR6䐴MLA պ*)pV̾_>n-, Im3j?n#> V-\+to)թ@t|ݑ'Ɓjw`^޲ėIzxZ0I7t$t/%}%17 |Pݒ6MJzART[%}-tDF9tS$$eI7\}sIJz[Rw< TH9ޑqn:^>ϻ6GK~^4O>Z܃+o3`?u[$u.B,oIKBҒtL`t|0wOIjK^U.t`޸{J:/}QK~4@:E:6N⋩LH{ʸHj,rIIzKT@I)Xew,v O  t)^wnp=hf3y2? 3@Mf6#Otf6̆jvYDo l~s[m@`G?U5 <7#cՒb_WL?&i)b7pCTfSp\`Rq`HVz/JS3&i>A= &10O!Ӏ;+qIAR/gZn4mTSaw );I@R"5nNMuojouhߣ/[/pKs/GS9K`@%l܍8>.cpVI=@/I GISR^3-=xȇKA d-VSi|V;dʞW*+weyd~~ R7!f6CҢ OϘٓS]eo̬GLߝWd@3{3+F=R][Z~o mf3Su *kXWf/Ag[IG ׊ֹ~JW+Z80]%6_Bee *{{CBVhfwH+Hٻ662O}Z3;#1p?$i {po++ٓ)2̦b6p[Հp`S\r,%`Y?_ҮOMVG{_!i($GyS`wI23KekO+7h8tRuy(<'.}cG{]3˭:t(WK{ή>ɴYlxRͻ?_pb-t`}/-`_`_6WuY[f-T6oX2-+h Δƿ9}0À'ARwn2Tlj&My ?򜥐"PR V2S+K{IH:&6f?{%χOcMJ7 7MuO&sa3](aY4nfżA"fvJ~E1~ W§"ƘُG1LW2^' jY`u(ƚwfK TfvČL X~E`3Xh0IES_^&V?qBL7#j:n{xH)-L&.WcWuacz/?_.xY9& uG3=OMpז J&<&(Ic) =vߜG鉙Ia8n9M{4]k<5>EX DJZ W )+~tT+J+M%5I(й) H|z7,Li r],,cd [efvqc켾?:)ٷYycp"9/K փRq$ϑ#5Xx لY/WIo,l=ড় ~MV>T _KG3,7t'Ծ)ʋg+$mlcf%݁Y/W%I"|TӶng?~E]l/Mm%efKL:oTWk lVi{^R(Iy;jz3%W\hf~[jnN {KVpEeez_.ϔv痁f6Zp2[_7~%tsc~2Eq'&|(S$mof׸PJPꏂY`?eM곂P\| T P  L(XAAE&  " V @B  F(X5cM<OA߄AAPdB  (2`%])i_IHzM~(yIS\IVҧ5to$}/7nI$M  'T.Z`<<}x2Ξ6SCi%KuK'$lf}43iO@vK(Ug7#+׵ՠMsA=fbu V ͤ}xZ0dT6?VV2oe<PI}|Nf0J4!{%TY_vx& \PUNBdO ;s2eRb%jEK^W~ij߈'l[y48RZRF҇fT]=f6A'/3ח[/N:3 i5`G?&lZ=  C8WbZH Wم@O`\$51/`xFRL۶-Aq +a@_Ic{*y|I6"+#`Q`Yy3.lEIZQP   Vt73u}qSWi,5\I{h>cfWH XxƤ$6Õ2~^AA㄂U lH򟁟3/ɸ|)r-‚AP &AP`Gu-DTIO/M!C (@XFku-GTJ.R H(XAP"H2߁kqذ`A  (S/eLvP   V$Q֭ jN, I)cjD,IK:[ҪEs*sn#iAI9ZcAP/'ETQY> jہ%][sgP$N/0+]M YGt7Iu,GT >A}ERs]7`c+TL`IKe~K$iT~\_ƽAY4Jcʷ)0N˒V-$=-}sgIK+y&i80*p*8#{*H֙񞓴N.Ll)IOJ'mISaFqft>td2H"SvI^ISaKzQIgJ{I]%-Wf^ Iקsy2A`f[=ހxW}^ƓXTh&ijG7ozU܂(Ioȏ3롕)`@,<*iyI;pKMvo䔫ĭxȊV Ҹ//r:V$m[ߦT|ٌ=0ٯ]r}q5͒61c[zلmf9Y% l+$ߞ|lkfwe nqzYa$ VbxY}+ ~2_ڍNt>5ypYOJde+Z$Ŀ;Ǜٛe7F$5ç; +'pKKW 9W-|_9`]BMħ O7 yXEn:KOҎZf~;JSxR%̞էp_Nn}&7}dq Y Ě33`}8"")ϿR2>6-mqd֪x;n |ryŸ'>e: 8w8̞*\nߌq%ܞmr7ŧ7c/ uaj;0HE'I/f)5WȎX~.ό?4O +D HZ WB^11e}[i+TѱP/ӏWظ+ve p\쾃#i?D3g03۴$ S 3gT IDAT =ify3u "J3<} |(idE)RShe9I1V%T &1E0 mzIS%${BOVN0bfSlC%c*;:1EHqڛu-K0wHa}{ޙq7qQU+*SAPbH: [?[|#3.郴+Ufvw+\AE' (!$5v5SQ7IgLyif\yA; *>XAPZl +{ _fyeoK+KX   V3=Я@~.ˆoVe +1E%M'A3)Rw9oT16V(XA+J 3HҊ4 ,N9 Sl\jfU4`AA(XAPPs)Bo /m3i08`XAPPfvxnGRSaIlRAN`%싿<)ު3J`A ,XAafIppxMo Ł̬kÌfv}_oCn@`#>38@_1:'0 x̦*`A ,XARri`LUHٚ &&gJƞ[@Ikf;tK ,\tiu暂%g~sIMAU%,XA{ۢul&߁[%]N1%-[62olfRY\MCqE,Ǘfvl_ hofS$}\Zs -0BRz_$ܜATPRe=Bf6SR hyM^J+;Y>3>8O| WԲW7BS2AP +(E:Qh 8XwLW1o^4s$j+X, n2ٝk)4r31uٻ9!!tHo҅ " EE/(({&-"H* 5B)}L}z٧>\33sϙ<׍ M{ kD/ia2Ka1ZO/9t7?E&k8/~1wwy8 "kaeڽ$M7p7BҽV1Bdr@שKNdWhHZ8sȕvy(vdsdh'.˘̳+<("+(2:|Iu,[#zG ,?Y6pg%| e&sv 'JJ&EpE؞.iˈPȝn!V!sTly v``nDjot28 toʝVc^8&"ޔ:YKBv%ys |ud<㖎tMiGHZX{Ֆif,=H&_"lɻnf`Jv̺ߺq&k$FcѺCƞ%k[LYk*q "vk0OKgSȦɋ/GĔ6jf,dB<TS d,OT,JD}'/Gvt4p xFR}U _gZ75_(N.t/:f)2`̬OpY7sefffDhffփ$ ,rX=/tvfXfff=jf:dn`V],335)"nv!$ҕe8̬I7=鈸@\4,">aHISK"br blXxA3Fə|wQ[,P[&iYZ8 I bl5 =EҤr801"ofyzKYa"wM,RۙŴcko9̬92333f̺,333n̬92333f̺,333nFI> \Z$,dFU=9"^v[`B)w%#2adtr3F;RΕcN`\4 x%e'#N`ƈuKy6bڱ}8<"/x-":f AI/"cmWf`DDLz~G4n)Pu2X]A5˚X*UვaO`{Xf},/ŁC43ӵvsvdE$IÀ$m72zft]7+pJ-Г$ptuu!17@9IڦеÁ2<^V`ꅍ9#bJ jDZI[W(ψ~ObMSH],瀽 Jm΀Fą.OOgH o)|B+.5&IY31Vs(T7,]$,7Ոk:@Ld 1i \T- ,D6ќH6QUYjD46@H`s`J8v/?poEmu!mHOmG{H\WiF0paD\_; p?٤3n}~ض3f= ؾ]``pNDQ7e#= }^$sۓH,\v.y6"V-\- y.z <P_<ƣ$W{7pU e^XSL<ǖ<ǀ#FV$k/zLk@BťrKˬmJ%V2?C`FJZ  \&Ge\-ǩǵ yrοcdtǀs#=Ҍ[Nv#kIFߨX~O'OV<9oh< Ee*ddbdLuu|ǛtlUI_`57`3-i2t2xz݊ :ghk|~}IsNSˁdP%}bp`axlJW9H~W-\҉e=;P5sC ƭHo1-x`"yNSmI痕$৕uQ0CoW,L&F~. ~ GH#dI2EeIdUGm-'sKՉ$E-ɓ%]ATGě !n]#L z/`m;wq|GrSDʴ/\ޯQ}oyypm#brH`ْe%|X""j:0o@/cd[0&"&K xN!k.EޕaG׾}O1,C8[ijd$0:""kVg9quj$)ppoW&BJn0Q2@'ڑA2,WLm]r,(xhd idSD}ʱ% c[XTg_v)|l"K&F-~NR&K#*$՝lqd^kV!1V}`ܩȋaͺV!VyHF,y7juHt&pf<_p P[Y+MܽYfEJu =K©%!0`I+Ne)qeDK#`ٽeR%{ kd"v!IE’VUUsm8ZS3VuQI_%hߤ4 pO+;N<8u(HZHjxLk#4289Ƿe[)I?'`қ%\wɄڽ?c+^oW]wMQisɻZ?+ڀ pnQ&/ܯ4$"^({SjJ4Y#Y3lh}T.VcidrF7؞ڲ5jː|{Ed4keh4j>5n!>&B=JiUk{evbzrXD\Vj(~EAKG2/+N kΖd '^)d2{]N*L%mA1s ;_"Qo!Ote d5,hxxZ cW̬Ey.Cw(C#f?p7 ffffY7s sJ:م0~gEfX6 ꂡY삘uh`Ype^Dr FQ.Y_,333n,z b |N\.O IھVqe}ZD<BҜ&y ICpIZn$ +4oHZCǚ%-*iI C$ ۹%R6~e KZn h;󷧌N]0BoHu=fq:tpc}X{IrVHznqOR IK: 48p r%P88l.ߦ@] fKiIW/Jq,Zvleҷ S{p*_nU`QIsK^II7b{\``Rƭ[($ xB҆eZF3k{I+?>zmD.,[dED%i,bfVұiY_Tj֎'ʰKptUjnn kG?E6O"/XV'/t^>\["A "lc˺o- |X,">(5WsEĹ^w`s 88_/" qkD~?Y"" IDATTiRXl[,"Tƽ_L._`>`ňX."<"V=ʲ߮,b3ydppedBFv`!Iav$/>:cL!sdsD~DDvRs]5A ?loem#u\K-7pjDL)m72f r<ϑjt7;hMk>u#`uPD|H^6T[ B &d)Lc`D].oE֒\ZW"k.*`/%Mm]P9p5Á%_߱%s@vR}6I+A6kn\=;`.Y!PegƷFġ g2=NIO9aFmlu2\5"or>"i_`أeEҳI2y\!i2oes֓Ly*wCi#2 zuȦ1rGި`Dݲ$V[ 7"/-lHv#q}D_Y|qIݺf ;pIm$D>.gFQZcjAyB&98}#mIk~@>nK>k$pOh!kc1-=Sʸc6""o0A0/(pY/+`Y3Cv%#я+Joyx^R]1Hڬ,{~`5.I&JPUs0|23`NbIk~O>&kܙ|p[e95{Pʸ5^%7ʼ|0i/@jl "po=طքYFmر#14#<%T\)Q?ˠ~ D+e4"#O'*|^+7!;!\<|2~^q!{zX<> r 翁G֐l։^~T^/C>{ovyYTXd磵q֖`3ƕa5%̥L et lW^P(Y3wy"pBea/u3kROV-$kj˹~y zISr~FvZ{ Y;8+ܴ<+i(뛍 ֩5YH.ϰ:ݛlzYßk:fa{)_K53.4K7?yيq'v%9$ ,ԞgvuѬ=y MrFĿ+]EV^?, i IW ,[ySeQ&)T ŬKHz h|FV+Sy}(͉q7$?BjLd`W^L؊w+o$aMYWtjeM`jDUQǁwG4Z(Y&GnquDlIrñ@D<Gdt!שsqvdÚdO5O'*0WadI|GdXuYE] ZM2 .O"b2oi$Nc[ xiMfF4#%=H6Po\T\WŪqyʃlʜqm`DDKڼe5`ue|GWi fߐWmdK}^Qֹ;֬ lr\<"l{ا֥ ຈO'^ X]7'PP)&2Ӕ@ >zNd1M{ɲ)WտVpR)%ql'u/d$^s;Jd0p;Vk(M9ȋd P[IqڹޚC/KoE.,kNh9^}9{v&ATVpJD,V|=Z*u?B y|Y˴VD<ƼG]^%Y?QΉcXP`D]nQÞ;`uYƓDHZz]y%!F_W%J^M^IޝӮˬ?׻qY WT֞yZ J`2vt~&e *_{Q~2`uT|SO+W]nN&Bލ,z?y[ "(5ZE2rI+݇dmVNdft0 :owLFm^;Yqa&K"e$7ZO&B3[D1Nr7333f:.fm6ffQh p+O'@i[5Xf.>Y{gț4!rySM+Y:_\"X2"Zz٠:V!-9qff,3kIY-~hϳ<XfQ-XGćZ3>uHD^K٠:>z""]ff,3bָ̬{>M\dJ~hf3X~S,Yt a,Vg]K".YM `YS:J`pE bf82NI_C]3[tB1:"jv!`Y$0k 1@Y`IJڿ03pe%-!iNο;1@g33 X<tXeu~R7~Y^,!QeI-I3I'iʼJmy832y=ff8Wu#9IKtcD.~)阈"i~[jf"./XVYXFw!21%hDě,a""^nv!"X6`UJ,0 8^+dg;wFĿ%GߒSI zߒ!0~avIIKEĻM,Q`r I{Gĥ.Y_,I3WŀU; ~+] h5Ƿ26)7ڠ$I5zbY,Aюz`˲ewk~(iD:ÖFJA~X3$XfHDLeԞq|3 1.I~t՝|Af923 m p#3%#b092IZC쳵IJEfj0rv-I %-ؓ1 xn|O$=${k͗l(i&IKH\yy/+|5f,3k7D`!_e6p1RX%lźs3#bLMG>, Y'V/lPsefm\{QrɒY>f,45p7p? )vB暽O \SYN|6"ovA#`YEDԓe%_$`(p6t+<;WR[Uj6 0oFMVUI_uIJZ9,(I+I@9̺5XfTP7tw<JtwgȜں>,'?MENM.-R^u_'e2}o44d'Kdn;=Ux3 V [..meq[=ݺ"sϷ1oW; ̬ͬ92333f̺,333n̬92333f̺,333n̬92333f~TY7TMZh&5i5oJz)N{XY a92VfoҺ&wn"&'%{i}mxم0`sZ3-`BD<ی>loK^Yus̬uڞlqef],3`YW923̺Mfd`J _82p 0م/`YW82$ vkvY Xfff֖]=YWw}xمEVQ7#bj_̺V/)M4?nnrQlPZ["f?q u$ PV%M{u`>`4907`׼O̬+l| 5S+Za7.D?2xW^6`,3##f¬Fq~as̬+ѨY̬+nfր,3 Xff 82333f̬+\efր,3 Xff &Jz&Iں1ݭtO{%=rXvF5 f]3XE.5&i*0lz2pY̬+`5̬92p Y̬+`5̺ 5̺5Xffu`YW̬Xfn"43kukpef]̬,3 75=_ti FEZ(DhfրJ`\+﭂؀̬X@D< \D^u+Xf֫J3׀Eɛ/.)D]v` )eIreJ9FWFԺnV^.-gcx[ZekDV6gg`<$>GDD!"0+qeD%izDXYB'"&k߮G*mQ[emPuD|Á"Yx;l7Z3p d[fy2=~Wc/j->Y;N`%`pNelH~N~7,֮)A.%F2[V%0[ȀniFIs~G?.?lF~6jitJD_=;0QuTPvp@yNe=wT}n $}B ȴVƟ Y[ppOeܿ=ZB6_W5A*6_*/-`i6/K8UZ()Qy,Z/Ț׀d42 re,c8pSy%28-< ^/S;w{[MسLVʸvё q >)/~on0)Kd.dq[k;U}ص N'g+ _>3qje-뇀?s˔kO{?`YWt4}(g9 $}VҞB=ޭ,6b4D$J-scǸQ9 +#]$$rE^<ݖ_<W˓RIwk.]x1%?Wz vyae#ɚ2o/~F?Z)ߺY+?q@6/5\eyy̻EeWאBe߫~&Ѳ_O{;y|_'㒹*ވiwwC*lو8e6̬+:z^%r5لrDFVׁe.Ur C/?FLگ%Ii~cɦ_i,WM-vI88Sf* `{FğCty921y`8w#`jm/$k~9@IY ,#ioS׷-L 4J2}k6^y_i5䝵וzjߑJF;F_V`b}lX'5dd~e}HZE'= Epo]L~mi!g?WNҧmy XR%o.A4dS{<6t$2w9I]%=C^A">f yFw&IOeVqJBFَo7Xn> (i yhnHzl&z+͔?&LszDWN^-}X84qC-]I'selaUK3w ]IE,].iI2YdYDٞnŎ.Ysrpik3DčNn,WW7IW(wѾ /d=l=:".tOI/Jy>(ɜUgf6Tx!SXHړ2=#YsGM ̬E̺Ig$+\92n':̬92:g ff u9'm,("`Z,3떈xU43+`YOWmF ff Gg ̬82nO+\=hfVzVMLDϛDWIP0녏#"z{'X6hIZq|tc1I5;prc1I]z{ 'X6M\6;(g逓#bfb4;U'ffff ̬`5,333sefff`N Y92333k0'Xffff ̬8 3"&WNs"VKHHqYC-nvK̆K_h#ISoGEĨn|`wx`%Jገx9"o9`XD\[JD6OvSQ{^D\߈n?"h;PҿF Hp=0ٶ!t`}pnD|X Xx8ڞKDWـvOKب,*" BqoY&0?m#I EĻNCK̆##N30 ppie˺o/ jƳE'o_F,Bd|oɠ5muL^t+PlL  L ]F`"&IsP.>'%MQ[x_O;d5I+usS3?&/;0w$Г 3ԹlhX8 Xk.E:IFg񐤥Tjʱ+ǞVY2AZc?no—"l 'z2y-Rു9"IGI?">t(9YwF%+EĻjƈk9d/-끓/3"v(C&7F1FFĎe1.mȕB` À:(">/V#߫7!"*Ɛ%N[[%]c |ljeg$ѣf#@vW|OLFF}L̆[*fk|| ޭ:^l[{OLXcܚe9$[Y6w'%Rȧ*jjKrUsYflhxlѮFod([9CJӽWl9ϖoU'DK" k%!Eĺ8qy.;jgu?p2pzD*i]ƖL%?^1#{I`ںr t.Vevq!V:aՉadm6XfC4΍%,Y6}QʮTJ6$ʾVY>Ym_IDq dM^c77_~.^E"0N-'oGĶ- :X~ٺD2v]So\l ixyd?lh8XeWdɒ+Jz*Xk`MF&_ؿ"֗9dۅ$I:)"k裷ڮ,~$GrO|dw/t p}m{诖t%9ԸG` V؞:>=dEZg#{M _=F^'ne(o*1Cv9_l 8#˚v.RZž(k+'O*;UWZ)֪du߇ddʏo Η%k}?*究ڇlWs>V]L  ".?~@Vow1}j\ɢ*IE͎?IZXÛ 8lF,IuWg VDGa j]*F%EM n-`F|_̾Cf4ũ%K C^jq#w33( 6'=XaY̬Evov{.2333k`I_ҽ{$]^fz#7IZN%XI5:.333k=.*$G8RlMӎL߰h̬e 6XoDĨr)rRǁSrx<̆Z%jcNYL?~U_7LR)F=vmN֫OX]חUfff8"47p 039|mnh^k|]IHx-i~K:xxSґԕI#9C4CYG%-I`r%-YYKsvQG':5Z@N)I\L+FDmS @NGwes,Stk}ov!9gڢLcGN `F`ºmf yCҔs}<𽈘)">2335`8vZrUlANZx9TՁ񑤓Ko W.)ܢlr>dR`s'ǖ]K&UwFKe{jjX[+7&>#O1f| طH4iArnD _T!2D`>VnoD%NYĚc_RudLD^W/vxV'"#'T>"i󈨟نx5rUu pYpmDу= ,M Ֆg"vE?9E6 d FV(#5-OϺxsKZi SHںb1`E`8633>6(,,:Zq)'FI//wpGIzLx:UhEħvqN  wo; /"6oTfEml\ VJt}=>v{FeٛdOy.333p(6֒ہ̬ ("45c7lrXfffENZXfafff*B333sefff`N@%-8IIf!ijIKJ.iηƗ4y9&`^v[Hu_IZA&V4Ϸsrm VclAOhfSfIHڼ-%i):lI$]ҁ͎$&i-}-s3G}&MXk]mPf>ٜwߕYSF  !G3D}xdYN~/Sk} i^`͹o\BNl?P@! "uIӒ9Z߀4r쮒e"̍C8%8pef։Wt;H&X5%캻y)8rwr˺7J? py=9ܮ {s#j`{`U] o֔t%(>.鐲w*R}$]PWn$naI {͚Iҏ%*TK:Y4 {&%.i휒~WwQIT$-.irU*붒IkI:,%m[֟(iwIHZT i:I{?5+cEISIگ6HτgIWJSeҒΕtJǼ+U=I:IWb[OjܒQ__+oxMډe*IGϓRYoKS$8ՕUsS?\<];i=QVWk^?0IەώT3}%tƒ.tEq}6RJZwM U~7I~L/\pk͟'ir޳$-Β/ђ6tT+VNS+t2![Iҏ)%/irMV-˗T~\Vb]kn"_m'xg`ʺ˲e' ~q`; Ik{;JaYS;pYyeOـQ05uKUOjGm lSـE|=L \U^86x,ی , {70/p3W6gNs%7uXkU|yJN?+e˺_Ik~Tn @΃ZkX:b=}9vH``wF][Ŵ__9ρIoGb=8NJ۽zx|,RyysW8*[k+1 \݋*pumeȪ˃9U*i5$}pNt%y-.Vv%}33`],K'Y4MNq5z*pK'Y~u)'!i$-K?,x&"E*?8c}[{c=C'Tocƿprލ~U;r{xyoۗ۔ۏ Ѷ z}`[CFUxp?'_>8.]#Dkd0XL0F~Lɵ>`ρk?xm->'ېQyg=Ve5;!j/vxܾL8k`$\y_n ކ_%M%ߺgvÀ1d=8hcG5}=kȪK,ޭ=Wej<+_8w,*vwW׍υ_rnLXzgE?KMV!}oŦd*_ϒ"AZM!i'ޒ#_hϒ9ȒގQS~EQ230YYu1AtY:3q]RK#l|;dTd?}KCMOैT ( `ˈE&I/J8"*}x'"ޭf|P XL۳O9~ғgHƖ.L[2]u@Zx1]VWU㼗Lky!g'K'#pc["K>,_|ܵA5W_}> *wsI=v/0DijmmPJV$KxB>֎g^|%GRo}P:zw_5a)¿?ض>"Ηt%[܈XTG#/#Yyv$]/%"C蹃BX1"F\sV_;~RD&r2\]ԟ#6see|y)݉#r$mK[ LLV*"hđWUݓikyk &tW};I3UO 6t\ ZC=B/ykq(sζssi; d&:nkQ,A8 e\,3뢈xGk%H!{B6 ՀC1ۄl~ڵbR_KZ^m$O6#k7a6Niu$aÏ*ΕKϗU(/`k#;5V9o;_栥{XD<.Yl=C;'2v֐H";uui0.O}+`f692jhf682n)Å5 'Xf ff,3w"8̆"'Xfmeւk+٬XZ,3Z5e633+`YO]HVlv ff HD|ٱnfkD Z,$M ٱ f`wWD< ̬{``s&aS35;3'X6 7"ov f=!iQ`fafFffff ̬`5,333sefff`N Y92333k0'Xffff 9I[#>>$n_̬չlR%p p:9#;뷒n5K!IDĝeD3}x%;Xpq̬` N ,j #>>VFffMl{`jrζ+M Fm, |x9"l?1|.`~$}dS1,r+#3I_-՗m Sಎ64pkOUmGݾ \Rf#ߐ4ODE60`|Qv` `s+H xx<8̬92|.:n 2X4"+˷$=lk~kۈxE:嘟E;#)ʾ'E|[Fj;cff{ >HFK^. U#ׁT+*ʱG##╲9!#r qeo%ZԒrO#UCIcffK*wɪUO#ңkJ*+`hʱR(iYbU8keŀV/Pnp08q;vJڶA>#R~ s!SIE)rI5.'k;IluS'I3kCલ<-Ln+QY?0Y[ ">NN%Ww/ 2n/GX@}f@cl9lWu06YqǫZ(mG%T#IND|*iqsr%XG%|[E d"Ds$َ`r{0"`II*"jvLZ` 2CҬɀ7^yǕf#J=Wv1_d/dB!< הgD d`=t,ܿw4YMx19Yˈ7]$ "饈qYP1IE͎?IZX7"l2Ԥqzy #bGf]!iQ`O`6I{Xu 5"*F0n+3K˗f,3IɁGoov,f-Fa-ٶu t0kEd;C3%Xfff0-. 'Xffff ̬`5,333sefff`N]Jm͛Y̬g``v p0SiyoSy|ރ&,~[Ou,|CI0@">)'yD|ڃGGGě=̬ #ian`I`^$WE8gd8Xxdf` Jn.zqȝc"⃞ "> iE`5`?IGK1'Xf_E{R%W9br@NڸW`qj@lff} 'i]U` 85"^J/(Ū1`2iA^&mffl4\/#bxǝlHoUq*G=PD|~&i̬` @!QX$"h \7ꀥk?`wI ܉ŀ[%Jql3re6HOVgx-N&!K"">_՚HQ73)'XfDؒL.i;%"ƐXlT)Vג9BУa! G}SVw9&&{!'m*"ގGH:WҴ>YW82kat*9Vӈ_n]>:> ?Y'"4kr4}q382kQ!X8"s -pHDd8XN#bu/4gfV Y4?.5iTD| @bU7Kj`Is7FpꝀ"~8߁}*"%$Iͬ92k6' y KEI}!YC7f649:6r;4;LԒ6#~ agf?x`fIk #?|kNjf}AS`$i:=oE+%ie`~$< C&K4ܫ>$"l4 <"nhr("\5DěhN KeF5#*f>qD\G9f ^NہՁ"&19};h"`-V'"6~ *r]z Y?-p7hɈxLLsJZYDy0AIk6+3`IK,Y?"~]ƃjV< VJj"}OM^LIK1ˬ Gd _lr5fǑ.'i&df,>"i#?Eĺz 5ٸ1T_P\UO˓\+i?I59,3@`I w#RzQVmv kwJZaˬv${ ^,59z;GD'*"I= SF_dTJFD fwO=ISZBxuxQ_af i!"-!3VL ǥEb+B3d-*'Xf iRIv #KNWp`1Iׯhy#݈8P҅orXfb`=qJCZ\҆u~ 7##+Œ5`Նarp~ښKtd=ˬ$'i7&l`xa՛8MҌ&]td pY=2"╈X 8] &ov\.tIj5u9M"&&IqX""Vkj` iiTGĺM Nf!䐬I XM`Vk%Xf]T#[2*jOMlG@E}"\ּp:VJ1WFJ:jv,'WC,3@’&hgN"ۦ?!$&i&.IH: <L Tl ">okwIZaY'Yf,J)?X4p/Ur7f1N/ȑ旦ϧ$Mد@DGVoK{JQҰ~ $񈸣_# "{~@NV^ԗ`U[$6N-/">ՀKOzkp(gmUʜ`&i}ʲ9=ϛbO`9"үtSD\AVMZ^DL 'im])՚A5)D롈x~1~І8'X6dINN{R{P.dCbqw륶DĞHODw^fpz-"ދ-M$]R:|,;IR{UֺKng'X6]?>7eDl7'OD3q;2jݪUUوYX54 QjbMl^`ӲJc*lF:d牪Kڼ߃1dG 3'X6H8MT?P$o80"~xz+"#U|4?mg4U+9"kj$2`PW:odzp!F?)"vmj$ e6Y-5]NwHȞ8MVD[,R$m@lˋd"blUU1X ٱDv,{͗~AY#Bgx.BB$Ԧ/p#p pMD<ܬI䃹BȑUU>P uNlȐt$p:p!p[ijTDV}RKNA3peCBgxD5YK)u!FҬ$CK^ϭNIئ $GEDG=/U+ҀvDԏ%VmlHȈإ;K40Լ cX<l@^Kh#^XXȄjN%QENsu(ǘ[g L8j"'XCgdF~2Ԯ&j @R#t];ItχڵV6LJ/jrB`Y1:#"5"m)U9sb=6TE杬XSdۘw[uW6?vAjI%6NL|~ >">2p;ǻ\CNbp߫y'jf!'>눲=dn7KGɡff$9TuWU?v,mNγxAD|/E qeD[ڳ],q^6*U3D~1 q8v,Sb}/"^q`s,334;9^ۓ ;]ߕɱg!'zq,kIHZw_j΁ק$}Ln i2u\H;5"v8ޙ ޿5+7ug_K&%s4ֺn==ǒ^@E4;r:sr bf'TM,&iF`0"FI: B1d"7 9N[d{$= òfpeM!i}ࣈٱ 4m i(%Gq͎eઈxٱTπW$}lt>YUpe׃ !'iVђ6(˪N&n#\;c| xRՍbvŖ~6sV`57V;bm!K `veţX~)PʺC*q/n8-;w=jkEne"icIKءn֒$ǍJҴed?+l\VҨ:kH:`IDɒtY]S[7\y^sY>)r(nxiKs$usU;%=&@rTںoKdu۫,_OkVI_ԏ$%I_W*`j$]KVk^be?$^t!1*YW9Y},_nw<9>edd{Wc1sg7߾d5v5D8<1NIDATIZy.9ٝ|];ae#%?)'Խ,6~X+"fN"88n7#bF`dgP#hKr07MNmYg=X_AWzdUWFUNqc%".#b %t>~c`׈x0"^'Ju2 ir""ިUKD(>2|F[q2"n [;d#❲JephD\_,c?)Ǒ} *nLY~^+2h\(!m7f|Adj_oV%5LI. :& yϿO^9$`ml?1+0`^{{fr6IؑLj? ۽M~ ,LѶ@g Ȓљo`6'KfoPfK7"|1UioupV7f}?2΋gG﫠-">'jcmCQ~D,Uw/]-?[C"l` T,:x>"FC_T3Ȓ;kn !o;UMJǴrjF4/ݻ6Fqq AWIEEA*Rp*.t IP)s'CѢq8"J4ig 7$<7%˭t?gK5,,3W)jb-j^\9ݠn)50Aԭ&2("3*}cܢn/eElu|IENDB`genometools-1.5.1/www/genometools.org/htdocs/images/dataflow.svg000066400000000000000000003572611211610345200251020ustar00rootroot00000000000000 image/svg+xml FeatureStream FeatureIndex GenomeNode annotation DAG Diagram Track Line Featureselectionphase Layoutphase Renderingphase Canvas Graphics import into efficientlysearchable structure query for features in region collapsing callbacks in Canvas visitor render each component draw primitives using specific backend (e.g. Cairo) GFF3 parserC programLua scriptRuby scriptPython script PNGdata PSdata PDFdata SVGdata IntervalTree ImageInfo CustomTrack Block Block Block Block ... Layout compact layout ofnon-overlapping blocks cairo t genometools-1.5.1/www/genometools.org/htdocs/images/diagram.pdf000066400000000000000000002132311211610345200246430ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 4 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 0 0 1358.270264 591.233643 ] /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> stream xĽK5_ R7l7 7 iFƭjx߃ `b҃H__}QlWOo__Q?V3AgS~Cg x:oO\uk?_vڵ)qG+>Wk @;&c6lѹ9,!1;@uRjc]b?/v1g{߻]Pl~dc'gmG 7t΃Ӻvv)I&d.z9خ7"(dzvi5Xɽ'7vGш~y p. |g|ޣT2j0o}*%zu_q^GIMm*HHw= 37}}d:g98e !y󈸇A}0zy Z.$5a|4JWi;Gob4ָ}>[B~ $~~8?LN+W!#?t۟lvSR ܡ AS*>W Ӳ} )uQji( < ў$iA:yˍs7m`noM;ͪ3sݱk'&M'" 7o:vn D%r߀$ݶp۷yEmz#.W~10kka7Lf2rouLz~%MH2Pf {6-v;8譌оOzK1,1&=? !ܥPn03Х喊ހPt$ OVWf2О:\0ЀLz'pɕUjd .}០c \h@ X!EO@ob^ 70Xdo۵2{}-qQ@A;@A[s@o; 3Є$ŏ9(>A>iO /~?i[.C_&TƹO/3@9(8N6. @m`*L mP3}㐟}J~o:h1KGh[yz࣭?KH*5N;䦋; o⹞!mلL'%0oKf.n|j+9m37>&#[?F4 U8ߠ⣫ p,\v E,Þc[lG}lvX6o1ls^cVC07x ?M@}͛̄MFWZ"VnuNh6 DwXd_/4Q6J>ΔF'o5yYgHZ>d#?qjyTis)]lq|͛ҭ_c~4ܶˍPa8,^eL:E +wfUS kn9>9ڹ>9q!(&4Ҡnl%XI]vD}f' utn4rh~oA<};w+q#Y~SK#k q!OŇn> >'NG)t4#d5ZmةȈǟpoU&%;>zgq~<%](r_ޕ'#S@ysr* w tѺez{D oM7~vߜk[΂McJu,{ѵ>)ӘgoM:__s< [__ gk o S;]˸Oݿ}Il7/?O䟴l']~ ?i/a1K߻ωۗ5*׹zkY~'֞w1Le"[Jk9 {_&OZ+@$w1L.e"{mz a'OZU9c {_&OZ)?!/r\i(vnheOg-oU\Bf8/sgŻf/Q઺XOFYP<9DŽŹ]FQƩXțU_֡rw˙@:4n`yLN>\Gg!+S7ROnc!}tm7ȔAֱ[W_}lb7/szVP:-? '} KO~Xsx x,E|!@c`MD}Xhɓ&c+z2jrq}b]=@0M1rތk$6n7(i9d')B@*r X \!T )Ɇ[UW"M0XM dRFցɩ|CЮIrw'bnR;Iץ [#] ki`%1޶>8L-R PP&ۓD[P}cmWΛP`>`dK1)eضvL½WdIZLr]y(X3Iu@$m3PR_k>FցKlVo4+o\_RRx!8=DV2LTC _՛Nea?s|)ԚωL= Ưm#M [ӃYD fgogu_!iXFJ}ToJB@0 ʋf3PTŪ$IP'BQ)æ@`sm-g-kγC:vrKKSN0gSu$\ .@W2[Q } fG>dg"L!6څ | K1 @8}ėr.Gd5ܘJpؖ-n{ xrܐ<ֿ17%@'e /T]UMnvskU?6mfL_A^cQeڧCsclL0^ #b63]owUy%uHB>zP+73R&-^d,dM?&VI9;=@H[.;Vt'R!oFO3S2s7Dh[KrD.Lvd}3!ɞ-Fs!#;C  bwiq\ ˷4J7cV5OČc?@sQI+~`d |B{rxeyh@[1NeO|p(I(YefI7˔ BǾ-7Mܔ]x/Ljs`? ^+5\Vf"]dV_:"g BJ8OL xprJHD.laE,ZNNuV}K.uh-)<,xހu'T󏐸`,?mEn@awMr}Yp/aYL +}c|ԬvY 7hSD΁HH`, Vl)0SRl*o*꿗O7+egs&K\Ӝn06bG;8Ȱp[PsOD^`;\ V=!Bͬ1w[3}&~KLW3!!+! DM߰ǦHKL7Űple!0<\ 0-7D0[fRdͰ<$hv䖿4LHliW4+8 Y4^80YII˶yz(Xٱ͔!?Cl@D5Iq*m2Cm/VP|L?nk`5!AówHę>8C!+g)WtQ)q`;Lu|.t;m##Az\7 :~!lksSs3]Q73+ K^dM솉;~=qFJkRĻBn\D1yž6_b]p *6Pm(/qߛ蛘0Y#."Gs|d%L]%+Qw=! {3՞"y5 qF?_35=SQL ׄ 2sxg(O'>خu`SkvF d`0ImӦz1΅&aY۸ ݕFTa8ffI7ta9us4=U [̎F&/ SYrd1`a&f4n3 g14`8 6V#a+],1?i2Llc@4TZ 40b3~fX3 T :FӞf.ϒ;'=0oTԫȫ2f Bpa4à5ab3 [W3 7f"pf*OftU{2f <5l8֦&cs$/ITw  30dd^D}ᅿ{c봓LH\iy[׿SCY$bыVVі97պw͜ckk[ 3}J_Ÿ }}NR6g"V(p0U>:Ԭsj/om\Մr]C mXA,^q**TWVtY4]xIdTW͒L&N}u-7VQc&yPXiTX{. +{Sa-hHl nw@;*n Jlld]gi7}Q7$StV`<碲RYc2W2uy`7rjƊnMǟærJ?26Dq25v mm>h?}*"WݧH6F`ײ{>h/viτg*>+Hv@g}@KH7d`T}gR>D"{%RѬGlB26ő2CgG- Iȓ 8;䀶.O)GQ, Vqغm}ĩΏ>MHO8G"S9IمrdcǴY(OvҤ IR昸{"ˆĦ,ي}jQ P)g,ș$aR/eߴsI̞h‰QGj-n$;sZ^aA %A2IvClNb0r2Ȕ"L<&5Em~{B_G&$UV?A÷=+ fMEh-/?Zs7KϿwO߄HA(5]pk#@׌p}KJp#ڑo\t'$q?X٥ n4Ɗ^|˥ H$.QU7]. X ;puwKuؙwa <ؖn[p;. E;R#5Tm D16TytQT!A*js~a¶X?Y]}S?uIIo[J:]+uZbS4J1Q,)֨I9-gE}#wlY`ڮS' n(D7W6Xbh,_k3>6 + ьdӍC:_v5vvLM^WaDl3\86D#w_u,vHr5 !hiӆhT*9sӰS~4b,dq3Љ̴C7%>b ķGЭg؆ ;tc*D4D%[&ǴsҞ=BO!9sXL,1ӵ4DHKtn Ѡhq3Bl>UnhbnW,mn[b;th$w4bZ9b;ݖ9vh!:?EҿmٴC7V{:zp]\f_H֗ 6$|{Ӟ8G* B5,eeQBR實[翝N/3>|B=}uβK7_ߞlo+6qzDf#n @|a Gלb1 69"s*j"T\f|HQ9FғXIl -9!JdF2ҫ3h9HRpX>"W2*zhN@)UlWk ^ 8LLEzuu4rW Wz}Gz5i4}Mjع]qtעjo,FYe;W鑓jc-і T+[Ie_PPVswyBV2!Sճ$9!ʭ^`n`a,b?KR{YHDHND =q-܍ yoO!e|<洶hOA@P~̾~ ep \0f®r۠B-Jy} aC|^^ U,'UVw:v0B}lj%#bo$.Ŋ?-ޗ^wNd𺛿%Q6 ce Juxz0\>(`DH`i$Gy {^!ެWnqvJ;4 Aj1iq#?:#Z㚔 9? @5Xf&܍S YuINBD5;;gPo{hǹLgJ߄+wZK'HL-{5տ8>ɫMȌir/3̧inԾٱM(b"eL1dFSҐ$8t']Šxe6O|[IP?/%TJ$%#'BKY0kG^y /=o|  G>r@% : +~/ͿuY]1KvB|Jd>/W)tIFfKu@|&0oi֛+KL"1Ie ? 6 7;sGB+U9H317@T޴qs.r;tk6{32bf_}Ii+u\&v\~?wxXxb\b_-o;/gWj+%ޟ7h$Bl2.ӏId4 _Mx}#ky^ ddNy%8K6OnzD핥C哖Fko->,0vFB5`ķ삗$o|/Gӈi+^X-fbDU\3F#ٹy^ P%(j~WLH7C&D:!p^W-ĚDL=Ly١@]hEܢ#"̬Š53%Wz 4 D}a鲛7q: ]qN'fO˜z/| 8b/o:t41sx& xFxD1z%I:rl, myAzfJu}ң̙oErYQ 4ݜpi3.2N~}C­AUWCNו|\o26) pB˜HҶ*]@8x:PMdZKnI85Ǔ:lFMǑNPH2U5W0;ƒ0YzGO8R./Asjef)2E) ƨq$F6^ IAЎEr »×mɖ@s>|ِ,/_ܚE+(¤(eGdCv$ _/oL>~ %9 c= L!#ڲy j`ٱ4 @+KIRDQx(#;NF~(yÒUru(9^ȑ(++;DG~lS(;Gtߘ^~!as7ڔYuò[Mm=e~>vST),>|!T&A79miJD[eD!*-COUt!cEe,T3fNRG{RߵXE% >jS_4bVy% :[Q { =L,F$Zl*C)!%Z m7B$e^|{?7~p@?2ubZ~>i-Pl Ԩ2Fd1?*J 2Rh x@䋝&LH(Xv&M1ZT (x,`0@?|y"酞jw |LnZXjvpn}O< 5ޯGzwI,9fR'%,)fuz^_71fy#*PȇF#*J7h )WYE1/P@R ᴷ) _PZD*{S?$/z<Alӽ,_\ɖF̢~5% g; !IcD$l}J* yqahWCX/,Jh_j 4"XL7$nSe)Mf (zd=gx lu-;\W''ʔw3/ZD,(,^Ȑ X \Je$?ed "EqH"J7[*mE!5SA𲶟t\?f0%z ?C=~yJ1 ,ՄjbnI3'^ pIJxP1ko2Py.hy.^sqT_|ACɻNS?TXG jqt(~ԅy6M<͋r+t O CT2rb9*7͌˕=3lhp?#LԌ鱟H}Qf:Nxº| } Bڢ3A? 䢡G?C9i Ck/>7^;ut*T7dDz>h~d蠩:5BZ=<wd/XTv] ǼI!C ڥ&r1|:/~8{!=fp!JA^aSn-6]M&3䵷VTH)ש>?IiJׄWIG؟*Zo,jx%6법d$E%AM/)47IUPED[%SxU)e]c.^Uf1zfg6c'3Dmd7?a,WN.C2J.C1*(U]0T D!%^4N1TZv֠[ZO*<uXY\K]id@Y@d<ðZl\GRYV MX XD'h^R[Cj$fY΢xqՃU.vA5Ш&q؇bG[4pXtQ5w*tQ+àj\&/.NQRpcw$D0 aݿXLAccOo.X!^"Qa9DiۮT/ ݨL߆am>0hX{i \Ny!#4ۻ.L eeLC<e%|$`KѝEaT5[hz5oYΕ,U<95'at$F:7 __"B෗5=@A(DA%*&6V%e}lwkȰ3P]fs6!IU^<ΤruQl%/9Pϓf8 ٶ;K pPrԹɂ|E%o"aڦkV>rf>OQQdg"K& ,7pY rz>@ E*8<)Isg~r1:~3E=px'a Q?<&N"~DNh;L䞴T6=-LjͶ+[/gؤ4͔yC{i ]r}^0XoIdLh^B={V,n9MJy.(e}*vs  e-.۬%2] t@'vwn;!&9レǰ1*JsZ̧dblOZ HJBk!WPS-I4˹쵧;A %>8.'nYG{hBbh:xT11NNUCssjN@(hۙް vXX壆{cbPm"qѶtaA>SY\Y>V@`0 zQ%fs{A,5BA&:cnmG>"ow;+rkÉnm>w<-c߾׿|xfq/fj;s' =Dޢ>7@R7|@c.G]P5D`43m`R?sF N< O=&: 3cYY@&Ƽe[A?> x]׌TB0;oF@ 7T眠էrOY@椓9Aw{M@"g),mEqkHڶNGosU;qܠ9fb0ƚ8tr4߷mѿaY@ #f$;5#C4zt2޸Ny#c[.$OG4#H~Eig%ELwS+$:aw|q|uąd?~ػYǛ0ep?yf;V9]BIG\lS|0/%2"D # S;|:ZV+[A nP9F \R:sنL8nnM;n#6E]Bfx< {;?Orߑְ'B+nHsPuvoA@C10߀pEAI[NwKFYM]ܠfXWW g+y%B/pǸsaSE}_kܺՙ@􅆶MZ^9l+(Su*LHWoZqg5Eį0л[gY ׆,7 P/54о/f*m/lf/Y?LBc m7`F9<w#:zX)2pD ;(籛#:*4ސ1S,( K, 2H0R a+HpA8`ԼHA.Wҝ̦`A΢hAQEв( e&uQq:Ev۹}Zܠq0ii/c)tPT4X2$Z@~=fL rt&̠~$D8=@itlf"~̰6Έ#| )НYFj [ueRd!";[%Ld++&M$6at5pEX::ܳtkVCVdL+Si; 0zj}k/yz;Q y@O0Pzj,uhl_D+Ȍm"ܐaeҖxr8ͷcEހә4)G"Ia8e 1 ;|" 8K\%) )PSvn>|*t."m$™~~$ֻT9Ӫ|&"щ^ dRG+_* Q:kX'Ÿ7tE"ހFHP81' 瘐nqu?|D#ُ'tU *;EC$AsCWVL@ApVAO9Iv~x|EiEH>L7^L~ƯXdFk7 ceOʎqJ _P=pNx  ;1'@,}ev3R=|&5V|۫e?1ֺʍ~X+Rqj~VPIUűRaSEWPXg2@Ӑ6O hs0&{6"ٛ}43e%!@tcyy_z[CA7t rud#ͥAyu&XtL@.l&v=yޖY/~h` ir n>MO`]at9V8px^4OL6 Zq*3aޗTWt\R쥛LHDgTOawQ=82:tQpzFRW5n":z xo $e`CN{@|\:}=ES )G Մԕ>])vߝT:.3&]65߄nC!(2K @,"X1/u).e!;Y7 rEGBJ<'K5$Q=Y9H3at{o;3ŹnR0 Df8Rycd1Q&pH&^IL}44 pj {gMbf@S1~{rƪg6NRuu#$0l7AU R{.mµ/_,xJo8¢k)8d{9ZA!I;g1rcnۏĈ@ⲙ QM@2~u"0X-Jtߕ~V]q.] ;_Mo*<K)GinĢ@BXXzGS= O1hڴ}+N6+r[6Mhpi4~1i{Q*]B%㰛~9]j&gSȠ.?3'OTa4 $ڴ9L}lu?&}¼C(9xlΪ  EAܧ^ ^gpqȸ z bszGaO&ѦG"TR>f{ 4?|U)=YQjqN}k?H؇U'j꺨 p`.3/&Ĝ>~w~+^ig龇M\ ;pB$(Ő ~ALIϭŃhS*^k~#V{:*29hv49h %>bߩlS9/&^oGÙ`G"4Y8讙4 ݦu4O8=. R8RoSZSt7AB8oZ!@u͘S=ۧ8=;S?G˃v|GRt2A?xC SD{ <@}LyA|qy\\ʮWwIdBCD|^q_wmop晊qڨmtPZ'Ջm] Cln:އ=0о PCib&1gaB1M< x㋟x𕴓 ;G^R+kqY/ 'P3MqЫүmnK"Nö}\{^hۼ6mQx7!;X0Ɩ "n3ǚ0G*YVFf--fڕ~WvG'2wQ033bPZasdb6ph0xd]McmuMxI=yc!BwrD]FDQM&E,hˎ9}RT]GBJLOߦ$'eNJnIA0Gq&?;MP rˮj"ڗ-,2< mz6BVꘐM0&Ⰽl٥R!b4p~3GB`@dO1SQQ mgI b+ gk8m aPW8P,ecS_,R, Β~}QxIj@#@C ÁStIG*:"ڼV;#h cS PGMqlV'ZG(#MV+DAl!ckh3"n*8XjcOX"[m~2!UE:"*c%1Svv{I^|8ih*j"':&Ubi2*VՉ>4[M(Lc_y&Dj"Tf'V>RQ,{9@׹Z kH%+*)CQ18zvtJ 2 W\Dҵ5i(G$6R{I rֵ)hs4gi5q%15ukU]ıHIN&!Msm:b=qA[sϘK;zSiA  ؊] !)]!f.3AI"oYt׮i}oJDt˪2WOps`O^{^5GQ1&Uq,mE}SUqf 6Y3 U'mfF(tW\) fTІ0jME%IU6zΙծN8a=sM-_vV:x.eBgze<~*ץ! ܞղH$t%:'mY.vYTV/ׄ r}7|VyS:p5qM[1+EZzBg]蔫sB{#ku=( … 3;9ѾR5db#0rDicn+wꗥ\Q(󪠢e oDErv|ȅi$^\IwrUTA6ʗD gw#!d畵q5Jt|u ygbD+⫩`-7UpOY7OBe=$q[Mޡ^wGTBwBjI2oH.űsl~.t\\壧Ds}Y>ݱU~l^e̅=<&hP>;To4ҽY d~*c] 'M2$la,!%+Dy>ުr)xG%VKssY=CqbNQ3!Eu8=!u aɥOIg^QVĢ|ĩdsIhIOT0ځ[;E}PS-ɢPdcjFe5R c%L+_xxmĺM&#DuE1v9VV * IJ>BEy:dqJs}IAr`ND*uew+rGyY u^ b%n^ HxUE]%$]hCU%6G-u|,Z}JӉ@W2ґ&ogu +xb}Pu$ Dok翝UU+ y DPt a53P V=[Jz(*",U+A՝Ur38l ,Z\-!Ct]]>92 0IyJZ .%ko{90FIHӳȨJCASUʪu9Dbo}JzTmm 1ĚF(CT(Ўf=< G!v B^tPtEEݮ D4nF?(9pP'5ظ*QDĹQ]ӡQ+P͐A}ǫ|N2.ƀM%*5[FD۩Y:T.):ڜk\YgLBO@*vǬ,s!-UW'ƅM*Qj`;,iT}8|?o9.ƘJfS>CwZf eVH-_Z&*nle2Q$ejKUl 6]-Re25E 1+uLtY11j=WIq˻ԩSY.EW1o2fJ1) +tlO3@c cbZuL#S* &_VL4/no pܢcuAqd>QޔS HL?wgbTS-YՂ!2ՂaڊfUPĢh \cj8)W[4MS|Y4_c__e0I<YUEmQ-w\@xfXg)9M(>=Nsă:4EGӲ$=E:UNv!Rp:qJLJ[I@|VD5 Q8EVZ)I.SEU:Y:MP,{{1ᯯ aݏҰΔn7}_eW5u cuP_?ʂĮʻnyqESnpXAEVsNtw ]{Xm%~M ўNaizxP5Q>״,ѤT 9U\"/wHZVdþEs ӏg3;u6;Yr  Sg;=tE1o[qy3,7O̻f4,.)]oe1qJ ^iUk[O6=(O\XvfÑTW\m{dۗp4A!ay|"$c[@mTJzu۫m}b$iQjJmZ&jgb\^2mbg*%Ӱ0.JQibV] 62+0tDogWz*<:8l|*@` @\Ld'rIP =̣m2ЉW(4|br-ӝ}lH! km@$cw%/|\NNCz눟s^z2Ѿ-M?>bei@CR'|c04m;hS?j֏XRp|G۠lA7̿ xi5 H 0I`}NY?[ y+_k^}i]v1yz#Rͼ =T@e875eEK$[ZMmiyHH6C!@a|26> y q.>Vadl\lH1lV$i{b{H\fd[v<2AI_fJ5c4=\Š(3{<sf"ioVIiMxpiJk}LV勐ڊ!J8Ύas5[sh~,uHvQm-[[˖W2՝Kͅ^?,hئƛ+G8bA0T]k*{J|GuAs`^I8OJzk3z zk[_ǣ[V.F[6|]z'A6u=&q4%|/PU|@*1==?4[_? Ic8?@ÇOuƳχ/>}d/') ?D"{%R98=7 ϟ]IHe) PHA>x5JWf_XhS2`OvJm֊G|2W{7+][Ld >r44ResA;i'FFwhaϾ5 1=/SN|%2O" ՛[= i@3G`w"}"|S,ӹQaF]sL anLU' s ]U 0a5Fi{=8@h[k{t~5a>7ے}ni?je~ ڣslO}:>hNi;{4G7-5"\ה 5?=hAYmHlNan9Z* 75{y>oDi@F Շwȼh1_JȔvǚ7vk>W~'!)WSw| " V2XUxkFET7KnO8pϱz:/gw&~OJ\ 0bל)9psIОCdI?r*RMeFBc*cjOe3Ho/dZ(Ϻ"Rթɝ#&9pQ^5oCϪcyzF7~OC M0܇$)oIoRHHnpTҠf 8T>`D24!aWкx,;owкO =\00= &A A OHxC۾ z:PZUݮTVDy!^H͈G4NP!įɨv X~I$4 s; )*>$pk2nA0?u[ ͞؆݀ؐe(Uܸ?'J)J@Mؐt#;x!WH!o!yy*Sj@hԠSѵ_a?UDIR/p\͑P(XV ^==> NRwх(g]<'Q^)~!78X20e-БO2(|ŚxqН_9)p<%<=A_ˈo(x(3@p`O%.ΨOat; ¡'Imj۶ ѹM&W;N# %Ɂpt{%M[VJ7KH|A}OoHx􌎌HsU L)xwMuȏ`؏)r]0P?y.Vw^k;=rx]pHebKgH%=}mBܜ@乡no3>(e=`8K۞ *~A)EHMeQZ&Pt'{Crjȃ?SYh u%:&*~h=bAWQUDFϹ0^ eKȀL蓂vi\8e:fʴ*?gkĦ@`\oI>3퉒H~-,P%zi1[<{Q6 [%1<$cZB&:gxl]{DN5Ud38c$0ECt)}߀?1 caħq~(+_P`S:ET+o0uC "o;QYWS'v!6d/i|jL*[J3Q3:i<#JӠ(foEٜb{ oN!"7%8ID]e'?vIEĢ (=&8P,ᕔ"JKF Vz,LLEE.WcPYfeB2qZtu*ǮNtqS0kƋ,J~>P靟;>WaPrP5β2"OAaSe\$@Ӣx͉hPʵҝu"F^6zGoiYc5%yOJ)z9Op64%5sR%qrs%y~ݔoī\$<)M 'W2JH;a^APvF4l 3 k$Nw HE8zPz%טHQw8y٦]٫MMe%+: V*]#2[/脑[>ccB &QVHpFj}[s eH!NaOmPX(h~~[upZȑe&W;ӫ[狞d[-7娴. y1 m9DZWKI}Z[,ey^6oT6낤Gfxj2@A#Ǥ _,U𖂾џ6iDoJ:i5b=5,mD^>Jj `#oi-Z[V|8Y5-A9qW< (P̳t[*\gO++gRL͞&@Ζ4Ӹ" )Yy [ϚQC'G:>R`u"h#k~|Lih_onÞ?[8#"qy!Ld` C/G'ukryFCƦ4p7wĵ/tӾb}ZA9|tD"Sq-oQ@,1r2f9*2b.g3!bXAqjT~{`}mʊU_( _D֥paWT!c(i1: J'`063( !(^@=+OX#lxx-_5zS@,` yNtW' >DƘ,<;"(+:|m#yprZDm.WcWH#P NxO%} TrM>k7b)7*)yZaix /)ֽG(5$߈}Yt(w_AӼߕWiӗwtײUPp-uw f">Ǜ=N*ʖI8t&dĆƋW*ng<;= %|~? ۫(QF.`3QdXQL)Y s*]D]I:(ǔ?r=5NG>qN8xDx.a5ָ;.;i$'e.f(Q(XCWQu gUН[E(3b, y]JrNY͗r>E3CDnjQ2ޙՃ.[H=˔;{Ol6r:SnӟՍsFb4O0յMU6dtcM4Ju^3/H+ u79y?OoD! 6}*b/ E]4FR-P Sl YádC ")r${x $TECC5¬]!IÔcRBB Q+aj;J&e(EAWZMɃ惕ovV nzx&{S<"uWF/ uy%vɇ}{nЕ7o5'%JrKR=$^)| m$UH]#" Ɔ] A[# ;/]<>|ȕ ]hpB(h΄Gӵ`Y] Q\SZ '-{ck;'U2<1Wcr q#sWٹI[r,qwyPxRA`˾ "9+U${K ?PR.+:jI p=MЏ`쮛.Cy]y_u* l]75zq滛n{$Wk/1sck> ֵ`2FyE0-މ`[b#wb)w"B[ͤʟϣzˑw{ѓvbJþI9-gԚVkC 9C5a=|&8ތiºM$WD+3oʾl|P]Dw%Q.4<GhTO!G^dr~40 %GXF($ѹߴ]EMLA4D"~yFn嚝M{7r7P||u,ҵۭw+!ŗS|Sp$]t_lqK?,\>ǼC^yݝdZDOOrbH93>SC&L3Tf Q!ц\z4nD⭳͗1dHf9T$&|3MjS|ڏJGUFCmcsEEYybekIU%goh0u;ozY7ɿd=]BuftlnEZ=7 GI.k8vsuJ^7X\+.Ms.)UN;fN|+G$/cAġ\jx3>m{n˓h0 B򮙖a_#YCxg֏z"~n|+y/H(r;>o *AXΌ#)_yoqzr)L`z7h5nroKJtլ'(i<;_gK2>)<ԘQ p%yTy^Yw eX5ݸ i f՗c_ 8T9!ј;3 TgoI~:szu=I3Hu͜9!k\e흁3d e | !9CDO<'9by|xϟG<;7,[BOr p9W?OpJ\:;<Y'ן3_a su0쿗ciH\]?`_:pG#ךjf:þX㛉azi$ d2eA Rx@FDTN0숺IvZ;bjMhg`"LY@B{W']a#0kNND h( Xiq5^z(CYh͆Wy#n=1a ػa`oK }Մ8Tq;BE`pYa҉1> [&\oN\7<;}ȯ W8F|"z[ \o׻fpxU \"\oPh\o6pU:$7WpWμc]c \o.?FXP`xʰ *].~z( a zW+ݸ uҁr1).G+^E^p}ozׄwR2l0v4znWwώ̾RkQF+ i7k#v3ͨEr5r57A&o\ 5^b k7[ŕ(C EFRכ?Z+J42sgכp9#3>(|XbtzVF"H`c8E+،xvoi4BvihX1QAxF`h-8a>/Ij6@Ng Dιqj@x%Z"mk ėϕst#\Kϕ:fda}][ K梄ug΢-%bы"l~ٱZMz|b 9v~tXY~12!FYA ɞ.R ċJUa{WE y31 @!~MrC#nE00cdgj^O Q|~]6֕qVII,011Ɍp޽H-|o:A tI{%(Y馐M!ĺvVɳ90ɘJ9ON+%4|݅&pr ThE%ŠO #/qOF7*6I8<U0gӀ.J|qu»q77AmI|kI έ-ƮM{c ך>^s^)`A9 |;`||MPנsk, 8 )\v`Q01曃 ܙ!J@ 4~Xr # <C!k#B~b7 NC|gwcTBj#[mr; w.מ@!PR"oT Brōf@|{صJtkMyرy@iTOn:{NpO={nی,LhPcM Z*rȒIBP;v6ٍ̀~R~(S_\R7e5]Hr+zt'yF\NZ*|oP6)⯞@{B9n[YK(+&9{W 6x:!hꤡlker8=LLi{Hum*{ 3FB VT#F39GR(b|oK P8r]6l\s7%`DVӗ,B6'ފH.k#`!}DF*7 $xog@2eI8$&]|V7 .> Bw$ȅ*0uXQbl Bl|MLQ ?~!7[nv5w.[{a[G< %toqup+tot#G.jUK*⚹͟\C+\:Y\`ylU e #(a$8& ‡F"H%@r\qHKm$a$rQ|U̲=e"m4ЪT0(ٮi#O e#m|! U6"(T}P*5)YiXlI0gz#؉#12%LE:NvONf;q:,AGE4[AVى/Q={+C.pu=$ן}|YךdRX\cKKu| /LU,K\iǃOBjtbV!-I#.a3/zi#0q+;<铣z=1 e/L_^fyGPbQC$OwsF2YF0vHOz&X?.u_"}VLj@H_DVk]o|id_"w0jirM*6]`eAh2+i#q.E,Ժ=L%"e/l* 1R#J k+E(*S~e Ћ\֋^P&D1ţ/*>52\H^nH I'=7GKWуB `+.W/|aL;k7 ʑ>KbOQ>G9_˽A9bɝo0 0BԼ)^ٰ-iPTf(dADx:ճ-黡mi|!>gEO߶ؑGLK iVã]\0̕rF53R|rHJ4%ѽ8>;\}}_#\Hg@U@W &W#Ħ @ӠDu{n?'W+ᔋK' x^0g7Atй.&D_\tv[vY teǻ?cbrHA͎2mˇ?80}??#}śg~[z s IzcAGt~sgMtC'<]h-H'!8YCwȏao͠piA 0[XzațF9pwЁeK>R] N(j oteU\UԦVD.B\$AҪA| K 2Y݈@)A?{Gj1pKKW9'.}F\!ꦐk$.*^,RjzFm83 h܀-%_黭l{2\1}᭜~8>Rn߃q>Hh앒ooHqb^o\ t001Hf.ˢ(o*1ls( : f Uto;^>IӋ>n荳'`@hyrx TSrA&?p/ݸBuե'>gypҸ9/.Ǵoκªr͏(5&)]}SEB>0d$ Èr}EٽA./՘)74|'%4E* i8"rw;RF9`f ˯NU^8 ><e<(2O i'^䞫(8Eq->'J87:4N0l hpڿ#1PT;ݳR(Jɜ 6w[N0LFUIJ\L3}`@8.QpBIʼoU>e2LxEIゾDgӏ3\tFGҨ,~P"eAr|= 0.N(AQKQ.AA(ύq ?p4nߏDԧGf8oWvBKqV Rj:<`9gSO/)vS?p>B L~%p~b~ߒn3EsxFX(+ho>Z(8}m6A KB&r7 KѾ]w6/}Os0" u59<*觪Q:b_<&i =^ڛf05?TTkLT7Tec ,( gپHt@yu6Ui7"["Io8E IJ+j;ed4V ER?i$E SK F0uGXS5*`b)F[dwg# NkMI$Ȭ,+i6q x )aw dtsmhrKcH?P$ESDz(H>NY/( A( Io[) dk =$L^e\  qT_WU "R6{>ѪTCNh+. -+Vf:ܦ1\Z$Dfx|S Y@R -> a j[PMnԛ+zB *isg;q/^gx<AR*ȶa^6zv]_e`ŬNQS7?=+nn!cޝp$ٝ@tx)vN^$zѫ,mWJPHpt8#Qf(I a"E_=䳠(V`Q(rD5o1om/.fz'{Iq8}hVUca8u\'{SNp Tk`zo."3"=ʙX}´*ؚʪ"N_|QA oU PW.m'㞰}g!Ugjg7Q"4!8ί!5"'R\FIB@HA}r'|)VwZ|랐Rf@P"Id#!}( >JesrYYxb[=V ukEЈvmd/a|7ҮmVTphXn\ ̔YcH> men##B$T $6pM[]3M[إ\ƮVf{P5pNlEŪѤj欬i_K՘jsTMk࢘^5I<+x ]H1O>OfpR5%IK!$AGj6jVLi ={P5Hz;..=#Bp&ƤjrI1Iմݾj&:e${cZ4 o)-^;g=-vCHӴzMK-fUÍi~vNJtX#ޖYţ}4k9=/?V $U_HSҶZQ^V~!wxJNҜpDJK1!k<7} w™YfCcrr"o cV>* 91uޞUƤg[}cLB~=Ak=|/ A8%D:< m`jod~".+ KiUkﴄД_t85ֿ&[q#8ЖrVN+ Kz&aҺK[JOxVEr֛N_4iZ[Ϟ9|XavRYOO{. 1t*~Y W8cYoԷZBh; !0Z5:RfHL&X.zoM ÛHGRdXG>G;픭,/LLz[e]o#ԯ6$ @B:uSO+*#[AEm`ӊh-e>),Չm*ȏ|L=y$hM׭ vwArxj]dl6Vaݽh˧vYyqjO{̛,P0vrHΰNjS#~%´N?{Ub檩 ôP"|OnI!ø[iriģEtB։.k)i#՝/3;N=NºK̉.wѫu7`N$ئd:tCK ਉCcIREGRNO2G] !!.I:ɓ9Qe/HVw8+4@QU&kg[ޛ۪}=l>"aP4蹚˖w9b^vֆfH ( Z&6iN'Lt! 41B9!)Tx 9 )Pְ 1\b@I2PU|&)? =ћI{ Gh䛥$Xsp\cIg"n*#ﴮCI8';ah9}oid pn^wcIh~'Z]ja"4_{W%!+‹[˒>v\=̬ Nc>KtH]zw-V3|G.ikp$0I{.q`ț80Ktѝ%a 0Óe qXݽ@AJܕQi_nQEʝ ?-~wA)뛝q8bv1HLB9r6DJ?#VĤtce& ʗ}._@'66Tܕ*;C4W':t[5ZPq$ KW8gn~*$v.66#x"M}l/r&f83]WȻHWtvg_3ΘfG DmRnk,fW1¹ٳ^gϹT"OKHk/X"H:Qk1 Lְ`zaQq2։hW%v-φn}\qq7:Mqos۞121s# 9Iotu Lҽ?ʱy%ooFnWˋ>$Ig"NHjʨd 4}"ꑲφIez azt0~F=\O5_`~y+鎘9&.0xLs"I=r?\ӖU('~̮p"Y65k8a$X,Ij+|U$7L e~ټ;Ͷoi۪>Iy=@igi"C5YY^nk!$=QlFz|c7u3EgPNsۀc<>/CCy;Vi,-3Cp:bL[$5|o 4k]=ޞA @e7W`-3[f3HN}`~X 9h;c~{uާM$B>yV2z@VTw{="ZL^I(ߍHƨg=}Ȭh lT>93(qGgJ$-MOA{ٞݒgkOFZQzsF_fY*e߉%1 ;mϫ]X;AI!'B$(nGH)]Jbe"4q[@eH0> p r*ʣdb +3P 2c !bpk(VWI"|׃DnB`H S9ErR&ӝdr dr2߂T2IJ&xFbAW]dwr|VRkS&"u[FV])XM[tپaY s7)fMgi<| nwtgXdPFܹ?c>)S"yW=}o.?q99W>A&qo6|' N >%NbN$'y?yh8 Ďgo 8̀w<J:9uRxm{f 4ڃyD&vgeoH 63`78ZXrybeı=vYxB6'#2t6BxDz1np4=|M 3 T5`<ϵ? }tDdU~,2W_&F=Gm8mfwT0/ XVxJy&i†3 a^"x9//J?XIg25%z<(.另/|ˈ~#揦/Kb41gή{i;M2gyS ʭH2eqX9ݗ}M 1#nYǿ \??8 WهɆ_[?\b|{7_iqOߴh0р l;Wͱw*DR6wȔXQޭH{{sb|6w7@q>JпOۛu|' z={P<?W:zӛmQ(Ҷ Q귏үe<nPOwY2kPF??X 3߶ȩE8; 4()'#;gAKS@|*b'ѫFj94F=91dj!}FGs-u=?( RQw۔e,ț ލ}GP )h*epBcnd }8*ŲK߰'N6cHm셖WPG8 bI8q`墘(O4"٭ky;Nr|9>-K+c?(@n]Ё@Ƣv; 80 $2\rPf tUߴHn=u!v 2Ś]L\[+(SzOUA5/ݍf:U+J1pk\T^bI_nE.v[= z /iG8pYJ2򲡼HQ ~@v2A,I'Kvrne Or{paĨq?&a%:×~WycHLTzj~ 'ÛЯ" 1b\닍blr ׁkB*n" koE96f& ;I矫fim<)U-AmvVbOX@3Wps0 "|~<plX^$)`xK)e C$P"Z"p,kN')8^ rZq2}Xf; [.c₨A&_ wW3fe*o/Rwh"3Ur5I'>J|9 ebC LAdnX׼;JpjxZ2d*dg5pPD,fym͛4AR遂3`-<;f}@ȳ)o((``P vS'8rP/u2W]JrhwqJ#06SFFhal]F /;i (TB0T,J*Ul[4l;WʡnT"yxv|~ķR'SW|/*q5rorTBRh5.ެ4{@%96KPS'U\K'ous& M@۩L:il_onvoɒa' %P CufxC:x"'u&? 4ɤQԡ-*h Ppn;v2t@Z |TB2b>ma([Du'?r h9Ůs)`@v⒀:G} Jan^f?h !$UA9C"8lbذ }/eCi~'msB xĽ#0.=XBPX=˛ނ+ږ* [X'Q nB- M37HK +0`( O!!!7 O:WBZשJq :\OX~ZHQGKi}vؐФ/Qƙs3>6[a$`:Dd,G(\wi%6ͺ -.9թ#&$Pll &>%UkscHj!N"[h{4٨~/L@Ag?}ArIK7a Yz>dѵqUE ߥ X 'w=Q4f0IVU:Y\)P+Q:d"t)1~nҶo ]MŽDrÜٗk >04شp(3$s8z*(ZQyFEk Rvl-'%uZՄl, f/_i#=⦥ 7Zpg3kˑ;.7{#8wt-+,kWB:mƩN#nXg7Y0DPA玍hRƍ3hiV*@ZIên#UvF'y?Ko!/IL$2!$sP[P:0@X͸wdŇAlW#ϩ4BqUc ,B )?ho>7T !مlcckAqF í)^E789\ /6{-f .֦NHQNG6[YnmGY>\#!R"]3|ԠA SBIu.S˟`&\ӠBOa=RD66!4$:ht=I8c!̕<.AKCeZ>%EP&9WlN\Sۡ[$_KC-P(Hs]7Fd<$ӥS|T~eP/]37$َ۬whIԤnG.V6Py@Wze$ '"J0iLeY]8мiyϫz*nJ@VI/%??34ѯeNV9F1T5H0̋</Ñg* '݆845Bm!|Dw3Ka!6h$Vѫx>鄼~ 4]j$2ֻleIϪ$* x$vz0- W.\Ch} q35tV܍AlmIbqNHVD hnKo9 zWa"x/ x"KEo~M(];7ߜ]yV-8d{Zlq =^v :uX4(\tSGl@~䕇˷Oٰ|SjPnzJ$48臮 b?R*'閆jˇ4T_1N/xᆭKꝴڙ/:[xfbr^y5(!'^޹%wޮbT6=n)9JɗdUC:|jyĀlXA//QF>wdM{D2G@gRZ,2)x/-ySBl7"bl~PE\"mcOB]%Q~q8SuG|A*M6!e7qɫ{yq#Ѹ4O\N\yq;| W]u=l$%XoMr~Bb<=t  &^Z|Dʲ>(K/LI O]F} u*v,WWTc0o$>q'ޱOZ:9bA鄍*xQmsoB\d8sr̥3p3_̵qE̔v6cgAx5k' uZmAxɛM5Vol֯}Y}!_T{ۗnѩ}|+O,Ÿ3aZ<=)/|exH.vj$A;(J\[Niו;JT0nP)=v)3^ðg}- o;R *-?hD3/hΤ۪N tnhur/ ? /B[ Q]InAh4u.0V Uut_u961<`QYu9(7V8x b̫V? n_@|+BNRXUn4|[s*zr|To@=ɬҍwKd[>8!6F?x܇ؿ{]X /u(JA٘|Vp w}JIU7]zmxmmm R]^mJ)4$'FCBce졬n Q6&)j3bPo!>b% <4O0gŌEd ?7Ն F?eW>^ ԍ(72['F_LIUPF ,>ak%:sf'U wms #[͌ IOp{7Z^ LWrNui[ЛN@KHw9|$}egz.C+Z]f fH-{<>XЯ;ݮ^ot^\-\|MIE.ZoAkׄj"zNF;99O=AVVA8bcUf3lb'B/3ȩ՚lˇY= I Fkor<fW!nwbCyo72oSmr$%3g I} $C9\:˹q$#zKVlB*b^H~}y}ΕK b+sju~ =uq=*1p0c8I5h=2vY̥7۪2)&Z`n(,ޫ́fr~8,[|r$:eO)ri{Ė^^A(+BUdw̕!0RoW"\iEZD _3KIWJFfT7QcE$^3j~(fWRu?) RӜ $mԝ'SzS&!sA V?c L5*ZJ ޑd5Izgi%Y4ԘM `:HUσ zo#k;i\Hx75}7G37ԙ/?/|Cwsf Μ=3uf <$\C^cN:;%FVy[ַHYȊ\<'V8$btox3Ydz$=W=9n\8NC,܊X/0H?M,U+Uj7Eת^Gbjv 4 G}_emDͿ5+pϪ>?A49}97TGD?/nޮʟ`@VLчbr|<ÌV1tmWCEG*u PەQCt > Ix0bӄlӬ|o0iL  T\ߛFK$|(Ԙ®F3D/י Q6iQnI0}RqR6O\߆R5:% {ytڻ^$=!D D("gr@. >gX!DbQ,JLE8h!D܏SX!D j\q7p- Qn+!DQF Vq+i!DD nRͿ+Dj@[Z} teն%C9U >?voS!O -SLHP SdMiXD:-*Çe 2ʹR#BFBkT^]BQRdJ&iPIz(&z(7  8 <4H& 3ep7x(&QƏ-KX!3th߇D7v#> ء20vhjcOI=4CS!>B‡B0|h*N ?4ՁCS?t u):v|!P:㇦>08h,>:o]9݆>(\CC!~ ӒD'}0Q>0~h(Ç7zh)Z ءB0vh*cB0vv#qM衠,D 3{^>uv&:8gAPFŢt(E"gj%c@5O 2>U%$(CeZ ,?"u(Х /C_ x(=!FE[j%C0zj]ؠQ\~b &!i&^a:lqɁx- o! g J9qX6vZ,,[EwpkBe0|sΠ, OV5ħ[b'%/9lQЎG؇0D(L"a$-v_Iʀ!DX*6VYi Q*ћ{o1D.V]pK  k1D!w#1Ci<yPGکb;}#"8c Cfe?4!DKCtdYL "! !J!* }Dz+QWRVBQ 0Dﳰ; !oC4}`.+%@Ӕ*mhvY^~r֒(fPbWΪ?$ADٲD< s3U@ÛNaeC}$L(͵?9r}.8'ab9=3(YUl>DD#~+4]Ye8U7êӬ<". EeE(e+DQ,]j-C% EÔ H0uR4/ )F E%&(l*QZ^Aj R*J0 TqFj kچ/aPѼ2h}o*ZT#AE ѾLQj~|TVGPmР09s nTє6JV>(5GS _zp0(ojfHoIԗ EB+ ƩSu ECh͟( -7EAi#EY8L];68XAٍh͔1E~f 0thr.{ID,YY\)p˔(pQ NDqe࢔$F2(6i1PBD邈LGCS`Ʊ*EsemO[4ljТՏu?bJȢ[@Z4ihdc>x>e ZpMdQ*K4(0kP.&܄g[Q2hpQyd7aYW7莞آ%AcMBv{>龝V 0hءͩ?( Nh 2aW-Je(驎Gbb{*&jgP3kV l솱C8M袋{]tQN]{f.ytѬHF7N\Ff~/2l]DSERhVq_4d(xѼ(]!/ʁ&QIc%S(- `T{ph=&(H<aGb=v95Y0:M/Pa!eOѼ QگB(Ҏ {6E'6ET󮺞}:_zNዚ`8<|Q F{P|(r@|>PK\fí1JLڸyq<`(o `+] =?)t5@dQa;E=Gb.2gѸ Q.0F]5 h1<#.0F~iy/PC_wdJy<^FQ[X1۵0FGl.1FS1ZI$R1:SN۫J=̂G?aJN#14cMJbr7{cK`^ Q =` d4v^Ѡ$hhhC4dC?Uz&(o* 'hd2:x1h(XUaFy Ḯ8Ü«sz(z<e4$YOߙ~WZVʋt >,~+BD9U Wtgt!/ꨒjHT,Ѡ$(G?g4I%(ڶ(K q/>lg@=%,3:ImRRM~g4n g4(_tt۔qF5qFZLQ HѸ4 Qʌ&p-p8 nfQI5ADy< f~|L0Q00ft* 3JM̨]f4_ffԔE3joN EwDǜlhQ{ΨPBV8LzO$x8KdOQM4^qnfr$i7cJ cƫbW PvŢ!`~(5ܨM֛PaMV]m1֭>kiaYX? w˶vsdk:Zo: Z,of9px}/S'w $`_mb@!X+AT= %Fj7'ɨߐQTэCy_ 6sIˬ'I5w} / &D/rYf%Ayuϯr Ӱ3?1yo: D^*-JF*dD>kZFd|Ocn[Fd|gIZHᅥG F!hg}Znf2Y$U~B[`{ٍ78.Yak"u-VXĽu#q xFύ{ʫqw>rY8sV_({’,)ybtX1?kPUQS fe!}|^ս݋^ ؽM0 _"Gd3T,/Ma&g.S ) Fj=8N_zP.)9{C&{@g^ uneE)ƃ4t]{hdtK 6&^yN:iN I$ ɥi#~p5AtS9w?)g}{\{˔{mU;le$NB_& |hMIn RBm:'K FM)V;eʓ_Izރ_oO|e?f_f!%|)LBP(@;>%/zF4zYqoɺE _,o]FPNbhZ56,m{)fD _|],hs&_ ֈE'ݡYU8{&~/MvHMK&{smwZ/{(vb)<{ѶZknvfy\00uH|Ա~F.ޮ ה[}+ _dNh>ዱ-#K`o= pK0cL{_)q}P _oz> |`Xz%%o/  Su.Vs@wQXHrJ)hM0֏ z/ C΁KBJ N2o%pQ GsNe?Z` "yͅ?`|(teO0Ʒ4BZ%%~RP Z!P|S+oh@ `R AP(7tQ|K%uB _:P|K'B Rr(  wںRHZʗF.ek 7B,P O ķDR_+BV [Z!p|S+7BV ZHVx'У@qj|)GMQ@w w<+66 MNPf8PYU*rfG#kxAo4Q]&IVHUfXBUѡݑOov|$_.n>7Q;(Ip-ec0)}޾H|cqK3w|-iʁ0p+tE -j`>Ba|SE4_Q3hFX|Co6fK-ٽ 0q^D$qk=c%k6[k}t\uIAo@t &`6jXI8"|3K|=HVJ޴^M *|Mؽ^fčL|Mw5A 37nFz1ORp͗|,q8_w~B;Igku /F|1"h%PU/:`a,-|G|M0/G!ij`H ?UH\K7kPOuI?qq7iSPC曫K|m,IDb|}e|QX9kz}թ dŬ[";4ؾvh0_20_5q"Nezg\9 ;p To 3$f..ځ >b|f(iH/K|sBͷYH3j8_QiN5a1.IE9QbgZo=>)Á uORyX}MgKHI|PDE0h,1K)ZtH A- :AzbMɨ&3tz-JЖԱJ /\J&)X [MN2(Ԝ;QˢI> :\wD#=W rp@>P|3G|ݟF|-]'N|}_~WSs,D2V9&%M$;R$j_e $αuK/d|'K|_s*|f 6;H0fΑ> Mi%XiN DXGLYHgk|Lp}cg+e%fqX| K> OνqOzBc|!:ݬ>ٺF0%wO)q=R$Y,_{iR#ذuPYe d3@M5神%HU%7 3h+{eM{e8{[@H^VEZSKIbӑUN"W+)|s1ک/૮.@r5R$ _Z_L__/%-$^ _YuğOJzhfx~ ^{))ތh!W*7 BV~!r@(Ƚ!{N r@-G뢍8=}^^k!XDg'DƸi"9&wc^"qErJKOVɽ~%ɽXܫաȽ%G{qBr/[5>$9k;x^["Kw U^;3$og9!"[O Isk%ݝ".ZX^@_B)e.^_g SN5"=mo*dB9b*wڤfE{͝+i%``zK. -^Ϻh2JǠ0ٝWRgAօ E:&X$/y@$%" *L-px$زSTN}BR,zz,EG7Z`Ɩ)tVElAk)2IgXJH| ьі!C5ʰ  6j9SMg ilZ=EGTXyK9m? +1&H]LFk-Jn_"-`5~D'*/wYeU$~]3K6$^c8KKi鑚$O[QpL7ltn$E_ &HߖHgdREm|%'09jB-毵 .~HEh@MkeSZS\HOǠ_u"vχ ~ש [P ,}'Gjehj@RV!Ts$m0[slH'ecPb~Rx 2, MdF"qO"zÍ;A."zzpT섦/%$#]ψ3D6\Vzg?5U1հm_e 7Q_5EB 6z36 n]~b%0(n/o<\_NDO/$"DCv6pCo'}\O-:]9&^r{v %x_$0G/ZٲHUm|@U͔q6zt0֜Ma {I5UЬuIdBy4[tW"}ˎBov%"!I䯕j~ GڈfD["f6W- 7g"OIW4#ߜ/G|1ˤ&05+Y!oN !9A_ @rNo@՜o2'99.'9)IAiM tH@o rR˖ od_ ʬ@/'6L x" &9)[&"9+Yߜլ@/g"sV HYRχ}BeW!YyAe H!{'#T*$Ia_q6kMՃǩA=Qt3G C.(%G|AxT_,( - U5nɃ<$-LD ZN%זC~m>-4ۜ#=y/ ͧ[WP o!%e _I փizz,H͍QsSBvlLqM5(E5ߴ' ڔ_+WY8'ׯh~3'5=1](I.g"mm( 򷭎%&Ť_nID__NImAJU~ZkI[!<otT\,ŀ-D]8^=Wj 9F$>jAkఴb4hـrr%7_@kutcM?r3xk|]} ׆m_HuG  FAa,_+\HPH>qz z1RGĀjD J WDBL&D]K0B{ + ߽Fe-_G6xF׆ _kLSlj J_Dj_t"f3,R!dRQY"9V@1*%~Z.FP(3l$h)=Di/ ɯ~`SrWЉŸ_ؿœ /{uO/u k,q|HcS=v)*K5ѿɏ"Zsw4IɿMw_z✕> 1$qML^H<4Ph{N$8,!68 垈ʩ" GK?Z 7]׎>;0OBR$3kvj^r;j _ W_=N_)Eo*No`1"`j֑ (B[jB^/n5ɲ&7z~>{IŤ-uQ]8Q '/vڃS}_`B'P}ig\aP#7WNš yBK ؂A#}Hu9( LRZ7G!,/O 3Jt)I.­DU|}nA2}m|^ 7ߏ$q(E ~G 2yZa[|_$  D_KIm._%#z/ {[$$e"W}^Sv>HE(D/"HE 3cbu0$3 _!.Jo ,M@$3I_"@$~3_!%{"" _E!($ՑA-=yȨ/($# _D!$_|#!H* @_! $!o$R#K $bE RMǾM=vDbDU 8WjY ,ٝ:!HB"I_ !HB2I_ !_lg[vIU-6 Նx46G:8UH"I_l(\}dSGa\~g&?O'? v*=|kBѨqz~/s%i2e  =͍\݂` UP41z$F<*)z,Hr7bdqN)ɊZ[pxX>U,fު:qbsBjT!l5Uc!MZMMHnx*:*U@2x*HbVSޮ Re7'؜Qdӿ:x%W:ЛGmR9]KZ5-6OڜY*Gk f8&C'cUDגk^9q?i+2r4 z5`C9YLZRpF 'MD&W4ʑZr91 $,is#ѵZmɪxbsLisfI%WЛm3lxʒ6W9]Kz昕 daeIs^~t۞r#X;FYT~V.b[Ku#F4`WFoWK3Ukվkٚg'[ukY\& e!tX~hdmGgGʳ,fb9*F&;.xbQ5 P٪__?62 w{႖=h: `Bʌ_[:Cu=(+oʻQummoHۺgk?a෼d*>y$H ,kO$!)xhT9cuuhَg7!L+޻ƣg6쾬F{zߜXǢEۏkQ/,[Qg\fy:oZ'}c#CZ2P9ƨCoYk?ddk$7!]уܙ;~}y{G]&8Tvkf7GuiFATgQR5ROIus;&  ǣEG[|~q:hMgJQG+I GڌKYnOTK_em|W/fgԷ=[ Vcu~j oh!V5W橩c}B r3ۯw/>_Ocv7ɣ[[r>~~Anh7[ᬻGmA<U@C U}]G> w8Nkdi# 7{9"Ka~ŵ^)ƷTB.Cӏ9T#QWĠε\Yl}Rvy rϓ_x̾( Vz;a 1l?ZsV3Gv4 endstream endobj 4 0 obj 66855 endobj 2 0 obj << /ExtGState << /a0 << /CA 1 /ca 1 >> /a1 << /CA 0.5 /ca 0.5 >> /a2 << /CA 0.7 /ca 0.7 >> >> /Font << /f-0-0 5 0 R >> >> endobj 6 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 1358.270264 591.233643 ] /Contents 3 0 R /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> endobj 7 0 obj << /Length 8 0 R /Filter /FlateDecode /Length1 2588 >> stream xuV}lS?w߳9/!Kl6?l$4#L@ h(_%M)*dY 1Pt6D׵U71BPX' M QJ縫ԩϾs{}k;bz (ld]KFF[j] @ woivuxL{',6~;+ M[֢!O]"wЖ;~@uVB5 e` /JDj1Oxfn{ 69|n7AtC1q+O'E) ̢`:E<rtc'\'O kfE4F I@GFqPd&[:ZwZ>vﴰ꥾^ Y1<(J2$d:LP"8`$rE$s ۬4DZA gTUU PJp8;JHYٵd)ER}bcFs5/>՗PruZΚQٲ#4~q1yyXy:d[ d*iA)@Oʖʉ'řV"=wnhzV儷ƣ=sj{-r^/{LFiiى<+';f@: Fnf0J"gfad#(/ (DCv}#}cO-H䃑]%%P0"L9@͜8QHi^]nxD8k :i[Rv9K4CZ+FI!yi99z%n޻zuRsÈ52Uf&)euOaSpJSJ!+[Ftxӱݿ\6E :z &71ҼfCTKF8kCE!,̑CVZy&'K''.wYßV~wǏkpCWnƏcEG[>Yy[K#j_sr|(--B &"Dt+Xs2H Ȣ) 2Oz:.HX)nJDO\#Ț-+ R}wQ]{./~No]?2z|9;6+{7-X1K22p]ML Ob{$eۤVj0݆TlgO.xaxx ~jI'Q,ȣ7^]ܺfoˮy~uй޿ןy1::}$ w3+q1տpyb01 ;D\Òҩ<;J`@&J3Z:ၪdKrm3Fy_!$N1yppA{az`Ͱ-+[D0(,b=vD}z tvP'o1%8F(RB ^%er6hjLNXjyZC4q%.ܠQ%r|^}{ 'nĘEFbzLoМeTl0|3niZxWnO외 JwXD@ͬ0"%  \W5G=I?>½}~U-3O큾KEb}ap4QnթbI,A[-W=*7 endstream endobj 8 0 obj 2019 endobj 9 0 obj << /Length 10 0 R /Filter /FlateDecode >> stream x]n <]NљNbLER@Z qfsp>F (]DqԆ(-NipGs 5(pxR+ڌpu-&@ƚ^ńتsuE✞$ ^Y@=04I~§> endobj 12 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /cmss12 /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor 11 0 R /W [0 [ 750 666 332 467 435 475 527 229 501 435 648 229 488 ]] >> endobj 5 0 obj << /Type /Font /Subtype /Type0 /BaseFont /cmss12 /Encoding /Identity-H /DescendantFonts [ 12 0 R] /ToUnicode 9 0 R >> endobj 1 0 obj << /Type /Pages /Kids [ 6 0 R ] /Count 1 >> endobj 13 0 obj << /Creator (cairo 1.6.4 (http://cairographics.org)) /Producer (cairo 1.6.4 (http://cairographics.org)) >> endobj 14 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 15 0000000000 65535 f 0000070690 00000 n 0000067148 00000 n 0000000015 00000 n 0000067124 00000 n 0000070542 00000 n 0000067321 00000 n 0000067536 00000 n 0000069648 00000 n 0000069671 00000 n 0000070026 00000 n 0000070049 00000 n 0000070274 00000 n 0000070755 00000 n 0000070881 00000 n trailer << /Size 15 /Root 14 0 R /Info 13 0 R >> startxref 70934 %%EOF genometools-1.5.1/www/genometools.org/htdocs/images/diagram.png000066400000000000000000001147771211610345200246750ustar00rootroot00000000000000PNG  IHDRX?hsBIT|d pHYsShtEXtSoftwarewww.inkscape.org< IDATxyt՛Z!b11xKLg8@}}= klz|$RZZo[N8;rx'(//_FQsvm<3_At ^uN>;~ ~mN3<ýދ,[oNÆXBnvjl6466j*jjj禛n" `25k_WS B_VZӹ8x p`0ȝwɉ'9s&~)rf͚bϓdrH&/ǎh"txXt)v/qaX(++CUUl6A۶miӦQSSO)((K/EQ|>mmmdffO[[F_A 9X A!9HAAT#  BKA!H%( APYYjF E,AF ` c7?R  ;p'|a6n8,v$>|.n׋͇~8]X;::رcGJl[,Rb{tttv6Y*X͛SbԩSTWW;j$yz~Fuug%}裏RVVW_=`;GTَD"VUp8ہ@H$>/%valcv$!Ķ #M0L{%U }}qqxŦ$5huu5]]]^_q]vi 0Iwt0ʶia ÈێRqݡP8AL&ӈۅyUۚjJlG^?UUEӡӍ%##cBw@cf̘ԩSlذnFdrb5Z444pey9r$X} * (Xc>cَD"hk,>:n^O(bΝL6SVXB NlG"pJ^ (JJ^`n,gb{mkF(Jhi8FӴzyAAH5`  $ AAX  IF1fwqϞ=X,TU;l}dk׮f%ݱcy֯_g/,?;v젵۝]͛7E}9l˖-1ن ՙHp8p8,|ٰaCvdčQ&Aˢ_~PhبΨn+믝f Jeڵ}d_EuٳgH2UUX,|");pd555CE~?%E횚XD:{ˢ$~ȑ# .,4޲hʘlz2&g8p,{޾ $y',dePN':~wPvi[vʳGzzz""FFFF7  )Z[[K1Nmm-uuuvCARN240(C R__L2eˇ)AAdɒǻ/MfyWx<|! a+:n7=!z<"ȐvvvՅnp8PU5fCA.Or(E@qH!?f/_ν}7EӡP((L8`0N# Nr`XP-x`0vIKKh4сh-WU*f̘A(B4f3@,:::7n C܂}˅i1ہ@LF#NfΜ[iX(,,ĉ\tEa x< b5 ?Nqq1viӦ l̝;ӧOSVVFgg'z,TU󑓓t Ŷ&d.NNӧ&`Z0a]]]qt:Fȱcǘ3gL2”)St?~ɓ'v( mmmAZ[[^4hkk#P\\L{{{{v1m4, 3fh4*999f C|Ʉ(r@_ddd D"f222ʊddd$WAaxYbEtKӴMaQe:0^QxrrrIvv6ŎEu撓CKKK,pihht2i$cYnnnLG^^MMMB!cd=pĦ1ʹI>++@ @vv6p8ζfh4]td+;;FVV&JJJi4prL'Of#`6)(('YYYL ul6I5Z`5M9rE`ӧ0騳a~(a4).R&4M!ygr6ŭ/Ѩ淋uPM6B1}1C GLۣӶXl. 4 X!iF,a`,XjA{I.aZS  k&M`qz&AL24'IA:6-i$>}:v;rH`۷dR ¹ٲe MMM8Na׮]=zVVkS^^0ng׮]X,4Mcǎ\.9x ǎoATss3/' Ʉ?~DUBg׮]1ʅl8l\TO}kLDwM/zo sx>f3EVY#/"J[[.+i}lZc}А>>kii\ G#ǡP>klnn>lF{?gF>lY̻nX~&B{$]{wNg}_Wܦ?.rW&g)@;}-+75M|u](ut`<U~ ?$s뭷&Pς{SRrQYd #ǎԮW/sݛ75XI@4_5E4 Yiڧϊt4M[?B*?}4Oŋ[X| ¹NUÑ}:999̙3'՗*cOӠi~F(zkZ{\7lfj{;z욌%pU%y4WZ[[X,LcXb+VફDx饗hii[na>|}{\}x^Z)++A5k$MWb_v3p@'y<E!33s@c1$[oƝw9ⶇhBH4 c5`m ur= cјTe{M #6M= ɡ 0~?>F pH% @ ʕ+Κ5+^ —.vO~sQWw}-yAH#AdONZZ{/<W]uUL~!F#s^|A4vW\{^z rϋ yAvr&NȒ%Kgeҥ̚5:,X mvrW A I068(v_i( 7oS\SSO~ʸ˓-UF+[n'=}\g+hmmp8ۻKAZ[[ d~)g?:ݵЪYYY,Y 9AddmoOKK_l2D"t:b[ \u]I%i/1i>,rJVZ-܂` HA]ʎcyrrrrbhf(=w rssc?gff12N 0$5ELr?Q\\̳>Kss3ӟcMc"UW]NeFcfAv'M`rn&G4 04r 6m$++u477%#AiMvvY咦Al曯GUs֡ɺGAIf 8]NKI ;AI $Z,KA4 `q&L@AAA,Wƍ+*۴iSY->qYeхul577%~,lCvd}dQ+۵kW::::zC8pl֭ʢ~۷_d. u޲/q:#H(zE}ٵkW={dq:{,`*;rHX IDAT/۷olΞhZ0̓|Wvĉ8{$~)~HV[[ۯ޲h{G}@>, e?ϒMF/-˯ vM4M4MҼ^o,z~v>oвnsVYgggB=d~_D"gv- q}ڝMSp8% BZggp8]2Gi02z# C9>}H1, +.KggdN3Ngo#  ۩:hYԗ~e1ٳPepX g8_GvgEuev] "-ܟ, iGx[ୡ4)BAA$#  BkjlD={X,^lڵCl6|>ߠdQ;v8o%;1Ykk+n;ad7o#r6ٖ-[b 63pp8YaÆ>ɢ O:#kmmM(s݃E}Y~d;v~e|lAɢ]/KΞ={ I*ePPdQ=eAwȢ{zɢvMMMl|"eCEWWWgD~uEWVVdkN$;[޾ $Id#/zEd kF/+ ,Y!GmY%5XcEQ;W  e3 @c?>ʝN:~?~P(4,z8Nzn"`pHzꢹCss3@ f#b|1۪j̾:A΁e˖%MX瀇jYqԩ~Ooaq8x<v;^fBatuu׾vTU%ڊi࣭ ׋i455 8rNEsss\`0[/i88?k|4MB @4Z[[ill >Jn7rhhh^WWVI[[FXB>׋&`X444P__t*I. OϐaT"TT"ځ555ĉ F//̘1JKK1RRRB  AL>z233H8_|y󨭭eƌsT]]… c+BZZVEt:MMMb(((p*z>." hnnv baI5, yETWW_۷K/1sL{Jӑw` ==EQtl6ib0&,N'qiƸOOO'SXXH[[ǏGFJJJ0g ˚5kVpTi(r1p(33ロx믿>)[r϶tEĉl'l6Ǧ 6Q]hϭi I& HGlےA!24 uk, X\ffwӡC0̝;3eʔYYY笫|j>#xa6:u=JAy֮]wܑ]`24M>7,X0 —n!i$MG B7AHiAF24tJ"KAA i$xX󥣣-[xsѝ=҂i(OݣM>HII V [oŋ/[oENN*/Yvn&Zrss0a%%%ѳeAڵkK1΂ z̟? &؈NK/%##K.K@SS@믿}{D"JJJ7 9sXhٱc֭'$ RUU|r͛ǕW^Kww3o<{{;Ν;OصkG?Bt:q:8q| wغu+</qWA4 {,iʄ vVVV)0sL^yx衇8uvD袋,[Çc6iiiw+^{yd Yf ~; .O}ANJ0d̙tuu1uTٽ{7SNK/%PRRhjjwޡ r1,YB^^k֬! _ڵk1L\wuvbb*G"XÑ&j+v*2\g;َVPIų]g;1$M)3zfrD"@72wX(s0X*_@Jɸ̛=ɣՊ^tJ h;@ @C}38{Ai=*9]SQw)~z֔NWDz79&?rytYh VKE8T 4&#y,{I. F9h4&Ix={m̿d9őKccs+q'_789pNᤩ(Ə^5 4:9rrEť9VyEW.c\xmܿ9 Tߏ'b9s'NPM I})~3Xx) x]՞gv)>̬A_ucFͷ-H?>yqoYש57N &QT\ʉ'r%7ڸ}о 0Yv-wqGRtI5yزe Vk(,Xxҫr%+ůO;Mzzɍ+VRw$ pR\8vmLфx,v1._ DNг9tPw5Ǝgf2s dK~jOQ`40mLr{ s/\YІɵ˿AݩlC,>ЛF#-Mv2蒁0Hf F9˿˿K/1m4~xfΜ ti0ɗa)  媪2}lV ܐEn8nWK] .n7(w1grsٺ+9NJ8ϼb0udt|IK33{cT 'LZr]3WiLRʟ˯5߷ A6zE%ԁ 0p8I+,(yocXn.:3uTZZZgܹXiI.rr tuyIO7c6q݄rQUy<]B!rD4\.& ^@f|ߏNd2*b2?z 9a &@0 0D"3) FBp8(0{0W0ÄB!F#z@ huB  `H$lF"Az=Fc}E?~@!-53 Ÿqhmm 4 JVVϻ#vǧOr7M}}=0eZ?~<999455 (++#Hnn.v<SLAQ̤:;;4ifłhM[[̼h6p8ԩSx<ػsqAv;ʄـ6`C!f;4s},f%-RJKKyg[0}رd7)/ZHKY H${.H4a`Mb!>¼*.#s ?{f css9Щ;dfv'lmmˑGl'Ƀ%yȐ`I 9UUU,>f+.xm6T2$NEg NnܫuvoL[SS I064un!Ӆb JW*K*_mk0[iqO\Ɩ-S^[M G{'0tjȉ[&&idBM*?ocX+-MC͛ bkUUcC>'/**,>ɓq8 K itEpe͉7 D0СEjj L|B৴t'N;ftV .MEV s3yr1C@e0gI0)B .0`%ũ3|d#%,Gm N#==azY% Jg&RAFI%k8$AAPZZ]25ikkK&AAXPƐkIui{9jjjؼy3v/# B^*^/o6ǏwoMfW_СC1}͆n`Æ 8N^y?+pQϫJ{{;pkr\ 0zHf 8'OfľFN'/~)~)~!~!/V^yl6<Ӝ̟'n&֬Yïkyꩧ^ --sI9Bee%۷ogݺu\zh4ƲoٲR|MVX '|ӧΦP(D[[Ƌ/ի)(( 裏i;v/3fp.RJJJصkaDZAYvmtI5ƙ?~BНE 4B>JKK)++v ӦMz|EUUO~BAA-+O?'xϞ={bsӧO\}~8p~H$ѣGyl6C㡹F[n+W2|z!͛ԩSGA/+VH.E8/?ĉ7o|w}XȲe(..fݺuL6 ֭[M$W_?Xz5wQ~#GIzz:7x#7x#xbnʍ7H^^?ͼy8u6l[o%;;FoIkk+˖-㭷GA.ll6[vJ %h]]}˖-c֬Y#I\DPlNےhTDUŐ NG~~~iӦww)JAFdik!ikk#j%UUhHOO'+++HIQ^M)K3( YlDSZ@ں.='ggvvvwVǏTFmn8mJ `0K~8lv }>߀322_!իP1N=y?bic2v/obD"x=)- ɏUhi~gMhkJK9i>|f\T; 97Xp1~0DTW7R;Eт=%`0l2(ZJFaolj;&S+PFsK Z6{M r%SJZ@((̿dcp޾eT|gd ?͍6nWq@XUcH$hh$$Ylg*.::]_Lu5G;FBg[QP8E\mLNZZ:r1:'/ dikqF/^LvvJFc6mHcnEw9H$yc̼qRxͭ6ZN,F4N]W4i8C%Y9X#' 8y ; nvoL޸|]0}sݲ\ŎE&a6grS39y,F` S'٬D?qMiiL1A]uTUGvX-)4p|Eg܆}4Mc׿ bέ\T>%-_bj9u&:s˘W, 7o\뚻&&:&0qR12gpÇɲ.f\%[>4hh&`0wdJcY,\rՠH$BKF‘H8N#33SJtvtn<ı!k׮;H. F9N+_ wuVn Eg1oaq .D;r:YNVѲ;:#A IDATEkK`b.^xY``hmiO1eahId{IBʙ +'9 0 Ք9qǢAW40(yQn'ص+.Jws(6^V1{UGXtUŎgg9~[6~݄殺 Tj9+xFf&SJd ^OiLw<{ꗢS0% G~2S?~[C=Ea|A?`NǤS#w^oz '_X4I`0 ԝlaƌ i?ooɓַŪU3gNi~̝& 0t4M#=L8! `01 A"0fs:L&JAcdf UzHH{@˜3ٻ0gvϬRtt3s"%:*CD2%6e0W]6o_AUC=Gmo?jCUƑ:Õ,'###,//Mp:ddfsͷg6vm̔I,~JCj{`4x(.ddd`60~|r0qsssQNL&YYYx^~?F:::t̞SA L\N*P03/֏qקfj0{\vi)$I$aܸqB! '3advoDSC,*l6] & &LbV< @NN~AVV&Nx˧dj\ zNf׶ͤB~.񑞑Dbj{p]0YYgEӦ{kqݧIGH4;jq);vlvl'M}7O5Ǹlئ !$!!zGp6: @X>03{̜{f͚iX,8L& 6͆fLXccx%&4VcHHJdߋFtpA8>-7:Nj5* Á=T*-Z-b+9j,fZ`np8Gޙ;tAA\|" t:lt:ں)V?ivMHH. &YBΣs_c∋O$((Án`0 z9tLzV ̕ACC`]8Ų t:]lA`0T*{yɕ/3n>JR 2FsƄ/B@ZBVәhhTt}288E+ؙ.7`@Q;G`^ L (P-2.NOU՘LgR @y:{#maڴ3K1 Rt;[hڪT*K~]~!!g4M龓KR~ضc/mlX3w-}-u̱XTT*)d2IVYsh3}{V 9wT* 9cmOF~n: 50!B39z0&{ou?d7mܢ.ӗ7ƶoMJrP7咡R62b_LfYv-v۠%+XW9W&44{wUV1}z#hafΘJiiy%_04RTp`}G|5 CM)13?HLۥb4`av@ Hdⷆ8р:4|WhJhG 1Ҥ| $$ήF݌G^o쳌!iG`+8ڶwاK%{ lGPߘo̵`)W s1G8pɓ'B=Ӿq9{b0sr8*ȅ`Z]Bc7.r;Gnwh`+( }P(zdZvh|ʑ~,XQ92̜9'/ZCE, B_ C`ثf@J .Coy2yyyu3ddddddAK`] Ă%#####s-0ad 5Nss3.(#####s3ad`r08z(/2[n>૯W_}lxزe 8{\RRs=ڵk裏hhh*^u_o +?޽{پ};/x<>cIf0qzM?Gӟ?΃>K/R>MMMݻ3f0qD222NTTZBYY~!r &M;vo&]w{nS\\,]AWWc̚5cǎQRR̙3 lΝZ J㏳zj=z4g淿-+V &&Ç3gΜ`222226A`]SOQQQAvv6Myy9+Wdݺuj}]gQ216mɓ'9x MMMdddZ-ZPPŋ?1{>СCLdd$N Ygy5k̙3ygǏgx<?ʩSHII!>>heddddӂ%+X8'N5Vhh(;v젲8xG3f aIIIdffOPYYҥKBٳ;w.XVYjmmmر NLL;ࡇ"++ z>EKK UUU&6^vSZZJzz:eee{2yd6nÇ|0 rˌ4zB}`Ϟ=:t7TUUҥKbTUUΝ;#((G2{lBCCY~=s%441c(gF;};"..*,vQIMM`J%qqqp88rf"&&0 Q]]ܹs1 Add9ju!\FY#[4*۽QQQ.4*+X SQJWˁM(.| V_477~,X X{%`aY)[V{7rss{k/^/_ vV]%tJ_6[큇%QXxVQE9_{^QD@`ԙ@LLLu8NJ'VϜ9|"=.l݈' /ux:M'O:Ϙ۫rNsIUe%!&QQQ=d6 MX, z`nmmLUx<~$&%0uʤA's駟r]w J]ua. EQVNEQ,† xYr%?INN+L^xЉh4:B.M;}ƂEwr:[w0v\4ܽ?q(/+BqCۊw䶵w˘)RrKsGsy'&L&,wo͍KcQ(Jw$s-a( A@TPk1cc=a5,Z`@ T7eQv>@UE }2V4ز[1RZmu%NN[k ggx<Ǧgy$&~8j*hb)mO xQ(Tj󤩡2w-*d@{餮֖f>BLaGp|O6% OPKtl< dFYI)F]*:] ]vNYR@V.@ | :AxVՂ Oa EC￟_׿?>+W;d2ɚ/ =^k: `[61/3G(c0Q(ح]X! rw!8DE\.7j^X|TX^eL=/ٽ?ܰ4а AZtx WQg_|"vc O_8w?=*= Ȏ;رc>(`ٲe=:u1JO9>5TWne /v;Y~Rŵxu̘3rJ)8Jl|#PcEYd)m꓆2\`/1q47{{Zc01lH38uHSɩXdGRxcyt1{ޢEOP0gbٹuvEltQU~KWW@` )%T*R2< P_[M3K 6>Юͫ}HfR_W  Ø ŠP(O$.ާ|uWlV+5(oG\Bbvtʹ5HJî\<AV.WY&l<6 )K?U=7|ST*n OPTp o`Ŋ^Ca6xpݘ]R^WEh WFhjp8Y;Zq:h4n7nLoxSx<4(*N^NQRq\x<pT*PРP((ǃBVT*q8VrPTT*N'^N(zq8(J@vBqV}; ##9f2&NE؈b!99Q"((̅STG >tߺm#ɩhuZILƴsX,466AHHո\.RSSq8b2I&Fikk8t:jh477EPPNj پ[Bq:4;Os*5vyቧ;Nb!XVrnea”Tx3Dr87ښj'$L||ૼ^/}o^RR[s;w.ܾ" o/jbu?B36rݩon#Geߚwפ$T,aITLwT:hԩ)9$4wTeU&ie+ ɨ_R?4azE#pAF .BOgy A!'BȥjhpI&O7jkkYv-+V@VHsssz .Ij=6,jj%1i6ǎhk규L 3a˖ҡny3{n]9ˍ0'Chn$6g G\+RRG1ʖn%e성*?l+ 3L`>[y;ZB EQ܊ |E;)S0f>SNʦM(**nsIl6$%%jY`[lի?>ڵ Ȯ]sqƑ@tt4}/f~gc,####se0XK<}97<3޽{Gxظq#k֬AVk.JKKjdddPVVƍinn3fK/a2(((@Rarwc6yǤ6}gZ&##\k֬aƌYT~_oHgUWW(̕ڵk.Y?~p`VKE>oDa(zxL<ѣyL8[9Ap=̛܇fnJeuS^~ aRukT@ iDF!KGGHxfYBPPp@ĉ22u\F; M(X,X,+.S*#( Fh<~ UEQ\R+R^AZ[j J`=ȍ2vlOWE 3`ڈ[oeժU,Y$`ɩ0 ~2:c9* ;(f催>cV"60zt`67xIɰ6oB~K(vh&(:UJ=Q\Hmu%&OglS>gL/͡slwǣU(+x(aa @2* %È^76]wX2ݶǎ#.TԵ32,QJ+8KiڶIS- w1mrR.Kw(z}:Z-X-ݧ7uxZQ( F #zcёFjMbZ;Zkq9O+ao^/*ހh` `05؈WEDK [Ǽ{o,qIp8޽OV.C3L`],[>>bccȪU?~<^wyI<7&fipmcZhkiĨ)baކ+Ύvr12} [@Q]YέYL>o?\(VS[SA8`EE2a>iz,g'$xNeu϶X$W߳Ǝj7Q-͍2nd""}Kȱ9(.dꌹ|8\`YZ,ج]XN+-y("(  F#a ~c}A (|ʐxvT*lX]X-jY,8n#J]Ơ TBXKz"ݱvAI(+X/|/YD v)^x^xh}Y~pz0E j*a޼z./]ɑ\˛1DQ${nT* G~b0+2elH=ZmPxZ DL-Y+/rP(H6agQo) Kb0Iy;vdq9LIl\V:f@mzEIPP0[#?cvo')y T(lVI1Z,X2ڍ"A>+Hhx$qH69|`@o0yqu6bs燃V)Ag,jQn7'}M7 AVqjkk)))!::: }ɘOt:X:t:fKh ۍ%uuYp\zE:;;h4VSq8<( 4 nۍFFĉ>NZZZh4RUU($''cZihh <<(Pk 6 01ͤ:0r` 1aYd2iii餢4Ӧ*:w LSZw2m!|1qy]}ӿxT3֏%%zsauFBBz_r&]C+Kqtneƌa52YֿTw cn&)eKÅ.ɲ/ Qzn!.-3g.ޛ@b7,ga~A=0 #i06l+WRYY_I+Lu?ś/ҜRBR[RRG9ʦAoΜE+Ylq,\#6l9KLI}4N]?DO5's%2ad*'&&{=_-뵿&/g%iWpH mShj[n%L6# ::,B~26hMK`E(/^f\.g;Pktx^`V,#9Qe2cgn]6rA-8Nbf|Au?Q tvX7fCByP-oɨChKGvG(S/ H۷k-&S$&':a>/W,+&,uuu8pTI;~8ǏpƏOb/ C 33m//NDzez%22L_D1bP)..I&1l0w Q]] ,b7mٲlj^/֭`0d/FGG۶m|rglA`ђLBrop߾}44-Z$j[nAPro|Qw!˜9s(//1uRP||>^ӧO'!;qƉ믿 Nԍ7J1VX*7ldbѢE477{n vڴiѼor? gcosj>Əψ>7;W_ fYnrq&h\\Ӊx755Uzt_B5jTF#խן ,w.)񁉏^,t7ֽ- UfDDt}3n> >t-1+JgN͟%GEEIK&%%I#FHQ?Rn2Rz:BCCtB >ߗn~]R/#GvJիL w;<<9+%8̙)))K~f~֭[ҥAH+z/}k_}k\K_[_W(w?aaa6lK@My0y3?o3y3?on{rr$wF9pDDD_}W2jllDP_~_Y\kk֬;ͦM5k'Ofƍcʸ馛HMM%++Ktgtvv2{lx7|9vq|甔IDD_~%MMM7^CcvZNJ~~>yyy,]$>cx`Fm&Y3? n6V+w桇/`Ŋ[Xf̘kFGGwq۷SO=իt<#_*dO>PVZl殻bJϿPVXSuttC=Ė-[ a„ h"^z%|ABBBxg1L<ӬY>}:YYYskvy駯Kfp/x7ꫯ8q.;v`߾}_|J[olog…lذw}G}uƮ]0lݺn 6Amm-*?</"---TTTO?ݻپ}d/8z([:3gfb̘1WB/K8x w}7wuWיL_`[:tzjyw'? 7J%7|3nf??ϬY^z Q1?wޡkR__/-:t}UN:Œ%KHKKc29qwyyy;ƍ 33Eii)YYYX,nJss3[l!>>E/sJKKq8lܸF#k֬!99 6p 7PUU3<ñcǸټy3mmm֭|o$QAAC|b0"k< l/ܛȑ#aaajBBBcڴi1~x1b'OfٲeL8jE̬Y8q `2P(l?Fɧ[oe֭|g,[ŋ~zX,>;v ҂f@OkƒΝ;'L /t뮻 :;;4iG'33Ӊ(j,YBXX .g BIl6yw6>s-[-G}$_g466Vv~1ydiCq21cW_qaL&̟?ȪU!,, RbńJzZZZ`ܹ|T*C& wΦeh_3gRTT6 %&&njZ(JT*Ō9B[[^$^-s(IY]w}WEQbb[[p8fv6MܿhBXEQlkk fXWW'(vuuׯ_/(644H\.E*.666(biiXSS#][[+VTTG HEQtbnn+v]lii8x<t .KtC"pgHd5uUv9,-w+**D+ WEE<|xCբ(buuXQQ!W__/vvv(m6,8p@pmmmbgghZ]WW'vttfYt:bEEE}QSS#RZ!8p@:$7~ߞ(C{{^p l-\.QE177WJX,;_(fj1N<)KQ}s]E3_!n߾]4͢bf"\.,o嵶MMMsA 'Q<ӧOƑ#+w?2W1{/|ח񸈉MdҤiRashi>ǁ׋ 3g=łf%22XrsXPL;S&**Fj[KK9;nIIäwu9/1)oӓNCƌN{.`\;u3l0OΞ={{233z;eħfLoBp HCfϭ#,ùO̹ غmn^N74eQcپ+Krb f̙Js +n9nR_\%Q{fc9i; G=#xhml#++jٸmǒ>z_&MF`ַ8T*߃t2ݾeѴqp#ODyvVܞ)LIDATПc؝} Viۿ}vcje-Kn\)4;jȑ(-9Bkk+<=-)l$UdXf(j|;8%pΩ4<9Jr 5;>ZAf_󬺺99L⋞ouWqӝOPb[1wg>rnMu0-a:ee9'+MP ۷BOHh8K\O4sμZKn~ Y獼e '&&F+|ݻy 'ɓ@W>dLKҹ# 46I;5~~5Ul߼Qc9wc2&2c|EQA nR]i{c`Ư>+&xɍdE]홇KzJI[K3'1,gtC$OxdUym;tәz*N1c|:[z%K+?.SVeȌi~+?)9Q\HUyjEÆL $sss3 ǵ#}@\Zchn+zc 5Q]Yr1e0~{Fl<^Sfu8Q\HueyZ<=[Wo^륬8Qqj4lR86S_?p^w,BY|ϡs={w{WڎJŸq?~1~{Mz n'xj轀WIQI~/7;fe7b:s\JbμDFEsk-͍˖Qשp _d.M;SeKSzm) @R!zE 12WZ<{="͘#=nw>پe' &))ϲ~l6IÆ#z6&,,W_otQzy;uLzie-εd՝ssȧT$>!hC 6''X-Ex 7[_L;Gڨ5geb6wR\?`9J%ߋa϶z}[$=[?tc=n>{?g{3L`]fX*S__A`޼y[pQ{1PcAee'qcx|/N3"Z[[X|wuuڊimmljڊimmB22l6<_anb)UJN7'3~|Nvʋft>&H6My?nK7&YC;6OۻਪpYvA1 K@"$?nns;I:Iw:Os={s=GC_ïÐO;p`_nFdDql6$vFbR }h=†wGC+TkBٺL='9z<N'U|+mmX -4?!7/Z7!KH;MVv5NJJ/ˏ2yR,qqրr=**7SX5v3*N5{Ybh ozq0ߵ',IME75׵zr(K Tuwo{Xw__.Sٺm%Q-l6m74Robɿs__]k2)Yi<֖& z dL\K`E;vvo~âE3fOzYYwQO?xl=k&'kc iv}ؘOBB!- ӁәASkigYV+wY,)ifgqy}L&XfZWU,<_!NOO<69}z/&?=[|Gm!Yq*+?"'g9L& '𑙜r ܮYW$f=cbb"fYs/ckk;٣rd?3_o`TnFkl6[H[oc߮ikk'>>k~|*N!>f>_ ~ɤٳag1dRYbOְf}=$IIYGhϞbǩS1֞O|V> to^`3~$ϡCxh|S;iii>kXN:#Ɩ:UU̚,;ſ?WGSm"V'11IOObѮQjj**ྩwq}0MCI V+,,f_/(((@c\oPϥ<۲՝.fǎ ,{h㩬r]kx&BΜ6qq 2-G=]udb}?N9qBe#?b}zj0g41y18]P{e"v{dH-W_}5m:{Dv><;/&N BsX{X#}VUώǑ;f^wnZ[BA(glҥKjvL&3QYPw%{ 31,Wi,*:j5uǎl6e<8>ɩ$OQcMҕ,.^|&ݻ|"]dզ6jkh|ƝwsqvԒɲ^$D roUNK.vWs߃׺W8Mc`S@fvKU]\Om].G:5糎WXCۂYG2 E8gdkP~R[`q\e%8 |1㯵B]nbboҹkyƱu bcp**eUUR$;uIl߶-7\מnrwkATSS+7vd ])@Ss.>*#&FfԶ0"6)r$ctޭo{HJC /jk~aިsc)chiQ~FA]3O m$=ȺT}ѣ̚5 ijD=>ٯLc;'{/ٹ>Ӹ DB9Mf8j̙3gko=z={ӧ3e6]8~8O>$ƍ`TUUtRRRRXjXV{9Yf_YΞ=ƍ̙#@[-@жO?ՖxǼ][nٳ,^;p͚546j݃?ϱZnV\ @JJ K.|ѱczW-(++cΝ{?w1M($T,zVZZ˽Kوw7w1hժUk.F wdٳg}v/9y W&aÆCss󀍿 ys#cCp\466z_z d7eee:u*.ub(..t}kKHQ\\vG>[l ٱ$ j7nٲEee7ME]m6[HYOiNS1kYzKӃ@욦>| Tl6[rwvq4u-1M~VYY __>TD~`UUUVTTnڵ8po?4=ӏLZSS7M8@mmOqizYJKKo&JJJvv{PizYJJJӘVZZڧ&jkk뗦8_oimmmTUUfn:vᷟ^@imL;|O~n4͛GHa.G}<?Ha8vrssimՖѱX,TUU1|~{(^s"۳]__OVVdԨQAcgE(`m|>'!m ?ׯcfƍ /ӟX'k%Zw݉'T"1PYY܅u}&_z&dӦM,Yg},X@)F::O?wѣկ~"\***ᥗ^bPTTd.#%cB` `y<._Lvv6[ne޼yl6nf2d p111dggSOq1N<~(^s}e222X,̝;ۇ㡦33Y*Gd2yj +1rss]f hwp%Do߻2LAWCt !D1͸\pCq$BblB ^` !DX,҂%D1X"h_$m2P%,yCмόy+{)A9л$A gμ`+1+{(=zk"B"c` !D` !DX,҂%DK!"` $B%AXBA$":b& |2eʔ /p+.PB "*(bnzvEQy(EykZgz(BD/% EQ .C)bm@ZQTUUn?)g @k[t` !U.MhcQU'+*_L3loTU]!DK!#QAQbexs@|\1l qz2K!G0ZQ5톟Z 0LQn9]ZF!xEQRE(cZ wQe,x5zEQa}UU_ t !p/3 8',C!X;[ ,vW7:??tO7Ey[UՆ<)!,,BbE(Bb` !BXB!!&B!D?.UU0IENDB`genometools-1.5.1/www/genometools.org/htdocs/images/diagram.svg000066400000000000000000005163411211610345200247010ustar00rootroot00000000000000 image/svg+xml Track Line Line Block genometools-1.5.1/www/genometools.org/htdocs/images/example_ct.png000066400000000000000000001063401211610345200253750ustar00rootroot00000000000000PNG  IHDRX(DbKGD IDATx{\Tu?`@`IE] ʼpK떥߲ܴeehV@e E3rf0N 08 |<|<Q $;"""X`IX`IX`IX`IX`I ߏ!C !!effbȐ![0qDL&q_EEƍc񨪪rK/ѿ|0J"֮] <Ƨ~*k) ,!==Xf RRR}l29s3gҥK}/2Ǝocǎuט+8p3f'|_ȉG}ok._K.^Hj,bAV/ AK. qqqNlnݺ '|UG*ntuwh֭{x⾢"DFF"""pe}tnGBB!"jի1p@x]ұjLx7Ķ-[`ӦMHHH@vv6Z1j5ƌ-[H/y\p+Vٳ=5RX.x"L]v?@\\#;;)))"##q%˗֎۱cΞ=EI=,""M6 G[vFJUUUo`С W^~;qc?s=No8^{bϞ=_*հZ+>B\\ҵ5R: Itv:/^m'NFoC׿5/_Jz*~ߠx 1bV _pe= z衎"R'|nG=ah) ,""""!X`IX`IX`IX`IVۻw)+^&P"^xHr,$qш۷vMDDD.֮] <Ƨ~*h4BVVOqBMɋ/[|/ͯ9裏";;~-vڅIsx{@@L&S~v!K9sʋ-w|cWRls>vz)|7a<% 1cٳb{g,^ߏ{OlCff&f̘3fxQGxgpXgϖo 0ԩSqi""""HӦMѣG%Sɥ J'|λze-w|]yϱGc˧3=>>ݻwoҞhG}8Ih;|rnݺaӦMHLLl~wv7,K&M5k4i'q!v6l@lldqe9`]v ݺu%9vŖ;>α+)9v籛Y0 ϱ+/9v]Iϱ7vgQ9DDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$NU`KgZZ}ܹsؿ?N>t;//?W\J@DDiN\ jvTT0L8|0.%""R,Y 8q ,,a_ZZ~_r PRR"n`6q)BVc0 n吟Ƿ#<<.]'OB ,, .s XV:tGIIvTTڟ9V+z}3Z`9s}E>}PPP.zFBee%k |c&""RNamQU*Aȑ#h$Zz\|/^tZIwh1)EK. [v;)޽;/_v~[:bkڔOkjjjĿ q=f"""-܂'N 77aaaw">>Nŋ={7ܦ~G:,wߖ;wΝ;A9rd~@yy9@h4v1)Jpt6&>*..Fnnn#+41ܠ3v׋ϱsJ-w|sz^nC4{ק+LDD(X,8r;DÇGpppWȩ#lc&""jQ`EgTVVʝ"t"$""" X`IX`IX`IX`IX`IW`&Mrh ` 4< C#"hhDBBqVY|y`4a41tPt޽% j59rÇoÆ (.. u zz˱`q7kk\`T*,Y=\}'OFee%n6l߾]숈:^yy9""": ,Zox… ocѢEh<Фݻwcԩrh? ???deea2eGDԱfϞxL<[nj?lvܹ?0,Y"^+?CPPPQgKVW_şgl6!"ŋ_c̘1X~=f̘ׯBCC?C Ahhh}ܹ'NFԉ:-ŭjpbʕxwNHvţ>}3fmP\\VIMMŪU3U";X ^{5⋰rBD$}AӧX ==ǏǸqv:ɄaÆuLDb`ފ#F`Ϟ=rBD$[bΜ9t͛}>>>HNNFppc3gbarq;OTBÏ- QYY bc $ڵ 111]e޽-3~DHDDA0f+"Nяyqqq8iy%"""" ,""""""""`Y,,XBBZ~31 i9c_/KKU^-7⺨9s}u./))OᦛuXL __Yb_/-lE%q3}DAllbWDDDQd'N{;"NER\vM>W`Y,\}^T:^I QTT+W@Q\oaΜ?ʺ3YU^TTT6U`]__`"pZ磮Σ~S`5/NS+"V+ PUUvyMŋ/_"##uuu(++Tvo %ngh/..N%zѯ_?_R6W /\"z^Uee%L& I?~Ut:Y򩯯G``lY=QZZ U Rrsuv{BdԱs}֛oJ Ybs$9s=0Pvr30:MDZ^S!"_?tܩu*Z}qT`ĉ#'' /ɝ Q0q8{D?C߾}=GQsvX,rBD),Xα+)9vbXDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$NU`KgZZ}ܹsؿ?N>t;//?W\uw>S8ppA\za7|pa2܊ODD䍴r'@]wZt;** L&>|wuG1U*N@ii)mJJ\zݻwwzKK.gϞBDD-d-jjjp 0}iii/~bX,r-BIIlƩSP[[ Z`0C~~>Əj7VϻtN< F0ƺω'`Zq!%%%QQQjZNܖm,44555m ٳg1bĈ&[V\z#FѣGY`bZ`9s}E>}PPP.zFBee%k s =zYYY=z9DGG#** 9ԯ èQPQQ,j|;:V|4QTTv\f;p:mc thݻ7~49aaa󃏏L&˅/7*//GRRÙ3g}* AcKKK8+\\!22.8`1 Bdd$"""ڔ+B>}ÇorL[V8p09rdbccqYlPTTcr zݦyNamQU*Aȑ#h$Zz\|/^tZIwwg\ۆ5X ܹs8α+)9KTz VGƷ~ F#]oχNb#G8!>|8@N-"""j;EX>>>bo#v{rADDXDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1XDDDDcEDDD$1X={ĤIڂſ/X 3<p8v֬YȀ^`4$KLL7ߌ#&"j١CkP\\6n9˗/w؞7oF#F#ݻRljqӘ+Ն?}]y0~~~B>}ÇmA{,nwDj nSQQ$1 !11QٳkuY$g|Ɩ;>.ď?. X,… s㵱+V)))vuS8Wv#?5Q,J%Kkoɨm݆۷7Y@xOKt_UUzѦZS^^NÀ-[o%pBXhjkka44oݘ:u*qRSS8-iJn:`لa޽ 8y'oeݝ~Z Çz(|͂W_m]+λ|8v׼Bpp0i$a˖-B}} + 2DAlBRA +KZ 8^7!ƹqܮ\W{ir 9Z <9jxp|g}wy~nd`4Q^^ddd4 1,YdchŘ2e ۇضmPdffC Ahhh}ܹ'NFxݔ:C=$ƹUG ^wuTTT 22ң~6m$.t3_n6g^=駟Ɨ_~={3fm; %%~RSS1ydίRƙ6m`ݺuuUv#-/رcBTT(5h?ϟ#º:O>ѣG]srBUcλ|8v|nu&66Vg6!::q\݅~Μ9#_}uS8-5Q#z+FSTsğ<5x饗tRݻWmۡRac5uV̙3:ؼyvx7sL <4]t~u*QGP ȝDG`hyIII8z(t:, gl+59v HJJ®]Ӧmnrל2b`ɓ'=.INN 1cƸUz4QgGDDԼ8?!HEDDD$1XDDDDcEDDD$1E2LHN|?u3oǎmÓq6c- v?6ӭX韤"8ĿQV:L|b5wd=Voøw6Ǟp;+ܗ/>K]K?|9o[Hq]l\5 Ν}7~5|/uxfw7czl~qUv܄QGk[㷷b:EX&};V62X w3=nc.xAff'Ctb]CjM?-8VsǾ=O[5Ω-v[`6Wl[z+_]*ISt߿d)5\._nnk^\m͊b*|uyko*tk =-:[`ݭo\\WbغG?ȩ-OCl\?Il9G4RҾߏDIxwS;Z B)M}zm_EHnyJY`8pG]ɝlˋMߤ=';='v_Oϗ:V1LS[ޱ͒}8zG >a 5&3||:O]V _b:Z$o\yЖs*#:pA{w9^,o\TnByۺAAuP;]7xzu+`=e^~{rݕjkk:Qa}q{Wf@ũ5߽#$p#y]j7iDeY׬7:/0pz6ٗs*#FuWZ(((@UU}(5 b6fY Su54 \ĚZ hv???Y6nFeRzx|ã:]oW٤}%ǥZߤZդߪݼv)Vm6|Џ+r}%x)XNzKlt99xvO򔫽is8HRXPnDUudk)3¬g֠Z?]fX,p}D\{`QQڬl(**^~-[3MlZ :JL&^GhhW^Ns܀bn\V .{O}}=eRYp`YQ_oEm] $綴{AAAnkuX^ux?VEOGcn鋽6n_h~gVƋ/5ѻw[̍۟xfV~|Z _'8j5||}5fykW7͵xF4`wǕq38`w\vø;#n7 N#o+%ƍKիTVI6o+ul-t:-E`6%GvO}by睸cx<,UT:Oq Cvt/Oϗ:VG^&M{ih/᯳%w_O$+j.~CTڤ֎?I{\BtF.|’&GC}t5+jӧ)_ ܩȮ{PUU+nOKy "|cud>/!WÒ KDq k9潶b9~p뮋UUzMO>C=5W֛MǎGoG_???W\.EXkvؾ )UhX?TV:TO/+a6[ՑG~>~ᨬm8ԈG$﷫80f,9t_G{1wOC{@`**={U7Cg(%%R\k^Ö w*v** ,S{.V/u̧uXm0 2ފ&5o.ޒ0ǎ:/;{SSM~mKvSq 5ך㣫pv՜ڢͷ#i*|ꎌܼRlu!=Bzcđ˽Q6rh3,]w n6xܷ7CW48`Lxtv0fCm{zEi:=c뽭om%;#O[r<jؤwVsj˸=:]7sX,{:+II*n~DG&l׹k !_77~5|/ZB|{vKPd8gxxykry A%|/u`6שRdxK|]yϱsJ-w|];GDDDDX`IX`IX`IX`I:tF ƍ[=g̓hhСCѽ{wq߬Y!y8p׿Rp\0u?*GA9vŖ;>c4h{= 6 (((Z<' &^{ }l08q$fdeeq}OLk׮aСx饗Z̡-5̱;{&""N'=-BHHΝ Xp!QVVZFDGG?0xXlٳFƊ{qзo_ĉLQX`)ŋ_c̘1X~=f̘ׯBCC?C Ahhh}ܹ'NF|gb%uzHs#ш>}ƚ5k}o~o~TfmX<۷>c l۶ HIIiTZ PSS DFFKE֭æMv`FAVVv;ϟ_~{Ayy9+dggCRfARaʕPTM xHۇw:}N x7nZ~rrr`20l0IopcVVЫW/cj5.],;v ?# ??yyyx"qOQ xHn݊9s@7o 99fΜ#>>^\SǤa5x饗tRTWWc'MTy.IAA9vŖ;>cIIIصkbbb;)) GNk8-Ŗ 9vgA0f'OT\y3#B""r*..ϟ2q:`IX`IkHd2<A=nA֥p~6Ν}>>>韤.1G-ⷅn?݌=!mg?{c7CpV^V'x2+K;0X`h„1ѧg٠m}7+pRg܏&f3|}} _^k~p\{1~[YZUT].s9b7CtbwIē{s!H'q755=CQY]8ZM nSl2}/Bqr7CWp9rw&w*.;[1||?DOI;83}2SyKMM ]&i,d2a!er3pj+xϓ:8+ھw=ݺushWjZm Bʕ+nX`)܄ b\kXZrvk?^_2>{|}YpW{ C ֱyҡ] w n?uOiچ2DEBѠw|m,~i  vmM; ۷}'x_ جvjix_Wŗ:F F FPx:fY~nDXX!By睸cx tXDD ڊa䟗;6noS%Hnγ7ӛui)O{;/b; o9ʕ0- 3{d8ҳWxcǣ{nۡQACbۆKvjk/7o[" <]λ #_lkΉ'coؿ: էzJߓ-9vŖ;>α+)9v IX`IX`IX`IX`I:tF ƍ[=g̓hhСCѽ{wq߬Y!y8pȑ&,Y=ů9n?왈Ht0``ѢE ܹs .Dxx8P[[ шh|޽˖-={111h4IMMuSrr2ܜ"7]u4\%WJ;]>k^|E!88X4ie^A " l6Bii z%XVA7l.q"""87y0|pq[ w}թj9EDp/Ɣ)So>_mЯ_?"33%%%2dBCC[kΝ8q"4 >;.qz!1΍l6F#QRR qFAVVV[X`bccG}}g̘m۶)))UVjjjPQQvӰH~ݺuشi`׮]0 be1|سgkA$!۷ N>-x8~8ƍ'֡L& 6 ~$''[o0{ldee!++ zr8VVcҥ±c>9Dn,""ۺu+̙N___l޼Yd;<9s&xqyjj*N*ɓ'{⥗^ҥKw^ad.G BTVV`0(2>Ǯrؽ )) vBLLLb'%%ѣtrל2 S9994hƌVsI+OuF|DHDDN]&QG,"""""""" ,""""q L&#(}m6yúُۆ_ֹba;T5&>H\ǻ1'Ķl~qy$Oޱ_{eifs ,""M &v>u6X`}f<>s._1zDqltˋaگk/7o5+@ye.Ry[l.x2vo>"$""s zW7 6fغGt(*: B)M}zm_EH;NyJX`8#GN%``+19ٙ(I<8itg枿o\yЖs*#956rk$™L&y9|YT\v&;t_]] RyyRg]7[n*U-||[QksmTXX"\rR} ,""0AL>>k KK.ntKg< ۢ*r}th7UW!:6o΢lHmU:ժ&oFV.y㛴v\wZ磮Σ~X`)j7iDeY׬7:/0pz6ٗs*#F%/]yjUUUn4)ԌOa3kPU] V ??@ n7~k **V6 EEEزn)^3MlZ :JL&^GhhW^Ns܀bn\V .{O}}=eRYpnPVV&<t< r\XDD y_/ɧW:}}wN!Wۭ?i?͵WWPXXPh4}1_o/MV7Юz;~ogaSZR> z| XjThhhOl6Kҏ s\>"$"R;w ;NMjk% !t>}Pn/,(*,i/.q$>Vq C5iZnH^[?^8r&UUzM~Y8x?ɐUyfzѣn;-i}^XDD `eXrⲁ1c<[X2fcr!;cFc TTzo"88QQQHQO,. k׼-{AT\vKH;z>S{.YgYI\`1׻ݯ̓pTM_XDDuT*5T^N{:GXUo|8y=A.rXIٜuHcbałk<ۛ+kH`Lxtvmv;4= [<`>Y,=\pxyNXqmqKPd8gxxyazmrM9d׿ց\TC/QYY){2%>Ǯr9v%Ŗ;>.؝#B"""""""" ,"""""""" ,"""""""" ,"""""""" ,""""""RCh4"!!qqqظqc,_a{޼y00:t(w.5k222$1???1VRR9" hr|ppp0ϱ+/9v%~LLpqAb.\hnݺ5oŊBJJ(XV^! <}Bbbb} Vsq9g""+//GDD@aE!$$s,\(++Cmm-F#ᇎ{n,[ pY@H'55K,iu|ssvHfϞx;{/OV<;w.v;v܉cǎ!44VBVVVPPPd@ZZƏ.q8-+nl6Fc,K挨5,nŘ2e ۇضm.߮ IDATPdffC Ahhh}ܹ'NF|gxw%C=$ƹQCU^^ddd4MkHj,ţ>}3fmP\\VIMMŪU555@dddiX$n:lڴ k. ?>^~eٳǵ HAOIcIIIصkbbb;)) GNk8-Ŗ 9vgA0f'OT\y3#B""r*..ϟ2q:`IX`IkHd2<A=nA֥V[[QG>>>X*?لiݎ{BlkK-ŶX,H$!b[yY&>[5~{k-k,lcEDD ĤG6f J7Q6(RZT].s8fu YλKT.ow@n=ͻ"<Bʕ+nX`)܄ b\kXܑ-ۦ*:f=;*+"AwHv)~}\<=g7@aa!l6}""R jjG *}-cV-[rߤӼ}G]]G""R/am:Q 2eԲC;g}uWZ(((@UU}5 DD 5cSTUWCPg6b[ #WkkjPTT^‚Bv[_ԙ/r/**R WVVd2z=BCC%oz*t:Kk]3j5tZx\V .{O}}=eRY06q 6 eeeC@@@s[=QZZ eEDP7 :|zCz'rJ?z,OJѻw@޽Z``hҏz;~ogaSZR> z| XjTh5Mjjh4E`ynK'>;ES豿7>uhKe˔QF.|’&<;.aB“XZ}A``}""RV,Ǐ ܩx߿, ??V;>=+cV-+x&=-i`װo/ȝ wvh?X2eԺ)gh&qO1ݞEEE!""PTz,J nG"/L'b;I7cߣVΰ"""]g=֨dCyyLٸf`L,lXwz,y5 DDۻ83]ooj,Y.[dKMmd @2p2!  afL$L-ɻe-fɒ˒uRKjI%~G:TWR^o'lظ1=d{WW+>gkӉ0|'&&,j㱨`9wGJ{՚MxW]tY}2Ov7\b s# ^j8Cttt>zi;}e>!B""""1"""",""""1"""",""""1"""",""""1"""",""""1"" q{EQQ/^ ⷿ~{AQQ|rzu]طo3fl28p`ȺB̟? 3%Ĵl,{YKÇEQөYf WBrί~+tE+ڵK),,J%))i|\=3QkmmEJJ b // ..?҂^!''ģ> 8}4a2tOgxG-ƍqy:;;n"`GxS-Qn(GZva*1117߬ J(RUU,]TQEqJnnr%EQYR˥(T^xII'%%śr믿Y:<<\),,TϟXVtW\="" q?O~lذ=N@vv6Q\\wyK.E||zWqM7d2~mlٲeRҗMg0ۍ"dff[oO?]g2PRRӧO#+,X N@cc#Q}v7ntV^ w 99F۶mCII :4@zzz{hl؃ED^|E}ݰX,Zx°qF }ƒ%KPPP|}v|+_gǎ[&=XV`Ɲo'~9ie>Hgr!?BΜ&\M{?{;@܀騼4̦L.+߯4]\cEDDؽ{78lj2!AOg٩}IQ}SNj|_y݄s˗u&,"ݍϸۏ;+vͿgЋ0< ^ ><̚5gD׃ wDxūC}}=0"" q_E|#,lzaPxuwW'bS3l<:PUqr=[3Q{{;v'-XDD!Jw==fA ^\'߳eƯv`+eޕj{bŪ,;Uzqr4œ9' Y7|sĹ\.ԠscBԝwO f6q-WG4G]MVBC&BDp뾼 %Wg F~&}~DEEggnu ܾvE9ey,'ҥKg`5/=ݽ1|Þ=QUY?$͆,Oh; B[o (No/]x_GFEcO{L,r፿YGσ' 9턒äO=1"" qx'¿8YKُ}) NGr4]x睊!Oh#ljf񊗞$&&`0MXDDt2;|aZjRs۷S|g|DDDLh? 3}^oy)7nOjk z󱂃i ""6l܂ؘߞx`2NMDXXm>}^O5XTG;#j&H';Y1E_5!:::tNLIe>βRNe^!`````{/… vg?y}=EEEX|9bcc.۷Ot}fyZl8׿5/^B,Y=ܨy!%Ĵl,{YKÇEQөYf WBrί~+tE+ڵK),,~嗕kVTEQZZZzjԼ\=3QkmmEJJ b // ..?҂^!''ģ> 8}4a2tOgxG-ƍqyg}< qqq{ƴψFo; ?T<,{`|A%&&F曕^xAWEQK*(n[U.](=KUUUJrrrEQ_ /0)餤x\{ו5kx_xK{8ED~ӟbذa{9ylǣ.]ꫯ⦛ndزeˤ/}ɛ`nEEEĭފ~g`GQQGIDc!B""‚ `|@VVwwމ?hllw1voߎz ӃvNJ:$g}v;L&JJJx<xp oߎQ؃ED}](8qw| _Ν;qal޼ٻ<,, >9ub |7NZ:W|EII JJJ^шm۶|;}݇˗/N7_DzaQ{qwbj ƍ3oK,AAAw|;v[ntFcZCa۶mx7pmW]uf3L&x11 ;::`C2}=v,/(Xl^{5)e˖X,Hi ,?"$""N:yaÆ z=Pp5t#_ .DYYTb`8qD${aC>5|3?nwDXXomG1/6iy.x-ﲗ~;|1]ҧ>H';'6 뿈|.I w>ۏy|F|wjo'~<&gwW'{]}&=#̹jBT:ɟ`aư_yi:'Nl$v=N5Õa8p$>J@݈0SNj|_yl|㷏\T>d ̴,===ޟN ,"ݍϸۏ;+;y|VN)oa֬Y> ^YGPpf~:ףIߥdED⮿GX2beuxغ:Xp=m*ۃ߸gywW'b6tގ: oQiT}0 Cof|gϖ!Vv9jz{{Q]] mQiT6ݜ;dh)1~ sX4dݩ}Ջǵ]λ8˅tvv{|LQ]itvul6#f9p:0&GEۍzgߞw9FX2p뾼 %Wg cH>NFx<5Z~݆u.whiim?DFFN~tYXDD! |{O,ZB.wE}nyWuu-HOdBZ w}f˛nnC4oCoFh4,)?고?S|+~ddd B&.{D̞={ܟ!QZ~=ZS];_ vVƤ׃wޮ|⥰/ş' Ε;Q_wqȺkqmw⥈K\6ctd6qoQ{񟡲cT;+cggETU!WcwsM[>ƽݯ͆,Oh; B[o (NG9~O>sj35X<2*{TLELL a᧞`H<xl8t|{qs5>;C$(68L$&&``EDD3n>` wLt۷S|gµ8_0δ,o,""0c-[E>U;4iN=I&oyLx3i?\I""z?a-n&## ?{9Ns`՚MxWr)>,EQ|O>Hi!!>»鲮d"eofF~p93%}=v,;Ji;}=xeCDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:3;ϟGuu5 EAvv6P^^EQx IWyy9̙39x .]Qo>]vyعs'l2ύx7XKK N< EQ`0PPP8@?=>c0ͣ eeeE__y== Ezz:eee|ڵka4J[tWR Aףn"k IDATk׮lF?jkk뛚PQQUVjBQx/ܹsX#m V5 .d+aaaXz5V+Z[[QZZ7`Ⱥ`0 p:~a0~!O:u`0`Ϟ=HKKùs琗 ֆX GD45:< XhV+n p8PZZ^@AAۋGrb;;vܹsӉ$&&ٳx<ؽ{7"""b F,Yv}޲FɓUW]K.K.Ŏ;pu׍&ȑ#PgIsXt)l6[@TUUd2aX`O:>o999HJJq?njjš5k8p7ipjkkQ]] шŋ#&&Of򔕕d2!//oc!''X`z{{QYY >=UWW{{OEEEހ/Р^e4va0`0Ӄ,\p{P__BZPnDGGsċ@'OD||<. p ddd 33555(//"fꫯF{{;JJJy桲ҧ%I"!!]]]())uƼZ[[_\\*++x<(V@å5++[fq \r闕ӟ4,w_j*>|p:#Gjkk F[7ddddرc꫑'OzoF;0|2l }u;999HOOG]]4R|jbŘ5k޽fK,ȑ#>}[bbbp1又J3m&֢ شiӘ?܌%Kx_bXl8}=0ҥKTe;z{v;:::r`4aގV,ZhgGJspO<93gΌ+8 55)))~rpft@EE>O ƙ3gt:=3Ӊ>8NX,l6# |Gww7N8}HMMǽFJc 77$U{BUPHtuu!::Ν;룢Px9EQvZL&]WFl6"66hii˗}Ls"X.]BCCjkkCs*EQpQdgg􀍶UP˽Rr8Nqq1ǃ~ۻ.%% p8`v2 9IŘ3g233l$@l6oRRRp1Sp 9s qo~|ӟg*MGA}LCVVΜ9 >C$SNy'䪓P]]}p2i`e0upػ0 d|t񈋋Cuun\fEQ]70xK}}}޹WC֟9s6mȜ@Çp!Ϟ=:9f#+..[RoP… hhh˱vƢw'@̞=.Muo/^w… 툈54%"+==. {듒vqA(EQuh"-B||<-ZbTVVl6|g`VVvލ(X(--嘔43P\\۽P^^XL&FFh"9rUUU={O1pX?z(n7E;QQQؽ{w?qe={;G-??GA]]ýCl]r|ϟ#,, III>*** . 6; `LQZZ!W'5Hn֙3gPWWۍw}磸OhDaasQ^^0L>TQQTc;\HD pW+TGGǸzTWWh`%455m* WnlllDUU)K"33!{;`i;}=xegLrE(++mX,`gc.;v &iɤG4Qcd|u芉3X"P"$""",""""1"""",""""1"""",""""1"""",""""MDVV'ocXd l##{嗑|'+W-]}Ϗylڴ ǎæMm۶mݺ~!>#'?֭"""]7xիW#55;vk_[o[o:łl6GŗeCDDD"7ps=oq{444g-_{cY""""Xp”u 7nڵ N7tE~lذaJBDDDWX㑚 . -- HII h@=^z%\{ػw/EQQQ1U ""+ܴ>-[W^ w^wuS(**Bnn.zzz`4a435 ""0Azz:>x/^]v?q@t'֭[?ϱn:_O<BAQ% CzSv}ӝ졗vgYPJ;+?ӮhcEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cEDDD3XDDDD:cED 8u vNh3;DD#ҀUϞ DEM]hfae@Q:-%/N]hauxc貾>\TTQjiX;oN9guL=qB~ !+Xk+rŌ'e(d>`Ѣqp40oOiR 6L`D?/MMRŋ@i)|`y'Ȳp`&+Ѩz{Ff̚LXW(ؿ_Z H(+ H ~8yRZ}}g>9&ËX|˖v;`pHOHds2TXW's7dUj*+sY $%,Euur<;Gx&E€ /I(,L@vL** ɿV.srA/˰( . Lp%Xp:k""Q`4;;k7μ*/s#:Zz2A*+%\)wI hx9-+k(w RdkUU\uuIo \ JKE8]Gܥfx=Lݭt U^߼<ݿ_tuwz-Vp&Yݙ30$JEקͱnCYx` Yrt8dcߞ%{\\<ڤLS8vuIW]nRpu2-y568~|;`㳫K&tj> }ڵRW\, y^~jp 2ܻW#AUr|'==2ܑ;I/l@DqJF @V|)U?:|EY^m uXEEv oIC_֟:%_'&VTaa  r7Of(֘k˓}u':Zap 3S2qR75gb%kHGȅ^.ҺvdJZۑnvCdp&sr$XY׿ʲ4Y6`K/=pzv,q |.AqLTp2D7 Ѩs+Wn|SN>;Z:zTs_VTNn7;r%Iub2ɝYmMΛTy<%rvQJKZ F<#ڄouhƱc $\^.z.^.#ՎU)gJ*f٧ăiEιCdS7l;ʱ`2W_(R8%K_Ϝ8!˹seM/7F{H=uCSS-FDȱrIpǾ늊g>#{x\/)|%u"9 ?nڵTulO=G2pJJZ-mm0LSe{H`9 A}Ѩ ))5YR"_n _*pʁޱu#(rfd 8ɤ%m""ddȉ"F3f|CH\S#>QN.[TNЄ9\.֌?;ȾIN|.z6 RfeI/^~=|@LX.^=#X\[*Tii lCZY͓UI]tug-﹦F{Y.TTh- ff y5Z#KQ1\L/M8;5; :F 6RR&C -Ҡx$_{6>Dcw˩Ǻ˥K7J0\Z}oZLځ_D鬩Je? )e{*XcghVݝRGo Zϝ? PX%2-8gBNuv%)wYT䉉#'l]\mڤ =o61Y/_|@[m) 2쉉 oWC/>Zw,0dkjފt= ڝ655-FKN.%EZ[z>֡Iʞ7R߼ddHy OuA!Z'|lvHN-Zw~ AO}jh1mnFe\I|ws~&#ÃydrL M\pd? ޳g%rN!@ismHe `mmrLSS# =WZ̅ Cֽj`r8;uu2b<<F:lfե =ƪzf T7x~ ҥ(KNڐx^?/yFOxRt:eTeժ"TuhGʡWpJI eK7.i,>3H+}8?>>;[.Ιv`׎nG\,3#^(ZGwu_z3&5kV\,UBG9H2n'j/͚%gY6GC]zu;pQ{oŊʫڴI4Gbĝ<)uIxo^<_ ${=mJ4 H׮:gc^)K =#Z:d5o{N.Ε4/\3:,̷Vԁ),JN F070Cm6  k2~凉Y4:2R۲or2p싁 # 'W={69>IU>x.Z0\,߱ $75I/-U>=[=w^iypom|wf3>w8;#C55Z@jSܱ'xdgKod3ZJS`&Q+ݾK'HO:7-M x>XsPdam( 7W*:@Q,0=[T3]p͟FS R54ȺE>ӵREEIŨޮ{5?U. If0ʘn1,hkQGkO;={ggTaaR={gdeQ9~ &CZܝ=zR-(:p`<|_e?,Y [7&s8.9Y{^Q|MMMGDH>MNY[>Ec𼡉Pr\ЏD}܅ڐ@эpkd47i2I}sz^ꉸ8'%H?{V_g;ZV6lNaa>|Uac HByoN;zfI}R^.+Q&10Y=C`6 53VVT»vI'Q[Zr0|{u,=/(+ m_\`$}5Q_/Y9Yy'ȐD{ڻy+gɣh8RG@]j,96"#eIe7glߖ 4&d:rAlkn|K"=]_Z=x29 = 2$,*/~FnZ cbkQpHȝ8a 6"B*"M<ʹ640[#*JJgvksZ,{M3g` eIDAT MQ@NmX2۶8g p$vncqnY:MM C)YH*j֋@\Ժ}FZ\""fuPzOwܤ&_?Q #YYھ*, dcX&"(ѣz5DQQViegˉcQOV+D7x&RS%jn:!Ӂ?VT `L9锆#F6|K=rDDhCv2dxv7xWj@w萖NZVw:%MjC l5i?R#վ}~SC{ys7_sbJpGHE4oiT^{4Ԁb~"߼yr9# j1bI4ԧN%[չ_DDwuvJOJ||h Y]8ΜAV9y#Zc!fϖ pk+8M\ `a)ȅX=Nz͓sgp:TG2W':Z/C*%*guj7%EA>H j F,Rǣ=&%EGEIvFok 7'%E @SQTWK]S(` < `l(GX9]]2]΅!$&jÉcy,…OV[D~l,>Zfke0hwFEɅ@ӏX_΍+&ҧ:\1 11{>-~Æ 7Mչ}VŋXiioj+}nn?zzd:BcΛR>X tN݁ZZKtN8k55.݌4zɑ_sshkkDZcR\R.zifJ8a*-:n_^FN6iUWkERa.oDZZzz{Xʒh!DLP J2:::`<"졗vgYPJ;+?E'""",""""1"""",""""1"""",""""1""""ٴ ۱yf,Y[lAggw/|W^aʕp-""" v#hsMDDD4` G贴4444 %%>⋸kw^(ףbsLDDDkڲe_~]wݐX|9rssш.ӮeKHII믿t';ux)/`.Ů]]Ç{_7)Q`!LHg tHg tHg tHg tHg tHg tHg tHg tHg trVDDDȦϲ^NeP-;{r1(;DDDDW""""l tHg tHg tHg tHg tHg tHg.Q)pIENDB`genometools-1.5.1/www/genometools.org/htdocs/images/example_ct2.png000066400000000000000000000436231211610345200254630ustar00rootroot00000000000000PNG  IHDRX)O\%bKGD IDATx{\Tuπ╋!;r+.j嚭Y[>OݶQ۶v4/mvQU3HIS5D4qP39;y^^wws̏A% """"ٸ;""""gHf,dHf,dHf,dHf,dHf,dF/BCCf#{Ϟ=Ǚ3gz3=ݻ E|||8qDo'BQYY)hϨQ6gAmm'N!CHm9994mqY)Vs:N!DUU5Xb7o9dqq!"00Pjs3Fl߾]!Ď;s='9XY`uÇǎCV=I_z48x3fڙ Ǝ+*++-X2N!:.iB1vXQ\\lk&v%pq !~OKKڜm>>>Y!Dkky,K~w}W)))kgװ3Jz!۶mIIIR3g;vBk.,9x?.Mb6΄sN!_HLLڜmB!z7oxw6G+ ,-^X J%ŋ6a]xQzO>G7^">>^I`"&&FDEEq ah%E~~L4h4bԩ"::Z$$$8x??&1gE||Ro=z/~8±ǪB{LIDDDLȝHf,dHf,dHf,dHf,dK&_|S5Y pf':~LpE{+8VsX2Ncu$|EDDD$3XDDDD2 jj}Ѯz;#X!..;vanruuE~~>#t}Y[Ц!w[()G{Ui1V%ׯΩ((\zZs碰ǎÖ-[0o<蔸A/00K1ŕq%b-\l+)[JZ\IWR.ƕr5\ŕqk۶wA1fug5LW,!0~x>-\[nnomկ~}AcXr%"##eۯ]TիWqAx{{į]fSZ\I8cJʅ++\JsWR.}ر`=nh4])-\l+)kq%bk\IWR.Jָr5\ŕq%b-\l[۶7OɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`YsNY+..޽{QTT$>|ܹsFvv6p˅z^{'p3(++ĉ"NII? $$ÇTTT'NWDDDtZ`555 pqqAxx8|}}hPPPqA<$''_~pʠ Z=#GDyy9t:Q[[K.ÇQUU^۷9؈cǎAA &Mɓ'ڊ}!<<.]Bkk+1rHONOOO3GZZZy?.111""":XǏGxx8:!88~~~:t(0x`0tP 6 pE!33 'j5 77qqq̄VE^^åmSNHNNr={aaa O?^Dnn.=ڹs'M RV}t^^^PB ??_*?`7n\WO!Y`V#Gľ}ₘ)^__b477CףIjST B]]|}}!@PPd[R2x`ٜ1V@PP t 3gΠf 11>:p\jkkFiZiGDDD]gK h+R ZZZ !ѣGVW&}9Rz,Ǟ0h v փэo8ץ`FiitTVV_x" 6hжPݖy7p@TTTHQ VLL pq 88B䠺DDDrss___'VPTGNNݖ`8{, `p3%%%2| ^tt4,<;j"** k׮wJй%DTv-\]]/7rH@nnu:8 ,"y>^Lz:\l+)[K/$/V^-mNnn5=sL|rh^ZV!ĴiĪUFVsɓŪUBZJxzzZ$QhD]]~k05Xn/^~ɸ }$$$R.+)kq%bk\IX+)[ֶ }Y>"4jfۨT*s=댌 ̝;fwi>كbu]]ž~I߿[l{okNWWWT*w}\xQjFIIz/Yfaxw{nlܸt~ݻwcժUPT߿?5]7oFKK fϞ{NzOGOg… G9i0gΜN2̚5 ,0 /0fͲ8K<"rv-m۶o-[o?^\Wnr}Y[n?J~ZZZk77.Gԛ"##s[nצV5̓t4 {زe vi]vaСfmoXDKk:R^^'^CQQ o6a{'OZ컠Ӿӥ"?K>"9޽[L ;+W!P[[ 7nwӦMR6ol2K9jO5k,#;uTGD z7n^yO>8 U۷;سg 6X{ٲeo_Gbb";oooͰTt^QOX<3Xbf.9B:ׅ^B~zq+"Gkq%b-\l+)[JZiFlݺl~+9w9JZ\IWR.JMahii;69njj7֭[gȁZ jȱ76uí""""R:XDDDD2cEDDD$3ѣLbpww7VIq%⌹+)…Xo=WfK:4bҏJsWR.ΘrN X ,N`LbMMMFIq%⌹+)ν*^56%Xd)~_aĈfmp|WR.ΘrqܕKwr_em{?"$L<|ީٶsDFcذN!"c3\Ñ#G흊 p?w*DD=3Xf쩹:~Nȡ"3JʫNK,O?kq)u ,"`X\wED$XD aXUPpeVVv뮈ddi8{#F WWWZFqtt<<<oiiapIOwS܇EBV8e˖g_Dyy9T*R${8l< a--- 5;/JqxEE̮ŕr}^TBaILIߝa-\1w%bW| c&Z,a9ǎ-zQ1WR.]Yq%⌹+)|XͶiH!??oCCo1ر^73bE55Ws6<|0}qd.\8g ,";B~/S/;.f{BDX`{/9WxͥNȡ"#ú{" XDD7}ݕ5\EDtc=X*b2Xss?ѡrqܕKO^Vv2R|Xz}9dgg#;;yyy| ~ ;;}^*ر6믿6y]YY?ͬaĉpqq^Ç***PPP'~(,,D||<@RAիR]xx"FuùLZ`555 pqqAxx8|}}hPPPqA<$''_~pʠ Z=#GDyy9t:Q[[K.ÇQUU^۷9؈cǎAA &Mɓ'ڊ}!<<.]Bkk+1rHONOOO0J477#::/_V^2} MbGɓ'n}kk+^X8qZ`?~8p ꐗ`aС(..Nѯ_?СC1l0mOY Bj8dffB"//ҶވĩSpq$''w9Ξ=0য়~^DFF"77Wz;w"11ѤP+--Eii)Z[[-=3'77#F@ll,Z-=jApp0JJJp%ҥK4h<<<Vk$"""Z`UWWimm=rH۷...(..Fss3z=6J B|}}M JFYY9jHIIK ,, aaa8s ja|^766l455!##ìHz ӧqY 0dzgJJJFR!11[cFb___\r@ǃ#F0&00VP"""2eä1|6l0i!JZiZI`߾}PՈETT֮]k;g09S` <==;'l߾Fc5V1n9rx||hmm(wcVٷoōsܵkڼ-"{)k̙3Ŕ)Sċ/(5p#qClԨQСCB!ѣGcsguڕxwƻa1<=cWr~ٵk^W'7B{=t7w%ǕqkE>߯ 7|FB||<^~ehhhZƽkҏ˗/~˓o())Abb"/dOZZ~|||o %%aaaؾ}VUUe5'ObԨQpuu/ؽ/^,/33kllx,7Ę1cV՘={YAAAXd Ǝ[o_~%^}Uy W_}eq|~;Ν;'VTӟEYܾ_Wlٲq 00憰0xdee˗/cԩHMME\\ (++CFFҐ2=]eee3f CKiG9qFFٵ<7n-Zd6g̘aq>aҥ>/W[ojCtt4wߙXdff… &o\\I?~|Cw/ƒ%K:<>>>&*RSS;'?^zݕ{¡CxO ث">>^LDDll/OA6l q!o8֛^zI_^ZTWWKϑ\&9 7oB>ڰa;wpacĕtWR.K8)*++SNӦM6lXx.mokڵkB!.]$6~bbbxyy*0`Y~u]f_k?"OOO M4I!nKјN*&Mdַ 5556xzz1l0.}bEtthmm5)L"v%bŊ駟8֛&t b $z!)n\xk4`g*yh?3 <h4&! @TTTKǫӆN ,///Kឰw^o."""{)SĶmۄmg}X-x#q%ŕqXb])X[[[ſ/cwO6F#Pm_\~]a^`ӕYX b6 _rE߄ ,b}јZ[[?-ho1T`rtw~n6zjF|iVhh Bכs3߄Zl ` `sݖ xΜ9fע Re\xg6.!~5ylV~~~R{s!?rrrpwk***h_ccm=v~Y֎]w~}x饗~)̙2;w.\@hh^f{nz-**СCwމ+W7NZϲi&dddt)T}7o6C_]ǯjEy駟5kXOGg-߽{o<cu6确y;vlg}НiO -?Y'I0ث VzzwBc1b>}>4t钘2eQQQ矗ӧO Z-O?mSa?~'3gΘ'?<;v4>5 5{GcJOOf}1BL2Ŭ<2Xf6m~fΜ)<<} uu ˆL-c>އ~fq[D3$'Z?ށMrAff/[bޏwL_6=~*ng9|Z=JϞEUeA}vtؗ ~&qk= 8Ƶ;N+++p dvT*UN}cquU~(\ؓ:X8+)[-dR]+śaGw⚚+Z ݂=Py'ܟq$ePc>O)wi>>HHN1ۯ ~Il}wAVVY_bp5¬s>oٴ~6,.njjD~(9uzpϬ8x(QZrǎBEU9<=02"q1pӧӾoZ!1d-&qKDa>SPQ~w?0pkCI9vt)>y7WSht lZ!"XIQ,Ji?5>=<Ӳ[]u{P]u A!`¤JMMM aJ[6kǘzMcӦo!4, ~-*8G|'_> ~ݷ>>>n[aG;!BxN'FFDc#j?&T*?ֈCdÇtuX ||h uu8ݷدpsZK1Sナ}bep BN0X7mwM~˗0hP.t##p466|غiZ[Z5Ѕ>z´_'7pqㅘ51lZsws)SEv.{crrrpq,Xand5WT8_v..9&MC~S 1)HIoj=|s;tz=F@ܘu"bOwzM !yx'"2&ݍ}Z Ϙ-ņc ^sHX`݄FN?w nZ9O1pg݁>ɦaO-tf<]_۷!뎻O'%fbGp"uo];>&L2>` <|{m~WfE##X7&=.x*?^Á}9Cz)ޜ@rAt\F +₸duߊeJ0lx ~L >۸dƻ+~J=i#}"ҍi_77%$A K'(B ` '&#]cѧO 0:*֬큇b;[}Sl'4d(Rҳ^w'6G>G,nR~1qq07gҲIS9  ]k+ u၄4JOOа0>I1uf?3O`߆uWw*dWߡR% l(c?k {'RĽ ERjŏtھ O,>}0}l|y=~>cM}S|q-FBN.xgࡁ!wC#X71z=;w`8>.W߾qڧS=֯ݑc5#ۊ:azp}MԓrssuWlMM8^pǏA~{Z(>NK6jżd.jnM#ٸ=$#"i5G cƦ23=eRTQ[WP*~"@ۯ:b,4;Z iٶJ! &TWWK񀀀 44*b|lxRQq" SB@RKvjnI@קTWO7q =h7ǂosf{݉_/>݄0nd}Nhܣ~PTa_7(/q4kkk?[ZZ@iᣣ? ߀jGU{#^_WvmWk 6iŋ&z.Ϭ&P0_Y)᷋3֑DIqKSr =ߞ>kq[X_eFeW`ͻ̶?_v_m{,k,XI;wbw񫅯ĕ~:J\)\Οޯ-[-}t\Iש\9q^۾G8^=X;TM0aNEqo9gN~ l^ t` `А@ ǑûoAup>G,nRB|0{<{8rB|rZzΊ˗-N:. EP}>>xX Wx+o##X7ú39ʶuWظ}?z!ޕX(ؚM뮬;mּSư¹3NL]*wIfNa_Ӑ_fzZx`r5^WWё4777ݬ{mпǫU׈1ɉ7\cxu/T.G0q'wYSҜɸNCwߣZ߀c\JʱSN«or4@؉FRLiq%bk\IX+)[JָrWR.ƕq%b-\l+)kq%bkڶɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`̮Ν;{e??>~DDDܜ gΜ1edd~~DDD;;wbذa(,,Dss3bbb0x`ŋqbРADSS? ..ڞ ɁҰsNL<Ѐ!憄xyyI5 RNfٳpss3죬L߾}aDDDS` !Lh4KVYY&L777?`7n_~xʂV5oQQ ѣG(**BrreSBBYOFRR  grdeeIr'"""ǦKRaРA???466JmGPPj(++ư]gjjj0b@HHMڃ,d, NBhhhYDDDS`mE%hiiAEE.\T!Vo=..,/$ʕ+R~,w"""rlȽYZT[[ 8p ***m뭾:b[@@*zo_G%w"""r|ӧ5V9r"giCRRMkeM>ÿO4Iw||oyxx ::oߵDDDHo߾ϤI,.ȀV5xw%w"""r|!#aEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XdKI 9Csm@S3!rl;8yޙP"lڄT`F{gBb6bb/w&D/KN>ޙP' ?.;#R<M_guuΈ1/Z!{gD`E]~=p<n3"%y胃q〿Y9HK>$;)Ί:Q0IDAT)`ڴS\ @}-5 ؽkZDص x衶c^^޽͋:fڶ xa`E |1裀J -ND]q#0yr2xѶbc,s}?ai;AEʵs'p-@tiÇ2Eh.\hwi<*  oO^)X1!>;piwT#)']3 ̜{D]npyܹ֭kuuo>;r{r2 ӻyr}Zn<88~w"r4'Nu2ram>ݼKX`u--moM@ssEʥzر=Fnnmk򷠈:vm\qs;w=RXdۿdd  H> N`Р7ovwwYzpoxÁ駽u ,5}u4̙j2<9]>̘*0w.7otύȑpߴmp;2c:eФ,Ȳ[њW59_$y3#L׵nj=߿m}UWeԶ/&cH^{ n5y}/ׁ˗;_EΧx=iȶv͸j#]wFDaR65XK@I _ ,״ZZ& !Þ=KNɌX`ɌX`Gs=gT;"\[dfʕDCCSN " `xZ)))ؼy3 Eff&.\ mo6i$+u{ ?~~HmӧO?\]O?ڊH>|wq=R'RΥ;v`߾}زe y#}juj߾}x衇g-͘1Kd_֮bqHMM#<'NHm* sOJdݙKP[[3f`?qF=kuHmcvD1|!\z'|w uꭷٳʕ+-y{{K SN!!!z۶mږ-[, 0ӧO3%RΥe˖!""j`,X'S,L}}Çj۴c7%tRkGţ>*_|E_KD7%! ďdHf,dHf,dHf,dHf,dHf,dHf,dHf,dHf,dHf/vٱ+\]];)-\1w%ܕWR.]Yq%⌹+)r *!˞?"$""" ,"""""""" ,"""""""" ,"""""""" ,"""""""" ,"""""""" ,""""""""#cOIENDB`genometools-1.5.1/www/genometools.org/htdocs/images/example_filterselect.png000066400000000000000000000437511211610345200274620ustar00rootroot00000000000000PNG  IHDRX>Q#nbKGD IDATx{\e? r98( rPqմq}){ڧ]նZֺٖ[kn']5DΉ"B8(~̽3 0pzz1^ŠBlNhaEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2c'|QQQpuuj~޳gbccqKl݋4$''#55RXɺu된`ǎRX˭6NOOOh4h4R|'DRROuI6_~:u*q~GHLLDRR'Hmcm%%%HKKCbb"ztttHmz~qimfh7\dSQQ!3uTm,ӤMo'N^oku8bÆ bɒ%`0!hnnxM֮]+.]*{8qBQ]]-¤63f۷ !رcxǤЏrj5Ν7:;ٔO֬Y#8Ʒ~իWceBII .]j}ɓ())e˰l2)> ӦMCyy9~}< [n-co˗/իq)Y?6ƺqFHNNFEEƍ':="yyywBV:uꔈq+|||ce/ QQQ"**JT*%+쫷X-ImcqB"/k?~>X?~\̚5Kz=kjEJJxW.uZtBш?تm,ĉ?Dffz,Wcx,YF!~9s6i裏;v!صkȐxDllEl3--MܹS!g}&ӥ6֖!FQ,]TRh+ ,\RDDDJ%"""ʕ+6ɓ{4"55Ug~dIIIbVsvx_` 1M$&&ӧ QZZ*qhZxb(xߊ76T/RSSŁ6ֿ/bڴi"11Q\Rp$J!h,$w"""""""" ,"""""""" ,"""""""" ,"""""""" ,|NXǞe:].8ф.p4448;Kc{.qXtXG"""" ,"""" FFo-}||5шXnرCjvR{lM^7MIqG'ݍۣ1V.Xh8~ŕOGI@q%2%8_Xd ***P^^m۶aҥ1 1L6㱱/,,lP1ŕq%b/\+)GJ^\I8WR.ƕrq4\ŕq{u1c @5` iii;w.9"kjj5шYv-L&a]`F^CBBluʟ9w8ooobJ+)raʊ+)殬r+)>k,wFܰqZbJ+)GJ^\I8WR.ƕrq4\+){q%h\I؋+)GrdHf,dHf,dHf,dHf,dHf,dHf,dHf,dHf,dHf,dHf,lعsUWWc޽^:tHz}I#??8{BDDD#oaPL"## hllDYYϟthZ`uww PՈZ-0g!P\\ uuu0 B@Ż=qqq8}4 ֆ3gΠ󓖍Fss3F#2335Byy9F]],X#G@c߾}ř3gQZZ8DFFbܸ… (..Xٳ̳vIJJBHH*BV#%%hZ`UUU!66AAAhooGqq1"""PTWW`0 $$PL4 ЀJF!%%t(..Fll7pQTUU!##c9u 22}F# !!EEEpnΝ;nQ֢zvu h4BT*(s.$"""Z`Cz륟o>j$%%ITWWFRJBxx8!~~~ 99NL@xx8*** LbbbǏYYYV˴"==:Ӵ].t:iGDDDKXBCVC!KJJhsa}9~VT#HFMM(O{4ϩEdq… eee6m"""P[[+ <==MMMŗ t8GsǏGSS˼V\. :g_AAAhll^#""q$0CV#""BAAAGQQgq* (((&;#"''cǎĉ0aԠUD\Gy')) L8Ν9rww(lL&M$MdWTh4҄p6N .NOHH@BBt:oc/GRqeZ4by-\Т=99٢{w<<<쮣<.HLLoɈ߃%ϣF...o2ʩ0MB"""R˶{Wg|}}K#j#=鞈?prDDD4X`ɌX`ɌX`ɌX`ɌX`ɌX`ɌIFdL>oSp۲jժa;${/6l؀ aܹN_,HX`aaaWWWHmgϞ5\d塸آmBJJ CNNfϞ\I /L`R[]]f̘4XfO<:;;na_|EL:999Xr~F#\MM 1gX.ٳgq- 99 dz>ks\t=BDpV;JѸrWR.ƕqS'⦛n7n---2vسgB"1sL[o=jh4 N'k6lZVlذA\wu{<<<B8p@$$$Hm .6lBaa3oooox9VjE{{~{ebӦMBՊM6 |B!-!yq6ϯ\YV.Ό+){q%h\I؋+)G9#"~n wƫݻwc˖-={`0p}wƆ `4R0~xtmݺ뮻cIQThhhߏp]waʿsrrd\{쫰۶mCoo/n6<멪?hooxmfs\NԸhaED%K+FEEENԦR^Z,9~?mۆݻw؟qFڵ Vm[0o<6ӟ=ztP#чI׿"!!xᇱvZmݺuسg͛7Kmk׮޽{FÇ^z%lذgƆ K/ *gy/27r?ϐ-MR/;X`V^-?%%$^xk֬A^^JJJm-󑘘D|DHD|+GX!!!O㷐ر*B8tttXj-g*瞳8gʕ+˱*3g+DFFhkkÞ={, m۬bΕi\N";X`PYYe˖شiS"Q (++yh EDDD$3XDDDD2cEDDD$3""zzzO"44f%;c]YGsJe(wuug/vgED6Z,~)SYuwwn;c]YGsJe(?ﬖ|GHHHŤINhTbEDjkO \cgBD4j""IOO~ ydS!"X`dժgCڜ@JDDpX`Nq5 DիWGӧRJnFm<00p{{{e_텛3⍍puu:Wu`( gaEDxoŊOX1~xuQJRtxXXw7)1#qg#B"BT1#;v|TXDȑ2ןtv*DD ,"+n8;"QI_=_|٩j,BLL4c  ,"XDDïi "~x .Ng$X'sWV.9ќrJjK?)YtKw:r9ܕ\_ |DHDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3X6ܹSw^TVVJ:$>y$󑟟b={f.Z߷~+ck9e㜝堮χZ^gff" h@cc#0|~rrrǏ#88<PT2ez9eN-QVVNjZeee3g(..FFF|}}Q__: !hݞ8>}hkkÙ3gӃhIFGGFt}uuuB ,#Go>̙3(--E\\"##1nv`sN,\XGh4̙31ttt)))!<<mmmHHH4^!ҤekkkqI@hh(j5F# 典A.\@II j… (..^GhhrݨBoo/jŸ 1uT455b}iJJ>]\\p?N- Ghh(a0___c4ip4 )))ͅNCqq1bcceG α'N &&`4 (**B^^wv܉tBp ! F!JKKiӦĉ ZR̙3G ÇKmllDyycpUW… Ƹqp il:nP9r@\\cbbvL}DEEb\\hZuR2zϟp_k^/}AV#))Iwtt===0T*???!;~~~ 99NL@xx8*** LbbbǏYYY.ok[[ewY \\\d,.I`` JKKɓ'8rlmm-Z[[ZZZ}w\}wS6lqj%@NN\\\X^ZO8woѧigG9HFMM͠LczR,xu:3gDKK p@Gr #b\>_MclllD}}=O<aPPŝ .H?aڴi@mm7 455Y_jhh477#00͍?MMM.NTw$/>[[[3bew wooٮ.#&&mmmҺ 9@+ v5≠ f ;XIII(++C}}=rP__Z!PPP!>>EEEpssGT*ttt@HʼnԦߚűcp L0b@jjj*啞>1DEE̙31AVcĉ^FI>|z^"..n9&&&hjjw{%&&F!!!%%%>>5QWDD4tIZb#߱cǐlkkscc(**vyʱ .(xKKq圙rq4\ŕq%h\I؋+)GJ^\I8QQQ7ɶv@RQ^^^WWWnW"".]MroU˳pODDdS9 'w!HDDD#X`ɌX`ɌX`ɌX`ɌX`Ɍ̜Z`yzzBH?vUV m}ҿ8@QQ 8 ,"""RE>"̙3_|SNEjj*~'@gg'4 n~l={\s biyW\UVjjj4<L={z||| / 33111ؾbܦ IDAT}l7?"""9sw}j^|ͨA@@?(--z{6N~/qUWK.ݻM}wtt`0W^7<#xGp=`L1cN:K믿OE{1L#""NZFR뮓^`ɒ%pW;={Zznn#IBl۶ p 7z \\\,֣Rp7233 磦f~DDD4:8 xxxH?C|ضmx |g4QTT///)f*~7 ؟Jw=hSpuut~DDD4(rVN>Gee% 66o<_^z}} wvvT}GB j=;wGDDD1 ;3gz)~3؜޷mݺuسg͛7{ /`͚5HOOGyy96zӟn~DDD4:8aGGǀYϦ3j:33HDGGQVV{yyyTTT 55Rp9)L:uع]NZ`uww PՈZ-0g!P\\ uuu0 B@Ż=qqq8}4 ֆ3gΠ󓖍Fss3F#2335Byy9F]],X#G@c߾}ř3gQZZ8DFFbܸ4& 11gϞN^O8}&L ,bӦMÑ#Gm^ǹs琜oZ`UUU!66AAAhooGqq1"""PTWW`0 $$PL4 Ż,!F(**BJJ rssP\\XiYooo$$$ѣBFFƠsĉAdd$;F@BBIعs'- ZB,zgOQQLdt:,g9sƪ;s 777t:E%b^~þ}V$;::P]]FtwwKm* hooY, @*BBBPWWpt:233ᨨ60ALL ?JdeeY-ci}Z*DqiXDDDpj%@NN\\\\,RLz{{V!%%%h4 Ĺs~>ML?Tq$n#˃8vգXLvFT*T*L>}"""8,*++ôiZ)n0 /Q f:ǣ ʼnegkk+|||ށT*L6 mmmhoojOHHɓ'׍y󐙙hmm-'""ΩwPVVz?P__Z!PPP!>>EEEpssGT*ttt@HůB0=zűcp L0b@jjjFR!==}HcGVcԩ8u"##-ǃSLX&,, O[%XۤI* Fdަ鐒"…/Xu HHHN B~b^4by-\Т=99٢{wlϼs5i$?f?={zcbblCDDD{dryTTTh4EMF"""\V߻8+"""T]cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3XDDDD2cEDDD$3EXh4ҿǏgժUCjnPvh48z(yݚ5k\HNNFzz:/M87t?CT*TWW˒Xo>h4$''cx뭷}g2V[_٩P~0]LׄZj}v^H>IZݘ˚z Կ9t<55Uz)r7mƽkX;yvR+W_}%,[ŢEO{,/^,`޽:`E]]:̘1iiiv㴿MqNNձy!/9SޓO>)M7$6n(ZZZeϑ"|뭷{NhZa4NBq׊ 6V+6l := .6lBa1;Xh:ZձhkcV+6mdu+[;c1.S}3iii+WZ^)U FQ[46gpu׉_~b?^Cx5SlٲEzm}yDFFEk֭[w6o,,Y"xM8tͱq8q%]ŕqgRdex1{xx&ŋŵ^+6o,).55UJ;w@@8B3gOOOʹ$i=&Yzm~O0*?zZ~}DSj[`4>Sܑ1-^X,Xo[9rxm|xxx$1i$&=R1q"11QzkѢEb׮]B!֮]+z!c/B|Xv9s;9dE[[UߦsAՊN1a*tVǢb{WWyl:b\^gcVkLt2퇾c=-)_VkEcc~z=yM}M0Mׄ{Z}v/]L-Z$>C!k£>jsrN\I{q%hV` V^/{W̝;~iZ(].h… B˴ga?s"33j\X}s͛7f.XI׋V}Vߦm`2h0/K#?7n.4G+**JDFFa4/B:?[1w &8\` xw/Gy|w[7Ƕ ,£/[ǰyd~ϟ8st_w2퇾 @ky X`m?~kkZtM{$77W&!kBddtM4itM܋%hܙ֨՟ӧOcxQYY pssCgg͛7ׯ^9rd}ggg>|GB j=;w+T466J+++pq|]]]6wt]yV}vCV?8xUs='|FF]]N5k,i|s@bcc/~a1Ɣ-2eXhUCeokf?zpwwZV?;whg<`);ӦMIIIbƌ_9oϜ9#.\(EJJtL֊l EmmR&4կ~eh:㭎Euy|;X}3P>y|7[Bi?w2ӧ駟Z쇤$--I;X555"%%b?/kr=ݸqjVSr/tM;N5A!]K/Iׄrq4;X,̲.\n-;+SRR,{rq4\+){KNyj|`u˙{ZZy|9oĕq%b/\;;hcQee%-[^a#XD+y ooolڴiu뛈Ȑt:99#"r<9LDC1f&) ,""""""""`h  m=gĕmH`xOOܬn\k+;vcJTv[8/*tg;נh_q͝Vg UW-D6{|9`U|$;P{bܸq hxxx: +(oEv|.j45^86@iSS#y? *jǀ`@Ѿf$[-gQ-gy-X~ݍɈ 9^nی #!13fer)͚}bbneag|2C7톏ϥNwĭx׈2㜝 !j=ChၸDv2 J)S;eźPV5W Nf,DL|YDLp6 uqWܽe集"ij?Y Xt-/᎟o2gG "acu?>OEswO Ŝ~/oOq©oEBr*'iA1wVyj'VWUරŻo.:=JшH);\gpЀǤ[7;z? `BRꛆnѦ[bqӝ_ƽ?^^6kFXif_;+P[s1MEQh'";*g~NwwCyT*LMHԄ$a7eބZFfR3, + >xo宻AZ:ϷI+"6.+W>KHCW{}I񺻻PU~G*!MFr~0P+ p"@WW;=}vnHJMGC-[qǝ!!}|k̬\l}{46`bXٵ#cq=˰q׽?*G>bu႟b?'ؿ/ߝ:~λ WpgPHLIÔiꊊbAV#%=qe]=q |}i8uc32-[-NW(((@jj%q$-^|#7pss]Dƹ"%m&nozME)>6 +y އq5ݍiӓns 63=Cꛆf?CPdf=|;o[ѼX`]cd}m.@QNx?λ ,G jHMπAGᯱu#-c6MOJge/Q11(=t ;IDATeڬ?ࡇo6ͻ"jS!g1SJM =63 ӓ.=NPY96'ϻHWW'Cܿ6Ǎsޅl}?.y[632\?}alz}.`QG,.cX{v WPs^^ste8gFbj:j l \ܐ;b5r']/ubY77wyopwcߗXN#HwE݅TWCcth NmP' !pHiӓ|ѡy7ވ[_ DpA;&[\l'ZMK?x`Ƭl8Zo~xY*F#*>P .("\OO߂VیوKJ!.hii⁁#ETTT*BcC*JۣB@RYh0>lHC͉[Z0napA gh? ,mN?.so(sŔi1gB]\~N7|'T*pK#/[m[p[[Rf?2^!,,LZoD/@v5c4""~q?;zk3? x_rC.Cu&P0/z?/VZv4bGop֟~GlcWd.XϥW_ͷZT1| 6`cJܹ}?_E\h=X˖?hW9)WS'/p-ⶶőG:T8N65`LJᦛg}1gvX[[+Jwak|_pw{z?bw.Af##;;-N<1 q 8|hӢG>buB.uv*SfZ}=_-֭}nsWķ_T1gBȚӍhnnU}<2sF>bugoG]c'sh8]m)?cϮ϶ ';yɜ[#zzF7Eֻg;߀^;&y}2t!twKF/=]ft]/N/3_2 >>>XsظNůWǯIy̘] Uͻ–wy 28%$4|Ld$ѺX`]F8ʾ_96ן1Ǫ?y٩ϜOIqΜ¾!~~!VFظrq4ކi ===pssqG2K`wt{ ]>z,ZYR5_ʩ]p4n+с?D`Ds9t-Ȼzɑ }Ə˱] cCI9qj0<\okk#IZbJ+)GJ^\I8WR.ƕrq4\+){q%h\I؋+)GHf,dHf,dHf,dHf,dHf,dg( @mq\~nU&A1X1X1X1X1X1X1X1X1X1X1Xޯiˍ'm}}g'mq-'|9畗. &b &b &b &b &b &b #C"_-IENDB`genometools-1.5.1/www/genometools.org/htdocs/images/example_nocollapse_noselect.png000066400000000000000000000363711211610345200310300ustar00rootroot00000000000000PNG  IHDRX~}bKGD IDATx{\Tu?׀r+)x΀l5]ul˾۷]v۾릭ܲ46w% "8\w039y|ss0DD@DDDDqsvDDDDX`X`X`X`X`}Y1{jUcW3=ܹqqqFll,٣8MV\h &&[lQ\q .:]mxgETT"""rJ%j}':vXO?Edd$?\is8pqqqm݆ZGU!{Rj3233eȑr᫝j<(eee"re,C Q]mYYYr=Xî6N[s<*Ȑyhrkb yD9d9t萈J``jc?~l޼YDDl"%==]SD_~ioQ?xED%00PEy 6l >\His&%%EDdÆ o{X 0yd^٩_˗+1W'<tR̪͕ir ?$11QYvXî4riiiO>D&L8Mz)ٲel۶M6WC$44"j㌋[ȗ_~)JBDDZZZ7xCiceŋKppt: ŋ+m?Μ9#F>ivK/$>>>3ai`gv\q" ,?_"##%""B$77Wisq 9sDFFJ\\ˏ8'&o>˸q$22R/^9cՉ8cJ""""W‡܉THe,THe,THe,THe,Tg9;cu=8]+8֞䮒 9si\V pZ'$EDDD2XDDDD*r ^^{Ovk"""nrJDGG#&&111زeҦF khRчzBRrWcZʱ'Z:srkr /̛7D~~>>C<."6_ءZѸrR.Ƶq-b/\k)GZ^\K8R.ZѸu[۷o?^Yn.a8r/**jDDDDfŊ=z4~ӟWj0].N<`?~""""x Xt){1Ur5h ދ.'DDDDt5w}طo}ʋ+**0`t:l޼cǎ.^صkUZѸrR.Ƶq-b/\k)GZ^\K8R.Zŋѿxqq1BBB9"""lY]& 6`ɒ%Flll[p!6muȝwމ^{*裏bhiij*]/b߾}_t*rqܵ sV\K0wmŵ+殥\:ĉmv]=N2 i-\k){q-h\K8R.ZѸrq4\ŵq-b/\[j!"""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""a֭WXX;w@Y޿|Idff"339998|BDDDݯ`ԩpssSѿa0rHٳgS:+]""""X C]] ??? aҤI !!}ӧQRR^?+w{ƌRFDFFΝCcc#F ???eݑ#G---HLLD>}:ckχ`РA())ip477c Źs܌\3Æ C^9 F^^^6˗cvl_0x`uBSScs|DDDqN-:P 8555App01tPh4b۷/`С>|8̙3(((@ZZ@D^FLL PUU* <<GšC[;qBBB0l0hii#;;ܭںu+- b)))vmz"\:t1b 77&M!$"""Z`UTTVYnnnV?f޽nnnR⵵(,,Dcc#ZZZРt:~~~, FII9Bbb" ((>0 AHH?$%%YSYYxh+O~?-^WUUZ`RSSJbԄfAD/b޽}s2_u[aРA(**ruio?>f5=FDDD]"8pŝ˗/+øqb%n4 (++(u@yy9\~PVVʃegee%|}}m׿h 8gϞUQ8VTTpi?qi!88",TTT` Cvv6<<l-229996VmBNN233C AXXXs'"""kN-<==- ZÇWdtmUUUQ^?}tMfp7#2gzbyM>ݢ=::ڢ{wn >>r4o 5556 vZg؜֭ן81řq-b/\k){q-h޺WC/gwMt[T̛7sM76w؁Befwyݏ$Mك?p'ڎhvt:@bb"Μ9efff~DÜ9s}vؾ};6lrF\|Yyۑt:g6n܈&~yw^| .Pmh߳fܹs40g,Xb;O? zΙ3Z_l]58wwwxyy)˟| +|x_;_KK ѧO%fșflڴt:]ijjEzpc޼y딸YUUeq^ۛmiktV[9ub޶mjfE4 V[JKK1uTK(((xxxۦL7|SY>r;;%%E)>SHӖɓ'wuDjؾ}rXm7tVZTWW&MڡK|466駟С6۴R.rqܵKgrË/^?h,\;XCCR\KbZʥs?{,,_U,Y"~G1z8R.rqܵKgr_9u~DH$>6vS'"<<Çtv*DD= ,"'81%|g(.>|8{\ {VΟg̸=I.]zt NCCC2c=6Ԅ#FX-śauٳgѻwo_kq\:sp36[0y-1-}wrqܵ3r_ULoGՈO,ZcR+\ZsR.}ٲl_nH#\mqƏŖ-^m"XDPYy[~n8r$OtZDDO;;rr466:;" 4G=<<>W^y٩h,U||SQXDD]I*++ܕ=|k=X:bRXcc?ѡrqܵKw^RrRVS0twrqܵ+殥\:lU!Nb0:Z\K8R.ZѸrq4\ŵq-h\K؋k)GZ^\K8THe,THe,THe,THe,THe,THe,THe,THe,THe,THe,Tˆ[_aa!v܉eyɓ'L]eϞ=Bff&vڅ/*m[l-/-ʰk.vjDDDײ^NZPRRSMYNLLDÆ ȑ#gϞE^^N***pAt:pE%Μ99scǎr.DDDX C]] ??? aҤI !!}ӧQRR^?+w{ƌRFDFFΝCcc#F ???eݑ#G---HLLD>}:ckχ`РA())ip477c Źs܌\3Æ C^9 F^^^6i|eeehllDdd$Ο?*eyȐ!V0`._l7n9qEDGG,СC QSSCEaa!F#}Çriiiz= ;;111HKKCUUrrrp=zBBBBslĉ a?lnҰaðuV[j(..Fss͢||dggcшFUU8`*++SIpp0p9ܹs4h<==ၪ*E%fcƌݻ憨(%^[[B466 JNCPPjjjAPPb]J4x`8*$&&p(((@RR:c[fZX?++ MMMhhh@jjU_8rѡIiiRZ`RSSJbԄfAD/b޽}s2_u[aРA(**!"(,,ıcǬ>~>| N^W2oBLLӧ[?m4#<<UUUAhޏXv&mw:hѣ-?9v$w???h϶m$**JYӧrM0o>o]&t6帖rq4noݫAw? & 33 ƎXG-1sL$%%!&&;w 55HKKCII?qqqvM855\lkO4 -w}_|Z_grss6y|E0j(}:],Ctt4pi`7&&"bLxwED$''G#6l 999<Ǐ>H,r4-}XY~/^lqۺVHKK>}8<;vX[oU^{5`kuzZSSoooٰal裏$!!"G5aƍ"byk2o<rMؿͱʱ+q-]ŵqgdex1{yyIYYs碤'Oӧ1bykە󵠠CU:7tVZTWW&M< 55Cy$%%)۸q2<<~:t.?jYv:?oܹbwL>]$&&F9'%%%E%%%E״uJ\\zok[mhaaaV:`4cbb䩧?OHwZ_gLC=c8{QS[*q/,CTTH~~q0i}Hbbb,ǡ3իW`ߙ;X&rMh=N5ADk^}UpR.ƝyKYʭu 7m9Xw۶лwnZe ڵkm[}MD$$$(TUULs:er'""" XDDDD*cEDDD2M=i`o1f9#\_Fx <">XYcǎAA=fE~owtA1>!vd-ޝ^HKeKXBjkkq0Īs9_'YŻc_T'P^~zC0bHxyyw6ۋFʆoq{_ sCK9w#~t>F#wT}{΢htÃ,7ecg:#\757^-w />JV}t&n쬯P]e@BoOde4:~㥘}ݟ7q Vusa`Lp,{ot\̙wً2*̪s9۬jᆆz|G҂py8x(<<~x544@!tXz|ֿш0Gt[{we!(0nMM5?(.u`_7uf\ݍwxa914(FHX`]c @~*sZׯ ĜwRb^o0ctMVV= u 8/NBnjÔiзo?W)wwZBD$\bؿ_k3--36 1~|/,m?9)"ظm DxT viԥvUvJlH`xࣿw>6_k~zXנq&_[8BFuEuY_̏0p߈|NCCCyt: (<5pssC~767 }RnXI/ٝjkkE߽ʤy 8="}BRڡ7C?`nyg~<_~*xxz"*6!vSss>ް͟ ƛW&MHJ2p t9۶| OOLf>` XkG|X`]n lXgbCйz{wgS')7↛gzq 1q=.{*!&>c"Tݞ=Ap:[%$" lhiEVVbccJi;pEi_޽7د8\l a׍P_Ӧ?^EЀqVmw7+NMaАHLI{營?8ֽ7?`֓ kX?E[ؗ 7bʴJ{w^ Oyk3鉸dN'Ħ#BBz' t8TW[O<7o6=wu݈NpBfϕBFU>酸 IqoT'?wӞ:{'xxol;ظ?~xû3.]ObXJv<4fLj5<֎[0et|n+w>I78ޫ77x=t:Tcߞ]؝JKN_fljL@e"ʒ?W _~5b4]9Fq4wt^ S?gΜ盽{!bC5S*TǓ޴Z'bGø6w}6zTƆzQy u"Ol?֭[7—,Z?{J\1ZO/mw,7GSrT<=_v[>w_owZĜraՕ݆)oqv*cܹ-lXg|qUȬ{ 9) ۾TbLx(߿GM<4ƍLj5JDpv*7 &Z}=W+W,_8l*9TIQzgzTߤĔ}X`]ɭXΔPsOس HMv?`{Fcc(QG͞s|m477I==<kAcC=v~w{+sW'g̗/V S!p|٪7'#XsW]39ʱaݟy?BfWWzz:"M<4۞ξI=+}sWkz%<ǝ <3uGMikR7j]cK mUpF\K8ƸP laՇ3+s`wt51>!fʆ&N.RN-}킣q[ZOCsr@ iiNvgh4"{7/"~73 -]h=ݧVV9{[⼯i8`PLkq-h\K؋k)GZѸrR.Ƶq-b/\k){q-h޺W?"$"""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""R ,""""""""Rs=S6wwvcZk)W]K0wmŵ sV\KbZEܯSLDDD!X`X`X`X`X`X`?.(0IENDB`genometools-1.5.1/www/genometools.org/htdocs/images/example_strandselect.png000066400000000000000000000462371211610345200274720ustar00rootroot00000000000000PNG  IHDRX>Q#nbKGD IDATx{\T? MAbt6 7Uc&nbmMlcMfkv4MF?61!1Vc6vEM7*T]QD%0ewNf<:|=<s>9gsÌJ!@DDDDQ;"""цX`ɌX`ɌX`ɌX`ɌX`ɌyL:cǎk~>tqٛl>d$$$ )) ǎF<^y$$$ 11ؿ6裏ڽGcm͵Ɉw]tvvJm#z\RTT$]5/"##ɓ'ovzB󉍍F<ۥO<)&M$m}{v6OGhhB剕+W ,RhՖ-[C=$}4iBQ]]-BCC6ٳg} !ؿx' f3f@yy9~\8_xp}磏>شi{1m7oTTT`̘1Rۈ+["77WGS"!X,⡇6Ek׮BRpvZ?XMMMbڴiwGmƍW$%%Ia5izj/f͚efg4W#󎈋fiiiTjMbҥ"..N$''mm<~HJJ3gIIIRhG1c '֮]+ϑ#{*!p۔DDDD ɌX`ɌX`ɌX`ɌX`䣏>rw 7 :*8V'$$wis\G[e: X` ,ooot:t:O~~~;4 + !!HLL69j.<<w;Hq9j.PRRUVaժUםc;֯_g}VHH`Ŋn8~c[ZZ0aT*۷Cگ p6G1ŕq%,\\+)WJY\IWR.ƕrq5\ŕ6?.^[[(Yf9s}][B7@RR5{GgϞhH-[_~.ӟGbApp0^{5hZَ떯ikkkr]Liq%2sWR.]Yq%ܕWR.1w%2̙ w8Lz~H1ŕq%,\\+)WJY\IWR.ƕrq5\ŕqg}o~UX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`Ɍuj>|':#??Ÿt ˅n1NVP__ BVK?~< "" . .tWDDDtZ` PՈF@@z=0w\!P\\40B@!00է=111hlllF\\qEFDFF" @˗/b ==>>>CqCcѢE8uL&=h\x& ADDƌe0h4WWWmy<xL8Qگ }}}PHLLt8?""":XUUUFpp0:::P\\pbɨlĉ:pRRRl Zd2!++rtk)7t:(-- *cԩ@ii)Ν;KHDDDjiiAggm2cbbpQjKNTWWh4bWjST CGG @XX /8q"]α?t@XX***tgϢv}Z[[i=/ DOO~AйB ;;)V}}}0LPBHt: EEE6cZ9YVT7,!$$555.w<۬`DDDtW6O0c Vfx{{m/W555._ soܸqhnnpu+y~~~?1@pႴ) [`ǣ @jB---̙3QXXOOO`ҤI9ss'"""{n-l ZSLT*t:iAx6Diŋیh"큋ǵZ-Z- _YϺ٦/^lӞ`3'X1s典8 9X2r ***`X!%:::P^^nsIHDDDpX\/ҍhw螈\ǯQ8 A"""X`ɌX`ɌX`ɌX`ɌX`ɌX`̭7t:ٳgYYY.nݺa]DѣG鐐YfvwJ~ѹ#HZ`yxxT/&&PXX谿lvgE$~yyy@YY͛Jo"55x$7O?nt:s=68jt,YXkbݺuN 99O?e[iw???l޼鈊¾}˗/;͏FkmmEhh(`ر;6K.aҥ@bb"> Gvv6233ziz̞=Xf\wNN{`;;;k׮w{ܹXf}}9O /8?׸"D4b 7Bш$$/^,zB___xץNjV!vc[obСCB!EjjԿB:ҥKۅBkBHmz8VFlݺU!DžV^Y>׊1ƍ+)WJո53ψ@l2oO{5} 6^/,0 B!.'zw}`ŋE^^B:zu]x9˱zjTUUᩧ`._q;FXCF#mݻ9vލ7x_|KY,GY{۶mسg5ST6mjcǎr~D7VVʕ+qmIM`vv f`zرw9`g}ɓ'۵r"k0Xp!6n܈J'ض`lݺU>uñʮ9vVVT}B 87oް#qeeM1k;kB0w\)]=<222{={?OOO )GsϹ|vmg0;}#gX+V@RRΝg}# 11BՁm :8aΝ^~5޼y36mڄWj'##8ٸqnz Z xǰeaܲe > t:|W^z yyyD^^^z!/2qIxyy9# ++=0Gh"\.ߧCڏF w- ǺbBc1|E,\ŕq%j\I8cZo^/cw+9w9JY\IWR.J-}ĪUOOO>m"Ewoo/|}}}vwDD# 됖&F6{cĭ""""R:XDDDD2cEDDD$3*,,DIIMh4ӮJe4殤\nt ~O=Wшz':lSUR\Iܕh]I 'nbwXf>iuy7J+)јrѹ_p>6mhצֽ觘>}]H8J+)јr+)ao |MxwyN޽BM”)NhDbEFsdC*qw*:aɒ;"=cضm}d4q&kݝ шT*ߟ³>Tn ϟpMpz,"" ,"*++vgן+""cΝɓ'& ---R%l6yx__Lرcpwy/֬rsfZ~=xi466BR!44* =8 >L:()OOOH_pcǎ{+-.*!pǁ?d?[bSgg8+)јrqGIqX`9a9Ys+\Je4殤\ -B"8~}xӏ=um=; xӏMD4"Rop^ǫܖw:U:@D4Z"r3!~3O;Wk+`4ݝ шͶn݂h"xܝ шȍRRݝ$**뱈 ,"7immu+gsT*`˖61+:WR.1w%rs.Z<LlY2#*)\FcJe4殤\l{S7C)-\\+)gq%j\IWR.Jոrq5\ŕq%,\\;{3-B"""""""" ,"""""""" ,"""""""" ,"""""""" ,"""""""" ,"""""""" ,"""""""" ,"""""""" ,"""""""" ,"""""""" ,""""rW]]ÇR>qℴ]WW|磸.]\;ȑ#hkkߏ'NOmqtvvzǏh4+GGdk0F?~n,nz̛7vJJya޼yj(++帹ҘR\R`0]555!((MMMN vm- ϟ?M11 Fv&"[weeeZFtt4QVVsBb l:Ffš/^hDdd$|2, 3Ayy9 A}}=-ZSNd2ѣŋa2PZZDDD`̘\ F|Y ш8\t Aڞ4i~&L@WWMlƌ8uL&!!!'ODll|1ydmCԄ  ZAjj*8(477#>>WՈӃDL8ՅbL&'M&L2es!""ϭVUU#<<}\ ,رca20fH:g" }}}oooGII """_'OJVUUN @`` N<9y fd~ѣGV0X,T*с! @*&Nzs`0 ==fPDEE!** gϞEee%222XgiuǦAAۋlZ-N:$F Ccc^^^vMMt, ~~~HII?  Chhs_R<~mGkk+RRRىTUUIm^^^v ""KlxxxZXd2IoY@!((mmm(**SVRnX7BHHjjj2\!P]]3gؽ7qD,7|X,T*T*̚5뚹O6:(gLբ.\@CCӢ IDAT_b8z_'DDDu{pp͓O#0c Vfx{{,|.|2\αqơp?fkk+ﵨT*̘1SZ- . << ,@zz:x{{n_oozc4V+-2W0N[?P6קB}""rxIP444@V#<<\Z҂`̜9D@@ WT*tvv@ZJՏB3gܹs0ak JVK땬ocສP466AAA^^]]j!jcv&M򓧸8E_7z^C """9)lo%M2EZȬR餷 $&&J/^fEl\T_Dll,O?4p=،ҥKXd4XPSS$''駟yrb=Nffqyf#** ._4SN!66C>w!W_}Uڵk8c|'C[VSr֧u ?|IsTTT@Rl6C-[8nDDDQk؈ bƍxzzam ,֭[SN {쬬,ٳB1 f޼y+((43.\WVVzzzw͟?nlgn8j5y/k߰ayX,||CCCN#GȖFMb $%%aܹxg<.D+СCC\\v97oތM6!%%ڬȰ;`6n0bѢECƷkߓK2i2m9|4д3===8_wٵ>h0+^ a+߱?_@ ,azu)5tHX`݂fH_T, yvqA^.}ۃßOC Ν-Ķ<~;[u|Mhں㿰o܄̈hau +յuW^뮈)E؇-x8xrq5юh}h:F5fLhR'R{c3'뮈)EX?F bJe4殤\'""roɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`ɌX`Ɍuj>|':#??Ÿtur1 ??GA[[Զ~8q¦~j܌#Gs?~FqX9644 k?WYf4sNDDt#qwz,\jZNOO\peeeXpu777҂ $%%T* ڤjjjBPPO[[9Ο?xmBTa댧'<==7Z` PՈF@@z=0w\!P\\40B@!00է=111hlllF\\qEFDFF" @˗/b ==>>>CqCcѢE8uL&=h\x& ADDƌe0h4ϗu~0åK`0I&7atuuf̘SN!++ˮdB[[pIVcc#&OmZ!!!PB>>>HMMŁvhZtwwZcĉ.@V#$$\466""ʭVUU#<<h4tB$&&"''ňBӨBZZڐsܹsBDDkX,VEaa4)""@JJMV[[ZL&EOYSXXӧ#!!%%% fY/^+.^`pXTbs̙31vXL&3555yGz7NRUUUP̘1ϟH'""Z`ج1L1118z(jHhbAooԦR@0@@@M_R4qD׻c0TTT XEEE!** gϞEee%222XgiuǦAAۋlZ-N:%4VR!FVww74 ",, NK?Z#00f TUUImcǎEwwr&"".XBdgg"Ū&Iz+ɪ:AAAhkkCQQ͘uN֟w`9!!!qrss!@uu5Μ9cVĉQSSc| :::`XRR0k֬A󮫫Cmm-<<ᨯR50S^k$''Kst7 ya>psdrTTTbCKl8s F? f20""nko9s;!tDDDrW(܅ x,dHf,dHf,dHf,dHf,dHf,d$GNCBBf͚~)׭[w]^r[z5;"믻;5ʿyKII7M`ٲe6g߾}PT%""?XǏB׋igeҥbB׋۷ Fcs>H!Dyyq4رcͼcϯ\$''KmڴIB!֮]ks*oBaXDCCuŋ;СC6/uptr^!zfk4o !(..wߕ"--&G,{'" @j߹sXrBq suĕ{Y\Iwf`b\IWR.Jոrq5?vIe*VX!ŃERRHJJ"::Zj vc?^\rEz-&L y{{˗/K'{H`9.]Tu]_K{zzqc?FFf^ֱ痔$"##~EccK`_ۍ-o4|\kz: .\Gky,Guعsf-z{{mίdrx~5HJJSLv9۷O̜9SL&yb޽B!l"x suĕ{Y\Iwg5OЈHYZ-Z-V\nM[,RJr8jcǎ%grܻw/>sرw9yY,|gs`6RqaS"kB) ,X[JۧN~;khoo̝;WZϲk.dgg) i{Oi OOO )F,\ K/:Xc]kCGG0gΜ!囓?}ǡ\7: Z? |vo3bz}|ATVV ְ  ,"[jHHHc=-[Hm :8ddd`ΝRۖ-[paddd@᫯KCff&K/ )wx嗑'OaGyYYYr\bh"_^?11͛7cӦMEII |}}mE~~>gs/..>XhoΝ6!//C\\t:TXCBB_͛u!]qaܹC_WxRRRj9˖-_q{#}^%j\I8+)WJոrqEzg1a6n>rq5\ŕq""RJZ Y#7?"=X`92DDC5XDDDD2cEDDD$3XDDDD2,"r߾A,f3>FqL~ ߚk76)GʕNԞ;˗/a̘18qFFBaǼVl6hA!ĝ}$C=602^JZ 8}$ru;T*Ր_fG9h^'5gQ^7\13㐨 1c9\]~46r)؀% 4 %8lu.\nŃ>+3!vm{ {i7 ,"_!jz&DƸ;A@/13l* c==b=(+f3M.u§LuvVtaq~;(:x;ƒUip֫/aſZYQHHLfH""(*G7_d44mߴDCFt ,XtZL94Ho~E/`X;ӥqץ&w5_B |_~?!D ruuMwh7bBð?ۯ x_I:;;G=S!+,@ 2|bAp80DMqLV|WC"oԌ<\ЄIBmWǦl‚EwٵM~ _]!iyN<=S|_ۗ\mڨlM-;}H 딬QnhO5vsr4?8ו/X޴Yzz6]s&%jHNn]7I3xۚ2c:t:f9"`tkUޱn-p\ǎRſ%IZkjykrj`0e(ZNXACrP&6n U SѤQ2XT%-X*_ID9$jkuIy]Z F/Uh ꙙ)TW^^^zCeddpDnфir8C~?sN V]ڷAJ}(>>^iiiU˖ ޼t:CakQl˗*/{TZZ7ߚϚ ?-Uw|^!`ЛVhk+5`E7S.Sޛ!Noz_GMLnuh1 QOLj=v:{ZZ ]@ aZ_z=f|%zˋt`&MTh۟uObb3VoVwz×#_XXɼ;>r(''GÇ{Jb IJNIS{蛯jl95]fvHL~?gNĺ@4ld_Ieef a9"`ٹcJ^UuuĔfju0sDxfr_8֭7mvlVc ; @#ǂtNMڞh 3:G,ac;}2֭n홪(;oaܱE>&/%X 9?f=ZbְzuuR-$'iC+z}&KScK7cӔ$m(Zvb "ǣw+)))XeeecqNzV/vν[V!a,X #`F0` 0a,X #`F0` 0a,X #`F0` 0a,X #`F0` 0a%K,ɉN9fkV[{w+B֪[zVJ܋[SG0 ( #`F0` 0a,X #`F0` !Mv\IENDB`genometools-1.5.1/www/genometools.org/htdocs/images/gfftree.pdf000066400000000000000000000170041211610345200246610ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Length 4 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 0 0 508.622955 138.158752 ] /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> stream xY6 +t.$R{(PCڽ9I7A9=H۲mftiI(R:ɽzܧK#k1}}~v_]4T}UrrLNo9T*x&^b`ăW9Qa/uXux, ]0Bn3:W7SrwS ^rRfQ,!/nMN/ӭlW!%['UODZ̗ /]vݽ~{.Xϱl2H3]~ zu?~eG s+-za/-_燐 j0mo&.}u1kELj-"ߓB j{虹JX?L1n&,ײYS_Jf.V:<#9RE K]ai]rrG܈|XЙ{cA{^LRcRpk yZXraљP´}^V>b).ɽ zk,{3 E v=bIMy9Ԣ˨.̶v1ÍXK]p>r [ç˓Ue˭e QFq)_ov- *9d.kUV65/-Kc.ᘎY 6:;ap#9v,uU8AqqZaᇭ q9EMBz,z=[k@|4+f;K}hO$ia\7YJԊ~HѩF%3;'Z[k})cvC3K'*a>-O~saJb tE@Ɏ(|> >> /Font << /f-0-0 5 0 R >> >> endobj 6 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 508.622955 138.158752 ] /Contents 3 0 R /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> endobj 7 0 obj << /Length 8 0 R /Filter /FlateDecode /Length1 4520 >> stream xuX PTg>翏tit4OQhFm%"#*"1( D&c,ִTљĝl\k&2cmj3N4{835{| 뷴 +=w7AIgf| ?ѽ)푮 mkZQ]iN2`nזT4yG$kh޵mw0|<G-菬UA'9 Y jU!Ls0:4xp< -8;zI bmVT#1SH,U! t#[>ݙȎe" >dIsۘWBT$Museiif9kF0e2C2 <8c4֣ٮfZRFdף$2x"m,rbEgZІr,,ȥtNHeOz'˻ӅW}a|Pr`M'aÓ[D-`LN%`l ݖKSG۷#xvqdvQÓIĀ@!,>*-"RNN[NcA3--?\}+;4erc}\dËg͕c'hvp4 zI98 iY9s[g_Tl1$x|aYVpuҕmv֗=d<ɦ+/5md+v[o畴hp >K*J:LZ$M7kt4LQ0ZA@ BRAT87M%pBpb #o-(*(,5rh\DGq41.rJCJ܋}M{W{OZ=ʸsMy~xyilÉȆ뻮~Ʀ@tEg{ϯQSMDѰf Y兲{[RSӲ`_s J~>`x=r0h5" gːM1I2DZ` b0IG%'Lƻȳ<ח2%ުR2LEQ|4TY_Կ%Y Tj񣘅mcS-zȯ'7.gK:ˏ<ar \hb$C '$?KOQx‹s&({,.5Fb}P''Iq@'w\\FZ(k%bP^bE0XT (Љ#M Uqz  ɋlŸ #ww%tC3ڶZBvǦ5Z+W U1RAX !&0C7ÿ V-k.>*o)FrC6 H)7 HCךAϑ=PDA$"5R wlsiٻbS`y={|Ϟ6N N|(98{n8CM)IQnHQ;O :%R sgdV+ZDӞjj͚N\kMe ]uw;5x~w̵04Ə;2Bw92NAY4I h͵UعlL ,1&&sLw X81 X4¿F5><0(y Gx!8{{@xBǕVLN6k`e+"̾2UO>?j50\./ NL EJyg.ڳ/j_R˵皪'׫o=ѭEӵKKzu ^_ӧ`V:LyL5uI6w*k VM-g$x+(kc˨c?YxJyɻnõKG?ͷpŃ|]+/m-zsQJ$b5@ Ld깔VNQ%ck˕5+r `WgWjfGɊhIZKHmj*ԉh\'0?N.cԚUGul}M?++k> Rg˫W^:b 1A sDs=s8T'^S./j41\E"җ?.)mQj3.pcS%+r4ÅJs2SP@v:GW~0;K{5D DXlm5eXNKS5ϚB)5I[½G)aDS؁0ʏ[ppF!80`/CJ> B"I{@Ӳa_l]gl 33װ-G+iI_=Ӥo Ux& cp#]Ceh1 QiهۇƜ,ߪ!p5[Kari!RNC,+';87h>g3A p ,oOt{uWH^͎+ $u<7yu'toŃ?{d-[rg qM*ys!F&va'NoB(F%Tm yݡ%t.C5@HpzI:B irU]9?f%#Gㆽy 0Ϫg]@֗M|FrssɮrȦ᛿UOفhR2Es­0}^Wݍ^nK5|/(y&p4*PL)XB:4pSK#y ߓߧ+Um /"Jqeto4#7znrT=^Nn4b(cD E wh x:$u.$J:w0r[t(P endstream endobj 8 0 obj 3468 endobj 9 0 obj << /Length 10 0 R /Filter /FlateDecode >> stream x]j0>YNtjB!: ߾1B _?'ynRngJèeYuԑHIr rLv[V=QUQj7:<燈7؎JKfOWJ&ŃKҙnb}Q>хy|n),В/l;}Jܩܩ#=]8$ɳS)+@'Oi<)(AA%(|@g R3Tg I$b}./Cu}yA_rB_D> endobj 12 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /cmss12 /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor 11 0 R /W [0 [ 750 666 556 326 501 229 501 501 488 375 353 435 773 629 686 646 446 488 625 704 543 501 501 435 332 ]] >> endobj 5 0 obj << /Type /Font /Subtype /Type0 /BaseFont /cmss12 /Encoding /Identity-H /DescendantFonts [ 12 0 R] /ToUnicode 9 0 R >> endobj 1 0 obj << /Type /Pages /Kids [ 6 0 R ] /Count 1 >> endobj 13 0 obj << /Creator (cairo 1.6.4 (http://cairographics.org)) /Producer (cairo 1.6.4 (http://cairographics.org)) >> endobj 14 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 15 0000000000 65535 f 0000007054 00000 n 0000002028 00000 n 0000000015 00000 n 0000002005 00000 n 0000006906 00000 n 0000002137 00000 n 0000002351 00000 n 0000005912 00000 n 0000005935 00000 n 0000006342 00000 n 0000006365 00000 n 0000006590 00000 n 0000007119 00000 n 0000007245 00000 n trailer << /Size 15 /Root 14 0 R /Info 13 0 R >> startxref 7298 %%EOF genometools-1.5.1/www/genometools.org/htdocs/images/gfftree.png000066400000000000000000000321061211610345200246740ustar00rootroot00000000000000PNG  IHDRXV`/sBIT|d pHYs  ~tEXtSoftwarewww.inkscape.org< IDATxw=n5k%Ѩ1{-v{/QPDĊ]a_}ݙ33g;9Ϝ#3#I/ߘ٠B!uʻY~ L̻!B(-3 Bn.B!Px"iVI$-+s’p};WR|I$LҢ/^fIJZDR2mIZIʒzQZoIKy=EeԯQY$-VyevIV{8[!Bh)hz ^>iU%>ޓ4Jj2は%] zgKE󊖯/ECIJZ&SdM<igI>rJ:3;I xT y8C:F}/~?KzKE[ҿvtoR%=Ym/I_sBҍ`*]rI|$&g!8XX ;!6O?% >;])-b$iϯ`j2pMqp l0c? e~'GB Xx04+;\XxZRT?}M'9PN`U`TP7?K|ml5,B0(n, | ^_`m;<-n{/0ܜEeleMAiNJ7 y40\=먢/Ե]Q i'工'g2{'˧mgʜu-:`dg`@Q >YE,;>[1x#G<t[t.tg ~12:C,od%gf3'Һ&IO.ɋm:E %} o˺ ,XZ̬1w| VTv]ͼ~> !B t»H8 x˺% w^K7-`SOxKݧE˿^fŃ0_PvxNԮ4fVgpKWKy7jB!df?K:s \|bfu&AK.wY=gf'ac|T<;~j&X>~f6E8`O`}I?,]:,֘B<%5D3OX̦[Jop˗/Z˾0og C>Јsz<T{XK"u(~BF@ !iU;BA5~nx)9 YҒ0m,?K*ܩw~:H81 ̖|x2w?]ZHڥ9 *iWxYJ%u0GK$mƞ,i'IKZ1KOIH:90~k@tbCN]_&py B!&Sw} (Ic|7 ! ޓ4oYۉs<ݐur /<);e'cb+|8bw14R0Isֳ!Hoy"*B koY`nͯSᩛ3yRxU^]+2=L4XT''u"R`0tăߕ!3$]bfK_:e̲>x7fYc5Bukչ%]H+, mf{XQBb %.ݓKB!d`U9_4VJ?86څBZ>fs Of=Wc`t]9]!BN`B!GEB!Pf`B!YX!BeV!BEB!Pf`B!YX!BeV!BEB!Pf`B!YX!BeV!BEB!Pf`B!YX!BeV!BEB!Pf`B!YX!BeV!BEB!Pf`B!YX!BeV!BEB!Pf`B!Y+H w]B̾ɻ"!ER+`+394G!W|yW$T[9B{00SI;VhfcޕAԼBP CKDV!BEB!Pf`B!YX!BeV!BEB!Pf`B!YXl$ i%,iHzFҫϔ@ұ^t.n4V#BMơ@Z%,Ĵwz}7% '^ ^~N瀥䅶<g$P.$]U]m2ed_b_/뚞.!Ю.owv͔ ~6ueҲ6V" ppL_9z o6:U!V&g2`3{5-L׺u$\{JEen`(s3)`o*5Lҝf~u !/1K9Iz8x 13eٗMgO{3&w}w]#ZBśe ٗ RIm= !yc>@W`ni\_-$P.G;M(7&ǀ[sQBY̛#ZIЎDa!BEB!Pf`B!YX!BeV!B]!M`w%jlyW *ѻ ^E\]@KDUyAȻ"e |_ϻ!l,0+m>r`"v*>Nvc(T9$: ;:3#z܀_Dn5uTB(IKG{- '-fM !/3Yl cvWfSUmfV-B&P/IY7,QD3;ʐ3g+[B{[X>Ρ^X5 8V'P%qahH' ?qŘ8*ЊVƻV*̎ϩJH,M~ofU"0'- 39i̢ǀߘY]!т7IyUg:3 8< Bk |^+*_onU}+4Hv&x 3&Z 3cf^>%ƙ ! Iť*ʼ{h5p𰤹r\;VxP}Z[0fvp?oIZB#i4Mn5Q̙#fYzT:\Bt.0n %iS| }G|w%13;"@4JP3{5@xyW$ONGU](ϵ%3pT}l$xSoxL} KmIJ/J*BXIҺt-?TzPl=筑pL١f 23_+ [.6~g<@>~]Ԧl]X.BJo{h3x &)1[SfvL1:V I8`mUfI.MrBͶUI˻6xC{l̵Y`uL.ofc;`xWZ>M]'-7a'%݈w76E/#a`Bv6?>..[Jw /i ۵+^JoFK>;K)'eyNtP=ICQf7$ ]ZClYqGwmldfX~@Q`c IHZ۪5hjkRJw%jq7Ou]=ÙI]~o-G1|.`@ o>4]-4eGg]x+,w}S ;x82Fw`fC-OT`Ew7*LOa]10h=o%Y r@z]AP<=$L_+ FRxN{vfƛ  MkȚmR:ە~-YvUXL鎼'l; Ԭ:.;lݼ'Iw_lp;"i_7=ʹ߶@3+dߪ1[j-MsB!P&`3fI'w|Vn !IX퐙Č}!B(Hr!B(B!,B!2+BKλEԳkR:ш)$JTjRdžPi=*)>0T<Ѝշ1:WZ)c7iZM{~^bٛa ׌m #O~`f'r\X.lB3OR\jvl+s<0?MO}֘KO~3>"w m )6?{hҔ@Tj)3n jf6^Q<lgfMHC|W3?h~C5n>i`RX~?3U:iJUՁ5Հ9fS3 x̖o>6.4\" my#D`:&go߶hK^1w$mBTsfZsBKG-/ܡS쾲UHZv9J]kD0 ۗYsR1F$6̾1(?mS+2z6i3r 6j{Uh$O@ s2ok. a[%т}U-3{ o.?`W 0Qx˒Q" mpf8H8*3< nlf-1ʳ7&freEXM1I= cfnYz_fSVuLx^[xj3fOԧW]y̮ޥeVDX*Hw΁7{W{i(R[+0M)+tB4Ň!NthXs-F1WzI80J6Pف>fn8XZrC" 4w6!fCNu(o0|Ҽp/ >s>7>IS&0C]򬇤iOfyV G\ݪ9X!I\=9Gp!tp\)4Y6e4>W|InfWt3pN5\ R*}69-X2݁\dgjG#rcf~0gJ&}PNI\$\c^efVap5 >(r}ܚBHK NfvbK*cf[jB2*^3cftLa9Iw1+KZ]Q`9`_6zU̞:ڦ.r;#z4Sg|/c IgXDlxQK|dfM۩ZE'3XcI: _ZlC^~yKL]=М)VNIc 3>Xh2ׅ֭O_a3.9Is@Y9kfggH: G)z4g o-9g?g36ͥ63'PrX.>gyTLnǃv`-]RhfYw|`-rQy&nh@7`VQ.Zy0"C3&I*V ?yIkNoj&]*cuM>ϫ)k\ֵ @Ҕ !B(B!,B!2+B" !B(B ;М9Ӵ0I]҂ilSҼjV!PI1LCiiڝKF HZޔt+봼+pݝ~~x,93W+{&m"v2$ mfvMf =%efUTBAт9($*Wf}GIZ$u.2NYL:fV" [W$ei~`r XҒ] 3IJfˬ,i/.)sIƧYV}- 'nNƛ"fWs>ywIsd)]G:םu{LWI I ijiL׶EiiBgD,$*-wԷh}s]D%_eIR9W3l6e+4~E?}.>Z9W!pIG:%iT,d3~ >hI2r) hfFP7f6vN~Ùrϙǭ[҇p6\̡҆(&iy=xZiW\?O7,efIug`i``i?LCaI;J;0UjasvJeǯ#WoE҅=.O֯<&C%]ճx XIU4E0tS$֯otAfW%]ۙ\Hx|]R0,kS$|A9{AQ-ţM( 7tz>o==-3+>܂|sΚֽVs4qYO>%?엞 Sz&l? = [/kzz2o+糥2 K-syd`z܀+WN][^5 NMϻ倱u6@T7=oIؼ\AD!<X:] Hl7>%_ y^:`&w { Ǥp,LZ+C[['g6\KM<f>-?Wge{.IzԜ*C`}%$m^O$3{Z?_ϒ6l^7), |ff_4cW x'I3S&!{迒/+I(36}^ ǛY4j߂3ajft} ĺNgO:铅~,svj F˪s61X";8$Vi֚{5>Ov/ eΥCuWImƶs3lf]ܛ-YCRА5U#!UX(7Z#35O»3wHKkҙun&2纖=m9>)xAD`\g\axkRÊWXmWTu>> oߥ|n#?ޗx$kR ViG3kv+RI#l;f ޜ}AJ4o)z&-6e=߫fߓ{\֖tRZ~~YWҶyu \žxnOI:))IR.``{Tt-] )7M֔(s&y\ $C}U_$,fI[ʓԯûy KAxм<$\.6̮ %wif?8y[XT<7\ُxԅ)Wx̞Le*Z? ̇8ϛ ϑX C*'yOMS=p[0wV4|Gd}qxlռW퍙]^|'vcIt ;/A2~΅}l'G?NMvO3EçOi^x1yg+<|r)pKp8[z_raUޢp0K-u7{ ~>xW#nlľP#$`f5TZ:Icl@ XGuf6T|\oЛ{٤?ճ@εf i`]3;A҃KHH5W,I7p̝fnnkƞ|klTu<6"=Ԯ@I+ķY!Io[6KZ̾9'fv;'pM$T'Nϊv1 7dB+<32U|Le~1Bx_7i!u<!P"+B" !B(B!,B!2+B" !B(|OAi>4'Y_ ak٬E!ف%E>T-s5(iZ $g`tGo@?N?!p䴨IENDB`genometools-1.5.1/www/genometools.org/htdocs/images/gfftree.svg000077500000000000000000000725331211610345200247220ustar00rootroot00000000000000 image/svg+xml TF binding site mRNA gene exon exon CDS CDS sequence region mRNA gene exon exon mRNA mRNA mRNA exon exon genometools-1.5.1/www/genometools.org/htdocs/images/uncollapsed.png000066400000000000000000001066651211610345200255770ustar00rootroot00000000000000PNG  IHDR,zWbKGD pHYs  tIME 0H" IDATx{@WO HB%-dZ X!TAk.Tݷ[Z֢n-%mVv+JPr{BE1 c$kxs.s|3'0"! B"! B"!i4R ~hAAAAAA6yc0[n3g@ 0y^|E?s̱1ypܠ .{!OKKo~~xx!&D]]ݪUٓ222HJJ~> 6 >lգAHRshfK.5yc D"!B"0 ͮ$3޹sspp:Y,V__A,k Cģ>z jۻ:{,AMMM^^^&KKˑ FFFߞ_?v觞xF ygM\{!͡Ix888ibx}ʭ06&{A^f՞Zi@}}ۍS<p\hdq`|v ',< I9 O>İeFFd:ng,lܸp96l1c 60={y7lmm 裏=c)_g2iii}?CsW_}p9!^lذaǎ!Xw]0裏N,ceeTUUM?,ތeAe]R6̤, ^۷o#FFF sŒeK=...@PX a"_t [`f<</22O79[f]vfggώU!dŊxg[[['}|[tvv>c'O7p kL',,,4E"BdݺuRtb%oaɓ4Ntrr+L/^b2F랉·M>xlfgL<х.!!!@7r} BCԶgg8Б#WԗtC](mjsGa8y|}㞞GFF}}kuc@T]!^ZlL&zUQ;XZZz!jj#"|g~ ~" _bn ҥT]uxQTGF8_S>}+!D8Wg̠ s=ùoca{{õZ ޮ˫v ̇]y?tzvCl6 !wUpEY&Rkᾏ=󒒒:"y<ΞÇޯllSd?l|.>>Z>q℁t:3!! !>|833kء2((H(~7nHV7߸ŋX,k566"<<<.\{]v`& (6>Rb;A]]]4M{e|;G&A'0@<τ.]^0ƿ9;;m瘑 4~&p8f͚J Emmf"H_ 666;wTqOOLOOO.k=\$~~~΃x ޹s8ߚ^tfOO^hBuܬGI/D rr>q# S-a?/J utdxۍw|{O=Uv3]TZ%k} G;B(+رۊMsWs>{ܜo'339SVyyw||N{yyũS/\㿸kDBH$r1fw0=2u52Lm ''/~Nk|=SgCUhb\[_4YiooL"gBM$qQWÏ(,̘uͦMpixuXYAx"4{ZͶMSjuaX<  S;֕J@ ǯʣ>J,^U.YA}\:K]5NJ]Jی$-- jW]JuG+iii!bɒ%nnn:sd4҇ެ/L߹RBϧk>9{u >@9S$8u~O+_}!Z.2J$s^|Q'/ݾ[SVv=K'왩''õk+۶׮#k!cGWjڳ㏿׎68~iNH}l2?q||}WCV֮>'%Kw©0…0Kdl?Tpyصk;T\!Dhlmmr?<,[_C`c?-\ԩSNjn./'B.uZUueDqsj./WOȗ/_^woktwZ.Uu> ^?г3&3:WGkj,Ybqla׎'4O###Gg;ER9Ip~Jah@'isϬ^:ptŊ;;R9wu###sU̝+_ F0DxW-aPttȥK2^W]}'١s.]hν}{4rDG8:=gMHoc Y>> 3g.r8^d˗Ϻu]"y?=8gvCl6 !㺷p겳M2,ʬ,##f;j!GG;`Zppʕ~jOHxn l|ylnV1:JXX&Z2L򎧧sYFG~Ύq-X5ޒ]\Ο.22spuPWW=7p QJw:|͌Kϛ7X,.̌اOlhmJdXv?F2s}ȑq}^jmmMCqUL@ eNM:GGG6k\_f}K`tttb1SSSH//g~>wP'.G;wt&Qqtt#Wibi{vwwϛ7DH+ gΜ}#$ʨ#Luܘa:fyI[[[a0vЍ<ill̤Njkky<lmmƔ@@ x '''22r\I!&P( P(= o 9\\\_v#a޼yc:.;a`;ࠓSCC'00o%( g}FiN|-h$Q˱q###:=\B;=}\B ׷uvvjgQQL&ۿ?u$yɑ֦fXf u],FaTTTjj޽{̙!Zoaww3hG#)33300000q:Jz޹sg̙AeuSGƸWՖ#ۛ jZ&utt_ID D$6SG՘j6haQYO? >bWWך \]]5GR.--n$ʕ+?wlnnNNN~fd^ oee#ׯϧ(8ucL2޳۸qwWnnzqaسgB/i3ڦpkkApJ2/^c< ɓ?L'E_0 I~hiooǡL#-[>|:aĉRgL#·:n0*vv `'Gr  :}wk~1];ŋ]]]l6[T ~І H vKJJ;Blc%܎rАBȑ#!!!_Ʊ[i__?/4LEٳg㟃mlllق#x}z(<3*ʕ+=<<BίF$}ǤLGB7!>j""22Z ?=xؗD"MKvߠf,_T `"8u Zf͚u!hQԬYItCTkLooX~\sS3<% !!0Ã~x \nPP=t5Kbb/;;\~}hh(խ" ((̙3 $aQTaK$U07o `0Ǿ% VZ(_yIPH==W.I6'$$ddd!'%%a{RRiLHH0P_/>l> ;wdXV<X,|JKdڵ5kacQQi,))W\.p8"`n̎_qjkky<lmmƔ@`ccCͫ999Jppp@1LB 4 +p0^Q*eee1&&&//O$ D"ٳg/_]---۶m;vظƅF90a\\\JJJHHܼdPlllKK G IDATbpBs\YYYd2 ' Vgd2IrT* >uNw"ܻwoooojjٹ!TSS4n*JbX,ƳPKKK: +((gRrrP( xsss<3..ƒE,… +W 7mLZ9bkk[\\Hj' 3!!!p̮͛7cKKK>_ZZ3ZEzz5krssY,Vqq16fgg/^ٽ{]`<FSm5]*]幏+!y0L< 3D9<*ʪ7o1⢽`P]]_^qvv6###Ah;ʙ5kUP(jkkl6 TWW+'жSszzzr\Y`UUՂ;weQ''̞F1_U6;pvM0nQHK}>6NE"QVVap26_~?J(8ucL»֖<ؤ9wϴrH:th٬2o WfJr q9w.t>^_\T To=4u:>NL[JիWɍQKx1QNFVK$2"|,cu֮b]]]l6[T OM_&eee!6lؠᓔDZpt}^xIquuG]Ѵ43{/B:#++K.6{\:ۓWՇ%Nȑ#sy*j\1Ї>gT=Fr\;UFسgo_gb?7|a\y^G56#55dHs[/32On]Oqqի??45egebچF[}?Q>Az6 kji"3}BHz\UU{ch㕕#ڿӖ-[99o]?b+aϞ,z?Q,[ .hX{챱i:S}}aLot׸B0熆j\'`bcc`0qa!dkk%NNN{5Buqp鄇c=6]gڢEQfYJ$ pie~{Ο(kKBc6Exz8< h'm |Mnk!D@D@SAxxxZY멨'qCQ$&&R_H/((rׯUTT9sZ`mmmtt$R\jUtttTTQR l٢Q/&>>^"Q?mFFDҿ^cR :Ba~~~ll,5ѣ:0Eʖ.]~zҸtҦ&1..N^Lee' )`5bΝ,kƍO[n!z{{ܰQRXzotssz| ӗDޖr͚5S2335r3p2Dh$333;:~9qDdd{gggkk+y{666If }I N uRXX}vO.(貲2[_v[z@ Dyyy111!Ht˗kdˣze۶mǎW} 0_ťPmmmؖ<q8xss%K呑ڻ>P^+³S&ɼL&RڨT\&Ep޽v''&PMM ܺuT*b!$9TO j$ ?Ԥd\'ոjpʕ+2KKKpӦM>>>Z>q℁t:3!!Gm<쳇ڼy3vhhh  _~74UdggGGG7nnnŤqŹ,4k8:c…w޵k &`b@d$KR i|Y?ut?td2fsx&T*Ҁ?wT{@{Q#022RQQq}G'Ba`QT$һI.wT>}Gu"j;wREOJg羣AA$'K0ԟz 窭Mw˖BB^Bq/ i_Uz@S|9p?>޽:)}%;u~g҃~]rTCh\٬2!W'd06 {_ʙ/._g{)ӠqE.`c<=ƕ\E J1O˝BM] /B[w-rמN.yt=F\55Dhee=s~:ΞǛGB3ߋU ?o6w^|, L?RiGGǍ7&1D888eˇjӘ>TCKAl{7t+NFT^zUc_Ӌ/0pZ-H k0]]]W^I0+>ɷL&vuuZ/^|>]]]1-HJk$iiigdDmp uݹ~9--M=A,YMgYZZCjkkwq5ŖٳϟOKK}S[{6rT <⣏2E~o>0]y#2J$s- }Q~'.ҧUw(R޽9ks۴*,ѩ 0FOnݪǕ=P;I;?Q=zxBC= W[@D@D8u} \nPP=t5Kbb"}%ׯ UTT9sZ$PTTT```TT]R$ÿu9s+ ;::``〘d2L&ә4::,H$AH$AխZ !DɓBz"MMM===A׳X,j{t&QۜADFFFRR'%%Ƅܞ>lգAHR6ѡ?3::*:;;g1ttΝ,kƍO77>Poo6T+V߿Q''1, 1 SRRvZК5k4`;233q̙wʗgbAeCؘIx<6z )))ƆWrrr}IG_ c2u 4 7@p ;;|oooPaaaT0T*lmmIcLLL^^H$ˋADg._\#ZZZmvرq%zw! 0_ťPK,AƶX,p88lܹxkqmO}J5^+³S{{{|Oe2n8c\\n T*|#ݷo's޽{{{{SSS5XuVT*b1s=u244VPP{ϤdP( *i\h6 555y .\!nݺRL0gM6#G'&&tZ} %LHH(//Gyxx,\0???33kءҒ痖LVf͚\U\\ً/FFe˖uwwTRݻwC /Y?i>R"!LL B`τJ͛h !5###wtrQ(Dju; WML6#cȡק-g߾lHUL=ׯϧ N>w߭-))=xIsiuA2pǴ={]\zyNMUdsy<hښEh Ν_ޞ:}0ݺwח1 O}d !_ݷxHH;@[|&t:Fo=4u: :L B(8h`Ç[(\&eee!6lfJ%RRRi}铓VspŮɭquuG]Ѵ43{/B#++K.6{\0RŞ={8S(אQ" Ν;woyh>u>eWkԔ}jkmDq۴*,<3W{{ehNQ ~{\~:-dd3ZmZڶӧ!B^.L#BТEQfYJ$ 1 oaryQDroku0^>jm-W(v2yVu`^lrt!B(=}Guuuoo/xm57^O8mxٳuCN;5ׯ04âE&4#`ii=3Z1Bd|>|5X&τD@D@"4ZMA?keuwǧ.r:D͒:=ׯ_Ju ;s @I!lT*qxxp׳`SL&d:FGGa0 D`0HUV!rtzOcX,> % SRRvZК5k4h\.p84 c/p766fffR'l<fwvvBJJ@ iq% 888 LBFBA 4p0]Q*eee'bbbB"ٳ˗ki{e۶mǎW٘U0...%%%$$jlnn^d B(66Ob1p8s玌ԇ\.d2^+³S{{{|Oe2^_U*۷ep޽vggzPMM *ݺuT*bO,--uzdhh(,,IBP( 'ո8K-Z.\Xr%Bhݺud`.τ6m &-G-..NLLjĉJ限P^^Xpa~~~fffWW͛CCC%/--ՙD"==}͚5,/^X:{]vƋv~|ݥRŴ\_Xxڒ҃}!DGyd8w,N"%‡zx&KkGA` ޺u;@A7~%;@;wq8X`ww?qHK_CwO.YYYk6{&B\!{8,N.oammCw7LG bRg2zL#BPj߷oBiDH23RU%~!kכY`"x<+77 ^^bٳ9ReXV+r̭[@ 5u{ b'fC=Z?<<СC,4rI{zzRjkkΜ9C-" /X@# T*WZ5<< l ރ=>>^"t@L 2L>t488X ? D"d t[jAH$ɓU, Y,%MMM===2H$%%eddcǎUFPݱl6{tt~Ǵ>2|&3ܹbmׇܸu떛x JbŊS3w{{{IO>V!cX~jR@@NxIvڵ^zD_HD.s8{&`K#sqq~z[[6j'NDFFwvv޳HI|$Bn߾F`"T*eee1&&&///44ɓ111MMM"ٳ5^Z $&&~@]---۶mrvR[[ݻ^:'^WW 0Ѹyɒ%薖<' 8Ott4B(66{C.GFFVVV2L_|' VgL& ۏT*F`."ܻwoooojfs}}=B觟~[nJbX,#b%B jjj j$ eggϚ5 [BP(ij\<_]hѸN… +W.e:i&`RYYiggW\\Hȉ' pw}WV UUU! ~G_~eWW͛CCCePPP(ڱcB 'Q^xqnn݁tVTݻwC  ("IwwwTjaa@׃YDT#ɠs_! BxX1gr iPOOAuu5|į IDAT!4?͛7;wP P(jkkl6 TWW+'жf̘1k,xDBbmmK|s**M ͛Mc,ښEh Ν_ޒ:}0庯Ϲn߾ JgB$\ˢN|ݴg}`"|DFnN=KƍΛL[8]7~ ?bG`.?rv^ĞNZZkfxz]U/æS!(h /`,xu^}a޴4 E}7oL:_Tg}nrpp |Bᄏtٳ}d랞謫@.a?4(blBz999ٕyTf>vvo%˗k`> z}uUXx@.aFD̟=ԧ'66T(< xDڼSyz޹v F!ǻ?WUөgn}S&+ xDhkkg{O2zF}j4LO"/QW4rBaJ/jZN;…z@!yTKOOҥh{iv2׋/0C>O 6nb {gtg,0L>ހ`>!!p///l/((rAAA\.СC,uznٲӓVQQwj0J2***000**jhhj^jih\>Lfߎ[X!L& 8/2 DBD"a0[qqҥKd/^nMMM===A׳X,j{4ۜADFFFRRNFLcҨ:::gttT&uvvϤcΝ;֮]tssû0aJZn]ff&5NψX,|?$LQQnؚ5k4/iF.kܓ0y133x<6z+ )))_ 5NODFF+IP&P(A{{{HBCC}||Bo& ,fJetttYY iDyyy111!HtY#mOl۶رcJ;raӦM=?0a\\\JJJHHܼdPlllKK sΝ;!pFFFtzPHdddeevF@  8Fdij?4 Fĸb azJ500`ooo>`s ޽{{{{SSS5>>#* ?'&&tZ} %|B .ڼǏ  I X$ً/eXTcvvSYYBɓ4Ncݻw 4>=}:KׯOs'FiBσw''C0@" /]$ư_=E /9L"###AgC?QT"ڽ{O.Bh,֖oiH$* ^vmOKˑcD8%ܺukǎO.MϢJ1["SB_Vg© ?? ‰OsС>/t=@--zXw0b̳ϮN*[ǩX9sLccիB?cuu5BL A_FGߤgyg?/X`S+<uttܱcce`"[,?`"VZyL#BΝ[/_>rv>F4M kUVnH?|EYDr-oku1N]׮N!sm޼Z.g/-pɒ?N-<MNaF2<<w4 !!xPE3VVV^PPr\CY?uz_>44VQQwj0CCCQQQQQQCCCبT*I06ر ;::``〘d2L&ә4::,H$AH$AխZ !DɓBz"MMM===A׳X,j{t&QۜADFFFRR'%%Ƅܞnz6ѡ?3::*:;;g1Iwww???m`UUv9s5p555d]NNNaaaՙ===c?/TnB66g ;֦GEEil($%P[[ξ}"(+08xF_?Sɷ N9a|9%%6i`Ν:?3m\=cڦgtT\W_U̚+ɵ2 &ƽηܹ҂O?3x^TL={]\zyѿ\E J1RڦFkk-;w~y{NtwsUhz;00Ξ{Zg“'ho}!B}CB Tqƍb<nAdp̀iI__T*f*·:nW (ʫWbӣpZH$dDX0hww߭]D˻lR{gԕEP(KNt:*\3pz[:S3ڎ=ԤPN NZ+uTZ^T 6 $H=i"PH 6kW[T* !۷oIJJb,4'NLp K_p^{exѩ^{<#nj5j*-9k֢<`وV)zYߞCzoZ\\ !_/ױX+׮-ccꡡ~={W׷ĄQJoUvӹfիN1]+3ロoΎ.Tez>w񄆡Lfbrr?cѨH$b)|>L([n%$''Rcii)c0Q~.;2pbP&D;`io~4T訛ר IgfU놆# ݘǏ߽{7zXOBZUUUbkⶶ☘BH[[ۥKz5++رcJ!ӕp֭CWb8---88XҲqFBHlllkk+) .KC↞Q[[k^T*sEttDl61:99NNN;#sXDRnnn ̮.BP((.ciF*x<RSStpD":^_6661FGGPP~WO=!gH?ew'==7((=zb'&&MLL8QτjBwdddIID"Ƞ"hx29906lFF۷_Fu= Ih(JTX3 ju]]ݍ7500\w LNNqehhĺXwQC躣y_wnbQemϦ~s#]w7Zu  i !/mmmǃ+k';}po-9~/W+**v⋿450lht)H埾n-߲@Vx啢'>~xV˦Y}-hZRtoSmh}!Dn3g]qru}__Uo{fJu%Dho|;0b=○z\.hZSWLm^01SQ(:yDpp pttt׮;QXFmvvt, B:zj=1;l?sVR)5NLLROپ}ORRc}?ѧpbkX¯Zr-݋#LMMk?š D٢V% W:=z4,,轏9k4C1>t000g slrLQ78ȝۤS{M=֭/=6BHS߲@I_U|Y:~\wohONNnO=UaomA4Cw/"?:8ʽR*'&fmY+ٟ}8*ˈbZ@`B\g75PXFhvv6XߞCzoZ\\ !_/ױX+׮-ccꡡ~={W׷ĄQJoUvӹfիNmqJ}xx ϗ_9:շn|mgGe,sLq1xBP&xB3D1991p~XbxB|xBk{B8n~y3=1u<6LJwu}]ŋW~=6և6>>Ǹ'61V^GzLMM+]IQ(zg{fWB:;ʕ_~I_4},'V Sxk?sGeqq>ϝZם!7<׽.6'O6whu3` &>>\c_:#߫NSmww+ocooq/<Ǩ'VNph4cZV%hHˁ(eMK!!` 0<<\<ޞe2@ ;rnD///O)))!!!n555|>_ ={V&(F( BF\b͚5zݨjCO0~߈D"=}z=Ae2D=nOk(Hd'<4ھFO>$|q.5]JR4455$JCggVtpp`.\eBs'O7<00j8ny&9!!!77W&%%1dy{_>SSSJg}׾˗/g$JQ'0D=== .Y}iM4V=|p\\bfgg Bgڵ.]vZs5k֌Ш'=&o߶3Z$󸸸 jZJlz"p8yB3az^իWSݞܬT*t{Lz2ܔ1;;;2/=Fj>>>s'ljjH$݌ӳҤR5 IDATݨ #""f422LaCCC&N>444CO0gݱ'\ڵk/_=Gah??>uuumll ㏵Zmii)j=9'aKK͛7 ˣ{[[IV;99ikkkIhO;|w=A}?ӣt=KKKJÇu{'g}fpe2//<7UB0;;[۷zjBĄ~o(¾>777ݱS$D844;p"OxxnO===z=LJ JJZ---FG'26'}]"|7|ϟ?j˧$SOjǧҰ㏏2Xz5SO=E3::j W'oyy RO_=i&۷lٲ|P:I@@@WWӾnݢ5]geeڵkb7b+j666_| bD֫꺺7nBLx Grxzћ߅,Є/vqq# ϏL|pС</srrf3S!Vdd|Hȯ0/7Xͽ֡ub~8|ARSSwqI(9ؘB+pI`Vvtt8Q~sXO'¬"ݻ;Qw97/*-ݻsm{~*.'7W}nsNwj.筷DVFUU}}}|Rɘyƍ|RΜQg!ʕ+nyQWWWBo鏮]SBEw9>RYaOO"$JorԼW, B9;Rrs_BU[X$rVZmT1gkBa4#/pUao6#cWOO v53) }Q ]"gϞϝ;R!Vp>?Ӛb]]ݏڙx?)"4stt4V7>K+VDGGg~WI;!""@@,#px<{{{jd~~~ȑ#Y,Qϔ]>/Ξї&(F( BFCj1<sY$J컳qp–-[NF=O<)uoy``l,Ne4I t?䤤$jOJJb 39v|~ p8;v?=<hF.a -tll VNxI(XnZ"8q2!a+ X]]]ׯ_˝D8::w;wf̀U288E wٶ{eh-`ꎎfa%B:s}^h'`LLLtvv2E}}}|Rp߿D~}wn8}Ot;;k%BB+d>>e>XAS{k,zX$5j*9d7gkBa4`Xz Q sT*!p),Xm >3jkXm """@@.x^ZZJ9%11QtL癒f]>/Ξ7QQQF(jz˖-QQQBYGV @]] baMM ݒŋ,+77d2\.LLLd֫JJJܼy tl3gryIIIlln~h4m۶說ܬkz`srr8Ύ;+Wy&!DRyxxPM._l\fH$;?guKb |3FDg\n}C …I"tww3//v(J&(,,n钆YnhhƉX3j:**b1R8&&vҥx111ź&hmm:vجrⴴ`]˗!tP(\.%p\xKKƍu=?""f% &IR:WDGl6{dd2<DۛAmmm\._{ã1nذ0?MMMooȒt#S@d=|fzDwBDD̽ZX.!uvTզJVJcb0(X.wO?=y=P >FGGoݺEwUVlޜGWWWwwrgo_h-` vuuѐ%BVs_v֍Z["1DggBVOWc2m/zzzFF*} GSS]CÀ;;kj ޽/2>~-GGGY2O,+33#//h$`Ÿz{{ذXDH~&a4>WZ1uڿ[0&ibfʆ( fDQnhhG B`5 DDD!!""\8?]& ??#GfILLb4ꙒVSSA@@ٳguOh"hBa``P(dQՌqllq|z!Tkjj/^dXԞTYY)+++Uzn޼CfϜ9#KJJbccg*..9...%%mwEliiiiiyꩧГRp8;v?=<< !*Ã7mtzD"9=ab֭Rj,--eԸgDBV^挹wejjjH$݌ӳҤRn^&(,,n'FFFh`fVb###/JVXQRRPVGEEUUUX,S\\V\\CikktR||^vCOfee;vlVInllӟpfpiiiƖ7Bbcc[[[OPp\.K KzNGDDDmm-6$J\:99уa&/fNNN"iat,^Tl=[CC!4233KP( : zEфd2wǤT:]D"Wƨctt4579<-ެb龾AAAѣ,<11nbbz&$$TWWB###KJJ$IoooFFuhllDFt/䢢"Llذ !oO<7>>^YY "3#D# B Bcg꺺7n(}g Xb"|=<..nӾ1O}}Cxx8a"{+22>$WxZ;S''@,#Ž'*GGG}}lT:9۶`o DH'c 5D'Ub"tww_>, Go鏮]S !}ۨt,#B9t,#BBX, QXF0VI,fdvqqE,BkEk!!dϞϝ;R!~o1_ mXVN!!""@@@fRxxx<=d2???@w,^^ZƨgJJJHH[MM gKqIF# BFFZXlfvaP*JhTPPT*>Zqp–-[!yz/Ξ={š>/q$Z [l`G0(JR9+ TJtppT* ۅ l٢[˗744hNɓS,ZUUUZ薤y``@T~'zI\VgϞ`r;ԔRϼ999gǎOAB͛7=<?<_ }7'Սas(y|}嗳, ,.>Y\yRoo9}Ν{s'J;!zjiXS厎=~GGGXSj^؝mo ,v))/XYg=p ^wt2Eǟ\mMgg->Ύ/ }ԚTP46n{t/0,<;>5zf]t2Db^|qo챦ٷ4!!d͚5Ot&07ZMM =j|>nKIJJꫯ֬Ys_[lfݭ)_ubgΜp8Ѻ{% ,m۶7x#%%weO?tAAc$rt#$999[~3]IRyxxP3<#Ht3\n.|>Ѓ&QJKKiKKKO?4c`= )MMM+E IDAT{zzScZZڟgݼF=MPXX1!UftNNN&$$d%%%O`i< juTTTUU#c)..nkk+..!]t0YYYǎUollLOObqZZZppeƍXVZZP(!\.wrrҨ DDDF0%IR@ FFFSqdd1 M6)Jt&4DRnnn ӞU_____OQ(F=hBCCe2ǻcRjj\.trr.**UXL}OL ީSݱX"龾AAAtޅX<11nbbzhjj"x{{GFFH$ތ p [[[@  6lPTTpuUUU'O߿ΎZ6Zv!λ8#3gVkcc7 %N!K.y7(E"j=(DP>|>!9zG!͛oy(;t@注.Z+;55 2"|O=j 𣏎?z, ¶-w, B: eD}{jbL`1Iߤ eǎC^C`BCC? !/@`B23t;},#B%G*$ RpIѿALǕ+Q >ߏxLBN!!""@@*px<{{{jd~~~ȑ&&&zyy1LII u k"hBa``P(h4ԨV5ٳI`hRT*&MMMIR٩j;;; .lٲœǨɓ'r477 hچ[IeNHHjIIIԞhyhw}8{_>SSSJ>999gǎOABJM6>|X7QOHS|>á3LTTTlݺ\ZZJW\I9I"tww3zOOϞvjLKKJyz0""bVI###΄6=44Ȍ10/ґ#GzzzZ[[ѓҘQQQQUUU,1B.]YYYǎUҬx XbqZZZppeƍXH)--U(\.Bh tGDDֲlIRѩ=flw͛7 ERnnn ̮.BP((.liF*x<RSSr\.NHTTTDǫb2hjlkk'O4by'LOO b,GeX剉vvveee&`3!!YRR"Hz{{322CccH$4{'''q8rj,((ذa5R5¯>'i6Zv!΋x+j666Y̒jƍn]SthZJu7LO2x]\\_,""ZQ < ފ ,)zԩӓP &FGGoݺ4DqDeBV4&_>;ptttwFdppkOwl2VjuGG0!>/n&&&:;;"¾O>d {_\"tww_>,%/Ϟ>ѵkJ4n֮]Kc !}h'`8::888*Db?p MWWWooo !>>>bH&+Dk{ժU666snքH[[ &i5bf(VEAٳsΩTC"S_xbR{RRRee\.LLLdV2yffK] >s\./))a%333..9...%%mwe,hNNٱccppR<<p ([n%$''Rcii)c0QB怹($Iww7ciooƴ4T訛ר IgfU놆Ȉ؟j:**b1Ƙⶶ☘BH[[ۥKz5++رcJ!ӕ.BXkliiٸq#!$66 r0tGDDֲlIRѩ=fldXB.;0T*Uv^nnn ̮.BP((.ciF*x<RSStpD":^'661FGGPPayNX=b&&&LgBBBuu5!;22D"fddPF[[[HTYYi4IONN.**p8̤kAA y"Y !!`̺jƍ|.s_h9`nԩ[Q < ظ,~._nwSNON:@XF'NT&$lE`Ν٨t,#ݻsm{~* Nwj O0D~}۟=}kהq,#BB+d GenomeTools

    GenomeTools

    The versatile open source genome analysis software

    [Genome Annotation]

    The GenomeTools genome analysis system is a free collection of bioinformatics tools (in the realm of genome informatics) combined into a single binary named gt. It is based on a C library named “libgenometools” which consists of several modules.

    If you are interested in gene prediction, have a look at GenomeThreader.

    Platforms

    GenomeTools has been designed to run on every POSIX compliant UNIX system. For example, Linux, Mac OS X, and OpenBSD. A Windows version which requires a Cygwin installation is available. Please report problems with it to our mailing list.

    Published software in GenomeTools

    The GenomeTools distribution includes several published software tools:

    • ltrharvest, an efficient and flexible software tool for de novo detection of LTR retrotransposons.
      D. Ellinghaus, S. Kurtz, and U. Willhoeft.
      LTRharvest, a efficient and flexible software for de novo detection of LTR retrotransposons.
      BMC Bioinformatics 2008, 9:18
    • tallymer, a collection of flexible and memory-efficient programs for k-mer counting and indexing of large sequence sets.
      S. Kurtz, A. Narechania, J.C. Stein, and D. Ware.
      A new method to compute K-mer frequencies and its application to annotate large repetitive plant genomes.
      BMC Genomics 2008, 9:517
    • uniquesub, a program for computing minimum unique substrings.
      S. Gräf, F.G.G. Nielsen, S. Kurtz, M.A. Huynen, E. Birney, H. Stunnenberg, and P. Flicek.
      Optimized design and assessment of whole genome tiling arrays.
      Bioinformatics 2007, 23(13):i195–i204
    • AnnotationSketch, a library for drawing genome annotations.
      S. Steinbiss, G. Gremme, C. Schärfer, M. Mader and S. Kurtz.
      AnnotationSketch: a genome annotation drawing library.
      Bioinformatics 2009, 25(4):533–534
    • ltrdigest, a software tool for automated annotation of internal features of LTR retrotransposons.
      S. Steinbiss, U. Willhoeft, G. Gremme and S. Kurtz.
      Fine-grained annotation and classification of de novo predicted LTR retrotransposons.
      Nucleic Acids Research 2009, 37(21):7002–7013
    • MetaGenomeThreader, a software to predict genes, such as PCS's (predicted coding sequences) in sequences of metagenome projects.
      D.J. Schmitz-Hübsch and S. Kurtz.
      MetaGenomeThreader: A software tool for predicting genes in DNA-sequences of metagenome projects.
      In R. Daniel and W. Streit (Eds.), Metagenomics. Methods in Molecular Biology, 325–338, Humana Press, Totowa, NJ, ISBN 978-1-60761-822-5
    • GtEncseq, a compressed biosequence representation with many features.
      S. Steinbiss and S. Kurtz.
      A New Efficient Data Structure for Storage and Retrieval of Multiple Biosequences.
      IEEE/ACM Transactions on Computational Biology and Bioinformatics 2012, 9(2):345–357
    • Readjoiner, a sequence assembler based on the assembly string graph framework.
      G. Gonnella and S. Kurtz.
      Readjoiner: a fast and memory efficient string graph-based sequence assembler.
      BMC Bioinformatics 2012, 13:82

    The following software tools are based on the GenomeTools library:

    • ParsEval, a tool for comparing genome annotations.
      D.S. Standage and V.P. Brendel.
      ParsEval: parallel comparison and analysis of gene structure annotations.
      BMC Bioinformatics 2012, 13:187
    • LTRsift, a graphical interface for working with LTR retrotransposon predictions.
      S. Steinbiss, S. Kastens and S. Kurtz.
      LTRsift: a graphical user interface for semi-automatic classification and postprocessing of de novo detected LTR retrotransposons.
      Mobile DNA 2012, 3:18

    Contact

    The GenomeTools are being developed by:
    Gordon Gremme, Sascha Steinbiss, Stefan Kurtz and others
    Genome Informatics Research Group
    Center for Bioinformatics, University of Hamburg

    genometools-1.5.1/www/genometools.org/htdocs/license.html000066400000000000000000000070471211610345200236150ustar00rootroot00000000000000 GenomeTools License

    GenomeTools License

    /*
      Copyright (c) 2003-2013 G. Gremme, S. Steinbiss, S. Kurtz, and CONTRIBUTORS
      Copyright (c) 2003-2013 Center for Bioinformatics, University of Hamburg
    
      Permission to use, copy, modify, and distribute this software for any
      purpose with or without fee is hereby granted, provided that the above
      copyright notice and this permission notice appear in all copies.
    
      THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
      MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
      ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
      WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
      ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
      OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    */
    

    Our copyright policy is modeled after the one of the OpenBSD operating system. We chose one of the most simple and free licenses, the ICS license. It is functionally equivalent to a two-term BSD copyright with language removed that is made unnecessary by the Berne convention.

    To ensure that GenomeTools remains absolutely free, we will only accept contributions which have been put under this license.

    We use external sources which are covered by their respective licenses. See LICENSE file for details.

    genometools-1.5.1/www/genometools.org/htdocs/manuals.html000066400000000000000000000057301211610345200236300ustar00rootroot00000000000000 GenomeTools manuals

    Manuals

    A general description of GenomeTools design guidelines and development best practices can be found in the following document:

    We also provide user manuals for some specific tools in the GenomeTools:

    genometools-1.5.1/www/genometools.org/htdocs/style.css000066400000000000000000000043271211610345200231550ustar00rootroot00000000000000body { font-family: Verdana, Geneva, Arial, sans-serif; } h1, h2, h3, h4, h5, h6 { color: gray; } #footer { font-size: 66%; text-align: center; margin-top: 20px; background-color: #DDDDDD; } img { border-style: solid; border-width: 1px; } #menu { float: left; clear: left; width: 180px; padding-right: 20px; } #menu li { list-style-type: none; margin-bottom: 10px; margin-left: -18px; } #menu li a { list-style-type: none; border : 1px solid black; display: block; padding: 4px 15px 4px 15px; text-decoration: none; } #menu li a:link { color: white; background: rgb(60%, 60%, 90%); } #menu li a:visited { color: white; background: rgb(60%, 60%, 90%); } #menu li a:hover { color: gray; background: rgb(90%, 90%, 20%); } #menu li a#current { color: gray; background: rgb(90%, 90%, 20%); } #menu ul.submenu li a { font-size: small; background: rgb(70%, 70%, 90%); } #menu ul.submenu li a:hover { color: black; } #main { margin-left: 220px; margin-right: 10%; line-height: 1.6em; } #main a:link { color: blue; text-decoration: none; border-bottom: thin dotted blue; } #main a:visited { color: gray; text-decoration: none; border-bottom: thin dotted gray; } #main a:hover { background: rgb(90%, 90%, 20%); } #examplesketch { text-align: center; } #examplesketch img { border: none; display: inline; margin: 5px 0px; } #examplesketch a:link, #examplesketch a:hover { text-decoration: none; border: none; background: none; } pre { line-height: 1.3em; } pre.code { line-height: 1.3em; background-color: #DDDDDD; padding: 15px; } /* Figure environment for library documentation. */ div.figure { position: relative; width: 650px; margin: 20px auto; background-color: white; line-height: 1em; } div.figure p { text-align: center; /* font-style: italic; */ font-size: smaller; text-indent: 0; margin:0px; } div.figure img { border: thin solid black; padding: 10px; margin: 0px; } div.figure img.noborder { border: none; padding: 0px; } div.figure div.subfigure { width: 300px; float: left; margin:12px; } div.ref { font-size: small; color: #444; line-height: 1.1em; } ul.pubs li { margin-top: 10px; line-height: 1.2em; } genometools-1.5.1/www/genometools.org/htdocs/style_options.html000066400000000000000000000343651211610345200251110ustar00rootroot00000000000000 The AnnotationSketch module

    Per-type settings

    These settings must be given for a specific type, e.g. for the gene type it could look like this:

      gene = {
        stroke             = {red=0.0, green=0.0, blue=0.0, alpha = 1.0},
        stroke_marked      = {red=1.0, green=0.0, blue=0.0},
        fill               = {red=0.9, green=0.9, blue=1.0},
        style              = "box",
        collapse_to_parent = false,
        split_lines        = true,
        max_num_lines      = 10,
      },
    

    Color options

    These settings need to be set to a table with the red, blue, green and alpha keys. Alternatively, they can be set to a Lua function which returns such a table, given a FeatureNode object of the current element:

    fill = function(gn)
             if gn:get_score() then
               aval = gn:get_score()*1.0
             else
               aval = 0.0
             end
             return {red=1.0, green=0.0, blue=0.0, alpha=aval}
           end
    

    which would scale the transparency of the red element with the score value of the associated feature. The following settings are available:

    • stroke = {red=redval, green=greenval, blue=blueval, alpha=alphaval}
      Sets the outline color of elements of this type to the given RGBA color. All values must be decimal values between 0 and 1.
    • stroke_marked = {red=redval, green=greenval, blue=blueval, alpha=alphaval}
      Similar to stroke, but applies only to marked elements.
    • fill = {red=redval, green=greenval, blue=blueval, alpha=alphaval}
      Sets the fill color of all elements of this type to the given RGBA color.

    Drawing options

    • style = "box"/"line"/"rectangle"/"dashes"/"caret"
      Defines the visual style in which the elements of this type are drawn. Possible values are:
      • "box", which draws the elements as an box with arrowheads depending on their strand property.
      • "line", which draws the elements as straight lines with arrowheads depending on their strand property.
      • "rectangle", which draws the elements as a box without arrowheads.
      • "dashes", which draws the elements as straight lines with arrowheads depending on their strand property.
      • "caret", which draws the elements as a '^'-like glyph (often used for introns). Arrowheads are drawn depending on the strand property.
    • bar_height = value
      Sets the height of elements of this type to n pixels/points.
    • z_index = value
      Sets the z-index of the given type. The z-indices of collapsed types determine the order in which features are drawn on each other. Particularly, element with types with higher index numbers are drawn on top of elements with lower-numbered types. Elements whose types do not have a no z-index are always drawn below those with indices and their internal ordering is determined alphabetically.

    Track layout options

    • collapse_to_parent = true/false
      This boolean value determines whether the elements of this type should be drawn on top of their parent type's elements. This property can be used to recursively collapse feature trees by setting it in the parent type to true as well.

    Caption options

    • max_capt_show_width = value,
      This value determines up to which zoom width block captions are shown. If the width of the displayed sequence region (in characters) exceeds this value, then captions are omitted. If set to 0, captions are never shown for this type. If set to nil, then captions are always shown.
    • max_show_width = value,
      This value determines up to which zoom width blocks of this type are shown. It behaves just like max_capt_show_width.
    • block_caption = string/function
      This value determines how a block caption of a block of this top-level type should be generated. For example, it can be set to a Lua function which returns a string and receives a FeatureNode object of the top-level feature in the block:
      block_caption = function(gn)
                        rng = gn:get_range()
                        return string.format("%s/%s (%dbp)",
                                             gn:get_attribute("Parent"),
                                             gn:get_attribute("ID"),
                                             rng:get_end() - rng:get_start() + 1)
                      end,
            
      This function creates a block caption which consists of IDs of the parent feature and the feature itself followed by the length of the feature, for example:
      gene1/mRNA1 (3400bp)

    Per-image settings

    Layout options

    • split_lines = true/false
      If this option set to false, all blocks per track are drawn in one line, instead of breaking lines if blocks overlap.
    • max_num_lines = value
      This value limits the number of lines per track. If the line breaker tries to create more tracks that set here (e.g. if many blocks overlap or if the displayed range is extremely wide), no more tracks are created. If the existing lines fill up, no more blocks will be drawn and the number of discarded blocks will be displayed next to the track title. This can be used to prevent the layouter from generating images of extreme height if a lot of features is packed at a very far zoom level.

    Ruler options

    • ruler_font_size = value
      Defines the font size (in pixels/points) of the top ruler.
    • ruler_space = value
      Defines the amount of vertical space (in pixels/points) between the ruler and the first track.

    Caption options

    • show_block_captions = true/false
      If set to false, no block captions are shown at all for all type tracks.
    • block_caption_font_size = value
      Defines the font size (in pixels/points) of the block captions.
    • block_caption_space = value
      Defines the amount of space (in pixels/points) between a block caption and the corresponding block.
    • show_track_captions = true/false
      If set to false, no track captions are shown at all.
    • track_caption_font_size = value
      Defines the font size (in pixels/points) of the track captions.
    • track_caption_space = value
      Defines the amount of space (in pixels/points) between a track caption and the lines in the track.
    • track_title_color = {red=redval, green=greenval, blue=blueval, alpha=alphaval}
      Defines the color in which track captions are drawn.

    Image options

    • background_color = {red=redval, green=greenval, blue=blueval, alpha=alphaval}
      Defines the background color of the image. If PNG output is used, this alpha value can be used to produce images with transparent backgrounds (e.g. for layering).
    • margins = value
      This value defines the amount of space left to the left and right of the diagram (in pixels/points).
    • bar_height = value
      Defines the default height of a single line (in pixels/points). Can be overridden by a per-type setting.
    • bar_vspace = value
      Defines the space left between lines (in pixels/points).
    • track_vspace = value
      Defines the space left between tracks (in pixels/points).
    • arrow_width = value
      Defines the width of an arrowhead in the "box", "dashes", "line" or "caret" element styles.
    • stroke_width = value
      Defines the width of the outline of an element.
    • stroke_marked_width = value
      Defines the width of the outline of a marked element.
    • default_stroke_color = {red=redval, green=greenval, blue=blueval, alpha=alphaval}
      Defines the default color of the outline of an element. Can be overidden by a per-type setting.
    • show_grid = true/false
      If set to true, then light vertical lines are drawn at minor ticks of the ruler for better orientation.
    • split_lines = true/false
      If this option set to false, all blocks for each type are drawn in one line per type track, instead of breaking lines if blocks overlap.
    • min_len_block = value
      Defines minimum pixel or point size of a block in which single collapsed elements are shown. If a block is more narrow then this threshold, only its outline will be drawn and its outline will be dashed. Set this to nil to always draw all elements in collapsed blocks.
    genometools-1.5.1/www/genometools.org/htdocs/trackselectors.html000066400000000000000000000167241211610345200252250ustar00rootroot00000000000000 The AnnotationSketch module

    Track selector functions

    This page explains how a special kind of function, called track selector function, can be used to customise the AnnotationSketch output by using arbitrary features of a block to assign blocks to tracks (and implicitly creating new tracks this way).

    Default: Top level type decides track membership

    By default, for each block in a Diagram, its source filename and/or the type attribute of its top level element decides into which track the block is finally inserted during the layout phase. So by default, an annotation graph parsed from the GFF3 input file ‘example.gff3’ with gene, mRNA and exon type nodes will be rendered into two separate tracks (exonmRNA collapsing enabled, see Fig. 1):

    • example.gff3|gene and
    • example.gff3|mRNA
    We will call the second part (after the “|”) of these track titles track identifier strings in the rest of this document.

    [Basic drawing]

    Figure 1: Default AnnotationSketch output for a simple GFF3 file with simple exonmRNA collapsing.

    While automatically determining tracks from the types actually present in the input annotations is convenient in many use cases, one could imagine cases in which more control about block handling may be desired. This leads to the question: How can one extract blocks with specific characteristics and assign them to a special track? The answer is simple: By overriding the default track identifier string, new tracks can be created and named on the fly as soon as a block satisfying user-defined rules is encountered.

    Track selector functions

    These rules take the form of track selector functions. Basically, a track selector function is a function which takes a block reference as an argument, and returns an appropriate track identifier string. For example, in Python the default track selector function would look like this:

    def default_track_selector(block):
      return block.get_type()
    
    This function simply returns a string representation of the type of a block's top level element, creating the tracks just like depicted in Fig. 1.

    For a very simple example, let's assume that we want to create separate tracks for all mRNAs on the plus strand and for all mRNAs on the minus strand. The idea now is to change the strand identifier for blocks of the mRNA type to include the strand as additional information, thus creating different track identifiers for plus and minus strand features. In Python, this track selector function would construct a new string which contains both the type and the strand:

    def strand_track_selector(block):
      if block.get_type() == "mRNA":
        return "%s (%s strand)" % (block.get_type(), block.get_strand())
      else:
        return block.get_type()
    
    Using this track selector function would produce the desired result of separate tracks for the mRNAs for each strand (see Fig. 2).

    [Strand Track Selector]

    Figure 2: AnnotationSketch output with strand_track_selector() track selector function. This image now shows separate tracks for plus and minus strand features.

    A track selector function can be set for a Diagram object using the diagram.set_track_selector_func() method. In C, its argument is a pointer to a function of the signature const char* (*GtTrackSelectorFunc)(GtBlock*, void*) where arbitrary data can be passed via the second void* argument. The Python set_track_selector_func() method directly accepts a Python function as an argument, while the Ruby version takes a Proc object:

    ...
    strand_track_selector = Proc.new { |block, data|
      "#{block.get_type} (#{block.get_strand} strand)"
    }
    ...
    diagram.set_track_selector_func(strand_track_selector)
    ...
    

    Note that in Python and Ruby, it is also possible to reference data declared outside of the track selector function. For example, this can be used to filter blocks by pulling blocks whose description matches a pattern into a separate track:

    ...
    interesting_genes = ["First test gene", "another gene"]
    
    def filter_track_selector(block):
      if block.get_caption() in interesting_genes:
        return "interesting genes"
      else:
        return block.get_type()
    ...
    diagram.set_track_selector_func(filter_track_selector)
    ...
    
    This code results in the following image (Fig. 3):

    [Filter Track Selector]

    Figure 3: AnnotationSketch output with filter_track_selector() track selector function. This image now shows a separate track for features with a specific caption.